aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.inc127
-rw-r--r--ObsoleteFiles.inc2
-rw-r--r--bin/ed/Makefile6
-rw-r--r--bin/expr/expr.y1
-rw-r--r--bin/ls/Makefile5
-rw-r--r--bin/ps/keyword.c1
-rw-r--r--bin/ps/ps.14
-rw-r--r--bin/rcp/rcp.c1
-rw-r--r--bin/sh/Makefile2
-rw-r--r--bin/sh/miscbltin.c1
-rwxr-xr-xbin/sh/mkbuiltins16
-rw-r--r--bin/uuidgen/uuidgen.19
-rw-r--r--cddl/contrib/opensolaris/cmd/zfs/zfs_main.c2
-rw-r--r--cddl/contrib/opensolaris/cmd/zpool/zpool.84
-rw-r--r--cddl/contrib/opensolaris/cmd/zpool/zpool_main.c254
-rw-r--r--cddl/contrib/opensolaris/cmd/ztest/ztest.c1086
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h3
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c2
-rw-r--r--cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c33
-rw-r--r--contrib/bind9/CHANGES59
-rw-r--r--contrib/bind9/README4
-rw-r--r--contrib/bind9/bin/named/builtin.c210
-rw-r--r--contrib/bind9/bin/named/query.c5
-rw-r--r--contrib/bind9/bin/named/server.c2
-rw-r--r--contrib/bind9/bin/named/unix/dlz_dlopen_driver.c2
-rw-r--r--contrib/bind9/lib/bind9/api2
-rw-r--r--contrib/bind9/lib/bind9/check.c2
-rw-r--r--contrib/bind9/lib/dns/api2
-rw-r--r--contrib/bind9/lib/dns/dnssec.c2
-rw-r--r--contrib/bind9/lib/dns/include/dns/ecdb.h4
-rw-r--r--contrib/bind9/lib/dns/include/dns/rpz.h2
-rw-r--r--contrib/bind9/lib/dns/include/dns/sdb.h5
-rw-r--r--contrib/bind9/lib/dns/include/dns/stats.h2
-rw-r--r--contrib/bind9/lib/dns/include/dns/tsec.h4
-rw-r--r--contrib/bind9/lib/dns/include/dns/view.h2
-rw-r--r--contrib/bind9/lib/dns/rbtdb.c2
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/tlsa_52.c290
-rw-r--r--contrib/bind9/lib/dns/rdata/generic/tlsa_52.h35
-rw-r--r--contrib/bind9/lib/dns/resolver.c228
-rw-r--r--contrib/bind9/lib/dns/sdb.c91
-rw-r--r--contrib/bind9/lib/dns/tkey.c4
-rw-r--r--contrib/bind9/lib/dns/zone.c124
-rw-r--r--contrib/bind9/lib/isc/pthreads/mutex.c16
-rw-r--r--contrib/bind9/lib/isccfg/api2
-rw-r--r--contrib/bind9/lib/isccfg/parser.c24
-rw-r--r--contrib/bind9/version2
-rw-r--r--contrib/byacc/ACKNOWLEDGEMENTS (renamed from usr.bin/yacc/ACKNOWLEDGEMENTS)0
-rw-r--r--contrib/byacc/AUTHORS7
-rw-r--r--contrib/byacc/CHANGES1156
-rw-r--r--contrib/byacc/Makefile.old84
-rw-r--r--contrib/byacc/NEW_FEATURES (renamed from usr.bin/yacc/NEW_FEATURES)4
-rw-r--r--contrib/byacc/NOTES (renamed from usr.bin/yacc/NOTES)0
-rw-r--r--contrib/byacc/NO_WARRANTY3
-rw-r--r--contrib/byacc/README (renamed from usr.bin/yacc/README)6
-rw-r--r--contrib/byacc/VERSION1
-rw-r--r--contrib/byacc/aclocal.m41144
-rw-r--r--contrib/byacc/closure.c (renamed from usr.bin/yacc/closure.c)121
-rwxr-xr-xcontrib/byacc/config.guess1511
-rwxr-xr-xcontrib/byacc/config.sub1760
-rw-r--r--contrib/byacc/config_h.in3
-rwxr-xr-xcontrib/byacc/configure5973
-rw-r--r--contrib/byacc/configure.in30
-rw-r--r--contrib/byacc/defs.h438
-rw-r--r--contrib/byacc/descrip.mms37
-rw-r--r--contrib/byacc/error.c288
-rw-r--r--contrib/byacc/graph.c112
-rwxr-xr-xcontrib/byacc/install-sh294
-rw-r--r--contrib/byacc/lalr.c655
-rw-r--r--contrib/byacc/lr0.c (renamed from usr.bin/yacc/lr0.c)226
-rw-r--r--contrib/byacc/main.c664
-rw-r--r--contrib/byacc/makefile.in182
-rw-r--r--contrib/byacc/mkpar.c (renamed from usr.bin/yacc/mkpar.c)220
-rw-r--r--contrib/byacc/output.c1507
-rw-r--r--contrib/byacc/package/byacc.spec60
-rw-r--r--contrib/byacc/package/debian/changelog223
-rw-r--r--contrib/byacc/package/debian/compat1
-rw-r--r--contrib/byacc/package/debian/control17
-rw-r--r--contrib/byacc/package/debian/copyright120
-rw-r--r--contrib/byacc/package/debian/docs4
-rw-r--r--contrib/byacc/package/debian/postinst15
-rw-r--r--contrib/byacc/package/debian/prerm12
-rwxr-xr-xcontrib/byacc/package/debian/rules93
-rw-r--r--contrib/byacc/package/debian/source/format1
-rw-r--r--contrib/byacc/package/debian/watch4
-rw-r--r--contrib/byacc/package/pkgsrc/DESCR6
-rw-r--r--contrib/byacc/package/pkgsrc/Makefile19
-rw-r--r--contrib/byacc/package/pkgsrc/PLIST3
-rw-r--r--contrib/byacc/package/pkgsrc/distinfo6
-rw-r--r--contrib/byacc/reader.c (renamed from usr.bin/yacc/reader.c)1136
-rw-r--r--contrib/byacc/skeleton.c439
-rw-r--r--contrib/byacc/symtab.c117
-rw-r--r--contrib/byacc/test/README4
-rw-r--r--contrib/byacc/test/calc.output461
-rw-r--r--contrib/byacc/test/calc.tab.c673
-rw-r--r--contrib/byacc/test/calc.tab.h3
-rw-r--r--contrib/byacc/test/calc.y106
-rw-r--r--contrib/byacc/test/calc1.output877
-rw-r--r--contrib/byacc/test/calc1.tab.c915
-rw-r--r--contrib/byacc/test/calc1.tab.h18
-rw-r--r--contrib/byacc/test/calc1.y305
-rw-r--r--contrib/byacc/test/calc2.output461
-rw-r--r--contrib/byacc/test/calc2.tab.c682
-rw-r--r--contrib/byacc/test/calc2.tab.h3
-rw-r--r--contrib/byacc/test/calc2.y120
-rw-r--r--contrib/byacc/test/calc3.output461
-rw-r--r--contrib/byacc/test/calc3.tab.c687
-rw-r--r--contrib/byacc/test/calc3.tab.h3
-rw-r--r--contrib/byacc/test/calc3.y123
-rw-r--r--contrib/byacc/test/code_calc.code.c580
-rw-r--r--contrib/byacc/test/code_calc.output461
-rw-r--r--contrib/byacc/test/code_calc.tab.c199
-rw-r--r--contrib/byacc/test/code_calc.tab.h3
-rw-r--r--contrib/byacc/test/code_calc.y112
-rw-r--r--contrib/byacc/test/code_error.code.c491
-rw-r--r--contrib/byacc/test/code_error.output (renamed from usr.bin/yacc/test/error.output)0
-rw-r--r--contrib/byacc/test/code_error.tab.c118
-rw-r--r--contrib/byacc/test/code_error.tab.h (renamed from usr.bin/yacc/test/error.tab.h)0
-rw-r--r--contrib/byacc/test/code_error.y36
-rw-r--r--contrib/byacc/test/error.output27
-rw-r--r--contrib/byacc/test/error.tab.c501
-rw-r--r--contrib/byacc/test/error.tab.h0
-rw-r--r--contrib/byacc/test/error.y28
-rw-r--r--contrib/byacc/test/ftp.output (renamed from usr.bin/yacc/test/ftp.output)0
-rw-r--r--contrib/byacc/test/ftp.tab.c1995
-rw-r--r--contrib/byacc/test/ftp.tab.h (renamed from usr.bin/yacc/test/ftp.tab.h)0
-rw-r--r--contrib/byacc/test/ftp.y (renamed from usr.bin/yacc/test/ftp.y)388
-rw-r--r--contrib/byacc/test/grammar.output2214
-rw-r--r--contrib/byacc/test/grammar.tab.c2025
-rw-r--r--contrib/byacc/test/grammar.tab.h35
-rw-r--r--contrib/byacc/test/grammar.y1183
-rw-r--r--contrib/byacc/test/pure_calc.output461
-rw-r--r--contrib/byacc/test/pure_calc.tab.c687
-rw-r--r--contrib/byacc/test/pure_calc.tab.h3
-rw-r--r--contrib/byacc/test/pure_calc.y116
-rw-r--r--contrib/byacc/test/pure_error.output27
-rw-r--r--contrib/byacc/test/pure_error.tab.c517
-rw-r--r--contrib/byacc/test/pure_error.tab.h0
-rw-r--r--contrib/byacc/test/pure_error.y41
-rw-r--r--contrib/byacc/test/quote_calc-s.output557
-rw-r--r--contrib/byacc/test/quote_calc-s.tab.c687
-rw-r--r--contrib/byacc/test/quote_calc-s.tab.h9
-rw-r--r--contrib/byacc/test/quote_calc.output557
-rw-r--r--contrib/byacc/test/quote_calc.tab.c693
-rw-r--r--contrib/byacc/test/quote_calc.tab.h15
-rw-r--r--contrib/byacc/test/quote_calc.y112
-rw-r--r--contrib/byacc/test/quote_calc2-s.output557
-rw-r--r--contrib/byacc/test/quote_calc2-s.tab.c687
-rw-r--r--contrib/byacc/test/quote_calc2-s.tab.h9
-rw-r--r--contrib/byacc/test/quote_calc2.output557
-rw-r--r--contrib/byacc/test/quote_calc2.tab.c693
-rw-r--r--contrib/byacc/test/quote_calc2.tab.h15
-rw-r--r--contrib/byacc/test/quote_calc2.y112
-rw-r--r--contrib/byacc/test/quote_calc3-s.output557
-rw-r--r--contrib/byacc/test/quote_calc3-s.tab.c688
-rw-r--r--contrib/byacc/test/quote_calc3-s.tab.h9
-rw-r--r--contrib/byacc/test/quote_calc3.output557
-rw-r--r--contrib/byacc/test/quote_calc3.tab.c688
-rw-r--r--contrib/byacc/test/quote_calc3.tab.h9
-rw-r--r--contrib/byacc/test/quote_calc3.y112
-rw-r--r--contrib/byacc/test/quote_calc4-s.output557
-rw-r--r--contrib/byacc/test/quote_calc4-s.tab.c688
-rw-r--r--contrib/byacc/test/quote_calc4-s.tab.h9
-rw-r--r--contrib/byacc/test/quote_calc4.output557
-rw-r--r--contrib/byacc/test/quote_calc4.tab.c688
-rw-r--r--contrib/byacc/test/quote_calc4.tab.h9
-rw-r--r--contrib/byacc/test/quote_calc4.y112
-rwxr-xr-xcontrib/byacc/test/run_lint.sh20
-rwxr-xr-xcontrib/byacc/test/run_make.sh139
-rwxr-xr-xcontrib/byacc/test/run_test.sh82
-rw-r--r--contrib/byacc/verbose.c (renamed from usr.bin/yacc/verbose.c)141
-rw-r--r--contrib/byacc/vmsbuild.com210
-rw-r--r--contrib/byacc/warshall.c82
-rw-r--r--contrib/byacc/yacc.1242
-rw-r--r--contrib/com_err/com_err.32
-rw-r--r--contrib/gcc/config/i386/freebsd.h1
-rw-r--r--contrib/gcc/config/i386/freebsd64.h1
-rw-r--r--contrib/gcc/config/rs6000/rs6000.md1
-rw-r--r--contrib/gcc/config/sparc/sparc.md122
-rw-r--r--contrib/gcc/cse.c30
-rw-r--r--contrib/gcc/expr.c9
-rw-r--r--contrib/gcc/fold-const.c40
-rw-r--r--contrib/gcc/ipa-pure-const.c30
-rw-r--r--contrib/gcc/ipa-utils.c2
-rw-r--r--contrib/gcc/rtl.h4
-rw-r--r--contrib/gcc/var-tracking.c50
-rw-r--r--contrib/gcc/varasm.c5
-rw-r--r--contrib/groff/tmac/doc-common3
-rw-r--r--contrib/llvm/include/llvm/Support/FileSystem.h4
-rw-r--r--contrib/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp86
-rw-r--r--contrib/llvm/lib/Support/Unix/PathV2.inc7
-rw-r--r--contrib/llvm/lib/Support/Windows/PathV2.inc6
-rw-r--r--contrib/llvm/tools/clang/include/clang/AST/Decl.h3
-rw-r--r--contrib/llvm/tools/clang/include/clang/Basic/DiagnosticParseKinds.td2
-rw-r--r--contrib/llvm/tools/clang/include/clang/Basic/TokenKinds.def1
-rw-r--r--contrib/llvm/tools/clang/include/clang/Parse/Parser.h11
-rw-r--r--contrib/llvm/tools/clang/include/clang/Sema/DeclSpec.h7
-rw-r--r--contrib/llvm/tools/clang/include/clang/Sema/Initialization.h4
-rw-r--r--contrib/llvm/tools/clang/include/clang/Sema/Sema.h48
-rw-r--r--contrib/llvm/tools/clang/lib/Analysis/UninitializedValues.cpp3
-rw-r--r--contrib/llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp32
-rw-r--r--contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp4
-rw-r--r--contrib/llvm/tools/clang/lib/Driver/Tools.cpp3
-rw-r--r--contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp3
-rw-r--r--contrib/llvm/tools/clang/lib/Parse/ParseCXXInlineMethods.cpp72
-rw-r--r--contrib/llvm/tools/clang/lib/Parse/ParseDecl.cpp14
-rw-r--r--contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp90
-rw-r--r--contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp2
-rw-r--r--contrib/llvm/tools/clang/lib/Parse/ParseExprCXX.cpp9
-rw-r--r--contrib/llvm/tools/clang/lib/Sema/DeclSpec.cpp5
-rw-r--r--contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp17
-rw-r--r--contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp126
-rw-r--r--contrib/llvm/tools/clang/lib/Sema/SemaLookup.cpp45
-rw-r--r--contrib/llvm/tools/clang/lib/Sema/SemaType.cpp5
-rw-r--r--contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp3
-rw-r--r--contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp3
-rw-r--r--contrib/ncurses/man/curs_threads.3x4
-rw-r--r--contrib/openpam/CREDITS11
-rw-r--r--contrib/openpam/HISTORY58
-rw-r--r--contrib/openpam/LICENSE4
-rw-r--r--contrib/openpam/Makefile.am4
-rw-r--r--contrib/openpam/Makefile.in14
-rw-r--r--contrib/openpam/RELNOTES9
-rw-r--r--contrib/openpam/TODO13
-rw-r--r--contrib/openpam/aclocal.m4272
-rw-r--r--contrib/openpam/bin/Makefile.am4
-rw-r--r--contrib/openpam/bin/Makefile.in6
-rw-r--r--contrib/openpam/bin/openpam_dump_policy/Makefile.am7
-rw-r--r--contrib/openpam/bin/openpam_dump_policy/Makefile.in474
-rw-r--r--contrib/openpam/bin/openpam_dump_policy/openpam_dump_policy.c202
-rw-r--r--contrib/openpam/bin/pamtest/pamtest.120
-rw-r--r--contrib/openpam/bin/pamtest/pamtest.c19
-rw-r--r--contrib/openpam/bin/su/su.111
-rw-r--r--contrib/openpam/config.h.in6
-rwxr-xr-xcontrib/openpam/configure197
-rw-r--r--contrib/openpam/configure.ac19
-rw-r--r--contrib/openpam/doc/man/Makefile.am15
-rw-r--r--contrib/openpam/doc/man/Makefile.in15
-rw-r--r--contrib/openpam/doc/man/openpam.325
-rw-r--r--contrib/openpam/doc/man/openpam_borrow_cred.316
-rw-r--r--contrib/openpam/doc/man/openpam_free_data.314
-rw-r--r--contrib/openpam/doc/man/openpam_free_envlist.315
-rw-r--r--contrib/openpam/doc/man/openpam_get_feature.3105
-rw-r--r--contrib/openpam/doc/man/openpam_get_option.316
-rw-r--r--contrib/openpam/doc/man/openpam_log.317
-rw-r--r--contrib/openpam/doc/man/openpam_nullconv.316
-rw-r--r--contrib/openpam/doc/man/openpam_readline.336
-rw-r--r--contrib/openpam/doc/man/openpam_readlinev.3159
-rw-r--r--contrib/openpam/doc/man/openpam_readword.3152
-rw-r--r--contrib/openpam/doc/man/openpam_restore_cred.316
-rw-r--r--contrib/openpam/doc/man/openpam_set_feature.387
-rw-r--r--contrib/openpam/doc/man/openpam_set_option.316
-rw-r--r--contrib/openpam/doc/man/openpam_straddch.3122
-rw-r--r--contrib/openpam/doc/man/openpam_subst.322
-rw-r--r--contrib/openpam/doc/man/openpam_ttyconv.318
-rw-r--r--contrib/openpam/doc/man/pam.35
-rw-r--r--contrib/openpam/doc/man/pam.conf.510
-rw-r--r--contrib/openpam/doc/man/pam_acct_mgmt.316
-rw-r--r--contrib/openpam/doc/man/pam_authenticate.318
-rw-r--r--contrib/openpam/doc/man/pam_chauthtok.316
-rw-r--r--contrib/openpam/doc/man/pam_close_session.316
-rw-r--r--contrib/openpam/doc/man/pam_conv.37
-rw-r--r--contrib/openpam/doc/man/pam_end.317
-rw-r--r--contrib/openpam/doc/man/pam_error.316
-rw-r--r--contrib/openpam/doc/man/pam_get_authtok.322
-rw-r--r--contrib/openpam/doc/man/pam_get_data.316
-rw-r--r--contrib/openpam/doc/man/pam_get_item.316
-rw-r--r--contrib/openpam/doc/man/pam_get_user.318
-rw-r--r--contrib/openpam/doc/man/pam_getenv.314
-rw-r--r--contrib/openpam/doc/man/pam_getenvlist.314
-rw-r--r--contrib/openpam/doc/man/pam_info.316
-rw-r--r--contrib/openpam/doc/man/pam_open_session.316
-rw-r--r--contrib/openpam/doc/man/pam_prompt.316
-rw-r--r--contrib/openpam/doc/man/pam_putenv.316
-rw-r--r--contrib/openpam/doc/man/pam_set_data.314
-rw-r--r--contrib/openpam/doc/man/pam_set_item.314
-rw-r--r--contrib/openpam/doc/man/pam_setcred.316
-rw-r--r--contrib/openpam/doc/man/pam_setenv.318
-rw-r--r--contrib/openpam/doc/man/pam_sm_acct_mgmt.314
-rw-r--r--contrib/openpam/doc/man/pam_sm_authenticate.314
-rw-r--r--contrib/openpam/doc/man/pam_sm_chauthtok.314
-rw-r--r--contrib/openpam/doc/man/pam_sm_close_session.314
-rw-r--r--contrib/openpam/doc/man/pam_sm_open_session.314
-rw-r--r--contrib/openpam/doc/man/pam_sm_setcred.314
-rw-r--r--contrib/openpam/doc/man/pam_start.314
-rw-r--r--contrib/openpam/doc/man/pam_strerror.314
-rw-r--r--contrib/openpam/doc/man/pam_verror.316
-rw-r--r--contrib/openpam/doc/man/pam_vinfo.316
-rw-r--r--contrib/openpam/doc/man/pam_vprompt.316
-rw-r--r--contrib/openpam/include/security/openpam.h43
-rw-r--r--contrib/openpam/include/security/openpam_version.h6
-rw-r--r--contrib/openpam/lib/Makefile.am11
-rw-r--r--contrib/openpam/lib/Makefile.in29
-rw-r--r--contrib/openpam/lib/openpam_check_owner_perms.c23
-rw-r--r--contrib/openpam/lib/openpam_configure.c597
-rw-r--r--contrib/openpam/lib/openpam_constants.h9
-rw-r--r--contrib/openpam/lib/openpam_ctype.h68
-rw-r--r--contrib/openpam/lib/openpam_debug.h45
-rw-r--r--contrib/openpam/lib/openpam_dynamic.c81
-rw-r--r--contrib/openpam/lib/openpam_features.c69
-rw-r--r--contrib/openpam/lib/openpam_features.h (renamed from contrib/tcpdump/missing/resolv_ext.h)49
-rw-r--r--contrib/openpam/lib/openpam_get_feature.c99
-rw-r--r--contrib/openpam/lib/openpam_get_option.c3
-rw-r--r--contrib/openpam/lib/openpam_impl.h18
-rw-r--r--contrib/openpam/lib/openpam_load.c6
-rw-r--r--contrib/openpam/lib/openpam_log.c14
-rw-r--r--contrib/openpam/lib/openpam_readline.c52
-rw-r--r--contrib/openpam/lib/openpam_readlinev.c156
-rw-r--r--contrib/openpam/lib/openpam_readword.c207
-rw-r--r--contrib/openpam/lib/openpam_set_feature.c75
-rw-r--r--contrib/openpam/lib/openpam_set_option.c3
-rw-r--r--contrib/openpam/lib/openpam_straddch.c111
-rw-r--r--contrib/openpam/lib/openpam_strlcat.h54
-rw-r--r--contrib/openpam/lib/openpam_strlcmp.h5
-rw-r--r--contrib/openpam/lib/openpam_strlcpy.h7
-rw-r--r--contrib/openpam/lib/openpam_subst.c5
-rw-r--r--contrib/openpam/lib/openpam_ttyconv.c12
-rw-r--r--contrib/openpam/lib/pam_get_authtok.c12
-rw-r--r--contrib/openpam/lib/pam_putenv.c4
-rw-r--r--contrib/openpam/lib/pam_setenv.c4
-rwxr-xr-xcontrib/openpam/ltmain.sh95
-rw-r--r--contrib/openpam/misc/gendoc.pl121
-rw-r--r--contrib/openpam/pamgdb.in41
-rw-r--r--contrib/openpam/t/Makefile.am16
-rw-r--r--contrib/openpam/t/Makefile.in605
-rw-r--r--contrib/openpam/t/t.h60
-rw-r--r--contrib/openpam/t/t_main.c119
-rw-r--r--contrib/openpam/t/t_openpam_readlinev.c342
-rw-r--r--contrib/openpam/t/t_openpam_readword.c829
-rw-r--r--contrib/tcpdump/CHANGES61
-rw-r--r--contrib/tcpdump/CREDITS372
-rw-r--r--contrib/tcpdump/Makefile.in105
-rw-r--r--contrib/tcpdump/VERSION2
-rw-r--r--contrib/tcpdump/acconfig.h18
-rw-r--r--contrib/tcpdump/addrtoname.c28
-rw-r--r--contrib/tcpdump/addrtoname.h1
-rw-r--r--contrib/tcpdump/bootp.h4
-rw-r--r--contrib/tcpdump/config.h.in48
-rwxr-xr-xcontrib/tcpdump/configure3108
-rwxr-xr-xcontrib/tcpdump/configure.in112
-rw-r--r--contrib/tcpdump/cpack.c4
-rw-r--r--contrib/tcpdump/cpack.h3
-rw-r--r--contrib/tcpdump/ethertype.h14
-rw-r--r--contrib/tcpdump/forces.h2
-rw-r--r--contrib/tcpdump/ieee802_11_radio.h62
-rw-r--r--contrib/tcpdump/in_cksum.c200
-rw-r--r--contrib/tcpdump/interface.h24
-rw-r--r--contrib/tcpdump/ip.h6
-rw-r--r--contrib/tcpdump/ip6.h37
-rwxr-xr-xcontrib/tcpdump/ipproto.c1
-rw-r--r--contrib/tcpdump/ipproto.h3
-rw-r--r--contrib/tcpdump/missing/bittypes.h117
-rw-r--r--contrib/tcpdump/netdissect.h53
-rw-r--r--contrib/tcpdump/ospf.h4
-rw-r--r--contrib/tcpdump/oui.c1
-rw-r--r--contrib/tcpdump/oui.h1
-rw-r--r--contrib/tcpdump/ppi.h9
-rw-r--r--contrib/tcpdump/print-802_11.c634
-rw-r--r--contrib/tcpdump/print-802_15_4.c183
-rw-r--r--contrib/tcpdump/print-ap1394.c2
-rw-r--r--contrib/tcpdump/print-arcnet.c4
-rw-r--r--contrib/tcpdump/print-arp.c1
-rw-r--r--contrib/tcpdump/print-atalk.c63
-rw-r--r--contrib/tcpdump/print-atm.c10
-rw-r--r--contrib/tcpdump/print-babel.c414
-rw-r--r--contrib/tcpdump/print-bgp.c138
-rw-r--r--contrib/tcpdump/print-carp.c88
-rw-r--r--contrib/tcpdump/print-cdp.c2
-rw-r--r--contrib/tcpdump/print-chdlc.c2
-rw-r--r--contrib/tcpdump/print-dccp.c56
-rw-r--r--contrib/tcpdump/print-dhcp6.c6
-rw-r--r--contrib/tcpdump/print-enc.c2
-rw-r--r--contrib/tcpdump/print-ether.c191
-rw-r--r--contrib/tcpdump/print-forces.c22
-rw-r--r--contrib/tcpdump/print-fr.c4
-rw-r--r--contrib/tcpdump/print-gre.c4
-rw-r--r--contrib/tcpdump/print-icmp.c21
-rw-r--r--contrib/tcpdump/print-icmp6.c86
-rw-r--r--contrib/tcpdump/print-igmp.c6
-rw-r--r--contrib/tcpdump/print-ip.c160
-rw-r--r--contrib/tcpdump/print-ip6.c92
-rw-r--r--contrib/tcpdump/print-ipnet.c2
-rw-r--r--contrib/tcpdump/print-ipx.c4
-rw-r--r--contrib/tcpdump/print-isoclns.c34
-rw-r--r--contrib/tcpdump/print-juniper.c16
-rw-r--r--contrib/tcpdump/print-lane.c6
-rw-r--r--contrib/tcpdump/print-llc.c6
-rw-r--r--contrib/tcpdump/print-lldp.c448
-rw-r--r--contrib/tcpdump/print-mobile.c5
-rw-r--r--contrib/tcpdump/print-mpls.c202
-rw-r--r--contrib/tcpdump/print-null.c2
-rw-r--r--contrib/tcpdump/print-ospf.c6
-rw-r--r--contrib/tcpdump/print-pflog.c2
-rw-r--r--contrib/tcpdump/print-pgm.c88
-rw-r--r--contrib/tcpdump/print-pim.c28
-rw-r--r--contrib/tcpdump/print-ppi.c104
-rw-r--r--contrib/tcpdump/print-ppp.c20
-rw-r--r--contrib/tcpdump/print-rpki-rtr.c368
-rw-r--r--contrib/tcpdump/print-rrcp.c4
-rw-r--r--contrib/tcpdump/print-sctp.c6
-rw-r--r--contrib/tcpdump/print-sflow.c805
-rw-r--r--contrib/tcpdump/print-sl.c2
-rw-r--r--contrib/tcpdump/print-sll.c2
-rw-r--r--contrib/tcpdump/print-sunrpc.c10
-rw-r--r--contrib/tcpdump/print-symantec.c2
-rw-r--r--contrib/tcpdump/print-tcp.c95
-rw-r--r--contrib/tcpdump/print-tftp.c8
-rw-r--r--contrib/tcpdump/print-udp.c130
-rw-r--r--contrib/tcpdump/print-vrrp.c12
-rw-r--r--contrib/tcpdump/tcp.h1
-rw-r--r--contrib/tcpdump/tcpdump-stdinc.h39
-rw-r--r--contrib/tcpdump/tcpdump.1.in51
-rw-r--r--contrib/tcpdump/tcpdump.c212
-rw-r--r--contrib/tcpdump/tests/02-sunrise-sunset-esp.puu34
-rw-r--r--contrib/tcpdump/tests/08-sunrise-sunset-aes.puu36
-rw-r--r--contrib/tcpdump/tests/08-sunrise-sunset-esp2.puu43
-rw-r--r--contrib/tcpdump/tests/TESTLIST51
-rwxr-xr-xcontrib/tcpdump/tests/TESTonce46
-rwxr-xr-xcontrib/tcpdump/tests/TESTrun.sh63
-rw-r--r--contrib/tcpdump/tests/bgp-infinite-loop.pcapbin554 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/bgp_vpn_attrset.out19
-rw-r--r--contrib/tcpdump/tests/bgp_vpn_attrset.pcapbin217 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/chdlc-slarp-short.pcapbin58 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/chdlc-slarp.pcapbin62 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/dio.out1
-rw-r--r--contrib/tcpdump/tests/dio.pcapbin120 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/e1000g.out20
-rw-r--r--contrib/tcpdump/tests/e1000g.pcapbin2504 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/eapon1.gdbinit1
-rw-r--r--contrib/tcpdump/tests/eapon1.out114
-rw-r--r--contrib/tcpdump/tests/eapon1.puu368
-rw-r--r--contrib/tcpdump/tests/eapon2.puu66
-rw-r--r--contrib/tcpdump/tests/esp-secrets.txt5
-rw-r--r--contrib/tcpdump/tests/esp0.out8
-rw-r--r--contrib/tcpdump/tests/esp1.gdbinit1
-rw-r--r--contrib/tcpdump/tests/esp1.out8
-rw-r--r--contrib/tcpdump/tests/esp2.gdbinit1
-rw-r--r--contrib/tcpdump/tests/esp2.out8
-rw-r--r--contrib/tcpdump/tests/esp3.gdbinit1
-rw-r--r--contrib/tcpdump/tests/esp4.gdbinit2
-rw-r--r--contrib/tcpdump/tests/esp5.gdbinit3
-rw-r--r--contrib/tcpdump/tests/esp5.out8
-rw-r--r--contrib/tcpdump/tests/espudp1.out8
-rw-r--r--contrib/tcpdump/tests/espudp1.puu35
-rw-r--r--contrib/tcpdump/tests/forces1.out8
-rw-r--r--contrib/tcpdump/tests/forces1.pcapbin476 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/forces1vvv.out52
-rw-r--r--contrib/tcpdump/tests/forces1vvvv.out67
-rw-r--r--contrib/tcpdump/tests/forces2.out491
-rw-r--r--contrib/tcpdump/tests/forces2.pcapbin17566 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/forces2v.out982
-rw-r--r--contrib/tcpdump/tests/forces2vv.out1966
-rw-r--r--contrib/tcpdump/tests/ikev2.puu22231
-rw-r--r--contrib/tcpdump/tests/ikev2four.out107
-rw-r--r--contrib/tcpdump/tests/ikev2four.puu134
-rw-r--r--contrib/tcpdump/tests/ikev2fourv.out107
-rw-r--r--contrib/tcpdump/tests/ikev2fourv4.out107
-rw-r--r--contrib/tcpdump/tests/ikev2pI2-secrets.txt2
-rw-r--r--contrib/tcpdump/tests/ikev2pI2.out41
-rw-r--r--contrib/tcpdump/tests/ikev2pI2.puu24
-rw-r--r--contrib/tcpdump/tests/isakmp-delete-segfault.puu20
-rw-r--r--contrib/tcpdump/tests/isakmp-identification-segfault.puu11
-rw-r--r--contrib/tcpdump/tests/isakmp-pointer-loop.puu6
-rw-r--r--contrib/tcpdump/tests/isakmp1.out1
-rw-r--r--contrib/tcpdump/tests/isakmp2.out1
-rw-r--r--contrib/tcpdump/tests/isakmp3.out3
-rw-r--r--contrib/tcpdump/tests/isakmp4.out35
-rw-r--r--contrib/tcpdump/tests/isakmp4500.puu155
-rw-r--r--contrib/tcpdump/tests/isis-infinite-loop.pcapbin454 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/ldp-infinite-loop.pcapbin414 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/lmp.out36
-rw-r--r--contrib/tcpdump/tests/lmp.puu42
-rwxr-xr-xcontrib/tcpdump/tests/lmp.sh14
-rw-r--r--contrib/tcpdump/tests/lspping-fec-ldp.pcapbin1190 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/lspping-fec-rsvp.pcapbin984 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/mpls-ldp-hello.out10
-rw-r--r--contrib/tcpdump/tests/mpls-ldp-hello.puu6
-rw-r--r--contrib/tcpdump/tests/mpls-traceroute.pcapbin1956 -> 0 bytes
-rw-r--r--contrib/tcpdump/tests/ospf-gmpls.out86
-rw-r--r--contrib/tcpdump/tests/ospf-gmpls.puu18
-rw-r--r--contrib/tcpdump/tests/print-A.out193
-rw-r--r--contrib/tcpdump/tests/print-AA.out193
-rw-r--r--contrib/tcpdump/tests/print-capX.out409
-rw-r--r--contrib/tcpdump/tests/print-capXX.out419
-rw-r--r--contrib/tcpdump/tests/print-flags.puu151
-rwxr-xr-xcontrib/tcpdump/tests/print-flags.sh12
-rw-r--r--contrib/tcpdump/tests/print-x.out409
-rw-r--r--contrib/tcpdump/tests/print-xx.out419
-rw-r--r--contrib/tcpdump/tests/rsvp-infinite-loop.pcapbin384 -> 0 bytes
-rw-r--r--contrib/tcpdump/udp.h2
-rw-r--r--crypto/openssh/ssh.c3
-rw-r--r--crypto/openssh/sshconnect.c2
-rw-r--r--crypto/openssh/sshd.c6
-rw-r--r--crypto/openssh/version.c67
-rw-r--r--crypto/openssh/version.h10
-rw-r--r--etc/defaults/periodic.conf1
-rw-r--r--etc/devd/usb.conf18
-rw-r--r--etc/mtree/BSD.include.dist4
-rw-r--r--etc/mtree/BSD.usr.dist4
-rw-r--r--etc/pam.d/Makefile1
-rw-r--r--etc/pam.d/kde19
-rw-r--r--gnu/lib/Makefile6
-rw-r--r--gnu/lib/csu/Makefile8
-rw-r--r--gnu/lib/libgcc/Makefile2
-rw-r--r--gnu/lib/libsupc++/Version.map10
-rw-r--r--gnu/usr.bin/gdb/libgdb/fbsd-threads.c2
-rw-r--r--include/Makefile20
-rw-r--r--include/dirent.h21
-rw-r--r--include/malloc_np.h10
-rw-r--r--include/protocols/dumprestore.h11
-rw-r--r--lib/Makefile5
-rw-r--r--lib/bind/dns/code.h19
-rw-r--r--lib/bind/dns/dns/enumtype.h2
-rw-r--r--lib/bind/dns/dns/rdatastruct.h35
-rw-r--r--lib/clang/include/clang/Basic/Version.inc4
-rw-r--r--lib/clang/include/llvm/Config/config.h4
-rw-r--r--lib/libc/Makefile8
-rw-r--r--lib/libc/gen/Makefile.inc2
-rw-r--r--lib/libc/gen/Symbol.map1
-rw-r--r--lib/libc/gen/closedir.c1
-rw-r--r--lib/libc/gen/dirfd.c (renamed from contrib/tcpdump/missing/resolv6.h)37
-rw-r--r--lib/libc/gen/fts-compat.c4
-rw-r--r--lib/libc/gen/fts.c4
-rw-r--r--lib/libc/gen/gen-private.h59
-rw-r--r--lib/libc/gen/getcwd.c10
-rw-r--r--lib/libc/gen/getnetgrent.c80
-rw-r--r--lib/libc/gen/opendir.c1
-rw-r--r--lib/libc/gen/readdir.c1
-rw-r--r--lib/libc/gen/rewinddir.c1
-rw-r--r--lib/libc/gen/seekdir.c1
-rw-r--r--lib/libc/gen/telldir.c1
-rw-r--r--lib/libc/net/if_indextoname.c2
-rw-r--r--lib/libc/net/if_nameindex.c2
-rw-r--r--lib/libc/net/if_nametoindex.c2
-rw-r--r--lib/libc/net/nsparser.y1
-rw-r--r--lib/libc/net/sctp_sys_calls.c5
-rw-r--r--lib/libc/net/sourcefilter.c2
-rw-r--r--lib/libc/powerpc/Symbol.map4
-rw-r--r--lib/libc/powerpc/gen/Makefile.inc2
-rw-r--r--lib/libc/powerpc/gen/eabi.S (renamed from contrib/tcpdump/missing/addrsize.h)21
-rw-r--r--lib/libc/stdio/Makefile.inc8
-rw-r--r--lib/libc/stdio/fpurge.c2
-rw-r--r--lib/libc/stdio/printf_l.380
-rw-r--r--lib/libc/stdio/scanf_l.370
-rw-r--r--lib/libc/sys/lseek.28
-rw-r--r--lib/libcompiler_rt/Makefile2
-rw-r--r--lib/libfetch/common.c2
-rw-r--r--lib/libjail/jail.c26
-rw-r--r--lib/libkiconv/Makefile6
-rw-r--r--lib/libkiconv/xlat16_iconv.c10
-rw-r--r--lib/libmagic/Makefile5
-rw-r--r--lib/libmagic/config.h2
-rw-r--r--lib/libnandfs/Makefile9
-rw-r--r--lib/libnandfs/libnandfs.h65
-rw-r--r--lib/libnandfs/nandfs.c247
-rw-r--r--lib/libpam/libpam/Makefile17
-rw-r--r--lib/libpam/modules/pam_exec/pam_exec.84
-rw-r--r--lib/libpam/modules/pam_ssh/pam_ssh.c2
-rw-r--r--lib/libprocstat/cd9660.c4
-rw-r--r--lib/libprocstat/common_kvm.c4
-rw-r--r--lib/libstand/Makefile3
-rw-r--r--lib/libstand/bswap.c2
-rw-r--r--lib/libstand/nandfs.c1041
-rw-r--r--lib/libstand/stand.h1
-rw-r--r--lib/libthr/thread/thr_mutex.c1
-rw-r--r--lib/libusbhid/parse.c2
-rw-r--r--lib/msun/src/math.h79
-rw-r--r--libexec/rbootd/rbootd.82
-rw-r--r--libexec/tftpd/Makefile4
-rw-r--r--libexec/tftpd/tftpd.812
-rw-r--r--sbin/Makefile5
-rw-r--r--sbin/atacontrol/atacontrol.84
-rw-r--r--sbin/camcontrol/camcontrol.c1
-rw-r--r--sbin/devd/parse.y1
-rw-r--r--sbin/dump/dump.818
-rw-r--r--sbin/etherswitchcfg/etherswitchcfg.83
-rw-r--r--sbin/fsck_msdosfs/main.c1
-rw-r--r--sbin/geom/class/part/gpart.84
-rw-r--r--sbin/geom/class/raid/graid.82
-rw-r--r--sbin/geom/class/virstor/gvirstor.85
-rw-r--r--sbin/gvinum/gvinum.815
-rw-r--r--sbin/hastctl/hastctl.82
-rw-r--r--sbin/hastd/hast.h1
-rw-r--r--sbin/hastd/hastd.82
-rw-r--r--sbin/hastd/parse.y586
-rw-r--r--sbin/ifconfig/ifconfig.838
-rw-r--r--sbin/ifconfig/ifconfig.c11
-rw-r--r--sbin/ifconfig/iflagg.c3
-rw-r--r--sbin/init/init.c2
-rw-r--r--sbin/mount/mount.82
-rw-r--r--sbin/nandfs/Makefile10
-rw-r--r--sbin/nandfs/lssnap.c112
-rw-r--r--sbin/nandfs/mksnap.c80
-rw-r--r--sbin/nandfs/nandfs.874
-rw-r--r--sbin/nandfs/nandfs.c74
-rw-r--r--sbin/nandfs/nandfs.h40
-rw-r--r--sbin/nandfs/rmsnap.c87
-rw-r--r--sbin/natd/natd.82
-rw-r--r--sbin/newfs_nandfs/Makefile9
-rw-r--r--sbin/newfs_nandfs/newfs_nandfs.876
-rw-r--r--sbin/newfs_nandfs/newfs_nandfs.c1176
-rw-r--r--sbin/restore/restore.818
-rw-r--r--sbin/restore/utilities.c1
-rw-r--r--sbin/shutdown/shutdown.c1
-rw-r--r--share/Makefile1
-rw-r--r--share/dtrace/Makefile21
-rw-r--r--share/dtrace/README11
-rwxr-xr-x[-rw-r--r--]share/dtrace/nfsclienttime (renamed from usr.bin/yacc/yyfix.sh)90
-rw-r--r--share/dtrace/toolkit/Makefile17
-rw-r--r--share/examples/csh/dot.cshrc2
-rw-r--r--share/man/man4/Makefile4
-rw-r--r--share/man/man4/nand.4140
-rw-r--r--share/man/man4/nandsim.492
-rw-r--r--share/man/man4/siftr.4114
-rw-r--r--share/man/man4/vlan.430
-rw-r--r--share/man/man5/Makefile4
-rw-r--r--share/man/man5/devfs.conf.52
-rw-r--r--share/man/man5/devfs.rules.52
-rw-r--r--share/man/man5/nandfs.5128
-rw-r--r--share/man/man5/periodic.conf.56
-rw-r--r--share/man/man5/src.conf.527
-rw-r--r--share/man/man7/c99.72
-rw-r--r--share/man/man7/release.74
-rw-r--r--share/man/man8/picobsd.87
-rw-r--r--share/man/man8/rc.82
-rw-r--r--share/man/man9/BUF_ISLOCKED.92
-rw-r--r--share/man/man9/DB_COMMAND.92
-rw-r--r--share/man/man9/EVENTHANDLER.94
-rw-r--r--share/man/man9/VOP_GETEXTATTR.94
-rw-r--r--share/man/man9/VOP_GETPAGES.92
-rw-r--r--share/man/man9/VOP_GETVOBJECT.92
-rw-r--r--share/man/man9/VOP_SETEXTATTR.92
-rw-r--r--share/man/man9/acl.92
-rw-r--r--share/man/man9/bpf.926
-rw-r--r--share/man/man9/bus_generic_print_child.92
-rw-r--r--share/man/man9/bus_release_resource.92
-rw-r--r--share/man/man9/bus_space.93
-rw-r--r--share/man/man9/byteorder.92
-rw-r--r--share/man/man9/devclass_get_maxunit.92
-rw-r--r--share/man/man9/device_find_child.92
-rw-r--r--share/man/man9/firmware.98
-rw-r--r--share/man/man9/hashinit.92
-rw-r--r--share/man/man9/ieee80211_proto.92
-rw-r--r--share/man/man9/ifnet.92
-rw-r--r--share/man/man9/kqueue.93
-rw-r--r--share/man/man9/lock.92
-rw-r--r--share/man/man9/locking.99
-rw-r--r--share/man/man9/mbuf.96
-rw-r--r--share/man/man9/mod_cc.92
-rw-r--r--share/man/man9/netisr.92
-rw-r--r--share/man/man9/pci.910
-rw-r--r--share/man/man9/spl.93
-rw-r--r--share/man/man9/sysctl.92
-rw-r--r--share/man/man9/taskqueue.94
-rw-r--r--share/man/man9/usbdi.92
-rw-r--r--share/man/man9/vm_page_aflag.92
-rw-r--r--share/misc/committers-doc.dot8
-rw-r--r--share/misc/committers-ports.dot3
-rw-r--r--share/misc/committers-src.dot16
-rw-r--r--share/mk/bsd.README4
-rw-r--r--share/mk/bsd.libnames.mk1
-rw-r--r--share/mk/bsd.own.mk3
-rw-r--r--sys/amd64/acpica/acpi_machdep.c2
-rw-r--r--sys/amd64/amd64/fpu.c2
-rw-r--r--sys/amd64/amd64/pmap.c303
-rw-r--r--sys/amd64/include/in_cksum.h4
-rw-r--r--sys/amd64/include/pmap.h2
-rw-r--r--sys/amd64/linux32/linux32_proto.h6
-rw-r--r--sys/amd64/linux32/linux32_syscall.h2
-rw-r--r--sys/amd64/linux32/linux32_syscalls.c2
-rw-r--r--sys/amd64/linux32/linux32_sysent.c2
-rw-r--r--sys/amd64/linux32/linux32_systrace_args.c8
-rw-r--r--sys/amd64/linux32/syscalls.master4
-rw-r--r--sys/arm/arm/gdb_machdep.c6
-rw-r--r--sys/arm/arm/machdep.c6
-rw-r--r--sys/arm/arm/nexus.c2
-rw-r--r--sys/arm/arm/pmap.c56
-rw-r--r--sys/arm/at91/at91.c12
-rw-r--r--sys/arm/at91/at91_machdep.c1
-rw-r--r--sys/arm/at91/at91_pmc.c149
-rw-r--r--sys/arm/at91/at91reg.h3
-rw-r--r--sys/arm/at91/at91rm92reg.h4
-rw-r--r--sys/arm/at91/at91sam9260reg.h4
-rw-r--r--sys/arm/at91/at91sam9g20reg.h4
-rw-r--r--sys/arm/at91/at91var.h2
-rw-r--r--sys/arm/at91/std.ethernut53
-rw-r--r--sys/arm/at91/std.hl2001
-rw-r--r--sys/arm/at91/std.hl2011
-rw-r--r--sys/arm/at91/std.kb920x1
-rw-r--r--sys/arm/at91/std.qila9g201
-rw-r--r--sys/arm/at91/std.sam9g20ek5
-rw-r--r--sys/arm/conf/DB-78XXX5
-rw-r--r--sys/arm/conf/DB-88F6XXX5
-rw-r--r--sys/arm/conf/ETHERNUT52
-rw-r--r--sys/arm/conf/ETHERNUT5.hints10
-rw-r--r--sys/arm/conf/SHEEVAPLUG4
-rw-r--r--sys/arm/include/fdt.h1
-rw-r--r--sys/arm/include/in_cksum.h2
-rw-r--r--sys/arm/include/pmc_mdep.h6
-rw-r--r--sys/arm/mv/discovery/discovery.c24
-rw-r--r--sys/arm/mv/files.mv2
-rw-r--r--sys/arm/mv/mv_localbus.c490
-rw-r--r--sys/arm/mv/mv_machdep.c57
-rw-r--r--sys/arm/mv/mvwin.h27
-rw-r--r--sys/boot/arm/at91/boot2/boot2.c7
-rw-r--r--sys/boot/arm/ixp425/boot2/boot2.c7
-rw-r--r--sys/boot/arm/uboot/Makefile27
-rw-r--r--sys/boot/arm/uboot/conf.c3
-rw-r--r--sys/boot/arm/uboot/ldscript.arm2
-rw-r--r--sys/boot/arm/uboot/version1
-rw-r--r--sys/boot/common/loader.82
-rw-r--r--sys/boot/common/ufsread.c16
-rw-r--r--sys/boot/fdt/dts/bindings-localbus.txt83
-rw-r--r--sys/boot/fdt/dts/db78100.dts19
-rw-r--r--sys/boot/fdt/dts/db88f6281.dts48
-rw-r--r--sys/boot/fdt/dts/p2041rdb.dts490
-rw-r--r--sys/boot/fdt/dts/p2041si.dtsi1296
-rw-r--r--sys/boot/fdt/dts/p3041ds.dts968
-rw-r--r--sys/boot/fdt/dts/p3041si.dtsi1339
-rw-r--r--sys/boot/fdt/dts/p5020ds.dts583
-rw-r--r--sys/boot/fdt/dts/p5020si.dtsi1389
-rw-r--r--sys/boot/fdt/dts/sheevaplug.dts43
-rw-r--r--sys/boot/fdt/fdt_loader_cmd.c103
-rw-r--r--sys/boot/forth/beastie.4th2
-rw-r--r--sys/boot/forth/beastie.4th.84
-rw-r--r--sys/boot/forth/brand.4th2
-rw-r--r--sys/boot/forth/brand.4th.84
-rw-r--r--sys/boot/forth/check-password.4th2
-rw-r--r--sys/boot/forth/check-password.4th.84
-rw-r--r--sys/boot/forth/color.4th2
-rw-r--r--sys/boot/forth/color.4th.84
-rw-r--r--sys/boot/forth/delay.4th2
-rw-r--r--sys/boot/forth/delay.4th.84
-rw-r--r--sys/boot/forth/menu-commands.4th2
-rw-r--r--sys/boot/forth/menu.4th2
-rw-r--r--sys/boot/forth/menu.4th.84
-rw-r--r--sys/boot/forth/shortcuts.4th2
-rw-r--r--sys/boot/forth/version.4th2
-rw-r--r--sys/boot/forth/version.4th.84
-rw-r--r--sys/boot/i386/boot2/boot2.c7
-rw-r--r--sys/boot/i386/gptboot/gptboot.c7
-rw-r--r--sys/boot/i386/libi386/biospnp.c1
-rw-r--r--sys/boot/i386/loader/Makefile3
-rw-r--r--sys/boot/i386/loader/conf.c3
-rw-r--r--sys/boot/pc98/boot2/boot2.c7
-rw-r--r--sys/boot/powerpc/boot1.chrp/boot1.c3
-rw-r--r--sys/boot/sparc64/boot1/boot1.c3
-rw-r--r--sys/boot/uboot/common/metadata.c4
-rw-r--r--sys/boot/uboot/lib/api_public.h1
-rw-r--r--sys/boot/uboot/lib/copy.c48
-rw-r--r--sys/boot/uboot/lib/elf_freebsd.c7
-rw-r--r--sys/boot/uboot/lib/glue.c3
-rw-r--r--sys/boot/uboot/lib/libuboot.h1
-rw-r--r--sys/cam/ata/ata_pmp.c52
-rw-r--r--sys/cam/ata/ata_xpt.c29
-rw-r--r--sys/cam/cam_xpt.c21
-rw-r--r--sys/cam/scsi/scsi_ch.c20
-rw-r--r--sys/cam/scsi/scsi_enc.c35
-rw-r--r--sys/cam/scsi/scsi_enc.h6
-rw-r--r--sys/cam/scsi/scsi_enc_internal.h2
-rw-r--r--sys/cam/scsi/scsi_enc_safte.c2
-rw-r--r--sys/cam/scsi/scsi_enc_ses.c2
-rw-r--r--sys/cam/scsi/scsi_pass.c26
-rw-r--r--sys/cam/scsi/scsi_pt.c4
-rw-r--r--sys/cam/scsi/scsi_ses.h101
-rw-r--r--sys/cam/scsi/scsi_sg.c25
-rw-r--r--sys/cam/scsi/scsi_xpt.c19
-rw-r--r--sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c4
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c1
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c19
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c5
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h5
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c23
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c64
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c6
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c7
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_mirror.c8
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_missing.c8
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c6
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_root.c8
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c22
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c9
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h5
-rw-r--r--sys/compat/freebsd32/freebsd32.h2
-rw-r--r--sys/compat/freebsd32/freebsd32_misc.c3
-rw-r--r--sys/compat/freebsd32/freebsd32_proto.h130
-rw-r--r--sys/compat/freebsd32/freebsd32_syscall.h2
-rw-r--r--sys/compat/freebsd32/freebsd32_syscalls.c2
-rw-r--r--sys/compat/freebsd32/freebsd32_sysent.c2
-rw-r--r--sys/compat/freebsd32/freebsd32_systrace_args.c208
-rw-r--r--sys/compat/freebsd32/syscalls.master74
-rw-r--r--sys/compat/ndis/subr_ntoskrnl.c1
-rw-r--r--sys/conf/NOTES2
-rw-r--r--sys/conf/files39
-rw-r--r--sys/conf/files.powerpc22
-rw-r--r--sys/conf/options1
-rw-r--r--sys/conf/options.powerpc4
-rwxr-xr-xsys/contrib/dev/acpica/acpica_prep.sh7
-rw-r--r--sys/contrib/dev/acpica/changes.txt72
-rw-r--r--sys/contrib/dev/acpica/common/adfile.c19
-rw-r--r--sys/contrib/dev/acpica/common/adwalk.c30
-rw-r--r--sys/contrib/dev/acpica/common/dmextern.c30
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompile.c47
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.h9
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.l1
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.y2
-rw-r--r--sys/contrib/dev/acpica/compiler/aslerror.c23
-rw-r--r--sys/contrib/dev/acpica/compiler/aslfiles.c108
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmain.c13
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmap.c1
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmessages.h11
-rw-r--r--sys/contrib/dev/acpica/compiler/aslstartup.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/dtio.c18
-rw-r--r--sys/contrib/dev/acpica/compiler/prscan.c2
-rw-r--r--sys/contrib/dev/acpica/compiler/prutils.c15
-rw-r--r--sys/contrib/dev/acpica/components/debugger/dbfileio.c13
-rw-r--r--sys/contrib/dev/acpica/components/dispatcher/dsfield.c84
-rw-r--r--sys/contrib/dev/acpica/components/events/evxface.c10
-rw-r--r--sys/contrib/dev/acpica/components/tables/tbfadt.c33
-rw-r--r--sys/contrib/dev/acpica/components/utilities/utmisc.c35
-rw-r--r--sys/contrib/dev/acpica/include/acobject.h8
-rw-r--r--sys/contrib/dev/acpica/include/acpiosxf.h2
-rw-r--r--sys/contrib/dev/acpica/include/acpixf.h2
-rw-r--r--sys/contrib/dev/acpica/include/actypes.h3
-rw-r--r--sys/contrib/dev/acpica/include/acutils.h4
-rw-r--r--sys/contrib/dev/acpica/os_specific/service_layers/osunixxf.c21
-rw-r--r--sys/dev/acpica/Osd/OsdSchedule.c14
-rw-r--r--sys/dev/acpica/acpi.c77
-rw-r--r--sys/dev/acpica/acpi_cpu.c81
-rw-r--r--sys/dev/acpica/acpi_ec.c1
-rw-r--r--sys/dev/acpica/acpi_smbat.c1
-rw-r--r--sys/dev/acpica/acpivar.h2
-rw-r--r--sys/dev/agp/agp.c12
-rw-r--r--sys/dev/agp/agp_i810.c2686
-rw-r--r--sys/dev/agp/agp_i810.h101
-rw-r--r--sys/dev/agp/agp_if.m12
-rw-r--r--sys/dev/agp/agppriv.h2
-rw-r--r--sys/dev/agp/agpreg.h79
-rw-r--r--sys/dev/agp/agpvar.h6
-rw-r--r--sys/dev/ahci/ahci.c1
-rw-r--r--sys/dev/ata/ata-all.c2
-rw-r--r--sys/dev/ath/ath_hal/ah.h3
-rw-r--r--sys/dev/ath/ath_hal/ah_internal.h4
-rw-r--r--sys/dev/ath/ath_hal/ar5210/ar5210_attach.c5
-rw-r--r--sys/dev/ath/ath_hal/ar5211/ar5211_attach.c5
-rw-r--r--sys/dev/ath/ath_hal/ar5212/ar5212_attach.c7
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_attach.c64
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416reg.h6
-rw-r--r--sys/dev/ath/ath_hal/ar9002/ar9280_attach.c65
-rw-r--r--sys/dev/ath/ath_hal/ar9002/ar9285_attach.c13
-rw-r--r--sys/dev/ath/ath_hal/ar9002/ar9287_attach.c16
-rw-r--r--sys/dev/ath/if_ath.c2046
-rw-r--r--sys/dev/ath/if_ath_beacon.c841
-rw-r--r--sys/dev/ath/if_ath_beacon.h51
-rw-r--r--sys/dev/ath/if_ath_debug.c6
-rw-r--r--sys/dev/ath/if_ath_debug.h63
-rw-r--r--sys/dev/ath/if_ath_misc.h18
-rw-r--r--sys/dev/ath/if_ath_rx.c990
-rw-r--r--sys/dev/ath/if_ath_rx.h43
-rw-r--r--sys/dev/ath/if_ath_sysctl.c4
-rw-r--r--sys/dev/ath/if_ath_tdma.c476
-rw-r--r--sys/dev/ath/if_ath_tdma.h55
-rw-r--r--sys/dev/ath/if_ath_tsf.h81
-rw-r--r--sys/dev/ath/if_ath_tx.c90
-rw-r--r--sys/dev/ath/if_athvar.h14
-rw-r--r--sys/dev/bce/if_bce.c24
-rw-r--r--sys/dev/bge/if_bge.c2
-rw-r--r--sys/dev/cxgb/cxgb_adapter.h1
-rw-r--r--sys/dev/cxgb/cxgb_sge.c16
-rw-r--r--sys/dev/cxgbe/adapter.h1
-rw-r--r--sys/dev/drm2/drm.h1214
-rw-r--r--sys/dev/drm2/drmP.h1400
-rw-r--r--sys/dev/drm2/drm_agpsupport.c434
-rw-r--r--sys/dev/drm2/drm_atomic.h93
-rw-r--r--sys/dev/drm2/drm_auth.c190
-rw-r--r--sys/dev/drm2/drm_bufs.c1130
-rw-r--r--sys/dev/drm2/drm_context.c312
-rw-r--r--sys/dev/drm2/drm_crtc.c3413
-rw-r--r--sys/dev/drm2/drm_crtc.h935
-rw-r--r--sys/dev/drm2/drm_crtc_helper.c1043
-rw-r--r--sys/dev/drm2/drm_crtc_helper.h146
-rw-r--r--sys/dev/drm2/drm_dma.c139
-rw-r--r--sys/dev/drm2/drm_dp_helper.h250
-rw-r--r--sys/dev/drm2/drm_dp_iic_helper.c292
-rw-r--r--sys/dev/drm2/drm_drawable.c173
-rw-r--r--sys/dev/drm2/drm_drv.c980
-rw-r--r--sys/dev/drm2/drm_edid.c1781
-rw-r--r--sys/dev/drm2/drm_edid.h244
-rw-r--r--sys/dev/drm2/drm_edid_modes.h381
-rw-r--r--sys/dev/drm2/drm_fb_helper.c1568
-rw-r--r--sys/dev/drm2/drm_fb_helper.h141
-rw-r--r--sys/dev/drm2/drm_fops.c202
-rw-r--r--sys/dev/drm2/drm_fourcc.h139
-rw-r--r--sys/dev/drm2/drm_gem.c487
-rw-r--r--sys/dev/drm2/drm_gem_names.c211
-rw-r--r--sys/dev/drm2/drm_gem_names.h64
-rw-r--r--sys/dev/drm2/drm_hashtab.c181
-rw-r--r--sys/dev/drm2/drm_hashtab.h68
-rw-r--r--sys/dev/drm2/drm_internal.h43
-rw-r--r--sys/dev/drm2/drm_ioctl.c320
-rw-r--r--sys/dev/drm2/drm_irq.c1253
-rw-r--r--sys/dev/drm2/drm_linux_list.h177
-rw-r--r--sys/dev/drm2/drm_linux_list_sort.c75
-rw-r--r--sys/dev/drm2/drm_lock.c199
-rw-r--r--sys/dev/drm2/drm_memory.c127
-rw-r--r--sys/dev/drm2/drm_mm.c563
-rw-r--r--sys/dev/drm2/drm_mm.h185
-rw-r--r--sys/dev/drm2/drm_mode.h444
-rw-r--r--sys/dev/drm2/drm_modes.c1147
-rw-r--r--sys/dev/drm2/drm_pci.c125
-rw-r--r--sys/dev/drm2/drm_pciids.h764
-rw-r--r--sys/dev/drm2/drm_sarea.h87
-rw-r--r--sys/dev/drm2/drm_scatter.c129
-rw-r--r--sys/dev/drm2/drm_sman.c352
-rw-r--r--sys/dev/drm2/drm_sman.h181
-rw-r--r--sys/dev/drm2/drm_stub.c60
-rw-r--r--sys/dev/drm2/drm_sysctl.c364
-rw-r--r--sys/dev/drm2/drm_vm.c134
-rw-r--r--sys/dev/drm2/i915/i915_debug.c1683
-rw-r--r--sys/dev/drm2/i915/i915_dma.c2075
-rw-r--r--sys/dev/drm2/i915/i915_drm.h971
-rw-r--r--sys/dev/drm2/i915/i915_drv.c821
-rw-r--r--sys/dev/drm2/i915/i915_drv.h1481
-rw-r--r--sys/dev/drm2/i915/i915_gem.c3760
-rw-r--r--sys/dev/drm2/i915/i915_gem_evict.c213
-rw-r--r--sys/dev/drm2/i915/i915_gem_execbuffer.c1528
-rw-r--r--sys/dev/drm2/i915/i915_gem_gtt.c329
-rw-r--r--sys/dev/drm2/i915/i915_gem_tiling.c495
-rw-r--r--sys/dev/drm2/i915/i915_irq.c2278
-rw-r--r--sys/dev/drm2/i915/i915_reg.h3876
-rw-r--r--sys/dev/drm2/i915/i915_suspend.c909
-rw-r--r--sys/dev/drm2/i915/intel_bios.c737
-rw-r--r--sys/dev/drm2/i915/intel_bios.h620
-rw-r--r--sys/dev/drm2/i915/intel_crt.c624
-rw-r--r--sys/dev/drm2/i915/intel_display.c9532
-rw-r--r--sys/dev/drm2/i915/intel_dp.c2562
-rw-r--r--sys/dev/drm2/i915/intel_drv.h428
-rw-r--r--sys/dev/drm2/i915/intel_fb.c270
-rw-r--r--sys/dev/drm2/i915/intel_hdmi.c576
-rw-r--r--sys/dev/drm2/i915/intel_iic.c716
-rw-r--r--sys/dev/drm2/i915/intel_lvds.c1125
-rw-r--r--sys/dev/drm2/i915/intel_modes.c143
-rw-r--r--sys/dev/drm2/i915/intel_opregion.c550
-rw-r--r--sys/dev/drm2/i915/intel_overlay.c1582
-rw-r--r--sys/dev/drm2/i915/intel_panel.c327
-rw-r--r--sys/dev/drm2/i915/intel_ringbuffer.c1623
-rw-r--r--sys/dev/drm2/i915/intel_ringbuffer.h203
-rw-r--r--sys/dev/drm2/i915/intel_sdvo.c2680
-rw-r--r--sys/dev/drm2/i915/intel_sdvo_regs.h725
-rw-r--r--sys/dev/drm2/i915/intel_sprite.c669
-rw-r--r--sys/dev/drm2/i915/intel_tv.c1609
-rw-r--r--sys/dev/esp/ncr53c9x.c4
-rw-r--r--sys/dev/fdt/fdt_common.h1
-rw-r--r--sys/dev/fdt/fdt_pci.c8
-rw-r--r--sys/dev/fdt/fdt_slicer.c115
-rw-r--r--sys/dev/hwpmc/hwpmc_arm.c25
-rw-r--r--sys/dev/iicbus/ds1374.c6
-rw-r--r--sys/dev/isci/isci.h32
-rw-r--r--sys/dev/isci/isci_controller.c47
-rw-r--r--sys/dev/isci/isci_interrupt.c10
-rw-r--r--sys/dev/isci/isci_io_request.c51
-rw-r--r--sys/dev/isci/isci_remote_device.c22
-rw-r--r--sys/dev/iwn/if_iwn.c10
-rw-r--r--sys/dev/ixgbe/ixgbe.c98
-rw-r--r--sys/dev/mfi/mfireg.h9
-rw-r--r--sys/dev/mii/ciphy.c4
-rw-r--r--sys/dev/mii/miidevs7
-rw-r--r--sys/dev/mmc/mmc.c114
-rw-r--r--sys/dev/mxge/eth_z8e.h15036
-rw-r--r--sys/dev/mxge/ethp_z8e.h15119
-rw-r--r--sys/dev/mxge/rss_eth_z8e.h19370
-rw-r--r--sys/dev/mxge/rss_ethp_z8e.h19498
-rw-r--r--sys/dev/nand/nand.c832
-rw-r--r--sys/dev/nand/nand.h385
-rw-r--r--sys/dev/nand/nand_bbt.c273
-rw-r--r--sys/dev/nand/nand_cdev.c413
-rw-r--r--sys/dev/nand/nand_dev.h90
-rw-r--r--sys/dev/nand/nand_ecc_pos.h56
-rw-r--r--sys/dev/nand/nand_generic.c1320
-rw-r--r--sys/dev/nand/nand_geom.c414
-rw-r--r--sys/dev/nand/nand_id.c60
-rw-r--r--sys/dev/nand/nand_if.m168
-rw-r--r--sys/dev/nand/nandbus.c530
-rw-r--r--sys/dev/nand/nandbus.h49
-rw-r--r--sys/dev/nand/nandbus_if.m100
-rw-r--r--sys/dev/nand/nandsim.c665
-rw-r--r--sys/dev/nand/nandsim.h175
-rw-r--r--sys/dev/nand/nandsim_chip.c901
-rw-r--r--sys/dev/nand/nandsim_chip.h159
-rw-r--r--sys/dev/nand/nandsim_ctrl.c396
-rw-r--r--sys/dev/nand/nandsim_log.c186
-rw-r--r--sys/dev/nand/nandsim_log.h52
-rw-r--r--sys/dev/nand/nandsim_swap.c389
-rw-r--r--sys/dev/nand/nandsim_swap.h64
-rw-r--r--sys/dev/nand/nfc_if.m165
-rw-r--r--sys/dev/nand/nfc_mv.c236
-rw-r--r--sys/dev/netmap/head.diff654
-rw-r--r--sys/dev/pci/pci.c4
-rw-r--r--sys/dev/pci/vga_pci.c1
-rw-r--r--sys/dev/powermac_nvram/powermac_nvram.c3
-rw-r--r--sys/dev/puc/pucdata.c6
-rw-r--r--sys/dev/sec/sec.c4
-rw-r--r--sys/dev/sec/sec.h1
-rw-r--r--sys/dev/sym/sym_conf.h7
-rw-r--r--sys/dev/sym/sym_hipd.c93
-rw-r--r--sys/dev/usb/controller/ehci_fsl.c423
-rw-r--r--sys/dev/usb/controller/ehci_pci.c1
-rw-r--r--sys/dev/usb/input/uhid.c54
-rw-r--r--sys/dev/usb/usb_hid.c2
-rw-r--r--sys/dev/usb/usb_transfer.c4
-rw-r--r--sys/dev/wbwd/wbwd.c10
-rw-r--r--sys/fs/ext2fs/ext2_lookup.c58
-rw-r--r--sys/fs/ext2fs/ext2_vnops.c6
-rw-r--r--sys/fs/hpfs/hpfs_vnops.c19
-rw-r--r--sys/fs/nandfs/bmap.c621
-rw-r--r--sys/fs/nandfs/bmap.h40
-rw-r--r--sys/fs/nandfs/nandfs.h310
-rw-r--r--sys/fs/nandfs/nandfs_alloc.c364
-rw-r--r--sys/fs/nandfs/nandfs_bmap.c230
-rw-r--r--sys/fs/nandfs/nandfs_buffer.c83
-rw-r--r--sys/fs/nandfs/nandfs_cleaner.c620
-rw-r--r--sys/fs/nandfs/nandfs_cpfile.c776
-rw-r--r--sys/fs/nandfs/nandfs_dat.c344
-rw-r--r--sys/fs/nandfs/nandfs_dir.c314
-rw-r--r--sys/fs/nandfs/nandfs_fs.h565
-rw-r--r--sys/fs/nandfs/nandfs_ifile.c213
-rw-r--r--sys/fs/nandfs/nandfs_mount.h50
-rw-r--r--sys/fs/nandfs/nandfs_segment.c1329
-rw-r--r--sys/fs/nandfs/nandfs_subr.c1120
-rw-r--r--sys/fs/nandfs/nandfs_subr.h238
-rw-r--r--sys/fs/nandfs/nandfs_sufile.c569
-rw-r--r--sys/fs/nandfs/nandfs_vfsops.c1590
-rw-r--r--sys/fs/nandfs/nandfs_vnops.c2455
-rw-r--r--sys/fs/nfs/nfs_commonacl.c4
-rw-r--r--sys/fs/ntfs/ntfs.h316
-rw-r--r--sys/fs/ntfs/ntfs_vnops.c18
-rw-r--r--sys/fs/unionfs/union_subr.c2
-rw-r--r--sys/geom/geom_flashmap.c256
-rw-r--r--sys/geom/label/g_label_ufs.c6
-rw-r--r--sys/geom/mirror/g_mirror.c9
-rw-r--r--sys/geom/mirror/g_mirror.h1
-rw-r--r--sys/geom/mirror/g_mirror_ctl.c13
-rw-r--r--sys/geom/part/g_part.c1
-rw-r--r--sys/geom/part/g_part.h1
-rw-r--r--sys/geom/part/g_part_apm.c7
-rw-r--r--sys/geom/part/g_part_bsd.c7
-rw-r--r--sys/geom/part/g_part_gpt.c2
-rw-r--r--sys/geom/part/g_part_vtoc8.c7
-rw-r--r--sys/gnu/fs/xfs/FreeBSD/xfs_buf.c4
-rw-r--r--sys/i386/acpica/acpi_machdep.c2
-rw-r--r--sys/i386/acpica/acpi_wakecode.S322
-rw-r--r--sys/i386/acpica/acpi_wakeup.c479
-rw-r--r--sys/i386/conf/XEN2
-rw-r--r--sys/i386/i386/apic_vector.s20
-rw-r--r--sys/i386/i386/bios.c4
-rw-r--r--sys/i386/i386/genassym.c13
-rw-r--r--sys/i386/i386/initcpu.c1
-rw-r--r--sys/i386/i386/machdep.c1
-rw-r--r--sys/i386/i386/mp_machdep.c36
-rw-r--r--sys/i386/i386/pmap.c373
-rw-r--r--sys/i386/i386/swtch.s137
-rw-r--r--sys/i386/include/apicvar.h3
-rw-r--r--sys/i386/include/in_cksum.h6
-rw-r--r--sys/i386/include/md_var.h1
-rw-r--r--sys/i386/include/pcb.h14
-rw-r--r--sys/i386/include/pmap.h2
-rw-r--r--sys/i386/include/smp.h4
-rw-r--r--sys/i386/xen/pmap.c189
-rw-r--r--sys/ia64/include/in_cksum.h4
-rw-r--r--sys/kern/init_sysent.c2
-rw-r--r--sys/kern/kern_clock.c6
-rw-r--r--sys/kern/kern_fork.c3
-rw-r--r--sys/kern/kern_jail.c21
-rw-r--r--sys/kern/kern_kthread.c2
-rw-r--r--sys/kern/kern_proc.c5
-rw-r--r--sys/kern/kern_racct.c3
-rw-r--r--sys/kern/kern_shutdown.c2
-rw-r--r--sys/kern/kern_synch.c17
-rw-r--r--sys/kern/kern_thr.c1
-rw-r--r--sys/kern/kern_thread.c6
-rw-r--r--sys/kern/sched_4bsd.c39
-rw-r--r--sys/kern/sched_ule.c38
-rw-r--r--sys/kern/subr_bus.c2
-rw-r--r--sys/kern/subr_sleepqueue.c8
-rw-r--r--sys/kern/subr_smp.c4
-rw-r--r--sys/kern/subr_turnstile.c10
-rw-r--r--sys/kern/subr_witness.c2
-rw-r--r--sys/kern/syscalls.c2
-rw-r--r--sys/kern/syscalls.master4
-rw-r--r--sys/kern/systrace_args.c8
-rw-r--r--sys/kern/vfs_bio.c14
-rw-r--r--sys/kern/vfs_default.c4
-rw-r--r--sys/kern/vfs_syscalls.c34
-rw-r--r--sys/kern/vfs_vnops.c53
-rw-r--r--sys/libkern/iconv.c5
-rw-r--r--sys/libkern/iconv_ucs.c2
-rw-r--r--sys/mips/conf/RSPRO6
-rw-r--r--sys/mips/conf/RSPRO.hints25
-rw-r--r--sys/mips/include/in_cksum.h4
-rw-r--r--sys/modules/Makefile13
-rw-r--r--sys/modules/aesni/Makefile2
-rw-r--r--sys/modules/agp/Makefile12
-rw-r--r--sys/modules/ath/Makefile3
-rw-r--r--sys/modules/bwi/Makefile2
-rw-r--r--sys/modules/cxgb/cxgb/Makefile14
-rw-r--r--sys/modules/drm2/Makefile9
-rw-r--r--sys/modules/drm2/Makefile.inc3
-rw-r--r--sys/modules/drm2/drm2/Makefile39
-rw-r--r--sys/modules/drm2/i915kms/Makefile34
-rw-r--r--sys/modules/ixgbe/Makefile13
-rw-r--r--sys/modules/nandfs/Makefile12
-rw-r--r--sys/modules/nandsim/Makefile11
-rw-r--r--sys/modules/netmap/Makefile14
-rw-r--r--sys/net/bpf.c529
-rw-r--r--sys/net/bpf.h1
-rw-r--r--sys/net/bpf_buffer.c51
-rw-r--r--sys/net/bpf_buffer.h1
-rw-r--r--sys/net/bpf_zerocopy.c10
-rw-r--r--sys/net/bpfdesc.h13
-rw-r--r--sys/net/ieee8023ad_lacp.c80
-rw-r--r--sys/net/if.h4
-rw-r--r--sys/net/if_dl.h1
-rw-r--r--sys/net/if_lagg.c7
-rw-r--r--sys/net/if_loop.c25
-rw-r--r--sys/net80211/ieee80211_ht.c28
-rw-r--r--sys/netgraph/ng_ksocket.c4
-rw-r--r--sys/netinet/in.h1
-rw-r--r--sys/netinet/libalias/alias_sctp.h1
-rw-r--r--sys/netinet/sctp.h11
-rw-r--r--sys/netinet/sctp_asconf.c7
-rw-r--r--sys/netinet/sctp_asconf.h6
-rw-r--r--sys/netinet/sctp_auth.c4
-rw-r--r--sys/netinet/sctp_auth.h8
-rw-r--r--sys/netinet/sctp_bsd_addr.c6
-rw-r--r--sys/netinet/sctp_bsd_addr.h9
-rw-r--r--sys/netinet/sctp_cc_functions.c9
-rw-r--r--sys/netinet/sctp_constants.h12
-rw-r--r--sys/netinet/sctp_crc32.c7
-rw-r--r--sys/netinet/sctp_crc32.h10
-rw-r--r--sys/netinet/sctp_dtrace_declare.h10
-rw-r--r--sys/netinet/sctp_dtrace_define.h10
-rw-r--r--sys/netinet/sctp_header.h10
-rw-r--r--sys/netinet/sctp_indata.c6
-rw-r--r--sys/netinet/sctp_indata.h10
-rw-r--r--sys/netinet/sctp_input.c6
-rw-r--r--sys/netinet/sctp_input.h10
-rw-r--r--sys/netinet/sctp_lock_bsd.h15
-rw-r--r--sys/netinet/sctp_os.h10
-rw-r--r--sys/netinet/sctp_os_bsd.h10
-rw-r--r--sys/netinet/sctp_output.c29
-rw-r--r--sys/netinet/sctp_output.h10
-rw-r--r--sys/netinet/sctp_pcb.c6
-rw-r--r--sys/netinet/sctp_pcb.h11
-rw-r--r--sys/netinet/sctp_peeloff.c8
-rw-r--r--sys/netinet/sctp_peeloff.h10
-rw-r--r--sys/netinet/sctp_ss_functions.c6
-rw-r--r--sys/netinet/sctp_structs.h10
-rw-r--r--sys/netinet/sctp_sysctl.c15
-rw-r--r--sys/netinet/sctp_sysctl.h13
-rw-r--r--sys/netinet/sctp_timer.c6
-rw-r--r--sys/netinet/sctp_timer.h9
-rw-r--r--sys/netinet/sctp_uio.h11
-rw-r--r--sys/netinet/sctp_usrreq.c7
-rw-r--r--sys/netinet/sctp_var.h6
-rw-r--r--sys/netinet/sctputil.c6
-rw-r--r--sys/netinet/sctputil.h11
-rw-r--r--sys/netinet/tcp_input.c28
-rw-r--r--sys/netinet/tcp_lro.c867
-rw-r--r--sys/netinet/tcp_lro.h123
-rw-r--r--sys/netinet/tcp_output.c16
-rw-r--r--sys/netinet/tcp_subr.c15
-rw-r--r--sys/netinet/tcp_syncache.c10
-rw-r--r--sys/netinet/tcp_timewait.c9
-rw-r--r--sys/netinet/udp_usrreq.c4
-rw-r--r--sys/netinet6/icmp6.c4
-rw-r--r--sys/netinet6/in6.h2
-rw-r--r--sys/netinet6/in6_cksum.c118
-rw-r--r--sys/netinet6/in6_src.c3
-rw-r--r--sys/netinet6/ip6_forward.c10
-rw-r--r--sys/netinet6/ip6_input.c152
-rw-r--r--sys/netinet6/ip6_ipsec.c1
-rw-r--r--sys/netinet6/ip6_output.c81
-rw-r--r--sys/netinet6/ip6_var.h4
-rw-r--r--sys/netinet6/nd6.c214
-rw-r--r--sys/netinet6/route6.c2
-rw-r--r--sys/netinet6/scope6.c13
-rw-r--r--sys/netinet6/scope6_var.h1
-rw-r--r--sys/netinet6/sctp6_usrreq.c10
-rw-r--r--sys/netinet6/sctp6_var.h11
-rw-r--r--sys/netinet6/udp6_usrreq.c21
-rw-r--r--sys/pc98/pc98/machdep.c1
-rw-r--r--sys/powerpc/aim/mmu_oea.c64
-rw-r--r--sys/powerpc/aim/mmu_oea64.c213
-rw-r--r--sys/powerpc/booke/locore.S20
-rw-r--r--sys/powerpc/booke/machdep.c15
-rw-r--r--sys/powerpc/booke/platform_bare.c55
-rw-r--r--sys/powerpc/booke/pmap.c44
-rw-r--r--sys/powerpc/conf/MPC85XX3
-rw-r--r--sys/powerpc/conf/NOTES3
-rw-r--r--sys/powerpc/include/atomic.h34
-rw-r--r--sys/powerpc/include/hid.h53
-rw-r--r--sys/powerpc/include/in_cksum.h4
-rw-r--r--sys/powerpc/include/pcpu.h2
-rw-r--r--sys/powerpc/include/pmap.h15
-rw-r--r--sys/powerpc/include/profile.h5
-rw-r--r--sys/powerpc/include/psl.h28
-rw-r--r--sys/powerpc/include/pte.h27
-rw-r--r--sys/powerpc/include/spr.h226
-rw-r--r--sys/powerpc/include/tlb.h84
-rw-r--r--sys/powerpc/include/trap.h2
-rw-r--r--sys/powerpc/include/vmparam.h2
-rw-r--r--sys/powerpc/mpc85xx/fsl_sdhc.c1306
-rw-r--r--sys/powerpc/mpc85xx/fsl_sdhc.h297
-rw-r--r--sys/powerpc/mpc85xx/i2c.c3
-rw-r--r--sys/powerpc/mpc85xx/lbc.c194
-rw-r--r--sys/powerpc/mpc85xx/lbc.h49
-rw-r--r--sys/powerpc/mpc85xx/mpc85xx.c8
-rw-r--r--sys/powerpc/mpc85xx/pci_fdt.c9
-rw-r--r--sys/powerpc/powerpc/cpu.c24
-rw-r--r--sys/powerpc/powerpc/db_trace.c4
-rw-r--r--sys/powerpc/powerpc/gdb_machdep.c2
-rw-r--r--sys/powerpc/powerpc/genassym.c26
-rw-r--r--sys/powerpc/powerpc/mmu_if.m8
-rw-r--r--sys/powerpc/powerpc/openpic_fdt.c (renamed from sys/powerpc/mpc85xx/openpic_fdt.c)0
-rw-r--r--sys/powerpc/powerpc/platform.c4
-rw-r--r--sys/powerpc/powerpc/pmap_dispatch.c22
-rw-r--r--sys/sparc64/conf/GENERIC28
-rw-r--r--sys/sparc64/include/in_cksum.h4
-rw-r--r--sys/sparc64/include/pmap.h2
-rw-r--r--sys/sparc64/sparc64/pmap.c97
-rw-r--r--sys/sparc64/sparc64/tsb.c3
-rw-r--r--sys/sys/agpio.h1
-rw-r--r--sys/sys/apm.h1
-rw-r--r--sys/sys/disklabel.h4
-rw-r--r--sys/sys/gpt.h6
-rw-r--r--sys/sys/iconv.h2
-rw-r--r--sys/sys/mbuf.h11
-rw-r--r--sys/sys/mount.h5
-rw-r--r--sys/sys/param.h2
-rw-r--r--sys/sys/proc.h9
-rw-r--r--sys/sys/sdt.h3
-rw-r--r--sys/sys/slicer.h51
-rw-r--r--sys/sys/smp.h2
-rw-r--r--sys/sys/syscall.h2
-rw-r--r--sys/sys/syscall.mk2
-rw-r--r--sys/sys/syscallsubr.h3
-rw-r--r--sys/sys/sysproto.h6
-rw-r--r--sys/sys/user.h2
-rw-r--r--sys/sys/vnode.h2
-rw-r--r--sys/sys/vtoc.h1
-rw-r--r--sys/ufs/ffs/ffs_softdep.c1
-rw-r--r--sys/ufs/ufs/ufs_vnops.c20
-rw-r--r--sys/vm/device_pager.c1
-rw-r--r--sys/vm/uma_core.c5
-rw-r--r--sys/vm/vm_fault.c1
-rw-r--r--sys/vm/vm_page.c4
-rw-r--r--sys/vm/vm_pager.c13
-rw-r--r--sys/x86/include/_limits.h4
-rw-r--r--sys/x86/include/_stdint.h8
-rw-r--r--sys/x86/include/_types.h8
-rw-r--r--sys/x86/include/float.h2
-rw-r--r--sys/x86/include/ptrace.h6
-rw-r--r--tools/build/options/WITHOUT_ED_CRYPTO4
-rw-r--r--tools/build/options/WITHOUT_LS_COLORS4
-rw-r--r--tools/build/options/WITHOUT_NAND2
-rw-r--r--tools/build/options/WITH_NAND2
-rwxr-xr-xtools/build/options/makeman2
-rw-r--r--tools/regression/sysvmsg/msgtest.c2
-rw-r--r--tools/regression/sysvsem/semtest.c2
-rw-r--r--tools/regression/sysvshm/shmtest.c2
-rw-r--r--tools/regression/usr.bin/yacc/Makefile4
-rw-r--r--tools/regression/usr.bin/yacc/calc.y106
-rw-r--r--tools/regression/usr.bin/yacc/calc1.y305
-rw-r--r--tools/regression/usr.bin/yacc/calc2.y120
-rw-r--r--tools/regression/usr.bin/yacc/calc3.y123
-rw-r--r--tools/regression/usr.bin/yacc/code_calc.y112
-rw-r--r--tools/regression/usr.bin/yacc/code_error.y36
-rw-r--r--tools/regression/usr.bin/yacc/error.y28
-rw-r--r--tools/regression/usr.bin/yacc/ftp.y1228
-rw-r--r--tools/regression/usr.bin/yacc/grammar.y1183
-rw-r--r--tools/regression/usr.bin/yacc/pure_calc.y116
-rw-r--r--tools/regression/usr.bin/yacc/pure_error.y41
-rw-r--r--tools/regression/usr.bin/yacc/quote_calc.y112
-rw-r--r--tools/regression/usr.bin/yacc/quote_calc2.y112
-rw-r--r--tools/regression/usr.bin/yacc/quote_calc3.y112
-rw-r--r--tools/regression/usr.bin/yacc/quote_calc4.y112
-rw-r--r--tools/regression/usr.bin/yacc/regress.00.out390
-rw-r--r--tools/regression/usr.bin/yacc/regress.01.out593
-rw-r--r--tools/regression/usr.bin/yacc/regress.02.out835
-rw-r--r--tools/regression/usr.bin/yacc/regress.03.out607
-rw-r--r--tools/regression/usr.bin/yacc/regress.04.out599
-rw-r--r--tools/regression/usr.bin/yacc/regress.05.out429
-rw-r--r--tools/regression/usr.bin/yacc/regress.06.out421
-rw-r--r--tools/regression/usr.bin/yacc/regress.07.out (renamed from usr.bin/yacc/test/ftp.tab.c)952
-rw-r--r--tools/regression/usr.bin/yacc/regress.08.out1945
-rw-r--r--tools/regression/usr.bin/yacc/regress.09.out603
-rw-r--r--tools/regression/usr.bin/yacc/regress.10.out433
-rw-r--r--tools/regression/usr.bin/yacc/regress.11.out613
-rw-r--r--tools/regression/usr.bin/yacc/regress.12.out613
-rw-r--r--tools/regression/usr.bin/yacc/regress.13.out608
-rw-r--r--tools/regression/usr.bin/yacc/regress.14.out608
-rwxr-xr-xtools/regression/usr.bin/yacc/regress.sh26
-rw-r--r--tools/regression/usr.bin/yacc/regress.t6
-rw-r--r--tools/regression/usr.bin/yacc/undefined.y5
-rw-r--r--usr.bin/Makefile1
-rw-r--r--usr.bin/ar/acpyacc.y1
-rw-r--r--usr.bin/bc/bc.y1
-rw-r--r--usr.bin/chat/chat.c2
-rw-r--r--usr.bin/ctlstat/ctlstat.84
-rw-r--r--usr.bin/fetch/fetch.19
-rw-r--r--usr.bin/find/getdate.y2
-rw-r--r--usr.bin/fstat/Makefile2
-rw-r--r--usr.bin/fstat/fstat.c2
-rw-r--r--usr.bin/gprof/lookup.c6
-rw-r--r--usr.bin/join/join.12
-rw-r--r--usr.bin/kdump/mkioctls2
-rw-r--r--usr.bin/lastcomm/lastcomm.113
-rw-r--r--usr.bin/lastcomm/lastcomm.c28
-rw-r--r--usr.bin/lex/lex.13
-rw-r--r--usr.bin/m4/parser.y1
-rw-r--r--usr.bin/mail/popen.c4
-rw-r--r--usr.bin/minigzip/minigzip.14
-rw-r--r--usr.bin/mkcsmapper/ldef.h1
-rw-r--r--usr.bin/mklocale/extern.h1
-rw-r--r--usr.bin/pamtest/Makefile11
-rw-r--r--usr.bin/procstat/Makefile2
-rw-r--r--usr.bin/sockstat/sockstat.15
-rw-r--r--usr.bin/sockstat/sockstat.c32
-rw-r--r--usr.bin/sort/bwstring.c16
-rw-r--r--usr.bin/sort/file.c48
-rw-r--r--usr.bin/sort/file.h3
-rw-r--r--usr.bin/sort/radixsort.c17
-rw-r--r--usr.bin/sort/sort.1.in47
-rw-r--r--usr.bin/sort/sort.c28
-rw-r--r--usr.bin/sort/sort.h1
-rw-r--r--usr.bin/unzip/unzip.c15
-rw-r--r--usr.bin/usbhidctl/usbhid.c6
-rw-r--r--usr.bin/usbhidctl/usbhidctl.17
-rw-r--r--usr.bin/yacc/Makefile15
-rw-r--r--usr.bin/yacc/defs.h348
-rw-r--r--usr.bin/yacc/error.c341
-rw-r--r--usr.bin/yacc/lalr.c701
-rw-r--r--usr.bin/yacc/main.c438
-rw-r--r--usr.bin/yacc/output.c1342
-rw-r--r--usr.bin/yacc/skeleton.c426
-rw-r--r--usr.bin/yacc/symtab.c162
-rw-r--r--usr.bin/yacc/test/error.tab.c317
-rw-r--r--usr.bin/yacc/test/error.y6
-rw-r--r--usr.bin/yacc/warshall.c123
-rw-r--r--usr.bin/yacc/yacc.1169
-rw-r--r--usr.bin/yacc/yyfix.1110
-rw-r--r--usr.sbin/Makefile5
-rw-r--r--usr.sbin/acpi/acpidump/acpi.c6
-rw-r--r--usr.sbin/bluetooth/bthidd/parser.y2
-rw-r--r--usr.sbin/bluetooth/hcsecd/parser.y1
-rw-r--r--usr.sbin/config/config.h1
-rw-r--r--usr.sbin/config/main.c1
-rw-r--r--usr.sbin/cpucontrol/cpucontrol.82
-rw-r--r--usr.sbin/cpucontrol/cpucontrol.c10
-rw-r--r--usr.sbin/ctladm/ctladm.812
-rw-r--r--usr.sbin/fifolog/lib/getdate.y2
-rw-r--r--usr.sbin/flowctl/flowctl.82
-rw-r--r--usr.sbin/freebsd-update/freebsd-update.82
-rw-r--r--usr.sbin/i2c/i2c.82
-rw-r--r--usr.sbin/jail/command.c7
-rw-r--r--usr.sbin/jail/config.c2
-rw-r--r--usr.sbin/jail/jail.813
-rw-r--r--usr.sbin/jail/jail.c7
-rw-r--r--usr.sbin/jail/jail.conf.54
-rw-r--r--usr.sbin/jail/jailp.h2
-rw-r--r--usr.sbin/lpr/common_source/common.c2
-rw-r--r--usr.sbin/lpr/lpr/lpr.c2
-rw-r--r--usr.sbin/mfiutil/mfi_show.c22
-rw-r--r--usr.sbin/mptutil/mpt_show.c2
-rw-r--r--usr.sbin/nandsim/Makefile8
-rw-r--r--usr.sbin/nandsim/nandsim.8229
-rw-r--r--usr.sbin/nandsim/nandsim.c1397
-rw-r--r--usr.sbin/nandsim/nandsim_cfgparse.c959
-rw-r--r--usr.sbin/nandsim/nandsim_cfgparse.h86
-rw-r--r--usr.sbin/nandsim/nandsim_rcfile.c440
-rw-r--r--usr.sbin/nandsim/nandsim_rcfile.h70
-rw-r--r--usr.sbin/nandsim/sample.conf174
-rw-r--r--usr.sbin/nandtool/Makefile11
-rw-r--r--usr.sbin/nandtool/nand_erase.c114
-rw-r--r--usr.sbin/nandtool/nand_info.c86
-rw-r--r--usr.sbin/nandtool/nand_read.c139
-rw-r--r--usr.sbin/nandtool/nand_readoob.c111
-rw-r--r--usr.sbin/nandtool/nand_write.c143
-rw-r--r--usr.sbin/nandtool/nand_writeoob.c113
-rw-r--r--usr.sbin/nandtool/nandtool.8184
-rw-r--r--usr.sbin/nandtool/nandtool.c283
-rw-r--r--usr.sbin/nandtool/nandtool.h57
-rw-r--r--usr.sbin/nandtool/usage.h112
-rw-r--r--usr.sbin/newsyslog/newsyslog.c6
-rw-r--r--usr.sbin/pkg/pkg.c2
-rw-r--r--usr.sbin/pkg_install/lib/exec.c2
-rw-r--r--usr.sbin/pkg_install/lib/msg.c1
-rw-r--r--usr.sbin/ppp/throughput.c14
-rw-r--r--usr.sbin/rpc.lockd/kern.c2
-rw-r--r--usr.sbin/rtadvctl/rtadvctl.83
-rw-r--r--usr.sbin/rtadvd/rtadvd.82
-rw-r--r--usr.sbin/smbmsg/smbmsg.82
-rw-r--r--usr.sbin/tcpdump/tcpdump/Makefile13
-rw-r--r--usr.sbin/tcpdump/tcpdump/config.h48
-rw-r--r--usr.sbin/tcpdump/tcpdump/tcpdump.167
-rw-r--r--usr.sbin/utx/utx.82
-rw-r--r--usr.sbin/wpa/hostapd/hostapd.conf.54
-rw-r--r--usr.sbin/wpa/ndis_events/ndis_events.82
1407 files changed, 230498 insertions, 86170 deletions
diff --git a/Makefile.inc1 b/Makefile.inc1
index f359d306eee6..3cfebc2d7a91 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -978,8 +978,8 @@ update:
# legacy: Build compatibility shims for the next three targets
#
legacy:
-.if ${BOOTSTRAPPING} < 800107 && ${BOOTSTRAPPING} != 0
- @echo "ERROR: Source upgrades from versions prior to 8.0 not supported."; \
+.if ${BOOTSTRAPPING} < 700055 && ${BOOTSTRAPPING} != 0
+ @echo "ERROR: Source upgrades from versions prior to 7.0 not supported."; \
false
.endif
.for _tool in tools/build
@@ -1007,12 +1007,23 @@ _gperf= gnu/usr.bin/gperf
_groff= gnu/usr.bin/groff
.endif
+.if ${BOOTSTRAPPING} < 800022
+_ar= usr.bin/ar
+.endif
+
+.if ${BOOTSTRAPPING} < 800013
+_mklocale= usr.bin/mklocale
+.endif
+
.if ${BOOTSTRAPPING} < 900002
_sed= usr.bin/sed
.endif
.if ${BOOTSTRAPPING} < 900006
_lex= usr.bin/lex
+.endif
+
+.if ${BOOTSTRAPPING} < 1000013
_yacc= usr.bin/yacc
.endif
@@ -1020,7 +1031,7 @@ _yacc= usr.bin/yacc
_awk= usr.bin/awk
.endif
-.if ${MK_BSNMP} != "no" && !exists(/usr/sbin/gensnmptree)
+.if ${MK_BSNMP} != "no" && !exists(/usr/sbin/gensnmptree)
_gensnmptree= usr.sbin/bsnmpd/gensnmptree
.endif
@@ -1034,7 +1045,9 @@ _clang_tblgen= \
# dtrace tools are required for older bootstrap env and cross-build
.if ${MK_CDDL} != "no" && \
- (${MACHINE} != ${TARGET} || ${MACHINE_ARCH} != ${TARGET_ARCH})
+ ((${BOOTSTRAPPING} < 800038 && \
+ !(${BOOTSTRAPPING} >= 700112 && ${BOOTSTRAPPING} < 799999)) \
+ || (${MACHINE} != ${TARGET} || ${MACHINE_ARCH} != ${TARGET_ARCH}))
_dtrace_tools= cddl/usr.bin/sgsmsg cddl/lib/libctf lib/libelf \
lib/libdwarf cddl/usr.bin/ctfconvert cddl/usr.bin/ctfmerge
.endif
@@ -1063,14 +1076,16 @@ bootstrap-tools:
${_strfile} \
${_gperf} \
${_groff} \
+ ${_ar} \
${_dtc} \
${_awk} \
usr.bin/lorder \
usr.bin/makewhatis \
+ ${_mklocale} \
usr.bin/rpcgen \
${_sed} \
- ${_lex} \
${_yacc} \
+ ${_lex} \
usr.bin/xinstall \
${_gensnmptree} \
usr.sbin/config
@@ -1132,7 +1147,7 @@ build-tools:
#
# cross-tools: Build cross-building tools
#
-.if ${TARGET_ARCH} != ${MACHINE_ARCH}
+.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${BOOTSTRAPPING} < 800035
.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386"
_btxld= usr.sbin/btxld
.endif
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index 1509af86a3d1..276bc0f38053 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -38,6 +38,8 @@
# xargs -n1 | sort | uniq -d;
# done
+# 20120530: kde pam lives now in ports
+OLD_FILES+=/etc/pam.d/kde
# 20120505: new clang import installed a redundant internal header
OLD_FILES+=usr/include/clang/3.1/stdalign.h
# 20120428: MD2 removed from libmd
diff --git a/bin/ed/Makefile b/bin/ed/Makefile
index 5a7e37de104a..7c39e54bdf46 100644
--- a/bin/ed/Makefile
+++ b/bin/ed/Makefile
@@ -7,12 +7,12 @@ SRCS= buf.c cbc.c glbl.c io.c main.c re.c sub.c undo.c
LINKS= ${BINDIR}/ed ${BINDIR}/red
MLINKS= ed.1 red.1
-.if !defined(RELEASE_CRUNCH)
-.if ${MK_OPENSSL} != "no"
+.if !defined(RELEASE_CRUNCH) && \
+ ${MK_OPENSSL} != "no" && \
+ ${MK_ED_CRYPTO} != "no"
CFLAGS+=-DDES
DPADD= ${LIBCRYPTO}
LDADD= -lcrypto
.endif
-.endif
.include <bsd.prog.mk>
diff --git a/bin/expr/expr.y b/bin/expr/expr.y
index 30704ed2818a..1856ec84d0f7 100644
--- a/bin/expr/expr.y
+++ b/bin/expr/expr.y
@@ -74,7 +74,6 @@ int to_integer(struct val *);
void to_string(struct val *);
int yyerror(const char *);
int yylex(void);
-int yyparse(void);
%}
diff --git a/bin/ls/Makefile b/bin/ls/Makefile
index 2af1203b1d38..4d02a7ec94ac 100644
--- a/bin/ls/Makefile
+++ b/bin/ls/Makefile
@@ -1,12 +1,15 @@
# @(#)Makefile 8.1 (Berkeley) 6/2/93
# $FreeBSD$
+.include <bsd.own.mk>
+
PROG= ls
SRCS= cmp.c ls.c print.c util.c
DPADD= ${LIBUTIL}
LDADD= -lutil
-.if !defined(RELEASE_CRUNCH)
+.if !defined(RELEASE_CRUNCH) && \
+ ${MK_LS_COLORS} != no
CFLAGS+= -DCOLORLS
DPADD+= ${LIBTERMCAP}
LDADD+= -ltermcap
diff --git a/bin/ps/keyword.c b/bin/ps/keyword.c
index 17ca0d87c512..6c380e8b8f15 100644
--- a/bin/ps/keyword.c
+++ b/bin/ps/keyword.c
@@ -76,6 +76,7 @@ static VAR var[] = {
{"comm", "COMMAND", NULL, LJUST, ucomm, 0, CHAR, NULL, 0},
{"command", "COMMAND", NULL, COMM|LJUST|USER, command, 0,
CHAR, NULL, 0},
+ {"cow", "COW", NULL, 0, kvar, KOFF(ki_cow), UINT, "u", 0},
{"cpu", "CPU", NULL, 0, kvar, KOFF(ki_estcpu), UINT, "d", 0},
{"cputime", "", "time", 0, NULL, 0, CHAR, NULL, 0},
{"egid", "", "gid", 0, NULL, 0, CHAR, NULL, 0},
diff --git a/bin/ps/ps.1 b/bin/ps/ps.1
index 59f29ee4ba61..d1627f640cd4 100644
--- a/bin/ps/ps.1
+++ b/bin/ps/ps.1
@@ -29,7 +29,7 @@
.\" @(#)ps.1 8.3 (Berkeley) 4/18/94
.\" $FreeBSD$
.\"
-.Dd March 8, 2012
+.Dd May 20, 2012
.Dt PS 1
.Os
.Sh NAME
@@ -496,6 +496,8 @@ login class
command
.It Cm command
command and arguments
+.It Cm cow
+number of copy-on-write faults
.It Cm cpu
short-term CPU usage factor (for scheduling)
.It Cm emul
diff --git a/bin/rcp/rcp.c b/bin/rcp/rcp.c
index 4577b208f045..335770540950 100644
--- a/bin/rcp/rcp.c
+++ b/bin/rcp/rcp.c
@@ -61,7 +61,6 @@ __FBSDID("$FreeBSD$");
#include <err.h>
#include <errno.h>
#include <fcntl.h>
-#include <libutil.h>
#include <limits.h>
#include <netdb.h>
#include <paths.h>
diff --git a/bin/sh/Makefile b/bin/sh/Makefile
index afca8a332af4..cc04aa42db59 100644
--- a/bin/sh/Makefile
+++ b/bin/sh/Makefile
@@ -38,7 +38,7 @@ build-tools: mkinit mknodes mksyntax
.ORDER: builtins.c builtins.h
builtins.c builtins.h: mkbuiltins builtins.def
- cd ${.CURDIR}; sh mkbuiltins ${.OBJDIR}
+ sh ${.CURDIR}/mkbuiltins ${.CURDIR}
init.c: mkinit alias.c eval.c exec.c input.c jobs.c options.c parser.c \
redir.c trap.c var.c
diff --git a/bin/sh/miscbltin.c b/bin/sh/miscbltin.c
index fce13b5c147d..f602177552a9 100644
--- a/bin/sh/miscbltin.c
+++ b/bin/sh/miscbltin.c
@@ -52,7 +52,6 @@ __FBSDID("$FreeBSD$");
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include <termios.h>
#include "shell.h"
#include "options.h"
diff --git a/bin/sh/mkbuiltins b/bin/sh/mkbuiltins
index 49af058461c1..1be7ff149089 100755
--- a/bin/sh/mkbuiltins
+++ b/bin/sh/mkbuiltins
@@ -35,17 +35,17 @@
# $FreeBSD$
temp=`/usr/bin/mktemp -t ka`
-havejobs=0
-if grep '^#define[ ]*JOBS[ ]*1' shell.h > /dev/null
-then havejobs=1
-fi
havehist=1
if [ "X$1" = "X-h" ]; then
havehist=0
shift
fi
-objdir=$1
-exec > ${objdir}/builtins.c
+srcdir=$1
+havejobs=0
+if grep '^#define[ ]*JOBS[ ]*1' $srcdir/shell.h > /dev/null
+then havejobs=1
+fi
+exec > builtins.c
cat <<\!
/*
* This file was generated by the mkbuiltins program.
@@ -57,7 +57,7 @@ cat <<\!
!
awk '/^[^#]/ {if(('$havejobs' || $2 != "-j") && ('$havehist' || $2 != "-h")) \
- print $0}' builtins.def | sed 's/-[hj]//' > $temp
+ print $0}' $srcdir/builtins.def | sed 's/-[hj]//' > $temp
echo 'int (*const builtinfunc[])(int, char **) = {'
awk '/^[^#]/ { printf "\t%s,\n", $1}' $temp
echo '};
@@ -74,7 +74,7 @@ awk '{ for (i = 2 ; i <= NF ; i++) {
echo ' { NULL, 0, 0 }
};'
-exec > ${objdir}/builtins.h
+exec > builtins.h
cat <<\!
/*
* This file was generated by the mkbuiltins program.
diff --git a/bin/uuidgen/uuidgen.1 b/bin/uuidgen/uuidgen.1
index 58dff699cecb..f793fb248cdf 100644
--- a/bin/uuidgen/uuidgen.1
+++ b/bin/uuidgen/uuidgen.1
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd September 7, 2005
+.Dd May 23, 2012
.Dt UUIDGEN 1
.Os
.Sh NAME
@@ -52,8 +52,11 @@ instructs
to not generate them in batch, but one at a time.
.It Fl n
This option controls the number of identifiers generated.
-By default, multiple
-identifiers are generated in batch.
+By default, multiple identifiers are generated in batch.
+The upper hard limit is 2048
+.Po see
+.Xr uuidgen 2
+.Pc .
.It Fl o
Redirect output to
.Ar filename
diff --git a/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c b/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
index 7b5e7f429f3a..2f2b070b9d8c 100644
--- a/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
+++ b/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
@@ -3168,7 +3168,7 @@ zfs_do_rename(int argc, char **argv)
}
if (flags.nounmount && parents) {
- (void) fprintf(stderr, gettext("-u and -r options are mutually "
+ (void) fprintf(stderr, gettext("-u and -p options are mutually "
"exclusive\n"));
usage(B_FALSE);
}
diff --git a/cddl/contrib/opensolaris/cmd/zpool/zpool.8 b/cddl/contrib/opensolaris/cmd/zpool/zpool.8
index ef3900eb9f15..48ff5018f052 100644
--- a/cddl/contrib/opensolaris/cmd/zpool/zpool.8
+++ b/cddl/contrib/opensolaris/cmd/zpool/zpool.8
@@ -537,6 +537,8 @@ value of 1.76 indicates that 1.76 units of data were stored but only 1 unit of d
for a description of the deduplication feature.
.It Sy free
Number of blocks within the pool that are not allocated.
+.It Sy expandsize
+This property has currently no value on FreeBSD.
.It Sy guid
A unique identifier for the pool.
.It Sy health
@@ -1275,7 +1277,7 @@ Treat exported or foreign devices as inactive.
.It Xo
.Nm
.Cm list
-.Op Fl H
+.Op Fl Hv
.Op Fl o Ar property Ns Op , Ns Ar ...
.Op Fl T Cm d Ns | Ns Cm u
.Op Ar pool
diff --git a/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c b/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
index fe76250f2f68..3904e68be2d6 100644
--- a/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
+++ b/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
@@ -22,8 +22,9 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
- * Copyright (c) 2011 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Frederik Wessels. All rights reserved.
+ * Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
*/
#include <solaris.h>
@@ -45,6 +46,7 @@
#include <pwd.h>
#include <zone.h>
#include <sys/time.h>
+#include <zfs_prop.h>
#include <sys/fs/zfs.h>
#include <sys/stat.h>
@@ -69,6 +71,7 @@ static int zpool_do_status(int, char **);
static int zpool_do_online(int, char **);
static int zpool_do_offline(int, char **);
static int zpool_do_clear(int, char **);
+static int zpool_do_reopen(int, char **);
static int zpool_do_reguid(int, char **);
@@ -131,7 +134,8 @@ typedef enum {
HELP_GET,
HELP_SET,
HELP_SPLIT,
- HELP_REGUID
+ HELP_REGUID,
+ HELP_REOPEN
} zpool_help_t;
@@ -166,6 +170,7 @@ static zpool_command_t command_table[] = {
{ "online", zpool_do_online, HELP_ONLINE },
{ "offline", zpool_do_offline, HELP_OFFLINE },
{ "clear", zpool_do_clear, HELP_CLEAR },
+ { "reopen", zpool_do_reopen, HELP_REOPEN },
{ NULL },
{ "attach", zpool_do_attach, HELP_ATTACH },
{ "detach", zpool_do_detach, HELP_DETACH },
@@ -240,6 +245,8 @@ get_usage(zpool_help_t idx) {
"[new-device]\n"));
case HELP_REMOVE:
return (gettext("\tremove <pool> <device> ...\n"));
+ case HELP_REOPEN:
+ return (""); /* Undocumented command */
case HELP_SCRUB:
return (gettext("\tscrub [-s] <pool> ...\n"));
case HELP_STATUS:
@@ -1616,7 +1623,7 @@ show_import(nvlist_t *config)
}
if (msgid != NULL)
- (void) printf(gettext(" see: http://www.sun.com/msg/%s\n"),
+ (void) printf(gettext(" see: http://illumos.org/msg/%s\n"),
msgid);
(void) printf(gettext(" config:\n\n"));
@@ -1909,7 +1916,7 @@ zpool_do_import(int argc, char **argv)
if (searchdirs == NULL) {
searchdirs = safe_malloc(sizeof (char *));
- searchdirs[0] = "/dev/dsk";
+ searchdirs[0] = "/dev";
nsearch = 1;
}
@@ -2108,10 +2115,10 @@ error:
}
typedef struct iostat_cbdata {
- zpool_list_t *cb_list;
- int cb_verbose;
- int cb_iteration;
+ boolean_t cb_verbose;
int cb_namewidth;
+ int cb_iteration;
+ zpool_list_t *cb_list;
} iostat_cbdata_t;
static void
@@ -2351,7 +2358,8 @@ get_namewidth(zpool_handle_t *zhp, void *data)
if (!cb->cb_verbose)
cb->cb_namewidth = strlen(zpool_get_name(zhp));
else
- cb->cb_namewidth = max_width(zhp, nvroot, 0, 0);
+ cb->cb_namewidth = max_width(zhp, nvroot, 0,
+ cb->cb_namewidth);
}
/*
@@ -2580,8 +2588,9 @@ zpool_do_iostat(int argc, char **argv)
}
typedef struct list_cbdata {
+ boolean_t cb_verbose;
+ int cb_namewidth;
boolean_t cb_scripted;
- boolean_t cb_first;
zprop_list_t *cb_proplist;
} list_cbdata_t;
@@ -2589,16 +2598,27 @@ typedef struct list_cbdata {
* Given a list of columns to display, output appropriate headers for each one.
*/
static void
-print_header(zprop_list_t *pl)
+print_header(list_cbdata_t *cb)
{
+ zprop_list_t *pl = cb->cb_proplist;
const char *header;
boolean_t first = B_TRUE;
boolean_t right_justify;
+ size_t width = 0;
for (; pl != NULL; pl = pl->pl_next) {
if (pl->pl_prop == ZPROP_INVAL)
continue;
+ width = pl->pl_width;
+ if (first && cb->cb_verbose) {
+ /*
+ * Reset the width to accommodate the verbose listing
+ * of devices.
+ */
+ width = cb->cb_namewidth;
+ }
+
if (!first)
(void) printf(" ");
else
@@ -2610,9 +2630,10 @@ print_header(zprop_list_t *pl)
if (pl->pl_next == NULL && !right_justify)
(void) printf("%s", header);
else if (right_justify)
- (void) printf("%*s", pl->pl_width, header);
+ (void) printf("%*s", width, header);
else
- (void) printf("%-*s", pl->pl_width, header);
+ (void) printf("%-*s", width, header);
+
}
(void) printf("\n");
@@ -2623,17 +2644,28 @@ print_header(zprop_list_t *pl)
* to the described layout.
*/
static void
-print_pool(zpool_handle_t *zhp, zprop_list_t *pl, int scripted)
+print_pool(zpool_handle_t *zhp, list_cbdata_t *cb)
{
+ zprop_list_t *pl = cb->cb_proplist;
boolean_t first = B_TRUE;
char property[ZPOOL_MAXPROPLEN];
char *propstr;
boolean_t right_justify;
- int width;
+ size_t width;
for (; pl != NULL; pl = pl->pl_next) {
+
+ width = pl->pl_width;
+ if (first && cb->cb_verbose) {
+ /*
+ * Reset the width to accommodate the verbose listing
+ * of devices.
+ */
+ width = cb->cb_namewidth;
+ }
+
if (!first) {
- if (scripted)
+ if (cb->cb_scripted)
(void) printf("\t");
else
(void) printf(" ");
@@ -2643,7 +2675,10 @@ print_pool(zpool_handle_t *zhp, zprop_list_t *pl, int scripted)
right_justify = B_FALSE;
if (pl->pl_prop != ZPROP_INVAL) {
- if (zpool_get_prop(zhp, pl->pl_prop, property,
+ if (pl->pl_prop == ZPOOL_PROP_EXPANDSZ &&
+ zpool_get_prop_int(zhp, pl->pl_prop, NULL) == 0)
+ propstr = "-";
+ else if (zpool_get_prop(zhp, pl->pl_prop, property,
sizeof (property), NULL) != 0)
propstr = "-";
else
@@ -2654,14 +2689,13 @@ print_pool(zpool_handle_t *zhp, zprop_list_t *pl, int scripted)
propstr = "-";
}
- width = pl->pl_width;
/*
* If this is being called in scripted mode, or if this is the
* last column and it is left-justified, don't include a width
* format specifier.
*/
- if (scripted || (pl->pl_next == NULL && !right_justify))
+ if (cb->cb_scripted || (pl->pl_next == NULL && !right_justify))
(void) printf("%s", propstr);
else if (right_justify)
(void) printf("%*s", width, propstr);
@@ -2672,6 +2706,101 @@ print_pool(zpool_handle_t *zhp, zprop_list_t *pl, int scripted)
(void) printf("\n");
}
+static void
+print_one_column(zpool_prop_t prop, uint64_t value, boolean_t scripted)
+{
+ char propval[64];
+ boolean_t fixed;
+ size_t width = zprop_width(prop, &fixed, ZFS_TYPE_POOL);
+
+ zfs_nicenum(value, propval, sizeof (propval));
+
+ if (prop == ZPOOL_PROP_EXPANDSZ && value == 0)
+ (void) strlcpy(propval, "-", sizeof (propval));
+
+ if (scripted)
+ (void) printf("\t%s", propval);
+ else
+ (void) printf(" %*s", width, propval);
+}
+
+void
+print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
+ list_cbdata_t *cb, int depth)
+{
+ nvlist_t **child;
+ vdev_stat_t *vs;
+ uint_t c, children;
+ char *vname;
+ boolean_t scripted = cb->cb_scripted;
+
+ verify(nvlist_lookup_uint64_array(nv, ZPOOL_CONFIG_VDEV_STATS,
+ (uint64_t **)&vs, &c) == 0);
+
+ if (name != NULL) {
+ if (scripted)
+ (void) printf("\t%s", name);
+ else if (strlen(name) + depth > cb->cb_namewidth)
+ (void) printf("%*s%s", depth, "", name);
+ else
+ (void) printf("%*s%s%*s", depth, "", name,
+ (int)(cb->cb_namewidth - strlen(name) - depth), "");
+
+ /* only toplevel vdevs have capacity stats */
+ if (vs->vs_space == 0) {
+ if (scripted)
+ (void) printf("\t-\t-\t-");
+ else
+ (void) printf(" - - -");
+ } else {
+ print_one_column(ZPOOL_PROP_SIZE, vs->vs_space,
+ scripted);
+ print_one_column(ZPOOL_PROP_CAPACITY, vs->vs_alloc,
+ scripted);
+ print_one_column(ZPOOL_PROP_FREE,
+ vs->vs_space - vs->vs_alloc, scripted);
+ }
+ print_one_column(ZPOOL_PROP_EXPANDSZ, vs->vs_esize,
+ scripted);
+ (void) printf("\n");
+ }
+
+ if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN,
+ &child, &children) != 0)
+ return;
+
+ for (c = 0; c < children; c++) {
+ uint64_t ishole = B_FALSE;
+
+ if (nvlist_lookup_uint64(child[c],
+ ZPOOL_CONFIG_IS_HOLE, &ishole) == 0 && ishole)
+ continue;
+
+ vname = zpool_vdev_name(g_zfs, zhp, child[c], B_FALSE);
+ print_list_stats(zhp, vname, child[c], cb, depth + 2);
+ free(vname);
+ }
+
+ /*
+ * Include level 2 ARC devices in iostat output
+ */
+ if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_L2CACHE,
+ &child, &children) != 0)
+ return;
+
+ if (children > 0) {
+ (void) printf("%-*s - - - - - "
+ "-\n", cb->cb_namewidth, "cache");
+ for (c = 0; c < children; c++) {
+ vname = zpool_vdev_name(g_zfs, zhp, child[c],
+ B_FALSE);
+ print_list_stats(zhp, vname, child[c], cb, depth + 2);
+ free(vname);
+ }
+ }
+}
+
+
/*
* Generic callback function to list a pool.
*/
@@ -2679,14 +2808,18 @@ int
list_callback(zpool_handle_t *zhp, void *data)
{
list_cbdata_t *cbp = data;
+ nvlist_t *config;
+ nvlist_t *nvroot;
- if (cbp->cb_first) {
- if (!cbp->cb_scripted)
- print_header(cbp->cb_proplist);
- cbp->cb_first = B_FALSE;
- }
+ config = zpool_get_config(zhp, NULL);
- print_pool(zhp, cbp->cb_proplist, cbp->cb_scripted);
+ print_pool(zhp, cbp);
+ if (!cbp->cb_verbose)
+ return (0);
+
+ verify(nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE,
+ &nvroot) == 0);
+ print_list_stats(zhp, NULL, nvroot, cbp, 0);
return (0);
}
@@ -2710,12 +2843,15 @@ zpool_do_list(int argc, char **argv)
int ret;
list_cbdata_t cb = { 0 };
static char default_props[] =
- "name,size,allocated,free,capacity,dedupratio,health,altroot";
+ "name,size,allocated,free,capacity,dedupratio,"
+ "health,altroot";
char *props = default_props;
unsigned long interval = 0, count = 0;
+ zpool_list_t *list;
+ boolean_t first = B_TRUE;
/* check options */
- while ((c = getopt(argc, argv, ":Ho:T:")) != -1) {
+ while ((c = getopt(argc, argv, ":Ho:T:v")) != -1) {
switch (c) {
case 'H':
cb.cb_scripted = B_TRUE;
@@ -2726,6 +2862,9 @@ zpool_do_list(int argc, char **argv)
case 'T':
get_timestamp_arg(*optarg);
break;
+ case 'v':
+ cb.cb_verbose = B_TRUE;
+ break;
case ':':
(void) fprintf(stderr, gettext("missing argument for "
"'%c' option\n"), optopt);
@@ -2746,21 +2885,32 @@ zpool_do_list(int argc, char **argv)
if (zprop_get_list(g_zfs, props, &cb.cb_proplist, ZFS_TYPE_POOL) != 0)
usage(B_FALSE);
- cb.cb_first = B_TRUE;
+ if ((list = pool_list_get(argc, argv, &cb.cb_proplist, &ret)) == NULL)
+ return (1);
+
+ if (argc == 0 && !cb.cb_scripted && pool_list_count(list) == 0) {
+ (void) printf(gettext("no pools available\n"));
+ zprop_free_list(cb.cb_proplist);
+ return (0);
+ }
for (;;) {
+ pool_list_update(list);
+
+ if (pool_list_count(list) == 0)
+ break;
+
+ cb.cb_namewidth = 0;
+ (void) pool_list_iter(list, B_FALSE, get_namewidth, &cb);
if (timestamp_fmt != NODATE)
print_timestamp(timestamp_fmt);
- ret = for_each_pool(argc, argv, B_TRUE, &cb.cb_proplist,
- list_callback, &cb);
-
- if (argc == 0 && cb.cb_first && !cb.cb_scripted) {
- (void) printf(gettext("no pools available\n"));
- zprop_free_list(cb.cb_proplist);
- return (0);
+ if (!cb.cb_scripted && (first || cb.cb_verbose)) {
+ print_header(&cb);
+ first = B_FALSE;
}
+ ret = pool_list_iter(list, B_TRUE, list_callback, &cb);
if (interval == 0)
break;
@@ -3380,6 +3530,36 @@ zpool_do_reguid(int argc, char **argv)
}
+/*
+ * zpool reopen <pool>
+ *
+ * Reopen the pool so that the kernel can update the sizes of all vdevs.
+ *
+ * NOTE: This command is currently undocumented. If the command is ever
+ * exposed then the appropriate usage() messages will need to be made.
+ */
+int
+zpool_do_reopen(int argc, char **argv)
+{
+ int ret = 0;
+ zpool_handle_t *zhp;
+ char *pool;
+
+ argc--;
+ argv++;
+
+ if (argc != 1)
+ return (2);
+
+ pool = argv[0];
+ if ((zhp = zpool_open_canfail(g_zfs, pool)) == NULL)
+ return (1);
+
+ ret = zpool_reopen(zhp);
+ zpool_close(zhp);
+ return (ret);
+}
+
typedef struct scrub_cbdata {
int cb_type;
int cb_argc;
@@ -3683,7 +3863,7 @@ print_dedup_stats(nvlist_t *config)
* pool: tank
* status: DEGRADED
* reason: One or more devices ...
- * see: http://www.sun.com/msg/ZFS-xxxx-01
+ * see: http://illumos.org/msg/ZFS-xxxx-01
* config:
* mirror DEGRADED
* c1t0d0 OK
@@ -3891,7 +4071,7 @@ status_callback(zpool_handle_t *zhp, void *data)
}
if (msgid != NULL)
- (void) printf(gettext(" see: http://www.sun.com/msg/%s\n"),
+ (void) printf(gettext(" see: http://illumos.org/msg/%s\n"),
msgid);
if (config != NULL) {
diff --git a/cddl/contrib/opensolaris/cmd/ztest/ztest.c b/cddl/contrib/opensolaris/cmd/ztest/ztest.c
index 3a6c35035fc4..487f95a05a47 100644
--- a/cddl/contrib/opensolaris/cmd/ztest/ztest.c
+++ b/cddl/contrib/opensolaris/cmd/ztest/ztest.c
@@ -20,8 +20,9 @@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
*/
/*
@@ -51,7 +52,9 @@
* At random times, the child self-immolates with a SIGKILL.
* This is the software equivalent of pulling the power cord.
* The parent then runs the test again, using the existing
- * storage pool, as many times as desired.
+ * storage pool, as many times as desired. If backwards compatability
+ * testing is enabled ztest will sometimes run the "older" version
+ * of ztest after a SIGKILL.
*
* (6) To verify that we don't have future leaks or temporal incursions,
* many of the functional tests record the transaction group number
@@ -68,9 +71,15 @@
* You can ask more more vdevs [-v], datasets [-d], or threads [-t]
* to increase the pool capacity, fanout, and overall stress level.
*
- * The -N(okill) option will suppress kills, so each child runs to completion.
- * This can be useful when you're trying to distinguish temporal incursions
- * from plain old race conditions.
+ * Use the -k option to set the desired frequency of kills.
+ *
+ * When ztest invokes itself it passes all relevant information through a
+ * temporary file which is mmap-ed in the child process. This allows shared
+ * memory to survive the exec syscall. The ztest_shared_hdr_t struct is always
+ * stored at offset 0 of this file and contains information on the size and
+ * number of shared structures in the file. The information stored in this file
+ * must remain backwards compatible with older versions of ztest so that
+ * ztest can invoke them during backwards compatibility testing (-B).
*/
#include <sys/zfs_context.h>
@@ -111,29 +120,82 @@
#include <sys/fs/zfs.h>
#include <libnvpair.h>
-static char cmdname[] = "ztest";
-static char *zopt_pool = cmdname;
-static char *progname;
-
-static uint64_t zopt_vdevs = 5;
-static uint64_t zopt_vdevtime;
-static int zopt_ashift = SPA_MINBLOCKSHIFT;
-static int zopt_mirrors = 2;
-static int zopt_raidz = 4;
-static int zopt_raidz_parity = 1;
-static size_t zopt_vdev_size = SPA_MINDEVSIZE;
-static int zopt_datasets = 7;
-static int zopt_threads = 23;
-static uint64_t zopt_passtime = 60; /* 60 seconds */
-static uint64_t zopt_killrate = 70; /* 70% kill rate */
-static int zopt_verbose = 0;
-static int zopt_init = 1;
-static char *zopt_dir = "/tmp";
-static uint64_t zopt_time = 300; /* 5 minutes */
-static uint64_t zopt_maxloops = 50; /* max loops during spa_freeze() */
+#define ZTEST_FD_DATA 3
+#define ZTEST_FD_RAND 4
+
+typedef struct ztest_shared_hdr {
+ uint64_t zh_hdr_size;
+ uint64_t zh_opts_size;
+ uint64_t zh_size;
+ uint64_t zh_stats_size;
+ uint64_t zh_stats_count;
+ uint64_t zh_ds_size;
+ uint64_t zh_ds_count;
+} ztest_shared_hdr_t;
+
+static ztest_shared_hdr_t *ztest_shared_hdr;
+
+typedef struct ztest_shared_opts {
+ char zo_pool[MAXNAMELEN];
+ char zo_dir[MAXNAMELEN];
+ char zo_alt_ztest[MAXNAMELEN];
+ char zo_alt_libpath[MAXNAMELEN];
+ uint64_t zo_vdevs;
+ uint64_t zo_vdevtime;
+ size_t zo_vdev_size;
+ int zo_ashift;
+ int zo_mirrors;
+ int zo_raidz;
+ int zo_raidz_parity;
+ int zo_datasets;
+ int zo_threads;
+ uint64_t zo_passtime;
+ uint64_t zo_killrate;
+ int zo_verbose;
+ int zo_init;
+ uint64_t zo_time;
+ uint64_t zo_maxloops;
+ uint64_t zo_metaslab_gang_bang;
+} ztest_shared_opts_t;
+
+static const ztest_shared_opts_t ztest_opts_defaults = {
+ .zo_pool = { 'z', 't', 'e', 's', 't', '\0' },
+ .zo_dir = { '/', 't', 'm', 'p', '\0' },
+ .zo_alt_ztest = { '\0' },
+ .zo_alt_libpath = { '\0' },
+ .zo_vdevs = 5,
+ .zo_ashift = SPA_MINBLOCKSHIFT,
+ .zo_mirrors = 2,
+ .zo_raidz = 4,
+ .zo_raidz_parity = 1,
+ .zo_vdev_size = SPA_MINDEVSIZE,
+ .zo_datasets = 7,
+ .zo_threads = 23,
+ .zo_passtime = 60, /* 60 seconds */
+ .zo_killrate = 70, /* 70% kill rate */
+ .zo_verbose = 0,
+ .zo_init = 1,
+ .zo_time = 300, /* 5 minutes */
+ .zo_maxloops = 50, /* max loops during spa_freeze() */
+ .zo_metaslab_gang_bang = 32 << 10
+};
+
+extern uint64_t metaslab_gang_bang;
+extern uint64_t metaslab_df_alloc_threshold;
+
+static ztest_shared_opts_t *ztest_shared_opts;
+static ztest_shared_opts_t ztest_opts;
+
+typedef struct ztest_shared_ds {
+ uint64_t zd_seq;
+} ztest_shared_ds_t;
+
+static ztest_shared_ds_t *ztest_shared_ds;
+#define ZTEST_GET_SHARED_DS(d) (&ztest_shared_ds[d])
#define BT_MAGIC 0x123456789abcdefULL
-#define MAXFAULTS() (MAX(zs->zs_mirrors, 1) * (zopt_raidz_parity + 1) - 1)
+#define MAXFAULTS() \
+ (MAX(zs->zs_mirrors, 1) * (ztest_opts.zo_raidz_parity + 1) - 1)
enum ztest_io_type {
ZTEST_IO_WRITE_TAG,
@@ -205,10 +267,10 @@ typedef struct ztest_od {
* Per-dataset state.
*/
typedef struct ztest_ds {
+ ztest_shared_ds_t *zd_shared;
objset_t *zd_os;
rwlock_t zd_zilog_lock;
zilog_t *zd_zilog;
- uint64_t zd_seq;
ztest_od_t *zd_od; /* debugging aid */
char zd_name[MAXNAMELEN];
mutex_t zd_dirobj_lock;
@@ -225,11 +287,17 @@ typedef struct ztest_info {
ztest_func_t *zi_func; /* test function */
uint64_t zi_iters; /* iterations per execution */
uint64_t *zi_interval; /* execute every <interval> seconds */
- uint64_t zi_call_count; /* per-pass count */
- uint64_t zi_call_time; /* per-pass time */
- uint64_t zi_call_next; /* next time to call this function */
} ztest_info_t;
+typedef struct ztest_shared_callstate {
+ uint64_t zc_count; /* per-pass count */
+ uint64_t zc_time; /* per-pass time */
+ uint64_t zc_next; /* next time to call this function */
+} ztest_shared_callstate_t;
+
+static ztest_shared_callstate_t *ztest_shared_callstate;
+#define ZTEST_GET_SHARED_CALLSTATE(c) (&ztest_shared_callstate[c])
+
/*
* Note: these aren't static because we want dladdr() to work.
*/
@@ -297,8 +365,10 @@ ztest_info_t ztest_info[] = {
{ ztest_dsl_dataset_promote_busy, 1, &zopt_rarely },
{ ztest_vdev_attach_detach, 1, &zopt_rarely },
{ ztest_vdev_LUN_growth, 1, &zopt_rarely },
- { ztest_vdev_add_remove, 1, &zopt_vdevtime },
- { ztest_vdev_aux_add_remove, 1, &zopt_vdevtime },
+ { ztest_vdev_add_remove, 1,
+ &ztest_opts.zo_vdevtime },
+ { ztest_vdev_aux_add_remove, 1,
+ &ztest_opts.zo_vdevtime },
};
#define ZTEST_FUNCS (sizeof (ztest_info) / sizeof (ztest_info_t))
@@ -316,8 +386,7 @@ typedef struct ztest_cb_list {
* Stuff we need to share writably between parent and child.
*/
typedef struct ztest_shared {
- char *zs_pool;
- spa_t *zs_spa;
+ boolean_t zs_do_init;
hrtime_t zs_proc_start;
hrtime_t zs_proc_stop;
hrtime_t zs_thread_start;
@@ -328,13 +397,11 @@ typedef struct ztest_shared {
uint64_t zs_vdev_aux;
uint64_t zs_alloc;
uint64_t zs_space;
- uint64_t zs_guid;
- mutex_t zs_vdev_lock;
- rwlock_t zs_name_lock;
- ztest_info_t zs_info[ZTEST_FUNCS];
uint64_t zs_splits;
uint64_t zs_mirrors;
- ztest_ds_t zs_zd[];
+ uint64_t zs_metaslab_sz;
+ uint64_t zs_metaslab_df_alloc_threshold;
+ uint64_t zs_guid;
} ztest_shared_t;
#define ID_PARALLEL -1ULL
@@ -342,20 +409,19 @@ typedef struct ztest_shared {
static char ztest_dev_template[] = "%s/%s.%llua";
static char ztest_aux_template[] = "%s/%s.%s.%llu";
ztest_shared_t *ztest_shared;
-uint64_t *ztest_seq;
-static int ztest_random_fd;
-static int ztest_dump_core = 1;
+static spa_t *ztest_spa = NULL;
+static ztest_ds_t *ztest_ds;
+
+static mutex_t ztest_vdev_lock;
+static rwlock_t ztest_name_lock;
+static boolean_t ztest_dump_core = B_TRUE;
static boolean_t ztest_exiting;
/* Global commit callback list */
static ztest_cb_list_t zcl;
-extern uint64_t metaslab_gang_bang;
-extern uint64_t metaslab_df_alloc_threshold;
-static uint64_t metaslab_sz;
-
enum ztest_object {
ZTEST_META_DNODE = 0,
ZTEST_DIROBJ,
@@ -468,12 +534,14 @@ nicenumtoull(const char *buf)
static void
usage(boolean_t requested)
{
+ const ztest_shared_opts_t *zo = &ztest_opts_defaults;
+
char nice_vdev_size[10];
char nice_gang_bang[10];
FILE *fp = requested ? stdout : stderr;
- nicenum(zopt_vdev_size, nice_vdev_size);
- nicenum(metaslab_gang_bang, nice_gang_bang);
+ nicenum(zo->zo_vdev_size, nice_vdev_size);
+ nicenum(zo->zo_metaslab_gang_bang, nice_gang_bang);
(void) fprintf(fp, "Usage: %s\n"
"\t[-v vdevs (default: %llu)]\n"
@@ -494,42 +562,43 @@ usage(boolean_t requested)
"\t[-T time (default: %llu sec)] total run time\n"
"\t[-F freezeloops (default: %llu)] max loops in spa_freeze()\n"
"\t[-P passtime (default: %llu sec)] time per pass\n"
+ "\t[-B alt_ztest (default: <none>)] alternate ztest path\n"
"\t[-h] (print help)\n"
"",
- cmdname,
- (u_longlong_t)zopt_vdevs, /* -v */
+ zo->zo_pool,
+ (u_longlong_t)zo->zo_vdevs, /* -v */
nice_vdev_size, /* -s */
- zopt_ashift, /* -a */
- zopt_mirrors, /* -m */
- zopt_raidz, /* -r */
- zopt_raidz_parity, /* -R */
- zopt_datasets, /* -d */
- zopt_threads, /* -t */
+ zo->zo_ashift, /* -a */
+ zo->zo_mirrors, /* -m */
+ zo->zo_raidz, /* -r */
+ zo->zo_raidz_parity, /* -R */
+ zo->zo_datasets, /* -d */
+ zo->zo_threads, /* -t */
nice_gang_bang, /* -g */
- zopt_init, /* -i */
- (u_longlong_t)zopt_killrate, /* -k */
- zopt_pool, /* -p */
- zopt_dir, /* -f */
- (u_longlong_t)zopt_time, /* -T */
- (u_longlong_t)zopt_maxloops, /* -F */
- (u_longlong_t)zopt_passtime); /* -P */
+ zo->zo_init, /* -i */
+ (u_longlong_t)zo->zo_killrate, /* -k */
+ zo->zo_pool, /* -p */
+ zo->zo_dir, /* -f */
+ (u_longlong_t)zo->zo_time, /* -T */
+ (u_longlong_t)zo->zo_maxloops, /* -F */
+ (u_longlong_t)zo->zo_passtime);
exit(requested ? 0 : 1);
}
static void
process_options(int argc, char **argv)
{
+ char *path;
+ ztest_shared_opts_t *zo = &ztest_opts;
+
int opt;
uint64_t value;
+ char altdir[MAXNAMELEN] = { 0 };
- /* Remember program name. */
- progname = argv[0];
-
- /* By default, test gang blocks for blocks 32K and greater */
- metaslab_gang_bang = 32 << 10;
+ bcopy(&ztest_opts_defaults, zo, sizeof (*zo));
while ((opt = getopt(argc, argv,
- "v:s:a:m:r:R:d:t:g:i:k:p:f:VET:P:hF:")) != EOF) {
+ "v:s:a:m:r:R:d:t:g:i:k:p:f:VET:P:hF:B:")) != EOF) {
value = 0;
switch (opt) {
case 'v':
@@ -550,58 +619,71 @@ process_options(int argc, char **argv)
}
switch (opt) {
case 'v':
- zopt_vdevs = value;
+ zo->zo_vdevs = value;
break;
case 's':
- zopt_vdev_size = MAX(SPA_MINDEVSIZE, value);
+ zo->zo_vdev_size = MAX(SPA_MINDEVSIZE, value);
break;
case 'a':
- zopt_ashift = value;
+ zo->zo_ashift = value;
break;
case 'm':
- zopt_mirrors = value;
+ zo->zo_mirrors = value;
break;
case 'r':
- zopt_raidz = MAX(1, value);
+ zo->zo_raidz = MAX(1, value);
break;
case 'R':
- zopt_raidz_parity = MIN(MAX(value, 1), 3);
+ zo->zo_raidz_parity = MIN(MAX(value, 1), 3);
break;
case 'd':
- zopt_datasets = MAX(1, value);
+ zo->zo_datasets = MAX(1, value);
break;
case 't':
- zopt_threads = MAX(1, value);
+ zo->zo_threads = MAX(1, value);
break;
case 'g':
- metaslab_gang_bang = MAX(SPA_MINBLOCKSIZE << 1, value);
+ zo->zo_metaslab_gang_bang = MAX(SPA_MINBLOCKSIZE << 1,
+ value);
break;
case 'i':
- zopt_init = value;
+ zo->zo_init = value;
break;
case 'k':
- zopt_killrate = value;
+ zo->zo_killrate = value;
break;
case 'p':
- zopt_pool = strdup(optarg);
+ (void) strlcpy(zo->zo_pool, optarg,
+ sizeof (zo->zo_pool));
break;
case 'f':
- zopt_dir = strdup(optarg);
+ path = realpath(optarg, NULL);
+ if (path == NULL) {
+ (void) fprintf(stderr, "error: %s: %s\n",
+ optarg, strerror(errno));
+ usage(B_FALSE);
+ } else {
+ (void) strlcpy(zo->zo_dir, path,
+ sizeof (zo->zo_dir));
+ }
break;
case 'V':
- zopt_verbose++;
+ zo->zo_verbose++;
break;
case 'E':
- zopt_init = 0;
+ zo->zo_init = 0;
break;
case 'T':
- zopt_time = value;
+ zo->zo_time = value;
break;
case 'P':
- zopt_passtime = MAX(1, value);
+ zo->zo_passtime = MAX(1, value);
break;
case 'F':
- zopt_maxloops = MAX(1, value);
+ zo->zo_maxloops = MAX(1, value);
+ break;
+ case 'B':
+ (void) strlcpy(altdir, optarg, sizeof (altdir));
break;
case 'h':
usage(B_TRUE);
@@ -613,17 +695,59 @@ process_options(int argc, char **argv)
}
}
- zopt_raidz_parity = MIN(zopt_raidz_parity, zopt_raidz - 1);
+ zo->zo_raidz_parity = MIN(zo->zo_raidz_parity, zo->zo_raidz - 1);
- zopt_vdevtime = (zopt_vdevs > 0 ? zopt_time * NANOSEC / zopt_vdevs :
+ zo->zo_vdevtime =
+ (zo->zo_vdevs > 0 ? zo->zo_time * NANOSEC / zo->zo_vdevs :
UINT64_MAX >> 2);
+
+ if (strlen(altdir) > 0) {
+ char cmd[MAXNAMELEN];
+ char realaltdir[MAXNAMELEN];
+ char *bin;
+ char *ztest;
+ char *isa;
+ int isalen;
+
+ (void) realpath(getexecname(), cmd);
+ if (0 != access(altdir, F_OK)) {
+ ztest_dump_core = B_FALSE;
+ fatal(B_TRUE, "invalid alternate ztest path: %s",
+ altdir);
+ }
+ VERIFY(NULL != realpath(altdir, realaltdir));
+
+ /*
+ * 'cmd' should be of the form "<anything>/usr/bin/<isa>/ztest".
+ * We want to extract <isa> to determine if we should use
+ * 32 or 64 bit binaries.
+ */
+ bin = strstr(cmd, "/usr/bin/");
+ ztest = strstr(bin, "/ztest");
+ isa = bin + 9;
+ isalen = ztest - isa;
+ (void) snprintf(zo->zo_alt_ztest, sizeof (zo->zo_alt_ztest),
+ "%s/usr/bin/%.*s/ztest", realaltdir, isalen, isa);
+ (void) snprintf(zo->zo_alt_libpath, sizeof (zo->zo_alt_libpath),
+ "%s/usr/lib/%.*s", realaltdir, isalen, isa);
+
+ if (0 != access(zo->zo_alt_ztest, X_OK)) {
+ ztest_dump_core = B_FALSE;
+ fatal(B_TRUE, "invalid alternate ztest: %s",
+ zo->zo_alt_ztest);
+ } else if (0 != access(zo->zo_alt_libpath, X_OK)) {
+ ztest_dump_core = B_FALSE;
+ fatal(B_TRUE, "invalid alternate lib directory %s",
+ zo->zo_alt_libpath);
+ }
+ }
}
static void
ztest_kill(ztest_shared_t *zs)
{
- zs->zs_alloc = metaslab_class_get_alloc(spa_normal_class(zs->zs_spa));
- zs->zs_space = metaslab_class_get_space(spa_normal_class(zs->zs_spa));
+ zs->zs_alloc = metaslab_class_get_alloc(spa_normal_class(ztest_spa));
+ zs->zs_space = metaslab_class_get_space(spa_normal_class(ztest_spa));
(void) kill(getpid(), SIGKILL);
}
@@ -635,7 +759,7 @@ ztest_random(uint64_t range)
if (range == 0)
return (0);
- if (read(ztest_random_fd, &r, sizeof (r)) != sizeof (r))
+ if (read(ZTEST_FD_RAND, &r, sizeof (r)) != sizeof (r))
fatal(1, "short read from /dev/urandom");
return (r % range);
@@ -651,9 +775,9 @@ ztest_record_enospc(const char *s)
static uint64_t
ztest_get_ashift(void)
{
- if (zopt_ashift == 0)
+ if (ztest_opts.zo_ashift == 0)
return (SPA_MINBLOCKSHIFT + ztest_random(3));
- return (zopt_ashift);
+ return (ztest_opts.zo_ashift);
}
static nvlist_t *
@@ -671,12 +795,14 @@ make_vdev_file(char *path, char *aux, size_t size, uint64_t ashift)
if (aux != NULL) {
vdev = ztest_shared->zs_vdev_aux;
- (void) sprintf(path, ztest_aux_template,
- zopt_dir, zopt_pool, aux, vdev);
+ (void) snprintf(path, sizeof (pathbuf),
+ ztest_aux_template, ztest_opts.zo_dir,
+ ztest_opts.zo_pool, aux, vdev);
} else {
vdev = ztest_shared->zs_vdev_next_leaf++;
- (void) sprintf(path, ztest_dev_template,
- zopt_dir, zopt_pool, vdev);
+ (void) snprintf(path, sizeof (pathbuf),
+ ztest_dev_template, ztest_opts.zo_dir,
+ ztest_opts.zo_pool, vdev);
}
}
@@ -714,7 +840,7 @@ make_vdev_raidz(char *path, char *aux, size_t size, uint64_t ashift, int r)
VERIFY(nvlist_add_string(raidz, ZPOOL_CONFIG_TYPE,
VDEV_TYPE_RAIDZ) == 0);
VERIFY(nvlist_add_uint64(raidz, ZPOOL_CONFIG_NPARITY,
- zopt_raidz_parity) == 0);
+ ztest_opts.zo_raidz_parity) == 0);
VERIFY(nvlist_add_nvlist_array(raidz, ZPOOL_CONFIG_CHILDREN,
child, r) == 0);
@@ -852,7 +978,7 @@ ztest_dsl_prop_set_uint64(char *osname, zfs_prop_t prop, uint64_t value,
VERIFY3U(dsl_prop_get(osname, propname, sizeof (curval),
1, &curval, setpoint), ==, 0);
- if (zopt_verbose >= 6) {
+ if (ztest_opts.zo_verbose >= 6) {
VERIFY(zfs_prop_index_to_string(prop, curval, &valname) == 0);
(void) printf("%s %s = %s at '%s'\n",
osname, propname, valname, setpoint);
@@ -862,9 +988,9 @@ ztest_dsl_prop_set_uint64(char *osname, zfs_prop_t prop, uint64_t value,
}
static int
-ztest_spa_prop_set_uint64(ztest_shared_t *zs, zpool_prop_t prop, uint64_t value)
+ztest_spa_prop_set_uint64(zpool_prop_t prop, uint64_t value)
{
- spa_t *spa = zs->zs_spa;
+ spa_t *spa = ztest_spa;
nvlist_t *props = NULL;
int error;
@@ -986,13 +1112,16 @@ ztest_range_unlock(rl_t *rl)
}
static void
-ztest_zd_init(ztest_ds_t *zd, objset_t *os)
+ztest_zd_init(ztest_ds_t *zd, ztest_shared_ds_t *szd, objset_t *os)
{
zd->zd_os = os;
zd->zd_zilog = dmu_objset_zil(os);
- zd->zd_seq = 0;
+ zd->zd_shared = szd;
dmu_objset_name(os, zd->zd_name);
+ if (zd->zd_shared != NULL)
+ zd->zd_shared->zd_seq = 0;
+
VERIFY(rwlock_init(&zd->zd_zilog_lock, USYNC_THREAD, NULL) == 0);
VERIFY(_mutex_init(&zd->zd_dirobj_lock, USYNC_THREAD, NULL) == 0);
@@ -2076,8 +2205,9 @@ ztest_zil_commit(ztest_ds_t *zd, uint64_t id)
* will verify that the log really does contain this record.
*/
mutex_enter(&zilog->zl_lock);
- ASSERT(zd->zd_seq <= zilog->zl_commit_lr_seq);
- zd->zd_seq = zilog->zl_commit_lr_seq;
+ ASSERT(zd->zd_shared != NULL);
+ ASSERT3U(zd->zd_shared->zd_seq, <=, zilog->zl_commit_lr_seq);
+ zd->zd_shared->zd_seq = zilog->zl_commit_lr_seq;
mutex_exit(&zilog->zl_lock);
(void) rw_unlock(&zd->zd_zilog_lock);
@@ -2114,7 +2244,7 @@ ztest_zil_remount(ztest_ds_t *zd, uint64_t id)
void
ztest_spa_create_destroy(ztest_ds_t *zd, uint64_t id)
{
- ztest_shared_t *zs = ztest_shared;
+ ztest_shared_opts_t *zo = &ztest_opts;
spa_t *spa;
nvlist_t *nvroot;
@@ -2138,15 +2268,15 @@ ztest_spa_create_destroy(ztest_ds_t *zd, uint64_t id)
* Attempt to create an existing pool. It shouldn't matter
* what's in the nvroot; we should fail with EEXIST.
*/
- (void) rw_rdlock(&zs->zs_name_lock);
+ (void) rw_rdlock(&ztest_name_lock);
nvroot = make_vdev_root("/dev/bogus", NULL, 0, 0, 0, 0, 0, 1);
- VERIFY3U(EEXIST, ==, spa_create(zs->zs_pool, nvroot, NULL, NULL, NULL));
+ VERIFY3U(EEXIST, ==, spa_create(zo->zo_pool, nvroot, NULL, NULL, NULL));
nvlist_free(nvroot);
- VERIFY3U(0, ==, spa_open(zs->zs_pool, &spa, FTAG));
- VERIFY3U(EBUSY, ==, spa_destroy(zs->zs_pool));
+ VERIFY3U(0, ==, spa_open(zo->zo_pool, &spa, FTAG));
+ VERIFY3U(EBUSY, ==, spa_destroy(zo->zo_pool));
spa_close(spa, FTAG);
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
}
static vdev_t *
@@ -2193,14 +2323,15 @@ void
ztest_vdev_add_remove(ztest_ds_t *zd, uint64_t id)
{
ztest_shared_t *zs = ztest_shared;
- spa_t *spa = zs->zs_spa;
+ spa_t *spa = ztest_spa;
uint64_t leaves;
uint64_t guid;
nvlist_t *nvroot;
int error;
- VERIFY(mutex_lock(&zs->zs_vdev_lock) == 0);
- leaves = MAX(zs->zs_mirrors + zs->zs_splits, 1) * zopt_raidz;
+ VERIFY(mutex_lock(&ztest_vdev_lock) == 0);
+ leaves =
+ MAX(zs->zs_mirrors + zs->zs_splits, 1) * ztest_opts.zo_raidz;
spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER);
@@ -2225,9 +2356,9 @@ ztest_vdev_add_remove(ztest_ds_t *zd, uint64_t id)
* dmu_objset_destroy() to fail with EBUSY thus
* leaving the dataset in an inconsistent state.
*/
- VERIFY(rw_wrlock(&ztest_shared->zs_name_lock) == 0);
+ VERIFY(rw_wrlock(&ztest_name_lock) == 0);
error = spa_vdev_remove(spa, guid, B_FALSE);
- VERIFY(rw_unlock(&ztest_shared->zs_name_lock) == 0);
+ VERIFY(rw_unlock(&ztest_name_lock) == 0);
if (error && error != EEXIST)
fatal(0, "spa_vdev_remove() = %d", error);
@@ -2237,8 +2368,10 @@ ztest_vdev_add_remove(ztest_ds_t *zd, uint64_t id)
/*
* Make 1/4 of the devices be log devices.
*/
- nvroot = make_vdev_root(NULL, NULL, zopt_vdev_size, 0,
- ztest_random(4) == 0, zopt_raidz, zs->zs_mirrors, 1);
+ nvroot = make_vdev_root(NULL, NULL,
+ ztest_opts.zo_vdev_size, 0,
+ ztest_random(4) == 0, ztest_opts.zo_raidz,
+ zs->zs_mirrors, 1);
error = spa_vdev_add(spa, nvroot);
nvlist_free(nvroot);
@@ -2249,7 +2382,7 @@ ztest_vdev_add_remove(ztest_ds_t *zd, uint64_t id)
fatal(0, "spa_vdev_add() = %d", error);
}
- VERIFY(mutex_unlock(&ztest_shared->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
}
/*
@@ -2260,7 +2393,7 @@ void
ztest_vdev_aux_add_remove(ztest_ds_t *zd, uint64_t id)
{
ztest_shared_t *zs = ztest_shared;
- spa_t *spa = zs->zs_spa;
+ spa_t *spa = ztest_spa;
vdev_t *rvd = spa->spa_root_vdev;
spa_aux_vdev_t *sav;
char *aux;
@@ -2275,7 +2408,7 @@ ztest_vdev_aux_add_remove(ztest_ds_t *zd, uint64_t id)
aux = ZPOOL_CONFIG_L2CACHE;
}
- VERIFY(mutex_lock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_lock(&ztest_vdev_lock) == 0);
spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER);
@@ -2292,8 +2425,9 @@ ztest_vdev_aux_add_remove(ztest_ds_t *zd, uint64_t id)
for (;;) {
char path[MAXPATHLEN];
int c;
- (void) sprintf(path, ztest_aux_template, zopt_dir,
- zopt_pool, aux, zs->zs_vdev_aux);
+ (void) snprintf(path, sizeof (path), ztest_aux_template,
+ ztest_opts.zo_dir, ztest_opts.zo_pool, aux,
+ zs->zs_vdev_aux);
for (c = 0; c < sav->sav_count; c++)
if (strcmp(sav->sav_vdevs[c]->vdev_path,
path) == 0)
@@ -2312,7 +2446,7 @@ ztest_vdev_aux_add_remove(ztest_ds_t *zd, uint64_t id)
* Add a new device.
*/
nvlist_t *nvroot = make_vdev_root(NULL, aux,
- (zopt_vdev_size * 5) / 4, 0, 0, 0, 0, 1);
+ (ztest_opts.zo_vdev_size * 5) / 4, 0, 0, 0, 0, 1);
error = spa_vdev_add(spa, nvroot);
if (error != 0)
fatal(0, "spa_vdev_add(%p) = %d", nvroot, error);
@@ -2331,7 +2465,7 @@ ztest_vdev_aux_add_remove(ztest_ds_t *zd, uint64_t id)
fatal(0, "spa_vdev_remove(%llu) = %d", guid, error);
}
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
}
/*
@@ -2342,17 +2476,17 @@ void
ztest_split_pool(ztest_ds_t *zd, uint64_t id)
{
ztest_shared_t *zs = ztest_shared;
- spa_t *spa = zs->zs_spa;
+ spa_t *spa = ztest_spa;
vdev_t *rvd = spa->spa_root_vdev;
nvlist_t *tree, **child, *config, *split, **schild;
uint_t c, children, schildren = 0, lastlogid = 0;
int error = 0;
- VERIFY(mutex_lock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_lock(&ztest_vdev_lock) == 0);
/* ensure we have a useable config; mirrors of raidz aren't supported */
- if (zs->zs_mirrors < 3 || zopt_raidz > 1) {
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ if (zs->zs_mirrors < 3 || ztest_opts.zo_raidz > 1) {
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
return;
}
@@ -2411,9 +2545,9 @@ ztest_split_pool(ztest_ds_t *zd, uint64_t id)
spa_config_exit(spa, SCL_VDEV, FTAG);
- (void) rw_wrlock(&zs->zs_name_lock);
+ (void) rw_wrlock(&ztest_name_lock);
error = spa_vdev_split_mirror(spa, "splitp", config, NULL, B_FALSE);
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
nvlist_free(config);
@@ -2426,7 +2560,7 @@ ztest_split_pool(ztest_ds_t *zd, uint64_t id)
++zs->zs_splits;
--zs->zs_mirrors;
}
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
}
@@ -2438,7 +2572,7 @@ void
ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
{
ztest_shared_t *zs = ztest_shared;
- spa_t *spa = zs->zs_spa;
+ spa_t *spa = ztest_spa;
spa_aux_vdev_t *sav = &spa->spa_spares;
vdev_t *rvd = spa->spa_root_vdev;
vdev_t *oldvd, *newvd, *pvd;
@@ -2455,8 +2589,8 @@ ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
int oldvd_is_log;
int error, expected_error;
- VERIFY(mutex_lock(&zs->zs_vdev_lock) == 0);
- leaves = MAX(zs->zs_mirrors, 1) * zopt_raidz;
+ VERIFY(mutex_lock(&ztest_vdev_lock) == 0);
+ leaves = MAX(zs->zs_mirrors, 1) * ztest_opts.zo_raidz;
spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER);
@@ -2482,12 +2616,12 @@ ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
if (zs->zs_mirrors >= 1) {
ASSERT(oldvd->vdev_ops == &vdev_mirror_ops);
ASSERT(oldvd->vdev_children >= zs->zs_mirrors);
- oldvd = oldvd->vdev_child[leaf / zopt_raidz];
+ oldvd = oldvd->vdev_child[leaf / ztest_opts.zo_raidz];
}
- if (zopt_raidz > 1) {
+ if (ztest_opts.zo_raidz > 1) {
ASSERT(oldvd->vdev_ops == &vdev_raidz_ops);
- ASSERT(oldvd->vdev_children == zopt_raidz);
- oldvd = oldvd->vdev_child[leaf % zopt_raidz];
+ ASSERT(oldvd->vdev_children == ztest_opts.zo_raidz);
+ oldvd = oldvd->vdev_child[leaf % ztest_opts.zo_raidz];
}
/*
@@ -2516,7 +2650,7 @@ ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
if (error != 0 && error != ENODEV && error != EBUSY &&
error != ENOTSUP)
fatal(0, "detach (%s) returned %d", oldpath, error);
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
return;
}
@@ -2530,7 +2664,8 @@ ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
(void) strcpy(newpath, newvd->vdev_path);
} else {
(void) snprintf(newpath, sizeof (newpath), ztest_dev_template,
- zopt_dir, zopt_pool, top * leaves + leaf);
+ ztest_opts.zo_dir, ztest_opts.zo_pool,
+ top * leaves + leaf);
if (ztest_random(2) == 0)
newpath[strlen(newpath) - 1] = 'b';
newvd = vdev_lookup_by_path(rvd, newpath);
@@ -2609,7 +2744,7 @@ ztest_vdev_attach_detach(ztest_ds_t *zd, uint64_t id)
(longlong_t)newsize, replacing, error, expected_error);
}
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
}
/*
@@ -2632,7 +2767,7 @@ grow_vdev(vdev_t *vd, void *arg)
fsize = lseek(fd, 0, SEEK_END);
(void) ftruncate(fd, *newsize);
- if (zopt_verbose >= 6) {
+ if (ztest_opts.zo_verbose >= 6) {
(void) printf("%s grew from %lu to %lu bytes\n",
vd->vdev_path, (ulong_t)fsize, (ulong_t)*newsize);
}
@@ -2668,7 +2803,7 @@ online_vdev(vdev_t *vd, void *arg)
* vdev_open fails is by checking the returned newstate.
*/
if (error || newstate != VDEV_STATE_HEALTHY) {
- if (zopt_verbose >= 5) {
+ if (ztest_opts.zo_verbose >= 5) {
(void) printf("Unable to expand vdev, state %llu, "
"error %d\n", (u_longlong_t)newstate, error);
}
@@ -2683,7 +2818,7 @@ online_vdev(vdev_t *vd, void *arg)
* trying to online it.
*/
if (generation != spa->spa_config_generation) {
- if (zopt_verbose >= 5) {
+ if (ztest_opts.zo_verbose >= 5) {
(void) printf("vdev configuration has changed, "
"guid %llu, state %llu, expected gen %llu, "
"got gen %llu\n",
@@ -2729,8 +2864,7 @@ vdev_walk_tree(vdev_t *vd, vdev_t *(*func)(vdev_t *, void *), void *arg)
void
ztest_vdev_LUN_growth(ztest_ds_t *zd, uint64_t id)
{
- ztest_shared_t *zs = ztest_shared;
- spa_t *spa = zs->zs_spa;
+ spa_t *spa = ztest_spa;
vdev_t *vd, *tvd;
metaslab_class_t *mc;
metaslab_group_t *mg;
@@ -2738,7 +2872,7 @@ ztest_vdev_LUN_growth(ztest_ds_t *zd, uint64_t id)
uint64_t top;
uint64_t old_class_space, new_class_space, old_ms_count, new_ms_count;
- VERIFY(mutex_lock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_lock(&ztest_vdev_lock) == 0);
spa_config_enter(spa, SCL_STATE, spa, RW_READER);
top = ztest_random_vdev_top(spa, B_TRUE);
@@ -2764,16 +2898,16 @@ ztest_vdev_LUN_growth(ztest_ds_t *zd, uint64_t id)
* original size, and it has a valid psize.
*/
if (tvd->vdev_state != VDEV_STATE_HEALTHY ||
- psize == 0 || psize >= 4 * zopt_vdev_size) {
+ psize == 0 || psize >= 4 * ztest_opts.zo_vdev_size) {
spa_config_exit(spa, SCL_STATE, spa);
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
return;
}
ASSERT(psize > 0);
newsize = psize + psize / 8;
ASSERT3U(newsize, >, psize);
- if (zopt_verbose >= 6) {
+ if (ztest_opts.zo_verbose >= 6) {
(void) printf("Expanding LUN %s from %lu to %lu\n",
vd->vdev_path, (ulong_t)psize, (ulong_t)newsize);
}
@@ -2786,12 +2920,12 @@ ztest_vdev_LUN_growth(ztest_ds_t *zd, uint64_t id)
if (vdev_walk_tree(tvd, grow_vdev, &newsize) != NULL ||
vdev_walk_tree(tvd, online_vdev, NULL) != NULL ||
tvd->vdev_state != VDEV_STATE_HEALTHY) {
- if (zopt_verbose >= 5) {
+ if (ztest_opts.zo_verbose >= 5) {
(void) printf("Could not expand LUN because "
"the vdev configuration changed.\n");
}
spa_config_exit(spa, SCL_STATE, spa);
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
return;
}
@@ -2820,12 +2954,12 @@ ztest_vdev_LUN_growth(ztest_ds_t *zd, uint64_t id)
new_class_space = metaslab_class_get_space(mc);
if (tvd->vdev_mg != mg || mg->mg_class != mc) {
- if (zopt_verbose >= 5) {
+ if (ztest_opts.zo_verbose >= 5) {
(void) printf("Could not verify LUN expansion due to "
"intervening vdev offline or remove.\n");
}
spa_config_exit(spa, SCL_STATE, spa);
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
return;
}
@@ -2843,7 +2977,7 @@ ztest_vdev_LUN_growth(ztest_ds_t *zd, uint64_t id)
fatal(0, "LUN expansion failed: class_space %llu <= %llu\n",
old_class_space, new_class_space);
- if (zopt_verbose >= 5) {
+ if (ztest_opts.zo_verbose >= 5) {
char oldnumbuf[6], newnumbuf[6];
nicenum(old_class_space, oldnumbuf);
@@ -2853,7 +2987,7 @@ ztest_vdev_LUN_growth(ztest_ds_t *zd, uint64_t id)
}
spa_config_exit(spa, SCL_STATE, spa);
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
}
/*
@@ -2880,7 +3014,8 @@ ztest_dataset_create(char *dsname)
if (err || zilset < 80)
return (err);
- (void) printf("Setting dataset %s to sync always\n", dsname);
+ if (ztest_opts.zo_verbose >= 6)
+ (void) printf("Setting dataset %s to sync always\n", dsname);
return (ztest_dsl_prop_set_uint64(dsname, ZFS_PROP_SYNC,
ZFS_SYNC_ALWAYS, B_FALSE));
}
@@ -2952,7 +3087,6 @@ ztest_snapshot_destroy(char *osname, uint64_t id)
void
ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id)
{
- ztest_shared_t *zs = ztest_shared;
ztest_ds_t zdtmp;
int iters;
int error;
@@ -2960,10 +3094,10 @@ ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id)
char name[MAXNAMELEN];
zilog_t *zilog;
- (void) rw_rdlock(&zs->zs_name_lock);
+ (void) rw_rdlock(&ztest_name_lock);
(void) snprintf(name, MAXNAMELEN, "%s/temp_%llu",
- zs->zs_pool, (u_longlong_t)id);
+ ztest_opts.zo_pool, (u_longlong_t)id);
/*
* If this dataset exists from a previous run, process its replay log
@@ -2972,7 +3106,7 @@ ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id)
*/
if (ztest_random(2) == 0 &&
dmu_objset_own(name, DMU_OST_OTHER, B_FALSE, FTAG, &os) == 0) {
- ztest_zd_init(&zdtmp, os);
+ ztest_zd_init(&zdtmp, NULL, os);
zil_replay(os, &zdtmp, ztest_replay_vector);
ztest_zd_fini(&zdtmp);
dmu_objset_disown(os, FTAG);
@@ -2998,7 +3132,7 @@ ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id)
if (error) {
if (error == ENOSPC) {
ztest_record_enospc(FTAG);
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
return;
}
fatal(0, "dmu_objset_create(%s) = %d", name, error);
@@ -3007,7 +3141,7 @@ ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id)
VERIFY3U(0, ==,
dmu_objset_own(name, DMU_OST_OTHER, B_FALSE, FTAG, &os));
- ztest_zd_init(&zdtmp, os);
+ ztest_zd_init(&zdtmp, NULL, os);
/*
* Open the intent log for it.
@@ -3047,7 +3181,7 @@ ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id)
dmu_objset_disown(os, FTAG);
ztest_zd_fini(&zdtmp);
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
}
/*
@@ -3056,12 +3190,10 @@ ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id)
void
ztest_dmu_snapshot_create_destroy(ztest_ds_t *zd, uint64_t id)
{
- ztest_shared_t *zs = ztest_shared;
-
- (void) rw_rdlock(&zs->zs_name_lock);
+ (void) rw_rdlock(&ztest_name_lock);
(void) ztest_snapshot_destroy(zd->zd_name, id);
(void) ztest_snapshot_create(zd->zd_name, id);
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
}
/*
@@ -3106,7 +3238,6 @@ ztest_dsl_dataset_cleanup(char *osname, uint64_t id)
void
ztest_dsl_dataset_promote_busy(ztest_ds_t *zd, uint64_t id)
{
- ztest_shared_t *zs = ztest_shared;
objset_t *clone;
dsl_dataset_t *ds;
char snap1name[MAXNAMELEN];
@@ -3117,7 +3248,7 @@ ztest_dsl_dataset_promote_busy(ztest_ds_t *zd, uint64_t id)
char *osname = zd->zd_name;
int error;
- (void) rw_rdlock(&zs->zs_name_lock);
+ (void) rw_rdlock(&ztest_name_lock);
ztest_dsl_dataset_cleanup(osname, id);
@@ -3197,7 +3328,7 @@ ztest_dsl_dataset_promote_busy(ztest_ds_t *zd, uint64_t id)
out:
ztest_dsl_dataset_cleanup(osname, id);
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
}
/*
@@ -3396,7 +3527,7 @@ ztest_dmu_read_write(ztest_ds_t *zd, uint64_t id)
dmu_write(os, packobj, packoff, packsize, packbuf, tx);
if (freeit) {
- if (zopt_verbose >= 7) {
+ if (ztest_opts.zo_verbose >= 7) {
(void) printf("freeing offset %llx size %llx"
" txg %llx\n",
(u_longlong_t)bigoff,
@@ -3405,7 +3536,7 @@ ztest_dmu_read_write(ztest_ds_t *zd, uint64_t id)
}
VERIFY(0 == dmu_free_range(os, bigobj, bigoff, bigsize, tx));
} else {
- if (zopt_verbose >= 7) {
+ if (ztest_opts.zo_verbose >= 7) {
(void) printf("writing offset %llx size %llx"
" txg %llx\n",
(u_longlong_t)bigoff,
@@ -3643,7 +3774,7 @@ ztest_dmu_read_write_zcopy(ztest_ds_t *zd, uint64_t id)
* Now write them out.
*/
dmu_write(os, packobj, packoff, packsize, packbuf, tx);
- if (zopt_verbose >= 7) {
+ if (ztest_opts.zo_verbose >= 7) {
(void) printf("writing offset %llx size %llx"
" txg %llx\n",
(u_longlong_t)bigoff,
@@ -4284,37 +4415,35 @@ ztest_dsl_prop_get_set(ztest_ds_t *zd, uint64_t id)
ZFS_PROP_COPIES,
ZFS_PROP_DEDUP
};
- ztest_shared_t *zs = ztest_shared;
- (void) rw_rdlock(&zs->zs_name_lock);
+ (void) rw_rdlock(&ztest_name_lock);
for (int p = 0; p < sizeof (proplist) / sizeof (proplist[0]); p++)
(void) ztest_dsl_prop_set_uint64(zd->zd_name, proplist[p],
ztest_random_dsl_prop(proplist[p]), (int)ztest_random(2));
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
}
/* ARGSUSED */
void
ztest_spa_prop_get_set(ztest_ds_t *zd, uint64_t id)
{
- ztest_shared_t *zs = ztest_shared;
nvlist_t *props = NULL;
- (void) rw_rdlock(&zs->zs_name_lock);
+ (void) rw_rdlock(&ztest_name_lock);
- (void) ztest_spa_prop_set_uint64(zs, ZPOOL_PROP_DEDUPDITTO,
+ (void) ztest_spa_prop_set_uint64(ZPOOL_PROP_DEDUPDITTO,
ZIO_DEDUPDITTO_MIN + ztest_random(ZIO_DEDUPDITTO_MIN));
- VERIFY3U(spa_prop_get(zs->zs_spa, &props), ==, 0);
+ VERIFY3U(spa_prop_get(ztest_spa, &props), ==, 0);
- if (zopt_verbose >= 6)
+ if (ztest_opts.zo_verbose >= 6)
dump_nvlist(props, 4);
nvlist_free(props);
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
}
/*
@@ -4332,7 +4461,7 @@ ztest_dmu_snapshot_hold(ztest_ds_t *zd, uint64_t id)
char tag[100];
char osname[MAXNAMELEN];
- (void) rw_rdlock(&ztest_shared->zs_name_lock);
+ (void) rw_rdlock(&ztest_name_lock);
dmu_objset_name(os, osname);
@@ -4429,7 +4558,7 @@ ztest_dmu_snapshot_hold(ztest_ds_t *zd, uint64_t id)
VERIFY(dmu_objset_hold(fullname, FTAG, &origin) == ENOENT);
out:
- (void) rw_unlock(&ztest_shared->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
}
/*
@@ -4440,7 +4569,7 @@ void
ztest_fault_inject(ztest_ds_t *zd, uint64_t id)
{
ztest_shared_t *zs = ztest_shared;
- spa_t *spa = zs->zs_spa;
+ spa_t *spa = ztest_spa;
int fd;
uint64_t offset;
uint64_t leaves;
@@ -4457,11 +4586,11 @@ ztest_fault_inject(ztest_ds_t *zd, uint64_t id)
uint64_t guid0 = 0;
boolean_t islog = B_FALSE;
- VERIFY(mutex_lock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_lock(&ztest_vdev_lock) == 0);
maxfaults = MAXFAULTS();
- leaves = MAX(zs->zs_mirrors, 1) * zopt_raidz;
+ leaves = MAX(zs->zs_mirrors, 1) * ztest_opts.zo_raidz;
mirror_save = zs->zs_mirrors;
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
ASSERT(leaves >= 1);
@@ -4484,9 +4613,11 @@ ztest_fault_inject(ztest_ds_t *zd, uint64_t id)
* and we'll write random garbage to the randomly chosen leaf.
*/
(void) snprintf(path0, sizeof (path0), ztest_dev_template,
- zopt_dir, zopt_pool, top * leaves + zs->zs_splits);
+ ztest_opts.zo_dir, ztest_opts.zo_pool,
+ top * leaves + zs->zs_splits);
(void) snprintf(pathrand, sizeof (pathrand), ztest_dev_template,
- zopt_dir, zopt_pool, top * leaves + leaf);
+ ztest_opts.zo_dir, ztest_opts.zo_pool,
+ top * leaves + leaf);
vd0 = vdev_lookup_by_path(spa->spa_root_vdev, path0);
if (vd0 != NULL && vd0->vdev_top->vdev_islog)
@@ -4555,12 +4686,12 @@ ztest_fault_inject(ztest_ds_t *zd, uint64_t id)
* leaving the dataset in an inconsistent state.
*/
if (islog)
- (void) rw_wrlock(&ztest_shared->zs_name_lock);
+ (void) rw_wrlock(&ztest_name_lock);
VERIFY(vdev_offline(spa, guid0, flags) != EBUSY);
if (islog)
- (void) rw_unlock(&ztest_shared->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
} else {
(void) vdev_online(spa, guid0, 0, NULL);
}
@@ -4587,9 +4718,9 @@ ztest_fault_inject(ztest_ds_t *zd, uint64_t id)
if (offset >= fsize)
continue;
- VERIFY(mutex_lock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_lock(&ztest_vdev_lock) == 0);
if (mirror_save != zs->zs_mirrors) {
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
(void) close(fd);
return;
}
@@ -4598,9 +4729,9 @@ ztest_fault_inject(ztest_ds_t *zd, uint64_t id)
fatal(1, "can't inject bad word at 0x%llx in %s",
offset, pathrand);
- VERIFY(mutex_unlock(&zs->zs_vdev_lock) == 0);
+ VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
- if (zopt_verbose >= 7)
+ if (ztest_opts.zo_verbose >= 7)
(void) printf("injected bad word into %s,"
" offset 0x%llx\n", pathrand, (u_longlong_t)offset);
}
@@ -4615,7 +4746,7 @@ void
ztest_ddt_repair(ztest_ds_t *zd, uint64_t id)
{
ztest_shared_t *zs = ztest_shared;
- spa_t *spa = zs->zs_spa;
+ spa_t *spa = ztest_spa;
objset_t *os = zd->zd_os;
ztest_od_t od[1];
uint64_t object, blocksize, txg, pattern, psize;
@@ -4638,13 +4769,13 @@ ztest_ddt_repair(ztest_ds_t *zd, uint64_t id)
* Take the name lock as writer to prevent anyone else from changing
* the pool and dataset properies we need to maintain during this test.
*/
- (void) rw_wrlock(&zs->zs_name_lock);
+ (void) rw_wrlock(&ztest_name_lock);
if (ztest_dsl_prop_set_uint64(zd->zd_name, ZFS_PROP_DEDUP, checksum,
B_FALSE) != 0 ||
ztest_dsl_prop_set_uint64(zd->zd_name, ZFS_PROP_COPIES, 1,
B_FALSE) != 0) {
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
return;
}
@@ -4658,7 +4789,7 @@ ztest_ddt_repair(ztest_ds_t *zd, uint64_t id)
dmu_tx_hold_write(tx, object, 0, copies * blocksize);
txg = ztest_tx_assign(tx, TXG_WAIT, FTAG);
if (txg == 0) {
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
return;
}
@@ -4702,7 +4833,7 @@ ztest_ddt_repair(ztest_ds_t *zd, uint64_t id)
zio_buf_free(buf, psize);
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
}
/*
@@ -4712,8 +4843,7 @@ ztest_ddt_repair(ztest_ds_t *zd, uint64_t id)
void
ztest_scrub(ztest_ds_t *zd, uint64_t id)
{
- ztest_shared_t *zs = ztest_shared;
- spa_t *spa = zs->zs_spa;
+ spa_t *spa = ztest_spa;
(void) spa_scan(spa, POOL_SCAN_SCRUB);
(void) poll(NULL, 0, 100); /* wait a moment, then force a restart */
@@ -4727,8 +4857,7 @@ ztest_scrub(ztest_ds_t *zd, uint64_t id)
void
ztest_reguid(ztest_ds_t *zd, uint64_t id)
{
- ztest_shared_t *zs = ztest_shared;
- spa_t *spa = zs->zs_spa;
+ spa_t *spa = ztest_spa;
uint64_t orig, load;
orig = spa_guid(spa);
@@ -4736,7 +4865,7 @@ ztest_reguid(ztest_ds_t *zd, uint64_t id)
if (spa_change_guid(spa) != 0)
return;
- if (zopt_verbose >= 3) {
+ if (ztest_opts.zo_verbose >= 3) {
(void) printf("Changed guid old %llu -> %llu\n",
(u_longlong_t)orig, (u_longlong_t)spa_guid(spa));
}
@@ -4752,13 +4881,12 @@ ztest_reguid(ztest_ds_t *zd, uint64_t id)
void
ztest_spa_rename(ztest_ds_t *zd, uint64_t id)
{
- ztest_shared_t *zs = ztest_shared;
char *oldname, *newname;
spa_t *spa;
- (void) rw_wrlock(&zs->zs_name_lock);
+ (void) rw_wrlock(&ztest_name_lock);
- oldname = zs->zs_pool;
+ oldname = ztest_opts.zo_pool;
newname = umem_alloc(strlen(oldname) + 5, UMEM_NOFAIL);
(void) strcpy(newname, oldname);
(void) strcat(newname, "_tmp");
@@ -4778,7 +4906,7 @@ ztest_spa_rename(ztest_ds_t *zd, uint64_t id)
*/
VERIFY3U(0, ==, spa_open(newname, &spa, FTAG));
- ASSERT(spa == zs->zs_spa);
+ ASSERT(spa == ztest_spa);
spa_close(spa, FTAG);
/*
@@ -4791,12 +4919,12 @@ ztest_spa_rename(ztest_ds_t *zd, uint64_t id)
*/
VERIFY3U(0, ==, spa_open(oldname, &spa, FTAG));
- ASSERT(spa == zs->zs_spa);
+ ASSERT(spa == ztest_spa);
spa_close(spa, FTAG);
umem_free(newname, strlen(newname) + 1);
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
}
/*
@@ -4827,20 +4955,20 @@ ztest_run_zdb(char *pool)
"/usr/sbin%.*s/zdb -bcc%s%s -U %s %s",
isalen,
isa,
- zopt_verbose >= 3 ? "s" : "",
- zopt_verbose >= 4 ? "v" : "",
+ ztest_opts.zo_verbose >= 3 ? "s" : "",
+ ztest_opts.zo_verbose >= 4 ? "v" : "",
spa_config_path,
pool);
free(isa);
- if (zopt_verbose >= 5)
+ if (ztest_opts.zo_verbose >= 5)
(void) printf("Executing %s\n", strstr(zdb, "zdb "));
fp = popen(zdb, "r");
assert(fp != NULL);
while (fgets(zbuf, sizeof (zbuf), fp) != NULL)
- if (zopt_verbose >= 3)
+ if (ztest_opts.zo_verbose >= 3)
(void) printf("%s", zbuf);
status = pclose(fp);
@@ -4860,12 +4988,12 @@ ztest_walk_pool_directory(char *header)
{
spa_t *spa = NULL;
- if (zopt_verbose >= 6)
+ if (ztest_opts.zo_verbose >= 6)
(void) printf("%s\n", header);
mutex_enter(&spa_namespace_lock);
while ((spa = spa_next(spa)) != NULL)
- if (zopt_verbose >= 6)
+ if (ztest_opts.zo_verbose >= 6)
(void) printf("\t%s\n", spa_name(spa));
mutex_exit(&spa_namespace_lock);
}
@@ -4877,7 +5005,7 @@ ztest_spa_import_export(char *oldname, char *newname)
uint64_t pool_guid;
spa_t *spa;
- if (zopt_verbose >= 4) {
+ if (ztest_opts.zo_verbose >= 4) {
(void) printf("import/export: old = %s, new = %s\n",
oldname, newname);
}
@@ -4952,7 +5080,7 @@ ztest_spa_import_export(char *oldname, char *newname)
static void
ztest_resume(spa_t *spa)
{
- if (spa_suspended(spa) && zopt_verbose >= 6)
+ if (spa_suspended(spa) && ztest_opts.zo_verbose >= 6)
(void) printf("resuming from suspended state\n");
spa_vdev_state_enter(spa, SCL_NONE);
vdev_clear(spa, NULL);
@@ -4990,10 +5118,10 @@ ztest_deadman_thread(void *arg)
}
static void
-ztest_execute(ztest_info_t *zi, uint64_t id)
+ztest_execute(int test, ztest_info_t *zi, uint64_t id)
{
- ztest_shared_t *zs = ztest_shared;
- ztest_ds_t *zd = &zs->zs_zd[id % zopt_datasets];
+ ztest_ds_t *zd = &ztest_ds[id % ztest_opts.zo_datasets];
+ ztest_shared_callstate_t *zc = ZTEST_GET_SHARED_CALLSTATE(test);
hrtime_t functime = gethrtime();
for (int i = 0; i < zi->zi_iters; i++)
@@ -5001,10 +5129,10 @@ ztest_execute(ztest_info_t *zi, uint64_t id)
functime = gethrtime() - functime;
- atomic_add_64(&zi->zi_call_count, 1);
- atomic_add_64(&zi->zi_call_time, functime);
+ atomic_add_64(&zc->zc_count, 1);
+ atomic_add_64(&zc->zc_time, functime);
- if (zopt_verbose >= 4) {
+ if (ztest_opts.zo_verbose >= 4) {
Dl_info dli;
(void) dladdr((void *)zi->zi_func, &dli);
(void) printf("%6.2f sec in %s\n",
@@ -5015,11 +5143,13 @@ ztest_execute(ztest_info_t *zi, uint64_t id)
static void *
ztest_thread(void *arg)
{
+ int rand;
uint64_t id = (uintptr_t)arg;
ztest_shared_t *zs = ztest_shared;
uint64_t call_next;
hrtime_t now;
ztest_info_t *zi;
+ ztest_shared_callstate_t *zc;
while ((now = gethrtime()) < zs->zs_thread_stop) {
/*
@@ -5037,13 +5167,16 @@ ztest_thread(void *arg)
/*
* Pick a random function to execute.
*/
- zi = &zs->zs_info[ztest_random(ZTEST_FUNCS)];
- call_next = zi->zi_call_next;
+ rand = ztest_random(ZTEST_FUNCS);
+ zi = &ztest_info[rand];
+ zc = ZTEST_GET_SHARED_CALLSTATE(rand);
+ call_next = zc->zc_next;
if (now >= call_next &&
- atomic_cas_64(&zi->zi_call_next, call_next, call_next +
- ztest_random(2 * zi->zi_interval[0] + 1)) == call_next)
- ztest_execute(zi, id);
+ atomic_cas_64(&zc->zc_next, call_next, call_next +
+ ztest_random(2 * zi->zi_interval[0] + 1)) == call_next) {
+ ztest_execute(rand, zi, id);
+ }
}
return (NULL);
@@ -5056,13 +5189,13 @@ ztest_dataset_name(char *dsname, char *pool, int d)
}
static void
-ztest_dataset_destroy(ztest_shared_t *zs, int d)
+ztest_dataset_destroy(int d)
{
char name[MAXNAMELEN];
- ztest_dataset_name(name, zs->zs_pool, d);
+ ztest_dataset_name(name, ztest_opts.zo_pool, d);
- if (zopt_verbose >= 3)
+ if (ztest_opts.zo_verbose >= 3)
(void) printf("Destroying %s to free up space\n", name);
/*
@@ -5070,8 +5203,10 @@ ztest_dataset_destroy(ztest_shared_t *zs, int d)
* ztest thread t operates on dataset (t % zopt_datasets),
* so there may be more than one thing to clean up.
*/
- for (int t = d; t < zopt_threads; t += zopt_datasets)
+ for (int t = d; t < ztest_opts.zo_threads;
+ t += ztest_opts.zo_datasets) {
ztest_dsl_dataset_cleanup(name, t);
+ }
(void) dmu_objset_find(name, ztest_objset_destroy_cb, NULL,
DS_FIND_SNAPSHOTS | DS_FIND_CHILDREN);
@@ -5099,31 +5234,31 @@ ztest_dataset_dirobj_verify(ztest_ds_t *zd)
}
static int
-ztest_dataset_open(ztest_shared_t *zs, int d)
+ztest_dataset_open(int d)
{
- ztest_ds_t *zd = &zs->zs_zd[d];
- uint64_t committed_seq = zd->zd_seq;
+ ztest_ds_t *zd = &ztest_ds[d];
+ uint64_t committed_seq = ZTEST_GET_SHARED_DS(d)->zd_seq;
objset_t *os;
zilog_t *zilog;
char name[MAXNAMELEN];
int error;
- ztest_dataset_name(name, zs->zs_pool, d);
+ ztest_dataset_name(name, ztest_opts.zo_pool, d);
- (void) rw_rdlock(&zs->zs_name_lock);
+ (void) rw_rdlock(&ztest_name_lock);
error = ztest_dataset_create(name);
if (error == ENOSPC) {
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
ztest_record_enospc(FTAG);
return (error);
}
ASSERT(error == 0 || error == EEXIST);
VERIFY3U(dmu_objset_hold(name, zd, &os), ==, 0);
- (void) rw_unlock(&zs->zs_name_lock);
+ (void) rw_unlock(&ztest_name_lock);
- ztest_zd_init(zd, os);
+ ztest_zd_init(zd, ZTEST_GET_SHARED_DS(d), os);
zilog = zd->zd_zilog;
@@ -5138,7 +5273,7 @@ ztest_dataset_open(ztest_shared_t *zs, int d)
ztest_dataset_dirobj_verify(zd);
- if (zopt_verbose >= 6)
+ if (ztest_opts.zo_verbose >= 6)
(void) printf("%s replay %llu blocks, %llu records, seq %llu\n",
zd->zd_name,
(u_longlong_t)zilog->zl_parse_blk_count,
@@ -5156,9 +5291,9 @@ ztest_dataset_open(ztest_shared_t *zs, int d)
}
static void
-ztest_dataset_close(ztest_shared_t *zs, int d)
+ztest_dataset_close(int d)
{
- ztest_ds_t *zd = &zs->zs_zd[d];
+ ztest_ds_t *zd = &ztest_ds[d];
zil_close(zd->zd_zilog);
dmu_objset_rele(zd->zd_os, zd);
@@ -5183,15 +5318,18 @@ ztest_run(ztest_shared_t *zs)
/*
* Initialize parent/child shared state.
*/
- VERIFY(_mutex_init(&zs->zs_vdev_lock, USYNC_THREAD, NULL) == 0);
- VERIFY(rwlock_init(&zs->zs_name_lock, USYNC_THREAD, NULL) == 0);
+ VERIFY(_mutex_init(&ztest_vdev_lock, USYNC_THREAD, NULL) == 0);
+ VERIFY(rwlock_init(&ztest_name_lock, USYNC_THREAD, NULL) == 0);
zs->zs_thread_start = gethrtime();
- zs->zs_thread_stop = zs->zs_thread_start + zopt_passtime * NANOSEC;
+ zs->zs_thread_stop =
+ zs->zs_thread_start + ztest_opts.zo_passtime * NANOSEC;
zs->zs_thread_stop = MIN(zs->zs_thread_stop, zs->zs_proc_stop);
zs->zs_thread_kill = zs->zs_thread_stop;
- if (ztest_random(100) < zopt_killrate)
- zs->zs_thread_kill -= ztest_random(zopt_passtime * NANOSEC);
+ if (ztest_random(100) < ztest_opts.zo_killrate) {
+ zs->zs_thread_kill -=
+ ztest_random(ztest_opts.zo_passtime * NANOSEC);
+ }
(void) _mutex_init(&zcl.zcl_callbacks_lock, USYNC_THREAD, NULL);
@@ -5202,11 +5340,11 @@ ztest_run(ztest_shared_t *zs)
* Open our pool.
*/
kernel_init(FREAD | FWRITE);
- VERIFY(spa_open(zs->zs_pool, &spa, FTAG) == 0);
+ VERIFY(spa_open(ztest_opts.zo_pool, &spa, FTAG) == 0);
spa->spa_debug = B_TRUE;
- zs->zs_spa = spa;
+ ztest_spa = spa;
- VERIFY3U(0, ==, dmu_objset_hold(zs->zs_pool, FTAG, &os));
+ VERIFY3U(0, ==, dmu_objset_hold(ztest_opts.zo_pool, FTAG, &os));
zs->zs_guid = dmu_objset_fsid_guid(os);
dmu_objset_rele(os, FTAG);
@@ -5253,21 +5391,23 @@ ztest_run(ztest_shared_t *zs)
* If we got any ENOSPC errors on the previous run, destroy something.
*/
if (zs->zs_enospc_count != 0) {
- int d = ztest_random(zopt_datasets);
- ztest_dataset_destroy(zs, d);
+ int d = ztest_random(ztest_opts.zo_datasets);
+ ztest_dataset_destroy(d);
}
zs->zs_enospc_count = 0;
- tid = umem_zalloc(zopt_threads * sizeof (thread_t), UMEM_NOFAIL);
+ tid = umem_zalloc(ztest_opts.zo_threads * sizeof (thread_t),
+ UMEM_NOFAIL);
- if (zopt_verbose >= 4)
+ if (ztest_opts.zo_verbose >= 4)
(void) printf("starting main threads...\n");
/*
* Kick off all the tests that run in parallel.
*/
- for (int t = 0; t < zopt_threads; t++) {
- if (t < zopt_datasets && ztest_dataset_open(zs, t) != 0)
+ for (int t = 0; t < ztest_opts.zo_threads; t++) {
+ if (t < ztest_opts.zo_datasets &&
+ ztest_dataset_open(t) != 0)
return;
VERIFY(thr_create(0, 0, ztest_thread, (void *)(uintptr_t)t,
THR_BOUND, &tid[t]) == 0);
@@ -5277,10 +5417,10 @@ ztest_run(ztest_shared_t *zs)
* Wait for all of the tests to complete. We go in reverse order
* so we don't close datasets while threads are still using them.
*/
- for (int t = zopt_threads - 1; t >= 0; t--) {
+ for (int t = ztest_opts.zo_threads - 1; t >= 0; t--) {
VERIFY(thr_join(tid[t], NULL, NULL) == 0);
- if (t < zopt_datasets)
- ztest_dataset_close(zs, t);
+ if (t < ztest_opts.zo_datasets)
+ ztest_dataset_close(t);
}
txg_wait_synced(spa_get_dsl(spa), 0);
@@ -5288,7 +5428,7 @@ ztest_run(ztest_shared_t *zs)
zs->zs_alloc = metaslab_class_get_alloc(spa_normal_class(spa));
zs->zs_space = metaslab_class_get_space(spa_normal_class(spa));
- umem_free(tid, zopt_threads * sizeof (thread_t));
+ umem_free(tid, ztest_opts.zo_threads * sizeof (thread_t));
/* Kill the resume thread */
ztest_exiting = B_TRUE;
@@ -5309,7 +5449,7 @@ ztest_run(ztest_shared_t *zs)
*/
mutex_enter(&spa_namespace_lock);
for (spa = spa_next(NULL); spa != NULL; spa = spa_next(spa))
- if (zopt_verbose > 3)
+ if (ztest_opts.zo_verbose > 3)
(void) printf("spa_next: found %s\n", spa_name(spa));
mutex_exit(&spa_namespace_lock);
@@ -5319,9 +5459,10 @@ ztest_run(ztest_shared_t *zs)
*/
if (ztest_random(2) == 0) {
char name[MAXNAMELEN];
- (void) snprintf(name, MAXNAMELEN, "%s_import", zs->zs_pool);
- ztest_spa_import_export(zs->zs_pool, name);
- ztest_spa_import_export(name, zs->zs_pool);
+ (void) snprintf(name, MAXNAMELEN, "%s_import",
+ ztest_opts.zo_pool);
+ ztest_spa_import_export(ztest_opts.zo_pool, name);
+ ztest_spa_import_export(name, ztest_opts.zo_pool);
}
kernel_fini();
@@ -5330,23 +5471,23 @@ ztest_run(ztest_shared_t *zs)
(void) _mutex_destroy(&zcl.zcl_callbacks_lock);
- (void) rwlock_destroy(&zs->zs_name_lock);
- (void) _mutex_destroy(&zs->zs_vdev_lock);
+ (void) rwlock_destroy(&ztest_name_lock);
+ (void) _mutex_destroy(&ztest_vdev_lock);
}
static void
-ztest_freeze(ztest_shared_t *zs)
+ztest_freeze(void)
{
- ztest_ds_t *zd = &zs->zs_zd[0];
+ ztest_ds_t *zd = &ztest_ds[0];
spa_t *spa;
int numloops = 0;
- if (zopt_verbose >= 3)
+ if (ztest_opts.zo_verbose >= 3)
(void) printf("testing spa_freeze()...\n");
kernel_init(FREAD | FWRITE);
- VERIFY3U(0, ==, spa_open(zs->zs_pool, &spa, FTAG));
- VERIFY3U(0, ==, ztest_dataset_open(zs, 0));
+ VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG));
+ VERIFY3U(0, ==, ztest_dataset_open(0));
/*
* Force the first log block to be transactionally allocated.
@@ -5373,7 +5514,8 @@ ztest_freeze(ztest_shared_t *zs)
* to increase well beyond the last synced value in the uberblock.
* The ZIL should be OK with that.
*/
- while (ztest_random(10) != 0 && numloops++ < zopt_maxloops) {
+ while (ztest_random(10) != 0 &&
+ numloops++ < ztest_opts.zo_maxloops) {
ztest_dmu_write_parallel(zd, 0);
ztest_dmu_object_alloc_free(zd, 0);
txg_wait_synced(spa_get_dsl(spa), 0);
@@ -5388,7 +5530,7 @@ ztest_freeze(ztest_shared_t *zs)
/*
* Close our dataset and close the pool.
*/
- ztest_dataset_close(zs, 0);
+ ztest_dataset_close(0);
spa_close(spa, FTAG);
kernel_fini();
@@ -5396,9 +5538,9 @@ ztest_freeze(ztest_shared_t *zs)
* Open and close the pool and dataset to induce log replay.
*/
kernel_init(FREAD | FWRITE);
- VERIFY3U(0, ==, spa_open(zs->zs_pool, &spa, FTAG));
- VERIFY3U(0, ==, ztest_dataset_open(zs, 0));
- ztest_dataset_close(zs, 0);
+ VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG));
+ VERIFY3U(0, ==, ztest_dataset_open(0));
+ ztest_dataset_close(0);
spa_close(spa, FTAG);
kernel_fini();
}
@@ -5439,9 +5581,6 @@ make_random_props()
VERIFY(nvlist_alloc(&props, NV_UNIQUE_NAME, 0) == 0);
VERIFY(nvlist_add_uint64(props, "autoreplace", 1) == 0);
- (void) printf("props:\n");
- dump_nvlist(props, 4);
-
return (props);
}
@@ -5455,38 +5594,206 @@ ztest_init(ztest_shared_t *zs)
spa_t *spa;
nvlist_t *nvroot, *props;
- VERIFY(_mutex_init(&zs->zs_vdev_lock, USYNC_THREAD, NULL) == 0);
- VERIFY(rwlock_init(&zs->zs_name_lock, USYNC_THREAD, NULL) == 0);
+ VERIFY(_mutex_init(&ztest_vdev_lock, USYNC_THREAD, NULL) == 0);
+ VERIFY(rwlock_init(&ztest_name_lock, USYNC_THREAD, NULL) == 0);
kernel_init(FREAD | FWRITE);
/*
* Create the storage pool.
*/
- (void) spa_destroy(zs->zs_pool);
+ (void) spa_destroy(ztest_opts.zo_pool);
ztest_shared->zs_vdev_next_leaf = 0;
zs->zs_splits = 0;
- zs->zs_mirrors = zopt_mirrors;
- nvroot = make_vdev_root(NULL, NULL, zopt_vdev_size, 0,
- 0, zopt_raidz, zs->zs_mirrors, 1);
+ zs->zs_mirrors = ztest_opts.zo_mirrors;
+ nvroot = make_vdev_root(NULL, NULL, ztest_opts.zo_vdev_size, 0,
+ 0, ztest_opts.zo_raidz, zs->zs_mirrors, 1);
props = make_random_props();
- VERIFY3U(0, ==, spa_create(zs->zs_pool, nvroot, props, NULL, NULL));
+ VERIFY3U(0, ==, spa_create(ztest_opts.zo_pool, nvroot, props,
+ NULL, NULL));
nvlist_free(nvroot);
- VERIFY3U(0, ==, spa_open(zs->zs_pool, &spa, FTAG));
- metaslab_sz = 1ULL << spa->spa_root_vdev->vdev_child[0]->vdev_ms_shift;
+ VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG));
+ zs->zs_metaslab_sz =
+ 1ULL << spa->spa_root_vdev->vdev_child[0]->vdev_ms_shift;
spa_close(spa, FTAG);
kernel_fini();
- ztest_run_zdb(zs->zs_pool);
+ ztest_run_zdb(ztest_opts.zo_pool);
+
+ ztest_freeze();
+
+ ztest_run_zdb(ztest_opts.zo_pool);
+
+ (void) rwlock_destroy(&ztest_name_lock);
+ (void) _mutex_destroy(&ztest_vdev_lock);
+}
+
+static void
+setup_fds(void)
+{
+ int fd;
+#ifdef illumos
+
+ char *tmp = tempnam(NULL, NULL);
+ fd = open(tmp, O_RDWR | O_CREAT, 0700);
+ ASSERT3U(fd, ==, ZTEST_FD_DATA);
+ (void) unlink(tmp);
+ free(tmp);
+#else
+ char tmp[MAXPATHLEN];
+
+ strlcpy(tmp, ztest_opts.zo_dir, MAXPATHLEN);
+ strlcat(tmp, "/ztest.XXXXXX", MAXPATHLEN);
+ fd = mkstemp(tmp);
+ ASSERT3U(fd, ==, ZTEST_FD_DATA);
+#endif
+
+ fd = open("/dev/urandom", O_RDONLY);
+ ASSERT3U(fd, ==, ZTEST_FD_RAND);
+}
+
+static void
+setup_hdr(void)
+{
+ ztest_shared_hdr_t *hdr;
+
+#ifndef illumos
+ pwrite(ZTEST_FD_DATA, "", 1, 0);
+#endif
+
+ hdr = (void *)mmap(0, P2ROUNDUP(sizeof (*hdr), getpagesize()),
+ PROT_READ | PROT_WRITE, MAP_SHARED, ZTEST_FD_DATA, 0);
+ ASSERT(hdr != MAP_FAILED);
+
+ hdr->zh_hdr_size = sizeof (ztest_shared_hdr_t);
+ hdr->zh_opts_size = sizeof (ztest_shared_opts_t);
+ hdr->zh_size = sizeof (ztest_shared_t);
+ hdr->zh_stats_size = sizeof (ztest_shared_callstate_t);
+ hdr->zh_stats_count = ZTEST_FUNCS;
+ hdr->zh_ds_size = sizeof (ztest_shared_ds_t);
+ hdr->zh_ds_count = ztest_opts.zo_datasets;
+
+ (void) munmap((caddr_t)hdr, P2ROUNDUP(sizeof (*hdr), getpagesize()));
+}
+
+static void
+setup_data(void)
+{
+ int size, offset;
+ ztest_shared_hdr_t *hdr;
+ uint8_t *buf;
+
+ hdr = (void *)mmap(0, P2ROUNDUP(sizeof (*hdr), getpagesize()),
+ PROT_READ, MAP_SHARED, ZTEST_FD_DATA, 0);
+ ASSERT(hdr != MAP_FAILED);
+
+ size = hdr->zh_hdr_size;
+ size += hdr->zh_opts_size;
+ size += hdr->zh_size;
+ size += hdr->zh_stats_size * hdr->zh_stats_count;
+ size += hdr->zh_ds_size * hdr->zh_ds_count;
+
+ (void) munmap((caddr_t)hdr, P2ROUNDUP(sizeof (*hdr), getpagesize()));
+ hdr = ztest_shared_hdr = (void *)mmap(0, P2ROUNDUP(size, getpagesize()),
+ PROT_READ | PROT_WRITE, MAP_SHARED, ZTEST_FD_DATA, 0);
+ ASSERT(hdr != MAP_FAILED);
+ buf = (uint8_t *)hdr;
+
+ offset = hdr->zh_hdr_size;
+ ztest_shared_opts = (void *)&buf[offset];
+ offset += hdr->zh_opts_size;
+ ztest_shared = (void *)&buf[offset];
+ offset += hdr->zh_size;
+ ztest_shared_callstate = (void *)&buf[offset];
+ offset += hdr->zh_stats_size * hdr->zh_stats_count;
+ ztest_shared_ds = (void *)&buf[offset];
+}
+
+static boolean_t
+exec_child(char *cmd, char *libpath, boolean_t ignorekill, int *statusp)
+{
+ pid_t pid;
+ int status;
+ char cmdbuf[MAXPATHLEN];
+
+ pid = fork();
+
+ if (cmd == NULL) {
+ (void) strlcpy(cmdbuf, getexecname(), sizeof (cmdbuf));
+ cmd = cmdbuf;
+ }
+
+ if (pid == -1)
+ fatal(1, "fork failed");
+
+ if (pid == 0) { /* child */
+ char *emptyargv[2] = { cmd, NULL };
+
+ struct rlimit rl = { 1024, 1024 };
+ (void) setrlimit(RLIMIT_NOFILE, &rl);
+ (void) enable_extended_FILE_stdio(-1, -1);
+ if (libpath != NULL)
+ VERIFY(0 == setenv("LD_LIBRARY_PATH", libpath, 1));
+#ifdef illumos
+ (void) execv(cmd, emptyargv);
+#else
+ (void) execvp(cmd, emptyargv);
+#endif
+ ztest_dump_core = B_FALSE;
+ fatal(B_TRUE, "exec failed: %s", cmd);
+ }
+
+ while (waitpid(pid, &status, 0) != pid)
+ continue;
+ if (statusp != NULL)
+ *statusp = status;
+
+ if (WIFEXITED(status)) {
+ if (WEXITSTATUS(status) != 0) {
+ (void) fprintf(stderr, "child exited with code %d\n",
+ WEXITSTATUS(status));
+ exit(2);
+ }
+ return (B_FALSE);
+ } else if (WIFSIGNALED(status)) {
+ if (!ignorekill || WTERMSIG(status) != SIGKILL) {
+ (void) fprintf(stderr, "child died with signal %d\n",
+ WTERMSIG(status));
+ exit(3);
+ }
+ return (B_TRUE);
+ } else {
+ (void) fprintf(stderr, "something strange happened to child\n");
+ exit(4);
+ /* NOTREACHED */
+ }
+}
+
+static void
+ztest_run_init(void)
+{
+ ztest_shared_t *zs = ztest_shared;
- ztest_freeze(zs);
+ ASSERT(ztest_opts.zo_init != 0);
- ztest_run_zdb(zs->zs_pool);
+ /*
+ * Blow away any existing copy of zpool.cache
+ */
+ (void) remove(spa_config_path);
- (void) rwlock_destroy(&zs->zs_name_lock);
- (void) _mutex_destroy(&zs->zs_vdev_lock);
+ /*
+ * Create and initialize our storage pool.
+ */
+ for (int i = 1; i <= ztest_opts.zo_init; i++) {
+ bzero(zs, sizeof (ztest_shared_t));
+ if (ztest_opts.zo_verbose >= 3 &&
+ ztest_opts.zo_init != 1) {
+ (void) printf("ztest_init(), pass %d\n", i);
+ }
+ ztest_init(zs);
+ }
}
int
@@ -5494,63 +5801,92 @@ main(int argc, char **argv)
{
int kills = 0;
int iters = 0;
+ int older = 0;
+ int newer = 0;
ztest_shared_t *zs;
- size_t shared_size;
ztest_info_t *zi;
+ ztest_shared_callstate_t *zc;
char timebuf[100];
char numbuf[6];
spa_t *spa;
+ char cmd[MAXNAMELEN];
+ boolean_t hasalt;
+
+ boolean_t ischild = (0 == lseek(ZTEST_FD_DATA, 0, SEEK_CUR));
+ ASSERT(ischild || errno == EBADF);
(void) setvbuf(stdout, NULL, _IOLBF, 0);
- ztest_random_fd = open("/dev/urandom", O_RDONLY);
+ if (!ischild) {
+ process_options(argc, argv);
- process_options(argc, argv);
+ setup_fds();
+ setup_hdr();
+ setup_data();
+ bcopy(&ztest_opts, ztest_shared_opts,
+ sizeof (*ztest_shared_opts));
+ } else {
+ setup_data();
+ bcopy(ztest_shared_opts, &ztest_opts, sizeof (ztest_opts));
+ }
+ ASSERT3U(ztest_opts.zo_datasets, ==, ztest_shared_hdr->zh_ds_count);
/* Override location of zpool.cache */
- (void) asprintf((char **)&spa_config_path, "%s/zpool.cache", zopt_dir);
+ (void) asprintf((char **)&spa_config_path, "%s/zpool.cache",
+ ztest_opts.zo_dir);
- /*
- * Blow away any existing copy of zpool.cache
- */
- if (zopt_init != 0)
- (void) remove(spa_config_path);
+ ztest_ds = umem_alloc(ztest_opts.zo_datasets * sizeof (ztest_ds_t),
+ UMEM_NOFAIL);
+ zs = ztest_shared;
- shared_size = sizeof (*zs) + zopt_datasets * sizeof (ztest_ds_t);
+ if (ischild) {
+ metaslab_gang_bang = ztest_opts.zo_metaslab_gang_bang;
+ metaslab_df_alloc_threshold =
+ zs->zs_metaslab_df_alloc_threshold;
- zs = ztest_shared = (void *)mmap(0,
- P2ROUNDUP(shared_size, getpagesize()),
- PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
+ if (zs->zs_do_init)
+ ztest_run_init();
+ else
+ ztest_run(zs);
+ exit(0);
+ }
+
+ hasalt = (strlen(ztest_opts.zo_alt_ztest) != 0);
- if (zopt_verbose >= 1) {
+ if (ztest_opts.zo_verbose >= 1) {
(void) printf("%llu vdevs, %d datasets, %d threads,"
" %llu seconds...\n",
- (u_longlong_t)zopt_vdevs, zopt_datasets, zopt_threads,
- (u_longlong_t)zopt_time);
+ (u_longlong_t)ztest_opts.zo_vdevs,
+ ztest_opts.zo_datasets,
+ ztest_opts.zo_threads,
+ (u_longlong_t)ztest_opts.zo_time);
}
- /*
- * Create and initialize our storage pool.
- */
- for (int i = 1; i <= zopt_init; i++) {
- bzero(zs, sizeof (ztest_shared_t));
- if (zopt_verbose >= 3 && zopt_init != 1)
- (void) printf("ztest_init(), pass %d\n", i);
- zs->zs_pool = zopt_pool;
- ztest_init(zs);
+ (void) strlcpy(cmd, getexecname(), sizeof (cmd));
+
+ zs->zs_do_init = B_TRUE;
+ if (strlen(ztest_opts.zo_alt_ztest) != 0) {
+ if (ztest_opts.zo_verbose >= 1) {
+ (void) printf("Executing older ztest for "
+ "initialization: %s\n", ztest_opts.zo_alt_ztest);
+ }
+ VERIFY(!exec_child(ztest_opts.zo_alt_ztest,
+ ztest_opts.zo_alt_libpath, B_FALSE, NULL));
+ } else {
+ VERIFY(!exec_child(NULL, NULL, B_FALSE, NULL));
}
+ zs->zs_do_init = B_FALSE;
- zs->zs_pool = zopt_pool;
zs->zs_proc_start = gethrtime();
- zs->zs_proc_stop = zs->zs_proc_start + zopt_time * NANOSEC;
+ zs->zs_proc_stop = zs->zs_proc_start + ztest_opts.zo_time * NANOSEC;
for (int f = 0; f < ZTEST_FUNCS; f++) {
- zi = &zs->zs_info[f];
- *zi = ztest_info[f];
+ zi = &ztest_info[f];
+ zc = ZTEST_GET_SHARED_CALLSTATE(f);
if (zs->zs_proc_start + zi->zi_interval[0] > zs->zs_proc_stop)
- zi->zi_call_next = UINT64_MAX;
+ zc->zc_next = UINT64_MAX;
else
- zi->zi_call_next = zs->zs_proc_start +
+ zc->zc_next = zs->zs_proc_start +
ztest_random(2 * zi->zi_interval[0] + 1);
}
@@ -5561,60 +5897,43 @@ main(int argc, char **argv)
*/
while (gethrtime() < zs->zs_proc_stop) {
int status;
- pid_t pid;
+ boolean_t killed;
/*
* Initialize the workload counters for each function.
*/
for (int f = 0; f < ZTEST_FUNCS; f++) {
- zi = &zs->zs_info[f];
- zi->zi_call_count = 0;
- zi->zi_call_time = 0;
+ zc = ZTEST_GET_SHARED_CALLSTATE(f);
+ zc->zc_count = 0;
+ zc->zc_time = 0;
}
/* Set the allocation switch size */
- metaslab_df_alloc_threshold = ztest_random(metaslab_sz / 4) + 1;
+ zs->zs_metaslab_df_alloc_threshold =
+ ztest_random(zs->zs_metaslab_sz / 4) + 1;
- pid = fork();
-
- if (pid == -1)
- fatal(1, "fork failed");
-
- if (pid == 0) { /* child */
- struct rlimit rl = { 1024, 1024 };
- (void) setrlimit(RLIMIT_NOFILE, &rl);
- (void) enable_extended_FILE_stdio(-1, -1);
- ztest_run(zs);
- exit(0);
- }
-
- while (waitpid(pid, &status, 0) != pid)
- continue;
-
- if (WIFEXITED(status)) {
- if (WEXITSTATUS(status) != 0) {
- (void) fprintf(stderr,
- "child exited with code %d\n",
- WEXITSTATUS(status));
- exit(2);
- }
- } else if (WIFSIGNALED(status)) {
- if (WTERMSIG(status) != SIGKILL) {
- (void) fprintf(stderr,
- "child died with signal %d\n",
- WTERMSIG(status));
- exit(3);
+ if (!hasalt || ztest_random(2) == 0) {
+ if (hasalt && ztest_opts.zo_verbose >= 1) {
+ (void) printf("Executing newer ztest: %s\n",
+ cmd);
}
- kills++;
+ newer++;
+ killed = exec_child(cmd, NULL, B_TRUE, &status);
} else {
- (void) fprintf(stderr, "something strange happened "
- "to child\n");
- exit(4);
+ if (hasalt && ztest_opts.zo_verbose >= 1) {
+ (void) printf("Executing older ztest: %s\n",
+ ztest_opts.zo_alt_ztest);
+ }
+ older++;
+ killed = exec_child(ztest_opts.zo_alt_ztest,
+ ztest_opts.zo_alt_libpath, B_TRUE, &status);
}
+ if (killed)
+ kills++;
iters++;
- if (zopt_verbose >= 1) {
+ if (ztest_opts.zo_verbose >= 1) {
hrtime_t now = gethrtime();
now = MIN(now, zs->zs_proc_stop);
@@ -5629,10 +5948,10 @@ main(int argc, char **argv)
100.0 * zs->zs_alloc / zs->zs_space,
numbuf,
100.0 * (now - zs->zs_proc_start) /
- (zopt_time * NANOSEC), timebuf);
+ (ztest_opts.zo_time * NANOSEC), timebuf);
}
- if (zopt_verbose >= 2) {
+ if (ztest_opts.zo_verbose >= 2) {
(void) printf("\nWorkload summary:\n\n");
(void) printf("%7s %9s %s\n",
"Calls", "Time", "Function");
@@ -5641,11 +5960,12 @@ main(int argc, char **argv)
for (int f = 0; f < ZTEST_FUNCS; f++) {
Dl_info dli;
- zi = &zs->zs_info[f];
- print_time(zi->zi_call_time, timebuf);
+ zi = &ztest_info[f];
+ zc = ZTEST_GET_SHARED_CALLSTATE(f);
+ print_time(zc->zc_time, timebuf);
(void) dladdr((void *)zi->zi_func, &dli);
(void) printf("%7llu %9s %s\n",
- (u_longlong_t)zi->zi_call_count, timebuf,
+ (u_longlong_t)zc->zc_count, timebuf,
dli.dli_sname);
}
(void) printf("\n");
@@ -5657,22 +5977,28 @@ main(int argc, char **argv)
* instead of 'ztest'. Do a blind rename in case this happened.
*/
kernel_init(FREAD);
- if (spa_open(zopt_pool, &spa, FTAG) == 0) {
+ if (spa_open(ztest_opts.zo_pool, &spa, FTAG) == 0) {
spa_close(spa, FTAG);
} else {
char tmpname[MAXNAMELEN];
kernel_fini();
kernel_init(FREAD | FWRITE);
(void) snprintf(tmpname, sizeof (tmpname), "%s_tmp",
- zopt_pool);
- (void) spa_rename(tmpname, zopt_pool);
+ ztest_opts.zo_pool);
+ (void) spa_rename(tmpname, ztest_opts.zo_pool);
}
kernel_fini();
- ztest_run_zdb(zopt_pool);
+ ztest_run_zdb(ztest_opts.zo_pool);
}
- if (zopt_verbose >= 1) {
+ if (ztest_opts.zo_verbose >= 1) {
+ if (hasalt) {
+ (void) printf("%d runs of older ztest: %s\n", older,
+ ztest_opts.zo_alt_ztest);
+ (void) printf("%d runs of newer ztest: %s\n", newer,
+ cmd);
+ }
(void) printf("%d killed, %d completed, %.0f%% kill rate\n",
kills, iters - kills, (100.0 * kills) / MAX(1, iters));
}
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
index 129d81e875a4..989dd8072187 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h
@@ -24,7 +24,7 @@
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2011 Pawel Jakub Dawidek <pawel@dawidek.net>.
* All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
* Copyright (c) 2012, Joyent, Inc. All rights reserved.
* Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org>. All rights reserved.
*/
@@ -237,6 +237,7 @@ typedef struct splitflags {
extern int zpool_scan(zpool_handle_t *, pool_scan_func_t);
extern int zpool_clear(zpool_handle_t *, const char *, nvlist_t *);
extern int zpool_reguid(zpool_handle_t *);
+extern int zpool_reopen(zpool_handle_t *);
extern int zpool_vdev_online(zpool_handle_t *, const char *, int,
vdev_state_t *);
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c
index 6f579c5ab122..7e73d0f9b688 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_import.c
@@ -1145,7 +1145,7 @@ zpool_find_import_impl(libzfs_handle_t *hdl, importargs_t *iarg)
char *end, **dir = iarg->path;
size_t pathleft;
nvlist_t *ret = NULL;
- static char *default_dir = "/dev/dsk";
+ static char *default_dir = "/dev";
pool_list_t pools = { 0 };
pool_entry_t *pe, *penext;
vdev_entry_t *ve, *venext;
diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
index 2605768b2ac7..723a52336083 100644
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
@@ -22,7 +22,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
#include <sys/types.h>
@@ -301,6 +301,7 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, size_t len,
case ZPOOL_PROP_SIZE:
case ZPOOL_PROP_ALLOCATED:
case ZPOOL_PROP_FREE:
+ case ZPOOL_PROP_EXPANDSZ:
(void) zfs_nicenum(intval, buf, len);
break;
@@ -390,8 +391,8 @@ pool_uses_efi(nvlist_t *config)
return (B_FALSE);
}
-static boolean_t
-pool_is_bootable(zpool_handle_t *zhp)
+boolean_t
+zpool_is_bootable(zpool_handle_t *zhp)
{
char bootfs[ZPOOL_MAXNAMELEN];
@@ -1126,7 +1127,7 @@ zpool_add(zpool_handle_t *zhp, nvlist_t *nvroot)
return (zfs_error(hdl, EZFS_BADVERSION, msg));
}
- if (pool_is_bootable(zhp) && nvlist_lookup_nvlist_array(nvroot,
+ if (zpool_is_bootable(zhp) && nvlist_lookup_nvlist_array(nvroot,
ZPOOL_CONFIG_SPARES, &spares, &nspares) == 0) {
uint64_t s;
@@ -2412,7 +2413,7 @@ zpool_vdev_attach(zpool_handle_t *zhp,
uint_t children;
nvlist_t *config_root;
libzfs_handle_t *hdl = zhp->zpool_hdl;
- boolean_t rootpool = pool_is_bootable(zhp);
+ boolean_t rootpool = zpool_is_bootable(zhp);
if (replacing)
(void) snprintf(msg, sizeof (msg), dgettext(TEXT_DOMAIN,
@@ -3054,6 +3055,26 @@ zpool_reguid(zpool_handle_t *zhp)
}
/*
+ * Reopen the pool.
+ */
+int
+zpool_reopen(zpool_handle_t *zhp)
+{
+ zfs_cmd_t zc = { 0 };
+ char msg[1024];
+ libzfs_handle_t *hdl = zhp->zpool_hdl;
+
+ (void) snprintf(msg, sizeof (msg),
+ dgettext(TEXT_DOMAIN, "cannot reopen '%s'"),
+ zhp->zpool_name);
+
+ (void) strlcpy(zc.zc_name, zhp->zpool_name, sizeof (zc.zc_name));
+ if (zfs_ioctl(hdl, ZFS_IOC_POOL_REOPEN, &zc) == 0)
+ return (0);
+ return (zpool_standard_error(hdl, errno, msg));
+}
+
+/*
* Convert from a devid string to a path.
*/
static char *
@@ -3703,7 +3724,7 @@ zpool_label_disk(libzfs_handle_t *hdl, zpool_handle_t *zhp, const char *name)
if (zhp) {
nvlist_t *nvroot;
- if (pool_is_bootable(zhp)) {
+ if (zpool_is_bootable(zhp)) {
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
"EFI labeled devices are not supported on root "
"pools."));
diff --git a/contrib/bind9/CHANGES b/contrib/bind9/CHANGES
index 19f8e51615a3..e8cfbfe379d0 100644
--- a/contrib/bind9/CHANGES
+++ b/contrib/bind9/CHANGES
@@ -1,3 +1,56 @@
+ --- 9.8.3 released ---
+
+3318. [tuning] Reduce the amount of work performed while holding a
+ bucket lock when finshed with a fetch context.
+ [RT #29239]
+
+3314. [bug] The masters list could be updated while refesh_callback
+ and stub_callback were using it. [RT #26732]
+
+3313. [protocol] Add TLSA record type. [RT #28989]
+
+3312. [bug] named-checkconf didn't detect a bad dns64 clients acl.
+ [RT #27631]
+
+3311. [bug] Abort the zone dump if zone->db is NULL in
+ zone.c:zone_gotwritehandle. [RT #29028]
+
+3310. [test] Increase table size for mutex profiling. [RT #28809]
+
+3309. [bug] resolver.c:fctx_finddone() was not threadsafe.
+ [RT #27995]
+
+3307. [bug] Add missing ISC_LANG_BEGINDECLS and ISC_LANG_ENDDECLS.
+ [RT #28956]
+
+3306. [bug] Improve DNS64 reverse zone performance. [RT #28563]
+
+3305. [func] Add wire format lookup method to sdb. [RT #28563]
+
+3304. [bug] Use hmctx, not mctx when freeing rbtdb->heaps.
+ [RT #28571]
+
+3302. [bug] dns_dnssec_findmatchingkeys could fail to find
+ keys if the zone name contained character that
+ required special mappings. [RT #28600]
+
+3301. [contrib] Update queryperf to build on darwin. Add -R flag
+ for non-recursive queries. [RT #28565]
+
+3300. [bug] Named could die if gssapi was enabled in named.conf
+ but was not compiled in. [RT #28338]
+
+3299. [bug] Make SDB handle errors from database drivers better.
+ [RT #28534]
+
+3232. [bug] Zero zone->curmaster before return in
+ dns_zone_setmasterswithkeys(). [RT #26732]
+
+3183. [bug] Added RTLD_GLOBAL flag to dlopen call. [RT #26301]
+
+3197. [bug] Don't try to log the filename and line number when
+ the config parser can't open a file. [RT #22263]
+
--- 9.8.2 released ---
3298. [bug] Named could dereference a NULL pointer in
@@ -58,9 +111,9 @@
3274. [bug] Log when a zone is not reusable. Only set loadtime
on successful loads. [RT #27650]
-3273. [bug] AAAA responses could be returned in the additional
- section even when filter-aaaa-on-v4 was in use.
- [RT #27292]
+3273. [bug] AAAA responses could be returned in the additional
+ section even when filter-aaaa-on-v4 was in use.
+ [RT #27292]
3271. [port] darwin: mksymtbl is not always stable, loop several
times before giving up. mksymtbl was using non
diff --git a/contrib/bind9/README b/contrib/bind9/README
index d78fb859d19e..ee56344c5e02 100644
--- a/contrib/bind9/README
+++ b/contrib/bind9/README
@@ -51,6 +51,10 @@ BIND 9
For up-to-date release notes and errata, see
http://www.isc.org/software/bind9/releasenotes
+BIND 9.8.3
+
+ BIND 9.8.3 is a maintenance release.
+
BIND 9.8.2
BIND 9.8.2 includes a number of bug fixes and prevents a security
diff --git a/contrib/bind9/bin/named/builtin.c b/contrib/bind9/bin/named/builtin.c
index 86afa5a0370a..754e73d32506 100644
--- a/contrib/bind9/bin/named/builtin.c
+++ b/contrib/bind9/bin/named/builtin.c
@@ -69,35 +69,79 @@ static builtin_t empty_builtin = { do_empty_lookup, NULL, NULL };
static builtin_t dns64_builtin = { do_dns64_lookup, NULL, NULL };
static dns_sdbimplementation_t *builtin_impl;
+static dns_sdbimplementation_t *dns64_impl;
-static const char hex[] = "0123456789abcdef";
-static const char HEX[] = "0123456789ABCDEF";
+/*
+ * Pre computed HEX * 16 or 1 table.
+ */
+static const unsigned char hex16[256] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*00*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*10*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*20*/
+ 0, 16, 32, 48, 64, 80, 96,112,128,144, 1, 1, 1, 1, 1, 1, /*30*/
+ 1,160,176,192,208,224,240, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*40*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*50*/
+ 1,160,176,192,208,224,240, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*60*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*70*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*80*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*90*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*A0*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*B0*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*C0*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*D0*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*E0*/
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 /*F0*/
+};
+
+const unsigned char decimal[] = "0123456789";
+
+static size_t
+dns64_rdata(unsigned char *v, size_t start, unsigned char *rdata) {
+ size_t i, j = 0;
+
+ for (i = 0; i < 4; i++) {
+ unsigned char c = v[start++];
+ if (start == 7)
+ start++;
+ if (c > 99) {
+ rdata[j++] = 3;
+ rdata[j++] = decimal[c/100]; c = c % 100;
+ rdata[j++] = decimal[c/10]; c = c % 10;
+ rdata[j++] = decimal[c];
+ } else if (c > 9) {
+ rdata[j++] = 2;
+ rdata[j++] = decimal[c/10]; c = c % 10;
+ rdata[j++] = decimal[c];
+ } else {
+ rdata[j++] = 1;
+ rdata[j++] = decimal[c];
+ }
+ }
+ memcpy(&rdata[j], "\07in-addr\04arpa", 14);
+ return (j + 14);
+}
static isc_result_t
-dns64_cname(const char *zone, const char *name, dns_sdblookup_t *lookup) {
- size_t zlen, nlen, j;
- const char *s;
- unsigned char v[16];
+dns64_cname(const dns_name_t *zone, const dns_name_t *name,
+ dns_sdblookup_t *lookup)
+{
+ size_t zlen, nlen, j, len;
+ unsigned char v[16], n;
unsigned int i;
- char reverse[sizeof("123.123.123.123.in-addr.arpa.")];
+ unsigned char rdata[sizeof("123.123.123.123.in-addr.arpa.")];
+ unsigned char *ndata;
/*
- * The sum the length of the relative name and the length of the zone
- * name for a IPv6 reverse lookup comes to 71.
+ * The combined length of the zone and name is 74.
*
- * The reverse of 2001::10.0.0.1 (dns64 2001::/96) has a zone of
- * "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.2.ip6.arpa"
- * and a name of "1.0.0.0.0.0.a.0". The sum of the lengths of these
- * two strings is 71.
+ * The minimum zone length is 10 ((3)ip6(4)arpa(0)).
*
- * The minimum length for a ip6.arpa zone name is 8.
- *
- * The length of name should always be odd as we are expecting
+ * The length of name should always be even as we are expecting
* a series of nibbles.
*/
- zlen = strlen(zone);
- nlen = strlen(name);
- if ((zlen + nlen) > 71U || zlen < 8U || (nlen % 2) != 1U)
+ zlen = zone->length;
+ nlen = name->length;
+ if ((zlen + nlen) > 74U || zlen < 10U || (nlen % 2) != 0U)
return (ISC_R_NOTFOUND);
/*
@@ -116,25 +160,20 @@ dns64_cname(const char *zone, const char *name, dns_sdblookup_t *lookup) {
* are byte aligned and we correctly return ISC_R_NOTFOUND or
* ISC_R_SUCCESS. We will not generate a CNAME in this case.
*/
- i = (nlen % 4) == 1U ? 1 : 0;
+ ndata = name->ndata;
+ i = (nlen % 4) == 2U ? 1 : 0;
j = nlen;
memset(v, 0, sizeof(v));
- while (j >= 1U) {
+ while (j != 0) {
INSIST((i/2) < sizeof(v));
- if (j > 1U && name[1] != '.')
+ if (ndata[0] != 1)
return (ISC_R_NOTFOUND);
- v[i/2] >>= 4;
- if ((s = strchr(hex, name[0])) != NULL)
- v[i/2] |= (s - hex) << 4;
- else if ((s = strchr(HEX, name[0])) != NULL)
- v[i/2] |= (s - HEX) << 4;
- else
+ n = hex16[ndata[1]&0xff];
+ if (n == 1)
return (ISC_R_NOTFOUND);
- if (j > 1U)
- j -= 2;
- else
- j -= 1;
- name += 2;
+ v[i/2] = n | (v[i/2]>>4);
+ j -= 2;
+ ndata += 2;
i++;
}
@@ -144,90 +183,91 @@ dns64_cname(const char *zone, const char *name, dns_sdblookup_t *lookup) {
* it corresponds to a empty node in the zone or there should be
* a CNAME.
*/
+#define ZLEN(x) (10 + (x)/2)
switch (zlen) {
- case 24: /* prefix len 32 */
+ case ZLEN(32): /* prefix len 32 */
/*
- * If the total length is not 71 then this is a empty node
+ * The nibbles that map to this byte must be zero for 'name'
+ * to exist in the zone.
+ */
+ if (nlen > 16U && v[(nlen-1)/4 - 4] != 0)
+ return (ISC_R_NOTFOUND);
+ /*
+ * If the total length is not 74 then this is a empty node
* so return success.
*/
- if (nlen + zlen != 71U)
+ if (nlen + zlen != 74U)
return (ISC_R_SUCCESS);
- snprintf(reverse, sizeof(reverse), "%u.%u.%u.%u.in-addr.arpa.",
- v[8], v[9], v[10], v[11]);
+ len = dns64_rdata(v, 8, rdata);
break;
- case 28: /* prefix len 40 */
+ case ZLEN(40): /* prefix len 40 */
/*
* The nibbles that map to this byte must be zero for 'name'
* to exist in the zone.
*/
- if (nlen > 11U && v[nlen/4 - 3] != 0)
+ if (nlen > 12U && v[(nlen-1)/4 - 3] != 0)
return (ISC_R_NOTFOUND);
/*
- * If the total length is not 71 then this is a empty node
+ * If the total length is not 74 then this is a empty node
* so return success.
*/
- if (nlen + zlen != 71U)
+ if (nlen + zlen != 74U)
return (ISC_R_SUCCESS);
- snprintf(reverse, sizeof(reverse), "%u.%u.%u.%u.in-addr.arpa.",
- v[6], v[8], v[9], v[10]);
+ len = dns64_rdata(v, 6, rdata);
break;
- case 32: /* prefix len 48 */
+ case ZLEN(48): /* prefix len 48 */
/*
* The nibbles that map to this byte must be zero for 'name'
* to exist in the zone.
*/
- if (nlen > 7U && v[nlen/4 - 2] != 0)
+ if (nlen > 8U && v[(nlen-1)/4 - 2] != 0)
return (ISC_R_NOTFOUND);
/*
- * If the total length is not 71 then this is a empty node
+ * If the total length is not 74 then this is a empty node
* so return success.
*/
- if (nlen + zlen != 71U)
+ if (nlen + zlen != 74U)
return (ISC_R_SUCCESS);
- snprintf(reverse, sizeof(reverse), "%u.%u.%u.%u.in-addr.arpa.",
- v[5], v[6], v[8], v[9]);
+ len = dns64_rdata(v, 5, rdata);
break;
- case 36: /* prefix len 56 */
+ case ZLEN(56): /* prefix len 56 */
/*
* The nibbles that map to this byte must be zero for 'name'
* to exist in the zone.
*/
- if (nlen > 3U && v[nlen/4 - 1] != 0)
+ if (nlen > 4U && v[(nlen-1)/4 - 1] != 0)
return (ISC_R_NOTFOUND);
/*
- * If the total length is not 71 then this is a empty node
+ * If the total length is not 74 then this is a empty node
* so return success.
*/
- if (nlen + zlen != 71U)
+ if (nlen + zlen != 74U)
return (ISC_R_SUCCESS);
- snprintf(reverse, sizeof(reverse), "%u.%u.%u.%u.in-addr.arpa.",
- v[4], v[5], v[6], v[8]);
+ len = dns64_rdata(v, 4, rdata);
break;
- case 40: /* prefix len 64 */
+ case ZLEN(64): /* prefix len 64 */
/*
* The nibbles that map to this byte must be zero for 'name'
* to exist in the zone.
*/
- if (v[nlen/4] != 0)
+ if (v[(nlen-1)/4] != 0)
return (ISC_R_NOTFOUND);
/*
- * If the total length is not 71 then this is a empty node
+ * If the total length is not 74 then this is a empty node
* so return success.
*/
- if (nlen + zlen != 71U)
+ if (nlen + zlen != 74U)
return (ISC_R_SUCCESS);
- snprintf(reverse, sizeof(reverse), "%u.%u.%u.%u.in-addr.arpa.",
- v[3], v[4], v[5], v[6]);
+ len = dns64_rdata(v, 3, rdata);
break;
- case 56: /* prefix len 96 */
+ case ZLEN(96): /* prefix len 96 */
/*
- * If the total length is not 71 then this is a empty node
+ * If the total length is not 74 then this is a empty node
* so return success.
*/
- if (nlen + zlen != 71U)
+ if (nlen + zlen != 74U)
return (ISC_R_SUCCESS);
- snprintf(reverse, sizeof(reverse), "%u.%u.%u.%u.in-addr.arpa.",
- v[0], v[1], v[2], v[3]);
+ len = dns64_rdata(v, 0, rdata);
break;
default:
/*
@@ -236,7 +276,7 @@ dns64_cname(const char *zone, const char *name, dns_sdblookup_t *lookup) {
*/
return (ISC_R_NOTFOUND);
}
- return (dns_sdb_putrr(lookup, "CNAME", 600, reverse));
+ return (dns_sdb_putrdata(lookup, dns_rdatatype_cname, 600, rdata, len));
}
static isc_result_t
@@ -249,13 +289,23 @@ builtin_lookup(const char *zone, const char *name, void *dbdata,
if (strcmp(name, "@") == 0)
return (b->do_lookup(lookup));
- else if (b->do_lookup == do_dns64_lookup)
- return (dns64_cname(zone, name, lookup));
else
return (ISC_R_NOTFOUND);
}
static isc_result_t
+dns64_lookup(const dns_name_t *zone, const dns_name_t *name, void *dbdata,
+ dns_sdblookup_t *lookup)
+{
+ builtin_t *b = (builtin_t *) dbdata;
+
+ if (name->labels == 0 && name->length == 0)
+ return (b->do_lookup(lookup));
+ else
+ return (dns64_cname(zone, name, lookup));
+}
+
+static isc_result_t
put_txt(dns_sdblookup_t *lookup, const char *text) {
unsigned char buf[256];
unsigned int len = strlen(text);
@@ -481,7 +531,17 @@ static dns_sdbmethods_t builtin_methods = {
builtin_authority,
NULL, /* allnodes */
builtin_create,
- builtin_destroy
+ builtin_destroy,
+ NULL
+};
+
+static dns_sdbmethods_t dns64_methods = {
+ NULL,
+ builtin_authority,
+ NULL, /* allnodes */
+ builtin_create,
+ builtin_destroy,
+ dns64_lookup,
};
isc_result_t
@@ -491,11 +551,17 @@ ns_builtin_init(void) {
DNS_SDBFLAG_RELATIVERDATA,
ns_g_mctx, &builtin_impl)
== ISC_R_SUCCESS);
+ RUNTIME_CHECK(dns_sdb_register("_dns64", &dns64_methods, NULL,
+ DNS_SDBFLAG_RELATIVEOWNER |
+ DNS_SDBFLAG_RELATIVERDATA |
+ DNS_SDBFLAG_DNS64,
+ ns_g_mctx, &dns64_impl)
+ == ISC_R_SUCCESS);
return (ISC_R_SUCCESS);
}
void
ns_builtin_deinit(void) {
dns_sdb_unregister(&builtin_impl);
+ dns_sdb_unregister(&dns64_impl);
}
-
diff --git a/contrib/bind9/bin/named/query.c b/contrib/bind9/bin/named/query.c
index 6d2ee445b8bc..9464a828ca55 100644
--- a/contrib/bind9/bin/named/query.c
+++ b/contrib/bind9/bin/named/query.c
@@ -3354,6 +3354,11 @@ query_addwildcardproof(ns_client_t *client, dns_db_t *db,
dns_name_copy(name, cname, NULL);
while (result == DNS_R_NXDOMAIN) {
labels = dns_name_countlabels(cname) - 1;
+ /*
+ * Sanity check.
+ */
+ if (labels == 0U)
+ goto cleanup;
dns_name_split(cname, labels, NULL, cname);
result = dns_db_find(db, cname, version,
dns_rdatatype_nsec,
diff --git a/contrib/bind9/bin/named/server.c b/contrib/bind9/bin/named/server.c
index 46f26c4f053e..666d8541aee5 100644
--- a/contrib/bind9/bin/named/server.c
+++ b/contrib/bind9/bin/named/server.c
@@ -1358,7 +1358,7 @@ dns64_reverse(dns_view_t *view, isc_mem_t *mctx, isc_netaddr_t *na,
{
char *cp;
char reverse[48+sizeof("ip6.arpa.")];
- const char *dns64_dbtype[4] = { "_builtin", "dns64", ".", "." };
+ const char *dns64_dbtype[4] = { "_dns64", "dns64", ".", "." };
const char *sep = ": view ";
const char *viewname = view->name;
const unsigned char *s6;
diff --git a/contrib/bind9/bin/named/unix/dlz_dlopen_driver.c b/contrib/bind9/bin/named/unix/dlz_dlopen_driver.c
index ca4b1fdfcdaf..edd394656d28 100644
--- a/contrib/bind9/bin/named/unix/dlz_dlopen_driver.c
+++ b/contrib/bind9/bin/named/unix/dlz_dlopen_driver.c
@@ -250,7 +250,7 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
isc_mutex_init(&cd->lock);
/* Open the library */
- dlopen_flags = RTLD_NOW;
+ dlopen_flags = RTLD_NOW|RTLD_GLOBAL;
#ifdef RTLD_DEEPBIND
/*
diff --git a/contrib/bind9/lib/bind9/api b/contrib/bind9/lib/bind9/api
index 74bc33868809..089e7828a71b 100644
--- a/contrib/bind9/lib/bind9/api
+++ b/contrib/bind9/lib/bind9/api
@@ -4,5 +4,5 @@
# 9.8: 80-89
# 9.9: 90-109
LIBINTERFACE = 80
-LIBREVISION = 4
+LIBREVISION = 5
LIBAGE = 0
diff --git a/contrib/bind9/lib/bind9/check.c b/contrib/bind9/lib/bind9/check.c
index 695a2301d31f..26eaa1aaf979 100644
--- a/contrib/bind9/lib/bind9/check.c
+++ b/contrib/bind9/lib/bind9/check.c
@@ -434,7 +434,7 @@ check_dns64(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
int nbytes;
int i;
- static const char *acls[] = { "client", "exclude", "mapped", NULL};
+ static const char *acls[] = { "clients", "exclude", "mapped", NULL};
if (voptions != NULL)
cfg_map_get(voptions, "dns64", &dns64);
diff --git a/contrib/bind9/lib/dns/api b/contrib/bind9/lib/dns/api
index 69ec5c4e4681..9e783a5431cb 100644
--- a/contrib/bind9/lib/dns/api
+++ b/contrib/bind9/lib/dns/api
@@ -4,5 +4,5 @@
# 9.8: 80-89
# 9.9: 90-109
LIBINTERFACE = 87
-LIBREVISION = 0
+LIBREVISION = 1
LIBAGE = 6
diff --git a/contrib/bind9/lib/dns/dnssec.c b/contrib/bind9/lib/dns/dnssec.c
index 34dd46477a1e..b72e82daf7f2 100644
--- a/contrib/bind9/lib/dns/dnssec.c
+++ b/contrib/bind9/lib/dns/dnssec.c
@@ -1246,7 +1246,7 @@ dns_dnssec_findmatchingkeys(dns_name_t *origin, const char *directory,
isc_dir_init(&dir);
isc_buffer_init(&b, namebuf, sizeof(namebuf) - 1);
- RETERR(dns_name_totext(origin, ISC_FALSE, &b));
+ RETERR(dns_name_tofilenametext(origin, ISC_FALSE, &b));
len = isc_buffer_usedlength(&b);
namebuf[len] = '\0';
diff --git a/contrib/bind9/lib/dns/include/dns/ecdb.h b/contrib/bind9/lib/dns/include/dns/ecdb.h
index 5c735b53cc5f..246cc30a3826 100644
--- a/contrib/bind9/lib/dns/include/dns/ecdb.h
+++ b/contrib/bind9/lib/dns/include/dns/ecdb.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -39,6 +39,8 @@
*** Functions
***/
+ISC_LANG_BEGINDECLS
+
/* TBD: describe those */
isc_result_t
diff --git a/contrib/bind9/lib/dns/include/dns/rpz.h b/contrib/bind9/lib/dns/include/dns/rpz.h
index fbbe5395dd70..59d4f875f273 100644
--- a/contrib/bind9/lib/dns/include/dns/rpz.h
+++ b/contrib/bind9/lib/dns/include/dns/rpz.h
@@ -194,5 +194,7 @@ dns_rpz_cidr_find(dns_rpz_cidr_t *cidr, const isc_netaddr_t *netaddr,
dns_rpz_policy_t
dns_rpz_decode_cname(dns_rdataset_t *, dns_name_t *selfname);
+ISC_LANG_ENDDECLS
+
#endif /* DNS_RPZ_H */
diff --git a/contrib/bind9/lib/dns/include/dns/sdb.h b/contrib/bind9/lib/dns/include/dns/sdb.h
index 4b3ab480d553..c57c4a1d038a 100644
--- a/contrib/bind9/lib/dns/include/dns/sdb.h
+++ b/contrib/bind9/lib/dns/include/dns/sdb.h
@@ -59,6 +59,9 @@ typedef struct dns_sdballnodes dns_sdballnodes_t;
typedef isc_result_t
(*dns_sdblookupfunc_t)(const char *zone, const char *name, void *dbdata,
dns_sdblookup_t *);
+typedef isc_result_t
+(*dns_sdblookup2func_t)(const dns_name_t *zone, const dns_name_t *name,
+ void *dbdata, dns_sdblookup_t *lookup);
typedef isc_result_t
(*dns_sdbauthorityfunc_t)(const char *zone, void *dbdata, dns_sdblookup_t *);
@@ -81,6 +84,7 @@ typedef struct dns_sdbmethods {
dns_sdballnodesfunc_t allnodes;
dns_sdbcreatefunc_t create;
dns_sdbdestroyfunc_t destroy;
+ dns_sdblookup2func_t lookup2;
} dns_sdbmethods_t;
/***
@@ -92,6 +96,7 @@ ISC_LANG_BEGINDECLS
#define DNS_SDBFLAG_RELATIVEOWNER 0x00000001U
#define DNS_SDBFLAG_RELATIVERDATA 0x00000002U
#define DNS_SDBFLAG_THREADSAFE 0x00000004U
+#define DNS_SDBFLAG_DNS64 0x00000008U
isc_result_t
dns_sdb_register(const char *drivername, const dns_sdbmethods_t *methods,
diff --git a/contrib/bind9/lib/dns/include/dns/stats.h b/contrib/bind9/lib/dns/include/dns/stats.h
index b8dc17eba5e9..bc77d1e9c5a3 100644
--- a/contrib/bind9/lib/dns/include/dns/stats.h
+++ b/contrib/bind9/lib/dns/include/dns/stats.h
@@ -147,6 +147,8 @@ typedef void (*dns_rdatatypestats_dumper_t)(dns_rdatastatstype_t, isc_uint64_t,
void *);
typedef void (*dns_opcodestats_dumper_t)(dns_opcode_t, isc_uint64_t, void *);
+ISC_LANG_BEGINDECLS
+
isc_result_t
dns_generalstats_create(isc_mem_t *mctx, dns_stats_t **statsp, int ncounters);
/*%<
diff --git a/contrib/bind9/lib/dns/include/dns/tsec.h b/contrib/bind9/lib/dns/include/dns/tsec.h
index a9d60c21c6c0..4f31c3e2949d 100644
--- a/contrib/bind9/lib/dns/include/dns/tsec.h
+++ b/contrib/bind9/lib/dns/include/dns/tsec.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009, 2010, 2012 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -132,4 +132,6 @@ dns_tsec_getkey(dns_tsec_t *tsec, void *keyp);
*\li *tsecp points to a valid key structure depending on the TSEC type.
*/
+ISC_LANG_ENDDECLS
+
#endif /* DNS_TSEC_H */
diff --git a/contrib/bind9/lib/dns/include/dns/view.h b/contrib/bind9/lib/dns/include/dns/view.h
index 6f7140c01848..7db600bdd810 100644
--- a/contrib/bind9/lib/dns/include/dns/view.h
+++ b/contrib/bind9/lib/dns/include/dns/view.h
@@ -1075,4 +1075,6 @@ dns_view_setnewzones(dns_view_t *view, isc_boolean_t allow, void *cfgctx,
void
dns_view_restorekeyring(dns_view_t *view);
+ISC_LANG_ENDDECLS
+
#endif /* DNS_VIEW_H */
diff --git a/contrib/bind9/lib/dns/rbtdb.c b/contrib/bind9/lib/dns/rbtdb.c
index 1550221ab252..a2523ba4c7d9 100644
--- a/contrib/bind9/lib/dns/rbtdb.c
+++ b/contrib/bind9/lib/dns/rbtdb.c
@@ -7814,7 +7814,7 @@ dns_rbtdb_create
for (i = 0 ; i < (int)rbtdb->node_lock_count ; i++)
if (rbtdb->heaps[i] != NULL)
isc_heap_destroy(&rbtdb->heaps[i]);
- isc_mem_put(mctx, rbtdb->heaps,
+ isc_mem_put(hmctx, rbtdb->heaps,
rbtdb->node_lock_count * sizeof(isc_heap_t *));
}
diff --git a/contrib/bind9/lib/dns/rdata/generic/tlsa_52.c b/contrib/bind9/lib/dns/rdata/generic/tlsa_52.c
new file mode 100644
index 000000000000..11c6d7528f98
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/tlsa_52.c
@@ -0,0 +1,290 @@
+/*
+ * Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or 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" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id$ */
+
+/* draft-ietf-dane-protocol-19.txt */
+
+#ifndef RDATA_GENERIC_TLSA_52_C
+#define RDATA_GENERIC_TLSA_52_C
+
+#define RRTYPE_TLSA_ATTRIBUTES 0
+
+static inline isc_result_t
+fromtext_tlsa(ARGS_FROMTEXT) {
+ isc_token_t token;
+
+ REQUIRE(type == 52);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(origin);
+ UNUSED(options);
+ UNUSED(callbacks);
+
+ /*
+ * Certificate Usage.
+ */
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
+ ISC_FALSE));
+ if (token.value.as_ulong > 0xffU)
+ RETTOK(ISC_R_RANGE);
+ RETERR(uint8_tobuffer(token.value.as_ulong, target));
+
+ /*
+ * Selector.
+ */
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
+ ISC_FALSE));
+ if (token.value.as_ulong > 0xffU)
+ RETTOK(ISC_R_RANGE);
+ RETERR(uint8_tobuffer(token.value.as_ulong, target));
+
+ /*
+ * Matching type.
+ */
+ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
+ ISC_FALSE));
+ if (token.value.as_ulong > 0xffU)
+ RETTOK(ISC_R_RANGE);
+ RETERR(uint8_tobuffer(token.value.as_ulong, target));
+
+ /*
+ * Certificate Association Data.
+ */
+ return (isc_hex_tobuffer(lexer, target, -1));
+}
+
+static inline isc_result_t
+totext_tlsa(ARGS_TOTEXT) {
+ isc_region_t sr;
+ char buf[sizeof("64000 ")];
+ unsigned int n;
+
+ REQUIRE(rdata->type == 52);
+ REQUIRE(rdata->length != 0);
+
+ UNUSED(tctx);
+
+ dns_rdata_toregion(rdata, &sr);
+
+ /*
+ * Certificate Usage.
+ */
+ n = uint8_fromregion(&sr);
+ isc_region_consume(&sr, 1);
+ sprintf(buf, "%u ", n);
+ RETERR(str_totext(buf, target));
+
+ /*
+ * Selector.
+ */
+ n = uint8_fromregion(&sr);
+ isc_region_consume(&sr, 1);
+ sprintf(buf, "%u ", n);
+ RETERR(str_totext(buf, target));
+
+ /*
+ * Matching type.
+ */
+ n = uint8_fromregion(&sr);
+ isc_region_consume(&sr, 1);
+ sprintf(buf, "%u", n);
+ RETERR(str_totext(buf, target));
+
+ /*
+ * Certificate Association Data.
+ */
+ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
+ RETERR(str_totext(" (", target));
+ RETERR(str_totext(tctx->linebreak, target));
+ if (tctx->width == 0) /* No splitting */
+ RETERR(isc_hex_totext(&sr, 0, "", target));
+ else
+ RETERR(isc_hex_totext(&sr, tctx->width - 2,
+ tctx->linebreak, target));
+ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
+ RETERR(str_totext(" )", target));
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+fromwire_tlsa(ARGS_FROMWIRE) {
+ isc_region_t sr;
+
+ REQUIRE(type == 52);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(dctx);
+ UNUSED(options);
+
+ isc_buffer_activeregion(source, &sr);
+
+ if (sr.length < 3)
+ return (ISC_R_UNEXPECTEDEND);
+
+ isc_buffer_forward(source, sr.length);
+ return (mem_tobuffer(target, sr.base, sr.length));
+}
+
+static inline isc_result_t
+towire_tlsa(ARGS_TOWIRE) {
+ isc_region_t sr;
+
+ REQUIRE(rdata->type == 52);
+ REQUIRE(rdata->length != 0);
+
+ UNUSED(cctx);
+
+ dns_rdata_toregion(rdata, &sr);
+ return (mem_tobuffer(target, sr.base, sr.length));
+}
+
+static inline int
+compare_tlsa(ARGS_COMPARE) {
+ isc_region_t r1;
+ isc_region_t r2;
+
+ REQUIRE(rdata1->type == rdata2->type);
+ REQUIRE(rdata1->rdclass == rdata2->rdclass);
+ REQUIRE(rdata1->type == 52);
+ REQUIRE(rdata1->length != 0);
+ REQUIRE(rdata2->length != 0);
+
+ dns_rdata_toregion(rdata1, &r1);
+ dns_rdata_toregion(rdata2, &r2);
+ return (isc_region_compare(&r1, &r2));
+}
+
+static inline isc_result_t
+fromstruct_tlsa(ARGS_FROMSTRUCT) {
+ dns_rdata_tlsa_t *tlsa = source;
+
+ REQUIRE(type == 52);
+ REQUIRE(source != NULL);
+ REQUIRE(tlsa->common.rdtype == type);
+ REQUIRE(tlsa->common.rdclass == rdclass);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ RETERR(uint8_tobuffer(tlsa->usage, target));
+ RETERR(uint8_tobuffer(tlsa->selector, target));
+ RETERR(uint8_tobuffer(tlsa->match, target));
+
+ return (mem_tobuffer(target, tlsa->data, tlsa->length));
+}
+
+static inline isc_result_t
+tostruct_tlsa(ARGS_TOSTRUCT) {
+ dns_rdata_tlsa_t *tlsa = target;
+ isc_region_t region;
+
+ REQUIRE(rdata->type == 52);
+ REQUIRE(target != NULL);
+ REQUIRE(rdata->length != 0);
+
+ tlsa->common.rdclass = rdata->rdclass;
+ tlsa->common.rdtype = rdata->type;
+ ISC_LINK_INIT(&tlsa->common, link);
+
+ dns_rdata_toregion(rdata, &region);
+
+ tlsa->usage = uint8_fromregion(&region);
+ isc_region_consume(&region, 1);
+ tlsa->selector = uint8_fromregion(&region);
+ isc_region_consume(&region, 1);
+ tlsa->match = uint8_fromregion(&region);
+ isc_region_consume(&region, 1);
+ tlsa->length = region.length;
+
+ tlsa->data = mem_maybedup(mctx, region.base, region.length);
+ if (tlsa->data == NULL)
+ return (ISC_R_NOMEMORY);
+
+ tlsa->mctx = mctx;
+ return (ISC_R_SUCCESS);
+}
+
+static inline void
+freestruct_tlsa(ARGS_FREESTRUCT) {
+ dns_rdata_tlsa_t *tlsa = source;
+
+ REQUIRE(tlsa != NULL);
+ REQUIRE(tlsa->common.rdtype == 52);
+
+ if (tlsa->mctx == NULL)
+ return;
+
+ if (tlsa->data != NULL)
+ isc_mem_free(tlsa->mctx, tlsa->data);
+ tlsa->mctx = NULL;
+}
+
+static inline isc_result_t
+additionaldata_tlsa(ARGS_ADDLDATA) {
+ REQUIRE(rdata->type == 52);
+
+ UNUSED(rdata);
+ UNUSED(add);
+ UNUSED(arg);
+
+ return (ISC_R_SUCCESS);
+}
+
+static inline isc_result_t
+digest_tlsa(ARGS_DIGEST) {
+ isc_region_t r;
+
+ REQUIRE(rdata->type == 52);
+
+ dns_rdata_toregion(rdata, &r);
+
+ return ((digest)(arg, &r));
+}
+
+static inline isc_boolean_t
+checkowner_tlsa(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 52);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_tlsa(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 52);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
+static inline int
+casecompare_tlsa(ARGS_COMPARE) {
+ return (compare_tlsa(rdata1, rdata2));
+}
+
+#endif /* RDATA_GENERIC_TLSA_52_C */
diff --git a/contrib/bind9/lib/dns/rdata/generic/tlsa_52.h b/contrib/bind9/lib/dns/rdata/generic/tlsa_52.h
new file mode 100644
index 000000000000..83ce9529976d
--- /dev/null
+++ b/contrib/bind9/lib/dns/rdata/generic/tlsa_52.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or 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" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id$ */
+
+#ifndef GENERIC_TLSA_52_H
+#define GENERIC_TLSA_52_H 1
+
+/*!
+ * \brief per draft-ietf-dane-protocol-19.txt
+ */
+typedef struct dns_rdata_tlsa {
+ dns_rdatacommon_t common;
+ isc_mem_t *mctx;
+ isc_uint8_t usage;
+ isc_uint8_t selector;
+ isc_uint8_t match;
+ isc_uint16_t length;
+ unsigned char *data;
+} dns_rdata_tlsa_t;
+
+#endif /* GENERIC_TLSA_52_H */
diff --git a/contrib/bind9/lib/dns/resolver.c b/contrib/bind9/lib/dns/resolver.c
index 3084dd8a1c95..1ae2f16bea3f 100644
--- a/contrib/bind9/lib/dns/resolver.c
+++ b/contrib/bind9/lib/dns/resolver.c
@@ -180,7 +180,9 @@ struct fetchctx {
dns_rdatatype_t type;
unsigned int options;
unsigned int bucketnum;
- char * info;
+ char * info;
+ isc_mem_t * mctx;
+
/*% Locked by appropriate bucket lock. */
fetchstate state;
isc_boolean_t want_shutdown;
@@ -446,7 +448,8 @@ static void resquery_response(isc_task_t *task, isc_event_t *event);
static void resquery_connected(isc_task_t *task, isc_event_t *event);
static void fctx_try(fetchctx_t *fctx, isc_boolean_t retrying,
isc_boolean_t badcache);
-static isc_boolean_t fctx_destroy(fetchctx_t *fctx);
+static void fctx_destroy(fetchctx_t *fctx);
+static isc_boolean_t fctx_unlink(fetchctx_t *fctx);
static isc_result_t ncache_adderesult(dns_message_t *message,
dns_db_t *cache, dns_dbnode_t *node,
dns_rdatatype_t covers,
@@ -478,8 +481,7 @@ valcreate(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, dns_name_t *name,
dns_valarg_t *valarg;
isc_result_t result;
- valarg = isc_mem_get(fctx->res->buckets[fctx->bucketnum].mctx,
- sizeof(*valarg));
+ valarg = isc_mem_get(fctx->mctx, sizeof(*valarg));
if (valarg == NULL)
return (ISC_R_NOMEMORY);
@@ -501,8 +503,7 @@ valcreate(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, dns_name_t *name,
}
ISC_LIST_APPEND(fctx->validators, validator, link);
} else
- isc_mem_put(fctx->res->buckets[fctx->bucketnum].mctx,
- valarg, sizeof(*valarg));
+ isc_mem_put(fctx->mctx, valarg, sizeof(*valarg));
return (result);
}
@@ -1386,13 +1387,12 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
dns_message_reset(fctx->rmessage, DNS_MESSAGE_INTENTPARSE);
- query = isc_mem_get(res->buckets[fctx->bucketnum].mctx,
- sizeof(*query));
+ query = isc_mem_get(fctx->mctx, sizeof(*query));
if (query == NULL) {
result = ISC_R_NOMEMORY;
goto stop_idle_timer;
}
- query->mctx = res->buckets[fctx->bucketnum].mctx;
+ query->mctx = fctx->mctx;
query->options = options;
query->attributes = 0;
query->sends = 0;
@@ -1569,8 +1569,7 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
cleanup_query:
if (query->connects == 0) {
query->magic = 0;
- isc_mem_put(res->buckets[fctx->bucketnum].mctx,
- query, sizeof(*query));
+ isc_mem_put(fctx->mctx, query, sizeof(*query));
}
stop_idle_timer:
@@ -1600,8 +1599,7 @@ add_bad_edns(fetchctx_t *fctx, isc_sockaddr_t *address) {
if (bad_edns(fctx, address))
return;
- sa = isc_mem_get(fctx->res->buckets[fctx->bucketnum].mctx,
- sizeof(*sa));
+ sa = isc_mem_get(fctx->mctx, sizeof(*sa));
if (sa == NULL)
return;
@@ -1630,8 +1628,7 @@ add_triededns(fetchctx_t *fctx, isc_sockaddr_t *address) {
if (triededns(fctx, address))
return;
- sa = isc_mem_get(fctx->res->buckets[fctx->bucketnum].mctx,
- sizeof(*sa));
+ sa = isc_mem_get(fctx->mctx, sizeof(*sa));
if (sa == NULL)
return;
@@ -1660,8 +1657,7 @@ add_triededns512(fetchctx_t *fctx, isc_sockaddr_t *address) {
if (triededns512(fctx, address))
return;
- sa = isc_mem_get(fctx->res->buckets[fctx->bucketnum].mctx,
- sizeof(*sa));
+ sa = isc_mem_get(fctx->mctx, sizeof(*sa));
if (sa == NULL)
return;
@@ -2166,8 +2162,8 @@ fctx_finddone(isc_task_t *task, isc_event_t *event) {
isc_boolean_t want_try = ISC_FALSE;
isc_boolean_t want_done = ISC_FALSE;
isc_boolean_t bucket_empty = ISC_FALSE;
- isc_boolean_t destroy = ISC_FALSE;
unsigned int bucketnum;
+ isc_boolean_t destroy = ISC_FALSE;
find = event->ev_sender;
fctx = event->ev_arg;
@@ -2205,17 +2201,14 @@ fctx_finddone(isc_task_t *task, isc_event_t *event) {
}
} else if (SHUTTINGDOWN(fctx) && fctx->pending == 0 &&
fctx->nqueries == 0 && ISC_LIST_EMPTY(fctx->validators)) {
- /*
- * Note that we had to wait until we had the lock before
- * looking at fctx->references.
- */
- if (fctx->references == 0)
+
+ if (fctx->references == 0) {
+ bucket_empty = fctx_unlink(fctx);
destroy = ISC_TRUE;
+ }
}
UNLOCK(&res->buckets[bucketnum].lock);
- if (destroy)
- bucket_empty = fctx_destroy(fctx);
isc_event_free(&event);
dns_adb_destroyfind(&find);
@@ -2223,8 +2216,11 @@ fctx_finddone(isc_task_t *task, isc_event_t *event) {
fctx_try(fctx, ISC_TRUE, ISC_FALSE);
else if (want_done)
fctx_done(fctx, ISC_R_FAILURE, __LINE__);
- else if (bucket_empty)
- empty_bucket(res);
+ else if (destroy) {
+ fctx_destroy(fctx);
+ if (bucket_empty)
+ empty_bucket(res);
+ }
}
@@ -2347,8 +2343,7 @@ add_bad(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, isc_result_t reason,
FCTXTRACE("add_bad");
- sa = isc_mem_get(fctx->res->buckets[fctx->bucketnum].mctx,
- sizeof(*sa));
+ sa = isc_mem_get(fctx->mctx, sizeof(*sa));
if (sa == NULL)
return;
*sa = *address;
@@ -2631,12 +2626,9 @@ fctx_getaddresses(fetchctx_t *fctx, isc_boolean_t badcache) {
fctx->fwdpolicy = forwarders->fwdpolicy;
if (fctx->fwdpolicy == dns_fwdpolicy_only &&
isstrictsubdomain(domain, &fctx->domain)) {
- isc_mem_t *mctx;
-
- mctx = res->buckets[fctx->bucketnum].mctx;
- dns_name_free(&fctx->domain, mctx);
+ dns_name_free(&fctx->domain, fctx->mctx);
dns_name_init(&fctx->domain, NULL);
- result = dns_name_dup(domain, mctx,
+ result = dns_name_dup(domain, fctx->mctx,
&fctx->domain);
if (result != ISC_R_SUCCESS)
return (result);
@@ -3075,10 +3067,9 @@ fctx_try(fetchctx_t *fctx, isc_boolean_t retrying, isc_boolean_t badcache) {
}
static isc_boolean_t
-fctx_destroy(fetchctx_t *fctx) {
+fctx_unlink(fetchctx_t *fctx) {
dns_resolver_t *res;
unsigned int bucketnum;
- isc_sockaddr_t *sa, *next_sa;
/*
* Caller must be holding the bucket lock.
@@ -3095,13 +3086,42 @@ fctx_destroy(fetchctx_t *fctx) {
REQUIRE(fctx->references == 0);
REQUIRE(ISC_LIST_EMPTY(fctx->validators));
- FCTXTRACE("destroy");
+ FCTXTRACE("unlink");
res = fctx->res;
bucketnum = fctx->bucketnum;
ISC_LIST_UNLINK(res->buckets[bucketnum].fctxs, fctx, link);
+ LOCK(&res->nlock);
+ res->nfctx--;
+ UNLOCK(&res->nlock);
+
+ if (res->buckets[bucketnum].exiting &&
+ ISC_LIST_EMPTY(res->buckets[bucketnum].fctxs))
+ return (ISC_TRUE);
+
+ return (ISC_FALSE);
+}
+
+static void
+fctx_destroy(fetchctx_t *fctx) {
+ isc_sockaddr_t *sa, *next_sa;
+
+ REQUIRE(VALID_FCTX(fctx));
+ REQUIRE(fctx->state == fetchstate_done ||
+ fctx->state == fetchstate_init);
+ REQUIRE(ISC_LIST_EMPTY(fctx->events));
+ REQUIRE(ISC_LIST_EMPTY(fctx->queries));
+ REQUIRE(ISC_LIST_EMPTY(fctx->finds));
+ REQUIRE(ISC_LIST_EMPTY(fctx->altfinds));
+ REQUIRE(fctx->pending == 0);
+ REQUIRE(fctx->references == 0);
+ REQUIRE(ISC_LIST_EMPTY(fctx->validators));
+ REQUIRE(!ISC_LINK_LINKED(fctx, link));
+
+ FCTXTRACE("destroy");
+
/*
* Free bad.
*/
@@ -3110,7 +3130,7 @@ fctx_destroy(fetchctx_t *fctx) {
sa = next_sa) {
next_sa = ISC_LIST_NEXT(sa, link);
ISC_LIST_UNLINK(fctx->bad, sa, link);
- isc_mem_put(res->buckets[bucketnum].mctx, sa, sizeof(*sa));
+ isc_mem_put(fctx->mctx, sa, sizeof(*sa));
}
for (sa = ISC_LIST_HEAD(fctx->edns);
@@ -3118,7 +3138,7 @@ fctx_destroy(fetchctx_t *fctx) {
sa = next_sa) {
next_sa = ISC_LIST_NEXT(sa, link);
ISC_LIST_UNLINK(fctx->edns, sa, link);
- isc_mem_put(res->buckets[bucketnum].mctx, sa, sizeof(*sa));
+ isc_mem_put(fctx->mctx, sa, sizeof(*sa));
}
for (sa = ISC_LIST_HEAD(fctx->edns512);
@@ -3126,7 +3146,7 @@ fctx_destroy(fetchctx_t *fctx) {
sa = next_sa) {
next_sa = ISC_LIST_NEXT(sa, link);
ISC_LIST_UNLINK(fctx->edns512, sa, link);
- isc_mem_put(res->buckets[bucketnum].mctx, sa, sizeof(*sa));
+ isc_mem_put(fctx->mctx, sa, sizeof(*sa));
}
for (sa = ISC_LIST_HEAD(fctx->bad_edns);
@@ -3134,31 +3154,21 @@ fctx_destroy(fetchctx_t *fctx) {
sa = next_sa) {
next_sa = ISC_LIST_NEXT(sa, link);
ISC_LIST_UNLINK(fctx->bad_edns, sa, link);
- isc_mem_put(res->buckets[bucketnum].mctx, sa, sizeof(*sa));
+ isc_mem_put(fctx->mctx, sa, sizeof(*sa));
}
isc_timer_detach(&fctx->timer);
dns_message_destroy(&fctx->rmessage);
dns_message_destroy(&fctx->qmessage);
if (dns_name_countlabels(&fctx->domain) > 0)
- dns_name_free(&fctx->domain, res->buckets[bucketnum].mctx);
+ dns_name_free(&fctx->domain, fctx->mctx);
if (dns_rdataset_isassociated(&fctx->nameservers))
dns_rdataset_disassociate(&fctx->nameservers);
- dns_name_free(&fctx->name, res->buckets[bucketnum].mctx);
+ dns_name_free(&fctx->name, fctx->mctx);
dns_db_detach(&fctx->cache);
dns_adb_detach(&fctx->adb);
- isc_mem_free(res->buckets[bucketnum].mctx, fctx->info);
- isc_mem_put(res->buckets[bucketnum].mctx, fctx, sizeof(*fctx));
-
- LOCK(&res->nlock);
- res->nfctx--;
- UNLOCK(&res->nlock);
-
- if (res->buckets[bucketnum].exiting &&
- ISC_LIST_EMPTY(res->buckets[bucketnum].fctxs))
- return (ISC_TRUE);
-
- return (ISC_FALSE);
+ isc_mem_free(fctx->mctx, fctx->info);
+ isc_mem_putanddetach(&fctx->mctx, fctx, sizeof(*fctx));
}
/*
@@ -3258,6 +3268,7 @@ fctx_doshutdown(isc_task_t *task, isc_event_t *event) {
dns_resolver_t *res;
unsigned int bucketnum;
dns_validator_t *validator;
+ isc_boolean_t destroy = ISC_FALSE;
REQUIRE(VALID_FCTX(fctx));
@@ -3307,13 +3318,18 @@ fctx_doshutdown(isc_task_t *task, isc_event_t *event) {
}
if (fctx->references == 0 && fctx->pending == 0 &&
- fctx->nqueries == 0 && ISC_LIST_EMPTY(fctx->validators))
- bucket_empty = fctx_destroy(fctx);
+ fctx->nqueries == 0 && ISC_LIST_EMPTY(fctx->validators)) {
+ bucket_empty = fctx_unlink(fctx);
+ destroy = ISC_TRUE;
+ }
UNLOCK(&res->buckets[bucketnum].lock);
- if (bucket_empty)
- empty_bucket(res);
+ if (destroy) {
+ fctx_destroy(fctx);
+ if (bucket_empty)
+ empty_bucket(res);
+ }
}
static void
@@ -3322,6 +3338,7 @@ fctx_start(isc_task_t *task, isc_event_t *event) {
isc_boolean_t done = ISC_FALSE, bucket_empty = ISC_FALSE;
dns_resolver_t *res;
unsigned int bucketnum;
+ isc_boolean_t destroy = ISC_FALSE;
REQUIRE(VALID_FCTX(fctx));
@@ -3354,7 +3371,8 @@ fctx_start(isc_task_t *task, isc_event_t *event) {
/*
* It's now safe to destroy this fctx.
*/
- bucket_empty = fctx_destroy(fctx);
+ bucket_empty = fctx_unlink(fctx);
+ destroy = ISC_TRUE;
}
done = ISC_TRUE;
} else {
@@ -3376,6 +3394,8 @@ fctx_start(isc_task_t *task, isc_event_t *event) {
if (!done) {
isc_result_t result;
+ INSIST(!destroy);
+
/*
* All is well. Start working on the fetch.
*/
@@ -3384,8 +3404,11 @@ fctx_start(isc_task_t *task, isc_event_t *event) {
fctx_done(fctx, result, __LINE__);
else
fctx_try(fctx, ISC_FALSE, ISC_FALSE);
- } else if (bucket_empty)
- empty_bucket(res);
+ } else if (destroy) {
+ fctx_destroy(fctx);
+ if (bucket_empty)
+ empty_bucket(res);
+ }
}
/*
@@ -3473,27 +3496,29 @@ fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
char buf[DNS_NAME_FORMATSIZE + DNS_RDATATYPE_FORMATSIZE];
char typebuf[DNS_RDATATYPE_FORMATSIZE];
dns_name_t suffix;
+ isc_mem_t *mctx;
/*
* Caller must be holding the lock for bucket number 'bucketnum'.
*/
REQUIRE(fctxp != NULL && *fctxp == NULL);
- fctx = isc_mem_get(res->buckets[bucketnum].mctx, sizeof(*fctx));
+ mctx = res->buckets[bucketnum].mctx;
+ fctx = isc_mem_get(mctx, sizeof(*fctx));
if (fctx == NULL)
return (ISC_R_NOMEMORY);
dns_name_format(name, buf, sizeof(buf));
dns_rdatatype_format(type, typebuf, sizeof(typebuf));
strcat(buf, "/"); /* checked */
strcat(buf, typebuf); /* checked */
- fctx->info = isc_mem_strdup(res->buckets[bucketnum].mctx, buf);
+ fctx->info = isc_mem_strdup(mctx, buf);
if (fctx->info == NULL) {
result = ISC_R_NOMEMORY;
goto cleanup_fetch;
}
FCTXTRACE("create");
dns_name_init(&fctx->name, NULL);
- result = dns_name_dup(name, res->buckets[bucketnum].mctx, &fctx->name);
+ result = dns_name_dup(name, mctx, &fctx->name);
if (result != ISC_R_SUCCESS)
goto cleanup_info;
dns_name_init(&fctx->domain, NULL);
@@ -3596,9 +3621,7 @@ fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
NULL);
if (result != ISC_R_SUCCESS)
goto cleanup_name;
- result = dns_name_dup(domain,
- res->buckets[bucketnum].mctx,
- &fctx->domain);
+ result = dns_name_dup(domain, mctx, &fctx->domain);
if (result != ISC_R_SUCCESS) {
dns_rdataset_disassociate(&fctx->nameservers);
goto cleanup_name;
@@ -3609,16 +3632,12 @@ fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
/*
* We're in forward-only mode. Set the query domain.
*/
- result = dns_name_dup(domain,
- res->buckets[bucketnum].mctx,
- &fctx->domain);
+ result = dns_name_dup(domain, mctx, &fctx->domain);
if (result != ISC_R_SUCCESS)
goto cleanup_name;
}
} else {
- result = dns_name_dup(domain,
- res->buckets[bucketnum].mctx,
- &fctx->domain);
+ result = dns_name_dup(domain, mctx, &fctx->domain);
if (result != ISC_R_SUCCESS)
goto cleanup_name;
dns_rdataset_clone(nameservers, &fctx->nameservers);
@@ -3631,16 +3650,14 @@ fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
INSIST(dns_name_issubdomain(&fctx->name, &fctx->domain));
fctx->qmessage = NULL;
- result = dns_message_create(res->buckets[bucketnum].mctx,
- DNS_MESSAGE_INTENTRENDER,
+ result = dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER,
&fctx->qmessage);
if (result != ISC_R_SUCCESS)
goto cleanup_domain;
fctx->rmessage = NULL;
- result = dns_message_create(res->buckets[bucketnum].mctx,
- DNS_MESSAGE_INTENTPARSE,
+ result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE,
&fctx->rmessage);
if (result != ISC_R_SUCCESS)
@@ -3690,6 +3707,8 @@ fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
dns_db_attach(res->view->cachedb, &fctx->cache);
fctx->adb = NULL;
dns_adb_attach(res->view->adb, &fctx->adb);
+ fctx->mctx = NULL;
+ isc_mem_attach(mctx, &fctx->mctx);
ISC_LIST_INIT(fctx->events);
ISC_LINK_INIT(fctx, link);
@@ -3713,18 +3732,18 @@ fctx_create(dns_resolver_t *res, dns_name_t *name, dns_rdatatype_t type,
cleanup_domain:
if (dns_name_countlabels(&fctx->domain) > 0)
- dns_name_free(&fctx->domain, res->buckets[bucketnum].mctx);
+ dns_name_free(&fctx->domain, mctx);
if (dns_rdataset_isassociated(&fctx->nameservers))
dns_rdataset_disassociate(&fctx->nameservers);
cleanup_name:
- dns_name_free(&fctx->name, res->buckets[bucketnum].mctx);
+ dns_name_free(&fctx->name, mctx);
cleanup_info:
- isc_mem_free(res->buckets[bucketnum].mctx, fctx->info);
+ isc_mem_free(mctx, fctx->info);
cleanup_fetch:
- isc_mem_put(res->buckets[bucketnum].mctx, fctx, sizeof(*fctx));
+ isc_mem_put(mctx, fctx, sizeof(*fctx));
return (result);
}
@@ -3934,6 +3953,7 @@ maybe_destroy(fetchctx_t *fctx, isc_boolean_t locked) {
isc_boolean_t bucket_empty = ISC_FALSE;
dns_resolver_t *res = fctx->res;
dns_validator_t *validator, *next_validator;
+ isc_boolean_t destroy = ISC_FALSE;
REQUIRE(SHUTTINGDOWN(fctx));
@@ -3949,11 +3969,15 @@ maybe_destroy(fetchctx_t *fctx, isc_boolean_t locked) {
dns_validator_cancel(validator);
}
- if (fctx->references == 0 && ISC_LIST_EMPTY(fctx->validators))
- bucket_empty = fctx_destroy(fctx);
+ if (fctx->references == 0 && ISC_LIST_EMPTY(fctx->validators)) {
+ bucket_empty = fctx_unlink(fctx);
+ destroy = ISC_TRUE;
+ }
unlock:
if (!locked)
UNLOCK(&res->buckets[bucketnum].lock);
+ if (destroy)
+ fctx_destroy(fctx);
return (bucket_empty);
}
@@ -4008,8 +4032,7 @@ validated(isc_task_t *task, isc_event_t *event) {
* destroy the fctx if necessary.
*/
dns_validator_destroy(&vevent->validator);
- isc_mem_put(res->buckets[fctx->bucketnum].mctx,
- valarg, sizeof(*valarg));
+ isc_mem_put(fctx->mctx, valarg, sizeof(*valarg));
negative = ISC_TF(vevent->rdataset == NULL);
@@ -5723,14 +5746,11 @@ noanswer_response(fetchctx_t *fctx, dns_name_t *oqname,
* if so we should bail out.
*/
INSIST(dns_name_countlabels(&fctx->domain) > 0);
- dns_name_free(&fctx->domain,
- fctx->res->buckets[fctx->bucketnum].mctx);
+ dns_name_free(&fctx->domain, fctx->mctx);
if (dns_rdataset_isassociated(&fctx->nameservers))
dns_rdataset_disassociate(&fctx->nameservers);
dns_name_init(&fctx->domain, NULL);
- result = dns_name_dup(ns_name,
- fctx->res->buckets[fctx->bucketnum].mctx,
- &fctx->domain);
+ result = dns_name_dup(ns_name, fctx->mctx, &fctx->domain);
if (result != ISC_R_SUCCESS)
return (result);
fctx->attributes |= FCTX_ATTR_WANTCACHE;
@@ -6232,7 +6252,8 @@ fctx_decreference(fetchctx_t *fctx) {
* This fctx is already shutdown; we were just
* waiting for the last reference to go away.
*/
- bucket_empty = fctx_destroy(fctx);
+ bucket_empty = fctx_unlink(fctx);
+ fctx_destroy(fctx);
} else {
/*
* Initiate shutdown.
@@ -6287,12 +6308,9 @@ resume_dslookup(isc_task_t *task, isc_event_t *event) {
fctx->ns_ttl = fctx->nameservers.ttl;
fctx->ns_ttl_ok = ISC_TRUE;
log_ns_ttl(fctx, "resume_dslookup");
- dns_name_free(&fctx->domain,
- fctx->res->buckets[bucketnum].mctx);
+ dns_name_free(&fctx->domain, fctx->mctx);
dns_name_init(&fctx->domain, NULL);
- result = dns_name_dup(&fctx->nsname,
- fctx->res->buckets[bucketnum].mctx,
- &fctx->domain);
+ result = dns_name_dup(&fctx->nsname, fctx->mctx, &fctx->domain);
if (result != ISC_R_SUCCESS) {
fctx_done(fctx, DNS_R_SERVFAIL, __LINE__);
goto cleanup;
@@ -7210,12 +7228,9 @@ resquery_response(isc_task_t *task, isc_event_t *event) {
fctx_done(fctx, DNS_R_SERVFAIL, __LINE__);
return;
}
- dns_name_free(&fctx->domain,
- fctx->res->buckets[fctx->bucketnum].mctx);
+ dns_name_free(&fctx->domain, fctx->mctx);
dns_name_init(&fctx->domain, NULL);
- result = dns_name_dup(fname,
- fctx->res->buckets[fctx->bucketnum].mctx,
- &fctx->domain);
+ result = dns_name_dup(fname, fctx->mctx, &fctx->domain);
if (result != ISC_R_SUCCESS) {
fctx_done(fctx, DNS_R_SERVFAIL, __LINE__);
return;
@@ -7955,6 +7970,7 @@ dns_resolver_createfetch2(dns_resolver_t *res, dns_name_t *name,
unsigned int count = 0;
unsigned int spillat;
unsigned int spillatmin;
+ isc_boolean_t destroy = ISC_FALSE;
UNUSED(forwarders);
@@ -8052,16 +8068,20 @@ dns_resolver_createfetch2(dns_resolver_t *res, dns_name_t *name,
isc_task_send(res->buckets[bucketnum].task, &event);
} else {
/*
- * We don't care about the result of fctx_destroy()
+ * We don't care about the result of fctx_unlink()
* since we know we're not exiting.
*/
- (void)fctx_destroy(fctx);
+ (void)fctx_unlink(fctx);
+ destroy = ISC_TRUE;
}
}
unlock:
UNLOCK(&res->buckets[bucketnum].lock);
+ if (destroy)
+ fctx_destroy(fctx);
+
if (result == ISC_R_SUCCESS) {
FTRACE("created");
*fetchp = fetch;
diff --git a/contrib/bind9/lib/dns/sdb.c b/contrib/bind9/lib/dns/sdb.c
index 01ab17cc9798..8092c5a551cb 100644
--- a/contrib/bind9/lib/dns/sdb.c
+++ b/contrib/bind9/lib/dns/sdb.c
@@ -216,12 +216,13 @@ dns_sdb_register(const char *drivername, const dns_sdbmethods_t *methods,
REQUIRE(drivername != NULL);
REQUIRE(methods != NULL);
- REQUIRE(methods->lookup != NULL);
+ REQUIRE(methods->lookup != NULL || methods->lookup2 != NULL);
REQUIRE(mctx != NULL);
REQUIRE(sdbimp != NULL && *sdbimp == NULL);
REQUIRE((flags & ~(DNS_SDBFLAG_RELATIVEOWNER |
DNS_SDBFLAG_RELATIVERDATA |
- DNS_SDBFLAG_THREADSAFE)) == 0);
+ DNS_SDBFLAG_THREADSAFE|
+ DNS_SDBFLAG_DNS64)) == 0);
imp = isc_mem_get(mctx, sizeof(dns_sdbimplementation_t));
if (imp == NULL)
@@ -280,8 +281,9 @@ initial_size(unsigned int len) {
}
isc_result_t
-dns_sdb_putrdata(dns_sdblookup_t *lookup, dns_rdatatype_t typeval, dns_ttl_t ttl,
- const unsigned char *rdatap, unsigned int rdlen)
+dns_sdb_putrdata(dns_sdblookup_t *lookup, dns_rdatatype_t typeval,
+ dns_ttl_t ttl, const unsigned char *rdatap,
+ unsigned int rdlen)
{
dns_rdatalist_t *rdatalist;
dns_rdata_t *rdata;
@@ -338,7 +340,6 @@ dns_sdb_putrdata(dns_sdblookup_t *lookup, dns_rdatatype_t typeval, dns_ttl_t ttl
return (result);
}
-
isc_result_t
dns_sdb_putrr(dns_sdblookup_t *lookup, const char *type, dns_ttl_t ttl,
const char *data)
@@ -737,6 +738,8 @@ findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
char namestr[DNS_NAME_MAXTEXT + 1];
isc_boolean_t isorigin;
dns_sdbimplementation_t *imp;
+ dns_name_t relname;
+ unsigned int labels;
REQUIRE(VALID_SDB(sdb));
REQUIRE(create == ISC_FALSE);
@@ -747,33 +750,46 @@ findnode(dns_db_t *db, dns_name_t *name, isc_boolean_t create,
imp = sdb->implementation;
- isc_buffer_init(&b, namestr, sizeof(namestr));
- if ((imp->flags & DNS_SDBFLAG_RELATIVEOWNER) != 0) {
- dns_name_t relname;
- unsigned int labels;
+ isorigin = dns_name_equal(name, &sdb->common.origin);
- labels = dns_name_countlabels(name) -
- dns_name_countlabels(&db->origin);
- dns_name_init(&relname, NULL);
- dns_name_getlabelsequence(name, 0, labels, &relname);
- result = dns_name_totext(&relname, ISC_TRUE, &b);
- if (result != ISC_R_SUCCESS)
- return (result);
+ if (imp->methods->lookup2 != NULL) {
+ if ((imp->flags & DNS_SDBFLAG_RELATIVEOWNER) != 0) {
+ labels = dns_name_countlabels(name) -
+ dns_name_countlabels(&db->origin);
+ dns_name_init(&relname, NULL);
+ dns_name_getlabelsequence(name, 0, labels, &relname);
+ name = &relname;
+ }
} else {
- result = dns_name_totext(name, ISC_TRUE, &b);
- if (result != ISC_R_SUCCESS)
- return (result);
+ isc_buffer_init(&b, namestr, sizeof(namestr));
+ if ((imp->flags & DNS_SDBFLAG_RELATIVEOWNER) != 0) {
+
+ labels = dns_name_countlabels(name) -
+ dns_name_countlabels(&db->origin);
+ dns_name_init(&relname, NULL);
+ dns_name_getlabelsequence(name, 0, labels, &relname);
+ result = dns_name_totext(&relname, ISC_TRUE, &b);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ } else {
+ result = dns_name_totext(name, ISC_TRUE, &b);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ }
+ isc_buffer_putuint8(&b, 0);
}
- isc_buffer_putuint8(&b, 0);
result = createnode(sdb, &node);
if (result != ISC_R_SUCCESS)
return (result);
- isorigin = dns_name_equal(name, &sdb->common.origin);
-
MAYBE_LOCK(sdb);
- result = imp->methods->lookup(sdb->zone, namestr, sdb->dbdata, node);
+ if (imp->methods->lookup2 != NULL)
+ result = imp->methods->lookup2(&sdb->common.origin, name,
+ sdb->dbdata, node);
+ else
+ result = imp->methods->lookup(sdb->zone, namestr, sdb->dbdata,
+ node);
MAYBE_UNLOCK(sdb);
if (result != ISC_R_SUCCESS &&
!(result == ISC_R_NOTFOUND &&
@@ -811,13 +827,13 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
unsigned int nlabels, olabels;
isc_result_t result;
unsigned int i;
+ unsigned int flags;
REQUIRE(VALID_SDB(sdb));
REQUIRE(nodep == NULL || *nodep == NULL);
REQUIRE(version == NULL || version == (void *) &dummy);
UNUSED(options);
- UNUSED(sdb);
if (!dns_name_issubdomain(name, &db->origin))
return (DNS_R_NXDOMAIN);
@@ -834,17 +850,37 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
}
result = DNS_R_NXDOMAIN;
-
- for (i = olabels; i <= nlabels; i++) {
+ flags = sdb->implementation->flags;
+ i = (flags & DNS_SDBFLAG_DNS64) != 0 ? nlabels : olabels;
+ for (; i <= nlabels; i++) {
/*
* Look up the next label.
*/
dns_name_getlabelsequence(name, nlabels - i, i, xname);
result = findnode(db, xname, ISC_FALSE, &node);
- if (result != ISC_R_SUCCESS) {
+ if (result == ISC_R_NOTFOUND) {
+ /*
+ * No data at zone apex?
+ */
+ if (i == olabels)
+ return (DNS_R_BADDB);
result = DNS_R_NXDOMAIN;
continue;
}
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ /*
+ * DNS64 zone's don't have DNAME or NS records.
+ */
+ if ((flags & DNS_SDBFLAG_DNS64) != 0)
+ goto skip;
+
+ /*
+ * DNS64 zone's don't have DNAME or NS records.
+ */
+ if ((flags & DNS_SDBFLAG_DNS64) != 0)
+ goto skip;
/*
* Look for a DNAME at the current label, unless this is
@@ -895,6 +931,7 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
continue;
}
+ skip:
/*
* If we're looking for ANY, we're done.
*/
diff --git a/contrib/bind9/lib/dns/tkey.c b/contrib/bind9/lib/dns/tkey.c
index bfc8e8b25767..0112f7ec760e 100644
--- a/contrib/bind9/lib/dns/tkey.c
+++ b/contrib/bind9/lib/dns/tkey.c
@@ -485,9 +485,9 @@ process_gsstkey(dns_name_t *name, dns_rdata_tkey_t *tkeyin,
tkeyout->error = dns_tsigerror_badkey;
tkey_log("process_gsstkey(): dns_tsigerror_badkey"); /* XXXSRA */
return (ISC_R_SUCCESS);
- } else if (result == ISC_R_FAILURE)
+ }
+ if (result != DNS_R_CONTINUE && result != ISC_R_SUCCESS)
goto failure;
- ENSURE(result == DNS_R_CONTINUE || result == ISC_R_SUCCESS);
/*
* XXXDCL Section 4.1.3: Limit GSS_S_CONTINUE_NEEDED to 10 times.
*/
diff --git a/contrib/bind9/lib/dns/zone.c b/contrib/bind9/lib/dns/zone.c
index 61a817079736..22870dc47b6a 100644
--- a/contrib/bind9/lib/dns/zone.c
+++ b/contrib/bind9/lib/dns/zone.c
@@ -429,6 +429,7 @@ struct dns_zonemgr {
isc_ratelimiter_t * rl;
isc_rwlock_t rwlock;
isc_mutex_t iolock;
+ isc_rwlock_t urlock;
/* Locked by rwlock. */
dns_zonelist_t zones;
@@ -446,7 +447,7 @@ struct dns_zonemgr {
dns_iolist_t high;
dns_iolist_t low;
- /* Locked by rwlock. */
+ /* Locked by urlock. */
/* LRU cache */
struct dns_unreachable unreachable[UNREACH_CHACHE_SIZE];
};
@@ -1676,12 +1677,16 @@ zone_gotwritehandle(isc_task_t *task, isc_event_t *event) {
LOCK_ZONE(zone);
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
- dns_db_currentversion(zone->db, &version);
- result = dns_master_dumpinc2(zone->mctx, zone->db, version,
- &dns_master_style_default,
- zone->masterfile, zone->task, dump_done,
- zone, &zone->dctx, zone->masterformat);
- dns_db_closeversion(zone->db, &version, ISC_FALSE);
+ if (zone->db != NULL) {
+ dns_db_currentversion(zone->db, &version);
+ result = dns_master_dumpinc2(zone->mctx, zone->db, version,
+ &dns_master_style_default,
+ zone->masterfile, zone->task,
+ dump_done, zone, &zone->dctx,
+ zone->masterformat);
+ dns_db_closeversion(zone->db, &version, ISC_FALSE);
+ } else
+ result = ISC_R_CANCELED;
ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_read);
UNLOCK_ZONE(zone);
if (result != DNS_R_CONTINUE)
@@ -2695,7 +2700,8 @@ check_nsec3param(dns_zone_t *zone, dns_db_t *db) {
*/
static void
set_refreshkeytimer(dns_zone_t *zone, dns_rdata_keydata_t *key,
- isc_stdtime_t now) {
+ isc_stdtime_t now)
+{
const char me[] = "set_refreshkeytimer";
isc_stdtime_t then;
isc_time_t timenow, timethen;
@@ -4443,6 +4449,7 @@ dns_zone_setmasterswithkeys(dns_zone_t *zone,
/*
* Everything is ok so attach to the zone.
*/
+ zone->curmaster = 0;
zone->masters = new;
zone->mastersok = newok;
zone->masterkeynames = newname;
@@ -8531,6 +8538,14 @@ zone_unload(dns_zone_t *zone) {
REQUIRE(LOCKED_ZONE(zone));
+ if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_FLUSH) ||
+ !DNS_ZONE_FLAG(zone, DNS_ZONEFLG_DUMPING)) {
+ if (zone->writeio != NULL)
+ zonemgr_cancelio(zone->writeio);
+
+ if (zone->dctx != NULL)
+ dns_dumpctx_cancel(zone->dctx);
+ }
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_write);
zone_detachdb(zone);
ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_write);
@@ -9245,6 +9260,8 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
TIME_NOW(&now);
+ LOCK_ZONE(zone);
+
if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_EXITING)) {
zone_debuglog(zone, me, 1, "exiting");
exiting = ISC_TRUE;
@@ -9257,9 +9274,7 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
if (revent->result != ISC_R_SUCCESS) {
if (revent->result == ISC_R_TIMEDOUT &&
!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS)) {
- LOCK_ZONE(zone);
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NOEDNS);
- UNLOCK_ZONE(zone);
dns_zone_log(zone, ISC_LOG_DEBUG(1),
"refreshing stub: timeout retrying "
" without EDNS master %s (source %s)",
@@ -9301,9 +9316,7 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
"refreshing stub: rcode (%.*s) retrying "
"without EDNS master %s (source %s)",
(int)rb.used, rcode, master, source);
- LOCK_ZONE(zone);
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NOEDNS);
- UNLOCK_ZONE(zone);
goto same_master;
}
@@ -9325,9 +9338,7 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
master, source);
goto next_master;
}
- LOCK_ZONE(zone);
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_USEVC);
- UNLOCK_ZONE(zone);
goto same_master;
}
@@ -9382,21 +9393,17 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_write);
dns_db_detach(&stub->db);
- if (zone->masterfile != NULL) {
- dns_zone_dump(zone);
- TIME_NOW(&zone->loadtime);
- }
+ if (zone->masterfile != NULL)
+ zone_needdump(zone, 0);
dns_message_destroy(&msg);
isc_event_free(&event);
- LOCK_ZONE(zone);
dns_request_destroy(&zone->request);
DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_REFRESH);
DNS_ZONE_JITTER_ADD(&now, zone->refresh, &zone->refreshtime);
isc_interval_set(&i, zone->expire, 0);
DNS_ZONE_TIME_ADD(&now, zone->expire, &zone->expiretime);
zone_settimer(zone, &now);
- UNLOCK_ZONE(zone);
goto free_stub;
next_master:
@@ -9407,7 +9414,6 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
if (msg != NULL)
dns_message_destroy(&msg);
isc_event_free(&event);
- LOCK_ZONE(zone);
dns_request_destroy(&zone->request);
/*
* Skip to next failed / untried master.
@@ -9445,25 +9451,23 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_REFRESH);
zone_settimer(zone, &now);
- UNLOCK_ZONE(zone);
goto free_stub;
}
}
queue_soa_query(zone);
- UNLOCK_ZONE(zone);
goto free_stub;
same_master:
if (msg != NULL)
dns_message_destroy(&msg);
isc_event_free(&event);
- LOCK_ZONE(zone);
dns_request_destroy(&zone->request);
- UNLOCK_ZONE(zone);
ns_query(zone, NULL, stub);
+ UNLOCK_ZONE(zone);
goto done;
free_stub:
+ UNLOCK_ZONE(zone);
stub->magic = 0;
dns_zone_idetach(&stub->zone);
INSIST(stub->db == NULL);
@@ -9494,6 +9498,7 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
isc_result_t result;
isc_uint32_t serial, oldserial = 0;
unsigned int j;
+ isc_boolean_t do_queue_xfrin = ISC_FALSE;
zone = revent->ev_arg;
INSIST(DNS_ZONE_VALID(zone));
@@ -9502,6 +9507,10 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
ENTER;
+ TIME_NOW(&now);
+
+ LOCK_ZONE(zone);
+
/*
* if timeout log and next master;
*/
@@ -9509,14 +9518,10 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
isc_sockaddr_format(&zone->masteraddr, master, sizeof(master));
isc_sockaddr_format(&zone->sourceaddr, source, sizeof(source));
- TIME_NOW(&now);
-
if (revent->result != ISC_R_SUCCESS) {
if (revent->result == ISC_R_TIMEDOUT &&
!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS)) {
- LOCK_ZONE(zone);
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NOEDNS);
- UNLOCK_ZONE(zone);
dns_zone_log(zone, ISC_LOG_DEBUG(1),
"refresh: timeout retrying without EDNS "
"master %s (source %s)", master, source);
@@ -9536,10 +9541,8 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
&zone->sourceaddr,
&now))
{
- LOCK_ZONE(zone);
DNS_ZONE_SETFLAG(zone,
DNS_ZONEFLG_SOABEFOREAXFR);
- UNLOCK_ZONE(zone);
goto tcp_transfer;
}
dns_zone_log(zone, ISC_LOG_DEBUG(1),
@@ -9586,9 +9589,7 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
"refresh: rcode (%.*s) retrying without "
"EDNS master %s (source %s)",
(int)rb.used, rcode, master, source);
- LOCK_ZONE(zone);
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NOEDNS);
- UNLOCK_ZONE(zone);
goto same_master;
}
dns_zone_log(zone, ISC_LOG_INFO,
@@ -9614,9 +9615,7 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
"initiating TCP zone xfer "
"for master %s (source %s)",
master, source);
- LOCK_ZONE(zone);
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_SOABEFOREAXFR);
- UNLOCK_ZONE(zone);
goto tcp_transfer;
} else {
INSIST(zone->type == dns_zone_stub);
@@ -9627,9 +9626,7 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
master, source);
goto next_master;
}
- LOCK_ZONE(zone);
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_USEVC);
- UNLOCK_ZONE(zone);
goto same_master;
}
}
@@ -9690,6 +9687,7 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
soacnt, master, source);
goto next_master;
}
+
/*
* Extract serial
*/
@@ -9717,7 +9715,9 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
serial = soa.serial;
if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADED)) {
- result = dns_zone_getserial2(zone, &oldserial);
+ result = zone_get_from_db(zone, zone->db, NULL, NULL,
+ &oldserial, NULL, NULL, NULL, NULL,
+ NULL);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
zone_debuglog(zone, me, 1, "serial: new %u, old %u",
serial, oldserial);
@@ -9741,11 +9741,9 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
}
tcp_transfer:
isc_event_free(&event);
- LOCK_ZONE(zone);
dns_request_destroy(&zone->request);
- UNLOCK_ZONE(zone);
if (zone->type == dns_zone_slave) {
- queue_xfrin(zone);
+ do_queue_xfrin = ISC_TRUE;
} else {
INSIST(zone->type == dns_zone_stub);
ns_query(zone, rdataset, NULL);
@@ -9767,9 +9765,7 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
&now);
/* Someone removed the file from underneath us! */
if (result == ISC_R_FILENOTFOUND) {
- LOCK_ZONE(zone);
zone_needdump(zone, DNS_DUMP_DELAY);
- UNLOCK_ZONE(zone);
} else if (result != ISC_R_SUCCESS)
dns_zone_log(zone, ISC_LOG_ERROR,
"refresh: could not set file "
@@ -9799,7 +9795,6 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
if (msg != NULL)
dns_message_destroy(&msg);
isc_event_free(&event);
- LOCK_ZONE(zone);
dns_request_destroy(&zone->request);
/*
* Skip to next failed / untried master.
@@ -9841,25 +9836,24 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
}
DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_USEALTXFRSRC);
zone_settimer(zone, &now);
- UNLOCK_ZONE(zone);
goto detach;
}
requeue:
queue_soa_query(zone);
- UNLOCK_ZONE(zone);
goto detach;
same_master:
if (msg != NULL)
dns_message_destroy(&msg);
isc_event_free(&event);
- LOCK_ZONE(zone);
dns_request_destroy(&zone->request);
queue_soa_query(zone);
- UNLOCK_ZONE(zone);
detach:
+ UNLOCK_ZONE(zone);
+ if (do_queue_xfrin)
+ queue_xfrin(zone);
dns_zone_idetach(&zone);
return;
}
@@ -10217,13 +10211,13 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) {
isc_uint16_t udpsize = SEND_BUFFER_SIZE;
REQUIRE(DNS_ZONE_VALID(zone));
+ REQUIRE(LOCKED_ZONE(zone));
REQUIRE((soardataset != NULL && stub == NULL) ||
(soardataset == NULL && stub != NULL));
REQUIRE(stub == NULL || DNS_STUB_VALID(stub));
ENTER;
- LOCK_ZONE(zone);
if (stub == NULL) {
stub = isc_mem_get(zone->mctx, sizeof(*stub));
if (stub == NULL)
@@ -10414,10 +10408,9 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) {
}
if (message != NULL)
dns_message_destroy(&message);
- unlock:
+ unlock:
if (key != NULL)
dns_tsigkey_detach(&key);
- UNLOCK_ZONE(zone);
return;
}
@@ -12597,15 +12590,22 @@ dns_zonemgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
zmgr->transfersin = 10;
zmgr->transfersperns = 2;
+ /* Unreachable lock. */
+ result = isc_rwlock_init(&zmgr->urlock, 0, 0);
+ if (result != ISC_R_SUCCESS)
+ goto free_rwlock;
+
/* Create a single task for queueing of SOA queries. */
result = isc_task_create(taskmgr, 1, &zmgr->task);
if (result != ISC_R_SUCCESS)
- goto free_rwlock;
+ goto free_urlock;
+
isc_task_setname(zmgr->task, "zmgr", zmgr);
result = isc_ratelimiter_create(mctx, timermgr, zmgr->task,
&zmgr->rl);
if (result != ISC_R_SUCCESS)
goto free_task;
+
/* default to 20 refresh queries / notifies per second. */
isc_interval_set(&interval, 0, 1000000000/2);
result = isc_ratelimiter_setinterval(zmgr->rl, &interval);
@@ -12634,6 +12634,8 @@ dns_zonemgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
isc_ratelimiter_detach(&zmgr->rl);
free_task:
isc_task_detach(&zmgr->task);
+ free_urlock:
+ isc_rwlock_destroy(&zmgr->urlock);
free_rwlock:
isc_rwlock_destroy(&zmgr->rwlock);
free_mem:
@@ -12814,7 +12816,6 @@ dns_zonemgr_shutdown(dns_zonemgr_t *zmgr) {
UNLOCK_ZONE(zone);
}
RWUNLOCK(&zmgr->rwlock, isc_rwlocktype_read);
-
}
isc_result_t
@@ -12858,6 +12859,7 @@ zonemgr_free(dns_zonemgr_t *zmgr) {
DESTROYLOCK(&zmgr->iolock);
isc_ratelimiter_detach(&zmgr->rl);
+ isc_rwlock_destroy(&zmgr->urlock);
isc_rwlock_destroy(&zmgr->rwlock);
mctx = zmgr->mctx;
isc_mem_put(zmgr->mctx, zmgr, sizeof(*zmgr));
@@ -13270,12 +13272,12 @@ dns_zonemgr_unreachable(dns_zonemgr_t *zmgr, isc_sockaddr_t *remote,
REQUIRE(DNS_ZONEMGR_VALID(zmgr));
locktype = isc_rwlocktype_read;
- RWLOCK(&zmgr->rwlock, locktype);
+ RWLOCK(&zmgr->urlock, locktype);
for (i = 0; i < UNREACH_CHACHE_SIZE; i++) {
if (zmgr->unreachable[i].expire >= seconds &&
isc_sockaddr_equal(&zmgr->unreachable[i].remote, remote) &&
isc_sockaddr_equal(&zmgr->unreachable[i].local, local)) {
- result = isc_rwlock_tryupgrade(&zmgr->rwlock);
+ result = isc_rwlock_tryupgrade(&zmgr->urlock);
if (result == ISC_R_SUCCESS) {
locktype = isc_rwlocktype_write;
zmgr->unreachable[i].last = seconds;
@@ -13283,7 +13285,7 @@ dns_zonemgr_unreachable(dns_zonemgr_t *zmgr, isc_sockaddr_t *remote,
break;
}
}
- RWUNLOCK(&zmgr->rwlock, locktype);
+ RWUNLOCK(&zmgr->urlock, locktype);
return (ISC_TF(i < UNREACH_CHACHE_SIZE));
}
@@ -13304,11 +13306,11 @@ dns_zonemgr_unreachabledel(dns_zonemgr_t *zmgr, isc_sockaddr_t *remote,
REQUIRE(DNS_ZONEMGR_VALID(zmgr));
locktype = isc_rwlocktype_read;
- RWLOCK(&zmgr->rwlock, locktype);
+ RWLOCK(&zmgr->urlock, locktype);
for (i = 0; i < UNREACH_CHACHE_SIZE; i++) {
if (isc_sockaddr_equal(&zmgr->unreachable[i].remote, remote) &&
isc_sockaddr_equal(&zmgr->unreachable[i].local, local)) {
- result = isc_rwlock_tryupgrade(&zmgr->rwlock);
+ result = isc_rwlock_tryupgrade(&zmgr->urlock);
if (result == ISC_R_SUCCESS) {
locktype = isc_rwlocktype_write;
zmgr->unreachable[i].expire = 0;
@@ -13321,7 +13323,7 @@ dns_zonemgr_unreachabledel(dns_zonemgr_t *zmgr, isc_sockaddr_t *remote,
break;
}
}
- RWUNLOCK(&zmgr->rwlock, locktype);
+ RWUNLOCK(&zmgr->urlock, locktype);
}
void
@@ -13334,7 +13336,7 @@ dns_zonemgr_unreachableadd(dns_zonemgr_t *zmgr, isc_sockaddr_t *remote,
REQUIRE(DNS_ZONEMGR_VALID(zmgr));
- RWLOCK(&zmgr->rwlock, isc_rwlocktype_write);
+ RWLOCK(&zmgr->urlock, isc_rwlocktype_write);
for (i = 0; i < UNREACH_CHACHE_SIZE; i++) {
/* Existing entry? */
if (isc_sockaddr_equal(&zmgr->unreachable[i].remote, remote) &&
@@ -13373,7 +13375,7 @@ dns_zonemgr_unreachableadd(dns_zonemgr_t *zmgr, isc_sockaddr_t *remote,
zmgr->unreachable[oldest].remote = *remote;
zmgr->unreachable[oldest].local = *local;
}
- RWUNLOCK(&zmgr->rwlock, isc_rwlocktype_write);
+ RWUNLOCK(&zmgr->urlock, isc_rwlocktype_write);
}
void
diff --git a/contrib/bind9/lib/isc/pthreads/mutex.c b/contrib/bind9/lib/isc/pthreads/mutex.c
index ba04f1671e20..c7e5795b6807 100644
--- a/contrib/bind9/lib/isc/pthreads/mutex.c
+++ b/contrib/bind9/lib/isc/pthreads/mutex.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2008, 2011 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2008, 2011, 2012 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -78,7 +78,7 @@ struct isc_mutexstats {
};
#ifndef ISC_MUTEX_PROFTABLESIZE
-#define ISC_MUTEX_PROFTABLESIZE (16 * 1024)
+#define ISC_MUTEX_PROFTABLESIZE (1024 * 1024)
#endif
static isc_mutexstats_t stats[ISC_MUTEX_PROFTABLESIZE];
static int stats_next = 0;
@@ -200,24 +200,24 @@ isc_mutex_statsprofile(FILE *fp) {
fprintf(fp, "Mutex stats (in us)\n");
for (i = 0; i < stats_next; i++) {
- fprintf(fp, "%-12s %4d: %10u %lu.%06lu %lu.%06lu\n",
+ fprintf(fp, "%-12s %4d: %10u %lu.%06lu %lu.%06lu %5d\n",
stats[i].file, stats[i].line, stats[i].count,
stats[i].locked_total.tv_sec,
stats[i].locked_total.tv_usec,
stats[i].wait_total.tv_sec,
- stats[i].wait_total.tv_usec
- );
+ stats[i].wait_total.tv_usec,
+ i);
for (j = 0; j < ISC_MUTEX_MAX_LOCKERS; j++) {
locker = &stats[i].lockers[j];
if (locker->file == NULL)
continue;
- fprintf(fp, " %-11s %4d: %10u %lu.%06lu %lu.%06lu\n",
+ fprintf(fp, " %-11s %4d: %10u %lu.%06lu %lu.%06lu %5d\n",
locker->file, locker->line, locker->count,
locker->locked_total.tv_sec,
locker->locked_total.tv_usec,
locker->wait_total.tv_sec,
- locker->wait_total.tv_usec
- );
+ locker->wait_total.tv_usec,
+ i);
}
}
}
diff --git a/contrib/bind9/lib/isccfg/api b/contrib/bind9/lib/isccfg/api
index 2b2a12dafd2e..9f3d38cd4600 100644
--- a/contrib/bind9/lib/isccfg/api
+++ b/contrib/bind9/lib/isccfg/api
@@ -4,5 +4,5 @@
# 9.8: 80-89
# 9.9: 90-109
LIBINTERFACE = 82
-LIBREVISION = 1
+LIBREVISION = 2
LIBAGE = 0
diff --git a/contrib/bind9/lib/isccfg/parser.c b/contrib/bind9/lib/isccfg/parser.c
index 1d1f08e0d2c0..ef20184f3975 100644
--- a/contrib/bind9/lib/isccfg/parser.c
+++ b/contrib/bind9/lib/isccfg/parser.c
@@ -2232,16 +2232,30 @@ cfg_parser_warning(cfg_parser_t *pctx, unsigned int flags, const char *fmt, ...)
#define MAX_LOG_TOKEN 30 /* How much of a token to quote in log messages. */
+static isc_boolean_t
+have_current_file(cfg_parser_t *pctx) {
+ cfg_listelt_t *elt;
+ if (pctx->open_files == NULL)
+ return (ISC_FALSE);
+
+ elt = ISC_LIST_TAIL(pctx->open_files->value.list);
+ if (elt == NULL)
+ return (ISC_FALSE);
+
+ return (ISC_TRUE);
+}
+
static char *
current_file(cfg_parser_t *pctx) {
static char none[] = "none";
cfg_listelt_t *elt;
cfg_obj_t *fileobj;
- if (pctx->open_files == NULL)
+ if (!have_current_file(pctx))
return (none);
+
elt = ISC_LIST_TAIL(pctx->open_files->value.list);
- if (elt == NULL)
+ if (elt == NULL) /* shouldn't be possible, but... */
return (none);
fileobj = elt->obj;
@@ -2264,8 +2278,10 @@ parser_complain(cfg_parser_t *pctx, isc_boolean_t is_warning,
if (is_warning)
level = ISC_LOG_WARNING;
- snprintf(where, sizeof(where), "%s:%u: ",
- current_file(pctx), pctx->line);
+ where[0] = '\0';
+ if (have_current_file(pctx))
+ snprintf(where, sizeof(where), "%s:%u: ",
+ current_file(pctx), pctx->line);
len = vsnprintf(message, sizeof(message), format, args);
if (len >= sizeof(message))
diff --git a/contrib/bind9/version b/contrib/bind9/version
index aa5d40c5a324..0f23b2e0d821 100644
--- a/contrib/bind9/version
+++ b/contrib/bind9/version
@@ -5,6 +5,6 @@
#
MAJORVER=9
MINORVER=8
-PATCHVER=2
+PATCHVER=3
RELEASETYPE=
RELEASEVER=
diff --git a/usr.bin/yacc/ACKNOWLEDGEMENTS b/contrib/byacc/ACKNOWLEDGEMENTS
index b66bb2506456..b66bb2506456 100644
--- a/usr.bin/yacc/ACKNOWLEDGEMENTS
+++ b/contrib/byacc/ACKNOWLEDGEMENTS
diff --git a/contrib/byacc/AUTHORS b/contrib/byacc/AUTHORS
new file mode 100644
index 000000000000..6d75337909a6
--- /dev/null
+++ b/contrib/byacc/AUTHORS
@@ -0,0 +1,7 @@
+-- $Id: AUTHORS,v 1.1 2010/06/06 20:31:51 tom Exp $
+-- vile:txtmode
+-- This file is used by a script that collects contributor information and
+-- resolves nicknames vs fullnames.
+dickey Thomas Dickey
+schmitz Sylvain Schmitz
+unknown Robert Corbett
diff --git a/contrib/byacc/CHANGES b/contrib/byacc/CHANGES
new file mode 100644
index 000000000000..66c5da07fdc8
--- /dev/null
+++ b/contrib/byacc/CHANGES
@@ -0,0 +1,1156 @@
+2012-01-15 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/debian/copyright: bump
+
+ * test/run_make.sh: workaround for breakage due to GNU make 3.82
+
+ * test/run_make.sh:
+ tested with Solaris 10 (bison 1.875) and added scripting to exercise
+ the /usr/ccs/bin/yacc executable
+
+ * test/grammar.tab.c: regen
+
+ * test/grammar.y: modify to also build with Solaris yacc
+
+ * VERSION, package/debian/changelog, package/byacc.spec: bump
+
+ * test/calc1.output, test/calc1.tab.c: regen
+
+ * test/calc1.y:
+ undo the change made to appease bison, since it was only a warning.
+
+ * test/pure_calc.tab.c, test/pure_error.tab.c: regen
+
+ * test/run_make.sh: another fix for running from top-level directory
+
+ * makefile.in:
+ ensure that check_make rule depends on having byacc built.
+
+ * test/run_make.sh: fixes for building from parent directory
+
+ * test/pure_error.y, test/pure_calc.y: bison-fixes
+
+ * test/calc2.tab.c, test/calc3.tab.c, test/code_error.code.c, test/ftp.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c:
+ regen
+
+ * test/calc2.y, test/calc3.y, test/code_error.y, test/ftp.y:
+ byacc already declares yyerror
+
+ * test/pure_error.y, test/pure_calc.y:
+ modified to help make the files build with bison
+
+ * test/run_make.sh:
+ supply a "%pure-parser" directive when bison needs it.
+
+ * test/code_calc.code.c: regen
+
+ * test/code_calc.y: modified to help make the files build with bison
+
+ * yacc.1:
+ in testing, found that %expect did not work as documented for bison.
+ do not recommend it for portable code.
+
+ * test/run_make.sh: workaround breakage in bison's %expect directive
+
+ * test/grammar.y: modified to help make the files build with bison
+
+ * test/calc1.output, test/calc1.tab.c, test/grammar.tab.c: regen
+
+ * test/calc1.y: quiet a spurious warning from bison 2.3
+
+ * test/calc1.tab.c: regen
+
+ * test/calc1.y: modified to help make the files build with bison
+
+ * yacc.1: comment on "-y" and "-P" options.
+
+ * yacc.1: comment on portability
+
+ * test/ftp.tab.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c, test/quote_calc2-s.tab.c, test/quote_calc3-s.tab.c:
+ regen
+
+ * test/ftp.y: modified to help make the files build with bison
+ (bison's "-y" option is of no use in providing "yacc" compatibility)
+
+ * test/quote_calc2.tab.c, test/quote_calc3.tab.c, test/quote_calc4-s.tab.c, test/quote_calc4.tab.c:
+ regen
+
+ * test/code_calc.y, test/quote_calc2.y, test/quote_calc.y, test/quote_calc4.y, test/quote_calc3.y:
+ modified to help make the files build with bison
+
+ * test/calc.tab.c: regen
+
+ * test/calc.y: modified to help make the files build with bison
+
+ * test/error.tab.c: regen
+
+ * test/error.y: modified to help make the files build with bison
+
+ * test/calc2.tab.c, test/calc3.tab.c, test/code_error.code.c: regen
+
+ * test/run_make.sh:
+ check for older bisons which (2.3 for instance) do not support pure parsers
+
+ * test/code_error.y, test/calc3.y, test/calc2.y:
+ modified to help make the files build with bison
+
+ * test/run_test.sh: use $opt2 in filenames of the generated files
+
+ * test/quote_calc2-s.tab.c, test/quote_calc3-s.tab.c, test/quote_calc4-s.tab.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c, test/quote_calc2.tab.c, test/quote_calc3.tab.c, test/quote_calc4.tab.c:
+ regen
+
+2012-01-14 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/calc2.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/calc1.tab.c:
+ regen
+
+ * output.c: Several changes:
+ a) add YYLEX_PARAM_TYPE, like YYPARSE_PARAM_TYPE, but for yylex.
+ b) modify definitions for YYLEX_DECL to be more like YYPARSE_DECL,
+ using YYLEX_PARAM_TYPE and YYLEX_PARAM.
+ c) add ifdef's around #define's for YYERROR_DECL and YYERROR_CALL,
+ to help with redefinitions.
+
+ * test/pure_calc.tab.c:
+ modified to help make the files build with bison
+
+ * test/run_make.sh:
+ start work on followup, to check if the generated files build with bison.
+
+ * test/pure_calc.y, test/pure_error.tab.c:
+ modified to help make the files build with bison
+
+ * test/calc3.tab.c: regen
+
+ * test/quote_calc-s.output, test/quote_calc-s.tab.c, test/quote_calc-s.tab.h, test/quote_calc2-s.output, test/quote_calc2-s.tab.c, test/quote_calc2-s.tab.h, test/quote_calc3-s.output, test/quote_calc3-s.tab.c, test/quote_calc3-s.tab.h, test/quote_calc4-s.output, test/quote_calc4-s.tab.c, test/quote_calc4-s.tab.h:
+ RCS_BASE
+
+ * test/run_test.sh: generate/test with "-s" option applied.
+
+2012-01-13 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/debian/changelog, package/byacc.spec, VERSION: bump
+
+ * yacc.1: improve documentation of -s option
+
+ * yacc.1: note that yacc ignores -y
+
+ * main.c: add -s option to usage message.
+
+ * test/quote_calc3.output, test/quote_calc3.tab.c, test/quote_calc4.output, test/quote_calc4.tab.c, test/quote_calc4.tab.h, test/quote_calc3.y, test/quote_calc.tab.h, test/quote_calc.output, test/quote_calc.tab.c, test/quote_calc2.output, test/quote_calc2.tab.c, test/quote_calc2.tab.h, test/quote_calc3.tab.h, test/quote_calc4.y, test/quote_calc.y, test/quote_calc2.y:
+ RCS_BASE
+
+ * configure: regen
+
+ * aclocal.m4: resync with my-autoconf, i.e., fixes for CF_XOPEN_SOURCE
+
+2011-12-19 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/debian/changelog, package/byacc.spec, VERSION: bump
+
+ * yacc.1, output.c, main.c, defs.h:
+ add "-s" option to suppress generating #define's based on string contents
+ in a %token statement. For instance
+ %token EQLS "Equals"
+ would generate
+ #define EQLS 256
+ #define Equals 257
+ Simply suppressing the second #define makes the behavior closer to yacc.
+ (report by Paulo Andrade).
+
+2011-09-08 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/debian/changelog, package/byacc.spec, VERSION: bump
+
+ * output.c:
+ fix some more interaction between -i and -d flags to ensure YYERRCODE
+ and YYSTYPE are declared, tested with cproto.
+
+2011-09-07 Thomas E. Dickey <tom@invisible-island.net>
+
+ * yacc.1: document "-i" option.
+
+ * package/debian/changelog, package/byacc.spec, VERSION: bump
+
+ * output.c: fix an interaction between -i and -d
+
+ * test/code_error.code.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c:
+ regen - changes for "-i" option move the global/impure variables near the
+ macros that may add a prefix, etc.
+
+ * skeleton.c, output.c, defs.h: changes to support "-i" option.
+
+2011-09-06 Thomas E. Dickey <tom@invisible-island.net>
+
+ * reader.c: pass explicit file-pointer to write_section()
+
+ * main.c:
+ add "-i" option, to generate interface-file (suggested by Denis M. Wilson)
+
+2011-09-05 Thomas E. Dickey <tom@invisible-island.net>
+
+ * configure: regen
+
+ * aclocal.m4:
+ resync with my-autoconf: CF_ANSI_CC_CHECK (check for $CFLAGS in $CC)
+ and CF_XOPEN_SOURCE (update aix, cygwin and netbsd checks)
+
+ * defs.h, error.c, reader.c:
+ add check for missing "}" on %parse-param and %lex-param lines (report by Denis M Wilson)
+
+2011-04-01 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.sub: 2011-04-01
+
+2011-02-02 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.guess: 2011-01-01
+
+2010-12-29 Thomas E. Dickey <tom@invisible-island.net>
+
+ * defs.h, skeleton.c:
+ add const qualifier to skeleton data, per NetBSD changes (report by Christos Zoulas)
+
+ * defs.h:
+ mark all of the error-functions as non-returning (report by Christos Zoulas)
+
+ * test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c, test/ftp.tab.c:
+ regen
+
+ * skeleton.c:
+ use only realloc() rather than realloc+malloc, agree that systems needing this
+ are very rare (prompted by NetBSD change).
+
+ * test/ftp.tab.c: regen
+
+2010-12-29 Christos.Zoulas
+
+ * test/ftp.y:
+ improve example, which was stuck in 19XX and assumed file sizes were longs.
+
+2010-12-29 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c:
+ regen
+
+ * test/pure_error.y, test/pure_calc.y, test/ftp.y, test/error.y, test/code_error.y, test/code_calc.y, test/calc.y, test/calc3.y, test/calc2.y, test/calc1.y:
+ use byacc's YYLEX_DECL/YYERROR_DECL symbols to prototype yylex/yyerror
+
+ * skeleton.c:
+ remove explicit prototype for yylex() via YYLEX_DECL() macro, since that
+ would prevent declaring yylex() static (request by Christos Zoulas).
+
+ * test/calc2.tab.c, test/calc3.tab.c: regen
+
+2010-12-29 Christos.Zoulas
+
+ * output.c: correct definition for YYERROR_DECL()
+
+2010-12-29 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/debian/changelog, package/byacc.spec, VERSION: bump
+
+2010-12-26 Thomas E. Dickey <tom@invisible-island.net>
+
+ * defs.h, main.c:
+ change return-type of allocate() to avoid warnings of alignment problems
+
+ * main.c: Solaris declares chmod() in <sys/stat.h>
+
+ * configure: regen
+
+ * main.c: ifdef'd use of fcntl.h
+
+ * configure.in: add configure checks for fcntl.h, atexit and mkstemp
+
+ * main.c: for cases where mkstemp() is not available, use tempnam/open
+
+ * aclocal.m4: add CF_MKSTEMP
+
+ * aclocal.m4:
+ improve quoting, deprecate ${name-value} in favor of standard ${name:-value}
+
+2010-12-25 Thomas E. Dickey <tom@invisible-island.net>
+
+ * main.c:
+ start revising use of tmpfile(), to make this work with MinGW. Start by
+ implementing a mkstemp() alternative - noting that mkstemp() also is broken
+ for MinGW.
+
+ * package/debian/changelog, package/byacc.spec, VERSION: bump
+
+2010-11-27 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/byacc.spec, package/debian/changelog, VERSION: bump
+
+ * test/calc2.tab.c, test/calc3.tab.c: regen
+
+ * output.c:
+ corrected use of %parse-param value in yyerror(); it doesn't use &yylval
+ (report by Clifford Yapp)
+
+2010-11-26 Thomas E. Dickey <tom@invisible-island.net>
+
+ * skeleton.c: typo
+
+ * output.c:
+ correct line-numbering when "-r" option is used; the 'outline' variable
+ should only be incremented when writing to the code-file.
+
+ * test/code_calc.code.c, test/code_error.code.c: regen
+
+ * yacc.1: bump date
+
+ * yacc.1: comment on -b option vs -r
+
+ * test/calc2.tab.c, test/calc2.y, test/calc3.tab.c, test/calc3.y, test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c:
+ regen
+
+ * output.c:
+ improve on YYERROR_DECL(), adding dummy params which can be used for the
+ actual function declaration. Also add YYERROR_CALL(). The two macros
+ simplify maintaining sets of grammars which may/may not be pure.
+
+ * test/calc1.y, test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c:
+ regen
+
+ * output.c: generate yyerror() calls in output.c
+ This is for compatibility with bison, which passes the yylval to yyerror
+ when the %parse-param feature is used.
+
+ * skeleton.c, defs.h: generate yyerror() calls in output.c
+
+ * output.c: simplified a little, using putc_code() and putl_code()
+
+ * test/calc1.tab.h: regen
+
+ * reader.c:
+ improve ifdef for YYSTYPE union declaration (report by Clifford Yapp)
+
+ * reader.c:
+ accept underscore as a replacement for dash in command names, e.g.,
+ "%pure_parser" vs "%pure-parser".
+
+ * test/calc1.tab.c: regen
+
+ * output.c, reader.c:
+ also ifdef YYSTYPE declaration in the generated code (report by Clifford Yapp)
+
+ * package/debian/changelog, package/byacc.spec, VERSION: bump
+
+2010-11-24 Thomas E. Dickey <tom@invisible-island.net>
+
+ * main.c, defs.h, symtab.c, error.c: reduce global variables
+
+ * package/debian/changelog, package/byacc.spec, VERSION: bump
+
+ * reader.c:
+ amend fix for Redhat #112617 to still call default_action_warning() for
+ empty rules (report by Bruce Cran).
+
+2010-11-22 Thomas E. Dickey <tom@invisible-island.net>
+
+ * output.c:
+ add ifdef to guard against redefinition of YYSTYPE union (request by Clifford Yapp).
+
+ * test/calc1.tab.c: regen
+
+ * test/calc1.y: cleanup compiler warnings
+
+ * test/grammar.y: add "%expect"
+
+ * test/calc1.tab.h: regen
+
+ * test/calc1.output, test/calc1.tab.c, test/calc1.tab.h: RCS_BASE
+
+ * test/calc2.tab.c, test/calc3.tab.c: regen
+
+ * test/calc1.y:
+ advanced example from Steve Johnson's paper, uses unions
+
+ * test/calc3.y, test/calc2.y: init 'base', so examples can run
+
+ * test/ftp.tab.c, test/ftp.y: tweaks to compile with g++
+
+ * output.c: compensate for fix in reader.c
+
+ * reader.c:
+ add/use putc_both() and puts_both(), incidentally fixing a place where
+ a union copied to the union_file may be missing the end of the last line.
+
+ * package/debian/changelog, package/byacc.spec, VERSION: bump
+
+2010-09-28 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.guess: 2010-09-24
+
+2010-09-10 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.sub: 2010-09-11
+
+2010-06-10 Thomas E. Dickey <tom@invisible-island.net>
+
+ * yacc.1, package/debian/changelog, package/byacc.spec, VERSION:
+ bump to 2010/06/10
+
+2010-06-09 Thomas E. Dickey <tom@invisible-island.net>
+
+ * reader.c: free declarations in leak-testing code.
+
+ * main.c: close code_file if -r option used, for leak-testing
+
+ * defs.h, reader.c:
+ improve %lex-param / %parse-param implementation by allowing for arrays to
+ be passed as parameters, e.g., "int regs[26]".
+
+ * test/calc3.tab.c, test/calc3.y, test/calc3.output, test/calc3.tab.h, test/calc2.tab.c, test/calc2.y, test/calc2.tab.h, test/calc2.output:
+ RCS_BASE
+
+ * output.c:
+ improve %lex-param / %parse-param implementation by allowing for arrays to
+ be passed as parameters, e.g., "int regs[26]".
+
+ * test/calc.tab.c, test/calc.y:
+ test-cases and reference files for %lex-param / %parse-param
+
+ * makefile.in: add docs-rule, for html/pdf/txt form of manpage
+
+ * configure: regen
+
+ * aclocal.m4: add CF_XOPEN_SOURCE, etc.
+
+ * configure.in:
+ use CF_XOPEN_SOURCE check to ensure that strdup is in scope, e.g., for c89
+
+ * test/ftp.tab.c, test/ftp.y, reader.c, symtab.c, verbose.c, lr0.c, main.c, mkpar.c, output.c, defs.h, closure.c:
+ fix warnings from clang --analyze
+
+2010-06-08 Thomas E. Dickey <tom@invisible-island.net>
+
+ * output.c: fix to build with c89, etc.
+
+ * reader.c: gcc warning
+
+ * test/ftp.tab.c, test/ftp.y, test/calc.tab.c, test/code_calc.code.c, test/code_error.code.c, test/code_error.y, test/code_calc.y, test/calc.y, test/pure_error.tab.c, test/error.tab.c, test/error.y, test/pure_error.y, test/pure_calc.tab.c, test/pure_calc.y:
+ modified test-cases to allow them to compile, to validate pure-parser changes.
+ updated reference files to match.
+
+ * output.c:
+ move call for output_stype() earlier since it is used in pure-parser declarations
+
+ * test/grammar.tab.c, test/grammar.y:
+ modified test-cases to allow them to compile, to validate pure-parser changes.
+ updated reference files to match.
+
+ * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
+ regen
+
+ * yacc.1: document %lex-param and %parse-param
+
+ * test/run_lint.sh, test/run_make.sh: RCS_BASE
+
+ * test/run_test.sh:
+ further modify to allow build-directory to be in a different location by
+ passing this directory's location as a parameter to the script.
+
+ * makefile.in:
+ add check_make and check_lint rules to help validate the generated files
+ in the test-directory
+
+2010-06-07 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/pure_calc.tab.c, test/pure_error.tab.c: RCS_BASE
+
+ * test/run_test.sh:
+ provide for testing -r and -P options by checking if the ".y" filename
+ begins with "code_" or "pure_", respectively.
+
+ * test/code_error.code.c, test/code_error.tab.c, test/code_error.tab.h, test/code_calc.code.c, test/code_calc.tab.c, test/code_calc.tab.h, test/pure_calc.output, test/pure_calc.tab.h, test/pure_error.output, test/pure_error.tab.h, test/code_calc.output, test/code_error.output:
+ RCS_BASE
+
+ * test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c: regen
+
+ * test/run_test.sh:
+ changes to support running "make check" in a separate build-tree
+
+ * main.c: add "-P" to usage message
+
+ * reader.c: use UCH() macro to hide casts.
+
+2010-06-07 Andres.Mejia
+
+ * main.c, output.c, reader.c, defs.h, skeleton.c:
+ Fix the output order of the generated parse code file. This allows for
+ the use of YYPARSE_PARAM, by having the output that checks for
+ YYPARSE_PARAM to be defined come after the C code block in the
+ definitions section of a yacc file.
+
+ Implement support for YYLEX_PARAM, similar to bison. This is useful for
+ support for building reentrant lexers with flex.
+
+ Fix a compatibility issue with bison's pure-parser option. Bison
+ defines yylex as sending at least one parameter, &yylval, as the first
+ parameter and doesn't seem to have an easy way to remove that parameter.
+ This on the other hand is rather convenient to support saving to yylval
+ from flex when building reentrant lexers and parsers.
+
+ Add support for the %parse-param and %lex-param directives used in
+ bison. This change bears some similarity to NetBSD's changes to byacc
+ at http://www.mail-archive.com/source-changes-full@netbsd.org/msg08143.html
+
+ Bison allows for POSIX yacc emulation via a yacc directive in the yacc
+ file, and also via a command line switch. Implement this feature as a
+ no-op for byacc, since byacc is designed to be POSIX yacc compatible
+ anyway. This allows for better compatibility with yacc sources written
+ for bison.
+
+2010-06-07 Thomas E. Dickey <tom@invisible-island.net>
+
+ * VERSION: bump to 2010/06/07
+
+2010-06-06 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/calc.tab.c, configure: regen
+
+ * skeleton.c:
+ move #include's down into the generated code, to allow user-defined code
+ to override feature definitions, particularly with stdlib.h (request by
+ Marcus Kool).
+
+ * lr0.c, error.c, reader.c, defs.h:
+ strict gcc 3.4.6 warnings on 64-bit platform
+
+ * aclocal.m4, configure.in: add check for lint
+
+ * makefile.in: add lint rule
+
+ * defs.h, closure.c, lr0.c, warshall.c, main.c:
+ fix gcc warnings, mostly for 64-bit platform
+
+ * aclocal.m4:
+ add macros for checking ctags/etags, e.g., to work with NetBSD pkgsrc
+
+ * makefile.in: add etags/TAGS if available
+
+ * configure.in: add configure check for actual ctags and etags programs
+
+ * package/debian/copyright: add copyright notices for non-PD files
+
+ * package/debian/changelog:
+ incorporated scripts in upstream to use for test-builds
+
+ * makefile.in: drop mkdirs.sh, just use "mkdir -p"
+
+ * AUTHORS: nicknames for some contributors (see CHANGES for details)
+
+ * package/byacc.spec: RPM file for byacc
+
+ * VERSION: bump to 2010/06/06
+
+ * aclocal.m4: add copyright notice, from "my-autoconf" macros
+ http://invisible-island.net/autoconf/autoconf.html
+
+ * package/RCS, package/debian/RCS, package/debian/source/RCS, package/pkgsrc/RCS:
+ PERMIT FILE
+
+ * aclocal.m4: resync with my-autoconf. summary of changes:
+ a) CF_ADD_CFLAGS, etc., improve quoting of ifelse() parameter
+ b) CF_DISABLE_ECHO, change indent-convention for substituted makefile
+ c) CF_GCC_VERSION, ignore stderr
+ d) CF_GCC_WARNINGS, adjust options to work with c89 wrapper of gcc
+
+2010-04-20 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/debian/changelog, package/debian/compat, package/debian/control, package/debian/copyright, package/debian/docs, package/debian/postinst, package/debian/prerm, package/debian/rules, package/debian/watch:
+ scripts from Debian package
+
+2010-02-16 Thomas E. Dickey <tom@invisible-island.net>
+
+ * yacc.1: document -P and bison-extensions
+
+ * test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/error.tab.c:
+ regen
+
+ * output.c: implement %pure-parser
+
+ * skeleton.c:
+ implement %pure-parser, like bison. To help with this, changed the stack
+ variables, putting them into a struct.
+
+ * reader.c: implement %pure-parser
+
+ * defs.h: modified skeleton to support %pure-parser feature
+
+ * main.c: add -P option to set %pure-parser
+
+ * output.c:
+ make -r and -p options work together. The -r option splits the generated
+ parser into code/table files; for this case we cannot use static data.
+ Also, we have to repeat the #define's used for prefix (-p) as well as the
+ redeclaration of yyparse(). Finally, allow any of the prefixed names to
+ be overridden, e.g., by passing a -D option to the compiler. Make that
+ a little more readable by putting a blank line before each chunk.
+
+ * defs.h: add definitions for %pure-parser
+
+ * skeleton.c:
+ put blank line before/after the redeclaration of yyparse()
+
+ * output.c: allow for other program redefining yylex()
+
+ * skeleton.c:
+ split-off xdecls[] array, to move declaration of yyparse() after #define's
+
+ * defs.h: split-out xdecls[]
+
+ * VERSION: bump
+
+ * configure: regen
+
+ * aclocal.m4: add CF_REMOVE_DEFINE, needed by CF_ADD_CFLAGS
+
+ * aclocal.m4:
+ resync with my-autoconf CF_ADD_CFLAGS and CF_DISABLE_ECHO changes.
+
+2010-02-16 Ostap.Cherkashi
+
+ * skeleton.c: fix a memory leak in the generated skeleton
+
+2010-01-01 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/debian/source/format: scripts from Debian package
+
+2009-12-31 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.guess: 2009-12-30
+
+ * config.sub: 2009-12-31
+
+2009-10-27 Thomas E. Dickey <tom@invisible-island.net>
+
+ * VERSION: 20091027
+
+ * output.c, mkpar.c, defs.h, lalr.c, closure.c, graph.c, lr0.c, verbose.c, main.c, reader.c:
+ strict compiler warnings
+
+2009-10-26 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/error.tab.c:
+ resync
+
+ * main.c, defs.h: introduce some typedefs for portability, etc.
+
+ * makefile.in:
+ don't remove "*.log" in mostlyclean rule since it interferes with regression
+ script.
+
+ * configure: regen
+
+ * aclocal.m4: resync with my-autoconf
+
+2009-08-25 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.guess, config.sub: 2009-08-19
+
+2009-02-21 Thomas E. Dickey <tom@invisible-island.net>
+
+ * VERSION: bump
+
+ * output.c: restore "yylval" symbol, omitted in cleanup on 2008/8/25
+
+2008-12-26 Thomas E. Dickey <tom@invisible-island.net>
+
+ * configure: regen with autoconf-2.52 (patched)
+
+2008-12-25 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c:
+ regenerated
+
+2008-12-24 Thomas E. Dickey <tom@invisible-island.net>
+
+ * VERSION: bump
+
+ * skeleton.c:
+ remove ifdef-lint from goto yyerrlab, to quiet gcc warning
+
+2008-11-26 Thomas E. Dickey <tom@invisible-island.net>
+
+ * verbose.c, main.c, defs.h, mkpar.c, reader.c:
+ completed implementation of "%expect" (report by Perry E. Metzger).
+ add "%expect-rr", which is (unlike bison) allowable in LALR parsers.
+
+2008-11-24 Thomas E. Dickey <tom@invisible-island.net>
+
+ * closure.c, defs.h, error.c, graph.c, lalr.c, lr0.c, main.c, mkpar.c, output.c, reader.c, skeleton.c, symtab.c, verbose.c, warshall.c:
+ change indent-style (request by Perry E. Metzger)
+
+2008-08-27 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
+ better implementation of YYPARSE_PARAM, using YYPARSE_DECL() macro
+
+ * VERSION: bump
+
+ * skeleton.c:
+ better implementation of YYPARSE_PARAM, using YYPARSE_DECL() macro
+
+ * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, skeleton.c:
+ change YYRECOVERING to YYRECOVERING(), for compatibility with other yacc's.
+
+ * configure: regen'd
+
+ * configure.in: add -Wwrite-strings to warnings
+
+ * test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/error.tab.c:
+ add YYPARSE_PARAM and YYPARSE_PARAM_TYPE
+
+ * skeleton.c:
+ add YYPARSE_PARAM (bison) and YYPARSE_PARAM_TYPE (FreeBSD) features.
+
+ * main.c, defs.h, output.c, skeleton.c, symtab.c, error.c, reader.c:
+ fixes for gcc -Wwrite-strings
+
+ * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
+ generate the tables as static-const (this is an interface change)
+
+ * output.c: realign columns in start_table()
+
+ * output.c:
+ generate the tables as static-const (this is an interface change)
+
+ * output.c: reorder functions to eliminate forward-references
+
+ * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
+ remove 'register' keywords
+
+2008-08-26 Thomas E. Dickey <tom@invisible-island.net>
+
+ * warshall.c, verbose.c, symtab.c, skeleton.c, reader.c, output.c, mkpar.c, main.c, lr0.c, lalr.c, graph.c, error.c, closure.c:
+ remove 'register' keywords
+
+2008-08-25 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/ftp.tab.c: regen'd
+
+ * reader.c:
+ improve the left-curly fix by testing after blanks, to avoid having a
+ " {" at the beginning of a line.
+
+ * test/error.tab.c, test/grammar.tab.c: regen'd
+
+ * output.c:
+ move the remaining newline-counting into write_XXX functions.
+
+ * test/calc.tab.c: regen'd
+
+ * output.c:
+ simplify part of the output_file formatting using new functions, e.g.,
+ start_int_table(), output_newline().
+
+ * reader.c:
+ modify copy_action() to indent the first character, it if is is left-curly
+ brace. That makes the output look more like the original, as well as makes
+ it simpler to edit (not confuse editors which look for a left-curly in the
+ first column as if it were the beginning of a function).
+
+ * skeleton.c: minor fixes to avoid gcc -Wconversion warnings
+
+ * output.c: align the #define's produced for "-p" option
+
+ * test/run_test.sh: use the "-p" option for better coverage.
+
+ * output.c: simplify output_prefix() with new define_prefixed()
+
+ * skeleton.c: include string.h, for memset()
+ change stack size to unsigned to fix gcc -Wconversion warnings.
+
+ * VERSION: bump to 2008/8/25
+
+ * makefile.in: add dependency on VERSION file.
+
+2008-08-24 Thomas E. Dickey <tom@invisible-island.net>
+
+ * VERSION: bump
+
+ * lalr.c: improved memory-leak checking by freeing data in includes[]
+
+ * test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c:
+ update to match skeleton-change
+
+ * configure: regen'd
+
+ * skeleton.c: Add fix for stack discussed
+ http://undeadly.org/cgi?action=article&sid=20080708155228
+ and applied
+ http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/yacc/skeleton.c.diff?r1=1.28&r2=1.29
+
+ * aclocal.m4: resync with my-autoconf (no major changes)
+
+2008-07-24 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/pkgsrc/Makefile, package/pkgsrc/distinfo:
+ scripts from NetBSD pkgsrc, for test-builds
+
+2008-03-14 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.sub: update to 2008-03-08
+
+ * config.guess: update to 2008-03-12
+
+2007-05-09 Thomas E. Dickey <tom@invisible-island.net>
+
+ * main.c: close graph, verbose files if opened, on exit.
+
+ * main.c:
+ audit memory leaks - valgrind reported some memory still in use on exit.
+
+ * lalr.c, output.c, reader.c, mkpar.c, lr0.c:
+ add hook for auditing memory leaks
+
+ * defs.h: add hooks for auditing memory leaks
+
+ * configure: regen'd
+
+ * configure.in:
+ use CF_DISABLE_LEAKS, which combines --disable-leaks, --with-valgrind,
+ --with-dbmalloc and --with-dmalloc
+
+ * aclocal.m4: add CF_DISABLE_LEAKS and CF_WITH_VALGRIND
+
+ * aclocal.m4: improve version-checking in CF_GCC_VERSION
+ rework dbmalloc/dmalloc options using CF_NO_LEAKS_OPTION macro
+
+ * VERSION: 2007/5/9
+
+ * main.c: file_prefix did not always have a trailing null.
+
+2007-03-25 Thomas E. Dickey <tom@invisible-island.net>
+
+ * mkdirs.sh: improved version for "make -j"
+
+2006-12-22 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.guess: 2006/12/22
+
+2006-12-08 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.sub: 2006/12/08
+
+2005-08-13 Thomas E. Dickey <tom@invisible-island.net>
+
+ * main.c: add -V to usage message
+
+ * makefile.in: remove -t option from ctags
+
+ * VERSION: 2005/8/13
+
+2005-08-13 schmitz
+
+ * main.c: Sylvain Schmitz:
+ modify the '-o' option to work like bison's, which sets the file-prefix.
+
+2005-08-13 Matt.Kraai
+
+ * output.c:
+ Debian #322858 (don't close union_file, which contained data).
+ This feature is used in groff.
+
+2005-08-13 Thomas E. Dickey <tom@invisible-island.net>
+
+ * configure: regenerated
+
+ * aclocal.m4: improve checks for Intel compiler warnings
+
+2005-06-25 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.sub: 2005/6/2
+
+ * config.guess: 2005/5/27
+
+2005-05-05 Thomas E. Dickey <tom@invisible-island.net>
+
+ * defs.h: add a fallback for GCC_UNUSED
+
+2005-05-04 Thomas E. Dickey <tom@invisible-island.net>
+
+ * makefile.in: add "." to include-path to pickup config.h
+
+ * reader.c:
+ apply fix suggested by Steve Dum for end_rule() in Redhat Bugzilla #112617.
+
+ * output.c:
+ correct a limit check in pack_vector() - report/analysis by William Evans
+
+ * main.c:
+ exit after printing version. Otherwise "yacc -V" will exit with an erro
+ after printing the usage message.
+
+ * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
+ regenerated after skeleton-changes
+
+ * skeleton.c: replace a few -1's with YYEMPTY
+
+ * skeleton.c:
+ delete yynewerror (no one uses it any more, and it just makes compiler warnings)
+
+ * skeleton.c: adapt yygrowstack() and related definitions from FreeBSD
+
+ * test/run_test.sh:
+ filter out lines with YYPATCH, since that will change with each update
+
+ * yacc.1: add -V option
+
+ * main.c: add -V option to print the version.
+ simplify option-parsing by moving the duplicate logic for setting flags into
+ new function setflag().
+
+ * skeleton.c:
+ move the actual definition of YYMAJOR and YYMINOR to defs.h (as numbers).
+ add YYPATCH here so it can be tested by applications.
+
+ * defs.h:
+ add macros to define VERSION in terms of the (numeric) YYMAJOR, YYMINOR and
+ YYPATCH symbols.
+
+ * lalr.c, lr0.c, mkpar.c, defs.h, closure.c, warshall.c, output.c, verbose.c, graph.c, reader.c, main.c, symtab.c:
+ reduce externs by making static the procedures that are not referenced outside
+ the module in which they are defined.
+
+ * makefile.in:
+ the VERSION file holds the patch-date. Define YYPATCH, so this will be
+ compiled into the skeleton.
+
+ * VERSION: patch-level for byacc
+
+ * main.c:
+ add "-o" to usage message. It is too long for a single line; rewrite usage()
+ to show one option per line.
+
+2005-05-03 Thomas E. Dickey <tom@invisible-island.net>
+
+ * main.c: add -o option, to work with scripts that assume bison.
+ simplify create_file_names() with a macro.
+ simplify done() with a macro.
+ adapt fix from FreeBSD for signal race, e.g., if done() is interrupted by
+ onintr(), do not flush output via exit(), but use _exit() instead.
+
+ * defs.h: remove unnecessary externs for main.c
+
+ * yacc.1: add -o option
+
+ * graph.c: remove unused parameter
+
+ * mkpar.c, defs.h, reader.c:
+ add support for "%expect", a bison feature from FreeBSD sources
+
+ * lr0.c, reader.c, main.c, skeleton.c, graph.c, symtab.c, closure.c, mkpar.c, lalr.c, error.c, warshall.c, verbose.c, output.c:
+ indent'd
+
+ * configure: regenerated for 2005/5/5
+
+ * aclocal.m4: miscellaneous updates (adds CF_INTEL_COMPILER)
+
+2005-04-27 schmitz
+
+ * defs.h, graph.c, lr0.c, main.c, makefile.in, reader.c, yacc.1:
+ Sylvain Schmitz <schmitz@i3s.unice.fr>:
+ add graphical output of the LALR(1) automaton for graphviz,
+ associated with command-line option `-g'
+
+2005-04-16 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.sub: 2005/2/10
+
+ * config.guess: 2005/3/24
+
+2005-04-13 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/pkgsrc/PLIST: scripts from NetBSD pkgsrc, for test-builds
+
+2005-03-21 Thomas E. Dickey <tom@invisible-island.net>
+
+ * package/pkgsrc/DESCR: scripts from NetBSD pkgsrc, for test-builds
+
+2004-03-28 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c:
+ updates due to adding yyparse() prototype
+
+ * configure: RCS_BASE
+
+ * configure.in:
+ add AC_ARG_PROGRAM to make --program-prefix, etc., work.
+
+ * makefile.in: first cut of script to support --program-prefix
+
+ * configure.in:
+ reorder AC_INIT/AC_CONFIG_HEADER to make this "work" with autoconf 2.52
+
+ * makefile.in: modify so DESTDIR works
+
+ * makefile.in: use EXEEXT and OBJEXT
+
+ * configure.in: use CF_PROG_EXT
+ generate a config.h
+
+ * defs.h: make this use the generated config.h
+
+ * skeleton.c: add a forward-reference for yyparse()
+
+ * aclocal.m4: add CF_CHECK_CACHE, needed for CF_PROG_EXT
+
+ * yacc.1: remove the discussion of TMPDIR since it is obsolete
+
+ * skeleton.c: fix a couple of minor compiler-warnings in the skeleton
+
+ * defs.h: remove action_file_name, etc., since we use tmpfile() now.
+
+ * main.c:
+ use tmpfile() for opening the working files. This quiets a warning
+ advising the use of mkstemp().
+
+ * output.c:
+ Do not close temporary-files here, since they are opened with tmpfile().
+ Just rewind them, and they're ready to read back the data stored in them.
+
+ * test/grammar.output, test/grammar.tab.c, test/grammar.tab.h: RCS_BASE
+
+ * makefile.in: turn on "make check" rule
+
+ * test/calc.output, test/run_test.sh, test/calc.tab.h: RCS_BASE
+
+ * test/ftp.tab.c: yyparse() is now yyparse(void)
+
+ * test/calc.tab.c: RCS_BASE
+
+ * test/error.tab.c: yyparse() is now yyparse(void)
+
+ * test/README: RCS_BASE
+
+ * yacc.1: various typography fixes prompted by Debian #100947
+
+ * aclocal.m4, makefile.in, configure.in: RCS_BASE
+
+ * README: updated to note that this is not the original
+
+2004-03-24 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/grammar.y: RCS_BASE
+
+2004-02-23 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.sub: RCS_BASE
+
+2004-02-17 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config.guess: RCS_BASE
+
+2003-11-29 Thomas E. Dickey <tom@invisible-island.net>
+
+ * install-sh: improved quoting
+
+2002-06-29 Thomas E. Dickey <tom@invisible-island.net>
+
+ * mkdirs.sh:
+ don't use character range, since some locales don't work as expected
+
+2001-06-22 Thomas E. Dickey <tom@invisible-island.net>
+
+ * install-sh: RCS_BASE
+
+2000-11-20 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/calc.y: RCS_BASE
+
+ * test/code_calc.y, test/pure_calc.y: copy of calc.y
+
+ * vmsbuild.com: original version
+
+2000-02-23 Thomas E. Dickey <dickey@invisible-island.net>
+
+ * test/RCS, RCS: PERMIT FILE
+
+2000-02-14 Thomas E. Dickey <tom@invisible-island.net>
+
+ * main.c: fix for VMS port - making pathname for temp-file
+
+ * descrip.mms: original version
+
+2000-02-13 Thomas E. Dickey <tom@invisible-island.net>
+
+ * defs.h, verbose.c, reader.c, main.c, skeleton.c, warshall.c, symtab.c, closure.c, mkpar.c, lalr.c, lr0.c, output.c, error.c:
+ ansify
+
+1999-11-30 Thomas E. Dickey <tom@invisible-island.net>
+
+ * mkdirs.sh: RCS_BASE
+
+1995-01-01 Thomas E. Dickey <tom@invisible-island.net>
+
+ * config_h.in: RCS_BASE
+
+1993-12-23 unknown
+
+ * README.DOS, main.c: MSDOS-port
+
+1993-12-22 unknown
+
+ * reader.c, defs.h: MSDOS-port
+
+1993-03-02 unknown
+
+ * README: original version
+
+1993-02-22 unknown
+
+ * test/ftp.output, test/ftp.tab.c, test/ftp.tab.h, test/error.output, test/error.tab.c, test/error.tab.h:
+ RCS_BASE
+
+ * skeleton.c, warshall.c, main.c, output.c, reader.c, closure.c, NOTES:
+ original version
+
+1992-10-12 unknown
+
+ * yacc.1: original version
+
+1992-10-11 unknown
+
+ * defs.h: original version
+
+1991-01-20 unknown
+
+ * mkpar.c, verbose.c: original version
+
+1991-01-14 unknown
+
+ * lr0.c, Makefile, Makefile.old: original version
+
+1990-07-16 unknown
+
+ * NEW_FEATURES: original version
+
+1990-06-03 unknown
+
+ * ACKNOWLEDGEMENTS: original version
+
+1990-02-05 unknown
+
+ * symtab.c, lalr.c, error.c: original version
+
+1990-01-16 Thomas E. Dickey <tom@invisible-island.net>
+
+ * test/code_error.y, test/pure_error.y: RCS_BASE
+
+1990-01-16 unknown
+
+ * test/error.y: RCS_BASE
+
+1989-11-22 unknown
+
+ * NO_WARRANTY: original version
+
+1989-09-23 unknown
+
+ * test/ftp.y: RCS_BASE
+
diff --git a/contrib/byacc/Makefile.old b/contrib/byacc/Makefile.old
new file mode 100644
index 000000000000..4bab4c9bf027
--- /dev/null
+++ b/contrib/byacc/Makefile.old
@@ -0,0 +1,84 @@
+DEST = .
+
+HDRS = defs.h
+
+CFLAGS = -O -DNDEBUG
+
+LDFLAGS =
+
+LIBS =
+
+LINKER = cc
+
+MAKEFILE = Makefile
+
+OBJS = closure.o \
+ error.o \
+ lalr.o \
+ lr0.o \
+ main.o \
+ mkpar.o \
+ output.o \
+ reader.o \
+ skeleton.o \
+ symtab.o \
+ verbose.o \
+ warshall.o
+
+PRINT = pr -f -l88
+
+PROGRAM = yacc
+
+SRCS = closure.c \
+ error.c \
+ lalr.c \
+ lr0.c \
+ main.c \
+ mkpar.c \
+ output.c \
+ reader.c \
+ skeleton.c \
+ symtab.c \
+ verbose.c \
+ warshall.c
+
+all: $(PROGRAM)
+
+$(PROGRAM): $(OBJS) $(LIBS)
+ @echo -n "Loading $(PROGRAM) ... "
+ @$(LINKER) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LIBS)
+ @echo "done"
+
+clean:; @rm -f $(OBJS)
+
+clobber:; @rm -f $(OBJS) $(PROGRAM)
+
+depend:; @mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
+
+index:; @ctags -wx $(HDRS) $(SRCS)
+
+install: $(PROGRAM)
+ @echo Installing $(PROGRAM) in $(DEST)
+ @install -s $(PROGRAM) $(DEST)
+
+listing:; @$(PRINT) Makefile $(HDRS) $(SRCS) | lpr
+
+lint:; @lint $(SRCS)
+
+program: $(PROGRAM)
+
+tags: $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS)
+
+###
+closure.o: defs.h
+error.o: defs.h
+lalr.o: defs.h
+lr0.o: defs.h
+main.o: defs.h
+mkpar.o: defs.h
+output.o: defs.h
+reader.o: defs.h
+skeleton.o: defs.h
+symtab.o: defs.h
+verbose.o: defs.h
+warshall.o: defs.h
diff --git a/usr.bin/yacc/NEW_FEATURES b/contrib/byacc/NEW_FEATURES
index baab2ee9ba28..b030c625b000 100644
--- a/usr.bin/yacc/NEW_FEATURES
+++ b/contrib/byacc/NEW_FEATURES
@@ -1,5 +1,3 @@
-$FreeBSD$
-
The -r option has been implemented. The -r option tells Yacc to
put the read-only tables in y.tab.c and the code and variables in
y.code.c. Keith Bostic asked for this option so that :yyfix could be
@@ -37,7 +35,7 @@ is
%ident string
-where string is a sequence of characters beginning with a double quote
+where string is a sequence of characters begining with a double quote
and ending with either a double quote or the next end-of-line, whichever
comes first. The declaration will cause a #ident directive to be written
near the start of the output file.
diff --git a/usr.bin/yacc/NOTES b/contrib/byacc/NOTES
index 9db3c96ce1b8..9db3c96ce1b8 100644
--- a/usr.bin/yacc/NOTES
+++ b/contrib/byacc/NOTES
diff --git a/contrib/byacc/NO_WARRANTY b/contrib/byacc/NO_WARRANTY
new file mode 100644
index 000000000000..06e8d93a2c58
--- /dev/null
+++ b/contrib/byacc/NO_WARRANTY
@@ -0,0 +1,3 @@
+ Berkeley Yacc is distributed with no warranty whatever. The author
+and any other contributors take no responsibility for the consequences of
+its use.
diff --git a/usr.bin/yacc/README b/contrib/byacc/README
index 091f23343617..391c43bd70ae 100644
--- a/usr.bin/yacc/README
+++ b/contrib/byacc/README
@@ -1,3 +1,9 @@
+-- $Id: README,v 1.2 2004/03/28 17:24:53 tom Exp $
+
+The original README is below. I've updated this version of Berkeley Yacc
+to make it ANSI C compliant - Thomas Dickey
+
+-------------------------------------------------------------------------------
Berkeley Yacc is an LALR(1) parser generator. Berkeley Yacc has been made
as compatible as possible with AT&T Yacc. Berkeley Yacc can accept any input
specification that conforms to the AT&T Yacc documentation. Specifications
diff --git a/contrib/byacc/VERSION b/contrib/byacc/VERSION
new file mode 100644
index 000000000000..b15d73f3090c
--- /dev/null
+++ b/contrib/byacc/VERSION
@@ -0,0 +1 @@
+20120115
diff --git a/contrib/byacc/aclocal.m4 b/contrib/byacc/aclocal.m4
new file mode 100644
index 000000000000..c70dd4b4514d
--- /dev/null
+++ b/contrib/byacc/aclocal.m4
@@ -0,0 +1,1144 @@
+dnl $Id: aclocal.m4,v 1.19 2012/01/13 14:10:56 tom Exp $
+dnl Macros for byacc configure script (Thomas E. Dickey)
+dnl ---------------------------------------------------------------------------
+dnl Copyright 2004-2011,2012 Thomas E. Dickey
+dnl
+dnl Permission is hereby granted, free of charge, to any person obtaining a
+dnl copy of this software and associated documentation files (the
+dnl "Software"), to deal in the Software without restriction, including
+dnl without limitation the rights to use, copy, modify, merge, publish,
+dnl distribute, distribute with modifications, sublicense, and/or sell
+dnl copies of the Software, and to permit persons to whom the Software is
+dnl furnished to do so, subject to the following conditions:
+dnl
+dnl The above copyright notice and this permission notice shall be included
+dnl in all copies or portions of the Software.
+dnl
+dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+dnl
+dnl Except as contained in this notice, the name(s) of the above copyright
+dnl holders shall not be used in advertising or otherwise to promote the
+dnl sale, use or other dealings in this Software without prior written
+dnl authorization.
+dnl ---------------------------------------------------------------------------
+dnl ---------------------------------------------------------------------------
+dnl CF_ADD_CFLAGS version: 10 updated: 2010/05/26 05:38:42
+dnl -------------
+dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS
+dnl The second parameter if given makes this macro verbose.
+dnl
+dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS,
+dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily
+dnl confused by the quotes (which require backslashes to keep them usable).
+AC_DEFUN([CF_ADD_CFLAGS],
+[
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $1
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+ CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,$cf_tst_cppflags)
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+ ifelse([$2],,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)])
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+ ifelse([$2],,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)])
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+ ifelse([$2],,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)])
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+AC_SUBST(EXTRA_CPPFLAGS)
+
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_ANSI_CC_CHECK version: 11 updated: 2011/07/01 19:47:45
+dnl ----------------
+dnl This was originally adapted from the macros 'fp_PROG_CC_STDC' and
+dnl 'fp_C_PROTOTYPES' in the sharutils 4.2 distribution.
+AC_DEFUN([CF_ANSI_CC_CHECK],
+[
+# This should have been defined by AC_PROG_CC
+: ${CC:=cc}
+
+# Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content
+# into CC. This will not help with broken scripts that wrap the compiler with
+# options, but eliminates a more common category of user confusion.
+AC_MSG_CHECKING(\$CC variable)
+case "$CC" in #(vi
+*[[\ \ ]]-[[IUD]]*)
+ AC_MSG_RESULT(broken)
+ AC_MSG_WARN(your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options)
+ # humor him...
+ cf_flags=`echo "$CC" | sed -e 's/^[[^ ]]*[[ ]]//'`
+ CC=`echo "$CC" | sed -e 's/[[ ]].*//'`
+ CF_ADD_CFLAGS($cf_flags)
+ ;;
+*)
+ AC_MSG_RESULT(ok)
+ ;;
+esac
+
+AC_CACHE_CHECK(for ${CC:-cc} option to accept ANSI C, cf_cv_ansi_cc,[
+cf_cv_ansi_cc=no
+cf_save_CFLAGS="$CFLAGS"
+cf_save_CPPFLAGS="$CPPFLAGS"
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX -Aa -D_HPUX_SOURCE
+# SVR4 -Xc
+# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes)
+for cf_arg in "-DCC_HAS_PROTOS" \
+ "" \
+ -qlanglvl=ansi \
+ -std1 \
+ -Ae \
+ "-Aa -D_HPUX_SOURCE" \
+ -Xc
+do
+ CF_ADD_CFLAGS($cf_arg)
+ AC_TRY_COMPILE(
+[
+#ifndef CC_HAS_PROTOS
+#if !defined(__STDC__) || (__STDC__ != 1)
+choke me
+#endif
+#endif
+],[
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};],
+ [cf_cv_ansi_cc="$cf_arg"; break])
+done
+CFLAGS="$cf_save_CFLAGS"
+CPPFLAGS="$cf_save_CPPFLAGS"
+])
+
+if test "$cf_cv_ansi_cc" != "no"; then
+if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
+ CF_ADD_CFLAGS($cf_cv_ansi_cc)
+else
+ AC_DEFINE(CC_HAS_PROTOS)
+fi
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_ANSI_CC_REQD version: 4 updated: 2008/03/23 14:48:54
+dnl ---------------
+dnl For programs that must use an ANSI compiler, obtain compiler options that
+dnl will make it recognize prototypes. We'll do preprocessor checks in other
+dnl macros, since tools such as unproto can fake prototypes, but only part of
+dnl the preprocessor.
+AC_DEFUN([CF_ANSI_CC_REQD],
+[AC_REQUIRE([CF_ANSI_CC_CHECK])
+if test "$cf_cv_ansi_cc" = "no"; then
+ AC_MSG_ERROR(
+[Your compiler does not appear to recognize prototypes.
+You have the following choices:
+ a. adjust your compiler options
+ b. get an up-to-date compiler
+ c. use a wrapper such as unproto])
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31
+dnl --------------
+dnl Allow user to disable a normally-on option.
+AC_DEFUN([CF_ARG_DISABLE],
+[CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_ARG_OPTION version: 4 updated: 2010/05/26 05:38:42
+dnl -------------
+dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus
+dnl values.
+dnl
+dnl Parameters:
+dnl $1 = option name
+dnl $2 = help-string
+dnl $3 = action to perform if option is not default
+dnl $4 = action if perform if option is default
+dnl $5 = default option value (either 'yes' or 'no')
+AC_DEFUN([CF_ARG_OPTION],
+[AC_ARG_ENABLE([$1],[$2],[test "$enableval" != ifelse([$5],no,yes,no) && enableval=ifelse([$5],no,no,yes)
+ if test "$enableval" != "$5" ; then
+ifelse([$3],,[ :]dnl
+,[ $3]) ifelse([$4],,,[
+ else
+ $4])
+ fi],[enableval=$5 ifelse([$4],,,[
+ $4
+])dnl
+ ])])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_CHECK_CACHE version: 11 updated: 2008/03/23 14:45:59
+dnl --------------
+dnl Check if we're accidentally using a cache from a different machine.
+dnl Derive the system name, as a check for reusing the autoconf cache.
+dnl
+dnl If we've packaged config.guess and config.sub, run that (since it does a
+dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow
+dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM
+dnl which is useful in cross-compiles.
+dnl
+dnl Note: we would use $ac_config_sub, but that is one of the places where
+dnl autoconf 2.5x broke compatibility with autoconf 2.13
+AC_DEFUN([CF_CHECK_CACHE],
+[
+if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then
+ ifelse([$1],,[AC_CANONICAL_HOST],[$1])
+ system_name="$host_os"
+else
+ system_name="`(uname -s -r) 2>/dev/null`"
+ if test -z "$system_name" ; then
+ system_name="`(hostname) 2>/dev/null`"
+ fi
+fi
+test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name")
+AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"])
+
+test -z "$system_name" && system_name="$cf_cv_system_name"
+test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name)
+
+if test ".$system_name" != ".$cf_cv_system_name" ; then
+ AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name))
+ AC_MSG_ERROR("Please remove config.cache and try again.")
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_DISABLE_ECHO version: 11 updated: 2009/12/13 13:16:57
+dnl ---------------
+dnl You can always use "make -n" to see the actual options, but it's hard to
+dnl pick out/analyze warning messages when the compile-line is long.
+dnl
+dnl Sets:
+dnl ECHO_LT - symbol to control if libtool is verbose
+dnl ECHO_LD - symbol to prefix "cc -o" lines
+dnl RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o)
+dnl SHOW_CC - symbol to put before explicit "cc -c" lines
+dnl ECHO_CC - symbol to put before any "cc" line
+dnl
+AC_DEFUN([CF_DISABLE_ECHO],[
+AC_MSG_CHECKING(if you want to see long compiling messages)
+CF_ARG_DISABLE(echo,
+ [ --disable-echo display "compiling" commands],
+ [
+ ECHO_LT='--silent'
+ ECHO_LD='@echo linking [$]@;'
+ RULE_CC='@echo compiling [$]<'
+ SHOW_CC='@echo compiling [$]@'
+ ECHO_CC='@'
+],[
+ ECHO_LT=''
+ ECHO_LD=''
+ RULE_CC=''
+ SHOW_CC=''
+ ECHO_CC=''
+])
+AC_MSG_RESULT($enableval)
+AC_SUBST(ECHO_LT)
+AC_SUBST(ECHO_LD)
+AC_SUBST(RULE_CC)
+AC_SUBST(SHOW_CC)
+AC_SUBST(ECHO_CC)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_DISABLE_LEAKS version: 6 updated: 2010/07/23 04:14:32
+dnl ----------------
+dnl Combine no-leak checks with the libraries or tools that are used for the
+dnl checks.
+AC_DEFUN([CF_DISABLE_LEAKS],[
+
+AC_REQUIRE([CF_WITH_DMALLOC])
+AC_REQUIRE([CF_WITH_DBMALLOC])
+AC_REQUIRE([CF_WITH_VALGRIND])
+
+AC_MSG_CHECKING(if you want to perform memory-leak testing)
+AC_ARG_ENABLE(leaks,
+ [ --disable-leaks test: free permanent memory, analyze leaks],
+ [if test "x$enableval" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi],
+ : ${with_no_leaks:=no})
+AC_MSG_RESULT($with_no_leaks)
+
+if test "$with_no_leaks" = yes ; then
+ AC_DEFINE(NO_LEAKS)
+ AC_DEFINE(YY_NO_LEAKS)
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_GCC_ATTRIBUTES version: 14 updated: 2010/10/23 15:52:32
+dnl -----------------
+dnl Test for availability of useful gcc __attribute__ directives to quiet
+dnl compiler warnings. Though useful, not all are supported -- and contrary
+dnl to documentation, unrecognized directives cause older compilers to barf.
+AC_DEFUN([CF_GCC_ATTRIBUTES],
+[
+if test "$GCC" = yes
+then
+cat > conftest.i <<EOF
+#ifndef GCC_PRINTF
+#define GCC_PRINTF 0
+#endif
+#ifndef GCC_SCANF
+#define GCC_SCANF 0
+#endif
+#ifndef GCC_NORETURN
+#define GCC_NORETURN /* nothing */
+#endif
+#ifndef GCC_UNUSED
+#define GCC_UNUSED /* nothing */
+#endif
+EOF
+if test "$GCC" = yes
+then
+ AC_CHECKING([for $CC __attribute__ directives])
+cat > conftest.$ac_ext <<EOF
+#line __oline__ "${as_me:-configure}"
+#include "confdefs.h"
+#include "conftest.h"
+#include "conftest.i"
+#if GCC_PRINTF
+#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
+#else
+#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
+#endif
+#if GCC_SCANF
+#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
+#else
+#define GCC_SCANFLIKE(fmt,var) /*nothing*/
+#endif
+extern void wow(char *,...) GCC_SCANFLIKE(1,2);
+extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
+extern void foo(void) GCC_NORETURN;
+int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { return 0; }
+EOF
+ cf_printf_attribute=no
+ cf_scanf_attribute=no
+ for cf_attribute in scanf printf unused noreturn
+ do
+ CF_UPPER(cf_ATTRIBUTE,$cf_attribute)
+ cf_directive="__attribute__(($cf_attribute))"
+ echo "checking for $CC $cf_directive" 1>&AC_FD_CC
+
+ case $cf_attribute in #(vi
+ printf) #(vi
+ cf_printf_attribute=yes
+ cat >conftest.h <<EOF
+#define GCC_$cf_ATTRIBUTE 1
+EOF
+ ;;
+ scanf) #(vi
+ cf_scanf_attribute=yes
+ cat >conftest.h <<EOF
+#define GCC_$cf_ATTRIBUTE 1
+EOF
+ ;;
+ *) #(vi
+ cat >conftest.h <<EOF
+#define GCC_$cf_ATTRIBUTE $cf_directive
+EOF
+ ;;
+ esac
+
+ if AC_TRY_EVAL(ac_compile); then
+ test -n "$verbose" && AC_MSG_RESULT(... $cf_attribute)
+ cat conftest.h >>confdefs.h
+ case $cf_attribute in #(vi
+ printf) #(vi
+ if test "$cf_printf_attribute" = no ; then
+ cat >>confdefs.h <<EOF
+#define GCC_PRINTFLIKE(fmt,var) /* nothing */
+EOF
+ else
+ cat >>confdefs.h <<EOF
+#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
+EOF
+ fi
+ ;;
+ scanf) #(vi
+ if test "$cf_scanf_attribute" = no ; then
+ cat >>confdefs.h <<EOF
+#define GCC_SCANFLIKE(fmt,var) /* nothing */
+EOF
+ else
+ cat >>confdefs.h <<EOF
+#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
+EOF
+ fi
+ ;;
+ esac
+ fi
+ done
+else
+ fgrep define conftest.i >>confdefs.h
+fi
+rm -rf conftest*
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_GCC_VERSION version: 5 updated: 2010/04/24 11:02:31
+dnl --------------
+dnl Find version of gcc
+AC_DEFUN([CF_GCC_VERSION],[
+AC_REQUIRE([AC_PROG_CC])
+GCC_VERSION=none
+if test "$GCC" = yes ; then
+ AC_MSG_CHECKING(version of $CC)
+ GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`"
+ test -z "$GCC_VERSION" && GCC_VERSION=unknown
+ AC_MSG_RESULT($GCC_VERSION)
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_GCC_WARNINGS version: 27 updated: 2010/10/23 15:52:32
+dnl ---------------
+dnl Check if the compiler supports useful warning options. There's a few that
+dnl we don't use, simply because they're too noisy:
+dnl
+dnl -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x)
+dnl -Wredundant-decls (system headers make this too noisy)
+dnl -Wtraditional (combines too many unrelated messages, only a few useful)
+dnl -Wwrite-strings (too noisy, but should review occasionally). This
+dnl is enabled for ncurses using "--enable-const".
+dnl -pedantic
+dnl
+dnl Parameter:
+dnl $1 is an optional list of gcc warning flags that a particular
+dnl application might want to use, e.g., "no-unused" for
+dnl -Wno-unused
+dnl Special:
+dnl If $with_ext_const is "yes", add a check for -Wwrite-strings
+dnl
+AC_DEFUN([CF_GCC_WARNINGS],
+[
+AC_REQUIRE([CF_GCC_VERSION])
+CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS)
+
+cat > conftest.$ac_ext <<EOF
+#line __oline__ "${as_me:-configure}"
+int main(int argc, char *argv[[]]) { return (argv[[argc-1]] == 0) ; }
+EOF
+
+if test "$INTEL_COMPILER" = yes
+then
+# The "-wdXXX" options suppress warnings:
+# remark #1419: external declaration in primary source file
+# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
+# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
+# remark #193: zero used for undefined preprocessing identifier
+# remark #593: variable "curs_sb_left_arrow" was set but never used
+# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
+# remark #869: parameter "tw" was never referenced
+# remark #981: operands are evaluated in unspecified order
+# warning #279: controlling expression is constant
+
+ AC_CHECKING([for $CC warning options])
+ cf_save_CFLAGS="$CFLAGS"
+ EXTRA_CFLAGS="-Wall"
+ for cf_opt in \
+ wd1419 \
+ wd1683 \
+ wd1684 \
+ wd193 \
+ wd593 \
+ wd279 \
+ wd810 \
+ wd869 \
+ wd981
+ do
+ CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+ if AC_TRY_EVAL(ac_compile); then
+ test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
+ fi
+ done
+ CFLAGS="$cf_save_CFLAGS"
+
+elif test "$GCC" = yes
+then
+ AC_CHECKING([for $CC warning options])
+ cf_save_CFLAGS="$CFLAGS"
+ EXTRA_CFLAGS=
+ cf_warn_CONST=""
+ test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings"
+ for cf_opt in W Wall \
+ Wbad-function-cast \
+ Wcast-align \
+ Wcast-qual \
+ Winline \
+ Wmissing-declarations \
+ Wmissing-prototypes \
+ Wnested-externs \
+ Wpointer-arith \
+ Wshadow \
+ Wstrict-prototypes \
+ Wundef $cf_warn_CONST $1
+ do
+ CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+ if AC_TRY_EVAL(ac_compile); then
+ test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
+ case $cf_opt in #(vi
+ Wcast-qual) #(vi
+ CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES"
+ ;;
+ Winline) #(vi
+ case $GCC_VERSION in
+ [[34]].*)
+ CF_VERBOSE(feature is broken in gcc $GCC_VERSION)
+ continue;;
+ esac
+ ;;
+ esac
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
+ fi
+ done
+ CFLAGS="$cf_save_CFLAGS"
+fi
+rm -rf conftest*
+
+AC_SUBST(EXTRA_CFLAGS)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_GNU_SOURCE version: 6 updated: 2005/07/09 13:23:07
+dnl -------------
+dnl Check if we must define _GNU_SOURCE to get a reasonable value for
+dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect
+dnl (or misfeature) of glibc2, which breaks portability of many applications,
+dnl since it is interwoven with GNU extensions.
+dnl
+dnl Well, yes we could work around it...
+AC_DEFUN([CF_GNU_SOURCE],
+[
+AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[
+AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifndef _XOPEN_SOURCE
+make an error
+#endif],
+ [cf_cv_gnu_source=no],
+ [cf_save="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+ AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifdef _XOPEN_SOURCE
+make an error
+#endif],
+ [cf_cv_gnu_source=no],
+ [cf_cv_gnu_source=yes])
+ CPPFLAGS="$cf_save"
+ ])
+])
+test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_INTEL_COMPILER version: 4 updated: 2010/05/26 05:38:42
+dnl -----------------
+dnl Check if the given compiler is really the Intel compiler for Linux. It
+dnl tries to imitate gcc, but does not return an error when it finds a mismatch
+dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK.
+dnl
+dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to
+dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from
+dnl the wrappers for gcc and g++ warnings.
+dnl
+dnl $1 = GCC (default) or GXX
+dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS
+dnl $3 = CFLAGS (default) or CXXFLAGS
+AC_DEFUN([CF_INTEL_COMPILER],[
+ifelse([$2],,INTEL_COMPILER,[$2])=no
+
+if test "$ifelse([$1],,[$1],GCC)" = yes ; then
+ case $host_os in
+ linux*|gnu*)
+ AC_MSG_CHECKING(if this is really Intel ifelse([$1],GXX,C++,C) compiler)
+ cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])"
+ ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -no-gcc"
+ AC_TRY_COMPILE([],[
+#ifdef __INTEL_COMPILER
+#else
+make an error
+#endif
+],[ifelse([$2],,INTEL_COMPILER,[$2])=yes
+cf_save_CFLAGS="$cf_save_CFLAGS -we147 -no-gcc"
+],[])
+ ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS"
+ AC_MSG_RESULT($ifelse([$2],,INTEL_COMPILER,[$2]))
+ ;;
+ esac
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_MAKE_TAGS version: 6 updated: 2010/10/23 15:52:32
+dnl ------------
+dnl Generate tags/TAGS targets for makefiles. Do not generate TAGS if we have
+dnl a monocase filesystem.
+AC_DEFUN([CF_MAKE_TAGS],[
+AC_REQUIRE([CF_MIXEDCASE_FILENAMES])
+
+AC_CHECK_PROGS(CTAGS, exctags ctags)
+AC_CHECK_PROGS(ETAGS, exetags etags)
+
+AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS:-ctags}, yes, no)
+
+if test "$cf_cv_mixedcase" = yes ; then
+ AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS:-etags}, yes, no)
+else
+ MAKE_UPPER_TAGS=no
+fi
+
+if test "$MAKE_UPPER_TAGS" = yes ; then
+ MAKE_UPPER_TAGS=
+else
+ MAKE_UPPER_TAGS="#"
+fi
+
+if test "$MAKE_LOWER_TAGS" = yes ; then
+ MAKE_LOWER_TAGS=
+else
+ MAKE_LOWER_TAGS="#"
+fi
+
+AC_SUBST(CTAGS)
+AC_SUBST(ETAGS)
+
+AC_SUBST(MAKE_UPPER_TAGS)
+AC_SUBST(MAKE_LOWER_TAGS)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_MIXEDCASE_FILENAMES version: 3 updated: 2003/09/20 17:07:55
+dnl ----------------------
+dnl Check if the file-system supports mixed-case filenames. If we're able to
+dnl create a lowercase name and see it as uppercase, it doesn't support that.
+AC_DEFUN([CF_MIXEDCASE_FILENAMES],
+[
+AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[
+if test "$cross_compiling" = yes ; then
+ case $target_alias in #(vi
+ *-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-mingw32*|*-uwin*) #(vi
+ cf_cv_mixedcase=no
+ ;;
+ *)
+ cf_cv_mixedcase=yes
+ ;;
+ esac
+else
+ rm -f conftest CONFTEST
+ echo test >conftest
+ if test -f CONFTEST ; then
+ cf_cv_mixedcase=no
+ else
+ cf_cv_mixedcase=yes
+ fi
+ rm -f conftest CONFTEST
+fi
+])
+test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_MKSTEMP version: 7 updated: 2010/08/14 18:25:37
+dnl ----------
+dnl Check for a working mkstemp. This creates two files, checks that they are
+dnl successfully created and distinct (AmigaOS apparently fails on the last).
+AC_DEFUN([CF_MKSTEMP],[
+AC_CACHE_CHECK(for working mkstemp, cf_cv_func_mkstemp,[
+rm -rf conftest*
+AC_TRY_RUN([
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+int main()
+{
+ char *tmpl = "conftestXXXXXX";
+ char name[2][80];
+ int n;
+ int result = 0;
+ int fd;
+ struct stat sb;
+
+ umask(077);
+ for (n = 0; n < 2; ++n) {
+ strcpy(name[n], tmpl);
+ if ((fd = mkstemp(name[n])) >= 0) {
+ if (!strcmp(name[n], tmpl)
+ || stat(name[n], &sb) != 0
+ || (sb.st_mode & S_IFMT) != S_IFREG
+ || (sb.st_mode & 077) != 0) {
+ result = 1;
+ }
+ close(fd);
+ }
+ }
+ if (result == 0
+ && !strcmp(name[0], name[1]))
+ result = 1;
+ ${cf_cv_main_return:-return}(result);
+}
+],[cf_cv_func_mkstemp=yes
+],[cf_cv_func_mkstemp=no
+],[AC_CHECK_FUNC(mkstemp)
+])
+])
+if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then
+ AC_DEFINE(HAVE_MKSTEMP)
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32
+dnl ----------
+dnl Write a debug message to config.log, along with the line number in the
+dnl configure script.
+AC_DEFUN([CF_MSG_LOG],[
+echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_NO_LEAKS_OPTION version: 4 updated: 2006/12/16 14:24:05
+dnl ------------------
+dnl see CF_WITH_NO_LEAKS
+AC_DEFUN([CF_NO_LEAKS_OPTION],[
+AC_MSG_CHECKING(if you want to use $1 for testing)
+AC_ARG_WITH($1,
+ [$2],
+ [AC_DEFINE($3)ifelse([$4],,[
+ $4
+])
+ : ${with_cflags:=-g}
+ : ${with_no_leaks:=yes}
+ with_$1=yes],
+ [with_$1=])
+AC_MSG_RESULT(${with_$1:-no})
+
+case .$with_cflags in #(vi
+.*-g*)
+ case .$CFLAGS in #(vi
+ .*-g*) #(vi
+ ;;
+ *)
+ CF_ADD_CFLAGS([-g])
+ ;;
+ esac
+ ;;
+esac
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_POSIX_C_SOURCE version: 8 updated: 2010/05/26 05:38:42
+dnl -----------------
+dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed.
+dnl
+dnl POSIX.1-1990 _POSIX_SOURCE
+dnl POSIX.1-1990 and _POSIX_SOURCE and
+dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2
+dnl Bindings Option
+dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L
+dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L
+dnl X/Open 2000 _POSIX_C_SOURCE=200112L
+dnl
+dnl Parameters:
+dnl $1 is the nominal value for _POSIX_C_SOURCE
+AC_DEFUN([CF_POSIX_C_SOURCE],
+[
+cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1])
+
+cf_save_CFLAGS="$CFLAGS"
+cf_save_CPPFLAGS="$CPPFLAGS"
+
+CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE)
+CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE)
+
+AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[
+ CF_MSG_LOG(if the symbol is already defined go no further)
+ AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifndef _POSIX_C_SOURCE
+make an error
+#endif],
+ [cf_cv_posix_c_source=no],
+ [cf_want_posix_source=no
+ case .$cf_POSIX_C_SOURCE in #(vi
+ .[[12]]??*) #(vi
+ cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
+ ;;
+ .2) #(vi
+ cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
+ cf_want_posix_source=yes
+ ;;
+ .*)
+ cf_want_posix_source=yes
+ ;;
+ esac
+ if test "$cf_want_posix_source" = yes ; then
+ AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifdef _POSIX_SOURCE
+make an error
+#endif],[],
+ cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE")
+ fi
+ CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE)
+ CFLAGS="$cf_trim_CFLAGS"
+ CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
+ CF_MSG_LOG(if the second compile does not leave our definition intact error)
+ AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifndef _POSIX_C_SOURCE
+make an error
+#endif],,
+ [cf_cv_posix_c_source=no])
+ CFLAGS="$cf_save_CFLAGS"
+ CPPFLAGS="$cf_save_CPPFLAGS"
+ ])
+])
+
+if test "$cf_cv_posix_c_source" != no ; then
+ CFLAGS="$cf_trim_CFLAGS"
+ CPPFLAGS="$cf_trim_CPPFLAGS"
+ CF_ADD_CFLAGS($cf_cv_posix_c_source)
+fi
+
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_PROG_EXT version: 10 updated: 2004/01/03 19:28:18
+dnl -----------
+dnl Compute $PROG_EXT, used for non-Unix ports, such as OS/2 EMX.
+AC_DEFUN([CF_PROG_EXT],
+[
+AC_REQUIRE([CF_CHECK_CACHE])
+case $cf_cv_system_name in
+os2*)
+ CFLAGS="$CFLAGS -Zmt"
+ CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__"
+ CXXFLAGS="$CXXFLAGS -Zmt"
+ # autoconf's macro sets -Zexe and suffix both, which conflict:w
+ LDFLAGS="$LDFLAGS -Zmt -Zcrtdll"
+ ac_cv_exeext=.exe
+ ;;
+esac
+
+AC_EXEEXT
+AC_OBJEXT
+
+PROG_EXT="$EXEEXT"
+AC_SUBST(PROG_EXT)
+test -n "$PROG_EXT" && AC_DEFINE_UNQUOTED(PROG_EXT,"$PROG_EXT")
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_PROG_LINT version: 2 updated: 2009/08/12 04:43:14
+dnl ------------
+AC_DEFUN([CF_PROG_LINT],
+[
+AC_CHECK_PROGS(LINT, tdlint lint alint splint lclint)
+AC_SUBST(LINT_OPTS)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50
+dnl ----------------
+dnl Remove all -U and -D options that refer to the given symbol from a list
+dnl of C compiler options. This works around the problem that not all
+dnl compilers process -U and -D options from left-to-right, so a -U option
+dnl cannot be used to cancel the effect of a preceding -D option.
+dnl
+dnl $1 = target (which could be the same as the source variable)
+dnl $2 = source (including '$')
+dnl $3 = symbol to remove
+define([CF_REMOVE_DEFINE],
+[
+$1=`echo "$2" | \
+ sed -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[[ ]]/ /g' \
+ -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'`
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_TRY_XOPEN_SOURCE version: 1 updated: 2011/10/30 17:09:50
+dnl -------------------
+dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we
+dnl can define it successfully.
+AC_DEFUN([CF_TRY_XOPEN_SOURCE],[
+AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+],[
+#ifndef _XOPEN_SOURCE
+make an error
+#endif],
+ [cf_cv_xopen_source=no],
+ [cf_save="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+],[
+#ifdef _XOPEN_SOURCE
+make an error
+#endif],
+ [cf_cv_xopen_source=no],
+ [cf_cv_xopen_source=$cf_XOPEN_SOURCE])
+ CPPFLAGS="$cf_save"
+ ])
+])
+
+if test "$cf_cv_xopen_source" != no ; then
+ CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE)
+ CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE)
+ cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
+ CF_ADD_CFLAGS($cf_temp_xopen_source)
+fi
+])
+dnl ---------------------------------------------------------------------------
+dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59
+dnl --------
+dnl Make an uppercase version of a variable
+dnl $1=uppercase($2)
+AC_DEFUN([CF_UPPER],
+[
+$1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12
+dnl ----------
+dnl Use AC_VERBOSE w/o the warnings
+AC_DEFUN([CF_VERBOSE],
+[test -n "$verbose" && echo " $1" 1>&AC_FD_MSG
+CF_MSG_LOG([$1])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47
+dnl ----------------
+dnl Configure-option for dbmalloc. The optional parameter is used to override
+dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
+AC_DEFUN([CF_WITH_DBMALLOC],[
+CF_NO_LEAKS_OPTION(dbmalloc,
+ [ --with-dbmalloc test: use Conor Cahill's dbmalloc library],
+ [USE_DBMALLOC])
+
+if test "$with_dbmalloc" = yes ; then
+ AC_CHECK_HEADER(dbmalloc.h,
+ [AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))])
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47
+dnl ---------------
+dnl Configure-option for dmalloc. The optional parameter is used to override
+dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
+AC_DEFUN([CF_WITH_DMALLOC],[
+CF_NO_LEAKS_OPTION(dmalloc,
+ [ --with-dmalloc test: use Gray Watson's dmalloc library],
+ [USE_DMALLOC])
+
+if test "$with_dmalloc" = yes ; then
+ AC_CHECK_HEADER(dmalloc.h,
+ [AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))])
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_WITH_VALGRIND version: 1 updated: 2006/12/14 18:00:21
+dnl ----------------
+AC_DEFUN([CF_WITH_VALGRIND],[
+CF_NO_LEAKS_OPTION(valgrind,
+ [ --with-valgrind test: use valgrind],
+ [USE_VALGRIND])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_WITH_WARNINGS version: 5 updated: 2004/07/23 14:40:34
+dnl ----------------
+dnl Combine the checks for gcc features into a configure-script option
+dnl
+dnl Parameters:
+dnl $1 - see CF_GCC_WARNINGS
+AC_DEFUN([CF_WITH_WARNINGS],
+[
+if ( test "$GCC" = yes || test "$GXX" = yes )
+then
+AC_MSG_CHECKING(if you want to check for gcc warnings)
+AC_ARG_WITH(warnings,
+ [ --with-warnings test: turn on gcc warnings],
+ [cf_opt_with_warnings=$withval],
+ [cf_opt_with_warnings=no])
+AC_MSG_RESULT($cf_opt_with_warnings)
+if test "$cf_opt_with_warnings" != no ; then
+ CF_GCC_ATTRIBUTES
+ CF_GCC_WARNINGS([$1])
+fi
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_XOPEN_SOURCE version: 42 updated: 2012/01/07 08:26:49
+dnl ---------------
+dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
+dnl or adapt to the vendor's definitions to get equivalent functionality,
+dnl without losing the common non-POSIX features.
+dnl
+dnl Parameters:
+dnl $1 is the nominal value for _XOPEN_SOURCE
+dnl $2 is the nominal value for _POSIX_C_SOURCE
+AC_DEFUN([CF_XOPEN_SOURCE],[
+
+cf_XOPEN_SOURCE=ifelse([$1],,500,[$1])
+cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2])
+cf_xopen_source=
+
+case $host_os in #(vi
+aix[[4-7]]*) #(vi
+ cf_xopen_source="-D_ALL_SOURCE"
+ ;;
+cygwin) #(vi
+ cf_XOPEN_SOURCE=600
+ ;;
+darwin[[0-8]].*) #(vi
+ cf_xopen_source="-D_APPLE_C_SOURCE"
+ ;;
+darwin*) #(vi
+ cf_xopen_source="-D_DARWIN_C_SOURCE"
+ cf_XOPEN_SOURCE=
+ ;;
+freebsd*|dragonfly*) #(vi
+ # 5.x headers associate
+ # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
+ # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
+ cf_POSIX_C_SOURCE=200112L
+ cf_XOPEN_SOURCE=600
+ cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+ ;;
+hpux11*) #(vi
+ cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500"
+ ;;
+hpux*) #(vi
+ cf_xopen_source="-D_HPUX_SOURCE"
+ ;;
+irix[[56]].*) #(vi
+ cf_xopen_source="-D_SGI_SOURCE"
+ cf_XOPEN_SOURCE=
+ ;;
+linux*|gnu*|mint*|k*bsd*-gnu) #(vi
+ CF_GNU_SOURCE
+ ;;
+mirbsd*) #(vi
+ # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
+ cf_XOPEN_SOURCE=
+ CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
+ ;;
+netbsd*) #(vi
+ cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
+ ;;
+openbsd[[4-9]]*) #(vi
+ # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
+ cf_xopen_source="-D_BSD_SOURCE"
+ cf_XOPEN_SOURCE=600
+ ;;
+openbsd*) #(vi
+ # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
+ ;;
+osf[[45]]*) #(vi
+ cf_xopen_source="-D_OSF_SOURCE"
+ ;;
+nto-qnx*) #(vi
+ cf_xopen_source="-D_QNX_SOURCE"
+ ;;
+sco*) #(vi
+ # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
+ ;;
+solaris2.*) #(vi
+ cf_xopen_source="-D__EXTENSIONS__"
+ ;;
+*)
+ CF_TRY_XOPEN_SOURCE
+ CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
+ ;;
+esac
+
+if test -n "$cf_xopen_source" ; then
+ CF_ADD_CFLAGS($cf_xopen_source)
+fi
+
+dnl In anything but the default case, we may have system-specific setting
+dnl which is still not guaranteed to provide all of the entrypoints that
+dnl _XOPEN_SOURCE would yield.
+if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
+ AC_MSG_CHECKING(if _XOPEN_SOURCE really is set)
+ AC_TRY_COMPILE([#include <stdlib.h>],[
+#ifndef _XOPEN_SOURCE
+make an error
+#endif],
+ [cf_XOPEN_SOURCE_set=yes],
+ [cf_XOPEN_SOURCE_set=no])
+ AC_MSG_RESULT($cf_XOPEN_SOURCE_set)
+ if test $cf_XOPEN_SOURCE_set = yes
+ then
+ AC_TRY_COMPILE([#include <stdlib.h>],[
+#if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
+make an error
+#endif],
+ [cf_XOPEN_SOURCE_set_ok=yes],
+ [cf_XOPEN_SOURCE_set_ok=no])
+ if test $cf_XOPEN_SOURCE_set_ok = no
+ then
+ AC_MSG_WARN(_XOPEN_SOURCE is lower than requested)
+ fi
+ else
+ CF_TRY_XOPEN_SOURCE
+ fi
+fi
+])
diff --git a/usr.bin/yacc/closure.c b/contrib/byacc/closure.c
index a39d40244c4e..7573ff5bbd3f 100644
--- a/usr.bin/yacc/closure.c
+++ b/contrib/byacc/closure.c
@@ -1,62 +1,14 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)closure.c 5.3 (Berkeley) 5/24/93";
-#endif
-#endif
+/* $Id: closure.c,v 1.9 2010/06/09 08:21:47 tom Exp $ */
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stdlib.h>
#include "defs.h"
-short *itemset;
-short *itemsetend;
+Value_t *itemset;
+Value_t *itemsetend;
unsigned *ruleset;
-static void set_EFF(void);
-#ifdef DEBUG
-static void print_closure(int);
-static void print_EFF();
-static void print_first_derives();
-#endif
-
static unsigned *first_derives;
static unsigned *EFF;
-
static void
set_EFF(void)
{
@@ -93,7 +45,6 @@ set_EFF(void)
#endif
}
-
void
set_first_derives(void)
{
@@ -128,7 +79,7 @@ set_first_derives(void)
k = 0;
}
- if (cword & (1 << k))
+ if (cword & (unsigned)(1 << k))
{
rp = derives[j];
while ((rule = *rp++) >= 0)
@@ -145,25 +96,24 @@ set_first_derives(void)
print_first_derives();
#endif
- free(EFF);
+ FREE(EFF);
}
-
void
closure(short *nucleus, int n)
{
- int ruleno;
+ unsigned ruleno;
unsigned word;
unsigned i;
- short *csp;
+ Value_t *csp;
unsigned *dsp;
unsigned *rsp;
int rulesetsize;
- short *csend;
+ Value_t *csend;
unsigned *rsend;
int symbol;
- int itemno;
+ Value_t itemno;
rulesetsize = WORDSIZE(nrules);
rsend = ruleset + rulesetsize;
@@ -193,9 +143,9 @@ closure(short *nucleus, int n)
{
for (i = 0; i < BITS_PER_WORD; ++i)
{
- if (word & (1 << i))
+ if (word & (unsigned)(1 << i))
{
- itemno = rrhs[ruleno+i];
+ itemno = rrhs[ruleno + i];
while (csp < csend && *csp < itemno)
*itemsetend++ = *csp++;
*itemsetend++ = itemno;
@@ -211,35 +161,31 @@ closure(short *nucleus, int n)
*itemsetend++ = *csp++;
#ifdef DEBUG
- print_closure(n);
+ print_closure(n);
#endif
}
-
-
void
finalize_closure(void)
{
- free(itemset);
- free(ruleset);
- free(first_derives + ntokens * WORDSIZE(nrules));
+ FREE(itemset);
+ FREE(ruleset);
+ FREE(first_derives + ntokens * WORDSIZE(nrules));
}
-
#ifdef DEBUG
-static void
+void
print_closure(int n)
{
- short *isp;
+ short *isp;
- printf("\n\nn = %d\n\n", n);
- for (isp = itemset; isp < itemsetend; isp++)
- printf(" %d\n", *isp);
+ printf("\n\nn = %d\n\n", n);
+ for (isp = itemset; isp < itemsetend; isp++)
+ printf(" %d\n", *isp);
}
-
-static void
+void
print_EFF(void)
{
int i, j;
@@ -270,14 +216,13 @@ print_EFF(void)
}
}
-
-static void
+void
print_first_derives(void)
{
int i;
int j;
unsigned *rp;
- unsigned cword;
+ unsigned cword = 0;
unsigned k;
printf("\n\n\nFirst Derives\n");
@@ -288,19 +233,19 @@ print_first_derives(void)
rp = first_derives + i * WORDSIZE(nrules);
k = BITS_PER_WORD;
for (j = 0; j <= nrules; k++, j++)
- {
- if (k >= BITS_PER_WORD)
- {
- cword = *rp++;
- k = 0;
- }
-
- if (cword & (1 << k))
- printf(" %d\n", j);
+ {
+ if (k >= BITS_PER_WORD)
+ {
+ cword = *rp++;
+ k = 0;
+ }
+
+ if (cword & (1 << k))
+ printf(" %d\n", j);
}
}
- fflush(stdout);
+ fflush(stdout);
}
#endif
diff --git a/contrib/byacc/config.guess b/contrib/byacc/config.guess
new file mode 100755
index 000000000000..e4b69669fd22
--- /dev/null
+++ b/contrib/byacc/config.guess
@@ -0,0 +1,1511 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2911 Free Software Foundation, Inc.
+
+timestamp='2011-01-01'
+
+# This file 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner. Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null | \
+ grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-gnu
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-tilera-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ i386)
+ eval $set_cc_for_build
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ UNAME_PROCESSOR="x86_64"
+ fi
+ fi ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/contrib/byacc/config.sub b/contrib/byacc/config.sub
new file mode 100755
index 000000000000..7c62c346acfb
--- /dev/null
+++ b/contrib/byacc/config.sub
@@ -0,0 +1,1760 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 2011 Free Software Foundation, Inc.
+
+timestamp='2011-04-01'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | open8 \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pyramid \
+ | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pyramid-* \
+ | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile-* | tilegx-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next)
+ basic_machine=m68k-next
+ case $os in
+ -nextstep*)
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power)
+ basic_machine=power-ibm
+ ;;
+ ppc | ppcbe)
+ basic_machine=powerpc-unknown
+ ;;
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64)
+ basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*)
+ basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ # This must be matched before tile*.
+ tilegx*)
+ basic_machine=tilegx-unknown
+ os=-linux-gnu
+ ;;
+ tile*)
+ basic_machine=tile-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2)
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next)
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/contrib/byacc/config_h.in b/contrib/byacc/config_h.in
new file mode 100644
index 000000000000..42af7671f7c3
--- /dev/null
+++ b/contrib/byacc/config_h.in
@@ -0,0 +1,3 @@
+/* @configure_input@ */
+/* $Id: config_h.in,v 1.1 1995/01/01 19:34:59 tom Exp $ */
+@DEFS@
diff --git a/contrib/byacc/configure b/contrib/byacc/configure
new file mode 100755
index 000000000000..e4ecd942a0a0
--- /dev/null
+++ b/contrib/byacc/configure
@@ -0,0 +1,5973 @@
+#! /bin/sh
+# From configure.in Revision: 1.10 .
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by Autoconf 2.52.20101002.
+#
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+cross_compiling=no
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+ac_unique_file="main.c"
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_prev=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: should be removed in autoconf 3.0.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+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 <<EOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+EOF
+
+ cat <<EOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+EOF
+
+ cat <<\EOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST build programs to run on HOST [BUILD]
+ --target=TARGET configure for building compilers for TARGET [HOST]
+EOF
+fi
+
+if test -n "$ac_init_help"; then
+
+ cat <<\EOF
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+
+ --with-warnings test: turn on gcc warnings
+ --disable-echo display "compiling" commands
+ --with-dmalloc test: use Gray Watson's dmalloc library
+ --with-dbmalloc test: use Conor Cahill's dbmalloc library
+ --with-valgrind test: use valgrind
+ --disable-leaks test: free permanent memory, analyze leaks
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+EOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
+ cd $ac_subdir
+ # A "../" for each directory in /$ac_subdir.
+ ac_dots=`echo $ac_subdir |
+ sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
+
+ case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_sub_srcdir=$srcdir ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_sub_srcdir=$srcdir/$ac_subdir ;;
+ *) # Relative path.
+ ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
+ esac
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_sub_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_sub_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_sub_srcdir/configure; then
+ echo
+ $SHELL $ac_sub_srcdir/configure --help=recursive
+ elif test -f $ac_sub_srcdir/configure.ac ||
+ test -f $ac_sub_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\EOF
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+EOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<EOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.52.20101002. Invocation command line was
+
+ $ $0 $@
+
+EOF
+{
+cat <<_ASUNAME
+## ---------- ##
+## Platform. ##
+## ---------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+PATH = $PATH
+
+_ASUNAME
+} >&5
+
+cat >&5 <<EOF
+## ------------ ##
+## Core tests. ##
+## ------------ ##
+
+EOF
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell meta-characters.
+ac_configure_args=
+ac_sep=
+for ac_arg
+do
+ case $ac_arg in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ ac_sep=" " ;;
+ *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
+ ac_sep=" " ;;
+ esac
+ # Get rid of the leading space.
+done
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ echo >&5
+ echo "## ----------------- ##" >&5
+ echo "## Cache variables. ##" >&5
+ echo "## ----------------- ##" >&5
+ echo >&5
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} >&5
+ sed "/^$/d" confdefs.h >conftest.log
+ if test -s conftest.log; then
+ echo >&5
+ echo "## ------------ ##" >&5
+ echo "## confdefs.h. ##" >&5
+ echo "## ------------ ##" >&5
+ echo >&5
+ cat conftest.log >&5
+ fi
+ (echo; echo) >&5
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal" >&5
+ echo "$as_me: exit $exit_status" >&5
+ rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:845: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ cat "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:856: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:864: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:880: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:884: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:890: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:892: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:894: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status. It doesn't matter if
+ # we pass some twice (in addition to the command line arguments).
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
+ ac_configure_args="$ac_configure_args '$ac_arg'"
+ ;;
+ *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
+ ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:913: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:915: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+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
+ac_main_return=return
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+echo "#! $SHELL" >conftest.sh
+echo "exit 0" >>conftest.sh
+chmod +x conftest.sh
+if { (echo "$as_me:936: PATH=\".;.\"; conftest.sh") >&5
+ (PATH=".;."; conftest.sh) 2>&5
+ ac_status=$?
+ echo "$as_me:939: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ ac_path_separator=';'
+else
+ ac_path_separator=:
+fi
+PATH_SEPARATOR="$ac_path_separator"
+rm -f conftest.sh
+
+ac_config_headers="$ac_config_headers config.h:config_h.in"
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:967: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:977: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:981: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+ ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+ { { echo "$as_me:990: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+ { { echo "$as_me:994: error: $ac_config_sub $ac_cv_build_alias failed." >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:999: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+echo "$as_me:1006: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+ ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+ { { echo "$as_me:1015: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:1020: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then
+ echo "$as_me:1028: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6
+if test "${ac_cv_target+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_target_alias=$target_alias
+test "x$ac_cv_target_alias" = "x" &&
+ ac_cv_target_alias=$ac_cv_host_alias
+ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
+ { { echo "$as_me:1037: error: $ac_config_sub $ac_cv_target_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:1042: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6
+target=$ac_cv_target
+target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-
+ system_name="$host_os"
+else
+ system_name="`(uname -s -r) 2>/dev/null`"
+ if test -z "$system_name" ; then
+ system_name="`(hostname) 2>/dev/null`"
+ fi
+fi
+test -n "$system_name" && cat >>confdefs.h <<EOF
+#define SYSTEM_NAME "$system_name"
+EOF
+
+if test "${cf_cv_system_name+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cf_cv_system_name="$system_name"
+fi
+
+test -z "$system_name" && system_name="$cf_cv_system_name"
+test -n "$cf_cv_system_name" && echo "$as_me:1073: result: Configuring for $cf_cv_system_name" >&5
+echo "${ECHO_T}Configuring for $cf_cv_system_name" >&6
+
+if test ".$system_name" != ".$cf_cv_system_name" ; then
+ echo "$as_me:1077: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5
+echo "${ECHO_T}Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&6
+ { { echo "$as_me:1079: error: \"Please remove config.cache and try again.\"" >&5
+echo "$as_me: error: \"Please remove config.cache and try again.\"" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+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
+ac_main_return=return
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:1106: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}gcc"
+echo "$as_me:1121: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:1129: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:1132: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:1141: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="gcc"
+echo "$as_me:1156: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:1164: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:1167: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:1180: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}cc"
+echo "$as_me:1195: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:1203: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:1206: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:1215: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="cc"
+echo "$as_me:1230: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:1238: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:1241: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:1254: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+fi
+ac_cv_prog_CC="cc"
+echo "$as_me:1274: found $ac_dir/$ac_word" >&5
+break
+done
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" ${1+"$@"}
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:1296: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:1299: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:1310: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+echo "$as_me:1325: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:1333: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:1336: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1349: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="$ac_prog"
+echo "$as_me:1364: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:1372: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:1375: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+test -z "$CC" && { { echo "$as_me:1387: error: no acceptable cc found in \$PATH" >&5
+echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:1392:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:1395: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:1398: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:1400: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:1403: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:1405: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:1408: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 1412 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:1428: checking for C compiler default output" >&5
+echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:1431: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:1434: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+for ac_file in `ls a.exe conftest.exe 2>/dev/null;
+ ls a.out conftest 2>/dev/null;
+ ls a.* conftest.* 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+ a.out ) # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1457: error: C compiler cannot create executables" >&5
+echo "$as_me: error: C compiler cannot create executables" >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:1463: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:1468: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:1474: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1477: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:1484: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+echo "$as_me:1492: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:1499: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:1501: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:1504: checking for executable suffix" >&5
+echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
+if { (eval echo "$as_me:1506: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:1509: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:1525: error: cannot compute EXEEXT: cannot compile and link" >&5
+echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:1531: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:1537: checking for object suffix" >&5
+echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1543 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:1555: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1558: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.map | *.inf ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1570: error: cannot compute OBJEXT: cannot compile" >&5
+echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:1577: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:1581: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1587 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1602: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1605: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1608: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1611: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:1623: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:1629: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1635 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1647: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1650: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1653: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1656: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:1666: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1693: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1696: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1699: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1702: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ ''\
+ '#include <stdlib.h>' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1714 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1727: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1730: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1733: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1736: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1746 "configure"
+#include "confdefs.h"
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1758: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1761: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1764: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1767: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -rf conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+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
+ac_main_return=return
+
+echo "$as_me:1795: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+#line 1803 "configure"
+#include "confdefs.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1852: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1855: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1858: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1861: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:1878: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:1881: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+echo "$as_me:1886: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1892 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset x;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *ccp;
+ char **p;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ ccp = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++ccp;
+ p = (char**) ccp;
+ ccp = (char const *const *) p;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ }
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1950: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1953: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1956: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1959: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_const=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_c_const=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:1969: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\EOF
+#define const
+EOF
+
+fi
+
+echo "$as_me:1979: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:1999: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:2003: result: no" >&5
+echo "${ECHO_T}no" >&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:2020: checking for a BSD compatible install" >&5
+echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ for ac_dir in $PATH; do
+ IFS=$ac_save_IFS
+ # Account for people who put trailing slashes in PATH elements.
+ case $ac_dir/ in
+ / | ./ | .// | /cC/* \
+ | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \
+ | /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if $as_executable_p "$ac_dir/$ac_prog"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:2069: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:2080: checking if filesystem supports mixed-case filenames" >&5
+echo $ECHO_N "checking if filesystem supports mixed-case filenames... $ECHO_C" >&6
+if test "${cf_cv_mixedcase+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+if test "$cross_compiling" = yes ; then
+ case $target_alias in #(vi
+ *-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-mingw32*|*-uwin*) #(vi
+ cf_cv_mixedcase=no
+ ;;
+ *)
+ cf_cv_mixedcase=yes
+ ;;
+ esac
+else
+ rm -f conftest CONFTEST
+ echo test >conftest
+ if test -f CONFTEST ; then
+ cf_cv_mixedcase=no
+ else
+ cf_cv_mixedcase=yes
+ fi
+ rm -f conftest CONFTEST
+fi
+
+fi
+echo "$as_me:2107: result: $cf_cv_mixedcase" >&5
+echo "${ECHO_T}$cf_cv_mixedcase" >&6
+test "$cf_cv_mixedcase" = yes && cat >>confdefs.h <<\EOF
+#define MIXEDCASE_FILENAMES 1
+EOF
+
+for ac_prog in exctags ctags
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:2117: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CTAGS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CTAGS"; then
+ ac_cv_prog_CTAGS="$CTAGS" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CTAGS="$ac_prog"
+echo "$as_me:2132: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CTAGS=$ac_cv_prog_CTAGS
+if test -n "$CTAGS"; then
+ echo "$as_me:2140: result: $CTAGS" >&5
+echo "${ECHO_T}$CTAGS" >&6
+else
+ echo "$as_me:2143: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CTAGS" && break
+done
+
+for ac_prog in exetags etags
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:2154: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ETAGS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ETAGS"; then
+ ac_cv_prog_ETAGS="$ETAGS" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ETAGS="$ac_prog"
+echo "$as_me:2169: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ETAGS=$ac_cv_prog_ETAGS
+if test -n "$ETAGS"; then
+ echo "$as_me:2177: result: $ETAGS" >&5
+echo "${ECHO_T}$ETAGS" >&6
+else
+ echo "$as_me:2180: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ETAGS" && break
+done
+
+# Extract the first word of "${CTAGS:-ctags}", so it can be a program name with args.
+set dummy ${CTAGS:-ctags}; ac_word=$2
+echo "$as_me:2189: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_MAKE_LOWER_TAGS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$MAKE_LOWER_TAGS"; then
+ ac_cv_prog_MAKE_LOWER_TAGS="$MAKE_LOWER_TAGS" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_MAKE_LOWER_TAGS="yes"
+echo "$as_me:2204: found $ac_dir/$ac_word" >&5
+break
+done
+
+ test -z "$ac_cv_prog_MAKE_LOWER_TAGS" && ac_cv_prog_MAKE_LOWER_TAGS="no"
+fi
+fi
+MAKE_LOWER_TAGS=$ac_cv_prog_MAKE_LOWER_TAGS
+if test -n "$MAKE_LOWER_TAGS"; then
+ echo "$as_me:2213: result: $MAKE_LOWER_TAGS" >&5
+echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6
+else
+ echo "$as_me:2216: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test "$cf_cv_mixedcase" = yes ; then
+ # Extract the first word of "${ETAGS:-etags}", so it can be a program name with args.
+set dummy ${ETAGS:-etags}; ac_word=$2
+echo "$as_me:2223: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_MAKE_UPPER_TAGS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$MAKE_UPPER_TAGS"; then
+ ac_cv_prog_MAKE_UPPER_TAGS="$MAKE_UPPER_TAGS" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_MAKE_UPPER_TAGS="yes"
+echo "$as_me:2238: found $ac_dir/$ac_word" >&5
+break
+done
+
+ test -z "$ac_cv_prog_MAKE_UPPER_TAGS" && ac_cv_prog_MAKE_UPPER_TAGS="no"
+fi
+fi
+MAKE_UPPER_TAGS=$ac_cv_prog_MAKE_UPPER_TAGS
+if test -n "$MAKE_UPPER_TAGS"; then
+ echo "$as_me:2247: result: $MAKE_UPPER_TAGS" >&5
+echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6
+else
+ echo "$as_me:2250: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+else
+ MAKE_UPPER_TAGS=no
+fi
+
+if test "$MAKE_UPPER_TAGS" = yes ; then
+ MAKE_UPPER_TAGS=
+else
+ MAKE_UPPER_TAGS="#"
+fi
+
+if test "$MAKE_LOWER_TAGS" = yes ; then
+ MAKE_LOWER_TAGS=
+else
+ MAKE_LOWER_TAGS="#"
+fi
+
+for ac_prog in tdlint lint alint splint lclint
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:2274: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LINT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$LINT"; then
+ ac_cv_prog_LINT="$LINT" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_LINT="$ac_prog"
+echo "$as_me:2289: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+LINT=$ac_cv_prog_LINT
+if test -n "$LINT"; then
+ echo "$as_me:2297: result: $LINT" >&5
+echo "${ECHO_T}$LINT" >&6
+else
+ echo "$as_me:2300: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$LINT" && break
+done
+
+# This should have been defined by AC_PROG_CC
+: ${CC:=cc}
+
+# Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content
+# into CC. This will not help with broken scripts that wrap the compiler with
+# options, but eliminates a more common category of user confusion.
+echo "$as_me:2313: checking \$CC variable" >&5
+echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6
+case "$CC" in #(vi
+*[\ \ ]-[IUD]*)
+ echo "$as_me:2317: result: broken" >&5
+echo "${ECHO_T}broken" >&6
+ { echo "$as_me:2319: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&5
+echo "$as_me: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;}
+ # humor him...
+ cf_flags=`echo "$CC" | sed -e 's/^[^ ]*[ ]//'`
+ CC=`echo "$CC" | sed -e 's/[ ].*//'`
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_flags
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+ ;;
+*)
+ echo "$as_me:2405: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+ ;;
+esac
+
+echo "$as_me:2410: checking for ${CC:-cc} option to accept ANSI C" >&5
+echo $ECHO_N "checking for ${CC:-cc} option to accept ANSI C... $ECHO_C" >&6
+if test "${cf_cv_ansi_cc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cf_cv_ansi_cc=no
+cf_save_CFLAGS="$CFLAGS"
+cf_save_CPPFLAGS="$CPPFLAGS"
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX -Aa -D_HPUX_SOURCE
+# SVR4 -Xc
+# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes)
+for cf_arg in "-DCC_HAS_PROTOS" \
+ "" \
+ -qlanglvl=ansi \
+ -std1 \
+ -Ae \
+ "-Aa -D_HPUX_SOURCE" \
+ -Xc
+do
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_arg
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2514 "configure"
+#include "confdefs.h"
+
+#ifndef CC_HAS_PROTOS
+#if !defined(__STDC__) || (__STDC__ != 1)
+choke me
+#endif
+#endif
+
+int
+main ()
+{
+
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2535: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2538: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2541: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2544: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_ansi_cc="$cf_arg"; break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+CFLAGS="$cf_save_CFLAGS"
+CPPFLAGS="$cf_save_CPPFLAGS"
+
+fi
+echo "$as_me:2557: result: $cf_cv_ansi_cc" >&5
+echo "${ECHO_T}$cf_cv_ansi_cc" >&6
+
+if test "$cf_cv_ansi_cc" != "no"; then
+if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_cv_ansi_cc
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+else
+ cat >>confdefs.h <<\EOF
+#define CC_HAS_PROTOS 1
+EOF
+
+fi
+fi
+
+if test "$cf_cv_ansi_cc" = "no"; then
+ { { echo "$as_me:2650: error: Your compiler does not appear to recognize prototypes.
+You have the following choices:
+ a. adjust your compiler options
+ b. get an up-to-date compiler
+ c. use a wrapper such as unproto" >&5
+echo "$as_me: error: Your compiler does not appear to recognize prototypes.
+You have the following choices:
+ a. adjust your compiler options
+ b. get an up-to-date compiler
+ c. use a wrapper such as unproto" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+cf_XOPEN_SOURCE=500
+cf_POSIX_C_SOURCE=199506L
+cf_xopen_source=
+
+case $host_os in #(vi
+aix[4-7]*) #(vi
+ cf_xopen_source="-D_ALL_SOURCE"
+ ;;
+cygwin) #(vi
+ cf_XOPEN_SOURCE=600
+ ;;
+darwin[0-8].*) #(vi
+ cf_xopen_source="-D_APPLE_C_SOURCE"
+ ;;
+darwin*) #(vi
+ cf_xopen_source="-D_DARWIN_C_SOURCE"
+ cf_XOPEN_SOURCE=
+ ;;
+freebsd*|dragonfly*) #(vi
+ # 5.x headers associate
+ # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
+ # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
+ cf_POSIX_C_SOURCE=200112L
+ cf_XOPEN_SOURCE=600
+ cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+ ;;
+hpux11*) #(vi
+ cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500"
+ ;;
+hpux*) #(vi
+ cf_xopen_source="-D_HPUX_SOURCE"
+ ;;
+irix[56].*) #(vi
+ cf_xopen_source="-D_SGI_SOURCE"
+ cf_XOPEN_SOURCE=
+ ;;
+linux*|gnu*|mint*|k*bsd*-gnu) #(vi
+
+echo "$as_me:2701: checking if we must define _GNU_SOURCE" >&5
+echo $ECHO_N "checking if we must define _GNU_SOURCE... $ECHO_C" >&6
+if test "${cf_cv_gnu_source+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 2708 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main ()
+{
+
+#ifndef _XOPEN_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2723: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2726: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2729: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2732: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_gnu_source=no
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_save="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2741 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main ()
+{
+
+#ifdef _XOPEN_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2756: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2759: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2762: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2765: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_gnu_source=no
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_cv_gnu_source=yes
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ CPPFLAGS="$cf_save"
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:2780: result: $cf_cv_gnu_source" >&5
+echo "${ECHO_T}$cf_cv_gnu_source" >&6
+test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+
+ ;;
+mirbsd*) #(vi
+ # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
+ cf_XOPEN_SOURCE=
+
+cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE
+
+cf_save_CFLAGS="$CFLAGS"
+cf_save_CPPFLAGS="$CPPFLAGS"
+
+cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \
+ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'`
+
+cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \
+ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'`
+
+echo "$as_me:2802: checking if we should define _POSIX_C_SOURCE" >&5
+echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6
+if test "${cf_cv_posix_c_source+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+echo "${as_me:-configure}:2808: testing if the symbol is already defined go no further ..." 1>&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2811 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main ()
+{
+
+#ifndef _POSIX_C_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2826: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2829: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2832: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2835: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_posix_c_source=no
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_want_posix_source=no
+ case .$cf_POSIX_C_SOURCE in #(vi
+ .[12]??*) #(vi
+ cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
+ ;;
+ .2) #(vi
+ cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
+ cf_want_posix_source=yes
+ ;;
+ .*)
+ cf_want_posix_source=yes
+ ;;
+ esac
+ if test "$cf_want_posix_source" = yes ; then
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2856 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main ()
+{
+
+#ifdef _POSIX_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2871: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2874: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2877: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2880: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ fi
+
+echo "${as_me:-configure}:2891: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
+
+ CFLAGS="$cf_trim_CFLAGS"
+ CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
+
+echo "${as_me:-configure}:2896: testing if the second compile does not leave our definition intact error ..." 1>&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2899 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main ()
+{
+
+#ifndef _POSIX_C_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2914: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2917: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2920: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2923: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_cv_posix_c_source=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ CFLAGS="$cf_save_CFLAGS"
+ CPPFLAGS="$cf_save_CPPFLAGS"
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:2939: result: $cf_cv_posix_c_source" >&5
+echo "${ECHO_T}$cf_cv_posix_c_source" >&6
+
+if test "$cf_cv_posix_c_source" != no ; then
+ CFLAGS="$cf_trim_CFLAGS"
+ CPPFLAGS="$cf_trim_CPPFLAGS"
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_cv_posix_c_source
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+fi
+
+ ;;
+netbsd*) #(vi
+ cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
+ ;;
+openbsd[4-9]*) #(vi
+ # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
+ cf_xopen_source="-D_BSD_SOURCE"
+ cf_XOPEN_SOURCE=600
+ ;;
+openbsd*) #(vi
+ # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
+ ;;
+osf[45]*) #(vi
+ cf_xopen_source="-D_OSF_SOURCE"
+ ;;
+nto-qnx*) #(vi
+ cf_xopen_source="-D_QNX_SOURCE"
+ ;;
+sco*) #(vi
+ # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
+ ;;
+solaris2.*) #(vi
+ cf_xopen_source="-D__EXTENSIONS__"
+ ;;
+*)
+
+echo "$as_me:3052: checking if we should define _XOPEN_SOURCE" >&5
+echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6
+if test "${cf_cv_xopen_source+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3059 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+int
+main ()
+{
+
+#ifndef _XOPEN_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3078: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3081: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3084: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3087: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_xopen_source=no
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_save="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3096 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+int
+main ()
+{
+
+#ifdef _XOPEN_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3115: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3118: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3121: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3124: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_xopen_source=no
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_cv_xopen_source=$cf_XOPEN_SOURCE
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ CPPFLAGS="$cf_save"
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:3139: result: $cf_cv_xopen_source" >&5
+echo "${ECHO_T}$cf_cv_xopen_source" >&6
+
+if test "$cf_cv_xopen_source" != no ; then
+
+CFLAGS=`echo "$CFLAGS" | \
+ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'`
+
+ cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_temp_xopen_source
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+fi
+
+cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE
+
+cf_save_CFLAGS="$CFLAGS"
+cf_save_CPPFLAGS="$CPPFLAGS"
+
+cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \
+ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'`
+
+cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \
+ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'`
+
+echo "$as_me:3247: checking if we should define _POSIX_C_SOURCE" >&5
+echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6
+if test "${cf_cv_posix_c_source+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+echo "${as_me:-configure}:3253: testing if the symbol is already defined go no further ..." 1>&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3256 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main ()
+{
+
+#ifndef _POSIX_C_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3271: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3274: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3277: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3280: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_posix_c_source=no
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_want_posix_source=no
+ case .$cf_POSIX_C_SOURCE in #(vi
+ .[12]??*) #(vi
+ cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
+ ;;
+ .2) #(vi
+ cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
+ cf_want_posix_source=yes
+ ;;
+ .*)
+ cf_want_posix_source=yes
+ ;;
+ esac
+ if test "$cf_want_posix_source" = yes ; then
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3301 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main ()
+{
+
+#ifdef _POSIX_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3316: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3319: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3322: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3325: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ fi
+
+echo "${as_me:-configure}:3336: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
+
+ CFLAGS="$cf_trim_CFLAGS"
+ CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
+
+echo "${as_me:-configure}:3341: testing if the second compile does not leave our definition intact error ..." 1>&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3344 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main ()
+{
+
+#ifndef _POSIX_C_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3359: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3362: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3365: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3368: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_cv_posix_c_source=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ CFLAGS="$cf_save_CFLAGS"
+ CPPFLAGS="$cf_save_CPPFLAGS"
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:3384: result: $cf_cv_posix_c_source" >&5
+echo "${ECHO_T}$cf_cv_posix_c_source" >&6
+
+if test "$cf_cv_posix_c_source" != no ; then
+ CFLAGS="$cf_trim_CFLAGS"
+ CPPFLAGS="$cf_trim_CPPFLAGS"
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_cv_posix_c_source
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+fi
+
+ ;;
+esac
+
+if test -n "$cf_xopen_source" ; then
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_xopen_source
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+fi
+
+if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
+ echo "$as_me:3557: checking if _XOPEN_SOURCE really is set" >&5
+echo $ECHO_N "checking if _XOPEN_SOURCE really is set... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3560 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+int
+main ()
+{
+
+#ifndef _XOPEN_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3575: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3578: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3581: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3584: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_XOPEN_SOURCE_set=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_XOPEN_SOURCE_set=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me:3593: result: $cf_XOPEN_SOURCE_set" >&5
+echo "${ECHO_T}$cf_XOPEN_SOURCE_set" >&6
+ if test $cf_XOPEN_SOURCE_set = yes
+ then
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3598 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+int
+main ()
+{
+
+#if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3613: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3616: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3619: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3622: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_XOPEN_SOURCE_set_ok=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_XOPEN_SOURCE_set_ok=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ if test $cf_XOPEN_SOURCE_set_ok = no
+ then
+ { echo "$as_me:3633: WARNING: _XOPEN_SOURCE is lower than requested" >&5
+echo "$as_me: WARNING: _XOPEN_SOURCE is lower than requested" >&2;}
+ fi
+ else
+
+echo "$as_me:3638: checking if we should define _XOPEN_SOURCE" >&5
+echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6
+if test "${cf_cv_xopen_source+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3645 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+int
+main ()
+{
+
+#ifndef _XOPEN_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3664: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3667: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3670: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3673: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_xopen_source=no
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_save="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3682 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+int
+main ()
+{
+
+#ifdef _XOPEN_SOURCE
+make an error
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3701: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3704: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3707: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3710: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_xopen_source=no
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_cv_xopen_source=$cf_XOPEN_SOURCE
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ CPPFLAGS="$cf_save"
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:3725: result: $cf_cv_xopen_source" >&5
+echo "${ECHO_T}$cf_cv_xopen_source" >&6
+
+if test "$cf_cv_xopen_source" != no ; then
+
+CFLAGS=`echo "$CFLAGS" | \
+ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'`
+
+ cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_temp_xopen_source
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+fi
+
+ fi
+fi
+
+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
+ac_main_return=return
+echo "$as_me:3829: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3850 "configure"
+#include "confdefs.h"
+#include <assert.h>
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:3855: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:3861: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3884 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:3888: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:3894: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:3931: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3941 "configure"
+#include "confdefs.h"
+#include <assert.h>
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:3946: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:3952: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3975 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:3979: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:3985: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:4013: error: C preprocessor \"$CPP\" fails sanity check" >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+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
+ac_main_return=return
+
+for ac_header in fcntl.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:4028: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4034 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:4038: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:4044: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_ext
+fi
+echo "$as_me:4063: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+for ac_func in atexit
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:4076: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4082 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+char (*f) ();
+
+int
+main ()
+{
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+f = $ac_func;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4113: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:4116: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:4119: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4122: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:4132: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+echo "$as_me:4142: checking for working mkstemp" >&5
+echo $ECHO_N "checking for working mkstemp... $ECHO_C" >&6
+if test "${cf_cv_func_mkstemp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+rm -rf conftest*
+if test "$cross_compiling" = yes; then
+ echo "$as_me:4150: checking for mkstemp" >&5
+echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6
+if test "${ac_cv_func_mkstemp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4156 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char mkstemp (); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char mkstemp ();
+char (*f) ();
+
+int
+main ()
+{
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_mkstemp) || defined (__stub___mkstemp)
+choke me
+#else
+f = mkstemp;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4187: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:4190: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:4193: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4196: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_mkstemp=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_mkstemp=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:4206: result: $ac_cv_func_mkstemp" >&5
+echo "${ECHO_T}$ac_cv_func_mkstemp" >&6
+
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4211 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+int main()
+{
+ char *tmpl = "conftestXXXXXX";
+ char name[2][80];
+ int n;
+ int result = 0;
+ int fd;
+ struct stat sb;
+
+ umask(077);
+ for (n = 0; n < 2; ++n) {
+ strcpy(name[n], tmpl);
+ if ((fd = mkstemp(name[n])) >= 0) {
+ if (!strcmp(name[n], tmpl)
+ || stat(name[n], &sb) != 0
+ || (sb.st_mode & S_IFMT) != S_IFREG
+ || (sb.st_mode & 077) != 0) {
+ result = 1;
+ }
+ close(fd);
+ }
+ }
+ if (result == 0
+ && !strcmp(name[0], name[1]))
+ result = 1;
+ ${cf_cv_main_return:-return}(result);
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:4249: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:4252: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:4254: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4257: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cf_cv_func_mkstemp=yes
+
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cf_cv_func_mkstemp=no
+
+fi
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+fi
+echo "$as_me:4272: result: $cf_cv_func_mkstemp" >&5
+echo "${ECHO_T}$cf_cv_func_mkstemp" >&6
+if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then
+ cat >>confdefs.h <<\EOF
+#define HAVE_MKSTEMP 1
+EOF
+
+fi
+
+GCC_VERSION=none
+if test "$GCC" = yes ; then
+ echo "$as_me:4283: checking version of $CC" >&5
+echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
+ GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
+ test -z "$GCC_VERSION" && GCC_VERSION=unknown
+ echo "$as_me:4287: result: $GCC_VERSION" >&5
+echo "${ECHO_T}$GCC_VERSION" >&6
+fi
+
+if ( test "$GCC" = yes || test "$GXX" = yes )
+then
+echo "$as_me:4293: checking if you want to check for gcc warnings" >&5
+echo $ECHO_N "checking if you want to check for gcc warnings... $ECHO_C" >&6
+
+# Check whether --with-warnings or --without-warnings was given.
+if test "${with_warnings+set}" = set; then
+ withval="$with_warnings"
+ cf_opt_with_warnings=$withval
+else
+ cf_opt_with_warnings=no
+fi;
+echo "$as_me:4303: result: $cf_opt_with_warnings" >&5
+echo "${ECHO_T}$cf_opt_with_warnings" >&6
+if test "$cf_opt_with_warnings" != no ; then
+
+if test "$GCC" = yes
+then
+cat > conftest.i <<EOF
+#ifndef GCC_PRINTF
+#define GCC_PRINTF 0
+#endif
+#ifndef GCC_SCANF
+#define GCC_SCANF 0
+#endif
+#ifndef GCC_NORETURN
+#define GCC_NORETURN /* nothing */
+#endif
+#ifndef GCC_UNUSED
+#define GCC_UNUSED /* nothing */
+#endif
+EOF
+if test "$GCC" = yes
+then
+ { echo "$as_me:4325: checking for $CC __attribute__ directives..." >&5
+echo "$as_me: checking for $CC __attribute__ directives..." >&6;}
+cat > conftest.$ac_ext <<EOF
+#line 4328 "${as_me:-configure}"
+#include "confdefs.h"
+#include "conftest.h"
+#include "conftest.i"
+#if GCC_PRINTF
+#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
+#else
+#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
+#endif
+#if GCC_SCANF
+#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
+#else
+#define GCC_SCANFLIKE(fmt,var) /*nothing*/
+#endif
+extern void wow(char *,...) GCC_SCANFLIKE(1,2);
+extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
+extern void foo(void) GCC_NORETURN;
+int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { return 0; }
+EOF
+ cf_printf_attribute=no
+ cf_scanf_attribute=no
+ for cf_attribute in scanf printf unused noreturn
+ do
+
+cf_ATTRIBUTE=`echo "$cf_attribute" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+ cf_directive="__attribute__(($cf_attribute))"
+ echo "checking for $CC $cf_directive" 1>&5
+
+ case $cf_attribute in #(vi
+ printf) #(vi
+ cf_printf_attribute=yes
+ cat >conftest.h <<EOF
+#define GCC_$cf_ATTRIBUTE 1
+EOF
+ ;;
+ scanf) #(vi
+ cf_scanf_attribute=yes
+ cat >conftest.h <<EOF
+#define GCC_$cf_ATTRIBUTE 1
+EOF
+ ;;
+ *) #(vi
+ cat >conftest.h <<EOF
+#define GCC_$cf_ATTRIBUTE $cf_directive
+EOF
+ ;;
+ esac
+
+ if { (eval echo "$as_me:4377: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4380: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ test -n "$verbose" && echo "$as_me:4382: result: ... $cf_attribute" >&5
+echo "${ECHO_T}... $cf_attribute" >&6
+ cat conftest.h >>confdefs.h
+ case $cf_attribute in #(vi
+ printf) #(vi
+ if test "$cf_printf_attribute" = no ; then
+ cat >>confdefs.h <<EOF
+#define GCC_PRINTFLIKE(fmt,var) /* nothing */
+EOF
+ else
+ cat >>confdefs.h <<EOF
+#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
+EOF
+ fi
+ ;;
+ scanf) #(vi
+ if test "$cf_scanf_attribute" = no ; then
+ cat >>confdefs.h <<EOF
+#define GCC_SCANFLIKE(fmt,var) /* nothing */
+EOF
+ else
+ cat >>confdefs.h <<EOF
+#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
+EOF
+ fi
+ ;;
+ esac
+ fi
+ done
+else
+ fgrep define conftest.i >>confdefs.h
+fi
+rm -rf conftest*
+fi
+
+INTEL_COMPILER=no
+
+if test "$GCC" = yes ; then
+ case $host_os in
+ linux*|gnu*)
+ echo "$as_me:4422: checking if this is really Intel C compiler" >&5
+echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6
+ cf_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -no-gcc"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4427 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+#ifdef __INTEL_COMPILER
+#else
+make an error
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4444: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4447: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4450: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4453: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ INTEL_COMPILER=yes
+cf_save_CFLAGS="$cf_save_CFLAGS -we147 -no-gcc"
+
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ CFLAGS="$cf_save_CFLAGS"
+ echo "$as_me:4464: result: $INTEL_COMPILER" >&5
+echo "${ECHO_T}$INTEL_COMPILER" >&6
+ ;;
+ esac
+fi
+
+cat > conftest.$ac_ext <<EOF
+#line 4471 "${as_me:-configure}"
+int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
+EOF
+
+if test "$INTEL_COMPILER" = yes
+then
+# The "-wdXXX" options suppress warnings:
+# remark #1419: external declaration in primary source file
+# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
+# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
+# remark #193: zero used for undefined preprocessing identifier
+# remark #593: variable "curs_sb_left_arrow" was set but never used
+# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
+# remark #869: parameter "tw" was never referenced
+# remark #981: operands are evaluated in unspecified order
+# warning #279: controlling expression is constant
+
+ { echo "$as_me:4488: checking for $CC warning options..." >&5
+echo "$as_me: checking for $CC warning options..." >&6;}
+ cf_save_CFLAGS="$CFLAGS"
+ EXTRA_CFLAGS="-Wall"
+ for cf_opt in \
+ wd1419 \
+ wd1683 \
+ wd1684 \
+ wd193 \
+ wd593 \
+ wd279 \
+ wd810 \
+ wd869 \
+ wd981
+ do
+ CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+ if { (eval echo "$as_me:4504: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4507: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ test -n "$verbose" && echo "$as_me:4509: result: ... -$cf_opt" >&5
+echo "${ECHO_T}... -$cf_opt" >&6
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
+ fi
+ done
+ CFLAGS="$cf_save_CFLAGS"
+
+elif test "$GCC" = yes
+then
+ { echo "$as_me:4518: checking for $CC warning options..." >&5
+echo "$as_me: checking for $CC warning options..." >&6;}
+ cf_save_CFLAGS="$CFLAGS"
+ EXTRA_CFLAGS=
+ cf_warn_CONST=""
+ test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings"
+ for cf_opt in W Wall \
+ Wbad-function-cast \
+ Wcast-align \
+ Wcast-qual \
+ Winline \
+ Wmissing-declarations \
+ Wmissing-prototypes \
+ Wnested-externs \
+ Wpointer-arith \
+ Wshadow \
+ Wstrict-prototypes \
+ Wundef $cf_warn_CONST Wwrite-strings
+ do
+ CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+ if { (eval echo "$as_me:4538: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4541: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ test -n "$verbose" && echo "$as_me:4543: result: ... -$cf_opt" >&5
+echo "${ECHO_T}... -$cf_opt" >&6
+ case $cf_opt in #(vi
+ Wcast-qual) #(vi
+ CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES"
+ ;;
+ Winline) #(vi
+ case $GCC_VERSION in
+ [34].*)
+ test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6
+
+echo "${as_me:-configure}:4554: testing feature is broken in gcc $GCC_VERSION ..." 1>&5
+
+ continue;;
+ esac
+ ;;
+ esac
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
+ fi
+ done
+ CFLAGS="$cf_save_CFLAGS"
+fi
+rm -rf conftest*
+
+fi
+fi
+
+echo "$as_me:4570: checking if you want to see long compiling messages" >&5
+echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6
+
+# Check whether --enable-echo or --disable-echo was given.
+if test "${enable_echo+set}" = set; then
+ enableval="$enable_echo"
+ test "$enableval" != no && enableval=yes
+ if test "$enableval" != "yes" ; then
+
+ ECHO_LT='--silent'
+ ECHO_LD='@echo linking $@;'
+ RULE_CC='@echo compiling $<'
+ SHOW_CC='@echo compiling $@'
+ ECHO_CC='@'
+
+ else
+
+ ECHO_LT=''
+ ECHO_LD=''
+ RULE_CC=''
+ SHOW_CC=''
+ ECHO_CC=''
+
+ fi
+else
+ enableval=yes
+
+ ECHO_LT=''
+ ECHO_LD=''
+ RULE_CC=''
+ SHOW_CC=''
+ ECHO_CC=''
+
+fi;
+echo "$as_me:4604: result: $enableval" >&5
+echo "${ECHO_T}$enableval" >&6
+
+case $cf_cv_system_name in
+os2*)
+ CFLAGS="$CFLAGS -Zmt"
+ CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__"
+ CXXFLAGS="$CXXFLAGS -Zmt"
+ # autoconf's macro sets -Zexe and suffix both, which conflict:w
+ LDFLAGS="$LDFLAGS -Zmt -Zcrtdll"
+ ac_cv_exeext=.exe
+ ;;
+esac
+
+PROG_EXT="$EXEEXT"
+
+test -n "$PROG_EXT" && cat >>confdefs.h <<EOF
+#define PROG_EXT "$PROG_EXT"
+EOF
+
+echo "$as_me:4624: checking if you want to use dmalloc for testing" >&5
+echo $ECHO_N "checking if you want to use dmalloc for testing... $ECHO_C" >&6
+
+# Check whether --with-dmalloc or --without-dmalloc was given.
+if test "${with_dmalloc+set}" = set; then
+ withval="$with_dmalloc"
+ cat >>confdefs.h <<\EOF
+#define USE_DMALLOC 1
+EOF
+
+ : ${with_cflags:=-g}
+ : ${with_no_leaks:=yes}
+ with_dmalloc=yes
+else
+ with_dmalloc=
+fi;
+echo "$as_me:4640: result: ${with_dmalloc:-no}" >&5
+echo "${ECHO_T}${with_dmalloc:-no}" >&6
+
+case .$with_cflags in #(vi
+.*-g*)
+ case .$CFLAGS in #(vi
+ .*-g*) #(vi
+ ;;
+ *)
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -g
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+ ;;
+ esac
+ ;;
+esac
+
+if test "$with_dmalloc" = yes ; then
+ echo "$as_me:4734: checking for dmalloc.h" >&5
+echo $ECHO_N "checking for dmalloc.h... $ECHO_C" >&6
+if test "${ac_cv_header_dmalloc_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4740 "configure"
+#include "confdefs.h"
+#include <dmalloc.h>
+_ACEOF
+if { (eval echo "$as_me:4744: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:4750: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_dmalloc_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_header_dmalloc_h=no
+fi
+rm -f conftest.err conftest.$ac_ext
+fi
+echo "$as_me:4769: result: $ac_cv_header_dmalloc_h" >&5
+echo "${ECHO_T}$ac_cv_header_dmalloc_h" >&6
+if test $ac_cv_header_dmalloc_h = yes; then
+
+echo "$as_me:4773: checking for dmalloc_debug in -ldmalloc" >&5
+echo $ECHO_N "checking for dmalloc_debug in -ldmalloc... $ECHO_C" >&6
+if test "${ac_cv_lib_dmalloc_dmalloc_debug+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldmalloc $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 4781 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dmalloc_debug ();
+int
+main ()
+{
+dmalloc_debug ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4800: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:4803: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:4806: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4809: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dmalloc_dmalloc_debug=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_dmalloc_dmalloc_debug=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:4820: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5
+echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_debug" >&6
+if test $ac_cv_lib_dmalloc_dmalloc_debug = yes; then
+ cat >>confdefs.h <<EOF
+#define HAVE_LIBDMALLOC 1
+EOF
+
+ LIBS="-ldmalloc $LIBS"
+
+fi
+
+fi
+
+fi
+
+echo "$as_me:4835: checking if you want to use dbmalloc for testing" >&5
+echo $ECHO_N "checking if you want to use dbmalloc for testing... $ECHO_C" >&6
+
+# Check whether --with-dbmalloc or --without-dbmalloc was given.
+if test "${with_dbmalloc+set}" = set; then
+ withval="$with_dbmalloc"
+ cat >>confdefs.h <<\EOF
+#define USE_DBMALLOC 1
+EOF
+
+ : ${with_cflags:=-g}
+ : ${with_no_leaks:=yes}
+ with_dbmalloc=yes
+else
+ with_dbmalloc=
+fi;
+echo "$as_me:4851: result: ${with_dbmalloc:-no}" >&5
+echo "${ECHO_T}${with_dbmalloc:-no}" >&6
+
+case .$with_cflags in #(vi
+.*-g*)
+ case .$CFLAGS in #(vi
+ .*-g*) #(vi
+ ;;
+ *)
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -g
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+ ;;
+ esac
+ ;;
+esac
+
+if test "$with_dbmalloc" = yes ; then
+ echo "$as_me:4945: checking for dbmalloc.h" >&5
+echo $ECHO_N "checking for dbmalloc.h... $ECHO_C" >&6
+if test "${ac_cv_header_dbmalloc_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4951 "configure"
+#include "confdefs.h"
+#include <dbmalloc.h>
+_ACEOF
+if { (eval echo "$as_me:4955: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:4961: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_dbmalloc_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_header_dbmalloc_h=no
+fi
+rm -f conftest.err conftest.$ac_ext
+fi
+echo "$as_me:4980: result: $ac_cv_header_dbmalloc_h" >&5
+echo "${ECHO_T}$ac_cv_header_dbmalloc_h" >&6
+if test $ac_cv_header_dbmalloc_h = yes; then
+
+echo "$as_me:4984: checking for debug_malloc in -ldbmalloc" >&5
+echo $ECHO_N "checking for debug_malloc in -ldbmalloc... $ECHO_C" >&6
+if test "${ac_cv_lib_dbmalloc_debug_malloc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldbmalloc $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 4992 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char debug_malloc ();
+int
+main ()
+{
+debug_malloc ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:5011: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:5014: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:5017: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:5020: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dbmalloc_debug_malloc=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_dbmalloc_debug_malloc=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:5031: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5
+echo "${ECHO_T}$ac_cv_lib_dbmalloc_debug_malloc" >&6
+if test $ac_cv_lib_dbmalloc_debug_malloc = yes; then
+ cat >>confdefs.h <<EOF
+#define HAVE_LIBDBMALLOC 1
+EOF
+
+ LIBS="-ldbmalloc $LIBS"
+
+fi
+
+fi
+
+fi
+
+echo "$as_me:5046: checking if you want to use valgrind for testing" >&5
+echo $ECHO_N "checking if you want to use valgrind for testing... $ECHO_C" >&6
+
+# Check whether --with-valgrind or --without-valgrind was given.
+if test "${with_valgrind+set}" = set; then
+ withval="$with_valgrind"
+ cat >>confdefs.h <<\EOF
+#define USE_VALGRIND 1
+EOF
+
+ : ${with_cflags:=-g}
+ : ${with_no_leaks:=yes}
+ with_valgrind=yes
+else
+ with_valgrind=
+fi;
+echo "$as_me:5062: result: ${with_valgrind:-no}" >&5
+echo "${ECHO_T}${with_valgrind:-no}" >&6
+
+case .$with_cflags in #(vi
+.*-g*)
+ case .$CFLAGS in #(vi
+ .*-g*) #(vi
+ ;;
+ *)
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -g
+do
+case $cf_fix_cppflags in
+no)
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case $cf_add_cflags in
+ -D*)
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=yes
+
+ if test $cf_fix_cppflags = yes ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ elif test "${cf_tst_cflags}" = "\"'" ; then
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+ continue
+ fi
+ ;;
+ esac
+ case "$CPPFLAGS" in
+ *$cf_add_cflags) #(vi
+ ;;
+ *) #(vi
+ case $cf_add_cflags in #(vi
+ -D*)
+ cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \
+ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'`
+
+ ;;
+ esac
+ cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+ ;;
+ esac
+ ;;
+yes)
+ cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+ cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+ test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+ && test -z "${cf_tst_cflags}" \
+ && cf_fix_cppflags=no
+ ;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+ CFLAGS="$CFLAGS $cf_new_cflags"
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+ CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+ EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+ ;;
+ esac
+ ;;
+esac
+
+echo "$as_me:5155: checking if you want to perform memory-leak testing" >&5
+echo $ECHO_N "checking if you want to perform memory-leak testing... $ECHO_C" >&6
+
+# Check whether --enable-leaks or --disable-leaks was given.
+if test "${enable_leaks+set}" = set; then
+ enableval="$enable_leaks"
+ if test "x$enableval" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi
+else
+ : ${with_no_leaks:=no}
+fi;
+echo "$as_me:5165: result: $with_no_leaks" >&5
+echo "${ECHO_T}$with_no_leaks" >&6
+
+if test "$with_no_leaks" = yes ; then
+ cat >>confdefs.h <<\EOF
+#define NO_LEAKS 1
+EOF
+
+ cat >>confdefs.h <<\EOF
+#define YY_NO_LEAKS 1
+EOF
+
+fi
+
+### output makefile
+ac_config_files="$ac_config_files makefile"
+ac_config_commands="$ac_config_commands default"
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overriden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if cmp -s $cache_file confcache; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:5261: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+ac_cs_invocation="\$0 \$@"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+exec 6>&1
+
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\EOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <dickey@invisible-island.net>."
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.52.20101002,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ shift
+ set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
+ shift
+ ;;
+ -*);;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_need_defaults=false;;
+ esac
+
+ case $1 in
+ # Handling of the options.
+EOF
+cat >>$CONFIG_STATUS <<EOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
+ exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:5437: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ shift
+ CONFIG_FILES="$CONFIG_FILES $1"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $1"
+ ac_need_defaults=false;;
+
+ # This is an error.
+ -*) { { echo "$as_me:5456: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+exec 5>>config.log
+cat >&5 << _ACEOF
+
+## ----------------------- ##
+## Running config.status. ##
+## ----------------------- ##
+
+This file was extended by $as_me 2.52.20101002, executed with
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ > $ac_cs_invocation
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+
+_ACEOF
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "makefile" ) CONFIG_FILES="$CONFIG_FILES makefile" ;;
+ "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config_h.in" ;;
+ *) { { echo "$as_me:5494: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+: ${TMPDIR=/tmp}
+{
+ tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=$TMPDIR/cs$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in $TMPDIR" >&2
+ { (exit 1); exit 1; }
+}
+
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@DEFS@,$DEFS,;t t
+s,@LIBS@,$LIBS,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@target@,$target,;t t
+s,@target_cpu@,$target_cpu,;t t
+s,@target_vendor@,$target_vendor,;t t
+s,@target_os@,$target_os,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@CTAGS@,$CTAGS,;t t
+s,@ETAGS@,$ETAGS,;t t
+s,@MAKE_LOWER_TAGS@,$MAKE_LOWER_TAGS,;t t
+s,@MAKE_UPPER_TAGS@,$MAKE_UPPER_TAGS,;t t
+s,@LINT@,$LINT,;t t
+s,@LINT_OPTS@,$LINT_OPTS,;t t
+s,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;t t
+s,@CPP@,$CPP,;t t
+s,@EXTRA_CFLAGS@,$EXTRA_CFLAGS,;t t
+s,@ECHO_LT@,$ECHO_LT,;t t
+s,@ECHO_LD@,$ECHO_LD,;t t
+s,@RULE_CC@,$RULE_CC,;t t
+s,@SHOW_CC@,$SHOW_CC,;t t
+s,@ECHO_CC@,$ECHO_CC,;t t
+s,@PROG_EXT@,$PROG_EXT,;t t
+CEOF
+
+EOF
+
+ cat >>$CONFIG_STATUS <<\EOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ { case "$ac_dir" in
+ [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+ *) as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+ case $as_mkdir_dir in
+ # Skip DOS drivespec
+ ?:) as_incr_dir=$as_mkdir_dir ;;
+ *)
+ as_incr_dir=$as_incr_dir/$as_mkdir_dir
+ test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+ ;;
+ esac
+done; }
+
+ ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case $srcdir in
+ .) ac_srcdir=.
+ if test -z "$ac_dots"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* )
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_dots$srcdir ;;
+ esac
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_dots$INSTALL ;;
+ esac
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:5728: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated automatically by config.status. */
+ configure_input="Generated automatically from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:5746: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:5759: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+EOF
+cat >>$CONFIG_STATUS <<EOF
+ sed "$ac_vpsub
+$extrasub
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_i turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_iA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_iB='\([ ]\),\1#\2define\3'
+ac_iC=' '
+ac_iD='\4,;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ test x"$ac_file" != x- && { echo "$as_me:5825: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:5836: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:5849: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+EOF
+
+# Transform confdefs.h into a list of #define's. We won't use it as a sed
+# script, but as data to insert where we see @DEFS@. We expect AC_SAVE_DEFS to
+# be either 'cat' or 'sort'.
+cat confdefs.h | uniq >conftest.vals
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+echo ' rm -f conftest.frag' >> $CONFIG_STATUS
+while grep . conftest.vals >/dev/null
+do
+ # Write chunks of a limited-size here document to conftest.frag.
+ echo ' cat >> conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> $CONFIG_STATUS
+ echo 'CEOF' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+# Run sed to substitute the contents of conftest.frag into $tmp/in at the
+# marker @DEFS@.
+echo ' cat >> conftest.edit <<CEOF
+/@DEFS@/r conftest.frag
+/@DEFS@/d
+CEOF
+sed -f conftest.edit $tmp/in > $tmp/out
+rm -f $tmp/in
+mv $tmp/out $tmp/in
+rm -f conftest.edit conftest.frag
+' >> $CONFIG_STATUS
+
+cat >>$CONFIG_STATUS <<\EOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated automatically by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated automatically by configure. */" >$tmp/config.h
+ else
+ echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
+ { echo "$as_me:5907: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ { case "$ac_dir" in
+ [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+ *) as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+ case $as_mkdir_dir in
+ # Skip DOS drivespec
+ ?:) as_incr_dir=$as_mkdir_dir ;;
+ *)
+ as_incr_dir=$as_incr_dir/$as_mkdir_dir
+ test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+ ;;
+ esac
+done; }
+
+ fi
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
+done
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+
+{ (exit 0); exit 0; }
+EOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/contrib/byacc/configure.in b/contrib/byacc/configure.in
new file mode 100644
index 000000000000..b251c93adb38
--- /dev/null
+++ b/contrib/byacc/configure.in
@@ -0,0 +1,30 @@
+dnl Process this file with 'autoconf' to produce a 'configure' script
+dnl $Id: configure.in,v 1.10 2010/12/26 19:10:21 tom Exp $
+AC_PREREQ(2.13.20020210)
+AC_REVISION($Revision: 1.10 $)
+AC_INIT(main.c)
+AC_CONFIG_HEADER(config.h:config_h.in)
+
+CF_CHECK_CACHE([AC_CANONICAL_SYSTEM])
+
+AC_ARG_PROGRAM
+AC_PROG_CC
+AC_CONST
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+CF_MAKE_TAGS
+CF_PROG_LINT
+
+CF_ANSI_CC_REQD
+CF_XOPEN_SOURCE
+AC_CHECK_HEADERS(fcntl.h)
+AC_CHECK_FUNCS(atexit)
+CF_MKSTEMP
+
+CF_WITH_WARNINGS(Wwrite-strings)
+CF_DISABLE_ECHO
+CF_PROG_EXT
+CF_DISABLE_LEAKS
+
+### output makefile
+AC_OUTPUT(makefile,,,cat)
diff --git a/contrib/byacc/defs.h b/contrib/byacc/defs.h
new file mode 100644
index 000000000000..7be5748644aa
--- /dev/null
+++ b/contrib/byacc/defs.h
@@ -0,0 +1,438 @@
+/* $Id: defs.h,v 1.36 2011/12/20 01:31:16 tom Exp $ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+#include <ctype.h>
+#include <stdio.h>
+
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define CONCAT(first,second) first #second
+#define CONCAT1(string,number) CONCAT(string, number)
+#define CONCAT2(first,second) #first "." #second
+
+#ifdef YYPATCH
+#define VSTRING(a,b) CONCAT2(a,b) CONCAT1(" ",YYPATCH)
+#else
+#define VSTRING(a,b) CONCAT2(a,b)
+#endif
+
+#define VERSION VSTRING(YYMAJOR, YYMINOR)
+
+/* machine-dependent definitions */
+/* the following definitions are for the Tahoe */
+/* they might have to be changed for other machines */
+
+/* MAXCHAR is the largest unsigned character value */
+/* MAXSHORT is the largest value of a C short */
+/* MINSHORT is the most negative value of a C short */
+/* MAXTABLE is the maximum table size */
+/* BITS_PER_WORD is the number of bits in a C unsigned */
+/* WORDSIZE computes the number of words needed to */
+/* store n bits */
+/* BIT returns the value of the n-th bit starting */
+/* from r (0-indexed) */
+/* SETBIT sets the n-th bit starting from r */
+
+#define MAXCHAR 255
+#define MAXSHORT 32767
+#define MINSHORT -32768
+#define MAXTABLE 32500
+#define BITS_PER_WORD 32
+#define WORDSIZE(n) (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD)
+#define BIT(r, n) ((((r)[(n)>>5])>>((n)&31))&1)
+#define SETBIT(r, n) ((r)[(n)>>5]|=((unsigned)1<<((n)&31)))
+
+/* character names */
+
+#define NUL '\0' /* the null character */
+#define NEWLINE '\n' /* line feed */
+#define SP ' ' /* space */
+#define BS '\b' /* backspace */
+#define HT '\t' /* horizontal tab */
+#define VT '\013' /* vertical tab */
+#define CR '\r' /* carriage return */
+#define FF '\f' /* form feed */
+#define QUOTE '\'' /* single quote */
+#define DOUBLE_QUOTE '\"' /* double quote */
+#define BACKSLASH '\\' /* backslash */
+
+#define UCH(c) (unsigned char)(c)
+
+/* defines for constructing filenames */
+
+#if defined(VMS)
+#define CODE_SUFFIX "_code.c"
+#define DEFINES_SUFFIX "_tab.h"
+#define EXTERNS_SUFFIX "_tab.i"
+#define OUTPUT_SUFFIX "_tab.c"
+#else
+#define CODE_SUFFIX ".code.c"
+#define DEFINES_SUFFIX ".tab.h"
+#define EXTERNS_SUFFIX ".tab.i"
+#define OUTPUT_SUFFIX ".tab.c"
+#endif
+#define VERBOSE_SUFFIX ".output"
+#define GRAPH_SUFFIX ".dot"
+
+/* keyword codes */
+
+#define TOKEN 0
+#define LEFT 1
+#define RIGHT 2
+#define NONASSOC 3
+#define MARK 4
+#define TEXT 5
+#define TYPE 6
+#define START 7
+#define UNION 8
+#define IDENT 9
+#define EXPECT 10
+#define EXPECT_RR 11
+#define PURE_PARSER 12
+#define PARSE_PARAM 13
+#define LEX_PARAM 14
+#define POSIX_YACC 15
+
+/* symbol classes */
+
+#define UNKNOWN 0
+#define TERM 1
+#define NONTERM 2
+
+/* the undefined value */
+
+#define UNDEFINED (-1)
+
+/* action codes */
+
+#define SHIFT 1
+#define REDUCE 2
+
+/* character macros */
+
+#define IS_IDENT(c) (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$')
+#define IS_OCTAL(c) ((c) >= '0' && (c) <= '7')
+#define NUMERIC_VALUE(c) ((c) - '0')
+
+/* symbol macros */
+
+#define ISTOKEN(s) ((s) < start_symbol)
+#define ISVAR(s) ((s) >= start_symbol)
+
+/* storage allocation macros */
+
+#define CALLOC(k,n) (calloc((size_t)(k),(size_t)(n)))
+#define FREE(x) (free((char*)(x)))
+#define MALLOC(n) (malloc((size_t)(n)))
+#define NEW(t) ((t*)allocate(sizeof(t)))
+#define NEW2(n,t) ((t*)allocate(((size_t)(n)*sizeof(t))))
+#define REALLOC(p,n) (realloc((char*)(p),(size_t)(n)))
+
+#define DO_FREE(x) if (x) { FREE(x); x = 0; }
+
+#define NO_SPACE(p) if (p == 0) no_space(); assert(p != 0)
+
+/* messages */
+#define PLURAL(n) ((n) > 1 ? "s" : "")
+
+typedef char Assoc_t;
+typedef char Class_t;
+typedef short Index_t;
+typedef short Value_t;
+
+/* the structure of a symbol table entry */
+
+typedef struct bucket bucket;
+struct bucket
+{
+ struct bucket *link;
+ struct bucket *next;
+ char *name;
+ char *tag;
+ Value_t value;
+ Index_t index;
+ Value_t prec;
+ Class_t class;
+ Assoc_t assoc;
+};
+
+/* the structure of the LR(0) state machine */
+
+typedef struct core core;
+struct core
+{
+ struct core *next;
+ struct core *link;
+ Value_t number;
+ Value_t accessing_symbol;
+ Value_t nitems;
+ Value_t items[1];
+};
+
+/* the structure used to record shifts */
+
+typedef struct shifts shifts;
+struct shifts
+{
+ struct shifts *next;
+ Value_t number;
+ Value_t nshifts;
+ Value_t shift[1];
+};
+
+/* the structure used to store reductions */
+
+typedef struct reductions reductions;
+struct reductions
+{
+ struct reductions *next;
+ Value_t number;
+ Value_t nreds;
+ Value_t rules[1];
+};
+
+/* the structure used to represent parser actions */
+
+typedef struct action action;
+struct action
+{
+ struct action *next;
+ Value_t symbol;
+ Value_t number;
+ Value_t prec;
+ char action_code;
+ Assoc_t assoc;
+ char suppressed;
+};
+
+/* the structure used to store parse/lex parameters */
+typedef struct param param;
+struct param
+{
+ struct param *next;
+ char *name; /* parameter name */
+ char *type; /* everything before parameter name */
+ char *type2; /* everything after parameter name */
+};
+
+/* global variables */
+
+extern char dflag;
+extern char gflag;
+extern char iflag;
+extern char lflag;
+extern char rflag;
+extern char sflag;
+extern char tflag;
+extern char vflag;
+extern const char *symbol_prefix;
+
+extern const char *myname;
+extern char *cptr;
+extern char *line;
+extern int lineno;
+extern int outline;
+extern int exit_code;
+
+extern const char *const banner[];
+extern const char *const xdecls[];
+extern const char *const tables[];
+extern const char *const global_vars[];
+extern const char *const impure_vars[];
+extern const char *const hdr_defs[];
+extern const char *const hdr_vars[];
+extern const char *const body_1[];
+extern const char *const body_vars[];
+extern const char *const body_2[];
+extern const char *const body_3[];
+extern const char *const trailer[];
+extern const char *const trailer_2[];
+
+extern char *code_file_name;
+extern char *input_file_name;
+extern char *defines_file_name;
+extern char *externs_file_name;
+
+extern FILE *action_file;
+extern FILE *code_file;
+extern FILE *defines_file;
+extern FILE *externs_file;
+extern FILE *input_file;
+extern FILE *output_file;
+extern FILE *text_file;
+extern FILE *union_file;
+extern FILE *verbose_file;
+extern FILE *graph_file;
+
+extern int nitems;
+extern int nrules;
+extern int nsyms;
+extern int ntokens;
+extern int nvars;
+extern int ntags;
+
+extern char unionized;
+extern char line_format[];
+
+extern Value_t start_symbol;
+extern char **symbol_name;
+extern char **symbol_pname;
+extern Value_t *symbol_value;
+extern Value_t *symbol_prec;
+extern char *symbol_assoc;
+
+extern Value_t *ritem;
+extern Value_t *rlhs;
+extern Value_t *rrhs;
+extern Value_t *rprec;
+extern Assoc_t *rassoc;
+
+extern Value_t **derives;
+extern char *nullable;
+
+extern bucket *first_symbol;
+extern bucket *last_symbol;
+
+extern int pure_parser;
+extern int nstates;
+extern core *first_state;
+extern shifts *first_shift;
+extern reductions *first_reduction;
+extern Value_t *accessing_symbol;
+extern core **state_table;
+extern shifts **shift_table;
+extern reductions **reduction_table;
+extern unsigned *LA;
+extern Value_t *LAruleno;
+extern Value_t *lookaheads;
+extern Value_t *goto_map;
+extern Value_t *from_state;
+extern Value_t *to_state;
+
+extern action **parser;
+extern int SRexpect;
+extern int RRexpect;
+extern int SRtotal;
+extern int RRtotal;
+extern Value_t *SRconflicts;
+extern Value_t *RRconflicts;
+extern Value_t *defred;
+extern Value_t *rules_used;
+extern Value_t nunused;
+extern Value_t final_state;
+
+extern Value_t *itemset;
+extern Value_t *itemsetend;
+extern unsigned *ruleset;
+
+extern param *lex_param;
+extern param *parse_param;
+
+/* global functions */
+
+extern bucket *lookup(const char *);
+extern bucket *make_bucket(const char *);
+
+#ifndef GCC_NORETURN
+#define GCC_NORETURN /* nothing */
+#endif
+
+#ifndef GCC_UNUSED
+#define GCC_UNUSED /* nothing */
+#endif
+
+/* closure.c */
+extern void closure(Value_t * nucleus, int n);
+extern void finalize_closure(void);
+extern void set_first_derives(void);
+
+/* error.c */
+extern void default_action_warning(void);
+extern void dollar_error(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
+extern void dollar_warning(int a_lineno, int i);
+extern void fatal(const char *msg) GCC_NORETURN;
+extern void illegal_character(char *c_cptr) GCC_NORETURN;
+extern void illegal_tag(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN;
+extern void missing_brace(void) GCC_NORETURN;
+extern void no_grammar(void) GCC_NORETURN;
+extern void no_space(void) GCC_NORETURN;
+extern void open_error(const char *filename) GCC_NORETURN;
+extern void over_unionized(char *u_cptr) GCC_NORETURN;
+extern void prec_redeclared(void);
+extern void reprec_warning(char *s);
+extern void restarted_warning(void);
+extern void retyped_warning(char *s);
+extern void revalued_warning(char *s);
+extern void syntax_error(int st_lineno, char *st_line, char *st_cptr) GCC_NORETURN;
+extern void terminal_lhs(int s_lineno) GCC_NORETURN;
+extern void terminal_start(char *s) GCC_NORETURN;
+extern void tokenized_start(char *s) GCC_NORETURN;
+extern void undefined_goal(char *s) GCC_NORETURN;
+extern void undefined_symbol_warning(char *s);
+extern void unexpected_EOF(void) GCC_NORETURN;
+extern void unknown_rhs(int i) GCC_NORETURN;
+extern void unterminated_action(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
+extern void unterminated_comment(int c_lineno, char *c_line, char *c_cptr) GCC_NORETURN;
+extern void unterminated_string(int s_lineno, char *s_line, char *s_cptr) GCC_NORETURN;
+extern void unterminated_text(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN;
+extern void unterminated_union(int u_lineno, char *u_line, char *u_cptr) GCC_NORETURN;
+extern void untyped_lhs(void) GCC_NORETURN;
+extern void untyped_rhs(int i, char *s) GCC_NORETURN;
+extern void used_reserved(char *s) GCC_NORETURN;
+
+/* graph.c */
+extern void graph(void);
+
+/* lalr.c */
+extern void create_symbol_table(void);
+extern void free_symbol_table(void);
+extern void free_symbols(void);
+
+/* lalr.c */
+extern void lalr(void);
+
+/* lr0.c */
+extern void lr0(void);
+extern void show_cores(void);
+extern void show_ritems(void);
+extern void show_rrhs(void);
+extern void show_shifts(void);
+
+/* main.c */
+extern void *allocate(size_t n);
+extern void done(int k) GCC_NORETURN;
+
+/* mkpar.c */
+extern void free_parser(void);
+extern void make_parser(void);
+
+/* output.c */
+extern void output(void);
+
+/* reader.c */
+extern void reader(void);
+
+/* skeleton.c */
+extern void write_section(FILE *fp, const char *const section[]);
+
+/* verbose.c */
+extern void verbose(void);
+
+/* warshall.c */
+extern void reflexive_transitive_closure(unsigned *R, int n);
+
+#ifdef NO_LEAKS
+extern void lr0_leaks(void);
+extern void lalr_leaks(void);
+extern void mkpar_leaks(void);
+extern void output_leaks(void);
+extern void reader_leaks(void);
+#endif
diff --git a/contrib/byacc/descrip.mms b/contrib/byacc/descrip.mms
new file mode 100644
index 000000000000..0dcb70fbbea0
--- /dev/null
+++ b/contrib/byacc/descrip.mms
@@ -0,0 +1,37 @@
+CFLAGS = /decc $(CC_OPTIONS)/Diagnostics /Define=(NDEBUG) /Object=$@ /Include=([])
+
+LINKFLAGS = /map=$(MMS$TARGET_NAME)/cross_reference/exec=$(MMS$TARGET_NAME).exe
+
+LINKER = cc
+
+OBJS = closure.obj, \
+ error.obj, \
+ lalr.obj, \
+ lr0.obj, \
+ main.obj, \
+ mkpar.obj, \
+ output.obj, \
+ reader.obj, \
+ skeleton.obj, \
+ symtab.obj, \
+ verbose.obj, \
+ warshall.obj
+
+PROGRAM = yacc.exe
+
+all : $(PROGRAM)
+
+$(PROGRAM) : $(OBJS)
+ @ write sys$output "Loading $(PROGRAM) ... "
+ @ $(LINK) $(LINKFLAGS) $(OBJS)
+ @ write sys$output "done"
+
+clean :
+ @- if f$search("*.obj") .nes. "" then delete *.obj;*
+ @- if f$search("*.lis") .nes. "" then delete *.lis;*
+ @- if f$search("*.log") .nes. "" then delete *.log;*
+
+clobber : clean
+ @- if f$search("*.exe") .nes. "" then delete *.exe;*
+
+$(OBJS) : defs.h
diff --git a/contrib/byacc/error.c b/contrib/byacc/error.c
new file mode 100644
index 000000000000..3bab31b8addc
--- /dev/null
+++ b/contrib/byacc/error.c
@@ -0,0 +1,288 @@
+/* $Id: error.c,v 1.9 2011/09/05 23:27:43 tom Exp $ */
+
+/* routines for printing error messages */
+
+#include "defs.h"
+
+void
+fatal(const char *msg)
+{
+ fprintf(stderr, "%s: f - %s\n", myname, msg);
+ done(2);
+}
+
+void
+no_space(void)
+{
+ fprintf(stderr, "%s: f - out of space\n", myname);
+ done(2);
+}
+
+void
+open_error(const char *filename)
+{
+ fprintf(stderr, "%s: f - cannot open \"%s\"\n", myname, filename);
+ done(2);
+}
+
+void
+missing_brace(void)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", missing '}'\n",
+ myname, lineno, input_file_name);
+ done(1);
+}
+
+void
+unexpected_EOF(void)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", unexpected end-of-file\n",
+ myname, lineno, input_file_name);
+ done(1);
+}
+
+static void
+print_pos(char *st_line, char *st_cptr)
+{
+ char *s;
+
+ if (st_line == 0)
+ return;
+ for (s = st_line; *s != '\n'; ++s)
+ {
+ if (isprint(UCH(*s)) || *s == '\t')
+ putc(*s, stderr);
+ else
+ putc('?', stderr);
+ }
+ putc('\n', stderr);
+ for (s = st_line; s < st_cptr; ++s)
+ {
+ if (*s == '\t')
+ putc('\t', stderr);
+ else
+ putc(' ', stderr);
+ }
+ putc('^', stderr);
+ putc('\n', stderr);
+}
+
+void
+syntax_error(int st_lineno, char *st_line, char *st_cptr)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", syntax error\n",
+ myname, st_lineno, input_file_name);
+ print_pos(st_line, st_cptr);
+ done(1);
+}
+
+void
+unterminated_comment(int c_lineno, char *c_line, char *c_cptr)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", unmatched /*\n",
+ myname, c_lineno, input_file_name);
+ print_pos(c_line, c_cptr);
+ done(1);
+}
+
+void
+unterminated_string(int s_lineno, char *s_line, char *s_cptr)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", unterminated string\n",
+ myname, s_lineno, input_file_name);
+ print_pos(s_line, s_cptr);
+ done(1);
+}
+
+void
+unterminated_text(int t_lineno, char *t_line, char *t_cptr)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", unmatched %%{\n",
+ myname, t_lineno, input_file_name);
+ print_pos(t_line, t_cptr);
+ done(1);
+}
+
+void
+unterminated_union(int u_lineno, char *u_line, char *u_cptr)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", unterminated %%union \
+declaration\n", myname, u_lineno, input_file_name);
+ print_pos(u_line, u_cptr);
+ done(1);
+}
+
+void
+over_unionized(char *u_cptr)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", too many %%union \
+declarations\n", myname, lineno, input_file_name);
+ print_pos(line, u_cptr);
+ done(1);
+}
+
+void
+illegal_tag(int t_lineno, char *t_line, char *t_cptr)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", illegal tag\n",
+ myname, t_lineno, input_file_name);
+ print_pos(t_line, t_cptr);
+ done(1);
+}
+
+void
+illegal_character(char *c_cptr)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", illegal character\n",
+ myname, lineno, input_file_name);
+ print_pos(line, c_cptr);
+ done(1);
+}
+
+void
+used_reserved(char *s)
+{
+ fprintf(stderr,
+ "%s: e - line %d of \"%s\", illegal use of reserved symbol \
+%s\n", myname, lineno, input_file_name, s);
+ done(1);
+}
+
+void
+tokenized_start(char *s)
+{
+ fprintf(stderr,
+ "%s: e - line %d of \"%s\", the start symbol %s cannot be \
+declared to be a token\n", myname, lineno, input_file_name, s);
+ done(1);
+}
+
+void
+retyped_warning(char *s)
+{
+ fprintf(stderr, "%s: w - line %d of \"%s\", the type of %s has been \
+redeclared\n", myname, lineno, input_file_name, s);
+}
+
+void
+reprec_warning(char *s)
+{
+ fprintf(stderr,
+ "%s: w - line %d of \"%s\", the precedence of %s has been \
+redeclared\n", myname, lineno, input_file_name, s);
+}
+
+void
+revalued_warning(char *s)
+{
+ fprintf(stderr, "%s: w - line %d of \"%s\", the value of %s has been \
+redeclared\n", myname, lineno, input_file_name, s);
+}
+
+void
+terminal_start(char *s)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", the start symbol %s is a \
+token\n", myname, lineno, input_file_name, s);
+ done(1);
+}
+
+void
+restarted_warning(void)
+{
+ fprintf(stderr, "%s: w - line %d of \"%s\", the start symbol has been \
+redeclared\n", myname, lineno, input_file_name);
+}
+
+void
+no_grammar(void)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", no grammar has been \
+specified\n", myname, lineno, input_file_name);
+ done(1);
+}
+
+void
+terminal_lhs(int s_lineno)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", a token appears on the lhs \
+of a production\n", myname, s_lineno, input_file_name);
+ done(1);
+}
+
+void
+prec_redeclared(void)
+{
+ fprintf(stderr, "%s: w - line %d of \"%s\", conflicting %%prec \
+specifiers\n", myname, lineno, input_file_name);
+}
+
+void
+unterminated_action(int a_lineno, char *a_line, char *a_cptr)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", unterminated action\n",
+ myname, a_lineno, input_file_name);
+ print_pos(a_line, a_cptr);
+ done(1);
+}
+
+void
+dollar_warning(int a_lineno, int i)
+{
+ fprintf(stderr, "%s: w - line %d of \"%s\", $%d references beyond the \
+end of the current rule\n", myname, a_lineno, input_file_name, i);
+}
+
+void
+dollar_error(int a_lineno, char *a_line, char *a_cptr)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", illegal $-name\n",
+ myname, a_lineno, input_file_name);
+ print_pos(a_line, a_cptr);
+ done(1);
+}
+
+void
+untyped_lhs(void)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", $$ is untyped\n",
+ myname, lineno, input_file_name);
+ done(1);
+}
+
+void
+untyped_rhs(int i, char *s)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", $%d (%s) is untyped\n",
+ myname, lineno, input_file_name, i, s);
+ done(1);
+}
+
+void
+unknown_rhs(int i)
+{
+ fprintf(stderr, "%s: e - line %d of \"%s\", $%d is untyped\n",
+ myname, lineno, input_file_name, i);
+ done(1);
+}
+
+void
+default_action_warning(void)
+{
+ fprintf(stderr,
+ "%s: w - line %d of \"%s\", the default action assigns an \
+undefined value to $$\n", myname, lineno, input_file_name);
+}
+
+void
+undefined_goal(char *s)
+{
+ fprintf(stderr, "%s: e - the start symbol %s is undefined\n", myname, s);
+ done(1);
+}
+
+void
+undefined_symbol_warning(char *s)
+{
+ fprintf(stderr, "%s: w - the symbol %s is undefined\n", myname, s);
+}
diff --git a/contrib/byacc/graph.c b/contrib/byacc/graph.c
new file mode 100644
index 000000000000..2e312314d7a6
--- /dev/null
+++ b/contrib/byacc/graph.c
@@ -0,0 +1,112 @@
+/* $Id: graph.c,v 1.7 2009/10/27 09:25:20 tom Exp $ */
+
+#include "defs.h"
+
+static void graph_state(int stateno);
+static void graph_LA(int ruleno);
+
+static unsigned int larno;
+
+void
+graph(void)
+{
+ int i;
+ int j;
+ shifts *sp;
+ int sn;
+ int as;
+
+ if (!gflag)
+ return;
+
+ for (i = 0; i < nstates; ++i)
+ {
+ closure(state_table[i]->items, state_table[i]->nitems);
+ graph_state(i);
+ }
+
+ fprintf(graph_file, "\n\n");
+ for (i = 0; i < nstates; ++i)
+ {
+
+ sp = shift_table[i];
+ if (sp)
+ for (j = 0; j < sp->nshifts; ++j)
+ {
+ sn = sp->shift[j];
+ as = accessing_symbol[sn];
+ fprintf(graph_file,
+ "\tq%d -> q%d [label=\"%s\"];\n",
+ i, sn, symbol_pname[as]);
+ }
+ }
+
+ fprintf(graph_file, "}\n");
+
+ for (i = 0; i < nsyms; ++i)
+ FREE(symbol_pname[i]);
+ FREE(symbol_pname);
+}
+
+static void
+graph_state(int stateno)
+{
+ short *isp;
+ int rule;
+ short *sp;
+ short *sp1;
+
+ larno = (unsigned)lookaheads[stateno];
+ fprintf(graph_file, "\n\tq%d [label=\"%d:\\l", stateno, stateno);
+
+ for (isp = itemset; isp < itemsetend; isp++)
+ {
+ sp1 = sp = ritem + *isp;
+
+ while (*sp >= 0)
+ ++sp;
+ rule = -(*sp);
+ fprintf(graph_file, " %s -> ", symbol_pname[rlhs[rule]]);
+
+ for (sp = ritem + rrhs[rule]; sp < sp1; sp++)
+ fprintf(graph_file, "%s ", symbol_pname[*sp]);
+
+ putc('.', graph_file);
+
+ while (*sp >= 0)
+ {
+ fprintf(graph_file, " %s", symbol_pname[*sp]);
+ sp++;
+ }
+
+ if (*sp1 < 0)
+ graph_LA(-*sp1);
+
+ fprintf(graph_file, "\\l");
+ }
+ fprintf(graph_file, "\"];");
+}
+
+static void
+graph_LA(int ruleno)
+{
+ int i;
+ unsigned tokensetsize;
+ unsigned *rowp;
+
+ tokensetsize = (unsigned)WORDSIZE(ntokens);
+
+ if (ruleno == LAruleno[larno])
+ {
+ rowp = LA + larno * tokensetsize;
+
+ fprintf(graph_file, " { ");
+ for (i = ntokens - 1; i >= 0; i--)
+ {
+ if (BIT(rowp, i))
+ fprintf(graph_file, "%s ", symbol_pname[i]);
+ }
+ fprintf(graph_file, "}");
+ ++larno;
+ }
+}
diff --git a/contrib/byacc/install-sh b/contrib/byacc/install-sh
new file mode 100755
index 000000000000..462fa9c3d57b
--- /dev/null
+++ b/contrib/byacc/install-sh
@@ -0,0 +1,294 @@
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+#
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# 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
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd=$cpprog
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd=$stripprog
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "$0: no input file specified" >&2
+ exit 1
+else
+ :
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d "$dst" ]; then
+ instcmd=:
+ chmodcmd=""
+ else
+ instcmd=$mkdirprog
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f "$src" ] || [ -d "$src" ]
+ then
+ :
+ else
+ echo "$0: $src does not exist" >&2
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "$0: no destination specified" >&2
+ exit 1
+ else
+ :
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d "$dst" ]
+ then
+ dst=$dst/`basename "$src"`
+ else
+ :
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+ '
+IFS="${IFS-$defaultIFS}"
+
+oIFS=$IFS
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS=$oIFS
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp=$pathcomp$1
+ shift
+
+ if [ ! -d "$pathcomp" ] ;
+ then
+ $mkdirprog "$pathcomp"
+ else
+ :
+ fi
+
+ pathcomp=$pathcomp/
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd "$dst" &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename "$dst"`
+ else
+ dstfile=`basename "$dst" $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename "$dst"`
+ else
+ :
+ fi
+
+# Make a couple of temp file names in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+ rmtmp=$dstdir/#rm.$$#
+
+# Trap to clean up temp files at exit.
+
+ trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+ trap '(exit $?); exit' 1 2 13 15
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd "$src" "$dsttmp" &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
+
+# Now remove or move aside any old file at destination location. We try this
+# two ways since rm can't unlink itself on some systems and the destination
+# file might be busy for other reasons. In this case, the final cleanup
+# might fail but the new file should still install successfully.
+
+{
+ if [ -f "$dstdir/$dstfile" ]
+ then
+ $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
+ $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
+ {
+ echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+ (exit 1); exit
+ }
+ else
+ :
+ fi
+} &&
+
+# Now rename the file to the real destination.
+
+ $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+
+fi &&
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+
+{
+ (exit 0); exit
+}
diff --git a/contrib/byacc/lalr.c b/contrib/byacc/lalr.c
new file mode 100644
index 000000000000..eb5e309b008b
--- /dev/null
+++ b/contrib/byacc/lalr.c
@@ -0,0 +1,655 @@
+/* $Id: lalr.c,v 1.9 2009/10/27 09:49:27 tom Exp $ */
+
+#include "defs.h"
+
+typedef struct shorts
+{
+ struct shorts *next;
+ Value_t value;
+}
+shorts;
+
+static Value_t map_goto(int state, int symbol);
+static Value_t **transpose(Value_t ** R, int n);
+static void add_lookback_edge(int stateno, int ruleno, int gotono);
+static void build_relations(void);
+static void compute_FOLLOWS(void);
+static void compute_lookaheads(void);
+static void digraph(Value_t ** relation);
+static void initialize_F(void);
+static void initialize_LA(void);
+static void set_accessing_symbol(void);
+static void set_goto_map(void);
+static void set_maxrhs(void);
+static void set_reduction_table(void);
+static void set_shift_table(void);
+static void set_state_table(void);
+static void traverse(int i);
+
+static int tokensetsize;
+Value_t *lookaheads;
+Value_t *LAruleno;
+unsigned *LA;
+Value_t *accessing_symbol;
+core **state_table;
+shifts **shift_table;
+reductions **reduction_table;
+Value_t *goto_map;
+Value_t *from_state;
+Value_t *to_state;
+
+static Value_t infinity;
+static int maxrhs;
+static int ngotos;
+static unsigned *F;
+static Value_t **includes;
+static shorts **lookback;
+static Value_t **R;
+static Value_t *INDEX;
+static Value_t *VERTICES;
+static Value_t top;
+
+void
+lalr(void)
+{
+ tokensetsize = WORDSIZE(ntokens);
+
+ set_state_table();
+ set_accessing_symbol();
+ set_shift_table();
+ set_reduction_table();
+ set_maxrhs();
+ initialize_LA();
+ set_goto_map();
+ initialize_F();
+ build_relations();
+ compute_FOLLOWS();
+ compute_lookaheads();
+}
+
+static void
+set_state_table(void)
+{
+ core *sp;
+
+ state_table = NEW2(nstates, core *);
+ for (sp = first_state; sp; sp = sp->next)
+ state_table[sp->number] = sp;
+}
+
+static void
+set_accessing_symbol(void)
+{
+ core *sp;
+
+ accessing_symbol = NEW2(nstates, Value_t);
+ for (sp = first_state; sp; sp = sp->next)
+ accessing_symbol[sp->number] = sp->accessing_symbol;
+}
+
+static void
+set_shift_table(void)
+{
+ shifts *sp;
+
+ shift_table = NEW2(nstates, shifts *);
+ for (sp = first_shift; sp; sp = sp->next)
+ shift_table[sp->number] = sp;
+}
+
+static void
+set_reduction_table(void)
+{
+ reductions *rp;
+
+ reduction_table = NEW2(nstates, reductions *);
+ for (rp = first_reduction; rp; rp = rp->next)
+ reduction_table[rp->number] = rp;
+}
+
+static void
+set_maxrhs(void)
+{
+ Value_t *itemp;
+ Value_t *item_end;
+ int length;
+ int max;
+
+ length = 0;
+ max = 0;
+ item_end = ritem + nitems;
+ for (itemp = ritem; itemp < item_end; itemp++)
+ {
+ if (*itemp >= 0)
+ {
+ length++;
+ }
+ else
+ {
+ if (length > max)
+ max = length;
+ length = 0;
+ }
+ }
+
+ maxrhs = max;
+}
+
+static void
+initialize_LA(void)
+{
+ int i, j, k;
+ reductions *rp;
+
+ lookaheads = NEW2(nstates + 1, Value_t);
+
+ k = 0;
+ for (i = 0; i < nstates; i++)
+ {
+ lookaheads[i] = (Value_t) k;
+ rp = reduction_table[i];
+ if (rp)
+ k += rp->nreds;
+ }
+ lookaheads[nstates] = (Value_t) k;
+
+ LA = NEW2(k * tokensetsize, unsigned);
+ LAruleno = NEW2(k, Value_t);
+ lookback = NEW2(k, shorts *);
+
+ k = 0;
+ for (i = 0; i < nstates; i++)
+ {
+ rp = reduction_table[i];
+ if (rp)
+ {
+ for (j = 0; j < rp->nreds; j++)
+ {
+ LAruleno[k] = rp->rules[j];
+ k++;
+ }
+ }
+ }
+}
+
+static void
+set_goto_map(void)
+{
+ shifts *sp;
+ int i;
+ int symbol;
+ int k;
+ Value_t *temp_map;
+ Value_t state2;
+ Value_t state1;
+
+ goto_map = NEW2(nvars + 1, Value_t) - ntokens;
+ temp_map = NEW2(nvars + 1, Value_t) - ntokens;
+
+ ngotos = 0;
+ for (sp = first_shift; sp; sp = sp->next)
+ {
+ for (i = sp->nshifts - 1; i >= 0; i--)
+ {
+ symbol = accessing_symbol[sp->shift[i]];
+
+ if (ISTOKEN(symbol))
+ break;
+
+ if (ngotos == MAXSHORT)
+ fatal("too many gotos");
+
+ ngotos++;
+ goto_map[symbol]++;
+ }
+ }
+
+ k = 0;
+ for (i = ntokens; i < nsyms; i++)
+ {
+ temp_map[i] = (Value_t) k;
+ k += goto_map[i];
+ }
+
+ for (i = ntokens; i < nsyms; i++)
+ goto_map[i] = temp_map[i];
+
+ goto_map[nsyms] = (Value_t) ngotos;
+ temp_map[nsyms] = (Value_t) ngotos;
+
+ from_state = NEW2(ngotos, Value_t);
+ to_state = NEW2(ngotos, Value_t);
+
+ for (sp = first_shift; sp; sp = sp->next)
+ {
+ state1 = sp->number;
+ for (i = sp->nshifts - 1; i >= 0; i--)
+ {
+ state2 = sp->shift[i];
+ symbol = accessing_symbol[state2];
+
+ if (ISTOKEN(symbol))
+ break;
+
+ k = temp_map[symbol]++;
+ from_state[k] = state1;
+ to_state[k] = state2;
+ }
+ }
+
+ FREE(temp_map + ntokens);
+}
+
+/* Map_goto maps a state/symbol pair into its numeric representation. */
+
+static Value_t
+map_goto(int state, int symbol)
+{
+ int high;
+ int low;
+ int middle;
+ int s;
+
+ low = goto_map[symbol];
+ high = goto_map[symbol + 1];
+
+ for (;;)
+ {
+ assert(low <= high);
+ middle = (low + high) >> 1;
+ s = from_state[middle];
+ if (s == state)
+ return (Value_t) (middle);
+ else if (s < state)
+ low = middle + 1;
+ else
+ high = middle - 1;
+ }
+}
+
+static void
+initialize_F(void)
+{
+ int i;
+ int j;
+ int k;
+ shifts *sp;
+ Value_t *edge;
+ unsigned *rowp;
+ Value_t *rp;
+ Value_t **reads;
+ int nedges;
+ int stateno;
+ int symbol;
+ int nwords;
+
+ nwords = ngotos * tokensetsize;
+ F = NEW2(nwords, unsigned);
+
+ reads = NEW2(ngotos, Value_t *);
+ edge = NEW2(ngotos + 1, Value_t);
+ nedges = 0;
+
+ rowp = F;
+ for (i = 0; i < ngotos; i++)
+ {
+ stateno = to_state[i];
+ sp = shift_table[stateno];
+
+ if (sp)
+ {
+ k = sp->nshifts;
+
+ for (j = 0; j < k; j++)
+ {
+ symbol = accessing_symbol[sp->shift[j]];
+ if (ISVAR(symbol))
+ break;
+ SETBIT(rowp, symbol);
+ }
+
+ for (; j < k; j++)
+ {
+ symbol = accessing_symbol[sp->shift[j]];
+ if (nullable[symbol])
+ edge[nedges++] = map_goto(stateno, symbol);
+ }
+
+ if (nedges)
+ {
+ reads[i] = rp = NEW2(nedges + 1, Value_t);
+
+ for (j = 0; j < nedges; j++)
+ rp[j] = edge[j];
+
+ rp[nedges] = -1;
+ nedges = 0;
+ }
+ }
+
+ rowp += tokensetsize;
+ }
+
+ SETBIT(F, 0);
+ digraph(reads);
+
+ for (i = 0; i < ngotos; i++)
+ {
+ if (reads[i])
+ FREE(reads[i]);
+ }
+
+ FREE(reads);
+ FREE(edge);
+}
+
+static void
+build_relations(void)
+{
+ int i;
+ int j;
+ int k;
+ Value_t *rulep;
+ Value_t *rp;
+ shifts *sp;
+ int length;
+ int nedges;
+ int done_flag;
+ Value_t state1;
+ Value_t stateno;
+ int symbol1;
+ int symbol2;
+ Value_t *shortp;
+ Value_t *edge;
+ Value_t *states;
+ Value_t **new_includes;
+
+ includes = NEW2(ngotos, Value_t *);
+ edge = NEW2(ngotos + 1, Value_t);
+ states = NEW2(maxrhs + 1, Value_t);
+
+ for (i = 0; i < ngotos; i++)
+ {
+ nedges = 0;
+ state1 = from_state[i];
+ symbol1 = accessing_symbol[to_state[i]];
+
+ for (rulep = derives[symbol1]; *rulep >= 0; rulep++)
+ {
+ length = 1;
+ states[0] = state1;
+ stateno = state1;
+
+ for (rp = ritem + rrhs[*rulep]; *rp >= 0; rp++)
+ {
+ symbol2 = *rp;
+ sp = shift_table[stateno];
+ k = sp->nshifts;
+
+ for (j = 0; j < k; j++)
+ {
+ stateno = sp->shift[j];
+ if (accessing_symbol[stateno] == symbol2)
+ break;
+ }
+
+ states[length++] = stateno;
+ }
+
+ add_lookback_edge(stateno, *rulep, i);
+
+ length--;
+ done_flag = 0;
+ while (!done_flag)
+ {
+ done_flag = 1;
+ rp--;
+ if (ISVAR(*rp))
+ {
+ stateno = states[--length];
+ edge[nedges++] = map_goto(stateno, *rp);
+ if (nullable[*rp] && length > 0)
+ done_flag = 0;
+ }
+ }
+ }
+
+ if (nedges)
+ {
+ includes[i] = shortp = NEW2(nedges + 1, Value_t);
+ for (j = 0; j < nedges; j++)
+ shortp[j] = edge[j];
+ shortp[nedges] = -1;
+ }
+ }
+
+ new_includes = transpose(includes, ngotos);
+
+ for (i = 0; i < ngotos; i++)
+ if (includes[i])
+ FREE(includes[i]);
+
+ FREE(includes);
+
+ includes = new_includes;
+
+ FREE(edge);
+ FREE(states);
+}
+
+static void
+add_lookback_edge(int stateno, int ruleno, int gotono)
+{
+ int i, k;
+ int found;
+ shorts *sp;
+
+ i = lookaheads[stateno];
+ k = lookaheads[stateno + 1];
+ found = 0;
+ while (!found && i < k)
+ {
+ if (LAruleno[i] == ruleno)
+ found = 1;
+ else
+ ++i;
+ }
+ assert(found);
+
+ sp = NEW(shorts);
+ sp->next = lookback[i];
+ sp->value = (Value_t) gotono;
+ lookback[i] = sp;
+}
+
+static Value_t **
+transpose(Value_t ** R2, int n)
+{
+ Value_t **new_R;
+ Value_t **temp_R;
+ Value_t *nedges;
+ Value_t *sp;
+ int i;
+ int k;
+
+ nedges = NEW2(n, Value_t);
+
+ for (i = 0; i < n; i++)
+ {
+ sp = R2[i];
+ if (sp)
+ {
+ while (*sp >= 0)
+ nedges[*sp++]++;
+ }
+ }
+
+ new_R = NEW2(n, Value_t *);
+ temp_R = NEW2(n, Value_t *);
+
+ for (i = 0; i < n; i++)
+ {
+ k = nedges[i];
+ if (k > 0)
+ {
+ sp = NEW2(k + 1, Value_t);
+ new_R[i] = sp;
+ temp_R[i] = sp;
+ sp[k] = -1;
+ }
+ }
+
+ FREE(nedges);
+
+ for (i = 0; i < n; i++)
+ {
+ sp = R2[i];
+ if (sp)
+ {
+ while (*sp >= 0)
+ *temp_R[*sp++]++ = (Value_t) i;
+ }
+ }
+
+ FREE(temp_R);
+
+ return (new_R);
+}
+
+static void
+compute_FOLLOWS(void)
+{
+ digraph(includes);
+}
+
+static void
+compute_lookaheads(void)
+{
+ int i, n;
+ unsigned *fp1, *fp2, *fp3;
+ shorts *sp, *next;
+ unsigned *rowp;
+
+ rowp = LA;
+ n = lookaheads[nstates];
+ for (i = 0; i < n; i++)
+ {
+ fp3 = rowp + tokensetsize;
+ for (sp = lookback[i]; sp; sp = sp->next)
+ {
+ fp1 = rowp;
+ fp2 = F + tokensetsize * sp->value;
+ while (fp1 < fp3)
+ *fp1++ |= *fp2++;
+ }
+ rowp = fp3;
+ }
+
+ for (i = 0; i < n; i++)
+ for (sp = lookback[i]; sp; sp = next)
+ {
+ next = sp->next;
+ FREE(sp);
+ }
+
+ FREE(lookback);
+ FREE(F);
+}
+
+static void
+digraph(Value_t ** relation)
+{
+ int i;
+
+ infinity = (Value_t) (ngotos + 2);
+ INDEX = NEW2(ngotos + 1, Value_t);
+ VERTICES = NEW2(ngotos + 1, Value_t);
+ top = 0;
+
+ R = relation;
+
+ for (i = 0; i < ngotos; i++)
+ INDEX[i] = 0;
+
+ for (i = 0; i < ngotos; i++)
+ {
+ if (INDEX[i] == 0 && R[i])
+ traverse(i);
+ }
+
+ FREE(INDEX);
+ FREE(VERTICES);
+}
+
+static void
+traverse(int i)
+{
+ unsigned *fp1;
+ unsigned *fp2;
+ unsigned *fp3;
+ int j;
+ Value_t *rp;
+
+ Value_t height;
+ unsigned *base;
+
+ VERTICES[++top] = (Value_t) i;
+ INDEX[i] = height = top;
+
+ base = F + i * tokensetsize;
+ fp3 = base + tokensetsize;
+
+ rp = R[i];
+ if (rp)
+ {
+ while ((j = *rp++) >= 0)
+ {
+ if (INDEX[j] == 0)
+ traverse(j);
+
+ if (INDEX[i] > INDEX[j])
+ INDEX[i] = INDEX[j];
+
+ fp1 = base;
+ fp2 = F + j * tokensetsize;
+
+ while (fp1 < fp3)
+ *fp1++ |= *fp2++;
+ }
+ }
+
+ if (INDEX[i] == height)
+ {
+ for (;;)
+ {
+ j = VERTICES[top--];
+ INDEX[j] = infinity;
+
+ if (i == j)
+ break;
+
+ fp1 = base;
+ fp2 = F + j * tokensetsize;
+
+ while (fp1 < fp3)
+ *fp2++ = *fp1++;
+ }
+ }
+}
+
+#ifdef NO_LEAKS
+void
+lalr_leaks(void)
+{
+ int i;
+
+ if (includes != 0)
+ {
+ for (i = 0; i < ngotos; i++)
+ {
+ free(includes[i]);
+ }
+ DO_FREE(includes);
+ }
+}
+#endif
diff --git a/usr.bin/yacc/lr0.c b/contrib/byacc/lr0.c
index 9d154e83e47b..07599734b35e 100644
--- a/usr.bin/yacc/lr0.c
+++ b/contrib/byacc/lr0.c
@@ -1,74 +1,26 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)lr0.c 5.3 (Berkeley) 1/20/91";
-#endif
-#endif
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+/* $Id: lr0.c,v 1.12 2010/06/09 08:53:17 tom Exp $ */
-#include <limits.h>
-#include <stdlib.h>
#include "defs.h"
-extern short *itemset;
-extern short *itemsetend;
-extern unsigned *ruleset;
-
-int nstates;
-core *first_state;
-shifts *first_shift;
-reductions *first_reduction;
-
+static core *new_state(int symbol);
+static Value_t get_state(int symbol);
static void allocate_itemsets(void);
static void allocate_storage(void);
static void append_states(void);
static void free_storage(void);
static void generate_states(void);
-static int get_state(int);
static void initialize_states(void);
static void new_itemsets(void);
-static core *new_state(int);
-#ifdef DEBUG
-static void print_derives(void);
-#endif
static void save_reductions(void);
static void save_shifts(void);
static void set_derives(void);
static void set_nullable(void);
+int nstates;
+core *first_state;
+shifts *first_shift;
+reductions *first_reduction;
+
static core **state_set;
static core *this_state;
static core *last_state;
@@ -78,13 +30,12 @@ static reductions *last_reduction;
static int nshifts;
static short *shift_symbol;
-static short *redset;
-static short *shiftset;
-
-static short **kernel_base;
-static short **kernel_end;
-static short *kernel_items;
+static Value_t *redset;
+static Value_t *shiftset;
+static Value_t **kernel_base;
+static Value_t **kernel_end;
+static Value_t *kernel_items;
static void
allocate_itemsets(void)
@@ -128,7 +79,6 @@ allocate_itemsets(void)
kernel_end = NEW2(nsyms, short *);
}
-
static void
allocate_storage(void)
{
@@ -138,13 +88,12 @@ allocate_storage(void)
state_set = NEW2(nitems, core *);
}
-
static void
append_states(void)
{
int i;
int j;
- int symbol;
+ Value_t symbol;
#ifdef TRACE
fprintf(stderr, "Entering append_states()\n");
@@ -168,21 +117,18 @@ append_states(void)
}
}
-
static void
free_storage(void)
{
- free(shift_symbol);
- free(redset);
- free(shiftset);
- free(kernel_base);
- free(kernel_end);
- free(kernel_items);
- free(state_set);
+ FREE(shift_symbol);
+ FREE(redset);
+ FREE(shiftset);
+ FREE(kernel_base);
+ FREE(kernel_end);
+ FREE(kernel_items);
+ FREE(state_set);
}
-
-
static void
generate_states(void)
{
@@ -205,13 +151,10 @@ generate_states(void)
this_state = this_state->next;
}
- finalize_closure();
free_storage();
}
-
-
-static int
+static Value_t
get_state(int symbol)
{
int key;
@@ -228,7 +171,7 @@ get_state(int symbol)
isp1 = kernel_base[symbol];
iend = kernel_end[symbol];
- n = iend - isp1;
+ n = (int)(iend - isp1);
key = *isp1;
assert(0 <= key && key < nitems);
@@ -273,12 +216,10 @@ get_state(int symbol)
return (sp->number);
}
-
-
static void
initialize_states(void)
{
- int i;
+ unsigned i;
short *start_derives;
core *p;
@@ -286,31 +227,30 @@ initialize_states(void)
for (i = 0; start_derives[i] >= 0; ++i)
continue;
- p = malloc(sizeof(core) + i*sizeof(short));
- if (p == 0) no_space();
+ p = (core *)MALLOC(sizeof(core) + i * sizeof(short));
+ NO_SPACE(p);
p->next = 0;
p->link = 0;
p->number = 0;
p->accessing_symbol = 0;
- p->nitems = i;
+ p->nitems = (Value_t) i;
- for (i = 0; start_derives[i] >= 0; ++i)
+ for (i = 0; start_derives[i] >= 0; ++i)
p->items[i] = rrhs[start_derives[i]];
first_state = last_state = this_state = p;
nstates = 1;
}
-
static void
new_itemsets(void)
{
- int i;
+ Value_t i;
int shiftcount;
short *isp;
short *ksp;
- int symbol;
+ Value_t symbol;
for (i = 0; i < nsyms; i++)
kernel_end[i] = 0;
@@ -330,7 +270,7 @@ new_itemsets(void)
ksp = kernel_base[symbol];
}
- *ksp++ = i + 1;
+ *ksp++ = (Value_t) (i + 1);
kernel_end[symbol] = ksp;
}
}
@@ -338,12 +278,10 @@ new_itemsets(void)
nshifts = shiftcount;
}
-
-
static core *
new_state(int symbol)
{
- int n;
+ unsigned n;
core *p;
short *isp1;
short *isp2;
@@ -353,17 +291,17 @@ new_state(int symbol)
fprintf(stderr, "Entering new_state(%d)\n", symbol);
#endif
- if (nstates >= SHRT_MAX)
+ if (nstates >= MAXSHORT)
fatal("too many states");
isp1 = kernel_base[symbol];
iend = kernel_end[symbol];
- n = iend - isp1;
+ n = (unsigned)(iend - isp1);
- p = (core *) allocate((unsigned) (sizeof(core) + (n - 1) * sizeof(short)));
- p->accessing_symbol = symbol;
- p->number = nstates;
- p->nitems = n;
+ p = (core *)allocate((sizeof(core) + (n - 1) * sizeof(short)));
+ p->accessing_symbol = (Value_t) symbol;
+ p->number = (Value_t) nstates;
+ p->nitems = (Value_t) n;
isp2 = p->items;
while (isp1 < iend)
@@ -377,10 +315,9 @@ new_state(int symbol)
return (p);
}
-
-#if 0
/* show_cores is used for debugging */
+void
show_cores(void)
{
core *p;
@@ -390,16 +327,18 @@ show_cores(void)
k = 0;
for (p = first_state; p; ++k, p = p->next)
{
- if (k) printf("\n");
+ if (k)
+ printf("\n");
printf("state %d, number = %d, accessing symbol = %s\n",
- k, p->number, symbol_name[p->accessing_symbol]);
+ k, p->number, symbol_name[p->accessing_symbol]);
n = p->nitems;
for (i = 0; i < n; ++i)
{
itemno = p->items[i];
printf("%4d ", itemno);
j = itemno;
- while (ritem[j] >= 0) ++j;
+ while (ritem[j] >= 0)
+ ++j;
printf("%s :", symbol_name[rlhs[-ritem[j]]]);
j = rrhs[-ritem[j]];
while (j < itemno)
@@ -413,9 +352,9 @@ show_cores(void)
}
}
-
/* show_ritems is used for debugging */
+void
show_ritems(void)
{
int i;
@@ -424,8 +363,8 @@ show_ritems(void)
printf("ritem[%d] = %d\n", i, ritem[i]);
}
-
/* show_rrhs is used for debugging */
+void
show_rrhs(void)
{
int i;
@@ -434,9 +373,9 @@ show_rrhs(void)
printf("rrhs[%d] = %d\n", i, rrhs[i]);
}
-
/* show_shifts is used for debugging */
+void
show_shifts(void)
{
shifts *p;
@@ -445,16 +384,15 @@ show_shifts(void)
k = 0;
for (p = first_shift; p; ++k, p = p->next)
{
- if (k) printf("\n");
+ if (k)
+ printf("\n");
printf("shift %d, number = %d, nshifts = %d\n", k, p->number,
- p->nshifts);
+ p->nshifts);
j = p->nshifts;
for (i = 0; i < j; ++i)
printf("\t%d\n", p->shift[i]);
}
}
-#endif
-
static void
save_shifts(void)
@@ -464,11 +402,11 @@ save_shifts(void)
short *sp2;
short *send;
- p = (shifts *) allocate((unsigned) (sizeof(shifts) +
- (nshifts - 1) * sizeof(short)));
+ p = (shifts *)allocate((sizeof(shifts) +
+ (unsigned)(nshifts - 1) * sizeof(short)));
p->number = this_state->number;
- p->nshifts = nshifts;
+ p->nshifts = (Value_t) nshifts;
sp1 = shiftset;
sp2 = p->shift;
@@ -489,8 +427,6 @@ save_shifts(void)
}
}
-
-
static void
save_reductions(void)
{
@@ -498,7 +434,7 @@ save_reductions(void)
short *rp1;
short *rp2;
int item;
- int count;
+ Value_t count;
reductions *p;
short *rend;
@@ -508,14 +444,15 @@ save_reductions(void)
item = ritem[*isp];
if (item < 0)
{
- redset[count++] = -item;
+ redset[count++] = (Value_t) - item;
}
}
if (count)
{
- p = (reductions *) allocate((unsigned) (sizeof(reductions) +
- (count - 1) * sizeof(short)));
+ p = (reductions *)allocate((sizeof(reductions) +
+ (unsigned)(count - 1) *
+ sizeof(short)));
p->number = this_state->number;
p->nreds = count;
@@ -540,11 +477,10 @@ save_reductions(void)
}
}
-
static void
set_derives(void)
{
- int i, k;
+ Value_t i, k;
int lhs;
short *rules;
@@ -572,16 +508,8 @@ set_derives(void)
#endif
}
-#if 0
-free_derives()
-{
- free(derives[start_symbol]);
- free(derives);
-}
-#endif
-
#ifdef DEBUG
-static void
+void
print_derives(void)
{
int i;
@@ -603,24 +531,23 @@ print_derives(void)
}
#endif
-
static void
set_nullable(void)
{
int i, j;
int empty;
- int done1;
+ int done_flag;
- nullable = malloc(nsyms);
- if (nullable == 0) no_space();
+ nullable = MALLOC(nsyms);
+ NO_SPACE(nullable);
for (i = 0; i < nsyms; ++i)
nullable[i] = 0;
- done1 = 0;
- while (!done1)
+ done_flag = 0;
+ while (!done_flag)
{
- done1 = 1;
+ done_flag = 1;
for (i = 1; i < nitems; i++)
{
empty = 1;
@@ -636,7 +563,7 @@ set_nullable(void)
if (!nullable[j])
{
nullable[j] = 1;
- done1 = 0;
+ done_flag = 0;
}
}
}
@@ -653,15 +580,6 @@ set_nullable(void)
#endif
}
-
-#if 0
-free_nullable(void)
-{
- free(nullable);
-}
-#endif
-
-
void
lr0(void)
{
@@ -669,3 +587,13 @@ lr0(void)
set_nullable();
generate_states();
}
+
+#ifdef NO_LEAKS
+void
+lr0_leaks(void)
+{
+ DO_FREE(derives[start_symbol]);
+ DO_FREE(derives);
+ DO_FREE(nullable);
+}
+#endif
diff --git a/contrib/byacc/main.c b/contrib/byacc/main.c
new file mode 100644
index 000000000000..0405a99b4bff
--- /dev/null
+++ b/contrib/byacc/main.c
@@ -0,0 +1,664 @@
+/* $Id: main.c,v 1.38 2012/01/14 01:01:15 tom Exp $ */
+
+#include <signal.h>
+#include <unistd.h> /* for _exit() */
+
+#include "defs.h"
+
+#if defined(HAVE_ATEXIT)
+# ifdef HAVE_MKSTEMP
+# define USE_MKSTEMP 1
+# elif defined(HAVE_FCNTL_H)
+# define USE_MKSTEMP 1
+# include <fcntl.h> /* for open(), O_EXCL, etc. */
+# else
+# define USE_MKSTEMP 0
+# endif
+#else
+# define USE_MKSTEMP 0
+#endif
+
+#if USE_MKSTEMP
+#include <sys/types.h>
+#include <sys/stat.h>
+
+typedef struct _my_tmpfiles
+{
+ struct _my_tmpfiles *next;
+ char *name;
+}
+MY_TMPFILES;
+
+static MY_TMPFILES *my_tmpfiles;
+#endif /* USE_MKSTEMP */
+
+char dflag;
+char gflag;
+char iflag;
+char lflag;
+static char oflag;
+char rflag;
+char sflag;
+char tflag;
+char vflag;
+
+const char *symbol_prefix;
+const char *myname = "yacc";
+
+int lineno;
+int outline;
+
+static char empty_string[] = "";
+static char default_file_prefix[] = "y";
+
+static char *file_prefix = default_file_prefix;
+
+char *code_file_name;
+char *input_file_name = empty_string;
+char *defines_file_name;
+char *externs_file_name;
+
+static char *graph_file_name;
+static char *output_file_name;
+static char *verbose_file_name;
+
+FILE *action_file; /* a temp file, used to save actions associated */
+ /* with rules until the parser is written */
+FILE *code_file; /* y.code.c (used when the -r option is specified) */
+FILE *defines_file; /* y.tab.h */
+FILE *externs_file; /* y.tab.i */
+FILE *input_file; /* the input file */
+FILE *output_file; /* y.tab.c */
+FILE *text_file; /* a temp file, used to save text until all */
+ /* symbols have been defined */
+FILE *union_file; /* a temp file, used to save the union */
+ /* definition until all symbol have been */
+ /* defined */
+FILE *verbose_file; /* y.output */
+FILE *graph_file; /* y.dot */
+
+int nitems;
+int nrules;
+int nsyms;
+int ntokens;
+int nvars;
+
+Value_t start_symbol;
+char **symbol_name;
+char **symbol_pname;
+Value_t *symbol_value;
+short *symbol_prec;
+char *symbol_assoc;
+
+int pure_parser;
+int exit_code;
+
+Value_t *ritem;
+Value_t *rlhs;
+Value_t *rrhs;
+Value_t *rprec;
+Assoc_t *rassoc;
+Value_t **derives;
+char *nullable;
+
+/*
+ * Since fclose() is called via the signal handler, it might die. Don't loop
+ * if there is a problem closing a file.
+ */
+#define DO_CLOSE(fp) \
+ if (fp != 0) { \
+ FILE *use = fp; \
+ fp = 0; \
+ fclose(use); \
+ }
+
+static int got_intr = 0;
+
+void
+done(int k)
+{
+ DO_CLOSE(input_file);
+ DO_CLOSE(output_file);
+
+ DO_CLOSE(action_file);
+ DO_CLOSE(defines_file);
+ DO_CLOSE(graph_file);
+ DO_CLOSE(text_file);
+ DO_CLOSE(union_file);
+ DO_CLOSE(verbose_file);
+
+ if (got_intr)
+ _exit(EXIT_FAILURE);
+
+#ifdef NO_LEAKS
+ if (rflag)
+ DO_FREE(code_file_name);
+
+ if (dflag)
+ DO_FREE(defines_file_name);
+
+ if (iflag)
+ DO_FREE(externs_file_name);
+
+ if (oflag)
+ DO_FREE(output_file_name);
+
+ if (vflag)
+ DO_FREE(verbose_file_name);
+
+ if (gflag)
+ DO_FREE(graph_file_name);
+
+ lr0_leaks();
+ lalr_leaks();
+ mkpar_leaks();
+ output_leaks();
+ reader_leaks();
+#endif
+
+ if (rflag)
+ DO_CLOSE(code_file);
+
+ exit(k);
+}
+
+static void
+onintr(__unused int sig)
+{
+ got_intr = 1;
+ done(EXIT_FAILURE);
+}
+
+static void
+set_signals(void)
+{
+#ifdef SIGINT
+ if (signal(SIGINT, SIG_IGN) != SIG_IGN)
+ signal(SIGINT, onintr);
+#endif
+#ifdef SIGTERM
+ if (signal(SIGTERM, SIG_IGN) != SIG_IGN)
+ signal(SIGTERM, onintr);
+#endif
+#ifdef SIGHUP
+ if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
+ signal(SIGHUP, onintr);
+#endif
+}
+
+static void
+usage(void)
+{
+ static const char *msg[] =
+ {
+ ""
+ ,"Options:"
+ ," -b file_prefix set filename prefix (default \"y.\")"
+ ," -d write definitions (y.tab.h)"
+ ," -i write interface (y.tab.i)"
+ ," -g write a graphical description"
+ ," -l suppress #line directives"
+ ," -o output_file (default \"y.tab.c\")"
+ ," -p symbol_prefix set symbol prefix (default \"yy\")"
+ ," -P create a reentrant parser, e.g., \"%pure-parser\""
+ ," -r produce separate code and table files (y.code.c)"
+ ," -s suppress #define's for quoted names in %token lines"
+ ," -t add debugging support"
+ ," -v write description (y.output)"
+ ," -V show version information and exit"
+ };
+ unsigned n;
+
+ fflush(stdout);
+ fprintf(stderr, "Usage: %s [options] filename\n", myname);
+ for (n = 0; n < sizeof(msg) / sizeof(msg[0]); ++n)
+ fprintf(stderr, "%s\n", msg[n]);
+
+ exit(1);
+}
+
+static void
+setflag(int ch)
+{
+ switch (ch)
+ {
+ case 'd':
+ dflag = 1;
+ break;
+
+ case 'g':
+ gflag = 1;
+ break;
+
+ case 'i':
+ iflag = 1;
+ break;
+
+ case 'l':
+ lflag = 1;
+ break;
+
+ case 'P':
+ pure_parser = 1;
+ break;
+
+ case 'r':
+ rflag = 1;
+ break;
+
+ case 's':
+ sflag = 1;
+ break;
+
+ case 't':
+ tflag = 1;
+ break;
+
+ case 'v':
+ vflag = 1;
+ break;
+
+ case 'V':
+ printf("%s - %s\n", myname, VERSION);
+ exit(EXIT_SUCCESS);
+
+ case 'y':
+ /* noop for bison compatibility. byacc is already designed to be posix
+ * yacc compatible. */
+ break;
+
+ default:
+ usage();
+ }
+}
+
+static void
+getargs(int argc, char *argv[])
+{
+ int i;
+ char *s;
+ int ch;
+
+ if (argc > 0)
+ myname = argv[0];
+
+ for (i = 1; i < argc; ++i)
+ {
+ s = argv[i];
+ if (*s != '-')
+ break;
+ switch (ch = *++s)
+ {
+ case '\0':
+ input_file = stdin;
+ if (i + 1 < argc)
+ usage();
+ return;
+
+ case '-':
+ ++i;
+ goto no_more_options;
+
+ case 'b':
+ if (*++s)
+ file_prefix = s;
+ else if (++i < argc)
+ file_prefix = argv[i];
+ else
+ usage();
+ continue;
+
+ case 'o':
+ if (*++s)
+ output_file_name = s;
+ else if (++i < argc)
+ output_file_name = argv[i];
+ else
+ usage();
+ continue;
+
+ case 'p':
+ if (*++s)
+ symbol_prefix = s;
+ else if (++i < argc)
+ symbol_prefix = argv[i];
+ else
+ usage();
+ continue;
+
+ default:
+ setflag(ch);
+ break;
+ }
+
+ for (;;)
+ {
+ switch (ch = *++s)
+ {
+ case '\0':
+ goto end_of_option;
+
+ default:
+ setflag(ch);
+ break;
+ }
+ }
+ end_of_option:;
+ }
+
+ no_more_options:;
+ if (i + 1 != argc)
+ usage();
+ input_file_name = argv[i];
+}
+
+void *
+allocate(size_t n)
+{
+ void *p;
+
+ p = NULL;
+ if (n)
+ {
+ p = CALLOC(1, n);
+ NO_SPACE(p);
+ }
+ return (p);
+}
+
+#define CREATE_FILE_NAME(dest, suffix) \
+ dest = MALLOC(len + strlen(suffix) + 1); \
+ NO_SPACE(dest); \
+ strcpy(dest, file_prefix); \
+ strcpy(dest + len, suffix)
+
+static void
+create_file_names(void)
+{
+ size_t len;
+ const char *defines_suffix;
+ const char *externs_suffix;
+ char *prefix;
+
+ prefix = NULL;
+ defines_suffix = DEFINES_SUFFIX;
+ externs_suffix = EXTERNS_SUFFIX;
+
+ /* compute the file_prefix from the user provided output_file_name */
+ if (output_file_name != 0)
+ {
+ if (!(prefix = strstr(output_file_name, ".tab.c"))
+ && (prefix = strstr(output_file_name, ".c")))
+ {
+ defines_suffix = ".h";
+ externs_suffix = ".i";
+ }
+ }
+
+ if (prefix != NULL)
+ {
+ len = (size_t) (prefix - output_file_name);
+ file_prefix = (char *)MALLOC(len + 1);
+ NO_SPACE(file_prefix);
+ strncpy(file_prefix, output_file_name, len)[len] = 0;
+ }
+ else
+ len = strlen(file_prefix);
+
+ /* if "-o filename" was not given */
+ if (output_file_name == 0)
+ {
+ oflag = 1;
+ CREATE_FILE_NAME(output_file_name, OUTPUT_SUFFIX);
+ }
+
+ if (rflag)
+ {
+ CREATE_FILE_NAME(code_file_name, CODE_SUFFIX);
+ }
+ else
+ code_file_name = output_file_name;
+
+ if (dflag)
+ {
+ CREATE_FILE_NAME(defines_file_name, defines_suffix);
+ }
+
+ if (iflag)
+ {
+ CREATE_FILE_NAME(externs_file_name, externs_suffix);
+ }
+
+ if (vflag)
+ {
+ CREATE_FILE_NAME(verbose_file_name, VERBOSE_SUFFIX);
+ }
+
+ if (gflag)
+ {
+ CREATE_FILE_NAME(graph_file_name, GRAPH_SUFFIX);
+ }
+
+ if (prefix != NULL)
+ {
+ FREE(file_prefix);
+ }
+}
+
+#if USE_MKSTEMP
+static void
+close_tmpfiles(void)
+{
+ while (my_tmpfiles != 0)
+ {
+ MY_TMPFILES *next = my_tmpfiles->next;
+
+ chmod(my_tmpfiles->name, 0644);
+ unlink(my_tmpfiles->name);
+
+ free(my_tmpfiles->name);
+ free(my_tmpfiles);
+
+ my_tmpfiles = next;
+ }
+}
+
+#ifndef HAVE_MKSTEMP
+static int
+my_mkstemp(char *temp)
+{
+ int fd;
+ char *dname;
+ char *fname;
+ char *name;
+
+ /*
+ * Split-up to use tempnam, rather than tmpnam; the latter (like
+ * mkstemp) is unusable on Windows.
+ */
+ if ((fname = strrchr(temp, '/')) != 0)
+ {
+ dname = strdup(temp);
+ dname[++fname - temp] = '\0';
+ }
+ else
+ {
+ dname = 0;
+ fname = temp;
+ }
+ if ((name = tempnam(dname, fname)) != 0)
+ {
+ fd = open(name, O_CREAT | O_EXCL | O_RDWR);
+ strcpy(temp, name);
+ }
+ else
+ {
+ fd = -1;
+ }
+
+ if (dname != 0)
+ free(dname);
+
+ return fd;
+}
+#define mkstemp(s) my_mkstemp(s)
+#endif
+
+#endif
+
+/*
+ * tmpfile() should be adequate, except that it may require special privileges
+ * to use, e.g., MinGW and Windows 7 where it tries to use the root directory.
+ */
+static FILE *
+open_tmpfile(const char *label)
+{
+ FILE *result;
+#if USE_MKSTEMP
+ int fd;
+ const char *tmpdir;
+ char *name;
+ const char *mark;
+
+ if ((tmpdir = getenv("TMPDIR")) == 0 || access(tmpdir, W_OK) != 0)
+ {
+#ifdef P_tmpdir
+ tmpdir = P_tmpdir;
+#else
+ tmpdir = "/tmp";
+#endif
+ if (access(tmpdir, W_OK) != 0)
+ tmpdir = ".";
+ }
+
+ name = malloc(strlen(tmpdir) + 10 + strlen(label));
+
+ result = 0;
+ if (name != 0)
+ {
+ if ((mark = strrchr(label, '_')) == 0)
+ mark = label + strlen(label);
+
+ sprintf(name, "%s/%.*sXXXXXX", tmpdir, (int)(mark - label), label);
+ fd = mkstemp(name);
+ if (fd >= 0)
+ {
+ result = fdopen(fd, "w+");
+ if (result != 0)
+ {
+ MY_TMPFILES *item;
+
+ if (my_tmpfiles == 0)
+ {
+ atexit(close_tmpfiles);
+ }
+
+ item = NEW(MY_TMPFILES);
+ NO_SPACE(item);
+
+ item->name = name;
+ NO_SPACE(item->name);
+
+ item->next = my_tmpfiles;
+ my_tmpfiles = item;
+ }
+ }
+ }
+#else
+ result = tmpfile();
+#endif
+
+ if (result == 0)
+ open_error(label);
+ return result;
+}
+
+static void
+open_files(void)
+{
+ create_file_names();
+
+ if (input_file == 0)
+ {
+ input_file = fopen(input_file_name, "r");
+ if (input_file == 0)
+ open_error(input_file_name);
+ }
+
+ action_file = open_tmpfile("action_file");
+ text_file = open_tmpfile("text_file");
+
+ if (vflag)
+ {
+ verbose_file = fopen(verbose_file_name, "w");
+ if (verbose_file == 0)
+ open_error(verbose_file_name);
+ }
+
+ if (gflag)
+ {
+ graph_file = fopen(graph_file_name, "w");
+ if (graph_file == 0)
+ open_error(graph_file_name);
+ fprintf(graph_file, "digraph %s {\n", file_prefix);
+ fprintf(graph_file, "\tedge [fontsize=10];\n");
+ fprintf(graph_file, "\tnode [shape=box,fontsize=10];\n");
+ fprintf(graph_file, "\torientation=landscape;\n");
+ fprintf(graph_file, "\trankdir=LR;\n");
+ fprintf(graph_file, "\t/*\n");
+ fprintf(graph_file, "\tmargin=0.2;\n");
+ fprintf(graph_file, "\tpage=\"8.27,11.69\"; // for A4 printing\n");
+ fprintf(graph_file, "\tratio=auto;\n");
+ fprintf(graph_file, "\t*/\n");
+ }
+
+ if (dflag)
+ {
+ defines_file = fopen(defines_file_name, "w");
+ if (defines_file == 0)
+ open_error(defines_file_name);
+ union_file = open_tmpfile("union_file");
+ }
+
+ if (iflag)
+ {
+ externs_file = fopen(externs_file_name, "w");
+ if (externs_file == 0)
+ open_error(externs_file_name);
+ }
+
+ output_file = fopen(output_file_name, "w");
+ if (output_file == 0)
+ open_error(output_file_name);
+
+ if (rflag)
+ {
+ code_file = fopen(code_file_name, "w");
+ if (code_file == 0)
+ open_error(code_file_name);
+ }
+ else
+ code_file = output_file;
+}
+
+int
+main(int argc, char *argv[])
+{
+ SRexpect = -1;
+ RRexpect = -1;
+ exit_code = EXIT_SUCCESS;
+
+ set_signals();
+ getargs(argc, argv);
+ open_files();
+ reader();
+ lr0();
+ lalr();
+ make_parser();
+ graph();
+ finalize_closure();
+ verbose();
+ output();
+ done(exit_code);
+ /*NOTREACHED */
+}
diff --git a/contrib/byacc/makefile.in b/contrib/byacc/makefile.in
new file mode 100644
index 000000000000..873954857679
--- /dev/null
+++ b/contrib/byacc/makefile.in
@@ -0,0 +1,182 @@
+# $Id: makefile.in,v 1.17 2012/01/15 19:11:21 tom Exp $
+#
+# UNIX template-makefile for Berkeley Yacc
+
+THIS = yacc
+
+#### Start of system configuration section. ####
+
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+CC = @CC@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+transform = @program_transform_name@
+
+DEFINES =
+EXTRA_CFLAGS = @EXTRA_CFLAGS@
+CPPFLAGS = -I. -I$(srcdir) $(DEFINES) -DHAVE_CONFIG_H -DYYPATCH=`cat $(srcdir)/VERSION` @CPPFLAGS@
+CFLAGS = @CFLAGS@ $(CPPFLAGS) $(EXTRA_CFLAGS)
+
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+
+CTAGS = @CTAGS@
+ETAGS = @ETAGS@
+LINT = @LINT@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = $(DESTDIR)@bindir@
+mandir = $(DESTDIR)@mandir@/man1
+manext = 1
+
+testdir = $(srcdir)/test
+
+x = @EXEEXT@
+o = .@OBJEXT@
+
+#### End of system configuration section. ####
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+H_FILES = \
+ defs.h
+
+C_FILES = \
+ closure.c \
+ error.c \
+ graph.c \
+ lalr.c \
+ lr0.c \
+ main.c \
+ mkpar.c \
+ output.c \
+ reader.c \
+ skeleton.c \
+ symtab.c \
+ verbose.c \
+ warshall.c
+
+OBJS = \
+ closure$o \
+ error$o \
+ graph$o \
+ lalr$o \
+ lr0$o \
+ main$o \
+ mkpar$o \
+ output$o \
+ reader$o \
+ skeleton$o \
+ symtab$o \
+ verbose$o \
+ warshall$o
+
+TRANSFORM_BIN = sed 's/$x$$//' |sed '$(transform)'|sed 's/$$/$x/'
+TRANSFORM_MAN = sed 's/$(manext)$$//'|sed '$(transform)'|sed 's/$$/$(manext)/'
+
+actual_bin = `echo $(THIS)$x | $(TRANSFORM_BIN)`
+actual_man = `echo $(THIS).$(manext)| $(TRANSFORM_MAN)`
+
+all : $(THIS)$x
+
+install: all installdirs
+ $(INSTALL_PROGRAM) $(THIS)$x $(bindir)/$(actual_bin)
+ - $(INSTALL_DATA) $(srcdir)/$(THIS).1 $(mandir)/$(actual_man)
+
+installdirs:
+ mkdir -p $(bindir)
+ - mkdir -p $(mandir)
+
+uninstall:
+ - rm -f $(bindir)/$(actual_bin)
+ - rm -f $(mandir)/$(actual_man)
+
+################################################################################
+.SUFFIXES : $o .i .html .$(manext) .cat .ps .pdf .txt
+
+.c$o:
+ @RULE_CC@
+ @ECHO_CC@$(CC) -c $(CFLAGS) $<
+
+.c.i :
+ @RULE_CC@
+ @ECHO_CC@$(CPP) -C $(CPPFLAGS) $*.c >$@
+
+.$(manext).cat :
+ - nroff -man $(srcdir)/$(THIS).$(manext) >$@
+
+.$(manext).html :
+ GROFF_NO_SGR=stupid $(SHELL) -c "tbl $*.$(manext) | groff -Thtml -man" >$@
+
+.$(manext).ps :
+ $(SHELL) -c "tbl $*.$(manext) | groff -man" >$@
+
+.$(manext).txt :
+ GROFF_NO_SGR=stupid $(SHELL) -c "tbl $*.$(manext) | nroff -Tascii -man | col -bx" >$@
+
+.ps.pdf :
+ ps2pdf $*.ps
+
+################################################################################
+
+$(THIS)$x : $(OBJS)
+ @ECHO_LD@$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(OBJS) $(LIBS)
+
+mostlyclean :
+ - rm -f core .nfs* *$o *.bak *.BAK *.out
+
+clean : mostlyclean
+ - rm -f $(THIS)$x
+
+distclean : clean
+ - rm -f config.log config.cache config.status config.h makefile
+ - rm -f *.html *.cat *.pdf *.ps *.txt
+ - cd test && rm -f test-*
+
+realclean: distclean
+ - rm -f tags TAGS
+
+################################################################################
+docs :: $(THIS).html \
+ $(THIS).pdf \
+ $(THIS).ps \
+ $(THIS).txt
+$(THIS).html : $(THIS).$(manext)
+$(THIS).pdf : $(THIS).ps
+$(THIS).ps : $(THIS).$(manext)
+$(THIS).txt : $(THIS).$(manext)
+################################################################################
+check: $(THIS)$x
+ $(SHELL) $(testdir)/run_test.sh $(testdir)
+
+check_make: $(THIS)$x
+ $(SHELL) $(testdir)/run_make.sh $(testdir)
+
+check_lint:
+ $(SHELL) $(testdir)/run_lint.sh $(testdir)
+################################################################################
+tags: $(H_FILES) $(C_FILES)
+ $(CTAGS) $(C_FILES) $(H_FILES)
+
+lint: $(C_FILES)
+ $(LINT) $(CPPFLAGS) $(C_FILES)
+
+@MAKE_UPPER_TAGS@TAGS: $(H_FILES) $(C_FILES)
+@MAKE_UPPER_TAGS@ $(ETAGS) $(C_FILES) $(H_FILES)
+
+depend:
+ makedepend -- $(CPPFLAGS) -- $(C_FILES)
+
+$(OBJS) : defs.h
+
+main$o \
+skeleton$o : makefile VERSION
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/usr.bin/yacc/mkpar.c b/contrib/byacc/mkpar.c
index e610310bf256..f9f2b5c2e85d 100644
--- a/usr.bin/yacc/mkpar.c
+++ b/contrib/byacc/mkpar.c
@@ -1,72 +1,36 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)mkpar.c 5.3 (Berkeley) 1/20/91";
-#endif
-#endif
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+/* $Id: mkpar.c,v 1.11 2010/06/09 08:53:17 tom Exp $ */
-#include <stdlib.h>
#include "defs.h"
-action **parser;
-int SRexpect;
-int SRtotal;
-int RRtotal;
-short *SRconflicts;
-short *RRconflicts;
-short *defred;
-short *rules_used;
-short nunused;
-short final_state;
-
-static int SRcount;
-static int RRcount;
-
-static action *add_reduce(action *, int, int);
-static action *add_reductions(int, action *);
+static action *add_reduce(action *actions, int ruleno, int symbol);
+static action *add_reductions(int stateno, action *actions);
+static action *get_shifts(int stateno);
+static action *parse_actions(int stateno);
+static int sole_reduction(int stateno);
static void defreds(void);
static void find_final_state(void);
-static void free_action_row(action *);
-static action *get_shifts(int);
-static action *parse_actions(int);
+static void free_action_row(action *p);
static void remove_conflicts(void);
-static int sole_reduction(int);
static void total_conflicts(void);
static void unused_rules(void);
+action **parser;
+
+int SRexpect;
+int RRexpect;
+
+int SRtotal;
+int RRtotal;
+
+Value_t *SRconflicts;
+Value_t *RRconflicts;
+Value_t *defred;
+Value_t *rules_used;
+Value_t nunused;
+Value_t final_state;
+
+static Value_t SRcount;
+static Value_t RRcount;
void
make_parser(void)
@@ -80,11 +44,11 @@ make_parser(void)
find_final_state();
remove_conflicts();
unused_rules();
- if (SRtotal + RRtotal > 0) total_conflicts();
+ if (SRtotal + RRtotal > 0)
+ total_conflicts();
defreds();
}
-
static action *
parse_actions(int stateno)
{
@@ -95,24 +59,23 @@ parse_actions(int stateno)
return (actions);
}
-
static action *
get_shifts(int stateno)
{
action *actions, *temp;
shifts *sp;
- short *tostate;
- int i, k;
- int symbol;
+ Value_t *to_state2;
+ Value_t i, k;
+ Value_t symbol;
actions = 0;
sp = shift_table[stateno];
if (sp)
{
- tostate = sp->shift;
- for (i = sp->nshifts - 1; i >= 0; i--)
+ to_state2 = sp->shift;
+ for (i = (Value_t) (sp->nshifts - 1); i >= 0; i--)
{
- k = tostate[i];
+ k = to_state2[i];
symbol = accessing_symbol[k];
if (ISTOKEN(symbol))
{
@@ -153,9 +116,10 @@ add_reductions(int stateno, action *actions)
return (actions);
}
-
static action *
-add_reduce(action *actions, int ruleno, int symbol)
+add_reduce(action *actions,
+ int ruleno,
+ int symbol)
{
action *temp, *prev, *next;
@@ -170,7 +134,7 @@ add_reduce(action *actions, int ruleno, int symbol)
}
while (next && next->symbol == symbol &&
- next->action_code == REDUCE && next->number < ruleno)
+ next->action_code == REDUCE && next->number < ruleno)
{
prev = next;
next = next->next;
@@ -178,8 +142,8 @@ add_reduce(action *actions, int ruleno, int symbol)
temp = NEW(action);
temp->next = next;
- temp->symbol = symbol;
- temp->number = ruleno;
+ temp->symbol = (Value_t) symbol;
+ temp->number = (Value_t) ruleno;
temp->prec = rprec[ruleno];
temp->action_code = REDUCE;
temp->assoc = rassoc[ruleno];
@@ -192,33 +156,32 @@ add_reduce(action *actions, int ruleno, int symbol)
return (actions);
}
-
static void
find_final_state(void)
{
int goal, i;
- short *tostate;
+ Value_t *to_state2;
shifts *p;
p = shift_table[0];
- tostate = p->shift;
+ to_state2 = p->shift;
goal = ritem[1];
for (i = p->nshifts - 1; i >= 0; --i)
{
- final_state = tostate[i];
- if (accessing_symbol[final_state] == goal) break;
+ final_state = to_state2[i];
+ if (accessing_symbol[final_state] == goal)
+ break;
}
}
-
static void
unused_rules(void)
{
int i;
action *p;
- rules_used = malloc(nrules*sizeof(short));
- if (rules_used == 0) no_space();
+ rules_used = (Value_t *) MALLOC((unsigned)nrules * sizeof(Value_t));
+ NO_SPACE(rules_used);
for (i = 0; i < nrules; ++i)
rules_used[i] = 0;
@@ -234,29 +197,29 @@ unused_rules(void)
nunused = 0;
for (i = 3; i < nrules; ++i)
- if (!rules_used[i]) ++nunused;
+ if (!rules_used[i])
+ ++nunused;
- if (nunused) {
+ if (nunused)
+ {
if (nunused == 1)
- warnx("1 rule never reduced");
+ fprintf(stderr, "%s: 1 rule never reduced\n", myname);
else
- warnx("%d rules never reduced", nunused);
+ fprintf(stderr, "%s: %d rules never reduced\n", myname, nunused);
}
}
-
static void
remove_conflicts(void)
{
int i;
int symbol;
- action *p, *pref;
+ action *p, *pref = 0;
- pref = NULL;
SRtotal = 0;
RRtotal = 0;
- SRconflicts = NEW2(nstates, short);
- RRconflicts = NEW2(nstates, short);
+ SRconflicts = NEW2(nstates, Value_t);
+ RRconflicts = NEW2(nstates, Value_t);
for (i = 0; i < nstates; i++)
{
SRcount = 0;
@@ -274,7 +237,7 @@ remove_conflicts(void)
SRcount++;
p->suppressed = 1;
}
- else if (pref->action_code == SHIFT)
+ else if (pref != 0 && pref->action_code == SHIFT)
{
if (pref->prec > 0 && p->prec > 0)
{
@@ -321,25 +284,40 @@ remove_conflicts(void)
}
}
-
static void
total_conflicts(void)
{
- /* Warn if s/r != expect or if any r/r */
- if ((SRtotal != SRexpect) || RRtotal)
- {
- if (SRtotal == 1)
- warnx("1 shift/reduce conflict");
- else if (SRtotal > 1)
- warnx("%d shift/reduce conflicts", SRtotal);
- }
+ fprintf(stderr, "%s: ", myname);
+ if (SRtotal == 1)
+ fprintf(stderr, "1 shift/reduce conflict");
+ else if (SRtotal > 1)
+ fprintf(stderr, "%d shift/reduce conflicts", SRtotal);
+
+ if (SRtotal && RRtotal)
+ fprintf(stderr, ", ");
if (RRtotal == 1)
- warnx("1 reduce/reduce conflict");
+ fprintf(stderr, "1 reduce/reduce conflict");
else if (RRtotal > 1)
- warnx("%d reduce/reduce conflicts", RRtotal);
-}
+ fprintf(stderr, "%d reduce/reduce conflicts", RRtotal);
+
+ fprintf(stderr, ".\n");
+ if (SRexpect >= 0 && SRtotal != SRexpect)
+ {
+ fprintf(stderr, "%s: ", myname);
+ fprintf(stderr, "expected %d shift/reduce conflict%s.\n",
+ SRexpect, PLURAL(SRexpect));
+ exit_code = EXIT_FAILURE;
+ }
+ if (RRexpect >= 0 && RRtotal != RRexpect)
+ {
+ fprintf(stderr, "%s: ", myname);
+ fprintf(stderr, "expected %d reduce/reduce conflict%s.\n",
+ RRexpect, PLURAL(RRexpect));
+ exit_code = EXIT_FAILURE;
+ }
+}
static int
sole_reduction(int stateno)
@@ -368,37 +346,47 @@ sole_reduction(int stateno)
return (ruleno);
}
-
static void
defreds(void)
{
int i;
- defred = NEW2(nstates, short);
+ defred = NEW2(nstates, Value_t);
for (i = 0; i < nstates; i++)
- defred[i] = sole_reduction(i);
+ defred[i] = (Value_t) sole_reduction(i);
}
static void
free_action_row(action *p)
{
- action *q;
+ action *q;
- while (p)
+ while (p)
{
- q = p->next;
- free(p);
- p = q;
+ q = p->next;
+ FREE(p);
+ p = q;
}
}
void
free_parser(void)
{
- int i;
+ int i;
+
+ for (i = 0; i < nstates; i++)
+ free_action_row(parser[i]);
- for (i = 0; i < nstates; i++)
- free_action_row(parser[i]);
+ FREE(parser);
+}
- free(parser);
+#ifdef NO_LEAKS
+void
+mkpar_leaks(void)
+{
+ DO_FREE(defred);
+ DO_FREE(rules_used);
+ DO_FREE(SRconflicts);
+ DO_FREE(RRconflicts);
}
+#endif
diff --git a/contrib/byacc/output.c b/contrib/byacc/output.c
new file mode 100644
index 000000000000..33b10c6c5df1
--- /dev/null
+++ b/contrib/byacc/output.c
@@ -0,0 +1,1507 @@
+/* $Id: output.c,v 1.43 2012/01/14 17:03:52 tom Exp $ */
+
+#include "defs.h"
+
+#define StaticOrR (rflag ? "" : "static ")
+#define CountLine(fp) (!rflag || ((fp) == code_file))
+
+static int nvectors;
+static int nentries;
+static Value_t **froms;
+static Value_t **tos;
+static Value_t *tally;
+static Value_t *width;
+static Value_t *state_count;
+static Value_t *order;
+static Value_t *base;
+static Value_t *pos;
+static int maxtable;
+static Value_t *table;
+static Value_t *check;
+static int lowzero;
+static int high;
+
+static void
+putc_code(FILE * fp, int c)
+{
+ if ((c == '\n') && (fp == code_file))
+ ++outline;
+ putc(c, fp);
+}
+
+static void
+putl_code(FILE * fp, const char *s)
+{
+ if (fp == code_file)
+ ++outline;
+ fputs(s, fp);
+}
+
+static void
+puts_code(FILE * fp, const char *s)
+{
+ fputs(s, fp);
+}
+
+static void
+write_code_lineno(FILE * fp)
+{
+ if (!lflag && (fp == code_file))
+ {
+ ++outline;
+ fprintf(fp, line_format, outline, code_file_name);
+ }
+}
+
+static void
+write_input_lineno(void)
+{
+ if (!lflag)
+ {
+ ++outline;
+ fprintf(code_file, line_format, lineno, input_file_name);
+ }
+}
+
+static void
+define_prefixed(FILE * fp, const char *name)
+{
+ int bump_line = CountLine(fp);
+ if (bump_line)
+ ++outline;
+ fprintf(fp, "\n");
+
+ if (bump_line)
+ ++outline;
+ fprintf(fp, "#ifndef %s\n", name);
+
+ if (bump_line)
+ ++outline;
+ fprintf(fp, "#define %-10s %s%s\n", name, symbol_prefix, name + 2);
+
+ if (bump_line)
+ ++outline;
+ fprintf(fp, "#endif /* %s */\n", name);
+}
+
+static void
+output_prefix(FILE * fp)
+{
+ if (symbol_prefix == NULL)
+ {
+ symbol_prefix = "yy";
+ }
+ else
+ {
+ define_prefixed(fp, "yyparse");
+ define_prefixed(fp, "yylex");
+ define_prefixed(fp, "yyerror");
+ define_prefixed(fp, "yychar");
+ define_prefixed(fp, "yyval");
+ define_prefixed(fp, "yylval");
+ define_prefixed(fp, "yydebug");
+ define_prefixed(fp, "yynerrs");
+ define_prefixed(fp, "yyerrflag");
+ define_prefixed(fp, "yylhs");
+ define_prefixed(fp, "yylen");
+ define_prefixed(fp, "yydefred");
+ define_prefixed(fp, "yydgoto");
+ define_prefixed(fp, "yysindex");
+ define_prefixed(fp, "yyrindex");
+ define_prefixed(fp, "yygindex");
+ define_prefixed(fp, "yytable");
+ define_prefixed(fp, "yycheck");
+ define_prefixed(fp, "yyname");
+ define_prefixed(fp, "yyrule");
+ }
+ if (CountLine(fp))
+ ++outline;
+ fprintf(fp, "#define YYPREFIX \"%s\"\n", symbol_prefix);
+}
+
+static void
+output_newline(void)
+{
+ if (!rflag)
+ ++outline;
+ putc('\n', output_file);
+}
+
+static void
+output_line(const char *value)
+{
+ fputs(value, output_file);
+ output_newline();
+}
+
+static void
+output_int(int value)
+{
+ fprintf(output_file, "%5d,", value);
+}
+
+static void
+start_int_table(const char *name, int value)
+{
+ int need = 34 - (int)(strlen(symbol_prefix) + strlen(name));
+
+ if (need < 6)
+ need = 6;
+ fprintf(output_file,
+ "%sconst short %s%s[] = {%*d,",
+ StaticOrR, symbol_prefix, name, need, value);
+}
+
+static void
+start_str_table(const char *name)
+{
+ fprintf(output_file,
+ "%sconst char *%s%s[] = {",
+ StaticOrR, "yy", name);
+ output_newline();
+}
+
+static void
+end_table(void)
+{
+ output_newline();
+ output_line("};");
+}
+
+static void
+output_rule_data(void)
+{
+ int i;
+ int j;
+
+ start_int_table("lhs", symbol_value[start_symbol]);
+
+ j = 10;
+ for (i = 3; i < nrules; i++)
+ {
+ if (j >= 10)
+ {
+ output_newline();
+ j = 1;
+ }
+ else
+ ++j;
+
+ output_int(symbol_value[rlhs[i]]);
+ }
+ end_table();
+
+ start_int_table("len", 2);
+
+ j = 10;
+ for (i = 3; i < nrules; i++)
+ {
+ if (j >= 10)
+ {
+ output_newline();
+ j = 1;
+ }
+ else
+ j++;
+
+ output_int(rrhs[i + 1] - rrhs[i] - 1);
+ }
+ end_table();
+}
+
+static void
+output_yydefred(void)
+{
+ int i, j;
+
+ start_int_table("defred", (defred[0] ? defred[0] - 2 : 0));
+
+ j = 10;
+ for (i = 1; i < nstates; i++)
+ {
+ if (j < 10)
+ ++j;
+ else
+ {
+ output_newline();
+ j = 1;
+ }
+
+ output_int((defred[i] ? defred[i] - 2 : 0));
+ }
+
+ end_table();
+}
+
+static void
+token_actions(void)
+{
+ int i, j;
+ Value_t shiftcount, reducecount;
+ int max, min;
+ Value_t *actionrow, *r, *s;
+ action *p;
+
+ actionrow = NEW2(2 * ntokens, Value_t);
+ for (i = 0; i < nstates; ++i)
+ {
+ if (parser[i])
+ {
+ for (j = 0; j < 2 * ntokens; ++j)
+ actionrow[j] = 0;
+
+ shiftcount = 0;
+ reducecount = 0;
+ for (p = parser[i]; p; p = p->next)
+ {
+ if (p->suppressed == 0)
+ {
+ if (p->action_code == SHIFT)
+ {
+ ++shiftcount;
+ actionrow[p->symbol] = p->number;
+ }
+ else if (p->action_code == REDUCE && p->number != defred[i])
+ {
+ ++reducecount;
+ actionrow[p->symbol + ntokens] = p->number;
+ }
+ }
+ }
+
+ tally[i] = shiftcount;
+ tally[nstates + i] = reducecount;
+ width[i] = 0;
+ width[nstates + i] = 0;
+ if (shiftcount > 0)
+ {
+ froms[i] = r = NEW2(shiftcount, Value_t);
+ tos[i] = s = NEW2(shiftcount, Value_t);
+ min = MAXSHORT;
+ max = 0;
+ for (j = 0; j < ntokens; ++j)
+ {
+ if (actionrow[j])
+ {
+ if (min > symbol_value[j])
+ min = symbol_value[j];
+ if (max < symbol_value[j])
+ max = symbol_value[j];
+ *r++ = symbol_value[j];
+ *s++ = actionrow[j];
+ }
+ }
+ width[i] = (Value_t) (max - min + 1);
+ }
+ if (reducecount > 0)
+ {
+ froms[nstates + i] = r = NEW2(reducecount, Value_t);
+ tos[nstates + i] = s = NEW2(reducecount, Value_t);
+ min = MAXSHORT;
+ max = 0;
+ for (j = 0; j < ntokens; ++j)
+ {
+ if (actionrow[ntokens + j])
+ {
+ if (min > symbol_value[j])
+ min = symbol_value[j];
+ if (max < symbol_value[j])
+ max = symbol_value[j];
+ *r++ = symbol_value[j];
+ *s++ = (Value_t) (actionrow[ntokens + j] - 2);
+ }
+ }
+ width[nstates + i] = (Value_t) (max - min + 1);
+ }
+ }
+ }
+ FREE(actionrow);
+}
+
+static int
+default_goto(int symbol)
+{
+ int i;
+ int m;
+ int n;
+ int default_state;
+ int max;
+
+ m = goto_map[symbol];
+ n = goto_map[symbol + 1];
+
+ if (m == n)
+ return (0);
+
+ for (i = 0; i < nstates; i++)
+ state_count[i] = 0;
+
+ for (i = m; i < n; i++)
+ state_count[to_state[i]]++;
+
+ max = 0;
+ default_state = 0;
+ for (i = 0; i < nstates; i++)
+ {
+ if (state_count[i] > max)
+ {
+ max = state_count[i];
+ default_state = i;
+ }
+ }
+
+ return (default_state);
+}
+
+static void
+save_column(int symbol, int default_state)
+{
+ int i;
+ int m;
+ int n;
+ Value_t *sp;
+ Value_t *sp1;
+ Value_t *sp2;
+ Value_t count;
+ int symno;
+
+ m = goto_map[symbol];
+ n = goto_map[symbol + 1];
+
+ count = 0;
+ for (i = m; i < n; i++)
+ {
+ if (to_state[i] != default_state)
+ ++count;
+ }
+ if (count == 0)
+ return;
+
+ symno = symbol_value[symbol] + 2 * nstates;
+
+ froms[symno] = sp1 = sp = NEW2(count, Value_t);
+ tos[symno] = sp2 = NEW2(count, Value_t);
+
+ for (i = m; i < n; i++)
+ {
+ if (to_state[i] != default_state)
+ {
+ *sp1++ = from_state[i];
+ *sp2++ = to_state[i];
+ }
+ }
+
+ tally[symno] = count;
+ width[symno] = (Value_t) (sp1[-1] - sp[0] + 1);
+}
+
+static void
+goto_actions(void)
+{
+ int i, j, k;
+
+ state_count = NEW2(nstates, Value_t);
+
+ k = default_goto(start_symbol + 1);
+ start_int_table("dgoto", k);
+ save_column(start_symbol + 1, k);
+
+ j = 10;
+ for (i = start_symbol + 2; i < nsyms; i++)
+ {
+ if (j >= 10)
+ {
+ output_newline();
+ j = 1;
+ }
+ else
+ ++j;
+
+ k = default_goto(i);
+ output_int(k);
+ save_column(i, k);
+ }
+
+ end_table();
+ FREE(state_count);
+}
+
+static void
+sort_actions(void)
+{
+ Value_t i;
+ int j;
+ int k;
+ int t;
+ int w;
+
+ order = NEW2(nvectors, Value_t);
+ nentries = 0;
+
+ for (i = 0; i < nvectors; i++)
+ {
+ if (tally[i] > 0)
+ {
+ t = tally[i];
+ w = width[i];
+ j = nentries - 1;
+
+ while (j >= 0 && (width[order[j]] < w))
+ j--;
+
+ while (j >= 0 && (width[order[j]] == w) && (tally[order[j]] < t))
+ j--;
+
+ for (k = nentries - 1; k > j; k--)
+ order[k + 1] = order[k];
+
+ order[j + 1] = i;
+ nentries++;
+ }
+ }
+}
+
+/* The function matching_vector determines if the vector specified by */
+/* the input parameter matches a previously considered vector. The */
+/* test at the start of the function checks if the vector represents */
+/* a row of shifts over terminal symbols or a row of reductions, or a */
+/* column of shifts over a nonterminal symbol. Berkeley Yacc does not */
+/* check if a column of shifts over a nonterminal symbols matches a */
+/* previously considered vector. Because of the nature of LR parsing */
+/* tables, no two columns can match. Therefore, the only possible */
+/* match would be between a row and a column. Such matches are */
+/* unlikely. Therefore, to save time, no attempt is made to see if a */
+/* column matches a previously considered vector. */
+/* */
+/* Matching_vector is poorly designed. The test could easily be made */
+/* faster. Also, it depends on the vectors being in a specific */
+/* order. */
+
+static int
+matching_vector(int vector)
+{
+ int i;
+ int j;
+ int k;
+ int t;
+ int w;
+ int match;
+ int prev;
+
+ i = order[vector];
+ if (i >= 2 * nstates)
+ return (-1);
+
+ t = tally[i];
+ w = width[i];
+
+ for (prev = vector - 1; prev >= 0; prev--)
+ {
+ j = order[prev];
+ if (width[j] != w || tally[j] != t)
+ return (-1);
+
+ match = 1;
+ for (k = 0; match && k < t; k++)
+ {
+ if (tos[j][k] != tos[i][k] || froms[j][k] != froms[i][k])
+ match = 0;
+ }
+
+ if (match)
+ return (j);
+ }
+
+ return (-1);
+}
+
+static int
+pack_vector(int vector)
+{
+ int i, j, k, l;
+ int t;
+ int loc;
+ int ok;
+ Value_t *from;
+ Value_t *to;
+ int newmax;
+
+ i = order[vector];
+ t = tally[i];
+ assert(t);
+
+ from = froms[i];
+ to = tos[i];
+
+ j = lowzero - from[0];
+ for (k = 1; k < t; ++k)
+ if (lowzero - from[k] > j)
+ j = lowzero - from[k];
+ for (;; ++j)
+ {
+ if (j == 0)
+ continue;
+ ok = 1;
+ for (k = 0; ok && k < t; k++)
+ {
+ loc = j + from[k];
+ if (loc >= maxtable - 1)
+ {
+ if (loc >= MAXTABLE - 1)
+ fatal("maximum table size exceeded");
+
+ newmax = maxtable;
+ do
+ {
+ newmax += 200;
+ }
+ while (newmax <= loc);
+
+ table = (Value_t *) REALLOC(table, (unsigned)newmax * sizeof(Value_t));
+ NO_SPACE(table);
+
+ check = (Value_t *) REALLOC(check, (unsigned)newmax * sizeof(Value_t));
+ NO_SPACE(check);
+
+ for (l = maxtable; l < newmax; ++l)
+ {
+ table[l] = 0;
+ check[l] = -1;
+ }
+ maxtable = newmax;
+ }
+
+ if (check[loc] != -1)
+ ok = 0;
+ }
+ for (k = 0; ok && k < vector; k++)
+ {
+ if (pos[k] == j)
+ ok = 0;
+ }
+ if (ok)
+ {
+ for (k = 0; k < t; k++)
+ {
+ loc = j + from[k];
+ table[loc] = to[k];
+ check[loc] = from[k];
+ if (loc > high)
+ high = loc;
+ }
+
+ while (check[lowzero] != -1)
+ ++lowzero;
+
+ return (j);
+ }
+ }
+}
+
+static void
+pack_table(void)
+{
+ int i;
+ Value_t place;
+ int state;
+
+ base = NEW2(nvectors, Value_t);
+ pos = NEW2(nentries, Value_t);
+
+ maxtable = 1000;
+ table = NEW2(maxtable, Value_t);
+ check = NEW2(maxtable, Value_t);
+
+ lowzero = 0;
+ high = 0;
+
+ for (i = 0; i < maxtable; i++)
+ check[i] = -1;
+
+ for (i = 0; i < nentries; i++)
+ {
+ state = matching_vector(i);
+
+ if (state < 0)
+ place = (Value_t) pack_vector(i);
+ else
+ place = base[state];
+
+ pos[i] = place;
+ base[order[i]] = place;
+ }
+
+ for (i = 0; i < nvectors; i++)
+ {
+ if (froms[i])
+ FREE(froms[i]);
+ if (tos[i])
+ FREE(tos[i]);
+ }
+
+ FREE(froms);
+ FREE(tos);
+ FREE(pos);
+}
+
+static void
+output_base(void)
+{
+ int i, j;
+
+ start_int_table("sindex", base[0]);
+
+ j = 10;
+ for (i = 1; i < nstates; i++)
+ {
+ if (j >= 10)
+ {
+ output_newline();
+ j = 1;
+ }
+ else
+ ++j;
+
+ output_int(base[i]);
+ }
+
+ end_table();
+
+ start_int_table("rindex", base[nstates]);
+
+ j = 10;
+ for (i = nstates + 1; i < 2 * nstates; i++)
+ {
+ if (j >= 10)
+ {
+ output_newline();
+ j = 1;
+ }
+ else
+ ++j;
+
+ output_int(base[i]);
+ }
+
+ end_table();
+
+ start_int_table("gindex", base[2 * nstates]);
+
+ j = 10;
+ for (i = 2 * nstates + 1; i < nvectors - 1; i++)
+ {
+ if (j >= 10)
+ {
+ output_newline();
+ j = 1;
+ }
+ else
+ ++j;
+
+ output_int(base[i]);
+ }
+
+ end_table();
+ FREE(base);
+}
+
+static void
+output_table(void)
+{
+ int i;
+ int j;
+
+ ++outline;
+ fprintf(code_file, "#define YYTABLESIZE %d\n", high);
+ start_int_table("table", table[0]);
+
+ j = 10;
+ for (i = 1; i <= high; i++)
+ {
+ if (j >= 10)
+ {
+ output_newline();
+ j = 1;
+ }
+ else
+ ++j;
+
+ output_int(table[i]);
+ }
+
+ end_table();
+ FREE(table);
+}
+
+static void
+output_check(void)
+{
+ int i;
+ int j;
+
+ start_int_table("check", check[0]);
+
+ j = 10;
+ for (i = 1; i <= high; i++)
+ {
+ if (j >= 10)
+ {
+ output_newline();
+ j = 1;
+ }
+ else
+ ++j;
+
+ output_int(check[i]);
+ }
+
+ end_table();
+ FREE(check);
+}
+
+static void
+output_actions(void)
+{
+ nvectors = 2 * nstates + nvars;
+
+ froms = NEW2(nvectors, Value_t *);
+ tos = NEW2(nvectors, Value_t *);
+ tally = NEW2(nvectors, Value_t);
+ width = NEW2(nvectors, Value_t);
+
+ token_actions();
+ FREE(lookaheads);
+ FREE(LA);
+ FREE(LAruleno);
+ FREE(accessing_symbol);
+
+ goto_actions();
+ FREE(goto_map + ntokens);
+ FREE(from_state);
+ FREE(to_state);
+
+ sort_actions();
+ pack_table();
+ output_base();
+ output_table();
+ output_check();
+}
+
+static int
+is_C_identifier(char *name)
+{
+ char *s;
+ int c;
+
+ s = name;
+ c = *s;
+ if (c == '"')
+ {
+ c = *++s;
+ if (!isalpha(c) && c != '_' && c != '$')
+ return (0);
+ while ((c = *++s) != '"')
+ {
+ if (!isalnum(c) && c != '_' && c != '$')
+ return (0);
+ }
+ return (1);
+ }
+
+ if (!isalpha(c) && c != '_' && c != '$')
+ return (0);
+ while ((c = *++s) != 0)
+ {
+ if (!isalnum(c) && c != '_' && c != '$')
+ return (0);
+ }
+ return (1);
+}
+
+static void
+output_defines(FILE * fp)
+{
+ int c, i;
+ char *s;
+
+ for (i = 2; i < ntokens; ++i)
+ {
+ s = symbol_name[i];
+ if (is_C_identifier(s) && (!sflag || *s != '"'))
+ {
+ fprintf(fp, "#define ");
+ c = *s;
+ if (c == '"')
+ {
+ while ((c = *++s) != '"')
+ {
+ putc(c, fp);
+ }
+ }
+ else
+ {
+ do
+ {
+ putc(c, fp);
+ }
+ while ((c = *++s) != 0);
+ }
+ if (fp == code_file)
+ ++outline;
+ fprintf(fp, " %d\n", symbol_value[i]);
+ }
+ }
+
+ if (fp == code_file)
+ ++outline;
+ if (fp != defines_file || iflag)
+ fprintf(fp, "#define YYERRCODE %d\n", symbol_value[1]);
+
+ if (fp == defines_file || (iflag && !dflag))
+ {
+ if (unionized)
+ {
+ rewind(union_file);
+ while ((c = getc(union_file)) != EOF)
+ putc(c, fp);
+ fprintf(fp, "extern YYSTYPE %slval;\n", symbol_prefix);
+ }
+ }
+}
+
+static void
+output_stored_text(FILE * fp)
+{
+ int c;
+ FILE *in;
+
+ rewind(text_file);
+ if (text_file == NULL)
+ open_error("text_file");
+ in = text_file;
+ if ((c = getc(in)) == EOF)
+ return;
+ putc_code(fp, c);
+ while ((c = getc(in)) != EOF)
+ {
+ putc_code(fp, c);
+ }
+ write_code_lineno(fp);
+}
+
+static void
+output_debug(void)
+{
+ int i, j, k, max;
+ const char **symnam;
+ const char *s;
+
+ ++outline;
+ fprintf(code_file, "#define YYFINAL %d\n", final_state);
+
+ putl_code(code_file, "#ifndef YYDEBUG\n");
+ ++outline;
+ fprintf(code_file, "#define YYDEBUG %d\n", tflag);
+ putl_code(code_file, "#endif\n");
+
+ if (rflag)
+ {
+ fprintf(output_file, "#ifndef YYDEBUG\n");
+ fprintf(output_file, "#define YYDEBUG %d\n", tflag);
+ fprintf(output_file, "#endif\n");
+ }
+
+ max = 0;
+ for (i = 2; i < ntokens; ++i)
+ if (symbol_value[i] > max)
+ max = symbol_value[i];
+
+ ++outline;
+ fprintf(code_file, "#define YYMAXTOKEN %d\n", max);
+
+ symnam = (const char **)MALLOC((unsigned)(max + 1) * sizeof(char *));
+ NO_SPACE(symnam);
+
+ /* Note that it is not necessary to initialize the element */
+ /* symnam[max]. */
+ for (i = 0; i < max; ++i)
+ symnam[i] = 0;
+ for (i = ntokens - 1; i >= 2; --i)
+ symnam[symbol_value[i]] = symbol_name[i];
+ symnam[0] = "end-of-file";
+
+ output_line("#if YYDEBUG");
+
+ start_str_table("name");
+ j = 80;
+ for (i = 0; i <= max; ++i)
+ {
+ if ((s = symnam[i]) != 0)
+ {
+ if (s[0] == '"')
+ {
+ k = 7;
+ while (*++s != '"')
+ {
+ ++k;
+ if (*s == '\\')
+ {
+ k += 2;
+ if (*++s == '\\')
+ ++k;
+ }
+ }
+ j += k;
+ if (j > 80)
+ {
+ output_newline();
+ j = k;
+ }
+ fprintf(output_file, "\"\\\"");
+ s = symnam[i];
+ while (*++s != '"')
+ {
+ if (*s == '\\')
+ {
+ fprintf(output_file, "\\\\");
+ if (*++s == '\\')
+ fprintf(output_file, "\\\\");
+ else
+ putc(*s, output_file);
+ }
+ else
+ putc(*s, output_file);
+ }
+ fprintf(output_file, "\\\"\",");
+ }
+ else if (s[0] == '\'')
+ {
+ if (s[1] == '"')
+ {
+ j += 7;
+ if (j > 80)
+ {
+ output_newline();
+ j = 7;
+ }
+ fprintf(output_file, "\"'\\\"'\",");
+ }
+ else
+ {
+ k = 5;
+ while (*++s != '\'')
+ {
+ ++k;
+ if (*s == '\\')
+ {
+ k += 2;
+ if (*++s == '\\')
+ ++k;
+ }
+ }
+ j += k;
+ if (j > 80)
+ {
+ output_newline();
+ j = k;
+ }
+ fprintf(output_file, "\"'");
+ s = symnam[i];
+ while (*++s != '\'')
+ {
+ if (*s == '\\')
+ {
+ fprintf(output_file, "\\\\");
+ if (*++s == '\\')
+ fprintf(output_file, "\\\\");
+ else
+ putc(*s, output_file);
+ }
+ else
+ putc(*s, output_file);
+ }
+ fprintf(output_file, "'\",");
+ }
+ }
+ else
+ {
+ k = (int)strlen(s) + 3;
+ j += k;
+ if (j > 80)
+ {
+ output_newline();
+ j = k;
+ }
+ putc('"', output_file);
+ do
+ {
+ putc(*s, output_file);
+ }
+ while (*++s);
+ fprintf(output_file, "\",");
+ }
+ }
+ else
+ {
+ j += 2;
+ if (j > 80)
+ {
+ output_newline();
+ j = 2;
+ }
+ fprintf(output_file, "0,");
+ }
+ }
+ end_table();
+ FREE(symnam);
+
+ start_str_table("rule");
+ for (i = 2; i < nrules; ++i)
+ {
+ fprintf(output_file, "\"%s :", symbol_name[rlhs[i]]);
+ for (j = rrhs[i]; ritem[j] > 0; ++j)
+ {
+ s = symbol_name[ritem[j]];
+ if (s[0] == '"')
+ {
+ fprintf(output_file, " \\\"");
+ while (*++s != '"')
+ {
+ if (*s == '\\')
+ {
+ if (s[1] == '\\')
+ fprintf(output_file, "\\\\\\\\");
+ else
+ fprintf(output_file, "\\\\%c", s[1]);
+ ++s;
+ }
+ else
+ putc(*s, output_file);
+ }
+ fprintf(output_file, "\\\"");
+ }
+ else if (s[0] == '\'')
+ {
+ if (s[1] == '"')
+ fprintf(output_file, " '\\\"'");
+ else if (s[1] == '\\')
+ {
+ if (s[2] == '\\')
+ fprintf(output_file, " '\\\\\\\\");
+ else
+ fprintf(output_file, " '\\\\%c", s[2]);
+ s += 2;
+ while (*++s != '\'')
+ putc(*s, output_file);
+ putc('\'', output_file);
+ }
+ else
+ fprintf(output_file, " '%c'", s[1]);
+ }
+ else
+ fprintf(output_file, " %s", s);
+ }
+ fprintf(output_file, "\",");
+ output_newline();
+ }
+
+ end_table();
+ output_line("#endif");
+}
+
+static void
+output_pure_parser(FILE * fp)
+{
+ putc_code(fp, '\n');
+
+ if (fp == code_file)
+ outline += 1;
+ fprintf(fp, "#define YYPURE %d\n", pure_parser);
+ putc_code(fp, '\n');
+}
+
+static void
+output_stype(FILE * fp)
+{
+ if (!unionized && ntags == 0)
+ {
+ putc_code(fp, '\n');
+ putl_code(fp, "#ifndef YYSTYPE\n");
+ putl_code(fp, "typedef int YYSTYPE;\n");
+ putl_code(fp, "#endif\n");
+ }
+}
+
+static void
+output_trailing_text(void)
+{
+ int c, last;
+ FILE *in;
+
+ if (line == 0)
+ return;
+
+ in = input_file;
+ c = *cptr;
+ if (c == '\n')
+ {
+ ++lineno;
+ if ((c = getc(in)) == EOF)
+ return;
+ write_input_lineno();
+ putc_code(code_file, c);
+ last = c;
+ }
+ else
+ {
+ write_input_lineno();
+ do
+ {
+ putc_code(code_file, c);
+ }
+ while ((c = *++cptr) != '\n');
+ putc_code(code_file, c);
+ last = '\n';
+ }
+
+ while ((c = getc(in)) != EOF)
+ {
+ putc_code(code_file, c);
+ last = c;
+ }
+
+ if (last != '\n')
+ {
+ putc_code(code_file, '\n');
+ }
+ write_code_lineno(code_file);
+}
+
+static void
+output_semantic_actions(void)
+{
+ int c, last;
+
+ rewind(action_file);
+ if ((c = getc(action_file)) == EOF)
+ return;
+
+ last = c;
+ putc_code(code_file, c);
+ while ((c = getc(action_file)) != EOF)
+ {
+ putc_code(code_file, c);
+ last = c;
+ }
+
+ if (last != '\n')
+ {
+ putc_code(code_file, '\n');
+ }
+
+ write_code_lineno(code_file);
+}
+
+static void
+output_parse_decl(FILE * fp)
+{
+ putl_code(fp, "\n");
+ putl_code(fp, "/* compatibility with bison */\n");
+ putl_code(fp, "#ifdef YYPARSE_PARAM\n");
+ putl_code(fp, "/* compatibility with FreeBSD */\n");
+ putl_code(fp, "# ifdef YYPARSE_PARAM_TYPE\n");
+ putl_code(fp,
+ "# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)\n");
+ putl_code(fp, "# else\n");
+ putl_code(fp, "# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)\n");
+ putl_code(fp, "# endif\n");
+ putl_code(fp, "#else\n");
+
+ puts_code(fp, "# define YYPARSE_DECL() yyparse(");
+ if (!parse_param)
+ puts_code(fp, "void");
+ else
+ {
+ param *p;
+ for (p = parse_param; p; p = p->next)
+ fprintf(fp, "%s %s%s%s", p->type, p->name, p->type2,
+ p->next ? ", " : "");
+ }
+ putl_code(fp, ")\n");
+
+ putl_code(fp, "#endif\n");
+}
+
+static void
+output_lex_decl(FILE * fp)
+{
+ putl_code(fp, "\n");
+ putl_code(fp, "/* Parameters sent to lex. */\n");
+ putl_code(fp, "#ifdef YYLEX_PARAM\n");
+ if (pure_parser)
+ {
+ putl_code(fp, "# ifdef YYLEX_PARAM_TYPE\n");
+ putl_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval,"
+ " YYLEX_PARAM_TYPE YYLEX_PARAM)\n");
+ putl_code(fp, "# else\n");
+ putl_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval,"
+ " void * YYLEX_PARAM)\n");
+ putl_code(fp, "# endif\n");
+ putl_code(fp, "# define YYLEX yylex(&yylval, YYLEX_PARAM)\n");
+ }
+ else
+ {
+ putl_code(fp, "# define YYLEX_DECL() yylex(void *YYLEX_PARAM)\n");
+ putl_code(fp, "# define YYLEX yylex(YYLEX_PARAM)\n");
+ }
+ putl_code(fp, "#else\n");
+ if (pure_parser && lex_param)
+ {
+ param *p;
+ puts_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval, ");
+ for (p = lex_param; p; p = p->next)
+ fprintf(fp, "%s %s%s%s", p->type, p->name, p->type2,
+ p->next ? ", " : "");
+ putl_code(fp, ")\n");
+
+ puts_code(fp, "# define YYLEX yylex(&yylval, ");
+ for (p = lex_param; p; p = p->next)
+ fprintf(fp, "%s%s", p->name, p->next ? ", " : "");
+ putl_code(fp, ")\n");
+ }
+ else if (pure_parser)
+ {
+ putl_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval)\n");
+ putl_code(fp, "# define YYLEX yylex(&yylval)\n");
+ }
+ else if (lex_param)
+ {
+ param *p;
+ puts_code(fp, "# define YYLEX_DECL() yylex(");
+ for (p = lex_param; p; p = p->next)
+ fprintf(fp, "%s %s%s%s", p->type, p->name, p->type2,
+ p->next ? ", " : "");
+ putl_code(fp, ")\n");
+
+ puts_code(fp, "# define YYLEX yylex(");
+ for (p = lex_param; p; p = p->next)
+ fprintf(fp, "%s%s", p->name, p->next ? ", " : "");
+ putl_code(fp, ")\n");
+ }
+ else
+ {
+ putl_code(fp, "# define YYLEX_DECL() yylex(void)\n");
+ putl_code(fp, "# define YYLEX yylex()\n");
+ }
+ putl_code(fp, "#endif\n");
+}
+
+static void
+output_error_decl(FILE * fp)
+{
+ putl_code(fp, "\n");
+ putl_code(fp, "/* Parameters sent to yyerror. */\n");
+ if (parse_param)
+ {
+ param *p;
+
+ putl_code(fp, "#ifndef YYERROR_DECL\n");
+ fprintf(fp, "#define YYERROR_DECL() yyerror(");
+ for (p = parse_param; p; p = p->next)
+ fprintf(fp, "%s %s%s, ", p->type, p->name, p->type2);
+ putl_code(fp, "const char *s)\n");
+ putl_code(fp, "#endif\n");
+
+ putl_code(fp, "#ifndef YYERROR_CALL\n");
+ puts_code(fp, "#define YYERROR_CALL(msg) yyerror(");
+
+ for (p = parse_param; p; p = p->next)
+ fprintf(fp, "%s, ", p->name);
+
+ putl_code(fp, "msg)\n");
+ putl_code(fp, "#endif\n");
+ }
+ else
+ {
+ putl_code(fp, "#ifndef YYERROR_DECL\n");
+ putl_code(fp, "#define YYERROR_DECL() yyerror(const char *s)\n");
+ putl_code(fp, "#endif\n");
+ putl_code(fp, "#ifndef YYERROR_CALL\n");
+ putl_code(fp, "#define YYERROR_CALL(msg) yyerror(msg)\n");
+ putl_code(fp, "#endif\n");
+ }
+}
+
+static void
+free_itemsets(void)
+{
+ core *cp, *next;
+
+ FREE(state_table);
+ for (cp = first_state; cp; cp = next)
+ {
+ next = cp->next;
+ FREE(cp);
+ }
+}
+
+static void
+free_shifts(void)
+{
+ shifts *sp, *next;
+
+ FREE(shift_table);
+ for (sp = first_shift; sp; sp = next)
+ {
+ next = sp->next;
+ FREE(sp);
+ }
+}
+
+static void
+free_reductions(void)
+{
+ reductions *rp, *next;
+
+ FREE(reduction_table);
+ for (rp = first_reduction; rp; rp = next)
+ {
+ next = rp->next;
+ FREE(rp);
+ }
+}
+
+static void
+output_yyerror_call(const char *msg)
+{
+ FILE *fp = code_file;
+
+ puts_code(fp, " yyerror(");
+ if (parse_param)
+ {
+ param *p;
+ for (p = parse_param; p; p = p->next)
+ fprintf(fp, "%s, ", p->name);
+ }
+ puts_code(fp, "\"");
+ puts_code(fp, msg);
+ putl_code(fp, "\");\n");
+}
+
+static void
+output_externs(FILE * fp, const char *const section[])
+{
+ int c;
+ int i;
+ const char *s;
+
+ for (i = 0; (s = section[i]) != 0; ++i)
+ {
+ if (*s && *s != '#')
+ fputs("extern\t", fp);
+ while ((c = *s) != 0)
+ {
+ putc(c, fp);
+ ++s;
+ }
+ if (fp == code_file)
+ ++outline;
+ putc('\n', fp);
+ }
+}
+
+void
+output(void)
+{
+ FILE *fp;
+
+ free_itemsets();
+ free_shifts();
+ free_reductions();
+
+ if (iflag)
+ {
+ ++outline;
+ fprintf(code_file, "#include \"%s\"\n", externs_file_name);
+ fp = externs_file;
+ }
+ else
+ fp = code_file;
+
+ output_prefix(iflag ? externs_file : output_file);
+ output_pure_parser(fp);
+ output_stored_text(fp);
+ output_stype(fp);
+ output_parse_decl(fp);
+ output_lex_decl(fp);
+ output_error_decl(fp);
+ write_section(fp, xdecls);
+
+ if (iflag)
+ {
+ output_externs(externs_file, global_vars);
+ if (!pure_parser)
+ output_externs(externs_file, impure_vars);
+ }
+
+ if (iflag)
+ {
+ ++outline;
+ fprintf(code_file, "#include \"%s\"\n", defines_file_name);
+ if (!dflag)
+ output_defines(externs_file);
+ }
+ else
+ {
+ putc_code(code_file, '\n');
+ output_defines(code_file);
+ }
+
+ if (dflag)
+ output_defines(defines_file);
+
+ output_rule_data();
+ output_yydefred();
+ output_actions();
+ free_parser();
+ output_debug();
+ if (rflag)
+ {
+ output_prefix(code_file);
+ write_section(code_file, xdecls);
+ write_section(code_file, tables);
+ }
+ write_section(code_file, global_vars);
+ if (!pure_parser)
+ {
+ write_section(code_file, impure_vars);
+ }
+ write_section(code_file, hdr_defs);
+ if (!pure_parser)
+ {
+ write_section(code_file, hdr_vars);
+ }
+ output_trailing_text();
+ write_section(code_file, body_1);
+ if (pure_parser)
+ {
+ write_section(code_file, body_vars);
+ }
+ write_section(code_file, body_2);
+ output_yyerror_call("syntax error");
+ write_section(code_file, body_3);
+ output_semantic_actions();
+ write_section(code_file, trailer);
+ output_yyerror_call("yacc stack overflow");
+ write_section(code_file, trailer_2);
+}
+
+#ifdef NO_LEAKS
+void
+output_leaks(void)
+{
+ DO_FREE(tally);
+ DO_FREE(width);
+ DO_FREE(order);
+}
+#endif
diff --git a/contrib/byacc/package/byacc.spec b/contrib/byacc/package/byacc.spec
new file mode 100644
index 000000000000..8f1fbb55bd54
--- /dev/null
+++ b/contrib/byacc/package/byacc.spec
@@ -0,0 +1,60 @@
+Summary: byacc - public domain Berkeley LALR Yacc parser generator
+%define AppProgram byacc
+%define AppVersion 20120115
+%define UseProgram yacc
+# $XTermId: byacc.spec,v 1.13 2012/01/15 19:30:29 tom Exp $
+Name: %{AppProgram}
+Version: %{AppVersion}
+Release: 1
+License: Public Domain, MIT
+Group: Applications/Development
+URL: ftp://invisible-island.net/%{AppProgram}
+Source0: %{AppProgram}-%{AppVersion}.tgz
+Packager: Thomas Dickey <dickey@invisible-island.net>
+
+%description
+This package provides a parser generator utility that reads a grammar
+specification from a file and generates an LR(1) parser for it. The
+parsers consist of a set of LALR(1) parsing tables and a driver
+routine written in the C programming language. It has a public domain
+license which includes the generated C.
+
+%prep
+
+%setup -q -n %{AppProgram}-%{AppVersion}
+
+%build
+
+INSTALL_PROGRAM='${INSTALL}' \
+ ./configure \
+ --program-prefix=b \
+ --target %{_target_platform} \
+ --prefix=%{_prefix} \
+ --bindir=%{_bindir} \
+ --libdir=%{_libdir} \
+ --mandir=%{_mandir}
+
+make
+
+%install
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+make install DESTDIR=$RPM_BUILD_ROOT
+( cd $RPM_BUILD_ROOT%{_bindir} && ln -s %{AppProgram} %{UseProgram} )
+
+strip $RPM_BUILD_ROOT%{_bindir}/%{AppProgram}
+
+%clean
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%{_prefix}/bin/%{AppProgram}
+%{_prefix}/bin/%{UseProgram}
+%{_mandir}/man1/%{AppProgram}.*
+
+%changelog
+# each patch should add its ChangeLog entries here
+
+* Sun Jun 06 2010 Thomas Dickey
+- initial version
diff --git a/contrib/byacc/package/debian/changelog b/contrib/byacc/package/debian/changelog
new file mode 100644
index 000000000000..98c08e28ee58
--- /dev/null
+++ b/contrib/byacc/package/debian/changelog
@@ -0,0 +1,223 @@
+byacc (20120115) unstable; urgency=low
+
+ * add testcases, improve documentation for "-s" option.
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Fri, 13 Jan 2012 20:44:34 -0500
+
+byacc (20111219) unstable; urgency=low
+
+ * add "-s" option.
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 19 Dec 2011 20:54:09 -0500
+
+byacc (20110908) unstable; urgency=low
+
+ * add "-i" option.
+ * add error-check in reader.c
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 05 Sep 2011 20:05:51 -0400
+
+byacc (20101229) unstable; urgency=low
+
+ * fixes from Christos Zoulos
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Wed, 29 Dec 2010 13:03:50 -0500
+
+byacc (20101226) unstable; urgency=low
+
+ * portability fix for MinGW
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 25 Dec 2010 19:37:54 -0500
+
+byacc (20101127) unstable; urgency=low
+
+ * corrected yyerror use of %parse-param data
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Sat, 27 Nov 2010 12:32:00 -0500
+
+byacc (20101126) unstable; urgency=low
+
+ * additional fix to generated code to avoid symbol conflict
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Fri, 26 Nov 2010 04:23:08 -0500
+
+byacc (20101124) unstable; urgency=low
+
+ * amend fix for Red Hat #112617 to restore warning message.
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 22 Nov 2010 08:21:23 -0500
+
+byacc (20101122) unstable; urgency=low
+
+ * fix for generated header to avoid symbol conflict
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Mon, 22 Nov 2010 08:21:23 -0500
+
+byacc (20100610) unstable; urgency=low
+
+ * Add package scripts to upstream source, for test-builds.
+
+ -- Thomas E. Dickey <dickey@invisible-island.net> Thu, 10 Jun 2010 08:59:11 -0400
+
+byacc (20100216-1) unstable; urgency=low
+
+ * New upstream release
+ * debian/source/format: Added using format "3.0 (quilt)"
+
+ -- Dave Beckett <dajobe@debian.org> Tue, 20 Apr 2010 12:56:11 -0700
+
+byacc (20091027-1) unstable; urgency=low
+
+ * New upstream release
+ * debian/control:
+ - Updated to policy 3.8.4
+ - Add ${misc:Depends}
+
+ -- Dave Beckett <dajobe@debian.org> Tue, 02 Feb 2010 21:36:34 -0800
+
+byacc (20090221-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Dave Beckett <dajobe@debian.org> Thu, 26 Feb 2009 21:06:20 -0800
+
+byacc (20080826-1) unstable; urgency=high
+
+ * New upstream release
+ * debian/patches/02-skeleton.patch: Removed - merged upstream
+ * debian/control: Updated to policy 3.8.0
+ * debian/preinst, debian/postrm: removed - empty (lintian)
+ * debian/watch: version 3 and make FTP passive
+ * Acknowledge NMU - thanks.
+
+ -- Dave Beckett <dajobe@debian.org> Wed, 11 Sep 2008 23:58:00 -0700
+
+byacc (20070509-1.1) unstable; urgency=high
+
+ * Non-maintainer upload.
+ * Fix stack overflow in skeleton.c with upstream patch.
+ Closes: #491182 aka CVE-2008-3196
+
+ -- Thomas Viehmann <tv@beamnet.de> Sun, 24 Aug 2008 23:13:07 +0200
+
+byacc (20070509-1) unstable; urgency=low
+
+ * New upstream release
+ * debian/watch: Fix to use passive FTP
+ * debian/compat: added instead of use of DH_COMPAT in debian/rules
+
+ -- Dave Beckett <dajobe@debian.org> Tue, 26 Jun 2007 22:39:45 -0700
+
+byacc (20050813-1) unstable; urgency=low
+
+ * New upstream release:
+ - Do not close union_file for -d option (Closes: #322858)
+
+ -- Dave Beckett <dajobe@debian.org> Sun, 14 Aug 2005 10:14:12 +0100
+
+byacc (20050505-1) unstable; urgency=low
+
+ * New maintainer (Closes: #321377)
+ * Switch to new upstream and new source (Closes: #240662)
+ * debian/copyright: Update to new upstream and add source information
+ (Closes: #166300)
+ * Acknowledge fix in NMUs (Closes: #283174)
+ * New manual page does not have the formatting problem (Closes: #100947)
+ * Added debian/watch file.
+
+ -- Dave Beckett <dajobe@debian.org> Fri, 5 Aug 2005 22:50:20 +0100
+
+byacc (1.9.1-1.1) unstable; urgency=low
+
+ * Remove alternative in prerm. Closes: #283174
+
+ -- LaMont Jones <lamont@debian.org> Fri, 26 Nov 2004 18:49:09 -0700
+
+byacc (1.9.1-1) unstable; urgency=low
+
+ * Maintainer upload.
+ * Fixed alternatives entry, closes: Bug#146195;
+ * Changed priority to "extra" at behest of Daniel Bungert,
+ closes: Bug#142271.
+ * Fixed awful packaging error which meant the test/ directory was excluded
+ from the orig.tar.gz.
+
+ -- Jason Henry Parker <henry@debian.org> Fri, 27 Sep 2002 16:25:27 -0400
+
+byacc (1.9-13.1) unstable; urgency=low
+
+ * Non-maintainer upload
+ * Removed erraneous escapes in manpage - some data wasn't visable,
+ closes: Bug#100947
+ * Alternatives entry added, closes: Bug#113168
+ * Standards-version: 3.5.6
+ * Maintainer script cleaning
+
+ -- Daniel Bungert <drb@debian.org> Fri, 29 Mar 2002 16:58:30 -0500
+
+byacc (1.9-13) unstable; urgency=low
+
+ * Applied patch from "Randolph Chung" <tausq@debian.org> to fix build problems
+ on ia64, closes: Bug#91966
+
+ -- Jason Henry Parker <henry@debian.org> Thu, 29 Mar 2001 21:41:19 +1000
+
+byacc (1.9-12) unstable; urgency=low
+
+ * Updated to latest version of debhelper, and Standards-Version: 3.2.1.0, closes: Bug#81444
+ * Added Build-Depends: debhelper, closes: Bug#70207
+ * Removed mktemp() calls in main.c
+
+ -- Jason Henry Parker <henry@debian.org> Mon, 18 Dec 2000 08:02:54 +1000
+
+byacc (1.9-11.7) unstable; urgency=low
+
+ * New maintainer.
+ * Updated to dh_make and standards version 2.4.0.0, no lintian errors
+ or warnings.
+ * Added several more files from the upstream distribution to
+ /usr/doc/byacc.
+
+ -- Jason Henry Parker <henry@debian.org> Sat, 2 Jan 1999 03:04:17 +1000
+
+byacc (1.9-11.6) unstable; urgency=low
+
+ * Patch by <mdorman@law.miami.edu> to remove some
+ superfluous files that can interfere with the build process on other
+ architectures. (Bug #21607).
+
+ -- Vincent Renardias <vincent@waw.com> Fri, 24 Apr 1998 19:56:58 +0200
+
+byacc (1.9-11.5) unstable; urgency=low
+
+ * Added 'binary-arch' target in debian/rules (Bug #12742).
+
+ -- Vincent Renardias <vincent@waw.com> Sun, 9 Nov 1997 23:37:31 +0100
+
+byacc (1.9-11.4) unstable; urgency=low
+
+ * Cosmetic change (Fix bug #9623).
+
+ -- Vincent Renardias <vincent@waw.com> Fri, 9 May 1997 16:30:24 +0200
+
+byacc (1.9-11.3) unstable; urgency=low
+
+ * Rebuilt with libc6.
+
+ -- Debian QA Group <debian-qa@lists.debian.org> Thu, 1 May 1997 22:02:04 +0200
+
+byacc (1.9-11.2) unstable; urgency=low
+
+ * Orphaned the package at his maintainer's request (dgregor@coil.com).
+
+ -- Debian QA Group <debian-qa@lists.debian.org> Sun, 20 Apr 1997 20:03:03 +0200
+
+byacc (1.9-11.1) unstable; urgency=low
+
+ * Converted to new source format (Fixes #8085).
+ * Compressed manpage.
+ * Fixed to allow compilation on non-i386 (Fixes #3361).
+ * Added extended description (Fixes #3567).
+ * Added diversion to avoid conflict with bison (Fixes #8086).
+
+ -- Vincent Renardias <vincent@waw.com> Sun, 20 Apr 1997 15:59:28 +0200
diff --git a/contrib/byacc/package/debian/compat b/contrib/byacc/package/debian/compat
new file mode 100644
index 000000000000..7ed6ff82de6b
--- /dev/null
+++ b/contrib/byacc/package/debian/compat
@@ -0,0 +1 @@
+5
diff --git a/contrib/byacc/package/debian/control b/contrib/byacc/package/debian/control
new file mode 100644
index 000000000000..720aadab6fe9
--- /dev/null
+++ b/contrib/byacc/package/debian/control
@@ -0,0 +1,17 @@
+Source: byacc
+Maintainer: Dave Beckett <dajobe@debian.org>
+Section: devel
+Priority: extra
+Standards-Version: 3.8.4
+Build-Depends: debhelper (>= 5)
+Homepage: http://invisible-island.net/byacc/
+
+Package: byacc
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: public domain Berkeley LALR Yacc parser generator
+ This package provides a parser generator utility that reads a grammar
+ specification from a file and generates an LR(1) parser for it. The
+ parsers consist of a set of LALR(1) parsing tables and a driver
+ routine written in the C programming language. It has a public domain
+ license which includes the generated C.
diff --git a/contrib/byacc/package/debian/copyright b/contrib/byacc/package/debian/copyright
new file mode 100644
index 000000000000..ea6c6a585792
--- /dev/null
+++ b/contrib/byacc/package/debian/copyright
@@ -0,0 +1,120 @@
+Upstream source http://dickey.his.com/byacc/byacc.html
+
+Berkeley Yacc is in the public domain; changes made to it by the current
+maintainer are likewise unrestricted. That applies to most of the files.
+A few files (currently those related to autoconf scripting) have other
+licenses as noted here.
+
+Current byacc upstream maintainer: Thomas Dickey <dickey@invisible-island.net>
+
+Public domain notice and no warranty:
+-------------------------------------------------------------------------------
+ Berkeley Yacc is an LALR(1) parser generator. Berkeley Yacc has been made
+as compatible as possible with AT&T Yacc. Berkeley Yacc can accept any input
+specification that conforms to the AT&T Yacc documentation. Specifications
+that take advantage of undocumented features of AT&T Yacc will probably be
+rejected.
+
+ Berkeley Yacc is distributed with no warranty whatever. The code
+is certain to contain errors. Neither the author nor any contributor
+takes responsibility for any consequences of its use.
+
+ Berkeley Yacc is in the public domain. The data structures and algorithms
+used in Berkeley Yacc are all either taken from documents available to the
+general public or are inventions of the author. Anyone may freely distribute
+source or binary forms of Berkeley Yacc whether unchanged or modified.
+Distributers may charge whatever fees they can obtain for Berkeley Yacc.
+Programs generated by Berkeley Yacc may be distributed freely.
+
+ Please report bugs to
+
+ robert.corbett@eng.Sun.COM
+
+Include a small example if possible. Please include the banner string from
+skeleton.c with the bug report. Do not expect rapid responses.
+-------------------------------------------------------------------------------
+
+Files: aclocal.m4
+Licence: other-BSD
+Copyright: 2004-2011,2012 by Thomas E. Dickey
+ 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, distribute with modifications, 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 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 ABOVE 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(s) of the above copyright
+ holders shall not be used in advertising or otherwise to promote the
+ sale, use or other dealings in this Software without prior written
+ authorization.
+
+Files: install-sh
+Copyright: 1994 X Consortium
+Licence: other-BSD
+ 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
+ X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+ TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the name of the X Consortium shall not
+ be used in advertising or otherwise to promote the sale, use or other deal-
+ ings in this Software without prior written authorization from the X Consor-
+ tium.
+
+ FSF changes to this file are in the public domain.
+
+ Calling this script install-sh is preferred over install.sh, to prevent
+ `make' implicit rules from creating a file called install from it
+ when there is no Makefile.
+
+ This script is compatible with the BSD install script, but was written
+ from scratch. It can only install one file at a time, a restriction
+ shared with many OS's install programs.
+
+Files: debian/*
+Copyright: 2012 Thomas E. Dickey
+Licence: other-BSD
+ Permission to use, copy, modify, and distribute this software and its
+ documentation for any purpose and without fee is hereby granted,
+ provided that the above copyright notice appear in all copies and that
+ both that copyright notice and this permission notice appear in
+ supporting documentation, and that the name of the above listed
+ copyright holder(s) not be used in advertising or publicity pertaining
+ to distribution of the software without specific, written prior
+ permission.
+
+ THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
+ TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
+ LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in '/usr/share/common-licenses/GPL-2'
diff --git a/contrib/byacc/package/debian/docs b/contrib/byacc/package/debian/docs
new file mode 100644
index 000000000000..cbda209a3c10
--- /dev/null
+++ b/contrib/byacc/package/debian/docs
@@ -0,0 +1,4 @@
+README
+ACKNOWLEDGEMENTS
+NEW_FEATURES
+NOTES
diff --git a/contrib/byacc/package/debian/postinst b/contrib/byacc/package/debian/postinst
new file mode 100644
index 000000000000..ca6276de7ae7
--- /dev/null
+++ b/contrib/byacc/package/debian/postinst
@@ -0,0 +1,15 @@
+#! /bin/sh
+# postinst script for byacc
+
+set -e
+
+if [ $1 != "upgrade" ] ; then
+ update-alternatives \
+ --install /usr/bin/yacc yacc /usr/bin/byacc 80 \
+ --slave /usr/share/man/man1/yacc.1.gz yaccman \
+ /usr/share/man/man1/byacc.1.gz
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/contrib/byacc/package/debian/prerm b/contrib/byacc/package/debian/prerm
new file mode 100644
index 000000000000..f3889d73a598
--- /dev/null
+++ b/contrib/byacc/package/debian/prerm
@@ -0,0 +1,12 @@
+#! /bin/sh
+# prerm script for byacc
+
+set -e
+
+if [ $1 != "upgrade" ]; then
+ update-alternatives --remove yacc /usr/bin/byacc
+fi
+
+#DEBHELPER#
+
+exit 0
diff --git a/contrib/byacc/package/debian/rules b/contrib/byacc/package/debian/rules
new file mode 100755
index 000000000000..f9424ac909fa
--- /dev/null
+++ b/contrib/byacc/package/debian/rules
@@ -0,0 +1,93 @@
+#!/usr/bin/make -f
+# MAde with the aid of dh_make, by Craig Small
+# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
+# Some lines taken from debmake, by Cristoph Lameter.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+
+CFLAGS =
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+else
+ CFLAGS += -O2
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+ INSTALL_PROGRAM += -s
+endif
+
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+
+ CFLAGS="$(CFLAGS)" ./configure \
+ --host=$(DEB_HOST_GNU_TYPE) \
+ --build=$(DEB_BUILD_GNU_TYPE) \
+ --prefix=/usr \
+ --mandir=\$${prefix}/share/man \
+ --sysconfdir=/etc \
+ --program-transform-name='s,^,b,'
+
+ touch configure-stamp
+
+build: build-stamp
+build-stamp: configure-stamp
+ dh_testdir
+
+ $(MAKE)
+
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+
+ [ ! -f Makefile ] || $(MAKE) clean
+
+ rm -f configure-stamp build-stamp install-stamp \
+ config.cache config.h config.status config.log makefile
+
+ rm -f *.o yacc
+
+ dh_clean
+
+install: install-stamp
+install-stamp: build-stamp
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ $(MAKE) install DESTDIR=$(CURDIR)/debian/byacc
+
+ touch install-stamp
+
+# Build architecture-independent files here.
+binary-indep: build install
+# No binary-indep target.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installdocs
+ dh_installexamples
+ dh_installchangelogs CHANGES
+ dh_strip
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install install-stamp
diff --git a/contrib/byacc/package/debian/source/format b/contrib/byacc/package/debian/source/format
new file mode 100644
index 000000000000..163aaf8d82b6
--- /dev/null
+++ b/contrib/byacc/package/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/contrib/byacc/package/debian/watch b/contrib/byacc/package/debian/watch
new file mode 100644
index 000000000000..de083b06a198
--- /dev/null
+++ b/contrib/byacc/package/debian/watch
@@ -0,0 +1,4 @@
+version=3
+
+opts=passive ftp://invisible-island.net/byacc/byacc-(\d+)\.tgz \
+ debian uupdate
diff --git a/contrib/byacc/package/pkgsrc/DESCR b/contrib/byacc/package/pkgsrc/DESCR
new file mode 100644
index 000000000000..fe018659e9a4
--- /dev/null
+++ b/contrib/byacc/package/pkgsrc/DESCR
@@ -0,0 +1,6 @@
+Berkeley Yacc (byacc) is a LALR(1) parser generator. Berkeley Yacc
+has been made as compatible as possible with AT&T Yacc. Berkeley
+Yacc can accept any input specification that conforms to the AT&T
+Yacc documentation.
+
+Some programs depend on a byacc (instead of bison).
diff --git a/contrib/byacc/package/pkgsrc/Makefile b/contrib/byacc/package/pkgsrc/Makefile
new file mode 100644
index 000000000000..416ea851c454
--- /dev/null
+++ b/contrib/byacc/package/pkgsrc/Makefile
@@ -0,0 +1,19 @@
+# $NetBSD: Makefile,v 1.9 2008/07/24 17:13:00 tonnerre Exp $
+#
+
+DISTNAME= byacc-20050813
+PKGREVISION= 1
+CATEGORIES= devel
+MASTER_SITES= ftp://invisible-island.net/byacc/
+EXTRACT_SUFX= .tgz
+
+MAINTAINER= pkgsrc-users@NetBSD.org
+HOMEPAGE= http://dickey.his.com/byacc/byacc.html
+COMMENT= Berkeley Yacc
+
+PKG_DESTDIR_SUPPORT= user-destdir
+
+GNU_CONFIGURE= YES
+MAKE_FILE= makefile
+
+.include "../../mk/bsd.pkg.mk"
diff --git a/contrib/byacc/package/pkgsrc/PLIST b/contrib/byacc/package/pkgsrc/PLIST
new file mode 100644
index 000000000000..5bcfece36ca8
--- /dev/null
+++ b/contrib/byacc/package/pkgsrc/PLIST
@@ -0,0 +1,3 @@
+@comment $NetBSD: PLIST,v 1.2 2005/04/13 14:11:54 wiz Exp $
+bin/yacc
+man/man1/yacc.1
diff --git a/contrib/byacc/package/pkgsrc/distinfo b/contrib/byacc/package/pkgsrc/distinfo
new file mode 100644
index 000000000000..99252a686757
--- /dev/null
+++ b/contrib/byacc/package/pkgsrc/distinfo
@@ -0,0 +1,6 @@
+$NetBSD: distinfo,v 1.4 2008/07/24 17:13:00 tonnerre Exp $
+
+SHA1 (byacc-20050813.tgz) = 3258494f3422eb3150944c1823af1c9c2c386062
+RMD160 (byacc-20050813.tgz) = 3ee159857a79025a83e2b0807577925fe460f816
+Size (byacc-20050813.tgz) = 138684 bytes
+SHA1 (patch-aa) = decae78775a5e0f1e1f7aaaa258da53903aa1f7a
diff --git a/usr.bin/yacc/reader.c b/contrib/byacc/reader.c
index f81f17305239..d41e92a52067 100644
--- a/usr.bin/yacc/reader.c
+++ b/contrib/byacc/reader.c
@@ -1,119 +1,49 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)reader.c 5.7 (Berkeley) 1/20/91";
-#endif
-#endif
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+/* $Id: reader.c,v 1.33 2011/09/06 22:56:53 tom Exp $ */
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
#include "defs.h"
/* The line size must be a positive integer. One hundred was chosen */
/* because few lines in Yacc input grammars exceed 100 characters. */
/* Note that if a line exceeds LINESIZE characters, the line buffer */
-/* will be expanded to accommodate it. */
+/* will be expanded to accomodate it. */
#define LINESIZE 100
-char *cache;
-int cinc, cache_size;
+#define L_CURL '{'
+#define R_CURL '}'
+
+static void start_rule(bucket *bp, int s_lineno);
+
+static char *cache;
+static int cinc, cache_size;
-int ntags, tagmax;
-char **tag_table;
+int ntags;
+static int tagmax;
+static char **tag_table;
-char saw_eof, unionized;
+static char saw_eof;
+char unionized;
char *cptr, *line;
-int linesize;
-
-bucket *goal;
-int prec;
-int gensym;
-char last_was_action;
-
-int maxitems;
-bucket **pitem;
-
-int maxrules;
-bucket **plhs;
-
-int name_pool_size;
-char *name_pool;
-
-static const char line_format[] = "#line %d \"%s\"\n";
-
-static void add_symbol(void);
-static void advance_to_start(void);
-static void cachec(int);
-static void check_symbols(void);
-static void copy_action(void);
-static void copy_ident(void);
-static void copy_text(void);
-static void copy_union(void);
-static void declare_expect(int);
-static void declare_start(void);
-static void declare_tokens(int);
-static void declare_types(void);
-static char *dup_line(void);
-static void end_rule(void);
-static void expand_items(void);
-static void expand_rules(void);
-static void free_tags(void);
-static void get_line(void);
-static bucket *get_literal(void);
-static bucket *get_name(void);
-static int get_number(void);
-static char *get_tag(void);
-static int hexval(int);
-static void initialize_grammar(void);
-static void insert_empty_rule(void);
-static int is_reserved(char *);
-static int keyword(void);
-static int mark_symbol(void);
-static int nextc(void);
-static void pack_grammar(void);
-static void pack_names(void);
-static void pack_symbols(void);
-static void print_grammar(void);
-static void read_declarations(void);
-static void read_grammar(void);
-static void skip_comment(void);
-static void start_rule(bucket *, int);
+static int linesize;
+
+static bucket *goal;
+static Value_t prec;
+static int gensym;
+static char last_was_action;
+
+static int maxitems;
+static bucket **pitem;
+
+static int maxrules;
+static bucket **plhs;
+
+static size_t name_pool_size;
+static char *name_pool;
+
+char line_format[] = "#line %d \"%s\"\n";
+
+param *lex_param;
+param *parse_param;
static void
cachec(int c)
@@ -122,14 +52,13 @@ cachec(int c)
if (cinc >= cache_size)
{
cache_size += 256;
- cache = realloc(cache, cache_size);
- if (cache == 0) no_space();
+ cache = REALLOC(cache, cache_size);
+ NO_SPACE(cache);
}
- cache[cinc] = c;
+ cache[cinc] = (char)c;
++cinc;
}
-
static void
get_line(void)
{
@@ -139,7 +68,11 @@ get_line(void)
if (saw_eof || (c = getc(f)) == EOF)
{
- if (line) { free(line); line = 0; }
+ if (line)
+ {
+ FREE(line);
+ line = 0;
+ }
cptr = 0;
saw_eof = 1;
return;
@@ -147,26 +80,31 @@ get_line(void)
if (line == 0 || linesize != (LINESIZE + 1))
{
- if (line) free(line);
+ if (line)
+ FREE(line);
linesize = LINESIZE + 1;
- line = malloc(linesize);
- if (line == 0) no_space();
+ line = MALLOC(linesize);
+ NO_SPACE(line);
}
i = 0;
++lineno;
for (;;)
{
- line[i] = c;
- if (c == '\n') { cptr = line; return; }
+ line[i] = (char)c;
+ if (c == '\n')
+ {
+ cptr = line;
+ return;
+ }
if (++i >= linesize)
{
linesize += LINESIZE;
- line = realloc(line, linesize);
- if (line == 0) no_space();
+ line = REALLOC(line, linesize);
+ NO_SPACE(line);
}
c = getc(f);
- if (c == EOF)
+ if (c == EOF)
{
line[i] = '\n';
saw_eof = 1;
@@ -176,25 +114,26 @@ get_line(void)
}
}
-
static char *
dup_line(void)
{
char *p, *s, *t;
- if (line == 0) return (0);
+ if (line == 0)
+ return (0);
s = line;
- while (*s != '\n') ++s;
- p = malloc(s - line + 1);
- if (p == 0) no_space();
+ while (*s != '\n')
+ ++s;
+ p = MALLOC(s - line + 1);
+ NO_SPACE(p);
s = line;
t = p;
- while ((*t++ = *s++) != '\n') continue;
+ while ((*t++ = *s++) != '\n')
+ continue;
return (p);
}
-
static void
skip_comment(void)
{
@@ -210,7 +149,7 @@ skip_comment(void)
if (*s == '*' && s[1] == '/')
{
cptr = s + 2;
- free(st_line);
+ FREE(st_line);
return;
}
if (*s == '\n')
@@ -225,7 +164,6 @@ skip_comment(void)
}
}
-
static int
nextc(void)
{
@@ -245,7 +183,8 @@ nextc(void)
{
case '\n':
get_line();
- if (line == 0) return (EOF);
+ if (line == 0)
+ return (EOF);
s = cptr;
break;
@@ -274,11 +213,12 @@ nextc(void)
else if (s[1] == '/')
{
get_line();
- if (line == 0) return (EOF);
+ if (line == 0)
+ return (EOF);
s = cptr;
break;
}
- /* FALLTHROUGH */
+ /* FALLTHRU */
default:
cptr = s;
@@ -287,6 +227,35 @@ nextc(void)
}
}
+/*
+ * Compare keyword to cached token, treating '_' and '-' the same. Some
+ * grammars rely upon this misfeature.
+ */
+static int
+matchec(const char *name)
+{
+ const char *p = cache;
+ const char *q = name;
+ int code = 0; /* assume mismatch */
+
+ while (*p != '\0' && *q != '\0')
+ {
+ char a = *p++;
+ char b = *q++;
+ if (a == '_')
+ a = '-';
+ if (b == '_')
+ b = '-';
+ if (a != b)
+ break;
+ if (*p == '\0' && *q == '\0')
+ {
+ code = 1;
+ break;
+ }
+ }
+ return code;
+}
static int
keyword(void)
@@ -302,40 +271,59 @@ keyword(void)
{
if (isalpha(c))
{
- if (isupper(c)) c = tolower(c);
+ if (isupper(c))
+ c = tolower(c);
cachec(c);
}
- else if (isdigit(c) || c == '_' || c == '.' || c == '$')
+ else if (isdigit(c)
+ || c == '-'
+ || c == '_'
+ || c == '.'
+ || c == '$')
+ {
cachec(c);
+ }
else
+ {
break;
+ }
c = *++cptr;
}
cachec(NUL);
- if (strcmp(cache, "token") == 0 || strcmp(cache, "term") == 0)
+ if (matchec("token") || matchec("term"))
return (TOKEN);
- if (strcmp(cache, "type") == 0)
+ if (matchec("type"))
return (TYPE);
- if (strcmp(cache, "left") == 0)
+ if (matchec("left"))
return (LEFT);
- if (strcmp(cache, "right") == 0)
+ if (matchec("right"))
return (RIGHT);
- if (strcmp(cache, "nonassoc") == 0 || strcmp(cache, "binary") == 0)
+ if (matchec("nonassoc") || matchec("binary"))
return (NONASSOC);
- if (strcmp(cache, "start") == 0)
+ if (matchec("start"))
return (START);
- if (strcmp(cache, "union") == 0)
+ if (matchec("union"))
return (UNION);
- if (strcmp(cache, "ident") == 0)
+ if (matchec("ident"))
return (IDENT);
- if (strcmp(cache, "expect") == 0)
+ if (matchec("expect"))
return (EXPECT);
+ if (matchec("expect-rr"))
+ return (EXPECT_RR);
+ if (matchec("pure-parser"))
+ return (PURE_PARSER);
+ if (matchec("parse-param"))
+ return (PARSE_PARAM);
+ if (matchec("lex-param"))
+ return (LEX_PARAM);
+ if (matchec("yacc"))
+ return (POSIX_YACC);
}
else
{
++cptr;
- if (c == '{')
+ if (c == L_CURL)
return (TEXT);
if (c == '%' || c == '\\')
return (MARK);
@@ -349,11 +337,10 @@ keyword(void)
return (NONASSOC);
}
syntax_error(lineno, line, t_cptr);
- /*NOTREACHED*/
- return (0);
+ /*NOTREACHED */
+ return (-1);
}
-
static void
copy_ident(void)
{
@@ -361,8 +348,10 @@ copy_ident(void)
FILE *f = output_file;
c = nextc();
- if (c == EOF) unexpected_EOF();
- if (c != '"') syntax_error(lineno, line, cptr);
+ if (c == EOF)
+ unexpected_EOF();
+ if (c != '"')
+ syntax_error(lineno, line, cptr);
++outline;
fprintf(f, "#ident \"");
for (;;)
@@ -383,7 +372,6 @@ copy_ident(void)
}
}
-
static void
copy_text(void)
{
@@ -401,18 +389,20 @@ copy_text(void)
if (line == 0)
unterminated_text(t_lineno, t_line, t_cptr);
}
- if (!lflag) fprintf(f, line_format, lineno, input_file_name);
+ if (!lflag)
+ fprintf(f, line_format, lineno, input_file_name);
-loop:
+ loop:
c = *cptr++;
switch (c)
{
case '\n':
- next_line:
+ next_line:
putc('\n', f);
need_newline = 0;
get_line();
- if (line) goto loop;
+ if (line)
+ goto loop;
unterminated_text(t_lineno, t_line, t_cptr);
case '\'':
@@ -431,7 +421,7 @@ loop:
if (c == quote)
{
need_newline = 1;
- free(s_line);
+ FREE(s_line);
goto loop;
}
if (c == '\n')
@@ -483,7 +473,7 @@ loop:
{
putc('/', f);
++cptr;
- free(c_line);
+ FREE(c_line);
goto loop;
}
if (c == '\n')
@@ -499,14 +489,15 @@ loop:
case '%':
case '\\':
- if (*cptr == '}')
+ if (*cptr == R_CURL)
{
- if (need_newline) putc('\n', f);
+ if (need_newline)
+ putc('\n', f);
++cptr;
- free(t_line);
+ FREE(t_line);
return;
}
- /* FALLTHROUGH */
+ /* FALLTHRU */
default:
putc(c, f);
@@ -515,6 +506,21 @@ loop:
}
}
+static void
+puts_both(const char *s)
+{
+ fputs(s, text_file);
+ if (dflag)
+ fputs(s, union_file);
+}
+
+static void
+putc_both(int c)
+{
+ putc(c, text_file);
+ if (dflag)
+ putc(c, union_file);
+}
static void
copy_union(void)
@@ -526,37 +532,44 @@ copy_union(void)
char *u_line = dup_line();
char *u_cptr = u_line + (cptr - line - 6);
- if (unionized) over_unionized(cptr - 6);
+ if (unionized)
+ over_unionized(cptr - 6);
unionized = 1;
if (!lflag)
fprintf(text_file, line_format, lineno, input_file_name);
- fprintf(text_file, "typedef union");
- if (dflag) fprintf(union_file, "typedef union");
+ puts_both("#ifdef YYSTYPE\n");
+ puts_both("#undef YYSTYPE_IS_DECLARED\n");
+ puts_both("#define YYSTYPE_IS_DECLARED 1\n");
+ puts_both("#endif\n");
+ puts_both("#ifndef YYSTYPE_IS_DECLARED\n");
+ puts_both("#define YYSTYPE_IS_DECLARED 1\n");
+ puts_both("typedef union");
depth = 0;
-loop:
+ loop:
c = *cptr++;
- putc(c, text_file);
- if (dflag) putc(c, union_file);
+ putc_both(c);
switch (c)
{
case '\n':
- next_line:
+ next_line:
get_line();
- if (line == 0) unterminated_union(u_lineno, u_line, u_cptr);
+ if (line == 0)
+ unterminated_union(u_lineno, u_line, u_cptr);
goto loop;
- case '{':
+ case L_CURL:
++depth;
goto loop;
- case '}':
+ case R_CURL:
if (--depth == 0)
{
- fprintf(text_file, " YYSTYPE;\n");
- free(u_line);
+ puts_both(" YYSTYPE;\n");
+ puts_both("#endif /* !YYSTYPE_IS_DECLARED */\n");
+ FREE(u_line);
return;
}
goto loop;
@@ -572,11 +585,10 @@ loop:
for (;;)
{
c = *cptr++;
- putc(c, text_file);
- if (dflag) putc(c, union_file);
+ putc_both(c);
if (c == quote)
{
- free(s_line);
+ FREE(s_line);
goto loop;
}
if (c == '\n')
@@ -584,8 +596,7 @@ loop:
if (c == '\\')
{
c = *cptr++;
- putc(c, text_file);
- if (dflag) putc(c, union_file);
+ putc_both(c);
if (c == '\n')
{
get_line();
@@ -600,23 +611,19 @@ loop:
c = *cptr;
if (c == '/')
{
- putc('*', text_file);
- if (dflag) putc('*', union_file);
+ putc_both('*');
while ((c = *++cptr) != '\n')
{
if (c == '*' && cptr[1] == '/')
{
- fprintf(text_file, "* ");
- if (dflag) fprintf(union_file, "* ");
+ puts_both("* ");
}
else
{
- putc(c, text_file);
- if (dflag) putc(c, union_file);
+ putc_both(c);
}
}
- fprintf(text_file, "*/\n");
- if (dflag) fprintf(union_file, "*/\n");
+ puts_both("*/\n");
goto next_line;
}
if (c == '*')
@@ -625,20 +632,17 @@ loop:
char *c_line = dup_line();
char *c_cptr = c_line + (cptr - line - 1);
- putc('*', text_file);
- if (dflag) putc('*', union_file);
+ putc_both('*');
++cptr;
for (;;)
{
c = *cptr++;
- putc(c, text_file);
- if (dflag) putc(c, union_file);
+ putc_both(c);
if (c == '*' && *cptr == '/')
{
- putc('/', text_file);
- if (dflag) putc('/', union_file);
+ putc_both('/');
++cptr;
- free(c_line);
+ FREE(c_line);
goto loop;
}
if (c == '\n')
@@ -656,6 +660,117 @@ loop:
}
}
+/*
+ * Keep a linked list of parameters
+ */
+static void
+copy_param(int k)
+{
+ char *buf;
+ int c;
+ param *head, *p;
+ int i;
+ int name, type2;
+
+ c = nextc();
+ if (c == EOF)
+ unexpected_EOF();
+ if (c != '{')
+ goto out;
+ cptr++;
+
+ c = nextc();
+ if (c == EOF)
+ unexpected_EOF();
+ if (c == '}')
+ goto out;
+
+ buf = MALLOC(linesize);
+ NO_SPACE(buf);
+
+ for (i = 0; (c = *cptr++) != '}'; i++)
+ {
+ if (c == '\0')
+ missing_brace();
+ if (c == EOF)
+ unexpected_EOF();
+ buf[i] = (char)c;
+ }
+
+ if (i == 0)
+ goto out;
+
+ buf[i--] = '\0';
+ while (i >= 0 && isspace(UCH(buf[i])))
+ buf[i--] = '\0';
+
+ if (buf[i] == ']')
+ {
+ int level = 1;
+ while (i >= 0 && level > 0 && buf[i] != '[')
+ {
+ if (buf[i] == ']')
+ ++level;
+ else if (buf[i] == '[')
+ --level;
+ i--;
+ }
+ if (i <= 0)
+ unexpected_EOF();
+ type2 = i--;
+ }
+ else
+ {
+ type2 = i + 1;
+ }
+
+ while (i >= 0 && (isalnum(UCH(buf[i])) ||
+ UCH(buf[i]) == '_'))
+ i--;
+
+ if (!isspace(UCH(buf[i])) && buf[i] != '*')
+ goto out;
+
+ name = i + 1;
+
+ p = MALLOC(sizeof(*p));
+ NO_SPACE(p);
+
+ p->type2 = strdup(buf + type2);
+ NO_SPACE(p->type2);
+
+ buf[type2] = '\0';
+
+ p->name = strdup(buf + name);
+ NO_SPACE(p->name);
+
+ buf[name] = '\0';
+ p->type = buf;
+
+ if (k == LEX_PARAM)
+ head = lex_param;
+ else
+ head = parse_param;
+
+ if (head != NULL)
+ {
+ while (head->next)
+ head = head->next;
+ head->next = p;
+ }
+ else
+ {
+ if (k == LEX_PARAM)
+ lex_param = p;
+ else
+ parse_param = p;
+ }
+ p->next = NULL;
+ return;
+
+ out:
+ syntax_error(lineno, line, cptr);
+}
static int
hexval(int c)
@@ -669,7 +784,6 @@ hexval(int c)
return (-1);
}
-
static bucket *
get_literal(void)
{
@@ -687,8 +801,10 @@ get_literal(void)
for (;;)
{
c = *cptr++;
- if (c == quote) break;
- if (c == '\n') unterminated_string(s_lineno, s_line, s_cptr);
+ if (c == quote)
+ break;
+ if (c == '\n')
+ unterminated_string(s_lineno, s_line, s_cptr);
if (c == '\\')
{
char *c_cptr = cptr - 1;
@@ -698,11 +814,18 @@ get_literal(void)
{
case '\n':
get_line();
- if (line == 0) unterminated_string(s_lineno, s_line, s_cptr);
+ if (line == 0)
+ unterminated_string(s_lineno, s_line, s_cptr);
continue;
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
n = c - '0';
c = *cptr;
if (IS_OCTAL(c))
@@ -715,9 +838,10 @@ get_literal(void)
++cptr;
}
}
- if (n > (int)UCHAR_MAX) illegal_character(c_cptr);
+ if (n > MAXCHAR)
+ illegal_character(c_cptr);
c = n;
- break;
+ break;
case 'x':
c = *cptr++;
@@ -728,30 +852,46 @@ get_literal(void)
{
c = *cptr;
i = hexval(c);
- if (i < 0 || i >= 16) break;
+ if (i < 0 || i >= 16)
+ break;
++cptr;
n = (n << 4) + i;
- if (n > (int)UCHAR_MAX) illegal_character(c_cptr);
+ if (n > MAXCHAR)
+ illegal_character(c_cptr);
}
c = n;
break;
- case 'a': c = 7; break;
- case 'b': c = '\b'; break;
- case 'f': c = '\f'; break;
- case 'n': c = '\n'; break;
- case 'r': c = '\r'; break;
- case 't': c = '\t'; break;
- case 'v': c = '\v'; break;
+ case 'a':
+ c = 7;
+ break;
+ case 'b':
+ c = '\b';
+ break;
+ case 'f':
+ c = '\f';
+ break;
+ case 'n':
+ c = '\n';
+ break;
+ case 'r':
+ c = '\r';
+ break;
+ case 't':
+ c = '\t';
+ break;
+ case 'v':
+ c = '\v';
+ break;
}
}
cachec(c);
}
- free(s_line);
+ FREE(s_line);
n = cinc;
- s = malloc(n);
- if (s == 0) no_space();
+ s = MALLOC(n);
+ NO_SPACE(s);
for (i = 0; i < n; ++i)
s[i] = cache[i];
@@ -764,7 +904,7 @@ get_literal(void)
for (i = 0; i < n; ++i)
{
- c = ((unsigned char *)s)[i];
+ c = UCH(s[i]);
if (c == '\\' || c == cache[0])
{
cachec('\\');
@@ -777,13 +917,27 @@ get_literal(void)
cachec('\\');
switch (c)
{
- case 7: cachec('a'); break;
- case '\b': cachec('b'); break;
- case '\f': cachec('f'); break;
- case '\n': cachec('n'); break;
- case '\r': cachec('r'); break;
- case '\t': cachec('t'); break;
- case '\v': cachec('v'); break;
+ case 7:
+ cachec('a');
+ break;
+ case '\b':
+ cachec('b');
+ break;
+ case '\f':
+ cachec('f');
+ break;
+ case '\n':
+ cachec('n');
+ break;
+ case '\r':
+ cachec('r');
+ break;
+ case '\t':
+ cachec('t');
+ break;
+ case '\v':
+ cachec('v');
+ break;
default:
cachec(((c >> 6) & 7) + '0');
cachec(((c >> 3) & 7) + '0');
@@ -802,34 +956,34 @@ get_literal(void)
bp = lookup(cache);
bp->class = TERM;
if (n == 1 && bp->value == UNDEFINED)
- bp->value = *(unsigned char *)s;
- free(s);
+ bp->value = UCH(*s);
+ FREE(s);
return (bp);
}
-
static int
is_reserved(char *name)
{
char *s;
if (strcmp(name, ".") == 0 ||
- strcmp(name, "$accept") == 0 ||
- strcmp(name, "$end") == 0)
+ strcmp(name, "$accept") == 0 ||
+ strcmp(name, "$end") == 0)
return (1);
- if (name[0] == '$' && name[1] == '$' && isdigit(name[2]))
+ if (name[0] == '$' && name[1] == '$' && isdigit(UCH(name[2])))
{
s = name + 3;
- while (isdigit(*s)) ++s;
- if (*s == NUL) return (1);
+ while (isdigit(UCH(*s)))
+ ++s;
+ if (*s == NUL)
+ return (1);
}
return (0);
}
-
static bucket *
get_name(void)
{
@@ -840,26 +994,25 @@ get_name(void)
cachec(c);
cachec(NUL);
- if (is_reserved(cache)) used_reserved(cache);
+ if (is_reserved(cache))
+ used_reserved(cache);
return (lookup(cache));
}
-
-static int
+static Value_t
get_number(void)
{
int c;
- int n;
+ Value_t n;
n = 0;
for (c = *cptr; isdigit(c); c = *++cptr)
- n = 10*n + (c - '0');
+ n = (Value_t) (10 * n + (c - '0'));
return (n);
}
-
static char *
get_tag(void)
{
@@ -872,16 +1025,23 @@ get_tag(void)
++cptr;
c = nextc();
- if (c == EOF) unexpected_EOF();
+ if (c == EOF)
+ unexpected_EOF();
if (!isalpha(c) && c != '_' && c != '$')
illegal_tag(t_lineno, t_line, t_cptr);
cinc = 0;
- do { cachec(c); c = *++cptr; } while (IS_IDENT(c));
+ do
+ {
+ cachec(c);
+ c = *++cptr;
+ }
+ while (IS_IDENT(c));
cachec(NUL);
c = nextc();
- if (c == EOF) unexpected_EOF();
+ if (c == EOF)
+ unexpected_EOF();
if (c != '>')
illegal_tag(t_lineno, t_line, t_cptr);
++cptr;
@@ -889,45 +1049,52 @@ get_tag(void)
for (i = 0; i < ntags; ++i)
{
if (strcmp(cache, tag_table[i]) == 0)
+ {
+ FREE(t_line);
return (tag_table[i]);
+ }
}
if (ntags >= tagmax)
{
tagmax += 16;
tag_table = (char **)
- (tag_table ? realloc(tag_table, tagmax*sizeof(char *))
- : malloc(tagmax*sizeof(char *)));
- if (tag_table == 0) no_space();
+ (tag_table
+ ? REALLOC(tag_table, (unsigned)tagmax * sizeof(char *))
+ : MALLOC((unsigned)tagmax * sizeof(char *)));
+ NO_SPACE(tag_table);
}
- s = malloc(cinc);
- if (s == 0) no_space();
+ s = MALLOC(cinc);
+ NO_SPACE(s);
+
strcpy(s, cache);
tag_table[ntags] = s;
++ntags;
- free(t_line);
+ FREE(t_line);
return (s);
}
-
static void
declare_tokens(int assoc)
{
int c;
bucket *bp;
- int value;
+ Value_t value;
char *tag = 0;
- if (assoc != TOKEN) ++prec;
+ if (assoc != TOKEN)
+ ++prec;
c = nextc();
- if (c == EOF) unexpected_EOF();
+ if (c == EOF)
+ unexpected_EOF();
if (c == '<')
{
tag = get_tag();
c = nextc();
- if (c == EOF) unexpected_EOF();
+ if (c == EOF)
+ unexpected_EOF();
}
for (;;)
@@ -939,7 +1106,8 @@ declare_tokens(int assoc)
else
return;
- if (bp == goal) tokenized_start(bp->name);
+ if (bp == goal)
+ tokenized_start(bp->name);
bp->class = TERM;
if (tag)
@@ -953,13 +1121,14 @@ declare_tokens(int assoc)
{
if (bp->prec && prec != bp->prec)
reprec_warning(bp->name);
- bp->assoc = assoc;
+ bp->assoc = (Assoc_t) assoc;
bp->prec = prec;
}
c = nextc();
- if (c == EOF) unexpected_EOF();
- value = UNDEFINED;
+ if (c == EOF)
+ unexpected_EOF();
+
if (isdigit(c))
{
value = get_number();
@@ -967,12 +1136,12 @@ declare_tokens(int assoc)
revalued_warning(bp->name);
bp->value = value;
c = nextc();
- if (c == EOF) unexpected_EOF();
+ if (c == EOF)
+ unexpected_EOF();
}
}
}
-
/*
* %expect requires special handling
* as it really isn't part of the yacc
@@ -983,20 +1152,25 @@ declare_expect(int assoc)
{
int c;
- if (assoc != EXPECT) ++prec;
+ if (assoc != EXPECT && assoc != EXPECT_RR)
+ ++prec;
/*
* Stay away from nextc - doesn't
* detect EOL and will read to EOF.
*/
c = *++cptr;
- if (c == EOF) unexpected_EOF();
+ if (c == EOF)
+ unexpected_EOF();
- for(;;)
+ for (;;)
{
if (isdigit(c))
{
- SRexpect = get_number();
+ if (assoc == EXPECT)
+ SRexpect = get_number();
+ else
+ RRexpect = get_number();
break;
}
/*
@@ -1011,12 +1185,12 @@ declare_expect(int assoc)
else
{
c = *++cptr;
- if (c == EOF) unexpected_EOF();
+ if (c == EOF)
+ unexpected_EOF();
}
}
}
-
static void
declare_types(void)
{
@@ -1025,8 +1199,10 @@ declare_types(void)
char *tag;
c = nextc();
- if (c == EOF) unexpected_EOF();
- if (c != '<') syntax_error(lineno, line, cptr);
+ if (c == EOF)
+ unexpected_EOF();
+ if (c != '<')
+ syntax_error(lineno, line, cptr);
tag = get_tag();
for (;;)
@@ -1045,7 +1221,6 @@ declare_types(void)
}
}
-
static void
declare_start(void)
{
@@ -1053,7 +1228,8 @@ declare_start(void)
bucket *bp;
c = nextc();
- if (c == EOF) unexpected_EOF();
+ if (c == EOF)
+ unexpected_EOF();
if (!isalpha(c) && c != '_' && c != '.' && c != '$')
syntax_error(lineno, line, cptr);
bp = get_name();
@@ -1064,21 +1240,22 @@ declare_start(void)
goal = bp;
}
-
static void
read_declarations(void)
{
int c, k;
cache_size = 256;
- cache = malloc(cache_size);
- if (cache == 0) no_space();
+ cache = MALLOC(cache_size);
+ NO_SPACE(cache);
for (;;)
{
c = nextc();
- if (c == EOF) unexpected_EOF();
- if (c != '%') syntax_error(lineno, line, cptr);
+ if (c == EOF)
+ unexpected_EOF();
+ if (c != '%')
+ syntax_error(lineno, line, cptr);
switch (k = keyword())
{
case MARK:
@@ -1104,6 +1281,7 @@ read_declarations(void)
break;
case EXPECT:
+ case EXPECT_RR:
declare_expect(k);
break;
@@ -1114,18 +1292,33 @@ read_declarations(void)
case START:
declare_start();
break;
+
+ case PURE_PARSER:
+ pure_parser = 1;
+ break;
+
+ case PARSE_PARAM:
+ case LEX_PARAM:
+ copy_param(k);
+ break;
+
+ case POSIX_YACC:
+ /* noop for bison compatibility. byacc is already designed to be posix
+ * yacc compatible. */
+ break;
}
}
}
-
static void
initialize_grammar(void)
{
nitems = 4;
maxitems = 300;
- pitem = malloc(maxitems*sizeof(bucket *));
- if (pitem == 0) no_space();
+
+ pitem = (bucket **)MALLOC((unsigned)maxitems * sizeof(bucket *));
+ NO_SPACE(pitem);
+
pitem[0] = 0;
pitem[1] = 0;
pitem[2] = 0;
@@ -1133,45 +1326,51 @@ initialize_grammar(void)
nrules = 3;
maxrules = 100;
- plhs = malloc(maxrules*sizeof(bucket *));
- if (plhs == 0) no_space();
+
+ plhs = (bucket **)MALLOC((unsigned)maxrules * sizeof(bucket *));
+ NO_SPACE(plhs);
+
plhs[0] = 0;
plhs[1] = 0;
plhs[2] = 0;
- rprec = malloc(maxrules*sizeof(short));
- if (rprec == 0) no_space();
+
+ rprec = (short *)MALLOC((unsigned)maxrules * sizeof(short));
+ NO_SPACE(rprec);
+
rprec[0] = 0;
rprec[1] = 0;
rprec[2] = 0;
- rassoc = malloc(maxrules*sizeof(char));
- if (rassoc == 0) no_space();
+
+ rassoc = (char *)MALLOC((unsigned)maxrules * sizeof(char));
+ NO_SPACE(rassoc);
+
rassoc[0] = TOKEN;
rassoc[1] = TOKEN;
rassoc[2] = TOKEN;
}
-
static void
expand_items(void)
{
maxitems += 300;
- pitem = realloc(pitem, maxitems*sizeof(bucket *));
- if (pitem == 0) no_space();
+ pitem = (bucket **)REALLOC(pitem, (unsigned)maxitems * sizeof(bucket *));
+ NO_SPACE(pitem);
}
-
static void
expand_rules(void)
{
maxrules += 100;
- plhs = realloc(plhs, maxrules*sizeof(bucket *));
- if (plhs == 0) no_space();
- rprec = realloc(rprec, maxrules*sizeof(short));
- if (rprec == 0) no_space();
- rassoc = realloc(rassoc, maxrules*sizeof(char));
- if (rassoc == 0) no_space();
-}
+ plhs = (bucket **)REALLOC(plhs, (unsigned)maxrules * sizeof(bucket *));
+ NO_SPACE(plhs);
+
+ rprec = (short *)REALLOC(rprec, (unsigned)maxrules * sizeof(short));
+ NO_SPACE(rprec);
+
+ rassoc = (char *)REALLOC(rassoc, (unsigned)maxrules * sizeof(char));
+ NO_SPACE(rassoc);
+}
static void
advance_to_start(void)
@@ -1184,7 +1383,8 @@ advance_to_start(void)
for (;;)
{
c = nextc();
- if (c != '%') break;
+ if (c != '%')
+ break;
s_cptr = cptr;
switch (keyword())
{
@@ -1217,13 +1417,14 @@ advance_to_start(void)
s_lineno = lineno;
c = nextc();
- if (c == EOF) unexpected_EOF();
- if (c != ':') syntax_error(lineno, line, cptr);
+ if (c == EOF)
+ unexpected_EOF();
+ if (c != ':')
+ syntax_error(lineno, line, cptr);
start_rule(bp, s_lineno);
++cptr;
}
-
static void
start_rule(bucket *bp, int s_lineno)
{
@@ -1237,7 +1438,6 @@ start_rule(bucket *bp, int s_lineno)
rassoc[nrules] = TOKEN;
}
-
static void
end_rule(void)
{
@@ -1245,19 +1445,27 @@ end_rule(void)
if (!last_was_action && plhs[nrules]->tag)
{
- for (i = nitems - 1; pitem[i]; --i) continue;
- if (pitem[i+1] == 0 || pitem[i+1]->tag != plhs[nrules]->tag)
+ if (pitem[nitems - 1])
+ {
+ for (i = nitems - 1; (i > 0) && pitem[i]; --i)
+ continue;
+ if (pitem[i + 1] == 0 || pitem[i + 1]->tag != plhs[nrules]->tag)
+ default_action_warning();
+ }
+ else
+ {
default_action_warning();
+ }
}
last_was_action = 0;
- if (nitems >= maxitems) expand_items();
+ if (nitems >= maxitems)
+ expand_items();
pitem[nitems] = 0;
++nitems;
++nrules;
}
-
static void
insert_empty_rule(void)
{
@@ -1275,19 +1483,19 @@ insert_empty_rule(void)
expand_items();
bpp = pitem + nitems - 1;
*bpp-- = bp;
- while ((bpp[0] = bpp[-1])) --bpp;
+ while ((bpp[0] = bpp[-1]) != 0)
+ --bpp;
if (++nrules >= maxrules)
expand_rules();
- plhs[nrules] = plhs[nrules-1];
- plhs[nrules-1] = bp;
- rprec[nrules] = rprec[nrules-1];
- rprec[nrules-1] = 0;
- rassoc[nrules] = rassoc[nrules-1];
- rassoc[nrules-1] = TOKEN;
+ plhs[nrules] = plhs[nrules - 1];
+ plhs[nrules - 1] = bp;
+ rprec[nrules] = rprec[nrules - 1];
+ rprec[nrules - 1] = 0;
+ rassoc[nrules] = rassoc[nrules - 1];
+ rassoc[nrules - 1] = TOKEN;
}
-
static void
add_symbol(void)
{
@@ -1316,9 +1524,16 @@ add_symbol(void)
if (++nitems > maxitems)
expand_items();
- pitem[nitems-1] = bp;
+ pitem[nitems - 1] = bp;
}
+static char *
+after_blanks(char *s)
+{
+ while (*s != '\0' && isspace(UCH(*s)))
+ ++s;
+ return s;
+}
static void
copy_action(void)
@@ -1340,13 +1555,22 @@ copy_action(void)
fprintf(f, "case %d:\n", nrules - 2);
if (!lflag)
fprintf(f, line_format, lineno, input_file_name);
- if (*cptr == '=') ++cptr;
+ if (*cptr == '=')
+ ++cptr;
+
+ /* avoid putting curly-braces in first column, to ease editing */
+ if (*after_blanks(cptr) == L_CURL)
+ {
+ putc('\t', f);
+ cptr = after_blanks(cptr);
+ }
n = 0;
- for (i = nitems - 1; pitem[i]; --i) ++n;
+ for (i = nitems - 1; pitem[i]; --i)
+ ++n;
depth = 0;
-loop:
+ loop:
c = *cptr;
if (c == '$')
{
@@ -1363,23 +1587,24 @@ loop:
{
fprintf(f, "yyval.%s", tag);
++cptr;
- free(d_line);
+ FREE(d_line);
goto loop;
}
else if (isdigit(c))
{
i = get_number();
- if (i > n) dollar_warning(d_lineno, i);
- fprintf(f, "yyvsp[%d].%s", i - n, tag);
- free(d_line);
+ if (i > n)
+ dollar_warning(d_lineno, i);
+ fprintf(f, "yystack.l_mark[%d].%s", i - n, tag);
+ FREE(d_line);
goto loop;
}
- else if (c == '-' && isdigit(cptr[1]))
+ else if (c == '-' && isdigit(UCH(cptr[1])))
{
++cptr;
i = -get_number() - n;
- fprintf(f, "yyvsp[%d].%s", i, tag);
- free(d_line);
+ fprintf(f, "yystack.l_mark[%d].%s", i, tag);
+ FREE(d_line);
goto loop;
}
else
@@ -1390,7 +1615,8 @@ loop:
if (ntags)
{
tag = plhs[nrules]->tag;
- if (tag == 0) untyped_lhs();
+ if (tag == 0)
+ untyped_lhs();
fprintf(f, "yyval.%s", tag);
}
else
@@ -1398,7 +1624,7 @@ loop:
cptr += 2;
goto loop;
}
- else if (isdigit(cptr[1]))
+ else if (isdigit(UCH(cptr[1])))
{
++cptr;
i = get_number();
@@ -1407,14 +1633,15 @@ loop:
if (i <= 0 || i > n)
unknown_rhs(i);
tag = pitem[nitems + i - n - 1]->tag;
- if (tag == 0) untyped_rhs(i, pitem[nitems + i - n - 1]->name);
- fprintf(f, "yyvsp[%d].%s", i - n, tag);
+ if (tag == 0)
+ untyped_rhs(i, pitem[nitems + i - n - 1]->name);
+ fprintf(f, "yystack.l_mark[%d].%s", i - n, tag);
}
else
{
if (i > n)
dollar_warning(lineno, i);
- fprintf(f, "yyvsp[%d]", i - n);
+ fprintf(f, "yystack.l_mark[%d]", i - n);
}
goto loop;
}
@@ -1424,7 +1651,7 @@ loop:
i = get_number();
if (ntags)
unknown_rhs(-i);
- fprintf(f, "yyvsp[%d]", -i - n);
+ fprintf(f, "yystack.l_mark[%d]", -i - n);
goto loop;
}
}
@@ -1434,7 +1661,8 @@ loop:
{
putc(c, f);
c = *++cptr;
- } while (isalnum(c) || c == '_' || c == '$');
+ }
+ while (isalnum(c) || c == '_' || c == '$');
goto loop;
}
putc(c, f);
@@ -1442,23 +1670,28 @@ loop:
switch (c)
{
case '\n':
- next_line:
+ next_line:
get_line();
- if (line) goto loop;
+ if (line)
+ goto loop;
unterminated_action(a_lineno, a_line, a_cptr);
case ';':
- if (depth > 0) goto loop;
+ if (depth > 0)
+ goto loop;
fprintf(f, "\nbreak;\n");
+ free(a_line);
return;
- case '{':
+ case L_CURL:
++depth;
goto loop;
- case '}':
- if (--depth > 0) goto loop;
+ case R_CURL:
+ if (--depth > 0)
+ goto loop;
fprintf(f, "\nbreak;\n");
+ free(a_line);
return;
case '\'':
@@ -1475,7 +1708,7 @@ loop:
putc(c, f);
if (c == quote)
{
- free(s_line);
+ FREE(s_line);
goto loop;
}
if (c == '\n')
@@ -1525,7 +1758,7 @@ loop:
{
putc('/', f);
++cptr;
- free(c_line);
+ FREE(c_line);
goto loop;
}
if (c == '\n')
@@ -1543,12 +1776,13 @@ loop:
}
}
-
static int
mark_symbol(void)
{
int c;
- bucket *bp = NULL;
+ bucket *bp;
+
+ bp = NULL;
c = cptr[1];
if (c == '%' || c == '\\')
@@ -1576,7 +1810,7 @@ mark_symbol(void)
else
{
syntax_error(lineno, line, cptr);
- /*NOTREACHED*/
+ /*NOTREACHED */
}
if (rprec[nrules] != UNDEFINED && bp->prec != rprec[nrules])
@@ -1587,7 +1821,6 @@ mark_symbol(void)
return (0);
}
-
static void
read_grammar(void)
{
@@ -1599,21 +1832,27 @@ read_grammar(void)
for (;;)
{
c = nextc();
- if (c == EOF) break;
- if (isalpha(c) || c == '_' || c == '.' || c == '$' || c == '\'' ||
- c == '"')
+ if (c == EOF)
+ break;
+ if (isalpha(c)
+ || c == '_'
+ || c == '.'
+ || c == '$'
+ || c == '\''
+ || c == '"')
add_symbol();
- else if (c == '{' || c == '=')
+ else if (c == L_CURL || c == '=')
copy_action();
else if (c == '|')
{
end_rule();
- start_rule(plhs[nrules-1], 0);
+ start_rule(plhs[nrules - 1], 0);
++cptr;
}
else if (c == '%')
{
- if (mark_symbol()) break;
+ if (mark_symbol())
+ break;
}
else
syntax_error(lineno, line, cptr);
@@ -1621,49 +1860,49 @@ read_grammar(void)
end_rule();
}
-
static void
free_tags(void)
{
int i;
- if (tag_table == 0) return;
+ if (tag_table == 0)
+ return;
for (i = 0; i < ntags; ++i)
{
assert(tag_table[i]);
- free(tag_table[i]);
+ FREE(tag_table[i]);
}
- free(tag_table);
+ FREE(tag_table);
}
-
static void
pack_names(void)
{
bucket *bp;
char *p, *s, *t;
- name_pool_size = 13; /* 13 == sizeof("$end") + sizeof("$accept") */
+ name_pool_size = 13; /* 13 == sizeof("$end") + sizeof("$accept") */
for (bp = first_symbol; bp; bp = bp->next)
name_pool_size += strlen(bp->name) + 1;
- name_pool = malloc(name_pool_size);
- if (name_pool == 0) no_space();
+
+ name_pool = MALLOC(name_pool_size);
+ NO_SPACE(name_pool);
strcpy(name_pool, "$accept");
- strcpy(name_pool+8, "$end");
+ strcpy(name_pool + 8, "$end");
t = name_pool + 13;
for (bp = first_symbol; bp; bp = bp->next)
{
p = t;
s = bp->name;
- while ((*t++ = *s++)) continue;
- free(bp->name);
+ while ((*t++ = *s++) != 0)
+ continue;
+ FREE(bp->name);
bp->name = p;
}
}
-
static void
check_symbols(void)
{
@@ -1682,41 +1921,78 @@ check_symbols(void)
}
}
+static void
+protect_string(char *src, char **des)
+{
+ unsigned len;
+ char *s;
+ char *d;
+
+ *des = src;
+ if (src)
+ {
+ len = 1;
+ s = src;
+ while (*s)
+ {
+ if ('\\' == *s || '"' == *s)
+ len++;
+ s++;
+ len++;
+ }
+
+ *des = d = (char *)MALLOC(len);
+ NO_SPACE(d);
+
+ s = src;
+ while (*s)
+ {
+ if ('\\' == *s || '"' == *s)
+ *d++ = '\\';
+ *d++ = *s++;
+ }
+ *d = '\0';
+ }
+}
static void
pack_symbols(void)
{
bucket *bp;
bucket **v;
- int i, j, k, n;
+ Value_t i, j, k, n;
nsyms = 2;
ntokens = 1;
for (bp = first_symbol; bp; bp = bp->next)
{
++nsyms;
- if (bp->class == TERM) ++ntokens;
+ if (bp->class == TERM)
+ ++ntokens;
}
- start_symbol = ntokens;
+ start_symbol = (Value_t) ntokens;
nvars = nsyms - ntokens;
- symbol_name = malloc(nsyms*sizeof(char *));
- if (symbol_name == 0) no_space();
- symbol_value = malloc(nsyms*sizeof(short));
- if (symbol_value == 0) no_space();
- symbol_prec = malloc(nsyms*sizeof(short));
- if (symbol_prec == 0) no_space();
- symbol_assoc = malloc(nsyms);
- if (symbol_assoc == 0) no_space();
+ symbol_name = (char **)MALLOC((unsigned)nsyms * sizeof(char *));
+ NO_SPACE(symbol_name);
+
+ symbol_value = (short *)MALLOC((unsigned)nsyms * sizeof(short));
+ NO_SPACE(symbol_value);
- v = malloc(nsyms*sizeof(bucket *));
- if (v == 0) no_space();
+ symbol_prec = (short *)MALLOC((unsigned)nsyms * sizeof(short));
+ NO_SPACE(symbol_prec);
+
+ symbol_assoc = MALLOC(nsyms);
+ NO_SPACE(symbol_assoc);
+
+ v = (bucket **)MALLOC((unsigned)nsyms * sizeof(bucket *));
+ NO_SPACE(v);
v[0] = 0;
v[start_symbol] = 0;
i = 1;
- j = start_symbol + 1;
+ j = (Value_t) (start_symbol + 1);
for (bp = first_symbol; bp; bp = bp->next)
{
if (bp->class == TERM)
@@ -1729,8 +2005,8 @@ pack_symbols(void)
for (i = 1; i < ntokens; ++i)
v[i]->index = i;
- goal->index = start_symbol + 1;
- k = start_symbol + 2;
+ goal->index = (Index_t) (start_symbol + 1);
+ k = (Value_t) (start_symbol + 2);
while (++i < nsyms)
if (v[i] != goal)
{
@@ -1740,7 +2016,7 @@ pack_symbols(void)
goal->value = 0;
k = 1;
- for (i = start_symbol + 1; i < nsyms; ++i)
+ for (i = (Value_t) (start_symbol + 1); i < nsyms; ++i)
{
if (v[i] != goal)
{
@@ -1755,12 +2031,14 @@ pack_symbols(void)
n = v[i]->value;
if (n > 256)
{
- for (j = k++; j > 0 && symbol_value[j-1] > n; --j)
- symbol_value[j] = symbol_value[j-1];
+ for (j = k++; j > 0 && symbol_value[j - 1] > n; --j)
+ symbol_value[j] = symbol_value[j - 1];
symbol_value[j] = n;
}
}
+ assert(v[1] != 0);
+
if (v[1]->value == UNDEFINED)
v[1]->value = 256;
@@ -1772,7 +2050,8 @@ pack_symbols(void)
{
while (j < k && n == symbol_value[j])
{
- while (++j < k && n == symbol_value[j]) continue;
+ while (++j < k && n == symbol_value[j])
+ continue;
++n;
}
v[i]->value = n;
@@ -1804,26 +2083,40 @@ pack_symbols(void)
symbol_assoc[k] = v[i]->assoc;
}
- free(v);
-}
+ if (gflag)
+ {
+ symbol_pname = (char **)MALLOC((unsigned)nsyms * sizeof(char *));
+ NO_SPACE(symbol_pname);
+
+ for (i = 0; i < nsyms; ++i)
+ protect_string(symbol_name[i], &(symbol_pname[i]));
+ }
+ FREE(v);
+}
static void
pack_grammar(void)
{
- int i, j;
- int assoc, preced;
-
- ritem = malloc(nitems*sizeof(short));
- if (ritem == 0) no_space();
- rlhs = malloc(nrules*sizeof(short));
- if (rlhs == 0) no_space();
- rrhs = malloc((nrules+1)*sizeof(short));
- if (rrhs == 0) no_space();
- rprec = realloc(rprec, nrules*sizeof(short));
- if (rprec == 0) no_space();
- rassoc = realloc(rassoc, nrules);
- if (rassoc == 0) no_space();
+ int i;
+ Value_t j;
+ Assoc_t assoc;
+ Value_t prec2;
+
+ ritem = (short *)MALLOC((unsigned)nitems * sizeof(short));
+ NO_SPACE(ritem);
+
+ rlhs = (short *)MALLOC((unsigned)nrules * sizeof(short));
+ NO_SPACE(rlhs);
+
+ rrhs = (short *)MALLOC((unsigned)(nrules + 1) * sizeof(short));
+ NO_SPACE(rrhs);
+
+ rprec = (short *)REALLOC(rprec, (unsigned)nrules * sizeof(short));
+ NO_SPACE(rprec);
+
+ rassoc = REALLOC(rassoc, nrules);
+ NO_SPACE(rassoc);
ritem[0] = -1;
ritem[1] = goal->index;
@@ -1842,48 +2135,48 @@ pack_grammar(void)
rlhs[i] = plhs[i]->index;
rrhs[i] = j;
assoc = TOKEN;
- preced = 0;
+ prec2 = 0;
while (pitem[j])
{
ritem[j] = pitem[j]->index;
if (pitem[j]->class == TERM)
{
- preced = pitem[j]->prec;
+ prec2 = pitem[j]->prec;
assoc = pitem[j]->assoc;
}
++j;
}
- ritem[j] = -i;
+ ritem[j] = (Value_t) - i;
++j;
if (rprec[i] == UNDEFINED)
{
- rprec[i] = preced;
+ rprec[i] = prec2;
rassoc[i] = assoc;
}
}
rrhs[i] = j;
- free(plhs);
- free(pitem);
+ FREE(plhs);
+ FREE(pitem);
}
-
static void
print_grammar(void)
{
- int i, j, k;
- int spacing;
+ int i, k;
+ size_t j, spacing = 0;
FILE *f = verbose_file;
- if (!vflag) return;
+ if (!vflag)
+ return;
k = 1;
- spacing = 0;
for (i = 2; i < nrules; ++i)
{
- if (rlhs[i] != rlhs[i-1])
+ if (rlhs[i] != rlhs[i - 1])
{
- if (i != 2) fprintf(f, "\n");
+ if (i != 2)
+ fprintf(f, "\n");
fprintf(f, "%4d %s :", i - 2, symbol_name[rlhs[i]]);
spacing = strlen(symbol_name[rlhs[i]]) + 1;
}
@@ -1891,7 +2184,8 @@ print_grammar(void)
{
fprintf(f, "%4d ", i - 2);
j = spacing;
- while (--j >= 0) putc(' ', f);
+ while (j-- != 0)
+ putc(' ', f);
putc('|', f);
}
@@ -1905,11 +2199,10 @@ print_grammar(void)
}
}
-
void
reader(void)
{
- write_section(banner);
+ write_section(code_file, banner);
create_symbol_table();
read_declarations();
read_grammar();
@@ -1922,3 +2215,40 @@ reader(void)
free_symbols();
print_grammar();
}
+
+#ifdef NO_LEAKS
+static param *
+free_declarations(param * list)
+{
+ while (list != 0)
+ {
+ param *next = list->next;
+ free(list->type);
+ free(list->name);
+ free(list->type2);
+ free(list);
+ list = next;
+ }
+ return list;
+}
+
+void
+reader_leaks(void)
+{
+ lex_param = free_declarations(lex_param);
+ parse_param = free_declarations(parse_param);
+
+ DO_FREE(line);
+ DO_FREE(rrhs);
+ DO_FREE(rlhs);
+ DO_FREE(rprec);
+ DO_FREE(ritem);
+ DO_FREE(rassoc);
+ DO_FREE(cache);
+ DO_FREE(name_pool);
+ DO_FREE(symbol_name);
+ DO_FREE(symbol_prec);
+ DO_FREE(symbol_assoc);
+ DO_FREE(symbol_value);
+}
+#endif
diff --git a/contrib/byacc/skeleton.c b/contrib/byacc/skeleton.c
new file mode 100644
index 000000000000..48ae6949aa94
--- /dev/null
+++ b/contrib/byacc/skeleton.c
@@ -0,0 +1,439 @@
+/* $Id: skeleton.c,v 1.31 2011/09/07 09:37:59 tom Exp $ */
+
+#include "defs.h"
+
+/* The definition of yysccsid in the banner should be replaced with */
+/* a #pragma ident directive if the target C compiler supports */
+/* #pragma ident directives. */
+/* */
+/* If the skeleton is changed, the banner should be changed so that */
+/* the altered version can be easily distinguished from the original. */
+/* */
+/* The #defines included with the banner are there because they are */
+/* useful in subsequent code. The macros #defined in the header or */
+/* the body either are not useful outside of semantic actions or */
+/* are conditional. */
+
+const char *const banner[] =
+{
+ "#ifndef lint",
+ "static const char yysccsid[] = \"@(#)yaccpar 1.9 (Berkeley) 02/21/93\";",
+ "#endif",
+ "",
+ "#define YYBYACC 1",
+ CONCAT1("#define YYMAJOR ", YYMAJOR),
+ CONCAT1("#define YYMINOR ", YYMINOR),
+#ifdef YYPATCH
+ CONCAT1("#define YYPATCH ", YYPATCH),
+#endif
+ "",
+ "#define YYEMPTY (-1)",
+ "#define yyclearin (yychar = YYEMPTY)",
+ "#define yyerrok (yyerrflag = 0)",
+ "#define YYRECOVERING() (yyerrflag != 0)",
+ "",
+ 0
+};
+
+const char *const xdecls[] =
+{
+ "",
+ "extern int YYPARSE_DECL();",
+ 0
+};
+
+const char *const tables[] =
+{
+ "extern short yylhs[];",
+ "extern short yylen[];",
+ "extern short yydefred[];",
+ "extern short yydgoto[];",
+ "extern short yysindex[];",
+ "extern short yyrindex[];",
+ "extern short yygindex[];",
+ "extern short yytable[];",
+ "extern short yycheck[];",
+ "",
+ "#if YYDEBUG",
+ "extern char *yyname[];",
+ "extern char *yyrule[];",
+ "#endif",
+ 0
+};
+
+const char *const global_vars[] =
+{
+ "",
+ "int yydebug;",
+ "int yynerrs;",
+ 0
+};
+
+const char *const impure_vars[] =
+{
+ "",
+ "int yyerrflag;",
+ "int yychar;",
+ "YYSTYPE yyval;",
+ "YYSTYPE yylval;",
+ 0
+};
+
+const char *const hdr_defs[] =
+{
+ "",
+ "/* define the initial stack-sizes */",
+ "#ifdef YYSTACKSIZE",
+ "#undef YYMAXDEPTH",
+ "#define YYMAXDEPTH YYSTACKSIZE",
+ "#else",
+ "#ifdef YYMAXDEPTH",
+ "#define YYSTACKSIZE YYMAXDEPTH",
+ "#else",
+ "#define YYSTACKSIZE 500",
+ "#define YYMAXDEPTH 500",
+ "#endif",
+ "#endif",
+ "",
+ "#define YYINITSTACKSIZE 500",
+ "",
+ "typedef struct {",
+ " unsigned stacksize;",
+ " short *s_base;",
+ " short *s_mark;",
+ " short *s_last;",
+ " YYSTYPE *l_base;",
+ " YYSTYPE *l_mark;",
+ "} YYSTACKDATA;",
+ 0
+};
+
+const char *const hdr_vars[] =
+{
+ "/* variables for the parser stack */",
+ "static YYSTACKDATA yystack;",
+ 0
+};
+
+const char *const body_vars[] =
+{
+ " int yyerrflag;",
+ " int yychar;",
+ " YYSTYPE yyval;",
+ " YYSTYPE yylval;",
+ "",
+ " /* variables for the parser stack */",
+ " YYSTACKDATA yystack;",
+ 0
+};
+
+const char *const body_1[] =
+{
+ "",
+ "#if YYDEBUG",
+ "#include <stdio.h> /* needed for printf */",
+ "#endif",
+ "",
+ "#include <stdlib.h> /* needed for malloc, etc */",
+ "#include <string.h> /* needed for memset */",
+ "",
+ "/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
+ "static int yygrowstack(YYSTACKDATA *data)",
+ "{",
+ " int i;",
+ " unsigned newsize;",
+ " short *newss;",
+ " YYSTYPE *newvs;",
+ "",
+ " if ((newsize = data->stacksize) == 0)",
+ " newsize = YYINITSTACKSIZE;",
+ " else if (newsize >= YYMAXDEPTH)",
+ " return -1;",
+ " else if ((newsize *= 2) > YYMAXDEPTH)",
+ " newsize = YYMAXDEPTH;",
+ "",
+ " i = data->s_mark - data->s_base;",
+ " newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));",
+ " if (newss == 0)",
+ " return -1;",
+ "",
+ " data->s_base = newss;",
+ " data->s_mark = newss + i;",
+ "",
+ " newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));",
+ " if (newvs == 0)",
+ " return -1;",
+ "",
+ " data->l_base = newvs;",
+ " data->l_mark = newvs + i;",
+ "",
+ " data->stacksize = newsize;",
+ " data->s_last = data->s_base + newsize - 1;",
+ " return 0;",
+ "}",
+ "",
+ "#if YYPURE || defined(YY_NO_LEAKS)",
+ "static void yyfreestack(YYSTACKDATA *data)",
+ "{",
+ " free(data->s_base);",
+ " free(data->l_base);",
+ " memset(data, 0, sizeof(*data));",
+ "}",
+ "#else",
+ "#define yyfreestack(data) /* nothing */",
+ "#endif",
+ "",
+ "#define YYABORT goto yyabort",
+ "#define YYREJECT goto yyabort",
+ "#define YYACCEPT goto yyaccept",
+ "#define YYERROR goto yyerrlab",
+ "",
+ "int",
+ "YYPARSE_DECL()",
+ "{",
+ 0
+};
+
+const char *const body_2[] =
+{
+ " int yym, yyn, yystate;",
+ "#if YYDEBUG",
+ " const char *yys;",
+ "",
+ " if ((yys = getenv(\"YYDEBUG\")) != 0)",
+ " {",
+ " yyn = *yys;",
+ " if (yyn >= '0' && yyn <= '9')",
+ " yydebug = yyn - '0';",
+ " }",
+ "#endif",
+ "",
+ " yynerrs = 0;",
+ " yyerrflag = 0;",
+ " yychar = YYEMPTY;",
+ " yystate = 0;",
+ "",
+ "#if YYPURE",
+ " memset(&yystack, 0, sizeof(yystack));",
+ "#endif",
+ "",
+ " if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;",
+ " yystack.s_mark = yystack.s_base;",
+ " yystack.l_mark = yystack.l_base;",
+ " yystate = 0;",
+ " *yystack.s_mark = 0;",
+ "",
+ "yyloop:",
+ " if ((yyn = yydefred[yystate]) != 0) goto yyreduce;",
+ " if (yychar < 0)",
+ " {",
+ " if ((yychar = YYLEX) < 0) yychar = 0;",
+ "#if YYDEBUG",
+ " if (yydebug)",
+ " {",
+ " yys = 0;",
+ " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
+ " if (!yys) yys = \"illegal-symbol\";",
+ " printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
+ " YYPREFIX, yystate, yychar, yys);",
+ " }",
+ "#endif",
+ " }",
+ " if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&",
+ " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
+ " {",
+ "#if YYDEBUG",
+ " if (yydebug)",
+ " printf(\"%sdebug: state %d, shifting to state %d\\n\",",
+ " YYPREFIX, yystate, yytable[yyn]);",
+ "#endif",
+ " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))",
+ " {",
+ " goto yyoverflow;",
+ " }",
+ " yystate = yytable[yyn];",
+ " *++yystack.s_mark = yytable[yyn];",
+ " *++yystack.l_mark = yylval;",
+ " yychar = YYEMPTY;",
+ " if (yyerrflag > 0) --yyerrflag;",
+ " goto yyloop;",
+ " }",
+ " if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&",
+ " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
+ " {",
+ " yyn = yytable[yyn];",
+ " goto yyreduce;",
+ " }",
+ " if (yyerrflag) goto yyinrecovery;",
+ "",
+ 0
+};
+
+const char *const body_3[] =
+{
+ "",
+ " goto yyerrlab;",
+ "",
+ "yyerrlab:",
+ " ++yynerrs;",
+ "",
+ "yyinrecovery:",
+ " if (yyerrflag < 3)",
+ " {",
+ " yyerrflag = 3;",
+ " for (;;)",
+ " {",
+ " if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&",
+ " yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)",
+ " {",
+ "#if YYDEBUG",
+ " if (yydebug)",
+ " printf(\"%sdebug: state %d, error recovery shifting\\",
+ " to state %d\\n\", YYPREFIX, *yystack.s_mark, yytable[yyn]);",
+ "#endif",
+ " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))",
+ " {",
+ " goto yyoverflow;",
+ " }",
+ " yystate = yytable[yyn];",
+ " *++yystack.s_mark = yytable[yyn];",
+ " *++yystack.l_mark = yylval;",
+ " goto yyloop;",
+ " }",
+ " else",
+ " {",
+ "#if YYDEBUG",
+ " if (yydebug)",
+ " printf(\"%sdebug: error recovery discarding state %d\
+\\n\",",
+ " YYPREFIX, *yystack.s_mark);",
+ "#endif",
+ " if (yystack.s_mark <= yystack.s_base) goto yyabort;",
+ " --yystack.s_mark;",
+ " --yystack.l_mark;",
+ " }",
+ " }",
+ " }",
+ " else",
+ " {",
+ " if (yychar == 0) goto yyabort;",
+ "#if YYDEBUG",
+ " if (yydebug)",
+ " {",
+ " yys = 0;",
+ " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
+ " if (!yys) yys = \"illegal-symbol\";",
+ " printf(\"%sdebug: state %d, error recovery discards token %d\
+ (%s)\\n\",",
+ " YYPREFIX, yystate, yychar, yys);",
+ " }",
+ "#endif",
+ " yychar = YYEMPTY;",
+ " goto yyloop;",
+ " }",
+ "",
+ "yyreduce:",
+ "#if YYDEBUG",
+ " if (yydebug)",
+ " printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",",
+ " YYPREFIX, yystate, yyn, yyrule[yyn]);",
+ "#endif",
+ " yym = yylen[yyn];",
+ " if (yym)",
+ " yyval = yystack.l_mark[1-yym];",
+ " else",
+ " memset(&yyval, 0, sizeof yyval);",
+ " switch (yyn)",
+ " {",
+ 0
+};
+
+const char *const trailer[] =
+{
+ " }",
+ " yystack.s_mark -= yym;",
+ " yystate = *yystack.s_mark;",
+ " yystack.l_mark -= yym;",
+ " yym = yylhs[yyn];",
+ " if (yystate == 0 && yym == 0)",
+ " {",
+ "#if YYDEBUG",
+ " if (yydebug)",
+ " printf(\"%sdebug: after reduction, shifting from state 0 to\\",
+ " state %d\\n\", YYPREFIX, YYFINAL);",
+ "#endif",
+ " yystate = YYFINAL;",
+ " *++yystack.s_mark = YYFINAL;",
+ " *++yystack.l_mark = yyval;",
+ " if (yychar < 0)",
+ " {",
+ " if ((yychar = YYLEX) < 0) yychar = 0;",
+ "#if YYDEBUG",
+ " if (yydebug)",
+ " {",
+ " yys = 0;",
+ " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
+ " if (!yys) yys = \"illegal-symbol\";",
+ " printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
+ " YYPREFIX, YYFINAL, yychar, yys);",
+ " }",
+ "#endif",
+ " }",
+ " if (yychar == 0) goto yyaccept;",
+ " goto yyloop;",
+ " }",
+ " if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&",
+ " yyn <= YYTABLESIZE && yycheck[yyn] == yystate)",
+ " yystate = yytable[yyn];",
+ " else",
+ " yystate = yydgoto[yym];",
+ "#if YYDEBUG",
+ " if (yydebug)",
+ " printf(\"%sdebug: after reduction, shifting from state %d \\",
+ "to state %d\\n\", YYPREFIX, *yystack.s_mark, yystate);",
+ "#endif",
+ " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))",
+ " {",
+ " goto yyoverflow;",
+ " }",
+ " *++yystack.s_mark = (short) yystate;",
+ " *++yystack.l_mark = yyval;",
+ " goto yyloop;",
+ "",
+ "yyoverflow:",
+ 0
+};
+
+const char *const trailer_2[] =
+{
+ "",
+ "yyabort:",
+ " yyfreestack(&yystack);",
+ " return (1);",
+ "",
+ "yyaccept:",
+ " yyfreestack(&yystack);",
+ " return (0);",
+ "}",
+ 0
+};
+
+void
+write_section(FILE * fp, const char *const section[])
+{
+ int c;
+ int i;
+ const char *s;
+
+ for (i = 0; (s = section[i]) != 0; ++i)
+ {
+ while ((c = *s) != 0)
+ {
+ putc(c, fp);
+ ++s;
+ }
+ if (fp == code_file)
+ ++outline;
+ putc('\n', fp);
+ }
+}
diff --git a/contrib/byacc/symtab.c b/contrib/byacc/symtab.c
new file mode 100644
index 000000000000..1327eaffc33d
--- /dev/null
+++ b/contrib/byacc/symtab.c
@@ -0,0 +1,117 @@
+/* $Id: symtab.c,v 1.9 2010/11/24 15:12:29 tom Exp $ */
+
+#include "defs.h"
+
+/* TABLE_SIZE is the number of entries in the symbol table. */
+/* TABLE_SIZE must be a power of two. */
+
+#define TABLE_SIZE 1024
+
+static bucket **symbol_table = 0;
+bucket *first_symbol;
+bucket *last_symbol;
+
+static int
+hash(const char *name)
+{
+ const char *s;
+ int c, k;
+
+ assert(name && *name);
+ s = name;
+ k = *s;
+ while ((c = *++s) != 0)
+ k = (31 * k + c) & (TABLE_SIZE - 1);
+
+ return (k);
+}
+
+bucket *
+make_bucket(const char *name)
+{
+ bucket *bp;
+
+ assert(name != 0);
+
+ bp = (bucket *)MALLOC(sizeof(bucket));
+ NO_SPACE(bp);
+
+ bp->link = 0;
+ bp->next = 0;
+
+ bp->name = MALLOC(strlen(name) + 1);
+ NO_SPACE(bp->name);
+
+ bp->tag = 0;
+ bp->value = UNDEFINED;
+ bp->index = 0;
+ bp->prec = 0;
+ bp->class = UNKNOWN;
+ bp->assoc = TOKEN;
+ strcpy(bp->name, name);
+
+ return (bp);
+}
+
+bucket *
+lookup(const char *name)
+{
+ bucket *bp, **bpp;
+
+ bpp = symbol_table + hash(name);
+ bp = *bpp;
+
+ while (bp)
+ {
+ if (strcmp(name, bp->name) == 0)
+ return (bp);
+ bpp = &bp->link;
+ bp = *bpp;
+ }
+
+ *bpp = bp = make_bucket(name);
+ last_symbol->next = bp;
+ last_symbol = bp;
+
+ return (bp);
+}
+
+void
+create_symbol_table(void)
+{
+ int i;
+ bucket *bp;
+
+ symbol_table = (bucket **)MALLOC(TABLE_SIZE * sizeof(bucket *));
+ NO_SPACE(symbol_table);
+
+ for (i = 0; i < TABLE_SIZE; i++)
+ symbol_table[i] = 0;
+
+ bp = make_bucket("error");
+ bp->index = 1;
+ bp->class = TERM;
+
+ first_symbol = bp;
+ last_symbol = bp;
+ symbol_table[hash("error")] = bp;
+}
+
+void
+free_symbol_table(void)
+{
+ FREE(symbol_table);
+ symbol_table = 0;
+}
+
+void
+free_symbols(void)
+{
+ bucket *p, *q;
+
+ for (p = first_symbol; p; p = q)
+ {
+ q = p->next;
+ FREE(p);
+ }
+}
diff --git a/contrib/byacc/test/README b/contrib/byacc/test/README
new file mode 100644
index 000000000000..c9133c5bc876
--- /dev/null
+++ b/contrib/byacc/test/README
@@ -0,0 +1,4 @@
+-- $Id: README,v 1.1 2004/03/28 19:10:48 tom Exp $
+
+The files in this directory are input (.y) and output (.output, .tab.c, .tab.h)
+examples.
diff --git a/contrib/byacc/test/calc.output b/contrib/byacc/test/calc.output
new file mode 100644
index 000000000000..3aed47511c93
--- /dev/null
+++ b/contrib/byacc/test/calc.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+ '\n' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 12
+ '&' reduce 12
+ '\n' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ '\n' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ '\n' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+16 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/calc.tab.c b/contrib/byacc/test/calc.tab.c
new file mode 100644
index 000000000000..de039ec8f263
--- /dev/null
+++ b/contrib/byacc/test/calc.tab.c
@@ -0,0 +1,673 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc_rule
+#endif /* yyrule */
+#define YYPREFIX "calc_"
+
+#define YYPURE 0
+
+#line 2 "calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+#line 109 "calc.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+static const short calc_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short calc_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short calc_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const short calc_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short calc_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const short calc_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const short calc_gindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const short calc_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 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, 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, 2, 3, 4, 3, 12,
+};
+static const short calc_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 66 "calc.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 347 "calc.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 28 "calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 32 "calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 34 "calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 38 "calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 40 "calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 42 "calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 44 "calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 46 "calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 48 "calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 50 "calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 52 "calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 54 "calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 56 "calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 61 "calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 63 "calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 613 "calc.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/calc.tab.h b/contrib/byacc/test/calc.tab.h
new file mode 100644
index 000000000000..19211182d6b3
--- /dev/null
+++ b/contrib/byacc/test/calc.tab.h
@@ -0,0 +1,3 @@
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
diff --git a/contrib/byacc/test/calc.y b/contrib/byacc/test/calc.y
new file mode 100644
index 000000000000..c2e5a898c93d
--- /dev/null
+++ b/contrib/byacc/test/calc.y
@@ -0,0 +1,106 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+%}
+
+%start list
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr '+' expr
+ { $$ = $1 + $3; }
+ | expr '-' expr
+ { $$ = $1 - $3; }
+ | expr '*' expr
+ { $$ = $1 * $3; }
+ | expr '/' expr
+ { $$ = $1 / $3; }
+ | expr '%' expr
+ { $$ = $1 % $3; }
+ | expr '&' expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | '-' expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/contrib/byacc/test/calc1.output b/contrib/byacc/test/calc1.output
new file mode 100644
index 000000000000..2b628d47ddba
--- /dev/null
+++ b/contrib/byacc/test/calc1.output
@@ -0,0 +1,877 @@
+ 0 $accept : line $end
+
+ 1 lines :
+ 2 | lines line
+
+ 3 line : dexp '\n'
+ 4 | vexp '\n'
+ 5 | DREG '=' dexp '\n'
+ 6 | VREG '=' vexp '\n'
+ 7 | error '\n'
+
+ 8 dexp : CONST
+ 9 | DREG
+ 10 | dexp '+' dexp
+ 11 | dexp '-' dexp
+ 12 | dexp '*' dexp
+ 13 | dexp '/' dexp
+ 14 | '-' dexp
+ 15 | '(' dexp ')'
+
+ 16 vexp : dexp
+ 17 | '(' dexp ',' dexp ')'
+ 18 | VREG
+ 19 | vexp '+' vexp
+ 20 | dexp '+' vexp
+ 21 | vexp '-' vexp
+ 22 | dexp '-' vexp
+ 23 | vexp '*' vexp
+ 24 | dexp '*' vexp
+ 25 | vexp '/' vexp
+ 26 | dexp '/' vexp
+ 27 | '-' vexp
+ 28 | '(' vexp ')'
+
+state 0
+ $accept : . line $end (0)
+
+ error shift 1
+ DREG shift 2
+ VREG shift 3
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ line goto 7
+ dexp goto 8
+ vexp goto 9
+
+
+state 1
+ line : error . '\n' (7)
+
+ '\n' shift 10
+ . error
+
+
+state 2
+ line : DREG . '=' dexp '\n' (5)
+ dexp : DREG . (9)
+
+ '=' shift 11
+ '+' reduce 9
+ '-' reduce 9
+ '*' reduce 9
+ '/' reduce 9
+ '\n' reduce 9
+
+
+state 3
+ line : VREG . '=' vexp '\n' (6)
+ vexp : VREG . (18)
+
+ '=' shift 12
+ '+' reduce 18
+ '-' reduce 18
+ '*' reduce 18
+ '/' reduce 18
+ '\n' reduce 18
+
+
+state 4
+ dexp : CONST . (8)
+
+ . reduce 8
+
+
+state 5
+ dexp : '-' . dexp (14)
+ vexp : '-' . vexp (27)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 15
+ vexp goto 16
+
+
+state 6
+ dexp : '(' . dexp ')' (15)
+ vexp : '(' . dexp ',' dexp ')' (17)
+ vexp : '(' . vexp ')' (28)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 17
+ vexp goto 18
+
+
+state 7
+ $accept : line . $end (0)
+
+ $end accept
+
+
+8: shift/reduce conflict (shift 19, reduce 16) on '+'
+8: shift/reduce conflict (shift 20, reduce 16) on '-'
+8: shift/reduce conflict (shift 21, reduce 16) on '*'
+8: shift/reduce conflict (shift 22, reduce 16) on '/'
+8: shift/reduce conflict (shift 23, reduce 16) on '\n'
+state 8
+ line : dexp . '\n' (3)
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '+' shift 19
+ '-' shift 20
+ '*' shift 21
+ '/' shift 22
+ '\n' shift 23
+
+
+state 9
+ line : vexp . '\n' (4)
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '+' shift 24
+ '-' shift 25
+ '*' shift 26
+ '/' shift 27
+ '\n' shift 28
+ . error
+
+
+state 10
+ line : error '\n' . (7)
+
+ . reduce 7
+
+
+state 11
+ line : DREG '=' . dexp '\n' (5)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 31
+
+
+state 12
+ line : VREG '=' . vexp '\n' (6)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 33
+
+
+state 13
+ dexp : DREG . (9)
+
+ . reduce 9
+
+
+state 14
+ vexp : VREG . (18)
+
+ . reduce 18
+
+
+15: reduce/reduce conflict (reduce 14, reduce 16) on '+'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '-'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '*'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '/'
+15: reduce/reduce conflict (reduce 14, reduce 16) on '\n'
+15: reduce/reduce conflict (reduce 14, reduce 16) on ')'
+state 15
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '-' dexp . (14)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ . reduce 14
+
+
+state 16
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : '-' vexp . (27)
+
+ . reduce 27
+
+
+17: shift/reduce conflict (shift 19, reduce 16) on '+'
+17: shift/reduce conflict (shift 20, reduce 16) on '-'
+17: shift/reduce conflict (shift 21, reduce 16) on '*'
+17: shift/reduce conflict (shift 22, reduce 16) on '/'
+17: shift/reduce conflict (shift 34, reduce 16) on ')'
+state 17
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '(' dexp . ')' (15)
+ vexp : dexp . (16)
+ vexp : '(' dexp . ',' dexp ')' (17)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '+' shift 19
+ '-' shift 20
+ '*' shift 21
+ '/' shift 22
+ ')' shift 34
+ ',' shift 35
+
+
+state 18
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : '(' vexp . ')' (28)
+
+ '+' shift 24
+ '-' shift 25
+ '*' shift 26
+ '/' shift 27
+ ')' shift 36
+ . error
+
+
+state 19
+ dexp : dexp '+' . dexp (10)
+ vexp : dexp '+' . vexp (20)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 37
+ vexp goto 38
+
+
+state 20
+ dexp : dexp '-' . dexp (11)
+ vexp : dexp '-' . vexp (22)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 39
+ vexp goto 40
+
+
+state 21
+ dexp : dexp '*' . dexp (12)
+ vexp : dexp '*' . vexp (24)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 41
+ vexp goto 42
+
+
+state 22
+ dexp : dexp '/' . dexp (13)
+ vexp : dexp '/' . vexp (26)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 43
+ vexp goto 44
+
+
+state 23
+ line : dexp '\n' . (3)
+
+ . reduce 3
+
+
+state 24
+ vexp : vexp '+' . vexp (19)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 45
+
+
+state 25
+ vexp : vexp '-' . vexp (21)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 46
+
+
+state 26
+ vexp : vexp '*' . vexp (23)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 47
+
+
+state 27
+ vexp : vexp '/' . vexp (25)
+
+ DREG shift 13
+ VREG shift 14
+ CONST shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ dexp goto 32
+ vexp goto 48
+
+
+state 28
+ line : vexp '\n' . (4)
+
+ . reduce 4
+
+
+state 29
+ dexp : '-' . dexp (14)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 49
+
+
+state 30
+ dexp : '(' . dexp ')' (15)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 50
+
+
+state 31
+ line : DREG '=' dexp . '\n' (5)
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+
+ '+' shift 51
+ '-' shift 52
+ '*' shift 53
+ '/' shift 54
+ '\n' shift 55
+ . error
+
+
+32: shift/reduce conflict (shift 19, reduce 16) on '+'
+32: shift/reduce conflict (shift 20, reduce 16) on '-'
+32: shift/reduce conflict (shift 21, reduce 16) on '*'
+32: shift/reduce conflict (shift 22, reduce 16) on '/'
+state 32
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '+' shift 19
+ '-' shift 20
+ '*' shift 21
+ '/' shift 22
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 33
+ line : VREG '=' vexp . '\n' (6)
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '+' shift 24
+ '-' shift 25
+ '*' shift 26
+ '/' shift 27
+ '\n' shift 56
+ . error
+
+
+state 34
+ dexp : '(' dexp ')' . (15)
+
+ . reduce 15
+
+
+state 35
+ vexp : '(' dexp ',' . dexp ')' (17)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 57
+
+
+state 36
+ vexp : '(' vexp ')' . (28)
+
+ . reduce 28
+
+
+37: reduce/reduce conflict (reduce 10, reduce 16) on '+'
+37: reduce/reduce conflict (reduce 10, reduce 16) on '-'
+37: shift/reduce conflict (shift 21, reduce 16) on '*'
+37: shift/reduce conflict (shift 22, reduce 16) on '/'
+37: reduce/reduce conflict (reduce 10, reduce 16) on '\n'
+37: reduce/reduce conflict (reduce 10, reduce 16) on ')'
+state 37
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp '+' dexp . (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '*' shift 21
+ '/' shift 22
+ '+' reduce 10
+ '-' reduce 10
+ '\n' reduce 10
+ ')' reduce 10
+ ',' reduce 10
+
+
+state 38
+ vexp : vexp . '+' vexp (19)
+ vexp : dexp '+' vexp . (20)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 20
+ '-' reduce 20
+ '\n' reduce 20
+ ')' reduce 20
+
+
+39: reduce/reduce conflict (reduce 11, reduce 16) on '+'
+39: reduce/reduce conflict (reduce 11, reduce 16) on '-'
+39: shift/reduce conflict (shift 21, reduce 16) on '*'
+39: shift/reduce conflict (shift 22, reduce 16) on '/'
+39: reduce/reduce conflict (reduce 11, reduce 16) on '\n'
+39: reduce/reduce conflict (reduce 11, reduce 16) on ')'
+state 39
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp '-' dexp . (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ '*' shift 21
+ '/' shift 22
+ '+' reduce 11
+ '-' reduce 11
+ '\n' reduce 11
+ ')' reduce 11
+ ',' reduce 11
+
+
+state 40
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : dexp '-' vexp . (22)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 22
+ '-' reduce 22
+ '\n' reduce 22
+ ')' reduce 22
+
+
+41: reduce/reduce conflict (reduce 12, reduce 16) on '+'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '-'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '*'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '/'
+41: reduce/reduce conflict (reduce 12, reduce 16) on '\n'
+41: reduce/reduce conflict (reduce 12, reduce 16) on ')'
+state 41
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp '*' dexp . (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ . reduce 12
+
+
+state 42
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : dexp '*' vexp . (24)
+ vexp : vexp . '/' vexp (25)
+
+ . reduce 24
+
+
+43: reduce/reduce conflict (reduce 13, reduce 16) on '+'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '-'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '*'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '/'
+43: reduce/reduce conflict (reduce 13, reduce 16) on '\n'
+43: reduce/reduce conflict (reduce 13, reduce 16) on ')'
+state 43
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : dexp '/' dexp . (13)
+ vexp : dexp . (16)
+ vexp : dexp . '+' vexp (20)
+ vexp : dexp . '-' vexp (22)
+ vexp : dexp . '*' vexp (24)
+ vexp : dexp . '/' vexp (26)
+
+ . reduce 13
+
+
+state 44
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : dexp '/' vexp . (26)
+
+ . reduce 26
+
+
+state 45
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp '+' vexp . (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 19
+ '-' reduce 19
+ '\n' reduce 19
+ ')' reduce 19
+
+
+state 46
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp '-' vexp . (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+
+ '*' shift 26
+ '/' shift 27
+ '+' reduce 21
+ '-' reduce 21
+ '\n' reduce 21
+ ')' reduce 21
+
+
+state 47
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp '*' vexp . (23)
+ vexp : vexp . '/' vexp (25)
+
+ . reduce 23
+
+
+state 48
+ vexp : vexp . '+' vexp (19)
+ vexp : vexp . '-' vexp (21)
+ vexp : vexp . '*' vexp (23)
+ vexp : vexp . '/' vexp (25)
+ vexp : vexp '/' vexp . (25)
+
+ . reduce 25
+
+
+state 49
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '-' dexp . (14)
+
+ . reduce 14
+
+
+state 50
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : '(' dexp . ')' (15)
+
+ '+' shift 51
+ '-' shift 52
+ '*' shift 53
+ '/' shift 54
+ ')' shift 34
+ . error
+
+
+state 51
+ dexp : dexp '+' . dexp (10)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 58
+
+
+state 52
+ dexp : dexp '-' . dexp (11)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 59
+
+
+state 53
+ dexp : dexp '*' . dexp (12)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 60
+
+
+state 54
+ dexp : dexp '/' . dexp (13)
+
+ DREG shift 13
+ CONST shift 4
+ '-' shift 29
+ '(' shift 30
+ . error
+
+ dexp goto 61
+
+
+state 55
+ line : DREG '=' dexp '\n' . (5)
+
+ . reduce 5
+
+
+state 56
+ line : VREG '=' vexp '\n' . (6)
+
+ . reduce 6
+
+
+state 57
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ vexp : '(' dexp ',' dexp . ')' (17)
+
+ '+' shift 51
+ '-' shift 52
+ '*' shift 53
+ '/' shift 54
+ ')' shift 62
+ . error
+
+
+state 58
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp '+' dexp . (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+
+ '*' shift 53
+ '/' shift 54
+ '+' reduce 10
+ '-' reduce 10
+ '\n' reduce 10
+ ')' reduce 10
+
+
+state 59
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp '-' dexp . (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+
+ '*' shift 53
+ '/' shift 54
+ '+' reduce 11
+ '-' reduce 11
+ '\n' reduce 11
+ ')' reduce 11
+
+
+state 60
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp '*' dexp . (12)
+ dexp : dexp . '/' dexp (13)
+
+ . reduce 12
+
+
+state 61
+ dexp : dexp . '+' dexp (10)
+ dexp : dexp . '-' dexp (11)
+ dexp : dexp . '*' dexp (12)
+ dexp : dexp . '/' dexp (13)
+ dexp : dexp '/' dexp . (13)
+
+ . reduce 13
+
+
+state 62
+ vexp : '(' dexp ',' dexp ')' . (17)
+
+ . reduce 17
+
+
+Rules never reduced:
+ lines : (1)
+ lines : lines line (2)
+
+
+State 8 contains 5 shift/reduce conflicts.
+State 15 contains 6 reduce/reduce conflicts.
+State 17 contains 5 shift/reduce conflicts.
+State 32 contains 4 shift/reduce conflicts.
+State 37 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts.
+State 39 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts.
+State 41 contains 6 reduce/reduce conflicts.
+State 43 contains 6 reduce/reduce conflicts.
+
+
+15 terminals, 5 nonterminals
+29 grammar rules, 63 states
diff --git a/contrib/byacc/test/calc1.tab.c b/contrib/byacc/test/calc1.tab.c
new file mode 100644
index 000000000000..65551e8ecbc7
--- /dev/null
+++ b/contrib/byacc/test/calc1.tab.c
@@ -0,0 +1,915 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse calc1_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc1_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc1_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc1_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc1_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc1_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc1_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc1_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc1_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc1_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc1_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc1_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc1_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc1_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc1_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc1_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc1_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc1_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc1_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc1_rule
+#endif /* yyrule */
+#define YYPREFIX "calc1_"
+
+#define YYPURE 0
+
+#line 2 "calc1.y"
+
+/* http://dinosaur.compilertools.net/yacc/index.html */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <math.h>
+
+typedef struct interval
+{
+ double lo, hi;
+}
+INTERVAL;
+
+INTERVAL vmul(double, double, INTERVAL);
+INTERVAL vdiv(double, double, INTERVAL);
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+int dcheck(INTERVAL);
+
+double dreg[26];
+INTERVAL vreg[26];
+
+#line 31 "calc1.y"
+#ifdef YYSTYPE
+#undef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+#endif
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+typedef union
+{
+ int ival;
+ double dval;
+ INTERVAL vval;
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
+#line 139 "calc1.tab.c"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DREG 257
+#define VREG 258
+#define CONST 259
+#define UMINUS 260
+#define YYERRCODE 256
+static const short calc1_lhs[] = { -1,
+ 3, 3, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+};
+static const short calc1_len[] = { 2,
+ 0, 2, 2, 2, 4, 4, 2, 1, 1, 3,
+ 3, 3, 3, 2, 3, 1, 5, 1, 3, 3,
+ 3, 3, 3, 3, 3, 3, 2, 3,
+};
+static const short calc1_defred[] = { 0,
+ 0, 0, 0, 8, 0, 0, 0, 0, 0, 7,
+ 0, 0, 9, 18, 14, 27, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 15, 0, 28, 0, 0, 0, 0,
+ 12, 24, 13, 26, 0, 0, 23, 25, 14, 0,
+ 0, 0, 0, 0, 5, 6, 0, 0, 0, 12,
+ 13, 17,
+};
+static const short calc1_dgoto[] = { 7,
+ 32, 9, 0,
+};
+static const short calc1_sindex[] = { -40,
+ -8, -48, -47, 0, -37, -37, 0, 2, 17, 0,
+ -34, -37, 0, 0, 0, 0, -25, 90, -37, -37,
+ -37, -37, 0, -37, -37, -37, -37, 0, -34, -34,
+ 25, 125, 31, 0, -34, 0, -11, 37, -11, 37,
+ 0, 0, 0, 0, 37, 37, 0, 0, 0, 111,
+ -34, -34, -34, -34, 0, 0, 118, 69, 69, 0,
+ 0, 0,
+};
+static const short calc1_rindex[] = { 0,
+ 0, 38, 44, 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, -9, 0, 0, 0, 0, 51, -3, 56, 61,
+ 0, 0, 0, 0, 67, 72, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 78, 83, 0,
+ 0, 0,
+};
+static const short calc1_gindex[] = { 0,
+ 4, 124, 0,
+};
+#define YYTABLESIZE 225
+static const short calc1_table[] = { 6,
+ 16, 10, 6, 8, 5, 30, 20, 5, 15, 17,
+ 29, 23, 11, 12, 31, 34, 21, 19, 35, 20,
+ 0, 22, 37, 39, 41, 43, 28, 0, 0, 0,
+ 21, 16, 49, 50, 55, 22, 0, 20, 57, 20,
+ 56, 20, 0, 21, 19, 0, 20, 9, 22, 0,
+ 0, 0, 0, 18, 58, 59, 60, 61, 26, 24,
+ 10, 25, 0, 27, 0, 11, 53, 51, 0, 52,
+ 22, 54, 26, 24, 0, 25, 19, 27, 26, 9,
+ 9, 21, 9, 27, 9, 18, 18, 10, 18, 0,
+ 18, 10, 11, 10, 10, 10, 11, 0, 11, 11,
+ 11, 22, 0, 22, 0, 22, 0, 19, 0, 19,
+ 53, 19, 21, 0, 21, 54, 21, 0, 10, 0,
+ 10, 0, 10, 11, 0, 11, 0, 11, 16, 18,
+ 36, 26, 24, 0, 25, 33, 27, 0, 0, 0,
+ 0, 0, 38, 40, 42, 44, 0, 45, 46, 47,
+ 48, 34, 53, 51, 0, 52, 0, 54, 62, 53,
+ 51, 0, 52, 0, 54, 0, 21, 19, 0, 20,
+ 0, 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, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 4, 13,
+ 14, 4, 13, 0, 4,
+};
+static const short calc1_check[] = { 40,
+ 10, 10, 40, 0, 45, 40, 10, 45, 5, 6,
+ 45, 10, 61, 61, 11, 41, 42, 43, 44, 45,
+ -1, 47, 19, 20, 21, 22, 10, -1, -1, -1,
+ 42, 41, 29, 30, 10, 47, -1, 41, 35, 43,
+ 10, 45, -1, 42, 43, -1, 45, 10, 47, -1,
+ -1, -1, -1, 10, 51, 52, 53, 54, 42, 43,
+ 10, 45, -1, 47, -1, 10, 42, 43, -1, 45,
+ 10, 47, 42, 43, -1, 45, 10, 47, 42, 42,
+ 43, 10, 45, 47, 47, 42, 43, 10, 45, -1,
+ 47, 41, 10, 43, 44, 45, 41, -1, 43, 44,
+ 45, 41, -1, 43, -1, 45, -1, 41, -1, 43,
+ 42, 45, 41, -1, 43, 47, 45, -1, 41, -1,
+ 43, -1, 45, 41, -1, 43, -1, 45, 5, 6,
+ 41, 42, 43, -1, 45, 12, 47, -1, -1, -1,
+ -1, -1, 19, 20, 21, 22, -1, 24, 25, 26,
+ 27, 41, 42, 43, -1, 45, -1, 47, 41, 42,
+ 43, -1, 45, -1, 47, -1, 42, 43, -1, 45,
+ -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 259, 257,
+ 258, 259, 257, -1, 259,
+};
+#define YYFINAL 7
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 260
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,
+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,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,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,
+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,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,0,0,
+0,0,"DREG","VREG","CONST","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : line",
+"lines :",
+"lines : lines line",
+"line : dexp '\\n'",
+"line : vexp '\\n'",
+"line : DREG '=' dexp '\\n'",
+"line : VREG '=' vexp '\\n'",
+"line : error '\\n'",
+"dexp : CONST",
+"dexp : DREG",
+"dexp : dexp '+' dexp",
+"dexp : dexp '-' dexp",
+"dexp : dexp '*' dexp",
+"dexp : dexp '/' dexp",
+"dexp : '-' dexp",
+"dexp : '(' dexp ')'",
+"vexp : dexp",
+"vexp : '(' dexp ',' dexp ')'",
+"vexp : VREG",
+"vexp : vexp '+' vexp",
+"vexp : dexp '+' vexp",
+"vexp : vexp '-' vexp",
+"vexp : dexp '-' vexp",
+"vexp : vexp '*' vexp",
+"vexp : dexp '*' vexp",
+"vexp : vexp '/' vexp",
+"vexp : dexp '/' vexp",
+"vexp : '-' vexp",
+"vexp : '(' vexp ')'",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 176 "calc1.y"
+ /* beginning of subroutines section */
+
+#define BSZ 50 /* buffer size for floating point numbers */
+
+ /* lexical analysis */
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ int c;
+
+ while ((c = getchar()) == ' ')
+ { /* skip over blanks */
+ }
+
+ if (isupper(c))
+ {
+ yylval.ival = c - 'A';
+ return (VREG);
+ }
+ if (islower(c))
+ {
+ yylval.ival = c - 'a';
+ return (DREG);
+ }
+
+ if (isdigit(c) || c == '.')
+ {
+ /* gobble up digits, points, exponents */
+ char buf[BSZ + 1], *cp = buf;
+ int dot = 0, expr = 0;
+
+ for (; (cp - buf) < BSZ; ++cp, c = getchar())
+ {
+
+ *cp = c;
+ if (isdigit(c))
+ continue;
+ if (c == '.')
+ {
+ if (dot++ || expr)
+ return ('.'); /* will cause syntax error */
+ continue;
+ }
+
+ if (c == 'e')
+ {
+ if (expr++)
+ return ('e'); /* will cause syntax error */
+ continue;
+ }
+
+ /* end of number */
+ break;
+ }
+ *cp = '\0';
+
+ if ((cp - buf) >= BSZ)
+ printf("constant too long: truncated\n");
+ else
+ ungetc(c, stdin); /* push back last char read */
+ yylval.dval = atof(buf);
+ return (CONST);
+ }
+ return (c);
+}
+
+static INTERVAL
+hilo(double a, double b, double c, double d)
+{
+ /* returns the smallest interval containing a, b, c, and d */
+ /* used by *, / routines */
+ INTERVAL v;
+
+ if (a > b)
+ {
+ v.hi = a;
+ v.lo = b;
+ }
+ else
+ {
+ v.hi = b;
+ v.lo = a;
+ }
+
+ if (c > d)
+ {
+ if (c > v.hi)
+ v.hi = c;
+ if (d < v.lo)
+ v.lo = d;
+ }
+ else
+ {
+ if (d > v.hi)
+ v.hi = d;
+ if (c < v.lo)
+ v.lo = c;
+ }
+ return (v);
+}
+
+INTERVAL
+vmul(double a, double b, INTERVAL v)
+{
+ return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
+}
+
+int
+dcheck(INTERVAL v)
+{
+ if (v.hi >= 0. && v.lo <= 0.)
+ {
+ printf("divisor interval contains 0.\n");
+ return (1);
+ }
+ return (0);
+}
+
+INTERVAL
+vdiv(double a, double b, INTERVAL v)
+{
+ return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
+}
+#line 486 "calc1.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 57 "calc1.y"
+ {
+ (void) printf("%15.8f\n", yystack.l_mark[-1].dval);
+ }
+break;
+case 4:
+#line 61 "calc1.y"
+ {
+ (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
+ }
+break;
+case 5:
+#line 65 "calc1.y"
+ {
+ dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
+ }
+break;
+case 6:
+#line 69 "calc1.y"
+ {
+ vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
+ }
+break;
+case 7:
+#line 73 "calc1.y"
+ {
+ yyerrok;
+ }
+break;
+case 9:
+#line 80 "calc1.y"
+ {
+ yyval.dval = dreg[yystack.l_mark[0].ival];
+ }
+break;
+case 10:
+#line 84 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
+ }
+break;
+case 11:
+#line 88 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
+ }
+break;
+case 12:
+#line 92 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
+ }
+break;
+case 13:
+#line 96 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
+ }
+break;
+case 14:
+#line 100 "calc1.y"
+ {
+ yyval.dval = -yystack.l_mark[0].dval;
+ }
+break;
+case 15:
+#line 104 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-1].dval;
+ }
+break;
+case 16:
+#line 110 "calc1.y"
+ {
+ yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
+ }
+break;
+case 17:
+#line 114 "calc1.y"
+ {
+ yyval.vval.lo = yystack.l_mark[-3].dval;
+ yyval.vval.hi = yystack.l_mark[-1].dval;
+ if ( yyval.vval.lo > yyval.vval.hi )
+ {
+ (void) printf("interval out of order\n");
+ YYERROR;
+ }
+ }
+break;
+case 18:
+#line 124 "calc1.y"
+ {
+ yyval.vval = vreg[yystack.l_mark[0].ival];
+ }
+break;
+case 19:
+#line 128 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
+ yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
+ }
+break;
+case 20:
+#line 133 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
+ yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
+ }
+break;
+case 21:
+#line 138 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
+ }
+break;
+case 22:
+#line 143 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
+ }
+break;
+case 23:
+#line 148 "calc1.y"
+ {
+ yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
+ }
+break;
+case 24:
+#line 152 "calc1.y"
+ {
+ yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
+ }
+break;
+case 25:
+#line 156 "calc1.y"
+ {
+ if (dcheck(yystack.l_mark[0].vval)) YYERROR;
+ yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
+ }
+break;
+case 26:
+#line 161 "calc1.y"
+ {
+ if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
+ yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
+ }
+break;
+case 27:
+#line 166 "calc1.y"
+ {
+ yyval.vval.hi = -yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = -yystack.l_mark[0].vval.hi;
+ }
+break;
+case 28:
+#line 171 "calc1.y"
+ {
+ yyval.vval = yystack.l_mark[-1].vval;
+ }
+break;
+#line 855 "calc1.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/calc1.tab.h b/contrib/byacc/test/calc1.tab.h
new file mode 100644
index 000000000000..c0633e37dfa8
--- /dev/null
+++ b/contrib/byacc/test/calc1.tab.h
@@ -0,0 +1,18 @@
+#define DREG 257
+#define VREG 258
+#define CONST 259
+#define UMINUS 260
+#ifdef YYSTYPE
+#undef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+#endif
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+typedef union
+{
+ int ival;
+ double dval;
+ INTERVAL vval;
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
+extern YYSTYPE calc1_lval;
diff --git a/contrib/byacc/test/calc1.y b/contrib/byacc/test/calc1.y
new file mode 100644
index 000000000000..ec89736f47a5
--- /dev/null
+++ b/contrib/byacc/test/calc1.y
@@ -0,0 +1,305 @@
+%{
+
+/* http://dinosaur.compilertools.net/yacc/index.html */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <math.h>
+
+typedef struct interval
+{
+ double lo, hi;
+}
+INTERVAL;
+
+INTERVAL vmul(double, double, INTERVAL);
+INTERVAL vdiv(double, double, INTERVAL);
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+int dcheck(INTERVAL);
+
+double dreg[26];
+INTERVAL vreg[26];
+
+%}
+%expect 18
+
+%start line
+%union
+{
+ int ival;
+ double dval;
+ INTERVAL vval;
+}
+
+%token <ival> DREG VREG /* indices into dreg, vreg arrays */
+%token <dval> CONST /* floating point constant */
+
+%type <dval> dexp /* expression */
+%type <vval> vexp /* interval expression */
+
+ /* precedence information about the operators */
+
+%left '+' '-'
+%left '*' '/'
+%left UMINUS /* precedence for unary minus */
+
+%% /* beginning of rules section */
+
+lines : /* empty */
+ | lines line
+ ;
+
+line : dexp '\n'
+ {
+ (void) printf("%15.8f\n", $1);
+ }
+ | vexp '\n'
+ {
+ (void) printf("(%15.8f, %15.8f)\n", $1.lo, $1.hi);
+ }
+ | DREG '=' dexp '\n'
+ {
+ dreg[$1] = $3;
+ }
+ | VREG '=' vexp '\n'
+ {
+ vreg[$1] = $3;
+ }
+ | error '\n'
+ {
+ yyerrok;
+ }
+ ;
+
+dexp : CONST
+ | DREG
+ {
+ $$ = dreg[$1];
+ }
+ | dexp '+' dexp
+ {
+ $$ = $1 + $3;
+ }
+ | dexp '-' dexp
+ {
+ $$ = $1 - $3;
+ }
+ | dexp '*' dexp
+ {
+ $$ = $1 * $3;
+ }
+ | dexp '/' dexp
+ {
+ $$ = $1 / $3;
+ }
+ | '-' dexp %prec UMINUS
+ {
+ $$ = -$2;
+ }
+ | '(' dexp ')'
+ {
+ $$ = $2;
+ }
+ ;
+
+vexp : dexp
+ {
+ $$.hi = $$.lo = $1;
+ }
+ | '(' dexp ',' dexp ')'
+ {
+ $$.lo = $2;
+ $$.hi = $4;
+ if ( $$.lo > $$.hi )
+ {
+ (void) printf("interval out of order\n");
+ YYERROR;
+ }
+ }
+ | VREG
+ {
+ $$ = vreg[$1];
+ }
+ | vexp '+' vexp
+ {
+ $$.hi = $1.hi + $3.hi;
+ $$.lo = $1.lo + $3.lo;
+ }
+ | dexp '+' vexp
+ {
+ $$.hi = $1 + $3.hi;
+ $$.lo = $1 + $3.lo;
+ }
+ | vexp '-' vexp
+ {
+ $$.hi = $1.hi - $3.lo;
+ $$.lo = $1.lo - $3.hi;
+ }
+ | dexp '-' vexp
+ {
+ $$.hi = $1 - $3.lo;
+ $$.lo = $1 - $3.hi;
+ }
+ | vexp '*' vexp
+ {
+ $$ = vmul( $1.lo, $1.hi, $3 );
+ }
+ | dexp '*' vexp
+ {
+ $$ = vmul ($1, $1, $3 );
+ }
+ | vexp '/' vexp
+ {
+ if (dcheck($3)) YYERROR;
+ $$ = vdiv ( $1.lo, $1.hi, $3 );
+ }
+ | dexp '/' vexp
+ {
+ if (dcheck ( $3 )) YYERROR;
+ $$ = vdiv ($1, $1, $3 );
+ }
+ | '-' vexp %prec UMINUS
+ {
+ $$.hi = -$2.lo;
+ $$.lo = -$2.hi;
+ }
+ | '(' vexp ')'
+ {
+ $$ = $2;
+ }
+ ;
+
+%% /* beginning of subroutines section */
+
+#define BSZ 50 /* buffer size for floating point numbers */
+
+ /* lexical analysis */
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ int c;
+
+ while ((c = getchar()) == ' ')
+ { /* skip over blanks */
+ }
+
+ if (isupper(c))
+ {
+ yylval.ival = c - 'A';
+ return (VREG);
+ }
+ if (islower(c))
+ {
+ yylval.ival = c - 'a';
+ return (DREG);
+ }
+
+ if (isdigit(c) || c == '.')
+ {
+ /* gobble up digits, points, exponents */
+ char buf[BSZ + 1], *cp = buf;
+ int dot = 0, expr = 0;
+
+ for (; (cp - buf) < BSZ; ++cp, c = getchar())
+ {
+
+ *cp = c;
+ if (isdigit(c))
+ continue;
+ if (c == '.')
+ {
+ if (dot++ || expr)
+ return ('.'); /* will cause syntax error */
+ continue;
+ }
+
+ if (c == 'e')
+ {
+ if (expr++)
+ return ('e'); /* will cause syntax error */
+ continue;
+ }
+
+ /* end of number */
+ break;
+ }
+ *cp = '\0';
+
+ if ((cp - buf) >= BSZ)
+ printf("constant too long: truncated\n");
+ else
+ ungetc(c, stdin); /* push back last char read */
+ yylval.dval = atof(buf);
+ return (CONST);
+ }
+ return (c);
+}
+
+static INTERVAL
+hilo(double a, double b, double c, double d)
+{
+ /* returns the smallest interval containing a, b, c, and d */
+ /* used by *, / routines */
+ INTERVAL v;
+
+ if (a > b)
+ {
+ v.hi = a;
+ v.lo = b;
+ }
+ else
+ {
+ v.hi = b;
+ v.lo = a;
+ }
+
+ if (c > d)
+ {
+ if (c > v.hi)
+ v.hi = c;
+ if (d < v.lo)
+ v.lo = d;
+ }
+ else
+ {
+ if (d > v.hi)
+ v.hi = d;
+ if (c < v.lo)
+ v.lo = c;
+ }
+ return (v);
+}
+
+INTERVAL
+vmul(double a, double b, INTERVAL v)
+{
+ return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
+}
+
+int
+dcheck(INTERVAL v)
+{
+ if (v.hi >= 0. && v.lo <= 0.)
+ {
+ printf("divisor interval contains 0.\n");
+ return (1);
+ }
+ return (0);
+}
+
+INTERVAL
+vdiv(double a, double b, INTERVAL v)
+{
+ return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
+}
diff --git a/contrib/byacc/test/calc2.output b/contrib/byacc/test/calc2.output
new file mode 100644
index 000000000000..3aed47511c93
--- /dev/null
+++ b/contrib/byacc/test/calc2.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+ '\n' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 12
+ '&' reduce 12
+ '\n' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ '\n' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ '\n' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+16 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/calc2.tab.c b/contrib/byacc/test/calc2.tab.c
new file mode 100644
index 000000000000..1eb9548a6972
--- /dev/null
+++ b/contrib/byacc/test/calc2.tab.c
@@ -0,0 +1,682 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse calc2_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc2_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc2_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc2_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc2_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc2_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc2_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc2_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc2_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc2_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc2_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc2_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc2_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc2_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc2_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc2_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc2_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc2_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc2_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc2_rule
+#endif /* yyrule */
+#define YYPREFIX "calc2_"
+
+#define YYPURE 0
+
+#line 7 "calc2.y"
+# include <stdio.h>
+# include <ctype.h>
+
+#ifdef YYBISON
+#define YYLEX_PARAM base
+#define YYLEX_DECL() yylex(int *YYLEX_PARAM)
+#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 111 "calc2.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(int regs[26], int * base)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(int * base)
+# define YYLEX yylex(base)
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(regs, base, msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+static const short calc2_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short calc2_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short calc2_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const short calc2_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short calc2_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const short calc2_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const short calc2_gindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const short calc2_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 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, 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, 2, 3, 4, 3, 12,
+};
+static const short calc2_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "calc2.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ int regs[26];
+ int base = 10;
+
+ while(!feof(stdin)) {
+ yyparse(regs, &base);
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = (c - '0') % (*base);
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 356 "calc2.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror(regs, base, "syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "calc2.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "calc2.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "calc2.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "calc2.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "calc2.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "calc2.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "calc2.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "calc2.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "calc2.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "calc2.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "calc2.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "calc2.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "calc2.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "calc2.y"
+ { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "calc2.y"
+ { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 622 "calc2.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror(regs, base, "yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/calc2.tab.h b/contrib/byacc/test/calc2.tab.h
new file mode 100644
index 000000000000..19211182d6b3
--- /dev/null
+++ b/contrib/byacc/test/calc2.tab.h
@@ -0,0 +1,3 @@
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
diff --git a/contrib/byacc/test/calc2.y b/contrib/byacc/test/calc2.y
new file mode 100644
index 000000000000..e742ff34c215
--- /dev/null
+++ b/contrib/byacc/test/calc2.y
@@ -0,0 +1,120 @@
+%parse-param { int regs[26] }
+%parse-param { int *base }
+
+%lex-param { int *base }
+
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+#ifdef YYBISON
+#define YYLEX_PARAM base
+#define YYLEX_DECL() yylex(int *YYLEX_PARAM)
+#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+%}
+
+%start list
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr '+' expr
+ { $$ = $1 + $3; }
+ | expr '-' expr
+ { $$ = $1 - $3; }
+ | expr '*' expr
+ { $$ = $1 * $3; }
+ | expr '/' expr
+ { $$ = $1 / $3; }
+ | expr '%' expr
+ { $$ = $1 % $3; }
+ | expr '&' expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | '-' expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; (*base) = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = (*base) * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ int regs[26];
+ int base = 10;
+
+ while(!feof(stdin)) {
+ yyparse(regs, &base);
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = (c - '0') % (*base);
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/contrib/byacc/test/calc3.output b/contrib/byacc/test/calc3.output
new file mode 100644
index 000000000000..3aed47511c93
--- /dev/null
+++ b/contrib/byacc/test/calc3.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+ '\n' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 12
+ '&' reduce 12
+ '\n' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ '\n' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ '\n' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+16 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/calc3.tab.c b/contrib/byacc/test/calc3.tab.c
new file mode 100644
index 000000000000..9c38899beba7
--- /dev/null
+++ b/contrib/byacc/test/calc3.tab.c
@@ -0,0 +1,687 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse calc3_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc3_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc3_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc3_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc3_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc3_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc3_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc3_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc3_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc3_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc3_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc3_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc3_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc3_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc3_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc3_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc3_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc3_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc3_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc3_rule
+#endif /* yyrule */
+#define YYPREFIX "calc3_"
+
+#define YYPURE 1
+
+#line 9 "calc3.y"
+# include <stdio.h>
+# include <ctype.h>
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM base
+#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
+#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 112 "calc3.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(int regs[26], int * base)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# ifdef YYLEX_PARAM_TYPE
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
+# else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
+# endif
+# define YYLEX yylex(&yylval, YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, int * base)
+# define YYLEX yylex(&yylval, base)
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(regs, base, msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+static const short calc3_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short calc3_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short calc3_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const short calc3_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short calc3_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const short calc3_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const short calc3_gindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const short calc3_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 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, 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, 2, 3, 4, 3, 12,
+};
+static const short calc3_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+#line 76 "calc3.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ int regs[26];
+ int base = 10;
+
+ while(!feof(stdin)) {
+ yyparse(regs, &base);
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ *yylval = (c - 'a');
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ *yylval = (c - '0') % (*base);
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 354 "calc3.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yyerrflag;
+ int yychar;
+ YYSTYPE yyval;
+ YYSTYPE yylval;
+
+ /* variables for the parser stack */
+ YYSTACKDATA yystack;
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror(regs, base, "syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 38 "calc3.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 42 "calc3.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 44 "calc3.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 48 "calc3.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 50 "calc3.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 52 "calc3.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 54 "calc3.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 56 "calc3.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 58 "calc3.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 60 "calc3.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 62 "calc3.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 64 "calc3.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 66 "calc3.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 71 "calc3.y"
+ { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 73 "calc3.y"
+ { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 627 "calc3.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror(regs, base, "yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/calc3.tab.h b/contrib/byacc/test/calc3.tab.h
new file mode 100644
index 000000000000..19211182d6b3
--- /dev/null
+++ b/contrib/byacc/test/calc3.tab.h
@@ -0,0 +1,3 @@
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
diff --git a/contrib/byacc/test/calc3.y b/contrib/byacc/test/calc3.y
new file mode 100644
index 000000000000..252faa961f4b
--- /dev/null
+++ b/contrib/byacc/test/calc3.y
@@ -0,0 +1,123 @@
+%pure-parser
+
+%parse-param { int regs[26] }
+%parse-param { int *base }
+
+%lex-param { int *base }
+
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM base
+#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
+#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+%}
+
+%start list
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr '+' expr
+ { $$ = $1 + $3; }
+ | expr '-' expr
+ { $$ = $1 - $3; }
+ | expr '*' expr
+ { $$ = $1 * $3; }
+ | expr '/' expr
+ { $$ = $1 / $3; }
+ | expr '%' expr
+ { $$ = $1 % $3; }
+ | expr '&' expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | '-' expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; (*base) = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = (*base) * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ int regs[26];
+ int base = 10;
+
+ while(!feof(stdin)) {
+ yyparse(regs, &base);
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ *yylval = (c - 'a');
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ *yylval = (c - '0') % (*base);
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/contrib/byacc/test/code_calc.code.c b/contrib/byacc/test/code_calc.code.c
new file mode 100644
index 000000000000..a3cf368a07a4
--- /dev/null
+++ b/contrib/byacc/test/code_calc.code.c
@@ -0,0 +1,580 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#define YYPURE 0
+
+#line 2 "code_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *s);
+#endif
+
+#line 30 "code_calc.code.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+#define YYTABLESIZE 220
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+
+#ifndef yyparse
+#define yyparse calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc_rule
+#endif /* yyrule */
+#define YYPREFIX "calc_"
+
+extern int YYPARSE_DECL();
+extern short yylhs[];
+extern short yylen[];
+extern short yydefred[];
+extern short yydgoto[];
+extern short yysindex[];
+extern short yyrindex[];
+extern short yygindex[];
+extern short yytable[];
+extern short yycheck[];
+
+#if YYDEBUG
+extern char *yyname[];
+extern char *yyrule[];
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 68 "code_calc.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 254 "code_calc.code.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 30 "code_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 34 "code_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 36 "code_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 40 "code_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 42 "code_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 44 "code_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 46 "code_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 48 "code_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 50 "code_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 52 "code_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 54 "code_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 56 "code_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 58 "code_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 63 "code_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 65 "code_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 520 "code_calc.code.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/code_calc.output b/contrib/byacc/test/code_calc.output
new file mode 100644
index 000000000000..3aed47511c93
--- /dev/null
+++ b/contrib/byacc/test/code_calc.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+ '\n' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 12
+ '&' reduce 12
+ '\n' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ '\n' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ '\n' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+16 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/code_calc.tab.c b/contrib/byacc/test/code_calc.tab.c
new file mode 100644
index 000000000000..37a17ef4f814
--- /dev/null
+++ b/contrib/byacc/test/code_calc.tab.c
@@ -0,0 +1,199 @@
+
+#ifndef yyparse
+#define yyparse calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc_rule
+#endif /* yyrule */
+#define YYPREFIX "calc_"
+const short calc_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+const short calc_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+const short calc_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+const short calc_dgoto[] = { 1,
+ 7, 8, 9,
+};
+const short calc_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+const short calc_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+const short calc_gindex[] = { 0,
+ 0, 65, 0,
+};
+const short calc_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 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, 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, 2, 3, 4, 3, 12,
+};
+const short calc_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#if YYDEBUG
+const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"DIGIT","LETTER","UMINUS",
+};
+const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
diff --git a/contrib/byacc/test/code_calc.tab.h b/contrib/byacc/test/code_calc.tab.h
new file mode 100644
index 000000000000..19211182d6b3
--- /dev/null
+++ b/contrib/byacc/test/code_calc.tab.h
@@ -0,0 +1,3 @@
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
diff --git a/contrib/byacc/test/code_calc.y b/contrib/byacc/test/code_calc.y
new file mode 100644
index 000000000000..0a99456e7f89
--- /dev/null
+++ b/contrib/byacc/test/code_calc.y
@@ -0,0 +1,112 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *s);
+#endif
+
+%}
+
+%start list
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr '+' expr
+ { $$ = $1 + $3; }
+ | expr '-' expr
+ { $$ = $1 - $3; }
+ | expr '*' expr
+ { $$ = $1 * $3; }
+ | expr '/' expr
+ { $$ = $1 / $3; }
+ | expr '%' expr
+ { $$ = $1 % $3; }
+ | expr '&' expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | '-' expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/contrib/byacc/test/code_error.code.c b/contrib/byacc/test/code_error.code.c
new file mode 100644
index 000000000000..db50bbcf60d0
--- /dev/null
+++ b/contrib/byacc/test/code_error.code.c
@@ -0,0 +1,491 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#define YYPURE 0
+
+#line 2 "code_error.y"
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *);
+#endif
+
+#line 25 "code_error.code.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+#define YYTABLESIZE 0
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 0
+
+#ifndef yyparse
+#define yyparse error_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex error_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror error_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar error_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval error_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval error_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug error_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs error_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag error_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs error_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen error_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred error_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto error_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex error_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex error_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex error_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable error_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck error_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname error_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule error_rule
+#endif /* yyrule */
+#define YYPREFIX "error_"
+
+extern int YYPARSE_DECL();
+extern short yylhs[];
+extern short yylen[];
+extern short yydefred[];
+extern short yydgoto[];
+extern short yysindex[];
+extern short yyrindex[];
+extern short yygindex[];
+extern short yytable[];
+extern short yycheck[];
+
+#if YYDEBUG
+extern char *yyname[];
+extern char *yyrule[];
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 12 "code_error.y"
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 226 "code_error.code.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/usr.bin/yacc/test/error.output b/contrib/byacc/test/code_error.output
index 0c4db6225e24..0c4db6225e24 100644
--- a/usr.bin/yacc/test/error.output
+++ b/contrib/byacc/test/code_error.output
diff --git a/contrib/byacc/test/code_error.tab.c b/contrib/byacc/test/code_error.tab.c
new file mode 100644
index 000000000000..eb4db127835f
--- /dev/null
+++ b/contrib/byacc/test/code_error.tab.c
@@ -0,0 +1,118 @@
+
+#ifndef yyparse
+#define yyparse error_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex error_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror error_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar error_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval error_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval error_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug error_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs error_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag error_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs error_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen error_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred error_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto error_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex error_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex error_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex error_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable error_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck error_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname error_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule error_rule
+#endif /* yyrule */
+#define YYPREFIX "error_"
+const short error_lhs[] = { -1,
+ 0,
+};
+const short error_len[] = { 2,
+ 1,
+};
+const short error_defred[] = { 0,
+ 1, 0,
+};
+const short error_dgoto[] = { 2,
+};
+const short error_sindex[] = { -256,
+ 0, 0,
+};
+const short error_rindex[] = { 0,
+ 0, 0,
+};
+const short error_gindex[] = { 0,
+};
+const short error_table[] = { 1,
+};
+const short error_check[] = { 256,
+};
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#if YYDEBUG
+const char *yyname[] = {
+
+"end-of-file",
+};
+const char *yyrule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
diff --git a/usr.bin/yacc/test/error.tab.h b/contrib/byacc/test/code_error.tab.h
index e69de29bb2d1..e69de29bb2d1 100644
--- a/usr.bin/yacc/test/error.tab.h
+++ b/contrib/byacc/test/code_error.tab.h
diff --git a/contrib/byacc/test/code_error.y b/contrib/byacc/test/code_error.y
new file mode 100644
index 000000000000..bb771567606a
--- /dev/null
+++ b/contrib/byacc/test/code_error.y
@@ -0,0 +1,36 @@
+%{
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *);
+#endif
+
+%}
+%%
+S: error
+%%
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
diff --git a/contrib/byacc/test/error.output b/contrib/byacc/test/error.output
new file mode 100644
index 000000000000..0c4db6225e24
--- /dev/null
+++ b/contrib/byacc/test/error.output
@@ -0,0 +1,27 @@
+ 0 $accept : S $end
+
+ 1 S : error
+
+state 0
+ $accept : . S $end (0)
+
+ error shift 1
+ . error
+
+ S goto 2
+
+
+state 1
+ S : error . (1)
+
+ . reduce 1
+
+
+state 2
+ $accept : S . $end (0)
+
+ $end accept
+
+
+2 terminals, 2 nonterminals
+2 grammar rules, 3 states
diff --git a/contrib/byacc/test/error.tab.c b/contrib/byacc/test/error.tab.c
new file mode 100644
index 000000000000..91136291aea6
--- /dev/null
+++ b/contrib/byacc/test/error.tab.c
@@ -0,0 +1,501 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse error_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex error_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror error_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar error_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval error_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval error_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug error_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs error_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag error_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs error_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen error_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred error_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto error_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex error_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex error_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex error_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable error_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck error_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname error_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule error_rule
+#endif /* yyrule */
+#define YYPREFIX "error_"
+
+#define YYPURE 0
+
+#line 2 "error.y"
+int yylex(void);
+static void yyerror(const char *);
+#line 102 "error.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+static const short error_lhs[] = { -1,
+ 0,
+};
+static const short error_len[] = { 2,
+ 1,
+};
+static const short error_defred[] = { 0,
+ 1, 0,
+};
+static const short error_dgoto[] = { 2,
+};
+static const short error_sindex[] = { -256,
+ 0, 0,
+};
+static const short error_rindex[] = { 0,
+ 0, 0,
+};
+static const short error_gindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const short error_table[] = { 1,
+};
+static const short error_check[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 0
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",
+};
+static const char *yyrule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 8 "error.y"
+
+#include <stdio.h>
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 236 "error.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/error.tab.h b/contrib/byacc/test/error.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/error.tab.h
diff --git a/contrib/byacc/test/error.y b/contrib/byacc/test/error.y
new file mode 100644
index 000000000000..673c68d68e92
--- /dev/null
+++ b/contrib/byacc/test/error.y
@@ -0,0 +1,28 @@
+%{
+int yylex(void);
+static void yyerror(const char *);
+%}
+%%
+S: error
+%%
+
+#include <stdio.h>
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
diff --git a/usr.bin/yacc/test/ftp.output b/contrib/byacc/test/ftp.output
index f1ab4b298829..f1ab4b298829 100644
--- a/usr.bin/yacc/test/ftp.output
+++ b/contrib/byacc/test/ftp.output
diff --git a/contrib/byacc/test/ftp.tab.c b/contrib/byacc/test/ftp.tab.c
new file mode 100644
index 000000000000..c450766e74bf
--- /dev/null
+++ b/contrib/byacc/test/ftp.tab.c
@@ -0,0 +1,1995 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse ftp_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex ftp_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror ftp_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar ftp_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval ftp_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval ftp_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug ftp_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs ftp_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag ftp_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs ftp_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen ftp_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred ftp_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto ftp_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex ftp_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex ftp_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex ftp_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable ftp_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck ftp_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname ftp_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule ftp_rule
+#endif /* yyrule */
+#define YYPREFIX "ftp_"
+
+#define YYPURE 0
+
+#line 26 "ftp.y"
+
+/* sccsid[] = "@(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89"; */
+
+#include <sys/param.h>
+#include <sys/socket.h>
+
+#include <netinet/in.h>
+
+#include <arpa/ftp.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <signal.h>
+#include <ctype.h>
+#include <pwd.h>
+#include <setjmp.h>
+#include <syslog.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <time.h>
+#include <assert.h>
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *);
+#endif
+
+extern struct sockaddr_in data_dest;
+extern int logged_in;
+extern struct passwd *pw;
+extern int guest;
+extern int logging;
+extern int type;
+extern int form;
+extern int debug;
+extern int timeout;
+extern int maxtimeout;
+extern int pdata;
+extern char hostname[], remotehost[];
+extern char proctitle[];
+extern char *globerr;
+extern int usedefault;
+extern int transflag;
+extern char tmpline[];
+
+extern char **glob(char *);
+extern char *renamefrom(char *);
+extern void cwd(const char *);
+
+extern void dologout(int);
+extern void fatal(const char *);
+extern void makedir(const char *);
+extern void nack(const char *);
+extern void pass(const char *);
+extern void passive(void);
+extern void pwd(void);
+extern void removedir(char *);
+extern void renamecmd(char *, char *);
+extern void retrieve(const char *, const char *);
+extern void send_file_list(const char *);
+extern void statcmd(void);
+extern void statfilecmd(const char *);
+extern void store(char *, const char *, int);
+extern void user(const char *);
+
+extern void perror_reply(int, const char *, ...);
+extern void reply(int, const char *, ...);
+extern void lreply(int, const char *, ...);
+
+static int cmd_type;
+static int cmd_form;
+static int cmd_bytesz;
+char cbuf[512];
+char *fromname;
+
+struct tab {
+ const char *name;
+ short token;
+ short state;
+ short implemented; /* 1 if command is implemented */
+ const char *help;
+};
+
+static char * copy(const char *);
+
+#ifdef YYBISON
+static void sizecmd(char *filename);
+static void help(struct tab *ctab, char *s);
+struct tab cmdtab[];
+struct tab sitetab[];
+#endif
+
+static void
+yyerror(const char *msg)
+{
+ perror(msg);
+}
+#line 198 "ftp.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define A 257
+#define B 258
+#define C 259
+#define E 260
+#define F 261
+#define I 262
+#define L 263
+#define N 264
+#define P 265
+#define R 266
+#define S 267
+#define T 268
+#define SP 269
+#define CRLF 270
+#define COMMA 271
+#define STRING 272
+#define NUMBER 273
+#define USER 274
+#define PASS 275
+#define ACCT 276
+#define REIN 277
+#define QUIT 278
+#define PORT 279
+#define PASV 280
+#define TYPE 281
+#define STRU 282
+#define MODE 283
+#define RETR 284
+#define STOR 285
+#define APPE 286
+#define MLFL 287
+#define MAIL 288
+#define MSND 289
+#define MSOM 290
+#define MSAM 291
+#define MRSQ 292
+#define MRCP 293
+#define ALLO 294
+#define REST 295
+#define RNFR 296
+#define RNTO 297
+#define ABOR 298
+#define DELE 299
+#define CWD 300
+#define LIST 301
+#define NLST 302
+#define SITE 303
+#define STAT 304
+#define HELP 305
+#define NOOP 306
+#define MKD 307
+#define RMD 308
+#define PWD 309
+#define CDUP 310
+#define STOU 311
+#define SMNT 312
+#define SYST 313
+#define SIZE 314
+#define MDTM 315
+#define UMASK 316
+#define IDLE 317
+#define CHMOD 318
+#define LEXERR 319
+#define YYERRCODE 256
+static const short ftp_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 3, 4, 4,
+ 12, 5, 13, 13, 13, 6, 6, 6, 6, 6,
+ 6, 6, 6, 7, 7, 7, 8, 8, 8, 10,
+ 14, 11, 9,
+};
+static const short ftp_len[] = { 2,
+ 0, 2, 2, 4, 4, 4, 2, 4, 4, 4,
+ 4, 8, 5, 5, 5, 3, 5, 3, 5, 5,
+ 2, 5, 4, 2, 3, 5, 2, 4, 2, 5,
+ 5, 3, 3, 4, 6, 5, 7, 9, 4, 6,
+ 5, 2, 5, 5, 2, 2, 5, 1, 0, 1,
+ 1, 11, 1, 1, 1, 1, 3, 1, 3, 1,
+ 1, 3, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0,
+};
+static const short ftp_defred[] = { 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 73, 73, 73, 0, 73, 0, 0, 73, 73, 73,
+ 73, 0, 0, 0, 0, 73, 73, 73, 73, 73,
+ 0, 73, 73, 2, 3, 46, 0, 0, 45, 0,
+ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 0, 0, 0, 0, 0, 21, 0, 0, 27,
+ 29, 0, 0, 0, 0, 0, 42, 0, 0, 48,
+ 0, 50, 0, 0, 0, 0, 0, 60, 0, 0,
+ 64, 66, 65, 0, 68, 69, 67, 0, 0, 0,
+ 0, 0, 0, 71, 0, 70, 0, 0, 25, 0,
+ 18, 0, 16, 0, 73, 0, 73, 0, 0, 0,
+ 0, 32, 33, 0, 0, 0, 4, 5, 0, 6,
+ 0, 0, 0, 51, 63, 8, 9, 10, 0, 0,
+ 0, 0, 11, 0, 23, 0, 0, 0, 0, 0,
+ 34, 0, 0, 39, 0, 0, 28, 0, 0, 0,
+ 0, 0, 0, 55, 53, 54, 57, 59, 62, 13,
+ 14, 15, 0, 47, 22, 26, 19, 17, 0, 0,
+ 36, 0, 0, 20, 30, 31, 41, 43, 44, 0,
+ 0, 35, 72, 0, 40, 0, 0, 0, 37, 0,
+ 0, 12, 0, 0, 38, 0, 0, 0, 52,
+};
+static const short ftp_dgoto[] = { 1,
+ 34, 35, 71, 73, 75, 80, 84, 88, 45, 95,
+ 184, 125, 157, 96,
+};
+static const short ftp_sindex[] = { 0,
+ -224, -247, -239, -236, -232, -222, -204, -200, -181, -177,
+ 0, 0, 0, -166, 0, -161, -199, 0, 0, 0,
+ 0, -160, -159, -264, -158, 0, 0, 0, 0, 0,
+ -157, 0, 0, 0, 0, 0, -167, -162, 0, -156,
+ 0, -250, -198, -165, -155, -154, -153, -151, -150, -152,
+ 0, -145, -252, -229, -217, -302, 0, -144, -146, 0,
+ 0, -142, -141, -140, -139, -137, 0, -136, -135, 0,
+ -134, 0, -133, -132, -130, -131, -128, 0, -249, -127,
+ 0, 0, 0, -126, 0, 0, 0, -125, -152, -152,
+ -152, -205, -152, 0, -124, 0, -152, -152, 0, -152,
+ 0, -143, 0, -173, 0, -171, 0, -152, -123, -152,
+ -152, 0, 0, -152, -152, -152, 0, 0, -138, 0,
+ -164, -164, -122, 0, 0, 0, 0, 0, -121, -120,
+ -118, -148, 0, -117, 0, -116, -115, -114, -113, -112,
+ 0, -163, -111, 0, -110, -109, 0, -107, -106, -105,
+ -104, -103, -129, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -101, 0, 0, 0, 0, 0, -100, -102,
+ 0, -98, -102, 0, 0, 0, 0, 0, 0, -99,
+ -97, 0, 0, -95, 0, -96, -94, -92, 0, -152,
+ -93, 0, -91, -90, 0, -88, -87, -86, 0,
+};
+static const short ftp_rindex[] = { 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -83, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -82, 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, -81, -80, 0, -158, 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, 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, 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, 0, 0, 0,
+};
+static const short ftp_gindex[] = { 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 16, -89,
+ -25, 35, 47, 0,
+};
+#define YYTABLESIZE 190
+static const short ftp_table[] = { 129,
+ 130, 131, 104, 134, 59, 60, 76, 136, 137, 77,
+ 138, 78, 79, 105, 106, 107, 98, 99, 146, 123,
+ 148, 149, 36, 124, 150, 151, 152, 46, 47, 37,
+ 49, 2, 38, 52, 53, 54, 55, 39, 58, 100,
+ 101, 62, 63, 64, 65, 66, 40, 68, 69, 3,
+ 4, 102, 103, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 81, 132, 133, 41, 82, 83, 42, 14,
+ 51, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 43, 31, 32,
+ 33, 44, 85, 86, 154, 140, 141, 143, 144, 155,
+ 193, 87, 48, 156, 70, 170, 171, 50, 56, 72,
+ 57, 61, 67, 89, 90, 91, 74, 163, 93, 94,
+ 142, 92, 145, 97, 108, 109, 110, 111, 139, 112,
+ 113, 114, 115, 116, 153, 117, 118, 121, 119, 120,
+ 122, 180, 126, 127, 128, 135, 147, 186, 160, 161,
+ 124, 162, 164, 165, 166, 167, 168, 159, 173, 169,
+ 174, 172, 175, 176, 177, 178, 179, 181, 158, 182,
+ 183, 185, 190, 187, 189, 188, 191, 192, 195, 194,
+ 196, 0, 0, 198, 197, 73, 199, 49, 56, 58,
+};
+static const short ftp_check[] = { 89,
+ 90, 91, 305, 93, 269, 270, 257, 97, 98, 260,
+ 100, 262, 263, 316, 317, 318, 269, 270, 108, 269,
+ 110, 111, 270, 273, 114, 115, 116, 12, 13, 269,
+ 15, 256, 269, 18, 19, 20, 21, 270, 23, 269,
+ 270, 26, 27, 28, 29, 30, 269, 32, 33, 274,
+ 275, 269, 270, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 261, 269, 270, 270, 265, 266, 269, 294,
+ 270, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 269, 313, 314,
+ 315, 269, 258, 259, 259, 269, 270, 269, 270, 264,
+ 190, 267, 269, 268, 272, 269, 270, 269, 269, 272,
+ 270, 270, 270, 269, 269, 269, 273, 266, 269, 272,
+ 105, 273, 107, 269, 269, 272, 269, 269, 272, 270,
+ 270, 269, 269, 269, 273, 270, 270, 269, 271, 270,
+ 269, 271, 270, 270, 270, 270, 270, 173, 270, 270,
+ 273, 270, 270, 270, 270, 270, 270, 123, 269, 272,
+ 270, 273, 270, 270, 270, 270, 270, 269, 122, 270,
+ 273, 270, 269, 273, 270, 273, 271, 270, 270, 273,
+ 271, -1, -1, 271, 273, 269, 273, 270, 270, 270,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 319
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"A","B","C","E","F","I","L","N",
+"P","R","S","T","SP","CRLF","COMMA","STRING","NUMBER","USER","PASS","ACCT",
+"REIN","QUIT","PORT","PASV","TYPE","STRU","MODE","RETR","STOR","APPE","MLFL",
+"MAIL","MSND","MSOM","MSAM","MRSQ","MRCP","ALLO","REST","RNFR","RNTO","ABOR",
+"DELE","CWD","LIST","NLST","SITE","STAT","HELP","NOOP","MKD","RMD","PWD","CDUP",
+"STOU","SMNT","SYST","SIZE","MDTM","UMASK","IDLE","CHMOD","LEXERR",
+};
+static const char *yyrule[] = {
+"$accept : cmd_list",
+"cmd_list :",
+"cmd_list : cmd_list cmd",
+"cmd_list : cmd_list rcmd",
+"cmd : USER SP username CRLF",
+"cmd : PASS SP password CRLF",
+"cmd : PORT SP host_port CRLF",
+"cmd : PASV CRLF",
+"cmd : TYPE SP type_code CRLF",
+"cmd : STRU SP struct_code CRLF",
+"cmd : MODE SP mode_code CRLF",
+"cmd : ALLO SP NUMBER CRLF",
+"cmd : ALLO SP NUMBER SP R SP NUMBER CRLF",
+"cmd : RETR check_login SP pathname CRLF",
+"cmd : STOR check_login SP pathname CRLF",
+"cmd : APPE check_login SP pathname CRLF",
+"cmd : NLST check_login CRLF",
+"cmd : NLST check_login SP STRING CRLF",
+"cmd : LIST check_login CRLF",
+"cmd : LIST check_login SP pathname CRLF",
+"cmd : STAT check_login SP pathname CRLF",
+"cmd : STAT CRLF",
+"cmd : DELE check_login SP pathname CRLF",
+"cmd : RNTO SP pathname CRLF",
+"cmd : ABOR CRLF",
+"cmd : CWD check_login CRLF",
+"cmd : CWD check_login SP pathname CRLF",
+"cmd : HELP CRLF",
+"cmd : HELP SP STRING CRLF",
+"cmd : NOOP CRLF",
+"cmd : MKD check_login SP pathname CRLF",
+"cmd : RMD check_login SP pathname CRLF",
+"cmd : PWD check_login CRLF",
+"cmd : CDUP check_login CRLF",
+"cmd : SITE SP HELP CRLF",
+"cmd : SITE SP HELP SP STRING CRLF",
+"cmd : SITE SP UMASK check_login CRLF",
+"cmd : SITE SP UMASK check_login SP octal_number CRLF",
+"cmd : SITE SP CHMOD check_login SP octal_number SP pathname CRLF",
+"cmd : SITE SP IDLE CRLF",
+"cmd : SITE SP IDLE SP NUMBER CRLF",
+"cmd : STOU check_login SP pathname CRLF",
+"cmd : SYST CRLF",
+"cmd : SIZE check_login SP pathname CRLF",
+"cmd : MDTM check_login SP pathname CRLF",
+"cmd : QUIT CRLF",
+"cmd : error CRLF",
+"rcmd : RNFR check_login SP pathname CRLF",
+"username : STRING",
+"password :",
+"password : STRING",
+"byte_size : NUMBER",
+"host_port : NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER",
+"form_code : N",
+"form_code : T",
+"form_code : C",
+"type_code : A",
+"type_code : A SP form_code",
+"type_code : E",
+"type_code : E SP form_code",
+"type_code : I",
+"type_code : L",
+"type_code : L SP byte_size",
+"type_code : L byte_size",
+"struct_code : F",
+"struct_code : R",
+"struct_code : P",
+"mode_code : S",
+"mode_code : B",
+"mode_code : C",
+"pathname : pathstring",
+"pathstring : STRING",
+"octal_number : NUMBER",
+"check_login :",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 707 "ftp.y"
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+extern jmp_buf errcatch;
+
+static void upper(char *);
+
+#define CMD 0 /* beginning of command */
+#define ARGS 1 /* expect miscellaneous arguments */
+#define STR1 2 /* expect SP followed by STRING */
+#define STR2 3 /* expect STRING */
+#define OSTR 4 /* optional SP then STRING */
+#define ZSTR1 5 /* SP then optional STRING */
+#define ZSTR2 6 /* optional STRING after SP */
+#define SITECMD 7 /* SITE command */
+#define NSTR 8 /* Number followed by a string */
+
+struct tab cmdtab[] = { /* In order defined in RFC 765 */
+ { "USER", USER, STR1, 1, "<sp> username" },
+ { "PASS", PASS, ZSTR1, 1, "<sp> password" },
+ { "ACCT", ACCT, STR1, 0, "(specify account)" },
+ { "SMNT", SMNT, ARGS, 0, "(structure mount)" },
+ { "REIN", REIN, ARGS, 0, "(reinitialize server state)" },
+ { "QUIT", QUIT, ARGS, 1, "(terminate service)", },
+ { "PORT", PORT, ARGS, 1, "<sp> b0, b1, b2, b3, b4" },
+ { "PASV", PASV, ARGS, 1, "(set server in passive mode)" },
+ { "TYPE", TYPE, ARGS, 1, "<sp> [ A | E | I | L ]" },
+ { "STRU", STRU, ARGS, 1, "(specify file structure)" },
+ { "MODE", MODE, ARGS, 1, "(specify transfer mode)" },
+ { "RETR", RETR, STR1, 1, "<sp> file-name" },
+ { "STOR", STOR, STR1, 1, "<sp> file-name" },
+ { "APPE", APPE, STR1, 1, "<sp> file-name" },
+ { "MLFL", MLFL, OSTR, 0, "(mail file)" },
+ { "MAIL", MAIL, OSTR, 0, "(mail to user)" },
+ { "MSND", MSND, OSTR, 0, "(mail send to terminal)" },
+ { "MSOM", MSOM, OSTR, 0, "(mail send to terminal or mailbox)" },
+ { "MSAM", MSAM, OSTR, 0, "(mail send to terminal and mailbox)" },
+ { "MRSQ", MRSQ, OSTR, 0, "(mail recipient scheme question)" },
+ { "MRCP", MRCP, STR1, 0, "(mail recipient)" },
+ { "ALLO", ALLO, ARGS, 1, "allocate storage (vacuously)" },
+ { "REST", REST, ARGS, 0, "(restart command)" },
+ { "RNFR", RNFR, STR1, 1, "<sp> file-name" },
+ { "RNTO", RNTO, STR1, 1, "<sp> file-name" },
+ { "ABOR", ABOR, ARGS, 1, "(abort operation)" },
+ { "DELE", DELE, STR1, 1, "<sp> file-name" },
+ { "CWD", CWD, OSTR, 1, "[ <sp> directory-name ]" },
+ { "XCWD", CWD, OSTR, 1, "[ <sp> directory-name ]" },
+ { "LIST", LIST, OSTR, 1, "[ <sp> path-name ]" },
+ { "NLST", NLST, OSTR, 1, "[ <sp> path-name ]" },
+ { "SITE", SITE, SITECMD, 1, "site-cmd [ <sp> arguments ]" },
+ { "SYST", SYST, ARGS, 1, "(get type of operating system)" },
+ { "STAT", STAT, OSTR, 1, "[ <sp> path-name ]" },
+ { "HELP", HELP, OSTR, 1, "[ <sp> <string> ]" },
+ { "NOOP", NOOP, ARGS, 1, "" },
+ { "MKD", MKD, STR1, 1, "<sp> path-name" },
+ { "XMKD", MKD, STR1, 1, "<sp> path-name" },
+ { "RMD", RMD, STR1, 1, "<sp> path-name" },
+ { "XRMD", RMD, STR1, 1, "<sp> path-name" },
+ { "PWD", PWD, ARGS, 1, "(return current directory)" },
+ { "XPWD", PWD, ARGS, 1, "(return current directory)" },
+ { "CDUP", CDUP, ARGS, 1, "(change to parent directory)" },
+ { "XCUP", CDUP, ARGS, 1, "(change to parent directory)" },
+ { "STOU", STOU, STR1, 1, "<sp> file-name" },
+ { "SIZE", SIZE, OSTR, 1, "<sp> path-name" },
+ { "MDTM", MDTM, OSTR, 1, "<sp> path-name" },
+ { 0, 0, 0, 0, 0 }
+};
+
+struct tab sitetab[] = {
+ { "UMASK", UMASK, ARGS, 1, "[ <sp> umask ]" },
+ { "IDLE", IDLE, ARGS, 1, "[ <sp> maximum-idle-time ]" },
+ { "CHMOD", CHMOD, NSTR, 1, "<sp> mode <sp> file-name" },
+ { "HELP", HELP, OSTR, 1, "[ <sp> <string> ]" },
+ { 0, 0, 0, 0, 0 }
+};
+
+static struct tab *
+lookup(struct tab *p, char *cmd)
+{
+
+ for (; p->name != 0; p++)
+ if (strcmp(cmd, p->name) == 0)
+ return (p);
+ return (0);
+}
+
+#include <arpa/telnet.h>
+
+/*
+ * get_line - a hacked up version of fgets to ignore TELNET escape codes.
+ */
+static char *
+get_line(char *s, int n, FILE *iop)
+{
+ register int c;
+ register char *cs;
+
+ cs = s;
+/* tmpline may contain saved command from urgent mode interruption */
+ for (c = 0; tmpline[c] != '\0' && --n > 0; ++c) {
+ *cs++ = tmpline[c];
+ if (tmpline[c] == '\n') {
+ *cs = '\0';
+ if (debug)
+ syslog(LOG_DEBUG, "command: %s", s);
+ tmpline[0] = '\0';
+ return(s);
+ }
+ if (c == 0)
+ tmpline[0] = '\0';
+ }
+ while ((c = getc(iop)) != EOF) {
+ c &= 0377;
+ if (c == IAC) {
+ if ((c = getc(iop)) != EOF) {
+ c &= 0377;
+ switch (c) {
+ case WILL:
+ case WONT:
+ c = getc(iop);
+ printf("%c%c%c", IAC, DONT, 0377&c);
+ (void) fflush(stdout);
+ continue;
+ case DO:
+ case DONT:
+ c = getc(iop);
+ printf("%c%c%c", IAC, WONT, 0377&c);
+ (void) fflush(stdout);
+ continue;
+ case IAC:
+ break;
+ default:
+ continue; /* ignore command */
+ }
+ }
+ }
+ *cs++ = c;
+ if (--n <= 0 || c == '\n')
+ break;
+ }
+ if (c == EOF && cs == s)
+ return (0);
+ *cs = '\0';
+ if (debug)
+ syslog(LOG_DEBUG, "command: %s", s);
+ return (s);
+}
+
+static void
+toolong(int sig)
+{
+ time_t now;
+
+ (void) sig;
+ reply(421,
+ "Timeout (%d seconds): closing control connection.", timeout);
+ (void) time(&now);
+ if (logging) {
+ syslog(LOG_INFO,
+ "User %s timed out after %d seconds at %s",
+ (pw ? pw -> pw_name : "unknown"), timeout, ctime(&now));
+ }
+ dologout(1);
+}
+
+int
+yylex(void)
+{
+ static int cpos, state;
+ register char *cp, *cp2;
+ register struct tab *p;
+ int n;
+ char c;
+
+ for (;;) {
+ switch (state) {
+
+ case CMD:
+ (void) signal(SIGALRM, toolong);
+ (void) alarm((unsigned) timeout);
+ if (get_line(cbuf, sizeof(cbuf)-1, stdin) == 0) {
+ reply(221, "You could at least say goodbye.");
+ dologout(0);
+ }
+ (void) alarm(0);
+#ifdef SETPROCTITLE
+ if (strncasecmp(cbuf, "PASS", 4) != 0)
+ setproctitle("%s: %s", proctitle, cbuf);
+#endif /* SETPROCTITLE */
+ if ((cp = strchr(cbuf, '\r'))) {
+ *cp++ = '\n';
+ *cp = '\0';
+ }
+ if ((cp = strpbrk(cbuf, " \n")))
+ cpos = cp - cbuf;
+ if (cpos == 0)
+ cpos = 4;
+ c = cbuf[cpos];
+ cbuf[cpos] = '\0';
+ upper(cbuf);
+ p = lookup(cmdtab, cbuf);
+ cbuf[cpos] = c;
+ if (p != 0) {
+ if (p->implemented == 0) {
+ nack(p->name);
+ longjmp(errcatch,0);
+ /* NOTREACHED */
+ }
+ state = p->state;
+ *(const char **)(&yylval) = p->name;
+ return (p->token);
+ }
+ break;
+
+ case SITECMD:
+ if (cbuf[cpos] == ' ') {
+ cpos++;
+ return (SP);
+ }
+ cp = &cbuf[cpos];
+ if ((cp2 = strpbrk(cp, " \n")))
+ cpos = cp2 - cbuf;
+ c = cbuf[cpos];
+ cbuf[cpos] = '\0';
+ upper(cp);
+ p = lookup(sitetab, cp);
+ cbuf[cpos] = c;
+ if (p != 0) {
+ if (p->implemented == 0) {
+ state = CMD;
+ nack(p->name);
+ longjmp(errcatch,0);
+ /* NOTREACHED */
+ }
+ state = p->state;
+ *(const char **)(&yylval) = p->name;
+ return (p->token);
+ }
+ state = CMD;
+ break;
+
+ case OSTR:
+ if (cbuf[cpos] == '\n') {
+ state = CMD;
+ return (CRLF);
+ }
+ /* FALLTHROUGH */
+
+ case STR1:
+ case ZSTR1:
+ dostr1:
+ if (cbuf[cpos] == ' ') {
+ cpos++;
+ if (state == OSTR)
+ state = STR2;
+ else
+ ++state;
+ return (SP);
+ }
+ break;
+
+ case ZSTR2:
+ if (cbuf[cpos] == '\n') {
+ state = CMD;
+ return (CRLF);
+ }
+ /* FALLTHROUGH */
+
+ case STR2:
+ cp = &cbuf[cpos];
+ n = strlen(cp);
+ cpos += n - 1;
+ /*
+ * Make sure the string is nonempty and \n terminated.
+ */
+ if (n > 1 && cbuf[cpos] == '\n') {
+ cbuf[cpos] = '\0';
+ *(char **)&yylval = copy(cp);
+ cbuf[cpos] = '\n';
+ state = ARGS;
+ return (STRING);
+ }
+ break;
+
+ case NSTR:
+ if (cbuf[cpos] == ' ') {
+ cpos++;
+ return (SP);
+ }
+ if (isdigit(cbuf[cpos])) {
+ cp = &cbuf[cpos];
+ while (isdigit(cbuf[++cpos]))
+ ;
+ c = cbuf[cpos];
+ cbuf[cpos] = '\0';
+ yylval = atoi(cp);
+ cbuf[cpos] = c;
+ state = STR1;
+ return (NUMBER);
+ }
+ state = STR1;
+ goto dostr1;
+
+ case ARGS:
+ if (isdigit(cbuf[cpos])) {
+ cp = &cbuf[cpos];
+ while (isdigit(cbuf[++cpos]))
+ ;
+ c = cbuf[cpos];
+ cbuf[cpos] = '\0';
+ yylval = atoi(cp);
+ cbuf[cpos] = c;
+ return (NUMBER);
+ }
+ switch (cbuf[cpos++]) {
+
+ case '\n':
+ state = CMD;
+ return (CRLF);
+
+ case ' ':
+ return (SP);
+
+ case ',':
+ return (COMMA);
+
+ case 'A':
+ case 'a':
+ return (A);
+
+ case 'B':
+ case 'b':
+ return (B);
+
+ case 'C':
+ case 'c':
+ return (C);
+
+ case 'E':
+ case 'e':
+ return (E);
+
+ case 'F':
+ case 'f':
+ return (F);
+
+ case 'I':
+ case 'i':
+ return (I);
+
+ case 'L':
+ case 'l':
+ return (L);
+
+ case 'N':
+ case 'n':
+ return (N);
+
+ case 'P':
+ case 'p':
+ return (P);
+
+ case 'R':
+ case 'r':
+ return (R);
+
+ case 'S':
+ case 's':
+ return (S);
+
+ case 'T':
+ case 't':
+ return (T);
+
+ }
+ break;
+
+ default:
+ fatal("Unknown state in scanner.");
+ }
+ yyerror((char *) 0);
+ state = CMD;
+ longjmp(errcatch,0);
+ }
+}
+
+static void
+upper(char *s)
+{
+ while (*s != '\0') {
+ if (islower(*s))
+ *s = toupper(*s);
+ s++;
+ }
+}
+
+static char *
+copy(const char *s)
+{
+ char *p;
+
+ p = (char * )malloc(strlen(s) + 1);
+ if (p == 0)
+ fatal("Ran out of memory.");
+ else
+ (void) strcpy(p, s);
+ return (p);
+}
+
+static void
+help(struct tab *ctab, char *s)
+{
+ register struct tab *c;
+ register int width, NCMDS;
+ const char *help_type;
+
+ if (ctab == sitetab)
+ help_type = "SITE ";
+ else
+ help_type = "";
+ width = 0, NCMDS = 0;
+ for (c = ctab; c->name != 0; c++) {
+ int len = strlen(c->name);
+
+ if (len > width)
+ width = len;
+ NCMDS++;
+ }
+ width = (width + 8) &~ 7;
+ if (s == 0) {
+ register int i, j, w;
+ int columns, lines;
+
+ lreply(214, "The following %scommands are recognized %s.",
+ help_type, "(* =>'s unimplemented)");
+ columns = 76 / width;
+ if (columns == 0)
+ columns = 1;
+ lines = (NCMDS + columns - 1) / columns;
+ for (i = 0; i < lines; i++) {
+ printf(" ");
+ for (j = 0; j < columns; j++) {
+ c = ctab + j * lines + i;
+ assert(c->name != 0);
+ printf("%s%c", c->name,
+ c->implemented ? ' ' : '*');
+ if (c + lines >= &ctab[NCMDS])
+ break;
+ w = strlen(c->name) + 1;
+ while (w < width) {
+ putchar(' ');
+ w++;
+ }
+ }
+ printf("\r\n");
+ }
+ (void) fflush(stdout);
+ reply(214, "Direct comments to ftp-bugs@%s.", hostname);
+ return;
+ }
+ upper(s);
+ c = lookup(ctab, s);
+ if (c == (struct tab *)0) {
+ reply(502, "Unknown command %s.", s);
+ return;
+ }
+ if (c->implemented)
+ reply(214, "Syntax: %s%s %s", help_type, c->name, c->help);
+ else
+ reply(214, "%s%-*s\t%s; unimplemented.", help_type, width,
+ c->name, c->help);
+}
+
+static void
+sizecmd(char *filename)
+{
+ switch (type) {
+ case TYPE_L:
+ case TYPE_I: {
+ struct stat stbuf;
+ if (stat(filename, &stbuf) < 0 ||
+ (stbuf.st_mode&S_IFMT) != S_IFREG)
+ reply(550, "%s: not a plain file.", filename);
+ else
+#ifdef HAVE_LONG_LONG
+ reply(213, "%llu", (long long) stbuf.st_size);
+#else
+ reply(213, "%lu", stbuf.st_size);
+#endif
+ break;}
+ case TYPE_A: {
+ FILE *fin;
+ register int c, count;
+ struct stat stbuf;
+ fin = fopen(filename, "r");
+ if (fin == 0) {
+ perror_reply(550, filename);
+ return;
+ }
+ if (fstat(fileno(fin), &stbuf) < 0 ||
+ (stbuf.st_mode&S_IFMT) != S_IFREG) {
+ reply(550, "%s: not a plain file.", filename);
+ (void) fclose(fin);
+ return;
+ }
+
+ count = 0;
+ while((c=getc(fin)) != EOF) {
+ if (c == '\n') /* will get expanded to \r\n */
+ count++;
+ count++;
+ }
+ (void) fclose(fin);
+
+ reply(213, "%ld", count);
+ break;}
+ default:
+ reply(504, "SIZE not implemented for Type %c.", "?AEIL"[type]);
+ }
+}
+#line 1092 "ftp.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 2:
+#line 150 "ftp.y"
+ {
+ fromname = (char *) 0;
+ }
+break;
+case 4:
+#line 157 "ftp.y"
+ {
+ user((char *) yystack.l_mark[-1]);
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 5:
+#line 162 "ftp.y"
+ {
+ pass((char *) yystack.l_mark[-1]);
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 6:
+#line 167 "ftp.y"
+ {
+ usedefault = 0;
+ if (pdata >= 0) {
+ (void) close(pdata);
+ pdata = -1;
+ }
+ reply(200, "PORT command successful.");
+ }
+break;
+case 7:
+#line 176 "ftp.y"
+ {
+ passive();
+ }
+break;
+case 8:
+#line 180 "ftp.y"
+ {
+ switch (cmd_type) {
+
+ case TYPE_A:
+ if (cmd_form == FORM_N) {
+ reply(200, "Type set to A.");
+ type = cmd_type;
+ form = cmd_form;
+ } else
+ reply(504, "Form must be N.");
+ break;
+
+ case TYPE_E:
+ reply(504, "Type E not implemented.");
+ break;
+
+ case TYPE_I:
+ reply(200, "Type set to I.");
+ type = cmd_type;
+ break;
+
+ case TYPE_L:
+#if NBBY == 8
+ if (cmd_bytesz == 8) {
+ reply(200,
+ "Type set to L (byte size 8).");
+ type = cmd_type;
+ } else
+ reply(504, "Byte size must be 8.");
+#else /* NBBY == 8 */
+ UNIMPLEMENTED for NBBY != 8
+#endif /* NBBY == 8 */
+ }
+ }
+break;
+case 9:
+#line 215 "ftp.y"
+ {
+ switch (yystack.l_mark[-1]) {
+
+ case STRU_F:
+ reply(200, "STRU F ok.");
+ break;
+
+ default:
+ reply(504, "Unimplemented STRU type.");
+ }
+ }
+break;
+case 10:
+#line 227 "ftp.y"
+ {
+ switch (yystack.l_mark[-1]) {
+
+ case MODE_S:
+ reply(200, "MODE S ok.");
+ break;
+
+ default:
+ reply(502, "Unimplemented MODE type.");
+ }
+ }
+break;
+case 11:
+#line 239 "ftp.y"
+ {
+ reply(202, "ALLO command ignored.");
+ }
+break;
+case 12:
+#line 243 "ftp.y"
+ {
+ reply(202, "ALLO command ignored.");
+ }
+break;
+case 13:
+#line 247 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ retrieve((char *) 0, (char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 14:
+#line 254 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ store((char *) yystack.l_mark[-1], "w", 0);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 15:
+#line 261 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ store((char *) yystack.l_mark[-1], "a", 0);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 16:
+#line 268 "ftp.y"
+ {
+ if (yystack.l_mark[-1])
+ send_file_list(".");
+ }
+break;
+case 17:
+#line 273 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ send_file_list((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 18:
+#line 280 "ftp.y"
+ {
+ if (yystack.l_mark[-1])
+ retrieve("/bin/ls -lgA", "");
+ }
+break;
+case 19:
+#line 285 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ retrieve("/bin/ls -lgA %s", (char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 20:
+#line 292 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ statfilecmd((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 21:
+#line 299 "ftp.y"
+ {
+ statcmd();
+ }
+break;
+case 22:
+#line 303 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ remove((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 23:
+#line 310 "ftp.y"
+ {
+ if (fromname) {
+ renamecmd(fromname, (char *) yystack.l_mark[-1]);
+ free(fromname);
+ fromname = (char *) 0;
+ } else {
+ reply(503, "Bad sequence of commands.");
+ }
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 24:
+#line 321 "ftp.y"
+ {
+ reply(225, "ABOR command successful.");
+ }
+break;
+case 25:
+#line 325 "ftp.y"
+ {
+ if (yystack.l_mark[-1])
+ cwd(pw->pw_dir);
+ }
+break;
+case 26:
+#line 330 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ cwd((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 27:
+#line 337 "ftp.y"
+ {
+ help(cmdtab, (char *) 0);
+ }
+break;
+case 28:
+#line 341 "ftp.y"
+ {
+ register char *cp = (char *)yystack.l_mark[-1];
+
+ if (strncasecmp(cp, "SITE", 4) == 0) {
+ cp = (char *)yystack.l_mark[-1] + 4;
+ if (*cp == ' ')
+ cp++;
+ if (*cp)
+ help(sitetab, cp);
+ else
+ help(sitetab, (char *) 0);
+ } else
+ help(cmdtab, (char *) yystack.l_mark[-1]);
+ }
+break;
+case 29:
+#line 356 "ftp.y"
+ {
+ reply(200, "NOOP command successful.");
+ }
+break;
+case 30:
+#line 360 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ makedir((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 31:
+#line 367 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ removedir((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 32:
+#line 374 "ftp.y"
+ {
+ if (yystack.l_mark[-1])
+ pwd();
+ }
+break;
+case 33:
+#line 379 "ftp.y"
+ {
+ if (yystack.l_mark[-1])
+ cwd("..");
+ }
+break;
+case 34:
+#line 384 "ftp.y"
+ {
+ help(sitetab, (char *) 0);
+ }
+break;
+case 35:
+#line 388 "ftp.y"
+ {
+ help(sitetab, (char *) yystack.l_mark[-1]);
+ }
+break;
+case 36:
+#line 392 "ftp.y"
+ {
+ int oldmask;
+
+ if (yystack.l_mark[-1]) {
+ oldmask = umask(0);
+ (void) umask(oldmask);
+ reply(200, "Current UMASK is %03o", oldmask);
+ }
+ }
+break;
+case 37:
+#line 402 "ftp.y"
+ {
+ int oldmask;
+
+ if (yystack.l_mark[-3]) {
+ if ((yystack.l_mark[-1] == -1) || (yystack.l_mark[-1] > 0777)) {
+ reply(501, "Bad UMASK value");
+ } else {
+ oldmask = umask(yystack.l_mark[-1]);
+ reply(200,
+ "UMASK set to %03o (was %03o)",
+ yystack.l_mark[-1], oldmask);
+ }
+ }
+ }
+break;
+case 38:
+#line 417 "ftp.y"
+ {
+ if (yystack.l_mark[-5] && (yystack.l_mark[-1] != 0)) {
+ if (yystack.l_mark[-3] > 0777)
+ reply(501,
+ "CHMOD: Mode value must be between 0 and 0777");
+ else if (chmod((char *) yystack.l_mark[-1], yystack.l_mark[-3]) < 0)
+ perror_reply(550, (char *) yystack.l_mark[-1]);
+ else
+ reply(200, "CHMOD command successful.");
+ }
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 39:
+#line 431 "ftp.y"
+ {
+ reply(200,
+ "Current IDLE time limit is %d seconds; max %d",
+ timeout, maxtimeout);
+ }
+break;
+case 40:
+#line 437 "ftp.y"
+ {
+ if (yystack.l_mark[-1] < 30 || yystack.l_mark[-1] > maxtimeout) {
+ reply(501,
+ "Maximum IDLE time must be between 30 and %d seconds",
+ maxtimeout);
+ } else {
+ timeout = yystack.l_mark[-1];
+ (void) alarm((unsigned) timeout);
+ reply(200,
+ "Maximum IDLE time set to %d seconds",
+ timeout);
+ }
+ }
+break;
+case 41:
+#line 451 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ store((char *) yystack.l_mark[-1], "w", 1);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 42:
+#line 458 "ftp.y"
+ {
+#ifdef unix
+#ifdef BSD
+ reply(215, "UNIX Type: L%d Version: BSD-%d",
+ NBBY, BSD);
+#else /* BSD */
+ reply(215, "UNIX Type: L%d", NBBY);
+#endif /* BSD */
+#else /* unix */
+ reply(215, "UNKNOWN Type: L%d", NBBY);
+#endif /* unix */
+ }
+break;
+case 43:
+#line 479 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ sizecmd((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 44:
+#line 496 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0) {
+ struct stat stbuf;
+ if (stat((char *) yystack.l_mark[-1], &stbuf) < 0)
+ perror_reply(550, "%s", (char *) yystack.l_mark[-1]);
+ else if ((stbuf.st_mode&S_IFMT) != S_IFREG) {
+ reply(550, "%s: not a plain file.",
+ (char *) yystack.l_mark[-1]);
+ } else {
+ register struct tm *t;
+ t = gmtime(&stbuf.st_mtime);
+ reply(213,
+ "%04d%02d%02d%02d%02d%02d",
+ 1900 + t->tm_year,
+ t->tm_mon+1, t->tm_mday,
+ t->tm_hour, t->tm_min, t->tm_sec);
+ }
+ }
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
+ }
+break;
+case 45:
+#line 518 "ftp.y"
+ {
+ reply(221, "Goodbye.");
+ dologout(0);
+ }
+break;
+case 46:
+#line 523 "ftp.y"
+ {
+ yyerrok;
+ }
+break;
+case 47:
+#line 528 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1]) {
+ fromname = renamefrom((char *) yystack.l_mark[-1]);
+ if (fromname == (char *) 0 && yystack.l_mark[-1]) {
+ free((char *) yystack.l_mark[-1]);
+ }
+ }
+ }
+break;
+case 49:
+#line 542 "ftp.y"
+ {
+ *(const char **)(&(yyval)) = "";
+ }
+break;
+case 52:
+#line 553 "ftp.y"
+ {
+ register char *a, *p;
+
+ a = (char *)&data_dest.sin_addr;
+ a[0] = yystack.l_mark[-10]; a[1] = yystack.l_mark[-8]; a[2] = yystack.l_mark[-6]; a[3] = yystack.l_mark[-4];
+ p = (char *)&data_dest.sin_port;
+ p[0] = yystack.l_mark[-2]; p[1] = yystack.l_mark[0];
+ data_dest.sin_family = AF_INET;
+ }
+break;
+case 53:
+#line 565 "ftp.y"
+ {
+ yyval = FORM_N;
+ }
+break;
+case 54:
+#line 569 "ftp.y"
+ {
+ yyval = FORM_T;
+ }
+break;
+case 55:
+#line 573 "ftp.y"
+ {
+ yyval = FORM_C;
+ }
+break;
+case 56:
+#line 579 "ftp.y"
+ {
+ cmd_type = TYPE_A;
+ cmd_form = FORM_N;
+ }
+break;
+case 57:
+#line 584 "ftp.y"
+ {
+ cmd_type = TYPE_A;
+ cmd_form = yystack.l_mark[0];
+ }
+break;
+case 58:
+#line 589 "ftp.y"
+ {
+ cmd_type = TYPE_E;
+ cmd_form = FORM_N;
+ }
+break;
+case 59:
+#line 594 "ftp.y"
+ {
+ cmd_type = TYPE_E;
+ cmd_form = yystack.l_mark[0];
+ }
+break;
+case 60:
+#line 599 "ftp.y"
+ {
+ cmd_type = TYPE_I;
+ }
+break;
+case 61:
+#line 603 "ftp.y"
+ {
+ cmd_type = TYPE_L;
+ cmd_bytesz = NBBY;
+ }
+break;
+case 62:
+#line 608 "ftp.y"
+ {
+ cmd_type = TYPE_L;
+ cmd_bytesz = yystack.l_mark[0];
+ }
+break;
+case 63:
+#line 614 "ftp.y"
+ {
+ cmd_type = TYPE_L;
+ cmd_bytesz = yystack.l_mark[0];
+ }
+break;
+case 64:
+#line 621 "ftp.y"
+ {
+ yyval = STRU_F;
+ }
+break;
+case 65:
+#line 625 "ftp.y"
+ {
+ yyval = STRU_R;
+ }
+break;
+case 66:
+#line 629 "ftp.y"
+ {
+ yyval = STRU_P;
+ }
+break;
+case 67:
+#line 635 "ftp.y"
+ {
+ yyval = MODE_S;
+ }
+break;
+case 68:
+#line 639 "ftp.y"
+ {
+ yyval = MODE_B;
+ }
+break;
+case 69:
+#line 643 "ftp.y"
+ {
+ yyval = MODE_C;
+ }
+break;
+case 70:
+#line 649 "ftp.y"
+ {
+ /*
+ * Problem: this production is used for all pathname
+ * processing, but only gives a 550 error reply.
+ * This is a valid reply in some cases but not in others.
+ */
+ if (logged_in && yystack.l_mark[0] && strncmp((char *) yystack.l_mark[0], "~", 1) == 0) {
+ *(char **)&(yyval) = *glob((char *) yystack.l_mark[0]);
+ if (globerr != 0) {
+ reply(550, globerr);
+ yyval = 0;
+ }
+ free((char *) yystack.l_mark[0]);
+ } else
+ yyval = yystack.l_mark[0];
+ }
+break;
+case 72:
+#line 671 "ftp.y"
+ {
+ register int ret, dec, multby, digit;
+
+ /*
+ * Convert a number that was read as decimal number
+ * to what it would be if it had been read as octal.
+ */
+ dec = yystack.l_mark[0];
+ multby = 1;
+ ret = 0;
+ while (dec) {
+ digit = dec%10;
+ if (digit > 7) {
+ ret = -1;
+ break;
+ }
+ ret += digit * multby;
+ multby *= 8;
+ dec /= 10;
+ }
+ yyval = ret;
+ }
+break;
+case 73:
+#line 696 "ftp.y"
+ {
+ if (logged_in)
+ yyval = 1;
+ else {
+ reply(530, "Please login with USER and PASS.");
+ yyval = 0;
+ }
+ }
+break;
+#line 1935 "ftp.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/usr.bin/yacc/test/ftp.tab.h b/contrib/byacc/test/ftp.tab.h
index 24f0791390a9..24f0791390a9 100644
--- a/usr.bin/yacc/test/ftp.tab.h
+++ b/contrib/byacc/test/ftp.tab.h
diff --git a/usr.bin/yacc/test/ftp.y b/contrib/byacc/test/ftp.y
index 9a1e525bdb43..42c210bf4ef6 100644
--- a/usr.bin/yacc/test/ftp.y
+++ b/contrib/byacc/test/ftp.y
@@ -24,9 +24,7 @@
%{
-#ifndef lint
-static char sccsid[] = "@(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89";
-#endif /* not lint */
+/* sccsid[] = "@(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89"; */
#include <sys/param.h>
#include <sys/socket.h>
@@ -35,6 +33,8 @@ static char sccsid[] = "@(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89";
#include <arpa/ftp.h>
+#include <stdlib.h>
+#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
@@ -42,7 +42,14 @@ static char sccsid[] = "@(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89";
#include <setjmp.h>
#include <syslog.h>
#include <sys/stat.h>
+#include <string.h>
#include <time.h>
+#include <assert.h>
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *);
+#endif
extern struct sockaddr_in data_dest;
extern int logged_in;
@@ -61,7 +68,30 @@ extern char *globerr;
extern int usedefault;
extern int transflag;
extern char tmpline[];
-char **glob();
+
+extern char **glob(char *);
+extern char *renamefrom(char *);
+extern void cwd(const char *);
+
+extern void dologout(int);
+extern void fatal(const char *);
+extern void makedir(const char *);
+extern void nack(const char *);
+extern void pass(const char *);
+extern void passive(void);
+extern void pwd(void);
+extern void removedir(char *);
+extern void renamecmd(char *, char *);
+extern void retrieve(const char *, const char *);
+extern void send_file_list(const char *);
+extern void statcmd(void);
+extern void statfilecmd(const char *);
+extern void store(char *, const char *, int);
+extern void user(const char *);
+
+extern void perror_reply(int, const char *, ...);
+extern void reply(int, const char *, ...);
+extern void lreply(int, const char *, ...);
static int cmd_type;
static int cmd_form;
@@ -69,7 +99,28 @@ static int cmd_bytesz;
char cbuf[512];
char *fromname;
-char *index();
+struct tab {
+ const char *name;
+ short token;
+ short state;
+ short implemented; /* 1 if command is implemented */
+ const char *help;
+};
+
+static char * copy(const char *);
+
+#ifdef YYBISON
+static void sizecmd(char *filename);
+static void help(struct tab *ctab, char *s);
+struct tab cmdtab[];
+struct tab sitetab[];
+#endif
+
+static void
+yyerror(const char *msg)
+{
+ perror(msg);
+}
%}
%token
@@ -96,24 +147,24 @@ char *index();
cmd_list: /* empty */
| cmd_list cmd
- = {
+ {
fromname = (char *) 0;
}
| cmd_list rcmd
;
cmd: USER SP username CRLF
- = {
+ {
user((char *) $3);
free((char *) $3);
}
| PASS SP password CRLF
- = {
+ {
pass((char *) $3);
free((char *) $3);
}
| PORT SP host_port CRLF
- = {
+ {
usedefault = 0;
if (pdata >= 0) {
(void) close(pdata);
@@ -122,11 +173,11 @@ cmd: USER SP username CRLF
reply(200, "PORT command successful.");
}
| PASV CRLF
- = {
+ {
passive();
}
| TYPE SP type_code CRLF
- = {
+ {
switch (cmd_type) {
case TYPE_A:
@@ -161,7 +212,7 @@ cmd: USER SP username CRLF
}
}
| STRU SP struct_code CRLF
- = {
+ {
switch ($3) {
case STRU_F:
@@ -173,7 +224,7 @@ cmd: USER SP username CRLF
}
}
| MODE SP mode_code CRLF
- = {
+ {
switch ($3) {
case MODE_S:
@@ -185,78 +236,78 @@ cmd: USER SP username CRLF
}
}
| ALLO SP NUMBER CRLF
- = {
+ {
reply(202, "ALLO command ignored.");
}
| ALLO SP NUMBER SP R SP NUMBER CRLF
- = {
+ {
reply(202, "ALLO command ignored.");
}
| RETR check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
retrieve((char *) 0, (char *) $4);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| STOR check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
store((char *) $4, "w", 0);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| APPE check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
store((char *) $4, "a", 0);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| NLST check_login CRLF
- = {
+ {
if ($2)
send_file_list(".");
}
| NLST check_login SP STRING CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
send_file_list((char *) $4);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| LIST check_login CRLF
- = {
+ {
if ($2)
retrieve("/bin/ls -lgA", "");
}
| LIST check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
retrieve("/bin/ls -lgA %s", (char *) $4);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| STAT check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
statfilecmd((char *) $4);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| STAT CRLF
- = {
+ {
statcmd();
}
| DELE check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
- delete((char *) $4);
- if ($4 != NULL)
+ {
+ if ($2 && $4 != 0)
+ remove((char *) $4);
+ if ($4 != 0)
free((char *) $4);
}
| RNTO SP pathname CRLF
- = {
+ {
if (fromname) {
renamecmd(fromname, (char *) $3);
free(fromname);
@@ -267,27 +318,27 @@ cmd: USER SP username CRLF
free((char *) $3);
}
| ABOR CRLF
- = {
+ {
reply(225, "ABOR command successful.");
}
| CWD check_login CRLF
- = {
+ {
if ($2)
cwd(pw->pw_dir);
}
| CWD check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
cwd((char *) $4);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| HELP CRLF
- = {
+ {
help(cmdtab, (char *) 0);
}
| HELP SP STRING CRLF
- = {
+ {
register char *cp = (char *)$3;
if (strncasecmp(cp, "SITE", 4) == 0) {
@@ -302,43 +353,43 @@ cmd: USER SP username CRLF
help(cmdtab, (char *) $3);
}
| NOOP CRLF
- = {
+ {
reply(200, "NOOP command successful.");
}
| MKD check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
makedir((char *) $4);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| RMD check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
removedir((char *) $4);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| PWD check_login CRLF
- = {
+ {
if ($2)
pwd();
}
| CDUP check_login CRLF
- = {
+ {
if ($2)
cwd("..");
}
| SITE SP HELP CRLF
- = {
+ {
help(sitetab, (char *) 0);
}
| SITE SP HELP SP STRING CRLF
- = {
+ {
help(sitetab, (char *) $5);
}
| SITE SP UMASK check_login CRLF
- = {
+ {
int oldmask;
if ($4) {
@@ -348,7 +399,7 @@ cmd: USER SP username CRLF
}
}
| SITE SP UMASK check_login SP octal_number CRLF
- = {
+ {
int oldmask;
if ($4) {
@@ -363,8 +414,8 @@ cmd: USER SP username CRLF
}
}
| SITE SP CHMOD check_login SP octal_number SP pathname CRLF
- = {
- if ($4 && ($8 != NULL)) {
+ {
+ if ($4 && ($8 != 0)) {
if ($6 > 0777)
reply(501,
"CHMOD: Mode value must be between 0 and 0777");
@@ -373,17 +424,17 @@ cmd: USER SP username CRLF
else
reply(200, "CHMOD command successful.");
}
- if ($8 != NULL)
+ if ($8 != 0)
free((char *) $8);
}
| SITE SP IDLE CRLF
- = {
+ {
reply(200,
"Current IDLE time limit is %d seconds; max %d",
timeout, maxtimeout);
}
| SITE SP IDLE SP NUMBER CRLF
- = {
+ {
if ($5 < 30 || $5 > maxtimeout) {
reply(501,
"Maximum IDLE time must be between 30 and %d seconds",
@@ -397,14 +448,14 @@ cmd: USER SP username CRLF
}
}
| STOU check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
store((char *) $4, "w", 1);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| SYST CRLF
- = {
+ {
#ifdef unix
#ifdef BSD
reply(215, "UNIX Type: L%d Version: BSD-%d",
@@ -425,10 +476,10 @@ cmd: USER SP username CRLF
* using with RESTART (we just count bytes).
*/
| SIZE check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL)
+ {
+ if ($2 && $4 != 0)
sizecmd((char *) $4);
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
@@ -442,8 +493,8 @@ cmd: USER SP username CRLF
* not necessarily 3 digits)
*/
| MDTM check_login SP pathname CRLF
- = {
- if ($2 && $4 != NULL) {
+ {
+ if ($2 && $4 != 0) {
struct stat stbuf;
if (stat((char *) $4, &stbuf) < 0)
perror_reply(550, "%s", (char *) $4);
@@ -452,31 +503,29 @@ cmd: USER SP username CRLF
(char *) $4);
} else {
register struct tm *t;
- struct tm *gmtime();
t = gmtime(&stbuf.st_mtime);
reply(213,
- "%d%02d%02d%02d%02d%02d",
- t->tm_year+1900, t->tm_mon+1, t->tm_mday,
+ "%04d%02d%02d%02d%02d%02d",
+ 1900 + t->tm_year,
+ t->tm_mon+1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec);
}
}
- if ($4 != NULL)
+ if ($4 != 0)
free((char *) $4);
}
| QUIT CRLF
- = {
+ {
reply(221, "Goodbye.");
dologout(0);
}
| error CRLF
- = {
+ {
yyerrok;
}
;
rcmd: RNFR check_login SP pathname CRLF
- = {
- char *renamefrom();
-
+ {
if ($2 && $4) {
fromname = renamefrom((char *) $4);
if (fromname == (char *) 0 && $4) {
@@ -485,13 +534,13 @@ rcmd: RNFR check_login SP pathname CRLF
}
}
;
-
+
username: STRING
;
password: /* empty */
- = {
- *(char **)&($$) = "";
+ {
+ *(const char **)(&($$)) = "";
}
| STRING
;
@@ -499,9 +548,9 @@ password: /* empty */
byte_size: NUMBER
;
-host_port: NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA
+host_port: NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA
NUMBER COMMA NUMBER
- = {
+ {
register char *a, *p;
a = (char *)&data_dest.sin_addr;
@@ -513,91 +562,91 @@ host_port: NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA
;
form_code: N
- = {
+ {
$$ = FORM_N;
}
| T
- = {
+ {
$$ = FORM_T;
}
| C
- = {
+ {
$$ = FORM_C;
}
;
type_code: A
- = {
+ {
cmd_type = TYPE_A;
cmd_form = FORM_N;
}
| A SP form_code
- = {
+ {
cmd_type = TYPE_A;
cmd_form = $3;
}
| E
- = {
+ {
cmd_type = TYPE_E;
cmd_form = FORM_N;
}
| E SP form_code
- = {
+ {
cmd_type = TYPE_E;
cmd_form = $3;
}
| I
- = {
+ {
cmd_type = TYPE_I;
}
| L
- = {
+ {
cmd_type = TYPE_L;
cmd_bytesz = NBBY;
}
| L SP byte_size
- = {
+ {
cmd_type = TYPE_L;
cmd_bytesz = $3;
}
/* this is for a bug in the BBN ftp */
| L byte_size
- = {
+ {
cmd_type = TYPE_L;
cmd_bytesz = $2;
}
;
struct_code: F
- = {
+ {
$$ = STRU_F;
}
| R
- = {
+ {
$$ = STRU_R;
}
| P
- = {
+ {
$$ = STRU_P;
}
;
mode_code: S
- = {
+ {
$$ = MODE_S;
}
| B
- = {
+ {
$$ = MODE_B;
}
| C
- = {
+ {
$$ = MODE_C;
}
;
pathname: pathstring
- = {
+ {
/*
* Problem: this production is used for all pathname
* processing, but only gives a 550 error reply.
@@ -605,9 +654,9 @@ pathname: pathstring
*/
if (logged_in && $1 && strncmp((char *) $1, "~", 1) == 0) {
*(char **)&($$) = *glob((char *) $1);
- if (globerr != NULL) {
+ if (globerr != 0) {
reply(550, globerr);
- $$ = NULL;
+ $$ = 0;
}
free((char *) $1);
} else
@@ -619,7 +668,7 @@ pathstring: STRING
;
octal_number: NUMBER
- = {
+ {
register int ret, dec, multby, digit;
/*
@@ -644,7 +693,7 @@ octal_number: NUMBER
;
check_login: /* empty */
- = {
+ {
if (logged_in)
$$ = 1;
else {
@@ -656,8 +705,14 @@ check_login: /* empty */
%%
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
extern jmp_buf errcatch;
+static void upper(char *);
+
#define CMD 0 /* beginning of command */
#define ARGS 1 /* expect miscellaneous arguments */
#define STR1 2 /* expect SP followed by STRING */
@@ -668,14 +723,6 @@ extern jmp_buf errcatch;
#define SITECMD 7 /* SITE command */
#define NSTR 8 /* Number followed by a string */
-struct tab {
- char *name;
- short token;
- short state;
- short implemented; /* 1 if command is implemented */
- char *help;
-};
-
struct tab cmdtab[] = { /* In order defined in RFC 765 */
{ "USER", USER, STR1, 1, "<sp> username" },
{ "PASS", PASS, ZSTR1, 1, "<sp> password" },
@@ -724,7 +771,7 @@ struct tab cmdtab[] = { /* In order defined in RFC 765 */
{ "STOU", STOU, STR1, 1, "<sp> file-name" },
{ "SIZE", SIZE, OSTR, 1, "<sp> path-name" },
{ "MDTM", MDTM, OSTR, 1, "<sp> path-name" },
- { NULL, 0, 0, 0, 0 }
+ { 0, 0, 0, 0, 0 }
};
struct tab sitetab[] = {
@@ -732,16 +779,14 @@ struct tab sitetab[] = {
{ "IDLE", IDLE, ARGS, 1, "[ <sp> maximum-idle-time ]" },
{ "CHMOD", CHMOD, NSTR, 1, "<sp> mode <sp> file-name" },
{ "HELP", HELP, OSTR, 1, "[ <sp> <string> ]" },
- { NULL, 0, 0, 0, 0 }
+ { 0, 0, 0, 0, 0 }
};
-struct tab *
-lookup(p, cmd)
- register struct tab *p;
- char *cmd;
+static struct tab *
+lookup(struct tab *p, char *cmd)
{
- for (; p->name != NULL; p++)
+ for (; p->name != 0; p++)
if (strcmp(cmd, p->name) == 0)
return (p);
return (0);
@@ -750,14 +795,12 @@ lookup(p, cmd)
#include <arpa/telnet.h>
/*
- * getline - a hacked up version of fgets to ignore TELNET escape codes.
+ * get_line - a hacked up version of fgets to ignore TELNET escape codes.
*/
-char *
-getline(s, n, iop)
- char *s;
- register FILE *iop;
+static char *
+get_line(char *s, int n, FILE *iop)
{
- register c;
+ register int c;
register char *cs;
cs = s;
@@ -765,7 +808,7 @@ getline(s, n, iop)
for (c = 0; tmpline[c] != '\0' && --n > 0; ++c) {
*cs++ = tmpline[c];
if (tmpline[c] == '\n') {
- *cs++ = '\0';
+ *cs = '\0';
if (debug)
syslog(LOG_DEBUG, "command: %s", s);
tmpline[0] = '\0';
@@ -804,20 +847,19 @@ getline(s, n, iop)
break;
}
if (c == EOF && cs == s)
- return (NULL);
- *cs++ = '\0';
+ return (0);
+ *cs = '\0';
if (debug)
syslog(LOG_DEBUG, "command: %s", s);
return (s);
}
-static int
-toolong()
+static void
+toolong(int sig)
{
time_t now;
- extern char *ctime();
- extern time_t time();
+ (void) sig;
reply(421,
"Timeout (%d seconds): closing control connection.", timeout);
(void) time(&now);
@@ -829,14 +871,14 @@ toolong()
dologout(1);
}
-yylex()
+int
+yylex(void)
{
static int cpos, state;
register char *cp, *cp2;
register struct tab *p;
int n;
- char c, *strpbrk();
- char *copy();
+ char c;
for (;;) {
switch (state) {
@@ -844,16 +886,16 @@ yylex()
case CMD:
(void) signal(SIGALRM, toolong);
(void) alarm((unsigned) timeout);
- if (getline(cbuf, sizeof(cbuf)-1, stdin) == NULL) {
+ if (get_line(cbuf, sizeof(cbuf)-1, stdin) == 0) {
reply(221, "You could at least say goodbye.");
dologout(0);
}
(void) alarm(0);
#ifdef SETPROCTITLE
- if (strncasecmp(cbuf, "PASS", 4) != NULL)
+ if (strncasecmp(cbuf, "PASS", 4) != 0)
setproctitle("%s: %s", proctitle, cbuf);
#endif /* SETPROCTITLE */
- if ((cp = index(cbuf, '\r'))) {
+ if ((cp = strchr(cbuf, '\r'))) {
*cp++ = '\n';
*cp = '\0';
}
@@ -873,7 +915,7 @@ yylex()
/* NOTREACHED */
}
state = p->state;
- *(char **)&yylval = p->name;
+ *(const char **)(&yylval) = p->name;
return (p->token);
}
break;
@@ -899,7 +941,7 @@ yylex()
/* NOTREACHED */
}
state = p->state;
- *(char **)&yylval = p->name;
+ *(const char **)(&yylval) = p->name;
return (p->token);
}
state = CMD;
@@ -917,7 +959,10 @@ yylex()
dostr1:
if (cbuf[cpos] == ' ') {
cpos++;
- state = state == OSTR ? STR2 : ++state;
+ if (state == OSTR)
+ state = STR2;
+ else
+ ++state;
return (SP);
}
break;
@@ -1047,8 +1092,8 @@ yylex()
}
}
-upper(s)
- register char *s;
+static void
+upper(char *s)
{
while (*s != '\0') {
if (islower(*s))
@@ -1057,34 +1102,32 @@ upper(s)
}
}
-char *
-copy(s)
- char *s;
+static char *
+copy(const char *s)
{
char *p;
- extern char *malloc(), *strcpy();
- p = malloc((unsigned) strlen(s) + 1);
- if (p == NULL)
+ p = (char * )malloc(strlen(s) + 1);
+ if (p == 0)
fatal("Ran out of memory.");
- (void) strcpy(p, s);
+ else
+ (void) strcpy(p, s);
return (p);
}
-help(ctab, s)
- struct tab *ctab;
- char *s;
+static void
+help(struct tab *ctab, char *s)
{
register struct tab *c;
register int width, NCMDS;
- char *type;
+ const char *help_type;
if (ctab == sitetab)
- type = "SITE ";
+ help_type = "SITE ";
else
- type = "";
+ help_type = "";
width = 0, NCMDS = 0;
- for (c = ctab; c->name != NULL; c++) {
+ for (c = ctab; c->name != 0; c++) {
int len = strlen(c->name);
if (len > width)
@@ -1097,7 +1140,7 @@ help(ctab, s)
int columns, lines;
lreply(214, "The following %scommands are recognized %s.",
- type, "(* =>'s unimplemented)");
+ help_type, "(* =>'s unimplemented)");
columns = 76 / width;
if (columns == 0)
columns = 1;
@@ -1106,6 +1149,7 @@ help(ctab, s)
printf(" ");
for (j = 0; j < columns; j++) {
c = ctab + j * lines + i;
+ assert(c->name != 0);
printf("%s%c", c->name,
c->implemented ? ' ' : '*');
if (c + lines >= &ctab[NCMDS])
@@ -1129,14 +1173,14 @@ help(ctab, s)
return;
}
if (c->implemented)
- reply(214, "Syntax: %s%s %s", type, c->name, c->help);
+ reply(214, "Syntax: %s%s %s", help_type, c->name, c->help);
else
- reply(214, "%s%-*s\t%s; unimplemented.", type, width,
+ reply(214, "%s%-*s\t%s; unimplemented.", help_type, width,
c->name, c->help);
}
-sizecmd(filename)
-char *filename;
+static void
+sizecmd(char *filename)
{
switch (type) {
case TYPE_L:
@@ -1146,14 +1190,18 @@ char *filename;
(stbuf.st_mode&S_IFMT) != S_IFREG)
reply(550, "%s: not a plain file.", filename);
else
+#ifdef HAVE_LONG_LONG
+ reply(213, "%llu", (long long) stbuf.st_size);
+#else
reply(213, "%lu", stbuf.st_size);
+#endif
break;}
case TYPE_A: {
FILE *fin;
register int c, count;
struct stat stbuf;
fin = fopen(filename, "r");
- if (fin == NULL) {
+ if (fin == 0) {
perror_reply(550, filename);
return;
}
diff --git a/contrib/byacc/test/grammar.output b/contrib/byacc/test/grammar.output
new file mode 100644
index 000000000000..6351322345b5
--- /dev/null
+++ b/contrib/byacc/test/grammar.output
@@ -0,0 +1,2214 @@
+ 0 $accept : program $end
+
+ 1 program :
+ 2 | translation_unit
+
+ 3 translation_unit : external_declaration
+ 4 | translation_unit external_declaration
+
+ 5 external_declaration : declaration
+ 6 | function_definition
+ 7 | ';'
+ 8 | linkage_specification
+ 9 | T_ASM T_ASMARG ';'
+ 10 | error T_MATCHRBRACE
+ 11 | error ';'
+
+ 12 braces : T_LBRACE T_MATCHRBRACE
+
+ 13 linkage_specification : T_EXTERN T_STRING_LITERAL braces
+ 14 | T_EXTERN T_STRING_LITERAL declaration
+
+ 15 declaration : decl_specifiers ';'
+ 16 | decl_specifiers init_declarator_list ';'
+
+ 17 $$1 :
+
+ 18 declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'
+
+ 19 any_typedef : T_EXTENSION T_TYPEDEF
+ 20 | T_TYPEDEF
+
+ 21 opt_declarator_list :
+ 22 | declarator_list
+
+ 23 declarator_list : declarator
+ 24 | declarator_list ',' declarator
+
+ 25 $$2 :
+
+ 26 $$3 :
+
+ 27 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE
+
+ 28 $$4 :
+
+ 29 function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE
+
+ 30 opt_declaration_list :
+ 31 | T_VA_DCL
+ 32 | declaration_list
+
+ 33 declaration_list : declaration
+ 34 | declaration_list declaration
+
+ 35 decl_specifiers : decl_specifier
+ 36 | decl_specifiers decl_specifier
+
+ 37 decl_specifier : storage_class
+ 38 | type_specifier
+ 39 | type_qualifier
+
+ 40 storage_class : T_AUTO
+ 41 | T_EXTERN
+ 42 | T_REGISTER
+ 43 | T_STATIC
+ 44 | T_INLINE
+ 45 | T_EXTENSION
+
+ 46 type_specifier : T_CHAR
+ 47 | T_DOUBLE
+ 48 | T_FLOAT
+ 49 | T_INT
+ 50 | T_LONG
+ 51 | T_SHORT
+ 52 | T_SIGNED
+ 53 | T_UNSIGNED
+ 54 | T_VOID
+ 55 | T_Bool
+ 56 | T_Complex
+ 57 | T_Imaginary
+ 58 | T_TYPEDEF_NAME
+ 59 | struct_or_union_specifier
+ 60 | enum_specifier
+
+ 61 type_qualifier : T_TYPE_QUALIFIER
+ 62 | T_DEFINE_NAME
+
+ 63 struct_or_union_specifier : struct_or_union any_id braces
+ 64 | struct_or_union braces
+ 65 | struct_or_union any_id
+
+ 66 struct_or_union : T_STRUCT
+ 67 | T_UNION
+
+ 68 init_declarator_list : init_declarator
+ 69 | init_declarator_list ',' init_declarator
+
+ 70 init_declarator : declarator
+
+ 71 $$5 :
+
+ 72 init_declarator : declarator '=' $$5 T_INITIALIZER
+
+ 73 enum_specifier : enumeration any_id braces
+ 74 | enumeration braces
+ 75 | enumeration any_id
+
+ 76 enumeration : T_ENUM
+
+ 77 any_id : T_IDENTIFIER
+ 78 | T_TYPEDEF_NAME
+
+ 79 declarator : pointer direct_declarator
+ 80 | direct_declarator
+
+ 81 direct_declarator : identifier_or_ref
+ 82 | '(' declarator ')'
+ 83 | direct_declarator T_BRACKETS
+ 84 | direct_declarator '(' parameter_type_list ')'
+ 85 | direct_declarator '(' opt_identifier_list ')'
+
+ 86 pointer : '*' opt_type_qualifiers
+ 87 | '*' opt_type_qualifiers pointer
+
+ 88 opt_type_qualifiers :
+ 89 | type_qualifier_list
+
+ 90 type_qualifier_list : type_qualifier
+ 91 | type_qualifier_list type_qualifier
+
+ 92 parameter_type_list : parameter_list
+ 93 | parameter_list ',' T_ELLIPSIS
+
+ 94 parameter_list : parameter_declaration
+ 95 | parameter_list ',' parameter_declaration
+
+ 96 parameter_declaration : decl_specifiers declarator
+ 97 | decl_specifiers abs_declarator
+ 98 | decl_specifiers
+
+ 99 opt_identifier_list :
+ 100 | identifier_list
+
+ 101 identifier_list : any_id
+ 102 | identifier_list ',' any_id
+
+ 103 identifier_or_ref : any_id
+ 104 | '&' any_id
+
+ 105 abs_declarator : pointer
+ 106 | pointer direct_abs_declarator
+ 107 | direct_abs_declarator
+
+ 108 direct_abs_declarator : '(' abs_declarator ')'
+ 109 | direct_abs_declarator T_BRACKETS
+ 110 | T_BRACKETS
+ 111 | direct_abs_declarator '(' parameter_type_list ')'
+ 112 | direct_abs_declarator '(' ')'
+ 113 | '(' parameter_type_list ')'
+ 114 | '(' ')'
+
+state 0
+ $accept : . program $end (0)
+ program : . (1)
+
+ error shift 1
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 9
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_ASM shift 31
+ ';' shift 32
+ $end reduce 1
+
+ program goto 33
+ decl_specifiers goto 34
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ declarator goto 41
+ direct_declarator goto 42
+ struct_or_union goto 43
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+ translation_unit goto 48
+ external_declaration goto 49
+ declaration goto 50
+ function_definition goto 51
+ linkage_specification goto 52
+ any_typedef goto 53
+
+
+state 1
+ external_declaration : error . T_MATCHRBRACE (10)
+ external_declaration : error . ';' (11)
+
+ T_MATCHRBRACE shift 54
+ ';' shift 55
+ . error
+
+
+state 2
+ direct_declarator : '(' . declarator ')' (82)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ declarator goto 57
+ direct_declarator goto 42
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+
+
+state 3
+ pointer : '*' . opt_type_qualifiers (86)
+ pointer : '*' . opt_type_qualifiers pointer (87)
+ opt_type_qualifiers : . (88)
+
+ T_DEFINE_NAME shift 7
+ T_TYPE_QUALIFIER shift 30
+ '(' reduce 88
+ '*' reduce 88
+ '&' reduce 88
+ T_IDENTIFIER reduce 88
+ T_TYPEDEF_NAME reduce 88
+ T_BRACKETS reduce 88
+ ',' reduce 88
+ ')' reduce 88
+
+ type_qualifier goto 58
+ opt_type_qualifiers goto 59
+ type_qualifier_list goto 60
+
+
+state 4
+ identifier_or_ref : '&' . any_id (104)
+
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ any_id goto 61
+
+
+state 5
+ any_id : T_IDENTIFIER . (77)
+
+ . reduce 77
+
+
+6: reduce/reduce conflict (reduce 58, reduce 78) on '('
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_TYPEDEF_NAME
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_DEFINE_NAME
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_AUTO
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_EXTERN
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_REGISTER
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_STATIC
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_INLINE
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_EXTENSION
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_CHAR
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_DOUBLE
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_FLOAT
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_INT
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_VOID
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_LONG
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_SHORT
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_SIGNED
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_UNSIGNED
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_ENUM
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_STRUCT
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_UNION
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_Bool
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_Complex
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_Imaginary
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_TYPE_QUALIFIER
+6: reduce/reduce conflict (reduce 58, reduce 78) on T_BRACKETS
+6: reduce/reduce conflict (reduce 58, reduce 78) on ';'
+6: reduce/reduce conflict (reduce 58, reduce 78) on ','
+6: reduce/reduce conflict (reduce 58, reduce 78) on ')'
+state 6
+ type_specifier : T_TYPEDEF_NAME . (58)
+ any_id : T_TYPEDEF_NAME . (78)
+
+ '(' reduce 58
+ '*' reduce 58
+ '&' reduce 58
+ T_IDENTIFIER reduce 58
+ T_TYPEDEF_NAME reduce 58
+ T_DEFINE_NAME reduce 58
+ T_AUTO reduce 58
+ T_EXTERN reduce 58
+ T_REGISTER reduce 58
+ T_STATIC reduce 58
+ T_TYPEDEF reduce 78
+ T_INLINE reduce 58
+ T_EXTENSION reduce 58
+ T_CHAR reduce 58
+ T_DOUBLE reduce 58
+ T_FLOAT reduce 58
+ T_INT reduce 58
+ T_VOID reduce 58
+ T_LONG reduce 58
+ T_SHORT reduce 58
+ T_SIGNED reduce 58
+ T_UNSIGNED reduce 58
+ T_ENUM reduce 58
+ T_STRUCT reduce 58
+ T_UNION reduce 58
+ T_Bool reduce 58
+ T_Complex reduce 58
+ T_Imaginary reduce 58
+ T_TYPE_QUALIFIER reduce 58
+ T_BRACKETS reduce 58
+ T_LBRACE reduce 78
+ T_VA_DCL reduce 78
+ ';' reduce 58
+ ',' reduce 58
+ '=' reduce 78
+ ')' reduce 58
+
+
+state 7
+ type_qualifier : T_DEFINE_NAME . (62)
+
+ . reduce 62
+
+
+state 8
+ storage_class : T_AUTO . (40)
+
+ . reduce 40
+
+
+state 9
+ linkage_specification : T_EXTERN . T_STRING_LITERAL braces (13)
+ linkage_specification : T_EXTERN . T_STRING_LITERAL declaration (14)
+ storage_class : T_EXTERN . (41)
+
+ T_STRING_LITERAL shift 62
+ '(' reduce 41
+ '*' reduce 41
+ '&' reduce 41
+ T_IDENTIFIER reduce 41
+ T_TYPEDEF_NAME reduce 41
+ T_DEFINE_NAME reduce 41
+ T_AUTO reduce 41
+ T_EXTERN reduce 41
+ T_REGISTER reduce 41
+ T_STATIC reduce 41
+ T_INLINE reduce 41
+ T_EXTENSION reduce 41
+ T_CHAR reduce 41
+ T_DOUBLE reduce 41
+ T_FLOAT reduce 41
+ T_INT reduce 41
+ T_VOID reduce 41
+ T_LONG reduce 41
+ T_SHORT reduce 41
+ T_SIGNED reduce 41
+ T_UNSIGNED reduce 41
+ T_ENUM reduce 41
+ T_STRUCT reduce 41
+ T_UNION reduce 41
+ T_Bool reduce 41
+ T_Complex reduce 41
+ T_Imaginary reduce 41
+ T_TYPE_QUALIFIER reduce 41
+ ';' reduce 41
+
+
+state 10
+ storage_class : T_REGISTER . (42)
+
+ . reduce 42
+
+
+state 11
+ storage_class : T_STATIC . (43)
+
+ . reduce 43
+
+
+state 12
+ any_typedef : T_TYPEDEF . (20)
+
+ . reduce 20
+
+
+state 13
+ storage_class : T_INLINE . (44)
+
+ . reduce 44
+
+
+state 14
+ any_typedef : T_EXTENSION . T_TYPEDEF (19)
+ storage_class : T_EXTENSION . (45)
+
+ T_TYPEDEF shift 63
+ '(' reduce 45
+ '*' reduce 45
+ '&' reduce 45
+ T_IDENTIFIER reduce 45
+ T_TYPEDEF_NAME reduce 45
+ T_DEFINE_NAME reduce 45
+ T_AUTO reduce 45
+ T_EXTERN reduce 45
+ T_REGISTER reduce 45
+ T_STATIC reduce 45
+ T_INLINE reduce 45
+ T_EXTENSION reduce 45
+ T_CHAR reduce 45
+ T_DOUBLE reduce 45
+ T_FLOAT reduce 45
+ T_INT reduce 45
+ T_VOID reduce 45
+ T_LONG reduce 45
+ T_SHORT reduce 45
+ T_SIGNED reduce 45
+ T_UNSIGNED reduce 45
+ T_ENUM reduce 45
+ T_STRUCT reduce 45
+ T_UNION reduce 45
+ T_Bool reduce 45
+ T_Complex reduce 45
+ T_Imaginary reduce 45
+ T_TYPE_QUALIFIER reduce 45
+ ';' reduce 45
+
+
+state 15
+ type_specifier : T_CHAR . (46)
+
+ . reduce 46
+
+
+state 16
+ type_specifier : T_DOUBLE . (47)
+
+ . reduce 47
+
+
+state 17
+ type_specifier : T_FLOAT . (48)
+
+ . reduce 48
+
+
+state 18
+ type_specifier : T_INT . (49)
+
+ . reduce 49
+
+
+state 19
+ type_specifier : T_VOID . (54)
+
+ . reduce 54
+
+
+state 20
+ type_specifier : T_LONG . (50)
+
+ . reduce 50
+
+
+state 21
+ type_specifier : T_SHORT . (51)
+
+ . reduce 51
+
+
+state 22
+ type_specifier : T_SIGNED . (52)
+
+ . reduce 52
+
+
+state 23
+ type_specifier : T_UNSIGNED . (53)
+
+ . reduce 53
+
+
+state 24
+ enumeration : T_ENUM . (76)
+
+ . reduce 76
+
+
+state 25
+ struct_or_union : T_STRUCT . (66)
+
+ . reduce 66
+
+
+state 26
+ struct_or_union : T_UNION . (67)
+
+ . reduce 67
+
+
+state 27
+ type_specifier : T_Bool . (55)
+
+ . reduce 55
+
+
+state 28
+ type_specifier : T_Complex . (56)
+
+ . reduce 56
+
+
+state 29
+ type_specifier : T_Imaginary . (57)
+
+ . reduce 57
+
+
+state 30
+ type_qualifier : T_TYPE_QUALIFIER . (61)
+
+ . reduce 61
+
+
+state 31
+ external_declaration : T_ASM . T_ASMARG ';' (9)
+
+ T_ASMARG shift 64
+ . error
+
+
+state 32
+ external_declaration : ';' . (7)
+
+ . reduce 7
+
+
+state 33
+ $accept : program . $end (0)
+
+ $end accept
+
+
+state 34
+ declaration : decl_specifiers . ';' (15)
+ declaration : decl_specifiers . init_declarator_list ';' (16)
+ function_definition : decl_specifiers . declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27)
+ decl_specifiers : decl_specifiers . decl_specifier (36)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ ';' shift 67
+ . error
+
+ decl_specifier goto 68
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ init_declarator_list goto 69
+ init_declarator goto 70
+ declarator goto 71
+ direct_declarator goto 42
+ struct_or_union goto 43
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+
+
+state 35
+ decl_specifiers : decl_specifier . (35)
+
+ . reduce 35
+
+
+state 36
+ decl_specifier : storage_class . (37)
+
+ . reduce 37
+
+
+state 37
+ decl_specifier : type_specifier . (38)
+
+ . reduce 38
+
+
+state 38
+ decl_specifier : type_qualifier . (39)
+
+ . reduce 39
+
+
+state 39
+ type_specifier : struct_or_union_specifier . (59)
+
+ . reduce 59
+
+
+state 40
+ type_specifier : enum_specifier . (60)
+
+ . reduce 60
+
+
+state 41
+ function_definition : declarator . $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE (29)
+ $$4 : . (28)
+
+ . reduce 28
+
+ $$4 goto 72
+
+
+state 42
+ declarator : direct_declarator . (80)
+ direct_declarator : direct_declarator . T_BRACKETS (83)
+ direct_declarator : direct_declarator . '(' parameter_type_list ')' (84)
+ direct_declarator : direct_declarator . '(' opt_identifier_list ')' (85)
+
+ '(' shift 73
+ T_BRACKETS shift 74
+ T_TYPEDEF_NAME reduce 80
+ T_DEFINE_NAME reduce 80
+ T_AUTO reduce 80
+ T_EXTERN reduce 80
+ T_REGISTER reduce 80
+ T_STATIC reduce 80
+ T_TYPEDEF reduce 80
+ T_INLINE reduce 80
+ T_EXTENSION reduce 80
+ T_CHAR reduce 80
+ T_DOUBLE reduce 80
+ T_FLOAT reduce 80
+ T_INT reduce 80
+ T_VOID reduce 80
+ T_LONG reduce 80
+ T_SHORT reduce 80
+ T_SIGNED reduce 80
+ T_UNSIGNED reduce 80
+ T_ENUM reduce 80
+ T_STRUCT reduce 80
+ T_UNION reduce 80
+ T_Bool reduce 80
+ T_Complex reduce 80
+ T_Imaginary reduce 80
+ T_TYPE_QUALIFIER reduce 80
+ T_LBRACE reduce 80
+ T_VA_DCL reduce 80
+ ';' reduce 80
+ ',' reduce 80
+ '=' reduce 80
+ ')' reduce 80
+
+
+state 43
+ struct_or_union_specifier : struct_or_union . any_id braces (63)
+ struct_or_union_specifier : struct_or_union . braces (64)
+ struct_or_union_specifier : struct_or_union . any_id (65)
+
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ T_LBRACE shift 75
+ . error
+
+ any_id goto 76
+ braces goto 77
+
+
+state 44
+ declarator : pointer . direct_declarator (79)
+
+ '(' shift 2
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ direct_declarator goto 78
+ any_id goto 45
+ identifier_or_ref goto 46
+
+
+state 45
+ identifier_or_ref : any_id . (103)
+
+ . reduce 103
+
+
+state 46
+ direct_declarator : identifier_or_ref . (81)
+
+ . reduce 81
+
+
+state 47
+ enum_specifier : enumeration . any_id braces (73)
+ enum_specifier : enumeration . braces (74)
+ enum_specifier : enumeration . any_id (75)
+
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ T_LBRACE shift 75
+ . error
+
+ any_id goto 79
+ braces goto 80
+
+
+state 48
+ program : translation_unit . (2)
+ translation_unit : translation_unit . external_declaration (4)
+
+ error shift 1
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 9
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_ASM shift 31
+ ';' shift 32
+ $end reduce 2
+
+ decl_specifiers goto 34
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ declarator goto 41
+ direct_declarator goto 42
+ struct_or_union goto 43
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+ external_declaration goto 81
+ declaration goto 50
+ function_definition goto 51
+ linkage_specification goto 52
+ any_typedef goto 53
+
+
+state 49
+ translation_unit : external_declaration . (3)
+
+ . reduce 3
+
+
+state 50
+ external_declaration : declaration . (5)
+
+ . reduce 5
+
+
+state 51
+ external_declaration : function_definition . (6)
+
+ . reduce 6
+
+
+state 52
+ external_declaration : linkage_specification . (8)
+
+ . reduce 8
+
+
+state 53
+ declaration : any_typedef . decl_specifiers $$1 opt_declarator_list ';' (18)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ . error
+
+ decl_specifiers goto 83
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+
+
+state 54
+ external_declaration : error T_MATCHRBRACE . (10)
+
+ . reduce 10
+
+
+state 55
+ external_declaration : error ';' . (11)
+
+ . reduce 11
+
+
+state 56
+ any_id : T_TYPEDEF_NAME . (78)
+
+ . reduce 78
+
+
+state 57
+ direct_declarator : '(' declarator . ')' (82)
+
+ ')' shift 84
+ . error
+
+
+state 58
+ type_qualifier_list : type_qualifier . (90)
+
+ . reduce 90
+
+
+state 59
+ pointer : '*' opt_type_qualifiers . (86)
+ pointer : '*' opt_type_qualifiers . pointer (87)
+
+ '*' shift 3
+ '(' reduce 86
+ '&' reduce 86
+ T_IDENTIFIER reduce 86
+ T_TYPEDEF_NAME reduce 86
+ T_BRACKETS reduce 86
+ ',' reduce 86
+ ')' reduce 86
+
+ pointer goto 85
+
+
+state 60
+ opt_type_qualifiers : type_qualifier_list . (89)
+ type_qualifier_list : type_qualifier_list . type_qualifier (91)
+
+ T_DEFINE_NAME shift 7
+ T_TYPE_QUALIFIER shift 30
+ '(' reduce 89
+ '*' reduce 89
+ '&' reduce 89
+ T_IDENTIFIER reduce 89
+ T_TYPEDEF_NAME reduce 89
+ T_BRACKETS reduce 89
+ ',' reduce 89
+ ')' reduce 89
+
+ type_qualifier goto 86
+
+
+state 61
+ identifier_or_ref : '&' any_id . (104)
+
+ . reduce 104
+
+
+state 62
+ linkage_specification : T_EXTERN T_STRING_LITERAL . braces (13)
+ linkage_specification : T_EXTERN T_STRING_LITERAL . declaration (14)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_LBRACE shift 75
+ . error
+
+ decl_specifiers goto 87
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+ declaration goto 88
+ braces goto 89
+ any_typedef goto 53
+
+
+state 63
+ any_typedef : T_EXTENSION T_TYPEDEF . (19)
+
+ . reduce 19
+
+
+state 64
+ external_declaration : T_ASM T_ASMARG . ';' (9)
+
+ ';' shift 90
+ . error
+
+
+state 65
+ storage_class : T_EXTERN . (41)
+
+ . reduce 41
+
+
+state 66
+ storage_class : T_EXTENSION . (45)
+
+ . reduce 45
+
+
+state 67
+ declaration : decl_specifiers ';' . (15)
+
+ . reduce 15
+
+
+state 68
+ decl_specifiers : decl_specifiers decl_specifier . (36)
+
+ . reduce 36
+
+
+state 69
+ declaration : decl_specifiers init_declarator_list . ';' (16)
+ init_declarator_list : init_declarator_list . ',' init_declarator (69)
+
+ ';' shift 91
+ ',' shift 92
+ . error
+
+
+state 70
+ init_declarator_list : init_declarator . (68)
+
+ . reduce 68
+
+
+state 71
+ function_definition : decl_specifiers declarator . $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27)
+ init_declarator : declarator . (70)
+ init_declarator : declarator . '=' $$5 T_INITIALIZER (72)
+ $$2 : . (25)
+
+ '=' shift 93
+ T_TYPEDEF_NAME reduce 25
+ T_DEFINE_NAME reduce 25
+ T_AUTO reduce 25
+ T_EXTERN reduce 25
+ T_REGISTER reduce 25
+ T_STATIC reduce 25
+ T_TYPEDEF reduce 25
+ T_INLINE reduce 25
+ T_EXTENSION reduce 25
+ T_CHAR reduce 25
+ T_DOUBLE reduce 25
+ T_FLOAT reduce 25
+ T_INT reduce 25
+ T_VOID reduce 25
+ T_LONG reduce 25
+ T_SHORT reduce 25
+ T_SIGNED reduce 25
+ T_UNSIGNED reduce 25
+ T_ENUM reduce 25
+ T_STRUCT reduce 25
+ T_UNION reduce 25
+ T_Bool reduce 25
+ T_Complex reduce 25
+ T_Imaginary reduce 25
+ T_TYPE_QUALIFIER reduce 25
+ T_LBRACE reduce 25
+ T_VA_DCL reduce 25
+ ';' reduce 70
+ ',' reduce 70
+
+ $$2 goto 94
+
+
+state 72
+ function_definition : declarator $$4 . opt_declaration_list T_LBRACE T_MATCHRBRACE (29)
+ opt_declaration_list : . (30)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_VA_DCL shift 95
+ T_LBRACE reduce 30
+
+ decl_specifiers goto 87
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+ declaration goto 96
+ any_typedef goto 53
+ opt_declaration_list goto 97
+ declaration_list goto 98
+
+
+state 73
+ direct_declarator : direct_declarator '(' . parameter_type_list ')' (84)
+ direct_declarator : direct_declarator '(' . opt_identifier_list ')' (85)
+ opt_identifier_list : . (99)
+
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ ')' reduce 99
+
+ decl_specifiers goto 99
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ parameter_type_list goto 100
+ parameter_list goto 101
+ parameter_declaration goto 102
+ opt_identifier_list goto 103
+ identifier_list goto 104
+ struct_or_union goto 43
+ any_id goto 105
+ enumeration goto 47
+
+
+state 74
+ direct_declarator : direct_declarator T_BRACKETS . (83)
+
+ . reduce 83
+
+
+state 75
+ braces : T_LBRACE . T_MATCHRBRACE (12)
+
+ T_MATCHRBRACE shift 106
+ . error
+
+
+state 76
+ struct_or_union_specifier : struct_or_union any_id . braces (63)
+ struct_or_union_specifier : struct_or_union any_id . (65)
+
+ T_LBRACE shift 75
+ '(' reduce 65
+ '*' reduce 65
+ '&' reduce 65
+ T_IDENTIFIER reduce 65
+ T_TYPEDEF_NAME reduce 65
+ T_DEFINE_NAME reduce 65
+ T_AUTO reduce 65
+ T_EXTERN reduce 65
+ T_REGISTER reduce 65
+ T_STATIC reduce 65
+ T_INLINE reduce 65
+ T_EXTENSION reduce 65
+ T_CHAR reduce 65
+ T_DOUBLE reduce 65
+ T_FLOAT reduce 65
+ T_INT reduce 65
+ T_VOID reduce 65
+ T_LONG reduce 65
+ T_SHORT reduce 65
+ T_SIGNED reduce 65
+ T_UNSIGNED reduce 65
+ T_ENUM reduce 65
+ T_STRUCT reduce 65
+ T_UNION reduce 65
+ T_Bool reduce 65
+ T_Complex reduce 65
+ T_Imaginary reduce 65
+ T_TYPE_QUALIFIER reduce 65
+ T_BRACKETS reduce 65
+ ';' reduce 65
+ ',' reduce 65
+ ')' reduce 65
+
+ braces goto 107
+
+
+state 77
+ struct_or_union_specifier : struct_or_union braces . (64)
+
+ . reduce 64
+
+
+state 78
+ declarator : pointer direct_declarator . (79)
+ direct_declarator : direct_declarator . T_BRACKETS (83)
+ direct_declarator : direct_declarator . '(' parameter_type_list ')' (84)
+ direct_declarator : direct_declarator . '(' opt_identifier_list ')' (85)
+
+ '(' shift 73
+ T_BRACKETS shift 74
+ T_TYPEDEF_NAME reduce 79
+ T_DEFINE_NAME reduce 79
+ T_AUTO reduce 79
+ T_EXTERN reduce 79
+ T_REGISTER reduce 79
+ T_STATIC reduce 79
+ T_TYPEDEF reduce 79
+ T_INLINE reduce 79
+ T_EXTENSION reduce 79
+ T_CHAR reduce 79
+ T_DOUBLE reduce 79
+ T_FLOAT reduce 79
+ T_INT reduce 79
+ T_VOID reduce 79
+ T_LONG reduce 79
+ T_SHORT reduce 79
+ T_SIGNED reduce 79
+ T_UNSIGNED reduce 79
+ T_ENUM reduce 79
+ T_STRUCT reduce 79
+ T_UNION reduce 79
+ T_Bool reduce 79
+ T_Complex reduce 79
+ T_Imaginary reduce 79
+ T_TYPE_QUALIFIER reduce 79
+ T_LBRACE reduce 79
+ T_VA_DCL reduce 79
+ ';' reduce 79
+ ',' reduce 79
+ '=' reduce 79
+ ')' reduce 79
+
+
+state 79
+ enum_specifier : enumeration any_id . braces (73)
+ enum_specifier : enumeration any_id . (75)
+
+ T_LBRACE shift 75
+ '(' reduce 75
+ '*' reduce 75
+ '&' reduce 75
+ T_IDENTIFIER reduce 75
+ T_TYPEDEF_NAME reduce 75
+ T_DEFINE_NAME reduce 75
+ T_AUTO reduce 75
+ T_EXTERN reduce 75
+ T_REGISTER reduce 75
+ T_STATIC reduce 75
+ T_INLINE reduce 75
+ T_EXTENSION reduce 75
+ T_CHAR reduce 75
+ T_DOUBLE reduce 75
+ T_FLOAT reduce 75
+ T_INT reduce 75
+ T_VOID reduce 75
+ T_LONG reduce 75
+ T_SHORT reduce 75
+ T_SIGNED reduce 75
+ T_UNSIGNED reduce 75
+ T_ENUM reduce 75
+ T_STRUCT reduce 75
+ T_UNION reduce 75
+ T_Bool reduce 75
+ T_Complex reduce 75
+ T_Imaginary reduce 75
+ T_TYPE_QUALIFIER reduce 75
+ T_BRACKETS reduce 75
+ ';' reduce 75
+ ',' reduce 75
+ ')' reduce 75
+
+ braces goto 108
+
+
+state 80
+ enum_specifier : enumeration braces . (74)
+
+ . reduce 74
+
+
+state 81
+ translation_unit : translation_unit external_declaration . (4)
+
+ . reduce 4
+
+
+state 82
+ type_specifier : T_TYPEDEF_NAME . (58)
+
+ . reduce 58
+
+
+83: shift/reduce conflict (shift 82, reduce 17) on T_TYPEDEF_NAME
+state 83
+ declaration : any_typedef decl_specifiers . $$1 opt_declarator_list ';' (18)
+ decl_specifiers : decl_specifiers . decl_specifier (36)
+ $$1 : . (17)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ '(' reduce 17
+ '*' reduce 17
+ '&' reduce 17
+ T_IDENTIFIER reduce 17
+ ';' reduce 17
+
+ decl_specifier goto 68
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+ $$1 goto 109
+
+
+state 84
+ direct_declarator : '(' declarator ')' . (82)
+
+ . reduce 82
+
+
+state 85
+ pointer : '*' opt_type_qualifiers pointer . (87)
+
+ . reduce 87
+
+
+state 86
+ type_qualifier_list : type_qualifier_list type_qualifier . (91)
+
+ . reduce 91
+
+
+state 87
+ declaration : decl_specifiers . ';' (15)
+ declaration : decl_specifiers . init_declarator_list ';' (16)
+ decl_specifiers : decl_specifiers . decl_specifier (36)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ ';' shift 67
+ . error
+
+ decl_specifier goto 68
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ init_declarator_list goto 69
+ init_declarator goto 70
+ declarator goto 110
+ direct_declarator goto 42
+ struct_or_union goto 43
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+
+
+state 88
+ linkage_specification : T_EXTERN T_STRING_LITERAL declaration . (14)
+
+ . reduce 14
+
+
+state 89
+ linkage_specification : T_EXTERN T_STRING_LITERAL braces . (13)
+
+ . reduce 13
+
+
+state 90
+ external_declaration : T_ASM T_ASMARG ';' . (9)
+
+ . reduce 9
+
+
+state 91
+ declaration : decl_specifiers init_declarator_list ';' . (16)
+
+ . reduce 16
+
+
+state 92
+ init_declarator_list : init_declarator_list ',' . init_declarator (69)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ init_declarator goto 111
+ declarator goto 110
+ direct_declarator goto 42
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+
+
+state 93
+ init_declarator : declarator '=' . $$5 T_INITIALIZER (72)
+ $$5 : . (71)
+
+ . reduce 71
+
+ $$5 goto 112
+
+
+state 94
+ function_definition : decl_specifiers declarator $$2 . opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27)
+ opt_declaration_list : . (30)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_VA_DCL shift 95
+ T_LBRACE reduce 30
+
+ decl_specifiers goto 87
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+ declaration goto 96
+ any_typedef goto 53
+ opt_declaration_list goto 113
+ declaration_list goto 98
+
+
+state 95
+ opt_declaration_list : T_VA_DCL . (31)
+
+ . reduce 31
+
+
+state 96
+ declaration_list : declaration . (33)
+
+ . reduce 33
+
+
+state 97
+ function_definition : declarator $$4 opt_declaration_list . T_LBRACE T_MATCHRBRACE (29)
+
+ T_LBRACE shift 114
+ . error
+
+
+state 98
+ opt_declaration_list : declaration_list . (32)
+ declaration_list : declaration_list . declaration (34)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_TYPEDEF shift 12
+ T_INLINE shift 13
+ T_EXTENSION shift 14
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_LBRACE reduce 32
+
+ decl_specifiers goto 87
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ struct_or_union goto 43
+ enumeration goto 47
+ declaration goto 115
+ any_typedef goto 53
+
+
+state 99
+ decl_specifiers : decl_specifiers . decl_specifier (36)
+ parameter_declaration : decl_specifiers . declarator (96)
+ parameter_declaration : decl_specifiers . abs_declarator (97)
+ parameter_declaration : decl_specifiers . (98)
+
+ '(' shift 116
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_BRACKETS shift 117
+ ',' reduce 98
+ ')' reduce 98
+
+ decl_specifier goto 68
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ declarator goto 118
+ direct_declarator goto 42
+ abs_declarator goto 119
+ direct_abs_declarator goto 120
+ struct_or_union goto 43
+ pointer goto 121
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+
+
+state 100
+ direct_declarator : direct_declarator '(' parameter_type_list . ')' (84)
+
+ ')' shift 122
+ . error
+
+
+state 101
+ parameter_type_list : parameter_list . (92)
+ parameter_type_list : parameter_list . ',' T_ELLIPSIS (93)
+ parameter_list : parameter_list . ',' parameter_declaration (95)
+
+ ',' shift 123
+ ')' reduce 92
+
+
+state 102
+ parameter_list : parameter_declaration . (94)
+
+ . reduce 94
+
+
+state 103
+ direct_declarator : direct_declarator '(' opt_identifier_list . ')' (85)
+
+ ')' shift 124
+ . error
+
+
+state 104
+ opt_identifier_list : identifier_list . (100)
+ identifier_list : identifier_list . ',' any_id (102)
+
+ ',' shift 125
+ ')' reduce 100
+
+
+state 105
+ identifier_list : any_id . (101)
+
+ . reduce 101
+
+
+state 106
+ braces : T_LBRACE T_MATCHRBRACE . (12)
+
+ . reduce 12
+
+
+state 107
+ struct_or_union_specifier : struct_or_union any_id braces . (63)
+
+ . reduce 63
+
+
+state 108
+ enum_specifier : enumeration any_id braces . (73)
+
+ . reduce 73
+
+
+state 109
+ declaration : any_typedef decl_specifiers $$1 . opt_declarator_list ';' (18)
+ opt_declarator_list : . (21)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ ';' reduce 21
+
+ declarator goto 126
+ direct_declarator goto 42
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+ opt_declarator_list goto 127
+ declarator_list goto 128
+
+
+state 110
+ init_declarator : declarator . (70)
+ init_declarator : declarator . '=' $$5 T_INITIALIZER (72)
+
+ '=' shift 93
+ ';' reduce 70
+ ',' reduce 70
+
+
+state 111
+ init_declarator_list : init_declarator_list ',' init_declarator . (69)
+
+ . reduce 69
+
+
+state 112
+ init_declarator : declarator '=' $$5 . T_INITIALIZER (72)
+
+ T_INITIALIZER shift 129
+ . error
+
+
+state 113
+ function_definition : decl_specifiers declarator $$2 opt_declaration_list . T_LBRACE $$3 T_MATCHRBRACE (27)
+
+ T_LBRACE shift 130
+ . error
+
+
+state 114
+ function_definition : declarator $$4 opt_declaration_list T_LBRACE . T_MATCHRBRACE (29)
+
+ T_MATCHRBRACE shift 131
+ . error
+
+
+state 115
+ declaration_list : declaration_list declaration . (34)
+
+ . reduce 34
+
+
+state 116
+ direct_declarator : '(' . declarator ')' (82)
+ direct_abs_declarator : '(' . abs_declarator ')' (108)
+ direct_abs_declarator : '(' . parameter_type_list ')' (113)
+ direct_abs_declarator : '(' . ')' (114)
+
+ '(' shift 116
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 6
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_BRACKETS shift 117
+ ')' shift 132
+ . error
+
+ decl_specifiers goto 99
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ declarator goto 57
+ direct_declarator goto 42
+ abs_declarator goto 133
+ direct_abs_declarator goto 120
+ parameter_type_list goto 134
+ parameter_list goto 101
+ parameter_declaration goto 102
+ struct_or_union goto 43
+ pointer goto 121
+ any_id goto 45
+ identifier_or_ref goto 46
+ enumeration goto 47
+
+
+state 117
+ direct_abs_declarator : T_BRACKETS . (110)
+
+ . reduce 110
+
+
+state 118
+ parameter_declaration : decl_specifiers declarator . (96)
+
+ . reduce 96
+
+
+state 119
+ parameter_declaration : decl_specifiers abs_declarator . (97)
+
+ . reduce 97
+
+
+state 120
+ abs_declarator : direct_abs_declarator . (107)
+ direct_abs_declarator : direct_abs_declarator . T_BRACKETS (109)
+ direct_abs_declarator : direct_abs_declarator . '(' parameter_type_list ')' (111)
+ direct_abs_declarator : direct_abs_declarator . '(' ')' (112)
+
+ '(' shift 135
+ T_BRACKETS shift 136
+ ',' reduce 107
+ ')' reduce 107
+
+
+state 121
+ declarator : pointer . direct_declarator (79)
+ abs_declarator : pointer . (105)
+ abs_declarator : pointer . direct_abs_declarator (106)
+
+ '(' shift 116
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ T_BRACKETS shift 117
+ ',' reduce 105
+ ')' reduce 105
+
+ direct_declarator goto 78
+ direct_abs_declarator goto 137
+ any_id goto 45
+ identifier_or_ref goto 46
+
+
+state 122
+ direct_declarator : direct_declarator '(' parameter_type_list ')' . (84)
+
+ . reduce 84
+
+
+state 123
+ parameter_type_list : parameter_list ',' . T_ELLIPSIS (93)
+ parameter_list : parameter_list ',' . parameter_declaration (95)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ T_ELLIPSIS shift 138
+ . error
+
+ decl_specifiers goto 99
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ parameter_declaration goto 139
+ struct_or_union goto 43
+ enumeration goto 47
+
+
+state 124
+ direct_declarator : direct_declarator '(' opt_identifier_list ')' . (85)
+
+ . reduce 85
+
+
+state 125
+ identifier_list : identifier_list ',' . any_id (102)
+
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ any_id goto 140
+
+
+state 126
+ declarator_list : declarator . (23)
+
+ . reduce 23
+
+
+state 127
+ declaration : any_typedef decl_specifiers $$1 opt_declarator_list . ';' (18)
+
+ ';' shift 141
+ . error
+
+
+state 128
+ opt_declarator_list : declarator_list . (22)
+ declarator_list : declarator_list . ',' declarator (24)
+
+ ',' shift 142
+ ';' reduce 22
+
+
+state 129
+ init_declarator : declarator '=' $$5 T_INITIALIZER . (72)
+
+ . reduce 72
+
+
+state 130
+ function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE . $$3 T_MATCHRBRACE (27)
+ $$3 : . (26)
+
+ . reduce 26
+
+ $$3 goto 143
+
+
+state 131
+ function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE . (29)
+
+ . reduce 29
+
+
+state 132
+ direct_abs_declarator : '(' ')' . (114)
+
+ . reduce 114
+
+
+state 133
+ direct_abs_declarator : '(' abs_declarator . ')' (108)
+
+ ')' shift 144
+ . error
+
+
+state 134
+ direct_abs_declarator : '(' parameter_type_list . ')' (113)
+
+ ')' shift 145
+ . error
+
+
+state 135
+ direct_abs_declarator : direct_abs_declarator '(' . parameter_type_list ')' (111)
+ direct_abs_declarator : direct_abs_declarator '(' . ')' (112)
+
+ T_TYPEDEF_NAME shift 82
+ T_DEFINE_NAME shift 7
+ T_AUTO shift 8
+ T_EXTERN shift 65
+ T_REGISTER shift 10
+ T_STATIC shift 11
+ T_INLINE shift 13
+ T_EXTENSION shift 66
+ T_CHAR shift 15
+ T_DOUBLE shift 16
+ T_FLOAT shift 17
+ T_INT shift 18
+ T_VOID shift 19
+ T_LONG shift 20
+ T_SHORT shift 21
+ T_SIGNED shift 22
+ T_UNSIGNED shift 23
+ T_ENUM shift 24
+ T_STRUCT shift 25
+ T_UNION shift 26
+ T_Bool shift 27
+ T_Complex shift 28
+ T_Imaginary shift 29
+ T_TYPE_QUALIFIER shift 30
+ ')' shift 146
+ . error
+
+ decl_specifiers goto 99
+ decl_specifier goto 35
+ storage_class goto 36
+ type_specifier goto 37
+ type_qualifier goto 38
+ struct_or_union_specifier goto 39
+ enum_specifier goto 40
+ parameter_type_list goto 147
+ parameter_list goto 101
+ parameter_declaration goto 102
+ struct_or_union goto 43
+ enumeration goto 47
+
+
+state 136
+ direct_abs_declarator : direct_abs_declarator T_BRACKETS . (109)
+
+ . reduce 109
+
+
+state 137
+ abs_declarator : pointer direct_abs_declarator . (106)
+ direct_abs_declarator : direct_abs_declarator . T_BRACKETS (109)
+ direct_abs_declarator : direct_abs_declarator . '(' parameter_type_list ')' (111)
+ direct_abs_declarator : direct_abs_declarator . '(' ')' (112)
+
+ '(' shift 135
+ T_BRACKETS shift 136
+ ',' reduce 106
+ ')' reduce 106
+
+
+state 138
+ parameter_type_list : parameter_list ',' T_ELLIPSIS . (93)
+
+ . reduce 93
+
+
+state 139
+ parameter_list : parameter_list ',' parameter_declaration . (95)
+
+ . reduce 95
+
+
+state 140
+ identifier_list : identifier_list ',' any_id . (102)
+
+ . reduce 102
+
+
+state 141
+ declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';' . (18)
+
+ . reduce 18
+
+
+state 142
+ declarator_list : declarator_list ',' . declarator (24)
+
+ '(' shift 2
+ '*' shift 3
+ '&' shift 4
+ T_IDENTIFIER shift 5
+ T_TYPEDEF_NAME shift 56
+ . error
+
+ declarator goto 148
+ direct_declarator goto 42
+ pointer goto 44
+ any_id goto 45
+ identifier_or_ref goto 46
+
+
+state 143
+ function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 . T_MATCHRBRACE (27)
+
+ T_MATCHRBRACE shift 149
+ . error
+
+
+state 144
+ direct_abs_declarator : '(' abs_declarator ')' . (108)
+
+ . reduce 108
+
+
+state 145
+ direct_abs_declarator : '(' parameter_type_list ')' . (113)
+
+ . reduce 113
+
+
+state 146
+ direct_abs_declarator : direct_abs_declarator '(' ')' . (112)
+
+ . reduce 112
+
+
+state 147
+ direct_abs_declarator : direct_abs_declarator '(' parameter_type_list . ')' (111)
+
+ ')' shift 150
+ . error
+
+
+state 148
+ declarator_list : declarator_list ',' declarator . (24)
+
+ . reduce 24
+
+
+state 149
+ function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE . (27)
+
+ . reduce 27
+
+
+state 150
+ direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')' . (111)
+
+ . reduce 111
+
+
+State 6 contains 29 reduce/reduce conflicts.
+State 83 contains 1 shift/reduce conflict.
+
+
+44 terminals, 43 nonterminals
+115 grammar rules, 151 states
diff --git a/contrib/byacc/test/grammar.tab.c b/contrib/byacc/test/grammar.tab.c
new file mode 100644
index 000000000000..64ffe1eae5a7
--- /dev/null
+++ b/contrib/byacc/test/grammar.tab.c
@@ -0,0 +1,2025 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse grammar_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex grammar_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror grammar_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar grammar_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval grammar_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval grammar_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug grammar_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs grammar_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag grammar_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs grammar_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen grammar_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred grammar_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto grammar_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex grammar_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex grammar_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex grammar_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable grammar_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck grammar_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname grammar_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule grammar_rule
+#endif /* yyrule */
+#define YYPREFIX "grammar_"
+
+#define YYPURE 0
+
+#line 9 "grammar.y"
+#ifdef YYBISON
+#include <stdlib.h>
+#define YYSTYPE_IS_DECLARED
+#define yyerror yaccError
+#endif
+
+#if defined(YYBISON) || !defined(YYBYACC)
+static void yyerror(const char *s);
+#endif
+#line 81 "grammar.y"
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+#define OPT_LINTLIBRARY 1
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+/* #include "cproto.h" */
+#define MAX_TEXT_SIZE 1024
+
+/* Prototype styles */
+#if OPT_LINTLIBRARY
+#define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */
+#define PROTO_LINTLIBRARY -1 /* form lint-library source */
+#endif
+#define PROTO_NONE 0 /* do not output any prototypes */
+#define PROTO_TRADITIONAL 1 /* comment out parameters */
+#define PROTO_ABSTRACT 2 /* comment out parameter names */
+#define PROTO_ANSI 3 /* ANSI C prototype */
+
+typedef int PrototypeStyle;
+
+typedef char boolean;
+
+extern boolean types_out;
+extern PrototypeStyle proto_style;
+
+#define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB)
+#define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY)
+#define lintLibrary() (knrLintLibrary() || ansiLintLibrary())
+
+#if OPT_LINTLIBRARY
+#define FUNC_UNKNOWN -1 /* unspecified */
+#else
+#define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */
+#endif
+#define FUNC_NONE 0 /* not a function definition */
+#define FUNC_TRADITIONAL 1 /* traditional style */
+#define FUNC_ANSI 2 /* ANSI style */
+#define FUNC_BOTH 3 /* both styles */
+
+typedef int FuncDefStyle;
+
+/* Source file text */
+typedef struct text {
+ char text[MAX_TEXT_SIZE]; /* source text */
+ long begin; /* offset in temporary file */
+} Text;
+
+/* Declaration specifier flags */
+#define DS_NONE 0 /* default */
+#define DS_EXTERN 1 /* contains "extern" specifier */
+#define DS_STATIC 2 /* contains "static" specifier */
+#define DS_CHAR 4 /* contains "char" type specifier */
+#define DS_SHORT 8 /* contains "short" type specifier */
+#define DS_FLOAT 16 /* contains "float" type specifier */
+#define DS_INLINE 32 /* contains "inline" specifier */
+#define DS_JUNK 64 /* we're not interested in this declaration */
+
+/* This structure stores information about a declaration specifier. */
+typedef struct decl_spec {
+ unsigned short flags; /* flags defined above */
+ char *text; /* source text */
+ long begin; /* offset in temporary file */
+} DeclSpec;
+
+/* This is a list of function parameters. */
+typedef struct _ParameterList {
+ struct parameter *first; /* pointer to first parameter in list */
+ struct parameter *last; /* pointer to last parameter in list */
+ long begin_comment; /* begin offset of comment */
+ long end_comment; /* end offset of comment */
+ char *comment; /* comment at start of parameter list */
+} ParameterList;
+
+/* This structure stores information about a declarator. */
+typedef struct _Declarator {
+ char *name; /* name of variable or function */
+ char *text; /* source text */
+ long begin; /* offset in temporary file */
+ long begin_comment; /* begin offset of comment */
+ long end_comment; /* end offset of comment */
+ FuncDefStyle func_def; /* style of function definition */
+ ParameterList params; /* function parameters */
+ boolean pointer; /* TRUE if it declares a pointer */
+ struct _Declarator *head; /* head function declarator */
+ struct _Declarator *func_stack; /* stack of function declarators */
+ struct _Declarator *next; /* next declarator in list */
+} Declarator;
+
+/* This structure stores information about a function parameter. */
+typedef struct parameter {
+ struct parameter *next; /* next parameter in list */
+ DeclSpec decl_spec;
+ Declarator *declarator;
+ char *comment; /* comment following the parameter */
+} Parameter;
+
+/* This is a list of declarators. */
+typedef struct declarator_list {
+ Declarator *first; /* pointer to first declarator in list */
+ Declarator *last; /* pointer to last declarator in list */
+} DeclaratorList;
+
+/* #include "symbol.h" */
+typedef struct symbol {
+ struct symbol *next; /* next symbol in list */
+ char *name; /* name of symbol */
+ char *value; /* value of symbol (for defines) */
+ short flags; /* symbol attributes */
+} Symbol;
+
+/* parser stack entry type */
+typedef union {
+ Text text;
+ DeclSpec decl_spec;
+ Parameter *parameter;
+ ParameterList param_list;
+ Declarator *declarator;
+ DeclaratorList decl_list;
+} YYSTYPE;
+
+/* The hash table length should be a prime number. */
+#define SYM_MAX_HASH 251
+
+typedef struct symbol_table {
+ Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */
+} SymbolTable;
+
+extern SymbolTable *new_symbol_table /* Create symbol table */
+ (void);
+extern void free_symbol_table /* Destroy symbol table */
+ (SymbolTable *s);
+extern Symbol *find_symbol /* Lookup symbol name */
+ (SymbolTable *s, const char *n);
+extern Symbol *new_symbol /* Define new symbol */
+ (SymbolTable *s, const char *n, const char *v, int f);
+
+/* #include "semantic.h" */
+extern void new_decl_spec (DeclSpec *, const char *, long, int);
+extern void free_decl_spec (DeclSpec *);
+extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *);
+extern void check_untagged (DeclSpec *);
+extern Declarator *new_declarator (const char *, const char *, long);
+extern void free_declarator (Declarator *);
+extern void new_decl_list (DeclaratorList *, Declarator *);
+extern void free_decl_list (DeclaratorList *);
+extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *);
+extern Parameter *new_parameter (DeclSpec *, Declarator *);
+extern void free_parameter (Parameter *);
+extern void new_param_list (ParameterList *, Parameter *);
+extern void free_param_list (ParameterList *);
+extern void add_param_list (ParameterList *, ParameterList *, Parameter *);
+extern void new_ident_list (ParameterList *);
+extern void add_ident_list (ParameterList *, ParameterList *, const char *);
+extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *);
+extern void gen_declarations (DeclSpec *, DeclaratorList *);
+extern void gen_prototype (DeclSpec *, Declarator *);
+extern void gen_func_declarator (Declarator *);
+extern void gen_func_definition (DeclSpec *, Declarator *);
+
+extern void init_parser (void);
+extern void process_file (FILE *infile, char *name);
+extern char *cur_text (void);
+extern char *cur_file_name (void);
+extern char *implied_typedef (void);
+extern void include_file (char *name, int convert);
+extern char *supply_parm (int count);
+extern char *xstrdup (const char *);
+extern int already_declared (char *name);
+extern int is_actual_func (Declarator *d);
+extern int lint_ellipsis (Parameter *p);
+extern int want_typedef (void);
+extern void begin_tracking (void);
+extern void begin_typedef (void);
+extern void copy_typedef (char *s);
+extern void ellipsis_varargs (Declarator *d);
+extern void end_typedef (void);
+extern void flush_varargs (void);
+extern void fmt_library (int code);
+extern void imply_typedef (const char *s);
+extern void indent (FILE *outf);
+extern void put_blankline (FILE *outf);
+extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator);
+extern void put_char (FILE *outf, int c);
+extern void put_error (void);
+extern void put_newline (FILE *outf);
+extern void put_padded (FILE *outf, const char *s);
+extern void put_string (FILE *outf, const char *s);
+extern void track_in (void);
+
+extern boolean file_comments;
+extern FuncDefStyle func_style;
+extern char base_file[];
+
+extern int yylex (void);
+
+/* declaration specifier attributes for the typedef statement currently being
+ * scanned
+ */
+static int cur_decl_spec_flags;
+
+/* pointer to parameter list for the current function definition */
+static ParameterList *func_params;
+
+/* A parser semantic action sets this pointer to the current declarator in
+ * a function parameter declaration in order to catch any comments following
+ * the parameter declaration on the same line. If the lexer scans a comment
+ * and <cur_declarator> is not NULL, then the comment is attached to the
+ * declarator. To ignore subsequent comments, the lexer sets this to NULL
+ * after scanning a comment or end of line.
+ */
+static Declarator *cur_declarator;
+
+/* temporary string buffer */
+static char buf[MAX_TEXT_SIZE];
+
+/* table of typedef names */
+static SymbolTable *typedef_names;
+
+/* table of define names */
+static SymbolTable *define_names;
+
+/* table of type qualifiers */
+static SymbolTable *type_qualifiers;
+
+/* information about the current input file */
+typedef struct {
+ char *base_name; /* base input file name */
+ char *file_name; /* current file name */
+ FILE *file; /* input file */
+ unsigned line_num; /* current line number in input file */
+ FILE *tmp_file; /* temporary file */
+ long begin_comment; /* tmp file offset after last written ) or ; */
+ long end_comment; /* tmp file offset after last comment */
+ boolean convert; /* if TRUE, convert function definitions */
+ boolean changed; /* TRUE if conversion done in this file */
+} IncludeStack;
+
+static IncludeStack *cur_file; /* current input file */
+
+/* #include "yyerror.c" */
+
+static int haveAnsiParam (void);
+
+
+/* Flags to enable us to find if a procedure returns a value.
+ */
+static int return_val; /* nonzero on BRACES iff return-expression found */
+
+static const char *
+dft_decl_spec (void)
+{
+ return (lintLibrary() && !return_val) ? "void" : "int";
+}
+
+static int
+haveAnsiParam (void)
+{
+ Parameter *p;
+ if (func_params != 0) {
+ for (p = func_params->first; p != 0; p = p->next) {
+ if (p->declarator->func_def == FUNC_ANSI) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+#line 386 "grammar.tab.c"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define T_IDENTIFIER 257
+#define T_TYPEDEF_NAME 258
+#define T_DEFINE_NAME 259
+#define T_AUTO 260
+#define T_EXTERN 261
+#define T_REGISTER 262
+#define T_STATIC 263
+#define T_TYPEDEF 264
+#define T_INLINE 265
+#define T_EXTENSION 266
+#define T_CHAR 267
+#define T_DOUBLE 268
+#define T_FLOAT 269
+#define T_INT 270
+#define T_VOID 271
+#define T_LONG 272
+#define T_SHORT 273
+#define T_SIGNED 274
+#define T_UNSIGNED 275
+#define T_ENUM 276
+#define T_STRUCT 277
+#define T_UNION 278
+#define T_Bool 279
+#define T_Complex 280
+#define T_Imaginary 281
+#define T_TYPE_QUALIFIER 282
+#define T_BRACKETS 283
+#define T_LBRACE 284
+#define T_MATCHRBRACE 285
+#define T_ELLIPSIS 286
+#define T_INITIALIZER 287
+#define T_STRING_LITERAL 288
+#define T_ASM 289
+#define T_ASMARG 290
+#define T_VA_DCL 291
+#define YYERRCODE 256
+static const short grammar_lhs[] = { -1,
+ 0, 0, 26, 26, 27, 27, 27, 27, 27, 27,
+ 27, 31, 30, 30, 28, 28, 34, 28, 32, 32,
+ 33, 33, 35, 35, 37, 38, 29, 39, 29, 36,
+ 36, 36, 40, 40, 1, 1, 2, 2, 2, 3,
+ 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 6, 6, 6, 19, 19, 8, 8, 9,
+ 41, 9, 7, 7, 7, 25, 23, 23, 10, 10,
+ 11, 11, 11, 11, 11, 20, 20, 21, 21, 22,
+ 22, 14, 14, 15, 15, 16, 16, 16, 17, 17,
+ 18, 18, 24, 24, 12, 12, 12, 13, 13, 13,
+ 13, 13, 13, 13,
+};
+static const short grammar_len[] = { 2,
+ 0, 1, 1, 2, 1, 1, 1, 1, 3, 2,
+ 2, 2, 3, 3, 2, 3, 0, 5, 2, 1,
+ 0, 1, 1, 3, 0, 0, 7, 0, 5, 0,
+ 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 3, 2, 2, 1, 1, 1, 3, 1,
+ 0, 4, 3, 2, 2, 1, 1, 1, 2, 1,
+ 1, 3, 2, 4, 4, 2, 3, 0, 1, 1,
+ 2, 1, 3, 1, 3, 2, 2, 1, 0, 1,
+ 1, 3, 1, 2, 1, 2, 1, 3, 2, 1,
+ 4, 3, 3, 2,
+};
+static const short grammar_defred[] = { 0,
+ 0, 0, 0, 0, 77, 0, 62, 40, 0, 42,
+ 43, 20, 44, 0, 46, 47, 48, 49, 54, 50,
+ 51, 52, 53, 76, 66, 67, 55, 56, 57, 61,
+ 0, 7, 0, 0, 35, 37, 38, 39, 59, 60,
+ 28, 0, 0, 0, 103, 81, 0, 0, 3, 5,
+ 6, 8, 0, 10, 11, 78, 0, 90, 0, 0,
+ 104, 0, 19, 0, 41, 45, 15, 36, 0, 68,
+ 0, 0, 0, 83, 0, 0, 64, 0, 0, 74,
+ 4, 58, 0, 82, 87, 91, 0, 14, 13, 9,
+ 16, 0, 71, 0, 31, 33, 0, 0, 0, 0,
+ 0, 94, 0, 0, 101, 12, 63, 73, 0, 0,
+ 69, 0, 0, 0, 34, 0, 110, 96, 97, 0,
+ 0, 84, 0, 85, 0, 23, 0, 0, 72, 26,
+ 29, 114, 0, 0, 0, 109, 0, 93, 95, 102,
+ 18, 0, 0, 108, 113, 112, 0, 24, 27, 111,
+};
+static const short grammar_dgoto[] = { 33,
+ 87, 35, 36, 37, 38, 39, 40, 69, 70, 41,
+ 42, 119, 120, 100, 101, 102, 103, 104, 43, 44,
+ 59, 60, 45, 46, 47, 48, 49, 50, 51, 52,
+ 77, 53, 127, 109, 128, 97, 94, 143, 72, 98,
+ 112,
+};
+static const short grammar_sindex[] = { -2,
+ -3, 27, -239, -177, 0, 0, 0, 0, -274, 0,
+ 0, 0, 0, -246, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -266, 0, 0, 455, 0, 0, 0, 0, 0, 0,
+ 0, -35, -245, 128, 0, 0, -245, -2, 0, 0,
+ 0, 0, 642, 0, 0, 0, -15, 0, -12, -239,
+ 0, 590, 0, -27, 0, 0, 0, 0, -10, 0,
+ -11, 534, -72, 0, -237, -232, 0, -35, -232, 0,
+ 0, 0, 642, 0, 0, 0, 455, 0, 0, 0,
+ 0, 27, 0, 534, 0, 0, -222, 617, 209, 34,
+ 39, 0, 44, 42, 0, 0, 0, 0, 27, -11,
+ 0, -200, -196, -195, 0, 174, 0, 0, 0, -33,
+ 243, 0, 561, 0, -177, 0, 33, 49, 0, 0,
+ 0, 0, 53, 55, 417, 0, -33, 0, 0, 0,
+ 0, 27, -188, 0, 0, 0, 57, 0, 0, 0,
+};
+static const short grammar_rindex[] = { 99,
+ 0, 0, 275, 0, 0, -38, 0, 0, 481, 0,
+ 0, 0, 0, 509, 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, 30, 0, 0, 0, 0, 0, 101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 343, 309,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 98, -182, 62, 0, 0, 133, 0, 64, 379, 0,
+ 0, 0, -5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -182, 0, 0, 0, -180, -19, 0,
+ 65, 0, 0, 68, 0, 0, 0, 0, 51, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, -13,
+ 19, 0, 0, 0, 0, 0, 0, 52, 0, 0,
+ 0, 0, 0, 0, 0, 0, 35, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+static const short grammar_gindex[] = { 0,
+ 11, -17, 0, 0, 13, 0, 0, 0, 20, 8,
+ -43, -1, -8, -89, 0, -9, 0, 0, 0, -44,
+ 0, 0, 4, 0, 0, 0, 70, -53, 0, 0,
+ -18, 0, 0, 0, 0, 22, 0, 0, 0, 0,
+ 0,
+};
+#define YYTABLESIZE 924
+static const short grammar_table[] = { 58,
+ 78, 58, 58, 58, 73, 58, 135, 61, 88, 57,
+ 34, 5, 56, 62, 85, 58, 68, 63, 96, 7,
+ 58, 98, 78, 64, 98, 84, 134, 107, 80, 3,
+ 107, 90, 17, 92, 17, 4, 17, 2, 75, 3,
+ 96, 71, 30, 89, 115, 147, 76, 106, 91, 93,
+ 79, 75, 70, 17, 121, 55, 32, 107, 34, 105,
+ 108, 114, 105, 83, 4, 68, 2, 70, 3, 68,
+ 80, 121, 86, 80, 122, 106, 105, 78, 106, 5,
+ 56, 68, 123, 99, 124, 125, 129, 130, 80, 131,
+ 80, 141, 142, 144, 110, 145, 149, 150, 1, 110,
+ 2, 30, 99, 32, 79, 92, 118, 79, 100, 21,
+ 22, 111, 137, 139, 133, 113, 126, 81, 0, 0,
+ 0, 0, 79, 57, 79, 0, 99, 0, 140, 0,
+ 0, 0, 0, 99, 0, 0, 0, 0, 0, 0,
+ 0, 70, 0, 0, 0, 99, 0, 0, 0, 148,
+ 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 2, 0, 0,
+ 65, 0, 65, 65, 65, 0, 65, 0, 0, 0,
+ 0, 0, 0, 0, 5, 6, 7, 8, 65, 10,
+ 11, 65, 13, 66, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 0, 4, 0, 116, 132, 3, 0, 0, 58, 58,
+ 58, 58, 58, 58, 58, 78, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 78, 4, 74, 116, 136,
+ 3, 17, 78, 1, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 4, 54, 116, 5, 56, 0, 31, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 88, 80, 88, 88, 88, 0, 88, 0,
+ 80, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 89, 79, 89, 89,
+ 89, 0, 89, 0, 79, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 86, 25, 86, 86, 5, 56, 86, 0, 25, 65,
+ 65, 65, 65, 65, 65, 65, 0, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 75, 0, 75, 75,
+ 75, 0, 75, 0, 0, 0, 0, 0, 0, 0,
+ 5, 6, 7, 8, 65, 10, 11, 75, 13, 66,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 117, 146, 0, 0,
+ 0, 0, 0, 0, 0, 5, 6, 7, 8, 65,
+ 10, 11, 0, 13, 66, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 117, 4, 0, 2, 0, 3, 0, 0, 5,
+ 56, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67, 0, 0, 0, 0, 41, 0,
+ 41, 0, 41, 0, 0, 117, 0, 0, 0, 0,
+ 0, 88, 88, 0, 0, 0, 0, 0, 0, 41,
+ 0, 0, 0, 0, 0, 0, 45, 0, 45, 0,
+ 45, 0, 0, 0, 0, 0, 0, 88, 0, 0,
+ 0, 0, 0, 0, 0, 89, 89, 45, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 89, 0, 0, 0, 0, 0, 0, 0, 86,
+ 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 75, 75, 75, 75, 75,
+ 75, 75, 0, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 7, 8, 65, 10, 11,
+ 0, 13, 66, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 6, 7, 8, 65, 10, 11, 0, 13,
+ 66, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 41, 41, 41,
+ 41, 41, 41, 41, 0, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 0, 0, 45, 45, 45, 45, 45,
+ 45, 45, 0, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 82, 7, 8, 65, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 0, 0, 82, 7,
+ 8, 65, 10, 11, 95, 13, 66, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 0, 0, 0, 138, 82, 7, 8,
+ 65, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 0, 75, 82, 7, 8, 65, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 82,
+ 7, 8, 65, 10, 11, 0, 13, 66, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30,
+};
+static const short grammar_check[] = { 38,
+ 44, 40, 41, 42, 40, 44, 40, 4, 62, 2,
+ 0, 257, 258, 288, 59, 3, 34, 264, 72, 259,
+ 59, 41, 61, 290, 44, 41, 116, 41, 47, 42,
+ 44, 59, 38, 44, 40, 38, 42, 40, 284, 42,
+ 94, 34, 282, 62, 98, 135, 43, 285, 59, 61,
+ 47, 284, 44, 59, 99, 59, 59, 76, 48, 41,
+ 79, 284, 44, 53, 38, 83, 40, 59, 42, 87,
+ 41, 116, 60, 44, 41, 41, 73, 121, 44, 257,
+ 258, 99, 44, 73, 41, 44, 287, 284, 59, 285,
+ 61, 59, 44, 41, 87, 41, 285, 41, 0, 92,
+ 0, 284, 41, 284, 41, 41, 99, 44, 41, 59,
+ 59, 92, 121, 123, 116, 94, 109, 48, -1, -1,
+ -1, -1, 59, 116, 61, -1, 116, -1, 125, -1,
+ -1, -1, -1, 123, -1, -1, -1, -1, -1, -1,
+ -1, 44, -1, -1, -1, 135, -1, -1, -1, 142,
+ -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
+ -1, -1, -1, -1, -1, 38, -1, 40, -1, -1,
+ 38, -1, 40, 41, 42, -1, 44, -1, -1, -1,
+ -1, -1, -1, -1, 257, 258, 259, 260, 261, 262,
+ 263, 59, 265, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ -1, 38, -1, 40, 41, 42, -1, -1, 257, 258,
+ 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
+ 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 38, 283, 40, 283,
+ 42, 257, 291, 256, 257, 258, 259, 260, 261, 262,
+ 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 38, 285, 40, 257, 258, -1, 289, 258, 259, 260,
+ 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 38, 284, 40, 41, 42, -1, 44, -1,
+ 291, 258, 259, 260, 261, 262, 263, 264, 265, 266,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 38, 284, 40, 41,
+ 42, -1, 44, -1, 291, 258, 259, 260, 261, 262,
+ 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 38, 284, 40, 41, 257, 258, 44, -1, 291, 257,
+ 258, 259, 260, 261, 262, 263, -1, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 38, -1, 40, 41,
+ 42, -1, 44, -1, -1, -1, -1, -1, -1, -1,
+ 257, 258, 259, 260, 261, 262, 263, 59, 265, 266,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 283, 41, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
+ 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, 38, -1, 40, -1, 42, -1, -1, 257,
+ 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 59, -1, -1, -1, -1, 38, -1,
+ 40, -1, 42, -1, -1, 283, -1, -1, -1, -1,
+ -1, 257, 258, -1, -1, -1, -1, -1, -1, 59,
+ -1, -1, -1, -1, -1, -1, 38, -1, 40, -1,
+ 42, -1, -1, -1, -1, -1, -1, 283, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 59, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 283, -1, -1, -1, -1, -1, -1, -1, 257,
+ 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 283, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
+ 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 258, 259, 260, 261, 262, 263,
+ -1, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 257, 258, 259, 260, 261, 262, 263, -1, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 257, 258, 259,
+ 260, 261, 262, 263, -1, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, -1, -1, 257, 258, 259, 260, 261,
+ 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 258, 259, 260, 261, 262, 263, 264, 265, 266,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, -1, -1, 258, 259,
+ 260, 261, 262, 263, 291, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, -1, -1, -1, 286, 258, 259, 260,
+ 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, -1, 284, 258, 259, 260, 261, 262, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 258,
+ 259, 260, 261, 262, 263, -1, 265, 266, 267, 268,
+ 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282,
+};
+#define YYFINAL 33
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 291
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",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,"','",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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+"T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN",
+"T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_EXTENSION","T_CHAR",
+"T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED",
+"T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex","T_Imaginary",
+"T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE","T_ELLIPSIS",
+"T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL",
+};
+static const char *yyrule[] = {
+"$accept : program",
+"program :",
+"program : translation_unit",
+"translation_unit : external_declaration",
+"translation_unit : translation_unit external_declaration",
+"external_declaration : declaration",
+"external_declaration : function_definition",
+"external_declaration : ';'",
+"external_declaration : linkage_specification",
+"external_declaration : T_ASM T_ASMARG ';'",
+"external_declaration : error T_MATCHRBRACE",
+"external_declaration : error ';'",
+"braces : T_LBRACE T_MATCHRBRACE",
+"linkage_specification : T_EXTERN T_STRING_LITERAL braces",
+"linkage_specification : T_EXTERN T_STRING_LITERAL declaration",
+"declaration : decl_specifiers ';'",
+"declaration : decl_specifiers init_declarator_list ';'",
+"$$1 :",
+"declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'",
+"any_typedef : T_EXTENSION T_TYPEDEF",
+"any_typedef : T_TYPEDEF",
+"opt_declarator_list :",
+"opt_declarator_list : declarator_list",
+"declarator_list : declarator",
+"declarator_list : declarator_list ',' declarator",
+"$$2 :",
+"$$3 :",
+"function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE",
+"$$4 :",
+"function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE",
+"opt_declaration_list :",
+"opt_declaration_list : T_VA_DCL",
+"opt_declaration_list : declaration_list",
+"declaration_list : declaration",
+"declaration_list : declaration_list declaration",
+"decl_specifiers : decl_specifier",
+"decl_specifiers : decl_specifiers decl_specifier",
+"decl_specifier : storage_class",
+"decl_specifier : type_specifier",
+"decl_specifier : type_qualifier",
+"storage_class : T_AUTO",
+"storage_class : T_EXTERN",
+"storage_class : T_REGISTER",
+"storage_class : T_STATIC",
+"storage_class : T_INLINE",
+"storage_class : T_EXTENSION",
+"type_specifier : T_CHAR",
+"type_specifier : T_DOUBLE",
+"type_specifier : T_FLOAT",
+"type_specifier : T_INT",
+"type_specifier : T_LONG",
+"type_specifier : T_SHORT",
+"type_specifier : T_SIGNED",
+"type_specifier : T_UNSIGNED",
+"type_specifier : T_VOID",
+"type_specifier : T_Bool",
+"type_specifier : T_Complex",
+"type_specifier : T_Imaginary",
+"type_specifier : T_TYPEDEF_NAME",
+"type_specifier : struct_or_union_specifier",
+"type_specifier : enum_specifier",
+"type_qualifier : T_TYPE_QUALIFIER",
+"type_qualifier : T_DEFINE_NAME",
+"struct_or_union_specifier : struct_or_union any_id braces",
+"struct_or_union_specifier : struct_or_union braces",
+"struct_or_union_specifier : struct_or_union any_id",
+"struct_or_union : T_STRUCT",
+"struct_or_union : T_UNION",
+"init_declarator_list : init_declarator",
+"init_declarator_list : init_declarator_list ',' init_declarator",
+"init_declarator : declarator",
+"$$5 :",
+"init_declarator : declarator '=' $$5 T_INITIALIZER",
+"enum_specifier : enumeration any_id braces",
+"enum_specifier : enumeration braces",
+"enum_specifier : enumeration any_id",
+"enumeration : T_ENUM",
+"any_id : T_IDENTIFIER",
+"any_id : T_TYPEDEF_NAME",
+"declarator : pointer direct_declarator",
+"declarator : direct_declarator",
+"direct_declarator : identifier_or_ref",
+"direct_declarator : '(' declarator ')'",
+"direct_declarator : direct_declarator T_BRACKETS",
+"direct_declarator : direct_declarator '(' parameter_type_list ')'",
+"direct_declarator : direct_declarator '(' opt_identifier_list ')'",
+"pointer : '*' opt_type_qualifiers",
+"pointer : '*' opt_type_qualifiers pointer",
+"opt_type_qualifiers :",
+"opt_type_qualifiers : type_qualifier_list",
+"type_qualifier_list : type_qualifier",
+"type_qualifier_list : type_qualifier_list type_qualifier",
+"parameter_type_list : parameter_list",
+"parameter_type_list : parameter_list ',' T_ELLIPSIS",
+"parameter_list : parameter_declaration",
+"parameter_list : parameter_list ',' parameter_declaration",
+"parameter_declaration : decl_specifiers declarator",
+"parameter_declaration : decl_specifiers abs_declarator",
+"parameter_declaration : decl_specifiers",
+"opt_identifier_list :",
+"opt_identifier_list : identifier_list",
+"identifier_list : any_id",
+"identifier_list : identifier_list ',' any_id",
+"identifier_or_ref : any_id",
+"identifier_or_ref : '&' any_id",
+"abs_declarator : pointer",
+"abs_declarator : pointer direct_abs_declarator",
+"abs_declarator : direct_abs_declarator",
+"direct_abs_declarator : '(' abs_declarator ')'",
+"direct_abs_declarator : direct_abs_declarator T_BRACKETS",
+"direct_abs_declarator : T_BRACKETS",
+"direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'",
+"direct_abs_declarator : direct_abs_declarator '(' ')'",
+"direct_abs_declarator : '(' parameter_type_list ')'",
+"direct_abs_declarator : '(' ')'",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 1014 "grammar.y"
+
+/* lex.yy.c */
+#define BEGIN yy_start = 1 + 2 *
+
+#define CPP1 1
+#define INIT1 2
+#define INIT2 3
+#define CURLY 4
+#define LEXYACC 5
+#define ASM 6
+#define CPP_INLINE 7
+
+extern char *yytext;
+extern FILE *yyin, *yyout;
+
+static int curly; /* number of curly brace nesting levels */
+static int ly_count; /* number of occurances of %% */
+static int inc_depth; /* include nesting level */
+static SymbolTable *included_files; /* files already included */
+static int yy_start = 0; /* start state number */
+
+#define grammar_error(s) yaccError(s)
+
+static void
+yaccError (const char *msg)
+{
+ func_params = NULL;
+ put_error(); /* tell what line we're on, and what file */
+ fprintf(stderr, "%s at token '%s'\n", msg, yytext);
+}
+
+/* Initialize the table of type qualifier keywords recognized by the lexical
+ * analyzer.
+ */
+void
+init_parser (void)
+{
+ static const char *keywords[] = {
+ "const",
+ "restrict",
+ "volatile",
+ "interrupt",
+#ifdef vms
+ "noshare",
+ "readonly",
+#endif
+#if defined(MSDOS) || defined(OS2)
+ "__cdecl",
+ "__export",
+ "__far",
+ "__fastcall",
+ "__fortran",
+ "__huge",
+ "__inline",
+ "__interrupt",
+ "__loadds",
+ "__near",
+ "__pascal",
+ "__saveregs",
+ "__segment",
+ "__stdcall",
+ "__syscall",
+ "_cdecl",
+ "_cs",
+ "_ds",
+ "_es",
+ "_export",
+ "_far",
+ "_fastcall",
+ "_fortran",
+ "_huge",
+ "_interrupt",
+ "_loadds",
+ "_near",
+ "_pascal",
+ "_saveregs",
+ "_seg",
+ "_segment",
+ "_ss",
+ "cdecl",
+ "far",
+ "huge",
+ "near",
+ "pascal",
+#ifdef OS2
+ "__far16",
+#endif
+#endif
+#ifdef __GNUC__
+ /* gcc aliases */
+ "__builtin_va_arg",
+ "__builtin_va_list",
+ "__const",
+ "__const__",
+ "__inline",
+ "__inline__",
+ "__restrict",
+ "__restrict__",
+ "__volatile",
+ "__volatile__",
+#endif
+ };
+ unsigned i;
+
+ /* Initialize type qualifier table. */
+ type_qualifiers = new_symbol_table();
+ for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) {
+ new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE);
+ }
+}
+
+/* Process the C source file. Write function prototypes to the standard
+ * output. Convert function definitions and write the converted source
+ * code to a temporary file.
+ */
+void
+process_file (FILE *infile, char *name)
+{
+ char *s;
+
+ if (strlen(name) > 2) {
+ s = name + strlen(name) - 2;
+ if (*s == '.') {
+ ++s;
+ if (*s == 'l' || *s == 'y')
+ BEGIN LEXYACC;
+#if defined(MSDOS) || defined(OS2)
+ if (*s == 'L' || *s == 'Y')
+ BEGIN LEXYACC;
+#endif
+ }
+ }
+
+ included_files = new_symbol_table();
+ typedef_names = new_symbol_table();
+ define_names = new_symbol_table();
+ inc_depth = -1;
+ curly = 0;
+ ly_count = 0;
+ func_params = NULL;
+ yyin = infile;
+ include_file(strcpy(base_file, name), func_style != FUNC_NONE);
+ if (file_comments) {
+#if OPT_LINTLIBRARY
+ if (lintLibrary()) {
+ put_blankline(stdout);
+ begin_tracking();
+ }
+#endif
+ put_string(stdout, "/* ");
+ put_string(stdout, cur_file_name());
+ put_string(stdout, " */\n");
+ }
+ yyparse();
+ free_symbol_table(define_names);
+ free_symbol_table(typedef_names);
+ free_symbol_table(included_files);
+}
+
+#ifdef NO_LEAKS
+void
+free_parser(void)
+{
+ free_symbol_table (type_qualifiers);
+#ifdef FLEX_SCANNER
+ if (yy_current_buffer != 0)
+ yy_delete_buffer(yy_current_buffer);
+#endif
+}
+#endif
+#line 1085 "grammar.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 10:
+#line 377 "grammar.y"
+ {
+ yyerrok;
+ }
+break;
+case 11:
+#line 381 "grammar.y"
+ {
+ yyerrok;
+ }
+break;
+case 13:
+#line 392 "grammar.y"
+ {
+ /* Provide an empty action here so bison will not complain about
+ * incompatible types in the default action it normally would
+ * have generated.
+ */
+ }
+break;
+case 14:
+#line 399 "grammar.y"
+ {
+ /* empty */
+ }
+break;
+case 15:
+#line 406 "grammar.y"
+ {
+#if OPT_LINTLIBRARY
+ if (types_out && want_typedef()) {
+ gen_declarations(&yystack.l_mark[-1].decl_spec, (DeclaratorList *)0);
+ flush_varargs();
+ }
+#endif
+ free_decl_spec(&yystack.l_mark[-1].decl_spec);
+ end_typedef();
+ }
+break;
+case 16:
+#line 417 "grammar.y"
+ {
+ if (func_params != NULL) {
+ set_param_types(func_params, &yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
+ } else {
+ gen_declarations(&yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_list(&yystack.l_mark[-1].decl_list);
+ }
+ free_decl_spec(&yystack.l_mark[-2].decl_spec);
+ end_typedef();
+ }
+break;
+case 17:
+#line 431 "grammar.y"
+ {
+ cur_decl_spec_flags = yystack.l_mark[0].decl_spec.flags;
+ free_decl_spec(&yystack.l_mark[0].decl_spec);
+ }
+break;
+case 18:
+#line 436 "grammar.y"
+ {
+ end_typedef();
+ }
+break;
+case 19:
+#line 443 "grammar.y"
+ {
+ begin_typedef();
+ }
+break;
+case 20:
+#line 447 "grammar.y"
+ {
+ begin_typedef();
+ }
+break;
+case 23:
+#line 459 "grammar.y"
+ {
+ int flags = cur_decl_spec_flags;
+
+ /* If the typedef is a pointer type, then reset the short type
+ * flags so it does not get promoted.
+ */
+ if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
+ flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
+ new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
+ free_declarator(yystack.l_mark[0].declarator);
+ }
+break;
+case 24:
+#line 471 "grammar.y"
+ {
+ int flags = cur_decl_spec_flags;
+
+ if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
+ flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
+ new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
+ free_declarator(yystack.l_mark[0].declarator);
+ }
+break;
+case 25:
+#line 483 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[-1].decl_spec);
+ if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
+ yyerror("syntax error");
+ YYERROR;
+ }
+ func_params = &(yystack.l_mark[0].declarator->head->params);
+ func_params->begin_comment = cur_file->begin_comment;
+ func_params->end_comment = cur_file->end_comment;
+ }
+break;
+case 26:
+#line 494 "grammar.y"
+ {
+ /* If we're converting to K&R and we've got a nominally K&R
+ * function which has a parameter which is ANSI (i.e., a prototyped
+ * function pointer), then we must override the deciphered value of
+ * 'func_def' so that the parameter will be converted.
+ */
+ if (func_style == FUNC_TRADITIONAL
+ && haveAnsiParam()
+ && yystack.l_mark[-3].declarator->head->func_def == func_style) {
+ yystack.l_mark[-3].declarator->head->func_def = FUNC_BOTH;
+ }
+
+ func_params = NULL;
+
+ if (cur_file->convert)
+ gen_func_definition(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
+ gen_prototype(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_spec(&yystack.l_mark[-4].decl_spec);
+ free_declarator(yystack.l_mark[-3].declarator);
+ }
+break;
+case 28:
+#line 519 "grammar.y"
+ {
+ if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
+ yyerror("syntax error");
+ YYERROR;
+ }
+ func_params = &(yystack.l_mark[0].declarator->head->params);
+ func_params->begin_comment = cur_file->begin_comment;
+ func_params->end_comment = cur_file->end_comment;
+ }
+break;
+case 29:
+#line 529 "grammar.y"
+ {
+ DeclSpec decl_spec;
+
+ func_params = NULL;
+
+ new_decl_spec(&decl_spec, dft_decl_spec(), yystack.l_mark[-4].declarator->begin, DS_NONE);
+ if (cur_file->convert)
+ gen_func_definition(&decl_spec, yystack.l_mark[-4].declarator);
+ gen_prototype(&decl_spec, yystack.l_mark[-4].declarator);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_spec(&decl_spec);
+ free_declarator(yystack.l_mark[-4].declarator);
+ }
+break;
+case 36:
+#line 560 "grammar.y"
+ {
+ join_decl_specs(&yyval.decl_spec, &yystack.l_mark[-1].decl_spec, &yystack.l_mark[0].decl_spec);
+ free(yystack.l_mark[-1].decl_spec.text);
+ free(yystack.l_mark[0].decl_spec.text);
+ }
+break;
+case 40:
+#line 575 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 41:
+#line 579 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_EXTERN);
+ }
+break;
+case 42:
+#line 583 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 43:
+#line 587 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_STATIC);
+ }
+break;
+case 44:
+#line 591 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_INLINE);
+ }
+break;
+case 45:
+#line 595 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_JUNK);
+ }
+break;
+case 46:
+#line 602 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
+ }
+break;
+case 47:
+#line 606 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 48:
+#line 610 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_FLOAT);
+ }
+break;
+case 49:
+#line 614 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 50:
+#line 618 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 51:
+#line 622 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_SHORT);
+ }
+break;
+case 52:
+#line 626 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 53:
+#line 630 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 54:
+#line 634 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 55:
+#line 638 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
+ }
+break;
+case 56:
+#line 642 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 57:
+#line 646 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 58:
+#line 650 "grammar.y"
+ {
+ Symbol *s;
+ s = find_symbol(typedef_names, yystack.l_mark[0].text.text);
+ if (s != NULL)
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
+ }
+break;
+case 61:
+#line 662 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 62:
+#line 666 "grammar.y"
+ {
+ /* This rule allows the <pointer> nonterminal to scan #define
+ * names as if they were type modifiers.
+ */
+ Symbol *s;
+ s = find_symbol(define_names, yystack.l_mark[0].text.text);
+ if (s != NULL)
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
+ }
+break;
+case 63:
+#line 679 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s %s", yystack.l_mark[-2].text.text, yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
+ }
+break;
+case 64:
+#line 686 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 65:
+#line 693 "grammar.y"
+ {
+ (void)sprintf(buf, "%s %s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text);
+ new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 66:
+#line 701 "grammar.y"
+ {
+ imply_typedef(yyval.text.text);
+ }
+break;
+case 67:
+#line 705 "grammar.y"
+ {
+ imply_typedef(yyval.text.text);
+ }
+break;
+case 68:
+#line 712 "grammar.y"
+ {
+ new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator);
+ }
+break;
+case 69:
+#line 716 "grammar.y"
+ {
+ add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator);
+ }
+break;
+case 70:
+#line 723 "grammar.y"
+ {
+ if (yystack.l_mark[0].declarator->func_def != FUNC_NONE && func_params == NULL &&
+ func_style == FUNC_TRADITIONAL && cur_file->convert) {
+ gen_func_declarator(yystack.l_mark[0].declarator);
+ fputs(cur_text(), cur_file->tmp_file);
+ }
+ cur_declarator = yyval.declarator;
+ }
+break;
+case 71:
+#line 732 "grammar.y"
+ {
+ if (yystack.l_mark[-1].declarator->func_def != FUNC_NONE && func_params == NULL &&
+ func_style == FUNC_TRADITIONAL && cur_file->convert) {
+ gen_func_declarator(yystack.l_mark[-1].declarator);
+ fputs(" =", cur_file->tmp_file);
+ }
+ }
+break;
+case 73:
+#line 744 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "enum %s", yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
+ }
+break;
+case 74:
+#line 751 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 75:
+#line 758 "grammar.y"
+ {
+ (void)sprintf(buf, "enum %s", yystack.l_mark[0].text.text);
+ new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 76:
+#line 766 "grammar.y"
+ {
+ imply_typedef("enum");
+ yyval.text = yystack.l_mark[0].text;
+ }
+break;
+case 79:
+#line 779 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[0].declarator;
+ (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-1].text.begin;
+ yyval.declarator->pointer = TRUE;
+ }
+break;
+case 81:
+#line 792 "grammar.y"
+ {
+ yyval.declarator = new_declarator(yystack.l_mark[0].text.text, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin);
+ }
+break;
+case 82:
+#line 796 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "(%s)", yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-2].text.begin;
+ }
+break;
+case 83:
+#line 804 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ }
+break;
+case 84:
+#line 811 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
+ yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 85:
+#line 819 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
+ yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
+ yyval.declarator->func_def = FUNC_TRADITIONAL;
+ }
+break;
+case 86:
+#line 830 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "*%s", yystack.l_mark[0].text.text);
+ yyval.text.begin = yystack.l_mark[-1].text.begin;
+ }
+break;
+case 87:
+#line 835 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "*%s%s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text);
+ yyval.text.begin = yystack.l_mark[-2].text.begin;
+ }
+break;
+case 88:
+#line 843 "grammar.y"
+ {
+ strcpy(yyval.text.text, "");
+ yyval.text.begin = 0L;
+ }
+break;
+case 90:
+#line 852 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "%s ", yystack.l_mark[0].decl_spec.text);
+ yyval.text.begin = yystack.l_mark[0].decl_spec.begin;
+ free(yystack.l_mark[0].decl_spec.text);
+ }
+break;
+case 91:
+#line 858 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "%s%s ", yystack.l_mark[-1].text.text, yystack.l_mark[0].decl_spec.text);
+ yyval.text.begin = yystack.l_mark[-1].text.begin;
+ free(yystack.l_mark[0].decl_spec.text);
+ }
+break;
+case 93:
+#line 868 "grammar.y"
+ {
+ add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "...");
+ }
+break;
+case 94:
+#line 875 "grammar.y"
+ {
+ new_param_list(&yyval.param_list, yystack.l_mark[0].parameter);
+ }
+break;
+case 95:
+#line 879 "grammar.y"
+ {
+ add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter);
+ }
+break;
+case 96:
+#line 886 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[-1].decl_spec);
+ yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
+ }
+break;
+case 97:
+#line 891 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[-1].decl_spec);
+ yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
+ }
+break;
+case 98:
+#line 896 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[0].decl_spec);
+ yyval.parameter = new_parameter(&yystack.l_mark[0].decl_spec, (Declarator *)0);
+ }
+break;
+case 99:
+#line 904 "grammar.y"
+ {
+ new_ident_list(&yyval.param_list);
+ }
+break;
+case 101:
+#line 912 "grammar.y"
+ {
+ new_ident_list(&yyval.param_list);
+ add_ident_list(&yyval.param_list, &yyval.param_list, yystack.l_mark[0].text.text);
+ }
+break;
+case 102:
+#line 917 "grammar.y"
+ {
+ add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text);
+ }
+break;
+case 103:
+#line 924 "grammar.y"
+ {
+ yyval.text = yystack.l_mark[0].text;
+ }
+break;
+case 104:
+#line 928 "grammar.y"
+ {
+#if OPT_LINTLIBRARY
+ if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */
+ yyval.text = yystack.l_mark[0].text;
+ } else
+#endif
+ (void)sprintf(yyval.text.text, "&%s", yystack.l_mark[0].text.text);
+ yyval.text.begin = yystack.l_mark[-1].text.begin;
+ }
+break;
+case 105:
+#line 941 "grammar.y"
+ {
+ yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
+ }
+break;
+case 106:
+#line 945 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[0].declarator;
+ (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-1].text.begin;
+ }
+break;
+case 108:
+#line 957 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "(%s)", yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-2].text.begin;
+ }
+break;
+case 109:
+#line 965 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ }
+break;
+case 110:
+#line 972 "grammar.y"
+ {
+ yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
+ }
+break;
+case 111:
+#line 976 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-3].declarator->begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
+ yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 112:
+#line 984 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].declarator->begin);
+ yyval.declarator->func_stack = yystack.l_mark[-2].declarator;
+ yyval.declarator->head = (yystack.l_mark[-2].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-2].declarator->head;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 113:
+#line 991 "grammar.y"
+ {
+ Declarator *d;
+
+ d = new_declarator("", "", yystack.l_mark[-2].text.begin);
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].text.begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = d;
+ yyval.declarator->head = yyval.declarator;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 114:
+#line 1002 "grammar.y"
+ {
+ Declarator *d;
+
+ d = new_declarator("", "", yystack.l_mark[-1].text.begin);
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-1].text.begin);
+ yyval.declarator->func_stack = d;
+ yyval.declarator->head = yyval.declarator;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+#line 1965 "grammar.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/grammar.tab.h b/contrib/byacc/test/grammar.tab.h
new file mode 100644
index 000000000000..531dd2e849b2
--- /dev/null
+++ b/contrib/byacc/test/grammar.tab.h
@@ -0,0 +1,35 @@
+#define T_IDENTIFIER 257
+#define T_TYPEDEF_NAME 258
+#define T_DEFINE_NAME 259
+#define T_AUTO 260
+#define T_EXTERN 261
+#define T_REGISTER 262
+#define T_STATIC 263
+#define T_TYPEDEF 264
+#define T_INLINE 265
+#define T_EXTENSION 266
+#define T_CHAR 267
+#define T_DOUBLE 268
+#define T_FLOAT 269
+#define T_INT 270
+#define T_VOID 271
+#define T_LONG 272
+#define T_SHORT 273
+#define T_SIGNED 274
+#define T_UNSIGNED 275
+#define T_ENUM 276
+#define T_STRUCT 277
+#define T_UNION 278
+#define T_Bool 279
+#define T_Complex 280
+#define T_Imaginary 281
+#define T_TYPE_QUALIFIER 282
+#define T_BRACKETS 283
+#define T_LBRACE 284
+#define T_MATCHRBRACE 285
+#define T_ELLIPSIS 286
+#define T_INITIALIZER 287
+#define T_STRING_LITERAL 288
+#define T_ASM 289
+#define T_ASMARG 290
+#define T_VA_DCL 291
diff --git a/contrib/byacc/test/grammar.y b/contrib/byacc/test/grammar.y
new file mode 100644
index 000000000000..675552268370
--- /dev/null
+++ b/contrib/byacc/test/grammar.y
@@ -0,0 +1,1183 @@
+/* $Id: grammar.y,v 1.5 2012/01/15 20:00:59 tom Exp $
+ *
+ * yacc grammar for C function prototype generator
+ * This was derived from the grammar in Appendix A of
+ * "The C Programming Language" by Kernighan and Ritchie.
+ */
+%expect 1
+%{
+#ifdef YYBISON
+#include <stdlib.h>
+#define YYSTYPE_IS_DECLARED
+#define yyerror yaccError
+#endif
+
+#if defined(YYBISON) || !defined(YYBYACC)
+static void yyerror(const char *s);
+#endif
+%}
+
+%token <text> '(' '*' '&'
+ /* identifiers that are not reserved words */
+ T_IDENTIFIER T_TYPEDEF_NAME T_DEFINE_NAME
+
+ /* storage class */
+ T_AUTO T_EXTERN T_REGISTER T_STATIC T_TYPEDEF
+ /* This keyword included for compatibility with C++. */
+ T_INLINE
+ /* This keyword included for compatibility with GCC */
+ T_EXTENSION
+
+ /* type specifiers */
+ T_CHAR T_DOUBLE T_FLOAT T_INT T_VOID
+ T_LONG T_SHORT T_SIGNED T_UNSIGNED
+ T_ENUM T_STRUCT T_UNION
+ /* C9X new types */
+ T_Bool T_Complex T_Imaginary
+
+ /* type qualifiers */
+ T_TYPE_QUALIFIER
+
+ /* paired square brackets and everything between them: [ ... ] */
+ T_BRACKETS
+
+%token
+ /* left brace */
+ T_LBRACE
+ /* all input to the matching right brace */
+ T_MATCHRBRACE
+
+ /* three periods */
+ T_ELLIPSIS
+
+ /* constant expression or paired braces following an equal sign */
+ T_INITIALIZER
+
+ /* string literal */
+ T_STRING_LITERAL
+
+ /* asm */
+ T_ASM
+ /* ( "string literal" ) following asm keyword */
+ T_ASMARG
+
+ /* va_dcl from <varargs.h> */
+ T_VA_DCL
+
+%type <decl_spec> decl_specifiers decl_specifier
+%type <decl_spec> storage_class type_specifier type_qualifier
+%type <decl_spec> struct_or_union_specifier enum_specifier
+%type <decl_list> init_declarator_list
+%type <declarator> init_declarator declarator direct_declarator
+%type <declarator> abs_declarator direct_abs_declarator
+%type <param_list> parameter_type_list parameter_list
+%type <parameter> parameter_declaration
+%type <param_list> opt_identifier_list identifier_list
+%type <text> struct_or_union pointer opt_type_qualifiers type_qualifier_list
+ any_id identifier_or_ref
+%type <text> enumeration
+
+%{
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+#define OPT_LINTLIBRARY 1
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+/* #include "cproto.h" */
+#define MAX_TEXT_SIZE 1024
+
+/* Prototype styles */
+#if OPT_LINTLIBRARY
+#define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */
+#define PROTO_LINTLIBRARY -1 /* form lint-library source */
+#endif
+#define PROTO_NONE 0 /* do not output any prototypes */
+#define PROTO_TRADITIONAL 1 /* comment out parameters */
+#define PROTO_ABSTRACT 2 /* comment out parameter names */
+#define PROTO_ANSI 3 /* ANSI C prototype */
+
+typedef int PrototypeStyle;
+
+typedef char boolean;
+
+extern boolean types_out;
+extern PrototypeStyle proto_style;
+
+#define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB)
+#define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY)
+#define lintLibrary() (knrLintLibrary() || ansiLintLibrary())
+
+#if OPT_LINTLIBRARY
+#define FUNC_UNKNOWN -1 /* unspecified */
+#else
+#define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */
+#endif
+#define FUNC_NONE 0 /* not a function definition */
+#define FUNC_TRADITIONAL 1 /* traditional style */
+#define FUNC_ANSI 2 /* ANSI style */
+#define FUNC_BOTH 3 /* both styles */
+
+typedef int FuncDefStyle;
+
+/* Source file text */
+typedef struct text {
+ char text[MAX_TEXT_SIZE]; /* source text */
+ long begin; /* offset in temporary file */
+} Text;
+
+/* Declaration specifier flags */
+#define DS_NONE 0 /* default */
+#define DS_EXTERN 1 /* contains "extern" specifier */
+#define DS_STATIC 2 /* contains "static" specifier */
+#define DS_CHAR 4 /* contains "char" type specifier */
+#define DS_SHORT 8 /* contains "short" type specifier */
+#define DS_FLOAT 16 /* contains "float" type specifier */
+#define DS_INLINE 32 /* contains "inline" specifier */
+#define DS_JUNK 64 /* we're not interested in this declaration */
+
+/* This structure stores information about a declaration specifier. */
+typedef struct decl_spec {
+ unsigned short flags; /* flags defined above */
+ char *text; /* source text */
+ long begin; /* offset in temporary file */
+} DeclSpec;
+
+/* This is a list of function parameters. */
+typedef struct _ParameterList {
+ struct parameter *first; /* pointer to first parameter in list */
+ struct parameter *last; /* pointer to last parameter in list */
+ long begin_comment; /* begin offset of comment */
+ long end_comment; /* end offset of comment */
+ char *comment; /* comment at start of parameter list */
+} ParameterList;
+
+/* This structure stores information about a declarator. */
+typedef struct _Declarator {
+ char *name; /* name of variable or function */
+ char *text; /* source text */
+ long begin; /* offset in temporary file */
+ long begin_comment; /* begin offset of comment */
+ long end_comment; /* end offset of comment */
+ FuncDefStyle func_def; /* style of function definition */
+ ParameterList params; /* function parameters */
+ boolean pointer; /* TRUE if it declares a pointer */
+ struct _Declarator *head; /* head function declarator */
+ struct _Declarator *func_stack; /* stack of function declarators */
+ struct _Declarator *next; /* next declarator in list */
+} Declarator;
+
+/* This structure stores information about a function parameter. */
+typedef struct parameter {
+ struct parameter *next; /* next parameter in list */
+ DeclSpec decl_spec;
+ Declarator *declarator;
+ char *comment; /* comment following the parameter */
+} Parameter;
+
+/* This is a list of declarators. */
+typedef struct declarator_list {
+ Declarator *first; /* pointer to first declarator in list */
+ Declarator *last; /* pointer to last declarator in list */
+} DeclaratorList;
+
+/* #include "symbol.h" */
+typedef struct symbol {
+ struct symbol *next; /* next symbol in list */
+ char *name; /* name of symbol */
+ char *value; /* value of symbol (for defines) */
+ short flags; /* symbol attributes */
+} Symbol;
+
+/* parser stack entry type */
+typedef union {
+ Text text;
+ DeclSpec decl_spec;
+ Parameter *parameter;
+ ParameterList param_list;
+ Declarator *declarator;
+ DeclaratorList decl_list;
+} YYSTYPE;
+
+/* The hash table length should be a prime number. */
+#define SYM_MAX_HASH 251
+
+typedef struct symbol_table {
+ Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */
+} SymbolTable;
+
+extern SymbolTable *new_symbol_table /* Create symbol table */
+ (void);
+extern void free_symbol_table /* Destroy symbol table */
+ (SymbolTable *s);
+extern Symbol *find_symbol /* Lookup symbol name */
+ (SymbolTable *s, const char *n);
+extern Symbol *new_symbol /* Define new symbol */
+ (SymbolTable *s, const char *n, const char *v, int f);
+
+/* #include "semantic.h" */
+extern void new_decl_spec (DeclSpec *, const char *, long, int);
+extern void free_decl_spec (DeclSpec *);
+extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *);
+extern void check_untagged (DeclSpec *);
+extern Declarator *new_declarator (const char *, const char *, long);
+extern void free_declarator (Declarator *);
+extern void new_decl_list (DeclaratorList *, Declarator *);
+extern void free_decl_list (DeclaratorList *);
+extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *);
+extern Parameter *new_parameter (DeclSpec *, Declarator *);
+extern void free_parameter (Parameter *);
+extern void new_param_list (ParameterList *, Parameter *);
+extern void free_param_list (ParameterList *);
+extern void add_param_list (ParameterList *, ParameterList *, Parameter *);
+extern void new_ident_list (ParameterList *);
+extern void add_ident_list (ParameterList *, ParameterList *, const char *);
+extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *);
+extern void gen_declarations (DeclSpec *, DeclaratorList *);
+extern void gen_prototype (DeclSpec *, Declarator *);
+extern void gen_func_declarator (Declarator *);
+extern void gen_func_definition (DeclSpec *, Declarator *);
+
+extern void init_parser (void);
+extern void process_file (FILE *infile, char *name);
+extern char *cur_text (void);
+extern char *cur_file_name (void);
+extern char *implied_typedef (void);
+extern void include_file (char *name, int convert);
+extern char *supply_parm (int count);
+extern char *xstrdup (const char *);
+extern int already_declared (char *name);
+extern int is_actual_func (Declarator *d);
+extern int lint_ellipsis (Parameter *p);
+extern int want_typedef (void);
+extern void begin_tracking (void);
+extern void begin_typedef (void);
+extern void copy_typedef (char *s);
+extern void ellipsis_varargs (Declarator *d);
+extern void end_typedef (void);
+extern void flush_varargs (void);
+extern void fmt_library (int code);
+extern void imply_typedef (const char *s);
+extern void indent (FILE *outf);
+extern void put_blankline (FILE *outf);
+extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator);
+extern void put_char (FILE *outf, int c);
+extern void put_error (void);
+extern void put_newline (FILE *outf);
+extern void put_padded (FILE *outf, const char *s);
+extern void put_string (FILE *outf, const char *s);
+extern void track_in (void);
+
+extern boolean file_comments;
+extern FuncDefStyle func_style;
+extern char base_file[];
+
+extern int yylex (void);
+
+/* declaration specifier attributes for the typedef statement currently being
+ * scanned
+ */
+static int cur_decl_spec_flags;
+
+/* pointer to parameter list for the current function definition */
+static ParameterList *func_params;
+
+/* A parser semantic action sets this pointer to the current declarator in
+ * a function parameter declaration in order to catch any comments following
+ * the parameter declaration on the same line. If the lexer scans a comment
+ * and <cur_declarator> is not NULL, then the comment is attached to the
+ * declarator. To ignore subsequent comments, the lexer sets this to NULL
+ * after scanning a comment or end of line.
+ */
+static Declarator *cur_declarator;
+
+/* temporary string buffer */
+static char buf[MAX_TEXT_SIZE];
+
+/* table of typedef names */
+static SymbolTable *typedef_names;
+
+/* table of define names */
+static SymbolTable *define_names;
+
+/* table of type qualifiers */
+static SymbolTable *type_qualifiers;
+
+/* information about the current input file */
+typedef struct {
+ char *base_name; /* base input file name */
+ char *file_name; /* current file name */
+ FILE *file; /* input file */
+ unsigned line_num; /* current line number in input file */
+ FILE *tmp_file; /* temporary file */
+ long begin_comment; /* tmp file offset after last written ) or ; */
+ long end_comment; /* tmp file offset after last comment */
+ boolean convert; /* if TRUE, convert function definitions */
+ boolean changed; /* TRUE if conversion done in this file */
+} IncludeStack;
+
+static IncludeStack *cur_file; /* current input file */
+
+/* #include "yyerror.c" */
+
+static int haveAnsiParam (void);
+
+
+/* Flags to enable us to find if a procedure returns a value.
+ */
+static int return_val; /* nonzero on BRACES iff return-expression found */
+
+static const char *
+dft_decl_spec (void)
+{
+ return (lintLibrary() && !return_val) ? "void" : "int";
+}
+
+static int
+haveAnsiParam (void)
+{
+ Parameter *p;
+ if (func_params != 0) {
+ for (p = func_params->first; p != 0; p = p->next) {
+ if (p->declarator->func_def == FUNC_ANSI) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+%}
+%%
+
+program
+ : /* empty */
+ | translation_unit
+ ;
+
+translation_unit
+ : external_declaration
+ | translation_unit external_declaration
+ ;
+
+external_declaration
+ : declaration
+ | function_definition
+ | ';'
+ | linkage_specification
+ | T_ASM T_ASMARG ';'
+ | error T_MATCHRBRACE
+ {
+ yyerrok;
+ }
+ | error ';'
+ {
+ yyerrok;
+ }
+ ;
+
+braces
+ : T_LBRACE T_MATCHRBRACE
+ ;
+
+linkage_specification
+ : T_EXTERN T_STRING_LITERAL braces
+ {
+ /* Provide an empty action here so bison will not complain about
+ * incompatible types in the default action it normally would
+ * have generated.
+ */
+ }
+ | T_EXTERN T_STRING_LITERAL declaration
+ {
+ /* empty */
+ }
+ ;
+
+declaration
+ : decl_specifiers ';'
+ {
+#if OPT_LINTLIBRARY
+ if (types_out && want_typedef()) {
+ gen_declarations(&$1, (DeclaratorList *)0);
+ flush_varargs();
+ }
+#endif
+ free_decl_spec(&$1);
+ end_typedef();
+ }
+ | decl_specifiers init_declarator_list ';'
+ {
+ if (func_params != NULL) {
+ set_param_types(func_params, &$1, &$2);
+ } else {
+ gen_declarations(&$1, &$2);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_list(&$2);
+ }
+ free_decl_spec(&$1);
+ end_typedef();
+ }
+ | any_typedef decl_specifiers
+ {
+ cur_decl_spec_flags = $2.flags;
+ free_decl_spec(&$2);
+ }
+ opt_declarator_list ';'
+ {
+ end_typedef();
+ }
+ ;
+
+any_typedef
+ : T_EXTENSION T_TYPEDEF
+ {
+ begin_typedef();
+ }
+ | T_TYPEDEF
+ {
+ begin_typedef();
+ }
+ ;
+
+opt_declarator_list
+ : /* empty */
+ | declarator_list
+ ;
+
+declarator_list
+ : declarator
+ {
+ int flags = cur_decl_spec_flags;
+
+ /* If the typedef is a pointer type, then reset the short type
+ * flags so it does not get promoted.
+ */
+ if (strcmp($1->text, $1->name) != 0)
+ flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
+ new_symbol(typedef_names, $1->name, NULL, flags);
+ free_declarator($1);
+ }
+ | declarator_list ',' declarator
+ {
+ int flags = cur_decl_spec_flags;
+
+ if (strcmp($3->text, $3->name) != 0)
+ flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
+ new_symbol(typedef_names, $3->name, NULL, flags);
+ free_declarator($3);
+ }
+ ;
+
+function_definition
+ : decl_specifiers declarator
+ {
+ check_untagged(&$1);
+ if ($2->func_def == FUNC_NONE) {
+ yyerror("syntax error");
+ YYERROR;
+ }
+ func_params = &($2->head->params);
+ func_params->begin_comment = cur_file->begin_comment;
+ func_params->end_comment = cur_file->end_comment;
+ }
+ opt_declaration_list T_LBRACE
+ {
+ /* If we're converting to K&R and we've got a nominally K&R
+ * function which has a parameter which is ANSI (i.e., a prototyped
+ * function pointer), then we must override the deciphered value of
+ * 'func_def' so that the parameter will be converted.
+ */
+ if (func_style == FUNC_TRADITIONAL
+ && haveAnsiParam()
+ && $2->head->func_def == func_style) {
+ $2->head->func_def = FUNC_BOTH;
+ }
+
+ func_params = NULL;
+
+ if (cur_file->convert)
+ gen_func_definition(&$1, $2);
+ gen_prototype(&$1, $2);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_spec(&$1);
+ free_declarator($2);
+ }
+ T_MATCHRBRACE
+ | declarator
+ {
+ if ($1->func_def == FUNC_NONE) {
+ yyerror("syntax error");
+ YYERROR;
+ }
+ func_params = &($1->head->params);
+ func_params->begin_comment = cur_file->begin_comment;
+ func_params->end_comment = cur_file->end_comment;
+ }
+ opt_declaration_list T_LBRACE T_MATCHRBRACE
+ {
+ DeclSpec decl_spec;
+
+ func_params = NULL;
+
+ new_decl_spec(&decl_spec, dft_decl_spec(), $1->begin, DS_NONE);
+ if (cur_file->convert)
+ gen_func_definition(&decl_spec, $1);
+ gen_prototype(&decl_spec, $1);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_spec(&decl_spec);
+ free_declarator($1);
+ }
+ ;
+
+opt_declaration_list
+ : /* empty */
+ | T_VA_DCL
+ | declaration_list
+ ;
+
+declaration_list
+ : declaration
+ | declaration_list declaration
+ ;
+
+decl_specifiers
+ : decl_specifier
+ | decl_specifiers decl_specifier
+ {
+ join_decl_specs(&$$, &$1, &$2);
+ free($1.text);
+ free($2.text);
+ }
+ ;
+
+decl_specifier
+ : storage_class
+ | type_specifier
+ | type_qualifier
+ ;
+
+storage_class
+ : T_AUTO
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_EXTERN
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_EXTERN);
+ }
+ | T_REGISTER
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_STATIC
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_STATIC);
+ }
+ | T_INLINE
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_INLINE);
+ }
+ | T_EXTENSION
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_JUNK);
+ }
+ ;
+
+type_specifier
+ : T_CHAR
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_CHAR);
+ }
+ | T_DOUBLE
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_FLOAT
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_FLOAT);
+ }
+ | T_INT
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_LONG
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_SHORT
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_SHORT);
+ }
+ | T_SIGNED
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_UNSIGNED
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_VOID
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_Bool
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_CHAR);
+ }
+ | T_Complex
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_Imaginary
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_TYPEDEF_NAME
+ {
+ Symbol *s;
+ s = find_symbol(typedef_names, $1.text);
+ if (s != NULL)
+ new_decl_spec(&$$, $1.text, $1.begin, s->flags);
+ }
+ | struct_or_union_specifier
+ | enum_specifier
+ ;
+
+type_qualifier
+ : T_TYPE_QUALIFIER
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_DEFINE_NAME
+ {
+ /* This rule allows the <pointer> nonterminal to scan #define
+ * names as if they were type modifiers.
+ */
+ Symbol *s;
+ s = find_symbol(define_names, $1.text);
+ if (s != NULL)
+ new_decl_spec(&$$, $1.text, $1.begin, s->flags);
+ }
+ ;
+
+struct_or_union_specifier
+ : struct_or_union any_id braces
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s %s", $1.text, $2.text);
+ new_decl_spec(&$$, s, $1.begin, DS_NONE);
+ }
+ | struct_or_union braces
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s {}", $1.text);
+ new_decl_spec(&$$, s, $1.begin, DS_NONE);
+ }
+ | struct_or_union any_id
+ {
+ (void)sprintf(buf, "%s %s", $1.text, $2.text);
+ new_decl_spec(&$$, buf, $1.begin, DS_NONE);
+ }
+ ;
+
+struct_or_union
+ : T_STRUCT
+ {
+ imply_typedef($$.text);
+ }
+ | T_UNION
+ {
+ imply_typedef($$.text);
+ }
+ ;
+
+init_declarator_list
+ : init_declarator
+ {
+ new_decl_list(&$$, $1);
+ }
+ | init_declarator_list ',' init_declarator
+ {
+ add_decl_list(&$$, &$1, $3);
+ }
+ ;
+
+init_declarator
+ : declarator
+ {
+ if ($1->func_def != FUNC_NONE && func_params == NULL &&
+ func_style == FUNC_TRADITIONAL && cur_file->convert) {
+ gen_func_declarator($1);
+ fputs(cur_text(), cur_file->tmp_file);
+ }
+ cur_declarator = $$;
+ }
+ | declarator '='
+ {
+ if ($1->func_def != FUNC_NONE && func_params == NULL &&
+ func_style == FUNC_TRADITIONAL && cur_file->convert) {
+ gen_func_declarator($1);
+ fputs(" =", cur_file->tmp_file);
+ }
+ }
+ T_INITIALIZER
+ ;
+
+enum_specifier
+ : enumeration any_id braces
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "enum %s", $2.text);
+ new_decl_spec(&$$, s, $1.begin, DS_NONE);
+ }
+ | enumeration braces
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s {}", $1.text);
+ new_decl_spec(&$$, s, $1.begin, DS_NONE);
+ }
+ | enumeration any_id
+ {
+ (void)sprintf(buf, "enum %s", $2.text);
+ new_decl_spec(&$$, buf, $1.begin, DS_NONE);
+ }
+ ;
+
+enumeration
+ : T_ENUM
+ {
+ imply_typedef("enum");
+ $$ = $1;
+ }
+ ;
+
+any_id
+ : T_IDENTIFIER
+ | T_TYPEDEF_NAME
+ ;
+
+declarator
+ : pointer direct_declarator
+ {
+ $$ = $2;
+ (void)sprintf(buf, "%s%s", $1.text, $$->text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ $$->begin = $1.begin;
+ $$->pointer = TRUE;
+ }
+ | direct_declarator
+ ;
+
+direct_declarator
+ : identifier_or_ref
+ {
+ $$ = new_declarator($1.text, $1.text, $1.begin);
+ }
+ | '(' declarator ')'
+ {
+ $$ = $2;
+ (void)sprintf(buf, "(%s)", $$->text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ $$->begin = $1.begin;
+ }
+ | direct_declarator T_BRACKETS
+ {
+ $$ = $1;
+ (void)sprintf(buf, "%s%s", $$->text, $2.text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ }
+ | direct_declarator '(' parameter_type_list ')'
+ {
+ $$ = new_declarator("%s()", $1->name, $1->begin);
+ $$->params = $3;
+ $$->func_stack = $1;
+ $$->head = ($1->func_stack == NULL) ? $$ : $1->head;
+ $$->func_def = FUNC_ANSI;
+ }
+ | direct_declarator '(' opt_identifier_list ')'
+ {
+ $$ = new_declarator("%s()", $1->name, $1->begin);
+ $$->params = $3;
+ $$->func_stack = $1;
+ $$->head = ($1->func_stack == NULL) ? $$ : $1->head;
+ $$->func_def = FUNC_TRADITIONAL;
+ }
+ ;
+
+pointer
+ : '*' opt_type_qualifiers
+ {
+ (void)sprintf($$.text, "*%s", $2.text);
+ $$.begin = $1.begin;
+ }
+ | '*' opt_type_qualifiers pointer
+ {
+ (void)sprintf($$.text, "*%s%s", $2.text, $3.text);
+ $$.begin = $1.begin;
+ }
+ ;
+
+opt_type_qualifiers
+ : /* empty */
+ {
+ strcpy($$.text, "");
+ $$.begin = 0L;
+ }
+ | type_qualifier_list
+ ;
+
+type_qualifier_list
+ : type_qualifier
+ {
+ (void)sprintf($$.text, "%s ", $1.text);
+ $$.begin = $1.begin;
+ free($1.text);
+ }
+ | type_qualifier_list type_qualifier
+ {
+ (void)sprintf($$.text, "%s%s ", $1.text, $2.text);
+ $$.begin = $1.begin;
+ free($2.text);
+ }
+ ;
+
+parameter_type_list
+ : parameter_list
+ | parameter_list ',' T_ELLIPSIS
+ {
+ add_ident_list(&$$, &$1, "...");
+ }
+ ;
+
+parameter_list
+ : parameter_declaration
+ {
+ new_param_list(&$$, $1);
+ }
+ | parameter_list ',' parameter_declaration
+ {
+ add_param_list(&$$, &$1, $3);
+ }
+ ;
+
+parameter_declaration
+ : decl_specifiers declarator
+ {
+ check_untagged(&$1);
+ $$ = new_parameter(&$1, $2);
+ }
+ | decl_specifiers abs_declarator
+ {
+ check_untagged(&$1);
+ $$ = new_parameter(&$1, $2);
+ }
+ | decl_specifiers
+ {
+ check_untagged(&$1);
+ $$ = new_parameter(&$1, (Declarator *)0);
+ }
+ ;
+
+opt_identifier_list
+ : /* empty */
+ {
+ new_ident_list(&$$);
+ }
+ | identifier_list
+ ;
+
+identifier_list
+ : any_id
+ {
+ new_ident_list(&$$);
+ add_ident_list(&$$, &$$, $1.text);
+ }
+ | identifier_list ',' any_id
+ {
+ add_ident_list(&$$, &$1, $3.text);
+ }
+ ;
+
+identifier_or_ref
+ : any_id
+ {
+ $$ = $1;
+ }
+ | '&' any_id
+ {
+#if OPT_LINTLIBRARY
+ if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */
+ $$ = $2;
+ } else
+#endif
+ (void)sprintf($$.text, "&%s", $2.text);
+ $$.begin = $1.begin;
+ }
+ ;
+
+abs_declarator
+ : pointer
+ {
+ $$ = new_declarator($1.text, "", $1.begin);
+ }
+ | pointer direct_abs_declarator
+ {
+ $$ = $2;
+ (void)sprintf(buf, "%s%s", $1.text, $$->text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ $$->begin = $1.begin;
+ }
+ | direct_abs_declarator
+ ;
+
+direct_abs_declarator
+ : '(' abs_declarator ')'
+ {
+ $$ = $2;
+ (void)sprintf(buf, "(%s)", $$->text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ $$->begin = $1.begin;
+ }
+ | direct_abs_declarator T_BRACKETS
+ {
+ $$ = $1;
+ (void)sprintf(buf, "%s%s", $$->text, $2.text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ }
+ | T_BRACKETS
+ {
+ $$ = new_declarator($1.text, "", $1.begin);
+ }
+ | direct_abs_declarator '(' parameter_type_list ')'
+ {
+ $$ = new_declarator("%s()", "", $1->begin);
+ $$->params = $3;
+ $$->func_stack = $1;
+ $$->head = ($1->func_stack == NULL) ? $$ : $1->head;
+ $$->func_def = FUNC_ANSI;
+ }
+ | direct_abs_declarator '(' ')'
+ {
+ $$ = new_declarator("%s()", "", $1->begin);
+ $$->func_stack = $1;
+ $$->head = ($1->func_stack == NULL) ? $$ : $1->head;
+ $$->func_def = FUNC_ANSI;
+ }
+ | '(' parameter_type_list ')'
+ {
+ Declarator *d;
+
+ d = new_declarator("", "", $1.begin);
+ $$ = new_declarator("%s()", "", $1.begin);
+ $$->params = $2;
+ $$->func_stack = d;
+ $$->head = $$;
+ $$->func_def = FUNC_ANSI;
+ }
+ | '(' ')'
+ {
+ Declarator *d;
+
+ d = new_declarator("", "", $1.begin);
+ $$ = new_declarator("%s()", "", $1.begin);
+ $$->func_stack = d;
+ $$->head = $$;
+ $$->func_def = FUNC_ANSI;
+ }
+ ;
+
+%%
+
+/* lex.yy.c */
+#define BEGIN yy_start = 1 + 2 *
+
+#define CPP1 1
+#define INIT1 2
+#define INIT2 3
+#define CURLY 4
+#define LEXYACC 5
+#define ASM 6
+#define CPP_INLINE 7
+
+extern char *yytext;
+extern FILE *yyin, *yyout;
+
+static int curly; /* number of curly brace nesting levels */
+static int ly_count; /* number of occurances of %% */
+static int inc_depth; /* include nesting level */
+static SymbolTable *included_files; /* files already included */
+static int yy_start = 0; /* start state number */
+
+#define grammar_error(s) yaccError(s)
+
+static void
+yaccError (const char *msg)
+{
+ func_params = NULL;
+ put_error(); /* tell what line we're on, and what file */
+ fprintf(stderr, "%s at token '%s'\n", msg, yytext);
+}
+
+/* Initialize the table of type qualifier keywords recognized by the lexical
+ * analyzer.
+ */
+void
+init_parser (void)
+{
+ static const char *keywords[] = {
+ "const",
+ "restrict",
+ "volatile",
+ "interrupt",
+#ifdef vms
+ "noshare",
+ "readonly",
+#endif
+#if defined(MSDOS) || defined(OS2)
+ "__cdecl",
+ "__export",
+ "__far",
+ "__fastcall",
+ "__fortran",
+ "__huge",
+ "__inline",
+ "__interrupt",
+ "__loadds",
+ "__near",
+ "__pascal",
+ "__saveregs",
+ "__segment",
+ "__stdcall",
+ "__syscall",
+ "_cdecl",
+ "_cs",
+ "_ds",
+ "_es",
+ "_export",
+ "_far",
+ "_fastcall",
+ "_fortran",
+ "_huge",
+ "_interrupt",
+ "_loadds",
+ "_near",
+ "_pascal",
+ "_saveregs",
+ "_seg",
+ "_segment",
+ "_ss",
+ "cdecl",
+ "far",
+ "huge",
+ "near",
+ "pascal",
+#ifdef OS2
+ "__far16",
+#endif
+#endif
+#ifdef __GNUC__
+ /* gcc aliases */
+ "__builtin_va_arg",
+ "__builtin_va_list",
+ "__const",
+ "__const__",
+ "__inline",
+ "__inline__",
+ "__restrict",
+ "__restrict__",
+ "__volatile",
+ "__volatile__",
+#endif
+ };
+ unsigned i;
+
+ /* Initialize type qualifier table. */
+ type_qualifiers = new_symbol_table();
+ for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) {
+ new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE);
+ }
+}
+
+/* Process the C source file. Write function prototypes to the standard
+ * output. Convert function definitions and write the converted source
+ * code to a temporary file.
+ */
+void
+process_file (FILE *infile, char *name)
+{
+ char *s;
+
+ if (strlen(name) > 2) {
+ s = name + strlen(name) - 2;
+ if (*s == '.') {
+ ++s;
+ if (*s == 'l' || *s == 'y')
+ BEGIN LEXYACC;
+#if defined(MSDOS) || defined(OS2)
+ if (*s == 'L' || *s == 'Y')
+ BEGIN LEXYACC;
+#endif
+ }
+ }
+
+ included_files = new_symbol_table();
+ typedef_names = new_symbol_table();
+ define_names = new_symbol_table();
+ inc_depth = -1;
+ curly = 0;
+ ly_count = 0;
+ func_params = NULL;
+ yyin = infile;
+ include_file(strcpy(base_file, name), func_style != FUNC_NONE);
+ if (file_comments) {
+#if OPT_LINTLIBRARY
+ if (lintLibrary()) {
+ put_blankline(stdout);
+ begin_tracking();
+ }
+#endif
+ put_string(stdout, "/* ");
+ put_string(stdout, cur_file_name());
+ put_string(stdout, " */\n");
+ }
+ yyparse();
+ free_symbol_table(define_names);
+ free_symbol_table(typedef_names);
+ free_symbol_table(included_files);
+}
+
+#ifdef NO_LEAKS
+void
+free_parser(void)
+{
+ free_symbol_table (type_qualifiers);
+#ifdef FLEX_SCANNER
+ if (yy_current_buffer != 0)
+ yy_delete_buffer(yy_current_buffer);
+#endif
+}
+#endif
diff --git a/contrib/byacc/test/pure_calc.output b/contrib/byacc/test/pure_calc.output
new file mode 100644
index 000000000000..3aed47511c93
--- /dev/null
+++ b/contrib/byacc/test/pure_calc.output
@@ -0,0 +1,461 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr '+' expr
+ 8 | expr '-' expr
+ 9 | expr '*' expr
+ 10 | expr '/' expr
+ 11 | expr '%' expr
+ 12 | expr '&' expr
+ 13 | expr '|' expr
+ 14 | '-' expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ DIGIT shift 3
+ LETTER shift 4
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 4
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 11
+ '|' reduce 15
+ '&' reduce 15
+ '+' reduce 15
+ '-' reduce 15
+ '*' reduce 15
+ '/' reduce 15
+ '%' reduce 15
+ '\n' reduce 15
+
+
+state 5
+ expr : '-' . expr (14)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 13
+ number goto 9
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ '|' reduce 16
+ '&' reduce 16
+ '+' reduce 16
+ '-' reduce 16
+ '*' reduce 16
+ '/' reduce 16
+ '%' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ stat : LETTER '=' . expr (5)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 12
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+state 13
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : '-' expr . (14)
+
+ . reduce 14
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr '|' . expr (13)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr '&' . expr (12)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr '+' . expr (7)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr '-' . expr (8)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr '*' . expr (9)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr '/' . expr (10)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '%' . expr (11)
+
+ DIGIT shift 3
+ LETTER shift 12
+ '-' shift 5
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '|' shift 16
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+state 26
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ '&' shift 17
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+state 27
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr '&' expr . (12)
+ expr : expr . '|' expr (13)
+
+ '+' shift 18
+ '-' shift 19
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 12
+ '&' reduce 12
+ '\n' reduce 12
+ ')' reduce 12
+
+
+state 28
+ expr : expr . '+' expr (7)
+ expr : expr '+' expr . (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 7
+ '&' reduce 7
+ '+' reduce 7
+ '-' reduce 7
+ '\n' reduce 7
+ ')' reduce 7
+
+
+state 29
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr '-' expr . (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ '*' shift 20
+ '/' shift 21
+ '%' shift 22
+ '|' reduce 8
+ '&' reduce 8
+ '+' reduce 8
+ '-' reduce 8
+ '\n' reduce 8
+ ')' reduce 8
+
+
+state 30
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr '*' expr . (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 9
+
+
+state 31
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr '/' expr . (10)
+ expr : expr . '%' expr (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 10
+
+
+state 32
+ expr : expr . '+' expr (7)
+ expr : expr . '-' expr (8)
+ expr : expr . '*' expr (9)
+ expr : expr . '/' expr (10)
+ expr : expr . '%' expr (11)
+ expr : expr '%' expr . (11)
+ expr : expr . '&' expr (12)
+ expr : expr . '|' expr (13)
+
+ . reduce 11
+
+
+16 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/pure_calc.tab.c b/contrib/byacc/test/pure_calc.tab.c
new file mode 100644
index 000000000000..eb8c189b5086
--- /dev/null
+++ b/contrib/byacc/test/pure_calc.tab.c
@@ -0,0 +1,687 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule calc_rule
+#endif /* yyrule */
+#define YYPREFIX "calc_"
+
+#define YYPURE 1
+
+#line 2 "pure_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM &yylval
+#define YYLEX_DECL() yylex(YYSTYPE *yylval)
+#define YYERROR_DECL() yyerror(const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 115 "pure_calc.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# ifdef YYLEX_PARAM_TYPE
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
+# else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
+# endif
+# define YYLEX yylex(&yylval, YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval)
+# define YYLEX yylex(&yylval)
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+static const short calc_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short calc_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short calc_defred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const short calc_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short calc_sindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const short calc_rindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const short calc_gindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const short calc_table[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 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, 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, 2, 3, 4, 3, 12,
+};
+static const short calc_check[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+#line 72 "pure_calc.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+static int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ *yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ *yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 354 "pure_calc.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yyerrflag;
+ int yychar;
+ YYSTYPE yyval;
+ YYSTYPE yylval;
+
+ /* variables for the parser stack */
+ YYSTACKDATA yystack;
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 34 "pure_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 38 "pure_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 40 "pure_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 44 "pure_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 46 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 48 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 50 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 52 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 54 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 56 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 58 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 60 "pure_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 62 "pure_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 67 "pure_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 69 "pure_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 627 "pure_calc.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/pure_calc.tab.h b/contrib/byacc/test/pure_calc.tab.h
new file mode 100644
index 000000000000..19211182d6b3
--- /dev/null
+++ b/contrib/byacc/test/pure_calc.tab.h
@@ -0,0 +1,3 @@
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
diff --git a/contrib/byacc/test/pure_calc.y b/contrib/byacc/test/pure_calc.y
new file mode 100644
index 000000000000..3cd04332dcdd
--- /dev/null
+++ b/contrib/byacc/test/pure_calc.y
@@ -0,0 +1,116 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM &yylval
+#define YYLEX_DECL() yylex(YYSTYPE *yylval)
+#define YYERROR_DECL() yyerror(const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+%}
+
+%start list
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr '+' expr
+ { $$ = $1 + $3; }
+ | expr '-' expr
+ { $$ = $1 - $3; }
+ | expr '*' expr
+ { $$ = $1 * $3; }
+ | expr '/' expr
+ { $$ = $1 / $3; }
+ | expr '%' expr
+ { $$ = $1 % $3; }
+ | expr '&' expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | '-' expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+#ifdef YYBYACC
+static int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ *yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ *yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/contrib/byacc/test/pure_error.output b/contrib/byacc/test/pure_error.output
new file mode 100644
index 000000000000..0c4db6225e24
--- /dev/null
+++ b/contrib/byacc/test/pure_error.output
@@ -0,0 +1,27 @@
+ 0 $accept : S $end
+
+ 1 S : error
+
+state 0
+ $accept : . S $end (0)
+
+ error shift 1
+ . error
+
+ S goto 2
+
+
+state 1
+ S : error . (1)
+
+ . reduce 1
+
+
+state 2
+ $accept : S . $end (0)
+
+ $end accept
+
+
+2 terminals, 2 nonterminals
+2 grammar rules, 3 states
diff --git a/contrib/byacc/test/pure_error.tab.c b/contrib/byacc/test/pure_error.tab.c
new file mode 100644
index 000000000000..98de3d8299b7
--- /dev/null
+++ b/contrib/byacc/test/pure_error.tab.c
@@ -0,0 +1,517 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse error_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex error_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror error_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar error_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval error_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval error_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug error_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs error_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag error_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs error_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen error_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred error_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto error_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex error_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex error_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex error_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable error_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck error_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname error_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule error_rule
+#endif /* yyrule */
+#define YYPREFIX "error_"
+
+#define YYPURE 1
+
+#line 2 "pure_error.y"
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM &yylval
+#define YYLEX_DECL() yylex(YYSTYPE *yylval)
+#define YYERROR_DECL() yyerror(const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 110 "pure_error.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# ifdef YYLEX_PARAM_TYPE
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
+# else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
+# endif
+# define YYLEX yylex(&yylval, YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval)
+# define YYLEX yylex(&yylval)
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+static const short error_lhs[] = { -1,
+ 0,
+};
+static const short error_len[] = { 2,
+ 1,
+};
+static const short error_defred[] = { 0,
+ 1, 0,
+};
+static const short error_dgoto[] = { 2,
+};
+static const short error_sindex[] = { -256,
+ 0, 0,
+};
+static const short error_rindex[] = { 0,
+ 0, 0,
+};
+static const short error_gindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const short error_table[] = { 1,
+};
+static const short error_check[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 0
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",
+};
+static const char *yyrule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+#line 17 "pure_error.y"
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(YYSTYPE *value)
+{
+ return value ? 0 : -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 245 "pure_error.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yyerrflag;
+ int yychar;
+ YYSTYPE yyval;
+ YYSTYPE yylval;
+
+ /* variables for the parser stack */
+ YYSTACKDATA yystack;
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/pure_error.tab.h b/contrib/byacc/test/pure_error.tab.h
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/contrib/byacc/test/pure_error.tab.h
diff --git a/contrib/byacc/test/pure_error.y b/contrib/byacc/test/pure_error.y
new file mode 100644
index 000000000000..fe7a3c3094f2
--- /dev/null
+++ b/contrib/byacc/test/pure_error.y
@@ -0,0 +1,41 @@
+%{
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM &yylval
+#define YYLEX_DECL() yylex(YYSTYPE *yylval)
+#define YYERROR_DECL() yyerror(const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+%}
+
+%%
+S: error
+%%
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(YYSTYPE *value)
+{
+ return value ? 0 : -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
diff --git a/contrib/byacc/test/quote_calc-s.output b/contrib/byacc/test/quote_calc-s.output
new file mode 100644
index 000000000000..0306652bfaa1
--- /dev/null
+++ b/contrib/byacc/test/quote_calc-s.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr OP_ADD expr
+ 8 | expr OP_SUB expr
+ 9 | expr OP_MUL expr
+ 10 | expr OP_DIV expr
+ 11 | expr OP_MOD expr
+ 12 | expr OP_AND expr
+ 13 | expr '|' expr
+ 14 | OP_SUB expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : OP_SUB . expr (14)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ OP_ADD reduce 15
+ OP_SUB reduce 15
+ OP_MUL reduce 15
+ OP_DIV reduce 15
+ OP_MOD reduce 15
+ OP_AND reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ OP_ADD reduce 16
+ OP_SUB reduce 16
+ OP_MUL reduce 16
+ OP_DIV reduce 16
+ OP_MOD reduce 16
+ OP_AND reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD
+12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB
+12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL
+12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV
+12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD
+12: shift/reduce conflict (shift 21, reduce 14) on OP_AND
+state 12
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : OP_SUB expr . (14)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr OP_ADD . expr (7)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr OP_SUB . expr (8)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr OP_MUL . expr (9)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr OP_DIV . expr (10)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr OP_MOD . expr (11)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr OP_AND . expr (12)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD
+26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB
+26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL
+26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV
+26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD
+26: shift/reduce conflict (shift 21, reduce 7) on OP_AND
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . OP_ADD expr (7)
+ expr : expr OP_ADD expr . (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD
+27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB
+27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL
+27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV
+27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD
+27: shift/reduce conflict (shift 21, reduce 8) on OP_AND
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr OP_SUB expr . (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD
+28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB
+28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL
+28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV
+28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD
+28: shift/reduce conflict (shift 21, reduce 9) on OP_AND
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr OP_MUL expr . (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD
+29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB
+29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL
+29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV
+29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD
+29: shift/reduce conflict (shift 21, reduce 10) on OP_AND
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr OP_DIV expr . (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD
+30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB
+30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL
+30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV
+30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD
+30: shift/reduce conflict (shift 21, reduce 11) on OP_AND
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr OP_MOD expr . (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD
+31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB
+31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL
+31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV
+31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD
+31: shift/reduce conflict (shift 21, reduce 12) on OP_AND
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr OP_AND expr . (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD
+32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB
+32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL
+32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV
+32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD
+32: shift/reduce conflict (shift 21, reduce 13) on OP_AND
+state 32
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/quote_calc-s.tab.c b/contrib/byacc/test/quote_calc-s.tab.c
new file mode 100644
index 000000000000..15346fdcfafa
--- /dev/null
+++ b/contrib/byacc/test/quote_calc-s.tab.c
@@ -0,0 +1,687 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse quote_calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 109 "quote_calc-s.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short quote_calc_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short quote_calc_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short quote_calc_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short quote_calc_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short quote_calc_sindex[] = { 0,
+ -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
+ 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short quote_calc_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short quote_calc_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 258
+static const short quote_calc_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
+ 23, 20, 4, 21, 5, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 17, 0, 18,
+ 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
+ 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short quote_calc_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
+ 269, 265, 10, 267, 10, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, -1, 261,
+ -1, 263, -1, 265, -1, 267, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
+ 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
+ 261, 261, 263, 263, 265, 265, 267, 267,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
+"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr OP_ADD expr",
+"expr : expr OP_SUB expr",
+"expr : expr OP_MUL expr",
+"expr : expr OP_DIV expr",
+"expr : expr OP_MOD expr",
+"expr : expr OP_AND expr",
+"expr : expr '|' expr",
+"expr : OP_SUB expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 361 "quote_calc-s.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 627 "quote_calc-s.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/quote_calc-s.tab.h b/contrib/byacc/test/quote_calc-s.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/quote_calc-s.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/quote_calc.output b/contrib/byacc/test/quote_calc.output
new file mode 100644
index 000000000000..0306652bfaa1
--- /dev/null
+++ b/contrib/byacc/test/quote_calc.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr OP_ADD expr
+ 8 | expr OP_SUB expr
+ 9 | expr OP_MUL expr
+ 10 | expr OP_DIV expr
+ 11 | expr OP_MOD expr
+ 12 | expr OP_AND expr
+ 13 | expr '|' expr
+ 14 | OP_SUB expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : OP_SUB . expr (14)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ OP_ADD reduce 15
+ OP_SUB reduce 15
+ OP_MUL reduce 15
+ OP_DIV reduce 15
+ OP_MOD reduce 15
+ OP_AND reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ OP_ADD reduce 16
+ OP_SUB reduce 16
+ OP_MUL reduce 16
+ OP_DIV reduce 16
+ OP_MOD reduce 16
+ OP_AND reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD
+12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB
+12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL
+12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV
+12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD
+12: shift/reduce conflict (shift 21, reduce 14) on OP_AND
+state 12
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : OP_SUB expr . (14)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr OP_ADD . expr (7)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr OP_SUB . expr (8)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr OP_MUL . expr (9)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr OP_DIV . expr (10)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr OP_MOD . expr (11)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr OP_AND . expr (12)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD
+26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB
+26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL
+26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV
+26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD
+26: shift/reduce conflict (shift 21, reduce 7) on OP_AND
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . OP_ADD expr (7)
+ expr : expr OP_ADD expr . (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD
+27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB
+27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL
+27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV
+27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD
+27: shift/reduce conflict (shift 21, reduce 8) on OP_AND
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr OP_SUB expr . (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD
+28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB
+28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL
+28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV
+28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD
+28: shift/reduce conflict (shift 21, reduce 9) on OP_AND
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr OP_MUL expr . (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD
+29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB
+29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL
+29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV
+29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD
+29: shift/reduce conflict (shift 21, reduce 10) on OP_AND
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr OP_DIV expr . (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD
+30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB
+30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL
+30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV
+30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD
+30: shift/reduce conflict (shift 21, reduce 11) on OP_AND
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr OP_MOD expr . (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD
+31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB
+31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL
+31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV
+31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD
+31: shift/reduce conflict (shift 21, reduce 12) on OP_AND
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr OP_AND expr . (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD
+32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB
+32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL
+32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV
+32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD
+32: shift/reduce conflict (shift 21, reduce 13) on OP_AND
+state 32
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/quote_calc.tab.c b/contrib/byacc/test/quote_calc.tab.c
new file mode 100644
index 000000000000..9a45472a0374
--- /dev/null
+++ b/contrib/byacc/test/quote_calc.tab.c
@@ -0,0 +1,693 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse quote_calc_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 109 "quote_calc.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define ADD 258
+#define OP_SUB 259
+#define SUB 260
+#define OP_MUL 261
+#define MUL 262
+#define OP_DIV 263
+#define DIV 264
+#define OP_MOD 265
+#define MOD 266
+#define OP_AND 267
+#define AND 268
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short quote_calc_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short quote_calc_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short quote_calc_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short quote_calc_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short quote_calc_sindex[] = { 0,
+ -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
+ 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short quote_calc_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short quote_calc_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 258
+static const short quote_calc_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
+ 23, 20, 4, 21, 5, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 17, 0, 18,
+ 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
+ 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short quote_calc_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
+ 269, 265, 10, 267, 10, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, -1, 261,
+ -1, 263, -1, 265, -1, 267, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
+ 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
+ 261, 261, 263, 263, 265, 265, 267, 267,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
+"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr OP_ADD expr",
+"expr : expr OP_SUB expr",
+"expr : expr OP_MUL expr",
+"expr : expr OP_DIV expr",
+"expr : expr OP_MOD expr",
+"expr : expr OP_AND expr",
+"expr : expr '|' expr",
+"expr : OP_SUB expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 367 "quote_calc.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 633 "quote_calc.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/quote_calc.tab.h b/contrib/byacc/test/quote_calc.tab.h
new file mode 100644
index 000000000000..498eff210dbe
--- /dev/null
+++ b/contrib/byacc/test/quote_calc.tab.h
@@ -0,0 +1,15 @@
+#define OP_ADD 257
+#define ADD 258
+#define OP_SUB 259
+#define SUB 260
+#define OP_MUL 261
+#define MUL 262
+#define OP_DIV 263
+#define DIV 264
+#define OP_MOD 265
+#define MOD 266
+#define OP_AND 267
+#define AND 268
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/quote_calc.y b/contrib/byacc/test/quote_calc.y
new file mode 100644
index 000000000000..9304dd8a7006
--- /dev/null
+++ b/contrib/byacc/test/quote_calc.y
@@ -0,0 +1,112 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+%}
+
+%start list
+
+%token OP_ADD "ADD"
+%token OP_SUB "SUB"
+%token OP_MUL "MUL"
+%token OP_DIV "DIV"
+%token OP_MOD "MOD"
+%token OP_AND "AND"
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr OP_ADD expr
+ { $$ = $1 + $3; }
+ | expr OP_SUB expr
+ { $$ = $1 - $3; }
+ | expr OP_MUL expr
+ { $$ = $1 * $3; }
+ | expr OP_DIV expr
+ { $$ = $1 / $3; }
+ | expr OP_MOD expr
+ { $$ = $1 % $3; }
+ | expr OP_AND expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | OP_SUB expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/contrib/byacc/test/quote_calc2-s.output b/contrib/byacc/test/quote_calc2-s.output
new file mode 100644
index 000000000000..ed28ae2f21c0
--- /dev/null
+++ b/contrib/byacc/test/quote_calc2-s.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr "ADD" expr
+ 8 | expr "SUB" expr
+ 9 | expr "MUL" expr
+ 10 | expr "DIV" expr
+ 11 | expr "MOD" expr
+ 12 | expr "AND" expr
+ 13 | expr '|' expr
+ 14 | "SUB" expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : "SUB" . expr (14)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ "ADD" reduce 15
+ "SUB" reduce 15
+ "MUL" reduce 15
+ "DIV" reduce 15
+ "MOD" reduce 15
+ "AND" reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ "ADD" reduce 16
+ "SUB" reduce 16
+ "MUL" reduce 16
+ "DIV" reduce 16
+ "MOD" reduce 16
+ "AND" reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on "ADD"
+12: shift/reduce conflict (shift 17, reduce 14) on "SUB"
+12: shift/reduce conflict (shift 18, reduce 14) on "MUL"
+12: shift/reduce conflict (shift 19, reduce 14) on "DIV"
+12: shift/reduce conflict (shift 20, reduce 14) on "MOD"
+12: shift/reduce conflict (shift 21, reduce 14) on "AND"
+state 12
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+ expr : "SUB" expr . (14)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr "ADD" . expr (7)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr "SUB" . expr (8)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr "MUL" . expr (9)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr "DIV" . expr (10)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr "MOD" . expr (11)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr "AND" . expr (12)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on "ADD"
+26: shift/reduce conflict (shift 17, reduce 7) on "SUB"
+26: shift/reduce conflict (shift 18, reduce 7) on "MUL"
+26: shift/reduce conflict (shift 19, reduce 7) on "DIV"
+26: shift/reduce conflict (shift 20, reduce 7) on "MOD"
+26: shift/reduce conflict (shift 21, reduce 7) on "AND"
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . "ADD" expr (7)
+ expr : expr "ADD" expr . (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on "ADD"
+27: shift/reduce conflict (shift 17, reduce 8) on "SUB"
+27: shift/reduce conflict (shift 18, reduce 8) on "MUL"
+27: shift/reduce conflict (shift 19, reduce 8) on "DIV"
+27: shift/reduce conflict (shift 20, reduce 8) on "MOD"
+27: shift/reduce conflict (shift 21, reduce 8) on "AND"
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr "SUB" expr . (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on "ADD"
+28: shift/reduce conflict (shift 17, reduce 9) on "SUB"
+28: shift/reduce conflict (shift 18, reduce 9) on "MUL"
+28: shift/reduce conflict (shift 19, reduce 9) on "DIV"
+28: shift/reduce conflict (shift 20, reduce 9) on "MOD"
+28: shift/reduce conflict (shift 21, reduce 9) on "AND"
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr "MUL" expr . (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on "ADD"
+29: shift/reduce conflict (shift 17, reduce 10) on "SUB"
+29: shift/reduce conflict (shift 18, reduce 10) on "MUL"
+29: shift/reduce conflict (shift 19, reduce 10) on "DIV"
+29: shift/reduce conflict (shift 20, reduce 10) on "MOD"
+29: shift/reduce conflict (shift 21, reduce 10) on "AND"
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr "DIV" expr . (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on "ADD"
+30: shift/reduce conflict (shift 17, reduce 11) on "SUB"
+30: shift/reduce conflict (shift 18, reduce 11) on "MUL"
+30: shift/reduce conflict (shift 19, reduce 11) on "DIV"
+30: shift/reduce conflict (shift 20, reduce 11) on "MOD"
+30: shift/reduce conflict (shift 21, reduce 11) on "AND"
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr "MOD" expr . (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on "ADD"
+31: shift/reduce conflict (shift 17, reduce 12) on "SUB"
+31: shift/reduce conflict (shift 18, reduce 12) on "MUL"
+31: shift/reduce conflict (shift 19, reduce 12) on "DIV"
+31: shift/reduce conflict (shift 20, reduce 12) on "MOD"
+31: shift/reduce conflict (shift 21, reduce 12) on "AND"
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr "AND" expr . (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on "ADD"
+32: shift/reduce conflict (shift 17, reduce 13) on "SUB"
+32: shift/reduce conflict (shift 18, reduce 13) on "MUL"
+32: shift/reduce conflict (shift 19, reduce 13) on "DIV"
+32: shift/reduce conflict (shift 20, reduce 13) on "MOD"
+32: shift/reduce conflict (shift 21, reduce 13) on "AND"
+state 32
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/quote_calc2-s.tab.c b/contrib/byacc/test/quote_calc2-s.tab.c
new file mode 100644
index 000000000000..06c574ba9c88
--- /dev/null
+++ b/contrib/byacc/test/quote_calc2-s.tab.c
@@ -0,0 +1,687 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse quote_calc2_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc2_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc2_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc2_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc2_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc2_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc2_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc2_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc2_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc2_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc2_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc2_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc2_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc2_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc2_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc2_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc2_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc2_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc2_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc2_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc2_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc2.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 109 "quote_calc2-s.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short quote_calc2_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short quote_calc2_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short quote_calc2_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short quote_calc2_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short quote_calc2_sindex[] = { 0,
+ -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
+ 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short quote_calc2_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short quote_calc2_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 259
+static const short quote_calc2_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
+ 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
+ 18, 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
+ 15, 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short quote_calc2_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
+ 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
+ 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
+ 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
+ 260, 262, 262, 264, 264, 266, 266, 268, 268,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
+"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr \"ADD\" expr",
+"expr : expr \"SUB\" expr",
+"expr : expr \"MUL\" expr",
+"expr : expr \"DIV\" expr",
+"expr : expr \"MOD\" expr",
+"expr : expr \"AND\" expr",
+"expr : expr '|' expr",
+"expr : \"SUB\" expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc2.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 361 "quote_calc2-s.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc2.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc2.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc2.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc2.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc2.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc2.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc2.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc2.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 627 "quote_calc2-s.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/quote_calc2-s.tab.h b/contrib/byacc/test/quote_calc2-s.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/quote_calc2-s.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/quote_calc2.output b/contrib/byacc/test/quote_calc2.output
new file mode 100644
index 000000000000..ed28ae2f21c0
--- /dev/null
+++ b/contrib/byacc/test/quote_calc2.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr "ADD" expr
+ 8 | expr "SUB" expr
+ 9 | expr "MUL" expr
+ 10 | expr "DIV" expr
+ 11 | expr "MOD" expr
+ 12 | expr "AND" expr
+ 13 | expr '|' expr
+ 14 | "SUB" expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : "SUB" . expr (14)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ "ADD" reduce 15
+ "SUB" reduce 15
+ "MUL" reduce 15
+ "DIV" reduce 15
+ "MOD" reduce 15
+ "AND" reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ "ADD" reduce 16
+ "SUB" reduce 16
+ "MUL" reduce 16
+ "DIV" reduce 16
+ "MOD" reduce 16
+ "AND" reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on "ADD"
+12: shift/reduce conflict (shift 17, reduce 14) on "SUB"
+12: shift/reduce conflict (shift 18, reduce 14) on "MUL"
+12: shift/reduce conflict (shift 19, reduce 14) on "DIV"
+12: shift/reduce conflict (shift 20, reduce 14) on "MOD"
+12: shift/reduce conflict (shift 21, reduce 14) on "AND"
+state 12
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+ expr : "SUB" expr . (14)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr "ADD" . expr (7)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr "SUB" . expr (8)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr "MUL" . expr (9)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr "DIV" . expr (10)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr "MOD" . expr (11)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr "AND" . expr (12)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ "SUB" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on "ADD"
+26: shift/reduce conflict (shift 17, reduce 7) on "SUB"
+26: shift/reduce conflict (shift 18, reduce 7) on "MUL"
+26: shift/reduce conflict (shift 19, reduce 7) on "DIV"
+26: shift/reduce conflict (shift 20, reduce 7) on "MOD"
+26: shift/reduce conflict (shift 21, reduce 7) on "AND"
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . "ADD" expr (7)
+ expr : expr "ADD" expr . (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on "ADD"
+27: shift/reduce conflict (shift 17, reduce 8) on "SUB"
+27: shift/reduce conflict (shift 18, reduce 8) on "MUL"
+27: shift/reduce conflict (shift 19, reduce 8) on "DIV"
+27: shift/reduce conflict (shift 20, reduce 8) on "MOD"
+27: shift/reduce conflict (shift 21, reduce 8) on "AND"
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr "SUB" expr . (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on "ADD"
+28: shift/reduce conflict (shift 17, reduce 9) on "SUB"
+28: shift/reduce conflict (shift 18, reduce 9) on "MUL"
+28: shift/reduce conflict (shift 19, reduce 9) on "DIV"
+28: shift/reduce conflict (shift 20, reduce 9) on "MOD"
+28: shift/reduce conflict (shift 21, reduce 9) on "AND"
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr "MUL" expr . (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on "ADD"
+29: shift/reduce conflict (shift 17, reduce 10) on "SUB"
+29: shift/reduce conflict (shift 18, reduce 10) on "MUL"
+29: shift/reduce conflict (shift 19, reduce 10) on "DIV"
+29: shift/reduce conflict (shift 20, reduce 10) on "MOD"
+29: shift/reduce conflict (shift 21, reduce 10) on "AND"
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr "DIV" expr . (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on "ADD"
+30: shift/reduce conflict (shift 17, reduce 11) on "SUB"
+30: shift/reduce conflict (shift 18, reduce 11) on "MUL"
+30: shift/reduce conflict (shift 19, reduce 11) on "DIV"
+30: shift/reduce conflict (shift 20, reduce 11) on "MOD"
+30: shift/reduce conflict (shift 21, reduce 11) on "AND"
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr "MOD" expr . (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on "ADD"
+31: shift/reduce conflict (shift 17, reduce 12) on "SUB"
+31: shift/reduce conflict (shift 18, reduce 12) on "MUL"
+31: shift/reduce conflict (shift 19, reduce 12) on "DIV"
+31: shift/reduce conflict (shift 20, reduce 12) on "MOD"
+31: shift/reduce conflict (shift 21, reduce 12) on "AND"
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr "AND" expr . (12)
+ expr : expr . '|' expr (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on "ADD"
+32: shift/reduce conflict (shift 17, reduce 13) on "SUB"
+32: shift/reduce conflict (shift 18, reduce 13) on "MUL"
+32: shift/reduce conflict (shift 19, reduce 13) on "DIV"
+32: shift/reduce conflict (shift 20, reduce 13) on "MOD"
+32: shift/reduce conflict (shift 21, reduce 13) on "AND"
+state 32
+ expr : expr . "ADD" expr (7)
+ expr : expr . "SUB" expr (8)
+ expr : expr . "MUL" expr (9)
+ expr : expr . "DIV" expr (10)
+ expr : expr . "MOD" expr (11)
+ expr : expr . "AND" expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ "ADD" shift 16
+ "SUB" shift 17
+ "MUL" shift 18
+ "DIV" shift 19
+ "MOD" shift 20
+ "AND" shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/quote_calc2.tab.c b/contrib/byacc/test/quote_calc2.tab.c
new file mode 100644
index 000000000000..958a736fb23a
--- /dev/null
+++ b/contrib/byacc/test/quote_calc2.tab.c
@@ -0,0 +1,693 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse quote_calc2_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc2_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc2_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc2_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc2_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc2_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc2_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc2_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc2_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc2_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc2_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc2_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc2_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc2_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc2_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc2_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc2_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc2_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc2_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc2_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc2_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc2.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 109 "quote_calc2.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define ADD 258
+#define OP_SUB 259
+#define SUB 260
+#define OP_MUL 261
+#define MUL 262
+#define OP_DIV 263
+#define DIV 264
+#define OP_MOD 265
+#define MOD 266
+#define OP_AND 267
+#define AND 268
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short quote_calc2_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short quote_calc2_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short quote_calc2_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short quote_calc2_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short quote_calc2_sindex[] = { 0,
+ -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
+ 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short quote_calc2_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short quote_calc2_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 259
+static const short quote_calc2_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
+ 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
+ 18, 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
+ 15, 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short quote_calc2_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
+ 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
+ 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
+ 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
+ 260, 262, 262, 264, 264, 266, 266, 268, 268,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
+"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr \"ADD\" expr",
+"expr : expr \"SUB\" expr",
+"expr : expr \"MUL\" expr",
+"expr : expr \"DIV\" expr",
+"expr : expr \"MOD\" expr",
+"expr : expr \"AND\" expr",
+"expr : expr '|' expr",
+"expr : \"SUB\" expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc2.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 367 "quote_calc2.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc2.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc2.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc2.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc2.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc2.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc2.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc2.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc2.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 633 "quote_calc2.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/quote_calc2.tab.h b/contrib/byacc/test/quote_calc2.tab.h
new file mode 100644
index 000000000000..498eff210dbe
--- /dev/null
+++ b/contrib/byacc/test/quote_calc2.tab.h
@@ -0,0 +1,15 @@
+#define OP_ADD 257
+#define ADD 258
+#define OP_SUB 259
+#define SUB 260
+#define OP_MUL 261
+#define MUL 262
+#define OP_DIV 263
+#define DIV 264
+#define OP_MOD 265
+#define MOD 266
+#define OP_AND 267
+#define AND 268
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/quote_calc2.y b/contrib/byacc/test/quote_calc2.y
new file mode 100644
index 000000000000..ab72a285fcb5
--- /dev/null
+++ b/contrib/byacc/test/quote_calc2.y
@@ -0,0 +1,112 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+%}
+
+%start list
+
+%token OP_ADD "ADD"
+%token OP_SUB "SUB"
+%token OP_MUL "MUL"
+%token OP_DIV "DIV"
+%token OP_MOD "MOD"
+%token OP_AND "AND"
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr "ADD" expr
+ { $$ = $1 + $3; }
+ | expr "SUB" expr
+ { $$ = $1 - $3; }
+ | expr "MUL" expr
+ { $$ = $1 * $3; }
+ | expr "DIV" expr
+ { $$ = $1 / $3; }
+ | expr "MOD" expr
+ { $$ = $1 % $3; }
+ | expr "AND" expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | "SUB" expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/contrib/byacc/test/quote_calc3-s.output b/contrib/byacc/test/quote_calc3-s.output
new file mode 100644
index 000000000000..0306652bfaa1
--- /dev/null
+++ b/contrib/byacc/test/quote_calc3-s.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr OP_ADD expr
+ 8 | expr OP_SUB expr
+ 9 | expr OP_MUL expr
+ 10 | expr OP_DIV expr
+ 11 | expr OP_MOD expr
+ 12 | expr OP_AND expr
+ 13 | expr '|' expr
+ 14 | OP_SUB expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : OP_SUB . expr (14)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ OP_ADD reduce 15
+ OP_SUB reduce 15
+ OP_MUL reduce 15
+ OP_DIV reduce 15
+ OP_MOD reduce 15
+ OP_AND reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ OP_ADD reduce 16
+ OP_SUB reduce 16
+ OP_MUL reduce 16
+ OP_DIV reduce 16
+ OP_MOD reduce 16
+ OP_AND reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD
+12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB
+12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL
+12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV
+12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD
+12: shift/reduce conflict (shift 21, reduce 14) on OP_AND
+state 12
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : OP_SUB expr . (14)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr OP_ADD . expr (7)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr OP_SUB . expr (8)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr OP_MUL . expr (9)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr OP_DIV . expr (10)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr OP_MOD . expr (11)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr OP_AND . expr (12)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD
+26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB
+26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL
+26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV
+26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD
+26: shift/reduce conflict (shift 21, reduce 7) on OP_AND
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . OP_ADD expr (7)
+ expr : expr OP_ADD expr . (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD
+27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB
+27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL
+27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV
+27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD
+27: shift/reduce conflict (shift 21, reduce 8) on OP_AND
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr OP_SUB expr . (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD
+28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB
+28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL
+28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV
+28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD
+28: shift/reduce conflict (shift 21, reduce 9) on OP_AND
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr OP_MUL expr . (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD
+29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB
+29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL
+29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV
+29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD
+29: shift/reduce conflict (shift 21, reduce 10) on OP_AND
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr OP_DIV expr . (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD
+30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB
+30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL
+30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV
+30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD
+30: shift/reduce conflict (shift 21, reduce 11) on OP_AND
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr OP_MOD expr . (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD
+31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB
+31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL
+31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV
+31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD
+31: shift/reduce conflict (shift 21, reduce 12) on OP_AND
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr OP_AND expr . (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD
+32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB
+32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL
+32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV
+32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD
+32: shift/reduce conflict (shift 21, reduce 13) on OP_AND
+state 32
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/quote_calc3-s.tab.c b/contrib/byacc/test/quote_calc3-s.tab.c
new file mode 100644
index 000000000000..0953fbb623c1
--- /dev/null
+++ b/contrib/byacc/test/quote_calc3-s.tab.c
@@ -0,0 +1,688 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse quote_calc3_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc3_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc3_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc3_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc3_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc3_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc3_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc3_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc3_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc3_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc3_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc3_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc3_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc3_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc3_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc3_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc3_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc3_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc3_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc3_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc3_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc3.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 109 "quote_calc3-s.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short quote_calc3_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short quote_calc3_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short quote_calc3_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short quote_calc3_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short quote_calc3_sindex[] = { 0,
+ -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
+ 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short quote_calc3_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short quote_calc3_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 258
+static const short quote_calc3_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
+ 23, 20, 4, 21, 5, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 17, 0, 18,
+ 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
+ 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short quote_calc3_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
+ 269, 265, 10, 267, 10, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, -1, 261,
+ -1, 263, -1, 265, -1, 267, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
+ 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
+ 261, 261, 263, 263, 265, 265, 267, 267,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
+"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
+"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr OP_ADD expr",
+"expr : expr OP_SUB expr",
+"expr : expr OP_MUL expr",
+"expr : expr OP_DIV expr",
+"expr : expr OP_MOD expr",
+"expr : expr OP_AND expr",
+"expr : expr '|' expr",
+"expr : OP_SUB expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc3.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 362 "quote_calc3-s.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc3.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc3.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc3.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc3.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc3.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc3.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc3.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc3.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 628 "quote_calc3-s.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/quote_calc3-s.tab.h b/contrib/byacc/test/quote_calc3-s.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/quote_calc3-s.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/quote_calc3.output b/contrib/byacc/test/quote_calc3.output
new file mode 100644
index 000000000000..0306652bfaa1
--- /dev/null
+++ b/contrib/byacc/test/quote_calc3.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr OP_ADD expr
+ 8 | expr OP_SUB expr
+ 9 | expr OP_MUL expr
+ 10 | expr OP_DIV expr
+ 11 | expr OP_MOD expr
+ 12 | expr OP_AND expr
+ 13 | expr '|' expr
+ 14 | OP_SUB expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : OP_SUB . expr (14)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ OP_ADD reduce 15
+ OP_SUB reduce 15
+ OP_MUL reduce 15
+ OP_DIV reduce 15
+ OP_MOD reduce 15
+ OP_AND reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ OP_ADD reduce 16
+ OP_SUB reduce 16
+ OP_MUL reduce 16
+ OP_DIV reduce 16
+ OP_MOD reduce 16
+ OP_AND reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD
+12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB
+12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL
+12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV
+12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD
+12: shift/reduce conflict (shift 21, reduce 14) on OP_AND
+state 12
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : OP_SUB expr . (14)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr OP_ADD . expr (7)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr OP_SUB . expr (8)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr OP_MUL . expr (9)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr OP_DIV . expr (10)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr OP_MOD . expr (11)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr OP_AND . expr (12)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ OP_SUB shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD
+26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB
+26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL
+26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV
+26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD
+26: shift/reduce conflict (shift 21, reduce 7) on OP_AND
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . OP_ADD expr (7)
+ expr : expr OP_ADD expr . (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD
+27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB
+27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL
+27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV
+27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD
+27: shift/reduce conflict (shift 21, reduce 8) on OP_AND
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr OP_SUB expr . (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD
+28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB
+28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL
+28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV
+28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD
+28: shift/reduce conflict (shift 21, reduce 9) on OP_AND
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr OP_MUL expr . (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD
+29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB
+29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL
+29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV
+29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD
+29: shift/reduce conflict (shift 21, reduce 10) on OP_AND
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr OP_DIV expr . (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD
+30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB
+30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL
+30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV
+30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD
+30: shift/reduce conflict (shift 21, reduce 11) on OP_AND
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr OP_MOD expr . (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD
+31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB
+31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL
+31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV
+31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD
+31: shift/reduce conflict (shift 21, reduce 12) on OP_AND
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr OP_AND expr . (12)
+ expr : expr . '|' expr (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD
+32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB
+32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL
+32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV
+32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD
+32: shift/reduce conflict (shift 21, reduce 13) on OP_AND
+state 32
+ expr : expr . OP_ADD expr (7)
+ expr : expr . OP_SUB expr (8)
+ expr : expr . OP_MUL expr (9)
+ expr : expr . OP_DIV expr (10)
+ expr : expr . OP_MOD expr (11)
+ expr : expr . OP_AND expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ OP_ADD shift 16
+ OP_SUB shift 17
+ OP_MUL shift 18
+ OP_DIV shift 19
+ OP_MOD shift 20
+ OP_AND shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/quote_calc3.tab.c b/contrib/byacc/test/quote_calc3.tab.c
new file mode 100644
index 000000000000..731b4ab24b6f
--- /dev/null
+++ b/contrib/byacc/test/quote_calc3.tab.c
@@ -0,0 +1,688 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse quote_calc3_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc3_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc3_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc3_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc3_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc3_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc3_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc3_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc3_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc3_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc3_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc3_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc3_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc3_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc3_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc3_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc3_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc3_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc3_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc3_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc3_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc3.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 109 "quote_calc3.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short quote_calc3_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short quote_calc3_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short quote_calc3_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short quote_calc3_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short quote_calc3_sindex[] = { 0,
+ -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
+ 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short quote_calc3_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short quote_calc3_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 258
+static const short quote_calc3_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
+ 23, 20, 4, 21, 5, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 17, 0, 18,
+ 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
+ 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short quote_calc3_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
+ 269, 265, 10, 267, 10, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, -1, 261,
+ -1, 263, -1, 265, -1, 267, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
+ 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
+ 261, 261, 263, 263, 265, 265, 267, 267,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
+"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
+"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr OP_ADD expr",
+"expr : expr OP_SUB expr",
+"expr : expr OP_MUL expr",
+"expr : expr OP_DIV expr",
+"expr : expr OP_MOD expr",
+"expr : expr OP_AND expr",
+"expr : expr '|' expr",
+"expr : OP_SUB expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc3.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 362 "quote_calc3.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc3.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc3.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc3.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc3.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc3.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc3.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc3.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc3.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 628 "quote_calc3.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/quote_calc3.tab.h b/contrib/byacc/test/quote_calc3.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/quote_calc3.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/quote_calc3.y b/contrib/byacc/test/quote_calc3.y
new file mode 100644
index 000000000000..5feeb4a03ed6
--- /dev/null
+++ b/contrib/byacc/test/quote_calc3.y
@@ -0,0 +1,112 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+%}
+
+%start list
+
+%token OP_ADD "ADD-operator"
+%token OP_SUB "SUB-operator"
+%token OP_MUL "MUL-operator"
+%token OP_DIV "DIV-operator"
+%token OP_MOD "MOD-operator"
+%token OP_AND "AND-operator"
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr OP_ADD expr
+ { $$ = $1 + $3; }
+ | expr OP_SUB expr
+ { $$ = $1 - $3; }
+ | expr OP_MUL expr
+ { $$ = $1 * $3; }
+ | expr OP_DIV expr
+ { $$ = $1 / $3; }
+ | expr OP_MOD expr
+ { $$ = $1 % $3; }
+ | expr OP_AND expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | OP_SUB expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/contrib/byacc/test/quote_calc4-s.output b/contrib/byacc/test/quote_calc4-s.output
new file mode 100644
index 000000000000..a1d5afc95796
--- /dev/null
+++ b/contrib/byacc/test/quote_calc4-s.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr "ADD-operator" expr
+ 8 | expr "SUB-operator" expr
+ 9 | expr "MUL-operator" expr
+ 10 | expr "DIV-operator" expr
+ 11 | expr "MOD-operator" expr
+ 12 | expr "AND-operator" expr
+ 13 | expr '|' expr
+ 14 | "SUB-operator" expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : "SUB-operator" . expr (14)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ "ADD-operator" reduce 15
+ "SUB-operator" reduce 15
+ "MUL-operator" reduce 15
+ "DIV-operator" reduce 15
+ "MOD-operator" reduce 15
+ "AND-operator" reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ "ADD-operator" reduce 16
+ "SUB-operator" reduce 16
+ "MUL-operator" reduce 16
+ "DIV-operator" reduce 16
+ "MOD-operator" reduce 16
+ "AND-operator" reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on "ADD-operator"
+12: shift/reduce conflict (shift 17, reduce 14) on "SUB-operator"
+12: shift/reduce conflict (shift 18, reduce 14) on "MUL-operator"
+12: shift/reduce conflict (shift 19, reduce 14) on "DIV-operator"
+12: shift/reduce conflict (shift 20, reduce 14) on "MOD-operator"
+12: shift/reduce conflict (shift 21, reduce 14) on "AND-operator"
+state 12
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+ expr : "SUB-operator" expr . (14)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr "ADD-operator" . expr (7)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr "SUB-operator" . expr (8)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr "MUL-operator" . expr (9)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr "DIV-operator" . expr (10)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr "MOD-operator" . expr (11)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr "AND-operator" . expr (12)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on "ADD-operator"
+26: shift/reduce conflict (shift 17, reduce 7) on "SUB-operator"
+26: shift/reduce conflict (shift 18, reduce 7) on "MUL-operator"
+26: shift/reduce conflict (shift 19, reduce 7) on "DIV-operator"
+26: shift/reduce conflict (shift 20, reduce 7) on "MOD-operator"
+26: shift/reduce conflict (shift 21, reduce 7) on "AND-operator"
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr "ADD-operator" expr . (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on "ADD-operator"
+27: shift/reduce conflict (shift 17, reduce 8) on "SUB-operator"
+27: shift/reduce conflict (shift 18, reduce 8) on "MUL-operator"
+27: shift/reduce conflict (shift 19, reduce 8) on "DIV-operator"
+27: shift/reduce conflict (shift 20, reduce 8) on "MOD-operator"
+27: shift/reduce conflict (shift 21, reduce 8) on "AND-operator"
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr "SUB-operator" expr . (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on "ADD-operator"
+28: shift/reduce conflict (shift 17, reduce 9) on "SUB-operator"
+28: shift/reduce conflict (shift 18, reduce 9) on "MUL-operator"
+28: shift/reduce conflict (shift 19, reduce 9) on "DIV-operator"
+28: shift/reduce conflict (shift 20, reduce 9) on "MOD-operator"
+28: shift/reduce conflict (shift 21, reduce 9) on "AND-operator"
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr "MUL-operator" expr . (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on "ADD-operator"
+29: shift/reduce conflict (shift 17, reduce 10) on "SUB-operator"
+29: shift/reduce conflict (shift 18, reduce 10) on "MUL-operator"
+29: shift/reduce conflict (shift 19, reduce 10) on "DIV-operator"
+29: shift/reduce conflict (shift 20, reduce 10) on "MOD-operator"
+29: shift/reduce conflict (shift 21, reduce 10) on "AND-operator"
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr "DIV-operator" expr . (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on "ADD-operator"
+30: shift/reduce conflict (shift 17, reduce 11) on "SUB-operator"
+30: shift/reduce conflict (shift 18, reduce 11) on "MUL-operator"
+30: shift/reduce conflict (shift 19, reduce 11) on "DIV-operator"
+30: shift/reduce conflict (shift 20, reduce 11) on "MOD-operator"
+30: shift/reduce conflict (shift 21, reduce 11) on "AND-operator"
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr "MOD-operator" expr . (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on "ADD-operator"
+31: shift/reduce conflict (shift 17, reduce 12) on "SUB-operator"
+31: shift/reduce conflict (shift 18, reduce 12) on "MUL-operator"
+31: shift/reduce conflict (shift 19, reduce 12) on "DIV-operator"
+31: shift/reduce conflict (shift 20, reduce 12) on "MOD-operator"
+31: shift/reduce conflict (shift 21, reduce 12) on "AND-operator"
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr "AND-operator" expr . (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on "ADD-operator"
+32: shift/reduce conflict (shift 17, reduce 13) on "SUB-operator"
+32: shift/reduce conflict (shift 18, reduce 13) on "MUL-operator"
+32: shift/reduce conflict (shift 19, reduce 13) on "DIV-operator"
+32: shift/reduce conflict (shift 20, reduce 13) on "MOD-operator"
+32: shift/reduce conflict (shift 21, reduce 13) on "AND-operator"
+state 32
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/quote_calc4-s.tab.c b/contrib/byacc/test/quote_calc4-s.tab.c
new file mode 100644
index 000000000000..29e176a61ac6
--- /dev/null
+++ b/contrib/byacc/test/quote_calc4-s.tab.c
@@ -0,0 +1,688 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse quote_calc4_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc4_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc4_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc4_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc4_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc4_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc4_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc4_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc4_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc4_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc4_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc4_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc4_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc4_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc4_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc4_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc4_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc4_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc4_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc4_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc4_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc4.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 109 "quote_calc4-s.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short quote_calc4_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short quote_calc4_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short quote_calc4_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short quote_calc4_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short quote_calc4_sindex[] = { 0,
+ -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
+ 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short quote_calc4_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short quote_calc4_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 259
+static const short quote_calc4_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
+ 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
+ 18, 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
+ 15, 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short quote_calc4_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
+ 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
+ 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
+ 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
+ 260, 262, 262, 264, 264, 266, 266, 268, 268,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
+"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
+"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr \"ADD-operator\" expr",
+"expr : expr \"SUB-operator\" expr",
+"expr : expr \"MUL-operator\" expr",
+"expr : expr \"DIV-operator\" expr",
+"expr : expr \"MOD-operator\" expr",
+"expr : expr \"AND-operator\" expr",
+"expr : expr '|' expr",
+"expr : \"SUB-operator\" expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc4.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 362 "quote_calc4-s.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc4.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc4.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc4.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc4.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc4.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc4.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc4.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc4.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 628 "quote_calc4-s.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/quote_calc4-s.tab.h b/contrib/byacc/test/quote_calc4-s.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/quote_calc4-s.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/quote_calc4.output b/contrib/byacc/test/quote_calc4.output
new file mode 100644
index 000000000000..a1d5afc95796
--- /dev/null
+++ b/contrib/byacc/test/quote_calc4.output
@@ -0,0 +1,557 @@
+ 0 $accept : list $end
+
+ 1 list :
+ 2 | list stat '\n'
+ 3 | list error '\n'
+
+ 4 stat : expr
+ 5 | LETTER '=' expr
+
+ 6 expr : '(' expr ')'
+ 7 | expr "ADD-operator" expr
+ 8 | expr "SUB-operator" expr
+ 9 | expr "MUL-operator" expr
+ 10 | expr "DIV-operator" expr
+ 11 | expr "MOD-operator" expr
+ 12 | expr "AND-operator" expr
+ 13 | expr '|' expr
+ 14 | "SUB-operator" expr
+ 15 | LETTER
+ 16 | number
+
+ 17 number : DIGIT
+ 18 | number DIGIT
+
+state 0
+ $accept : . list $end (0)
+ list : . (1)
+
+ . reduce 1
+
+ list goto 1
+
+
+state 1
+ $accept : list . $end (0)
+ list : list . stat '\n' (2)
+ list : list . error '\n' (3)
+
+ $end accept
+ error shift 2
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 5
+ '(' shift 6
+ . error
+
+ stat goto 7
+ expr goto 8
+ number goto 9
+
+
+state 2
+ list : list error . '\n' (3)
+
+ '\n' shift 10
+ . error
+
+
+state 3
+ expr : "SUB-operator" . expr (14)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 12
+ number goto 9
+
+
+state 4
+ number : DIGIT . (17)
+
+ . reduce 17
+
+
+state 5
+ stat : LETTER . '=' expr (5)
+ expr : LETTER . (15)
+
+ '=' shift 13
+ "ADD-operator" reduce 15
+ "SUB-operator" reduce 15
+ "MUL-operator" reduce 15
+ "DIV-operator" reduce 15
+ "MOD-operator" reduce 15
+ "AND-operator" reduce 15
+ '|' reduce 15
+ '\n' reduce 15
+
+
+state 6
+ expr : '(' . expr ')' (6)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 14
+ number goto 9
+
+
+state 7
+ list : list stat . '\n' (2)
+
+ '\n' shift 15
+ . error
+
+
+state 8
+ stat : expr . (4)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 4
+
+
+state 9
+ expr : number . (16)
+ number : number . DIGIT (18)
+
+ DIGIT shift 23
+ "ADD-operator" reduce 16
+ "SUB-operator" reduce 16
+ "MUL-operator" reduce 16
+ "DIV-operator" reduce 16
+ "MOD-operator" reduce 16
+ "AND-operator" reduce 16
+ '|' reduce 16
+ '\n' reduce 16
+ ')' reduce 16
+
+
+state 10
+ list : list error '\n' . (3)
+
+ . reduce 3
+
+
+state 11
+ expr : LETTER . (15)
+
+ . reduce 15
+
+
+12: shift/reduce conflict (shift 16, reduce 14) on "ADD-operator"
+12: shift/reduce conflict (shift 17, reduce 14) on "SUB-operator"
+12: shift/reduce conflict (shift 18, reduce 14) on "MUL-operator"
+12: shift/reduce conflict (shift 19, reduce 14) on "DIV-operator"
+12: shift/reduce conflict (shift 20, reduce 14) on "MOD-operator"
+12: shift/reduce conflict (shift 21, reduce 14) on "AND-operator"
+state 12
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+ expr : "SUB-operator" expr . (14)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' reduce 14
+ '\n' reduce 14
+ ')' reduce 14
+
+
+state 13
+ stat : LETTER '=' . expr (5)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 24
+ number goto 9
+
+
+state 14
+ expr : '(' expr . ')' (6)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ ')' shift 25
+ . error
+
+
+state 15
+ list : list stat '\n' . (2)
+
+ . reduce 2
+
+
+state 16
+ expr : expr "ADD-operator" . expr (7)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 26
+ number goto 9
+
+
+state 17
+ expr : expr "SUB-operator" . expr (8)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 27
+ number goto 9
+
+
+state 18
+ expr : expr "MUL-operator" . expr (9)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 28
+ number goto 9
+
+
+state 19
+ expr : expr "DIV-operator" . expr (10)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 29
+ number goto 9
+
+
+state 20
+ expr : expr "MOD-operator" . expr (11)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 30
+ number goto 9
+
+
+state 21
+ expr : expr "AND-operator" . expr (12)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 31
+ number goto 9
+
+
+state 22
+ expr : expr '|' . expr (13)
+
+ "SUB-operator" shift 3
+ DIGIT shift 4
+ LETTER shift 11
+ '(' shift 6
+ . error
+
+ expr goto 32
+ number goto 9
+
+
+state 23
+ number : number DIGIT . (18)
+
+ . reduce 18
+
+
+state 24
+ stat : LETTER '=' expr . (5)
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 5
+
+
+state 25
+ expr : '(' expr ')' . (6)
+
+ . reduce 6
+
+
+26: shift/reduce conflict (shift 16, reduce 7) on "ADD-operator"
+26: shift/reduce conflict (shift 17, reduce 7) on "SUB-operator"
+26: shift/reduce conflict (shift 18, reduce 7) on "MUL-operator"
+26: shift/reduce conflict (shift 19, reduce 7) on "DIV-operator"
+26: shift/reduce conflict (shift 20, reduce 7) on "MOD-operator"
+26: shift/reduce conflict (shift 21, reduce 7) on "AND-operator"
+26: shift/reduce conflict (shift 22, reduce 7) on '|'
+state 26
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr "ADD-operator" expr . (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 7
+ ')' reduce 7
+
+
+27: shift/reduce conflict (shift 16, reduce 8) on "ADD-operator"
+27: shift/reduce conflict (shift 17, reduce 8) on "SUB-operator"
+27: shift/reduce conflict (shift 18, reduce 8) on "MUL-operator"
+27: shift/reduce conflict (shift 19, reduce 8) on "DIV-operator"
+27: shift/reduce conflict (shift 20, reduce 8) on "MOD-operator"
+27: shift/reduce conflict (shift 21, reduce 8) on "AND-operator"
+27: shift/reduce conflict (shift 22, reduce 8) on '|'
+state 27
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr "SUB-operator" expr . (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 8
+ ')' reduce 8
+
+
+28: shift/reduce conflict (shift 16, reduce 9) on "ADD-operator"
+28: shift/reduce conflict (shift 17, reduce 9) on "SUB-operator"
+28: shift/reduce conflict (shift 18, reduce 9) on "MUL-operator"
+28: shift/reduce conflict (shift 19, reduce 9) on "DIV-operator"
+28: shift/reduce conflict (shift 20, reduce 9) on "MOD-operator"
+28: shift/reduce conflict (shift 21, reduce 9) on "AND-operator"
+28: shift/reduce conflict (shift 22, reduce 9) on '|'
+state 28
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr "MUL-operator" expr . (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 9
+ ')' reduce 9
+
+
+29: shift/reduce conflict (shift 16, reduce 10) on "ADD-operator"
+29: shift/reduce conflict (shift 17, reduce 10) on "SUB-operator"
+29: shift/reduce conflict (shift 18, reduce 10) on "MUL-operator"
+29: shift/reduce conflict (shift 19, reduce 10) on "DIV-operator"
+29: shift/reduce conflict (shift 20, reduce 10) on "MOD-operator"
+29: shift/reduce conflict (shift 21, reduce 10) on "AND-operator"
+29: shift/reduce conflict (shift 22, reduce 10) on '|'
+state 29
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr "DIV-operator" expr . (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 10
+ ')' reduce 10
+
+
+30: shift/reduce conflict (shift 16, reduce 11) on "ADD-operator"
+30: shift/reduce conflict (shift 17, reduce 11) on "SUB-operator"
+30: shift/reduce conflict (shift 18, reduce 11) on "MUL-operator"
+30: shift/reduce conflict (shift 19, reduce 11) on "DIV-operator"
+30: shift/reduce conflict (shift 20, reduce 11) on "MOD-operator"
+30: shift/reduce conflict (shift 21, reduce 11) on "AND-operator"
+30: shift/reduce conflict (shift 22, reduce 11) on '|'
+state 30
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr "MOD-operator" expr . (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 11
+ ')' reduce 11
+
+
+31: shift/reduce conflict (shift 16, reduce 12) on "ADD-operator"
+31: shift/reduce conflict (shift 17, reduce 12) on "SUB-operator"
+31: shift/reduce conflict (shift 18, reduce 12) on "MUL-operator"
+31: shift/reduce conflict (shift 19, reduce 12) on "DIV-operator"
+31: shift/reduce conflict (shift 20, reduce 12) on "MOD-operator"
+31: shift/reduce conflict (shift 21, reduce 12) on "AND-operator"
+31: shift/reduce conflict (shift 22, reduce 12) on '|'
+state 31
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr "AND-operator" expr . (12)
+ expr : expr . '|' expr (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' shift 22
+ '\n' reduce 12
+ ')' reduce 12
+
+
+32: shift/reduce conflict (shift 16, reduce 13) on "ADD-operator"
+32: shift/reduce conflict (shift 17, reduce 13) on "SUB-operator"
+32: shift/reduce conflict (shift 18, reduce 13) on "MUL-operator"
+32: shift/reduce conflict (shift 19, reduce 13) on "DIV-operator"
+32: shift/reduce conflict (shift 20, reduce 13) on "MOD-operator"
+32: shift/reduce conflict (shift 21, reduce 13) on "AND-operator"
+state 32
+ expr : expr . "ADD-operator" expr (7)
+ expr : expr . "SUB-operator" expr (8)
+ expr : expr . "MUL-operator" expr (9)
+ expr : expr . "DIV-operator" expr (10)
+ expr : expr . "MOD-operator" expr (11)
+ expr : expr . "AND-operator" expr (12)
+ expr : expr . '|' expr (13)
+ expr : expr '|' expr . (13)
+
+ "ADD-operator" shift 16
+ "SUB-operator" shift 17
+ "MUL-operator" shift 18
+ "DIV-operator" shift 19
+ "MOD-operator" shift 20
+ "AND-operator" shift 21
+ '|' reduce 13
+ '\n' reduce 13
+ ')' reduce 13
+
+
+State 12 contains 6 shift/reduce conflicts.
+State 26 contains 7 shift/reduce conflicts.
+State 27 contains 7 shift/reduce conflicts.
+State 28 contains 7 shift/reduce conflicts.
+State 29 contains 7 shift/reduce conflicts.
+State 30 contains 7 shift/reduce conflicts.
+State 31 contains 7 shift/reduce conflicts.
+State 32 contains 6 shift/reduce conflicts.
+
+
+28 terminals, 5 nonterminals
+19 grammar rules, 33 states
diff --git a/contrib/byacc/test/quote_calc4.tab.c b/contrib/byacc/test/quote_calc4.tab.c
new file mode 100644
index 000000000000..da2f25e800a1
--- /dev/null
+++ b/contrib/byacc/test/quote_calc4.tab.c
@@ -0,0 +1,688 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+
+#ifndef yyparse
+#define yyparse quote_calc4_parse
+#endif /* yyparse */
+
+#ifndef yylex
+#define yylex quote_calc4_lex
+#endif /* yylex */
+
+#ifndef yyerror
+#define yyerror quote_calc4_error
+#endif /* yyerror */
+
+#ifndef yychar
+#define yychar quote_calc4_char
+#endif /* yychar */
+
+#ifndef yyval
+#define yyval quote_calc4_val
+#endif /* yyval */
+
+#ifndef yylval
+#define yylval quote_calc4_lval
+#endif /* yylval */
+
+#ifndef yydebug
+#define yydebug quote_calc4_debug
+#endif /* yydebug */
+
+#ifndef yynerrs
+#define yynerrs quote_calc4_nerrs
+#endif /* yynerrs */
+
+#ifndef yyerrflag
+#define yyerrflag quote_calc4_errflag
+#endif /* yyerrflag */
+
+#ifndef yylhs
+#define yylhs quote_calc4_lhs
+#endif /* yylhs */
+
+#ifndef yylen
+#define yylen quote_calc4_len
+#endif /* yylen */
+
+#ifndef yydefred
+#define yydefred quote_calc4_defred
+#endif /* yydefred */
+
+#ifndef yydgoto
+#define yydgoto quote_calc4_dgoto
+#endif /* yydgoto */
+
+#ifndef yysindex
+#define yysindex quote_calc4_sindex
+#endif /* yysindex */
+
+#ifndef yyrindex
+#define yyrindex quote_calc4_rindex
+#endif /* yyrindex */
+
+#ifndef yygindex
+#define yygindex quote_calc4_gindex
+#endif /* yygindex */
+
+#ifndef yytable
+#define yytable quote_calc4_table
+#endif /* yytable */
+
+#ifndef yycheck
+#define yycheck quote_calc4_check
+#endif /* yycheck */
+
+#ifndef yyname
+#define yyname quote_calc4_name
+#endif /* yyname */
+
+#ifndef yyrule
+#define yyrule quote_calc4_rule
+#endif /* yyrule */
+#define YYPREFIX "quote_calc4_"
+
+#define YYPURE 0
+
+#line 2 "quote_calc4.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 109 "quote_calc4.tab.c"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short quote_calc4_lhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short quote_calc4_len[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short quote_calc4_defred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short quote_calc4_dgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short quote_calc4_sindex[] = { 0,
+ -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
+ 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short quote_calc4_rindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short quote_calc4_gindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 259
+static const short quote_calc4_table[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
+ 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
+ 18, 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
+ 15, 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short quote_calc4_check[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
+ 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
+ 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
+ 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
+ 260, 262, 262, 264, 264, 266, 266, 268, 268,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
+"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
+"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr \"ADD-operator\" expr",
+"expr : expr \"SUB-operator\" expr",
+"expr : expr \"MUL-operator\" expr",
+"expr : expr \"DIV-operator\" expr",
+"expr : expr \"MOD-operator\" expr",
+"expr : expr \"AND-operator\" expr",
+"expr : expr '|' expr",
+"expr : \"SUB-operator\" expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc4.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 362 "quote_calc4.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc4.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc4.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc4.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc4.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc4.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc4.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc4.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc4.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 628 "quote_calc4.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/contrib/byacc/test/quote_calc4.tab.h b/contrib/byacc/test/quote_calc4.tab.h
new file mode 100644
index 000000000000..1a4657903411
--- /dev/null
+++ b/contrib/byacc/test/quote_calc4.tab.h
@@ -0,0 +1,9 @@
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
diff --git a/contrib/byacc/test/quote_calc4.y b/contrib/byacc/test/quote_calc4.y
new file mode 100644
index 000000000000..34b790e67f12
--- /dev/null
+++ b/contrib/byacc/test/quote_calc4.y
@@ -0,0 +1,112 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+%}
+
+%start list
+
+%token OP_ADD "ADD-operator"
+%token OP_SUB "SUB-operator"
+%token OP_MUL "MUL-operator"
+%token OP_DIV "DIV-operator"
+%token OP_MOD "MOD-operator"
+%token OP_AND "AND-operator"
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr "ADD-operator" expr
+ { $$ = $1 + $3; }
+ | expr "SUB-operator" expr
+ { $$ = $1 - $3; }
+ | expr "MUL-operator" expr
+ { $$ = $1 * $3; }
+ | expr "DIV-operator" expr
+ { $$ = $1 / $3; }
+ | expr "MOD-operator" expr
+ { $$ = $1 % $3; }
+ | expr "AND-operator" expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | "SUB-operator" expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/contrib/byacc/test/run_lint.sh b/contrib/byacc/test/run_lint.sh
new file mode 100755
index 000000000000..3230551045c7
--- /dev/null
+++ b/contrib/byacc/test/run_lint.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+# $Id: run_lint.sh,v 1.1 2010/06/08 09:00:58 tom Exp $
+# vi:ts=4 sw=4:
+
+# run lint on each of the ".c" files in the test directory
+
+if test $# = 1
+then
+ PROG_DIR=`pwd`
+ TEST_DIR=$1
+else
+ PROG_DIR=..
+ TEST_DIR=.
+fi
+
+echo '** '`date`
+for i in ${TEST_DIR}/*.c
+do
+ make -f $PROG_DIR/makefile lint C_FILES=$i srcdir=$PROG_DIR
+done
diff --git a/contrib/byacc/test/run_make.sh b/contrib/byacc/test/run_make.sh
new file mode 100755
index 000000000000..2bbe95d1841f
--- /dev/null
+++ b/contrib/byacc/test/run_make.sh
@@ -0,0 +1,139 @@
+#!/bin/sh
+# $Id: run_make.sh,v 1.9 2012/01/15 22:35:01 tom Exp $
+# vi:ts=4 sw=4:
+
+# do a test-compile on each of the ".c" files in the test-directory
+
+BISON=`bison --version 2>/dev/null | head -n 1 | sed -e 's/^[^0-9.]*//' -e 's/[^0-9.]*$//'`
+
+if test $# = 1
+then
+ PROG_DIR=`pwd`
+ TEST_DIR=$1
+else
+ PROG_DIR=..
+ TEST_DIR=.
+fi
+
+MY_MAKE="make -f $PROG_DIR/makefile srcdir=$PROG_DIR VPATH=$TEST_DIR"
+
+echo '** '`date`
+for input in ${TEST_DIR}/*.c
+do
+ test -f "$input" || continue
+
+ obj=`basename "$input" .c`.o
+
+ $MY_MAKE $obj C_FILES=$input
+ test -f $obj && rm $obj
+
+ DEFS=
+ case $input in #(vi
+ ${TEST_DIR}/pure_*)
+ # DEFS="-DYYLEX_PARAM=flag -DYYLEX_PARAM_TYPE=int"
+ ;;
+ esac
+
+ if test "x$DEFS" != "x"
+ then
+ $MY_MAKE $obj C_FILES=$input DEFINES="$DEFS"
+ test -f $obj && rm -f $obj
+ fi
+done
+
+if test -n "$BISON"
+then
+ echo "** compare with bison $BISON"
+ for input in ${TEST_DIR}/*.y
+ do
+ test -f "$input" || continue
+
+ # Bison does not support pure-parser from command-line.
+ # Also, its support for %expect is generally broken.
+ # Work around these issues using a temporary file.
+
+ echo "... testing $input"
+ rm -f run_make.[coy]
+
+ case $input in
+ pure_*)
+ if test -z `fgrep -l '%pure-parser' $input`
+ then
+ echo "%pure-parser" >>run_make.y
+ fi
+ ;;
+ esac
+
+ sed -e '/^%expect/s,%expect.*,,' $input >>run_make.y
+
+ bison -y run_make.y
+ sed -e '/^#line/s,"run_make.y","'$input'",' y.tab.c >run_make.c
+
+ rm -f y.tab.c
+
+ input=run_make.c
+ object=run_make.o
+ if test -f $input
+ then
+ $MY_MAKE $object DEFINES='-DYYENABLE_NLS=0 -DYYLTYPE_IS_TRIVIAL=1 -DYYSTACK_USE_ALLOCA=0 -DYYMAXDEPTH=0'
+ else
+ echo "?? $input not found"
+ fi
+ rm -f run_make.[coy]
+ done
+fi
+
+YACC=
+for name in /usr/ccs/bin/yacc
+do
+ if test -f $name
+ then
+ YACC=$name
+ fi
+done
+
+if test -n "$YACC"
+then
+ echo "** compare with $YACC"
+ for input in ${TEST_DIR}/*.y
+ do
+ test -f "$input" || continue
+
+ echo "... testing $input"
+ rm -f run_make.[coy]
+
+ case $input in
+ pure_*)
+ echo "... skipping $input"
+ continue;
+ ;;
+ *)
+ if fgrep '%pure-parser' $input >/dev/null ||
+ fgrep '%parse-param' $input >/dev/null ||
+ fgrep '%lex-param' $input >/dev/null ||
+ fgrep 'YYLEX_PARAM' $input >/dev/null
+ then
+ echo "... skipping $input"
+ continue;
+ fi
+ ;;
+ esac
+
+ sed -e '/^%expect/s,%expect.*,,' $input >>run_make.y
+
+ $YACC run_make.y
+ sed -e '/^#line/s,"run_make.y","'$input'",' y.tab.c >run_make.c
+
+ rm -f y.tab.c
+
+ input=run_make.c
+ object=run_make.o
+ if test -f $input
+ then
+ $MY_MAKE $object
+ else
+ echo "?? $input not found"
+ fi
+ rm -f run_make.[coy]
+ done
+fi
diff --git a/contrib/byacc/test/run_test.sh b/contrib/byacc/test/run_test.sh
new file mode 100755
index 000000000000..ae8591b8c68f
--- /dev/null
+++ b/contrib/byacc/test/run_test.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+# $Id: run_test.sh,v 1.8 2012/01/15 11:50:35 tom Exp $
+# vi:ts=4 sw=4:
+
+if test $# = 1
+then
+ PROG_DIR=`pwd`
+ TEST_DIR=$1
+else
+ PROG_DIR=..
+ TEST_DIR=.
+fi
+
+YACC=$PROG_DIR/yacc
+
+tmpfile=temp$$
+rm -f test-*
+
+echo '** '`date`
+for input in ${TEST_DIR}/*.y
+do
+ case $input in
+ test*)
+ echo "?? ignored $input"
+ ;;
+ *)
+ root=`basename $input .y`
+ ROOT="test-$root"
+ prefix=${root}_
+
+ OPTS=
+ OPT2=
+ TYPE=".output .tab.c .tab.h"
+ case $input in
+ ${TEST_DIR}/code_*)
+ OPTS="$OPTS -r"
+ TYPE="$TYPE .code.c"
+ prefix=`echo "$prefix" | sed -e 's/^code_//'`
+ ;;
+ ${TEST_DIR}/pure_*)
+ OPTS="$OPTS -P"
+ prefix=`echo "$prefix" | sed -e 's/^pure_//'`
+ ;;
+ ${TEST_DIR}/quote_*)
+ OPT2="-s"
+ ;;
+ esac
+
+ for opt2 in "" $OPT2
+ do
+ $YACC $OPTS $opt2 -v -d -p $prefix -b $ROOT${opt2} $input
+ for type in $TYPE
+ do
+ REF=${TEST_DIR}/${root}${opt2}${type}
+ CMP=${ROOT}${opt2}${type}
+ if test ! -f $CMP
+ then
+ echo "...not found $CMP"
+ else
+ sed -e s,$CMP,$REF, \
+ -e /YYPATCH/d \
+ -e 's,#line \([1-9][0-9]*\) "'$TEST_DIR'/,#line \1 ",' \
+ < $CMP >$tmpfile \
+ && mv $tmpfile $CMP
+ if test ! -f $REF
+ then
+ mv $CMP $REF
+ echo "...saved $REF"
+ elif ( cmp -s $REF $CMP )
+ then
+ echo "...ok $REF"
+ rm -f $CMP
+ else
+ echo "...diff $REF"
+ diff -u $REF $CMP
+ fi
+ fi
+ done
+ done
+ ;;
+ esac
+done
diff --git a/usr.bin/yacc/verbose.c b/contrib/byacc/verbose.c
index 27fd4947439f..118f8b402799 100644
--- a/usr.bin/yacc/verbose.c
+++ b/contrib/byacc/verbose.c
@@ -1,73 +1,35 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)verbose.c 5.3 (Berkeley) 1/20/91";
-#endif
-#endif
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stdlib.h>
-#include "defs.h"
+/* $Id: verbose.c,v 1.9 2010/06/09 08:58:29 tom Exp $ */
-static short *null_rules;
+#include "defs.h"
-static void log_unused(void);
static void log_conflicts(void);
-static void print_actions(int);
-static void print_conflicts(int);
-static void print_core(int);
-static void print_gotos(int);
-static void print_nulls(int);
-static void print_reductions(action *, register int);
-static void print_shifts(action *);
-static void print_state(int);
+static void log_unused(void);
+static void print_actions(int stateno);
+static void print_conflicts(int state);
+static void print_core(int state);
+static void print_gotos(int stateno);
+static void print_nulls(int state);
+static void print_shifts(action *p);
+static void print_state(int state);
+static void print_reductions(action *p, int defred2);
+
+static short *null_rules;
void
verbose(void)
{
int i;
- if (!vflag) return;
+ if (!vflag)
+ return;
+
+ null_rules = (short *)MALLOC((unsigned)nrules * sizeof(short));
+ NO_SPACE(null_rules);
- null_rules = malloc(nrules*sizeof(short));
- if (null_rules == 0) no_space();
fprintf(verbose_file, "\f\n");
for (i = 0; i < nstates; i++)
print_state(i);
- free(null_rules);
+ FREE(null_rules);
if (nunused)
log_unused();
@@ -79,7 +41,6 @@ verbose(void)
fprintf(verbose_file, "%d grammar rules, %d states\n", nrules - 2, nstates);
}
-
static void
log_unused(void)
{
@@ -99,7 +60,6 @@ log_unused(void)
}
}
-
static void
log_conflicts(void)
{
@@ -111,24 +71,21 @@ log_conflicts(void)
if (SRconflicts[i] || RRconflicts[i])
{
fprintf(verbose_file, "State %d contains ", i);
- if (SRconflicts[i] == 1)
- fprintf(verbose_file, "1 shift/reduce conflict");
- else if (SRconflicts[i] > 1)
- fprintf(verbose_file, "%d shift/reduce conflicts",
- SRconflicts[i]);
+ if (SRconflicts[i] > 0)
+ fprintf(verbose_file, "%d shift/reduce conflict%s",
+ SRconflicts[i],
+ PLURAL(SRconflicts[i]));
if (SRconflicts[i] && RRconflicts[i])
fprintf(verbose_file, ", ");
- if (RRconflicts[i] == 1)
- fprintf(verbose_file, "1 reduce/reduce conflict");
- else if (RRconflicts[i] > 1)
- fprintf(verbose_file, "%d reduce/reduce conflicts",
- RRconflicts[i]);
+ if (RRconflicts[i] > 0)
+ fprintf(verbose_file, "%d reduce/reduce conflict%s",
+ RRconflicts[i],
+ PLURAL(RRconflicts[i]));
fprintf(verbose_file, ".\n");
}
}
}
-
static void
print_state(int state)
{
@@ -142,13 +99,14 @@ print_state(int state)
print_actions(state);
}
-
static void
print_conflicts(int state)
{
- int symbol, act = 0, number = 0;
+ int symbol, act, number;
action *p;
+ act = 0; /* not shift/reduce... */
+ number = -1;
symbol = -1;
for (p = parser[state]; p; p = p->next)
{
@@ -190,7 +148,6 @@ print_conflicts(int state)
}
}
-
static void
print_core(int state)
{
@@ -208,11 +165,12 @@ print_core(int state)
{
sp1 = sp = ritem + statep->items[i];
- while (*sp >= 0) ++sp;
+ while (*sp >= 0)
+ ++sp;
rule = -(*sp);
fprintf(verbose_file, "\t%s : ", symbol_name[rlhs[rule]]);
- for (sp = ritem + rrhs[rule]; sp < sp1; sp++)
+ for (sp = ritem + rrhs[rule]; sp < sp1; sp++)
fprintf(verbose_file, "%s ", symbol_name[*sp]);
putc('.', verbose_file);
@@ -226,21 +184,20 @@ print_core(int state)
}
}
-
static void
print_nulls(int state)
{
action *p;
- int i, j, k, nnulls;
+ Value_t i, j, k, nnulls;
nnulls = 0;
for (p = parser[state]; p; p = p->next)
{
if (p->action_code == REDUCE &&
- (p->suppressed == 0 || p->suppressed == 1))
+ (p->suppressed == 0 || p->suppressed == 1))
{
i = p->number;
- if (rrhs[i] + 1 == rrhs[i+1])
+ if (rrhs[i] + 1 == rrhs[i + 1])
{
for (j = 0; j < nnulls && i > null_rules[j]; ++j)
continue;
@@ -253,8 +210,8 @@ print_nulls(int state)
else if (i != null_rules[j])
{
++nnulls;
- for (k = nnulls - 1; k > j; --k)
- null_rules[k] = null_rules[k-1];
+ for (k = (Value_t) (nnulls - 1); k > j; --k)
+ null_rules[k] = null_rules[k - 1];
null_rules[j] = i;
}
}
@@ -270,7 +227,6 @@ print_nulls(int state)
fprintf(verbose_file, "\n");
}
-
static void
print_actions(int stateno)
{
@@ -297,7 +253,6 @@ print_actions(int stateno)
}
}
-
static void
print_shifts(action *p)
{
@@ -317,20 +272,19 @@ print_shifts(action *p)
{
if (p->action_code == SHIFT && p->suppressed == 0)
fprintf(verbose_file, "\t%s shift %d\n",
- symbol_name[p->symbol], p->number);
+ symbol_name[p->symbol], p->number);
}
}
}
-
static void
-print_reductions(action *p, int defreduct)
+print_reductions(action *p, int defred2)
{
int k, anyreds;
action *q;
anyreds = 0;
- for (q = p; q ; q = q->next)
+ for (q = p; q; q = q->next)
{
if (q->action_code == REDUCE && q->suppressed < 2)
{
@@ -345,7 +299,7 @@ print_reductions(action *p, int defreduct)
{
for (; p; p = p->next)
{
- if (p->action_code == REDUCE && p->number != defreduct)
+ if (p->action_code == REDUCE && p->number != defred2)
{
k = p->number - 2;
if (p->suppressed == 0)
@@ -354,26 +308,25 @@ print_reductions(action *p, int defreduct)
}
}
- if (defreduct > 0)
- fprintf(verbose_file, "\t. reduce %d\n", defreduct - 2);
+ if (defred2 > 0)
+ fprintf(verbose_file, "\t. reduce %d\n", defred2 - 2);
}
}
-
static void
print_gotos(int stateno)
{
int i, k;
int as;
- short *tostate;
+ short *to_state2;
shifts *sp;
putc('\n', verbose_file);
sp = shift_table[stateno];
- tostate = sp->shift;
+ to_state2 = sp->shift;
for (i = 0; i < sp->nshifts; ++i)
{
- k = tostate[i];
+ k = to_state2[i];
as = accessing_symbol[k];
if (ISVAR(as))
fprintf(verbose_file, "\t%s goto %d\n", symbol_name[as], k);
diff --git a/contrib/byacc/vmsbuild.com b/contrib/byacc/vmsbuild.com
new file mode 100644
index 000000000000..94b02c688462
--- /dev/null
+++ b/contrib/byacc/vmsbuild.com
@@ -0,0 +1,210 @@
+$! $Id: vmsbuild.com,v 1.1 2000/11/21 00:38:46 tom Exp $
+$! VMS build-script for BYACC. Requires installed C compiler
+$!
+$! Screen Configurations
+$! ---------------------
+$! To build BYACC, type:
+$! $ @vmsbuild [BYACC [<compiler> [bld_target]]]
+$!
+$! where:
+$! <compiler> :== { decc | vaxc }
+$!
+$! The default compiler on VAX hosts is vaxc, else decc (Alpha hosts).
+$!
+$! -----------------------------------------------------------
+$ hlp = f$edit("''p1'", "UPCASE")
+$ if "''hlp'" .eqs. "HELP" .or. -
+ "''hlp'" .eqs. "-H" .or. -
+ "''hlp'" .eqs. "-?" .or. -
+ "''hlp'" .eqs. "?" then gosub usage
+$ goto start
+$!
+$ vaxc_config:
+$ comp = "__vaxc__=1"
+$ CFLAGS = "/VAXC"
+$ DEFS = ",HAVE_STRERROR"
+$ using_vaxc = 1
+$ return
+$!
+$ decc_config:
+$ comp = "__decc__=1"
+$ CFLAGS = "/DECC/prefix=all"
+$ DEFS = ",HAVE_ALARM,HAVE_STRERROR"
+$ return
+$!
+$ usage:
+$ write sys$output "usage: "
+$ write sys$output " $ @vmsbuild [BYACC [{decc | vaxc} [<bldtarget>]]]"
+$ exit 2
+$!
+$ start:
+$! -----------------------------------------------------------
+$! pickup user's compiler choice, if any
+$! -----------------------------------------------------------
+$!
+$ comp = ""
+$ using_vaxc = 0
+$ if "''p2'" .nes. ""
+$ then
+$ comp = f$edit(p2, "UPCASE")
+$ if "''comp'" .eqs. "VAXC"
+$ then
+$ gosub vaxc_config
+$ else
+$ if "''comp'" .eqs. "DECC"
+$ then
+$ gosub decc_config
+$ else
+$ gosub usage
+$ endif
+$ endif
+$ endif
+$! -----------------------------------------------------------
+$! Build the option-file
+$!
+$ open/write optf vms_link.opt
+$ write optf "closure.obj"
+$ write optf "error.obj"
+$ write optf "lalr.obj"
+$ write optf "lr0.obj"
+$ write optf "mkpar.obj"
+$ write optf "output.obj"
+$ write optf "reader.obj"
+$ write optf "skeleton.obj"
+$ write optf "symtab.obj"
+$ write optf "verbose.obj"
+$ write optf "warshall.obj"
+$! ----------------------------------
+$! Look for the compiler used and specify architecture.
+$!
+$ CC = "CC"
+$ if f$getsyi("HW_MODEL").ge.1024
+$ then
+$ arch = "__alpha__=1"
+$ if "''comp'" .eqs. "" then gosub decc_config
+$ else
+$ arch = "__vax__=1"
+$ if "''comp'" .nes. "" then goto screen_config
+$ if f$search("SYS$SYSTEM:VAXC.EXE").nes.""
+$ then
+$ gosub vaxc_config
+$ else
+$ if f$search("SYS$SYSTEM:DECC$COMPILER.EXE").nes.""
+$ then
+$ gosub decc_config
+$ else
+$ DEFS = ",HAVE_STRERROR"
+$ if f$trnlnm("GNU_CC").eqs.""
+$ then
+$ write sys$output "C compiler required to rebuild BYACC"
+$ close optf
+$ exit
+$ else
+$ write optf "gnu_cc:[000000]gcclib.olb/lib"
+$ comp = "__gcc__=1"
+$ CC = "GCC"
+$ endif
+$ endif
+$ endif
+$ endif
+$!
+$ screen_config:
+$!
+$ if using_vaxc .eq. 1 then write optf "sys$library:vaxcrtl.exe/share"
+$ close optf
+$! -------------- vms_link.opt is created -------------
+$ if f$edit("''p1'", "UPCASE") .eqs. "VMS_LINK.OPT"
+$ then
+$! mms called this script to build vms_link.opt. all done
+$ exit
+$ endif
+$!
+$ if f$search("SYS$SYSTEM:MMS.EXE").eqs.""
+$ then
+$! can also use /Debug /Listing, /Show=All
+$
+$ CFLAGS := 'CFLAGS/Diagnostics /Define=("''DEFS'") /Include=([])
+$
+$ if "''p3'" .nes. "" then goto 'p3
+$!
+$!
+$ all :
+$!
+$ call make closure
+$ call make error
+$ call make lalr
+$ call make lr0
+$ call make main
+$ call make mkpar
+$ call make output
+$ call make reader
+$ call make skeleton
+$ call make symtab
+$ call make verbose
+$ call make warshall
+$!
+$ link /exec='target/map/cross main.obj, vms_link/opt
+$ goto build_last
+$!
+$ install :
+$ WRITE SYS$ERROR "** no rule for install"
+$ goto build_last
+$!
+$ clobber :
+$ if f$search("BYACC.com") .nes. "" then delete BYACC.com;*
+$ if f$search("*.exe") .nes. "" then delete *.exe;*
+$! fallthru
+$!
+$ clean :
+$ if f$search("*.obj") .nes. "" then delete *.obj;*
+$ if f$search("*.bak") .nes. "" then delete *.bak;*
+$ if f$search("*.lis") .nes. "" then delete *.lis;*
+$ if f$search("*.log") .nes. "" then delete *.log;*
+$ if f$search("*.map") .nes. "" then delete *.map;*
+$ if f$search("*.opt") .nes. "" then delete *.opt;*
+$! fallthru
+$!
+$ build_last :
+$ if f$search("*.dia") .nes. "" then delete *.dia;*
+$ if f$search("*.lis") .nes. "" then purge *.lis
+$ if f$search("*.obj") .nes. "" then purge *.obj
+$ if f$search("*.map") .nes. "" then purge *.map
+$ if f$search("*.opt") .nes. "" then purge *.opt
+$ if f$search("*.exe") .nes. "" then purge *.exe
+$ if f$search("*.log") .nes. "" then purge *.log
+$! fallthru
+$!
+$ vms_link_opt :
+$ exit 1
+$!
+$! Runs BYACC from the current directory (used for testing)
+$ byacc_com :
+$ if "''f$search("BYACC.com")'" .nes. "" then delete BYACC.com;*
+$ copy nl: BYACC.com
+$ open/append test_script BYACC.com
+$ write test_script "$ temp = f$environment(""procedure"")"
+$ write test_script "$ temp = temp -"
+$ write test_script " - f$parse(temp,,,""version"",""syntax_only"") -"
+$ write test_script " - f$parse(temp,,,""type"",""syntax_only"")"
+$ write test_script "$ BYACC :== $ 'temp'.exe"
+$ write test_script "$ define/user_mode sys$input sys$command"
+$ write test_script "$ define/user_mode sys$output sys$command"
+$ write test_script "$ BYACC 'p1 'p2 'p3 'p4 'p5 'p6 'p7 'p8"
+$ close test_script
+$ write sys$output "** made BYACC.com"
+$ exit
+$!
+$ else
+$ mms/ignore=warning/macro=('comp','mmstar','arch') 'p3
+$ endif
+$ exit
+$ make: subroutine
+$ if f$search("''p1'.obj") .eqs. ""
+$ then
+$ write sys$output "compiling ''p1'"
+$ 'CC 'CFLAGS 'p1.c
+$ if f$search("''p1'.dia") .nes. "" then delete 'p1.dia;*
+$ endif
+$exit
+$ return
+$ endsubroutine
diff --git a/contrib/byacc/warshall.c b/contrib/byacc/warshall.c
new file mode 100644
index 000000000000..efb7cf447974
--- /dev/null
+++ b/contrib/byacc/warshall.c
@@ -0,0 +1,82 @@
+/* $Id: warshall.c,v 1.7 2010/06/06 22:48:51 tom Exp $ */
+
+#include "defs.h"
+
+static void
+transitive_closure(unsigned *R, int n)
+{
+ int rowsize;
+ unsigned i;
+ unsigned *rowj;
+ unsigned *rp;
+ unsigned *rend;
+ unsigned *ccol;
+ unsigned *relend;
+ unsigned *cword;
+ unsigned *rowi;
+
+ rowsize = WORDSIZE(n);
+ relend = R + n * rowsize;
+
+ cword = R;
+ i = 0;
+ rowi = R;
+ while (rowi < relend)
+ {
+ ccol = cword;
+ rowj = R;
+
+ while (rowj < relend)
+ {
+ if (*ccol & (unsigned)(1 << i))
+ {
+ rp = rowi;
+ rend = rowj + rowsize;
+ while (rowj < rend)
+ *rowj++ |= *rp++;
+ }
+ else
+ {
+ rowj += rowsize;
+ }
+
+ ccol += rowsize;
+ }
+
+ if (++i >= BITS_PER_WORD)
+ {
+ i = 0;
+ cword++;
+ }
+
+ rowi += rowsize;
+ }
+}
+
+void
+reflexive_transitive_closure(unsigned *R, int n)
+{
+ int rowsize;
+ unsigned i;
+ unsigned *rp;
+ unsigned *relend;
+
+ transitive_closure(R, n);
+
+ rowsize = WORDSIZE(n);
+ relend = R + n * rowsize;
+
+ i = 0;
+ rp = R;
+ while (rp < relend)
+ {
+ *rp |= (unsigned)(1 << i);
+ if (++i >= BITS_PER_WORD)
+ {
+ i = 0;
+ rp++;
+ }
+
+ rp += rowsize;
+ }
+}
diff --git a/contrib/byacc/yacc.1 b/contrib/byacc/yacc.1
new file mode 100644
index 000000000000..239380a360b1
--- /dev/null
+++ b/contrib/byacc/yacc.1
@@ -0,0 +1,242 @@
+.\" $Id: yacc.1,v 1.18 2012/01/15 18:12:28 tom Exp $
+.\"
+.\" .TH YACC 1 "July\ 15,\ 1990"
+.\" .UC 6
+.de ES
+.ne 8
+.nf
+.sp
+.in +4
+..
+.de EE
+.in -4
+.fi
+..
+.\" Bulleted paragraph
+.de bP
+.IP \(bu 4
+..
+.TH YACC 1 "September 7, 2011" "Berkeley Yacc" "User Commands"
+.SH NAME
+Yacc \- an LALR(1) parser generator
+.SH SYNOPSIS
+.B yacc [ -dgilrtv ] [ \-b
+.I file_prefix
+.B ] [ \-p
+.I symbol_prefix
+.B ]
+.I filename
+.SH DESCRIPTION
+.B Yacc
+reads the grammar specification in the file
+.I filename
+and generates an LALR(1) parser for it.
+The parsers consist of a set of LALR(1) parsing tables and a driver routine
+written in the C programming language.
+.B Yacc
+normally writes the parse tables and the driver routine to the file
+.IR y.tab.c.
+.PP
+The following options are available:
+.TP 5
+\fB\-b \fP\fIfile_prefix\fR
+The
+.B \-b
+option changes the prefix prepended to the output file names to
+the string denoted by
+.IR file_prefix.
+The default prefix is the character
+.IR y.
+.TP
+.B \-d
+The \fB-d\fR option causes the header file
+.BR y.tab.h
+to be written.
+It contains #define's for the token identifiers.
+.TP
+.B \-g
+The
+.B \-g
+option causes a graphical description of the generated LALR(1) parser to
+be written to the file
+.BR y.dot
+in graphviz format, ready to be processed by dot(1).
+.TP
+.B \-i
+The \fB-i\fR option causes a supplementary header file
+.BR y.tab.i
+to be written.
+It contains extern declarations
+and supplementary #define's as needed to map the conventional \fIyacc\fP
+\fByy\fP-prefixed names to whatever the \fB-p\fP option may specify.
+The code file, e.g., \fBy.tab.c\fP is modified to #include this file
+as well as the \fBy.tab.h\fP file, enforcing consistent usage of the
+symbols defined in those files.
+.IP
+The supplementary header file makes it simpler to separate compilation
+of lex- and yacc-files.
+.TP
+.B \-l
+If the
+.B \-l
+option is not specified,
+.B yacc
+will insert \fI#line\fP directives in the generated code.
+The \fI#line\fP directives let the C compiler relate errors in the
+generated code to the user's original code.
+If the \fB-l\fR option is specified,
+.B yacc
+will not insert the \fI#line\fP directives.
+\&\fI#line\fP directives specified by the user will be retained.
+.TP
+\fB\-o \fP\fIoutput_file\fR
+specify the filename for the parser file.
+If this option is not given, the output filename is
+the file prefix concatenated with the file suffix, e.g., \fBy.tab.c\fP.
+This overrides the \fB-p\fP option.
+.TP
+\fB\-p \fP\fIsymbol_prefix\fR
+The
+.B \-p
+option changes the prefix prepended to yacc-generated symbols to
+the string denoted by
+.IR symbol_prefix.
+The default prefix is the string
+.BR yy.
+.TP
+.B \-P
+create a reentrant parser, e.g., "%pure-parser".
+.TP
+.B \-r
+The
+.B \-r
+option causes
+.B yacc
+to produce separate files for code and tables. The code file
+is named
+.IR y.code.c,
+and the tables file is named
+.IR y.tab.c.
+The prefix "\fIy.\fP" can be overridden using the \fB\-b\fP option.
+.TP
+.B \-s
+suppress "\fB#define\fP" statements generated for string literals in
+a "\fB%token\fP" statement, to more closely match original \fByacc\fP behavior.
+.IP
+Normally when \fByacc\fP sees a line such as
+.ES
+%token OP_ADD "ADD"
+.EE
+.IP
+it notices that the quoted "ADD" is a valid C identifier,
+and generates a #define not only for OP_ADD,
+but for ADD as well,
+e.g.,
+.ES
+#define OP_ADD 257
+.br
+#define ADD 258
+.EE
+.IP
+The original \fByacc\fP does not generate the second "\fB#define\fP".
+The \fB\-s\fP option suppresses this "\fB#define\fP".
+.IP
+POSIX (IEEE 1003.1 2004) documents only names and numbers for "\fB%token\fP",
+though original \fByacc\fP and bison also accept string literals.
+.TP
+.B \-t
+The
+.B \-t
+option changes the preprocessor directives generated by
+.B yacc
+so that debugging statements will be incorporated in the compiled code.
+.TP
+.B \-v
+The
+.B \-v
+option causes a human-readable description of the generated parser to
+be written to the file
+.IR y.output.
+.TP
+.B \-V
+print the version number to the standard output.
+.TP
+.B \-y
+\fByacc\fP ignores this option,
+which bison supports for ostensible POSIX compatibility.
+.SH EXTENSIONS
+.B yacc
+provides some extensions for compatibility with bison and other implementations
+of yacc:
+.TP
+\fB %expect\fP \fInumber\fP
+tell \fByacc\fP the expected number of shift/reduce conflicts.
+That makes it only report the number if it differs.
+.TP
+\fB %expect-rr\fP \fInumber\fP
+tell \fByacc\fP the expected number of reduce/reduce conflicts.
+That makes it only report the number if it differs.
+This is (unlike bison) allowable in LALR parsers.
+.TP
+\fB %lex-param\fP { \fIargument-declaration\fP }
+By default, the lexer accepts no parameters, e.g., \fByylex()\fP.
+Use this directive to add parameter declarations for your customized lexer.
+.TP
+\fB %parse-param\fP { \fIargument-declaration\fP }
+By default, the parser accepts no parameters, e.g., \fByyparse()\fP.
+Use this directive to add parameter declarations for your customized parser.
+.TP
+\fB %pure-parser\fP
+Most variables (other than \fByydebug\fP and \fByynerrs\fP) are
+allocated on the stack within \fByyparse\fP, making the parser reasonably
+reentrant.
+.SH PORTABILITY
+According to Robert Corbett,
+.ES
+ Berkeley Yacc is an LALR(1) parser generator. Berkeley Yacc has been made
+as compatible as possible with AT&T Yacc. Berkeley Yacc can accept any input
+specification that conforms to the AT&T Yacc documentation. Specifications
+that take advantage of undocumented features of AT&T Yacc will probably be
+rejected.
+.EE
+.PP
+The rationale in
+.ES
+http://pubs.opengroup.org/onlinepubs/9699919799/utilities/yacc.html
+.EE
+.PP
+documents some features of AT&T yacc which are no longer required for POSIX
+compliance.
+.PP
+That said, you may be interested in reusing grammary files with some
+other implementation which is not strictly compatible with AT&T yacc.
+For instance, there is bison.
+Here are a few differences:
+.bP
+\fBYacc\fP accepts an equals mark preceding the left curly brace
+of an action (as in the original grammar file \fBftp.y\fP):
+.ES
+ | STAT CRLF
+ = {
+ statcmd();
+ }
+.EE
+.bP
+\fBYacc\fP and bison emit code in different order, and in particular bison
+makes forward reference to common functions such as yylex, yyparse and
+yyerror without providing prototypes.
+.bP
+Bison's support for "%expect" is broken in more than one release.
+For best results using bison, delete that directive.
+.bP
+Bison has no equivalent for some of \fByacc\fP's commmand-line options,
+relying on directives embedded in the grammar file.
+.bP
+Bison's "\fB\-y\fP" option does not affect bison's lack of support for
+features of AT&T yacc which were deemed obsolescent.
+.
+.SH DIAGNOSTICS
+If there are rules that are never reduced, the number of such rules is
+reported on standard error.
+If there are any LALR(1) conflicts, the number of conflicts is reported
+on standard error.
diff --git a/contrib/com_err/com_err.3 b/contrib/com_err/com_err.3
index b71203aa11b5..0cee34aa0ef6 100644
--- a/contrib/com_err/com_err.3
+++ b/contrib/com_err/com_err.3
@@ -54,7 +54,7 @@ Common Error Library (libcom_err, -lcom_err)
.Sh SYNOPSIS
.Fd #include <stdio.h>
.Fd #include <stdarg.h>
-.Fd #include <krb5/com_err.h>
+.Fd #include <com_err.h>
.Fd #include \&"XXX_err.h\&"
.Pp
typedef void (*errf)(const char *, long, const char *, ...);
diff --git a/contrib/gcc/config/i386/freebsd.h b/contrib/gcc/config/i386/freebsd.h
index a69a8c67eb39..3faa4f22fed6 100644
--- a/contrib/gcc/config/i386/freebsd.h
+++ b/contrib/gcc/config/i386/freebsd.h
@@ -49,6 +49,7 @@ Boston, MA 02110-1301, USA. */
%{rdynamic: -export-dynamic} \
%{!dynamic-linker:-dynamic-linker %(fbsd_dynamic_linker) }} \
%{static:-Bstatic}} \
+ %{!static:--hash-style=both} \
%{symbolic:-Bsymbolic}"
/* Reset our STARTFILE_SPEC which was properly set in config/freebsd.h
diff --git a/contrib/gcc/config/i386/freebsd64.h b/contrib/gcc/config/i386/freebsd64.h
index b9e7386c839c..297af7c0ac39 100644
--- a/contrib/gcc/config/i386/freebsd64.h
+++ b/contrib/gcc/config/i386/freebsd64.h
@@ -54,4 +54,5 @@ Boston, MA 02110-1301, USA. */
%{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker %(fbsd_dynamic_linker) }} \
%{static:-Bstatic}} \
+ %{!static:--hash-style=both} \
%{symbolic:-Bsymbolic}"
diff --git a/contrib/gcc/config/rs6000/rs6000.md b/contrib/gcc/config/rs6000/rs6000.md
index 21cc2079ec15..2b42f70af468 100644
--- a/contrib/gcc/config/rs6000/rs6000.md
+++ b/contrib/gcc/config/rs6000/rs6000.md
@@ -10075,6 +10075,7 @@
""
"
{
+ operands[1] = force_reg (Pmode, operands[1]);
operands[2] = gen_reg_rtx (Pmode);
operands[3] = gen_frame_mem (Pmode, operands[0]);
operands[4] = gen_frame_mem (Pmode, operands[1]);
diff --git a/contrib/gcc/config/sparc/sparc.md b/contrib/gcc/config/sparc/sparc.md
index ed68f1e8a1e5..3ee30ea25ee7 100644
--- a/contrib/gcc/config/sparc/sparc.md
+++ b/contrib/gcc/config/sparc/sparc.md
@@ -5071,14 +5071,11 @@
[(set_attr "type" "multi")
(set_attr "length" "2")])
-;; The V8 architecture specifies that there must be 3 instructions between
-;; a Y register write and a use of it for correct results.
-
(define_expand "divsi3"
- [(parallel [(set (match_operand:SI 0 "register_operand" "=r,r")
- (div:SI (match_operand:SI 1 "register_operand" "r,r")
- (match_operand:SI 2 "input_operand" "rI,m")))
- (clobber (match_scratch:SI 3 "=&r,&r"))])]
+ [(parallel [(set (match_operand:SI 0 "register_operand" "")
+ (div:SI (match_operand:SI 1 "register_operand" "")
+ (match_operand:SI 2 "input_operand" "")))
+ (clobber (match_scratch:SI 3 ""))])]
"TARGET_V8 || TARGET_DEPRECATED_V8_INSNS"
{
if (TARGET_ARCH64)
@@ -5091,24 +5088,40 @@
}
})
+;; The V8 architecture specifies that there must be at least 3 instructions
+;; between a write to the Y register and a use of it for correct results.
+;; We try to fill one of them with a simple constant or a memory load.
+
(define_insn "divsi3_sp32"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (div:SI (match_operand:SI 1 "register_operand" "r,r")
- (match_operand:SI 2 "input_operand" "rI,m")))
- (clobber (match_scratch:SI 3 "=&r,&r"))]
- "(TARGET_V8 || TARGET_DEPRECATED_V8_INSNS)
- && TARGET_ARCH32"
-{
- if (which_alternative == 0)
- if (TARGET_V9)
- return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tsdiv\t%1, %2, %0";
- else
- return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tnop\n\tnop\n\tnop\n\tsdiv\t%1, %2, %0";
- else
- if (TARGET_V9)
- return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tld\t%2, %3\n\tsdiv\t%1, %3, %0";
- else
- return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tld\t%2, %3\n\tnop\n\tnop\n\tsdiv\t%1, %3, %0";
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+ (div:SI (match_operand:SI 1 "register_operand" "r,r,r")
+ (match_operand:SI 2 "input_operand" "rI,K,m")))
+ (clobber (match_scratch:SI 3 "=&r,&r,&r"))]
+ "(TARGET_V8 || TARGET_DEPRECATED_V8_INSNS) && TARGET_ARCH32"
+{
+ output_asm_insn ("sra\t%1, 31, %3", operands);
+ output_asm_insn ("wr\t%3, 0, %%y", operands);
+
+ switch (which_alternative)
+ {
+ case 0:
+ if (TARGET_V9)
+ return "sdiv\t%1, %2, %0";
+ else
+ return "nop\n\tnop\n\tnop\n\tsdiv\t%1, %2, %0";
+ case 1:
+ if (TARGET_V9)
+ return "sethi\t%%hi(%a2), %3\n\tsdiv\t%1, %3, %0";
+ else
+ return "sethi\t%%hi(%a2), %3\n\tnop\n\tnop\n\tsdiv\t%1, %3, %0";
+ case 2:
+ if (TARGET_V9)
+ return "ld\t%2, %3\n\tsdiv\t%1, %3, %0";
+ else
+ return "ld\t%2, %3\n\tnop\n\tnop\n\tsdiv\t%1, %3, %0";
+ default:
+ gcc_unreachable ();
+ }
}
[(set_attr "type" "multi")
(set (attr "length")
@@ -5143,10 +5156,13 @@
(clobber (match_scratch:SI 3 "=&r"))]
"TARGET_V8 || TARGET_DEPRECATED_V8_INSNS"
{
+ output_asm_insn ("sra\t%1, 31, %3", operands);
+ output_asm_insn ("wr\t%3, 0, %%y", operands);
+
if (TARGET_V9)
- return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tsdivcc\t%1, %2, %0";
+ return "sdivcc\t%1, %2, %0";
else
- return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tnop\n\tnop\n\tnop\n\tsdivcc\t%1, %2, %0";
+ return "nop\n\tnop\n\tnop\n\tsdivcc\t%1, %2, %0";
}
[(set_attr "type" "multi")
(set (attr "length")
@@ -5161,29 +5177,48 @@
"TARGET_V8 || TARGET_DEPRECATED_V8_INSNS"
"")
-;; The V8 architecture specifies that there must be 3 instructions between
-;; a Y register write and a use of it for correct results.
+;; The V8 architecture specifies that there must be at least 3 instructions
+;; between a write to the Y register and a use of it for correct results.
+;; We try to fill one of them with a simple constant or a memory load.
(define_insn "udivsi3_sp32"
- [(set (match_operand:SI 0 "register_operand" "=r,&r,&r")
- (udiv:SI (match_operand:SI 1 "nonimmediate_operand" "r,r,m")
- (match_operand:SI 2 "input_operand" "rI,m,r")))]
- "(TARGET_V8 || TARGET_DEPRECATED_V8_INSNS)
- && TARGET_ARCH32"
+ [(set (match_operand:SI 0 "register_operand" "=r,&r,&r,&r")
+ (udiv:SI (match_operand:SI 1 "nonimmediate_operand" "r,r,r,m")
+ (match_operand:SI 2 "input_operand" "rI,K,m,r")))]
+ "(TARGET_V8 || TARGET_DEPRECATED_V8_INSNS) && TARGET_ARCH32"
{
- output_asm_insn ("wr\t%%g0, %%g0, %%y", operands);
+ output_asm_insn ("wr\t%%g0, 0, %%y", operands);
+
switch (which_alternative)
{
- default:
- return "nop\n\tnop\n\tnop\n\tudiv\t%1, %2, %0";
+ case 0:
+ if (TARGET_V9)
+ return "udiv\t%1, %2, %0";
+ else
+ return "nop\n\tnop\n\tnop\n\tudiv\t%1, %2, %0";
case 1:
- return "ld\t%2, %0\n\tnop\n\tnop\n\tudiv\t%1, %0, %0";
+ if (TARGET_V9)
+ return "sethi\t%%hi(%a2), %0\n\tudiv\t%1, %0, %0";
+ else
+ return "sethi\t%%hi(%a2), %0\n\tnop\n\tnop\n\tudiv\t%1, %0, %0";
case 2:
- return "ld\t%1, %0\n\tnop\n\tnop\n\tudiv\t%0, %2, %0";
+ if (TARGET_V9)
+ return "ld\t%2, %0\n\tudiv\t%1, %0, %0";
+ else
+ return "ld\t%2, %0\n\tnop\n\tnop\n\tudiv\t%1, %0, %0";
+ case 3:
+ if (TARGET_V9)
+ return "ld\t%1, %0\n\tudiv\t%0, %2, %0";
+ else
+ return "ld\t%1, %0\n\tnop\n\tnop\n\tudiv\t%0, %2, %0";
+ default:
+ gcc_unreachable ();
}
}
[(set_attr "type" "multi")
- (set_attr "length" "5")])
+ (set (attr "length")
+ (if_then_else (eq_attr "isa" "v9")
+ (const_int 3) (const_int 5)))])
(define_insn "udivsi3_sp64"
[(set (match_operand:SI 0 "register_operand" "=r")
@@ -5209,13 +5244,14 @@
(const_int 0)))
(set (match_operand:SI 0 "register_operand" "=r")
(udiv:SI (match_dup 1) (match_dup 2)))]
- "TARGET_V8
- || TARGET_DEPRECATED_V8_INSNS"
+ "TARGET_V8 || TARGET_DEPRECATED_V8_INSNS"
{
+ output_asm_insn ("wr\t%%g0, 0, %%y", operands);
+
if (TARGET_V9)
- return "wr\t%%g0, %%g0, %%y\n\tudivcc\t%1, %2, %0";
+ return "udivcc\t%1, %2, %0";
else
- return "wr\t%%g0, %%g0, %%y\n\tnop\n\tnop\n\tnop\n\tudivcc\t%1, %2, %0";
+ return "nop\n\tnop\n\tnop\n\tudivcc\t%1, %2, %0";
}
[(set_attr "type" "multi")
(set (attr "length")
diff --git a/contrib/gcc/cse.c b/contrib/gcc/cse.c
index 5ce49ea86d03..cac4f0af0301 100644
--- a/contrib/gcc/cse.c
+++ b/contrib/gcc/cse.c
@@ -583,7 +583,8 @@ static void delete_reg_equiv (unsigned int);
static int mention_regs (rtx);
static int insert_regs (rtx, struct table_elt *, int);
static void remove_from_table (struct table_elt *, unsigned);
-static struct table_elt *lookup (rtx, unsigned, enum machine_mode);
+static void remove_pseudo_from_table (rtx, unsigned);
+static struct table_elt *lookup (rtx, unsigned, enum machine_mode);
static struct table_elt *lookup_for_remove (rtx, unsigned, enum machine_mode);
static rtx lookup_as_function (rtx, enum rtx_code);
static struct table_elt *insert (rtx, struct table_elt *, unsigned,
@@ -1381,6 +1382,19 @@ remove_from_table (struct table_elt *elt, unsigned int hash)
table_size--;
}
+/* Same as above, but X is a pseudo-register. */
+
+static void
+remove_pseudo_from_table (rtx x, unsigned int hash)
+{
+ struct table_elt *elt;
+
+ /* Because a pseudo-register can be referenced in more than one
+ mode, we might have to remove more than one table entry. */
+ while ((elt = lookup_for_remove (x, hash, VOIDmode)))
+ remove_from_table (elt, hash);
+}
+
/* Look up X in the hash table and return its table element,
or 0 if X is not in the table.
@@ -1707,7 +1721,10 @@ merge_equiv_classes (struct table_elt *class1, struct table_elt *class2)
delete_reg_equiv (REGNO (exp));
}
- remove_from_table (elt, hash);
+ if (REG_P (exp) && REGNO (exp) >= FIRST_PSEUDO_REGISTER)
+ remove_pseudo_from_table (exp, hash);
+ else
+ remove_from_table (elt, hash);
if (insert_regs (exp, class1, 0) || need_rehash)
{
@@ -1803,14 +1820,7 @@ invalidate (rtx x, enum machine_mode full_mode)
SUBREG_TICKED (regno) = -1;
if (regno >= FIRST_PSEUDO_REGISTER)
- {
- /* Because a register can be referenced in more than one mode,
- we might have to remove more than one table entry. */
- struct table_elt *elt;
-
- while ((elt = lookup_for_remove (x, hash, GET_MODE (x))))
- remove_from_table (elt, hash);
- }
+ remove_pseudo_from_table (x, hash);
else
{
HOST_WIDE_INT in_table
diff --git a/contrib/gcc/expr.c b/contrib/gcc/expr.c
index 1773fa179a8f..3655eb0aa044 100644
--- a/contrib/gcc/expr.c
+++ b/contrib/gcc/expr.c
@@ -4750,14 +4750,7 @@ count_type_elements (tree type, bool allow_flexarr)
case UNION_TYPE:
case QUAL_UNION_TYPE:
- {
- /* Ho hum. How in the world do we guess here? Clearly it isn't
- right to count the fields. Guess based on the number of words. */
- HOST_WIDE_INT n = int_size_in_bytes (type);
- if (n < 0)
- return -1;
- return n / UNITS_PER_WORD;
- }
+ return -1;
case COMPLEX_TYPE:
return 2;
diff --git a/contrib/gcc/fold-const.c b/contrib/gcc/fold-const.c
index 0753caa15368..37d99f89d0ef 100644
--- a/contrib/gcc/fold-const.c
+++ b/contrib/gcc/fold-const.c
@@ -6657,12 +6657,14 @@ fold_widened_comparison (enum tree_code code, tree type, tree arg0, tree arg1)
if (TYPE_PRECISION (TREE_TYPE (arg0)) <= TYPE_PRECISION (shorter_type))
return NULL_TREE;
- arg1_unw = get_unwidened (arg1, shorter_type);
+ arg1_unw = get_unwidened (arg1, NULL_TREE);
/* If possible, express the comparison in the shorter mode. */
if ((code == EQ_EXPR || code == NE_EXPR
|| TYPE_UNSIGNED (TREE_TYPE (arg0)) == TYPE_UNSIGNED (shorter_type))
&& (TREE_TYPE (arg1_unw) == shorter_type
+ || (TYPE_PRECISION (shorter_type)
+ >= TYPE_PRECISION (TREE_TYPE (arg1_unw)))
|| (TREE_CODE (arg1_unw) == INTEGER_CST
&& (TREE_CODE (shorter_type) == INTEGER_TYPE
|| TREE_CODE (shorter_type) == BOOLEAN_TYPE)
@@ -10647,24 +10649,24 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
tree arg01 = TREE_OPERAND (arg0, 1);
if (TREE_CODE (arg00) == LSHIFT_EXPR
&& integer_onep (TREE_OPERAND (arg00, 0)))
- return
- fold_build2 (code, type,
- build2 (BIT_AND_EXPR, TREE_TYPE (arg0),
- build2 (RSHIFT_EXPR, TREE_TYPE (arg00),
- arg01, TREE_OPERAND (arg00, 1)),
- fold_convert (TREE_TYPE (arg0),
- integer_one_node)),
- arg1);
- else if (TREE_CODE (TREE_OPERAND (arg0, 1)) == LSHIFT_EXPR
- && integer_onep (TREE_OPERAND (TREE_OPERAND (arg0, 1), 0)))
- return
- fold_build2 (code, type,
- build2 (BIT_AND_EXPR, TREE_TYPE (arg0),
- build2 (RSHIFT_EXPR, TREE_TYPE (arg01),
- arg00, TREE_OPERAND (arg01, 1)),
- fold_convert (TREE_TYPE (arg0),
- integer_one_node)),
- arg1);
+ {
+ tree tem = fold_build2 (RSHIFT_EXPR, TREE_TYPE (arg00),
+ arg01, TREE_OPERAND (arg00, 1));
+ tem = fold_build2 (BIT_AND_EXPR, TREE_TYPE (arg0), tem,
+ build_int_cst (TREE_TYPE (arg0), 1));
+ return fold_build2 (code, type,
+ fold_convert (TREE_TYPE (arg1), tem), arg1);
+ }
+ else if (TREE_CODE (arg01) == LSHIFT_EXPR
+ && integer_onep (TREE_OPERAND (arg01, 0)))
+ {
+ tree tem = fold_build2 (RSHIFT_EXPR, TREE_TYPE (arg01),
+ arg00, TREE_OPERAND (arg01, 1));
+ tem = fold_build2 (BIT_AND_EXPR, TREE_TYPE (arg0), tem,
+ build_int_cst (TREE_TYPE (arg0), 1));
+ return fold_build2 (code, type,
+ fold_convert (TREE_TYPE (arg1), tem), arg1);
+ }
}
/* If this is an NE or EQ comparison of zero against the result of a
diff --git a/contrib/gcc/ipa-pure-const.c b/contrib/gcc/ipa-pure-const.c
index fdaff50d573b..c795bba419c1 100644
--- a/contrib/gcc/ipa-pure-const.c
+++ b/contrib/gcc/ipa-pure-const.c
@@ -639,6 +639,7 @@ static_execute (void)
for (i = 0; i < order_pos; i++ )
{
enum pure_const_state_e pure_const_state = IPA_CONST;
+ int count = 0;
node = order[i];
/* Find the worst state for any node in the cycle. */
@@ -655,11 +656,40 @@ static_execute (void)
if (!w_l->state_set_in_source)
{
struct cgraph_edge *e;
+ count++;
+
+ /* FIXME!!! Because of pr33826, we cannot have either
+ immediate or transitive recursive functions marked as
+ pure or const because dce can delete a function that
+ is in reality an infinite loop. A better solution
+ than just outlawing them is to add another bit the
+ functions to distinguish recursive from non recursive
+ pure and const function. This would allow the
+ recursive ones to be cse'd but not dce'd. In this
+ same vein, we could allow functions with loops to
+ also be cse'd but not dce'd.
+
+ Unfortunately we are late in stage 3, and the fix
+ described above is is not appropriate. */
+ if (count > 1)
+ {
+ pure_const_state = IPA_NEITHER;
+ break;
+ }
+
for (e = w->callees; e; e = e->next_callee)
{
struct cgraph_node *y = e->callee;
/* Only look at the master nodes and skip external nodes. */
y = cgraph_master_clone (y);
+
+ /* Check for immediate recursive functions. See the
+ FIXME above. */
+ if (w == y)
+ {
+ pure_const_state = IPA_NEITHER;
+ break;
+ }
if (y)
{
funct_state y_l = get_function_state (y);
diff --git a/contrib/gcc/ipa-utils.c b/contrib/gcc/ipa-utils.c
index f0025c7559fa..87e65b598fd6 100644
--- a/contrib/gcc/ipa-utils.c
+++ b/contrib/gcc/ipa-utils.c
@@ -78,7 +78,7 @@ struct searchc_env {
has been customized for cgraph_nodes. The env parameter is because
it is recursive and there are no nested functions here. This
function should only be called from itself or
- cgraph_reduced_inorder. ENV is a stack env and would be
+ ipa_utils_reduced_inorder. ENV is a stack env and would be
unnecessary if C had nested functions. V is the node to start
searching from. */
diff --git a/contrib/gcc/rtl.h b/contrib/gcc/rtl.h
index d4af682f4db8..57de5165f268 100644
--- a/contrib/gcc/rtl.h
+++ b/contrib/gcc/rtl.h
@@ -1189,8 +1189,8 @@ do { \
refer to part of a DECL. */
#define REG_EXPR(RTX) (REG_ATTRS (RTX) == 0 ? 0 : REG_ATTRS (RTX)->decl)
-/* For a MEM rtx, the offset from the start of MEM_DECL, if known, as a
- RTX that is always a CONST_INT. */
+/* For a REG rtx, the offset from the start of REG_EXPR, if known, as an
+ HOST_WIDE_INT. */
#define REG_OFFSET(RTX) (REG_ATTRS (RTX) == 0 ? 0 : REG_ATTRS (RTX)->offset)
/* Copy the attributes that apply to memory locations from RHS to LHS. */
diff --git a/contrib/gcc/var-tracking.c b/contrib/gcc/var-tracking.c
index d9f21b5aa21f..c392b2ed7997 100644
--- a/contrib/gcc/var-tracking.c
+++ b/contrib/gcc/var-tracking.c
@@ -259,6 +259,9 @@ typedef struct variable_def
/* Pointer to the BB's information specific to variable tracking pass. */
#define VTI(BB) ((variable_tracking_info) (BB)->aux)
+/* Macro to access MEM_OFFSET as an HOST_WIDE_INT. Evaluates MEM twice. */
+#define INT_MEM_OFFSET(mem) (MEM_OFFSET (mem) ? INTVAL (MEM_OFFSET (mem)) : 0)
+
/* Alloc pool for struct attrs_def. */
static alloc_pool attrs_pool;
@@ -927,7 +930,7 @@ static void
var_mem_set (dataflow_set *set, rtx loc)
{
tree decl = MEM_EXPR (loc);
- HOST_WIDE_INT offset = MEM_OFFSET (loc) ? INTVAL (MEM_OFFSET (loc)) : 0;
+ HOST_WIDE_INT offset = INT_MEM_OFFSET (loc);
decl = var_debug_decl (decl);
@@ -945,7 +948,7 @@ static void
var_mem_delete_and_set (dataflow_set *set, rtx loc, bool modify)
{
tree decl = MEM_EXPR (loc);
- HOST_WIDE_INT offset = MEM_OFFSET (loc) ? INTVAL (MEM_OFFSET (loc)) : 0;
+ HOST_WIDE_INT offset = INT_MEM_OFFSET (loc);
decl = var_debug_decl (decl);
@@ -962,7 +965,7 @@ static void
var_mem_delete (dataflow_set *set, rtx loc, bool clobber)
{
tree decl = MEM_EXPR (loc);
- HOST_WIDE_INT offset = MEM_OFFSET (loc) ? INTVAL (MEM_OFFSET (loc)) : 0;
+ HOST_WIDE_INT offset = INT_MEM_OFFSET (loc);
decl = var_debug_decl (decl);
if (clobber)
@@ -1540,6 +1543,18 @@ track_expr_p (tree expr)
return 1;
}
+/* Return true if OFFSET is a valid offset for a register or memory
+ access we want to track. This is used to reject out-of-bounds
+ accesses that can cause assertions to fail later. Note that we
+ don't reject negative offsets because they can be generated for
+ paradoxical subregs on big-endian architectures. */
+
+static inline bool
+offset_valid_for_tracked_p (HOST_WIDE_INT offset)
+{
+ return (-MAX_VAR_PARTS < offset) && (offset < MAX_VAR_PARTS);
+}
+
/* Determine whether a given LOC refers to the same variable part as
EXPR+OFFSET. */
@@ -1560,7 +1575,7 @@ same_variable_part_p (rtx loc, tree expr, HOST_WIDE_INT offset)
else if (MEM_P (loc))
{
expr2 = MEM_EXPR (loc);
- offset2 = MEM_OFFSET (loc) ? INTVAL (MEM_OFFSET (loc)) : 0;
+ offset2 = INT_MEM_OFFSET (loc);
}
else
return false;
@@ -1590,7 +1605,8 @@ count_uses (rtx *loc, void *insn)
}
else if (MEM_P (*loc)
&& MEM_EXPR (*loc)
- && track_expr_p (MEM_EXPR (*loc)))
+ && track_expr_p (MEM_EXPR (*loc))
+ && offset_valid_for_tracked_p (INT_MEM_OFFSET (*loc)))
{
VTI (bb)->n_mos++;
}
@@ -1626,14 +1642,19 @@ add_uses (rtx *loc, void *insn)
basic_block bb = BLOCK_FOR_INSN ((rtx) insn);
micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
- mo->type = ((REG_EXPR (*loc) && track_expr_p (REG_EXPR (*loc)))
- ? MO_USE : MO_USE_NO_VAR);
+ if (REG_EXPR (*loc)
+ && track_expr_p (REG_EXPR (*loc))
+ && offset_valid_for_tracked_p (REG_OFFSET (*loc)))
+ mo->type = MO_USE;
+ else
+ mo->type = MO_USE_NO_VAR;
mo->u.loc = *loc;
mo->insn = (rtx) insn;
}
else if (MEM_P (*loc)
&& MEM_EXPR (*loc)
- && track_expr_p (MEM_EXPR (*loc)))
+ && track_expr_p (MEM_EXPR (*loc))
+ && offset_valid_for_tracked_p (INT_MEM_OFFSET (*loc)))
{
basic_block bb = BLOCK_FOR_INSN ((rtx) insn);
micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
@@ -1667,8 +1688,9 @@ add_stores (rtx loc, rtx expr, void *insn)
micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
if (GET_CODE (expr) == CLOBBER
- || ! REG_EXPR (loc)
- || ! track_expr_p (REG_EXPR (loc)))
+ || !(REG_EXPR (loc)
+ && track_expr_p (REG_EXPR (loc))
+ && offset_valid_for_tracked_p (REG_OFFSET (loc))))
mo->type = MO_CLOBBER;
else if (GET_CODE (expr) == SET
&& SET_DEST (expr) == loc
@@ -1683,7 +1705,8 @@ add_stores (rtx loc, rtx expr, void *insn)
}
else if (MEM_P (loc)
&& MEM_EXPR (loc)
- && track_expr_p (MEM_EXPR (loc)))
+ && track_expr_p (MEM_EXPR (loc))
+ && offset_valid_for_tracked_p (INT_MEM_OFFSET (loc)))
{
basic_block bb = BLOCK_FOR_INSN ((rtx) insn);
micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
@@ -1694,8 +1717,7 @@ add_stores (rtx loc, rtx expr, void *insn)
&& SET_DEST (expr) == loc
&& same_variable_part_p (SET_SRC (expr),
MEM_EXPR (loc),
- MEM_OFFSET (loc)
- ? INTVAL (MEM_OFFSET (loc)) : 0))
+ INT_MEM_OFFSET (loc)))
mo->type = MO_COPY;
else
mo->type = MO_SET;
@@ -2726,7 +2748,7 @@ vt_get_decl_and_offset (rtx rtl, tree *declp, HOST_WIDE_INT *offsetp)
if (MEM_ATTRS (rtl))
{
*declp = MEM_EXPR (rtl);
- *offsetp = MEM_OFFSET (rtl) ? INTVAL (MEM_OFFSET (rtl)) : 0;
+ *offsetp = INT_MEM_OFFSET (rtl);
return true;
}
}
diff --git a/contrib/gcc/varasm.c b/contrib/gcc/varasm.c
index d17207121fef..21b690417b74 100644
--- a/contrib/gcc/varasm.c
+++ b/contrib/gcc/varasm.c
@@ -5876,9 +5876,10 @@ default_binds_local_p_1 (tree exp, int shlib)
else if (DECL_WEAK (exp))
local_p = false;
/* If PIC, then assume that any global name can be overridden by
- symbols resolved from other modules. */
+ symbols resolved from other modules, unless we are compiling with
+ -fwhole-program, which assumes that names are local. */
else if (shlib)
- local_p = false;
+ local_p = flag_whole_program;
/* Uninitialized COMMON variable may be unified with symbols
resolved from other modules. */
else if (DECL_COMMON (exp)
diff --git a/contrib/groff/tmac/doc-common b/contrib/groff/tmac/doc-common
index 6372a23990ba..5559c23fc49b 100644
--- a/contrib/groff/tmac/doc-common
+++ b/contrib/groff/tmac/doc-common
@@ -574,7 +574,10 @@
.ds doc-operating-system-FreeBSD-8.0 8.0
.ds doc-operating-system-FreeBSD-8.1 8.1
.ds doc-operating-system-FreeBSD-8.2 8.2
+.ds doc-operating-system-FreeBSD-8.3 8.3
.ds doc-operating-system-FreeBSD-9.0 9.0
+.ds doc-operating-system-FreeBSD-9.1 9.1
+.ds doc-operating-system-FreeBSD-10.0 10.0
.
.ds doc-operating-system-Darwin-8.0.0 8.0.0
.ds doc-operating-system-Darwin-8.1.0 8.1.0
diff --git a/contrib/llvm/include/llvm/Support/FileSystem.h b/contrib/llvm/include/llvm/Support/FileSystem.h
index e6f9926af6f8..a7327b8a7607 100644
--- a/contrib/llvm/include/llvm/Support/FileSystem.h
+++ b/contrib/llvm/include/llvm/Support/FileSystem.h
@@ -422,8 +422,8 @@ error_code status_known(const Twine &path, bool &result);
/// @results errc::success if result_{fd,path} have been successfully set,
/// otherwise a platform specific error_code.
error_code unique_file(const Twine &model, int &result_fd,
- SmallVectorImpl<char> &result_path,
- bool makeAbsolute = true);
+ SmallVectorImpl<char> &result_path,
+ bool makeAbsolute = true, unsigned mode = 0600);
/// @brief Canonicalize path.
///
diff --git a/contrib/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/contrib/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
index 8ec1ae8620f7..748668cdf674 100644
--- a/contrib/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
+++ b/contrib/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
@@ -131,30 +131,16 @@ static void CheckForPhysRegDependency(SDNode *Def, SDNode *User, unsigned Op,
}
}
-static void AddGlue(SDNode *N, SDValue Glue, bool AddGlue, SelectionDAG *DAG) {
- SmallVector<EVT, 4> VTs;
- SDNode *GlueDestNode = Glue.getNode();
-
- // Don't add glue from a node to itself.
- if (GlueDestNode == N) return;
-
- // Don't add glue to something that already has it, either as a use or value.
- if (N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Glue ||
- N->getValueType(N->getNumValues() - 1) == MVT::Glue) {
- return;
- }
- for (unsigned I = 0, E = N->getNumValues(); I != E; ++I)
- VTs.push_back(N->getValueType(I));
-
- if (AddGlue)
- VTs.push_back(MVT::Glue);
-
+// Helper for AddGlue to clone node operands.
+static void CloneNodeWithValues(SDNode *N, SelectionDAG *DAG,
+ SmallVectorImpl<EVT> &VTs,
+ SDValue ExtraOper = SDValue()) {
SmallVector<SDValue, 4> Ops;
for (unsigned I = 0, E = N->getNumOperands(); I != E; ++I)
Ops.push_back(N->getOperand(I));
- if (GlueDestNode)
- Ops.push_back(Glue);
+ if (ExtraOper.getNode())
+ Ops.push_back(ExtraOper);
SDVTList VTList = DAG->getVTList(&VTs[0], VTs.size());
MachineSDNode::mmo_iterator Begin = 0, End = 0;
@@ -173,6 +159,46 @@ static void AddGlue(SDNode *N, SDValue Glue, bool AddGlue, SelectionDAG *DAG) {
MN->setMemRefs(Begin, End);
}
+static bool AddGlue(SDNode *N, SDValue Glue, bool AddGlue, SelectionDAG *DAG) {
+ SmallVector<EVT, 4> VTs;
+ SDNode *GlueDestNode = Glue.getNode();
+
+ // Don't add glue from a node to itself.
+ if (GlueDestNode == N) return false;
+
+ // Don't add a glue operand to something that already uses glue.
+ if (GlueDestNode &&
+ N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Glue) {
+ return false;
+ }
+ // Don't add glue to something that already has a glue value.
+ if (N->getValueType(N->getNumValues() - 1) == MVT::Glue) return false;
+
+ for (unsigned I = 0, E = N->getNumValues(); I != E; ++I)
+ VTs.push_back(N->getValueType(I));
+
+ if (AddGlue)
+ VTs.push_back(MVT::Glue);
+
+ CloneNodeWithValues(N, DAG, VTs, Glue);
+
+ return true;
+}
+
+// Cleanup after unsuccessful AddGlue. Use the standard method of morphing the
+// node even though simply shrinking the value list is sufficient.
+static void RemoveUnusedGlue(SDNode *N, SelectionDAG *DAG) {
+ assert((N->getValueType(N->getNumValues() - 1) == MVT::Glue &&
+ !N->hasAnyUseOfValue(N->getNumValues() - 1)) &&
+ "expected an unused glue value");
+
+ SmallVector<EVT, 4> VTs;
+ for (unsigned I = 0, E = N->getNumValues()-1; I != E; ++I)
+ VTs.push_back(N->getValueType(I));
+
+ CloneNodeWithValues(N, DAG, VTs);
+}
+
/// ClusterNeighboringLoads - Force nearby loads together by "gluing" them.
/// This function finds loads of the same base and different offsets. If the
/// offsets are not far apart (target specific), it add MVT::Glue inputs and
@@ -240,19 +266,23 @@ void ScheduleDAGSDNodes::ClusterNeighboringLoads(SDNode *Node) {
// Cluster loads by adding MVT::Glue outputs and inputs. This also
// ensure they are scheduled in order of increasing addresses.
SDNode *Lead = Loads[0];
- AddGlue(Lead, SDValue(0, 0), true, DAG);
-
- SDValue InGlue = SDValue(Lead, Lead->getNumValues() - 1);
+ SDValue InGlue = SDValue(0, 0);
+ if (AddGlue(Lead, InGlue, true, DAG))
+ InGlue = SDValue(Lead, Lead->getNumValues() - 1);
for (unsigned I = 1, E = Loads.size(); I != E; ++I) {
bool OutGlue = I < E - 1;
SDNode *Load = Loads[I];
- AddGlue(Load, InGlue, OutGlue, DAG);
+ // If AddGlue fails, we could leave an unsused glue value. This should not
+ // cause any
+ if (AddGlue(Load, InGlue, OutGlue, DAG)) {
+ if (OutGlue)
+ InGlue = SDValue(Load, Load->getNumValues() - 1);
- if (OutGlue)
- InGlue = SDValue(Load, Load->getNumValues() - 1);
-
- ++LoadsClustered;
+ ++LoadsClustered;
+ }
+ else if (!OutGlue && InGlue.getNode())
+ RemoveUnusedGlue(InGlue.getNode(), DAG);
}
}
diff --git a/contrib/llvm/lib/Support/Unix/PathV2.inc b/contrib/llvm/lib/Support/Unix/PathV2.inc
index edb101efb0f6..38a5fe214703 100644
--- a/contrib/llvm/lib/Support/Unix/PathV2.inc
+++ b/contrib/llvm/lib/Support/Unix/PathV2.inc
@@ -346,9 +346,10 @@ error_code status(const Twine &path, file_status &result) {
return error_code::success();
}
+// Since this is most often used for temporary files, mode defaults to 0600.
error_code unique_file(const Twine &model, int &result_fd,
- SmallVectorImpl<char> &result_path,
- bool makeAbsolute) {
+ SmallVectorImpl<char> &result_path,
+ bool makeAbsolute, unsigned mode) {
SmallString<128> Model;
model.toVector(Model);
// Null terminate.
@@ -395,7 +396,7 @@ retry_random_path:
// Try to open + create the file.
rety_open_create:
- int RandomFD = ::open(RandomPath.c_str(), O_RDWR | O_CREAT | O_EXCL, 0600);
+ int RandomFD = ::open(RandomPath.c_str(), O_RDWR | O_CREAT | O_EXCL, mode);
if (RandomFD == -1) {
// If the file existed, try again, otherwise, error.
if (errno == errc::file_exists)
diff --git a/contrib/llvm/lib/Support/Windows/PathV2.inc b/contrib/llvm/lib/Support/Windows/PathV2.inc
index e9ce5d9097a3..3ac983a3eaa1 100644
--- a/contrib/llvm/lib/Support/Windows/PathV2.inc
+++ b/contrib/llvm/lib/Support/Windows/PathV2.inc
@@ -487,9 +487,11 @@ handle_status_error:
return error_code::success();
}
+// FIXME: mode should be used here and default to user r/w only,
+// it currently comes in as a UNIX mode.
error_code unique_file(const Twine &model, int &result_fd,
- SmallVectorImpl<char> &result_path,
- bool makeAbsolute) {
+ SmallVectorImpl<char> &result_path,
+ bool makeAbsolute, unsigned mode) {
// Use result_path as temp storage.
result_path.set_size(0);
StringRef m = model.toStringRef(result_path);
diff --git a/contrib/llvm/tools/clang/include/clang/AST/Decl.h b/contrib/llvm/tools/clang/include/clang/AST/Decl.h
index ac7ab0f9d1d9..0c47f2e486f3 100644
--- a/contrib/llvm/tools/clang/include/clang/AST/Decl.h
+++ b/contrib/llvm/tools/clang/include/clang/AST/Decl.h
@@ -64,9 +64,6 @@ public:
/// \brief Return the TypeLoc wrapper for the type source info.
TypeLoc getTypeLoc() const; // implemented in TypeLoc.h
-
- /// \brief Override the type stored in this TypeSourceInfo. Use with caution!
- void overrideType(QualType T) { Ty = T; }
};
/// TranslationUnitDecl - The top declaration context.
diff --git a/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticParseKinds.td b/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticParseKinds.td
index 957f05b66426..c183da7a6ac9 100644
--- a/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticParseKinds.td
+++ b/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticParseKinds.td
@@ -410,8 +410,6 @@ def ext_ellipsis_exception_spec : Extension<
"exception specification of '...' is a Microsoft extension">;
def err_dynamic_and_noexcept_specification : Error<
"cannot have both throw() and noexcept() clause on the same function">;
-def err_except_spec_unparsed : Error<
- "unexpected end of exception specification">;
def warn_cxx98_compat_noexcept_decl : Warning<
"noexcept specifications are incompatible with C++98">,
InGroup<CXX98Compat>, DefaultIgnore;
diff --git a/contrib/llvm/tools/clang/include/clang/Basic/TokenKinds.def b/contrib/llvm/tools/clang/include/clang/Basic/TokenKinds.def
index fe0ef3068167..2e4d34dff0ba 100644
--- a/contrib/llvm/tools/clang/include/clang/Basic/TokenKinds.def
+++ b/contrib/llvm/tools/clang/include/clang/Basic/TokenKinds.def
@@ -105,7 +105,6 @@ TOK(eod) // End of preprocessing directive (end of line inside a
// directive).
TOK(code_completion) // Code completion marker
TOK(cxx_defaultarg_end) // C++ default argument end marker
-TOK(cxx_exceptspec_end) // C++ exception-specification end marker
// C99 6.4.9: Comments.
TOK(comment) // Comment (only in -E -C[C] mode)
diff --git a/contrib/llvm/tools/clang/include/clang/Parse/Parser.h b/contrib/llvm/tools/clang/include/clang/Parse/Parser.h
index a2bb1b35796f..2a7464ff2764 100644
--- a/contrib/llvm/tools/clang/include/clang/Parse/Parser.h
+++ b/contrib/llvm/tools/clang/include/clang/Parse/Parser.h
@@ -584,11 +584,15 @@ private:
class TentativeParsingAction {
Parser &P;
Token PrevTok;
+ unsigned short PrevParenCount, PrevBracketCount, PrevBraceCount;
bool isActive;
public:
explicit TentativeParsingAction(Parser& p) : P(p) {
PrevTok = P.Tok;
+ PrevParenCount = P.ParenCount;
+ PrevBracketCount = P.BracketCount;
+ PrevBraceCount = P.BraceCount;
P.PP.EnableBacktrackAtThisPos();
isActive = true;
}
@@ -601,6 +605,9 @@ private:
assert(isActive && "Parsing action was finished!");
P.PP.Backtrack();
P.Tok = PrevTok;
+ P.ParenCount = PrevParenCount;
+ P.BracketCount = PrevBracketCount;
+ P.BraceCount = PrevBraceCount;
isActive = false;
}
~TentativeParsingAction() {
@@ -1422,12 +1429,10 @@ private:
ExprResult ParseThrowExpression();
ExceptionSpecificationType tryParseExceptionSpecification(
- bool Delayed,
SourceRange &SpecificationRange,
SmallVectorImpl<ParsedType> &DynamicExceptions,
SmallVectorImpl<SourceRange> &DynamicExceptionRanges,
- ExprResult &NoexceptExpr,
- CachedTokens *&ExceptionSpecTokens);
+ ExprResult &NoexceptExpr);
// EndLoc is filled with the location of the last token of the specification.
ExceptionSpecificationType ParseDynamicExceptionSpecification(
diff --git a/contrib/llvm/tools/clang/include/clang/Sema/DeclSpec.h b/contrib/llvm/tools/clang/include/clang/Sema/DeclSpec.h
index 2f3dda408e32..67fd3939f35d 100644
--- a/contrib/llvm/tools/clang/include/clang/Sema/DeclSpec.h
+++ b/contrib/llvm/tools/clang/include/clang/Sema/DeclSpec.h
@@ -1150,10 +1150,6 @@ struct DeclaratorChunk {
/// \brief Pointer to the expression in the noexcept-specifier of this
/// function, if it has one.
Expr *NoexceptExpr;
-
- /// \brief Pointer to the cached tokens for an exception-specification
- /// that has not yet been parsed.
- CachedTokens *ExceptionSpecTokens;
};
/// TrailingReturnType - If this isn't null, it's the trailing return type
@@ -1176,8 +1172,6 @@ struct DeclaratorChunk {
delete[] ArgInfo;
if (getExceptionSpecType() == EST_Dynamic)
delete[] Exceptions;
- else if (getExceptionSpecType() == EST_Delayed)
- delete ExceptionSpecTokens;
}
/// isKNRPrototype - Return true if this is a K&R style identifier list,
@@ -1353,7 +1347,6 @@ struct DeclaratorChunk {
SourceRange *ExceptionRanges,
unsigned NumExceptions,
Expr *NoexceptExpr,
- CachedTokens *ExceptionSpecTokens,
SourceLocation LocalRangeBegin,
SourceLocation LocalRangeEnd,
Declarator &TheDeclarator,
diff --git a/contrib/llvm/tools/clang/include/clang/Sema/Initialization.h b/contrib/llvm/tools/clang/include/clang/Sema/Initialization.h
index 4433843ff861..0dd68875a9ec 100644
--- a/contrib/llvm/tools/clang/include/clang/Sema/Initialization.h
+++ b/contrib/llvm/tools/clang/include/clang/Sema/Initialization.h
@@ -225,7 +225,9 @@ public:
/// \brief Create the initialization entity for a temporary.
static InitializedEntity InitializeTemporary(QualType Type) {
- return InitializedEntity(EK_Temporary, SourceLocation(), Type);
+ InitializedEntity Result(EK_Temporary, SourceLocation(), Type);
+ Result.TypeInfo = 0;
+ return Result;
}
/// \brief Create the initialization entity for a temporary.
diff --git a/contrib/llvm/tools/clang/include/clang/Sema/Sema.h b/contrib/llvm/tools/clang/include/clang/Sema/Sema.h
index 8ac7c3ee01a3..c8767b6f9601 100644
--- a/contrib/llvm/tools/clang/include/clang/Sema/Sema.h
+++ b/contrib/llvm/tools/clang/include/clang/Sema/Sema.h
@@ -331,6 +331,11 @@ public:
/// cycle detection at the end of the TU.
DelegatingCtorDeclsType DelegatingCtorDecls;
+ /// \brief All the destructors seen during a class definition that had their
+ /// exception spec computation delayed because it depended on an unparsed
+ /// exception spec.
+ SmallVector<CXXDestructorDecl*, 2> DelayedDestructorExceptionSpecs;
+
/// \brief All the overriding destructors seen during a class definition
/// (there could be multiple due to nested classes) that had their exception
/// spec checks delayed, plus the overridden destructor.
@@ -653,23 +658,19 @@ public:
/// SpecialMemberOverloadResult - The overloading result for a special member
/// function.
///
- /// This is basically a wrapper around PointerIntPair. The lowest bit of the
- /// integer is used to determine whether we have a parameter qualification
- /// match, the second-lowest is whether we had success in resolving the
- /// overload to a unique non-deleted function.
- ///
- /// The ConstParamMatch bit represents whether, when looking up a copy
- /// constructor or assignment operator, we found a potential copy
- /// constructor/assignment operator whose first parameter is const-qualified.
- /// This is used for determining parameter types of other objects and is
- /// utterly meaningless on other types of special members.
+ /// This is basically a wrapper around PointerIntPair. The lowest bits of the
+ /// integer are used to determine whether overload resolution succeeded, and
+ /// whether, when looking up a copy constructor or assignment operator, we
+ /// found a potential copy constructor/assignment operator whose first
+ /// parameter is const-qualified. This is used for determining parameter types
+ /// of other objects and is utterly meaningless on other types of special
+ /// members.
class SpecialMemberOverloadResult : public llvm::FastFoldingSetNode {
public:
enum Kind {
NoMemberOrDeleted,
Ambiguous,
- SuccessNonConst,
- SuccessConst
+ Success
};
private:
@@ -685,9 +686,6 @@ public:
Kind getKind() const { return static_cast<Kind>(Pair.getInt()); }
void setKind(Kind K) { Pair.setInt(K); }
-
- bool hasSuccess() const { return getKind() >= SuccessNonConst; }
- bool hasConstParamMatch() const { return getKind() == SuccessConst; }
};
/// \brief A cache of special member function overload resolution results
@@ -1909,11 +1907,9 @@ public:
DeclContextLookupResult LookupConstructors(CXXRecordDecl *Class);
CXXConstructorDecl *LookupDefaultConstructor(CXXRecordDecl *Class);
CXXConstructorDecl *LookupCopyingConstructor(CXXRecordDecl *Class,
- unsigned Quals,
- bool *ConstParam = 0);
+ unsigned Quals);
CXXMethodDecl *LookupCopyingAssignment(CXXRecordDecl *Class, unsigned Quals,
- bool RValueThis, unsigned ThisQuals,
- bool *ConstParam = 0);
+ bool RValueThis, unsigned ThisQuals);
CXXConstructorDecl *LookupMovingConstructor(CXXRecordDecl *Class);
CXXMethodDecl *LookupMovingAssignment(CXXRecordDecl *Class, bool RValueThis,
unsigned ThisQuals);
@@ -3158,16 +3154,6 @@ public:
llvm::SmallVectorImpl<QualType> &Exceptions,
FunctionProtoType::ExtProtoInfo &EPI);
- /// \brief Add an exception-specification to the given member function
- /// (or member function template). The exception-specification was parsed
- /// after the method itself was declared.
- void actOnDelayedExceptionSpecification(Decl *Method,
- ExceptionSpecificationType EST,
- SourceRange SpecificationRange,
- ArrayRef<ParsedType> DynamicExceptions,
- ArrayRef<SourceRange> DynamicExceptionRanges,
- Expr *NoexceptExpr);
-
/// \brief Determine if a special member function should have a deleted
/// definition when it is defaulted.
bool ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
@@ -3205,7 +3191,8 @@ public:
/// C++11 says that user-defined destructors with no exception spec get one
/// that looks as if the destructor was implicitly declared.
void AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
- CXXDestructorDecl *Destructor);
+ CXXDestructorDecl *Destructor,
+ bool WasDelayed = false);
/// \brief Declare all inherited constructors for the given class.
///
@@ -4043,6 +4030,7 @@ public:
SourceLocation LBrac,
SourceLocation RBrac,
AttributeList *AttrList);
+ void ActOnFinishCXXMemberDecls();
void ActOnReenterTemplateScope(Scope *S, Decl *Template);
void ActOnReenterDeclaratorTemplateScope(Scope *S, DeclaratorDecl *D);
diff --git a/contrib/llvm/tools/clang/lib/Analysis/UninitializedValues.cpp b/contrib/llvm/tools/clang/lib/Analysis/UninitializedValues.cpp
index 6e5da2525973..1c7e6b62f836 100644
--- a/contrib/llvm/tools/clang/lib/Analysis/UninitializedValues.cpp
+++ b/contrib/llvm/tools/clang/lib/Analysis/UninitializedValues.cpp
@@ -168,7 +168,8 @@ static const BinaryOperator *getLogicalOperatorInChain(const CFGBlock *block) {
if (block->empty())
return 0;
- const CFGStmt *cstmt = block->front().getAs<CFGStmt>();
+ CFGElement front = block->front();
+ const CFGStmt *cstmt = front.getAs<CFGStmt>();
if (!cstmt)
return 0;
diff --git a/contrib/llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp b/contrib/llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp
index d286d24715eb..78160f5514ef 100644
--- a/contrib/llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/contrib/llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -1479,25 +1479,21 @@ llvm::DIType CGDebugInfo::CreateType(const ArrayType *Ty,
// obvious/recursive way?
SmallVector<llvm::Value *, 8> Subscripts;
QualType EltTy(Ty, 0);
- if (Ty->isIncompleteArrayType())
+ while ((Ty = dyn_cast<ArrayType>(EltTy))) {
+ int64_t UpperBound = 0;
+ int64_t LowerBound = 0;
+ if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(Ty)) {
+ if (CAT->getSize().getZExtValue())
+ UpperBound = CAT->getSize().getZExtValue() - 1;
+ } else
+ // This is an unbounded array. Use Low = 1, Hi = 0 to express such
+ // arrays.
+ LowerBound = 1;
+
+ // FIXME: Verify this is right for VLAs.
+ Subscripts.push_back(DBuilder.getOrCreateSubrange(LowerBound,
+ UpperBound));
EltTy = Ty->getElementType();
- else {
- while ((Ty = dyn_cast<ArrayType>(EltTy))) {
- int64_t UpperBound = 0;
- int64_t LowerBound = 0;
- if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(Ty)) {
- if (CAT->getSize().getZExtValue())
- UpperBound = CAT->getSize().getZExtValue() - 1;
- } else
- // This is an unbounded array. Use Low = 1, Hi = 0 to express such
- // arrays.
- LowerBound = 1;
-
- // FIXME: Verify this is right for VLAs.
- Subscripts.push_back(DBuilder.getOrCreateSubrange(LowerBound,
- UpperBound));
- EltTy = Ty->getElementType();
- }
}
llvm::DIArray SubscriptArray = DBuilder.getOrCreateArray(Subscripts);
diff --git a/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp b/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp
index 81657d80661c..7f9ed9a75305 100644
--- a/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp
+++ b/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp
@@ -1830,6 +1830,7 @@ enum LinuxDistro {
OpenSuse11_3,
OpenSuse11_4,
OpenSuse12_1,
+ OpenSuse12_2,
UbuntuHardy,
UbuntuIntrepid,
UbuntuJaunty,
@@ -1848,7 +1849,7 @@ static bool IsRedhat(enum LinuxDistro Distro) {
}
static bool IsOpenSuse(enum LinuxDistro Distro) {
- return Distro >= OpenSuse11_3 && Distro <= OpenSuse12_1;
+ return Distro >= OpenSuse11_3 && Distro <= OpenSuse12_2;
}
static bool IsDebian(enum LinuxDistro Distro) {
@@ -1925,6 +1926,7 @@ static LinuxDistro DetectLinuxDistro(llvm::Triple::ArchType Arch) {
.StartsWith("openSUSE 11.3", OpenSuse11_3)
.StartsWith("openSUSE 11.4", OpenSuse11_4)
.StartsWith("openSUSE 12.1", OpenSuse12_1)
+ .StartsWith("openSUSE 12.2", OpenSuse12_2)
.Default(UnknownDistro);
bool Exists;
diff --git a/contrib/llvm/tools/clang/lib/Driver/Tools.cpp b/contrib/llvm/tools/clang/lib/Driver/Tools.cpp
index 04fa8a1bb826..00aa6c7408ca 100644
--- a/contrib/llvm/tools/clang/lib/Driver/Tools.cpp
+++ b/contrib/llvm/tools/clang/lib/Driver/Tools.cpp
@@ -4760,6 +4760,9 @@ void freebsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back("-dynamic-linker");
CmdArgs.push_back("/libexec/ld-elf.so.1");
}
+ llvm::Triple::ArchType Arch = getToolChain().getArch();
+ if (Arch == llvm::Triple::x86 || Arch == llvm::Triple::x86_64)
+ CmdArgs.push_back("--hash-style=both");
}
// When building 32-bit code on FreeBSD/amd64, we have to explicitly
diff --git a/contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp b/contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp
index 803e418e2413..4ec3ba1695a8 100644
--- a/contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp
+++ b/contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp
@@ -560,7 +560,8 @@ CompilerInstance::createOutputFile(StringRef OutputPath,
TempPath += "-%%%%%%%%";
int fd;
if (llvm::sys::fs::unique_file(TempPath.str(), fd, TempPath,
- /*makeAbsolute=*/false) == llvm::errc::success) {
+ /*makeAbsolute=*/false, 0664)
+ == llvm::errc::success) {
OS.reset(new llvm::raw_fd_ostream(fd, /*shouldClose=*/true));
OSFile = TempFile = TempPath.str();
}
diff --git a/contrib/llvm/tools/clang/lib/Parse/ParseCXXInlineMethods.cpp b/contrib/llvm/tools/clang/lib/Parse/ParseCXXInlineMethods.cpp
index f04d76723b6f..c7b29d9ba28e 100644
--- a/contrib/llvm/tools/clang/lib/Parse/ParseCXXInlineMethods.cpp
+++ b/contrib/llvm/tools/clang/lib/Parse/ParseCXXInlineMethods.cpp
@@ -348,77 +348,7 @@ void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) {
LM.DefaultArgs[I].Toks = 0;
}
}
-
- // Parse a delayed exception-specification, if there is one.
- if (CachedTokens *Toks = LM.ExceptionSpecTokens) {
- // Save the current token position.
- SourceLocation origLoc = Tok.getLocation();
-
- // Parse the default argument from its saved token stream.
- Toks->push_back(Tok); // So that the current token doesn't get lost
- PP.EnterTokenStream(&Toks->front(), Toks->size(), true, false);
-
- // Consume the previously-pushed token.
- ConsumeAnyToken();
-
- // C++11 [expr.prim.general]p3:
- // If a declaration declares a member function or member function
- // template of a class X, the expression this is a prvalue of type
- // "pointer to cv-qualifier-seq X" between the optional cv-qualifer-seq
- // and the end of the function-definition, member-declarator, or
- // declarator.
- CXXMethodDecl *Method;
- if (FunctionTemplateDecl *FunTmpl
- = dyn_cast<FunctionTemplateDecl>(LM.Method))
- Method = cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl());
- else
- Method = cast<CXXMethodDecl>(LM.Method);
-
- Sema::CXXThisScopeRAII ThisScope(Actions, Method->getParent(),
- Method->getTypeQualifiers(),
- getLangOpts().CPlusPlus0x);
-
- // Parse the exception-specification.
- SourceRange SpecificationRange;
- SmallVector<ParsedType, 4> DynamicExceptions;
- SmallVector<SourceRange, 4> DynamicExceptionRanges;
- ExprResult NoexceptExpr;
- CachedTokens *ExceptionSpecTokens;
-
- ExceptionSpecificationType EST
- = tryParseExceptionSpecification(/*Delayed=*/false, SpecificationRange,
- DynamicExceptions,
- DynamicExceptionRanges, NoexceptExpr,
- ExceptionSpecTokens);
-
- // Clean up the remaining tokens.
- if (Tok.is(tok::cxx_exceptspec_end))
- ConsumeToken();
- else if (EST != EST_None)
- Diag(Tok.getLocation(), diag::err_except_spec_unparsed);
-
- // Attach the exception-specification to the method.
- if (EST != EST_None)
- Actions.actOnDelayedExceptionSpecification(LM.Method, EST,
- SpecificationRange,
- DynamicExceptions,
- DynamicExceptionRanges,
- NoexceptExpr.isUsable()?
- NoexceptExpr.get() : 0);
-
- assert(!PP.getSourceManager().isBeforeInTranslationUnit(origLoc,
- Tok.getLocation()) &&
- "tryParseExceptionSpecification went over the exception tokens!");
-
- // There could be leftover tokens (e.g. because of an error).
- // Skip through until we reach the original token position.
- while (Tok.getLocation() != origLoc && Tok.isNot(tok::eof))
- ConsumeAnyToken();
-
- delete LM.ExceptionSpecTokens;
- LM.ExceptionSpecTokens = 0;
- }
-
+
PrototypeScope.Exit();
// Finish the delayed C++ method declaration.
diff --git a/contrib/llvm/tools/clang/lib/Parse/ParseDecl.cpp b/contrib/llvm/tools/clang/lib/Parse/ParseDecl.cpp
index 932ffb440fd2..7995e68d3f27 100644
--- a/contrib/llvm/tools/clang/lib/Parse/ParseDecl.cpp
+++ b/contrib/llvm/tools/clang/lib/Parse/ParseDecl.cpp
@@ -4197,7 +4197,6 @@ void Parser::ParseFunctionDeclarator(Declarator &D,
SmallVector<ParsedType, 2> DynamicExceptions;
SmallVector<SourceRange, 2> DynamicExceptionRanges;
ExprResult NoexceptExpr;
- CachedTokens *ExceptionSpecTokens = 0;
ParsedAttributes FnAttrs(AttrFactory);
ParsedType TrailingReturnType;
@@ -4264,18 +4263,12 @@ void Parser::ParseFunctionDeclarator(Declarator &D,
dyn_cast<CXXRecordDecl>(Actions.CurContext),
DS.getTypeQualifiers(),
IsCXX11MemberFunction);
-
+
// Parse exception-specification[opt].
- bool Delayed = (D.getContext() == Declarator::MemberContext &&
- D.getDeclSpec().getStorageClassSpec()
- != DeclSpec::SCS_typedef &&
- !D.getDeclSpec().isFriendSpecified());
- ESpecType = tryParseExceptionSpecification(Delayed,
- ESpecRange,
+ ESpecType = tryParseExceptionSpecification(ESpecRange,
DynamicExceptions,
DynamicExceptionRanges,
- NoexceptExpr,
- ExceptionSpecTokens);
+ NoexceptExpr);
if (ESpecType != EST_None)
EndLoc = ESpecRange.getEnd();
@@ -4310,7 +4303,6 @@ void Parser::ParseFunctionDeclarator(Declarator &D,
DynamicExceptions.size(),
NoexceptExpr.isUsable() ?
NoexceptExpr.get() : 0,
- ExceptionSpecTokens,
Tracker.getOpenLocation(),
EndLoc, D,
TrailingReturnType),
diff --git a/contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp b/contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp
index b9b51d751822..5e6c4f50e036 100644
--- a/contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1535,34 +1535,16 @@ AccessSpecifier Parser::getAccessSpecifierIfPresent() const {
}
/// \brief If the given declarator has any parts for which parsing has to be
-/// delayed, e.g., default arguments or an exception-specification, create a
-/// late-parsed method declaration record to handle the parsing at the end of
-/// the class definition.
+/// delayed, e.g., default arguments, create a late-parsed method declaration
+/// record to handle the parsing at the end of the class definition.
void Parser::HandleMemberFunctionDeclDelays(Declarator& DeclaratorInfo,
Decl *ThisDecl) {
// We just declared a member function. If this member function
- // has any default arguments or an exception-specification, we'll need to
- // parse them later.
+ // has any default arguments, we'll need to parse them later.
LateParsedMethodDeclaration *LateMethod = 0;
DeclaratorChunk::FunctionTypeInfo &FTI
= DeclaratorInfo.getFunctionTypeInfo();
-
- // If there was a delayed exception-specification, hold onto its tokens.
- if (FTI.getExceptionSpecType() == EST_Delayed) {
- // Push this method onto the stack of late-parsed method
- // declarations.
- LateMethod = new LateParsedMethodDeclaration(this, ThisDecl);
- getCurrentClass().LateParsedDeclarations.push_back(LateMethod);
- LateMethod->TemplateScope = getCurScope()->isTemplateParamScope();
-
- // Stash the exception-specification tokens in the late-pased mthod.
- LateMethod->ExceptionSpecTokens = FTI.ExceptionSpecTokens;
- FTI.ExceptionSpecTokens = 0;
- // Reserve space for the parameters.
- LateMethod->DefaultArgs.reserve(FTI.NumArgs);
- }
-
for (unsigned ParamIdx = 0; ParamIdx < FTI.NumArgs; ++ParamIdx) {
if (LateMethod || FTI.ArgInfo[ParamIdx].DefaultArgTokens) {
if (!LateMethod) {
@@ -1846,7 +1828,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
// Parse the first declarator.
ParseDeclarator(DeclaratorInfo);
- // Error parsin g the declarator?
+ // Error parsing the declarator?
if (!DeclaratorInfo.hasName()) {
// If so, skip until the semi-colon or a }.
SkipUntil(tok::r_brace, true, true);
@@ -2065,7 +2047,7 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
DeclsInGroup.push_back(ThisDecl);
}
- if (DeclaratorInfo.isFunctionDeclarator() &&
+ if (ThisDecl && DeclaratorInfo.isFunctionDeclarator() &&
DeclaratorInfo.getDeclSpec().getStorageClassSpec()
!= DeclSpec::SCS_typedef) {
HandleMemberFunctionDeclDelays(DeclaratorInfo, ThisDecl);
@@ -2358,7 +2340,7 @@ void Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc,
// C++11 [class.mem]p2:
// Within the class member-specification, the class is regarded as complete
- // within function bodies, default arguments, exception-specifications, and
+ // within function bodies, default arguments, and
// brace-or-equal-initializers for non-static data members (including such
// things in nested classes).
if (TagDecl && NonNestedClass) {
@@ -2369,6 +2351,10 @@ void Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc,
SourceLocation SavedPrevTokLocation = PrevTokLocation;
ParseLexedAttributes(getCurrentClass());
ParseLexedMethodDeclarations(getCurrentClass());
+
+ // We've finished with all pending member declarations.
+ Actions.ActOnFinishCXXMemberDecls();
+
ParseLexedMemberInitializers(getCurrentClass());
ParseLexedMethodDefs(getCurrentClass());
PrevTokLocation = SavedPrevTokLocation;
@@ -2555,63 +2541,13 @@ Parser::MemInitResult Parser::ParseMemInitializer(Decl *ConstructorDecl) {
/// 'noexcept'
/// 'noexcept' '(' constant-expression ')'
ExceptionSpecificationType
-Parser::tryParseExceptionSpecification(bool Delayed,
+Parser::tryParseExceptionSpecification(
SourceRange &SpecificationRange,
SmallVectorImpl<ParsedType> &DynamicExceptions,
SmallVectorImpl<SourceRange> &DynamicExceptionRanges,
- ExprResult &NoexceptExpr,
- CachedTokens *&ExceptionSpecTokens) {
+ ExprResult &NoexceptExpr) {
ExceptionSpecificationType Result = EST_None;
- ExceptionSpecTokens = 0;
-
- // Handle delayed parsing of exception-specifications.
- if (Delayed) {
- if (Tok.isNot(tok::kw_throw) && Tok.isNot(tok::kw_noexcept))
- return EST_None;
-
- // Consume and cache the starting token.
- bool IsNoexcept = Tok.is(tok::kw_noexcept);
- Token StartTok = Tok;
- SpecificationRange = SourceRange(ConsumeToken());
-
- // Check for a '('.
- if (!Tok.is(tok::l_paren)) {
- // If this is a bare 'noexcept', we're done.
- if (IsNoexcept) {
- Diag(Tok, diag::warn_cxx98_compat_noexcept_decl);
- NoexceptExpr = 0;
- return EST_BasicNoexcept;
- }
-
- Diag(Tok, diag::err_expected_lparen_after) << "throw";
- return EST_DynamicNone;
- }
-
- // Cache the tokens for the exception-specification.
- ExceptionSpecTokens = new CachedTokens;
- ExceptionSpecTokens->push_back(StartTok); // 'throw' or 'noexcept'
- ExceptionSpecTokens->push_back(Tok); // '('
- SpecificationRange.setEnd(ConsumeParen()); // '('
-
- if (!ConsumeAndStoreUntil(tok::r_paren, *ExceptionSpecTokens,
- /*StopAtSemi=*/true,
- /*ConsumeFinalToken=*/true)) {
- NoexceptExpr = 0;
- delete ExceptionSpecTokens;
- ExceptionSpecTokens = 0;
- return IsNoexcept? EST_BasicNoexcept : EST_DynamicNone;
- }
- SpecificationRange.setEnd(Tok.getLocation());
-
- // Add the 'stop' token.
- Token End;
- End.startToken();
- End.setKind(tok::cxx_exceptspec_end);
- End.setLocation(Tok.getLocation());
- ExceptionSpecTokens->push_back(End);
- return EST_Delayed;
- }
-
+
// See if there's a dynamic specification.
if (Tok.is(tok::kw_throw)) {
Result = ParseDynamicExceptionSpecification(SpecificationRange,
diff --git a/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp b/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp
index b6a027b0d794..6d31396cc016 100644
--- a/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp
+++ b/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp
@@ -2392,7 +2392,7 @@ ExprResult Parser::ParseBlockLiteralExpression() {
SourceLocation(),
EST_None,
SourceLocation(),
- 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,
CaretLoc, CaretLoc,
ParamInfo),
attrs, CaretLoc);
diff --git a/contrib/llvm/tools/clang/lib/Parse/ParseExprCXX.cpp b/contrib/llvm/tools/clang/lib/Parse/ParseExprCXX.cpp
index ae6ad0b275b6..715218448a3e 100644
--- a/contrib/llvm/tools/clang/lib/Parse/ParseExprCXX.cpp
+++ b/contrib/llvm/tools/clang/lib/Parse/ParseExprCXX.cpp
@@ -780,13 +780,10 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer(
llvm::SmallVector<ParsedType, 2> DynamicExceptions;
llvm::SmallVector<SourceRange, 2> DynamicExceptionRanges;
ExprResult NoexceptExpr;
- CachedTokens *ExceptionSpecTokens;
- ESpecType = tryParseExceptionSpecification(/*Delayed=*/false,
- ESpecRange,
+ ESpecType = tryParseExceptionSpecification(ESpecRange,
DynamicExceptions,
DynamicExceptionRanges,
- NoexceptExpr,
- ExceptionSpecTokens);
+ NoexceptExpr);
if (ESpecType != EST_None)
DeclEndLoc = ESpecRange.getEnd();
@@ -821,7 +818,6 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer(
DynamicExceptions.size(),
NoexceptExpr.isUsable() ?
NoexceptExpr.get() : 0,
- 0,
DeclLoc, DeclEndLoc, D,
TrailingReturnType),
Attr, DeclEndLoc);
@@ -867,7 +863,6 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer(
/*ExceptionRanges=*/0,
/*NumExceptions=*/0,
/*NoexceptExpr=*/0,
- /*ExceptionSpecTokens=*/0,
DeclLoc, DeclEndLoc, D,
TrailingReturnType),
Attr, DeclEndLoc);
diff --git a/contrib/llvm/tools/clang/lib/Sema/DeclSpec.cpp b/contrib/llvm/tools/clang/lib/Sema/DeclSpec.cpp
index fe63e359a19a..b531accf868a 100644
--- a/contrib/llvm/tools/clang/lib/Sema/DeclSpec.cpp
+++ b/contrib/llvm/tools/clang/lib/Sema/DeclSpec.cpp
@@ -162,7 +162,6 @@ DeclaratorChunk DeclaratorChunk::getFunction(bool hasProto, bool isVariadic,
SourceRange *ExceptionRanges,
unsigned NumExceptions,
Expr *NoexceptExpr,
- CachedTokens *ExceptionSpecTokens,
SourceLocation LocalRangeBegin,
SourceLocation LocalRangeEnd,
Declarator &TheDeclarator,
@@ -227,10 +226,6 @@ DeclaratorChunk DeclaratorChunk::getFunction(bool hasProto, bool isVariadic,
case EST_ComputedNoexcept:
I.Fun.NoexceptExpr = NoexceptExpr;
break;
-
- case EST_Delayed:
- I.Fun.ExceptionSpecTokens = ExceptionSpecTokens;
- break;
}
return I;
}
diff --git a/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp b/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp
index 1550993079a7..1227e92f76eb 100644
--- a/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp
+++ b/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp
@@ -7635,7 +7635,7 @@ NamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc,
SourceLocation(), SourceLocation(),
SourceLocation(),
EST_None, SourceLocation(),
- 0, 0, 0, 0, 0, Loc, Loc, D),
+ 0, 0, 0, 0, Loc, Loc, D),
DS.getAttributes(),
SourceLocation());
D.SetIdentifier(&II, Loc);
@@ -9784,21 +9784,6 @@ void Sema::ActOnFields(Scope* S,
if (!Completed)
Record->completeDefinition();
- // Now that the record is complete, do any delayed exception spec checks
- // we were missing.
- while (!DelayedDestructorExceptionSpecChecks.empty()) {
- const CXXDestructorDecl *Dtor =
- DelayedDestructorExceptionSpecChecks.back().first;
- if (Dtor->getParent() != Record)
- break;
-
- assert(!Dtor->getParent()->isDependentType() &&
- "Should not ever add destructors of templates into the list.");
- CheckOverridingFunctionExceptionSpec(Dtor,
- DelayedDestructorExceptionSpecChecks.back().second);
- DelayedDestructorExceptionSpecChecks.pop_back();
- }
-
} else {
ObjCIvarDecl **ClsFields =
reinterpret_cast<ObjCIvarDecl**>(RecFields.data());
diff --git a/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp b/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp
index 1d251b9eb74b..c861072ad749 100644
--- a/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7319,15 +7319,42 @@ void Sema::DefineImplicitDestructor(SourceLocation CurrentLocation,
}
}
+/// \brief Perform any semantic analysis which needs to be delayed until all
+/// pending class member declarations have been parsed.
+void Sema::ActOnFinishCXXMemberDecls() {
+ // Now we have parsed all exception specifications, determine the implicit
+ // exception specifications for destructors.
+ for (unsigned i = 0, e = DelayedDestructorExceptionSpecs.size();
+ i != e; ++i) {
+ CXXDestructorDecl *Dtor = DelayedDestructorExceptionSpecs[i];
+ AdjustDestructorExceptionSpec(Dtor->getParent(), Dtor, true);
+ }
+ DelayedDestructorExceptionSpecs.clear();
+
+ // Perform any deferred checking of exception specifications for virtual
+ // destructors.
+ for (unsigned i = 0, e = DelayedDestructorExceptionSpecChecks.size();
+ i != e; ++i) {
+ const CXXDestructorDecl *Dtor =
+ DelayedDestructorExceptionSpecChecks[i].first;
+ assert(!Dtor->getParent()->isDependentType() &&
+ "Should not ever add destructors of templates into the list.");
+ CheckOverridingFunctionExceptionSpec(Dtor,
+ DelayedDestructorExceptionSpecChecks[i].second);
+ }
+ DelayedDestructorExceptionSpecChecks.clear();
+}
+
void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *classDecl,
- CXXDestructorDecl *destructor) {
+ CXXDestructorDecl *destructor,
+ bool WasDelayed) {
// C++11 [class.dtor]p3:
// A declaration of a destructor that does not have an exception-
// specification is implicitly considered to have the same exception-
// specification as an implicit declaration.
const FunctionProtoType *dtorType = destructor->getType()->
getAs<FunctionProtoType>();
- if (dtorType->hasExceptionSpec())
+ if (!WasDelayed && dtorType->hasExceptionSpec())
return;
ImplicitExceptionSpecification exceptSpec =
@@ -7344,6 +7371,14 @@ void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *classDecl,
destructor->setType(ty);
+ // If we can't compute the exception specification for this destructor yet
+ // (because it depends on an exception specification which we have not parsed
+ // yet), make a note that we need to try again when the class is complete.
+ if (epi.ExceptionSpecType == EST_Delayed) {
+ assert(!WasDelayed && "couldn't compute destructor exception spec");
+ DelayedDestructorExceptionSpecs.push_back(destructor);
+ }
+
// FIXME: If the destructor has a body that could throw, and the newly created
// spec doesn't allow exceptions, we should emit a warning, because this
// change in behavior can break conforming C++03 programs at runtime.
@@ -7579,8 +7614,9 @@ Sema::ComputeDefaultedCopyAssignmentExceptionSpecAndConst(
assert(!Base->getType()->isDependentType() &&
"Cannot generate implicit members for class with dependent bases.");
CXXRecordDecl *BaseClassDecl = Base->getType()->getAsCXXRecordDecl();
- LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const, false, 0,
- &HasConstCopyAssignment);
+ HasConstCopyAssignment &=
+ (bool)LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const,
+ false, 0);
}
// In C++11, the above citation has "or virtual" added
@@ -7591,8 +7627,9 @@ Sema::ComputeDefaultedCopyAssignmentExceptionSpecAndConst(
assert(!Base->getType()->isDependentType() &&
"Cannot generate implicit members for class with dependent bases.");
CXXRecordDecl *BaseClassDecl = Base->getType()->getAsCXXRecordDecl();
- LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const, false, 0,
- &HasConstCopyAssignment);
+ HasConstCopyAssignment &=
+ (bool)LookupCopyingAssignment(BaseClassDecl, Qualifiers::Const,
+ false, 0);
}
}
@@ -7606,8 +7643,9 @@ Sema::ComputeDefaultedCopyAssignmentExceptionSpecAndConst(
++Field) {
QualType FieldType = Context.getBaseElementType((*Field)->getType());
if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
- LookupCopyingAssignment(FieldClassDecl, Qualifiers::Const, false, 0,
- &HasConstCopyAssignment);
+ HasConstCopyAssignment &=
+ (bool)LookupCopyingAssignment(FieldClassDecl, Qualifiers::Const,
+ false, 0);
}
}
@@ -8610,8 +8648,8 @@ Sema::ComputeDefaultedCopyCtorExceptionSpecAndConst(CXXRecordDecl *ClassDecl) {
CXXRecordDecl *BaseClassDecl
= cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
- LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const,
- &HasConstCopyConstructor);
+ HasConstCopyConstructor &=
+ (bool)LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const);
}
for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
@@ -8620,8 +8658,8 @@ Sema::ComputeDefaultedCopyCtorExceptionSpecAndConst(CXXRecordDecl *ClassDecl) {
++Base) {
CXXRecordDecl *BaseClassDecl
= cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
- LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const,
- &HasConstCopyConstructor);
+ HasConstCopyConstructor &=
+ (bool)LookupCopyingConstructor(BaseClassDecl, Qualifiers::Const);
}
// -- for all the nonstatic data members of X that are of a
@@ -8634,8 +8672,8 @@ Sema::ComputeDefaultedCopyCtorExceptionSpecAndConst(CXXRecordDecl *ClassDecl) {
++Field) {
QualType FieldType = Context.getBaseElementType((*Field)->getType());
if (CXXRecordDecl *FieldClassDecl = FieldType->getAsCXXRecordDecl()) {
- LookupCopyingConstructor(FieldClassDecl, Qualifiers::Const,
- &HasConstCopyConstructor);
+ HasConstCopyConstructor &=
+ (bool)LookupCopyingConstructor(FieldClassDecl, Qualifiers::Const);
}
}
// Otherwise, the implicitly declared copy constructor will have
@@ -11260,66 +11298,6 @@ Sema::checkExceptionSpecification(ExceptionSpecificationType EST,
}
}
-void Sema::actOnDelayedExceptionSpecification(Decl *MethodD,
- ExceptionSpecificationType EST,
- SourceRange SpecificationRange,
- ArrayRef<ParsedType> DynamicExceptions,
- ArrayRef<SourceRange> DynamicExceptionRanges,
- Expr *NoexceptExpr) {
- if (!MethodD)
- return;
-
- // Dig out the method we're referring to.
- CXXMethodDecl *Method = 0;
- if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(MethodD))
- Method = dyn_cast<CXXMethodDecl>(FunTmpl->getTemplatedDecl());
- else
- Method = dyn_cast<CXXMethodDecl>(MethodD);
-
- if (!Method)
- return;
-
- // Dig out the prototype. This should never fail.
- const FunctionProtoType *Proto
- = dyn_cast<FunctionProtoType>(Method->getType());
- if (!Proto)
- return;
-
- // Check the exception specification.
- llvm::SmallVector<QualType, 4> Exceptions;
- FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
- checkExceptionSpecification(EST, DynamicExceptions, DynamicExceptionRanges,
- NoexceptExpr, Exceptions, EPI);
-
- // Rebuild the function type.
- QualType T = Context.getFunctionType(Proto->getResultType(),
- Proto->arg_type_begin(),
- Proto->getNumArgs(),
- EPI);
- if (TypeSourceInfo *TSInfo = Method->getTypeSourceInfo()) {
- // FIXME: When we get proper type location information for exceptions,
- // we'll also have to rebuild the TypeSourceInfo. For now, we just patch
- // up the TypeSourceInfo;
- assert(TypeLoc::getFullDataSizeForType(T)
- == TypeLoc::getFullDataSizeForType(Method->getType()) &&
- "TypeLoc size mismatch with delayed exception specification");
- TSInfo->overrideType(T);
- }
-
- Method->setType(T);
-
- if (Method->isStatic())
- checkThisInStaticMemberFunctionExceptionSpec(Method);
-
- if (Method->isVirtual()) {
- // Check overrides, which we previously had to delay.
- for (CXXMethodDecl::method_iterator O = Method->begin_overridden_methods(),
- OEnd = Method->end_overridden_methods();
- O != OEnd; ++O)
- CheckOverridingFunctionExceptionSpec(Method, *O);
- }
-}
-
/// IdentifyCUDATarget - Determine the CUDA compilation target for this function
Sema::CUDAFunctionTarget Sema::IdentifyCUDATarget(const FunctionDecl *D) {
// Implicitly declared functions (e.g. copy constructors) are
diff --git a/contrib/llvm/tools/clang/lib/Sema/SemaLookup.cpp b/contrib/llvm/tools/clang/lib/Sema/SemaLookup.cpp
index f003bddc05bb..9f5138ba4a40 100644
--- a/contrib/llvm/tools/clang/lib/Sema/SemaLookup.cpp
+++ b/contrib/llvm/tools/clang/lib/Sema/SemaLookup.cpp
@@ -2277,7 +2277,7 @@ Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD,
Result->setMethod(DD);
Result->setKind(DD->isDeleted() ?
SpecialMemberOverloadResult::NoMemberOrDeleted :
- SpecialMemberOverloadResult::SuccessNonConst);
+ SpecialMemberOverloadResult::Success);
return Result;
}
@@ -2288,6 +2288,9 @@ Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD,
Expr *Arg = 0;
unsigned NumArgs;
+ QualType ArgType = CanTy;
+ ExprValueKind VK = VK_LValue;
+
if (SM == CXXDefaultConstructor) {
Name = Context.DeclarationNames.getCXXConstructorName(CanTy);
NumArgs = 0;
@@ -2308,7 +2311,6 @@ Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD,
DeclareImplicitMoveAssignment(RD);
}
- QualType ArgType = CanTy;
if (ConstArg)
ArgType.addConst();
if (VolatileArg)
@@ -2321,14 +2323,17 @@ Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD,
// Possibly an XValue is actually correct in the case of move, but
// there is no semantic difference for class types in this restricted
// case.
- ExprValueKind VK;
if (SM == CXXCopyConstructor || SM == CXXCopyAssignment)
VK = VK_LValue;
else
VK = VK_RValue;
+ }
+ OpaqueValueExpr FakeArg(SourceLocation(), ArgType, VK);
+
+ if (SM != CXXDefaultConstructor) {
NumArgs = 1;
- Arg = new (Context) OpaqueValueExpr(SourceLocation(), ArgType, VK);
+ Arg = &FakeArg;
}
// Create the object argument
@@ -2338,17 +2343,14 @@ Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD,
if (VolatileThis)
ThisTy.addVolatile();
Expr::Classification Classification =
- (new (Context) OpaqueValueExpr(SourceLocation(), ThisTy,
- RValueThis ? VK_RValue : VK_LValue))->
- Classify(Context);
+ OpaqueValueExpr(SourceLocation(), ThisTy,
+ RValueThis ? VK_RValue : VK_LValue).Classify(Context);
// Now we perform lookup on the name we computed earlier and do overload
// resolution. Lookup is only performed directly into the class since there
// will always be a (possibly implicit) declaration to shadow any others.
OverloadCandidateSet OCS((SourceLocation()));
DeclContext::lookup_iterator I, E;
- SpecialMemberOverloadResult::Kind SuccessKind =
- SpecialMemberOverloadResult::SuccessNonConst;
llvm::tie(I, E) = RD->lookup(Name);
assert((I != E) &&
@@ -2378,17 +2380,6 @@ Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD,
else
AddOverloadCandidate(M, DeclAccessPair::make(M, AS_public),
llvm::makeArrayRef(&Arg, NumArgs), OCS, true);
-
- // Here we're looking for a const parameter to speed up creation of
- // implicit copy methods.
- if ((SM == CXXCopyAssignment && M->isCopyAssignmentOperator()) ||
- (SM == CXXCopyConstructor &&
- cast<CXXConstructorDecl>(M)->isCopyConstructor())) {
- QualType ArgType = M->getType()->getAs<FunctionProtoType>()->getArgType(0);
- if (!ArgType->isReferenceType() ||
- ArgType->getPointeeType().isConstQualified())
- SuccessKind = SpecialMemberOverloadResult::SuccessConst;
- }
} else if (FunctionTemplateDecl *Tmpl =
dyn_cast<FunctionTemplateDecl>(Cand)) {
if (SM == CXXCopyAssignment || SM == CXXMoveAssignment)
@@ -2409,7 +2400,7 @@ Sema::SpecialMemberOverloadResult *Sema::LookupSpecialMember(CXXRecordDecl *RD,
switch (OCS.BestViableFunction(*this, SourceLocation(), Best)) {
case OR_Success:
Result->setMethod(cast<CXXMethodDecl>(Best->Function));
- Result->setKind(SuccessKind);
+ Result->setKind(SpecialMemberOverloadResult::Success);
break;
case OR_Deleted:
@@ -2442,17 +2433,13 @@ CXXConstructorDecl *Sema::LookupDefaultConstructor(CXXRecordDecl *Class) {
/// \brief Look up the copying constructor for the given class.
CXXConstructorDecl *Sema::LookupCopyingConstructor(CXXRecordDecl *Class,
- unsigned Quals,
- bool *ConstParamMatch) {
+ unsigned Quals) {
assert(!(Quals & ~(Qualifiers::Const | Qualifiers::Volatile)) &&
"non-const, non-volatile qualifiers for copy ctor arg");
SpecialMemberOverloadResult *Result =
LookupSpecialMember(Class, CXXCopyConstructor, Quals & Qualifiers::Const,
Quals & Qualifiers::Volatile, false, false, false);
- if (ConstParamMatch)
- *ConstParamMatch = Result->hasConstParamMatch();
-
return cast_or_null<CXXConstructorDecl>(Result->getMethod());
}
@@ -2485,8 +2472,7 @@ DeclContext::lookup_result Sema::LookupConstructors(CXXRecordDecl *Class) {
/// \brief Look up the copying assignment operator for the given class.
CXXMethodDecl *Sema::LookupCopyingAssignment(CXXRecordDecl *Class,
unsigned Quals, bool RValueThis,
- unsigned ThisQuals,
- bool *ConstParamMatch) {
+ unsigned ThisQuals) {
assert(!(Quals & ~(Qualifiers::Const | Qualifiers::Volatile)) &&
"non-const, non-volatile qualifiers for copy assignment arg");
assert(!(ThisQuals & ~(Qualifiers::Const | Qualifiers::Volatile)) &&
@@ -2497,9 +2483,6 @@ CXXMethodDecl *Sema::LookupCopyingAssignment(CXXRecordDecl *Class,
ThisQuals & Qualifiers::Const,
ThisQuals & Qualifiers::Volatile);
- if (ConstParamMatch)
- *ConstParamMatch = Result->hasConstParamMatch();
-
return Result->getMethod();
}
diff --git a/contrib/llvm/tools/clang/lib/Sema/SemaType.cpp b/contrib/llvm/tools/clang/lib/Sema/SemaType.cpp
index d0906ded0cbb..1400e7e5c419 100644
--- a/contrib/llvm/tools/clang/lib/Sema/SemaType.cpp
+++ b/contrib/llvm/tools/clang/lib/Sema/SemaType.cpp
@@ -561,7 +561,7 @@ static void maybeSynthesizeBlockSignature(TypeProcessingState &state,
/*const qualifier*/SourceLocation(),
/*volatile qualifier*/SourceLocation(),
/*mutable qualifier*/SourceLocation(),
- /*EH*/ EST_None, SourceLocation(), 0, 0, 0, 0, 0,
+ /*EH*/ EST_None, SourceLocation(), 0, 0, 0, 0,
/*parens*/ loc, loc,
declarator));
@@ -4195,7 +4195,8 @@ bool Sema::RequireCompleteType(SourceLocation Loc, QualType T,
// class template specialization, or an array with known size of such,
// try to instantiate it.
QualType MaybeTemplate = T;
- if (const ConstantArrayType *Array = Context.getAsConstantArrayType(T))
+ while (const ConstantArrayType *Array
+ = Context.getAsConstantArrayType(MaybeTemplate))
MaybeTemplate = Array->getElementType();
if (const RecordType *Record = MaybeTemplate->getAs<RecordType>()) {
if (ClassTemplateSpecializationDecl *ClassTemplateSpec
diff --git a/contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp b/contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp
index 06b42f3ab130..fd0c17139468 100644
--- a/contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp
+++ b/contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp
@@ -3866,6 +3866,9 @@ QualType ASTReader::readTypeRecord(unsigned Index) {
EPI.Exceptions = Exceptions.data();
} else if (EST == EST_ComputedNoexcept) {
EPI.NoexceptExpr = ReadExpr(*Loc.F);
+ } else if (EST == EST_Uninstantiated) {
+ EPI.ExceptionSpecDecl = ReadDeclAs<FunctionDecl>(*Loc.F, Record, Idx);
+ EPI.ExceptionSpecTemplate = ReadDeclAs<FunctionDecl>(*Loc.F, Record, Idx);
}
return Context.getFunctionType(ResultType, ParamTypes.data(), NumParams,
EPI);
diff --git a/contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp b/contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp
index 81c0a9dd48ac..36933a9d9b8c 100644
--- a/contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp
+++ b/contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp
@@ -195,6 +195,9 @@ void ASTTypeWriter::VisitFunctionProtoType(const FunctionProtoType *T) {
Writer.AddTypeRef(T->getExceptionType(I), Record);
} else if (T->getExceptionSpecType() == EST_ComputedNoexcept) {
Writer.AddStmt(T->getNoexceptExpr());
+ } else if (T->getExceptionSpecType() == EST_Uninstantiated) {
+ Writer.AddDeclRef(T->getExceptionSpecDecl(), Record);
+ Writer.AddDeclRef(T->getExceptionSpecTemplate(), Record);
}
Code = TYPE_FUNCTION_PROTO;
}
diff --git a/contrib/ncurses/man/curs_threads.3x b/contrib/ncurses/man/curs_threads.3x
index 17dabdb7b40a..867c4e428155 100644
--- a/contrib/ncurses/man/curs_threads.3x
+++ b/contrib/ncurses/man/curs_threads.3x
@@ -45,9 +45,9 @@
.br
\fBint set_tabsize(int size);\fR
.br
-\fBint use_screen(SCREEN *scr, NCURSES_WINDOW_CB func, void *data);\fR
+\fBint use_screen(SCREEN *scr, NCURSES_SCREEN_CB func, void *data);\fR
.br
-\fBint use_window(WINDOW *win, NCURSES_SCREEN_CB func, void *data);\fR
+\fBint use_window(WINDOW *win, NCURSES_WINDOW_CB func, void *data);\fR
.br
.SH DESCRIPTION
This implementation can be configured to provide rudimentary support
diff --git a/contrib/openpam/CREDITS b/contrib/openpam/CREDITS
index a003ac0ad7df..2725d8888cb1 100644
--- a/contrib/openpam/CREDITS
+++ b/contrib/openpam/CREDITS
@@ -16,16 +16,21 @@ ideas:
Brian Fundakowski Feldman <green@freebsd.org>
Christos Zoulas <christos@netbsd.org>
Daniel Richard G. <skunk@iskunk.org>
- Darren J. Moffat <Darren.Moffat@sun.com>
+ Darren J. Moffat <darren.moffat@sun.com>
Dmitry V. Levin <ldv@altlinux.org>
+ Don Lewis <truckman@freebsd.org>
Emmanuel Dreyfus <manu@netbsd.org>
Eric Melville <eric@freebsd.org>
- Gary Winiger <Gary.Winiger@sun.com>
+ Gary Winiger <gary.winiger@sun.com>
+ Gleb Smirnoff <glebius@freebsd.org>
Hubert Feyrer <hubert@feyrer.de>
+ Jason Evans <jasone@freebsd.org>
Joe Marcus Clarke <marcus@freebsd.org>
Juli Mallett <jmallett@freebsd.org>
Jörg Sonnenberger <joerg@britannica.bec.de>
+ Maëlle Lesage <lesage.maelle@gmail.com>
Mark Murray <markm@freebsd.org>
+ Matthias Drochner <drochner@netbsd.org>
Mike Petullo <mike@flyn.org>
Mikhail Teterin <mi@aldan.algebra.com>
Mikko Työläjärvi <mbsd@pacbell.net>
@@ -38,4 +43,4 @@ ideas:
Wojciech A. Koszek <wkoszek@freebsd.org>
Yar Tikhiy <yar@freebsd.org>
-$Id: CREDITS 498 2011-11-21 16:27:04Z des $
+$Id: CREDITS 587 2012-04-08 11:12:10Z des $
diff --git a/contrib/openpam/HISTORY b/contrib/openpam/HISTORY
index 81af9eac5a0c..3cc4c96e0859 100644
--- a/contrib/openpam/HISTORY
+++ b/contrib/openpam/HISTORY
@@ -1,3 +1,51 @@
+OpenPAM Micrampelis 2012-05-26
+
+ - FEATURE: Add an openpam_readword(3) function which reads the next
+ word from an input stream, applying shell quoting and escaping
+ rules. Add numerous unit tests for openpam_readword(3).
+
+ - FEATURE: Add an openpam_readlinev(3) function which uses the
+ openpam_readword(3) function to read words from an input stream one
+ at a time until it reaches an unquoted, unescaped newline, and
+ returns an array of those words. Add several unit tests for
+ openpam_readlinev(3).
+
+ - FEATURE: Add a PAM_HOST item which pam_start(3) initializes to the
+ machine's hostname. This was implemented in Lycopsida but
+ inadvertantly left out of the release notes.
+
+ - FEATURE: In pam_get_authtok(3), if neither the application nor the
+ module have specified a prompt and PAM_HOST and PAM_RHOST are both
+ defined but not equal, use a different default prompt that includes
+ PAM_USER and PAM_HOST.
+
+ - ENHANCE: Rewrite the policy parser to used openpam_readlinev(),
+ which greatly simplifies the code.
+
+ - ENHANCE: The previous implementation of the policy parser relied on
+ the openpam_readline(3) function, which (by design) munges
+ whitespace and understands neither quotes nor backslash escapes.
+ As a result of the aforementioned rewrite, whitespace, quotes and
+ backslash escapes in policy files are now handled in a consistent
+ and predictable manner.
+
+ - ENHANCE: On platforms that have it, use fdlopen(3) to load modules.
+ This closes the race between the ownership / permission check and
+ the dlopen(3) call.
+
+ - ENHANCE: Reduce the amount of pointless error messages generated
+ while searching for a module.
+
+ - ENHANCE: Numerous documentation improvements, both in content and
+ formatting.
+
+ - BUGFIX: A patch incorporated in Lycopsida inadvertantly changed
+ OpenPAM's behavior when several policies exist for the same
+ service, from ignoring all but the first to concatenating them all.
+ Revert to the original behavior.
+
+ - BUGFIX: Plug a memory leak in the policy parser.
+============================================================================
OpenPAM Lycopsida 2011-12-18
- ENHANCE: removed static build autodetection, which didn't work
@@ -269,7 +317,7 @@ OpenPAM Cinchona 2002-04-08
- ENHANCE: Add openpam_free_data(), a generic cleanup function for
pam_set_data() consumers.
============================================================================
-OpenPAM Centaury 2002-03-14
+OpenPAM Centaury 2002-03-14
- BUGFIX: Add missing #include <string.h> to openpam_log.c.
@@ -308,7 +356,7 @@ OpenPAM Celandine 2002-03-05
module with the same version number as the library itself to one
with no version number at all.
============================================================================
-OpenPAM Cantaloupe 2002-02-22
+OpenPAM Cantaloupe 2002-02-22
- BUGFIX: The proper use of PAM_SYMBOL_ERR is to indicate an invalid
argument to pam_[gs]et_item(3), not to indicate dlsym(3) failures.
@@ -338,7 +386,7 @@ OpenPAM Cantaloupe 2002-02-22
- ENHANCE: openpam_get_authtok() now respects the echo_pass,
try_first_pass, and use_first_pass options.
============================================================================
-OpenPAM Caliopsis 2002-02-13
+OpenPAM Caliopsis 2002-02-13
Fixed a number of bugs in the previous release, including:
- a number of bugs in and related to pam_[gs]et_item(3)
@@ -349,8 +397,8 @@ Fixed a number of bugs in the previous release, including:
- missing 'continue' in openpam_dispatch.c caused successes to be
counted as failures
============================================================================
-OpenPAM Calamite 2002-02-09
+OpenPAM Calamite 2002-02-09
First (beta) release.
============================================================================
-$Id: HISTORY 504 2011-12-18 14:11:12Z des $
+$Id: HISTORY 609 2012-05-26 13:57:45Z des $
diff --git a/contrib/openpam/LICENSE b/contrib/openpam/LICENSE
index e6d4325809fb..511979487ae0 100644
--- a/contrib/openpam/LICENSE
+++ b/contrib/openpam/LICENSE
@@ -1,6 +1,6 @@
Copyright (c) 2002-2003 Networks Associates Technology, Inc.
-Copyright (c) 2004-2011 Dag-Erling Smørgrav
+Copyright (c) 2004-2012 Dag-Erling Smørgrav
All rights reserved.
This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,4 +32,4 @@ 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.
-$Id: LICENSE 437 2011-09-13 12:00:13Z des $
+$Id: LICENSE 546 2012-03-31 23:13:20Z des $
diff --git a/contrib/openpam/Makefile.am b/contrib/openpam/Makefile.am
index 96ed4ea1d788..5c4fbf3f0a2a 100644
--- a/contrib/openpam/Makefile.am
+++ b/contrib/openpam/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 428 2010-03-09 17:32:17Z des $
+# $Id: Makefile.am 549 2012-04-01 20:38:30Z des $
ACLOCAL_AMFLAGS = -I m4
@@ -8,6 +8,8 @@ if WITH_DOC
SUBDIRS += doc
endif
+SUBDIRS += t
+
EXTRA_DIST = \
CREDITS \
HISTORY \
diff --git a/contrib/openpam/Makefile.in b/contrib/openpam/Makefile.in
index 44624b8672aa..3c0c783f46fb 100644
--- a/contrib/openpam/Makefile.in
+++ b/contrib/openpam/Makefile.in
@@ -15,7 +15,7 @@
@SET_MAKE@
-# $Id: Makefile.am 428 2010-03-09 17:32:17Z des $
+# $Id: Makefile.am 549 2012-04-01 20:38:30Z des $
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -39,8 +39,8 @@ host_triplet = @host@
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
- $(top_srcdir)/configure INSTALL config.guess config.sub \
- depcomp install-sh ltmain.sh missing
+ $(srcdir)/pamgdb.in $(top_srcdir)/configure INSTALL TODO \
+ config.guess config.sub depcomp install-sh ltmain.sh missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
@@ -49,7 +49,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = pamgdb
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
@@ -67,7 +67,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
distdir dist dist-all distcheck
ETAGS = etags
CTAGS = ctags
-DIST_SUBDIRS = lib bin modules include doc
+DIST_SUBDIRS = lib bin modules include doc t
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -222,7 +222,7 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = lib bin modules include $(am__append_1)
+SUBDIRS = lib bin modules include $(am__append_1) t
EXTRA_DIST = \
CREDITS \
HISTORY \
@@ -288,6 +288,8 @@ $(srcdir)/config.h.in: $(am__configure_deps)
distclean-hdr:
-rm -f config.h stamp-h1
+pamgdb: $(top_builddir)/config.status $(srcdir)/pamgdb.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo
diff --git a/contrib/openpam/RELNOTES b/contrib/openpam/RELNOTES
index 71f7eb920739..536460158a0f 100644
--- a/contrib/openpam/RELNOTES
+++ b/contrib/openpam/RELNOTES
@@ -1,6 +1,6 @@
- Release notes for OpenPAM Lycopsida
- ===================================
+ Release notes for OpenPAM Micrampelis
+ =====================================
This release corresponds to the code used in FreeBSD HEAD as of the
release date, and is also expected to work on almost any POSIX-like
@@ -19,6 +19,9 @@ intended for actual use, but rather to serve as examples for module or
application developers. It also includes a command-line application
(pamtest) which can be used to test policies and modules.
+Unit tests for limited portions of the library can be found in the t
+subdirectory.
+
Please direct bug reports and inquiries to <des@des.no>.
-$Id: RELNOTES 506 2011-12-18 14:25:12Z des $
+$Id: RELNOTES 609 2012-05-26 13:57:45Z des $
diff --git a/contrib/openpam/TODO b/contrib/openpam/TODO
new file mode 100644
index 000000000000..2d0af16aa988
--- /dev/null
+++ b/contrib/openpam/TODO
@@ -0,0 +1,13 @@
+Before the next release:
+
+ - Complete the transition from PAM_LOG_DEBUG to PAM_LOG_LIBDEBUG.
+
+Whenever:
+
+ - Implement mechanism to enable / disable optional features. Use it
+ to disable strict error checking so pamtest and unit tests can do
+ things that we don't allow in production.
+
+ - Rewrite the module-loading code.
+
+$Id: TODO 592 2012-04-08 13:19:51Z des $
diff --git a/contrib/openpam/aclocal.m4 b/contrib/openpam/aclocal.m4
index c3aa435a1f16..99ed44a00270 100644
--- a/contrib/openpam/aclocal.m4
+++ b/contrib/openpam/aclocal.m4
@@ -22,8 +22,8 @@ To do so, use the procedure documented by the package, typically `autoreconf'.])
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-# Inc.
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is free software; the Free Software Foundation gives
@@ -32,8 +32,8 @@ To do so, use the procedure documented by the package, typically `autoreconf'.])
m4_define([_LT_COPYING], [dnl
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-# Inc.
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is part of GNU Libtool.
@@ -167,6 +167,8 @@ AC_REQUIRE([AC_CANONICAL_BUILD])dnl
AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
_LT_DECL([], [host_alias], [0], [The host system])dnl
_LT_DECL([], [host], [0])dnl
_LT_DECL([], [host_os], [0])dnl
@@ -652,7 +654,7 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
configured by $[0], generated by m4_PACKAGE_STRING.
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2011 Free Software Foundation, Inc.
This config.lt script is free software; the Free Software Foundation
gives unlimited permision to copy, distribute and modify it."
@@ -816,6 +818,7 @@ AC_DEFUN([LT_LANG],
m4_case([$1],
[C], [_LT_LANG(C)],
[C++], [_LT_LANG(CXX)],
+ [Go], [_LT_LANG(GO)],
[Java], [_LT_LANG(GCJ)],
[Fortran 77], [_LT_LANG(F77)],
[Fortran], [_LT_LANG(FC)],
@@ -837,6 +840,29 @@ m4_defun([_LT_LANG],
])# _LT_LANG
+m4_ifndef([AC_PROG_GO], [
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_GO. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC], [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+ fi
+fi
+if test -z "$GOC"; then
+ AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
# _LT_LANG_DEFAULT_CONFIG
# -----------------------
m4_defun([_LT_LANG_DEFAULT_CONFIG],
@@ -867,6 +893,10 @@ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
m4_ifdef([LT_PROG_GCJ],
[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+ [LT_LANG(GO)],
+ [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
AC_PROVIDE_IFELSE([LT_PROG_RC],
[LT_LANG(RC)],
[m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
@@ -969,7 +999,13 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-dynamiclib -Wl,-single_module conftest.c 2>conftest.err
_lt_result=$?
- if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test $_lt_result -eq 0; then
lt_cv_apple_cc_single_mod=yes
else
cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -977,6 +1013,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
rm -rf libconftest.dylib*
rm -f conftest.*
fi])
+
AC_CACHE_CHECK([for -exported_symbols_list linker flag],
[lt_cv_ld_exported_symbols_list],
[lt_cv_ld_exported_symbols_list=no
@@ -988,6 +1025,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
[lt_cv_ld_exported_symbols_list=no])
LDFLAGS="$save_LDFLAGS"
])
+
AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
[lt_cv_ld_force_load=no
cat > conftest.c << _LT_EOF
@@ -1005,7 +1043,9 @@ _LT_EOF
echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
_lt_result=$?
- if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
lt_cv_ld_force_load=yes
else
cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -1050,8 +1090,8 @@ _LT_EOF
])
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
# Checks for linker and compiler features on darwin
m4_defun([_LT_DARWIN_LINKER_FEATURES],
[
@@ -1062,6 +1102,8 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
if test "$lt_cv_ld_force_load" = "yes"; then
_LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+ [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes])
else
_LT_TAGVAR(whole_archive_flag_spec, $1)=''
fi
@@ -1345,14 +1387,27 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
CFLAGS="$SAVE_CFLAGS"
fi
;;
-sparc*-*solaris*)
+*-*solaris*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `/usr/bin/file conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
- yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ yes*)
+ case $host in
+ i?86-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD="${LD-ld}_sol2"
+ fi
+ ;;
*)
if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
LD="${LD-ld} -64"
@@ -1429,13 +1484,13 @@ old_postuninstall_cmds=
if test -n "$RANLIB"; then
case $host_os in
openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
;;
*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
;;
esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
fi
case $host_os in
@@ -1615,6 +1670,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
lt_cv_sys_max_cmd_len=196608
;;
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
osf*)
# Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
# due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -1654,7 +1714,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
# If test is not a shell built-in, we'll probably end up computing a
# maximum length that is only half of the actual maximum length, but
# we can't tell.
- while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+ while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
= "X$teststring$teststring"; } >/dev/null 2>&1 &&
test $i != 17 # 1/2 MB should be enough
do
@@ -2200,7 +2260,7 @@ need_version=unknown
case $host_os in
aix3*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
shlibpath_var=LIBPATH
@@ -2209,7 +2269,7 @@ aix3*)
;;
aix[[4-9]]*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
hardcode_into_libs=yes
@@ -2274,7 +2334,7 @@ beos*)
;;
bsdi[[45]]*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
@@ -2413,7 +2473,7 @@ m4_if([$1], [],[
;;
dgux*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -2466,17 +2526,18 @@ freebsd* | dragonfly*)
;;
gnu*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
haiku*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
dynamic_linker="$host_os runtime_loader"
@@ -2537,7 +2598,7 @@ hpux9* | hpux10* | hpux11*)
;;
interix[[3-9]]*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -2553,7 +2614,7 @@ irix5* | irix6* | nonstopux*)
nonstopux*) version_type=nonstopux ;;
*)
if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
else
version_type=irix
fi ;;
@@ -2590,9 +2651,9 @@ linux*oldld* | linux*aout* | linux*coff*)
dynamic_linker=no
;;
-# This must be Linux ELF.
+# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2655,7 +2716,7 @@ netbsd*)
;;
newsos6)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
@@ -2724,7 +2785,7 @@ rdos*)
;;
solaris*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2749,7 +2810,7 @@ sunos4*)
;;
sysv4 | sysv4.3*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
@@ -2773,7 +2834,7 @@ sysv4 | sysv4.3*)
sysv4*MP*)
if test -d /usr/nec ;then
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
soname_spec='$libname${shared_ext}.$major'
shlibpath_var=LD_LIBRARY_PATH
@@ -2804,7 +2865,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
tpf*)
# TPF is a cross-target only. Preferred cross-host = GNU/Linux.
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2814,7 +2875,7 @@ tpf*)
;;
uts4*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
@@ -3236,7 +3297,7 @@ irix5* | irix6* | nonstopux*)
lt_cv_deplibs_check_method=pass_all
;;
-# This must be Linux ELF.
+# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
lt_cv_deplibs_check_method=pass_all
;;
@@ -3656,6 +3717,7 @@ for ac_symprfx in "" "_"; do
# which start with @ or ?.
lt_cv_sys_global_symbol_pipe="$AWK ['"\
" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
" \$ 0!~/External *\|/{next};"\
" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -4240,7 +4302,9 @@ m4_if([$1], [CXX], [
case $cc_basename in
nvcc*) # Cuda Compiler Driver 2.2
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
- _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC'
+ if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+ fi
;;
esac
else
@@ -4332,18 +4396,33 @@ m4_if([$1], [CXX], [
;;
*)
case `$CC -V 2>&1 | sed 5q` in
- *Sun\ F* | *Sun*Fortran*)
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
# Sun Fortran 8.3 passes all unrecognized flags to the linker
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
_LT_TAGVAR(lt_prog_compiler_wl, $1)=''
;;
+ *Sun\ F* | *Sun*Fortran*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
*Sun\ C*)
# Sun C 5.9
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
;;
+ *Intel*\ [[CF]]*Compiler*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ *Portland\ Group*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
esac
;;
esac
@@ -4503,7 +4582,9 @@ m4_if([$1], [CXX], [
;;
cygwin* | mingw* | cegcc*)
case $cc_basename in
- cl*) ;;
+ cl*)
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ ;;
*)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
_LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
@@ -4528,7 +4609,6 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -4779,8 +4859,7 @@ _LT_EOF
xlf* | bgf* | bgxlf* | mpixlf*)
# IBM XL Fortran 10.1 on PPC cannot create shared libs itself
_LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
- _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
- _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
_LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
if test "x$supports_anon_versioning" = xyes; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
@@ -5075,6 +5154,7 @@ _LT_EOF
# The linker will not automatically build a static lib if we build a DLL.
# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
# Don't use ranlib
_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
@@ -5172,7 +5252,6 @@ _LT_EOF
fi
if test "$with_gnu_ld" = no; then
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
- _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
_LT_TAGVAR(hardcode_libdir_separator, $1)=:
_LT_TAGVAR(hardcode_direct, $1)=yes
_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
@@ -5614,9 +5693,6 @@ _LT_TAGDECL([], [no_undefined_flag], [1],
_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
[Flag to hardcode $libdir into a binary during linking.
This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
- [[If ld is used when linking, flag to hardcode $libdir into a binary
- during linking. This must work even if $libdir does not exist]])
_LT_TAGDECL([], [hardcode_libdir_separator], [1],
[Whether we need a single "-rpath" flag with a separated argument])
_LT_TAGDECL([], [hardcode_direct], [0],
@@ -5770,7 +5846,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -6901,12 +6976,18 @@ public class foo {
}
};
_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
])
_lt_libdeps_save_CFLAGS=$CFLAGS
case "$CC $CFLAGS " in #(
*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
esac
dnl Parse the compiler output and extract the necessary
@@ -7103,7 +7184,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=no
@@ -7236,7 +7316,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=no
@@ -7419,6 +7498,73 @@ CFLAGS=$lt_save_CFLAGS
])# _LT_LANG_GCJ_CONFIG
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
# _LT_LANG_RC_CONFIG([TAG])
# -------------------------
# Ensure that the configuration variables for the Windows resource compiler
@@ -7488,6 +7634,13 @@ dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
# LT_PROG_RC
# ----------
AC_DEFUN([LT_PROG_RC],
@@ -8152,9 +8305,24 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
m4_define([_LT_WITH_PIC],
[AC_ARG_WITH([pic],
- [AS_HELP_STRING([--with-pic],
+ [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
- [pic_mode="$withval"],
+ [lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for lt_pkg in $withval; do
+ IFS="$lt_save_ifs"
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
[pic_mode=default])
test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
@@ -8326,15 +8494,15 @@ m4_define([lt_dict_filter],
# @configure_input@
-# serial 3293 ltversion.m4
+# serial 3337 ltversion.m4
# This file is part of GNU Libtool
-m4_define([LT_PACKAGE_VERSION], [2.4])
-m4_define([LT_PACKAGE_REVISION], [1.3293])
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4'
-macro_revision='1.3293'
+[macro_version='2.4.2'
+macro_revision='1.3337'
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
_LT_DECL(, macro_revision, 0)
])
diff --git a/contrib/openpam/bin/Makefile.am b/contrib/openpam/bin/Makefile.am
index 78ebeaa5d8e2..ec7a99e06001 100644
--- a/contrib/openpam/bin/Makefile.am
+++ b/contrib/openpam/bin/Makefile.am
@@ -1,6 +1,6 @@
-# $Id: Makefile.am 467 2011-11-02 23:42:21Z des $
+# $Id: Makefile.am 538 2012-03-31 17:04:29Z des $
-SUBDIRS =
+SUBDIRS = openpam_dump_policy
if WITH_PAMTEST
SUBDIRS += pamtest
diff --git a/contrib/openpam/bin/Makefile.in b/contrib/openpam/bin/Makefile.in
index 4f6089d07d89..3c11bbfa92f9 100644
--- a/contrib/openpam/bin/Makefile.in
+++ b/contrib/openpam/bin/Makefile.in
@@ -15,7 +15,7 @@
@SET_MAKE@
-# $Id: Makefile.am 467 2011-11-02 23:42:21Z des $
+# $Id: Makefile.am 538 2012-03-31 17:04:29Z des $
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -63,7 +63,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
distdir
ETAGS = etags
CTAGS = ctags
-DIST_SUBDIRS = pamtest su
+DIST_SUBDIRS = openpam_dump_policy pamtest su
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -207,7 +207,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-SUBDIRS = $(am__append_1) $(am__append_2)
+SUBDIRS = openpam_dump_policy $(am__append_1) $(am__append_2)
all: all-recursive
.SUFFIXES:
diff --git a/contrib/openpam/bin/openpam_dump_policy/Makefile.am b/contrib/openpam/bin/openpam_dump_policy/Makefile.am
new file mode 100644
index 000000000000..a5fda16068bf
--- /dev/null
+++ b/contrib/openpam/bin/openpam_dump_policy/Makefile.am
@@ -0,0 +1,7 @@
+# $Id: Makefile.am 538 2012-03-31 17:04:29Z des $
+
+INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib
+
+noinst_PROGRAMS = openpam_dump_policy
+openpam_dump_policy_SOURCES = openpam_dump_policy.c
+openpam_dump_policy_LDADD = $(top_builddir)/lib/libpam.la
diff --git a/contrib/openpam/bin/openpam_dump_policy/Makefile.in b/contrib/openpam/bin/openpam_dump_policy/Makefile.in
new file mode 100644
index 000000000000..54f09a49baa0
--- /dev/null
+++ b/contrib/openpam/bin/openpam_dump_policy/Makefile.in
@@ -0,0 +1,474 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+
+# $Id: Makefile.am 538 2012-03-31 17:04:29Z des $
+
+VPATH = @srcdir@
+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@
+noinst_PROGRAMS = openpam_dump_policy$(EXEEXT)
+subdir = bin/openpam_dump_policy
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_openpam_dump_policy_OBJECTS = openpam_dump_policy.$(OBJEXT)
+openpam_dump_policy_OBJECTS = $(am_openpam_dump_policy_OBJECTS)
+openpam_dump_policy_DEPENDENCIES = $(top_builddir)/lib/libpam.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(openpam_dump_policy_SOURCES)
+DIST_SOURCES = $(openpam_dump_policy_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAJ = @LIB_MAJ@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENPAM_MODULES_DIR = @OPENPAM_MODULES_DIR@
+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_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+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_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@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib
+openpam_dump_policy_SOURCES = openpam_dump_policy.c
+openpam_dump_policy_LDADD = $(top_builddir)/lib/libpam.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(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 bin/openpam_dump_policy/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign bin/openpam_dump_policy/Makefile
+.PRECIOUS: 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_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-noinstPROGRAMS:
+ @list='$(noinst_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
+openpam_dump_policy$(EXEEXT): $(openpam_dump_policy_OBJECTS) $(openpam_dump_policy_DEPENDENCIES)
+ @rm -f openpam_dump_policy$(EXEEXT)
+ $(LINK) $(openpam_dump_policy_OBJECTS) $(openpam_dump_policy_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_dump_policy.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ 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
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ 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"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+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
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: 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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+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)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ 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: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags 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 tags uninstall uninstall-am
+
+
+# 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/openpam/bin/openpam_dump_policy/openpam_dump_policy.c b/contrib/openpam/bin/openpam_dump_policy/openpam_dump_policy.c
new file mode 100644
index 000000000000..b65dbbd0888c
--- /dev/null
+++ b/contrib/openpam/bin/openpam_dump_policy/openpam_dump_policy.c
@@ -0,0 +1,202 @@
+/*-
+ * Copyright (c) 2011 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: openpam_dump_policy.c 582 2012-04-06 23:23:35Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <security/pam_appl.h>
+
+#include "openpam_impl.h"
+
+static char *
+openpam_chain_name(const char *service, pam_facility_t fclt)
+{
+ const char *facility = pam_facility_name[fclt];
+ char *name;
+
+ if (asprintf(&name, "pam_%s_%s", service, facility) == -1)
+ return (NULL);
+ return (name);
+}
+
+static char *
+openpam_facility_index_name(pam_facility_t fclt)
+{
+ const char *facility = pam_facility_name[fclt];
+ char *name, *p;
+
+ if (asprintf(&name, "PAM_%s", facility) == -1)
+ return (NULL);
+ for (p = name + 4; *p; ++p)
+ *p = toupper(*p);
+ return (name);
+}
+
+int
+openpam_dump_chain(const char *name, pam_chain_t *chain)
+{
+ char *modname, **opt, *p;
+ int i;
+
+ for (i = 0; chain != NULL; ++i, chain = chain->next) {
+ /* declare the module's struct pam_module */
+ modname = strrchr(chain->module->path, '/');
+ modname = strdup(modname ? modname : chain->module->path);
+ if (modname == NULL)
+ return (PAM_BUF_ERR);
+ for (p = modname; *p && *p != '.'; ++p)
+ /* nothing */ ;
+ *p = '\0';
+ printf("extern struct pam_module %s_pam_module;\n", modname);
+ /* module arguments */
+ printf("static char *%s_%d_optv[] = {\n", name, i);
+ for (opt = chain->optv; *opt; ++opt) {
+ printf("\t\"");
+ for (p = *opt; *p; ++p) {
+ if (isprint((unsigned char)*p) && *p != '"')
+ printf("%c", *p);
+ else
+ printf("\\x%02x", (unsigned char)*p);
+ }
+ printf("\",\n");
+ }
+ printf("\tNULL,\n");
+ printf("};\n");
+ /* next module in chain */
+ if (chain->next != NULL)
+ printf("static pam_chain_t %s_%d;\n", name, i + 1);
+ /* chain entry */
+ printf("static pam_chain_t %s_%d = {\n", name, i);
+ printf("\t.module = &%s_pam_module,\n", modname);
+ printf("\t.flag = 0x%08x,\n", chain->flag);
+ printf("\t.optc = %d,\n", chain->optc);
+ printf("\t.optv = %s_%d_optv,\n", name, i);
+ if (chain->next)
+ printf("\t.next = &%s_%d,\n", name, i + 1);
+ else
+ printf("\t.next = NULL,\n");
+ printf("};\n");
+ free(modname);
+ }
+ return (PAM_SUCCESS);
+}
+
+int
+openpam_dump_policy(const char *service)
+{
+ pam_handle_t *pamh;
+ char *name;
+ int fclt, ret;
+
+ if ((pamh = calloc(1, sizeof *pamh)) == NULL)
+ return (PAM_BUF_ERR);
+ if ((ret = openpam_configure(pamh, service)) != PAM_SUCCESS)
+ return (ret);
+ for (fclt = 0; fclt < PAM_NUM_FACILITIES; ++fclt) {
+ if (pamh->chains[fclt] != NULL) {
+ if ((name = openpam_chain_name(service, fclt)) == NULL)
+ return (PAM_BUF_ERR);
+ ret = openpam_dump_chain(name, pamh->chains[fclt]);
+ free(name);
+ if (ret != PAM_SUCCESS)
+ return (ret);
+ }
+ }
+ printf("static pam_policy_t pam_%s_policy = {\n", service);
+ printf("\t.service = \"%s\",\n", service);
+ printf("\t.chains = {\n");
+ for (fclt = 0; fclt < PAM_NUM_FACILITIES; ++fclt) {
+ if ((name = openpam_facility_index_name(fclt)) == NULL)
+ return (PAM_BUF_ERR);
+ printf("\t\t[%s] = ", name);
+ free(name);
+ if (pamh->chains[fclt] != NULL) {
+ if ((name = openpam_chain_name(service, fclt)) == NULL)
+ return (PAM_BUF_ERR);
+ printf("&%s_0,\n", name);
+ free(name);
+ } else {
+ printf("NULL,\n");
+ }
+ }
+ printf("\t},\n");
+ printf("};\n");
+ free(pamh);
+ return (PAM_SUCCESS);
+}
+
+static void
+usage(void)
+{
+
+ fprintf(stderr, "usage: openpam_dump_policy [-d] policy ...\n");
+ exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+ int i, opt;
+
+ while ((opt = getopt(argc, argv, "d")) != -1)
+ switch (opt) {
+ case 'd':
+ openpam_debug = 1;
+ break;
+ default:
+ usage();
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ if (argc < 1)
+ usage();
+
+ printf("#include <security/pam_appl.h>\n");
+ printf("#include \"openpam_impl.h\"\n");
+ for (i = 0; i < argc; ++i)
+ openpam_dump_policy(argv[i]);
+ printf("pam_policy_t *pam_embedded_policies[] = {\n");
+ for (i = 0; i < argc; ++i)
+ printf("\t&pam_%s_policy,\n", argv[i]);
+ printf("\tNULL,\n");
+ printf("};\n");
+ exit(0);
+}
diff --git a/contrib/openpam/bin/pamtest/pamtest.1 b/contrib/openpam/bin/pamtest/pamtest.1
index 78e83537c31e..5cf2e0c51d9d 100644
--- a/contrib/openpam/bin/pamtest/pamtest.1
+++ b/contrib/openpam/bin/pamtest/pamtest.1
@@ -10,6 +10,9 @@
.\" 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 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
@@ -23,9 +26,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $Id: pamtest.1 471 2011-11-03 09:44:40Z des $
+.\" $Id: pamtest.1 610 2012-05-26 14:03:45Z des $
.\"
-.Dd November 2, 2011
+.Dd May 26, 2012
.Dt PAMTEST 1
.Os
.Sh NAME
@@ -33,7 +36,7 @@
.Nd PAM policy tester
.Sh SYNOPSYS
.Nm
-.Op Fl dksv
+.Op Fl dkMPsv
.Op Fl H Ar rhost
.Op Fl h Ar host
.Op Fl t Ar tty
@@ -116,6 +119,11 @@ The default is to use the result of calling
.Xr gethostname 3 .
.It Fl k
Keep going even if one of the commands fails.
+.It Fl M
+Disable path, ownership and permission checks on module files.
+.It Fl P
+Disable service name validation and path, ownership and permission
+checks on policy files.
.It Fl s
Set the
.Dv PAM_SILENT
@@ -149,14 +157,14 @@ policy:
pamtest -v system auth account change setcred open close unsetcred
.Ed
.Sh SEE ALSO
-.Xr openpam 3
-.Xr pam 3
+.Xr openpam 3 ,
+.Xr pam 3 ,
.Xr pam.conf 5
.Sh AUTHORS
The
.Nm
utility and this manual page were written by
-.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
.Sh BUGS
The
.Nm
diff --git a/contrib/openpam/bin/pamtest/pamtest.c b/contrib/openpam/bin/pamtest/pamtest.c
index 0addfad9a130..bfc612e72c13 100644
--- a/contrib/openpam/bin/pamtest/pamtest.c
+++ b/contrib/openpam/bin/pamtest/pamtest.c
@@ -11,6 +11,9 @@
* 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 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
@@ -24,7 +27,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: pamtest.c 472 2011-11-03 09:46:52Z des $
+ * $Id: pamtest.c 595 2012-04-14 14:28:35Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -261,8 +264,8 @@ static void
usage(void)
{
- fprintf(stderr, "usage: pamtest [-dksv] %s\n",
- "[-H rhost] [-h host] [-t tty] [-U ruser] [-u user] service");
+ fprintf(stderr, "usage: pamtest %s service command ...\n",
+ "[-dkMPsv] [-H rhost] [-h host] [-t tty] [-U ruser] [-u user]");
exit(1);
}
@@ -297,7 +300,7 @@ main(int argc, char *argv[])
int pame;
int opt;
- while ((opt = getopt(argc, argv, "dH:h:kst:U:u:v")) != -1)
+ while ((opt = getopt(argc, argv, "dH:h:kMPst:U:u:v")) != -1)
switch (opt) {
case 'd':
openpam_debug++;
@@ -311,6 +314,14 @@ main(int argc, char *argv[])
case 'k':
keepatit = 1;
break;
+ case 'M':
+ openpam_set_feature(OPENPAM_RESTRICT_MODULE_NAME, 0);
+ openpam_set_feature(OPENPAM_VERIFY_MODULE_FILE, 0);
+ break;
+ case 'P':
+ openpam_set_feature(OPENPAM_RESTRICT_SERVICE_NAME, 0);
+ openpam_set_feature(OPENPAM_VERIFY_POLICY_FILE, 0);
+ break;
case 's':
silent = PAM_SILENT;
break;
diff --git a/contrib/openpam/bin/su/su.1 b/contrib/openpam/bin/su/su.1
index 9a67ea3fec6c..2dc11bbb1b22 100644
--- a/contrib/openpam/bin/su/su.1
+++ b/contrib/openpam/bin/su/su.1
@@ -10,6 +10,9 @@
.\" 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 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
@@ -23,9 +26,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $Id: su.1 458 2011-11-02 13:10:25Z des $
+.\" $Id: su.1 610 2012-05-26 14:03:45Z des $
.\"
-.Dd November 2, 2011
+.Dd May 26, 2012
.Dt SU 1
.Os
.Sh NAME
@@ -53,10 +56,10 @@ The
utility is provided with the OpenPAM library as a sample application
and should not be used in production systems.
.Sh SEE ALSO
-.Xr openpam 3
+.Xr openpam 3 ,
.Xr pam 3
.Sh AUTHORS
The
.Nm
utility and this manual page were written by
-.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/config.h.in b/contrib/openpam/config.h.in
index 3d16ce8e8dfc..69f703ca2556 100644
--- a/contrib/openpam/config.h.in
+++ b/contrib/openpam/config.h.in
@@ -9,6 +9,9 @@
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
+/* Define to 1 if you have the `fdlopen' function. */
+#undef HAVE_FDLOPEN
+
/* Define to 1 if you have the `fpurge' function. */
#undef HAVE_FPURGE
@@ -36,6 +39,9 @@
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
+/* Define to 1 if you have the `strlcat' function. */
+#undef HAVE_STRLCAT
+
/* Define to 1 if you have the `strlcmp' function. */
#undef HAVE_STRLCMP
diff --git a/contrib/openpam/configure b/contrib/openpam/configure
index fe13a93697a1..5348d3f5a085 100755
--- a/contrib/openpam/configure
+++ b/contrib/openpam/configure
@@ -1,7 +1,7 @@
#! /bin/sh
-# From configure.ac Id: configure.ac 507 2011-12-18 14:43:40Z des .
+# From configure.ac Id: configure.ac 610 2012-05-26 14:03:45Z des .
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for OpenPAM 20111218.
+# Generated by GNU Autoconf 2.68 for OpenPAM 20120526.
#
# Report bugs to <des@des.no>.
#
@@ -570,8 +570,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='OpenPAM'
PACKAGE_TARNAME='openpam'
-PACKAGE_VERSION='20111218'
-PACKAGE_STRING='OpenPAM 20111218'
+PACKAGE_VERSION='20120526'
+PACKAGE_STRING='OpenPAM 20120526'
PACKAGE_BUGREPORT='des@des.no'
PACKAGE_URL=''
@@ -1308,7 +1308,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 OpenPAM 20111218 to adapt to many kinds of systems.
+\`configure' configures OpenPAM 20120526 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1378,7 +1378,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of OpenPAM 20111218:";;
+ short | recursive ) echo "Configuration of OpenPAM 20120526:";;
esac
cat <<\_ACEOF
@@ -1405,7 +1405,7 @@ Optional Features:
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-pic try to use only PIC/non-PIC objects [default=use
+ --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
both]
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-sysroot=DIR Search for dependent libraries within DIR
@@ -1492,7 +1492,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-OpenPAM configure 20111218
+OpenPAM configure 20120526
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -1861,7 +1861,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 OpenPAM $as_me 20111218, which was
+It was created by OpenPAM $as_me 20120526, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -2678,7 +2678,7 @@ fi
# Define the identity of the package.
PACKAGE='openpam'
- VERSION='20111218'
+ VERSION='20120526'
cat >>confdefs.h <<_ACEOF
@@ -4631,8 +4631,8 @@ esac
-macro_version='2.4'
-macro_revision='1.3293'
+macro_version='2.4.2'
+macro_revision='1.3337'
@@ -5347,6 +5347,11 @@ else
lt_cv_sys_max_cmd_len=196608
;;
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
osf*)
# Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
# due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -5386,7 +5391,7 @@ else
# If test is not a shell built-in, we'll probably end up computing a
# maximum length that is only half of the actual maximum length, but
# we can't tell.
- while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+ while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
= "X$teststring$teststring"; } >/dev/null 2>&1 &&
test $i != 17 # 1/2 MB should be enough
do
@@ -5815,7 +5820,7 @@ irix5* | irix6* | nonstopux*)
lt_cv_deplibs_check_method=pass_all
;;
-# This must be Linux ELF.
+# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
lt_cv_deplibs_check_method=pass_all
;;
@@ -6455,13 +6460,13 @@ old_postuninstall_cmds=
if test -n "$RANLIB"; then
case $host_os in
openbsd*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
;;
*)
- old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
;;
esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
fi
case $host_os in
@@ -6608,6 +6613,7 @@ for ac_symprfx in "" "_"; do
# which start with @ or ?.
lt_cv_sys_global_symbol_pipe="$AWK '"\
" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
" \$ 0!~/External *\|/{next};"\
" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -6996,7 +7002,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
CFLAGS="$SAVE_CFLAGS"
fi
;;
-sparc*-*solaris*)
+*-*solaris*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
@@ -7007,7 +7013,20 @@ sparc*-*solaris*)
case `/usr/bin/file conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
- yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ yes*)
+ case $host in
+ i?86-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD="${LD-ld}_sol2"
+ fi
+ ;;
*)
if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
LD="${LD-ld} -64"
@@ -7647,7 +7666,13 @@ else
$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-dynamiclib -Wl,-single_module conftest.c 2>conftest.err
_lt_result=$?
- if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&5
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test $_lt_result -eq 0; then
lt_cv_apple_cc_single_mod=yes
else
cat conftest.err >&5
@@ -7658,6 +7683,7 @@ else
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
if ${lt_cv_ld_exported_symbols_list+:} false; then :
@@ -7690,6 +7716,7 @@ rm -f core conftest.err conftest.$ac_objext \
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
$as_echo_n "checking for -force_load linker flag... " >&6; }
if ${lt_cv_ld_force_load+:} false; then :
@@ -7711,7 +7738,9 @@ _LT_EOF
echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
_lt_result=$?
- if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&5
+ elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
lt_cv_ld_force_load=yes
else
cat conftest.err >&5
@@ -7847,7 +7876,22 @@ fi
# Check whether --with-pic was given.
if test "${with_pic+set}" = set; then :
- withval=$with_pic; pic_mode="$withval"
+ withval=$with_pic; lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for lt_pkg in $withval; do
+ IFS="$lt_save_ifs"
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
pic_mode=default
fi
@@ -7925,6 +7969,10 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
test -z "$LN_S" && LN_S="ln -s"
@@ -8380,7 +8428,9 @@ lt_prog_compiler_static=
case $cc_basename in
nvcc*) # Cuda Compiler Driver 2.2
lt_prog_compiler_wl='-Xlinker '
- lt_prog_compiler_pic='-Xcompiler -fPIC'
+ if test -n "$lt_prog_compiler_pic"; then
+ lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+ fi
;;
esac
else
@@ -8471,18 +8521,33 @@ lt_prog_compiler_static=
;;
*)
case `$CC -V 2>&1 | sed 5q` in
- *Sun\ F* | *Sun*Fortran*)
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
# Sun Fortran 8.3 passes all unrecognized flags to the linker
lt_prog_compiler_pic='-KPIC'
lt_prog_compiler_static='-Bstatic'
lt_prog_compiler_wl=''
;;
+ *Sun\ F* | *Sun*Fortran*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Qoption ld '
+ ;;
*Sun\ C*)
# Sun C 5.9
lt_prog_compiler_pic='-KPIC'
lt_prog_compiler_static='-Bstatic'
lt_prog_compiler_wl='-Wl,'
;;
+ *Intel*\ [CF]*Compiler*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ *Portland\ Group*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
esac
;;
esac
@@ -8844,7 +8909,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
hardcode_direct=no
hardcode_direct_absolute=no
hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld=
hardcode_libdir_separator=
hardcode_minus_L=no
hardcode_shlibpath_var=unsupported
@@ -9094,8 +9158,7 @@ _LT_EOF
xlf* | bgf* | bgxlf* | mpixlf*)
# IBM XL Fortran 10.1 on PPC cannot create shared libs itself
whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
- hardcode_libdir_flag_spec=
- hardcode_libdir_flag_spec_ld='-rpath $libdir'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
if test "x$supports_anon_versioning" = xyes; then
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
@@ -9474,6 +9537,7 @@ fi
# The linker will not automatically build a static lib if we build a DLL.
# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
enable_shared_with_static_runtimes=yes
+ exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
# Don't use ranlib
old_postinstall_cmds='chmod 644 $oldlib'
@@ -9519,6 +9583,7 @@ fi
hardcode_shlibpath_var=unsupported
if test "$lt_cv_ld_force_load" = "yes"; then
whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
else
whole_archive_flag_spec=''
fi
@@ -9598,7 +9663,6 @@ fi
fi
if test "$with_gnu_ld" = no; then
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_flag_spec_ld='+b $libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
hardcode_direct_absolute=yes
@@ -10222,11 +10286,6 @@ esac
-
-
-
-
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
$as_echo_n "checking dynamic linker characteristics... " >&6; }
@@ -10316,7 +10375,7 @@ need_version=unknown
case $host_os in
aix3*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
shlibpath_var=LIBPATH
@@ -10325,7 +10384,7 @@ aix3*)
;;
aix[4-9]*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
hardcode_into_libs=yes
@@ -10390,7 +10449,7 @@ beos*)
;;
bsdi[45]*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
@@ -10529,7 +10588,7 @@ darwin* | rhapsody*)
;;
dgux*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -10582,17 +10641,18 @@ freebsd* | dragonfly*)
;;
gnu*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
haiku*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
dynamic_linker="$host_os runtime_loader"
@@ -10653,7 +10713,7 @@ hpux9* | hpux10* | hpux11*)
;;
interix[3-9]*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -10669,7 +10729,7 @@ irix5* | irix6* | nonstopux*)
nonstopux*) version_type=nonstopux ;;
*)
if test "$lt_cv_prog_gnu_ld" = yes; then
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
else
version_type=irix
fi ;;
@@ -10706,9 +10766,9 @@ linux*oldld* | linux*aout* | linux*coff*)
dynamic_linker=no
;;
-# This must be Linux ELF.
+# This must be glibc/ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -10790,7 +10850,7 @@ netbsd*)
;;
newsos6)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
@@ -10859,7 +10919,7 @@ rdos*)
;;
solaris*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -10884,7 +10944,7 @@ sunos4*)
;;
sysv4 | sysv4.3*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
@@ -10908,7 +10968,7 @@ sysv4 | sysv4.3*)
sysv4*MP*)
if test -d /usr/nec ;then
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
soname_spec='$libname${shared_ext}.$major'
shlibpath_var=LD_LIBRARY_PATH
@@ -10939,7 +10999,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
tpf*)
# TPF is a cross-target only. Preferred cross-host = GNU/Linux.
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -10949,7 +11009,7 @@ tpf*)
;;
uts4*)
- version_type=linux
+ version_type=linux # correct to gnu/linux during the next big refactor
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
@@ -11731,6 +11791,8 @@ CC="$lt_save_CC"
+
+
ac_config_commands="$ac_config_commands libtool"
@@ -11875,7 +11937,7 @@ fi
done
-for ac_func in fpurge strlcmp strlcpy
+for ac_func in fdlopen fpurge strlcat strlcmp strlcpy
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -12006,7 +12068,9 @@ if test "${enable_werror+set}" = set; then :
fi
-ac_config_files="$ac_config_files bin/Makefile bin/pamtest/Makefile bin/su/Makefile include/Makefile include/security/Makefile lib/Makefile modules/Makefile modules/pam_unix/Makefile modules/pam_deny/Makefile modules/pam_permit/Makefile doc/Makefile doc/man/Makefile Makefile"
+ac_config_files="$ac_config_files Makefile bin/Makefile bin/openpam_dump_policy/Makefile bin/pamtest/Makefile bin/su/Makefile doc/Makefile doc/man/Makefile include/Makefile include/security/Makefile lib/Makefile modules/Makefile modules/pam_deny/Makefile modules/pam_permit/Makefile modules/pam_unix/Makefile t/Makefile"
+
+ac_config_files="$ac_config_files pamgdb"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -12558,7 +12622,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 OpenPAM $as_me 20111218, which was
+This file was extended by OpenPAM $as_me 20120526, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -12624,7 +12688,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="\\
-OpenPAM config.status 20111218
+OpenPAM config.status 20120526
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
@@ -12761,6 +12825,7 @@ pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
@@ -12843,7 +12908,6 @@ with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
@@ -12899,6 +12963,7 @@ _LTECHO_EOF'
# Quote evaled strings.
for var in SHELL \
ECHO \
+PATH_SEPARATOR \
SED \
GREP \
EGREP \
@@ -12949,7 +13014,6 @@ with_gnu_ld \
allow_undefined_flag \
no_undefined_flag \
hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
hardcode_libdir_separator \
exclude_expsyms \
include_expsyms \
@@ -13033,19 +13097,22 @@ do
"config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
"libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"bin/Makefile") CONFIG_FILES="$CONFIG_FILES bin/Makefile" ;;
+ "bin/openpam_dump_policy/Makefile") CONFIG_FILES="$CONFIG_FILES bin/openpam_dump_policy/Makefile" ;;
"bin/pamtest/Makefile") CONFIG_FILES="$CONFIG_FILES bin/pamtest/Makefile" ;;
"bin/su/Makefile") CONFIG_FILES="$CONFIG_FILES bin/su/Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "doc/man/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;;
"include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
"include/security/Makefile") CONFIG_FILES="$CONFIG_FILES include/security/Makefile" ;;
"lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
"modules/Makefile") CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;;
- "modules/pam_unix/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_unix/Makefile" ;;
"modules/pam_deny/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_deny/Makefile" ;;
"modules/pam_permit/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_permit/Makefile" ;;
- "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
- "doc/man/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "modules/pam_unix/Makefile") CONFIG_FILES="$CONFIG_FILES modules/pam_unix/Makefile" ;;
+ "t/Makefile") CONFIG_FILES="$CONFIG_FILES t/Makefile" ;;
+ "pamgdb") CONFIG_FILES="$CONFIG_FILES pamgdb" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
@@ -13757,8 +13824,8 @@ $as_echo X"$file" |
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
#
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-# Inc.
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is part of GNU Libtool.
@@ -13812,6 +13879,9 @@ SHELL=$lt_SHELL
# An echo program that protects backslashes.
ECHO=$lt_ECHO
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
# The host system.
host_alias=$host_alias
host=$host
@@ -14113,10 +14183,6 @@ no_undefined_flag=$lt_no_undefined_flag
# This must work even if \$libdir does not exist
hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking. This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
# Whether we need a single "-rpath" flag with a separated argument.
hardcode_libdir_separator=$lt_hardcode_libdir_separator
@@ -14367,6 +14433,7 @@ fi
chmod +x "$ofile"
;;
+ "pamgdb":F) chmod +x pamgdb ;;
esac
done # for ac_tag
diff --git a/contrib/openpam/configure.ac b/contrib/openpam/configure.ac
index a7453b994a47..fb30726a4d1b 100644
--- a/contrib/openpam/configure.ac
+++ b/contrib/openpam/configure.ac
@@ -1,8 +1,8 @@
-dnl $Id: configure.ac 507 2011-12-18 14:43:40Z des $
+dnl $Id: configure.ac 610 2012-05-26 14:03:45Z des $
AC_PREREQ([2.62])
-AC_REVISION([$Id: configure.ac 507 2011-12-18 14:43:40Z des $])
-AC_INIT([OpenPAM], [20111218], [des@des.no])
+AC_REVISION([$Id: configure.ac 610 2012-05-26 14:03:45Z des $])
+AC_INIT([OpenPAM], [20120526], [des@des.no])
AC_CONFIG_SRCDIR([lib/pam_start.c])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign])
@@ -83,7 +83,7 @@ AM_CONDITIONAL([WITH_SU], [test x"$with_su" = x"yes"])
AC_CHECK_HEADERS([crypt.h])
-AC_CHECK_FUNCS([fpurge strlcmp strlcpy])
+AC_CHECK_FUNCS([fdlopen fpurge strlcat strlcmp strlcpy])
saved_LIBS="${LIBS}"
LIBS=""
@@ -110,18 +110,21 @@ AC_ARG_ENABLE([werror],
[CFLAGS="${CFLAGS} -Werror"])
AC_CONFIG_FILES([
+ Makefile
bin/Makefile
+ bin/openpam_dump_policy/Makefile
bin/pamtest/Makefile
bin/su/Makefile
+ doc/Makefile
+ doc/man/Makefile
include/Makefile
include/security/Makefile
lib/Makefile
modules/Makefile
- modules/pam_unix/Makefile
modules/pam_deny/Makefile
modules/pam_permit/Makefile
- doc/Makefile
- doc/man/Makefile
- Makefile
+ modules/pam_unix/Makefile
+ t/Makefile
])
+AC_CONFIG_FILES([pamgdb],[chmod +x pamgdb])
AC_OUTPUT
diff --git a/contrib/openpam/doc/man/Makefile.am b/contrib/openpam/doc/man/Makefile.am
index 3d1b94bb87b5..4062a54d54fb 100644
--- a/contrib/openpam/doc/man/Makefile.am
+++ b/contrib/openpam/doc/man/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 455 2011-10-29 18:31:11Z des $
+# $Id: Makefile.am 594 2012-04-14 14:18:41Z des $
NULL =
@@ -38,12 +38,17 @@ OMAN = \
openpam_borrow_cred.3 \
openpam_free_data.3 \
openpam_free_envlist.3 \
+ openpam_get_feature.3 \
openpam_get_option.3 \
openpam_log.3 \
openpam_nullconv.3 \
openpam_readline.3 \
+ openpam_readlinev.3 \
+ openpam_readword.3 \
openpam_restore_cred.3 \
+ openpam_set_feature.3 \
openpam_set_option.3 \
+ openpam_straddch.3 \
openpam_subst.3 \
openpam_ttyconv.3 \
pam_error.3 \
@@ -68,17 +73,17 @@ CLEANFILES = $(ALLCMAN) openpam.3 pam.3
GENDOC = $(top_srcdir)/misc/gendoc.pl
-SRCDIR = $(top_srcdir)/lib
+LIBSRCDIR = $(top_srcdir)/lib
-VPATH = $(SRCDIR)
+VPATH = $(LIBSRCDIR) $(srcdir)
SUFFIXES = .3
.c.3: $(GENDOC)
perl -w $(GENDOC) $<
-openpam.3: $(OMAN) $(GENDOC) openpam.man
+openpam.3: $(OMAN) $(GENDOC) $(srcdir)/openpam.man
perl -w $(GENDOC) -o $(abs_srcdir)/$(OMAN) <$(srcdir)/openpam.man
-pam.3: $(PMAN) $(GENDOC) pam.man
+pam.3: $(PMAN) $(GENDOC) $(srcdir)/pam.man
perl -w $(GENDOC) -p $(abs_srcdir)/$(PMAN) <$(srcdir)/pam.man
diff --git a/contrib/openpam/doc/man/Makefile.in b/contrib/openpam/doc/man/Makefile.in
index 91c9febf6003..298304d0ec47 100644
--- a/contrib/openpam/doc/man/Makefile.in
+++ b/contrib/openpam/doc/man/Makefile.in
@@ -15,7 +15,7 @@
@SET_MAKE@
-# $Id: Makefile.am 455 2011-10-29 18:31:11Z des $
+# $Id: Makefile.am 594 2012-04-14 14:18:41Z des $
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@@ -74,7 +74,7 @@ man5dir = $(mandir)/man5
NROFF = nroff
MANS = $(dist_man3_MANS) $(dist_man5_MANS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-VPATH = $(SRCDIR)
+VPATH = $(LIBSRCDIR) $(srcdir)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
@@ -232,12 +232,17 @@ OMAN = \
openpam_borrow_cred.3 \
openpam_free_data.3 \
openpam_free_envlist.3 \
+ openpam_get_feature.3 \
openpam_get_option.3 \
openpam_log.3 \
openpam_nullconv.3 \
openpam_readline.3 \
+ openpam_readlinev.3 \
+ openpam_readword.3 \
openpam_restore_cred.3 \
+ openpam_set_feature.3 \
openpam_set_option.3 \
+ openpam_straddch.3 \
openpam_subst.3 \
openpam_ttyconv.3 \
pam_error.3 \
@@ -256,7 +261,7 @@ dist_man3_MANS = $(ALLCMAN) openpam.3 pam.3 pam_conv.3
dist_man5_MANS = pam.conf.5
CLEANFILES = $(ALLCMAN) openpam.3 pam.3
GENDOC = $(top_srcdir)/misc/gendoc.pl
-SRCDIR = $(top_srcdir)/lib
+LIBSRCDIR = $(top_srcdir)/lib
SUFFIXES = .3
all: all-am
@@ -536,10 +541,10 @@ uninstall-man: uninstall-man3 uninstall-man5
.c.3: $(GENDOC)
perl -w $(GENDOC) $<
-openpam.3: $(OMAN) $(GENDOC) openpam.man
+openpam.3: $(OMAN) $(GENDOC) $(srcdir)/openpam.man
perl -w $(GENDOC) -o $(abs_srcdir)/$(OMAN) <$(srcdir)/openpam.man
-pam.3: $(PMAN) $(GENDOC) pam.man
+pam.3: $(PMAN) $(GENDOC) $(srcdir)/pam.man
perl -w $(GENDOC) -p $(abs_srcdir)/$(PMAN) <$(srcdir)/pam.man
# Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/contrib/openpam/doc/man/openpam.3 b/contrib/openpam/doc/man/openpam.3
index c04a2aa9671d..a3ff7fc6ce2e 100644
--- a/contrib/openpam/doc/man/openpam.3
+++ b/contrib/openpam/doc/man/openpam.3
@@ -34,19 +34,24 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM 3
.Os
.Sh NAME
.Nm openpam_borrow_cred ,
.Nm openpam_free_data ,
.Nm openpam_free_envlist ,
+.Nm openpam_get_feature ,
.Nm openpam_get_option ,
.Nm openpam_log ,
.Nm openpam_nullconv ,
.Nm openpam_readline ,
+.Nm openpam_readlinev ,
+.Nm openpam_readword ,
.Nm openpam_restore_cred ,
+.Nm openpam_set_feature ,
.Nm openpam_set_option ,
+.Nm openpam_straddch ,
.Nm openpam_subst ,
.Nm openpam_ttyconv ,
.Nm pam_error ,
@@ -68,6 +73,8 @@
.Fn openpam_free_data "pam_handle_t *pamh" "void *data" "int status"
.Ft "void"
.Fn openpam_free_envlist "char **envlist"
+.Ft "int"
+.Fn openpam_get_feature "int feature" "int *onoff"
.Ft "const char *"
.Fn openpam_get_option "pam_handle_t *pamh" "const char *option"
.Ft "void"
@@ -76,11 +83,19 @@
.Fn openpam_nullconv "int n" "const struct pam_message **msg" "struct pam_response **resp" "void *data"
.Ft "char *"
.Fn openpam_readline "FILE *f" "int *lineno" "size_t *lenp"
+.Ft "char **"
+.Fn openpam_readlinev "FILE *f" "int *lineno" "int *lenp"
+.Ft "char *"
+.Fn openpam_readword "FILE *f" "int *lineno" "size_t *lenp"
.Ft "int"
.Fn openpam_restore_cred "pam_handle_t *pamh"
.Ft "int"
+.Fn openpam_set_feature "int feature" "int onoff"
+.Ft "int"
.Fn openpam_set_option "pam_handle_t *pamh" "const char *option" "const char *value"
.Ft "int"
+.Fn openpam_straddch "char **str" "size_t *size" "size_t *len" "int ch"
+.Ft "int"
.Fn openpam_subst "const pam_handle_t *pamh" "char *buf" "size_t *bufsize" "const char *template"
.Ft "int"
.Fn openpam_ttyconv "int n" "const struct pam_message **msg" "struct pam_response **resp" "void *data"
@@ -117,12 +132,17 @@ standardization.
.Xr openpam_borrow_cred 3 ,
.Xr openpam_free_data 3 ,
.Xr openpam_free_envlist 3 ,
+.Xr openpam_get_feature 3 ,
.Xr openpam_get_option 3 ,
.Xr openpam_log 3 ,
.Xr openpam_nullconv 3 ,
.Xr openpam_readline 3 ,
+.Xr openpam_readlinev 3 ,
+.Xr openpam_readword 3 ,
.Xr openpam_restore_cred 3 ,
+.Xr openpam_set_feature 3 ,
.Xr openpam_set_option 3 ,
+.Xr openpam_straddch 3 ,
.Xr openpam_subst 3 ,
.Xr openpam_ttyconv 3 ,
.Xr pam_error 3 ,
@@ -146,3 +166,6 @@ Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
as part of the DARPA CHATS research program.
+.Pp
+The OpenPAM library is maintained by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/openpam_borrow_cred.3 b/contrib/openpam/doc/man/openpam_borrow_cred.3
index 25780dba4479..dd05b4430ce4 100644
--- a/contrib/openpam/doc/man/openpam_borrow_cred.3
+++ b/contrib/openpam/doc/man/openpam_borrow_cred.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_BORROW_CRED 3
.Os
.Sh NAME
@@ -50,7 +50,7 @@
.Fn openpam_borrow_cred "pam_handle_t *pamh" "const struct passwd *pwd"
.Sh DESCRIPTION
The
-.Nm
+.Fn openpam_borrow_cred
function saves the current credentials and
switches to those of the user specified by its
.Fa pwd
@@ -62,7 +62,7 @@ The original credentials can be restored using
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn openpam_borrow_cred
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -81,15 +81,15 @@ System error.
.Xr pam_strerror 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_borrow_cred
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn openpam_borrow_cred
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/openpam_free_data.3 b/contrib/openpam/doc/man/openpam_free_data.3
index b32a34570741..4d9e0eeed065 100644
--- a/contrib/openpam/doc/man/openpam_free_data.3
+++ b/contrib/openpam/doc/man/openpam_free_data.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_FREE_DATA 3
.Os
.Sh NAME
@@ -50,7 +50,7 @@
.Fn openpam_free_data "pam_handle_t *pamh" "void *data" "int status"
.Sh DESCRIPTION
The
-.Nm
+.Fn openpam_free_data
function is a cleanup function suitable for
passing to
.Xr pam_set_data 3 .
@@ -64,15 +64,15 @@ argument to
.Xr pam_set_data 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_free_data
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn openpam_free_data
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/openpam_free_envlist.3 b/contrib/openpam/doc/man/openpam_free_envlist.3
index 0c1976a9129f..cf8c585539d8 100644
--- a/contrib/openpam/doc/man/openpam_free_envlist.3
+++ b/contrib/openpam/doc/man/openpam_free_envlist.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_FREE_ENVLIST 3
.Os
.Sh NAME
@@ -50,7 +50,7 @@
.Fn openpam_free_envlist "char **envlist"
.Sh DESCRIPTION
The
-.Nm
+.Fn openpam_free_envlist
function is a convenience function which
frees all the environment variables in an environment list, and the
list itself.
@@ -62,12 +62,11 @@ It is suitable for freeing the return value from
.Xr pam_getenvlist 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_free_envlist
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
-.Fx
-Project by
-.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
+.Fn openpam_free_envlist
+function and this manual page were
+developed by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/openpam_get_feature.3 b/contrib/openpam/doc/man/openpam_get_feature.3
new file mode 100644
index 000000000000..e63ef0cd6af8
--- /dev/null
+++ b/contrib/openpam/doc/man/openpam_get_feature.3
@@ -0,0 +1,105 @@
+.\"-
+.\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
+.\" All rights reserved.
+.\"
+.\" This software was developed for the FreeBSD Project by ThinkSec AS and
+.\" Network Associates Laboratories, the Security Research Division of
+.\" Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+.\" ("CBOSS"), as part of the DARPA CHATS research program.
+.\"
+.\" 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 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.
+.\"
+.\" $Id$
+.\"
+.Dd May 26, 2012
+.Dt OPENPAM_GET_FEATURE 3
+.Os
+.Sh NAME
+.Nm openpam_get_feature
+.Nd query the state of an optional feature
+.Sh LIBRARY
+.Lb libpam
+.Sh SYNOPSIS
+.In sys/types.h
+.In security/pam_appl.h
+.In security/openpam.h
+.Ft "int"
+.Fn openpam_get_feature "int feature" "int *onoff"
+.Sh DESCRIPTION
+.Bf Sy
+This function is experimental and may be modified or removed in a future release without further warning.
+.Ef
+.Pp
+The
+.Fn openpam_get_feature
+function stores the current state of the
+specified feature in the variable pointed to by its
+.Fa onoff
+argument.
+.Pp
+The following features are recognized:
+.Bl -tag -width 18n
+.It Dv OPENPAM_RESTRICT_SERVICE_NAME
+Disallow path separators in service names.
+This feature is enabled by default.
+Disabling it allows the application to specify the path to
+the desired policy file directly.
+.It Dv OPENPAM_VERIFY_POLICY_FILE
+Verify the ownership and permissions of the policy file
+and the path leading up to it.
+This feature is enabled by default.
+.It Dv OPENPAM_RESTRICT_MODULE_NAME
+Disallow path separators in module names.
+This feature is disabled by default.
+Enabling it prevents the use of modules in non-standard
+locations.
+.It Dv OPENPAM_VERIFY_MODULE_FILE
+Verify the ownership and permissions of each loadable
+module and the path leading up to it.
+This feature is enabled by default.
+.El
+.Sh RETURN VALUES
+The
+.Fn openpam_get_feature
+function returns one of the following values:
+.Bl -tag -width 18n
+.It Bq Er PAM_SYMBOL_ERR
+Invalid symbol.
+.El
+.Sh SEE ALSO
+.Xr openpam_set_feature 3 ,
+.Xr pam 3 ,
+.Xr pam_strerror 3
+.Sh STANDARDS
+The
+.Fn openpam_get_feature
+function is an OpenPAM extension.
+.Sh AUTHORS
+The
+.Fn openpam_get_feature
+function and this manual page were
+developed by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/openpam_get_option.3 b/contrib/openpam/doc/man/openpam_get_option.3
index d65661296922..68a6b2e77756 100644
--- a/contrib/openpam/doc/man/openpam_get_option.3
+++ b/contrib/openpam/doc/man/openpam_get_option.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_GET_OPTION 3
.Os
.Sh NAME
@@ -50,7 +50,7 @@
.Fn openpam_get_option "pam_handle_t *pamh" "const char *option"
.Sh DESCRIPTION
The
-.Nm
+.Fn openpam_get_option
function returns the value of the specified
option in the context of the currently executing service module, or
.Dv NULL
@@ -58,7 +58,7 @@ if the option is not set or no module is currently executing.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn openpam_get_option
function returns
.Dv NULL
on failure.
@@ -67,15 +67,15 @@ on failure.
.Xr pam 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_get_option
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn openpam_get_option
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/openpam_log.3 b/contrib/openpam/doc/man/openpam_log.3
index adfc0061a86b..e5e3192c8ae8 100644
--- a/contrib/openpam/doc/man/openpam_log.3
+++ b/contrib/openpam/doc/man/openpam_log.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_LOG 3
.Os
.Sh NAME
@@ -50,7 +50,7 @@
.Fn openpam_log "int level" "const char *fmt" "..."
.Sh DESCRIPTION
The
-.Nm
+.Fn openpam_log
function logs messages using
.Xr syslog 3 .
It is primarily intended for internal use by the library and modules.
@@ -60,6 +60,9 @@ The
argument indicates the importance of the message.
The following levels are defined:
.Bl -tag -width 18n
+.It Dv PAM_LOG_LIBDEBUG
+Debugging messages.
+For internal use only.
.It Dv PAM_LOG_DEBUG
Debugging messages.
These messages are normally not logged unless the global
@@ -101,15 +104,15 @@ corresponding arguments.
.Xr syslog 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_log
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn openpam_log
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/openpam_nullconv.3 b/contrib/openpam/doc/man/openpam_nullconv.3
index 1873cba2ee38..f5194d38fff2 100644
--- a/contrib/openpam/doc/man/openpam_nullconv.3
+++ b/contrib/openpam/doc/man/openpam_nullconv.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_NULLCONV 3
.Os
.Sh NAME
@@ -50,7 +50,7 @@
.Fn openpam_nullconv "int n" "const struct pam_message **msg" "struct pam_response **resp" "void *data"
.Sh DESCRIPTION
The
-.Nm
+.Fn openpam_nullconv
function is a null conversation function suitable
for applications that want to use PAM but don't support interactive
dialog with the user.
@@ -71,7 +71,7 @@ try to query the user.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn openpam_nullconv
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_CONV_ERR
@@ -88,15 +88,15 @@ Conversation failure.
.Xr pam_vprompt 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_nullconv
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn openpam_nullconv
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/openpam_readline.3 b/contrib/openpam/doc/man/openpam_readline.3
index cf7ab47f53ff..32dd55b19f43 100644
--- a/contrib/openpam/doc/man/openpam_readline.3
+++ b/contrib/openpam/doc/man/openpam_readline.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_READLINE 3
.Os
.Sh NAME
@@ -44,27 +44,32 @@
.Lb libpam
.Sh SYNOPSIS
.In sys/types.h
+.In stdio.h
.In security/pam_appl.h
.In security/openpam.h
.Ft "char *"
.Fn openpam_readline "FILE *f" "int *lineno" "size_t *lenp"
.Sh DESCRIPTION
+.Bf Sy
+This function is deprecated and may be removed in a future release without further warning.
The
-.Nm
+.Fn openpam_readlinev
+function may be used to achieve similar results.
+.Ef
+.Pp
+The
+.Fn openpam_readline
function reads a line from a file, and returns it
in a NUL-terminated buffer allocated with
.Xr malloc 3 .
.Pp
The
-.Nm
+.Fn openpam_readline
function performs a certain amount of processing
on the data it reads:
.Bl -bullet
.It
-Comments (introduced by a hash sign) are stripped, as is leading and
-trailing whitespace.
-.It
-Any amount of linear whitespace is collapsed to a single space.
+Comments (introduced by a hash sign) are stripped.
.It
Blank lines are ignored.
.It
@@ -89,27 +94,28 @@ terminating NUL character) is stored in the variable it points to.
The caller is responsible for releasing the returned buffer by passing
it to
.Xr free 3 .
+.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn openpam_readline
function returns
.Dv NULL
on failure.
.Sh SEE ALSO
-.Xr free 3 ,
-.Xr malloc 3 ,
+.Xr openpam_readlinev 3 ,
+.Xr openpam_readword 3 ,
.Xr pam 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_readline
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn openpam_readline
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/openpam_readlinev.3 b/contrib/openpam/doc/man/openpam_readlinev.3
new file mode 100644
index 000000000000..f2ba1a6b775a
--- /dev/null
+++ b/contrib/openpam/doc/man/openpam_readlinev.3
@@ -0,0 +1,159 @@
+.\"-
+.\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
+.\" All rights reserved.
+.\"
+.\" This software was developed for the FreeBSD Project by ThinkSec AS and
+.\" Network Associates Laboratories, the Security Research Division of
+.\" Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+.\" ("CBOSS"), as part of the DARPA CHATS research program.
+.\"
+.\" 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 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.
+.\"
+.\" $Id$
+.\"
+.Dd May 26, 2012
+.Dt OPENPAM_READLINEV 3
+.Os
+.Sh NAME
+.Nm openpam_readlinev
+.Nd read a line from a file and split it into words
+.Sh LIBRARY
+.Lb libpam
+.Sh SYNOPSIS
+.In sys/types.h
+.In stdio.h
+.In security/pam_appl.h
+.In security/openpam.h
+.Ft "char **"
+.Fn openpam_readlinev "FILE *f" "int *lineno" "int *lenp"
+.Sh DESCRIPTION
+The
+.Fn openpam_readlinev
+function reads a line from a file, splits it
+into words according to the rules described in the
+.Xr openpam_readword 3
+manual page, and returns a list of those words.
+.Pp
+If
+.Fa lineno
+is not
+.Dv NULL ,
+the integer variable it points to is
+incremented every time a newline character is read.
+This includes quoted or escaped newline characters and the newline
+character at the end of the line.
+.Pp
+If
+.Fa lenp
+is not
+.Dv NULL ,
+the number of words on the line is stored in the
+variable to which it points.
+.Sh RETURN VALUES
+If successful, the
+.Fn openpam_readlinev
+function returns a pointer to a
+dynamically allocated array of pointers to individual dynamically
+allocated NUL-terminated strings, each containing a single word, in the
+order in which they were encountered on the line.
+The array is terminated by a
+.Dv NULL
+pointer.
+.Pp
+The caller is responsible for freeing both the array and the individual
+strings by passing each of them to
+.Xr free 3 .
+.Pp
+If the end of the line was reached before any words were read,
+.Fn openpam_readlinev
+returns a pointer to a dynamically allocated array
+containing a single
+.Dv NULL
+pointer.
+.Pp
+The
+.Fn openpam_readlinev
+function can fail and return
+.Dv NULL
+for one of
+four reasons:
+.Bl -bullet
+.It
+The end of the file was reached before any words were read;
+.Va errno
+is
+zero,
+.Xr ferror 3
+returns zero, and
+.Xr feof 3
+returns a non-zero value.
+.It
+The end of the file was reached while a quote or backslash escape
+was in effect;
+.Va errno
+is set to
+.Dv EINVAL ,
+.Xr ferror 3
+returns zero, and
+.Xr feof 3
+returns a non-zero value.
+.It
+An error occurred while reading from the file;
+.Va errno
+is non-zero,
+.Xr ferror 3
+returns a non-zero value and
+.Xr feof 3
+returns zero.
+.It
+A
+.Xr malloc 3
+or
+.Xr realloc 3
+call failed;
+.Va errno
+is set to
+.Dv ENOMEM ,
+.Xr ferror 3
+returns a non-zero value, and
+.Xr feof 3
+may or may not return
+a non-zero value.
+.El
+.Sh SEE ALSO
+.Xr openpam_readline 3 ,
+.Xr openpam_readword 3 ,
+.Xr pam 3
+.Sh STANDARDS
+The
+.Fn openpam_readlinev
+function is an OpenPAM extension.
+.Sh AUTHORS
+The
+.Fn openpam_readlinev
+function and this manual page were
+developed by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/openpam_readword.3 b/contrib/openpam/doc/man/openpam_readword.3
new file mode 100644
index 000000000000..6f5f58d34b7c
--- /dev/null
+++ b/contrib/openpam/doc/man/openpam_readword.3
@@ -0,0 +1,152 @@
+.\"-
+.\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
+.\" All rights reserved.
+.\"
+.\" This software was developed for the FreeBSD Project by ThinkSec AS and
+.\" Network Associates Laboratories, the Security Research Division of
+.\" Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+.\" ("CBOSS"), as part of the DARPA CHATS research program.
+.\"
+.\" 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 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.
+.\"
+.\" $Id$
+.\"
+.Dd May 26, 2012
+.Dt OPENPAM_READWORD 3
+.Os
+.Sh NAME
+.Nm openpam_readword
+.Nd read a word from a file, respecting shell quoting rules
+.Sh LIBRARY
+.Lb libpam
+.Sh SYNOPSIS
+.In sys/types.h
+.In stdio.h
+.In security/pam_appl.h
+.In security/openpam.h
+.Ft "char *"
+.Fn openpam_readword "FILE *f" "int *lineno" "size_t *lenp"
+.Sh DESCRIPTION
+The
+.Fn openpam_readword
+function reads the next word from a file, and
+returns it in a NUL-terminated buffer allocated with
+.Xr malloc 3 .
+.Pp
+A word is a sequence of non-whitespace characters.
+However, whitespace characters can be included in a word if quoted or
+escaped according to the following rules:
+.Bl -bullet
+.It
+An unescaped single or double quote introduces a quoted string,
+which ends when the same quote character is encountered a second
+time.
+The quotes themselves are stripped.
+.It
+Within a single- or double-quoted string, all whitespace characters,
+including the newline character, are preserved as-is.
+.It
+Outside a quoted string, a backslash escapes the next character,
+which is preserved as-is, unless that character is a newline, in
+which case it is discarded and reading continues at the beginning of
+the next line as if the backslash and newline had not been there.
+In all cases, the backslash itself is discarded.
+.It
+Within a single-quoted string, double quotes and backslashes are
+preserved as-is.
+.It
+Within a double-quoted string, a single quote is preserved as-is,
+and a backslash is preserved as-is unless used to escape a double
+quote.
+.El
+.Pp
+In addition, if the first non-whitespace character on the line is a
+hash character (#), the rest of the line is discarded.
+If a hash character occurs within a word, however, it is preserved
+as-is.
+A backslash at the end of a comment does cause line continuation.
+.Pp
+If
+.Fa lineno
+is not
+.Dv NULL ,
+the integer variable it points to is
+incremented every time a quoted or escaped newline character is read.
+.Pp
+If
+.Fa lenp
+is not
+.Dv NULL ,
+the length of the word (after quotes and
+backslashes have been removed) is stored in the variable it points to.
+.Sh RETURN VALUES
+If successful, the
+.Fn openpam_readword
+function returns a pointer to a
+dynamically allocated NUL-terminated string containing the first word
+encountered on the line.
+.Pp
+The caller is responsible for releasing the returned buffer by passing
+it to
+.Xr free 3 .
+.Pp
+If
+.Fn openpam_readword
+reaches the end of the line or file before any
+characters are copied to the word, it returns
+.Dv NULL .
+In the former
+case, the newline is pushed back to the file.
+.Pp
+If
+.Fn openpam_readword
+reaches the end of the file while a quote or
+backslash escape is in effect, it sets
+.Va errno
+to
+.Dv EINVAL
+and returns
+.Dv NULL .
+.Sh IMPLEMENTATION NOTES
+The parsing rules are intended to be equivalent to the normal POSIX
+shell quoting rules.
+Any discrepancy is a bug and should be reported to the author along
+with sample input that can be used to reproduce the error.
+.Pp
+.Sh SEE ALSO
+.Xr openpam_readline 3 ,
+.Xr openpam_readlinev 3 ,
+.Xr pam 3
+.Sh STANDARDS
+The
+.Fn openpam_readword
+function is an OpenPAM extension.
+.Sh AUTHORS
+The
+.Fn openpam_readword
+function and this manual page were
+developed by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/openpam_restore_cred.3 b/contrib/openpam/doc/man/openpam_restore_cred.3
index 12ff8b823af8..d088ded59180 100644
--- a/contrib/openpam/doc/man/openpam_restore_cred.3
+++ b/contrib/openpam/doc/man/openpam_restore_cred.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_RESTORE_CRED 3
.Os
.Sh NAME
@@ -50,13 +50,13 @@
.Fn openpam_restore_cred "pam_handle_t *pamh"
.Sh DESCRIPTION
The
-.Nm
+.Fn openpam_restore_cred
function restores the credentials saved by
.Xr openpam_borrow_cred 3 .
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn openpam_restore_cred
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_NO_MODULE_DATA
@@ -73,15 +73,15 @@ System error.
.Xr pam_strerror 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_restore_cred
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn openpam_restore_cred
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/openpam_set_feature.3 b/contrib/openpam/doc/man/openpam_set_feature.3
new file mode 100644
index 000000000000..8356dec6118f
--- /dev/null
+++ b/contrib/openpam/doc/man/openpam_set_feature.3
@@ -0,0 +1,87 @@
+.\"-
+.\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
+.\" All rights reserved.
+.\"
+.\" This software was developed for the FreeBSD Project by ThinkSec AS and
+.\" Network Associates Laboratories, the Security Research Division of
+.\" Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+.\" ("CBOSS"), as part of the DARPA CHATS research program.
+.\"
+.\" 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 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.
+.\"
+.\" $Id$
+.\"
+.Dd May 26, 2012
+.Dt OPENPAM_SET_FEATURE 3
+.Os
+.Sh NAME
+.Nm openpam_set_feature
+.Nd enable or disable an optional feature
+.Sh LIBRARY
+.Lb libpam
+.Sh SYNOPSIS
+.In sys/types.h
+.In security/pam_appl.h
+.In security/openpam.h
+.Ft "int"
+.Fn openpam_set_feature "int feature" "int onoff"
+.Sh DESCRIPTION
+.Bf Sy
+This function is experimental and may be modified or removed in a future release without further warning.
+.Ef
+.Pp
+The
+.Fn openpam_set_feature
+function sets the state of the specified
+feature to the value specified by the
+.Fa onoff
+argument.
+See
+.Xr openpam_get_feature 3
+for a list of recognized features.
+.Pp
+.Sh RETURN VALUES
+The
+.Fn openpam_set_feature
+function returns one of the following values:
+.Bl -tag -width 18n
+.It Bq Er PAM_SYMBOL_ERR
+Invalid symbol.
+.El
+.Sh SEE ALSO
+.Xr openpam_get_feature 3 ,
+.Xr pam 3 ,
+.Xr pam_strerror 3
+.Sh STANDARDS
+The
+.Fn openpam_set_feature
+function is an OpenPAM extension.
+.Sh AUTHORS
+The
+.Fn openpam_set_feature
+function and this manual page were
+developed by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/openpam_set_option.3 b/contrib/openpam/doc/man/openpam_set_option.3
index f186c000d8b1..b1e2267c99b3 100644
--- a/contrib/openpam/doc/man/openpam_set_option.3
+++ b/contrib/openpam/doc/man/openpam_set_option.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_SET_OPTION 3
.Os
.Sh NAME
@@ -50,13 +50,13 @@
.Fn openpam_set_option "pam_handle_t *pamh" "const char *option" "const char *value"
.Sh DESCRIPTION
The
-.Nm
+.Fn openpam_set_option
function sets the specified option in the
context of the currently executing service module.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn openpam_set_option
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -70,15 +70,15 @@ System error.
.Xr pam_strerror 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_set_option
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn openpam_set_option
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/openpam_straddch.3 b/contrib/openpam/doc/man/openpam_straddch.3
new file mode 100644
index 000000000000..c55582477ed5
--- /dev/null
+++ b/contrib/openpam/doc/man/openpam_straddch.3
@@ -0,0 +1,122 @@
+.\"-
+.\" Copyright (c) 2001-2003 Networks Associates Technology, Inc.
+.\" Copyright (c) 2004-2011 Dag-Erling Smørgrav
+.\" All rights reserved.
+.\"
+.\" This software was developed for the FreeBSD Project by ThinkSec AS and
+.\" Network Associates Laboratories, the Security Research Division of
+.\" Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+.\" ("CBOSS"), as part of the DARPA CHATS research program.
+.\"
+.\" 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 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.
+.\"
+.\" $Id$
+.\"
+.Dd May 26, 2012
+.Dt OPENPAM_STRADDCH 3
+.Os
+.Sh NAME
+.Nm openpam_straddch
+.Nd add a character to a string, expanding the buffer if needed
+.Sh LIBRARY
+.Lb libpam
+.Sh SYNOPSIS
+.In sys/types.h
+.In security/pam_appl.h
+.In security/openpam.h
+.Ft "int"
+.Fn openpam_straddch "char **str" "size_t *size" "size_t *len" "int ch"
+.Sh DESCRIPTION
+The
+.Fn openpam_straddch
+function appends a character to a dynamically
+allocated NUL-terminated buffer, reallocating the buffer as needed.
+.Pp
+The
+.Fa str
+argument points to a variable containing either a pointer to
+an existing buffer or
+.Dv NULL .
+If the value of the variable pointed to by
+.Fa str
+is
+.Dv NULL ,
+a new buffer
+is allocated.
+.Pp
+The
+.Fa size
+and
+.Fa len
+argument point to variables used to hold the size
+of the buffer and the length of the string it contains, respectively.
+.Pp
+If a new buffer is allocated or an existing buffer is reallocated to
+make room for the additional character,
+.Fa str
+and
+.Fa size
+are updated
+accordingly.
+.Pp
+The
+.Fn openpam_straddch
+function ensures that the buffer is always
+NUL-terminated.
+.Pp
+If the
+.Fn openpam_straddch
+function is successful, it increments the
+integer variable pointed to by
+.Fa len
+and returns 0.
+Otherwise, it leaves the variables pointed to by
+.Fa str ,
+.Fa size
+and
+.Fa len
+unmodified, sets
+.Va errno
+to
+.Dv ENOMEM
+and returns -1.
+.Pp
+.Sh RETURN VALUES
+The
+.Fn openpam_straddch
+function returns 0 on success and -1 on failure.
+.Sh SEE ALSO
+.Xr pam 3 ,
+.Xr pam_strerror 3
+.Sh STANDARDS
+The
+.Fn openpam_straddch
+function is an OpenPAM extension.
+.Sh AUTHORS
+The
+.Fn openpam_straddch
+function and this manual page were
+developed by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/openpam_subst.3 b/contrib/openpam/doc/man/openpam_subst.3
index 565b3e07091d..47297c92ccec 100644
--- a/contrib/openpam/doc/man/openpam_subst.3
+++ b/contrib/openpam/doc/man/openpam_subst.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_SUBST 3
.Os
.Sh NAME
@@ -50,7 +50,7 @@
.Fn openpam_subst "const pam_handle_t *pamh" "char *buf" "size_t *bufsize" "const char *template"
.Sh DESCRIPTION
The
-.Nm
+.Fn openpam_subst
function expands a string, substituting PAM item
values for all occurrences of specific substitution codes.
The
@@ -73,12 +73,12 @@ string,
.Fa bufsize
is updated to reflect the amount of space required to
hold the entire string, and
-.Nm
+.Fn openpam_subst
returns
.Dv PAM_TRY_AGAIN .
.Pp
If
-.Nm
+.Fn openpam_subst
fails for any other reason, the
.Fa bufsize
argument is
@@ -112,10 +112,9 @@ Replaced by the current value of the
.Dv PAM_USER
item.
.El
-.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn openpam_subst
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_SYSTEM_ERR
@@ -131,12 +130,11 @@ Try again.
.Xr pam_strerror 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_subst
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
-.Fx
-Project by
-.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
+.Fn openpam_subst
+function and this manual page were
+developed by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/openpam_ttyconv.3 b/contrib/openpam/doc/man/openpam_ttyconv.3
index b2cd9d9dc94e..3e97cb4b3d68 100644
--- a/contrib/openpam/doc/man/openpam_ttyconv.3
+++ b/contrib/openpam/doc/man/openpam_ttyconv.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt OPENPAM_TTYCONV 3
.Os
.Sh NAME
@@ -50,14 +50,14 @@
.Fn openpam_ttyconv "int n" "const struct pam_message **msg" "struct pam_response **resp" "void *data"
.Sh DESCRIPTION
The
-.Nm
+.Fn openpam_ttyconv
function is a standard conversation function
suitable for use on TTY devices.
It should be adequate for the needs of most text-based interactive
programs.
.Pp
The
-.Nm
+.Fn openpam_ttyconv
function allows the application to specify a
timeout for user input by setting the global integer variable
.Va openpam_ttyconv_timeout
@@ -65,7 +65,7 @@ to the length of the timeout in seconds.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn openpam_ttyconv
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -83,15 +83,15 @@ System error.
.Xr pam_vprompt 3
.Sh STANDARDS
The
-.Nm
+.Fn openpam_ttyconv
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn openpam_ttyconv
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam.3 b/contrib/openpam/doc/man/pam.3
index 11befcda528f..196a3c75cb90 100644
--- a/contrib/openpam/doc/man/pam.3
+++ b/contrib/openpam/doc/man/pam.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM 3
.Os
.Sh NAME
@@ -291,3 +291,6 @@ Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
as part of the DARPA CHATS research program.
+.Pp
+The OpenPAM library is maintained by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/pam.conf.5 b/contrib/openpam/doc/man/pam.conf.5
index 3669f927f988..d5f80d57a181 100644
--- a/contrib/openpam/doc/man/pam.conf.5
+++ b/contrib/openpam/doc/man/pam.conf.5
@@ -26,9 +26,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $Id: pam.conf.5 485 2011-11-03 16:57:37Z des $
+.\" $Id: pam.conf.5 610 2012-05-26 14:03:45Z des $
.\"
-.Dd November 3, 2011
+.Dd May 26, 2012
.Dt PAM.CONF 5
.Os
.Sh NAME
@@ -50,7 +50,7 @@ decreasing order of preference:
.Pp
If none of these locations contains a policy for the given service,
the
-.Dv default
+.Dq Dv other
policy is used instead, if it exists.
.Pp
Entries in per-service policy files must be of one of the two forms
@@ -177,5 +177,5 @@ DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
as part of the DARPA CHATS research program.
.Pp
-This manual page was written by
-.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
+The OpenPAM library is maintained by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/pam_acct_mgmt.3 b/contrib/openpam/doc/man/pam_acct_mgmt.3
index 94100484fb35..f79c4646c4c5 100644
--- a/contrib/openpam/doc/man/pam_acct_mgmt.3
+++ b/contrib/openpam/doc/man/pam_acct_mgmt.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_ACCT_MGMT 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_acct_mgmt "pam_handle_t *pamh" "int flags"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_acct_mgmt
function verifies and enforces account restrictions
after the user has been authenticated.
.Pp
@@ -65,12 +65,12 @@ Fail if the user's authentication token is null.
.El
.Pp
If any other bits are set,
-.Nm
+.Fn pam_acct_mgmt
will return
.Dv PAM_SYMBOL_ERR .
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_acct_mgmt
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -104,11 +104,11 @@ Unknown user.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_acct_mgmt
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_authenticate.3 b/contrib/openpam/doc/man/pam_authenticate.3
index 8263280f0977..c521a388ba26 100644
--- a/contrib/openpam/doc/man/pam_authenticate.3
+++ b/contrib/openpam/doc/man/pam_authenticate.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_AUTHENTICATE 3
.Os
.Sh NAME
@@ -49,14 +49,14 @@
.Fn pam_authenticate "pam_handle_t *pamh" "int flags"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_authenticate
function attempts to authenticate the user
associated with the pam context specified by the
.Fa pamh
argument.
.Pp
The application is free to call
-.Nm
+.Fn pam_authenticate
as many times as it
wishes, but some modules may maintain an internal retry counter and
return
@@ -75,12 +75,12 @@ Fail if the user's authentication token is null.
.El
.Pp
If any other bits are set,
-.Nm
+.Fn pam_authenticate
will return
.Dv PAM_SYMBOL_ERR .
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_authenticate
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -118,11 +118,11 @@ Unknown user.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_authenticate
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_chauthtok.3 b/contrib/openpam/doc/man/pam_chauthtok.3
index 5823866928b1..11647e7ad0b2 100644
--- a/contrib/openpam/doc/man/pam_chauthtok.3
+++ b/contrib/openpam/doc/man/pam_chauthtok.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_CHAUTHTOK 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_chauthtok "pam_handle_t *pamh" "int flags"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_chauthtok
function attempts to change the authentication token
for the user associated with the pam context specified by the
.Fa pamh
@@ -67,12 +67,12 @@ Change only those authentication tokens that have expired.
.El
.Pp
If any other bits are set,
-.Nm
+.Fn pam_chauthtok
will return
.Dv PAM_SYMBOL_ERR .
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_chauthtok
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -110,11 +110,11 @@ Try again.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_chauthtok
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_close_session.3 b/contrib/openpam/doc/man/pam_close_session.3
index 43e4b0392ce1..dba62e816afe 100644
--- a/contrib/openpam/doc/man/pam_close_session.3
+++ b/contrib/openpam/doc/man/pam_close_session.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_CLOSE_SESSION 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_close_session "pam_handle_t *pamh" "int flags"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_close_session
function tears down the user session previously
set up by
.Xr pam_open_session 3 .
@@ -64,12 +64,12 @@ Do not emit any messages.
.El
.Pp
If any other bits are set,
-.Nm
+.Fn pam_close_session
will return
.Dv PAM_SYMBOL_ERR .
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_close_session
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -100,11 +100,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_close_session
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_conv.3 b/contrib/openpam/doc/man/pam_conv.3
index 6b6e697b0632..a1b121b101c1 100644
--- a/contrib/openpam/doc/man/pam_conv.3
+++ b/contrib/openpam/doc/man/pam_conv.3
@@ -32,9 +32,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $Id: pam_conv.3 437 2011-09-13 12:00:13Z des $
+.\" $Id: pam_conv.3 610 2012-05-26 14:03:45Z des $
.\"
-.Dd June 16, 2005
+.Dd May 26, 2012
.Dt PAM_CONV 3
.Os
.Sh NAME
@@ -181,3 +181,6 @@ the Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
as part of the DARPA CHATS research program.
+.Pp
+The OpenPAM library is maintained by
+.An Dag-Erling Sm\(/orgrav Aq des@des.no .
diff --git a/contrib/openpam/doc/man/pam_end.3 b/contrib/openpam/doc/man/pam_end.3
index 66e2871c0da2..0d669125beab 100644
--- a/contrib/openpam/doc/man/pam_end.3
+++ b/contrib/openpam/doc/man/pam_end.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_END 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_end "pam_handle_t *pamh" "int status"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_end
function terminates a PAM transaction and destroys the
corresponding PAM context, releasing all resources allocated to it.
.Pp
@@ -57,11 +57,10 @@ The
.Fa status
argument should be set to the error code returned by the
last API call before the call to
-.Nm
-.
+.Fn pam_end .
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_end
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_SYSTEM_ERR
@@ -77,11 +76,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_end
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_error.3 b/contrib/openpam/doc/man/pam_error.3
index c957409c8b83..6767772b574b 100644
--- a/contrib/openpam/doc/man/pam_error.3
+++ b/contrib/openpam/doc/man/pam_error.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_ERROR 3
.Os
.Sh NAME
@@ -49,13 +49,13 @@
.Fn pam_error "const pam_handle_t *pamh" "const char *fmt" "..."
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_error
function displays an error message through the
intermediary of the given PAM context's conversation function.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_error
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -73,15 +73,15 @@ System error.
.Xr pam_verror 3
.Sh STANDARDS
The
-.Nm
+.Fn pam_error
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_error
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_get_authtok.3 b/contrib/openpam/doc/man/pam_get_authtok.3
index 7f0c8049aac9..84c133dd52a3 100644
--- a/contrib/openpam/doc/man/pam_get_authtok.3
+++ b/contrib/openpam/doc/man/pam_get_authtok.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_GET_AUTHTOK 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_get_authtok "pam_handle_t *pamh" "int item" "const char **authtok" "const char *prompt"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_get_authtok
function returns the cached authentication token,
or prompts the user if no token is currently cached.
Either way, a pointer to the authentication token is stored in the
@@ -89,7 +89,7 @@ before it is
passed to the conversation function.
.Pp
If
-.Nm
+.Fn pam_get_authtok
is called from a module and the
.Dv authtok_prompt
/
@@ -110,17 +110,17 @@ is set to
and there is a non-null
.Dv PAM_OLDAUTHTOK
item,
-.Nm
+.Fn pam_get_authtok
will ask the user to confirm the new token by
retyping it.
If there is a mismatch,
-.Nm
+.Fn pam_get_authtok
will return
.Dv PAM_TRY_AGAIN .
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_get_authtok
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -140,15 +140,15 @@ Try again.
.Xr pam_strerror 3
.Sh STANDARDS
The
-.Nm
+.Fn pam_get_authtok
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_get_authtok
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_get_data.3 b/contrib/openpam/doc/man/pam_get_data.3
index 49fae056cf01..db4b723cf7aa 100644
--- a/contrib/openpam/doc/man/pam_get_data.3
+++ b/contrib/openpam/doc/man/pam_get_data.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_GET_DATA 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_get_data "const pam_handle_t *pamh" "const char *module_data_name" "const void **data"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_get_data
function looks up the opaque object associated with
the string specified by the
.Fa module_data_name
@@ -61,7 +61,7 @@ A pointer to the object is stored in the location pointed to by the
.Fa data
argument.
If
-.Nm
+.Fn pam_get_data
fails, the
.Fa data
argument is untouched.
@@ -72,7 +72,7 @@ are useful for managing
data that are meaningful only to a particular service module.
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_get_data
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_NO_MODULE_DATA
@@ -91,11 +91,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_get_data
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_get_item.3 b/contrib/openpam/doc/man/pam_get_item.3
index 1244a77a9ee3..aaa1badd7f7f 100644
--- a/contrib/openpam/doc/man/pam_get_item.3
+++ b/contrib/openpam/doc/man/pam_get_item.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_GET_ITEM 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_get_item "const pam_handle_t *pamh" "int item_type" "const void **item"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_get_item
function stores a pointer to the item specified by
the
.Fa item_type
@@ -60,7 +60,7 @@ The item is retrieved from the PAM context specified by the
.Fa pamh
argument.
If
-.Nm
+.Fn pam_get_item
fails, the
.Fa item
argument is untouched.
@@ -107,7 +107,7 @@ for a description of
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_get_item
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_SYMBOL_ERR
@@ -127,11 +127,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_get_item
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_get_user.3 b/contrib/openpam/doc/man/pam_get_user.3
index 8f3b426a6619..448f41898b86 100644
--- a/contrib/openpam/doc/man/pam_get_user.3
+++ b/contrib/openpam/doc/man/pam_get_user.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_GET_USER 3
.Os
.Sh NAME
@@ -49,13 +49,13 @@
.Fn pam_get_user "pam_handle_t *pamh" "const char **user" "const char *prompt"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_get_user
function returns the name of the target user, as
specified to
.Xr pam_start 3 .
If no user was specified, nor set using
.Xr pam_set_item 3 ,
-.Nm
+.Fn pam_get_user
will prompt for a user name.
Either way, a pointer to the user name is stored in the location
pointed to by the
@@ -80,7 +80,7 @@ before it is
passed to the conversation function.
.Pp
If
-.Nm
+.Fn pam_get_user
is called from a module and the
.Dv user_prompt
option is
@@ -93,7 +93,7 @@ item.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_get_user
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -118,11 +118,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_get_user
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_getenv.3 b/contrib/openpam/doc/man/pam_getenv.3
index ebd2992f1e94..1f0df73f2db2 100644
--- a/contrib/openpam/doc/man/pam_getenv.3
+++ b/contrib/openpam/doc/man/pam_getenv.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_GETENV 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_getenv "pam_handle_t *pamh" "const char *name"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_getenv
function returns the value of an environment variable.
Its semantics are similar to those of
.Xr getenv 3 ,
@@ -58,7 +58,7 @@ context's environment list instead of the application's.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_getenv
function returns
.Dv NULL
on failure.
@@ -75,11 +75,11 @@ on failure.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_getenv
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_getenvlist.3 b/contrib/openpam/doc/man/pam_getenvlist.3
index a034c8e3cc04..9af378459b44 100644
--- a/contrib/openpam/doc/man/pam_getenvlist.3
+++ b/contrib/openpam/doc/man/pam_getenvlist.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_GETENVLIST 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_getenvlist "pam_handle_t *pamh"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_getenvlist
function returns a copy of the given PAM context's
environment list as a pointer to an array of strings.
The last element in the array is
@@ -77,7 +77,7 @@ after use:
.Ed
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_getenvlist
function returns
.Dv NULL
on failure.
@@ -96,11 +96,11 @@ on failure.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_getenvlist
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_info.3 b/contrib/openpam/doc/man/pam_info.3
index 08bf200de530..c08b5748c6e2 100644
--- a/contrib/openpam/doc/man/pam_info.3
+++ b/contrib/openpam/doc/man/pam_info.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_INFO 3
.Os
.Sh NAME
@@ -49,13 +49,13 @@
.Fn pam_info "const pam_handle_t *pamh" "const char *fmt" "..."
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_info
function displays an informational message through the
intermediary of the given PAM context's conversation function.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_info
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -73,15 +73,15 @@ System error.
.Xr pam_vinfo 3
.Sh STANDARDS
The
-.Nm
+.Fn pam_info
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_info
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_open_session.3 b/contrib/openpam/doc/man/pam_open_session.3
index 13811c7d2977..1cde0e43712d 100644
--- a/contrib/openpam/doc/man/pam_open_session.3
+++ b/contrib/openpam/doc/man/pam_open_session.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_OPEN_SESSION 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_open_session "pam_handle_t *pamh" "int flags"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_open_session
sets up a user session for a previously
authenticated user.
The session should later be torn down by a call to
@@ -65,12 +65,12 @@ Do not emit any messages.
.El
.Pp
If any other bits are set,
-.Nm
+.Fn pam_open_session
will return
.Dv PAM_SYMBOL_ERR .
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_open_session
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -101,11 +101,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_open_session
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_prompt.3 b/contrib/openpam/doc/man/pam_prompt.3
index 20574f2321eb..0ff7742b7fc7 100644
--- a/contrib/openpam/doc/man/pam_prompt.3
+++ b/contrib/openpam/doc/man/pam_prompt.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_PROMPT 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_prompt "const pam_handle_t *pamh" "int style" "char **resp" "const char *fmt" "..."
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_prompt
function constructs a message from the specified format
string and arguments and passes it to the given PAM context's
conversation function.
@@ -67,7 +67,7 @@ for further details.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_prompt
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -85,15 +85,15 @@ System error.
.Xr pam_vprompt 3
.Sh STANDARDS
The
-.Nm
+.Fn pam_prompt
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_prompt
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_putenv.3 b/contrib/openpam/doc/man/pam_putenv.3
index e69816a0b767..4e9c6938e69e 100644
--- a/contrib/openpam/doc/man/pam_putenv.3
+++ b/contrib/openpam/doc/man/pam_putenv.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_PUTENV 3
.Os
.Sh NAME
@@ -49,8 +49,8 @@
.Fn pam_putenv "pam_handle_t *pamh" "const char *namevalue"
.Sh DESCRIPTION
The
-.Nm
-function sets a environment variable.
+.Fn pam_putenv
+function sets an environment variable.
Its semantics are similar to those of
.Xr putenv 3 ,
but it modifies the PAM
@@ -58,7 +58,7 @@ context's environment list instead of the application's.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_putenv
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -80,11 +80,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_putenv
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_set_data.3 b/contrib/openpam/doc/man/pam_set_data.3
index ce4d63d06142..c02ae2ef6ee4 100644
--- a/contrib/openpam/doc/man/pam_set_data.3
+++ b/contrib/openpam/doc/man/pam_set_data.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_SET_DATA 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_set_data "pam_handle_t *pamh" "const char *module_data_name" "void *data" "void (*cleanup)(pam_handle_t *pamh, void *data, int pam_end_status)"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_set_data
function associates a pointer to an opaque object
with an arbitrary string specified by the
.Fa module_data_name
@@ -71,7 +71,7 @@ are useful for managing
data that are meaningful only to a particular service module.
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_set_data
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -90,11 +90,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_set_data
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_set_item.3 b/contrib/openpam/doc/man/pam_set_item.3
index 9f4e78d9aa0f..668c4f39ff0c 100644
--- a/contrib/openpam/doc/man/pam_set_item.3
+++ b/contrib/openpam/doc/man/pam_set_item.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_SET_ITEM 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_set_item "pam_handle_t *pamh" "int item_type" "const void *item"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_set_item
function sets the item specified by the
.Fa item_type
argument to a copy of the object pointed to by the
@@ -63,7 +63,7 @@ See
for a list of recognized item types.
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_set_item
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -84,11 +84,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_set_item
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_setcred.3 b/contrib/openpam/doc/man/pam_setcred.3
index 1e0a2460028d..a4f82493f7c6 100644
--- a/contrib/openpam/doc/man/pam_setcred.3
+++ b/contrib/openpam/doc/man/pam_setcred.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_SETCRED 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_setcred "pam_handle_t *pamh" "int flags"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_setcred
function manages the application's credentials.
.Pp
The
@@ -72,12 +72,12 @@ Refresh credentials.
The latter four are mutually exclusive.
.Pp
If any other bits are set,
-.Nm
+.Fn pam_setcred
will return
.Dv PAM_SYMBOL_ERR .
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_setcred
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -113,11 +113,11 @@ Unknown user.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_setcred
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_setenv.3 b/contrib/openpam/doc/man/pam_setenv.3
index 43906efd1cce..e3b9c131e280 100644
--- a/contrib/openpam/doc/man/pam_setenv.3
+++ b/contrib/openpam/doc/man/pam_setenv.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_SETENV 3
.Os
.Sh NAME
@@ -49,8 +49,8 @@
.Fn pam_setenv "pam_handle_t *pamh" "const char *name" "const char *value" "int overwrite"
.Sh DESCRIPTION
The
-.Nm
-function sets a environment variable.
+.Fn pam_setenv
+function sets an environment variable.
Its semantics are similar to those of
.Xr setenv 3 ,
but it modifies the PAM
@@ -58,7 +58,7 @@ context's environment list instead of the application's.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_setenv
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -75,15 +75,15 @@ System error.
.Xr setenv 3
.Sh STANDARDS
The
-.Nm
+.Fn pam_setenv
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_setenv
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_sm_acct_mgmt.3 b/contrib/openpam/doc/man/pam_sm_acct_mgmt.3
index 22e1980d8e8f..35dd05bb5c0f 100644
--- a/contrib/openpam/doc/man/pam_sm_acct_mgmt.3
+++ b/contrib/openpam/doc/man/pam_sm_acct_mgmt.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_SM_ACCT_MGMT 3
.Os
.Sh NAME
@@ -50,14 +50,14 @@
.Fn pam_sm_acct_mgmt "pam_handle_t *pamh" "int flags" "int argc" "const char **argv"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_sm_acct_mgmt
function is the service module's implementation
of the
.Xr pam_acct_mgmt 3
API function.
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_sm_acct_mgmt
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -94,11 +94,11 @@ Unknown user.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_sm_acct_mgmt
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_sm_authenticate.3 b/contrib/openpam/doc/man/pam_sm_authenticate.3
index e41a70ab0c4c..4c27bb76019e 100644
--- a/contrib/openpam/doc/man/pam_sm_authenticate.3
+++ b/contrib/openpam/doc/man/pam_sm_authenticate.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_SM_AUTHENTICATE 3
.Os
.Sh NAME
@@ -50,14 +50,14 @@
.Fn pam_sm_authenticate "pam_handle_t *pamh" "int flags" "int argc" "const char **argv"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_sm_authenticate
function is the service module's
implementation of the
.Xr pam_authenticate 3
API function.
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_sm_authenticate
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -96,11 +96,11 @@ Unknown user.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_sm_authenticate
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_sm_chauthtok.3 b/contrib/openpam/doc/man/pam_sm_chauthtok.3
index bc3f461b7a50..8e28b05f9919 100644
--- a/contrib/openpam/doc/man/pam_sm_chauthtok.3
+++ b/contrib/openpam/doc/man/pam_sm_chauthtok.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_SM_CHAUTHTOK 3
.Os
.Sh NAME
@@ -50,7 +50,7 @@
.Fn pam_sm_chauthtok "pam_handle_t *pamh" "int flags" "int argc" "const char **argv"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_sm_chauthtok
function is the service module's implementation
of the
.Xr pam_chauthtok 3
@@ -67,7 +67,7 @@ with the
flag set.
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_sm_chauthtok
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -106,11 +106,11 @@ Try again.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_sm_chauthtok
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_sm_close_session.3 b/contrib/openpam/doc/man/pam_sm_close_session.3
index 3b1f57e075bc..bfb5d87ee323 100644
--- a/contrib/openpam/doc/man/pam_sm_close_session.3
+++ b/contrib/openpam/doc/man/pam_sm_close_session.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_SM_CLOSE_SESSION 3
.Os
.Sh NAME
@@ -50,14 +50,14 @@
.Fn pam_sm_close_session "pam_handle_t *pamh" "int flags" "int args" "const char **argv"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_sm_close_session
function is the service module's
implementation of the
.Xr pam_close_session 3
API function.
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_sm_close_session
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -88,11 +88,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_sm_close_session
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_sm_open_session.3 b/contrib/openpam/doc/man/pam_sm_open_session.3
index cdfe4d412557..b92fb45b1b10 100644
--- a/contrib/openpam/doc/man/pam_sm_open_session.3
+++ b/contrib/openpam/doc/man/pam_sm_open_session.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_SM_OPEN_SESSION 3
.Os
.Sh NAME
@@ -50,14 +50,14 @@
.Fn pam_sm_open_session "pam_handle_t *pamh" "int flags" "int argc" "const char **argv"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_sm_open_session
function is the service module's
implementation of the
.Xr pam_open_session 3
API function.
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_sm_open_session
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -88,11 +88,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_sm_open_session
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_sm_setcred.3 b/contrib/openpam/doc/man/pam_sm_setcred.3
index 6d5c52fc1690..19b192e21785 100644
--- a/contrib/openpam/doc/man/pam_sm_setcred.3
+++ b/contrib/openpam/doc/man/pam_sm_setcred.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_SM_SETCRED 3
.Os
.Sh NAME
@@ -50,14 +50,14 @@
.Fn pam_sm_setcred "pam_handle_t *pamh" "int flags" "int argc" "const char **argv"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_sm_setcred
function is the service module's implementation of
the
.Xr pam_setcred 3
API function.
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_sm_setcred
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_ABORT
@@ -94,11 +94,11 @@ Unknown user.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_sm_setcred
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_start.3 b/contrib/openpam/doc/man/pam_start.3
index eaa9f0571c67..4e28d3e57bf4 100644
--- a/contrib/openpam/doc/man/pam_start.3
+++ b/contrib/openpam/doc/man/pam_start.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_START 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_start "const char *service" "const char *user" "const struct pam_conv *pam_conv" "pam_handle_t **pamh"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_start
function creates and initializes a PAM context.
.Pp
The
@@ -78,7 +78,7 @@ for details.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_start
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -99,11 +99,11 @@ System error.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_start
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_strerror.3 b/contrib/openpam/doc/man/pam_strerror.3
index 900310284835..5b24b68e8a07 100644
--- a/contrib/openpam/doc/man/pam_strerror.3
+++ b/contrib/openpam/doc/man/pam_strerror.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_STRERROR 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_strerror "const pam_handle_t *pamh" "int error_number"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_strerror
function returns a pointer to a string containing a
textual description of the error indicated by the
.Fa error_number
@@ -64,7 +64,7 @@ or
.Dv NULL .
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_strerror
function returns
.Dv NULL
on failure.
@@ -78,11 +78,11 @@ on failure.
.Re
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_strerror
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_verror.3 b/contrib/openpam/doc/man/pam_verror.3
index 4987da30f988..d4a8cc54862e 100644
--- a/contrib/openpam/doc/man/pam_verror.3
+++ b/contrib/openpam/doc/man/pam_verror.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_VERROR 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_verror "const pam_handle_t *pamh" "const char *fmt" "va_list ap"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_verror
function passes its arguments to
.Xr pam_vprompt 3
with a
@@ -59,7 +59,7 @@ and discards the response.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_verror
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -77,15 +77,15 @@ System error.
.Xr pam_vprompt 3
.Sh STANDARDS
The
-.Nm
+.Fn pam_verror
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_verror
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_vinfo.3 b/contrib/openpam/doc/man/pam_vinfo.3
index c2ac5b0c4d39..3e10b508a9c1 100644
--- a/contrib/openpam/doc/man/pam_vinfo.3
+++ b/contrib/openpam/doc/man/pam_vinfo.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_VINFO 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_vinfo "const pam_handle_t *pamh" "const char *fmt" "va_list ap"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_vinfo
function passes its arguments to
.Xr pam_vprompt 3
with a
@@ -59,7 +59,7 @@ and discards the response.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_vinfo
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -77,15 +77,15 @@ System error.
.Xr pam_vprompt 3
.Sh STANDARDS
The
-.Nm
+.Fn pam_vinfo
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_vinfo
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/doc/man/pam_vprompt.3 b/contrib/openpam/doc/man/pam_vprompt.3
index 381008d7a99e..c3d8b325827b 100644
--- a/contrib/openpam/doc/man/pam_vprompt.3
+++ b/contrib/openpam/doc/man/pam_vprompt.3
@@ -34,7 +34,7 @@
.\"
.\" $Id$
.\"
-.Dd December 18, 2011
+.Dd May 26, 2012
.Dt PAM_VPROMPT 3
.Os
.Sh NAME
@@ -49,7 +49,7 @@
.Fn pam_vprompt "const pam_handle_t *pamh" "int style" "char **resp" "const char *fmt" "va_list ap"
.Sh DESCRIPTION
The
-.Nm
+.Fn pam_vprompt
function constructs a string from the
.Fa fmt
and
@@ -93,7 +93,7 @@ If they do, they may be truncated.
.Pp
.Sh RETURN VALUES
The
-.Nm
+.Fn pam_vprompt
function returns one of the following values:
.Bl -tag -width 18n
.It Bq Er PAM_BUF_ERR
@@ -114,15 +114,15 @@ System error.
.Xr vsnprintf 3
.Sh STANDARDS
The
-.Nm
+.Fn pam_vprompt
function is an OpenPAM extension.
.Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
+.Fn pam_vprompt
+function and this manual page were
+developed for the
.Fx
-Project by
-ThinkSec AS and Network Associates Laboratories, the
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
diff --git a/contrib/openpam/include/security/openpam.h b/contrib/openpam/include/security/openpam.h
index 0c896a480a96..4ba8b95fa0fc 100644
--- a/contrib/openpam/include/security/openpam.h
+++ b/contrib/openpam/include/security/openpam.h
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam.h 455 2011-10-29 18:31:11Z des $
+ * $Id: openpam.h 605 2012-04-20 11:05:10Z des $
*/
#ifndef SECURITY_OPENPAM_H_INCLUDED
@@ -157,12 +157,49 @@ openpam_readline(FILE *_f,
int *_lineno,
size_t *_lenp)
OPENPAM_NONNULL((1));
+
+char **
+openpam_readlinev(FILE *_f,
+ int *_lineno,
+ int *_lenp)
+ OPENPAM_NONNULL((1));
+
+char *
+openpam_readword(FILE *_f,
+ int *_lineno,
+ size_t *_lenp)
+ OPENPAM_NONNULL((1));
#endif
+int
+openpam_straddch(char **_str,
+ size_t *_sizep,
+ size_t *_lenp,
+ int ch)
+ OPENPAM_NONNULL((1));
+
+/*
+ * Enable / disable optional features
+ */
+enum {
+ OPENPAM_RESTRICT_SERVICE_NAME,
+ OPENPAM_VERIFY_POLICY_FILE,
+ OPENPAM_RESTRICT_MODULE_NAME,
+ OPENPAM_VERIFY_MODULE_FILE,
+ OPENPAM_NUM_FEATURES
+};
+
+int
+openpam_set_feature(int _feature, int _onoff);
+
+int
+openpam_get_feature(int _feature, int *_onoff);
+
/*
* Log levels
*/
enum {
+ PAM_LOG_LIBDEBUG = -1,
PAM_LOG_DEBUG,
PAM_LOG_VERBOSE,
PAM_LOG_NOTICE,
@@ -196,8 +233,8 @@ _openpam_log(int _level,
void
openpam_log(int _level,
const char *_format,
- ...)
- OPENPAM_FORMAT ((__printf__, 2, 3))
+ ...)
+ OPENPAM_FORMAT ((__printf__, 2, 3))
OPENPAM_NONNULL((2));
#endif
diff --git a/contrib/openpam/include/security/openpam_version.h b/contrib/openpam/include/security/openpam_version.h
index ed1c1de69f50..d50d91368954 100644
--- a/contrib/openpam/include/security/openpam_version.h
+++ b/contrib/openpam/include/security/openpam_version.h
@@ -32,14 +32,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_version.h 505 2011-12-18 14:13:08Z des $
+ * $Id: openpam_version.h 609 2012-05-26 13:57:45Z des $
*/
#ifndef SECURITY_OPENPAM_VERSION_H_INCLUDED
#define SECURITY_OPENPAM_VERSION_H_INCLUDED
#define OPENPAM
-#define OPENPAM_VERSION 20111218
-#define OPENPAM_RELEASE "Lycopsida"
+#define OPENPAM_VERSION 20120526
+#define OPENPAM_RELEASE "Micrampelis"
#endif /* !SECURITY_OPENPAM_VERSION_H_INCLUDED */
diff --git a/contrib/openpam/lib/Makefile.am b/contrib/openpam/lib/Makefile.am
index 3a2e60ec8c7b..9ce2d2f5bc1e 100644
--- a/contrib/openpam/lib/Makefile.am
+++ b/contrib/openpam/lib/Makefile.am
@@ -1,4 +1,4 @@
-# $Id: Makefile.am 499 2011-11-22 11:51:50Z des $
+# $Id: Makefile.am 602 2012-04-15 17:31:15Z des $
NULL =
@@ -8,8 +8,11 @@ lib_LTLIBRARIES = libpam.la
noinst_HEADERS = \
openpam_constants.h \
+ openpam_ctype.h \
openpam_debug.h \
+ openpam_features.h \
openpam_impl.h \
+ openpam_strlcat.h \
openpam_strlcmp.h \
openpam_strlcpy.h
@@ -20,17 +23,23 @@ libpam_la_SOURCES = \
openpam_constants.c \
openpam_dispatch.c \
openpam_dynamic.c \
+ openpam_features.c \
openpam_findenv.c \
openpam_free_data.c \
openpam_free_envlist.c \
+ openpam_get_feature.c \
openpam_get_option.c \
openpam_load.c \
openpam_log.c \
openpam_nullconv.c \
openpam_readline.c \
+ openpam_readlinev.c \
+ openpam_readword.c \
openpam_restore_cred.c \
openpam_set_option.c \
+ openpam_set_feature.c \
openpam_static.c \
+ openpam_straddch.c \
openpam_subst.c \
openpam_ttyconv.c \
pam_acct_mgmt.c \
diff --git a/contrib/openpam/lib/Makefile.in b/contrib/openpam/lib/Makefile.in
index 0052ce286e3e..353fbaba9b64 100644
--- a/contrib/openpam/lib/Makefile.in
+++ b/contrib/openpam/lib/Makefile.in
@@ -15,7 +15,7 @@
@SET_MAKE@
-# $Id: Makefile.am 499 2011-11-22 11:51:50Z des $
+# $Id: Makefile.am 602 2012-04-15 17:31:15Z des $
VPATH = @srcdir@
@@ -76,11 +76,13 @@ am__objects_1 =
am_libpam_la_OBJECTS = openpam_borrow_cred.lo \
openpam_check_owner_perms.lo openpam_configure.lo \
openpam_constants.lo openpam_dispatch.lo openpam_dynamic.lo \
- openpam_findenv.lo openpam_free_data.lo \
- openpam_free_envlist.lo openpam_get_option.lo openpam_load.lo \
- openpam_log.lo openpam_nullconv.lo openpam_readline.lo \
- openpam_restore_cred.lo openpam_set_option.lo \
- openpam_static.lo openpam_subst.lo openpam_ttyconv.lo \
+ openpam_features.lo openpam_findenv.lo openpam_free_data.lo \
+ openpam_free_envlist.lo openpam_get_feature.lo \
+ openpam_get_option.lo openpam_load.lo openpam_log.lo \
+ openpam_nullconv.lo openpam_readline.lo openpam_readlinev.lo \
+ openpam_readword.lo openpam_restore_cred.lo \
+ openpam_set_option.lo openpam_set_feature.lo openpam_static.lo \
+ openpam_straddch.lo openpam_subst.lo openpam_ttyconv.lo \
pam_acct_mgmt.lo pam_authenticate.lo pam_chauthtok.lo \
pam_close_session.lo pam_end.lo pam_error.lo \
pam_get_authtok.lo pam_get_data.lo pam_get_item.lo \
@@ -234,8 +236,11 @@ INCLUDES = -I$(top_srcdir)/include
lib_LTLIBRARIES = libpam.la
noinst_HEADERS = \
openpam_constants.h \
+ openpam_ctype.h \
openpam_debug.h \
+ openpam_features.h \
openpam_impl.h \
+ openpam_strlcat.h \
openpam_strlcmp.h \
openpam_strlcpy.h
@@ -246,17 +251,23 @@ libpam_la_SOURCES = \
openpam_constants.c \
openpam_dispatch.c \
openpam_dynamic.c \
+ openpam_features.c \
openpam_findenv.c \
openpam_free_data.c \
openpam_free_envlist.c \
+ openpam_get_feature.c \
openpam_get_option.c \
openpam_load.c \
openpam_log.c \
openpam_nullconv.c \
openpam_readline.c \
+ openpam_readlinev.c \
+ openpam_readword.c \
openpam_restore_cred.c \
openpam_set_option.c \
+ openpam_set_feature.c \
openpam_static.c \
+ openpam_straddch.c \
openpam_subst.c \
openpam_ttyconv.c \
pam_acct_mgmt.c \
@@ -387,17 +398,23 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_constants.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_dispatch.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_dynamic.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_features.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_findenv.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_free_data.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_free_envlist.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_get_feature.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_get_option.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_load.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_log.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_nullconv.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_readline.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_readlinev.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_readword.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_restore_cred.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_set_feature.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_set_option.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_static.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_straddch.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_subst.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openpam_ttyconv.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_acct_mgmt.Plo@am__quote@
diff --git a/contrib/openpam/lib/openpam_check_owner_perms.c b/contrib/openpam/lib/openpam_check_owner_perms.c
index 9d64ed6e8b3a..d3b2ca98596b 100644
--- a/contrib/openpam/lib/openpam_check_owner_perms.c
+++ b/contrib/openpam/lib/openpam_check_owner_perms.c
@@ -11,6 +11,9 @@
* 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 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
@@ -24,7 +27,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_check_owner_perms.c 499 2011-11-22 11:51:50Z des $
+ * $Id: openpam_check_owner_perms.c 543 2012-03-31 22:11:34Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -67,6 +70,12 @@ openpam_check_desc_owner_perms(const char *name, int fd)
errno = serrno;
return (-1);
}
+ if (!S_ISREG(sb.st_mode)) {
+ openpam_log(PAM_LOG_ERROR,
+ "%s: not a regular file", name);
+ errno = EINVAL;
+ return (-1);
+ }
if ((sb.st_uid != root && sb.st_uid != arbitrator) ||
(sb.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
openpam_log(PAM_LOG_ERROR,
@@ -84,7 +93,7 @@ openpam_check_desc_owner_perms(const char *name, int fd)
* up to it are owned by either root or the arbitrator and that they are
* not writable by group or other.
*
- * Note that openpam_check_file_owner_perms() should be used instead if
+ * Note that openpam_check_desc_owner_perms() should be used instead if
* possible to avoid a race between the ownership / permission check and
* the actual open().
*/
@@ -95,8 +104,9 @@ openpam_check_path_owner_perms(const char *path)
uid_t root, arbitrator;
char pathbuf[PATH_MAX];
struct stat sb;
- int len, serrno;
+ int len, serrno, tip;
+ tip = 1;
root = 0;
arbitrator = geteuid();
if (realpath(path, pathbuf) == NULL)
@@ -111,6 +121,12 @@ openpam_check_path_owner_perms(const char *path)
}
return (-1);
}
+ if (tip && !S_ISREG(sb.st_mode)) {
+ openpam_log(PAM_LOG_ERROR,
+ "%s: not a regular file", pathbuf);
+ errno = EINVAL;
+ return (-1);
+ }
if ((sb.st_uid != root && sb.st_uid != arbitrator) ||
(sb.st_mode & (S_IWGRP|S_IWOTH)) != 0) {
openpam_log(PAM_LOG_ERROR,
@@ -120,6 +136,7 @@ openpam_check_path_owner_perms(const char *path)
}
while (--len > 0 && pathbuf[len] != '/')
pathbuf[len] = '\0';
+ tip = 0;
}
return (0);
}
diff --git a/contrib/openpam/lib/openpam_configure.c b/contrib/openpam/lib/openpam_configure.c
index bef7817f823e..8172a6fdf11c 100644
--- a/contrib/openpam/lib/openpam_configure.c
+++ b/contrib/openpam/lib/openpam_configure.c
@@ -1,6 +1,6 @@
/*-
* Copyright (c) 2001-2003 Networks Associates Technology, Inc.
- * Copyright (c) 2004-2011 Dag-Erling Smørgrav
+ * Copyright (c) 2004-2012 Dag-Erling Smørgrav
* All rights reserved.
*
* This software was developed for the FreeBSD Project by ThinkSec AS and
@@ -32,13 +32,15 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_configure.c 500 2011-11-22 12:07:03Z des $
+ * $Id: openpam_configure.c 612 2012-05-26 23:02:55Z des $
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+#include <sys/param.h>
+
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
@@ -48,389 +50,183 @@
#include <security/pam_appl.h>
#include "openpam_impl.h"
-#include "openpam_strlcmp.h"
+#include "openpam_ctype.h"
+#include "openpam_strlcat.h"
+#include "openpam_strlcpy.h"
static int openpam_load_chain(pam_handle_t *, const char *, pam_facility_t);
/*
- * Evaluates to non-zero if the argument is a linear whitespace character.
- */
-#define is_lws(ch) \
- (ch == ' ' || ch == '\t')
-
-/*
- * Evaluates to non-zero if the argument is a printable ASCII character.
- * Assumes that the execution character set is a superset of ASCII.
- */
-#define is_p(ch) \
- (ch >= '!' && ch <= '~')
-
-/*
- * Returns non-zero if the argument belongs to the POSIX Portable Filename
- * Character Set. Assumes that the execution character set is a superset
- * of ASCII.
- */
-#define is_pfcs(ch) \
- ((ch >= '0' && ch <= '9') || \
- (ch >= 'A' && ch <= 'Z') || \
- (ch >= 'a' && ch <= 'z') || \
- ch == '.' || ch == '_' || ch == '-')
-
-/*
- * Parse the service name.
- *
- * Returns the length of the service name, or 0 if the end of the string
- * was reached or a disallowed non-whitespace character was encountered.
+ * Validate a service name.
*
- * If parse_service_name() is successful, it updates *service to point to
- * the first character of the service name and *line to point one
- * character past the end. If it reaches the end of the string, it
- * updates *line to point to the terminating NUL character and leaves
- * *service unmodified. In all other cases, it leaves both *line and
- * *service unmodified.
- *
- * Allowed characters are all characters in the POSIX portable filename
- * character set.
+ * Returns a non-zero value if the argument points to a NUL-terminated
+ * string consisting entirely of characters in the POSIX portable filename
+ * character set, excluding the path separator character.
*/
static int
-parse_service_name(char **line, char **service)
+valid_service_name(const char *name)
{
- char *b, *e;
+ const char *p;
- for (b = *line; *b && is_lws(*b); ++b)
- /* nothing */ ;
- if (!*b) {
- *line = b;
- return (0);
+ if (OPENPAM_FEATURE(RESTRICT_SERVICE_NAME)) {
+ /* path separator not allowed */
+ for (p = name; *p != '\0'; ++p)
+ if (!is_pfcs(*p))
+ return (0);
+ } else {
+ /* path separator allowed */
+ for (p = name; *p != '\0'; ++p)
+ if (!is_pfcs(*p) && *p != '/')
+ return (0);
}
- for (e = b; *e && !is_lws(*e); ++e)
- if (!is_pfcs(*e))
- return (0);
- if (e == b)
- return (0);
- *line = e;
- *service = b;
- return (e - b);
+ return (1);
}
/*
* Parse the facility name.
*
- * Returns the corresponding pam_facility_t value, or -1 if the end of the
- * string was reached, a disallowed non-whitespace character was
- * encountered, or the first word was not a recognized facility name.
- *
- * If parse_facility_name() is successful, it updates *line to point one
- * character past the end of the facility name. If it reaches the end of
- * the string, it updates *line to point to the terminating NUL character.
- * In all other cases, it leaves *line unmodified.
+ * Returns the corresponding pam_facility_t value, or -1 if the argument
+ * is not a valid facility name.
*/
static pam_facility_t
-parse_facility_name(char **line)
+parse_facility_name(const char *name)
{
- char *b, *e;
int i;
- for (b = *line; *b && is_lws(*b); ++b)
- /* nothing */ ;
- if (!*b) {
- *line = b;
- return ((pam_facility_t)-1);
- }
- for (e = b; *e && !is_lws(*e); ++e)
- /* nothing */ ;
- if (e == b)
- return ((pam_facility_t)-1);
for (i = 0; i < PAM_NUM_FACILITIES; ++i)
- if (strlcmp(pam_facility_name[i], b, e - b) == 0)
- break;
- if (i == PAM_NUM_FACILITIES)
- return ((pam_facility_t)-1);
- *line = e;
- return (i);
-}
-
-/*
- * Parse the word "include".
- *
- * If the next word on the line is "include", parse_include() updates
- * *line to point one character past "include" and returns 1. Otherwise,
- * it leaves *line unmodified and returns 0.
- */
-static int
-parse_include(char **line)
-{
- char *b, *e;
-
- for (b = *line; *b && is_lws(*b); ++b)
- /* nothing */ ;
- if (!*b) {
- *line = b;
- return (-1);
- }
- for (e = b; *e && !is_lws(*e); ++e)
- /* nothing */ ;
- if (e == b)
- return (0);
- if (strlcmp("include", b, e - b) != 0)
- return (0);
- *line = e;
- return (1);
+ if (strcmp(pam_facility_name[i], name) == 0)
+ return (i);
+ return ((pam_facility_t)-1);
}
/*
* Parse the control flag.
*
- * Returns the corresponding pam_control_t value, or -1 if the end of the
- * string was reached, a disallowed non-whitespace character was
- * encountered, or the first word was not a recognized control flag.
- *
- * If parse_control_flag() is successful, it updates *line to point one
- * character past the end of the control flag. If it reaches the end of
- * the string, it updates *line to point to the terminating NUL character.
- * In all other cases, it leaves *line unmodified.
+ * Returns the corresponding pam_control_t value, or -1 if the argument is
+ * not a valid control flag name.
*/
static pam_control_t
-parse_control_flag(char **line)
+parse_control_flag(const char *name)
{
- char *b, *e;
int i;
- for (b = *line; *b && is_lws(*b); ++b)
- /* nothing */ ;
- if (!*b) {
- *line = b;
- return ((pam_control_t)-1);
- }
- for (e = b; *e && !is_lws(*e); ++e)
- /* nothing */ ;
- if (e == b)
- return ((pam_control_t)-1);
for (i = 0; i < PAM_NUM_CONTROL_FLAGS; ++i)
- if (strlcmp(pam_control_flag_name[i], b, e - b) == 0)
- break;
- if (i == PAM_NUM_CONTROL_FLAGS)
- return ((pam_control_t)-1);
- *line = e;
- return (i);
+ if (strcmp(pam_control_flag_name[i], name) == 0)
+ return (i);
+ return ((pam_control_t)-1);
}
/*
- * Parse a file name.
- *
- * Returns the length of the file name, or 0 if the end of the string was
- * reached or a disallowed non-whitespace character was encountered.
+ * Validate a file name.
*
- * If parse_filename() is successful, it updates *filename to point to the
- * first character of the filename and *line to point one character past
- * the end. If it reaches the end of the string, it updates *line to
- * point to the terminating NUL character and leaves *filename unmodified.
- * In all other cases, it leaves both *line and *filename unmodified.
- *
- * Allowed characters are all characters in the POSIX portable filename
- * character set, plus the path separator (forward slash).
+ * Returns a non-zero value if the argument points to a NUL-terminated
+ * string consisting entirely of characters in the POSIX portable filename
+ * character set, including the path separator character.
*/
static int
-parse_filename(char **line, char **filename)
+valid_module_name(const char *name)
{
- char *b, *e;
-
- for (b = *line; *b && is_lws(*b); ++b)
- /* nothing */ ;
- if (!*b) {
- *line = b;
- return (0);
- }
- for (e = b; *e && !is_lws(*e); ++e)
- if (!is_pfcs(*e) && *e != '/')
- return (0);
- if (e == b)
- return (0);
- *line = e;
- *filename = b;
- return (e - b);
-}
+ const char *p;
-/*
- * Parse an option.
- *
- * Returns a dynamically allocated string containing the next module
- * option, or NULL if the end of the string was reached or a disallowed
- * non-whitespace character was encountered.
- *
- * If parse_option() is successful, it updates *line to point one
- * character past the end of the option. If it reaches the end of the
- * string, it updates *line to point to the terminating NUL character. In
- * all other cases, it leaves *line unmodified.
- *
- * If parse_option() fails to allocate memory, it will return NULL and set
- * errno to a non-zero value.
- *
- * Allowed characters for option names are all characters in the POSIX
- * portable filename character set. Allowed characters for option values
- * are any printable non-whitespace characters. The option value may be
- * quoted in either single or double quotes, in which case space
- * characters and whichever quote character was not used are allowed.
- * Note that the entire value must be quoted, not just part of it.
- */
-static char *
-parse_option(char **line)
-{
- char *nb, *ne, *vb, *ve;
- unsigned char q = 0;
- char *option;
- size_t size;
-
- errno = 0;
- for (nb = *line; *nb && is_lws(*nb); ++nb)
- /* nothing */ ;
- if (!*nb) {
- *line = nb;
- return (NULL);
- }
- for (ne = nb; *ne && !is_lws(*ne) && *ne != '='; ++ne)
- if (!is_pfcs(*ne))
- return (NULL);
- if (ne == nb)
- return (NULL);
- if (*ne == '=') {
- vb = ne + 1;
- if (*vb == '"' || *vb == '\'')
- q = *vb++;
- for (ve = vb;
- *ve && *ve != q && (is_p(*ve) || (q && is_lws(*ve)));
- ++ve)
- /* nothing */ ;
- if (q && *ve != q)
- /* non-printable character or missing endquote */
- return (NULL);
- if (q && *(ve + 1) && !is_lws(*(ve + 1)))
- /* garbage after value */
- return (NULL);
+ if (OPENPAM_FEATURE(RESTRICT_MODULE_NAME)) {
+ /* path separator not allowed */
+ for (p = name; *p != '\0'; ++p)
+ if (!is_pfcs(*p))
+ return (0);
} else {
- vb = ve = ne;
+ /* path separator allowed */
+ for (p = name; *p != '\0'; ++p)
+ if (!is_pfcs(*p) && *p != '/')
+ return (0);
}
- size = (ne - nb) + 1;
- if (ve > vb)
- size += (ve - vb) + 1;
- if ((option = malloc(size)) == NULL)
- return (NULL);
- strncpy(option, nb, ne - nb);
- if (ve > vb) {
- option[ne - nb] = '=';
- strncpy(option + (ne - nb) + 1, vb, ve - vb);
- }
- option[size - 1] = '\0';
- *line = q ? ve + 1 : ve;
- return (option);
-}
-
-/*
- * Consume trailing whitespace.
- *
- * If there are no non-whitespace characters left on the line, parse_eol()
- * updates *line to point at the terminating NUL character and returns 0.
- * Otherwise, it leaves *line unmodified and returns a non-zero value.
- */
-static int
-parse_eol(char **line)
-{
- char *p;
-
- for (p = *line; *p && is_lws(*p); ++p)
- /* nothing */ ;
- if (*p)
- return ((unsigned char)*p);
- *line = p;
- return (0);
+ return (1);
}
typedef enum { pam_conf_style, pam_d_style } openpam_style_t;
/*
* Extracts given chains from a policy file.
+ *
+ * Returns the number of policy entries which were found for the specified
+ * service and facility, or -1 if a system error occurred or a syntax
+ * error was encountered.
*/
static int
openpam_parse_chain(pam_handle_t *pamh,
const char *service,
pam_facility_t facility,
+ FILE *f,
const char *filename,
openpam_style_t style)
{
pam_chain_t *this, **next;
pam_facility_t fclt;
pam_control_t ctlf;
- char *line0, *line, *str, *name;
- char *option, **optv;
- int len, lineno, ret;
- FILE *f;
+ char *name, *servicename, *modulename;
+ int count, lineno, ret, serrno;
+ char **wordv, *word;
+ int i, wordc;
- if ((f = fopen(filename, "r")) == NULL) {
- openpam_log(errno == ENOENT ? PAM_LOG_DEBUG : PAM_LOG_NOTICE,
- "%s: %m", filename);
- return (PAM_SUCCESS);
- }
- if (openpam_check_desc_owner_perms(filename, fileno(f)) != 0) {
- fclose(f);
- return (PAM_SYSTEM_ERR);
- }
+ count = 0;
this = NULL;
name = NULL;
lineno = 0;
- while ((line0 = line = openpam_readline(f, &lineno, NULL)) != NULL) {
- /* get service name if necessary */
- if (style == pam_conf_style) {
- if ((len = parse_service_name(&line, &str)) == 0) {
- openpam_log(PAM_LOG_NOTICE,
- "%s(%d): invalid service name (ignored)",
- filename, lineno);
- FREE(line0);
- continue;
- }
- if (strlcmp(service, str, len) != 0) {
- FREE(line0);
- continue;
- }
+ wordc = 0;
+ wordv = NULL;
+ while ((wordv = openpam_readlinev(f, &lineno, &wordc)) != NULL) {
+ /* blank line? */
+ if (wordc == 0) {
+ FREEV(wordc, wordv);
+ continue;
+ }
+ i = 0;
+
+ /* check service name if necessary */
+ if (style == pam_conf_style &&
+ strcmp(wordv[i++], service) != 0) {
+ FREEV(wordc, wordv);
+ continue;
}
- /* get facility name */
- if ((fclt = parse_facility_name(&line)) == (pam_facility_t)-1) {
+ /* check facility name */
+ if ((word = wordv[i++]) == NULL ||
+ (fclt = parse_facility_name(word)) == (pam_facility_t)-1) {
openpam_log(PAM_LOG_ERROR,
"%s(%d): missing or invalid facility",
filename, lineno);
goto fail;
}
if (facility != fclt && facility != PAM_FACILITY_ANY) {
- FREE(line0);
+ FREEV(wordc, wordv);
continue;
}
/* check for "include" */
- if (parse_include(&line)) {
- if ((len = parse_service_name(&line, &str)) == 0) {
+ if ((word = wordv[i++]) != NULL &&
+ strcmp(word, "include") == 0) {
+ if ((servicename = wordv[i++]) == NULL ||
+ !valid_service_name(servicename)) {
openpam_log(PAM_LOG_ERROR,
- "%s(%d): missing or invalid filename",
+ "%s(%d): missing or invalid service name",
filename, lineno);
goto fail;
}
- if ((name = strndup(str, len)) == NULL)
- goto syserr;
- if (parse_eol(&line) != 0) {
+ if (wordv[i] != NULL) {
openpam_log(PAM_LOG_ERROR,
"%s(%d): garbage at end of line",
filename, lineno);
goto fail;
}
- ret = openpam_load_chain(pamh, name, fclt);
- FREE(name);
- if (ret != PAM_SUCCESS)
+ ret = openpam_load_chain(pamh, servicename, fclt);
+ FREEV(wordc, wordv);
+ if (ret < 0)
goto fail;
- FREE(line0);
continue;
}
/* get control flag */
- if ((ctlf = parse_control_flag(&line)) == (pam_control_t)-1) {
+ if (word == NULL || /* same word we compared to "include" */
+ (ctlf = parse_control_flag(word)) == (pam_control_t)-1) {
openpam_log(PAM_LOG_ERROR,
"%s(%d): missing or invalid control flag",
filename, lineno);
@@ -438,73 +234,78 @@ openpam_parse_chain(pam_handle_t *pamh,
}
/* get module name */
- if ((len = parse_filename(&line, &str)) == 0) {
+ if ((modulename = wordv[i++]) == NULL ||
+ !valid_module_name(modulename)) {
openpam_log(PAM_LOG_ERROR,
"%s(%d): missing or invalid module name",
filename, lineno);
goto fail;
}
- if ((name = strndup(str, len)) == NULL)
- goto syserr;
/* allocate new entry */
if ((this = calloc(1, sizeof *this)) == NULL)
goto syserr;
this->flag = ctlf;
- /* get module options */
- if ((this->optv = malloc(sizeof *optv)) == NULL)
- goto syserr;
- this->optc = 0;
- while ((option = parse_option(&line)) != NULL) {
- optv = realloc(this->optv,
- (this->optc + 2) * sizeof *optv);
- if (optv == NULL)
- goto syserr;
- this->optv = optv;
- this->optv[this->optc++] = option;
- }
- this->optv[this->optc] = NULL;
- if (*line != '\0') {
- openpam_log(PAM_LOG_ERROR,
- "%s(%d): syntax error in module options",
- filename, lineno);
- goto fail;
- }
-
/* load module */
- this->module = openpam_load_module(name);
- FREE(name);
- if (this->module == NULL)
+ if ((this->module = openpam_load_module(modulename)) == NULL)
goto fail;
+ /*
+ * The remaining items in wordv are the module's
+ * arguments. We could set this->optv = wordv + i, but
+ * then free(this->optv) wouldn't work. Instead, we free
+ * the words we've already consumed, shift the rest up,
+ * and clear the tail end of the array.
+ */
+ this->optc = wordc - i;
+ for (i = 0; i < wordc - this->optc; ++i) {
+ FREE(wordv[i]);
+ }
+ for (i = 0; i < this->optc; ++i) {
+ wordv[i] = wordv[wordc - this->optc + i];
+ wordv[wordc - this->optc + i] = NULL;
+ }
+ this->optv = wordv;
+ wordv = NULL;
+ wordc = 0;
+
/* hook it up */
for (next = &pamh->chains[fclt]; *next != NULL;
next = &(*next)->next)
/* nothing */ ;
*next = this;
this = NULL;
-
- /* next please... */
- FREE(line0);
+ ++count;
}
- if (!feof(f))
+ /*
+ * The loop ended because openpam_readword() returned NULL, which
+ * can happen for four different reasons: an I/O error (ferror(f)
+ * is true), a memory allocation failure (ferror(f) is false,
+ * errno is non-zero)
+ */
+ if (ferror(f) || errno != 0)
goto syserr;
+ if (!feof(f))
+ goto fail;
fclose(f);
- return (PAM_SUCCESS);
+ return (count);
syserr:
+ serrno = errno;
openpam_log(PAM_LOG_ERROR, "%s: %m", filename);
+ errno = serrno;
+ /* fall through */
fail:
- if (this && this->optc) {
- while (this->optc--)
- FREE(this->optv[this->optc]);
- FREE(this->optv);
- }
+ serrno = errno;
+ if (this && this->optc && this->optv)
+ FREEV(this->optc, this->optv);
FREE(this);
- FREE(line0);
+ FREEV(wordc, wordv);
+ FREE(wordv);
FREE(name);
fclose(f);
- return (PAM_SYSTEM_ERR);
+ errno = serrno;
+ return (-1);
}
static const char *openpam_policy_path[] = {
@@ -516,44 +317,110 @@ static const char *openpam_policy_path[] = {
};
/*
+ * Read the specified chains from the specified file.
+ *
+ * Returns 0 if the file exists but does not contain any matching lines.
+ *
+ * Returns -1 and sets errno to ENOENT if the file does not exist.
+ *
+ * Returns -1 and sets errno to some other non-zero value if the file
+ * exists but is unsafe or unreadable, or an I/O error occurs.
+ */
+static int
+openpam_load_file(pam_handle_t *pamh,
+ const char *service,
+ pam_facility_t facility,
+ const char *filename,
+ openpam_style_t style)
+{
+ FILE *f;
+ int ret, serrno;
+
+ /* attempt to open the file */
+ if ((f = fopen(filename, "r")) == NULL) {
+ serrno = errno;
+ openpam_log(errno == ENOENT ? PAM_LOG_DEBUG : PAM_LOG_ERROR,
+ "%s: %m", filename);
+ errno = serrno;
+ RETURNN(-1);
+ } else {
+ openpam_log(PAM_LOG_DEBUG, "found %s", filename);
+ }
+
+ /* verify type, ownership and permissions */
+ if (OPENPAM_FEATURE(VERIFY_POLICY_FILE) &&
+ openpam_check_desc_owner_perms(filename, fileno(f)) != 0) {
+ /* already logged the cause */
+ serrno = errno;
+ fclose(f);
+ errno = serrno;
+ RETURNN(-1);
+ }
+
+ /* parse the file */
+ ret = openpam_parse_chain(pamh, service, facility,
+ f, filename, style);
+ RETURNN(ret);
+}
+
+/*
* Locates the policy file for a given service and reads the given chains
* from it.
+ *
+ * Returns the number of policy entries which were found for the specified
+ * service and facility, or -1 if a system error occurred or a syntax
+ * error was encountered.
*/
static int
openpam_load_chain(pam_handle_t *pamh,
const char *service,
pam_facility_t facility)
{
- const char **path;
- char *filename;
+ const char *p, **path;
+ char filename[PATH_MAX];
size_t len;
+ openpam_style_t style;
int ret;
- /* don't allow to escape from policy_path */
- if (strchr(service, '/')) {
- openpam_log(PAM_LOG_ERROR, "invalid service name: %s",
- service);
- return (-PAM_SYSTEM_ERR);
+ ENTERS(facility < 0 ? "any" : pam_facility_name[facility]);
+
+ /* either absolute or relative to cwd */
+ if (strchr(service, '/') != NULL) {
+ if ((p = strrchr(service, '.')) != NULL && strcmp(p, ".conf") == 0)
+ style = pam_conf_style;
+ else
+ style = pam_d_style;
+ ret = openpam_load_file(pamh, service, facility,
+ service, style);
+ RETURNN(ret);
}
+ /* search standard locations */
for (path = openpam_policy_path; *path != NULL; ++path) {
- len = strlen(*path);
- if ((*path)[len - 1] == '/') {
- if (asprintf(&filename, "%s%s", *path, service) < 0) {
- openpam_log(PAM_LOG_ERROR, "asprintf(): %m");
- return (PAM_BUF_ERR);
+ /* construct filename */
+ len = strlcpy(filename, *path, sizeof filename);
+ if (filename[len - 1] == '/') {
+ len = strlcat(filename, service, sizeof filename);
+ if (len >= sizeof filename) {
+ errno = ENAMETOOLONG;
+ RETURNN(-1);
}
- ret = openpam_parse_chain(pamh, service, facility,
- filename, pam_d_style);
- FREE(filename);
+ style = pam_d_style;
} else {
- ret = openpam_parse_chain(pamh, service, facility,
- *path, pam_conf_style);
+ style = pam_conf_style;
}
- if (ret != PAM_SUCCESS)
- return (ret);
+ ret = openpam_load_file(pamh, service, facility,
+ filename, style);
+ /* the file exists, but an error occurred */
+ if (ret == -1 && errno != ENOENT)
+ RETURNN(ret);
+ /* in pam.d style, an empty file counts as a hit */
+ if (ret == 0 && style == pam_d_style)
+ RETURNN(ret);
}
- return (PAM_SUCCESS);
+
+ /* no hit */
+ RETURNN(0);
}
/*
@@ -567,25 +434,27 @@ openpam_configure(pam_handle_t *pamh,
const char *service)
{
pam_facility_t fclt;
- const char *p;
+ int serrno;
- for (p = service; *p; ++p)
- if (!is_pfcs(*p))
- return (PAM_SYSTEM_ERR);
-
- if (openpam_load_chain(pamh, service, PAM_FACILITY_ANY) != PAM_SUCCESS)
+ ENTERS(service);
+ if (!valid_service_name(service)) {
+ openpam_log(PAM_LOG_ERROR, "invalid service name");
+ RETURNC(PAM_SYSTEM_ERR);
+ }
+ if (openpam_load_chain(pamh, service, PAM_FACILITY_ANY) < 0)
goto load_err;
-
for (fclt = 0; fclt < PAM_NUM_FACILITIES; ++fclt) {
if (pamh->chains[fclt] != NULL)
continue;
- if (openpam_load_chain(pamh, PAM_OTHER, fclt) != PAM_SUCCESS)
+ if (openpam_load_chain(pamh, PAM_OTHER, fclt) < 0)
goto load_err;
}
- return (PAM_SUCCESS);
+ RETURNC(PAM_SUCCESS);
load_err:
+ serrno = errno;
openpam_clear_chains(pamh->chains);
- return (PAM_SYSTEM_ERR);
+ errno = serrno;
+ RETURNC(PAM_SYSTEM_ERR);
}
/*
diff --git a/contrib/openpam/lib/openpam_constants.h b/contrib/openpam/lib/openpam_constants.h
index b92317938c1d..a7d6ce8dd7d7 100644
--- a/contrib/openpam/lib/openpam_constants.h
+++ b/contrib/openpam/lib/openpam_constants.h
@@ -11,6 +11,9 @@
* 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 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
@@ -24,11 +27,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_constants.h 491 2011-11-12 00:12:32Z des $
+ * $Id: openpam_constants.h 606 2012-04-20 11:06:38Z des $
*/
-#ifndef OPENPAM_CONSTANTS_INCLUDED
-#define OPENPAM_CONSTANTS_INCLUDED
+#ifndef OPENPAM_CONSTANTS_H_INCLUDED
+#define OPENPAM_CONSTANTS_H_INCLUDED
extern const char *pam_err_name[PAM_NUM_ERRORS];
extern const char *pam_item_name[PAM_NUM_ITEMS];
diff --git a/contrib/openpam/lib/openpam_ctype.h b/contrib/openpam/lib/openpam_ctype.h
new file mode 100644
index 000000000000..b3ec84689970
--- /dev/null
+++ b/contrib/openpam/lib/openpam_ctype.h
@@ -0,0 +1,68 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: openpam_ctype.h 578 2012-04-06 00:45:59Z des $
+ */
+
+#ifndef OPENPAM_CTYPE_H_INCLUDED
+#define OPENPAM_CTYPE_H_INCLUDED
+
+/*
+ * Evaluates to non-zero if the argument is a linear whitespace character.
+ * For the purposes of this macro, the definition of linear whitespace is
+ * extended to include the form feed and carraige return characters.
+ */
+#define is_lws(ch) \
+ (ch == ' ' || ch == '\t' || ch == '\f' || ch == '\r')
+
+/*
+ * Evaluates to non-zero if the argument is a whitespace character.
+ */
+#define is_ws(ch) \
+ (is_lws(ch) || ch == '\n')
+
+/*
+ * Evaluates to non-zero if the argument is a printable ASCII character.
+ * Assumes that the execution character set is a superset of ASCII.
+ */
+#define is_p(ch) \
+ (ch >= '!' && ch <= '~')
+
+/*
+ * Returns non-zero if the argument belongs to the POSIX Portable Filename
+ * Character Set. Assumes that the execution character set is a superset
+ * of ASCII.
+ */
+#define is_pfcs(ch) \
+ ((ch >= '0' && ch <= '9') || \
+ (ch >= 'A' && ch <= 'Z') || \
+ (ch >= 'a' && ch <= 'z') || \
+ ch == '.' || ch == '_' || ch == '-')
+
+#endif
diff --git a/contrib/openpam/lib/openpam_debug.h b/contrib/openpam/lib/openpam_debug.h
index ef2884d68255..050783e49369 100644
--- a/contrib/openpam/lib/openpam_debug.h
+++ b/contrib/openpam/lib/openpam_debug.h
@@ -32,60 +32,68 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_debug.h 491 2011-11-12 00:12:32Z des $
+ * $Id: openpam_debug.h 606 2012-04-20 11:06:38Z des $
*/
-#ifndef OPENPAM_DEBUG_INCLUDED
-#define OPENPAM_DEBUG_INCLUDED
+#ifndef OPENPAM_DEBUG_H_INCLUDED
+#define OPENPAM_DEBUG_H_INCLUDED
#ifdef OPENPAM_DEBUG
-#define ENTER() openpam_log(PAM_LOG_DEBUG, "entering")
+#define ENTER() openpam_log(PAM_LOG_LIBDEBUG, "entering")
#define ENTERI(i) do { \
int i_ = (i); \
if (i_ > 0 && i_ < PAM_NUM_ITEMS) \
- openpam_log(PAM_LOG_DEBUG, "entering: %s", pam_item_name[i_]); \
+ openpam_log(PAM_LOG_LIBDEBUG, "entering: %s", pam_item_name[i_]); \
else \
- openpam_log(PAM_LOG_DEBUG, "entering: %d", i_); \
+ openpam_log(PAM_LOG_LIBDEBUG, "entering: %d", i_); \
} while (0)
#define ENTERN(n) do { \
int n_ = (n); \
- openpam_log(PAM_LOG_DEBUG, "entering: %d", n_); \
+ openpam_log(PAM_LOG_LIBDEBUG, "entering: %d", n_); \
} while (0)
#define ENTERS(s) do { \
const char *s_ = (s); \
if (s_ == NULL) \
- openpam_log(PAM_LOG_DEBUG, "entering: NULL"); \
+ openpam_log(PAM_LOG_LIBDEBUG, "entering: NULL"); \
else \
- openpam_log(PAM_LOG_DEBUG, "entering: '%s'", s_); \
+ openpam_log(PAM_LOG_LIBDEBUG, "entering: '%s'", s_); \
} while (0)
-#define RETURNV() openpam_log(PAM_LOG_DEBUG, "returning")
+#define ENTERF(f) do { \
+ int f_ = (f); \
+ if (f_ >= 0 && f_ <= OPENPAM_NUM_FEATURES) \
+ openpam_log(PAM_LOG_LIBDEBUG, "entering: %s", \
+ openpam_features[f_].name); \
+ else \
+ openpam_log(PAM_LOG_LIBDEBUG, "entering: %d", f_); \
+} while (0)
+#define RETURNV() openpam_log(PAM_LOG_LIBDEBUG, "returning")
#define RETURNC(c) do { \
int c_ = (c); \
if (c_ >= 0 && c_ < PAM_NUM_ERRORS) \
- openpam_log(PAM_LOG_DEBUG, "returning %s", pam_err_name[c_]); \
+ openpam_log(PAM_LOG_LIBDEBUG, "returning %s", pam_err_name[c_]); \
else \
- openpam_log(PAM_LOG_DEBUG, "returning %d!", c_); \
+ openpam_log(PAM_LOG_LIBDEBUG, "returning %d!", c_); \
return (c_); \
} while (0)
#define RETURNN(n) do { \
int n_ = (n); \
- openpam_log(PAM_LOG_DEBUG, "returning %d", n_); \
+ openpam_log(PAM_LOG_LIBDEBUG, "returning %d", n_); \
return (n_); \
} while (0)
#define RETURNP(p) do { \
- const void *p_ = (p); \
+ void *p_ = (p); \
if (p_ == NULL) \
- openpam_log(PAM_LOG_DEBUG, "returning NULL"); \
+ openpam_log(PAM_LOG_LIBDEBUG, "returning NULL"); \
else \
- openpam_log(PAM_LOG_DEBUG, "returning %p", p_); \
+ openpam_log(PAM_LOG_LIBDEBUG, "returning %p", p_); \
return (p_); \
} while (0)
#define RETURNS(s) do { \
const char *s_ = (s); \
if (s_ == NULL) \
- openpam_log(PAM_LOG_DEBUG, "returning NULL"); \
+ openpam_log(PAM_LOG_LIBDEBUG, "returning NULL"); \
else \
- openpam_log(PAM_LOG_DEBUG, "returning '%s'", s_); \
+ openpam_log(PAM_LOG_LIBDEBUG, "returning '%s'", s_); \
return (s_); \
} while (0)
#else
@@ -93,6 +101,7 @@
#define ENTERI(i)
#define ENTERN(n)
#define ENTERS(s)
+#define ENTERF(f)
#define RETURNV() return
#define RETURNC(c) return (c)
#define RETURNN(n) return (n)
diff --git a/contrib/openpam/lib/openpam_dynamic.c b/contrib/openpam/lib/openpam_dynamic.c
index d44174fbe8e8..1dfc1ac43eb8 100644
--- a/contrib/openpam/lib/openpam_dynamic.c
+++ b/contrib/openpam/lib/openpam_dynamic.c
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_dynamic.c 502 2011-12-18 13:59:22Z des $
+ * $Id: openpam_dynamic.c 607 2012-04-20 11:09:37Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -40,6 +40,7 @@
#endif
#include <dlfcn.h>
+#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
@@ -60,15 +61,50 @@
* Perform sanity checks and attempt to load a module
*/
+#ifdef HAVE_FDLOPEN
static void *
try_dlopen(const char *modfn)
{
+ void *dlh;
+ int fd;
- if (openpam_check_path_owner_perms(modfn) != 0)
+ if ((fd = open(modfn, O_RDONLY)) < 0)
+ return (NULL);
+ if (OPENPAM_FEATURE(VERIFY_MODULE_FILE) &&
+ openpam_check_desc_owner_perms(modfn, fd) != 0) {
+ close(fd);
+ return (NULL);
+ }
+ if ((dlh = fdlopen(fd, RTLD_NOW)) == NULL) {
+ openpam_log(PAM_LOG_ERROR, "%s: %s", modfn, dlerror());
+ close(fd);
+ errno = 0;
+ return (NULL);
+ }
+ close(fd);
+ return (dlh);
+}
+#else
+static void *
+try_dlopen(const char *modfn)
+{
+ int check_module_file;
+ void *dlh;
+
+ openpam_get_feature(OPENPAM_VERIFY_MODULE_FILE,
+ &check_module_file);
+ if (check_module_file &&
+ openpam_check_path_owner_perms(modfn) != 0)
+ return (NULL);
+ if ((dlh = dlopen(modfn, RTLD_NOW)) == NULL) {
+ openpam_log(PAM_LOG_ERROR, "%s: %s", modfn, dlerror());
+ errno = 0;
return (NULL);
- return (dlopen(modfn, RTLD_NOW));
+ }
+ return (dlh);
}
-
+#endif
+
/*
* OpenPAM internal
*
@@ -100,9 +136,6 @@ openpam_dynamic(const char *path)
*strrchr(vpath, '.') = '\0';
dlh = try_dlopen(vpath);
}
- serrno = errno;
- FREE(vpath);
- errno = serrno;
if (dlh == NULL)
goto err;
if ((module = calloc(1, sizeof *module)) == NULL)
@@ -112,19 +145,41 @@ openpam_dynamic(const char *path)
module->dlh = dlh;
dlmodule = dlsym(dlh, "_pam_module");
for (i = 0; i < PAM_NUM_PRIMITIVES; ++i) {
- module->func[i] = dlmodule ? dlmodule->func[i] :
- (pam_func_t)dlsym(dlh, pam_sm_func_name[i]);
- if (module->func[i] == NULL)
- openpam_log(PAM_LOG_DEBUG, "%s: %s(): %s",
- path, pam_sm_func_name[i], dlerror());
+ if (dlmodule) {
+ module->func[i] = dlmodule->func[i];
+ } else {
+ module->func[i] =
+ (pam_func_t)dlsym(dlh, pam_sm_func_name[i]);
+ /*
+ * This openpam_log() call is a major source of
+ * log spam, and the cases that matter are caught
+ * and logged in openpam_dispatch(). This would
+ * be less problematic if dlerror() returned an
+ * error code so we could log an error only when
+ * dlsym() failed for a reason other than "no such
+ * symbol".
+ */
+#if 0
+ if (module->func[i] == NULL)
+ openpam_log(PAM_LOG_DEBUG, "%s: %s(): %s",
+ path, pam_sm_func_name[i], dlerror());
+#endif
+ }
}
+ FREE(vpath);
return (module);
buf_err:
+ serrno = errno;
if (dlh != NULL)
dlclose(dlh);
FREE(module);
+ errno = serrno;
err:
- openpam_log(PAM_LOG_ERROR, "%m");
+ serrno = errno;
+ if (errno != 0)
+ openpam_log(PAM_LOG_ERROR, "%s: %m", vpath);
+ FREE(vpath);
+ errno = serrno;
return (NULL);
}
diff --git a/contrib/openpam/lib/openpam_features.c b/contrib/openpam/lib/openpam_features.c
new file mode 100644
index 000000000000..586fc2a57305
--- /dev/null
+++ b/contrib/openpam/lib/openpam_features.c
@@ -0,0 +1,69 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: openpam_features.c 608 2012-05-17 16:00:13Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <security/pam_appl.h>
+
+#include "openpam_impl.h"
+
+#define STRUCT_OPENPAM_FEATURE(name, descr, dflt) \
+ [OPENPAM_##name] = { \
+ "OPENPAM_" #name, \
+ descr, \
+ dflt \
+ }
+
+struct openpam_feature openpam_features[OPENPAM_NUM_FEATURES] = {
+ STRUCT_OPENPAM_FEATURE(
+ RESTRICT_SERVICE_NAME,
+ "Disallow path separators in service names",
+ 1
+ ),
+ STRUCT_OPENPAM_FEATURE(
+ VERIFY_POLICY_FILE,
+ "Verify ownership and permissions of policy files",
+ 1
+ ),
+ STRUCT_OPENPAM_FEATURE(
+ RESTRICT_MODULE_NAME,
+ "Disallow path separators in module names",
+ 0
+ ),
+ STRUCT_OPENPAM_FEATURE(
+ VERIFY_MODULE_FILE,
+ "Verify ownership and permissions of module files",
+ 1
+ ),
+};
diff --git a/contrib/tcpdump/missing/resolv_ext.h b/contrib/openpam/lib/openpam_features.h
index 92c531d860cc..227b1a9f729c 100644
--- a/contrib/tcpdump/missing/resolv_ext.h
+++ b/contrib/openpam/lib/openpam_features.h
@@ -1,23 +1,24 @@
-/*
- * Copyright (C) 1999 WIDE Project.
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
* 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.
+ * notice, this list of conditions and the following disclaimer
+ * in this position and unchanged.
* 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 project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ * 3. 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 PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * 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 PROJECT OR CONTRIBUTORS BE LIABLE
+ * 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)
@@ -25,25 +26,23 @@
* 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.
+ *
+ * $Id$
*/
-#ifndef MAXRESOLVSORT /* XXX */
-#define MAXRESOLVSORT 10 /* number of net to sort on */
-#endif
+#ifndef OPENPAM_FEATURES_H_INCLUDED
+#define OPENPAM_FEATURES_H_INCLUDED
-#ifndef HAVE_RES_STATE_EXT
-struct __res_state_ext {
- struct sockaddr_storage nsaddr_list[MAXNS];
- struct {
- int af; /* address family for addr, mask */
- union {
- struct in_addr ina;
-#ifdef INET6
- struct in6_addr in6a;
-#endif
- } addr, mask;
- } sort_list[MAXRESOLVSORT];
+struct openpam_feature {
+ const char *name;
+ const char *desc;
+ int onoff;
};
-#endif
-extern struct __res_state_ext _res_ext;
+extern struct openpam_feature openpam_features[OPENPAM_NUM_FEATURES];
+
+/* shortcut for internal use */
+#define OPENPAM_FEATURE(f) \
+ openpam_features[OPENPAM_##f].onoff
+
+#endif
diff --git a/contrib/openpam/lib/openpam_get_feature.c b/contrib/openpam/lib/openpam_get_feature.c
new file mode 100644
index 000000000000..b552357c58d4
--- /dev/null
+++ b/contrib/openpam/lib/openpam_get_feature.c
@@ -0,0 +1,99 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: openpam_get_feature.c 608 2012-05-17 16:00:13Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <security/pam_appl.h>
+#include <security/openpam.h>
+
+#include "openpam_impl.h"
+
+/*
+ * OpenPAM extension
+ *
+ * Query the state of an optional feature.
+ */
+
+int
+openpam_get_feature(int feature, int *onoff)
+{
+
+ ENTERF(feature);
+ if (feature < 0 || feature >= OPENPAM_NUM_FEATURES)
+ RETURNC(PAM_SYMBOL_ERR);
+ *onoff = openpam_features[feature].onoff;
+ RETURNC(PAM_SUCCESS);
+}
+
+/*
+ * Error codes:
+ *
+ * PAM_SYMBOL_ERR
+ */
+
+/**
+ * EXPERIMENTAL
+ *
+ * The =openpam_get_feature function stores the current state of the
+ * specified feature in the variable pointed to by its =onoff argument.
+ *
+ * The following features are recognized:
+ *
+ * =OPENPAM_RESTRICT_SERVICE_NAME:
+ * Disallow path separators in service names.
+ * This feature is enabled by default.
+ * Disabling it allows the application to specify the path to
+ * the desired policy file directly.
+ *
+ * =OPENPAM_VERIFY_POLICY_FILE:
+ * Verify the ownership and permissions of the policy file
+ * and the path leading up to it.
+ * This feature is enabled by default.
+ *
+ * =OPENPAM_RESTRICT_MODULE_NAME:
+ * Disallow path separators in module names.
+ * This feature is disabled by default.
+ * Enabling it prevents the use of modules in non-standard
+ * locations.
+ *
+ * =OPENPAM_VERIFY_MODULE_FILE:
+ * Verify the ownership and permissions of each loadable
+ * module and the path leading up to it.
+ * This feature is enabled by default.
+ *
+ *
+ * >openpam_set_feature
+ *
+ * AUTHOR DES
+ */
diff --git a/contrib/openpam/lib/openpam_get_option.c b/contrib/openpam/lib/openpam_get_option.c
index b5faa878fd46..1f62d218ebfc 100644
--- a/contrib/openpam/lib/openpam_get_option.c
+++ b/contrib/openpam/lib/openpam_get_option.c
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_get_option.c 482 2011-11-03 16:33:02Z des $
+ * $Id: openpam_get_option.c 531 2012-03-31 14:24:37Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -44,7 +44,6 @@
#include <string.h>
#include <security/pam_appl.h>
-#include <security/openpam.h>
#include "openpam_impl.h"
diff --git a/contrib/openpam/lib/openpam_impl.h b/contrib/openpam/lib/openpam_impl.h
index ba4d45558a96..9e8b45f6d55c 100644
--- a/contrib/openpam/lib/openpam_impl.h
+++ b/contrib/openpam/lib/openpam_impl.h
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_impl.h 499 2011-11-22 11:51:50Z des $
+ * $Id: openpam_impl.h 594 2012-04-14 14:18:41Z des $
*/
#ifndef OPENPAM_IMPL_H_INCLUDED
@@ -157,9 +157,23 @@ pam_module_t *openpam_static(const char *);
#endif
pam_module_t *openpam_dynamic(const char *);
-#define FREE(p) do { free((p)); (p) = NULL; } while (0)
+#define FREE(p) \
+ do { \
+ free(p); \
+ (p) = NULL; \
+ } while (0)
+
+#define FREEV(c, v) \
+ do { \
+ while (c) { \
+ --(c); \
+ FREE((v)[(c)]); \
+ } \
+ FREE(v); \
+ } while (0)
#include "openpam_constants.h"
#include "openpam_debug.h"
+#include "openpam_features.h"
#endif
diff --git a/contrib/openpam/lib/openpam_load.c b/contrib/openpam/lib/openpam_load.c
index 0eb8ea7d9c29..871d1a8c057c 100644
--- a/contrib/openpam/lib/openpam_load.c
+++ b/contrib/openpam/lib/openpam_load.c
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_load.c 491 2011-11-12 00:12:32Z des $
+ * $Id: openpam_load.c 547 2012-04-01 15:01:21Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -108,9 +108,7 @@ openpam_destroy_chain(pam_chain_t *chain)
return;
openpam_destroy_chain(chain->next);
chain->next = NULL;
- while (chain->optc--)
- FREE(chain->optv[chain->optc]);
- FREE(chain->optv);
+ FREEV(chain->optc, chain->optv);
openpam_release_module(chain->module);
chain->module = NULL;
FREE(chain);
diff --git a/contrib/openpam/lib/openpam_log.c b/contrib/openpam/lib/openpam_log.c
index 9e3d28b5b42d..2b89f6c6d7d1 100644
--- a/contrib/openpam/lib/openpam_log.c
+++ b/contrib/openpam/lib/openpam_log.c
@@ -32,18 +32,17 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_log.c 437 2011-09-13 12:00:13Z des $
+ * $Id: openpam_log.c 544 2012-03-31 22:47:15Z des $
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include <ctype.h>
+#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
-#include <string.h>
#include <syslog.h>
#include <security/pam_appl.h>
@@ -71,6 +70,7 @@ openpam_log(int level, const char *fmt, ...)
int priority;
switch (level) {
+ case PAM_LOG_LIBDEBUG:
case PAM_LOG_DEBUG:
if (!openpam_debug)
return;
@@ -100,8 +100,10 @@ _openpam_log(int level, const char *func, const char *fmt, ...)
va_list ap;
char *format;
int priority;
+ int serrno;
switch (level) {
+ case PAM_LOG_LIBDEBUG:
case PAM_LOG_DEBUG:
if (!openpam_debug)
return;
@@ -119,10 +121,13 @@ _openpam_log(int level, const char *func, const char *fmt, ...)
break;
}
va_start(ap, fmt);
+ serrno = errno;
if (asprintf(&format, "in %s(): %s", func, fmt) > 0) {
+ errno = serrno;
vsyslog(priority, format, ap);
FREE(format);
} else {
+ errno = serrno;
vsyslog(priority, fmt, ap);
}
va_end(ap);
@@ -137,6 +142,9 @@ _openpam_log(int level, const char *func, const char *fmt, ...)
* The =level argument indicates the importance of the message.
* The following levels are defined:
*
+ * =PAM_LOG_LIBDEBUG:
+ * Debugging messages.
+ * For internal use only.
* =PAM_LOG_DEBUG:
* Debugging messages.
* These messages are normally not logged unless the global
diff --git a/contrib/openpam/lib/openpam_readline.c b/contrib/openpam/lib/openpam_readline.c
index 9cc8cc107c45..014acfb2c1cf 100644
--- a/contrib/openpam/lib/openpam_readline.c
+++ b/contrib/openpam/lib/openpam_readline.c
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_readline.c 473 2011-11-03 10:48:25Z des $
+ * $Id: openpam_readline.c 596 2012-04-14 14:52:40Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -44,6 +44,7 @@
#include <stdlib.h>
#include <security/pam_appl.h>
+
#include "openpam_impl.h"
#define MIN_LINE_LENGTH 128
@@ -61,22 +62,11 @@ openpam_readline(FILE *f, int *lineno, size_t *lenp)
size_t len, size;
int ch;
- if ((line = malloc(MIN_LINE_LENGTH)) == NULL)
+ if ((line = malloc(size = MIN_LINE_LENGTH)) == NULL) {
+ openpam_log(PAM_LOG_ERROR, "malloc(): %m");
return (NULL);
- size = MIN_LINE_LENGTH;
+ }
len = 0;
-
-#define line_putch(ch) do { \
- if (len >= size - 1) { \
- char *tmp = realloc(line, size *= 2); \
- if (tmp == NULL) \
- goto fail; \
- line = tmp; \
- } \
- line[len++] = ch; \
- line[len] = '\0'; \
-} while (0)
-
for (;;) {
ch = fgetc(f);
/* strip comment */
@@ -105,26 +95,15 @@ openpam_readline(FILE *f, int *lineno, size_t *lenp)
/* done */
break;
}
- /* whitespace */
- if (isspace(ch)) {
- /* ignore leading whitespace */
- /* collapse linear whitespace */
- if (len > 0 && line[len - 1] != ' ')
- line_putch(' ');
- continue;
- }
/* anything else */
- line_putch(ch);
+ if (openpam_straddch(&line, &size, &len, ch) != 0)
+ goto fail;
}
-
- /* remove trailing whitespace */
- while (len > 0 && isspace((unsigned char)line[len - 1]))
- --len;
- line[len] = '\0';
if (len == 0)
goto fail;
if (lenp != NULL)
*lenp = len;
+ openpam_log(PAM_LOG_LIBDEBUG, "returning '%s'", line);
return (line);
fail:
FREE(line);
@@ -132,16 +111,18 @@ fail:
}
/**
+ * DEPRECATED openpam_readlinev
+ *
* The =openpam_readline function reads a line from a file, and returns it
- * in a NUL-terminated buffer allocated with =malloc.
+ * in a NUL-terminated buffer allocated with =!malloc.
*
* The =openpam_readline function performs a certain amount of processing
* on the data it reads:
*
- * - Comments (introduced by a hash sign) are stripped, as is leading and
- * trailing whitespace.
- * - Any amount of linear whitespace is collapsed to a single space.
+ * - Comments (introduced by a hash sign) are stripped.
+ *
* - Blank lines are ignored.
+ *
* - If a line ends in a backslash, the backslash is stripped and the
* next line is appended.
*
@@ -152,5 +133,8 @@ fail:
* terminating NUL character) is stored in the variable it points to.
*
* The caller is responsible for releasing the returned buffer by passing
- * it to =free.
+ * it to =!free.
+ *
+ * >openpam_readlinev
+ * >openpam_readword
*/
diff --git a/contrib/openpam/lib/openpam_readlinev.c b/contrib/openpam/lib/openpam_readlinev.c
new file mode 100644
index 000000000000..5a43b61f36f2
--- /dev/null
+++ b/contrib/openpam/lib/openpam_readlinev.c
@@ -0,0 +1,156 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: openpam_readlinev.c 588 2012-04-08 11:52:25Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <security/pam_appl.h>
+
+#include "openpam_impl.h"
+
+#define MIN_WORDV_SIZE 32
+
+/*
+ * OpenPAM extension
+ *
+ * Read a line from a file and split it into words.
+ */
+
+char **
+openpam_readlinev(FILE *f, int *lineno, int *lenp)
+{
+ char *word, **wordv, **tmp;
+ size_t wordlen, wordvsize;
+ int ch, serrno, wordvlen;
+
+ wordvsize = MIN_WORDV_SIZE;
+ wordvlen = 0;
+ if ((wordv = malloc(wordvsize * sizeof *wordv)) == NULL) {
+ openpam_log(PAM_LOG_ERROR, "malloc(): %m");
+ errno = ENOMEM;
+ return (NULL);
+ }
+ wordv[wordvlen] = NULL;
+ while ((word = openpam_readword(f, lineno, &wordlen)) != NULL) {
+ if ((unsigned int)wordvlen + 1 >= wordvsize) {
+ /* need to expand the array */
+ wordvsize *= 2;
+ tmp = realloc(wordv, wordvsize * sizeof *wordv);
+ if (tmp == NULL) {
+ openpam_log(PAM_LOG_ERROR, "malloc(): %m");
+ errno = ENOMEM;
+ break;
+ }
+ wordv = tmp;
+ }
+ /* insert our word */
+ wordv[wordvlen++] = word;
+ wordv[wordvlen] = NULL;
+ }
+ if (errno != 0) {
+ /* I/O error or out of memory */
+ serrno = errno;
+ while (wordvlen--)
+ free(wordv[wordvlen]);
+ free(wordv);
+ errno = serrno;
+ return (NULL);
+ }
+ /* assert(!ferror(f)) */
+ ch = fgetc(f);
+ /* assert(ch == EOF || ch == '\n') */
+ if (ch == EOF && wordvlen == 0) {
+ free(wordv);
+ return (NULL);
+ }
+ if (ch == '\n' && lineno != NULL)
+ ++*lineno;
+ if (lenp != NULL)
+ *lenp = wordvlen;
+ return (wordv);
+}
+
+/**
+ * The =openpam_readlinev function reads a line from a file, splits it
+ * into words according to the rules described in the =openpam_readword
+ * manual page, and returns a list of those words.
+ *
+ * If =lineno is not =NULL, the integer variable it points to is
+ * incremented every time a newline character is read.
+ * This includes quoted or escaped newline characters and the newline
+ * character at the end of the line.
+ *
+ * If =lenp is not =NULL, the number of words on the line is stored in the
+ * variable to which it points.
+ *
+ * RETURN VALUES
+ *
+ * If successful, the =openpam_readlinev function returns a pointer to a
+ * dynamically allocated array of pointers to individual dynamically
+ * allocated NUL-terminated strings, each containing a single word, in the
+ * order in which they were encountered on the line.
+ * The array is terminated by a =NULL pointer.
+ *
+ * The caller is responsible for freeing both the array and the individual
+ * strings by passing each of them to =!free.
+ *
+ * If the end of the line was reached before any words were read,
+ * =openpam_readlinev returns a pointer to a dynamically allocated array
+ * containing a single =NULL pointer.
+ *
+ * The =openpam_readlinev function can fail and return =NULL for one of
+ * four reasons:
+ *
+ * - The end of the file was reached before any words were read; :errno is
+ * zero, =!ferror returns zero, and =!feof returns a non-zero value.
+ *
+ * - The end of the file was reached while a quote or backslash escape
+ * was in effect; :errno is set to =EINVAL, =!ferror returns zero, and
+ * =!feof returns a non-zero value.
+ *
+ * - An error occurred while reading from the file; :errno is non-zero,
+ * =!ferror returns a non-zero value and =!feof returns zero.
+ *
+ * - A =!malloc or =!realloc call failed; :errno is set to =ENOMEM,
+ * =!ferror returns a non-zero value, and =!feof may or may not return
+ * a non-zero value.
+ *
+ * >openpam_readline
+ * >openpam_readword
+ *
+ * AUTHOR DES
+ */
diff --git a/contrib/openpam/lib/openpam_readword.c b/contrib/openpam/lib/openpam_readword.c
new file mode 100644
index 000000000000..74a4d462ce44
--- /dev/null
+++ b/contrib/openpam/lib/openpam_readword.c
@@ -0,0 +1,207 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: openpam_readword.c 588 2012-04-08 11:52:25Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <security/pam_appl.h>
+
+#include "openpam_impl.h"
+#include "openpam_ctype.h"
+
+#define MIN_WORD_SIZE 32
+
+/*
+ * OpenPAM extension
+ *
+ * Read a word from a file, respecting shell quoting rules.
+ */
+
+char *
+openpam_readword(FILE *f, int *lineno, size_t *lenp)
+{
+ char *word;
+ size_t size, len;
+ int ch, comment, escape, quote;
+ int serrno;
+
+ errno = 0;
+
+ /* skip initial whitespace */
+ comment = 0;
+ while ((ch = getc(f)) != EOF && ch != '\n') {
+ if (ch == '#')
+ comment = 1;
+ if (!is_lws(ch) && !comment)
+ break;
+ }
+ if (ch == EOF)
+ return (NULL);
+ ungetc(ch, f);
+ if (ch == '\n')
+ return (NULL);
+
+ word = NULL;
+ size = len = 0;
+ escape = quote = 0;
+ while ((ch = fgetc(f)) != EOF && (!is_ws(ch) || quote || escape)) {
+ if (ch == '\\' && !escape && quote != '\'') {
+ /* escape next character */
+ escape = ch;
+ } else if ((ch == '\'' || ch == '"') && !quote && !escape) {
+ /* begin quote */
+ quote = ch;
+ /* edge case: empty quoted string */
+ if (word == NULL && (word = malloc(1)) == NULL) {
+ openpam_log(PAM_LOG_ERROR, "malloc(): %m");
+ errno = ENOMEM;
+ return (NULL);
+ }
+ *word = '\0';
+ size = 1;
+ } else if (ch == quote && !escape) {
+ /* end quote */
+ quote = 0;
+ } else if (ch == '\n' && escape && quote != '\'') {
+ /* line continuation */
+ escape = 0;
+ } else {
+ if (escape && quote && ch != '\\' && ch != quote &&
+ openpam_straddch(&word, &size, &len, '\\') != 0) {
+ free(word);
+ errno = ENOMEM;
+ return (NULL);
+ }
+ if (openpam_straddch(&word, &size, &len, ch) != 0) {
+ free(word);
+ errno = ENOMEM;
+ return (NULL);
+ }
+ escape = 0;
+ }
+ if (lineno != NULL && ch == '\n')
+ ++*lineno;
+ }
+ if (ch == EOF && ferror(f)) {
+ serrno = errno;
+ free(word);
+ errno = serrno;
+ return (NULL);
+ }
+ if (ch == EOF && (escape || quote)) {
+ /* Missing escaped character or closing quote. */
+ openpam_log(PAM_LOG_ERROR, "unexpected end of file");
+ free(word);
+ errno = EINVAL;
+ return (NULL);
+ }
+ ungetc(ch, f);
+ if (lenp != NULL)
+ *lenp = len;
+ return (word);
+}
+
+/**
+ * The =openpam_readword function reads the next word from a file, and
+ * returns it in a NUL-terminated buffer allocated with =!malloc.
+ *
+ * A word is a sequence of non-whitespace characters.
+ * However, whitespace characters can be included in a word if quoted or
+ * escaped according to the following rules:
+ *
+ * - An unescaped single or double quote introduces a quoted string,
+ * which ends when the same quote character is encountered a second
+ * time.
+ * The quotes themselves are stripped.
+ *
+ * - Within a single- or double-quoted string, all whitespace characters,
+ * including the newline character, are preserved as-is.
+ *
+ * - Outside a quoted string, a backslash escapes the next character,
+ * which is preserved as-is, unless that character is a newline, in
+ * which case it is discarded and reading continues at the beginning of
+ * the next line as if the backslash and newline had not been there.
+ * In all cases, the backslash itself is discarded.
+ *
+ * - Within a single-quoted string, double quotes and backslashes are
+ * preserved as-is.
+ *
+ * - Within a double-quoted string, a single quote is preserved as-is,
+ * and a backslash is preserved as-is unless used to escape a double
+ * quote.
+ *
+ * In addition, if the first non-whitespace character on the line is a
+ * hash character (#), the rest of the line is discarded.
+ * If a hash character occurs within a word, however, it is preserved
+ * as-is.
+ * A backslash at the end of a comment does cause line continuation.
+ *
+ * If =lineno is not =NULL, the integer variable it points to is
+ * incremented every time a quoted or escaped newline character is read.
+ *
+ * If =lenp is not =NULL, the length of the word (after quotes and
+ * backslashes have been removed) is stored in the variable it points to.
+ *
+ * RETURN VALUES
+ *
+ * If successful, the =openpam_readword function returns a pointer to a
+ * dynamically allocated NUL-terminated string containing the first word
+ * encountered on the line.
+ *
+ * The caller is responsible for releasing the returned buffer by passing
+ * it to =!free.
+ *
+ * If =openpam_readword reaches the end of the line or file before any
+ * characters are copied to the word, it returns =NULL. In the former
+ * case, the newline is pushed back to the file.
+ *
+ * If =openpam_readword reaches the end of the file while a quote or
+ * backslash escape is in effect, it sets :errno to =EINVAL and returns
+ * =NULL.
+ *
+ * IMPLEMENTATION NOTES
+ *
+ * The parsing rules are intended to be equivalent to the normal POSIX
+ * shell quoting rules.
+ * Any discrepancy is a bug and should be reported to the author along
+ * with sample input that can be used to reproduce the error.
+ *
+ * >openpam_readline
+ * >openpam_readlinev
+ *
+ * AUTHOR DES
+ */
diff --git a/contrib/openpam/lib/openpam_set_feature.c b/contrib/openpam/lib/openpam_set_feature.c
new file mode 100644
index 000000000000..4f6a4a5c92c7
--- /dev/null
+++ b/contrib/openpam/lib/openpam_set_feature.c
@@ -0,0 +1,75 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: openpam_set_feature.c 608 2012-05-17 16:00:13Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <security/pam_appl.h>
+#include <security/openpam.h>
+
+#include "openpam_impl.h"
+
+/*
+ * OpenPAM extension
+ *
+ * Enable or disable an optional feature.
+ */
+
+int
+openpam_set_feature(int feature, int onoff)
+{
+
+ ENTERF(feature);
+ if (feature < 0 || feature >= OPENPAM_NUM_FEATURES)
+ RETURNC(PAM_SYMBOL_ERR);
+ openpam_features[feature].onoff = onoff;
+ RETURNC(PAM_SUCCESS);
+}
+
+/*
+ * Error codes:
+ *
+ * PAM_SYMBOL_ERR
+ */
+
+/**
+ * EXPERIMENTAL
+ *
+ * The =openpam_set_feature function sets the state of the specified
+ * feature to the value specified by the =onoff argument.
+ * See =openpam_get_feature for a list of recognized features.
+ *
+ * >openpam_get_feature
+ *
+ * AUTHOR DES
+ */
diff --git a/contrib/openpam/lib/openpam_set_option.c b/contrib/openpam/lib/openpam_set_option.c
index c7cb1c7c416d..1712a718ec4c 100644
--- a/contrib/openpam/lib/openpam_set_option.c
+++ b/contrib/openpam/lib/openpam_set_option.c
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_set_option.c 482 2011-11-03 16:33:02Z des $
+ * $Id: openpam_set_option.c 532 2012-03-31 14:24:53Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -46,7 +46,6 @@
#include <string.h>
#include <security/pam_appl.h>
-#include <security/openpam.h>
#include "openpam_impl.h"
diff --git a/contrib/openpam/lib/openpam_straddch.c b/contrib/openpam/lib/openpam_straddch.c
new file mode 100644
index 000000000000..9845cc610a93
--- /dev/null
+++ b/contrib/openpam/lib/openpam_straddch.c
@@ -0,0 +1,111 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: openpam_straddch.c 568 2012-04-05 14:35:53Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <errno.h>
+#include <stdlib.h>
+
+#include <security/pam_appl.h>
+
+#include "openpam_impl.h"
+
+#define MIN_STR_SIZE 32
+
+/*
+ * OpenPAM extension
+ *
+ * Add a character to a string, expanding the buffer if needed.
+ */
+
+int
+openpam_straddch(char **str, size_t *size, size_t *len, int ch)
+{
+ size_t tmpsize;
+ char *tmpstr;
+
+ if (*str == NULL) {
+ /* initial allocation */
+ tmpsize = MIN_STR_SIZE;
+ if ((tmpstr = malloc(tmpsize)) == NULL) {
+ openpam_log(PAM_LOG_ERROR, "malloc(): %m");
+ errno = ENOMEM;
+ return (-1);
+ }
+ *str = tmpstr;
+ *size = tmpsize;
+ *len = 0;
+ } else if (*len + 1 >= *size) {
+ /* additional space required */
+ tmpsize = *size * 2;
+ if ((tmpstr = realloc(*str, tmpsize)) == NULL) {
+ openpam_log(PAM_LOG_ERROR, "realloc(): %m");
+ errno = ENOMEM;
+ return (-1);
+ }
+ *size = tmpsize;
+ *str = tmpstr;
+ }
+ (*str)[*len] = ch;
+ ++*len;
+ (*str)[*len] = '\0';
+ return (0);
+}
+
+/**
+ * The =openpam_straddch function appends a character to a dynamically
+ * allocated NUL-terminated buffer, reallocating the buffer as needed.
+ *
+ * The =str argument points to a variable containing either a pointer to
+ * an existing buffer or =NULL.
+ * If the value of the variable pointed to by =str is =NULL, a new buffer
+ * is allocated.
+ *
+ * The =size and =len argument point to variables used to hold the size
+ * of the buffer and the length of the string it contains, respectively.
+ *
+ * If a new buffer is allocated or an existing buffer is reallocated to
+ * make room for the additional character, =str and =size are updated
+ * accordingly.
+ *
+ * The =openpam_straddch function ensures that the buffer is always
+ * NUL-terminated.
+ *
+ * If the =openpam_straddch function is successful, it increments the
+ * integer variable pointed to by =len and returns 0.
+ * Otherwise, it leaves the variables pointed to by =str, =size and =len
+ * unmodified, sets :errno to =ENOMEM and returns -1.
+ *
+ * AUTHOR DES
+ */
diff --git a/contrib/openpam/lib/openpam_strlcat.h b/contrib/openpam/lib/openpam_strlcat.h
new file mode 100644
index 000000000000..1f266936be43
--- /dev/null
+++ b/contrib/openpam/lib/openpam_strlcat.h
@@ -0,0 +1,54 @@
+/*-
+ * Copyright (c) 2011 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: openpam_strlcat.h 578 2012-04-06 00:45:59Z des $
+ */
+
+#ifndef OPENPAM_STRLCAT_H_INCLUDED
+#define OPENPAM_STRLCAT_H_INCLUDED
+
+#ifndef HAVE_STRLCAT
+/* like strcat(3), but always NUL-terminates; returns strlen(src) */
+static size_t
+strlcat(char *dst, const char *src, size_t size)
+{
+ size_t len;
+
+ for (len = 0; *dst && size > 1; ++len, --size)
+ dst++;
+ for (; *src && size > 1; ++len, --size)
+ *dst++ = *src++;
+ *dst = '\0';
+ while (*src)
+ ++len, ++src;
+ return (len);
+}
+#endif
+
+#endif
diff --git a/contrib/openpam/lib/openpam_strlcmp.h b/contrib/openpam/lib/openpam_strlcmp.h
index c692225d7f8d..2a78e0f67666 100644
--- a/contrib/openpam/lib/openpam_strlcmp.h
+++ b/contrib/openpam/lib/openpam_strlcmp.h
@@ -11,6 +11,9 @@
* 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 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
@@ -24,7 +27,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_strlcmp.h 475 2011-11-03 15:29:24Z des $
+ * $Id: openpam_strlcmp.h 578 2012-04-06 00:45:59Z des $
*/
#ifndef OPENPAM_STRLCMP_H_INCLUDED
diff --git a/contrib/openpam/lib/openpam_strlcpy.h b/contrib/openpam/lib/openpam_strlcpy.h
index 921653b6e9cc..9c6554834830 100644
--- a/contrib/openpam/lib/openpam_strlcpy.h
+++ b/contrib/openpam/lib/openpam_strlcpy.h
@@ -11,6 +11,9 @@
* 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 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
@@ -24,7 +27,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_strlcpy.h 492 2011-11-20 02:04:17Z des $
+ * $Id: openpam_strlcpy.h 578 2012-04-06 00:45:59Z des $
*/
#ifndef OPENPAM_STRLCPY_H_INCLUDED
@@ -32,7 +35,7 @@
#ifndef HAVE_STRLCPY
/* like strcpy(3), but always NUL-terminates; returns strlen(src) */
-size_t
+static size_t
strlcpy(char *dst, const char *src, size_t size)
{
size_t len;
diff --git a/contrib/openpam/lib/openpam_subst.c b/contrib/openpam/lib/openpam_subst.c
index d54b8270daf4..bab7a785faa9 100644
--- a/contrib/openpam/lib/openpam_subst.c
+++ b/contrib/openpam/lib/openpam_subst.c
@@ -11,6 +11,9 @@
* 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 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
@@ -24,7 +27,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_subst.c 461 2011-11-02 14:00:38Z des $
+ * $Id: openpam_subst.c 543 2012-03-31 22:11:34Z des $
*/
#ifdef HAVE_CONFIG_H
diff --git a/contrib/openpam/lib/openpam_ttyconv.c b/contrib/openpam/lib/openpam_ttyconv.c
index ec078f418044..14a324d59ed3 100644
--- a/contrib/openpam/lib/openpam_ttyconv.c
+++ b/contrib/openpam/lib/openpam_ttyconv.c
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: openpam_ttyconv.c 437 2011-09-13 12:00:13Z des $
+ * $Id: openpam_ttyconv.c 527 2012-02-26 03:23:59Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -69,17 +69,17 @@ prompt(const char *msg)
{
char buf[PAM_MAX_RESP_SIZE];
struct sigaction action, saved_action;
- sigset_t saved_sigset, sigset;
+ sigset_t saved_sigset, the_sigset;
unsigned int saved_alarm;
int eof, error, fd;
size_t len;
char *retval;
char ch;
- sigemptyset(&sigset);
- sigaddset(&sigset, SIGINT);
- sigaddset(&sigset, SIGTSTP);
- sigprocmask(SIG_SETMASK, &sigset, &saved_sigset);
+ sigemptyset(&the_sigset);
+ sigaddset(&the_sigset, SIGINT);
+ sigaddset(&the_sigset, SIGTSTP);
+ sigprocmask(SIG_SETMASK, &the_sigset, &saved_sigset);
action.sa_handler = &timeout;
action.sa_flags = 0;
sigemptyset(&action.sa_mask);
diff --git a/contrib/openpam/lib/pam_get_authtok.c b/contrib/openpam/lib/pam_get_authtok.c
index a0613eff9cbe..1a3aebc81093 100644
--- a/contrib/openpam/lib/pam_get_authtok.c
+++ b/contrib/openpam/lib/pam_get_authtok.c
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: pam_get_authtok.c 455 2011-10-29 18:31:11Z des $
+ * $Id: pam_get_authtok.c 510 2011-12-31 13:14:23Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -50,6 +50,7 @@
#include "openpam_impl.h"
static const char authtok_prompt[] = "Password:";
+static const char authtok_prompt_remote[] = "Password for %u@%h:";
static const char oldauthtok_prompt[] = "Old Password:";
static const char newauthtok_prompt[] = "New Password:";
@@ -69,6 +70,7 @@ pam_get_authtok(pam_handle_t *pamh,
size_t prompt_size;
const void *oldauthtok, *prevauthtok, *promptp;
const char *prompt_option, *default_prompt;
+ const void *lhost, *rhost;
char *resp, *resp2;
int pitem, r, style, twice;
@@ -82,6 +84,14 @@ pam_get_authtok(pam_handle_t *pamh,
pitem = PAM_AUTHTOK_PROMPT;
prompt_option = "authtok_prompt";
default_prompt = authtok_prompt;
+ r = pam_get_item(pamh, PAM_RHOST, &rhost);
+ if (r == PAM_SUCCESS && rhost != NULL) {
+ r = pam_get_item(pamh, PAM_HOST, &lhost);
+ if (r == PAM_SUCCESS && lhost != NULL) {
+ if (strcmp(rhost, lhost) != 0)
+ default_prompt = authtok_prompt_remote;
+ }
+ }
r = pam_get_item(pamh, PAM_OLDAUTHTOK, &oldauthtok);
if (r == PAM_SUCCESS && oldauthtok != NULL) {
default_prompt = newauthtok_prompt;
diff --git a/contrib/openpam/lib/pam_putenv.c b/contrib/openpam/lib/pam_putenv.c
index 369066d8ea9c..e1f0bc35e29c 100644
--- a/contrib/openpam/lib/pam_putenv.c
+++ b/contrib/openpam/lib/pam_putenv.c
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: pam_putenv.c 437 2011-09-13 12:00:13Z des $
+ * $Id: pam_putenv.c 539 2012-03-31 20:53:22Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -102,7 +102,7 @@ pam_putenv(pam_handle_t *pamh,
*/
/**
- * The =pam_putenv function sets a environment variable.
+ * The =pam_putenv function sets an environment variable.
* Its semantics are similar to those of =putenv, but it modifies the PAM
* context's environment list instead of the application's.
*
diff --git a/contrib/openpam/lib/pam_setenv.c b/contrib/openpam/lib/pam_setenv.c
index fbe6a8f1b6f8..6fd4c1001e83 100644
--- a/contrib/openpam/lib/pam_setenv.c
+++ b/contrib/openpam/lib/pam_setenv.c
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: pam_setenv.c 437 2011-09-13 12:00:13Z des $
+ * $Id: pam_setenv.c 539 2012-03-31 20:53:22Z des $
*/
#ifdef HAVE_CONFIG_H
@@ -92,7 +92,7 @@ pam_setenv(pam_handle_t *pamh,
*/
/**
- * The =pam_setenv function sets a environment variable.
+ * The =pam_setenv function sets an environment variable.
* Its semantics are similar to those of =setenv, but it modifies the PAM
* context's environment list instead of the application's.
*
diff --git a/contrib/openpam/ltmain.sh b/contrib/openpam/ltmain.sh
index 6dfcfd58a90c..16ddbf884b67 100755
--- a/contrib/openpam/ltmain.sh
+++ b/contrib/openpam/ltmain.sh
@@ -1,9 +1,9 @@
-# libtool (GNU libtool) 2.4
+# libtool (GNU libtool) 2.4.2
# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions. There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -41,6 +41,7 @@
# --quiet, --silent don't print informational messages
# --no-quiet, --no-silent
# print informational messages (default)
+# --no-warn don't display warning messages
# --tag=TAG use configuration variables from tag TAG
# -v, --verbose print more informational messages than default
# --no-verbose don't print the extra informational messages
@@ -69,7 +70,7 @@
# compiler: $LTCC
# compiler flags: $LTCFLAGS
# linker: $LD (gnu? $with_gnu_ld)
-# $progname: (GNU libtool) 2.4
+# $progname: (GNU libtool) 2.4.2
# automake: $automake_version
# autoconf: $autoconf_version
#
@@ -79,9 +80,9 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4
+VERSION=2.4.2
TIMESTAMP=""
-package_revision=1.3293
+package_revision=1.3337
# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -136,15 +137,10 @@ progpath="$0"
: ${CP="cp -f"}
test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
-: ${EGREP="grep -E"}
-: ${FGREP="grep -F"}
-: ${GREP="grep"}
-: ${LN_S="ln -s"}
: ${MAKE="make"}
: ${MKDIR="mkdir"}
: ${MV="mv -f"}
: ${RM="rm -f"}
-: ${SED="sed"}
: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
: ${Xsed="$SED -e 1s/^X//"}
@@ -387,7 +383,7 @@ case $progpath in
;;
*)
save_IFS="$IFS"
- IFS=:
+ IFS=${PATH_SEPARATOR-:}
for progdir in $PATH; do
IFS="$save_IFS"
test -x "$progdir/$progname" && break
@@ -771,8 +767,8 @@ func_help ()
s*\$LTCFLAGS*'"$LTCFLAGS"'*
s*\$LD*'"$LD"'*
s/\$with_gnu_ld/'"$with_gnu_ld"'/
- s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
- s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
p
d
}
@@ -1052,6 +1048,7 @@ opt_finish=false
opt_help=false
opt_help_all=false
opt_silent=:
+opt_warning=:
opt_verbose=:
opt_silent=false
opt_verbose=false
@@ -1120,6 +1117,10 @@ esac
opt_silent=false
func_append preserve_args " $opt"
;;
+ --no-warning|--no-warn)
+ opt_warning=false
+func_append preserve_args " $opt"
+ ;;
--no-verbose)
opt_verbose=false
func_append preserve_args " $opt"
@@ -2089,7 +2090,7 @@ func_mode_compile ()
*.[cCFSifmso] | \
*.ada | *.adb | *.ads | *.asm | \
*.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
- *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
+ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
func_xform "$libobj"
libobj=$func_xform_result
;;
@@ -3231,11 +3232,13 @@ func_mode_install ()
# Set up the ranlib parameters.
oldlib="$destdir/$name"
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
if test -n "$stripme" && test -n "$old_striplib"; then
- func_show_eval "$old_striplib $oldlib" 'exit $?'
+ func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
fi
# Do each command in the postinstall commands.
@@ -3500,7 +3503,7 @@ static const void *lt_preloaded_setup() {
# linked before any other PIC object. But we must not use
# pic_flag when linking with -static. The problem exists in
# FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
*-*-hpux*)
pic_flag_for_symtable=" $pic_flag" ;;
@@ -4015,14 +4018,17 @@ func_exec_program_core ()
# launches target application with the remaining arguments.
func_exec_program ()
{
- for lt_wr_arg
- do
- case \$lt_wr_arg in
- --lt-*) ;;
- *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
- esac
- shift
- done
+ case \" \$* \" in
+ *\\ --lt-*)
+ for lt_wr_arg
+ do
+ case \$lt_wr_arg in
+ --lt-*) ;;
+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+ esac
+ shift
+ done ;;
+ esac
func_exec_program_core \${1+\"\$@\"}
}
@@ -5090,9 +5096,15 @@ void lt_dump_script (FILE* f)
{
EOF
func_emit_wrapper yes |
- $SED -e 's/\([\\"]\)/\\\1/g' \
- -e 's/^/ fputs ("/' -e 's/$/\\n", f);/'
-
+ $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/ fputs ("\1", f);/p
+g
+D'
cat <<"EOF"
}
EOF
@@ -5677,7 +5689,8 @@ func_mode_link ()
continue
;;
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
func_append compiler_flags " $arg"
func_append compile_command " $arg"
func_append finalize_command " $arg"
@@ -6181,7 +6194,8 @@ func_mode_link ()
lib=
found=no
case $deplib in
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
if test "$linkmode,$pass" = "prog,link"; then
compile_deplibs="$deplib $compile_deplibs"
finalize_deplibs="$deplib $finalize_deplibs"
@@ -6882,7 +6896,7 @@ func_mode_link ()
test "$hardcode_direct_absolute" = no; then
add="$dir/$linklib"
elif test "$hardcode_minus_L" = yes; then
- add_dir="-L$dir"
+ add_dir="-L$absdir"
# Try looking first in the location we're being installed to.
if test -n "$inst_prefix_dir"; then
case $libdir in
@@ -7367,6 +7381,7 @@ func_mode_link ()
# which has an extra 1 added just for fun
#
case $version_type in
+ # correct linux to gnu/linux during the next big refactor
darwin|linux|osf|windows|none)
func_arith $number_major + $number_minor
current=$func_arith_result
@@ -7483,7 +7498,7 @@ func_mode_link ()
versuffix="$major.$revision"
;;
- linux)
+ linux) # correct to gnu/linux during the next big refactor
func_arith $current - $age
major=.$func_arith_result
versuffix="$major.$age.$revision"
@@ -8071,6 +8086,11 @@ EOF
# Test again, we may have decided not to build it any more
if test "$build_libtool_libs" = yes; then
+ # Remove ${wl} instances when linking with ld.
+ # FIXME: should test the right _cmds variable.
+ case $archive_cmds in
+ *\$LD\ *) wl= ;;
+ esac
if test "$hardcode_into_libs" = yes; then
# Hardcode the library paths
hardcode_libdirs=
@@ -8101,7 +8121,7 @@ EOF
elif test -n "$runpath_var"; then
case "$perm_rpath " in
*" $libdir "*) ;;
- *) func_apped perm_rpath " $libdir" ;;
+ *) func_append perm_rpath " $libdir" ;;
esac
fi
done
@@ -8109,11 +8129,7 @@ EOF
if test -n "$hardcode_libdir_separator" &&
test -n "$hardcode_libdirs"; then
libdir="$hardcode_libdirs"
- if test -n "$hardcode_libdir_flag_spec_ld"; then
- eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
- else
- eval dep_rpath=\"$hardcode_libdir_flag_spec\"
- fi
+ eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
fi
if test -n "$runpath_var" && test -n "$perm_rpath"; then
# We should set the runpath_var.
@@ -9203,6 +9219,8 @@ EOF
esac
done
fi
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
eval cmds=\"$old_archive_cmds\"
func_len " $cmds"
@@ -9312,7 +9330,8 @@ EOF
*.la)
func_basename "$deplib"
name="$func_basename_result"
- eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ func_resolve_sysroot "$deplib"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
test -z "$libdir" && \
func_fatal_error "\`$deplib' is not a valid libtool archive"
func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
diff --git a/contrib/openpam/misc/gendoc.pl b/contrib/openpam/misc/gendoc.pl
index 7b766728e872..4ce2d39fad9e 100644
--- a/contrib/openpam/misc/gendoc.pl
+++ b/contrib/openpam/misc/gendoc.pl
@@ -33,7 +33,7 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $Id: gendoc.pl 465 2011-11-02 20:34:26Z des $
+# $Id: gendoc.pl 599 2012-04-14 15:06:41Z des $
#
use strict;
@@ -81,12 +81,15 @@ $COPYRIGHT = ".\\\"-
.\\\"";
%AUTHORS = (
- THINKSEC => "ThinkSec AS and Network Associates Laboratories, the
+ THINKSEC => "developed for the
+.Fx
+Project by ThinkSec AS and Network Associates Laboratories, the
Security Research Division of Network Associates, Inc.\\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
as part of the DARPA CHATS research program.",
- DES => ".An Dag-Erling Sm\\(/orgrav Aq des\@FreeBSD.org .",
+ DES => "developed by
+.An Dag-Erling Sm\\(/orgrav Aq des\@des.no .",
);
%PAMERR = (
@@ -136,6 +139,9 @@ sub parse_source($) {
my $inlist;
my $intaglist;
my $inliteral;
+ my $customrv;
+ my $deprecated;
+ my $experimental;
my %xref;
my @errors;
my $author;
@@ -154,10 +160,18 @@ sub parse_source($) {
if ($source =~ m/^ \* NOPARSE\s*$/m);
$author = 'THINKSEC';
- if ($source =~ s/^ \* AUTHOR\s+(.*?)\s*$//m) {
+ if ($source =~ s/^ \* AUTHOR\s+(\w*)\s*$//m) {
$author = $1;
}
+ if ($source =~ s/^ \* DEPRECATED\s*(\w*)\s*$//m) {
+ $deprecated = $1 // 0;
+ }
+
+ if ($source =~ s/^ \* EXPERIMENTAL\s*$//m) {
+ $experimental = 1;
+ }
+
$func = $fn;
$func =~ s,^(?:.*/)?([^/]+)\.c$,$1,;
if ($source !~ m,\n \* ([\S ]+)\n \*/\n\n([\S ]+)\n$func\((.*?)\)\n\{,s) {
@@ -195,7 +209,7 @@ sub parse_source($) {
# separate argument names with |
$argnames =~ s/\" \"/|/g;
# and surround with ()
- $argnames =~ s/^\"(.*)\"$/($1)/;
+ $argnames =~ s/^\"(.*)\"$/$1/;
# $argnames is now a regexp that matches argument names
$inliteral = $inlist = $intaglist = 0;
foreach (split("\n", $source)) {
@@ -211,12 +225,19 @@ sub parse_source($) {
s/\\(.)/$1/gs;
if (m/^$/) {
# paragraph separator
+ if ($inlist || $intaglist) {
+ # either a blank line between list items, or a blank
+ # line after the final list item. The latter case
+ # will be handled further down.
+ next;
+ }
+ if ($man =~ m/\n\.Sh [^\n]+\n$/s) {
+ # a blank line after a section header
+ next;
+ }
if ($man ne "" && $man !~ m/\.Pp\n$/s) {
if ($inliteral) {
$man .= "\0\n";
- } elsif ($inlist || $intaglist) {
- $man .= ".El\n.Pp\n";
- $inlist = $intaglist = 0;
} else {
$man .= ".Pp\n";
}
@@ -229,6 +250,14 @@ sub parse_source($) {
++$xref{$sect}->{$page};
next;
}
+ if (s/^([A-Z][0-9A-Z -]+)$/.Sh $1/) {
+ if ($1 eq "RETURN VALUES") {
+ $customrv = $1;
+ }
+ $man =~ s/\n\.Pp$/\n/s;
+ $man .= "$_\n";
+ next;
+ }
if (s/^\s+-\s+//) {
# item in bullet list
if ($inliteral) {
@@ -286,11 +315,12 @@ sub parse_source($) {
$man .= "$_\n";
next;
}
- s/\s*=$func\b\s*/\n.Nm\n/gs;
- s/\s*=$argnames\b\s*/\n.Fa $1\n/gs;
+ s/\s*=($func)\b\s*/\n.Fn $1\n/gs;
+ s/\s*=($argnames)\b\s*/\n.Fa $1\n/gs;
s/\s*=(struct \w+(?: \*)?)\b\s*/\n.Vt $1\n/gs;
s/\s*:([a-z_]+)\b\s*/\n.Va $1\n/gs;
s/\s*;([a-z_]+)\b\s*/\n.Dv $1\n/gs;
+ s/\s*=!([a-z_]+)\b\s*/\n.Xr $1 3\n/gs;
while (s/\s*=([a-z_]+)\b\s*/\n.Xr $1 3\n/s) {
++$xref{3}->{$1};
}
@@ -311,7 +341,7 @@ sub parse_source($) {
$inliteral = 0;
}
$man =~ s/\%/\\&\%/gs;
- $man =~ s/(\n\.[A-Z][a-z] [\w ]+)\n([\.,:;-]\S*)\s*/$1 $2\n/gs;
+ $man =~ s/(\n\.[A-Z][a-z] [\w ]+)\n([.,:;-])\s+/$1 $2\n/gs;
$man =~ s/\s*$/\n/gm;
$man =~ s/\n+/\n/gs;
$man =~ s/\0//gs;
@@ -331,6 +361,9 @@ sub parse_source($) {
'xref' => \%xref,
'errors' => \@errors,
'author' => $author,
+ 'customrv' => $customrv,
+ 'deprecated' => $deprecated,
+ 'experimental' => $experimental,
};
if ($source =~ m/^ \* NODOC\s*$/m) {
$FUNCTIONS{$func}->{'nodoc'} = 1;
@@ -437,49 +470,75 @@ sub gendoc($) {
.Lb libpam
.Sh SYNOPSIS
.In sys/types.h
-.In security/pam_appl.h
+";
+ if ($func->{'args'} =~ m/\bFILE \*\b/) {
+ $mdoc .= ".In stdio.h\n";
+ }
+ $mdoc .= ".In security/pam_appl.h
";
if ($func->{'name'} =~ m/_sm_/) {
- $mdoc .= ".In security/pam_modules.h\n"
+ $mdoc .= ".In security/pam_modules.h\n";
}
if ($func->{'name'} =~ m/openpam/) {
- $mdoc .= ".In security/openpam.h\n"
+ $mdoc .= ".In security/openpam.h\n";
}
$mdoc .= ".Ft \"$func->{'type'}\"
.Fn $func->{'name'} $func->{'args'}
.Sh DESCRIPTION
-$func->{'man'}
";
- if ($func->{'type'} eq "int") {
+ if (defined($func->{'deprecated'})) {
+ $mdoc .= ".Bf Sy\n" .
+ "This function is deprecated and may be removed " .
+ "in a future release without further warning.\n";
+ if ($func->{'deprecated'}) {
+ $mdoc .= "The\n.Fn $func->{'deprecated'}\nfunction " .
+ "may be used to achieve similar results.\n";
+ }
+ $mdoc .= ".Ef\n.Pp\n";
+ }
+ if ($func->{'experimental'}) {
+ $mdoc .= ".Bf Sy\n" .
+ "This function is experimental and may be modified or removed " .
+ "in a future release without further warning.\n";
+ $mdoc .= ".Ef\n.Pp\n";
+ }
+ $mdoc .= "$func->{'man'}\n";
+ my @errors = @{$func->{'errors'}};
+ if ($func->{'customrv'}) {
+ # leave it
+ } elsif ($func->{'type'} eq "int" && @errors) {
$mdoc .= ".Sh RETURN VALUES
The
-.Nm
+.Fn $func->{'name'}
function returns one of the following values:
.Bl -tag -width 18n
";
- my @errors = @{$func->{'errors'}};
- warn("$func->{'name'}(): no error specification\n")
- unless(@errors);
foreach (@errors) {
$mdoc .= ".It Bq Er $_\n$PAMERR{$_}.\n";
}
$mdoc .= ".El\n";
- } else {
- if ($func->{'type'} =~ m/\*$/) {
- $mdoc .= ".Sh RETURN VALUES
+ } elsif ($func->{'type'} eq "int") {
+ $mdoc .= ".Sh RETURN VALUES
+The
+.Fn $func->{'name'}
+function returns 0 on success and -1 on failure.
+";
+ } elsif ($func->{'type'} =~ m/\*$/) {
+ $mdoc .= ".Sh RETURN VALUES
The
-.Nm
+.Fn $func->{'name'}
function returns
.Dv NULL
on failure.
";
- }
+ } elsif ($func->{'type'} ne "void") {
+ warn("$func->{'name'}(): no error specification\n");
}
$mdoc .= ".Sh SEE ALSO\n" . genxref($func->{'xref'});
$mdoc .= ".Sh STANDARDS\n";
if ($func->{'openpam'}) {
$mdoc .= "The
-.Nm
+.Fn $func->{'name'}
function is an OpenPAM extension.
";
} else {
@@ -491,10 +550,9 @@ function is an OpenPAM extension.
}
$mdoc .= ".Sh AUTHORS
The
-.Nm
-function and this manual page were developed for the
-.Fx
-Project by\n" . $AUTHORS{$func->{'author'} // 'THINKSEC_DARPA'} . "\n";
+.Fn $func->{'name'}
+function and this manual page were\n";
+ $mdoc .= $AUTHORS{$func->{'author'} // 'THINKSEC_DARPA'} . "\n";
$fn = "$func->{'name'}.3";
if (open(FILE, ">", $fn)) {
print(FILE $mdoc);
@@ -608,6 +666,9 @@ Security Research Division of Network Associates, Inc.\\& under
DARPA/SPAWAR contract N66001-01-C-8035
.Pq Dq CBOSS ,
as part of the DARPA CHATS research program.
+.Pp
+The OpenPAM library is maintained by
+.An Dag-Erling Sm\\(/orgrav Aq des\@des.no .
";
close(FILE);
}
diff --git a/contrib/openpam/pamgdb.in b/contrib/openpam/pamgdb.in
new file mode 100644
index 000000000000..2ec2d65adc4d
--- /dev/null
+++ b/contrib/openpam/pamgdb.in
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# $Id: pamgdb.in 583 2012-04-07 18:56:13Z des $
+#
+
+srcdir="@abs_top_srcdir@"
+builddir="@abs_top_builddir@"
+
+# Make sure we get the right version of libpam
+pam_libdir="${builddir}/lib/.libs"
+LD_LIBRARY_PATH="${pam_libdir}:${LD_LIBRARY_PATH}"
+LD_LIBRARY_PATH="${LD_LIBRARY_PATH%:}"
+export LD_LIBRARY_PATH
+
+# DWIM, assuming that the first positional argument is the name of the
+# program to debug rather than a gdb option.
+prog="$1"
+if expr "${prog}" : ".*/.*" >/dev/null ; then
+ # The first argument is an absolute or relative path. There
+ # is a good chance that it points to the wrapper script
+ # generated by libtool rather than the actual binary.
+ altprog="${prog%/*}/.libs/${prog##*/}"
+ if [ -x "${altprog}" ] ; then
+ shift
+ set "${altprog}" "$@"
+ fi
+elif expr "${prog}" : "[a-z.-][a-z.-]*" >/dev/null ; then
+ # The first argument is just the name of the program. Look for
+ # it in the build directory.
+ for libdir in $(find "${builddir}" -type d -name .libs -print) ; do
+ altprog="${libdir}/${prog}"
+ if [ -x "${altprog}" ] ; then
+ shift
+ set "${altprog}" "$@"
+ break
+ fi
+ done
+fi
+
+# Let's go!
+exec gdb "$@"
diff --git a/contrib/openpam/t/Makefile.am b/contrib/openpam/t/Makefile.am
new file mode 100644
index 000000000000..a3f596d90748
--- /dev/null
+++ b/contrib/openpam/t/Makefile.am
@@ -0,0 +1,16 @@
+# $Id: Makefile.am 572 2012-04-05 15:41:44Z des $
+
+INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib
+
+noinst_HEADERS = t.h
+
+# tests
+TESTS = t_openpam_readword t_openpam_readlinev
+check_PROGRAMS = $(TESTS)
+
+# libt - common support code
+check_LIBRARIES = libt.a
+libt_a_SOURCES = t_main.c
+
+# link with libpam and libt
+LDADD = libt.a $(top_builddir)/lib/libpam.la
diff --git a/contrib/openpam/t/Makefile.in b/contrib/openpam/t/Makefile.in
new file mode 100644
index 000000000000..e71618bd5e83
--- /dev/null
+++ b/contrib/openpam/t/Makefile.in
@@ -0,0 +1,605 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+
+# $Id: Makefile.am 572 2012-04-05 15:41:44Z des $
+
+VPATH = @srcdir@
+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@
+TESTS = t_openpam_readword$(EXEEXT) t_openpam_readlinev$(EXEEXT)
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = t
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+ARFLAGS = cru
+libt_a_AR = $(AR) $(ARFLAGS)
+libt_a_LIBADD =
+am_libt_a_OBJECTS = t_main.$(OBJEXT)
+libt_a_OBJECTS = $(am_libt_a_OBJECTS)
+am__EXEEXT_1 = t_openpam_readword$(EXEEXT) \
+ t_openpam_readlinev$(EXEEXT)
+t_openpam_readlinev_SOURCES = t_openpam_readlinev.c
+t_openpam_readlinev_OBJECTS = t_openpam_readlinev.$(OBJEXT)
+t_openpam_readlinev_LDADD = $(LDADD)
+t_openpam_readlinev_DEPENDENCIES = libt.a \
+ $(top_builddir)/lib/libpam.la
+t_openpam_readword_SOURCES = t_openpam_readword.c
+t_openpam_readword_OBJECTS = t_openpam_readword.$(OBJEXT)
+t_openpam_readword_LDADD = $(LDADD)
+t_openpam_readword_DEPENDENCIES = libt.a $(top_builddir)/lib/libpam.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libt_a_SOURCES) t_openpam_readlinev.c t_openpam_readword.c
+DIST_SOURCES = $(libt_a_SOURCES) t_openpam_readlinev.c \
+ t_openpam_readword.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIBS = @CRYPT_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAJ = @LIB_MAJ@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENPAM_MODULES_DIR = @OPENPAM_MODULES_DIR@
+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_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+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_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@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/lib
+noinst_HEADERS = t.h
+
+# libt - common support code
+check_LIBRARIES = libt.a
+libt_a_SOURCES = t_main.c
+
+# link with libpam and libt
+LDADD = libt.a $(top_builddir)/lib/libpam.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(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 t/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign t/Makefile
+.PRECIOUS: 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_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-checkLIBRARIES:
+ -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES)
+libt.a: $(libt_a_OBJECTS) $(libt_a_DEPENDENCIES)
+ -rm -f libt.a
+ $(libt_a_AR) libt.a $(libt_a_OBJECTS) $(libt_a_LIBADD)
+ $(RANLIB) libt.a
+
+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
+t_openpam_readlinev$(EXEEXT): $(t_openpam_readlinev_OBJECTS) $(t_openpam_readlinev_DEPENDENCIES)
+ @rm -f t_openpam_readlinev$(EXEEXT)
+ $(LINK) $(t_openpam_readlinev_OBJECTS) $(t_openpam_readlinev_LDADD) $(LIBS)
+t_openpam_readword$(EXEEXT): $(t_openpam_readword_OBJECTS) $(t_openpam_readword_DEPENDENCIES)
+ @rm -f t_openpam_readword$(EXEEXT)
+ $(LINK) $(t_openpam_readword_OBJECTS) $(t_openpam_readword_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_openpam_readlinev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_openpam_readword.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ 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
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ 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"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ echo "$$grn$$dashes"; \
+ else \
+ echo "$$red$$dashes"; \
+ fi; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes$$std"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+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_LIBRARIES) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+install: 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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+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)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkLIBRARIES 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: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+ clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \
+ clean-libtool ctags 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 \
+ tags uninstall uninstall-am
+
+
+# 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/openpam/t/t.h b/contrib/openpam/t/t.h
new file mode 100644
index 000000000000..4805b76af092
--- /dev/null
+++ b/contrib/openpam/t/t.h
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: t.h 578 2012-04-06 00:45:59Z des $
+ */
+
+#ifndef T_H_INCLUDED
+#define T_H_INCLUDED
+
+#include <security/openpam_attr.h>
+
+struct t_test {
+ int (*func)(void);
+ const char *desc;
+};
+
+#define T_FUNC(n, d) \
+ static int t_ ## n ## _func(void); \
+ static const struct t_test t_ ## n = \
+ { t_ ## n ## _func, d }; \
+ static int t_ ## n ## _func(void)
+
+#define T(n) \
+ &t_ ## n
+
+extern const char *t_progname;
+
+const struct t_test **t_prepare(int, char **);
+void t_cleanup(void);
+
+void t_verbose(const char *, ...)
+ OPENPAM_FORMAT((__printf__, 1, 2));
+
+#endif
diff --git a/contrib/openpam/t/t_main.c b/contrib/openpam/t/t_main.c
new file mode 100644
index 000000000000..6a29b0a4fda6
--- /dev/null
+++ b/contrib/openpam/t/t_main.c
@@ -0,0 +1,119 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: t_main.c 578 2012-04-06 00:45:59Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <err.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "t.h"
+
+const char *t_progname;
+
+static int verbose;
+
+void
+t_verbose(const char *fmt, ...)
+{
+ va_list ap;
+
+ if (verbose) {
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ }
+}
+
+static void
+usage(void)
+{
+
+ fprintf(stderr, "usage: [-v] %s\n", t_progname);
+ exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+ const struct t_test **t_plan;
+ const char *desc;
+ int n, pass, fail;
+ int opt;
+
+ if ((t_progname = strrchr(argv[0], '/')) != NULL)
+ t_progname++; /* one past the slash */
+ else
+ t_progname = argv[0];
+
+ while ((opt = getopt(argc, argv, "v")) != -1)
+ switch (opt) {
+ case 'v':
+ verbose = 1;
+ break;
+ default:
+ usage();
+ }
+
+ argc -= optind;
+ argv += optind;
+
+ /* prepare the test plan */
+ if ((t_plan = t_prepare(argc, argv)) == NULL)
+ errx(1, "no plan\n");
+
+ /* count the tests */
+ for (n = 0; t_plan[n] != NULL; ++n)
+ /* nothing */;
+ printf("1..%d\n", n);
+
+ /* run the tests */
+ for (n = pass = fail = 0; t_plan[n] != NULL; ++n) {
+ desc = t_plan[n]->desc ? t_plan[n]->desc : "no description";
+ if ((*t_plan[n]->func)()) {
+ printf("ok %d - %s\n", n + 1, desc);
+ ++pass;
+ } else {
+ printf("not ok %d - %s\n", n + 1, desc);
+ ++fail;
+ }
+ }
+
+ /* clean up and exit */
+ t_cleanup();
+ exit(fail > 0 ? 1 : 0);
+}
diff --git a/contrib/openpam/t/t_openpam_readlinev.c b/contrib/openpam/t/t_openpam_readlinev.c
new file mode 100644
index 000000000000..bb0ff90089e1
--- /dev/null
+++ b/contrib/openpam/t/t_openpam_readlinev.c
@@ -0,0 +1,342 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: t_openpam_readlinev.c 581 2012-04-06 01:08:37Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <security/pam_appl.h>
+#include <security/openpam.h>
+
+#include "openpam_impl.h"
+#include "t.h"
+
+static char filename[1024];
+static FILE *f;
+
+/*
+ * Open the temp file and immediately unlink it so it doesn't leak in case
+ * of premature exit.
+ */
+static void
+orlv_open(void)
+{
+ int fd;
+
+ if ((fd = open(filename, O_RDWR|O_CREAT|O_TRUNC, 0600)) < 0)
+ err(1, "%s(): %s", __func__, filename);
+ if ((f = fdopen(fd, "r+")) == NULL)
+ err(1, "%s(): %s", __func__, filename);
+ if (unlink(filename) < 0)
+ err(1, "%s(): %s", __func__, filename);
+}
+
+/*
+ * Write text to the temp file.
+ */
+static void
+orlv_output(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vfprintf(f, fmt, ap);
+ va_end(ap);
+ if (ferror(f))
+ err(1, "%s", filename);
+}
+
+/*
+ * Rewind the temp file.
+ */
+static void
+orlv_rewind(void)
+{
+
+ errno = 0;
+ rewind(f);
+ if (errno != 0)
+ err(1, "%s(): %s", __func__, filename);
+}
+
+/*
+ * Read a line from the temp file and verify that the result matches our
+ * expectations: whether a line was read at all, how many and which words
+ * it contained, how many lines were read (in case of quoted or escaped
+ * newlines) and whether we reached the end of the file.
+ */
+static int
+orlv_expect(const char **expectedv, int lines, int eof)
+{
+ int expectedc, gotc, i, lineno = 0;
+ char **gotv;
+
+ expectedc = 0;
+ if (expectedv != NULL)
+ while (expectedv[expectedc] != NULL)
+ ++expectedc;
+ gotv = openpam_readlinev(f, &lineno, &gotc);
+ if (ferror(f))
+ err(1, "%s(): %s", __func__, filename);
+ if (expectedv != NULL && gotv == NULL) {
+ t_verbose("expected %d words, got nothing\n", expectedc);
+ return (0);
+ }
+ if (expectedv == NULL && gotv != NULL) {
+ t_verbose("expected nothing, got %d words\n", gotc);
+ FREEV(gotc, gotv);
+ return (0);
+ }
+ if (expectedv != NULL && gotv != NULL) {
+ if (expectedc != gotc) {
+ t_verbose("expected %d words, got %d\n",
+ expectedc, gotc);
+ FREEV(gotc, gotv);
+ return (0);
+ }
+ for (i = 0; i < gotc; ++i) {
+ if (strcmp(expectedv[i], gotv[i]) != 0) {
+ t_verbose("word %d: expected <<%s>>, "
+ "got <<%s>>\n", i, expectedv[i], gotv[i]);
+ FREEV(gotc, gotv);
+ return (0);
+ }
+ }
+ FREEV(gotc, gotv);
+ }
+ if (lineno != lines) {
+ t_verbose("expected to advance %d lines, advanced %d lines\n",
+ lines, lineno);
+ return (0);
+ }
+ if (eof && !feof(f)) {
+ t_verbose("expected EOF, but didn't get it\n");
+ return (0);
+ }
+ if (!eof && feof(f)) {
+ t_verbose("didn't expect EOF, but got it anyway\n");
+ return (0);
+ }
+ return (1);
+}
+
+/*
+ * Close the temp file.
+ */
+void
+orlv_close(void)
+{
+
+ if (fclose(f) != 0)
+ err(1, "%s(): %s", __func__, filename);
+ f = NULL;
+}
+
+/***************************************************************************
+ * Commonly-used lines
+ */
+
+static const char *empty[] = {
+ NULL
+};
+
+static const char *hello[] = {
+ "hello",
+ NULL
+};
+
+static const char *hello_world[] = {
+ "hello",
+ "world",
+ NULL
+};
+
+
+/***************************************************************************
+ * Lines without words
+ */
+
+T_FUNC(empty_input, "empty input")
+{
+ int ret;
+
+ orlv_open();
+ ret = orlv_expect(NULL, 0 /*lines*/, 1 /*eof*/);
+ orlv_close();
+ return (ret);
+}
+
+T_FUNC(empty_line, "empty line")
+{
+ int ret;
+
+ orlv_open();
+ orlv_output("\n");
+ orlv_rewind();
+ ret = orlv_expect(empty, 1 /*lines*/, 0 /*eof*/);
+ orlv_close();
+ return (ret);
+}
+
+T_FUNC(unterminated_empty_line, "unterminated empty line")
+{
+ int ret;
+
+ orlv_open();
+ orlv_output(" ");
+ orlv_rewind();
+ ret = orlv_expect(NULL, 0 /*lines*/, 1 /*eof*/);
+ orlv_close();
+ return (ret);
+}
+
+T_FUNC(whitespace, "whitespace")
+{
+ int ret;
+
+ orlv_open();
+ orlv_output(" \n");
+ orlv_rewind();
+ ret = orlv_expect(empty, 1 /*lines*/, 0 /*eof*/);
+ orlv_close();
+ return (ret);
+}
+
+T_FUNC(comment, "comment")
+{
+ int ret;
+
+ orlv_open();
+ orlv_output("# comment\n");
+ orlv_rewind();
+ ret = orlv_expect(empty, 1 /*lines*/, 0 /*eof*/);
+ orlv_close();
+ return (ret);
+}
+
+T_FUNC(whitespace_before_comment, "whitespace before comment")
+{
+ int ret;
+
+ orlv_open();
+ orlv_output(" # comment\n");
+ orlv_rewind();
+ ret = orlv_expect(empty, 1 /*lines*/, 0 /*eof*/);
+ orlv_close();
+ return (ret);
+}
+
+
+/***************************************************************************
+ * Simple words
+ */
+
+T_FUNC(one_word, "one word")
+{
+ int ret;
+
+ orlv_open();
+ orlv_output("hello\n");
+ orlv_rewind();
+ ret = orlv_expect(hello, 1 /*lines*/, 0 /*eof*/);
+ orlv_close();
+ return (ret);
+}
+
+T_FUNC(two_words, "two words")
+{
+ int ret;
+
+ orlv_open();
+ orlv_output("hello world\n");
+ orlv_rewind();
+ ret = orlv_expect(hello_world, 1 /*lines*/, 0 /*eof*/);
+ orlv_close();
+ return (ret);
+}
+
+T_FUNC(unterminated_line, "unterminated line")
+{
+ int ret;
+
+ orlv_open();
+ orlv_output("hello world");
+ orlv_rewind();
+ ret = orlv_expect(hello_world, 0 /*lines*/, 1 /*eof*/);
+ orlv_close();
+ return (ret);
+}
+
+
+/***************************************************************************
+ * Boilerplate
+ */
+
+const struct t_test *t_plan[] = {
+ T(empty_input),
+ T(empty_line),
+ T(unterminated_empty_line),
+ T(whitespace),
+ T(comment),
+ T(whitespace_before_comment),
+
+ T(one_word),
+ T(two_words),
+ T(unterminated_line),
+
+ NULL
+};
+
+const struct t_test **
+t_prepare(int argc, char *argv[])
+{
+
+ (void)argc;
+ (void)argv;
+ snprintf(filename, sizeof filename, "%s.%d.tmp", t_progname, getpid());
+ if (filename == NULL)
+ err(1, "asprintf()");
+ return (t_plan);
+}
+
+void
+t_cleanup(void)
+{
+}
diff --git a/contrib/openpam/t/t_openpam_readword.c b/contrib/openpam/t/t_openpam_readword.c
new file mode 100644
index 000000000000..2135d8ba2868
--- /dev/null
+++ b/contrib/openpam/t/t_openpam_readword.c
@@ -0,0 +1,829 @@
+/*-
+ * Copyright (c) 2012 Dag-Erling Smørgrav
+ * 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
+ * in this position and unchanged.
+ * 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 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.
+ *
+ * $Id: t_openpam_readword.c 584 2012-04-07 22:47:16Z des $
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <security/pam_appl.h>
+#include <security/openpam.h>
+
+#include "t.h"
+
+static char filename[1024];
+static FILE *f;
+
+/*
+ * Open the temp file and immediately unlink it so it doesn't leak in case
+ * of premature exit.
+ */
+static void
+orw_open(void)
+{
+ int fd;
+
+ if ((fd = open(filename, O_RDWR|O_CREAT|O_TRUNC, 0600)) < 0)
+ err(1, "%s(): %s", __func__, filename);
+ if ((f = fdopen(fd, "r+")) == NULL)
+ err(1, "%s(): %s", __func__, filename);
+ if (unlink(filename) < 0)
+ err(1, "%s(): %s", __func__, filename);
+}
+
+/*
+ * Write text to the temp file.
+ */
+static void
+orw_output(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vfprintf(f, fmt, ap);
+ va_end(ap);
+ if (ferror(f))
+ err(1, "%s", filename);
+}
+
+/*
+ * Rewind the temp file.
+ */
+static void
+orw_rewind(void)
+{
+
+ errno = 0;
+ rewind(f);
+ if (errno != 0)
+ err(1, "%s(): %s", __func__, filename);
+}
+
+/*
+ * Read a word from the temp file and verify that the result matches our
+ * expectations: whether a word was read at all, how many lines were read
+ * (in case of quoted or escaped newlines), whether we reached the end of
+ * the file and whether we reached the end of the line.
+ */
+static int
+orw_expect(const char *expected, int lines, int eof, int eol)
+{
+ int ch, lineno = 0;
+ char *got;
+ size_t len;
+
+ got = openpam_readword(f, &lineno, &len);
+ if (ferror(f))
+ err(1, "%s(): %s", __func__, filename);
+ if (expected != NULL && got == NULL) {
+ t_verbose("expected <<%s>>, got nothing\n", expected);
+ return (0);
+ }
+ if (expected == NULL && got != NULL) {
+ t_verbose("expected nothing, got <<%s>>\n", got);
+ return (0);
+ }
+ if (expected != NULL && got != NULL && strcmp(expected, got) != 0) {
+ t_verbose("expected <<%s>>, got <<%s>>\n", expected, got);
+ return (0);
+ }
+ if (lineno != lines) {
+ t_verbose("expected to advance %d lines, advanced %d lines\n",
+ lines, lineno);
+ return (0);
+ }
+ if (eof && !feof(f)) {
+ t_verbose("expected EOF, but didn't get it\n");
+ return (0);
+ }
+ if (!eof && feof(f)) {
+ t_verbose("didn't expect EOF, but got it anyway\n");
+ return (0);
+ }
+ ch = fgetc(f);
+ if (ferror(f))
+ err(1, "%s(): %s", __func__, filename);
+ if (eol && ch != '\n') {
+ t_verbose("expected EOL, but didn't get it\n");
+ return (0);
+ }
+ if (!eol && ch == '\n') {
+ t_verbose("didn't expect EOL, but got it anyway\n");
+ return (0);
+ }
+ if (ch != EOF)
+ ungetc(ch, f);
+ return (1);
+}
+
+/*
+ * Close the temp file.
+ */
+void
+orw_close(void)
+{
+
+ if (fclose(f) != 0)
+ err(1, "%s(): %s", __func__, filename);
+ f = NULL;
+}
+
+
+/***************************************************************************
+ * Lines without words
+ */
+
+T_FUNC(empty_input, "empty input")
+{
+ int ret;
+
+ orw_open();
+ ret = orw_expect(NULL, 0 /*lines*/, 1 /*eof*/, 0 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(empty_line, "empty line")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\n");
+ orw_rewind();
+ ret = orw_expect(NULL, 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(unterminated_line, "unterminated line")
+{
+ int ret;
+
+ orw_open();
+ orw_output(" ");
+ orw_rewind();
+ ret = orw_expect(NULL, 0 /*lines*/, 1 /*eof*/, 0 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(single_whitespace, "single whitespace")
+{
+ int ret;
+
+ orw_open();
+ orw_output(" \n");
+ orw_rewind();
+ ret = orw_expect(NULL, 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(multiple_whitespace, "multiple whitespace")
+{
+ int ret;
+
+ orw_open();
+ orw_output(" \t\r\n");
+ orw_rewind();
+ ret = orw_expect(NULL, 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(comment, "comment")
+{
+ int ret;
+
+ orw_open();
+ orw_output("# comment\n");
+ orw_rewind();
+ ret = orw_expect(NULL, 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(whitespace_before_comment, "whitespace before comment")
+{
+ int ret;
+
+ orw_open();
+ orw_output(" # comment\n");
+ orw_rewind();
+ ret = orw_expect(NULL, 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+
+/***************************************************************************
+ * Simple cases - no quotes or escapes
+ */
+
+T_FUNC(single_word, "single word")
+{
+ const char *word = "hello";
+ int ret;
+
+ orw_open();
+ orw_output("%s\n", word);
+ orw_rewind();
+ ret = orw_expect(word, 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(single_whitespace_before_word, "single whitespace before word")
+{
+ const char *word = "hello";
+ int ret;
+
+ orw_open();
+ orw_output(" %s\n", word);
+ orw_rewind();
+ ret = orw_expect(word, 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(double_whitespace_before_word, "double whitespace before word")
+{
+ const char *word = "hello";
+ int ret;
+
+ orw_open();
+ orw_output(" %s\n", word);
+ orw_rewind();
+ ret = orw_expect(word, 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(single_whitespace_after_word, "single whitespace after word")
+{
+ const char *word = "hello";
+ int ret;
+
+ orw_open();
+ orw_output("%s \n", word);
+ orw_rewind();
+ ret = orw_expect(word, 0 /*lines*/, 0 /*eof*/, 0 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(double_whitespace_after_word, "double whitespace after word")
+{
+ const char *word = "hello";
+ int ret;
+
+ orw_open();
+ orw_output("%s \n", word);
+ orw_rewind();
+ ret = orw_expect(word, 0 /*lines*/, 0 /*eof*/, 0 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(comment_after_word, "comment after word")
+{
+ const char *word = "hello";
+ int ret;
+
+ orw_open();
+ orw_output("%s # comment\n", word);
+ orw_rewind();
+ ret = orw_expect(word, 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect(NULL, 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(word_containing_hash, "word containing hash")
+{
+ const char *word = "hello#world";
+ int ret;
+
+ orw_open();
+ orw_output("%s\n", word);
+ orw_rewind();
+ ret = orw_expect(word, 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(two_words, "two words")
+{
+ const char *word[] = { "hello", "world" };
+ int ret;
+
+ orw_open();
+ orw_output("%s %s\n", word[0], word[1]);
+ orw_rewind();
+ ret = orw_expect(word[0], 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect(word[1], 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+
+/***************************************************************************
+ * Escapes
+ */
+
+T_FUNC(naked_escape, "naked escape")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\\");
+ orw_rewind();
+ ret = orw_expect(NULL, 0 /*lines*/, 1 /*eof*/, 0 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_escape, "escaped escape")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\\\\\n");
+ orw_rewind();
+ ret = orw_expect("\\", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_whitespace, "escaped whitespace")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\\ \\\t \\\r \\\n\n");
+ orw_rewind();
+ ret = orw_expect(" ", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\t", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\r", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ /* this last one is a line continuation */
+ orw_expect(NULL, 1 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_newline_before_word, "escaped newline before word")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\\\nhello world\n");
+ orw_rewind();
+ ret = orw_expect("hello", 1 /*lines*/, 0 /*eof*/, 0 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_newline_within_word, "escaped newline within word")
+{
+ int ret;
+
+ orw_open();
+ orw_output("hello\\\nworld\n");
+ orw_rewind();
+ ret = orw_expect("helloworld", 1 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_newline_after_word, "escaped newline after word")
+{
+ int ret;
+
+ orw_open();
+ orw_output("hello\\\n world\n");
+ orw_rewind();
+ ret = orw_expect("hello", 1 /*lines*/, 0 /*eof*/, 0 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_letter, "escaped letter")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\\z\n");
+ orw_rewind();
+ ret = orw_expect("z", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+
+/***************************************************************************
+ * Quotes
+ */
+
+T_FUNC(naked_single_quote, "naked single quote")
+{
+ int ret;
+
+ orw_open();
+ orw_output("'");
+ orw_rewind();
+ ret = orw_expect(NULL, 0 /*lines*/, 1 /*eof*/, 0 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(naked_double_quote, "naked double quote")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\"");
+ orw_rewind();
+ ret = orw_expect(NULL, 0 /*lines*/, 1 /*eof*/, 0 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(empty_single_quotes, "empty single quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("''\n");
+ orw_rewind();
+ ret = orw_expect("", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(empty_double_quotes, "empty double quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\"\"\n");
+ orw_rewind();
+ ret = orw_expect("", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(single_quotes_within_double_quotes, "single quotes within double quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\"' '\"\n");
+ orw_rewind();
+ ret = orw_expect("' '", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(double_quotes_within_single_quotes, "double quotes within single quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("'\" \"'\n");
+ orw_rewind();
+ ret = orw_expect("\" \"", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(single_quoted_whitespace, "single-quoted whitespace")
+{
+ int ret;
+
+ orw_open();
+ orw_output("' ' '\t' '\r' '\n'\n");
+ orw_rewind();
+ ret = orw_expect(" ", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\t", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\r", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\n", 1 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(double_quoted_whitespace, "double-quoted whitespace")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\" \" \"\t\" \"\r\" \"\n\"\n");
+ orw_rewind();
+ ret = orw_expect(" ", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\t", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\r", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\n", 1 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(single_quoted_words, "single-quoted words")
+{
+ int ret;
+
+ orw_open();
+ orw_output("'hello world'\n");
+ orw_rewind();
+ ret = orw_expect("hello world", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(double_quoted_words, "double-quoted words")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\"hello world\"\n");
+ orw_rewind();
+ ret = orw_expect("hello world", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+
+/***************************************************************************
+ * Combinations of escape and quotes
+ */
+
+T_FUNC(escaped_single_quote,
+ "escaped single quote")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\\'\n");
+ orw_rewind();
+ ret = orw_expect("'", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_double_quote,
+ "escaped double quote")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\\\"\n");
+ orw_rewind();
+ ret = orw_expect("\"", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_whitespace_within_single_quotes,
+ "escaped whitespace within single quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("'\\ ' '\\\t' '\\\r' '\\\n'\n");
+ orw_rewind();
+ ret = orw_expect("\\ ", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\\\t", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\\\r", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\\\n", 1 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_whitespace_within_double_quotes,
+ "escaped whitespace within double quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\"\\ \" \"\\\t\" \"\\\r\" \"\\\n\"\n");
+ orw_rewind();
+ ret = orw_expect("\\ ", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\\\t", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ orw_expect("\\\r", 0 /*lines*/, 0 /*eof*/, 0 /*eol*/) &&
+ /* this last one is a line continuation */
+ orw_expect("", 1 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_letter_within_single_quotes,
+ "escaped letter within single quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("'\\z'\n");
+ orw_rewind();
+ ret = orw_expect("\\z", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_letter_within_double_quotes,
+ "escaped letter within double quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\"\\z\"\n");
+ orw_rewind();
+ ret = orw_expect("\\z", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_escape_within_single_quotes,
+ "escaped escape within single quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("'\\\\'\n");
+ orw_rewind();
+ ret = orw_expect("\\\\", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_escape_within_double_quotes,
+ "escaped escape within double quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\"\\\\\"\n");
+ orw_rewind();
+ ret = orw_expect("\\", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_single_quote_within_single_quotes,
+ "escaped single quote within single quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("'\\''\n");
+ orw_rewind();
+ ret = orw_expect(NULL, 1 /*lines*/, 1 /*eof*/, 0 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_double_quote_within_single_quotes,
+ "escaped double quote within single quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("'\\\"'\n");
+ orw_rewind();
+ ret = orw_expect("\\\"", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_single_quote_within_double_quotes,
+ "escaped single quote within double quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\"\\'\"\n");
+ orw_rewind();
+ ret = orw_expect("\\'", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+T_FUNC(escaped_double_quote_within_double_quotes,
+ "escaped double quote within double quotes")
+{
+ int ret;
+
+ orw_open();
+ orw_output("\"\\\"\"\n");
+ orw_rewind();
+ ret = orw_expect("\"", 0 /*lines*/, 0 /*eof*/, 1 /*eol*/);
+ orw_close();
+ return (ret);
+}
+
+
+/***************************************************************************
+ * Boilerplate
+ */
+
+const struct t_test *t_plan[] = {
+ T(empty_input),
+ T(empty_line),
+ T(single_whitespace),
+ T(multiple_whitespace),
+ T(comment),
+ T(whitespace_before_comment),
+
+ T(single_word),
+ T(single_whitespace_before_word),
+ T(double_whitespace_before_word),
+ T(single_whitespace_after_word),
+ T(double_whitespace_after_word),
+ T(comment_after_word),
+ T(word_containing_hash),
+ T(two_words),
+
+ T(naked_escape),
+ T(escaped_escape),
+ T(escaped_whitespace),
+ T(escaped_newline_before_word),
+ T(escaped_newline_within_word),
+ T(escaped_newline_after_word),
+ T(escaped_letter),
+
+ T(naked_single_quote),
+ T(naked_double_quote),
+ T(empty_single_quotes),
+ T(empty_double_quotes),
+ T(single_quotes_within_double_quotes),
+ T(double_quotes_within_single_quotes),
+ T(single_quoted_whitespace),
+ T(double_quoted_whitespace),
+ T(single_quoted_words),
+ T(double_quoted_words),
+
+ T(escaped_single_quote),
+ T(escaped_double_quote),
+ T(escaped_whitespace_within_single_quotes),
+ T(escaped_whitespace_within_double_quotes),
+ T(escaped_letter_within_single_quotes),
+ T(escaped_letter_within_double_quotes),
+ T(escaped_escape_within_single_quotes),
+ T(escaped_escape_within_double_quotes),
+ T(escaped_single_quote_within_single_quotes),
+ T(escaped_double_quote_within_single_quotes),
+ T(escaped_single_quote_within_double_quotes),
+ T(escaped_double_quote_within_double_quotes),
+
+ NULL
+};
+
+const struct t_test **
+t_prepare(int argc, char *argv[])
+{
+
+ (void)argc;
+ (void)argv;
+ snprintf(filename, sizeof filename, "%s.%d.tmp", t_progname, getpid());
+ if (filename == NULL)
+ err(1, "asprintf()");
+ return (t_plan);
+}
+
+void
+t_cleanup(void)
+{
+}
diff --git a/contrib/tcpdump/CHANGES b/contrib/tcpdump/CHANGES
index 33f453b7d528..2fa51b9d0091 100644
--- a/contrib/tcpdump/CHANGES
+++ b/contrib/tcpdump/CHANGES
@@ -1,3 +1,64 @@
+Friday December 9, 2011. guy@alum.mit.edu.
+ Summary for 4.2.1 tcpdump release
+ Only build the Babel printer if IPv6 is enabled.
+ Support Babel on port 6696 as well as 6697.
+ Include ppi.h in release tarball.
+ Include all the test files in the release tarball, and don't
+ "include" test files that no longer exist.
+ Don't assume we have <rpc/rpc.h> - check for it.
+ Support "-T carp" as a way of dissecting IP protocol 112 as CARP
+ rather than VRRP.
+ Support Hilscher NetAnalyzer link-layer header format.
+ Constify some pointers and fix compiler warnings.
+ Get rid of never-true test.
+ Fix an unintended fall-through in a case statement in the ARP
+ printer.
+ Fix several cases where sizeof(sizeof(XXX)) was used when just
+ sizeof(XXX) was intended.
+ Make stricter sanity checks in the ES-IS printer.
+ Get rid of some GCCisms that caused builds to fai with compilers
+ that don't support them.
+ Fix typo in man page.
+ Added length checks to Babel printer.
+
+Sunday July 24, 2011. mcr@sandelman.ca.
+ Summary for 4.2.+
+ merged 802.15.4 decoder from Dmitry Eremin-Solenikov <dbaryshkov
+ at gmail dot com>
+ updates to forces for new port numbers
+ Use "-H", not "-h", for the 802.11s option. (-h always help)
+ Better ICMPv6 checksum handling.
+ add support for the RPKI/Router Protocol, per -ietf-sidr-rpki-rtr-12
+ get rid of uuencoded pcap test files, git can do binary.
+ sFlow changes for 64-bit counters.
+ fixes for PPI packet header handling and printing.
+ Add DCB Exchange protocol (DCBX) version 1.01.
+ Babel dissector, from Juliusz Chroboczek and Grégoire Henry.
+ improvements to radiotap for rate values > 127.
+ Many improvements to ForCES decode, including fix SCTP TML port
+ updated RPL type code to RPL-17 draft
+ Improve printout of DHCPv6 options.
+ added support and test case for QinQ (802.1q VLAN) packets
+ Handle DLT_IEEE802_15_4_NOFCS like DLT_IEEE802_15_4.
+ Build fixes for Sparc and other machines with alignment restrictions.
+ Merged changes from Debian package.
+ PGM: Add ACK decoding and add PGMCC DATA and FEEDBACK options.
+ Build fixes for OSX (Snow Leopard and others)
+ Add support for IEEE 802.15.4 packets
+
+Tue. July 20, 2010. guy@alum.mit.edu.
+ Summary for 4.1.2 tcpdump release
+ If -U is specified, flush the file after creating it, so it's
+ not zero-length
+ Fix TCP flags output description, and some typoes, in the man
+ page
+ Add a -h flag, and only attempt to recognize 802.11s mesh
+ headers if it's set
+ When printing the link-layer type list, send *all* output to
+ stderr
+ Include the CFLAGS setting when configure was run in the
+ compiler flags
+
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 4.1.1 tcpdump release
Fix build on systems with PF, such as FreeBSD and OpenBSD.
diff --git a/contrib/tcpdump/CREDITS b/contrib/tcpdump/CREDITS
index 0a3b56eb238f..9e7e875769be 100644
--- a/contrib/tcpdump/CREDITS
+++ b/contrib/tcpdump/CREDITS
@@ -1,189 +1,203 @@
This file lists people who have contributed to tcpdump:
The current maintainers:
- Bill Fenner <fenner at research dot att dot com>
- David Young <dyoung at pobox dot com>
- Fulvio Risso <risso at polito dot it>
- Guy Harris <guy at alum dot mit dot edu>
- Hannes Gredler <hannes at juniper dot net>
- Michael Richardson <mcr at sandelman dot ottawa dot on dot ca>
+ Bill Fenner <fenner at research dot att dot com>
+ David Young <dyoung at pobox dot com>
+ Fulvio Risso <risso at polito dot it>
+ Guy Harris <guy at alum dot mit dot edu>
+ Hannes Gredler <hannes at juniper dot net>
+ Michael Richardson <mcr at sandelman dot ottawa dot on dot ca>
Additional people who have contributed patches:
- Aaron Campbell <aaron at arbor dot net>
- Alfredo Andres <aandres at s21sec dot com>
- Albert Chin <china at thewrittenword dot com>
- Ananth Suryanarayana <anantha at juniper dot net>
- Andrea Bittau <a dot bittau at cs dot ucl dot ac dot uk>
- Andrew Brown <atatat at atatdot dot net>
- Andrew Church <andrew at users dot sourceforge dot net>
- Andrew Hintz <adhintz at users dot sourceforge dot net>
- Andrew Silent <andrew at nording dot ru>
- Andrew Tridgell <tridge at linuxcare dot com>
- Andy Heffernan <ahh at juniper dot net>
- Arkadiusz Miskiewicz <misiek at pld dot org dot pl>
- Armando L. Caro Jr. <acaro at mail dot eecis dot udel dot edu>
- Arnaldo Carvalho de Melo <acme at ghostprotocols dot net>
- Ben Byer <bushing at sourceforge dot net>
- Atsushi Onoe <onoe at netbsd dot org>
- Ben Smithurst <ben at scientia dot demon dot co dot uk>
- Bert Vermeulen <bert at biot dot com>
- Bjoern A. Zeeb <bzeeb at Zabbadoz dot NeT>
- Brent L. Bates <blbates at vigyan dot com>
- Brian Ginsbach <ginsbach at cray dot com>
- Bruce M. Simpson <bms at spc dot org>
- Carles Kishimoto Bisbe <ckishimo at ac dot upc dot es>
- Charlie Lenahan <clenahan at fortresstech dot com>
- Charles M. Hannum <mycroft at netbsd dot org>
- Chris Cogdon <chris at cogdon dot org>
- Chris G. Demetriou <cgd at netbsd dot org>
- Christian Sievers <c_s at users dot sourceforge dot net>
- Chris Jepeway <jepeway at blasted-heath dot com>
- Chris Larson <clarson at kergoth dot com>
- Craig Rodrigues <rodrigc at mediaone dot net>
- Crist J. Clark <cjclark at alum dot mit dot edu>
- Daniel Hagerty <hag at ai dot mit dot edu>
- Darren Reed <darrenr at reed dot wattle dot id dot au>
- David Binderman <d dot binderman at virgin dot net>
- David Horn <dhorn2000 at gmail dot com>
- David Smith <dsmith at redhat dot com>
- David Young <dyoung at ojctech dot com>
- Don Ebright <Don dot Ebright at compuware dot com>
- Eddie Kohler <xexd at sourceforge dot net>
- Elmar Kirchner <elmar at juniper dot net>
- Fang Wang <fangwang at sourceforge dot net>
- Florent Drouin <Florent dot Drouin at alcatel-lucent dot fr>
- Florian Forster <octo at verplant dot org>
- Francis Dupont <Francis dot Dupont at enst-bretagne dot fr>
- Francisco Matias Cuenca-Acuna <mcuenca at george dot rutgers dot edu>
- Francois-Xavier Le Bail <fx dot lebail at yahoo dot com>
- Frank Volf <volf at oasis dot IAEhv dot nl>
- Fulvio Risso <risso at polito dot it>
- George Bakos <gbakos at ists dot dartmouth dot edu>
- Gerald Combs <gerald at ethereal dot com>
- Gerrit Renker <gerrit at erg dot abdn dot ac dot uk>
- Gert Doering <gert at greenie dot muc dot de>
- Greg Minshall <minshall at acm dot org>
- Greg Stark <gsstark at mit dot edu>
- Gilbert Ramirez Jr. <gram at xiexie dot org>
- Gisle Vanem <giva at bgnett dot no>
- Hannes Viertel <hviertel at juniper dot net>
- Hank Leininger <tcpdump-workers at progressive-comp dot com>
- Harry Raaymakers <harryr at connect dot com dot au>
- Heinz-Ado Arnolds <Ado dot Arnolds at dhm-systems dot de>
- Hendrik Scholz <hendrik at scholz dot net>
- Ian McDonald <imcdnzl at gmail dot com>
- Ilpo Järvinen <ilpo dot jarvinen at helsinki dot fi>
- Jacek Tobiasz <Jacek dot Tobiasz at atm dot com dot pl>
- Jakob Schlyter <jakob at openbsd dot org>
- Jamal Hadi Salim <hadi at cyberus dot ca>
- Jan Oravec <wsx at wsx6 dot net>
- Jason R. Thorpe <thorpej at netbsd dot org>
- Jefferson Ogata <jogata at nodc dot noaa dot gov>
- Jeffrey Hutzelman <jhutz at cmu dot edu>
- Jesper Peterson <jesper at endace dot com>
- Jim Hutchins <jim at ca dot sandia dot gov>
- Jonathan Heusser <jonny at drugphish dot ch>
- Tatuya Jinmei <jinmei at kame dot net>
- João Medeiros <ignotus21 at sourceforge dot net>
- Joerg Mayer <jmayer@loplof.de>
- Jørgen Thomsen <jth at jth dot net>
- Julian Cowley <julian at lava dot net>
- Kaarthik Sivakumar <kaarthik at torrentnet dot com>
- Karl Norby <karl-norby at sourceforge dot net>
- Kazushi Sugyo <sugyo at pb dot jp dot nec dot com>
- Kelly Carmichael <kcarmich at ipapp dot com>
- Ken Hornstein <kenh at cmf dot nrl dot navy dot mil>
- Kevin Steves <stevesk at pobox dot com>
- Klaus Klein <kleink at reziprozitaet dot de>
- Kris Kennaway <kris at freebsd dot org>
- Krzysztof Halasa <khc at pm dot waw dot pl>
- Larry Lile <lile at stdio dot com>
- Lennert Buytenhek <buytenh at gnu dot org>
- Loris Degioanni <loris at netgroup-serv dot polito dot it>
- Love Hörnquist-Åstrand <lha at stacken dot kth dot se>
- Lucas C. Villa Real <lucasvr at us dot ibm dot com>
- Luis Martin Garcia <luis dot mgarc at gmail dot com>
- Maciej W. Rozycki <macro at ds2 dot pg dot gda dot pl>
- Manu Pathak <mapathak at cisco dot com>
- Marc Binderberger <mbind at sourceforge dot net>
- Marc A. Lehmann <pcg at goof dot com>
- Mark Ellzey Thomas <mark at ackers dot net>
- Marko Kiiskila <carnil at cs dot tut dot fi>
- Markus Schöpflin <schoepflin at sourceforge dot net>
- Marshall Rose <mrose at dbc dot mtview dot ca dot us>
- Martin Husemann <martin at netbsd dot org>
- Max Laier <max at love2party dot net>
- Michael A. Meffie III <meffie at sourceforge dot net>
- Michael Madore <mmadore at turbolinux dot com>
- Michael Riepe <too-tired at sourceforge dot net>
- Michael Shalayeff <mickey at openbsd dot org>
- Michael Shields <shields at msrl dot com>
- Michael T. Stolarchuk <mts at off dot to>
- Michele "mydecay" Marchetto <smarchetto1 at tin dot it>
- Mike Frysinger <vapier at gmail dot com>
- Monroe Williams <monroe at pobox dot com>
- Motonori Shindo <mshindo at mshindo dot net>
- Nathan J. Williams <nathanw at MIT dot EDU>
- Nathaniel Couper-Noles <Nathaniel at isi1 dot tccisi dot com>
- Neil T. Spring <bluehal at users dot sourceforge dot net>
- Niels Provos <provos at openbsd dot org>
- Nickolai Zeldovich <kolya at MIT dot EDU>
- Nicolas Ferrero <toorop at babylo dot net>
- Noritoshi Demizu <demizu at users dot sourceforge dot net>
- Olaf Kirch <okir at caldera dot de>
- Onno van der Linden <onno at simplex dot nl>
- Paolo Abeni <paolo dot abeni at email dot it>
- Pascal Hennequin <pascal dot hennequin at int-evry dot fr>
- Pasvorn Boonmark <boonmark at juniper dot net>
- Paul Mundt <lethal at linux-sh dot org>
- Paul S. Traina <pst at freebsd dot org>
- Pavlin Radoslavov <pavlin at icir dot org>
- Pekka Savola <pekkas at netcore dot fi>
- Peter Fales <peter at fales-lorenz dot net>
- Peter Jeremy <peter dot jeremy at alcatel dot com dot au>
- <pfhunt at users dot sourceforge dot net>
- Peter Volkov <pva at gentoo dot org>
- Phil Wood <cpw at lanl dot gov>
- Rafal Maszkowski <rzm at icm dot edu dot pl>
- Randy Sofia <rsofia at users dot sourceforge dot net>
- Raphael Raimbault <raphael dot raimbault at netasq dot com>
- Rick Cheng <rcheng at juniper dot net>
- Rick Jones <rick dot jones2 at hp dot com>
- Rick Watson <watsonrick at users dot sourceforge dot net>
- Rob Braun <bbraun at synack dot net>
- Robert Edmonds <stu-42 at sourceforge dot net>
- Roderick Schertler <roderick at argon dot org>
- Sagun Shakya <sagun dot shakya at sun dot com>
- Sami Farin <safari at iki dot fi>
- Scott Rose <syberpunk at users dot sourceforge dot net>
- Sebastian Krahmer <krahmer at cs dot uni-potsdam dot de>
- Sebastien Raveau <sebastien dot raveau at epita dot fr>
- Sebastien Vincent <svincent at idems dot fr>
- Sepherosa Ziehau <sepherosa at gmail dot com>
- Seth Webster <swebster at sst dot ll dot mit dot edu>
- Shinsuke Suzuki <suz at kame dot net>
- Steinar Haug <sthaug at nethelp dot no>
- Swaminathan Chandrasekaran <chander at juniper dot net>
- Takashi Yamamoto <yamt at mwd dot biglobe dot ne dot jp>
- Terry Kennedy <terry at tmk dot com>
- Timo Koskiahde
- Tony Li <tli at procket dot com>
- Toshihiro Kanda <candy at fct dot kgc dot co dot jp>
- Uns Lider <unslider at miranda dot org>
- Victor Oppleman <oppleman at users dot sourceforge dot net>
- Wesley Griffin <wgriffin at users dot sourceforge dot net>
- Wesley Shields <wxs at FreeBSD dot org>
- Wilbert de Graaf <wilbertdg at hetnet dot nl>
- Will Drewry <will at alum dot bu dot edu>
- William J. Hulley <bill dot hulley at gmail dot com>
- Yen Yen Lim
- Yoshifumi Nishida
+ A Costa <agcosta at gis dot net>
+ Aaron Campbell <aaron at arbor dot net>
+ Alfredo Andres <aandres at s21sec dot com>
+ Albert Chin <china at thewrittenword dot com>
+ Ananth Suryanarayana <anantha at juniper dot net>
+ Andrea Bittau <a dot bittau at cs dot ucl dot ac dot uk>
+ Andrew Brown <atatat at atatdot dot net>
+ Andrew Church <andrew at users dot sourceforge dot net>
+ Andrew Hintz <adhintz at users dot sourceforge dot net>
+ Andrew Nording <andrew at nording dot ru>
+ Andrew Tridgell <tridge at linuxcare dot com>
+ Andy Heffernan <ahh at juniper dot net>
+ Anton Bernal <anton at juniper dot net>
+ Arkadiusz Miskiewicz <misiek at pld dot org dot pl>
+ Armando L. Caro Jr. <acaro at mail dot eecis dot udel dot edu>
+ Arnaldo Carvalho de Melo <acme at ghostprotocols dot net>
+ Ben Byer <bushing at sourceforge dot net>
+ Atsushi Onoe <onoe at netbsd dot org>
+ Ben Smithurst <ben at scientia dot demon dot co dot uk>
+ Bert Vermeulen <bert at biot dot com>
+ Bjoern A. Zeeb <bzeeb at Zabbadoz dot NeT>
+ Brent L. Bates <blbates at vigyan dot com>
+ Brian Ginsbach <ginsbach at cray dot com>
+ Bruce M. Simpson <bms at spc dot org>
+ Carles Kishimoto Bisbe <ckishimo at ac dot upc dot es>
+ Charlie Lenahan <clenahan at fortresstech dot com>
+ Charles M. Hannum <mycroft at netbsd dot org>
+ Chris Cogdon <chris at cogdon dot org>
+ Chris G. Demetriou <cgd at netbsd dot org>
+ Chris Jepeway <jepeway at blasted-heath dot com>
+ Chris Larson <clarson at kergoth dot com>
+ Christian Sievers <c_s at users dot sourceforge dot net>
+ Christophe Rhodes <csr21 at cantab dot net>
+ Craig Rodrigues <rodrigc at mediaone dot net>
+ Crist J. Clark <cjclark at alum dot mit dot edu>
+ Daniel Hagerty <hag at ai dot mit dot edu>
+ Darren Reed <darrenr at reed dot wattle dot id dot au>
+ David Binderman <d dot binderman at virgin dot net>
+ David Horn <dhorn2000 at gmail dot com>
+ David Smith <dsmith at redhat dot com>
+ David Young <dyoung at ojctech dot com>
+ Dmitry Eremin-Solenikov <dbaryshkov at gmail dot com>
+ Don Ebright <Don dot Ebright at compuware dot com>
+ Eddie Kohler <xexd at sourceforge dot net>
+ Elmar Kirchner <elmar at juniper dot net>
+ Fang Wang <fangwang at sourceforge dot net>
+ Florent Drouin <Florent dot Drouin at alcatel-lucent dot fr>
+ Florian Forster <octo at verplant dot org>
+ Francis Dupont <Francis dot Dupont at enst-bretagne dot fr>
+ Francisco Matias Cuenca-Acuna <mcuenca at george dot rutgers dot edu>
+ Francois-Xavier Le Bail <fx dot lebail at yahoo dot com>
+ Frank Volf <volf at oasis dot IAEhv dot nl>
+ Fulvio Risso <risso at polito dot it>
+ George Bakos <gbakos at ists dot dartmouth dot edu>
+ Gerald Combs <gerald at ethereal dot com>
+ Gerrit Renker <gerrit at erg dot abdn dot ac dot uk>
+ Gert Doering <gert at greenie dot muc dot de>
+ Greg Minshall <minshall at acm dot org>
+ Greg Stark <gsstark at mit dot edu>
+ Grégoire Henry <henry@pps.jussieu.fr>
+ Gilbert Ramirez Jr. <gram at xiexie dot org>
+ Gisle Vanem <gvanem at broadpark dot no>
+ Hannes Viertel <hviertel at juniper dot net>
+ Hank Leininger <tcpdump-workers at progressive-comp dot com>
+ Harry Raaymakers <harryr at connect dot com dot au>
+ Heinz-Ado Arnolds <Ado dot Arnolds at dhm-systems dot de>
+ Hendrik Scholz <hendrik at scholz dot net>
+ Ian McDonald <imcdnzl at gmail dot com>
+ Ilpo Järvinen <ilpo dot jarvinen at helsinki dot fi>
+ Jacek Tobiasz <Jacek dot Tobiasz at atm dot com dot pl>
+ Jakob Schlyter <jakob at openbsd dot org>
+ Jamal Hadi Salim <hadi at cyberus dot ca>
+ Jan Oravec <wsx at wsx6 dot net>
+ Jason R. Thorpe <thorpej at netbsd dot org>
+ Jefferson Ogata <jogata at nodc dot noaa dot gov>
+ Jeffrey Hutzelman <jhutz at cmu dot edu>
+ Jesper Peterson <jesper at endace dot com>
+ Jim Hutchins <jim at ca dot sandia dot gov>
+ Jonathan Heusser <jonny at drugphish dot ch>
+ Tatuya Jinmei <jinmei at kame dot net>
+ João Medeiros <ignotus21 at sourceforge dot net>
+ Joerg Mayer <jmayer@loplof.de>
+ Jørgen Thomsen <jth at jth dot net>
+ Julian Cowley <julian at lava dot net>
+ Juliusz Chroboczek <jch@pps.jussieu.fr>
+ Kaarthik Sivakumar <kaarthik at torrentnet dot com>
+ Kaladhar Musunuru <kaladharm at sourceforge dot net>
+ Karl Norby <karl-norby at sourceforge dot net>
+ Kazushi Sugyo <sugyo at pb dot jp dot nec dot com>
+ Kelly Carmichael <kcarmich at ipapp dot com>
+ Ken Hornstein <kenh at cmf dot nrl dot navy dot mil>
+ Kevin Steves <stevesk at pobox dot com>
+ Klaus Klein <kleink at reziprozitaet dot de>
+ Kris Kennaway <kris at freebsd dot org>
+ Krzysztof Halasa <khc at pm dot waw dot pl>
+ Larry Lile <lile at stdio dot com>
+ Lennert Buytenhek <buytenh at gnu dot org>
+ Loris Degioanni <loris at netgroup-serv dot polito dot it>
+ Love Hörnquist-Åstrand <lha at stacken dot kth dot se>
+ Lucas C. Villa Real <lucasvr at us dot ibm dot com>
+ Luis MartinGarcia <luis dot mgarc at gmail dot com>
+ Maciej W. Rozycki <macro at ds2 dot pg dot gda dot pl>
+ Manu Pathak <mapathak at cisco dot com>
+ Marc Binderberger <mbind at sourceforge dot net>
+ Marc A. Lehmann <pcg at goof dot com>
+ Mark Ellzey Thomas <mark at ackers dot net>
+ Marko Kiiskila <carnil at cs dot tut dot fi>
+ Markus Schöpflin <schoepflin at sourceforge dot net>
+ Marshall Rose <mrose at dbc dot mtview dot ca dot us>
+ Martin Husemann <martin at netbsd dot org>
+ Max Laier <max at love2party dot net>
+ Michael A. Meffie III <meffie at sourceforge dot net>
+ Michael Madore <mmadore at turbolinux dot com>
+ Michael Riepe <too-tired at sourceforge dot net>
+ Michael Shalayeff <mickey at openbsd dot org>
+ Michael Shields <shields at msrl dot com>
+ Michael T. Stolarchuk <mts at off dot to>
+ Michal Sekletar <msekleta at redhat dot com>
+ Michele "mydecay" Marchetto <smarchetto1 at tin dot it>
+ Mike Frysinger <vapier at gmail dot com>
+ Minto Jeyananth <minto at juniper dot net>
+ Monroe Williams <monroe at pobox dot com>
+ Motonori Shindo <mshindo at mshindo dot net>
+ Nathan J. Williams <nathanw at MIT dot EDU>
+ Nathaniel Couper-Noles <Nathaniel at isi1 dot tccisi dot com>
+ Neil T. Spring <bluehal at users dot sourceforge dot net>
+ Niels Provos <provos at openbsd dot org>
+ Nickolai Zeldovich <kolya at MIT dot EDU>
+ Nicolas Ferrero <toorop at babylo dot net>
+ Noritoshi Demizu <demizu at users dot sourceforge dot net>
+ Olaf Kirch <okir at caldera dot de>
+ Onno van der Linden <onno at simplex dot nl>
+ Paolo Abeni <paolo dot abeni at email dot it>
+ Pascal Hennequin <pascal dot hennequin at int-evry dot fr>
+ Pasvorn Boonmark <boonmark at juniper dot net>
+ Paul Ferrell <pflarr at sourceforge dot net>
+ Paul Mundt <lethal at linux-sh dot org>
+ Paul S. Traina <pst at freebsd dot org>
+ Pavlin Radoslavov <pavlin at icir dot org>
+ Pawel Worach <pawel dot worach at gmail dot com>
+ Pekka Savola <pekkas at netcore dot fi>
+ Peter Fales <peter at fales-lorenz dot net>
+ Peter Jeremy <peter dot jeremy at alcatel dot com dot au>
+ <pfhunt at users dot sourceforge dot net>
+ Peter Volkov <pva at gentoo dot org>
+ Phil Wood <cpw at lanl dot gov>
+ Rafal Maszkowski <rzm at icm dot edu dot pl>
+ Randy Sofia <rsofia at users dot sourceforge dot net>
+ Raphael Raimbault <raphael dot raimbault at netasq dot com>
+ Rick Cheng <rcheng at juniper dot net>
+ Rick Jones <rick dot jones2 at hp dot com>
+ Rick Watson <watsonrick at users dot sourceforge dot net>
+ Rob Braun <bbraun at synack dot net>
+ Robert Edmonds <stu-42 at sourceforge dot net>
+ Roderick Schertler <roderick at argon dot org>
+ Romain Francoise <rfrancoise at debian dot org>
+ Sagun Shakya <sagun dot shakya at sun dot com>
+ Sami Farin <safari at iki dot fi>
+ Scott Mcmillan <scott.a.mcmillan at intel dot com>
+ Scott Rose <syberpunk at users dot sourceforge dot net>
+ Sebastian Krahmer <krahmer at cs dot uni-potsdam dot de>
+ Sebastien Raveau <sebastien dot raveau at epita dot fr>
+ Sebastien Vincent <svincent at idems dot fr>
+ Sepherosa Ziehau <sepherosa at gmail dot com>
+ Seth Webster <swebster at sst dot ll dot mit dot edu>
+ Shinsuke Suzuki <suz at kame dot net>
+ Steinar Haug <sthaug at nethelp dot no>
+ Swaminathan Chandrasekaran <chander at juniper dot net>
+ Takashi Yamamoto <yamt at mwd dot biglobe dot ne dot jp>
+ Terry Kennedy <terry at tmk dot com>
+ Timo Koskiahde
+ Tony Li <tli at procket dot com>
+ Toshihiro Kanda <candy at fct dot kgc dot co dot jp>
+ Uns Lider <unslider at miranda dot org>
+ Victor Oppleman <oppleman at users dot sourceforge dot net>
+ Weesan Lee <weesan at juniper dot net>
+ Wesley Griffin <wgriffin at users dot sourceforge dot net>
+ Wesley Shields <wxs at FreeBSD dot org>
+ Wilbert de Graaf <wilbertdg at hetnet dot nl>
+ Will Drewry <will at alum dot bu dot edu>
+ William J. Hulley <bill dot hulley at gmail dot com>
+ Yen Yen Lim
+ Yoshifumi Nishida
The original LBL crew:
- Steve McCanne
- Craig Leres
- Van Jacobson
+ Steve McCanne
+ Craig Leres
+ Van Jacobson
Past maintainers:
- Jun-ichiro itojun Hagino <itojun at iijlab dot net>
+ Jun-ichiro itojun Hagino <itojun at iijlab dot net>
diff --git a/contrib/tcpdump/Makefile.in b/contrib/tcpdump/Makefile.in
index 8e7b73b4cf6a..d7a81bc64948 100644
--- a/contrib/tcpdump/Makefile.in
+++ b/contrib/tcpdump/Makefile.in
@@ -26,6 +26,7 @@
# Top level hierarchy
prefix = @prefix@
exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
# Pathname of directory to install the binary
sbindir = @sbindir@
# Pathname of directory to install the man page
@@ -46,7 +47,8 @@ INCLS = -I. @V_INCLS@
DEFS = @DEFS@ @CPPFLAGS@ @V_DEFS@
# Standard CFLAGS
-CFLAGS = $(CCOPT) $(DEFS) $(INCLS)
+CFLAGS = @CFLAGS@
+FULL_CFLAGS = $(CCOPT) $(DEFS) $(INCLS) $(CFLAGS)
# Standard LDFLAGS
LDFLAGS = @LDFLAGS@
@@ -64,15 +66,15 @@ RANLIB = @RANLIB@
# problem if you don't own the file but can write to the directory.
.c.o:
@rm -f $@
- $(CC) $(CFLAGS) -c $(srcdir)/$*.c
+ $(CC) $(FULL_CFLAGS) -c $(srcdir)/$*.c
CSRC = addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c \
- nlpid.c l2vpn.c machdep.c parsenfsfh.c \
- print-802_11.c print-ap1394.c print-ah.c print-arcnet.c \
- print-aodv.c print-arp.c print-ascii.c print-atalk.c print-atm.c \
- print-beep.c print-bfd.c print-bgp.c print-bootp.c print-bt.c \
- print-cdp.c print-cfm.c print-chdlc.c print-cip.c print-cnfp.c \
- print-dccp.c print-decnet.c \
+ nlpid.c l2vpn.c machdep.c parsenfsfh.c in_cksum.c \
+ print-802_11.c print-802_15_4.c print-ap1394.c print-ah.c \
+ print-arcnet.c print-aodv.c print-arp.c print-ascii.c print-atalk.c \
+ print-atm.c print-beep.c print-bfd.c print-bgp.c \
+ print-bootp.c print-bt.c print-carp.c print-cdp.c print-cfm.c \
+ print-chdlc.c print-cip.c print-cnfp.c print-dccp.c print-decnet.c \
print-domain.c print-dtp.c print-dvmrp.c print-enc.c print-egp.c \
print-eap.c print-eigrp.c\
print-esp.c print-ether.c print-fddi.c print-fr.c \
@@ -83,8 +85,9 @@ CSRC = addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c
print-lmp.c print-lspping.c print-lwapp.c \
print-lwres.c print-mobile.c print-mpcp.c print-mpls.c print-msdp.c \
print-nfs.c print-ntp.c print-null.c print-olsr.c print-ospf.c \
- print-pgm.c print-pim.c print-ppp.c print-pppoe.c print-pptp.c \
- print-radius.c print-raw.c print-rip.c print-rrcp.c print-rsvp.c \
+ print-pgm.c print-pim.c \
+ print-ppi.c print-ppp.c print-pppoe.c print-pptp.c \
+ print-radius.c print-raw.c print-rip.c print-rpki-rtr.c print-rrcp.c print-rsvp.c \
print-rx.c print-sctp.c print-sflow.c print-sip.c print-sl.c print-sll.c \
print-slow.c print-snmp.c print-stp.c print-sunatm.c print-sunrpc.c \
print-symantec.c print-syslog.c print-tcp.c print-telnet.c print-tftp.c \
@@ -165,6 +168,7 @@ HDR = \
oui.h \
pcap-missing.h \
pmap_prot.h \
+ ppi.h \
ppp.h \
route6d.h \
rpc_auth.h \
@@ -226,16 +230,12 @@ EXTRA_DIST = \
lbl/os-ultrix4.h \
makemib \
missing/addrinfo.h \
- missing/addrsize.h \
- missing/bittypes.h \
missing/dlnames.c \
missing/datalinks.c \
missing/getnameinfo.c \
missing/inet_aton.c \
missing/inet_ntop.c \
missing/inet_pton.c \
- missing/resolv6.h \
- missing/resolv_ext.h \
missing/snprintf.c \
missing/sockstorage.h \
missing/strdup.c \
@@ -245,6 +245,7 @@ EXTRA_DIST = \
mkdep \
packetdat.awk \
pcap_dump_ftell.c \
+ print-babel.c \
print-dhcp6.c \
print-frag6.c \
print-icmp6.c \
@@ -262,12 +263,18 @@ EXTRA_DIST = \
stime.awk \
strcasecmp.c \
tcpdump.1.in \
- tests/02-sunrise-sunset-esp.puu \
- tests/08-sunrise-sunset-aes.puu \
- tests/08-sunrise-sunset-esp2.puu \
+ tests/02-sunrise-sunset-esp.pcap \
+ tests/08-sunrise-sunset-aes.pcap \
+ tests/08-sunrise-sunset-esp2.pcap \
+ tests/QinQpacket.out \
+ tests/QinQpacket.pcap \
+ tests/QinQpacketv.out \
tests/TESTLIST \
tests/TESTonce \
tests/TESTrun.sh \
+ tests/babel.pcap \
+ tests/babel1.out \
+ tests/babel1v.out \
tests/bgp-infinite-loop.pcap \
tests/bgp_vpn_attrset.out \
tests/bgp_vpn_attrset.pcap \
@@ -279,8 +286,8 @@ EXTRA_DIST = \
tests/e1000g.pcap \
tests/eapon1.gdbinit \
tests/eapon1.out \
- tests/eapon1.puu \
- tests/eapon2.puu \
+ tests/eapon1.pcap \
+ tests/empty.uu \
tests/esp-secrets.txt \
tests/esp0.out \
tests/esp1.gdbinit \
@@ -292,61 +299,57 @@ EXTRA_DIST = \
tests/esp5.gdbinit \
tests/esp5.out \
tests/espudp1.out \
- tests/espudp1.puu \
+ tests/espudp1.pcap \
tests/forces1.out \
tests/forces1.pcap \
tests/forces1vvv.out \
tests/forces1vvvv.out \
tests/forces2.out \
- tests/forces2.pcap \
tests/forces2v.out \
tests/forces2vv.out \
- tests/ikev2.puu \
+ tests/forces3vvv.out \
tests/ikev2four.out \
- tests/ikev2four.puu \
+ tests/ikev2four.pcap \
tests/ikev2fourv.out \
tests/ikev2fourv4.out \
tests/ikev2pI2-secrets.txt \
tests/ikev2pI2.out \
- tests/ikev2pI2.puu \
- tests/isakmp-delete-segfault.puu \
- tests/isakmp-identification-segfault.puu \
- tests/isakmp-pointer-loop.puu \
+ tests/ikev2pI2.pcap \
+ tests/isakmp-delete-segfault.pcap \
+ tests/isakmp-identification-segfault.pcap \
+ tests/isakmp-pointer-loop.pcap \
tests/isakmp1.out \
tests/isakmp2.out \
tests/isakmp3.out \
tests/isakmp4.out \
- tests/isakmp4500.puu \
+ tests/isakmp4500.pcap \
tests/isis-infinite-loop.pcap \
tests/ldp-infinite-loop.pcap \
tests/lmp.out \
- tests/lmp.puu \
+ tests/lmp.pcap \
tests/lmp.sh \
tests/lspping-fec-ldp.pcap \
tests/lspping-fec-rsvp.pcap \
tests/mpls-ldp-hello.out \
- tests/mpls-ldp-hello.puu \
+ tests/mpls-ldp-hello.pcap \
tests/mpls-traceroute.pcap \
tests/ospf-gmpls.out \
- tests/ospf-gmpls.puu \
+ tests/ospf-gmpls.pcap \
tests/print-A.out \
tests/print-AA.out \
tests/print-capX.out \
tests/print-capXX.out \
- tests/print-flags.puu \
+ tests/print-flags.pcap \
tests/print-flags.sh \
tests/print-x.out \
tests/print-xx.out \
tests/rsvp-infinite-loop.pcap \
+ tests/sflow_multiple_counter_30_pdus.out \
+ tests/sflow_multiple_counter_30_pdus.pcap \
vfprintf.c \
- win32/Include/Arpa/tftp.h \
win32/Include/errno.h \
win32/Include/getopt.h \
- win32/Include/inetprivate.h \
- win32/Include/telnet.h \
win32/Include/w32_fzs.h \
- win32/Include/Netinet/in_systm.h \
- win32/Include/Netinet/ip.h \
win32/Src/getopt.c \
win32/prj/GNUmakefile \
win32/prj/WinDump.dsp \
@@ -356,7 +359,7 @@ all: $(PROG)
$(PROG): $(OBJ) @V_PCAPDEP@
@rm -f $@
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
+ $(CC) $(FULL_CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
$(LIBNETDISSECT): $(LIBNETDISSECT_OBJ)
@rm -f $@
@@ -364,30 +367,30 @@ $(LIBNETDISSECT): $(LIBNETDISSECT_OBJ)
$(RANLIB) $@
datalinks.o: $(srcdir)/missing/datalinks.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/datalinks.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/datalinks.c
dlnames.o: $(srcdir)/missing/dlnames.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/dlnames.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/dlnames.c
getnameinfo.o: $(srcdir)/missing/getnameinfo.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/getnameinfo.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/getnameinfo.c
getaddrinfo.o: $(srcdir)/missing/getaddrinfo.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/getaddrinfo.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/getaddrinfo.c
inet_pton.o: $(srcdir)/missing/inet_pton.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/inet_pton.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/inet_pton.c
inet_ntop.o: $(srcdir)/missing/inet_ntop.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/inet_ntop.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/inet_ntop.c
inet_aton.o: $(srcdir)/missing/inet_aton.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/inet_aton.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/inet_aton.c
snprintf.o: $(srcdir)/missing/snprintf.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c
strlcat.o: $(srcdir)/missing/strlcat.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/strlcat.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strlcat.c
strlcpy.o: $(srcdir)/missing/strlcpy.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/strlcpy.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strlcpy.c
strsep.o: $(srcdir)/missing/strsep.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/strsep.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strsep.c
version.o: version.c
- $(CC) $(CFLAGS) -c version.c
+ $(CC) $(FULL_CFLAGS) -c version.c
version.c: $(srcdir)/VERSION
@rm -f $@
@@ -423,9 +426,9 @@ clean:
distclean:
rm -f $(CLEANFILES) Makefile config.cache config.log config.status \
config.h gnuc.h os-proto.h stamp-h stamp-h.in $(PROG).1
+ rm -rf autom4te.cache
check: tcpdump
- uudecode --help || (echo "No uudecode program found, not running tests"; echo "apt-get/rpm install sharutils?"; exit 1)
(cd tests && ./TESTrun.sh)
tags: $(TAGFILES)
diff --git a/contrib/tcpdump/VERSION b/contrib/tcpdump/VERSION
index 627a3f43a64f..fae6e3d04b2c 100644
--- a/contrib/tcpdump/VERSION
+++ b/contrib/tcpdump/VERSION
@@ -1 +1 @@
-4.1.1
+4.2.1
diff --git a/contrib/tcpdump/acconfig.h b/contrib/tcpdump/acconfig.h
index 97417969a27c..9eb54f8b3dfa 100644
--- a/contrib/tcpdump/acconfig.h
+++ b/contrib/tcpdump/acconfig.h
@@ -8,12 +8,6 @@
/* Define if you enable support for the libsmi. */
#undef LIBSMI
-/* define if you have struct __res_state_ext */
-#undef HAVE_RES_STATE_EXT
-
-/* define if your struct __res_state has the nsort member */
-#undef HAVE_NEW_RES_STATE
-
/* define if you have the addrinfo function. */
#undef HAVE_ADDRINFO
@@ -23,15 +17,6 @@
/* define ifyou have the h_errno variable. */
#undef HAVE_H_ERRNO
-/* define if IN6ADDRSZ is defined (XXX not used!) */
-#undef HAVE_IN6ADDRSZ
-
-/* define if INADDRSZ is defined (XXX not used!) */
-#undef HAVE_INADDRSZ
-
-/* define if RES_USE_INET6 is defined */
-#undef HAVE_RES_USE_INET6
-
/* define if you have struct sockaddr_storage */
#undef HAVE_SOCKADDR_STORAGE
@@ -68,9 +53,6 @@
/* define if you have getrpcbynumber() */
#undef HAVE_GETRPCBYNUMBER
-/* AIX hack. */
-#undef _SUN
-
/* Workaround for missing 64-bit formats */
#undef PRId64
#undef PRIo64
diff --git a/contrib/tcpdump/addrtoname.c b/contrib/tcpdump/addrtoname.c
index 2f5b46605475..41ddcc683588 100644
--- a/contrib/tcpdump/addrtoname.c
+++ b/contrib/tcpdump/addrtoname.c
@@ -510,6 +510,34 @@ etheraddr_string(register const u_char *ep)
}
const char *
+le64addr_string(const u_char *ep)
+{
+ const unsigned int len = 8;
+ register u_int i;
+ register char *cp;
+ register struct enamemem *tp;
+ char buf[BUFSIZE];
+
+ tp = lookup_bytestring(ep, len);
+ if (tp->e_name)
+ return (tp->e_name);
+
+ cp = buf;
+ for (i = len; i > 0 ; --i) {
+ *cp++ = hex[*(ep + i - 1) >> 4];
+ *cp++ = hex[*(ep + i - 1) & 0xf];
+ *cp++ = ':';
+ }
+ cp --;
+
+ *cp = '\0';
+
+ tp->e_name = strdup(buf);
+
+ return (tp->e_name);
+}
+
+const char *
linkaddr_string(const u_char *ep, const unsigned int type, const unsigned int len)
{
register u_int i;
diff --git a/contrib/tcpdump/addrtoname.h b/contrib/tcpdump/addrtoname.h
index 1df204a941f4..cd5c41f4a5ff 100644
--- a/contrib/tcpdump/addrtoname.h
+++ b/contrib/tcpdump/addrtoname.h
@@ -34,6 +34,7 @@ enum {
extern const char *linkaddr_string(const u_char *, const unsigned int, const unsigned int);
extern const char *etheraddr_string(const u_char *);
+extern const char *le64addr_string(const u_char *);
extern const char *etherproto_string(u_short);
extern const char *tcpport_string(u_short);
extern const char *udpport_string(u_short);
diff --git a/contrib/tcpdump/bootp.h b/contrib/tcpdump/bootp.h
index 65ca3766c713..b1b81dce9084 100644
--- a/contrib/tcpdump/bootp.h
+++ b/contrib/tcpdump/bootp.h
@@ -37,7 +37,7 @@ struct bootp {
u_int8_t bp_sname[64]; /* server host name */
u_int8_t bp_file[128]; /* boot file name */
u_int8_t bp_vend[64]; /* vendor-specific area */
-};
+} UNALIGNED;
/*
* UDP port numbers, server and client.
@@ -217,7 +217,7 @@ struct cmu_vend {
struct in_addr v_ins1, v_ins2; /* IEN-116 name servers */
struct in_addr v_ts1, v_ts2; /* Time servers */
u_int8_t v_unused[24]; /* currently unused */
-};
+} UNALIGNED;
/* v_flags values */
diff --git a/contrib/tcpdump/config.h.in b/contrib/tcpdump/config.h.in
index 20c3fcf394a9..9ee068be14fe 100644
--- a/contrib/tcpdump/config.h.in
+++ b/contrib/tcpdump/config.h.in
@@ -8,12 +8,6 @@
/* Define if you enable support for the libsmi. */
#undef LIBSMI
-/* define if you have struct __res_state_ext */
-#undef HAVE_RES_STATE_EXT
-
-/* define if your struct __res_state has the nsort member */
-#undef HAVE_NEW_RES_STATE
-
/* define if you have the addrinfo function. */
#undef HAVE_ADDRINFO
@@ -23,15 +17,6 @@
/* define ifyou have the h_errno variable. */
#undef HAVE_H_ERRNO
-/* define if IN6ADDRSZ is defined (XXX not used!) */
-#undef HAVE_IN6ADDRSZ
-
-/* define if INADDRSZ is defined (XXX not used!) */
-#undef HAVE_INADDRSZ
-
-/* define if RES_USE_INET6 is defined */
-#undef HAVE_RES_USE_INET6
-
/* define if you have struct sockaddr_storage */
#undef HAVE_SOCKADDR_STORAGE
@@ -68,9 +53,6 @@
/* define if you have getrpcbynumber() */
#undef HAVE_GETRPCBYNUMBER
-/* AIX hack. */
-#undef _SUN
-
/* Workaround for missing 64-bit formats */
#undef PRId64
#undef PRIo64
@@ -108,6 +90,9 @@
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
/* Define to 1 if you have the `getnameinfo' function. */
#undef HAVE_GETNAMEINFO
@@ -165,6 +150,9 @@
/* Define to 1 if you have the `pcap_lib_version' function. */
#undef HAVE_PCAP_LIB_VERSION
+/* Define to 1 if you have the `pcap_set_tstamp_type' function. */
+#undef HAVE_PCAP_SET_TSTAMP_TYPE
+
/* Define to 1 if you have the <pcap/usb.h> header file. */
#undef HAVE_PCAP_USB_H
@@ -174,6 +162,9 @@
/* Define to 1 if you have the <rpc/rpcent.h> header file. */
#undef HAVE_RPC_RPCENT_H
+/* Define to 1 if you have the <rpc/rpc.h> header file. */
+#undef HAVE_RPC_RPC_H
+
/* Define to 1 if you have the `setlinebuf' function. */
#undef HAVE_SETLINEBUF
@@ -237,6 +228,9 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
+
/* Define to 1 if you have the `vfprintf' function. */
#undef HAVE_VFPRINTF
@@ -276,21 +270,6 @@
/* return value of signal handlers */
#undef RETSIGVAL
-/* The size of `char', as computed by sizeof. */
-#undef SIZEOF_CHAR
-
-/* The size of `int', as computed by sizeof. */
-#undef SIZEOF_INT
-
-/* The size of `long', as computed by sizeof. */
-#undef SIZEOF_LONG
-
-/* The size of `long long', as computed by sizeof. */
-#undef SIZEOF_LONG_LONG
-
-/* The size of `short', as computed by sizeof. */
-#undef SIZEOF_SHORT
-
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
@@ -303,6 +282,9 @@
/* needed on HP-UX */
#undef _HPUX_SOURCE
+/* define on AIX to get certain functions */
+#undef _SUN
+
/* define if your compiler allows __attribute__((format)) to be applied to
function pointers */
#undef __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS
diff --git a/contrib/tcpdump/configure b/contrib/tcpdump/configure
index cb51d19c8057..f481d333d3f9 100755
--- a/contrib/tcpdump/configure
+++ b/contrib/tcpdump/configure
@@ -1267,6 +1267,7 @@ if test -n "$ac_init_help"; then
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-universal don't build universal on OS X
--enable-smb enable possibly-buggy SMB printer default=yes
--disable-smb disable possibly-buggy SMB printer
--enable-ipv6 enable ipv6 (with ipv4) support
@@ -1845,7 +1846,7 @@ fi
V_CCOPT="-O"
V_INCLS=""
if test "${srcdir}" != "." ; then
- V_INCLS="-I\$(srcdir)"
+ V_INCLS="-I$srcdir"
fi
if test "${CFLAGS+set}" = set; then
LBL_CFLAGS="$CFLAGS"
@@ -3217,7 +3218,8 @@ if test "${ac_cv___attribute__+set}" = set; then
else
cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
+
+ /* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
@@ -3290,7 +3292,8 @@ if test "${ac_cv___attribute___format_function_pointer+set}" = set; then
else
cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
+
+ /* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
@@ -3986,7 +3989,8 @@ done
-for ac_header in fcntl.h rpc/rpcent.h netdnet/dnetdb.h
+
+for ac_header in fcntl.h rpc/rpc.h rpc/rpcent.h netdnet/dnetdb.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -4387,6 +4391,36 @@ fi
case "$host_os" in
+darwin*)
+ # Check whether --enable-universal was given.
+if test "${enable_universal+set}" = set; then
+ enableval=$enable_universal;
+fi
+
+ if test "$enable_universal" != "no"; then
+ case "$host_os" in
+
+ darwin9.*)
+ #
+ # Leopard. Build for x86 and 32-bit PowerPC, with
+ # x86 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch i386 -arch ppc"
+ LDFLAGS="$LDFLAGS -arch i386 -arch ppc"
+ ;;
+
+ darwin10.*)
+ #
+ # Snow Leopard. Build for x86-64 and x86, with
+ # x86-64 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch x86_64 -arch i386"
+ LDFLAGS="$LDFLAGS -arch x86_64 -arch i386"
+ ;;
+ esac
+ fi
+ ;;
+
linux*)
{ echo "$as_me:$LINENO: checking Linux kernel version" >&5
echo $ECHO_N "checking Linux kernel version... $ECHO_C" >&6; }
@@ -4807,7 +4841,7 @@ if test "${enable_ipv6+set}" = set; then
enableval=$enable_ipv6; case "$enableval" in
yes) { echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6; }
- LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c $LOCALSRC"
+ LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c print-babel.c $LOCALSRC"
cat >>confdefs.h <<\_ACEOF
#define INET6 1
_ACEOF
@@ -4867,7 +4901,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(exit $ac_status); }; }; then
{ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6; }
- LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c $LOCALSRC"
+ LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c print-babel.c $LOCALSRC"
cat >>confdefs.h <<\_ACEOF
#define INET6 1
_ACEOF
@@ -5467,2032 +5501,6 @@ _ACEOF
fi
-{ echo "$as_me:$LINENO: checking for char" >&5
-echo $ECHO_N "checking for char... $ECHO_C" >&6; }
-if test "${ac_cv_type_char+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef char ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_char=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_char=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5
-echo "${ECHO_T}$ac_cv_type_char" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of char" >&5
-echo $ECHO_N "checking size of char... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_char+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_char=$ac_lo;;
-'') if test "$ac_cv_type_char" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (char)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_char=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_char=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_char" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (char)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_char=0
- fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
-echo "${ECHO_T}$ac_cv_sizeof_char" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_CHAR $ac_cv_sizeof_char
-_ACEOF
-
-
-{ echo "$as_me:$LINENO: checking for short" >&5
-echo $ECHO_N "checking for short... $ECHO_C" >&6; }
-if test "${ac_cv_type_short+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef short ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_short=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_short=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
-echo "${ECHO_T}$ac_cv_type_short" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of short" >&5
-echo $ECHO_N "checking size of short... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_short+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_short=$ac_lo;;
-'') if test "$ac_cv_type_short" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_short=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_short=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_short" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_short=0
- fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
-echo "${ECHO_T}$ac_cv_sizeof_short" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
-
-
-{ echo "$as_me:$LINENO: checking for int" >&5
-echo $ECHO_N "checking for int... $ECHO_C" >&6; }
-if test "${ac_cv_type_int+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef int ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_int=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_int=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
-echo "${ECHO_T}$ac_cv_type_int" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of int" >&5
-echo $ECHO_N "checking size of int... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_int+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_int=$ac_lo;;
-'') if test "$ac_cv_type_int" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_int=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_int=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_int" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_int=0
- fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
-echo "${ECHO_T}$ac_cv_sizeof_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
-
-
-{ echo "$as_me:$LINENO: checking for long" >&5
-echo $ECHO_N "checking for long... $ECHO_C" >&6; }
-if test "${ac_cv_type_long+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef long ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_long=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_long=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
-echo "${ECHO_T}$ac_cv_type_long" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of long" >&5
-echo $ECHO_N "checking size of long... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_long+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_long=$ac_lo;;
-'') if test "$ac_cv_type_long" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_long=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_long" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long=0
- fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
-echo "${ECHO_T}$ac_cv_sizeof_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
-
-
-{ echo "$as_me:$LINENO: checking for long long" >&5
-echo $ECHO_N "checking for long long... $ECHO_C" >&6; }
-if test "${ac_cv_type_long_long+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef long long ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_long_long=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_long_long=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
-echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of long long" >&5
-echo $ECHO_N "checking size of long long... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_long_long+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_long_long=$ac_lo;;
-'') if test "$ac_cv_type_long_long" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long_long=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_long_long=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_long_long" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long_long=0
- fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
-echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
-
-
-
{ echo "$as_me:$LINENO: checking for addrinfo" >&5
echo $ECHO_N "checking for addrinfo... $ECHO_C" >&6; }
@@ -7706,326 +5714,6 @@ if test "$ac_cv_sa_storage" = no; then
fi
- ac_cv_addrsz=yes
- { echo "$as_me:$LINENO: checking for INADDRSZ" >&5
-echo $ECHO_N "checking for INADDRSZ... $ECHO_C" >&6; }
- if test "${ac_cv_inaddrsz+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include <arpa/nameser.h>
-int
-main ()
-{
-int a = INADDRSZ
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_inaddrsz=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_inaddrsz=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { echo "$as_me:$LINENO: result: $ac_cv_inaddrsz" >&5
-echo "${ECHO_T}$ac_cv_inaddrsz" >&6; }
- if test $ac_cv_inaddrsz = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_INADDRSZ 1
-_ACEOF
-
- else
- ac_cv_addrsz=no
- fi
- { echo "$as_me:$LINENO: checking for IN6ADDRSZ" >&5
-echo $ECHO_N "checking for IN6ADDRSZ... $ECHO_C" >&6; }
- if test "${ac_cv_in6addrsz+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include <arpa/nameser.h>
-int
-main ()
-{
-int a = IN6ADDRSZ
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_in6addrsz=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_in6addrsz=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { echo "$as_me:$LINENO: result: $ac_cv_in6addrsz" >&5
-echo "${ECHO_T}$ac_cv_in6addrsz" >&6; }
- if test $ac_cv_in6addrsz = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_IN6ADDRSZ 1
-_ACEOF
-
- else
- ac_cv_addrsz=no
- fi
-
-if test "$ac_cv_addrsz" = no; then
- missing_includes=yes
-fi
-
-
- { echo "$as_me:$LINENO: checking for RES_USE_INET6" >&5
-echo $ECHO_N "checking for RES_USE_INET6... $ECHO_C" >&6; }
- if test "${ac_cv_res_inet6+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <resolv.h>
-int
-main ()
-{
-int a = RES_USE_INET6
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_res_inet6=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_res_inet6=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { echo "$as_me:$LINENO: result: $ac_cv_res_inet6" >&5
-echo "${ECHO_T}$ac_cv_res_inet6" >&6; }
- if test $ac_cv_res_inet6 = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_RES_USE_INET6 1
-_ACEOF
-
- fi
-
-if test "$ac_cv_res_inet6" = no; then
- missing_includes=yes
-fi
-
-
- { echo "$as_me:$LINENO: checking for res_state_ext" >&5
-echo $ECHO_N "checking for res_state_ext... $ECHO_C" >&6; }
- if test "${ac_cv_res_state_ext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <netinet6/in6.h>
-# include <resolv.h>
-int
-main ()
-{
-struct __res_state_ext e
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_res_state_ext=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_res_state_ext=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { echo "$as_me:$LINENO: result: $ac_cv_res_state_ext" >&5
-echo "${ECHO_T}$ac_cv_res_state_ext" >&6; }
- if test $ac_cv_res_state_ext = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_RES_STATE_EXT 1
-_ACEOF
-
- fi
-
-if test "$ac_cv_res_state_ext" = no; then
- missing_includes=yes
-fi
-
-
- { echo "$as_me:$LINENO: checking for nsort in res_state" >&5
-echo $ECHO_N "checking for nsort in res_state... $ECHO_C" >&6; }
- if test "${ac_cv_res_state+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <netinet6/in6.h>
-# include <resolv.h>
-int
-main ()
-{
-struct __res_state e; e.nsort = 0
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_res_state=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_res_state=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { echo "$as_me:$LINENO: result: $ac_cv_res_state" >&5
-echo "${ECHO_T}$ac_cv_res_state" >&6; }
- if test $ac_cv_res_state = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_NEW_RES_STATE 1
-_ACEOF
-
- fi
-
-
-
-
@@ -8133,7 +5821,9 @@ done
-for ac_func in strftime
+
+
+for ac_func in fork vfork strftime
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -9465,8 +7155,9 @@ echo "${ECHO_T}not found" >&6; }
#
# Look for pcap-config.
#
- # Extract the first word of "pcap-config", so it can be a program name with args.
-set dummy pcap-config; ac_word=$2
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pcap-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pcap-config; ac_word=$2
{ echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_PCAP_CONFIG+set}" = set; then
@@ -9505,13 +7196,82 @@ echo "${ECHO_T}no" >&6; }
fi
+fi
+if test -z "$ac_cv_path_PCAP_CONFIG"; then
+ ac_pt_PCAP_CONFIG=$PCAP_CONFIG
+ # Extract the first word of "pcap-config", so it can be a program name with args.
+set dummy pcap-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_ac_pt_PCAP_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $ac_pt_PCAP_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PCAP_CONFIG="$ac_pt_PCAP_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ac_pt_PCAP_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PCAP_CONFIG=$ac_cv_path_ac_pt_PCAP_CONFIG
+if test -n "$ac_pt_PCAP_CONFIG"; then
+ { echo "$as_me:$LINENO: result: $ac_pt_PCAP_CONFIG" >&5
+echo "${ECHO_T}$ac_pt_PCAP_CONFIG" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+ if test "x$ac_pt_PCAP_CONFIG" = x; then
+ PCAP_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ PCAP_CONFIG=$ac_pt_PCAP_CONFIG
+ fi
+else
+ PCAP_CONFIG="$ac_cv_path_PCAP_CONFIG"
+fi
+
if test -n "$PCAP_CONFIG" ; then
#
# Found - use it to get the include flags for
# libpcap and the flags to link with libpcap.
#
- V_INCLS="`\"$PCAP_CONFIG\" --cflags` $V_INCLS"
- libpcap="`\"$PCAP_CONFIG\" --libs`"
+ # Please read section 11.6 "Shell Substitutions"
+ # in the autoconf manual before doing anything
+ # to this that involves quoting. Especially note
+ # the statement "There is just no portable way to use
+ # double-quoted strings inside double-quoted back-quoted
+ # expressions (pfew!)."
+ #
+ cflags=`"$PCAP_CONFIG" --cflags`
+ V_INCLS="$cflags $V_INCLS"
+ libpcap=`"$PCAP_CONFIG" --libs`
else
#
# Not found; look for pcap.
@@ -9659,9 +7419,17 @@ fi
# The libpcap directory has a pcap-config script.
# Use it to get any additioal libraries needed
# to link with the libpcap archive library in
- # that directory
+ # that directory.
#
- libpcap="$libpcap `\"$PCAP_CONFIG\" --additional-libs --static`"
+ # Please read section 11.6 "Shell Substitutions"
+ # in the autoconf manual before doing anything
+ # to this that involves quoting. Especially note
+ # the statement "There is just no portable way to use
+ # double-quoted strings inside double-quoted back-quoted
+ # expressions (pfew!)."
+ #
+ additional_libs=`"$PCAP_CONFIG" --additional-libs --static`
+ libpcap="$libpcap $additional_libs"
fi
fi
LIBS="$libpcap $LIBS"
@@ -9700,6 +7468,100 @@ echo "${ECHO_T}yes" >&6; }
esac
fi
+ { echo "$as_me:$LINENO: checking for pcap_loop" >&5
+echo $ECHO_N "checking for pcap_loop... $ECHO_C" >&6; }
+if test "${ac_cv_func_pcap_loop+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define pcap_loop to an innocuous variant, in case <limits.h> declares pcap_loop.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define pcap_loop innocuous_pcap_loop
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char pcap_loop (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef pcap_loop
+
+/* 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 pcap_loop ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_pcap_loop || defined __stub___pcap_loop
+choke me
+#endif
+
+int
+main ()
+{
+return pcap_loop ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_func_pcap_loop=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_pcap_loop=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_pcap_loop" >&5
+echo "${ECHO_T}$ac_cv_func_pcap_loop" >&6; }
+if test $ac_cv_func_pcap_loop = yes; then
+ :
+else
+
+ { { echo "$as_me:$LINENO: error: Report this to tcpdump-workers@lists.tcpdump.org, and include the
+config.log file in your report" >&5
+echo "$as_me: error: Report this to tcpdump-workers@lists.tcpdump.org, and include the
+config.log file in your report" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+
+
{ echo "$as_me:$LINENO: checking for pcap_list_datalinks" >&5
echo $ECHO_N "checking for pcap_list_datalinks... $ECHO_C" >&6; }
if test "${ac_cv_func_pcap_list_datalinks+set}" = set; then
@@ -11173,7 +9035,9 @@ fi
#
# Do we have the new open API? Check for pcap_create, and assume that,
-# if we do, we also have pcap_activate() and the other new routines.
+# if we do, we also have pcap_activate() and the other new routines
+# introduced in libpcap 1.0.0.
+#
for ac_func in pcap_create
do
@@ -11268,6 +9132,106 @@ _ACEOF
fi
done
+if test $ac_cv_func_pcap_create = "yes" ; then
+ #
+ # OK, do we have pcap_set_tstamp_type? If so, assume we have
+ # pcap_list_tstamp_types and pcap_free_tstamp_types as well.
+ #
+
+for ac_func in pcap_set_tstamp_type
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* 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 $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+fi
@@ -11734,7 +9698,8 @@ MAN_MISC_INFO=7
case "$host_os" in
aix*)
- cat >>confdefs.h <<\_ACEOF
+
+cat >>confdefs.h <<\_ACEOF
#define _SUN 1
_ACEOF
@@ -11783,294 +9748,6 @@ if test -f /dev/bpf0 ; then
V_GROUP=bpf
fi
-#
-# Check for some headers introduced in later versions of libpcap
-# and used by some printers.
-#
-savedcppflags="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $V_INCLS"
-
-for ac_header in pcap/bluetooth.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in pcap/usb.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-CPPFLAGS="$savedcppflags"
-
for ac_header in sys/bitypes.h
do
@@ -13364,6 +11041,133 @@ fi
fi
+#
+# Check for some headers introduced in later versions of libpcap
+# and used by some printers.
+#
+# Those headers use the {u_}intN_t types, so we must do this after
+# we check for what's needed to get them defined.
+#
+savedcppflags="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $V_INCLS"
+
+for ac_header in pcap/bluetooth.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <tcpdump-stdinc.h>
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in pcap/usb.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <tcpdump-stdinc.h>
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+CPPFLAGS="$savedcppflags"
+
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
@@ -13944,6 +11748,7 @@ _ACEOF
fi
+ savedppflags="$CPPLAGS"
CPPFLAGS="$CPPFLAGS $V_INCLS"
for ac_header in openssl/evp.h
@@ -14085,6 +11890,7 @@ fi
done
+ CPPFLAGS="$savedcppflags"
else
#
# Not found. Did the user explicitly ask for it?
@@ -14100,8 +11906,8 @@ echo "$as_me: error: SSLeay not found" >&2;}
fi
if test "$missing_includes" = "yes"; then
- CPPFLAGS="$CPPFLAGS -I\$(srcdir)/missing"
- V_INCLS="$V_INCLS -I\$(srcdir)/missing"
+ CPPFLAGS="$CPPFLAGS -I$srcdir/missing"
+ V_INCLS="$V_INCLS -I$srcdir/missing"
fi
diff --git a/contrib/tcpdump/configure.in b/contrib/tcpdump/configure.in
index eb3e5e8b1ddf..4ac664ecf099 100755
--- a/contrib/tcpdump/configure.in
+++ b/contrib/tcpdump/configure.in
@@ -29,7 +29,7 @@ AC_C___ATTRIBUTE__
if test "$ac_cv___attribute__" = "yes"; then
AC_C___ATTRIBUTE___FORMAT_FUNCTION_POINTER
fi
-AC_CHECK_HEADERS(fcntl.h rpc/rpcent.h netdnet/dnetdb.h)
+AC_CHECK_HEADERS(fcntl.h rpc/rpc.h rpc/rpcent.h netdnet/dnetdb.h)
AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>])
@@ -60,6 +60,33 @@ AC_HEADER_TIME
case "$host_os" in
+darwin*)
+ AC_ARG_ENABLE(universal,
+ AC_HELP_STRING([--disable-universal],[don't build universal on OS X]))
+ if test "$enable_universal" != "no"; then
+ case "$host_os" in
+
+ darwin9.*)
+ #
+ # Leopard. Build for x86 and 32-bit PowerPC, with
+ # x86 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch i386 -arch ppc"
+ LDFLAGS="$LDFLAGS -arch i386 -arch ppc"
+ ;;
+
+ darwin10.*)
+ #
+ # Snow Leopard. Build for x86-64 and x86, with
+ # x86-64 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch x86_64 -arch i386"
+ LDFLAGS="$LDFLAGS -arch x86_64 -arch i386"
+ ;;
+ esac
+ fi
+ ;;
+
linux*)
AC_MSG_CHECKING(Linux kernel version)
if test "$cross_compiling" = yes; then
@@ -172,7 +199,7 @@ AC_ARG_ENABLE(ipv6,
--disable-ipv6 disable ipv6 support],
[ case "$enableval" in
yes) AC_MSG_RESULT(yes)
- LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c $LOCALSRC"
+ LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c print-babel.c $LOCALSRC"
AC_DEFINE(INET6)
ipv6=yes
;;
@@ -194,7 +221,7 @@ main()
}
],
[ AC_MSG_RESULT(yes)
- LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c $LOCALSRC"
+ LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c print-babel.c $LOCALSRC"
AC_DEFINE(INET6)
ipv6=yes],
[ AC_MSG_RESULT(no)
@@ -468,15 +495,6 @@ if test "$td_cv_decl_netdnet_dnetdb_h_dnet_htoa" = yes; then
fi
dnl
-dnl check sizeof basic types.
-dnl They're very likely to be wrong for cross-compiling.
-AC_CHECK_SIZEOF(char, 1)
-AC_CHECK_SIZEOF(short, 2)
-AC_CHECK_SIZEOF(int, 4)
-AC_CHECK_SIZEOF(long, 4)
-AC_CHECK_SIZEOF(long long, 8)
-
-dnl
dnl Checks for addrinfo structure
AC_STRUCT_ADDRINFO(ac_cv_addrinfo)
if test "$ac_cv_addrinfo" = no; then
@@ -504,34 +522,8 @@ if test "$ac_cv_sa_storage" = no; then
missing_includes=yes
fi
-dnl
-dnl Checks for IN[6]ADDRSZ
-AC_CHECK_ADDRSZ(ac_cv_addrsz)
-if test "$ac_cv_addrsz" = no; then
- missing_includes=yes
-fi
-
-dnl
-dnl Checks for RES_USE_INET6
-AC_CHECK_RES_USE_INET6(ac_cv_res_inet6)
-if test "$ac_cv_res_inet6" = no; then
- missing_includes=yes
-fi
-
-dnl
-dnl Checks for res_state_ext structure
-AC_STRUCT_RES_STATE_EXT(ac_cv_res_state_ext)
-if test "$ac_cv_res_state_ext" = no; then
- missing_includes=yes
-fi
-
-dnl
-dnl Checks if res_state structure has nsort member.
-AC_STRUCT_RES_STATE(ac_cv_res_state)
-
-
AC_REPLACE_FUNCS(vfprintf strcasecmp strlcat strlcpy strdup strsep)
-AC_CHECK_FUNCS(strftime)
+AC_CHECK_FUNCS(fork vfork strftime)
AC_CHECK_FUNCS(setlinebuf alarm)
needsnprintf=no
@@ -723,8 +715,17 @@ fi
#
# Do we have the new open API? Check for pcap_create, and assume that,
-# if we do, we also have pcap_activate() and the other new routines.
+# if we do, we also have pcap_activate() and the other new routines
+# introduced in libpcap 1.0.0.
+#
AC_CHECK_FUNCS(pcap_create)
+if test $ac_cv_func_pcap_create = "yes" ; then
+ #
+ # OK, do we have pcap_set_tstamp_type? If so, assume we have
+ # pcap_list_tstamp_types and pcap_free_tstamp_types as well.
+ #
+ AC_CHECK_FUNCS(pcap_set_tstamp_type)
+fi
AC_CHECK_FUNCS(pcap_findalldevs pcap_dump_flush pcap_lib_version)
if test $ac_cv_func_pcap_findalldevs = "yes" ; then
@@ -803,7 +804,7 @@ case "$host_os" in
aix*)
dnl Workaround to enable certain features
- AC_DEFINE(_SUN)
+ AC_DEFINE(_SUN,1,[define on AIX to get certain functions])
;;
hpux*)
@@ -849,16 +850,6 @@ if test -f /dev/bpf0 ; then
V_GROUP=bpf
fi
-#
-# Check for some headers introduced in later versions of libpcap
-# and used by some printers.
-#
-savedcppflags="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $V_INCLS"
-AC_CHECK_HEADERS(pcap/bluetooth.h)
-AC_CHECK_HEADERS(pcap/usb.h)
-CPPFLAGS="$savedcppflags"
-
AC_CHECK_HEADERS(sys/bitypes.h)
AC_CHECK_TYPE([int8_t], ,
@@ -980,6 +971,19 @@ if test "$ac_lbl_inttypes_h_defines_formats" = no; then
])
fi
+#
+# Check for some headers introduced in later versions of libpcap
+# and used by some printers.
+#
+# Those headers use the {u_}intN_t types, so we must do this after
+# we check for what's needed to get them defined.
+#
+savedcppflags="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $V_INCLS"
+AC_CHECK_HEADERS(pcap/bluetooth.h,,,[#include <tcpdump-stdinc.h>])
+AC_CHECK_HEADERS(pcap/usb.h,,,[#include <tcpdump-stdinc.h>])
+CPPFLAGS="$savedcppflags"
+
AC_PROG_RANLIB
AC_LBL_DEVEL(V_CCOPT)
@@ -1063,8 +1067,10 @@ if test "$want_libcrypto" != "no"; then
fi
AC_CHECK_LIB(crypto, DES_cbc_encrypt)
+ savedppflags="$CPPLAGS"
CPPFLAGS="$CPPFLAGS $V_INCLS"
AC_CHECK_HEADERS(openssl/evp.h)
+ CPPFLAGS="$savedcppflags"
else
#
# Not found. Did the user explicitly ask for it?
@@ -1079,8 +1085,8 @@ fi
dnl
dnl set additional include path if necessary
if test "$missing_includes" = "yes"; then
- CPPFLAGS="$CPPFLAGS -I\$(srcdir)/missing"
- V_INCLS="$V_INCLS -I\$(srcdir)/missing"
+ CPPFLAGS="$CPPFLAGS -I$srcdir/missing"
+ V_INCLS="$V_INCLS -I$srcdir/missing"
fi
AC_SUBST(V_CCOPT)
diff --git a/contrib/tcpdump/cpack.c b/contrib/tcpdump/cpack.c
index 14c0a9ee2a3e..c921b3905918 100644
--- a/contrib/tcpdump/cpack.c
+++ b/contrib/tcpdump/cpack.c
@@ -38,7 +38,7 @@
#include "cpack.h"
#include "extract.h"
-static u_int8_t *
+u_int8_t *
cpack_next_boundary(u_int8_t *buf, u_int8_t *p, size_t alignment)
{
size_t misalignment = (size_t)(p - buf) % alignment;
@@ -53,7 +53,7 @@ cpack_next_boundary(u_int8_t *buf, u_int8_t *p, size_t alignment)
* wordsize bytes remain in the buffer after the boundary. Otherwise,
* return a pointer to the boundary.
*/
-static u_int8_t *
+u_int8_t *
cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize)
{
u_int8_t *next;
diff --git a/contrib/tcpdump/cpack.h b/contrib/tcpdump/cpack.h
index 14ed37692cd9..74f97960adb8 100644
--- a/contrib/tcpdump/cpack.h
+++ b/contrib/tcpdump/cpack.h
@@ -43,6 +43,9 @@ int cpack_uint16(struct cpack_state *, u_int16_t *);
int cpack_uint32(struct cpack_state *, u_int32_t *);
int cpack_uint64(struct cpack_state *, u_int64_t *);
+u_int8_t *cpack_next_boundary(u_int8_t *buf, u_int8_t *p, size_t alignment);
+u_int8_t *cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize);
+
#define cpack_int8(__s, __p) cpack_uint8((__s), (u_int8_t*)(__p))
#define cpack_int16(__s, __p) cpack_uint16((__s), (u_int16_t*)(__p))
#define cpack_int32(__s, __p) cpack_uint32((__s), (u_int32_t*)(__p))
diff --git a/contrib/tcpdump/ethertype.h b/contrib/tcpdump/ethertype.h
index 8c2cd4acbbed..59b2afa2cb3f 100644
--- a/contrib/tcpdump/ethertype.h
+++ b/contrib/tcpdump/ethertype.h
@@ -104,6 +104,20 @@
#ifndef ETHERTYPE_8021Q
#define ETHERTYPE_8021Q 0x8100
#endif
+
+/* see:
+ http://en.wikipedia.org/wiki/IEEE_802.1Q
+ and http://en.wikipedia.org/wiki/QinQ
+*/
+#ifndef ETHERTYPE_8021Q9100
+#define ETHERTYPE_8021Q9100 0x9100
+#endif
+#ifndef ETHERTYPE_8021Q9200
+#define ETHERTYPE_8021Q9200 0x9200
+#endif
+#ifndef ETHERTYPE_8021QinQ
+#define ETHERTYPE_8021QinQ 0x88a8
+#endif
#ifndef ETHERTYPE_IPX
#define ETHERTYPE_IPX 0x8137
#endif
diff --git a/contrib/tcpdump/forces.h b/contrib/tcpdump/forces.h
index b9cf072fb611..ed497d41d7b1 100644
--- a/contrib/tcpdump/forces.h
+++ b/contrib/tcpdump/forces.h
@@ -585,7 +585,7 @@ int pkeyitlv_print(register const u_char * pptr, register u_int len,
u_int16_t op_msk, int indent);
int pdatacnt_print(register const u_char * pptr, register u_int len,
- u_int32_t IDcnt, u_int16_t op_msk, int indent);
+ u_int16_t IDcnt, u_int16_t op_msk, int indent);
int pdata_print(register const u_char * pptr, register u_int len,
u_int16_t op_msk, int indent);
diff --git a/contrib/tcpdump/ieee802_11_radio.h b/contrib/tcpdump/ieee802_11_radio.h
index 22311f125974..812b5ac31e99 100644
--- a/contrib/tcpdump/ieee802_11_radio.h
+++ b/contrib/tcpdump/ieee802_11_radio.h
@@ -158,6 +158,10 @@ struct ieee80211_radiotap_header {
* Unitless indication of the Rx/Tx antenna for this packet.
* The first antenna is antenna 0.
*
+ * IEEE80211_RADIOTAP_RX_FLAGS u_int16_t bitmap
+ *
+ * Properties of received frames. See flags defined below.
+ *
* IEEE80211_RADIOTAP_XCHANNEL u_int32_t bitmap
* u_int16_t MHz
* u_int8_t channel number
@@ -168,6 +172,25 @@ struct ieee80211_radiotap_header {
* finally the maximum regulatory transmit power cap in .5 dBm
* units. This property supersedes IEEE80211_RADIOTAP_CHANNEL
* and only one of the two should be present.
+ *
+ * IEEE80211_RADIOTAP_MCS u_int8_t known
+ * u_int8_t flags
+ * u_int8_t mcs
+ *
+ * Bitset indicating which fields have known values, followed
+ * by bitset of flag values, followed by the MCS rate index as
+ * in IEEE 802.11n.
+ *
+ * IEEE80211_RADIOTAP_VENDOR_NAMESPACE
+ * u_int8_t OUI[3]
+ * u_int8_t subspace
+ * u_int16_t length
+ *
+ * The Vendor Namespace Field contains three sub-fields. The first
+ * sub-field is 3 bytes long. It contains the vendor's IEEE 802
+ * Organizationally Unique Identifier (OUI). The fourth byte is a
+ * vendor-specific "namespace selector."
+ *
*/
enum ieee80211_radiotap_type {
IEEE80211_RADIOTAP_TSFT = 0,
@@ -184,8 +207,12 @@ enum ieee80211_radiotap_type {
IEEE80211_RADIOTAP_ANTENNA = 11,
IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
IEEE80211_RADIOTAP_DB_ANTNOISE = 13,
+ IEEE80211_RADIOTAP_RX_FLAGS = 14,
/* NB: gap for netbsd definitions */
IEEE80211_RADIOTAP_XCHANNEL = 18,
+ IEEE80211_RADIOTAP_MCS = 19,
+ IEEE80211_RADIOTAP_NAMESPACE = 29,
+ IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30,
IEEE80211_RADIOTAP_EXT = 31
};
@@ -206,6 +233,19 @@ enum ieee80211_radiotap_type {
#define IEEE80211_CHAN_HT40U 0x20000 /* HT 40 channel w/ ext above */
#define IEEE80211_CHAN_HT40D 0x40000 /* HT 40 channel w/ ext below */
+/* Useful combinations of channel characteristics, borrowed from Ethereal */
+#define IEEE80211_CHAN_A \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
+#define IEEE80211_CHAN_B \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
+#define IEEE80211_CHAN_G \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
+#define IEEE80211_CHAN_TA \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
+#define IEEE80211_CHAN_TG \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN | IEEE80211_CHAN_TURBO)
+
+
/* For IEEE80211_RADIOTAP_FLAGS */
#define IEEE80211_RADIOTAP_F_CFP 0x01 /* sent/received
* during CFP
@@ -226,6 +266,26 @@ enum ieee80211_radiotap_type {
* (to 32-bit boundary)
*/
#define IEEE80211_RADIOTAP_F_BADFCS 0x40 /* does not pass FCS check */
-#define IEEE80211_RADIOTAP_F_SHORTGI 0x80 /* HT short GI */
+
+/* For IEEE80211_RADIOTAP_RX_FLAGS */
+#define IEEE80211_RADIOTAP_F_RX_BADFCS 0x0001 /* frame failed crc check */
+#define IEEE80211_RADIOTAP_F_RX_PLCP_CRC 0x0002 /* frame failed PLCP CRC check */
+
+/* For IEEE80211_RADIOTAP_MCS known */
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_KNOWN 0x01
+#define IEEE80211_RADIOTAP_MCS_MCS_INDEX_KNOWN 0x02 /* MCS index field */
+#define IEEE80211_RADIOTAP_MCS_GUARD_INTERVAL_KNOWN 0x04
+#define IEEE80211_RADIOTAP_MCS_HT_FORMAT_KNOWN 0x08
+#define IEEE80211_RADIOTAP_MCS_FEC_TYPE_KNOWN 0x10
+
+/* For IEEE80211_RADIOTAP_MCS flags */
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_MASK 0x03
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_20 0
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_40 1
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_20L 2
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_20U 3
+#define IEEE80211_RADIOTAP_MCS_SHORT_GI 0x04 /* short guard interval */
+#define IEEE80211_RADIOTAP_MCS_HT_GREENFIELD 0x08
+#define IEEE80211_RADIOTAP_MCS_FEC_LDPC 0x10
#endif /* _NET_IF_IEEE80211RADIOTAP_H_ */
diff --git a/contrib/tcpdump/in_cksum.c b/contrib/tcpdump/in_cksum.c
new file mode 100644
index 000000000000..93cdfc9aad98
--- /dev/null
+++ b/contrib/tcpdump/in_cksum.c
@@ -0,0 +1,200 @@
+/* in_cksum.c
+ * 4.4-Lite-2 Internet checksum routine, modified to take a vector of
+ * pointers/lengths giving the pieces to be checksummed. Also using
+ * Tahoe/CGI version of ADDCARRY(x) macro instead of from portable version.
+ */
+
+/*
+ * Copyright (c) 1988, 1992, 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
+ * 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 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.
+ *
+ * @(#)in_cksum.c 8.1 (Berkeley) 6/10/93
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include "interface.h"
+
+/*
+ * Checksum routine for Internet Protocol family headers (Portable Version).
+ *
+ * This routine is very heavily used in the network
+ * code and should be modified for each CPU to be as fast as possible.
+ */
+
+#define ADDCARRY(x) {if ((x) > 65535) (x) -= 65535;}
+#define REDUCE {l_util.l = sum; sum = l_util.s[0] + l_util.s[1]; ADDCARRY(sum);}
+
+u_int16_t
+in_cksum(const struct cksum_vec *vec, int veclen)
+{
+ register const u_int16_t *w;
+ register int sum = 0;
+ register int mlen = 0;
+ int byte_swapped = 0;
+
+ union {
+ u_int8_t c[2];
+ u_int16_t s;
+ } s_util;
+ union {
+ u_int16_t s[2];
+ u_int32_t l;
+ } l_util;
+
+ for (; veclen != 0; vec++, veclen--) {
+ if (vec->len == 0)
+ continue;
+ w = (const u_int16_t *)(void *)vec->ptr;
+ if (mlen == -1) {
+ /*
+ * The first byte of this chunk is the continuation
+ * of a word spanning between this chunk and the
+ * last chunk.
+ *
+ * s_util.c[0] is already saved when scanning previous
+ * chunk.
+ */
+ s_util.c[1] = *(const u_int8_t *)w;
+ sum += s_util.s;
+ w = (const u_int16_t *)(void *)((const u_int8_t *)w + 1);
+ mlen = vec->len - 1;
+ } else
+ mlen = vec->len;
+ /*
+ * Force to even boundary.
+ */
+ if ((1 & (unsigned long) w) && (mlen > 0)) {
+ REDUCE;
+ sum <<= 8;
+ s_util.c[0] = *(const u_int8_t *)w;
+ w = (const u_int16_t *)(void *)((const u_int8_t *)w + 1);
+ mlen--;
+ byte_swapped = 1;
+ }
+ /*
+ * Unroll the loop to make overhead from
+ * branches &c small.
+ */
+ while ((mlen -= 32) >= 0) {
+ sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
+ sum += w[4]; sum += w[5]; sum += w[6]; sum += w[7];
+ sum += w[8]; sum += w[9]; sum += w[10]; sum += w[11];
+ sum += w[12]; sum += w[13]; sum += w[14]; sum += w[15];
+ w += 16;
+ }
+ mlen += 32;
+ while ((mlen -= 8) >= 0) {
+ sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
+ w += 4;
+ }
+ mlen += 8;
+ if (mlen == 0 && byte_swapped == 0)
+ continue;
+ REDUCE;
+ while ((mlen -= 2) >= 0) {
+ sum += *w++;
+ }
+ if (byte_swapped) {
+ REDUCE;
+ sum <<= 8;
+ byte_swapped = 0;
+ if (mlen == -1) {
+ s_util.c[1] = *(const u_int8_t *)w;
+ sum += s_util.s;
+ mlen = 0;
+ } else
+ mlen = -1;
+ } else if (mlen == -1)
+ s_util.c[0] = *(const u_int8_t *)w;
+ }
+ if (mlen == -1) {
+ /* The last mbuf has odd # of bytes. Follow the
+ standard (the odd byte may be shifted left by 8 bits
+ or not as determined by endian-ness of the machine) */
+ s_util.c[1] = 0;
+ sum += s_util.s;
+ }
+ REDUCE;
+ return (~sum & 0xffff);
+}
+
+/*
+ * Given the host-byte-order value of the checksum field in a packet
+ * header, and the network-byte-order computed checksum of the data
+ * that the checksum covers (including the checksum itself), compute
+ * what the checksum field *should* have been.
+ */
+u_int16_t
+in_cksum_shouldbe(u_int16_t sum, u_int16_t computed_sum)
+{
+ u_int32_t shouldbe;
+
+ /*
+ * The value that should have gone into the checksum field
+ * is the negative of the value gotten by summing up everything
+ * *but* the checksum field.
+ *
+ * We can compute that by subtracting the value of the checksum
+ * field from the sum of all the data in the packet, and then
+ * computing the negative of that value.
+ *
+ * "sum" is the value of the checksum field, and "computed_sum"
+ * is the negative of the sum of all the data in the packets,
+ * so that's -(-computed_sum - sum), or (sum + computed_sum).
+ *
+ * All the arithmetic in question is one's complement, so the
+ * addition must include an end-around carry; we do this by
+ * doing the arithmetic in 32 bits (with no sign-extension),
+ * and then adding the upper 16 bits of the sum, which contain
+ * the carry, to the lower 16 bits of the sum, and then do it
+ * again in case *that* sum produced a carry.
+ *
+ * As RFC 1071 notes, the checksum can be computed without
+ * byte-swapping the 16-bit words; summing 16-bit words
+ * on a big-endian machine gives a big-endian checksum, which
+ * can be directly stuffed into the big-endian checksum fields
+ * in protocol headers, and summing words on a little-endian
+ * machine gives a little-endian checksum, which must be
+ * byte-swapped before being stuffed into a big-endian checksum
+ * field.
+ *
+ * "computed_sum" is a network-byte-order value, so we must put
+ * it in host byte order before subtracting it from the
+ * host-byte-order value from the header; the adjusted checksum
+ * will be in host byte order, which is what we'll return.
+ */
+ shouldbe = sum;
+ shouldbe += ntohs(computed_sum);
+ shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
+ shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
+ return shouldbe;
+}
diff --git a/contrib/tcpdump/interface.h b/contrib/tcpdump/interface.h
index 6e04b058c21c..18668a21f377 100644
--- a/contrib/tcpdump/interface.h
+++ b/contrib/tcpdump/interface.h
@@ -28,10 +28,6 @@
#include "os-proto.h"
#endif
-#ifndef HAVE___ATTRIBUTE__
-#define __attribute__(x)
-#endif
-
/* snprintf et al */
#include <stdarg.h>
@@ -74,6 +70,7 @@ extern char *strsep(char **, const char *);
#define PT_CNFP 7 /* Cisco NetFlow protocol */
#define PT_TFTP 8 /* trivial file transfer protocol */
#define PT_AODV 9 /* Ad-hoc On-demand Distance Vector Protocol */
+#define PT_CARP 10 /* Common Address Redundancy Protocol */
#ifndef min
#define min(a,b) ((a)>(b)?(b):(a))
@@ -166,7 +163,6 @@ extern void hex_and_ascii_print(const char *, const u_char *, u_int);
extern void hex_print_with_offset(const char *, const u_char *, u_int, u_int);
extern void hex_print(const char *, const u_char *, u_int);
extern void telnet_print(const u_char *, u_int);
-extern int ethertype_print(u_short, const u_char *, u_int, u_int);
extern int llc_print(const u_char *, u_int, u_int, const u_char *,
const u_char *, u_short *);
extern int snap_print(const u_char *, u_int, u_int, u_int);
@@ -189,9 +185,6 @@ extern u_int enc_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int pflog_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int arcnet_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int arcnet_linux_if_print(const struct pcap_pkthdr *, const u_char *);
-extern void ether_print(const u_char *, u_int, u_int,
- void (*)(const u_char *), const u_char *);
-extern u_int ether_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int token_print(const u_char *, u_int, u_int);
extern u_int token_if_print(const struct pcap_pkthdr *, const u_char *);
extern void fddi_print(const u_char *, u_int, u_int);
@@ -231,6 +224,7 @@ extern void cisco_autorp_print(const u_char *, u_int);
extern void rsvp_print(const u_char *, u_int);
extern void ldp_print(const u_char *, u_int);
extern void lldp_print(const u_char *, u_int);
+extern void rpki_rtr_print(const u_char *, u_int);
extern void lmp_print(const u_char *, u_int);
extern void lspping_print(const u_char *, u_int);
extern void lwapp_control_print(const u_char *, u_int, int);
@@ -297,6 +291,7 @@ extern const char *nt_errstr(u_int32_t);
extern void print_data(const unsigned char *, int);
extern void l2tp_print(const u_char *, u_int);
extern void vrrp_print(const u_char *, u_int, int);
+extern void carp_print(const u_char *, u_int, int);
extern void slow_print(const u_char *, u_int);
extern void sflow_print(const u_char *, u_int);
extern void mpcp_print(const u_char *, u_int);
@@ -322,10 +317,9 @@ extern u_int bt_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int usb_linux_48_byte_print(const struct pcap_pkthdr *, const u_char *);
extern u_int usb_linux_64_byte_print(const struct pcap_pkthdr *, const u_char *);
+
#ifdef INET6
-extern void ip6_print(const u_char *, u_int);
extern void ip6_opt_print(const u_char *, int);
-extern int nextproto6_cksum(const struct ip6_hdr *, const u_short *, u_int, u_int);
extern int hbhopt_print(const u_char *);
extern int dstopt_print(const u_char *);
extern int frag6_print(const u_char *, const u_char *);
@@ -334,9 +328,15 @@ extern void ripng_print(const u_char *, unsigned int);
extern int rt6_print(const u_char *, const u_char *);
extern void ospf6_print(const u_char *, u_int);
extern void dhcp6_print(const u_char *, u_int);
+extern void babel_print(const u_char *, u_int);
extern int mask62plen(const u_char *);
#endif /*INET6*/
-extern u_short in_cksum(const u_short *, register u_int, int);
+
+struct cksum_vec {
+ const u_int8_t *ptr;
+ int len;
+};
+extern u_int16_t in_cksum(const struct cksum_vec *, int);
extern u_int16_t in_cksum_shouldbe(u_int16_t, u_int16_t);
#ifndef HAVE_BPF_DUMP
@@ -356,6 +356,7 @@ extern netdissect_options *gndo;
#define bflag gndo->ndo_bflag
#define eflag gndo->ndo_eflag
#define fflag gndo->ndo_fflag
+#define jflag gndo->ndo_jflag
#define Kflag gndo->ndo_Kflag
#define nflag gndo->ndo_nflag
#define Nflag gndo->ndo_Nflag
@@ -384,6 +385,7 @@ extern netdissect_options *gndo;
#define Cflag_count gndo->ndo_Cflag_count
#define Gflag_count gndo->ndo_Gflag_count
#define Gflag_time gndo->ndo_Gflag_time
+#define Hflag gndo->ndo_Hflag
#define snaplen gndo->ndo_snaplen
#define snapend gndo->ndo_snapend
diff --git a/contrib/tcpdump/ip.h b/contrib/tcpdump/ip.h
index a01d0f07d49e..8a97632e515f 100644
--- a/contrib/tcpdump/ip.h
+++ b/contrib/tcpdump/ip.h
@@ -62,7 +62,7 @@ struct ip {
u_int8_t ip_p; /* protocol */
u_int16_t ip_sum; /* checksum */
struct in_addr ip_src,ip_dst; /* source and dest address */
-};
+} UNALIGNED;
#define IP_MAXPACKET 65535 /* maximum packet size */
@@ -134,7 +134,7 @@ struct ip_timestamp {
u_int32_t ipt_time;
} ipt_ta[1];
} ipt_timestamp;
-};
+} UNALIGNED;
/* flag bits for ipt_flg */
#define IPOPT_TS_TSONLY 0 /* timestamps only */
@@ -161,4 +161,4 @@ struct ip_timestamp {
#define IP_MSS 576 /* default maximum segment size */
/* in print-ip.c */
-extern u_int32_t ip_finddst(const struct ip *);
+extern int nextproto4_cksum(const struct ip *, const u_int8_t *, u_int, u_int);
diff --git a/contrib/tcpdump/ip6.h b/contrib/tcpdump/ip6.h
index a6df97aae10b..12c87ad29291 100644
--- a/contrib/tcpdump/ip6.h
+++ b/contrib/tcpdump/ip6.h
@@ -86,21 +86,7 @@ struct ip6_hdr {
} ip6_ctlun;
struct in6_addr ip6_src; /* source address */
struct in6_addr ip6_dst; /* destination address */
-};
-
-/*
- * Pseudo header, used for higher layer checksumming.
- */
-union ip6_pseudo_hdr {
- struct {
- struct in6_addr ph_src;
- struct in6_addr ph_dst;
- u_int32_t ph_len;
- u_int8_t ph_zero[3];
- u_int8_t ph_nxt;
- } ph;
- u_int16_t pa[20];
-};
+} UNALIGNED;
#define ip6_vfc ip6_ctlun.ip6_un2_vfc
#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow
@@ -123,25 +109,23 @@ union ip6_pseudo_hdr {
*/
struct ip6_ext {
- u_char ip6e_nxt;
- u_char ip6e_len;
-};
+ u_int8_t ip6e_nxt;
+ u_int8_t ip6e_len;
+} UNALIGNED;
/* Hop-by-Hop options header */
-/* XXX should we pad it to force alignment on an 8-byte boundary? */
struct ip6_hbh {
u_int8_t ip6h_nxt; /* next header */
u_int8_t ip6h_len; /* length in units of 8 octets */
/* followed by options */
-};
+} UNALIGNED;
/* Destination options header */
-/* XXX should we pad it to force alignment on an 8-byte boundary? */
struct ip6_dest {
u_int8_t ip6d_nxt; /* next header */
u_int8_t ip6d_len; /* length in units of 8 octets */
/* followed by options */
-};
+} UNALIGNED;
/* Option types and related macros */
#define IP6OPT_PAD1 0x00 /* 00 0 00000 */
@@ -177,7 +161,7 @@ struct ip6_rthdr {
u_int8_t ip6r_type; /* routing type */
u_int8_t ip6r_segleft; /* segments left */
/* followed by routing type specific data */
-};
+} UNALIGNED;
/* Type 0 Routing header */
struct ip6_rthdr0 {
@@ -188,7 +172,7 @@ struct ip6_rthdr0 {
u_int8_t ip6r0_reserved; /* reserved field */
u_int8_t ip6r0_slmap[3]; /* strict/loose bit map */
struct in6_addr ip6r0_addr[1]; /* up to 23 addresses */
-};
+} UNALIGNED;
/* Fragment header */
struct ip6_frag {
@@ -196,10 +180,13 @@ struct ip6_frag {
u_int8_t ip6f_reserved; /* reserved field */
u_int16_t ip6f_offlg; /* offset, reserved, and flag */
u_int32_t ip6f_ident; /* identification */
-};
+} UNALIGNED;
#define IP6F_OFF_MASK 0xfff8 /* mask out offset from ip6f_offlg */
#define IP6F_RESERVED_MASK 0x0006 /* reserved bits in ip6f_offlg */
#define IP6F_MORE_FRAG 0x0001 /* more-fragments flag */
+/* in print-ip6.c */
+extern int nextproto6_cksum(const struct ip6_hdr *, const u_int8_t *, u_int, u_int);
+
#endif /* not _NETINET_IP6_H_ */
diff --git a/contrib/tcpdump/ipproto.c b/contrib/tcpdump/ipproto.c
index 644b36427719..cbb9bf3f74e6 100755
--- a/contrib/tcpdump/ipproto.c
+++ b/contrib/tcpdump/ipproto.c
@@ -55,6 +55,7 @@ const struct tok ipproto_values[] = {
{ IPPROTO_PGM, "PGM" },
{ IPPROTO_SCTP, "SCTP" },
{ IPPROTO_MOBILITY, "Mobility" },
+ { IPPROTO_CARP, "CARP" },
{ 0, NULL }
};
diff --git a/contrib/tcpdump/ipproto.h b/contrib/tcpdump/ipproto.h
index 12938b4008de..4b6bf51cfc15 100644
--- a/contrib/tcpdump/ipproto.h
+++ b/contrib/tcpdump/ipproto.h
@@ -134,6 +134,9 @@ extern const struct tok ipproto_values[];
#ifndef IPPROTO_VRRP
#define IPPROTO_VRRP 112
#endif
+#ifndef IPPROTO_CARP
+#define IPPROTO_CARP 112
+#endif
#ifndef IPPROTO_PGM
#define IPPROTO_PGM 113
#endif
diff --git a/contrib/tcpdump/missing/bittypes.h b/contrib/tcpdump/missing/bittypes.h
deleted file mode 100644
index 31013ae4552a..000000000000
--- a/contrib/tcpdump/missing/bittypes.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 1999 WIDE 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
- */
-#ifndef HAVE_U_INT8_T
-
-#if SIZEOF_CHAR == 1
-typedef unsigned char u_int8_t;
-#elif SIZEOF_INT == 1
-typedef unsigned int u_int8_t;
-#else /* XXX */
-#error "there's no appropriate type for u_int8_t"
-#endif
-
-#endif /* HAVE_U_INT8_T */
-
-#ifndef HAVE_U_INT16_T
-
-#if SIZEOF_SHORT == 2
-typedef unsigned short u_int16_t;
-#elif SIZEOF_INT == 2
-typedef unsigned int u_int16_t;
-#elif SIZEOF_CHAR == 2
-typedef unsigned char u_int16_t;
-#else /* XXX */
-#error "there's no appropriate type for u_int16_t"
-#endif
-
-#endif /* HAVE_U_INT16_T */
-
-#ifndef HAVE_U_INT32_T
-
-#if SIZEOF_INT == 4
-typedef unsigned int u_int32_t;
-#elif SIZEOF_LONG == 4
-typedef unsigned long u_int32_t;
-#elif SIZEOF_SHORT == 4
-typedef unsigned short u_int32_t;
-#else /* XXX */
-#error "there's no appropriate type for u_int32_t"
-#endif
-
-#endif /* HAVE_U_INT32_T */
-
-#ifndef HAVE_U_INT64_T
-
-#if SIZEOF_LONG_LONG == 8
-typedef unsigned long long u_int64_t;
-#elif defined(_MSC_EXTENSIONS)
-typedef unsigned _int64 u_int64_t;
-#elif SIZEOF_INT == 8
-typedef unsigned int u_int64_t;
-#elif SIZEOF_LONG == 8
-typedef unsigned long u_int64_t;
-#elif SIZEOF_SHORT == 8
-typedef unsigned short u_int64_t;
-#else /* XXX */
-#error "there's no appropriate type for u_int64_t"
-#endif
-
-#endif /* HAVE_U_INT64_T */
-
-#ifndef PRId64
-#ifdef _MSC_EXTENSIONS
-#define PRId64 "I64d"
-#else /* _MSC_EXTENSIONS */
-#define PRId64 "lld"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRId64 */
-
-#ifndef PRIo64
-#ifdef _MSC_EXTENSIONS
-#define PRIo64 "I64o"
-#else /* _MSC_EXTENSIONS */
-#define PRIo64 "llo"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIo64 */
-
-#ifndef PRIx64
-#ifdef _MSC_EXTENSIONS
-#define PRIx64 "I64x"
-#else /* _MSC_EXTENSIONS */
-#define PRIx64 "llx"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIx64 */
-
-#ifndef PRIu64
-#ifdef _MSC_EXTENSIONS
-#define PRIu64 "I64u"
-#else /* _MSC_EXTENSIONS */
-#define PRIu64 "llu"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIu64 */
diff --git a/contrib/tcpdump/netdissect.h b/contrib/tcpdump/netdissect.h
index e87941daf180..0c66dfaf8094 100644
--- a/contrib/tcpdump/netdissect.h
+++ b/contrib/tcpdump/netdissect.h
@@ -107,6 +107,7 @@ struct netdissect_options {
int ndo_Iflag; /* rfmon (monitor) mode */
int ndo_Oflag; /* run filter code optimizer */
int ndo_dlt; /* if != -1, ask libpcap for the DLT it names*/
+ int ndo_jflag; /* packet time stamp source */
int ndo_pflag; /* don't go promiscuous */
int ndo_Cflag; /* rotate dump files after this many bytes */
@@ -116,6 +117,7 @@ struct netdissect_options {
time_t ndo_Gflag_time; /* The last time_t the dump file was rotated. */
int ndo_Wflag; /* recycle output files after this number of files */
int ndo_WflagChars;
+ int ndo_Hflag; /* dissect 802.11s draft mesh standard */
int ndo_suppress_default_print; /* don't use default_print() for unknown packet types */
const char *ndo_dltname;
@@ -157,7 +159,7 @@ struct netdissect_options {
void (*ndo_error)(netdissect_options *,
const char *fmt, ...)
#ifdef __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS
- __attribute__ ((format (printf, 2, 3)))
+ __attribute__ ((noreturn, format (printf, 2, 3)))
#endif
;
void (*ndo_warning)(netdissect_options *,
@@ -252,6 +254,9 @@ extern char *copy_argv(netdissect_options *, char **);
extern void safeputchar(int);
extern void safeputs(const char *, int);
+#define PLURAL_SUFFIX(n) \
+ (((n) != 1) ? "s" : "")
+
#if 0
extern const char *isonsap_string(netdissect_options *, const u_char *);
extern const char *protoid_string(netdissect_options *, const u_char *);
@@ -263,6 +268,12 @@ extern const char *dnnum_string(netdissect_options *, u_short);
#include <pcap.h>
+typedef u_int (*if_ndo_printer)(struct netdissect_options *ndo,
+ const struct pcap_pkthdr *, const u_char *);
+typedef u_int (*if_printer)(const struct pcap_pkthdr *, const u_char *);
+
+extern if_ndo_printer lookup_ndo_printer(int);
+extern if_printer lookup_printer(int);
extern void eap_print(netdissect_options *,const u_char *, u_int);
extern int esp_print(netdissect_options *,
@@ -281,6 +292,22 @@ extern void ip_print_inner(netdissect_options *ndo,
const u_char *bp2);
extern void rrcp_print(netdissect_options *,const u_char *, u_int);
+extern void ether_print(netdissect_options *,
+ const u_char *, u_int, u_int,
+ void (*)(netdissect_options *, const u_char *),
+ const u_char *);
+
+extern u_int ether_if_print(netdissect_options *,
+ const struct pcap_pkthdr *,const u_char *);
+extern u_int netanalyzer_if_print(netdissect_options *,
+ const struct pcap_pkthdr *,const u_char *);
+extern u_int netanalyzer_transparent_if_print(netdissect_options *,
+ const struct pcap_pkthdr *,
+ const u_char *);
+
+extern int ethertype_print(netdissect_options *,u_short, const u_char *,
+ u_int, u_int);
+
/* stuff that has not yet been rototiled */
#if 0
extern void ascii_print(netdissect_options *,u_int);
@@ -291,8 +318,6 @@ extern void hex_print_with_offset(netdissect_options *,const char *,
u_int, u_int);
extern void hex_print(netdissect_options *,const char *, u_int);
extern void telnet_print(netdissect_options *,const u_char *, u_int);
-extern int ethertype_print(netdissect_options *,u_short, const u_char *,
- u_int, u_int);
extern int llc_print(netdissect_options *,
const u_char *, u_int, u_int, const u_char *,
const u_char *, u_short *);
@@ -319,7 +344,6 @@ extern void egp_print(netdissect_options *,const u_char *, u_int,
const u_char *);
extern void arcnet_if_print(u_char*,const struct pcap_pkthdr *,const u_char *);
-extern void ether_if_print(u_char *,const struct pcap_pkthdr *,const u_char *);
extern void token_if_print(u_char *,const struct pcap_pkthdr *,const u_char *);
extern void fddi_if_print(u_char *,const struct pcap_pkthdr *, const u_char *);
@@ -333,6 +357,7 @@ extern void igmp_print(netdissect_options *,
register const u_char *, u_int);
extern void igrp_print(netdissect_options *,const u_char *, u_int,
const u_char *);
+extern int nextproto4_cksum(const struct ip *, const u_int8_t *, u_int, u_int);
extern void ipN_print(netdissect_options *,const u_char *, u_int);
extern void ipx_print(netdissect_options *,const u_char *, u_int);
extern void isoclns_print(netdissect_options *,const u_char *,
@@ -378,6 +403,7 @@ extern void raw_if_print(u_char *,
const struct pcap_pkthdr *, const u_char *);
extern void rip_print(netdissect_options *,const u_char *, u_int);
+extern void rpki_rtr_print(netdissect_options *,const u_char *, u_int);
extern void sctp_print(netdissect_options *ndo,
const u_char *bp, const u_char *bp2,
@@ -424,6 +450,8 @@ extern void l2tp_print(netdissect_options *,const u_char *, u_int);
extern void lcp_print(netdissect_options *,const u_char *, u_int);
extern void vrrp_print(netdissect_options *,const u_char *bp,
u_int len, int ttl);
+extern void carp_print(netdissect_options *,const u_char *bp,
+ u_int len, int ttl);
extern void cdp_print(netdissect_options *,const u_char *,
u_int, u_int, const u_char *, const u_char *);
extern void stp_print(netdissect_options *,const u_char *p, u_int length);
@@ -433,12 +461,15 @@ extern void pptp_print(netdissect_options *,const u_char *, u_int);
#endif
extern u_int ipnet_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
+extern u_int ppi_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
+
+extern u_int ieee802_15_4_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
-#if 0
#ifdef INET6
extern void ip6_print(netdissect_options *,const u_char *, u_int);
+#if 0
extern void ip6_opt_print(netdissect_options *,const u_char *, int);
-extern int nextproto6_cksum(const struct ip6_hdr *, const u_short *, u_int, u_int);
+extern int nextproto6_cksum(const struct ip6_hdr *, const u_int8_t *, u_int, u_int);
extern int hbhopt_print(netdissect_options *,const u_char *);
extern int dstopt_print(netdissect_options *,const u_char *);
extern int frag6_print(netdissect_options *,const u_char *,
@@ -453,11 +484,17 @@ extern void dhcp6_print(netdissect_options *,const u_char *,
extern void zephyr_print(netdissect_options * ndo,
const u_char *cp, int length);
+#endif /* 0 */
#endif /*INET6*/
-extern u_short in_cksum(const u_short *,
- register u_int, int);
+#if 0
+struct cksum_vec {
+ const u_int8_t *ptr;
+ int len;
+};
+extern u_int16_t in_cksum(const struct cksum_vec *, int);
+extern u_int16_t in_cksum_shouldbe(u_int16_t, u_int16_t);
#endif
extern void esp_print_decodesecret(netdissect_options *ndo);
diff --git a/contrib/tcpdump/ospf.h b/contrib/tcpdump/ospf.h
index 2b1c6ee4c6b7..b86458baa7ee 100644
--- a/contrib/tcpdump/ospf.h
+++ b/contrib/tcpdump/ospf.h
@@ -324,5 +324,5 @@ struct ospfhdr {
#define ospf_lsa ospf_un.un_lsa
/* Functions shared by ospf and ospf6 */
-extern int ospf_print_te_lsa(u_int8_t *, u_int);
-extern int ospf_print_grace_lsa(u_int8_t *, u_int);
+extern int ospf_print_te_lsa(const u_int8_t *, u_int);
+extern int ospf_print_grace_lsa(const u_int8_t *, u_int);
diff --git a/contrib/tcpdump/oui.c b/contrib/tcpdump/oui.c
index 422cd161b847..1067aa1c5cec 100644
--- a/contrib/tcpdump/oui.c
+++ b/contrib/tcpdump/oui.c
@@ -42,6 +42,7 @@ const struct tok oui_values[] = {
{ OUI_IEEE_8021_PRIVATE, "IEEE 802.1 Private"},
{ OUI_IEEE_8023_PRIVATE, "IEEE 802.3 Private"},
{ OUI_TIA, "ANSI/TIA"},
+ { OUI_DCBX, "DCBX"},
{ 0, NULL }
};
diff --git a/contrib/tcpdump/oui.h b/contrib/tcpdump/oui.h
index dc8bb01c8f1b..d39cb6cae37f 100644
--- a/contrib/tcpdump/oui.h
+++ b/contrib/tcpdump/oui.h
@@ -30,6 +30,7 @@ extern const struct tok smi_values[];
#define OUI_IEEE_8021_PRIVATE 0x0080c2 /* IEEE 802.1 Organisation Specific - Annex F */
#define OUI_IEEE_8023_PRIVATE 0x00120f /* IEEE 802.3 Organisation Specific - Annex G */
#define OUI_TIA 0x0012bb /* TIA - Telecommunications Industry Association - ANSI/TIA-1057- 2006 */
+#define OUI_DCBX 0x001B21 /* DCBX */
/*
* These are SMI Network Management Private Enterprise Codes for
diff --git a/contrib/tcpdump/ppi.h b/contrib/tcpdump/ppi.h
new file mode 100644
index 000000000000..733eb950f0de
--- /dev/null
+++ b/contrib/tcpdump/ppi.h
@@ -0,0 +1,9 @@
+typedef struct ppi_header {
+ uint8_t ppi_ver;
+ uint8_t ppi_flags;
+ uint16_t ppi_len;
+ uint32_t ppi_dlt;
+} ppi_header_t;
+
+#define PPI_HDRLEN 8
+
diff --git a/contrib/tcpdump/print-802_11.c b/contrib/tcpdump/print-802_11.c
index 088840ab1384..24ab625a61e3 100644
--- a/contrib/tcpdump/print-802_11.c
+++ b/contrib/tcpdump/print-802_11.c
@@ -46,6 +46,15 @@ static const char rcsid[] _U_ =
#include "ieee802_11.h"
#include "ieee802_11_radio.h"
+/* Radiotap state */
+/* This is used to save state when parsing/processing parameters */
+struct radiotap_state
+{
+ u_int32_t present;
+
+ u_int8_t rate;
+};
+
#define PRINT_SSID(p) \
if (p.ssid_present) { \
printf(" ("); \
@@ -74,26 +83,403 @@ static const char rcsid[] _U_ =
printf("%s", \
CAPABILITY_PRIVACY(p.capability_info) ? ", PRIVACY" : "" );
-static const int ieee80211_htrates[16] = {
- 13, /* IFM_IEEE80211_MCS0 */
- 26, /* IFM_IEEE80211_MCS1 */
- 39, /* IFM_IEEE80211_MCS2 */
- 52, /* IFM_IEEE80211_MCS3 */
- 78, /* IFM_IEEE80211_MCS4 */
- 104, /* IFM_IEEE80211_MCS5 */
- 117, /* IFM_IEEE80211_MCS6 */
- 130, /* IFM_IEEE80211_MCS7 */
- 26, /* IFM_IEEE80211_MCS8 */
- 52, /* IFM_IEEE80211_MCS9 */
- 78, /* IFM_IEEE80211_MCS10 */
- 104, /* IFM_IEEE80211_MCS11 */
- 156, /* IFM_IEEE80211_MCS12 */
- 208, /* IFM_IEEE80211_MCS13 */
- 234, /* IFM_IEEE80211_MCS14 */
- 260, /* IFM_IEEE80211_MCS15 */
+#define MAX_MCS_INDEX 76
+
+/*
+ * Indices are:
+ *
+ * the MCS index (0-76);
+ *
+ * 0 for 20 MHz, 1 for 40 MHz;
+ *
+ * 0 for a long guard interval, 1 for a short guard interval.
+ */
+static const float ieee80211_float_htrates[MAX_MCS_INDEX+1][2][2] = {
+ /* MCS 0 */
+ { /* 20 Mhz */ { 6.5, /* SGI */ 7.2, },
+ /* 40 Mhz */ { 13.5, /* SGI */ 15.0, },
+ },
+
+ /* MCS 1 */
+ { /* 20 Mhz */ { 13.0, /* SGI */ 14.4, },
+ /* 40 Mhz */ { 27.0, /* SGI */ 30.0, },
+ },
+
+ /* MCS 2 */
+ { /* 20 Mhz */ { 19.5, /* SGI */ 21.7, },
+ /* 40 Mhz */ { 40.5, /* SGI */ 45.0, },
+ },
+
+ /* MCS 3 */
+ { /* 20 Mhz */ { 26.0, /* SGI */ 28.9, },
+ /* 40 Mhz */ { 54.0, /* SGI */ 60.0, },
+ },
+
+ /* MCS 4 */
+ { /* 20 Mhz */ { 39.0, /* SGI */ 43.3, },
+ /* 40 Mhz */ { 81.0, /* SGI */ 90.0, },
+ },
+
+ /* MCS 5 */
+ { /* 20 Mhz */ { 52.0, /* SGI */ 57.8, },
+ /* 40 Mhz */ { 108.0, /* SGI */ 120.0, },
+ },
+
+ /* MCS 6 */
+ { /* 20 Mhz */ { 58.5, /* SGI */ 65.0, },
+ /* 40 Mhz */ { 121.5, /* SGI */ 135.0, },
+ },
+
+ /* MCS 7 */
+ { /* 20 Mhz */ { 65.0, /* SGI */ 72.2, },
+ /* 40 Mhz */ { 135.0, /* SGI */ 150.0, },
+ },
+
+ /* MCS 8 */
+ { /* 20 Mhz */ { 13.0, /* SGI */ 14.4, },
+ /* 40 Mhz */ { 27.0, /* SGI */ 30.0, },
+ },
+
+ /* MCS 9 */
+ { /* 20 Mhz */ { 26.0, /* SGI */ 28.9, },
+ /* 40 Mhz */ { 54.0, /* SGI */ 60.0, },
+ },
+
+ /* MCS 10 */
+ { /* 20 Mhz */ { 39.0, /* SGI */ 43.3, },
+ /* 40 Mhz */ { 81.0, /* SGI */ 90.0, },
+ },
+
+ /* MCS 11 */
+ { /* 20 Mhz */ { 52.0, /* SGI */ 57.8, },
+ /* 40 Mhz */ { 108.0, /* SGI */ 120.0, },
+ },
+
+ /* MCS 12 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 13 */
+ { /* 20 Mhz */ { 104.0, /* SGI */ 115.6, },
+ /* 40 Mhz */ { 216.0, /* SGI */ 240.0, },
+ },
+
+ /* MCS 14 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 15 */
+ { /* 20 Mhz */ { 130.0, /* SGI */ 144.4, },
+ /* 40 Mhz */ { 270.0, /* SGI */ 300.0, },
+ },
+
+ /* MCS 16 */
+ { /* 20 Mhz */ { 19.5, /* SGI */ 21.7, },
+ /* 40 Mhz */ { 40.5, /* SGI */ 45.0, },
+ },
+
+ /* MCS 17 */
+ { /* 20 Mhz */ { 39.0, /* SGI */ 43.3, },
+ /* 40 Mhz */ { 81.0, /* SGI */ 90.0, },
+ },
+
+ /* MCS 18 */
+ { /* 20 Mhz */ { 58.5, /* SGI */ 65.0, },
+ /* 40 Mhz */ { 121.5, /* SGI */ 135.0, },
+ },
+
+ /* MCS 19 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 20 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 21 */
+ { /* 20 Mhz */ { 156.0, /* SGI */ 173.3, },
+ /* 40 Mhz */ { 324.0, /* SGI */ 360.0, },
+ },
+
+ /* MCS 22 */
+ { /* 20 Mhz */ { 175.5, /* SGI */ 195.0, },
+ /* 40 Mhz */ { 364.5, /* SGI */ 405.0, },
+ },
+
+ /* MCS 23 */
+ { /* 20 Mhz */ { 195.0, /* SGI */ 216.7, },
+ /* 40 Mhz */ { 405.0, /* SGI */ 450.0, },
+ },
+
+ /* MCS 24 */
+ { /* 20 Mhz */ { 26.0, /* SGI */ 28.9, },
+ /* 40 Mhz */ { 54.0, /* SGI */ 60.0, },
+ },
+
+ /* MCS 25 */
+ { /* 20 Mhz */ { 52.0, /* SGI */ 57.8, },
+ /* 40 Mhz */ { 108.0, /* SGI */ 120.0, },
+ },
+
+ /* MCS 26 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 27 */
+ { /* 20 Mhz */ { 104.0, /* SGI */ 115.6, },
+ /* 40 Mhz */ { 216.0, /* SGI */ 240.0, },
+ },
+
+ /* MCS 28 */
+ { /* 20 Mhz */ { 156.0, /* SGI */ 173.3, },
+ /* 40 Mhz */ { 324.0, /* SGI */ 360.0, },
+ },
+
+ /* MCS 29 */
+ { /* 20 Mhz */ { 208.0, /* SGI */ 231.1, },
+ /* 40 Mhz */ { 432.0, /* SGI */ 480.0, },
+ },
+
+ /* MCS 30 */
+ { /* 20 Mhz */ { 234.0, /* SGI */ 260.0, },
+ /* 40 Mhz */ { 486.0, /* SGI */ 540.0, },
+ },
+
+ /* MCS 31 */
+ { /* 20 Mhz */ { 260.0, /* SGI */ 288.9, },
+ /* 40 Mhz */ { 540.0, /* SGI */ 600.0, },
+ },
+
+ /* MCS 32 */
+ { /* 20 Mhz */ { 0.0, /* SGI */ 0.0, }, /* not valid */
+ /* 40 Mhz */ { 6.0, /* SGI */ 6.7, },
+ },
+
+ /* MCS 33 */
+ { /* 20 Mhz */ { 39.0, /* SGI */ 43.3, },
+ /* 40 Mhz */ { 81.0, /* SGI */ 90.0, },
+ },
+
+ /* MCS 34 */
+ { /* 20 Mhz */ { 52.0, /* SGI */ 57.8, },
+ /* 40 Mhz */ { 108.0, /* SGI */ 120.0, },
+ },
+
+ /* MCS 35 */
+ { /* 20 Mhz */ { 65.0, /* SGI */ 72.2, },
+ /* 40 Mhz */ { 135.0, /* SGI */ 150.0, },
+ },
+
+ /* MCS 36 */
+ { /* 20 Mhz */ { 58.5, /* SGI */ 65.0, },
+ /* 40 Mhz */ { 121.5, /* SGI */ 135.0, },
+ },
+
+ /* MCS 37 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 38 */
+ { /* 20 Mhz */ { 97.5, /* SGI */ 108.3, },
+ /* 40 Mhz */ { 202.5, /* SGI */ 225.0, },
+ },
+
+ /* MCS 39 */
+ { /* 20 Mhz */ { 52.0, /* SGI */ 57.8, },
+ /* 40 Mhz */ { 108.0, /* SGI */ 120.0, },
+ },
+
+ /* MCS 40 */
+ { /* 20 Mhz */ { 65.0, /* SGI */ 72.2, },
+ /* 40 Mhz */ { 135.0, /* SGI */ 150.0, },
+ },
+
+ /* MCS 41 */
+ { /* 20 Mhz */ { 65.0, /* SGI */ 72.2, },
+ /* 40 Mhz */ { 135.0, /* SGI */ 150.0, },
+ },
+
+ /* MCS 42 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 43 */
+ { /* 20 Mhz */ { 91.0, /* SGI */ 101.1, },
+ /* 40 Mhz */ { 189.0, /* SGI */ 210.0, },
+ },
+
+ /* MCS 44 */
+ { /* 20 Mhz */ { 91.0, /* SGI */ 101.1, },
+ /* 40 Mhz */ { 189.0, /* SGI */ 210.0, },
+ },
+
+ /* MCS 45 */
+ { /* 20 Mhz */ { 104.0, /* SGI */ 115.6, },
+ /* 40 Mhz */ { 216.0, /* SGI */ 240.0, },
+ },
+
+ /* MCS 46 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 47 */
+ { /* 20 Mhz */ { 97.5, /* SGI */ 108.3, },
+ /* 40 Mhz */ { 202.5, /* SGI */ 225.0, },
+ },
+
+ /* MCS 48 */
+ { /* 20 Mhz */ { 97.5, /* SGI */ 108.3, },
+ /* 40 Mhz */ { 202.5, /* SGI */ 225.0, },
+ },
+
+ /* MCS 49 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 50 */
+ { /* 20 Mhz */ { 136.5, /* SGI */ 151.7, },
+ /* 40 Mhz */ { 283.5, /* SGI */ 315.0, },
+ },
+
+ /* MCS 51 */
+ { /* 20 Mhz */ { 136.5, /* SGI */ 151.7, },
+ /* 40 Mhz */ { 283.5, /* SGI */ 315.0, },
+ },
+
+ /* MCS 52 */
+ { /* 20 Mhz */ { 156.0, /* SGI */ 173.3, },
+ /* 40 Mhz */ { 324.0, /* SGI */ 360.0, },
+ },
+
+ /* MCS 53 */
+ { /* 20 Mhz */ { 65.0, /* SGI */ 72.2, },
+ /* 40 Mhz */ { 135.0, /* SGI */ 150.0, },
+ },
+
+ /* MCS 54 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 55 */
+ { /* 20 Mhz */ { 91.0, /* SGI */ 101.1, },
+ /* 40 Mhz */ { 189.0, /* SGI */ 210.0, },
+ },
+
+ /* MCS 56 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 57 */
+ { /* 20 Mhz */ { 91.0, /* SGI */ 101.1, },
+ /* 40 Mhz */ { 189.0, /* SGI */ 210.0, },
+ },
+
+ /* MCS 58 */
+ { /* 20 Mhz */ { 104.0, /* SGI */ 115.6, },
+ /* 40 Mhz */ { 216.0, /* SGI */ 240.0, },
+ },
+
+ /* MCS 59 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 60 */
+ { /* 20 Mhz */ { 104.0, /* SGI */ 115.6, },
+ /* 40 Mhz */ { 216.0, /* SGI */ 240.0, },
+ },
+
+ /* MCS 61 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 62 */
+ { /* 20 Mhz */ { 130.0, /* SGI */ 144.4, },
+ /* 40 Mhz */ { 270.0, /* SGI */ 300.0, },
+ },
+
+ /* MCS 63 */
+ { /* 20 Mhz */ { 130.0, /* SGI */ 144.4, },
+ /* 40 Mhz */ { 270.0, /* SGI */ 300.0, },
+ },
+
+ /* MCS 64 */
+ { /* 20 Mhz */ { 143.0, /* SGI */ 158.9, },
+ /* 40 Mhz */ { 297.0, /* SGI */ 330.0, },
+ },
+
+ /* MCS 65 */
+ { /* 20 Mhz */ { 97.5, /* SGI */ 108.3, },
+ /* 40 Mhz */ { 202.5, /* SGI */ 225.0, },
+ },
+
+ /* MCS 66 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 67 */
+ { /* 20 Mhz */ { 136.5, /* SGI */ 151.7, },
+ /* 40 Mhz */ { 283.5, /* SGI */ 315.0, },
+ },
+
+ /* MCS 68 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 69 */
+ { /* 20 Mhz */ { 136.5, /* SGI */ 151.7, },
+ /* 40 Mhz */ { 283.5, /* SGI */ 315.0, },
+ },
+
+ /* MCS 70 */
+ { /* 20 Mhz */ { 156.0, /* SGI */ 173.3, },
+ /* 40 Mhz */ { 324.0, /* SGI */ 360.0, },
+ },
+
+ /* MCS 71 */
+ { /* 20 Mhz */ { 175.5, /* SGI */ 195.0, },
+ /* 40 Mhz */ { 364.5, /* SGI */ 405.0, },
+ },
+
+ /* MCS 72 */
+ { /* 20 Mhz */ { 156.0, /* SGI */ 173.3, },
+ /* 40 Mhz */ { 324.0, /* SGI */ 360.0, },
+ },
+
+ /* MCS 73 */
+ { /* 20 Mhz */ { 175.5, /* SGI */ 195.0, },
+ /* 40 Mhz */ { 364.5, /* SGI */ 405.0, },
+ },
+
+ /* MCS 74 */
+ { /* 20 Mhz */ { 195.0, /* SGI */ 216.7, },
+ /* 40 Mhz */ { 405.0, /* SGI */ 450.0, },
+ },
+
+ /* MCS 75 */
+ { /* 20 Mhz */ { 195.0, /* SGI */ 216.7, },
+ /* 40 Mhz */ { 405.0, /* SGI */ 450.0, },
+ },
+
+ /* MCS 76 */
+ { /* 20 Mhz */ { 214.5, /* SGI */ 238.3, },
+ /* 40 Mhz */ { 445.5, /* SGI */ 495.0, },
+ },
};
-#define PRINT_HT_RATE(_sep, _r, _suf) \
- printf("%s%.1f%s", _sep, (.5 * ieee80211_htrates[(_r) & 0xf]), _suf)
static const char *auth_alg_text[]={"Open System","Shared Key","EAP"};
#define NUM_AUTH_ALGS (sizeof auth_alg_text / sizeof auth_alg_text[0])
@@ -269,6 +655,7 @@ static int
parse_elements(struct mgmt_body_t *pbody, const u_char *p, int offset,
u_int length)
{
+ u_int elementlen;
struct ssid_t ssid;
struct challenge_t challenge;
struct rates_t rates;
@@ -487,12 +874,13 @@ parse_elements(struct mgmt_body_t *pbody, const u_char *p, int offset,
return 0;
if (length < 2)
return 0;
- if (!TTEST2(*(p + offset + 2), *(p + offset + 1)))
+ elementlen = *(p + offset + 1);
+ if (!TTEST2(*(p + offset + 2), elementlen))
return 0;
- if (length < (u_int)(*(p + offset + 1) + 2))
+ if (length < elementlen + 2)
return 0;
- offset += *(p + offset + 1) + 2;
- length -= *(p + offset + 1) + 2;
+ offset += elementlen + 2;
+ length -= elementlen + 2;
break;
}
}
@@ -1321,7 +1709,8 @@ ieee802_11_print(const u_char *p, u_int length, u_int orig_caplen, int pad,
hdrlen = extract_header_length(fc);
if (pad)
hdrlen = roundup2(hdrlen, 4);
- if (FC_TYPE(fc) == T_DATA && DATA_FRAME_IS_QOS(FC_SUBTYPE(fc))) {
+ if (Hflag && FC_TYPE(fc) == T_DATA &&
+ DATA_FRAME_IS_QOS(FC_SUBTYPE(fc))) {
meshdrlen = extract_mesh_header_length(p+hdrlen);
hdrlen += meshdrlen;
} else
@@ -1461,7 +1850,8 @@ print_chaninfo(int freq, int flags)
}
static int
-print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
+print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags,
+ struct radiotap_state *state, u_int32_t presentflags)
{
union {
int8_t i8;
@@ -1476,9 +1866,18 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
switch (bit) {
case IEEE80211_RADIOTAP_FLAGS:
rc = cpack_uint8(s, &u.u8);
+ if (rc != 0)
+ break;
*flags = u.u8;
break;
case IEEE80211_RADIOTAP_RATE:
+ rc = cpack_uint8(s, &u.u8);
+ if (rc != 0)
+ break;
+
+ /* Save state rate */
+ state->rate = u.u8;
+ break;
case IEEE80211_RADIOTAP_DB_ANTSIGNAL:
case IEEE80211_RADIOTAP_DB_ANTNOISE:
case IEEE80211_RADIOTAP_ANTENNA:
@@ -1497,6 +1896,7 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
case IEEE80211_RADIOTAP_FHSS:
case IEEE80211_RADIOTAP_LOCK_QUALITY:
case IEEE80211_RADIOTAP_TX_ATTENUATION:
+ case IEEE80211_RADIOTAP_RX_FLAGS:
rc = cpack_uint16(s, &u.u16);
break;
case IEEE80211_RADIOTAP_DB_TX_ATTENUATION:
@@ -1520,6 +1920,45 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
break;
rc = cpack_uint8(s, &u4.u8);
break;
+ case IEEE80211_RADIOTAP_MCS:
+ rc = cpack_uint8(s, &u.u8);
+ if (rc != 0)
+ break;
+ rc = cpack_uint8(s, &u2.u8);
+ if (rc != 0)
+ break;
+ rc = cpack_uint8(s, &u3.u8);
+ break;
+ case IEEE80211_RADIOTAP_VENDOR_NAMESPACE: {
+ u_int8_t vns[3];
+ u_int16_t length;
+ u_int8_t subspace;
+
+ if ((cpack_align_and_reserve(s, 2)) == NULL) {
+ rc = -1;
+ break;
+ }
+
+ rc = cpack_uint8(s, &vns[0]);
+ if (rc != 0)
+ break;
+ rc = cpack_uint8(s, &vns[1]);
+ if (rc != 0)
+ break;
+ rc = cpack_uint8(s, &vns[2]);
+ if (rc != 0)
+ break;
+ rc = cpack_uint8(s, &subspace);
+ if (rc != 0)
+ break;
+ rc = cpack_uint16(s, &length);
+ if (rc != 0)
+ break;
+
+ /* Skip up to length */
+ s->c_next += length;
+ break;
+ }
default:
/* this bit indicates a field whose
* size we do not know, so we cannot
@@ -1534,18 +1973,64 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
return rc;
}
+ /* Preserve the state present flags */
+ state->present = presentflags;
+
switch (bit) {
case IEEE80211_RADIOTAP_CHANNEL:
+ /*
+ * If CHANNEL and XCHANNEL are both present, skip
+ * CHANNEL.
+ */
+ if (presentflags & (1 << IEEE80211_RADIOTAP_XCHANNEL))
+ break;
print_chaninfo(u.u16, u2.u16);
break;
case IEEE80211_RADIOTAP_FHSS:
printf("fhset %d fhpat %d ", u.u16 & 0xff, (u.u16 >> 8) & 0xff);
break;
case IEEE80211_RADIOTAP_RATE:
- if (u.u8 & 0x80)
- PRINT_HT_RATE("", u.u8, " Mb/s ");
- else
- PRINT_RATE("", u.u8, " Mb/s ");
+ /*
+ * XXX On FreeBSD rate & 0x80 means we have an MCS. On
+ * Linux and AirPcap it does not. (What about
+ * Mac OS X, NetBSD, OpenBSD, and DragonFly BSD?)
+ *
+ * This is an issue either for proprietary extensions
+ * to 11a or 11g, which do exist, or for 11n
+ * implementations that stuff a rate value into
+ * this field, which also appear to exist.
+ *
+ * We currently handle that by assuming that
+ * if the 0x80 bit is set *and* the remaining
+ * bits have a value between 0 and 15 it's
+ * an MCS value, otherwise it's a rate. If
+ * there are cases where systems that use
+ * "0x80 + MCS index" for MCS indices > 15,
+ * or stuff a rate value here between 64 and
+ * 71.5 Mb/s in here, we'll need a preference
+ * setting. Such rates do exist, e.g. 11n
+ * MCS 7 at 20 MHz with a long guard interval.
+ */
+ if (u.u8 >= 0x80 && u.u8 <= 0x8f) {
+ /*
+ * XXX - we don't know the channel width
+ * or guard interval length, so we can't
+ * convert this to a data rate.
+ *
+ * If you want us to show a data rate,
+ * use the MCS field, not the Rate field;
+ * the MCS field includes not only the
+ * MCS index, it also includes bandwidth
+ * and guard interval information.
+ *
+ * XXX - can we get the channel width
+ * from XChannel and the guard interval
+ * information from Flags, at least on
+ * FreeBSD?
+ */
+ printf("MCS %u ", u.u8 & 0x7f);
+ } else
+ printf("%2.1f Mb/s ", .5*u.u8);
break;
case IEEE80211_RADIOTAP_DBM_ANTSIGNAL:
printf("%ddB signal ", u.i8);
@@ -1589,9 +2074,89 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
case IEEE80211_RADIOTAP_TSFT:
printf("%" PRIu64 "us tsft ", u.u64);
break;
+ case IEEE80211_RADIOTAP_RX_FLAGS:
+ /* Do nothing for now */
+ break;
case IEEE80211_RADIOTAP_XCHANNEL:
print_chaninfo(u2.u16, u.u32);
break;
+ case IEEE80211_RADIOTAP_MCS: {
+ static const char *bandwidth[4] = {
+ "20 MHz",
+ "40 MHz",
+ "20 MHz (L)",
+ "20 MHz (U)"
+ };
+ float htrate;
+
+ if (u.u8 & IEEE80211_RADIOTAP_MCS_MCS_INDEX_KNOWN) {
+ /*
+ * We know the MCS index.
+ */
+ if (u3.u8 <= MAX_MCS_INDEX) {
+ /*
+ * And it's in-range.
+ */
+ if (u.u8 & (IEEE80211_RADIOTAP_MCS_BANDWIDTH_KNOWN|IEEE80211_RADIOTAP_MCS_GUARD_INTERVAL_KNOWN)) {
+ /*
+ * And we know both the bandwidth and
+ * the guard interval, so we can look
+ * up the rate.
+ */
+ htrate =
+ ieee80211_float_htrates \
+ [u3.u8] \
+ [((u2.u8 & IEEE80211_RADIOTAP_MCS_BANDWIDTH_MASK) == IEEE80211_RADIOTAP_MCS_BANDWIDTH_40 ? 1 : 0)] \
+ [((u2.u8 & IEEE80211_RADIOTAP_MCS_SHORT_GI) ? 1 : 0)];
+ } else {
+ /*
+ * We don't know both the bandwidth
+ * and the guard interval, so we can
+ * only report the MCS index.
+ */
+ htrate = 0.0;
+ }
+ } else {
+ /*
+ * The MCS value is out of range.
+ */
+ htrate = 0.0;
+ }
+ if (htrate != 0.0) {
+ /*
+ * We have the rate.
+ * Print it.
+ */
+ printf("%.1f Mb/s MCS %u ", htrate, u3.u8);
+ } else {
+ /*
+ * We at least have the MCS index.
+ * Print it.
+ */
+ printf("MCS %u ", u3.u8);
+ }
+ }
+ if (u.u8 & IEEE80211_RADIOTAP_MCS_BANDWIDTH_KNOWN) {
+ printf("%s ",
+ bandwidth[u2.u8 & IEEE80211_RADIOTAP_MCS_BANDWIDTH_MASK]);
+ }
+ if (u.u8 & IEEE80211_RADIOTAP_MCS_GUARD_INTERVAL_KNOWN) {
+ printf("%s GI ",
+ (u2.u8 & IEEE80211_RADIOTAP_MCS_SHORT_GI) ?
+ "short" : "lon");
+ }
+ if (u.u8 & IEEE80211_RADIOTAP_MCS_HT_FORMAT_KNOWN) {
+ printf("%s ",
+ (u2.u8 & IEEE80211_RADIOTAP_MCS_HT_GREENFIELD) ?
+ "greenfield" : "mixed");
+ }
+ if (u.u8 & IEEE80211_RADIOTAP_MCS_FEC_TYPE_KNOWN) {
+ printf("%s FEC ",
+ (u2.u8 & IEEE80211_RADIOTAP_MCS_FEC_LDPC) ?
+ "LDPC" : "BCC");
+ }
+ break;
+ }
}
return 0;
}
@@ -1611,6 +2176,7 @@ ieee802_11_radio_print(const u_char *p, u_int length, u_int caplen)
struct cpack_state cpacker;
struct ieee80211_radiotap_header *hdr;
u_int32_t present, next_present;
+ u_int32_t presentflags = 0;
u_int32_t *presentp, *last_presentp;
enum ieee80211_radiotap_type bit;
int bit0;
@@ -1619,6 +2185,7 @@ ieee802_11_radio_print(const u_char *p, u_int length, u_int caplen)
u_int8_t flags;
int pad;
u_int fcslen;
+ struct radiotap_state state;
if (caplen < sizeof(*hdr)) {
printf("[|802.11]");
@@ -1660,6 +2227,11 @@ ieee802_11_radio_print(const u_char *p, u_int length, u_int caplen)
fcslen = 0;
for (bit0 = 0, presentp = &hdr->it_present; presentp <= last_presentp;
presentp++, bit0 += 32) {
+ presentflags = EXTRACT_LE_32BITS(presentp);
+
+ /* Clear state. */
+ memset(&state, 0, sizeof(state));
+
for (present = EXTRACT_LE_32BITS(presentp); present;
present = next_present) {
/* clear the least significant bit that is set */
@@ -1669,16 +2241,16 @@ ieee802_11_radio_print(const u_char *p, u_int length, u_int caplen)
bit = (enum ieee80211_radiotap_type)
(bit0 + BITNO_32(present ^ next_present));
- if (print_radiotap_field(&cpacker, bit, &flags) != 0)
+ if (print_radiotap_field(&cpacker, bit, &flags, &state, presentflags) != 0)
goto out;
}
}
+out:
if (flags & IEEE80211_RADIOTAP_F_DATAPAD)
pad = 1; /* Atheros padding */
if (flags & IEEE80211_RADIOTAP_F_FCS)
fcslen = 4; /* FCS at end of packet */
-out:
return len + ieee802_11_print(p + len, length - len, caplen - len, pad,
fcslen);
#undef BITNO_32
diff --git a/contrib/tcpdump/print-802_15_4.c b/contrib/tcpdump/print-802_15_4.c
new file mode 100644
index 000000000000..2016552cea2c
--- /dev/null
+++ b/contrib/tcpdump/print-802_15_4.c
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2009
+ * Siemens AG, All rights reserved.
+ * Dmitry Eremin-Solenikov (dbaryshkov@gmail.com)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <pcap.h>
+#include <string.h>
+
+#include "interface.h"
+#include "addrtoname.h"
+
+#include "extract.h"
+
+static const char *ftypes[] = {
+ "Beacon", /* 0 */
+ "Data", /* 1 */
+ "ACK", /* 2 */
+ "Command", /* 3 */
+ "Reserved", /* 4 */
+ "Reserved", /* 5 */
+ "Reserved", /* 6 */
+ "Reserved", /* 7 */
+};
+
+static int
+extract_header_length(u_int16_t fc)
+{
+ int len = 0;
+
+ switch ((fc >> 10) & 0x3) {
+ case 0x00:
+ if (fc & (1 << 6)) /* intra-PAN with none dest addr */
+ return -1;
+ break;
+ case 0x01:
+ return -1;
+ case 0x02:
+ len += 4;
+ break;
+ case 0x03:
+ len += 10;
+ break;
+ }
+
+ switch ((fc >> 14) & 0x3) {
+ case 0x00:
+ break;
+ case 0x01:
+ return -1;
+ case 0x02:
+ len += 4;
+ break;
+ case 0x03:
+ len += 10;
+ break;
+ }
+
+ if (fc & (1 << 6)) {
+ if (len < 2)
+ return -1;
+ len -= 2;
+ }
+
+ return len;
+}
+
+
+u_int
+ieee802_15_4_if_print(struct netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ int hdrlen;
+ u_int16_t fc;
+ u_int8_t seq;
+
+ if (caplen < 3) {
+ ND_PRINT((ndo, "[|802.15.4] %x", caplen));
+ return caplen;
+ }
+
+ fc = EXTRACT_LE_16BITS(p);
+ hdrlen = extract_header_length(fc);
+
+ seq = EXTRACT_LE_8BITS(p + 2);
+
+ p += 3;
+ caplen -= 3;
+
+ ND_PRINT((ndo,"IEEE 802.15.4 %s packet ", ftypes[fc & 0x7]));
+ if (vflag)
+ ND_PRINT((ndo,"seq %02x ", seq));
+ if (hdrlen == -1) {
+ ND_PRINT((ndo,"malformed! "));
+ return caplen;
+ }
+
+
+ if (!vflag) {
+ p+= hdrlen;
+ caplen -= hdrlen;
+ } else {
+ u_int16_t panid = 0;
+
+ switch ((fc >> 10) & 0x3) {
+ case 0x00:
+ ND_PRINT((ndo,"none "));
+ break;
+ case 0x01:
+ ND_PRINT((ndo,"reserved destination addressing mode"));
+ return 0;
+ case 0x02:
+ panid = EXTRACT_LE_16BITS(p);
+ p += 2;
+ ND_PRINT((ndo,"%04x:%04x ", panid, EXTRACT_LE_16BITS(p)));
+ p += 2;
+ break;
+ case 0x03:
+ panid = EXTRACT_LE_16BITS(p);
+ p += 2;
+ ND_PRINT((ndo,"%04x:%s ", panid, le64addr_string(p)));
+ p += 8;
+ break;
+ }
+ ND_PRINT((ndo,"< ");
+
+ switch ((fc >> 14) & 0x3) {
+ case 0x00:
+ ND_PRINT((ndo,"none "));
+ break;
+ case 0x01:
+ ND_PRINT((ndo,"reserved source addressing mode"));
+ return 0;
+ case 0x02:
+ if (!(fc & (1 << 6))) {
+ panid = EXTRACT_LE_16BITS(p);
+ p += 2;
+ }
+ ND_PRINT((ndo,"%04x:%04x ", panid, EXTRACT_LE_16BITS(p)));
+ p += 2;
+ break;
+ case 0x03:
+ if (!(fc & (1 << 6))) {
+ panid = EXTRACT_LE_16BITS(p);
+ p += 2;
+ }
+ ND_PRINT((ndo,"%04x:%s ", panid, le64addr_string(p))));
+ p += 8;
+ break;
+ }
+
+ caplen -= hdrlen;
+ }
+
+ if (!suppress_default_print)
+ (ndo->ndo_default_print)(ndo, p, caplen);
+
+ return 0;
+}
diff --git a/contrib/tcpdump/print-ap1394.c b/contrib/tcpdump/print-ap1394.c
index cb9d972f43b6..ab0713b5a7a2 100644
--- a/contrib/tcpdump/print-ap1394.c
+++ b/contrib/tcpdump/print-ap1394.c
@@ -106,7 +106,7 @@ ap1394_if_print(const struct pcap_pkthdr *h, const u_char *p)
p += FIREWIRE_HDRLEN;
ether_type = EXTRACT_16BITS(&fp->firewire_type);
- if (ethertype_print(ether_type, p, length, caplen) == 0) {
+ if (ethertype_print(gndo, ether_type, p, length, caplen) == 0) {
/* ether_type not known, print raw packet */
if (!eflag)
ap1394_hdr_print((u_char *)fp, length + FIREWIRE_HDRLEN);
diff --git a/contrib/tcpdump/print-arcnet.c b/contrib/tcpdump/print-arcnet.c
index a7b9f0da6bd7..9531f346bff7 100644
--- a/contrib/tcpdump/print-arcnet.c
+++ b/contrib/tcpdump/print-arcnet.c
@@ -265,14 +265,14 @@ arcnet_encap_print(u_char arctype, const u_char *p,
#ifdef INET6
case ARCTYPE_INET6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
return (1);
#endif /*INET6*/
case ARCTYPE_ARP_OLD:
case ARCTYPE_ARP:
case ARCTYPE_REVARP:
- arp_print(gndo, p, length, caplen);
+ arp_print(gndo, p, length, caplen);
return (1);
case ARCTYPE_ATALK: /* XXX was this ever used? */
diff --git a/contrib/tcpdump/print-arp.c b/contrib/tcpdump/print-arp.c
index b15ae50092ff..fd985548705d 100644
--- a/contrib/tcpdump/print-arp.c
+++ b/contrib/tcpdump/print-arp.c
@@ -320,6 +320,7 @@ arp_print(netdissect_options *ndo,
return;
case ARPHRD_FRELAY:
linkaddr = LINKADDR_FRELAY;
+ break;
default:
linkaddr = LINKADDR_ETHER;
break;
diff --git a/contrib/tcpdump/print-atalk.c b/contrib/tcpdump/print-atalk.c
index 6a8056bf5563..d088ffe9fc68 100644
--- a/contrib/tcpdump/print-atalk.c
+++ b/contrib/tcpdump/print-atalk.c
@@ -101,30 +101,19 @@ llap_print(register const u_char *bp, u_int length)
u_short snet;
u_int hdrlen;
-#if 0
- /*
- * Our packet is on a 4-byte boundary, as we're either called
- * directly from a top-level link-layer printer (ltalk_if_print)
- * or from the UDP printer. The LLAP+DDP header is a multiple
- * of 4 bytes in length, so the DDP payload is also on a 4-byte
- * boundary, and we don't need to align it before calling
- * "ddp_print()".
- */
+ if (length < sizeof(*lp)) {
+ (void)printf(" [|llap %u]", length);
+ return (length);
+ }
lp = (const struct LAP *)bp;
bp += sizeof(*lp);
length -= sizeof(*lp);
-#else
- {
- static struct LAP lp_ = {0, 0, lapDDP};
- lp = &lp_;
- }
-#endif
hdrlen = sizeof(*lp);
switch (lp->type) {
case lapShortDDP:
if (length < ddpSSize) {
- (void)printf(" [|sddp %d]", length);
+ (void)printf(" [|sddp %u]", length);
return (length);
}
sdp = (const struct atShortDDP *)bp;
@@ -140,7 +129,7 @@ llap_print(register const u_char *bp, u_int length)
case lapDDP:
if (length < ddpSize) {
- (void)printf(" [|ddp %d]", length);
+ (void)printf(" [|ddp %u]", length);
return (length);
}
dp = (const struct atDDP *)bp;
@@ -163,7 +152,7 @@ llap_print(register const u_char *bp, u_int length)
#endif
default:
- printf("%d > %d at-lap#%d %d",
+ printf("%d > %d at-lap#%d %u",
lp->src, lp->dst, lp->type, length);
break;
}
@@ -185,7 +174,7 @@ atalk_print(register const u_char *bp, u_int length)
printf("AT ");
if (length < ddpSize) {
- (void)printf(" [|ddp %d]", length);
+ (void)printf(" [|ddp %u]", length);
return;
}
dp = (const struct atDDP *)bp;
@@ -274,6 +263,10 @@ atp_print(register const struct atATP *ap, u_int length)
fputs(tstr, stdout);
return;
}
+ if (length < sizeof(*ap)) {
+ (void)printf(" [|atp %u]", length);
+ return;
+ }
length -= sizeof(*ap);
switch (ap->control & 0xc0) {
@@ -285,7 +278,7 @@ atp_print(register const struct atATP *ap, u_int length)
atp_bitmap_print(ap->bitmap);
if (length != 0)
- (void)printf(" [len=%d]", length);
+ (void)printf(" [len=%u]", length);
switch (ap->control & (atpEOM|atpSTS)) {
case atpEOM:
@@ -301,7 +294,7 @@ atp_print(register const struct atATP *ap, u_int length)
break;
case atpRspCode:
- (void)printf(" atp-resp%s%d:%d (%d)",
+ (void)printf(" atp-resp%s%d:%d (%u)",
ap->control & atpEOM? "*" : " ",
EXTRACT_16BITS(&ap->transID), ap->bitmap, length);
switch (ap->control & (atpXO|atpSTS)) {
@@ -324,7 +317,7 @@ atp_print(register const struct atATP *ap, u_int length)
/* length should be zero */
if (length)
- (void)printf(" [len=%d]", length);
+ (void)printf(" [len=%u]", length);
/* there shouldn't be any control flags */
if (ap->control & (atpXO|atpEOM|atpSTS)) {
@@ -346,7 +339,7 @@ atp_print(register const struct atATP *ap, u_int length)
break;
default:
- (void)printf(" atp-0x%x %d (%d)", ap->control,
+ (void)printf(" atp-0x%x %d (%u)", ap->control,
EXTRACT_16BITS(&ap->transID), length);
break;
}
@@ -396,14 +389,14 @@ nbp_print(register const struct atNBP *np, u_int length, register u_short snet,
const u_char *ep;
if (length < nbpHeaderSize) {
- (void)printf(" truncated-nbp %d", length);
+ (void)printf(" truncated-nbp %u", length);
return;
}
length -= nbpHeaderSize;
if (length < 8) {
/* must be room for at least one tuple */
- (void)printf(" truncated-nbp %d", length + nbpHeaderSize);
+ (void)printf(" truncated-nbp %u", length + nbpHeaderSize);
return;
}
/* ep points to end of available data */
@@ -448,7 +441,7 @@ nbp_print(register const struct atNBP *np, u_int length, register u_short snet,
break;
default:
- (void)printf(" nbp-0x%x %d (%d)", np->control, np->id,
+ (void)printf(" nbp-0x%x %d (%u)", np->control, np->id,
length);
break;
}
@@ -560,19 +553,17 @@ ataddr_string(u_short atnet, u_char athost)
if (first && (first = 0, !nflag)
&& (fp = fopen("/etc/atalk.names", "r"))) {
char line[256];
- int i1, i2, i3;
+ int i1, i2;
while (fgets(line, sizeof(line), fp)) {
if (line[0] == '\n' || line[0] == 0 || line[0] == '#')
continue;
- if (sscanf(line, "%d.%d.%d %256s", &i1, &i2, &i3,
- nambuf) == 4)
+ if (sscanf(line, "%d.%d %256s", &i1, &i2, nambuf) == 3)
/* got a hostname. */
- i3 |= ((i1 << 8) | i2) << 8;
- else if (sscanf(line, "%d.%d %256s", &i1, &i2,
- nambuf) == 3)
+ i2 |= (i1 << 8);
+ else if (sscanf(line, "%d %256s", &i1, nambuf) == 2)
/* got a net name */
- i3 = (((i1 << 8) | i2) << 8) | 255;
+ i2 = (i1 << 8) | 255;
else
continue;
@@ -605,11 +596,9 @@ ataddr_string(u_short atnet, u_char athost)
tp->addr = (atnet << 8) | athost;
tp->nxt = newhnamemem();
if (athost != 255)
- (void)snprintf(nambuf, sizeof(nambuf), "%d.%d.%d",
- atnet >> 8, atnet & 0xff, athost);
+ (void)snprintf(nambuf, sizeof(nambuf), "%d.%d", atnet, athost);
else
- (void)snprintf(nambuf, sizeof(nambuf), "%d.%d", atnet >> 8,
- atnet & 0xff);
+ (void)snprintf(nambuf, sizeof(nambuf), "%d", atnet);
tp->name = strdup(nambuf);
return (tp->name);
diff --git a/contrib/tcpdump/print-atm.c b/contrib/tcpdump/print-atm.c
index e679f74a253e..b0fd6c2e844d 100644
--- a/contrib/tcpdump/print-atm.c
+++ b/contrib/tcpdump/print-atm.c
@@ -272,10 +272,12 @@ sig_print(const u_char *p, int caplen)
printf(":%s ",
tok2str(msgtype2str, "msgtype#%d", p[MSG_TYPE_POS]));
- if (caplen < CALL_REF_POS+3) {
- printf("[|atm]");
- return;
- }
+ /*
+ * The call reference comes before the message type,
+ * so if we know we have the message type, which we
+ * do from the caplen test above, we also know we have
+ * the call reference.
+ */
call_ref = EXTRACT_24BITS(&p[CALL_REF_POS]);
printf("CALL_REF:0x%06x", call_ref);
} else {
diff --git a/contrib/tcpdump/print-babel.c b/contrib/tcpdump/print-babel.c
new file mode 100644
index 000000000000..e787f8b2fc8c
--- /dev/null
+++ b/contrib/tcpdump/print-babel.c
@@ -0,0 +1,414 @@
+/*
+ * Copyright (c) 2007-2011 Grégoire Henry, Juliusz Chroboczek
+ *
+ * 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 project 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 PROJECT 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 PROJECT 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "addrtoname.h"
+#include "interface.h"
+#include "extract.h"
+
+static void babel_print_v2(const u_char *cp, u_int length);
+
+void
+babel_print(const u_char *cp, u_int length) {
+ printf("babel");
+
+ TCHECK2(*cp, 4);
+
+ if(cp[0] != 42) {
+ printf(" malformed header");
+ return;
+ } else {
+ printf(" %d", cp[1]);
+ }
+
+ switch(cp[1]) {
+ case 2:
+ babel_print_v2(cp,length);
+ break;
+ default:
+ printf(" unknown version");
+ break;
+ }
+
+ return;
+
+ trunc:
+ printf(" [|babel]");
+ return;
+}
+
+#define MESSAGE_PAD1 0
+#define MESSAGE_PADN 1
+#define MESSAGE_ACK_REQ 2
+#define MESSAGE_ACK 3
+#define MESSAGE_HELLO 4
+#define MESSAGE_IHU 5
+#define MESSAGE_ROUTER_ID 6
+#define MESSAGE_NH 7
+#define MESSAGE_UPDATE 8
+#define MESSAGE_REQUEST 9
+#define MESSAGE_MH_REQUEST 10
+
+static const char *
+format_id(const u_char *id)
+{
+ static char buf[25];
+ snprintf(buf, 25, "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
+ id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7]);
+ buf[24] = '\0';
+ return buf;
+}
+
+static const unsigned char v4prefix[16] =
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0, 0, 0, 0 };
+
+static const char *
+format_prefix(const u_char *prefix, unsigned char plen)
+{
+ static char buf[50];
+ if(plen >= 96 && memcmp(prefix, v4prefix, 12) == 0)
+ snprintf(buf, 50, "%s/%u", ipaddr_string(prefix + 12), plen - 96);
+ else
+ snprintf(buf, 50, "%s/%u", ip6addr_string(prefix), plen);
+ buf[49] = '\0';
+ return buf;
+}
+
+static const char *
+format_address(const u_char *prefix)
+{
+ if(memcmp(prefix, v4prefix, 12) == 0)
+ return ipaddr_string(prefix + 12);
+ else
+ return ip6addr_string(prefix);
+}
+
+static int
+network_prefix(int ae, int plen, unsigned int omitted,
+ const unsigned char *p, const unsigned char *dp,
+ unsigned int len, unsigned char *p_r)
+{
+ unsigned pb;
+ unsigned char prefix[16];
+
+ if(plen >= 0)
+ pb = (plen + 7) / 8;
+ else if(ae == 1)
+ pb = 4;
+ else
+ pb = 16;
+
+ if(pb > 16)
+ return -1;
+
+ memset(prefix, 0, 16);
+
+ switch(ae) {
+ case 0: break;
+ case 1:
+ if(omitted > 4 || pb > 4 || (pb > omitted && len < pb - omitted))
+ return -1;
+ memcpy(prefix, v4prefix, 12);
+ if(omitted) {
+ if (dp == NULL) return -1;
+ memcpy(prefix, dp, 12 + omitted);
+ }
+ if(pb > omitted) memcpy(prefix + 12 + omitted, p, pb - omitted);
+ break;
+ case 2:
+ if(omitted > 16 || (pb > omitted && len < pb - omitted))
+ return -1;
+ if(omitted) {
+ if (dp == NULL) return -1;
+ memcpy(prefix, dp, omitted);
+ }
+ if(pb > omitted) memcpy(prefix + omitted, p, pb - omitted);
+ break;
+ case 3:
+ if(pb > 8 && len < pb - 8) return -1;
+ prefix[0] = 0xfe;
+ prefix[1] = 0x80;
+ if(pb > 8) memcpy(prefix + 8, p, pb - 8);
+ break;
+ default:
+ return -1;
+ }
+
+ memcpy(p_r, prefix, 16);
+ return 1;
+}
+
+static int
+network_address(int ae, const unsigned char *a, unsigned int len,
+ unsigned char *a_r)
+{
+ return network_prefix(ae, -1, 0, a, NULL, len, a_r);
+}
+
+#define ICHECK(i, l) \
+ if ((i) + (l) > bodylen || (i) + (l) > length) goto corrupt;
+
+static void
+babel_print_v2(const u_char *cp, u_int length) {
+ u_int i;
+ u_short bodylen;
+ u_char v4_prefix[16] =
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0, 0, 0, 0 };
+ u_char v6_prefix[16] = {0};
+
+ TCHECK2(*cp, 4);
+ if (length < 4)
+ goto corrupt;
+ bodylen = EXTRACT_16BITS(cp + 2);
+ printf(" (%u)", bodylen);
+
+ /* Process the TLVs in the body */
+ i = 0;
+ while(i < bodylen) {
+ const u_char *message;
+ u_char type, len;
+
+ message = cp + 4 + i;
+ TCHECK2(*message, 2);
+ ICHECK(i, 2);
+ type = message[0];
+ len = message[1];
+
+ TCHECK2(*message, 2 + len);
+ ICHECK(i, 2 + len);
+
+ switch(type) {
+ case MESSAGE_PAD1: {
+ if(!vflag)
+ printf(" pad1");
+ else
+ printf("\n\tPad 1");
+ }
+ break;
+
+ case MESSAGE_PADN: {
+ if(!vflag)
+ printf(" padN");
+ else
+ printf("\n\tPad %d", len + 2);
+ }
+ break;
+
+ case MESSAGE_ACK_REQ: {
+ u_short nonce, interval;
+ if(!vflag)
+ printf(" ack-req");
+ else {
+ printf("\n\tAcknowledgment Request ");
+ if(len < 6) goto corrupt;
+ nonce = EXTRACT_16BITS(message + 4);
+ interval = EXTRACT_16BITS(message + 6);
+ printf("%04x %d", nonce, interval);
+ }
+ }
+ break;
+
+ case MESSAGE_ACK: {
+ u_short nonce;
+ if(!vflag)
+ printf(" ack");
+ else {
+ printf("\n\tAcknowledgment ");
+ if(len < 2) goto corrupt;
+ nonce = EXTRACT_16BITS(message + 2);
+ printf("%04x", nonce);
+ }
+ }
+ break;
+
+ case MESSAGE_HELLO: {
+ u_short seqno, interval;
+ if(!vflag)
+ printf(" hello");
+ else {
+ printf("\n\tHello ");
+ if(len < 6) goto corrupt;
+ seqno = EXTRACT_16BITS(message + 4);
+ interval = EXTRACT_16BITS(message + 6);
+ printf("seqno %u interval %u", seqno, interval);
+ }
+ }
+ break;
+
+ case MESSAGE_IHU: {
+ unsigned short txcost, interval;
+ if(!vflag)
+ printf(" ihu");
+ else {
+ u_char address[16];
+ int rc;
+ printf("\n\tIHU ");
+ if(len < 6) goto corrupt;
+ txcost = EXTRACT_16BITS(message + 4);
+ interval = EXTRACT_16BITS(message + 6);
+ rc = network_address(message[2], message + 8, len - 6, address);
+ if(rc < 0) { printf("[|babel]"); break; }
+ printf("%s txcost %u interval %d",
+ format_address(address), txcost, interval);
+ }
+ }
+ break;
+
+ case MESSAGE_ROUTER_ID: {
+ if(!vflag)
+ printf(" router-id");
+ else {
+ printf("\n\tRouter Id");
+ if(len < 10) goto corrupt;
+ printf(" %s", format_id(message + 4));
+ }
+ }
+ break;
+
+ case MESSAGE_NH: {
+ if(!vflag)
+ printf(" nh");
+ else {
+ int rc;
+ u_char nh[16];
+ printf("\n\tNext Hop");
+ if(len < 2) goto corrupt;
+ rc = network_address(message[2], message + 4, len - 2, nh);
+ if(rc < 0) goto corrupt;
+ printf(" %s", format_address(nh));
+ }
+ }
+ break;
+
+ case MESSAGE_UPDATE: {
+ if(!vflag) {
+ printf(" update");
+ if(len < 1)
+ printf("/truncated");
+ else
+ printf("%s%s%s",
+ (message[3] & 0x80) ? "/prefix": "",
+ (message[3] & 0x40) ? "/id" : "",
+ (message[3] & 0x3f) ? "/unknown" : "");
+ } else {
+ u_short interval, seqno, metric;
+ u_char plen;
+ int rc;
+ u_char prefix[16];
+ printf("\n\tUpdate");
+ if(len < 10) goto corrupt;
+ plen = message[4] + (message[2] == 1 ? 96 : 0);
+ rc = network_prefix(message[2], message[4], message[5],
+ message + 12,
+ message[2] == 1 ? v4_prefix : v6_prefix,
+ len - 10, prefix);
+ if(rc < 0) goto corrupt;
+ interval = EXTRACT_16BITS(message + 6);
+ seqno = EXTRACT_16BITS(message + 8);
+ metric = EXTRACT_16BITS(message + 10);
+ printf("%s%s%s %s metric %u seqno %u interval %u",
+ (message[3] & 0x80) ? "/prefix": "",
+ (message[3] & 0x40) ? "/id" : "",
+ (message[3] & 0x3f) ? "/unknown" : "",
+ format_prefix(prefix, plen),
+ metric, seqno, interval);
+ if(message[3] & 0x80) {
+ if(message[2] == 1)
+ memcpy(v4_prefix, prefix, 16);
+ else
+ memcpy(v6_prefix, prefix, 16);
+ }
+ }
+ }
+ break;
+
+ case MESSAGE_REQUEST: {
+ if(!vflag)
+ printf(" request");
+ else {
+ int rc;
+ u_char prefix[16], plen;
+ printf("\n\tRequest ");
+ if(len < 2) goto corrupt;
+ plen = message[3] + (message[2] == 1 ? 96 : 0);
+ rc = network_prefix(message[2], message[3], 0,
+ message + 4, NULL, len - 2, prefix);
+ if(rc < 0) goto corrupt;
+ plen = message[3] + (message[2] == 1 ? 96 : 0);
+ printf("for %s",
+ message[2] == 0 ? "any" : format_prefix(prefix, plen));
+ }
+ }
+ break;
+
+ case MESSAGE_MH_REQUEST : {
+ if(!vflag)
+ printf(" mh-request");
+ else {
+ int rc;
+ u_short seqno;
+ u_char prefix[16], plen;
+ printf("\n\tMH-Request ");
+ if(len < 14) goto corrupt;
+ seqno = EXTRACT_16BITS(message + 4);
+ rc = network_prefix(message[2], message[3], 0,
+ message + 16, NULL, len - 14, prefix);
+ if(rc < 0) goto corrupt;
+ plen = message[3] + (message[2] == 1 ? 96 : 0);
+ printf("(%u hops) for %s seqno %u id %s",
+ message[6], format_prefix(prefix, plen),
+ seqno, format_id(message + 8));
+ }
+ }
+ break;
+ default:
+ if(!vflag)
+ printf(" unknown");
+ else
+ printf("\n\tUnknown message type %d", type);
+ }
+ i += len + 2;
+ }
+ return;
+
+ trunc:
+ printf(" [|babel]");
+ return;
+
+ corrupt:
+ printf(" (corrupt)");
+ return;
+}
diff --git a/contrib/tcpdump/print-bgp.c b/contrib/tcpdump/print-bgp.c
index d77802dd734b..6460a59e0c47 100644
--- a/contrib/tcpdump/print-bgp.c
+++ b/contrib/tcpdump/print-bgp.c
@@ -401,8 +401,11 @@ static struct tok bgp_safi_values[] = {
#define BGP_EXT_COM_L2INFO 0x800a /* draft-kompella-ppvpn-l2vpn */
-#define BGP_EXT_COM_SOURCE_AS 0x0009 /* draft-ietf-l3vpn-2547bis-mcast-bgp-02.txt */
-#define BGP_EXT_COM_VRF_RT_IMP 0x010a /* draft-ietf-l3vpn-2547bis-mcast-bgp-02.txt */
+#define BGP_EXT_COM_SOURCE_AS 0x0009 /* RFC-ietf-l3vpn-2547bis-mcast-bgp-08.txt */
+#define BGP_EXT_COM_VRF_RT_IMP 0x010b /* RFC-ietf-l3vpn-2547bis-mcast-bgp-08.txt */
+#define BGP_EXT_COM_L2VPN_RT_0 0x000a /* L2VPN Identifier,Format AS(2bytes):AN(4bytes) */
+#define BGP_EXT_COM_L2VPN_RT_1 0xF10a /* L2VPN Identifier,Format IP address:AN(2bytes) */
+
/* http://www.cisco.com/en/US/tech/tk436/tk428/technologies_tech_note09186a00801eb09a.shtml */
#define BGP_EXT_COM_EIGRP_GEN 0x8800
@@ -443,6 +446,8 @@ static struct tok bgp_extd_comm_subtype_values[] = {
{ BGP_EXT_COM_EIGRP_EXT_REMPROTO_REMMETRIC , "eigrp-external-route (remote-proto, remote-metric)" },
{ BGP_EXT_COM_SOURCE_AS, "source-AS" },
{ BGP_EXT_COM_VRF_RT_IMP, "vrf-route-import"},
+ { BGP_EXT_COM_L2VPN_RT_0, "l2vpn-id"},
+ { BGP_EXT_COM_L2VPN_RT_1, "l2vpn-id"},
{ 0, NULL},
};
@@ -951,57 +956,84 @@ decode_labeled_vpn_l2(const u_char *pptr, char *buf, u_int buflen)
plen=EXTRACT_16BITS(pptr);
tlen=plen;
pptr+=2;
- TCHECK2(pptr[0],15);
- buf[0]='\0';
- strlen=snprintf(buf, buflen, "RD: %s, CE-ID: %u, Label-Block Offset: %u, Label Base %u",
- bgp_vpn_rd_print(pptr),
- EXTRACT_16BITS(pptr+8),
- EXTRACT_16BITS(pptr+10),
- EXTRACT_24BITS(pptr+12)>>4); /* the label is offsetted by 4 bits so lets shift it right */
- UPDATE_BUF_BUFLEN(buf, buflen, strlen);
- pptr+=15;
- tlen-=15;
-
- /* ok now the variable part - lets read out TLVs*/
- while (tlen>0) {
- if (tlen < 3)
- return -1;
- TCHECK2(pptr[0], 3);
- tlv_type=*pptr++;
- tlv_len=EXTRACT_16BITS(pptr);
- ttlv_len=tlv_len;
- pptr+=2;
-
- switch(tlv_type) {
- case 1:
- if (buflen!=0) {
- strlen=snprintf(buf,buflen, "\n\t\tcircuit status vector (%u) length: %u: 0x",
- tlv_type,
- tlv_len);
- UPDATE_BUF_BUFLEN(buf, buflen, strlen);
- }
- ttlv_len=ttlv_len/8+1; /* how many bytes do we need to read ? */
- while (ttlv_len>0) {
- TCHECK(pptr[0]);
- if (buflen!=0) {
- strlen=snprintf(buf,buflen, "%02x",*pptr++);
- UPDATE_BUF_BUFLEN(buf, buflen, strlen);
- }
- ttlv_len--;
- }
- break;
- default:
- if (buflen!=0) {
- strlen=snprintf(buf,buflen, "\n\t\tunknown TLV #%u, length: %u",
- tlv_type,
- tlv_len);
- UPDATE_BUF_BUFLEN(buf, buflen, strlen);
- }
- break;
- }
- tlen-=(tlv_len<<3); /* the tlv-length is expressed in bits so lets shift it right */
+ /* Old and new L2VPN NLRI share AFI/SAFI
+ * -> Assume a 12 Byte-length NLRI is auto-discovery-only
+ * and > 17 as old format. Complain for the middle case
+ */
+ if (plen==12) {
+ /* assume AD-only with RD, BGPNH */
+ TCHECK2(pptr[0],12);
+ buf[0]='\0';
+ strlen=snprintf(buf, buflen, "RD: %s, BGPNH: %s",
+ bgp_vpn_rd_print(pptr),
+ /* need something like getname() here */
+ getname(pptr+8)
+ );
+ UPDATE_BUF_BUFLEN(buf, buflen, strlen);
+ pptr+=12;
+ tlen-=12;
+ return plen;
+ } else if (plen>17) {
+ /* assume old format */
+ /* RD, ID, LBLKOFF, LBLBASE */
+
+ TCHECK2(pptr[0],15);
+ buf[0]='\0';
+ strlen=snprintf(buf, buflen, "RD: %s, CE-ID: %u, Label-Block Offset: %u, Label Base %u",
+ bgp_vpn_rd_print(pptr),
+ EXTRACT_16BITS(pptr+8),
+ EXTRACT_16BITS(pptr+10),
+ EXTRACT_24BITS(pptr+12)>>4); /* the label is offsetted by 4 bits so lets shift it right */
+ UPDATE_BUF_BUFLEN(buf, buflen, strlen);
+ pptr+=15;
+ tlen-=15;
+
+ /* ok now the variable part - lets read out TLVs*/
+ while (tlen>0) {
+ if (tlen < 3)
+ return -1;
+ TCHECK2(pptr[0], 3);
+ tlv_type=*pptr++;
+ tlv_len=EXTRACT_16BITS(pptr);
+ ttlv_len=tlv_len;
+ pptr+=2;
+
+ switch(tlv_type) {
+ case 1:
+ if (buflen!=0) {
+ strlen=snprintf(buf,buflen, "\n\t\tcircuit status vector (%u) length: %u: 0x",
+ tlv_type,
+ tlv_len);
+ UPDATE_BUF_BUFLEN(buf, buflen, strlen);
+ }
+ ttlv_len=ttlv_len/8+1; /* how many bytes do we need to read ? */
+ while (ttlv_len>0) {
+ TCHECK(pptr[0]);
+ if (buflen!=0) {
+ strlen=snprintf(buf,buflen, "%02x",*pptr++);
+ UPDATE_BUF_BUFLEN(buf, buflen, strlen);
+ }
+ ttlv_len--;
+ }
+ break;
+ default:
+ if (buflen!=0) {
+ strlen=snprintf(buf,buflen, "\n\t\tunknown TLV #%u, length: %u",
+ tlv_type,
+ tlv_len);
+ UPDATE_BUF_BUFLEN(buf, buflen, strlen);
+ }
+ break;
+ }
+ tlen-=(tlv_len<<3); /* the tlv-length is expressed in bits so lets shift it right */
+ }
+ return plen+2;
+
+ } else {
+ /* complain bitterly ? */
+ /* fall through */
+ goto trunc;
}
- return plen+2;
trunc:
return -2;
@@ -1939,6 +1971,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
switch(extd_comm) {
case BGP_EXT_COM_RT_0:
case BGP_EXT_COM_RO_0:
+ case BGP_EXT_COM_L2VPN_RT_0:
printf(": %u:%u (= %s)",
EXTRACT_16BITS(tptr+2),
EXTRACT_32BITS(tptr+4),
@@ -1946,6 +1979,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
break;
case BGP_EXT_COM_RT_1:
case BGP_EXT_COM_RO_1:
+ case BGP_EXT_COM_L2VPN_RT_1:
case BGP_EXT_COM_VRF_RT_IMP:
printf(": %s:%u",
getname(tptr+2),
diff --git a/contrib/tcpdump/print-carp.c b/contrib/tcpdump/print-carp.c
new file mode 100644
index 000000000000..ba5be7c6217a
--- /dev/null
+++ b/contrib/tcpdump/print-carp.c
@@ -0,0 +1,88 @@
+/* $OpenBSD: print-carp.c,v 1.6 2009/10/27 23:59:55 deraadt Exp $ */
+
+/*
+ * Copyright (c) 2000 William C. Fenner.
+ * All rights reserved.
+ *
+ * Kevin Steves <ks@hp.se> July 2000
+ * Modified to:
+ * - print version, type string and packet length
+ * - print IP address count if > 1 (-v)
+ * - verify checksum (-v)
+ * - print authentication string (-v)
+ *
+ * Copyright (c) 2011 Advanced Computing Technologies
+ * George V. Neille-Neil
+ *
+ * Modified to:
+ * - work correctly with CARP
+ * - compile into the latest tcpdump
+ * - print out the counter
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * The name of William C. Fenner may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <netinet/in.h>
+
+#include "interface.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+void
+carp_print(register const u_char *bp, register u_int len, int ttl)
+{
+ int version, type;
+ const char *type_s;
+
+ TCHECK(bp[0]);
+ version = (bp[0] & 0xf0) >> 4;
+ type = bp[0] & 0x0f;
+ if (type == 1)
+ type_s = "advertise";
+ else
+ type_s = "unknown";
+ printf("CARPv%d-%s %d: ", version, type_s, len);
+ if (ttl != 255)
+ printf("[ttl=%d!] ", ttl);
+ if (version != 2 || type != 1)
+ return;
+ TCHECK(bp[2]);
+ TCHECK(bp[5]);
+ printf("vhid=%d advbase=%d advskew=%d authlen=%d ",
+ bp[1], bp[5], bp[2], bp[3]);
+ if (vflag) {
+ struct cksum_vec vec[1];
+ vec[0].ptr = (const u_int8_t *)bp;
+ vec[0].len = len;
+ if (TTEST2(bp[0], len) && in_cksum(vec, 1))
+ printf(" (bad carp cksum %x!)",
+ EXTRACT_16BITS(&bp[6]));
+ }
+ printf("counter=%" PRIu64, EXTRACT_64BITS(&bp[8]));
+
+ return;
+trunc:
+ printf("[|carp]");
+}
diff --git a/contrib/tcpdump/print-cdp.c b/contrib/tcpdump/print-cdp.c
index bef7f5eacadd..7bc617a96357 100644
--- a/contrib/tcpdump/print-cdp.c
+++ b/contrib/tcpdump/print-cdp.c
@@ -124,7 +124,7 @@ cdp_print(const u_char *pptr, u_int length, u_int caplen)
tok2str(cdp_tlv_values,"unknown field type", type),
type,
len,
- len>1 ? "s" : ""); /* plural */
+ PLURAL_SUFFIX(len)); /* plural */
switch (type) {
diff --git a/contrib/tcpdump/print-chdlc.c b/contrib/tcpdump/print-chdlc.c
index 238e91a98ce1..261b15ad7efd 100644
--- a/contrib/tcpdump/print-chdlc.c
+++ b/contrib/tcpdump/print-chdlc.c
@@ -85,7 +85,7 @@ chdlc_print(register const u_char *p, u_int length) {
break;
#ifdef INET6
case ETHERTYPE_IPV6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case CHDLC_TYPE_SLARP:
diff --git a/contrib/tcpdump/print-dccp.c b/contrib/tcpdump/print-dccp.c
index fee4a6e50574..79ea5f72ee5f 100644
--- a/contrib/tcpdump/print-dccp.c
+++ b/contrib/tcpdump/print-dccp.c
@@ -60,7 +60,7 @@ static const char *dccp_feature_nums[] = {
"check data checksum",
};
-static inline int dccp_csum_coverage(const struct dccp_hdr* dh, u_int len)
+static inline u_int dccp_csum_coverage(const struct dccp_hdr* dh, u_int len)
{
u_int cov;
@@ -73,61 +73,15 @@ static inline int dccp_csum_coverage(const struct dccp_hdr* dh, u_int len)
static int dccp_cksum(const struct ip *ip,
const struct dccp_hdr *dh, u_int len)
{
- int cov = dccp_csum_coverage(dh, len);
- union phu {
- struct phdr {
- u_int32_t src;
- u_int32_t dst;
- u_char mbz;
- u_char proto;
- u_int16_t len;
- } ph;
- u_int16_t pa[6];
- } phu;
- const u_int16_t *sp;
-
- /* pseudo-header.. */
- phu.ph.mbz = 0;
- phu.ph.len = htons(len);
- phu.ph.proto = IPPROTO_DCCP;
- memcpy(&phu.ph.src, &ip->ip_src.s_addr, sizeof(u_int32_t));
- if (IP_HL(ip) == 5)
- memcpy(&phu.ph.dst, &ip->ip_dst.s_addr, sizeof(u_int32_t));
- else
- phu.ph.dst = ip_finddst(ip);
-
- sp = &phu.pa[0];
- return in_cksum((u_short *)dh, cov, sp[0]+sp[1]+sp[2]+sp[3]+sp[4]+sp[5]);
+ return nextproto4_cksum(ip, (const u_int8_t *)(void *)dh,
+ dccp_csum_coverage(dh, len), IPPROTO_DCCP);
}
#ifdef INET6
static int dccp6_cksum(const struct ip6_hdr *ip6, const struct dccp_hdr *dh, u_int len)
{
- size_t i;
- u_int32_t sum = 0;
- int cov = dccp_csum_coverage(dh, len);
- union {
- struct {
- struct in6_addr ph_src;
- struct in6_addr ph_dst;
- u_int32_t ph_len;
- u_int8_t ph_zero[3];
- u_int8_t ph_nxt;
- } ph;
- u_int16_t pa[20];
- } phu;
-
- /* pseudo-header */
- memset(&phu, 0, sizeof(phu));
- phu.ph.ph_src = ip6->ip6_src;
- phu.ph.ph_dst = ip6->ip6_dst;
- phu.ph.ph_len = htonl(len);
- phu.ph.ph_nxt = IPPROTO_DCCP;
-
- for (i = 0; i < sizeof(phu.pa) / sizeof(phu.pa[0]); i++)
- sum += phu.pa[i];
-
- return in_cksum((u_short *)dh, cov, sum);
+ return nextproto6_cksum(ip6, (const u_int8_t *)(void *)dh,
+ dccp_csum_coverage(dh, len), IPPROTO_DCCP);
}
#endif
diff --git a/contrib/tcpdump/print-dhcp6.c b/contrib/tcpdump/print-dhcp6.c
index 26855ccbfb18..a75da823815a 100644
--- a/contrib/tcpdump/print-dhcp6.c
+++ b/contrib/tcpdump/print-dhcp6.c
@@ -229,15 +229,15 @@ dhcp6opt_name(int type)
case DH6OPT_SIP_SERVER_A:
return "SIP-servers-address";
case DH6OPT_DNS:
- return "DNS";
+ return "DNS-server";
case DH6OPT_DNSNAME:
- return "DNS-name";
+ return "DNS-search-list";
case DH6OPT_IA_PD:
return "IA_PD";
case DH6OPT_IA_PD_PREFIX:
return "IA_PD-prefix";
case DH6OPT_NTP_SERVERS:
- return "NTP-Server";
+ return "NTP-server";
case DH6OPT_LIFETIME:
return "lifetime";
case DH6OPT_NIS_SERVERS:
diff --git a/contrib/tcpdump/print-enc.c b/contrib/tcpdump/print-enc.c
index e98f7f78215c..5c01f3ef7b61 100644
--- a/contrib/tcpdump/print-enc.c
+++ b/contrib/tcpdump/print-enc.c
@@ -80,7 +80,7 @@ enc_if_print(const struct pcap_pkthdr *h, register const u_char *p)
break;
#ifdef INET6
case AF_INET6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif /*INET6*/
}
diff --git a/contrib/tcpdump/print-ether.c b/contrib/tcpdump/print-ether.c
index 5091e81644a5..2179215b6080 100644
--- a/contrib/tcpdump/print-ether.c
+++ b/contrib/tcpdump/print-ether.c
@@ -25,6 +25,7 @@ static const char rcsid[] _U_ =
"@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.106 2008-02-06 10:47:53 guy Exp $ (LBL)";
#endif
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -47,6 +48,9 @@ const struct tok ethertype_values[] = {
{ ETHERTYPE_MPLS_MULTI, "MPLS multicast" },
{ ETHERTYPE_IPV6, "IPv6" },
{ ETHERTYPE_8021Q, "802.1Q" },
+ { ETHERTYPE_8021Q9100, "802.1Q-9100" },
+ { ETHERTYPE_8021QinQ, "802.1Q-QinQ" },
+ { ETHERTYPE_8021Q9200, "802.1Q-9200" },
{ ETHERTYPE_VMAN, "VMAN" },
{ ETHERTYPE_PUP, "PUP" },
{ ETHERTYPE_ARP, "ARP"},
@@ -86,33 +90,34 @@ const struct tok ethertype_values[] = {
};
static inline void
-ether_hdr_print(register const u_char *bp, u_int length)
+ether_hdr_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
{
register const struct ether_header *ep;
u_int16_t ether_type;
ep = (const struct ether_header *)bp;
- (void)printf("%s > %s",
+ (void)ND_PRINT((ndo, "%s > %s",
etheraddr_string(ESRC(ep)),
- etheraddr_string(EDST(ep)));
+ etheraddr_string(EDST(ep))));
ether_type = EXTRACT_16BITS(&ep->ether_type);
- if (!qflag) {
+ if (!ndo->ndo_qflag) {
if (ether_type <= ETHERMTU)
- (void)printf(", 802.3");
+ (void)ND_PRINT((ndo, ", 802.3"));
else
- (void)printf(", ethertype %s (0x%04x)",
+ (void)ND_PRINT((ndo, ", ethertype %s (0x%04x)",
tok2str(ethertype_values,"Unknown", ether_type),
- ether_type);
+ ether_type));
} else {
if (ether_type <= ETHERMTU)
- (void)printf(", 802.3");
+ (void)ND_PRINT((ndo, ", 802.3"));
else
- (void)printf(", %s", tok2str(ethertype_values,"Unknown Ethertype (0x%04x)", ether_type));
+ (void)ND_PRINT((ndo, ", %s", tok2str(ethertype_values,"Unknown Ethertype (0x%04x)", ether_type)));
}
- (void)printf(", length %u: ", length);
+ (void)ND_PRINT((ndo, ", length %u: ", length));
}
/*
@@ -122,8 +127,9 @@ ether_hdr_print(register const u_char *bp, u_int length)
* frame's protocol, and an argument to pass to that function.
*/
void
-ether_print(const u_char *p, u_int length, u_int caplen,
- void (*print_encap_header)(const u_char *), const u_char *encap_header_arg)
+ether_print(netdissect_options *ndo,
+ const u_char *p, u_int length, u_int caplen,
+ void (*print_encap_header)(netdissect_options *ndo, const u_char *), const u_char *encap_header_arg)
{
struct ether_header *ep;
u_int orig_length;
@@ -131,14 +137,14 @@ ether_print(const u_char *p, u_int length, u_int caplen,
u_short extracted_ether_type;
if (caplen < ETHER_HDRLEN || length < ETHER_HDRLEN) {
- printf("[|ether]");
+ ND_PRINT((ndo, "[|ether]"));
return;
}
- if (eflag) {
+ if (ndo->ndo_eflag) {
if (print_encap_header != NULL)
- (*print_encap_header)(encap_header_arg);
- ether_hdr_print(p, length);
+ (*print_encap_header)(ndo, encap_header_arg);
+ ether_hdr_print(ndo, p, length);
}
orig_length = length;
@@ -158,36 +164,39 @@ recurse:
if (llc_print(p, length, caplen, ESRC(ep), EDST(ep),
&extracted_ether_type) == 0) {
/* ether_type not known, print raw packet */
- if (!eflag) {
+ if (!ndo->ndo_eflag) {
if (print_encap_header != NULL)
- (*print_encap_header)(encap_header_arg);
- ether_hdr_print((u_char *)ep, orig_length);
+ (*print_encap_header)(ndo, encap_header_arg);
+ ether_hdr_print(ndo, (u_char *)ep, orig_length);
}
- if (!suppress_default_print)
- default_print(p, caplen);
+ if (!ndo->ndo_suppress_default_print)
+ ndo->ndo_default_print(ndo, p, caplen);
}
- } else if (ether_type == ETHERTYPE_8021Q) {
+ } else if (ether_type == ETHERTYPE_8021Q ||
+ ether_type == ETHERTYPE_8021Q9100 ||
+ ether_type == ETHERTYPE_8021Q9200 ||
+ ether_type == ETHERTYPE_8021QinQ) {
/*
* Print VLAN information, and then go back and process
* the enclosed type field.
*/
if (caplen < 4 || length < 4) {
- printf("[|vlan]");
+ ND_PRINT((ndo, "[|vlan]"));
return;
}
- if (eflag) {
+ if (ndo->ndo_eflag) {
u_int16_t tag = EXTRACT_16BITS(p);
- printf("vlan %u, p %u%s, ",
+ ND_PRINT((ndo, "vlan %u, p %u%s, ",
tag & 0xfff,
tag >> 13,
- (tag & 0x1000) ? ", CFI" : "");
+ (tag & 0x1000) ? ", CFI" : ""));
}
ether_type = EXTRACT_16BITS(p + 2);
- if (eflag && ether_type > ETHERMTU)
- printf("ethertype %s, ", tok2str(ethertype_values,"0x%04x", ether_type));
+ if (ndo->ndo_eflag && ether_type > ETHERMTU)
+ ND_PRINT((ndo, "ethertype %s, ", tok2str(ethertype_values,"0x%04x", ether_type)));
p += 4;
length -= 4;
caplen -= 4;
@@ -206,26 +215,26 @@ recurse:
if (llc_print(p, length, caplen, ESRC(ep), EDST(ep),
&extracted_ether_type) == 0) {
/* ether_type not known, print raw packet */
- if (!eflag) {
+ if (!ndo->ndo_eflag) {
if (print_encap_header != NULL)
- (*print_encap_header)(encap_header_arg);
- ether_hdr_print((u_char *)ep, orig_length);
+ (*print_encap_header)(ndo, encap_header_arg);
+ ether_hdr_print(ndo, (u_char *)ep, orig_length);
}
- if (!suppress_default_print)
- default_print(p, caplen);
+ if (!ndo->ndo_suppress_default_print)
+ ndo->ndo_default_print(ndo, p, caplen);
}
} else {
- if (ethertype_print(ether_type, p, length, caplen) == 0) {
+ if (ethertype_print(ndo, ether_type, p, length, caplen) == 0) {
/* ether_type not known, print raw packet */
- if (!eflag) {
+ if (!ndo->ndo_eflag) {
if (print_encap_header != NULL)
- (*print_encap_header)(encap_header_arg);
- ether_hdr_print((u_char *)ep, orig_length);
+ (*print_encap_header)(ndo, encap_header_arg);
+ ether_hdr_print(ndo, (u_char *)ep, orig_length);
}
- if (!suppress_default_print)
- default_print(p, caplen);
+ if (!ndo->ndo_suppress_default_print)
+ ndo->ndo_default_print(ndo, p, caplen);
}
}
}
@@ -237,14 +246,72 @@ recurse:
* is the number of bytes actually captured.
*/
u_int
-ether_if_print(const struct pcap_pkthdr *h, const u_char *p)
+ether_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *p)
{
- ether_print(p, h->len, h->caplen, NULL, NULL);
+ ether_print(ndo, p, h->len, h->caplen, NULL, NULL);
return (ETHER_HDRLEN);
}
/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ *
+ * This is for DLT_NETANALYZER, which has a 4-byte pseudo-header
+ * before the Ethernet header.
+ */
+u_int
+netanalyzer_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ /*
+ * Fail if we don't have enough data for the Hilscher pseudo-header.
+ */
+ if (h->len < 4 || h->caplen < 4) {
+ printf("[|netanalyzer]");
+ return (h->caplen);
+ }
+
+ /* Skip the pseudo-header. */
+ ether_print(ndo, p + 4, h->len - 4, h->caplen - 4, NULL, NULL);
+
+ return (4 + ETHER_HDRLEN);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ *
+ * This is for DLT_NETANALYZER_TRANSPARENT, which has a 4-byte
+ * pseudo-header, a 7-byte Ethernet preamble, and a 1-byte Ethernet SOF
+ * before the Ethernet header.
+ */
+u_int
+netanalyzer_transparent_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ /*
+ * Fail if we don't have enough data for the Hilscher pseudo-header,
+ * preamble, and SOF.
+ */
+ if (h->len < 12 || h->caplen < 12) {
+ printf("[|netanalyzer-transparent]");
+ return (h->caplen);
+ }
+
+ /* Skip the pseudo-header, preamble, and SOF. */
+ ether_print(ndo, p + 12, h->len - 12, h->caplen - 12, NULL, NULL);
+
+ return (12 + ETHER_HDRLEN);
+}
+
+/*
* Prints the packet payload, given an Ethernet type code for the payload's
* protocol.
*
@@ -252,85 +319,87 @@ ether_if_print(const struct pcap_pkthdr *h, const u_char *p)
*/
int
-ethertype_print(u_short ether_type, const u_char *p, u_int length, u_int caplen)
+ethertype_print(netdissect_options *ndo,
+ u_short ether_type, const u_char *p,
+ u_int length, u_int caplen)
{
switch (ether_type) {
case ETHERTYPE_IP:
- ip_print(gndo, p, length);
+ ip_print(ndo, p, length);
return (1);
#ifdef INET6
case ETHERTYPE_IPV6:
- ip6_print(p, length);
+ ip6_print(ndo, p, length);
return (1);
#endif /*INET6*/
case ETHERTYPE_ARP:
case ETHERTYPE_REVARP:
- arp_print(gndo, p, length, caplen);
+ arp_print(ndo, p, length, caplen);
return (1);
case ETHERTYPE_DN:
- decnet_print(p, length, caplen);
+ decnet_print(/*ndo,*/p, length, caplen);
return (1);
case ETHERTYPE_ATALK:
- if (vflag)
+ if (ndo->ndo_vflag)
fputs("et1 ", stdout);
- atalk_print(p, length);
+ atalk_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_AARP:
- aarp_print(p, length);
+ aarp_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_IPX:
- printf("(NOV-ETHII) ");
- ipx_print(p, length);
+ ND_PRINT((ndo, "(NOV-ETHII) "));
+ ipx_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_ISO:
- isoclns_print(p+1, length-1, length-1);
+ isoclns_print(/*ndo,*/p+1, length-1, length-1);
return(1);
case ETHERTYPE_PPPOED:
case ETHERTYPE_PPPOES:
case ETHERTYPE_PPPOED2:
case ETHERTYPE_PPPOES2:
- pppoe_print(p, length);
+ pppoe_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_EAPOL:
- eap_print(gndo, p, length);
+ eap_print(ndo, p, length);
return (1);
case ETHERTYPE_RRCP:
- rrcp_print(gndo, p - 14 , length + 14);
+ rrcp_print(ndo, p - 14 , length + 14);
return (1);
case ETHERTYPE_PPP:
if (length) {
printf(": ");
- ppp_print(p, length);
+ ppp_print(/*ndo,*/p, length);
}
return (1);
case ETHERTYPE_MPCP:
- mpcp_print(p, length);
+ mpcp_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_SLOW:
- slow_print(p, length);
+ slow_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_CFM:
case ETHERTYPE_CFM_OLD:
- cfm_print(p, length);
+ cfm_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_LLDP:
- lldp_print(p, length);
+ lldp_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_LOOPBACK:
@@ -338,7 +407,7 @@ ethertype_print(u_short ether_type, const u_char *p, u_int length, u_int caplen)
case ETHERTYPE_MPLS:
case ETHERTYPE_MPLS_MULTI:
- mpls_print(p, length);
+ mpls_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_LAT:
diff --git a/contrib/tcpdump/print-forces.c b/contrib/tcpdump/print-forces.c
index 26e83d3167c7..033580e51bc2 100644
--- a/contrib/tcpdump/print-forces.c
+++ b/contrib/tcpdump/print-forces.c
@@ -213,7 +213,7 @@ trunc:
int
pdatacnt_print(register const u_char * pptr, register u_int len,
- u_int32_t IDcnt, u_int16_t op_msk, int indent)
+ u_int16_t IDcnt, u_int16_t op_msk, int indent)
{
u_int i;
int rc;
@@ -270,7 +270,7 @@ pdatacnt_print(register const u_char * pptr, register u_int len,
if (vflag >= 3 && ops->v != F_TLV_PDAT) {
if (pad)
printf
- ("%s %s (Length %d DataLen %d pad %d Bytes)\n",
+ ("%s %s (Length %d DataLen %d pad %d Bytes)\n",
ib, ops->s, EXTRACT_16BITS(&pdtlv->length),
tll, pad);
else
@@ -285,6 +285,7 @@ pdatacnt_print(register const u_char * pptr, register u_int len,
rc = ops->print((const u_char *)pdtlv,
tll + pad + TLV_HDRL, op_msk,
indent + 2);
+ len -= (TLV_HDRL + pad + tll);
} else {
printf("Invalid path data content type 0x%x len %d\n",
type, EXTRACT_16BITS(&pdtlv->length));
@@ -298,7 +299,7 @@ pd_err:
}
}
}
- return 0;
+ return len;
trunc:
fputs("[|forces]", stdout);
@@ -312,6 +313,8 @@ pdata_print(register const u_char * pptr, register u_int len,
const struct pathdata_h *pdh = (struct pathdata_h *)pptr;
char *ib = indent_pr(indent, 0);
u_int minsize = 0;
+ int more_pd = 0;
+ u_int16_t idcnt = 0;
TCHECK(*pdh);
if (len < sizeof(struct pathdata_h))
@@ -326,7 +329,8 @@ pdata_print(register const u_char * pptr, register u_int len,
}
pptr += sizeof(struct pathdata_h);
len -= sizeof(struct pathdata_h);
- minsize = EXTRACT_16BITS(&pdh->pIDcnt) * 4;
+ idcnt = EXTRACT_16BITS(&pdh->pIDcnt);
+ minsize = idcnt * 4;
if (len < minsize) {
printf("\t\t\ttruncated IDs expected %uB got %uB\n", minsize,
len);
@@ -334,7 +338,15 @@ pdata_print(register const u_char * pptr, register u_int len,
printf("]\n");
return -1;
}
- return pdatacnt_print(pptr, len, EXTRACT_16BITS(&pdh->pIDcnt), op_msk, indent);
+ more_pd = pdatacnt_print(pptr, len, idcnt, op_msk, indent);
+ if (more_pd > 0) {
+ int consumed = len - more_pd;
+ pptr += consumed;
+ len = more_pd;
+ /* XXX: Argh, recurse some more */
+ return recpdoptlv_print(pptr, len, op_msk, indent+1);
+ } else
+ return 0;
trunc:
fputs("[|forces]", stdout);
diff --git a/contrib/tcpdump/print-fr.c b/contrib/tcpdump/print-fr.c
index 67961ae34ba2..34db239bc634 100644
--- a/contrib/tcpdump/print-fr.c
+++ b/contrib/tcpdump/print-fr.c
@@ -258,7 +258,7 @@ fr_print(register const u_char *p, u_int length)
if (eflag)
fr_hdr_print(length, addr_len, dlci, flags, extracted_ethertype);
- if (ethertype_print(extracted_ethertype,
+ if (ethertype_print(gndo, extracted_ethertype,
p+addr_len+ETHERTYPE_LEN,
length-addr_len-ETHERTYPE_LEN,
length-addr_len-ETHERTYPE_LEN) == 0)
@@ -288,7 +288,7 @@ fr_print(register const u_char *p, u_int length)
#ifdef INET6
case NLPID_IP6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case NLPID_CLNP:
diff --git a/contrib/tcpdump/print-gre.c b/contrib/tcpdump/print-gre.c
index 106e6fd3111a..b6fa52236695 100644
--- a/contrib/tcpdump/print-gre.c
+++ b/contrib/tcpdump/print-gre.c
@@ -210,7 +210,7 @@ gre_print_0(const u_char *bp, u_int length)
break;
#ifdef INET6
case ETHERTYPE_IPV6:
- ip6_print(bp, len);
+ ip6_print(gndo, bp, len);
break;
#endif
case ETHERTYPE_MPLS:
@@ -226,7 +226,7 @@ gre_print_0(const u_char *bp, u_int length)
isoclns_print(bp, len, len);
break;
case ETHERTYPE_TEB:
- ether_print(bp, len, len, NULL, NULL);
+ ether_print(gndo, bp, len, len, NULL, NULL);
break;
default:
printf("gre-proto-0x%x", prot);
diff --git a/contrib/tcpdump/print-icmp.c b/contrib/tcpdump/print-icmp.c
index 811d5994b7fb..f0644851de46 100644
--- a/contrib/tcpdump/print-icmp.c
+++ b/contrib/tcpdump/print-icmp.c
@@ -348,6 +348,7 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
const struct icmp_mpls_ext_object_header_t *icmp_mpls_ext_object_header;
u_int hlen, dport, mtu, obj_tlen, obj_class_num, obj_ctype;
char buf[MAXHOSTNAMELEN + 100];
+ struct cksum_vec vec[1];
dp = (struct icmp *)bp;
ext_dp = (struct icmp_ext_t *)bp;
@@ -562,8 +563,11 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
(void)printf("ICMP %s, length %u", str, plen);
if (vflag && !fragmented) { /* don't attempt checksumming if this is a frag */
u_int16_t sum, icmp_sum;
+ struct cksum_vec vec[1];
if (TTEST2(*bp, plen)) {
- sum = in_cksum((u_short*)dp, plen, 0);
+ vec[0].ptr = (const u_int8_t *)(void *)dp;
+ vec[0].len = plen;
+ sum = in_cksum(vec, 1);
if (sum != 0) {
icmp_sum = EXTRACT_16BITS(&dp->icmp_cksum);
(void)printf(" (wrong icmp cksum %x (->%x)!)",
@@ -600,10 +604,12 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
* to check if an extension header is present. This is expedient,
* however not all implementations set the length field proper.
*/
- if (!ext_dp->icmp_length &&
- in_cksum((const u_short *)&ext_dp->icmp_ext_version_res,
- plen - ICMP_EXTD_MINLEN, 0)) {
- return;
+ if (!ext_dp->icmp_length) {
+ vec[0].ptr = (const u_int8_t *)(void *)&ext_dp->icmp_ext_version_res;
+ vec[0].len = plen - ICMP_EXTD_MINLEN;
+ if (in_cksum(vec, 1)) {
+ return;
+ }
}
printf("\n\tMPLS extension v%u",
@@ -619,10 +625,11 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
}
hlen = plen - ICMP_EXTD_MINLEN;
+ vec[0].ptr = (const u_int8_t *)(void *)&ext_dp->icmp_ext_version_res;
+ vec[0].len = hlen;
printf(", checksum 0x%04x (%scorrect), length %u",
EXTRACT_16BITS(ext_dp->icmp_ext_checksum),
- in_cksum((const u_short *)&ext_dp->icmp_ext_version_res,
- plen - ICMP_EXTD_MINLEN, 0) ? "in" : "",
+ in_cksum(vec, 1) ? "in" : "",
hlen);
hlen -= 4; /* subtract common header size */
diff --git a/contrib/tcpdump/print-icmp6.c b/contrib/tcpdump/print-icmp6.c
index 24765381b654..ce1046ed2ea7 100644
--- a/contrib/tcpdump/print-icmp6.c
+++ b/contrib/tcpdump/print-icmp6.c
@@ -197,50 +197,20 @@ print_lladdr(const u_int8_t *p, size_t l)
static int icmp6_cksum(const struct ip6_hdr *ip6, const struct icmp6_hdr *icp,
u_int len)
{
- size_t i;
- register const u_int16_t *sp;
- u_int32_t sum;
- union {
- struct {
- struct in6_addr ph_src;
- struct in6_addr ph_dst;
- u_int32_t ph_len;
- u_int8_t ph_zero[3];
- u_int8_t ph_nxt;
- } ph;
- u_int16_t pa[20];
- } phu;
-
- /* pseudo-header */
- memset(&phu, 0, sizeof(phu));
- phu.ph.ph_src = ip6->ip6_src;
- phu.ph.ph_dst = ip6->ip6_dst;
- phu.ph.ph_len = htonl(len);
- phu.ph.ph_nxt = IPPROTO_ICMPV6;
-
- sum = 0;
- for (i = 0; i < sizeof(phu.pa) / sizeof(phu.pa[0]); i++)
- sum += phu.pa[i];
-
- sp = (const u_int16_t *)icp;
-
- for (i = 0; i < (len & ~1); i += 2)
- sum += *sp++;
-
- if (len & 1)
- sum += htons((*(const u_int8_t *)sp) << 8);
-
- while (sum > 0xffff)
- sum = (sum & 0xffff) + (sum >> 16);
- sum = ~sum & 0xffff;
-
- return (sum);
+ return (nextproto6_cksum(ip6, (const u_int8_t *)(void *)icp, len,
+ IPPROTO_ICMPV6));
}
enum ND_RPL_CODE {
- ND_RPL_DAG_IS=0x01,
- ND_RPL_DAG_IO=0x02,
- ND_RPL_DAO =0x04
+ ND_RPL_DIS =0x00,
+ ND_RPL_DIO =0x01,
+ ND_RPL_DAO =0x02,
+ ND_RPL_DAO_ACK=0x03,
+ ND_RPL_SDIS =0x80,
+ ND_RPL_SDIO =0x81,
+ ND_RPL_SDAO =0x82,
+ ND_RPL_SDAO_ACK=0x83,
+ ND_RPL_SCC =0x8A,
};
enum ND_RPL_DIO_FLAGS {
@@ -266,17 +236,25 @@ rpl_print(netdissect_options *ndo,
const u_char *bp, u_int length _U_)
{
struct nd_rpl_dio *dio = (struct nd_rpl_dio *)bp;
+ int secured = hdr->icmp6_code & 0x80;
+ int basecode= hdr->icmp6_code & 0x7f;
ND_TCHECK(dio->rpl_dagid);
- switch(hdr->icmp6_code) {
- case ND_RPL_DAG_IS:
- ND_PRINT((ndo, ", DAG Information Solicitation"));
+ if(secured) {
+ ND_PRINT((ndo, ", (SEC)"));
+ } else {
+ ND_PRINT((ndo, ", (CLR)"));
+ }
+
+ switch(basecode) {
+ case ND_RPL_DIS:
+ ND_PRINT((ndo, "DODAG Information Solicitation"));
if(ndo->ndo_vflag) {
}
break;
- case ND_RPL_DAG_IO:
- ND_PRINT((ndo, ", DAG Information Object"));
+ case ND_RPL_DIO:
+ ND_PRINT((ndo, "DODAG Information Object"));
if(ndo->ndo_vflag) {
char dagid[65];
char *d = dagid;
@@ -299,12 +277,17 @@ rpl_print(netdissect_options *ndo,
}
break;
case ND_RPL_DAO:
- ND_PRINT((ndo, ", Destination Advertisement Object"));
+ ND_PRINT((ndo, "Destination Advertisement Object"));
+ if(ndo->ndo_vflag) {
+ }
+ break;
+ case ND_RPL_DAO_ACK:
+ ND_PRINT((ndo, "Destination Advertisement Object Ack"));
if(ndo->ndo_vflag) {
}
break;
default:
- ND_PRINT((ndo, ", RPL message, unknown code %u",hdr->icmp6_code));
+ ND_PRINT((ndo, "RPL message, unknown code %u",hdr->icmp6_code));
break;
}
return;
@@ -336,12 +319,15 @@ icmp6_print(netdissect_options *ndo,
TCHECK(dp->icmp6_cksum);
if (vflag && !fragmented) {
- int sum = dp->icmp6_cksum;
+ u_int16_t sum, udp_sum;
if (TTEST2(bp[0], length)) {
+ udp_sum = EXTRACT_16BITS(&dp->icmp6_cksum);
sum = icmp6_cksum(ip, dp, length);
if (sum != 0)
- (void)printf("[bad icmp6 cksum %x!] ", sum);
+ (void)printf("[bad icmp6 cksum 0x%04x -> 0x%04x!] ",
+ udp_sum,
+ in_cksum_shouldbe(udp_sum, sum));
else
(void)printf("[icmp6 sum ok] ");
}
diff --git a/contrib/tcpdump/print-igmp.c b/contrib/tcpdump/print-igmp.c
index a848562985d9..6522bc3044d0 100644
--- a/contrib/tcpdump/print-igmp.c
+++ b/contrib/tcpdump/print-igmp.c
@@ -259,6 +259,8 @@ trunc:
void
igmp_print(register const u_char *bp, register u_int len)
{
+ struct cksum_vec vec[1];
+
if (qflag) {
(void)printf("igmp");
return;
@@ -327,7 +329,9 @@ igmp_print(register const u_char *bp, register u_int len)
if (vflag && TTEST2(bp[0], len)) {
/* Check the IGMP checksum */
- if (in_cksum((const u_short*)bp, len, 0))
+ vec[0].ptr = bp;
+ vec[0].len = len;
+ if (in_cksum(vec, 1))
printf(" bad igmp cksum %x!", EXTRACT_16BITS(&bp[2]));
}
return;
diff --git a/contrib/tcpdump/print-ip.c b/contrib/tcpdump/print-ip.c
index dc9d2665ab19..989623386f06 100644
--- a/contrib/tcpdump/print-ip.c
+++ b/contrib/tcpdump/print-ip.c
@@ -89,7 +89,7 @@ ip_printroute(register const u_char *cp, u_int length)
* This is used for UDP and TCP pseudo-header in the checksum
* calculation.
*/
-u_int32_t
+static u_int32_t
ip_finddst(const struct ip *ip)
{
int length;
@@ -131,6 +131,39 @@ trunc:
return retval;
}
+/*
+ * Compute a V4-style checksum by building a pseudoheader.
+ */
+int
+nextproto4_cksum(const struct ip *ip, const u_int8_t *data,
+ u_int len, u_int next_proto)
+{
+ struct phdr {
+ u_int32_t src;
+ u_int32_t dst;
+ u_char mbz;
+ u_char proto;
+ u_int16_t len;
+ } ph;
+ struct cksum_vec vec[2];
+
+ /* pseudo-header.. */
+ ph.len = htons((u_int16_t)len);
+ ph.mbz = 0;
+ ph.proto = next_proto;
+ memcpy(&ph.src, &ip->ip_src.s_addr, sizeof(u_int32_t));
+ if (IP_HL(ip) == 5)
+ memcpy(&ph.dst, &ip->ip_dst.s_addr, sizeof(u_int32_t));
+ else
+ ph.dst = ip_finddst(ip);
+
+ vec[0].ptr = (const u_int8_t *)(void *)&ph;
+ vec[0].len = sizeof(ph);
+ vec[1].ptr = data;
+ vec[1].len = len;
+ return (in_cksum(vec, 2));
+}
+
static void
ip_printts(register const u_char *cp, u_int length)
{
@@ -270,92 +303,6 @@ trunc:
printf("[|ip]");
}
-/*
- * compute an IP header checksum.
- * don't modifiy the packet.
- */
-u_short
-in_cksum(const u_short *addr, register u_int len, int csum)
-{
- int nleft = len;
- const u_short *w = addr;
- u_short answer;
- int sum = csum;
-
- /*
- * Our algorithm is simple, using a 32 bit accumulator (sum),
- * we add sequential 16 bit words to it, and at the end, fold
- * back all the carry bits from the top 16 bits into the lower
- * 16 bits.
- */
- while (nleft > 1) {
- sum += *w++;
- nleft -= 2;
- }
- if (nleft == 1)
- sum += htons(*(u_char *)w<<8);
-
- /*
- * add back carry outs from top 16 bits to low 16 bits
- */
- sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
- sum += (sum >> 16); /* add carry */
- answer = ~sum; /* truncate to 16 bits */
- return (answer);
-}
-
-/*
- * Given the host-byte-order value of the checksum field in a packet
- * header, and the network-byte-order computed checksum of the data
- * that the checksum covers (including the checksum itself), compute
- * what the checksum field *should* have been.
- */
-u_int16_t
-in_cksum_shouldbe(u_int16_t sum, u_int16_t computed_sum)
-{
- u_int32_t shouldbe;
-
- /*
- * The value that should have gone into the checksum field
- * is the negative of the value gotten by summing up everything
- * *but* the checksum field.
- *
- * We can compute that by subtracting the value of the checksum
- * field from the sum of all the data in the packet, and then
- * computing the negative of that value.
- *
- * "sum" is the value of the checksum field, and "computed_sum"
- * is the negative of the sum of all the data in the packets,
- * so that's -(-computed_sum - sum), or (sum + computed_sum).
- *
- * All the arithmetic in question is one's complement, so the
- * addition must include an end-around carry; we do this by
- * doing the arithmetic in 32 bits (with no sign-extension),
- * and then adding the upper 16 bits of the sum, which contain
- * the carry, to the lower 16 bits of the sum, and then do it
- * again in case *that* sum produced a carry.
- *
- * As RFC 1071 notes, the checksum can be computed without
- * byte-swapping the 16-bit words; summing 16-bit words
- * on a big-endian machine gives a big-endian checksum, which
- * can be directly stuffed into the big-endian checksum fields
- * in protocol headers, and summing words on a little-endian
- * machine gives a little-endian checksum, which must be
- * byte-swapped before being stuffed into a big-endian checksum
- * field.
- *
- * "computed_sum" is a network-byte-order value, so we must put
- * it in host byte order before subtracting it from the
- * host-byte-order value from the header; the adjusted checksum
- * will be in host byte order, which is what we'll return.
- */
- shouldbe = sum;
- shouldbe += ntohs(computed_sum);
- shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
- shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
- return shouldbe;
-}
-
#define IP_RES 0x8000
static struct tok ip_frag_values[] = {
@@ -378,6 +325,7 @@ ip_print_demux(netdissect_options *ndo,
struct ip_print_demux_state *ipds)
{
struct protoent *proto;
+ struct cksum_vec vec[1];
again:
switch (ipds->nh) {
@@ -482,7 +430,7 @@ again:
case IPPROTO_IPV4:
/* DVMRP multicast tunnel (ip-in-ip encapsulation) */
- ip_print(gndo, ipds->cp, ipds->len);
+ ip_print(ndo, ipds->cp, ipds->len);
if (! vflag) {
ND_PRINT((ndo, " (ipip-proto-4)"));
return;
@@ -492,7 +440,7 @@ again:
#ifdef INET6
case IPPROTO_IPV6:
/* ip6-in-ip encapsulation */
- ip6_print(ipds->cp, ipds->len);
+ ip6_print(ndo, ipds->cp, ipds->len);
break;
#endif /*INET6*/
@@ -510,12 +458,25 @@ again:
break;
case IPPROTO_PIM:
- pim_print(ipds->cp, ipds->len,
- in_cksum((const u_short*)ipds->cp, ipds->len, 0));
+ vec[0].ptr = ipds->cp;
+ vec[0].len = ipds->len;
+ pim_print(ipds->cp, ipds->len, in_cksum(vec, 1));
break;
case IPPROTO_VRRP:
- vrrp_print(ipds->cp, ipds->len, ipds->ip->ip_ttl);
+ if (packettype == PT_CARP) {
+ if (vflag)
+ (void)printf("carp %s > %s: ",
+ ipaddr_string(&ipds->ip->ip_src),
+ ipaddr_string(&ipds->ip->ip_dst));
+ carp_print(ipds->cp, ipds->len, ipds->ip->ip_ttl);
+ } else {
+ if (vflag)
+ (void)printf("vrrp %s > %s: ",
+ ipaddr_string(&ipds->ip->ip_src),
+ ipaddr_string(&ipds->ip->ip_dst));
+ vrrp_print(ipds->cp, ipds->len, ipds->ip->ip_ttl);
+ }
break;
case IPPROTO_PGM:
@@ -563,6 +524,7 @@ ip_print(netdissect_options *ndo,
struct ip_print_demux_state *ipds=&ipd;
const u_char *ipend;
u_int hlen;
+ struct cksum_vec vec[1];
u_int16_t sum, ip_sum;
struct protoent *proto;
@@ -575,7 +537,7 @@ ip_print(netdissect_options *ndo,
else if (!eflag)
printf("IP ");
- if ((u_char *)(ipds->ip + 1) > snapend) {
+ if ((u_char *)(ipds->ip + 1) > ndo->ndo_snapend) {
printf("[|ip]");
return;
}
@@ -613,8 +575,8 @@ ip_print(netdissect_options *ndo,
* Cut off the snapshot length to the end of the IP payload.
*/
ipend = bp + ipds->len;
- if (ipend < snapend)
- snapend = ipend;
+ if (ipend < ndo->ndo_snapend)
+ ndo->ndo_snapend = ipend;
ipds->len -= hlen;
@@ -660,8 +622,10 @@ ip_print(netdissect_options *ndo,
printf(")");
}
- if (!Kflag && (u_char *)ipds->ip + hlen <= snapend) {
- sum = in_cksum((const u_short *)ipds->ip, hlen, 0);
+ if (!Kflag && (u_char *)ipds->ip + hlen <= ndo->ndo_snapend) {
+ vec[0].ptr = (const u_int8_t *)(void *)ipds->ip;
+ vec[0].len = hlen;
+ sum = in_cksum(vec, 1);
if (sum != 0) {
ip_sum = EXTRACT_16BITS(&ipds->ip->ip_sum);
(void)printf(", bad cksum %x (->%x)!", ip_sum,
@@ -724,7 +688,7 @@ ipN_print(register const u_char *bp, register u_int length)
return;
#ifdef INET6
case 6:
- ip6_print (bp, length);
+ ip6_print (gndo, bp, length);
return;
#endif
default:
diff --git a/contrib/tcpdump/print-ip6.c b/contrib/tcpdump/print-ip6.c
index 659fdadff106..b9039708085f 100644
--- a/contrib/tcpdump/print-ip6.c
+++ b/contrib/tcpdump/print-ip6.c
@@ -50,32 +50,38 @@ static const char rcsid[] _U_ =
* Compute a V6-style checksum by building a pseudoheader.
*/
int
-nextproto6_cksum(const struct ip6_hdr *ip6, const u_short *data,
+nextproto6_cksum(const struct ip6_hdr *ip6, const u_int8_t *data,
u_int len, u_int next_proto)
{
- size_t i;
- u_int32_t sum = 0;
- union ip6_pseudo_hdr phu;
+ struct {
+ struct in6_addr ph_src;
+ struct in6_addr ph_dst;
+ u_int32_t ph_len;
+ u_int8_t ph_zero[3];
+ u_int8_t ph_nxt;
+ } ph;
+ struct cksum_vec vec[2];
/* pseudo-header */
- memset(&phu, 0, sizeof(phu));
- phu.ph.ph_src = ip6->ip6_src;
- phu.ph.ph_dst = ip6->ip6_dst;
- phu.ph.ph_len = htonl(len);
- phu.ph.ph_nxt = next_proto;
-
- for (i = 0; i < sizeof(phu.pa) / sizeof(phu.pa[0]); i++) {
- sum += phu.pa[i];
- }
-
- return in_cksum(data, len, sum);
+ memset(&ph, 0, sizeof(ph));
+ ph.ph_src = ip6->ip6_src;
+ ph.ph_dst = ip6->ip6_dst;
+ ph.ph_len = htonl(len);
+ ph.ph_nxt = next_proto;
+
+ vec[0].ptr = (const u_int8_t *)(void *)&ph;
+ vec[0].len = sizeof(ph);
+ vec[1].ptr = data;
+ vec[1].len = len;
+
+ return in_cksum(vec, 2);
}
/*
* print an IP6 datagram.
*/
void
-ip6_print(register const u_char *bp, register u_int length)
+ip6_print(netdissect_options *ndo, const u_char *bp, u_int length)
{
register const struct ip6_hdr *ip6;
register int advance;
@@ -91,62 +97,62 @@ ip6_print(register const u_char *bp, register u_int length)
TCHECK(*ip6);
if (length < sizeof (struct ip6_hdr)) {
- (void)printf("truncated-ip6 %u", length);
+ (void)ND_PRINT((ndo, "truncated-ip6 %u", length));
return;
}
- if (!eflag)
- printf("IP6 ");
+ if (!ndo->ndo_eflag)
+ ND_PRINT((ndo, "IP6 "));
payload_len = EXTRACT_16BITS(&ip6->ip6_plen);
len = payload_len + sizeof(struct ip6_hdr);
if (length < len)
- (void)printf("truncated-ip6 - %u bytes missing!",
- len - length);
+ (void)ND_PRINT((ndo, "truncated-ip6 - %u bytes missing!",
+ len - length));
- if (vflag) {
+ if (ndo->ndo_vflag) {
flow = EXTRACT_32BITS(&ip6->ip6_flow);
- printf("(");
+ ND_PRINT((ndo, "("));
#if 0
/* rfc1883 */
if (flow & 0x0f000000)
- (void)printf("pri 0x%02x, ", (flow & 0x0f000000) >> 24);
+ (void)ND_PRINT((ndo, "pri 0x%02x, ", (flow & 0x0f000000) >> 24));
if (flow & 0x00ffffff)
- (void)printf("flowlabel 0x%06x, ", flow & 0x00ffffff);
+ (void)ND_PRINT((ndo, "flowlabel 0x%06x, ", flow & 0x00ffffff));
#else
/* RFC 2460 */
if (flow & 0x0ff00000)
- (void)printf("class 0x%02x, ", (flow & 0x0ff00000) >> 20);
+ (void)ND_PRINT((ndo, "class 0x%02x, ", (flow & 0x0ff00000) >> 20));
if (flow & 0x000fffff)
- (void)printf("flowlabel 0x%05x, ", flow & 0x000fffff);
+ (void)ND_PRINT((ndo, "flowlabel 0x%05x, ", flow & 0x000fffff));
#endif
- (void)printf("hlim %u, next-header %s (%u) payload length: %u) ",
+ (void)ND_PRINT((ndo, "hlim %u, next-header %s (%u) payload length: %u) ",
ip6->ip6_hlim,
tok2str(ipproto_values,"unknown",ip6->ip6_nxt),
ip6->ip6_nxt,
- payload_len);
+ payload_len));
}
/*
* Cut off the snapshot length to the end of the IP payload.
*/
ipend = bp + len;
- if (ipend < snapend)
- snapend = ipend;
+ if (ipend < ndo->ndo_snapend)
+ ndo->ndo_snapend = ipend;
cp = (const u_char *)ip6;
advance = sizeof(struct ip6_hdr);
nh = ip6->ip6_nxt;
- while (cp < snapend && advance > 0) {
+ while (cp < ndo->ndo_snapend && advance > 0) {
cp += advance;
len -= advance;
if (cp == (const u_char *)(ip6 + 1) &&
nh != IPPROTO_TCP && nh != IPPROTO_UDP &&
nh != IPPROTO_DCCP && nh != IPPROTO_SCTP) {
- (void)printf("%s > %s: ", ip6addr_string(&ip6->ip6_src),
- ip6addr_string(&ip6->ip6_dst));
+ (void)ND_PRINT((ndo, "%s > %s: ", ip6addr_string(&ip6->ip6_src),
+ ip6addr_string(&ip6->ip6_dst)));
}
switch (nh) {
@@ -160,7 +166,7 @@ ip6_print(register const u_char *bp, register u_int length)
break;
case IPPROTO_FRAGMENT:
advance = frag6_print(cp, (const u_char *)ip6);
- if (snapend <= cp + advance)
+ if (ndo->ndo_snapend <= cp + advance)
return;
nh = *cp;
fragmented = 1;
@@ -198,7 +204,7 @@ ip6_print(register const u_char *bp, register u_int length)
udp_print(cp, len, (const u_char *)ip6, fragmented);
return;
case IPPROTO_ICMPV6:
- icmp6_print(gndo, cp, len, (const u_char *)ip6, fragmented);
+ icmp6_print(ndo, cp, len, (const u_char *)ip6, fragmented);
return;
case IPPROTO_AH:
advance = ah_print(cp);
@@ -207,7 +213,7 @@ ip6_print(register const u_char *bp, register u_int length)
case IPPROTO_ESP:
{
int enh, padlen;
- advance = esp_print(gndo, cp, len, (const u_char *)ip6, &enh, &padlen);
+ advance = esp_print(ndo, cp, len, (const u_char *)ip6, &enh, &padlen);
nh = enh & 0xff;
len -= padlen;
break;
@@ -221,7 +227,7 @@ ip6_print(register const u_char *bp, register u_int length)
}
case IPPROTO_PIM:
- pim_print(cp, len, nextproto6_cksum(ip6, (u_short *)cp, len,
+ pim_print(cp, len, nextproto6_cksum(ip6, cp, len,
IPPROTO_PIM));
return;
@@ -230,11 +236,11 @@ ip6_print(register const u_char *bp, register u_int length)
return;
case IPPROTO_IPV6:
- ip6_print(cp, len);
+ ip6_print(ndo, cp, len);
return;
case IPPROTO_IPV4:
- ip_print(gndo, cp, len);
+ ip_print(ndo, cp, len);
return;
case IPPROTO_PGM:
@@ -250,18 +256,18 @@ ip6_print(register const u_char *bp, register u_int length)
return;
case IPPROTO_NONE:
- (void)printf("no next header");
+ (void)ND_PRINT((ndo, "no next header"));
return;
default:
- (void)printf("ip-proto-%d %d", nh, len);
+ (void)ND_PRINT((ndo, "ip-proto-%d %d", nh, len));
return;
}
}
return;
trunc:
- (void)printf("[|ip6]");
+ (void)ND_PRINT((ndo, "[|ip6]"));
}
#endif /* INET6 */
diff --git a/contrib/tcpdump/print-ipnet.c b/contrib/tcpdump/print-ipnet.c
index 957bd4f52341..187f939d3f8c 100644
--- a/contrib/tcpdump/print-ipnet.c
+++ b/contrib/tcpdump/print-ipnet.c
@@ -69,7 +69,7 @@ ipnet_print(struct netdissect_options *ndo, const u_char *p, u_int length, u_int
#ifdef INET6
case IPH_AF_INET6:
- ip6_print(p, length);
+ ip6_print(ndo, p, length);
break;
#endif /*INET6*/
diff --git a/contrib/tcpdump/print-ipx.c b/contrib/tcpdump/print-ipx.c
index 8184425efa33..f067755d80ed 100644
--- a/contrib/tcpdump/print-ipx.c
+++ b/contrib/tcpdump/print-ipx.c
@@ -198,7 +198,7 @@ ipx_rip_print(const u_short *ipx, u_int length)
(void)printf("ipx-rip-req");
if (length > 0) {
TCHECK(ipx[3]);
- (void)printf(" %u/%d.%d", EXTRACT_32BITS(&ipx[0]),
+ (void)printf(" %08x/%d.%d", EXTRACT_32BITS(&ipx[0]),
EXTRACT_16BITS(&ipx[2]), EXTRACT_16BITS(&ipx[3]));
}
break;
@@ -206,7 +206,7 @@ ipx_rip_print(const u_short *ipx, u_int length)
(void)printf("ipx-rip-resp");
for (i = 0; i < 50 && length > 0; i++) {
TCHECK(ipx[3]);
- (void)printf(" %u/%d.%d", EXTRACT_32BITS(&ipx[0]),
+ (void)printf(" %08x/%d.%d", EXTRACT_32BITS(&ipx[0]),
EXTRACT_16BITS(&ipx[2]), EXTRACT_16BITS(&ipx[3]));
ipx += 4;
diff --git a/contrib/tcpdump/print-isoclns.c b/contrib/tcpdump/print-isoclns.c
index a4af8adfd360..00fce7ef59a5 100644
--- a/contrib/tcpdump/print-isoclns.c
+++ b/contrib/tcpdump/print-isoclns.c
@@ -395,12 +395,14 @@ static struct tok isis_subtlv_link_attribute_values[] = {
};
#define ISIS_SUBTLV_AUTH_SIMPLE 1
+#define ISIS_SUBTLV_AUTH_GENERIC 3 /* rfc 5310 */
#define ISIS_SUBTLV_AUTH_MD5 54
#define ISIS_SUBTLV_AUTH_MD5_LEN 16
#define ISIS_SUBTLV_AUTH_PRIVATE 255
static struct tok isis_subtlv_auth_values[] = {
{ ISIS_SUBTLV_AUTH_SIMPLE, "simple text password"},
+ { ISIS_SUBTLV_AUTH_GENERIC, "Generic Crypto key-id"},
{ ISIS_SUBTLV_AUTH_MD5, "HMAC-MD5 password"},
{ ISIS_SUBTLV_AUTH_PRIVATE, "Routing Domain private password"},
{ 0, NULL }
@@ -441,8 +443,8 @@ static struct tok clnp_flag_values[] = {
#define ISIS_MASK_MTFLAGS(x) ((x)&0xf000)
static struct tok isis_mt_flag_values[] = {
- { 0x4000, "sub-TLVs present"},
- { 0x8000, "ATT bit set"},
+ { 0x4000, "ATT bit set"},
+ { 0x8000, "Overload bit set"},
{ 0, NULL}
};
@@ -618,10 +620,6 @@ struct isis_tlv_lsp {
void isoclns_print(const u_int8_t *p, u_int length, u_int caplen)
{
- const struct isis_common_header *header;
-
- header = (const struct isis_common_header *)p;
-
if (caplen <= 1) { /* enough bytes on the wire ? */
printf("|OSI");
return;
@@ -664,7 +662,7 @@ void isoclns_print(const u_int8_t *p, u_int length, u_int caplen)
#ifdef INET6
case NLPID_IP6:
- ip6_print(p+1, length-1);
+ ip6_print(gndo, p+1, length-1);
break;
#endif
@@ -1179,15 +1177,15 @@ esis_print(const u_int8_t *pptr, u_int length)
}
/* now walk the options */
- while (li >= 2) {
+ while (li != 0) {
u_int op, opli;
const u_int8_t *tptr;
- TCHECK2(*pptr, 2);
if (li < 2) {
printf(", bad opts/li");
return;
}
+ TCHECK2(*pptr, 2);
op = *pptr++;
opli = *pptr++;
li -= 2;
@@ -1206,8 +1204,11 @@ esis_print(const u_int8_t *pptr, u_int length)
switch (op) {
case ESIS_OPTION_ES_CONF_TIME:
- TCHECK2(*pptr, 2);
- printf("%us", EXTRACT_16BITS(tptr));
+ if (opli == 2) {
+ TCHECK2(*pptr, 2);
+ printf("%us", EXTRACT_16BITS(tptr));
+ } else
+ printf("(bad length)");
break;
case ESIS_OPTION_PROTOCOLS:
@@ -1779,7 +1780,7 @@ static int isis_print (const u_int8_t *p, u_int length)
u_int8_t pdu_type, max_area, id_length, tlv_type, tlv_len, tmp, alen, lan_alen, prefix_len;
u_int8_t ext_is_len, ext_ip_len, mt_len;
const u_int8_t *optr, *pptr, *tptr;
- u_short packet_len,pdu_len;
+ u_short packet_len,pdu_len, key_id;
u_int i,vendor_id;
int sigcheck;
@@ -2378,6 +2379,15 @@ static int isis_print (const u_int8_t *p, u_int length)
printf(" (%s)", tok2str(signature_check_values, "Unknown", sigcheck));
break;
+ case ISIS_SUBTLV_AUTH_GENERIC:
+ key_id = EXTRACT_16BITS((tptr+1));
+ printf("%u, password: ", key_id);
+ for(i=1 + sizeof(u_int16_t);i<tlv_len;i++) {
+ if (!TTEST2(*(tptr+i), 1))
+ goto trunctlv;
+ printf("%02x",*(tptr+i));
+ }
+ break;
case ISIS_SUBTLV_AUTH_PRIVATE:
default:
if(!print_unknown_data(tptr+1,"\n\t\t ",tlv_len-1))
diff --git a/contrib/tcpdump/print-juniper.c b/contrib/tcpdump/print-juniper.c
index 55ca1c9c6405..3bf68c382797 100644
--- a/contrib/tcpdump/print-juniper.c
+++ b/contrib/tcpdump/print-juniper.c
@@ -486,7 +486,7 @@ juniper_ggsn_print(const struct pcap_pkthdr *h, register const u_char *p)
break;
#ifdef INET6
case JUNIPER_PROTO_IPV6:
- ip6_print(p, l2info.length);
+ ip6_print(gndo, p, l2info.length);
break;
#endif /* INET6 */
default:
@@ -647,7 +647,7 @@ juniper_pppoe_print(const struct pcap_pkthdr *h, register const u_char *p)
p+=l2info.header_len;
/* this DLT contains nothing but raw ethernet frames */
- ether_print(p, l2info.length, l2info.caplen, NULL, NULL);
+ ether_print(gndo, p, l2info.length, l2info.caplen, NULL, NULL);
return l2info.header_len;
}
#endif
@@ -664,7 +664,7 @@ juniper_ether_print(const struct pcap_pkthdr *h, register const u_char *p)
p+=l2info.header_len;
/* this DLT contains nothing but raw Ethernet frames */
- ether_print(p, l2info.length, l2info.caplen, NULL, NULL);
+ ether_print(gndo, p, l2info.length, l2info.caplen, NULL, NULL);
return l2info.header_len;
}
#endif
@@ -736,7 +736,7 @@ juniper_pppoe_atm_print(const struct pcap_pkthdr *h, register const u_char *p)
extracted_ethertype = EXTRACT_16BITS(p);
/* this DLT contains nothing but raw PPPoE frames,
* prepended with a type field*/
- if (ethertype_print(extracted_ethertype,
+ if (ethertype_print(gndo, extracted_ethertype,
p+ETHERTYPE_LEN,
l2info.length-ETHERTYPE_LEN,
l2info.caplen-ETHERTYPE_LEN) == 0)
@@ -779,7 +779,7 @@ juniper_mlppp_print(const struct pcap_pkthdr *h, register const u_char *p)
return l2info.header_len;
#ifdef INET6
case JUNIPER_LSQ_L3_PROTO_IPV6:
- ip6_print(p,l2info.length);
+ ip6_print(gndo, p,l2info.length);
return l2info.header_len;
#endif
case JUNIPER_LSQ_L3_PROTO_MPLS:
@@ -834,7 +834,7 @@ juniper_mfr_print(const struct pcap_pkthdr *h, register const u_char *p)
return l2info.header_len;
#ifdef INET6
case JUNIPER_LSQ_L3_PROTO_IPV6:
- ip6_print(p,l2info.length);
+ ip6_print(gndo, p,l2info.length);
return l2info.header_len;
#endif
case JUNIPER_LSQ_L3_PROTO_MPLS:
@@ -987,7 +987,7 @@ juniper_atm2_print(const struct pcap_pkthdr *h, register const u_char *p)
if (l2info.direction != JUNIPER_BPF_PKT_IN && /* ether-over-1483 encaps ? */
(EXTRACT_32BITS(l2info.cookie) & ATM2_GAP_COUNT_MASK)) {
- ether_print(p, l2info.length, l2info.caplen, NULL, NULL);
+ ether_print(gndo, p, l2info.length, l2info.caplen, NULL, NULL);
return l2info.header_len;
}
@@ -1073,7 +1073,7 @@ ip_heuristic_guess(register const u_char *p, u_int length) {
case 0x6d:
case 0x6e:
case 0x6f:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
default:
diff --git a/contrib/tcpdump/print-lane.c b/contrib/tcpdump/print-lane.c
index 54c68c82aa2b..aa7931154911 100644
--- a/contrib/tcpdump/print-lane.c
+++ b/contrib/tcpdump/print-lane.c
@@ -61,9 +61,9 @@ static const struct tok lecop2str[] = {
};
static void
-lane_hdr_print(const u_char *bp)
+lane_hdr_print(netdissect_options *ndo, const u_char *bp)
{
- (void)printf("lecid:%x ", EXTRACT_16BITS(bp));
+ (void)ND_PRINT((ndo, "lecid:%x ", EXTRACT_16BITS(bp)));
}
/*
@@ -106,7 +106,7 @@ lane_print(const u_char *p, u_int length, u_int caplen)
* Now print the encapsulated frame, under the assumption
* that it's an Ethernet frame.
*/
- ether_print(p, length, caplen, lane_hdr_print, p - 2);
+ ether_print(gndo, p, length, caplen, lane_hdr_print, p - 2);
}
u_int
diff --git a/contrib/tcpdump/print-llc.c b/contrib/tcpdump/print-llc.c
index 73b4f3b07636..f304dd34d741 100644
--- a/contrib/tcpdump/print-llc.c
+++ b/contrib/tcpdump/print-llc.c
@@ -419,7 +419,7 @@ snap_print(const u_char *p, u_int length, u_int caplen, u_int bridge_pad)
* Cisco hardware; the protocol ID is
* an Ethernet protocol type.
*/
- ret = ethertype_print(et, p, length, caplen);
+ ret = ethertype_print(gndo, et, p, length, caplen);
if (ret)
return (ret);
break;
@@ -434,7 +434,7 @@ snap_print(const u_char *p, u_int length, u_int caplen, u_int bridge_pad)
* but used 0x000000 and an Ethernet
* packet type for AARP packets.
*/
- ret = ethertype_print(et, p, length, caplen);
+ ret = ethertype_print(gndo, et, p, length, caplen);
if (ret)
return (ret);
}
@@ -481,7 +481,7 @@ snap_print(const u_char *p, u_int length, u_int caplen, u_int bridge_pad)
/*
* What remains is an Ethernet packet.
*/
- ether_print(p, length, caplen, NULL, NULL);
+ ether_print(gndo, p, length, caplen, NULL, NULL);
return (1);
case PID_RFC2684_802_5_FCS:
diff --git a/contrib/tcpdump/print-lldp.c b/contrib/tcpdump/print-lldp.c
index e8f67fd23a53..0ee2f955db0b 100644
--- a/contrib/tcpdump/print-lldp.c
+++ b/contrib/tcpdump/print-lldp.c
@@ -12,10 +12,11 @@
* LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE.
*
- * support for the IEEE Link Discovery Protocol as per 802.1ab
+ * support for the IEEE Link Discovery Protocol as per 802.1AB
*
* Original code by Hannes Gredler (hannes@juniper.net)
* IEEE and TIA extensions by Carles Kishimoto <carles.kishimoto@gmail.com>
+ * DCBX extensions by Kaladhar Musunuru <kaladharm@sourceforge.net>
*/
#ifndef lint
@@ -542,6 +543,23 @@ static const struct tok lldp_aggregation_values[] = {
};
/*
+ * DCBX protocol subtypes.
+ */
+#define LLDP_DCBX_SUBTYPE_1 1
+#define LLDP_DCBX_SUBTYPE_2 2
+
+static const struct tok lldp_dcbx_subtype_values[] = {
+ { LLDP_DCBX_SUBTYPE_1, "DCB Capability Exchange Protocol Rev 1" },
+ { LLDP_DCBX_SUBTYPE_2, "DCB Capability Exchange Protocol Rev 1.01" },
+ { 0, NULL}
+};
+
+#define LLDP_DCBX_CONTROL_TLV 1
+#define LLDP_DCBX_PRIORITY_GROUPS_TLV 2
+#define LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV 3
+#define LLDP_DCBX_APPLICATION_TLV 4
+
+/*
* Interface numbering subtypes.
*/
#define LLDP_INTF_NUMB_IFX_SUBTYPE 2
@@ -556,13 +574,17 @@ static const struct tok lldp_intf_numb_subtype_values[] = {
#define LLDP_INTF_NUM_LEN 5
/*
- * Print IEEE private extensions. (802.1 annex F)
+ * Print IEEE 802.1 private extensions. (802.1AB annex E)
*/
static int
-lldp_private_8021_print(const u_char *tptr)
+lldp_private_8021_print(const u_char *tptr, u_int tlv_len)
{
int subtype, hexdump = FALSE;
+ u_int sublen;
+ if (tlv_len < 4) {
+ return hexdump;
+ }
subtype = *(tptr+3);
printf("\n\t %s Subtype (%u)",
@@ -571,24 +593,47 @@ lldp_private_8021_print(const u_char *tptr)
switch (subtype) {
case LLDP_PRIVATE_8021_SUBTYPE_PORT_VLAN_ID:
+ if (tlv_len < 6) {
+ return hexdump;
+ }
printf("\n\t port vlan id (PVID): %u",
EXTRACT_16BITS(tptr+4));
break;
case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_VLAN_ID:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
printf("\n\t port and protocol vlan id (PPVID): %u, flags [%s] (0x%02x)",
EXTRACT_16BITS(tptr+5),
bittok2str(lldp_8021_port_protocol_id_values, "none", *(tptr+4)),
*(tptr+4));
break;
case LLDP_PRIVATE_8021_SUBTYPE_VLAN_NAME:
+ if (tlv_len < 6) {
+ return hexdump;
+ }
printf("\n\t vlan id (VID): %u",
EXTRACT_16BITS(tptr+4));
+ if (tlv_len < 7) {
+ return hexdump;
+ }
+ sublen = *(tptr+6);
+ if (tlv_len < 7+sublen) {
+ return hexdump;
+ }
printf("\n\t vlan name: ");
- safeputs((const char *)tptr+7, *(tptr+6));
+ safeputs((const char *)tptr+7, sublen);
break;
case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY:
+ if (tlv_len < 5) {
+ return hexdump;
+ }
+ sublen = *(tptr+4);
+ if (tlv_len < 5+sublen) {
+ return hexdump;
+ }
printf("\n\t protocol identity: ");
- safeputs((const char *)tptr+5, *(tptr+4));
+ safeputs((const char *)tptr+5, sublen);
break;
default:
@@ -600,13 +645,16 @@ lldp_private_8021_print(const u_char *tptr)
}
/*
- * Print IEEE private extensions. (802.3)
+ * Print IEEE 802.3 private extensions. (802.3bc)
*/
static int
-lldp_private_8023_print(const u_char *tptr)
+lldp_private_8023_print(const u_char *tptr, u_int tlv_len)
{
int subtype, hexdump = FALSE;
+ if (tlv_len < 4) {
+ return hexdump;
+ }
subtype = *(tptr+3);
printf("\n\t %s Subtype (%u)",
@@ -615,6 +663,9 @@ lldp_private_8023_print(const u_char *tptr)
switch (subtype) {
case LLDP_PRIVATE_8023_SUBTYPE_MACPHY:
+ if (tlv_len < 9) {
+ return hexdump;
+ }
printf("\n\t autonegotiation [%s] (0x%02x)",
bittok2str(lldp_8023_autonegotiation_values, "none", *(tptr+4)),
*(tptr+4));
@@ -627,6 +678,9 @@ lldp_private_8023_print(const u_char *tptr)
break;
case LLDP_PRIVATE_8023_SUBTYPE_MDIPOWER:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
printf("\n\t MDI power support [%s], power pair %s, power class %s",
bittok2str(lldp_mdi_values, "none", *(tptr+4)),
tok2str(lldp_mdi_power_pairs_values, "unknown", *(tptr+5)),
@@ -634,6 +688,9 @@ lldp_private_8023_print(const u_char *tptr)
break;
case LLDP_PRIVATE_8023_SUBTYPE_LINKAGGR:
+ if (tlv_len < 9) {
+ return hexdump;
+ }
printf("\n\t aggregation status [%s], aggregation port ID %u",
bittok2str(lldp_aggregation_values, "none", *(tptr+4)),
EXTRACT_32BITS(tptr+5));
@@ -674,8 +731,12 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
int subtype, hexdump = FALSE;
u_int8_t location_format;
u_int16_t power_val;
- u_int8_t lci_len, ca_type, ca_len;
+ u_int lci_len;
+ u_int8_t ca_type, ca_len;
+ if (tlv_len < 4) {
+ return hexdump;
+ }
subtype = *(tptr+3);
printf("\n\t %s Subtype (%u)",
@@ -684,6 +745,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
switch (subtype) {
case LLDP_PRIVATE_TIA_SUBTYPE_CAPABILITIES:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
printf("\n\t Media capabilities [%s] (0x%04x)",
bittok2str(lldp_tia_capabilities_values, "none",
EXTRACT_16BITS(tptr+4)), EXTRACT_16BITS(tptr+4));
@@ -693,6 +757,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
break;
case LLDP_PRIVATE_TIA_SUBTYPE_NETWORK_POLICY:
+ if (tlv_len < 8) {
+ return hexdump;
+ }
printf("\n\t Application type [%s] (0x%02x)",
tok2str(lldp_tia_application_type_values, "none", *(tptr+4)),
*(tptr+4));
@@ -707,6 +774,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
break;
case LLDP_PRIVATE_TIA_SUBTYPE_LOCAL_ID:
+ if (tlv_len < 5) {
+ return hexdump;
+ }
location_format = *(tptr+4);
printf("\n\t Location data format %s (0x%02x)",
tok2str(lldp_tia_location_data_format_values, "unknown", location_format),
@@ -714,6 +784,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
switch (location_format) {
case LLDP_TIA_LOCATION_DATA_FORMAT_COORDINATE_BASED:
+ if (tlv_len < 21) {
+ return hexdump;
+ }
printf("\n\t Latitude resolution %u, latitude value %" PRIu64,
(*(tptr+5)>>2), lldp_extract_latlon(tptr+5));
printf("\n\t Longitude resolution %u, longitude value %" PRIu64,
@@ -730,7 +803,16 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
break;
case LLDP_TIA_LOCATION_DATA_FORMAT_CIVIC_ADDRESS:
+ if (tlv_len < 6) {
+ return hexdump;
+ }
lci_len = *(tptr+5);
+ if (lci_len < 3) {
+ return hexdump;
+ }
+ if (tlv_len < 7+lci_len) {
+ return hexdump;
+ }
printf("\n\t LCI length %u, LCI what %s (0x%02x), Country-code ",
lci_len,
tok2str(lldp_tia_location_lci_what_values, "unknown", *(tptr+6)),
@@ -744,6 +826,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
/* Decode each civic address element */
while (lci_len > 0) {
+ if (lci_len < 2) {
+ return hexdump;
+ }
ca_type = *(tptr);
ca_len = *(tptr+1);
@@ -758,6 +843,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
if ( ca_type == 0 || ca_len == 0) {
return hexdump;
}
+ if (lci_len < ca_len) {
+ return hexdump;
+ }
safeputs((const char *)tptr, ca_len);
tptr += ca_len;
@@ -777,6 +865,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
break;
case LLDP_PRIVATE_TIA_SUBTYPE_EXTENDED_POWER_MDI:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
printf("\n\t Power type [%s]",
(*(tptr+4)&0xC0>>6) ? "PD device" : "PSE device");
printf(", Power source [%s]",
@@ -812,24 +903,196 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
return hexdump;
}
+/*
+ * Print DCBX Protocol fields (V 1.01).
+ */
+static int
+lldp_private_dcbx_print(const u_char *pptr, u_int len)
+{
+ int subtype, hexdump = FALSE;
+ u_int8_t tval;
+ u_int16_t tlv;
+ u_int32_t i, pgval, uval;
+ u_int tlen, tlv_type, tlv_len;
+ const u_char *tptr, *mptr;
+
+ if (len < 4) {
+ return hexdump;
+ }
+ subtype = *(pptr+3);
+
+ printf("\n\t %s Subtype (%u)",
+ tok2str(lldp_dcbx_subtype_values, "unknown", subtype),
+ subtype);
+
+ /* by passing old version */
+ if (subtype == LLDP_DCBX_SUBTYPE_1)
+ return TRUE;
+
+ tptr = pptr + 4;
+ tlen = len - 4;
+
+ while (tlen >= sizeof(tlv)) {
+
+ TCHECK2(*tptr, sizeof(tlv));
+
+ tlv = EXTRACT_16BITS(tptr);
+
+ tlv_type = LLDP_EXTRACT_TYPE(tlv);
+ tlv_len = LLDP_EXTRACT_LEN(tlv);
+ hexdump = FALSE;
+
+ tlen -= sizeof(tlv);
+ tptr += sizeof(tlv);
+
+ /* loop check */
+ if (!tlv_type || !tlv_len) {
+ break;
+ }
+
+ TCHECK2(*tptr, tlv_len);
+ if (tlen < tlv_len) {
+ goto trunc;
+ }
+
+ /* decode every tlv */
+ switch (tlv_type) {
+ case LLDP_DCBX_CONTROL_TLV:
+ if (tlv_len < 10) {
+ goto trunc;
+ }
+ printf("\n\t Control - Protocol Control (type 0x%x, length %d)",
+ LLDP_DCBX_CONTROL_TLV, tlv_len);
+ printf("\n\t Oper_Version: %d", *tptr);
+ printf("\n\t Max_Version: %d", *(tptr+1));
+ printf("\n\t Sequence Number: %d", EXTRACT_32BITS(tptr+2));
+ printf("\n\t Acknowledgement Number: %d",
+ EXTRACT_32BITS(tptr+6));
+ break;
+ case LLDP_DCBX_PRIORITY_GROUPS_TLV:
+ if (tlv_len < 17) {
+ goto trunc;
+ }
+ printf("\n\t Feature - Priority Group (type 0x%x, length %d)",
+ LLDP_DCBX_PRIORITY_GROUPS_TLV, tlv_len);
+ printf("\n\t Oper_Version: %d", *tptr);
+ printf("\n\t Max_Version: %d", *(tptr+1));
+ printf("\n\t Info block(0x%02X): ", *(tptr+2));
+ tval = *(tptr+2);
+ printf("Enable bit: %d, Willing bit: %d, Error Bit: %d",
+ (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
+ (tval & 0x20) ? 1 : 0);
+ printf("\n\t SubType: %d", *(tptr+3));
+ printf("\n\t Priority Allocation");
+
+ pgval = EXTRACT_32BITS(tptr+4);
+ for (i = 0; i <= 7; i++) {
+ tval = *(tptr+4+(i/2));
+ printf("\n\t PgId_%d: %d",
+ i, (pgval >> (28-4*i)) & 0xF);
+ }
+ printf("\n\t Priority Group Allocation");
+ for (i = 0; i <= 7; i++)
+ printf("\n\t Pg percentage[%d]: %d", i, *(tptr+8+i));
+ printf("\n\t NumTCsSupported: %d", *(tptr+8+8));
+ break;
+ case LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV:
+ if (tlv_len < 6) {
+ goto trunc;
+ }
+ printf("\n\t Feature - Priority Flow Control");
+ printf(" (type 0x%x, length %d)",
+ LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV, tlv_len);
+ printf("\n\t Oper_Version: %d", *tptr);
+ printf("\n\t Max_Version: %d", *(tptr+1));
+ printf("\n\t Info block(0x%02X): ", *(tptr+2));
+ tval = *(tptr+2);
+ printf("Enable bit: %d, Willing bit: %d, Error Bit: %d",
+ (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
+ (tval & 0x20) ? 1 : 0);
+ printf("\n\t SubType: %d", *(tptr+3));
+ tval = *(tptr+4);
+ printf("\n\t PFC Config (0x%02X)", *(tptr+4));
+ for (i = 0; i <= 7; i++)
+ printf("\n\t Priority Bit %d: %s",
+ i, (tval & (1 << i)) ? "Enabled" : "Disabled");
+ printf("\n\t NumTCPFCSupported: %d", *(tptr+5));
+ break;
+ case LLDP_DCBX_APPLICATION_TLV:
+ if (tlv_len < 4) {
+ goto trunc;
+ }
+ printf("\n\t Feature - Application (type 0x%x, length %d)",
+ LLDP_DCBX_APPLICATION_TLV, tlv_len);
+ printf("\n\t Oper_Version: %d", *tptr);
+ printf("\n\t Max_Version: %d", *(tptr+1));
+ printf("\n\t Info block(0x%02X): ", *(tptr+2));
+ tval = *(tptr+2);
+ printf("Enable bit: %d, Willing bit: %d, Error Bit: %d",
+ (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
+ (tval & 0x20) ? 1 : 0);
+ printf("\n\t SubType: %d", *(tptr+3));
+ tval = tlv_len - 4;
+ mptr = tptr + 4;
+ while (tval >= 6) {
+ printf("\n\t Application Value");
+ printf("\n\t Application Protocol ID: 0x%04x",
+ EXTRACT_16BITS(mptr));
+ uval = EXTRACT_24BITS(mptr+2);
+ printf("\n\t SF (0x%x) Application Protocol ID is %s",
+ (uval >> 22),
+ (uval >> 22) ? "Socket Number" : "L2 EtherType");
+ printf("\n\t OUI: 0x%06x", uval & 0x3fffff);
+ printf("\n\t User Priority Map: 0x%02x", *(mptr+5));
+ tval = tval - 6;
+ mptr = mptr + 6;
+ }
+ break;
+ default:
+ hexdump = TRUE;
+ break;
+ }
+
+ /* do we also want to see a hex dump ? */
+ if (vflag > 1 || (vflag && hexdump)) {
+ print_unknown_data(tptr,"\n\t ", tlv_len);
+ }
+
+ tlen -= tlv_len;
+ tptr += tlv_len;
+ }
+
+ trunc:
+ return hexdump;
+}
+
static char *
-lldp_network_addr_print(const u_char *tptr) {
+lldp_network_addr_print(const u_char *tptr, u_int len) {
u_int8_t af;
static char buf[BUFSIZE];
const char * (*pfunc)(const u_char *);
+ if (len < 1)
+ return NULL;
+ len--;
af = *tptr;
switch (af) {
case AFNUM_INET:
+ if (len < 4)
+ return NULL;
pfunc = getname;
break;
#ifdef INET6
case AFNUM_INET6:
+ if (len < 16)
+ return NULL;
pfunc = getname6;
break;
#endif
case AFNUM_802:
+ if (len < 6)
+ return NULL;
pfunc = etheraddr_string;
break;
default:
@@ -854,10 +1117,14 @@ lldp_mgmt_addr_tlv_print(const u_char *pptr, u_int len) {
u_int8_t mgmt_addr_len, intf_num_subtype, oid_len;
const u_char *tptr;
u_int tlen;
+ char *mgmt_addr;
tlen = len;
tptr = pptr;
+ if (tlen < 1) {
+ return 0;
+ }
mgmt_addr_len = *tptr++;
tlen--;
@@ -865,9 +1132,12 @@ lldp_mgmt_addr_tlv_print(const u_char *pptr, u_int len) {
return 0;
}
+ mgmt_addr = lldp_network_addr_print(tptr, mgmt_addr_len);
+ if (mgmt_addr == NULL) {
+ return 0;
+ }
printf("\n\t Management Address length %u, %s",
- mgmt_addr_len,
- lldp_network_addr_print(tptr));
+ mgmt_addr_len, mgmt_addr);
tptr += mgmt_addr_len;
tlen -= mgmt_addr_len;
@@ -890,6 +1160,9 @@ lldp_mgmt_addr_tlv_print(const u_char *pptr, u_int len) {
if (tlen) {
oid_len = *tptr;
+ if (tlen < oid_len) {
+ return 0;
+ }
if (oid_len) {
printf("\n\t OID length %u", oid_len);
safeputs((const char *)tptr+1, oid_len);
@@ -906,6 +1179,7 @@ lldp_print(register const u_char *pptr, register u_int len) {
u_int16_t tlv, cap, ena_cap;
u_int oui, tlen, hexdump, tlv_type, tlv_len;
const u_char *tptr;
+ char *network_addr;
tptr = pptr;
tlen = len;
@@ -939,47 +1213,17 @@ lldp_print(register const u_char *pptr, register u_int len) {
}
TCHECK2(*tptr, tlv_len);
+ if (tlen < tlv_len) {
+ goto trunc;
+ }
switch (tlv_type) {
- case LLDP_TTL_TLV:
- if (vflag) {
- printf(": TTL %us", EXTRACT_16BITS(tptr));
- }
- break;
-
- case LLDP_SYSTEM_NAME_TLV:
-
- /*
- * The system name is also print in non-verbose mode
- * similar to the CDP printer.
- */
- if (vflag) {
- printf(": ");
- safeputs((const char *)tptr, tlv_len);
- } else {
- printf("LLDP, name ");
- safeputs((const char *)tptr, tlv_len);
- printf(", length %u", len);
- }
- break;
-
- case LLDP_PORT_DESCR_TLV:
- if (vflag) {
- printf(": ");
- safeputs((const char *)tptr, tlv_len);
- }
- break;
-
- case LLDP_SYSTEM_DESCR_TLV:
- if (vflag) {
- printf("\n\t ");
- safeputs((const char *)tptr, tlv_len);
- }
- break;
-
case LLDP_CHASSIS_ID_TLV:
if (vflag) {
+ if (tlv_len < 2) {
+ goto trunc;
+ }
subtype = *tptr;
printf("\n\t Subtype %s (%u): ",
tok2str(lldp_chassis_subtype_values, "Unknown", subtype),
@@ -987,6 +1231,9 @@ lldp_print(register const u_char *pptr, register u_int len) {
switch (subtype) {
case LLDP_CHASSIS_MAC_ADDR_SUBTYPE:
+ if (tlv_len < 1+6) {
+ goto trunc;
+ }
printf("%s", etheraddr_string(tptr+1));
break;
@@ -999,7 +1246,11 @@ lldp_print(register const u_char *pptr, register u_int len) {
break;
case LLDP_CHASSIS_NETWORK_ADDR_SUBTYPE:
- printf("%s", lldp_network_addr_print(tptr+1));
+ network_addr = lldp_network_addr_print(tptr+1, tlv_len-1);
+ if (network_addr == NULL) {
+ goto trunc;
+ }
+ printf("%s", network_addr);
break;
default:
@@ -1011,6 +1262,9 @@ lldp_print(register const u_char *pptr, register u_int len) {
case LLDP_PORT_ID_TLV:
if (vflag) {
+ if (tlv_len < 2) {
+ goto trunc;
+ }
subtype = *tptr;
printf("\n\t Subtype %s (%u): ",
tok2str(lldp_port_subtype_values, "Unknown", subtype),
@@ -1018,6 +1272,9 @@ lldp_print(register const u_char *pptr, register u_int len) {
switch (subtype) {
case LLDP_PORT_MAC_ADDR_SUBTYPE:
+ if (tlv_len < 1+6) {
+ goto trunc;
+ }
printf("%s", etheraddr_string(tptr+1));
break;
@@ -1030,7 +1287,11 @@ lldp_print(register const u_char *pptr, register u_int len) {
break;
case LLDP_PORT_NETWORK_ADDR_SUBTYPE:
- printf("%s", lldp_network_addr_print(tptr+1));
+ network_addr = lldp_network_addr_print(tptr+1, tlv_len-1);
+ if (network_addr == NULL) {
+ goto trunc;
+ }
+ printf("%s", network_addr);
break;
default:
@@ -1040,30 +1301,55 @@ lldp_print(register const u_char *pptr, register u_int len) {
}
break;
- case LLDP_PRIVATE_TLV:
+ case LLDP_TTL_TLV:
if (vflag) {
- oui = EXTRACT_24BITS(tptr);
- printf(": OUI %s (0x%06x)", tok2str(oui_values, "Unknown", oui), oui);
-
- switch (oui) {
- case OUI_IEEE_8021_PRIVATE:
- hexdump = lldp_private_8021_print(tptr);
- break;
- case OUI_IEEE_8023_PRIVATE:
- hexdump = lldp_private_8023_print(tptr);
- break;
- case OUI_TIA:
- hexdump = lldp_private_tia_print(tptr, tlv_len);
- break;
- default:
- hexdump = TRUE;
- break;
+ if (tlv_len < 2) {
+ goto trunc;
}
+ printf(": TTL %us", EXTRACT_16BITS(tptr));
+ }
+ break;
+
+ case LLDP_PORT_DESCR_TLV:
+ if (vflag) {
+ printf(": ");
+ safeputs((const char *)tptr, tlv_len);
+ }
+ break;
+
+ case LLDP_SYSTEM_NAME_TLV:
+ /*
+ * The system name is also print in non-verbose mode
+ * similar to the CDP printer.
+ */
+ if (vflag) {
+ printf(": ");
+ safeputs((const char *)tptr, tlv_len);
+ } else {
+ printf("LLDP, name ");
+ safeputs((const char *)tptr, tlv_len);
+ printf(", length %u", len);
+ }
+ break;
+
+ case LLDP_SYSTEM_DESCR_TLV:
+ if (vflag) {
+ printf("\n\t ");
+ safeputs((const char *)tptr, tlv_len);
}
break;
case LLDP_SYSTEM_CAP_TLV:
if (vflag) {
+ /*
+ * XXX - IEEE Std 802.1AB-2009 says the first octet
+ * if a chassis ID subtype, with the system
+ * capabilities and enabled capabilities following
+ * it.
+ */
+ if (tlv_len < 4) {
+ goto trunc;
+ }
cap = EXTRACT_16BITS(tptr);
ena_cap = EXTRACT_16BITS(tptr+2);
printf("\n\t System Capabilities [%s] (0x%04x)",
@@ -1075,9 +1361,37 @@ lldp_print(register const u_char *pptr, register u_int len) {
case LLDP_MGMT_ADDR_TLV:
if (vflag) {
- if (!lldp_mgmt_addr_tlv_print(tptr, tlen)) {
+ if (!lldp_mgmt_addr_tlv_print(tptr, tlv_len)) {
+ goto trunc;
+ }
+ }
+ break;
+
+ case LLDP_PRIVATE_TLV:
+ if (vflag) {
+ if (tlv_len < 3) {
goto trunc;
}
+ oui = EXTRACT_24BITS(tptr);
+ printf(": OUI %s (0x%06x)", tok2str(oui_values, "Unknown", oui), oui);
+
+ switch (oui) {
+ case OUI_IEEE_8021_PRIVATE:
+ hexdump = lldp_private_8021_print(tptr, tlv_len);
+ break;
+ case OUI_IEEE_8023_PRIVATE:
+ hexdump = lldp_private_8023_print(tptr, tlv_len);
+ break;
+ case OUI_TIA:
+ hexdump = lldp_private_tia_print(tptr, tlv_len);
+ break;
+ case OUI_DCBX:
+ hexdump = lldp_private_dcbx_print(tptr, tlv_len);
+ break;
+ default:
+ hexdump = TRUE;
+ break;
+ }
}
break;
diff --git a/contrib/tcpdump/print-mobile.c b/contrib/tcpdump/print-mobile.c
index 816ffd6e6585..de4eab1dce3b 100644
--- a/contrib/tcpdump/print-mobile.c
+++ b/contrib/tcpdump/print-mobile.c
@@ -72,6 +72,7 @@ mobile_print(const u_char *bp, u_int length)
{
const u_char *cp = bp +8 ;
const struct mobile_ip *mob;
+ struct cksum_vec vec[1];
u_short proto,crc;
u_char osp =0; /* old source address present */
@@ -101,7 +102,9 @@ mobile_print(const u_char *bp, u_int length)
(void)printf("> %s ",ipaddr_string(&mob->odst));
(void)printf("(oproto=%d)",proto>>8);
}
- if (in_cksum((u_short *)mob, osp ? 12 : 8, 0)!=0) {
+ vec[0].ptr = (const u_int8_t *)(void *)mob;
+ vec[0].len = osp ? 12 : 8;
+ if (in_cksum(vec, 1)!=0) {
(void)printf(" (bad checksum %d)",crc);
}
diff --git a/contrib/tcpdump/print-mpls.c b/contrib/tcpdump/print-mpls.c
index c6b0814ffefc..d97cce5278b4 100644
--- a/contrib/tcpdump/print-mpls.c
+++ b/contrib/tcpdump/print-mpls.c
@@ -54,6 +54,13 @@ static const char *mpls_labelname[] = {
/*15*/ "rsvd",
};
+enum mpls_packet_type {
+ PT_UNKNOWN,
+ PT_IPV4,
+ PT_IPV6,
+ PT_OSI
+};
+
/*
* RFC3032: MPLS label stack encoding
*/
@@ -62,7 +69,8 @@ mpls_print(const u_char *bp, u_int length)
{
const u_char *p;
u_int32_t label_entry;
- u_int16_t label_stack_depth = 0;
+ u_int16_t label_stack_depth = 0;
+ enum mpls_packet_type pt = PT_UNKNOWN;
p = bp;
printf("MPLS");
@@ -70,9 +78,9 @@ mpls_print(const u_char *bp, u_int length)
TCHECK2(*p, sizeof(label_entry));
label_entry = EXTRACT_32BITS(p);
printf("%s(label %u",
- label_stack_depth ? "\n\t" : " ",
- MPLS_LABEL(label_entry));
- label_stack_depth++;
+ (label_stack_depth && vflag) ? "\n\t" : " ",
+ MPLS_LABEL(label_entry));
+ label_stack_depth++;
if (vflag &&
MPLS_LABEL(label_entry) < sizeof(mpls_labelname) / sizeof(mpls_labelname[0]))
printf(" (%s)", mpls_labelname[MPLS_LABEL(label_entry)]);
@@ -84,97 +92,127 @@ mpls_print(const u_char *bp, u_int length)
p += sizeof(label_entry);
} while (!MPLS_STACK(label_entry));
+ /*
+ * Try to figure out the packet type.
+ */
switch (MPLS_LABEL(label_entry)) {
+
case 0: /* IPv4 explicit NULL label */
- case 3: /* IPv4 implicit NULL label */
- if (vflag>0) {
- printf("\n\t");
- ip_print(gndo, p, length - (p - bp));
- }
- else printf(", IP, length: %u",length);
+ case 3: /* IPv4 implicit NULL label */
+ pt = PT_IPV4;
break;
-#ifdef INET6
+
case 2: /* IPv6 explicit NULL label */
- if (vflag>0) {
- printf("\n\t");
- ip6_print(p, length - (p - bp));
- }
- else printf(", IPv6, length: %u",length);
+ pt = PT_IPV6;
break;
-#endif
+
default:
/*
* Generally there's no indication of protocol in MPLS label
- * encoding, however draft-hsmit-isis-aal5mux-00.txt describes
- * a technique that looks at the first payload byte if the BOS (bottom of stack)
- * bit is set and tries to determine the network layer protocol
- * 0x45-0x4f is IPv4
- * 0x60-0x6f is IPv6
- * 0x81-0x83 is OSI (CLNP,ES-IS,IS-IS)
- * this technique is sometimes known as NULL encapsulation
- * and decoding is particularly useful for control-plane traffic [BGP]
- * which cisco by default sends MPLS encapsulated
+ * encoding.
+ *
+ * However, draft-hsmit-isis-aal5mux-00.txt describes a
+ * technique for encapsulating IS-IS and IP traffic on the
+ * same ATM virtual circuit; you look at the first payload
+ * byte to determine the network layer protocol, based on
+ * the fact that
+ *
+ * 1) the first byte of an IP header is 0x45-0x4f
+ * for IPv4 and 0x60-0x6f for IPv6;
+ *
+ * 2) the first byte of an OSI CLNP packet is 0x81,
+ * the first byte of an OSI ES-IS packet is 0x82,
+ * and the first byte of an OSI IS-IS packet is
+ * 0x83;
+ *
+ * so the network layer protocol can be inferred from the
+ * first byte of the packet, if the protocol is one of the
+ * ones listed above.
+ *
+ * Cisco sends control-plane traffic MPLS-encapsulated in
+ * this fashion.
*/
+ switch(*p) {
+
+ case 0x45:
+ case 0x46:
+ case 0x47:
+ case 0x48:
+ case 0x49:
+ case 0x4a:
+ case 0x4b:
+ case 0x4c:
+ case 0x4d:
+ case 0x4e:
+ case 0x4f:
+ pt = PT_IPV4;
+ break;
+
+ case 0x60:
+ case 0x61:
+ case 0x62:
+ case 0x63:
+ case 0x64:
+ case 0x65:
+ case 0x66:
+ case 0x67:
+ case 0x68:
+ case 0x69:
+ case 0x6a:
+ case 0x6b:
+ case 0x6c:
+ case 0x6d:
+ case 0x6e:
+ case 0x6f:
+ pt = PT_IPV6;
+ break;
+
+ case 0x81:
+ case 0x82:
+ case 0x83:
+ pt = PT_OSI;
+ break;
+
+ default:
+ /* ok bail out - we did not figure out what it is*/
+ break;
+ }
+ }
- if (MPLS_STACK(label_entry)) { /* only do this if the stack bit is set */
- switch(*p) {
- case 0x45:
- case 0x46:
- case 0x47:
- case 0x48:
- case 0x49:
- case 0x4a:
- case 0x4b:
- case 0x4c:
- case 0x4d:
- case 0x4e:
- case 0x4f:
- if (vflag>0) {
- printf("\n\t");
- ip_print(gndo, p, length - (p - bp));
- }
- else printf(", IP, length: %u",length);
- break;
+ /*
+ * Print the payload.
+ */
+ if (pt == PT_UNKNOWN) {
+ if (!suppress_default_print)
+ default_print(p, length - (p - bp));
+ return;
+ }
+ if (vflag)
+ printf("\n\t");
+ else
+ printf(" ");
+ switch (pt) {
+
+ case PT_IPV4:
+ ip_print(gndo, p, length - (p - bp));
+ break;
+
+ case PT_IPV6:
#ifdef INET6
- case 0x60:
- case 0x61:
- case 0x62:
- case 0x63:
- case 0x64:
- case 0x65:
- case 0x66:
- case 0x67:
- case 0x68:
- case 0x69:
- case 0x6a:
- case 0x6b:
- case 0x6c:
- case 0x6d:
- case 0x6e:
- case 0x6f:
- if (vflag>0) {
- printf("\n\t");
- ip6_print(p, length - (p - bp));
- }
- else printf(", IPv6, length: %u",length);
- break;
+ ip6_print(gndo, p, length - (p - bp));
+#else
+ printf("IPv6, length: %u", length);
#endif
- case 0x81:
- case 0x82:
- case 0x83:
- if (vflag>0) {
- printf("\n\t");
- isoclns_print(p, length - (p - bp), length - (p - bp));
- }
- else printf(", OSI, length: %u",length);
- break;
- default:
- /* ok bail out - we did not figure out what it is*/
- break;
- }
- }
- return;
+ break;
+
+ case PT_OSI:
+ isoclns_print(p, length - (p - bp), length - (p - bp));
+ break;
+
+ default:
+ break;
}
+ return;
trunc:
printf("[|MPLS]");
diff --git a/contrib/tcpdump/print-null.c b/contrib/tcpdump/print-null.c
index ba26733f7a87..926e8d8a231f 100644
--- a/contrib/tcpdump/print-null.c
+++ b/contrib/tcpdump/print-null.c
@@ -127,7 +127,7 @@ null_if_print(const struct pcap_pkthdr *h, const u_char *p)
case BSD_AFNUM_INET6_BSD:
case BSD_AFNUM_INET6_FREEBSD:
case BSD_AFNUM_INET6_DARWIN:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
diff --git a/contrib/tcpdump/print-ospf.c b/contrib/tcpdump/print-ospf.c
index 983c14f40e12..f8ff4aeac5b0 100644
--- a/contrib/tcpdump/print-ospf.c
+++ b/contrib/tcpdump/print-ospf.c
@@ -197,7 +197,7 @@ static int ospf_decode_v2(const struct ospfhdr *, const u_char *);
static int ospf_decode_lls(const struct ospfhdr *, register u_int);
int
-ospf_print_grace_lsa (u_int8_t *tptr, u_int ls_length) {
+ospf_print_grace_lsa (const u_int8_t *tptr, u_int ls_length) {
u_int tlv_type, tlv_length;
@@ -279,7 +279,7 @@ trunc:
}
int
-ospf_print_te_lsa (u_int8_t *tptr, u_int ls_length) {
+ospf_print_te_lsa (const u_int8_t *tptr, u_int ls_length) {
u_int tlv_type, tlv_length, subtlv_type, subtlv_length;
u_int priority_level, te_class, count_srlg;
@@ -1028,7 +1028,7 @@ ospf_decode_v2(register const struct ospfhdr *op,
lsap = op->ospf_lsu.lsu_lsa;
TCHECK(op->ospf_lsu.lsu_count);
lsa_count_max = EXTRACT_32BITS(&op->ospf_lsu.lsu_count);
- printf(", %d LSA%s",lsa_count_max, lsa_count_max > 1 ? "s" : "");
+ printf(", %d LSA%s",lsa_count_max, PLURAL_SUFFIX(lsa_count_max));
for (lsa_count=1;lsa_count <= lsa_count_max;lsa_count++) {
printf("\n\t LSA #%u",lsa_count);
lsap = (const struct lsa *)ospf_print_lsa(lsap);
diff --git a/contrib/tcpdump/print-pflog.c b/contrib/tcpdump/print-pflog.c
index 0cacabfc6e44..ac325f4b0e63 100644
--- a/contrib/tcpdump/print-pflog.c
+++ b/contrib/tcpdump/print-pflog.c
@@ -162,7 +162,7 @@ pflog_if_print(const struct pcap_pkthdr *h, register const u_char *p)
#if OPENBSD_AF_INET6 != AF_INET6
case OPENBSD_AF_INET6: /* XXX: read pcap files */
#endif
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
diff --git a/contrib/tcpdump/print-pgm.c b/contrib/tcpdump/print-pgm.c
index 73a42914c7bd..2d4d7449c91b 100644
--- a/contrib/tcpdump/print-pgm.c
+++ b/contrib/tcpdump/print-pgm.c
@@ -72,6 +72,12 @@ struct pgm_nak {
/* ... options */
};
+struct pgm_ack {
+ u_int32_t pgma_rx_max_seq;
+ u_int32_t pgma_bitmap;
+ /* ... options */
+};
+
struct pgm_poll {
u_int32_t pgmp_seq;
u_int16_t pgmp_round;
@@ -133,6 +139,9 @@ typedef enum _pgm_type {
#define PGM_OPT_RST 0x0F
#define PGM_OPT_CR 0x10
#define PGM_OPT_CRQST 0x11
+
+#define PGM_OPT_PGMCC_DATA 0x12
+#define PGM_OPT_PGMCC_FEEDBACK 0x13
#define PGM_OPT_MASK 0x7f
@@ -446,6 +455,17 @@ pgm_print(register const u_char *bp, register u_int length,
break;
}
+ case PGM_ACK: {
+ struct pgm_ack *ack;
+
+ ack = (struct pgm_ack *)(pgm + 1);
+ TCHECK(*ack);
+ (void)printf("ACK seq %u",
+ EXTRACT_32BITS(&ack->pgma_rx_max_seq));
+ bp = (u_char *) (ack + 1);
+ break;
+ }
+
case PGM_SPMR:
(void)printf("SPMR");
break;
@@ -736,6 +756,74 @@ pgm_print(register const u_char *bp, register u_int length,
opts_len -= 4;
break;
+ case PGM_OPT_PGMCC_DATA:
+ flags1 = *bp++;
+ flags2 = *bp++;
+ offset = EXTRACT_32BITS(bp);
+ bp += sizeof(u_int32_t);
+ switch (EXTRACT_16BITS(bp)) {
+ case AFI_IP:
+ addr_size = sizeof(struct in_addr);
+ nla_af = AF_INET;
+ break;
+#ifdef INET6
+ case AFI_IP6:
+ addr_size = sizeof(struct in6_addr);
+ nla_af = AF_INET6;
+ break;
+#endif
+ default:
+ goto trunc;
+ break;
+ }
+ bp += (2 * sizeof(u_int16_t));
+ if (opt_len != 12 + addr_size) {
+ (void)printf("[Bad OPT_PGMCC_DATA option, length %u != 12 + address size]", opt_len);
+ return;
+ }
+ TCHECK2(*bp, addr_size);
+ nla = bp;
+ bp += addr_size;
+
+ inet_ntop(nla_af, nla, nla_buf, sizeof(nla_buf));
+ (void)printf(" PGMCC DATA %u %s", offset, (char*)nla);
+ opts_len -= 16;
+ break;
+
+ case PGM_OPT_PGMCC_FEEDBACK:
+ flags1 = *bp++;
+ flags2 = *bp++;
+ offset = EXTRACT_32BITS(bp);
+ bp += sizeof(u_int32_t);
+ switch (EXTRACT_16BITS(bp)) {
+ case AFI_IP:
+ addr_size = sizeof(struct in_addr);
+ nla_af = AF_INET;
+ break;
+#ifdef INET6
+ case AFI_IP6:
+ addr_size = sizeof(struct in6_addr);
+ nla_af = AF_INET6;
+ break;
+#endif
+ default:
+ goto trunc;
+ break;
+ }
+ bp += (2 * sizeof(u_int16_t));
+ if (opt_len != 12 + addr_size) {
+ (void)printf("[Bad OPT_PGMCC_FEEDBACK option, length %u != 12 + address size]", opt_len);
+ return;
+ }
+ TCHECK2(*bp, addr_size);
+ nla = bp;
+ bp += addr_size;
+
+ inet_ntop(nla_af, nla, nla_buf, sizeof(nla_buf));
+ (void)printf(" PGMCC FEEDBACK %u %s", offset, (char*)nla);
+ opts_len -= 16;
+ break;
+
default:
(void)printf(" OPT_%02X [%d] ", opt_type, opt_len);
bp += opt_len;
diff --git a/contrib/tcpdump/print-pim.c b/contrib/tcpdump/print-pim.c
index 96ba75811bb5..93ffb9aec6dc 100644
--- a/contrib/tcpdump/print-pim.c
+++ b/contrib/tcpdump/print-pim.c
@@ -31,7 +31,15 @@ static const char rcsid[] _U_ =
#endif
#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
#include "interface.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip.h"
#define PIMV2_TYPE_HELLO 0
#define PIMV2_TYPE_REGISTER 1
@@ -110,16 +118,6 @@ struct pim {
u_short pim_cksum; /* IP style check sum */
};
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "interface.h"
-#include "addrtoname.h"
-#include "extract.h"
-
-#include "ip.h"
-
static void pimv2_print(register const u_char *bp, register u_int len, u_int cksum);
static void
@@ -401,8 +399,12 @@ cisco_autorp_print(register const u_char *bp, register u_int len)
TCHECK2(bp[0], 6);
(void)printf("%c%s%s/%d", s, bp[0] & 1 ? "!" : "",
ipaddr_string(&bp[2]), bp[1]);
- if (bp[0] & 0xfe)
- (void)printf("[rsvd=0x%02x]", bp[0] & 0xfe);
+ if (bp[0] & 0x02) {
+ (void)printf(" bidir");
+ }
+ if (bp[0] & 0xfc) {
+ (void)printf("[rsvd=0x%02x]", bp[0] & 0xfc);
+ }
s = ',';
bp += 6; len -= 6;
}
@@ -770,7 +772,7 @@ pimv2_print(register const u_char *bp, register u_int len, u_int cksum)
break;
#ifdef INET6
case 6: /* IPv6 */
- ip6_print(bp, len);
+ ip6_print(gndo, bp, len);
break;
#endif
default:
diff --git a/contrib/tcpdump/print-ppi.c b/contrib/tcpdump/print-ppi.c
new file mode 100644
index 000000000000..38873c84c5ae
--- /dev/null
+++ b/contrib/tcpdump/print-ppi.c
@@ -0,0 +1,104 @@
+/*
+ * Oracle
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <pcap.h>
+
+#include "netdissect.h"
+#include "interface.h"
+#include "extract.h"
+#include "ppi.h"
+
+#ifdef DLT_PPI
+
+static inline void
+ppi_header_print(struct netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const ppi_header_t *hdr;
+ u_int32_t dlt;
+ u_int16_t len;
+
+ hdr = (const ppi_header_t *)bp;
+
+ len = EXTRACT_16BITS(&hdr->ppi_len);
+ dlt = EXTRACT_32BITS(&hdr->ppi_dlt);
+
+ if (!ndo->ndo_qflag) {
+ ND_PRINT((ndo,", V.%d DLT %s (%d) len %d", hdr->ppi_ver,
+ pcap_datalink_val_to_name(dlt), dlt,
+ len));
+ } else {
+ ND_PRINT((ndo,", %s", pcap_datalink_val_to_name(dlt)));
+ }
+
+ ND_PRINT((ndo, ", length %u: ", length));
+}
+
+static void
+ppi_print(struct netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ if_ndo_printer ndo_printer;
+ if_printer printer;
+ ppi_header_t *hdr;
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ u_int32_t dlt;
+
+ if (caplen < sizeof(ppi_header_t)) {
+ ND_PRINT((ndo, "[|ppi]"));
+ return;
+ }
+ hdr = (ppi_header_t *)p;
+ dlt = EXTRACT_32BITS(&hdr->ppi_dlt);
+
+ if (ndo->ndo_eflag)
+ ppi_header_print(ndo, p, length);
+
+ length -= sizeof(ppi_header_t);
+ caplen -= sizeof(ppi_header_t);
+ p += sizeof(ppi_header_t);
+
+ if ((printer = lookup_printer(dlt)) != NULL) {
+ printer(h, p);
+ } else if ((ndo_printer = lookup_ndo_printer(dlt)) != NULL) {
+ ndo_printer(ndo, h, p);
+ } else {
+ if (!ndo->ndo_eflag)
+ ppi_header_print(ndo, (u_char *)hdr,
+ length + sizeof(ppi_header_t));
+
+ if (!ndo->ndo_suppress_default_print)
+ ndo->ndo_default_print(ndo, p, caplen);
+ }
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+u_int
+ppi_if_print(struct netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ ppi_print(ndo, h, p);
+
+ return (sizeof(ppi_header_t));
+}
+
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 8
+ * End:
+ */
+
+#endif /* DLT_PPI */
diff --git a/contrib/tcpdump/print-ppp.c b/contrib/tcpdump/print-ppp.c
index 6020e03c1d44..4bae64aeb077 100644
--- a/contrib/tcpdump/print-ppp.c
+++ b/contrib/tcpdump/print-ppp.c
@@ -1305,11 +1305,11 @@ ppp_hdlc(const u_char *p, int length)
goto cleanup;
#ifdef INET6
case PPP_IPV6:
- ip6_print(b+1, t - b - 1);
- goto cleanup;
+ ip6_print(gndo, b+1, t - b - 1);
+ goto cleanup;
#endif
default: /* no luck - try next guess */
- break;
+ break;
}
proto = EXTRACT_16BITS(b); /* next guess - load two octets */
@@ -1370,7 +1370,7 @@ handle_ppp(u_int proto, const u_char *p, int length)
#ifdef INET6
case ETHERTYPE_IPV6: /*XXX*/
case PPP_IPV6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case ETHERTYPE_IPX: /*XXX*/
@@ -1677,11 +1677,11 @@ ppp_bsdos_if_print(const struct pcap_pkthdr *h _U_, register const u_char *p _U_
p += hdrlength;
switch (ptype) {
case PPP_IP:
- ip_print(p, length);
+ ip_print(gndo, p, length);
break;
#ifdef INET6
case PPP_IPV6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case PPP_MPLS_UCAST:
@@ -1696,11 +1696,11 @@ ppp_bsdos_if_print(const struct pcap_pkthdr *h _U_, register const u_char *p _U_
p += hdrlength;
switch (ptype) {
case PPP_IP:
- ip_print(p, length);
+ ip_print(gndo, p, length);
break;
#ifdef INET6
case PPP_IPV6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case PPP_MPLS_UCAST:
@@ -1732,12 +1732,12 @@ ppp_bsdos_if_print(const struct pcap_pkthdr *h _U_, register const u_char *p _U_
break;
#ifdef INET6
case PPP_IPV6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case PPP_MPLS_UCAST:
case PPP_MPLS_MCAST:
- mpls_print(p, length);
+ mpls_print(gndo, p, length);
break;
default:
printf("%s ", tok2str(ppptype2str, "unknown PPP protocol (0x%04x)", ptype));
diff --git a/contrib/tcpdump/print-rpki-rtr.c b/contrib/tcpdump/print-rpki-rtr.c
new file mode 100644
index 000000000000..8679759ef8df
--- /dev/null
+++ b/contrib/tcpdump/print-rpki-rtr.c
@@ -0,0 +1,368 @@
+/*
+ * Copyright (c) 1998-2011 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * support for the The RPKI/Router Protocol Protocol as per draft-ietf-sidr-rpki-rtr-12
+ *
+ * Original code by Hannes Gredler (hannes@juniper.net)
+ */
+
+#ifndef lint
+static const char rcsid[] _U_ =
+"@(#) $Header: /tcpdump/master/tcpdump/print-rpki_rtr.c,v 1.10 2008-03-20 09:30:56 hannes Exp $";
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "interface.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+/*
+ * RPKI/Router PDU header
+ *
+ * Here's what the PDU header looks like.
+ * The length does include the version and length fields.
+ */
+typedef struct rpki_rtr_pdu_ {
+ u_char version; /* Version number */
+ u_char pdu_type; /* PDU type */
+ union {
+ u_char cache_nonce[2]; /* Cache Nonce */
+ u_char error_code[2]; /* Error code */
+ } u;
+ u_char length[4];
+} rpki_rtr_pdu;
+#define RPKI_RTR_PDU_OVERHEAD (offsetof(rpki_rtr_pdu, rpki_rtr_pdu_msg))
+
+/*
+ * IPv4 Prefix PDU.
+ */
+typedef struct rpki_rtr_pdu_ipv4_prefix_ {
+ rpki_rtr_pdu pdu_header;
+ u_char flags;
+ u_char prefix_length;
+ u_char max_length;
+ u_char zero;
+ u_char prefix[4];
+ u_char as[4];
+} rpki_rtr_pdu_ipv4_prefix;
+
+/*
+ * IPv6 Prefix PDU.
+ */
+typedef struct rpki_rtr_pdu_ipv6_prefix_ {
+ rpki_rtr_pdu pdu_header;
+ u_char flags;
+ u_char prefix_length;
+ u_char max_length;
+ u_char zero;
+ u_char prefix[16];
+ u_char as[4];
+} rpki_rtr_pdu_ipv6_prefix;
+
+/*
+ * Error report PDU.
+ */
+typedef struct rpki_rtr_pdu_error_report_ {
+ rpki_rtr_pdu pdu_header;
+ u_char encapsulated_pdu_length[4]; /* Encapsulated PDU length */
+} rpki_rtr_pdu_error_report;
+
+/*
+ * PDU type codes
+ */
+#define RPKI_RTR_SERIAL_NOTIFY_PDU 0
+#define RPKI_RTR_SERIAL_QUERY_PDU 1
+#define RPKI_RTR_RESET_QUERY_PDU 2
+#define RPKI_RTR_CACHE_RESPONSE_PDU 3
+#define RPKI_RTR_IPV4_PREFIX_PDU 4
+#define RPKI_RTR_IPV6_PREFIX_PDU 6
+#define RPKI_RTR_END_OF_DATA_PDU 7
+#define RPKI_RTR_CACHE_RESET_PDU 8
+#define RPKI_RTR_ERROR_REPORT_PDU 10
+
+static const struct tok rpki_rtr_pdu_values[] = {
+ { RPKI_RTR_SERIAL_NOTIFY_PDU, "Serial Notify" },
+ { RPKI_RTR_SERIAL_QUERY_PDU, "Serial Query" },
+ { RPKI_RTR_RESET_QUERY_PDU, "Reset Query" },
+ { RPKI_RTR_CACHE_RESPONSE_PDU, "Cache Response" },
+ { RPKI_RTR_IPV4_PREFIX_PDU, "IPV4 Prefix" },
+ { RPKI_RTR_IPV6_PREFIX_PDU, "IPV6 Prefix" },
+ { RPKI_RTR_END_OF_DATA_PDU, "End of Data" },
+ { RPKI_RTR_CACHE_RESET_PDU, "Cache Reset" },
+ { RPKI_RTR_ERROR_REPORT_PDU, "Error Report" },
+ { 0, NULL}
+};
+
+static const struct tok rpki_rtr_error_codes[] = {
+ { 0, "Corrupt Data" },
+ { 1, "Internal Error" },
+ { 2, "No Data Available" },
+ { 3, "Invalid Request" },
+ { 4, "Unsupported Protocol Version" },
+ { 5, "Unsupported PDU Type" },
+ { 6, "Withdrawal of Unknown Record" },
+ { 7, "Duplicate Announcement Received" },
+ { 0, NULL}
+};
+
+/*
+ * Build a identation string for a given identation level.
+ * XXX this should be really in util.c
+ */
+static char *
+indent_string (u_int indent)
+{
+ static char buf[20];
+ u_int idx;
+
+ idx = 0;
+ buf[idx] = '\0';
+
+ /*
+ * Does the static buffer fit ?
+ */
+ if (sizeof(buf) < ((indent/8) + (indent %8) + 2)) {
+ return buf;
+ }
+
+ /*
+ * Heading newline.
+ */
+ buf[idx] = '\n';
+ idx++;
+
+ while (indent >= 8) {
+ buf[idx] = '\t';
+ idx++;
+ indent -= 8;
+ }
+
+ while (indent > 0) {
+ buf[idx] = ' ';
+ idx++;
+ indent--;
+ }
+
+ /*
+ * Trailing zero.
+ */
+ buf[idx] = '\0';
+
+ return buf;
+}
+
+/*
+ * Print a single PDU.
+ */
+static void
+rpki_rtr_pdu_print (const u_char *tptr, u_int indent)
+{
+ const rpki_rtr_pdu *pdu_header;
+ u_int pdu_type, pdu_len, hexdump;
+ const u_char *msg;
+
+ pdu_header = (rpki_rtr_pdu *)tptr;
+ pdu_type = pdu_header->pdu_type;
+ pdu_len = EXTRACT_32BITS(pdu_header->length);
+ hexdump = FALSE;
+
+ printf("%sRPKI-RTRv%u, %s PDU (%u), length: %u",
+ indent_string(8),
+ pdu_header->version,
+ tok2str(rpki_rtr_pdu_values, "Unknown", pdu_type),
+ pdu_type, pdu_len);
+
+ switch (pdu_type) {
+
+ /*
+ * The following PDUs share the message format.
+ */
+ case RPKI_RTR_SERIAL_NOTIFY_PDU:
+ case RPKI_RTR_SERIAL_QUERY_PDU:
+ case RPKI_RTR_END_OF_DATA_PDU:
+ msg = (const u_char *)(pdu_header + 1);
+ printf("%sCache-Nonce: 0x%04x, Serial: %u",
+ indent_string(indent+2),
+ EXTRACT_16BITS(pdu_header->u.cache_nonce),
+ EXTRACT_32BITS(msg));
+ break;
+
+ /*
+ * The following PDUs share the message format.
+ */
+ case RPKI_RTR_RESET_QUERY_PDU:
+ case RPKI_RTR_CACHE_RESET_PDU:
+
+ /*
+ * Zero payload PDUs.
+ */
+ break;
+
+ case RPKI_RTR_CACHE_RESPONSE_PDU:
+ printf("%sCache-Nonce: 0x%04x",
+ indent_string(indent+2),
+ EXTRACT_16BITS(pdu_header->u.cache_nonce));
+ break;
+
+ case RPKI_RTR_IPV4_PREFIX_PDU:
+ {
+ rpki_rtr_pdu_ipv4_prefix *pdu;
+
+ pdu = (rpki_rtr_pdu_ipv4_prefix *)tptr;
+ printf("%sIPv4 Prefix %s/%u-%u, origin-as %u, flags 0x%02x",
+ indent_string(indent+2),
+ ipaddr_string(pdu->prefix),
+ pdu->prefix_length, pdu->max_length,
+ EXTRACT_32BITS(pdu->as), pdu->flags);
+ }
+ break;
+
+#ifdef INET6
+ case RPKI_RTR_IPV6_PREFIX_PDU:
+ {
+ rpki_rtr_pdu_ipv6_prefix *pdu;
+
+ pdu = (rpki_rtr_pdu_ipv6_prefix *)tptr;
+ printf("%sIPv6 Prefix %s/%u-%u, origin-as %u, flags 0x%02x",
+ indent_string(indent+2),
+ ip6addr_string(pdu->prefix),
+ pdu->prefix_length, pdu->max_length,
+ EXTRACT_32BITS(pdu->as), pdu->flags);
+ }
+ break;
+#endif
+
+ case RPKI_RTR_ERROR_REPORT_PDU:
+ {
+ rpki_rtr_pdu_error_report *pdu;
+ u_int encapsulated_pdu_length, text_length, tlen, error_code;
+ u_char buf[80];
+
+ pdu = (rpki_rtr_pdu_error_report *)tptr;
+ encapsulated_pdu_length = EXTRACT_32BITS(pdu->encapsulated_pdu_length);
+ tlen = pdu_len;
+
+ error_code = EXTRACT_16BITS(pdu->pdu_header.u.error_code);
+ printf("%sError code: %s (%u), Encapsulated PDU length: %u",
+ indent_string(indent+2),
+ tok2str(rpki_rtr_error_codes, "Unknown", error_code),
+ error_code, encapsulated_pdu_length);
+
+ tptr += sizeof(*pdu);
+ tlen -= sizeof(*pdu);
+
+ /*
+ * Recurse if there is an encapsulated PDU.
+ */
+ if (encapsulated_pdu_length &&
+ (encapsulated_pdu_length <= tlen)) {
+ printf("%s-----encapsulated PDU-----", indent_string(indent+4));
+ rpki_rtr_pdu_print(tptr, indent+2);
+ }
+
+ tptr += encapsulated_pdu_length;
+ tlen -= encapsulated_pdu_length;
+
+ /*
+ * Extract, trail-zero and print the Error message.
+ */
+ text_length = 0;
+ if (tlen > 4) {
+ text_length = EXTRACT_32BITS(tptr);
+ tptr += 4;
+ tlen -= 4;
+ }
+ if (text_length && (text_length <= tlen )) {
+ memcpy(buf, tptr, MIN(sizeof(buf)-1, text_length));
+ buf[text_length] = '\0';
+ printf("%sError text: %s", indent_string(indent+2), buf);
+ }
+ }
+ break;
+
+ default:
+
+ /*
+ * Unknown data, please hexdump.
+ */
+ hexdump = TRUE;
+ }
+
+ /* do we also want to see a hex dump ? */
+ if (vflag > 1 || (vflag && hexdump)) {
+ print_unknown_data(tptr,"\n\t ", pdu_len);
+ }
+}
+
+void
+rpki_rtr_print(register const u_char *pptr, register u_int len) {
+
+ u_int tlen, pdu_type, pdu_len;
+ const u_char *tptr;
+ const rpki_rtr_pdu *pdu_header;
+
+ tptr = pptr;
+ tlen = len;
+
+ if (!vflag) {
+ printf(", RPKI-RTR");
+ return;
+ }
+
+ while (tlen >= sizeof(rpki_rtr_pdu)) {
+
+ TCHECK2(*tptr, sizeof(rpki_rtr_pdu));
+
+ pdu_header = (rpki_rtr_pdu *)tptr;
+ pdu_type = pdu_header->pdu_type;
+ pdu_len = EXTRACT_32BITS(pdu_header->length);
+
+ /* infinite loop check */
+ if (!pdu_type || !pdu_len) {
+ break;
+ }
+
+ TCHECK2(*tptr, pdu_len);
+ if (tlen < pdu_len) {
+ goto trunc;
+ }
+
+ /*
+ * Print the PDU.
+ */
+ rpki_rtr_pdu_print(tptr, 8);
+
+ tlen -= pdu_len;
+ tptr += pdu_len;
+ }
+ return;
+ trunc:
+ printf("\n\t[|RPKI-RTR]");
+}
+
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/contrib/tcpdump/print-rrcp.c b/contrib/tcpdump/print-rrcp.c
index 961fb87309c6..64cb7dec312d 100644
--- a/contrib/tcpdump/print-rrcp.c
+++ b/contrib/tcpdump/print-rrcp.c
@@ -111,8 +111,8 @@ rrcp_print(netdissect_options *ndo,
if (rrcp_opcode==1 || rrcp_opcode==2){
ND_TCHECK2(*(rrcp + RRCP_REG_ADDR_OFFSET), 6);
ND_PRINT((ndo, " addr=0x%04x, data=0x%08x",
- EXTRACT_16BITS(rrcp + RRCP_REG_ADDR_OFFSET),
- EXTRACT_32BITS(rrcp + RRCP_REG_DATA_OFFSET)));
+ EXTRACT_LE_16BITS(rrcp + RRCP_REG_ADDR_OFFSET),
+ EXTRACT_LE_32BITS(rrcp + RRCP_REG_DATA_OFFSET)));
}
if (rrcp_proto==1){
ND_TCHECK2(*(rrcp + RRCP_AUTHKEY_OFFSET), 2);
diff --git a/contrib/tcpdump/print-sctp.c b/contrib/tcpdump/print-sctp.c
index 0229396de66d..a8990a9ae005 100644
--- a/contrib/tcpdump/print-sctp.c
+++ b/contrib/tcpdump/print-sctp.c
@@ -59,9 +59,9 @@ static const char rcsid[] _U_ =
#include "ip6.h"
#endif
-#define CHAN_HP 6700
-#define CHAN_MP 6701
-#define CHAN_LP 6702
+#define CHAN_HP 6704
+#define CHAN_MP 6705
+#define CHAN_LP 6706
struct tok ForCES_channels[] = {
{ CHAN_HP, "ForCES HP" },
diff --git a/contrib/tcpdump/print-sflow.c b/contrib/tcpdump/print-sflow.c
index baa55300b66a..79a3fdf1d9c7 100644
--- a/contrib/tcpdump/print-sflow.c
+++ b/contrib/tcpdump/print-sflow.c
@@ -15,6 +15,8 @@
* The SFLOW protocol as per http://www.sflow.org/developers/specifications.php
*
* Original code by Carles Kishimoto <carles.kishimoto@gmail.com>
+ *
+ * Expansion and refactoring by Rick Jones <rick.jones2@hp.com>
*/
#ifndef lint
@@ -87,6 +89,18 @@ static const struct tok sflow_format_values[] = {
{ 0, NULL}
};
+struct sflow_flow_sample_t {
+ u_int8_t seqnum[4];
+ u_int8_t typesource[4];
+ u_int8_t rate[4];
+ u_int8_t pool[4];
+ u_int8_t drops[4];
+ u_int8_t in_interface[4];
+ u_int8_t out_interface[4];
+ u_int8_t records[4];
+
+};
+
struct sflow_expanded_flow_sample_t {
u_int8_t seqnum[4];
u_int8_t type[4];
@@ -156,6 +170,36 @@ struct sflow_expanded_flow_raw_t {
u_int8_t header_size[4];
};
+struct sflow_ethernet_frame_t {
+ u_int8_t length[4];
+ u_int8_t src_mac[8];
+ u_int8_t dst_mac[8];
+ u_int8_t type[4];
+};
+
+struct sflow_extended_switch_data_t {
+ u_int8_t src_vlan[4];
+ u_int8_t src_pri[4];
+ u_int8_t dst_vlan[4];
+ u_int8_t dst_pri[4];
+};
+
+struct sflow_counter_record_t {
+ u_int8_t format[4];
+ u_int8_t length[4];
+};
+
+struct sflow_flow_record_t {
+ u_int8_t format[4];
+ u_int8_t length[4];
+};
+
+struct sflow_counter_sample_t {
+ u_int8_t seqnum[4];
+ u_int8_t typesource[4];
+ u_int8_t records[4];
+};
+
struct sflow_expanded_counter_sample_t {
u_int8_t seqnum[4];
u_int8_t type[4];
@@ -259,24 +303,525 @@ struct sflow_vlan_counter_t {
u_int8_t discards[4];
};
-void
-sflow_print(const u_char *pptr, u_int len) {
+static int
+print_sflow_counter_generic(const u_char *pointer, u_int len) {
- const struct sflow_datagram_t *sflow_datagram;
- const struct sflow_sample_header *sflow_sample;
- const struct sflow_expanded_flow_sample_t *sflow_expanded_flow_sample;
- const struct sflow_expanded_flow_raw_t *sflow_flow_raw;
- const struct sflow_expanded_counter_sample_t *sflow_expanded_counter_sample;
const struct sflow_generic_counter_t *sflow_gen_counter;
+
+ if (len < sizeof(struct sflow_generic_counter_t))
+ return 1;
+
+
+ sflow_gen_counter = (const struct sflow_generic_counter_t *)pointer;
+ printf("\n\t ifindex %u, iftype %u, ifspeed %" PRIu64 ", ifdirection %u (%s)",
+ EXTRACT_32BITS(sflow_gen_counter->ifindex),
+ EXTRACT_32BITS(sflow_gen_counter->iftype),
+ EXTRACT_64BITS(sflow_gen_counter->ifspeed),
+ EXTRACT_32BITS(sflow_gen_counter->ifdirection),
+ tok2str(sflow_iface_direction_values, "Unknown",
+ EXTRACT_32BITS(sflow_gen_counter->ifdirection)));
+ printf("\n\t ifstatus %u, adminstatus: %s, operstatus: %s",
+ EXTRACT_32BITS(sflow_gen_counter->ifstatus),
+ EXTRACT_32BITS(sflow_gen_counter->ifstatus)&1 ? "up" : "down",
+ (EXTRACT_32BITS(sflow_gen_counter->ifstatus)>>1)&1 ? "up" : "down");
+ printf("\n\t In octets %" PRIu64
+ ", unicast pkts %u, multicast pkts %u, broadcast pkts %u, discards %u",
+ EXTRACT_64BITS(sflow_gen_counter->ifinoctets),
+ EXTRACT_32BITS(sflow_gen_counter->ifinunicastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifinmulticastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifinbroadcastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifindiscards));
+ printf("\n\t In errors %u, unknown protos %u",
+ EXTRACT_32BITS(sflow_gen_counter->ifinerrors),
+ EXTRACT_32BITS(sflow_gen_counter->ifinunkownprotos));
+ printf("\n\t Out octets %" PRIu64
+ ", unicast pkts %u, multicast pkts %u, broadcast pkts %u, discards %u",
+ EXTRACT_64BITS(sflow_gen_counter->ifoutoctets),
+ EXTRACT_32BITS(sflow_gen_counter->ifoutunicastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifoutmulticastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifoutbroadcastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifoutdiscards));
+ printf("\n\t Out errors %u, promisc mode %u",
+ EXTRACT_32BITS(sflow_gen_counter->ifouterrors),
+ EXTRACT_32BITS(sflow_gen_counter->ifpromiscmode));
+
+ return 0;
+}
+
+static int
+print_sflow_counter_ethernet(const u_char *pointer, u_int len){
+
const struct sflow_ethernet_counter_t *sflow_eth_counter;
+
+ if (len < sizeof(struct sflow_ethernet_counter_t))
+ return 1;
+
+ sflow_eth_counter = (const struct sflow_ethernet_counter_t *)pointer;
+ printf("\n\t align errors %u, fcs errors %u, single collision %u, multiple collision %u, test error %u",
+ EXTRACT_32BITS(sflow_eth_counter->alignerrors),
+ EXTRACT_32BITS(sflow_eth_counter->fcserrors),
+ EXTRACT_32BITS(sflow_eth_counter->single_collision_frames),
+ EXTRACT_32BITS(sflow_eth_counter->multiple_collision_frames),
+ EXTRACT_32BITS(sflow_eth_counter->test_errors));
+ printf("\n\t deferred %u, late collision %u, excessive collision %u, mac trans error %u",
+ EXTRACT_32BITS(sflow_eth_counter->deferred_transmissions),
+ EXTRACT_32BITS(sflow_eth_counter->late_collisions),
+ EXTRACT_32BITS(sflow_eth_counter->excessive_collisions),
+ EXTRACT_32BITS(sflow_eth_counter->mac_transmit_errors));
+ printf("\n\t carrier error %u, frames too long %u, mac receive errors %u, symbol errors %u",
+ EXTRACT_32BITS(sflow_eth_counter->carrier_sense_errors),
+ EXTRACT_32BITS(sflow_eth_counter->frame_too_longs),
+ EXTRACT_32BITS(sflow_eth_counter->mac_receive_errors),
+ EXTRACT_32BITS(sflow_eth_counter->symbol_errors));
+
+ return 0;
+}
+
+static int
+print_sflow_counter_token_ring(const u_char *pointer _U_, u_int len _U_) {
+
+ return 0;
+}
+
+static int
+print_sflow_counter_basevg(const u_char *pointer, u_int len) {
+
const struct sflow_100basevg_counter_t *sflow_100basevg_counter;
+
+ if (len < sizeof(struct sflow_100basevg_counter_t))
+ return 1;
+
+ sflow_100basevg_counter = (const struct sflow_100basevg_counter_t *)pointer;
+ printf("\n\t in high prio frames %u, in high prio octets %" PRIu64,
+ EXTRACT_32BITS(sflow_100basevg_counter->in_highpriority_frames),
+ EXTRACT_64BITS(sflow_100basevg_counter->in_highpriority_octets));
+ printf("\n\t in norm prio frames %u, in norm prio octets %" PRIu64,
+ EXTRACT_32BITS(sflow_100basevg_counter->in_normpriority_frames),
+ EXTRACT_64BITS(sflow_100basevg_counter->in_normpriority_octets));
+ printf("\n\t in ipm errors %u, oversized %u, in data errors %u, null addressed frames %u",
+ EXTRACT_32BITS(sflow_100basevg_counter->in_ipmerrors),
+ EXTRACT_32BITS(sflow_100basevg_counter->in_oversized),
+ EXTRACT_32BITS(sflow_100basevg_counter->in_data_errors),
+ EXTRACT_32BITS(sflow_100basevg_counter->in_null_addressed_frames));
+ printf("\n\t out high prio frames %u, out high prio octets %" PRIu64
+ ", trans into frames %u",
+ EXTRACT_32BITS(sflow_100basevg_counter->out_highpriority_frames),
+ EXTRACT_64BITS(sflow_100basevg_counter->out_highpriority_octets),
+ EXTRACT_32BITS(sflow_100basevg_counter->transitioninto_frames));
+ printf("\n\t in hc high prio octets %" PRIu64
+ ", in hc norm prio octets %" PRIu64
+ ", out hc high prio octets %" PRIu64,
+ EXTRACT_64BITS(sflow_100basevg_counter->hc_in_highpriority_octets),
+ EXTRACT_64BITS(sflow_100basevg_counter->hc_in_normpriority_octets),
+ EXTRACT_64BITS(sflow_100basevg_counter->hc_out_highpriority_octets));
+
+ return 0;
+}
+
+static int
+print_sflow_counter_vlan(const u_char *pointer, u_int len) {
+
const struct sflow_vlan_counter_t *sflow_vlan_counter;
+
+ if (len < sizeof(struct sflow_vlan_counter_t))
+ return 1;
+
+ sflow_vlan_counter = (const struct sflow_vlan_counter_t *)pointer;
+ printf("\n\t vlan_id %u, octets %" PRIu64
+ ", unicast_pkt %u, multicast_pkt %u, broadcast_pkt %u, discards %u",
+ EXTRACT_32BITS(sflow_vlan_counter->vlan_id),
+ EXTRACT_64BITS(sflow_vlan_counter->octets),
+ EXTRACT_32BITS(sflow_vlan_counter->unicast_pkt),
+ EXTRACT_32BITS(sflow_vlan_counter->multicast_pkt),
+ EXTRACT_32BITS(sflow_vlan_counter->broadcast_pkt),
+ EXTRACT_32BITS(sflow_vlan_counter->discards));
+
+ return 0;
+}
+
+struct sflow_processor_counter_t {
+ u_int8_t five_sec_util[4];
+ u_int8_t one_min_util[4];
+ u_int8_t five_min_util[4];
+ u_int8_t total_memory[8];
+ u_int8_t free_memory[8];
+};
+
+static int
+print_sflow_counter_processor(const u_char *pointer, u_int len) {
+
+ const struct sflow_processor_counter_t *sflow_processor_counter;
+
+ if (len < sizeof(struct sflow_processor_counter_t))
+ return 1;
+
+ sflow_processor_counter = (const struct sflow_processor_counter_t *)pointer;
+ printf("\n\t 5sec %u, 1min %u, 5min %u, total_mem %" PRIu64
+ ", total_mem %" PRIu64,
+ EXTRACT_32BITS(sflow_processor_counter->five_sec_util),
+ EXTRACT_32BITS(sflow_processor_counter->one_min_util),
+ EXTRACT_32BITS(sflow_processor_counter->five_min_util),
+ EXTRACT_64BITS(sflow_processor_counter->total_memory),
+ EXTRACT_64BITS(sflow_processor_counter->free_memory));
+
+ return 0;
+}
+
+static int
+sflow_print_counter_records(const u_char *pointer, u_int len, u_int records) {
+
+ u_int nrecords;
const u_char *tptr;
- int tlen;
+ u_int tlen;
+ u_int counter_type;
+ u_int counter_len;
+ u_int enterprise;
+ const struct sflow_counter_record_t *sflow_counter_record;
+
+ nrecords = records;
+ tptr = pointer;
+ tlen = len;
+
+ while (nrecords > 0) {
+ /* do we have the "header?" */
+ if (tlen < sizeof(struct sflow_counter_record_t))
+ return 1;
+ sflow_counter_record = (const struct sflow_counter_record_t *)tptr;
+
+ enterprise = EXTRACT_32BITS(sflow_counter_record->format);
+ counter_type = enterprise & 0x0FFF;
+ enterprise = enterprise >> 20;
+ counter_len = EXTRACT_32BITS(sflow_counter_record->length);
+ printf("\n\t enterprise %u, %s (%u) length %u",
+ enterprise,
+ (enterprise == 0) ? tok2str(sflow_counter_type_values,"Unknown",counter_type) : "Unknown",
+ counter_type,
+ counter_len);
+
+ tptr += sizeof(struct sflow_counter_record_t);
+ tlen -= sizeof(struct sflow_counter_record_t);
+
+ if (tlen < counter_len)
+ return 1;
+ if (enterprise == 0) {
+ switch (counter_type) {
+ case SFLOW_COUNTER_GENERIC:
+ if (print_sflow_counter_generic(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_ETHERNET:
+ if (print_sflow_counter_ethernet(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_TOKEN_RING:
+ if (print_sflow_counter_token_ring(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_BASEVG:
+ if (print_sflow_counter_basevg(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_VLAN:
+ if (print_sflow_counter_vlan(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_PROCESSOR:
+ if (print_sflow_counter_processor(tptr,tlen))
+ return 1;
+ break;
+ default:
+ if (vflag <= 1)
+ print_unknown_data(tptr, "\n\t\t", counter_len);
+ break;
+ }
+ }
+ tptr += counter_len;
+ tlen -= counter_len;
+ nrecords--;
+
+ }
+
+ return 0;
+}
+
+
+static int
+sflow_print_counter_sample(const u_char *pointer, u_int len) {
+
+ const struct sflow_counter_sample_t *sflow_counter_sample;
+ u_int nrecords;
+ u_int typesource;
+ u_int type;
+ u_int index;
+
+
+ if (len < sizeof(struct sflow_counter_sample_t))
+ return 1;
+
+ sflow_counter_sample = (const struct sflow_counter_sample_t *)pointer;
+
+ typesource = EXTRACT_32BITS(sflow_counter_sample->typesource);
+ nrecords = EXTRACT_32BITS(sflow_counter_sample->records);
+ type = typesource >> 24;
+ index = typesource & 0x0FFF;
+
+ printf(" seqnum %u, type %u, idx %u, records %u",
+ EXTRACT_32BITS(sflow_counter_sample->seqnum),
+ type,
+ index,
+ nrecords);
+
+ return sflow_print_counter_records(pointer + sizeof(struct sflow_counter_sample_t),
+ len - sizeof(struct sflow_counter_sample_t),
+ nrecords);
+
+}
+
+static int
+sflow_print_expanded_counter_sample(const u_char *pointer, u_int len) {
+
+ const struct sflow_expanded_counter_sample_t *sflow_expanded_counter_sample;
+ u_int nrecords;
+
+
+ if (len < sizeof(struct sflow_expanded_counter_sample_t))
+ return 1;
+
+ sflow_expanded_counter_sample = (const struct sflow_expanded_counter_sample_t *)pointer;
+
+ nrecords = EXTRACT_32BITS(sflow_expanded_counter_sample->records);
+
+ printf(" seqnum %u, type %u, idx %u, records %u",
+ EXTRACT_32BITS(sflow_expanded_counter_sample->seqnum),
+ EXTRACT_32BITS(sflow_expanded_counter_sample->type),
+ EXTRACT_32BITS(sflow_expanded_counter_sample->index),
+ nrecords);
+
+ return sflow_print_counter_records(pointer + sizeof(struct sflow_expanded_counter_sample_t),
+ len - sizeof(struct sflow_expanded_counter_sample_t),
+ nrecords);
+
+}
+
+static int
+print_sflow_raw_packet(const u_char *pointer, u_int len) {
+
+ const struct sflow_expanded_flow_raw_t *sflow_flow_raw;
+
+ if (len < sizeof(struct sflow_expanded_flow_raw_t))
+ return 1;
+
+ sflow_flow_raw = (const struct sflow_expanded_flow_raw_t *)pointer;
+ printf("\n\t protocol %s (%u), length %u, stripped bytes %u, header_size %u",
+ tok2str(sflow_flow_raw_protocol_values,"Unknown",EXTRACT_32BITS(sflow_flow_raw->protocol)),
+ EXTRACT_32BITS(sflow_flow_raw->protocol),
+ EXTRACT_32BITS(sflow_flow_raw->length),
+ EXTRACT_32BITS(sflow_flow_raw->stripped_bytes),
+ EXTRACT_32BITS(sflow_flow_raw->header_size));
+
+ /* QUESTION - should we attempt to print the raw header itself?
+ assuming of course there is wnough data present to do so... */
+
+ return 0;
+}
+
+static int
+print_sflow_ethernet_frame(const u_char *pointer, u_int len) {
+
+ const struct sflow_ethernet_frame_t *sflow_ethernet_frame;
+
+ if (len < sizeof(struct sflow_ethernet_frame_t))
+ return 1;
+
+ sflow_ethernet_frame = (const struct sflow_ethernet_frame_t *)pointer;
+
+ printf("\n\t frame len %u, type %u",
+ EXTRACT_32BITS(sflow_ethernet_frame->length),
+ EXTRACT_32BITS(sflow_ethernet_frame->type));
+
+ return 0;
+}
+
+static int
+print_sflow_extended_switch_data(const u_char *pointer, u_int len) {
+
+ const struct sflow_extended_switch_data_t *sflow_extended_sw_data;
+
+ if (len < sizeof(struct sflow_extended_switch_data_t))
+ return 1;
+
+ sflow_extended_sw_data = (const struct sflow_extended_switch_data_t *)pointer;
+ printf("\n\t src vlan %u, src pri %u, dst vlan %u, dst pri %u",
+ EXTRACT_32BITS(sflow_extended_sw_data->src_vlan),
+ EXTRACT_32BITS(sflow_extended_sw_data->src_pri),
+ EXTRACT_32BITS(sflow_extended_sw_data->dst_vlan),
+ EXTRACT_32BITS(sflow_extended_sw_data->dst_pri));
+
+ return 0;
+}
+
+static int
+sflow_print_flow_records(const u_char *pointer, u_int len, u_int records) {
+
+ u_int nrecords;
+ const u_char *tptr;
+ u_int tlen;
+ u_int flow_type;
+ u_int enterprise;
+ u_int flow_len;
+ const struct sflow_flow_record_t *sflow_flow_record;
+
+ nrecords = records;
+ tptr = pointer;
+ tlen = len;
+
+ while (nrecords > 0) {
+ /* do we have the "header?" */
+ if (tlen < sizeof(struct sflow_flow_record_t))
+ return 1;
+
+ sflow_flow_record = (const struct sflow_flow_record_t *)tptr;
+
+ /* so, the funky encoding means we cannot blythly mask-off
+ bits, we must also check the enterprise. */
+
+ enterprise = EXTRACT_32BITS(sflow_flow_record->format);
+ flow_type = enterprise & 0x0FFF;
+ enterprise = enterprise >> 12;
+ flow_len = EXTRACT_32BITS(sflow_flow_record->length);
+ printf("\n\t enterprise %u %s (%u) length %u",
+ enterprise,
+ (enterprise == 0) ? tok2str(sflow_flow_type_values,"Unknown",flow_type) : "Unknown",
+ flow_type,
+ flow_len);
+
+ tptr += sizeof(struct sflow_flow_record_t);
+ tlen -= sizeof(struct sflow_flow_record_t);
+
+ if (tlen < flow_len)
+ return 1;
+
+ if (enterprise == 0) {
+ switch (flow_type) {
+ case SFLOW_FLOW_RAW_PACKET:
+ if (print_sflow_raw_packet(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_FLOW_EXTENDED_SWITCH_DATA:
+ if (print_sflow_extended_switch_data(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_FLOW_ETHERNET_FRAME:
+ if (print_sflow_ethernet_frame(tptr,tlen))
+ return 1;
+ break;
+ /* FIXME these need a decoder */
+ case SFLOW_FLOW_IPV4_DATA:
+ case SFLOW_FLOW_IPV6_DATA:
+ case SFLOW_FLOW_EXTENDED_ROUTER_DATA:
+ case SFLOW_FLOW_EXTENDED_GATEWAY_DATA:
+ case SFLOW_FLOW_EXTENDED_USER_DATA:
+ case SFLOW_FLOW_EXTENDED_URL_DATA:
+ case SFLOW_FLOW_EXTENDED_MPLS_DATA:
+ case SFLOW_FLOW_EXTENDED_NAT_DATA:
+ case SFLOW_FLOW_EXTENDED_MPLS_TUNNEL:
+ case SFLOW_FLOW_EXTENDED_MPLS_VC:
+ case SFLOW_FLOW_EXTENDED_MPLS_FEC:
+ case SFLOW_FLOW_EXTENDED_MPLS_LVP_FEC:
+ case SFLOW_FLOW_EXTENDED_VLAN_TUNNEL:
+ break;
+ default:
+ if (vflag <= 1)
+ print_unknown_data(tptr, "\n\t\t", flow_len);
+ break;
+ }
+ }
+ tptr += flow_len;
+ tlen -= flow_len;
+ nrecords--;
+
+ }
+
+ return 0;
+}
+
+static int
+sflow_print_flow_sample(const u_char *pointer, u_int len) {
+
+ const struct sflow_flow_sample_t *sflow_flow_sample;
+ u_int nrecords;
+ u_int typesource;
+ u_int type;
+ u_int index;
+
+ if (len < sizeof(struct sflow_flow_sample_t))
+ return 1;
+
+ sflow_flow_sample = (struct sflow_flow_sample_t *)pointer;
+
+ typesource = EXTRACT_32BITS(sflow_flow_sample->typesource);
+ nrecords = EXTRACT_32BITS(sflow_flow_sample->records);
+ type = typesource >> 24;
+ index = typesource & 0x0FFF;
+
+ printf(" seqnum %u, type %u, idx %u, rate %u, pool %u, drops %u, input %u output %u records %u",
+ EXTRACT_32BITS(sflow_flow_sample->seqnum),
+ type,
+ index,
+ EXTRACT_32BITS(sflow_flow_sample->rate),
+ EXTRACT_32BITS(sflow_flow_sample->pool),
+ EXTRACT_32BITS(sflow_flow_sample->drops),
+ EXTRACT_32BITS(sflow_flow_sample->in_interface),
+ EXTRACT_32BITS(sflow_flow_sample->out_interface),
+ nrecords);
+
+ return sflow_print_flow_records(pointer + sizeof(struct sflow_flow_sample_t),
+ len - sizeof(struct sflow_flow_sample_t),
+ nrecords);
+
+}
+
+static int
+sflow_print_expanded_flow_sample(const u_char *pointer, u_int len) {
+
+ const struct sflow_expanded_flow_sample_t *sflow_expanded_flow_sample;
+ u_int nrecords;
+
+ if (len < sizeof(struct sflow_expanded_flow_sample_t))
+ return 1;
+
+ sflow_expanded_flow_sample = (const struct sflow_expanded_flow_sample_t *)pointer;
+
+ nrecords = EXTRACT_32BITS(sflow_expanded_flow_sample->records);
+
+ printf(" seqnum %u, type %u, idx %u, rate %u, pool %u, drops %u, records %u",
+ EXTRACT_32BITS(sflow_expanded_flow_sample->seqnum),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->type),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->index),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->rate),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->pool),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->drops),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->records));
+
+ return sflow_print_flow_records(pointer + sizeof(struct sflow_expanded_flow_sample_t),
+ len - sizeof(struct sflow_expanded_flow_sample_t),
+ nrecords);
+
+}
+
+void
+sflow_print(const u_char *pptr, u_int len) {
+
+ const struct sflow_datagram_t *sflow_datagram;
+ const struct sflow_sample_header *sflow_sample;
+
+ const u_char *tptr;
+ u_int tlen;
u_int32_t sflow_sample_type, sflow_sample_len;
- int nsamples, nrecords, counter_len, counter_type, flow_len, flow_type;
+ u_int32_t nsamples;
+
- tptr=pptr;
+ tptr = pptr;
tlen = len;
sflow_datagram = (const struct sflow_datagram_t *)pptr;
TCHECK(*sflow_datagram);
@@ -313,16 +858,21 @@ sflow_print(const u_char *pptr, u_int len) {
len);
/* skip Common header */
- tptr+=sizeof(const struct sflow_datagram_t);
- tlen-=sizeof(const struct sflow_datagram_t);
+ tptr += sizeof(const struct sflow_datagram_t);
+ tlen -= sizeof(const struct sflow_datagram_t);
while (nsamples > 0 && tlen > 0) {
sflow_sample = (const struct sflow_sample_header *)tptr;
+ TCHECK(*sflow_sample);
+
sflow_sample_type = (EXTRACT_32BITS(sflow_sample->format)&0x0FFF);
sflow_sample_len = EXTRACT_32BITS(sflow_sample->len);
- tptr+=sizeof(struct sflow_sample_header);
- tlen-=sizeof(struct sflow_sample_header);
+ if (tlen < sizeof(struct sflow_sample_header))
+ goto trunc;
+
+ tptr += sizeof(struct sflow_sample_header);
+ tlen -= sizeof(struct sflow_sample_header);
printf("\n\t%s (%u), length %u,",
tok2str(sflow_format_values, "Unknown", sflow_sample_type),
@@ -334,226 +884,33 @@ sflow_print(const u_char *pptr, u_int len) {
return;
}
+ if (tlen < sflow_sample_len)
+ goto trunc;
+
/* did we capture enough for fully decoding the sample ? */
- if (!TTEST2(*tptr, sflow_sample_len))
- goto trunc;
+ TCHECK2(*tptr, sflow_sample_len);
switch(sflow_sample_type) {
- case SFLOW_FLOW_SAMPLE: /* XXX */
+ case SFLOW_FLOW_SAMPLE:
+ if (sflow_print_flow_sample(tptr,tlen))
+ goto trunc;
break;
- case SFLOW_COUNTER_SAMPLE: /* XXX */
+ case SFLOW_COUNTER_SAMPLE:
+ if (sflow_print_counter_sample(tptr,tlen))
+ goto trunc;
break;
case SFLOW_EXPANDED_FLOW_SAMPLE:
- sflow_expanded_flow_sample = (const struct sflow_expanded_flow_sample_t *)tptr;
- nrecords = EXTRACT_32BITS(sflow_expanded_flow_sample->records);
-
- printf(" seqnum %u, type %u, idx %u, rate %u, pool %u, drops %u, records %u",
- EXTRACT_32BITS(sflow_expanded_flow_sample->seqnum),
- EXTRACT_32BITS(sflow_expanded_flow_sample->type),
- EXTRACT_32BITS(sflow_expanded_flow_sample->index),
- EXTRACT_32BITS(sflow_expanded_flow_sample->rate),
- EXTRACT_32BITS(sflow_expanded_flow_sample->pool),
- EXTRACT_32BITS(sflow_expanded_flow_sample->drops),
- EXTRACT_32BITS(sflow_expanded_flow_sample->records));
-
- tptr+= sizeof(struct sflow_expanded_flow_sample_t);
- tlen-= sizeof(struct sflow_expanded_flow_sample_t);
-
- while ( nrecords > 0 && tlen > 0) {
-
- /* decode Flow record - 2 bytes */
- flow_type = EXTRACT_32BITS(tptr)&0x0FFF;
- flow_len = EXTRACT_32BITS(tptr+4);
- printf("\n\t %s (%u) length %u",
- tok2str(sflow_flow_type_values,"Unknown",flow_type),
- flow_type,
- flow_len);
-
- tptr += 8;
- tlen -= 8;
-
- /* did we capture enough for fully decoding the flow ? */
- if (!TTEST2(*tptr, flow_len))
- goto trunc;
-
- switch(flow_type) {
- case SFLOW_FLOW_RAW_PACKET:
- sflow_flow_raw = (const struct sflow_expanded_flow_raw_t *)tptr;
- printf("\n\t protocol %s (%u), length %u, stripped bytes %u, header_size %u",
- tok2str(sflow_flow_raw_protocol_values,"Unknown",EXTRACT_32BITS(sflow_flow_raw->protocol)),
- EXTRACT_32BITS(sflow_flow_raw->protocol),
- EXTRACT_32BITS(sflow_flow_raw->length),
- EXTRACT_32BITS(sflow_flow_raw->stripped_bytes),
- EXTRACT_32BITS(sflow_flow_raw->header_size));
- break;
-
- /*
- * FIXME those are the defined flow types that lack a decoder
- */
- case SFLOW_FLOW_ETHERNET_FRAME:
- case SFLOW_FLOW_IPV4_DATA:
- case SFLOW_FLOW_IPV6_DATA:
- case SFLOW_FLOW_EXTENDED_SWITCH_DATA:
- case SFLOW_FLOW_EXTENDED_ROUTER_DATA:
- case SFLOW_FLOW_EXTENDED_GATEWAY_DATA:
- case SFLOW_FLOW_EXTENDED_USER_DATA:
- case SFLOW_FLOW_EXTENDED_URL_DATA:
- case SFLOW_FLOW_EXTENDED_MPLS_DATA:
- case SFLOW_FLOW_EXTENDED_NAT_DATA:
- case SFLOW_FLOW_EXTENDED_MPLS_TUNNEL:
- case SFLOW_FLOW_EXTENDED_MPLS_VC:
- case SFLOW_FLOW_EXTENDED_MPLS_FEC:
- case SFLOW_FLOW_EXTENDED_MPLS_LVP_FEC:
- case SFLOW_FLOW_EXTENDED_VLAN_TUNNEL:
- break;
- default:
- if (vflag <= 1)
- print_unknown_data(tptr, "\n\t ", flow_len);
- break;
-
- }
- tptr += flow_len;
- tlen -= flow_len;
- nrecords--;
- }
- break;
+ if (sflow_print_expanded_flow_sample(tptr,tlen))
+ goto trunc;
+ break;
case SFLOW_EXPANDED_COUNTER_SAMPLE:
- sflow_expanded_counter_sample = (const struct sflow_expanded_counter_sample_t *)tptr;
- nrecords = EXTRACT_32BITS(sflow_expanded_counter_sample->records);
-
- printf(" seqnum %u, type %u, idx %u, records %u",
- EXTRACT_32BITS(sflow_expanded_counter_sample->seqnum),
- EXTRACT_32BITS(sflow_expanded_counter_sample->type),
- EXTRACT_32BITS(sflow_expanded_counter_sample->index),
- nrecords);
-
- tptr+= sizeof(struct sflow_expanded_counter_sample_t);
- tlen-= sizeof(struct sflow_expanded_counter_sample_t);
-
- while ( nrecords > 0 && tlen > 0) {
-
- /* decode counter record - 2 bytes */
- counter_type = EXTRACT_32BITS(tptr)&0x0FFF;
- counter_len = EXTRACT_32BITS(tptr+4);
- printf("\n\t %s (%u) length %u",
- tok2str(sflow_counter_type_values,"Unknown",counter_type),
- counter_type,
- counter_len);
-
- tptr += 8;
- tlen -= 8;
-
- /* did we capture enough for fully decoding the counter ? */
- if (!TTEST2(*tptr, counter_len))
- goto trunc;
-
- switch(counter_type) {
- case SFLOW_COUNTER_GENERIC:
- sflow_gen_counter = (const struct sflow_generic_counter_t *)tptr;
- printf("\n\t ifindex %u, iftype %u, ifspeed %u, ifdirection %u (%s)",
- EXTRACT_32BITS(sflow_gen_counter->ifindex),
- EXTRACT_32BITS(sflow_gen_counter->iftype),
- EXTRACT_32BITS(sflow_gen_counter->ifspeed),
- EXTRACT_32BITS(sflow_gen_counter->ifdirection),
- tok2str(sflow_iface_direction_values, "Unknown",
- EXTRACT_32BITS(sflow_gen_counter->ifdirection)));
- printf("\n\t ifstatus %u, adminstatus: %s, operstatus: %s",
- EXTRACT_32BITS(sflow_gen_counter->ifstatus),
- EXTRACT_32BITS(sflow_gen_counter->ifstatus)&1 ? "up" : "down",
- (EXTRACT_32BITS(sflow_gen_counter->ifstatus)>>1)&1 ? "up" : "down");
- printf("\n\t In octets %" PRIu64
- ", unicast pkts %u, multicast pkts %u, broadcast pkts %u, discards %u",
- EXTRACT_64BITS(sflow_gen_counter->ifinoctets),
- EXTRACT_32BITS(sflow_gen_counter->ifinunicastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifinmulticastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifinbroadcastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifindiscards));
- printf("\n\t In errors %u, unknown protos %u",
- EXTRACT_32BITS(sflow_gen_counter->ifinerrors),
- EXTRACT_32BITS(sflow_gen_counter->ifinunkownprotos));
- printf("\n\t Out octets %" PRIu64
- ", unicast pkts %u, multicast pkts %u, broadcast pkts %u, discards %u",
- EXTRACT_64BITS(sflow_gen_counter->ifoutoctets),
- EXTRACT_32BITS(sflow_gen_counter->ifoutunicastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifoutmulticastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifoutbroadcastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifoutdiscards));
- printf("\n\t Out errors %u, promisc mode %u",
- EXTRACT_32BITS(sflow_gen_counter->ifouterrors),
- EXTRACT_32BITS(sflow_gen_counter->ifpromiscmode));
- break;
- case SFLOW_COUNTER_ETHERNET:
- sflow_eth_counter = (const struct sflow_ethernet_counter_t *)tptr;
- printf("\n\t align errors %u, fcs errors %u, single collision %u, multiple collision %u, test error %u",
- EXTRACT_32BITS(sflow_eth_counter->alignerrors),
- EXTRACT_32BITS(sflow_eth_counter->fcserrors),
- EXTRACT_32BITS(sflow_eth_counter->single_collision_frames),
- EXTRACT_32BITS(sflow_eth_counter->multiple_collision_frames),
- EXTRACT_32BITS(sflow_eth_counter->test_errors));
- printf("\n\t deferred %u, late collision %u, excessive collision %u, mac trans error %u",
- EXTRACT_32BITS(sflow_eth_counter->deferred_transmissions),
- EXTRACT_32BITS(sflow_eth_counter->late_collisions),
- EXTRACT_32BITS(sflow_eth_counter->excessive_collisions),
- EXTRACT_32BITS(sflow_eth_counter->mac_transmit_errors));
- printf("\n\t carrier error %u, frames too long %u, mac receive errors %u, symbol errors %u",
- EXTRACT_32BITS(sflow_eth_counter->carrier_sense_errors),
- EXTRACT_32BITS(sflow_eth_counter->frame_too_longs),
- EXTRACT_32BITS(sflow_eth_counter->mac_receive_errors),
- EXTRACT_32BITS(sflow_eth_counter->symbol_errors));
- break;
- case SFLOW_COUNTER_TOKEN_RING: /* XXX */
- break;
- case SFLOW_COUNTER_BASEVG:
- sflow_100basevg_counter = (const struct sflow_100basevg_counter_t *)tptr;
- printf("\n\t in high prio frames %u, in high prio octets %" PRIu64,
- EXTRACT_32BITS(sflow_100basevg_counter->in_highpriority_frames),
- EXTRACT_64BITS(sflow_100basevg_counter->in_highpriority_octets));
- printf("\n\t in norm prio frames %u, in norm prio octets %" PRIu64,
- EXTRACT_32BITS(sflow_100basevg_counter->in_normpriority_frames),
- EXTRACT_64BITS(sflow_100basevg_counter->in_normpriority_octets));
- printf("\n\t in ipm errors %u, oversized %u, in data errors %u, null addressed frames %u",
- EXTRACT_32BITS(sflow_100basevg_counter->in_ipmerrors),
- EXTRACT_32BITS(sflow_100basevg_counter->in_oversized),
- EXTRACT_32BITS(sflow_100basevg_counter->in_data_errors),
- EXTRACT_32BITS(sflow_100basevg_counter->in_null_addressed_frames));
- printf("\n\t out high prio frames %u, out high prio octets %" PRIu64
- ", trans into frames %u",
- EXTRACT_32BITS(sflow_100basevg_counter->out_highpriority_frames),
- EXTRACT_64BITS(sflow_100basevg_counter->out_highpriority_octets),
- EXTRACT_32BITS(sflow_100basevg_counter->transitioninto_frames));
- printf("\n\t in hc high prio octets %" PRIu64
- ", in hc norm prio octets %" PRIu64
- ", out hc high prio octets %" PRIu64,
- EXTRACT_64BITS(sflow_100basevg_counter->hc_in_highpriority_octets),
- EXTRACT_64BITS(sflow_100basevg_counter->hc_in_normpriority_octets),
- EXTRACT_64BITS(sflow_100basevg_counter->hc_out_highpriority_octets));
- break;
- case SFLOW_COUNTER_VLAN:
- sflow_vlan_counter = (const struct sflow_vlan_counter_t *)tptr;
- printf("\n\t vlan_id %u, octets %" PRIu64
- ", unicast_pkt %u, multicast_pkt %u, broadcast_pkt %u, discards %u",
- EXTRACT_32BITS(sflow_vlan_counter->vlan_id),
- EXTRACT_64BITS(sflow_vlan_counter->octets),
- EXTRACT_32BITS(sflow_vlan_counter->unicast_pkt),
- EXTRACT_32BITS(sflow_vlan_counter->multicast_pkt),
- EXTRACT_32BITS(sflow_vlan_counter->broadcast_pkt),
- EXTRACT_32BITS(sflow_vlan_counter->discards));
- break;
- case SFLOW_COUNTER_PROCESSOR: /* XXX */
- break;
- default:
- if (vflag <= 1)
- print_unknown_data(tptr, "\n\t\t", counter_len);
- break;
- }
- tptr += counter_len;
- tlen -= counter_len;
- nrecords--;
- }
- break;
+ if (sflow_print_expanded_counter_sample(tptr,tlen))
+ goto trunc;
+ break;
+
default:
if (vflag <= 1)
print_unknown_data(tptr, "\n\t ", sflow_sample_len);
diff --git a/contrib/tcpdump/print-sl.c b/contrib/tcpdump/print-sl.c
index dd0276720c01..3d649a665367 100644
--- a/contrib/tcpdump/print-sl.c
+++ b/contrib/tcpdump/print-sl.c
@@ -75,7 +75,7 @@ sl_if_print(const struct pcap_pkthdr *h, const u_char *p)
break;
#ifdef INET6
case 6:
- ip6_print((u_char *)ip, length);
+ ip6_print(gndo, (u_char *)ip, length);
break;
#endif
default:
diff --git a/contrib/tcpdump/print-sll.c b/contrib/tcpdump/print-sll.c
index c9546585dcb1..a044de6709fb 100644
--- a/contrib/tcpdump/print-sll.c
+++ b/contrib/tcpdump/print-sll.c
@@ -218,7 +218,7 @@ recurse:
caplen -= 4;
goto recurse;
} else {
- if (ethertype_print(ether_type, p, length, caplen) == 0) {
+ if (ethertype_print(gndo, ether_type, p, length, caplen) == 0) {
/* ether_type not known, print raw packet */
if (!eflag)
sll_print(sllp, length + SLL_HDR_LEN);
diff --git a/contrib/tcpdump/print-sunrpc.c b/contrib/tcpdump/print-sunrpc.c
index 5dd7a43a42f4..3a1fce749803 100644
--- a/contrib/tcpdump/print-sunrpc.c
+++ b/contrib/tcpdump/print-sunrpc.c
@@ -47,12 +47,12 @@ static const char rcsid[] _U_ =
#include <tcpdump-stdinc.h>
-#ifdef HAVE_GETRPCBYNUMBER
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
#include <rpc/rpc.h>
#ifdef HAVE_RPC_RPCENT_H
#include <rpc/rpcent.h>
#endif /* HAVE_RPC_RPCENT_H */
-#endif /* HAVE_GETRPCBYNUMBER */
+#endif /* defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H) */
#include <stdio.h>
#include <string.h>
@@ -153,7 +153,7 @@ static char *
progstr(prog)
u_int32_t prog;
{
-#ifdef HAVE_GETRPCBYNUMBER
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
register struct rpcent *rp;
#endif
static char buf[32];
@@ -161,12 +161,12 @@ progstr(prog)
if (lastprog != 0 && prog == lastprog)
return (buf);
-#ifdef HAVE_GETRPCBYNUMBER
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
rp = getrpcbynumber(prog);
if (rp == NULL)
#endif
(void) snprintf(buf, sizeof(buf), "#%u", prog);
-#ifdef HAVE_GETRPCBYNUMBER
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
else
strlcpy(buf, rp->r_name, sizeof(buf));
#endif
diff --git a/contrib/tcpdump/print-symantec.c b/contrib/tcpdump/print-symantec.c
index 0fba8e534de4..8b4ee38c4093 100644
--- a/contrib/tcpdump/print-symantec.c
+++ b/contrib/tcpdump/print-symantec.c
@@ -107,7 +107,7 @@ symantec_if_print(const struct pcap_pkthdr *h, const u_char *p)
if (!suppress_default_print)
default_print(p, caplen);
- } else if (ethertype_print(ether_type, p, length, caplen) == 0) {
+ } else if (ethertype_print(gndo, ether_type, p, length, caplen) == 0) {
/* ether_type not known, print raw packet */
if (!eflag)
symantec_hdr_print((u_char *)sp, length + sizeof (struct symantec_header));
diff --git a/contrib/tcpdump/print-tcp.c b/contrib/tcpdump/print-tcp.c
index e2559ecf64ca..88b461576df9 100644
--- a/contrib/tcpdump/print-tcp.c
+++ b/contrib/tcpdump/print-tcp.c
@@ -129,31 +129,8 @@ static int tcp_cksum(register const struct ip *ip,
register const struct tcphdr *tp,
register u_int len)
{
- union phu {
- struct phdr {
- u_int32_t src;
- u_int32_t dst;
- u_char mbz;
- u_char proto;
- u_int16_t len;
- } ph;
- u_int16_t pa[6];
- } phu;
- const u_int16_t *sp;
-
- /* pseudo-header.. */
- phu.ph.len = htons((u_int16_t)len);
- phu.ph.mbz = 0;
- phu.ph.proto = IPPROTO_TCP;
- memcpy(&phu.ph.src, &ip->ip_src.s_addr, sizeof(u_int32_t));
- if (IP_HL(ip) == 5)
- memcpy(&phu.ph.dst, &ip->ip_dst.s_addr, sizeof(u_int32_t));
- else
- phu.ph.dst = ip_finddst(ip);
-
- sp = &phu.pa[0];
- return in_cksum((u_short *)tp, len,
- sp[0]+sp[1]+sp[2]+sp[3]+sp[4]+sp[5]);
+ return (nextproto4_cksum(ip, (const u_int8_t *)tp, len,
+ IPPROTO_TCP));
}
void
@@ -294,7 +271,6 @@ tcp_print(register const u_char *bp, register u_int length,
* both directions).
*/
#ifdef INET6
- memset(&tha, 0, sizeof(tha));
rev = 0;
if (ip6) {
src = &ip6->ip6_src;
@@ -315,6 +291,27 @@ tcp_print(register const u_char *bp, register u_int length,
tha.port = sport << 16 | dport;
}
} else {
+ /*
+ * Zero out the tha structure; the src and dst
+ * fields are big enough to hold an IPv6
+ * address, but we only have IPv4 addresses
+ * and thus must clear out the remaining 124
+ * bits.
+ *
+ * XXX - should we just clear those bytes after
+ * copying the IPv4 addresses, rather than
+ * zeroing out the entire structure and then
+ * overwriting some of the zeroes?
+ *
+ * XXX - this could fail if we see TCP packets
+ * with an IPv6 address with the lower 124 bits
+ * all zero and also see TCP packes with an
+ * IPv4 address with the same 32 bits as the
+ * upper 32 bits of the IPv6 address in question.
+ * Can that happen? Is it likely enough to be
+ * an issue?
+ */
+ memset(&tha, 0, sizeof(tha));
src = &ip->ip_src;
dst = &ip->ip_dst;
if (sport > dport)
@@ -393,34 +390,40 @@ tcp_print(register const u_char *bp, register u_int length,
return;
}
- if (IP_V(ip) == 4 && vflag && !Kflag && !fragmented) {
+ if (vflag && !Kflag && !fragmented) {
+ /* Check the checksum, if possible. */
u_int16_t sum, tcp_sum;
- if (TTEST2(tp->th_sport, length)) {
- sum = tcp_cksum(ip, tp, length);
- (void)printf(", cksum 0x%04x",EXTRACT_16BITS(&tp->th_sum));
- if (sum != 0) {
+ if (IP_V(ip) == 4) {
+ if (TTEST2(tp->th_sport, length)) {
+ sum = tcp_cksum(ip, tp, length);
tcp_sum = EXTRACT_16BITS(&tp->th_sum);
- (void)printf(" (incorrect -> 0x%04x)",in_cksum_shouldbe(tcp_sum, sum));
- } else
- (void)printf(" (correct)");
+
+ (void)printf(", cksum 0x%04x", tcp_sum);
+ if (sum != 0)
+ (void)printf(" (incorrect -> 0x%04x)",
+ in_cksum_shouldbe(tcp_sum, sum));
+ else
+ (void)printf(" (correct)");
+ }
}
- }
#ifdef INET6
- if (IP_V(ip) == 6 && ip6->ip6_plen && vflag && !Kflag && !fragmented) {
- u_int16_t sum,tcp_sum;
- if (TTEST2(tp->th_sport, length)) {
- sum = nextproto6_cksum(ip6, (u_short *)tp, length, IPPROTO_TCP);
- (void)printf(", cksum 0x%04x",EXTRACT_16BITS(&tp->th_sum));
- if (sum != 0) {
+ else if (IP_V(ip) == 6 && ip6->ip6_plen) {
+ if (TTEST2(tp->th_sport, length)) {
+ sum = nextproto6_cksum(ip6, (const u_int8_t *)tp, length, IPPROTO_TCP);
tcp_sum = EXTRACT_16BITS(&tp->th_sum);
- (void)printf(" (incorrect -> 0x%04x)",in_cksum_shouldbe(tcp_sum, sum));
- } else
- (void)printf(" (correct)");
+ (void)printf(", cksum 0x%04x", tcp_sum);
+ if (sum != 0)
+ (void)printf(" (incorrect -> 0x%04x)",
+ in_cksum_shouldbe(tcp_sum, sum));
+ else
+ (void)printf(" (correct)");
+
+ }
}
- }
#endif
+ }
length -= hlen;
if (vflag > 1 || length > 0 || flags & (TH_SYN | TH_FIN | TH_RST)) {
@@ -661,6 +664,8 @@ tcp_print(register const u_char *bp, register u_int length,
ns_print(bp + 2, length - 2, 0);
} else if (sport == MSDP_PORT || dport == MSDP_PORT) {
msdp_print(bp, length);
+ } else if (sport == RPKI_RTR_PORT || dport == RPKI_RTR_PORT) {
+ rpki_rtr_print(bp, length);
}
else if (length > 0 && (sport == LDP_PORT || dport == LDP_PORT)) {
ldp_print(bp, length);
diff --git a/contrib/tcpdump/print-tftp.c b/contrib/tcpdump/print-tftp.c
index 0caff4284323..84cde3969d08 100644
--- a/contrib/tcpdump/print-tftp.c
+++ b/contrib/tcpdump/print-tftp.c
@@ -99,15 +99,7 @@ tftp_print(register const u_char *bp, u_int length)
case RRQ:
case WRQ:
case OACK:
- /*
- * XXX Not all arpa/tftp.h's specify th_stuff as any
- * array; use address of th_block instead
- */
-#ifdef notdef
p = (u_char *)tp->th_stuff;
-#else
- p = (u_char *)&tp->th_block;
-#endif
putchar(' ');
/* Print filename or first option */
if (opcode != OACK)
diff --git a/contrib/tcpdump/print-udp.c b/contrib/tcpdump/print-udp.c
index 7eee9c78c298..eab0128c5653 100644
--- a/contrib/tcpdump/print-udp.c
+++ b/contrib/tcpdump/print-udp.c
@@ -35,7 +35,6 @@ static const char rcsid[] _U_ =
#ifdef SEGSIZE
#undef SEGSIZE
#endif
-#include <arpa/tftp.h>
#include <stdio.h>
#include <string.h>
@@ -289,75 +288,16 @@ static int udp_cksum(register const struct ip *ip,
register const struct udphdr *up,
register u_int len)
{
- union phu {
- struct phdr {
- u_int32_t src;
- u_int32_t dst;
- u_char mbz;
- u_char proto;
- u_int16_t len;
- } ph;
- u_int16_t pa[6];
- } phu;
- register const u_int16_t *sp;
-
- /* pseudo-header.. */
- phu.ph.len = htons((u_int16_t)len);
- phu.ph.mbz = 0;
- phu.ph.proto = IPPROTO_UDP;
- memcpy(&phu.ph.src, &ip->ip_src.s_addr, sizeof(u_int32_t));
- if (IP_HL(ip) == 5)
- memcpy(&phu.ph.dst, &ip->ip_dst.s_addr, sizeof(u_int32_t));
- else
- phu.ph.dst = ip_finddst(ip);
-
- sp = &phu.pa[0];
- return in_cksum((u_short *)up, len,
- sp[0]+sp[1]+sp[2]+sp[3]+sp[4]+sp[5]);
+ return (nextproto4_cksum(ip, (const u_int8_t *)(void *)up, len,
+ IPPROTO_UDP));
}
#ifdef INET6
static int udp6_cksum(const struct ip6_hdr *ip6, const struct udphdr *up,
u_int len)
{
- size_t i;
- register const u_int16_t *sp;
- u_int32_t sum;
- union {
- struct {
- struct in6_addr ph_src;
- struct in6_addr ph_dst;
- u_int32_t ph_len;
- u_int8_t ph_zero[3];
- u_int8_t ph_nxt;
- } ph;
- u_int16_t pa[20];
- } phu;
-
- /* pseudo-header */
- memset(&phu, 0, sizeof(phu));
- phu.ph.ph_src = ip6->ip6_src;
- phu.ph.ph_dst = ip6->ip6_dst;
- phu.ph.ph_len = htonl(len);
- phu.ph.ph_nxt = IPPROTO_UDP;
-
- sum = 0;
- for (i = 0; i < sizeof(phu.pa) / sizeof(phu.pa[0]); i++)
- sum += phu.pa[i];
-
- sp = (const u_int16_t *)up;
-
- for (i = 0; i < (len & ~1); i += 2)
- sum += *sp++;
-
- if (len & 1)
- sum += htons((*(const u_int8_t *)sp) << 8);
-
- while (sum > 0xffff)
- sum = (sum & 0xffff) + (sum >> 16);
- sum = ~sum & 0xffff;
-
- return (sum);
+ return (nextproto6_cksum(ip6, (const u_int8_t *)(void *)up, len,
+ IPPROTO_UDP));
}
#endif
@@ -570,31 +510,46 @@ udp_print(register const u_char *bp, u_int length,
}
udpipaddr_print(ip, sport, dport);
- if (IP_V(ip) == 4 && (vflag > 1) && !Kflag && !fragmented) {
- int sum = up->uh_sum;
- if (sum == 0) {
- (void)printf("[no cksum] ");
- } else if (TTEST2(cp[0], length)) {
- sum = udp_cksum(ip, up, length + sizeof(struct udphdr));
- if (sum != 0)
- (void)printf("[bad udp cksum %x!] ", sum);
- else
- (void)printf("[udp sum ok] ");
+ if (vflag && !Kflag && !fragmented) {
+ /* Check the checksum, if possible. */
+ u_int16_t sum, udp_sum;
+
+ /*
+ * XXX - do this even if vflag == 1?
+ * TCP does, and we do so for UDP-over-IPv6.
+ */
+ if (IP_V(ip) == 4 && (vflag > 1)) {
+ udp_sum = EXTRACT_16BITS(&up->uh_sum);
+ if (udp_sum == 0) {
+ (void)printf("[no cksum] ");
+ } else if (TTEST2(cp[0], length)) {
+ sum = udp_cksum(ip, up, length + sizeof(struct udphdr));
+
+ if (sum != 0) {
+ (void)printf("[bad udp cksum 0x%04x -> 0x%04x!] ",
+ udp_sum,
+ in_cksum_shouldbe(udp_sum, sum));
+ } else
+ (void)printf("[udp sum ok] ");
+ }
}
- }
#ifdef INET6
- if (IP_V(ip) == 6 && ip6->ip6_plen && vflag && !Kflag && !fragmented) {
- int sum = up->uh_sum;
- /* for IPv6, UDP checksum is mandatory */
- if (TTEST2(cp[0], length)) {
- sum = udp6_cksum(ip6, up, length + sizeof(struct udphdr));
- if (sum != 0)
- (void)printf("[bad udp cksum %x!] ", sum);
- else
- (void)printf("[udp sum ok] ");
+ else if (IP_V(ip) == 6 && ip6->ip6_plen) {
+ /* for IPv6, UDP checksum is mandatory */
+ if (TTEST2(cp[0], length)) {
+ sum = udp6_cksum(ip6, up, length + sizeof(struct udphdr));
+ udp_sum = EXTRACT_16BITS(&up->uh_sum);
+
+ if (sum != 0) {
+ (void)printf("[bad udp cksum 0x%04x -> 0x%04x!] ",
+ udp_sum,
+ in_cksum_shouldbe(udp_sum, sum));
+ } else
+ (void)printf("[udp sum ok] ");
+ }
}
- }
#endif
+ }
if (!qflag) {
#define ISPORT(p) (dport == (p) || sport == (p))
@@ -654,9 +609,10 @@ udp_print(register const u_char *bp, u_int length,
#ifdef INET6
else if (ISPORT(RIPNG_PORT))
ripng_print((const u_char *)(up + 1), length);
- else if (ISPORT(DHCP6_SERV_PORT) || ISPORT(DHCP6_CLI_PORT)) {
+ else if (ISPORT(DHCP6_SERV_PORT) || ISPORT(DHCP6_CLI_PORT))
dhcp6_print((const u_char *)(up + 1), length);
- }
+ else if (ISPORT(BABEL_PORT) || ISPORT(BABEL_PORT_OLD))
+ babel_print((const u_char *)(up + 1), length);
#endif /*INET6*/
/*
* Kludge in test for whiteboard packets.
diff --git a/contrib/tcpdump/print-vrrp.c b/contrib/tcpdump/print-vrrp.c
index 899542dac429..8b733d228c3c 100644
--- a/contrib/tcpdump/print-vrrp.c
+++ b/contrib/tcpdump/print-vrrp.c
@@ -110,9 +110,15 @@ vrrp_print(register const u_char *bp, register u_int len, int ttl)
int i;
char c;
- if (TTEST2(bp[0], len) && in_cksum((const u_short*)bp, len, 0))
- printf(", (bad vrrp cksum %x)",
- EXTRACT_16BITS(&bp[6]));
+ if (TTEST2(bp[0], len)) {
+ struct cksum_vec vec[1];
+
+ vec[0].ptr = bp;
+ vec[0].len = len;
+ if (in_cksum(vec, 1))
+ printf(", (bad vrrp cksum %x)",
+ EXTRACT_16BITS(&bp[6]));
+ }
printf(", addrs");
if (naddrs > 1)
printf("(%d)", naddrs);
diff --git a/contrib/tcpdump/tcp.h b/contrib/tcpdump/tcp.h
index ac83714fe29e..45fc21c0d504 100644
--- a/contrib/tcpdump/tcp.h
+++ b/contrib/tcpdump/tcp.h
@@ -105,6 +105,7 @@ struct tcphdr {
#define NFS_PORT 2049
#endif
#define MSDP_PORT 639
+#define RPKI_RTR_PORT 2222 /* experimental up until sidr-wg registers a well-known port */
#define LDP_PORT 646
#ifndef SMB_PORT
#define SMB_PORT 445
diff --git a/contrib/tcpdump/tcpdump-stdinc.h b/contrib/tcpdump/tcpdump-stdinc.h
index c437cc10fe9a..d350d1be126b 100644
--- a/contrib/tcpdump/tcpdump-stdinc.h
+++ b/contrib/tcpdump/tcpdump-stdinc.h
@@ -131,10 +131,43 @@ typedef char* caddr_t;
#endif /* WIN32 */
-#ifdef INET6
-#include "ip6.h"
+#ifndef HAVE___ATTRIBUTE__
+#define __attribute__(x)
#endif
+/*
+ * Used to declare a structure unaligned, so that the C compiler,
+ * if necessary, generates code that doesn't assume alignment.
+ * This is required because there is no guarantee that the packet
+ * data we get from libpcap/WinPcap is properly aligned.
+ *
+ * This assumes that, for all compilers that support __attribute__:
+ *
+ * 1) they support __attribute__((packed));
+ *
+ * 2) for all instruction set architectures requiring strict
+ * alignment, declaring a structure with that attribute
+ * causes the compiler to generate code that handles
+ * misaligned 2-byte, 4-byte, and 8-byte integral
+ * quantities.
+ *
+ * It does not (yet) handle compilers where you can get the compiler
+ * to generate code of that sort by some other means.
+ *
+ * This is required in order to, for example, keep the compiler from
+ * generating, for
+ *
+ * if (bp->bp_htype == 1 && bp->bp_hlen == 6 && bp->bp_op == BOOTPREQUEST) {
+ *
+ * in print-bootp.c, code that loads the first 4-byte word of a
+ * "struct bootp", masking out the bp_hops field, and comparing the result
+ * against 0x01010600.
+ *
+ * Note: this also requires that padding be put into the structure,
+ * at least for compilers where it's implemented as __attribute__((packed)).
+ */
+#define UNALIGNED __attribute__((packed))
+
#if defined(WIN32) || defined(MSDOS)
#define FOPEN_READ_TXT "rt"
#define FOPEN_READ_BIN "rb"
@@ -147,7 +180,7 @@ typedef char* caddr_t;
#define FOPEN_WRITE_BIN FOPEN_WRITE_TXT
#endif
-#if defined(__GNUC__) && defined(__i386__) && !defined(__ntohl)
+#if defined(__GNUC__) && defined(__i386__) && !defined(__APPLE__) && !defined(__ntohl)
#undef ntohl
#undef ntohs
#undef htonl
diff --git a/contrib/tcpdump/tcpdump.1.in b/contrib/tcpdump/tcpdump.1.in
index 5e1a00f82848..aabda7714900 100644
--- a/contrib/tcpdump/tcpdump.1.in
+++ b/contrib/tcpdump/tcpdump.1.in
@@ -29,7 +29,7 @@ tcpdump \- dump traffic on a network
.na
.B tcpdump
[
-.B \-AbdDefIKlLnNOpqRStuUvxX
+.B \-AbdDefhHIJKlLnNOpqRStuUvxX
] [
.B \-B
.I buffer_size
@@ -56,6 +56,10 @@ tcpdump \- dump traffic on a network
.I interface
]
[
+.B \-j
+.I tstamp_type
+]
+[
.B \-m
.I module
]
@@ -256,7 +260,7 @@ Print the link-level header on each dump line.
.B \-E
Use \fIspi@ipaddr algo:secret\fP for decrypting IPsec ESP packets that
are addressed to \fIaddr\fP and contain Security Parameter Index value
-\fIspi\fP. This combination may be repeated with comma or newline seperation.
+\fIspi\fP. This combination may be repeated with comma or newline separation.
.IP
Note that setting the secret for IPv4 ESP packets is supported at this time.
.IP
@@ -272,7 +276,7 @@ The ability to decrypt packets is only present if \fItcpdump\fP was compiled
with cryptography enabled.
.IP
\fIsecret\fP is the ASCII text for ESP secret key.
-If preceeded by 0x, then a hex value will be read.
+If preceded by 0x, then a hex value will be read.
.IP
The option assumes RFC2406 ESP, not RFC1827 ESP.
The option is only for debugging purposes, and
@@ -319,6 +323,13 @@ If used in conjunction with the
.B \-C
option, filenames will take the form of `\fIfile\fP<count>'.
.TP
+.B \-h
+Print the tcpdump and libpcap version strings, print a usage message,
+and exit.
+.TP
+.B \-H
+Attempt to detect 802.11s draft mesh headers.
+.TP
.B \-i
Listen on \fIinterface\fP.
If unspecified, \fItcpdump\fP searches the system interface list for the
@@ -359,6 +370,18 @@ monitor mode will be shown; if
is specified, only those link-layer types available when in monitor mode
will be shown.
.TP
+.B \-j
+Set the time stamp type for the capture to \fItstamp_type\fP. The names
+to use for the time stamp types are given in
+.BR pcap-tstamp-type (@MAN_MISC_INFO@);
+not all the types listed there will necessarily be valid for any given
+interface.
+.TP
+.B \-J
+List the supported time stamp types for the interface and exit. If the
+time stamp type cannot be set for the interface, no time stamp types are
+listed.
+.TP
.B \-K
Don't attempt to verify IP, TCP, or UDP checksums. This is useful for
interfaces that perform some or all of those checksum calculation in
@@ -615,7 +638,10 @@ savefile name as the only argument, make the flags & arguments arrangements
and execute the command that you want.
.TP
.B \-Z
-Drops privileges (if root) and changes user ID to
+If
+.I tcpdump
+is running as root, after opening the capture device or input savefile,
+but before opening any savefiles for output, change the user ID to
.I user
and the group ID to the primary group of
.IR user .
@@ -871,8 +897,8 @@ The general format of a tcp protocol line is:
\fISrc\fP and \fIdst\fP are the source and destination IP
addresses and ports.
\fIFlags\fP are some combination of S (SYN),
-F (FIN), P (PUSH), R (RST), W (ECN CWR) or E (ECN-Echo), or a single
-`.' (no flags).
+F (FIN), P (PUSH), R (RST), U (URG), W (ECN CWR), E (ECN-Echo) or
+`.' (ACK), or `none' if no flags are set.
\fIData-seqno\fP describes the portion of sequence space covered
by the data in this packet (see example below).
\fIAck\fP is sequence number of the next data expected the other
@@ -919,8 +945,7 @@ bytes and there was a max-segment-size option requesting an mss of
Csam replies with a similar packet except it includes a piggy-backed
ack for rtsg's SYN.
Rtsg then acks csam's SYN.
-The `.' means no
-flags were set.
+The `.' means the ACK flag was set.
The packet contained no data so there is no data sequence number.
Note that the ack sequence
number is a small integer (1).
@@ -1266,7 +1291,6 @@ RA, \fInot\fP set) and `|' (truncated message, TC, set).
If the
`question' section doesn't contain exactly one entry, `[\fIn\fPq]'
is printed.
-
.HD
SMB/CIFS decoding
.LP
@@ -1274,19 +1298,18 @@ SMB/CIFS decoding
on UDP/137, UDP/138 and TCP/139.
Some primitive decoding of IPX and
NetBEUI SMB data is also done.
-
+.LP
By default a fairly minimal decode is done, with a much more detailed
decode done if -v is used.
Be warned that with -v a single SMB packet
may take up a page or more, so only use -v if you really want all the
gory details.
-
-For information on SMB packet formats and what all te fields mean see
+.LP
+For information on SMB packet formats and what all the fields mean see
www.cifs.org or the pub/samba/specs/ directory on your favorite
samba.org mirror site.
The SMB patches were written by Andrew Tridgell
(tridge@samba.org).
-
.HD
NFS Requests and Replies
.LP
@@ -1639,7 +1662,7 @@ Ethernet interface removed the packet from the wire and when the kernel
serviced the `new packet' interrupt.
.SH "SEE ALSO"
stty(1), pcap(3PCAP), bpf(4), nit(4P), pcap-savefile(@MAN_FILE_FORMATS@),
-pcap-filter(@MAN_MISC_INFO@)
+pcap-filter(@MAN_MISC_INFO@), pcap-tstamp-type(@MAN_MISC_INFO@)
.SH AUTHORS
The original authors are:
.LP
diff --git a/contrib/tcpdump/tcpdump.c b/contrib/tcpdump/tcpdump.c
index 424b717690fb..52783d3131d5 100644
--- a/contrib/tcpdump/tcpdump.c
+++ b/contrib/tcpdump/tcpdump.c
@@ -94,6 +94,9 @@ netdissect_options *gndo = &Gndo;
static int dflag; /* print filter code */
static int Lflag; /* list available data link types and exit */
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+static int Jflag; /* list available time stamp types */
+#endif
static char *zflag = NULL; /* compress each savefile using a specified command (like gzip or bzip2) */
static int infodelay;
@@ -114,7 +117,8 @@ static void ndo_default_print(netdissect_options *, const u_char *, u_int);
static void dump_packet_and_trunc(u_char *, const struct pcap_pkthdr *, const u_char *);
static void dump_packet(u_char *, const struct pcap_pkthdr *, const u_char *);
static void droproot(const char *, const char *);
-static void ndo_error(netdissect_options *ndo, const char *fmt, ...);
+static void ndo_error(netdissect_options *ndo, const char *fmt, ...)
+ __attribute__ ((noreturn, format (printf, 2, 3)));
static void ndo_warning(netdissect_options *ndo, const char *fmt, ...);
#ifdef SIGINFO
@@ -132,10 +136,6 @@ RETSIGTYPE requestinfo(int);
static void info(int);
static u_int packets_captured;
-typedef u_int (*if_printer)(const struct pcap_pkthdr *, const u_char *);
-typedef u_int (*if_ndo_printer)(struct netdissect_options *ndo,
- const struct pcap_pkthdr *, const u_char *);
-
struct printer {
if_printer f;
int type;
@@ -153,7 +153,6 @@ static struct printer printers[] = {
#ifdef DLT_ARCNET_LINUX
{ arcnet_linux_if_print, DLT_ARCNET_LINUX },
#endif
- { ether_if_print, DLT_EN10MB },
{ token_if_print, DLT_IEEE802 },
#ifdef DLT_LANE8023
{ lane_if_print, DLT_LANE8023 },
@@ -305,13 +304,29 @@ static struct printer printers[] = {
};
static struct ndo_printer ndo_printers[] = {
+ { ether_if_print, DLT_EN10MB },
#ifdef DLT_IPNET
{ ipnet_if_print, DLT_IPNET },
#endif
+#ifdef DLT_IEEE802_15_4
+ { ieee802_15_4_if_print, DLT_IEEE802_15_4 },
+#endif
+#ifdef DLT_IEEE802_15_4_NOFCS
+ { ieee802_15_4_if_print, DLT_IEEE802_15_4_NOFCS },
+#endif
+#ifdef DLT_PPI
+ { ppi_if_print, DLT_PPI },
+#endif
+#ifdef DLT_NETANALYZER
+ { netanalyzer_if_print, DLT_NETANALYZER },
+#endif
+#ifdef DLT_NETANALYZER_TRANSPARENT
+ { netanalyzer_transparent_if_print, DLT_NETANALYZER_TRANSPARENT },
+#endif
{ NULL, 0 },
};
-static if_printer
+if_printer
lookup_printer(int type)
{
struct printer *p;
@@ -324,7 +339,7 @@ lookup_printer(int type)
/* NOTREACHED */
}
-static if_ndo_printer
+if_ndo_printer
lookup_ndo_printer(int type)
{
struct ndo_printer *p;
@@ -361,6 +376,40 @@ struct dump_info {
pcap_dumper_t *p;
};
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+static void
+show_tstamp_types_and_exit(const char *device, pcap_t *pd)
+{
+ int n_tstamp_types;
+ int *tstamp_types = 0;
+ const char *tstamp_type_name;
+ int i;
+
+ n_tstamp_types = pcap_list_tstamp_types(pd, &tstamp_types);
+ if (n_tstamp_types < 0)
+ error("%s", pcap_geterr(pd));
+
+ if (n_tstamp_types == 0) {
+ fprintf(stderr, "Time stamp type cannot be set for %s\n",
+ device);
+ exit(0);
+ }
+ fprintf(stderr, "Time stamp types for %s (use option -j to set):\n",
+ device);
+ for (i = 0; i < n_tstamp_types; i++) {
+ tstamp_type_name = pcap_tstamp_type_val_to_name(tstamp_types[i]);
+ if (tstamp_type_name != NULL) {
+ (void) fprintf(stderr, " %s (%s)\n", tstamp_type_name,
+ pcap_tstamp_type_val_to_description(tstamp_types[i]));
+ } else {
+ (void) fprintf(stderr, " %d\n", tstamp_types[i]);
+ }
+ }
+ pcap_free_tstamp_types(tstamp_types);
+ exit(0);
+}
+#endif
+
static void
show_dlts_and_exit(const char *device, pcap_t *pd)
{
@@ -402,13 +451,13 @@ show_dlts_and_exit(const char *device, pcap_t *pd)
if (lookup_printer(dlts[n_dlts]) == NULL
&& lookup_ndo_printer(dlts[n_dlts]) == NULL)
(void) fprintf(stderr, " (printing not supported)");
- putchar('\n');
+ fprintf(stderr, "\n");
} else {
(void) fprintf(stderr, " DLT %d (printing not supported)\n",
dlts[n_dlts]);
}
}
- free(dlts);
+ pcap_free_datalinks(dlts);
exit(0);
}
@@ -430,6 +479,16 @@ show_dlts_and_exit(const char *device, pcap_t *pd)
#define I_FLAG
#endif /* HAVE_PCAP_CREATE */
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+#define j_FLAG "j:"
+#define j_FLAG_USAGE " [ -j tstamptype ]"
+#define J_FLAG "J"
+#else /* PCAP_ERROR_TSTAMP_TYPE_NOTSUP */
+#define j_FLAG
+#define j_FLAG_USAGE
+#define J_FLAG
+#endif /* PCAP_ERROR_TSTAMP_TYPE_NOTSUP */
+
#ifdef HAVE_PCAP_FINDALLDEVS
#ifndef HAVE_PCAP_IF_T
#undef HAVE_PCAP_FINDALLDEVS
@@ -574,6 +633,7 @@ main(int argc, char **argv)
if(wsockinit() != 0) return 1;
#endif /* WIN32 */
+ jflag=-1; /* not set */
gndo->ndo_Oflag=1;
gndo->ndo_Rflag=1;
gndo->ndo_dlt=-1;
@@ -600,9 +660,8 @@ main(int argc, char **argv)
smiInit("tcpdump");
#endif
- opterr = 0;
while (
- (op = getopt(argc, argv, "aAb" B_FLAG "c:C:d" D_FLAG "eE:fF:G:i:" I_FLAG "KlLm:M:nNOpqr:Rs:StT:u" U_FLAG "vw:W:xXy:Yz:Z:")) != -1)
+ (op = getopt(argc, argv, "aAb" B_FLAG "c:C:d" D_FLAG "eE:fF:G:hHi:" I_FLAG j_FLAG J_FLAG "KlLm:M:nNOpqr:Rs:StT:u" U_FLAG "vw:W:xXy:Yz:Z:")) != -1)
switch (op) {
case 'a':
@@ -695,6 +754,14 @@ main(int argc, char **argv)
}
break;
+ case 'h':
+ usage();
+ break;
+
+ case 'H':
+ ++Hflag;
+ break;
+
case 'i':
if (optarg[0] == '0' && optarg[1] == 0)
error("Invalid adapter index");
@@ -742,6 +809,18 @@ main(int argc, char **argv)
break;
#endif /* HAVE_PCAP_CREATE */
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ case 'j':
+ jflag = pcap_tstamp_type_name_to_val(optarg);
+ if (jflag < 0)
+ error("invalid time stamp type %s", optarg);
+ break;
+
+ case 'J':
+ Jflag++;
+ break;
+#endif
+
case 'l':
#ifdef WIN32
/*
@@ -856,6 +935,8 @@ main(int argc, char **argv)
packettype = PT_TFTP;
else if (strcasecmp(optarg, "aodv") == 0)
packettype = PT_AODV;
+ else if (strcasecmp(optarg, "carp") == 0)
+ packettype = PT_CARP;
else
error("unknown packet type `%s'", optarg);
break;
@@ -1034,6 +1115,10 @@ main(int argc, char **argv)
pd = pcap_create(device, ebuf);
if (pd == NULL)
error("%s", ebuf);
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ if (Jflag)
+ show_tstamp_types_and_exit(device, pd);
+#endif
/*
* Is this an interface that supports monitor mode?
*/
@@ -1043,16 +1128,16 @@ main(int argc, char **argv)
supports_monitor_mode = 0;
status = pcap_set_snaplen(pd, snaplen);
if (status != 0)
- error("%s: pcap_set_snaplen failed: %s",
+ error("%s: Can't set snapshot length: %s",
device, pcap_statustostr(status));
status = pcap_set_promisc(pd, !pflag);
if (status != 0)
- error("%s: pcap_set_promisc failed: %s",
+ error("%s: Can't set promiscuous mode: %s",
device, pcap_statustostr(status));
if (Iflag) {
status = pcap_set_rfmon(pd, 1);
if (status != 0)
- error("%s: pcap_set_rfmon failed: %s",
+ error("%s: Can't set monitor mode: %s",
device, pcap_statustostr(status));
}
status = pcap_set_timeout(pd, 1000);
@@ -1062,9 +1147,17 @@ main(int argc, char **argv)
if (Bflag != 0) {
status = pcap_set_buffer_size(pd, Bflag);
if (status != 0)
- error("%s: pcap_set_buffer_size failed: %s",
+ error("%s: Can't set buffer size: %s",
device, pcap_statustostr(status));
}
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ if (jflag != -1) {
+ status = pcap_set_tstamp_type(pd, jflag);
+ if (status < 0)
+ error("%s: Can't set time stamp type: %s",
+ device, pcap_statustostr(status));
+ }
+#endif
status = pcap_activate(pd);
if (status < 0) {
/*
@@ -1170,14 +1263,40 @@ main(int argc, char **argv)
(void)setsignal(SIGPIPE, cleanup);
(void)setsignal(SIGTERM, cleanup);
(void)setsignal(SIGINT, cleanup);
- (void)setsignal(SIGCHLD, child_cleanup);
#endif /* WIN32 */
+#if defined(HAVE_FORK) || defined(HAVE_VFORK)
+ (void)setsignal(SIGCHLD, child_cleanup);
+#endif
/* Cooperate with nohup(1) */
#ifndef WIN32
if ((oldhandler = setsignal(SIGHUP, cleanup)) != SIG_DFL)
(void)setsignal(SIGHUP, oldhandler);
#endif /* WIN32 */
+#ifndef WIN32
+ /*
+ * If a user name was specified with "-Z", attempt to switch to
+ * that user's UID. This would probably be used with sudo,
+ * to allow tcpdump to be run in a special restricted
+ * account (if you just want to allow users to open capture
+ * devices, and can't just give users that permission,
+ * you'd make tcpdump set-UID or set-GID).
+ *
+ * Tcpdump doesn't necessarily write only to one savefile;
+ * the general only way to allow a -Z instance to write to
+ * savefiles as the user under whose UID it's run, rather
+ * than as the user specified with -Z, would thus be to switch
+ * to the original user ID before opening a capture file and
+ * then switch back to the -Z user ID after opening the savefile.
+ * Switching to the -Z user ID only after opening the first
+ * savefile doesn't handle the general case.
+ */
+ if (getuid() == 0 || geteuid() == 0) {
+ if (username || chroot_dir)
+ droproot(username, chroot_dir);
+ }
+#endif /* WIN32 */
+
if (pcap_setfilter(pd, &fcode) < 0)
error("%s", pcap_geterr(pd));
if (WFileName) {
@@ -1207,6 +1326,10 @@ main(int argc, char **argv)
callback = dump_packet;
pcap_userdata = (u_char *)p;
}
+#ifdef HAVE_PCAP_DUMP_FLUSH
+ if (Uflag)
+ pcap_dump_flush(p);
+#endif
} else {
type = pcap_datalink(pd);
printinfo.ndo_type = 1;
@@ -1227,16 +1350,7 @@ main(int argc, char **argv)
callback = print_packet;
pcap_userdata = (u_char *)&printinfo;
}
-#ifndef WIN32
- /*
- * We cannot do this earlier, because we want to be able to open
- * the file (if done) for writing before giving up permissions.
- */
- if (getuid() == 0 || geteuid() == 0) {
- if (username || chroot_dir)
- droproot(username, chroot_dir);
- }
-#endif /* WIN32 */
+
#ifdef SIGINFO
/*
* We can't get statistics when reading from a file rather
@@ -1365,13 +1479,13 @@ cleanup(int signo _U_)
On windows, we do not use a fork, so we do not care less about
waiting a child processes to die
*/
-#ifndef WIN32
+#if defined(HAVE_FORK) || defined(HAVE_VFORK)
static RETSIGTYPE
child_cleanup(int signo _U_)
{
wait(NULL);
}
-#endif /* WIN32 */
+#endif /* HAVE_FORK && HAVE_VFORK */
static void
info(register int verbose)
@@ -1392,34 +1506,41 @@ info(register int verbose)
if (!verbose)
fprintf(stderr, "%s: ", program_name);
- (void)fprintf(stderr, "%u packets captured", packets_captured);
+ (void)fprintf(stderr, "%u packet%s captured", packets_captured,
+ PLURAL_SUFFIX(packets_captured));
if (!verbose)
fputs(", ", stderr);
else
putc('\n', stderr);
- (void)fprintf(stderr, "%u packets received by filter", stat.ps_recv);
+ (void)fprintf(stderr, "%u packet%s received by filter", stat.ps_recv,
+ PLURAL_SUFFIX(stat.ps_recv));
if (!verbose)
fputs(", ", stderr);
else
putc('\n', stderr);
- (void)fprintf(stderr, "%u packets dropped by kernel", stat.ps_drop);
+ (void)fprintf(stderr, "%u packet%s dropped by kernel", stat.ps_drop,
+ PLURAL_SUFFIX(stat.ps_drop));
if (stat.ps_ifdrop != 0) {
if (!verbose)
fputs(", ", stderr);
else
putc('\n', stderr);
- (void)fprintf(stderr, "%u packets dropped by interface\n",
- stat.ps_ifdrop);
+ (void)fprintf(stderr, "%u packet%s dropped by interface\n",
+ stat.ps_ifdrop, PLURAL_SUFFIX(stat.ps_ifdrop));
} else
putc('\n', stderr);
infoprint = 0;
}
-#ifndef WIN32
+#if defined(HAVE_FORK) || defined(HAVE_VFORK)
static void
compress_savefile(const char *filename)
{
+# ifdef HAVE_FORK
if (fork())
+# else
+ if (vfork())
+# endif
return;
/*
* Set to lowest priority so that this doesn't disturb the capture
@@ -1435,15 +1556,20 @@ compress_savefile(const char *filename)
zflag,
filename,
strerror(errno));
+# ifdef HAVE_FORK
+ exit(1);
+# else
+ _exit(1);
+# endif
}
-#else /* WIN32 */
+#else /* HAVE_FORK && HAVE_VFORK */
static void
compress_savefile(const char *filename)
{
fprintf(stderr,
- "compress_savefile failed. Functionality not implemented under windows\n");
+ "compress_savefile failed. Functionality not implemented under your system\n");
}
-#endif /* WIN32 */
+#endif /* HAVE_FORK && HAVE_VFORK */
static void
dump_packet_and_trunc(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
@@ -1782,17 +1908,17 @@ usage(void)
#endif /* WIN32 */
#endif /* HAVE_PCAP_LIB_VERSION */
(void)fprintf(stderr,
-"Usage: %s [-aAbd" D_FLAG "ef" I_FLAG "KlLnNOpqRStu" U_FLAG "vxX]" B_FLAG_USAGE " [ -c count ]\n", program_name);
+"Usage: %s [-aAbd" D_FLAG "efhH" I_FLAG J_FLAG "KlLnNOpqRStu" U_FLAG "vxX]" B_FLAG_USAGE " [ -c count ]\n", program_name);
(void)fprintf(stderr,
"\t\t[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]\n");
(void)fprintf(stderr,
-"\t\t[ -i interface ] [ -M secret ] [ -r file ]\n");
+"\t\t[ -i interface ]" j_FLAG_USAGE " [ -M secret ]\n");
(void)fprintf(stderr,
-"\t\t[ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ]\n");
+"\t\t[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]\n");
(void)fprintf(stderr,
-"\t\t[ -y datalinktype ] [ -z command ] [ -Z user ]\n");
+"\t\t[ -W filecount ] [ -y datalinktype ] [ -z command ]\n");
(void)fprintf(stderr,
-"\t\t[ expression ]\n");
+"\t\t[ -Z user ] [ expression ]\n");
exit(1);
}
diff --git a/contrib/tcpdump/tests/02-sunrise-sunset-esp.puu b/contrib/tcpdump/tests/02-sunrise-sunset-esp.puu
deleted file mode 100644
index 0ceffc1c1c83..000000000000
--- a/contrib/tcpdump/tests/02-sunrise-sunset-esp.puu
+++ /dev/null
@@ -1,34 +0,0 @@
-begin 644 02-sunrise-sunset-esp.pcap
-MU,.RH0(`!``````````````&```!``````````````"6````E@```!```&1D
-M11```&1D(P@`10``B/]G``!`,O:5P`$"%\`!`BT2-%9X`````4P@12\\L)(1
-MTZ=(S>7($>.<3N@\_I:AY"K/TKAZJP719"NCKYP;PT(0+$"M%=]-X"`*8V.'
-M-'$1A]02"3N#OZI#&1R]A*1;`G8S@YFQ]<H7S))417Y9!E4:<$'CW)%VZ&_3
-M_]T`L+P1^!`PEP``````````E@```)8````0``!D9$40``!D9",(`$4``(C_
-M:```0#+VE,`!`A?``0(M$C16>`````(:<$'CW)%VZ',2KQMB@CN?'"^GJ<=:
-MD-0`+.V^J'2AK).'XQ_B"B8:[%A_+K[6KS2'XR[UN`,R"BJP?^].ZM#/[$)#
-M17^!D"8_[BZ>GU4Z*$7I"N$U*>J47?C-4;I>#`%6+#0%]D75YC']*Z\`````
-M`````)8```"6````$```9&1%$```9&0C"`!%``"(_VD``$`R]I/``0(7P`$"
-M+1(T5G@````#7?C-4;I>#`%@W%89?QJ#$TJ,4G\FO&HO=F+,,%1E(]);XI]T
-MV7W.RY$2=JZ1%!QCNX[;^.JD4W91;7)NJWV2MF4?7`=&_3OWW%V&6RIXKB75
-M#;2TWNL"A:MF!I@_5R^]L6;Z`L?E@1:T&71G``````````"6````E@```!``
-M`&1D11```&1D(P@`10``B/]J``!`,O:2P`$"%\`!`BT2-%9X````!*MF!I@_
-M5R^]%';9*Q:S_B]]O_8FV:2K1A!]/SQHI7>OS815*I?4%/:.=BBJUEGJ(X8\
-M<SZ>P1E/@&P\9MR)DP3[UCWI@,MR%A$\CR]=G(("[CFB7AUN$AENZOO&\:7%
-M2KLW<'NP,L(I=!;8=0``````````E@```)8````0``!D9$40``!D9",(`$4`
-M`(C_:P``0#+VD<`!`A?``0(M$C16>`````5NZOO&\:7%2J12,9;LOK"-S,=$
-MO0]X+J(OJQED#PLBRY[\^352UZK&57<R0L9JQ:KH6`)BUN$`5]1WU@"A!8TM
-MO^)<;`-SW;1HQO$CE\#`O[W[17GW[0G&M,^T?7>6,Z<:%73AWV3:;Y/:=@(`
-M`````````)8```"6````$```9&1%$```9&0C"`!%``"(_VP``$`R]I#``0(7
-MP`$"+1(T5G@````&M,^T?7>6,Z=>N_YZQFV[H1^6\!/I*IMAOHZE\E0M.Z!X
-M#[0EG3#>%]7`]*2F?@S4X2''TK09J@NG/.HEXCE./..K^'-@":X[\?0L+B`S
-MQA\HTK\'J]:S]N6O`]\)NQD)9;H2P\K`^NX37`R5``````````"6````E@``
-M`!```&1D11```&1D(P@`10``B/]M``!`,O:/P`$"%\`!`BT2-%9X````!^6O
-M`]\)NQD)>BYZ>`/DA=N;A2...3-7FZOK?:5KGXBN`/E?$\[-11-$G#E;(>N"
-M+<$/YP'SM$>16LU18&Q]9)$]0)/M]:2Z#A6]-,SM*>FI/`X*K-*-:KS3IW<"
-MO(>(P(K=:X::SJ;O[J>0K```````````E@```)8````0``!D9$40``!D9",(
-M`$4``(C_;@``0#+VCL`!`A?``0(M$C16>`````C3IW<"O(>(P'-43;C[`MCD
-M`BMZAX]F!?'Z$8Q"5HYMVDC9"8I^O(Z4!/)`/IVD-(ZK)_52-H2XK+,(-LR)
-MM)K#XLF">KY0>C?\[MA%3F%$?ORJ@:>O]5H>?-$OQH)J<ZFOW_+K%G=UG0"[
-"G'T`
-`
-end
diff --git a/contrib/tcpdump/tests/08-sunrise-sunset-aes.puu b/contrib/tcpdump/tests/08-sunrise-sunset-aes.puu
deleted file mode 100644
index ec8793d02238..000000000000
--- a/contrib/tcpdump/tests/08-sunrise-sunset-aes.puu
+++ /dev/null
@@ -1,36 +0,0 @@
-begin 644 08-sunrise-sunset-aes.pcap
-MU,.RH0(`!``````````````&```!``````````````"F````I@```!```&1D
-M11```&1D(P@`10``F/SJ``!`,OD"P`$"%\`!`BW1(T5G`````>:['.C0J(%P
-MVF'>(TU6&*"9A,`,/KS\:>DH>O_L(51)_[YY"L<H#LJ/;(BQ)=[*$<APY/A1
-M-"T@(`_Q&)S!C)$*7S?G3Q4H\F=)OYF+P@S&11%^*]S)N@L*TZ@!:&&:QFZT
-ML'#7<>9?8'?J4V:_.]B+6UR\T>39D+=NA;$``````````*8```"F````$```
-M9&1%$```9&0C"`!%``"8_.L``$`R^0'``0(7P`$"+=$C16<````";K2P<-=Q
-MYE]@=^I39K\[V$1HDU9'L,6BVK.^B4]E6QY&:?3?T)G?"RSU;X!J]]7S)<`,
-M*L!SYO^RUWR?!EIJMWU=5B406YL-I`]LK`^;-3%(NEY#R`ST=W40=:*[M$*8
-M#<KX)19@.`.4_5YD^:V;G@3>`GLTK(5ZCS"BC@``````````I@```*8````0
-M``!D9$40``!D9",(`$4``)C\[```0#+Y`,`!`A?``0(MT2-%9P````,-RO@E
-M%F`X`Y3]7F3YK9N>=6-;U&'6">_4H80DMY^Z9E3ZL3[ONN*L<"Z@7(VO]XT^
-M/2JP<(/^8NTO-4\/B5AJEC4N;,\"7-&(;9AM_2G5A1C.[LBK3')P?AE;$I[)
-M!8N&RC?OTD7<V)AIU4,*E>7ELURFXRD/JD(:@RER``````````"F````I@``
-M`!```&1D11```&1D(P@`10``F/SM``!`,OC_P`$"%\`!`BW1(T5G````!(;*
-M-^_21=S8F&G50PJ5Y>5K%@R;)A(E<5YD'@86@GT"-&&MHP*.A=?%=:FDZH=4
-M*9":>]'G'CB4%2?PJ"2^H*51\8P!9T`X3#;F+H$[<GW7=?K.R30-'6'L3AO8
-MR=:M3S$GIZ>4Z$7ZL0<\S=S\%`:BW9U2'@U^@D,,:.P``````````*8```"F
-M````$```9&1%$```9&0C"`!%``"8_.X``$`R^/[``0(7P`$"+=$C16<````%
-M,2>GIY3H1?JQ!SS-W/P4!BW&*&A[$!XGK<^M^>_X193"G"1QTWG>Q"CO25$"
-MPM+1+8[6&(17\EE\P:6-WVPT=911?@'-Z,,/UVZ2!QV(X4513U9]P62CJMS>
-M^ODBGHU=%T.H2&Z<4,8(!4,2[&A4^H="L:+`=4G?*(7,2@``````````I@``
-M`*8````0``!D9$40``!D9",(`$4``)C\[P``0#+X_<`!`A?``0(MT2-%9P``
-M``870ZA(;IQ0Q@@%0Q+L:%3Z@*HQPZA]3STWDY#CYJGOJH)K<KVT9G61>>I'
-MEHMF"X!^G,H@,YWT7^=60.3/$7?AYH)G9GBD%%#,D]!EDA]B*?UE>U96+"5\
-MK=""/.LO'__^;$N<E@!.2&3^@U:P__8_'D^YC!41E,!@!6<K``````````"F
-M````I@```!```&1D11```&1D(P@`10``F/SP``!`,OC\P`$"%\`!`BW1(T5G
-M````!_YL2YR6`$Y(9/Z#5K#_]C_ZJU%7M?L23>I`L#D]@&G?Z7B2O#GI?NDK
-MF[7JPN,8V\H>%G+)'+%+FL*&\8+H2^KFWF5YQ:$4V!,1?G;=OYD;!,3YD'V(
-MW[Y!I(U=X9[\:L)(5GBJ,B!-5N$.CGV$VLD^R?Z,KL[AMI(ZC-P`````````
-M`*8```"F````$```9&1%$```9&0C"`!%``"8_/$``$`R^/O``0(7P`$"+=$C
-M16<````(PDA6>*HR($U6X0Z.?83:R;Y0<E/4SN)UX;Q:D$D%K(DZZ:^_\K$'
-MZQ81NT4KBGD#Z=_^`E^!HS*KHEJ!)!KE>&'2065/"*M'ELXD?1%3\L3TC.UK
-HKWB(C5O@78>9LQ^<0Z6]F=:<;@[>L^;/\-6WB81[GX)<MS0B=>LGD@``
-`
-end
diff --git a/contrib/tcpdump/tests/08-sunrise-sunset-esp2.puu b/contrib/tcpdump/tests/08-sunrise-sunset-esp2.puu
deleted file mode 100644
index 4785f2b808c9..000000000000
--- a/contrib/tcpdump/tests/08-sunrise-sunset-esp2.puu
+++ /dev/null
@@ -1,43 +0,0 @@
-begin 644 08-sunrise-sunset-esp2.pcap
-MU,.RH0(`!``````````````&```!``````````````#.````S@```!```&1D
-M11```&1D(P@`10``P"E-``!`,LQXP`$"%\`!`BT2-%9X`````4=!+\5+F8`+
-M[[NOU-#98*AO5\780X[VDXF@2W8<10:J!'!Z!-[7N4CFNRKIH;PUA1SL"Y9\
-M-?_3N_,W/@*T+C/"]=S[`;D!/;`SR5,3+><9K.^\9N><18TY9Z\!I\S./L8R
-MFE53,S6Y5X_Z\(T)ZIUS?X$8>&(_MT1"!SV:VPP!\XU$[3S-5L)4-O"&>]`Z
-M1:./61=%C6`6U1/65"A&KUE902]*``````````#.````S@```!```&1D11``
-M`&1D(P@`10``P"E/``!`,LQVP`$"%\`!`BT2-%9X`````CIU^SX%;G^!GUSP
-MSA<?/8FY?L/'^2]6'&3[\-NES3E]33Z$Q]#7D9$8TFS5);?S?)ZJOP4;ZD-M
-M+0_/@#*U=7A9;FYR*5&/^V%MSFEM`DAZY,8'<0.9M^'::<M+M2G0LG6*S/[3
-M?T`IIJUJ[GW,L+&PH<AR&K(]^=[K7IMGD[`8[ONL8LD3AM`N@$S!*?=;*8=>
-ML7P6FM81),N>T/1Z'"P7H5;```````````#.````S@```!```&1D11```&1D
-M(P@`10``P"E1``!`,LQTP`$"%\`!`BT2-%9X`````R4)-P&F>HPK/?_$MTFC
-M^TOO=/L#W_APTK6MIH_BC*I7\L<,9(?/0M"HK3[T3F;(Y2V70$P5?D'7GFIB
-MJZ/C",S/BD!9N8GV"\.;GVME[P!@!B1"DT=1W0_75FMI23H!T2^C);4GY>`I
-M-2T^O_0_WU&$)&+/P)%[TQUQ-T7G%\RXYJT0HO</^*)F`^2<W8KTY.W<FK4K
-M8UC+J'.*X)NH%<UTK+K+``````````#.````S@```!```&1D11```&1D(P@`
-M10``P"E3``!`,LQRP`$"%\`!`BT2-%9X````!)`9]]SHKI[EGW4M?W8>[$=<
-M`@@TL1#(Y980]E*/!^2@G`*&S9O^QMS1S?/`TL=5F9B(12?(145>Y2I+;+T?
-MKWUD@&.7U36]K-$[.%9CB*FK^E8>N:K/)4#$]ZO/:=#;MRH-)_139\,W6M4T
-M7SQ?BBX&GT,+A3#BB5^O=>+GKIC-4]5VBP)D-S<X2O)H[_/#M*T+&$\7PL.M
-M>7-)\W&;<@_J@,*!``````````#.````S@```!```&1D11```&1D(P@`10``
-MP"E5``!`,LQPP`$"%\`!`BT2-%9X````!0OIFA;,@2C4HF3>5!-C(0>5LR0"
-M='1\OQ.!-?@D(U0!453"<Q/!\*CDK.&OU'+WE:^7J8"AMS<@UYX*,<(&YA2Q
-MGQ(.3+0\#`!+`.TE,;\3:.<+F:?=T@.KOBL%VAAX9_RY$/^%$C+I*4&S<AM]
-MP*]SZ"RD'G.AJH76?SV&2HQLF+!J/QZ;.:<LB::-]+AE1+&);M^]`XZ-W2CX
-M+&CPZINP*9?>``````````#.````S@```!```&1D11```&1D(P@`10``P"E7
-M``!`,LQNP`$"%\`!`BT2-%9X````!I0M"-THEF=+!L=>A3N,\1+"'Z7(J?O0
-M.B?)(#X=/5F-.">%3.X'(=JKK:W<MZF2^8#73C[US$-O&ZZ+L:94R9E2#=J=
-M18HP?AN`5^)A+HW6EB*5P=AZ(S"\TIBZ'\.=]4A,#18'0/R_#C:4XX_?>ZMN
-M=B+^Q3"(KE\1299]=5E,'.&U(`H9N)+>9FS/`CA*>D^>AV.-C(S\)BM&)*XM
-M^BF__^<_``````````#.````S@```!```&1D11```&1D(P@`10``P"E9``!`
-M,LQLP`$"%\`!`BT2-%9X````!R"SQ'[6%(;Q>>O+]CS6D*+AD3IMC\^MMK8[
-M:T3)KM06!G^.H\>%UAT@)X6JL9\3V.HR"+_Q^_T-O$Y_S":_TP;V,LIV1O]H
-M-G@DOL'V-5)O@%<%!#O$2V,AS@W7(&$IX.YKK]\K#>FITU)<>O42T2GKFW+^
-M\/[,>E4P[Q"+7O,Y1(R22LND[H+469(%3,SN&3:U:/I`'&R@<`<TR"-4:&8+
-MQ5SX``````````#.````S@```!```&1D11```&1D(P@`10``P"E;``!`,LQJ
-MP`$"%\`!`BT2-%9X````"*',]A6A,Q(*B+]=&6X&T*L^\)Z6N%,G)(.;6X-K
-MM@&4<FRJ]#IJ%Y'-^T+4[&;0;_%7HM85LR8W(>HKGOV,^#L9,QF%)W^9!VFM
-MXG'XY]CWI5VF33?7,*P?6:.PS'&[\N$7W<*==+;P*$./4*OH&=O,6G!JIN>I
-M'ZDP*D&4K>SK-\/!7\Z&<&5J4%NU?NRM&25'*_"'UE3VH&?U]/V@932UYZT\
-`
-end
diff --git a/contrib/tcpdump/tests/TESTLIST b/contrib/tcpdump/tests/TESTLIST
deleted file mode 100644
index bbc19b62b0f4..000000000000
--- a/contrib/tcpdump/tests/TESTLIST
+++ /dev/null
@@ -1,51 +0,0 @@
-# BGP test
-bgp_vpn_attrset bgp_vpn_attrset.pcap bgp_vpn_attrset.out -t -v
-
-# EAP tests
-eapon1 eapon1.pcap eapon1.out -t
-
-# ESP tests
-esp0 02-sunrise-sunset-esp.pcap esp0.out -t
-esp1 02-sunrise-sunset-esp.pcap esp1.out -t -E "0x12345678@192.1.2.45 3des-cbc-hmac96:0x4043434545464649494a4a4c4c4f4f515152525454575758"
-esp2 08-sunrise-sunset-esp2.pcap esp2.out -t -E "0x12345678@192.1.2.45 3des-cbc-hmac96:0x43434545464649494a4a4c4c4f4f51515252545457575840,0xabcdabcd@192.0.1.1 3des-cbc-hmac96:0x434545464649494a4a4c4c4f4f5151525254545757584043"
-esp3 02-sunrise-sunset-esp.pcap esp1.out -t -E "3des-cbc-hmac96:0x4043434545464649494a4a4c4c4f4f515152525454575758"
-esp4 08-sunrise-sunset-esp2.pcap esp2.out -t -E "file esp-secrets.txt"
-esp5 08-sunrise-sunset-aes.pcap esp5.out -t -E "file esp-secrets.txt"
-espudp1 espudp1.pcap espudp1.out -t -E "file esp-secrets.txt"
-
-# ISAKMP tests
-isakmp1 isakmp-delete-segfault.pcap isakmp1.out -t
-isakmp2 isakmp-pointer-loop.pcap isakmp2.out -t
-isakmp3 isakmp-identification-segfault.pcap isakmp3.out -t -v
-isakmp4 isakmp4500.pcap isakmp4.out -t -E "file esp-secrets.txt"
-
-# LMP tests (what is it?)
-# fails right now.
-#lmp lmp.pcap lmp.out -t -v -v
-
-# MPLS tests
-mpls-ldp-hello mpls-ldp-hello.pcap mpls-ldp-hello.out -t -v
-
-# OSPF tests
-ospf-gmpls ospf-gmpls.pcap ospf-gmpls.out -t -v
-
-# IKEv2 tests
-ikev2four ikev2four.pcap ikev2four.out -t -v
-ikev2fourv ikev2four.pcap ikev2fourv.out -t -v -v -v
-ikev2fourv4 ikev2four.pcap ikev2fourv4.out -t -v -v -v -v
-ikev2pI2 ikev2pI2.pcap ikev2pI2.out -t -E "file ikev2pI2-secrets.txt" -v -v -v -v
-
-# IETF ROLL RPL packets
-dio01 dio.pcap dio.out -t -v
-
-# IPNET encapsulated site
-e1000g e1000g.pcap e1000g.out -t
-
-# IETF FORCES WG packets and printer
-forces01 forces1.pcap forces1.out -t
-forces02 forces2.pcap forces2.out -t
-forces02v forces2.pcap forces2v.out -t -v
-forces02vv forces2.pcap forces2vv.out -t -v -v
-forces01vvv forces1.pcap forces1vvv.out -t -v -v -v
-forces01vvvv forces1.pcap forces1vvvv.out -t -v -v -v -v
-
diff --git a/contrib/tcpdump/tests/TESTonce b/contrib/tcpdump/tests/TESTonce
deleted file mode 100755
index 40d544b04f44..000000000000
--- a/contrib/tcpdump/tests/TESTonce
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/perl
-
-system("mkdir -p NEW DIFF");
-
-if(@ARGV == 1) {
- open(TESTLIST, "TESTLIST") || die "can not open TESTLIST: $!\n";
- $wanted = $ARGV[0];
- #print "Searching for test case $wanted\n";
- while(<TESTLIST>) {
- #print "Processing $_\n";
- next unless (/^$wanted/);
-
- chop;
- ($name,$input,$output,$options)=split(/\s+/,$_, 4);
- last;
- }
- close(TESTLIST);
-
- die "Can not find test $wanted\n" unless defined($input);
-
-} elsif(@ARGV == 4) {
- $name=$ARGV[0];
- $input=$ARGV[1];
- $output=$ARGV[2];
- $options=$ARGV[3];
-} else {
- print "Usage: TESTonce name [input output options]\n";
- exit 20;
-}
-
-print "Running $name. \n";
-print " Input: $input, OUTPUT: $output, OPTIONS: $options\n";
-
-if (! -f $input) {
- ($puu = $input) =~ s/\.pcap/\.puu/;
- if( -f $puu) {
- print "Uudecoding $puu to make $input\n";
- system("uudecode $puu");
- }
-}
-
-print " ";
-exec("../tcpdump -n -r $input $options | tee NEW/$output | diff -w - $output >DIFF/$output.diff");
-@cores = glob("core*");
-exit 10 if (@cores > 0);
-exit 0;
diff --git a/contrib/tcpdump/tests/TESTrun.sh b/contrib/tcpdump/tests/TESTrun.sh
deleted file mode 100755
index 656974dd7c7f..000000000000
--- a/contrib/tcpdump/tests/TESTrun.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh
-
-mkdir -p NEW
-mkdir -p DIFF
-passed=0
-failed=0
-
-# first run any specific tests.
-for i in *.sh
-do
- case $i in TEST*.sh) continue;; esac
-
- if sh ./$i >DIFF/$i.result
- then
- echo $i: passed.
- rm -f DIFF/$i.result
- passed=$(($passed + 1))
- else
- echo $i: failed.
- failed=$(($failed + 1))
- fi
-done
-
-echo $passed >.passed
-echo $failed >.failed
-
-# now run typical tests
-cat TESTLIST | while read name input output options
-do
- case $name in
- \#*) continue;;
- '') continue;;
- esac
-
- if ./TESTonce $name $input $output "$options"
- then
- echo $name: passed.
- rm -f DIFF/$output.diff
- passed=$(($passed + 1))
- echo $passed >.passed
- else
- echo $name: failed.
- failed=$(($failed + 1))
- echo $failed >.failed
- fi
-done
-
-# I hate shells with their stupid, useless subshells.
-passed=`cat .passed`
-failed=`cat .failed`
-
-# exit with number of failing tests.
-echo
-echo
-printf "%4u tests failed\n" $failed
-printf "%4u tests passed\n" $passed
-echo
-echo
-exit $failed
-
-
-
-
diff --git a/contrib/tcpdump/tests/bgp-infinite-loop.pcap b/contrib/tcpdump/tests/bgp-infinite-loop.pcap
deleted file mode 100644
index 9f07d4122826..000000000000
--- a/contrib/tcpdump/tests/bgp-infinite-loop.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/bgp_vpn_attrset.out b/contrib/tcpdump/tests/bgp_vpn_attrset.out
deleted file mode 100644
index a0a9f1c097b9..000000000000
--- a/contrib/tcpdump/tests/bgp_vpn_attrset.out
+++ /dev/null
@@ -1,19 +0,0 @@
-IP (tos 0xc0, ttl 62, id 58628, offset 0, flags [none], proto TCP (6), length 173)
- 12.4.4.4.2051 > 12.1.1.1.179: Flags [P.], cksum 0xcf18 (correct), seq 3293077573:3293077694, ack 3348108582, win 16384, options [nop,nop,TS val 383131 ecr 890299], length 121: BGP, length: 121
- Update Message (2), length: 121
- Origin (1), length: 1, Flags [T]: IGP
- AS Path (2), length: 0, Flags [T]: empty
- Local Preference (5), length: 4, Flags [T]: 100
- Extended Community (16), length: 8, Flags [OT]:
- target (0x0002), Flags [none]: 300:300 (= 0.0.1.44)
- Attribute Set (128), length: 36, Flags [OT]:
- Origin AS: 65001
- Origin (1), length: 1, Flags [T]: IGP
- AS Path (2), length: 4, Flags [T]: 5555
- Local Preference (5), length: 4, Flags [T]: 44
- Originator ID (9), length: 4, Flags [O]: 22.5.5.5
- Cluster List (10), length: 4, Flags [O]: 22.5.5.5
- Multi-Protocol Reach NLRI (14), length: 30, Flags [OE]:
- AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
- nexthop: RD: 0:0 (= 0.0.0.0), 12.4.4.4, nh-length: 12, no SNPA
- RD: 500:500 (= 0.0.1.244), 133.0.0.0/8, label:100208 (bottom)
diff --git a/contrib/tcpdump/tests/bgp_vpn_attrset.pcap b/contrib/tcpdump/tests/bgp_vpn_attrset.pcap
deleted file mode 100644
index e60aff5c838b..000000000000
--- a/contrib/tcpdump/tests/bgp_vpn_attrset.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/chdlc-slarp-short.pcap b/contrib/tcpdump/tests/chdlc-slarp-short.pcap
deleted file mode 100644
index 41313dcca9bf..000000000000
--- a/contrib/tcpdump/tests/chdlc-slarp-short.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/chdlc-slarp.pcap b/contrib/tcpdump/tests/chdlc-slarp.pcap
deleted file mode 100644
index 1521443a8f15..000000000000
--- a/contrib/tcpdump/tests/chdlc-slarp.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/dio.out b/contrib/tcpdump/tests/dio.out
deleted file mode 100644
index fd0846af77aa..000000000000
--- a/contrib/tcpdump/tests/dio.out
+++ /dev/null
@@ -1 +0,0 @@
-IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) fe80::1000:ff:fe64:6423 > ff02::1: [icmp6 sum ok] ICMP6, RPL, length 24, DAG Information Object [seq:10,instance:42,rank:1,dagid:thisismynicedag1]
diff --git a/contrib/tcpdump/tests/dio.pcap b/contrib/tcpdump/tests/dio.pcap
deleted file mode 100644
index 81706352a563..000000000000
--- a/contrib/tcpdump/tests/dio.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/e1000g.out b/contrib/tcpdump/tests/e1000g.out
deleted file mode 100644
index 0cc3b9e1003e..000000000000
--- a/contrib/tcpdump/tests/e1000g.out
+++ /dev/null
@@ -1,20 +0,0 @@
-IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 0, length 64
-IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 0, length 64
-IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 1, length 64
-IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 1, length 64
-IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 2, length 64
-IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 2, length 64
-IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 3, length 64
-IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 3, length 64
-IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 4, length 64
-IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 4, length 64
-IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 5, length 64
-IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 5, length 64
-IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 6, length 64
-IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 6, length 64
-IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 7, length 64
-IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 7, length 64
-IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 8, length 64
-IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 8, length 64
-IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 9, length 64
-IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 9, length 64
diff --git a/contrib/tcpdump/tests/e1000g.pcap b/contrib/tcpdump/tests/e1000g.pcap
deleted file mode 100644
index 11b0174504a3..000000000000
--- a/contrib/tcpdump/tests/e1000g.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/eapon1.gdbinit b/contrib/tcpdump/tests/eapon1.gdbinit
deleted file mode 100644
index 37ad0bcd029e..000000000000
--- a/contrib/tcpdump/tests/eapon1.gdbinit
+++ /dev/null
@@ -1 +0,0 @@
-set args -r eapon1.pcap
diff --git a/contrib/tcpdump/tests/eapon1.out b/contrib/tcpdump/tests/eapon1.out
deleted file mode 100644
index 69f7537c09c9..000000000000
--- a/contrib/tcpdump/tests/eapon1.out
+++ /dev/null
@@ -1,114 +0,0 @@
-IP 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
-IP 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
-IP 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
-IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
-IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-ARP, Request who-has 192.168.1.1 tell 192.168.1.249, length 28
-ARP, Reply 192.168.1.1 is-at 00:0d:88:4f:25:91, length 46
-IP 192.168.1.249.68 > 192.168.1.1.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
-EAP packet (0) v1, len 5
-IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
-IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
-EAPOL start (1) v1, len 0
-EAP packet (0) v1, len 5
-EAP packet (0) v1, len 45
-EAP packet (0) v1, len 20
-EAP packet (0) v1, len 76
-EAP packet (0) v1, len 80
-EAP packet (0) v1, len 28
-EAP packet (0) v1, len 4
-EAPOL key (3) v1, len 57
-EAPOL key (3) v1, len 44
-IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
-IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
-IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
-EAPOL start (1) v1, len 0
-EAP packet (0) v1, len 5
-EAP packet (0) v1, len 45
-EAP packet (0) v1, len 20
-EAP packet (0) v1, len 76
-EAP packet (0) v1, len 80
-EAP packet (0) v1, len 28
-EAP packet (0) v1, len 4
-EAPOL key (3) v1, len 57
-EAPOL key (3) v1, len 44
-ARP, Request who-has 169.254.67.194 tell 169.254.67.194, length 28
-ARP, Request who-has 169.254.67.194 tell 169.254.67.194, length 28
-ARP, Request who-has 169.254.67.194 tell 169.254.67.194, length 28
-IP 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
-IP 169.254.67.194 > 224.0.0.22: igmp v3 report, 1 group record(s)
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194 > 224.0.0.22: igmp v3 report, 1 group record(s)
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-EAPOL start (1) v1, len 0
-EAP packet (0) v1, len 5
-EAP packet (0) v1, len 45
-EAP packet (0) v1, len 20
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-EAP packet (0) v1, len 76
-EAP packet (0) v1, len 80
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-EAP packet (0) v1, len 28
-EAP packet (0) v1, len 4
-EAPOL key (3) v1, len 57
-EAPOL key (3) v1, len 44
-IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
-IP 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
-IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
-EAPOL start (1) v1, len 0
-EAP packet (0) v1, len 5
-EAP packet (0) v1, len 45
-EAP packet (0) v1, len 20
-IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
-EAP packet (0) v1, len 76
-EAP packet (0) v1, len 80
-EAP packet (0) v1, len 28
-EAP packet (0) v1, len 4
-EAPOL key (3) v1, len 57
-EAPOL key (3) v1, len 44
diff --git a/contrib/tcpdump/tests/eapon1.puu b/contrib/tcpdump/tests/eapon1.puu
deleted file mode 100644
index 25c14367780a..000000000000
--- a/contrib/tcpdump/tests/eapon1.puu
+++ /dev/null
@@ -1,368 +0,0 @@
-begin 644 eapon1.pcap
-MU,.RH0(`!````````````/__```!````"%5@0)*@#@#=````W0```/______
-M_P`$(U>E>@@`10``SSB'``"`$7Q.P*@!^<"H`?\`B@"*`+M3[!$.B1W`J`'Y
-M`(H`I0``($5%14M&041*1$9&1$1!14M#04-!0T%#04-!0T%#04%!`"!%0D9#
-M14-%1D5*1D5&1$5(1D-&1D9!1D%%1D-!0T%!00#_4TU")0``````````````
-M`````````````````````!$```L```````````#H`P``````````"P!6``,`
-M`0`!``(`'`!<34%)3%-,3U1<0E)/5U-%``(`1$I0.353,$H`"%5@0/2@#@#=
-M````W0```/_______P`$(U>E>@@`10``SSB(``"`$7Q-P*@!^<"H`?\`B@"*
-M`+L,\A$.B1[`J`'Y`(H`I0``($5%14M&041*1$9&1$1!14M#04-!0T%#04-!
-M0T%#04%!`"!!0D%#1E!&4$5.1D1%0T9#15!&2$9$149&4$9004-!0@#_4TU"
-M)0```````````````````````````````````!$```L```````````#H`P``
-M````````"P!6``,``0`!``(`'`!<34%)3%-,3U1<0E)/5U-%``(`1$I0.353
-M,$H`"%5@0("C#@#[````^P```/_______P`$(U>E>@@`10``[3B)``"`$7PN
-MP*@!^<"H`?\`B@"*`-E#WA$.B1_`J`'Y`(H`PP``($5%14M&041*1$9&1$1!
-M14M#04-!0T%#04-!0T%#04%!`"!!0D%#1E!&4$5.1D1%0T9#15!&2$9$149&
-M4$9004-!0@#_4TU")0```````````````````````````````````!$``"D`
-M``````````#H`P``````````*0!6``,``0`!``(`.@!<34%)3%-,3U1<0E)/
-M5U-%``P`8.H``$%20D5)5%-'4E504$4``0`#"@`0`(!,_@0#1$I0.353,$H`
-M"%5@0/JI#@!<````7````/_______P`$(U>E>@@`10``3CB*``"`$7S,P*@!
-M^<"H`?\`B0")`#J"=XDA`1```0```````"!%0D9#14-%1D5*1D5&1$5(1D-&
-M1D9!1D%%1D-!0T%"3```(``!"55@0//8"@!<````7````/_______P`$(U>E
-M>@@`10``3CB-``"`$7S)P*@!^<"H`?\`B0")`#J"=XDA`1```0```````"!%
-M0D9#14-%1D5*1D5&1$5(1D-&1D9!1D%%1D-!0T%"3```(``!"E5@0+,)!P!<
-M````7````/_______P`$(U>E>@@`10``3CB.``"`$7S(P*@!^<"H`?\`B0")
-M`#J"=XDA`1```0```````"!%0D9#14-%1D5*1D5&1$5(1D-&1D9!1D%%1D-!
-M0T%"3```(``!"E5@0,@N#`#S````\P```/_______P`$(U>E>@@`10``Y3B/
-M``"`$7PPP*@!^<"H`?\`B@"*`-'GIA$.B2+`J`'Y`(H`NP``($5%14M&041*
-M1$9&1$1!14M#04-!0T%#04-!0T%#04-!`"!%0D9#14-%1D5*1D5&1$5(1D-&
-M1D9!1D%%1D-!0T%"3P#_4TU")0``````````````````````````````````
-M`!$``"$```````````#H`P``````````(0!6``,``0````(`,@!<34%)3%-,
-M3U1<0E)/5U-%``\`@/P*`$1*4#DU4S!*``!R`&\`<P`%`0,0!0`/`56J``U5
-M8$!5%0<`7````%P```#_______\`!"-7I7H(`$4``$XXE```@!%\PL"H`?G`
-MJ`'_`(D`B0`Z@G")*`$0``$````````@14)&0T5#149%2D9%1D1%2$9#1D9&
-M049!149#04-!0DP``"```0Y58$`>10,`7````%P```#_______\`!"-7I7H(
-M`$4``$XXE0``@!%\P<"H`?G`J`'_`(D`B0`Z@G")*`$0``$````````@14)&
-M0T5#149%2D9%1D1%2$9#1D9&049!149#04-!0DP``"```0Y58$!0N`X`7```
-M`%P```#_______\`!"-7I7H(`$4``$XXE@``@!%\P,"H`?G`J`'_`(D`B0`Z
-M@G")*`$0``$````````@14)&0T5#149%2D9%1D1%2$9#1D9&049!149#04-!
-M0DP``"```0]58$#*.`<`*@```"H```#_______\`!"-7I7H(!@`!"``&!``!
-M``0C5Z5ZP*@!^0```````,"H`0$/56!`%UD'`#P````\``````0C5Z5Z``V(
-M3R61"`8``0@`!@0``@`-B$\ED<"H`0$`!"-7I7K`J`'Y````````````````
-M````````#U5@0"E9!P!6`0``5@$````-B$\ED0`$(U>E>@@`10`!2#B7``"`
-M$7S#P*@!^<"H`0$`1`!#`31YVP$!!@#(+24]CP&``,"H`?D`````````````
-M````!"-7I7H`````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````8X)38S4!!S8$P*@!`3T'
-M`0`$(U>E>O\`````````````````````````````````````````````````
-M``````]58$`6@0D`/````#P`````!"-7I7H`#,Z(,9J(C@$```4!`0`%`0``
-M```````````````````````````````````````````````/56!`"BL*`%8!
-M``!6`0``________``0C5Z5Z"`!%``%(.)\``(`1`0<`````_____P!$`$,!
-M-,&K`0$&`)@7ASP````````````````````````````$(U>E>@``````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M``````````````````!C@E-C-0$!=`$!/0<!``0C5Z5Z,@3`J`'Y#`A$2E`Y
-M-5,P2CP(35-&5"`U+C`W"P$/`P8L+B\?(?DK_P``````#U5@0![^#`!6`0``
-M5@$``/_______P`$(U>E>@@`10`!2#BA``"`$0$%`````/____\`1`!#`32.
-MS0$!!@#5`WTN````````````````````````````!"-7I7H`````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````8X)38S4!`70!`3T'`0`$(U>E>C($P*@!^0P(1$I0.353
-M,$H\"$U31E0@-2XP-PL!#P,&+"XO'R'Y*_\``````!!58$"$8P(`$P```!,`
-M````#,Z(,9H`!"-7I7J(C@$!````$%5@0.IK`@`\````/``````$(U>E>@`,
-MSH@QFHB.`0``!0$"``4!````````````````````````````````````````
-M`````````!%58$!>L`L`/P```#\`````#,Z(,9H`!"-7I7J(C@$``"T"`@`M
-M`3$R.34P,C,X,C`P,#4S.3%`;6YC,#(S+FUC8S(Y-2YO=VQA;BYO<F<156!`
-M81`,`#P````\``````0C5Z5Z``S.B#&:B(X!```4`1``%!(*```/`@`"``$`
-M`!$!`0``````````````````````````````$55@0,VL#`!>````7@`````,
-MSH@QF@`$(U>E>HB.`0``3`(0`$P2"@``#@L`*#$R.34P,C,X,C`P,#4S.3%`
-M;6YC,#(S+FUC8S(Y-2YO=VQA;BYO<F<'!0``XM+Y<LO)&X'VQ\&EG)_*XA`!
-M``$156!`P?(,`&(```!B``````0C5Z5Z``S.B#&:B(X!``!0`1$`4!(+```!
-M#0``,````````````````````#$````````````````````R````````````
-M````````"P4``.OTCH!BE[/.*TUX]HB,9O8256!`LQD*`"X````N``````S.
-MB#&:``0C5Z5ZB(X!```<`A$`'!(+```+!0``#*NYLZ2O7U"%636?B,5I[A)5
-M8$`H=0H`/````#P`````!"-7I7H`#,Z(,9J(C@$```0#```$````````````
-M```````````````````````````````````````256!`%GD*`$L```!+````
-M``0C5Z5Z``S.B#&:B(X!`P`Y`0`-``!`8%41`)MJNAB%#R>L.*X:RH)3A8\F
-M`ET1,5U'QWV%1Z`@V,N=24.:\=%3TKI<SV/#HB:X$E5@0$Y\"@`^````/@``
-M```$(U>E>@`,SH@QFHB.`0,`+`$`#0``0&!5$0"<E?@]+KE3IY6RR"$-=DAO
-M3H-QX7H>=&X[D=]]>4;W^,JD$U5@0*@!#0!6`0``5@$``/_______P`$(U>E
-M>@@`10`!2#BG``"`$0#_`````/____\`1`!#`30ES`$!!@#5`WTN:0$`````
-M````````````````````!"-7I7H`````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````8X)3
-M8S4!`70!`3T'`0`$(U>E>C($P*@!^0P(1$I0.353,$H\"$U31E0@-2XP-PL!
-M#P,&+"XO'R'Y*_\``````!I58$#O`@T`5@$``%8!``#_______\`!"-7I7H(
-M`$4``4@XKP``@!$`]P````#_____`$0`0P$T)<P!`08`U0-]+FD!````````
-M``````````````````0C5Z5Z````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M`````````````````````````````````````````````````````&."4V,U
-M`0%T`0$]!P$`!"-7I7HR!,"H`?D,"$1*4#DU4S!*/`A-4T94(#4N,#<+`0\#
-M!BPN+Q\A^2O_```````J56!`^P(-`%8!``!6`0``________``0C5Z5Z"`!%
-M``%(.+(``(`1`/0`````_____P!$`$,!-"7,`0$&`-4#?2YI`0``````````
-M```````````````$(U>E>@``````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M``````````````````````````````````````````````````!C@E-C-0$!
-M=`$!/0<!``0C5Z5Z,@3`J`'Y#`A$2E`Y-5,P2CP(35-&5"`U+C`W"P$/`P8L
-M+B\?(?DK_P``````,%5@0.B$"@`3````$P`````,SH@QF@`$(U>E>HB.`0$`
-M```P56!`^J$*`#P````\``````0C5Z5Z``S.B#&:B(X!```%`0,`!0$`````
-M````````````````````````````````````````````,%5@0)SA"@`_````
-M/P`````,SH@QF@`$(U>E>HB.`0``+0(#`"T!,3(Y-3`R,S@R,#`P-3,Y,4!M
-M;F,P,C,N;6-C,CDU+F]W;&%N+F]R9S!58$#0!`P`/````#P`````!"-7I7H`
-M#,Z(,9J(C@$``!0!+P`4$@H```\"``(``0``$0$!````````````````````
-M```````````R56!`-$(%`%X```!>``````S.B#&:``0C5Z5ZB(X!``!,`B\`
-M3!(*```."P`H,3(Y-3`R,S@R,#`P-3,Y,4!M;F,P,C,N;6-C,CDU+F]W;&%N
-M+F]R9P<%``#7H!![\\SE,P[&']$W6C<%$`$``3)58$#,.`<`8@```&(`````
-M!"-7I7H`#,Z(,9J(C@$``%`!,`!0$@L```$-```P````````````````````
-M,0```````````````````#(````````````````````+!0``0WL?0G!%;49D
-M0(DL@MD'#C-58$!S4P(`+@```"X`````#,Z(,9H`!"-7I7J(C@$``!P",``<
-M$@L```L%``!%[_\P8H+&6U!$B#@$)T-",U5@0"'6`P`\````/``````$(U>E
-M>@`,SH@QFHB.`0``!`,```0`````````````````````````````````````
-M`````````````#-58$!=V@,`2P```$L`````!"-7I7H`#,Z(,9J(C@$#`#D!
-M``T``$!@53$`G7]!<++?0.3Y>#A83O[YHHT"0T@&N\)FL/6P9NHATX%<E?[@
-M45S@"_@>BIRI%B`S56!`F-T#`#X````^``````0C5Z5Z``S.B#&:B(X!`P`L
-M`0`-``!`8%4Q`)[N$`!R;$K*.XLG`JO9N"A#@XK>5*[_:U"C]E[O?""IR!5+
-M56!`]Q(-`"H````J````________``0C5Z5Z"`8``0@`!@0``0`$(U>E>JG^
-M0\(```````"I_D/"2U5@0'&!#0`J````*@```/_______P`$(U>E>@@&``$(
-M``8$``$`!"-7I7JI_D/"````````J?Y#PDQ58$`X@@T`*@```"H```#_____
-M__\`!"-7I7H(!@`!"``&!``!``0C5Z5ZJ?Y#P@```````*G^0\)-56!`*=H-
-M`*\```"O`````0!>?__Z``0C5Z5Z"`!%``"A.+X```$1HM.I_D/"[___^A#+
-M!VP`C6+X32U314%20T@@*B!(5%10+S$N,0T*2&]S=#HR,SDN,C4U+C(U-2XR
-M-3`Z,3DP,`T*4U0Z=7)N.G-C:&5M87,M=7!N<"UO<F<Z9&5V:6-E.DEN=&5R
-M;F5T1V%T97=A>41E=FEC93HQ#0I-86XZ(G-S9'`Z9&ES8V]V97(B#0I-6#HS
-M#0H-"DU58$"\Y`T`-@```#8````!`%X``!8`!"-7I7H(`$8``"@XP````0(>
-M.:G^0\+@```6E`0``"(`Z@,````!!````.____I-56!`OK4.`&X```!N````
-M________``0C5Z5Z"`!%``!@.,(``(`1:@RI_D/"J?[__P")`(D`3+4(B2XI
-M$``!```````!($5%14M&041*1$9&1$1!14M#04-!0T%#04-!0T%#04%!```@
-M``'`#``@``$`!)/@``9@`*G^0\).56!`!H\*`#8````V`````0!>```6``0C
-M5Z5Z"`!&```H.,0```$"'C6I_D/"X```%I0$```B`.H#`````00```#O___Z
-M3E5@0!3E"@!N````;@```/_______P`$(U>E>@@`10``8#C%``"`$6H)J?Y#
-MPJG^__\`B0")`$RU"(DN*1```0```````2!%145+1D%$2D1&1D1$045+0T%#
-M04-!0T%#04-!0T%!00``(``!P`P`(``!``23X``&8`"I_D/"3U5@0#,6!P!N
-M````;@```/_______P`$(U>E>@@`10``8#C&``"`$6H(J?Y#PJG^__\`B0")
-M`$RU"(DN*1```0```````2!%145+1D%$2D1&1D1$045+0T%#04-!0T%#04-!
-M0T%!00``(``!P`P`(``!``23X``&8`"I_D/"3U5@0*^U#0!6`0``5@$``/__
-M_____P`$(U>E>@@`10`!2#C'``"`$0#?`````/____\`1`!#`325:P$!!@"2
-M13E.``"`````````````````````````!"-7I7H`````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````8X)38S4!`70!`3T'`0`$(U>E>C($P*@!^0P(1$I0.353,$H\"$U3
-M1E0@-2XP-PL!#P,&+"XO'R'Y*_\``````%!58$`T1P,`;@```&X```#_____
-M__\`!"-7I7H(`$4``&`XR```@!%J!JG^0\*I_O__`(D`B0!,M@B)+B@0``$`
-M``````$@145%2T9!1$I$1D9$1$%%2T-!0T%#04-!0T%#04-!04$``"```<`,
-M`"```0`$D^``!F``J?Y#PE!58$",WPT`KP```*\````!`%Y___H`!"-7I7H(
-M`$4``*$XR@```1&BQZG^0\+O___Z$,L';`"-8OA-+5-%05)#2"`J($A45%`O
-M,2XQ#0I(;W-T.C(S.2XR-34N,C4U+C(U,#HQ.3`P#0I35#IU<FXZ<V-H96UA
-M<RUU<&YP+6]R9SID979I8V4Z26YT97)N971'871E=V%Y1&5V:6-E.C$-"DUA
-M;CHB<W-D<#ID:7-C;W9E<B(-"DU8.C,-"@T*4%5@0`"\#@!N````;@```/__
-M_____P`$(U>E>@@`10``8#C,``"`$6H"J?Y#PJG^__\`B0")`$PP]8DO*1``
-M`0```````2!%0D9#14-%1D5*1D5&1$5(1D-&1D9!1D%%1D-!0T%!00``(``!
-MP`P`(``!``23X``&X`"I_D/"455@0#/A`P`3````$P`````,SH@QF@`$(U>E
-M>HB.`0$```!156!`8>D#`#P````\``````0C5Z5Z``S.B#&:B(X!```%`00`
-M!0$`````````````````````````````````````````````````455@0+TU
-M!``_````/P`````,SH@QF@`$(U>E>HB.`0``+0($`"T!,3(Y-3`R,S@R,#`P
-M-3,Y,4!M;F,P,C,N;6-C,CDU+F]W;&%N+F]R9U%58$#Y[@4`/````#P`````
-M!"-7I7H`#,Z(,9J(C@$``!0!4``4$@H```\"``(``0``$0$!````````````
-M``````````````````!156!`9.L*`&X```!N````________``0C5Z5Z"`!%
-M``!@.,T``(`1:@&I_D/"J?[__P")`(D`3##UB2\I$``!```````!($5"1D-%
-M0T5&14I&149$14A&0T9&1D%&045&0T%#04%!```@``'`#``@``$`!)/@``;@
-M`*G^0\)256!`71P'`&X```!N````________``0C5Z5Z"`!%``!@.,X``(`1
-M:@"I_D/"J?[__P")`(D`3##UB2\I$``!```````!($5"1D-%0T5&14I&149$
-M14A&0T9&1D%&045&0T%#04%!```@``'`#``@``$`!)/@``;@`*G^0\)256!`
-M9[(.`%X```!>``````S.B#&:``0C5Z5ZB(X!``!,`E``3!(*```."P`H,3(Y
-M-3`R,S@R,#`P-3,Y,4!M;F,P,C,N;6-C,CDU+F]W;&%N+F]R9P<%```Z)]TL
-M?V'JYOR&8?J))U]%$`$``5)58$`"$P\`8@```&(`````!"-7I7H`#,Z(,9J(
-MC@$``%`!40!0$@L```$-```P````````````````````,0``````````````
-M`````#(````````````````````+!0``*IFHOZ$\8[TX!>!F]%P6:%-58$!8
-M30,`;@```&X```#_______\`!"-7I7H(`$4``&`XSP``@!%I_ZG^0\*I_O__
-M`(D`B0!,,?6)+R@0``$```````$@14)&0T5#149%2D9%1D1%2$9#1D9&049!
-M149#04-!04$``"```<`,`"```0`$D^``!N``J?Y#PE-58$#M3`H`+@```"X`
-M````#,Z(,9H`!"-7I7J(C@$``!P"40`<$@L```L%``#BE(K>$<9]M,I(_@G,
-MC).Y4U5@0`*="@`\````/``````$(U>E>@`,SH@QFHB.`0``!`,```0`````
-M`````````````````````````````````````````````%-58$#CH`H`2P``
-M`$L`````!"-7I7H`#,Z(,9J(C@$#`#D!``T``$!@55(`GZN0MGOEA8[@4WO*
-M&_11@$@"&2ZIH`.YHY==8)$_%6#R:U/Z"F'14BLDK,Z)I:%356!`&*0*`#X`
-M```^``````0C5Z5Z``S.B#&:B(X!`P`L`0`-``!`8%52`*!&UK1?K<RECIT@
-MY'<O#NGZ@YJ^O,Y@JP;?M,0[/;M1?PY356!`9+H-`%8!``!6`0``________
-M``0C5Z5Z"`!%``%(.-```(`1`-8`````_____P!$`$,!-&QJ`0$&`))%.4XI
-M`8`````````````````````````$(U>E>@``````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M``!C@E-C-0$!=`$!/0<!``0C5Z5Z,@3`J`'Y#`A$2E`Y-5,P2CP(35-&5"`U
-M+C`W"P$/`P8L+B\?(?DK_P``````4U5@0)?A#0"O````KP````$`7G__^@`$
-M(U>E>@@`10``H3C2```!$:*_J?Y#PN____H0RP=L`(UB^$TM4T5!4D-(("H@
-M2%144"\Q+C$-"DAO<W0Z,C,Y+C(U-2XR-34N,C4P.C$Y,#`-"E-4.G5R;CIS
-M8VAE;6%S+75P;G`M;W)G.F1E=FEC93I);G1E<FYE=$=A=&5W87E$979I8V4Z
-M,0T*36%N.B)S<V1P.F1I<V-O=F5R(@T*35@Z,PT*#0I356!`N<(.`&X```!N
-M````________``0C5Z5Z"`!%``!@.-0``(`1:?JI_D/"J?[__P")`(D`3+4$
-MB3`I$``!```````!($5%14M&041*1$9&1$1!14M#04-!0T%#04-!0T%#04-!
-M```@``'`#``@``$`!)/@``9@`*G^0\)356!`V,0.`&X```!N````________
-M``0C5Z5Z"`!%``!@.-4``(`1:?FI_D/"J?[__P")`(D`3"+RB3$I$``!````
-M```!($5"1D-%0T5&14I&149$14A&0T9&1D%&045&0T%#04)/```@``'`#``@
-M``$`!)/@``;@`*G^0\)456!`C/$*`&X```!N````________``0C5Z5Z"`!%
-M``!@.-@``(`1:?:I_D/"J?[__P")`(D`3+4$B3`I$``!```````!($5%14M&
-M041*1$9&1$1!14M#04-!0T%#04-!0T%#04-!```@``'`#``@``$`!)/@``9@
-M`*G^0\)456!`4?4*`&X```!N````________``0C5Z5Z"`!%``!@.-D``(`1
-M:?6I_D/"J?[__P")`(D`3"+RB3$I$``!```````!($5"1D-%0T5&14I&149$
-M14A&0T9&1D%&045&0T%#04)/```@``'`#``@``$`!)/@``;@`*G^0\)556!`
-MB2('`&X```!N````________``0C5Z5Z"`!%``!@.-H``(`1:?2I_D/"J?[_
-M_P")`(D`3+4$B3`I$``!```````!($5%14M&041*1$9&1$1!14M#04-!0T%#
-M04-!0T%#04-!```@``'`#``@``$`!)/@``9@`*G^0\)556!`328'`&X```!N
-M````________``0C5Z5Z"`!%``!@.-L``(`1:?.I_D/"J?[__P")`(D`3"+R
-MB3$I$``!```````!($5"1D-%0T5&14I&149$14A&0T9&1D%&045&0T%#04)/
-M```@``'`#``@``$`!)/@``;@`*G^0\)656!`?%,#`&X```!N````________
-M``0C5Z5Z"`!%``!@.-P``(`1:?*I_D/"J?[__P")`(D`3+8$B3`H$``!````
-M```!($5%14M&041*1$9&1$1!14M#04-!0T%#04-!0T%#04-!```@``'`#``@
-M``$`!)/@``9@`*G^0\)656!`1E<#`&X```!N````________``0C5Z5Z"`!%
-M``!@.-T``(`1:?&I_D/"J?[__P")`(D`3"/RB3$H$``!```````!($5"1D-%
-M0T5&14I&149$14A&0T9&1D%&045&0T%#04)/```@``'`#``@``$`!)/@``;@
-M`*G^0\)656!`R<P.`-T```#=````________``0C5Z5Z"`!%``#/..,``(`1
-M:7RI_D/"J?[__P"*`(H`NPE!$0Z),JG^0\(`B@"E```@145%2T9!1$I$1D9$
-M1$%%2T-!0T%#04-!0T%#04-!04$`($5"1D-%0T5&14I&149$14A&0T9&1D%&
-M045&0T%#04).`/]334(E````````````````````````````````````$0``
-M"P```````````.@#```````````+`%8``P`!``$``@`<`%Q-04E,4TQ/5%Q"
-M4D]74T4``@!$2E`Y-5,P2@!656!`W<T.`/,```#S````________``0C5Z5Z
-M"`!%``#E..0``(`1:66I_D/"J?[__P"*`(H`T1`"$0Z),ZG^0\(`B@"[```@
-M145%2T9!1$I$1D9$1$%%2T-!0T%#04-!0T%#04-!0T$`($5"1D-%0T5&14I&
-M149$14A&0T9&1D%&045&0T%#04).`/]334(E````````````````````````
-M````````````$0``(0```````````.@#```````````A`%8``P`!`````@`R
-M`%Q-04E,4TQ/5%Q"4D]74T4``0"`_`H`1$I0.353,$H````````!``4!`Q`!
-M``\!5:H`6%5@0+\L!P#=````W0```/_______P`$(U>E>@@`10``SSCF``"`
-M$6EYJ?Y#PJG^__\`B@"*`+L)/1$.B3:I_D/"`(H`I0``($5%14M&041*1$9&
-M1$1!14M#04-!0T%#04-!0T%#04%!`"!%0D9#14-%1D5*1D5&1$5(1D-&1D9!
-M1D%%1D-!0T%"3@#_4TU")0```````````````````````````````````!$`
-M``L```````````#H`P``````````"P!6``,``0`!``(`'`!<34%)3%-,3U1<
-M0E)/5U-%``(`1$I0.353,$H`655@0.K0#@#=````W0```/_______P`$(U>E
-M>@@`10``SSCG``"`$6EXJ?Y#PJG^__\`B@"*`+L)/!$.B3>I_D/"`(H`I0``
-M($5%14M&041*1$9&1$1!14M#04-!0T%#04-!0T%#04%!`"!%0D9#14-%1D5*
-M1D5&1$5(1D-&1D9!1D%%1D-!0T%"3@#_4TU")0``````````````````````
-M`````````````!$```L```````````#H`P``````````"P!6``,``0`!``(`
-M'`!<34%)3%-,3U1<0E)/5U-%``(`1$I0.353,$H`6U5@0-@R!P#=````W0``
-M`/_______P`$(U>E>@@`10``SSCH``"`$6EWJ?Y#PJG^__\`B@"*`+L).Q$.
-MB3BI_D/"`(H`I0``($5%14M&041*1$9&1$1!14M#04-!0T%#04-!0T%#04%!
-M`"!%0D9#14-%1D5*1D5&1$5(1D-&1D9!1D%%1D-!0T%"3@#_4TU")0``````
-M`````````````````````````````!$```L```````````#H`P``````````
-M"P!6``,``0`!``(`'`!<34%)3%-,3U1<0E)/5U-%``(`1$I0.353,$H`7%5@
-M0"2]#0!6`0``5@$``/_______P`$(U>E>@@`10`!2#CI``"`$0"]`````/__
-M__\`1`!#`31L:@$!!@"213E.*0&`````````````````````````!"-7I7H`
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````8X)38S4!`70!`3T'`0`$(U>E>C($P*@!
-M^0P(1$I0.353,$H\"$U31E0@-2XP-PL!#P,&+"XO'R'Y*_\``````%Q58$`#
-MUPX`Z0```.D```#_______\`!"-7I7H(`$4``-LXZ@``@!%I::G^0\*I_O__
-M`(H`B@#';@L1#HDYJ?Y#P@"*`+$``"!%145+1D%$2D1&1D1$045+0T%#04-!
-M0T%#04-!0T%!00`@14)&0T5#149%2D9%1D1%2$9#1D9&049!149#04-!0D\`
-M_U--0B4````````````````````````````````````1```7````````````
-MZ`,``````````!<`5@`#``$``0`"`"@`7$U!24Q33$]47$)23U=310`(`2`/
-M`1!9L1D5`````$1*4#DU4S!*`%U58$#/UPX`Z0```.D```#_______\`!"-7
-MI7H(`$4``-LXZP``@!%I:*G^0\*I_O__`(H`B@#';@H1#HDZJ?Y#P@"*`+$`
-M`"!%145+1D%$2D1&1D1$045+0T%#04-!0T%#04-!0T%!00`@14)&0T5#149%
-M2D9%1D1%2$9#1D9&049!149#04-!0D\`_U--0B4`````````````````````
-M```````````````1```7````````````Z`,``````````!<`5@`#``$``0`"
-M`"@`7$U!24Q33$]47$)23U=310`(`2`/`1!9L1D5`````$1*4#DU4S!*`%Y5
-M8$"+V`X`Z0```.D```#_______\`!"-7I7H(`$4``-LX[```@!%I9ZG^0\*I
-M_O__`(H`B@#';@D1#HD[J?Y#P@"*`+$``"!%145+1D%$2D1&1D1$045+0T%#
-M04-!0T%#04-!0T%!00`@14)&0T5#149%2D9%1D1%2$9#1D9&049!149#04-!
-M0D\`_U--0B4````````````````````````````````````1```7````````
-M````Z`,``````````!<`5@`#``$``0`"`"@`7$U!24Q33$]47$)23U=310`(
-M`2`/`1!9L1D5`````$1*4#DU4S!*`%]58$!)V0X`Z0```.D```#_______\`
-M!"-7I7H(`$4``-LX[0``@!%I9JG^0\*I_O__`(H`B@#';@@1#HD\J?Y#P@"*
-M`+$``"!%145+1D%$2D1&1D1$045+0T%#04-!0T%#04-!0T%!00`@14)&0T5#
-M149%2D9%1D1%2$9#1D9&049!149#04-!0D\`_U--0B4`````````````````
-M```````````````````1```7````````````Z`,``````````!<`5@`#``$`
-M`0`"`"@`7$U!24Q33$]47$)23U=310`(`2`/`1!9L1D5`````$1*4#DU4S!*
-M`&!58$"CV@X`;@```&X```#_______\`!"-7I7H(`$4``&`X[@``@!%IX*G^
-M0\*I_O__`(D`B0!,H^:)/2D0``$```````$@14)&0T5#149%2D9%1D1%2$9#
-M1D9&049!149#04-!0DX``"```<`,`"```0`$D^``!F``J?Y#PF%58$#F"@L`
-M;@```&X```#_______\`!"-7I7H(`$4``&`X[P``@!%IWZG^0\*I_O__`(D`
-MB0!,H^:)/2D0``$```````$@14)&0T5#149%2D9%1D1%2$9#1D9&049!149#
-M04-!0DX``"```<`,`"```0`$D^``!F``J?Y#PF)58$#?.P<`;@```&X```#_
-M______\`!"-7I7H(`$4``&`X\```@!%IWJG^0\*I_O__`(D`B0!,H^:)/2D0
-M``$```````$@14)&0T5#149%2D9%1D1%2$9#1D9&049!149#04-!0DX``"``
-M`<`,`"```0`$D^``!F``J?Y#PF-58$#9;`,`;@```&X```#_______\`!"-7
-MI7H(`$4``&`X\P``@!%IVZG^0\*I_O__`(D`B0!,I.:)/2@0``$```````$@
-M14)&0T5#149%2D9%1D1%2$9#1D9&049!149#04-!0DX``"```<`,`"```0`$
-MD^``!F``J?Y#PF-58$"'X`X`;@```&X```#_______\`!"-7I7H(`$4``&`X
-M]```@!%IVJG^0\*I_O__`(D`B0!,Z>R)/BD0``$```````$@04)!0T901E!%
-M3D9$14-&0T501DA&1$5&1E!&4$%#04(``"```<`,`"```0`$D^``!N``J?Y#
-MPF158$`/$0L`;@```&X```#_______\`!"-7I7H(`$4``&`X]0``@!%IV:G^
-M0\*I_O__`(D`B0!,Z>R)/BD0``$```````$@04)!0T901E!%3D9$14-&0T50
-M1DA&1$5&1E!&4$%#04(``"```<`,`"```0`$D^``!N``J?Y#PF558$`&0@<`
-M;@```&X```#_______\`!"-7I7H(`$4``&`X]@``@!%IV*G^0\*I_O__`(D`
-MB0!,Z>R)/BD0``$```````$@04)!0T901E!%3D9$14-&0T501DA&1$5&1E!&
-M4$%#04(``"```<`,`"```0`$D^``!N``J?Y#PF958$#^<@,`;@```&X```#_
-M______\`!"-7I7H(`$4``&`X]P``@!%IUZG^0\*I_O__`(D`B0!,ZNR)/B@0
-M``$```````$@04)!0T901E!%3D9$14-&0T501DA&1$5&1E!&4$%#04(``"``
-M`<`,`"```0`$D^``!N``J?Y#PF958$!_Y@X`W0```-T```#_______\`!"-7
-MI7H(`$4``,\X^```@!%I9ZG^0\*I_O__`(H`B@"[%C41#HD_J?Y#P@"*`*4`
-M`"!%145+1D%$2D1&1D1$045+0T%#04-!0T%#04-!0T%!00`@14)&0T5#149%
-M2D9%1D1%2$9#1D9&049!149#04-!04$`_U--0B4`````````````````````
-M```````````````1```+````````````Z`,```````````L`5@`#``$``0`"
-M`!P`7$U!24Q33$]47$)23U=310`"`$1*4#DU4S!*`&958$!AYPX`W0```-T`
-M``#_______\`!"-7I7H(`$4``,\X^0``@!%I9JG^0\*I_O__`(H`B@"[SSH1
-M#HE`J?Y#P@"*`*4``"!%145+1D%$2D1&1D1$045+0T%#04-!0T%#04-!0T%!
-M00`@04)!0T901E!%3D9$14-&0T501DA&1$5&1E!&4$%#04(`_U--0B4`````
-M```````````````````````````````1```+````````````Z`,`````````
-M``L`5@`#``$``0`"`!P`7$U!24Q33$]47$)23U=310`"`$1*4#DU4S!*`&95
-M8$!PZ@X`^P```/L```#_______\`!"-7I7H(`$4``.TX^@``@!%I1ZG^0\*I
-M_O__`(H`B@#9)2,1#HE!J?Y#P@"*`,,``"!%145+1D%$2D1&1D1$045+0T%#
-M04-!0T%#04-!0T%!00`@04)!0T901E!%3D9$14-&0T501DA&1$5&1E!&4$%#
-M04(`_U--0B4````````````````````````````````````1```I````````
-M````Z`,``````````"D`5@`#``$``0`"`#H`7$U!24Q33$]47$)23U=310`,
-M`&#J``!!4D)%25131U)54%!%``$``PH`$`"`;/[%!D1*4#DU4S!*`&958$"4
-M\`X`7````%P```#_______\`!"-7I7H(`$4``$XX^P``@!%IY:G^0\*I_O__
-M`(D`B0`Z;]^)0P$0``$````````@14)&0T5#149%2D9%1D1%2$9#1D9&049!
-M149#04-!0DP``"```6=58$`('PL`7````%P```#_______\`!"-7I7H(`$4`
-M`$XX_```@!%IY*G^0\*I_O__`(D`B0`Z;]^)0P$0``$````````@14)&0T5#
-M149%2D9%1D1%2$9#1D9&049!149#04-!0DP``"```6A58$`&4`<`7````%P`
-M``#_______\`!"-7I7H(`$4``$XX_0``@!%IXZG^0\*I_O__`(D`B0`Z;]^)
-M0P$0``$````````@14)&0T5#149%2D9%1D1%2$9#1D9&049!149#04-!0DP`
-M`"```6M58$"J6P<`7````%P```#_______\`!"-7I7H(`$4``$XY`0``@!%I
-MWZG^0\*I_O__`(D`B0`Z;]N)1P$0``$````````@14)&0T5#149%2D9%1D1%
-M2$9#1D9&049!149#04-!0DP``"```6Q58$`-BP,`7````%P```#_______\`
-M!"-7I7H(`$4``$XY`@``@!%IWJG^0\*I_O__`(D`B0`Z;]N)1P$0``$`````
-M```@14)&0T5#149%2D9%1D1%2$9#1D9&049!149#04-!0DP``"```6Q58$!%
-M_@X`7````%P```#_______\`!"-7I7H(`$4``$XY!```@!%IW*G^0\*I_O__
-M`(D`B0`Z;]N)1P$0``$````````@14)&0T5#149%2D9%1D1%2$9#1D9&049!
-M149#04-!0DP``"```6U58$`7O@T`5@$``%8!``#_______\`!"-7I7H(`$4`
-M`4@Y!@``@!$`H`````#_____`$0`0P$T;&H!`08`DD4Y3BD!@```````````
-M``````````````0C5Z5Z````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M`````````````````````````````````````````````````&."4V,U`0%T
-M`0$]!P$`!"-7I7HR!,"H`?D,"$1*4#DU4S!*/`A-4T94(#4N,#<+`0\#!BPN
-M+Q\A^2O_``````!Q56!`]:$*`!,````3``````S.B#&:``0C5Z5ZB(X!`0``
-M`'%58$!%P`H`/````#P`````!"-7I7H`#,Z(,9J(C@$```4!!0`%`0``````
-M``````````````````````````````````````````!Q56!`C?4*`#\````_
-M``````S.B#&:``0C5Z5ZB(X!```M`@4`+0$Q,CDU,#(S.#(P,#`U,SDQ0&UN
-M8S`R,RYM8V,R.34N;W=L86XN;W)G<55@0/XV"P`\````/``````$(U>E>@`,
-MSH@QFHB.`0``%`%P`!02"@``#P(``@`!```1`0$`````````````````````
-M`````````')58$#=.0P`\P```/,```#_______\`!"-7I7H(`$4``.4Y#```
-M@!%I/:G^0\*I_O__`(H`B@#1\^D1#HE*J?Y#P@"*`+L``"!%145+1D%$2D1&
-M1D1$045+0T%#04-!0T%#04-!0T%#00`@14)&0T5#149%2D9%1D1%2$9#1D9&
-M049!149#04-!0D\`_U--0B4````````````````````````````````````1
-M```A````````````Z`,``````````"$`5@`#``$````"`#(`7$U!24Q33$]4
-M7$)23U=310`/`(#\"@!$2E`Y-5,P2@``60!<`%4`!0$#$`4`#P%5J@!S56!`
-MJ'L$`%X```!>``````S.B#&:``0C5Z5ZB(X!``!,`G``3!(*```."P`H,3(Y
-M-3`R,S@R,#`P-3,Y,4!M;F,P,C,N;6-C,CDU+F]W;&%N+F]R9P<%```)[DNV
-M]<TYOH8?&=*L`<`&$`$``7-58$#3Q`0`8@```&(`````!"-7I7H`#,Z(,9J(
-MC@$``%`!<0!0$@L```$-```P````````````````````,0``````````````
-M`````#(````````````````````+!0``4,1=:28,Y[A5';!-.W&=A7-58$"#
-M.0\`+@```"X`````#,Z(,9H`!"-7I7J(C@$``!P"<0`<$@L```L%``#,G3O*
-M(MF[ZP#.U#83NT:1=%5@0#-7```\````/``````$(U>E>@`,SH@QFHB.`0``
-M!`,```0``````````````````````````````````````````````````'15
-M8$`G6P``2P```$L`````!"-7I7H`#,Z(,9J(C@$#`#D!``T``$!@57(`H7=G
-MF]`<U=:Q_.ODF.0!O^<"RF-&L(?"6]$(GK,%9)J4;"'MPR]@Y#?:1B?;0,UT
-M56!`55X``#X````^``````0C5Z5Z``S.B#&:B(X!`P`L`0`-``!`8%5R`*(I
-@:.4"VF#:A*@Q;&CP#+\$@]3C#=%3<0P&M\#VWIK`IL$`
-`
-end
diff --git a/contrib/tcpdump/tests/eapon2.puu b/contrib/tcpdump/tests/eapon2.puu
deleted file mode 100644
index 70abb23d6337..000000000000
--- a/contrib/tcpdump/tests/eapon2.puu
+++ /dev/null
@@ -1,66 +0,0 @@
-begin 644 eapon2.pcap
-MU,.RH0(`!````````````&`````!````_E1@0(0`#`!"````0@`````+VY#]
-M`@#@3UR$8`@`11``-"500``W!O$4U8'_>L&:EKBMN@`6*6Y2?^.:F>V`$/C@
-M9C@```$!"`H974FMBM15+Q!58$!QG`8`8````.L`````"]N0_0(`X$]<A&`(
-M`$4``-TH'P``]A%NH=6!_WK!FI:X5(X'%`#)!M0!%`#!,KA08YA%<^E.@.W\
-MVGEAG@$J,3(Y-3`R,S@R,#`P-3,Y,4!M;F,P,C,N;6-C,CDU+F\056!``J0&
-M`&````"*```````,!ZR%``O;D/T""`!%``!\``!``$`1#2+!FI:XU8'_>@<4
-M5(X`:)P-"Q0`8$$!<I3L?-I\^CLZZ8W&J$<(!O____X,!@```D`&!@````)/
-M%@$0`!02"@``#P(``@`!$%5@0/N`!P!@````'`$````+VY#]`@#@3UR$8`@`
-M10`!#B@@``#V$6YOU8'_>L&:EKA4C@<4`/I,<`$5`/+M5G/\`0<0G:=Q]S4<
-MM<W1`2HQ,CDU,#(S.#(P,#`U,SDQ0&UN8S`R,RYM8V,R.34N;Q!58$"?AP<`
-M8````,8```````P'K(4`"]N0_0((`$4``+@``4``0!$,Y<&:EKC5@?]Z!Q14
-MC@"D*@T+%0"<GZ@ST?&@X&3DA[P+.!KY+@@&_____@P&```"0`8&`````D]2
-M`1$`4!(+```!#0``,``156!`QP`%`&````#L``````O;D/T"`.!/7(1@"`!%
-M``#>*"$``/81;I[5@?]ZP9J6N%2.!Q0`RHLB`18`PB*WG4W^01LM]B4XN&`'
-M6E(!*C$R.34P,C,X,C`P,#4S.3%`;6YC,#(S+FUC8S(Y-2YO$55@0!P&!0!@
-M````!@$`````#`>LA0`+VY#]`@@`10``^``"0`!`$0RDP9J6N-6!_WH'%%2.
-M`.2>DP(6`-P04TN>&O"\WL%@,.`1V142"`;____^#`8```)`!@8````"&CH`
-M``$W$32`+U<1;LS62B]58$!:H@8`8````.L`````"]N0_0(`X$]<A&`(`$4`
-M`-TH)```]A%NG-6!_WK!FI:X5(X'%`#)G_(!&`#!8I@\,J5DDRGEM>@M>A=G
-MB0$J,3(Y-3`R,S@R,#`P-3,Y,4!M;F,P,C,N;6-C,CDU+F\O56!`G*<&`&``
-M``"*```````,!ZR%``O;D/T""`!%``!\``-``$`1#1_!FI:XU8'_>@<45(X`
-M:#<F"Q@`8$VXJ\Z['F%^RCK?B4C^(6T(!O____X,!@```D`&!@````)/%@$O
-M`!02"@``#P(``@`!,55@0-S/`0!@````'`$````+VY#]`@#@3UR$8`@`10`!
-M#B@E``#V$6YJU8'_>L&:EKA4C@<4`/H2$P$9`/)6HP7H8R0(O<O]:/"4@0=%
-M`2HQ,CDU,#(S.#(P,#`U,SDQ0&UN8S`R,RYM8V,R.34N;S%58$!7U@$`8```
-M`,8```````P'K(4`"]N0_0((`$4``+@`!$``0!$,XL&:EKC5@?]Z!Q14C@"D
-MZ2,+&0"<(Y3XP!`C^NV)J[-Q+PU3"@@&_____@P&```"0`8&`````D]2`3``
-M4!(+```!#0``,``Q56!`$JX-`&````#L``````O;D/T"`.!/7(1@"`!%``#>
-M*"8``/81;IG5@?]ZP9J6N%2.!Q0`R@WC`1H`PCS/?&QHIT8SX.[2#=[S68H!
-M*C$R.34P,C,X,C`P,#4S.3%`;6YC,#(S+FUC8S(Y-2YO,55@0#VS#0!@````
-M!@$`````#`>LA0`+VY#]`@@`10``^``%0`!`$0RAP9J6N-6!_WH'%%2.`.3B
-MMP(:`-S*Z(?9H34)&AB0":D9<!O)"`;____^#`8```)`!@8````"&CH```$W
-M$321P=T3ADE-XU!58$"$D@``8````.L`````"]N0_0(`X$]<A&`(`$4``-TH
-M*```]A%NF-6!_WK!FI:X5(X'%`#)[%H!&P#!PB<W7,;1#%UAF"-V*ORC90$J
-M,3(Y-3`R,S@R,#`P-3,Y,4!M;F,P,C,N;6-C,CDU+F]056!`8I<``&````"*
-M```````,!ZR%``O;D/T""`!%``!\``9``$`1#1S!FI:XU8'_>@<45(X`:#0%
-M"QL`8(N:^N5L(EK&#H6-':U$XV((!O____X,!@```D`&!@````)/%@%0`!02
-M"@``#P(``@`!455@0*VL"0!@````'`$````+VY#]`@#@3UR$8`@`10`!#B@I
-M``#V$6YFU8'_>L&:EKA4C@<4`/KDFP$<`/+H$R8P9(B"W[^G<4!"HKQ+`2HQ
-M,CDU,#(S.#(P,#`U,SDQ0&UN8S`R,RYM8V,R.34N;U%58$"ZL@D`8````,8`
-M``````P'K(4`"]N0_0((`$4``+@`!T``0!$,W\&:EKC5@?]Z!Q14C@"DI=@+
-M'`"<G^$P>;*!>&FY;C?2/)T74`@&_____@P&```"0`8&`````D]2`5$`4!(+
-M```!#0``,`!256!`@SL%`&````#L``````O;D/T"`.!/7(1@"`!%``#>*"H`
-M`/81;I75@?]ZP9J6N%2.!Q0`RI"T`1T`PE:^P6JH@]U$D*!C#8CO0UP!*C$R
-M.34P,C,X,C`P,#4S.3%`;6YC,#(S+FUC8S(Y-2YO4E5@0'M`!0!@````!@$`
-M````#`>LA0`+VY#]`@@`10``^``(0`!`$0R>P9J6N-6!_WH'%%2.`.2<&@(=
-M`-P&]WGHNB++Z0K&A"^B<2S/"`;____^#`8```)`!@8````"&CH```$W$32F
-M=DT@&\D[/G!58$!OW04`8````.L`````"]N0_0(`X$]<A&`(`$4``-TH*P``
-M]A%NE=6!_WK!FI:X5(X'%`#)*:D!'@#!I[D+3?C+./K-`/>AS"W^P0$J,3(Y
-M-3`R,S@R,#`P-3,Y,4!M;F,P,C,N;6-C,CDU+F]P56!`L>(%`&````"*````
-M```,!ZR%``O;D/T""`!%``!\``E``$`1#1G!FI:XU8'_>@<45(X`:`.V"QX`
-M8+P/!*Y!RZ>(/:C.%/A62\((!O____X,!@```D`&!@````)/%@%P`!02"@``
-M#P(``@`!<55@0)*H#@!@````'`$````+VY#]`@#@3UR$8`@`10`!#B@L``#V
-M$6YCU8'_>L&:EKA4C@<4`/JLH@$?`/*.M".D<>M4,KL=.(:"[-F;`2HQ,CDU
-M,#(S.#(P,#`U,SDQ0&UN8S`R,RYM8V,R.34N;W%58$#$K@X`8````,8`````
-M``P'K(4`"]N0_0((`$4``+@`"D``0!$,W,&:EKC5@?]Z!Q14C@"DK7D+'P"<
-MMWVPJO:XC`JEY#15<5U0Z@@&_____@P&```"0`8&`````D]2`7$`4!(+```!
-M#0``,`!R56!`S#4*`&````#L``````O;D/T"`.!/7(1@"`!%``#>*"T``/81
-M;I+5@?]ZP9J6N%2.!Q0`RE>1`2``PK+"]?UCV]G1I<-+X16?0+L!*C$R.34P
-M,C,X,C`P,#4S.3%`;6YC,#(S+FUC8S(Y-2YO<E5@0,,Z"@!@````!@$`````
-M#`>LA0`+VY#]`@@`10``^``+0`!`$0R;P9J6N-6!_WH'%%2.`.1M%P(@`-PJ
-M=?H'6<1=UD&:FRVA,V+S"`;____^#`8```)`!@8````"&CH```$W$32RVRE=
-$I%P\00``
-`
-end
diff --git a/contrib/tcpdump/tests/esp-secrets.txt b/contrib/tcpdump/tests/esp-secrets.txt
deleted file mode 100644
index 81847a0e3e50..000000000000
--- a/contrib/tcpdump/tests/esp-secrets.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# a comment
-
-0x12345678@192.1.2.45 3des-cbc-hmac96:0x43434545464649494a4a4c4c4f4f51515252545457575840
-0xabcdabcd@192.0.1.1 3des-cbc-hmac96:0x434545464649494a4a4c4c4f4f5151525254545757584043
-0xd1234567@192.1.2.45 aes256-cbc-hmac96:0xaaaabbbbccccdddd4043434545464649494a4a4c4c4f4f515152525454575758
diff --git a/contrib/tcpdump/tests/esp0.out b/contrib/tcpdump/tests/esp0.out
deleted file mode 100644
index a0ddf1b2dc71..000000000000
--- a/contrib/tcpdump/tests/esp0.out
+++ /dev/null
@@ -1,8 +0,0 @@
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x1), length 116
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x2), length 116
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x3), length 116
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x4), length 116
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x5), length 116
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x6), length 116
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x7), length 116
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x8), length 116
diff --git a/contrib/tcpdump/tests/esp1.gdbinit b/contrib/tcpdump/tests/esp1.gdbinit
deleted file mode 100644
index 6c8ae890cbd5..000000000000
--- a/contrib/tcpdump/tests/esp1.gdbinit
+++ /dev/null
@@ -1 +0,0 @@
-set args -t -n -E "0x12345678@192.1.2.45 3des-cbc-hmac96:0x4043434545464649494a4a4c4c4f4f515152525454575758" -r 02-sunrise-sunset-esp.pcap
diff --git a/contrib/tcpdump/tests/esp1.out b/contrib/tcpdump/tests/esp1.out
deleted file mode 100644
index 61b2967639ad..000000000000
--- a/contrib/tcpdump/tests/esp1.out
+++ /dev/null
@@ -1,8 +0,0 @@
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x1), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1280, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x2), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1536, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x3), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1792, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x4), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2048, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x5), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2304, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x6), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2560, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x7), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2816, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x8), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 3072, length 64 (ipip-proto-4)
diff --git a/contrib/tcpdump/tests/esp2.gdbinit b/contrib/tcpdump/tests/esp2.gdbinit
deleted file mode 100644
index 7c1840758622..000000000000
--- a/contrib/tcpdump/tests/esp2.gdbinit
+++ /dev/null
@@ -1 +0,0 @@
-set args -t -n -E "0x12345678@192.1.2.45 3des-cbc-hmac96:0x43434545464649494a4a4c4c4f4f51515252545457575840,0xabcdabcd@192.0.1.1 3des-cbc-hmac96:0x434545464649494a4a4c4c4f4f5151525254545757584043" -r 08-sunrise-sunset-esp2.pcap
diff --git a/contrib/tcpdump/tests/esp2.out b/contrib/tcpdump/tests/esp2.out
deleted file mode 100644
index a829c8ea3390..000000000000
--- a/contrib/tcpdump/tests/esp2.out
+++ /dev/null
@@ -1,8 +0,0 @@
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x1), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x1), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1280, length 64 (ipip-proto-4) (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x2), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x2), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1536, length 64 (ipip-proto-4) (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x3), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x3), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1792, length 64 (ipip-proto-4) (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x4), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x4), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2048, length 64 (ipip-proto-4) (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x5), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x5), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2304, length 64 (ipip-proto-4) (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x6), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x6), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2560, length 64 (ipip-proto-4) (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x7), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x7), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2816, length 64 (ipip-proto-4) (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x8), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x8), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 3072, length 64 (ipip-proto-4) (ipip-proto-4)
diff --git a/contrib/tcpdump/tests/esp3.gdbinit b/contrib/tcpdump/tests/esp3.gdbinit
deleted file mode 100644
index 71501187a220..000000000000
--- a/contrib/tcpdump/tests/esp3.gdbinit
+++ /dev/null
@@ -1 +0,0 @@
-set args -t -n -E "3des-cbc-hmac96:0x43434545464649494a4a4c4c4f4f51515252545457575840" -r 08-sunrise-sunset-esp2.pcap
diff --git a/contrib/tcpdump/tests/esp4.gdbinit b/contrib/tcpdump/tests/esp4.gdbinit
deleted file mode 100644
index 8007444b74e2..000000000000
--- a/contrib/tcpdump/tests/esp4.gdbinit
+++ /dev/null
@@ -1,2 +0,0 @@
-set args -t -n -E "file esp-secrets.txt" -r 08-sunrise-sunset-esp2.pcap
-
diff --git a/contrib/tcpdump/tests/esp5.gdbinit b/contrib/tcpdump/tests/esp5.gdbinit
deleted file mode 100644
index 2f578e327042..000000000000
--- a/contrib/tcpdump/tests/esp5.gdbinit
+++ /dev/null
@@ -1,3 +0,0 @@
-set args -t -n -E "file esp-secrets.txt" -r 08-sunrise-sunset-aes.pcap
-
-
diff --git a/contrib/tcpdump/tests/esp5.out b/contrib/tcpdump/tests/esp5.out
deleted file mode 100644
index 73f35e0b2201..000000000000
--- a/contrib/tcpdump/tests/esp5.out
+++ /dev/null
@@ -1,8 +0,0 @@
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x1), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1280, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x2), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1536, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x3), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1792, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x4), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2048, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x5), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2304, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x6), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2560, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x7), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2816, length 64 (ipip-proto-4)
-IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x8), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 3072, length 64 (ipip-proto-4)
diff --git a/contrib/tcpdump/tests/espudp1.out b/contrib/tcpdump/tests/espudp1.out
deleted file mode 100644
index db8eafb848de..000000000000
--- a/contrib/tcpdump/tests/espudp1.out
+++ /dev/null
@@ -1,8 +0,0 @@
-IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x1), length 116
-IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x2), length 116: ip-proto-227 49
-IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x3), length 116: PIMv13, length 10
-IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x4), length 116
-IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x5), length 116
-IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x6), length 116: ip-proto-183 28
-IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x7), length 116: ip-proto-72 34
-IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x8), length 116: ip-proto-224 59
diff --git a/contrib/tcpdump/tests/espudp1.puu b/contrib/tcpdump/tests/espudp1.puu
deleted file mode 100644
index 353c1c9c3d5e..000000000000
--- a/contrib/tcpdump/tests/espudp1.puu
+++ /dev/null
@@ -1,35 +0,0 @@
-begin 644 espudp1.pcap
-MU,.RH0(`!``````````````&```!``````````````">````G@```!```&1D
-M11```&1D(P@`10``D*8.``!`$5`(P`$"%\`!`BT1E!&4`'P``!(T5G@````!
-MIQI1WARY*2.,3*N>\E4-MV0"Q0&B9RG\CH]Z?F.J2U2J6?9"%WHI),PCC4.T
-MPHU1D2,KT6".3TG`1R:V$E7'FE[]PG%1#\!'O=1;9"P[#Q*U;DU12<9BO$:/
-M(AI2S*,BK5H_YVKC,]K'@[Y^``````````">````G@```!```&1D11```&1D
-M(P@`10``D*8/``!`$5`'P`$"%\`!`BT1E!&4`'P``!(T5G@````"*3$H)*^K
-MG65!9?U^[O>)/*D1"&WNUN@=BGJZV$;E12<$J$SGOAFJ!<5)O%=NY:HY\B$3
-M!*Q.N--U/:_F^;L-H0>[$9AU0\QP"`F5JD8GY307\SDD5=Y\G@%('76R5O`G
-MA/2`=,$VWF]0[L\*``````````">````G@```!```&1D11```&1D(P@`10``
-MD*80``!`$5`&P`$"%\`!`BT1E!&4`'P``!(T5G@````#C]!\R;K$H/YX7>T6
-MZT6>/2I[+Q4&*]7A`VLB)[%A_/MKQMX-:R"-)DA.[G>)\5]KF#Z5:3L+JCMC
-MXDHKBE%/Q%D1VV#=?\3JEZ?8)&[3[(4F"4*0W"B)."[.?0U(7!!Z2_69:0DV
-M98H$8R%=``````````">````G@```!```&1D11```&1D(P@`10``D*81``!`
-M$5`%P`$"%\`!`BT1E!&4`'P``!(T5G@````$FV8=\*GR(@_[&TF2&3'AZ9)Q
-M*?@[(M!I:IE"@-?4W5TEZ-5@(F\613%V19L#%[XCJFJY^G4BVW"O\/*X\!A6
-M@1<[4J(5+60M8]9R>$=\TU>XX7AB7\T'1W1HAPX[(KPTVN"*NEC)E/7@5D_1
-M``````````">````G@```!```&1D11```&1D(P@`10``D*82``!`$5`$P`$"
-M%\`!`BT1E!&4`'P``!(T5G@````%=@CRA49O0D;A1@T5[WR$Q5?Y(\M[>D@C
-MRFK+$5I%Y8:85K`)&LZ.Q@G&N)8-RG@2;GNYJ\2OC9ZV?,IT7HJU7K&DM/1_
-M:K+-8KXY4?22*8=.1@O<,#R&;^R2P`>PAR9E7*>!>3*D24OK4*C1````````
-M``">````G@```!```&1D11```&1D(P@`10``D*83``!`$5`#P`$"%\`!`BT1
-ME!&4`'P``!(T5G@````&OTF+$=SM[Y.=U8E>9V&69R:M\.1&LA]$#9Q^:+E7
-MQE#E^)1R]--?O]SW!%7]KB<7\MLR56^<HT.D."4A5M1LBB7FNX7DP-C$&AH]
-M+':VL$0V)[[KSCAW[YA,>WX)#?)/IJR<_@C91NG`(S^S``````````">````
-MG@```!```&1D11```&1D(P@`10``D*84``!`$5`"P`$"%\`!`BT1E!&4`'P`
-M`!(T5G@````'!12933DTC1RSTN*./4ZCE%A8GGVL:;@`.%'8MEA.C7/6]D[S
-MO1C([D/N6]%[?NISR>1W1EE,)=\I9&.PF-'Q*LXZQU71100.[\,-HK41G3/R
-MG9DY$,].(M58U1\0XT\4R[<=RCCXM;_%AVM)``````````">````G@```!``
-M`&1D11```&1D(P@`10``D*85``!`$5`!P`$"%\`!`BT1E!&4`'P``!(T5G@`
-M```(*_3L6&DE`65QQPA"@BAQ5FY@=%,+]@C9K+O)@],/GCI4%,MKI282(0M9
-M*<@/=L.DB"**EM":*2KJK`^H=0YM,$^[`=L%(RO,O_<4`MNKJ*:^9W8@1BP$
-59LK`-:)VQ/=2B;1'4FV3B?L]2;O!
-`
-end
diff --git a/contrib/tcpdump/tests/forces1.out b/contrib/tcpdump/tests/forces1.out
deleted file mode 100644
index 7e013d7bd00d..000000000000
--- a/contrib/tcpdump/tests/forces1.out
+++ /dev/null
@@ -1,8 +0,0 @@
-IP 192.168.1.7.6700 > 192.168.1.7.34917: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3442086958] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
-
-IP 192.168.1.7.34917 > 192.168.1.7.6700: sctp[ForCES HP] (1) [SACK] [cum ack 3442086958] [a_rwnd 56288] [#gap acks 0] [#dup tsns 0]
-IP 192.168.1.7.34917 > 192.168.1.7.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 2574629157] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query Response
-
-IP 192.168.1.7.6700 > 192.168.1.7.34917: sctp[ForCES HP] (1) [SACK] [cum ack 2574629157] [a_rwnd 56296] [#gap acks 0] [#dup tsns 0]
diff --git a/contrib/tcpdump/tests/forces1.pcap b/contrib/tcpdump/tests/forces1.pcap
deleted file mode 100644
index 49c8f6453b68..000000000000
--- a/contrib/tcpdump/tests/forces1.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/forces1vvv.out b/contrib/tcpdump/tests/forces1vvv.out
deleted file mode 100644
index 886e42992ef6..000000000000
--- a/contrib/tcpdump/tests/forces1vvv.out
+++ /dev/null
@@ -1,52 +0,0 @@
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 112)
- 192.168.1.7.6700 > 192.168.1.7.34917: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3442086958] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
- ForCES Version 1 len 64B flags 0xf8000000
- SrcID 0x40000001(CE) DstID 0x7(FE) Correlator 0x2
- ForCES flags:
- AlwaysACK(0x3), prio=7, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
- LFBselect TLV, length 40 (data length 36 Bytes)
- FEObj LFB(Classid 1) instance 1
- Oper TLV Get(0x7) length 28
- PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
- Pathdata: Flags 0x0 ID count 1
- ID#01: 2
- PATH-DATA TLV, length 12 (data encapsulated 8 Bytes)
- Pathdata: Flags 0x0 ID count 1
- ID#01: 2
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 48)
- 192.168.1.7.34917 > 192.168.1.7.6700: sctp[ForCES HP]
- 1) [SACK] [cum ack 3442086958] [a_rwnd 56288] [#gap acks 0] [#dup tsns 0]
-IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 124)
- 192.168.1.7.34917 > 192.168.1.7.6700: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 2574629157] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query Response
- ForCES Version 1 len 76B flags 0x38000000
- SrcID 0x7(FE) DstID 0x40000001(CE) Correlator 0x2
- ForCES flags:
- NoACK(0x0), prio=7, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
- LFBselect TLV, length 52 (data length 48 Bytes)
- FEObj LFB(Classid 1) instance 1
- Oper TLV GetResp(0x9) length 40
- PATH-DATA TLV, length 36 (data encapsulated 32 Bytes)
- Pathdata: Flags 0x0 ID count 1
- ID#01: 2
- PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
- Pathdata: Flags 0x0 ID count 1
- ID#01: 2
- FULLDATA TLV (Length 12 DataLen 8 Bytes)
- [
- 0x0000: 0000 0002 0000 0001
- ]
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
- 192.168.1.7.6700 > 192.168.1.7.34917: sctp[ForCES HP]
- 1) [SACK] [cum ack 2574629157] [a_rwnd 56296] [#gap acks 0] [#dup tsns 0]
diff --git a/contrib/tcpdump/tests/forces1vvvv.out b/contrib/tcpdump/tests/forces1vvvv.out
deleted file mode 100644
index 4274ca33b863..000000000000
--- a/contrib/tcpdump/tests/forces1vvvv.out
+++ /dev/null
@@ -1,67 +0,0 @@
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 112)
- 192.168.1.7.6700 > 192.168.1.7.34917: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3442086958] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
- ForCES Version 1 len 64B flags 0xf8000000
- SrcID 0x40000001(CE) DstID 0x7(FE) Correlator 0x2
- ForCES flags:
- AlwaysACK(0x3), prio=7, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
- LFBselect TLV, length 40 (data length 36 Bytes)
- FEObj LFB(Classid 1) instance 1
- Oper TLV Get(0x7) length 28
- PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
- Pathdata: Flags 0x0 ID count 1
- ID#01: 2
- PATH-DATA TLV, length 12 (data encapsulated 8 Bytes)
- Pathdata: Flags 0x0 ID count 1
- ID#01: 2
-
- Raw ForCES message
- [
- 0x0000: 1004 0010 4000 0001 0000 0007 0000 0000
- 0x0010: 0000 0002 f800 0000 1000 0028 0000 0001
- 0x0020: 0000 0001 0007 001c 0110 0018 0000 0001
- 0x0030: 0000 0002 0110 000c 0000 0001 0000 0002
- ]
-
-IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 48)
- 192.168.1.7.34917 > 192.168.1.7.6700: sctp[ForCES HP]
- 1) [SACK] [cum ack 3442086958] [a_rwnd 56288] [#gap acks 0] [#dup tsns 0]
-IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 124)
- 192.168.1.7.34917 > 192.168.1.7.6700: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 2574629157] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query Response
- ForCES Version 1 len 76B flags 0x38000000
- SrcID 0x7(FE) DstID 0x40000001(CE) Correlator 0x2
- ForCES flags:
- NoACK(0x0), prio=7, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
- LFBselect TLV, length 52 (data length 48 Bytes)
- FEObj LFB(Classid 1) instance 1
- Oper TLV GetResp(0x9) length 40
- PATH-DATA TLV, length 36 (data encapsulated 32 Bytes)
- Pathdata: Flags 0x0 ID count 1
- ID#01: 2
- PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
- Pathdata: Flags 0x0 ID count 1
- ID#01: 2
- FULLDATA TLV (Length 12 DataLen 8 Bytes)
- [
- 0x0000: 0000 0002 0000 0001
- ]
-
- Raw ForCES message
- [
- 0x0000: 1014 0013 0000 0007 4000 0001 0000 0000
- 0x0010: 0000 0002 3800 0000 1000 0034 0000 0001
- 0x0020: 0000 0001 0009 0028 0110 0024 0000 0001
- 0x0030: 0000 0002 0110 0018 0000 0001 0000 0002
- 0x0040: 0112 000c 0000 0002 0000 0001
- ]
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
- 192.168.1.7.6700 > 192.168.1.7.34917: sctp[ForCES HP]
- 1) [SACK] [cum ack 2574629157] [a_rwnd 56296] [#gap acks 0] [#dup tsns 0]
diff --git a/contrib/tcpdump/tests/forces2.out b/contrib/tcpdump/tests/forces2.out
deleted file mode 100644
index a997b5946df7..000000000000
--- a/contrib/tcpdump/tests/forces2.out
+++ /dev/null
@@ -1,491 +0,0 @@
-IP 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 996458213] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Setup
-
-IP 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691905] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Response
-
-IP 150.140.188.146.32780 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 2256581227] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Setup
-
-IP 150.140.188.145.6700 > 150.140.188.146.32780: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3596535672] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Response
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632869] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244257] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.50001 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3118638120] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Setup
-
-IP 150.140.188.145.6700 > 150.140.188.175.50001: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3264258942] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Response
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073935] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825012] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632870] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632870] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019513] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437131] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073936] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825013] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632871] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244258] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019514] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437132] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073937] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825014] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632872] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244260] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019515] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437133] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073938] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825015] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632873] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244261] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019516] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437134] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073939] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825016] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691906] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
-
-IP 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691906] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
-
-IP 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 996458214] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query Response
-
-IP 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691906] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019517] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437135] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073940] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825017] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632874] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244262] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019518] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437136] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073941] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825018] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632875] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244263] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019519] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437137] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073942] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825019] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632876] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632876] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019520] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437138] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073943] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825020] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632877] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244264] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019521] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437139] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073944] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825021] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632878] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244266] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019522] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437140] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073945] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825022] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632879] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244267] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019523] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437141] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073946] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825023] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632880] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632880] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019524] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437142] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073947] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691907] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES Config
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825024] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 996458215] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES Config Response
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019525] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437143] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073948] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632881] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825025] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632881] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019526] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437144] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073949] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632882] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825026] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244269] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019527] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437145] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073950] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825027] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632883] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244271] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019528] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437146] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073951] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825028] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632884] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244272] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019529] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437147] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073952] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825029] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632885] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244273] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691908] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES Config
-
-IP 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 996458216] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES Config Response
-
-IP 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691908] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES Config
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019530] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437148] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073953] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825030] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632886] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019531] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437149] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073954] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825031] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632887] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019532] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437150] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244274] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
-, (2) [DATA] (B)(E) [TSN: 1662244278] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073955] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825032] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632888] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019533] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437151] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073956] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825033] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632889] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244279] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019534] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437152] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244283] [SID: 0] [SSEQ 26] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073957] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825034] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632890] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244284] [SID: 0] [SSEQ 27] [PPID 0x0]
- ForCES HeartBeat
-
-IP 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244285] [SID: 0] [SSEQ 28] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019535] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437153] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073958] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825035] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019536] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437154] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073959] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825036] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019537] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437155] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073960] [SID: 0] [SSEQ 25] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825037] [SID: 0] [SSEQ 25] [PPID 0x0]
- ForCES HeartBeat
-
-IP 150.140.188.145.6700 > 150.140.188.146.32780: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3596535673] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Association TearDown
-
-IP 150.140.188.145.6700 > 150.140.188.175.50001: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3264258943] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Association TearDown
-
diff --git a/contrib/tcpdump/tests/forces2.pcap b/contrib/tcpdump/tests/forces2.pcap
deleted file mode 100644
index 6970b348782a..000000000000
--- a/contrib/tcpdump/tests/forces2.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/forces2v.out b/contrib/tcpdump/tests/forces2v.out
deleted file mode 100644
index dff4df56459d..000000000000
--- a/contrib/tcpdump/tests/forces2v.out
+++ /dev/null
@@ -1,982 +0,0 @@
-IP (tos 0x0, ttl 43, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 996458213] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Setup
- ForCES Version 1 len 24B flags 0xf8000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691905] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Response
- ForCES Version 1 len 32B flags 0x38100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32780 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 2256581227] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Setup
- ForCES Version 1 len 24B flags 0xf8000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
- 150.140.188.145.6700 > 150.140.188.146.32780: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3596535672] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Response
- ForCES Version 1 len 32B flags 0x38100000
- SrcID 0x40000001(CE) DstID 0x6(FE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632869] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x1
-
-IP (tos 0x0, ttl 43, id 2, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244257] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.50001 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3118638120] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Setup
- ForCES Version 1 len 24B flags 0xf8000000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
- 150.140.188.145.6700 > 150.140.188.175.50001: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3264258942] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Response
- ForCES Version 1 len 32B flags 0x38100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073935] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825012] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632870] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x2
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632870] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x2
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019513] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437131] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x1
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073936] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x2
-
-IP (tos 0x2,ECT(0), ttl 64, id 3, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825013] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x2
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632871] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x3
-
-IP (tos 0x0, ttl 43, id 7, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244258] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x2
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019514] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x2
-
-IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437132] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x2
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073937] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x3
-
-IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825014] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x3
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632872] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x4
-
-IP (tos 0x0, ttl 43, id 8, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244260] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x4
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019515] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x3
-
-IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437133] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x3
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073938] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x4
-
-IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825015] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x4
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632873] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x5
-
-IP (tos 0x0, ttl 43, id 10, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244261] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x5
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019516] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x4
-
-IP (tos 0x2,ECT(0), ttl 64, id 9, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437134] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x4
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073939] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x5
-
-IP (tos 0x2,ECT(0), ttl 64, id 10, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825016] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x5
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 152)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691906] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
- ForCES Version 1 len 104B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x6
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 152)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691906] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
- ForCES Version 1 len 104B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x6
-
-IP (tos 0x0, ttl 43, id 9, offset 0, flags [DF], proto SCTP (132), length 372)
- 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 996458214] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query Response
- ForCES Version 1 len 324B flags 0x38400000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x6
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 152)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691906] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
- ForCES Version 1 len 104B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x6
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019517] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x5
-
-IP (tos 0x2,ECT(0), ttl 64, id 11, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437135] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x5
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073940] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x6
-
-IP (tos 0x2,ECT(0), ttl 64, id 12, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825017] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x6
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632874] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x7
-
-IP (tos 0x0, ttl 43, id 14, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244262] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x7
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019518] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x6
-
-IP (tos 0x2,ECT(0), ttl 64, id 13, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437136] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x6
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073941] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x7
-
-IP (tos 0x2,ECT(0), ttl 64, id 14, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825018] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x7
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632875] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x8
-
-IP (tos 0x0, ttl 43, id 16, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244263] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x8
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019519] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x7
-
-IP (tos 0x2,ECT(0), ttl 64, id 15, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437137] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x7
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073942] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x8
-
-IP (tos 0x2,ECT(0), ttl 64, id 16, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825019] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x8
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632876] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x9
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632876] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x9
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019520] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x8
-
-IP (tos 0x2,ECT(0), ttl 64, id 17, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437138] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x8
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073943] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x9
-
-IP (tos 0x2,ECT(0), ttl 64, id 18, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825020] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x9
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632877] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x10
-
-IP (tos 0x0, ttl 43, id 22, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244264] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x9
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019521] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x9
-
-IP (tos 0x2,ECT(0), ttl 64, id 19, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437139] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x9
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073944] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x10
-
-IP (tos 0x2,ECT(0), ttl 64, id 20, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825021] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x10
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632878] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x11
-
-IP (tos 0x0, ttl 43, id 23, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244266] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x11
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019522] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x10
-
-IP (tos 0x2,ECT(0), ttl 64, id 21, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437140] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x10
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073945] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x11
-
-IP (tos 0x2,ECT(0), ttl 64, id 22, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825022] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x11
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632879] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x12
-
-IP (tos 0x0, ttl 43, id 25, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244267] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x12
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019523] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x11
-
-IP (tos 0x2,ECT(0), ttl 64, id 23, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437141] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x11
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073946] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x12
-
-IP (tos 0x2,ECT(0), ttl 64, id 24, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825023] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x12
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632880] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x13
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632880] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x13
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019524] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x12
-
-IP (tos 0x2,ECT(0), ttl 64, id 25, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437142] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x12
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073947] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x13
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 148)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691907] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES Config
- ForCES Version 1 len 100B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x14
-
-IP (tos 0x2,ECT(0), ttl 64, id 26, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825024] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x13
-
-IP (tos 0x0, ttl 43, id 21, offset 0, flags [DF], proto SCTP (132), length 124)
- 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 996458215] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES Config Response
- ForCES Version 1 len 76B flags 0x38400000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x14
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019525] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x13
-
-IP (tos 0x2,ECT(0), ttl 64, id 27, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437143] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x13
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073948] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x14
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632881] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x15
-
-IP (tos 0x2,ECT(0), ttl 64, id 28, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825025] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x14
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632881] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x15
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019526] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x14
-
-IP (tos 0x2,ECT(0), ttl 64, id 29, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437144] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x14
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073949] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x15
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632882] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x16
-
-IP (tos 0x2,ECT(0), ttl 64, id 30, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825026] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x15
-
-IP (tos 0x0, ttl 43, id 35, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244269] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x15
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019527] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x15
-
-IP (tos 0x2,ECT(0), ttl 64, id 31, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437145] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x15
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073950] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x16
-
-IP (tos 0x2,ECT(0), ttl 64, id 31, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825027] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x16
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632883] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x17
-
-IP (tos 0x0, ttl 43, id 36, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244271] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x17
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019528] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x16
-
-IP (tos 0x2,ECT(0), ttl 64, id 33, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437146] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x16
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073951] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x17
-
-IP (tos 0x2,ECT(0), ttl 64, id 33, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825028] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x17
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632884] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x18
-
-IP (tos 0x0, ttl 43, id 38, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244272] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x18
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019529] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x17
-
-IP (tos 0x2,ECT(0), ttl 64, id 35, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437147] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x17
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073952] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x18
-
-IP (tos 0x2,ECT(0), ttl 64, id 35, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825029] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x18
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632885] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x19
-
-IP (tos 0x0, ttl 43, id 40, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244273] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x19
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 128)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691908] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES Config
- ForCES Version 1 len 80B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x20
-
-IP (tos 0x0, ttl 43, id 29, offset 0, flags [DF], proto SCTP (132), length 128)
- 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 996458216] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES Config Response
- ForCES Version 1 len 80B flags 0x38400000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x20
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 128)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3761691908] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES Config
- ForCES Version 1 len 80B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x20
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019530] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x18
-
-IP (tos 0x2,ECT(0), ttl 64, id 37, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437148] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x18
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073953] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x19
-
-IP (tos 0x2,ECT(0), ttl 64, id 37, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825030] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x19
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632886] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x21
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019531] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x19
-
-IP (tos 0x2,ECT(0), ttl 64, id 39, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437149] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x19
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073954] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x20
-
-IP (tos 0x2,ECT(0), ttl 64, id 40, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825031] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x20
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632887] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x22
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019532] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x20
-
-IP (tos 0x2,ECT(0), ttl 64, id 41, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437150] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x20
-
-IP (tos 0x0, ttl 43, id 46, offset 0, flags [DF], proto SCTP (132), length 112)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244274] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x1
-, (2) [DATA] (B)(E) [TSN: 1662244278] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x3
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073955] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x21
-
-IP (tos 0x2,ECT(0), ttl 64, id 42, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825032] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x21
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632888] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x23
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019533] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x21
-
-IP (tos 0x2,ECT(0), ttl 64, id 43, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437151] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x21
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073956] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x22
-
-IP (tos 0x2,ECT(0), ttl 64, id 44, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825033] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x22
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632889] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x24
-
-IP (tos 0x0, ttl 43, id 50, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244279] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x4
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019534] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x22
-
-IP (tos 0x2,ECT(0), ttl 64, id 45, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437152] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x22
-
-IP (tos 0x0, ttl 43, id 51, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244283] [SID: 0] [SSEQ 26] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x6
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073957] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x23
-
-IP (tos 0x2,ECT(0), ttl 64, id 46, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825034] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x23
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2633632890] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x25
-
-IP (tos 0x0, ttl 43, id 52, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244284] [SID: 0] [SSEQ 27] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x25
-
-IP (tos 0x0, ttl 43, id 54, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1662244285] [SID: 0] [SSEQ 28] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x7
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019535] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x23
-
-IP (tos 0x2,ECT(0), ttl 64, id 47, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437153] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x23
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073958] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x24
-
-IP (tos 0x2,ECT(0), ttl 64, id 48, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825035] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x24
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019536] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x24
-
-IP (tos 0x2,ECT(0), ttl 64, id 49, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437154] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x24
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073959] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x25
-
-IP (tos 0x2,ECT(0), ttl 64, id 50, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825036] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x25
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1724019537] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x25
-
-IP (tos 0x2,ECT(0), ttl 64, id 51, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3749437155] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x25
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 3406073960] [SID: 0] [SSEQ 25] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x26
-
-IP (tos 0x2,ECT(0), ttl 64, id 52, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 2826825037] [SID: 0] [SSEQ 25] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x26
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
- 150.140.188.145.6700 > 150.140.188.146.32780: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3596535673] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Association TearDown
- ForCES Version 1 len 32B flags 0x38100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x0
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
- 150.140.188.145.6700 > 150.140.188.175.50001: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 3264258943] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Association TearDown
- ForCES Version 1 len 32B flags 0x38100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x0
-
diff --git a/contrib/tcpdump/tests/forces2vv.out b/contrib/tcpdump/tests/forces2vv.out
deleted file mode 100644
index d43de7435bd7..000000000000
--- a/contrib/tcpdump/tests/forces2vv.out
+++ /dev/null
@@ -1,1966 +0,0 @@
-IP (tos 0x0, ttl 43, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 996458213] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Setup
- ForCES Version 1 len 24B flags 0xf8000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x1
- ForCES flags:
- AlwaysACK(0x3), prio=7, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3761691905] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Response
- ForCES Version 1 len 32B flags 0x38100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x1
- ForCES flags:
- NoACK(0x0), prio=7, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32780 > 150.140.188.145.6700: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 2256581227] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Setup
- ForCES Version 1 len 24B flags 0xf8000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x1
- ForCES flags:
- AlwaysACK(0x3), prio=7, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
- 150.140.188.145.6700 > 150.140.188.146.32780: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3596535672] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Response
- ForCES Version 1 len 32B flags 0x38100000
- SrcID 0x40000001(CE) DstID 0x6(FE) Correlator 0x1
- ForCES flags:
- NoACK(0x0), prio=7, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632869] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x1
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 2, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244257] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x1
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.50001 > 150.140.188.145.6700: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3118638120] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Setup
- ForCES Version 1 len 24B flags 0xf8000000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x1
- ForCES flags:
- AlwaysACK(0x3), prio=7, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
- 150.140.188.145.6700 > 150.140.188.175.50001: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3264258942] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES Association Response
- ForCES Version 1 len 32B flags 0x38100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x1
- ForCES flags:
- NoACK(0x0), prio=7, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073935] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x1
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825012] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x1
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632870] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x2
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632870] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x2
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019513] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x1
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437131] [SID: 0] [SSEQ 0] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x1
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073936] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x2
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 3, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825013] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x2
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632871] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x3
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 7, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244258] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x2
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019514] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x2
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437132] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x2
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073937] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x3
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825014] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x3
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632872] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x4
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 8, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244260] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x4
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019515] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x3
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437133] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x3
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073938] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x4
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825015] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x4
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632873] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x5
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 10, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244261] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x5
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019516] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x4
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 9, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437134] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x4
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073939] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x5
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 10, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825016] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x5
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 152)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3761691906] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
- ForCES Version 1 len 104B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x6
- ForCES flags:
- AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 152)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3761691906] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
- ForCES Version 1 len 104B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x6
- ForCES flags:
- AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 9, offset 0, flags [DF], proto SCTP (132), length 372)
- 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 996458214] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query Response
- ForCES Version 1 len 324B flags 0x38400000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x6
- ForCES flags:
- NoACK(0x0), prio=7, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 152)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3761691906] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Query
- ForCES Version 1 len 104B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x6
- ForCES flags:
- AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019517] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x5
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 11, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437135] [SID: 0] [SSEQ 4] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x5
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073940] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x6
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 12, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825017] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x6
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632874] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x7
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 14, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244262] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x7
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019518] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x6
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 13, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437136] [SID: 0] [SSEQ 5] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x6
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073941] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x7
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 14, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825018] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x7
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632875] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x8
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 16, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244263] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x8
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019519] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x7
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 15, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437137] [SID: 0] [SSEQ 6] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x7
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073942] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x8
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 16, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825019] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x8
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632876] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x9
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632876] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x9
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019520] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x8
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 17, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437138] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x8
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073943] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x9
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 18, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825020] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x9
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632877] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x10
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 22, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244264] [SID: 0] [SSEQ 7] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x9
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019521] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x9
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 19, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437139] [SID: 0] [SSEQ 8] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x9
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073944] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x10
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 20, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825021] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x10
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632878] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x11
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 23, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244266] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x11
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019522] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x10
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 21, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437140] [SID: 0] [SSEQ 9] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x10
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073945] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x11
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 22, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825022] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x11
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632879] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x12
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 25, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244267] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x12
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019523] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x11
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 23, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437141] [SID: 0] [SSEQ 10] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x11
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073946] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x12
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 24, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825023] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x12
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632880] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x13
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632880] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x13
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019524] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x12
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 25, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437142] [SID: 0] [SSEQ 11] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x12
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073947] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x13
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 148)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3761691907] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES Config
- ForCES Version 1 len 100B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x14
- ForCES flags:
- AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 26, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825024] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x13
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 21, offset 0, flags [DF], proto SCTP (132), length 124)
- 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 996458215] [SID: 0] [SSEQ 2] [PPID 0x0]
- ForCES Config Response
- ForCES Version 1 len 76B flags 0x38400000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x14
- ForCES flags:
- NoACK(0x0), prio=7, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019525] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x13
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 27, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437143] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x13
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073948] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x14
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632881] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x15
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 28, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825025] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x14
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632881] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x15
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019526] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x14
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 29, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437144] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x14
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073949] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x15
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632882] [SID: 0] [SSEQ 13] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x16
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 30, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825026] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x15
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 35, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244269] [SID: 0] [SSEQ 12] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x15
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019527] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x15
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 31, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437145] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x15
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073950] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x16
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 31, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825027] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x16
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632883] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x17
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 36, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244271] [SID: 0] [SSEQ 14] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x17
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019528] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x16
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 33, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437146] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x16
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073951] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x17
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 33, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825028] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x17
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632884] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x18
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 38, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244272] [SID: 0] [SSEQ 15] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x18
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019529] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x17
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 35, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437147] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x17
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073952] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x18
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 35, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825029] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x18
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632885] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x19
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 40, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244273] [SID: 0] [SSEQ 16] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x19
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 128)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3761691908] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES Config
- ForCES Version 1 len 80B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x20
- ForCES flags:
- AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 29, offset 0, flags [DF], proto SCTP (132), length 128)
- 122.234.155.8.32820 > 150.140.188.145.6700: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 996458216] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES Config Response
- ForCES Version 1 len 80B flags 0x38400000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x20
- ForCES flags:
- NoACK(0x0), prio=7, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 128)
- 150.140.188.145.6700 > 122.234.155.8.32820: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3761691908] [SID: 0] [SSEQ 3] [PPID 0x0]
- ForCES Config
- ForCES Version 1 len 80B flags 0xf8400000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x20
- ForCES flags:
- AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019530] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x18
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 37, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437148] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x18
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073953] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x19
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 37, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825030] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x19
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632886] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x21
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019531] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x19
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 39, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437149] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x19
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073954] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x20
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 40, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825031] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x20
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632887] [SID: 0] [SSEQ 18] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x22
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019532] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x20
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 41, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437150] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x20
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 46, offset 0, flags [DF], proto SCTP (132), length 112)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244274] [SID: 0] [SSEQ 17] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x1
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
- 2) [DATA] (B)(E) [TSN: 1662244278] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x3
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073955] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x21
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 42, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825032] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x21
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632888] [SID: 0] [SSEQ 19] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x23
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019533] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x21
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 43, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437151] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x21
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073956] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x22
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 44, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825033] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x22
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632889] [SID: 0] [SSEQ 20] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x24
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 50, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244279] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x4
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019534] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x22
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 45, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437152] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x22
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 51, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244283] [SID: 0] [SSEQ 26] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x6
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073957] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x23
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 46, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825034] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x23
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 122.234.155.8.32821: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2633632890] [SID: 0] [SSEQ 21] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x3(FE) Correlator 0x25
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 52, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244284] [SID: 0] [SSEQ 27] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x25
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x0, ttl 43, id 54, offset 0, flags [DF], proto SCTP (132), length 72)
- 122.234.155.8.32821 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1662244285] [SID: 0] [SSEQ 28] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0000000
- SrcID 0x3(FE) DstID 0x40000000(CE) Correlator 0x7
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019535] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x23
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 47, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437153] [SID: 0] [SSEQ 22] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x23
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073958] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x24
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 48, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825035] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x24
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019536] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x24
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 49, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437154] [SID: 0] [SSEQ 23] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x24
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073959] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x25
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 50, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825036] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x25
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.175.41074: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 1724019537] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x25
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 51, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.175.41074 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3749437155] [SID: 0] [SSEQ 24] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00400000
- SrcID 0x1(FE) DstID 0x40000000(CE) Correlator 0x25
- ForCES flags:
- NoACK(0x0), prio=0, execute-all-or-none(0x1),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.145.6702 > 150.140.188.146.32782: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 3406073960] [SID: 0] [SSEQ 25] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0xc0100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x26
- ForCES flags:
- AlwaysACK(0x3), prio=0, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 52, offset 0, flags [DF], proto SCTP (132), length 72)
- 150.140.188.146.32782 > 150.140.188.145.6702: sctp[ForCES LP]
- 1) [DATA] (B)(E) [TSN: 2826825037] [SID: 0] [SSEQ 25] [PPID 0x0]
- ForCES HeartBeat
- ForCES Version 1 len 24B flags 0x00000000
- SrcID 0x6(FE) DstID 0x40000001(CE) Correlator 0x26
- ForCES flags:
- NoACK(0x0), prio=0, EMReserved(0x0),
- Standalone(0x0), StartofTransaction(0x0)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
- 150.140.188.145.6700 > 150.140.188.146.32780: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3596535673] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Association TearDown
- ForCES Version 1 len 32B flags 0x38100000
- SrcID 0x40000000(CE) DstID 0x6(FE) Correlator 0x0
- ForCES flags:
- NoACK(0x0), prio=7, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
-IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
- 150.140.188.145.6700 > 150.140.188.175.50001: sctp[ForCES HP]
- 1) [DATA] (B)(E) [TSN: 3264258943] [SID: 0] [SSEQ 1] [PPID 0x0]
- ForCES Association TearDown
- ForCES Version 1 len 32B flags 0x38100000
- SrcID 0x40000000(CE) DstID 0x1(FE) Correlator 0x0
- ForCES flags:
- NoACK(0x0), prio=7, EMReserved(0x0),
- Standalone(0x0), EndofTransaction(0x2)
- Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
-
-
diff --git a/contrib/tcpdump/tests/ikev2.puu b/contrib/tcpdump/tests/ikev2.puu
deleted file mode 100644
index 85b773fd3a5d..000000000000
--- a/contrib/tcpdump/tests/ikev2.puu
+++ /dev/null
@@ -1,22231 +0,0 @@
-begin 644 ikev2.pcap
-MU,.RH0(`!````````````-P%````````1!*W1JWG!0"8`0``F`$```(```!%
-M``&43<0``$`1``#`J`$!P*@!`@'T`?0!@`=EJ(AUJ!F)DJ8``````````"$@
-M(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``M41;U@SLYOW-/):E++M[M":HQZ#U:IPXT;'$\,.FZ.?;I<<SFV[0+G5Q
-M&=^UMI,\Z3M@28?[O'<B&RH,?-TR>'[_$%<K[U1L-A1B^=HTA'EII"Y1QU69
-M:^K$+F^ZEAIUW@_!LC\)DX");NB2`A(M[:P;U4JH24K#UT"^32I,\YTI```D
-M82CKT".H9.E*?_MTOWS.+]0V<R*XL'/Y0B@KU2Z_X^8I```<``!`!$0O_EKJ
-M#.Y-NLQUCH`2,[W`F@J_````'```0`6Z!!M=Y9E5D`V!BL5.&+(V<YV>BT02
-MMT9`]@4`7````%P````"````10``6$W%``!`$0``P*@!`<"H`0(!]`'T`$0&
-M*:B(=:@9B9*F```````````I("(@`````````#P````@``!`!@````'"(AY0
-MP6X2/RL,<:[\\,L[>8>"QD02MT8;!08`N`$``+@!```"````10`!M$W&``!`
-M$0``P*@!`<"H`0(!]`'T`:`'A:B(=:@9B9*F```````````I("((````````
-M`9@A```@``!`!@````'"(AY0P6X2/RL,<:[\\,L[>8>"QB(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``M41;U@SLYOW-/):E++M[M":H
-MQZ#U:IPXT;'$\,.FZ.?;I<<SFV[0+G5Q&=^UMI,\Z3M@28?[O'<B&RH,?-TR
-M>'[_$%<K[U1L-A1B^=HTA'EII"Y1QU69:^K$+F^ZEAIUW@_!LC\)DX");NB2
-M`A(M[:P;U4JH24K#UT"^32I,\YTI```D82CKT".H9.E*?_MTOWS.+]0V<R*X
-ML'/Y0B@KU2Z_X^8I```<``!`!$0O_EKJ#.Y-NLQUCH`2,[W`F@J_````'```
-M0`6Z!!M=Y9E5D`V!BL5.&+(V<YV>BT02MT9-*`8`4`$``%`!```"````10`!
-M3$W'``!`$0``P*@!`<"H`0(!]`'T`3@'':B(=:@9B9*F<;Z#6.^N=F,A("(@
-M`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#
-M```"````"`0```(H``"(``(``%I6<4TZOV3CH_0!ZMGU,C_PMW^J7QZ9&9L3
-MK((?"@Q/A4>&R@FWIVJE"+SN$?%C::%M7Z!!RBV:C?J"*,8?)(+2%UQ<&I21
-M_"(;['H?II]E;4R8NDFNG7(=[?2@+7[-_"`=QX6A/M=.3SF"=BHG(/_?PV7N
-M3C<GFO26S8;X@?T5*0``)+,<-Y\G+.*82]%\HXR'*>'MO`@:%/L/9\_X%R'?
-M[L'Y*0``'```0`3^*_M\+('M"V'W5K5_K'BG7.V*]@```!P``$`%D%E4IX.^
-M+#?BS,3]TG"E,MOF]"A$$K=&E%0&``P!```,`0```@```$4``0A-R```0!$`
-M`,"H`0'`J`$"`?0!]`#T!]FHB'6H&8F2IG&^@UCOKG9C+B`C"`````$```#L
-M(P``T/8&$UK3<^<(-OVI&V/*3&".&M6"&$B,)D?_'HJ1*5BJ=^^\,&BBKFJW
-MP]#+'F^X9-^9QB\LP$5P@(1P@52CD\+TR^^M'VA(4EU)VU8^$S1:3FXOT&;`
-M3BSBD?1Q2Z[&OS*#5L1&)'RK@UO:/HX:KEEG)(\!ZSH<`J5!M-H)LR=K0`U0
-MH&=4*F>$:,7T'E0!?`"63Q`#^,B(EJ;Q(A6E\:!@<3S(.`+*XZON&$%\##7<
-M;UB@&MN6[1P`G&CC!IKG#TL0K[=S;!$:WDV";D02MT;S:P8`O````+P````"
-M````10``N$W)``!`$0``P*@!`<"H`0(!]`'T`*0&B:B(=:@9B9*F<;Z#6.^N
-M=F,N(",@`````0```)PD``"`:OZ5O%%'L*U^3,N10<%@I$]\;MW&LIU!2M7B
-MN()43]QL/N:8.N%`BU=DL6230X=D5-&_35%:KP/!7J_G&^:TSU&K8&,,1;SP
-MXJ+;CNYP"5I.`0_;-"K;;0/:Y=[YU)!\W\C,UO/:FW27Q8Z$J5+9@[K[E!JQ
-MWAL+N?^M.T02MT8RB@8`'`$``!P!```"````10`!&$W*``!`$0``P*@!`<"H
-M`0(!]`'T`00'Z:B(=:@9B9*F<;Z#6.^N=F,N("0(`````@```/PA``#@4\QL
-M"T'Q3D_`5\?VHU)*W>A2'R;V?`6$,*D"VQI2[1;3(F,-+K45-RW!+9?<?"!5
-M)@?B[1D]FS.3GA"J+\-[89GPIBG&M8$U];;YX'D&S3#</*Y]5?X(V5T^9@IB
-M-S'#EJ,EK;_Q'$D/G]$"(D.1IE^WN^ABE%MDSQ^X,[G.:,@]\+G2SGO53V4(
-M9*^41>5'S?Y<JCDS1*Y2=),[?OSV%H(>I]JIQ:;H)UK6QHAP#+?TO-;[@"7I
-M.[;=7U@?KKR^RWF,AV%Z3L&P:Z*0K%_!UN3"<EP?GPX0L43[OD02MT9TE08`
-M_````/P````"````10``^$W+``!`$0``P*@!`<"H`0(!]`'T`.0&R:B(=:@9
-MB9*F<;Z#6.^N=F,N("0(`````P```-PA``#`E@/@/R@)9'@G%]H5I0+PJ>GQ
-M?;]$A\:2//`+<$#5.;R4?'!7D.3IFX-*>N*HUY]6(.$6%>"G8HB:JX(>#0,3
-M+?N,QK-QA8)!&\V8PD*HL0IF)TVN'.!5^S"DT^9,EIOFX(MB:5CT1&QN2@R-
-M>B12*5G&%2YCI77`:3#""74YO[W_",<%,T*,]K12X+BP)9PBDI)=+M8NB5:\
-M?CJ1&F%0F^&LCWM\U&-A=N4D]-#Q=7/RKMW.(E'];5V<U4U$$K=&4Z`&`&P`
-M``!L`````@```$4``&A-S```0!$``,"H`0'`J`$"`?0!]`!4!CFHB'6H&8F2
-MIG&^@UCOKG9C+B`D(`````(```!,*0``,%O2TFRT.VSL,-[!/Z.'-9>7NO>T
-M'G@T(KQ-J_70.K)"#2=].R\HT?`#VIC11!*W1A"[!@!L````;`````(```!%
-M``!H3<T``$`1``#`J`$!P*@!`@'T`?0`5`8YJ(AUJ!F)DJ9QOH-8[ZYV8RX@
-M)"`````#````3"D``#`X]@JVD1"6>6&N!*].1Z=P)@UAXIT8^Q/."3I'EP!H
-MVLLT+WF9S#T-6?=ZE$02MT9=U`8`/`$``#P!```"````10`!.$W.``!`$0``
-MP*@!`<"H`0(!]`'T`20'":B(=:@9B9*F<;Z#6.^N=F,N("0(````!````1PA
-M``$`Q_+QS$F7LPIA8C(BU+^U-;JC`AF<38P?W/IT6PLIM>=AC_`U:$A$324!
-M#EK4('8(D.W@9L@X)ILBV>,-3^P:`2YS&B$,)#^`.V89<-,NF8Z1GU<\5T+2
-M*(E)!2Q:1J#-?$H:*5[>*6Q/V8.;9-Q)1.$:-?0JC.&+1'(`_0/;U8IQ6#LZ
-M)\.`%(R`'.%$4O?75K'U6Q"X2EC/J5)@`?_W%7%49%`BY$5@A5%\[MF+>>(.
-MTS*7SUK8`H?G@G**C&N'TK0BY^[:''*S/KQ1I;=M[YI9_]&T^7WLB,(J3U1(
-MIQKNWR#(?:Y;1,TN>E&=<9I0GX/SLOKV]<8'VF"?1!*W1A7@!@`<`0``'`$`
-M``(```!%``$83<\``$`1``#`J`$!P*@!`@'T`?0!!`?IJ(AUJ!F)DJ9QOH-8
-M[ZYV8RX@)`@````%````_"$``.#:YA-*G/\:3CS%FGG@&:D_A&G=3B^JJM'#
-MK[HB[-$H_;'HE4QU/X]BKK:JR7,O04L&7L.5::9POFF`R!ZSY$O)/L8^FG5-
-M!%;&<#S7&#<>WN]G22@8#YT4PYY2SZ2E%S:.?;+Z"_VT'/5MEP!B,Q`_(F4/
-MW-7_JX08Y`D#Y'2>$FT&Z=PJ&,_5O]H`$^/IZU/GF[XPZM\/3=SONK#`CH<+
-M*=.;)`''6VC\1J!F>"A7RDC51^00K!7*NV<XAU(`M37+V:X>'.F8.<G"5CD'
-M#E[9=X"<4+:[E5"U"TF[1!*W1I_N!@#L````[`````(```!%``#H3=```$`1
-M``#`J`$!P*@!`@'T`?0`U`:YJ(AUJ!F)DJ9QOH-8[ZYV8RX@)"`````$````
-MS"$``+`?V%%K5[&K&]O-NADPI0E][,`CQ<4T27RE/Q>+G4T1(H=&14-QL,QN
-MP&?A3AY<5E*$#/VN#JA,?PIN>9_W^Q,=%78_[O1>@/)'%LWD?2-2?VC@5:?#
-MK<<B5(DI7AO#\0*;8X(H<H9=]5QL)UWJV*;V2]J*Y$]"PQCZ<>L$[M<Q+:_2
-MW89E_5TR)?.JYO<S6U@<.HG`>O$`F''>J9)_!&0RS0&P0C0@30%8.Z\Z1!*W
-M1G4.!P#L````[`````(```!%``#H3=$``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-MJ(AUJ!F)DJ9QOH-8[ZYV8RX@)"`````%````S"$``+#V_($3\TN2ZWU96@2/
-M5]1EDT0:V:89&>61GGWD14^C6(*3?3MTR#JY6?T%/&H2I1L$H.DN`6@W@F6+
-MN:\KO,>DO5X>[RV\W'<5RL;J[/O,!1I&\B8]&X.'O:U^:,;DNAOI>4X6/DA'
-M:)E:GTH8[<O&I$\*=,L!PQCGA(5BX(9O.(N-!/%/&OA]Y]YL[A^(G4,PV"DR
-MIQ)[?1J33F0<,K=N,[-W!M4"AOC+XS6Z1!*W1F@L!P`\`0``/`$```(```!%
-M``$X3=(``$`1``#`J`$!P*@!`@'T`?0!)`<)J(AUJ!F)DJ9QOH-8[ZYV8RX@
-M)`@````&```!'"$``0`*HF-J.XE_\_J`DR@JT7).R?,FMDOYF.>!UNV[=Z-I
-MJ$1-Q'I-P)7KTZP['<,W5PO$+)/-;<MRB;R9J0ATYFS$[>>A.EC.%\9;&%Z&
-MWO@]9O3$W<0SYFNO&#3E0I9G$U>E$YL+8^OS+F4M\).+K>I:E@[A=8X`^J9#
-MOMA?>M[BXN=;KNR>#?B(5Z9\I?*B])&="R<C$]0L>1ZW7^RA175J#,KC9`[I
-MC!9HG?411#(HA&TL6X@PZFT4G!J^T1K0HHRC.9,#;I&674BH*HF!1:VIE*]5
-MEX:62`JVRVE^$^9Y:*=TC#,X>&[[=R4.5!&SI^K(3-(A,DO7N1"=FFE$$K=&
-M=S8'`!P!```<`0```@```$4``1A-TP``0!$``,"H`0'`J`$"`?0!]`$$!^FH
-MB'6H&8F2IG&^@UCOKG9C+B`D"`````<```#\(0``X`+'`_2]V#)&K<9^'*!]
-M?GS^(;:]Z48W:`HS*!.XI,I'-!J].IPW)CB6P()2O['J;'ZD1X.Y*L4JRT^_
-M[%/P-50H'&-W90P)((\]=XL1YWM?O9@[X>EFF2,CDN\QI0']ISQA4/S"Z`NK
-M'@U)A%O5U1'WR2A>P(-2:'HJR-<-#>PT=DD<0+E\N=I`5@;\7HU&N^&9YMD:
-MZ9.W^J!8/L0I:H"!+[?@KHC3O53$HPY>VR=XR6#SX,M;$VGIF?A-Y-QRM=`&
-M@%[[?BTNU`,^$?^5>`$M(I0N-YG)."4&H"%$$K=&#D8'`.P```#L`````@``
-M`$4``.A-U```0!$``,"H`0'`J`$"`?0!]`#4!KFHB'6H&8F2IG&^@UCOKG9C
-M+B`D(`````8```#,(0``L'XN9B/&;A8=Z60:Q^&VW]SSI?1;OM$COHCS=4T2
-M440$K\!4L\?WB>M2I#*D.#6=WC$5+!&XT@D@/6)WG*!D@CUP4VQ`^$;4/6:4
-MHO$J,7;U<`>C4&R"__KSV[<3N]NU]4"WLYKN/)<45G%00U8)7WJPQ:A#1\`F
-MB\XEG*4;2BW76GXZ?N>?.__%C2_`K#9H8BGR,)M<T,#<PJ]YAF3!3U\6:K7C
-MP?:3"2$AJD1$$K=&D&<'`.P```#L`````@```$4``.A-U0``0!$``,"H`0'`
-MJ`$"`?0!]`#4!KFHB'6H&8F2IG&^@UCOKG9C+B`D(`````<```#,(0``L'M4
-M4#.BTUWRJY\FQ+Q$1Q.1"C+F#[!,L0J>=F-'A_G=P3C&>2^J!TOBZ\M#^#]$
-M0DEGD!CL;<?4XB1]V,N15WC9#Z59?Q[+J$<=M3X[3:CW/1ZV#"/*G[7Z69W%
-M)JEA-D1QM)Y2B/SO:B30*@A-*<2EQ='Z,%,0VZ`="<G#;(;`KRE^!=/\A5FA
-M%F:D-CNLPU3I;)032;/V#=.7ZTPKL)\X&#$6?`LS:&QKM=A$$K=&*HP'`(P!
-M``",`0```@```$4``8A-U@``0!$``,"H`0'`J`$"`?0!]`%T!UFHB'6H&8F2
-MIG&^@UCOKG9C+B`D"`````@```%L(0`!4,2_B>QN>3:LF*0RI27"0&WI0+,X
-MR12<X9RQOR.FG?U('?>SK:&MNW"_%P=&0^WY?F.MY>T']T9T\FQ(TM:I!$1W
-M[I\@,(3";H5`68?LBY:3WJZB#.>,*D4;].@TU[S#Q4P3(K7RBZ,'\LXQH`52
-MN7N/P0.BG^XN`$#,W?H0OSJST2">9#PBC>Q74D#'O74,]-;0;)6/9KV*>8,=
-M^''V^]D^`EL6O0/>-?_-NKK&57#2-GYB39^.A6#:F\.B%"MU`(M\ZXZ#G;]"
-M7:=,2^%<G<,7->\:QO9<(W4$+<^6@M]T)9N,1#?7[HWQG^INP=6]210)S')V
-MUP[@NI%RM!=_O.?Z*!<:(VRHXN#!2>8"R<:@H_]?!4*']4M\,4L'S?;21B0=
-MTV3'09S`9'0BT(]5$;$^>URW&6%D9N'&EF]<S4TLHK$MVG!'QO8Z]=U'1!*W
-M1BZ_!P!<`0``7`$```(```!%``%83=<``$`1``#`J`$!P*@!`@'T`?0!1`<I
-MJ(AUJ!F)DJ9QOH-8[ZYV8RX@)"`````(```!/"$``2`L&LADKBR$F;/'KXQA
-MJ,3<GAKR-7>UB-:[/][SY(/,+P%8P'!QUM^N]SW,MLW/>E=8Y!=XVLZW'/9S
-M/A<6B^_V[R`5UG#`ME=/QRZ7U"@I"99O.4J?G@_.V.)IN_8.D_#R"`](W-3@
-M+_$2FY3VBR:-W9S_0V\XYX^GF&V'YB+1\]H[/">55PZ\)]/#U1\I[P__`:Z)
-MO7'2X0JX^NY]>[2UOHJ>X.J;7C1[NO/KWZ\9<UUUYOJ@(-;J<H)L*J7++N9(
-MWFLVR[)0AT*-ZD2]-%!.!?+4_O0\2.*FD%$.DGC*C_+W=7DJ\&&US+SW>S_N
-M98A1*)EIQ5[<;587&*#'8;";#V?);F'0"G^BDI`CM:W/W3-#;V.D>!0=4;4C
-M,T02MT9GY@<`?````'P````"````10``>$W8``!`$0``P*@!`<"H`0(!]`'T
-M`&0&21V;Z44=3Y>H9**DM=#A>VHN("4(`````````%PJ``!`:1M(@IML76W9
-M/ZCC/#C=3`#U0TW"*T)1P(=O"]M=NZ/=!B@Y!U6:)R\'['<)N=66HDS8_FFX
-M*A]EV_;R1!*W1D#Q!P!L````;`````(```!%``!H3=D``$`1``#`J`$!P*@!
-M`@'T`?0`5`8Y'9OI11U/EZADHJ2UT.%[:BX@)2``````````3````#!$I23@
-M.FG-L;@E0<#<"6$G*L'FZ!5B*`<&K[X0A'OE[=$OXA21Q%4.N!P0%$02MT8`
-M``@`;````&P````"````10``:$W:``!`$0``P*@!`<"H`0(!]`'T`%0&.1V;
-MZ44=3Y>H9**DM=#A>VHN("4(`````0```$PJ```P7O[NGM9!0O6XN$"%'SGM
-M-D%;L+=VOMOW[S/1@3S,S$*700"N58X0#&Z[%&Q$$K=&.`T(`&P```!L````
-M`@```$4``&A-W```0!$``,"H`0'`J`$"`?0!]`!4!CD=F^E%'4^7J&2BI+70
-MX7MJ+B`E(`````$```!,````,)G:-DSX^QV`@LUWBM[!_-IW'1\9B?1C-A'!
-M!*Z>I!&/0A4ML<GLL1!"$:,71!*W1C0)"0"8`0``F`$```(```!%``&43=T`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E5',;`Q?/3N```````````"$@(@@`````
-M```!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``WGS[
-MUOV]XT6R7?T[,2)59]+;!_91&!H;O5<H\YYMKOZA&]DVB"[F3J4B`(^7T,H9
-ML(Z"0%"YG^B;6'+U0%0,55#M!'4BW"[SY($C[36""?LH?,W]+^O6NZ*9`3KI
-M>J=X*+8\Z"B2?EST``I^16[;6?7M0&)!4R+^V[15)%+4?<$I```DKE'6[G)I
-M49S&T'5ZDI[0X0Q?IZL?`58S+$LT^$A"<Z$I```<``!`!#8.*RY&Z'9[B[UO
-M]32]6S_G&^_1````'```0`7,M>SP6E$S&L*V0BZ7B<>!"].TND02MT8T&`D`
-M7````%P````"````10``6$W>``!`$0``P*@!`<"H`0(!]`'T`$0&*51S&P,7
-MST[@```````````I("(@`````````#P````@``!`!@````%G7*!?)CY_R?:^
-MA,\_A([]_?EO?T02MT86*`D`N`$``+@!```"````10`!M$W?``!`$0``P*@!
-M`<"H`0(!]`'T`:`'A51S&P,7ST[@```````````I("((`````````9@A```@
-M``!`!@````%G7*!?)CY_R?:^A,\_A([]_?EO?R(``'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``WGS[UOV]XT6R7?T[,2)59]+;!_91&!H;
-MO5<H\YYMKOZA&]DVB"[F3J4B`(^7T,H9L(Z"0%"YG^B;6'+U0%0,55#M!'4B
-MW"[SY($C[36""?LH?,W]+^O6NZ*9`3KI>J=X*+8\Z"B2?EST``I^16[;6?7M
-M0&)!4R+^V[15)%+4?<$I```DKE'6[G)I49S&T'5ZDI[0X0Q?IZL?`58S+$LT
-M^$A"<Z$I```<``!`!#8.*RY&Z'9[B[UO]32]6S_G&^_1````'```0`7,M>SP
-M6E$S&L*V0BZ7B<>!"].TND02MT;Y2PD`4`$``%`!```"````10`!3$W@``!`
-M$0``P*@!`<"H`0(!]`'T`3@''51S&P,7ST[@5%`A&I@X#9(A("(@````````
-M`3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````
-M"`0```(H``"(``(``"E;6V_=X0;85F#![,3)M;_-F1+6+X&\*8>)'7G;`W>2
-M.M04%]Y0J:Z-GK07`HG^4`OL_LDQ/F1;<MEY^!5!=XZE"0Z$$SI%Q$$A+/JN
-M6"(6%*B@+97M\7=F6C/+_6#-6"@^WF=F%,,X\G?[O/";RM79C?"H!RD@SW]-
-MCZH@I';K*0``)*C-I7SLP0C2:]H*E>K4$;J!E_A)"+BT8EK7B]6!,4#<*0``
-M'```0`2F9)@!3*OGYW3C]-Z'D%/P^++J]P```!P``$`%42U]_T^!C.UD'U;P
-M3A$V#J5'F'9$$K=&PGD)``P!```,`0```@```$4``0A-X0``0!$``,"H`0'`
-MJ`$"`?0!]`#T!]E4<QL#%\].X%10(1J8.`V2+B`C"`````$```#L(P``T'9P
-M\?.I8P%ZYKC!,!(DN-)RL]86'U!(:;GV-M8``/O\+^3F]EN-&JU!="D4!-@W
-MA5*2P5+(5D^&3C+3+8:1O!1GW4:48\GJ.;M6MM6E3OX8&RAIBE$C:.)QK1[_
-MT,*N59K0G]&BE8&9KZMU\E$T8!.0M32*8*IYQ$JX5==T9>$OOS/2=]G);$'Q
-M1=]!\.WE(Y<!BS`=\FI$&#5./?S,V,8TYN!+S=@7AD>1UQPM5OCRCLNO#3(8
-M+]9CT+&P/MHQ(^\E9V-'CM6QUGS`K$02MT8LD@D`O````+P````"````10``
-MN$WB``!`$0``P*@!`<"H`0(!]`'T`*0&B51S&P,7ST[@5%`A&I@X#9(N(",@
-M`````0```)PD``"``B#>-+`H>V(\'"Y--#UO')+$LBSD--8+L55@43[3#AMN
-M1F4#L^9M1?B7<CA:-KJL=OMP/=]WCIO6&]YYO_Q)AD7XQRMT'?WTI>Y'45D)
-M.%)C(I2VLNQ621ZQ1`=O;AU%@8@8_;HAVE<8SE/Q[EP/?2:2^?<D$@S4]5&C
-M0$02MT:AL`D`'`$``!P!```"````10`!&$WC``!`$0``P*@!`<"H`0(!]`'T
-M`00'Z51S&P,7ST[@5%`A&I@X#9(N("0(`````@```/PA``#@UB%V_#$<%;]M
-M,UDLTU1\4[K:B4`IX?<Q:SN"ZLO+$3[R?#37X^*(OSC(J@D`-LES)UG3[U^]
-MQ[/^R"^-Q_J8LO7\``B'M'M"%@$?[@5-)?VQ"DB13N10YKE^=^085OSP?=<U
-M.QZ<\9?VS`YTFVG;`\(#^[WPK\K]0;B[`=(1`G^AE63&W^`2[9:\JRA@MV2-
-MDG'#<JX+0=Q>1Z'M'#R&R83V?[@TJ,%LB%).5:+:?2/W*-T('@^K=O&\6P\O
-M=97@25W,VDE59][<VA"_3#)!/K.5.L=;CT:/A[`[G402MT9OM@D`_````/P`
-M```"````10``^$WD``!`$0``P*@!`<"H`0(!]`'T`.0&R51S&P,7ST[@5%`A
-M&I@X#9(N("0(`````P```-PA``#`!`2$/QF;QQ?>1[%NIGVO+T??>HM5RR2/
-M?7]O"IVMKVI.O6M]_=U^$1:,H81)*2LGW\=7.,VF,:HPHVADHB;?]-:D@=4C
-M27D]L%D.O+$_Z2&5I@I[B]+0&`:&P/_9_Q,$S?TY7;"]?8M7`Z0`/!N0C/0I
-ML\O%?WL7A![*._PSP<!2:?Z,T8"BSMM&2.O$"9QHI`K@S92?#BB5-X0Q)6!H
-MHVW8I*UQQ=:JUM347!BN40CW@!8^@)P/"P[^;^M$$K=&Q\8)`&P```!L````
-M`@```$4``&A-Y0``0!$``,"H`0'`J`$"`?0!]`!4!CE4<QL#%\].X%10(1J8
-M.`V2+B`D(`````(```!,*0``,))61Z%_54J$9,PV+\;N32D.&B[1@;!13D*F
-M]9IB#"!$S:>578>;P%N2MC,:1!*W1O7B"0!L````;`````(```!%``!H3>8`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y5',;`Q?/3N!44"$:F#@-DBX@)"`````#
-M````3"D``#`[3T^$2DIWV1"%CR8=X\()?NL',9#DES0`MMA9FOUG;S:2:P0!
-M4S"ISEG8T402MT;:_@D`/`$``#P!```"````10`!.$WG``!`$0``P*@!`<"H
-M`0(!]`'T`20'"51S&P,7ST[@5%`A&I@X#9(N("0(````!````1PA``$`T*H^
-MYK#!9#QV,`N6#?]=`*ML`F'"R%3B\H+Q67&)YR]5]_MDQ-#?7#&\/*IX#G*M
-M'C!7YQ)&%@,5NF:,*[B,(#.G/):/G>M$AGHH\%U^8?#1A!<6)25O</J_;G/&
-M<!CTLU,C?.Q5+H<F#9?<"H8O>3_6U/"<3==#Y;#,4[)0JZT)<@SHIF2;A/[F
-M$C'THQI$;TY:5[^;'4?,:EB0IV1%QN$1JP`AV[0S6KL_0'][LM1WQ5(#8L_P
-M,!'T[D%-$60`IFII=Y#7CJ&O28RD,CG_FSBO39;L)I<),*:\Y7SC,\0ZPC(S
-M)NTS=?$*=FF</AFJZ*W^Q>VZKET>6F1%1!*W1O4*"@`<`0``'`$```(```!%
-M``$83>@``$`1``#`J`$!P*@!`@'T`?0!!`?I5',;`Q?/3N!44"$:F#@-DBX@
-M)`@````%````_"$``.`^[E<9U09(\JR]9`ON?;OOJ-C[0Y"+O#P['JN0U/S;
-M0'QA!8IX>UT\>UDT%S]V/B5%-A#SG"F9L&Q\I+%N\,+"#$(3UP,6L59)EEIX
-MRA_8HWC9Y$(NB,JX0(_E-:-3<WJN$8[31!)]8%)2T7+GO13/TVPFC1:4M&IR
-M?!K3P0U>I>[;J+!YRFZYX;_X\+V&CG\,I+1O]P&,L5>?D5_0VYE)C;,1TBR3
-M,KR8L^I]G)!!VOR!(N_HO524T&+^RN$7(P65_WD,Q71?'.N*=J;*QBAA$[86
-M%CPA<?0V1ZU,1!*W1D@:"@#L````[`````(```!%``#H3>D``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y5',;`Q?/3N!44"$:F#@-DBX@)"`````$````S"$``+#8
-MQ'W*^WAK+7.KLP!6.3YD1J,L[83^.@E^]5![^87XX@)F$P]]TRIW'9**NZQ]
-M?F#\%/#]!R5IRT'L!20-3]$%=3+_/2ZQ'B6%B/S8!SW0,[$JM@4SF_70\X3`
-MOQMV`JN(^,.JE[L\\>1'$3*N:3.O0<)Z3(WRM?5X+@IW2U`!87@T4JC;&?)U
-M2/U/0+)VV?\P^WW'Y;1A$."+?]DA?Z3H1HK1@E`=);;ON$131!*W1HX\"@#L
-M````[`````(```!%``#H3>H``$`1``#`J`$!P*@!`@'T`?0`U`:Y5',;`Q?/
-M3N!44"$:F#@-DBX@)"`````%````S"$``+!-_%.(@QZYU*VX^/J7%+MY.#3_
-M'X8:%]*C;F)63*C4C)R])=KF<C&\F0N6LFJVF`GVPZ55:!(\$NS(J'%EG.4>
-M]\-!4:L^KF'/3+[3D\Y*5]=%S1!`#H.*Q/&T[5E,L\K6FL"6NT;J$9N+?ZCF
-MG[D#,JYX\L$7@=R=M%1A?);]"CE\*1]@P+<:!7%1<T$)J5KA0QW>6RV[;YF*
-M<2_I$&GA*MI']U"5U/L+;@&(1!*W1HQ9"@`\`0``/`$```(```!%``$X3>L`
-M`$`1``#`J`$!P*@!`@'T`?0!)`<)5',;`Q?/3N!44"$:F#@-DBX@)`@````&
-M```!'"$``0!6EYI/.$-B0B"7*Q-SD$CG`2IY5VG$V^YLU]J&T85X=\`]AB_<
-MX?[.@8:80\$NU'/WU>]+B,BB(+\L!;KWUX6@^Y+]KL4!ZP,^Q*.D/=]J&W]6
-M:MJNTR(H-C-"2`WRSW"1IG2N':`N$;Q6^Z8N*H"C@0#$/APZR84<:Z\#A[*Z
-M`P\=I"_G]0UGV39<J.4H^?PR];(D=[W[Y[?<Y"&/H%=0Z`15GIGI]VP*KEG7
-MOB=MLA*JXW(>>(NXWY\6JFV+,[JZ(3'A4T#`4+A8<C,UXQA7U@<W!1D0F$5R
-M-OT>C8#/Q>-PW&W,+@AO>B_FB4S/J5-WEK>'WI3-DHEJ:1U$$K=&360*`!P!
-M```<`0```@```$4``1A-[```0!$``,"H`0'`J`$"`?0!]`$$!^E4<QL#%\].
-MX%10(1J8.`V2+B`D"`````<```#\(0``X..]=E>DE2=LWVYRD-Q`#B'?TZG[
-MY_2&S1]?<`,BM-^/VP@%;+;S^Z'!ROB<L6PN,%H4E&7+/J^8G93*D^2'GQ<6
-M!^C%"-P>=B+<L5VLM8EYY8^Y%^#7WOQ!R4I;G!W-6'J)D0@.>;[X];:&"+4_
-MV/HH&@=LT98.(_1XG3^E3+,\_B?U6BE+,]4%:?>^Z<`1[;+1<N1/T'I0%PGW
-M^0NV$3T#Y`\B=YD>+CI,;EQH/IY5'I6K8[-FQ12F78<B&MCC;[Y%CB1[5\]+
-M!&;O<^T-[]-:6*NWB_`Y\]/$5+)$$K=&FW,*`.P```#L`````@```$4``.A-
-M[0``0!$``,"H`0'`J`$"`?0!]`#4!KE4<QL#%\].X%10(1J8.`V2+B`D(```
-M``8```#,(0``L*K+L[JZL=]4M#E2P:QX*X/!+3^E<YRO@PO.=2QI:Q-RX^KJ
-M)'&U!`GLXTX7YHX9A/3CGSB-E8^$<LF;<`%JRF<'`,RMIB+A*F<8>VR)V#+B
-MBW&Y^_A#/)Z:F"`<#N+0AP5";_"%=C-K/^E'N(!:L*^7AQEN;;TZ+/>P_KU&
-M0$)"?F'-(G)5N7/9*_6#UX:2T^T)$S.5+1\;NH]KQ:M3:V,G)6JYO)MH/%U]
-MXL%$$K=&N)<*`.P```#L`````@```$4``.A-[@``0!$``,"H`0'`J`$"`?0!
-M]`#4!KE4<QL#%\].X%10(1J8.`V2+B`D(`````<```#,(0``L.-ZK,WVI]M.
-MW#4BXXNW$17'(#2E_=)#(,EO`8%@R]#E..67RY>TL_PIC(/%62(6:@N#$D!!
-M)S-I:-'^XP[9$AL:_8,))7)`@63O]08^<CK>8,YXZ!.@L/.04+6VF">/"??^
-MU+2Q`^6:9RHL@34[N/#LJC7\[(W$R8CSBM;=>`S"M..A8)CZPZZ_Y&T!!?^P
-ME@BUD;7(%)[IUW@GQW^:16Z*IBG#Z(EHG=/GYS%$$K=&FKT*`(P!``",`0``
-M`@```$4``8A-[P``0!$``,"H`0'`J`$"`?0!]`%T!UE4<QL#%\].X%10(1J8
-M.`V2+B`D"`````@```%L(0`!4,UXWQY+?XJ.'917E<D75L$UC.2!3[.K+L2$
-MS>-H&TI31^/?R@03UT%?C4N_<";VNF)#[6R/&NSAPR4>Q`4WHWQB@F<)ON%2
-MC4&#"DGG?)L]>[&Z`PIY;WT5(3&4R65$`5=DY>GA$T!T?N_!P7]M\S#";D?T
-M]]H)H'Z\5#2SSMVLAQCB?Y08!E5_;36[])<I+,%UTUC!XP,J%N1+=2XJ`R]3
-MUP-5?V+9<\*,1PHW"[6@#+**J;PJZE=Y]MBQRB^1J*.<CU/P>&7Y&^*]]O;[
-MA-&5'@N'4$U)HP?[P;A%G)T&?FE/5VQCASDM(?NKTT,I.7I3YY$S6/)ODWYS
-MJ&R<_F&04`!E0&`$^,^AP_Z1+JKP(I&WQ_BD3PSL8B4;YP#?,8K$3[D=L8"M
-MOT"9(Y3NNC`@MDQ>DTYI4%7;A[Q9ZUFG\,#B"$LRGQ5&AY/^1!*W1KSQ"@!<
-M`0``7`$```(```!%``%83?```$`1``#`J`$!P*@!`@'T`?0!1`<I5',;`Q?/
-M3N!44"$:F#@-DBX@)"`````(```!/"$``2`^K6#_/K2>RI%8N]N"]A1>MWH0
-MG7CR#'UD!W`U7ZC^"W3G+5$8%VT/ZNNFXB4XTL477'Z#O0O(,IR4W!\M_&BD
-M]^0DSV>Q""(H]2M/L^B=#J8-_V2%I6>E;U*RDI;KQPP78PM5P7CRZ6S-07_#
-M3-$$HWI49?'!+Q,OUPJ)<5M`RN5@UD?R]\\^.4<0<`@.9+/A/5Z6WVF=H0$N
-M=8HK>7FGE8.]JAXG3#-/PU!S.F?8KD_6:2I0_[1MA*3'&NI,8Y5Y9#+;BRV/
-MT\825A,570UMQJ4LLX(&7W0JU/"<(ZS],=,U>N\:FEW^WCB2KC"*I>UDL:B%
-M.&E!)9;<VHC_X.`1F;^1<;=9R819*7?!J;G59]"G`TV*.B4RIS0G<T02MT96
-M&`L`?````'P````"````10``>$WQ``!`$0``P*@!`<"H`0(!]`'T`&0&28SF
-M^@RVP`F[")#FM3GJSZ@N("4(`````````%PJ``!`JRS02/].&S51X.16;.H*
-MVS"/_(W+7(3\C'[WCT:(M2D<I;524\+LISD[D>9)D-_F](;K0NV325/E)^KZ
-M1!*W1IHC"P!L````;`````(```!%``!H3?(``$`1``#`J`$!P*@!`@'T`?0`
-M5`8YC.;Z#+;`";L(D.:U.>K/J"X@)2``````````3````#`G=OGODK/:$:HJ
-MT"(PTL/*%FKN*Z['9TGQ`#3B;Z+?G\>4FA0>I,$@]P&?VT02MT97,@L`;```
-M`&P````"````10``:$WS``!`$0``P*@!`<"H`0(!]`'T`%0&.8SF^@RVP`F[
-M")#FM3GJSZ@N("4(`````0```$PJ```P<J9STGMM(+*G`V'E>0L!]*:R/W5&
-M`/^R\6%9`^'%A^$?=`U;/OWCO9B2@8M$$K=&GS\+`&P```!L`````@```$4`
-M`&A-]```0!$``,"H`0'`J`$"`?0!]`!4!CF,YOH,ML`)NPB0YK4YZL^H+B`E
-M(`````$```!,````,.`[,[F48`GKB^F5D-I#G=A3PW_F-:4R8^6)L9?7R:=0
-MJ%*.4>3BLM4,>?NU1!*W1L4\#`"8`0``F`$```(```!%``&43?4``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=ETB+:][SD:'L``````````"$@(@@````````!>"(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``T69"RFEU,96-
-ML3`*__;4)I3K.U6V0/28.KZ=%`:^QB=-VMFZ,KEO/^2V6?-EH4FSDT.#;VW'
-M.$7]4X"9,35"-S;)QG@O5J!8>[HJ_F?_,;'YJN>)F<^6UPJ&Z)PP%C3YG:4I
-MS3TI?:.,UY[O@6@52[L4@=W>*WT@,#EMA5)@UH$I```D-&6+%NN%Y;P4=?[O
-M'>9W4L74T:.@YM_6$"$:YDQ(!%0I```<``!`!%N*FVF3#B9#"X39^$ZU'7%M
-MB,1+````'```0`53?.5._2UKES6-G[[B*QS-"L<L1402MT9\2PP`7````%P`
-M```"````10``6$WV``!`$0``P*@!`<"H`0(!]`'T`$0&*=(BVO>\Y&A[````
-M```````I("(@`````````#P````@``!`!@````$+TQG"/`^M=<;U;B3CKOP#
-MR]@#^D02MT9+6PP`N`$``+@!```"````10`!M$WW``!`$0``P*@!`<"H`0(!
-M]`'T`:`'A=(BVO>\Y&A[```````````I("((`````````9@A```@``!`!@``
-M``$+TQG"/`^M=<;U;B3CKOP#R]@#^B(``'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``T69"RFEU,96-L3`*__;4)I3K.U6V0/28.KZ=%`:^
-MQB=-VMFZ,KEO/^2V6?-EH4FSDT.#;VW'.$7]4X"9,35"-S;)QG@O5J!8>[HJ
-M_F?_,;'YJN>)F<^6UPJ&Z)PP%C3YG:4IS3TI?:.,UY[O@6@52[L4@=W>*WT@
-M,#EMA5)@UH$I```D-&6+%NN%Y;P4=?[O'>9W4L74T:.@YM_6$"$:YDQ(!%0I
-M```<``!`!%N*FVF3#B9#"X39^$ZU'7%MB,1+````'```0`53?.5._2UKES6-
-MG[[B*QS-"L<L1402MT8A@`P`4`$``%`!```"````10`!3$WX``!`$0``P*@!
-M`<"H`0(!]`'T`3@''=(BVO>\Y&A[TPO3Q7FH/@4A("(@`````````3`B```P
-M````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H
-M``"(``(``!O?XWIU;BO)/QXF*E3XG4=3=GN1<ZV,7R2)TE0LB^Q0OHZ%WYT@
-M[C0&Y1\1:J-GWM;$SQ\(D1L1^RA]!&%"T#D(ITY\^L=#'4#;79=#?3'VPY5J
-M1QP5H/P;/-97SH+?#0`<2+V(FL^/Z7U-*L3'_7MJ\'U8NWD?9@)9R?5D7M<'
-M*0``)+E"PS/?K)W>1W'`W]*D>ABZMA2`_'?\F>WJ8YGL&Z#9*0``'```0`2'
-M^Z=!4`![6ECMO>D8&H99`I;8YP```!P``$`%S0',#!PC0A#LWZ3D_^0+$K.%
-M"45$$K=&=JT,``P!```,`0```@```$4``0A-^0``0!$``,"H`0'`J`$"`?0!
-M]`#T!]G2(MKWO.1H>],+T\5YJ#X%+B`C"`````$```#L(P``T&I]7E!!+9+Y
-M]7B(@A'[$UL"'("P_RU5Y%44'<Y61TI*ST,IR62U,;U$+0O*23G@A+D?M_$5
-MK\6&9/Y8Z$".V0+HZ+..'WQ.IF5UC$DNN4.>J4+LS<CS@'DHK)PTN0(3]#RU
-MVER0G<X*"AP!]M$X(TT2ZN&(K(1/CP8WGRSTYG075_P1SH\*M9)O1]XOEV\.
-M0G=`XFFS*,\?PHC$4S%\Z,'*>14[6_T4)LSM]$&XS%\1$"@'38<3_L6%:5Y]
-M`G`9T=\^#E"V*[#<70'H5T02MT;XQ0P`O````+P````"````10``N$WZ``!`
-M$0``P*@!`<"H`0(!]`'T`*0&B=(BVO>\Y&A[TPO3Q7FH/@4N(",@`````0``
-M`)PD``"`')C-QK,$J]O]XWSYF"=S.D\OLNA>O/%3\BA5*<GL)-HD0^Y_`,!X
-M;](`F>"!)3E&"TGZS6H)1F@7(U6@J&1.;%6W2T]'#V?[>@YL5KL(`IT5KN3B
-MA&]$'"BQQ93U%L:3K9?,''I,D&`V)08`@8/AWHU?E9OKF0>8,5VN(T02MT:W
-MY0P`'`$``!P!```"````10`!&$W[``!`$0``P*@!`<"H`0(!]`'T`00'Z=(B
-MVO>\Y&A[TPO3Q7FH/@4N("0(`````@```/PA``#@4!G?1)Y34`<<"+"^G<$G
-MO:GNHVEC81^?X%]OU%-KGA]N9ZFZV](9[7_HI7>2^S>8ABQ&/F?SBO<,G+T1
-MJQ*G!V>8%WX.J`8@A9^A-?*@-R"4Q9CJP!&Y('1II3<<N0M:594F\\4K:7IZ
-MY\18(\`MWC)(-638GM(H<FW(3G%I)+%1<;@Y_=&*I375"ANX)>3%V57TL0>$
-M<D(T,(N1;X&L/<XA]XB'X(1^J'E*X@N3LBW6.^]AG<X#]U^8D\IA1=WH31'Y
-MY8OEQ9H"Z4!:.VF?!<?LM4Q-73`EQ7\1#D02MT8%\@P`_````/P````"````
-M10``^$W\``!`$0``P*@!`<"H`0(!]`'T`.0&R=(BVO>\Y&A[TPO3Q7FH/@4N
-M("0(`````P```-PA``#`TI)_57M:Z'7341JB&^@(*N.0F$(\*V0M"6;M<KO#
-M$(G^F>G8VIR]=R6D7E%^PK$_.<,M`'%'9ZM2:CM98RX2_JJTNI.6C"ELAR3K
-MDA"W;J,M.)_MV9JSR"ME!0F=XH]#+':#HLCM_II4"]TJ(+,",KAYHSC!8!2=
-MZ1NE59T,$.T0M]9VZAY)L)]_.%;%E:G6"Q8:DX;)RJV'P';"ZKF1/V.8\H@?
-M2LIPNWTC'O.#0UKS+%"CH*3$5J(_(N1$$K=&=/P,`&P```!L`````@```$4`
-M`&A-_0``0!$``,"H`0'`J`$"`?0!]`!4!CG2(MKWO.1H>],+T\5YJ#X%+B`D
-M(`````(```!,*0``,/]LMG:P)\`MJ9H[JF\/N8O(@/(MXN%2""CU@IZ\?WM:
-M?E6!^B.#HWS:?7/?1!*W1O$7#0!L````;`````(```!%``!H3?X``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8YTB+:][SD:'O3"]/%>:@^!2X@)"`````#````3"D`
-M`#!04+PYGI488Z?O'M^3+YSD8GN(*BO5?&PMOB)*E8FLSB(/$JX`'37B(\B9
-MWD02MT8>,PT`/`$``#P!```"````10`!.$W_``!`$0``P*@!`<"H`0(!]`'T
-M`20'"=(BVO>\Y&A[TPO3Q7FH/@4N("0(````!````1PA``$`9""'&R;"P>&O
-MDM(_(M:3LMO'3T`#*)P"\OYUF:"$,.UI[R1CH[H>]0E&0^4ANW/Q8'QZKO`<
-M#`4QPL&=,IH4YS72J#2EL@=$WL$\MDA[ZJ*S=/(XV09D3#,I#]S94,"U"!-7
-M;0`S8$]^H*X2=GTDV_7FZ(-_%A`H"@66G4J_$3SM#7,>@WMN9%B"U"IB45M#
-M!):+3=!X,E&M_:K)WD+BQ2BT.O&,C*KDP\?-F!$%@-"W8';M:_JOMH)%:I3?
-M:L'6"#C$ASUT[M'IT2*R';4$7)(KE$;T4>M4K@N;+IVC<J%5F,VJBYL%,=+=
-M;SP1MG>J/5S`F&NJ__N\-,"&1!*W1H(^#0`<`0``'`$```(```!%``$83@``
-M`$`1``#`J`$!P*@!`@'T`?0!!`?ITB+:][SD:'O3"]/%>:@^!2X@)`@````%
-M````_"$``.#^MYBRM90'ZJU%P06;4[8FSMB?O_TE<Y)1HH-]NVVC$TA?7M8`
-MI<!RN$-!I=PE[QG(5F;T#1H$H$[F[^6\K#71/GU<JY-3:M8+2I+9XZX;&R,9
-MD1C%?U+,[GD9>'7@X>LEPT!Z$3B2*Q;<UA'%4E/H;_KJ.3MT4/FC!AA>NC-M
-M9T.IKJ^G(+8H@]!*A@`V<O>N).@#L99@HG![C<?6<+@PI)G_P,N<.02.I4#M
-M#[I(.%^OW@-K)4![HIZ_`^$9+Z(Z]JPF3]U=()8J,@5!\(C>=Z5ZL#9Y-#7/
-M'IXY1!*W1KE.#0#L````[`````(```!%``#H3@$``$`1``#`J`$!P*@!`@'T
-M`?0`U`:YTB+:][SD:'O3"]/%>:@^!2X@)"`````$````S"$``+#%7G86BE&=
-M!?CR4-<D__+ZH8'QL`X";6Q1=SU:I+13WINS2>40K[B@B$D/>Y#.N1B3/_%*
-M'L!75J$NCOC4^`2-MUF<RLBZ"['JO8V!CKX2L<WOMRD)-V&&0S`3CU`]Q)4N
-M0IQB2C.&/XI!^II!`,:>"C]2Y@MK^>%JY[$&D4KJ9LH926#`4(N#<`C^2@FU
-MC`ZR$SA])CF!\BC_<HLNTIHUJ=Y&WFCAGFB?U)G_1!*W1DQR#0#L````[```
-M``(```!%``#H3@(``$`1``#`J`$!P*@!`@'T`?0`U`:YTB+:][SD:'O3"]/%
-M>:@^!2X@)"`````%````S"$``+`)9N3CW9>/[*Y!=RP#0^-<]6K+(A.?J_P!
-MC$D[<Q1"09X%;.Q?_O$`2OQ[L1@`">APK7M>3Z!]6(.^`@?`0)O1VPFGS=JP
-MF<RP@P;\P("9ZT3[?1P<W19\(^Q-?Z;&*$)'F!-]NJV0((C;8[;IO3-M*2Z1
-MWN,*)W<E1D<!-$Y%B1H2)@A9I]0"''<%64Q)!+@<8EXPKLA(@XR%HV10_6FH
-M7EN>35?U)-W-MCW=1!*W1G^/#0`\`0``/`$```(```!%``$X3@,``$`1``#`
-MJ`$!P*@!`@'T`?0!)`<)TB+:][SD:'O3"]/%>:@^!2X@)`@````&```!'"$`
-M`0"QJ29TI>7<P@59=N;\\SQ!/6*1\6RLU-Q9@@2RD9T]ZQ?=\13,7$]2/495
-M:7!\946);?7NI'#\B!'2X.E/5XR":TT&!DCP4UM+U&!0C%#AF+T^957TP(GV
-MX%$^:AH_)ZXQ=9.B/R]JF0!&\F7F:QXN;XS7W1NK&AY\9V_1H@&+:<`SNLW[
-MC5E@?P>174%`&UIAL`N*T%[E4@T`E&U5DRQ]-?'W]=E)K"91SP2*&3$(H%O4
-M1\0%1`/41"1$+D@8"F6R;#"*,14W`,F"^3[C[SR9V(&7+H.5JRX*LBE/O$C5
-M-<-D'SQ_%ZGXK+KOK)D-7Y-@8R]2K6JPJ0KM+RA$$K=&!IL-`!P!```<`0``
-M`@```$4``1A.!```0!$``,"H`0'`J`$"`?0!]`$$!^G2(MKWO.1H>],+T\5Y
-MJ#X%+B`D"`````<```#\(0``X#\Y?`H34K#MDF[)^^MI4KZ=Z-/HJ80HM%04
-MJYB=KP")FP"C![&'2A>EE"GI7!7KT5>JEX@+18OA036EYRWC=4/JPG*9=`>V
-M":DY-(-UN)<DMYA/>*4`(Y\*3^2D5R=#@?F=^,SOZI*A`X;7JN!@R#66+7^"
-M#]>*&&GFY'MH??P*737A1<BI2=`)NZ59*J=JKI@J)>;E&YYB`>E#=(V,4R"0
-M,D)SFS#C&2_._!YDON&D39)Z<Y17@`W%2X"0<-5I?64H;$]]3RT./1OS@CF?
-M73S;*9JLSL`V7"1F("=$$K=&=*H-`.P```#L`````@```$4``.A.!0``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KG2(MKWO.1H>],+T\5YJ#X%+B`D(`````8```#,
-M(0``L-!2!)R"/>!GT1JPIC'Q[PE1Q+Q!T!+,E?RO5`;4Y8<P^]O:AC(*1O<U
-MAY]G052L4(5DN-/S2K\C=[QJWZTF-#YWF\:Z8>4['B.,$?Q%,HG&9\89=P-?
-MYYK->3+S4$G"(N$C8R=0>E.-2>0+J:D5.606[JC\!@YGY>!J(\4`%^BZCW7G
-M6'IZ8Y3XORTD59I=;%#!_N#<;\EID!XB9A44_$**9X:UW<.VC7DHF0Q$$K=&
-ME\X-`.P```#L`````@```$4``.A."```0!$``,"H`0'`J`$"`?0!]`#4!KG2
-M(MKWO.1H>],+T\5YJ#X%+B`D(`````<```#,(0``L++N/U(18>@<`Q/&Q4#W
-M6)NIS>1AN]Z6P5)+',J+A^2D1X`&.=U.ZFS\V!!1,^A&L7_^<ZWF<"&L7>*X
-MFPU()Q,J'D)[,)VOK#!,,^</./=(S)U!J%CF3F"T4=P`H,B?<'LZ=\Y'8)#P
-M+WR<&1R-&ZN1VBVR4-5@_3FT=7&"*]G*H?`DBX]K36YQ$N(B?'Y=I0E5<X(N
-M_:?TB)_B*6AN.@=:>/QYQ1=KY=%=!'Y$$K=&GO0-`(P!``",`0```@```$4`
-M`8A."0``0!$``,"H`0'`J`$"`?0!]`%T!UG2(MKWO.1H>],+T\5YJ#X%+B`D
-M"`````@```%L(0`!4`PYR,>_*Z5VFMBEONYP7IXX=^%"$S@!]A3Q!5#N>R'[
-M:KUL`HSWR9@7^>>D;AV+]?^PK/SV<,^:.R["VMSH"?T*'IRI9HS1_"!+0W-*
-MA)OG_/Y)CW[CD3>%<E%G>''KN<.A`/9=4`"442C@_SU;-,]`R5,12/1A;6!T
-M6[*)O.%-1.[#*12%?&"LAZTK'+;DR7)P;QHYBMH$-O2HVI;>$AF<X=UW9)4D
-M;K1<P@^I4?;85+XSHJFP.`XV@O.CQ>;U%X9E;5[3@M)4Z[^PB]BON%7/R"]%
-M0JEO9EJ3<M%8@L778ELY83DD1D\6PMB61Q+:SQO`A\L`W\1<V97_E"7W4_-2
-MA^F&N*"#_&7,)$I3&*5BB/F**2PLO6+LW>9DV`GNOVD%CY!V*>BQMJGRI9_.
-M8#7UPK@3%\-0J&_&)7S/.\UG9$[_]\A@-J.]Y\D)1!*W1CPJ#@!<`0``7`$`
-M``(```!%``%83@H``$`1``#`J`$!P*@!`@'T`?0!1`<ITB+:][SD:'O3"]/%
-M>:@^!2X@)"`````(```!/"$``2"W_,`NY'"2-U`_I<XC]HRG7SLB%I5W51]R
-M72"'YIL6\T!4LYC1Q2)?WO\:=FL`#'DKL.75<C[$?1^U5IE$Q6S0LSU4G*RO
-M,=)IH^K7YM+7K82'\;AL`V#K=/-$%NHUBO6"75*1K(_!U%W!29[_1MK)/TKP
-M\]3JH@:!JEUEMJ^*F9E3YG&H^0.#/[:[0$\7[UR3%OD-E0ESC"7QNUA]I/?U
-MQ%-2X5L!`+400BO&UG_=GORDE<)G4M+ZCW`'ZZ0@$N_P6LSK3;_*HNRU.2*!
-MB+X]'*.4.^*'8RB;41RJ$M)0=`FHU$ITAA8H>!?S!'IWMK\7PZP!C%'QM!I\
-M?_IWDP:3VT[Q'O_-W,&_Z!X4D?,V7L34FAID>Z4(X1=<[402MT8T4@X`?```
-M`'P````"````10``>$X+``!`$0``P*@!`<"H`0(!]`'T`&0&2?76W9IJ;HV=
-MBA'-Q:0U.*$N("4(`````````%PJ``!`3IRAK3*4M%PZ[%7AW81CXA%;B%[W
-M"5+$"N+A(J_:Z*XD1DXWJ8A3E`&Z&@':@S02JTD-J"LR"J3EB8&11!*W1J9=
-M#@!L````;`````(```!%``!H3@P``$`1``#`J`$!P*@!`@'T`?0`5`8Y]=;=
-MFFINC9V*$<W%I#4XH2X@)2``````````3````#"$S'W[VVE#SUGWI)M'(6>W
-M^%H!39>]7QUK0WR0-IR$UG)RK+YLQJ-L;HZ.WD02MT9>;`X`;````&P````"
-M````10``:$X-``!`$0``P*@!`<"H`0(!]`'T`%0&.?76W9IJ;HV=BA'-Q:0U
-M.*$N("4(`````0```$PJ```P4VK?Y%Y"DFV_;%.S\[-_XGPFS&LN"4:0M1<D
-M2I(@8BD.B@^PNA&7Q"]<SQI$$K=&F7D.`&P```!L`````@```$4``&A.#@``
-M0!$``,"H`0'`J`$"`?0!]`!4!CGUUMV::FZ-G8H1S<6D-3BA+B`E(`````$`
-M``!,````,%2"/Q4SA[R:=!&]A+OC?)_8?-L6$4/TJZ0K#--5RBE-@+TEKB/F
-MJF=>&QZ911*W1IPT``"8`0``F`$```(```!%``&43@\``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E43]1BISDM%X``````````"$@(@@````````!>"(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``U-=BQ2%E7U'S5N4RH(B^
-M+=0-3+_M&I;:5:K;@CU@WJQ')"AN6Q2-@AST`AL$FSMT*84):F^`&NLU.CA^
-M`H@QG3(%B/R:N0+BY.QTZ1YXG/M"I*:]7*?!$&_DB,,@=XD!-7;@!1@(^KXP
-M!#CX<E:H[RBF=&"E<ND4:A>AQ@5R^$`I```DDKP/J2O''F><.[)*CI05YR+L
-MY#3),VBI]VE#TJ&=7JDI```<``!`!!O5GA2<J#N:_&K6ZPHP9"#M&(>Y````
-M'```0`65*0KIH3'WIOWFPY_>:7/YFHXH$$42MT9L0P``7````%P````"````
-M10``6$X0``!`$0``P*@!`<"H`0(!]`'T`$0&*5$_48J<Y+1>```````````I
-M("(@`````````#P````@``!`!@````$:F2,_?E>C1)LM]TY96X"U4A;%+442
-MMT9"5```N`$``+@!```"````10`!M$X1``!`$0``P*@!`<"H`0(!]`'T`:`'
-MA5$_48J<Y+1>```````````I("((`````````9@A```@``!`!@````$:F2,_
-M?E>C1)LM]TY96X"U4A;%+2(``'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``U-=BQ2%E7U'S5N4RH(B^+=0-3+_M&I;:5:K;@CU@WJQ')"AN
-M6Q2-@AST`AL$FSMT*84):F^`&NLU.CA^`H@QG3(%B/R:N0+BY.QTZ1YXG/M"
-MI*:]7*?!$&_DB,,@=XD!-7;@!1@(^KXP!#CX<E:H[RBF=&"E<ND4:A>AQ@5R
-M^$`I```DDKP/J2O''F><.[)*CI05YR+LY#3),VBI]VE#TJ&=7JDI```<``!`
-M!!O5GA2<J#N:_&K6ZPHP9"#M&(>Y````'```0`65*0KIH3'WIOWFPY_>:7/Y
-MFHXH$$42MT;5=P``4`$``%`!```"````10`!3$X2``!`$0``P*@!`<"H`0(!
-M]`'T`3@''5$_48J<Y+1>^M[MF1:N?_`A("(@`````````3`B```P````+`$!
-M``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(`
-M`#I1MF=>2J!2%3$W$0HV!0B?P+!5EWW2`%W$D%W+BH(U341R`0S:-O`(<6+A
-M]95:27TD^#`MGW'+K[ORU\_2RVZ)W+@9>OEUF#7%R44?_"1?<8A*>1P%ED"'
-M?R0.4DX[F',:X/4:N<^6*5*9OS?R90%$/D":]&!W3)6U!9T)P!4\*0``),_V
-M3KK2N#AS_D">S#$]M[$-0[*\3;=M.)(-E["?$3[1*0``'```0`2,@4%_KIS6
-M">=-(+(6H=^NT:/]00```!P``$`%C5-'[^61SCXURH]OC84!"_2\/FQ%$K=&
-MV:0```P!```,`0```@```$4``0A.$P``0!$``,"H`0'`J`$"`?0!]`#T!]E1
-M/U&*G.2T7OK>[9D6KG_P+B`C"`````$```#L(P``T!FOZ+1:!GXHH^]5=B[#
-M).EJTY*O.O=T\.D=I0ST1[&]Q&B\)TRF'//%"Y>7JRQNRY/O7)^;D^I&Q!)Q
-M/XKI3$]NI"V0"(]WUDBIUP`.6_-=W'*%V!H(U%T(USB:>%=<N]MH1)N`4Y^F
-MZU5TL*[GR80+*MV$96(ZR+66Y#OC?\1I1^3#3<#%TJJ5')(MB;,22=1UK88Z
-MBV@A7<!YL8>PS>@BYT8`"X%MBP!ET.X7BCX*#DJ35.9>H\ON&PI4Z(/+&U<F
-M%[+H,B_-@I/(7442MT:+O@``O````+P````"````10``N$X4``!`$0``P*@!
-M`<"H`0(!]`'T`*0&B5$_48J<Y+1>^M[MF1:N?_`N(",@`````0```)PD``"`
-MIV+FM=:B&]RQ)JV(QEZ...>M_`K"GO=GZ60I&P:L]"K'%YROUBS&*F,+R%8I
-M1#N_R^0Y*$S<P[<H@*K.5<%!0W9`L.R;U!/%MJ_"F@?EYLVF2`!<X2EA'\(]
-M5CS@X]_/T"8Z)]:(^U(KGF0J^7?<G9>JS#X'F$UG@A(FU$42MT;?W0``'`$`
-M`!P!```"````10`!&$X5``!`$0``P*@!`<"H`0(!]`'T`00'Z5$_48J<Y+1>
-M^M[MF1:N?_`N("0(`````@```/PA``#@UT<P8NIF=\C%2^#MP6WHY<X.2)"V
-M[1A9NBE(\L%FN&]L4!F\6!^C[N4B/0A/MTEZ,:Z^9/6IJFUW<LP\P?TA4,@U
-M<9KP8<0(BA)=R!]T;529.I=BZB!?EVY9CQ"I_;:AW1[O?3GJIV:`C0QQCRBG
-M"AX5E.56[ADHA8T+QK?#RVB-1A.4+!S!0=2X]WTCX_B62T;897"J)!;!$M^-
-M\H4X&;9#/JG#GD/-YY6NJ=G1U/!8&K[ID9GZ+B_G_E1;N)6^]VFAC$;\"`-K
-M_0E];'Z]^7KNMC[?@_S<G28-UT42MT9&Z0``_````/P````"````10``^$X6
-M``!`$0``P*@!`<"H`0(!]`'T`.0&R5$_48J<Y+1>^M[MF1:N?_`N("0(````
-M`P```-PA``#`R<L-_+(GWGI+7'=*2[-:DK/X4KRM)`A_E@QCRIDS7HXT)2X"
-MG5X:$1_Y>\S&AU.FH+/B7^4A&$H^(E8TA'K,6N<8;=70I]5++Z'!C*P$@P]A
-M]JLM!<J]RK(,$J3[F*J-B)9\K;WIK.,-VKL69T+FR6M<9*+9,1N\8V>GH9"(
-M,J92<Q'RI.5B-6BM[QEO;6HJ/HG,&2O-)1RF3C<6Q^"(I@&Y$K(<MBD3L;=G
-M;5)7T#$PV-4%S2XH[IXVFP-%$K=&S?,``&P```!L`````@```$4``&A.%P``
-M0!$``,"H`0'`J`$"`?0!]`!4!CE1/U&*G.2T7OK>[9D6KG_P+B`D(`````(`
-M``!,*0``,-7JN&-'[XT)3)D5#DZS^WTI!?KTRQ%0\&(`9Z)C5`4C1X&B'[XQ
-M'6+2X7BK11*W1G$/`0!L````;`````(```!%``!H3A@``$`1``#`J`$!P*@!
-M`@'T`?0`5`8Y43]1BISDM%[ZWNV9%JY_\"X@)"`````#````3"D``#"G\I-0
-M>>/F&A_RZGC'-5PH!R%!%HO.3IR'^3MFI71P5AND?_$A[:,(<=%@?$42MT:-
-M*P$`/`$``#P!```"````10`!.$X9``!`$0``P*@!`<"H`0(!]`'T`20'"5$_
-M48J<Y+1>^M[MF1:N?_`N("0(````!````1PA``$`<:M_*/>F+65R%EV^,+__
-M4"X&1]]:T(8^4<QY.GHT[Z>A=OF3_<`N'>=4MFS)`OO,*V><GT$FUEY4M2P[
-MEJ5?^S"^;LANJ?L((I@9];[O!'NG&U[=3%99*SH#P(ZT$Y>6%8_D!;,+S/NY
-MB_KZ8E^2\H7KAS!U\*8_V;\L!HL$<:@\3H(_CQ5\2JC&B^[QT)"Y^_5UC!3@
-M(J:RV;S'0"/NOT17FC8EP3&RS71Z=._Q4<,H94W[..B,`-(N9XF(3?,*R1BY
-M)(+JRPIOBZ.B"Z"5IX=:.`Q;PU[6EI'"+J3:H^%6P"#RS/-8U`JR3)(^=&+#
-MS';>'/7<Y3L=W_OQ11*W1HDW`0`<`0``'`$```(```!%``$83AH``$`1``#`
-MJ`$!P*@!`@'T`?0!!`?I43]1BISDM%[ZWNV9%JY_\"X@)`@````%````_"$`
-M`.!H>->O=J`!DEFFY>-#HG'F=^`NU>.VP3.P2MR7E=VMD:8?E]T(1N&F]?!<
-M!M)M%EAZ+U'7YX&%8]83UA'7>5&<!_N4:2;N\&>NJ)T6#O+1B]`9V(\2+(G$
-ML!(J/^7U:UQC`^1H:;,O%0/\+BIU"@/$R)\:DR)(<%?,7<(WWO+6&-3M+H,-
-ME(#Z:<,(NO?;X86LI>?JI8:\7!BE]CG:^!`M@V-BI4B.2;PX=54=<^IY-"S7
-M#H^MVAE,)/]"%49I@]N41*3PP2PXI*HQV*F+F>76;317[;Z.F@P`KP2+11*W
-M1N9&`0#L````[`````(```!%``#H3AL``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-M43]1BISDM%[ZWNV9%JY_\"X@)"`````$````S"$``+!@NJ+>U&7'/C+N:6CA
-MF:"+[R:;'MG9#ZUC>AF0+%YE6DH/.:.QL7.ZZJD>&`&,!--":Y4W<SZYY3K;
-M9XT""!`==)"@RUFF'ON($20W89\(B7^S&4YK@\D08&*/E2GAZF:3Y1N'"A)Y
-M3A?9'F:N7;H&;=]8J&LWZ6I[M6.`&GT?[U,3EW,!R8<IUS8+T5EI4):O=(=7
-MUK5%RF<5V$P1E@^?[V>&7:2UOVB-21!;11*W1H1J`0#L````[`````(```!%
-M``#H3AT``$`1``#`J`$!P*@!`@'T`?0`U`:Y43]1BISDM%[ZWNV9%JY_\"X@
-M)"`````%````S"$``+"TE%&8QR%FGW9/DI;,!J'^9,%57W>B4D:D_'J.;LI6
-M@H:JP!W?)\2XR:L/DG.(E0OG@E.@UWW.PN'O]A3I7#/-4%%2O+^HU[VD*F?L
-MMM"_'ROP55N,_#[`"IXNSQI![SU6(1?;;M#/<86,AOFI(U9T0`D:=J7/C#&#
-MUBM+%B1-74?6599.$+$5TALRR+R!Q\>9P1YEP<ZYL_%I#T&8,/\75Q^51D$1
-MT'L-L@2,11*W1KF'`0`\`0``/`$```(```!%``$X3AX``$`1``#`J`$!P*@!
-M`@'T`?0!)`<)43]1BISDM%[ZWNV9%JY_\"X@)`@````&```!'"$``0#R"X`_
-MT@0FI,>T,+X<W^\QN`LI0@0I?UQM5GR.]V:6^-L;J(@',ZPJOZY-?T9#\^8_
-M57,CG@.^Z6G_,+)"HWR3F-G=M8F<0"4:;N=LJY6FD8&XYVT69>:QXJ1']ZVI
-M61^>"3]^/;PM46&"&M`>KM1O=;N045J"D(%C&Y;4,K_B&[0.J*C#R5=OKD#$
-M[,,!=R8C$OL":,K(0?Q]7S-)`:Y"^T$)N#/G/GR.-S/Y(]O,B3#!G+)-D&8R
-M?O%VBG&JC8,V`#/Z:2]3%#I%=.[^D+1USS8G3K2E'@DQR!#?*?LD!9?\M[S>
-M9)C\D:,D?JI+3YJYK7KJDON)&[HR.75%$K=&DK,!`.P```#L`````@```$4`
-M`.A.10``0!$``,"H`0'`J`$"`?0!]`#4!KE1/U&*G.2T7OK>[9D6KG_P+B`D
-M(`````8```#,(0``L"\X$;6$Z]DG:46E$0$Y2M6[RK$,N6(O98ERV!=,==83
-MU@2@N'LGD9&;EFRYZ@K/6>_GJX!_S`P-P3V=5BEP%<IS7+<2TE/G#@V?*655
-M[(@XBH9#"-$QS7)&F:OXSNZJ)L?_VROF+'S9C\>;415SN:UE#(!B9_M]?OE^
-M;3$OV5FNU?"!4MD*T]A+U@A1\_6^4^Z!SH+SXWATR'W6K<.GAUD]QG5O)X+>
-M;^HRD_=%$K=&N;0!`!P!```<`0```@```$4``1A.1@``0!$``,"H`0'`J`$"
-M`?0!]`$$!^E1/U&*G.2T7OK>[9D6KG_P+B`D"`````<```#\(0``X&XWBH.`
-MC.'PR5S`W^[-ZS=G!R*TICN/([-6%QR?)KUC.[(<HRGVK"N0_HQV3U#TX?<&
-MGY?0[:/)]D.-A0;I4<-"_?D^0]\#.?DYZ_LH/O\R\:#Y(AI/Z>E'I>R-_!!F
-MZ!LP:Q*6PLMOI&+J:]2ASH3QY"X5+M<VDEO)Y?U!LOJ%;E7!'-HCI,L3FC<V
-M`YKJ58O4M6RMY5#)<$0%6Z$%X+]!2M4:Z^(79U*@QAQ@:V:5@M<$J.MB\L=G
-M6WDW[/TM#!!O%TCC>(6OIF^XG'ON(3!K,%4$XRMI`R^D;N=%$K=&8]@!`.P`
-M``#L`````@```$4``.A.2```0!$``,"H`0'`J`$"`?0!]`#4!KE1/U&*G.2T
-M7OK>[9D6KG_P+B`D(`````<```#,(0``L#X;T!OT-UIAI2'P'7;5YW%+1ON@
-M!9YAJFN1YA/E#[?YBU[7,'-D?\$0LADH<#SC6L74^((#T-@/YS\VT;9PW;4%
-M9=%@$>'3.D+;PES9`7HD.')\\:PL/M"[0[$O[)TBX.ZTW<P>9R[C[/],7A)=
-M\%/.C/K0#+R'27@L8CLNMV['GFGY6GW!HZJ>0GVR:E-33F`^G#X$/9W^EFMC
-MR3^V[Z8!\4-9?_CTCS?8Q<!%$K=&0O\!`(P!``",`0```@```$4``8A.20``
-M0!$``,"H`0'`J`$"`?0!]`%T!UE1/U&*G.2T7OK>[9D6KG_P+B`D"`````@`
-M``%L(0`!4+!-/JT4I6U,5\TG]W])`[[LD"BKIH3LN:SO8H^'^*3MKDSY3E&:
-M)JX208V\7B=-#*]9WO]*:^R%6%+)_Z&4,]+0EG/$>W2N2S(CL*?#98\\*<::
-M,FL9;W^8!4;0>ACPKT"*-$]8@CTBT52<`8&&_QH%)%KC9YS!LBV3S2V.^DD@
-M/2BFM,HB:Z>2".$V-;_]?[E.4N>#6'6_N/3_JZ&;RS(<]J>N;2Y:#(52"#3U
-MX@XGI76XZ!Z<M.$0Y^-C1TAU2VB83>IP]FW58M.!&WS\/O>%Q?LO[C-J[(<1
-MT@7!LKA.*9.2^']V;]=A@Z]AV4=;PV61*<)UL;$<O]XZSR*(\2_#N4Q>Q=@1
-M[G#YGS4=*]1LGEGCWM/0RH`#CW\5C?X0@;+UW?9U;GDSW8/VEQY/+82K+B0=
-MVJN'MF(I)>PT]HQH$)[V/;U,B28)4,..11*W1@HT`@!<`0``7`$```(```!%
-M``%83DH``$`1``#`J`$!P*@!`@'T`?0!1`<I43]1BISDM%[ZWNV9%JY_\"X@
-M)"`````(```!/"$``2#4^YYJXP1J14&;^1R1:$^+XEI;=[4]-,,B=M8B(]-(
-M<GAA-ND??%\4L_H54XRWT-EO!IR^%\@&6_(_1)/AA^P3AV&::F+$/E7+,4TM
-M>%%.;(K,2X'VYC71^8J<@0]N/3GP`#(C0L.1;$7`X+&<KHIU-,TJ1F/$7CDR
-MMN(Z$"15H:OU6N^:D)>AZ+@]L\C4[Q+_"Y6UBR<QE#]5LCE`X2XUE798-M5E
-M`?'M_^MHC'0#/?[4C\O@L\)@J+'=^ABJ1T_IDPX4R3D*K)R=WC3;[:4Y69O8
-M\<)2!X"$2U=J)HQFWQE;>U2E2V_FSNR0?>TY"!V(O^X^15?#PT_4U=MLNSYY
-M#/T7H>PQ['@$6;Y4&7];MVD7QOR/V%[]PKD.7D42MT;V6@(`?````'P````"
-M````10``>$Y+``!`$0``P*@!`<"H`0(!]`'T`&0&20UG.Q.A`'F97S5NN6UA
-MZ@@N("4(`````````%PJ``!`"MJFT4U2:(!4M[<$R(QN"DLI)$[%JMNBW?U*
-MG+)@G76/D`%L&O-)B77_75O<@1+H.29[;9XJN09:V)3-11*W1KUG`@!L````
-M;`````(```!%``!H3DP``$`1``#`J`$!P*@!`@'T`?0`5`8Y#6<[$Z$`>9E?
-M-6ZY;6'J""X@)2``````````3````#`QH+P?D0B2&E8:B^XM`%'SY_);^'2/
-M;/.$0<8Z:-70\`D,X,?T!`F(+90+0T42MT9-=P(`;````&P````"````10``
-M:$Y-``!`$0``P*@!`<"H`0(!]`'T`%0&.0UG.Q.A`'F97S5NN6UAZ@@N("4(
-M`````0```$PJ```PLIS-UG>G8#?7DY2+&?]S'TG1K%=N]=:GQKMY2+K#!@-0
-MXU+5_PWQ%:[^A/E%$K=&$H4"`&P```!L`````@```$4``&A.3@``0!$``,"H
-M`0'`J`$"`?0!]`!4!CD-9SL3H0!YF5\U;KEM8>H(+B`E(`````$```!,````
-M,)T[AOVVWJ\#0YJB_[F3"%16"H=;P*S:M552K2ZA5:ZO!,/\1DBO0^&.$(\?
-M11*W1ON!`P"8`0``F`$```(```!%``&43E,``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E6KM!)(B+I8D``````````"$@(@@````````!>"(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``$UCG_D6)H4E`>+-6'M;O[^C0%(*6
-MIY^,MNX=1/5-Q1L_4_MK.[Q&`8ML=HJ]PNHM.^$WL5/565;>\E7JC`SO=8+F
-MW>$=L?:M[!?`37T<B0+O8L:$$C+W+P#/J&>)IU_X7*4,-,X@8:IQBS$L?FG-
-MB9#JO3^X.94[:*_X@!UZ2:0I```DOQQMXM+J`O)2]@0:#'ZAL.'2C$.9Z6O=
-MMC\V"4_ZBCLI```<``!`!')?P[&X8FRFFKM7ULO9\I"/6:+D````'```0`48
-ML5%Q<3=":%]!8GKHGW5["&N"GD42MT9HD`,`7````%P````"````10``6$Y4
-M``!`$0``P*@!`<"H`0(!]`'T`$0&*5J[022(BZ6)```````````I("(@````
-M`````#P````@``!`!@````',.1A0KH<ALO<:RS1`R[FO^<EI5442MT:EH`,`
-MN`$``+@!```"````10`!M$Y5``!`$0``P*@!`<"H`0(!]`'T`:`'A5J[022(
-MBZ6)```````````I("((`````````9@A```@``!`!@````',.1A0KH<ALO<:
-MRS1`R[FO^<EI52(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``$UCG_D6)H4E`>+-6'M;O[^C0%(*6IY^,MNX=1/5-Q1L_4_MK.[Q&`8ML
-M=HJ]PNHM.^$WL5/565;>\E7JC`SO=8+FW>$=L?:M[!?`37T<B0+O8L:$$C+W
-M+P#/J&>)IU_X7*4,-,X@8:IQBS$L?FG-B9#JO3^X.94[:*_X@!UZ2:0I```D
-MOQQMXM+J`O)2]@0:#'ZAL.'2C$.9Z6O=MC\V"4_ZBCLI```<``!`!')?P[&X
-M8FRFFKM7ULO9\I"/6:+D````'```0`48L5%Q<3=":%]!8GKHGW5["&N"GD42
-MMT;=Q`,`4`$``%`!```"````10`!3$Y6``!`$0``P*@!`<"H`0(!]`'T`3@'
-M'5J[022(BZ6)I1_B\W;9E.PA("(@`````````3`B```P````+`$!``0#```,
-M`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``%'S%/><
-MBW5T2#Y)PE!U#/P,E(R^3A$>']&JP`(%,YL.5\$U(BW+H_#]RCQ:TV,^)JG$
-M:M6G7ZE1,PIN^GD]:"A:G:T91M3Y^'NT9'DD(:=IN$R6JBE9)WX*"N5^;+&+
-MV>V[I]]O.-9?J?A-+N)'P%@>!KL,=MJA[*%/]Q6W`W9S*0``)!P:OF=<N=(?
-M>O(L)-KH5E@;X87+]RD2SG1&I.9-4,!L*0``'```0`02[*&9HV1:0?A)X,OY
-M9)U_U),_60```!P``$`%C`5%R1(.;;=KTS$PJ0IN1'7>O=%%$K=&J_$#``P!
-M```,`0```@```$4``0A.5P``0!$``,"H`0'`J`$"`?0!]`#T!]E:NT$DB(NE
-MB:4?XO-VV93L+B`C"`````$```#L(P``T*_2#%Y2_ZYGAIO7H&F&=.OL0V8G
-MY+:<Q2GABU?2&V'?P?<-N8K$W%N,UKAW'[;]"`5_;7C9??DFBN2]_X7U'@W.
-M?+@Z-F4@?L(0]-`"4UG(VALW='^9@AXI7;)%ST<K6!@QLSF))4OYI^58QG/G
-M"`WK&L%G;_Z`N0<E9^6;5^%.5*!X"K#K(B<X!<]0P[":%<5IB?>^R<C>Z7V:
-M\ASR4?!@1?/\T=X/BY*!%7XIX<(.BFV^V\&YN>=[^N4O0HTE'7L6#XO>-W8F
-M^+35DD42MT;^"@0`O````+P````"````10``N$Y8``!`$0``P*@!`<"H`0(!
-M]`'T`*0&B5J[022(BZ6)I1_B\W;9E.PN(",@`````0```)PD``"`(P=:\.IY
-M89^HT,:C%S?X,&E?&^)6@!>\NOT8$&1XI]"C97'"E0G@/?)P^:*=J=K>6)@_
-M=+>+3,4*&2I]&2UZ[J0[$A69O_@F]71H`UQ#(1M8P%[T5>`_M(5ZJ=^0A<U:
-MDO:N=7^B7(-:M'P8(]%^&'A&V>D%#:S=.3BURT42MT;&*@0`'`$``!P!```"
-M````10`!&$Y9``!`$0``P*@!`<"H`0(!]`'T`00'Z5J[022(BZ6)I1_B\W;9
-ME.PN("0(`````@```/PA``#@9_(X`#Q<9A5GA*F?"&6C;/)9U^.=0AU?'_/T
-MN,((RB%$IM^F\WWP@8JB[.M'(R9XATH&D+30(T<C%&7"Y]X?10EH^[_2,]"<
-ME4+1;JS*QD&O&ZBA!?CVZ5I.NE@M(A5:'#;0?<:TFV<,8-QZI7`R#^"3'@C1
-M@!C.^]"1I*=S^W4CT@9:/WJ?'V8'0AV*#__PA]29'%1L16V]5%>4^@MRJH4Y
-MR]5U$CVP3Z(?>'=>8`EO2*[VR/C"0GIF)O`*9RN6>PL1_<IC%\AI:2F1\UR8
-M6A=-]2>!U`4M4\PNF442MT8!-@0`_````/P````"````10``^$Y:``!`$0``
-MP*@!`<"H`0(!]`'T`.0&R5J[022(BZ6)I1_B\W;9E.PN("0(`````P```-PA
-M``#`KJ-U2&!"NGU[!F/&%:H[J<G%UU1H\(CU_VKB77[Q;!MV;^+MVGVV5#76
-M8E!%A9Y/^5,4>0+KL$3[Y+`1C]Z@3W0G'D%@,RH!G=1(I'A:9/VK!MWC09_]
-M^YKWH"W6(=;@9U.3K53CYS&P4()HV$$F7>`^D9V19JLN,*A2[]>QJ;A_NKZ;
-MHIE?IUNP@S!"S9,[>M-%Z[+RW&$CP::899)K%'N"!UN^5A&IOP=>HUTD)Z<$
-MUFKV#G8E)SA"R$9%$K=&ST`$`&P```!L`````@```$4``&A.6P``0!$``,"H
-M`0'`J`$"`?0!]`!4!CE:NT$DB(NEB:4?XO-VV93L+B`D(`````(```!,*0``
-M,'+AN:5P+;H<Z;U=(M/-)K<V2&%LDEFJCU"^EF73D&-`/+2&A_.E>07>UJ#'
-M11*W1DE8!`!L````;`````(```!%``!H3EP``$`1``#`J`$!P*@!`@'T`?0`
-M5`8Y6KM!)(B+I8FE'^+S=MF4["X@)"`````#````3"D``#`)%MX#43TP*P4;
-MP$OG`^]*Q]*;.@`W@T7%/CW<WFJR75GVCP'I_TKE"3)%6$42MT:[=@0`/`$`
-M`#P!```"````10`!.$Y=``!`$0``P*@!`<"H`0(!]`'T`20'"5J[022(BZ6)
-MI1_B\W;9E.PN("0(````!````1PA``$`5S\5>9140Y>\N'L\=."CK)N:9B4^
-MRBXD'8.,BHYU)D3_GV@O0$YTY%%NS$PDJ([U'JO1RR+-R5"TO_<+LL:H'!&.
-MV&KCV+TG8^R![85.,U@<(BXP`2>(9^&GI)P_`[O@SF1Q;67-"HR$58:43^&7
-MV5E9GP)3@8^973L0N)*8\>[J&,2>P_XG1W8!-B@%C>WTM^(,O?D8A(``Z>QL
-M:Y>A9S>3^+W)+X/]FYTVJ@WE<[Q(9S&E6$R^<Q#;K;/7,BJ>C@UZ^N2H4G#+
-MZ(?_ACPO7W::!(O.;C+UE^/37(AP%D.,WT6;-@(0(4.,+P-+CYSDI)=_=!PP
-MU5*3(:BV11*W1NR"!``<`0``'`$```(```!%``$83EX``$`1``#`J`$!P*@!
-M`@'T`?0!!`?I6KM!)(B+I8FE'^+S=MF4["X@)`@````%````_"$``.#5:]NQ
-MV"\8G=V(-ESXB3G7=)=$FN^3&G6I(7F?+-EYE,H"$ABI2V,Z"5-(Z_"`O>+'
-M&BQ'W6\-9Q%@=J]8R+<SXY8G[;2Z,(4>K)30=^24SP"0..M'"+8J`+(:I,)-
-M-FND2%"_#3@]O2!)/-$2>AY#5L0TTP6XNRB=Z$K9'K9B.>#G`D\,=,$)7^OH
-M1566R'!EM2WQ@\-%^JJ81VU<(3I^GDDO9\CW\[':8>Z27SA5]"-CZU(Y$\!8
-M\:W+%V)]II6D']K'[^9D<BZ2%93%F1),AS[YIB$@2=R@,A6X11*W1MJ1!`#L
-M````[`````(```!%``#H3E\``$`1``#`J`$!P*@!`@'T`?0`U`:Y6KM!)(B+
-MI8FE'^+S=MF4["X@)"`````$````S"$``+"Q"[6ASH=BDB/C>T*C$GGM+V2J
-M5G]2VUI>$R*BNPS;[DFSFE(Q=_6L=%A3/6<$DZ/:&>B2FJUR(X%LBVP/MF/J
-MQ$#@3>>2'\W<`%W2I4$PD(,F,C2*X+G@Q<GS!F%T\9M*[)U+8^T8\W5R%ZYW
-M`U*ZZ_2O.R.N6K?_!-DA*'-%<\O)7<PL\;5YQ>S.G\_9R#/"Q+V5;GV#?5DO
-M?*LQ?]@5_C7#&@3Q8)'-_4U>11*W1D:U!`#L````[`````(```!%``#H3F``
-M`$`1``#`J`$!P*@!`@'T`?0`U`:Y6KM!)(B+I8FE'^+S=MF4["X@)"`````%
-M````S"$``+!N,>@.;&O5J\W+TUU]3<A8WEE;?=93"8$"XSJ.6%`?Q8OPGZ7_
-MO>P])-=?DN/@=B<P3RC/"PT+T9MH-,],7_3.-Q#1@'ZVO@M;5N)GER0/=.7`
-M/*Z4*`NP/$R@H\=3N6OI@7^7[^A\L\PFVKH?CM%T/U:'L!?UBKN1>&E;X<R,
-MY9NI)\=Q/XZLZT;-QYO%+2O=V1XQ;TI6NIJ!)9R%M(.KM80LQ!(A[5L!^'2'
-M11*W1C72!``\`0``/`$```(```!%``$X3F$``$`1``#`J`$!P*@!`@'T`?0!
-M)`<)6KM!)(B+I8FE'^+S=MF4["X@)`@````&```!'"$``0#>1KFMMT_#/PVB
-M^E1'`NW#A%217=0U,S8\%XH!,G]S6H+M:ISE3XI1ZMUQ[4PT-2!I@^G-`1S)
-MBUZ!][(\+,D;@^#%B"5GWG!#V8NV&]"89'K*\2!-,DY,+;)=0ELBI>8+/-]B
-M=/K!X2,G6'4WP??[DCL`42B:&KSQPJ!_A<GHQ=#ZJ=Q:(BT?##(GJV/S<`%9
-MHN22N1"/24NOQ9>L-V"=DBYNU#$@S9(Q(5@ZN@;AMG>AR!Y\_N%J7F-ND^!3
-M<KN8VMBX.EIMMH.AN)997#&8NX?<\J'7`/@DZ`=NQ,?+3WR>#$00?$R+#'PQ
-MV?;Z1>L*D+`4,:JA:WN*?H%%$K=&$]\$`!P!```<`0```@```$4``1A.8@``
-M0!$``,"H`0'`J`$"`?0!]`$$!^E:NT$DB(NEB:4?XO-VV93L+B`D"`````<`
-M``#\(0``X.ZARNS"6*YJVM[&&H>[S:C`Z68E^$>3*<\[6.?$\T<!/3L/$,-8
-MZ5+.-@+M=SDLGE!F*VP;.(B)[A*FT2$EY`]=X+1.B,)N)+V(2C<2L2DM)]R?
-M__>#1!Z5E.#VE<FA2`OAH*&^?P_8<C_+?>)2HHW]:TXQH!SI)"V,_FESOGWY
-MDMEUNO6<4]T>8551+14P\"?AN]3^+NHV[3)&U0U!;'8[OSSW9'XW'(*@*=Y[
-MVVUD)%Z..41UP:OE#(UPOK#=F9I7GE$Y5C:1_N]WM9<&G1=ENA07OOVDFN59
-MD!)%$K=&2NX$`.P```#L`````@```$4``.A.8P``0!$``,"H`0'`J`$"`?0!
-M]`#4!KE:NT$DB(NEB:4?XO-VV93L+B`D(`````8```#,(0``L,G&'-J>21X=
-M=ID8*9P'&]/NH(RK-&*%[XK)D,%JZ!.[(P@(M;5EBR/QL?R8]#<J]`L2O2YL
-M))LEVA8#6P*T0E8G;WI3Q=O/APIJ$QU:5'Q9;CUL9Q:$I#%9JK/)]4\/KH@\
-MD?$SI?G]$";C/XMEAJQ#\!HYV7E),?*3V[7,F]<S;#'YU=2K),W9J>JP'=(;
-M%)[`/66"5V\5^1C%,\LJ:"(B><:U<9B)H4_<Z6-%$K=&K!$%`.P```#L````
-M`@```$4``.A.9```0!$``,"H`0'`J`$"`?0!]`#4!KE:NT$DB(NEB:4?XO-V
-MV93L+B`D(`````<```#,(0``L*BI'\]7]J'FY*(V*`3K'#RP:`W06H(\R=><
-M^NZO>2VR1.YAP):7$E0)=K#W\<UA"/]2='"M)(0U?T\?WBZM`G>*WD&8X0J5
-MOHR?17XLD":D)((RE:XHS/<ZD+E3Y@Y>@?"Z\5MOZ_=P>O/5K5">=V>,^E/R
-M9V_F4DZ)9/I"7-PFZ0[`>MTN')M>QKF`O4=H4$6!U6S,P&IW0'\:-L3L[@T-
-MY%@I,R1XQBQ/39%%$K=&+#T%`(P!``",`0```@```$4``8A.9P``0!$``,"H
-M`0'`J`$"`?0!]`%T!UE:NT$DB(NEB:4?XO-VV93L+B`D"`````@```%L(0`!
-M4'M[T>9(2#F4V8!3E-UA5T(,F0W/G0AB(CNT`/4A9E.^?ZOOS"R=W"K;A6\;
-M\.PK+@G["J/`'=H"$9VL(#=^_,'Y<PHZZ<,*-C@!H_%N>(MUEH[;G:VV'JF;
-M7MLQ"TWBR@`$HSZC=#=+!:@1O*]N;.R*2,_!5V11),12JDV:;#UI\R@*-C6%
-M)]H(QSJOJJ%TTWU'9M-5\P%%S!OJI'20D5<-5QR_A%Y;=9E1^KJOM.B"A<P@
-MSGK$"'(X4RB32KON/YM+W.SK?E>$]H]O-55_3AY<MN1LYB[P[F(<4D2O6L=U
-M]9[G"2F7[J[C%@@ML]W;\;4]L<WQ5X6L;%3I)2`W:\H_`-5<H^DN7#<%_]H_
-MOP>YW[G]X+W`5M5&W^`ZU10,;KQGZ,D^$OB[R'Z2@,GY?NGG1[@<])B-_Z%Y
-M3\%(Z[YY15A94>>*T].<[@[311*W1E9R!0!<`0``7`$```(```!%``%83F@`
-M`$`1``#`J`$!P*@!`@'T`?0!1`<I6KM!)(B+I8FE'^+S=MF4["X@)"`````(
-M```!/"$``2`'5'?(-RP;CTM^\M2_T7#_$ZW0K^T3/MA("*6HI3PK'0-\(!"*
-M.W%AA\S7T??QY\XQ=%?+CK/@2GVFBJAV'U1<>@<5('4UGPZJB=1J)W)A&2%3
-M5[=C>X&E*/N!<X^M+N;TT6'[/O_-M'5_Q?)<"[&>C\67VD.A44=IPHOMNW!9
-MC]0X3VN-D(K`BJ<-\*+@F-^WR[M-%9])N<8UFI%FW+(%Q1@H5IUNC!9D83FX
-MK%PQF4$3YU.9]3F@"`0=T>4ZVM'#'TQTUKW0WIE!$3OMR<[DC57+7N*LD&2O
-MBT7H0F]WA[_CGVY7<T9.E^N![L!%+H"4(X/NQLS$/*0\B^[?L3[:;F0&QM?W
-M2;(22VK_-+SU;A?ZL4_C:O*.*-WYL442MT;QHP4`?````'P````"````10``
-M>$YI``!`$0``P*@!`<"H`0(!]`'T`&0&2?0VTAS6.P1XNLYK\LA)O?@N("4(
-M`````````%PJ``!`A]B%?`W`8KCZNPPR_:C5,8$FHS-<JB1;YV!),[V6P?*-
-M4M+3_69!['YM[#K9V;IM.CFNW@]O.%*;8U%O11*W1BFO!0!L````;`````(`
-M``!%``!H3FH``$`1``#`J`$!P*@!`@'T`?0`5`8Y]#;2'-8[!'BZSFORR$F]
-M^"X@)2``````````3````#`C_%VMU@`IA/G0_B(;O\,'S;7\4WWI";$L(%O9
-MI"RG*5#[^W"0;7O0VSBN^D42MT;6QP4`;````&P````"````10``:$YK``!`
-M$0``P*@!`<"H`0(!]`'T`%0&.?0VTAS6.P1XNLYK\LA)O?@N("4(`````0``
-M`$PJ```P'__%M)Q#&;$RZ^]Q(@[17'_E)9+IIYTY/1PHOUCS&A9)&&0(:ZFF
-MV%&%R9U%$K=&3M4%`&P```!L`````@```$4``&A.;```0!$``,"H`0'`J`$"
-M`?0!]`!4!CGT-M(<UCL$>+K.:_+(2;WX+B`E(`````$```!,````,-=MWMU4
-M`--'_*R7<6[N::AC7[D!**86ZRL#,>U_,`_3IF5+@2^I)C)@*_<=11*W1I;Z
-M!@"8`0``F`$```(```!%``&43FX``$`1``#`J`$!P*@!`@'T`?0!@`=E@5*K
-MN#D7COX``````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``.--'%60%A]+_ZM-K>O8BR"79(B*3"$O9=,^:
-MU?5_1,W5+#Q1O!U]IG+^]'7I0/[917(4B[2=:N*%K,^(&OY*#;#H8$L7/-(4
-ME)B.EP,YI+YZIJ1]I?\CM6:BJ#F+*HKC^'`.:Z)'K4^M7IM)%2J@$U6-EP@!
-M>4S'>@'(.);$J7<I```D*6Q]L5'+Y/<W9=Z4*HECK]**4K;@,LVR=TH?Y7O1
-MGIPI```<``!`!!)V!Q+6+4NY,OW+UPPH;BE`,R,0````'```0`4L4#G8&?&5
-MXZ('RJ6,Y2E[-F:/Y$42MT8Y"0<`7````%P````"````10``6$YO``!`$0``
-MP*@!`<"H`0(!]`'T`$0&*8%2J[@Y%X[^```````````I("(@`````````#P`
-M```@``!`!@````$(3^G"UZK3WO?;T]$"!EC&1RVD%T42MT9?&0<`N`$``+@!
-M```"````10`!M$YP``!`$0``P*@!`<"H`0(!]`'T`:`'A8%2J[@Y%X[^````
-M```````I("((`````````9@A```@``!`!@````$(3^G"UZK3WO?;T]$"!EC&
-M1RVD%R(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``.--'
-M%60%A]+_ZM-K>O8BR"79(B*3"$O9=,^:U?5_1,W5+#Q1O!U]IG+^]'7I0/[9
-M17(4B[2=:N*%K,^(&OY*#;#H8$L7/-(4E)B.EP,YI+YZIJ1]I?\CM6:BJ#F+
-M*HKC^'`.:Z)'K4^M7IM)%2J@$U6-EP@!>4S'>@'(.);$J7<I```D*6Q]L5'+
-MY/<W9=Z4*HECK]**4K;@,LVR=TH?Y7O1GIPI```<``!`!!)V!Q+6+4NY,OW+
-MUPPH;BE`,R,0````'```0`4L4#G8&?&5XZ('RJ6,Y2E[-F:/Y$42MT9Y1P<`
-M4`$``%`!```"````10`!3$YQ``!`$0``P*@!`<"H`0(!]`'T`3@''8%2J[@Y
-M%X[^9I,=*#79[UPA("(@`````````3`B```P````+`$!``0#```,`0``#(`.
-M`(`#```(`@```@,```@#```"````"`0```(H``"(``(``#+:F>K$[>&?4)+9
-M>?<F,$O.52.Y+R59`)#(+>QI6/G#6A@X$]GI-H++>JRUGXW"\U"/`53Q(U`:
-MJFSZ*%).0_B&R_]$8H'?HWT^;_D3&-Q)!Y?OV$B?;%OAJ91PVW-;0:<N[W-P
-M.-8AIHXPD?P(X'C->XA*=!AMS,)^%;49YLLQ*0``)'X^B'@F&/3W1F<!^=5T
-M1($]Q!(?P/<."Y.9YG'JVL/U*0``'```0`10ZN/>]M+@Q+@'L_$K$-9%D<WH
-M:0```!P``$`%89#PE'[<(KN5N+0-*H(QY^!\$EI%$K=&:7H'``P!```,`0``
-M`@```$4``0A.<@``0!$``,"H`0'`J`$"`?0!]`#T!]F!4JNX.1>._F:3'2@U
-MV>]<+B`C"`````$```#L(P``T"K]O*L'-?/J0?WH&_M)+6;BNY$2]/Q=AXD_
-M=E28$FF!N6&"Y=T,?H[5^RAL6FLJ`;&N5>IR_FONL&UZ+9MC.4E9)Q1[+2#8
-MC5V<MG9FZ?I'G6X5O](MGD'=6COMZ`F8T0+P*H+:-V>WX,#`_<[L<_PZ;#XM
-MC[:/?](S]37WLO^L\U;J4=`:IO#OYA8D&HA<'8;VY#E_TOOL%,PVG&@SO<R.
-MHE[2TBL/%'6][45)LNCB@.$$"7Y#HT52Q[-`JM+-K[\O*Q&[VWC\^S5E`D42
-MMT:3H`<`O````+P````"````10``N$YS``!`$0``P*@!`<"H`0(!]`'T`*0&
-MB8%2J[@Y%X[^9I,=*#79[UPN(",@`````0```)PD``"`L?#2&RS?;6N1HJDU
-MCA!'PP"9XBE*:F(H$T?VDJ*E!9=\`G]F[+0BJWPI.*&FY4G`$_`X>W-I!3XS
-M4\.5<!K:/1MH^<3A2L,0IQX@M;_]*0(L"H;.Q3/[JSZD]!5)Q+,^,#H?JW4J
-M/'%?#$7OD$P#]-LKSFYM&[YT,F\))T42MT:<OP<`'`$``!P!```"````10`!
-M&$YT``!`$0``P*@!`<"H`0(!]`'T`00'Z8%2J[@Y%X[^9I,=*#79[UPN("0(
-M`````@```/PA``#@#,F.=FCXM!U.$KJD=*X?7DAATQY+^<Z:NHA7Y[Z?.L&D
-M!RM7FY[0R!U-;9MQ&A?8@;^!+0U+JG/!LL:<;LH@>T8IH#/!`1OQ?FK*RI*G
-MX$@YH2[!/;(HW8@P]T1]K[2JZ`D)LI3QO>?/9*8('&MP?%_DHCJ+;IHB\G!/
-M^9#FD4E/WWW>#Y9'QS1>Y*`M<QE8&5/?5M@D;(`?A)_G"(W(DJ"Z.GPM-O7:
-M%2Q&,?_X^M69(<P_YV*/B9J02F."3Z`R8L%9P%]K.!(I+\8>/?OOXY!7=O#I
-M_RFG9GSVE442MT8+RP<`_````/P````"````10``^$YU``!`$0``P*@!`<"H
-M`0(!]`'T`.0&R8%2J[@Y%X[^9I,=*#79[UPN("0(`````P```-PA``#`Y?_E
-MW:[P@MSF>*@<FF;&$_(MU5"R:>`_X#!X3]9%;2)D]_#JJW#@QG,;3_*49'-5
-M[S+7T;U<%=0&Y.Y\BY--DZ5'DQ'AQDSI2&`>BGZBN'OTY]/-VBFT['6(C&LI
-MO;A9.,>KWN3D\&MZ$)6Y=_):8S#W'[:6*21]338JC53OWD6$,+=!$"C-CNM^
-M1N$,JLMNGBE``(?S.WE$:<1>7__S=2%_U(NNZ5MSY=6+CAFQ9#$57YJO^)M/
-M+>D;\(9%$K=&`.0'`&P```!L`````@```$4``&A.=@``0!$``,"H`0'`J`$"
-M`?0!]`!4!CF!4JNX.1>._F:3'2@UV>]<+B`D(`````(```!,*0``,-//R=CP
-ME^&>T-=U/(*.A@2V^>:K!!Z5P3<,$#B)DB>6)+]1^@XX861-3X5511*W1F8`
-M"`!L````;`````(```!%``!H3G<``$`1``#`J`$!P*@!`@'T`?0`5`8Y@5*K
-MN#D7COYFDQTH-=GO7"X@)"`````#````3"D``#!>@='MEN\+VXN_T?.46C$K
-M_]>&8MN+\Q3U\4,4PRJ`@:D0W1FN29C)9[9*\442MT9P&P@`/`$``#P!```"
-M````10`!.$YX``!`$0``P*@!`<"H`0(!]`'T`20'"8%2J[@Y%X[^9I,=*#79
-M[UPN("0(````!````1PA``$`Q5J#-%$NB(#/$IQ>OY!PROW?K.VP2&KE)Z7D
-MY"F;3GC'*5!Y:I$`'P+QY(QC2)2J9AO1,#E1O:X1ME]7'SOVJZ1^AQDZ-&VB
-M?RS^)]6G6NSF_(%GS!&*/)SD*\-=@?P!)8MH="V$'1E!V96EK/SD!(!TRPAP
-MCY*1`=I+X2]#"#\;AO583=X>8O@QH<1EV/)%OE2D7Z_Q<DT*^XS4Q:;S3ARL
-MV/)ZF?_5V75LN3UY%R`OS$=[.J9(C;NC;T_V`PF+`<;D5I?)>I*(.>=YC`)]
-MF*,13]<JY[G'QF4'%"WV5$MRKFHU3C,`]/?.H/<9)>#VTW+6O;2F*=K5[3@N
-M11*W1K<G"``<`0``'`$```(```!%``$83GD``$`1``#`J`$!P*@!`@'T`?0!
-M!`?I@5*KN#D7COYFDQTH-=GO7"X@)`@````%````_"$``.`>A%8*GY>1H':3
-M$-WC!4[!<TH"7JBI*Z4:B09)SB897.4&N:"5/D5JIZ_81"&;TCKVC&.:+S)4
-MM(0T>+K&,8)Q,U,OD;M<YF[LQ)^6$KQ'9L-\C:(-SPVN)_W`?Y\`U<&(B,(Y
-M&SX.G11*F'^OW!8(4357LQ\XB<KKC?MUOF@,H9$@7!=KI>\#%I$>@9IS=X5O
-M_M0TOIK,]C(`N2I]?%@R"NCU[*R@:\WAI20QKIM>.8=VGTZ,*W?0_?4X#2!S
-M4=7P*#;1T=+-OS3IN+;+@:WVRV"-24,GYK,E"MO=11*W1A4W"`#L````[```
-M``(```!%``#H3GP``$`1``#`J`$!P*@!`@'T`?0`U`:Y@5*KN#D7COYFDQTH
-M-=GO7"X@)"`````$````S"$``+!NA82+`9>.^N16M,B)JF*0%JOF/GWS,B$B
-MM%$SF6#/"[HM<.V]00T478/6D-MLR-&_,Y5(SF9&(*%'1$VMWFO-L]H#@,/?
-M-PPGK52_"MIF3Y@IXED47(9`KTN+Y3'$JS?"'<((*+.TA*3WT_B35+SI2V-Z
-M'9ST\I(MD,&*&F@4[!X?E3^=[$LE?8`^`2H=H76)7>Q^DE,^;B>P_-_N31IC
-MX09YPRR/_K=&)L&]11*W1G)9"`#L````[`````(```!%``#H3GT``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:Y@5*KN#D7COYFDQTH-=GO7"X@)"`````%````S"$`
-M`+##<1K0KCD&[A#T:2:__4#]E+Z%.C\LKOZ]<<]\)NB2CMC@369(U;K`A4J8
-MS13)%VH6P]/;G"-2*5>UEVDFB**/-'(A]WMPN`NPO%!A0K95F=T>,-Z/-(L.
-MNQM9JQY(^Z36S0'?3=23@#:$UBYPW[7<H/X(N.&1.MBWQ7NXOE89Z%_S-/^#
-MD^07LCLN['P`ZWRS;7JV>JFG"A1=U+QK.A"&:P*1-=K=[0T[]:*511*W1G:%
-M"``\`0``/`$```(```!%``$X3GX``$`1``#`J`$!P*@!`@'T`?0!)`<)@5*K
-MN#D7COYFDQTH-=GO7"X@)`@````&```!'"$``0!C)-YR_3&-36^AS\Y#ZZ&A
-MZ<,-U[%@$D"Z)P!<"#]+7.G'DMR@92,LVF1%K#MB#PY^-@4*TMGK-I*LM\*,
-M5\-H-'F5!K%:RSD(>NTN"CVU*/O3X#=N$,2P9!20+92LXUB,J#7""P9>$JD!
-M1#)_#B3NX]7=.H;>8-GE7>BWI//QC7G#`"!>_32K8XEPAB2NV.D"1F[.5(.*
-MG#>:+*3Q"NZTR,=V.0XB^=:5]V..UI0G>>@+R]HUC&\G-%B@H'!B/5]*#7#$
-MB;+<%$V]2(Q*<YJTV=9H)_%&M_)8Q[-<$8!(I!:ZF1=KF)@Z$++XMI;[SF[G
-M1J*O*>&Y3OC8S3I%$K=&+9D(`!P!```<`0```@```$4``1A.?P``0!$``,"H
-M`0'`J`$"`?0!]`$$!^F!4JNX.1>._F:3'2@UV>]<+B`D"`````<```#\(0``
-MX+Z6TU>V4-$PEB4N#P^X/UPB,UYK*S_<OR!B`C2Z`E$LCX3;IK^V>YI=S.QQ
-M,Z*@3>O`XMEUK<MWG>Y"N%Y&J>\HK;P4/#-2`/491R;VBC=$\F%.]]A-?77/
-MCK>`Y"[-CJY$U=K8HH.9A:Q&5($^",R/PJ#\=T]HAAJRH`IY'DD$ZP$?9([-
-MKCIXKQZ&Z[V`KD/TT(\&DJI;-VT]:@_V!#'%>\Z0M96.3Y3^_DCC<#),C]7&
-M$7I8KJ6F*)_@)D8-TO]#7*3$M_&;4ZY80L9[-RS#17J82W^9G;$_;Z=%$K=&
-MO:`(`.P```#L`````@```$4``.A.@```0!$``,"H`0'`J`$"`?0!]`#4!KF!
-M4JNX.1>._F:3'2@UV>]<+B`D(`````8```#,(0``L-NP0]M"01XPB+5F/1WE
-M84NF*O")*"Z-TZUTYF?\B7C^:,Q3S#3[Y@`\A;:"/ZL>F$13.V%8`)_3`YBG
-M[G#H':+X(9H1K>U3O+9OR1CIW^@BWA1'>&T.1?P5GY215?43S1)_<!`ND2=X
-M6O9@P3T^0I!H*+]G/!\-$:;T;"H"$V(BD/I(!;H=M?9$M3]SOJ98B.SM$6D-
-MAYJE2U(`;J*-T[/F75?-2!U<'],;%_I%$K=&M-((`.P```#L`````@```$4`
-M`.A.@0``0!$``,"H`0'`J`$"`?0!]`#4!KF!4JNX.1>._F:3'2@UV>]<+B`D
-M(`````<```#,(0``L!87U4CA:ZFB4B3>8UW9[>^C;B4<]'6.T1.Z^0XJY3_@
-MW%!<Z<6+,!9+M:S2'+W)QE<N*UO`D0L7"J8TM>$TJ3#=RIYSZ6*1).V2Y@#8
-M[P3F<C(\)T55`?E$4X5/UUO.,C9&3%L7XWQ:@Y&:4=8-G#O/?`/JJ*2JYQ8A
-MO`W)>3]GBB$O<+!^]-.4YT/WN2Q<2YDP$-02"S'[0_0KR(.Q7:5YQ01HNJE[
-M^(*M8QY%$K=&MO@(`(P!``",`0```@```$4``8A.@@``0!$``,"H`0'`J`$"
-M`?0!]`%T!UF!4JNX.1>._F:3'2@UV>]<+B`D"`````@```%L(0`!4*4[39>S
-M+@@%3`W!.`7=E0,..<W*L;J!LC".4&47J^0!75:_3#>PT6V*KYX3^7Q>ZSS7
-M:Y3BKY[3`N;HPUN9^1)QC6*O_V_@)3?#\X5#\<CBF'Y(0J_;F0/3PR8(0=%L
-M?0N,1JWU7XED)O`7H_P`3@7`A.B=04/Y,I'1"RYD0_5@[;0Y6Z5A/F"&QT*N
-M_(/`KJ$2H'A@I-#\XW'^E%T;D)H@E,PV4L6:\'L='ZST%//\82TPIQ]N@/BX
-MV?T4B??85%XS5P>R06X0C5DJ9+/U,&8+0R-U5'XH`MM(>*YL9=;C9I/_@[[&
-M7DOF)<<Q<&@>FW2BO7>\C:_-YX?+Q`!5EQM&,\LO\UWX26$SQNN//XX+9T+W
-M&D&6E]RQRG-#@+XR,>;(E&'8/<![Y@D`)E0$#1]=^TD<6"%8F?2EC5N>>$NS
-MU)O*\8EO'"U]`6JF11*W1B(T"0!<`0``7`$```(```!%``%83H,``$`1``#`
-MJ`$!P*@!`@'T`?0!1`<I@5*KN#D7COYFDQTH-=GO7"X@)"`````(```!/"$`
-M`2#O'A]8QYX\T+MCNK.(=:VC@))</5*.`8L^@YRN$_V@&?*7\^SR8*KJ0`%'
-MIB*(ELE1E1<+-4/$BH`<2J;"3`#?<<E!=+`2^9ZAOV8E^F?C:VUS%RK`RB#6
-M*5-J].<`UGC#DG`JG$C!/EM;D07<B_J0!OMHF94C2O@.MEMKHYRZM)A3[8K_
-MI*O_5M[\3'0^%H5*S5ZU!>>_.7EZ><;GRH!C,ZZKP/PHQJEN>W2K`_X$B(EJ
-M9:3\%-?05=GJF'TSL`09P@N*$K/$XH-,&]VXJK'[#&8B^]N^E4==-J_\NNKJ
-M>#^="ION9.:\R@C0/VM*08F2V,%K%(XKQ75_)96Y*['9VJ06Y(6@!U*@K6'Y
-M@O^8(T";/CVC^@[#TM,/[442MT856PD`?````'P````"````10``>$Z$``!`
-M$0``P*@!`<"H`0(!]`'T`&0&24U"XYH9:EB3/I"VJ6B%%=DN("4(````````
-M`%PJ``!`;'N[N#<(_./&A&C\*28;RT*MMUK1`7W.X,_#>8T'001V;(A:L>GG
-MRWPYP:?&=VZ;14*"O50]*DX97EG$11*W1DYF"0!L````;`````(```!%``!H
-M3H4``$`1``#`J`$!P*@!`@'T`?0`5`8Y34+CFAEJ6),^D+:I:(45V2X@)2``
-M````````3````#`I^!L2R(QK&60Z,OMK_J\:[O$D*Q%NM5C;C'%'%;R!J,+L
-MJTC@_CS;M(DSD442MT9M>0D`;````&P````"````10``:$Z&``!`$0``P*@!
-M`<"H`0(!]`'T`%0&.4U"XYH9:EB3/I"VJ6B%%=DN("4(`````0```$PJ```P
-M-!5P)F9#[4S39@OFL)Z"(MJK!VE_80(5%A<8$M/<'GQW&4!_4TCFNZ1/MR9%
-M$K=&/XD)`&P```!L`````@```$4``&A.AP``0!$``,"H`0'`J`$"`?0!]`!4
-M!CE-0N.:&6I8DSZ0MJEHA179+B`E(`````$```!,````,'YP6E#;"8WM[.W6
-M*X<DS(E\+DL_<<J(5RJ<FW^]CLU6+Q(PAW-UN)V.<V@L11*W1JB="@"8`0``
-MF`$```(```!%``&43H@``$`1``#`J`$!P*@!`@'T`?0!@`=E8<*@BV-K,@T`
-M`````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``_1J1L$VT&2QKY1T]]<UDOC`N*HJ31K;\%]<QD0>_VJP2
-M!QN6/+PGLB?5'Q3>(9HWC)DWMDV!2N@RE%,>IP8/8]E,MU@0K[9FS8RQ7$9S
-M0QVI%M3IPK)XK_WG21P&XA%%QR=A+`EX]1I#FIB0[59&\T]MR"Y\>E4@2^F8
-MIW%+<$@I```D+)JJN/SJFFP4EX+RPO;\,K&B";F&LO5*NG/)(]#'SC$I```<
-M``!`!!Z,E3(/BU=-3F-<+A%%/S%1&>@[````'```0`7TN+ZX>`I[IU*K]Q4G
-MS(SRU9,1HD42MT89NPH`7````%P````"````10``6$Z)``!`$0``P*@!`<"H
-M`0(!]`'T`$0&*6'"H(MC:S(-```````````I("(@`````````#P````@``!`
-M!@````''_T_E")201M">3Y'^K.KM@ZBS`D42MT:OR@H`N`$``+@!```"````
-M10`!M$Z*``!`$0``P*@!`<"H`0(!]`'T`:`'A6'"H(MC:S(-```````````I
-M("((`````````9@A```@``!`!@````''_T_E")201M">3Y'^K.KM@ZBS`B(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``_1J1L$VT&2QK
-MY1T]]<UDOC`N*HJ31K;\%]<QD0>_VJP2!QN6/+PGLB?5'Q3>(9HWC)DWMDV!
-M2N@RE%,>IP8/8]E,MU@0K[9FS8RQ7$9S0QVI%M3IPK)XK_WG21P&XA%%QR=A
-M+`EX]1I#FIB0[59&\T]MR"Y\>E4@2^F8IW%+<$@I```D+)JJN/SJFFP4EX+R
-MPO;\,K&B";F&LO5*NG/)(]#'SC$I```<``!`!!Z,E3(/BU=-3F-<+A%%/S%1
-M&>@[````'```0`7TN+ZX>`I[IU*K]Q4GS(SRU9,1HD42MT9F[@H`4`$``%`!
-M```"````10`!3$Z+``!`$0``P*@!`<"H`0(!]`'T`3@''6'"H(MC:S(-Q465
-MMOQ/)*<A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(
-M`@```@,```@#```"````"`0```(H``"(``(``-6'/8!3,XC0L%MS4-)AUM,9
-MN2B+83V'LV<")M5FXAS1Q06/O)&??W@HQU[%%1`/"$*7]_YV@FB-3GZ##9#8
-M+]+U1WGHH*A2C5BF0%;MCOM%;/%EFEF1L)/\65!P4S799.1E9B;\MF<T5EQI
-M&TZ@0-\,K57Z5X8E%HJT;@B+`-[&*0``)"O\E1<<L;_/_>\X9V.(TO2V.4WR
-M8Q[B$*U':8*8WE?>*0``'```0`0*573"H'=K"G#Y6QA<@#:XZ<=N,0```!P`
-M`$`%?P`;<Q9#V2"?)Y)"%X$7H,28<[Q%$K=&#!P+``P!```,`0```@```$4`
-M`0A.C```0!$``,"H`0'`J`$"`?0!]`#T!]EAPJ"+8VLR#<5%E;;\3R2G+B`C
-M"`````$```#L(P``T#B.(XUPH+B,.;OG93<BPS#(VQA1T0/.`"*;,[0[0DGV
-MPC:1]I%+NFI#].(+/43/#KZ0V&@(/W;"?/+4KB>-N3$$)L_8WQU+<E3S?E_P
-MK.C[NX5WTGR;VPWYL9HV'RLS21SH<E]YYH`'VN!(TB#G1X->CEK;\0?ET'$O
-M:WH/,T[B>=@@<4XR@G=AD)G:Q\;47SL*2ZH1NV-]#AMWL<+>A3TO7P1!M\TU
-M$4'HY^7[\@2R`J(%;<O?KQ@;+OQZ<G[W)M)A]I!JY\CW'_J9`442MT;&0@L`
-MO````+P````"````10``N$Z-``!`$0``P*@!`<"H`0(!]`'T`*0&B6'"H(MC
-M:S(-Q465MOQ/)*<N(",@`````0```)PD``"`CX[\K-A_-?(<+&,!]I6JQ*30
-MU^%'.%?F)I\TL%?KMX[NSL;[U.JK(_UM\W6(_\[N*Q0K)YK42C)U$/_X.#L<
-MFF[=YG8Q+\H+ZP0*X?A\N,\UX=U^]83+MB/<HCCG8$+@6E(>*HE=>O12-<6F
-M5#3:F2SS^"7DIR"-F4O&2D42MT:880L`'`$``!P!```"````10`!&$Z.``!`
-M$0``P*@!`<"H`0(!]`'T`00'Z6'"H(MC:S(-Q465MOQ/)*<N("0(`````@``
-M`/PA``#@PB?J]#_<6,![F"T2J0`B[C4?7*E6]?+979/<VU?!PZF!B?^`?]"T
-MI'<T+?GUT,+`R(P(@BOB(O+IGO>DL<-?8<:J<3E8&U][!Y5EBMIS#J%!P!P%
-M14Z`+UTR0USZ7E8RW0QC*_Y1?X[+K5Z$!Y,#SP,:FM15/:TM0X;!:[;._@$V
-M10IA2HO\:$FP4<&)1UURN/BHSEENJJEQ$A+P\0A1O+I3Z5,G?Z4GID_:Q3!R
-M-DV;^OL/)\4%=!Q;EW@J4^PSQ$KH22MWE+6R=+A]SE3-E</?!8$&#RSR/:>7
-M1T42MT98;0L`_````/P````"````10``^$Z/``!`$0``P*@!`<"H`0(!]`'T
-M`.0&R6'"H(MC:S(-Q465MOQ/)*<N("0(`````P```-PA``#`1>3W<1''!"Q;
-M^LY]@]A`M789MG'K<$<MTH'<SY(3<&K13$OT^NFSC]D,*W.)%R<)K(_WDR-@
-MFO\]E_)QK#\9&ORX03#!)J$XF65;WPZJ,"GS3-9+H:5#RC[C=6MN#UK)GY83
-M`)\@(A#+OBLI.0J@5,57H_FN5W^;E;TPREOLRZX_!KEQ<X%Z)B]X$_[LVVE^
-M6&/BH8H9N5'3E4K^M#RIEB<@0QBV<%@&%!;V.B4IGO<(PWJ/<=<IU%,G5E-%
-M$K=&M7<+`&P```!L`````@```$4``&A.D```0!$``,"H`0'`J`$"`?0!]`!4
-M!CEAPJ"+8VLR#<5%E;;\3R2G+B`D(`````(```!,*0``,(,J=8$708@1/NQB
-M7/9_N/\=L9LX?1'V'W-]G__+FHHJ$,`RLM[[(]7A!((Q11*W1K2A"P!L````
-M;`````(```!%``!H3I$``$`1``#`J`$!P*@!`@'T`?0`5`8Y8<*@BV-K,@W%
-M196V_$\DIRX@)"`````#````3"D``##746J:@S=6X_]0_]RMP7T7Z1^I#1V`
-MU,:TEJGR$G>;C@Z*AH8?0-4R59?*[$42MT:,O`L`/`$``#P!```"````10`!
-M.$Z2``!`$0``P*@!`<"H`0(!]`'T`20'"6'"H(MC:S(-Q465MOQ/)*<N("0(
-M````!````1PA``$`*]L@,K)G/NW46U5=?T8=UKP>2IC_XSUN%`RV1UW+8T\:
-M4]JPF`!*O1AMH'X51@W60)Z1J\,R+=#*$BNQW`D?$">YLSW$M+_:-VN7?_[Y
-M:79R<X./+=]+5\%(M9>:XXMM&_^Z"I3VOH<>XT7?=`N88P'D0D"DXY^9HHR`
-M6HPW??&%O7",LZZ7W_$!X_E:SVLBWZVXX;P^U&<]MW1<>-['6&&YXA8WPSC-
-M>(V9=4Z[UMC?0NN=W;EC6Y_'.QJ#VBMZ2M?OJ_6S-ZQUL!E7M[5^ES",?>6L
-M`)GY,JO)(5BW#E2MNZN56T1-)OC`+]9`6=\FI-(#_T/=9>4?QM.J11*W1F[(
-M"P`<`0``'`$```(```!%``$83I,``$`1``#`J`$!P*@!`@'T`?0!!`?I8<*@
-MBV-K,@W%196V_$\DIRX@)`@````%````_"$``.`:Z'HRIZ5?0Z*W]U^Y7*O5
-MI1_7Z*"9)_4KV.;L?'<BENSN4;'Q<NBS#4QB'(T-"#0KM[DJ@)3D43]444R2
-M3IC24TN5G\_GTX,FSN;N2#719Q16TZ7/DI/44+?C*_HJK>QR\R8+$NO%ADU0
-M?8P0&!H.<S)@X*%_T./7UQ!]C;<'/,[]/P;VW7CPR3N&$5[)EW1+7Q1>L/WT
-M-[RDF/B7C9+[^MH\[6L9^)Z!4F8A^:+PSNI^7#O_Y2_?4I(E?SJ'LM7-;/8^
-MLXM;BF`[K=Z#CUKTHL8E78WK%__N5?>/11*W1JKF"P#L````[`````(```!%
-M``#H3I0``$`1``#`J`$!P*@!`@'T`?0`U`:Y8<*@BV-K,@W%196V_$\DIRX@
-M)"`````$````S"$``+#>U1!(5+NG5D]5T6:2Z#1.^])U%4&W@@=E#<,+CJ!9
-M>_")MC2(01C1[/-WPO9H&#.5XZQ:_VKH4#/4%OM:R91E=S?E6Q=X?%SBUF!9
-M:RX)2X?\<RR=\@`6#(8MGL,I9TGREIH7Y'_/9UH4PP#3O.CW^9A'_6)M/]HU
-MI:\*J_*DU>YY!/K_Y;3D>]F16+[?G/<0/+(,]H^Q3R@MRHMC9XQ0=]JP`?ZW
-MR@/OHF<F11*W1C()#`#L````[`````(```!%``#H3I4``$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y8<*@BV-K,@W%196V_$\DIRX@)"`````%````S"$``+#)4ZLG
-M)0/)$%DD*N1GK$ZS4F>)?CXT=W7\T7BMH9>L0.*T9N+(6)>O'?59P\/DU`BB
-M3ZH+0Y;N6MFDXF_1ZKP7P5\O-DY$`%-QHO.[8[J`AJ2_N$C&,US2;X#HE+;B
-MT>?+"&Y7TN_N%+5)2CC9LF:O<8SZ^[=-OW&DX_SP[8J\)#3>^SUXVQ^(6VG%
-M1C5)HML(5=&-SZ$H2SX/YN=JY@UZA#_6Z/.RYG>A?O\511*W1JTQ#``\`0``
-M/`$```(```!%``$X3I8``$`1``#`J`$!P*@!`@'T`?0!)`<)8<*@BV-K,@W%
-M196V_$\DIRX@)`@````&```!'"$``0!.^Y@"7?`9[Y6V$!;Z7?O_C,XD`Q"T
-M,HD81,C"9W&7=9BI1;W(->'B+?=5XQC%\!<AOC8;F<HJN8^E$>4?Y$N7,4&^
-M-,&8VQQN:XPD!!0*B:@MZH`I4P7&V^[86V5D[A(M#\)A:2!W085_W.84*\BJ
-MG0=Q/MR$R@E#S>\!B,>!5DU7'>*W9UVW!317^.$^?`N%>+\DYMX0:Y#ZYN-Y
-MS#)0^>5OOHGCN]V+_\4)/A3%]RY$^DIY^`8`4JC>VSZ/Q3/%I47:^4D@=$;W
-M-6]Z!6\*V81]62VI"#JQG^HFYCL]ZMI(][4%#/)9=3]HG^7'()?F$5U=6\$)
-MUA$:@SQ%$K=&]4P,`!P!```<`0```@```$4``1A.EP``0!$``,"H`0'`J`$"
-M`?0!]`$$!^EAPJ"+8VLR#<5%E;;\3R2G+B`D"`````<```#\(0``X$LI&QLK
-MX<*J\W\FX`7O3QA$7>5,^T=YE#?<BYR?0R@ZK+6N01CG6I+0>>;R%^(W:MB1
-MW5CZUU94`Y56IIE=Q!)N"[52%-Y<MS0?;&YHV[!0<Y?Y`HKP]V-2YN]9_`C"
-ML?"&0[G_TIH(E%Z<4%)DVD4<N6)/$W,5[UY8F+J@KNGHA_FS4Q/0!%*4HB3Z
-M2W6*BW4^L!&=&;A7X-1)4$LMWZJ\/(`:D5GRU,P9R,<X4_5KR3IC!E/8@7]@
-M?$'JDK2K@@I^;:V7^W_8YW(]FK]D7=6Q6_M%3DW.FJJ1M&U%$K=&T5H,`.P`
-M``#L`````@```$4``.A.F```0!$``,"H`0'`J`$"`?0!]`#4!KEAPJ"+8VLR
-M#<5%E;;\3R2G+B`D(`````8```#,(0``L$5_E1I1A\HEA@TAS+X+^-NOE:+/
-M4I!I&'CLP-->(`-N2J$4S?&#)(G?&M=VK_.Q2J"*MW.[JS>_L?#J(+/,FOV/
-MU`'?_S+VD]Y2/)JH7*<KN>!YEE;0:1L')">QS']\XW!YI1<MC!\X:<0H!BT+
-M0-4Y=>Y6KL$PY0_GM0T\V8QP\FXH?7QU&;FAJK><850:.H,P!\H9`X\I0NJX
-M90S<!WJ4#ZWE,HEFWW^]G`)%$K=&F8L,`.P```#L`````@```$4``.A.F0``
-M0!$``,"H`0'`J`$"`?0!]`#4!KEAPJ"+8VLR#<5%E;;\3R2G+B`D(`````<`
-M``#,(0``L/ST_N4D]!^7/P4Z(U\>CWZ[!"I9+&IM:I*(D@<1D!B%_OIJ\5%!
-MZ)0)R/>Z0F5&QSHWKOF!K6?T:&[JL*&.!R]R4/9JP.]HMDF".AZW[[ZH,4_P
-MW&>,^2^+OU;Y:,)EB;LN?>Q-'L\S<'"=+R8U8V^#PNDS<2Y1Y.;%2K1%Q2PN
-M59-6H?P/`EL3).'^!JPFD_D/VN6MACF<H#<^B>VANO/>4LY%RX.M30;L#&Y%
-M$K=&,+T,`(P!``",`0```@```$4``8A.F@``0!$``,"H`0'`J`$"`?0!]`%T
-M!UEAPJ"+8VLR#<5%E;;\3R2G+B`D"`````@```%L(0`!4!#.(%7\D#F=57@D
-M`>#N5%_I*'E%O+6/J&99G,-E34L&ZD;6:`<NTA`RS#B@#"F")PKZD%M.`2/?
-MEV:CUPC^I(.^3?YY(YO*"`KW^-85)Y3AZA37^#`_XTA7<GJ?UP&Z&7F^)W.Z
-MP5#71L27P>?0O?N(A+"1=9+=^QMQI5BHYIOC,3/S%_<<JQ(N/7/(]EU/]U7\
-MB:Y$I*V1'O=,FSR0!"EQS=_>QN?^[!GT&!@^*OM)XJ\4\W)&$+"-T::L48H"
-M<U=#]GASW5I644I^0QI5(QF]UCJ"N"`*I7^PV5Z3O+(1\56ISE2LT;G,WI@!
-MKC=CT3"@L/5F#T$+()L4U0]AZZE.]=C+*]"7?W$'&J-$\JTC;.WXL%R<.IZ\
-ME>#EO3TO*EY<`TAA?_?6=R0!`VZ,]B@1^/S:J^R5DVY*(/ZTC')%DP8<@'?G
-M99=>\GM]11*W1O3P#`!<`0``7`$```(```!%``%83IL``$`1``#`J`$!P*@!
-M`@'T`?0!1`<I8<*@BV-K,@W%196V_$\DIRX@)"`````(```!/"$``2"Z40]2
-MHP;LG@R]!HXFIS@NQ?E!>)-.$>Q'*GNND$(\T<:3T8\=,NYTP"UV([XN4P[Y
-MKV$^BYZ-P@7%/,?L[&A,.O;D%.B!L_QQ4W+?16MW.`WKH*D(4U2S9+B3*V0R
-M/6TRFDNUTA`RSLY8`/[##>&["L`Q`16'(\7[%93A,JJ<T^$&A^4,7N2JL%QE
-M-T49C20I4U@%)>Z)ZJ#&]^+_&J>:-^_^;#_L=K*M_#$J[4#6*]G#'T($5RKW
-M.,-!#F.$C2JEZU[!8?9UR97JA?4.+IY0.BA4QI<&1^KD,VCAJ$^[#\\$:=)>
-M02R]==``U&WQ^#1KZO;\L>X')CS3BDXKYEMRIJ-_A\-W,\\'6XF_F/O$`ZP-
-MD?*4@?<;M+O-9$42MT:M%PT`?````'P````"````10``>$Z<``!`$0``P*@!
-M`<"H`0(!]`'T`&0&2=BG@+1^#%^>O3$/2=TE**8N("4(`````````%PJ``!`
-M._KCVBZ;/>!^WT2%07K$//FC;G].98-V6K*48')FL0,)SR-BK9;$0;*H:OQ+
-MJ);Y"LOBWTQC;0#A8QU+11*W1F,Q#0!L````;`````(```!%``!H3IT``$`1
-M``#`J`$!P*@!`@'T`?0`5`8YV*>`M'X,7YZ],0])W24HIBX@)2``````````
-M3````#"_@FC^)HJD'1++;(QD-/JOY=24.FY3^6CLK^]F9<K]100S94LQ-RR+
-MFIN8[D42MT8Z0`T`;````&P````"````10``:$Z>``!`$0``P*@!`<"H`0(!
-M]`'T`%0&.=BG@+1^#%^>O3$/2=TE**8N("4(`````0```$PJ```P9W$;2(\0
-MV-X]/GM_2X:WO+_Z9!&M@$L=!`I%R?O!Y%BS=5E/240"T"LD%GY%$K=&3TT-
-M`&P```!L`````@```$4``&A.GP``0!$``,"H`0'`J`$"`?0!]`!4!CG8IX"T
-M?@Q?GKTQ#TG=)2BF+B`E(`````$```!,````,&AK$8^I3.7B4ML`[XW)A2AH
-MM)FI\P]\%PS,$TJL+YT"YWN[7C9)R6\>V!I^11*W1MR.#@"8`0``F`$```(`
-M``!%``&43J```$`1``#`J`$!P*@!`@'T`?0!@`=EE/ET7-YG?&,`````````
-M`"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``AWQ#U%>8,DJM2+@.!Y?."!YKO%MH\\@S5JK)\&O*7<,8$9Q>87LE
-M;:GB<A:/*51CR6%%;-%Q:NJ/.`IHP#U-BGT%8ILZW]<:L)D3$L7`J)NJ/IR/
-MJL2SP"JAVB0?=!&JI7QBYQRQ&#,#/%&(TNN=4W5P4@OBYSD@=9=U6@_!S1,I
-M```DB)U5<OVJ.BYXZ8)";`IT>+IF&99KC)&Q1<"8,E4^P_`I```<``!`!`JN
-MMQ#F?6A7>?1(SZ:VQY%==X9U````'```0`6FU9@-[%O#./]=`"N5C*_\X-4@
-M<$42MT;AG0X`7````%P````"````10``6$ZA``!`$0``P*@!`<"H`0(!]`'T
-M`$0&*93Y=%S>9WQC```````````I("(@`````````#P````@``!`!@````%C
-M=5/?NC\5>*^K+?;8Z^'#PO@'W$42MT;[MPX`N`$``+@!```"````10`!M$ZB
-M``!`$0``P*@!`<"H`0(!]`'T`:`'A93Y=%S>9WQC```````````I("((````
-M`````9@A```@``!`!@````%C=5/?NC\5>*^K+?;8Z^'#PO@'W"(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``AWQ#U%>8,DJM2+@.!Y?.
-M"!YKO%MH\\@S5JK)\&O*7<,8$9Q>87LE;:GB<A:/*51CR6%%;-%Q:NJ/.`IH
-MP#U-BGT%8ILZW]<:L)D3$L7`J)NJ/IR/JL2SP"JAVB0?=!&JI7QBYQRQ&#,#
-M/%&(TNN=4W5P4@OBYSD@=9=U6@_!S1,I```DB)U5<OVJ.BYXZ8)";`IT>+IF
-M&99KC)&Q1<"8,E4^P_`I```<``!`!`JNMQ#F?6A7>?1(SZ:VQY%==X9U````
-M'```0`6FU9@-[%O#./]=`"N5C*_\X-4@<$42MT8]XPX`4`$``%`!```"````
-M10`!3$ZC``!`$0``P*@!`<"H`0(!]`'T`3@''93Y=%S>9WQC?=$%6LG^0R`A
-M("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,`
-M``@#```"````"`0```(H``"(``(``!]2$KS$I\I=!N_(W"/)@?&G@W4G1;;W
-MWL()("^VSZ;F,#Y-NQ>K3KEUGU&^Q7?1/P"`'_Q!O94?6:D@#8[TYRRC@ML%
-M^Q3N+YZ8WK1^IY(L@?QV7(F3+=%K3;!3R-1A`+;>>&IS6CAN?H@,]`P>>3+\
-M;'LTK]LIS-S,I^^$UY^U*0``)`H"],E;$/590HQ?T1&GO).S05_IX4K=)\=?
-MK_VZ$KCE*0``'```0`2HYO+>TYJ3Z-ZR%@2$IP`0FS0W@````!P``$`%H8;<
-MQLZ*DIB#M%\!S8H>89Y)P+M%$K=&(1`/``P!```,`0```@```$4``0A.I```
-M0!$``,"H`0'`J`$"`?0!]`#T!]F4^71<WF=\8WW1!5K)_D,@+B`C"`````$`
-M``#L(P``T,YX5;W#/8L9D:+R;^3B:YORP:P\-7*3PH9!OL8\V?)R?OP!/8<E
-MD7E,[=&>M7X)V"TR5(3OCV_JTW#@O69NG,AJR-NO57Q)7DIV&D5ZZ0(^`._&
-M_N1%*7#!UB6)ZCM&P1.R2FQ5V/7(3_6>&\LZ[C2D4%#/!UH]PR+^ZPE54$EX
-M=TA_]J^^.P`7E[+_7LJ>I7W&YE$/*.V,^-0P:#Y4:ZL.2CNR^90/EX,Z#6_Z
-M+FS2L<.TB?(RBWB:O3+!3Z'Q\81IIB@GP/?WSMT43442MT;W*`\`O````+P`
-M```"````10``N$ZE``!`$0``P*@!`<"H`0(!]`'T`*0&B93Y=%S>9WQC?=$%
-M6LG^0R`N(",@`````0```)PD``"`RB^B4/K<USI1"$:T5.ANU66W>>3N;;7=
-MZ`DB8(SUH/MF;R2R+(O0A!PA5HFV"5!4')>:+NVVF'FC>Z@2O]0E&B0U[HW:
-M;C#HB"=7_I*/XO;>=(@B5X7V&2=KQA0SA]MZXN=S&;OJ"^0\H-OSL(YV:$SX
-M'<HAXR:0;&0TMD82MT9F!@``'`$``!P!```"````10`!&$ZF``!`$0``P*@!
-M`<"H`0(!]`'T`00'Z93Y=%S>9WQC?=$%6LG^0R`N("0(`````@```/PA``#@
-M5NDJ"[*[RFU_]*_<3;4:=`,H>Y6D9^*#C3T#GPE)=Z2?7&M/-/T64Z98\;W%
-M2B4N3C&.H]O=M._8DR4KL!L7.]V;/TK56#"TY5`8'N#D@3Q:0R.HGK?WBIE`
-MI@'>NGFPJ1!82,X,SUA4:^"WBN@7WF3S?M:O$K@S.^(=Z7;EV`0VPPWR'=JG
-MR@LX))/U)HL><;T_CP=B`"NV6X?(;V2_%#,^I;X9.)6$4IP#B4K54073^%``
-MCC."XNI'#!A:/LTJ2*>_E4&UZ%ZX&SMU<$\M@<Z)LULS$.=[1.#)XT82MT86
-M'```_````/P````"````10``^$ZG``!`$0``P*@!`<"H`0(!]`'T`.0&R93Y
-M=%S>9WQC?=$%6LG^0R`N("0(`````P```-PA``#`,I.*.D7`:?J-*%4WY8.#
-M$2]F"@[<U"LW<1;5Z]9%!4@K3P9[C]9SMP1.V'B>)TG==(:)7-L(Z<%'/N)G
-M>U4ADGE,D-9SCSQ7^F[;]]&5^-`C'`N[1)GQ2F;'0P!Q]NJIE,J_I:SP!NF)
-M:'&$[":-^1,\.\G)$E&&:[!XR%,,NPC0>4R_U+KVT*''=S2B$$*>1MQD_1CJ
-M^=>OD-0];#_`ZH$?_]V*4JPB_Q29:`;'>A!_@)+^FUJ:@[.$SBE&$K=&\QP`
-M`&P```!L`````@```$4``&A.J```0!$``,"H`0'`J`$"`?0!]`!4!CF4^71<
-MWF=\8WW1!5K)_D,@+B`D(`````(```!,*0``,(N<"G].U(9X'H*1B?&AH_@E
-M\\-SFY9X5=W8E5`$Z^NP2/\Y815N[)UK,.9T1A*W1E!4``!L````;`````(`
-M``!%``!H3JD``$`1``#`J`$!P*@!`@'T`?0`5`8YE/ET7-YG?&-]T05:R?Y#
-M("X@)"`````#````3"D``##UN`RUYX;R(7D,6%9PRSK=>\PZI0/^'.(S[A0[
-MQ8C/3.@=ZJIDM/]5I#7(MT82MT9B;P``/`$``#P!```"````10`!.$ZJ``!`
-M$0``P*@!`<"H`0(!]`'T`20'"93Y=%S>9WQC?=$%6LG^0R`N("0(````!```
-M`1PA``$`>C#!PHW/@(Z2FEX,T"$9B#L&2CH]5^N+^#;MC3,J,LIC9;9MGV&_
-M^X)L*N492&AQ>]KQ;<&G:,N+OF([3(:Q<'/(Z6JAX,-'.VWT3[@T8!194C0L
-MM+>,,H#$C:A;=(!1IFLLZLVZY37V$B1X&ULT:[\/PK.4_P0X&U`Y#1\O5<Z4
-MFA*8*`7&VY7B!`_$O,R>494-\+3:+;1JU^DF"C-[2`9'33M).2A@MQ$U.*(D
-M$>6&!^]<EB9S9PLYPR9;/J64!`_SZS,UX'PES!.N<MNG2H[#5B'V`T`E!@>0
-M:6;<^D[I><.^P_*C(V\.&6>6.%R_,)AO<\;N?G`D%W+61A*W1@-[```<`0``
-M'`$```(```!%``$83JL``$`1``#`J`$!P*@!`@'T`?0!!`?IE/ET7-YG?&-]
-MT05:R?Y#("X@)`@````%````_"$``.!`0,JE)3@/)-PA9(D[W6)`%"TK`K9@
-M(BP5>/%*FG4,Z5*_')"GI5DH-US\;?<1_..KGJ$>;Q;N&KY8Y'/GW3?^9RH`
-M@0WW[([)OJ2CR\89!@.TE1N"4*)E)1W0\]>/^3<*@*H=N:CX=JM*ME](+5XP
-MNW@$+;)O\E4:W-=4\T7K)"P1JM#+/LV8-J3SNFRB>GHSEMMO5_?E8G+)HI#`
-M@D_"XN8WR/K-^I60?B7N7LS=T#">Q/"'I-FT1SHKL,`<@VF6S'<V^P0_:BAB
-M'[:9-4>[NK`5]GM1EJQUOUFY1A*W1A*9``#L````[`````(```!%``#H3JP`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:YE/ET7-YG?&-]T05:R?Y#("X@)"`````$
-M````S"$``+"5+16<(;M"X^L)PR;4A/BR,\65ZR3(5II.]1C^U@TF+W4"UO2$
-ME#_K,KN+:T>_E469@D3Z8^_0EI"<+L8B<,F)"KY7>H%9)'WWUB/]/12_V%_[
-M+QYZ>0:I).>+IX[JJNZ%+W:!.RZ+2/A)^H[R8N8Z]&NX`G3A("G9PS<9<:N0
-M`@(7M.[[A1/*@TX(+!J,8K?"Q3!R=JO1X'T^&9&F!V'IHP&A>NS-N61KU3PT
-M1A*W1F*[``#L````[`````(```!%``#H3JT``$`1``#`J`$!P*@!`@'T`?0`
-MU`:YE/ET7-YG?&-]T05:R?Y#("X@)"`````%````S"$``+"1T^VQ^);*#M%,
-M50K6?AC!\9JT2E:S<,`KA89%K)U4OG@8<!2]FW?$P4[I@!'AT]8#O&H*ANCG
-M$-9#,9H\K[X<;X?T6=X;*<IHYP0!/RUBR?(`C.-,!:5Y1$,V&?;RL'#T8L74
-MA>M!Y3'^UO].\M:;@]UA**/K*`4./.36M8'-K)6;^%KWBP$-OO/I-%?#`CAU
-M1\@?A<)#V=(1GXBV_V"M,64D*L@["@F3J@D+1A*W1G[8```\`0``/`$```(`
-M``!%``$X3JX``$`1``#`J`$!P*@!`@'T`?0!)`<)E/ET7-YG?&-]T05:R?Y#
-M("X@)`@````&```!'"$``0#$M^(]GA9VI+?%3&04QD#7S$0\@>Q5O406BN0=
-MA8@9*@(%"/*VVLJ*R![?U!G,VA+I170%7]_\51RN'MO%U0A,-*]@\XQF?F7\
-MD=AR!$"E"+_7'(;86VP"&!LPZ\&^J:6O2X'.`8O*1_&KW$]E5?S:(RC68'D\
-M(HR8[CZV&S15HMGXUA1?QC:7`YM$8XS_656!;!30/P2T>SL(RJOK/PVGO:U>
-MD(JH%BIL6;CFWOQ*W7SQ$`AD.?OL6#R-P6R.;6=77WH]RG2?%OVJ&%;:OWNC
-M3,TV@.6N!57_OM$>YXW]B0<AUWD5B*W_K,>:SMDKIB`^D*<V`/Z7:94IB$Y&
-M$K=&-^0``!P!```<`0```@```$4``1A.KP``0!$``,"H`0'`J`$"`?0!]`$$
-M!^F4^71<WF=\8WW1!5K)_D,@+B`D"`````<```#\(0``X/"-'/B25VRR@BGU
-MZ:'SVB*?AE<X\T=B?R-]NY*-J._V%<TD?=S+)6/*M+00.S=`X:[`(57^^07+
-MJ\MN^EUEJDOL:U7Z,,DSB.IAQQ\NQ<*6K;=OC0E3RFHVKWMK)+38.>D&8>XV
-M`$U80$D9^&$R#A&&@,3R%47]1:8UUDJ(W?L@0R^%>57=/J%F_H:*=B.R`<[^
-MF(RJ@8WE(C3E!*\)"I2>#5HJ/'?_TV94$O8EV9/%^!>.9:B#&TBH[7R&H69\
-M&T+M;UO[`J^G^SAW&"B31V$$R$5\KI2*RP^7(H9&$K=&S?,``.P```#L````
-M`@```$4``.A.L```0!$``,"H`0'`J`$"`?0!]`#4!KF4^71<WF=\8WW1!5K)
-M_D,@+B`D(`````8```#,(0``L&6\+$PMZAK-'2$+$V,F,8D:.R;8WV4@Q[`1
-M,PP]6Z%OOM:CEIF8J@K9/J.$.I(1=>TUS-:%3R31*7B,GK\D>*MN<^%E:S$1
-M+Q<)%XEXV;DY9$\T7W,+_0K/Q]W,HHGBDRH/&QI<+]@U=8R?2?4[L'+)=3:W
-MTN)#M2T2%TKE6,4K^R+HQLZOXN3WI`[X\&/<>V\R1#6Q*(7_8%"T?WI3A1)S
-MRSMSJK0YW-'R>#U&$K=&="0!`.P```#L`````@```$4``.A.L0``0!$``,"H
-M`0'`J`$"`?0!]`#4!KF4^71<WF=\8WW1!5K)_D,@+B`D(`````<```#,(0``
-ML&"VDME0K.,%7SYMSSI>NOA=B.U9B%H,?29KEKAYCS3W$G'U09$\D97_*M.S
-M0TE[1EJF<`<#<=`EX)N5#(M+OW%:(@C&2/@'472&<<QJY(0<DP_&OG,`Q0?5
-M[D1QZE,1!D/7A$*T*;\]X6P&R$;%?H0S"C<<V4B=O'C&?154/0E[V#OS0?/)
-M6G)59VFF-7X\6M?0X5&LR3SQ?FQ>!+_]HAT#"F=#[-/:9TIE1(U&$K=&XE0!
-M`(P!``",`0```@```$4``8A.L@``0!$``,"H`0'`J`$"`?0!]`%T!UF4^71<
-MWF=\8WW1!5K)_D,@+B`D"`````@```%L(0`!4+LIA`8X6C#Y#];+Z[.2/US#
-MA@T<N0L*^0DMY%*+T%DIT9^S1Y_:&B.$.GW\-<&!MEZ!GD/[^/TS<E^`]..G
-M;U2;W5MIZE/9`Y$VD*B@N*811/%SC)Q:LLTFJZE_:PS_@M/0@3NAYQP.5*U'
-MPH;H.@$P[!JLQJ/M;8ZX4D_&%79P;@#Y2BJ^W31_4W]9$)GU*`JIU8,9RZ,/
-M-*I0KEL*%R:)>"H4#M-:Z+T9\%'O[F4?\/R&=(M.WP\/<AIH3-4E*,32"YSG
-M!15[!!MA=P?IPN'M2<3'+()2]SGTN9B:!B?.2<*=;G/!%[-1"3=+H;O)4!\5
-M)IV@4EOZ;EG;85]#H@^>QAY9C*#SJ0F=6I1,_"M+6F/661T#C;A%';"*+4LN
-M*>4\"KX%HF2)@I_8;HFM7<<&SN1RC/?A=?]ZXSD@VZO-HH*A[`A86KJR''I4
-M1A*W1CV)`0!<`0``7`$```(```!%``%83K,``$`1``#`J`$!P*@!`@'T`?0!
-M1`<IE/ET7-YG?&-]T05:R?Y#("X@)"`````(```!/"$``2"F1B>0$A.AWLH0
-M@I5$._#I7GRNON(4XA#A,=AR^X*]7^"!U/#Y+*5'DTE9X!<`ZCO[3;75E.&9
-M6?D@I,92V+09-I=:D[W$!'(I-`Z4\]).]0'^Z&X@SMS">H\,S7KK]BZ_WUNN
-MF6(X7W[;XW%!3X%R/A2D40">`R98S.I)W.'GWI%,>JZ)(:-SJ@(@AZG%?O+\
-MB`;)DC[&QW/:FM)$DP>[^WMC21@OGU6K?2%T4F*]5:PI\WA.&+33D,$DU.[,
-M?;L/-W(,>8,1L16B.8D-V)$,X@9OQ]-CP.\ZM^H%'#Q.\\Y6Q_V3Y4OMX1-W
-MA'4O6)$<(F54,C69F*[F#_Z$!)&#1F!#]273BPP9Z2[<&;_-44?2""/4]'D"
-M7;N![$82MT9FO@$`?````'P````"````10``>$ZT``!`$0``P*@!`<"H`0(!
-M]`'T`&0&2;@`:4^AT"/!JHOP@>W(IQ(N("4(`````````%PJ``!`O"0::_U;
-MVSF=B4#1"4$'S:.[])I6@X#J_6Q1%'=FJ#7.%>=(T3"&%XE"ZXQ1FL2K_B<J
-M*1/]1'_>QP\%1A*W1C+*`0!L````;`````(```!%``!H3K4``$`1``#`J`$!
-MP*@!`@'T`?0`5`8YN`!I3Z'0(\&JB_"![<BG$BX@)2``````````3````#"W
-M9R*YT,JHO^ARTKOM2Q9=WJ3G/6(A)J`./S@TC9/PCR5,J_Y:PQ&_>BI)-482
-MMT;%V`$`;````&P````"````10``:$ZV``!`$0``P*@!`<"H`0(!]`'T`%0&
-M.;@`:4^AT"/!JHOP@>W(IQ(N("4(`````0```$PJ```P9'V_'<Q6\[L(V0H#
-M-IL`921?%C8"*!DHL^R$6"=V+E0%;RM'.5*)=,YF#HY&$K=&V^4!`&P```!L
-M`````@```$4``&A.MP``0!$``,"H`0'`J`$"`?0!]`!4!CFX`&E/H=`CP:J+
-M\('MR*<2+B`E(`````$```!,````,$?U&P/V?S5EU1PN3=RLB0RL47@8$%')
-M@<3\RQ`^TB0_I(:4@T*AGWS[\"\V1A*W1K#A`@"8`0``F`$```(```!%``&4
-M3K@``$`1``#`J`$!P*@!`@'T`?0!@`=E"[+;3829K:@``````````"$@(@@`
-M```````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M!B0D05M*N']&2IT4;,H`C-_8F$J;[N'U/5C#;N2C3@T6M>^0$\(ZR0OV8E,"
-MG945<*CAT!=9%MM%K).[0DM-C@VS!1BG7H[/C"^C.K*2ZY]P5Z[4LX=SY</D
-M/5D,#P:.,^:U>4^;Q(`VUL;DE;=<=F71[RWTU,R@4-%]!,F(/%`I```D-Y]C
-M=Y$"]81!4LH&?Z0<%/<:/H%*WGXRP*$PEZ+]R<DI```<``!`!&LR90?&]!4F
-M\T^=D-VBFJ[_;*[<````'```0`6DER4J@_6][0#DU[*V0.9X\3]A3482MT8A
-M\`(`7````%P````"````10``6$ZY``!`$0``P*@!`<"H`0(!]`'T`$0&*0NR
-MVTV$F:VH```````````I("(@`````````#P````@``!`!@````'P*7RZ9QPU
-MNW!CG[`'$M"^\UH$9482MT;@_P(`N`$``+@!```"````10`!M$ZZ``!`$0``
-MP*@!`<"H`0(!]`'T`:`'A0NRVTV$F:VH```````````I("((`````````9@A
-M```@``!`!@````'P*7RZ9QPUNW!CG[`'$M"^\UH$92(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``!B0D05M*N']&2IT4;,H`C-_8F$J;
-M[N'U/5C#;N2C3@T6M>^0$\(ZR0OV8E,"G945<*CAT!=9%MM%K).[0DM-C@VS
-M!1BG7H[/C"^C.K*2ZY]P5Z[4LX=SY</D/5D,#P:.,^:U>4^;Q(`VUL;DE;=<
-M=F71[RWTU,R@4-%]!,F(/%`I```D-Y]C=Y$"]81!4LH&?Z0<%/<:/H%*WGXR
-MP*$PEZ+]R<DI```<``!`!&LR90?&]!4F\T^=D-VBFJ[_;*[<````'```0`6D
-MER4J@_6][0#DU[*V0.9X\3]A3482MT8:)0,`4`$``%`!```"````10`!3$Z[
-M``!`$0``P*@!`<"H`0(!]`'T`3@''0NRVTV$F:VH,0R'GSB'HWDA("(@````
-M`````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"
-M````"`0```(H``"(``(``-@\4/9;A4(#*DQ(H>I689_M]NXQO)/C6;P50TEI
-M3V`G]!.#06=.MYNNF8H]'-*G;W+\YZ9'D/-*T;E$?>FU5^WR'^QB&,PIZ?7C
-MT:X+`"'\%@`"E0\N6-<WT<:ITX?F?,M?;QH?,.JDZ["L)1E29+FR(=W7R1@]
-MG($=+&R]T/]1*0``)',F5!QF#E-V=KDC$32518+",R7FM;<(?;0P7_7BMA'4
-M*0``'```0`3O/<"3_4BIG'HLERI6OO:A^0HX"````!P``$`%;KF6G;?LYK6U
-MHF\E`A,Z;3@:11A&$K=&&E,#``P!```,`0```@```$4``0A.O```0!$``,"H
-M`0'`J`$"`?0!]`#T!]D+LMM-A)FMJ#$,AY\XAZ-Y+B`C"`````$```#L(P``
-MT`?]YV%.F&0X\4/X6A#=6&J/-^XG0$8MYUM567R\)C,DMA:-J0PGO*HLKSX3
-M*K>/?5$+@7]>7=.;Z3I1$INX;8`("?R%6NNVUCYB8'JW:-9/OO):%LF#*\30
-MQS%_9&IX:(CK.4'DKHB-K&TQ+H+EQ0\-X+K%4I(L>SWRPXAG#;FEK',N?587
-MO?/Q-=ID@YWP,]J`1):(J!A?N4S['1&84ED#./<RMU*)/6)%OE2O)&ZU-<NP
-M_61CB$&EG;XAGI%ZG2-1,^#6_.M%Y6=QW$82MT:T:P,`O````+P````"````
-M10``N$Z]``!`$0``P*@!`<"H`0(!]`'T`*0&B0NRVTV$F:VH,0R'GSB'HWDN
-M(",@`````0```)PD``"`:=05"<!GO@OMN8^Z1U_TI(A%^S'6<+8CX0-K*4ZG
-MV>`I;G_]=,0K/XX9;A6,`XOAFST#9(<1H2SP;>$J&*Y1*F?81T<*:*]@0<PX
-M_S'3=H6RCU6#K)P"JQY\`ZVLK[-K*BQ<9B+)2L-PC_"(CX`RDMRS43FPX^=:
-M@G%;5$82MT;CB@,`'`$``!P!```"````10`!&$Z^``!`$0``P*@!`<"H`0(!
-M]`'T`00'Z0NRVTV$F:VH,0R'GSB'HWDN("0(`````@```/PA``#@$'6\2_UC
-MI6R6>Q,]"]9C#UL'`+<\4Q7&,"XR(E0N@QRAV+XZ[0]N?MV/X1[_`+H!QX[<
-MEU$A.R<O7!1AAET.[M^'Y.E,UHD:11QW1GJ$H8:GH!E"X0GZ9.:K64&I`ZB=
-M#=("0Y6R6>:ES$`-:FN+7`6O3/*(#R$6\!S@`#1[I6IF=H7[2--W\!`_`$-W
-M_TR0#[+SOZ]V"T),OW3>G(\$[?1UA70Z\27X^M.\-DQ7.2EQ_>8D7/53(W.C
-MY*;@_#A:@LT(6.M9>`?Q3ST2E/F?[S\D,E7N6BJG4<DS!$82MT8KE@,`_```
-M`/P````"````10``^$Z_``!`$0``P*@!`<"H`0(!]`'T`.0&R0NRVTV$F:VH
-M,0R'GSB'HWDN("0(`````P```-PA``#`%0?UKO6,))!.S\T_K.,E`YOX"Z"G
-M%.(E8Z"]Z:4,14@5`5V1]=CU(,=P''AP#DAY?L)R)+I`-H6!$N]S%\<7OX!>
-MR*\]QY`N446K.21GLS%A,9M#,YOSR_T!J#6)TO\^-.`8,R4^2LOBJQH575_Q
-M7%;MQC57Y55JA/0PX)JIZF93'`<_Y'\L%-687^(-)]"EY=V`BQ,LGM><5'E'
-MK+UT.*TR2FA2&FH4+&=`TLY'!+/_";*/K2],J_4X72I&$K=&!:$#`&P```!L
-M`````@```$4``&A.P```0!$``,"H`0'`J`$"`?0!]`!4!CD+LMM-A)FMJ#$,
-MAY\XAZ-Y+B`D(`````(```!,*0``,'?8A>V)IM:;J69-B/-3#0QVOJRT4X*2
-M`Q"$K<$)T-_(N#2YC>&=TU)S`H$Y1A*W1D/``P!L````;`````(```!%``!H
-M3L8``$`1``#`J`$!P*@!`@'T`?0`5`8Y"[+;3829K:@Q#(>?.(>C>2X@)"``
-M```#````3"D``#";,5QPE8Z%C37NJ!F,-=I`]H=;E%3389.K1!_9>)[>"V%*
-M6GP[,Z!@P.J[Y$82MT:LY`,`/`$``#P!```"````10`!.$[H``!`$0``P*@!
-M`<"H`0(!]`'T`20'"0NRVTV$F:VH,0R'GSB'HWDN("0(````!````1PA``$`
-M28+@3L9G%/JYE%$OWB9AGV51^IVAS]VT=::4>2)9$OB0SH7+I,@BX[$B1K-F
-MGT]4WX7>K_KIJ!T65S,=YKN50JZ9D3ZWG'>6RW0,B^XGM%3I+KG:GMBS\J5*
-MPJ0D(IG4N.J61E65:E[_#T"10ZCNNP#AL'4EQ"<R25>`6B@#8)=ZF5E55R=7
-MD4<>^P0A69E`+Q%TEH"B''85=QJ&QB4%7DFH]1ORVIVR_`F1">-Z@Q:VFHBD
-MK^,]`M-4W*KLG/VS93:5;WR04S934[B7C)DR#OLV&%W!ZWGB3](W*Z?Q&BG0
-MBA;VA05_GW=DM8$[@9`M*(6GH],YX2WWD,'61A*W1L+R`P`<`0``'`$```(`
-M``!%``$83ND``$`1``#`J`$!P*@!`@'T`?0!!`?I"[+;3829K:@Q#(>?.(>C
-M>2X@)`@````%````_"$``.!5NM$IR9=+?HB=@>'3V1>L>`KWUQ1TM0R#SNM_
-M3>H<2&GA/7PJ\XI!8P0_L^XM?$T,C"VO18`96\SC6M9[_>]]A$GG8NE)TOC]
-M<`7G3JPT>_\='H272S'0<+MB7QX:\SSWZV-?>G^P+IIF9>W%E=02$HNQKE/\
-M(6@'>"Q.R:F':^Z'Z+2'P`D.Y*%?5OPN>\6'P$_O6[=NVBE8/+?F9:,+6/S+
-M_92NE#)'2?'Q2\;7JXQUPRS=.SP`B:(KS7T31H%#6)T7YR&*A*Y$U)TDVCBG
-M9VW0CFY@K'S)3&]+1A*W1I;_`P#L````[`````(```!%``#H3NH``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:Y"[+;3829K:@Q#(>?.(>C>2X@)"`````$````S"$`
-M`+`>MB*I_/+W^4"2]A8#`9N,":'\9B4FDK$UA1$[`"(&X)?;+%5J<@NJ7XC?
-MU;LK\]_4.@4_QS,M**>#K$%]&SJ'D<2MFU%WX,#>"^]$KS2`N1OBYA97BR*H
-M;>.WLGTI\#Y2H&7>J<ZA);Z,*@Y$T5(M:'E;6P%D[/+5(>N);70:UH_.Y=1`
-MX,2W@^SZ8K&I??&V'8L?"WSHM.\@G_EC2?(5_ZX;R"!)VNB-:X4Y1A*W1@\C
-M!`#L````[`````(```!%``#H3NL``$`1``#`J`$!P*@!`@'T`?0`U`:Y"[+;
-M3829K:@Q#(>?.(>C>2X@)"`````%````S"$``+"@J]W8821X2\<'*,0BKA)@
-M"LN"E`@<A1=@PKE61<+@.F&CQQ("9D4D#S'BJUMQKKX(9CX;2<DSH*!$4A\K
-M4[3ZXV22<3$2;*SBM$&4=F@U'/`>JHM>Q`UY6N,T33%C[LL<,$*2&9AI[SA\
-M'PWK77NH^]B_QUD^T87J3R$1D=@[PO007PL]^;QJ/[@ZMT&C!;+1X!*%1=2W
-M8=GT3R]FZ-_K;55SM9#_K=0V_R\X1A*W1@%`!``\`0``/`$```(```!%``$X
-M3NP``$`1``#`J`$!P*@!`@'T`?0!)`<)"[+;3829K:@Q#(>?.(>C>2X@)`@`
-M```&```!'"$``0!T1PG[ALPI*=K.2D5:\7[&B=,HZW^&6+[H,:O]"=><I$ZZ
-MZ[_MF_O%*3MMJSG,S?LH9$/'%%VV7?&PO4;:,/),>BKSFHNVN0ZDRH2L-3"7
-MR)4$QA3-GHU1^[4U5JYAJC9R^ELZ?C."Z1AY00P8>1=Z)--V207$@-I(`)'H
-M/@C:Y?TT9G9T-MB=]EG7"=\<LG%JZ-%[+P&75]!`P),L70:-..FN@Y\K2;HQ
-MIX[LR"M%8?3L/QQ:-.UV_&!VZ`/64BK"9:VDCQ^46.'9%7F"%MWGM4L-)0=Z
-M0%IW`TA/XW^9U`DZ)[3#JV4LZB$X>"=@]Y&CU2#B\W\D\*?`E15&$K=&5$P$
-M`!P!```<`0```@```$4``1A.[0``0!$``,"H`0'`J`$"`?0!]`$$!^D+LMM-
-MA)FMJ#$,AY\XAZ-Y+B`D"`````<```#\(0``X&FR(G&!DC=Z];F4:?WP.RL%
-M0XZS*UD2#]6"KIWR['E6PDVQ-?.C#.19'H):BWM56]H2>6W7FX"M8'CEX\08
-MM`[$-JUZ#?*8^D'PL/5Z">?<M-C/9@TW)[*C]9'7L#E)AR&WUYJ.+UXSE0M-
-MQ>L9L$YYH13EJ^CQ/R4Y9"PFT;[,PHG.OI@C;3ZWMF*(+*=2N$6)R8)CSK-_
-MZBK]1A5N,A7SW^TS:O":MM</N_\@6G4TD8X0A#7V1I$Q)#S<)+J^]@B#LKM0
-M4XUPA%'7N"EPEC2M07BN'6"K3B9,G-9&$K=&DUL$`.P```#L`````@```$4`
-M`.A.[@``0!$``,"H`0'`J`$"`?0!]`#4!KD+LMM-A)FMJ#$,AY\XAZ-Y+B`D
-M(`````8```#,(0``L&,O#25>B7;M!_[ZKU(;)8LTR)6Y!PQ(--FB?S$,:)F6
-MO7XU_T/=Y!\&W#>+J1-:(VQ1W#MN%C!!5`@))=B*($7YLEM22D7C=+;I1*PC
-M#W0YU$8SF>7XC1V'2%//*C^LC-W]/P-G%)\V_.&8,8G;G'IP:!+R@\N"V?YA
-M"2NKS)IWLY;J;YA$I<!6+`+26TG(G?^E=T,$2+Z2]TGO9NH<27X^]U*61P5$
-MMP>Y?M)&$K=&U'T$`.P```#L`````@```$4``.A.[P``0!$``,"H`0'`J`$"
-M`?0!]`#4!KD+LMM-A)FMJ#$,AY\XAZ-Y+B`D(`````<```#,(0``L!"YYD.^
-M[,=/0.A^-JH)B6FB$".A)0S`<1NUP+97..F7+A^DHI<&/ZJ)]XWK'LQM'-9!
-M&L2;:[Y9P@/O%T[=/#YO"%O@(C5#L;:8>@PBF$SEL(YS"SW?8&*E?*@NGUX]
-M;YQ[VL;L0ZSYUH9I?W3,$;>#W/'W*.4[<CT$89]QT:ZT=L?9FNU>MW4P/NM-
-MS%,FGG,Q[;X/TQ%X'E[S2S$U(RR+*'4+XHMW-9?S^>M&$K=&>:8$`(P!``",
-M`0```@```$4``8A.\@``0!$``,"H`0'`J`$"`?0!]`%T!UD+LMM-A)FMJ#$,
-MAY\XAZ-Y+B`D"`````@```%L(0`!4$B`9*;LTBAK$A%0PE:WBN)/^<P?U5^I
-M[X,'3O1X4$N*@)\ODB#/6S1VD<2U?^!G$@_]>PNZ!]6Q.9+.-M0!DJ[ZVBK$
-MOE?S:\I!V$TIP],_7UQ'@2DQERV)-)5Q2>9G='-E>]?L"5I!F*<?=4WCQP/"
-M$5$9V^AN_49[9X6K40G*O&G#Z=-W<+]Q6!*V`7Q-;*H#J%$J6/E[?11D!1^\
-MZ$9MR%'`,$NGS=57[PN,^$_<&R<A="7;"YDGL'<0G>5/VLP0CM+P\]J<,0#M
-M]D/QX9UM1]5RJ5/*#L=R2N`;KV5N9=O8(?*7@)!`I;)),P(5$MXU.?MX:UN5
-M5DFRK]MFL`L72!B@^IW#6;U_`;SKRSJVE9'<0&J6AZ8\)-(H$5&'I1<&95]T
-M&-3?+R<JSG=Z3TSLJFJV"EKPBN207W>P\RY/LW8W@`@[(K'S&I7I1A*W1K/<
-M!`!<`0``7`$```(```!%``%83O,``$`1``#`J`$!P*@!`@'T`?0!1`<I"[+;
-M3829K:@Q#(>?.(>C>2X@)"`````(```!/"$``2!'V:Z*OJ!6\`*8N%\&2(1B
-MK^,[V:7)0;81T3R\.`R,_/1>4J422<IG$&.O:@!B@,)OBBAH@(&]QWWVQ<S2
-MAA>RM^EV199,C,PSDDM?%+;66=X0_<T*!@?Z91K04JE/WNWA`(L[WSW=#G76
-M784J%6U*/#^%)-;#.7JG%]81(`'<72_R=X++05@PC<J\_5L\[DG31;JW"H7C
-MV7\BU7/5`;7RF"ZA1#QTPVG[L<^&MXUNIEP*LPU084P\EUKY3>=Y8CP9+T3R
-MJG]\1_GAV$5HA0--2.5VCDPWR%%,=3D>_RKYS`RF,15V*/\!",Y0-%N8"UD7
-M\\7Q6PW-PU&/^!X51)!(5_*VS)KTQAA#M(R1PD6&(IWH3"!FSHJTMVK1,T82
-MMT84!04`?````'P````"````10``>$[U``!`$0``P*@!`<"H`0(!]`'T`&0&
-M26/OX<A6D(-:X!7!7]^`W#4N("4(`````````%PJ``!`_[L*%^,J[ZC!*Z)T
-M]\N.]`^>!N]8^LT8CUJJ)7@.9*UR79,R7HDUU['$R:3\H781:9^@ZQA_>,&;
-M7.M#1A*W1F40!0!L````;`````(```!%``!H3O8``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y8^_AR%:0@UK@%<%?WX#<-2X@)2``````````3````##"_JE?8W95
-MW0RU]?UZ96#PU44>D4\G@N2$NF++'.+6KCK:4XKGGX%RT$N%"T82MT9J'P4`
-M;````&P````"````10``:$[W``!`$0``P*@!`<"H`0(!]`'T`%0&.6/OX<A6
-MD(-:X!7!7]^`W#4N("4(`````0```$PJ```PY-!T3$R!'/RHI/1%XN)V3^$`
-M\A=8:_?[+UOIFSF0=HLS@&_S).QEN][],RI&$K=&,"T%`&P```!L`````@``
-M`$4``&A.^```0!$``,"H`0'`J`$"`?0!]`!4!CEC[^'(5I"#6N`5P5_?@-PU
-M+B`E(`````$```!,````,##4>3'9OZ+F_7ZN-AE=<PSV-](4(?IT6-.91V89
-M76D\R4LDV"?GT`B7^1`)1A*W1D@P!@"8`0``F`$```(```!%``&43P```$`1
-M``#`J`$!P*@!`@'T`?0!@`=E98O+ET4J,<@``````````"$@(@@````````!
-M>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``RQ\2'%CG
-M0B1RXX0/^W1@&:G'X+=:[3LP5$J<I\A;4Z[1,,N61>B@8D#`16"Q8$`-EP_,
-M7X^U3;B3'+=VZ&8?^<+!(N651^BOK<U)6UO@D_T4,FD^.0H7'#3.NJ^`.B&^
-ME>K@F$1'H?*"[R@^C<`#T^VO\V?(("[@`+1"'Y_CY#4I```DP]',[WG`:WSK
-MCD%5`7'`$CL"?_HTO!BA75!RN.-=70\I```<``!`!*10;G]MK7OC9PJO2.OX
-MYW-?$$V[````'```0`7$T?'`P"0D4?DLQG5M@]K9I'B]ET82MT;K/@8`7```
-M`%P````"````10``6$\!``!`$0``P*@!`<"H`0(!]`'T`$0&*66+RY=%*C'(
-M```````````I("(@`````````#P````@``!`!@````$L/;>%\COHLF6V=:PB
-M!4KY:*'7M482MT;83@8`N`$``+@!```"````10`!M$\"``!`$0``P*@!`<"H
-M`0(!]`'T`:`'A66+RY=%*C'(```````````I("((`````````9@A```@``!`
-M!@````$L/;>%\COHLF6V=:PB!4KY:*'7M2(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``RQ\2'%CG0B1RXX0/^W1@&:G'X+=:[3LP5$J<
-MI\A;4Z[1,,N61>B@8D#`16"Q8$`-EP_,7X^U3;B3'+=VZ&8?^<+!(N651^BO
-MK<U)6UO@D_T4,FD^.0H7'#3.NJ^`.B&^E>K@F$1'H?*"[R@^C<`#T^VO\V?(
-M("[@`+1"'Y_CY#4I```DP]',[WG`:WSKCD%5`7'`$CL"?_HTO!BA75!RN.-=
-M70\I```<``!`!*10;G]MK7OC9PJO2.OXYW-?$$V[````'```0`7$T?'`P"0D
-M4?DLQG5M@]K9I'B]ET82MT9D<P8`4`$``%`!```"````10`!3$\$``!`$0``
-MP*@!`<"H`0(!]`'T`3@''66+RY=%*C'(2WQE.L-9H&\A("(@`````````3`B
-M```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0`
-M``(H``"(``(``&'?DE*-D+:X?OCI'`%-BQG!H/)&4,6*D-[.R:\6R,<VD/?Y
-M"T"^44BKQB@Z6Z%7D1^C:`FA('.LDPHH:6_#9U:LU"4'?0->"YS8X+]Y-E%A
-MP*ZNRY$R-LPYKQTZ`.^.N;)/!E0:,^B#)&ATFD;/](V)$)RSOE^5G/&[G'#Q
-MI9,<*0``))1L80EU2A4H8EGUNR/3R5=_,0@*?>+3_4IY\HQ2_XXU*0``'```
-M0`0C9[7]7:"1;4JQ[IM!^D.<.41>;P```!P``$`%:+4G>P6C)".9>=5[.K5@
-MHPX6_$A&$K=&!Z(&``P!```,`0```@```$4``0A/!@``0!$``,"H`0'`J`$"
-M`?0!]`#T!]EEB\N712HQR$M\93K#6:!O+B`C"`````$```#L(P``T'1KQE3U
-MAH1O$V^U0>NT&C\O>M-"(,9=SF</ZU@P#4IY[&&(/F.J(BY)GZKVI3P`P\7F
-MO`6(-26\!22O6GHW&&+W6'3M>V#F/DUJ,1N_9;\U[U.D33X>I8L?(9;AGMVO
-M$`N/V%S<1:R;S25H+=^1S]H*[S-DJ3MC#/G!`\^GY>_1S2I)E?UTW=;[M!.3
-M3'C46A_A],DDJ2O3NS5$Q#[D11]\VMP"'H]4BDKJ+3@(P,Y8-=V`V";_,K)P
-M3E?3=X9"&'Q(J1_O2]"1BFBJF482MT:^NP8`O````+P````"````10``N$\'
-M``!`$0``P*@!`<"H`0(!]`'T`*0&B66+RY=%*C'(2WQE.L-9H&\N(",@````
-M`0```)PD``"`?C:F>IQNW"Y4;3UUSS+(F-0O?E+5S-5$P`CX+Z9*O@5:>R+;
-M0P2W$&Q7CU+[8<)[)/%T!26*SXYN$PX#BS'OAO!*7N4H_H41XM%V(T]#O2`E
-M<))U17R"(@KQ0G?=9@P&109STD\(]3YHVZ3VP_^$E.:EL-\3)SL8*/Y[W482
-MMT88W`8`'`$``!P!```"````10`!&$\(``!`$0``P*@!`<"H`0(!]`'T`00'
-MZ66+RY=%*C'(2WQE.L-9H&\N("0(`````@```/PA``#@91E^TKIWO$U@7$[G
-M%G9[LORJR5,N0017X.(!ZD1NQ`B<0P:E1?$H1.)1S4A8(ARN>"OUS_?2/XD^
-ME!+<^!!Q3*U*\C'4<KN@)NQO>S.LVM0@W+A_I/LKU<F;ER`/5U0*4;#2H&%0
-MTZRS#5C'BQ`AS";@S24:$O]Q8[87%`#TL/4P"H+7$WP:*+YSH;N5EH3%.[7E
-MNOYICSCZ&_>%YF_K`@0KT\1NDYX*]0),ZZX(!.5BEV<4Y3+$GY",QVDFI)K<
-M.I4;4#>OEZ8^LC:!)+8]^R@*/.G$MD$OH`=R$$82MT9[YP8`_````/P````"
-M````10``^$\)``!`$0``P*@!`<"H`0(!]`'T`.0&R66+RY=%*C'(2WQE.L-9
-MH&\N("0(`````P```-PA``#`GCNGN4XHD<EV$G/=C`[L*'T>Z@IZZWES=1I?
-M]\>)S$(%&^UA%%9-'5*&Y@=C>_Y0;A('"B/<^2_:MU>UKI+6%)$!6%@[Z7JH
-M!Y:Z%D][8[_SC'B47\M_G-:K#/^B3+W%;^V-9G%L!;6"%XWH[684WD_90_33
-M%ROG:9`9NE?<F[/-N>P(R*9UDCI]5N[BX"><(EDZ?\^[#[$M85PQ5HVR9FSM
-M?3*B^J-0V@:%'OZIG?H@F0PM*PBE][T@O2A&$K=&+?(&`&P```!L`````@``
-M`$4``&A/"@``0!$``,"H`0'`J`$"`?0!]`!4!CEEB\N712HQR$M\93K#6:!O
-M+B`D(`````(```!,*0``,$2T/V?Z.U#K+U31,?,_A*.+NHM%KEGS7=&G3:LB
-M-,4YC;&L(<HV$UCX5.F:1A*W1D@.!P!L````;`````(```!%``!H3PL``$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y98O+ET4J,<A+?&4ZPUF@;RX@)"`````#````
-M3"D``#!.=K>2K+K!;U=[+%)Q`_)T#WC8N@-=5%XQPZ??5%(%-[*M%=@6-F=^
-M=>A`*$82MT:>*P<`/`$``#P!```"````10`!.$\,``!`$0``P*@!`<"H`0(!
-M]`'T`20'"66+RY=%*C'(2WQE.L-9H&\N("0(````!````1PA``$`_5][=CL;
-M<@,FO03$!<2HJ`'5&;[F7PB]</U0M?TYA]?>.XC'=*[(,/0Y4]C,NF6I.K<<
-MH9]OAK(+[RXUCL0I<W/!/JWZZ42^%.MD7I=SOM:B.'/R?IKBPW`:9!-)>MX,
-MQ:`\=XV>#DG;KKFQ[#MQ>(C![D967<::Z7^&>VG#:O]:*>CG*0O=W04YHOS1
-MK\@A)9XE&OE2TVL,KI!U#375F5@.;Q"`VF->B[O).<IN@!TOZ!PE_5CPF9B=
-M6B/52R7A?#I'HZZ2`0KC(,7P]BKWF@VCC(K.K'0`^?<7A^'::0:H((W7Q(#!
-MD9Q%^PB`H`EQTU1DEAV/8I0QX^[K1A*W1M,Q!P`<`0``'`$```(```!%``$8
-M3PT``$`1``#`J`$!P*@!`@'T`?0!!`?I98O+ET4J,<A+?&4ZPUF@;RX@)`@`
-M```%````_"$``.#H;1:WNUI#CZX?JLB98-*6YGJ%'DEIF=1%&X_;[7:^IN9[
-M):$U'.[JDG4)#DO&4(K69I3-WJ'AZC=D%\1-E.R/P-;UN0Y0ASDSOB"@\6,^
-M_$V2OZOM3A26?`U$,MYJ1X(ZQ^-M+VP)`:V/=R4W;48G7P>E**JI(]LH%M"&
-M$Y>S(.KSQ%92>L)=.=2W"FOR`1>):N'Y%;FMOMIK[7(QS^LRQ;>3P"J%3[KZ
-MXVB\J:#2H]56+H1;(_R>CN0O4F;GQ(?3@]R9A9:\4=';%Y&6X1<OX,?=.XQ%
-M1'E!9M@E1A*W1B)'!P#L````[`````(```!%``#H3PX``$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y98O+ET4J,<A+?&4ZPUF@;RX@)"`````$````S"$``+`TI2(I
-M;P#=5$`S^JL;#1WKYO(:*DUFB8?T@O)J`VG/P+#'G83UYNX6):'9&]4R"S]C
-M1B5=6U9L_IX@:^'*E.J>;:\O<!SXD%3((O&?8N11Y&5(HBT.O,X4/^;;BT2]
-MV(%?JBM`;"4JFL2C=.=V#UO-#<C"PM&58.>3$C*MSE8WTN+[W@H6N]DW_"6W
-MTXJJ=-IK]B#C%0?]_5V!SUNLZB<I8Y_CUE7]&2>'4@C_1A*W1G5I!P#L````
-M[`````(```!%``#H3P\``$`1``#`J`$!P*@!`@'T`?0`U`:Y98O+ET4J,<A+
-M?&4ZPUF@;RX@)"`````%````S"$``+!#1$+2O4LD?*IE:G\A>R`,6F%#7!HB
-M#QS0.4SQ-=U?7\;U`C>H?:9$)$UA5Y-2P%4DD8(>PI\[^_)3D4FT5S]74]XA
-MQUV(E8Y;P?#+VJ8\Y*H\111B0K1]5X%$<,\;I.Y_7FQTI9?RP^BZ:$SGCBI!
-M31IOG*/$T_9\P=5<!)C>!`:CD6XO&[Y%FY[<^X(?`A@E4^-]<)^$E-C`WB1V
-M\T>Z/TJW''X1KINJ;'#]1A*W1N2'!P`\`0``/`$```(```!%``$X3Q```$`1
-M``#`J`$!P*@!`@'T`?0!)`<)98O+ET4J,<A+?&4ZPUF@;RX@)`@````&```!
-M'"$``0"-KN&`9+Z0?\AM%AI9`O,NNG!1):XWGMW"M5Z*,:!4(PZ\4Z*M"K+3
-M#XU)K`,_JP[T(OB&?]Z1#,,!\,#1YE0@>H0NI2KS(+V?V&#WI5&W-*?O?_:X
-MS`3\DV#@(!>E@L=)%,#S]9>?ZU>#@%.+G4=@-T1&K&@B_[4'N8[)'U/$:'0J
-M=7`$44]*ER"[1P3$-@G-F(),^RG21DMNX@_YJSM5-"KLDLIX$<2W3*(#ZZR)
-MAG%N&]/8]W7O!8"F1/]?6*)TRB+335%X+\*#`CCPQT[$=*V_C*_9@>G8N;_@
-M2Y"FP`?3IR)+$7>EIJ0+G\#L5+4F)!'CUGWH8XIJ?*5&$K=&,Y,'`!P!```<
-M`0```@```$4``1A/$0``0!$``,"H`0'`J`$"`?0!]`$$!^EEB\N712HQR$M\
-M93K#6:!O+B`D"`````<```#\(0``X/EKQ-ATQ#M'*-C\C#M7M33_B]*D?5^F
-MNF7'8`2+34&`<0(/D$W?7[D6-E!GUQB[S%CUN_:GU\<5QG(TD(A.QNG5^B/Q
-M#Z1"`L.O9!]G@[<>_<-&QW@`$%Q<GLL%A%$%X@B9.[9NO%=MB`<?X8VZX2,@
-M`@\$_<MY6SH(R7#*4Y::.Q3Y;YDU)Q&]9RV0F*G2D,2'@;6M;V5IMS%XP&,L
-MG%`MG:T`6/:U0:I_6J_;[%[+EU]V!--5$=W_T6I>3XW(_^.^8G3*7/#VTI%_
-MA*9K7-R(9>86`G#$3^[-8K!&$K=&HZ('`.P```#L`````@```$4``.A/$@``
-M0!$``,"H`0'`J`$"`?0!]`#4!KEEB\N712HQR$M\93K#6:!O+B`D(`````8`
-M``#,(0``L(5;"3*$#]*K3L5_'L.2T!\8J7K]UTIWL&M:*`S0(^&46_\=N&-6
-MT=MB>LXW,01&,IS>1^`T(V^;8<LU+;4Z\N84&B#$F\Z'Y"4@HI(6(\\FUX?F
-M?4@VB&<(4))>HV@!Y>W!1KCH?N.8EX*.^HS31!+"#Y`?:+($8S>ZMQF`37SH
-MI\;;%''),A/6+F5L&-]T_D>-"3I`15GV2C<^^PXMABO.&<19&V])O%Q:RZI&
-M$K=&8,4'`.P```#L`````@```$4``.A/$P``0!$``,"H`0'`J`$"`?0!]`#4
-M!KEEB\N712HQR$M\93K#6:!O+B`D(`````<```#,(0``L$57M.FIA`#P1LFM
-MC*<6SKBN$2(;*>MG@B86(&@.H,@7NZ>=:B6.+Z_?6QN]+Z4RC`_]E0*6&,[]
-MSJM/==\E,BPS:?H-\SC''N%[CAKR7ML^,'Z.FC**<4]29,V"EU1L!5Z4)_R?
-M\<CF\.IS__S2F.:J43=I;1I&B1@Z7J/]C]B`9;=;D0S5]%):E2A+=MYZF'C3
-MG[9CJ3L!M<%>)%P9$]2;"-C44P;,?@I,IFI&$K=&4.L'`(P!``",`0```@``
-M`$4``8A/%```0!$``,"H`0'`J`$"`?0!]`%T!UEEB\N712HQR$M\93K#6:!O
-M+B`D"`````@```%L(0`!4)1E]-AQ9@QA-12QU4_2'M0P("4',1MAA%"'397(
-M5"[M"\LS>OJGAQLH3FUE1&+6FJHNE&@2C<BUWO0"%(!80`%K3IJ4Y<P9RDK>
-MYG@2.C3HZ=V<I+Q1;L2+FJ0"?B>09QB^0'W"SP2-GC!U?Y2HI*)5:J[1<QGI
-MK34S:))ZG`V3NF2J+=O3-.2$\P.D(HF6/+Z33I<SB#=>!GP)O($:P+__W7QM
-MJ_)(S=SR9%H)8AO/JEY0U5$=38_.0_P(1672&?%UH7J>5VH)AN&%J5H9R1+B
-M=V;IBH?=*%TO0P`4@>=@B(E'.SPC]](K^R:`J`]%66.H*7=L9$_4&U#)S7F,
-MOH`45V4Q";!\/S]4N6[.HJ="(*0;[K0(OFVP19T&`]Z2HU^QIQ&3<WA^]/73
-MHQG*FX<Q(E;9'IAG46N=<=XI__U0`#DO+0H4J>-RD<(J1A*W1K,?"`!<`0``
-M7`$```(```!%``%83Q4``$`1``#`J`$!P*@!`@'T`?0!1`<I98O+ET4J,<A+
-M?&4ZPUF@;RX@)"`````(```!/"$``2"L+DXE)=Q1<\G72S+1>?]-(CYM;`6O
-M#W1I/XRC*;TD]G<1*;Y2IT`%@X>W/78$K*L0U72BF,;;$O.2'AU;R0R]7(&^
-MZ-0&H,P:#U'L4YV'\==O.NV^*M5JPEL(UE[,[C'L-42,49_P+1R+.,!=I)I4
-MX*\_?KHG\?#^-5N-^U:$4FD3+&[_^\"$PAM/#A,I/)K)$XQY6-)B>J60W1^)
-MO1($::4NJ[QZ_/$YM8D7['Q4OF>JX/6\KXG!I]=W*)X7PCS<#6EI"<^4$]D@
-M7/S.ORS3QSMK3LY7`&JO"^3##R+248:V<@ZQ,!4$S>,\%M&1EG:FO^G+;(D#
-M]$S=RMJ([ZJPEKI?Q!,ZNWB8(P<VBHTTB8RW?HYVQKD`@4M_;482MT931P@`
-M?````'P````"````10``>$\6``!`$0``P*@!`<"H`0(!]`'T`&0&24.$/3<P
-MW`(GSASO!(E]I!\N("4(`````````%PJ``!`O*)D,/39"#<[DXH_D"0)UIU9
-M]F8)W$T-9]^M%1QS",JAK1>[M]M`2^O-\<+?S3&Z+!I!<JE&G-.ZT#7;1A*W
-M1G!3"`!L````;`````(```!%``!H3Q<``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-M0X0]-S#<`B?.'.\$B7VD'RX@)2``````````3````#!$XO#6U%(*%$<'H=X<
-M<H9(KA:;03!",OK,OYRFO->G$A:04DX:LI^XVO+UNT82MT:/8@@`;````&P`
-M```"````10``:$\8``!`$0``P*@!`<"H`0(!]`'T`%0&.4.$/3<PW`(GSASO
-M!(E]I!\N("4(`````0```$PJ```PO^X?7LMDNY7O_G0$]C*^4$UD_E#SWTW0
-M.$Z`2)3Z?$[J4FN_CB3V]G0:=RM&$K=&?&\(`&P```!L`````@```$4``&A/
-M&0``0!$``,"H`0'`J`$"`?0!]`!4!CE#A#TW,-P")\X<[P2)?:0?+B`E(```
-M``$```!,````,)\*IVPY?O=48:]PLR-BI$W(0][Y$F6-(OHI62J7P[<:S7[%
-MF<\*N)FNJOQL1A*W1JQI"0"8`0``F`$```(```!%``&43QT``$`1``#`J`$!
-MP*@!`@'T`?0!@`=EBK\,5#.L!GP``````````"$@(@@````````!>"(``'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``7T/529F6!768S.W^
-MF#7-=O7.M*-&-E;CDR*MV3=JCGSQ_N#=+=M$6O0_MMA]MHO<JPB*7YO4]<$0
-M11B[7=GO['Q><<V`2JE"!A@')70S^)"93-G1/@6++`$^RASKG"N+HG3QM5.H
-MY%B;1`2S]RV5JW5T#<^?3U2F*`W]:^`?`&LI```D@/@P"CO[(W=WY'%N^;AT
-M&#O)50E!V'6KR%&^?RI5`K0I```<``!`!,TRYI?-[$MLYWW<+V$T4=1"=O3*
-M````'```0`7S9S=0@Y@B\0NGFPWW2Z3VWVHJ&482MT:&>`D`7````%P````"
-M````10``6$\>``!`$0``P*@!`<"H`0(!]`'T`$0&*8J_#%0SK`9\````````
-M```I("(@`````````#P````@``!`!@````&0._P7A^.810S.$RA"D$1%DBRW
-M<$82MT;;APD`N`$``+@!```"````10`!M$\?``!`$0``P*@!`<"H`0(!]`'T
-M`:`'A8J_#%0SK`9\```````````I("((`````````9@A```@``!`!@````&0
-M._P7A^.810S.$RA"D$1%DBRW<"(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``7T/529F6!768S.W^F#7-=O7.M*-&-E;CDR*MV3=JCGSQ
-M_N#=+=M$6O0_MMA]MHO<JPB*7YO4]<$011B[7=GO['Q><<V`2JE"!A@')70S
-M^)"93-G1/@6++`$^RASKG"N+HG3QM5.HY%B;1`2S]RV5JW5T#<^?3U2F*`W]
-M:^`?`&LI```D@/@P"CO[(W=WY'%N^;AT&#O)50E!V'6KR%&^?RI5`K0I```<
-M``!`!,TRYI?-[$MLYWW<+V$T4=1"=O3*````'```0`7S9S=0@Y@B\0NGFPWW
-M2Z3VWVHJ&482MT;=JPD`4`$``%`!```"````10`!3$\@``!`$0``P*@!`<"H
-M`0(!]`'T`3@''8J_#%0SK`9\CPJ+#B##+]8A("(@`````````3`B```P````
-M+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(
-M``(``".6C:1#W!7:0L1RW>S,M=9=3S(.'B[4AN;QG)K"P#Q;!L'.);A"D$0S
-M/3`9',J<.\\'Q'$S:,B/&;1<_;`P:D\V13,/PELZ$=#T*/3!$A._)T3+?[[O
-MQ'+B6#5$U[0]^.)D(?K72I`&9:@>WG;5-!W.EP6;LG^MR?_RE+M0$$"_*0``
-M)(C%/7T_FUE..V+J7A4!L+[&OD8'X%CYJ&1\L#"ADDJI*0``'```0`08;T*D
-MI66!`&:O3&1TM\#G[J+2$P```!P``$`%W>MP#(4GLZ!%FU9ILG(_+_"K>NI&
-M$K=&X=D)``P!```,`0```@```$4``0A/(@``0!$``,"H`0'`J`$"`?0!]`#T
-M!]F*OPQ4,ZP&?(\*BPX@PR_6+B`C"`````$```#L(P``T!)8DVNU6(1+HVU%
-M:BW\/,7?.52L>\\H])QPH-.]=/=P5>\0:X#NO=+/0B<*SP?8R.)%]!P_5T4R
-M7Y3@U[;O^'1E=?H$Y)8MVU!=[C[:T612SR)4N_ZF.E[.3!V_F8^$Y`/&%KZ>
-M6`E^A:206JV%M30Y35H*2+23E`:3135*I!V347'-PW(HEL+")B_I7F\+,AJ/
-MJ_'OQ`6)4NK-IVU"./R^D!+WO=Y7]>VT-75-,EMX[:P>^0E@0!Y5O-*`+#B3
-M_M;PSDMDX+DM0H?@X$82MT:D\@D`O````+P````"````10``N$\D``!`$0``
-MP*@!`<"H`0(!]`'T`*0&B8J_#%0SK`9\CPJ+#B##+]8N(",@`````0```)PD
-M``"`PG270Z0Z/;0UV,&L?H83>]TR<POVF4G5N6,VWWO#[5\>J4+N\SQS__FY
-M(NYQ0EXP-X]B5BAH&-@1YB%EBHF[BU94_VGH;&#+L33K=Z$V?%QK5!9^XP;,
-M7(L9BF?;!JK,*DJ)>6@79]1!OO%6KJ0+:C`QX20PKJ).C7Z^,D82MT8^$0H`
-M'`$``!P!```"````10`!&$\E``!`$0``P*@!`<"H`0(!]`'T`00'Z8J_#%0S
-MK`9\CPJ+#B##+]8N("0(`````@```/PA``#@GL>1Q1_L\$)3;UI:+PG%Z[YW
-M1_SHA+0322!A>I&%\V?X7#_"G&3F_;)!9AIYGPA[6T-('-OC^EOZD]]6G3P9
-M8<X9,IO\;>&L2^%.-&/BA6W%D7X`4((L4+KGIHOK!6K8+!GZ;[?#6NPM=I<6
-M=-9H_@O9*58;]`EG,N9]ISN`'$3++@H7YQ*7F(D`YUF7W&"PL?Y/U'#`#ES-
-M%0;.2+X(703!LJ(M?;K1\<2S$`:7V)G(!\NI6\4`+V1VJ(>:\C"7Q@%C3=UF
-M*MX*VRD]=Z"(/Y5]MUJIAA!)!Z+L#$82MT9B'0H`_````/P````"````10``
-M^$\F``!`$0``P*@!`<"H`0(!]`'T`.0&R8J_#%0SK`9\CPJ+#B##+]8N("0(
-M`````P```-PA``#`YLLT"OVPO%W%V-[<51&[-@497'/`)+0P'"D<`/^?*O/U
-ME_J[,6YFG>YB1[Y,18I+BLTPKS'Z*-O03II3GVG4<CAUW2BM_EQ)2"8YS]Z5
-ME.5.."TPYU9=,M-0K"B\X:!HZ*"E,L.&NXJZ.$LQ!(S.,Q]TZ\$\.\+#%6=N
-M:6I2TQ\9;`#N)\7MN^Z89#`?PR37+JE9_3U+F_+PVDA[(L9^12)Z='3'*ETN
-M+221/+O=3]`?^6J/:VP.B:G"MO-&$K=&WR<*`&P```!L`````@```$4``&A/
-M)P``0!$``,"H`0'`J`$"`?0!]`!4!CF*OPQ4,ZP&?(\*BPX@PR_6+B`D(```
-M``(```!,*0``,(73RJY9=W:]6:05C$U0YC/$#-`98B7"Z"7X_E@)0AC!R7U@
-M:Z-:=`?JAAD=1A*W1LE#"@!L````;`````(```!%``!H3R@``$`1``#`J`$!
-MP*@!`@'T`?0`5`8YBK\,5#.L!GR/"HL.(,,OUBX@)"`````#````3"D``#"8
-M`B+T`SJX2=+G]!UV]R#ZZX`HHX!QJ;PL@*\9UDWY:,;25"FKM;!V#E<9,482
-MMT8+7PH`/`$``#P!```"````10`!.$\I``!`$0``P*@!`<"H`0(!]`'T`20'
-M"8J_#%0SK`9\CPJ+#B##+]8N("0(````!````1PA``$`-@H)62>7C)K$&Y-U
-MBUM%4S4=-U""N6V<G,/XIF=Z88XWD2-Y)=;?J]0G$/X_LVWPB@__5&PS[T;:
-MX.#&(@&?DW'TI><M%Z1HEGD8V6/8Z:?5%?$./.$HN4=+\1@^AK.:1KJW/6'1
-M58X(RX3/CA-R2M'=[W-%."CS&E%<M7U%!Q5-G+O]V#D]'O92YD=UD!K>&.([
-M*I"@3-:,PFS;FG!P*0M,#N,M1\[7`3A#4VCHY@/*<N+)&@D/;63O:$T[C`LL
-M&X4+BC/T2\J_]Z/BN]K:M#JI)F8_Y*WQ,-;YFG%L(?6'SCCR$GU1@A'@&1`T
-MO>-V_@.^*G$0F1F<6<8/1A*W1C-K"@`<`0``'`$```(```!%``$83RH``$`1
-M``#`J`$!P*@!`@'T`?0!!`?IBK\,5#.L!GR/"HL.(,,OUBX@)`@````%````
-M_"$``."U4AP4JFJ%<'EX>3,#"'=9K%HL::QB_4]'-*_<8SG,X]*:[:E.7WFB
-MJ/SI>&JPA9:&[.[$+,O8%(?N>XNYIIZE58_BM#MD6V](M!2(#/V_S'[6@D'\
-MF-=PM=Q_\N?<*B+!23`):T,R2P,3HB"O9D;5-+K'*K%L<\S0M[A6ONM4=[QT
-M?`.BA)$M'L==K`$FY?8*K]<5`K1I4+#I[KC8UBIVF\,RE/6"96/P35Z(TRP"
-M;HVP:^69YLMIDTL6LBZJ0XA^*98MH[GF]?WVEM9/7@O1WM-K0-#08V^YNK8:
-M1A*W1J=Z"@#L````[`````(```!%``#H3RL``$`1``#`J`$!P*@!`@'T`?0`
-MU`:YBK\,5#.L!GR/"HL.(,,OUBX@)"`````$````S"$``+!]#.Z6(!1.?-X?
-MD6.^W=4V?CUZPTP=@A/I2BRY0^<E<*"GVLG:B/R2@5/\GET1HAVOGMI[;U;$
-MFC/,=3`]8T*X+$\(WYG=!'PM+"M(W6]1+8YRN'W6M7P3*>=]KP4K=A.1_HT$
-MFTB:I%/;LM;.].MNBEA7D/=Z)H4V1[[6ZVR5?+GR<#F*8`PR_WYUN.%/M,G@
-M:^/X_TH.$EE4Y*VK^416I&VKK@GKAZUQ)&,_1A*W1AV="@#L````[`````(`
-M``!%``#H3RP``$`1``#`J`$!P*@!`@'T`?0`U`:YBK\,5#.L!GR/"HL.(,,O
-MUBX@)"`````%````S"$``+`EB[1RDK-Y3T0.6S>;E55&![V0!\;ENP.^K!`J
-MRV;SD,UK)YMU#_#J9*L$8>H12YULHBI>?8")#6TC#7<]YZ8R5Q^OAM#\B7*=
-MROQO!FJ#U`-0A>"?H%:5!*.LNV@4:T:[ZTNK-*AK2ER':7(DS_X%\?-(BW>/
-M^89JK3R`T0D0KB1M&P4"6ON\3(BN[K3]E6'@A^M\@(+*3#B';.]NNN;Y<(>@
-MX^[`9I[FI33$1A*W1MZY"@`\`0``/`$```(```!%``$X3RT``$`1``#`J`$!
-MP*@!`@'T`?0!)`<)BK\,5#.L!GR/"HL.(,,OUBX@)`@````&```!'"$``0`1
-MTC&!MI"F6:[<X:_"[1V5&W;V?%*^RX3,SO&:\"73+I"N?I[FJHQ+3HZT]RP<
-M?31L$!$+OE=*LAGE3<Q`X6['<G?F-MD:U(N`H8FECRGW7?F@J$B*NI1>D4+4
-MZDYE?L#7_Q4"LIE)O1^PQ3Q#^EE^Q2N7.QW6%I$8<8VOT\[/(UY,C7H#6=H9
-M]<@B=D/[B&$4R^%+@^OUZ)LJ`*B!F[,1`G87S3\4ZJ966*TL1">Z?SI2[A;'
-ML7($K</1A4TT<;UE^VO-N!J[HKD]O,E>#P:D,%RE7OF<KA`&R"E:$?_T,K\%
-MB6C:L4_-@=YG!'#4`ET205Y`Y*VEX>?ZLCI&$K=&;,4*`!P!```<`0```@``
-M`$4``1A/+@``0!$``,"H`0'`J`$"`?0!]`$$!^F*OPQ4,ZP&?(\*BPX@PR_6
-M+B`D"`````<```#\(0``X+%IC)'8H#Z.!'=KVEJSV4LPXZ=MK0PE8_#A$<<B
-MT\?;ED*XZ83PG:WG0G,%CXHO?/"5U@+=I3O-)@Q_&J_,J);S`WJ6L9?-^RL-
-M,"T:L87IJ!"7]TFR8/_[]#M!+"HXV-,MP#):=U\A@5Y!BP75PU:52ID&:S>A
-MZSYT)KEX<IN1269I_\G.O338?8"DC]KTBG=]H:4S3Y(5Y)/KN>:I&$#R9L')
-M8>XK<O;)X.A>Q^):]^/&HWODGVHG0"\Q4=71;7IR$YX`+/YD-B;C7/8!,-G/
-M$5^:E`'6T%KW,UM&$K=&GM4*`.P```#L`````@```$4``.A/+P``0!$``,"H
-M`0'`J`$"`?0!]`#4!KF*OPQ4,ZP&?(\*BPX@PR_6+B`D(`````8```#,(0``
-ML#(-15"G3$U,!\C^9B&7\ZVM7WHSY/E:T#W+3BO5A;A<%X,;<]J:]N8:J=Y:
-MR]2`MSH>PEA\L=#5CS\)Q#8G(;O8>_,J5QYA]_VZU7_>O<*WS<CGM!3276%,
-MI0T=V##$[D"X57_C^*COJ[VD@,I<[\'])O.A8*L]X6Z3\=W6.XMX7ASPB.!>
-M;#2VHAR6JB],J>IW0+EC3K`B:+ABVFKX8BH#S*?WOUWO'D0C-R-&$K=&O`0+
-M`.P```#L`````@```$4``.A/1P``0!$``,"H`0'`J`$"`?0!]`#4!KF*OPQ4
-M,ZP&?(\*BPX@PR_6+B`D(`````<```#,(0``L%S>.VA>A&<A)%(^RV0<)WCX
-M(#I9CXB,9/N2\#G:0594R][I<4I73T/241\SDK@?/(=XB7%?V12>IU:SS<]V
-MJ?X7-V&GJJAGA.8/O2WO%^B&2>FP9G[F]4:^+E%UN5[)8&9HX4VX@&?Q$+!N
-M9,0T'#I6=N2`-MN];9,=]SXI2/=`DSMHW7T'WAJ'Z/7;34I7,?%!=@EJEV)=
-MF]GI+'7/R6P[/6/VXT&=<D976Q%&$K=&8BH+`(P!``",`0```@```$4``8A/
-M2```0!$``,"H`0'`J`$"`?0!]`%T!UF*OPQ4,ZP&?(\*BPX@PR_6+B`D"```
-M``@```%L(0`!4+^1R)\#9D/[ZK@.'7W2N;4<RB4QQ)_7^#)_HC*;#<4;06@M
-M6A&V:V2=U^&G)EOL@6=H[H<>*U::US(-BO81U!'78%OQ5U2^XXVOG%\=X6HA
-MY!;2=\3*^(69373IY:'Z\8@)''WF(`$,0<?D+9RA68U#'D"2$!*H!.BQ.1QF
-MEI=G!B3U*Z1"V'U')>3C.D7G3FL#CTM*<DNLA5]L$#.GR;4/*63T_G-Z256/
-MHXT!#:\<%H>V3-W?$3)7\#0RP!M@125^>X2W3CUL,2_;P\8LJ9+`6GH<X/%J
-MMKF(]H.B+H`DR!P@JG&VLBGJ/GKR"M"W!B_#[8+"K/I!^CJ,8(MD)_$E1MQ*
-M"E.7P&F=@_232\I+[$_@>/T8/OW"R\[!D!#??<YA;!1F<RG%!-\T84"WAJ81
-MQ#P0OW'#T4DEK7+$4:[*F:M8#=4H^I'<^7R<1A*W1IA?"P!<`0``7`$```(`
-M``!%``%83TD``$`1``#`J`$!P*@!`@'T`?0!1`<IBK\,5#.L!GR/"HL.(,,O
-MUBX@)"`````(```!/"$``2!60/'%'YW)Y_&IAMK_*+X"6N'&16<Q+,%EEW*C
-M:G,"3XX;<:Z0@KAO3LPU'5/D;K)_2GJ&0QJ,B[.`K>DMLS>'LQEY&0HX3S:%
-M<T&%/NG2W$.<H44CS\^,<'HL@K\6C]-:0%Q0Z^T2>7%)=N@<DLKE*^(L]PCV
-MBDNWLPYF"(=^A%_V_W%&ICKV9F7*QFM`UXESE/:&NTANWN-^`VG`AK1.(PP:
-M7")*FF?@J6@<;E,-M]'\+S@#P][;3T(Q[)7<^E_G68;MX%N_%0K1E5,5?Q5@
-M6-P\*Z^`25-*Y`9ES+F\D5Q2<KL^6<6YX9:7%QY^I0)?*;4I``D"#M)YM5*S
-M)^=SDF_P.P:D!Y`;^5_N?NQD);J-+0FDZRNUFNTHFT82MT9<A@L`?````'P`
-M```"````10``>$]*``!`$0``P*@!`<"H`0(!]`'T`&0&20O&Z)-)-WMBVDR<
-ML8VOM(<N("4(`````````%PJ``!`$#'M29YS`U6)X9[%2_I.4NBOM-R_,Q(I
-M@7I[6O8L;ULSA%39NT7DA6J6W"3N<*5CTC7&^GO>Y7_D;@2Y1A*W1K62"P!L
-M````;`````(```!%``!H3TT``$`1``#`J`$!P*@!`@'T`?0`5`8Y"\;HDTDW
-M>V+:3)RQC:^TARX@)2``````````3````#`AFSRJ)JM*X(D$XV;E+]FM/H62
-M+Z0PR@J,H_Z/KM*'S\PM+M2H$#\(,K(PW482MT8$H@L`;````&P````"````
-M10``:$]/``!`$0``P*@!`<"H`0(!]`'T`%0&.0O&Z)-)-WMBVDR<L8VOM(<N
-M("4(`````0```$PJ```PXTQG-'4N"202CM3[/[*L3@07:U7[+"L=0VXN'.(,
-MEJ`/K'L(@VPP*NYDR6Q&$K=&$*\+`&P```!L`````@```$4``&A/4```0!$`
-M`,"H`0'`J`$"`?0!]`!4!CD+QNB323=[8MI,G+&-K[2'+B`E(`````$```!,
-M````,"=5TX/YIWLHWWYLT,/8E:K]L3[[:MRV$2_,A[L]++4&<A(QWV;*'G>-
-MSIGM1A*W1DBK#`"8`0``F`$```(```!%``&43U$``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E>,:-I*PNC;X``````````"$@(@@````````!>"(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``HF87@F;YC$AP/A0:L>F9[<WP
-M2?,EW2R>J7+R'N,-:,%%P'Z+A`&+(WUJ3AN<>8D4#IY4Y*PT^Z<]/'TABHF=
-MW(?CGXVA$K]%7H(!JL3HL:8$`D&K=C%)>8]ZXQ7?8LSF;UJ<G:6YMS'-%L,O
-M9TN""`[<=^FS5-U,S<./G_A[%H8I```D9.34@]B!098WP*PI'D<@,;K@+56U
-MJ<EG::"^XK9MG'HI```<``!`!'O6"QPPO5TM,[7=$59@P+LUM8C'````'```
-M0`6;K^\!D;/DH"[QV+S@B,3*X`-0[D82MT85NPP`7````%P````"````10``
-M6$]2``!`$0``P*@!`<"H`0(!]`'T`$0&*7C&C:2L+HV^```````````I("(@
-M`````````#P````@``!`!@````%8FU4>0S(5P7Z@`,(F@Y<X&+):E$82MT:J
-MR@P`N`$``+@!```"````10`!M$]3``!`$0``P*@!`<"H`0(!]`'T`:`'A7C&
-MC:2L+HV^```````````I("((`````````9@A```@``!`!@````%8FU4>0S(5
-MP7Z@`,(F@Y<X&+):E"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``HF87@F;YC$AP/A0:L>F9[<WP2?,EW2R>J7+R'N,-:,%%P'Z+A`&+
-M(WUJ3AN<>8D4#IY4Y*PT^Z<]/'TABHF=W(?CGXVA$K]%7H(!JL3HL:8$`D&K
-M=C%)>8]ZXQ7?8LSF;UJ<G:6YMS'-%L,O9TN""`[<=^FS5-U,S<./G_A[%H8I
-M```D9.34@]B!098WP*PI'D<@,;K@+56UJ<EG::"^XK9MG'HI```<``!`!'O6
-M"QPPO5TM,[7=$59@P+LUM8C'````'```0`6;K^\!D;/DH"[QV+S@B,3*X`-0
-M[D82MT:,[@P`4`$``%`!```"````10`!3$]4``!`$0``P*@!`<"H`0(!]`'T
-M`3@''7C&C:2L+HV^`)3`IJ<I1O\A("(@`````````3`B```P````+`$!``0#
-M```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``'%P
-MK`J#F]L&3&,-D_P]IF1D\/+MY[3`PI9AL11PDP/4T^QK2<%XBOQ`_-9>EF'$
-M^VF3&AG'X2:SU&F3S:ZO"C.B86\2]+G>LBY6Y68-;7G="D;KZ=[@QN3D;&0X
-M.G9Q:\:NR=?()]D29ZU=9P4ZZF2%09?O9\<\)H?[!WE<JOOH*0``),AR(3!7
-M'G'L$!`I(`K-ID]4DJ:QXIMH)VK'MS$\T7^\*0``'```0`3^5R%Y-QMRPM0K
-M`M$IP<@FG"@R3@```!P``$`%_=Z:]R8J&1)KD:'*!*3=+V2'^<E&$K=&`1L-
-M``P!```,`0```@```$4``0A/50``0!$``,"H`0'`J`$"`?0!]`#T!]EXQHVD
-MK"Z-O@"4P*:G*4;_+B`C"`````$```#L(P``T),O=D;6#O22*1FH7%0,@P&>
-M"M9@TCA[SNIB71H/NKE4<#[%\#-TOG9CPC97<(V[1:G'#JB'1),F()R$AP3]
-MB&5O0H^[8D[XM1G(KD9EUX4'>(P*:NX2E-[^!=%:!@.9L;9RFYGA>ZFRR7G,
-M4G'=<MUI6W!:@LZ>QV61G_NYXLC>\?98TTMCWXC>T$2DNX(CE)\QGTOE68?O
-MURO$9J&G*?06>/Z-Q@X_88>LY#H[,5QLF<*CG_3.)WNW=LDO%WJLY:_)HP*`
-M+IS%^FX.GT82MT8!-`T`O````+P````"````10``N$]6``!`$0``P*@!`<"H
-M`0(!]`'T`*0&B7C&C:2L+HV^`)3`IJ<I1O\N(",@`````0```)PD``"`^#JZ
-MKR3]J4)A%W_5@DPM_+.O3PF7?(!\J\?12HC)%*E#6L-SBPJ"CE,[F^=K[7TF
-MM%&?Q@IFA]%ZI'2F"ILX$/^(T><&D%EO6I3"P`J&F3()5J26-^QW!A`%5C,=
-M;V%2%&8?)#;PE\O)ACB85=:[G$P`T;/+@?*:,BW?CT82MT974PT`'`$``!P!
-M```"````10`!&$]8``!`$0``P*@!`<"H`0(!]`'T`00'Z7C&C:2L+HV^`)3`
-MIJ<I1O\N("0(`````@```/PA``#@(I4$MDNQO>F!&E]/%1O=VT30])%(VKEB
-M`VNT68[X!^F-Q3%,-$0>?"?9D)FMJ(Y2;L%;8&PI?^W+WJW-O,65N94>M;S=
-M!/C<:\J=FKA,JJFJ?:7-I\LYT'VZEQY\,A4D4'R0)EUKBXZ+_^]&#^;!(&,0
-MWDCKN;2,TQ:XS[A&JB`X*)G/1A/J27Z^D64_-&S!E?V#TX_]K!<_UN&^748Y
-M9*>#"?T>C^T#\=Y[\U@;CT7EFG)L)W6Y2']116FA?`VT#(S)!CK?U]^A+`+@
-M2:/FWO5+C^_]1E30T*\)9482MT;>7@T`_````/P````"````10``^$]9``!`
-M$0``P*@!`<"H`0(!]`'T`.0&R7C&C:2L+HV^`)3`IJ<I1O\N("0(`````P``
-M`-PA``#`%N./P;O[C3G!S(7WS(K>R#\9]MN6ED`R_@I"J]H3^?C-#[(B=0]X
-M?=PS=!M.@Y@=F3L>C,)3?A-&%"F.T(0D+DJ0)G,\6,^YU'\=5<9$NBCVFC,S
-M:<OJ('D6J7;C$:,(G?RF4B72U+/JQ),A'@TRW7."";1KPQG1?V4%IWFIF4O[
-M=:6U)9O)15H=*G^-MEPY_E#-^R>&NLT"R&26MQ5):G-__:YGQ,SJ,OX?-QJ]
-M.++_/Y4`ICW9/9@5P\!&$K=&;FD-`&P```!L`````@```$4``&A/6@``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CEXQHVDK"Z-O@"4P*:G*4;_+B`D(`````(```!,
-M*0``,$FOU-^5G>6$S,2><72CY98:]JF\R\KM%>6V-(E'Z4#C"/.[GE&?GA`A
-MP=>-1A*W1E^%#0!L````;`````(```!%``!H3UL``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y>,:-I*PNC;X`E,"FIRE&_RX@)"`````#````3"D``#!2%Y-2FG?5
-M;N/>8B_ZM3-&G4&&H(W,=J2WMK;"J6A#`!<FL1[@$[^`%!^KI$82MT81H`T`
-M/`$``#P!```"````10`!.$]<``!`$0``P*@!`<"H`0(!]`'T`20'"7C&C:2L
-M+HV^`)3`IJ<I1O\N("0(````!````1PA``$`@&NCNC[C/5-<#&BC(RQ]J=T;
-M1K>3-W[.3^9NK8B5+-8/]GHC9(VM/]HYUF:AE8,:>;JG/GKW>Q'$ZS#;Y_+H
-M6&+O6"Q_/?ES=^`<M\JH56](IFY3K@701,:S`5%B8SP6ATG"U=9GGY,<U&^C
-MN<%R>YIJ/LB+*KX\[2I/-`8"W9CXLGWV:V`((H[CTX]?@=UIN):QOO+AFG.M
-MZ:8#:E&\QT5?=\(G`B!@GY-,1').>B$(5_X_QW;#7NZ(F!@;D<W;1AU>&G]&
-M%6%*VU=K%A`"2'Z3!G-,/HEJXK;8;'(":K+TI<FTY<3+?/Y9;+EIYT<*<MC9
-M5AK:79?1KDH\1A*W1LFK#0`<`0``'`$```(```!%``$83UT``$`1``#`J`$!
-MP*@!`@'T`?0!!`?I>,:-I*PNC;X`E,"FIRE&_RX@)`@````%````_"$``.#[
-M[NEZ;&-GV^@R*F^;+%'"4@<&]O==-+-H$4T$NN8MB.RISV!_RI5XC]#[#GJ_
-M`DWVUZ'HE["6\.-GIH#%&2K7V6@O.RQ#IZZM-9Z(`?,+4=LO/###M1N]L^9,
-MH"$+5VH6XIP[^?V$F=CY.T\*RT.Z%]]&R3F>IM'7?4:&8/!'&Y7[I6K15^XP
-MNBNV.HCL)WR-:0RW../T,^D+BV<[6N3O_H//*J5A0N,?Y=^_E2,\6!`\=C[#
-M:E3GYZ9&60/E\+L]Q,H1I+^N_^K</T7X@%-T:*YGCP6BN_^64U)'1A*W1J.[
-M#0#L````[`````(```!%``#H3UX``$`1``#`J`$!P*@!`@'T`?0`U`:Y>,:-
-MI*PNC;X`E,"FIRE&_RX@)"`````$````S"$``+#$TAZF#8O#Z`H@"24&J8I]
-MPV/IAF(#2B`*?9Z!2Q7G`$BG#@S,#?;S+0`EW$M"XBW&,W\T[1/7[`OPF*W9
-MR9\1*2^U##P)^6.R#GC^N[%-4*&Q[+&*.U2Y*8:@5E`-$@1!]_HNL"(NF)\Z
-M3<EES9H0G?AEDL$S5/0&QFQ7::&0`K:P'8A;05KT8;GEQ&L-MCPZ72DAMP*=
-MAG]5Z7N?S06^!^<$_R]M7+DFGT7;1A*W1F'?#0#L````[`````(```!%``#H
-M3U\``$`1``#`J`$!P*@!`@'T`?0`U`:Y>,:-I*PNC;X`E,"FIRE&_RX@)"``
-M```%````S"$``+`CSZDG];+:P@X'.>,;C,R&>HUQK3=I$/V1N/`@FF0A(+:+
-MY'$'B5G8ROUW356X>,QN=[8@<D\,.UBYW$H_H;,^1]RNYT#E\II8NS58TA;4
-M&.L&;N![GK:FM<UL.]TI=2*G!@V594#6@\KGXHS%0/4*5=4`JMLZ%XC'@PF5
-M1G@7UV"#A(`(`&;NL_"@W:TY^A]&H"<#<':2*D(]OB%!.1E._88Z_+%*04\U
-MG[IA1A*W1@'\#0`\`0``/`$```(```!%``$X3V```$`1``#`J`$!P*@!`@'T
-M`?0!)`<)>,:-I*PNC;X`E,"FIRE&_RX@)`@````&```!'"$``0`?(]GJ:_C`
-M5A$U(3#3$<&2T:5BQ*!>.LDZO;.FC5E`3XL^=)1E;3'1V"6S'7P#W^(_'E7D
-M(4B?Z9>J`L%2B6O[1W;5M'E$#Y"+X2DVOSQ5%PQ%,5QQP'9NA8/.*,NMG8J)
-MC,@XC$Z):O8-I*B(8O(VU&`_`<ZBAF4_5(P!U"I$7";P[_O!9D*LIL"WPK!?
-MQMGQWZE!SR!K.<#XGZN_IW`>1!9).B">TL,03[6)STWOS$6S`OO$]L:DAC-M
-MN+=19F5QOF9<;.VY7U"!>(($*3JH3.R!C6"X3<ARBY,N0!@CF&S7Z2,1:"Q+
-MF?"GL54>D=.W$Y)<.?5C&/#J'JU&$K=&.@<.`!P!```<`0```@```$4``1A/
-M80``0!$``,"H`0'`J`$"`?0!]`$$!^EXQHVDK"Z-O@"4P*:G*4;_+B`D"```
-M``<```#\(0``X+KK>T-N?*E8''!-[WNE"5K`\K=`TR9;M1=/26!F,J(=R)2G
-M.5JOY7P_7:&6)]>2G=_@MQH:K2!/Z!(7_-G!=(S84G!'#09A;Y"@K7?=?>-$
-M,OVL%#7#IZY88DX%"I!IQ+)M$-<N9*^`=/;^.5XZJ=VJU\LIDRFO3)I!S?TI
-M&EG(HN.0*KXLX?,`J!3FX8JJ&]UM\1*(1SS16JS@(VNC'Y&A3>:`%PMJ8E_B
-MO1%KECYK%N9O*@:DLI=SI?4NQ0"\M<D2<'7P7>DS*S?,6'^I:25X&"HII`<'
-M?OCT\!5&$K=&SA8.`.P```#L`````@```$4``.A/8@``0!$``,"H`0'`J`$"
-M`?0!]`#4!KEXQHVDK"Z-O@"4P*:G*4;_+B`D(`````8```#,(0``L(!UG7.5
-MXX(<P;TFD.V#$?A8M2Y8K9DHQ`YRXCV=3;NE:3]5X&5,Z_W68#DJ,#[8ENOG
-MAQ#,D=#<`_R$,4/O+@]""$6F<8*,`?8@"]T/4>594R5ZO/8W;T$D9`"BJ%#A
-MD\#V'<L;($QHY&'(B^'C!Y'#E7I*/V4.UL_I>!B=(L!3#3Q<I8%IBG%E1&.S
-M@FTJ2$ZF4ZNAW_SUVSE!&3I7:MN:I1EZO6Y_R0!7!*E&$K=&H#H.`.P```#L
-M`````@```$4``.A/8P``0!$``,"H`0'`J`$"`?0!]`#4!KEXQHVDK"Z-O@"4
-MP*:G*4;_+B`D(`````<```#,(0``L&-XP5:#MOS-58*M3LH]X6MH7E;__^N.
-ML9\GI([)XD<L&O[#VAX^22#]Y0-.V>?@0,=B(,I;KG_B7+[C7QEA#+7W117Q
-M[VS\4NX1W?04>L?:O!0;\\MWQ7BK[91=#BS3R:TZY=CWS971QDC`!_D1*=(0
-MM^*H^_A7`>(E$11$:@=R<HP`$E-'OG&KTU?9'!90@U3(Z\P,F<[>57D<`E1"
-M&=!2,VU?+AY17RB'Z9E&$K=&UF$.`(P!``",`0```@```$4``8A/90``0!$`
-M`,"H`0'`J`$"`?0!]`%T!UEXQHVDK"Z-O@"4P*:G*4;_+B`D"`````@```%L
-M(0`!4'"\X,$T1])7UK;4V][7\2&+R@B(SAJ=MET!*9BV7L:[=H074^@98PC\
-M3=^'KU9B1%SUA)2BLZN%%$B[LT2R<@"YE$UQQ=ZVDO;DQ*O;V%0`F#<*.?R_
-MSAIN/BERTRE6)&H1<89)!E)AR*$^1U-YF+@?\,^\:;X\Q5=W6=NM:-HTFN[W
-MWO,F9&8Z?C)6FGE^RH@+SM&AB:@GXZ#YZLVWJDZA.><"''L@G\P(TBB/IY(G
-M6>J(L9\)6?%^ECIC]-3(\U/%*FGW7=64@(I,'9(%B^A)5&E^#%%_8$/!A<RM
-M?X:$2^A,T45%I>KN$VS$HE\B3X"14Q:T$V=BC_/LX&EBHC1X,W<>R:.,!Y85
-M][)04M.#L@0*`J:0R;G)3[%VBL!+G>BDC\/2#+G^AJ9S8]K\Z>VJFNE*+(BS
-M!QA`PWZ_\>QI3'TIV.[`_'2V1:L'1A*W1DR7#@!<`0``7`$```(```!%``%8
-M3V<``$`1``#`J`$!P*@!`@'T`?0!1`<I>,:-I*PNC;X`E,"FIRE&_RX@)"``
-M```(```!/"$``2!H57TP$,!XDJ``@0XE469)#(&R&'T0&I=A._U1=\BPOKX5
-M*#)#MGQ7,B_95J@2:3L>2W[I^Q<L<BQI&B8?J7Y*/%,K,Y44+@QA"TFD:+.'
-MZ[,;^G*[;+$@W2QC0;(SSS-&:CC@DO\Z'`:'"/N59UF39`DKYN\NF;QP51@5
-M@,H&&[&3C>^@'B+3CX8N/SX;2&=`JI4W"C\C*D$2"B9UB'5D#K-=8[Q7YIBH
-M&/F"8IJ?8(+Y?OE%-QI?8(\_%R!V5*)O0K=-_D:A0[+*CIYFG*7/2R1]DMT(
-M18=87EW!?>RC_"_Q]E'KI#F4X(AF"<63;U70.X!A68BQ*+X&K0X)\F5&(SIB
-M,J\79^E'6E=#;_G5+;%^*`_3YB7IZM=']D82MT;7OPX`?````'P````"````
-M10``>$]I``!`$0``P*@!`<"H`0(!]`'T`&0&260VPPCZH+CB19L.!]G*5V0N
-M("4(`````````%PJ``!`JWPS>ZIPH$GC/@OGY*:[]<4O$("DUN790KHF@NTT
-M3L4>GII-BOXZNK0"K!G2)WCW\#YHF;G@K6;I)<2C1A*W1@;,#@!L````;```
-M``(```!%``!H3VH``$`1``#`J`$!P*@!`@'T`?0`5`8Y9#;#"/J@N.)%FPX'
-MV<I79"X@)2``````````3````##AC`D)I22?=S6>!0!-'&@AOPG[?.%=G>OG
-M"AEP")@(RB$HQ8':OLK@*H6V<482MT93V@X`;````&P````"````10``:$]K
-M``!`$0``P*@!`<"H`0(!]`'T`%0&.60VPPCZH+CB19L.!]G*5V0N("4(````
-M`0```$PJ```P.EP*\\B=@VT7[ZR@(,_)&6*\;EC]56@H7DW%;==IX)T.D^#1
-MYGS,9.)'"'E&$K=&K><.`&P```!L`````@```$4``&A/;```0!$``,"H`0'`
-MJ`$"`?0!]`!4!CED-L,(^J"XXD6;#@?9RE=D+B`E(`````$```!,````,'S?
-MH\K2FZIV\4_.5W\>P,ES&/`$N`#8T8Y8;C"R;1EDVMRE*QC`]%E2Y+)51Q*W
-M1NN@``"8`0``F`$```(```!%``&43W```$`1``#`J`$!P*@!`@'T`?0!@`=E
-MP^0IA8IR2E8``````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``E1>!%RQ\3A(9'822&-[[3Y#?@`^TU#.6
-MU[3`VVW0RH]!6C*^B2%1WKKBCV+RW7U"B`87XN,=KP]SH"C"TA]<.&3NYN_@
-MA6J`B#.'SWK<185#:PD%L/*374T5SE%%E>.S*2<C0[F$0\K/)4#>0)?+*FWJ
-MP#N!'QXR?Z3EATW+&2PI```D@?/7<NW,4YT6'8`?0CJ"8-O^Q,2$K,8>7#:$
-MY.T8A`@I```<``!`!`)M'[I"YS`<_G95W7.?O!A!3U0T````'```0`7@[]'I
-M[\T@^5+;`[!E<U+[I^R.D$<2MT9RKP``7````%P````"````10``6$]Q``!`
-M$0``P*@!`<"H`0(!]`'T`$0&*</D*86*<DI6```````````I("(@````````
-M`#P````@``!`!@````$.EQ?,V^N_O2-25S7^_J-4$W(CIT<2MT;NOP``N`$`
-M`+@!```"````10`!M$]R``!`$0``P*@!`<"H`0(!]`'T`:`'A</D*86*<DI6
-M```````````I("((`````````9@A```@``!`!@````$.EQ?,V^N_O2-25S7^
-M_J-4$W(CIR(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-ME1>!%RQ\3A(9'822&-[[3Y#?@`^TU#.6U[3`VVW0RH]!6C*^B2%1WKKBCV+R
-MW7U"B`87XN,=KP]SH"C"TA]<.&3NYN_@A6J`B#.'SWK<185#:PD%L/*374T5
-MSE%%E>.S*2<C0[F$0\K/)4#>0)?+*FWJP#N!'QXR?Z3EATW+&2PI```D@?/7
-M<NW,4YT6'8`?0CJ"8-O^Q,2$K,8>7#:$Y.T8A`@I```<``!`!`)M'[I"YS`<
-M_G95W7.?O!A!3U0T````'```0`7@[]'I[\T@^5+;`[!E<U+[I^R.D$<2MT;G
-MY0``4`$``%`!```"````10`!3$]S``!`$0``P*@!`<"H`0(!]`'T`3@''</D
-M*86*<DI6?B(+-^MH+!<A("(@`````````3`B```P````+`$!``0#```,`0``
-M#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``-U=USC(LG@M
-MZJM,:.YL<,XDVF=[@0@=`-G94$7SV2H9,9!O.N\+C=PV:U`<0SY6E9!9NN@]
-M5*0>!#?-CI[Y]*!)]QB`0B'%X7=!U``>D$*VORBL,7733T2(XCQ7,F&MS3:G
-M$B"ZKS6A2E-1S5P6M\E\JI3UA.K2??4<IKIR-^L/*0``)'RUTJ212.78J-K_
-M4%PQ7#A!_,FL/%V:!`S*IK.D(@V,*0``'```0`1ARU;NOJ)A=1+$4"_-NJ'^
-M-Q1=[@```!P``$`%>)>*)9I6H?:!NBFKZ2-HS2:,EWI'$K=&71(!``P!```,
-M`0```@```$4``0A/=```0!$``,"H`0'`J`$"`?0!]`#T!]G#Y"F%BG)*5GXB
-M"S?K:"P7+B`C"`````$```#L(P``T(2%+V?W8<D<*_!NB="JS)<51_E7<-LZ
-MF=+CHM^]0`K>.\7O+RCHTL9,D_[KV_I/[;T-E<>5Z(/'<"*_RSR^0E'*\[\&
-MV6X,:,'?,!5@@X=T:P6#WZS]%5P@M$^"8SQRI?F#Q<?D*.4F,5AR*3G\/[4Z
-MB?Y_D)9)FT?OO%*W)0EQ)L]_?M#C</S(MN!>MR,?(W)SZOX\7C92,@=K=!H[
-MF_GU6U+XLDB%1]$=WMZ;7I-*`4=38>K\-_Y#<SZ/,P.S\+5.+Y%,`V04<C\2
-M<4<2MT87+`$`O````+P````"````10``N$]V``!`$0``P*@!`<"H`0(!]`'T
-M`*0&B</D*86*<DI6?B(+-^MH+!<N(",@`````0```)PD``"`H:\)XD7N=&UL
-M;]"V/4Q/+D\<]/I5W<D[`FA0CX#\R?])LEO*E_6CD!0*G.DS:%ATOX_L9II<
-ME%$O)A9S$RH#I=V;&/$/Q*H)8E-&X$G^+XE3$00B])/.EVG+?YJ!SY7V[TL_
-ME3(RCA2#(%[<7E7L2G`.'7V-0>]8.-0RE$<2MT8\2@$`'`$``!P!```"````
-M10`!&$]W``!`$0``P*@!`<"H`0(!]`'T`00'Z</D*86*<DI6?B(+-^MH+!<N
-M("0(`````@```/PA``#@Z"-%]*J)XN@<$YUB7+,HZ19K`CAR[LQ;<BGQ5]/V
-MI9Z9I*0J]P+9=C2[ACT?H`V9?%2H#X,A+"5!_*N5-[$/-R;0ZKJS4QQTTZ@L
-M#WG,%V7VT[:FACLM1]145.@#\%],RY;S>L?@]7)R,.YA&K3*&'/7HIK!V'"'
-M&E1E2-WQ(93ND?O2^GA^9^&WZN;6@2MBR:NP"N<CM:]!S6"6&]VA@G2C9BV7
-M=O"1!,LYHT7LR*^X-C4=K\^(Z:P2:K62:$;E95!K%1\*.CQ2/(T/TVK7JLM@
-MUK'<2E#7XS&:`D<2MT8_50$`_````/P````"````10``^$]X``!`$0``P*@!
-M`<"H`0(!]`'T`.0&R</D*86*<DI6?B(+-^MH+!<N("0(`````P```-PA``#`
-ML16U=,C%XHC053DY/=\<HDO5/(GI31MU0_Q#]NV?8A@^C\Q5V5TNDJ@9-D&(
-M)N<AR=GUP_FLWBY2I/>^$-SZPOR2?:)I0\F'`#299CG26+\3]5R<#1!A<M*^
-M#W:Q-$\#;,,==_(='MX,K"+Z#H7GP\H]#1A%Z._BM'[Q.7L!=8TST_>L,(KZ
-M""&S$@1`Z%\7<K._+"G([7/::*U1$R9['8&'69SI#I-P1(AN]%=)"S7B]KNJ
-M48\@K]>AU.%'$K=&O&`!`&P```!L`````@```$4``&A/>0``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CG#Y"F%BG)*5GXB"S?K:"P7+B`D(`````(```!,*0``,`_]
-M<=7?X65BJ+O5+4>8!WU.,"*;5\]Q=QK'CD\<_:$<V3[,;+9@.1CD\2/]1Q*W
-M1F=[`0!L````;`````(```!%``!H3WH``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-MP^0IA8IR2E9^(@LWZV@L%RX@)"`````#````3"D``#`##6>AL?,)^%9/-@!U
-M:"WV.GZT'L,(6TM=1X'$(GSSF`%%GZMP/)[[7;L**T<2MT:_EP$`/`$``#P!
-M```"````10`!.$]]``!`$0``P*@!`<"H`0(!]`'T`20'"</D*86*<DI6?B(+
-M-^MH+!<N("0(````!````1PA``$`:GC>G]G5Z>`CNMT)^MA>7H"5ERT;+S'#
-MX(_X!MC,OZJQZ<75SUSC'6)PG:#8:E1:Q3\Z.%7K<W?,:[W&1XJ3@"ZV5-A!
-M5-/U%-4+<;GT,-HS.YK47`+Z=E$UU;S32]7B3ZL=/Q>)0EW,^;?>G.%2C:HQ
-M$X<<#BD76Q4XGP?DZT.62>,L7@?,B<GQ9;/J`V;1"X]V:VN*4!^YPI%$L$&^
-M-**Z2;_K09.+?L.<)Q9&X%42LRR<('```NVV1YXFA4KQ**HZP2OU&N"5F]1D
-M6H._,HE"#;K%;AXC$BN1F+IDD]E(?P^.0KR0C"N'WU!35?9T%TR\8!)U+;KN
-M6)0W1Q*W1J2D`0`<`0``'`$```(```!%``$83WX``$`1``#`J`$!P*@!`@'T
-M`?0!!`?IP^0IA8IR2E9^(@LWZV@L%RX@)`@````%````_"$``."TZ&9^DM!F
-M/>#P?.GF2FE7=ZY8:!-0X#P;5OYY@)VH*Q_S^_Z4%>.#-OG\->,`Y(AX[58J
-M1OYS)MW]'XFK_;TA,)>P')V![U;;IHMX!E9UK#N=,+(`BB)I0Z>:@`FBR]`2
-MDWZ?PU\2KM2BA"CF%Q,_<1XX9T$B\T]N0JR!6CR:8H\Y:Y,)+V^.!;]&;WX.
-M\2$_ZS<Z`<!+%GNQ2LMAEWK;ZXZE&^\44^TW38-#ICN#]A8=0]([3*J^!(@Z
-M&=2*_F3S:65\)1$"T(P:DVUS>A.J-^-(PE0ZU@/-]-0#1Q*W1F&T`0#L````
-M[`````(```!%``#H3W\``$`1``#`J`$!P*@!`@'T`?0`U`:YP^0IA8IR2E9^
-M(@LWZV@L%RX@)"`````$````S"$``+#K.7V7]KZRBA@>GNP[Y.H'N[P-]0I)
-MFK$4@:`@%4S@51_W3+%7ER5TTZF=95CK8#(Q7@H6%N@C$P5(A^J2L:'QJ>UW
-M=Y7<N"!'8_9GH;F?2S@79J:19_EC%M;5-7JF49A/(8C%N7^)[3VTZ._3R9#N
-MWOT7_*,WK_#.N;MND90>AH+7@^L7.=E<!#C0WG-O.+%I*KPQ@@G$MBLS6>7[
-MF&IARWE7/AH>S?47'25I1Q*W1HS7`0#L````[`````(```!%``#H3X```$`1
-M``#`J`$!P*@!`@'T`?0`U`:YP^0IA8IR2E9^(@LWZV@L%RX@)"`````%````
-MS"$``+#DH@F8YL*EF(0?VQM'#\5FBG,#>_.O6>WWA06<B7Q2M#]ZG_#4MO+L
-M''IQ"N4B,P)NGR5+O@?>2,1,.X4X)IOOSZ\EM!Q-MPADR^TCD?(SLD+,S-C8
-M&[/+(GS_O&F8H]Z^44^^^%N`<OH+3HH^]]5\1=5K;&X"3&%GP1IKI54'$H0W
-M:6FG<<0P`_C9(MQ+[*J.Q-F1_R/R,7;:E:4QGS)C=9J6OVDDYB29_.F`1Q*W
-M1CWW`0`\`0``/`$```(```!%``$X3X,``$`1``#`J`$!P*@!`@'T`?0!)`<)
-MP^0IA8IR2E9^(@LWZV@L%RX@)`@````&```!'"$``0#!??.(L.!BK"0[%"HV
-M^0)SPF;XRVF:K`5W;!N76@.(I%O,//\+>$=/KFI;U5AB4]"HQ`6[)7>`U@9(
-M1A'D&UYQ-YDE-(SJW5+D7"="^D"F!X)ERFM7.CFPYG/9$W#*V>,"VBX;2/.V
-M<%["4#66C=*VI]"DS"`J(!QK'#8>@Y_.@C)Y;[&M4<X9/60;LK>;.`%4_;CD
-M0VOU3E,G8S`8!?;."Z9-U:,A8@__"F+BK63%UU$38]PLM)P:YYG^.D3!T0@Q
-M^]LE@=/QM[ZUS9%/[7IG)@-JK4;SUN,^PVG9TV4>*'CPX[MUA?U;R?3%0*;0
-MV*-.^-E.S,#8#5"6W4M'$K=&N@,"`!P!```<`0```@```$4``1A/A0``0!$`
-M`,"H`0'`J`$"`?0!]`$$!^G#Y"F%BG)*5GXB"S?K:"P7+B`D"`````<```#\
-M(0``X`H$V$[A[&0G772]ZEP.1TW^4`L#79EE"W7*#I]&?)HY+S/GG%(Q*EM`
-MM8FCA,TSZ*NTE"1;WK7.F6K[&+$Q%LV-*X+:8K/E/G'\Y/403-R+$@Q5&PB-
-M4/TC9@*?.26Y/D=G,5!8UG=(?P+DC-(')&-M@':X4(AVRAO#M)UR=6`N%S:P
-M"GA7DBY#M:$RYQJF^#H2J!1=0K)O@4N,'O[3'":WXC$;!A'<=]L5,KZ-0[=]
-M>65:O[?HG3BX+_BIL'4);5Q9S4<I#]\"A(JB-S!H4U3--+<]%;BRQ;FV""M'
-M$K=&>10"`.P```#L`````@```$4``.A/A@``0!$``,"H`0'`J`$"`?0!]`#4
-M!KG#Y"F%BG)*5GXB"S?K:"P7+B`D(`````8```#,(0``L,%OIT+U@TF9`.D]
-MYF[T;DU]8L,X_Q6KX+;#K#7*#TM\PW[N[5V-RH%\H0M\0ZJ(JS:(S^<)SH$:
-MST%$^1-R\[YC31O(@K4,*@0REYS@*`ZC[-L,G-63$N">CL\1*E3YL^E/1.XN
-MXP141^0M$T->)K;KE[QL`SUFQ3-EF;C1[H38+?@B=NH2/KIH2N<%)88!/?YM
-MC1EO#=CE?6[KC19T7#UO4XF,>5WZG%4)*V)'$K=&MBL"`.P```#L`````@``
-M`$4``.A/AP``0!$``,"H`0'`J`$"`?0!]`#4!KG#Y"F%BG)*5GXB"S?K:"P7
-M+B`D(`````<```#,(0``L..9D,0,^>FR@CWJ&,+)X]WB5SG%VB"4FXLW'`N;
-MPC#4)+.OSUB#&7#'$Z,`!LJ]`.U$!)7I?*A.`%SK+3S1+[[Y2NS[OQM!?948
-M5;!8]5W&K<@3R/,+Q$R3N'AFB1^N.IU)6%"L]&BGY%[+U:RWA[)6@K/8OT=%
-M%'\[U=0W/%4?K7USF759Z`+^B$:W9X_.L9X[S40N?U@(]+%/YA:Z#1KW1G"E
-M*Z=IE:<B3[Y'$K=&9UT"`(P!``",`0```@```$4``8A/B```0!$``,"H`0'`
-MJ`$"`?0!]`%T!UG#Y"F%BG)*5GXB"S?K:"P7+B`D"`````@```%L(0`!4!.=
-M'\VMX=6=A(.P62[WS#S(C@\MPZUBTL^UT6K;A&R5EL=QM%^\!#J]@FFP\CVD
-M@GLK6')RS1=W#XE4*<K(*%B"UN$V^K1SUN((XLSNHKOJ]H"RXLE1%\1#]Q@H
-M.%!;3X<19H/<R&V9JAGTHZ<%B6O&VI+!/2O/1O0-`8;XS@(W'FN8GC-.%USR
-M/,VS!K'2D]:7F!`M]$&.9\TCF.SAC@#@K9-HGM'VC['3ZF(LDC\0H`[=^U5K
-M6B3M+6+CJHR)7;,-K;NJVWW&A14M^)1VF84F(Q8^M_*EZCPZ@+>"*>I<^/(^
-MC3E]S+C:D5]@BPBPE5'9*%$<,1RAWN\JL_`(U@)0?TIVLSCL*FCX"R\ICH4*
-MLJ[WO(\V!5Q#;R%-``V;*:)9:ZV,12:7:S(S.P.$<S0O]//:6'8"308?4/39
-M02*"XL*8"5?,_HJ4PK5S1Q*W1F>2`@!<`0``7`$```(```!%``%83XD``$`1
-M``#`J`$!P*@!`@'T`?0!1`<IP^0IA8IR2E9^(@LWZV@L%RX@)"`````(```!
-M/"$``2#^WKIWW!JK4EFJ,S2-^:NSCI@1]'QT)ZHK@D"ECGSG!=]C$/9H::&S
-M235=&-BQ1%IQS=H!^#LCXSWYPX99^B*S/!5J3Y>:(.0%7;;=13Z7.5BYQHCP
-MK9-E02']@FG@1=F!1TY,N`RQKTLZ'/6UW"(E/$9)<RQ8=2\G[!"@?G(\@UHP
-M:CN/O,<]`F),6&!3";$]X2JX:HB.UV"QMJ%_*XS"7`-A*-*GX3?!06+@;TZ@
-M\L<(6^T1&P`%,>>7L,H]0P]"O:S++OO[I>N!!AO+6F@@SEMO%V0.3*-M+B,(
-M]CRJ=M^I%EI\N7$%`XB)4,OO6T$,'!%O0%RQ$IWGR!'B'&/6##.H.E=/?\!'
-M'_!,DGDFHND<;$$?#_1#.`3OJT<2MT8-N0(`?````'P````"````10``>$^*
-M``!`$0``P*@!`<"H`0(!]`'T`&0&2=)'@'LU[SF',7:!*F?#VR4N("4(````
-M`````%PJ``!`1\"T%B?IR2+$1K\-!0AA9%AOLSQM5F^(U!I.XI[<((;21V]5
-MZ`,)^<7^*AR`27?M\G/D4O4D3RGH=E241Q*W1E+$`@!L````;`````(```!%
-M``!H3XL``$`1``#`J`$!P*@!`@'T`?0`5`8YTD>`>S7O.8<Q=H$J9\/;)2X@
-M)2``````````3````##$OD#XV:+>1X[&3;R+#K5MF<N:*A+Y;%$N(II%519:
-M,!N0\G52=NI#'8MXH$<2MT:3T@(`;````&P````"````10``:$^,``!`$0``
-MP*@!`<"H`0(!]`'T`%0&.=)'@'LU[SF',7:!*F?#VR4N("4(`````0```$PJ
-M```P:+"7F$C^`XJ7'F(Y9/?#2H5KL,4H0GM_T3G4MN7%MTKOKJGRYA?<:\=U
-M:(Q'$K=&S-\"`&P```!L`````@```$4``&A/C0``0!$``,"H`0'`J`$"`?0!
-M]`!4!CG21X![->\YAS%V@2IGP]LE+B`E(`````$```!,````,-E\.A2HEDP7
-MP4CVJR]2!X;R$F>Y/._Z[GT/&Y>R48`&XC5#/<MF;WV<_HB%1Q*W1A_;`P"8
-M`0``F`$```(```!%``&43XX``$`1``#`J`$!P*@!`@'T`?0!@`=E__&`7<=]
-M5;X``````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``WAS*PR,8`>1)$0WTG#:TH"AB:;3=?L6$X)JLT2?5
-M$C)6Y*(<R\GUSGOM3N=]RP0;0CFV8'*5E8Z@F?N,N;?<LHC0T=$9X2'KANM6
-MY(OK*_&2@GW)](E&*'9YQ+BM#*9>.<+`&>Y,7)T$M.MUQ&9&2';<.J!?;^HH
-MO8)0,/EO.0,I```D)Q=6#>XAG8N7==#:*`9M,&<?$457*>LP$,7Q:S&(R60I
-M```<``!`!#N6^]*3AM[\O=#$$T9"=VW;:V%6````'```0`5Y#K0&E5XKWT-Q
-MGD@]\I)U#ZE#R4<2MT;IZ0,`7````%P````"````10``6$^/``!`$0``P*@!
-M`<"H`0(!]`'T`$0&*?_Q@%W'?56^```````````I("(@`````````#P````@
-M``!`!@````%?P/IS3F)H-^X0+CT,YKW'=&P2J4<2MT9R^0,`N`$``+@!```"
-M````10`!M$^0``!`$0``P*@!`<"H`0(!]`'T`:`'A?_Q@%W'?56^````````
-M```I("((`````````9@A```@``!`!@````%?P/IS3F)H-^X0+CT,YKW'=&P2
-MJ2(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``WAS*PR,8
-M`>1)$0WTG#:TH"AB:;3=?L6$X)JLT2?5$C)6Y*(<R\GUSGOM3N=]RP0;0CFV
-M8'*5E8Z@F?N,N;?<LHC0T=$9X2'KANM6Y(OK*_&2@GW)](E&*'9YQ+BM#*9>
-M.<+`&>Y,7)T$M.MUQ&9&2';<.J!?;^HHO8)0,/EO.0,I```D)Q=6#>XAG8N7
-M==#:*`9M,&<?$457*>LP$,7Q:S&(R60I```<``!`!#N6^]*3AM[\O=#$$T9"
-M=VW;:V%6````'```0`5Y#K0&E5XKWT-QGD@]\I)U#ZE#R4<2MT:M'@0`4`$`
-M`%`!```"````10`!3$^1``!`$0``P*@!`<"H`0(!]`'T`3@''?_Q@%W'?56^
-M#VSW76'>Y.<A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#
-M```(`@```@,```@#```"````"`0```(H``"(``(``/P#%]9UC<J:SH:0CN./
-MR,\TK)4)WVP"8^#K1:LC?B3HX,)57(H_%=6E`ZG9]46*TO4,;4,D0>`U.3.O
-MDD&E^>0C',=>]#RT5*N6$ECZ.%)K'X)'Q$K_"'\W=;S[M`#4/8"\VUH-DO=4
-M8F+O&,%&<LT5H2)\"X*VBS@.\I]K$PFO*0``).(\89VH%%P<\C'O5N@J!<`Z
-M]]_C3")8/&_$L\J^2"4@*0``'```0`1J;%E67SD983TK_VPV$\U;H^,L;```
-M`!P``$`%GVR.G-C7A2(G&[K!K#?3H'H7;'E'$K=&LTL$``P!```,`0```@``
-M`$4``0A/D@``0!$``,"H`0'`J`$"`?0!]`#T!]G_\8!=QWU5O@]L]UUAWN3G
-M+B`C"`````$```#L(P``T#CEG;9K,7_CH_=1R<?D7[&R3^>MZ(I\77X.HUVZ
-MP=-#0WM*<CW92O$T\543OKJ[DX@8RZL,]LU@E9O(E4+3%]_21'W?'Y5L>27E
-M4BCK4]*CV)+2J#?N2O"L]:,%@"9DC$Q9IV7&;_2$+7EG8&(T9BC[V"?4X^P(
-MKY\?WBJP09E1/_.QZ$12SMJ@":5[.%ZV:EH;5[_0-,?]J=>^@4IR>5&DB>'9
-M6$<3$KYDR<3T@':K'*Q237F"5;(\Z6(;(7/;(D-1<?-/+$*M?Q#IFD<2MT9W
-M9`0`O````+P````"````10``N$^3``!`$0``P*@!`<"H`0(!]`'T`*0&B?_Q
-M@%W'?56^#VSW76'>Y.<N(",@`````0```)PD``"`.PO]=T-QFG8<@`W1'/I=
-M:GQMD3="[2(#B0-1JRWA5@2!)'S08V&Y*BH<"PAUOX[C+#3"'T^-=.!\'CP*
-M@;[H_Z)VHDY14OTM)$`QXD0(TI'D#I@8%@13NGX#W`J<WJQ2=.X]\[,;^L5%
-MAS8:G%;2<]+HUE$"Q'9)T<_K44<2MT:J@P0`'`$``!P!```"````10`!&$^4
-M``!`$0``P*@!`<"H`0(!]`'T`00'Z?_Q@%W'?56^#VSW76'>Y.<N("0(````
-M`@```/PA``#@B=`2IQN$36GYX&9O2A;"&:!<;35O\,MXU)5^#,BN]/[S0+1B
-M99K>PF.)FV%1-0W"V&=_Z),>MD5[E_#`<-0ZOE,O7X2>Q)&JWT+C4/Q`&D:R
-M9/W;./J&<WCK>5[[5?/!B%S8$O`AMQ^$L0+/XLQ[=63F%SAQ>/&1T5?+K&Q>
-M&K8*.A)TJI`++=T31\L$<$VY?<K_9@N/:'P#*2P6C0\XH(Y``U@U:J+_-X?D
-M(U!_K+LKUJH']*X%&/@T3=I7BS^P.!MQ:^@4QMH@0.5:!4ORV*L'="47,^B8
-M\,N-X$<2MT:[C@0`_````/P````"````10``^$^5``!`$0``P*@!`<"H`0(!
-M]`'T`.0&R?_Q@%W'?56^#VSW76'>Y.<N("0(`````P```-PA``#`OI:CV^:W
-MGRESM>F)M.U_H^>B$.RI18+!A*U`45H%,1?XI&;6(-_.YWU;+KV@\!A^3V'K
-MBCK.YZQN(3,U!F;OM+KO8\6:P)I/N,9^'^:N14"H\C,@(!==:'3'6/V^8]DS
-MB@JX53,VRH!IY^<OY(A>:*SORKODO0V(M#MRFM,3W)97K),=DH]E1XM<>E0S
-MP1JE$L*B1#&5<\6ZXC;OB@_QODP-21+`L*1]]V(58+L-0/QNW>,K55U^)X]!
-M:AE'$K=&K)D$`&P```!L`````@```$4``&A/E@``0!$``,"H`0'`J`$"`?0!
-M]`!4!CG_\8!=QWU5O@]L]UUAWN3G+B`D(`````(```!,*0``,+OOH.SOARIR
-MN#Y8$!TH;U[T^P%Q('[DWOJ;B3?)V<.-@K">D)M@[0&7GP\C1Q*W1DBU!`!L
-M````;`````(```!%``!H3Y<``$`1``#`J`$!P*@!`@'T`?0`5`8Y__&`7<=]
-M5;X/;/==8=[DYRX@)"`````#````3"D``#!^UH,\557,"X9U>#8[U:.8=XU@
-MV<Y+T53<8"(AR]O/UIOD'``_15;]XF%+QD<2MT:4SP0`/`$``#P!```"````
-M10`!.$^8``!`$0``P*@!`<"H`0(!]`'T`20'"?_Q@%W'?56^#VSW76'>Y.<N
-M("0(````!````1PA``$`P'SYI/)$TO#2GW_'E,L$*)R+&9-V#)I)V#5)/RX<
-M';CGWUBK!].\[AE]P&E[4::/&#00WJ>-;&([%_[Q)P=J)IQO^\/'41XTH"8)
-MWWT^R'%;>2SL*`HCNW@GC;J!3,[>,Y=Q*6>;3@M8P'^[$0*7\N!.]S7"*[GP
-M0-+RLW8;LK!_QT23^#]X4%&F#2CPM<Z:^"E?IJO`A<HZZ-TKP+4>O/\P>'D8
-M9P0=-W.H7`3RVM#OY:"VE2SDNFIY@NPLE>T_H<,@]N>_$UB/RLH]]GG6&6!R
-M+V,9!,V\8C_.R)X"0-`S"M_:HCGTC;<'&'HA9_I[[AG1O'-<GAE9`*4_1Q*W
-M1BS;!``<`0``'`$```(```!%``$83YD``$`1``#`J`$!P*@!`@'T`?0!!`?I
-M__&`7<=]5;X/;/==8=[DYRX@)`@````%````_"$``.#JJ:Z!L2$)P>RUVW3Z
-M9V*"P3NA>]A83'/E``&I2&"PH9-=)9WQNE,2!;\BMF"NIRKJ]V+AZ=>RFZP7
-M$-@+NY#<#^I%WN2PQ;B?(HT"L.\Y^G2_#KA03S:`CD=NN.Y,#&RQ`<?N\NJ+
-MCJ?1/S2/;4/1-(%X5+?9&$BK[G(LNS4%;6Y!IR><&\=K]T"8(GT@1/._XDBU
-MN!/:&$T>%I<>&#E+:?(19,-YE#3^0&`<93>FEY<JW3&5(\S"FU%C#81+HM"0
-MIJ@8A8?1D!5+(V1-02_XH1]SMOLW9JJK,TX]1Q*W1L/K!`#L````[`````(`
-M``!%``#H3YH``$`1``#`J`$!P*@!`@'T`?0`U`:Y__&`7<=]5;X/;/==8=[D
-MYRX@)"`````$````S"$``+#PJC'I:PY^+<7*541*S!GWD3LPJQ0X%WU/]O>*
-MXB#GN!TWYA0Y0-!TJ_OX:=M'P<$CS)4#LJC3$<)E%"7=@]C-A#IW1III<-'>
-MW!:-#ZWU1,W"N5H6>N6&H5ANBFYCDG4#0"BMDLN!.U/02H++%`(4D^BKSP8=
-MV9:C^:P#N:EN+L&0LBB.[(+FH<)?(/I`8`G?=\T5FQ\#'Z<KW=@:).;XSA46
-MJ6_X,$(X-*CF1Q*W1M$0!0#L````[`````(```!%``#H3YT``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y__&`7<=]5;X/;/==8=[DYRX@)"`````%````S"$``+#%
-M)/=T3$RC8`V@_]S@+N-H/DR2X'S(D$QM[H>#@:B\GR[:!F?+I`K>Y)WWR_\N
-M\$C/>\3*WCED[0&!M.RN"E`-'&[&!$[]C$UKP>J8Y;DC_+:!HQ4"8/:2KIU^
-M^XMCD9R&3Z$!V/UW)?Y?IRB/2]>@/&#IBCL!_;Q>':`N%(^]F1"SW5Q`#,T_
-M985J(4"QRTZG^1CC1QSH.EGZ]#7]N'M\OE/X^Q9[,5\"+)>#1Q*W1G8M!0`\
-M`0``/`$```(```!%``$X3YX``$`1``#`J`$!P*@!`@'T`?0!)`<)__&`7<=]
-M5;X/;/==8=[DYRX@)`@````&```!'"$``0`:J#/\JI9JLO?%KV'ZUPW%Z8`2
-M<D!O).F^&=./;M,*_;D$906<8W;<*;DC2@QUV05H.K,IL,G<]<^A<V@\'P(?
-MW@>LAQ<_^$!>3^QGLO4$@"E"B`OSH`B+HPA4K--_Q_V[\8\LP9(I4?LZ[N8V
-MGI$'E.$1W^Q!%@*),@/N`T)HOO3:I\(6/;VN2YZ\=]>0M^8V<=^K(E<LLZ%3
-M+([Z%T#N5DRIVJ2B::/`4#Q<+W/-K_(NL"YSI),VGL\HWX,`@3?PY3*?J24S
-M?7^<LW`5N0<<EEOI[UR3;7=YZIUS[N4556H_'>#M`^<T\WJ?V`TEOP<L]HL1
-M:E<V0HSD?%='$K=&33D%`!P!```<`0```@```$4``1A/GP``0!$``,"H`0'`
-MJ`$"`?0!]`$$!^G_\8!=QWU5O@]L]UUAWN3G+B`D"`````<```#\(0``X/6C
-M/8`D3(,Q*8&";-B>(/,G94:?4D8@VB&)+X0%#`6&3G3T6?GL0G@=;F)%I,<'
-MZA.B0L6&D"7W6Y*Y+P)S0,"@199;+VO5_1>MPOXJOHQT!A-A8:O/.<K4PJ96
-M0"'H]:+C3SB:@:(G*5)X-QP=A&P1<ICHSG';O5TM2Y=@<RD2B'7,"\XS(_[V
-M?]R)'`:8F;KB=[7ES-+3L,'@TC('X*FZ][EKD4L]POV^Q/\3N>_)F.I*E$0>
-MY]H?T[$I6?>4+;R+:8#=XSW6+V[SE9$E`4```#-V\%_`8G)6$.]'$K=&QT@%
-M`.P```#L`````@```$4``.A/H```0!$``,"H`0'`J`$"`?0!]`#4!KG_\8!=
-MQWU5O@]L]UUAWN3G+B`D(`````8```#,(0``L#KIS_*FTPJ:^P="!85X8,Y$
-MXK)'"9"5](.2S<W\QS,K62CQ%$<XFR.:!**U=(!1Y69RIR%D.6N(;%A@IOL>
-MBTY66&]YN;WRSFI](+T\G%\:@EV>HFIDK`FCT2O3#%QS81%^Y//O\$%>Q)+#
-M7X$#EO,S(EDIDA0(9ZB@GV=*T9PJI%',!A!V_O[>J?SVS-9I6%'W-6.Z;IQ6
-MX7YA/>CE51?@]8O78JJD>X]4R:Y'$K=&S6H%`.P```#L`````@```$4``.A/
-MH0``0!$``,"H`0'`J`$"`?0!]`#4!KG_\8!=QWU5O@]L]UUAWN3G+B`D(```
-M``<```#,(0``L(L(-5$9@+!U$RX9XJS9#1UNPV:A6P*HKB&`=#KX$[C@8I1C
-MB^R`*Z3[K-M0P?)Q8:S-+JV?^-;RKBKC)FX2!64UIZ5=&7L0/%K>10K0>)KN
-MH'!P7@V5Y)RJJ/_??6P!.)E:/HI/Y\6YZ\L?'[VMH]Y]TP3)O3APD`4W'B*7
-M%)R,5-`*6RYAH3P.31*V[;TC<83;'B-RD2I7?[YNPE4]_TDA,@+>T4SM],#G
-M]K-'$K=&U)$%`(P!``",`0```@```$4``8A/HP``0!$``,"H`0'`J`$"`?0!
-M]`%T!UG_\8!=QWU5O@]L]UUAWN3G+B`D"`````@```%L(0`!4$OAM6^Z,3EP
-MWW>0"USF&T"N!@9K[Y(R4`VZ,#+?-_`>;S)Q\81B1A``/'A.Y-U<Z&:)5NHR
-M%*RUD^$#'3YOX@`:=@V.>"VDK36X@GGQV#*:[/?OGUFJJER_(\P5>5YBR7-!
-M/5MWK*K0BW]>7$8:/L6GX'"9H]P']`/6Z`"+6$;O;F,UX/WP7>G7F4W=#TK;
-M3SNSET3AJ;CJUB8(H7OA<."Q>'%N)4_/MQK8TBHZ+%I<$</:><JJHW2<Q`\9
-MM67^K,,(J_SN4X'QNGY9+6T@B*X8<1U&4,S0I=8:9OG<P3`N27+-,;7DD2M5
-M!T\>2A$<.F%BDVANVPIUWQN&3<I5^;\)#7:T;72]TIA;4Y\:\/7;\YQY?SK:
-MSC0?%4@G!!`OA4YQR^%'HG,.`<IPSF\T?/]D*#AA;L)>0(?@HD8;KN@,@S^^
-M<!NF!]BC]4!/1Q*W1FW'!0!<`0``7`$```(```!%``%83Z0``$`1``#`J`$!
-MP*@!`@'T`?0!1`<I__&`7<=]5;X/;/==8=[DYRX@)"`````(```!/"$``2"-
-M]2+$>[?!XOU6E%BG$5ZNU@*H[5,+QPN40JNA65QV>_^8=HX6YG]7._S!D4ZK
-M=4'/[AF`WESBBKHIZ2`G0>Y3+(@AI'X49^[['.F,P_%LV>ED>$G./N#_QABU
-MZ(_&8?B2P]4'(0('X)K]+Q\%,HOACZB3(Z-A=>IDUK"YD7`SMT,.S`P_J006
-MJ5JV3I9+GZOLD,N/W6`/>8ETIE^0[>G3L!>Q=37"_UTEV9F?RZ=Q\9@=GZ<Q
-M3.?YHK),2;Z?YH(R[)$4,']!],8]"2^*W7<<\6,5PX#O7/N"%.<T]_W$1Y^P
-M(#28L@0:?_\R!4><1\N"8,P?XR-#>`Z'+I#\T"=0P&8@5,B!Y8S;;-$,T9[7
-M:X"=QCG7S=U%3G]TVD<2MT9Q[@4`?````'P````"````10``>$^E``!`$0``
-MP*@!`<"H`0(!]`'T`&0&2581Y&":[.VBX8;6B0-ADG,N("4(`````````%PJ
-M``!`"'+I4KXO7;X"L$[8L%LX?\O[FZ`_@CA="LN#<"^B@^,7JC:K!B$Z>910
-M*]^7)KL,#D\<3DXE^6`8:Z<P1Q*W1MSY!0!L````;`````(```!%``!H3Z8`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y5A'D8)KL[:+AAM:)`V&2<RX@)2``````
-M````3````##?QFSH0!X+6;`74WVM[2^3M8E,Y53ZJS6NVM2TN)F<.D1O9*H<
-MR[>55'I+[D<2MT:%"`8`;````&P````"````10``:$^G``!`$0``P*@!`<"H
-M`0(!]`'T`%0&.581Y&":[.VBX8;6B0-ADG,N("4(`````0```$PJ```PRW`-
-M[0[`S<]WT`'';^QHGTX@2-N_;%,TQR5,*F)VY8GD)607U*1\];":75!'$K=&
-M?Q4&`&P```!L`````@```$4``&A/J```0!$``,"H`0'`J`$"`?0!]`!4!CE6
-M$>1@FNSMHN&&UHD#89)S+B`E(`````$```!,````,"I=LXG4W;![QAI@HYSI
-M=8XZNHK<C9`PD>GB^_J'EMKT].+X4W:H]@N=TBQ"1Q*W1C<0!P"8`0``F`$`
-M``(```!%``&43ZD``$`1``#`J`$!P*@!`@'T`?0!@`=ETM01!]CK5K(`````
-M`````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``-T'Z$_YD>>>@ZY<R,2T>$,""4YI^9[GPD07HPZ:R1Z6W.8VB
-M++;&9]UL@(TA%H^I<KCJ38@<6!`,'%*H4J=O*WHT-!U/?G\R7-8..WKZ>9_(
-M3&),QU<.O`?FB'-,G:QF/OFXP_/7+9(>^_?@YI4"NSJ_':^K<"N>8)VM:8]>
-M1N4I```D+NW')+67E+8NGG)0Q6>S-IS(X@8E9)T7U&\V=]"2K3PI```<``!`
-M!+I8,L6&"TLM@)^2B6/90:AA9_]7````'```0`5.]&2)66AF9Y/O*"\I)!Y^
-MKF]2@4<2MT;-'@<`7````%P````"````10``6$^J``!`$0``P*@!`<"H`0(!
-M]`'T`$0&*=+4$0?8ZU:R```````````I("(@`````````#P````@``!`!@``
-M``$4<F4]R]901=H9=0W[C6WC-B&]/4<2MT9;,`<`N`$``+@!```"````10`!
-MM$^K``!`$0``P*@!`<"H`0(!]`'T`:`'A=+4$0?8ZU:R```````````I("((
-M`````````9@A```@``!`!@````$4<F4]R]901=H9=0W[C6WC-B&]/2(``'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``-T'Z$_YD>>>@ZY<R
-M,2T>$,""4YI^9[GPD07HPZ:R1Z6W.8VB++;&9]UL@(TA%H^I<KCJ38@<6!`,
-M'%*H4J=O*WHT-!U/?G\R7-8..WKZ>9_(3&),QU<.O`?FB'-,G:QF/OFXP_/7
-M+9(>^_?@YI4"NSJ_':^K<"N>8)VM:8]>1N4I```D+NW')+67E+8NGG)0Q6>S
-M-IS(X@8E9)T7U&\V=]"2K3PI```<``!`!+I8,L6&"TLM@)^2B6/90:AA9_]7
-M````'```0`5.]&2)66AF9Y/O*"\I)!Y^KF]2@4<2MT8J5`<`4`$``%`!```"
-M````10`!3$^L``!`$0``P*@!`<"H`0(!]`'T`3@''=+4$0?8ZU:RXH)/_FD7
-M#FTA("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@``
-M`@,```@#```"````"`0```(H``"(``(``#3*W($W0*LT1TB]E"HKCK\K4Y;8
-M7W,SKV+S:Y:A"8>C1>J^#`U4B#V.)P'9^ER)+[D&O)FBXP%\>V6?<9OSQ?;"
-M^0]VGZ*9X+%V.OD$'K77()H;,8VC.1BG\/^<K1R=HHPVUUSE$(_M552)V[J$
-M:HM0O8>?7>)WU*LYUS<"3NLV*0``)*<%OZW\\IP5AG=*^GFS_?+F^/Y4O%!4
-M1LFR+SU%KANO*0``'```0`1:4;5&*7G$.)%YXZ+'W@._B>*/[````!P``$`%
-M\]LD(%0P%`I;V3(6I%UQ9@V'G,A'$K=&P(`'``P!```,`0```@```$4``0A/
-MK0``0!$``,"H`0'`J`$"`?0!]`#T!]G2U!$'V.M6LN*"3_YI%PYM+B`C"```
-M``$```#L(P``T(U5>YCD-I7``"K#Y+A%G._8F)U(4C5;V,3/?'B;@'U1PJ/#
-M*(4JEW9Y.-E)$6MD$(N\67#F##`LCHOCZ0-F<^591:[7Y1?M'OG$PP3IB+;X
-M5'&=E"S2LE/S#J;M\'55(A4;1P-^"BE=D6,<((M;WU3B3H\Y>]L/?B3`77'U
-M=B$^Z,]IVX.ZAVB'`T[&-<\4MESR?6"874'=Z,E0L5%LAF5K!/CM<'=X<:44
-M)H340T/^(=+$]SB^69QG!&0V]15J?!B`O%9J*>)R$\D0Y4<2MT8UF@<`O```
-M`+P````"````10``N$^N``!`$0``P*@!`<"H`0(!]`'T`*0&B=+4$0?8ZU:R
-MXH)/_FD7#FTN(",@`````0```)PD``"`Z\,)F.8VUC?,LBR]7S*`-+&1AE1)
-M=6@E8G,JWIA!Q1(<@C_DC#:)P?(OX1@[A*Y2'U8>!J;AYV\V!OEN+`-XKT]0
-M\9%]([?['ZVZB.I#5^+JZ$*%UC?J033?4]9=LN(`T='/M`SZIOO?=H;.'X[U
-MFMV\@B$"M0OCLZ%F^T<2MT9VN`<`'`$``!P!```"````10`!&$^O``!`$0``
-MP*@!`<"H`0(!]`'T`00'Z=+4$0?8ZU:RXH)/_FD7#FTN("0(`````@```/PA
-M``#@>3.,!,L+`$N-I,<YS1_+GUG/-5KC;7:EYO]8,%O/.-VG_*ANIY;73B[M
-M7M8[2:"!;J\[<_#>F'<9CS]CFXF=%GX=5?KXLA6$*!M`)^,"Q"3QFFN7T?03
-M#KWX%DY>>=`DYV/5VX%W6)K<;$=%D*3$]N(K"K_.CW(GAJI8`H'QP_K=A2,C
-M+8[C4*+86Z]HU]D*)^F09OY'3GI1VWL,Z)5.U`RUR=FBQXH,6ZR(A&D4*])`
-M,]?%(&,1'%#E,)@;MOQO,-"7,&KO#WM%^.(;G(;EC26@)+?5VI!VVW/42T<2
-MMT9QPP<`_````/P````"````10``^$^P``!`$0``P*@!`<"H`0(!]`'T`.0&
-MR=+4$0?8ZU:RXH)/_FD7#FTN("0(`````P```-PA``#`9`X!6W4NBT"W8+E]
-M,=D@@'$[SU"L<Y.$N*5)DBB?_,K;O`NP!-61Y?N-(7/DLN$N]V-#\VN).5`.
-M<IBSESL9TLL45:C(8T?QJKM))HE.O!Z@Z_%#O@+CZ"3T:YZQS1TC>E_>W(P/
-M"&IQ(XG!+4[GL[73!N"04K=?RW'-B@:GZ`/:?QP[[9/:,>J6AA,0=)AQ.^W)
-MI](N2H'3\RK9H-H^USEZ"U!K"72J<]=46N!9@<IIB$@*B$E_`?/QR7Y'$K=&
-M!\X'`&P```!L`````@```$4``&A/L0``0!$``,"H`0'`J`$"`?0!]`!4!CG2
-MU!$'V.M6LN*"3_YI%PYM+B`D(`````(```!,*0``,&\142L4PZHE2",,T??:
-M>\_SY?4XNC(_RO_76N[2UZ[J($0PZO11]"1:GF#N1Q*W1D?J!P!L````;```
-M``(```!%``!H3[(``$`1``#`J`$!P*@!`@'T`?0`5`8YTM01!]CK5K+B@D_^
-M:1<.;2X@)"`````#````3"D``#!^"#=-[%FKLT1UA&*V#@B[C9Y(&422P+(;
-M<6S)C&_34O5N^8)J1O^$^W989T<2MT:\!`@`/`$``#P!```"````10`!.$^S
-M``!`$0``P*@!`<"H`0(!]`'T`20'"=+4$0?8ZU:RXH)/_FD7#FTN("0(````
-M!````1PA``$`%C%]A9%N_)=M+=%:!.`ZI>)F%6T`?>9Y+X8V8L$K6QH`5$$(
-MU;-RHA6%^&#K...4M;.JLXI_]<:O"LWCQJR)LGH+[!VV?):MOE;R8#F3NYM8
-M/]"11G[G[C3#R4U"PP:O\Y.N`VH:PT[J#%3"H9--*F?JH=AD:^8.?-?-./_]
-M_A`V'O'0?(4#H,60"T1BR!^3C@EUL*B-B6LW49WM4'TCU6>0KD_ZE783#85U
-MB92H%"%+QB171T[])WDOGMJ*PJ<;1CEC'G$AL]([ECL4V3<GDV;77S!K4$UM
-M0E[/K3!J8_K,C@3I:"I4R_\#]<=X++T.A;`AX@C&C^.!>4HK1Q*W1L@0"``<
-M`0``'`$```(```!%``$83[4``$`1``#`J`$!P*@!`@'T`?0!!`?ITM01!]CK
-M5K+B@D_^:1<.;2X@)`@````%````_"$``.""A7\9TWID*6EL#OXL-^$RX\1X
-M'/&*HZO^7\&ZF8$S6\8!?#(#G]6:9K\1G#R?%);@'/EJ-806'?0G<VJ*<4:_
-M/)$?OM%G%.2&]<D$P&L>%-Y(XOI]1U&0D[IX3N,#]5D%".!DS1BWZ3JU+!L&
-M`Q:DWF=!/LWTER%CJ@@YX#FJ.Q30'<@@N!;H'\E4UIX`.VY6TV(^>E_RA?F!
-M0G,>`^C6X/>12&E0D+'O%J99KL?S[;&-(4`IB4L'3.TWQI-+S0*8EZ2T0LSB
-MM^IV0A0W2KPW]6YCR^AX=2)&P&TA1Q*W1DD@"`#L````[`````(```!%``#H
-M3[8``$`1``#`J`$!P*@!`@'T`?0`U`:YTM01!]CK5K+B@D_^:1<.;2X@)"``
-M```$````S"$``+`!U+0D9]QM@,NU-1=)]!&V:,]K,[A:O%E>,]:SX<0,73Z_
-M;R.@7FA$-@TP^?<89I8R$"AK><8:R-+52L_D55T-\66!X$EDLX/#Y\L8W[,Q
-MA^Q'M3*RE"*<>*50,)[P22.6BCI#>D6=G2IX,RS54/5J\K]JR]/W4=P[N-;R
-MXU9M)51U?]1I1./+[:%1`+M+W]=H^#+1:0H<(LL9_U^;WBL60^!X3&<BS[;"
-ML32^1Q*W1JL^"`#L````[`````(```!%``#H3[<``$`1``#`J`$!P*@!`@'T
-M`?0`U`:YTM01!]CK5K+B@D_^:1<.;2X@)"`````%````S"$``+!A$#G'0[I1
-M0QZ5*>)XG[.B8!E<.L8+I,WB5FHI&;VPH'[="8D973*!H-=?^X(:>__LB]%D
-MIRFU,Q-_D(@RYM%]<<.\QMF^VI5:)'#R23#WF5:3U>I0\&F;V=C(G!'_#?H#
-M,=-G*'SO[JP9I,B/.?`_;A^9W."I6UXF$[UC9E^_LI\K_51S(!K)XP19T#F.
-M*9']B6-JZMCUXR?B?!--T0HY)::KK-0X9I:"!BV11Q*W1OE?"``\`0``/`$`
-M``(```!%``$X3[@``$`1``#`J`$!P*@!`@'T`?0!)`<)TM01!]CK5K+B@D_^
-M:1<.;2X@)`@````&```!'"$``0#.:NO8I^(E+HI+JGI$/@C:QY8_=6$'`R=+
-M-3+2:V+\'O?4O/G[FED\:T-9F+$'8[3U"Y$:_;DB).[BX?YR=TX>^J.,;5/8
-M^<?;C*Z0H/B$V82-M)X0.I%"R6"E8")BR-52+(Q\`)\)-Q\$$%:94.;-;LCV
-MX;@@`"9N1;'4.3?9R#"L'[EP`H=J#3F<["Y!EM<!;O/FX:%K`S+BY<%;1MOG
-M-%MYH,AZ2]+;9`M6:EFO`*['-LPJ5'2_\4?Q!>A4$5&OB\MQ_^?"EIZG?!.O
-MBABQHMF`J,6`P!+H((N'EC>Z1O/F8%7]7=B_F+_\71HK`(L>)7^EC.E-<GLV
-M+!M'$K=&<&L(`!P!```<`0```@```$4``1A/N0``0!$``,"H`0'`J`$"`?0!
-M]`$$!^G2U!$'V.M6LN*"3_YI%PYM+B`D"`````<```#\(0``X,-&8`"99\S$
-MJ5C=B$)2Z1"HEW;"^%@>5:IPK\$<JR>+,D+'7^<E^I:."<K,*]E*'HU45:L:
-MN-$.;"8\\+81W@A8,>T')?)-*20`DM4RM5[`KNAYZ42!?0FU7OH_&A_<Z%I/
-M/X`Y6=FH+5K=,H[50<U*IT7VUG5SL2EM(#](88LKYRV+9\29ZIA8#C8U8\.A
-MXETG`(9?P-].-ZV"XCK8/^B"]ACL6./I%K!8!H7*[)#E]\F&A-]%8FB4=)6Y
-M'<[ME49$XX)P3@834V?5^A0HRQC-\V$9Y-V/I%W7WSI'$K=&T7H(`.P```#L
-M`````@```$4``.A/N@``0!$``,"H`0'`J`$"`?0!]`#4!KG2U!$'V.M6LN*"
-M3_YI%PYM+B`D(`````8```#,(0``L':(R7+VTOZMP,%9CYS"5DM@PE9`9'DE
-M9I,PLW:96%NTEN3-D&U!ABLAHN.KA@Y;=AX"D&QPY!DZ8^TV+8%ACN)[A!7,
-M(-/-A^5#H%+S`TU;?#/.OM2AV]"XK)G&P\+YV%`W2<F^F'>?'[T!S!WUDK$8
-M%@\E[^,I8V&3>AO*H";=^`H"I&Y<G%N438>&.9:X$<8#Y<,UT\`YQ[7BL/Q\
-M!V@F!I&1GE11!]'2P>I'$K=&_)P(`.P```#L`````@```$4``.A/NP``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KG2U!$'V.M6LN*"3_YI%PYM+B`D(`````<```#,
-M(0``L%@QM1KV8?\GY["E:KIKF0/Z(KO/#Q`_IE@#X-[1LVS^RU:N-=$%V,''
-MZ_P1;>"EKG'\VI'UJ)_!79-X<G>DAQ>2=[Q(;N^;B==[_1?5``]<*DD(/"]K
-M2^S]O</_3:LF%!@$U2_]70.K(*BKM'_&D#)B/,FOHX6AJ[-Z![UXH!!I&K_7
-ME*AT2%Q$V!BZ!D#IC(B*_=R%T@`7_V&0R*2A#W!OG#6KFKO*K"%J6+9'$K=&
-MO\((`(P!``",`0```@```$4``8A/O```0!$``,"H`0'`J`$"`?0!]`%T!UG2
-MU!$'V.M6LN*"3_YI%PYM+B`D"`````@```%L(0`!4#X^A=U5T'41O\N)_7T3
-MOQ:_[S4YYZKLNKTW"CL<V#Y8A5IB5-%KQ$<0IS5R+QE@GKT<H\M@.%+])IDJ
-MP\/<#+2YS8A,`G!0]$/]&JC2WK_"VT3V?U9JM\E3)9G%AM`!.91OER'$(:5(
-MH#289><H*DR"OW#E2E/<7%%DZTJ2&XX!K"L[WN"5A"S,&H"*!:X.K15O,B?;
-MA4!'Q&<O5C8N%.T%5H0R[)&5'DOVA1V<,*H\_8$Z=PX@\N;4(9MQ0DL]RQ(4
-M2\9C9I<9F^!C;D;I:FGLKOI'BMRN]7J6\,L;R;K).:A%)J43B_3,8%8L,:1-
-M6][0U2H+VQ8\M"]!O:^%1AP6,;_L`]80BL#_RO`?85U2I295)=AX<-(*YP/R
-M0<5PJ+TG6P(/$`3;TBO3YG^`M:WQU8W*VM1`X^A9_YW]3E[<!Q.\4TYW.Y7U
-MCE_E1Q*W1OGV"`!<`0``7`$```(```!%``%83[T``$`1``#`J`$!P*@!`@'T
-M`?0!1`<ITM01!]CK5K+B@D_^:1<.;2X@)"`````(```!/"$``2#2P[VBQ5C4
-MKBOM0?;5>/Z!XCR,O"4JZ\?B7%SE`1GVBCF9?NK,D3SX\XI9D@BV4)M<EN+K
-M,AUJ'W.7U"0'(V%9O&?C11EYQ8$<45_*$T[&65?+[HN8"P4\@M!QMI/R,%7;
-M<!0(TB6CYC5%JQ8#&NW!#^$0E/P@,`1JHOT.[P'UF=HFA^(EMS5Q!I'30$-J
-M8IL5M"&7@!7`WC.O/UOJ174_:'TD@:W_$HHERB#X<4HS&74-7U_7[G`IK+\]
-MD`[`)";G$1<BB>];[7DY4OW\-`:IN<50..V[=$IPF]D<Q,><V9,]4.FLB\3U
-M(<V[E*;DNGPN)GRJY>98/7G'\A^8``HQJG0Z<P9">P#LDG6T%W:F@>]X/UH;
-MV)SB?YD5D$<2MT:P'0D`?````'P````"````10``>$^^``!`$0``P*@!`<"H
-M`0(!]`'T`&0&263UABRJ7JNC!?O2T$WMYSDN("4(`````````%PJ``!`P5[O
-MU63<P0)^AR.!)W"L^JH-\IXR0_[+SIZ?&=\^Z0SS)L/\GRH,_@=92`O(D.K*
-MW.+)Y:F?*,T)92%)1Q*W1C$J"0!L````;`````(```!%``!H3[\``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y9/6&+*I>JZ,%^]+03>WG.2X@)2``````````3```
-M`#`1.=2MVBI^QD\P5)81!TAUGOZ_['0EG*[M>Z7Y7H_M?XH'^&0%+6:AA46R
-MRD<2MT:[.0D`;````&P````"````10``:$_```!`$0``P*@!`<"H`0(!]`'T
-M`%0&.63UABRJ7JNC!?O2T$WMYSDN("4(`````0```$PJ```P2,Z-OT*`=1'^
-M.1[*=+'/(T,*K&Z_8B!L6::S_/GA,8IOIZ\)E%'SJAODPR5'$K=&"T<)`&P`
-M``!L`````@```$4``&A/P0``0!$``,"H`0'`J`$"`?0!]`!4!CED]88LJEZK
-MHP7[TM!-[><Y+B`E(`````$```!,````,+D$1\"F!\QS7*-21\WQ47DZ&]@5
-MXR.@<.]S7Z.RB2:;GG&\$;I4DC%TG`-61Q*W1I-""@"8`0``F`$```(```!%
-M``&43\(``$`1``#`J`$!P*@!`@'T`?0!@`=E-.5'LJ'T?4D``````````"$@
-M(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``Q[4Z3Q@MW\-SNQ49,L?K8DIE:6'C>E4EJ+X!$KM0<C0)!R4Q"4O394DW
-M;?G7-7H531\?^OE8RO*&#DZW_WDY*22^G"9LFX#H@G=;YQJ\/3'3O#(QS^'-
-M'V5BKSR%RDL'>8EO+L!V=XQ?C,:WETWR)O6V46[8/2$&RUD=Y/VD0RHI```D
-MIG!N'"2FO2,Z?P3-\!C<\GJ"HO-'\XA1&G)V;6,'S9\I```<``!`!-DF"-JA
-M>H&;S[)98"N)D;K;N4,&````'```0`489ZO*U74W<U]BS3J:R?G($R"-54<2
-MMT9J40H`7````%P````"````10``6$_#``!`$0``P*@!`<"H`0(!]`'T`$0&
-M*33E1[*A]'U)```````````I("(@`````````#P````@``!`!@````%E;\H`
-M<[DF>X?Z`!P;8)U=K]Q[%4<2MT;"8`H`N`$``+@!```"````10`!M$_$``!`
-M$0``P*@!`<"H`0(!]`'T`:`'A33E1[*A]'U)```````````I("((````````
-M`9@A```@``!`!@````%E;\H`<[DF>X?Z`!P;8)U=K]Q[%2(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``Q[4Z3Q@MW\-SNQ49,L?K8DIE
-M:6'C>E4EJ+X!$KM0<C0)!R4Q"4O394DW;?G7-7H531\?^OE8RO*&#DZW_WDY
-M*22^G"9LFX#H@G=;YQJ\/3'3O#(QS^'-'V5BKSR%RDL'>8EO+L!V=XQ?C,:W
-METWR)O6V46[8/2$&RUD=Y/VD0RHI```DIG!N'"2FO2,Z?P3-\!C<\GJ"HO-'
-M\XA1&G)V;6,'S9\I```<``!`!-DF"-JA>H&;S[)98"N)D;K;N4,&````'```
-M0`489ZO*U74W<U]BS3J:R?G($R"-54<2MT;QA`H`4`$``%`!```"````10`!
-M3$_%``!`$0``P*@!`<"H`0(!]`'T`3@''33E1[*A]'U)H>NR%CH!VQ$A("(@
-M`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#
-M```"````"`0```(H``"(``(``(G7&MN,QI+"'FIGLC?YN\W[_K,CJS2P9K'F
-MF%F.2<#'B+0M\A%2*4GA$(3@8_&C#>?Z/-NEXB!*"^OERX%6I"8NTE!Y$28E
-M#?3$S?!];3@M_(%/;MUB?3`-T':E`QTYB%:&G\FXBJ[;70Y5V\:/82J`T&>B
-M!I!N&67J=R-F1T\F*0``)/EQ'I4>LQ0T?_IDF]H4ASFOVAM7OR0S#Q[VXJ97
-M,8@Q*0``'```0`21>4)C>>M*@U?TZ>(:MB.`DN?LI````!P``$`%R:<C<[+;
-MY+N^A!`+Y'-!-9S@+A5'$K=&E+,*``P!```,`0```@```$4``0A/Q@``0!$`
-M`,"H`0'`J`$"`?0!]`#T!]DTY4>RH?1]2:'KLA8Z`=L1+B`C"`````$```#L
-M(P``T!YM1V8,8OY0W,CL7*T'5[R5!(1ZKV*TQ]=1073&=E(P\^$]'A-DQV#/
-MV(6MJ3J*&P$D:8$8%O:KM<D&YK*X@@).B0@&+5^9D`[EJ?"5]%.5,!C,JB[^
-M+@'^IYE6I;7#$,6/TT(!V>_RW9:8ACM+?%TO@DC@)E?37MPY<A3',.2EKUSV
-ML02PRZ%VUI#K!4%.1@9(^,CB.;CY%,W<T5OY4F(2,R`@,M;<C,R2YMU>\G7R
-M4A8'&:.<!_D4$2'[ZTH>5GM\32BIF9CS^%]5DT<2MT;8S0H`O````+P````"
-M````10``N$_'``!`$0``P*@!`<"H`0(!]`'T`*0&B33E1[*A]'U)H>NR%CH!
-MVQ$N(",@`````0```)PD``"`;S!$FUUL+O5M@A3Z_5=5$^L+UF2C/,5)9&;Q
-M&>13.*S,U(Z(L@_I(^7`4KGXLFW)4-4<8(FI,RNUIAO<+9G2D0N=9GH>0^PK
-MM/8K<4ACW76E1J=R.>K),*^/_7+^O;TB5MKIH&7>\[*'*%-[C!PS90D`.2'&
-MD\/M4RVNH$<2MT84[`H`'`$``!P!```"````10`!&$_(``!`$0``P*@!`<"H
-M`0(!]`'T`00'Z33E1[*A]'U)H>NR%CH!VQ$N("0(`````@```/PA``#@5@C[
-M/RHW09+T'VW^J=U-.BTBY3B!>,U&WO"M%1/(9ZQOSZ96?R6N3UB7$J]`NZK6
-M'RPG&/>\BXR87.KUFBJ\$6EJD?LV[;F`8AVBX_X"AO6HW(Q"];S#JP,GR64\
-MV8-EN616\-K9KS)&N5M.L.V<HX;4,+F"AS7\W!MRLRET^624NQQ>(C.3ED/>
-MNT%P%`[J`W?-#"/Z:X<L\\!^\4*-A/>-=`0P0/J5K#B#JG.62**5.'&:EUK0
-M%6]JCJSF#"?)W+-7+!O2+;$'>I:<^'D<]5@);AALW4)""%JS4$<2MT8B]PH`
-M_````/P````"````10``^$_)``!`$0``P*@!`<"H`0(!]`'T`.0&R33E1[*A
-M]'U)H>NR%CH!VQ$N("0(`````P```-PA``#`40YKDT(:O%FY/@5/C^$4D]EM
-MIY?.^`GTP*>EXCNU>(H>WK"M6MA$Q71RZ"9<\QWF#\6\2WOC(?L*>>H5Q9IO
-ME#ZU6,I_(;0+G;^9$ZU1?./AU'"K'[2_7$WR3MO<]_?B;0.4[(:;C]?Y<E,3
-M35:X/$5'/@Q8<E^F:%HZC(;$G/Z+7/MBDUUJ@3;3M*?5A/*^U4#[-]B\+6$6
-M."'SR='F7W(@B2V>+RL<8O=+=VSH-:A0411>>;*!49?236I'$K=&V0$+`&P`
-M``!L`````@```$4``&A/R@``0!$``,"H`0'`J`$"`?0!]`!4!CDTY4>RH?1]
-M2:'KLA8Z`=L1+B`D(`````(```!,*0``,-^<#OI/<CAE`[9=@9$RFSH:62E$
-MJKBKR#';8,HVBYA!+4AY6.A-E_X/B$_61Q*W1F$<"P!L````;`````(```!%
-M``!H3\L``$`1``#`J`$!P*@!`@'T`?0`5`8Y-.5'LJ'T?4FAZ[(6.@';$2X@
-M)"`````#````3"D``#"PO[F6T#_08*0@B?2Z,3*$3X'AMJ54;];0^)#P(]<;
-MJN&P.^Q*!QS9^_Q[RT<2MT:I-PL`/`$``#P!```"````10`!.$_-``!`$0``
-MP*@!`<"H`0(!]`'T`20'"33E1[*A]'U)H>NR%CH!VQ$N("0(````!````1PA
-M``$`@H;=ZLQ(S$?M'U@<_&&LH8L$EO^9DK'+FY\6T108;@>,`U-AGK616;<)
-M(Z>7>#,EB;%;P8I*KEED;-R"'0$EKR0S_[O[NO[(KE/+WF,2&RH]VOY+>;*X
-M5$I#\0QS^YG97[\#%N41^.(\_<4@@2W-'.:)>F'[2^XV$%\Q_;C`%\`>P5QM
-M9IM\8W=M'9L]9M=?^Y5LFG\L#U;S@J('1C4P7I-&K;>+,B37]"LSK@]W(DE)
-ME<$A^2,.%*UQ]K:+V]MT#O):_B!F1.1'CEX&@/&GLU"PV]F(MCIAK=T7NI)L
-MU*,G.*X]R"%?5D+Q&^\V4_BF**^<&;SVAOO4)HC91Q*W1D]$"P`<`0``'`$`
-M``(```!%``$83\X``$`1``#`J`$!P*@!`@'T`?0!!`?I-.5'LJ'T?4FAZ[(6
-M.@';$2X@)`@````%````_"$``.#$D&IQD@!?^6,W`!\$(P5X1?:\@;8DC?:7
-M5,IMWQ0:RV$$529GKF^3+CKM5EUMVFUGH$$V3$D$E?[J/H<QQ$PZ"@48[F`=
-M`:'CU,1F:$%.E$U!2\.0=ALC<`('U#TD'L&P1#TX77F#5TYV)Y6748O;#+`7
-MN[+09RP4;N/0TLR&$Q;:R1F=_%$G':HL7QG\'#D9BM&AZ\WAAVT4BM6-X")G
-M_LD4,5Q065?)AE'<H727:C67NMK-08V?LERT2>!IN%1_Q\/N$G#X1T`HOU=*
-MQP&)@\WVO71FX2%A]I6$1Q*W1@Y4"P#L````[`````(```!%``#H3\\``$`1
-M``#`J`$!P*@!`@'T`?0`U`:Y-.5'LJ'T?4FAZ[(6.@';$2X@)"`````$````
-MS"$``+"'5DX=>/!F[2>`)]UW<B/G:/M]-J-&]ZE=1V#X]IZ`U>0>W.:VU\H&
-MT[5(VP;9%RH$LK-TL6Y-Q<R#C3QK@X4[_V,Z)ZR*+SX+V8IZH-2MH(1`2=A7
-MI3;V:6W8=:6^&5>=P4MNA:()(Y^2%/B)"H&@[?J@L'=!+ZGQQ'(?;?&;$R/B
-MC#'_1("(`V)BHPBDC,RZ^[L^+D!7;:@*]':<:J#>H0Z):!`63`=[0(651Q*W
-M1E1V"P#L````[`````(```!%``#H3]```$`1``#`J`$!P*@!`@'T`?0`U`:Y
-M-.5'LJ'T?4FAZ[(6.@';$2X@)"`````%````S"$``+!F;S9':>L(-C2K#`E$
-M/QAXQ:6M6QR6G7^13'6R[M@2HK,8M?[)'KCH!:DY+0)RA`CQJD#<S2=R40FC
-M-Z\O!EIH#:1,S_1^9V">O#XC)MPST#%]RC;$_0O+JW*@!DQZO2ULR%%U%`83
-MH%4&8T,>;B`$\1U<8F4\YB/:<7NBLW/7_1P6%J>,J"P*:K[6$$=LF\M49$XE
-M:A*M(3)E`HZ.HW]3FD>3(Z3O)`14(!L=1Q*W1A&3"P`\`0``/`$```(```!%
-M``$X3]$``$`1``#`J`$!P*@!`@'T`?0!)`<)-.5'LJ'T?4FAZ[(6.@';$2X@
-M)`@````&```!'"$``0`)^@?(C#7GVK+%`>;AXN')@8M,S/$/G7EJ)7FPDY\O
-M7:_6R],QGL;;+SK`B6=G.6E\#;.N[G`\<9*,6S%2Z*6L1882J45]][EF.TBE
-MH+6S^Z7,.'HX!OA4,_FG+UJS<B)'[P[JR6E<QN:O(N[2N*^-T[3=%56]O?(M
-MIU^+1S%E,_>2<^5L@5O4E*8+"BLR`QOY(NZ17!VO+TQ4Y[C-N[?..A=?M]+*
-M--JI4I4JH]!QQRT"ELXRVY+5Y<D/3^*O3-"-F/#`(XV$?:^TM',T1%<VIM`M
-M'^#F!->3?/TR#8PMI3V[+C!RS8_0&;?G6X(,-&RVI=LSS-X)+701L=E'$K=&
-M,Y\+`!P!```<`0```@```$4``1A/T@``0!$``,"H`0'`J`$"`?0!]`$$!^DT
-MY4>RH?1]2:'KLA8Z`=L1+B`D"`````<```#\(0``X)24F2H$6;JSD276`H2N
-M@A"*-K%?6?EZA9*`S53U=*R\@V[9)&X8%2_+SB6C)C*,2!O`FK5(9EG$8\L(
-MRI;[)`,4>P^$PH12Z#H\AHIR^:1P4GNT0NA&OMERMYM*.KB5PE]C5=3>$K[?
-M-81A":_;^;R"WH>U/\\&Y""9+R\(8V^5*5V_=</3H^`"\F,3<I@P^GKL'4$[
-MQ4-Q@^*)2,Z*5^WM<.Y\`M=9(XWF*"F*\ML3M)[9M&VS`ZYX72F!>$Q&T?^2
-MHFIT]N8%AO"<KWU_B'@^"3.$M3HMCM#/"Q9'$K=&VZX+`.P```#L`````@``
-M`$4``.A/TP``0!$``,"H`0'`J`$"`?0!]`#4!KDTY4>RH?1]2:'KLA8Z`=L1
-M+B`D(`````8```#,(0``L/B&5\PI;W"ZTBY3@`F(W6UE1W"A>C*1CM?X:'KZ
-MR/[J/WZJ?I==@N=D#\`HX]@PDC<&@+/HW,<Y8UO&/[WSY&$:V"O\FP$8-G:4
-M@V,V<-XG/7?59E16_^/NP87_EUO!VT`L.=WO:N*J$=$8LCTH2<2:`U=A@WF`
-MBU^!>W?SQ+^Y!YE,>HG"F=;M]FIZX=1@:'*;V^=V`SQZY&!7UFP20I#\[EN!
-M^CPPI'QY?X='$K=&!](+`.P```#L`````@```$4``.A/U```0!$``,"H`0'`
-MJ`$"`?0!]`#4!KDTY4>RH?1]2:'KLA8Z`=L1+B`D(`````<```#,(0``L`73
-M:262%6E8,\BA^O*@LTU*(`D"Y&EW>=@1%#<\$GND":C.P"O#(4*3C%4E`9/^
-MVS_;@/45N$;6O:<,Y`"</$*]D-#7\&-:U=,]V.-DY0`L%<)7>$21^F!L%=WP
-M,23$L><SUP1SSP5QKT.$3)GK,)]I'5=5WC+<,!AR+:XLYJ%NTQW[<;PW>/3$
-MG*T)Y+4/!L1J!OB/B7LD'XBY4.M'!01W`,A9I/?)[/@ICLI'$K=&;O@+`(P!
-M``",`0```@```$4``8A/U0``0!$``,"H`0'`J`$"`?0!]`%T!UDTY4>RH?1]
-M2:'KLA8Z`=L1+B`D"`````@```%L(0`!4)48%K;J(,[\\(IPUBAGE,F/""^%
-MR%()\U#3@<?QB9ZL+2E1?%A+BEC^`+,6$U9D9[I[@X;-'-?NBQ#MLH^=V3$)
-MA6Y&O6M43@A8V3&S=/9<=>#J"*@+D<=_F$AK+65+0Y#D0TA`#Q61*V:GU%U:
-M75TF'M*5#^;:BE^[W09:>/S&)].BSS`5B1ENQ\#IG;_2MVLI1J_5%)=KUL#^
-MBRF9^/2_0&"T^^0%5I3:6`+*Z#8A<H#7$90/V$`V_*>FV)T:S"]'U&7]=]?V
-M4;'SB.*=Q(<%'DGRJ[;%2-<(LY=ON,V'J`*2-V[^$1W6>]R7;ZAWU)J61"TQ
-M,*\4`IR*\/^MMXUB+CO@)H0WS7J"U7Z<:8M*>CM%%PWG7/B<4`*E<BLR$IC6
-M]9>G8L`JDR)-2HSYC5K@:'APAR_>@(A\)6QULS+;AP6JU<Q5C3-*-6WT1Q*W
-M1L\L#`!<`0``7`$```(```!%``%83]8``$`1``#`J`$!P*@!`@'T`?0!1`<I
-M-.5'LJ'T?4FAZ[(6.@';$2X@)"`````(```!/"$``2#@RB?YV(6&MD_>(Y_?
-MZG/EO3C]5W-0C0'&UWZ_/9_PM=".5;WPQ>J+\*<U51D2YU&8<S]8X$&L2T%D
-M/=6\G;\<!0;D2&XJ&8#S7C/*?Q2+V$@J',0`;">=#EH)AR#KQ>RJI#C$F[[;
-M]LLB/<OC5.(H7E^<F@KZK\="%07'?I%W$\;1E<SP*UP0+&$.S*@U,Z>>+5R#
-M[$L@<`07P9Y*D:=Y<.7DG*\?F%X-&+[AY)Z3+P;;7=:YXU$H[3/I!\A"5V1[
-MD[Q%4CL=CI\>_]91%C1F?-X[<BHJ&Y-U0\G\82.H-W7W#5^0QK2-O+"T+?>)
-M\Z&01<Q8#"N6(<##JF_I\PME\@U!P26M=+#?Q`RR[<,WOEP#_XB;T)'K:FP$
-M8T<2MT;T4@P`?````'P````"````10``>$_7``!`$0``P*@!`<"H`0(!]`'T
-M`&0&28YXYH'.NYVF37-N@5AH3@DN("4(`````````%PJ``!`R()!V[=R^TD4
-M#TZ-,>+VO.AKCKX1IVD`-DAWL5VVJ@F,S^GY$C=>PQ'+C48!BRA.X3N0.JJ@
-M#I6I,VF*1Q*W1D]>#`!L````;`````(```!%``!H3]@``$`1``#`J`$!P*@!
-M`@'T`?0`5`8YCGCF@<Z[G:9-<VZ!6&A."2X@)2``````````3````#"S_-5-
-MD%!>PM'4,DEC*)R4X6ZFY,@3G+5M6'>_L-Y/6_S>!@6"]P),6.*'KD<2MT;;
-M;`P`;````&P````"````10``:$_9``!`$0``P*@!`<"H`0(!]`'T`%0&.8YX
-MYH'.NYVF37-N@5AH3@DN("4(`````0```$PJ```P):FB:BHPIY[*%!64(3A.
-ME*;>D2_ZFOGEA%C@8"4.WX.39R7&"Y-A0XX+VO9'$K=&(WL,`&P```!L````
-M`@```$4``&A/V@``0!$``,"H`0'`J`$"`?0!]`!4!CF.>.:!SKN=IDUS;H%8
-M:$X)+B`E(`````$```!,````,([$P79Q7#`"+HL\4V)]H`!3DR<F'(].DQ%_
-MH?FLT4I*/N&AH"5AI]"#:KYP1Q*W1G5V#0"8`0``F`$```(```!%``&43]L`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E)Y2//$$XS'0``````````"$@(@@`````
-M```!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``L6O=
-MXD_NO<:C>RRQOW!9"NCM&S<I:#E?N=67Y/"#B]G,FMK90J*[:K^^/.3%,P_M
-MIDLNIO)`EJ_]1X7D9^:G8BOU(S0'TA=;#C:'N']7-])-(2>N&>QZ&U*X7[%<
-M9FO(T/%W&1NNE-U;T.O!,[P')#=EE5?T.%PA'3/%QN>AKCTI```D3@7&I)#H
-M;)FQB$`DXNX&ENO[1?S$9,,OSS_/"#>0&;LI```<``!`!!QOV4Y/Y_N!,R0_
-M^?.R(!S3Y5XY````'```0`6[^DR'3::;'M^'.E68MKG)?*#D-$<2MT;?A`T`
-M7````%P````"````10``6$_<``!`$0``P*@!`<"H`0(!]`'T`$0&*2>4CSQ!
-M.,QT```````````I("(@`````````#P````@``!`!@````'#K\T[7@?0W#3I
-M)=02=--MHB\(]T<2MT:LE`T`N`$``+@!```"````10`!M$_=``!`$0``P*@!
-M`<"H`0(!]`'T`:`'A2>4CSQ!.,QT```````````I("((`````````9@A```@
-M``!`!@````'#K\T[7@?0W#3I)=02=--MHB\(]R(``'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``L6O=XD_NO<:C>RRQOW!9"NCM&S<I:#E?
-MN=67Y/"#B]G,FMK90J*[:K^^/.3%,P_MIDLNIO)`EJ_]1X7D9^:G8BOU(S0'
-MTA=;#C:'N']7-])-(2>N&>QZ&U*X7[%<9FO(T/%W&1NNE-U;T.O!,[P')#=E
-ME5?T.%PA'3/%QN>AKCTI```D3@7&I)#H;)FQB$`DXNX&ENO[1?S$9,,OSS_/
-M"#>0&;LI```<``!`!!QOV4Y/Y_N!,R0_^?.R(!S3Y5XY````'```0`6[^DR'
-M3::;'M^'.E68MKG)?*#D-$<2MT8.N0T`4`$``%`!```"````10`!3$_>``!`
-M$0``P*@!`<"H`0(!]`'T`3@''2>4CSQ!.,QTQ_[\SY-)>XDA("(@````````
-M`3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````
-M"`0```(H``"(``(``"">_96?2VQ.^H6O+<)"-^.5L6)5-YF8*)871I0:2P"2
-MZG1S:O6\6G(:9CFU?B4Q&Z>:C6D:.%+$6=#<*F/;8/(O(3"#K5>WXX8645H4
-M;8#.:WWN-3,!L)$)LB!O437Z\<B]AF?>M)=L<<@;[99D_A+C>SZ)\Z(W]$%E
-MN&6OVUU[*0``)*/E![/H&IN`.!8LB4BD+C6FH3)(U)A4>B;K..RG:4DL*0``
-M'```0`1""OQ#/@V!T@X7<B,"RHO`/UI0:@```!P``$`%G1Z8,7BXLMC5$(F@
-MY&,8,P=$WY9'$K=&ON4-``P!```,`0```@```$4``0A/WP``0!$``,"H`0'`
-MJ`$"`?0!]`#T!]DGE(\\03C,=,?^_,^327N)+B`C"`````$```#L(P``T%DJ
-M@7NFU$LSH'+<K70VZ>Y35?MVT5H.P<]@L!\:9Z1`>FZCFQ\M;"?P3=[9(NPT
-M[O$G=3)MVLFUOUX.(I+.5"UG%7G;JE6Y=5,+O1OZP(\I`_C(K%:=K4(`;>`%
-MRHF?"G'L;B=?=:B8,&I+R?MK\=AJ$/^1C#:9/<?>+-!:CY-;\;*>QE.6@N<$
-M8(DFAAB[K96`VAT<5S3XQ,S8VC5=YTL!:0YI^YT$4]1)(5E$2%^/K=!#)][>
-MS>DON7*?QV=4#9'?:?^,"$H*<$VN;D<2MT;$_@T`O````+P````"````10``
-MN$_@``!`$0``P*@!`<"H`0(!]`'T`*0&B2>4CSQ!.,QTQ_[\SY-)>XDN(",@
-M`````0```)PD``"`^]5>5JU0&'Z*,@<$K2TS7(6H-,`4B6D&T5%W@<L0A-+,
-MC$\RSQ\0_AJEHQJAVV"4T9GJ9M:)-UG<L0V!5/FI>69M1+67&A\K?JI>)'0G
-MXE)^:J#V_YWB$*L5-%0<NW(S@_G$J<2NVLMW/I4N/M',`6'+8&/W6[GDU$J-
-M=D<2MT;4'`X`'`$``!P!```"````10`!&$_A``!`$0``P*@!`<"H`0(!]`'T
-M`00'Z2>4CSQ!.,QTQ_[\SY-)>XDN("0(`````@```/PA``#@;"YFADP#%)PR
-M@Q]:D?:?JV[F])BI`PL[6/82NV?]3Z':5_S-(%WV^VJY5W!5\4Z/8!MQ@257
-M3J,]BN(FD",TF_R>?@@];NBQCFQO)#R$RMF!1X=.M>?&%[8K2+NK91??9'A4
-M=^V%"VQ;JN1-N8MG%QNW;\5'%U+>^`!MR#O:!=\D/)NS1^;QEGQIMOX!6"ZP
-MCH>[P$29"018XZ8'D)F_$O.Y'=>G<7*Y-^D'^U:-=+`_3_2]B0_[2.:O3.@*
-MK%7%X$\M3N"EZ4!2?84,<AOZBGV@G.I3-E*Z1\#G;T<2MT:Q*0X`_````/P`
-M```"````10``^$_D``!`$0``P*@!`<"H`0(!]`'T`.0&R2>4CSQ!.,QTQ_[\
-MSY-)>XDN("0(`````P```-PA``#`Z?R:'V+2F-;W32`/'X5/3DLT9Q::V4&X
-MHLDCMAEO.D2"./5@@JOMBAGF)!ZI&9NV)-J-@PLPUFPSF<SRE8"$/.SRIFQA
-M\+?/M5'IHC`'9\95=/DQ[W`_0##^B1.D`,S,/=VP%7ZXY+B+F/NV"8"[FC3'
-M#+_$7H`CQ;)^^>X!VGG/>:;5!`P!T9O5;#CT@C(I1R=%#CXR9Y1XI".'B?:@
-M/^49W/^-[<J+-)7P/5:9'QM!*(#BK]AA*K:^@H-'$K=&2C4.`&P```!L````
-M`@```$4``&A/Y0``0!$``,"H`0'`J`$"`?0!]`!4!CDGE(\\03C,=,?^_,^3
-M27N)+B`D(`````(```!,*0``,&Z`+D0F\J/!#]=D,N+'MQP$21!7&#8&5[=)
-MHI!XO>T18AL2XF>OZH1N3$:I1Q*W1AA1#@!L````;`````(```!%``!H3^8`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y)Y2//$$XS'3'_OS/DTE[B2X@)"`````#
-M````3"D``#"WU5E\]\*I<V,YODCC"`"&J:'!F;`2L;$LXDCH\P)*GJT@(T:)
-M[EO^6OB)-$<2MT:@:PX`/`$``#P!```"````10`!.$_G``!`$0``P*@!`<"H
-M`0(!]`'T`20'"2>4CSQ!.,QTQ_[\SY-)>XDN("0(````!````1PA``$`G;D0
-MR">-T`.F5X"<ED@E0MK2C/\F(<4A1Y(*,..44OJ=F5T!E1]J_(P'G2)X^:O,
-MTQ3_X=U]8S)V4%O3)AV3+-:?Q.DRY/1+^TEQ0/+-4H)Q<&9)C7YT[1),Z-O<
-MX_!)>YH1+UE/]X3O&7233[7_Q0[-R?<!Q]O@T1MG'2.3$!FZ=_7SJTE`>F#S
-MO62641O4D*SZ@Z2"R.,?:-H5H)K322<E+4D=+53E=+3V/MRC$']&J`WE-:@0
-M$PY`60(]*,!K49K&OOV$.K5>)R]Q40R(&4'A-SS#]">KY&$JR5&QHBZ=[N8J
-MR`WT7=E$,&1A1)16)$(XALJV49X.`-M!1Q*W1IQW#@`<`0``'`$```(```!%
-M``$83^@``$`1``#`J`$!P*@!`@'T`?0!!`?I)Y2//$$XS'3'_OS/DTE[B2X@
-M)`@````%````_"$``.#L]*]YEDQMR`LYG'[T]&N?:&68['=P4?03RI928VKE
-M@569>T!WW^TCZ:5_0!?+*NG3"F;L'T(*K6Y/"F7>BH?E\P!#(4G*-MH\F*ZC
-M>AROY87?WLW#)@)'F4GQ.Y1$OJ#@;\X?7?G&<`&]"GWHP2#\^E532Z4K;LN0
-M,JZCU,]/+-&.DOW1KGZO@CS<T8]WB[$9(5].71F:-KIU5W0</_YU\6R6E2,W
-M`^%_Z;PC]8U.E7ZB1$A%K#I:6WU!H+[-A]*!B9[>+,R7$"!?4&%$*G9V$*#1
-MT6-#953G:/(D1Q*W1D6'#@#L````[`````(```!%``#H3^D``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y)Y2//$$XS'3'_OS/DTE[B2X@)"`````$````S"$``+`<
-M;+\JT.9D&[G$5)538M'XE2U]8L=F#25@])*,)@[-W\L4:.)]^5*"6\<S=ZS^
-M!\59L!:$_6OJ\)90;II*OJPD>)\B8LH#XS@+[9Q(X88<FFE^C,GCK.U^A=_;
-MWTCM,-1";R'R3<,I/"_)8&TMDE008?5++D`LA'RK3(+FI5#3B5F<0^`,*&'H
-M2A\]=X3A$`!_LFAM)T7D[4R\P;0*,&WU*=_#G"XM:U:;+E]91Q*W1KVI#@#L
-M````[`````(```!%``#H3^H``$`1``#`J`$!P*@!`@'T`?0`U`:Y)Y2//$$X
-MS'3'_OS/DTE[B2X@)"`````%````S"$``+!BPWS(/7Q7&JQ;L0+_"5!X8D'V
-M<SR*\A<*G=*#WWQ9!"$UWAYJ8)W_/8CH26I++E`';,-LS9$A=Q;0X::A%3XJ
-MVO&-=4:-3=N&+S>-LUUHE76S`^&#=H^20&+4']LR,(2)@/\<9`SW@[>+!WV4
-M>\B0-;2,4T0X5=7V('8V\?S9)Q(9(B'C7BE'W7CK5K16OS3!BEO<!D-53>`,
-M2VWKWD;&\);-A-8X9^26ODOK1Q*W1A;'#@`\`0``/`$```(```!%``$X3^L`
-M`$`1``#`J`$!P*@!`@'T`?0!)`<))Y2//$$XS'3'_OS/DTE[B2X@)`@````&
-M```!'"$``0#M"SRG"-8#B4LD-8$1ZQ`:C'8-QFE9J9*8P22>Z02!^5NS/0=;
-M(OL_JE6YFE';)._0?H4E6[6\Y,+\1:R-MU3GQG6!1RYNJ+9:6&8Z)IJW<_ZU
-MS`_%-AVXG#+KLLD84;X"O%$5R==@J_=_3+DI"B$H9M)&%TZ0^WL7Z.%U'4W3
-MMA'&<R2Z;3/^?^Q3J54-*D(-K_[,G?5AY2IW,EV9<?9G#ZCXS1V.N0OK,<++
-M\-S@5[^@QM?<[6F<:O%&.Z=88U1"9QI<^JZ8/U!C=&*RQ(;B^LH3!XH!B"=?
-MLPV8X+]8GLFE]P80`\G-FCF)+^<",>I#N-S3WUV8X`$@7[M'$K=&5=(.`!P!
-M```<`0```@```$4``1A/[```0!$``,"H`0'`J`$"`?0!]`$$!^DGE(\\03C,
-M=,?^_,^327N)+B`D"`````<```#\(0``X#SQ/%D/G!JFXJRR2R[W`-GHR""2
-M@R;ADH-_`9@WIKXSS]7O='B"]Y`5!1;I[80WHEEDL;>LLV&,\R4GO0T72P`L
-MF``ZP]8:(*RU$?XH>SK!B,_N;;D";(81+MY;0FE<?2YZE>W>16;*RKT(L-G-
-M*YX..(&4_[T+!;:L7/C5L^?NQ+6(*[P_18KJYB'[_QR-;2IK^V!2(:IW%REF
-MGFMR&D8_(W2<$KFB\9B\9OB>.4T"Q;KU!.\VL+E\\@AM&G\V*RH((M=T";JQ
-M!UX^;?9@_<[CR"!,P=A(3M'\@*='$K=&K>(.`.P```#L`````@```$4``.A/
-M[0``0!$``,"H`0'`J`$"`?0!]`#4!KDGE(\\03C,=,?^_,^327N)+B`D(```
-M``8```#,(0``L(H$O'H:KF$YL\^2,9C;8WV7UK';1DV9X!YQ;V9D>O_)]'/]
-MQGCNO'![\T%+P'.(1OUW!I+N;*>-W-;Y`@AI:[8L8%!:'7]2?KS'G3\.>K5@
-M?X^%%EV)>ZAWT-IGM^!^8$7P?X@E`JEOE<%E`#RC7K!`QH%._47<[=[#'H/1
-M\*GVPDARL$V=K=OQ_%6L\]3PP5(G-]S@2[#?E"6M7^N&A4+^-ZMZ)MF@[Y`:
-ML*)'$K=&N`4/`.P```#L`````@```$4``.A/[@``0!$``,"H`0'`J`$"`?0!
-M]`#4!KDGE(\\03C,=,?^_,^327N)+B`D(`````<```#,(0``L"&"$8YX8(W(
-MP/L?#:DWAKV[@$"H'^VI=E?V3DQ?)I%!>EJ=+2,Q+Q')>TL>P\`7`M^]17-1
-M:C!.EBHX62D3@!7U_%14*X2\[_YL[@@F^78^(H,P-?.ZRE9R8MBPI],E>Y]8
-MU99AQ7>)`)YC9XH[W.2ZAUJS;R<\2!J/W)26L+O0&_X4WQ]K:N`5,H=KEHQT
-M_#A9A>#EFEGCQ%<M*`5:.@^CS7@6*N[OM7)7,=M'$K=&8"L/`(P!``",`0``
-M`@```$4``8A/[P``0!$``,"H`0'`J`$"`?0!]`%T!UDGE(\\03C,=,?^_,^3
-M27N)+B`D"`````@```%L(0`!4/JR'_6U?F]B:.;O'0YI.8KTP'S:1@O^;%=H
-MML#%R"[+PLK)WK-*9/SC:C;CT\OYJ7G&BAV6,C-7\%RROYD]"7#2Q.9]38.7
-M5M*R9@QUM4@@7QP*MGR@`CI<V$A\6UZ@\SNZYIM"RD>%57U.=F$P7PK]1+*(
-MCUD@VG/P;38<%&J5:?:X7W`^/DR.A)X(C@XNB48TYEG)1^3@H+7HQ:)+R&'(
-MFN`:-X@T/%L'!3C*S]Z3XIZ*\P?-;1`??&58M*@]Z-AP=1[FB(O+J^R*02H#
-M="-)M=XB]0]A>R>Q4Z4H$IU.65N5>5OQUP"TBBK1@N#)X?*:=2F+%DB>QC#@
-MU0!0V9#X=H:T`CO)-*4WTO.L4+1(^>!'903*2^=]\8<SRY8\!H_@O4,!#2N1
-M";3P.=;>__!G/GPR.TQ`HZ5Y!'"_;@@("]_(6R0X>6:YW-4?2!*W1F\>``!<
-M`0``7`$```(```!%``%83_```$`1``#`J`$!P*@!`@'T`?0!1`<I)Y2//$$X
-MS'3'_OS/DTE[B2X@)"`````(```!/"$``2"LP]DI?W4"8UQ'@VE(%#(@@`6I
-ML'LM"QAMFC:J4?K5_-5?P2&\3HX1-[+`6'BB+QJ2;5PU8S,)1J/CJ?/2T#6&
-M)41#29\K3)Y8'MB7,RZDN#QX$50VH^&INL0=_["<W?`HAH]VCA3Y1>X6A'2@
-MOT*_*LW.N&?!P8RXBY5?X90]3R"^J6R@J-U_S2K!WROH?>H,'7>U$<=]##1%
-M&H34*?BR'3'F2C'@;#GM'_)<R0OK@@IZN#B-B0=CB$TKYJ<CX+R4G=$>F@U-
-M^A[JI10`V1\S_I"&(&+!<V]9QN$4KMGIHC-8);B'B_LH3PLSP;TL>LCD7\H(
-M0+YO1G4`:RI=[+_C3::UV1S,:AE7-J"`4GYJ<=<MA(^G&7HDNZ$O1D@2MT;E
-M10``?````'P````"````10``>$_Q``!`$0``P*@!`<"H`0(!]`'T`&0&250N
-M,*%FSMQ8.WAY[)_JAT,N("4(`````````%PJ``!`[@\Y%P[-;W/;K[G%<=QH
-MSL`K2BI/'C&S^5N"(%S&0&;3!QUSP>>D&"O)%I+VTR;2%2.6@5Y).TJG7[4T
-M2!*W1IA1``!L````;`````(```!%``!H3_(``$`1``#`J`$!P*@!`@'T`?0`
-M5`8Y5"XPH6;.W%@[>'GLG^J'0RX@)2``````````3````#"AG@4'R.1C8(J-
-M)JCPV)J+^NU.9SO,];<H']$PH?&>>$0M])]&:6^Z5]?!?4@2MT;G7P``;```
-M`&P````"````10``:$_S``!`$0``P*@!`<"H`0(!]`'T`%0&.50N,*%FSMQ8
-M.WAY[)_JAT,N("4(`````0```$PJ```PPW&15JAA1.J9J=01>^C*;/8SD'?B
-MEWJY<LPFH_?0D*?(?"J845`=[;>#*[E($K=&0VT``&P```!L`````@```$4`
-M`&A/]```0!$``,"H`0'`J`$"`?0!]`!4!CE4+C"A9L[<6#MX>>R?ZH=#+B`E
-M(`````$```!,````,(=J'KF*G?$LK21,E,0P]8GF<)H?UVAT!IRHX%#=JX\9
-MV,6@(VK.[,!8R=?O2!*W1K]H`0"8`0``F`$```(```!%``&43_8``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=ETG50%C;\9?H``````````"$@(@@````````!>"(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``]J=066IGW6-P
-M#?K53-:BW=,AHHC!OXRTM'[NH9#6-W!SSBRD*Z3@@/M6+2NNQP=[Z\RFBSO0
-M,]QXI&FBIOJ?>J!\6ZSIMM"*H@WF;,4:]0#-6+V70V7KDO*T\>WLXZ02WS`)
-MX,%,]3.QAAQV;&65UC:2P"Q@$K\39CNO/_+._S\I```DYC7WG!SO+4[LW0EF
-MF!V1LXR_8,I_/.Q8W>EKW6GQ!/(I```<``!`!!8\_4G412__#L.AQVBJ%;I;
-M+<[P````'```0`4,K;)=I;M/O\;Q;R[&F3!WQ';[-4@2MT:C>`$`7````%P`
-M```"````10``6$_W``!`$0``P*@!`<"H`0(!]`'T`$0&*=)U4!8V_&7Z````
-M```````I("(@`````````#P````@``!`!@````'1+D-?5CP7]`K\2^V,'NII
-MSN=:]$@2MT8?B0$`N`$``+@!```"````10`!M$_X``!`$0``P*@!`<"H`0(!
-M]`'T`:`'A=)U4!8V_&7Z```````````I("((`````````9@A```@``!`!@``
-M``'1+D-?5CP7]`K\2^V,'NIISN=:]"(``'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``]J=066IGW6-P#?K53-:BW=,AHHC!OXRTM'[NH9#6
-M-W!SSBRD*Z3@@/M6+2NNQP=[Z\RFBSO0,]QXI&FBIOJ?>J!\6ZSIMM"*H@WF
-M;,4:]0#-6+V70V7KDO*T\>WLXZ02WS`)X,%,]3.QAAQV;&65UC:2P"Q@$K\3
-M9CNO/_+._S\I```DYC7WG!SO+4[LW0EFF!V1LXR_8,I_/.Q8W>EKW6GQ!/(I
-M```<``!`!!8\_4G412__#L.AQVBJ%;I;+<[P````'```0`4,K;)=I;M/O\;Q
-M;R[&F3!WQ';[-4@2MT9TK0$`4`$``%`!```"````10`!3$_Y``!`$0``P*@!
-M`<"H`0(!]`'T`3@''=)U4!8V_&7Z5/;-:$@&3YDA("(@`````````3`B```P
-M````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H
-M``"(``(``%\I`4!M[>FW!;(S^H5(47'"-1Q;-@'DCH:F-Q5#QTYSO2A+*V40
-M>W5[\E=J3=DL8\3*]@]!+>^!5AZ"U!]BSUH"6;V:%D9VC-UYL:=<BARB=D_(
-MX-H_C1KZ,&U[_4&>[+/;/II?(I]_,$C`ECBXLYV;RJAS\K*JMNR(SN\VE3LZ
-M*0``)#1QL/KR=!V9+H:VWT1!9C[Y<G9GG75<PDI^3AC7Z=Y5*0``'```0`2Q
-M?$*<`;7)BA+[C:VK>H91'O"_I````!P``$`%$Z]_,HLL4%D5$EH3L.CZ9PTJ
-M9^I($K=&L]P!``P!```,`0```@```$4``0A/^@``0!$``,"H`0'`J`$"`?0!
-M]`#T!]G2=5`6-OQE^E3VS6A(!D^9+B`C"`````$```#L(P``T)=;W]IR6S-V
-MO@BFH(2QZ`T!8^]U#:.M5%@L;X;Q8/M&V08:?@?,H>N7IW_1NW[GL5=%1&G(
-M7`GC11`1^@Q3[>)4J7P/900(HRW@<C(]OB/#B-KA\6K`X^+/:QY89R.DPF^$
-MF3%Q?C32G(^&K<>OH"$P,5%`FX6G!T90X)^)6#.B4YT_UZ(.,UJR]%LP6M'B
-M)%^7H5-,:EJ`^AXKS_7D94]*#9"ADZ>D;>)<WFGRBDE'$7*Q8(<>:^Q8X^&@
-M,QZNII@R-+1$`"O*M\Q?74@2MT:E]0$`O````+P````"````10``N$_[``!`
-M$0``P*@!`<"H`0(!]`'T`*0&B=)U4!8V_&7Z5/;-:$@&3YDN(",@`````0``
-M`)PD``"`9G+!>Z5BT8712#OJ+P1:/[BC(]'5JE7E5*E:&R&0#1($T5,.[P?]
-M/N#TX?31D<!/NR3#\J[+[#.1K]X+QHX$;MSW]X!^6.:B-5&.X,;,_.Q<:K1;
-M=>!;J4WZ]8E+KOD1O8NXJ.,1/%H.&#FSH)W\LF04BWV]=AJ#;:+[$4@2MT;R
-M$P(`'`$``!P!```"````10`!&$_\``!`$0``P*@!`<"H`0(!]`'T`00'Z=)U
-M4!8V_&7Z5/;-:$@&3YDN("0(`````@```/PA``#@V3I^VWB9:@^F@*;?JOX`
-M64D'F&M$P)+3&^(>(KC;AZ]J*VJ.`G5"L.?'OC9@:,$V6OM^$G0]A0[H6JE_
-M!>GB:TCVI<&:T"R2MZD2B2,HQD\[(.QYN2G@Z5_2>BHHW"9F*#C.]/[2TXD'
-M'J34PG-904&A!]&G^X]9>O3^1?"C<NC4G9\+4=0SY9"43)KIMZ'0.:+*SV("
-M[KN=1T7F'L1KK]\(UQN#_DYZXS=;6_T#IC*0,/0'KWD]"6(YLAAT?A00-1'#
-M"B`&)>(:;<S7ZT?\)3^DPKQ>?N`0(@P);$@2MT:V&0(`_````/P````"````
-M10``^$_]``!`$0``P*@!`<"H`0(!]`'T`.0&R=)U4!8V_&7Z5/;-:$@&3YDN
-M("0(`````P```-PA``#`<CBE^6@_1A6;*%Z102[_"/<=AR0@46C^FK3/?\R@
-MG^%I,?,;/W)&*]AB<4+HSEQ*_'EYC\8DI%F9$$9@S/2[8!AWWDQLZ7NPSK*8
-M5SZ7>$HRAJN3"VX$_P/AB(O[UAO8]'SJ:'L^^)`V(YE_Q.RXLLHSPUG<ECFA
-M6:&/(V6LH!\\N6/6'_JVQQ7=>`DZ?RMHTA!6W*6XT6QXKB0[L>L6&XP,[EVA
-M>O<&]>C%FAY)SQ=Y/]8Q%0LX").UQ4]($K=&,BH"`&P```!L`````@```$4`
-M`&A/_@``0!$``,"H`0'`J`$"`?0!]`!4!CG2=5`6-OQE^E3VS6A(!D^9+B`D
-M(`````(```!,*0``,`QN!)_)O!:D8IX],_**ZP)0%SAKQ9\3B.%'Z^#FEFH/
-MR$<W_3@75*J*6W;Q2!*W1EQ&`@!L````;`````(```!%``!H3_\``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8YTG50%C;\9?I4]LUH2`9/F2X@)"`````#````3"D`
-M`##W>2J^:B-[!HI55"-CS>D2ARLCI;M<1D#JPKJN!=*0V(`F1`HFW,+7)',K
-M<D@2MT;?80(`/`$``#P!```"````10`!.%````!`$0``P*@!`<"H`0(!]`'T
-M`20'"=)U4!8V_&7Z5/;-:$@&3YDN("0(````!````1PA``$`?",3`3([)X:U
-MAP>+^6.,)J'X"YPC(!T`:=9V-Y.W#%R\'I;LNN6&H@5J+]:\WHN_$;@)S"RK
-M-3_N/AS!31)[6':P(*M#29)$FJ7M9<I69H>TZD>B0SOA-W73K>6Y347PQ5C3
-M/AQ=8#O%1U`N+W/*H,Q'LX>_1AYSOH/J!VM622FRU^*T.`YA[%J.#Q,5%V16
-M:=?RY(*E&@G@G(#W8K)-5GH[!_WM!Z%.7T8PQ2`TKXY?@'72%=D_2>5[.5'G
-MR!8GSHD'!(;1E@%W00QH,Z-Q5%-$.Q&CU)ZZ$O'+H05]_QW:"ADZD1XR/:!+
-M8'FUD"=]N_2!8/\83,*F7S#V2!*W1L-M`@`<`0``'`$```(```!%``$84`$`
-M`$`1``#`J`$!P*@!`@'T`?0!!`?ITG50%C;\9?I4]LUH2`9/F2X@)`@````%
-M````_"$``.`R5-;-5`*-+BL!`*:_"Y-"FP*..&E?K68)5'9,IL(LCX0Q")L$
-MW32VL0WS9S#SOGE3L(:/2A(KG'ED>#`.6`/<5/3L)KW>I"1=K3)NI1W-FTRC
-MW/(;.TCETF/RSKY3QE\.,,[Z!B1PQ2!=)OCRBT,?AG>S%P,$N?/1`Z2J$C'5
-M[\)>GV6=E5.3.-&A,:0^-4@>UVYUZ#,J#_=<6JS)9,DZ4#E8;<6RN4:FYOZY
-MU+1?VXT/1D=G)`AM]#M;N1+Y$2!6&(IOI.N.>XE:ZO3TZI*:+8:P.XM3>B:K
-MTZAT2!*W1C]]`@#L````[`````(```!%``#H4`(``$`1``#`J`$!P*@!`@'T
-M`?0`U`:YTG50%C;\9?I4]LUH2`9/F2X@)"`````$````S"$``+#<23\'%LYQ
-M*]ZL@W&OC'3"T<IC`).?);"TM)^R""QVK#EK-2S3V66^V_<\JO&@-$*SB^3K
-M(_OO2B;SNN\=FNQ$N?A7&")XY7/R-*60GN,[5$9\;'&(!`GA(XF"Q7#?9\'@
-M<(7BADPF+6(%<#L^!+[Y89B9!Z&BZ@97#T3L_@GMM[KFD!Z(=6EW>1UY6MJ]
-MC=2K@1(C$EQS$65_#&E]1\I;ME20>57/[VR_"P\K2!*W1M"?`@#L````[```
-M``(```!%``#H4`,``$`1``#`J`$!P*@!`@'T`?0`U`:YTG50%C;\9?I4]LUH
-M2`9/F2X@)"`````%````S"$``+!.0!;Q.A;A$FOLO.SR3G:T;S/0:_0WY5[;
-M:).[7P"O^^VD]E9K@;9IP+S"G5D1:ZUV=YGSZV#]`H1'I^6A;[M)$IBT=!7S
-M**VL^-?3=;>E7<P(]IS'5<\R7[?^."[L676O=6L.]C(7/:Q[N.9)F/0TIGEN
-MW5D_*>%4T-3]D;@4>^0L,>]&"5([OZF8$'B\X\,ZT08_S.343D(Y%UC%LM**
-MI@<ML'DO4"/!>7XB2!*W1D*\`@`\`0``/`$```(```!%``$X4`0``$`1``#`
-MJ`$!P*@!`@'T`?0!)`<)TG50%C;\9?I4]LUH2`9/F2X@)`@````&```!'"$`
-M`0`-.T.V'-Q3>6@?3502OJY)#J+<F-DRC*-[Z;&36W;'-M<"WG+W;KB,SE99
-MP7NJ!?[(6$&"E;E62+'WOL-+B_<H0[@BU+-8`K)E5YM%"4P)O\<)=>O/%U+'
-M9W7(EDOKM1/LQ?2L<11Z^&RHNJ[\K1=KC'"4/9X67`T8EG5'G)HR!@5KC@UK
-M*YJ`-^*H0J]DOS;7FDG`R.<RG^/XYX-B$^VH:U/%>,5-ETWB05K?.7;RA_%U
-M[_G6ONI25%"8=[T=*7X,BT_9)Y_;KC[7'^<FG=2`C'T9`]7=XI2<RM/KSZJ]
-M&FO:O.MU3PN&C7'^5`E>5]Y1$\K."R<I(@]XLJ9($K=&(,@"`!P!```<`0``
-M`@```$4``1A0!0``0!$``,"H`0'`J`$"`?0!]`$$!^G2=5`6-OQE^E3VS6A(
-M!D^9+B`D"`````<```#\(0``X"(D4(*V>D>2I%PK\IFLJI>[*YD]>PFDR-!$
-MDDI7Q3O=I55S`YP/N:*];#:!ZB3\(HWMGYI=CO6P.(U=/M:EV=KOP?'VI0TD
-M'SBX/I3H^K-;GN^\J+*.=19$_<2K]:#CN7N@4;%KL(OEYZXGC;-XK4CEW!/3
-MILDN'EOES^=;*^4BT:(NX2C=:6QQMX6D`-YQ@TV>K<`A`,"^["@N`9M:`&B*
-M*WN+^L2'*S/$ONTS;99*<'_6P)7]!S4T9W'<)K/Z6H7;(Y$YT@5I'#=S%D?=
-M-$`NU>I<G2CUCD.`:XU($K=&I]<"`.P```#L`````@```$4``.A0!@``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KG2=5`6-OQE^E3VS6A(!D^9+B`D(`````8```#,
-M(0``L,763*G<K3^A+BG/-]@#<-I)<6H^"\8<?G<CGC72(V-&Q8QA(ZD37+G>
-M)@*2G*HM./0-WI$_$X<X6]Y*J67-_76\'\QV+.=AYLNNLA+5*2]*[^YNAD*Z
-MNL`-72%D`@ZHWOT@.V8`F[/!B<97EAY#,V`QAL+Y#2GO<(QD'RK_ITL"599E
-M,MRN4VW.VARU]UU>6K184<^QMZB]0!Q,TX8'&;#0Q@%4'-^ZVT+T;01($K=&
-MF?L"`.P```#L`````@```$4``.A0!P``0!$``,"H`0'`J`$"`?0!]`#4!KG2
-M=5`6-OQE^E3VS6A(!D^9+B`D(`````<```#,(0``L-S=DM/R<YK<J8X]_S,P
-M#[OXI8:W5S3-VVQ-I$'`LWCXQ"3?A#O-Y;@6<\@VTEQ6CVREV^>H/*;F59EI
-M6F.AC)L:,?%HM')2CU>="B2&(=<OFDL12W3MU'&,+[EW/8G:6N<8]WC[<P&I
-M.^/O[S3ZN4(\Z7HWZ2_K76G=+"ZPJO$Q>`!SG3\?SWK6(?&Z;T=,D"S?>NG$
-M.IV';86E8ZZ&(]]`ZT7>>Q@G&X``9A!($K=&=B(#`(P!``",`0```@```$4`
-M`8A0"```0!$``,"H`0'`J`$"`?0!]`%T!UG2=5`6-OQE^E3VS6A(!D^9+B`D
-M"`````@```%L(0`!4,G>1O(8!/8)\0-V_9J15>C]5`/A*HM%1EL=$;!JJ,$8
-M-A#[J)`GLLYD@XEZ>8>HE!/!$^9LMZ+>"1PV3@JUS#NXO%7^X\VG)L?$@#J,
-M#!_BJ]4')RKW'FVD6B4T;?%7(QMF*3))I:6/=9#,,IX!9XHBZLJ[^2UI#SV&
-M`;(RBQ.W@G;%RZ9C92ZAP8U)&L;/+C\C0'_`2A)GY!8X,7O/?\(:Z^\!.[FV
-M.^_39"A\YM'WWE^5ZW8H,[_Y&A+FCGZMB\V;8:^`!!7N%BF'YYWO$=8FUX%Q
-MFEOT4N_4GTFJ/0/T7RMY,_^`L>^+&I[7B![P(RN`-:W.6UW;G77%8U'HZ7QO
-M"@8%9O(/`MO1'Q,GJ.>T?=8M;NT##1:W)DU!RI!9QV8'Y8`15+.05B0ZJGX<
-MR/^0PX%=Z1,!18($<2-;6K*/Z#S+`E*SWBP%\F6Q2!*W1B-7`P!<`0``7`$`
-M``(```!%``%84`D``$`1``#`J`$!P*@!`@'T`?0!1`<ITG50%C;\9?I4]LUH
-M2`9/F2X@)"`````(```!/"$``2!'.D>Y`J*IN]#W2-\-0B5!&246<]-<5%[T
-MT%ZXUH])]D0<VK]0Z1U<09;%%!A2SC[HI!"IHJXJT#JOK'^H*NRA]$V*+?@@
-M4KCIT4.MF+ZJAPEN]GD&]$U*!<D2.:H@CAE_N?UXCZE8G?[D0FVIGX]`S\VS
-M#>-%0;98B]V-MA2-;\,!:L:.6QYH4&<,CR"P-[0&L'H8_-40.-P>FY*JW3)7
-M"A5)$K[XM*D/YJ04+T>?@.MQ;D(+9VZ\U4R;])]G:S2Y(N_Q;RJ&,;4`V;"M
-M<A,`'5_0>*U%XA"!,S!Z^>R;-8(G!T5&2F=W<W)U3PM8!2U:J:(<`H:@P/3L
-MR$HD8S'M]FS@Q#DFPQ>S(6WAA[%5?\7D0(._4Y.M^TKEST@2MT;&?0,`?```
-M`'P````"````10``>%`,``!`$0``P*@!`<"H`0(!]`'T`&0&28%M,IKY+,24
-M5ZV:.@'96,4N("4(`````````%PJ``!`0[$;LEGW'%&<,RI33BS]4#WF=F(N
-M5GW.6K.?<"5>;LG&%$@.#VBIE57;01ROU0`R([9/,98I/(/)I\@F2!*W1E6)
-M`P!L````;`````(```!%``!H4`T``$`1``#`J`$!P*@!`@'T`?0`5`8Y@6TR
-MFODLQ)17K9HZ`=E8Q2X@)2``````````3````#"DB/I]\8NF%0SM="AA^%H<
-M*$M42$8CE&+RX+SPQ`(2K%TN/V;IEU/1:0C&K$@2MT;?EP,`;````&P````"
-M````10``:%`.``!`$0``P*@!`<"H`0(!]`'T`%0&.8%M,IKY+,245ZV:.@'9
-M6,4N("4(`````0```$PJ```PI$)XH-@QT,.3DJ@8U\W:A?Q`RB<[[T,KF+$X
-MP!P7UF93PUF,X$!L_!UH6%I($K=&"J4#`&P```!L`````@```$4``&A0#P``
-M0!$``,"H`0'`J`$"`?0!]`!4!CF!;3*:^2S$E%>MFCH!V5C%+B`E(`````$`
-M``!,````,+CPI3$;0:C@Y!M!$TJOKB::F.L1%'$LI['!Z!1H?U68[L@>/*3/
-M<HJ@6]@R2!*W1O*?!`"8`0``F`$```(```!%``&44!$``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E,B4B^QEVL:$``````````"$@(@@````````!>"(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``U3!=;G[E*RGX>28#PCAE
-MB=?#[B4&H@UZ/;UE:NY3UWCEP98R<6`M.\./\ACTHGCXMUF(L/9@;[(9'VJF
-MH,-PO?7%/F]5AO5(+NF3J*N=%*`POX2MRP<A_M8#K6.$:"-MP5]"O@;(=T^W
-M`,DT)7;16L5D8&\K8CPR`1"DV.8&LF0I```DIOHL;4UY%#+'UY*C]7S'LSF2
-MM5+X$%/H4.\NQQ."9H@I```<``!`!-J'-D(N3ZGQ:.3^4#&KMB-JR!B(````
-M'```0`7)()5SVM@,-3A8F6RIW*=G5Z+34D@2MT;>K@0`7````%P````"````
-M10``6%`2``!`$0``P*@!`<"H`0(!]`'T`$0&*3(E(OL9=K&A```````````I
-M("(@`````````#P````@``!`!@````%TW</P3-ND')*111/1,<>4'7'`H4@2
-MMT;&O@0`N`$``+@!```"````10`!M%`3``!`$0``P*@!`<"H`0(!]`'T`:`'
-MA3(E(OL9=K&A```````````I("((`````````9@A```@``!`!@````%TW</P
-M3-ND')*111/1,<>4'7'`H2(``'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``U3!=;G[E*RGX>28#PCAEB=?#[B4&H@UZ/;UE:NY3UWCEP98R
-M<6`M.\./\ACTHGCXMUF(L/9@;[(9'VJFH,-PO?7%/F]5AO5(+NF3J*N=%*`P
-MOX2MRP<A_M8#K6.$:"-MP5]"O@;(=T^W`,DT)7;16L5D8&\K8CPR`1"DV.8&
-MLF0I```DIOHL;4UY%#+'UY*C]7S'LSF2M5+X$%/H4.\NQQ."9H@I```<``!`
-M!-J'-D(N3ZGQ:.3^4#&KMB-JR!B(````'```0`7)()5SVM@,-3A8F6RIW*=G
-M5Z+34D@2MT9?Y`0`4`$``%`!```"````10`!3%`4``!`$0``P*@!`<"H`0(!
-M]`'T`3@''3(E(OL9=K&A<2HL7G6>*MPA("(@`````````3`B```P````+`$!
-M``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(`
-M`"G6-#)J%E3MA<VK]43^GH[OH(I+^]UC83F5H,9=K8V;S9MA#DX.O]./OGT0
-M?^4.R/.DND'0;`!SEUBT3'H8(1KC#AB`'<^+J$.];G#RY,0Q_==T0]E,,QX8
-M7R52@9HGZ3VR::.3%YJ>&\3`?[+<".X=3,8JZ*0)8V9]OQ)+$#NN*0``)&ZC
-MUH$L>58C\6<NZ875C2*6BLLANA1CF46S9JJ=B6`H*0``'```0`1TSM>0XV$^
-M%(VCKIO1(NO.@8R.BP```!P``$`%_8&4`3/^:=)GI04\2#38[)%O^-9($K=&
-M!A$%``P!```,`0```@```$4``0A0%0``0!$``,"H`0'`J`$"`?0!]`#T!]DR
-M)2+[&7:QH7$J+%YUGBK<+B`C"`````$```#L(P``T*]VWTW<YGWR8],=L4ZO
-M.\VMJ>Z(Q3C793?HBV:J/4)3[3K2XO/VVF[P:I_FBGN.C)9NKWMITB%X-D@8
-M:^;7I+&U`)0!2TEF(2?$F@)#)5!"@8Z4<TUC#-N#_BE\+C?UWT5H9T;R<FQ;
-M`.0\Z$39$:\"9]&Z6*H7XO`>?X1G$<5N>WU,^UCPH4P$"XJ)(U_T?LN!AF[:
-M.X<IZF5SW=Z^K*N?2/NL_QCO_G!(.D0)@+[,ZQF<V9&4#YQ#)I#LA2]1R&?=
-M9P*X&+=^4>[JN$@2MT;:*04`O````+P````"````10``N%`6``!`$0``P*@!
-M`<"H`0(!]`'T`*0&B3(E(OL9=K&A<2HL7G6>*MPN(",@`````0```)PD``"`
-MB=9[H=L]JF?`%@W]@\G7P+_E37("?@XH;J?$([1=/YH#A6CIT#7P^ZK:KJ6G
-M]4ZBYK0=/!C`*W_6M$""P#3LHV4@U+>-19W>S@5JN?P>FM:UE)=3<XE$$$G]
-M=K$VRU*\76B%7MB3>@GZ4MPZI]=N>1\%#*>*:3*K=POU7D@2MT8I204`'`$`
-M`!P!```"````10`!&%`7``!`$0``P*@!`<"H`0(!]`'T`00'Z3(E(OL9=K&A
-M<2HL7G6>*MPN("0(`````@```/PA``#@^0O@RCA.+?)K##,]"4OK;T=<3]P[
-MYWU/I]3D/AA/)8]M*3&+G9EZM7E0=\1'5)#@FQ,?3GB%A<(_8F:SF3QF8+N1
-M*:;J6:E/!\.!P.DIMR3Q,5RX]MC33UB((X6UHVG$"878@)8`QHWE_!.M$MFV
-M/4STE+4YCZZ2%#B;2Z`)DGC31M+&0.#]44BLF#3$AHXX9-F+;#5-]Z1F,_F4
-M)WIBO0=(SK2PJG#_D'57&K=A*T'D_8,=#*-LU2B$JU=$F8WO^]/E).*<\%Q9
-MOD)>KW-:(J!#7)=WT.E4EWBJ,$@2MT9T5`4`_````/P````"````10``^%`8
-M``!`$0``P*@!`<"H`0(!]`'T`.0&R3(E(OL9=K&A<2HL7G6>*MPN("0(````
-M`P```-PA``#`E1GYW1@&;AH,Q3NU*OW[=30)J/NW\1\Q8RTP@(BDP\<X`GO(
-M=P`9&XS3T+E8P+%6T`CL5)74"V=(+?VZE3KP8Z%I=*WM3:$'OLS?1G.9I]R.
-MA1`64`TK'9!.-YE"N^HA[*#1\N`CLQ+`OU]#[+)?Y#D<P&I^)GX#,>\]J0'2
-MR0)M\L.Z5(6X1%L&`%&S@:$.7(!XNB)AD-(1Z?!-_6NIW&C`FU@\Q9W%K/LW
-MB%R5J1_KL!6U@>"\K$#Y9XE($K=&'E\%`&P```!L`````@```$4``&A0&0``
-M0!$``,"H`0'`J`$"`?0!]`!4!CDR)2+[&7:QH7$J+%YUGBK<+B`D(`````(`
-M``!,*0``,,!"V=SA)CJ+DUL>?J&U`^,BI$#EL<%VT2*T478!$EK,<"Q,-:I+
-MYLLYY,?R2!*W1IUZ!0!L````;`````(```!%``!H4!H``$`1``#`J`$!P*@!
-M`@'T`?0`5`8Y,B4B^QEVL:%Q*BQ>=9XJW"X@)"`````#````3"D``#!\G6'A
-MK@@LR/UO3,&P(6G_!?_I=UP\IP75S4FCQ@N^VE(?6;OA3Y9:>]<8\D@2MT;E
-ME`4`/`$``#P!```"````10`!.%`;``!`$0``P*@!`<"H`0(!]`'T`20'"3(E
-M(OL9=K&A<2HL7G6>*MPN("0(````!````1PA``$`%ENM7#I'YX@@54_&Q=0X
-M)LZ14K*6P.R\SLWUZ]=,A%<A@3./5W8Z1\'CO\JL/5LGNARAX;X)Z!;?"<.*
-MFC!;P&@`3&\V+?6SO@FI(ZJQF_(0H[%G&8G!2[+)#H>PUY"MJA1`9A]79`3*
-M<7-02O[F#-P#\E'W4S)0JE\^+\TP>''#YX3+/]07A>T"Q/L?6MQ"H!;N*RV,
-M3CT=]PN-H;"D6UTQ,;AIH-G@SDQ3JQ^5'_,HW]Y4/EZ)I_NK%/?.DY3O@5FS
-M_9IN@%$2C1;YI>AUWV)B83-DM#2>E4#:.MBI__*9Y1F<!4[\_(,"ND\1`#63
-M,:%*WJFTPH2(52X82!*W1I&@!0`<`0``'`$```(```!%``$84!P``$`1``#`
-MJ`$!P*@!`@'T`?0!!`?I,B4B^QEVL:%Q*BQ>=9XJW"X@)`@````%````_"$`
-M`.#@&IY;DDFIM\(A^1?BG]E]2]'J4A#,2;&8L3KBI##%K=]O(OE2&!E(!/)O
-M2*51CG%,8$S]K63FW6):B+=X,:M+#+5+$_&U%7_Y6G8G@MN3'&#`:>N\_!9<
-MN7D)`+_>.I(M%/C+D;\.QV_44PWU-+1;A^>8*(A9R`>Z/ZTX\$9IDZT?3^-+
-M`_K)K67+&(LN9@^SYA]MK%3^0YD:ZZZ*1Q:(PJE6C\0YM(B-SX4]KOLRMODB
-M7$+X_I<'L?)VXO_*SLNP.#`]RCV+C*G$/`C-*G;D"+2J&XJW5Q?U25Y"2!*W
-M1OJP!0#L````[`````(```!%``#H4!T``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-M,B4B^QEVL:%Q*BQ>=9XJW"X@)"`````$````S"$``+`UV8T'(DCF$\YP+0*+
-M\PK'MH*EPW/`4O%'JE2@W0I:%G`V;/I";+Z#D5EHH3<%.R?1OG$A%LM2?-"6
-MIM&E6HCGQ4F599X1R6"U:+I`.HK0=_/5O'$F(JNKI$^IX@$4AS3S6-ARF.&[
-M.US'&U(_KIB2M3=U6;=AGT1LD6>]N3ZA<*'CRUF?B]?,AO$^OGT:F5[?W>8,
-M^[1F3HY&-#$12E*N5YW_W7)+DE-YSH.,2!*W1I?3!0#L````[`````(```!%
-M``#H4!X``$`1``#`J`$!P*@!`@'T`?0`U`:Y,B4B^QEVL:%Q*BQ>=9XJW"X@
-M)"`````%````S"$``+!AXLHH.KOXIK'VY31GH38-!?:A&/5'-$IA[ZLTZLY:
-MF`>YK)D/_:T-=9@EEH!B_\.B+/W;P<G/+Y6:%(,^YB&_H-JT;GVH_%:'&Z)]
-MZ/#/<L#^'_[=MA<&^%CY5TB"F^K.\VLY`2<H+IG?J'!:BQ_<#JLEL5R02!9:
-M/IV8#232J6IWL'='?(4G4@"MQ+U$!%6D^5(D9DY_P*:BH=O_",B#:JSV8LRF
-M%MS(5=<D2!*W1O_P!0`\`0``/`$```(```!%``$X4!\``$`1``#`J`$!P*@!
-M`@'T`?0!)`<),B4B^QEVL:%Q*BQ>=9XJW"X@)`@````&```!'"$``0!TW5,]
-M:TOH9JI01&BJZBZ<8WY*#&.';Y5A)%Y@@J03*TJWJ].A4*40YON@"+)3.!IM
-MSSZRW$PGZ&.##H0.&(3;/`<>Y^L?G[O=A04A5:W!&^1<)F"IA]J'0,_C^#2]
-M:3`!;#^@.6+<8ZI2"AS11P@#`$+LJ_3O/&/:+]CVUHY:X&ER0ES^./^R1=*\
-MN!G,?:9>#@C^A#QGC#?GI:K#RTZR/LCN\(V5+$PYL`]BYF$84PN$-^,`J`7X
-M"D(Y23YOF@531(]Y)^5M;5M+V=(&=[:.=/]\D'#^U.H^@3X1=I9(FIDYVNG5
-M`E(5.K17_\M'%4T`.0RA%J"*(>#,3]1($K=&$OT%`!P!```<`0```@```$4`
-M`1A0(```0!$``,"H`0'`J`$"`?0!]`$$!^DR)2+[&7:QH7$J+%YUGBK<+B`D
-M"`````<```#\(0``X$P$2HP;XP&MBI-IEZL0\,;H.74=4CI%>4N9)R0H9W3@
-MK:+M!&&R'>?,N*!-J@XRHZT`%P`MQ+9X&P&+VF7;!1Z`CRPV$Y49,B3&F6Q-
-MT_J+I[8S`J8S!.+)K(P2/.UF8RU^#80_X.'"3+'X\^0WRELPY+'?!7GMH?G`
-MY01#\=Q&+O$<%=EX/`<LHC^X2XT@GPZU-HS=*[T>3D1K5&2W+EV.#\*`P>'#
-M]).K:?:-4.(`L*[NDACW>*%A]_*B'21`M--A>-8MU*=V=,K4;J^@P\UV!@CK
-M#/KV(E32=15($K=&J0P&`.P```#L`````@```$4``.A0(0``0!$``,"H`0'`
-MJ`$"`?0!]`#4!KDR)2+[&7:QH7$J+%YUGBK<+B`D(`````8```#,(0``L(@Z
-M]"D^@&U@U%D'HU<[7AIO$/`2:_)`6RI)U_49D;Z`($Q"G\=X(.Z?'9,:DDV]
-M]H[TW-F<?YU([IEJ@52./NMXDELWY?5[&E@9C?Y'[2)\M+BI;#8!,.R3"XK_
-MTE]?J@2TU`\8X6\E,0,^AVY#$Y1I@/J@<];F(TMV7&2#B`U>#SUNL@K(J/3!
-M=$CVC)&YT>B96<E=A/=M4OQ0L'(;3*FXUP=_/HP)\P!U\.9($K=&Z"X&`.P`
-M``#L`````@```$4``.A0(@``0!$``,"H`0'`J`$"`?0!]`#4!KDR)2+[&7:Q
-MH7$J+%YUGBK<+B`D(`````<```#,(0``L"G5;5<HOSI-7J[>Z#2+P3KS;F]Q
-MU70D0ZEV[T$#%3-08A=LI/#N7']I*^$%I4T[22L>X\+2M6^C?3TB)76ZLH6T
-MI_\O9+"LW8/!&J=:_$9OM-O2?VZ\%/A#MXN0`V\K7@N-[NS7FN1<2%1N)]F$
-MA(#@.4"^[$R2XR2;'D#3YG(-'+P#V/]*())ZP/Q7_\,+EUX!/O(QWAIR_W*@
-MR>G0PY54.+0!>,J54<X[:XY($K=&S50&`(P!``",`0```@```$4``8A0(P``
-M0!$``,"H`0'`J`$"`?0!]`%T!UDR)2+[&7:QH7$J+%YUGBK<+B`D"`````@`
-M``%L(0`!4*%D+"I;K^S294JS&.B("FV,TR[O#3ODU\VR:SY.^S5(+[>[\Y0D
-MW*8EF;A?]A)-(\5RZ4:4$UW#A9]0"O)H,TFX1>LQ&,HJ;1<_89;O?9!ED!K]
-MCNW>&?KPKN-3Z=&W-_=A5.!/&>M\P6`P`-KJG%U:!]::IV]IE8P13%586XM7
-M?>\1_-JG.GC<?EQ[3HGR(CQAYVH\ZD<)W].K)&&%52TP`#.R%=*7&1K8U5V-
-M$8R]R$4F?!+I!M+[2JPVP4WJ9?FLGJ<<>BZ5]JFP(]:79=.)Q&3^E>`>Y5&.
-MW.DWPPIKS:J%D7:*30'/-U'(TCXX8G][74=ECNJ:*(G=N@__EQ%`7/AJ"J#U
-MAF/^26X1)='TO7GHPO#_OX'PK@)1;3NOR^$>!@K,0QUKR*RU3)&)'^;RJ(]A
-MQ7=%Q]C2K;&&C7#Q5"EP._H$F!$P!4%A2!*W1H>*!@!<`0``7`$```(```!%
-M``%84"0``$`1``#`J`$!P*@!`@'T`?0!1`<I,B4B^QEVL:%Q*BQ>=9XJW"X@
-M)"`````(```!/"$``2!+.2UC#V(G[PA%DQH<MO>EM"O5CVB59NBS(K.>HB?W
-M>WOVI7%;<=G]M<H$W9:&</RU)W-RGM[FLU$EQ.OW^(Z5_;DQR@>1Y-:`1C.`
-M/)U;B6/+ZW-)M?*Y_//@9D16G]]:IPZ<3%,!C]+B.Z.;GW8L)@AG8U"F1*TK
-MG(?JYI8[7A<;8-<8?V!ZMK6V\.!KE=EPCAJ,>U"?E#X&KAK5QL2,.@2*\+$&
-MMJEI(3_H6C1T:Y\0?@K+TZ-TLV^U'VP#$[Q0A=YA2/Y]^`FSLX;#S6LL!;*+
-M)TBHB[1#YGJ%^9D]K'IMD9:*-=Y-L),!\XD5U*BIMO<N316LSM`>#U5;RO[Z
-MAZG9(ZD>K]]E-\/7$TH:-/909@TL-"_^1.TPB$@2MT;*L08`?````'P````"
-M````10``>%`E``!`$0``P*@!`<"H`0(!]`'T`&0&230[^,YIR]4A1WJOP#SG
-MH7$N("4(`````````%PJ``!`S#`W80"4#NOVQ5^WKP@ST@NG)H*A,M=M;=K&
-MA;,,\2@%`259Q-/JU179!TB>HN_4]?KLDF(37Z]&"6R]2!*W1G>]!@!L````
-M;`````(```!%``!H4"8``$`1``#`J`$!P*@!`@'T`?0`5`8Y-#OXSFG+U2%'
-M>J_`/.>A<2X@)2``````````3````#"`D%L5J!;:=%G=LVJ&#//Z+])II@N$
-M5LRI;<0]?EJ+ZP%O09']15<+1)[D:$@2MT;NRP8`;````&P````"````10``
-M:%`G``!`$0``P*@!`<"H`0(!]`'T`%0&.30[^,YIR]4A1WJOP#SGH7$N("4(
-M`````0```$PJ```P92A!MK:YZU?8FI\TDFAMX,KCUT5VI0X'D5M'=\__A<+K
-M0.7V?N6$$-^4N[Q($K=&7=D&`&P```!L`````@```$4``&A0*```0!$``,"H
-M`0'`J`$"`?0!]`!4!CDT._C.:<O5(4=ZK\`\YZ%Q+B`E(`````$```!,````
-M,`11UNRF,N`&1,ZH+JVU@E+7S\STEO<'9&H']WB2V%A)12RH/-5QX;*@]\RX
-M2!*W1B73!P"8`0``F`$```(```!%``&44"L``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E)(V=@/)3+VX``````````"$@(@@````````!>"(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``XGY6OL>DA`.I`:&1:>J^/XC&\^Y7
-MF^*"OP`]-%2KD=/-J`,F\9F=+$*WU1MGW(N%?_C=/@3)"Z3#];FW]7S:LTHI
-M4PA%F`#U[`?^JHTR(+9Q<9)N,`#KB5;BE4<(EDNGFW"L*C7(+H?AD.1YGQX8
-MRK`=3[*[<+8YB!92WQU771\I```D-:U@($7_UB8JW[DCH*\F,Y1(-11XZ9LV
-MRO,&K<B',A<I```<``!`!"@(/-(KO=%!A+.;3;.OAV`A\6_*````'```0`7N
-M;MX&!\MGUI=L5X_L+C&4T;+%0$@2MT;CX0<`7````%P````"````10``6%`L
-M``!`$0``P*@!`<"H`0(!]`'T`$0&*22-G8#R4R]N```````````I("(@````
-M`````#P````@``!`!@````%?4#K^7/'CQPM\"%A]8M*6E;0L7$@2MT9J\0<`
-MN`$``+@!```"````10`!M%`M``!`$0``P*@!`<"H`0(!]`'T`:`'A22-G8#R
-M4R]N```````````I("((`````````9@A```@``!`!@````%?4#K^7/'CQPM\
-M"%A]8M*6E;0L7"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``XGY6OL>DA`.I`:&1:>J^/XC&\^Y7F^*"OP`]-%2KD=/-J`,F\9F=+$*W
-MU1MGW(N%?_C=/@3)"Z3#];FW]7S:LTHI4PA%F`#U[`?^JHTR(+9Q<9)N,`#K
-MB5;BE4<(EDNGFW"L*C7(+H?AD.1YGQX8RK`=3[*[<+8YB!92WQU771\I```D
-M-:U@($7_UB8JW[DCH*\F,Y1(-11XZ9LVRO,&K<B',A<I```<``!`!"@(/-(K
-MO=%!A+.;3;.OAV`A\6_*````'```0`7N;MX&!\MGUI=L5X_L+C&4T;+%0$@2
-MMT9*%0@`4`$``%`!```"````10`!3%`N``!`$0``P*@!`<"H`0(!]`'T`3@'
-M'22-G8#R4R]NS@XTHJW?1+$A("(@`````````3`B```P````+`$!``0#```,
-M`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``'\714XD
-MU@GZ?H(&UXQ!0!CF3:8\0F@J.^M:[8:A+;XWQ*\E8GC(JK"4`&[,T%-@#MK!
-MZOM9OEPKN7JGV5J.F<M7<%.PHHT!ZI%78-"<>,EN`H^0-%"^+1/.*.F+`+KL
-MR@(EGG?TXV5`DR<RB=M-+5^J@E?UH0FY1((V"6Q16"((*0``)/0LK(EI0BXD
-M/!K`4_BJ(*-\^S?K&NSR3LF:-"@DTF<+*0``'```0`3$[%'BZ^W8RL5/V!)]
-MW&+"AWCB3P```!P``$`%V6VX,0K35!1!+%G_^5\J/NPN1DQ($K=&44((``P!
-M```,`0```@```$4``0A0+P``0!$``,"H`0'`J`$"`?0!]`#T!]DDC9V`\E,O
-M;LX.-**MWT2Q+B`C"`````$```#L(P``T*52E-1_KY8SV\7YEVA=3?,Q5.XT
-M9FQ2C0?0"@#S-L!5I`(F%J^2I:\1Y,#*\Q]_-"0F7XZX6&;NV5+[7*"9JL!N
-MYNVOIK*FCD6[/P0+U1&/SN6K8\B;`PIZ]\O_3WG\T:_=-@FP&<?56BQ@HUL:
-M</IKW=NYFE]!.S%_'^0R2/"K\?0R1;WL>@TH@/&T)":Z$N7]MG%U:18,HMSS
-M9_-\AHJD7!F`?<RC]4K%AH!BU*SY2S_P;GSZ8`2B^'$3H`'<5P<*X"Q+&9\*
-M!Z=E1$@2MT907`@`O````+P````"````10``N%`P``!`$0``P*@!`<"H`0(!
-M]`'T`*0&B22-G8#R4R]NS@XTHJW?1+$N(",@`````0```)PD``"`4,+U[N!>
-M;L$J4X]->>A2$"<1`<R'SZ:_TOW"9^WWSS!ZX:_-HD?\=*?XI&(1CNI'HW3-
-M.QO'Z6U;$1*IFV9`'S.KL.V*Y92Y9ZQ9-YW`U=IJR1V5<?W44Q/'0W>\X!TL
-M]O8Z,8&SKJV?V1J`Y!Q*_,&J[H?JG*=1ISL%I4@2MT:=>@@`'`$``!P!```"
-M````10`!&%`Q``!`$0``P*@!`<"H`0(!]`'T`00'Z22-G8#R4R]NS@XTHJW?
-M1+$N("0(`````@```/PA``#@&^.4C?3TJK6)L>8*)1]GM?JUDJI3B=G2-_<X
-MOR+Z4M,!(1GGR-C&1:!UL6I>V)N9?`W5/M3ZO23$!+`!18B5%RP!Y'<9%0[4
-MM]=K.NXVAK6<>T&)W7(=U*UE`8JC7>3CIB#O9Y@R:5`\Y)UQ*3.EOCPW6'K!
-M8*UNY.QQE5V0+-2.?G&RF]L3_EB'6O^7U19[NX5C^=FY,ZP>>>UM"'G;*KU9
-M\#"QT:+C5!%U2H;\(`_L&DR:F/0?A\)KGB38U`>6*T*[H*NS71CYFEQWV$DN
-MV_@8#24B0A`Q[US$MD@2MT9-A@@`_````/P````"````10``^%`R``!`$0``
-MP*@!`<"H`0(!]`'T`.0&R22-G8#R4R]NS@XTHJW?1+$N("0(`````P```-PA
-M``#`(:='=4WF_=%:OQ:"$N72Z`^7VX?W0$5U-DQEVP`$@D>8E_:&\JB*"3H$
-M$%LA'1[4+<?"/S9MM!EWH6`SM`UD$@$"6_6([H4-,&1N#&679/YW`.N*K-JL
-MBY_SH@?K=\6H@J469J-L#CTJ=Y"9$N$6;MQ02!%Z_%TQH>M#&<0!G$7V:6:@
-M:D&%ZA8J'G27Y<2E6JY*PI'YEG]\\*1._CKB"7D)9A_0]1[27SO=&,5SW]"%
-M3_:"B==$-<CVD?%($K=&II`(`&P```!L`````@```$4``&A0,P``0!$``,"H
-M`0'`J`$"`?0!]`!4!CDDC9V`\E,O;LX.-**MWT2Q+B`D(`````(```!,*0``
-M,$H3<535ZD>T+:MEAF&*9+MRC[-[T(BB#X\0*M?UM1S^!+[`)CS*T>O4/ROT
-M2!*W1H2K"`!L````;`````(```!%``!H4#0``$`1``#`J`$!P*@!`@'T`?0`
-M5`8Y)(V=@/)3+V[.#C2BK=]$L2X@)"`````#````3"D``##^0UL>F_!+7[54
-M@YI&P.>69)V"XI%L$2314Y=I!DH*W2Z]Z&`E%15BZ,=M4D@2MT:MQ@@`/`$`
-M`#P!```"````10`!.%`U``!`$0``P*@!`<"H`0(!]`'T`20'"22-G8#R4R]N
-MS@XTHJW?1+$N("0(````!````1PA``$`Q.5!-8#>S#`UAGNLO4Z"30M2B4\?
-M,G84&"89<D'<E6M5B*`I]H4[,YO\O>SIQQL$O<B3.*`/M<0N.K.%%&_JL!8N
-ML%/#K=MWM>KX)B1XZ@A5LME&A^_+U8/![CE2I>SNFMMSE@VG[*!E=B;CG[>E
-M(2I+57"(_+D,OZ0Q?0CEEI"B(9$Z[&\DJWT?%F#1]#RD2I=>Z[;3MUF'/`3,
-MTDA'30"/M;<OL2^L7+@84PW8ST`;+-6++^2N=RPRFE%35O];7R$55L)J)%7I
-M8=1$F5]Z/<F_(?-;)B6<=,B?TKU^6B^)>@$*J>ED'D=!G)UO5C"W52<HO[%Z
-M>@)"%OVG2!*W1N'2"``<`0``'`$```(```!%``$84#8``$`1``#`J`$!P*@!
-M`@'T`?0!!`?I)(V=@/)3+V[.#C2BK=]$L2X@)`@````%````_"$``.!#,[N:
-M2/H!%!VKI"*-^M_<U/FS%]Q>@/W*B[FDLALR*)3V"`]ZL^&-EF[8YCL*.RCI
-M/=C4)HB9%8P$YBC(%^NV<5=M7-6U#P!9Z_-Q"#`(?+=\/V8')B$38%\9[.2]
-MSE/H<?R4(HE?EQ,IYYA.I)`ZT%;&K:Y6.WHNMEX/HN6:5G^;JS1"*;K)M0DV
-MYR!WUP>!B[2`0"JCXVB]P^>`&YDX:YESQ[>R@MJR)N(][()Y@"2GWTJ+A9@.
-M9>WS&^NGBZ9=K(C5-W$PB]D,9245/2]TP=,UDM*YI@IE!D]C2!*W1NGA"`#L
-M````[`````(```!%``#H4#<``$`1``#`J`$!P*@!`@'T`?0`U`:Y)(V=@/)3
-M+V[.#C2BK=]$L2X@)"`````$````S"$``+#UF;Z[*NG%,6\WKB'G2XQASSH4
-M5")_`/]!+,S=$!*FKS(,/%C$/-R3.H,WF>H[3C(6GM!9DQCP!-Y(WTHK4,^[
-M(U%!/A?DG*K586B+;T$0+RP<W2;GH+34@9HBUUH?!+GX1POOTAU_')HNA`XP
-M^&'A\(60NQE52%FP&:8;;:PC!C3HH]MR&>7JOEN#]`>QS@Z%0'N*<#D/TYH-
-MJ<Q']R/TFTD9193_;66+;]E:2!*W1G`$"0#L````[`````(```!%``#H4#@`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:Y)(V=@/)3+V[.#C2BK=]$L2X@)"`````%
-M````S"$``+`'+`7V<R[4HP7F_%69&6Z:$UDG;5P=EN0"[>:&!SE%4?\YTO;(
-M+ME$E]E"`5@K`;>)6;15NO8.4/4B_R.^W;^`O7S@P>LP*CTBH[U_K"27*KL!
-M*QPRE?UL[C4.`M'1?V?2I]Y-PYEN[,SJW'U=U)RRT/MN(.?/*?\=I<#,X<9&
-M.1%6G#RE%O2"Z/[[:HR"F'*5<"='182,J7TN^+"2)/-'I"86C=;/U'?C>-OV
-M2!*W1A8A"0`\`0``/`$```(```!%``$X4#D``$`1``#`J`$!P*@!`@'T`?0!
-M)`<))(V=@/)3+V[.#C2BK=]$L2X@)`@````&```!'"$``0#-T3UPH9)_QH&T
-M;(S&JCUSJRU1,X&\9NYUOXF@H+I.5/)^12&P6KK,1+IGH)/6^(W.382<#6D3
-M?W!29!Z/]A!A"*6`T+D,V1TAO1ZD;5G`;)9CZ'/358X\8?;&\0$WKIZ2."Y?
-M,V%<>J&.[W*_'J"&$LJ0E^>19.#(FDVBQT\Y;\_\Z40F28CI'+NG,-4!I573
-M.X`Z8U/?,,+6+3V"")@"4A>Z!M$`:.#GV49!?2'=71B!^!;UEH5$C1G!G#F=
-M"9;FTL1$TCO<SQ5CE[;W%E`Z?O$GUP.(?>3%&__Z<9FY[PH.^3C[S$T%"!E1
-M0M+.#/"[I#K1"L^^HS$%VH1($K=&\"P)`!P!```<`0```@```$4``1A0.@``
-M0!$``,"H`0'`J`$"`?0!]`$$!^DDC9V`\E,O;LX.-**MWT2Q+B`D"`````<`
-M``#\(0``X+%*1YKF((31L3<3+"="+N/@%J5_0)MQZ.,9L69^W^HW1]L$H3!/
-M,>$454NZNK_YYD#7U/MTN\ZT9.6/C_A/RHA&XJ(,+SA?5['H)",D'$LFG;/F
-M6!X#C*P=Q:Z^!W67D5%$.G9)V7FG1`XR,8K,^S!_P$O%$Z\9;:F^-E@!GL4R
-MPFW5W\6(-%Z[5CTOOG`_4`_HF$NOZ2$#*Y>D;\]$+B%11OVLO2A-WI4TTMP>
-MW][VPB4]L,;]DWV/2_BCIT5E*S51@-U=C21LKR3_WX5\FDV>EU/WF'^I^W%7
-MR+E($K=&$#P)`.P```#L`````@```$4``.A0.P``0!$``,"H`0'`J`$"`?0!
-M]`#4!KDDC9V`\E,O;LX.-**MWT2Q+B`D(`````8```#,(0``L.G!?O3Y%/],
-MW]&J*5+?4I-W]0[C#VT+?./'JN]+`3Y5<MR-\5<L>(#;A/D)?F/5?LU*7RDQ
-MMN$TB]QZN'VE[MMIE3ORPF-U'*6+E9/E/A4(WG[:<85""!1"+?YLMT/C3_A&
-MYLT5!81JR;!==_DZ3Q(LO,_)CS7^T'BP7D3A,:(;,%41M/9Z!\)B/LZ/O7&#
-MI_IO27]<B`0HGXL+UO-EOTMY%%?;/XVVI!7@PBM($K=&JU\)`.P```#L````
-M`@```$4``.A0/```0!$``,"H`0'`J`$"`?0!]`#4!KDDC9V`\E,O;LX.-**M
-MWT2Q+B`D(`````<```#,(0``L(B5QBNG$_T'GXFN./J6$:CSV*8C7%8%:.%6
-MKO`)^X+\O\/AM3\`1H,K,N)SY%N/O*X$&FTHS.0PAE_FJ.-,XHOG*=#'FC=M
-MEB:>VGKD%_91A>:__/\_2>4V2X=;Y*5:TSN#<<-!WW,#BF!Z0"\@U8YO`-79
-M^==IPDLLCT6@=J/"M`\OC50![V+:O`&IO.G2@`''D0",V/-EQ.LIR!68"0"<
-MA++=?P97',^!>QA($K=&.H4)`(P!``",`0```@```$4``8A0/0``0!$``,"H
-M`0'`J`$"`?0!]`%T!UDDC9V`\E,O;LX.-**MWT2Q+B`D"`````@```%L(0`!
-M4%E"V$!)2ET8?DU"9!:/]M[9R!SO6U?UG?A?$?9+\P'67AYR`>Z8]MYG8S6@
-MWX4$">%!F>6]V7<_7?&;^I)ZN$N>VJ&?$5\GPE-!@V2&!)KS_*%]I^;[5F9U
-MC<R\VZM6!N-:1L;5(6ZU]Q:W4(63DT1X-B__Y>7(8@1S0VGI[Y-V&8&[%AJ9
-MJ9@OWA;F6\3@YKV[S2+,@+J?AU!T2-'^=$34WRFTVTJ19O1N9H")4P5O0*S`
-MD2>G<6'*!`>BZ:.OJBGN,QX<(O"4N[E.RV:;.4")D\,&G_Z<L8%XPCY&VE;*
-MTD^_76%J"B#1?ZQ\[AF-=^.1`E\KJK8X_"D*#VNRH#BJ)$".U\'U;1U<B#>M
-MZ],49?L=PK$:R"O4/.?^F#AB;WUL5K`OV<R/=V6ZLKED\=@'</5PTI(7)8D9
-M]P36%2.QU80#B89>8P4M;:4?2!*W1@&Z"0!<`0``7`$```(```!%``%84#X`
-M`$`1``#`J`$!P*@!`@'T`?0!1`<I)(V=@/)3+V[.#C2BK=]$L2X@)"`````(
-M```!/"$``2`17:S^D@08LM-[D$^DW4::F&+"]5$ZG%%?3N05`]H!,"=('/0]
-M;]!]'GE.OD?4@7XD$E/9P#DK\?OL45$'T2^1V0,A?(HWQ`6O4!C/QS`!_``?
-M]:H@;-<!,G*H(8:^?\^UT:ZZ#/>D62V`$X6@&`[=X]1PF,[-@:=C&6T#GY[I
-M4IM%.1$-515$*$3['#YP_D0X9\1'Q="8SD=%T#S#P^\^N.5JB\;]02-/!7F3
-MMC`?DG3X'0_7F.#_#DQK9HG_LSD%`7KD:VT`WEVT?AC2$M[(HDX;JG.=65FY
-M<8BS&M3VQ'H6^<D<F8+V%5`PGETJA15L105<J41+K%U\B_0_N3YI`>WC&K>H
-M3=74DU3WN6I/R(1496PNP:=Z^O5O<D@2MT:BX`D`?````'P````"````10``
-M>%`_``!`$0``P*@!`<"H`0(!]`'T`&0&2>E>MJ;[T+W(O+N:K,-IMT`N("4(
-M`````````%PJ``!`DSY"6ABS!S\*;?I9[Y=ZC$,$84??2#"YW/&)VO7^AR\/
-MD%6?:^M]=C1":..`WTH!)L&'!N&;7GEUSMH@2!*W1@/L"0!L````;`````(`
-M``!%``!H4$```$`1``#`J`$!P*@!`@'T`?0`5`8YZ5ZVIOO0O<B\NYJLPVFW
-M0"X@)2``````````3````##.AOI?YR-,VQQ.-8<RW4<Y_)=*695@\F4%!F>$
-MK,NRC3V([IV../PY<-6Y&$@2MT:1^@D`;````&P````"````10``:%!!``!`
-M$0``P*@!`<"H`0(!]`'T`%0&.>E>MJ;[T+W(O+N:K,-IMT`N("4(`````0``
-M`$PJ```P]5[+_,RSLZ-@/,%9MGA&#W>DO/%O>J$KM3S3IKUH6]L'Q,;:ZZ<M
-MTZHX7^E($K=&\P<*`&P```!L`````@```$4``&A00@``0!$``,"H`0'`J`$"
-M`?0!]`!4!CGI7K:F^]"]R+R[FJS#:;=`+B`E(`````$```!,````,`$Q\$I-
-M*4:ET*X0>W,FDF16P:5+(>2])5!`$AJ>6097&2P[PR5V':]=*6O_2!*W1A8$
-M"P"8`0``F`$```(```!%``&44$,``$`1``#`J`$!P*@!`@'T`?0!@`=EJ_":
-M#2C@5O@``````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``?(-)7"*+:PE&B1ZH_$G!76ZNMNEL!/SB`*Z,
-MI__XS,H_&-?AP-,MC,.H4:T`"&&3Z?>LKE5/X?'51)H`=#L<^B7`:Q3GC&NG
-M4\-&'G%UI3!3&S6_S"H=3YU@RFI^N!G.97ZPF*A^M!8QKAGG6L]M3T7F*@MQ
-M=GF<;]Z)0YE[T@LI```D[79M104W\AF"^P/7TKI(DP\6#AB%"9#A#W<OS8$T
-M,=HI```<``!`!,\0=&#9U.@)I[,8N+,^=6_8-CI_````'```0`6+*>O//YI)
-MQH]_->(++7!2*P9UB$@2MT;@$@L`7````%P````"````10``6%!$``!`$0``
-MP*@!`<"H`0(!]`'T`$0&*:OPF@THX%;X```````````I("(@`````````#P`
-M```@``!`!@````&*.=&A=PQV)_P^$N)?O:5]W$YN"$@2MT9:(@L`N`$``+@!
-M```"````10`!M%!%``!`$0``P*@!`<"H`0(!]`'T`:`'A:OPF@THX%;X````
-M```````I("((`````````9@A```@``!`!@````&*.=&A=PQV)_P^$N)?O:5]
-MW$YN""(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``?(-)
-M7"*+:PE&B1ZH_$G!76ZNMNEL!/SB`*Z,I__XS,H_&-?AP-,MC,.H4:T`"&&3
-MZ?>LKE5/X?'51)H`=#L<^B7`:Q3GC&NG4\-&'G%UI3!3&S6_S"H=3YU@RFI^
-MN!G.97ZPF*A^M!8QKAGG6L]M3T7F*@MQ=GF<;]Z)0YE[T@LI```D[79M104W
-M\AF"^P/7TKI(DP\6#AB%"9#A#W<OS8$T,=HI```<``!`!,\0=&#9U.@)I[,8
-MN+,^=6_8-CI_````'```0`6+*>O//YI)QH]_->(++7!2*P9UB$@2MT;T10L`
-M4`$``%`!```"````10`!3%!&``!`$0``P*@!`<"H`0(!]`'T`3@'':OPF@TH
-MX%;X7:A_^&F5IGHA("(@`````````3`B```P````+`$!``0#```,`0``#(`.
-M`(`#```(`@```@,```@#```"````"`0```(H``"(``(``$:I@2^1"W0/S)C9
-M*ZK0XHD\(VO('[Q+WYO1P@#X!_57L2M8B91*<S60^PU/=5"]8HY>+L2@6*>D
-MC=&D4@]CNWQ_*C&+>*E7SHC1@^_"#\@:!4(7DJ&(.??3_95@26-ZNJ+E+L+:
-MS2Z,MR(:9\69":&&?$X"T6(\TK(^@A0C\!:%*0``)##@QT>0R;DTD+G*R_.6
-M\!WQPK=H`S>&N=]!TU*3>-HD*0``'```0`2,+PM[P\.LU:4DKX!L."<QE&6"
-M@````!P``$`%65QSS)3D5;1^M<]&[\<_P*TE3VE($K=&RW(+``P!```,`0``
-M`@```$4``0A01P``0!$``,"H`0'`J`$"`?0!]`#T!]FK\)H-*.!6^%VH?_AI
-ME:9Z+B`C"`````$```#L(P``T.P,?C[*X[#[24SWI'-B0O50F*'&Z^V=6=5D
-MF/%\+#<#]%N>O#RIU\5NFX$PA7"9C_;DQ@8=S'X[ORW<]U`<V>L@[S6B<YR!
-M5'`[H2R=^4K#]Z)PD%AN,"(H+.`U.L(%G="@#!ZFV!M>SO'?@D[<2+B`O3'$
-MWA$_FA>6_]]VP4`C7(]U.BKN1$";A0L]HYT&O67/A[B!L/)V#G-^VDSA*?>A
-MP#1<<),S^@:-*];0R.2DCY6&F>+DL)B[X?C*"2./=8]YL<W[*SW/Z`S59D@2
-MMT86C`L`O````+P````"````10``N%!(``!`$0``P*@!`<"H`0(!]`'T`*0&
-MB:OPF@THX%;X7:A_^&F5IGHN(",@`````0```)PD``"`Y+;KWS2_@`-9!Y[+
-M^B5SB0!A:FYRHO/9GR`P)+UG_E%++K?E0)\7`.DT9U07Z'DW"G"B/->*S:/Z
-MSSS]:Z]@);<<KY@H\V+M:H&7,0,2[&`:<**UFD),"D?D<_R)F3PCH__;.V;T
-M/P\[+FN:LESG>],>F6HV$4Z\2D#P"$@2MT9CJPL`'`$``!P!```"````10`!
-M&%!)``!`$0``P*@!`<"H`0(!]`'T`00'Z:OPF@THX%;X7:A_^&F5IGHN("0(
-M`````@```/PA``#@&[E=#^$*PBGOJ\R+,IF*;'7/LS%N2RA(@7BK0$0HHT"P
-M;.'O7@*Y$$UY2[]Z_,'0<DFH'GACQ'I'T<_3;2S]K(]N+_+[9MX6=[Y.=XI0
-M2(--J>&[(*>82E?,]I.K83Z3US"NNZRC9K=QG,=W1G%LP5$=3_4A4Q<S_",+
-MB7'V%4US90);V(JZY.1!J3:KT7)XM2'<JS*O?8ER&7;=G#B$ER6C5`O4R^Z7
-M2V1H'N9/J$PZDJU`H[05+#Z9@ESZ`:UD?+J(]C.PD&-<L^;>J`Q`8/+;@K#1
-MM*>BC)K7_$@2MT:3M@L`_````/P````"````10``^%!*``!`$0``P*@!`<"H
-M`0(!]`'T`.0&R:OPF@THX%;X7:A_^&F5IGHN("0(`````P```-PA``#`"&SU
-MYAX^/7]8Y8V9#Q<'TNN,Z0_$LD'9*^?JDY&RS9]LOV76PWBO%8P61"8+9_3.
-M-9;FY1+P_T7W(M9,9TCTA)$XGMT4ABL.]66IZ<M&-HII7]2+#Z']=D(_=<P#
-MLV)/<\&'FC9\U5M4O5`SX<?%U_L'%LYDC&7V,E]&%&9;;7LX>Y5W`+]]Q3Q$
-M'C;KJL9][5UI>8`9Q(YB_4:@*+?KGBP/WH2*)#]770YOD#:`U31CA%CLK"QH
-M(9"T('Y($K=&5L$+`&P```!L`````@```$4``&A02P``0!$``,"H`0'`J`$"
-M`?0!]`!4!CFK\)H-*.!6^%VH?_AIE:9Z+B`D(`````(```!,*0``,+YP8-[,
-MOY1A1P0L:I?\^]J0.Y<^YE]%2G]91>;.9*6?-I?5?K9)Y<N/9IFV2!*W1BO<
-M"P!L````;`````(```!%``!H4$P``$`1``#`J`$!P*@!`@'T`?0`5`8YJ_":
-M#2C@5OA=J'_X:96F>BX@)"`````#````3"D``#`2M.ROR992YMO-K+O>R7:U
-M_!>_&%NSBLLB6JEVK>]HZ61&;;BI%3V3:Y1R5D@2MT9?]@L`/`$``#P!```"
-M````10`!.%!-``!`$0``P*@!`<"H`0(!]`'T`20'":OPF@THX%;X7:A_^&F5
-MIGHN("0(````!````1PA``$`@Q6AQST$"Z?!.*DT:2AZ,US0`?JHA?L+@>J_
-MIMPXOJ6LY+&N=93>P'V($GJ`EKX1)&4;R,_FQB.'/'4P9H$8.)/RNK<.KU.(
-MJ]?F-&I0I:6S5Q%&W0L$^7UF=:?T3?YGC!"O]:]]G9U]`F$1QN4J*W>I'WKF
-MN9P')S+C6)T.&"MO9K9CCQ+^R,G^R%5='S7>T<'S?A%<DSI_RQK(YR[9DSTH
-MT5!/(FJ7`HX/OE.+O\B&>FG['I4D=H]QD7+W,QP^\V5+%N.614>SS_7#X,Y/
-MU53S_)PE#MX5O\;R6WB*NPXMAK9<%^BJ3YGXA5C!RLD;JC^HB+(17,!48$LV
-M2!*W1G0-#``<`0``'`$```(```!%``$84$X``$`1``#`J`$!P*@!`@'T`?0!
-M!`?IJ_":#2C@5OA=J'_X:96F>BX@)`@````%````_"$``.`R0(UP\A@Q*@-R
-MQ.O3QFY"[%3.W9][66]7\48M@J;)E&L'(K#&S9G;,T*X0509T^I;?@A^WM[O
-MAZ,5<27LU$PPJ&V9OVI]O\GA(?SJ..4!`5K"P.P[J=MLDGKA9+5(0Z1Y)\OV
-M1,7FKFD,=_AB]],I$3D]+)7078^,<'A`KVZA:KEX1J$1L;5<)@6.P%\@<`M6
-M-!W5;MMN1[MO0\?1PK/MBF=7([&]/(Z^8]FA<"KOKZ5<:%*DW6'U9F<=_$D!
-M[N-_$]$<:4HT+]0/E.Q4^2)AJ\+G>15LS.S55/?C2!*W1N40#`#L````[```
-M``(```!%``#H4$\``$`1``#`J`$!P*@!`@'T`?0`U`:YJ_":#2C@5OA=J'_X
-M:96F>BX@)"`````$````S"$``+!\%9.&"]2]'"LR%HWV4.'UM9L:U@5U!0HA
-M*WEOOSK6#=VI:#4`T.B^O.>;;I&2G`\U-[2H6D<3T&LM6%-$`DC972SH+ZRU
-M"]29G'_VZ&TYM/,4EF/EM,"07VL*(Y;I@L0L/DCL#OXHCNXYD`TALR\84$4&
-M1W;VL)<2\7)'?7C!TIG5R6!/`D&![P'-R6EPFT3:-[MH']$I77%1JM4!-!S`
-MQ8/^FZVIB';U_^M^2!*W1A0T#`#L````[`````(```!%``#H4%```$`1``#`
-MJ`$!P*@!`@'T`?0`U`:YJ_":#2C@5OA=J'_X:96F>BX@)"`````%````S"$`
-M`+`"OLE9(WT?U6ZR43MLM%+=!88)F;N:B.+Y(NC.!&AU1@Q4T1YO24HO3H*_
-M>*8[BH(RGD5)N9#"^2GB1D0.HI#BM-M3@AA6M!AAX692\.YM7UM3IE`A[VC#
-MQMQ*E5_P$/>;EXG`/+:L2IF'M(D?AMFS3XMIZ3.];+G6.S6C:73TAC?B\0?^
-M%,_\JR-5"`1RLEVM*_JJH'AK*#P_1CXN#3`ZJ;F-7/+5'PI*UGC^2!*W1L91
-M#``\`0``/`$```(```!%``$X4%$``$`1``#`J`$!P*@!`@'T`?0!)`<)J_":
-M#2C@5OA=J'_X:96F>BX@)`@````&```!'"$``0"'H3,%YM;%P'"A9MTZD>4R
-MIN]M7/2XP&6%;;4G8XK:@Z_RGW(I65.,^LA*>WT)I2$Q+<4U-)^Q1N5\0SP]
-M'K['_T".#];I@T[O^6.3$X=[[Q!1GDX@I]KQ"LM2?RD!?JAIU>R`?\>!<MG'
-M%MDTZJ)9],.=#&78'TR%</[M7&,$N"3^\*I&O,L0X:13IWINYH^I*ER!6?T$
-M(,K&`3&$(#W7Q?*YSL?0"_(V-AV&\_HS(B;,ZLARXQD@6L_E^7=;EGV!Q6<"
-M^]@_C],GC-F,D5">JS37[IUO(V7D[#1.."D)@W,G@I,>S9!<)CU6#WXJR%7E
-MLD>7#Q0?!;O<#KY($K=&?UT,`!P!```<`0```@```$4``1A04@``0!$``,"H
-M`0'`J`$"`?0!]`$$!^FK\)H-*.!6^%VH?_AIE:9Z+B`D"`````<```#\(0``
-MX!K1ZLUTQBC`>BF92$4'0K0P!I:KVAW4P45!(>$`#0>DR=Q;59E<SU[="#BY
-MP6)6IYB,M1(W487RY3JFR+&OCW8/N$$74@^MFX_AL7!+B">=LO.W''`;*VI@
-M]9R_#FF5=,-<5/+D7!OW4M$/P9!73X$-\]&?N-U?,^5QR,4S@DF??GG&>*7]
-MQA"`!(VCU+@.OOW02,"#N1Z98H%E^]HU;C38J\F(#L]++S.:_I$2*)W/<CA%
-M&,(-#7@FT>T>H-[P7FC+G5.X9.A)-&G9FLCK7:`_\7J+MYMZ=4:9O=!($K=&
-M[6P,`.P```#L`````@```$4``.A04P``0!$``,"H`0'`J`$"`?0!]`#4!KFK
-M\)H-*.!6^%VH?_AIE:9Z+B`D(`````8```#,(0``L)+=%<BWZ?*D^:8TF^[-
-MZY`")<:2EL0_**OZZON69$#\^'BJE53?+^W/B)SV<Q(;ES`2M*%-R8W;0FLT
-MF,&:W#-EDQ+&'%Y,N\LO9,F<L;_J$MF>V5$G*ZC3U*-Y?T"T%HY8\CK,;*1$
-M5\>YC-`@VDKMZ^:D2LG;RY5-Q,%\_G%C;29O-Z2FAS&;>7[HSRWCP4S/I!L,
-M!6`*+J".K4$8GN(8G1&0ZU`?(T*?(R9($K=&/8\,`.P```#L`````@```$4`
-M`.A05```0!$``,"H`0'`J`$"`?0!]`#4!KFK\)H-*.!6^%VH?_AIE:9Z+B`D
-M(`````<```#,(0``L&<%4)UW/;E/7_*J!Q'Q9;TG&7H@0M.+^LQH*:"Y9&/E
-M<Q>9;+)QI..1)B..#Z[LY<-ZSNS"]+YE^XL?FD-W)IH?D;BD`],*<6SES3EA
-MX;F.<.%3:[BK'66#N]+8Q*41C/-AGI1)FHR0U+/Z87MMF.+6:%.@?77N@8/+
-M?U4;%*A:CR$,%;N3><XO<$E=('@\26>*S!$O<J!3R.2>VVA2F#/!OWPIB/1"
-MC$%H2II($K=&Q+0,`(P!``",`0```@```$4``8A050``0!$``,"H`0'`J`$"
-M`?0!]`%T!UFK\)H-*.!6^%VH?_AIE:9Z+B`D"`````@```%L(0`!4-'9*#,>
-M5P<[OVH42H,T.0UZS9:WIBUW>P#!BR53?=PBWQG-[:(PI"8"-J*OCINEH+H7
-MEZC2\_#;;Y"@G`J#V/Q6SC.-I1[)MK8CF?6^V:GXJ;_B8RSVRC9)6K..>X6D
-M`__M^[KZ8@$V.Q6N_9"8(D%W&OLS/4--"$@J]'+L;BN(2JB#0?E#@<V%P3]>
-MCAY7,EC+*LO-35L29+^.5<Z9D8_P->PGMIX8O35Q>M?6;P@`SKC>6\'B">2X
-M:S`+Y3JM;.")/I[12U?`H+^48E:+B"\_8;!%+5:@/&]MZ.;.'I,-W@RO$O%Y
-ME96PLY$HH\E2A7@RW^0V%)AK)RD7'])A:4Y7QE4Z1?IUEW7)!$*FEP!![BU*
-MM)$?A!:=<C$.HUSRF(IO3*W4-61^`2KMN1U29M]H15=4(@,RPKKJKEW[/@-/
-MVB9]]7YJ,C?O`S>@2!*W1ECI#`!<`0``7`$```(```!%``%84%8``$`1``#`
-MJ`$!P*@!`@'T`?0!1`<IJ_":#2C@5OA=J'_X:96F>BX@)"`````(```!/"$`
-M`2`"L9&7OVK6'VWD'.+!06JSNH=93USO-<+K#(\1KB82==]"N2X<NK`J#AI#
-M'VS_U)Y?3>&.'B@X=&="6=>Y8,#!_'"DF52@K<=SABYYP'3>]?D>CTDZX'%\
-MZJ7!@5?']8;Z^&Z-T%AN6U%MA##'\P-F`)V_[Z_"Q.#^9Q8+*$67%YB.VI1Q
-MTX.Z74R`W:@D:H\CUWNLZ9<(_ZCG[%7V`Y:?YCQ365@0?FK#AO+2L%;#'M%M
-M.,VBI(;JX0O$[(Q5+^.BKS3*6A/7.U(?%7H%^?QR!#Z[FX/M"FN)2S&I&!Z@
-MS@N";&`!"NMADK.KZ`;U3:+3@-?>.E5M=Q[(E]6_R!]A(SLF`2.N;RN8]0@_
-MQ\"85]8D>A3H/XH\;(2@(4@2MT9E$`T`?````'P````"````10``>%!7``!`
-M$0``P*@!`<"H`0(!]`'T`&0&29T,%+?'_93P!V7XNIU:L.8N("4(````````
-M`%PJ``!`)`IILZ[(C+6G'5J2^$M4QTT.AX1S<>'-82>DS1B@T"<L_UQ7:1!K
-M%%1/S@YH^VSN/J?GJNCFEPNA.ZG02!*W1G(;#0!L````;`````(```!%``!H
-M4%@``$`1``#`J`$!P*@!`@'T`?0`5`8YG0P4M\?]E/`'9?BZG5JPYBX@)2``
-M````````3````#!\02WYE\0.3QJ;MB*SGAH3DB56H-4K;XUAL4E\$BVF0',9
-M(.-!L]'2!%2)/D@2MT8D*@T`;````&P````"````10``:%!9``!`$0``P*@!
-M`<"H`0(!]`'T`%0&.9T,%+?'_93P!V7XNIU:L.8N("4(`````0```$PJ```P
-MF<98A_[NK:.YV2V<`R+6YI(@JB^_;4(QE:\/V_V-DA7;`)X$`K2$.3I_%Q-(
-M$K=&<3@-`&P```!L`````@```$4``&A06@``0!$``,"H`0'`J`$"`?0!]`!4
-M!CF=#!2WQ_V4\`=E^+J=6K#F+B`E(`````$```!,````,)Y/OC'CV#@_%VI?
-M)&[5#'\:IJG!Z]5X0AO05R/H>R`!P@E_#UY#1?_)S\$%2!*W1H@S#@"8`0``
-MF`$```(```!%``&44%L``$`1``#`J`$!P*@!`@'T`?0!@`=E1S7>%+UIUG(`
-M`````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``K@>LB2!JQW@G7X:DQFE)B<0W=Q*P4^0ID*[96X4_M6O[
-M:(*MB)@/K@YU'X%(VWFJRHSN$6Y4B.;F)%LXR5HE=0(<$CO_E(/?D\.V#-2U
-M&I6S,&P:M8[O-,;D)OY.@X/#+B\'YLYB!<8-MYP"$%#G(X'ZP6==_L=@\S=P
-M51('F*@I```DF1,[:O?[F^$HA-Y[V15T.'1?<8`AL`D"W:-9[@1%BG`I```<
-M``!`!.GD!K2:>:TD,A2'3C/J'CN>]Q7M````'```0`6",D_=$N!4W'\9*#"S
-MX[(5`?M]84@2MT8G0@X`7````%P````"````10``6%!<``!`$0``P*@!`<"H
-M`0(!]`'T`$0&*4<UWA2]:=9R```````````I("(@`````````#P````@``!`
-M!@````%XO,O@`OE7S"&$PW\?_<I:I,X=H$@2MT:$4@X`N`$``+@!```"````
-M10`!M%!=``!`$0``P*@!`<"H`0(!]`'T`:`'A4<UWA2]:=9R```````````I
-M("((`````````9@A```@``!`!@````%XO,O@`OE7S"&$PW\?_<I:I,X=H"(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``K@>LB2!JQW@G
-M7X:DQFE)B<0W=Q*P4^0ID*[96X4_M6O[:(*MB)@/K@YU'X%(VWFJRHSN$6Y4
-MB.;F)%LXR5HE=0(<$CO_E(/?D\.V#-2U&I6S,&P:M8[O-,;D)OY.@X/#+B\'
-MYLYB!<8-MYP"$%#G(X'ZP6==_L=@\S=P51('F*@I```DF1,[:O?[F^$HA-Y[
-MV15T.'1?<8`AL`D"W:-9[@1%BG`I```<``!`!.GD!K2:>:TD,A2'3C/J'CN>
-M]Q7M````'```0`6",D_=$N!4W'\9*#"SX[(5`?M]84@2MT:0=@X`4`$``%`!
-M```"````10`!3%!>``!`$0``P*@!`<"H`0(!]`'T`3@''4<UWA2]:=9R9I0H
-M0=4OH^(A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(
-M`@```@,```@#```"````"`0```(H``"(``(```^Y8NQ495!8TPUK5I#8H2_:
-MY<^-5C9.P-2^/^^DYLDTJ%W_CL\J4I#2,R'>&C0UA8FC8'H-V]0N:`&09EZ5
-MBD\#])$`JN9C!U`8X-F3"&64GC6%U:[.M5_4!Y8/-_(P#(K]/6&^86R;%=2W
-MTWM7]%Z*Q$R8E@^@M&+3](PI!<-W*0``)"E6R;4D!::0"DUBJ2!"[.3$40FO
-M$HX21^0H4IK$C4I[*0``'```0`1N:5:LL==?Q_Z]9>NBJMRQ$(E9&P```!P`
-M`$`%D_E4NZ6X&3)<8W\:)=BCLX9]Y?I($K=&]Z(.``P!```,`0```@```$4`
-M`0A07P``0!$``,"H`0'`J`$"`?0!]`#T!]E'-=X4O6G6<F:4*$'5+Z/B+B`C
-M"`````$```#L(P``T-=9+/)K2H&Q4,],7V6;'8:&'E8X8C6_71U84AHYIS3I
-M7'U!YBKEYA6,@LEDD'@Y0B)0B,L62S5")D*4FC3=MY5J@.I]W*IAL@M2U]3J
-MF/]C<%/#TW`/K:C-6#-S25X)A!)ZD9@CJ-&W-,2LEI57MP`\"VR"6_H/"<WS
-MRHLU.,'UF/S(L2P=<U`>G'G4@"43K,)T<BVRNK1(!:OHEX$<>*03TC/"PILI
-MM6,UEL0@]4E8Y$]A<P.D4%@;TM\*X8"%ZQ,[*988]4:2@P;;OT@2MT9FNPX`
-MO````+P````"````10``N%!@``!`$0``P*@!`<"H`0(!]`'T`*0&B4<UWA2]
-M:=9R9I0H0=4OH^(N(",@`````0```)PD``"`)Z/6$A#7N1'IML[B7/&![_Z.
-M,_@\<A3!#T_\1U&\.9.-NT4+5;@S=RO(X:]HW4*<?LQJEO'(VIEDZWZ;4(B0
-MD\Y7]BC^X^*L<1::E6;I`\U+5<GF7XW4Y2YQ-<1`?Q2`O9*],2R1\Q^$%%SL
-M4Z'HC7([(C=)TW90)".N%D@2MT:(V0X`'`$``!P!```"````10`!&%!A``!`
-M$0``P*@!`<"H`0(!]`'T`00'Z4<UWA2]:=9R9I0H0=4OH^(N("0(`````@``
-M`/PA``#@N6Z]=[A3SS>B\1^=5<@$)C&16`:H:$[;R52""UY]2DN&(MW60I.>
-MRT4O=_88C/[GC9],@D:/B=H5(**6F!RZL6W_'"X<N@-PTQN^:92[;1@$310-
-M9ELCU(0`AYEJ'R&%4[!.<B,Z2K5`1:,$L_&'96D_8M2G2SDZ3+&?3'B+%8IC
-M66=?3$"L?8MJ04#5\6A*_CU9R9H./Z0\QB=$AW3X-X.Y@X.)^Z`-OD^%2?C:
-MV4I9D"#=B>()!,[A]_'\N[R-RKU(/]HNW2^>5NM,<NZ"OH!_LS5`-"IBQ!)@
-MNT@2MT8FY0X`_````/P````"````10``^%!B``!`$0``P*@!`<"H`0(!]`'T
-M`.0&R4<UWA2]:=9R9I0H0=4OH^(N("0(`````P```-PA``#`,L3WSL("*%.'
-M7=TO?!N]I!O/#QX,V7"]+^X70QBVY9)GKOUIMY\(A%]TD8=28;=U`5$7<'U1
-M;DN/>S\:EA04`M,/\0]<C>[?0&BJZQQ_Z<_7Y_CD3F!^M'5W>6\>NEU4>LZ2
-MVO+O20<JK[[DX`H"4U\A]Y8^&TQA0"C@G>6Z^/;LO&2O8!Z/\/*+,Q7B>#*"
-MI0"K34VN-'["_B;]!Z/2.S1'%L7IX`/T7Q<E+;>@8O]E\1T%[P<I>\>6!EA(
-M$K=&,_$.`&P```!L`````@```$4``&A08P``0!$``,"H`0'`J`$"`?0!]`!4
-M!CE'-=X4O6G6<F:4*$'5+Z/B+B`D(`````(```!,*0``,-NMOW$''O"C.7_3
-MP4`8F[84"6E<M'*T^\M>U_6@VR&;8HX%8XFPY%CE*K%^2!*W1CL,#P!L````
-M;`````(```!%``!H4&0``$`1``#`J`$!P*@!`@'T`?0`5`8Y1S7>%+UIUG)F
-ME"A!U2^CXBX@)"`````#````3"D``#!^GZ)KSB'8A[%"KAC576//9!=#;DI6
-M%KA\=/.Z^B]Z,4I94J9ANK4J755_64@2MT;A)P\`/`$``#P!```"````10`!
-M.%!E``!`$0``P*@!`<"H`0(!]`'T`20'"4<UWA2]:=9R9I0H0=4OH^(N("0(
-M````!````1PA``$`'^8X[EK]D0<#[H$\+R]8Z'0)M@-$XZ?OS!K,UUE'M<7B
-MS=$*^UUY/,$PER"\;I6F)OF@EXSD)T6QBR8VP)-0N[Y*BK$8^XQA)KX!)+^*
-M\RUH,TD=IS`0I.C2IM?1S[Y[XL/-_2+?1I>5\4W\D]":VR`O4.LFR0'T&/Y'
-M`]\^2;>%9_HVRJB;TB@Q'*NVC]^%_FV$I\7`_'S(@!5&[8_6F^.\$IB;BVL,
-MBU1B/9MV+W.&%1;ZBJ0,(K*1#*X'#J:ZIU_]PA+KP7[KL'9O]Q0'"&K="E-F
-M_*5:MR\'G<A:8S-YX=ST&>E%".OYR^FV:W5SL=N:.<3P')%E\&VO2!*W1I(S
-M#P`<`0``'`$```(```!%``$84&8``$`1``#`J`$!P*@!`@'T`?0!!`?I1S7>
-M%+UIUG)FE"A!U2^CXBX@)`@````%````_"$``.#W!AN&VW!;N`KS]87P*'1^
-MDW(<O%9C(8CSE@0O,UV&OU+A4SP0QX4>'A>/MYV<VU\I@,:+9V++\;165^&(
-MS2F6SPGO'I*5=0S=U`A!\'>9;MVJ''V*1F@1I@'MJ)PPE+]+S5#I#6<V,43+
-MSC18/?Z*9U0`(;8XA%S<;%IOVC)*#G&^CL_UW'1A3L\3/F3$/IYWW@:-:$.Z
-M'63ERDE>2^5_)LPUWSX._J[#\D=MK[:6PK)-XG$9$@$7`EH=ID56?#%;HMM4
-M.`!5ES.FYP!W=>UZ?'/^ZY),T9:)($V)21*W1C,"``#L````[`````(```!%
-M``#H4&<``$`1``#`J`$!P*@!`@'T`?0`U`:Y1S7>%+UIUG)FE"A!U2^CXBX@
-M)"`````$````S"$``+"D^HD4-O-0%URDXD/PZJ^LWUL;",KM'L[/<9/9L?PN
-MW-\XH;.B,[U5$/*A<K`:[VMA;38G;\`;!B`24.NLN>,SWT\U_%Z5E;E*'VDS
-MSRY\L8*,39VQ*YQ_ZZDG>PTGWJN5H3*E-X&JE9TZ($U$<I4\-+^^I^D^B0R?
-M.80F*N>0B+XF+^V/OG\3:'^%)Y%0+=(W%I3-9`()7OC.F\J95VT?^*Q<`2)/
-M../;7%_,21*W1B\D``#L````[`````(```!%``#H4&@``$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y1S7>%+UIUG)FE"A!U2^CXBX@)"`````%````S"$``+#4KI]1
-MQ\(I/M:OTH@7WMWP5"GDC+G)-UNT?")!R)8M'L"B6W%/93>SW6).8B:K5^_4
-M]80!/UITQ$$]&<T9<A>&J,5@"3__J\[@TML(.E=/#A=<VQZ#),9U0<C4L;M[
-MYO!/VE?;)SNL4IK]$UY^MHM_S(-V*PF@7?]P/U17Z?54*LTV8\5+![`%"2K!
-M06HUH,!0*TA?NV#6C\A!4O#4"K,IX@X]ZJ;WU]$4T"=D21*W1J!````\`0``
-M/`$```(```!%``$X4&D``$`1``#`J`$!P*@!`@'T`?0!)`<)1S7>%+UIUG)F
-ME"A!U2^CXBX@)`@````&```!'"$``0!7M;S*TYBRO5$N0,,`6TDR.G'4(HE*
-M(*@(BS(QM5#A#;ZWF1FB$B3W""1",<PLW=\X"XT"/=X@D"\Z63H?994>QRWN
-M:]^Z%FM.KN\-X=`6L`VPAE<):HZT;J_XB]`$P/*5'F$";I"B+;C\)`^D5!B=
-MA/@-:%TD!Z5]@I@L,+&P2T?-,9:WFW39&X3N:'5WZ&??7!@Y,*BX<:ZF/$.?
-M*9[T@3*N\MS66?X4W@H"TX$>CDL"M!#V\+2K?&Z`]U<@.]@'X<2.?X.;Y'->
-MILB?%:`B2LST('7SVZJM6P1]`A[;G1Q;<D&\1[7H8[J9URMGZTHJO+AS@K&2
-M`2/DZ@9)$K=&]DL``!P!```<`0```@```$4``1A0:@``0!$``,"H`0'`J`$"
-M`?0!]`$$!^E'-=X4O6G6<F:4*$'5+Z/B+B`D"`````<```#\(0``X-0_TP[,
-MHZDZ:.>L:,K+IH4<25R,U\,R<C+Z='/NAP.5"(%0K)%QGGKUZ0,T*'I>1A\W
-M$23KL8FW^];-NAI%U*U;/$\(QGY)]2\]BZ;I26(:='TV[D6+VNO8B[DH%6#B
-M'7VQ%W(K".DHU\?43#JD<!0KSMWKIJ5V5`^;FH@D2[@X</VU4T/<Y4>]ZCZ_
-MF=NG%:0@!Y+M<AB)]FS2F2F,=[TS(IPRQDD'>MK3WMUZ^S&/L-PDJ:O[ZB3]
-M$_L7AIA]8C"B@S.'2@4%E>MOK)5K^-SRY"ZP9GG)Z/&,86A)$K=&65P``.P`
-M``#L`````@```$4``.A0:P``0!$``,"H`0'`J`$"`?0!]`#4!KE'-=X4O6G6
-M<F:4*$'5+Z/B+B`D(`````8```#,(0``L'B=J2-2K>B>V[?V2(U$@>1?C=DW
-M>0\BM>D?&TN9'U@27>'5TN.PIXBRE4J3$!QB%`DA_@2U2-KXFZ#[A\?\<S?@
-MF]S=!)+TMX^/>#>[YR`U!'>9D&BBV0=X9:A:V]>;C2O[$`0MIW8.!L4B!13V
-MF!`!.+0LWNM6FU5NG^K(4;@3;7-2,!>UI0.9[UY-.E"L2R,E'E,+*]3B$EC,
-MU]_Q7#Q]*T??SM&<9#8[J)=)$K=&6G\``.P```#L`````@```$4``.A0;```
-M0!$``,"H`0'`J`$"`?0!]`#4!KE'-=X4O6G6<F:4*$'5+Z/B+B`D(`````<`
-M``#,(0``L$U=$[R+)5E3G@%#I#A/(KCCESXI)YRS"EZO['K`Z.Y@4W+!Q32V
-MP;HQ.RK"70R;5V_#F&C233HQ4+W.>`W/]HC^[#%T_6I$97\GVRF\I`IH"!"=
-MJ>!#(>?-T@C;8$/0E3B.>U"=Q-`L5$8+#.!?J`I;BQ";QL5VM!?RQWX2<NHC
-MF32'QDW+=,`KT8A(^8&+&EA]-Z\9UA];)Z33Y:.<+(BS_5UBTN8,!YA1/IU)
-M$K=&ZZ0``(P!``",`0```@```$4``8A0;0``0!$``,"H`0'`J`$"`?0!]`%T
-M!UE'-=X4O6G6<F:4*$'5+Z/B+B`D"`````@```%L(0`!4)Q#.A;,CU-/1RH^
-M/^=>6&3>OQ#\T&8&PP@+U9N76'@*HL*](LI*UVO*A&A(,)8PZ`]\5T5U@VOY
-M^H8GF,?5M#XTROH!DT)C6QAQ(FMD%SHV?-`7"(:3X5CW;16"97`Y163M/"O\
-M3<&&JS4]%":W5*X.@;2Z25%T#)#?T&]Y[XTB$D72+DE@BG$@$5JV_HOP!>B]
-M0N\=C0>:=RA`>8_AN'4C7";??HXY.(SN>-+\O),J@^AQM!QJ@<ZC5^?%GPC0
-MJNY2(V>/OX4RSL6A*F0B-2B"N==?6ZPIGB$1[8JK>;G%S\G"TW`KUJ^^RJ%5
-M"3/`B-T>X`4^'.G`&YJAWZ#P30M,70?W+-*OXOBT=F99&+CDOPB;1_]%GV`'
-MT[>>#$OA3X^-IX@<D_'Z!ZA:%WUT%]05*'UP`WN)S&<M;1"-MIH08O$!BO,J
-MX`6,"19021*W1C/9``!<`0``7`$```(```!%``%84&X``$`1``#`J`$!P*@!
-M`@'T`?0!1`<I1S7>%+UIUG)FE"A!U2^CXBX@)"`````(```!/"$``2!I^YO=
-MDYS7?#R^_3X<$,:V$!"=43ZVCYSG&P^#7``;GS/,W*IW8?`5<;0VP/:..H>S
-M%%)T'\!C#7/6@0K+K>!<:7W>0@H[3N=[U,68^1W:D=W>5YD*^A^FK&E`M0]6
-M,K`Z!0C:-<C64T&#K`[XH`W!:M/QMO?GZ::YSW#T$65R6EY!,CES2W,5W`.W
-MMHT'0&#(6'P=P@3\3AY3*'`PQ8_DWMJ?@J1]?*/"CZ^$Z8X&:G$D?*EEI[6%
-MW+A="/)ER?+#09=3:!.&(K%,!E.VO;`@=9'9!#ZTDLF75V`3_KBB=9I1184M
-M":EYF\:.2*A;%A6US;V_DKJ<LWYP(+7&'9+5=OEOW^K<RW=QGZP(>J1XPF-@
-M*)O#LZ\N[Z>,VDD2MT:C_P``?````'P````"````10``>%!O``!`$0``P*@!
-M`<"H`0(!]`'T`&0&2?1AM#3L=3KZ.9E%7;QC/<LN("4(`````````%PJ``!`
-M=W36-]:]23Z.RBTJ:I3-3-`Q]61<6[S"K5ZNN_=(*Z=+#3D'^BDQ,)1S@8$S
-MMV@^4(,)*TWF(>!+@(?A21*W1A<+`0!L````;`````(```!%``!H4'```$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y]&&T-.QU.OHYF45=O&,]RRX@)2``````````
-M3````#`A,E.*,]Q&L)\#RG(QQCKGEA??-#KPJCJ-FA3M'.A9U!^R7GJ;7>\E
-MS7HN`DD2MT9I&0$`;````&P````"````10``:%!Q``!`$0``P*@!`<"H`0(!
-M]`'T`%0&.?1AM#3L=3KZ.9E%7;QC/<LN("4(`````0```$PJ```P/6T*4C`]
-MH$FD1"R4VL%C6TG$V[9?V,HF`S9.>^F4KXBBK3MZ963JL5CYT@5)$K=&728!
-M`&P```!L`````@```$4``&A0<@``0!$``,"H`0'`J`$"`?0!]`!4!CGT8;0T
-M['4Z^CF915V\8SW++B`E(`````$```!,````,'UAY94$YF*M.)MQ&!\2@8=Y
-MPJ,$!5,UY8ZD6U9+#;[24=J<T7S4N699G#YI21*W1D(B`@"8`0``F`$```(`
-M``!%``&44',``$`1``#`J`$!P*@!`@'T`?0!@`=ELL'4T)D46M$`````````
-M`"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``]YF>//X9E,[\UU67P^K@*M<&_G%U02V?)*\1%L018%4M^W[0-JUD
-MD<V#7`-'[*MQM`/SVK:>*=`(D))N^0]AQD'`P?S:5`R&8)1)5[[W#J(T]D3=
-M$B0OAW.G1<=U)XWB&S/-RSE;,BD*`HDJJC>"5;5+^^SVEK_O](B;#K:8).0I
-M```D%_W\#+5(<-L9Z[(.N[TM?6J^ZN#X?3:PEYUQ6?G0J)HI```<``!`!)SR
-M<H&Y5\*-MP5[X3H%7LRM8P9;````'```0`4")`7-)TZ'7X<#E<\Q10'WP:!Q
-METD2MT8),@(`7````%P````"````10``6%!T``!`$0``P*@!`<"H`0(!]`'T
-M`$0&*;+!U-"9%%K1```````````I("(@`````````#P````@``!`!@````%L
-M\G8I"V(T6G7>?T$?83%":7`]NDD2MT:@00(`N`$``+@!```"````10`!M%!U
-M``!`$0``P*@!`<"H`0(!]`'T`:`'A;+!U-"9%%K1```````````I("((````
-M`````9@A```@``!`!@````%L\G8I"V(T6G7>?T$?83%":7`]NB(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``]YF>//X9E,[\UU67P^K@
-M*M<&_G%U02V?)*\1%L018%4M^W[0-JUDD<V#7`-'[*MQM`/SVK:>*=`(D))N
-M^0]AQD'`P?S:5`R&8)1)5[[W#J(T]D3=$B0OAW.G1<=U)XWB&S/-RSE;,BD*
-M`HDJJC>"5;5+^^SVEK_O](B;#K:8).0I```D%_W\#+5(<-L9Z[(.N[TM?6J^
-MZN#X?3:PEYUQ6?G0J)HI```<``!`!)SR<H&Y5\*-MP5[X3H%7LRM8P9;````
-M'```0`4")`7-)TZ'7X<#E<\Q10'WP:!QETD2MT9&90(`4`$``%`!```"````
-M10`!3%!V``!`$0``P*@!`<"H`0(!]`'T`3@'';+!U-"9%%K197]\VRIG#,<A
-M("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,`
-M``@#```"````"`0```(H``"(``(``'VM:Y$6_;`\V#$5<:O'55%]#`I>+R.A
-M-PVA!V\NQNK6JGTBHNHJ`8MZ9Q[^B1D#J2;E\2TW"C37S;</D2H!3(`$@D#<
-M[-^FO9%NJ5JDT:X%T:]KN_F_F[DF%2EO?-_M1)$"8-B#[L+FMK^M'.`0%8U8
-MW!-$L^RG)3ULVPQ;ZCM,*0``)'&.IA?;E:(CF+S?[4:%%^;R[4(+"G7FON:]
-MC1$"%+4Y*0``'```0`18<];DHKV,]79CWR;[P8D6^V*"#P```!P``$`%F@G'
-M!O*!@X!*'+R<A.Q*>%5.P)!)$K=&"I("``P!```,`0```@```$4``0A0=P``
-M0!$``,"H`0'`J`$"`?0!]`#T!]FRP=30F11:T65_?-LJ9PS'+B`C"`````$`
-M``#L(P``T,T_8`0@)L,>C9'Q/_F#_N:/M`$D(60,C#<2O&*]5]:X@*>,3^EZ
-M)21/V$C"SLV)AH@K=KI#<$0Y76UCS._.$%?)6<!EZ0=5KJS<L&HXD&/S.,P2
-MB[E4Y;^,ETOT!$VAL8D>H#8O:I(JV?'8U("]8<1HH3DGSIXOY3!^E5GU<B\%
-M@&N<,RTD05R[>9+7\E^-K35@](4[C-HY08_'%E<+U6AS#!1F9/[E9MTPP/\>
-M^Y9Q+A^;!-$"]+9RD[Z%.),>Q%Y[UK8D#_W:3#TG5$D2MT:5J@(`O````+P`
-M```"````10``N%!X``!`$0``P*@!`<"H`0(!]`'T`*0&B;+!U-"9%%K197]\
-MVRIG#,<N(",@`````0```)PD``"`N@(%;?/-7FYB8/F=I\)G\L;1S!=OEG\<
-M?)M&H9$5QR@O2YP%QZ`M&3)EPB39F\B)L:V#4^E8-RK2H8P0<I5_-+>%J"@Z
-M9VQB+B1R0BL'V[$'T,XU?.G5R/8VRE;6P^'=]5TYXYLS`/-PQ.W<*"03SC'9
-M]E`;7#&P_TD6:TD2MT:_R0(`'`$``!P!```"````10`!&%!Y``!`$0``P*@!
-M`<"H`0(!]`'T`00'Z;+!U-"9%%K197]\VRIG#,<N("0(`````@```/PA``#@
-M*`L'R_I-P238O/)G#H8)!S?>2Y]LF!L1C7Q<)X>CZA[;B1(9*"!,Y/V[AA#=
-MBM:5"-1J<5:AE/([HG+,HY*Q6YE/E]>HTM>^41@R,9Y)O(WV7*O>'-W@.R'Y
-M<Z<P[;O6GF:2:[?UN%;Z5_?Y#&1YNS/9)U4^,<H6TPL&,#]&61N32TRG@[RO
-MF*#8EC1V+M'3ZW;LJ3#=9?/=9F,M./'1EM,3D4<"EC=Y!LL83I#W0;DL!OJ%
-MW*#IK7&'ZLZ?D])0#3<HDS"9\T)Z9-%\6^%D;D-ACMK!KBBJHKHH\4D2MT:R
-MU`(`_````/P````"````10``^%!Z``!`$0``P*@!`<"H`0(!]`'T`.0&R;+!
-MU-"9%%K197]\VRIG#,<N("0(`````P```-PA``#`',S6`DXCXX-!!I<(XFC0
-MP`NIC3Q`]B\,^.U`LJR6W0Z4+#\^Q8QC!"JE4MA1Y0XX9]BS%,?HNU%B*E.6
-MGW;XI!"B:G:33*J$HR'+4P&I^U9SM0AZY.2<#B8DQZ2((?:\2[5`V6;6T%T8
-M/3QJ]92*EA7*"*0/D_PH]41#B"MK4-;"?5J'Q*\1>U(R2GEL+!E]''_5E.KQ
-M&H37%QF8UD7A:CD]IF`OVD%5#=X?PG@E+=.F5>T`"X9E2'U1[J=)$K=&E=\"
-M`&P```!L`````@```$4``&A0>P``0!$``,"H`0'`J`$"`?0!]`!4!CFRP=30
-MF11:T65_?-LJ9PS'+B`D(`````(```!,*0``,(8CNO?2K'?M-<6J.BTU;B7Y
-M=$".I_LI5K6)D*+!0&\9S@6+9F7I<*0)XXC`21*W1I+[`@!L````;`````(`
-M``!%``!H4'P``$`1``#`J`$!P*@!`@'T`?0`5`8YLL'4T)D46M%E?WS;*F<,
-MQRX@)"`````#````3"D``#`94/^Q&P56<-,M.C9G.EQU!DC`<`?"[L3H.`97
-MVGS]<I6->-NK0/?I(HZ<=DD2MT9:%@,`/`$``#P!```"````10`!.%!]``!`
-M$0``P*@!`<"H`0(!]`'T`20'";+!U-"9%%K197]\VRIG#,<N("0(````!```
-M`1PA``$`'A2$6NU/H+KLR3:D1R(GT(\THEPT07GQ^3ZXN&MGP01D1-#!FZ_W
-M564?$6Q\:/Z?^-F>Y#(R*A(2H?^_87-7Y_OLA?[R7`OMWIQZ\@/)[34O\@<;
-MKJ#/6E1OTE.9@NW7Z/-C+9!PZR?I$3PL6EWBBI(P@-R-BKFY[`B99[D%F3DP
-M9929UZI)`M26UZ>D3ZY7AT%.#J`TL<]=AW+#K,1(^_:(K'GR^V/($'/Z3:@9
-MK'M90E<6#"GR$Y4TG"U51++U;3$N,"<W]UK?R7:?XR.*#[N3*2VGY]I+S^0A
-M+Y6P$)1D2?.-.ITPRDYR/HVF9I8,N`]:-K(,>)F4AQ#K21*W1BLB`P`<`0``
-M'`$```(```!%``$84'X``$`1``#`J`$!P*@!`@'T`?0!!`?ILL'4T)D46M%E
-M?WS;*F<,QRX@)`@````%````_"$``.`?HX$1:9Y_I6]+L^:<4>17#'L/MD(]
-MM%0(U3J`1,H6'(__(N9VD-.G+J]<<%,XM_5-.YPVZ>8N:)%+5(($'AIC56^5
-MR)MY:CRA"#.E5^@TVZB>Z[!8XDPV#ZLL-7QG7/E,F$&27T4(Y0X7S+VJP4UG
-M]E^1=F=,M7E"/@\J#_^-66[2ZQ>+]JI<6LH4.$P:PR[O^$2]S/;O3'!OM7HJ
-MPX^^FRD^>>M"[&^?@E?794<,>LU9OQPD+MV6A;)J"L.6D&8&'0<NQ=?QV7V(
-MWMXL$],+]N-8A$/I!IB:!`AH21*W1K<Q`P#L````[`````(```!%``#H4'\`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:YLL'4T)D46M%E?WS;*F<,QRX@)"`````$
-M````S"$``+!:5")/_&3K=-XY'G!>&K5WN`A($:^I_XO@IJ#]>S%N!U;,>CA#
-MC[U/3:.C>,RW,A][.)$&*4E#,4E;RMB!YY87$&6D3LLJN.RVNB_]3GA,&'_#
-M%?[W](_);UYO9;SLW_*N%[;^-'?44$)SAX(>6G_0GL-G[8)HM)MIY\/1BTV0
-M91_)>(`&8W]@15`'X0N6R6,`.@'/*LM5DBT<;$]MK&=L#<&Y]*7R[M)O%GSL
-M21*W1A15`P#L````[`````(```!%``#H4(```$`1``#`J`$!P*@!`@'T`?0`
-MU`:YLL'4T)D46M%E?WS;*F<,QRX@)"`````%````S"$``+#KVT$+MO5<4&E\
-MH64Y(#S>K%06TN9KM]]#554>!E$@@HB1TVL0F<CRB!RM;(>IW@0RI@+;Z.\#
-MB;H3&0G-NR'Z@#=K!N;>8JU+\3^`^*M4;AR*)E%:NAB?O6J=808!NA?IL:,X
-M)>@X_Q%W`;=82`+M"<#"9==3FF1YCR.KAD.#655U$8E*V!3^?C*DGVY1`!,=
-M`S$0(<I3X.Q35`HQ&R^`HOWG%0-4C9C[@$,821*W1HYQ`P`\`0``/`$```(`
-M``!%``$X4($``$`1``#`J`$!P*@!`@'T`?0!)`<)LL'4T)D46M%E?WS;*F<,
-MQRX@)`@````&```!'"$``0`4:N2E-?@2D&M.B`:K(?U@3%VE(I7;2VPT]0)>
-M7BZC121'"FMTK+@ND#D45DZ2"([;RRY]L#:90IAZTE5%7NKT`T&1U?8%YU$T
-M(`#3UP6Y)\1+SD;`<;)ZR,+!)@^!]!_YP_()5!_S@;?I`AFG2:2VOY"PQ.,J
-M6Q:;B6M39.CGZR4A3I^H,I(X6MNF5!1X6^I'98%===<QF6-%5!/7>/E,%;D9
-M*R.W;2:F/J;1LZ%R%XI(@];B]_9H=F&"/_SB[V4!:_;IE;>DI(IBDW?2I==&
-ME^*IYPYJ@H*Z5SC3LND6@`K;O/TO;>Y];HG^K0<?,"!M^LZ*&9'K$Z)?)*M)
-M$K=&6WT#`!P!```<`0```@```$4``1A0@@``0!$``,"H`0'`J`$"`?0!]`$$
-M!^FRP=30F11:T65_?-LJ9PS'+B`D"`````<```#\(0``X#H"\EB@Y/#FO*?U
-MJAW)T8IU6$D.9-5?D8%LXBT]&+,C<@,+/*#^)G#ZQ#SL`O0)\L],H^X-/S1?
-M88TVA,_W%-\WL?\H`ZB?>4(N;Q,>'0T5<V\6/*)=?SGJVG1`+`J:EFD'>RQ+
-M[GQ.+`_.BC%SQY\K=Z)USCS])Q&H^'0%!,<8.P3:TI=[?ML6K";2="-*2=L7
-M]&AQ^J^)3YES9$%EEL;(&K;9H8U&PK8*_XMZE(/4;'$0M[Y9>^,)JEW+O<_H
-MCM!+Z["8FCVD/>Z(-4:0`^_+84YT:^P[<`N)IRQ)$K=&N(P#`.P```#L````
-M`@```$4``.A0@P``0!$``,"H`0'`J`$"`?0!]`#4!KFRP=30F11:T65_?-LJ
-M9PS'+B`D(`````8```#,(0``L(M.:_>!\KE(=4)Y%<0E*,E#!!)\5PRHT.NA
-M,:?'AV0EQT2K2A9V,0Z89@1->]T(2DQL2C?[&PY&6(..XO`Q!SS+_Q_@_+UZ
-MSO$>ABQ+JNT&@;*#L[,6``S6.^O7/UL#$7Z`ILK4<]F\(CU7/DW[GS9'_1G0
-M=++HI`T>6M`E!A7HK1(Y/P$R\XIVA:@:S9)XK-XT"A3V#/9:T:`U^D-QIU,!
-M^U0P!(\KU&;_AZ9)$K=&[ZP#`.P```#L`````@```$4``.A0A```0!$``,"H
-M`0'`J`$"`?0!]`#4!KFRP=30F11:T65_?-LJ9PS'+B`D(`````<```#,(0``
-ML`'B749OI1L*:1;)B"T$ZP9_U*V=F_LZ\3IV%Q@`<<.4B]2P*1E5??6R`FH+
-M_F20&9=/:">U,5.1J&42SA8W*,CGS#!]@:LYH5/VV\EBVI+56ZZS/4Z20^+-
-M15.O/*T&Q$>)$^+!G!2,USWX-W@S&'DWD/*"CS\"M4I"-SN;.RS=:@(*<T%I
-M.`T'*GEW;R4HZZPC2F0PFAS]$I<JN'9U["5JSI!XGH^>=WJ*(`E)$K=&FM0#
-M`(P!``",`0```@```$4``8A0A0``0!$``,"H`0'`J`$"`?0!]`%T!UFRP=30
-MF11:T65_?-LJ9PS'+B`D"`````@```%L(0`!4%(*U(&<\I-J?8=<E<0@3*>N
-MR%M:PW1T^(CF(1L*?G?.+D6(KRWF9Y;J=UUL[9\FGUR!@MVER%>^8?JX+PD+
-MX63\3CPC2HG,9K07O#-]2R]!^5.(\*?_P@\K&!*,]3]8<,_%1A%//*4<(GIJ
-MTW:,RP(U#0NI1!Y7,1-NCKAFU.,&".$$7B)]%WJ>0/.:;^TK'1_,%$'Z3_?*
-M").RU`-X0PSF/'%*7FC+;PZCB-&<AS,.SN@+(JJDTDDKQ76N,CIR>M2A<>#/
-M.&((;V^Y%\^K3F<7W#A&)OHA$\2DW$OABYTLS$RI^)[^757VY+_VEOH4B\'T
-MXK90V2E/,28(^!/L!`#,IG-]LT]07#4S:-*2!U)DIQWV2)'S?+"'<^'43E?O
-M.'#):/,M)_\4]$ME1NRNN6>W0#_$L#.G-4X`31EJF&7\]^9+SF8]QN""TXBT
-M21*W1F0)!`!<`0``7`$```(```!%``%84(8``$`1``#`J`$!P*@!`@'T`?0!
-M1`<ILL'4T)D46M%E?WS;*F<,QRX@)"`````(```!/"$``2`GKRF?L\#G(X>;
-MOD2359X\,RLZUF":B+MK`QQIO/Q]PCE8F:%3B-J_C>UYO9,X6AK(C@R8%D$B
-MRSZEI>HZ6R\:3PQ$^ISV9"TV4P5H@O)!U&?)_8]'._5'V+6=3XOJ%,U;H6]_
-M;^TVF/]*A*D@(@A1'C8C*RKHQ31/B1//)'@L#&=*YT1P#*@8H5FW[]UM6)2R
-M5=6#!M_)'0<3%'O>+<L&,QCE#'=3W;,-#/`,-O[5SEE<(9-(?\CKH)PJG002
-MN9M1N\4$S5VR$Q?!$@U--U$2@,+`1[59*:3*5%@F72&B`L!N-70%W<_?@7PR
-M.*,=7.L%HQ#YYS#F/+YH[0"PR,ZI_84GM,LWX`_<4_!"ONV;[7\!1Y4CIYU;
-M74!\FTD2MT;Q+P0`?````'P````"````10``>%"'``!`$0``P*@!`<"H`0(!
-M]`'T`&0&27MM*[UF`8A9!U]+"]N40[,N("4(`````````%PJ``!`H$QZDMKM
-M`BK4()]JSM0!!-07Y]_^\5S3*K3=ZBE=`D*`-JKS,+%V8BUIEAKW*/7:U;`4
-MGO?\V]29E%(V21*W1HL[!`!L````;`````(```!%``!H4(@``$`1``#`J`$!
-MP*@!`@'T`?0`5`8Y>VTKO68!B%D'7TL+VY1#LRX@)2``````````3````##Y
-MD,_9M%0.@3K_4V)$H_A[<B=XZ$EI`?>V*W=_?NEHHI<%.(3CS,DONV*W)4D2
-MMT8:2@0`;````&P````"````10``:%")``!`$0``P*@!`<"H`0(!]`'T`%0&
-M.7MM*[UF`8A9!U]+"]N40[,N("4(`````0```$PJ```P[LH0)(5@JQ/Y;%4K
-M665>82]W5,0K41:F(6[^71R^;`U2ASH24CO;?O1S*9%)$K=&>E<$`&P```!L
-M`````@```$4``&A0B@``0!$``,"H`0'`J`$"`?0!]`!4!CE[;2N]9@&(60=?
-M2PO;E$.S+B`E(`````$```!,````,&-MWF9JZGIK=*LNJA`%G6\8^VT"9"3@
-M.+?B85/(4):W$!`:@7HW0ZV67)2$21*W1HU1!0"8`0``F`$```(```!%``&4
-M4(L``$`1``#`J`$!P*@!`@'T`?0!@`=E$'CI=<8>^AP``````````"$@(@@`
-M```````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MPQ0J!KA:;JN7%\?^,Y?EHE;1()BD2EII\$SF]X6^7JQ9&$T92FQX;Q/-+5L3
-M*2*VFJ0;*AY@"/X^!L-GVEQ/F^9*5D>;5\">)6FZIKHM\-\S>C@`JY?J[?XG
-M_YT-\+2X7O,;0TL[7HM.T]*S&:"B<R)/!*]/`4*TYPCJWYSK66DI```DQD#)
-M.6].,Y;%HAV^X\N1WJ3]4G$!V6Y,-J,Z"+6B+$TI```<``!`!$5,<Y,.%D*B
-M)O'_UPV\^,)F/2MI````'```0`6!J4(`PU"G!B.;IU&2=LG*D<"5-DD2MT99
-M8`4`7````%P````"````10``6%",``!`$0``P*@!`<"H`0(!]`'T`$0&*1!X
-MZ77&'OH<```````````I("(@`````````#P````@``!`!@````&R^+<W&7NN
-MS^\%QIDP#R6(.,#Z#$D2MT;><`4`N`$``+@!```"````10`!M%"-``!`$0``
-MP*@!`<"H`0(!]`'T`:`'A1!XZ77&'OH<```````````I("((`````````9@A
-M```@``!`!@````&R^+<W&7NNS^\%QIDP#R6(.,#Z#"(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``PQ0J!KA:;JN7%\?^,Y?EHE;1()BD
-M2EII\$SF]X6^7JQ9&$T92FQX;Q/-+5L3*2*VFJ0;*AY@"/X^!L-GVEQ/F^9*
-M5D>;5\">)6FZIKHM\-\S>C@`JY?J[?XG_YT-\+2X7O,;0TL[7HM.T]*S&:"B
-M<R)/!*]/`4*TYPCJWYSK66DI```DQD#).6].,Y;%HAV^X\N1WJ3]4G$!V6Y,
-M-J,Z"+6B+$TI```<``!`!$5,<Y,.%D*B)O'_UPV\^,)F/2MI````'```0`6!
-MJ4(`PU"G!B.;IU&2=LG*D<"5-DD2MT89E@4`4`$``%`!```"````10`!3%".
-M``!`$0``P*@!`<"H`0(!]`'T`3@''1!XZ77&'OH<&^^L3\THX2PA("(@````
-M`````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"
-M````"`0```(H``"(``(``!F[:.%*0;]@</6.)Y8AKD#](:4S:CGE\;@NN504
-M113JTN:,9'7;7&N:L:RG;E_*-BM)"J_-/ZC+8B"9)O8JAKCO/:X84@IL-<L6
-MMZ4+]QW5N+O/)BN!9YLK?RE`:SE`_0XCN1]O[DJWNMX.F`D@^U6??_.P5J%U
-MPXE>B[!C]=OC*0``)`6P:K>*B&8CJOAD2AX=:,"PUZY._^?9##LSZ$>CS<[S
-M*0``'```0`3'=(C^K31S"@;W\J!UN3E-C*3@/P```!P``$`%9*EMGMS`$H@U
-M"G70C&&<ZF:TDO=)$K=&#\,%``P!```,`0```@```$4``0A0CP``0!$``,"H
-M`0'`J`$"`?0!]`#T!]D0>.EUQA[Z'!OOK$_-*.$L+B`C"`````$```#L(P``
-MT!)E,?HVE4E$/K>X9UV:6W8.^H-2')JMSZEU9^D87(X(G&I)J`"YV3(G#>@+
-M;YJ_JIS,[,F'.46XL?;+W@Y1;U`EQG-/H@KI<11$\#`6F`UC^MRRCQQ%`Q%"
-M?@HB?RS?`R!0X==TK8F_>R$Q=.>+ECA"*=]`ARTB"17"I-M^&#`L%EE5P@O2
-MY7&<N4Y:)@8DAI801`Q=X32MJ`Y(QDS"D)$$(>:0,L6P"T5(">QZ[<MNLD-.
-MQVB/'`I0>U=)^.K[G6S@1P>8VN?"9MDUM4D2MT:CVP4`O````+P````"````
-M10``N%"0``!`$0``P*@!`<"H`0(!]`'T`*0&B1!XZ77&'OH<&^^L3\THX2PN
-M(",@`````0```)PD``"`5(Q7T#R4WN#OVX4*2W^%[W-L4`3OA'+,RH>'@R&#
-M;(GMRPL(=X&L9RH&^<U`B.S@KE<')9IEK0^S>U4AY=)&$?$FY[&A4>:EUZR?
-M=JL41CS-'<%,'\06WLVN0RX63;=/EQ&]/:6C%"<A$(YPE(VA(M%1_8?3P#<9
-M<E4@^TD2MT88^@4`'`$``!P!```"````10`!&%"1``!`$0``P*@!`<"H`0(!
-M]`'T`00'Z1!XZ77&'OH<&^^L3\THX2PN("0(`````@```/PA``#@WW$"TF;I
-MQ'XJ,:9R49)T^2L9/57N?E_''04#!2\!1\A?N6?B1_0C&M^F(V4\"AQ`6`M.
-M=7E'>]4<:YY9:?1./@8;6*U&AL1!;<3!K0DQ2`VB6FP^FTP%1?N6&%#G%JUP
-M=EU;<?(%-:RK:V</E'=G%[:]V*F9<Z@A:&1D7@TFRQ2!B3F#U"A9QDHW6E.]
-M+$M7Q;+X6)5'7WO<4)9W+08'L(>OJY>`+PD_5,P`*:3A?S689`]7K%9R(+QP
-MT=#Z"0A`DV,:ENV%Z+\EE#.@_F*?(;>F=8J;-$=F5>EZ8TD2MT9:!08`_```
-M`/P````"````10``^%"2``!`$0``P*@!`<"H`0(!]`'T`.0&R1!XZ77&'OH<
-M&^^L3\THX2PN("0(`````P```-PA``#`=OJS"X9!_P)4E:])NA4R:]>'P@91
-M,(*QS]1D-SE>8%J-W9EJZ*,9A;/M?48W3ZNE6,Z>>K#4ZBD8R<1CJC'U&H2'
-MA$CLP]/2C8\!W$4S\]R-O6^:;0K0O^GK:3MULD)7BK@EWBLSO8K=W38_O'Z.
-M-6<E0O3?X<[J2H>UPGTH=CR]IY(9'T"@X`5O66UK'<6L)S"P6B[0DR%=5J4@
-M_!NB&`!4\UXX[6^:W"=^]EL9^GH%I]5W$LBMPUB[:/E)$K=&'A`&`&P```!L
-M`````@```$4``&A0DP``0!$``,"H`0'`J`$"`?0!]`!4!CD0>.EUQA[Z'!OO
-MK$_-*.$L+B`D(`````(```!,*0``,**'LC>TCRQZF_:8N+X)D#69^VYR:4M6
-MEBN;?;>@:JQ<_#T<N`?F4G63(%($21*W1@8L!@!L````;`````(```!%``!H
-M4)0``$`1``#`J`$!P*@!`@'T`?0`5`8Y$'CI=<8>^AP;[ZQ/S2CA+"X@)"``
-M```#````3"D``##\QQ(9*6AH42FS?RR^]\4C>HL<\$>#HL%OME.RPV7P\C&;
-M:</(40#G1R(6BTD2MT911@8`/`$``#P!```"````10`!.%"5``!`$0``P*@!
-M`<"H`0(!]`'T`20'"1!XZ77&'OH<&^^L3\THX2PN("0(````!````1PA``$`
-MYR9>K8A%N5C$C0FQ[N6SJ06J$[1=`)-59G<'J=U3R\+EMK0#5%1_$5P\Y!.K
-M61^;JG@&7%@)MZ)HX*_%'"Y"L4AS(C,Y8<UPX6*I885)(GW^#$MQU@61-/?]
-MB]?K4W4V6EC69K%+B5Z27V00:L:)@3S(AQ*I<(Q`%NW;RR["3K%A*TV33)OG
-MV,F-0#6IRMM*;J0I[(W.BF'9&='ZFJ:B:K)5!')X':8,Q93`3R\VUH,&`=<E
-M@*J7S-HHVJ<\X;B_`6;L0GD=H6Z<MS7,T6+`"B/&+J>(6D\9/PNQA<1HMEP5
-M7^2&T?<VB2]\_48K6\=1"U`,TWNE*[:%AK%R21*W1EY2!@`<`0``'`$```(`
-M``!%``$84)8``$`1``#`J`$!P*@!`@'T`?0!!`?I$'CI=<8>^AP;[ZQ/S2CA
-M+"X@)`@````%````_"$``."\%S<#9"C1@CI[@"G=;VFCNH3:)BX%.D@6HGAS
-M_\YF92^.&G8AP'K0/A;P,AF8CAU=7C5=&)A=PB5Z']!O7^)X5U,N"<G].UH$
-M4N838&*X#6N1D:S[\Y^]8B&L;%MA&9_1RP4\U[(G4Q%\0RNY.F[418!55AR2
-MN*\I&RH(Y[X3XT\][C]*UQBD^/C.%#:N7P;8`N5IS=J8OD]O/JOC+YYMO<$5
-M9L7L'%T)Z`>'SK,7X2VTYX6D/8(GK%N^8,NT0B3R68QV`PV@0,)NDC3T`#>3
-MXX;@LZ]M"$O;B7%"21*W1AYB!@#L````[`````(```!%``#H4)<``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:Y$'CI=<8>^AP;[ZQ/S2CA+"X@)"`````$````S"$`
-M`+#N!\M=H9A>SDU,A`23\I->YT?[L4@&)RW_?=K]_F8-/K(DH?&/)RPWA*'8
-M@E)/'W7N,+]QI,5?_/MA2\G]"1YPU!Q@7B0YK)@<ZV30BJ\L^+DIE(=M:9*2
-M\RO%]]5OYYC"_6@"$X"SJ5\IY-FWZ34[)7(`OP`8]*HF(,F#(5Y;'/6[$4QK
-M%.^D+K6$CHTPIKCKZULTOEO\L=O_$$W$^J4"K<V/:<3/%N-?O3LP21*W1N&$
-M!@#L````[`````(```!%``#H4)@``$`1``#`J`$!P*@!`@'T`?0`U`:Y$'CI
-M=<8>^AP;[ZQ/S2CA+"X@)"`````%````S"$``+"G-A3FPF.&[@%"(7FEAD"K
-MYHQB</R'G7(=CDP/?WVT47#$4.@P7I]=%#Z;WU4Z-)FKYKXGH4A,:',/_K.@
-M/W^>&XF+I\7.=>D1*XPOC[MV%/`GP`(FNR%4^X0X)E,OZ81G%>4&[^MB+6MC
-MC'[<CSU+9BV8H-&B/C>O_4KKF*0:/C&(^/,_T._*YLM<NDTD,=^1N_7A*@R-
-MN'_/7A-"&'7P9JHWHEIFROYZ6V$:21*W1CZB!@`\`0``/`$```(```!%``$X
-M4)D``$`1``#`J`$!P*@!`@'T`?0!)`<)$'CI=<8>^AP;[ZQ/S2CA+"X@)`@`
-M```&```!'"$``0`0C[YQZ8`1A/D8)4^*+7"7\Y\4%@WZ;TV(NE8G8*"+,\)(
-M"N;CVLC;*P/,OCUP'PN0C@)+QI+\?`]6EO[<37>F'YS<HC`.I^_FEVNAMW$7
-M36+$6V=%M:ES\A&59D;]E*^HH[HC=0SS%?ST=-?>(><AAP\?H""%%Y]Q3;3-
-M[A"5YHP[R@QK!%!=6+&WRYFG:/'3@]?":Y99+VWG=.)UN+>7RG`^93THV061
-M?/\\R,\(#=[4'AB#P&OG1$GS914\!DOMX30'RV2D.]X3'GGW,_4/-8%57;V!
-M+T:BZ%@IVHM:[52$XAE74?LL@UX$TE"&UZ4MVD`'>(\20@FX+`M)$K=&)ZX&
-M`!P!```<`0```@```$4``1A0F@``0!$``,"H`0'`J`$"`?0!]`$$!^D0>.EU
-MQA[Z'!OOK$_-*.$L+B`D"`````<```#\(0``X-]5AFJ3EMM.$)&@.;(P#0><
-MO6ADYQYH%20E1E:Y%Y0T>*^F$CN.4T,K'Z)H__6C2Y"?`P^%ATVFH@G(Y:C[
-MD(EC3$419'`L>)/7!5OO,U?BEY3M1#"+:2)7G!6J6,KN\3+K4&Q7QQ^_E;1:
-MQ@OBI?\XT<*53OJC,\!$<$K!2'.)501%\1_D9:9W)012`@,`8&U#O^W-$#5X
-M0[K-T]@P*J*5OA%Y=3K36-2,M*G#=9MFZM`,<A$_OMWL53_K@+UM&OU9^-:A
-M8G;%5=NJ2-N)#JZZQM@-NXW;ZMRV]UM)$K=&UKT&`.P```#L`````@```$4`
-M`.A0FP``0!$``,"H`0'`J`$"`?0!]`#4!KD0>.EUQA[Z'!OOK$_-*.$L+B`D
-M(`````8```#,(0``L/D0;Y"/$)ZCG5M[$AX2;>:SXDE>'<8ERNM/\RI*J/`$
-MX&^@%MV-B8Y#TE@`G4U7C*LVF+GV=^JE)7=R^!LYB_T<W=%AA,4>[.)V`YIJ
-ME[A&"`ZQ.YG(V"(J^C"^>@YR%9XTP5!)X6RBNW3!'D3YU*N$Q[QC@:O?M3-0
-M+X?M%]2<56Z,"B+;/K]L!!)\5(*A'S?C4Q[A"-=;4*TQ66>$)$3A5*1J^0&0
-M&7KLFH=)$K=&5>`&`.P```#L`````@```$4``.A0G```0!$``,"H`0'`J`$"
-M`?0!]`#4!KD0>.EUQA[Z'!OOK$_-*.$L+B`D(`````<```#,(0``L!;]F'HA
-MY$!4\UQL$8OGS572:.@&A=W,">]R$.Z?F_*'P@R@=/I*3?B;!T;^%21H'"*=
-M@Z9XA"HW:>HPE](RO.3^F9)ZMI*XQ\AGZ??`QG+):F9=SL(4*9XMNW&,MMN\
-M^C1)D?U).'C5`#3W](;/*J7Q/"&.P#EF6\.R*2B7AII8XFCYHINDYG43SNJ@
-M0<NLTM:$I5XK![!ZEVH<,^'Q]*01UV"/5_SE*5%&@09)$K=&4@8'`(P!``",
-M`0```@```$4``8A0G0``0!$``,"H`0'`J`$"`?0!]`%T!UD0>.EUQA[Z'!OO
-MK$_-*.$L+B`D"`````@```%L(0`!4$PMQ?CP432O7KC#*//$`V#/341BR1%>
-MVGMNC<2NS8_)Q;VUBM34?[(]?:&U."_;3BX(9R:/\5"66"KV>VUT:30:4$%/
-M%:CZU<(CGS'K:CQ-WEC.C++:$X&(#GVED)[U&A=8A7]#$*6T^F#M-@N];=LV
-MN_*1\+Y75\5_(H-6;@0S-G=$SR]LOSTD0_5;(0^\I^JM!E7S#C@]%LV&?ZS^
-MQR6`B!&2XM8HFR9#<2SVS)&S`O*&95N9O)MQFR&_*!"'8B>8(,RXVJPV>G%^
-M[:2TQ3W[FT#9Q4'7B;18).'JMI("5C;1[\3DD6YXC)#K`#)H'`37ATAP&QTZ
-MN^N7W/6.!/0G3&XD!U*;EER0H04KFCBTO)V:@;Q]GC?2SSSP1-!JV-RK`N0>
-M.`'!_/R>DZD(RPNQ*I"`\%:^+C9$H\F\T*)"P@A38T$[IFK4K5)>21*W1B,]
-M!P!<`0``7`$```(```!%``%84)X``$`1``#`J`$!P*@!`@'T`?0!1`<I$'CI
-M=<8>^AP;[ZQ/S2CA+"X@)"`````(```!/"$``2`/&OK?W&ZS47XD`AUDGCSQ
-MD["Y7KG<QEE(,+&J$$B03)%8'J-^XS8+V+[X3<MB?@G0XN0ZB8S%O!KM1;\%
-MV.$+]_S(-'JET:/S`GP$#-<S/'O6C#.]QSJ2+@0XJL54GYP?S9C>"+X4!$EM
-M?6$_V4;#[SY@HFWE@(OC_G7[/F#23K[?5RY(ZI<$VWJO144JF^5N9+L#.QHG
-MTEK]6!*DF^=MQ/ELVQ5\_1::RHF%^"=6.(0G6^$*UU75OS8%GL"9)KFD%C)K
-MK$7N#UL#D0&?^G%-!T7'2SM8,7')<)TT9**H64)J+@LBOA@/7MQ$*J#7-*B!
-MB!"'"^*7L>,`,+_-B'7A)$IN,9"^M="#<ZJ0Z1SDU1/-?3'\4]:E)T3F%TD2
-MMT:H8P<`?````'P````"````10``>%"?``!`$0``P*@!`<"H`0(!]`'T`&0&
-M29:?,6(K,#?5</Z8-!./<.,N("4(`````````%PJ``!`#ILH*$['LRITW^PO
-ME^Q15FJB?0..:V1\+Q!QX3R%A\7%`J+4VV_``^R%B&)K;RI0@/@`'G%)D0+I
-MJ<RF21*W1NAN!P!L````;`````(```!%``!H4*```$`1``#`J`$!P*@!`@'T
-M`?0`5`8YEI\Q8BLP-]5P_I@T$X]PXRX@)2``````````3````#"VDZM?Z;C9
-M'`=CFV%QW8+80`0@^3=;(Y/.XSV_Y4D=%,Y@+>F-O$-#AM!E=$D2MT99?@<`
-M;````&P````"````10``:%"A``!`$0``P*@!`<"H`0(!]`'T`%0&.9:?,6(K
-M,#?5</Z8-!./<.,N("4(`````0```$PJ```P4:`3J-"+J^"'?SEXG-7$%Z,"
-M,M@MIY729#9E?I?-B%M@3*1#]0$095"T1?E)$K=&C(L'`&P```!L`````@``
-M`$4``&A0H@``0!$``,"H`0'`J`$"`?0!]`!4!CF6GS%B*S`WU7#^F#03CW#C
-M+B`E(`````$```!,````,/X$C&CQ0(W8OE<96QW'\Q&FT7`(=.!WY+PEYH!'
-MO$$^`)'U["BV:'QQC:Q921*W1O&&"`"8`0``F`$```(```!%``&44*,``$`1
-M``#`J`$!P*@!`@'T`?0!@`=E8L<&4:O2--0``````````"$@(@@````````!
-M>"(!`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``XJ(K$XS9
-M4S!'T?8[A\FP'0JAT^7^YJT(PTLHO[%##C`(4,3&)^$X+%-=>CJ\%<0#H?>+
-MU+$O@C.G1AK(-[UMUY/OHOH7WY-Q[NK/*PK@%$3-Z!>J_/]0%"D;6Y4=`JV4
-MR6L.7)P<"WHR,90/'P\L<I^SF]<DMR?H=*."`Z=KY?HI```D\=!X@4&!T)1L
-M-X\?'Z^S-.&E"H+2L=S;S"]-TSV>%84I```<``!`!*-(6IE&@S:5X.\GZZN8
-M%]1-I8^\````'```0`4GLJK.W*C]W(BSM]I58Q'-X2M]+DD2MT:0E0@`7```
-M`%P````"````10``6%"D``!`$0``P*@!`<"H`0(!]`'T`$0&*6+'!E&KTC34
-M```````````I("(@`````````#P````@``!`!@````&GK6T+J"V;H::589Z`
-M+>3Q`TE/UDD2MT9WI0@`N`$``+@!```"````10`!M%"E``!`$0``P*@!`<"H
-M`0(!]`'T`:`'A6+'!E&KTC34```````````I("((`````````9@A```@``!`
-M!@````&GK6T+J"V;H::589Z`+>3Q`TE/UB(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``XJ(K$XS94S!'T?8[A\FP'0JAT^7^YJT(PTLH
-MO[%##C`(4,3&)^$X+%-=>CJ\%<0#H?>+U+$O@C.G1AK(-[UMUY/OHOH7WY-Q
-M[NK/*PK@%$3-Z!>J_/]0%"D;6Y4=`JV4R6L.7)P<"WHR,90/'P\L<I^SF]<D
-MMR?H=*."`Z=KY?HI```D\=!X@4&!T)1L-X\?'Z^S-.&E"H+2L=S;S"]-TSV>
-M%84I```<``!`!*-(6IE&@S:5X.\GZZN8%]1-I8^\````'```0`4GLJK.W*C]
-MW(BSM]I58Q'-X2M]+DD2MT9BR@@`4`$``%`!```"````10`!3%"F``!`$0``
-MP*@!`<"H`0(!]`'T`3@''6+'!E&KTC346XPK<5>P.K\A("(@`````````3`B
-M```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0`
-M``(H``"(``(``-3+PL=[KL&.,7*BF4.,F<T/^8ON=H%8I@M3!9D)@4?MZJ'O
-M,($R0X<-=%""2Q'9Q.%:8JG%^:5O=ZCZ-#?5J>YKH!\VCQ'C+!_!8>W,5.AQ
-MU*F\`@@&GS7YDQ>_1A6XK=^_0Z&WQ%H&71MA\MA*%IC$E_S`P(R7$0&3/1IA
-M\Y-2*0``)#V-I6U"OL-,"+L`K8O6M6I6R)A%PD558"]H2\UP!;`^*0``'```
-M0`0S%MK0TYI5K%>90$3<8U\8J8]M#0```!P``$`%G_\2U<AN"&1ZA]'CFE:Y
-M#'0KW/M)$K=&/O<(``P!```,`0```@```$4``0A0IP``0!$``,"H`0'`J`$"
-M`?0!]`#T!]EBQP91J](TU%N,*W%7L#J_+B`C"`````$```#L(P``T`^@2VX(
-MAPG*J\>9$^I^2Y>,.DLGMT-:S8:0D1H?TTN/%82O@I?(3F?B._<P(_M^P!.L
-M"JR=4'-3#'DN/YB@)>Z_2A=^8@3H:P9.=?Q9E.^//I6#ALG'G&HOAZC4?XLT
-MX&\=?>9B\.B/<VO$(;Q]OZ`I#HE]9]]0Q8KL;38]O%F:/NQ"EL!JF0AA19=Q
-MVWL,8Z!GH99UY3=M$2]*428[RZ`#%<3.(3'!^?&82T_K]=I1E/25.&R\$WFO
-M!+PC`WQZNP%L!'0]2D4&SV3F/DD2MT;O#PD`O````+P````"````10``N%"H
-M``!`$0``P*@!`<"H`0(!]`'T`*0&B6+'!E&KTC346XPK<5>P.K\N(",@````
-M`0```)PD``"`KO,7C>Q-V*9#9@QC%C^@7H:\GD)+T9$>Z>HVG>@>BAA8,FAI
-MRQZ<)^/$1[LYO1D`3J(SP'B]*NI@KHJ&:W=E]7X*@F)*>`#$.P,-0.,*]NU`
-MTE*;M38DA*;"WO`L9F,PL*R&;$OM^RU@BP)LQD-4<P6M/4**04$P%<80JDD2
-MMT9Q+PD`'`$``!P!```"````10`!&%"I``!`$0``P*@!`<"H`0(!]`'T`00'
-MZ6+'!E&KTC346XPK<5>P.K\N("0(`````@```/PA``#@X0VBQ#$SO9_E`B7Y
-MQX%ZBZ&,7S&@`XB#,[Y%!-=-#=[+&[E*'2"9?N16+&+)GLR\7VO.B7O=;AE!
-MP]9F=-U$>:TJ=#6DB'LQ'-B>)=A*W=[RJTJ)#U=D]#.8D#=Z1"W+>M->81*U
-M;Q\,5EY6'URM")E>[<3?4<J`Y#^I9F\G2<4("J`M*"_=X`MDI=K_PGEG+\/K
-M+?>`2__*RYJFB#DU>-U;A7WV=%>G5S(^I6/GMV0%0MH"EU_(^FJ6I$QLWJK3
-M.6*J$F$K+XB\^9U(L6D6@OJ;[C97)SG_QB3BDDD2MT:H.@D`_````/P````"
-M````10``^%"J``!`$0``P*@!`<"H`0(!]`'T`.0&R6+'!E&KTC346XPK<5>P
-M.K\N("0(`````P```-PA``#`8)(/C%62-`2)P4G,//]6HX[Z_;),\)O+G(MB
-MPQ>#V=;F'\^S]HK\)2EJBZ(!V=E9B(]Z?"JK7P21(NIU9D<ABYXP]RFO38(N
-MD=$]!_WOT[#>+/3X`HAO6>U+V9T8\=S\4P&L4UY37?T&:2>B'JT@3H=+_]9:
-MV\ESP9@!S\EN?U(@Y25U>+YA7\XU@LD;J+Q*5B"QP/9\IK>S(+H@ZNH%A*L'
-M]%%YHCEYBB1CO'F$F^#3Z`7#.`088XOV3AA)$K=&M$4)`&P```!L`````@``
-M`$4``&A0JP``0!$``,"H`0'`J`$"`?0!]`!4!CEBQP91J](TU%N,*W%7L#J_
-M+B`D(`````(```!,*0``,$)6@&<4U/JPSZOR*+S3E>&*U5J/!@.V_4WA\6.,
-MQD,\]M;S]GHPJ,'@;(-K21*W1I1A"0!L````;`````(```!%``!H4*P``$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y8L<&4:O2--1;C"MQ5[`ZORX@)"`````#````
-M3"D``#!@:M^3%@\(2Y&CP:;LE1W1$C!/(;89\1+@I0((NW'1>;1-<0",N!@*
-M,18LE$D2MT98?`D`/`$``#P!```"````10`!.%"M``!`$0``P*@!`<"H`0(!
-M]`'T`20'"6+'!E&KTC346XPK<5>P.K\N("0(````!````1PA``$`Z;Q*RE&I
-M)9!]:R")Z/"3V5%<*.HMJ(,9924<U-T(YE4J+Y_P!<C28PWN75#?Q)ZRVJ9/
-MMH>_XV-:4Y08,B@G,^S?88_=7DPN/?0JZR7^.6A/T5M*,N0AA/ZL9:?P82@7
-M9?[F:OCKC5?SBV;5SZX<Z98!*;%1D9<!V(+U^YSRIWJLC6N74%(VB0/*Y>L6
-M?<6Z%VKP\N.M]).:<K%:TW,6H>RG(>B^D(-%C#_602GK0;`V*/&09_UY_+.K
-M+<SARWH9\$Y?5+X'6RY"&78-_J^(4$EH-W4Y:0@S$5F=+NY">;Y1<(!79;';
-MG+K-D+`T?A@0PEA"@8A@"5O?WX6821*W1K^("0`<`0``'`$```(```!%``$8
-M4*X``$`1``#`J`$!P*@!`@'T`?0!!`?I8L<&4:O2--1;C"MQ5[`ZORX@)`@`
-M```%````_"$``."O=%$RJ!V4?\($W/*8WW,,6BA)Q,9]Q9Q.2NY4Q`<%M'P^
-MJGVA\LLUPM%^[?KMD7S,U,9*DY4,#BIVA570^;SAO80Y5:]3K:R^/ZM.MD(;
-MSIR2XLGX11G@%B/**6$H_"2[M7OE^%?IJR<'0KO26L&;LJD\BNGG.J#J0V6S
-M`U"*@]BQ0F9D*PK-;WM^$OU6J*0?,6N`$.8!/%!S=S(MYSQ7#Z_;8@+FW>==
-M\Z4^<[@<F=?\[UJ8[(;A`=)X=B:O-E;1R!Z0V.J-3W'R6V*1E;'C,..7W;):
-M*Q[MM2VR21*W1G"9"0#L````[`````(```!%``#H4*\``$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y8L<&4:O2--1;C"MQ5[`ZORX@)"`````$````S"$``+`+P$?^
-MSIG@"QAJA"BH@=<&Y!.H(HA9L<?<XLB/[+RFVV/7-/SKO0AJ%$"I$W__SN^/
-M@V?]:E>,Q23G\6^IR,MYTKR#A7/OM(&GA>W"WAB\-=-C18E>3?\Z#@U>CA2.
-M\N-H[`VFJFU[K/42TM*//,1$OA\:LW?(E)Y-_41A>[9]*)0V>!^UE:IT'DJA
-M4Q78(FFONVGR_:M+'%C$-J)*N6<SL`Z=Q8.S]:S#23O,21*W1DF["0#L````
-M[`````(```!%``#H4+```$`1``#`J`$!P*@!`@'T`?0`U`:Y8L<&4:O2--1;
-MC"MQ5[`ZORX@)"`````%````S"$``+#E3^9\6TA="4G)-G[Q=1&BNCDS(85C
-MR"M4>LQ=@*`NH55C^?X8)`CPF&`:)8=IQ'M9K#B09"2NT%TZOX$O[<CO3!!5
-M%GB<T_+@"?T24I`IRR*;>T!PK#40N?U++=]9385A7WZ#]5=J'>'/`26$^$5K
-M?X`(XC.N0J"(SNE=Y%QKPKSD44Y16ZG(O9)(IHU:6?C=ZS-6S!Y372ON);Y-
-MU!ZGSITW-'[RP\@,D$K`21*W1CC8"0`\`0``/`$```(```!%``$X4+$``$`1
-M``#`J`$!P*@!`@'T`?0!)`<)8L<&4:O2--1;C"MQ5[`ZORX@)`@````&```!
-M'"$``0`2V8W;A4["Q%\HGH=L?-NF)+TOL5;*MI!H/GDY(K/T\5>1U>0^GEL-
-M#PL+IMW;T::V`?#6LXFQXGJN'I0/^OV#/15[K\0X9N0A?73,F7+2W4&YECI9
-M!W"*O+L(_WA][0ZL(3PV1"-A7VGE*1#JL.`D]4K9',^%7#;3=44_%E&PYVV(
-M=G>^3Z'@DU.75]01GDCCNB>H>!?+=ACPP_<^V_T6*^4IU<4]KN&$G72$=]-O
-M)N.T`MA=`?-%;TP;ZAY]\4)>IK-[SC`!V2$&\!,>\&\9VQ[6+9=NX8('6_=Z
-M"7I0`I34YA7FJ0+)OQVY\,JJO*;S?UL.]TA/*-SH54Y)$K=&U.,)`!P!```<
-M`0```@```$4``1A0L@``0!$``,"H`0'`J`$"`?0!]`$$!^EBQP91J](TU%N,
-M*W%7L#J_+B`D"`````<```#\(0``X.A+#-21(8T_,R)8!_6UKNDE=$!G-WBM
-M)^UWB_SF_!"<%MU._'_W)3QT!%'(^;`U?L@ER#YC&B<_4,W6;*(E'W[T_:#G
-M$Q(&%>VV4$J&E/)"F-A&!@A,A26Q\.DU.3#VH9F&@KDYI_4529$&4G7L7?2W
-MXVD+T%@D;2W:<BID`TT+EV-]9X$)XJX^+QM];3\6IGNX0$I0,U3[_7A4:-O3
-MXS:\_0P>#>%-Z,89Z.3Q:>E'VR.C!7@^,>0:B@`))7FG02!GX5[YXD!P56?X
-M?_A3,_?>EG/+,<Q+:W.VJSY)$K=&4/,)`.P```#L`````@```$4``.A0LP``
-M0!$``,"H`0'`J`$"`?0!]`#4!KEBQP91J](TU%N,*W%7L#J_+B`D(`````8`
-M``#,(0``L%*/G=SR"^;49JI2E+ZQ#L\P[Y[[KW>M6T9Z.R.XXSS^^A+!@\O%
-M2UD0)GV!&I1$90R`$Y(F-"=&6.0I3ERKDD3A[OV:"<SE[K@:+V;DPMS5M[8B
-M#6%QJ6ZXM9X_:T?C^;6OFF.,"O;UMP&6;:99IXU6DYH'5]B=GURH1W"KQF^9
-M[91(L<MQF`\6$>`2>U-F]8(WONF;/*^#R@?L<00;)"RD=Z"^MW+5DCY(&C9)
-M$K=&#14*`.P```#L`````@```$4``.A0M```0!$``,"H`0'`J`$"`?0!]`#4
-M!KEBQP91J](TU%N,*W%7L#J_+B`D(`````<```#,(0``L`Y92SJRPJ`X8:<B
-MS.3M'-U3<2!0(<$D*UI4Q4/@@47*1?$;3S.FDH(#QCSJL)U"YB$,(..4XG4(
-M";MS"G$(;-F)9[TQ%"NP0:$99R%%^-.$NX2L<="0"FXN551W>R7@20AJQ6@@
-MTAT7N:$33[!N6WL.I%'Y7IF_8IUFLPU9LD3Z'L"^CO,W<)S:[\3":P=1'<0"
-MS7>?T?G`DN'HJO+U1H>Y90@.YW3T#(#;!Z9)$K=&##P*`(P!``",`0```@``
-M`$4``8A0M0``0!$``,"H`0'`J`$"`?0!]`%T!UEBQP91J](TU%N,*W%7L#J_
-M+B`D"`````@```%L(0`!4`G20@T9&A+[6U4[ZD9/=B'@8,H1LYH(G2U$YME_
-M)1;8JYE@.?.A=%6H%LEK6763,L*Y,6&`'DT@V(KB`O=^$@7_2U,2C&L%&SH8
-M*TNKP3U_%E1B(5B=R&7+=P=J>#^(X'%8D.0#A"#KB1ZQ<=*]F9_$COXR=3,N
-MR.&JJKT3@5#CU:)Z6_]`)/;[P1_B]Z-1"WC$T"#J,MI*L?WK/AIZ5_%[CV6B
-MMV3V#FO!8LMHZ*4KJ"?&X3P1E;;$$$KM<1G$O.P8*'('D&M%3AA8(2;JYJLP
-M?&;=S!UNM#"#"OG^2<[5ATO0U2M)6+@!./[YXZQ^U9W6AV!`CC1N+S0WO!V:
-M5SMI)\JS,+>P+=3>IT\PQ]8LE\4.!!-0&`@!*8052M/,O$]P83L3]\G$^T-5
-M7?W")?L(][L-EI)A[.>[\'?X/(;;65^!_!_L=>C<Z4HD21*W1J]Q"@!<`0``
-M7`$```(```!%``%84+8``$`1``#`J`$!P*@!`@'T`?0!1`<I8L<&4:O2--1;
-MC"MQ5[`ZORX@)"`````(```!/"$``2`R!QYB6+T@W1%YH+"K^R;5D8:FS_YN
-MI%?Q+TG>)A&QM*Q]<0RN%MI[4.Z,@7?QAO(M!2TQL\I.725"6/739^6F#")=
-M`OYJ\?PVY>3<`W^Z-I":A$J+5H=MV<AXS9K2%GY,NI_:>V['#[@PT+3(\D!"
-M/!'FNA#&O&<*C#^5BEJ:6W]$V61Q=I(7!C_FO&ET]#S$M>U=;D!L_E9G!N(#
-MOP"FZP#-D0W'&.1]*&QG^;UW;"H2-&Y`LXT,$.)::W;IDG-'ONF&0G/^`3-2
-ML,#/MGVXUC/:`9)O2-W,$H<9]-S89XN_W5E5CN<M^+`!O3:I3<88-N@YT;I7
-MGI%H!43@A`+FC&JCY)U"1D9,D_*"L*NXP';<"UTX3!FS#A7V+DD2MT8LF0H`
-M?````'P````"````10``>%"W``!`$0``P*@!`<"H`0(!]`'T`&0&2=W"7R/I
-M'7BN):.5JF63PK`N("4(`````````%PJ``!`L^-SH?[1A!<CBN9]_&=()@I1
-M+S,&IT_7VM+N)A^.E)N_LS%(B81K$I'%X*<69G`Z$"R,^P'0-2+@PR*E21*W
-M1FVD"@!L````;`````(```!%``!H4+@``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-MW<)?(^D=>*XEHY6J99/"L"X@)2``````````3````#"VXB!/#8!REPKPX'_,
-M\%;)_0-N-1$:%?1&]#4F7OT2HHU()#"[<==;C/`[\DD2MT8LLPH`;````&P`
-M```"````10``:%"Y``!`$0``P*@!`<"H`0(!]`'T`%0&.=W"7R/I'7BN):.5
-MJF63PK`N("4(`````0```$PJ```PQ_J0_(@_\LM6K4G706DA7JDA)M&%?G.M
-M!R"=S_7U[[,X9WZ,14Y@0Q6N]*-)$K=&9<`*`&P```!L`````@```$4``&A0
-MN@``0!$``,"H`0'`J`$"`?0!]`!4!CG=PE\CZ1UXKB6CE:IED\*P+B`E(```
-M``$```!,````,,M]-S]_5?4\PVJPC=O[YQ+T)ZD\-9G!9>*K^1W'Z<AQE:V1
-MGS?$F7?:6,BM21*W1I.["P"8`0``F`$```(```!%``&44+L``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E,WV_VL@6/@<``````````"$@(@@````````!>"(!`'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``4#WVR:!^`;1.)%:4
-MF=`O.LA>5AIJ'L)678D.]S<@Z.-]<@KA7?%$RS7I2]&+C3O",$C735LM>\`E
-M]AN%AQ]JV@A2TT0+3\#O\2M@920;338+9]@I?V:H(,$.*-R1W_A/U8->L9\Z
-MV'$1?ZG]90>R^_P>%>P!%;Z&#&?;,._,.28I```DHEI,`'7%MNTU>J_,V9`W
-MW^/P;$.=,P-^"A\@M^BS*-PI```<``!`!-YOVH.?CMB>-V;/`L+E3;Z#,Y#2
-M````'```0`5))Y;[+K)<JH=X'CZ%P!\1%C@=TDD2MT9+R@L`7````%P````"
-M````10``6%"\``!`$0``P*@!`<"H`0(!]`'T`$0&*3-]O]K(%CX'````````
-M```I("(@`````````#P````@``!`!@````'+HU@!WK6U_:)F<QQ+6TZ&6SY2
-M;DD2MT;DV0L`N`$``+@!```"````10`!M%"]``!`$0``P*@!`<"H`0(!]`'T
-M`:`'A3-]O]K(%CX'```````````I("((`````````9@A```@``!`!@````'+
-MHU@!WK6U_:)F<QQ+6TZ&6SY2;B(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``4#WVR:!^`;1.)%:4F=`O.LA>5AIJ'L)678D.]S<@Z.-]
-M<@KA7?%$RS7I2]&+C3O",$C735LM>\`E]AN%AQ]JV@A2TT0+3\#O\2M@920;
-M338+9]@I?V:H(,$.*-R1W_A/U8->L9\ZV'$1?ZG]90>R^_P>%>P!%;Z&#&?;
-M,._,.28I```DHEI,`'7%MNTU>J_,V9`WW^/P;$.=,P-^"A\@M^BS*-PI```<
-M``!`!-YOVH.?CMB>-V;/`L+E3;Z#,Y#2````'```0`5))Y;[+K)<JH=X'CZ%
-MP!\1%C@=TDD2MT8__@L`4`$``%`!```"````10`!3%"^``!`$0``P*@!`<"H
-M`0(!]`'T`3@''3-]O]K(%CX'ERP:!>.LE"LA("(@`````````3`B```P````
-M+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(
-M``(``'?#,,&806=XR]6,+;+I</>MH@T8@+M*G@"0,"P/J&=0'BFXSLU-1$I_
-MN&7%!]]O\*.3--[>;ZO,!U?"N<-LZ2`?[@N`WA;W-29`IQ\HGMMFDB4[2+;6
-MV.W^G0_N0`)M<8%H9`UTE/LT.M`$!=Q_BY>WF83O,J)\H:*9S3<\%5M]*0``
-M).L24Q17>9$#WZ,"`/4[+D6B&:VU#="+;[?>1CM0C2[S*0``'```0`1A!`KU
-M;9"X1JXH1=<-]1-7QW\6S0```!P``$`%'W\X5T7JNJ,=;C\[R[#FNEM7CYU)
-M$K=&IRL,``P!```,`0```@```$4``0A0OP``0!$``,"H`0'`J`$"`?0!]`#T
-M!]DS?;_:R!8^!Y<L&@7CK)0K+B`C"`````$```#L(P``T&3\I7^?*!/O\*!:
-M*4#]:*16#2*Y65Y;PY8@(<C\K(*ZP\Y5`UW:-DG<G=M\IOU]2J\&>;/QQRD=
-M$PUGV4694_/Z[M/+[V$Y@M6&Z<M;WQ;NO=2YT)\1P3`2NI7RF/U?K:IH=5/D
-M:7^[+59'B#?C:!!A,D_E^\J:JBK6H@)!F\TL:J^(1I&81F!#L:3N4>9+AP\-
-M;B8M473N/6:%`*&I'Q68P_U-J*=$9_/ZD-7WW'W0T6?,ZRTJ&7&<VQ,PIU/,
-M'E^PXZ<ZIC3%^6:D[4D2MT8M10P`O````+P````"````10``N%#```!`$0``
-MP*@!`<"H`0(!]`'T`*0&B3-]O]K(%CX'ERP:!>.LE"LN(",@`````0```)PD
-M``"`DP4VC&;;WO;A5:RJ2LG]UM;,%SKA0+VL;RGRC.4&B/Q*:]4>'"_SO..C
-ME+O?RO+]0P?)1I1MWP(%_SZLV5N".W^E0'44/J&4(/1O3BX(#0<3GGRZD>D_
-M0#GV8,0.G:S/W<L*)0$$P2%':5SH/8@EAI07OA7QYF:?03OH%TD2MT:/8PP`
-M'`$``!P!```"````10`!&%#!``!`$0``P*@!`<"H`0(!]`'T`00'Z3-]O]K(
-M%CX'ERP:!>.LE"LN("0(`````@```/PA``#@K%(M!K+4<$@,SM74CHG`LU`Z
-MS=L0F$7Z,X@+OWG]71A*V1^L.=T"=L]1D#-7E0?HA$%3D_J=5T($PR-35'9`
-M3<2WF<SJ^>(+/'?"?OI$^5*E?W`CY?;)WUC[/`!;[KAN(PF?C^,(?G>01*D?
-M+GT3I,!R&T=#PTI'!L4[IBG[!XTPK?G>#H\QG%9;4-CX7W0U\8G]%%W^/]'4
-M7]!O[Q\V9>;S2F5PN;Y1$Q)@)GS%V;/F$RV25G53B8W&"%?H-?];HLP<G'R-
-M<)9I+1#>D.LC>^-X18-SEDMK=D"YLTD2MT9L;PP`_````/P````"````10``
-M^%#"``!`$0``P*@!`<"H`0(!]`'T`.0&R3-]O]K(%CX'ERP:!>.LE"LN("0(
-M`````P```-PA``#`G>YD/3''&A/P)-7CTV>9*XJ"/,@?:+?AJ56MI-K`NCD_
-M4E^=TQJI$LL5WZ[9#:*-]'LN;:25308T'CCX4O^)`[C*ZIO4K6NY"LF(0O.[
-MC_6@8BX_^4ILBR%M%"TQU3JQ(V&T)D]$1(!=K4N-&J*#U?DT?:IPF5P:MLO*
-M/"KI!>A,1/XTH`!+<`&TJ';ZU6/IR_6^Z-OB#R0-^P21"8A&\&M)V6^53C`-
-MI7Y\,QBP[&ELA&[GA>"Q]R,;R<E)$K=&8GH,`&P```!L`````@```$4``&A0
-MPP``0!$``,"H`0'`J`$"`?0!]`!4!CDS?;_:R!8^!Y<L&@7CK)0K+B`D(```
-M``(```!,*0``,"7C-^T&]6SLM5T/QV';&!W=Q$\ZI$M=CVJ7_S;@,X^]BDSR
-MTZ(%%C=67_!#21*W1J>5#`!L````;`````(```!%``!H4,0``$`1``#`J`$!
-MP*@!`@'T`?0`5`8Y,WV_VL@6/@>7+!H%XZR4*RX@)"`````#````3"D``#!T
-M)MX$O;"<@]LN(O79YA&\!*#^]WSEY_TGM/$#8I1.-W3SCK&`ZBU[_"=K9DD2
-MMT9BL`P`/`$``#P!```"````10`!.%#%``!`$0``P*@!`<"H`0(!]`'T`20'
-M"3-]O]K(%CX'ERP:!>.LE"LN("0(````!````1PA``$`70H[,PR?$9QXL?<=
-MBG01\-?WXR0F%ZD;,8.&-'9`^07>)YWF1^&D;=PD;;;\7JT&F6R/M)0Y#"'W
-M#%JEIU0)SU?C5,,0?[%M^%R-P[UQXH3MNWP[LIA`-7&2>&E?TBU@*/??;QXB
-MEK+B3GY@ZX'34M(H!AYHVZE)[`$934>=>$Q71'DJT\/@32)S$Y$7-&357*5V
-MK=F?TAZU^,8@;'U.GBR/T%ZNP[]D0[/:.[_P.22RN'''S0!MZ<.6C;0=GTZL
-M>H>?5NUAW;6:Q?F';/Y:S)::A?F/$9PKGAQ!=YMG>[[Z\;$T&GNZ9)L+#A@C
-MSF!T4!E&27`GHI"%U"YX21*W1M:[#``<`0``'`$```(```!%``$84,8``$`1
-M``#`J`$!P*@!`@'T`?0!!`?I,WV_VL@6/@>7+!H%XZR4*RX@)`@````%````
-M_"$``.#2BE"A"Z:,N?.W8K!6,\6-:+4GE(ZFBNY9'+^L#AH=JPS`$_C`_E`]
-M[W&%\4\)Z!8Q6^J"VU7M'R[;X62.X@>:@EU.:*%R>=4$ZB4!'!RQANA"LJ?0
-M_%B7SFI7KCU)KA4>IS'*6\D05Q[@9F)G[=<1G#QQ.+5!;&].WF;=8$".%<P4
-M+N(#5\6S0SXDZ*)MCOOH'>(1`"W#`+N%N;L7?OO96'?(F*&NC_W"Q.'H^=NP
-M(1/7CB#![R3Y(QR7N+DL:WQ2ZSIGLXD7$FA,1KM6"3)N`FUYH-K,1+7%0O]8
-M21*W1A/+#`#L````[`````(```!%``#H4,<``$`1``#`J`$!P*@!`@'T`?0`
-MU`:Y,WV_VL@6/@>7+!H%XZR4*RX@)"`````$````S"$``+!`7%IFO3`SFB22
-M\("`/=IE-R^_T0*I?:KK@"!ORXPP@19EWC=@7Q`S#8ABM0JH$N&=+DT_JM/L
-M`H"NEU1M5-OYO,+'XPP5)I``6ZV"433&`V?\;$N5L2\@T]*Q*7YD70K2+&^L
-MO+H0=4.9.<Y1OV2S`4`.GSOK^!^YV#6&ZN1S(^8KO"Y9J!Y[`\V5ZN-3"EH&
-M!C0Y[:>V>F&<R;42$[/;,#`Q:CXR?1!3P('U21*W1BON#`#L````[`````(`
-M``!%``#H4,@``$`1``#`J`$!P*@!`@'T`?0`U`:Y,WV_VL@6/@>7+!H%XZR4
-M*RX@)"`````%````S"$``+#'T-T\JN%)5(&]OPDO4)Y>1=!X'/:L!5_H<$M\
-M]!U9BTT*<$V&\XQ0P7Q(YB\?OTW.6GRO2$[B94MM[?J4:\RC&1<`EW;&Y85S
-M2G&J8Z#.KF\SUUZ:E@V!MOBHXN7AL]1DQM"\W6<')SNB'D./0A[@!C.WLBV$
-MXM<SZ9D2]"LLNGH%;8U97WY1,2"NOQT.WCM?G4\CA]7\A7*7YF5R+946/0$6
-MH[CA3#;M^J2K21*W1ND+#0`\`0``/`$```(```!%``$X4,D``$`1``#`J`$!
-MP*@!`@'T`?0!)`<),WV_VL@6/@>7+!H%XZR4*RX@)`@````&```!'"$``0#P
-MM<+*\C@TW[%81[F`BYEK$P%X6RX6G;_>81R1?TK1J@:!")KJ@8(,/AGS6EZZ
-MF4Z,2W]Z-/&=\\%#_')I"8?_+;]I8VR[,DX`EK7"?_ET$'ZFN:C[J1L!U'R6
-M>PBOY<7="`B!G;4H@QW4'O^$?[&\H'.RWZ1/BNF`44R0\L(T_'\H&52.9EVE
-M(NF.RQ'H\VG/NWDT+H1FQM@51KQL(`VY5QCLY'[N$<4M1U$"PW\"U?<WX6]Y
-M0B8SR$!(E.#CP"J>QI6HF_9$ZQW:.A$",#>]^A,LLP#K*U\<%6V^A,CM`T&&
-ME_RF2I*<DA)T0-J1==4IV^>G3*C46D^4XQ!)$K=&RA<-`!P!```<`0```@``
-M`$4``1A0R@``0!$``,"H`0'`J`$"`?0!]`$$!^DS?;_:R!8^!Y<L&@7CK)0K
-M+B`D"`````<```#\(0``X!MN:-P>H'NV1SY33[#G9YV[3,QO+&'&GJH*XS;6
-MUO"<]`:/[9TH52D/DRN+6V-SZ`2R[OJ+S#!HU6R7HFHWYU69$:Z9=GX6;1[[
-M,YE+ZB[EGSQU;75QT3G*G,\E"JSZ[*,'WCPP:'#"(EZNTF+%R*GH!.:UOS-=
-M*G@R=@3$GK$J;M8NM'D,^ZE5Z="F(IY?UKP1D40>8;Q7ZH*]XT34L]%-_VST
-MTFK4!BK?*K)?8+8!3$I%]J_6IWJT+PIL':<)D8.<ALK+Y!&"13ACWJ,'N5_"
-M9X$(;C*<NXW??1])$K=&4"<-`.P```#L`````@```$4``.A0RP``0!$``,"H
-M`0'`J`$"`?0!]`#4!KDS?;_:R!8^!Y<L&@7CK)0K+B`D(`````8```#,(0``
-ML'N'`.;M\D\]O<O9YBM=U[$W@0&O^KUS\U4N=5$PA"YJS)X%V':UJ4C/",AX
-MH'S6&F10QL'&9$SKU$MHP].[%SJX<4PM*SHI"HK&6-[<B@9Y)>3,'0>:8M=A
-ME/B6T'#&8O$*,NTYC[9B]:ZK+0&<Z;MVIH@S$F'4^S!(>Z:4G%,7-?C#K/!<
-MWNUG#\/6Z$;CZ+6(U!/82PN2.;K!U]N;-@""O7ANDO6+YO/RVS])$K=&G$D-
-M`.P```#L`````@```$4``.A0S```0!$``,"H`0'`J`$"`?0!]`#4!KDS?;_:
-MR!8^!Y<L&@7CK)0K+B`D(`````<```#,(0``L-6*=DAN#0GDQ5M`^`K,>4JE
-MYNW/;=1E+W'$W:*5WY<L*VCQ=ELIP-ZQ'%M<K2N;J?V7_JY6XD.BZ?,`NX`;
-M<V08;ME.GCQ"ZQN4^6Q*SBRA/9TV>3)4#$)XO$W9>@0"1<3G3K0:?YMCHH!/
-M%N#6UKF8`HKL?PDXHN^SX0ER]NUOO^Q<Q`0CK)<&^,D*[L*;"Q5R6;PB%^%+
-M#;BW:M4]/CKQJ<DB/W2+,@0F<L!)$K=&>F\-`(P!``",`0```@```$4``8A0
-MS0``0!$``,"H`0'`J`$"`?0!]`%T!UDS?;_:R!8^!Y<L&@7CK)0K+B`D"```
-M``@```%L(0`!4!]0;9T.OBLG&+X*1(WW999;\K,32;:YJY]*<:@+@+K;81#&
-M[[<<FQ(<J'8:>RA<R+$MT8.?+:5G0@6Y.2.?9)Z29C"V`F`YD.'4<[_)VUVP
-MXQP(!OG)'MY,4@C#4GA8@*M@>(,.WS.Q#O83+$Y,HN7B<&I/JA9>TS%]>62W
-M$;6HH#Q$1@<EGH@$TXBD"X"3PU<%#XZF@7R#K8AH2DJS3V7?N;)%?Q'HH*[C
-M03#"$G%#<B/H\'H\=0A"W2$'%#Z;Z'0:`"B=PC;K;GVPWBOV.T7:5.$#+N:<
-MAZMWL^&7&[B\2N&DMDIB4F2A&S:"L'+[:=-J?_\;4)6L?K8G6Q%\J7C^V];V
-MZO8#$`.T(2$@'$>JR0>=/5CKQ$5*^S*CHW'-%G*VW%_]M3"[;B*YC.KOTZ9(
-M:YX/+_N3+LLW9^#7:9%H7G$K>0?Y<U,Y?]FJ21*W1F&C#0!<`0``7`$```(`
-M``!%``%84,X``$`1``#`J`$!P*@!`@'T`?0!1`<I,WV_VL@6/@>7+!H%XZR4
-M*RX@)"`````(```!/"$``2#]#RAR[V8&R($>5(XK$7,@:@Y.Z`S"^%@DQ@T*
-M-YEEO/9OW*=L:8V-,`],A9>F&#\YO)<?VLVJ<9.4]T<WV,N>%+%O/%+*:?9>
-MZT<>3R5>57MN*^Z4CL9^49E2E=[#\X>OG@+0>;=QW:X;D;N!B,J?UD&G1^=N
-M4T/B+-HMH.T[GG6+.;D:+&.^%SKD/HX_J>1=M\TK3%)N)Q1'^J/IT;\$;BR*
-M/9D$JOIRK;31DT1II8Y#P_)?'>7%^ID'G3P]1T_F<:)AM=A6>ZD'>6D0)H6<
-M<(_JI>@J+E"AM3U:X2*)B^//>GSS'FO8TK?&7L_ZF-._)PJ!+U[6/\1D(L@-
-M9P-N*_+7>']MX2R]GB)L1]9&-YHTL_P)Q;4'Y]G%.DD2MT8?R@T`?````'P`
-M```"````10``>%#/``!`$0``P*@!`<"H`0(!]`'T`&0&2<@29T@>AC)_(13-
-M;6?1U98N("4(`````````%PJ``!`(%0EH>:'!-VO`>MC]9433A$>"K#B/;E(
-M1H>T!=O%R3GT3G@/BBYX7$:6.ML9OW-JV?'N)./.3#$F/,P<21*W1L/6#0!L
-M````;`````(```!%``!H4-```$`1``#`J`$!P*@!`@'T`?0`5`8YR!)G2!Z&
-M,G\A%,UM9]'5EBX@)2``````````3````#"<9698K#W!FF[$(_U_&)P2G]5@
-M8*)43A%/I%+:(1W<F=>VX\0BIG`]*L1=^TD2MT9[Y@T`;````&P````"````
-M10``:%#1``!`$0``P*@!`<"H`0(!]`'T`%0&.<@29T@>AC)_(13-;6?1U98N
-M("4(`````0```$PJ```P,(C6=RX6/T9!-I:VG71NF&#@VB<G0,2@(8*3OE*K
-M-*="]'.A(%K,T70;LY])$K=&P?,-`&P```!L`````@```$4``&A0T@``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CG($F=('H8R?R$4S6UGT=66+B`E(`````$```!,
-M````,%'MBJ\JB+YP2#DD1GG?BMC3:%+?MAQ24YH#U!8Y]S@15V?N+/N(L2ZU
-MUC3!21*W1EKN#@"8`0``F`$```(```!%``&44-,``$`1``#`J`$!P*@!`@'T
-M`?0!@`=EFBH6E/<M&5```````````"$@(@@````````!>"("`'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``AONM?&\&1"`OI+Z:-!>54VL"
-M/:/8K13\YJ^;!W=_AXZ87Z31<A+D67?*'MXCH@'"#X@!-6Y'G,K)A0U-'MON
-M90UQ))0-I>[`[GK$PO("2N__0CTV-BR>HC6C7$?]@SNQ0LB.B*5?ET%H`H)Y
-MF`RO/X=V_Y3SWQ4:O"+"_[$.Y>4I```D#3]XAOAZ6LA&A@98OH>)/J)RF2B4
-M4=M<-FR"`'ZS%N8I```<``!`!!H+AQ#3F>_#A]8U.N=7L1ZJ['2V````'```
-M0`49@G\&C>YHV6`T/5UFH=E(>03A]4D2MT9L_0X`7````%P````"````10``
-M6%#4``!`$0``P*@!`<"H`0(!]`'T`$0&*9HJ%I3W+1E0```````````I("(@
-M`````````#P````@``!`!@````$E^RJ!Y7\\WU8K1%;6Q'WRPO\[K$D2MT8/
-M#0\`N`$``+@!```"````10`!M%#5``!`$0``P*@!`<"H`0(!]`'T`:`'A9HJ
-M%I3W+1E0```````````I("((`````````9@A```@``!`!@````$E^RJ!Y7\\
-MWU8K1%;6Q'WRPO\[K"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``AONM?&\&1"`OI+Z:-!>54VL"/:/8K13\YJ^;!W=_AXZ87Z31<A+D
-M67?*'MXCH@'"#X@!-6Y'G,K)A0U-'MON90UQ))0-I>[`[GK$PO("2N__0CTV
-M-BR>HC6C7$?]@SNQ0LB.B*5?ET%H`H)YF`RO/X=V_Y3SWQ4:O"+"_[$.Y>4I
-M```D#3]XAOAZ6LA&A@98OH>)/J)RF2B44=M<-FR"`'ZS%N8I```<``!`!!H+
-MAQ#3F>_#A]8U.N=7L1ZJ['2V````'```0`49@G\&C>YHV6`T/5UFH=E(>03A
-M]4D2MT:&,0\`4`$``%`!```"````10`!3%#6``!`$0``P*@!`<"H`0(!]`'T
-M`3@''9HJ%I3W+1E0+9^$52]QUWPA("(@`````````3`B```P````+`$!``0#
-M```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``&IE
-M9SJA1)P3\G_Z?>-]ZIGFQEV:LH47W9/T%P(826=QM1A3BK*^3G-IJ'&N=0UE
-MLLQ6]LH;U=KSA3:>N/EK>:H)#11M!#AN,Y:UJ#U_+59*91SIJ<C'F<G=;C!Q
-MRZHEA)X@-.09FG^V79F,4/PDH^O`$&]UH'=-85B[:/8\X_(E*0``)!GUHIZ&
-M*,Q>[`?V(3D#1;<B05MTJXDI>!3AL!2HDJB0*0``'```0`0PZ7?NVEB*V.?[
-M_5!(:LCV3.P6>0```!P``$`%^`(0=I'E3W@`*8=F)%K/KSG#>I]*$K=&_1T`
-M``P!```,`0```@```$4``0A0UP``0!$``,"H`0'`J`$"`?0!]`#T!]F:*A:4
-M]RT94"V?A%4O<==\+B`C"`````$```#L(P``T*^<8?!]6'_X`YV>A.R_I-;9
-M%T`M`-."*AHNTIK*`]9(@ZT.,W9*]P[<QX0;;'Q`"Y(V]^.>JG34WN@'$)#7
-M`T5%Z&.&2CEF_@=MBH9TR`MC<XI*,!`JBBVIVUF\!Z*/3P;MS[S5L]\9\S3=
-MV7\:PHC&O5IN&UY4#LR/",^C@(=B2^FJ&M^43227QM2D,-*<U5_._0?^1J<2
-MIF'Z7<W""[UVS`?_T>2A@@=*1Z=Z*8Z"W8XMYOK-UU!14&V*+N$BMN=\;L5,
-M0J9&_/:"5DH2MT;6-P``O````+P````"````10``N%#8``!`$0``P*@!`<"H
-M`0(!]`'T`*0&B9HJ%I3W+1E0+9^$52]QUWPN(",@`````0```)PD``"`$9VN
-MC'_-'DJ>YDW)ZN)^`_%N/`0L.$>&>YJ2!JWM51V7X)[TX+6`X%*U&C*!U#L0
-M(F/K,'^;`SM<X>O;A^EA3;^6K;X3SI,Z5Y;Q.5P$TV^K\S>>*5K1*$OIUH##
-MW;;O:<B8PNATSB/@8`L2^@?[,M;TE'+?7X69:\K4"DH2MT:Q5@``'`$``!P!
-M```"````10`!&%#9``!`$0``P*@!`<"H`0(!]`'T`00'Z9HJ%I3W+1E0+9^$
-M52]QUWPN("0(`````@```/PA``#@2/SNZ3>0'RQ%&703W?I(.US^DUX7>4]L
-M<2GE?/<(/=V<4@MAF=5@9\0HC4(QERBK\9)34=G/;+5U!G\R/1_+\D&6>/LH
-M-P.@QK_3MW%*9#&%S2>%Q<7@\O#&4HR;TI/^,W"U`7'K.03L,Q2KBT%P\AF%
-M^=:C5`D(XT)_OV@G;-*.IVS:YKNN[C,A>3O%-%ZMG*@=]W+,GZ!LRP&7]*1,
-M#A&3!8G[L9[\&/9<[C>VLE/AVM_KK3A"85C4UJPZSL8$H14\Q2_(:C-MF'50
-M]UZ[]&>4_N4F&MIY_T,Z&4H2MT:T8@``_````/P````"````10``^%#:``!`
-M$0``P*@!`<"H`0(!]`'T`.0&R9HJ%I3W+1E0+9^$52]QUWPN("0(`````P``
-M`-PA``#`:!)B=<JYP#WP2MT)YA?>-<Z+4NW[BN@UTE4XH*.8/5V2F]ZNZGX)
-M$:[_S+LU\'/@*O22@Q#3(LVQ?ZRAO02<D&['33++_!P4!NDX,1FKIH5/K0Q*
-M(*&'OUX`BI7N;0*:_M0Y#+S]T"'8N#^"7,6/E5/#7M_L^FTO=OD-%C,>8U_F
-M06]G.MSU58/1]D<J5PW8@(8W51VO)\)^B$1@&QLB]X39,&]T'(2-?F?,?SB'
-MM,F.:K5EYOLHKYK$1QA*$K=&1&T``&P```!L`````@```$4``&A0VP``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CF:*A:4]RT94"V?A%4O<==\+B`D(`````(```!,
-M*0``,)+!AQ(W>:,9]EW6(<N&:IB+VE?^8'*(HS1B=E,WXQQEK8%_R\%>^Z?'
-MIR)-2A*W1C^)``!L````;`````(```!%``!H4-P``$`1``#`J`$!P*@!`@'T
-M`?0`5`8YFBH6E/<M&5`MGX15+W'7?"X@)"`````#````3"D``#"41"MH#(66
-M3TJ6IZPUS.UV+01#Z)SN$AB.*L['LF;$/^`A754V:,N2!GVA<DH2MT;9I```
-M/`$``#P!```"````10`!.%#=``!`$0``P*@!`<"H`0(!]`'T`20'"9HJ%I3W
-M+1E0+9^$52]QUWPN("0(````!````1PA``$`1N)\3/KY1F5E]9Q(F-"^>`NB
-M&/S<=%=G\D)(=DI=8?Z.*@K8U9ETO6:ZI"78,&!R\^+AZO6>^PLH3Y/R04.<
-MEK'J<Z<N!Y.'!2T+59]_<F?B*`C[M2,O;CH#)EK90OF>JTX'\3L`YN[KO!>V
-MU6[1-Z_/GR994A(2]AIIN1XC7`6S"(9.VB9#)40$:X>>_5!3XMLW6$S)34.X
-M.0TVI&RRI,0A"4<\<).)$O*7N@=5$LP\3,+@_\';O?%U']?=D1NHDBO6;:[3
-M3PL63I%'&!!%(@X),MIIG)AF]R`^1PRD3*G1J8$">P<9AI[D4-*'1K',*<&9
-M&Q^?G?"[%K@72A*W1K.P```<`0``'`$```(```!%``$84-X``$`1``#`J`$!
-MP*@!`@'T`?0!!`?IFBH6E/<M&5`MGX15+W'7?"X@)`@````%````_"$``."R
-MU>:`6*3]IE&JF]F$1WZP[UZ9HMRB8"Q*5ML@\;>ZMD;WT=2_[U96B;A<LWS5
-M]ISO!2H47FWU;^E8`+47'X?:P4XG,P8(^EWT(R_Z9N*2*HZ>&FG\'[.E6=@8
-MI6[M/B@4B9]FJ#T=^7Z67?B,?3=_XEJ^?Z[E$H8H"_1=N4X-2=')JRL[5F$%
-M]]8:MV:G\><N$LH@XS"@GX$2NLL#LEP"V]>1/9ES*Q39%[TZ6,SHV+HI.36*
-MB/`:;#;6[`0#,:,$R=B1^IW/ML4X/CB1?.&A]H'COY')W,'SQS`A2A*W1J?`
-M``#L````[`````(```!%``#H4-\``$`1``#`J`$!P*@!`@'T`?0`U`:YFBH6
-ME/<M&5`MGX15+W'7?"X@)"`````$````S"$``+!AEA:0"<AYA.0?3M;3*W<:
-MFNB7V>S+>,NM`\VDZ6T'$)[X512D^]0MN;8];IGLD#7V^>B\3G0O?96$".\G
-MWV)8]C;.-X*K9?2!>!2250?;*F.-]7F_^[:<8U>%3?T=\^_:(:.!T'K)T?-D
-MF(9N4O,BXHIFO6<M,893!5A+5TM8"R59QV0M2SQSW9QDW0EQR[781PNV[OA0
-M]97$S@HZ3[Q$0/09H=?>)"(]\H)U2A*W1BOC``#L````[`````(```!%``#H
-M4.```$`1``#`J`$!P*@!`@'T`?0`U`:YFBH6E/<M&5`MGX15+W'7?"X@)"``
-M```%````S"$``+`VBV8M7[MY@JA5R11KCV121F$PH(`#=\CNQ[Q3^G>BP*S`
-MU@UY?F?YC9JW]('AZFV>L(>J>C27ND4A]UIE!8A#LI%V2]EC44*ZRF&3B-=#
-M<0``,@"K1,[(HUVSP[N,J[?N-[@:-<87+?B`UB.G4\)2R-]O!&7E\;\ZKJNO
-MZ13)N*Z$*PM2J!TC,51),(D>$L!XS%U$SZ(#@>7&LQ\_W.D.[W\0-[PK9HRG
-M^RO:2A*W1@L``0`\`0``/`$```(```!%``$X4.$``$`1``#`J`$!P*@!`@'T
-M`?0!)`<)FBH6E/<M&5`MGX15+W'7?"X@)`@````&```!'"$``0`\Q$6M`)#C
-MSO,8J2S\*SEZGO'AS4!SX0I2>FKC=FS:4K5W!T_E.$&3]@K$EC)#8\L(2A\F
-M<!/1-U"Y@YYU!JO(BNKA&^_$XGEF.RF5QOU5J.Q\:HDK)^0.`>?I@>+T^U@.
-MN0F^,L(O-N-Y4?]%\6K9!J#]%Q!F&YM1)6B[20*[+)>>U_<VUA-8OO3G5GL0
-MK&S@.MKF@0$;5OYETU2`S=%Z\UX/F$+SPKTR?T//\6P/@,(9-XP:$BAA@T\U
-MS]W1%7U8#T.+NQGVK&T9&H.SMB3O,@G\SQ]EZZMFP-M7_WJX_G*53WU%C3&E
-MQJ82HDK=)=$1\U;+/<SOMKZ:%P!*$K=&\@L!`!P!```<`0```@```$4``1A0
-MX@``0!$``,"H`0'`J`$"`?0!]`$$!^F:*A:4]RT94"V?A%4O<==\+B`D"```
-M``<```#\(0``X%DE1@YWM^().7!A@!^ZZOQMK^ICW6B+0C<SSD@!F<#(LY1Q
-MO9XET(9`QA4T9.XP;@WDOVMEW'V&GSMWZR979J-K"(LH_TNB@^QQV/P[]B2\
-MSQWYX#P6/5C2VJ\MSYC3P=EN_SKKV$WB(7@K7^';COZG6Z%S.QO]K1:_S4)^
-M:]UL2).Z37QR$*:;_&F0X/U1V:%5YW]`E0JBZG0O$^[^15(N\;"8ZX2GAO>>
-MZ>P.UQ#PSV+E(#1E/=J0E;O=B?CRE@L.4HM*5B/'D2UW.EV^_%KJP!\^&JE)
-MU)/<XT)*$K=&E!P!`.P```#L`````@```$4``.A0XP``0!$``,"H`0'`J`$"
-M`?0!]`#4!KF:*A:4]RT94"V?A%4O<==\+B`D(`````8```#,(0``L%U0E0!T
-MJ"Z2S<VDF7-')YJ_]MI"?SX5NM8,%Z+=G?3!!<.!,37UWQ(&ESF*'G"2):!#
-M/CXZ_66'=*DA(2=C#M7K#*.-#LT$,(C.IUW)^KT9ZD,5%_4A4RJ1^^7<3R0@
-MUIB,T\UIJ$R(8Z!2AY9H+YG9:ZGO8V;M_L[5#Y8$:`G.QMYONMZX#UBZ2[!X
-MA]S'-[+4/K%3'+@?.YQW\-Q]!=@[`>,/S7*2$?.9S9Y*$K=&^3X!`.P```#L
-M`````@```$4``.A0Y```0!$``,"H`0'`J`$"`?0!]`#4!KF:*A:4]RT94"V?
-MA%4O<==\+B`D(`````<```#,(0``L!PX?(D0U4CK+)VA"1_#]0/Z<,A*`CY^
-M(Q5)I[.P><OV<AE<UN]@"]&7]P2S^7S/Y/QQ!+T`#C$+B50MY_VU98D]F5H7
-M]=0SI>E7@Z\:[Q^H560=*<4Z'[<^H<2)<7-$&H-*U6VALOARP_/J;J_32GFV
-M6-[!28&J=<OHN'<,,T8"A'US<JJ=NG\K#J;%B5TW7$L!%1K>.#B^`=[97J1Y
-M'T2T-T.\;GUC<]D<K.M*$K=&T&4!`(P!``",`0```@```$4``8A0Y0``0!$`
-M`,"H`0'`J`$"`?0!]`%T!UF:*A:4]RT94"V?A%4O<==\+B`D"`````@```%L
-M(0`!4'7`L&VI`U+VH$H#1&]S0'3M'WP#(_=WS\92;,'-PHN"/!0"\CWKI3IE
-M%[:-QCC4+\&7YL4S<CR[@P3I.$HEKW7T,-/@9!)&!!/M0A-.$Q^XG=;2R&KN
-M":;JH-U\",Q0+[PR&<-1H7"25MSJ7F21\.7;9T&CIGO'=LQU5%#;(XCP&RT;
-M^+<:A_#DO0+SG@J8#M;94H\9'7N-+[MSZ>ML(/:-YJ#KI'>0:U&K1G-V)ET5
-MS8UP];<AA"##C2^OX[@>D%).5VNCWLV/[2+">K"J0=3=UX\59:ZA213TQEGM
-M9B*H6FRB^Z`KR"C?7F&U&*Y`F,AVYVH7S^@`-W.'^RUWP\ZO9>5*C/9B$D7*
-MQ.YAXW8<>#=OZ[96'=&Q'?431ILXS>C]]W8)DRQDE<;IV-55(7\V6&#!*#L]
-MGR@2YJ`]C\6?85?)9D0?KSIO/O/A2A*W1J.9`0!<`0``7`$```(```!%``%8
-M4.8``$`1``#`J`$!P*@!`@'T`?0!1`<IFBH6E/<M&5`MGX15+W'7?"X@)"``
-M```(```!/"$``2#:E*JNB<;[O/XNRVP[.0$+D637YN,.XTCR+VA=T1$9HZ_;
-M&=@5^-W",0G!2H4ES)*0WY=[<$$O?_2),/X\(1V`/'LX03RVZ%_N!UH&?@.0
-M/0E\'!<%7FK/XIX+_^M2:M7(>A@4(P,WG\CGS<F$/]=N2QY1J85Y-OWS&55S
-ML8P@<O`PDQXF;8%FYLNZZ4^HO?SMQ8)O09L-Z,DXGB7DXK2!ED%`)45T8X-'
-MM7#_H/%T\_M#Y=X0\*0N+C5`F$)Z&3;GL(1D-??K%*8(F8FG(=CB[MU2:F-J
-M(RJI*)LKMYU>4&X1*R`<^"IZ1LCP7YFJJ#?(/<29E(B=I=(9]C52W^7AP_H'
-M3D'O2Q^U-[B-\YS/H4<78I`$>"?29OJL?4H2MT;9P`$`?````'P````"````
-M10``>%#G``!`$0``P*@!`<"H`0(!]`'T`&0&24)6056SEN8$R/N^Y).4A'XN
-M("4(`````````%PJ``!`!/4$:R%8+'G)<`A_S>DV%&S5@?XN-#L5=_4U1M1(
-MDY-)>GIO/<.#7\P!>!7A^Z!*'3=49+<CG++S)C$:2A*W1ES,`0!L````;```
-M``(```!%``!H4.@``$`1``#`J`$!P*@!`@'T`?0`5`8Y0E9!5;.6Y@3(^[[D
-MDY2$?BX@)2``````````3````#`"JR$;'U:6$FD:Y[^-_>FS8[1*3?]P.EB,
-MGC[>/FP<\(!;OIB\846ZMKZU[4H2MT;FV@$`;````&P````"````10``:%#I
-M``!`$0``P*@!`<"H`0(!]`'T`%0&.4)6056SEN8$R/N^Y).4A'XN("4(````
-M`0```$PJ```PH5QW!#;&`78S[D'SS9L&L?T):86]4;/9!9$1#!B@S'SZR8A3
-MHBY?OCF%C$I*$K=&TN@!`&P```!L`````@```$4``&A0Z@``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CE"5D%5LY;F!,C[ON23E(1^+B`E(`````$```!,````,*)<
-MYUUON?^+NYWA?/\8>-PO*><'@MZ#1/)OZ"N$3-E?2=6!%M;\-8+A!=462A*W
-M1GWF`@"8`0``F`$```(```!%``&44.L``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M8RT0C<X;3*```````````"$@(@@````````!>"(#`'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``UP7*D!WA<.F*3%$U1(QQQ_)S)<;K_G"9
-M:F$&W?2@_=-BP%P>ZJ(?Q@\70KTKI.?E;CSDVO!9QW.`?1)"6W42D.LRYFW.
-ME*/ROBX!!DJR]31':PY,;M$A$X"MD=9N/?G]\0?R)"N790!0AETS"KWG2+O*
-M'2,1A4YF-%P!-X;ID/LI```DW!]MW1YY*&D7SP2<"Z`9$'3$HW#L]:1XL2L]
-MQ;7+\T8I```<``!`!%(U6RF#8E3WC^NZET0*_"HO<"0?````'```0`6]U93K
-M?;4#0WNE\W\NB&@!*T.GZTH2MT;O]`(`7````%P````"````10``6%#L``!`
-M$0``P*@!`<"H`0(!]`'T`$0&*6,M$(W.&TR@```````````I("(@````````
-M`#P````@``!`!@````$>6E)("Y]A`W,1L)&1;R>MO4).3$H2MT:?!`,`N`$`
-M`+@!```"````10`!M%#M``!`$0``P*@!`<"H`0(!]`'T`:`'A6,M$(W.&TR@
-M```````````I("((`````````9@A```@``!`!@````$>6E)("Y]A`W,1L)&1
-M;R>MO4).3"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MUP7*D!WA<.F*3%$U1(QQQ_)S)<;K_G"9:F$&W?2@_=-BP%P>ZJ(?Q@\70KTK
-MI.?E;CSDVO!9QW.`?1)"6W42D.LRYFW.E*/ROBX!!DJR]31':PY,;M$A$X"M
-MD=9N/?G]\0?R)"N790!0AETS"KWG2+O*'2,1A4YF-%P!-X;ID/LI```DW!]M
-MW1YY*&D7SP2<"Z`9$'3$HW#L]:1XL2L]Q;7+\T8I```<``!`!%(U6RF#8E3W
-MC^NZET0*_"HO<"0?````'```0`6]U93K?;4#0WNE\W\NB&@!*T.GZTH2MT:[
-M*`,`4`$``%`!```"````10`!3%#N``!`$0``P*@!`<"H`0(!]`'T`3@''6,M
-M$(W.&TR@;9-$#V0,[W0A("(@`````````3`B```P````+`$!``0#```,`0``
-M#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``!B&Z!X^AN'Y
-MC2QQX-2;A$+I\IS!7W3!9O^BL-YI9<!%3XIWD#X[.U?`U`0F@X==A7@TATJ[
-MC852I`E)_L?>U1WW:GC[M-!7*9,=8!AE@/==^ZW]YQ#7'2,7MT#?6&FR\I`F
-M2.DP<33F/4`+WVB_SW)<AJIU;A*9.=SG5_[:9Q!4*0``)`^D_Z?W%$L>J+N3
-M;RHY/7CUWUI$TO34>-;^GFMY`:^4*0``'```0`2LW"5#R1>GCRQM=!Z<X5TR
-M[JK$3````!P``$`%H)QO]T^Y(1/)C6U2';"/,-1@HYQ*$K=&&%8#``P!```,
-M`0```@```$4``0A0[P``0!$``,"H`0'`J`$"`?0!]`#T!]EC+1"-SAM,H&V3
-M1`]D#.]T+B`C"`````$```#L(P``T*OLFAG467F*GZZ,+YLT/6?C3CX;Z_7F
-MPPG[U6X55YU.5?98.E/L-*M^T4&*^PLW9P5RNQY69B%?%!^.[U2Q8_?R)9KD
-MH5'3A^RJ(TB1OKA2+MB%5R@&T_S@_+`E?`?6E>"/2OA2A5UD"KPO$DHI50(9
-MM1-N`XCHTO1VC9&:P@8W0#IT:`HQH>,>EXI6B]!^AR8!P.S!PGG!!_?\:IRG
-M'Z8MDB)=*&:)AZ?"OM<=^3BPVX?W=MJ(*EIV_R3JTO>,5Q!>W(9P[+[NYXJ+
-MMDH2MT:F;@,`O````+P````"````10``N%#P``!`$0``P*@!`<"H`0(!]`'T
-M`*0&B6,M$(W.&TR@;9-$#V0,[W0N(",@`````0```)PD``"`&T\0%+\!#HT<
-M%WH?H+06%?N_WD&X%:.W-[X`S!'&Y]IGSI]F*ZT;HRO)[J+7OYZVP;+M__23
-M*46!/4-+P-C#@E'@$C'5LADQ^SPS]9X?-1LCZ/=M;`I]%J/%32KW#6F(J#8Z
-MRF<&*2[6>;QS;XY-\`A[&P?O=7+8&IRW[DH2MT87C@,`'`$``!P!```"````
-M10`!&%#Q``!`$0``P*@!`<"H`0(!]`'T`00'Z6,M$(W.&TR@;9-$#V0,[W0N
-M("0(`````@```/PA``#@TTB4NL(87XS+:#1\9GQ2/_-YB$?ZC(%L$FC6D&(/
-M`83.?"87+<4];]J=P'#KMX2-[U"*E/X*!\E?Q\S)'>"WI"$J+-X,!4IT"`,!
-M;]:$,8SR0$A=`&'/F]@)KCG#YFHN1;].S,QL7[8`(SSIG,X%<9IZXP0;[E7Z
-M+P0A[B:>TVG"=M.RPGN#PIBU%.KW`EMGEK3H3EEEW!P^>;34C^-I*ULU&9W@
-M`R&UI*SX`=3!``20Y>[A>IJ%=S#V#,R$-7*!`*+6IDV2/+'BT$3^)(B#)//-
-M4=-LA;+')!(CZTH2MT9:F0,`_````/P````"````10``^%#R``!`$0``P*@!
-M`<"H`0(!]`'T`.0&R6,M$(W.&TR@;9-$#V0,[W0N("0(`````P```-PA``#`
-M<RK(4I^-,\D3+<LA=W^"+0Y91W:K>09)%`YGEAI=@V?I-WJ3`+9ED7PF+N`F
-M&9Z3/R)2HT8<;[N&F[8:72S[?Y1<P5\=-_GL?:9_P9$0$&1[H]-ZT`('5;UX
-M(W%@0*9R;^_XWJ4LH=5B=IB\R&;SL$64\36VPL,"6(W/;.[M.%69WJ*KU_/M
-M&@JJ"NC,Z,@N+8`__'43%GAHP9:;Q"]&@^*8>;*F$6[<,H=AAPN`FD:C0$PF
-M5X)R&1D/Z'!*$K=&JZ0#`&P```!L`````@```$4``&A0\P``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CEC+1"-SAM,H&V31`]D#.]T+B`D(`````(```!,*0``,$SZ
-MA8E\U<N&N5<@KW*5GIU[3M'NMB*U^#9=TA?">J;?HS0SA95\#\O&Y&JD2A*W
-M1B_``P!L````;`````(```!%``!H4/0``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-M8RT0C<X;3*!MDT0/9`SO="X@)"`````#````3"D``#`0)\G%95Z_+.&L?OED
-M74@LA4)^\)/\T:KX=+TWB,O9`:XB>A4!6+ZX![Q634H2MT;KV@,`/`$``#P!
-M```"````10`!.%#U``!`$0``P*@!`<"H`0(!]`'T`20'"6,M$(W.&TR@;9-$
-M#V0,[W0N("0(````!````1PA``$`4T8''P@/,W#]1(_&,Q]Q6#TCYX0B*!MN
-MO>8_J%<A$LR[2'X;HFNE_JUH;]8@XL%SR049!<U,OI,^2";N9+[/]6GU.FX$
-MQT33B-0?)TZ.-Q$SO=,.*?F3Y\WI]+C'!9N)=4$*RDL`5IN54./6,M6ZNJ?M
-M2__K/-WL`Y'9#DS2YH2=2C(20SC.0<3>36\(>)+;X`3\8]^:7OC=;M:P'Y*Z
-M`O!6&K]T[)SK"^IKX4R+G5L:CW-218[#/^4+$V!BV/=7,28P0]S@KWM+RQN6
-MFKVA7S`@@MBE`G\]HUG/K&69A(1(<?53=BVH8^:EWX[9%?Z4XRA5%(5R$#>T
-MH!;72A*W1OKF`P`<`0``'`$```(```!%``$84/8``$`1``#`J`$!P*@!`@'T
-M`?0!!`?I8RT0C<X;3*!MDT0/9`SO="X@)`@````%````_"$``.#\R)'H*XG.
-M"S:":.\6O6"J'&U%9@8E<)/:TT\<VG434]5CA35/XE@^)4O6[=934;!ZT.;F
-M,J!+TW6`S_5S)FZ'N8_@XIJCT/]8_RXT(BUCJ_:E:?CK^QO%P^PRM?D@!IL#
-M!Q8?7RP2KU40.]]DX8!3CQA!0M-?61%90ZNB,G^LWND6:J+2?'SJ\4")[D+U
-MMTOGDX8^)<;\E%6V0..(D$-/R7NK+#/B3V=:/!)YWX[XVO=+E'XT086@_IVZ
-MKJP%6?W=QUEE(7SKGV%@G/YAL41%"X3,ETS'N9!>3FOX2A*W1C7V`P#L````
-M[`````(```!%``#H4/<``$`1``#`J`$!P*@!`@'T`?0`U`:Y8RT0C<X;3*!M
-MDT0/9`SO="X@)"`````$````S"$``+"$/#[6YXEY$7GH(_8K>\N::,,#_A!#
-M383)A$31$K&5BWWAKA!B.SR!-6Z'_%\0I_<^B&:6E"*9(\D:-SI0BQ4FYIS.
-M[>^9+S`%+,H2EZ&/,:A[!"<?'W',^-)0EY9RZ_`SDQL+A9?'&1Z;HN"%!D+[
-MOM[9MQ]+TR?:,R#-'QP&F[NB1%5T_:>_+^P5/+XU#2(H&$W.8+23F?QLB_L`
-M,T:,"&]?9G`IN?B#";\H2A*W1FT8!`#L````[`````(```!%``#H4/@``$`1
-M``#`J`$!P*@!`@'T`?0`U`:Y8RT0C<X;3*!MDT0/9`SO="X@)"`````%````
-MS"$``+!^@/DJRK.ENZ[:<=T&F=21W<WN+G1;QD$S>X%%IU$3+?`^+5-C5[9'
-ML"DJ*A6Q,\]F+>@]%4:5+N3P[V#TL.!*,-D@ZFOYZH=`]/<KN'M\_&2>>]K\
-MN<3/Z5*WQKS,`(RQ1L;@=*`.#B2A)NCW]-]9KF3NLANQ:;]FP/?%R5LM>EQZ
-MAR9TW"*_$LB!V9VV>Q:CC`24X8OT53'\>HPPBU]^NW/S^6&#R+#_:;?\2A*W
-M1BPV!``\`0``/`$```(```!%``$X4/D``$`1``#`J`$!P*@!`@'T`?0!)`<)
-M8RT0C<X;3*!MDT0/9`SO="X@)`@````&```!'"$``0`V&3^6(^Y&TN(:4@(1
-MH:6)[@6'$G9]UEK;9J%5S%39)?[NF!S(@;9N\C<DO"ZQA4L`9]M3@3B@H9+Z
-MAL;__,6JZG]7HI5QAD$5-HP=N.')#NJ:QO`N]>C:*%;1&K%MT_A*\'-9>_>B
-M0.>2HV2BP$I'=(F?$*:ZXGM=`00*=%"))Y$"CJ:VTN6D3J+ZX")2DAXHD&X)
-M9'-.1J@EZWX9VO071U(VX$7ZX&7VFFC7CX_8L%`:*NP4:@7M6<LS2_^X,[Q1
-M^#+P'C\=Z#:[E%)H,\5>9(U7=_^`^TZ8LLSTMY$M&M:@WY9/8*Y"-=^.M[-)
-MNYG75I&OUGPT0HIV&K=*$K=&<T($`!P!```<`0```@```$4``1A0^@``0!$`
-M`,"H`0'`J`$"`?0!]`$$!^EC+1"-SAM,H&V31`]D#.]T+B`D"`````<```#\
-M(0``X#J:;2>LC_!PC`XUCS4M5$_:0_$!\D7I!(8^-HMXP/GW6K2DA;,EJI)2
-MZI&:(!?7K15@,_T_:WXJ0J98TDONGY`EE&38&".#MY:1O9]YMQ"H4!FRD:"`
-MG9$>TO`E:UT.8@.F>=IY6V9_>G:TBHS>,J/LK>3+X$FBS3[SO7?3`*WI9>$L
-MY&/R5Y45D%,W#%5C4MBSN5N@"MTK)E&4/WM%%KTX^L_?>\YSF@=._V3+]P[H
-M<RQD[QN8(2AL$7(DD3AG`?G24=5C,%S@-JICNP%G4/2Q;NL>L\);,&<P(GA*
-M$K=&LE$$`.P```#L`````@```$4``.A0^P``0!$``,"H`0'`J`$"`?0!]`#4
-M!KEC+1"-SAM,H&V31`]D#.]T+B`D(`````8```#,(0``L,T6>2O\9]\@$7'*
-MV/!85@9UP:E1G#>H(/`@X@T>UL&89T&.";U<98JSZ>DA+!/D#H8QNR=)F2WZ
-M(KL5"9?J6@4<V(_X=+D9"!I>4>6#HW29;\,?;$AS))>N4`5P;*[+>_W`/;RN
-MWQ?[$``;CG),NW]SOPUNC>`;0!P:+<?04:[IG"@;3S_O@2LTZL;/3MG)7D&F
-MTUQSR4+UJ"ZUE"`?J2L2"RYG9JS_:#_8</Y*$K=&HW0$`.P```#L`````@``
-M`$4``.A0_```0!$``,"H`0'`J`$"`?0!]`#4!KEC+1"-SAM,H&V31`]D#.]T
-M+B`D(`````<```#,(0``L%GC:0:\7Y*<W6?B$C$41N(*!"J&)UHI/8Y$I)3.
-M=VIS\"N&\?3W@!`J3=MU8AP(=A`_'4_,`:LP6B)#YP09]"[]MR"E[.:ABS8\
-M_%1,TT.F,=@A@.[,_.I,K5R+A5$]01&6V'C1^<&`YTOQ/1M"[#K==5A9.4<K
-M<TS#JT+/$XO"W_34ZU\QZ+)XC?WW&A/W7??HO5-\=L1EQ'DIDL%388=N>8A7
-M$G=*9X7@FG-*$K=&I9H$`(P!``",`0```@```$4``8A0_0``0!$``,"H`0'`
-MJ`$"`?0!]`%T!UEC+1"-SAM,H&V31`]D#.]T+B`D"`````@```%L(0`!4,`4
-M\V?TA+A9/J4$5E&TLT$F4V6M(M2+G3X7B#6)`7R+0:W`',)FV8BZ86@-@TUL
-M71U\Y&VS;)K(3,+[A%7!%^=.>!,/T&E1[3_"J-GBF=\C#[]<:O+MA6DV?!(?
-M@]U2PMCWB&#/"J8JR43,##SX+HKKG7X5M+'P*XM%@![COPQ,>S3@(V_R,1JK
-MWIYA7S]]X$,A&1"?ICEW`WU?[J>_DL`X!4N\JKNMHC1%+X;M5;*/AF<X\,T\
-M>"UBU$CUAJQ0#4'#*VK3%;=?M9PN;CT%ZC^T8;,F^;('6OI_S-EE$))Q7:E;
-M0SM>1HQ3UL=Q_+<+9$A_P.^F7UP1$'I)]$B`$@)H^JCF/Z&JN0XE[(]R'B0H
-MX2!KX?V[L;IY@VAKG!UPWXW=MA)V*7(!@]4-]XOIC-9)*)9QEFL\2\%I1!%=
-M!A&6Y08U("658_NC>^`)2A*W1G3.!`!<`0``7`$```(```!%``%84/X``$`1
-M``#`J`$!P*@!`@'T`?0!1`<I8RT0C<X;3*!MDT0/9`SO="X@)"`````(```!
-M/"$``2"7X[W/F2`Q$@T7.6[7MG$M_J]`0/#2@F+SA!PV;[4OB^O8=_*%:0%V
-MC10"5MB'M\^7DO[-9'154GW_PMH1-!.&+'0C&Z9CJ7/-NMO/@Y'\];LD(P5E
-M%?VV>V=^=<)U%W\3TQ+66(=B?^U[8`QBBO%%R+%&W1RQ&%4Y^E*+(,?*]]F;
-M0U%ZC8EF,44;E%"99OL\'/!7/N8E?4T;HE&/JY(V;2,7J,\ND=-S>@G3WZZN
-MRK+;[_IQ":#+U@+4V_2>CAEJ>1C>/D6A?C_X>J?(D$^,0-*@]PTSF6[5+5WL
-M@FQE3N+R:DP4H<%LG9=5/EM0[5`Q(+'80"_J$X!MV\)Y;O1()14J),5[S9$?
-MUV28#>G:._,_;44=G\R&BTWNW4H2MT:6]00`?````'P````"````10``>%#_
-M``!`$0``P*@!`<"H`0(!]`'T`&0&230'OX^5@P,IX[TAF`QOQ]<N("4(````
-M`````%PJ``!`@&O2LN]";$_VL1\B\>F(8^#=<"3LLBL`@"5W0I``3CH.,;'*
-MHMS7OI#S4+1-Y7]%>Z86B$+(S4,K4*/#2A*W1@`!!0!L````;`````(```!%
-M``!H40```$`1``#`J`$!P*@!`@'T`?0`5`8Y-`>_CY6#`RGCO2&8#&_'URX@
-M)2``````````3````#"61I0L.]GV6"(]=ML?++,7-:N)4;!\F:`I2T;SJ/+1
-MO^B<W]<D`=S'YK4BHDH2MT:L#P4`;````&P````"````10``:%$!``!`$0``
-MP*@!`<"H`0(!]`'T`%0&.30'OX^5@P,IX[TAF`QOQ]<N("4(`````0```$PJ
-M```P,C+%HSBE>"6_RB$SD&^I#M3_3]/S9E0%".0D=@TZ6M?0O*?1-_"7QE)7
-MR&=*$K=&!!T%`&P```!L`````@```$4``&A1`@``0!$``,"H`0'`J`$"`?0!
-M]`!4!CDT![^/E8,#*>.](9@,;\?7+B`E(`````$```!,````,)ET<:ZAKKF%
-M$>\R7XB!S3=5S]7"TKC#/'.UN+TP#X`;3%RQ93NGM<,Q3-Y:2A*W1N48!@"8
-M`0``F`$```(```!%``&440,``$`1``#`J`$!P*@!`@'T`?0!@`=E/9&Y5CV(
-M6OP``````````"$@(@@````````!>"($`'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``H>'CK])-KQ,YFYT?)<SXV.C;=AUUG/:=W?;CRO+.
-M"B>-$&6-#\K:<A%/^M^>[#1'*.9(1MB9<M_SV<M]60HSF:5BZ8-P!UM9;RN^
-MW__DWN1TT8-G-NWKTIQL$SN2Z->H<`1#;J\I%;RRY<:^D%)H=^(?M#+=*5P^
-M=>Y5;V2&$AHI```D/I@D;FA0KNKFXW>0X<KIM)46S>N*A#0-SIX#^U=HR1HI
-M```<``!`!!>TT>HGCCCZSQ`P1#E9P7HM2;N@````'```0`4[C+CS#I97<Z*+
-MA+:S]=N*@[.-,DH2MT9;*`8`7````%P````"````10``6%$$``!`$0``P*@!
-M`<"H`0(!]`'T`$0&*3V1N58]B%K\```````````I("(@`````````#P````@
-M``!`!@````&7RYD1&17V?D6V0AGZ.V*]D&,:34H2MT:".`8`N`$``+@!```"
-M````10`!M%$%``!`$0``P*@!`<"H`0(!]`'T`:`'A3V1N58]B%K\````````
-M```I("((`````````9@A```@``!`!@````&7RYD1&17V?D6V0AGZ.V*]D&,:
-M32(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``H>'CK])-
-MKQ,YFYT?)<SXV.C;=AUUG/:=W?;CRO+."B>-$&6-#\K:<A%/^M^>[#1'*.9(
-M1MB9<M_SV<M]60HSF:5BZ8-P!UM9;RN^W__DWN1TT8-G-NWKTIQL$SN2Z->H
-M<`1#;J\I%;RRY<:^D%)H=^(?M#+=*5P^=>Y5;V2&$AHI```D/I@D;FA0KNKF
-MXW>0X<KIM)46S>N*A#0-SIX#^U=HR1HI```<``!`!!>TT>HGCCCZSQ`P1#E9
-MP7HM2;N@````'```0`4[C+CS#I97<Z*+A+:S]=N*@[.-,DH2MT9Y7`8`4`$`
-M`%`!```"````10`!3%$&``!`$0``P*@!`<"H`0(!]`'T`3@''3V1N58]B%K\
-M(,R&Z01]O,0A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#
-M```(`@```@,```@#```"````"`0```(H``"(``(``.;VS`C=P.J3"7#0E/L%
-M#?5)=">+5<R.$FW7/8)J6@><$K.<`9']I3M#A(U%YN\POZNLHNOCT=0R0RFW
-MMT,G1I-YK3,#/@7T;4<?C!Z@0U"2"D;(+2*W$*QF+6IS$9O2[DS(T;$A$`MP
-MTQ"_5/4`#E(L=%S<[1R."\1+TFOANG0"*0``)([!Y^=OY712!`_YJP12+0%0
-MMJD]^WB::4DRPRI,22WT*0``'```0`0C+19Y<8A$E;@0>_P"JN3)5IU8NP``
-M`!P``$`%LVU9Z:Z-<Q4STG<)I??D1[*?CFA*$K=&OXD&``P!```,`0```@``
-M`$4``0A1!P``0!$``,"H`0'`J`$"`?0!]`#T!]D]D;E6/8A:_"#,AND$?;S$
-M+B`C"`````$```#L(P``T`-%/Z^$P_+'2'=3^I[4X]J>MK@%9A6-[=9&]1!E
-MT;Y*^<7Q2H<%)<0@<2_%Q2/_IGMM4;S9O%G%X5!];BKVJ+]]6"JG!LH/P^$-
-M@<+/'UN)>Y*W#SM\CV5G-6RT@D[AVLL3/NO+,$UU"UJ\`1-+/E`!T4E6AU-T
-ME(9C`<9"]-.U"R,^LG]F>`G#HQ\VBJ-D<4!89F!W>Z-7T?A:$MNB[4RVDMU@
-M/5Y9%I%3WS^R"%D?DXAL<WQFDFA%$V7<2[LH`,!N@#CUKMFZ&K_L.4H2MT8\
-MH@8`O````+P````"````10``N%$(``!`$0``P*@!`<"H`0(!]`'T`*0&B3V1
-MN58]B%K\(,R&Z01]O,0N(",@`````0```)PD``"`]+62!4?J#JTH+WR"ZRTF
-MM?6QKB/D=UD7HU/8GS@L_"[";7%>^PN*404TBZD>/PFIR8.?OUC![DX9*3Z`
-M)]]%%TR1'^^YP5_?0^$WX#O]%=SY;/1K)_'D0<M?KKE1A5ES$=-[UJQR$#)_
-M.T]CYJYRG/U4.:J^^^9S04EI1TH2MT8,P08`'`$``!P!```"````10`!&%$)
-M``!`$0``P*@!`<"H`0(!]`'T`00'Z3V1N58]B%K\(,R&Z01]O,0N("0(````
-M`@```/PA``#@C\^]8K=E!?17>3_]Y*SJ.+14`Y+>]G8I)=Z..Q`E]?,;.X.H
-M''O=[J<XX5Z6W<9I'Y1B!!9*E\[1"'$\'40P:]X(H?.Z=QXG!(/I<DM0R=$;
-MY-#LA@.+1]0LNYM\/4.WMH'*LI1]@6T_K&=38R>RICM+A&5I0,/U<0$V#4\;
-M==,$F_,T6D92ZG/2-&(&)&-.E!NS[,;-7M5&4Q2/HD_T;J>J\AA'S?!.M7ZI
-M]4R%<D:4>;=73O=B'"QMV)E&!.%_F@D"*D:B*9SA?":4BO2M,9HF)T]MUP%X
-MQU!4^DH2MT8=U@8`_````/P````"````10``^%$*``!`$0``P*@!`<"H`0(!
-M]`'T`.0&R3V1N58]B%K\(,R&Z01]O,0N("0(`````P```-PA``#`6[=F:!@D
-MY/')$LIQAG?T?FAUU5?_E0G$QV1PX1`H%K_=B-T$*NQ)(^4AH0FP-K=3^Y+M
-M#>L0T1F$0=JC4$@B2;[QK*F-1.J<8%*TCH8/L^3%U-0[6Z`ORB,K#T'[O>G$
-M8P*:NX;I?;NF?JU#6.=<:=!WEC$E+NK)2,1T(KW\^?@_BGY38+U9;<JSVN/0
-M`P_"1J3^MIU)H^TLEZ`V$<+P24O;KO+>0*F@)X<?7V%E/;Y#'CK=UFM-E.P<
-M+4A*$K=&EM8&`&P```!L`````@```$4``&A1"P``0!$``,"H`0'`J`$"`?0!
-M]`!4!CD]D;E6/8A:_"#,AND$?;S$+B`D(`````(```!,*0``,.$N4@`,<RXU
-M++GLK+X_DJ&JWJYZ%M;U^=#CLD/H\%X&AKW=[F0YS,R[N>B*2A*W1A;S!@!L
-M````;`````(```!%``!H40P``$`1``#`J`$!P*@!`@'T`?0`5`8Y/9&Y5CV(
-M6OP@S(;I!'V\Q"X@)"`````#````3"D``#`&V5%`@)ANNP83A@OM&,DSYGB@
-MD8(``CU;8@W=HGQO<CXB"&7L&;;$Q=/BCDH2MT;##@<`/`$``#P!```"````
-M10`!.%$-``!`$0``P*@!`<"H`0(!]`'T`20'"3V1N58]B%K\(,R&Z01]O,0N
-M("0(````!````1PA``$`54$QX?8@I;3'5UUP`,20F"L'!YKV@7ES]W\*J4!/
-MWA)QQ_V?RJUX0L:6]*VH_?KGRW+,&_RYW8!E#5,MQ.+^S8S2XV-9UO.(X_=Y
-M$G2.)<Y=I=L`Y_\$SZ4B*.HOFTET_W'2)RX1S#V1`-9J9@N3\M2I9X)=MGRF
-MLEFZ`*Z0V)P)'(6AS%=$1G_,#9WLBO*M@W>@#&J0:E,V]#'(K>^S#A8@1J\_
-M@Q%XA4BG/$5$(-CFIJ$ZX_+_QG.[CS2")D@&BTVNJ%-FHT6N(^6O>UV9+XRY
-MCQ%6F54-YV9@7^X>2QP*F?.'C>1$DF*!@(H7.<L"=]/:771Q!9GZ?L#K2A*W
-M1KD:!P`<`0``'`$```(```!%``$840X``$`1``#`J`$!P*@!`@'T`?0!!`?I
-M/9&Y5CV(6OP@S(;I!'V\Q"X@)`@````%````_"$``.`9X0-J6_HMM7OY[H94
-M#W<(Q#R"V6\@,KUA89>_8MXHEQ%):1R@OJ_)V$EI>Z^ZUL6DYN9T,9R+B.02
-MT<?205:\<_$R<N$%F1I6<^4P2Z8<DE-+`IL6BGVC)CQ[G\?PTPX6'.%(Y7)B
-MA50#!RVR`*2+9).AF341X&B,!CS6,FV7JK37Z6S5%?ONCC+3T=V;!J58LK'Z
-M"J!VQ3SEL)GAS@2-%=DB3X?7-\!"-+:IW+QZX3'ILS='`3,7L#&]W):IJHN4
-M2AN/F='2C^1`)SP3DZ=OCAGW$Q0)2J0]I="02A*W1D(K!P#L````[`````(`
-M``!%``#H40\``$`1``#`J`$!P*@!`@'T`?0`U`:Y/9&Y5CV(6OP@S(;I!'V\
-MQ"X@)"`````$````S"$``+"%7GGZE&-OX@6+SHO,T7(5'?L5C:;`(V&8Q'4^
-MT$1_?6UN*L#Q&$E5'=88S/H"<$W5I:_/<9".BVPI4L>)=13?QC@G7`&*JGP0
-MKPERB4^L036ZL)GJMR,A0][Z)13`"L2PS(Z*(`;<9&XOC@^(01R;[!!&9DTC
-MN!94?7%WI<VLZZ(>U4!:"2!%:CH\"/,)6>2,!DD8FTKH9GAJ(V3+I@Z8?*RN
-M>,Z<O0W#37DN2A*W1K](!P#L````[`````(```!%``#H41```$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y/9&Y5CV(6OP@S(;I!'V\Q"X@)"`````%````S"$``+#Z
-M51(9<5]\RY0>Z"(GK7\!TBP0L;17JO1757K^.P-(^V!M`1FN3R;:8IGSY]M'
-MB-]$YI`]O.0H,])9#JMO$5P)^.Q6,QPXD*[I/]Y7XHW3GEUH@92O<+,^E#^J
-M9]6A<1$!#KN"`R'!4!1Z7&N-4:?;+/T^0&,N<FGZ(7!%D`?$"CH:?GFX^JV_
-M=M9!99\H$B1&-*C^0W"H"H6H`?-<NH6W%1(=KR3X%O+O8\Y*2A*W1@5I!P`\
-M`0``/`$```(```!%``$X41$``$`1``#`J`$!P*@!`@'T`?0!)`<)/9&Y5CV(
-M6OP@S(;I!'V\Q"X@)`@````&```!'"$``0#S+GR"QX*6,U9J4[L\D)4F`(%<
-MWSFKZJMZS)A/RR-2VEI:F%1?2U4J_K%K*I!JQ[XL\`9@:N3V<[2VP(I8.()*
-MW73@8SWW)IIK06IN0BJ"1U_U(#FF;Q'PH\D$A\,[!7MUKS[J*PIE2#?+3J_1
-M*=^G*#U]US/*"EP9\MW'X3#$/W_GA>[_"=<*>,1#"`H9A1>Q4EN'JU07SES6
-M5]9@$"&&.]ZT(]DY"C89(G[65,;#L4]]"A)8X$'U"!0\]G_<4E%]5)]<6>1Z
-MNKTLC*7CWRMW336_3.!I.$(]=JASG[F%F3K\_8=D-4$TO.I]G]0KVW[0,JK+
-M&I`".LJW2A%*$K=&:G0'`!P!```<`0```@```$4``1A1$@``0!$``,"H`0'`
-MJ`$"`?0!]`$$!^D]D;E6/8A:_"#,AND$?;S$+B`D"`````<```#\(0``X%5E
-M]B&Y]L-G.-%M5G(TBS"";&K]SP/VY(D?R*WZ.D$$]FQ#D2\H<Y>4>&K42]7F
-MVQ=?*\U6X[*"\!4D94*/AR(\;7$GN-;:+HG:EO9=#\`.WC33^6B=EY"%3FM+
-M9!E$]08%+%Z@T[YP;>T3"5J<_>C-"1,X48@X:NCG$UMW,V,A5=O4FLRT@%'T
-MPVXRM^+^;2,)Y@D@Z94/:?9>Q(.VFM6M&C-<`QD.JHQT5JA_=SA7_IQ;9R(X
-M#\DJW\S!O_J2YNN1%5-?DW-B5X4_A/T2,.F`PDTNCP@0L-[!9\]*$K=&OX,'
-M`.P```#L`````@```$4``.A1$P``0!$``,"H`0'`J`$"`?0!]`#4!KD]D;E6
-M/8A:_"#,AND$?;S$+B`D(`````8```#,(0``L&LD5SO,(%M<P,B'5?;P>`*X
-MEKWI1+C;[_EH2GJ6/YFOVE70@6$_G'F5!,U:7D%_20',45Q`T#'D5H#V8GLL
-M=KT@%3<W8P)?W@5S2JJP\9D&ELC1W=DF71&5PA-<[VNO])!>&C9_(Z3GI2%2
-MNKHV0-AH(K0+>UKO;:9-$?4$LKID+0$Q?PT!908EI'E`D=FQEZAJ`>]E?!NI
-M!?R[]T?5:H"D\T!X]^$V&,C6$$M*$K=&\J<'`.P```#L`````@```$4``.A1
-M%```0!$``,"H`0'`J`$"`?0!]`#4!KD]D;E6/8A:_"#,AND$?;S$+B`D(```
-M``<```#,(0``L+=`M7`O:E4-V[FK)K/>,`FI-JL3"(IB"7EK8XI:6AP^!ZT!
-MQP^F6=#Y2S]2O8!O;+6AM?GR7LIJ<*3EBN.UX2LBD.UC+I#1BS!KS;>`A:S-
-M,Q9*@6J05R`P@)Z#^&N/*NUGXX'$;5+O^,9W>P4"-""G^*8.<(@#4[!7.N3B
-M*1C21RUVJ-2\,@M)9;@7T&,G)XAE.<PZG[?/XIM.,U4E-[RP3=]3P^]DHOIX
-M4A5*$K=&A\T'`(P!``",`0```@```$4``8A1%0``0!$``,"H`0'`J`$"`?0!
-M]`%T!UD]D;E6/8A:_"#,AND$?;S$+B`D"`````@```%L(0`!4.X/7G?DRK/G
-M=$*.42#>V:(EM041A4L(0[$E5X+CSL`_G*-L.<8Y*Q!9+$^"1>\H^R;J;=/[
-MIUD2K)OF`",W@"KNL(#[N_/S;Q+J]Z]WZ%6WN!+;:%D7QA"/[WLHCYO]WY1X
-M"FC!KYTML2C&+U&PW)^M@!C^`.^"CH!Y%E-'['XMW9J;R#L"[<!@<RW%4C,'
-MJ2GK)&N[<0PIH<D-?B0'%SP(_!V%7:(R'/E^5[J7C'LC&#ZM>,C,A,W=6WTC
-MC?$Z&9<1F%&3Q:!QPYU]'=XZJ>6H>6IC5B*[9QX=O<U'.WZL=8&'Z*`_G3!-
-MJ;^S*7Q(F8L30&;(ST+M5H"7'VM11/'I*.J<P5]4QQD5BF1!.ZW"A'H(WWNK
-M7)RHERX3SZ;R(AI3TEO<R&02\<V=1F`QZI$(HP09:=I&SKDUC,M"JT=LIVAK
-MB[[[[W^6^_$S2A*W1F$""`!<`0``7`$```(```!%``%8418``$`1``#`J`$!
-MP*@!`@'T`?0!1`<I/9&Y5CV(6OP@S(;I!'V\Q"X@)"`````(```!/"$``2!I
-MOR2/Z44;UEB>HP=H&.:Y+Y38$:3.2UOR[?)T[$;=R\A_E$!=L]+;P)6>[X/&
-M92G<W&Q]J,=I[D24V.Y,)%,X:;?G.7$:E3TMW`7*M%L7[0(U!"9CMX-J8(YZ
-M4A]HX2I3S2Z5$85\'F85DEQ+[-'Q83/9.FGV9\`W0$</Z?$LZ\.DUVDTOSO\
-MA#+%\W;9@>R/!+^>G>S4GPY&LP#M+8DOYPDY$^]#^PT>$6+TK!/*LBMI+8K"
-MJ!HB@-F[$G$P(]""<O@2WA^#$BEY\3'O]1)-Y(1L]09D>F;[K:[LS*(O</)F
-MO2A")-S,[\X1&`TNC;3<IW4U&JK.8R13`,\.=AM2'/*-.A^7L^NV`3[SW&J0
-M0#Q"J%PKUVI:%AB@BTH2MT9A*0@`?````'P````"````10``>%$7``!`$0``
-MP*@!`<"H`0(!]`'T`&0&26RT.(!S]A0^:JY7H;`BK\DN("4(`````````%PJ
-M``!`)S*^->+)L0<3;:"@VU&U-W/J-28/*S3'I*2.+</U:9/&?$Y3MGJ/Z_VG
-MCOV/2,!?0AJ^L7:9\CK2]Q%R2A*W1I\T"`!L````;`````(```!%``!H41@`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y;+0X@'/V%#YJKE>AL"*OR2X@)2``````
-M````3````#"54#WXZJ<\MT>CY5UP]FS'C$KH)Z(JBX0JV$JA'X(KX?^&]FN`
-M+EB675GK"4H2MT930P@`;````&P````"````10``:%$9``!`$0``P*@!`<"H
-M`0(!]`'T`%0&.6RT.(!S]A0^:JY7H;`BK\DN("4(`````0```$PJ```PQL!Q
-MO'X4+0J]4SU_@>%!XB'_KG2N#R0`Y)*%E'$R?R'[Z;L1!&C%+&F[<AU*$K=&
-MA5`(`&P```!L`````@```$4``&A1&@``0!$``,"H`0'`J`$"`?0!]`!4!CEL
-MM#B`<_84/FJN5Z&P(J_)+B`E(`````$```!,````,/9^!)GBPF4!(/A!BP^H
-MD4DM`R[*R^RNDZ*3HWBH?ENPP0;L_KR1]?:S5T_+2A*W1HA*"0"8`0``F`$`
-M``(```!%``&441L``$`1``#`J`$!P*@!`@'T`?0!@`=EK^(R$.VM"B(`````
-M`````"$@(@@````````!>"('`'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``N)CW;IGT/#(IQH;PW9'"_M4^VZ;FS-Y`AFS$/M!,34"\LSQJ
-MQSL76M\HGT@DTWI-I.[_\*P071NR"H);&+(,I(-X`?3CO&0SX_Y2X-T?T'$,
-MPQJYH^/1]0$':58@/3KEGG:OOVMU4LYXQ745T>C3B]"[D/`^[V]"[OT8[[;A
-M_7\I```D8)@1$8TP*D@>>1@)DIWNI<5YT0X#<JOFD#^0VQEU%Q`I```<``!`
-M!+6-3U?U$R]"J/DI@$R1YAMW(;$I````'```0`7[8P.=+QQI)8_8TIT:7\BE
-M6NW<+$H2MT9,60D`7````%P````"````10``6%$<``!`$0``P*@!`<"H`0(!
-M]`'T`$0&*:_B,A#MK0HB```````````I("(@`````````#P````@``!`!@``
-M``&9)F37"9MY27[^".=1W[:1,TV-E$H2MT;-:`D`N`$``+@!```"````10`!
-MM%$=``!`$0``P*@!`<"H`0(!]`'T`:`'A:_B,A#MK0HB```````````I("((
-M`````````9@A```@``!`!@````&9)F37"9MY27[^".=1W[:1,TV-E"(``'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``N)CW;IGT/#(IQH;P
-MW9'"_M4^VZ;FS-Y`AFS$/M!,34"\LSQJQSL76M\HGT@DTWI-I.[_\*P071NR
-M"H);&+(,I(-X`?3CO&0SX_Y2X-T?T'$,PQJYH^/1]0$':58@/3KEGG:OOVMU
-M4LYXQ745T>C3B]"[D/`^[V]"[OT8[[;A_7\I```D8)@1$8TP*D@>>1@)DIWN
-MI<5YT0X#<JOFD#^0VQEU%Q`I```<``!`!+6-3U?U$R]"J/DI@$R1YAMW(;$I
-M````'```0`7[8P.=+QQI)8_8TIT:7\BE6NW<+$H2MT8/C@D`4`$``%`!```"
-M````10`!3%$>``!`$0``P*@!`<"H`0(!]`'T`3@'':_B,A#MK0HB;9G7(:&'
-M^&,A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@``
-M`@,```@#```"````"`0```(H``"(``(``);R,C^U%4GQ2_SE%:,,<B.R%?9D
-M-03&!G8VQC_B.#@ZSIJ3S1VY[IY'[OVGQ7.']CKO[K?FJN[6"08<*;.\HZ`2
-M]?210M4F5;((.G?X7L^&ED9=W;[\0QQ!$((YLY'8(7Q-#3AV!'8HZ,I\H&8?
-M!&;]X>Y"N.JWLT*:%JZ7'.@V*0``)!!/1P%>-WT1*_K7@PW".[[4_J1/]W*)
-M`8Q:HS+U>R^[*0``'```0`2AF9[DL$O6:NJN;RMR?R(AMG(7(@```!P``$`%
-MHAK3`')X.WFU@JS_UC].,3(Q@'E*$K=&=[L)``P!```,`0```@```$4``0A1
-M'P``0!$``,"H`0'`J`$"`?0!]`#T!]FOXC(0[:T*(FV9UR&AA_AC+B`C"```
-M``$```#L(P``T"Z\,Y=<>^,/H;G5]]G.#J;/Z+'($=`8XBHF>)WB^[9^KV*>
-MW3BO=HE53+S@'G0_^UW5]Z$+5QX%E./L:]?Z*L/A(MJWNQ/L,"I;JQW`!Y1/
-M3/8EMHCEHW\=1Q;Y^RI?*:H>*>=-+K%8.>XM?OTR'HL%)D7%F3#Y?].;:%J0
-M]IIO#&TC%!K0O0)@%7&2?Q[7JJV+O@+=_4O?\!-D[:I$47;>/H=+6\H69=/A
-MJLB?1P'N\TS8CFZ]S:7[UVXP1Z_U@;H.^.07I&J*#KJI-DH2MT;RTPD`O```
-M`+P````"````10``N%$@``!`$0``P*@!`<"H`0(!]`'T`*0&B:_B,A#MK0HB
-M;9G7(:&'^&,N(",@`````0```)PD``"`=D*ZU>_>;'T;04X'2\/NU9F3_M:)
-M<A+9@$7HAR9MSWI5`,D`T.\^DR7D\@JZ[DHDN[ZN'O?60F+%II9D/_J(3P$%
-MD-B'$BY[#`/]S]43>B"Q@KG1\D5HGC<]GF5?BGU6[TFN=\;4E0A$<RI$R(MR
-MC/MR;)S1H1^(*Q>VTTH2MT8A\PD`'`$``!P!```"````10`!&%$A``!`$0``
-MP*@!`<"H`0(!]`'T`00'Z:_B,A#MK0HB;9G7(:&'^&,N("0(`````@```/PA
-M``#@I6,V/B]7G/SV!U[:DD89M-`VS@$B_P*UB=D1Z^K?R"=F]=4%)52SCKP+
-MD1.$$"BVB/6KACMGI8FET"CG3QK+]%:^GTQ5W;H])]$G@8]U]O$L"[&^RHA;
-M-N7#.0:03Q5CZ)1;C^L[8Z]Z#)CJ9V=FX*6-F(L*JE`]<`=BD4`%*1=PL>P)
-M3E\#%\;"PT#@6<L7,(^A*CI;$;=8AH+P5A;ZO/Q)-1[SFX(:&#6?LQR:U%<)
-M(X]X]2)<@JF*^HQGE<KRVM##_'J%C6$`UX*?#+(>Z!K_CJ]?1'"O?6X^WDH2
-MMT9:_@D`_````/P````"````10``^%$B``!`$0``P*@!`<"H`0(!]`'T`.0&
-MR:_B,A#MK0HB;9G7(:&'^&,N("0(`````P```-PA``#`(D]3$/A#YS+;C1[;
-M!W;X[7),2ZL[52`_SEZY)+H8!Q(:,@J;/$U_!+6TR-WULO!J4E"XSTH(VQ1"
-M:/\<S*7?$F$687!0,:A-M%VNZ6`H5YS6F9!_`U`:I`NW_^0/7WK34^@0^;OL
-MZ)"2L2>NGNDD79+JHGOW:>B=L/,$"54\0&0>I7`'V9\(PV1<?TXNZ)CV^5R,
-M%<-C0]99AO-`<K!DBUVKT\S(VRZUL8F?>61NSZ[NEM@Z*$$UJ>/HO9-*$K=&
-MYP@*`&P```!L`````@```$4``&A1(P``0!$``,"H`0'`J`$"`?0!]`!4!CFO
-MXC(0[:T*(FV9UR&AA_AC+B`D(`````(```!,*0``,+B:RKNMD;$^GI4_4)U/
-M7_1]4Z);=1\->,,/4;[-TIT;(E='OPF_!-/2O3/N2A*W1M,C"@!L````;```
-M``(```!%``!H420``$`1``#`J`$!P*@!`@'T`?0`5`8YK^(R$.VM"B)MF=<A
-MH8?X8RX@)"`````#````3"D``#"GQ\8-M>@\"25PR:Z863_&%_Y%85Z*C,V:
-M6F+M:@66,J?'Z0`>4#55\LX=K$H2MT9N/@H`/`$``#P!```"````10`!.%$E
-M``!`$0``P*@!`<"H`0(!]`'T`20'":_B,A#MK0HB;9G7(:&'^&,N("0(````
-M!````1PA``$`:(VU^(N]'D3B\]!63@=807D5EFV7.-`G=?[O"NZ=+L^(8[79
-M203N4E4U^W@;,%,W#LSI2[F%CQXMWP8=R_"Z(=L+G/F/'\VG!JZ2P"<E:RH:
-MM$T&(H#8T33O"2M;3?R$-0&ROP%)XW$VI"T/M72Q0!?:UF\X,J`D*$,5QK=:
-M%4&Z,E`[9J"8J%5U4*`E*ZS&WD=!-`XGV$S_54C:7-+.6I=*0%@?7&C+B</(
-M"<TK`IR<.7!\MF%G@%(V?9R`A(:U=,I.J=+^-RY23./,!<C>4_ASPD@,I>(]
-M?M%CD<!_6^5R':V$T-KVY9%N4@U#YV_H)@"VY1GMFS3`BGS82A*W1I-*"@`<
-M`0``'`$```(```!%``$8428``$`1``#`J`$!P*@!`@'T`?0!!`?IK^(R$.VM
-M"B)MF=<AH8?X8RX@)`@````%````_"$``.!GZ$UN9*&J,8K?]OS@7PY_6[$=
-M:Q![>B40N*RE09OY/#+"FF5KY^"IW[M.4@>=EONT3LD%F93E>)]GV<H4G3SR
-MZ_<XN(M0X)\2`^,XD/_!77GD?1I.9R>7,YPU_TDN'/?&LO8!)U(/:_<1'VYF
-MKI]#[NB,NU5;[6PAWC&E"L;Z(]?.5$"Z#F\Y?/OGKM&FH#Y-4D+-G[K`C<1^
-MC_%2?><1LOCW$4/;1,</_"%!MB&028^U&6BBFX4P`MY=.VU,"I?@O8YKG#JU
-M4A[T<3,(3="5-L.Y?*]/2X73QT,U2A*W1E1;"@#L````[`````(```!%``#H
-M42<``$`1``#`J`$!P*@!`@'T`?0`U`:YK^(R$.VM"B)MF=<AH8?X8RX@)"``
-M```$````S"$``+##!9>"LBZS)EL32`:3=IZ#/'-&AAD295ES/7:>U3,#WDL]
-MG:BUXUQ$74W_YCAEF%=4=I)_2S6"*7*AZ(X$A0Y.MZJ<S/(22W_7KR8!W0X(
-MY^W;_%_..;/?H]PD;+/-R9M/KD+^N0L<;Q*(U&@-7-R@7ECFZ?NU5\A[HIP'
-M;DA/_'BWA3)*QRQ<$WI)=H)YR6KJ(=SI'X]4G`K4]87(&L,+OF?"NUSF2MR.
-M<!NZ2A*W1OI]"@#L````[`````(```!%``#H42H``$`1``#`J`$!P*@!`@'T
-M`?0`U`:YK^(R$.VM"B)MF=<AH8?X8RX@)"`````%````S"$``+"'B>\6+VI?
-M5XBNK:T.^?:0EDO0F'H9=3,ZIX`9;3?A!(J7L0.*I.'$HZTTA=E_!3`G+"3Y
-M_<5H(^^(RC'`FO$-#0R1F&5;"_'N5H*YAYR&HA;%A(_2VUN;N]B!KL1&G-Y_
-MR!G\"AI&A4/\QAV.F30+YQ27,:;2GW^S_=-!7Y)(_+H5L#S_X-AJZD^Z9^/L
-M\WQCRZ;?AR,3G+KF-X@2F-3D*?!O]R&4B!L&*7&,2A*W1AB<"@`\`0``/`$`
-M``(```!%``$X42L``$`1``#`J`$!P*@!`@'T`?0!)`<)K^(R$.VM"B)MF=<A
-MH8?X8RX@)`@````&```!'"$``0";VC`,O`:L"/1%.!\S<Z'X[E/ZY9#LSV1\
-M5\V5'`E@?V/($3KYIM31;@ZO(/<C$L1?-#5(Y@@"Z[^8.T`&1"OFD-I31,<)
-M!(O1\WK`HK2Q`T:UXZ\<11-A_H3K8(@-K/E5V.)(+MP@GCJ*SHW*LZ6X=,UE
-M.L@<ES"^O`G0P$TI2HN[GCG2G$*!Y%;DBF>F_W%].=/@[N[RU$"*+.$&^K.E
-M#@7P#P5]_3#'O@Z5U7=5)^;'AF&.9FR0=BW_&(31I.$#X*[EI,X4E5&5M)KD
-MQJ,/PK=]#B*^-J\%38NR4W6D$8"L0H1DFDO.KE)2IP+M"[SPRI/UP:V]63YA
-MA\E*$K=&TZ<*`!P!```<`0```@```$4``1A1+```0!$``,"H`0'`J`$"`?0!
-M]`$$!^FOXC(0[:T*(FV9UR&AA_AC+B`D"`````<```#\(0``X`.S;529BX:Y
-MPJG&P3?$7D`7[G#5[3Y-V]A=#"":C#YG-UT:6+SEY]7B#T>^[[&Q>?=[3(AM
-MYASE;E6Q)`ZW]QLKV&GJ^,/]1=5/;XE1/E0UV[EB8I]J!-:ROUCG1L&(;A(&
-M)W11R9&0FNH:$)3_6K,=#ZMPP4-FAXZNS*%-C.N=O,''GSWO5$^6`\/Y"2F^
-MNM:^5T;\2!O(W6[FW?'<LRV$41L)Y,%/QZ/,';];%<A;]X?#BGYD'2`YYV[)
-M)VK^0W%K=\EY,V.]0'!DG69%]:^_SH*11%6=V/P>T%!*$K=&9;<*`.P```#L
-M`````@```$4``.A1+0``0!$``,"H`0'`J`$"`?0!]`#4!KFOXC(0[:T*(FV9
-MUR&AA_AC+B`D(`````8```#,(0``L/:NWST@J.H0N2Z>94W@1.W?!\-@/>X4
-M#36ZY+KV7'\H2M]*$C28'.^349%-@,2GA9H6JJFBAV_^=6H*&I'1E1@6D601
-M2&>**T;F'5"ZCE],0N)[8J5Q)KI;'C!7(D1;V:KH7U-#@$%+00-UMJE<W2&%
-M(;&<'6'N.#>187`<J#W?1-7%57E"8?XORU0U#:IH"JUD<[9@H/><S=\,WKFE
-MS*SKD%:,3_930K@V_2A*$K=&[=D*`.P```#L`````@```$4``.A1+@``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KFOXC(0[:T*(FV9UR&AA_AC+B`D(`````<```#,
-M(0``L+&"A[`V*T,+^_\FKV7</:8J.*ILOWZ$P7%>W*,970@:*SI+/E-<Y[&_
-MZ7,Q/0P1;ML6QXT+<)MSI>FL85>O]MOS`W3T/RPWNEGEVBF"7F?;D]IZI-UW
-M93?4U"]$EY^29HW4UP**@L2DCP8G2/@CW:R@#(++*9$Y0L;'@CLRU(81FW_O
-M0J@,Z_A9D&]0Y(=TT')L9;$B`$%])192VEUA'Q!"]5L8ZGML5)991K5*$K=&
-MJ``+`(P!``",`0```@```$4``8A1,```0!$``,"H`0'`J`$"`?0!]`%T!UFO
-MXC(0[:T*(FV9UR&AA_AC+B`D"`````@```%L(0`!4.\2`@)^1,M&%K(Y7Q)J
-M?E&^SBZ:]2#6D?[XV?V%@$))J^#*PAT40/Y#*P%($@W/!L'")%;(M",Z";6:
-M(\<E#[JF<J`Q;G#\F??5:Y&?1(5YW&V'^D?:Q-1\0*2M+&SC_>"E4/2RJ?07
-M.!@D<#H'Y&;@),65\UUJPU6$SJ)42F1IR4Q-(DZL7PT=E(;-LUR$0-VB^P]H
-MK305,<PE04D0FGJ!HR-L<@R&A,O%BG\]&PW6!W[7_:"?L%H,+0>E>AYU=LZY
-MW)29[M9'#]Z%.CR3@'P>,9(U.EC:E9\V`YOV.4;0A0>C*8%A@FOX7-UFE:#R
-MK&0%-L%&]/DL5;>;B[GKZ)V\/VPC:F$GN-QG$=A!OG#=QS^H,MJ^T)?ZL1]6
-MX)O*I=&NB>X]AX5G2YO]/S!7E?C"6NS``'DA0#Y]&8`L5U]0E!%Z;OG0U[WO
-M]1L`2A*W1A@V"P!<`0``7`$```(```!%``%843$``$`1``#`J`$!P*@!`@'T
-M`?0!1`<IK^(R$.VM"B)MF=<AH8?X8RX@)"`````(```!/"$``2!+?</LK2EF
-MEP]6;"G#GIP$!K7#4+9CAZWM$K8PP*1H___%6B71Z:KX39Y@[9=.C\XI29*K
-M_M>YD?>1NBZ<S'\CD]S!9A?K$S49!JQ&(W'^N#6P#A8'L\((,1<D!<"W859+
-ML41+]9:4J?;HWI*24>V2()^:$Q.,^EI[S]Q45?2@U@RZ$HLSIEC_$!]BY"7Z
-M$>TY[*8U>?+]0?!W`2R=:*;-YL'6N^N("[1C^ZF.B*6R!D/LH8`>:$X`%V%3
-M04CNT0.[>9++<)Z=OR+_Y"HQ7&]-I!M6<HEC$A*[%U@,.1^'H)SH-Q`V*0^M
-M2W=:&^'0MX$O*,@[]4B3`\(F!5P>)ZI*GF;68]&609?!+3%[;D-,XTO.5R10
-MUY+MB>.?1DH2MT;X70L`?````'P````"````10``>%$R``!`$0``P*@!`<"H
-M`0(!]`'T`&0&243TBIF4P0^?D?4?P5T(@!(N("4(`````````%PJ``!`O^'`
-ME>$5]!`L.\U0!:>&TC7;,LL-]CW+!6I7RH(87X)S-(0;JNKU$X3`)F(%CL,-
-M597RQ($OD>A1\ORM2A*W1IAI"P!L````;`````(```!%``!H43,``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y1/2*F93!#Y^1]1_!70B`$BX@)2``````````3```
-M`#"*N]B,X!9S5UT3HK:\"&SJ!]8)/@=+7\$7"-$[5>/F7EWOYARE;7H+P8EV
-M0TH2MT9M>`L`;````&P````"````10``:%$T``!`$0``P*@!`<"H`0(!]`'T
-M`%0&.43TBIF4P0^?D?4?P5T(@!(N("4(`````0```$PJ```P\(;:BQ.'SO:;
-M!:^?W*T'')J[Y0,:W5#>D4G,>-=T'ST/%&D]#-X<`4^\)7=*$K=&R84+`&P`
-M``!L`````@```$4``&A1-0``0!$``,"H`0'`J`$"`?0!]`!4!CE$](J9E,$/
-MGY'U'\%="(`2+B`E(`````$```!,````,$3#-KU:\D9M+)?<@7:<=ZI8QL;:
-MB!OF)?]7B?7+>:+,&^;+]YGH)JW';\*>2A*W1H:!#`"8`0``F`$```(```!%
-M``&4438``$`1``#`J`$!P*@!`@'T`?0!@`=E<7$!&0\.=ET``````````"$@
-M(@@````````!>"((`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``&+I*MDBO5HA,E"$)--^_[!^!#G&:TK:K"3F;Z@@(/-]AT>*QL_:Q<%P,
-M&HN)A,1K`#HCGM4WZ.M&JRDJ@3[W-A8NM3FWY[=B&8H;UHV<ZO.&S:[G&&SS
-MO\,8LT0+3:N1Y[,\Q*8&/SRRR30.R_BH>W*A5V1']+FDW1W@O+2KWP$I```D
-M9%!E?UB$R:FYA$C5@K-A!+Z62I8:6I!A;,<$3R<[AX,I```<``!`!*[QT97^
-M@V!65=<6HI`33SI60TBI````'```0`6Q4)P0!J97"1W<VQ,/:G9P5P8<*TH2
-MMT8GD`P`7````%P````"````10``6%$W``!`$0``P*@!`<"H`0(!]`'T`$0&
-M*7%Q`1D/#G9=```````````I("(@`````````#P````@``!`!@````'AW.,Y
-M'FPS[CQ!+\^L#R$1-KQ[G$H2MT;"H`P`N`$``+@!```"````10`!M%$X``!`
-M$0``P*@!`<"H`0(!]`'T`:`'A7%Q`1D/#G9=```````````I("((````````
-M`9@A```@``!`!@````'AW.,Y'FPS[CQ!+\^L#R$1-KQ[G"(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``&+I*MDBO5HA,E"$)--^_[!^!
-M#G&:TK:K"3F;Z@@(/-]AT>*QL_:Q<%P,&HN)A,1K`#HCGM4WZ.M&JRDJ@3[W
-M-A8NM3FWY[=B&8H;UHV<ZO.&S:[G&&SSO\,8LT0+3:N1Y[,\Q*8&/SRRR30.
-MR_BH>W*A5V1']+FDW1W@O+2KWP$I```D9%!E?UB$R:FYA$C5@K-A!+Z62I8:
-M6I!A;,<$3R<[AX,I```<``!`!*[QT97^@V!65=<6HI`33SI60TBI````'```
-M0`6Q4)P0!J97"1W<VQ,/:G9P5P8<*TH2MT8OQ0P`4`$``%`!```"````10`!
-M3%$Y``!`$0``P*@!`<"H`0(!]`'T`3@''7%Q`1D/#G9=KWV6>,N(I&8A("(@
-M`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#
-M```"````"`0```(H``"(``(```6/ODOZ_/)[\>FVL8UZ8FSICMZ$TVN@DF"M
-M^C!M26;)B$OR2%#7[.^XRH.Z#*3LI?2E%D3OL2\!E\H94-IV<L;K)I*P3)N:
-M6&)4C%,9&8"T?8XK];\I7\*?<B[)>AQP7+%Z@;*UOH6:7[:=>0%+D-[.V:(:
-MJ?@>Y6J=%9ZL'`64*0``)`A=UIG'1Y8\Q4&HH4=JL%<(?XJ<//&B"MVP.XMU
-MJ&=V*0``'```0`1F=S'R'_?U#;(S48L1EFA7I(0&\P```!P``$`%6)ZX*H$:
-M*S9#;>:-0M,9$4A^@/]*$K=&0_@,``P!```,`0```@```$4``0A1.@``0!$`
-M`,"H`0'`J`$"`?0!]`#T!]EQ<0$9#PYV7:]]EGC+B*1F+B`C"`````$```#L
-M(P``T.D9!=Y:1*!K"P5HE4%<@JX/L=173%AH0`KBR)R;76X@I&BF51A*K8"T
-M:`XU^,@KS*34E)$F`985::6]93LKKYF])QN?MEB&,!4-)7F`H%%E<Q]1&9KW
-M$"I2)Z[OH06FN1T>;MHMB=&:3(AE\R*MB:;-QKD0,%(&2/J!V;+V;&1X4-X;
-M4"3,`UHCKTN_9,.HK8B(Q@2V",5'=X=)O"/SEL#I&@_JPC,FD=G^BGBH9O@0
-M+#5BM?$^4?OX"N^$G`A+XS6%W+A>_$0,OKFE-TH2MT8Y$@T`O````+P````"
-M````10``N%$[``!`$0``P*@!`<"H`0(!]`'T`*0&B7%Q`1D/#G9=KWV6>,N(
-MI&8N(",@`````0```)PD``"`?DNK8,0ND;3!PSXVB8BQ;G/IU5E[$@P6G]%M
-M:SD#SM_+V]KDJ?F_&X881"A6SW)LSF$_(0*L0C%H1G,LO0*"`[J7CZ&)\'[[
-M\0)(J-Q=7H?146/)J/=^*%09KEA^[5=8S,BE2^(!$+\*#C!F+B-X[%9V**M'
-M;H_7/[R_>$H2MT;`,`T`'`$``!P!```"````10`!&%$\``!`$0``P*@!`<"H
-M`0(!]`'T`00'Z7%Q`1D/#G9=KWV6>,N(I&8N("0(`````@```/PA``#@Q@7,
-M^W@%.PP-2@Y?&?['Z@VTJ"`0$*V]1G"(8&A@095-RD>O48)6>O&0>.DURXL5
-ME&T6MHE*4R6T<F`/[#"?>9(MCQ_J[WW,XW_:2/.8SR\49*XF>P&"'KB]^]DT
-M\%N7.RT9F(IJ)C/&(%G;#*G`%U^Y\3W#!J+7(.S*?I^E#P4MA)LZ6/EEG0#C
-M#"&SVV32STR<,]$LQQ)_\T4@4,S%*'XC`)_Q3$]ZW5`K]&+VV2#&ZOUBRV*:
-M"D&2*H0>B?-E.GP*&LO*!1T#.)I3I"",Q)$WXX&."LPJLNX9J4H2MT99/`T`
-M_````/P````"````10``^%$]``!`$0``P*@!`<"H`0(!]`'T`.0&R7%Q`1D/
-M#G9=KWV6>,N(I&8N("0(`````P```-PA``#`EX;T,7+K)PQWRUV<JP>]AN*)
-M5%372:A`[>[;!"7N17S:<&?N'47=PUT#'1KMYPO0SB^!N__0VK^>5#%34*[I
-M?A"*5P8F(J+[(JET"[L*5I3?56C(S9^D-9>GP'(,\89-8GXH:/]J>]?/7E?X
-MF^26],/AS1'5$F^&JOPG!1"6>9&]>7L8II6FS7A?U!E;%&-%@5["<TKSMZZ`
-M:%K1%_`1\!C8F,BI<.N+[WQFREM"#\=ZI#R0&#-I[QNGXO]*$K=&RT@-`&P`
-M``!L`````@```$4``&A10```0!$``,"H`0'`J`$"`?0!]`!4!CEQ<0$9#PYV
-M7:]]EGC+B*1F+B`D(`````(```!,*0``,,*],&*]7+"DP1JDYB^^X:ZNGZC^
-MC@HYCB6OHGSUI<8)0T6H%B.9*X8N-OE_2A*W1FQD#0!L````;`````(```!%
-M``!H44$``$`1``#`J`$!P*@!`@'T`?0`5`8Y<7$!&0\.=EVO?99XRXBD9BX@
-M)"`````#````3"D``#`WZ_0ZWLQ]V2$/8%Q4=!BS:8).EBMIJ?QBLZ@:Y/6W
-MP]"XLF;5.6M;Q^L37DH2MT8/@`T`/`$``#P!```"````10`!.%%"``!`$0``
-MP*@!`<"H`0(!]`'T`20'"7%Q`1D/#G9=KWV6>,N(I&8N("0(````!````1PA
-M``$`CG73XMG`\T@;8.UKHNJ3^@/[V1W>=^L"0GDBJ)58`S5'N&-M*]R^Z!2/
-M:"M%"":WU(T;2G4)XP?#@%280'IF^)@Q4/W_]+9'80.%R;Y(G9BYH8=_B7;;
-M&;V1P=CNE0H^UU5]N(:OV\`1P)@)',L>BA79Y&E)B'9^QVO5N6-3H$257N[8
-M`JN3,&8P=E06EK7S2`,2-OI[@6)85??%HY.D[V!L!?CP_W0L29A!3:A11^J;
-M9!2+S;@FU!`EUTYK^:BA;+B`?%'WH?+F<AE84])B'?NP'1AV"!R#HQHQ"]!/
-M5U_!7R,8LK<UET@Z0=6-6;@A&9S:0"R`&<$F;SFS2A*W1MZ+#0`<`0``'`$`
-M``(```!%``$844,``$`1``#`J`$!P*@!`@'T`?0!!`?I<7$!&0\.=EVO?99X
-MRXBD9BX@)`@````%````_"$``.#M*T@!OO$B<2+$"G/'I!K<II!KN$"+$(X!
-M/GPKND+W/I[^\E`XK[(VP=ZRXC0OUU"A>9'""X,,*+#"ED!%97GR4-XG$FY3
-MYA-&8(:4Z^?(\1$%,QH0%-T8B-,]O/BE"KK.@9".#!H/S:YH3+&'R;_O6J]=
-MH#$PX]_#>Y0/;N@AUX'[;G?(5LC^K^@(V&CN%^'[%],Z+7`>Z^LYXQ"9%I(!
-M</&!-6>330U2_FK<1<^PVHIP5S6>!=P*?:`'TZH7V<#3,Q_[]P#`DHQ*TH$R
-MN>J;LA@16O='@'@-0PHN2A*W1E&;#0#L````[`````(```!%``#H440``$`1
-M``#`J`$!P*@!`@'T`?0`U`:Y<7$!&0\.=EVO?99XRXBD9BX@)"`````$````
-MS"$``+!OK]]`5!CE;/1?B@ZS]$8HS>T1&:B,V.WRS+Q#*F-U+N6Z5\'`Y"""
-M!*,@1?/*1BT>LA758,^JM*66RK!",A96+$BVZGMI,A$$H<]5.:[A<RLQN9F$
-M!NM/0@Y!`XGJQ@L#\>\S^H-6^3^=0P(+?NA_O[2);'8(::]=9N332/5YL)?N
-MM+'>09)Y[29T+/SS$F1@YA#N;X5+`NYG[$5A@-A[:ZNC:29]],SYXF5&2A*W
-M1@B_#0#L````[`````(```!%``#H444``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-M<7$!&0\.=EVO?99XRXBD9BX@)"`````%````S"$``+#XH10<KD!'G?,VR-(2
-M1$J9L.92YO32:%9%FCZ,6S:Z(G(\##GZI'&.PRKE*%_[U&2Y3X=']`.1FR8W
-M/[M-YRVR.YK!:U="5%_Y`K01,1<%&;Q,3;$Q*.O-%<]WZ5,I<]^F34:8OZC5
-MY5&(^!E6/#'4-6F2AK`HC`Q`='JMNUSG]H2+.<&$??6+9.^SX6)P:2C$1[N]
-M:8`<6"<A:9J^#!<\X"OL3*F;"DKN=CB[2A*W1A?=#0`\`0``/`$```(```!%
-M``$X44<``$`1``#`J`$!P*@!`@'T`?0!)`<)<7$!&0\.=EVO?99XRXBD9BX@
-M)`@````&```!'"$``0`5QZ2.!>%:/S["X0R^I3#N[0)@"2AC%P+0)B?&A[U@
-M&(M2#L)^(@J'[T$!1"+CVAP+[G?>=XWF",9=D=WLCV2;CR+6`:OWT;'3W?$M
-MK+6)?>P<:SW8G/XKS\!WDGR4BDJP_#H2`,3N)H9?;6":?.\Z(8D-8`61E@QH
-M]/F14UC:OU&D-Q-(:P+:SQ^'HJ6"P4/7"T%E=V3'QQ.;SN+/N7-V#DZ3\4TN
-M*=-*]WG\#VP"T/O5<V@C.6LZ\TZ"#-LBCHC<\V4<NN`T=>1<`]U6-9<#H.>P
-MH)JHR>,\<\T3T<A_^XB1X?``?S\$<"\P.AAL*;&'G`R`*>HUFZVR%Y9*$K=&
-M`>D-`!P!```<`0```@```$4``1A12```0!$``,"H`0'`J`$"`?0!]`$$!^EQ
-M<0$9#PYV7:]]EGC+B*1F+B`D"`````<```#\(0``X+XTI+:[=3D0\41#?6]"
-M\.P]\`C]OQZ6YT3DK=7C%[]+AC.DR4/0XQ%"L<`:.+72WGWP%J0+-.CS/P-2
-M;6=1(1W8M6PYPS=@D7"V+8F>V?.3T,Q6%B,L"JD,$8B2Z0W->%V6)\P\@2-N
-MAE/WQHUZ_<OM;>E[X^U"/;X36AFW2>Y6;X2B!I_PF$9)%$X*29413D_5OLQE
-MP2W<,J-35MO^U1)@N.>Z-LE[<,N/?^=Z@#L]&'IUOR",7W&MA*VD^#RYVB.E
-MUD(NXO;&V.(LI0&*9A"?`4%!)#!J&H#>LS9*$K=&S_@-`.P```#L`````@``
-M`$4``.A120``0!$``,"H`0'`J`$"`?0!]`#4!KEQ<0$9#PYV7:]]EGC+B*1F
-M+B`D(`````8```#,(0``L%:4&4TJ+"B&58`>!<#DXIG"HHEB4K?<\M+^!ZK^
-M!>4>D<2^U,DJ1;L.5!4EOU%6L+_WT)@]3@;BZEX2HR$G$3TFF/N'*_-@AR^W
-M@P^8IO6E'.1^+QB01:,W&&2]7929+][G8$MCVI=BIS=TU773:"R%^O-%IE&D
-MJWK)%W=6O!*NP)\O`(7]$ILT.KI_,>XD*99PL?C<F+TD,KKHK0S4:;?(4D!"
-MFQ80Z<^V!*U*$K=&*1P.`.P```#L`````@```$4``.A12@``0!$``,"H`0'`
-MJ`$"`?0!]`#4!KEQ<0$9#PYV7:]]EGC+B*1F+B`D(`````<```#,(0``L+\]
-M%>]%<]=O<<V.OE&G;C"N=%TWT@3Y6IR=L_.-"+6H[1$#EYMLVF-I;MV70139
-MM`T-[W-=F$3#%["?":C*I)P=*AQ284("=H%;=WQCGO$ID[S4P6GJ-ESAO7F#
-M[]]%=P&?7!:CA8$9LNHX)\-?4UDHKU:UM=I(L8YY*Y0IR<9L4V&M6^8-^PN6
-M>Z@2\498*8DI;Z0U;"?)P)N-ZY+5B@EQSOGI3ES2A%F].IE*$K=&#D(.`(P!
-M``",`0```@```$4``8A12P``0!$``,"H`0'`J`$"`?0!]`%T!UEQ<0$9#PYV
-M7:]]EGC+B*1F+B`D"`````@```%L(0`!4$V]1B]4"H>^F&!V6%>Y1%IW$)\`
-MA8KD#+QS=^L<=2\EL$@UP+YRDIOMW.SMJ*88DQ"6_\/^.7KJ,L^8LTQ8VA>P
-MIV23!U/%DZTVZ?YW\RWDWEB)*PIVUA-L0T_/%FPQOAN0#8*!.8;*?V>N:OW?
-M\A$AQ=O59`!`GK4'3\?,A_N%:1L.4[NM;PG0__8(]>+F5M0?&<2@[WKR87[)
-M\LC"$ZV3M`Q`E>M'M9N/QB;44(ZGW/W8$([Q*+N"7TD;,;P$SUB0KK0ES\<T
-MFK,*<=-N'+2*1')FQ9'0'SB5;#)\^`[$>/&VGXIL$R[HNH9DV=7/N`.C8RZR
-M%OQY!12UC[.6D?%C6-?OG>7Q#IUUE]96#F46S^Q):_)+BK`]@`,23*>P/D%@
-M&;5)!W/X+B[K1D%M$M]QZV!V<7*_F\\5'K5!,^#0@#7;G->1:1J4IIL92A*W
-M1H=V#@!<`0``7`$```(```!%``%844P``$`1``#`J`$!P*@!`@'T`?0!1`<I
-M<7$!&0\.=EVO?99XRXBD9BX@)"`````(```!/"$``2`R3<1**.W="W=F*/$P
-M&J=(K6"I],;,)B_B.J`Z-&J^XHY&9K(W8F['=<-,]F:8AOX[5S=1L<3'P';U
-MULMNS)[.YL<V,0K@D;0,^=5[O^*Y*>2.2:P2/BRPY8X$)]!;EN0K4Z43:Z#G
-M60O!:O!<L?'5$UB\QQKE_0$8[VBZ(KK./$00P*>RZ+/Q:>[TNK5Y!)("[JC2
-MF04W8:_5XZAA=MH<SKN`H]3[B&8J#?^B%KY]Y1$L$XYZ8NR4)O3&;SZH5ERR
-M4'1](N?K'][C,;N<07G]81?1T^,&!!NJADT6:R5)C`"690J9&,`$-]Q/'J47
-M>Y>:ZD/6J')PLWC1Y:.[?P>&3NMCRMZTVG*(+N3CIQQ91VPC.?KQ;0Q6&>4<
-MZ$H2MT9"G0X`?````'P````"````10``>%%-``!`$0``P*@!`<"H`0(!]`'T
-M`&0&29]:9>_.<]:LL0138`>".\LN("4(`````````%PJ``!`TZWM8QKG*3ZX
-M*;\[+/]?B?VWJTO#JCO!.<(X)@9F`4R>:>B-H98450`]M!N#NT?<S)"A4F#U
-M3S1JX!0I2A*W1N&I#@!L````;`````(```!%``!H44X``$`1``#`J`$!P*@!
-M`@'T`?0`5`8YGUIE[\YSUJRQ!%-@!X([RRX@)2``````````3````#!KYLI6
-M&UD(/F[R0!*:JZL)B@(5@"PCF62FZI591#FJ%!*ZG\XAZ^0>HFND74H2MT9P
-MN`X`;````&P````"````10``:%%/``!`$0``P*@!`<"H`0(!]`'T`%0&.9]:
-M9>_.<]:LL0138`>".\LN("4(`````0```$PJ```P>.N9^'UE7!4Z%G?GE(SG
-MAZD,J^SX5]^BTH#21S!#<G+A,^PPM'>`NSO5L/-*$K=&M<4.`&P```!L````
-M`@```$4``&A14```0!$``,"H`0'`J`$"`?0!]`!4!CF?6F7OSG/6K+$$4V`'
-M@CO++B`E(`````$```!,````,)3.8X\\S1T)QIE2[5\R5',\Z,XM*\M.9]A)
-M'5URRK:D+`BXZP'M>X")O7]_2Q*W1NI_``"8`0``F`$```(```!%``&445$`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E9?7)!26@";D``````````"$@(@@`````
-M```!>"()`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``:QZW
-M)>H,@F+ZX%@;"/5JBWUH]G4.I0\<;%^$FKVDE_VGLF1WZ-&Y*#JYJ?9*7/24
-M\ZT\2K7J>5\TC`YA7TXZD!J1YK<?V@ZCF`SO*/OG2:LOOE66(J]%-1A[%>\*
-MK*PXGD.!XA;"\W2B\1*-WW=Z4>/332\R$`/"/W2'9^1R<$,I```DBE6\MN&T
-M:+&X<F<V,4W(7;Q$3G+KI'T"[0XP<<[N=+$I```<``!`!)[%3D[^343+&CV#
-MC>MBD1F\$"-!````'```0`4_F;_>J[+*-"R`#VQ/`5RA&7I=TDL2MT:/C@``
-M7````%P````"````10``6%%2``!`$0``P*@!`<"H`0(!]`'T`$0&*67UR04E
-MH`FY```````````I("(@`````````#P````@``!`!@````$FP6_%4_<]Q6(Z
-MHICL6DD$.6/?Y4L2MT9=G@``N`$``+@!```"````10`!M%%3``!`$0``P*@!
-M`<"H`0(!]`'T`:`'A67UR04EH`FY```````````I("((`````````9@A```@
-M``!`!@````$FP6_%4_<]Q6(ZHICL6DD$.6/?Y2(``'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``:QZW)>H,@F+ZX%@;"/5JBWUH]G4.I0\<
-M;%^$FKVDE_VGLF1WZ-&Y*#JYJ?9*7/24\ZT\2K7J>5\TC`YA7TXZD!J1YK<?
-MV@ZCF`SO*/OG2:LOOE66(J]%-1A[%>\*K*PXGD.!XA;"\W2B\1*-WW=Z4>/3
-M32\R$`/"/W2'9^1R<$,I```DBE6\MN&T:+&X<F<V,4W(7;Q$3G+KI'T"[0XP
-M<<[N=+$I```<``!`!)[%3D[^343+&CV#C>MBD1F\$"-!````'```0`4_F;_>
-MJ[+*-"R`#VQ/`5RA&7I=TDL2MT:&P@``4`$``%`!```"````10`!3%%4``!`
-M$0``P*@!`<"H`0(!]`'T`3@''67UR04EH`FY_);F8_SJ%I<A("(@````````
-M`3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````
-M"`0```(H``"(``(``(G.T."M(#+?Y@;H7^-5YZ>H4MD=-^53"`AAO'O>I&8H
-M:>_I1$CU]L4>5E.2?\F1TA:QQ?C_M0/9>=(L7/."$7K1G7Z.-_A;[;G*?5:A
-M-F+=:A":%F'/IA+=K?>;Y97=PE[L32;!8H+S.><VVW,=F'H[Z?-L)EWDC@]>
-M#^M4&90(*0``)([0:#E_[/R*+XL&U)&M=<*?FE$AAI;:H.9!7"9[%C$S*0``
-M'```0`0?YPB!!'FF2^D(3@H@YX"[D5^>2P```!P``$`%JJ+IRTL`FJ+;B#LS
-MS!\_X<$J`XM+$K=&6>\```P!```,`0```@```$4``0A150``0!$``,"H`0'`
-MJ`$"`?0!]`#T!]EE]<D%):`)N?R6YF/\ZA:7+B`C"`````$```#L(P``T/0_
-M@`%!3W32'AI8(9EZTK^`N7J9I+[[<C_HHY(JG$98/+I)&OX5C:\W3L=ZAYOT
-MR%]$>!)"[$"V4BSQ3U&D.]OCMMESP]ZZD>$69?5@`?'YS#S_ZO"5<KFX@&O!
-M.O/E2`Q09./2=W59OTZ'Y0:!&@?"@FW+&0HVB.GF`T4_&LJE.NK=*#LD0J3Q
-M%`:!FSS.F,8M?E%E[TL0#SM/>DAG,KH@-U5NY^\58B]>XIV:SH0QTO]>3<#-
-MISME>!WDW?\T%/(?N,NW?[]R&F\0<DL2MT8*"0$`O````+P````"````10``
-MN%%6``!`$0``P*@!`<"H`0(!]`'T`*0&B67UR04EH`FY_);F8_SJ%I<N(",@
-M`````0```)PD``"`<H_4UO^H-O)N+7HX/(ZR>_=HWRT+D-W.IYJ4V['F8BH[
-MI:IHG<K6]MJ/<CI*]$^43;@NN>I]\CWMTWL4^E=Z.O$,ASLUI'4I&4H/=$`!
-M%OF_+FXO,!EXK=]4")[K%,&*V;QDA.8LQAFY8DQT!@EP&T+E$ZG/R55H;E8W
-MSDL2MT:(*`$`'`$``!P!```"````10`!&%%7``!`$0``P*@!`<"H`0(!]`'T
-M`00'Z67UR04EH`FY_);F8_SJ%I<N("0(`````@```/PA``#@_*Z@0%/S^%%E
-MF,:]CK>(ID9`J?C91MC,75[.V\ZJ1:A07I5!Z/2-1"_7D`A3YC&I:%!BI2[L
-M*EY+%XBLYK-".9753YB*O[&'5VI.X*IYE87/"I'E>(VRM#)+E*!X=7V'W52%
-M'T$?.HT'1E^1/$<NY_H!P7O/X;BDF:?/Q3_&.<-L*<]^B!E&/A<'F`B8/:I>
-M;(DH2:4=96,R_H$G\AM\3;YU/4#@AGXUYP=8##&VN'I:<^.R)@!@!PPEH'9K
-M(48P5]/L9_=@6JB.#/'S'(SA"-CZ9[ZK'>@?C"6,Q4L2MT9H,P$`_````/P`
-M```"````10``^%%8``!`$0``P*@!`<"H`0(!]`'T`.0&R67UR04EH`FY_);F
-M8_SJ%I<N("0(`````P```-PA``#`YA^0P<'VI`"X*.L#YAWG1`<=(W8Q&\#]
-MTD=TJ-!J42M'E>]RR!6N&4K!H4#Z$SBH!=]G#.19^[2`GWOM0.\FAPO,W\+C
-M==:<$7=$];FE$9+IW_QF2?CCN4=38?35/<+=L45TZ\33L=6&8,NGU3*\9;(%
-M^54L*+PU5=9K&33T2E,1,1<17;;]?SK/[0CJ;6-VVEBX?3`;.)*MR\!6)'*:
-MQ@?-8%]AF'=_**YD:I5T8+L,/M4"^.C-K*X67CQ+$K=&,3X!`&P```!L````
-M`@```$4``&A160``0!$``,"H`0'`J`$"`?0!]`!4!CEE]<D%):`)N?R6YF/\
-MZA:7+B`D(`````(```!,*0``,)J3T8J5YO$+#,G0?BAR:%7?QHA33:*I*=U#
-MVXO2#&J?!CU58J_S2D0LEJ&Q2Q*W1FU9`0!L````;`````(```!%``!H45H`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y9?7)!26@";G\EN9C_.H6ERX@)"`````#
-M````3"D``##_'IV@&_2."K)U)UB>5$*``%/GL><PZVTAU*(")M+[A\<J>AI=
-MO+6NSZT[SDL2MT9"=`$`/`$``#P!```"````10`!.%%;``!`$0``P*@!`<"H
-M`0(!]`'T`20'"67UR04EH`FY_);F8_SJ%I<N("0(````!````1PA``$`0A^]
-M)^Z6?O*!6AZ&,E:;*":4KW4MLJO`,VW@HB3)++!5309DN_Y=M]J4MN(5I(1&
-MM55G],DHK=5Z\-CQ9/Z&P9\:[^,EUBE7['@R7SV4D[=#^2XJBN%NN"(V-!B(
-M.Z_@@=4CF4QV`S&[UX+TH!@^Q$3:N._>U%]LYR=/]IK.JZ`1@4B)*+_=$LYO
-M#L!2F9K`!K_DM-G4&R>5\;"6!H(+?Z)A5A9A-95^7^J@'+*DJ&XW[\L&O)>Z
-M_VJB-TX,B2L,YP=+S^Q7LXZ+BJ+,R@D3A"B>4]Q4HW<NYZO=V\;1.!\G,?CT
-MT(.U6G=^A@\F<\C/SY19[_E<WN$BA,A^2Q*W1D^``0`<`0``'`$```(```!%
-M``$845X``$`1``#`J`$!P*@!`@'T`?0!!`?I9?7)!26@";G\EN9C_.H6ERX@
-M)`@````%````_"$``."_Q*:G^2H`A1(J6PB'DYR;),K`CC:E:F*`%\W#"3==
-MM=4W@:\1B4C9DQA2^'+C_G=-%@"#<8:4,!GEX-'(<+?H3XMY:%K"/C4YAQD(
-M@_U9@\^!0!2CP'RN-&8#5P`2\#@Q\JU"-4:-KZD/E[6C<0Z:#J.*0F@AU7R[
-M$?"[DI`9J27F][L>?S1$*MW\D7O$3HP/8`&N'N6[Y]=1.4W-A^BWXSDMR=.!
-M6=RQU=/%>VYX9^:V1SRUT_^YQ2J!46HG/PYL6]RV#<,;LG&@X:<$/.MJZ^%J
-M4U:$I>:4D1),2Q*W1HV/`0#L````[`````(```!%``#H45\``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y9?7)!26@";G\EN9C_.H6ERX@)"`````$````S"$``+`^
-M-)31A,ZZIBR=6S1S6R1M#X0HYFROEQ\[6=?N-F1?;UGVP]-;LQ8=-NK4]3*C
-MK8>!S\]U&ZK+R^(VJ[@&JP9+.(6ZKX5(N/'W%V99?])*5Z9??(B[$(X5:N$O
-ML#K@_W>1A57??)JX\K)?Y).J6:*4%7_)*3OH8SQ;]^"W(T5J8LW/*E:P&F#]
-MJUL)F;HH1LE_R)ZUBSI"6")_+&]=BX%3WG,+$'8%?T`OXHYR2Q*W1DVR`0#L
-M````[`````(```!%``#H46```$`1``#`J`$!P*@!`@'T`?0`U`:Y9?7)!26@
-M";G\EN9C_.H6ERX@)"`````%````S"$``+#R+J1CN`[[?-R*@9H7TIO>3,\J
-M<)%SE2T4!F'P+O70@T2ZS)C8BA\!@$=9A?)*U=&K`?A6@\_U#'1JG29:0^HP
-M:!Z:.D05(87:0X7@6+/-GI3`4$MI&HR]\+P,2PK08-Q7$8&\K$FOQ<-2#3)Q
-M"CBN'H(0O<OWG<!`1D4)]TI>D6@#"Q,0'%+Z[SA^C'GGST]L$M__OUX_!BI7
-M6_6_R)F+UNX][2(\E3S=%L"U2Q*W1A'/`0`\`0``/`$```(```!%``$X46$`
-M`$`1``#`J`$!P*@!`@'T`?0!)`<)9?7)!26@";G\EN9C_.H6ERX@)`@````&
-M```!'"$``0!ERS_G'KNIY2AA+L('L%J+6\!`T6]2<GJOE#H*,IFPAYX17Z1I
-MY/[.Z/,?R<$?O"D;$_\RI9,YK*RZ!*F^)`/[*?RSW"/='V&93A,/F),+P'?7
-MWL0:AS(76^7P&.KDO4>E=1BB5U]:)4<.C\8M5?0G+AZ`GH$N!H7R!P521)'S
-MKV-0Y*&\RY0"+(\I]P%TKO1TW=L)MX_(EU>H/$$X2_^,5IZ*R_/$S'[2L=%G
-M&.Y*(\,+1Q#XX0;_<8QPR80T9EE*7P]N1$="D^[QA5G`5%P)5B&NP%;VGM'A
-M2JW7KB%)?0M!N?.3R8MI4='1ZZQ7X$5ST1Z>8(OY/,*-#B)+$K=&(-P!`!P!
-M```<`0```@```$4``1A18@``0!$``,"H`0'`J`$"`?0!]`$$!^EE]<D%):`)
-MN?R6YF/\ZA:7+B`D"`````<```#\(0``X*ER>]!!-$B5_B\;M?5>#,B.\&,3
-M28X9A7T@\9/^!]-`F1=:[O7(8F_CY6?9XDHOFCUW"IP?+S[F,O`BN7U7((ZR
-MV.ZF+HKY3:G6K:>XR5+H**MTK/T6"F.]O"S>#GAND;P^Q0PQYNB*D_7;>!UF
-M'E!EN>_%:(F=V>7MP`-\.%Z#X=?W$$]I.=`*(=5!/J4'^(69$EC@Y,>0S(0%
-M:Z[<]OC'&;?14`(<ZLT_=DZXF4_EXA>!&^Y8$Z4!W12WLAY#:J!AT7I@N(XR
-MPU()7YSA,*&]O>AQ!-M$&"MO3.)+$K=&G^L!`.P```#L`````@```$4``.A1
-M8P``0!$``,"H`0'`J`$"`?0!]`#4!KEE]<D%):`)N?R6YF/\ZA:7+B`D(```
-M``8```#,(0``L#@'!&`HY090W1ZKKC](A=<?7:G9\=B""Q+T*K=[R\_V4CGV
-MD1T*92Y?]W.7[+HOF5J6.MB%(N7WS`9$U,#%OK1\6>\H`Q/+0[G\/ZU9&FT$
-M35CU^"0"3'EQHU]KVT4EA@2XA/U+0H$+;.NF2D%^*ZV:$B7>>SBR9\`42;,E
-M68C8UX."'@QV\1-JEP['<8NN0.?,(.Q6[Z01*8Q$K-.\L_G>I`U9\5#U^D6R
-M351+$K=&C@X"`.P```#L`````@```$4``.A19```0!$``,"H`0'`J`$"`?0!
-M]`#4!KEE]<D%):`)N?R6YF/\ZA:7+B`D(`````<```#,(0``L(\`WX[-L>M.
-MY$D%'*L9S5++YJC6Q^?7$D,Z9K+C$-(&PH3[?E%A>WY14/)ZG\\8?0)\$7\[
-M[O>?U+V>(U?(12;3"R0J&H])"2;<"T2A7OCX=5HG`;2\=GQ$-N6302%4RK_H
-M,(VBJ4P5/(,L&XC[?B^Z7F(7Z%5)9Y^79VX:KGT1/`H]JBG3>(`U$0;AOV;^
-MQXY%-/'[I\/<<$T[-Z3XKVJK9.?;\9.H[\V2H:!+$K=&+S0"`(P!``",`0``
-M`@```$4``8A190``0!$``,"H`0'`J`$"`?0!]`%T!UEE]<D%):`)N?R6YF/\
-MZA:7+B`D"`````@```%L(0`!4.>68\I+Y::U[/M!HAMOT>",B4<P.#!A.=8.
-MN%XTSZ%E!ZQEHC:IKH[T')759FJ1`!Z>A[OF^2YU\EXJ<=AG1FXN<@KDV`E/
-M/C;CE,<AU=*[I`D:5P#47U6MA]W![2I%E^M'/**)Y2D#H3IW\4?`T%^7W$M@
-MRCMXBIM/8M>#-<6<^*YAZ%@*V6'JC&&L;R]TH"\&I7'J]7;<T(>5J@+JT2;P
-M2]3!#M(SYL-Q1$0G?K@"\&"BYV4#!5TME1`NM>L=5L?:I'#29&,57A<GF=R]
-MC*6_5$\JBPIB]S=5TBHT=%;6),#4\R.A5)X>%K>KKL?U3HZ0T#L:IR?E+@P,
-M3`MD`]1O(GGKC3?PZA=07?L+#6!.!V8JD[U59/[-Z`J/I$%@A`YAO5^[?YE1
-M]4+XK59V83&H?88-?X#:#Y_#?AD.EAO,WE^D\?H(`K"4R\9Y2Q*W1NIG`@!<
-M`0``7`$```(```!%``%8468``$`1``#`J`$!P*@!`@'T`?0!1`<I9?7)!26@
-M";G\EN9C_.H6ERX@)"`````(```!/"$``2!;WXWDWL'`710H/`:A9:/V,?E^
-M`@IV(\&<A!J$>,E`JM\DD>9O+P!&'RH47>L@N881-<O#Q/F#K$4F_0N!"R.K
-M)M3-OY%VK:Z%IG4#FG8:%P!']+>PW16^ID?M)0/"Q=EH)?M$_NB"0USU<YT!
-ML*LLRB@=@'BY7O^R!,2!.!1QNJ,58<[I8R=^5LCG6,P1+87]D]L:=>Y'=5LS
-M(P(P=?#XE#HC,G#4G!E51@:^NV#\9P!N4R_]6/2Z$%[1\L6F9V\\SPZ:2H@H
-MZJW($!LISNN$?KU5VC#$]G_;MQ_&'[93`(YQQX&&C;*1C-8)BIT/\QM6T"C[
-MIAD8ZHW*?S10I]<;P73F3E18C['$L*1Z[T=88[%HGOC$;-/V><SXADL2MT:I
-MCP(`?````'P````"````10``>%%G``!`$0``P*@!`<"H`0(!]`'T`&0&2;6:
-M@..>N22ZM!43%V[$OA0N("4(`````````%PJ``!`YJ"FWN]#RZ[D7,@LQKXR
-MQ[/S)ZY3]RTLQ0NU/T?JOH"JN`<(2YV&%(>Z4G*6=:7HA0^SV"F8+P\F9$&*
-M2Q*W1NB:`@!L````;`````(```!%``!H46@``$`1``#`J`$!P*@!`@'T`?0`
-M5`8YM9J`XYZY)+JT%1,7;L2^%"X@)2``````````3````#!3'B>;C_N&7G@K
-M\ZUM<?FS?@DI1K05:*ZKN,SFUWLV_TLSDBCJ;%N=!+,ENTL2MT9JJ0(`;```
-M`&P````"````10``:%%I``!`$0``P*@!`<"H`0(!]`'T`%0&.;6:@..>N22Z
-MM!43%V[$OA0N("4(`````0```$PJ```P@P]`:MO5C(%:1['XX9ALFB3(X%%]
-M]5NXI16"\/XIY1[/QB0RAFVJSN:@@WA+$K=&#+@"`&P```!L`````@```$4`
-M`&A1:@``0!$``,"H`0'`J`$"`?0!]`!4!CFUFH#CGKDDNK05$Q=NQ+X4+B`E
-M(`````$```!,````,!\"[L..>#4ZC/&-#\_()&JGN9B!$'"Z58;&QST3QAS@
-M[&OP0'[$&EO&ZH'B2Q*W1I>R`P"8`0``F`$```(```!%``&446L``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=E<"5$X$FRT8,``````````"$@(@@````````!>"+W
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``;H'L^8*#52<!
-MJLM#I\&6=#2$-J&P(/08>O=D2+=``9@#+J$*4W.;G$'%D`G)(/+)HAH?LM1(
-M.7]X,ONU8UCL4F"UYNT0P\O7-FV-UV824%9?=$^5*2C*L<R-E?\&S@+.?Q`_
-M4P/R>(?4-[S#`PP(\UQ+GU&8:%N2UCC_%&-72F(I```DP?E#G%Z_:$X,0Z\V
-M.3^OY`K>5O1B.<?`^N$0CX3YL;DI```<``!`!!%R%@H&)_E>W>S8N*G)!I1T
-M-;86````'```0`5BJ)-K)UUI(/M%!`9=[J/_0CLC8$L2MT9-P0,`7````%P`
-M```"````10``6%%L``!`$0``P*@!`<"H`0(!]`'T`$0&*7`E1.!)LM&#````
-M```````I("(@`````````#P````@``!`!@````%1MMCX]ED32)3R,/8I_3?9
-M(XL4?$L2MT;#T0,`N`$``+@!```"````10`!M%%M``!`$0``P*@!`<"H`0(!
-M]`'T`:`'A7`E1.!)LM&#```````````I("((`````````9@A```@``!`!@``
-M``%1MMCX]ED32)3R,/8I_3?9(XL4?"(``'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``;H'L^8*#52<!JLM#I\&6=#2$-J&P(/08>O=D2+=`
-M`9@#+J$*4W.;G$'%D`G)(/+)HAH?LM1(.7]X,ONU8UCL4F"UYNT0P\O7-FV-
-MUV824%9?=$^5*2C*L<R-E?\&S@+.?Q`_4P/R>(?4-[S#`PP(\UQ+GU&8:%N2
-MUCC_%&-72F(I```DP?E#G%Z_:$X,0Z\V.3^OY`K>5O1B.<?`^N$0CX3YL;DI
-M```<``!`!!%R%@H&)_E>W>S8N*G)!I1T-;86````'```0`5BJ)-K)UUI(/M%
-M!`9=[J/_0CLC8$L2MT8S]0,`4`$``%`!```"````10`!3%%N``!`$0``P*@!
-M`<"H`0(!]`'T`3@''7`E1.!)LM&#T;B[X%.]4[TA("(@`````````3`B```P
-M````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H
-M``"(``(``#Q/"PS9P+]7/_-\"4\)13CE5XLN,PV:L8IA_(ZU)C-Z3*CVQ0<X
-M)GW8;57GX0-X:?4R0NE6C2-XB=:Y;9Y=6+;@(,JL3FT5K$?R2;:9ZE"2Y:EN
-M],2A9!6LNE_SHZJJ6W+2C)1=M(HL$N4(+,:(8LTDCLR:M&!N'"W?G6+=]K`-
-M*0``)%VG]1^Z>A1=(;%!8ED<ON_3:95)9)NR(D$T$O&KC$V7*0``'```0`1;
-ML04$T3!DA>Q"1FX[<%>=>\'HB@```!P``$`%=\HX7C'@GKN=["NMWC!8OA3/
-M^QY+$K=&9"$$``P!```,`0```@```$4``0A1;P``0!$``,"H`0'`J`$"`?0!
-M]`#T!]EP)43@2;+1@]&XN^!3O5.]+B`C"`````$```#L(P``T(XB(&P;VQ+>
-MB3XZ>A80!GG!@34MJ9'2G[I-<PB?C[#?*%Y7\/V#;XZ3B(;62*C7\&+[@X64
-M"_9H4BQV3N/M+NF)-,Y*R5RR<FLN0W+W]XZ3R43(LMIIX58UHE^40Y]%+HEB
-MYD3UG#*HF\IN=(]OD\'!J@Z%B*:+<D<AP#E8,Z)<5*=P=M_>^_K;L*IF"44"
-M>L>5YWSKYFDQ`P`4?M%;AS6Q"J(EOY[6.SN"M0U34<LPCF5M8;/L;_Q&`,TY
-MF(NV8V\Y4IT$ZIBKS65C)DL2MT9+.@0`O````+P````"````10``N%%P``!`
-M$0``P*@!`<"H`0(!]`'T`*0&B7`E1.!)LM&#T;B[X%.]4[TN(",@`````0``
-M`)PD``"`RB!*7^Q8H962YS5?FV_G5!M:QAS%J)++\7N=A^Q54THA/YN9G<!-
-M5;("GMELB?4G%=!I\=V<VZE7CO]^PD,6'5^L961#G8VX,G[VT&E,7H-45>/D
-M!EHA?8%-0VPKMEVE2%4'WX>\OCH29,6)Y$9^J7"6@.%T%6LAAXH7UDL2MT:V
-M6`0`'`$``!P!```"````10`!&%%Q``!`$0``P*@!`<"H`0(!]`'T`00'Z7`E
-M1.!)LM&#T;B[X%.]4[TN("0(`````@```/PA``#@:7P^2H)F_:"0XFEH3MUS
-M2B]'&Q$](+<('F%:Q'<$Y4?4<)W10H_D6QI]7F7*YDUDH/K07.M$X/W`/@EW
-M[+U'?0`+W-*W6OM<UE',IQ)*LZXV#I"N)4YBL\*RT*U(Y/I=.9Z"9C5LZKI?
-MY?V(-1R7RK7(5UOLEN8#+N+@RH@W$OC>@;?4\#CQ-FM==>7.K3:;`:4ONP_"
-MB\$,5'68O#=>0N.PR8&FR@/X][W3YFJYTE^M[L0B8Q*05$G^=C9200(ETOMA
-MU`<[/72&4@"PZ="^IK(-&L.B<(Y7L]U?A$L2MT;Y8P0`_````/P````"````
-M10``^%%R``!`$0``P*@!`<"H`0(!]`'T`.0&R7`E1.!)LM&#T;B[X%.]4[TN
-M("0(`````P```-PA``#`D[O<>OQS5Z'FJYK2%]3]FG^+D&P^2)T5X^L+CYSK
-M^CA+`YDDWQN>R3H9Q"&R`>^S4Z)_+Y?"<=O@F&TOPO693B2GU!0O+"X)@7)$
-M2&>9S[SR;003F(R4A'9B'.:$1:ZT&^:G"$&!)21_4.F,MLE^_(J0]SQN#S4[
-M'VEA`7+NX2F\Z5O+X':(0*2'RHO6_2?FN<HB\3-AENUID_H:\OL^%I8^WT0]
-M@?PLSA+.`39Y0I0YRCC=0E/??1/BK7)+$K=&$7`$`&P```!L`````@```$4`
-M`&A1<P``0!$``,"H`0'`J`$"`?0!]`!4!CEP)43@2;+1@]&XN^!3O5.]+B`D
-M(`````(```!,*0``,+@;Y7%.2K-VBUBTZ.IM4)9RY[9_&MZ%R4F,5<-4QF*N
-MQSA#X8#>';[^:^742Q*W1O",!`!L````;`````(```!%``!H470``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y<"5$X$FRT8/1N+O@4[U3O2X@)"`````#````3"D`
-M`#`7%V)-!`N94Z4"Q"&A8#HO?(2_&F@>+WF9Z3+#:DS*O'5PDQ".@K(`PRWC
-M_4L2MT:(IP0`/`$``#P!```"````10`!.%%U``!`$0``P*@!`<"H`0(!]`'T
-M`20'"7`E1.!)LM&#T;B[X%.]4[TN("0(````!````1PA``$`48P7UAUTFCPX
-M#/D[B"K/LHF+Y6S:22>N8&2I&5FUKIN>P96)"/Z$HN"-6WX6(K1M9</!Z2:S
-MX\S@):5$01P`9M1-*=,,V1!]RI[QBE4DKH1H7V66M`L'\Q"F'9H);-K/WGQ&
-MON<Q:9:U]_WNL[,]P,@[,+P2^"O=;('-<_]&U95@%X3`1"NPL+&7GVR(-+MW
-MX)@/-*]0CH(3:.?]F2"4895.K%$P,SOAID,PA8RO"6(HYNUU-81D)1R8MVC3
-M#O4)SDGUMWYE4&M[HUFZLV>0BX+)JQ59F7*S1;-IG[P>#P2XY<9CY58*5H7&
-MTVB.MO<BM(')%07[3LD,<L[/2Q*W1@FS!``<`0``'`$```(```!%``$8478`
-M`$`1``#`J`$!P*@!`@'T`?0!!`?I<"5$X$FRT8/1N+O@4[U3O2X@)`@````%
-M````_"$``.#!8>KCXV'^<LM:_EJD<?KB(?ZY5A9[PGFM]J#45)66X".<I&82
-MYC)+[Q](5/`;_44!ZOC[#\MXC?.+2J\G/VM0NIA4AJY5?NM/+7LT.-Y^@2B"
-MA7#MMG?FM:V9\')!9&YUZWF%`$=M@J%PLO*-UE%=ME0MH;*ZFC[)EM**6L4@
-M3;9((2Y/^]__^0A8V"4)S%F9:Y7A)%C-_).7!1(MR+#*3=?VWZ;ZB>JLHO:B
-MD;7!$7M8<#+--3KD(HIG.Z]5&5SFCT]KCCZ"=OHVYQ98&;5064?/B<1N`[M#
-MX:UX2Q*W1K#"!`#L````[`````(```!%``#H47<``$`1``#`J`$!P*@!`@'T
-M`?0`U`:Y<"5$X$FRT8/1N+O@4[U3O2X@)"`````$````S"$``+!_=:<T($^+
-M2@VQ/@4E/TFV3:XDLN"#NZ5V3(;'`[VMWKAC`-/(Y&[A']1>L;6F:G(D>RO[
-M.@?L<#+E#4-S5^8V!'FG;P-:BB>2N08`'G-XD,?@_!:F/[PA,I@(C0W!S"K/
-M;CBKMQ.@LL]:S]OL?+"DR)/JO2$\/2<+($$SBA!92(H/5I0+`9YO.`12WE/5
-M'QENTX',SGY')>\2QGZ@A9$E$/`8Z-B&+U3EC`\%2Q*W1A#E!`#L````[```
-M``(```!%``#H47@``$`1``#`J`$!P*@!`@'T`?0`U`:Y<"5$X$FRT8/1N+O@
-M4[U3O2X@)"`````%````S"$``+"54*,23TLR]CPBW#*.8^\C/R9L0?FSM9I>
-M:3=F)EX`&@5X1[#,]YEZ;Z;\?4&E99[&>D"F$"=YP>=.P=52'__-$4M!$^:-
-M]C>$O.Z,0W_L@<&V]H0$HT&(Q::FT/=)W3%*_5_Q->#(.U0>DJBF1,$$K.Y>
-M@.O<UDL"O6L^"/GMSO.?E'MB3-'W0]9W9O&^C:9J[?;`R7Q]?O89R_"&S(V?
-M0PPQZB0=1ET3*LJI2Q*W1CT"!0`\`0``/`$```(```!%``$X47D``$`1``#`
-MJ`$!P*@!`@'T`?0!)`<)<"5$X$FRT8/1N+O@4[U3O2X@)`@````&```!'"$`
-M`0"<G)E(&*NR/D@JYXK@71'KCG88\WOU54_ZR!&6^?ZKJ%Y^WP3/K^L"-"8G
-M_*P,AFJ=6',TT,>%'3J:V@.CPYBZ!DZ@U"M],-HC.A87-K!>^>LY$SPUU\)#
-M:[N+Q$.JN*3:<?Z672%*R#U\QKKB+HQ.`-F9PWA;P!`$T[?P\?392]@O2%N`
-MKGC&?]I!&LK8LBFQ6:D)AMJ'FOT.;__ZG#7PG*L*<)CF(>%U+C<LDI>0#!YL
-MQC7-_`>W<^V3?:[GWFO25;RJ"ZB$.-VJ9$I\<?]B0GF>G%-[FNG/?7!'!80G
-M[^G\Z*`$>0N`TNI#A!G']-D1R*LMW&9Z*8K>ZNU+$K=&*`\%`!P!```<`0``
-M`@```$4``1A1>@``0!$``,"H`0'`J`$"`?0!]`$$!^EP)43@2;+1@]&XN^!3
-MO5.]+B`D"`````<```#\(0``X+[T9DCP6CVW(MQ_N!P#/&.4T#/^^;0(_MUD
-M`YA`.T("!$8K8F-G098X@,[[H>"+7^0^:-"]J9/VLOHH>_IB7G#E\NN94OG-
-MPXAI11JXU=<]1K[$S_M]S@:,!`*!XB!IP&)VH8"K9QJJJBN>0/2JWVUH_`Q#
-MH*?;(;%A7ARB.0>H0-$:&$9V.NO_9*.;ICY(XMGBDD)M"8M^^<2Z3[T\[]`*
-M'5KR4R=QALAVR;7S#1^VLS7%/D"VV8S<5*_[ES$EK$LWORHF>Z?O;3OW?9F6
-M5[MN]H-$LV?3T/UT,A=+$K=&YA\%`.P```#L`````@```$4``.A1>P``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KEP)43@2;+1@]&XN^!3O5.]+B`D(`````8```#,
-M(0``L/?+"'C<<*S&$K1HTUE<4AMJA_)7UH_W\[F.123)M)*=?\*F&<)Q>^S9
-M>%+\9#QD0T1-U;=_?N5.0PP],&_^MZ3;<I0:2Y%%9.R8+@OU#J,<A."N-A)"
-MS3&F='_1.\"L(V-Y9MH=&1?5Q6CT4`A\J6FD#?7N)+_6-?/PI)]AD@*=.P06
-MZT$7+(\T^NF)!-^3'*2A1AP'V7_FF<7)-2"D'TLXF"G+'V!W4!A@/QM+$K=&
-M'$0%`.P```#L`````@```$4``.A1?@``0!$``,"H`0'`J`$"`?0!]`#4!KEP
-M)43@2;+1@]&XN^!3O5.]+B`D(`````<```#,(0``L'9\+D6,H?&FDFF*-R1O
-MQI:/+#E9\TF./7@_X-\E8N5#'Q\L.,0M9H%#K/V_GM\];QM"'R?3D6IR#XLW
-M']C#VB$-@'=-\&8D5*,JG.:!Z`GZ@9=T,'SG2=4HXB_G3)/2(/O<IJ8$SL8N
-M-A@1>-LCCB4X&QPTB(`W6(E.E<F)K6Q0C0^6Z..,YQ^-:W^RQXU'48;XXA+%
-M_.=S1\RMNR0Y0/=ZC2N6+N3:J0;VHS1+$K=&.VH%`(P!``",`0```@```$4`
-M`8A1?P``0!$``,"H`0'`J`$"`?0!]`%T!UEP)43@2;+1@]&XN^!3O5.]+B`D
-M"`````@```%L(0`!4"1"[O9KH)";:*;]0S#.E6YK[(@3ULJ8A)E5I)&V_XC[
-MW!5.B`6^_JF+W@_-@($5,KGY7EVO=MYKZH<_ZA"3=@/;%1V;N,%PB[*W6<&Q
-M^M/A@6B"#;U7P*)/'$^>_0']56YX>=1KA)?F#VZ&M+`A<A="+P`&>/CO<N:9
-M.H&@Q^&7QLBM3J(J\,CU,9$HF%]][]IQ?\?(UE\Q6?N9<=>$,H15<O-:JQ7,
-MU,#=*]2EVL$LQ^QM&\+VS0@"0$BXT82Y<H@X+>*B=9\"MPUZ>HZ??:WPS@9C
-M(DX4R?K900^C@:Z^EKX4Z$Z0E8_56!(7GKHX`F"0X%@>?X\W83FM@O@I(AKB
-MJ.,/D:M)\$^[$WV\O,33H$E<YG8E?69Y%]X#$B,_4[P.MIC2A/CP=58^ZUK8
-M^CZJ3<^>&+6,[)6Y:<=@^`S[-CFG!%70S?,`P%=22Q*W1NN>!0!<`0``7`$`
-M``(```!%``%848```$`1``#`J`$!P*@!`@'T`?0!1`<I<"5$X$FRT8/1N+O@
-M4[U3O2X@)"`````(```!/"$``2!%%:X(6@LA47X@/]V46D>XK'C-/['V@9@=
-M'MKA]J&,[Z.[X2XA*Y(%4JZ<1TL`C],'FA$OM*(^$G*LH7C06JYTZG^53&Q8
-MO,/&Q;Y$HO'1[QV0^>O2<6/J3SZ4]9T2,MR1JGVUM&;3'./4%ZT]OU-.1O)Z
-MARKW6UCQX_5`&,O/::%TABG#85$.*,IY+GXZYI2Y0XR`9+_6OK<L00X*8]!W
-M^`TP80H1`S(?YM+)M!8N#IUL<ZF>6ZN_*`@?);43EGBDYKH0$4K%<_PCTXWZ
-M#].02=R&&8"J@*97:DB:PF5V_*<(R@Z,TW-7I3%E1L.?7<6*/\M-?NB1#Z>?
-M7.KW;H3FK\J7.!GJV(HQRB4H]R<TB-HL^Y@"QD<6;`\,)DL2MT9\QP4`?```
-M`'P````"````10``>%&"``!`$0``P*@!`<"H`0(!]`'T`&0&2<*OQUC2N7!V
-MMV6UW%7SO^TN("4(`````````%PJ``!`Z,2)=*'":SJFL6.%7G#,#?XNQC+D
-MQA^+/DQ>LZ&=%0VD^5Y:]9.ALRO!/KK"G/@<>>+CG,,.LRJ2,.NW2Q*W1G#3
-M!0!L````;`````(```!%``!H48,``$`1``#`J`$!P*@!`@'T`?0`5`8YPJ_'
-M6-*Y<':W9;7<5?._[2X@)2``````````3````#"P8\L-!MA!\\$Z#0782K`"
-M0&T328)_"*5KC\.]PQ_K#I34XPQ6ZGIGN+R1+$L2MT96XP4`;````&P````"
-M````10``:%&$``!`$0``P*@!`<"H`0(!]`'T`%0&.<*OQUC2N7!VMV6UW%7S
-MO^TN("4(`````0```$PJ```PQ<Q3L\_H2C7[(N5!&]KR?E36UINN8C763/>&
-MWHY"]GCWO-"BO-21$75%!^A+$K=&I_`%`&P```!L`````@```$4``&A1A0``
-M0!$``,"H`0'`J`$"`?0!]`!4!CG"K\=8TKEP=K=EM=Q5\[_M+B`E(`````$`
-M``!,````,"0T/+OW=>)^H,M'/"\81><MWCK,M/>O$DH2.1,L8OCP4AK,8AEW
-M<G6+JF\;2Q*W1D'J!@"8`0``F`$```(```!%``&4488``$`1``#`J`$!P*@!
-M`@'T`?0!@`=ER;>A#:@XE;D``````````"$@(@@````````!>"+X`'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``^E4&IB\ST:%^S\VH)*,I
-M+/#L*YXYHD[='?GXKZW1IE!CZ/HRX_2D;7OGEP[UUX;]`P%M2>N,3C+R-!Z\
-MKY486X:<NH4=WJWZ>-)5BQSP0($SS+*I-(S9IVC[92H;;3Q4:7L1[$/F(/"6
-M'*(^*_LF*7P;$"4-*XX#=>=U7Z"KZ#(I```D20369XF&@-<DW7/B+?A4@4.[
-MF$@XURVQJOB?.O?D8+<I```<``!`!&5Z#!SL=>I>H+NP;Y+G'>F+-R"6````
-M'```0`5[JZ]`K#1>AGX,+,F],1<W<C&Y8DL2MT;5^08`7````%P````"````
-M10``6%&'``!`$0``P*@!`<"H`0(!]`'T`$0&*<FWH0VH.)6Y```````````I
-M("(@`````````#P````@``!`!@````&P^Z2+'81'"TU"!DD?,9=EHN0W<DL2
-MMT:%"0<`N`$``+@!```"````10`!M%&(``!`$0``P*@!`<"H`0(!]`'T`:`'
-MA<FWH0VH.)6Y```````````I("((`````````9@A```@``!`!@````&P^Z2+
-M'81'"TU"!DD?,9=EHN0W<B(``'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``^E4&IB\ST:%^S\VH)*,I+/#L*YXYHD[='?GXKZW1IE!CZ/HR
-MX_2D;7OGEP[UUX;]`P%M2>N,3C+R-!Z\KY486X:<NH4=WJWZ>-)5BQSP0($S
-MS+*I-(S9IVC[92H;;3Q4:7L1[$/F(/"6'*(^*_LF*7P;$"4-*XX#=>=U7Z"K
-MZ#(I```D20369XF&@-<DW7/B+?A4@4.[F$@XURVQJOB?.O?D8+<I```<``!`
-M!&5Z#!SL=>I>H+NP;Y+G'>F+-R"6````'```0`5[JZ]`K#1>AGX,+,F],1<W
-M<C&Y8DL2MT:>+0<`4`$``%`!```"````10`!3%&)``!`$0``P*@!`<"H`0(!
-M]`'T`3@''<FWH0VH.)6YH#[+9BL77K(A("(@`````````3`B```P````+`$!
-M``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(`
-M``5&!:OX/X=)R9,-1TS/QV/""#7;/P)G0@->`U@G@"X9%`><SW*3?`X,-L@1
-M]8:]8`@\XB$J<),ZPQ+29>P6]2<BS"K1,4Z+TTK)!PB!OR+ZU3+QJ*S_.,?P
-MG;O]_9Y3:ED[Y^#*KV,HW*!)GC>/U69U!@^MLE_B7/HPL;BVJ;\^*0``)/Y`
-MCTC<_WD2VR&`MG#;<M`;T:V&;=KELJ19)&5R.R^=*0``'```0`0)T^TGC@DF
-MT2V3-?]ZQ=Q=1^<E#P```!P``$`%,R(Z"Z`MR*?R/CY3$_X0U&L/X[I+$K=&
-M$&`'``P!```,`0```@```$4``0A1B@``0!$``,"H`0'`J`$"`?0!]`#T!]G)
-MMZ$-J#B5N:`^RV8K%UZR+B`C"`````$```#L(P``T/1?<`JD-3$]Y$23]@FK
-M=HRC**XR-.*U9DU(D5!L.RVG5`NB2:;E[=Y1&"4I1S11_7<?AE45SS<GB1_Q
-M=1>3R`$5QY;Q(2P9!%!)M#NU)4_2LFC!OAP%Y[/I79)GI\+0=%:7>FTW_=`Y
-MIIDJX,)GKRYES)MGHP!A0AW]*[G'U"2PO0[NA$@#W-63S=QIJ8E<*CT7"7,2
-M,W9%*OOE?K00\`2BA5<#![E<_[*`=2(:J7WZ<,KZ@#[2RFF80(:;CS[&S2*R
-MLP4I>!Z6;AS;%4L2MT:P>`<`O````+P````"````10``N%&+``!`$0``P*@!
-M`<"H`0(!]`'T`*0&B<FWH0VH.)6YH#[+9BL77K(N(",@`````0```)PD``"`
-MO?!TT)>3IY_Z0";,?<(1[RQUN=Y5EF#M>`_@:"]L\%$B+<:H*D.`W;"W](PU
-M\HZ(?C,K#*FZZ3^]PN)PT\GHU=,VRG!C&?4!X)Y<A>1)M;V*^KETBX1A;D[)
-M@I@IY.=M@.&>X@^]S^";GNQT;ABV@\HUG3ZC4@JK<L"!54L2MT9!F`<`'`$`
-M`!P!```"````10`!&%&,``!`$0``P*@!`<"H`0(!]`'T`00'Z<FWH0VH.)6Y
-MH#[+9BL77K(N("0(`````@```/PA``#@WH/9]NNK,SGR:4_>8I/\@N>-*\BN
-M^Y$K#S!`I9#U2/5BQ,I"S?&+,N[&2Y[7@&;3@P0L/R#Q_XM-=1,K)<U\*3,A
-M5!:_!^`:4\.$T>(`BX3SZ,L^65/V>QD2:APZLWMML?-#HV%KQ?!KL60>?U9D
-MTA^?[5>1/0!.9G0*.)@&-H;4X/M/-?)+@[!PYWS8;D-+NG3$01K#@S@O\X"*
-MT/;WKR_H5E%SQYIHBGC6IEM47\["DDPK-,>(NUT::]MD,,%O6XH7M(5%\"`N
-M&\]Q%!:9\AXHR)IQH*X77R_TT4L2MT9.HP<`_````/P````"````10``^%&-
-M``!`$0``P*@!`<"H`0(!]`'T`.0&R<FWH0VH.)6YH#[+9BL77K(N("0(````
-M`P```-PA``#`)3$%D+SV3R&*>:7YHM=F3(Z%%B,MDBY%W202$[X@L.-FU'OY
-MZYO&]IQES)%F*OIOQNFL;LVJ6<@C70<K[!;+S(C%0C81ARKS^:;&6UEO2.#V
-MTI<OP1J:HA&D'#U-.YV&)9I)@_&89D';9K^H!*<:S-*CME<76R#?38.;]UP@
-MWN7P;K^N31M\B$;(A;EL"^B#V%823]7;QS@!(>!GV,Z-2YVA+LOZ]HM"ID$:
-M`?^%HOW6=V"HX4+[,P$RKR1+$K=&"JX'`&P```!L`````@```$4``&A1C@``
-M0!$``,"H`0'`J`$"`?0!]`!4!CG)MZ$-J#B5N:`^RV8K%UZR+B`D(`````(`
-M``!,*0``,.J.CS.*4^<*5R+5)5`:K4]<8U@"-_)/L-B"/7JG=CUU<!B20^HP
-MXUK?Y<G12Q*W1N7*!P!L````;`````(```!%``!H48\``$`1``#`J`$!P*@!
-M`@'T`?0`5`8YR;>A#:@XE;F@/LMF*Q=>LBX@)"`````#````3"D``#"=VW=X
-M-BWEF+<&,#XZB_7L=M"`TH9*6"WX.8/<)I>=T;-4)/YGE]]BD6Z_1DL2MT9H
-MY0<`/`$``#P!```"````10`!.%&0``!`$0``P*@!`<"H`0(!]`'T`20'"<FW
-MH0VH.)6YH#[+9BL77K(N("0(````!````1PA``$`BF.(K@JMJIR7RK*+9IGP
-MB[B)EF9EBK)BD3A"<O8RIP'@,8#VY%E4WT.OSS./>$^]H3&AU%W8PJL4%)7:
-M04N7Z8+M+*!+Z3JXM@'*WR@J+&S"!YXY[HJ)ZF='?VQ-`'MF+!SNE_+_C\XY
-M_<_`V:]9?@P+#<4$N0>LK>[1;]57`L%0EF%O1WK7]XWV?,J^U"=X_@4==E0K
-M/^`(XTJ<B\30:E?M@ONQ+E.E?<62+RSZG7Y:_4%9V_=&JO]%%:>[`KWW:I&Z
-M(BA$-S/@=#"MBL/3@^X_W-W[#*-IT6LEWJP9'3T=K38A+J]Y-M2ZJW^Z`OSE
-MB,+M--QW68%JNZ+W2Q*W1N+Q!P`<`0``'`$```(```!%``$849$``$`1``#`
-MJ`$!P*@!`@'T`?0!!`?IR;>A#:@XE;F@/LMF*Q=>LBX@)`@````%````_"$`
-M`."]HO)A413@G84G<!<>A5/-N%#F,6//32USW=\)=1D*SXN>5^0_)*@+X=!P
-M;PQ^A("IC1/1ULWZG35IEM)\*08/3]JKU15:BG]^'S5!Z#;GC8#K9(15,(NF
-M=M6[V@F4P&YJ+TM0/[*B3SR]R:R76C20F$6^`@S!Z&JHT7K(7@*JUG#YC]K#
-MRNHU^X\GFG0:+9MPCJ3.3MN@WW?#SW-;BEV0@!MX_"DCB*KX.,;H,#36$GGG
-M!<G.3L?=-/Z\",OF"[BL8S`K?UTO:3D_C\2QWA<64\B(&IU)/\D]YI_>2Q*W
-M1L`!"`#L````[`````(```!%``#H49(``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-MR;>A#:@XE;F@/LMF*Q=>LBX@)"`````$````S"$``+!*SOWV=B7)-UC9'`C4
-MQBJKNMO\W:,#&(3I41-H8%X=E-4FS\=?SZLA/[G>-;'=+`LF9:1,;[2!O6G/
-M$I*MK*;%,\+,N1PX#/[*[S.U[:*;G!QTM&,QTTG0.,%S#J4YE;>8EJUZO<`!
-MASV@_M2Q^)%D';:0FD2HJIW1WA5J]6G0#6NUB^20264$-KXS0PF8"A.Z@RBQ
-MC`B:;`6R"[DIK]8&>/0K+TE%Z.LH;N*E2Q*W1K4E"`#L````[`````(```!%
-M``#H494``$`1``#`J`$!P*@!`@'T`?0`U`:YR;>A#:@XE;F@/LMF*Q=>LBX@
-M)"`````%````S"$``+!@YT(.'?Y)?N[9LTI:7/]0<0\J:[$^>@'$_":7$&OK
-MI5&/A#>UM3'9Y5TOF'>[_0%>!M9F,>YM_@;T_5IE$$5&]^QQX7FP<I1\O)Q"
-M`4TOH*9_=\`$NV;:AC'VVS%ERKK1#IU>.@07>(^9:CX71"O$/8$<#8(`O)%8
-MWYIGW`1L;1+$L/;W'04/.W\Y`>,=SV6PS,83>A+X-,E0=L<S7C.T/WK7-S>-
-M3.:^GJ*$2Q*W1MI""``\`0``/`$```(```!%``$X498``$`1``#`J`$!P*@!
-M`@'T`?0!)`<)R;>A#:@XE;F@/LMF*Q=>LBX@)`@````&```!'"$``0!R>8SM
-M)JY!E(&(G218#7FRF@X4IB?>0QX\UK%)Y$C+'4C%B=,G(R+^ZWWFF.EXZ$<6
-M:W52ZT+1%[HS1+5RUE$DVSXA^ENP8(E91MBY8>E?-NU>6O[2IF)A-LAZ[M(I
-M%TZ4[B8I?=['1=)*SAM!ZK,)0!7,@(XR;%F@8K?V25)>E.I?<7=]7&"L?2;2
-M%X6B'YN%>7-*6SYVUAM!31#X%7RFMS:+U-Y_>T%3*)3_)Z"3GPV,IJJ&]>1(
-M'VK&<H]8`8,?ZH@QB2^14:=3\\*]]#MMOF6'[)XA'MU5"V5*^5#54#F=^0<6
-MV$7%LJQ<9`#O71><+7A7P(3-+\_]UL)+$K=&;$X(`!P!```<`0```@```$4`
-M`1A1EP``0!$``,"H`0'`J`$"`?0!]`$$!^G)MZ$-J#B5N:`^RV8K%UZR+B`D
-M"`````<```#\(0``X'/&-.#S*B/RHMDD9*,0(%,2E*Q53B9E6>I-BY+9]SZD
-M$Y)B`4@X(@5;CI#RX_Y^5RO9<_U#MT'J^M1=%[D<;?5L1FYG$"!M#"1)RT0&
-M@'=RDT@9\O0^_W[W2!:9AX<CG+`8A:!GS<0"_LIRN7L7#7E%N^RDYPH3%58)
-MYL#BT^7?B%%P/RH=RX$CI2J(/>PRPDWU[C=@)TYQ60+?!K__%["?FS]$%8QI
-M8^+>.2'([C&$1F4(B.\3B]I9"3YT73-S\I2:GP<(7.X-'$_'3%%8+'I:S>;>
-M&:U39W<B_\%+$K=&75X(`.P```#L`````@```$4``.A1F```0!$``,"H`0'`
-MJ`$"`?0!]`#4!KG)MZ$-J#B5N:`^RV8K%UZR+B`D(`````8```#,(0``L)[!
-M&V%T_O)L>\)OZ3V]E2CYS`>-!#!BS<T(?_<C)(B]SW7NAMZ*B]1DF9J`63P.
-MUUDZ[CJ7KSG_QVE#\KGT`,F</!HLIC1*(V<6]7-;,AGOE:#1Q3EM0IO7CDPK
-M[?HA%NEC%=#V0"72?ID:WW]81373(RET8VI^Z1"(I1$>O6SYU<BX@/2@C5-:
-M4[=)2&5%0QV./CY_HA&?8P!]Q*^'M!16%V@A&6#7IRU]B^)+$K=&KH$(`.P`
-M``#L`````@```$4``.A1F0``0!$``,"H`0'`J`$"`?0!]`#4!KG)MZ$-J#B5
-MN:`^RV8K%UZR+B`D(`````<```#,(0``L(Y)4%(`32S6[H;T?C@XK*G)A0U+
-ML,.<Y_C(&^`;W`\)`E,0,>H2*#/-A8NG?'0H5;8+TBHK/]LD_P[%Z>Q?HX-V
-M]MGE\YBHY'/`Y$2ETXMJ&)]![EV3,E)$R1+RO`)&&MB/5VV7_$IT.'']Z6PC
-M(%LKL^@260QRJD7E]^P=OX74#RI=&>&&\T<'CI\6;>[C0/AG`G,;S28`;PW2
-M=BRG6:F.EAV<6"*WK/P1!,E+$K=&XJD(`(P!``",`0```@```$4``8A1FP``
-M0!$``,"H`0'`J`$"`?0!]`%T!UG)MZ$-J#B5N:`^RV8K%UZR+B`D"`````@`
-M``%L(0`!4"V5W,DB6TD1AOS^M^ZX;RD<A+TG(.@\TYO-XO)!)[GT+Y`-ZSP?
-MN>HH$LD/1)ILPAM%Y99`=27=9:5(HF?:(K$L0OYJ"@LD0SM.59*,ZS\)`9IO
-M>MU4<?:4!4\K/U8'CH/OD:%G6$:2R)Q?VS2>ZH;B5=%),=SM_,T;K3I:^C;!
-M4.KEB8I>:)+`%QTM)YUZ#F`8N^=-82]`687J&N7,D");;,<X5WA).%&(TKSQ
-M"O@/5W"1J,.&CV@1/[D%"ZC%-:SVV#$CGV*SU%$@UAXD^01K:+Y59-9]*#'5
-M6]Z'06U'/FO+B4UPD-1_>&$FYM!$(`NT]S@H%.(G1Z`[Z[0Y%B'DQZ3W3;Q-
-M3Y^>.!$ND:OYKE5L!`@0NG`-,V&7B(-6>E"42)'5@950&V=(A]C2W3LY?]:&
-MC&KL<7+*[TRF3$,Q"9$V1S5ZG`!E9/&$2Q*W1DK>"`!<`0``7`$```(```!%
-M``%849P``$`1``#`J`$!P*@!`@'T`?0!1`<IR;>A#:@XE;F@/LMF*Q=>LBX@
-M)"`````(```!/"$``2!3)<_5?Z,IMJ=#ZPFR\<2G:9.21Q60@Y#;J.VA^HUY
-M7?ROKV>18/^9P?1[8_;T<PU7EC.7A>(J:6,&$6&:H8_5MOS>8FL4[[D@T%]Q
-M==[YB[9,W=2-=Q3:C66'R)JOV*VB$Y22AA`>J$-8?>+S'_EVL2X4U2'@8YS9
-M[/LZ^X0ZTMKD%#:J)QE2]CBQ%XQZX(+$RAQ355,JR0Q'AH[GW'N,^$U)PY,>
-MN^I?8[\.3'1UJ@!$#7/F(1,.BWJ#R9O;+2>W@6KNT865MB0(.).X/,L_S5U5
-M.^2?L90)H)>VI8L6N9G-=#AQ@X]!H47_Q43X^P3]$PG'`L(L!9VC@926I(,,
-MA\,F)>OY9?+_DE%*,P@Z.\-SS]:TP.F"I.*3*4L2MT91!0D`?````'P````"
-M````10``>%&=``!`$0``P*@!`<"H`0(!]`'T`&0&2;@?&VKXV+=E_HH8WX42
-MSW,N("4(`````````%PJ``!`H6X14$\\I%:^\J_5IU6=A6TRCY%%Q,`7PHIF
-MI4`*\!Q-F>`0CP%@K`"0BU^8G<N,B(><Y>2_,H0?9"3$2Q*W1O`0"0!L````
-M;`````(```!%``!H49X``$`1``#`J`$!P*@!`@'T`?0`5`8YN!\;:OC8MV7^
-MBAC?A1+/<RX@)2``````````3````#"I-B'R.#$@&4'':7*@!*?!=KU-#43L
-M)(*FB8M8-B#CE<_!.N6H@ZE17ZQAQ$L2MT8,(`D`;````&P````"````10``
-M:%&?``!`$0``P*@!`<"H`0(!]`'T`%0&.;@?&VKXV+=E_HH8WX42SW,N("4(
-M`````0```$PJ```P;![)A1=F%P%1(;[P^H;,P9M<)LH,<LP![`O?*QL9G!/'
-M5]SJ^YY2X(5CH*M+$K=&!RT)`&P```!L`````@```$4``&A1H```0!$``,"H
-M`0'`J`$"`?0!]`!4!CFX'QMJ^-BW9?Z*&-^%$L]S+B`E(`````$```!,````
-M,%.Y0%`:/A\Y@.4-E9U=QG;(2%"/:D%ZQT:5T0+V=;[X7`?=E8H!&OLN16G]
-M2Q*W1L0J"@"8`0``F`$```(```!%``&44:,``$`1``#`J`$!P*@!`@'T`?0!
-M@`=EQ*+L"Y90+"H``````````"$@(@@````````!>"+Y`'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``V%7J_:,2Z>ZM';7ANHQ9R:XA%Q]3
-M:!%T=?XU-<MXJ>(1\5*Q4H)N7>HY,[JYJ*,;O2,[$A3-357@)S/H/]*A%$D;
-MB6OGZA<5&A=IN)S#6;?F,ODHKV%DQU!7Y,">KS1GK!KK,7)JH\6"7.CF(X?M
-M0J_(U3NVM#=>N1D-($U6OS<I```DJ%Z+R8F>X6S>M3NHJ>U>&P21_G4HN=!^
-M-79\GC%J=J$I```<``!`!`&T`6N5,KNU@LO<*-#XA5]'3G9U````'```0`7F
-MMR3$J3JI0G.TX]75R60+'%R/!DL2MT8G.@H`7````%P````"````10``6%&D
-M``!`$0``P*@!`<"H`0(!]`'T`$0&*<2B[`N64"PJ```````````I("(@````
-M`````#P````@``!`!@````&..MVKAKQ-2##=)0&SE<M\OZ:*9DL2MT:?20H`
-MN`$``+@!```"````10`!M%&E``!`$0``P*@!`<"H`0(!]`'T`:`'A<2B[`N6
-M4"PJ```````````I("((`````````9@A```@``!`!@````&..MVKAKQ-2##=
-M)0&SE<M\OZ:*9B(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``V%7J_:,2Z>ZM';7ANHQ9R:XA%Q]3:!%T=?XU-<MXJ>(1\5*Q4H)N7>HY
-M,[JYJ*,;O2,[$A3-357@)S/H/]*A%$D;B6OGZA<5&A=IN)S#6;?F,ODHKV%D
-MQU!7Y,">KS1GK!KK,7)JH\6"7.CF(X?M0J_(U3NVM#=>N1D-($U6OS<I```D
-MJ%Z+R8F>X6S>M3NHJ>U>&P21_G4HN=!^-79\GC%J=J$I```<``!`!`&T`6N5
-M,KNU@LO<*-#XA5]'3G9U````'```0`7FMR3$J3JI0G.TX]75R60+'%R/!DL2
-MMT;;;PH`4`$``%`!```"````10`!3%&G``!`$0``P*@!`<"H`0(!]`'T`3@'
-M'<2B[`N64"PJ^2+_)"5(03XA("(@`````````3`B```P````+`$!``0#```,
-M`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``%Z6*[+X
-M)"?3I5TD<&(0BT0;G[O@_%()9Y)=0LZ-@]U&GWI"U)LG4IXA'@.K5-LD"UUU
-M%Z"1^0O?=%CQ<03,OOHS/#PP1/S4''>*5J>\]O&0RE=?\ROK*J(B8ER/CY\]
-MVMG:3AE@5KR8HBKY5%[Q!^5(#-1=#!Y@6L/@N2TM2)OK*0``),W^F7"M`+J)
-M8#8S7F/A`>LT(YU5!5+FP2789K\F5GD7*0``'```0`3-&#^?<J?"K2@^[M[U
-MZ3E\X]8K;0```!P``$`%3_"!\2IP`B>2GIR0Z<?)JCLM&E9+$K=&&9X*``P!
-M```,`0```@```$4``0A1J```0!$``,"H`0'`J`$"`?0!]`#T!]G$HNP+EE`L
-M*ODB_R0E2$$^+B`C"`````$```#L(P``T'DT^6AB7I&OA>Q@3I"%S.(_S*.\
-M@<\TION-X_`WPH__&OPY`7?C,37Q!I<-RZV*%+B?237[$::BFW^C#9I1&22E
-M>*_8HBB`^?M?D&%5&7]!-=UEV'OUZL0VL:@)+H25734&TI'B_30@C^D5$BKA
-MYM.KHM_!\YCAV/`H@&(>X"'G(BD,@BJ`>6/UAJ;!`6,:+1^R2<+'QR.XKV&I
-M#A(A8O`&M$5T?'*K]6C.Y\RD=2B)<DG:CO\%"($L@-JT^J]MRHKS6.5;E_.W
-M8JO[(4L2MT:]M@H`O````+P````"````10``N%&I``!`$0``P*@!`<"H`0(!
-M]`'T`*0&B<2B[`N64"PJ^2+_)"5(03XN(",@`````0```)PD``"`F?E8I]Y7
-M17WRM&\VTJ`O-,CI3V.H(C+PUJ1T97U_`"<(JR[7J)K_YX*GH;6*&E`:T@V^
-M"9*`I!Z$4!S,D]1OE@.%<(4:,9.$=.;\,Z$CF9[10.=Y!`#3%:?V!$]M%5ZO
-M+"A)?0%#382=17=/!3P$CC0'=7X+`[++4O*VITL2MT9ZU0H`'`$``!P!```"
-M````10`!&%&J``!`$0``P*@!`<"H`0(!]`'T`00'Z<2B[`N64"PJ^2+_)"5(
-M03XN("0(`````@```/PA``#@`)7+BZ%X`V1+XPBSUK:UL;U>4]__0U[D$,I%
-M\[J->9@9>V_A`5`GNJ_!9'E>V8>/Z^#*(CD,)<.CZC.*L?O(F^/-:1LX:F:&
-M&::S<K/208/'M'XGMR7/@WE";Z7\"GOU05#Y2$8X7S-1P=4EI1M6*E&.-GN7
-M7?;1DH6GZ4;E.S1][H3J]><5:#:TC+!'.9R=3@@MEV/DHA4V.>PKIY`7GJ$Z
-M,.9/KN=]7`_W.AZSJ+DK;.%7JDU$Z"+QG*;`+\<G5OASUZ],XMM(MP1L0<0/
-MN;I90:(STC+NW>/5;$L2MT89X`H`_````/P````"````10``^%&K``!`$0``
-MP*@!`<"H`0(!]`'T`.0&R<2B[`N64"PJ^2+_)"5(03XN("0(`````P```-PA
-M``#`0#4WQE:`*$:#;Q#!L(67X?R[J:-+F^NOAE10P`6O*!8J+KX?!5I^%M1"
-MBEU9ATWI#;6V#CA')C'^LLR#)R%SQ_8$+CK\S6.60B*;3>FOQ(/+F-QSD$GZ
-M-$BD>AWZZE173Z;K$8)^P^/,DJ$D0,+TC7K:KM`(SM@[QH$09&700/L6:S^U
-M1Q$SY(VH]1C>Q.E7$YCRI$.9LSXM;0]T9^8$@J>IF>VX^9%^97OY)V:?PXTA
-M'GR4_6L!N@=E@Y)+$K=&LNH*`&P```!L`````@```$4``&A1K```0!$``,"H
-M`0'`J`$"`?0!]`!4!CG$HNP+EE`L*ODB_R0E2$$^+B`D(`````(```!,*0``
-M,.'R0$-X?/B:@^(T)E.X^GI_9M2XXZ-UC#NDFLUD1*Z>/M._>GMI_%>!-TBD
-M2Q*W1F4'"P!L````;`````(```!%``!H4:T``$`1``#`J`$!P*@!`@'T`?0`
-M5`8YQ*+L"Y90+"KY(O\D)4A!/BX@)"`````#````3"D``#"YZ!2Y]\P!0J$C
-M;Y$YI4:3ZN\\DM?8ZD[C\)^BSPC3)J+:8[J7)KP=F"&)-TL2MT;2(@L`/`$`
-M`#P!```"````10`!.%&N``!`$0``P*@!`<"H`0(!]`'T`20'"<2B[`N64"PJ
-M^2+_)"5(03XN("0(````!````1PA``$`3F4@`_X,WP9'^J1<Y-_JWJ4<RE2G
-M@"8ZU!;A+TK<*V*.Z\@:[C>WP?9[;G5V47EGVBPR:LJ5(2($&J8SN`7U'+0)
-M=CU.A4EK0!M>!_8ZX2EDS<$\8:5L3Z+"^<4;N1-$9IA936+D!!!_'3#Q.^75
-MRID;4L%%@$2-&"+G^C[EAZG7,2UC9'\8-77_!F$:(M&P^:US?%1\UO==#VL[
-MH#-IJVP6,)-L."L6V2#9Z/5VZ++,,X'OZ8^#G$CM]]\/O2@!8'QGOC<QAY=T
-MV!X/=1A2)8#^"AP;'56'>\_H@.U8U*?R<9:+K_N.`1%&+E<S0:F\\`,G<UIF
-M4ZOL=RII2Q*W1M<N"P`<`0``'`$```(```!%``$84:\``$`1``#`J`$!P*@!
-M`@'T`?0!!`?IQ*+L"Y90+"KY(O\D)4A!/BX@)`@````%````_"$``.!MNJ=V
-M/%Y`83++;Z"7@ND=@EG0P=,G[,5F?+O$^9_,\TV>D+D!',M,<W<*]&Y5^UX7
-M8Q9Q4,@NMM\FX1D4$3_.'9[9%O8Y-UTX,$SD@O9?$'N\3H2/+CZ1'LGTU++M
-M(R2WX^7>CP_R$]3&QG$T["3M'LG%\T,:#94A-'O:CQW2#_(GDM276M`>'9<_
-MYZCQNU2`29NA',+8Y7BB'-TFOM[/91#1^--]"814KB2A6(Q?N37@_N]2"D@3
-M=VC5K'QT0QTW7]![+.\H<9.=^"@X;NAWS1P@^)3]^+W3\L2*2Q*W1AP_"P#L
-M````[`````(```!%``#H4;```$`1``#`J`$!P*@!`@'T`?0`U`:YQ*+L"Y90
-M+"KY(O\D)4A!/BX@)"`````$````S"$``+!=3REOAH0&!L3%\[QKQT0?5%1C
-M62.8W[]=9,+%=>-L1=6(V)<_^QHHP:IMV<!D?'-JBV,OLHS]/U2AI3YJ1*J2
-ML]UH<_IH//D*[D_PQR<?@^<CS[_>RL/ETF?UR$TZ>3$>##FAXB=7_K8.QWU>
-M/3*88<SX*=T,AO.WE(+!?JZ42D4_MW.&88L:*K:B2K;0BCRHT`?])PD%=C>!
-MZ`B$SVRC`!G5<LOS,7!&1/`>2Q*W1DUA"P#L````[`````(```!%``#H4;$`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:YQ*+L"Y90+"KY(O\D)4A!/BX@)"`````%
-M````S"$``+!6R:'22M.(LN`"UMG#8/@D=!J,;4T00-+.8EGBUS3$@7>6S6^^
-M>L[LYJ(VW=8KN+?3;?DIX9.\*&)..?,)"B#$&?%[-90?SJX&=]+A2+.Z).(1
-M%A'O8B)3M)B4(S,UAMVAD)WU"XJ9NG.`G-?IK<"L"#<D1ET!07XI+I>TD7\5
-M($Q(8:HYU&_PCTF5S=_,^QD?7=$-@7(SQM2VL#<B3/GTE:YRA>"_G/(FKU@N
-M2Q*W1FE_"P`\`0``/`$```(```!%``$X4;(``$`1``#`J`$!P*@!`@'T`?0!
-M)`<)Q*+L"Y90+"KY(O\D)4A!/BX@)`@````&```!'"$``0#&N7>1_1>LL\+C
-M:$I@B4GH-APPT,AC`I0IJ>7J@E/T$<,?D0+A:&CT?'!,3&>)M*R/JIW*\7!&
-MC5&,L4%O2(*&L?\W52(UL!V=4&<%4F,W@"D&!H>!-JZ$\#B;D;)9LF)%@I90
-MN*G6\>]D]ZS"*673M%O862]UGMTFWLYA1`%5WB-E</!?_M_<$;.F`K#[VQF"
-MV8!&87A,.K<F8H3`F05-2C;L]Q=,ONYFO\N72L]3*F+9N5N/I.;>\?Z^+)G1
-MJDE39NHIG1#%$G0I[_JOX']N8@EAP77N;GS#6&QM$^8@>HE%?M6*L'MA@;`F
-MKMU5)"Z\#)Z!GA_/MR9Q_=%+$K=&HHL+`!P!```<`0```@```$4``1A1LP``
-M0!$``,"H`0'`J`$"`?0!]`$$!^G$HNP+EE`L*ODB_R0E2$$^+B`D"`````<`
-M``#\(0``X$JDH`OK6AAMF1F8['=.H<GT4!/9:P%=PHHE>,ZV,;:7EE"!"6JR
-MFP?TL=3(]NW+7TO$"6F4U7N.4$/"XVQ#T/BJ%T[AZF`(*[8$8[Y?U+VB;QNA
-M;4>+LH+[E5YL&JK.R+'F%R;U*>O;'PL5R?75#WA]V13!P;-CATG]8M+U$(^U
-MTR>``V*X#YT7ESD(&0H&JC7GF%:J1V!OK]$DOLVFM?))ILA]^K)YG*NFR#""
-MG%#F$4U7PIGO/5#/-1&OM67-()C@JD2S0ID#7G-!:VBTLJL@Y)$HNF0D^K\X
-M>^-+$K=&O)H+`.P```#L`````@```$4``.A1M```0!$``,"H`0'`J`$"`?0!
-M]`#4!KG$HNP+EE`L*ODB_R0E2$$^+B`D(`````8```#,(0``L(-,<Z^BG7,J
-M/1<$_M[P%SB,.2LBEL^*)]V85:J=_<0Z&Q8M!_+(@R/(9>DXZ^M@S3UDEYVF
-MS___*P59B:@,GP*Z-6;0BE=Q`*LW]UGJQK`_>[H:<N#HQT&^?D;U/\?G*N6K
-MU6BU>[Z[WVBE1\AX.*FYG*\#*52#!;7@'CC3UV?EG`'$$?P4YLNMB+.A"X<(
-MG^@C_`@F`,B\I/#H)".9[=1!.0#'N,=8SKV(Y"E+$K=&';T+`.P```#L````
-M`@```$4``.A1M0``0!$``,"H`0'`J`$"`?0!]`#4!KG$HNP+EE`L*ODB_R0E
-M2$$^+B`D(`````<```#,(0``L'_&H`03?2:58<SI)$#+.KD*LJ(X2PBZ7*YM
-M)HD_)Y".-F]:[K>4<I(XB`?;V((EVY08?#73T^16MS5Y=U\,IGP[1)B;G"Z:
-M]N_8&7=]_+EASOE6AP'BS!8D?+S1V=DX=I4F(!/-S=YN.-1/B&?@'H8W]I#I
-M)A\RH2;=FCM>W2,(NQ.YDZC7V1_(50-UB("W].G$/1?\^YZ"V%XP>!KA,N-L
-MU*Y!;R)B*QD40^)+$K=&_^(+`(P!``",`0```@```$4``8A1M@``0!$``,"H
-M`0'`J`$"`?0!]`%T!UG$HNP+EE`L*ODB_R0E2$$^+B`D"`````@```%L(0`!
-M4*1I\_<+H:4\3<^R2+ND\NNJ*NA"*.L\"GB<(-7O08(\V\]V_MGC3-L1AKA%
-MU8,I!&GV>P;(X*O+0<[)O3SQ@?2G:V$5NJ]Y,-.52BE10VESA3@$'/`3,)&I
-M^I28?6J1[4A07A+D?]7_8/,L)681"),"%$E'`M\NC;^V,WR,+=IBZGJTK5GV
-M/'ER]!);:-`HXIH*W/X29I=X=U7@/[,D.7(HAB.I#2C6Z\X>(=>C@=Z;@T_Z
-MU"`YN=;F?2X)EQ5V<C)'.$+HJ/PD9X<=J]0(+;TEM[&D+P5=Q-DAIB\0!61Y
-M%R?6H$H*-?8#2^((.68W65)7($Y0=/%3<]C(8T=>G%3F?):9#FG[L[F_-8U7
-M1)9E\%,H1']VT*7\DR(&7Y6WDQ[.MV78"V@-ZCL&D9Y!2J2_!RAV8;..<0&4
-MXA6$Z!ZJ`J=BTW;0`@*9M-/D2Q*W1A`8#`!<`0``7`$```(```!%``%84;<`
-M`$`1``#`J`$!P*@!`@'T`?0!1`<IQ*+L"Y90+"KY(O\D)4A!/BX@)"`````(
-M```!/"$``2"F;TV,*.LV.+OC=\Q_H-L?8)]/\#WR%F]@5IJN_6J9VNP58%5"
-MI2-J6V(B.IQ+`M(X)D,@;#;WC9LQ/B*`#\0J"7QM6NPE]AZC:-`4_3&G=^<(
-M)0!IC)IO&#=K\2'G3&]#[AD^R+L#YZNUY\*RAK_MSJ?.*F<YH"NA'#]C&\X?
-M1QPE:&6,NUM!D3"JMT__Q7(LQ(='?1!<!<-!1Q<63RE_-'#?+GC4.F9L:F3E
-ML#/U]U$LCPR>;\(BNEC+S+8M87)4>1YPLJW`:P1]W5(Q-/*.6FOW8)8D$0>Y
-M%M#BU^G!I6Q->T3%VZ^S">(.1%>4[M]C8N*HA\.L"_UO:^B[!$(-DX12Y-F-
-MU!3.3A_/KWU?.$',#LVCBA\DC:=WXDL2MT8!/PP`?````'P````"````10``
-M>%&X``!`$0``P*@!`<"H`0(!]`'T`&0&2>973-<H4"2HA._!P%N:I)$N("4(
-M`````````%PJ``!`]!'9GG6N%Y5"2UJA!Q#B$#?$/H-&N,DGW!X3^,D]%EFY
-MC$7K*H?BN=[$O)CQ[%VC9JPG=?EQ\6A:IZQ/2Q*W1CM*#`!L````;`````(`
-M``!%``!H4;D``$`1``#`J`$!P*@!`@'T`?0`5`8YYE=,URA0)*B$[\'`6YJD
-MD2X@)2``````````3````#`OHP)_(,OJP11**[5@]_O"$R;4`>W"."`-UYI,
-MYHAR%D20=SC9I?VVUS@5M$L2MT;E60P`;````&P````"````10``:%&Z``!`
-M$0``P*@!`<"H`0(!]`'T`%0&.>973-<H4"2HA._!P%N:I)$N("4(`````0``
-M`$PJ```P$JJ>:TH5GF,&4,3`GR93P95QM1J&?\D3_I57XQ;5)%#\S]A?5EP4
-M<23"T9M+$K=&(F<,`&P```!L`````@```$4``&A1NP``0!$``,"H`0'`J`$"
-M`?0!]`!4!CGF5TS7*%`DJ(3OP<!;FJ21+B`E(`````$```!,````,(SU!11A
-M41[M-10OHP!5]&`^*A>JHJ[1K0B3GA3A7$1[J4*/@M0^18*Y29/12Q*W1EUA
-M#0"8`0``F`$```(```!%``&44;T``$`1``#`J`$!P*@!`@'T`?0!@`=EX<)Q
-M*,Y0B;X``````````"$@(@@````````!>"+\`'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``Z_-Z<JW%@F3O@+O`:ME6\]<<5*+;&9#&<`<N
-MS9#O^WC8'-*59/Q3",W:8Z[-'],!\]+7F'PNO<S^.FL8A([5+JT>8A0Z8_GG
-M=>808WSPI9709FJ#%#%%?$D'[`M7':`7W%DFG8I<23%'Z)$BTY<F3?Z,IKI>
-M?!8T%=S3ZH&:A>HI```D9K8\?!#FBCQH51B!U!6*1]?$,CM-(*K7=OU/]P?A
-MR*TI```<``!`!%?#>8-P'V/-G^M`=UEUT)@1[7W@````'```0`66)31VLMOK
-MU5@$JN7#=\2.=&]IRDL2MT;X;PT`7````%P````"````10``6%&_``!`$0``
-MP*@!`<"H`0(!]`'T`$0&*>'"<2C.4(F^```````````I("(@`````````#P`
-M```@``!`!@````&;&=90H@6[7Z)W+;/+?J2IP0H'$$L2MT:N?PT`N`$``+@!
-M```"````10`!M%'```!`$0``P*@!`<"H`0(!]`'T`:`'A>'"<2C.4(F^````
-M```````I("((`````````9@A```@``!`!@````&;&=90H@6[7Z)W+;/+?J2I
-MP0H'$"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``Z_-Z
-M<JW%@F3O@+O`:ME6\]<<5*+;&9#&<`<NS9#O^WC8'-*59/Q3",W:8Z[-'],!
-M\]+7F'PNO<S^.FL8A([5+JT>8A0Z8_GG=>808WSPI9709FJ#%#%%?$D'[`M7
-M':`7W%DFG8I<23%'Z)$BTY<F3?Z,IKI>?!8T%=S3ZH&:A>HI```D9K8\?!#F
-MBCQH51B!U!6*1]?$,CM-(*K7=OU/]P?AR*TI```<``!`!%?#>8-P'V/-G^M`
-M=UEUT)@1[7W@````'```0`66)31VLMOKU5@$JN7#=\2.=&]IRDL2MT:WI`T`
-M4`$``%`!```"````10`!3%'!``!`$0``P*@!`<"H`0(!]`'T`3@''>'"<2C.
-M4(F^?<4JD[$?AYTA("(@`````````3`B```P````+`$!``0#```,`0``#(`.
-M`(`#```(`@```@,```@#```"````"`0```(H``"(``(``(ANGZ&+QW]%4]-&
-M,AP](CH_O/U67[#3J+XL.*^14*U&M:FD8-I]7@)>H\>\[FBRJF>*GHI4H8'M
-M[@DE,AR!1(Y]*81I?.)$CF$6Y[Q&3/&9<F[1)_-J^ZCN(@\4@\)^F8]UH^/`
-MP][^R?-[_MUN+&"<Q/E-Y42=FN>&\W,D,TF=*0``)+$_%VHQ?_Z.DSD"RWW\
-M'!HQ2N_]-%[-UE!^;#X$V0G<*0``'```0`0/MH#PLBLXW!<UO@(OXYBWLQ!%
-M!P```!P``$`%:4K2XV$TE@6"(CUOQSM/(]\.OI%+$K=&XM(-``P!```,`0``
-M`@```$4``0A1P@``0!$``,"H`0'`J`$"`?0!]`#T!]GAPG$HSE")OGW%*I.Q
-M'X>=+B`C"`````$```#L(P``T$BU$8D2V/%PT"N,"PNU*?E^N).T2\$73;0Y
-MKB99LXI.A>U7`Y"CJ92AFO*$RME1F;96POM(WU4!:/##8$`O)W01Z]BR'(9?
-MKTO=@WKH!CN@=X/9OFC)K$C:NR7^&IN,Z%M[I_GF5'SJ'JO#T\E-/P=CO3XS
-M^A])ZFU(ZSE;?"+*VWGG(.T#90>UUA+B>)\M6\.$%X2T-[\V1_=%_\]TI\QS
-MB#K3HVL[BIZ/Q#+G4E[\*5^TGF#;^Z4TQFZK!]L#=[<P#5ZRJC.&..3;'4L2
-MMT:>ZPT`O````+P````"````10``N%'#``!`$0``P*@!`<"H`0(!]`'T`*0&
-MB>'"<2C.4(F^?<4JD[$?AYTN(",@`````0```)PD``"`OUH<_8M:*(W*?99E
-M@$X_TE'80@C`W5=6'@_91:/*/\Q*:UBYL#.WUW<OQ?KF=+.;6)L7V9K>QZ_>
-M-!`PY'QW:'[M[5$[F)HX-%3.)ICA^(ZIC*E5@RZ:*+!K:4/L/.R%*[:Z%]:`
-MEKZ/N:Y^,D^0FP#U^:'6;)$SEN)^YDL2MT;;"0X`'`$``!P!```"````10`!
-M&%'$``!`$0``P*@!`<"H`0(!]`'T`00'Z>'"<2C.4(F^?<4JD[$?AYTN("0(
-M`````@```/PA``#@]*3UK-IT<S[4$8*BK6S\JJIW>AT3Y,[-MQU86X.83A/N
-MI/IK$6P#%/1BTLF$HK$]<S&+?!A*<6WH_)PFJ=^X4L_OLJGER&C=X<>#`'RA
-M]7%UO:</K\Y`DZHYK:H0)_WE5?%T*QDE0O)-QYJGXB!S0299P!,H#",`"Q]\
-MP/?5EJB.<;BGF+.(<BLNU\XE"Q;"L?Q8]Y2*NTM9F=/)V'=YAGQ;%(B2SK!=
-MQ)>I_DCI*:N'T[0P0O1&M`EAM<6FBV,,!,=SG(H)'(%I&TC*_PLDQD/C%2Q2
-M-&!#^.0R!TL2MT8A%0X`_````/P````"````10``^%'%``!`$0``P*@!`<"H
-M`0(!]`'T`.0&R>'"<2C.4(F^?<4JD[$?AYTN("0(`````P```-PA``#`51VA
-MVUC"*)YD%(1G2S&1T&ED1#?C)#&3]^)E52!*6=GZ34HW0F.;_R!7]%860Z?>
-M-4#XX3(#TS+=^@G;?Y2AUBH8:@Q/<OYA8320:+P!""-U3"E_*V(/?DL6D8IR
-M-/,<BHRY*":M9E_$XTD^P^:#/2;T0"%<`C6L:3@]X?R+(%_E(1%DJK9>GWIU
-M`+LZ]^AEG_ON2!HDF216_%OS55P5>8C_RA32)?(NTE^P9]_SK8)YYS_+_+1#
-M0),$(N5+$K=&\!\.`&P```!L`````@```$4``&A1Q@``0!$``,"H`0'`J`$"
-M`?0!]`!4!CGAPG$HSE")OGW%*I.Q'X>=+B`D(`````(```!,*0``,/A14TQ9
-M!!/W;>(&WS!W4EBS61T!8B(>]I9&"8+Q$=N>Q3>NC+GGQ?#N#)\B2Q*W1LTZ
-M#@!L````;`````(```!%``!H4<<``$`1``#`J`$!P*@!`@'T`?0`5`8YX<)Q
-M*,Y0B;Y]Q2J3L1^'G2X@)"`````#````3"D``##Y1LXCHJQ/NCA".C*'VGN\
-M^GA3`+XK(1[+=M-[HV6G$X+)I]2!#&+O)ITK5$L2MT9P5@X`/`$``#P!```"
-M````10`!.%'(``!`$0``P*@!`<"H`0(!]`'T`20'">'"<2C.4(F^?<4JD[$?
-MAYTN("0(````!````1PA``$`VJ*KJ<:^6I,\]FME.RHSM<*ZH:=`EBEYR46R
-M@('3@[?;#T-08TWB5X<RAWA`V,%0=/$RH@!(?3^,-[+@5\_U/<EA4Y44`J(T
-M>1W]XE9/G512G%A.VXXS#Q6J8;0AH:GMOWOMSD@*.DU)6HI"L[N40RBZC(^[
-MC6Y/C(E,66'"RJ2B259N_>8#<F?KU_.S`420"MT5.N:XJ75D,3^71&34[SAJ
-MT`3TOGOD:`CSRW4D=8T2<%%@4?<@S5X+'4D74'S8@EO;AM='JZG=:L-._E?9
-M1P4W,.9"W<D]]Z\23#;7-QY&LV&FYC]%*2ULZNL+?!RPO?)Z\::>K`1W_"=3
-M2Q*W1FAB#@`<`0``'`$```(```!%``$84<D``$`1``#`J`$!P*@!`@'T`?0!
-M!`?IX<)Q*,Y0B;Y]Q2J3L1^'G2X@)`@````%````_"$``.`#93>!I*)B8DAK
-MSS8=1-YOX1(51T@,]P6*Y,IP$8<6R)8(Z4)P6)CB!,GR2W.PY^[48>"*4X/E
-MB&K09TW#>Z&K6$Y>(U)<:2@#3.6UD\$#J/F`P\R-BP?%[1%=_%EY%6=)J(1$
-M8="[_75MB2>I9=:7XK6V&=R#U<Y"/QKHF1N)0U9$-*9[HMP?.,L&J*^G$I[9
-M(F^:X.NW@K:(XHTW6_;9F7-$H;CM1MJ1.R"<T`%[@%\.S4LF<JT*YXC<-5_9
-M5>!2")VMVQ4,+*)`C1_Q^TD(U/P9K5#!$D[&!O\L2Q*W1H=R#@#L````[```
-M``(```!%``#H4<H``$`1``#`J`$!P*@!`@'T`?0`U`:YX<)Q*,Y0B;Y]Q2J3
-ML1^'G2X@)"`````$````S"$``+#:ZY:^X?@+RN:Q&2$%6YNCF?XKW\A/SZP&
-MO<B6[P3[A+*])H^(O*[-Q<2J%^IO?$7ZJQT+>%D@>@UKFJ"?7SWE5_]WQ%YJ
-MC0H5<SM=J0?+1OY(&3RZ3A*P`M=9.3G(D4H@J[^6F1:MG`F\$$.P6ZQZWR^M
-MG#!^_:S:(\OGY`S<?22ME,7P0<&EK,!*B:N72`W.LR,R>\9SEZ/"N/G?ZC-S
-M@^,#L*6^/O;9=2'82Q*W1G:5#@#L````[`````(```!%``#H4<L``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:YX<)Q*,Y0B;Y]Q2J3L1^'G2X@)"`````%````S"$`
-M`+`<)@)5*0M!4Z!X2H#'+W\\6Y>LJYXOR0B3.<FA\0=QF=0K=Y(VU\DB6X<A
-MN,EB,6R8##W:\'\R>+&A@=K&7P1@W]7?*0Z:^(N2+PM`-%'%-`%)1J_R:!N?
-MPX4S&JMW<A$@LL&.JO(#-_O@`;?D1#6!`=TUPXO]JT2%.+983Q_?:;T9S=**
-M!@Q.QTRA$MV#9N+&=4<)6V*">O_<"3@,V]]H1CD3AJPH)DCO-$[02Q*W1E.R
-M#@`\`0``/`$```(```!%``$X4<P``$`1``#`J`$!P*@!`@'T`?0!)`<)X<)Q
-M*,Y0B;Y]Q2J3L1^'G2X@)`@````&```!'"$``0"'M/A6H)[3#P<KJ=\%/8)C
-M'EGAC_*F>`$6ELBVVH=H#?IP=$SQO2G*J+<AFHLX&"1$9`4%P]4Q.HH&]LI!
-M=8$6Y$[I/CXMW$]PADG!<1:]9(F$JL7RPH_9-R918"WV$CJIG2V145&IP;L"
-M'4:Q93!.\"E4W1",>$!FVF89[8AD+/G)=,.6NR-_-EM`\X*K?R]#Z[^_CN/;
-M^JXS$DY.)J3$I1=LW+Q!0O=*?J/2PWPD4O<B";[/@J_EQH@,"@&-I<12_K6^
-MGGA'=PNY59K,DY&/,@[]I/3N._.<%:M/>`)%/$YV:3?OX#6Q4WR1)I+GY8[#
-MB_=,1&2@_;,40[]+$K=&++X.`!P!```<`0```@```$4``1A1S0``0!$``,"H
-M`0'`J`$"`?0!]`$$!^GAPG$HSE")OGW%*I.Q'X>=+B`D"`````<```#\(0``
-MX)"0TQ#Y1AXC3,TOZXC]VGEI$9E(J__Z-G+=T*4ZRBE@/GL6<X!_3?*1114Z
-M+^A4TPM&#M'*N)*_;FJ.>^EN\I_AYJE<B/[J%P2Y5U41=3G@F1`%3-/M#$`K
-M9M?S,MU<.'P/Y+Y#$L;%U3X?@4I#=81!3#4\CP]O%,F3F1`1DKB++Q\1,BL=
-MQM*XH%3(C<5I`I1:$/UT3C@;L,O5E$K")/=&5)\57)W#YZ&>OXZMZ)@^QPD\
-MD00GH*3%<)Z)974=1OU="*>^K6E8B<=745`=56EL$$+5O.8R6^0QCDM+$K=&
-MA<T.`.P```#L`````@```$4``.A1S@``0!$``,"H`0'`J`$"`?0!]`#4!KGA
-MPG$HSE")OGW%*I.Q'X>=+B`D(`````8```#,(0``L-=H*$ES,NI1Y"U-0OQ4
-M\C+3<`TUW-/F1HXS1CYUOUG>P=`?I*+7OA]D"`A)-)%,K;D4SCA%HW]&&6S$
-MN'NZ?M`JZEYYS[YCZ([[XM9H6G?&'ZWQAO(H(A?L][]5VR(:L?O&U]H=0:MD
-M&9CVY")9RTXHW.K(P]//./@M1&OL>,O^9.Q#FK*2)Q]A1*T5G]+MHH5JKSL[
-M$:?Y?F<U\B)LT1&6S`)WYS,,JDV8_B=+$K=&&_`.`.P```#L`````@```$4`
-M`.A1SP``0!$``,"H`0'`J`$"`?0!]`#4!KGAPG$HSE")OGW%*I.Q'X>=+B`D
-M(`````<```#,(0``L.4#I'**''BZAVUL5!9TVY!W);Z0ME<EUDY^7<_51LR#
-MXK6493/Q2P0/B'7B83_B'^#*F;'5UDB^_I#+92JT\QA%XD-,Z^%Y@SA,P`5?
-MG4T)40L^ZL6.NC@(6LRB5/!S4=F[O#C%81&O0Z.Y+`$C(T9$[.J9&:L+,.+4
-MD'#ZG^22R[1/W`GP_2K\#LG6[EFB4CJ)3?[FGHQPECF(M+,HS5KA.8XG7H\)
-M\=0TR>]+$K=&,Q</`(P!``",`0```@```$4``8A1T```0!$``,"H`0'`J`$"
-M`?0!]`%T!UGAPG$HSE")OGW%*I.Q'X>=+B`D"`````@```%L(0`!4`7_OHN]
-M]Y^2GC(Z$BV`[;QPT:^`<PUF3/E>]ZSZ<HQW6@;GJ<NUP5-JV-[9#D>![8T\
-MT5E%3]^WP4E.)`J;((G=[P@^(3+DPF?NBG;1W(]%7+LCJ#SVEDT@[!HT4I:+
-M.:CW^)K:^*93=$G3Q`1EHM>5IWE'+K9D*W/;&')+`!P"%\$4E(.G),+>Z'ZK
-MF!D^3U%=<\$'1%`OO&1!SCEY8SYQB/]H2EQ+[8ZQD$!?7CU.;YPL+JLT.D#G
-MK2ST6LI2^QL[];S`_24?^A/!+],"=83"MI$E41T[E8A.SM>"1:=A9)`J?"H#
-MZ9`H[;!(`(M04()-BG5Y_I*:^*&X`/`,RR+1J`\2:Z+3IVK!*[\/`(D2M&)F
-MFT&'-_\QZ`0_1+3':>S>2]U,KO5X[R&+.Z1*)*8'N;\/D[:W#U$:"WF?D5X.
-M8@JEL@S<AB(UOQ5Y3!*W1I8*``!<`0``7`$```(```!%``%84=$``$`1``#`
-MJ`$!P*@!`@'T`?0!1`<IX<)Q*,Y0B;Y]Q2J3L1^'G2X@)"`````(```!/"$`
-M`2`4JS&==PX7T(_1$W5!,Y5W36"O+XX2%?`8-D/$A3K#$92U\@*!'G.7C]B<
-M'T03>92NFE879I[.3:R1WX[[^(MIV_=U1HC1,G]F?;A-(5=HV"0T'2C4ZZ72
-MLS73'$H+_LCQJ.ZTV>0!]`,F7X8)2G-,BI;J%:]/7.D32Q:@I<"6I58"<1VS
-MD*A"F&U<9(;=#G,Z!V?4GKD)19<I$QW%'0XF)DFG8N7AD;05W&>0"="?I'ZH
-M&B)J0+SSE;\$**EJT:MBULUU[`6\Z0<*EH=[[PR_6->KGE6FFO>"%3Z6F.X:
-M--GU;(QT[HV&#W8?9-W.'?-0;6/9.=UB36O_7Y1$=FQ>OG#IT2A/KFM,O6(6
-M8O+!M'FM51FY)&;94I-,UDP2MT;_,0``?````'P````"````10``>%'2``!`
-M$0``P*@!`<"H`0(!]`'T`&0&26GNEE[.JQ$4W.#>''CP28$N("4(````````
-M`%PJ``!`EMM`<QKP>/YL?8?Y_/EIP34`4KEE@>"Q--J9_YBG`FWR%M/^?_E;
-M.DK#OBPOW2C@+RRM'HF@M""?0:$'3!*W1H`]``!L````;`````(```!%``!H
-M4=,``$`1``#`J`$!P*@!`@'T`?0`5`8Y:>Z67LZK$13<X-X<>/!)@2X@)2``
-M````````3````#`W["/:J-9V*+_(1Y'3@:*\&RZ9#L>)?9<7;6Q`.1V\K1ED
-M_1;00<'Q,9XK"TP2MT8\3```;````&P````"````10``:%'4``!`$0``P*@!
-M`<"H`0(!]`'T`%0&.6GNEE[.JQ$4W.#>''CP28$N("4(`````0```$PJ```P
-MZ,2Q)@4/U#1-M5";EY[R;)?R3IB,IZF/%)=$%S+9JX1"*>I_=''!+^9?AT!,
-M$K=&G%D``&P```!L`````@```$4``&A1U0``0!$``,"H`0'`J`$"`?0!]`!4
-M!CEI[I9>SJL1%-S@WAQX\$F!+B`E(`````$```!,````,)HD-M6R!O=@<LY<
-MJ0ZPQ*?QF.,[PG/@R^$MXES+[,K=/NN8M/A?<VTG;9<B3!*W1LI3`0"8`0``
-MF`$```(```!%``&44=8``$`1``#`J`$!P*@!`@'T`?0!@`=E25Y*,*GDWM<`
-M`````````"$@(@@````````!>"+]`'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``=.;S3ZDO8[?SP+YEAK$W<<OO#FG+`&%9AY'42^`""D(A
-MO;!B9)0%"ALY)(+)QD=;PP10&C]_2$YI8_I9>Q0+.5!O8AC[@:%H:\'-<]O-
-M+]\)*TJI8=GA&`PCZ?)`]C1L$C63&&DFC,Z\P)]/]YOTT?*A69SAI_]:UH46
-MPU?DO<LI```D_Q-ANKJ!%JX<KGOMH\4@R7=927)UG]J^&/F+*6:T4CDI```<
-M``!`!.+CN\=!`BO8WT;%/!*]^CU"6$L\````'```0`5"5C])(2-55)$E^K1"
-M+1T<P6!#LDP2MT:L8@$`7````%P````"````10``6%'7``!`$0``P*@!`<"H
-M`0(!]`'T`$0&*4E>2C"IY-[7```````````I("(@`````````#P````@``!`
-M!@````&U#3Y[0=O6S@K0`JJ]([6V:7WY\TP2MT:/<@$`N`$``+@!```"````
-M10`!M%'8``!`$0``P*@!`<"H`0(!]`'T`:`'A4E>2C"IY-[7```````````I
-M("((`````````9@A```@``!`!@````&U#3Y[0=O6S@K0`JJ]([6V:7WY\R(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``=.;S3ZDO8[?S
-MP+YEAK$W<<OO#FG+`&%9AY'42^`""D(AO;!B9)0%"ALY)(+)QD=;PP10&C]_
-M2$YI8_I9>Q0+.5!O8AC[@:%H:\'-<]O-+]\)*TJI8=GA&`PCZ?)`]C1L$C63
-M&&DFC,Z\P)]/]YOTT?*A69SAI_]:UH46PU?DO<LI```D_Q-ANKJ!%JX<KGOM
-MH\4@R7=927)UG]J^&/F+*6:T4CDI```<``!`!.+CN\=!`BO8WT;%/!*]^CU"
-M6$L\````'```0`5"5C])(2-55)$E^K1"+1T<P6!#LDP2MT:UE@$`4`$``%`!
-M```"````10`!3%'9``!`$0``P*@!`<"H`0(!]`'T`3@''4E>2C"IY-[7K+DK
-M_KE\1W,A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(
-M`@```@,```@#```"````"`0```(H``"(``(``'B].KZ4K8BH*2S<!?SF/EN?
-M;8$$W&HSFFBD1.Y(OMZJ4OY1QJ<2&>!*&&6:NNWFR@H)NT*(LOYVJ;5GS[6M
-M\XOB2MS/X**=D1Z9JFKB..'LFEY9[I-3=,0I'=279+0`#S#HNFK1WK,F?^?X
-M/"SR`&2WIJ?R84;SUH.6#FYMF)R?*0``)`@:Q2.6%'J89KG`$\SF"J%G_%HE
-METM`J&\LP,F*B?-G*0``'```0`1=(B-E/TTDT%:[12M\P'SM0@&B=0```!P`
-M`$`%WI].*H5/A#5*B968"3<6S"%0U1U,$K=&LL,!``P!```,`0```@```$4`
-M`0A1V@``0!$``,"H`0'`J`$"`?0!]`#T!]E)7DHPJ>3>UZRY*_ZY?$=S+B`C
-M"`````$```#L(P``T%MWNAU=$CXV_@`0P`_64?W93E!*VJI'86*%K.([A\&M
-MUMIU6*/51X&?4S!IBOOL0EZM?^#'W)40`FI0@<"=3/@K68L0XQ^^4G^3J06X
-M]<QRH4KCO+T20;,%G_[3*[^KQ:?5PLK?Z6M9.)01GJX*GQ\VU7/>9XU"<-'0
-MY9F=D"NSB=UE%6HXR#06!LK?Q'5)YI@/]0(,$3*C/UEG;44TIC$!XZ45R=WT
-M*DU,$TKZ&TB#+M\SQ8E.RS(T=(!N+73F]R\[>GCP`*UZ4R1HX4P2MT8]W0$`
-MO````+P````"````10``N%';``!`$0``P*@!`<"H`0(!]`'T`*0&B4E>2C"I
-MY-[7K+DK_KE\1W,N(",@`````0```)PD``"`3<*::0*3#ZR,KF,WM155S1_A
-M[)_9^**E<&?9FU6"VTET,@9B8'3D[FAA,J'Z#S4OH<"C?&5ORZ'H[*N7C9NM
-M2'UBJ=W9P>EGY+]*\(VFL_A9//;C7S(_%9]L#G#0+7<'R#@RT3!Z4T"N6P\G
-M?!;P*I'&1LTXAT-3'4__`DP2MT:A_`$`'`$``!P!```"````10`!&%'<``!`
-M$0``P*@!`<"H`0(!]`'T`00'Z4E>2C"IY-[7K+DK_KE\1W,N("0(`````@``
-M`/PA``#@RT8%9]%4X3XGNSLCU-4\3O5PDT1^G_#Q4M`TW&73):=@1A/G=<0<
-MLQ(6$76'Z3)(D`],(QQ.)!ST&%>+JNY=,6Z"?,;SET>\%U?[)FFB;C'W]BMT
-ML/YCS4"?M(<S5E_V)62KP+D>"HGC.('*,YE9HG",&Z4#1))/1U==R",#U>2@
-MJ38=_\]PYWW(<@"*&A,*/-`FH!R;#Z>+M=+@7#]?5T,;7OBRATH_/V^6%1O"
-M#C&WN"RI9TG39P("WM3:(,=3B[`O(E#IBL.<(O0)"2JZ(2N?$ISA95W@/'EU
-M:DP2MT8)"`(`_````/P````"````10``^%'=``!`$0``P*@!`<"H`0(!]`'T
-M`.0&R4E>2C"IY-[7K+DK_KE\1W,N("0(`````P```-PA``#`JAM$Q;;%WI^#
-MW8V2LF$JI,'UDS8/TXT%^+C+K"C2IF6%4!6F?P4H<`K`3JY<!L(1H;P9P2:C
-M5^0KN(JAX.VMTN\,$/WFR-3AIZ_3E/H>H2<2%[T9HCBESS1<C6(%?A$]!25:
-MNTT?1`?!__<@[0+GGS,`D5#_LZ*+I.K-64XSCVH"1NN&N3AR^$>B9&8_V[A4
-M_#6=JA]G-!+N)\!,8@WMID^*)^WSR4TTZ;"Q?OU5!F!G1H3UCZKJ+0[?2;],
-M$K=&QQ("`&P```!L`````@```$4``&A1W@``0!$``,"H`0'`J`$"`?0!]`!4
-M!CE)7DHPJ>3>UZRY*_ZY?$=S+B`D(`````(```!,*0``,`VE%S(%,L:HLDC;
-ME=8X6C-1)R58)S#/'IT=0V:83+)K4SD*-^C3MP*X.5H`3!*W1GTN`@!L````
-M;`````(```!%``!H4=\``$`1``#`J`$!P*@!`@'T`?0`5`8Y25Y*,*GDWM>L
-MN2O^N7Q'<RX@)"`````#````3"D``#"4\V&<N"<(_@X_+HZ5:8-B_0)8B5L@
-M[K_K.5*E<:,4XM%/KM@S-F("-O6:RTP2MT:220(`/`$``#P!```"````10`!
-M.%'@``!`$0``P*@!`<"H`0(!]`'T`20'"4E>2C"IY-[7K+DK_KE\1W,N("0(
-M````!````1PA``$`!@^VR8^^KM\'*=.`EY1#,^_%D`_.91+KWY+#?F&-7T-V
-M]1`Y3+A2\<99=I>@,H)%+<,Q*'C*';\@^)<O4?D.02OCJA7<;X?KX[=YZ2,[
-M1'U^':!`NI`2+%?2IR9'Q8R(;(IA],NR1)[`?>@>#0TX0>4N9SG5.LIU`.MG
-MQGVA&R#N<$-$ZY-0^*_E!A.973<)-&&7$)<\!@/SQ,M]^UAYZY2;KG\?&TK8
-M6BX]YS`,3_GV3U*U63#N,'$=XH)O*#[$6TN=)]'VT(HG-V'W`WG0FDD6NF[E
-M]-X_W*]O-"G#9%FOO?!'K";G,CK(X0;#&BT?#$A@.#*<H=(K_X(\3!*W1G)5
-M`@`<`0``'`$```(```!%``$84>$``$`1``#`J`$!P*@!`@'T`?0!!`?I25Y*
-M,*GDWM>LN2O^N7Q'<RX@)`@````%````_"$``.#BU'>W)K(R1JG6?OY5<%71
-M!5M<MULJ2_.5-Q4)T!$@\2\V:WL\5D:[>Z05W1A[VE'!1$%`RFW75TUL-S1E
-MF7/HL-L3XN?2IPX!>Z#`4%SP5;YUP!<32[/UZ63L39=@<''LC(PNMEH5LQ@"
-M2F*+8JZQ9&[XNL9_J;E4IHH/LQQ`FSL[NO:XP)SJK^>M8FQO)[W`IT(I];H&
-MQ2EVO"H%`43O(J\Z]3.ER"*5%<>^+XN]LG9Z;J1KA3:-?0#URUG-]HLL%O[4
-M&-@0`I(S5<PSI$_451G[DVTC`\?D%-S93!*W1KAD`@#L````[`````(```!%
-M``#H4>(``$`1``#`J`$!P*@!`@'T`?0`U`:Y25Y*,*GDWM>LN2O^N7Q'<RX@
-M)"`````$````S"$``+#BW'NC#0^;JM_9)D#\5[,O,?A@9LNW\R+XHU7/%YVG
-M"2Y!5Y^#'LM>OH^QSN`V%J,'!VW#,<.I&7ZU)RZK=\(WF=1)52SXGM"1PGVK
-MO=Z]EM#*-<;M^F)O'&0_X&EE1U?Z&/*NZV,<JBG#_?[$'88=YY^7!6NY#9L$
-MNC"DQ1#J)UPL./F/!`*633G)W2W_=P2J&?7.,7+]+*W%9OU=S=TZ?\V17N9C
-M/@'2Q."*3!*W1B^(`@#L````[`````(```!%``#H4>,``$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y25Y*,*GDWM>LN2O^N7Q'<RX@)"`````%````S"$``+!;+1U@
-M9.[`__&T/E.P./[]H>S_\E/37(\)_>[I<H6%&/7?E+\`*&-)!B.:BZEEU5T[
-M'$JOF+J>M6R`L0X33,<F+9J"5M#D]\DTX4:!SAG*"#"P0@^!PI;-@A?Y7%T4
-M;#LN'3Q_!3&C&A97`QZA`&.D<*#5O#Z9D9,J!99/G%&.^PB5$`S3Y\PCUPO-
-MN(,"\.Y7%!!IJ.]`<+UQ,E=8>$?*R!#:7"F#Y)M>[ZPU3!*W1FNF`@`\`0``
-M/`$```(```!%``$X4>0``$`1``#`J`$!P*@!`@'T`?0!)`<)25Y*,*GDWM>L
-MN2O^N7Q'<RX@)`@````&```!'"$``0"_5POV'7WBVV`KCO3&W&Z1=Z;K16VM
-M-#*[2!?3#R/HV+Y:[RA7?9\IZAW^H(!>,O^WQB@ICF'G#&2:F7YVF'!;M>YU
-MU0?-N;)JO3F)MIEO=P(&$=U56JVYS;*^<,<A_9&3S.8R_^G81G*T*O;2_U(`
-MR/,ES7V'CR`U9P;<"*T"ZQ"R;D4Y2/?F)_]UZ%\G+;0TJ.X3/HJ0T'D?'35+
-MS)\YL?N_D4Y7:HE']]703^T&0U&&SX<6%Y,<Y4Y4^NFC-G,C(KL5YMC3#SBT
-MC-+WGS@G1*`X'='"##KZOG"0:Q^Z$O?#F#FK(L\2%@OE(NGPP:761I?]-\(B
-M^X>0B41,$K=&K+("`!P!```<`0```@```$4``1A1Y0``0!$``,"H`0'`J`$"
-M`?0!]`$$!^E)7DHPJ>3>UZRY*_ZY?$=S+B`D"`````<```#\(0``X-^1L`"R
-MNU_X]>["SIED!-Q0C4QSZ<ZP7$M+B?82Y"<#&KFM76OD6TCE<AG(S2@)>=I)
-MF54EFK:_E3Z5E`0YIA';0+*&^Q7,(A=NVQ]GN,P.D&/FC?_*GF<8;M4G;P&W
-M*6FI96[FVVN]"F5C9.$UWG1<N)GG\1-2'#/B=%K+.>QA;N%-PT;9)4VX?'S+
-M\#.I$9BDJ0W4:5FL-09]D&H"GNKP:,@XY>57\\C:0PRD$YWCU^/%7C>!_,Q)
-M:#$Q7TT(6)@6888V)"$,JE7?UF(0@&G'PD:KI@_;#N.,[E5,$K=&Y\$"`.P`
-M``#L`````@```$4``.A1Y@``0!$``,"H`0'`J`$"`?0!]`#4!KE)7DHPJ>3>
-MUZRY*_ZY?$=S+B`D(`````8```#,(0``L+VK("\]">UY+PV36HD7$R9;@P)#
-M'T$B5D%G,=S&\T0C1-J062:LM<:^=+/NF(6?0,BKU216=*?M;*1]JEO8%=9:
-MA;U429#.T,HW<!M+64^5Q_;"Q0B(%)R+>G'8RUJ?/1(T78<[V^W4E(A\PQ>$
-MH<^<W$4`AN7"+YKT\MO[@CPX3\4*(MRSAXZG6/B,_?84$T4`'K)(B\RB()#D
-M/%E-K?V.Z(MAW4N`%S2QC`5,$K=&1.0"`.P```#L`````@```$4``.A1YP``
-M0!$``,"H`0'`J`$"`?0!]`#4!KE)7DHPJ>3>UZRY*_ZY?$=S+B`D(`````<`
-M``#,(0``L#*LQ%*"#$@D$1GEFU]7GKJ:S!,SNSRSRH0J1RL)-7?\QB5XUW*2
-MU^WC(U8CE/]H^X>J+>L?*&FZF'8$KU@(VCC9YKAJ^,"X(_%@_U.6L?7YO2X9
-M^JWJP')]T8'X9<8F$^/9#I[>3LYA"&N5MSDS`O%.!'\,Z?C@]K63I6=1*XNZ
-MDS<6K[V-<H'9FR">?!04_US-4/'+RH&AWXL2"J^8BP.O"00F:KW^U_D(O\!,
-M$K=&VPH#`(P!``",`0```@```$4``8A1Z```0!$``,"H`0'`J`$"`?0!]`%T
-M!UE)7DHPJ>3>UZRY*_ZY?$=S+B`D"`````@```%L(0`!4"N,8$.ED/?TMX.8
-MS!S"0NO%$N4J"T,$';;`.'/.IVSF'DJ3JA\2[C48M)"H=W?#W".SP=<V\.!!
-MB0O*O\\ET=:3?0\9^K"LIK%H_8]UQ=Z!PTYZ3`])C!-"B*;M9.@TW/[1E0%=
-MOV9:'T>[:QI&N/1E.0P=LL78#^]`YG)W$A.M77$9%R'.T!T"<N'N=^FL;/&O
-M4D^VZ]2EJ,YT0/1.8\O1(^W%V:K&EO.Q]J*^`FU.A'Y.1`][%1Q_JYR.2$*8
-M5+6R)+-U*"7\>0K,*#5ZGA3<[I\1ZP>)1A6LB'B.0X_DOS*`YO6T0-_U;S+<
-MW;]2.2-ES]=CVV]P"=?N215,0VU<`-#R;L*;]Q*@,/!YL$NY)NI#C%.$#<SI
-M!%2T\8S0HJ7D3NB2/NPJ-"@8)5/#//<@/#OC!DD*(B9381'KJB:V/KBS-]:,
-M%E%AY):V3!*W1A(_`P!<`0``7`$```(```!%``%84>D``$`1``#`J`$!P*@!
-M`@'T`?0!1`<I25Y*,*GDWM>LN2O^N7Q'<RX@)"`````(```!/"$``2!2K#F#
-MRX8?'1BE[$8+!A9,/]N98R3:WFTAQDR>-MP\`$@I!JNL(9NMLQ4X-P88H)87
-MKGV_WYT9'N.JTX_$6!L*Z<P,IZ#?!(IW8E^#6[?#IUGDM8NB0BEY-2CEQ@KO
-M\,.$ZL#)EBC5*NPJ7J6CO<\@A*S@Z)`PG@7[](LZ1$Z6+3-UQNQIS[Q)/]ZF
-MA@,W.^5(:!K2?M_3:(Q^A2Q/XDJR('JT"!L0F.*'KJ1N6:9P3^9I"$)3HH(_
-M$B9#(TNX-UC4,Q(#KHM8<\3""=??)8YMQ$S:I97"A<@+6+.))!3`1C.OS8(V
-M+4]4M5WH`+/PA'=MC"I2/@;/]?XSZR8W+N2%J5`0C.U.[>ZP'(`(]S[VMM4D
-MC]J5?Q+3)9[XP4P2MT;L9P,`?````'P````"````10``>%'J``!`$0``P*@!
-M`<"H`0(!]`'T`&0&27$)7&*_[T$0H^JBM.]@/9LN("4(`````````%PJ``!`
-M:G?X*#5-(9?J2DT_3;N>6JL55708+!AP*CU8(;FG*>$JZ@AMWG'E%\BJG@W,
-M:1$L#UWC?[I-Z/:Q)1X^3!*W1O-S`P!L````;`````(```!%``!H4>L``$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y<0E<8K_O01"CZJ*T[V`]FRX@)2``````````
-M3````##S3D17#F40.,@B?IB3*6#V!Z<27.C+;K/[N"+`&<\O:K[9'-CR\0ZR
-M"1SF#$P2MT:8@P,`;````&P````"````10``:%'L``!`$0``P*@!`<"H`0(!
-M]`'T`%0&.7$)7&*_[T$0H^JBM.]@/9LN("4(`````0```$PJ```P:7[>Y7`)
-M3^VFA>&U:?[$1A[ZL=^+PL&D2=83^GV@5\HLHT.=&G'Z$S75^#Y,$K=&G)`#
-M`&P```!L`````@```$4``&A1[0``0!$``,"H`0'`J`$"`?0!]`!4!CEQ"5QB
-MO^]!$*/JHK3O8#V;+B`E(`````$```!,````,"?437%'^;[B.+[A/N(T_Q;W
-M^IXYFV>U</\Y*T[A.!5UZFSS<W8DRSO>LNQ63!*W1A*-!`"8`0``F`$```(`
-M``!%``&44>X``$`1``#`J`$!P*@!`@'T`?0!@`=E(0^#5WH_AJ\`````````
-M`"$@(@@````````!>"+^`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``%PUIB`.3C(7(UZA10L?F:C.RM8%R.H0@S#")+[!)?ZUYL1%CJ)K!
-MZV"+6U\(V*7NZ#`F?4X/RL1I[G7"/`NB_YK;^!\I29PM+H+E1]YS1'3T6.HQ
-MSA4HRJ4`1I)?X=3L4%0QZ8H2;"T5B:\,4L3N*]Y6PGNI4N/[K]E\]Q.S'=HI
-M```D=;LB]ZF846!BTYKM/J#<K2%W;G1[T?:OWSX$'OV4FS`I```<``!`!-_I
-M+MYIM4X+=?RFO\+(&'_RU.-+````'```0`6;)Y:D3E3[I!Y&%!)7,MIB*/Q5
-MLDP2MT;HFP0`7````%P````"````10``6%'O``!`$0``P*@!`<"H`0(!]`'T
-M`$0&*2$/@U=Z/X:O```````````I("(@`````````#P````@``!`!@````'*
-MW`F]2Q&-Z;[<).^3,2=4OAQ+3$P2MT8)K`0`N`$``+@!```"````10`!M%'P
-M``!`$0``P*@!`<"H`0(!]`'T`:`'A2$/@U=Z/X:O```````````I("((````
-M`````9@A```@``!`!@````'*W`F]2Q&-Z;[<).^3,2=4OAQ+3"(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``%PUIB`.3C(7(UZA10L?F
-M:C.RM8%R.H0@S#")+[!)?ZUYL1%CJ)K!ZV"+6U\(V*7NZ#`F?4X/RL1I[G7"
-M/`NB_YK;^!\I29PM+H+E1]YS1'3T6.HQSA4HRJ4`1I)?X=3L4%0QZ8H2;"T5
-MB:\,4L3N*]Y6PGNI4N/[K]E\]Q.S'=HI```D=;LB]ZF846!BTYKM/J#<K2%W
-M;G1[T?:OWSX$'OV4FS`I```<``!`!-_I+MYIM4X+=?RFO\+(&'_RU.-+````
-M'```0`6;)Y:D3E3[I!Y&%!)7,MIB*/Q5LDP2MT8'T`0`4`$``%`!```"````
-M10`!3%'Q``!`$0``P*@!`<"H`0(!]`'T`3@''2$/@U=Z/X:OW$BT[B+O#HPA
-M("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,`
-M``@#```"````"`0```(H``"(``(``/HPI9BBR/=-[>D/5F"Y+L?[D7'HJ6<T
-M]$;"_=>:B8XN>Z,OWDRQ>)7WPW<4`B&96YD\7)9<*S:4=(^:LWSFYAQYIZ2'
-M-K:6!#=,O_8OR",O8>S`;/(^H@8]A3)(Z[[-O3DCV..90LMEXU5M;*G'=\%Y
-M5<3\!=*2D2LS+?I?O>FY*0``)$6DV0Z;G!ELW=@Y<Z'Z7L?!XO^4A8GR\I+N
-ML2,+@!5Y*0``'```0`1$2B$;JU8G72(A-M\4"YX>966`(@```!P``$`%!@<C
-M21F2ZG"CJ/:+Q_.;`Y_<KS-,$K=&O_X$``P!```,`0```@```$4``0A1\@``
-M0!$``,"H`0'`J`$"`?0!]`#T!]DA#X-7>C^&K]Q(M.XB[PZ,+B`C"`````$`
-M``#L(P``T!Z]'&&442T)C\EHP)+':YK66^K!>)`_$K7Z<DR6I@VX60C?%*KB
-MS,"VA2[@[TLL=A6^D&OR1%(G?5I<Z`D9F`V.3-C4^&SNSZ7%_4J(/1._'<[9
-M,A]X?=,_0!>W$Q)37MI<H1#?PBK^I+NM4D]S4"V[YOCR*1VL&HF5G;LD57)_
-M.%&6"J0EY0"5=;U]ECLR?/Z!>*&.?[-!0_>GEWQ[?,5=A):;:*O9X"/3D>0W
-M8*"M-5)R</'&V4<AAR':T6Y#H#`.KT6OZ@BHK$M@A$P2MT9G%P4`O````+P`
-M```"````10``N%'S``!`$0``P*@!`<"H`0(!]`'T`*0&B2$/@U=Z/X:OW$BT
-M[B+O#HPN(",@`````0```)PD``"`,I?GD8$&-FK[V:$.H0/3U2BMTUVJ=O+Y
-M91DR<W5(_0B?O`7$6*'C'`ZYZ'],JVT'ZR8_*DU\R152XU-?/4A3UU=?R)0]
-M#S4HEI"OM><[']^:4_EC%!B=>>RK#OK\9\\0Q:.J4O74"`+]PWRJDU#]D!MO
-M;&0UAS^=+4Z8N4P2MT:_-@4`'`$``!P!```"````10`!&%'T``!`$0``P*@!
-M`<"H`0(!]`'T`00'Z2$/@U=Z/X:OW$BT[B+O#HPN("0(`````@```/PA``#@
-MNB4ED-/*X*1)0,2:8U\6[XF@6LIRZ0I\FZT-"\Z?0%34"QZ6G*<U+;]-IBX2
-MXJ;WS\R`4+6$7[RJF^R=)L_O@]8FM2+<W(D:MJL$6WYF,]$CFZ_)2P5>_35&
-MQFKA0/YA0N<HR.NR0O73AO6AT1=$8:@<T)/O0Q/:VGTSHO=T;@U;.QIOQ+<O
-M.$$%,>^`5=HI^='^(U(?8^`T9G((PPG'>#I1(4W@K[BHGJ`MDD*FC]E`?P8P
-M>$7Z?3AN`"C3</TG8UG6-A%3=9N+9;:G\]%]"-Y"BVYEY.\=8UE]2DP2MT:5
-M0P4`_````/P````"````10``^%'U``!`$0``P*@!`<"H`0(!]`'T`.0&R2$/
-M@U=Z/X:OW$BT[B+O#HPN("0(`````P```-PA``#`WH_:&0L#N,(<#("O;"F'
-M)P;):G97\7*Z,DF\6I/`88;"](FF>+YU1G-G.75>9FX7-M\(*4DS#0I]8$Y.
-M.PG(O"L[W`&'6C^;]R@5VV!G9@)&CF+FI6^)Z,@%WTR[$C!N<YM=]FQ?PG>6
-MJV8>B@GW*X"Z?OI?#Z`LJ/V'8U&A:#3RWO#?2#B;I6[BW1B.!AA4+IX>P_"G
-MY>5.1WKP5C7'P$KMD0?VN:&7,<Y[ZW2NK5LRKF!HOTL*G%W(1EY,$K=&3TX%
-M`&P```!L`````@```$4``&A1]@``0!$``,"H`0'`J`$"`?0!]`!4!CDA#X-7
-M>C^&K]Q(M.XB[PZ,+B`D(`````(```!,*0``,`OL8QLB<XYJHNNECR(H_U_8
-M?$U[EK2`3C!Z!EBL[CMC>8G4QY)!U-_QM@Y\3!*W1I5J!0!L````;`````(`
-M``!%``!H4?<``$`1``#`J`$!P*@!`@'T`?0`5`8Y(0^#5WH_AJ_<2+3N(N\.
-MC"X@)"`````#````3"D``#"Z:K0F4O'B2FZR0D/6B!1ZK+-KRY3$7.\PV?,8
-M(+L?;&$V-;[DCVE1B9H0BTP2MT:-A@4`/`$``#P!```"````10`!.%'X``!`
-M$0``P*@!`<"H`0(!]`'T`20'"2$/@U=Z/X:OW$BT[B+O#HPN("0(````!```
-M`1PA``$`54Z:1O!);;.S4"B`V;,);%XF$[BZK/?+6V#V!"/SG"^K(K-QH%D$
-M`5<QC3=FI2)FG;QR$"TRBNGE5'.&[BR=JIA")J-TGF^:?=#S'V"#9ZBPOM#F
-M3KCS%]#B?#'G=E@"]VD\9:%W'5ES^I;>_C=[)>>QG[A](?"6P@F6AM<04OO8
-M*C0S$I`[R#22V3>&9I]6HIRU-KZ?9"QI,=0(!,Y)^B-]&>;FQ$ME4B[.%^<,
-M$FL/35"P$$="CYI%!:'JS^CO/0U_9'^8E&,:NM\O1)?_#Q/X^>61SQ-O15:/
-MEMH_H5,/44\&V*_B8G_4P47\K9_<UM:ZM@F04!+AL#KB3!*W1I^2!0`<`0``
-M'`$```(```!%``$84?D``$`1``#`J`$!P*@!`@'T`?0!!`?I(0^#5WH_AJ_<
-M2+3N(N\.C"X@)`@````%````_"$``.#=_.627%QC%:G!3W".FIS5!C&-K>L.
-MW#?+]79!BU#^KB]E#]4>SW*8L6&N\H/#2$X3GL4P-O`:%A>Y]=;:&9(N&\YD
-M1\!CB8B$8C2P>'PZ#KA?8=)Q&]A_HN%W7PJBQITJK:+8/PDT>2O`G$0ZS1WH
-M1'5&K>Y&Z;;5%U:Q])AMRO+V'YU52RW,;F,?@#>6^F<J<@$3GVU<W*K,G^9R
-M?G@U?2UN_%P.^=RXQE_E%VXGI9Y"AH)N+O5J78T.6YH]F5X,A8T[)WZRR2^>
-MI\#O$6B_R4M-@BD=DS9Y]\',3!*W1FVB!0#L````[`````(```!%``#H4?H`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:Y(0^#5WH_AJ_<2+3N(N\.C"X@)"`````$
-M````S"$``+`[4(:,"<V,A/1$I:,1FK,_GF]B[C<XS_$()X<TSG.)J3RE\)KJ
-MVS:/4TO;+SMF^XSF4Y(W-=:Z!CE(5=Y-?]^\[Z_`Z\[!\.2RA/A%AYJK$+I6
-M[J(O4OFD((KSP7]*_;,]@*+<G0BK3%'Y?**-]F6%NTN!=U@(1T7/PE9:!T$K
-MNB>'3\S0YG>OIU'AUYK43INFQ)6\]+/6IY@'O:W$G>HG6!ZPNF,?L'C$D?NA
-M3!*W1K'%!0#L````[`````(```!%``#H4?L``$`1``#`J`$!P*@!`@'T`?0`
-MU`:Y(0^#5WH_AJ_<2+3N(N\.C"X@)"`````%````S"$``+"!F*[:%,8XY6,U
-MJK("4@!Y9M\#K*)7D9Y]%-;(&@M#E(6#N`EBF75;)^4[WJA=O3@:$88:R*S\
-MXA/U_,^E`.2G5<U4'Z@#`XBYMU<B+D&`]1GSVYTOQ@V`WOGO"3`(ZR$`(0?0
-M%X_X^#]C+N11FXWY*W*P7(-^GE^<-_?ZVH/%2-A%YIFA)!;YG/&^4'J0"-XN
-MH;W;3'^5!&"E6I2#-*!!%ZYOP%`S7)2,-"`33!*W1@OC!0`\`0``/`$```(`
-M``!%``$X4?P``$`1``#`J`$!P*@!`@'T`?0!)`<)(0^#5WH_AJ_<2+3N(N\.
-MC"X@)`@````&```!'"$``0"VE[7ME$]])DP-2/*=W;1#UD%`Z2J*:*N[,-ZD
-M:+B&DC(:`9\]["VCF4(4U?EV\:^OCGO(1Z8TO.5$(XV'-JNLR%`KOUTKZ9XR
-M%8C!5&,V\?/FK)K&T)MDN<+[Y`8=)M%@(=3%"A*7$ZN$G;(X(`7GHD!?M.XP
-MC2CI4%$7LU<<^(*D7T`H(^.P*%0\!&XY$V+\L)W?,>)=>]VKR"CFCD5:.P16
-M`GB,E#DPQRENVBP9M]T8K2'O!92),%3H]5Y>J76F)PBH6OF0_Z&>^%/D&+'>
-M5?>C]=R]CN-W7N/^-V$=YVLH?,,@'N`/^LVB'ZHM$\YW!?&YUB&7GT7>B5E,
-M$K=&2/0%`!P!```<`0```@```$4``1A1_0``0!$``,"H`0'`J`$"`?0!]`$$
-M!^DA#X-7>C^&K]Q(M.XB[PZ,+B`D"`````<```#\(0``X'_-58"V?US<WS9#
-M60WR1OI6)C90^E-C5A$=&/".)_4J#4-$X!QH4V9=XHDP7"*4:8SEQI([H*\:
-M9:'_E+(1#2!T/@9$#CR_G<&#-2]5"3+A/QJ4I529IB\L71X7MEML!3QMJU)N
-M/R9WK`Z,B^@:JV]*OZQ&^.$L(2/=R05!T5!7>AM4XK_66T4GZN0NL<[`OE\G
-MC`$Q5<ZW5[M/IQL1]+$JZZR.'("?=:]X9DT5ED*R>#W\M%@6N.[JQ&OR0UVC
-M21P7-=H191@L'`JZ?U2O?*,>T,2\3,V&K#3/C`%,$K=&(_\%`.P```#L````
-M`@```$4``.A1_@``0!$``,"H`0'`J`$"`?0!]`#4!KDA#X-7>C^&K]Q(M.XB
-M[PZ,+B`D(`````8```#,(0``L/3V6#$EI>;6T6T][Y"O*(COT2X3U7X6QK`!
-M!79$3'9O""*9KP!#LG.$*4Y-GCL>"_^&G\3$""K`:,ZW_OO^+(Z?_)*'9T1O
-M&!CFF0K_4@0X4S0,V_MD!-.-!INIF:/>`*AET@7*2<F,37D"6SP\<=MXM?(N
-M,12%(Y6&L1!C4*0%P"$K0"BI*3.E_#(-JUM\HA!P6-J8.KV9G2A>`F;SBG\U
-M$KJ7^DM%W08>FBQ,$K=&/2,&`.P```#L`````@```$4``.A1_P``0!$``,"H
-M`0'`J`$"`?0!]`#4!KDA#X-7>C^&K]Q(M.XB[PZ,+B`D(`````<```#,(0``
-ML/I/>VAGB(C9POX2:]\"X<]@`5JMLG4)K:0'+90H>.>);)FK6U,N->!:&HG'
-M&G!W\X*TZ3`?KM2S`.S;E/B5AJU??Z)7QLV+ONW!GP')S@W[#%B^,B944?'S
-M,ZM[2-Q="59GOOG5)G<Y>$#"Q[9.26I>2]AN@].\3,&NKJ&IYWFE[6>8!_M^
-M?[5"&TK@)=^S/VNEBW;L^EER&SD@'FYIN$H@-K0P]"\PP;'`3*Q,$K=&W4D&
-M`(P!``",`0```@```$4``8A2````0!$``,"H`0'`J`$"`?0!]`%T!UDA#X-7
-M>C^&K]Q(M.XB[PZ,+B`D"`````@```%L(0`!4"^(C\F=F==H;)EHHVA10,E?
-M$JU`(J\34@\P7$FC=3JD;ZYI1Y>U03`T7!BXB^J$Q%PI\?W:&+`<ZJ[83^W@
-MGY^N(D)UL0\8ZO(%9"#WJK1W2.;_#[D#S\S"(7OTHWS`@.)7`YXO8<H=W>)Q
-MJK"`%*FA[^FH?L7((%?GTHPSB<X`LNH)B4O854V=W-O\DBG>4X>7CE#RZJEG
-MU*!(IIYFJ#$CY6T__C_WTK9;`9QB`-<WZ;L>%M:U#*^;'KW_O4@H-,=[;1A;
-ML*SJ^F$+:B&F1$A!#(V*>.>EEP&*GYF_4W$U2U*:1N#*[?##@CGWB=&<<LZY
-MWK,*SJ:_M-.G7+8\1Q^`RW,"0#.U/Q.`PL#97>,^=G]P568U8N!D(@UO88,F
-M?ID72<IG4Y>W`'=]`Y:5K^^EJ0IA"4;W)O/SK4*+J_/[UTYG<2!`954S38Y7
-M3!*W1G5^!@!<`0``7`$```(```!%``%84@$``$`1``#`J`$!P*@!`@'T`?0!
-M1`<I(0^#5WH_AJ_<2+3N(N\.C"X@)"`````(```!/"$``2!%"NUPA\$(X<;-
-M'S.IJM#/RT"*_)CNPD_&*2%;"`ALH*U/TUMRWJ%E-\5@X-,"8=_4]O*%4(5:
-M1<7CI3#6^[G,N\IGB'N=4T.0XY;\OAG1P!2+EWIT8U6Y.F^,<LV!2LPEYN4C
-M=7&VT^YJ)LU*AJ.VY.S+4*B^_Y-T+J4:Z`M,JI&+%;)Y^*=J2J0#5YMWH%Q&
-MP`#R610M^0S$$MVL\])`K+CGR.T1:XI[_<;Z5S![]?)E454L=XI]KQ,%(Y+U
-M_,;K5YF#1*L+&@G$--YP@B@W!3\S[.%\>R?HA\%0L9H;T(HQM0DA(A,=7]J_
-M>7N\+79QB;+4FDJY_`&-6_V(I8!71OG`873&`R3['A)UXZF&0`F'V05!9.A+
-M8Q[J04P2MT;KI08`?````'P````"````10``>%("``!`$0``P*@!`<"H`0(!
-M]`'T`&0&20&4T27/1=QBT5"@4([=<E$N("4(`````````%PJ``!`@4$+@M'E
-M.6JB"!=I0D1"4&_D&MZ]_I7U.XN-N9]<:-02W6?W^=W>0J^],DP#69FS3HU@
-MJW_B(\4TN1/@3!*W1GJQ!@!L````;`````(```!%``!H4@,``$`1``#`J`$!
-MP*@!`@'T`?0`5`8Y`931)<]%W&+14*!0CMUR42X@)2``````````3````#"\
-M7D5\(XZ2&6,.*`)+@[-'59B'.W^35,M31L9%K&==F+(EV'Z<55=#KJH?"DP2
-MMT97P`8`;````&P````"````10``:%($``!`$0``P*@!`<"H`0(!]`'T`%0&
-M.0&4T27/1=QBT5"@4([=<E$N("4(`````0```$PJ```PJJY)Y1;LXSP,.6VR
-MH<Z11M@B;UA:(X3X1LE:@=9%;8@OI:1\4A;5UP2]Y<!,$K=&6<T&`&P```!L
-M`````@```$4``&A2!0``0!$``,"H`0'`J`$"`?0!]`!4!CD!E-$EST7<8M%0
-MH%".W7)1+B`E(`````$```!,````,"3R[)5T*M?=NAT_UQ>H,J/^G#BRFE;L
-MRTXPL>-@E?R@2@J+Y`LEQCB20D[@3!*W1CC+!P"8`0``F`$```(```!%``&4
-M4@8``$`1``#`J`$!P*@!`@'T`?0!@`=E[AGL/8J0(7X``````````"$@(@@`
-M```````!>"+_`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M"+6XF3/&R2(T7C>Z;`L(OE\K+BE8D5;EBB'.\?-04`:.W*3:I!WY;R3R?,J7
-MG0*J3T0,;P57WSYUCZI_`[9<G$YC<A#MG=9Y2QQJ$%F`$*9>D8"2\B6IKFUR
-M:(7HMXUAS0B=DIQJJN_C1V\*%W+D_)PCK.O@@=)9MV+CE%AOCS4I```DLLWP
-M+D-7$2B\#O+LB%YOH`DY&SW"(`>J?L[;=GY066LI```<``!`!!QSGS;NDVO3
-MZ-UP%14K_U)9]=TG````'```0`5FJ&G^RB9:1S^1J,AGM^EB.7817TP2MT;I
-MV@<`7````%P````"````10``6%('``!`$0``P*@!`<"H`0(!]`'T`$0&*>X9
-M[#V*D"%^```````````I("(@`````````#P````@``!`!@````'"%2BX8-83
-MI?M?"VD0BKE_"W3W!4P2MT;PZ@<`N`$``+@!```"````10`!M%((``!`$0``
-MP*@!`<"H`0(!]`'T`:`'A>X9[#V*D"%^```````````I("((`````````9@A
-M```@``!`!@````'"%2BX8-83I?M?"VD0BKE_"W3W!2(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``"+6XF3/&R2(T7C>Z;`L(OE\K+BE8
-MD5;EBB'.\?-04`:.W*3:I!WY;R3R?,J7G0*J3T0,;P57WSYUCZI_`[9<G$YC
-M<A#MG=9Y2QQJ$%F`$*9>D8"2\B6IKFUR:(7HMXUAS0B=DIQJJN_C1V\*%W+D
-M_)PCK.O@@=)9MV+CE%AOCS4I```DLLWP+D-7$2B\#O+LB%YOH`DY&SW"(`>J
-M?L[;=GY066LI```<``!`!!QSGS;NDVO3Z-UP%14K_U)9]=TG````'```0`5F
-MJ&G^RB9:1S^1J,AGM^EB.7817TP2MT;+#P@`4`$``%`!```"````10`!3%(+
-M``!`$0``P*@!`<"H`0(!]`'T`3@''>X9[#V*D"%^#G^G=Z"D4=4A("(@````
-M`````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"
-M````"`0```(H``"(``(``$R@6NY,M@>(P6=$G,=O*ZA]/\#HUV?&H$C"\\82
-M?-:4CKS/U/$F^=3DEPH+<#-0PTX3%:M,@2GB;%/7';4T6AK/Z;Q1ZR]FS8!2
-M(H@T]/@TKF,-:-&<]/R(-,\!$W%Y)0MM"[1Z-^Q-,838]UF0UT];\=R$_/?)
-MR7!?'1XD8GO9*0``)!87/=SQXPK6^)DAHRQR5G_'W!A0CE)9SZ#;4H/W4\BQ
-M*0``'```0`24J^>JBE?1224&=*AO=Y;Q+:<)+@```!P``$`%/"L_'=SAJY$5
-M9(*/`,9U6'0=P>),$K=&Z3P(``P!```,`0```@```$4``0A2#```0!$``,"H
-M`0'`J`$"`?0!]`#T!]GN&>P]BI`A?@Y_IW>@I%'5+B`C"`````$```#L(P``
-MT(MK1=0FNEMI790)@,X-_1D5<[=)MOA>>=)G<28DI@^35AQFJU0^DNO5DN*/
-MWW[\X2^43=[KV/2I&H)UV@"PG&WH8-_UP^*P7&)`7QHV.(QA"&YE&K4QV0\R
-MT!!.<03S<\YK[8%*S"T!.P?_0V+/*N:JWL>*#9V$[HE!(IN>FZ/%1J6J;_2O
-MWZ'W%(@'Y7"+"AZ\?:I&47=VX+XE:R6,:>.AI#<%RI/$"=Y9=!R2,G<=^`HR
-MUHV\HUP,95D=Q--1:E-$\/3%5K<>[9`@P4P2MT:950@`O````+P````"````
-M10``N%(-``!`$0``P*@!`<"H`0(!]`'T`*0&B>X9[#V*D"%^#G^G=Z"D4=4N
-M(",@`````0```)PD``"`V\?KPQ(*/@2'>>V?<R]F`#YJQN5SP>U7QC4G#U2&
-MVW)#A@0#8CT=_.%)V8Q=Q2X)XY0EX-@29QM"$F`TAQ,6$)35`5>I_R=8HY3^
-ML+FSHOJU1K\)6"T:A+;CCYMG&;@1>Q`*Q+JDBDL#$=^-?V(VDT-Q$.8DO$L-
-MPL&7X4P2MT;^=0@`'`$``!P!```"````10`!&%(.``!`$0``P*@!`<"H`0(!
-M]`'T`00'Z>X9[#V*D"%^#G^G=Z"D4=4N("0(`````@```/PA``#@G*S&90$.
-MR*96T^:\6M]_L1ZIOUV,7&!H0TUR_0V[8;'H-G;P?7EC@-F#:2[$\G*J9<PX
-MEME_<T`'<N2C=VJF*@K:R3V:FW/)>"(S^#PH)6@'\S#Z*1@%]'CX/3Y!QLEW
-MWQVA!)<P)=!YVLF3;H;C-PWGCK%7FTZY`9"NYZ/O-!`&I-0NN$VDX8B,YQ\5
-M\M[5=HV<M71U=1D(Q/O>TCOR3=&QE5,L7`NAC7_JPAOL&FP5',(X.^UU[*'E
-M@4=;":IAGBJ71S3Z3L%%?C;)N`%RC]1)/RQ#?R;S]8!Q3TP2MT86@@@`_```
-M`/P````"````10``^%(0``!`$0``P*@!`<"H`0(!]`'T`.0&R>X9[#V*D"%^
-M#G^G=Z"D4=4N("0(`````P```-PA``#`6;4YTO')ESVPK*`DK]JJ]/M?%8V]
-MHB+DE#E=0?*IWK^N33O)ALQWU9&,.WG_+MB-DLT4WH%*PMJA[D0`DDT-<I'"
-M-I"&6M'3*8B.5IE?G@0&J/G.887Q8Z!`J;HF7>*Q8=V)I6ARJMKB\VUW:>/C
-M&+#Q6_()\Z)69UCRYEXWE&@+KD61IQ<K$29^=>-=)?8HU@&HYW\UU;KY#$N&
-M]&`V"E0>+-<OX@1(X8D037(C!:CQ92(DJ+U-S6P=L0Q,$K=&&8P(`&P```!L
-M`````@```$4``&A2$0``0!$``,"H`0'`J`$"`?0!]`!4!CGN&>P]BI`A?@Y_
-MIW>@I%'5+B`D(`````(```!,*0``,.3DWHZ+A7*QBO?1%MD(!5O-0`542`*L
-MASX2YT=1I1V3,I%M/`$O7#\03CK<3!*W1L>I"`!L````;`````(```!%``!H
-M4A(``$`1``#`J`$!P*@!`@'T`?0`5`8Y[AGL/8J0(7X.?Z=WH*11U2X@)"``
-M```#````3"D``##U=X<Y,$B8YVEBS@["/^7T(R0#]BO?B^0QW^BK.-9V]K&&
-M=JE.T=PE9_.[ADP2MT;EQ`@`/`$``#P!```"````10`!.%(3``!`$0``P*@!
-M`<"H`0(!]`'T`20'">X9[#V*D"%^#G^G=Z"D4=4N("0(````!````1PA``$`
-M];&G(O%@^]0G>S!I7U3_/2.*-$^A+M%IM:$".OXPU?Y>>`IV=QQ1B$AVT58X
-MR#T2SQ6WH;G-C&BA/SKAE&?C0@7O^6NGQFJ-C),)SM&W_$%I(5.%.NBX2[0T
-M.8@,RI<J*4VHEM!"KVTHN6")Q!<)^->>#A[U8Q;*OM9`9S-VL<M1ATM%AF$$
-MU\^A8]\,PAR<@MXW`4SJ:3PK']G8LIB:)80'PI\<K*]@W!][IE40L/&_Q@)D
-MBBOT5)DKBD[[+JA.H3EE*R09GG">1AI%NZ>N*ZN-+O,(&E#C(4@%[;B<WY@3
-MY8/Y>V$WKC4I^S#WSN)->0!06(QS&MG!4/"Y3!*W1AS1"``<`0``'`$```(`
-M``!%``$84A0``$`1``#`J`$!P*@!`@'T`?0!!`?I[AGL/8J0(7X.?Z=WH*11
-MU2X@)`@````%````_"$``.`>HDK.D&!YG@"2@CL;%QRE:>"W^6[JW+AC8J![
-M*8'HF8+=:A\I2<6GA/):S/>%35V1-&-,$U1OV>;F<O^J/(`2BOD2I4F=1D(J
-M89%COZ^V?.9D<!N];I!SF3EJ4P-C,@R#E-[8/GAJZV-\<\99LYZ*"DU/4OMU
-M2VIQK.>IX^!D)<OX:J3;03O\UQ!&LX4@N?.'-W,U!DC!7MQ;63_5AJ?<#R3*
-M\FR[_BQ.Y)18?X.B0-!1A/$>VX`NAOZ`\NL?62G@%/!SGR&*,V*2(Z__0H61
-M0FVQR6;:-NIPND@83!*W1BG@"`#L````[`````(```!%``#H4A4``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:Y[AGL/8J0(7X.?Z=WH*11U2X@)"`````$````S"$`
-M`+#KYTY58/4<B'(AP(N#??V0Y7`P3+);(!@7H)ZOBPM.(`[D:.,2CF6]GWC]
-MO9G\.U?UIJ[)^H'(;_[Z>^%KII;MGS+U7G=Z'1W>DDQ>DE%Z<0,L@)J.VN-C
-M^F?VGRNT]Y-'BIX;3YI20IA/9E5E/^4E!:"7I3TYB^8MB_:Y[#L!2BWCT?_%
-MXT\K<'I&B7+J]LV1=Z@\##:ZY![O?)I?^I":A`[.%_FX`#`;$6DV3!*W1BH#
-M"0#L````[`````(```!%``#H4A8``$`1``#`J`$!P*@!`@'T`?0`U`:Y[AGL
-M/8J0(7X.?Z=WH*11U2X@)"`````%````S"$``+#V1^/5^QN/LVU^EQ404)R<
-M@$$V*5]BY7'`[CLT*0B`S@,K'[-VN2MR+G;&!"3YP[(YE"LD3\W_B%EJ\7R&
-MPG-.6K_%4TE<ST!CS#-G#_M$RYP4A-62;+J26[FC0D61A<2@WAHR%U28(PL,
-MN(T0`71+URCS+U=-65&NHE>A%G3`@C8==J.Z^+LDI_1\>%CR^7G'*MB^7>L[
-M/N>%!Z@V&0-7P.LAJS:8W*$9.B5P3!*W1H,A"0`\`0``/`$```(```!%``$X
-M4A<``$`1``#`J`$!P*@!`@'T`?0!)`<)[AGL/8J0(7X.?Z=WH*11U2X@)`@`
-M```&```!'"$``0`=LTM>K*\.IUU$R3M8&QKO9$5LRU39,MJK8756`*6?G>G7
-MNQC9$XW$J@S6&M);)*4<2:1:#K(]C,,_,XD]?VKPG+YLAM!BN]"&Y:7$I1J\
-M$R1S4`70D\_A^LW/NUIECM1,!K=*'OM`'K$LL@A.2BL\O!?YP)1)-Q9R_'>#
-MRX_*O358&3TS<<!ETNEH)O--<MB+1N4=X>X]'YSJ0:PX`Y"=Z'OH2E1N`;:E
-MF]+!%(*V;70^2YTYW]TO^31T_.Y,W`MZQH`$]=G-0!OU*AG)0+IMW#U73,H?
-M0UH"NJ*WT!Z"+,%R,$$`;VF=W3DY7@'27WT(\=+TS;.6DU^8,UE,$K=&H"T)
-M`!P!```<`0```@```$4``1A2&```0!$``,"H`0'`J`$"`?0!]`$$!^GN&>P]
-MBI`A?@Y_IW>@I%'5+B`D"`````<```#\(0``X$@(^K1['HS"?,IWJ@J7@43A
-MLI6T>#,B>%O93\U`6W,G;PUG2Z_!%E"%KS>;Y3_LF7M%#,)O+.0P,ZLI5EX%
-MN0?;DGO%7KT4T!<&W[YZSGD'U8]M>,]Q^X'=1L.5*[X8J^39)RJ:H!@)190A
-MY9R[H]5TM\@[.&7U"$IRKL+04&;9]1F^YVM097`[@C#"IO;Z0L6SX/A/'9AZ
-M75FB_4L/5NF&].IO1)+(*P=#V*EDS3*I<Q_GL),Q'FV4!9KFY-(:-#14-H3R
-ME9[_L=H!YZ7*1AV##N!3MV)1]S%+[.-,$K=&KCP)`.P```#L`````@```$4`
-M`.A2&0``0!$``,"H`0'`J`$"`?0!]`#4!KGN&>P]BI`A?@Y_IW>@I%'5+B`D
-M(`````8```#,(0``L!CU>-GT*7!E&`MBAJ]I=Z]&R1;LS9W][)S`ZZJ`R%UB
-M-A.,^#ZA`H#["ER$LTR@V#Y6=MG?HF@O_#KHG9,T?F>0Y8`5=4ZI&?UZ%(.!
-MQM9TD;_DL/:[3TBZ457?>^.?1T,A0`=V\O5T_2U2D,T,_*])^V\=;8A]B)!"
-MN5"@H*3_!!ZL-^]#@D>7E&LC-DB5`!T4CG>ON:=M]2[YU@)B^*@\#?"!)/V^
-M68%L27Q,$K=&5F`)`.P```#L`````@```$4``.A2&@``0!$``,"H`0'`J`$"
-M`?0!]`#4!KGN&>P]BI`A?@Y_IW>@I%'5+B`D(`````<```#,(0``L)@&3^CU
-M"63O&`-C)SKT354'*6SV\9@.QXZ>VL#IB5P*'C&[P53JV>X\!\?I5DLUW+<X
-M95BR:W3G;V;>*'I(#1E(B'@KN.O$JT1JC8P5OEZFLLFE#Z*2X="]TNE[9D?`
-M<"AW$^.<JNA3WJTZ[[U3)%9>5A7__$=C.;B[@T,_TOINE$[&_5]-B1(1VN>@
-MN3YTLBO9Y_Z!+EI(18X\";>#,MZ3=`70I%*56'X&SLI,$K=&K88)`(P!``",
-M`0```@```$4``8A2&P``0!$``,"H`0'`J`$"`?0!]`%T!UGN&>P]BI`A?@Y_
-MIW>@I%'5+B`D"`````@```%L(0`!4+"03O876W&6A/V=.IF>!C/^@+$!&SH`
-M!+%HZ:N(G:UMP\G(?5$"*Q87O+!9J!I[II+AI.6E4YH5Q#E04KV&I%F=Y`!^
-M)-X^D#2A-?V@?7(N8068T(V`EYPJ,DX:^=^=<Q8PE[)&,RSR6FP)[8V$C455
-M=X9#\/&ER](/'HSDWYXSE.F,YGUFS6C7BI#NZV-O@LTZC`=UCS.C6!E603[N
-MB(=SVNK*C9^L'B<ILD)3-+K9C^(440VFOTF\[FJS]X]LB?[(RH@_&Q)I(B<!
-MNVP];%F3>_X%%J'VRN;"K7_--811!L+T/O5[9CJ#&SHHR^4@'*C(FJ+RI['7
-MYJ8YSU7:M-BXY@TQP083OBQDD]]ZLS/)@Q%\Y@#OK/;AQXZVLX370,C>*I8<
-M[V_`*LP?ONB723N,T;A72N=*\&>9[B``6&K]'JJFGU(?"+M8=F^M3!*W1KJZ
-M"0!<`0``7`$```(```!%``%84AP``$`1``#`J`$!P*@!`@'T`?0!1`<I[AGL
-M/8J0(7X.?Z=WH*11U2X@)"`````(```!/"$``2"DB7@5>4UM^<(5'U9%(1\G
-M^J3;-5SDC\/@V'SC>]:_O>K4`NFBV_(Q!8BD-&_#(&/L^^/'=,_K?I\=BK5[
-MJV0^.]P&^VTGA2J3S7!A,7?,";AD^ZJ]31$1D(Q'?TF/V!)D!]KWM=A9OI&I
-MJ=]YF2F.PMT72]6IB:%/[63X`@,:MSBH_@RK)/HJ+[>I:5V$_X%OQ6&#\"1I
-MJ`B7U01#R@U'WW/6"AN8:.='Y;0&DL,!+O+=%_%BW#*B^]R3>_5?W0OWL6'T
-MZ9F1SR>P2!;2+OH<O>(*^PM3GXO`L;SJCT9D`DY#:'/2UDPN0N:J4HQC__J*
-M<(@^'=8Z5L"3?`<4PK4*(M#4)/[A#YA%?-J";*@9RJU"#%0M,IQ#[[`J%TP2
-MMT;=X@D`?````'P````"````10``>%(=``!`$0``P*@!`<"H`0(!]`'T`&0&
-M2:3R8NQ8.L6JU3M=$'3A+@@N("4(`````````%PJ``!`283J/FH7$T`2/?>;
-MDRF&>HRS5YG:NB9"5^9P\5LY>;GC7<B_*ZE;?=%64C1I+4Q\.79Q$^/7)WXN
-MT*GD3!*W1C?N"0!L````;`````(```!%``!H4AX``$`1``#`J`$!P*@!`@'T
-M`?0`5`8YI/)B[%@ZQ:K5.UT0=.$N""X@)2``````````3````#!SKLPPLU%I
-MBV*:KT3=9.U'1U])*C"R[S^_P*:G<>=/6Y_<NV8$I+%WQ4019$P2MT8+_0D`
-M;````&P````"````10``:%(?``!`$0``P*@!`<"H`0(!]`'T`%0&.:3R8NQ8
-M.L6JU3M=$'3A+@@N("4(`````0```$PJ```PUROV`.GAJ;8Z.UGE@H8*&*#9
-MADY,`2Z)[Z2"A.^X_N8[S]L?J#=`6EW?!>1,$K=&7PH*`&P```!L`````@``
-M`$4``&A2(```0!$``,"H`0'`J`$"`?0!]`!4!CFD\F+L6#K%JM4[71!TX2X(
-M+B`E(`````$```!,````,!Q%=:Z$X?-5ROQ8HWOO\T47_2<P'-ZK[DD6^!=G
-MA"!?"?'Z-L2?%09L$YQO3!*W1G8("P"8`0``F`$```(```!%``&44B0``$`1
-M``#`J`$!P*@!`@'T`?0!@`=E=)KA!Y2QK5(``````````"$@(@@````````!
-M>"(!`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``PH4:(LCK
-M/;2/1)L1M2/J1S$-K]"\-,B<Y$KYY<I5%/^LH-X?4EC"WYD%);K%YR/L8"!W
-MB0<SD`H^12L[]<+);XOQ+L`9C"\0N;=6^,I7(8Z;W[G>O4!5U$VO`@UB2<'@
-MC6@,?O:YE7$8H`G#'E&W6FZ,FM%'Q8=O4FRM@66O/J$I```D5]&)^SJ)S<P)
-MWP]\_A6*9.+,)Q2/,N7J_;/+](Y;L3HI```<``!`!"SD`3JOPF$A\&K`=%-"
-M+V3(.*R<````'```0`4H!$S/E4N]IKF6\%@1-2CV!)M?TTP2MT8"%PL`7```
-M`%P````"````10``6%(E``!`$0``P*@!`<"H`0(!]`'T`$0&*72:X0>4L:U2
-M```````````I("(@`````````#P````@``!`!@````'U")2S/\&4+[<=W2M'
-MY+818Z$YD$P2MT;U)@L`N`$``+@!```"````10`!M%(F``!`$0``P*@!`<"H
-M`0(!]`'T`:`'A72:X0>4L:U2```````````I("((`````````9@A```@``!`
-M!@````'U")2S/\&4+[<=W2M'Y+818Z$YD"(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``PH4:(LCK/;2/1)L1M2/J1S$-K]"\-,B<Y$KY
-MY<I5%/^LH-X?4EC"WYD%);K%YR/L8"!WB0<SD`H^12L[]<+);XOQ+L`9C"\0
-MN;=6^,I7(8Z;W[G>O4!5U$VO`@UB2<'@C6@,?O:YE7$8H`G#'E&W6FZ,FM%'
-MQ8=O4FRM@66O/J$I```D5]&)^SJ)S<P)WP]\_A6*9.+,)Q2/,N7J_;/+](Y;
-ML3HI```<``!`!"SD`3JOPF$A\&K`=%-"+V3(.*R<````'```0`4H!$S/E4N]
-MIKF6\%@1-2CV!)M?TTP2MT9%3`L`4`$``%`!```"````10`!3%(G``!`$0``
-MP*@!`<"H`0(!]`'T`3@''72:X0>4L:U2:.-U;(D[SF(A("(@`````````3`B
-M```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0`
-M``(H``"(``(``#RE:;R)8":$+6^F5/Y^;ON88LSZ30>1G0/LT6%]SH.\F!$.
-M\5H:/S[!WL46<$'6^K<8!EUN]O63?T3(LJR8*H@`D?`C#ZZ4GFGGE!B-C@`9
-MCR$2>^^)@)>1W]<XP'Z92QW@>'P'/U#L6LP9>Z5;;CU08Y!L^=I*4Z]6V(@1
-MA>/Q*0``)%L'R4\4]S55:^IV(KN40";T>N*=44[>E":'/+DJ]$)=*0``'```
-M0`0&&\_*E$S(4:Y8/14;FY4]&G&Y/@```!P``$`%W;W)"UV+EYRN(LW"4:EU
-M1)MVSI),$K=&V'D+``P!```,`0```@```$4``0A2*```0!$``,"H`0'`J`$"
-M`?0!]`#T!]ETFN$'E+&M4FCC=6R).\YB+B`C"`````$```#L(P``T#<9ZKAA
-MK*6G[T5E'V!!5&IGP=WD2*BE,FKNY6=,4#<""<"6B:$IN(I3W:@2XT&'%.0]
-MF:AP%20Z(M<Q]AU!FEVG)S)&$_;J/]%SXTWE#A^'UAF77+OA8M-7<!O.^<7$
-M`]Y417#CRMDN%SI9/*+UX4MIFU`2:119W%-RP[B[`JPV8A-N;P+C$M%T_J^)
-M&-3GL]7KQ;F-!-V8`_0U^&ZA`K86=KEL@314"K`4R\V$T4@8^<6XTJP@J&&$
-M5I(^)<5IQ-B\\6U=,0*-8FW<9TP2MT:;D@L`O````+P````"````10``N%(I
-M``!`$0``P*@!`<"H`0(!]`'T`*0&B72:X0>4L:U2:.-U;(D[SF(N(",@````
-M`0```)PD``"`-_`$@'%@]G5QVWIG-7FIA,SOKN[`FC4IIQ)X:S:WOD(UL1)K
-MQN(0`6'%Y@O#"Q)(;?NDO]YO,0OC[M!6B;D)C`+4%CH3>[I7%*M2OETD?HV%
-MDM'B<X[=17II1Y249T1-%AK!D6U@6Y)ESL9M^.Z\<#,BA=DSD/C`/0XW(TP2
-MMT9BL0L`'`$``!P!```"````10`!&%(J``!`$0``P*@!`<"H`0(!]`'T`00'
-MZ72:X0>4L:U2:.-U;(D[SF(N("0(`````@```/PA``#@%</4.[Q>-T@5@`P`
-M15Z0<97^6M-JQ'P7YIE+6_U%9IR\]$E,X\L(8<,91\S:2+OVI//'FEN#LLV[
-MKB15[&$]+%#`_GK-'MU1YS,A8#@JX3.M)N(^VJ6"<CPTCIN!__*1+G..NI+Z
-M1LTU@3).VC=:7L0,8\^QH71,(825/4]3HOD%KD"(]#'2+G+ZY0E*F&;PKPSM
-M`9C+9?V?D^J^,;@F8I8C]@`Z2^E+:^,!-"!#N]<C<'X4K?X+9?X?14=<>F2(
-MK/]*$(M#?/"."S<W:]ZZ;-HRAM<+3B]W_`?^K$P2MT8,O0L`_````/P````"
-M````10``^%(K``!`$0``P*@!`<"H`0(!]`'T`.0&R72:X0>4L:U2:.-U;(D[
-MSF(N("0(`````P```-PA``#`GHHRD9"NQ5\E;T:`.8Y8%T$"#KN&GXQBBFGW
-M"]"0[MD)LC(=.MTZ@B'M1JEZX)`<*32V*:JA2Y&]5B(Q4W`RPMC]J*6DO^]@
-MM$7[`CTR\S8U+`6Q.)8>:N\6<AHM21*?M6Y.ZKND>1/G9$^&/LC*(3)$-I&8
-M'YF*NG1@D`BIKGFC?RO+3X:XCBKZ%,DSA1;"WCD5PT<[X&+Y?MQS7BW9B_7]
-MJ49.BM"8NZ[A@D]WG9NVCR'D,`>>SR64#]Y,$K=&JL<+`&P```!L`````@``
-M`$4``&A2+```0!$``,"H`0'`J`$"`?0!]`!4!CETFN$'E+&M4FCC=6R).\YB
-M+B`D(`````(```!,*0``,%S+@^7%6^J5LB/['@$8334>K>D>8$DGP&7[JH];
-MC9_-Q@Y?3LXZH.@>@7XT3!*W1A+C"P!L````;`````(```!%``!H4BT``$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y=)KA!Y2QK5)HXW5LB3O.8BX@)"`````#````
-M3"D``##7#7"7P*8.<^J@JDB'V)TT'M2:Y9I0Y!?7*,C52*'JG.Z4//T4@``/
-M;OS=$TP2MT80_PL`/`$``#P!```"````10`!.%(N``!`$0``P*@!`<"H`0(!
-M]`'T`20'"72:X0>4L:U2:.-U;(D[SF(N("0(````!````1PA``$`K`&UH`T0
-ML/E;GCK[]6='^,@0/.&%-Z=\#H,V#R`.3Q\,PFX84)U=G_RBINZH07A8[@?T
-MH4`"9CGY+J+5WR+*9I&U+H3]UODE4$)%A(OV;<B!FC0YB0!`3*PQ`"#4X/G[
-M\N$W9[9BQ/TQ;XZU"\2%B,[P#(=G96:N(?7%4^2_X@EM>B$90)^8G<SCB<L'
-MGL6?X*:$B#09Q;:=1;$`O7OX="C%Q#5-#>F6#8W]L7#BM1'S["ON@.@+8F;+
-M7!=A[G64784*OH;-T-GC\*[DB_<E=5%7FJG?TB&Q74+968\&XJ#5@\^C3.`J
-M\SJFS!<NLUHH>SKYW`=P2!V!"7VR3!*W1M,+#``<`0``'`$```(```!%``$8
-M4B\``$`1``#`J`$!P*@!`@'T`?0!!`?I=)KA!Y2QK5)HXW5LB3O.8BX@)`@`
-M```%````_"$``.!ZFVE]PI:]S9OAMI(.F:)[?_`6O5=E.P>N1AZ<(OI!<21'
-M0Q0A4']E[&7Y+TR8FQ7PQ+MV.6B:/+=*^RW4>_RK(5:`RFF*4'-@ZP_U$2;O
-M'O&#X*85^CM:2W?5NV$CSUV@8VB(IGX2R!.?=-0T;"H8AJIXQJ=9_JCBY/6]
-M_T@4*M?66%Z?5EJ@HKZC?M4CLM9J,+YK&3;$9:+M]0`A#XI<9AV$VJ'I>@'K
-MD'7`>*;Q1VE3T^O5T)OF,R2@\#Q"OJ%JG[#EO8\FI@Z$I$P,,=;^,\HE>A:!
-M'`X.F]=P3!*W1@<;#`#L````[`````(```!%``#H4C```$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y=)KA!Y2QK5)HXW5LB3O.8BX@)"`````$````S"$``+#@)/';
-M4",<SH^PJ?AY38DC$WTG\Z^X_C\'<-IK\QN8](9VW[$?4OY/>TVN=H6)^'D^
-M83*1AH#[VQ*]T=.X)J]<D4%!G6JL9CBKJXK^5H+LH4TT"6.YT%FU14;T/W]%
-M7*PAH.@@0WPZO(DX5\\=-=LVZVP!:3$-N;2<_$0,U7!.L8H4$3FQC%`'V)<B
-MVOWER*Q=5$][JE.SY%U?XYSG3=P-W\VUQ=>K&$U>>P>83!*W1IX]#`#L````
-M[`````(```!%``#H4C$``$`1``#`J`$!P*@!`@'T`?0`U`:Y=)KA!Y2QK5)H
-MXW5LB3O.8BX@)"`````%````S"$``+#;F_++A1XD<6#8:^-HNS8!N1JK<S8R
-M2)--?D1E+(R^JFV#Y+^VUCP#D$REF@*"`YISK>P`OK*>__+BJ9CM*N>1C:XH
-MI$:^#\_K$T?Y,\J>T':8X5I(]8+%;S:!_&PBC@K&1>1A^FWAEPQ/DW%X$Y.L
-M?.0^74KR>!B,&*.`8H>MI2C^6A:=ZPI@4^D72I$Y:_NY@^G4\PP2^SI>)DCX
-ML.GV52KU7T1^9L".SX6D3!*W1LA;#``\`0``/`$```(```!%``$X4C(``$`1
-M``#`J`$!P*@!`@'T`?0!)`<)=)KA!Y2QK5)HXW5LB3O.8BX@)`@````&```!
-M'"$``0`_]5.-#P8/HX#\#C&Z;?OPW(E'M-2KL%.5GMVNW86A0:M.2MZ+R#^.
-M.YY[%)3YU$X8ORMI5G]T;F-SZI8=P"9)G8VRH5U;`N]"9P<?[E[(%HO/.!\2
-M__Y/7.R8/%$<]&+:)0HQA`@".Y/NP<-0\'^F:#NM>^W@WATTN=6R2VJ2*O\S
-M]M=="(M3*T7>`KR1[F@VFU:"12`2Q_UG_(T?!4G0[86*M:RQ;J0$W)>%DFY[
-M"N`CHG#B"<.":BM&K9H9YV@)J[DIL["&]<77R3?..I;Y7(L70^4E'H(;!J3+
-M+TY0#AC$YSX,1("BB[E5:JG6BMA^5W(>/)2ZE,CX3ZE,$K=&SV<,`!P!```<
-M`0```@```$4``1A2,P``0!$``,"H`0'`J`$"`?0!]`$$!^ETFN$'E+&M4FCC
-M=6R).\YB+B`D"`````<```#\(0``X(;O_!PP63A69;09!I1:"FVV$YJ7][$Y
-M`0G)DHK(=Y,W))UQ1]9!'I/D7,`QKA/<-R!;#K`]J\Y\Y.<-E:OLFIJH5T>C
-M63^0_"D@(PRX7HI?X$[0DYRB.HQ?AIML7<%[K35>[6#[A7EZ!35EE#DBDS3T
-M+-/G`CY7Q#1RC\#L>J4@K>D3!0@FDZ24!H1^U,:TO@3H/]FIZX\T/]QD8A5I
-M%"1X4(42%.E9K!3']C=IHK)GCC>)]U"07IE93)$JFY]WL0D'=__9ZL6PS7:5
-M:G;HENILS5ZINJ_Y[0\0`EY,$K=&27<,`.P```#L`````@```$4``.A2-```
-M0!$``,"H`0'`J`$"`?0!]`#4!KETFN$'E+&M4FCC=6R).\YB+B`D(`````8`
-M``#,(0``L`?>I5!ENL5F$C_[6$]7R,"<<?5@.J9#6E\DW:460I/2<O@%5OS^
-MU)A5@-8PXCI[OW#PDVW#/IT.D7-C0N*&`VN(F;EIZ0!]>*O),DUO31\*?NTR
-MWW?4-L,QEW*H+]@T/RKUW13SV-MRY&K@.\LTJ=\&$\0IM/W=."=BD#-[?JR*
-MG\U]YFR7.WP#\KTDGLKL5BNCDZRD"]'`.7M^!*5V_#X5.I,DU!'Y;M@&_;],
-M$K=&*9L,`.P```#L`````@```$4``.A2-0``0!$``,"H`0'`J`$"`?0!]`#4
-M!KETFN$'E+&M4FCC=6R).\YB+B`D(`````<```#,(0``L%(HDCC?=445[.JD
-ML7G'T>ZYC=-CQA[BS:A^-MFS:)\`#$$C)&UU2;)J&@H4YK,OU9/$\8'L.+_W
-ME5ZW%T9^P7;(?0J&,L8R8Q/JLQA)%QM5K?P14*R]($I_#$A,)'8X0WA#W&FU
-MQUL:F&=46OKHV\#!*%Y9>@8YSW;[65\W=M;IA>O,]UE'A>X#W.WNG-\SW=XB
-M`,?\@(EY$5T:.VQ%6Z)$1!O&:#=@R!2C(Q!,$K=&_\,,`(P!``",`0```@``
-M`$4``8A2.```0!$``,"H`0'`J`$"`?0!]`%T!UETFN$'E+&M4FCC=6R).\YB
-M+B`D"`````@```%L(0`!4)J2@SI,6.Q^,L/BA;#U2K2YNT6ULX_#V"<O7]!B
-M!(HN.0;;YU^5()KBKD6Y!)_T;"%*4*DMMK[_VA:Q$7($W&IQ8VL=%\ZR^]"$
-M/M'F1%[J/UBSA!#\"(ZNT9B],"MH7W],<,D4[[*W4.Y+!0N_-@"TW@:]O@^M
-M'*N,\JG$:70Q1,QZ]4K>FJU.D3G'76BI5!?@LK,_;ZH6<H84SAOKO4Y3YXZB
-MU/7"%"F`+%<6,4IPG!^."O=WW-.!XNUNUWQ*QZB#UA#Q/Z1$A^?^P.VOV!=&
-M3PU*_SJ&R>\BKJ[MA/H^0)JWHTSZUWZP%&U;))Y;8URP2)K+1HYD*>&M`T1W
-M<]A-O?A!'>XW$6J+5AD_XLG@PY!NIJ5-^^J9HX-_.NO'&N8\88.JXNU5?W\0
-M%99I>;>/AJ?Z$/O_GL?^*5==T.TA&B(,K0Q1"4?#^N6R3!*W1BCX#`!<`0``
-M7`$```(```!%``%84CD``$`1``#`J`$!P*@!`@'T`?0!1`<I=)KA!Y2QK5)H
-MXW5LB3O.8BX@)"`````(```!/"$``2!.\>`*!SQ1-E:*7;!)3?\?7K&#V`9H
-M&T&/E4X03Q1`.]?,<!B/'88*'ISLANNCF9YL2@T4-D>H2)Z\"#/>=01V?N[J
-MH/G"[JE<WDO!<YJ7A?WJ$SJ4S]5LP_:6*4WI)U46`2H)ZL$=#'2WWZ"9Z`?V
-MUU;FVC"J.,N?L6F$#0%=0-]*CO(#T;WUA15`<1`064ZMU';87#EB0J`@^1-L
-M]>F?.KQ5M__)H4,"AQWM_N]S"H_)KM9Q.$45X=B!_R2C?]`*#D1L9(5'H]^;
-MHNW99*%2!_,+FMBV)ER!A^-4^ZP,1/W][^11Y,*'G\0N@#[&H/S7-:-%S1SJ
-MV_*A7P'+4RBMTZGQQVV'A-J7V9E\APO5:"2AVG0Z&T>Q_SS"OTP2MT8_(`T`
-M?````'P````"````10``>%(Z``!`$0``P*@!`<"H`0(!]`'T`&0&204=V.3\
-M4I"PKZ88QZ]U!+0N("4(`````````%PJ``!``F(`\R:3'AJ$J`5J`.BZZY';
-M[J^-?\Q!HW%Z%,HX_=QEL8*'/2<URX-1&S0[]MD(WK8:0+(;9X3"4.=?3!*W
-M1H0K#0!L````;`````(```!%``!H4CL``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-M!1W8Y/Q2D+"OIAC'KW4$M"X@)2``````````3````#"*'LG*?X]XWH*8PWB<
-M=[;['\TAOV=R.NS&YT[Z#C'/N96)MKHIVP_4(,,\>$P2MT8_/`T`;````&P`
-M```"````10``:%(]``!`$0``P*@!`<"H`0(!]`'T`%0&.04=V.3\4I"PKZ88
-MQZ]U!+0N("4(`````0```$PJ```P#VZ8<<./(O2O<O`$\C=\./(N!#Y_%Q"Z
-M35WQE2&4&Q!+20'1UXH3+*/IGA],$K=&D4D-`&P```!L`````@```$4``&A2
-M/@``0!$``,"H`0'`J`$"`?0!]`!4!CD%'=CD_%*0L*^F&,>O=02T+B`E(```
-M``$```!,````,`D5O^RMFTW7GOH^B'?QTY7P-\!)Q`D@IIH`F7/I7!C&T38-
-M$0.A<#D-*66&3!*W1FA'#@"8`0``F`$```(```!%``&44C\``$`1``#`J`$!
-MP*@!`@'T`?0!@`=EM3U8;BIC=]\``````````"$@(@@````````!>"("`'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``R36]K.U%1U&J[LR4
-MXASC$&99,1(EQRS\YG)V\?;]07M=KIFN38M33M1>)27TTV3VRP=0&BZ=M](X
-M+/"6*8'`&_'FTUEZ7Y3%:4OX[FJ1178P>3+4`-R!`"Y;O0GU6GK4=<GX1P#/
-M8+M"@_CN^_R=P.#RS!B/W:V`GDJU0]K=+^8I```D'.[29(]K6J>]L/VDO#4_
-MG*&2:V(I.7V=EM8\I'EX*>`I```<``!`!$74X0G;$2F$-Q$$'FR'RP3W$09^
-M````'```0`7N+KV=L.H-V;N#N+GQRYB]D=%_6$P2MT9M5@X`7````%P````"
-M````10``6%)```!`$0``P*@!`<"H`0(!]`'T`$0&*;4]6&XJ8W??````````
-M```I("(@`````````#P````@``!`!@````&,,&F_N="[R4)/G/'9ZMM_+?R\
-M]TP2MT;79@X`N`$``+@!```"````10`!M%)!``!`$0``P*@!`<"H`0(!]`'T
-M`:`'A;4]6&XJ8W??```````````I("((`````````9@A```@``!`!@````&,
-M,&F_N="[R4)/G/'9ZMM_+?R\]R(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``R36]K.U%1U&J[LR4XASC$&99,1(EQRS\YG)V\?;]07M=
-MKIFN38M33M1>)27TTV3VRP=0&BZ=M](X+/"6*8'`&_'FTUEZ7Y3%:4OX[FJ1
-M178P>3+4`-R!`"Y;O0GU6GK4=<GX1P#/8+M"@_CN^_R=P.#RS!B/W:V`GDJU
-M0]K=+^8I```D'.[29(]K6J>]L/VDO#4_G*&2:V(I.7V=EM8\I'EX*>`I```<
-M``!`!$74X0G;$2F$-Q$$'FR'RP3W$09^````'```0`7N+KV=L.H-V;N#N+GQ
-MRYB]D=%_6$P2MT:(BPX`4`$``%`!```"````10`!3%)"``!`$0``P*@!`<"H
-M`0(!]`'T`3@'';4]6&XJ8W??6W&-\QFR04\A("(@`````````3`B```P````
-M+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(
-M``(``+XOOGUZQ4+BNZ5,<(9+*3EOJ/MWK^GK"HE&-ZC?T:<YAP3SRK#P[`DN
-M$Z*+3:G)U=4Z'`A`L>V:+MJQG3SB*BG1AG0DM/I/B,-"3LVFQ7LO538.=?V:
-M6_;M8ZBK.CXR*'UN+AXVB;TW,("XE(86))@DC1VNB'D]98F93^59@/I3*0``
-M))?OTJJP%+\XB=U[\DF_.4(^@1DV<5HS1!]!_WUYAG9I*0``'```0`3#\<3+
-M+T<>F-WM\4+<,5Z:":UW2P```!P``$`%EP6RHOL#[@)2F6B7(:IM`Z39FC],
-M$K=&4;D.``P!```,`0```@```$4``0A20P``0!$``,"H`0'`J`$"`?0!]`#T
-M!]FU/5AN*F-WWUMQC?,9LD%/+B`C"`````$```#L(P``T&#(H=2:_SV)FD,E
-MQH3=]ID#AV&SV:L,/:B%K6N@^7Q>EM8879?`6E8*%O'$!*6:FIR/02D:_Z-)
-M:\^L%Z(BXR]BHCAO+VL623W9YLEP.TS%A;"!HY6^CR_DS]]O!SJP!1,59/+Y
-M^O!NPP$1C$8#5[Z$UEDB(V%]YV*`9&N+UI3J!&EYVIB^\!.-3+>I=[GA0/'+
-M%Y`&EX^\MJR+_LL$I#1N63KS-<%6P+X2M=03VUK^V#@M2"WFJ?@EP5-<4.GS
-ML=;,"!,L8EY*;;BS8$P2MT8,T@X`O````+P````"````10``N%)$``!`$0``
-MP*@!`<"H`0(!]`'T`*0&B;4]6&XJ8W??6W&-\QFR04\N(",@`````0```)PD
-M``"`WV;2Z)<!PH<7"8!LP<G>>V^DPFF5<\/;>CR]XN>S&,HM=/Q#YC`H!I9N
-M.35%^C+6EYG8>J[IM)R7P!I`B@&_0UP#G:K&WWK#6!ZT=8\ZG[JYI+DI?]Y`
-M/W)9>CV+22S"-D_%G7ZXNU/!02>A]'V)T&&]WX<2G^H5]?.4CTP2MT:(\@X`
-M'`$``!P!```"````10`!&%)%``!`$0``P*@!`<"H`0(!]`'T`00'Z;4]6&XJ
-M8W??6W&-\QFR04\N("0(`````@```/PA``#@]LUL4#2#X5WU.J:ONQ&248,M
-M3I$Z$QGB4$8^F/[ZFB53!YOAH_?E;.ON*BNG/0CX[IO<N>9'X0Y7U@F?NL56
-M"R6ZQD95.0QK/[`^'R@1Z:N3<^/OX;EEC3$=L7@^)`<5K"_IQ4^WRMLT00;=
-MO0#]_D!!FURXU(TJ9"MSA9?3<*H</=:XSJ3$`7[MA:A-3!U0`.5R3BP"_YB;
-M\O6C=QJ-(TA^T/IK3/>_09HU8)@U:5<@OQ2D\Q:CH^Q]MN`W"M%;51[)!;1:
-M9Q)=62GRN?<F9DKW<]F:(]-I4LGPATP2MT9)_@X`_````/P````"````10``
-M^%)&``!`$0``P*@!`<"H`0(!]`'T`.0&R;4]6&XJ8W??6W&-\QFR04\N("0(
-M`````P```-PA``#`41"W8A1AO@%H0&1`A_C_<@Z.,VQK7CJU@%_!\R=1+U[]
-MJ>K+J(JN*Z?2_5HE'&$OH.O,-4[LB/75QA5UUKEGV]Q&F?SW%6/*P4&"//8G
-M_>TX:VF&Z&'XGJ$SJ7X$6SLS;+J)G2OUWE:D9`PHQ;S<:LQ.23I6$L_GCZC>
-MYX0*<[#R(O?;`56K.YJ^`]GWP`ON5JB\]]4O$$YPX<_RN[@REX&S,"P6^HKR
-M'`!HK9;I/PI8TPCAAAAKE<B&251,$K=&#PH/`&P```!L`````@```$4``&A2
-M2```0!$``,"H`0'`J`$"`?0!]`!4!CFU/5AN*F-WWUMQC?,9LD%/+B`D(```
-M``(```!,*0``,`<^;T^M9W2/%^!%[J@$LQT_AT,CGO-*,'<:MKW>T"?5CJ:F
-MKY%*\%S_BEQ&3!*W1A(G#P!L````;`````(```!%``!H4DH``$`1``#`J`$!
-MP*@!`@'T`?0`5`8YM3U8;BIC=]];<8WS&;)!3RX@)"`````#````3"D``#`&
-M!/92$7;H$88M$?*B>Y^N[`2PULB[IV`#R06USHWT0%/C=/W#C/T%V_"^WTT2
-MMT9]`0``/`$``#P!```"````10`!.%)+``!`$0``P*@!`<"H`0(!]`'T`20'
-M";4]6&XJ8W??6W&-\QFR04\N("0(````!````1PA``$`S5U5VP)VU:^P"?3]
-M2L]@&?`>9PBAPD%U&X49$'Z4*GH.ITBA%.*F$EJ0=%N&*(MGJ[+_PHQIDL,Y
-M*ZANJPVS!$JSWUP%(I.''?]!A7.C['&(9ZB>O(.=&'[)-!O)3S:M-M.L,W=J
-M61.C_FA![2Y]?;#*?CNEH6\%&I.9N>H_X>L@.9([DS=I`G,QW(G0:4R_[%<=
-MATUUK_8]/5>J:V>=+2R2R_4<:-D`<J,7!-G7;8V'QR6I%@WOL8;*"WM&L-GQ
-M7I[ELB\2,Q3N_6BY]7J&9#'GHQZ4!7S)\11<+FP95,J:7IBC9F_&JS!'HX1G
-M3WWNF%`HN$V0]T$.,\GT31*W1LH=``#L````[`````(```!%``#H4DP``$`1
-M``#`J`$!P*@!`@'T`?0`U`:YM3U8;BIC=]];<8WS&;)!3RX@)"`````$````
-MS"$``+"/]SY.6U2>!:PZ#!/)>YBLRQU:V`98)XD6!*FA>;QQM>6T%-C28-13
-M_S0&M\;^-(ME.YAH.`,.[^E%)!2>)*0=Z*^N+PUN_]E^SE9)#2[&:7+=E:VN
-M7.K5(FXV<61US5;/PX)2(HL.9M@AF9B6I.[!RM*=^.R0"2QO6F=Z%K)Y[-:Y
-M".I]D6#F*7L%Y-O>/ST,L7:E_!WJ9[H^SL>-MXR&UP"."/VTBBU//ZG531*W
-M1@(>```<`0``'`$```(```!%``$84DT``$`1``#`J`$!P*@!`@'T`?0!!`?I
-MM3U8;BIC=]];<8WS&;)!3RX@)`@````%````_"$``.!8SP3O*;(-36/J_26X
-M,X4+."":F^SI?MN15.W\R?,1!,S`[(/,<1LXS"N'[&%9XB270;H:\$4LOVMP
-M^B1[EN)!%M<[*)6&&'E^:^,7>5`Q?Z'=[59Y:R=NG#"'4I)ZDQEA`BA5*O%'
-M>+5?I3</"BA/B/Y<&AT!3#^Z%5I5[U^P@^;]LV$-B$LT>%'9>8YI9$8$:7\H
-M:JE`NHD1%&[%.UQ<7V3!$#)<"/G</[>!PQNT]2MW8OI@\&!.C[I/1>1^FX\+
-M&8<R97@*D_++33?/#Y]"3E\@/WY52>W0OPJ"31*W1D]"``#L````[`````(`
-M``!%``#H4DX``$`1``#`J`$!P*@!`@'T`?0`U`:YM3U8;BIC=]];<8WS&;)!
-M3RX@)"`````%````S"$``+`&CLT>@\C9=%RG4U8.L1[PPSGLSK+)G'$*I#./
-M`28:/>[ID'W<QJXO%W(4S<7#>]\1$<WQ2P+AU3%2DL5/"5?C3]W.Q[9D*Q65
-MZ\@CC$I/Z`"),YA;?K^SB.%BRTN:VSBMTAH/L+SCEOP*`.+*$@4M4Y1WU[&?
-M[L%C?1:WI947#>P#)*>G2HOIWVP\'W&>P`?T`^%:Y&6]=MW:V8;=*JV77^O&
-M@)ZGL?U4&<_631*W1E)A```\`0``/`$```(```!%``$X4E```$`1``#`J`$!
-MP*@!`@'T`?0!)`<)M3U8;BIC=]];<8WS&;)!3RX@)`@````&```!'"$``0!$
-M&0G$4OAA]*F7VSA8+INMB#@Z+,^F8@]14!@K>\9^42V-.>`X(6JM`M=3P[]_
-M\ZNST:>E(9+,?SBFM:1F+8]S"VQ5*_`]P$55\TA]BYN,S[U`5#4JEN8+1),W
-M:U?=GO>HSU>L9A^2X;,Y%FKV+N4.]0\BO(X;>>=,0U&OC,_JHC%DOC\W+#4@
-MYP*%X;\Q9B)*,DYQ:9ZY+N,7\K(%=\GQ0OD.GO>+9=G^3)'6BP;*B/(K/!W'
-MCPLNKN1/QY(X<ZAY'184UHTPD+V,N%4IN3#:\.^+.[F$;J93C1[GA@;PHX)1
-M-3$2)/XM$OGBL%)\/IVH<A+&>]U:RW=Z=:!-$K=&K&T``!P!```<`0```@``
-M`$4``1A240``0!$``,"H`0'`J`$"`?0!]`$$!^FU/5AN*F-WWUMQC?,9LD%/
-M+B`D"`````<```#\(0``X-'HW'\O=E\\C#4NA4"RG?!A-4Q::<`%P05`@R]X
-MAZ/8YDI;X[YJX4E#BS01Z*-1-V8MQ6:+6Z-&%9GUU;"#M9$7[MJ_OE*@"Q]C
-M%,C3>)6JPI=-\5E\QT]M^[;XC'NF.M).3M0^:7!`PE[*OQT5/6_V`>&>[TEE
-MOR$D#T-W!_2J>;R9^PER#FCHN(45Q"_W!QR:U*<.7+_,W')'J@E9/D4RJP<^
-MB\Z(ZC+G([`:?LR+&'W-=>"NFD^Q8"\A9*`__'>O!^AV?*\>$)9@S*LR7MO(
-M:"@\/9`]4!\^H^--$K=&"'T``.P```#L`````@```$4``.A24@``0!$``,"H
-M`0'`J`$"`?0!]`#4!KFU/5AN*F-WWUMQC?,9LD%/+B`D(`````8```#,(0``
-ML`]Z"P5`@S.?\^1+3'D8+>2/EK;255FVVV1]+)TW,6RC97ONE81S<?D-A;(V
-M=<0)%9`9O*X4HXVM'3S)_6BK!.!XOG0']EL5(78E^\9+D>[,8V8/.B\1*%&+
-MQQ05U;65%/TC$G`S36WE%HM)/'@DK2X5_6>0\4[9>Y+4W0MWIG1?VL2O.`K)
-M\N&!P0TE5PJ5<L*-C'%%P?>"5/*:.M@H&7^F*(#E!>]324:+_ZA-$K=&`*``
-M`.P```#L`````@```$4``.A24P``0!$``,"H`0'`J`$"`?0!]`#4!KFU/5AN
-M*F-WWUMQC?,9LD%/+B`D(`````<```#,(0``L-Y&2:"W1KOJ=XC4WSS^9TCL
-ML+JD7Q)H`+L87]RFJH#)K.W]@IPE^KUR3][G4RKX8V)1H)P<IR*L0@4_9!R3
-M3_.DXVZH[9SUPKXV3/:4K4C/AA'X']9U6(/DBE1K#M,]^'@5>%&BEJD//DO7
-M]$/#,)5N;R0LT-V7NSS[1YG9J%=.]W6>AX^4M<SB8J*:+-2_@MO^?A"RG<::
-M]H9$FHC6B`WI^>%\C)EOCOO8Q?5-$K=&Z<<``(P!``",`0```@```$4``8A2
-M5```0!$``,"H`0'`J`$"`?0!]`%T!UFU/5AN*F-WWUMQC?,9LD%/+B`D"```
-M``@```%L(0`!4+I)DMIF(L@S\]$8QDZJR.FP4#)S/I6EVUUA;<,SZXCQOYV,
-M1I75U%,+7P,!R"'%#3HW'!M'#C[UD4C6/V:#CN^_!B>)H:XMW\`I1%,>S_OA
-M7P/(&R`4J"UK7S9/IAK`/"5F8R)67^R)+NIKU$1=??&?QRTBMJ=WC8]_([>7
-MX9>$<0XX?^*G=U@0F[.&V@1>D?;!?PHSH8=.CT$^0F6UMW"K0[EN"?H)-X$.
-M3DMFJ"4Y6T>H+_4,36KN,T@X_"^DH,?;MWJY2[(ATM>QS4)+3)_.AIQ*PAR\
-M"*58().Q]Z[:EW/PNN]DRZMG2?C?`JK8875MWGMJ,I0CRCUC/UZ6CERMK0L&
-M*8!-X3=MO`U&'J72S[7D9^X\'AHA_4NJ&-+WL)!I.GS(=)`')5"@S5Z]=Y(L
-M5?H0$S_C@^"I8+7+>&)_D!U\^L=.6<+W)\DY31*W1I[]``!<`0``7`$```(`
-M``!%``%84E4``$`1``#`J`$!P*@!`@'T`?0!1`<IM3U8;BIC=]];<8WS&;)!
-M3RX@)"`````(```!/"$``2"6(>(C#D%H/2:Z?0&B7N$YJC)$TCWGRVPWK-#?
-MT$F(A51LZ_6[Z>O,)S52ZX[Q_BEDTBPE*+H)J1L1S^(J$3\):42J.46'-K3$
-M!Z,4L+T3:0$UB-WJI58'4TM`!)#J[/ZF(.PXHP]`T.L5G3'(S<>UM%SXW4T!
-M#Z.-":9G9@]NPLT<FX@OW7;9=,<)_41V3]YM@%#58+*X3]]#G$/W*9LEBL'R
-M1O9S;XS.WF?)A&(XP@&@#63F4B#N],X<'B97TT\TC4,P8A]1+:;T,_9-G@IK
-MY2_J3N99IG.(TNV!"`:JXI4<^:D*TOE^B9=`RMDP9%^+>/4M@3!M8W)))-(N
-MZ"(>%EC<I+%(/ZKLSCH1CW^UH:*'R<:*SK".2,@OHTT2MT8!)P$`?````'P`
-M```"````10``>%)6``!`$0``P*@!`<"H`0(!]`'T`&0&24-7N-=2M4[IHZ@6
-M`@`P?#4N("4(`````````%PJ``!`,QV,YPTGZ,35(*T<%`;1;>W[9Q8\TRU<
-MH&2R<]`0LQ^*280_!1[6AWJ`5(_Z#3^TKU<`X]ZG`%F`TPGZ31*W1J8R`0!L
-M````;`````(```!%``!H4E<``$`1``#`J`$!P*@!`@'T`?0`5`8Y0U>XUU*U
-M3NFCJ!8"`#!\-2X@)2``````````3````##!A6U)77&6S77RL\..SU$BVPZ)
-MV-Z?/7@J+;@E+SHM':@8[0B)W`_P$8?54$T2MT:900$`;````&P````"````
-M10``:%)8``!`$0``P*@!`<"H`0(!]`'T`%0&.4-7N-=2M4[IHZ@6`@`P?#4N
-M("4(`````0```$PJ```P0RQ,=G)J$&N/"X8)L/Z0C1PMTG:U)B03EPP!AD,S
-MB]`=,/*H$!5,WT:$:@9-$K=&:TX!`&P```!L`````@```$4``&A260``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CE#5[C74K5.Z:.H%@(`,'PU+B`E(`````$```!,
-M````,&-U@*_"`37$[VAWL`[:\51?'1?K!(>(:+,5GQ-'G;H&O)%K`Z+&\.!Y
-M[O"B31*W1IU+`@"8`0``F`$```(```!%``&44EH``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E#>I>T#XBO.X``````````"$@(@@````````!>"(#`'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``&ILD]&V_,:'QD%?VT!CX`J6&
-MA30T6N11L"K>50J57U!DQR(2DLRN&Q0'0,Q-192EFS9^RX\82QY4%Q_QY0IS
-M=Z6:(.O'VSYH*T<B$!450X?C&LQ]4-LUP_$`64%7XC38"RG4NB@>JMY"KY`K
-MN*,%IR;OSZ..C-G:R$G<MP<QH2@I```D$<+9D+)1BGPJ('INWDA9>2[A2W=B
-M9`N8=V*)V#V1`U(I```<``!`!#&4^QOIR<(R`",-1!3.7=0HR<QJ````'```
-M0`681<H,`3<W"*+[PCAZN]'O;#\N]DT2MT9H6@(`7````%P````"````10``
-M6%);``!`$0``P*@!`<"H`0(!]`'T`$0&*0WJ7M`^(KSN```````````I("(@
-M`````````#P````@``!`!@````&5TA9PHOT"JAQB;2J1O)^5"IBWETT2MT:]
-M:P(`N`$``+@!```"````10`!M%)<``!`$0``P*@!`<"H`0(!]`'T`:`'A0WJ
-M7M`^(KSN```````````I("((`````````9@A```@``!`!@````&5TA9PHOT"
-MJAQB;2J1O)^5"IBWER(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``&ILD]&V_,:'QD%?VT!CX`J6&A30T6N11L"K>50J57U!DQR(2DLRN
-M&Q0'0,Q-192EFS9^RX\82QY4%Q_QY0IS=Z6:(.O'VSYH*T<B$!450X?C&LQ]
-M4-LUP_$`64%7XC38"RG4NB@>JMY"KY`KN*,%IR;OSZ..C-G:R$G<MP<QH2@I
-M```D$<+9D+)1BGPJ('INWDA9>2[A2W=B9`N8=V*)V#V1`U(I```<``!`!#&4
-M^QOIR<(R`",-1!3.7=0HR<QJ````'```0`681<H,`3<W"*+[PCAZN]'O;#\N
-M]DT2MT;&CP(`4`$``%`!```"````10`!3%)=``!`$0``P*@!`<"H`0(!]`'T
-M`3@''0WJ7M`^(KSNT*3(I8U(\P@A("(@`````````3`B```P````+`$!``0#
-M```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``"UC
-MLEBO)16\UM&9^;J(JP2`VCN*"Y[VB\<&JE[N*'*'&5:.;"HRNS/>C2AOF"M!
-M!/K4@->O?GNF,:"\6CL=QSA(`]BV*RRG:EIUD--`V2D-:K!Y5Z/VXCO<*BLQ
-MW18-G,`=&`3`J4-D3E@HAA3UC#T;DD@3Q>L<%C3&VVK$JK;S*0``)/1":?U*
-M-N>`7!WB6VD8Z6#6@K+&G'`.J&"%=R(JU@7`*0``'```0`1N:.BR.P1*IGU:
-M[5!!#&^+H\5N10```!P``$`%SG."O/DLD8$S>4;/O_L7U@_#!9U-$K=&KKX"
-M``P!```,`0```@```$4``0A28```0!$``,"H`0'`J`$"`?0!]`#T!]D-ZE[0
-M/B*\[M"DR*6-2/,(+B`C"`````$```#L(P``T(R3NG/X%8?(AD^'3US-SK_<
-MU>3A6^59JT?IQ8"C(<&%N[]LYWWYE81RH=*?@[AV.*",`S-OMO<5C!BBK"SI
-MXDJ\B1$0HRB-"&Q8W+<__5:V^8582<>4C88GQ!","D4D#[T<\L@-LC!-&'ZZ
-M<K4^<N%(5JR5T;L*(TG_^_%-B8;&?S/Y03MIL1C_U3_-2QK)YC:C%(_7D-G#
-M;5<X890';H]B!S4?@M:P?`S*!M#"$D?C18#M[-'W*"AY'<+&IENRU34N!`H5
-M4"\=\4*#0TT2MT;5V`(`O````+P````"````10``N%)A``!`$0``P*@!`<"H
-M`0(!]`'T`*0&B0WJ7M`^(KSNT*3(I8U(\P@N(",@`````0```)PD``"`[%W_
-M:)Q";_G%MO$=(D;__E33:.$7FL\Y?ZK;(7"1J(DE9_JT?T)=V?4`0R&G;/M9
-MH2(Q43>)0^#[):<O'WZ\1EF,I9$S'=QABO[U(^QJW^,9!XQ!5KS\?-\[I!X3
-M'CKQ_HHYUF/=AV$PU?$D,QU0[XL"FO8PQ8WM$:M`4TT2MT:%^`(`'`$``!P!
-M```"````10`!&%)B``!`$0``P*@!`<"H`0(!]`'T`00'Z0WJ7M`^(KSNT*3(
-MI8U(\P@N("0(`````@```/PA``#@T7*M><!&A>K5$"9+P=]2U7H/9ZV"<ESI
-MDF^C2B^L$[EV3N2BOJO4Y?ZS.5DDX/Z470_D.NL`Y_;[-X\&&W.^WGLZ14ZW
-M@U^6O;]#_BU_.J.)4*8(3!];2?C%M`5G0I9X0OM-.(.FOFWH\9!ENIX/>!OR
-M'2@*=E"63^/,Q@>LOD6<DR_X%QBRN$H3VLJXF8H^#4.7TAC[_44][G>/<O@&
-M[^?_TV$-&1).,+3`^Z_'B58(X4SO2>=)E$#\O%ZF*-?-"U'\2096`4I&,^?_
-MPO)0D7"'YJRWC1("Y_<',$T2MT9V!`,`_````/P````"````10``^%)C``!`
-M$0``P*@!`<"H`0(!]`'T`.0&R0WJ7M`^(KSNT*3(I8U(\P@N("0(`````P``
-M`-PA``#`80FF8'G;JI)C^K"^6GH`IF6,3PH9+XN1C#GU?U-FYVB+J2)_1X+^
-M(<<EUR%4+#X+Z2X;)09E[&_V<6GP4>*K5>:WOP9!XVR4=BBUEA)'6.:%+R?M
-M2#VJ&=)=E<EH7E,76L(=.!YI3UIH?%!WXB4T2^TN17?'^=0U7![A)'M&G1">
-M&0JZ!#4FL\Q]SY`1D4-+5&M3PD<I#8!G:95,&SQ`88BF1GZ*[3&6B?Z:EWLY
-M1$EYLWTBW""CW.-:/AM-$K=&5P\#`&P```!L`````@```$4``&A29```0!$`
-M`,"H`0'`J`$"`?0!]`!4!CD-ZE[0/B*\[M"DR*6-2/,(+B`D(`````(```!,
-M*0``,`U\)&ACG<SG;^``4"#-?-0!(6%2U_1;T_9:R6JX-4*CK"+F(IN!]4@A
-MC/PC31*W1@@L`P!L````;`````(```!%``!H4F4``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y#>I>T#XBO.[0I,BEC4CS""X@)"`````#````3"D``#"H/T16J1)M
-M4V0,@`./OWA!K4.#GYP\Y1'5L0D%!U;A!V+%Y/25#N,\]U.D]DT2MT:?1P,`
-M/`$``#P!```"````10`!.%)F``!`$0``P*@!`<"H`0(!]`'T`20'"0WJ7M`^
-M(KSNT*3(I8U(\P@N("0(````!````1PA``$`MK[#N5_`LL%3<9>BIN453QWB
-MTF="L_!WKY0ITR^SK50(G&G\V8I?"=+8PIBG5,:7A8Q""NHZ<82`V2XP%+<:
-MK.`>X1+.3HZ3U4J^J9O#-*QCJ1$\<4AVY]SAV:'YI6N`V(D6$LMGPETYT/TH
-M<^'S9,/#D0"6CT(2NG(5R]Y<.%5NR+'FN9BZQ+!"0VX\D->.BNKGMX7B]4C[
-MI,5[L/I@/8HE,J"\=E;A-9@N`@96N]:9EOQ+<V5G@ER0RF[R'1Q>XWHC;G&`
-MEAPRLGKFE_)[B?@.XUAS>8`!8H!C;\D340JY_'[_A/&_C&!V%S`J)3<.A*`V
-M6M7GKXZB,U]=31*W1H)4`P`<`0``'`$```(```!%``$84F<``$`1``#`J`$!
-MP*@!`@'T`?0!!`?I#>I>T#XBO.[0I,BEC4CS""X@)`@````%````_"$``.",
-MI%,W<5D!3AVO-KMDI%X8=AYLL\\5Q,/N\J+2A=8*ZV^Z"%?B$_5ZO[<QEKW'
-M=I_KFA/,G,^\$10!2S8&R2`='8G;($-H4R'LY-VI"\`!!C8D@4LU?A4,S6P5
-MC-26&H-'6#B:*+WIPLVIJ#[&9+GU@THG!P:DA#4OL,5B-^[DJFU"SC4Y^`S)
-MP1:1.UNZVJ8,WU,^"V9#T`[[_1R8N*!\6.K?R&T[$`U'4;VQDO-F[^!+*B9'
-MN=MIM[H/#GQ=EGV!$^IUDT%"/1!1XWS:H>0QO:`#U-8$FV$B-?AP31*W1N]C
-M`P#L````[`````(```!%``#H4F@``$`1``#`J`$!P*@!`@'T`?0`U`:Y#>I>
-MT#XBO.[0I,BEC4CS""X@)"`````$````S"$``+"DPO=YKJ\DIOV>0><;K-P(
-M*J?'#/I\;FK\3O>419^[\(-5X6P_792Y6)3[9?LBSSP-.X7(/CT6>G&#BW`3
-M!C.$534-:5P*6]L:`^7@5$O%B%NHX#@H2SZD9"DAZJO4ZFC;2IYPQCLRP?S*
-MOFRXZ[Q+)7)T8_]="VH"X3<P.7@>3\4HG';^#BGHBWE&9]4[)TG-?)UCJL5#
-M\0#'"LAK^^7H%M1H]RV<2CFOA=W.31*W1@:*`P#L````[`````(```!%``#H
-M4FL``$`1``#`J`$!P*@!`@'T`?0`U`:Y#>I>T#XBO.[0I,BEC4CS""X@)"``
-M```%````S"$``+#VMCY6>)L#,B?$KMIWRO1=U<6=>E7"K6L@E<8&,H4&'U'+
-M,>E?</4_C6E-@&JRH=:265/3M?'`CR//T?7&]8G''*]+!*4T<%J'NW.K&0[6
-M^0D;B<905D$5C3V9&ZA;'5S+_:3H&NIUP#"\02<`4JK96&/JL%G/V#T!T+:,
-MMIZ1*1'@SC;PFQ-Z`^&'@CI`<[GJ^N??QN]WB^Z;E\`!YNE>=L/BPE<$&L@2
-M1XJ)31*W1O^G`P`\`0``/`$```(```!%``$X4FP``$`1``#`J`$!P*@!`@'T
-M`?0!)`<)#>I>T#XBO.[0I,BEC4CS""X@)`@````&```!'"$``0!5C<NMB*1K
-M`^INOBPY"QCYMX_1P6?EO&J>*2-0*<&;PY$_2V;9?LI`53Q[3U$0T_`#S)Z*
-M8W6,;W^LKK+G5L#V3O.!--C`F,D`0BQ-^Z7X"1^`H.[>R"A=T_>MO:(*`0Z!
-M6&$B5-WZ1&KI]=>-J[[H&YD`O!K8:=OV]TP+%'3V"#H+-7<9E><OQ4US9!:=
-MTB/"X]?R\AX6?_E@[=:P#C;#6X6KP4/ZL`@I%D*\/@"O7@)`@<V*\:UKU-\B
-MV$LD9IYJTI1^+JM"O[#::;1":HL?*(M]KF9)3;!JD6J/J;QEK,WQ&(!+8JJ5
-MKG<@P?G-1_F?=T/V4`W"LX22^@E-$K=&O;4#`!P!```<`0```@```$4``1A2
-M;0``0!$``,"H`0'`J`$"`?0!]`$$!^D-ZE[0/B*\[M"DR*6-2/,(+B`D"```
-M``<```#\(0``X(;`OX7+\K'P?HX6Q7^;!4SU(8FVT!?<F-5+]?K*'"9;/[H_
-M0.`\NOO1X+PXC)TQ0X';F"A)"8&F91HA*W-V\SUO#3?F_VUV]2;#3;L@[.NA
-MQ=YD9JR^F#<[\4!PEKZ<N.'H@RB_&!Q-VRSPQ>!5B<9@AUBG(DSXJ@GH^X3>
-M$ICOS8(1C+O[@Q&*\S)6!5/A1#DZ0IDW9Y09_F)/E.8!OF^V9FME'B3R)VC$
-M"="YN]`M!OI%8SI9#S-184TVK3!V'SC\R+L"VAA("(F1=M,*>6SOP3I3TBXD
-MY0<S=5Q-$K=&,<4#`.P```#L`````@```$4``.A2;@``0!$``,"H`0'`J`$"
-M`?0!]`#4!KD-ZE[0/B*\[M"DR*6-2/,(+B`D(`````8```#,(0``L$"PN;E[
-M=E%M$C!??#I6PDO]);!>I3F>"<WF5BG>'\OG99NUU.R,J+;TDZK(_Y6"<H@9
-MYSL1Q+_%2,#8M:[MRP!N:Q.`N3;&BPM-[0?)^@YY7H;Z02MH5VX`4Z+D4_,)
-M6%P`Y+DSIQYO>;\,H790*\THC(#B2C+-;T<(U.Y##)SZRM[MTSID'`,HZ7P5
-M[=E.!J*=NUYT>"_#[4@8C%JRE8A>`811W?_;60`^.^Y-$K=&->@#`.P```#L
-M`````@```$4``.A2;P``0!$``,"H`0'`J`$"`?0!]`#4!KD-ZE[0/B*\[M"D
-MR*6-2/,(+B`D(`````<```#,(0``L'G/V(AV<:@B?_FZ,$(U7EP"F9>$(+EH
-MUBW``<6O(/'J20];AF"NH?HRU_I8?"I(5*#[QR?FCX3WL%]_6K7W-QK75$Q"
-MT=VP3=2]UN3V2>8V2=`UW_T)968)A3;NTZ;J\*U\;]'*W&<.?_58E^S/5\8\
-M:<,:OR7OVU]._B.71I!)DH`\+1R5'9%UM"R/$-E243/@S[Y(#+I_K2Q,?%W+
-M^='PK8=0*2X+_CE?I,]-$K=&=`\$`(P!``",`0```@```$4``8A2<```0!$`
-M`,"H`0'`J`$"`?0!]`%T!UD-ZE[0/B*\[M"DR*6-2/,(+B`D"`````@```%L
-M(0`!4,I.Z+8*I\[&J*14$X%;)Q>Q3QSVD4:?Y65/2FB)]\"`PV[3H(8'-@>M
-ME=2R)K+B0H@\X)4EG9=,D%)!2_1SQ8$=Y^7?B"M+-GUUP-M0;4$H#ALK#/ZH
-MPD7V5'GMX>_*1;;!;?8[3LW;"#R&1A*\`!/8;7#X6XI2+;@W*]4]@:'$<OQ5
-MQ^E%W%=NK+_%@G)*Q3\'I.*S,MV#-S-@=E**NQ3GYS(&.AP=V$2Y+I/A,-IT
-M'&0`T-3FAN)"JA[('>_AP"L<^=.:7MC<"0RM970TE]YGY42`<44980$)DJVN
-MCQOAPI*<6A6)07006"WS6Z^\@:83[&A'+]23R2=7['Q@H^57?Y%LNFGNP6P;
-M-T#EC'568QJ_Z#?GC6U*(G;U"`5,[DS(3N).@ER1ULZ=-[+6X#?=#MMKB";`
-M:A!$]PME[A!*W#RA0#%@,)JU&CN631*W1I=#!`!<`0``7`$```(```!%``%8
-M4G$``$`1``#`J`$!P*@!`@'T`?0!1`<I#>I>T#XBO.[0I,BEC4CS""X@)"``
-M```(```!/"$``2#KR;SN\KR0*)9,;:J$'71):^JY/;)&_\W?@D;UPI8KAJY"
-M*H1@RE&8";P$LC9:]#G:`1Q7E_]E+16[#=!H<-+D(FU+-?,)2)5Y0LD*J!PW
-M]3G1!EC:%4Y:HYR5UH3M6&OMO`*)C)G2U]BUAW5=)%%*CY3IF)(^M\YDHHUT
-M1V:X'Z9F.;_ZL,,+_+50$/BRP3_!#;J%GOW4(J"5@*U6U<N\[*#@>[S0NE!@
-M!<^PT\9D!YB]64V7N#)0=MU3,9YYQ#76M4CLP%ZD;*?@AOWL3;[<"UD,])O\
-M1[CUXQ5TYL6[5/"MH5#D^0>UA00;>6X')1_'JL79W[T<G[(EHCP'^#@7YZ:?
-M)$\>$,)_\$47A=0J3.SDN3=M)C)@=$RY14T2MT8";`0`?````'P````"````
-M10``>%)R``!`$0``P*@!`<"H`0(!]`'T`&0&2:F>6>DN+"0+H'9:BWYFZ@HN
-M("4(`````````%PJ``!`43RP@+?@]_CFIP&S(,R="TH>J$20,6M8KS6_K6BD
-MP]U=V%4(6!XO^Q[V:CQ:ET\^KN8%]WGSK&RQMY9*31*W1N!X!`!L````;```
-M``(```!%``!H4G,``$`1``#`J`$!P*@!`@'T`?0`5`8YJ9Y9Z2XL)`N@=EJ+
-M?F;J"BX@)2``````````3````###D\)-JY<J>$2]^#$?<)L[,P'$.]Y,:MK!
-MSMGW\J*2SN"S1Z#C1:C2N#&8(TT2MT8[B00`;````&P````"````10``:%)T
-M``!`$0``P*@!`<"H`0(!]`'T`%0&.:F>6>DN+"0+H'9:BWYFZ@HN("4(````
-M`0```$PJ```P=1@S[TA.+M2]MBL(L1A>B"!QXM2/=R"=?P;2V0ROUMW/B$1?
-MY3H])'O!M/%-$K=&TI8$`&P```!L`````@```$4``&A2=0``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CFIGEGI+BPD"Z!V6HM^9NH*+B`E(`````$```!,````,*0?
-MLGOTFMHIM8XA)3'A2%I5OGLQ<!V:"TSCVOLSY/:*J*573\6FW96I7%Z\31*W
-M1HZ3!0"8`0``F`$```(```!%``&44G8``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M;Y^Z2+R=IE$``````````"$@(@@````````!>"($`'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``+XG$'[9>W9S*B>H8R&,0GL:Z8(>;V7VD
-M,CE5"Z`2_3/ZC_H-0V\W]7L\*2_*![07TYH9B)&=93%`HI;CR;OH^VO6RT=H
-M0"P\M>84^W#4!)8&XN,\=6Z0R/K*<KZZ!4/=:@D"!0H7HCY)#OW<4_V,+N"Y
-M//ZQ;UQ6`"TG2MNQ,O,I```DQ?Z9'%XT@S_YF-JGX`+;U9IL4WPX_C3/&IW)
-MNV>%K$`I```<``!`!)U.O>I94\J)KOT%PO[(DU*2J%&W````'```0`5=[49`
-MC`N9WJ^;;_8(GW='`0RW+4T2MT:`H@4`7````%P````"````10``6%)W``!`
-M$0``P*@!`<"H`0(!]`'T`$0&*6^?NDB\G:91```````````I("(@````````
-M`#P````@``!`!@````%G\)D]'V/_P["TH08)#9KL5!#JGTT2MT;0L@4`N`$`
-M`+@!```"````10`!M%)X``!`$0``P*@!`<"H`0(!]`'T`:`'A6^?NDB\G:91
-M```````````I("((`````````9@A```@``!`!@````%G\)D]'V/_P["TH08)
-M#9KL5!#JGR(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M+XG$'[9>W9S*B>H8R&,0GL:Z8(>;V7VD,CE5"Z`2_3/ZC_H-0V\W]7L\*2_*
-M![07TYH9B)&=93%`HI;CR;OH^VO6RT=H0"P\M>84^W#4!)8&XN,\=6Z0R/K*
-M<KZZ!4/=:@D"!0H7HCY)#OW<4_V,+N"Y//ZQ;UQ6`"TG2MNQ,O,I```DQ?Z9
-M'%XT@S_YF-JGX`+;U9IL4WPX_C3/&IW)NV>%K$`I```<``!`!)U.O>I94\J)
-MKOT%PO[(DU*2J%&W````'```0`5=[49`C`N9WJ^;;_8(GW='`0RW+4T2MT9V
-MUP4`4`$``%`!```"````10`!3%)Y``!`$0``P*@!`<"H`0(!]`'T`3@''6^?
-MNDB\G:914[O-'%Z?&S$A("(@`````````3`B```P````+`$!``0#```,`0``
-M#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``,A2R9EVS[5A
-MZ9R/YW\S;5<JX0%\&VRD!(3LL(TC[O!H8(DML2*'E8#T%C'4)6>T7&%/$(ML
-M(TW%#/!>YOCI7<E-FW+<[MT#5Z.,FK[DH,?/M6AJE%N@A\\QT]M/]6-.4A%8
-M0/=)-:(\`32M25J@(8#\AV*1F$]59#&)V(G9==M"*0``)$\/(+(`X,B9_*-/
-ML'!**GP6N<5EU=\19?J(VK29+R.>*0``'```0`3Z>[>R'WS6+2?<=F^$!?@O
-M\^144@```!P``$`%EA53%@T]F-XR;JEW&48;;##JL%5-$K=&<@0&``P!```,
-M`0```@```$4``0A2>@``0!$``,"H`0'`J`$"`?0!]`#T!]EOG[I(O)VF45.[
-MS1Q>GQLQ+B`C"`````$```#L(P``T*E0)S+(B!45N[!#F!I/]<*>V7I\&(P$
-M9*W/E8/\\F'A0H0^*<$/L@)I^^&P\@%[.QVBH0E=/>I!8:G0ICZ,P;*;<`J7
-M^.<LSWR8\6[XYW?(&"%29-GE4J5U_P5>Z8!Q-Y]:"D4`1'CERL&:>G5\:8O2
-M613D+C/ZF`M#>C3-U._IA=:7T-9M&Z3<6>1'$PS57IG3!#!WX*;XCB!T^I!J
-M@J3E4;;7WX8\QW0@WXE^L3M!B&@C*H)MM28E1Z"CJW3+C>KQ(%[FGSE;F5D"
-MSDT2MT;;'@8`O````+P````"````10``N%)\``!`$0``P*@!`<"H`0(!]`'T
-M`*0&B6^?NDB\G:914[O-'%Z?&S$N(",@`````0```)PD``"`_/::U@K8&I)K
-M=Y-VXL>^L,OWMJ5RG0'NB6F\Z!YBZ"(?.Q7SSC,K0:H95W^[@NKCQ),VF*FX
-M5,*02$,"--D38PW_?5R3%142<S#VZH<,]"R6JPQ$\\0<25-1YD?K,$?64G#^
-MWHR=+MJ%Z-P_Z>]$13E&E_UX**X;W7`XJDT2MT;=/P8`'`$``!P!```"````
-M10`!&%)]``!`$0``P*@!`<"H`0(!]`'T`00'Z6^?NDB\G:914[O-'%Z?&S$N
-M("0(`````@```/PA``#@`@T+/;$?SS219E]BF&K'Y`:4MDZZTO>N+:IW]@P@
-M;27N_R\\E#>-A3)8^P/P>7R=E#/5.CAU-F=QD%HEX$TNHPQ!P4S59+2#,#;Z
-MR4M/$5>7R\?6A$%]7[Q.48<$>FW3S<8"-;9G90>=I9Z5"?#_WVH6$RCO@CRR
-M,NHJQO(N1H:UFOREA86A#B<^663HM1#&QT0`!DW5=:DX7W],X.T#('H'763N
-M];5D5@TN=SV",*=Q3>G[.;AI^V'@YZ?(8+OIQLT^:%SG\T_A0=?B`S:D6K5:
-M?]*`C!T=D-O-PTT2MT9T2P8`_````/P````"````10``^%)^``!`$0``P*@!
-M`<"H`0(!]`'T`.0&R6^?NDB\G:914[O-'%Z?&S$N("0(`````P```-PA``#`
-ME$YE59@"VT$TQ\WYX?O2F=O]Q(>-]N'7115FGB4/^E/HL%CP26]`SM7V_E"G
-M@_<T,;4GMC4,'2S"H[F+TB>/MPB"U54R+J5VKR!N""85F]G8=-[4R_:U[$ZK
-M4?4&C,K>X8-YT&@3G3C1--MI8#_9G@S3CC_U9",ZS8W7/ET7*PQ98R2MHT=.
-M6.J?46U%63G0?6FL8[K%W)<;LT#_W`F=@#"AUA1>B@X4+3[HHYM`:.2>'=)J
-MGD+M!@MGY-=-$K=&'%8&`&P```!L`````@```$4``&A2?P``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CEOG[I(O)VF45.[S1Q>GQLQ+B`D(`````(```!,*0``,+VC
-M-0FBPTO)!O7DF9`(K2(5;A@J_S.:[-?+KS$PSS0^[ZEPK+/'RD*C>:Q031*W
-M1B5R!@!L````;`````(```!%``!H4H```$`1``#`J`$!P*@!`@'T`?0`5`8Y
-M;Y^Z2+R=IE%3N\T<7I\;,2X@)"`````#````3"D``#`QN'`6@[P04/H=R`.>
-M=)DRL,_,XIFF\XHD(UN$!'K!(E%)"C6[%<_\K_(,*4T2MT;MC@8`/`$``#P!
-M```"````10`!.%*"``!`$0``P*@!`<"H`0(!]`'T`20'"6^?NDB\G:914[O-
-M'%Z?&S$N("0(````!````1PA``$`JP>=@YX39/;O09"HIJ2X3T>YC'.-<GV!
-M9LDE/A;?*C3H>S<4+&X*TFS;B;%BS3&PA3N]L&@G33R`["8^,@7'@Q&,68@1
-M@(!ZRYK?$$4;F[N?2+0(?EYN3^R.H0&A%MD27%GLM&+8%@2CT>5/S7$\!`H=
-M"5F'+SJ`:TWL7P_I<GX8DQ5BD[!:(!.$F0'=1B'3>W95:Q_=^YPM8^#P67-1
-M#YE;5*PE(M^JL$Z421%0'59'#-\GLJWBW%MM7QB0!&9,`8YN-;3^#T>8,SS<
-MRV29-P"^CX82E2+:O`4;JN\]3]X+7+ROI[N#F%N42-+]:W8J?]BA<`\A[0EQ
-M>A3J31*W1E6?!@`<`0``'`$```(```!%``$84H,``$`1``#`J`$!P*@!`@'T
-M`?0!!`?I;Y^Z2+R=IE%3N\T<7I\;,2X@)`@````%````_"$``.!/$`\O'S(9
-M^9OW[=C)O[^?9B`:@`F;?\\BO@1CO/`=IM]IZ7*[X^3IC3(Y!AG.?UU$:LO)
-MR\4EJ[XU16]@X=DJ*$)X9`(O</UP.MV?4>A1YWKJY/5A\G$<;B6Q5PU)F+P'
-MFL61U#>@[WRW5[`+HP_E'"80=#+*JA^TCQ$`>@+"+?M;^`LE(KC>2(9\SK@V
-MQC;#U79MW]W;\`9_5N3/J*CTK+[0G"2MFE>0?Y,*MN(*45H>/3H\R)W,S?Q+
-M_?"MTU#[XR'N:XQFLI&`BK*DIG/J\Y[Y5W\9Z:P9(SI831*W1B*J!@#L````
-M[`````(```!%``#H4H0``$`1``#`J`$!P*@!`@'T`?0`U`:Y;Y^Z2+R=IE%3
-MN\T<7I\;,2X@)"`````$````S"$``+"4Y:&RO(*-\]PF<;%@-O[P%$R?OD'(
-MLU/Z3?%B*RRSL&6-`\'!"FTK,./?['D=RB=$W->$%0'^_#V8Q'"(9I2:,J@T
-MGF@@"A(]J3QD(J!U+='43"%SK8LE.EB^A&`A"#:H6/"'708'+<V+H%O,"*M`
-M<W3I@D=0CIP-LQ?XPXI55CS/CT?2)>.[K-?6[=)KU5VRM?_!%G61C9TOX'GX
-M1#PH@.Q!%(IB)BNKY[2731*W1A7.!@#L````[`````(```!%``#H4H4``$`1
-M``#`J`$!P*@!`@'T`?0`U`:Y;Y^Z2+R=IE%3N\T<7I\;,2X@)"`````%````
-MS"$``+"*""&7H!XL@PDLYMCV'8&D2%^_S;U470KW@O<;X%DZ&0B;%-^+",02
-MCSQ++<%FL.:)OV"/+A_-)Q:"OG6E<@%RM,L;@['@0>IJ29G5MP)2WV_D^2P1
-M(O:SL^Y+4ZA#<]3&D#A7C>+6%M$(V,6C%";G&@&WE3LNX::?;P$H.\4!&VL`
-M,#$)^YR=E=^03']ED*/[Q5MMIOL$A>"!6_;(HX9#=7TP-V^YJY5.</B.31*W
-M1BCL!@`\`0``/`$```(```!%``$X4H8``$`1``#`J`$!P*@!`@'T`?0!)`<)
-M;Y^Z2+R=IE%3N\T<7I\;,2X@)`@````&```!'"$``0`>IKW9T?(LL6^\0$6*
-M,%J6Z[YXK1!3%,=K!,BBJRJ$X\0[M8)12H(Y%]CO`FIEO[%\A16P_-SPX5O8
-M8X@H#KI`@%;XETCTN0F:92DS#__Z@"HRF[$L"&.BJQE;<MB&K\/_M?@,P0A4
-M9D&I8,_0<;NHLMYH/M`V&PR`YY*@R,]:9_(99D6CTT00TG_<R=K[_4!(0VFD
-M/C\CI9-B">7FB8PE-:_EBBICCM]M1&]B-AH`4I'M\ZP7N;P/D6,30HC;;`B$
-MYZ5NI0U5`_%>@0B1I0U^6->V(LIG_N6Y&[$?GIUE,8)(D6K^D"\X3:&IXETV
-M`4;DCC=Q36&ZOQ)&<^--$K=&N/D&`!P!```<`0```@```$4``1A2AP``0!$`
-M`,"H`0'`J`$"`?0!]`$$!^EOG[I(O)VF45.[S1Q>GQLQ+B`D"`````<```#\
-M(0``X)-Y2#"<(Y^0I/'@#O>D`Q\]P[R]&(K:(HW3.YUG%"GE]CBX.S$T=J]I
-MS<LT<`-_^P&-IZS&=J,41U'E@-)(OP^UR8(V=.Z++F(>^N;*K"7^4&MC7,2R
-MJOC-%:MUSQ7)NFE1<L^+\-R@K3`G!P@;Z83:V/XQ_F#3ZDNSJ+AX*^C*`\Q'
-MKA&$OI&$<G.=NN/8H`[Z4DTJ6N'LH+4F,'S'%&0YLV::N"C8GW8"_@W]+I1J
-MP8F+)LV_V4X&-R,H+67$&\RGKXZM`**8EV''O712Q^9_-L03`SK.EW"!9D9-
-M$K=&RP@'`.P```#L`````@```$4``.A2B```0!$``,"H`0'`J`$"`?0!]`#4
-M!KEOG[I(O)VF45.[S1Q>GQLQ+B`D(`````8```#,(0``L*ZX8(PJ/UW*"6*/
-MGOWTX^4@JM&ISSL7A\E#5GG,O&6_C"3H!TI&-J>$(KR!Q`R1F2!C90S]W6XM
-M>_)^E\N3^W`\2=$R#%LVKYO;84=.8Q/9&:`TP0%6I1W/OYWP@IQVI9JH/6W\
-MG^9:,2P!)U8BOS#/20VS(L9'O*U!A&'P1NE=C8D3\H-]V0Q_:;X2.%/H+BNS
-M=@R"X3L`$9FE61U?*N7TXRLR@:((CT!-$(Y-$K=&V2T'`.P```#L`````@``
-M`$4``.A2B0``0!$``,"H`0'`J`$"`?0!]`#4!KEOG[I(O)VF45.[S1Q>GQLQ
-M+B`D(`````<```#,(0``L&#W=E[<.1;?0W*%7+6:RMAZ%N.8%>]BQI1UH%@"
-M(.<6`#]2AW0?SEW<UL(ANZ,V)?\!T#F%I=@?9"PSW"@OK&=.F.P&B0C@.MC\
-MW[0`N2:BI<X%AW3<B`4$HN[!CL(%<(YQJ2O\UU\C$9@M<JQM169`5(#:[2^=
-M_4+TPE@I;>';-S!S_9C;CPDA,J$B31:[S>:SU$CU>LH-!73W/9E`;A_'?\DL
-M6-N0,L:L`^Q-$K=&@54'`(P!``",`0```@```$4``8A2B@``0!$``,"H`0'`
-MJ`$"`?0!]`%T!UEOG[I(O)VF45.[S1Q>GQLQ+B`D"`````@```%L(0`!4/]]
-M^S&#BT!@!*SA!^3ZDK<R9_CASW*H"H',"J!RG5Y8G+)KCCP8K5(ILCV;F=45
-M((O];46OE&,E\X'$V-RB8Y_.WA2*B2)&%R`(1I;<?!8RL+WP^MN=W+EO\+\M
-MZXA71,'!W&O)%/?\;];<4:;,8W&_)MYFSQ.:LX>7O$O&"64/)2WF?G7C-EP[
-M.[_9MRLN`^3%6K5GUH'$JZNF?87_HS[)Q"R]3`GWIO%DQP%';U.#OO.F35@C
-MC>->!<V)!,2HSX%NLYM6DH1ZH?7J0,1HRN^[,`EJZ0/8<G\'4+$0"8R9QC^9
-MX)K;+'QLSZ:Z2'2AC_+7G0*`@GV]B&&"\&(-.A+0RQ5]Y7'Z^)NV*6),<"!V
-M:^#YN5Q,08%KV.2SY86*TDM;'TS*X/E(&^!\8[!1X:,O+4_Z50V=GD\4-V%A
-M:^7:YYV]G-W9;0K3$$J>31*W1@Z+!P!<`0``7`$```(```!%``%84HL``$`1
-M``#`J`$!P*@!`@'T`?0!1`<I;Y^Z2+R=IE%3N\T<7I\;,2X@)"`````(```!
-M/"$``2#57--25ZD",<%4>[UIEK5CN6M\!ZT&$YA83QQU1BN]:HBU2E+>;8XE
-MN.U7-5CM&'%"!/K$+7HQ'[8%X+T=WLI1R$S5U?D[M^DGNTC=Y<W>N"@9G5T]
-M2C!N7B[-4*[)3XL15X>?:MV',5]>)4V*HFI=&7357W&M0E+L=]D*U&M-!71'
-MD(9DYUR5#72M.F-_>[YUNP/MV]*[>/[#AD)F9'=KADK5\PD#_65JNV`('`O5
-M:,*,5@K"2'RM47NSQNTK["`ET\PXIWD7X:M^+Z-4FQH"37&E:YM^`$E-V-@Q
-MLNV:4CV,L#=E."5%\=T87K\*=>VQ/>^SL.Y27P]H-\_`NX(^S8:\<[BFP7+V
-M?+?[]M\ZD+K[=_0.I/HNF>C^FTT2MT9:LP<`?````'P````"````10``>%*,
-M``!`$0``P*@!`<"H`0(!]`'T`&0&2;"C$:MW7D+*H\`#SK:*^9@N("4(````
-M`````%PJ``!`Z=K![I'L`W31=%=76_DRT:UT\,',+0AQGDI,8C74($DOW,5P
-M-=^5@S3A"F/R$A&1F1`>F#$!4FISG@C131*W1MF^!P!L````;`````(```!%
-M``!H4HT``$`1``#`J`$!P*@!`@'T`?0`5`8YL*,1JW=>0LJCP`/.MHKYF"X@
-M)2``````````3````#"2"`5MRN"5*L8]A\RC4D@3FRS=F@/?;UI*EE7R'3,D
-MBUK0=/AS.B,9L`$L4$T2MT8-S@<`;````&P````"````10``:%*.``!`$0``
-MP*@!`<"H`0(!]`'T`%0&.;"C$:MW7D+*H\`#SK:*^9@N("4(`````0```$PJ
-M```P51AA&QW@89:5VZ'PJES^AG5ZN?0N%#--'%:(<@TG1R/K@=XF,)330:J>
-MP^5-$K=&1-P'`&P```!L`````@```$4``&A2CP``0!$``,"H`0'`J`$"`?0!
-M]`!4!CFPHQ&K=UY"RJ/``\ZVBOF8+B`E(`````$```!,````,(`'3FD63;/:
-MJ#HA?(Z[;UVD)<FF&N(Y;'ET84G;3TPJ:#G"?'@.KR/,8C9@31*W1H/8"`"8
-M`0``F`$```(```!%``&44I```$`1``#`J`$!P*@!`@'T`?0!@`=E!F)4]&=/
-M`3(``````````"$@(@@````````!>"('`'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``KDG"CB"P8PE``1/76\1/JL<?@232ZY)F6-AC)-/'
-M*D/.W#?T@U^<J3"KAXK@N2"D1%W`'[AV`-9%B?C@&:33H*:`L&-ATG/^7L!F
-M0NN5,\WF%LL\*7(EL,CH?K2TRLF%%]%#B%B&PM-:*`58PIG*7]);!_Y<)7K*
-MIA0O.U<T:*XI```D/TMTXUI"&BU2&B4@:6#2.[0:=P2@N)ACI-O>(%+X1$`I
-M```<``!`!+'GZ"/Y7',2F4DWQ>WZQ>+T&@<U````'```0`45F_+FE-%F1K?B
-M]PAET&A\XNSSJ4T2MT;`YP@`7````%P````"````10``6%*1``!`$0``P*@!
-M`<"H`0(!]`'T`$0&*09B5/1G3P$R```````````I("(@`````````#P````@
-M``!`!@````%!';M($2*)32KW,J25`/DB=4#\64T2MT;R]P@`N`$``+@!```"
-M````10`!M%*2``!`$0``P*@!`<"H`0(!]`'T`:`'A09B5/1G3P$R````````
-M```I("((`````````9@A```@``!`!@````%!';M($2*)32KW,J25`/DB=4#\
-M62(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``KDG"CB"P
-M8PE``1/76\1/JL<?@232ZY)F6-AC)-/'*D/.W#?T@U^<J3"KAXK@N2"D1%W`
-M'[AV`-9%B?C@&:33H*:`L&-ATG/^7L!F0NN5,\WF%LL\*7(EL,CH?K2TRLF%
-M%]%#B%B&PM-:*`58PIG*7]);!_Y<)7K*IA0O.U<T:*XI```D/TMTXUI"&BU2
-M&B4@:6#2.[0:=P2@N)ACI-O>(%+X1$`I```<``!`!+'GZ"/Y7',2F4DWQ>WZ
-MQ>+T&@<U````'```0`45F_+FE-%F1K?B]PAET&A\XNSSJ4T2MT9M'`D`4`$`
-M`%`!```"````10`!3%*3``!`$0``P*@!`<"H`0(!]`'T`3@''09B5/1G3P$R
-MST;,&WK?D.`A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#
-M```(`@```@,```@#```"````"`0```(H``"(``(``%I,'B?&YA/J&Z&T6;_#
-MT<@,,>IG-`U`9O?]<2`39=!;><3D2=.7#X_.LCBE>;YRB):0PN`4$,2ES2Z.
-MG,A>"R*E^@C7Z*LT`:*CXBS:#+Z\0'D+!$TF'VT*H&J0CI:M9?Q`F=^L\^&N
-M#Q.V?H8--C'6+/U:)J8TJC$Y5P^"\O88*0``)*B8MJ_9T$%LH?"R7.<+L:P,
-MP=)I_2O[Y$(]`)/3%!3V*0``'```0`0"8I+(7#ZH^2;0_6%S#31YHTU!T@``
-M`!P``$`%4RT?Q,1`I5'RYF]*RB$7-9G`76U-$K=&HTH)``P!```,`0```@``
-M`$4``0A2E```0!$``,"H`0'`J`$"`?0!]`#T!]D&8E3T9T\!,L]&S!MZWY#@
-M+B`C"`````$```#L(P``T,;>ZT,0HADGK'PK92M(9,;97TVAGY0S_#6J86"Z
-M^_O_".WA.SXE@K&`D,=:U_EN"2XE=`V;.:@_+X@&I=LIEAG8WTFN:XFJ[:GQ
-M-I+8J!NIIEKH"@<"].MX6!;_B'46&Z'MHP&7]';`(IT'F'9?ZJ,/L'-+J5=2
-M\8M5P-TM<J*"KWL4M@&@P+>X!&L65MIQ:4@;<D4<MZ,V-*95#URP?V7%AI.]
-MQSFOQ)9R_ES?:N!'0:)2SC`;=0:[IB0WP=+F3;U^#'G%-:H1:`-`N$T2MT9N
-M8PD`O````+P````"````10``N%*5``!`$0``P*@!`<"H`0(!]`'T`*0&B09B
-M5/1G3P$RST;,&WK?D.`N(",@`````0```)PD``"`56O<%^8BNO[5<&FFK2F9
-M8KI)Q;[C)^%Y*D`6$7.Q$R`A4"]V+7&;`^H7C(MY<Z5A^NJ,;O92X2R^*C&#
-M_H3]`RGE@G9&3D_(.^?:(+BFJI;K@,KZ,V/4O0V3$V'GM*J(%.9C8\CS@N;7
-M?B+N@EL6&%OKT",__(K$;?#P=$T2MT81@PD`'`$``!P!```"````10`!&%*6
-M``!`$0``P*@!`<"H`0(!]`'T`00'Z09B5/1G3P$RST;,&WK?D.`N("0(````
-M`@```/PA``#@\Q1,.CP_>PI;0]2UI,459LE'ZI-P[H[C5G,%EDJD<\9JC9N@
-M//!A@.8@='1R@(`^WS3<^EWBH3^BU64-N.5;[-N$]U_RH`=>],Q<=/W7#**F
-M,`21,S4SA]*D97HT9E7W^ERKA+G?>*Y1IC7&ZH5=(7FR)_I!:\'3UH);Y1U_
-MM3UY8H:\G+=@AT_&>;>GAR`%B0OE>,D!+'^FQM6&\SK>8-#4NB&'QFSO)6!R
-M(#?!##/NX[<$%$<EAM3B9W/TMJ1"PO4+8.")X1F++_TW1,H6TOO[K/%^0'4M
-MB?G@44T2MT;$C@D`_````/P````"````10``^%*7``!`$0``P*@!`<"H`0(!
-M]`'T`.0&R09B5/1G3P$RST;,&WK?D.`N("0(`````P```-PA``#`E;*2]'C-
-M^C"DZ<6)T3SDIY,8\M8NE-?D!%D]&UW4Y0_#H?_680;`*Y37J!E:#EL.2A7E
-MU.+I'W_\EVY></5*>DI98JX[7K<H%E3IYP9@>B>8><\`0^>4BS8Y9#-IA#N'
-M8OR7V>WSU)&"^Z6@.>@X,6F?#-/M?R)0"#L<C2N*T!\!EP$DI4<V!RH$&R6)
-MC&#5THY@-,BNG;&HBVPN]D7.T[-6?L9D8(U$(Q6'LU+S)E'A()^K$"?/VEJY
-M.0%-$K=&@IH)`&P```!L`````@```$4``&A2F@``0!$``,"H`0'`J`$"`?0!
-M]`!4!CD&8E3T9T\!,L]&S!MZWY#@+B`D(`````(```!,*0``,+`X>:UNPQK]
-MTWQ#^KJO#9^.@G=%UPG=OK`2.ZE/*D<VY75B5[\_?/6Z2#ZL31*W1F.W"0!L
-M````;`````(```!%``!H4IL``$`1``#`J`$!P*@!`@'T`?0`5`8Y!F)4]&=/
-M`3+/1LP;>M^0X"X@)"`````#````3"D``##>*J^-/K+&.7$GD`4K#N7`F>%J
-MUQ,^9I6Q+4VU0F=_\G4=3<=$(=#B[IG^5DT2MT;LT@D`/`$``#P!```"````
-M10`!.%*<``!`$0``P*@!`<"H`0(!]`'T`20'"09B5/1G3P$RST;,&WK?D.`N
-M("0(````!````1PA``$`*"O+J81>#K[IZ*JB.?:YM4/;GQW/JY8L]"Y^>Q="
-MMV6U8JI#=T^KF:24IZY&1P^L+J2,M"X7_^0@770V1_A03SN?#`EN`@(9+'D;
-M[1GP-8!HD8''VYS=E]("/U+&VJ\VXDYGFU8LK."-2KR;O!`.[<SP?U508[ZV
-MP#M&!R&3&QZ^*7.Q#".\A/L%D0@4MZ7[IW*?EU:2U-*Q_&D6R]44)]P"-8`0
-M?6E8^H<QAE)_TIRZVY15CB69(:U5[23?O^@H&S_._6R"R=.6<Z4`PL;F=TVZ
-MT)H8GNGQGNE49WAG__CDW0'ZKB1@RC:VK*-ZCP7DS+HNT1Z]*Z:HOOYP31*W
-M1G;?"0`<`0``'`$```(```!%``$84IT``$`1``#`J`$!P*@!`@'T`?0!!`?I
-M!F)4]&=/`3+/1LP;>M^0X"X@)`@````%````_"$``.#>B[ATQ0[RA`,O1[N%
-M^!Q'-:N3(%02]#")3SE(\C2=Y!PJ&+#Y'D5Q<L!JX8,PUBK'1"KJ_7DXHX'V
-M<7UNDL;$!FTZ=89+=TX`[BD/E"$+L.1[EJ[OG+`=TURV+E;@F.:&RO#GZ=/B
-M:3,*DEKZC96*5Z<NLYD^B#,28/)+$LK\_1\FVV9$7]]_]!Z^\)[Z]P^L1J\X
-M:1`*8TWEH16N571Z'F'Z3-G9/.^(/>,''MTT02-&3Y'61"&ZJN*=ZW]I[5O4
-MVZM?U5HVW<4YP+X/;8SG;(-@F'!]7JN80W0,31*W1JSN"0#L````[`````(`
-M``!%``#H4IX``$`1``#`J`$!P*@!`@'T`?0`U`:Y!F)4]&=/`3+/1LP;>M^0
-MX"X@)"`````$````S"$``+!#=ZWV:F?Y;:9YB_MI"#\MOFM2T[V/('M5@"U^
-M"L\^7YMVV#0F;-DJ14:W`X$/(V,&Q-%"-2,'^,`KR:MOUNCL!..V+GW2-0L+
-M^NL"#XT?'S!%PU)[H7@]5%<TDHI"UIE2QQ(/$K\LKT49,[\E;61<*:;HKB!/
-M_QGJN4)%S-W4L;U0[`HP1QDBOHATD6O-M0CPPR@;,_'LF;5_W<_<AF@S)WI;
-M[4,OR);$Q@`G31*W1E81"@#L````[`````(```!%``#H4I\``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y!F)4]&=/`3+/1LP;>M^0X"X@)"`````%````S"$``+"P
-M<%_30.P0_6"A]UJ1Q_0B37\A%*?S&-N]?>F8JA"OG6MS.L8V7%\XLUFH4:-]
-M"72A$`-%N#MK*/2';R8$J..V.'WHSJ%QN::QMZ^8/W.)`R,G?UI&3^Z?<S1:
-M[^D0I@.U0TKLA(*K)M\S81[#$!L0?]=&!W:^/?)H$6<,UA6F9CD&[M".X=3(
-M])S7^'QZSDV5%J$>LN8]@L8&_.,<5E9Y-8#G1[SN(DK!U%KK31*W1F,P"@`\
-M`0``/`$```(```!%``$X4J```$`1``#`J`$!P*@!`@'T`?0!)`<)!F)4]&=/
-M`3+/1LP;>M^0X"X@)`@````&```!'"$``0`(,\'?GUNU'QZ"XD2B17B19MIQ
-MK1:!"'G4KTG@,:0ZSE.TT@9G%.D_^D$M&&"B>[RTW2$*OQN[!$AV?&E1H#9Z
-MSJ84*,?:#DI+CZXXYDJ2D;E@T(F?=:JJ'2%RFVRODZLLNU"6%J1G9]S'6UU+
-MXYA!I8IOFW5,SJ2ELTQZ0S$F:9&]R'IX^+<<_IU-D2SVU/A@.D_[YA:;VAV+
-M^"'[DE&@MZTL*Y8+TIK[)6,-80JSA+L"DLTFZ[F47@9NDQM<$0+67C%>%L;`
-M7U]WGR/KR.\YG\-QW="6*:T^D45%$:UAO;L_XB]3._O],;1Q1O`*KX&9-V3]
-MD)88_(VP7[A-$K=&8#P*`!P!```<`0```@```$4``1A2H0``0!$``,"H`0'`
-MJ`$"`?0!]`$$!^D&8E3T9T\!,L]&S!MZWY#@+B`D"`````<```#\(0``X$&Z
-MT[11UXM/A]*$W;O+@KMP:8D>CV,Y\M%#EF\2N1`]/`3@!+@PA3FYSPZC&PC9
-M5U8A.#K/JOM-EMJ#.BP.KA?;%U_*UX>C._A%3:*2;9.BRW*_AJB,;L3PKWS1
-M_]\1D;)GH.!;QR&4+_3M^41#-F,D\]'(I81^6/(34*]@GN\!8&5P5P++FOA+
-M/7-Q.3+7(I[QC'`(J,_T9-P!;G6=T&*)6=Z9>,?@7.AIP/"8'I5GY1BC9S;6
-MC4NDT(Y3QGVF0WPKL.GST?F1@8L([X%-O1M+"U`OC)KCPL\+1"E-$K=&CTP*
-M`.P```#L`````@```$4``.A2H@``0!$``,"H`0'`J`$"`?0!]`#4!KD&8E3T
-M9T\!,L]&S!MZWY#@+B`D(`````8```#,(0``L`A%:)()"Z]`6O1SGQ4<3TD,
-M`*'MZ>JYQ*1=W`]?LA34/L=?;WC:3HP6^`E:4\6((P`R.<NI@F)CT%[C(V/R
-M`;1%,QY]9]UFVS%P]^*[+TG[#*"DKTZ+;]4FYJZ&=`(V(NI/&6*Z2[`JW[]9
-MJS?P1O;72`Z604HT7M[WA96,B\7^E>ZX<?V)9+K7/SC$T^G,H#;#R"KY%^B!
-MF40"(5_&LQGT/DJ&V1ZF`!'B_+Y-$K=&4V\*`.P```#L`````@```$4``.A2
-MHP``0!$``,"H`0'`J`$"`?0!]`#4!KD&8E3T9T\!,L]&S!MZWY#@+B`D(```
-M``<```#,(0``L#4>[/M5FS'XILU<SM#QW]=CHKM_^!=8W5]4T&HR*^I1HB4[
-MA]]P0+3!!E!)ZGPA!9#'=S6SQ=!47':)DQD?=9+]>*7OP">M@XYBHG:02[;\
-MZ"ME9(?,="J\C]Q>ZAOY<N)?QDP3+,8-_08AW];;UD9(U5!"I\)5=\L65)DL
-ML=RJ0M)"A3EM59#4%#H=:9I'-@7_4_70@$[PY\&V&(CKYDFXAK)Q['W9EE'1
-MQO!-$K=&:I8*`(P!``",`0```@```$4``8A2I```0!$``,"H`0'`J`$"`?0!
-M]`%T!UD&8E3T9T\!,L]&S!MZWY#@+B`D"`````@```%L(0`!4!Q%HN<\T#VP
-M0IB,@-S`0V96[D-SW=C-I@6W7=_T"NRV3E1*3>.P4X9._J:_%MD%"#>9$B$A
-M.[MV6NZ$Z>!]WKFO'G5U3:=PQRD`J6P[1LY[C]A.TU-$R)&W\7*`DY$ORX;]
-M"J:V*4J-1O)IOU*M#Y`9U?E^+DWO!_F,KZ,72ZF`$,2B%!A:)DLQ_(0M<]7+
-ME4F7PC>SVNG8Z'P.<8^R+:]7VX>AN<ZFFZB)+7<>75_<PR:.9@_TS5\.X0P#
-M`]]W*)<?X%S<HO,]<4I0_GF^`R0E1D'N/WTK=Q(L7H$)GH71*;.*EK8"A)-W
-M1I.?S9Q7*-"6AQ?L7$0;0>#KXSJ4C(!73ES9:GWL#`T?VL;W%MIG[>B*W?Z.
-MF+,[ED*>#B^!0T*J&ZC`CF36#2Q6V6%E'GQV>&X$>AJC#V!J9-MY5V3RO3'L
-M79+C,P=7?BI431*W1H;*"@!<`0``7`$```(```!%``%84J4``$`1``#`J`$!
-MP*@!`@'T`?0!1`<I!F)4]&=/`3+/1LP;>M^0X"X@)"`````(```!/"$``2#$
-M`RP0,%PQ;'W:[Q'(+P?HJZ6#R@[N,AH.N)M4RH<E(FTI.R[%%1AT/8<7+B8H
-M)23O3,A\S>WFF2+O.^X<V'VL)#O+Z(].(,:;G,6#]Y<R?KAE]NI/?=-9KV;.
-M"BZ0T]M&](2[`7DLF\A7\3=+)@99FX9GCYQ_EGJI[YF<;_8;+]TX/@2?W^"3
-M4TOO'H4:K'I]255J4LHLFD:[-]/!NGQWM*1Y?V>)%U%BJ(67_WK*;/<I`2`'
-M]C4*JTPMW\P?'&&N$90+L4$T>0C_M2W#^]M]\\LU-G4$`SA]X-GYAD=D'\WX
-MW5I6F!_/L"A_F08_HJU++-K:5%TH0HN@6"+[(^.FR?`'O@'$.$A'8=;;6:$O
-M#&JL\)'Z\>M^]UXQS4T2MT8*\@H`?````'P````"````10``>%*F``!`$0``
-MP*@!`<"H`0(!]`'T`&0&21`?"3IJ(9;]J(K4GC=F@B8N("4(`````````%PJ
-M``!`8`2%>.[('1GB+%%CS[*9SJ;)!A?Q0>@>XRD6K5MYJF`H5:N`*I39)7HI
-M/RNF;.H(+H^)5+$XKGPB2PO831*W1GO]"@!L````;`````(```!%``!H4J<`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y$!\).FHAEOVHBM2>-V:")BX@)2``````
-M````3````#".9_JE8/QQ^60%6+[1J75B$*CUF)E29[G>S\T*4081^&7M"9]?
-MY2S@`.4>K4T2MT;6#0L`;````&P````"````10``:%*H``!`$0``P*@!`<"H
-M`0(!]`'T`%0&.1`?"3IJ(9;]J(K4GC=F@B8N("4(`````0```$PJ```P9F6T
-M\,O"^S#`(P30C+M/$K]$#1M`@Z=8EL879*@(S%#O+D\I-!\NOWOB34]-$K=&
-M;QL+`&P```!L`````@```$4``&A2J0``0!$``,"H`0'`J`$"`?0!]`!4!CD0
-M'PDZ:B&6_:B*U)XW9H(F+B`E(`````$```!,````,#W.ZA^<:@4TBE1^UUD)
-MO!6#R-"Y8&SK2V"DG8[K-<16J3,,LU\]M,]M-?[O31*W1H46#`"8`0``F`$`
-M``(```!%``&44JH``$`1``#`J`$!P*@!`@'T`?0!@`=E9ZG8I]&S"^4`````
-M`````"$@(@@````````!>"((`'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``E$LTHT1FOA(';0(6+`%A[$^,/V%#H!NUC3DH)NA_J<69G0:E
-M"LEJ[AP;@<5W!$^U-+;XX9A^`SG8V:)M]57)^_$"9WCD/BHMNEW!9UQ`$8?M
-M<$50"Q5-GOB%L!AT*,OZ4LI*GC=BT3]A`H)CKB\`6C@YH#+'P8MUS78@?#V$
-M;N4I```D0MP5-'[UU;49CC<2\??>4;4&N[;M\7D'7*_W4-'5S.PI```<``!`
-M!%%9ED>`^=RJ#$AYD`RF]3.=[N*E````'```0`5L--/0`W@:(4H/\,;`2*Y]
-M,&IP:$T2MT97)@P`7````%P````"````10``6%*K``!`$0``P*@!`<"H`0(!
-M]`'T`$0&*6>IV*?1LPOE```````````I("(@`````````#P````@``!`!@``
-M``%N?J7&'(V_#-67B,PO$]!U%JF-EDT2MT:S-@P`N`$``+@!```"````10`!
-MM%*L``!`$0``P*@!`<"H`0(!]`'T`:`'A6>IV*?1LPOE```````````I("((
-M`````````9@A```@``!`!@````%N?J7&'(V_#-67B,PO$]!U%JF-EB(``'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``E$LTHT1FOA(';0(6
-M+`%A[$^,/V%#H!NUC3DH)NA_J<69G0:E"LEJ[AP;@<5W!$^U-+;XX9A^`SG8
-MV:)M]57)^_$"9WCD/BHMNEW!9UQ`$8?M<$50"Q5-GOB%L!AT*,OZ4LI*GC=B
-MT3]A`H)CKB\`6C@YH#+'P8MUS78@?#V$;N4I```D0MP5-'[UU;49CC<2\??>
-M4;4&N[;M\7D'7*_W4-'5S.PI```<``!`!%%9ED>`^=RJ#$AYD`RF]3.=[N*E
-M````'```0`5L--/0`W@:(4H/\,;`2*Y],&IP:$T2MT:Z6@P`4`$``%`!```"
-M````10`!3%*M``!`$0``P*@!`<"H`0(!]`'T`3@''6>IV*?1LPOE+:8JH($T
-M#=HA("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@``
-M`@,```@#```"````"`0```(H``"(``(``!WC8X<+5V(\-J6"&LAH2-;"A.MX
-M%S%;!AGNJ"2@T%1\QU_J3XH:*5'(U-GC(.@@PKWQ[YC;^-9Y76'65$YC`XLL
-M16\.`-N);@`7\DT(9J:'WC]>!\K9(S68`WH[.@DLC"KJ*."B^`7QB:UP"Q@^
-MJH3KK#(Y5<^M@8F=;AO=0D$"*0``)#Y3!QV4KGG+F*)DB%1@:X4N-"D:SX-(
-M[CLA@RX,:M[/*0``'```0`2/^I9=YS:''30K47&7[/W!LY<A\@```!P``$`%
-MO<ZT[A$G/F?HOW#-2=;WA/J2>^%-$K=&18D,``P!```,`0```@```$4``0A2
-MK@``0!$``,"H`0'`J`$"`?0!]`#T!]EGJ=BGT;,+Y2VF*J"!-`W:+B`C"```
-M``$```#L(P``T(7$HFXICM,:EE;X-9O?FY*U<QHEAOTA:*^F-KA#*Z0U"TG6
-MN0#@N0CCE+,B$U8L_PZM_=6IB]Y0`9!,1KI.@:>\.!IS1_,$X+A9\G/$#1-(
-MY[ZY6QYDLK!,T(4RLF%@@D]-62TFV/WR/,1,B9%L$NUHS6N]9(:(XGE*OLG3
-M`"AH[^XO06>8&=LE=?'M\!`/$[%PHO^*'IC!=O`]PF29G6!^UUU._B<T_YL9
-M%'$G3CK[4M9Y':9+\3$V#&;G7O6M:K\%IUV0N>KW42XL($T2MT;FH0P`O```
-M`+P````"````10``N%*O``!`$0``P*@!`<"H`0(!]`'T`*0&B6>IV*?1LPOE
-M+:8JH($T#=HN(",@`````0```)PD``"`LBZ#SA[92Z(]ZY^7:LP)LN?QC#!(
-M-&OS#I8%<*I@TF9,!<UQ">74PN8'B!6@&Y5Z631QI03TI6!AKQWJQ`"NNYU"
-MCM!RS?BOE+%G`KF`2$^><FS/OQ:L?IGF9*;S5""1(QRT#WG*L<@IT\SVD\YK
-MYF<B_Q9T>//J[6@M!DT2MT;9P`P`'`$``!P!```"````10`!&%*P``!`$0``
-MP*@!`<"H`0(!]`'T`00'Z6>IV*?1LPOE+:8JH($T#=HN("0(`````@```/PA
-M``#@ED@,.4(W0&<IV4/C#58%R\?D)<=7VS"U9-:U#&NY*@9JR6!P`.]0GZM3
-ME'+$$7-VK6%J;XCA(S%A[J)O5V/`I;_F\GAGHH""[M1MCM3#5/2HHC<D(=@I
-M2:\R:W7Y`6]<6\@IWG"4ZAZ9ZA\E-"0_)I5+9H$!ZH1\Y4(G1.&5OTCCD-;K
-MBZ\;HN<13^6F2)7",N2-((S;QHY.HUHJIA)ZSI+5VL>HLS`Y=7B7*UP^-RV1
-MZIE;,O"`],\&X`':UJV]SLJ\6P_RY=^T[Y)GI\.,BW6$ZK#4M']21`K-STT2
-MMT;-R0P`_````/P````"````10``^%*Q``!`$0``P*@!`<"H`0(!]`'T`.0&
-MR6>IV*?1LPOE+:8JH($T#=HN("0(`````P```-PA``#`(?A/QCEW`+<0$2;H
-MIF->56`=1'.NH*6-8X.BGZ:Q#PY4.($P>N$3.5T_"R"I\#^:)TG!O3#UI*1(
-MTF-&,QC;%MOQ`2[_2EIN[-7WMP=D5X7MR*)Q#C205<4H;VK->'V*VL&T4/7O
-MA!8Q9?N8N?1(I[V4V(J]+B1BZG2DWCU+1=#,T+H8%"K15R$V>1Y,E;!1/>W2
-MID>SO*T,QK[;>Z<G<,#.*DEA@/.0]1G.B0O,9CKM^R:N@)$%%<;XY+!-$K=&
-MZM<,`&P```!L`````@```$4``&A2L@``0!$``,"H`0'`J`$"`?0!]`!4!CEG
-MJ=BGT;,+Y2VF*J"!-`W:+B`D(`````(```!,*0``,(.\D&0)&Z*XZ2'-S`-+
-MK_G&`0T9T$`_)0,UTJ5'LK5!:QK/MN18M^:'T*?931*W1H/T#`!L````;```
-M``(```!%``!H4K,``$`1``#`J`$!P*@!`@'T`?0`5`8Y9ZG8I]&S"^4MIBJ@
-M@30-VBX@)"`````#````3"D``#"N_3VAR=ET6:[#%'6UCX"_T]K%)#WT*F4_
-MDCO#_)0:R5UE<GK9!94PAT59#$T2MT9X$`T`/`$``#P!```"````10`!.%*T
-M``!`$0``P*@!`<"H`0(!]`'T`20'"6>IV*?1LPOE+:8JH($T#=HN("0(````
-M!````1PA``$`GY?O7;Q7Y$HZ^S'XG>`BR>>E;ZEKDFB_I;[(]D,MU0['5^GG
-M0T/*:)EI:302XC5$SW?E#;2JD@V%_K9@7K@79W_'!?BI&B2-,A[NUSM])((]
-M][I%N&%U@_57#+0K!KINX1R)L9`3UYR<65B]'E\3LE!4>`E/<EVC'WC,EBZT
-M2FGTW;RYP2Z)M#_)?'(!<G3&D]O,G,SWVO2+<N8.CP@^]R#?C]IEN;-GMN4[
-MR9:8-##RP':AIQ9`N*]%T-:;J-GACMD9]3'LM]C="AGFB&YL-/@S4*%3\F3'
-MZ?D&G('*P'!U'T(;S*5U'7U72E68TY4(\+WI]J=]SU(1+#X;31*W1D0=#0`<
-M`0``'`$```(```!%``$84K4``$`1``#`J`$!P*@!`@'T`?0!!`?I9ZG8I]&S
-M"^4MIBJ@@30-VBX@)`@````%````_"$``.!)#(;T7-A\^(R/$5"]8-JI'NL,
-M-29*-ZG7B"-/6O%DB6ZOP\T^NR7)]0ART#CJXG][D?F\'I6GJD#+"C=<*J:Q
-M.C"P<]NZ/47P/`]"O4-Z16/N_4/#H*M//=/JMY[7HJ5!^5S6L>!W*1,93[)O
-M^_9^S$N4<&KN<K9A^^#X2U^3A5>(?CV'32$K'FK2V1C)DT.YDL$0+U3'QH%7
-M`8T@/L%2XKB]V5+3L@(4EUH.=,`O/DORW?[Z9=$0OM#?\\E2HD32,(SA>Q(#
-M-6[#QOE)V]<0`7GI\^AK_39`IV7Q31*W1GPL#0#L````[`````(```!%``#H
-M4K8``$`1``#`J`$!P*@!`@'T`?0`U`:Y9ZG8I]&S"^4MIBJ@@30-VBX@)"``
-M```$````S"$``+!#?@[3%&N<7KHE4T@0C&T./[;R3[Z[1B3?JI`7E]$]=WKR
-M6["<D*Q:&==Y5<8\H9E_*/IQI<9GAIX"HE1OU3Z4NJHB=I7/*'=*A9!/U>(W
-M,\Y18'Q06.WT-UR@E`O6T$62ZU'])[HR(C`U[:'G/Q:L>AF9+31E)A[6*:1&
-MGJ2Y#7;K#O\B"-NXL!'F-:!!N_:`C+4(%+(WV&D,-4YK"JD"638"T3L1\7);
-MRF#F31*W1C=/#0#L````[`````(```!%``#H4K<``$`1``#`J`$!P*@!`@'T
-M`?0`U`:Y9ZG8I]&S"^4MIBJ@@30-VBX@)"`````%````S"$``+"K730T%6_<
-M4E<L`[YNAY0"YNY0F4%"'K8<D.(SAELU9D2\$G7L7T9._?);A;'].?O#'(O3
-MA/HDOZ*+9Z7$%8%)\^7>W,%[>?/)[`4K[P-^D"^;UOK)[]*S;K>"1!RFQ7Q/
-M#S)@E9Z"';P'L."J\"D;)+DIG]3:0.BB5XC(WT$YTHSOQ*<2_8(D,C\O@P[6
-MGJK):5E_CZ_)'UQLLP.HRXU43D?1H*<4GOT,!DLY31*W1G!L#0`\`0``/`$`
-M``(```!%``$X4K@``$`1``#`J`$!P*@!`@'T`?0!)`<)9ZG8I]&S"^4MIBJ@
-M@30-VBX@)`@````&```!'"$``0#YZ^IR>Z7??]GX&&PAH=K,H8+NO8)NBE^B
-M:F:TX<'D'##R_5`%1!TBK%55:V=]("PO1[9`@%^F(<="S5[2YOA5\76PBS1Q
-M"!5)2+4P(-/F1GK$Z;3H(Z;B'?I-L+K_N+=JPK)BJI8)_?F(DFWMK>*[GFPG
-M'X)JVL@\S7E[L#BM-,1"PO8("8)O8C^5JU!0)<T_'14EA6C`FPP?6WE,9,?O
-MM/C+1D#7<)H_2F-QK<>&+]4K\3UNP@WM&WR"\FQXQJQA8/T1&)&KI(Z:Y9\(
-M/Q.O"GA:`8]+BA*Y.7HRP>_84@8;N'/@G/@&:R7TLC+H2D0<OWBSEVS*`<`2
-MU\5-$K=&6W@-`!P!```<`0```@```$4``1A2N0``0!$``,"H`0'`J`$"`?0!
-M]`$$!^EGJ=BGT;,+Y2VF*J"!-`W:+B`D"`````<```#\(0``X/:B;4#4W`E*
-MS9.<_8)GX):AM-.C02XZ;,5"QSS[U@5A;YK_'[!;:[D[^524'8DO^:66JI,`
-M$'7OATL5R*@+X+^#3?_:DW/R@C#D=5+"HA-%WP<>@<*A'\$=DN`&%N#9$F@5
-MX87_H4J(47-CZKW9!PS2?"E:LLZI$_PI$&IZ3TYJ9?^?>$/.!DA+T5TKO][-
-MIB5WWO"/0]LW4,2[H_PDQ/8A%\BMK]F"7"Z`KX?<>@W+"EA%RN?$XA0N^+P5
-M$*PB^M5W)""W#Y?.VM5??%[KC+@[RVE`=H_X:EXU*9M-$K=&FH<-`.P```#L
-M`````@```$4``.A2N@``0!$``,"H`0'`J`$"`?0!]`#4!KEGJ=BGT;,+Y2VF
-M*J"!-`W:+B`D(`````8```#,(0``L`Y/95LU4^*9#[=[D-T.2H>39@,:,X@]
-MVNV"<+T[H]_=_&.?PPTR9#AI@5`&EZF$LOR%V>?JK6ZP\%L7^"16O<R!E1CL
-M-LM\^TFB8T%ZK<@+`7!G(TN`9$(_/0`_V]5]/ZU$%0XR7XSWE;&\Z6D]]AE#
-M>7DR\>=N-JK:<VNCY0:G(=>$"JUZKHH:-0DRS+Y*ZPR1CNK3AMX7<H:O>QX)
-MX7*O.8J#)VN2P;:I!3%-$K=&G*L-`.P```#L`````@```$4``.A2NP``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KEGJ=BGT;,+Y2VF*J"!-`W:+B`D(`````<```#,
-M(0``L!DBMDFG3#T$"I!R)VR?[D40[$8\2(Y5LOQ>NLX2(WH3\/I6Q<F8O=52
-M5$JKS&/4G'"+.#'!NIQ.M!956G(+HA4#5E?=&?UR$%&>GX6NQ8=F+>+*QA>V
-MK-#>5A@IIRZ)A0_<]!3)'\*#;"*&O/:S<8=[@'GDQV(GG%[D8)]HOZ](JA9S
-M<E+RV0XORO"^P(5RMP83T835,BFEG[&(X;1,1&5>.(E\4Z"43[5G/*Y-$K=&
-MGM(-`(P!``",`0```@```$4``8A2O```0!$``,"H`0'`J`$"`?0!]`%T!UEG
-MJ=BGT;,+Y2VF*J"!-`W:+B`D"`````@```%L(0`!4(D$R4+*.W0DPE.]^4#\
-M%.W[=R[>MCWXD6O!`^_,B;<V!J$I2R+`#KLG=^$@O>UB7,&1IQU#!CC+][O%
-M>0V8T_,)*2E3C\T!(D`OD3/K=+-BW?>2).`]2,+YDS\,1R14)N-;2\V`5I3;
-MU"^!(%)&MMUIT&GT`]J?;S<2%\=">;4XR-4OADF&775BD*:D[4O1A9,Q;<@O
-M@D%PX"@*!M(R'<DJ"UHI;@(Z[#+EA$-J]AP8U>UK*[:TI[*:*J5W+):YR96G
-MG^D0:\LVR$R@$IP!#^NCW<+EZ>OUGIR8W`<NA+#./NE#8WRH^^7YE`C@#Y3A
-M-MFU+HNB@Y=FHL*_K46K6*'D#BO,X.["*U5]\YZ\GG/;+S#3YLRP57_F'E+D
-M5R_M)V3H(+@]O3+&X4!GYMGR)TXV!_/[OQ*BC58K0\">-5"`%1A;*,W5A%3N
-MMO0831*W1D\'#@!<`0``7`$```(```!%``%84KT``$`1``#`J`$!P*@!`@'T
-M`?0!1`<I9ZG8I]&S"^4MIBJ@@30-VBX@)"`````(```!/"$``2"V^V^O4A@[
-M!Y!JHN5#%E?7XEI525EQY?F]=?>3]I<``N+X!VBI]O1(9,+[E9%'3S.?@UG8
-M`QS"_3IWE>*C<1E(,-OL'`,X&RBRLI8-BI==#0%+7Z\YD'B6DLQJXL"IZ=*[
-M5E"^@AX;)YXVDC5[P=3X>GJPW8IK!$'83!EX#B\OO2:O38C5R[O]DK)-M]Y?
-M659++"&R7OW'ZBFK50%=9M=@G#"G(,ZH,A$EH$*,^*TKB1M`>)\](`FI`F:7
-M;.`'2LB&:S!I)83L9<*[$[^AX[%H)B7(B7-FL=-^L_VG!$`_KG%6(GYM`+FV
-M1*Y(S\QWS&P0??!<S>?U;/Y.W!MG@VD<RKP"QG]"!\\+N<V$Y[>=Y3I`\#%9
-MR<&L;::=&DT2MT86+PX`?````'P````"````10``>%*^``!`$0``P*@!`<"H
-M`0(!]`'T`&0&264*_2PBK]-*DU3A+.YB3B4N("4(`````````%PJ``!`#+`)
-M-V)8DY&(?2&.OY&!A64?AP;QQB\O?&5^K%V>SJ*!,B)Y`;1^P"$QGBQX]XMR
-MAUBLNCCN>A$%"ZZQ31*W1M$Z#@!L````;`````(```!%``!H4K\``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y90K]+"*OTTJ35.$L[F).)2X@)2``````````3```
-M`#":]>JZL-3Y-I;D=;KX*+:$DE'N'K5:E'.JQ>&EDGH^,!<Y`K!5(]TWHQ'U
-MY4T2MT:)20X`;````&P````"````10``:%+```!`$0``P*@!`<"H`0(!]`'T
-M`%0&.64*_2PBK]-*DU3A+.YB3B4N("4(`````0```$PJ```PMUXO4S&\Q"8=
-MT0ZK`(G:>!EA0LID6^`'/<N('GR4V64Z[<9=8QBLZ>1VG8%-$K=&XU8.`&P`
-M``!L`````@```$4``&A2P0``0!$``,"H`0'`J`$"`?0!]`!4!CEE"OTL(J_3
-M2I-4X2SN8DXE+B`E(`````$```!,````,"WR4V)$;.D*D$9:9&\.G:'&4[V>
-M$R<C`X!E75ST29W$CA9P+S:G8J1L4U\+3A*W1A@2``"8`0``F`$```(```!%
-M``&44L(``$`1``#`J`$!P*@!`@'T`?0!@`=ET9%*M*:YS10``````````"$@
-M(@@````````!>"()`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``_?'>:;6P2)$S]9,?792$7`XMBOIV+H`8XV&5UT-HQ/J/ZTT$%8SJYJRI
-M44?JN6J!_&R!FGT&AZ@67QPV^.&`]ELG-!*FNQ<>0ITYD?(07S(_CW&F57"+
-M\SV`XJ/P7(@#[8[=)W%J/\H]Z.5DUWT@#SDT7S3)M_D&I>[^)V:**WDI```D
-M6]$LS#M^F"=5)'KVD6@_A>^AN*WE_1KF%[=HHN>W]Y(I```<``!`!(>/+=0J
-M&T<W^-"C9WD#W;9&ZKK%````'```0`4Q46^+P\A+>1]$LM[-4]=1^DZN]4X2
-MMT9H(0``7````%P````"````10``6%+#``!`$0``P*@!`<"H`0(!]`'T`$0&
-M*=&12K2FN<T4```````````I("(@`````````#P````@``!`!@````&7#M0:
-M6>,\\7#.NRT&`QX)PW+CY4X2MT9A,0``N`$``+@!```"````10`!M%+$``!`
-M$0``P*@!`<"H`0(!]`'T`:`'A=&12K2FN<T4```````````I("((````````
-M`9@A```@``!`!@````&7#M0:6>,\\7#.NRT&`QX)PW+CY2(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``_?'>:;6P2)$S]9,?792$7`XM
-MBOIV+H`8XV&5UT-HQ/J/ZTT$%8SJYJRI44?JN6J!_&R!FGT&AZ@67QPV^.&`
-M]ELG-!*FNQ<>0ITYD?(07S(_CW&F57"+\SV`XJ/P7(@#[8[=)W%J/\H]Z.5D
-MUWT@#SDT7S3)M_D&I>[^)V:**WDI```D6]$LS#M^F"=5)'KVD6@_A>^AN*WE
-M_1KF%[=HHN>W]Y(I```<``!`!(>/+=0J&T<W^-"C9WD#W;9&ZKK%````'```
-M0`4Q46^+P\A+>1]$LM[-4]=1^DZN]4X2MT;T5@``4`$``%`!```"````10`!
-M3%+%``!`$0``P*@!`<"H`0(!]`'T`3@''=&12K2FN<T4&2Q1M@R64P(A("(@
-M`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#
-M```"````"`0```(H``"(``(``#IWVS7.$"2>G;:J4FP4<ZI$"E670-@N%G23
-MV>=($,5::P=XS#T)58A>VF")@I)P'"5MW8C%3&>ICPR?>TY0>'B96C/X9=<C
-MSX]#NERX1M`F1GP/5S7`D()G'.9$#%F+HP![V8NJ<09Z[2(H4[U44'A82LI%
-MB\DG%P'?F-+_M;M^*0``)/R;$#G1&S?M)=O(_Z_/G2N;0&?C-NQ1LAY!4MA4
-MVO0N*0``'```0`1*.$M\+6<ZI\`'C_N.S8D+/#LA0````!P``$`%-S)B&N'C
-MRM<C>(&T)2S4+".WJ^%.$K=&7(0```P!```,`0```@```$4``0A2Q@``0!$`
-M`,"H`0'`J`$"`?0!]`#T!]G1D4JTIKG-%!DL4;8,EE,"+B`C"`````$```#L
-M(P``T`@:$VI)5+0*@G/MQNJJIYF^W?#7+\NUR<L@+"3]C3;)'Q9-X[%@FI06
-MYK5!+]5G_@8KI9:`X*,"B[>IKI)NP&S\HW<:O'P\4*J6G*2^[H1/1W:ORO[K
-M$&%!\[`ZSX/#B\7`\S'R8R1JDK+_C/XDS!O8Y*K36X/P)[?4NK#)V5W+#3BB
-MKD@FIS1"Z)D0MVH/)_E!V00HN.8_,;+POLN4LV+(^WT-`]<`%40=;DDN.IF?
-M=7.C0=V-QQS5PE1=B1;-M.J9;SGN.1^4VO+-34X2MT:[G0``O````+P````"
-M````10``N%+'``!`$0``P*@!`<"H`0(!]`'T`*0&B=&12K2FN<T4&2Q1M@R6
-M4P(N(",@`````0```)PD``"`<C:<)/(NW>D8UJ<NMY+[;@O/(Y(`.SHYX-54
-M)2IJ:P].@+S#3HOWS54:4BJLYYW1NME&,8O`[/7;I1J%I!0K,:E6QT9C^,!B
-M,./R)\DBX508'R:B;+$4WJ=719W;M?47L,[:F@-@+<*=P-%E69C0WU;'QO%$
-MOK5,XB([%$X2MT8_O0``'`$``!P!```"````10`!&%+(``!`$0``P*@!`<"H
-M`0(!]`'T`00'Z=&12K2FN<T4&2Q1M@R64P(N("0(`````@```/PA``#@G_&<
-M2TF_"(B%/<[2F&'26JH\$$V&AEY1%;,?-V@/`D4EGA'],:+-M]W$KKR@6">]
-MM=I^I]_R),:Z=&50QBQ@=S=12T2(I#;EY!L!RHW9#J60>/Z,>[MUF]@C'VF^
-MT4J/$]:'2>1$FJ9:=W^LV5&8C`8_)@A=F;,[=54OZ7VX^XA*6XJEY#SB2F8`
-ML@.@7M^PX?>)-501M[#]TW=6_AXV:Q2?J0W:FJ/`2M,I9:SOI!/8!\>^(CK/
-M,5H0LUS%-WO76%^7#;P?[.?2IA?G`$U,-DG.R])L2P.$5K@>G$X2MT:3R0``
-M_````/P````"````10``^%+)``!`$0``P*@!`<"H`0(!]`'T`.0&R=&12K2F
-MN<T4&2Q1M@R64P(N("0(`````P```-PA``#`O2N<![+"4QYZ?O29[II\-+JE
-MZYC,[;-+,`8198FN3!>`,FGKHXD%,42AX*6C6G(ZGRMM1#0PJ-%1VN9#+U2D
-M9BI/XCHI7*^X"&0`M.6"YS8"`L7M,_P*GQI\S%P?:J&^@&2>CT@DJ(D?7/N`
-M\T`,+AHP$_(H3THW'5QBY\BR*&?C)%'E(JRND%+K&'HBK><0EWJ1)(YS-1WH
-MY+DG6&!QPVA^O9W-QD&H5CIV7LSTIIZJM"4Q&+L0Y1;(_HQ.$K=&]-,``&P`
-M``!L`````@```$4``&A2R@``0!$``,"H`0'`J`$"`?0!]`!4!CG1D4JTIKG-
-M%!DL4;8,EE,"+B`D(`````(```!,*0``,%PJ^K.HON@V+F=M*[]M+18!S)6>
-ML,CQOE\9-G*](]5BQ*^CHEN4T4#IE?3Y3A*W1EGO``!L````;`````(```!%
-M``!H4LL``$`1``#`J`$!P*@!`@'T`?0`5`8YT9%*M*:YS109+%&V#)93`BX@
-M)"`````#````3"D``#`1_UT1%#^1&SC8V(!SN+;?=2`\I#I=S/=,90/9;;&T
-MJ;Y;BHJSCT7Y7&,"VDX2MT:6"@$`/`$``#P!```"````10`!.%+,``!`$0``
-MP*@!`<"H`0(!]`'T`20'"=&12K2FN<T4&2Q1M@R64P(N("0(````!````1PA
-M``$`Y'ZRI3MU=G9^UO`7NI+MKU($PN/)))E6%5]$Q.8S#1,V6[#18STE[L1/
-M#X7<ML5O;*Q([V`J$T4KVM5LARO7/J`M>5X$=A:CL@"Y7]6\"CV$*Y;=QK=$
-MB;\G*XNG6R]+MX'4=P>!0SHD(=QN_>/E.Q/]Q#_-]3-%BA<-)8L#JIDBG?^9
-MA0L0[;@^/70Z#-M.L"S>,H>P*]KHKLEN@&X]^;\#5"=-'/`I)&B*-7+K-P%N
-MU`"28HN:L,+QI9J$Y1RF7J3""S:(@2,)6LA]5TBMP0WY`!E1&U,49KH1XU3F
-MEI_/VW?/Z(]105U`KT@XE&1&F82*P[*OG8%31&M$3A*W1GP6`0`<`0``'`$`
-M``(```!%``$84LT``$`1``#`J`$!P*@!`@'T`?0!!`?IT9%*M*:YS109+%&V
-M#)93`BX@)`@````%````_"$``.#B+%KU.4?MO%H+HI?ALMK8;3QER^Y&XN5!
-MJG3`[GR)L[6;8;EN2&+(/.SJVW0/:>M+*!B`QW3$ROQP%/[,\&OU::O0"*@E
-MG)8M$1Z8=&?'=CNZNE>88A8*YW8JG\=BC<%8<V!-*]YZQ.HIK_M[$PLI#G'@
-M?)2OU7,F<GL7?O;O,L"F$MKA[-P1RO0]EE$A*&'HH!J!^_&''2"B,:A[![P*
-M>Y+\O8*D'0$/MD9-=U$'%,3+E\O-7'.H(=/WN'#>I_H\AV"3D(_'1"WUA<G9
-M,%A>:,LP_KJS4]?EE[:?3A*W1LDF`0#L````[`````(```!%``#H4LX``$`1
-M``#`J`$!P*@!`@'T`?0`U`:YT9%*M*:YS109+%&V#)93`BX@)"`````$````
-MS"$``+!:`?8_>/]KYJTHP(VO>!F0W$/=(L@!,<!V+WV!LZ]@^_%;/=6OV[7"
-M+TC-"SXD^$V.D+]BEW%.KR"*FMF1JE]`1U(=-RZ/PZ+]*Y*>MBR>/-%\^.K$
-M6QMOF;[\H?\O$.W?W_VFTLW[8I]W=$GI.L"P9.MKEB*PD<GJ+0]E[DE0%<R4
-MBTYL7;')D&^D^8E08;*X$@X1>@J$F83+T,Q(]?R<ZJ#$XU']_Z=$H0E_3A*W
-M1O1)`0#L````[`````(```!%``#H4L\``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-MT9%*M*:YS109+%&V#)93`BX@)"`````%````S"$``+`V`G;["[MWLGI[(@V`
-MS/G!:#>>0%YY091)/D!P8GG;Y=+5(1N@)6<^UB[LXI(S$P\<<G^`VN8V7>H&
-M/1!6?WG.'!L!T<4;15P4U[D.J[@T1H4M[`J$L?+X@Q'<U2U@5R]M5I13??US
-M/TB.YJ+&Y\_J.!+`ZKXR=8JX@F&UW4I032#(6O9"2"P8W#CV':/:^CD5[-]9
-M.],7R:GDFUJ"EX!7KZ+RP%YLJ(.6!4WT3A*W1@=H`0`\`0``/`$```(```!%
-M``$X4M```$`1``#`J`$!P*@!`@'T`?0!)`<)T9%*M*:YS109+%&V#)93`BX@
-M)`@````&```!'"$``0`T]]1NNBZ\]RA_L1^I+*_Q7P97MK68-4*:**36WJ?4
-M=.,3>!_0<C31P&(U'%^;"@J0K3D2^PJ+VIS@6.7'$;D4()=UZ>KCWYR^KD@8
-M;K*HPY=`(A%Z5I,-OQ@H5LP=+X##JQ-SV7$09:@(>4BN1)GL5W7\*NL]9(!,
-MZO#>48VU6\,RLGSYM!Y?HJ`RZBLWQ'$J.#_8T(\:3!E6&M_5J`3US>3U[:.+
-MF?A_=/U<C`1L=^IGU2C7`Q1:.FNLAT!T)6=/``,<:*#($KV<=@#8IV.YY8PZ
-MF:0]/;=_#0"-/>-R='K0SW.%JD7X_Z&X>KN57!#UH4]?UG#1AMDFS7!.$K=&
-M"70!`!P!```<`0```@```$4``1A2T0``0!$``,"H`0'`J`$"`?0!]`$$!^G1
-MD4JTIKG-%!DL4;8,EE,"+B`D"`````<```#\(0``X'GE#GY7UZU("%%AW&1+
-M2Z+QO/+Z_'F87L)*0!!!T,+8X2J#GWL/@]<0.(ZON]`^$H=7!,#A(I57BYG.
-M-[M2.C93^!3'6@PVK(/*49V@=H&$FH0:\?D0!#]XVYM?A-)[WN:(WR[E3C8L
-MZM'5`!26M78L+])VIV[%S]EF08V-QWAFQ7DO!!9<.$VO`#;Z]7:&LX13=X(_
-MU]7R6Y6IM(Q%T12S;B7GF$B9Y^7%AXIL@NP?Q,B4]^7R4"30O+%)-2>W[<L5
-MKQIHM!(9-+KXWCE-237Q<C3\H%MERZ"GF3A.$K=&J8,!`.P```#L`````@``
-M`$4``.A2T@``0!$``,"H`0'`J`$"`?0!]`#4!KG1D4JTIKG-%!DL4;8,EE,"
-M+B`D(`````8```#,(0``L,H'ZV'YXIT,X!479BOTB&#.JS?:^).\#P<&0,^1
-MB^HQ*_2_@>RR`B\&:)"+Y4GT`0:[I!PV!1((U0S;Y@0.E?(/'T>'(>^(6%%%
-M,]-QBX]L*B!^14NX$ZO#?!MI=65TC2S\]>6J2DBV;M71D58#0GE6W/[\!"FO
-M6AN`_%Z";5:3%;=$^T].O@#F7(?EZ_DA\*$\>CN:XC,-<ULSC<B_Q0C`'V,5
-M$O]K<4S5RRA.$K=&\:4!`.P```#L`````@```$4``.A2TP``0!$``,"H`0'`
-MJ`$"`?0!]`#4!KG1D4JTIKG-%!DL4;8,EE,"+B`D(`````<```#,(0``L+PG
-M?PM"F*,@VH?R3(X,3;DI&CC27%$.0;18.+H-$+`:NU#P2G=3>M'JCVYNE6XK
-MP0(L5./A=+!$_]H<6=I<5?DFJ,Z`&O<])-!'<=Z'XBI9I0K``0[["R11J0<$
-M_M1+T['38G0@Z7GOA>&8&O(1$Z`+';YT\\CF7-17_$T_27%:#RO_CFYF#G.(
-MN7C6\V!3H92F/-?TPH7T<<?ZT@`7VR4Q@;R\]9`.10/[]Y%.$K=&M,L!`(P!
-M``",`0```@```$4``8A2U```0!$``,"H`0'`J`$"`?0!]`%T!UG1D4JTIKG-
-M%!DL4;8,EE,"+B`D"`````@```%L(0`!4)_FSZH\E5TPG`23PZC>\3H721)P
-M#/H"%@^3T]).Y79:*XF)P%$"J"CA.'L[4_G,1@929%=V[)D]+T]DL+TT>^&^
-M/L.:==C*#/]P_6$%D[XOF?.A\X5/8(*@@S#R>5QP4"DOI;(T6A;^HM,;GGPY
-M&:DPSDAC'INECW*_;\'"YQS,CCGR`&52!NKT.WDP#*+R%YN]&-D%-LA4J7`?
-MKA]**;*+,.&$"8;L+XM+L:L^FOH":I76GJM(I@+#E7[#S`#Y,0H1C6Z#DJU'
-M(;)MF&`Z`+@7C&MY],R(V'C)CJ!.['3K(UD);MQ!"O\5I`[\%,$^2:%`.'+$
-M'*!BE5KHWP1;^<)\*?[>&?19/K1Z=_TGSKH;]RESA'<>8M:%#<T=[Y!I2T?Y
-M'WZT"NQUU8"6QTPJ_@C[BWZW;@]P!E$Q@59/4S>I#_$P;H8E:[DL3BH"3A*W
-M1@4!`@!<`0``7`$```(```!%``%84M4``$`1``#`J`$!P*@!`@'T`?0!1`<I
-MT9%*M*:YS109+%&V#)93`BX@)"`````(```!/"$``2"%TJVE.-XOD/IX@Q*\
-M77;<[^153Y'9H7NY79.-L'L`P3A,K!N;#BU.7UH)?SD#WN?5A(7G`80.%X_K
-M3)*'2<6+#;IOL73YB;'KQ:?]9#Y9V=PU\_/#'"^J]9Z,JXQ@A;''[G9!5(AV
-MWTE?(J+?H_U\!(`Z39.\.RMRC^[UP96F=:3DD#H`LB:6=E%IQ'-/T-=![L+%
-MLT7QM[2O_AK`0=!3S[J&>@DI7T:Y%N1M2"!W'O.^O$NI!#-VNQ<LQ-[^DZD+
-MD&^3?E$@JH7YR4RZ<;+F0JIG!+.NY&&P4F`<5,WTK#5TS\Y^*N&2H7;1O@/5
-M/X835W#7SNM#Z70OS8R&[%*]E@AP\K\T/0HS^R[[>6:2C;BC:H'C]"]:S;VJ
-M!TX2MT98*0(`?````'P````"````10``>%+6``!`$0``P*@!`<"H`0(!]`'T
-M`&0&20(+W\]\E\181:\9QS.;"KDN("4(`````````%PJ``!`W`1MB4.*.CVA
-M`TP<F6:BR9L_C/HIUXICD?NL_NJG_ZM\Y#D\<;6.XXY11339,U-K/7`N`DOB
-M59H@HX^33A*W1M8T`@!L````;`````(```!%``!H4M<``$`1``#`J`$!P*@!
-M`@'T`?0`5`8Y`@O?SWR7Q%A%KQG',YL*N2X@)2``````````3````#!"1'S.
-M2&8-[>0N$;C=DH6,:15M*@^:]NXYZV-]G,0,E)KOY#(HLGB#<[)D\TX2MT:Q
-M0P(`;````&P````"````10``:%+8``!`$0``P*@!`<"H`0(!]`'T`%0&.0(+
-MW\]\E\181:\9QS.;"KDN("4(`````0```$PJ```P*QD00_*QH8(#V0_'L%.#
-MMLLO/`]&5CCXKSF_=W9(PFAMG90/:6;?B3K/Z)-.$K=&!%$"`&P```!L````
-M`@```$4``&A2V0``0!$``,"H`0'`J`$"`?0!]`!4!CD""]_/?)?$6$6O&<<S
-MFPJY+B`E(`````$```!,````,)=+-,EA1,:<Z:&0$VP[QF/[IXD"6N_*M8%.
-MVWPO3Y?9S2B%/''O97#9,="G3A*W1E!+`P"8`0``F`$```(```!%``&44MH`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E+W3+?>Z'F!0``````````"$@(@@`````
-M```!>"+_`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``08)#
-M@W,<(:9Z@1+S.;^&!H?'8;^,,0,Z["/VO)4BWVJJ+'L<%9$BIL:C/OV@C9M\
-M2_U:IS80!UJX("_59^JF'=A/AZAN,+?!K0K;X@28"A/^VJ":2?105THVS5<>
-MF/&SC`F00I6]Z:8:G.>2'#[&_+)H^N_8"!*:J:L5`V:<0F,I```D4(-WDDUC
-M1,R504V:)7#5%+K283O-.D9S]?I<..7OFW@I```<``!`!"6+LC:L[B:#!X<&
-MF=RL3P4+^Y,:````'```0`65`/2DH1)4,W[J(1$7I25#EIT)\TX2MT:K60,`
-M7````%P````"````10``6%+;``!`$0``P*@!`<"H`0(!]`'T`$0&*2]TRWWN
-MAY@4```````````I("(@`````````#P````@``!`!@````'9-#MEL-"-+#_!
-M,Q?C7-&H@+6A24X2MT:W:0,`N`$``+@!```"````10`!M%+<``!`$0``P*@!
-M`<"H`0(!]`'T`:`'A2]TRWWNAY@4```````````I("((`````````9@A```@
-M``!`!@````'9-#MEL-"-+#_!,Q?C7-&H@+6A22(``'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``08)#@W,<(:9Z@1+S.;^&!H?'8;^,,0,Z
-M["/VO)4BWVJJ+'L<%9$BIL:C/OV@C9M\2_U:IS80!UJX("_59^JF'=A/AZAN
-M,+?!K0K;X@28"A/^VJ":2?105THVS5<>F/&SC`F00I6]Z:8:G.>2'#[&_+)H
-M^N_8"!*:J:L5`V:<0F,I```D4(-WDDUC1,R504V:)7#5%+K283O-.D9S]?I<
-M..7OFW@I```<``!`!"6+LC:L[B:#!X<&F=RL3P4+^Y,:````'```0`65`/2D
-MH1)4,W[J(1$7I25#EIT)\TX2MT9XC0,`4`$``%`!```"````10`!3%+=``!`
-M$0``P*@!`<"H`0(!]`'T`3@''2]TRWWNAY@4-U;5GL8>7$8A("(@````````
-M`3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````
-M"`0```(H``"(``(``'-06H673!]M5S?/VH*UN=.=TM[;FE8ZN$O'`VM1<4'H
-M]KZ3OFTO&$\19"9+EU@2.N1!F_+VVJ17M,:I.YJ)G[=;(PW7'[K7GL?5D%%U
-M>!"'2U&;C'6';U!P<F!(;^D^^SG'TF6<15.2$HGU-2B_9C1C/'F']RN>A4$J
-M8UV7Q<N?*0``)$:G)B%SLM3*U'*ZOP&528/-9R&>4Q=('C+2G%DY4IYQ*0``
-M'```0`0%D+-0%8M=1GR:0V5I(0U/;WC*80```!P``$`%X9X^Z3>:!;!M/<J9
-M\Z>0KA`_V;Y.$K=&H[P#``P!```,`0```@```$4``0A2W@``0!$``,"H`0'`
-MJ`$"`?0!]`#T!]DO=,M][H>8%#=6U9[&'EQ&+B`C"`````$```#L(P``T'@Q
-MOB_ZC+-8+.^V;Z?-47X3FT@[Q(C%4R(V;":OZBG`9[$POU]`O<T_N'+BXSEN
-M%Y<\;OJHVHP?.-*3A@[MDY0L`SD*ABW8LK!1'_2MEN!`?,1"2;7&SD1]V.,*
-M?"#WE`#6BDR*^ZN*#6")@G6=@MSN$3GTS!,J(@>`_F#9.K"87-F./9)O!0F)
-M1.+MQO;.UVO,_Y(AH4EJ:!+&#%,8=D$@HE]Z]-EXR(H3?GP89^S`U1A43`GU
-M_=E3\_!TP.ET^/"MM;,GUQ.DZ`\KLDX2MT9WU0,`O````+P````"````10``
-MN%+?``!`$0``P*@!`<"H`0(!]`'T`*0&B2]TRWWNAY@4-U;5GL8>7$8N(",@
-M`````0```)PD``"`6&Y!ME*>GC&CGH)XOUG@:_(@`G15BC%ONL"%AV;-:O=%
-M9D?8YHACNHI0;:;_!G1(G\"]).VG>8=6N'V(6<1]V`!3DG?O$K+@9UYZ6)`%
-MTG?/6D^MZ!2T9/S"_I9OV^C)-H<(JIX1A?GA=T*<1`\.8CM?4&"0+&:J%H?X
-M)DX2MT9J]`,`'`$``!P!```"````10`!&%+@``!`$0``P*@!`<"H`0(!]`'T
-M`00'Z2]TRWWNAY@4-U;5GL8>7$8N("0(`````@```/PA``#@C-3#<7OOK@.L
-MVPA#[G.CCI=Y'*I=KK#<_QPT+T4R;T[OS:$:J(=I=;IEWM*35K\.$&@E'-&)
-MXO)OL;[R"2GK,:=PPP*I@KE?M%K_%,P8Z/K7_18[C+(-.+2UJ[-'-&A/Y`X[
-MY9-(IFSP)%=;1V?A36].B94NZ5X/5D)!PH4RPVYHIKF^C:HKI`AO2G)71,V3
-MM;QA?(A-@8\_%%U/VW@,LAX51#^>F6?<-^+T)[\#44FQ>/+D6F4A\[+*Q-FM
-M^#VLWL'.PEB1\L*5%MSBKL=ZGZ<L8+E@I-%VE$@[&4X2MT:#_P,`_````/P`
-M```"````10``^%+A``!`$0``P*@!`<"H`0(!]`'T`.0&R2]TRWWNAY@4-U;5
-MGL8>7$8N("0(`````P```-PA``#`5W^4])D4<A>0YFD)E:L'9*.R@IHQFOWF
-M(D3XQ@[3[$HGY"2/`X>.NL+L^38=/CFKT7+BC:U*=Z9[2%FM,ML@;"1U=4S\
-M@WLW<"8AH,O[TZE=[`R^4SE?O08S>*/X4"A1]TUNZF'XP%'\.0QIGT'H!K9E
-MGBC5ZJVF,?ZU)9_L*_A%3<)/"Y.^"A9;6O]9T`CS0]:(5P_GK$2'7V"Z')88
-M"F!L7XG2"Z%4,21[7.I)]#N'5L;I?ZEO56B$8;-.$K=&60H$`&P```!L````
-M`@```$4``&A2X@``0!$``,"H`0'`J`$"`?0!]`!4!CDO=,M][H>8%#=6U9[&
-M'EQ&+B`D(`````(```!,*0``,!!2W!A&XI\<Y'S`S2-<942^<ZYFNA!S!G`C
-MMA?:'U^`(X"H%S]L6+K;\SCF3A*W1CXE!`!L````;`````(```!%``!H4N,`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y+W3+?>Z'F!0W5M6>QAY<1BX@)"`````#
-M````3"D``#!#J&[<I@5(:7$A!@FX3O;U31M";\CGEA=DC19*#MR-4)2&6<D4
-M\TG*P^(PXTX2MT8&000`/`$``#P!```"````10`!.%+D``!`$0``P*@!`<"H
-M`0(!]`'T`20'"2]TRWWNAY@4-U;5GL8>7$8N("0(````!````1PA``$`KR>2
-M_M)="[VNZG_N!7O:QZU;@Y*!6QA[6L)3"HJ^"(LWNJ+AX+5(BC3+YBK8&4!\
-MY[7*V$%OW8`R!52M=%($2SBA+C_D(H.DD3RWFT(RMP2B.^,1@F!<A(L&B`.Q
-MM?W!S3$!6)2`\9AB:9"?TL*[4!UR2\VM"@(W9W0R[<X)E[S1O[<ATW'-R&DX
-M+2\-:&M>K53@+NUKJ>+7<34Q3>D+S`/53C2QRG)UY]-!+8'.]<QPB7Q@"L"P
-M/6[A.LO46%OB5S2>4^PUH'7=OW",MGG\'POF>WTSN,:!WL$YIT3B)V\J1L_M
-M<@]:,?,=$=.L*S6M0I`!V(P&`>)!(G0D3A*W1BI-!``<`0``'`$```(```!%
-M``$84N4``$`1``#`J`$!P*@!`@'T`?0!!`?I+W3+?>Z'F!0W5M6>QAY<1BX@
-M)`@````%````_"$``.#R5I7;I,A7G>;/L#+UE"*+./A*CGCU*D4FH%O+NL/T
-M@)L)N(S-/;#G1?V%"TQX>>+T!OP.LFYQ#<!U.[1--(]43K24[_6J`?-+S^T#
-M)ZAL"#*71$C[TG[U8'?VE2X;UW("URW;E%D6KY@(:#7S+7QG/PQ:.X83.ZJ&
-MI@BKMABI_K`^:]Z+N&W)^7B-Z,;C9B_:A;\"&MYY\*YHBX!>)[RC;,<&(F<^
-MR_H3[.M;4OR!97R)E+\>,V\-N;8X%&$S7'C6K!.8FE$=;)I,STFTT"&6=F*,
-MD(WW6U_W_J@M3A*W1EU<!`#L````[`````(```!%``#H4N8``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y+W3+?>Z'F!0W5M6>QAY<1BX@)"`````$````S"$``+"M
-MB#&:RKH3=\Y[VCVGM*??X*%@FN1[`G:@@!75`IX@W&WL+==X4%=92`69<[J2
-MV\V+/`YW+8"O1IHSN.J&#'9E97ZK6*;++H^/`P?R)PKI]Q:_.+)TS26;4-@W
-M?8#RKE2*NWT>;:ANCX/7O"I4`0&F#A.(@_F;`AHG_[74MM%:\>EG54\H9IG0
-MR;XN@7Y^N/1B][F*!PK)#940^DZKZSJ6XH2`$-;2'SDAWGG&3A*W1BU_!`#L
-M````[`````(```!%``#H4N<``$`1``#`J`$!P*@!`@'T`?0`U`:Y+W3+?>Z'
-MF!0W5M6>QAY<1BX@)"`````%````S"$``+!CES,#OD+7P[1E6`IU>DM/Z7<P
-M-<I6F"0=!$ET71((S9;<0'_$(EAGN/&(BVJOZFG:L2?SP'YHFVT.Z]]:JK.$
-M=[_VQ/8<<_```,L6"N+N36R/7WY!D2G(R;L*?,(L97)-*Y)]@1[!CBO'`38_
-M(-V$JZQEH:]9=>'I(&7VY_[&SS_V]>53F$1&)TZWBSO_B&[?J4TW)(A%QR1+
-MI60FEO9$">9E2$D`-!D"8FM$3A*W1K2<!``\`0``/`$```(```!%``$X4N@`
-M`$`1``#`J`$!P*@!`@'T`?0!)`<)+W3+?>Z'F!0W5M6>QAY<1BX@)`@````&
-M```!'"$``0#QZB[>WJ,J`2G-5MN_[X\3,?720208(!.&CIR"VP<`U69F_V!4
-M"_)<&9Y>5J1"#U/\RG>:T71R/,2&,Z4\Z?D+IR[I(=WO[7TIT3FE/CNB$?'L
-M-'&*K!$FN&$MF*4^`K%T!NN>U:F-TV^(TI><9H1>E+G]@6AH2RACEA:'2GYU
-M:Y++[6RE44=!$YU:[DISODO<-?%'+Q.]&K\O@U1B_;-<O.MFHC?6S(+&8A(>
-M60%(!$/*J==FJ!-B/.P,T)B0P)%H!S73-`EZ3H]L:NMY=:=6^6^&@%2#O):+
-M#AJZ`7M.(R#-T*!RUD,63\O##S"!3CGQK&!6J1ZY-3(OQQQ.$K=&X:@$`!P!
-M```<`0```@```$4``1A2Z0``0!$``,"H`0'`J`$"`?0!]`$$!^DO=,M][H>8
-M%#=6U9[&'EQ&+B`D"`````<```#\(0``X(/CQ[IQFPOA*JWZL0F<>%=:@`%<
-M8(F1:5IJR6R"<UX*NZ!80_$($X_-]MWH!AT/I"FZD`P;*=6\J7UUB(PGM%('
-MA>6$F=!=K@YO+/]]*R98DYI"II]LB]4FU^)@_\`UK'^SH&70CDKGFIL8+64!
-M9%6P%J46;2P`\'S*]/Q[A@7QO8=2H0#1#TX-+'7;=SC)XY>%9?]["'%*ZQS0
-M^5`-)`.T58.H;!M63N)A@H7ZK1V<^I%(FRF,5CEH7@KRD&Q<MD`&+I-MW0PH
-M93E4@3H$F2XVO2Y$RLL+@O]Z_!-.$K=&;+@$`.P```#L`````@```$4``.A2
-MZ@``0!$``,"H`0'`J`$"`?0!]`#4!KDO=,M][H>8%#=6U9[&'EQ&+B`D(```
-M``8```#,(0``L-;$NTVUC;;>P2!0!@)+VC#?;S*3OSM9Z5BJ2X[)&>ZB5)?7
-MKE3$35OJ!ZX+R'ZDDC]L6AD!P>SAY?Y8F8>(U6J:P^*=E'[-4!F_HP#W(YAQ
-M]85'+P`&(7!`+-!$/0V#,@MH[DRB@VC*(6JY;@)&GMGYMB"4`'NW/,+-VMU_
-M'<,^M`\VLC$48OS=LF?M'02KD`GRQ94*S*+FH)>(ED;@I(/F?^3&I+I;1;ML
-M!X).$K=&I-H$`.P```#L`````@```$4``.A2ZP``0!$``,"H`0'`J`$"`?0!
-M]`#4!KDO=,M][H>8%#=6U9[&'EQ&+B`D(`````<```#,(0``L#TEHY529W!1
-M][]\HS.$:@$&7`OJ]0#IL4YNG<;WUI+/\9%[)S(@\*Q-%XM]6)A\\W1F:W`.
-M%S\L#.OYY;O7><I/.*J?(+4QCQ7_5K7DC[DU78?B;(ME@N[L3]\8M,+:MY7V
-M34/HTT$CDRM7FO'?SGT1(A=_5S3,BF73*CZ1P:0B)L'6RCU&+&@6'I@'[I0T
-M&Z<=?5*J5W*[`5#!9F=MAR6Y,_/9`>MIR71C#05.$K=&K0$%`(P!``",`0``
-M`@```$4``8A2[```0!$``,"H`0'`J`$"`?0!]`%T!UDO=,M][H>8%#=6U9[&
-M'EQ&+B`D"`````@```%L(0`!4%X-\?O1!Z/X=+^V.3DLU!);>W[:;B=V[FIM
-M07R6()K;'VW-:[2`+A(?@3Y\3B94N#F\&.\LB1G$))OJQ*1T):0:MGE1_=RZ
-M:VR]-V2C!E2`!X-SK]R?[9<2BRE4LY>$).!K:U>`Q/N_UA'?:!I.ZO5+N2=H
-MG&;2_JPFF.E8%*5'RDB:_/1@';:578(""FTUOHF%I-C1L;`WSFY^/<PF7_Z3
-M=+E_&`_L_PU?P4B$%(<-$T1!7(OWP%9;[H!FL&<1C[AIP<6Z'^<K%D/-6:6U
-MF:L#U9-_&1::RJPF]C)#-+__?&@<L<?&X/)VZ!5V.F3414!YSW7HJ].*@[64
-MUXR$N-PJKVZI<*[%&SQ/V#'?`X,`7.N;G'8C?Y^MR^##`Y<EJTO*UB>_UUOQ
-MWQ@Y9K)V-(AF9DIZ!T&I_6.VDJ\P#G"I"Z=K?XN2WH_^L7T/3A*W1I@V!0!<
-M`0``7`$```(```!%``%84NT``$`1``#`J`$!P*@!`@'T`?0!1`<I+W3+?>Z'
-MF!0W5M6>QAY<1BX@)"`````(```!/"$``2"]8#P](!B9L='E>)TK:W+L!6.5
-MP#0$D&KY*1S.]C(Y"XCN2BT9L-:XW`WCJ@BWE!9V-5OHB$W/?6FSF?)C3C.`
-M'NDBM)\Q!R.M#V]4<W+N&0+5Q9&]T8XZU\S'0:)@516P_R:Y5UGL49YG>)';
-M2_:.N-T0^PJK[()<+VH_=:>^@;=Z.`4/<,$J=,*URC-"FQ%S^O@DJ)=PS%;1
-M4^T&6RB_&]/!.R(=..C92[9S(A,4U^UM@:NK0Q&H'XU7W#YA'Y@/=L6YHJ.%
-MW:&,5U_^QOR<LPF39J"-V9$.Y!K$?+ZUF&X^RXJF<&NR328@91<B8?4L<<^9
-M=H3W@<0`RE45G#=<4`IK%^#3@.M9FM]1IW/E\+FK&W9?N_;(E9`41DX2MT:2
-M704`?````'P````"````10``>%+N``!`$0``P*@!`<"H`0(!]`'T`&0&2=(1
-M-^!C<@R0F[IM1/=5.=,N("4(`````````%PJ``!`WF1L/FT"P9RSO)&N)(Q:
-M33*>3GG2+R1>CTWV:F[E_R:1,=5*J#JT=,:]0+-?Z@A--9/G5)>HHF!CV-RE
-M3A*W1OYH!0!L````;`````(```!%``!H4N\``$`1``#`J`$!P*@!`@'T`?0`
-M5`8YTA$WX&-R#)";NFU$]U4YTRX@)2``````````3````#"8+)J[HD?MXP;O
-MQ(M]JQW+ICCD\AM+^9YNYIW6_H<>W1PQE&4QL-9=+--_HDX2MT;O=P4`;```
-M`&P````"````10``:%+P``!`$0``P*@!`<"H`0(!]`'T`%0&.=(1-^!C<@R0
-MF[IM1/=5.=,N("4(`````0```$PJ```P5CM,$.V8N_@D;^$<4=(Z12MA\`-4
-M1/TKHU?_6!95EZ!ZFIP-#-V`0DQ,EZ].$K=&3(4%`&P```!L`````@```$4`
-M`&A2\0``0!$``,"H`0'`J`$"`?0!]`!4!CG2$3?@8W(,D)NZ;43W53G3+B`E
-M(`````$```!,````,$#L$Z#)Y3OCB+GE+A)2"$01Y#^2G<81ZV".L>T.DTS2
-M3A-*'0W1NSC>)1<Z3A*W1CI_!@"8`0``F`$```(```!%``&44O(``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=EHO@\IUAN'A0``````````"$@(@@````````!>"*`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``4<-@VXT+;$,%
-M3Q,3//MD+:.:B&>2W*GOFTE6AI9GQ4^$5PY?P6,3\Y9,`($61"A,\QU*0!LV
-M&KV_KRZ1RW*QWP[SO0="P(B!G`>:8VR,`6#&L?N-!]Y`\$?AP(%32;\T@SO*
-MI]2W7JT&F5<<IA'=5V)XSUU?'-M=@@A.<QGE;\0I```D3;B(D;R\@\;BW_$Y
-MHQN%./YHA#E,C"0,$QELHJ?//A$I```<``!`!%`9))&MU,U(S3/.]G(PG*:_
-MPVMZ````'```0`4_LQ`2?3@OU(`&($Y?W5-12R@YY4X2MT9#C@8`7````%P`
-M```"````10``6%+S``!`$0``P*@!`<"H`0(!]`'T`$0&*:+X/*=8;AX4````
-M```````I("(@`````````#P````@``!`!@````&W^F,C>NN%L=F2I12T:E2[
-MAH9MP$X2MT8GG@8`N`$``+@!```"````10`!M%+T``!`$0``P*@!`<"H`0(!
-M]`'T`:`'A:+X/*=8;AX4```````````I("((`````````9@A```@``!`!@``
-M``&W^F,C>NN%L=F2I12T:E2[AH9MP"(``'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``4<-@VXT+;$,%3Q,3//MD+:.:B&>2W*GOFTE6AI9G
-MQ4^$5PY?P6,3\Y9,`($61"A,\QU*0!LV&KV_KRZ1RW*QWP[SO0="P(B!G`>:
-M8VR,`6#&L?N-!]Y`\$?AP(%32;\T@SO*I]2W7JT&F5<<IA'=5V)XSUU?'-M=
-M@@A.<QGE;\0I```D3;B(D;R\@\;BW_$YHQN%./YHA#E,C"0,$QELHJ?//A$I
-M```<``!`!%`9))&MU,U(S3/.]G(PG*:_PVMZ````'```0`4_LQ`2?3@OU(`&
-M($Y?W5-12R@YY4X2MT;AP08`4`$``%`!```"````10`!3%+U``!`$0``P*@!
-M`<"H`0(!]`'T`3@'':+X/*=8;AX4/KFQ:KK?(BHA("(@`````````3`B```P
-M````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H
-M``"(``(``!()HB$R8X[B6)`%AH/*6VYG4(A1(,R9HV]:N%;XD+>4K'#[G@NA
-MY3Z"_+TH>'(AFX#EW`2L%C$[T:;7]1*=BSU]2S^2/"1D20@\4<F_P+R(9-R4
-M.^9!G38Y)/;!'MWW*-?L3]?;&O@H2D6A[VCQI$FH30P$F<B'[0VLJ!B37M[6
-M*0``)'7.0'AT,:N3+?F:UWZW0IG^7W]QC5GBO!(MG#(4>LJ7*0``'```0`3L
-M9'[-<G"AH.BRIS#X>ZP8YQ7K[0```!P``$`%V3JU(8,&6@I<8D=-PI&_^BN7
-MRE].$K=&M>T&``P!```,`0```@```$4``0A2]@``0!$``,"H`0'`J`$"`?0!
-M]`#T!]FB^#RG6&X>%#ZYL6JZWR(J+B`C"`````$```#L(P``T.::EJP9H"CE
-M<%R+ON,O>@Y1#[E:4#>V!!_9ZIMN"5N=2D=E=**;J[SVUI<)N/!1]0KWTCL/
-M6:H/B&U2^-[;XF):;L0TGKN!D-OTT<_K:J.&+DC2.21`P4F6%XZ&C[9(&.PS
-M)ZWP\*T4<^!D8<"JHGRIZ@@NF#G'L(N9E``/ZE,@'&VLK(7>`S/?VNORUX(G
-M[XTITDL`"I_M_QDC6[,XO<;&C+N&?6_/L](;%[`V4],A)?,M/,3;E9?)HH-V
-M-`6J5*7`N?APP*V;)4NU*TX2MT8#!P<`O````+P````"````10``N%+W``!`
-M$0``P*@!`<"H`0(!]`'T`*0&B:+X/*=8;AX4/KFQ:KK?(BHN(",@`````0``
-M`)PD``"`,-5<FL#OFMB58*A>YXEYM\:!:S+<Q=!OK`<[/0<+APXVKEU%+#)-
-MQAH]"V2O=]UPDVMB[F)(LS:0K+IWJ!X?5QG@O-#Y"X>*\X]UIA,T%6_M=+'1
-MU<9*VS-P)LHRV,<@.R6/VS(F\"U(7,=VGSB1`W<&#N&6'BVVZ"]TRDX2MT;L
-M)P<`'`$``!P!```"````10`!&%+X``!`$0``P*@!`<"H`0(!]`'T`00'Z:+X
-M/*=8;AX4/KFQ:KK?(BHN("0(`````@```/PA``#@/T576HWE\GZN).9I$"_#
-M_(U],,)A6VF3[\T8\:4@ZV`Q*R'VHQ;M`+)GR0^+;7+3*VG=[9H@3P/W#0E.
-M^%'-C[K4%$9DF5UBG+E:"-%;I/?_EB=P,^/OFAH0WT&VIP<6\M2YUH^9;F#2
-M(I^.;-[6%BV8@%=XF2&PTF[S)5;9['?GR*/+5=*_@%RO/J4U(6GM>(M.F8]<
-MG,LA]HPA0V2,WD&5^&NZ0)J2;/=1]Q>#>:#"B0%):Y:KL<V(_B9Q@N4]'HM<
-MJ`S];PP]V9^L6(=F3X'WS4TN>4L*YA"E9$X2MT:),P<`_````/P````"````
-M10``^%+Y``!`$0``P*@!`<"H`0(!]`'T`.0&R:+X/*=8;AX4/KFQ:KK?(BHN
-M("0(`````P```-PA``#`[D].Q#JM1%S'\<>HR/UV`[_J-?0Y`O%QJ=G:;:<Q
-M=@MAQ>Q12-H/$>"0WGDX(7=)I-FE+<N)^.08H18'$N(K=7O^U]`JE<S_P$V6
-M.RB_FF]@^(>EN&S$EB><$Q$FO2U)"&EYM3.,-_F[5EBT!V<1/7Q?VA[?O-1Q
-M-8K`XLDIU-Q7-P-3NZ$5:>:_97"X"GN;@:XGZ1.2D`J-JY6@%.[\RA:,'BR5
-MN]S)^4[T_Z:EM+N!MGC[H1RO!1CR?`9.$K=&(SX'`&P```!L`````@```$4`
-M`&A2^@``0!$``,"H`0'`J`$"`?0!]`!4!CFB^#RG6&X>%#ZYL6JZWR(J+B`D
-M(`````(```!,*0``,(K>(GP=^\;9^P=R%Z"L3.,DN)O>*:^8*NZOG2Q0:?NU
-MY4<J!\+=/_^F9[>M3A*W1LY:!P!L````;`````(```!%``!H4OL``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8YHO@\IUAN'A0^N;%JNM\B*BX@)"`````#````3"D`
-M`##]!AN5RFM:?MK@F%/D!V*DPQF#-MUP3UJ:Q[KTB2\<\*:$LZN.=QET(M]A
-M_$X2MT8G=@<`/`$``#P!```"````10`!.%+\``!`$0``P*@!`<"H`0(!]`'T
-M`20'":+X/*=8;AX4/KFQ:KK?(BHN("0(````!````1PA``$`)F6LDAWLNN>U
-M^5YETYB2<>5D%BD/P(@L@&1X[`\3Q!9E>`5'B1-)!&2B/9]*ZWTG\EI$,LJ,
-M,AUY82"ARVV2:;QP#:QUV&[OLYS^I/]12D=[++FV:1<OFFIJ%_/_^!@!:2CJ
-M.$V'`)4_JQY@V3K*MG<8Q"CF+^.%(GZB(*:EY\S=+N%^:1NGG`>L].ZHN`*>
-M1`1&FJ-B'A9]2`R?`(,Y[RTK([!@N:"?9(XR-6IP]:T8@V'6-8U^S_!@HO"1
-M"S55FYN`<,%+"@CZGJDZ+$ZR(@HA'O0YW?1%[^`.*;"."6&RN1FH=2L&?=YY
-M;;O-FEK'ZZEURRM)6IZ8'///3A*W1K2!!P`<`0``'`$```(```!%``$84OT`
-M`$`1``#`J`$!P*@!`@'T`?0!!`?IHO@\IUAN'A0^N;%JNM\B*BX@)`@````%
-M````_"$``.#ZIDU\/?XB?#)B2FAW4(CKATAI='&+=KK);\H:!/[M(UDKQH*(
-M+*+:<6/@7H+5'&D:#EF%5)R4"4Y03;3?/WBV=V@09]+FR[5#VJM%,DJZT`9U
-MH!$0TGQU:I<I9%!^I:^4DWJEA2-(ANI^K]G':EZE0/G@1&WIF''-S!_^[T.P
-MDC8`N(5<N$45-EOR*ZG5]+<@A/3+#'_C?*UT!@2803.(%>5L+K-&;L=SD>Z!
-M-R7C9!?OZ9.J&4(=@AO9)%K,L&QXZR*D]/U\B$W&'V2)ZW/JLGZYFJ*1;!5V
-M(TA\3A*W1B21!P#L````[`````(```!%``#H4OX``$`1``#`J`$!P*@!`@'T
-M`?0`U`:YHO@\IUAN'A0^N;%JNM\B*BX@)"`````$````S"$``+"&&;F)\@D1
-M4+0G0A02'3#?W3\%^"LV4'XB[@3J.3_0@P?#/9N48F'LPR*']D)4K]I?3T0&
-MS2K#A2"><6^=T2,^MC:PN^ZX_94;F!?:A,1;U4!)3PVAQ^>ZJ-:4%X[KU`N;
-MV8%UL0Z8`JTE`E8I2NP%8N^PL,U;J5@?P0"SHH>=4OV+/-;]J]<.NJNEJMXG
-M%)'.(#]M-,>D/;5?JR?A8E=D22<?H*_P8JDC!BL:3A*W1BBT!P#L````[```
-M``(```!%``#H4O\``$`1``#`J`$!P*@!`@'T`?0`U`:YHO@\IUAN'A0^N;%J
-MNM\B*BX@)"`````%````S"$``+#]KI"W6E]HXL)"F_+J'#\Q8_!YI*\:]8U$
-MM"W4]MI8A"-3G'B']\$A`NVC]=EE?2DAY_?[S2J:"UHL)88O\2*$@V/EE,#,
-M&/'7'P=ML89W43_M4G)FF)^RHY!D:8B"@L)BTE#<_="_FR@542V)0_B@%6/S
-M.&+_!:&#:E_\)=T_0./,T4:U@"V.1[)Z(8!&$H^.\BU;!!K,+#(S4<^T8J5&
-MAY%L-[*3]+AT&=8X3A*W1@O2!P`\`0``/`$```(```!%``$X4P```$`1``#`
-MJ`$!P*@!`@'T`?0!)`<)HO@\IUAN'A0^N;%JNM\B*BX@)`@````&```!'"$`
-M`0`RV-&M&904:$DVI:N"!-X46#%JV#X2B0U%IG*0M+,!-7M'70*`5U10IU'8
-M,WQBZPIM!%E('4]=S-;MT-_.'$@9PZC?X]=>CV194<!EJ[+#O=#A[YJF.>,9
-M6<(3/]1+#ER-A_U4.'6M8X%W$534`(<TZ<(5R"&*2WA'82QYZ&B=P[TF>NFZ
-M@=+&GVL#8X-@FD=]J*W1AK^'$P@T!/Y.DA)MEZ%T]5[.D;E5UYM9",IOBCO7
-M!J<38>YJU_>P+@2CG!A#.%H-T`.PP\%3AB&,K-QE<?WZ2"_0STB@6""U"X0H
-M@>:LN[<&A3E$OH-F$R5$FW2'\3Y:ZPQYG(K,`&!.$K=&?-T'`!P!```<`0``
-M`@```$4``1A3`0``0!$``,"H`0'`J`$"`?0!]`$$!^FB^#RG6&X>%#ZYL6JZ
-MWR(J+B`D"`````<```#\(0``X+ZK\R<@D93.UK6$27"1!)U-#Q!$QQIU4U"A
-M1]BFAP8(.S7P3/'S%[_9]HW#CDD8`-?6PH8F*4J)+P[R\[Y+_>:U@_GH]O>$
-MDL$R1^V)GR'\W@%\%!NP7SL51NL2]LR9$8*XNI6'!&?QBT1SK3KPX>Z<I`GT
-M?+^%P^"JO+PB>@N3##G0Z(:!]91,[$>;&Y-$YM1#\V#F<0!AC+QY9$W3`=&-
-M=(?SOH.!QF$!JN2\K"#)_$X2PE9EGP5/3&26J-E9W7[K("FCFRS+F3@F!@ZF
-MJ2X2%?]2!L6+;:-/^D-.$K=&YNP'`.P```#L`````@```$4``.A3`@``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KFB^#RG6&X>%#ZYL6JZWR(J+B`D(`````8```#,
-M(0``L,*OM_J\I"S],["&U@SDVB=@]784=AH,7B.V@_?Z/;,AOQVML:K.FFQK
-M%CAS;Q-_(A'SR-XJQ0XICO_F83];OM*=]ZS%DX\\CAI2AB85%Q:$"1Y>M]WB
-M,;3K$N&!0)NLR/=4L"MX1^!W\^'.P3JOY#^_S4^OZ%"ZU.[8V>R'R$KDR6#%
-MCRV5"2/AV'H,8GQ)L/>Y\UG.QVNZ>"'A.^@P!/`?:]B-!0\-*`H>,8).$K=&
-MY@X(`.P```#L`````@```$4``.A3`P``0!$``,"H`0'`J`$"`?0!]`#4!KFB
-M^#RG6&X>%#ZYL6JZWR(J+B`D(`````<```#,(0``L%K4:@]!_18+%AIK/V9Q
-MZRDKW>]!1I\7$:,,L:*,4-\FC7>PT47O7)#PNK'#_*IA6LM<@W2AFZJ9<ZR8
-MP/E#=8M-AMW05AK%N8,1>F`'EM:2C62SOE3C3L@IT)>0]*-[4%I>"DHWG@:H
-MIY!UUB<>M@"Q%!:6B:6==QA)6#09.6EF*/<O+_OR\_D4#UN>6QCA&V$C0G:2
-M']-A^,G=CAZC,2?V7:YC>\C'M=_\<H).$K=&&S4(`(P!``",`0```@```$4`
-M`8A3!```0!$``,"H`0'`J`$"`?0!]`%T!UFB^#RG6&X>%#ZYL6JZWR(J+B`D
-M"`````@```%L(0`!4`S?</$<TKT8#^9G\:XJ@YE4SI:/:X1_AB?:^W"W&]*(
-M>'%?9S8>=\GZ33*/11SE;C"6HX1T\Y]NU>&NE6AN:PA!6R(&"J)%"9WLYVU?
-M*.C^V$$G,FFZ%\0TM@;=,(*M!:]ZM/ZW6R./EIJ,<(-`I#6E5Q&P;E27>I1@
-MD77@J_"&(HD1.(1P-P"+*8&FOM*P&].PY2`2C<.O.4#+*:<ZR,Q?7I0A>!2(
-M2,]3^=!;1+UYEJ"26>T(96%\0$,>D`ZD_/U%2.$+UM$].V5=_D]<O3)>?S_P
-M_=,54K8-2/?3VQ-U^E\XQU;U3'Z'20K#Y6MLW(T%V,7-QFNS:3?7NV;^DOR;
-M>O`H><(:8(FCNP_9-B#Q;LT[0M5R=6W+,D>^V@1UVY+X*8`?W?T*9#_S)5H?
-M,WM,N@0[Z23/TED8&T_!W'8J30?&/H)5`5OD[X\R3A*W1N1H"`!<`0``7`$`
-M``(```!%``%84P4``$`1``#`J`$!P*@!`@'T`?0!1`<IHO@\IUAN'A0^N;%J
-MNM\B*BX@)"`````(```!/"$``2!+?T<_28I^9S':<;M7K5J@OXY&'P\N(MJE
-MS=!0'4VTF0D0RN6W9/WI8KU2>C@;G4,+DB9P1N%VQ2,O5E"PC[;F_\M\HTN$
-M34@FADW+>.\\2ADAZET<YM,VIIXS__'I3U<$E<QNWJTW,I80W'?78M5D\K05
-MGC<$?W1`2RH[?5/YK!7DUA1H&;*E`'VAOX*C_D!KP5Z!:XPZ-553X_VU^E!P
-M`L?Z-P3WLQ;?7KG4@:L1SN1_)`OE2>91!?ZT+T![6P>4X[%1ZQ*VZ&H=0AR@
-MFP+5,VQ<5+>@]`0KK?'`U1D#:L38PII$'*3XTR.?TBV9H6ZWO**M!E=QI)[T
-M0N4NFUE\3']UO7*D\<_FWD-,&Y0N^6F7CM@UEG"K6M\N=4X2MT;8D`@`?```
-M`'P````"````10``>%,&``!`$0``P*@!`<"H`0(!]`'T`&0&29KM=,[=6>9M
-MK(\$M][`-9,N("4(`````````%PJ``!`[.@Z*8U59&E2NI(.\BYWRZ/WU/.3
-M>HB)9H28V.SU3Y_("D*5EUTX=0N`:=)YPN7:RC>DUBLYV8Y`:]K-3A*W1AR<
-M"`!L````;`````(```!%``!H4P<``$`1``#`J`$!P*@!`@'T`?0`5`8YFNUT
-MSMU9YFVLCP2WWL`UDRX@)2``````````3````##J#Y<I&CR68G(8R7?-67/1
-M<N+W()O%LG@!0LZ_F;%P]:I7Y]H8E4D'SZ;]/TX2MT8;JP@`;````&P````"
-M````10``:%,(``!`$0``P*@!`<"H`0(!]`'T`%0&.9KM=,[=6>9MK(\$M][`
-M-9,N("4(`````0```$PJ```PYZE-E^PFUF-F;`#OZ,*8:\=/E,-_=]XRP4"?
-MXB(?GQ\'+$,`6JBF'4IM)^-.$K=&_[@(`&P```!L`````@```$4``&A3"0``
-M0!$``,"H`0'`J`$"`?0!]`!4!CF:[73.W5GF;:R/!+?>P#63+B`E(`````$`
-M``!,````,%,+_HB2<<&1#>)CO+X[99I\["TMT2FU997!60TB]A^>+!XHRW!(
-MDO%_7)Y>3A*W1NJU"0"8`0``F`$```(```!%``&44PH``$`1``#`J`$!P*@!
-M`@'T`?0!@`=EZM%.%+/C+V(``````````"$@(@@````````!>"(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``Y!;=ZX-ZWO'2ZE48F+R[
-M2V\6$X%0;TB>`GB72N_R58E7N45-,4Z!QF@6LKNQ)"8F6-5%+^UZ7@R-H`*(
-M/>BV$'2A40G,W$5XKW$U>Z\V&X=^CG)MBP>R?V6V0FWX088)(!@>\@+)T>K0
-MH#-*5\2,2HT@CZG\*$,A>TC3?`_UDU\I```D0L$6?#1TV_BNHM`D2QI$#:']
-MN[`F>@,YIB_QY.JE=_,I```<``!`!'=\1L/NI30!H6*_3_:X'I-V+:5O````
-M'```0`7ES%,0N'B.^>V\#1$ED_WH+T76$TX2MT:ZQ`D`7````%P````"````
-M10``6%,+``!`$0``P*@!`<"H`0(!]`'T`$0&*>K13A2SXR]B```````````I
-M("(@`````````#P````@``!`!@````%'W?:X.PKT&[53[_(.OKUK8RX.ODX2
-MMT8&U`D`N`$``+@!```"````10`!M%,,``!`$0``P*@!`<"H`0(!]`'T`:`'
-MA>K13A2SXR]B```````````I("((`````````9@A```@``!`!@````%'W?:X
-M.PKT&[53[_(.OKUK8RX.OB(``'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``Y!;=ZX-ZWO'2ZE48F+R[2V\6$X%0;TB>`GB72N_R58E7N45-
-M,4Z!QF@6LKNQ)"8F6-5%+^UZ7@R-H`*(/>BV$'2A40G,W$5XKW$U>Z\V&X=^
-MCG)MBP>R?V6V0FWX088)(!@>\@+)T>K0H#-*5\2,2HT@CZG\*$,A>TC3?`_U
-MDU\I```D0L$6?#1TV_BNHM`D2QI$#:']N[`F>@,YIB_QY.JE=_,I```<``!`
-M!'=\1L/NI30!H6*_3_:X'I-V+:5O````'```0`7ES%,0N'B.^>V\#1$ED_WH
-M+T76$TX2MT87^`D`4`$``%`!```"````10`!3%,-``!`$0``P*@!`<"H`0(!
-M]`'T`3@''>K13A2SXR]B)H?`#],Y20(A("(@`````````3`B```P````+`$!
-M``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(`
-M`)N@G=]FONC&>\B52Q"XAZ9?!I)]*QN&W+D7<<_J/\41S:+Y,<IB^TS!O1'.
-ME5[MH(O*HYG.$-O][IEXU*\&R".D)(XF8+:IB+4Y!;QEW[V`/O($MF:J"5=J
-MNJ8>;6.7:!&]7?*Q7LZ%AW?V''/VQ;J5:BX[%Z,18C83EWZ.L<KS*0``)-NV
-M"O!YA8QPR#AV_JMZ/SADX`#R\^J_LCIX:[M5$V90*0``'```0`2N(5@'*%!7
-MY"QUG*@&_MV?<N*+$P```!P``$`%8M4BL=X_3PFVM!G$-D,[>A?PEJY.$K=&
-M-B8*``P!```,`0```@```$4``0A3#@``0!$``,"H`0'`J`$"`?0!]`#T!]GJ
-MT4X4L^,O8B:'P`_3.4D"+B`C"`````$```#L(P``T&%N&NN*H,VO'W6I?,>N
-M_S!]7$X>(/YQEC,LH]3*>HN\W(9HXT<S9CFGC!Q-N-DG:]^VDA&#!680Z<QU
-M9QAI"F'HNQ`EON1`;&(V1+82I8[P_EZB`2`>#'SGYL`52]5-#8\+U0$GBN8C
-M\#:=!G3G@<=88T1^$`LRL0KTZ7(88TSB%SAP7?'5:@>*I7K=MM8V+>/>W=4V
-M%PRJ1U!P:WR&G=,.-^.'H6DMI$%\XX#/1,$+1*J)U#6$P)QI!J.9+V1Y+\P)
-MR(0LT8]OQMX\'TX2MT89/PH`O````+P````"````10``N%,/``!`$0``P*@!
-M`<"H`0(!]`'T`*0&B>K13A2SXR]B)H?`#],Y20(N(",@`````0```)PD``"`
-MZP"G[K1+F,3Z'7V;A@`N:871ZD<Y6&"^JXN'_9.2M(7_LFAFHA.#N-DJ9GQ/
-M%EG^059W,TLX(D/&X3)\5[1(N\#=52ZU,1UK?L(J'9NB_E0?!4<EHG=QC#]Q
-M00-VOQAD5EE'J_;#$O`F;$T`;V1%?-Y8-1'8REJC20Q5ODX2MT8U70H`'`$`
-M`!P!```"````10`!&%,0``!`$0``P*@!`<"H`0(!]`'T`00'Z>K13A2SXR]B
-M)H?`#],Y20(N("0(`````@```/PA``#@R2_!NA?>F6+J3]Y-+\1&C_1G1??P
-M2\KA9+GFUA#P(79.PG[E=[GR)-_%6\$_LE8,=2A]H_`?O4UNM-5L0PJ*+UN>
-MSB361([QH2L6'FE[C"9-1/29!>F3)YH3/K.7?I<3X6+ORT1WZP$;NXSMOLD7
-ME(BE)1TQF*OM`*G:&CGT2VFTT]'1?7QE?UO1N[6P3U':9_1VVAD5L<]=QA3\
-MH9Z<$ZB^.[M!*VW)GF:GP@8F5N`S<I8=1M-T$6,+;?EBA&$0Q324B5I/B21+
-M\`I/>:O]>]:[D\B8A>5.Y1W3MDX2MT;3:`H`_````/P````"````10``^%,1
-M``!`$0``P*@!`<"H`0(!]`'T`.0&R>K13A2SXR]B)H?`#],Y20(N("0(````
-M`P```-PA``#`);AG*Z[5&R]YN"Z-N&XZVIALUOUHY6OG^@HR&K:#%]]AYR7F
-MJ#ZG9::P8X,>DE8>JO>N),=>T9]\%0'8-WC*OA;#*-^?G&J])P,,3!52?9^^
-MHEQC9F%DRVJ[9OW/12"=!61U#;9,"HX,`)TN38(/*1BP^NP@MI_BN=]M+6,B
-MD1*!O$;?8U>WO6*/U;\,#-&_#/F]&I@A"L1&`W,74TN,WJQ;(XQG7;!3:V()
-MA#XL[E]+*E_L-BTEY4K4R[Y.$K=&PW,*`&P```!L`````@```$4``&A3$@``
-M0!$``,"H`0'`J`$"`?0!]`!4!CGJT4X4L^,O8B:'P`_3.4D"+B`D(`````(`
-M``!,*0``,!E[0C#3$%:9*EG\ORPG9N0#U4%6)ZJ;(>=;-Z6;O!Q;]I)\F9=L
-MM=M"ZHR)3A*W1AV/"@!L````;`````(```!%``!H4Q,``$`1``#`J`$!P*@!
-M`@'T`?0`5`8YZM%.%+/C+V(FA\`/TSE)`BX@)"`````#````3"D``#"?5]EY
-M2)[;@_1,DA9S+@=SDSJM='(GJE+27ZSP8<%EB@H?5!<.Q2T652E,`TX2MT:4
-MJ@H`/`$``#P!```"````10`!.%,4``!`$0``P*@!`<"H`0(!]`'T`20'">K1
-M3A2SXR]B)H?`#],Y20(N("0(````!````1PA``$`O&35U4\V6[M&4?.B&50/
-M>BRB_*>Q03DE<U39JD5>/VNH_C:=CH#>I`5ML1TY05RU00.9K]KT)!_F'-RV
-MO!TN'2W@R$0_YS^ED9!%Z;?(>YTK)("-YCT"?^.]'N'-DNM:TPP)6C:Y<#O_
-M_=O##1D9_<C3&7,=+<V-@-<LM2QNIO]),`OLFL>=GWXN))N%B)4++Q,)G!O!
-MWP!$PG#(AY.%N"[7GAOP$]2?+#\9Q@ZF+/$(4]]]K4ZGX''M)8EW)]#H#J,-
-M>+2EE-ZYD%V\"G<?G:?@\Z"+.\.*$"T<NG*%B$O6FE"0!]=J'\G\WNF5X`KJ
-MD'V@=##Q>TXQW)9#3A*W1IRV"@`<`0``'`$```(```!%``$84Q4``$`1``#`
-MJ`$!P*@!`@'T`?0!!`?IZM%.%+/C+V(FA\`/TSE)`BX@)`@````%````_"$`
-M`."H>7>P"MG\`H25,;&F7MUY3?>D!/$8Z9<D8?X)$D#>+!^+]74,"KT_%`EH
-MH:##WZAEK(K35(UEH[N.GK?-/.+:6)%7)&*#4V^X,C&4*V2F!_P,0TI:FQXJ
-M^&?3,7!%`WE^.M*3PQ'W,76)^X!FX8Y++2:T9US8A[ZS\7*SR7_PD`RY"B9O
-M@C?H%K:3Q5=@!:?I=+3IS`4!R5-%9]E0PR#@<G4K^95EXGIXE<RY2R4]7><K
-M[X1A/3HW%]7!(VWCN_%[,264D$!#VK,"GB4I+Z:7T@<P1Q?M0*PF)T'F3A*W
-M1B_&"@#L````[`````(```!%``#H4Q8``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-MZM%.%+/C+V(FA\`/TSE)`BX@)"`````$````S"$``+"X7R`P[E2[$(@MQWI#
-M:FZ$(E@%5":MV,E+>^'T[&X17V!.HBQVOFQ7(N2THB2URD>/D@T>2O-Q!]EL
-MG,S_'`CKN>C&L^5/6F]"PBF/,:Z_C3',97F18)\R4M[I*Y^<1,Q'_EK)RM:/
-MFL[JBC>.6>6..P#6HS$UW-4D$!PH1:^^+1<M[;SYK)$7E)$`H2"XVDL3;^J2
-M=KH-<!'A+O50!<@7BHTNLJ6`A%(XB'\]3A*W1H;H"@#L````[`````(```!%
-M``#H4Q<``$`1``#`J`$!P*@!`@'T`?0`U`:YZM%.%+/C+V(FA\`/TSE)`BX@
-M)"`````%````S"$``+`A=U,`JT@?/R)5(=9H2$@6<RT/8M*$$<HH$(5CJ*O)
-M.'@%%B)`GP8Q[*L*X->*/]:$68X'M17/9)_Y=D0`3X3BG?-PG&W"Y-_%S(^"
-M_WFAM5QGC%UD^(N,)<V/SG#Z(Q;67IV2Z]'PV3M,&8;NQX>S)XP1017N698V
-M,G`RRH^U%03Z"NTT*9A[GGR+X_5V?,_E.H4Z,N^)BC`)G`#>`>,BX04@7]4?
-M?!_75W_Q3A*W1EX%"P`\`0``/`$```(```!%``$X4Q@``$`1``#`J`$!P*@!
-M`@'T`?0!)`<)ZM%.%+/C+V(FA\`/TSE)`BX@)`@````&```!'"$``0``LLV:
-M9Y"F^2(1?W]/3]#3%2#[1\@%TVJ,ZC)6R^XN1*QJB['/YO!)(-;MH`U/$DR*
-M)ZY#NL8<FR55X*B0!DO0MCO&V_&#R20T:`;MI9+KD`E):V/V*A-OD2TV+EK"
-M_-[9QHUQ(X(7/]?36`&3%;$?D1%&A6$X",&Z3"D.8RZ)VD^0W`R@E1UF(MA1
-MB05'8296#$9YW7.WT@GXC34?QQ7^8$8R33_4-$2*DH!&W?M!EC<1,^'?87'Z
-M":!E\@8HNMISA>.N+QHG\5TP)&UX.('5YN=9@Z\OD,SM]J*F=10;M,48L'!I
-MGUU?7[6,:^^7:XDU.ER"(9[T>+B(6Z-.$K=&*A$+`!P!```<`0```@```$4`
-M`1A3&0``0!$``,"H`0'`J`$"`?0!]`$$!^GJT4X4L^,O8B:'P`_3.4D"+B`D
-M"`````<```#\(0``X+%BQC7#U8%>+C)NTQP@4C0#^F_0_UQ\*DPVK61S!N$^
-M]<Z$^)S``X:])[NK65'T*[`C5%7#86W/Y_T&-</969Z#VK1+2WM_9EF?A;G*
-M=(_T`>\R1]['(_?GK%_.A,EUD$&_>#'8!&_JA">S\:-[&6+I?E%!S/K]<KN*
-MNUP>W"'(/<N2Z`J*.`2KXM3I&CS6ZS@#?M@3M&-F<2F>SVD1#$)+28B-W0-`
-M1+<,M;^RZ/!4V,3\N'T)*7J$1H7:MUD+3BF!RZ3?1&[II;@C!GD$B[7DLI!I
-M[-#L@1`E:*I.$K=&B"$+`.P```#L`````@```$4``.A3&@``0!$``,"H`0'`
-MJ`$"`?0!]`#4!KGJT4X4L^,O8B:'P`_3.4D"+B`D(`````8```#,(0``L#^O
-MX[MQ=$^5C.0G1*NO\G!4H/B9,#ON0(U-W^:!>EPR,/,=)+>PF`$UN)6WO^(\
-M0^>1=Y&G@=]"],4^-*/([Y$D\\OL%`Q69Q>E!2YHGF+?%[9;R_H)VF-V[930
-MW"0_(KIY!J;FW6B9^_>;[1YSY36C"YP6PH2SXUC;IG;C9_0J%2;O&-2!8^#F
-ML7J(S_M-+NQCZXA8SJY:@I68_I5L<I!&H(DR#;T?_NXL2]9.$K=&YD0+`.P`
-M``#L`````@```$4``.A3&P``0!$``,"H`0'`J`$"`?0!]`#4!KGJT4X4L^,O
-M8B:'P`_3.4D"+B`D(`````<```#,(0``L$E8*&21Y:3P_-3I1&R!WV`A5]T[
-MFP!.&$.2L=54#NG2,<D%K??MMQ\5OK^=%7PY7&`L62@0ZOA#(&/,/`\SQ&BU
-M"&]Y*IX2Z]XKB7+:LIHLG9%-R\1(X2RHUHW=Y"*8E6+**N/BOH.";\G""29[
-MK>G&CT68ZOH9G;^;I[H]_YCGG7"OL$)IK;H6^KZB:#2/@_D):BK`-/D\E/`.
-M(BO<5'?#1JBDAE,1WEG:U\Y.$K=&(&H+`(P!``",`0```@```$4``8A3'```
-M0!$``,"H`0'`J`$"`?0!]`%T!UGJT4X4L^,O8B:'P`_3.4D"+B`D"`````@`
-M``%L(0`!4-[!$>%6)R=P(`^([1=)V]^]`F!,!/M^PS/=LHUXN?$!)]4<OI_+
-M3GH7;*@,(E)E;NIJY6L$2C/NA0<B&^;C+ZS(Z^E2+&TIL%+033D97LXHF>#/
-M$GHXQZNCY>&YI&3YY)9V:X4SVDYX2>#V*O:H[U-ZAV`9VB5[C%W&#%,:?9PO
-MPZB6`FMPG>$ZX.R1/#"BCNRH`Q>K=J%`&()T8W`)01W5,U=(@D*<]D!X0)Y*
-M.]73C5H8%)2_SN%9',K=<GS_`=H:9T;3\KDG#]B#9S[M!+?Q4Y#=@#$'1/SK
-M6)F?@/G^LFDC]CYTZ]6RWJ50&/3X>O9?L_]X!V-F0Y4CODO9K]=%IG#QH[0(
-M*Y6Y[^.U%)@D1M%B>G)P848PF!B;WF]#.H"FI2[F'=`4^.EBH;HIAXY!K$J]
-MQ[SIA[7M(_2"AU6;OC+$Z;&PJ?W<U.\T3A*W1IB>"P!<`0``7`$```(```!%
-M``%84QT``$`1``#`J`$!P*@!`@'T`?0!1`<IZM%.%+/C+V(FA\`/TSE)`BX@
-M)"`````(```!/"$``2#*]*KOW2(S]AZK69#V"AZFV!`4T,<3O]UZ/FD"2B)A
-M2^XOB5-U#SF,S6OKTE^"%5O79U/00Q<:8D--;8EUTI=AP1;L6IA>7$?@S29.
-M$@G'QYP8ZUKL+>9BU.J?18W:EW-ATMN@2EY"FWXH[WH3/1'"A1D=RC.,66*[
-M^:$TVY[?$B/^4?SJMX`UQ,18$W"`?/^<CB#(IC!O9\$7+%>FS).GJGXU3Y3/
-M`L'X&&3K3'`-[UV9;U)W#Z!M4G`AC!F:8$EH"R7@=*U@9I[W_2BXC;V1#=AI
-MXK%]$]7CAT)5Q<FAC]9RF2.?%5NQD5G%W*KT3L$<8+[HY<64?)`&BTI5L:Z:
-M4GT8)MSE=DESH-[JA<_7,&DO^<8\QBYF4")7QTX2MT9UQ`L`?````'P````"
-M````10``>%,>``!`$0``P*@!`<"H`0(!]`'T`&0&2<Z>X24\7P*S;/6@8V(3
-M(JDN("4(`````````%PJ``!`;DS%>,8P9EC$CN&A]:9K]"#<\O6)U&K#>F8M
-ML@H1$Q]WQ'`A&3%!^RKZQQ.K!`<L-N&?W%-9N;XJ"M$N3A*W1O'/"P!L````
-M;`````(```!%``!H4Q\``$`1``#`J`$!P*@!`@'T`?0`5`8YSI[A)3Q?`K-L
-M]:!C8A,BJ2X@)2``````````3````##"2:W1O98\#J_$6G?^X`X8*(6B#,UT
-MQL+I!\C\1)LV:U+!O9O"_2;QRDVF:DX2MT:/W@L`;````&P````"````10``
-M:%,@``!`$0``P*@!`<"H`0(!]`'T`%0&.<Z>X24\7P*S;/6@8V(3(JDN("4(
-M`````0```$PJ```PY4<SYIR:_^(&&9*#'HK0].TI-S_L:'YPK&YQZ=^[(6U&
-M.U1FSOXB:Y:'"M%.$K=&H^L+`&P```!L`````@```$4``&A3(0``0!$``,"H
-M`0'`J`$"`?0!]`!4!CG.GN$E/%\"LVSUH&-B$R*I+B`E(`````$```!,````
-M,!N`R4+00HM=_C%69^8*E<>HIB%8\FA'U9`WKY!?["%AUTPT>U?8ENP:-BO0
-M3A*W1H_F#`"8`0``F`$```(```!%``&44R(``$`1``#`J`$!P*@!`@'T`?0!
-M@`=EY(9(ON%:1<D``````````"$@(@@````````!>"(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``,$]1:Y\\Z7SV%L.*0\A@Y^(ZO*#T
-M'3YEXBA2@-`VLA,1P/)G$8?9J@9B2.Q;N1;'E`YC,\!/>D&-*(A"/*:[9"]1
-M)X<+*M@@PE'OJ9A%TU?)(S>R*"DBZ4$S)-Y<F\H3#7H#-D!2?=7V)`K(EG6K
-M6+,DFAY&4"YAI82?<Q#L[A\I```DO2@6\*EMCF>9'9'1L0Z`-M(^XXB8L\(A
-M;^S+X5]#N2$I```<``!`!-H(JC_T-*CFL+GCZ>ES^LWQM?,M````'```0`6;
-M2O$K_-3N19.J2V7@M+C@AERU:4X2MT8E]@P`7````%P````"````10``6%,C
-M``!`$0``P*@!`<"H`0(!]`'T`$0&*>2&2+[A6D7)```````````I("(@````
-M`````#P````@``!`!@````'[D44*5S&\.X#PE(;`;#GXTBIZ14X2MT:]!0T`
-MN`$``+@!```"````10`!M%,D``!`$0``P*@!`<"H`0(!]`'T`:`'A>2&2+[A
-M6D7)```````````I("((`````````9@A```@``!`!@````'[D44*5S&\.X#P
-ME(;`;#GXTBIZ12(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``,$]1:Y\\Z7SV%L.*0\A@Y^(ZO*#T'3YEXBA2@-`VLA,1P/)G$8?9J@9B
-M2.Q;N1;'E`YC,\!/>D&-*(A"/*:[9"]1)X<+*M@@PE'OJ9A%TU?)(S>R*"DB
-MZ4$S)-Y<F\H3#7H#-D!2?=7V)`K(EG6K6+,DFAY&4"YAI82?<Q#L[A\I```D
-MO2@6\*EMCF>9'9'1L0Z`-M(^XXB8L\(A;^S+X5]#N2$I```<``!`!-H(JC_T
-M-*CFL+GCZ>ES^LWQM?,M````'```0`6;2O$K_-3N19.J2V7@M+C@AERU:4X2
-MMT9;,0T`4`$``%`!```"````10`!3%,E``!`$0``P*@!`<"H`0(!]`'T`3@'
-M'>2&2+[A6D7)AQ\)OMQHUZ<A("(@`````````3`B```P````+`$!``0#```,
-M`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``..:0\IN
-M]':/K8#2S;IV73$?X;I9+L7ATN3HHYZ..!:G4P5(;$D^ZIV\4A[ZGP-$E5JF
-MC0ER+-V%B[SOA$?2V4BIR;3C+!99%L>\'"!ROH+B[VCG2;.NG4]5L&@"P4=S
-M[UX'.5);X."A@QYPS":V!L4DG59&0O\-O89XV')+2))`*0``)+&%O2'&D@%@
-MQ#'%U&>-PUHN:P?F;3_N>)6A>[%9+G0^*0``'```0`2^MA)`E.&X<%!#0:[]
-MF-XP1TQWSP```!P``$`%WL^AT)F0P=CXGGU-",HR3HWW(NU.$K=&Y%T-``P!
-M```,`0```@```$4``0A3)@``0!$``,"H`0'`J`$"`?0!]`#T!]GDADB^X5I%
-MR8<?";[<:->G+B`C"`````$```#L(P``T&3L_M.B9Q_H7PMI87ZI%!.Q(&&!
-MHM\$`#WM"&Q\1^]^X8W.'<2JT=^WR6^052L?*XT>"G2RMKPGJE5'O^%<(8`9
-M$?AG83RPY3JJ>J1ED=78OCY<]5ID+=2RE!$-\;G<&&68M[R?Z*T?I0-^!)9;
-ML$@/KQO\2^=27C;I<6C=>GG!8M!G7S8UP^K/61>R!>I/NYQ$0*,K31U$,F6&
-M=TSX2];3%%DZ9IHX^6:J,Z^'<LK(L7-QRG1[O0K"/%'?T>:XE;BDG#8=]#J4
-MV-B9YTX2MT:C=@T`O````+P````"````10``N%,G``!`$0``P*@!`<"H`0(!
-M]`'T`*0&B>2&2+[A6D7)AQ\)OMQHUZ<N(",@`````0```)PD``"`&0*2EOOO
-MMN>T_.^C,^K2/++Q6!,3"YWZ?H(I<^=?`Q).U(E!7Y^I^(2F?K@^`;ADO5BK
-MM!YP]0T>P&[<&0_FP]L*Y<5=RTJV-/;E:%,T_;FK69WP!T5-B.]'ACC4FD3U
-MY=M=>6P<_<G,]$W=OF&<3-I=2&N[/-Z0AB']MDX2MT9/E0T`'`$``!P!```"
-M````10`!&%,H``!`$0``P*@!`<"H`0(!]`'T`00'Z>2&2+[A6D7)AQ\)OMQH
-MUZ<N("0(`````@```/PA``#@;6DX>+_D4NI;=1S;>[KJY5[,%FZ\921*?]*;
-M])F?^_*!RH:\!R/6Q`X9V0ZR66V@Z@F^(BHA'BQ.@W;Y2^(B+Y$QJ1SC?P!3
-M@M5&.X)^#/QIA.#-?#XRP8;N\+%!06./;]1-^N7:V$E`B4'$47)JUH2Z4%<H
-MZ96!')39)'O5YFV\,VY[GZ6N28946%BW^GR<SW'`2Q3Z%FBF>U0F6HUEPYJ*
-ME^IN/C0MZ@Z2-M7@ZN!;U&MOW8PD+>NUTMU0+V';:)P<6TN7O,=`F\&7R]$:
-M^9U`_P.FH]5C7EJFUTX2MT8\I0T`;````&P````"````10``:%,I``!`$0``
-MP*@!`<"H`0(!]`'T`%0&.>2&2+[A6D7)AQ\)OMQHUZ<N("0@`````@```$PI
-M```P\PC(U[%5;]#/FC:S.$ID'T5>;4&E;V`7-5HQ\7K](@B-IJDF?AT3*8%E
-M4=I.$K=&8*L-`/P```#\`````@```$4``/A3*@``0!$``,"H`0'`J`$"`?0!
-M]`#D!LGDADB^X5I%R8<?";[<:->G+B`D"`````,```#<(0``P##I0=!-;EME
-M.#IW_+,3QW4,.4X^:)22:X%6Z6ZPSSQJ4!7MX#M/XRZX7JV$7C4=F];*BDB3
-M%W7O\L\#CGZPBBLF>OU?0>O5>4,T(4YX/JVI."!3!@4XN@Q"*ERS:[2)UC%.
-M&&='!LKM'X3QKBLU<=@@T?>?:OC2:7+[5KO_3:V^`<@9;Y\ZI6/:NBF\UX\=
-MGA.,96K\LBP'JWQPO&!I_#:@>N.:5OXI(E<P%/7#\+H?==B'K#Q,^NB]IRWD
-M3A*W1E_'#0!L````;`````(```!%``!H4RL``$`1``#`J`$!P*@!`@'T`?0`
-M5`8YY(9(ON%:1<F''PF^W&C7IRX@)"`````#````3"D``#"'U7WOC#5J(@Z)
-MK]KM.^+*5K(&`W=D7#8!LH^%(+BRR"5]E$?^49@N!G1:)DX2MT;UX0T`/`$`
-M`#P!```"````10`!.%,L``!`$0``P*@!`<"H`0(!]`'T`20'">2&2+[A6D7)
-MAQ\)OMQHUZ<N("0(````!````1PA``$`1-(^OA'@(D`KV]8RN5)8$X^P>"6]
-M^:B&(&/[?%D7%4\7BC<1,(],1$<32SAA!B"[MWION5]=?K2?M)[84LSKH&=8
-M`EO_T9^KNP-O!>H[Y6UQ6#_QID@%F*EC`)7FEEOBV.WPI/0S2/CW\`UJZ/@!
-M*^CE:Z5>:.L;H?6JP3T5`@-9"90QGR"/A(!:8<=9_T233[H&GY0S<N?=!1UV
-MKG\$T5)1LJ%`R<WVNRHL[$-:[4%HFHV(YLXGX@'>:-AR)JA:I)IE\[]ABM)F
-M_V":+HR<:F@Y9+WRL0R5GYT1@>!@J\"-[;F.FJ2$#T>:!0W>O][I'#E;T>@]
-MF/S(+&'R3A*W1H7M#0`<`0``'`$```(```!%``$84RT``$`1``#`J`$!P*@!
-M`@'T`?0!!`?IY(9(ON%:1<F''PF^W&C7IRX@)`@````%````_"$``."U'N"5
-M`&%("B-!@P(^Y5$CBO/J%?7"1!Z6BXB1/U>*AL=7J>#-K:VK?4^Y)Z&=HW_$
-MP8^4$_4;:[U/$V!Z32P/'BQ#`3^.<418NQR)U^T.DB-2",FIHX5Q95J8D([\
-MY@8W3"P6QG+1$T\AW'+>@:NT&-=3!$.VIJJ!Q4Z).C8'X>6)M^)P60<]SH(,
-M!R7T<6JFQNZ[0I@5Y/"K,M.U,YD3=7$,$X^F#]4:IE<&E%2XU!4->(IK)J^X
-M:H^_TRHOL1Z`OG..T>)+W4?&>-\\00UK>PE%W0FH1:C.VP!+3A*W1O+\#0#L
-M````[`````(```!%``#H4RX``$`1``#`J`$!P*@!`@'T`?0`U`:YY(9(ON%:
-M1<F''PF^W&C7IRX@)"`````$````S"$``+"-A5=*]`U";<D(G80C"*SR)J)I
-M?N[ST[</-&LC[MV.3SL%-/R\:1@%-!R<LEK%4`WG.'7O+1W``=>^M,1B<2&@
-MKT/%)L@/$9S_T(E;XI/V=K>]OWT3R4Q_0V'C)V;*PD##"T3@!#,M3TQ_IO]K
-ML&&95`?.L:W`O@);V]96R]IPH)&=LTRS+E$<IBC)DA;$YKS*E`.CG>-.L20"
-MT7X#DJMX]RTO1UXQS(1XV+=N3A*W1O@?#@#L````[`````(```!%``#H4R\`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:YY(9(ON%:1<F''PF^W&C7IRX@)"`````%
-M````S"$``+")<?-#A7C32-#]\_IWOR9-$+U+`PX.$J#DM=+$\ML'\EXT=WY*
-M6.EA)`0%?6MGUC=8)G%4R3,HJ0B?X`G<>*6V'BLN5G2Z&??)P[]__,[9:??!
-ME=M(NJ7$4$7P4T:C`$`5B0_AR'XPR3"4ZVHG"JQ!4B9TGTK(%#$:OI1A&(E(
-M+Y#AV&0@;.X/!2JRGKQ;+P@"&MVNC,(*#_)TG[=66'7$/!B^UV1FGR]%L4--
-M3A*W1H4\#@`\`0``/`$```(```!%``$X4S```$`1``#`J`$!P*@!`@'T`?0!
-M)`<)Y(9(ON%:1<F''PF^W&C7IRX@)`@````&```!'"$``0`,*I>KHRY@!O95
-M2@\X>BD29UL>B5!6USUNQ%E49#6J4;EUI9T5`35IADNI-8<4DHS(L2\.CBHV
-MMNT']$8N(='UI7`O-?S[F-<[=D`:FW:IW,5>04`#RSM?WU**NU>'BT%9EP6T
-M%*@B][N,>D_$6.=<V[.883WVZYO.YNT4]TCBGO[U$>S\-&9R&N8.7W/";_GQ
-M$29RB0XJN=B')D$W6^E[)5UJP6QF6KFP&B`(B"G&P621A>6U%H3*.J3OI2.`
-M;PW8/L*^E0+<[=9P]4^=5C'QU\K>DG-L=?\7%JZQG*#*"7R^D:P0(OG[*8&Y
-M!XJ1#(YSLR(6JX*6`Y?(9AQ.$K=&AD(.`!P!```<`0```@```$4``1A3,0``
-M0!$``,"H`0'`J`$"`?0!]`$$!^GDADB^X5I%R8<?";[<:->G+B`D"`````<`
-M``#\(0``X%-<#`,N'N4VTMQG@?@^)Q*>LJVF_0#TAC+YY<\&ZGJ^A?LEXEYA
-M%A61J8MG?Z0K9P;&QUS_.8H4RW3O/?WS($K!SX_3^DO;$G<':K:I/3&::'WG
-M_"3$!=<VB-BD9FXF_J.2',M"O)1/#=FP5#56I9,Q*'`J;*QIL:^[L),;N4YD
-M\I[I9R=_(]<P08:D-`*8JB)<]?+JN+Z\(JCXDT*61*R'4,L[Z0YC=8U%&F`A
-M)$2_PU`!6:ZY-^-W);#K!\>/W,^4:0E2C/^!5>Q.J#GVCO+/6#L"";DK,6$'
-M%X%.$K=&'U@.`.P```#L`````@```$4``.A3,@``0!$``,"H`0'`J`$"`?0!
-M]`#4!KGDADB^X5I%R8<?";[<:->G+B`D(`````8```#,(0``L#U)BB0/C)*#
-MK>.^Q2W\+I[$^?4TUPR^"B2ML?JSX$/#2XEG'-7EQAY%75T26Z`L@H;JRI]'
-M:WA>1U/2$!U#:3/[)8'UM4VH8!'EK>QAN$3]DR61_0T2YVE1'0VX\W9)M.\*
-M;?4-79BEM[21J$PTC9LY'Q]AE4A`A[56T'UE%FX2E/>0Y^+CUS@U\*(O`(VX
-M_\?`P:S*OR;R`*Z=6ORPM@:QVSO>72EZ##W?<?9.$K=&!WL.`.P```#L````
-M`@```$4``.A3-```0!$``,"H`0'`J`$"`?0!]`#4!KGDADB^X5I%R8<?";[<
-M:->G+B`D(`````<```#,(0``L.C(,W",/H)L05_KC'*$DT,HUNL?HE"'9WFK
-M[2'%AN?!Y[:MFQR@*5?"0D*-XHX)3%+;R.5[VF\9XAF;IZ"`.S%1"C`M0&BY
-MB#2=3SNDS7LT?]<7N0\9JH-C<.+29,4=?*`1@DM]_VG'"AR0GK3,T$#Y*^"D
-MK![DH*FFW=`I#?H3NK7_XVL7&NMV<5),B:7H1;\RK[8O'XX;VZ?AVQO*;S1'
-M(]0AA,"Z=A$3:<9.$K=&U*`.`(P!``",`0```@```$4``8A3-0``0!$``,"H
-M`0'`J`$"`?0!]`%T!UGDADB^X5I%R8<?";[<:->G+B`D"`````@```%L(0`!
-M4'>?0?VFPO%+:O2.B[DEUF(N8;AS.3AMPD:TC4RC31#=@@&,O=&"-?">:[X0
-MQ3&GM(J<:M,]5:/+A=T@ORJ8=*'6^P],2[:DJ6B9OY,Z?G9*0>]OSX"$=@-[
-MDQ0$82CEFM2THXV($D\_.\!BY$]I(0W/N4)MZM5JR?\N7[-!#=801#[8JL2R
-M)-I-XN<S2ZT/M$8ER32EW-.B%O*59+ZCD?==6-NT\6C-'<:7&\>R8..C!1][
-MZJ2F]&:]`2KZ0:WK9>[-W0?.\ZCH!QM(M2`LRHL2R<WOXB/'C5C;"--I4V'/
-MR%[B$#V:.7TG3%^>89/FM]OGO%,5;BF:<JS]UX&$'X3CL?K^=,V=U#C:5A'3
-M6C[X>\L6,3Y,"):!9ZG2@!>;++N6<2\#^[.5!:OT*>1?@\&;!KP#9_.M4Z6,
-ML$V,3J6QZS/4+:[S[L,;#ZI]3A*W1H74#@!<`0``7`$```(```!%``%84S8`
-M`$`1``#`J`$!P*@!`@'T`?0!1`<IY(9(ON%:1<F''PF^W&C7IRX@)"`````(
-M```!/"$``2!29P+@VS6T3">=EJX>Z5)=3G-&Z($%O_3EMK*NSP(WJ*KS!G;M
-M4#-EBE12+UXS7TJMZ*O!:R7CS.EZ(4%++)4JD&W8*BF4EACP5?V`F:^L>EX,
-MN+O"`-VJP[UUMO'D4C+GS,5`9)P+20$'NBR3%Q<//N#8P0VG728:H:]JWVSU
-M>A$'RSWP=@\PV+*=6^2&+?;?BVA^-LR5\HC7BL:F==P7*B_Z9!D0AWLFXJ[[
-MWG**Z$X4>&\LS-(G0IGI)IV$\#$8[-CFL'>S7C4:U@"W<+R!>,T]+XJ>M&N2
-MKIK:*PN4Q>@.M5DIY7BM0U7`'B&[;Y.X+F=EDN2"B@[6[D]JLSRIK=(/:5\"
-MO!.E83<9_*((W6V__.[H!!W*OP'NCTX2MT;J^PX`?````'P````"````10``
-M>%,W``!`$0``P*@!`<"H`0(!]`'T`&0&26<]FG:VX%,AH!I&O2;H6>XN("4(
-M`````````%PJ``!`]"U/'R+/:>\+XXU1,-&-`$7Q9*"M"&;@WAQ>)E<[Q=J'
-MH%'%_JGI^[(GC%V8Q*8;U;3>/+!34#&4=EW/3A*W1F('#P!L````;`````(`
-M``!%``!H4S@``$`1``#`J`$!P*@!`@'T`?0`5`8Y9SV:=K;@4R&@&D:])NA9
-M[BX@)2``````````3````##/\E##K$(1&?11R]<460**OWO*%#KAX*>5:!9L
-MKEF*D*6#>];U%_NDVC.>;4X2MT;(%0\`;````&P````"````10``:%,Y``!`
-M$0``P*@!`<"H`0(!]`'T`%0&.6<]FG:VX%,AH!I&O2;H6>XN("4(`````0``
-M`$PJ```P2&.'#U8W;,DV'2NK>)8V>K[O&[X`VW`>#/.%A[RN+5E%E0@P)S`8
-M'`]=4S5.$K=&!2,/`&P```!L`````@```$4``&A3.@``0!$``,"H`0'`J`$"
-M`?0!]`!4!CEG/9IVMN!3(:`:1KTFZ%GN+B`E(`````$```!,````,/5S(0*@
-M$>I=5@#=]4Z\,+@WGD%PF7YF6\:OG`&0K55&=!&D9D$_?2@PYLJ53Q*W1F3;
-M``"8`0``F`$```(```!%``&44SL``$`1``#`J`$!P*@!`@'T`?0!@`=EHGE%
-M9*FT2IL``````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``%V#W!XSS]#/K)=*9Q9"I<BD99L<VL>D*[@D7
-M)WZJHP+3'EVS:R;E&E:FMHF6F]3)(QASL#'+%^@*E;Z+6'`D=NCV+3*3"\?9
-MC":+<=PUETIJ<6(^^)Z#[<M9:*(\YA0!O]1=,H9["^A'7RXA0"@2E^LWJ%GZ
-MM^]N\+%,<VHG[,4I```DE3C#1T0112U-:'G>.F!6JWP!NZ_-Q>N_;5M`VDKU
-MI<8I```<``!`!.'GG,$W$YKYD>'LT,P@55OQ@8OF````'```0`63CF0SS1%.
-M"&;F22YQ#P/C'\#DHD\2MT8)Z@``7````%P````"````10``6%,\``!`$0``
-MP*@!`<"H`0(!]`'T`$0&*:)Y162IM$J;```````````I("(@`````````#P`
-M```@``!`!@````&X[.P:[H)KS>!^9QGC`G07C?6\\T\2MT8O^@``N`$``+@!
-M```"````10`!M%,]``!`$0``P*@!`<"H`0(!]`'T`:`'A:)Y162IM$J;````
-M```````I("((`````````9@A```@``!`!@````&X[.P:[H)KS>!^9QGC`G07
-MC?6\\R(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``%V#W
-M!XSS]#/K)=*9Q9"I<BD99L<VL>D*[@D7)WZJHP+3'EVS:R;E&E:FMHF6F]3)
-M(QASL#'+%^@*E;Z+6'`D=NCV+3*3"\?9C":+<=PUETIJ<6(^^)Z#[<M9:*(\
-MYA0!O]1=,H9["^A'7RXA0"@2E^LWJ%GZM^]N\+%,<VHG[,4I```DE3C#1T01
-M12U-:'G>.F!6JWP!NZ_-Q>N_;5M`VDKUI<8I```<``!`!.'GG,$W$YKYD>'L
-MT,P@55OQ@8OF````'```0`63CF0SS1%."&;F22YQ#P/C'\#DHD\2MT98'P$`
-M4`$``%`!```"````10`!3%,^``!`$0``P*@!`<"H`0(!]`'T`3@'':)Y162I
-MM$J;AZ[)A<ND[^4A("(@`````````3`B```P````+`$!``0#```,`0``#(`.
-M`(`#```(`@```@,```@#```"````"`0```(H``"(``(``"#EP.843<ID!O`%
-MFJ$0(=&'R;MUK(R=-Y6+</>Z<'TM<$DN8W.<9U(#>\M6+<>T,E;ED@=Q7RZA
-MXLTV\^MRU;)-ZWIFU::GDB-+OGWY8?GV)]&;Y.'<KW`*K9WA@[H'2JM03>@$
-MJ!00[P"HIC;J.=Y6L6GF>VL1)3+CXR(X:U$E*0``)%^>Z%DZ-&ITYJ[]-";R
-MNXT6_[NO40&<G1KJON?*F;FE*0``'```0`2PME<%AK%=8DDKY*^TZ>&Q62CS
-M@````!P``$`%L>=DD>KF;QL'N%)QM?@85UJV<H-/$K=&S4L!``P!```,`0``
-M`@```$4``0A3/P``0!$``,"H`0'`J`$"`?0!]`#T!]FB>45DJ;1*FX>NR87+
-MI._E+B`C"`````$```#L(P``T!,BIXO?0%3+4`9G.O''S](H\/^UR/19/WDC
-MI]B-<`TC>"*&94T*/'@HS!T?R4;]HKMG58]T2!64-/P7$1)A_PY#2#YQ4CG;
-M"2Q,TOTZ?K\48<!/?;;,AY)"UL2A90NGI+C.8@LP*0Q8K@+7`L?40M66[A9?
-M_D4-CF>!+W7*8T$S::I\@^;=-3N&8SNG:;(2?S#J"@*':>L[)">N=T1-(,@`
-M@.SF1,7Q<IZI$OIS;0Z#'X2XNE_703Q98)!_?-MI*#,@%')$D,R(HTYQ&$\2
-MMT;19`$`O````+P````"````10``N%-```!`$0``P*@!`<"H`0(!]`'T`*0&
-MB:)Y162IM$J;AZ[)A<ND[^4N(",@`````0```)PD``"`>L\_O5WE&Q;50NK0
-MC-&VY5I3$BZ3K2V3Q-,D=;(.)\$LF*YV/3R'D(="/&V>AC\(.K%]2K.X?O(T
-MG#[@H^V!J4UA1(S<N5C$IMTZE'-D,WG[W3BRB-H$CUYT=VWGFI*VU$N^,E\E
-M&QS0]TB+:F.*5D44]USTW`4PAQ)#@T\2MT8RF0$`'`$``!P!```"````10`!
-M&%-!``!`$0``P*@!`<"H`0(!]`'T`00'Z:)Y162IM$J;AZ[)A<ND[^4N("0(
-M`````@```/PA``#@'5O"MC[1-6-7,#A]BAR9FT]M4/8_-54N+*LEGZ#2G&66
-M_U*?\*S&9$^"RHJCZ6`F"1M(9JIY+%.85_+BB6D.`JY/V3^H];<+Q]D?U9.K
-MH9=622^N%KR[:VS$9NI8&4?*S9*1S(<;%VQ&K[[X,VU+CMIVWM+J.#Y=H)TC
-M9H9.&94T\L@6&WAEF.36<FLZ]C6W':]FO52:,1EP3BQ0E5<?6D=7E?SY3\>T
-MB_+,V3(GIDW6['L=CM,.YKE4$'BUY4=*N1NXG#_@U0\"Z?\KJZ.QPVEW%'`,
-M:WI`T00=/4\2MT:WI`$`_````/P````"````10``^%-"``!`$0``P*@!`<"H
-M`0(!]`'T`.0&R:)Y162IM$J;AZ[)A<ND[^4N("0(`````P```-PA``#`/'RA
-M].*Y%2__=:IR<P/86?2\\^3XI$6O!6R]C9YC$MM'.$)-EXV`C\I\ICP`\KBJ
-M!S\>'<LY?(VY)`SC=$A9N^;DH("4IB'RI!AII$]?ZG><POE;.8H$-MK1I9UP
-M+QAZ_^)6PV&M#_-;,&!@C-<^''#>12-:K3[E],$<):R>!B>[]N.V"^K6HLYI
-MAT-4IWX!J5JK1,XFCQ,-5N>WM.:%1I4<M9AB#W+)U;T?:8OU'/KG)6L.0F,-
-MSN@\G;=/$K=&<J\!`&P```!L`````@```$4``&A30P``0!$``,"H`0'`J`$"
-M`?0!]`!4!CFB>45DJ;1*FX>NR87+I._E+B`D(`````(```!,*0``,/\T`>RP
-M?<DVG'B&0^BT67%$U_<YTL]"6L%M5>[_"&N8'':5TH9S\3'OU2'13Q*W1L7*
-M`0!L````;`````(```!%``!H4T0``$`1``#`J`$!P*@!`@'T`?0`5`8YHGE%
-M9*FT2IN'KLF%RZ3OY2X@)"`````#````3"D``#`MY+K"G^=Q%A&^:&'](0'/
-MT0*_*,BC2_*H;:0Q<IPN<ZCX/[S0FRB9Q9&U\$\2MT8?Y@$`/`$``#P!```"
-M````10`!.%-%``!`$0``P*@!`<"H`0(!]`'T`20'":)Y162IM$J;AZ[)A<ND
-M[^4N("0(````!````1PA``$`O?'ZUU&^K&"5Q!B3"Y5TZ.R,34QE+NUC)\<M
-MZ3EG!-)&D1E5V`35N_RS!S0N1!^H7)_[*LZ=0R[Q9FT0HT8D?_1U@M;F+SI3
-MZ+AA$@Z(H*JR%Y-IH>1B;&22GE#S?HWF\YXXQ^C2F8I@46O1+:L_!UH)`[Q7
-M..B.H"X]R@O]&`^,<?/_6UJ=S'R[[]K6F<[N:=J+`Q:%EIP&./#TK8(@JE/8
-M8R"3F`WG0]GA&>$`M4\,ULRV%(M7X;SBTU7MWFWPW1OTM<>(@F"FT*>8!HBE
-MX$C+2VX3"'].X-'ET(P`&0=30"9D:072$!UI+>PR),RK(JB'-^`4"`C>#-^0
-M3Q*W1C3U`0`<`0``'`$```(```!%``$84T8``$`1``#`J`$!P*@!`@'T`?0!
-M!`?IHGE%9*FT2IN'KLF%RZ3OY2X@)`@````%````_"$``.#FO@XKF429OP]`
-M5;$N9FL6[&O\8&V9\2E!QM,&7OW,SX@Z&+G2YZ&U>?(:.9/TP\9V1#ZM@CD@
-M1;7/;[;>>,U4Q\FW5G'X:;2TC&`4-5EVF5:R#E$^)41O[C$%V$ZV9=%9&J!G
-M5'-+E63?1-I!'NGCY,X1I<7A^\AG2E/RI6RU?2(F@5?<8RR@$6:SS3I:4;<T
-M%K.OU\.1DJ6\B561@T:(L`A:("FHW+5\@?CV5I^(1PRM3!/K^LN-PW?@Q'74
-MZ%E-XSFV6LY'.`G,.%VQTILK40[P&IP^HV=LIE1;3Q*W1D("`@#L````[```
-M``(```!%``#H4T<``$`1``#`J`$!P*@!`@'T`?0`U`:YHGE%9*FT2IN'KLF%
-MRZ3OY2X@)"`````$````S"$``+!/)(MV:<!0@M&N1D1F@/;&6AZ&[6N8,3^9
-M)\(+\UNIGKW9#;\A@H"81J]S,X*38TU0/\V5N%(YRDX=&7(7D%',N0-[5E12
-MO:'PP$^#61$`R;^!K.#]N+M-3[EZV)#,/I@3/$%D3O"^]L=).BL`'+3-%GFH
-M$#(%[.3;'!^F-57#/O<T"S,)<BN=+U&@@#[<SM;27;+)#A74"K7=V&C^2[O[
-MEY"_1@M5?:J<F7X*3Q*W1I4D`@#L````[`````(```!%``#H4TH``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:YHGE%9*FT2IN'KLF%RZ3OY2X@)"`````%````S"$`
-M`+#^$#MO=ZA.T-E?V7\)LI?VO'_7R;,<3>^$7N3_9HY7)3^'2`5SWST4)*`V
-M=?>P0=S^)`?(WV,3RZWLQ^XZ?.3*5U?-3.:.C^'`8LRR%U"#JA/#T=+^YD8+
-M@LEV>E=\6;>L*M9/;44RLX'&4Y<7M-1((TO\0FC<;+$-7[P>GB2/Q^#+QBV/
-MYC69"/?N;7#^TX\J.J38B!/[VF[J)H,*CCP&';W_LZE&#K+\-[L\3Q*W1BE!
-M`@`\`0``/`$```(```!%``$X4TL``$`1``#`J`$!P*@!`@'T`?0!)`<)HGE%
-M9*FT2IN'KLF%RZ3OY2X@)`@````&```!'"$``0`*B.`^__H:Y8/EM@M^CV;I
-M7,+O3U&!*^?L!\L;'(DD-JH'VC4NHL'L<'4OA>T._ZR<86V+P:,^/\-./;8L
-MO)Q1]2+[1:)-LC^]P\S_I/:^\L=IE4N)^5GMP=B;30$+;T<MLC`8A`@6P\'7
-MXQ?M"=@PR!-D9^I`P$S_%*E>6V==/X8/QX`QMA%[NE3:Z@*)IO5,5%&;PJ`9
-MM++&>7B<_)\=!O2H-3O*^+_S^ZZET`-IH,<`$/#9=7*.WL/+I>15G6:14)+(
-MP+OS02W*YR,YM>9JB:4S0"D1;E_A8BU$KM!!/OMIS(!F!4=\Y"N]Y$JT[%B9
-M!SN[^$:(XH;;F3Y/$K=&%TX"`!P!```<`0```@```$4``1A33```0!$``,"H
-M`0'`J`$"`?0!]`$$!^FB>45DJ;1*FX>NR87+I._E+B`D"`````<```#\(0``
-MX'VI7:S>FBF4.;[A?-*#67-Z\E#(&.X+NP5B>:;@%Q<!!L&WHTK<\VFW,256
-M3H6_I3B73W`)SS-X"[F#1MW2P^I?RH;+/]M1RPSZY-(,@%/S&43Z;"?\O$K;
-MOLU)U>*7L6;99CX(1-OK90G7F7H=+[^=Y/__N<82UK_34L3G.21*1G57MTB@
-MNW>U:O_?G]8O;"#7;-GF@)92DK2"1BJ;O?%4V4G.#VQ>1BV*F/6^R%B>9R5<
-M\J7LP)47[T8J#Q8!AGTJ_N4:^4PF$-='=SO[UY!5M4.^\?_<5[2INMQ/$K=&
-M9%T"`.P```#L`````@```$4``.A330``0!$``,"H`0'`J`$"`?0!]`#4!KFB
-M>45DJ;1*FX>NR87+I._E+B`D(`````8```#,(0``L)P#<Q.9>#@6UU@S8DL1
-MB@QX-UR(!8<V+4B+^IQ!V>%I(LR#7*IP^Z/H+I&VJV32?PL(9.,9$[*EB1Z8
-M2%0#E\R^PT#3<UH*$Z#H]GEC1*H(N!K/Y(9ALAFC=T6+=U6D.$)@AV)CSI>J
-MTN<<=1^.JXJ!)Q(LT/\KR(*OPW.%\SD?$[Z#3:C2J`X;.!N2(1"0M^YE![1@
-MG;WOYCO^DW8+^_UP9GIDS7EH7[EDW:E/$K=&Y'X"`.P```#L`````@```$4`
-M`.A33@``0!$``,"H`0'`J`$"`?0!]`#4!KFB>45DJ;1*FX>NR87+I._E+B`D
-M(`````<```#,(0``L.`L:[*CH,7._+L&DB\A?NTET+,G..D3W3BG4:CN@>.V
-M=V?.,J+KZ$&M8%24;OEBGGMO\BZ[:W^$+U^*?#N.Y9W1V@VVOZ\LEU60`_[_
-MT,UR::L\8CK>E;6$D.\=CEI&H&U`F1T>`>A)VIQ.`L'C3+QR0C*SS^&;\#.`
-M],QF,+25.K1F0,(BR/5VUVXG0._EC+7\D*Z6KL26LB4TUM-4`BN*`<0VAQ=[
-MFG9[*VQ/$K=&?Z0"`(P!``",`0```@```$4``8A33P``0!$``,"H`0'`J`$"
-M`?0!]`%T!UFB>45DJ;1*FX>NR87+I._E+B`D"`````@```%L(0`!4%P!+.TD
-M[PEB!M6T/!V6.3]OU4='$FS@(C7U=+[G]$PX17<(4_[2W"*!Q'>?Q,%;X35#
-MS0#%0;6N(F`(O]B5G2>J+QRP)WLZYJ':!;.?GP].2\0V(+)=R%7<[Q*WYOI;
-M'[@-(RWL9-20RFL;/9$<78?N$(J^Z(H'YA?S)$C=&+Z^%;KZK%\&5]'H8TAB
-M@B..>.\80`<>2-.I'T9KY2P[DMDC]OQR`';D&3N;-DB[HFVZ:"&O=_B!3"HN
-M<CQ%@_.,G$P>A>HT`:01U>$O^0-T8U)DC2&S5U`>S^,-XQU#LO+$462C*_"C
-M]^4A>>]%Q0I6CSS@[)`2MFI$_JOLH"C;3WFA[SN4?'T3S%V]0RS3AM5(]77\
-MK+JSID._82*%.Z+'\[)M[8JR3>P`Y+AM+R$K>#X'+7FB;O'P,3-&VV9N(#W%
-M%7`%!8)BJ@/4__HV3Q*W1C+9`@!<`0``7`$```(```!%``%84U```$`1``#`
-MJ`$!P*@!`@'T`?0!1`<IHGE%9*FT2IN'KLF%RZ3OY2X@)"`````(```!/"$`
-M`2`^9-*P5.B*."T8)P;60_WQNI5\3XJ)Y][7DWSPRP<,KM[A^/U3=6\[?*@L
-M24@45N;WF0<6,I"U<)(?;OP)[9+T6C06Y6!UPL=")9]!E_E)#6Z@U%ZAN*+J
-MVN'.$?MT4H,T6ZH5(CCN2D;@^]^!."9_9OO'LBRBGQKO,%VPQP>G>I@:9J==
-MLJ91FX8^])X>`^M]"_M7*/6J)"PD4C/;7R1-V_\>DD+"&LU>]W?WKF4>)D9?
-M@=98'(%=K+A:EQ"8DSRB_N#'9P..`^.UCD^Y'E&EE>QG@UT\8\5K0U'EP#QP
-M'I904.@YSXNZ,KSDTDB"C8^,@\X4C\.\G``;F1P*JO:;[%O$G7ES'\-T<_)8
-M<.0-)65\RSZ6E'$,3[RB\$\2MT;\_P(`?````'P````"````10``>%-1``!`
-M$0``P*@!`<"H`0(!]`'T`&0&225U']IC]1Q%#U(+4J7!ZS`N("4(````````
-M`%PJ``!`D%E/_%I(O_S3'R)9U-Y*9REV06UE1E4)W$8T5J6O!]0UI&!2R^+,
-MC44LZJ>1?#\&"T8\B!VTL^\R!G>T3Q*W1M`+`P!L````;`````(```!%``!H
-M4U(``$`1``#`J`$!P*@!`@'T`?0`5`8Y)74?VF/U'$4/4@M2I<'K,"X@)2``
-M````````3````#`?<HA^WPUV^VHM9WF[+0@['41BD]W8JK8N;)<)Y`Y+PK8E
-MBP<D"F$E7<:O9$\2MT;L&@,`;````&P````"````10``:%-3``!`$0``P*@!
-M`<"H`0(!]`'T`%0&.25U']IC]1Q%#U(+4J7!ZS`N("4(`````0```$PJ```P
-MX"V0[C,84W94>PC'@/J8%G%)9H1XO-::LQ^+4N@%1Y*T<0/ON!:/@(V+AVQ/
-M$K=&AR@#`&P```!L`````@```$4``&A35```0!$``,"H`0'`J`$"`?0!]`!4
-M!CDE=1_:8_4<10]2"U*EP>LP+B`E(`````$```!,````,)MGXQ$P\[^>X?69
-M`B?;;#&ORO+[%+8,(RMAWE*O>2WO69='C;O^FXLU/;6F3Q*W1OP@!`"8`0``
-MF`$```(```!%``&44U4``$`1``#`J`$!P*@!`@'T`?0!@`=ET(ZUJ"QUH4$`
-M`````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``B9E'1?Y']:&%:']6Y4XHED&.^APW6!3=W5TV1E81GB79
-M;/5Z*.1FHA,0JA#&+S8L`__@$83I@%T)2JWM0:`&[OF*.RLP.W)+!KK:]$G?
-M`;%0LN&@>PXD<5+OD%/,Q43<RTE#$;;>K6]A;Q/QV.U/.#(#[89P^!\%4,(L
-M^BA7>.4I```DBQ6A(&2[%7V@?9BR-IXV?J5"33\_-7@I'#J9C+8=*3XI```<
-M``!`!,&RN5-1Y[V2&I\E$%M4X'HH/Q`;````'```0`4'161DGOWB]V)6@=TC
-M<FZZ+-BGOT\2MT;E+P0`7````%P````"````10``6%-6``!`$0``P*@!`<"H
-M`0(!]`'T`$0&*=".M:@L=:%!```````````I("(@`````````#P````@``!`
-M!@````$Z2&KR(2/VTMK$U!$&J\V62_I8.$\2MT:)/P0`N`$``+@!```"````
-M10`!M%-7``!`$0``P*@!`<"H`0(!]`'T`:`'A=".M:@L=:%!```````````I
-M("((`````````9@A```@``!`!@````$Z2&KR(2/VTMK$U!$&J\V62_I8."(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``B9E'1?Y']:&%
-M:']6Y4XHED&.^APW6!3=W5TV1E81GB79;/5Z*.1FHA,0JA#&+S8L`__@$83I
-M@%T)2JWM0:`&[OF*.RLP.W)+!KK:]$G?`;%0LN&@>PXD<5+OD%/,Q43<RTE#
-M$;;>K6]A;Q/QV.U/.#(#[89P^!\%4,(L^BA7>.4I```DBQ6A(&2[%7V@?9BR
-M-IXV?J5"33\_-7@I'#J9C+8=*3XI```<``!`!,&RN5-1Y[V2&I\E$%M4X'HH
-M/Q`;````'```0`4'161DGOWB]V)6@=TC<FZZ+-BGOT\2MT;$8P0`4`$``%`!
-M```"````10`!3%-8``!`$0``P*@!`<"H`0(!]`'T`3@''=".M:@L=:%!\($$
-MT4[+D70A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(
-M`@```@,```@#```"````"`0```(H``"(``(``&,47(=4_YYSQ?OP&A-;Q[_Z
-M"12[0:C6QSMNS9W-'7UZ*HP17&K"O*4XI/68*KP"D`VD/D*%I:T4Q([N=_'^
-M4F*LRWB[LFZ;=;G/T2B_,"#BL.[6M=!`4O$`8.R8Y/'7!^`OE*NB0,AD;Z76
-M';4@>+8]E1_3Y5X'+>4P%5.JD_()*0``)&Z17>7J='JFMX:N,&BP>NKL(U71
-M=;A#G[H*ZW9V6"4B*0``'```0`0ZP4OX6;;F"(&J5Z;;*`^L)W#Q8@```!P`
-M`$`%H!:M=\29Y'\^T3B<=R;B(CGN/N-/$K=&7Y`$``P!```,`0```@```$4`
-M`0A360``0!$``,"H`0'`J`$"`?0!]`#T!]G0CK6H+'6A0?"!!-%.RY%T+B`C
-M"`````$```#L(P``T.@%9)D^V50[.IXM>S647F3GT,N%K5PL]C8M=0KYPWC&
-MWA:$6/PL<>DA"X:".K@KRA,W2;)!Q#@BT'D50>CR#9,)CP),@#(%_Q:RFE;C
-M!L,UM/?=(4(*L38_IM[LDORKK1.+E4=FP,F`+%_B?T=:61K@&,9I6+*2S!<<
-MG4%N$*!J%OJXLM*;50!%C'96@L%2@E!,P')K_XOK`;@&7/D--W_'+"L:FBRF
-MDV-A8+&6G+[Q4-N;#&]&=)8D#M9U;Y2JOR5]D-Q4V?VRA_`<#D\2MT9BJ00`
-MO````+P````"````10``N%-:``!`$0``P*@!`<"H`0(!]`'T`*0&B=".M:@L
-M=:%!\($$T4[+D70N(",@`````0```)PD``"`;?EU`R9K8._!^@9?G>C)P=(U
-MGRWV@O^-00M/HLDPN%<]S]+,PZ8^DAH:8=/)(/+MT@F^??P9G9)YT7TK4X/5
-MD>N_>/"`Y,>P9/ZZCZ&0SP+%@N3BX5$$'AED+SJ<B;W@C1.IP%G/)2>!LWX=
-M'K3$/#GN)AQ$X3"%AM>X3D\2MT;?R00`'`$``!P!```"````10`!&%-=``!`
-M$0``P*@!`<"H`0(!]`'T`00'Z=".M:@L=:%!\($$T4[+D70N("0(`````@``
-M`/PA``#@Z&@7K`S?1W`UV,5`346,H<N7%9E-!X2]!&N:(08C5`L*`D9;V1W!
-MCYH=RB;4='*WPT`=D?,E6&$LQ;NGG`'C[?&%=JKS$LMEW#D!EK*.#$D*'W&T
-M_-@K`-!>X[_4)6)\7!5["Y?`<IS,>:!4UXM/<4C)V0/X3P(_J?J^)[$JO0(W
-MX3N_1_/D*&T%.`$\;SGX+EB6ZS0\F8QIMP1^I*F\-XI1N'*L#@\"$Q\A(?>=
-MR[CI\=<V;(?!\^*LH[`L,GXBS-*[SA=;0U2MQO"0H]0T7+Q\:DJMQP"Y-$3+
-M.$\2MT84U00`_````/P````"````10``^%->``!`$0``P*@!`<"H`0(!]`'T
-M`.0&R=".M:@L=:%!\($$T4[+D70N("0(`````P```-PA``#`%P6J$2;6ZPN?
-MW8^0P9/Y;5&F9%0,V;#<M=0_K`W!?L5T,/B#R^3CJ&!3>V=&9)EV:(J+6N)U
-MS)Y2WP>Q!5B^C0$U-=$C=J_X\SB&K&^V4?NIV'/2![^7L>;V;;L;UE#89?&)
-M&9Q"S"`,--1%U@!%"?^MDJ5[7X(PE.(,N8DE7OWH;Y_5P69?Q'2PO]P+538[
-M+X*^3V`#$X^>9[#5Q%F(Q^O@NELR8NT#=R^GGY;1;+8*P8.T8-3RY0Z9$!!/
-M$K=&Y]\$`&P```!L`````@```$4``&A37P``0!$``,"H`0'`J`$"`?0!]`!4
-M!CG0CK6H+'6A0?"!!-%.RY%T+B`D(`````(```!,*0``,."%W`%5-5[:<N+Z
-MVDTZZ'`9CI]D--SO2BW'H`Q$LP+R(1[E]NW:7`,1.;8N3Q*W1F7[!`!L````
-M;`````(```!%``!H4V```$`1``#`J`$!P*@!`@'T`?0`5`8YT(ZUJ"QUH4'P
-M@0313LN1="X@)"`````#````3"D``#!PL%WP0U\X@^6.'OD:<X=#2>:90!(U
-M$@T'+?\V[_DC,\XTEP5II$*\<Z(6QD\2MT9S%@4`/`$``#P!```"````10`!
-M.%-A``!`$0``P*@!`<"H`0(!]`'T`20'"=".M:@L=:%!\($$T4[+D70N("0(
-M````!````1PA``$`,1DU%'*:G\(4>O_`G#RO,3Q@K%<@$\)8?[[;)(=PCD3C
-M*^X]U(L5>E@.V]LHU3?V/8@8FR29*8M`D11O^V+D_+MN.40J\T/$)KCJ6,:?
-MZ;T14-S[>KPUV2=<_21/(V3A85J4E7TY#,R9D=VQDFZFU<.T9(YCX?]OG'7R
-M6W'30&*"BG9^>0OO3BS\O$\B[(;!3QA1#:*4F-Z2[*84("7\*.54&!7*L`%^
-M46<9O'EQ<9*NC.E'KU'8;(=):-!.10()"V/P2*0A]@X2\78SK<O5&:1XM,SB
-MGZ1FDY:+2E4"KFT^D6)ODZ>]=9?@P[BB`R0K"FL!:MM_53W:#!(B3Q*W1HH<
-M!0`<`0``'`$```(```!%``$84V(``$`1``#`J`$!P*@!`@'T`?0!!`?IT(ZU
-MJ"QUH4'P@0313LN1="X@)`@````%````_"$``.!5<NP1VM>`MHP1;Y7JZ>ZK
-M%BA\23M,-"*UZXGP`@(!H`>*`R8L\"D'Q=4UWX,RCT!0.-:9A-;Y8%CT;K&T
-MEE_L"3`#G]6]B(%WP.L-H'!T(27C])1B\PF?MDKTL"DH?K%Z.C)YA]U-[V-.
-M)TXQ)HE$00FFP`2]9VB;B:(/RM+7B@D_]9_2@HVO"MO;(?&ROL*V4BNZ\$[Z
-M!5XP(B-Y'6?+]X?<W-PJ+98W1#A2-Y9S,P;&JD>[[CX&QM7QV";&-3Y.>@C/
-MH%<*FPIV7[AS;ACK+R1ZWD[OD+>.M^H)3Q*W1I`S!0#L````[`````(```!%
-M``#H4V0``$`1``#`J`$!P*@!`@'T`?0`U`:YT(ZUJ"QUH4'P@0313LN1="X@
-M)"`````$````S"$``+![Y"+>M[MZ7T'G;=AC5G[J@=H?1A\7)KQ,C2@&*/.#
-M0`\*/PA[VW#?*5%XO7_1TYO/S_TL'5E:$L*ET^ZP7RU\2M=\*%`,;)I(]0C,
-M6?76+/`^_E+JWMZNR-Q?4KV5S3OC,XA.917X/.L!:-U5(DLP'@S)R/24`3>6
-M][-L71!3.L="!Z?8XM_.P)/:$P,2J]H"&;(]8<0)FIB^E895C1JDN-SW0X_+
-MJ>:[*T/C3Q*W1J96!0#L````[`````(```!%``#H4V4``$`1``#`J`$!P*@!
-M`@'T`?0`U`:YT(ZUJ"QUH4'P@0313LN1="X@)"`````%````S"$``+"X,^]@
-M1U2C&&J[NO.9V6^'EG9M?Q&-H99+<;/T@KP0Z+9Z;L0?H4L+#\OW31V7A4ZI
-M@X8G9]XG#;Y`P<"5+P%CU:#+)C#@>-BR?UF9?I$-O>,LNFY#X+RJ]]("J-]P
-M+<WXLW976Y**(:).CBI5$`3O/0@C0%S3-];.+A"--_228*9$TT/<<LZW$+!N
-MF7`/]35)BT@[2P?^7#8O7!Z&!8]KH02EBQ3=0S;_J<DD3Q*W1BAT!0`\`0``
-M/`$```(```!%``$X4V8``$`1``#`J`$!P*@!`@'T`?0!)`<)T(ZUJ"QUH4'P
-M@0313LN1="X@)`@````&```!'"$``0`?ZK8%5L]2?U*\Q,`MLX(^%N[X.!VY
-MV_T%;>APM;>(R8I;&:0HT)^`=LNQC2V8)L8QPTO4>'@(_Y<Q,HSVO$6&="\Q
-M;`'`1:X?%0O)BNT#+::J1]I%NTG^!OZWE4)VR$A^,$R6N$'3:;>W_QR/JS-=
-M!THJSX[(+"6>E)'&`1*IY]HE)OS7_L9:=DH]72G%`12M0[&H0,*+#1Z/>W>T
-M5-'\[G*&J%IJORWJ8C[;&?8\;W'UE#LV]KD"^([F974S%.D:IL&AZ*MU6Y)&
-MO\AV9`N?Q+J1H!`#"^N`2_$]T4$Z(95$;O1_BOSFI=#/.6<&1XNFV5LOOCZ8
-M=GI8._)/$K=&[G\%`!P!```<`0```@```$4``1A39P``0!$``,"H`0'`J`$"
-M`?0!]`$$!^G0CK6H+'6A0?"!!-%.RY%T+B`D"`````<```#\(0``X,PYS4E/
-MUCJXN!(@2QET&KK$;1\`I'!^TA=,VO>Q-G;?#;+BV!/X`%E@9@(6&?H7'(!U
-M9U]4<'WIY!B9WV.;<B"KKCZZ0%2Y&`,SX17G\?,;"EY>^^*BQ#K07(WF"(8[
-M:S@1'((_J]2EI\HH\RCN`H1=6G,G+_TLC-P]'F[SD'_@`+"4%F!P5@MQ#?6@
-M`@3CN036:8($^)C@@)GSBWV*@,PI&1A,9@L\&V4,\R+=;3J0[)"Q7\Z\?51"
-MVO$XS<8`TO<JV1:&(!HO'QT0:LYZ85L\4`)D'1!]:C?$$X%/$K=&L(\%`.P`
-M``#L`````@```$4``.A3:```0!$``,"H`0'`J`$"`?0!]`#4!KG0CK6H+'6A
-M0?"!!-%.RY%T+B`D(`````8```#,(0``L"IC-I)QV[D6IEMSWA(!P=H(03G1
-M03Z,U6P?$01],YUPIY]NI%GSK)^2'^0SCGQL(53=5=NS'A0&TQ*'^^OV@FE_
-M9_SS&`V:GQ.4,8J!NQK^YT)<6PR&7#AW1&:EZ3V'5;O@?PBS+X\Q76$JA]R.
-M8!`H<(P.26Q3H411NN9SY:RA"'KV^YX/_GW(M2'$[2`8#N#%P[M+)@0QFFB3
-M5TBE^H,FXC?,S^I()2^G9`E/$K=&OK8%`.P```#L`````@```$4``.A3:0``
-M0!$``,"H`0'`J`$"`?0!]`#4!KG0CK6H+'6A0?"!!-%.RY%T+B`D(`````<`
-M``#,(0``L%@ZX@VK^>+.$X`ZK)%BE-M'T7>$2Q-?%/58DO]4NCO+G)-_%VJ<
-M^S]6^UVG<4,KO-ZX<#"MA9S;Q%O9G)G[>>"S]U`JNO8!)^KM6@'Y%(6\P'Y;
-MW&C9Q,K>?(PWU@BOQ-'O]ZH/J6U*0>!""914GH0?)R_^&Q_>V+VV`XGE@F&2
-M'7*34'('=P]G"&HQ])BE/%;4G!<7V(V]&_E,OI]<\!DN)S&S6=D71X'R`QQ/
-M$K=&O=T%`(P!``",`0```@```$4``8A3:@``0!$``,"H`0'`J`$"`?0!]`%T
-M!UG0CK6H+'6A0?"!!-%.RY%T+B`D"`````@```%L(0`!4+1]WU.(C3HO4?C(
-MB3Q4..\6,GEPA[BYT?J60VB>VOW51:.W94:#2<&`R;<@I"9^<;>LBEU!TV.$
-M&PJ!#1\7V:M5A*4**RVARG%^/V@'YI,I#,#72`%(5ZCH1U:M>.F)5?.Y)$6J
-M[CWAPG<6=2>(M,P^)SOV#UQ>E=W:`+5GU,T"S$SK?*QE,E`@G@@;4^\4>GJ"
-MEZ-]?F=<Q^A@KP[\IX(BVJ?R.!,5^X'^'TKC[P"BE9[8F25UG:B$6JJN+XUU
-MB9R;M?M1^;6!X(=SM58?:TJ@MFI3BBOHP^3Q8>RT%U`SVB#`1/4%[(&I0,3/
-M@FRMP;:]"]FE\#R.D5>Q'M=4(+'AQ3H2<B"'YV?#.FOXAWV>ECU>(G3RB:*>
-MDH)64@STA&.$1Z,":3!>/7'!SRQL_%I1^_L7BUU+UCQ9@$K*T=[`#'2!.3]3
-M*Q3H]@W>3Q*W1@@2!@!<`0``7`$```(```!%``%84VL``$`1``#`J`$!P*@!
-M`@'T`?0!1`<IT(ZUJ"QUH4'P@0313LN1="X@)"`````(```!/"$``2`("QA?
-M+*.5Z&7C9'7Q30%<VG"2)I9'=YBG*1M\;2\'A)O)TKYFNYU,"Q>8R(I:8\8S
-M'^OYNQD%_#%_!O^<)?`:"3R5:XDS?ZJ\A<OIE1^-8G4F,R"'=A+T/GN:+:,.
-MX<7I.YYZX+;X:WN+#.+!5++'^Y97/3G<.3O=S.A9:T*>H#`*T-U>=D<'+[N5
-M@OQ)2V9BH$MEX/V`-V;147*IO1IHO,4GD.(O^B-.P/J"9<\&_=EDKI45_41Y
-M4X$]^E"Z083N--#QJ*#R]`6%T`,<]R_!$MQB8DX'V#WO#3V#_)>.8&5-C'8L
-M>-/U_8-@BR#=/,!(G88R!U0RM/[\A(34%7=@GN*YX2)%]KS7_P-E\=_<MG3/
-M\P)7%AHE$2H'?$\2MT:?.`8`?````'P````"````10``>%-L``!`$0``P*@!
-M`<"H`0(!]`'T`&0&26@Y)B7W?V7T\C7X9IPBR_DN("4(`````````%PJ``!`
-MXJ?->+Q:C$;*QO7VE;*8YF.$F'UGBS*/6'I3'09=R.`XM$20"O=74:"2(G^;
-MY<".,E`TE6(E#+HS(VFM3Q*W1DU$!@!L````;`````(```!%``!H4VT``$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y:#DF)?=_9?3R-?AFG"++^2X@)2``````````
-M3````##H3M=G`5X0^KM;2VN(&=3-0BU7>.UP109<\A=[Q&XHEH#+D"P2ER)(
-MVN^$=D\2MT;A4@8`;````&P````"````10``:%-N``!`$0``P*@!`<"H`0(!
-M]`'T`%0&.6@Y)B7W?V7T\C7X9IPBR_DN("4(`````0```$PJ```P,,H-/"H!
-M5)WLK.[C"[3E*I7YK5.Q$ENY>@6!57P82@Z#N`!>P?%RS.0SX0Q/$K=&(6`&
-M`&P```!L`````@```$4``&A3;P``0!$``,"H`0'`J`$"`?0!]`!4!CEH.28E
-M]W]E]/(U^&:<(LOY+B`E(`````$```!,````,$_N<4SBDFQ[:3IZ#%%9Z/IR
-M=2P,<(XIN11T'IQ"(X?=,I\JO!D[2$9<\_@43Q*W1M9<!P"8`0``F`$```(`
-M``!%``&44W(``$`1``#`J`$!P*@!`@'T`?0!@`=E<1Z`T]$DX+,`````````
-M`"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``VGORFA<#-`SCNT\]A$&MZL%]'*0_@\0%>67*(33U*Z=FPQ!TR$RW
-MW/,;P'XP7X8NR'X0VR/6B01M4F$UL[/D2[N>.G"OO]S_2AJG7HJ#9RF--5D^
-MG)/?&3-ZRB'.)M5P1<_K-2P=IPU?/['/RJ;0AK.7*EYATVK\5\8@O3=\12XI
-M```DDJ%>Y'!1TL%/JHDE/U"4>1-DC#&Z?Z/ED7(.??HL:L(I```<``!`!$JF
-MD['*(8Y.=7TLFZ83(SR%;);L````'```0`5_AKCSF-%+NN!UOZ"Y)DWE31JE
-M`4\2MT:^:P<`7````%P````"````10``6%-S``!`$0``P*@!`<"H`0(!]`'T
-M`$0&*7$>@-/1)."S```````````I("(@`````````#P````@``!`!@````&\
-M'Q7.MRI633P-=!B)Z>&TS1_ZHD\2MT8E?`<`N`$``+@!```"````10`!M%-T
-M``!`$0``P*@!`<"H`0(!]`'T`:`'A7$>@-/1)."S```````````I("((````
-M`````9@A```@``!`!@````&\'Q7.MRI633P-=!B)Z>&TS1_ZHB(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``VGORFA<#-`SCNT\]A$&M
-MZL%]'*0_@\0%>67*(33U*Z=FPQ!TR$RWW/,;P'XP7X8NR'X0VR/6B01M4F$U
-ML[/D2[N>.G"OO]S_2AJG7HJ#9RF--5D^G)/?&3-ZRB'.)M5P1<_K-2P=IPU?
-M/['/RJ;0AK.7*EYATVK\5\8@O3=\12XI```DDJ%>Y'!1TL%/JHDE/U"4>1-D
-MC#&Z?Z/ED7(.??HL:L(I```<``!`!$JFD['*(8Y.=7TLFZ83(SR%;);L````
-M'```0`5_AKCSF-%+NN!UOZ"Y)DWE31JE`4\2MT8<H`<`4`$``%`!```"````
-M10`!3%-U``!`$0``P*@!`<"H`0(!]`'T`3@''7$>@-/1)."SI'TCFFL(S\$A
-M("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,`
-M``@#```"````"`0```(H``"(``(``-<-?LB^]*034@$4(;I3V-QPS;:=<;:V
-M39P`A-'5N-7A<F$;QS\%)1`HSL+3U#W5%?4C2^27K$\5S-KA0!6S4PFR.*VB
-M:-"U_O\$?UJ-*H@:[U%2.C/JMF2%#$;;X((XR`'$D5/U\Q-;SA%;S,[HG'9S
-MGO%)PO?DTOPL%ZC<,2WT*0``)%DB"L;^DC_62Y*!8HIOX\FST)!ZLEKP8UK\
-MOST09P\:*0``'```0`2MLV53%16EG'Y-E$R7)9L2W@E4T0```!P``$`%^MN-
-MQ5C&PMI!J=;&=T9L$L0:&!1/$K=&6,X'``P!```,`0```@```$4``0A3=P``
-M0!$``,"H`0'`J`$"`?0!]`#T!]EQ'H#3T23@LZ1](YIK",_!+B`C"`````$`
-M``#L(P``T->+L^.3Z0!O>K%X&3G?CRQ?BHAX'H4D0$*]K*!.Y>&M+7H,."'+
-M7NOIM_BE7M:=_2SK7/"_/G?#1(,AJVD?:.(Y*#MJL-^<OH0(!!!/I_/"'(E$
-ME&ZW8^UTY]Y2Z"97'MW66IYM8@.%">#!.:?X%0A7B[)OG%Q/]^=4G$L,;KXN
-M(KW"I&>XB(*`U[93K;-S0Y#.+=L)N>FNS!\A@A$&M:SYGDK5&^<"MSOPM2I+
-M['#$3<"F>=*4L>GB/7>MH##=:_W,D1P<2DQ=]\9KGT\2MT:;YP<`O````+P`
-M```"````10``N%-X``!`$0``P*@!`<"H`0(!]`'T`*0&B7$>@-/1)."SI'TC
-MFFL(S\$N(",@`````0```)PD``"`S>J!'F%1'D0`]DM&YHV'1G*\*HK08;FM
-MFXSAW[8UJ%!)@-^)&,];+:J9R_B1CJ+XV;0%D-!!ODX[/MYWH%!"92PUBI1%
-M47&[W.WFCT"E',HRJG0WWK,AVHEB9<;3WG9HUX";V/I:HVYX?+=WM@KX\BMC
-M/ARHC.UW=)G3+4\2MT;:!0@`'`$``!P!```"````10`!&%-Y``!`$0``P*@!
-M`<"H`0(!]`'T`00'Z7$>@-/1)."SI'TCFFL(S\$N("0(`````@```/PA``#@
-M.E+7ZD&!^_\MZ^?;GG"Q:G3GE#'8VV1F^VQJR3\4S3-XQGYR+X'9V=_?%EDV
-M9/S;_F:V#"CM)/UDE;1Q0N'DG8`':,3OH"%QH\O?K"H@=/RMTC:'+,==X/3#
-M*@@P9X-FKRW<832][(4B&M5Y`:)O]T;3MU*E,2G,\/:!K/Y5(H.?^*[HV-V0
-MX#5["47$_)[W=MI,P]"G\YO9F@.ITZ6/1PU&9.>2ASA;#)'5KPPN4(R%M7#O
-M3:&Y+\A@[RKY*9*^=F;P!:0BJ(G#]AT62YWVGX"9K(/L[*]@ACN6^D\2MT:A
-M$0@`_````/P````"````10``^%-Z``!`$0``P*@!`<"H`0(!]`'T`.0&R7$>
-M@-/1)."SI'TCFFL(S\$N("0(`````P```-PA``#`BT\T<+:GB*/<.FXNQV<P
-MJCNCLP.H+5P<[*:W.K';"Z[PW1#_YXVZU`5Y3[[*NX1Z&GP>7*VXZJ$/L51B
-MI`#4)R4VH&3RKQPW7".FM_3ZE4I1?I>"#^];*8LP8V-%V>D!ZD8W(5@3Z@E>
-M,[[NB1?7YXMFD$EK'40&%>Y@%[PT5"\]DY/\4<R^88X"_\"CS4E=2,UI^*-P
-MG9EEQWHQR6_E!(B?)10N6:^C9]V55.\^T.#KULE6G1`-?A,,D7!/$K=&#!P(
-M`&P```!L`````@```$4``&A3>P``0!$``,"H`0'`J`$"`?0!]`!4!CEQ'H#3
-MT23@LZ1](YIK",_!+B`D(`````(```!,*0``,.A29%LQ,$WF)9\OZ:`C/FUD
-M1T2SKM!\9X*H%4F!^76</"$/Y#^TWOR<KGF;3Q*W1K,X"`!L````;`````(`
-M``!%``!H4WP``$`1``#`J`$!P*@!`@'T`?0`5`8Y<1Z`T]$DX+.D?2.::PC/
-MP2X@)"`````#````3"D``#`T7;>[Q[^.E5UB[$5:7/W8ZWHU@.2N7O,Y#!(!
-M3%V%>M1@1^4S1TO&TGX6TT\2MT824P@`/`$``#P!```"````10`!.%-]``!`
-M$0``P*@!`<"H`0(!]`'T`20'"7$>@-/1)."SI'TCFFL(S\$N("0(````!```
-M`1PA``$`[1=="0Y<,T\5Y/`/[&_U<B=7-,5W.R,*=KZ-XK2(DR,AMG_W\AO+
-MU0#LLW[:.K;&:&G)D*6AD#<C*,`!&=-X_.)GI[$.`51-!DZ;QM3RX.T&!JX2
-M2:IDK,[4Z*@Q2E__?/2PI/$#%O?4TP.TNX`\X0N!`BRR>:_H:_K@CR;1LQ(+
-MKKP3O]-[^2()E?U6;'S"<#W^0HZ/*ALH`_SI_@QW;T#PFA$#BW4@Y3;6>J$%
-MNN$@YZ^-9_&,$>@S(\2I6FUJ*G;#04QY73^KDBOMO93I;&J7=H<'<SWWJ>A&
-M=E<\N^AO!K^&3;3FX1JGRCD%%9%Y^$[\(KV_S\-0O_KI3Q*W1L=>"``<`0``
-M'`$```(```!%``$84WX``$`1``#`J`$!P*@!`@'T`?0!!`?I<1Z`T]$DX+.D
-M?2.::PC/P2X@)`@````%````_"$``.!;C6M#3C%TIFCMR@5]OC;M:BM=2FYY
-MGJQ)EA4MJV#>Y9E)4*\"4Z:1B+L=_TY3TDS?K;P?*0W7];L?2[/()*>GTA]W
-MW8$4O5+XJ?7$:"W)6SE&O',PQJ(<HN/VO2JKLBMJWPXCE\MQ7I3^;)EFEA.X
-M?VJ)U*,_%[:G8V(`P7+8X3J"2$BWAO`4#/O?T,L`^@VT+%__']KBC^F><%(C
-MGJ=JH*AN_E(FL?VU!"A*7(\F3EC4KM28/=X65?C27,K!*KE'_S8\:B0J>,E2
-MD73\%".RQOVOH6WK!,UQDC2`3Q*W1BEN"`#L````[`````(```!%``#H4W\`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:Y<1Z`T]$DX+.D?2.::PC/P2X@)"`````$
-M````S"$``+"[BD*'*"14.I0^Z;F^HA[<;GK\Q"W7F%^=$6M.5+5I$*,5_QKM
-M]_2^P'X5B&-5JEWQ9[^<`\2)F@+^*[88[R^_H[`XI?(6^?ZC<[/8SF^%6^4O
-MG/=GH6WVIT:H;ZY4&@T/@RLX9TI@`BK!S?3M58,(<H008"\?(VJ"T\'W)T=)
-MQ'^O!;XJ]2W<0=6G!H\WS3HVN")%&ZUCS+J<D-'<S[]J>)\!GL49D4HP\TX)
-M3Q*W1@Z1"`#L````[`````(```!%``#H4X```$`1``#`J`$!P*@!`@'T`?0`
-MU`:Y<1Z`T]$DX+.D?2.::PC/P2X@)"`````%````S"$``+""&]$W*E"F#2,C
-MX+")("V]^R02/XCR:)"G$>1>0FYL@E=6VO'9)'.=IPBCDH(TKBJSO"US<C8A
-M9%JICVA;%B&E:%-P(C?NK8#H#!I;+WP\H"[3^]0(YTD0/-=K#T@=HWJ&`KRD
-MR""P__I\>.3&#'?8"K;%;)FYR"UY*/ZQT:,<Q8NLU&%<]H5EYT]6NL!THH)B
-M>T7YIB/=*^+NN]Q34#C5(0R14J&%:?=(7FBO3Q*W1ERN"``\`0``/`$```(`
-M``!%``$X4X$``$`1``#`J`$!P*@!`@'T`?0!)`<)<1Z`T]$DX+.D?2.::PC/
-MP2X@)`@````&```!'"$``0"\$U<[J!ZW8;EG^-:EC_PE_;.J>VRY?R(3:,;#
-MYVM/ER[,^7S1\M?9$#4:=S!)LJ/K]*O$#80Y2]?HJ2CC6-*C!P'"V$B,@+B_
-M5,X=N\E(Z-<BZA$Y-$R.NB0IW@$@<\VBQ6W$QT<B00]4]%>EO3K0VN`!,Q*V
-M)(7G[MF?PU@P'^W=#CP%*^_%FA8S=U;D7;WJ!/OTGY_"=?!V4<F'UBN5F'AD
-MD5TY'&C95OV&;OC<+#"O.%9/%@(=%P%>BL;>Q01\#N/_;&VK;0['R[UZX"7Y
-MM4,<?VY(*5H;HZP1(O+(8NCG#$8&D4C]6_\1OKP5"?XS.I?%Z>UW!!</N"=/
-M$K=&([H(`!P!```<`0```@```$4``1A3@@``0!$``,"H`0'`J`$"`?0!]`$$
-M!^EQ'H#3T23@LZ1](YIK",_!+B`D"`````<```#\(0``X-=-NY-OKS?([/8.
-M=>K)'F5@3S754=1;?Q050O;309I=X_Z.19,D/9':=$-'EP#2&+QP(UKZM6H8
-MH^EHMS3=:W4:J)].5<GP'?+>YQ33(L#XI)$-G'F?[P@X;3_NW%;G)%@UUXE4
-MQW7%N7!6)NA'G=9F/`J"=`\:<Q)WYR88GXS-X?O+/VD3C6KBY!XU%?$?W6]%
-M1ENO2UB@@HLIH.$SK)U;(@'L6K5=@Y]ZT.V/V;T,/%"(=IR(<7XZ?&`7K3B'
-M$*ZU+NI7QM:,HSKW9Y&`K";,;HYY-#>]#J0CH1-/$K=&[\D(`.P```#L````
-M`@```$4``.A3@P``0!$``,"H`0'`J`$"`?0!]`#4!KEQ'H#3T23@LZ1](YIK
-M",_!+B`D(`````8```#,(0``L!,G^2RRAFQ\/UOB2.2#JZ+W0?W<^%2"WJOW
-MK?KV`5CHF3*)0%>!0:L^Z<)5\3T-S[KLO(M7?\Z(0%JT\PRC1C:X8ZC3@=_0
-MZR_`+2QGH\H.)UB\PY6,]&L`$\[[3P%5&/BQ,5#,9GXLA":;L!!,:M;U0@0?
-MDKEX8EN80UX%1`@-D,*&<]T(39URC7$)8)S.1G^KHDUL``2WH*PE,K'WU>WQ
-M\.R@D9RBC@O%4EE/$K=&U.P(`.P```#L`````@```$4``.A3A```0!$``,"H
-M`0'`J`$"`?0!]`#4!KEQ'H#3T23@LZ1](YIK",_!+B`D(`````<```#,(0``
-ML#$W@0BB[38C3F*%-/Z>H8)`-A](G`2=O)2B]-E(8H(@TF<6Q>5C6H69B/G\
-M_3]3NM>7H[[&`O/^5XKDNW?RU@CCSH&81NDR"&60.!`2#M+U9CX_6-=3W5&H
-M%BXZ?7&60;^#=V0LU_9QM+GF3)X\.`5<].'*`:BK(Q/GQA)*R2BW')'QFA44
-M2YI'>TJY=R:WBKW=-$X*1*'?HA06>%M;7O<U?H/W%&+&B6O[0O9/$K=&=!()
-M`(P!``",`0```@```$4``8A3A0``0!$``,"H`0'`J`$"`?0!]`%T!UEQ'H#3
-MT23@LZ1](YIK",_!+B`D"`````@```%L(0`!4'Q`&*"4+""*\-^"!;R4;&T.
-M7(3H#KUZP-1:.DO.::(T^)C"`1!$?7V`CTAK%/^^%^/F-;M8G1W_`XY<+(8Q
-MBT;&9T'7\C0ZS0/"OI<NLQ6E8C9BTEI@G`J09*"B^A"IC3>UB&_BU2HJEO"1
-MU2%)<_[YE0%T+>R85MX=`W[^F_G"4T08YRWA1`*7UP(PDPL>N!5_;EZ17A5V
-MF:/%O>&GI_N]"P.%#(RRW_RTU\GFNF<L:?*(_MYF:IZ?*-H8^[ML1JF@!$J.
-M4X=^^Y(?L^?;?G/BQ,9C.<CC4*VR:&ARD#;@7IA8Y&:<TS2:C#>KI=.HF5)Z
-M$20<T#MX=@J?7Z!ST&@G5WO0#387S,;DB]+(;H7S0G$)2*U7Q,I$]FW%WHN-
-M_."!@KM[)7&LFRW/2"R'*2O;Z^/`G"(!Q'-E;.'(+VT9@"0R>6_!CF=4);T<
-M3Q*W1FI&"0!<`0``7`$```(```!%``%84X8``$`1``#`J`$!P*@!`@'T`?0!
-M1`<I<1Z`T]$DX+.D?2.::PC/P2X@)"`````(```!/"$``2"3*9A9@AAO^)>B
-M\)T);S)@3_Y&?4?.&`.TR$!W;`1IZ#6'1:DOYV(W;;']&:F+[\X@F=>$TSRO
-MJ0^S%@#*JS5$].FR9_1^)9NC9"2D,/K9C=W7*GZW0DZ32=A%S%7VEY/<+)VC
-M39S.K2G_8[O@YS11:LV&J@%B[JG[$&1E)%I:\RR9<86%C0MUCAOS+>X(X'M:
-M0,L0>\*_(O&F'E(9[?R>+SXM9QK`_`"--?\#3AG*-,\DYB[P>YAG*OD36*GA
-M"H;WO_[*VWV>TK+BXVZLR?E1EH+TAD#GZ"A0<]KR<,*B8A11QWC!X?@8TCHL
-MH9$"QC-:9.QRQ?_ZK>Z_*4_A)H0$2F10*+AQ2)*L'R368T]I"S/>.-?J91>8
-M&\$)\$\2MT;Z;`D`?````'P````"````10``>%.'``!`$0``P*@!`<"H`0(!
-M]`'T`&0&2;T^R.???CWIAP[K26465=<N("4(`````````%PJ``!`JN$(WLYP
-MT0I+($1WD?/=+=?RB4.42\:):Q>']%D;FXAD,5?@HS@*^`D7/GQZ4GS"_^&F
-M)[1V,1*L1<SR3Q*W1D1Y"0!L````;`````(```!%``!H4X@``$`1``#`J`$!
-MP*@!`@'T`?0`5`8YO3[(Y]]^/>F'#NM)9195URX@)2``````````3````##9
-MVY^1;M0),2AF"N2D;X=,7J_G//4K*J<40B[:Q&0FKB#B`!H%#1K$ZDZN<$\2
-MMT9VB`D`;````&P````"````10``:%.)``!`$0``P*@!`<"H`0(!]`'T`%0&
-M.;T^R.???CWIAP[K26465=<N("4(`````0```$PJ```P#P11:3]SR(R!E]"9
-M&::2`5*>JTZ-<TT4"KH$P&3[@XQ&QJ+K@GMS0=:X<$M/$K=&SY4)`&P```!L
-M`````@```$4``&A3B@``0!$``,"H`0'`J`$"`?0!]`!4!CF]/LCGWWX]Z8<.
-MZTEE%E77+B`E(`````$```!,````,$S;Q#E;G"8SV'Q<$)EZ(7]TU%LTULLK
-MG"9Y,=E+C6?RH$_39VNDR&^9ER413Q*W1DB2"@"8`0``F`$```(```!%``&4
-M4XX``$`1``#`J`$!P*@!`@'T`?0!@`=EYI=4150^DW```````````"$@(@@`
-M```````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M5,.DH^QQT^'T<%T8O/#NXHH2#V8RC`OUSS_,7FI\#!S*K5&5[IG+"!O7D`5.
-M)D,*-X&>[`O8D^*%%\F)*/.']38./*PI+<R;FEULJK/$2/8'S$V2)EEC[_GK
-MQC0^NG%)A2\:YOCD#N8KK<I0X+E`";ON?]DJS34HT?WM5)\S,ZLI```D%Q;<
-M/<2LWDRX\L!4B,.)UM4T+_IYFL<[1%`S9;!E![\I```<``!`!,:-J2,_>OG;
-M*%0^9C[BMU0\&<'O````'```0`6S;+I:<P,,[MO\!#EYJ6FHJ_M^C4\2MT8T
-MH0H`7````%P````"````10``6%./``!`$0``P*@!`<"H`0(!]`'T`$0&*>:7
-M5$54/I-P```````````I("(@`````````#P````@``!`!@````%>'@52##WM
-M=\ZU*S.M2QRZ%,3*\$\2MT:,L`H`N`$``+@!```"````10`!M%.0``!`$0``
-MP*@!`<"H`0(!]`'T`:`'A>:75$54/I-P```````````I("((`````````9@A
-M```@``!`!@````%>'@52##WM=\ZU*S.M2QRZ%,3*\"(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``5,.DH^QQT^'T<%T8O/#NXHH2#V8R
-MC`OUSS_,7FI\#!S*K5&5[IG+"!O7D`5.)D,*-X&>[`O8D^*%%\F)*/.']38.
-M/*PI+<R;FEULJK/$2/8'S$V2)EEC[_GKQC0^NG%)A2\:YOCD#N8KK<I0X+E`
-M";ON?]DJS34HT?WM5)\S,ZLI```D%Q;</<2LWDRX\L!4B,.)UM4T+_IYFL<[
-M1%`S9;!E![\I```<``!`!,:-J2,_>OG;*%0^9C[BMU0\&<'O````'```0`6S
-M;+I:<P,,[MO\!#EYJ6FHJ_M^C4\2MT;:U`H`4`$``%`!```"````10`!3%.1
-M``!`$0``P*@!`<"H`0(!]`'T`3@''>:75$54/I-PVRS@/U-7JZTA("(@````
-M`````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"
-M````"`0```(H``"(``(``$84=(H>9"X#/0'SK6_G7$$Y'R<?);6GK/,6=N[C
-MV+IRI%?Y6>#%\(I%84+R%Y>P3N`4&RVT(9"S>8&&8.=,[U4@/&M>R,_]S'I#
-MUI4P<>+A+QUZ,G.[;"J"LKF;?-!O[I0@81Z67M06C.L$G<J#'?<6YP!3)E&1
-MM6I\E/@C&LJ0*0``)+T"@2#X:2$=N5L9E4];7K/J<ZQV0DP>+V>7<(6T;+Q<
-M*0``'```0`3@4".<U0JBEPO5Y'YW-Q5][/]M:P```!P``$`%:[7;W)[!C$Y2
-ME:O@0MNM++[?@_5/$K=&?0(+``P!```,`0```@```$4``0A3D@``0!$``,"H
-M`0'`J`$"`?0!]`#T!]GFEU1%5#Z3<-LLX#]35ZNM+B`C"`````$```#L(P``
-MT'=%YQ,[WEAKK9=5$Y\OKM8K8,!3F8A@Z"3E)Y?4MVV>[57FN:U\-MZ\9]0#
-M)KX5GW#\[>7;^E;#>N/"01/C3MKGH061,H:_&2KA)/[@@SO0H4$3H!5@V#K/
-MNH@-`BJ(L_'6R[1Z0=]L?K/U%Q2.<5R#9`SD`?S1F,+8=$SR"JL"[FN`')]?
-M-K5L#R&%KJEF4N>(\%AJTH4<]$'H?X`IX5/ECO,!W]9(F5T"LR<&X30(\P*V
-M/R_GWM#E0#G+YW\?V,'O:4NNZ%Z(5**2%4\2MT8/'`L`O````+P````"````
-M10``N%.3``!`$0``P*@!`<"H`0(!]`'T`*0&B>:75$54/I-PVRS@/U-7JZTN
-M(",@`````0```)PD``"`.K^KXP6AZKP8>D6@^?9.H;I:P1)9Q-""/\'0R$F9
-M>^FC%K[1$2L"@W^`67&S```!ZJ&%<^F_X/GJ9R<\!$0E;&Q6AP>LKQ&]V%%1
-MY`7#B+H?BDJ92QJ\HL4-N\'8$"WR2>'02I$:](1(-\#Z\X)".F%X:J2JJFF_
-MJ$[/?T\2MT99.@L`'`$``!P!```"````10`!&%.4``!`$0``P*@!`<"H`0(!
-M]`'T`00'Z>:75$54/I-PVRS@/U-7JZTN("0(`````@```/PA``#@0/.H'<`?
-MCY1G,)V*(H($B3HR)X\01:=&B)`/F,JNQG,PKAZ8L>MP3",O/SPWT2J<0:O$
-MDO=\"N?M4IB\/47)AWH$='8A#UBG#F(C,&Y`<L"=G:0%D]-1K=-R`*&3[<Q[
-MTE2\^&ZW)`M]ZHR9<2.U'LVB3V98S'=07I?E#GY:N$3UR-OXTB&YRFH/17+N
-M3I%\M!;O]X,;],]IE_:S5?@XRW;\^5&VM7K:G.6E;.MEX%L/9_2ZV!M2\PU'
-ME%LJD2=4[1:]4#E,G6.\Q4R(S875"&R%H%3'YK"2_^U*(T\2MT:,3@L`;```
-M`&P````"````10``:%.5``!`$0``P*@!`<"H`0(!]`'T`%0&.>:75$54/I-P
-MVRS@/U-7JZTN("0@`````@```$PI```P7H;N\BF>(9>N1<=?IERD>@G11G`W
-M/#%:BZ_SI4^R?LH;4"EG@Z9FH_4CC^U/$K=&VE`+`/P```#\`````@```$4`
-M`/A3E@``0!$``,"H`0'`J`$"`?0!]`#D!LGFEU1%5#Z3<-LLX#]35ZNM+B`D
-M"`````,```#<(0``P.6*QE@(M1*Z=D)V(:*/8A$1C]CK<9C3GE?I?H9;ZQZ&
-MUJ_/B'F)"=D'*]7MR/]IA3)?PB]'-GY56UCF6ZD26\*;^/8L0T69Y]BX31#F
-MD;2N+:AVEJ?:@AM1GW@R!ZXNQ/;^C@'SB?\RZ,M;F8W+]Q"T=\)[),#D!Z&Z
-MPS]E2T2?,27!WG&/Q5F6V*UF(-9/BL+M73D9O;?4\R70<[%8&\L,\\-KB,5P
-M,C,2A,*TX^)^$+3##ZA7(@J'"[PI3Q*W1H9L"P!L````;`````(```!%``!H
-M4Y<``$`1``#`J`$!P*@!`@'T`?0`5`8YYI=4150^DW#;+.`_4U>KK2X@)"``
-M```#````3"D``##_ZX6,6T,!NQYEN@C+*;_WTL'7J%1(EX9AYCZ&:P\(JMBL
-MUF)O_&Z`#R)R9$\2MT;GA@L`/`$``#P!```"````10`!.%.8``!`$0``P*@!
-M`<"H`0(!]`'T`20'">:75$54/I-PVRS@/U-7JZTN("0(````!````1PA``$`
-M6V(![]C+3;,L!57M8Q`R8R<>!]@'*+8!C_<-VX,ZW&-__X^F;,B!\Q080^DF
-M8551<<V3-9X,)[VASYNZ=6^AH]-"F:]#8C&LN?N*Z-;'SE7'`J>'?^?,6KJ?
-M$XV1ZJ>33G`"+A*R\+)$H&&U>^?X50"8X(`LBW;\>S:*IDB6\:N'(+3>#.?(
-M<BML&O)1]P5;YKWH56W-V:((2O+Q+O+[>!X$!U3K]G(^@>*ONM?K]Q^=KESA
-M<>$_"?->(T',G`$KE^^#F!2^")$[E,)+D^T.:I(HP"GLW/0:MAZ%$S20#B(8
-M5PM=IE'<3FJ>3^4<63LT2LZ]%NUQ"_E<521I3Q*W1I^3"P`<`0``'`$```(`
-M``!%``$84YD``$`1``#`J`$!P*@!`@'T`?0!!`?IYI=4150^DW#;+.`_4U>K
-MK2X@)`@````%````_"$``.#?N_Z2$4(B/XQN](XK%8`FR6NP]]:3/IWHJ+.(
-MDW?WB1E"E+`*?[L"K8''\$7W\`U#3`,"EIV#J:U=Y[F56\B[^XI["`ER71)Z
-MR,P(^*%OV0FEZFU8H8HE$GVO$*2C3XE5=,N8?YFRS?+XK&S989Z6O<TU_N`=
-M3G:/6T(^51]/GY,;'-KV%UW-*"%*5)A>#DR7M7"?@-#,V_&D4LA!]^%/G@7-
-MC41Y^K\^;3IF@[1K+I:D#"$P/T,3Z?=@7-5A^ELA60@O@=)4SHU$\AU(PUEU
-M34+;+029>M;"GMLL3Q*W1B^C"P#L````[`````(```!%``#H4YH``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:YYI=4150^DW#;+.`_4U>KK2X@)"`````$````S"$`
-M`+`U&Y,BFPCE^RAR'^'-"HF5]-:A>D-V6__U$7TRM::<'>VJF-^PFF0'-`[_
-MRL&MA*\BJ$^26NO*X*_0"6T44H7X6KCR8KY\DDR+MRI732U`;6KK3W2V!D#K
-MZTY,W@`<,`>8+&9UE=)G/Z\/]9'/PLB?X^&X_7?$.EOA_-L<C]M\"B+:]K]6
-M,`5;^^(&@8-O<F"YR8ES?]GA+;W]2X]0Z9K@<'%UX?5&'DC4(;_`3Q*W1F'%
-M"P#L````[`````(```!%``#H4YL``$`1``#`J`$!P*@!`@'T`?0`U`:YYI=4
-M150^DW#;+.`_4U>KK2X@)"`````%````S"$``+!X$R+M(\D;T:#,D\2YX8)L
-MI)'I4"R:C)XEB.YS]37"1[#6A<X.CH^J8;Y@,6U/#[`&(9;B`_T]U[^<]/X;
-M)3*T^&H)%`B"]KOY#_=:>9HE>^`"H]FQY\)YPS;\*J?J9F#E*#_J3T\783ON
-M??,[Q)AM2487OE6\>RYF;*H.NK;;P+>.A7);*)SM=<?L->HVC[34:Z(XP`GW
-MZ/4N4<:@?1,")D!,;/B7+WO2+F+@3Q*W1N+A"P`\`0``/`$```(```!%``$X
-M4YP``$`1``#`J`$!P*@!`@'T`?0!)`<)YI=4150^DW#;+.`_4U>KK2X@)`@`
-M```&```!'"$``0`WF$'Z:@%P5RPZ/4K)8ASJD6FSEZT3R^$B#X9KMHL+Q!.`
-M]KS^N#K4D-X>A,/7-]JU)JH#'!WX9$'[+O#A?U\N&0CK@4(4%!+)9HLR"^-?
-M#D2^_9D!68-3GFZ>J2>B\7I&_:[?*Y+-4EBRC>@DTY;0XYUF%"\*B7J/)OH@
-M3!++;/X8?QKL8L7HS>GN8(!_+P#I)B2(CG+BF[DED;W(I&*UC>2M4%'4D!@N
-MU==5N_;[E'OKHW"2%W.)^L9-2.+\[B"P&)3SZU72[$9,/\O5SNAQ&S.T#9%R
-MP8.V'L)JYV&9I+3ZWJX2YM[8Y#@O2]D?9%R>FW>2&8`QNV\Q\L1/$K=&Z^<+
-M`!P!```<`0```@```$4``1A3G0``0!$``,"H`0'`J`$"`?0!]`$$!^GFEU1%
-M5#Z3<-LLX#]35ZNM+B`D"`````<```#\(0``X-'[Y=4>6WS-9072DF6!/"QY
-M<L,#L`$N,R%:*;XZLHTVL(:N.*J6;.\J"91[)!_-+E4WQ*3$ACX3V`9<PDA0
-M6Q+`RWQGHG)'H7EO[IK/RA[COH96U5R^;B]9:["-\\J@]D0!B-A:-G4YJ@L(
-ML:424H,".CF!U5`]X\Y=S+1T$4/)!4(Q\3A2KF*#;U@FQ@ZE5XICR`!1T2>!
-M^4?(!U,2RCJ=25?@R/S?KMF9*[`.B@P.@&XX\RY874)^S[E_?7#;:D"/(NSO
-M2PW$%=D#OF.9VM7'#Z?'#D@IW?""P%5/$K=&=/X+`.P```#L`````@```$4`
-M`.A3G@``0!$``,"H`0'`J`$"`?0!]`#4!KGFEU1%5#Z3<-LLX#]35ZNM+B`D
-M(`````8```#,(0``L+-=:-<0*MF6PI-H,C-C`")F.&^U7/8!A\"1Z/4$3Z.P
-MX;(>C/UDG4&B@TAQ:EF(C%3+&UY"\+]\-&NU)T9*3'!6MVTL+A8OM,%S[+<>
-MS)JBOR7%*G4-%W1?85)9>((@WC/1I!N3K1K_BQC_@MKZE7=E[:=^E[JO;*7:
-M^MXN.?,B'*GX83J8L<ZC>_\]A0U/5DG_CXCK67QG4O!J(X+QZ'.`+(Y(XUC*
-MH2Q6XH]/$K=&/"`,`.P```#L`````@```$4``.A3H0``0!$``,"H`0'`J`$"
-M`?0!]`#4!KGFEU1%5#Z3<-LLX#]35ZNM+B`D(`````<```#,(0``L,='?WY9
-MBQK*Y*C>-.6$G/M;9%A_<!O4N0G%,E\00!'AX3N?^+"8@=3+Z[:0#LS>%EH2
-M;>K^W<U9<.2DC]0@?+3M\*!T:9R-";%=GWM2(!Q49IF<:KE5@AY#1Q:#QR<\
-M@6*7[O`;T:=\$,"3XX+?8=&\XJUB:L`'`M[KD-/WC?,5V:6[9!8S._R\OU/G
-M)_%K&)I#@9'D:0E5C@@)E8_G;^8V^+T_=7J/P.LRQ']/$K=&@D8,`(P!``",
-M`0```@```$4``8A3H@``0!$``,"H`0'`J`$"`?0!]`%T!UGFEU1%5#Z3<-LL
-MX#]35ZNM+B`D"`````@```%L(0`!4/0I:F`&Q?XM2I-%.)N:5%5(Z2.6!\FB
-MX"79S)</?9N!PX@72>^I5TL>89'(]X^@%-050RW<_^)W]XJ,-<6[[.2*-]1J
-MTLRM-79E!ABYO=$(_BG>\^/5HI_*LKJ(%XU7J(X?#!^OQ8@,@X3J1.TIU=><
-MU>^^`9<G#>$?.3%M8A`&(%B3,2T"L>:GAXIAXAN!"O6B4K,0#BE_*/A\_JT_
-M26=*?ZEI=4S-<BTY\_RH.$.B>,782L"`-LD4&1@$"[BJ;"5A1'*T:$>2%QX^
-MT@\N#O*PK)$,:!H"C:Z)U3^M7$)KXO^%!8\_`^`0ZJK=?<ND=,LLA-3,^"O6
-M>W.D?0X0E29VJF83/!IEU04W8MJB41?T3.RHO6=/0S7GY]-U^U%:095O[,I8
-M`O"@'.(H8KCA/`)6.<G<D6)B!?'C@K;]&]BJFQR_663XS/W#Y=[U3Q*W1LYZ
-M#`!<`0``7`$```(```!%``%84Z,``$`1``#`J`$!P*@!`@'T`?0!1`<IYI=4
-M150^DW#;+.`_4U>KK2X@)"`````(```!/"$``2#IOY+,2E\=U9Z-BW]6OWYY
-MF6/`?PU=S;5(82R^),-:)(!6_`7[_)>8)SG3@]^O]"NDE6>&KBL6WXTZ>_*>
-M-=.)EIV@[74"!JS;HSGR*Z[_C!+O?CHR:-!+ZA)P,#AW!(RIY9>,Z?8*-4VH
-MPQEC:\VKV7)LR0:IGZ?*<O3QXO3;V8S-,)7Q$!JG7O/H?`I_^O:`=KH7LJ`;
-MFJN]H-<D_IT.:M!3:S/O69`74$::VG=X-9[4Y-@$Z"2'N8B`-2=%UY$IC`2$
-MYZAC'#8]*E9A=%7I22/<^S,3Y68C9WRFAMP*VGD8<!AB!F.7T4T#E2O22M+!
-MN=(I4>SX`A8;4;G+VP]*\=IE<A_%A6%X9YB))Q?5Y45@;>M2[]'5%O2,[4\2
-MMT;[H@P`?````'P````"````10``>%.E``!`$0``P*@!`<"H`0(!]`'T`&0&
-M24I/(Q;6AST44=U!Y4FZ]G@N("4(`````````%PJ``!`YPS%X8PFF*].=XCX
-M58H#4XTRPH;PJW'$J(SPP<7;_NWF`<>/VJH-"'==$?WLBW[SG7S8[A8DL_<$
-MMYKC3Q*W1I&N#`!L````;`````(```!%``!H4Z8``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y2D\C%M:'/111W4'E2;KV>"X@)2``````````3````###(@U,4/G_
-M6:C6@4_#;@L=%WB17T_SL$@X<E&.XZ=)O\5!42X,H7\G[^CYXT\2MT8WO0P`
-M;````&P````"````10``:%.G``!`$0``P*@!`<"H`0(!]`'T`%0&.4I/(Q;6
-MAST44=U!Y4FZ]G@N("4(`````0```$PJ```PSWUG%G^`4IW.63[+5+TY@E5W
-MB<C_:8SJ9+RM#;H5R=1.4"?\PW`PVP+8?/M/$K=&+LL,`&P```!L`````@``
-M`$4``&A3J```0!$``,"H`0'`J`$"`?0!]`!4!CE*3R,6UH<]%%'=0>5)NO9X
-M+B`E(`````$```!,````,$M`-0LBXVTR2Z>O6^66@E^D(Y6/Z82"@9I@Q>`A
-M;3F\'$VDJ<Q]$F?:O#H'3Q*W1CW'#0"8`0``F`$```(```!%``&44ZD``$`1
-M``#`J`$!P*@!`@'T`?0!@`=EE20*8*9GX+\``````````"$@(@@````````!
-M>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``Y.K8H_VY
-MNY088BM+EPW;HBU$7`U&"+#F%*$*<&^CEGU,"U2MMOOG#6+]1%<J",)HB7M-
-M'X$6ET-`%>%@$7I.`(9S?F`W@^Y<*GL]QQ<9B3[FRT?1OSJ^4:-.46NW(K<#
-M-4;40%KRT0J==SE"MY+(O)=+>GQJMZ^'=B=*_':AL@XI```D'$,[S)=63F`?
-M?R'-@$*.M>"\VBAV6WYEGE,6B'R0>O`I```<``!`!#]SE*Z<<64(\EIU<!"X
-MQ_OB'^*3````'```0`5AU^$I,!?)D$'^%9^1BR&3B8/GVT\2MT81U@T`7```
-M`%P````"````10``6%.J``!`$0``P*@!`<"H`0(!]`'T`$0&*94D"F"F9^"_
-M```````````I("(@`````````#P````@``!`!@````$3H&6"RZ7+904RMC'Y
-MRNS$LEZI_D\2MT;:Y0T`N`$``+@!```"````10`!M%.K``!`$0``P*@!`<"H
-M`0(!]`'T`:`'A94D"F"F9^"_```````````I("((`````````9@A```@``!`
-M!@````$3H&6"RZ7+904RMC'YRNS$LEZI_B(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``Y.K8H_VYNY088BM+EPW;HBU$7`U&"+#F%*$*
-M<&^CEGU,"U2MMOOG#6+]1%<J",)HB7M-'X$6ET-`%>%@$7I.`(9S?F`W@^Y<
-M*GL]QQ<9B3[FRT?1OSJ^4:-.46NW(K<#-4;40%KRT0J==SE"MY+(O)=+>GQJ
-MMZ^'=B=*_':AL@XI```D'$,[S)=63F`??R'-@$*.M>"\VBAV6WYEGE,6B'R0
-M>O`I```<``!`!#]SE*Z<<64(\EIU<!"XQ_OB'^*3````'```0`5AU^$I,!?)
-MD$'^%9^1BR&3B8/GVT\2MT:J"@X`4`$``%`!```"````10`!3%.L``!`$0``
-MP*@!`<"H`0(!]`'T`3@''94D"F"F9^"_J]BN(1S_L=HA("(@`````````3`B
-M```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0`
-M``(H``"(``(``%Z"3F3-J2].28^<*G7H]9;.)WUQJAEAY%I$C+/Z;U4TJ=FK
-MSBB3%!W*39!?)<1F78NFIL+"]1M&*03_Z`I&T,%1P?GFD<>JM_BB7>VH!`'E
-M:\D.MIZ=50]GO\DG!;(XSD%0+;',&%LF(,3"%!Z*%+;]7^!JBKI[5\#8A&5Y
-M.:]B*0``))8'$**#@B`S^*KH_TE=^/$\CP?):^J_Y3(V54Z1=C%B*0``'```
-M0`283#B%\PW.5F&::6,AYS%MS0OW8````!P``$`%\]89%;=K2H,=#)SH_#H8
-M:"4L4^M/$K=&OC<.``P!```,`0```@```$4``0A3K0``0!$``,"H`0'`J`$"
-M`?0!]`#T!]F5)`I@IF?@OZO8KB$<_[':+B`C"`````$```#L(P``T*56Q(L6
-M/E[ZFAF5)3R*R@;^EM3OJ2I`LOGV^!!(&:BOOH#9.S4+)G`=:%?0Z\\R_7_;
-ML0+Y7B-C52]@3.:RTC<0J&2(0',"]*#M%>GO@\D33(5^T!'E=O#5K^_@*T%N
-M$*L7HA'T23%;/'4?#]?*&P)?&$NY\@K%'O/#P8P1B`<Q&K,\G+B,/Y)Q\F,,
-MM?V!,&9*M``6Y..<*.:1HJ?TG2,!X5-!GB]J,R@IYL\5)CV!6EHA>>"A%DNF
-MIMH<"NT"YH/IZ;X\L(7>TT_?3D\2MT:L4`X`O````+P````"````10``N%.N
-M``!`$0``P*@!`<"H`0(!]`'T`*0&B94D"F"F9^"_J]BN(1S_L=HN(",@````
-M`0```)PD``"`D0%`RR=5&-P9JP%@9;F[_Q*2HG=X%=('Y`9)DN$8"\O3_\GQ
-M+4\]5`7#@ZI.(P,%!W.8LH];02;_Q<TDN&GBU\.4J3$D-;)F<\HY&I^6K9$Q
-MPVC93,_;<V>6!*%7/LI<PB@#G]1!YP2U<X\5@08NF+*2/D$.1K/6`$I!;$\2
-MMT;?;@X`'`$``!P!```"````10`!&%.O``!`$0``P*@!`<"H`0(!]`'T`00'
-MZ94D"F"F9^"_J]BN(1S_L=HN("0(`````@```/PA``#@=8R8U4IOA`_(@KG>
-M;>.L^V`\\/&H[(LKG:ACI$4EH;:WY2F/!O70/D+_/VVMVEB&=)'OD)WZ05G%
-M5*$5B\9\"^[F`Q9YBN<"/KF2>;KZI*%XC=C=A\?4\[]W59GED!$W%$20`(DY
-MH7G6:_#OHP&3\5DPET0HH\D[QFDM.PO0&OUU^\F(M:D8RJC[>:*5M_4VXX;L
-M'3HACL^OS"H!8OD13C]369I<F[^9:27%],BM[Z=9$C?AV;0)O6>J^'A#9:4Q
-MA!R7;L*7WTA'K$$@A2KJ%OV@K6N'A'5+!/._E4\2MT;$@@X`;````&P````"
-M````10``:%.P``!`$0``P*@!`<"H`0(!]`'T`%0&.94D"F"F9^"_J]BN(1S_
-ML=HN("0@`````@```$PI```P2*!;S\W":*7U(3UWTP9&AJE;71C`$_=DZOIA
-MSP?:=Q]3K$@5BL5&>;?&JTU/$K=&(88.`/P```#\`````@```$4``/A3L0``
-M0!$``,"H`0'`J`$"`?0!]`#D!LF5)`I@IF?@OZO8KB$<_[':+B`D"`````,`
-M``#<(0``P$$S3!XE'>*V(@:7.`<521TCW673M#Z`MOTS$OH>*W!X^$SI[4(6
-M?;8E3QG&1O(SKA3;:LM,<"Z]NE^!2&OPE-R1)!XHR(/OW`$H,7"@=C-GM/?.
-ME[CV]U;SRH"(-L,,X+874!>#F`"D5+J_E(:6HG0T&OTCR=28O&Z-(#5(*;ZT
-MQ6<4WF*9;#]/G!QE?79^5W-JIL*H6N:*3<C]C6$U'H/IMT67>)51*R[%CS,*
-M[(&41_=ZM[L>Y-DP?U$[3Q*W1O>@#@!L````;`````(```!%``!H4[(``$`1
-M``#`J`$!P*@!`@'T`?0`5`8YE20*8*9GX+^KV*XA'/^QVBX@)"`````#````
-M3"D``#`J40=PAZ`_<C/1,\%(??,G7(6`0B>5B($7'XMF']'(VZ3P@G_FU1K<
-M!:E4KD\2MT:^OPX`/`$``#P!```"````10`!.%.S``!`$0``P*@!`<"H`0(!
-M]`'T`20'"94D"F"F9^"_J]BN(1S_L=HN("0(````!````1PA``$`V&'6?[;L
-MNB,;07:O`,7<HGNF81RZA9^/)BO/-_4'NNBQ"7QT9"?N^\!18BK_`5Z0-:OO
-M0J`PDB\K`W]^2]PP88GW==JO,57H"*PE"""_,@PR\"J\'FC>CEAH*D'`/X%N
-M(TM.+$BXOF7+RV$A\L*N0=[\NBZ%;$>4D<*7&]*Z?DXND]>4PIGD9^67I!IC
-MZ3./1.]#P-&&HB.;3:?](*I-F+\^VC`0'5FZQUMF$BO2GL8?G'CVN9?<M,7T
-M#X'DWONML_NF\?/.@M<2A'^_T/YLHKQ8/_VP8#N:,CRX$VL+%15T>%?"ZIDU
-M%,=P.\.C8#9HJ%.ODTIVU;LMFB\E3Q*W1M++#@`<`0``'`$```(```!%``$8
-M4[0``$`1``#`J`$!P*@!`@'T`?0!!`?IE20*8*9GX+^KV*XA'/^QVBX@)`@`
-M```%````_"$``."CV>5Z8Z?YT035W-MWG;'IFGG""\;LVLW;H\5_'-EX\[,^
-MB7&:46O'T>8"]T7+*X2,33F6%O-'@EQC+LU#_]<%\"\DZ/:NE'+M;R(:VP"9
-M1D(:GO9^KE]DZ6+>2ZUSG,\#U>-<IJY@4#UI/=FES:M9:0M]`5""NR!0L&NQ
-M9)K(QIOF^#!J45/AG(_AQ8GA@!9RDX?$6F6JBU\!83@!R6@^W27#_!%3PIM,
-MO4F:DJ4"N>/W+9Z&OA?R$D6<7>Z4N3U:79LU[+*@*_RSF1L\%U>:4:1IG<<.
-M4'I7^)K+3Q*W1@G;#@#L````[`````(```!%``#H4[4``$`1``#`J`$!P*@!
-M`@'T`?0`U`:YE20*8*9GX+^KV*XA'/^QVBX@)"`````$````S"$``+!%'V%R
-M,X;^E_MO@J+CJZ!QBR`\LN*"PC3JG<$U@2X,8?OPXW01J\3B]^=X($(O(4&X
-M`:U33A0);Y1'1KN*1@H)ZRJ.B072G_O&N_:(H@"R!DE.I#7LH"7]2N<(PU7T
-MW1&/HZGNJSQ[RPU!!I*3E20H&$_FD&!K55%AM&B=NE^#O;/12'R_?DI?9]*?
-M#UDXPUEG\2PP0HE`DME\ECI5H-@.*%@GD?7#D6-@G0SE3Q*W1M7\#@#L````
-M[`````(```!%``#H4[8``$`1``#`J`$!P*@!`@'T`?0`U`:YE20*8*9GX+^K
-MV*XA'/^QVBX@)"`````%````S"$``+!(+32U:YCQ@OO/+W3IE542`_Q,G2:<
-MN&G@IRR49TMWFH0_+0032?=@(]?V3;T6MI@S)+GV?ZL28]/0L=4%&B1(3^J\
-M)M^`*@2>@9]-B3#1%,[3:H'>^/L-I%"KCF,-:,,(\NF%Z7Y(/%#L)YHY\]`>
-M+SJ,SMAQX",ZQ)L^_H!C*+"NE<.?IY:*56])D%FV"!\)7LNVU]S3=MEVO\O8
-M^\Q6=_T%A&L/);[J>^K13Q*W1CP:#P`\`0``/`$```(```!%``$X4[<``$`1
-M``#`J`$!P*@!`@'T`?0!)`<)E20*8*9GX+^KV*XA'/^QVBX@)`@````&```!
-M'"$``0"\QH;2[H">_[=+5NA0R%./IG):(U[ZZ1A*2EPMA@^48R#PI-=+>K.>
-MU'"^(U_ZP8'J_*D"V&R!`N=7?72,(Q*?I.I?F3@%^Y(P%JXI77]RHRYPH3DC
-M^KC)6DFXZ>3UM>3WOA>2,/(HUS\0D.Z@1#D:7)6H>"E1?5^7>A=>Q!EI"%-(
-M'N?,\2N0'O"N*6^*&A;PLM3HOV[QMCFG56?UB+ZV`[RBA_/2!K00S@G+-$7D
-M#@E98NZ,.V.#>UX?-GX:?O18^U/2E9=%?UD/0T*[3KGJ/'MVY1[_SCA%(E^'
-M7[2HL3B8%C2+TGB5,08,-HXRR,2?2E]M`&I%<.5>U;]/$K=&328/`!P!```<
-M`0```@```$4``1A3N```0!$``,"H`0'`J`$"`?0!]`$$!^F5)`I@IF?@OZO8
-MKB$<_[':+B`D"`````<```#\(0``X"=TRNR:@ALO1B2\>V(V:H.;:'90EH'\
-M+G?&/:*P!&5G@WS6]<I2G.299`HL%F7L]"%80$4+KX>F?8%U#Q:J4HB^G@IC
-M;EMM.'`-'O/CSI&8U3'A2BT/3Z?KMN#"$(J)-LC`V`+;[6^7_?+"=![@MB9P
-M^S`(E\"6G4:"SCSZU`3;`.$=G3QE4%\_C!/I=P["*B5O@)+*7Y6?PQR6H<Z_
-MX29XAT[0KDQ-V5G:27?^5&QH6T#&1P*ZCF0!8DZN]LG[=9[FWB+:^^QSCY-I
-M.!OL85/P+K5:!!!N.WJ:]_E/$K=&8#</`.P```#L`````@```$4``.A3N0``
-M0!$``,"H`0'`J`$"`?0!]`#4!KF5)`I@IF?@OZO8KB$<_[':+B`D(`````8`
-M``#,(0``L$4GN,I.@US0G1]/2*HJ/'+D?+!]U2N3K4J6[G5TSPYTTR;:R$F*
-M=4NX<^F"<\]/:<N1ISSNN)*&:'%`1IW3/*7Y'(`S+M\:/<&E:4]]C>SA&),$
-M#53J3(,79GD6;DBRL+3;^\1\B9JR[[+([.0M"#-OC@(\AHZ\%E"33V!CJZK<
-M8T@P4;(4^`R?6:#@#&1BX@U4:!!!PT>$Q7)TJ=7T9EE2+;SK0W?JQZ`2*/90
-M$K=&E1<``.P```#L`````@```$4``.A3N@``0!$``,"H`0'`J`$"`?0!]`#4
-M!KF5)`I@IF?@OZO8KB$<_[':+B`D(`````<```#,(0``L&K71#6/=$,VP3"R
-MNL"D.UM60"XSR.G93U(J+`%D^:TVJU'*PLR2Z6W=-]D.@[#8)`QL`W\-VD00
-M]Y)N=`6F49#/KN^(\Z%U565-GFVV,9T@K6:16H?7=2;7@V[#6V$/0$[R@"-6
-M<AJ^TPA9P,K^6[WVR;\9Q8QQA93%N[:'"I50>(5D&A""T_0XKBH$A;]=CGMT
-M"\"LO^MWSC.4$6BC(K[1,VWB2JV'A?P>,<Q0$K=&LSP``(P!``",`0```@``
-M`$4``8A3NP``0!$``,"H`0'`J`$"`?0!]`%T!UF5)`I@IF?@OZO8KB$<_[':
-M+B`D"`````@```%L(0`!4,BC/I\-`U+*9@$-6RH\_GIH_.:,J.-&8*-VW)IJ
-M_8]!O0B4VZ;H,10P_I98`,J":4>(G0[BRPI]?ZSSW*!M'N1US%)]=)<XPZ;>
-M^VHCT+28TD-%<!'6-Y%NNN:WZR9++'UE[KZ^MTVT0M:]`]H+&P+\3F>O_&?]
-MDDQ8O47.U5VH/7`+&!LH@V^C<X@(]DIW<NMRK7JD]X@]039E+%6NLS<'K_@N
-M\1I(B"B"Q)<7Q&J>L#4>FS$J`_!>!%@5H(_2!)[O85)F-!J9*LUY,=7OQ%#X
-ML)6:#A7$SH=VJ53[-P9@J5(&VM@Y4,?P"C-$.C7`"D>24A0,R!UM)\6B**!*
-MY]3O0-?QHY6=U9U1=_N(E7N-UJR%&!R,&9U]RV\RQ0$6T'\@=G?<(07%(K+#
-MX_PCV48?-[8H-I*=F,B8!`B.:X-#G]/X"1['"V""QCB!4!*W1J5Q``!<`0``
-M7`$```(```!%``%84[X``$`1``#`J`$!P*@!`@'T`?0!1`<IE20*8*9GX+^K
-MV*XA'/^QVBX@)"`````(```!/"$``2"+]O2H#X9'?32@LL<91N$A,!&1W;US
-M:_;E]\*R<2FEZ2F%+"8E6\(YH"$4O7O']DC"Q+<%Q:IFQK<%2AL=+M;^@6O6
-MV;Q-O"<VMYFX62YLLG"?6"W"((9E\Y+JZ:DRR9I8L5O)FG$-.,IK+6/PIE\(
-M2=Q'2P.V[V[+,\+.\!T)$+,Q^K!2?3V=0"V)#6@]Y,7B!HKL_<$7]V[IS+ND
-M,_EYTGNX1?B7U7:L+RP=Z`WV]I;]9ZA=()$(K\L)UT)2\ZJZ19"S`?'W5_]-
-MW-I^*AL_"QN,ZY=.+R"`V?\=8EH>T#S[S6G&.Z7>5;-_S:D?,1EA^*S^9/'&
-MU0U)2TPP8`,!/SA0S/09X>+-T8`D/M<Z)Q`-[;N>G]&NO32K$U`2MT;,F```
-M?````'P````"````10``>%._``!`$0``P*@!`<"H`0(!]`'T`&0&2:YWDJI(
-MS$J<6*,:0S=N1`8N("4(`````````%PJ``!`<N\[4EF'_U`(XT=^/G-L-J^0
-M18PQ^?H5"."P:X#2,+6YPL$!CPJ<J]3R'.F]-Q'8C8D.TX)61B]L^[F#4!*W
-M1E:D``!L````;`````(```!%``!H4\```$`1``#`J`$!P*@!`@'T`?0`5`8Y
-MKG>2JDC,2IQ8HQI#-VY$!BX@)2``````````3````#!?OZ,QLX<Y_/F<#M%5
-MEY_WUNO%XP%PV]DTTNSL5%,EB4_IF29+SQ5(W9C/W5`2MT:RL@``;````&P`
-M```"````10``:%/!``!`$0``P*@!`<"H`0(!]`'T`%0&.:YWDJI(S$J<6*,:
-M0S=N1`8N("4(`````0```$PJ```P!&`@*;#)HT+HDT]O>-BS=$K`@"P^N;\C
-M<^]1&E9*<36MU,ORVX[9A+&,8-%0$K=&3,```&P```!L`````@```$4``&A3
-MP@``0!$``,"H`0'`J`$"`?0!]`!4!CFN=Y*J2,Q*G%BC&D,W;D0&+B`E(```
-M``$```!,````,,'674R:#S0+T5>O+)5._ARF!&6EN8,2\/.3,N%P>T<53%PN
-M`E)+C5K\=REQ4!*W1LN[`0"8`0``F`$```(```!%``&44\,``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E8@`KP'BG%P<``````````"$@(@@````````!>"(``'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``A13.HJSO_E+@<C3L
-MS_B#[QDM'=;P=(!XD..^]BJ=9-`T=>LX,XQ."HMG.>RA->50;R1F2\<X)V16
-M5<<#]S=O%U.RC6H;]-/-(4F07`M'>"BBL;8[Y$W7;TM33*>%NV$).E5]5$M@
-M?Z-9,JJ\ARD<UD*E[49>*CYDM!U8;J_QM2,I```D%)]9358-;)"S:K+((#D^
-MP5VHD<E[CH`/G)H#'E52NV4I```<``!`!"?+JOM5XPR2&M&;>]]&6H!I&&JW
-M````'```0`4_-JG7,.:G.#6#^><B+5QI#>%13%`2MT:LRP$`7````%P````"
-M````10``6%/$``!`$0``P*@!`<"H`0(!]`'T`$0&*6(`*\!XIQ<'````````
-M```I("(@`````````#P````@``!`!@````%"#O'+\.TK"KX0KBT9P5[9LO`"
-MSE`2MT8ZVP$`N`$``+@!```"````10`!M%/%``!`$0``P*@!`<"H`0(!]`'T
-M`:`'A6(`*\!XIQ<'```````````I("((`````````9@A```@``!`!@````%"
-M#O'+\.TK"KX0KBT9P5[9LO`"SB(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``A13.HJSO_E+@<C3LS_B#[QDM'=;P=(!XD..^]BJ=9-`T
-M=>LX,XQ."HMG.>RA->50;R1F2\<X)V165<<#]S=O%U.RC6H;]-/-(4F07`M'
-M>"BBL;8[Y$W7;TM33*>%NV$).E5]5$M@?Z-9,JJ\ARD<UD*E[49>*CYDM!U8
-M;J_QM2,I```D%)]9358-;)"S:K+((#D^P5VHD<E[CH`/G)H#'E52NV4I```<
-M``!`!"?+JOM5XPR2&M&;>]]&6H!I&&JW````'```0`4_-JG7,.:G.#6#^><B
-M+5QI#>%13%`2MT:4_P$`4`$``%`!```"````10`!3%/&``!`$0``P*@!`<"H
-M`0(!]`'T`3@''6(`*\!XIQ<';>&Y?P*E"J`A("(@`````````3`B```P````
-M+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(
-M``(``)H5<^UR+8B_$UF"2;S+6D^A`/0OC7I7JJW99.8DO.#;>QHN9R.*<%&2
-ME)Z-I..H4I(20YY7,J(PJDRB[^ZG`Q\LRA_K19H"X[Z5;1%=L4\(A#]3#Z1G
-M`NZ'Y8VUT,W#FV`0IQ;,[_P*]G;,DH-X,`KD<K<YWQ1"L&$`5H'B\2*\*0``
-M)(:[JD5\/O:A@JMM&ZJ5!5DI[D)X/SEX`1,A_"'T'[I<*0``'```0`0W\6S5
-MGNP[A585H[;C@342NG1I]@```!P``$`%^8Y1+'LWS4O$/,D!K1G'3^F!$%M0
-M$K=&N"P"``P!```,`0```@```$4``0A3QP``0!$``,"H`0'`J`$"`?0!]`#T
-M!]EB`"O`>*<7!VWAN7\"I0J@+B`C"`````$```#L(P``T*;F!S3^L.$&2X&/
-MI0Y5S3<3)O/BI2!"`:\8)$8V9QT4N<`?`#LI`L]KG/0TH=/"\];8KL@2*-R8
-MY!55)LQURU=!?$G+&4YU0MX<E(G8UQ])P$RN9'C\]<=Z&T!!0^FWBS)O!;%@
-MD7WQ_L>J9[`C&'-NJYO,.T@N*^!YE*,)DX$&4+7GA#=)@FS$UH'7`]\'?<$^
-M`A`<'9`*O69,U4FB!8OI8Y3>Q]E&;JO%6Z<E^5N6^/;,!/?8GSD=]1AX[OJ#
-MZ9?U`#Q.[N:'T9&I4U`2MT:310(`O````+P````"````10``N%/(``!`$0``
-MP*@!`<"H`0(!]`'T`*0&B6(`*\!XIQ<';>&Y?P*E"J`N(",@`````0```)PD
-M``"`239[_;-(&DA\FKPN6SF9E^T_L>?E?ALX0-D%R:1H'N*>O@)+'-(M'?V;
-MW(7'B8)N"F=PT@>%^'@O]UC.)@SYPE]WI=;*A4;^S<0Q5+NW"\[<4:=?"_?%
-M`L8I;8]+2F0A.&5Y"#561_`8<`!C;W\[9_9.WC)]SWI!;)7@Y5`2MT;%8P(`
-M'`$``!P!```"````10`!&%/)``!`$0``P*@!`<"H`0(!]`'T`00'Z6(`*\!X
-MIQ<';>&Y?P*E"J`N("0(`````@```/PA``#@HX,`>/Y&<,`XQ\WJOH3[^E-3
-MU,)T*G1QNCWJE\*Q=(=C(I*W`8>;?E"J-!YP@_IPA:[$OA()C6BV:'&DU[],
-MD8J8VPH^[0>-@?L?3@X_IH^93!9&U7!WM8F=V96YV7;I%"-B41^Y_.5N)Y)M
-MZDWBD+`QA8O/W9!:AQE7X4&JJ0KP_I#[?O3VC#\Q8BN^E9//@CD,L,N8+^3/
-MLL@)DWBN.]IH+_9Y,H0$>G@-`-[]VO1I43-A=$DD-%IU8=*"+*F/M(*(0T31
-MOXM$%1^H.6?#$P@:H"D3ZX2P9]<@B%`2MT;W;@(`_````/P````"````10``
-M^%/*``!`$0``P*@!`<"H`0(!]`'T`.0&R6(`*\!XIQ<';>&Y?P*E"J`N("0(
-M`````P```-PA``#`)N/EF_O(";E.X[<KXPQJ@4QCX.7/4DMK""`JF],G1/_X
-M2G`>K2/7<+L/`>'C`-/OD0U)J@Y=M^Q^';YU-YKK9!`[VZ?H-]<C=)0\.N7W
-MR.[5'#>5VD:U1=&>;"I*A"9-&S#NV;Z@._T([T>F3CQ0(8-W0;67^SEB8J?,
-MH/I!EWLSOMN8EQ6@>2SX,8?+]J;:J&;UR/`WC>J4,Q_=AE,9A@*OG]1^HVM_
-M<'0N83CS%DSGC8IY28L42"#;6%Q0$K=&S'D"`&P```!L`````@```$4``&A3
-MRP``0!$``,"H`0'`J`$"`?0!]`!4!CEB`"O`>*<7!VWAN7\"I0J@+B`D(```
-M``(```!,*0``,"([%@]']X9R-B-*CO0_HZ._&*[9Q1"U:3<8!$>C.>35='P_
-MP#197T0C5?XT4!*W1@^6`@!L````;`````(```!%``!H4\P``$`1``#`J`$!
-MP*@!`@'T`?0`5`8Y8@`KP'BG%P=MX;E_`J4*H"X@)"`````#````3"D``#!C
-M$BJF.,]>"W2J)0R=!:SHFUYD2::$@O]BPUKBW<MFV'ZEKN3:U#&?>-3)+U`2
-MMT8JL0(`/`$``#P!```"````10`!.%/-``!`$0``P*@!`<"H`0(!]`'T`20'
-M"6(`*\!XIQ<';>&Y?P*E"J`N("0(````!````1PA``$`>Y',-OY#*7<%:YER
-M<WR*HFIW8%VW@Q&F=_@A<&7:@Y_QV'9SQXDN!SQ5`*/(+XTB`'DF.D>HI35=
-M8)Y4+GMGP5%4,T;3413P7)<N[X>D)M"E_7W8H\+>"J-PVF3"5Y0C%7U),#PT
-M!9AN(0_Y"7UXTIA=%YM5E]8*`O.>$D8Y:NJG1E30]S-Q%N)Z!AZK,<$)PXZ_
-MI^=(8Y%S@X/SP.XHX@SBFM-O'04T65H(=(RC;B<^)Y\P=$>F=L6W@KE*&IA"
-MO:\P-0S2W7'CE6<Q44R:R/.@><X9QF$Z6WBE-"D=8`V4,B5%'QD/J8C<:VQ8
-MUXDKA+E2AHQJK2Z5+H/-4!*W1O6\`@`<`0``'`$```(```!%``$84\X``$`1
-M``#`J`$!P*@!`@'T`?0!!`?I8@`KP'BG%P=MX;E_`J4*H"X@)`@````%````
-M_"$``.#J$4]$(Q!][=,0S>>JC6K\8@>YERD>IX(V>)XF"K6W$WPENBE`(?X+
-ME]VX-!M7:9E5^L0'T"QQN`%?U+DSD<%D-AJ3P]+_'??SF8X+2\-Y84F[3)A0
-MQAB=<N;N=_C%+@9SYV5].NQ\=?-\:(ZV*DCRMA%/UF>I@=].=@#2RWCW*,`P
-M`)O$K7WN%R]9#]@A-]@IP$<SK!?0?)R]IQ*GS2_[UTS2VGR&>W)"7E-0*'XX
-MR'VSK1HI41/TOJ$IQFY^C5M;]9>!H)G>LP?/R3<"?&OOK$7)L',3VV%(;%XE
-M4!*W1HW,`@#L````[`````(```!%``#H4\\``$`1``#`J`$!P*@!`@'T`?0`
-MU`:Y8@`KP'BG%P=MX;E_`J4*H"X@)"`````$````S"$``+#15=8&E\3X&T_B
-M`3"],T^P;BW=QK!86+!)DQ:?Z&2MOO6+A:EUWX1N0J1SBTO;Y(^B-R""65QO
-M,,G<OS&8(W5V?G$`!WUJ9$E*BIW*^*!0==43`+X0Z%"#K"KAZ]F=J4P@7$VS
-M5ZG96N6Q`3WYW#9!^K"Q[C@#QY4"(4(^/4\6WE6T9!M60/D5GZF'^5(1=FOT
-MQ0#L'ITC?318B0Z^T[C@((1Y!MJJ:K@"&#&R4!*W1E[O`@#L````[`````(`
-M``!%``#H4]```$`1``#`J`$!P*@!`@'T`?0`U`:Y8@`KP'BG%P=MX;E_`J4*
-MH"X@)"`````%````S"$``+"W(49Y&`*E&6LXI*UQ0+^/*?7G91[@&WYM1#5-
-MBTHH!FE.V!(.)&8`*=\B&08M<BD%2!J.R:86$SE^?0NE(A/ME+.\>!4$*Q9;
-MV:Y0,D?THT2>*5+TZU29S2I2E[F#N,SZR<;P*'S_E^W[,4?D+IZ[(&IJ`/?7
-M/S/=;@ZRY>4A6>._.P92.2QTQWU3'",T=8P?87AI5WZ\?3WUU7K_=[VCPK#C
-MT\ML4=(S'WN>4!*W1OD+`P`\`0``/`$```(```!%``$X4]$``$`1``#`J`$!
-MP*@!`@'T`?0!)`<)8@`KP'BG%P=MX;E_`J4*H"X@)`@````&```!'"$``0"*
-M_D2JD]#%1@>.!\X"6/@X#C)(>>HZ]C5O?C2#$;]E)2--N]KHL>,(VG0\B]K0
-MRIP__T+N@:1$8L1[8!3S/J.H$6CA2-ZT$$JN'##<5]U%RVC<+HDISA7M"4HN
-M^Q`FQ^U_4*-6+.YS;5-,<K](*TN'(@'9:VNFP1\59Y[2NB5'"04_-$+Q->:C
-M0(QK_9S]A[+O&!QG5.<CN_0=BLBFPVQVQK)N<A'A;H%SYO<WU=7[*%?GVR+Z
-M\K12":U4P-@K*2?@>:3L4]]G.AAN]B3]+<4HH*[,`R6#I0SNU3=8LRCO2#ED
-MOZIN>361[=^H79TI+8BFQNB?`ZJNU&,I,?U0$K=&#A@#`!P!```<`0```@``
-M`$4``1A3T@``0!$``,"H`0'`J`$"`?0!]`$$!^EB`"O`>*<7!VWAN7\"I0J@
-M+B`D"`````<```#\(0``X.')IBU_4F9&4J0K>[(AX+GBOS9O!T)$'\80#F1_
-M8>Y>(H#=@G\R1?XAA9<&U%VS*\2LHMI'AY44NU%>F`>R<G/G'`OM:#R:L>N4
-MKY*`25.668C>GQ]HG8R*=BM*3MW=JVU>?>U@K/^)*$(`NR[X9I-6@@\5:V5_
-MUXON7[!,>[U>@\ST>=`^BH9-UGK\(31G,('BNBF8;)_A^-)V(49K3M-.93\*
-M).A[(&V6^0ZVX5$8I+*,M/BND_-:9M&2JFO--DC%*[E$QU?D21]$-V%C7_#.
-MZ4:=!2P.2DFF?VA0$K=&<R<#`.P```#L`````@```$4``.A3TP``0!$``,"H
-M`0'`J`$"`?0!]`#4!KEB`"O`>*<7!VWAN7\"I0J@+B`D(`````8```#,(0``
-ML)/IT$F+.J?&;+G<5:%M,K1_"P@M\,3\/M$K8X>.RIP:G18=H!*<>.N)42`R
-MFA,I]:#Z^H3K./]L;I_:\+395W'F%&^7FT2&ST!-2Q>\HBX_IB?4D)@H$LW3
-M*E<$EC^2+>@OLH:-R#<;+Z)@++QY6,H)V22:;JGP/V'!L[@?SH%.XK42SIEC
-MA0<B=C&C<:A8W7!?<?"':H6;LEC.J16PNNM5)H<$2V-%L=B\"6A0$K=&OTD#
-M`.P```#L`````@```$4``.A3U```0!$``,"H`0'`J`$"`?0!]`#4!KEB`"O`
-M>*<7!VWAN7\"I0J@+B`D(`````<```#,(0``L#6R\[#:HS\YC,1]^>+#+36`
-MY"K#;G'5)5WZ(,XE1T1<@T*C4S92%\TE%/=\48GF?=H-5\DL*8$BGYQKI@5[
-M)M@=HY*//O1MZD5LY(7#B;,448JC]3(--%1`$>+R>9F[`>T#OC8O))HHLNW(
-M`6[XOI%!]^%OMI[Y%ZEP^Y;VIRN"%QL[O<Y7G(#*5$V*8<:%(DA^O],`8TL0
-MAG<R&3"*""TZ).=S.U@$E4R^>D=0$K=&&G`#`(P!``",`0```@```$4``8A3
-MU0``0!$``,"H`0'`J`$"`?0!]`%T!UEB`"O`>*<7!VWAN7\"I0J@+B`D"```
-M``@```%L(0`!4(H:T-\W-C8^,/)!6!.?_Z4%Z%P*W88I7GHQ"J!AZ$F*LXG]
-MKO,WEOYK^?;UR\,9&+/1?6V24.'$WQYFV"['!_N8V;D"TY=4-P>!0`UY6C,2
-MVA]#LD@%8[P%R6JXXR<EA'"=G=IC(C\#KP&QK>,^=/H\NS.3#LA(`J]H*11U
-MXC(4%W!X;MH98K[4Y2E?$202WDN@F<4]8'3(0D?3_T?SE+E4,>!.L1PA(0K9
-M,A&?X@5#WN<,$A`'A4/BJ5Y)3?.=1/M;>,1=.I')Y289@&]%_0V7:DQG0F@Z
-M4K(CWXKWLW.T"'/BBP"_U,90+H:.4:6C*8$/UZX_Q^=:AAJHYFBFMIWS[YM'
-M4\Y_`.\U'F\&X>0[E>9U.NVS?$M#"(@.$%M6Q-[9O6Z[G;AV,,7FEM:5XKQ?
-M79[N/I2D<$N-5$ADL."ADQ&0`4!9$'_!F8PQ4!*W1C2D`P!<`0``7`$```(`
-M``!%``%84]8``$`1``#`J`$!P*@!`@'T`?0!1`<I8@`KP'BG%P=MX;E_`J4*
-MH"X@)"`````(```!/"$``2"()/.:WQU/P.1,1K[-9"[E8R[MYW"V06'8CQA=
-M!2Z*A!Z/8K,;PDG^1BII(AE9QBW<RMX&DA61.#EZO&F0A0V<VAFNK`:[&@X$
-M6`A&"K<T";%R,!&&#QN&DXMN]<'_X##[QXYON5_]!!4J$-9DWW&B((I.B="\
-MS4$ZL9^KWIS<68$+K($TO8G)&FJ)7LL3"W,Z,?!ZR/9DN<,24\.*3(2LL??%
-MWI[E!^.J9-YR8E^T+(B.^8?D@2]4F5AEJ]IT@_CW`,WEQ'!S"U4J834Y/:ZL
-M%"%@0ETY_<"(IT?+%\4,-\+J))4&G-/FNO>YA?KWQM>CZU4TWX67N`YG7E=5
-M;@"ZLY1,XQ<OX[9776KD.7<.\/[M+*9Y]W/[>&1W15`2MT8#RP,`?````'P`
-M```"````10``>%/7``!`$0``P*@!`<"H`0(!]`'T`&0&26/"@BU\FIO'\6,%
-M66];MI0N("4(`````````%PJ``!`I#A#40P9S[\"[`?>=0MI7\9B1"N-@=Q%
-M;6=",I9'HQ/JU,UX:9#I[^H8[\O&E9!]O-?]OE2+>RW8XZ'O4!*W1G#6`P!L
-M````;`````(```!%``!H4]@``$`1``#`J`$!P*@!`@'T`?0`5`8Y8\*"+7R:
-MF\?Q8P59;UNVE"X@)2``````````3````#`:&=]9</K<%W`',J@C\R.L%JK>
-MNO`%$3$1.5'-,25,@EG![^2PW<=^?TB>J%`2MT8LY@,`;````&P````"````
-M10``:%/;``!`$0``P*@!`<"H`0(!]`'T`%0&.6/"@BU\FIO'\6,%66];MI0N
-M("4(`````0```$PJ```P>7"$30I%WE=E#HC#"F%.=%B;#&&@HA$/!AW2"SIK
-M!7'EJXJXP.K@S)J?D"M0$K=&1_,#`&P```!L`````@```$4``&A3W```0!$`
-M`,"H`0'`J`$"`?0!]`!4!CECPH(M?)J;Q_%C!5EO6[:4+B`E(`````$```!,
-M````,.6'.7W=X2`@,PALYKT[(FU<_I?IQ(LF`[FH'X0\XC$ANMGV*$^>0X"?
-M/?U$4!*W1IKO!`"8`0``F`$```(```!%``&44]X``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E8KMZF;L4_/,``````````"$@(@@````````!>"(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``D6H<!8TY)H["4B/8CLRCT-+<
-M&=AH.T+$Z6UM&VU)=_S>^(?'2G0$%YK_3TC\?M$);E'-S]*_RR'GQ*I3FJ7F
-M>F0<MB50(-S3DR=B_6C13=YL.PF(?S^:8I+(343>>D:R^.L>`U/`D%!*ILT*
-M0&OSCBDEWEZ>/N7,A+83ZQ%,Q_(I```DL8YY",80]RX)3I2*=X)2!Q=G",FP
-M9I$K]-0XNH"4*3,I```<``!`!/Y<M[_F+46'4TP_B`Y\U%KSZ$*9````'```
-M0`49R55[(K4A\XH?DI(\!?.!;^*NH%`2MT:I_@0`7````%P````"````10``
-M6%/?``!`$0``P*@!`<"H`0(!]`'T`$0&*6*[>IF[%/SS```````````I("(@
-M`````````#P````@``!`!@````&BT/3$2.$Y,T5=4S<*ONB#SC<^\U`2MT9#
-M#@4`N`$``+@!```"````10`!M%/@``!`$0``P*@!`<"H`0(!]`'T`:`'A6*[
-M>IF[%/SS```````````I("((`````````9@A```@``!`!@````&BT/3$2.$Y
-M,T5=4S<*ONB#SC<^\R(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``D6H<!8TY)H["4B/8CLRCT-+<&=AH.T+$Z6UM&VU)=_S>^(?'2G0$
-M%YK_3TC\?M$);E'-S]*_RR'GQ*I3FJ7F>F0<MB50(-S3DR=B_6C13=YL.PF(
-M?S^:8I+(343>>D:R^.L>`U/`D%!*ILT*0&OSCBDEWEZ>/N7,A+83ZQ%,Q_(I
-M```DL8YY",80]RX)3I2*=X)2!Q=G",FP9I$K]-0XNH"4*3,I```<``!`!/Y<
-MM[_F+46'4TP_B`Y\U%KSZ$*9````'```0`49R55[(K4A\XH?DI(\!?.!;^*N
-MH%`2MT8\,P4`4`$``%`!```"````10`!3%/A``!`$0``P*@!`<"H`0(!]`'T
-M`3@''6*[>IF[%/SSW$O,Q`FAGYPA("(@`````````3`B```P````+`$!``0#
-M```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``+'?
-M2JO@#;V(KB;7()AFHOL/%2'8FEH[@@3USR=F_E5_P(8)C0$RFC)YFTQSXMY)
-MD4`,H_)=_E,]ZP)%HUNU>.@4#JQO([43YD]032+]P/W!D49].L7CH/=Y_FYH
-MUZ[G8O1)UK2C'6V[B"%J.X-X-E8AUV3R=GA8[X4G!RI68$'=*0``)#KG*]E.
-M+\@CJ-MX7Y>)F24KE<"%;HM[AB`"V5).GH!^*0``'```0`36>W7OE'72C!K4
-M+E$26T1NE552&````!P``$`%3<>[Q2Y',N*>C%*CY8Q+V2\W=[!0$K=&`V(%
-M``P!```,`0```@```$4``0A3X@``0!$``,"H`0'`J`$"`?0!]`#T!]EBNWJ9
-MNQ3\\]Q+S,0)H9^<+B`C"`````$```#L(P``T(.+G5#TH$[MPIQGLW,MU7S/
-M5\@>1+=9CD/5>8R35T7K'>^&B'YC&W.!W\7@@`&PGK\/71H'(%%*2@`_F<6W
-M'1#\HG^_V3<L>RZBXC5Y9=N;>$:)3$<K?PRM)QYY4-WV+>P!QF[?S]O36D[<
-MC6UG'A5E(CWFM#0'FO2%'E,34R<9(M_CQD^\5>-(IL$LT,"5DS*I>57Z5D3E
-M(KQ/ZU9T0&%RV2RO\(GAZ.V.+M>TCAE[+5TU856MO2[P?I'E10I`??DV#*F_
-M3E@EI(0BW%`2MT;(>@4`O````+P````"````10``N%/C``!`$0``P*@!`<"H
-M`0(!]`'T`*0&B6*[>IF[%/SSW$O,Q`FAGYPN(",@`````0```)PD``"`J22*
-M.V=%#`5=L_XFXZ@C=8_N@0W65CZY]_)HVM,'5-I_LI;C&Z+Q'I4MXM%!X0_?
-M.M!(D$D;X$KQFR/T]=H9QY/Q$I:EP(:A%#L([\0IS&+_U2U!CM"O%'0:O._]
-MG9VO&_PI!H'@./G\!LW1]#91[5NI%56-,'>?5C0/&U`2MT:=F04`'`$``!P!
-M```"````10`!&%/D``!`$0``P*@!`<"H`0(!]`'T`00'Z6*[>IF[%/SSW$O,
-MQ`FAGYPN("0(`````@```/PA``#@X:#-N:0GR(DV<]:"7ISFM$@EZ(YIR7>G
-MU6%PK"!3,96GS?VL<&4X]IP.3*-HIZ#NL^IY\?(BZZP"0"9NL8]GQZ.T*LUC
-M89.B!57.HE[/(0=6'_ZSRE->;3N%6M!=E@W#,=UCW*"JQ"I?%H7<$C*ELVWX
-M3)OH]D.3%?[LESX<4(,K<SX+RQY!*&ZQ35"IT2@9!_JGD=BGQ,TUBBW[)=;_
-M>[FO]Z%=V90"2$#<QM6?AR5M=AX46#.:0'SA3,ZZ]32]C)EZH:P!(`R23>EQ
-M">QHW>.T-NT.',8'SX;RJE`2MT;+I`4`_````/P````"````10``^%/E``!`
-M$0``P*@!`<"H`0(!]`'T`.0&R6*[>IF[%/SSW$O,Q`FAGYPN("0(`````P``
-M`-PA``#`LU@86LO#<XA0<C'XACZ=I/.UH0"MF0GW/8#&70CHV!JA*8+CID3W
-M23COM%F'.*$JFIJ1\@C8BBZ]G!&,`0A!-I:4RN"^R3-5[F"J,KH[Z*)UGV=2
-M^4)GJ!FTKG%3>XK6_-]#ZEZ/E<8E8?..ENOZCW#]5#HN-%`P`SX\W*R8T<X6
-M>%Y8O76-&<@RL029U1.QW2T&=J;(P$G9VQ]8FM#)U-FT-#2ZVR+='@89)1\@
-M!\CV??K"4C+P;10P"Q%0$K=&>Z\%`&P```!L`````@```$4``&A3Y@``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CEBNWJ9NQ3\\]Q+S,0)H9^<+B`D(`````(```!,
-M*0``,+#L"PO837R+.O=/4,4XSL['_<[4V8#78U-LR"`A;HU"^"R6=/\`CV+"
-M=Q,U4!*W1O_)!0!L````;`````(```!%``!H4^<``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y8KMZF;L4_//<2\S$":&?G"X@)"`````#````3"D``#`"Y+G]"157
-M_?$7[=5%_D[FZ`H`[V_;T4&UD1+&A^VZ72I?)5QK1>];22R$A5`2MT9#Y`4`
-M/`$``#P!```"````10`!.%/H``!`$0``P*@!`<"H`0(!]`'T`20'"6*[>IF[
-M%/SSW$O,Q`FAGYPN("0(````!````1PA``$`1B=G\P1RB:DA[GH""$_ZSZ@\
-MT<;''(A"O\H[T/5\71N(EB]$G+3C\-KO*P!!1$I![%_?6?$C<;1XVQJLU>6$
-M0P'TL^@-0\UF[=#'7BB8`UL4F&+)BC`X]N\.)RY]32&=H9=P:.5S9B%UUZ>S
-M:LW-,JW?7ZINCT/.=]J[<8=5V5;7@LS!S'#@UL[X84P)KYU(P+9ZK0SI3#=/
-M7ULMTCW@JLEFO'B_KZV4T9!<PPX6,^)UTV4QF(,3A]+A1/W.^$E!UY$/8MZ'
-M+?R95&F%\KD0M^[(-2X*'_CIGMV@$X4VM$^.F>@J8U5;#UWQF)`[-B![(;S&
-M$Y0HS\D;0F3_4!*W1M;O!0`<`0``'`$```(```!%``$84^D``$`1``#`J`$!
-MP*@!`@'T`?0!!`?I8KMZF;L4_//<2\S$":&?G"X@)`@````%````_"$``.!1
-M]*Q"LF45O`L>:Q7",9'GM<80ODEWW*I63%S`__G5B\-[H$:&XCMD_O\8<C(W
-M0D_5J^S9@8B7OALC4@)._L=RFN]ER16!UQI%2RQGU+P1C`6-1PZIR.%3P%:L
-M#G2I=.:U-,;)6)&P=5CA=OVNN5T9A3=)A)EKFU)YS>S6OL-@#L<J;>%`W>Y1
-ML*\%WDB6#88<)5JNCK#3!;`!'3BR5*\_AX\ROK)08`;AV^&EOP!HBM"*95>8
-MPP52'K1+%75>':U=^)<&V0X#+'G#(8^+?$H5N=K^$GQ4\.&'L-"74!*W1G<`
-M!@#L````[`````(```!%``#H4^H``$`1``#`J`$!P*@!`@'T`?0`U`:Y8KMZ
-MF;L4_//<2\S$":&?G"X@)"`````$````S"$``+#D;[JY3>8(*H!68Y$)6P:1
-ME);[YS'=>FB)L,_1MO9R%`3N8ZG;FD,5Q0!\6EV33@0G&=V+X%1Y[@,^;6^J
-M@QR8[;.!W?K+-*,R[#3GBI4A,I4C<IRAPU21+5!_")#GO[!%YT<C(.1;(8=J
-M/(PF5$LCQ/*=?AF[(?(>/&(3ZPA"]?Q]J#Q95F$N%/>O?I(`LEGD+LL!!@TP
-M/GR@R+]HX4W250F0")N;5L#OTFYV4!*W1ETC!@#L````[`````(```!%``#H
-M4^L``$`1``#`J`$!P*@!`@'T`?0`U`:Y8KMZF;L4_//<2\S$":&?G"X@)"``
-M```%````S"$``+"?%`#6T?54&OT%GS,M9GDM*??%:/U2+V"B%JY!)DRF.=_X
-M/O'ZA<[,1[K'U?9--I/P:JMZ4/N*ABM"_C"F5-0%#WOM`;/*4-F9#`3_4`T]
-MF$MR,1JW?H-9&HW"/K>T`RDPR,[)G+[FX*N_1H#;.KPHM$PB$P)XM-CIEOM6
-M1;WAW3P)OB9CQ=?Z?;_S:^VI:&BI''\[=7I<WG2!U(;M5P(E^J))D>1E5]Z6
-M!NC#4!*W1KE`!@`\`0``/`$```(```!%``$X4^P``$`1``#`J`$!P*@!`@'T
-M`?0!)`<)8KMZF;L4_//<2\S$":&?G"X@)`@````&```!'"$``0!M^D`<6`3O
-MP-_;*JW">YV`4W\??E0Y,IZ@[6VJ7CP9+#=`79IP\!T0\OH-\HZS$'[6X<];
-M.%5K6[VXUW4='\14E9=TFSJ!8.2L5XFA1G"D$%&)5ID1EJ9J\MXIA"\(V!EV
-MVW`%P"$Y[I6N^G&#7#Q-<!;F=GT"C643;()X&I=%D5@:67D2Z?5HH.C*V[$E
-MA##)IPJ3^B';MLS1T`H9:L273^`$R5U_:**T,I>5&(.+TGV&PH".AP#!^9_2
-M3'A&+V^H'*1HG\M'0`=M4#.6KA):A:&V#JO?@(@;N9<2HZ3UHI>>JD/C;AG-
-MFLV)8WY16WS56!R^QX9?]MX&P450$K=&3TP&`!P!```<`0```@```$4``1A3
-M[0``0!$``,"H`0'`J`$"`?0!]`$$!^EBNWJ9NQ3\\]Q+S,0)H9^<+B`D"```
-M``<```#\(0``X#I%ZE_>E!Y1:*-_/2,!5$[VY;=@)'@F3#$=-W9O.<36F5HO
-MI^(\RB5*?/SUN=XK'L=[MACG"X9;[FWQ'2S$P4E2%7?K5HIJ`2;;4NV^2-+Y
-M"&E"7+QBACNDPZH/<"6>]_TWZQ(T(=#=I7',*F).!6?-:#%J_MJ&Q(RW'*^@
-MZWF1(R+1J4QPSX\AB)"IF2^'BI!WA@@QXI32$XC*?P_RB&;;M5$2"LK3MBHE
-M13==HE'Z#XU5<'PG)$\AA@@%+@_5F<(1+&^A(P1!H,^Q^.=8)ZDVZ?C?V:4M
-M068"!>=0$K=&ZUL&`.P```#L`````@```$4``.A3[@``0!$``,"H`0'`J`$"
-M`?0!]`#4!KEBNWJ9NQ3\\]Q+S,0)H9^<+B`D(`````8```#,(0``L,&-'Y[T
-M9$5D$1?^DBL1'%N@Z/CA)\)-Q8N00A?`*^,?P*I#;]0WJ[/0@53_S+<RT1=]
-M8L@GM2D(M0'XD@MO$SJ@G$1=*@*E3\*WEN-43J^^0:2WVB2C'5G\E<20P0%8
-MT/<MX80<TPDH1F=5.>0KQ1856@OW>A*=YNF?_FYS%5=5G7B_F>*&2]#Z4^$/
-MM_KZ:V`+&`_`Z<=+[?KXI241VAMM@03JWSS*C4WHI&!0$K=&Q7\&`.P```#L
-M`````@```$4``.A3\0``0!$``,"H`0'`J`$"`?0!]`#4!KEBNWJ9NQ3\\]Q+
-MS,0)H9^<+B`D(`````<```#,(0``L)GEG0!,4.K1G?6:'7Z&VZ141%U3C:WF
-M`SR>;Y_FSM&XRLR'J91E2*2^']\^+2^0=\N4(X(K,0-E5OMOV(1!AT(80/:)
-M[E5+4W&$-J5V)Q9;:O_S*(%!76G<P8G(+<^]D)\<1$Z(O?:R<R%"/'4[B-S@
-M#4/O7CW("R$^X'H8=,"HT+U%5#^0I*`+MY?Q&AK:`"=)[T]P;49K@7S:)./:
-MVV(BZP+5U?&?H+%ZE!M0$K=&!*4&`(P!``",`0```@```$4``8A3\@``0!$`
-M`,"H`0'`J`$"`?0!]`%T!UEBNWJ9NQ3\\]Q+S,0)H9^<+B`D"`````@```%L
-M(0`!4",4\M.K=E3"1+=I.R,2>(YKI'UR?N1@=RK<-`Q6/3#!?$0$E,XO%.-4
-MI!+NBAA&!F,32Q)P>XX0;AX0)4K%==#['?50:HR@<G0;KQ]C&J#E$CSX$#:D
-M,P2.)5-*S!L)+'0B,]W5#3`?!C<AKI;[;S_[UX^P0'6-)WR[0C"A@D59DG#6
-M/EX[R;`EA#OF>D?(?N2P1U^\B`?O76QZ(Q-MII->/:1S.9^E3\RTX!,F'1/Y
-MV`H85BO_4)+Y,*M,L#&R%UG$Y(L[A;`E!6Y$[Y3`#G8+!V\AH"^^W"S*U+WI
-MBHPJ(J!&5VP^N_8GH\.H%N7L;*1S>OL$_?*,[R6$;8'Y=!9+/X/6CMOAF"O:
-M4K3:9D2TB?[&C[BWF\80]8!3URR*-GFB?-N[//;8$@7(XGQR2"!T5HXODH9R
-ML8JJ#F5%[:0I@@_NP)@;L"TUYBY.4!*W1O/:!@!<`0``7`$```(```!%``%8
-M4_,``$`1``#`J`$!P*@!`@'T`?0!1`<I8KMZF;L4_//<2\S$":&?G"X@)"``
-M```(```!/"$``2#2,"Z0:6A+#,DW/UEH$E_TCZQH4E#:>\5'<M;B.1"IW;#9
-MG%THOWX%8\S_*(J=DG_;<*C$H8]N\IUB#'YG0(92>#7Z:)/4B5C%":P51GF(
-M]2]GBS2&<I(**S/N%I&6R#(_^$ZP8?([_.0'11-T8QPBXWDMR_)1HL"9O@+9
-MJ6-H>1]`$;0&2Z3E0;V!2T(_0FA>WEQ^[A`"G&'MC$-]I??SB`Y+7PF+%\"#
-MD98=IJMR7G/0B;UZ2-)`;:3"QA+5E;NB*0-'2.L7S)CY@:UE]9+&.CZF9@&?
-M]2Y=,?UX8H&(/$CCUH9*`LK\ST1-K)R0/P##&UIY0J.?NJ^E@<>8G"`JKA"E
-M(QS[BT$?6P))4C9PI*36%+PZKQ_+D,I+\E`2MT8)`@<`?````'P````"````
-M10``>%/T``!`$0``P*@!`<"H`0(!]`'T`&0&28L^TP5&DB4R/M$5RW5.0#(N
-M("4(`````````%PJ``!`<0Q8QR?>TP=B/IFP1EU8GI)I$!#5\(&5=IT%9+=1
-M2&[22M2WXP\Q/TP>*-#ZVWK8"[^.0GL>P+X)RTQ<4!*W1I`-!P!L````;```
-M``(```!%``!H4_4``$`1``#`J`$!P*@!`@'T`?0`5`8YBS[3!4:2)3(^T17+
-M=4Y`,BX@)2``````````3````#`==H^TUIIR:BVK<!R;:WP&!>TNTG!%.YFZ
-MD+=K3]=M\IR'TL85VZQ5'H:*.E`2MT8P'`<`;````&P````"````10``:%/V
-M``!`$0``P*@!`<"H`0(!]`'T`%0&.8L^TP5&DB4R/M$5RW5.0#(N("4(````
-M`0```$PJ```P70?/F!E3-ZR"PCAD9+NI`%[ZIT_2>F$5&:8)MH`H0R8Q/!O-
-MFZK!@U*`G*Q0$K=&ERH'`&P```!L`````@```$4``&A3]P``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CF+/M,%1I(E,C[1%<MU3D`R+B`E(`````$```!,````,-=#
-M8WK,9!04YFDVA2S!\_Z)I78?Q>H`B`AX#&1>EMK&AQ<\/KBJ"7>QXK2*4!*W
-M1@PJ"`"8`0``F`$```(```!%``&44_@``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M$&-H5E1L&S<``````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``O90,"6HELEMK_HVL9_GX)F;IH^>/8B98
-MN6&3*1\W&0Q9>?U6B]%G=8/"#>"X>I5Y&OG0D7`ILDV@\)7_I-L.R9)1Y9`+
-M*AJ'S8@93DIO`2H6#O']S&U&G&5T>\(?H6<@T$26NV(5V>TE8DF7I7C/K2%+
-MY47P?3S/"9@VA3E,(H(I```D&F+*.XS/=WR"3@F:/50;KGBRDJ&/3Z]"7V7J
-MC,_PI)XI```<``!`!&1!?X8RLNXE,S-G8K].MM4,,4_<````'```0`4-UAK2
-MUVBH@7%DB\?7FRUVN/<%K5`2MT;H.`@`7````%P````"````10``6%/Y``!`
-M$0``P*@!`<"H`0(!]`'T`$0&*1!C:%94;!LW```````````I("(@````````
-M`#P````@``!`!@````$+D$@ZLS?7:P68*?SWR?]_%O,^5%`2MT9)2`@`N`$`
-M`+@!```"````10`!M%/Z``!`$0``P*@!`<"H`0(!]`'T`:`'A1!C:%94;!LW
-M```````````I("((`````````9@A```@``!`!@````$+D$@ZLS?7:P68*?SW
-MR?]_%O,^5"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MO90,"6HELEMK_HVL9_GX)F;IH^>/8B98N6&3*1\W&0Q9>?U6B]%G=8/"#>"X
-M>I5Y&OG0D7`ILDV@\)7_I-L.R9)1Y9`+*AJ'S8@93DIO`2H6#O']S&U&G&5T
-M>\(?H6<@T$26NV(5V>TE8DF7I7C/K2%+Y47P?3S/"9@VA3E,(H(I```D&F+*
-M.XS/=WR"3@F:/50;KGBRDJ&/3Z]"7V7JC,_PI)XI```<``!`!&1!?X8RLNXE
-M,S-G8K].MM4,,4_<````'```0`4-UAK2UVBH@7%DB\?7FRUVN/<%K5`2MT9Z
-M;`@`4`$``%`!```"````10`!3%/[``!`$0``P*@!`<"H`0(!]`'T`3@''1!C
-M:%94;!LW!<S3$QTRS0(A("(@`````````3`B```P````+`$!``0#```,`0``
-M#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``&]W?\@SQX8\
-M[)P*B`C04#V2H"2S_^/F83NZG,4>U583"=(Q:@(#)Z"])W<%!DIO"^.$KXAV
-M:Y60ZU!,[&_CD@XZ\PQ]_7=\&;6FX\1!PS-E;W*4"Y/ZFM?N,LP1E6+JF(ZC
-M@VI%I:PJ'"I)%RG1XV:$YR6V1+S']@SPV8DD3-[%*0``),83U=KY'1[A5-F'
-M73!J"-96K3RR$E7O]I7,_NY/7,$_*0``'```0`0V/EPR%+^+?DWL*UGFE0AL
-MTLI#TP```!P``$`%2)\[VO=.$P+P_C4+V.TN,,"&LKU0$K=&P)D(``P!```,
-M`0```@```$4``0A3_```0!$``,"H`0'`J`$"`?0!]`#T!]D08VA65&P;-P7,
-MTQ,=,LT"+B`C"`````$```#L(P``T`X,9NUOY85[;Z/<G1Z8((KC7$N;J(C7
-MX2W1;)Q(1#OB%2&$M8(EXY\O'2<(8&2\F3IJ^FGJ!@;'&>"<EV-UTSX!:2-T
-M@OKUA7BP(AY&#_?`R+*UV"]==EW@*]+1R#8H<O\"B<1,,QIT9`V[%7[=Z]P:
-M:J0C6#E=Z:%-E<\B^S2L(PYY7OB0-0Q3-.NK,"/$!V\?:&&+G4N-N7A(Y1*]
-M'I:JL&=HVT8+Y"K(U(@I"P92=L%/6.O1+*MCG02;:H$1-<`*#"'[:Q?&'=Z%
-M+%`2MT:!LP@`O````+P````"````10``N%/]``!`$0``P*@!`<"H`0(!]`'T
-M`*0&B1!C:%94;!LW!<S3$QTRS0(N(",@`````0```)PD``"`\.'4AV_K.N#:
-M8'V-'41&99?()=Y*5MEJAD%='US1CD][OUTUT"0:UK,ZVG*/(D<=GG/PN%]*
-M>\/O="Y\/[NNFDH6(-P,_YT*1-G0@NN185#,\"-CESW_BU:=O$#%ZZ%IKM;]
-M@E=HX-9"(]3::Z';$[YM/#*U>?*=;=`AOE`2MT9=T@@`'`$``!P!```"````
-M10`!&%/^``!`$0``P*@!`<"H`0(!]`'T`00'Z1!C:%94;!LW!<S3$QTRS0(N
-M("0(`````@```/PA``#@D_8-U;/N%[7;";M!J(Q4C-B'O);&IX!$D..^>_$@
-M<5O%F7F$D<5VIKEKOT5N;#6-_@?WD%V$UQ<^^?X;C6RY;#_ST<6T_"82#4A_
-M*RLU&+M2$Y>)BIK.E;0P(I+>0`+(TN?.L#DB#1Y&IB:_4GL%:,3.E!L$S"E-
-MV\SI*&57'%SH5;F<<E$J2@7!Q[QZ;Q/@41SV*)H(_J?F%N&>@'L()5Y+%P0?
-M7\%Y+?S!&]N!7V[>QM+HOAH@44PR"6'D#W<%-%SQ2N;"0H)EAUVA'9ZJ]37V
-MA*[V(?B_,%((;E`2MT8YV`@`_````/P````"````10``^%/_``!`$0``P*@!
-M`<"H`0(!]`'T`.0&R1!C:%94;!LW!<S3$QTRS0(N("0(`````P```-PA``#`
-M%F8Y\AL0<]K]S^R#1]D(/?BA7!\"_:9_POY2O9&/0H49%F"K`1/NH)#;E/7*
-M['VM&C+W,KW1K3I<5@7IIR='F-"WKP,B\FNIE+5Y69PM?]U/_..&(X2SPE2'
-MY*PD69UP:Y'-R,,W]R%3`2W0^*%:];X#C&JDLTV\GUU,+ZA/;4\MOZ`"F1^S
-MDE19-W6>NZY"U1__"0AZ7Q+FFN4?[$MQF!\"3YNE\M:NRIEKB/PH^=\,+K=N
-MR)@C<0^>'$)0$K=&9N@(`&P```!L`````@```$4``&A4````0!$``,"H`0'`
-MJ`$"`?0!]`!4!CD08VA65&P;-P7,TQ,=,LT"+B`D(`````(```!,*0``,*-O
-M[_/^IXKXPDF+"+M$W@?JON51B]W`M%F7?G"D@@0OKW*4V_:QPM#>``VZ4!*W
-M1M($"0!L````;`````(```!%``!H5`$``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-M$&-H5E1L&S<%S-,3'3+-`BX@)"`````#````3"D``##F88*XR>K-F33^"LFY
-M^QD(#"0#P*T"<'_'VC-J5Z\;T-2=3U.0C1:<?Y`][E`2MT9[(`D`/`$``#P!
-M```"````10`!.%0"``!`$0``P*@!`<"H`0(!]`'T`20'"1!C:%94;!LW!<S3
-M$QTRS0(N("0(````!````1PA``$`<P``.W7MM8Z6M?IX)7[#OP)Q.$V)&0O4
-M4B\^F_?]$',UT7U'.)\>><=`JR_V_NV=OWKKE2QG&(DCZ<\2B3SRJW:H3D"P
-M&1B=F%?LQ_MR'PV?>2Y&!W^KA0:[8.J`_TK&:0N7UR?V--9_)>5+H[G\_16B
-MMM[[<K((='OUQ=OY'EOW*N_!<`<6A]2>7#=P0-R/5;3R<_J6;(P41NK9H9CG
-M$6I@+\!8Z7^RHX<JL:U*^U?MGX@95)S0M33D[.,::30,RJ,_:985)>(E]FN`
-M^%"1A9YY3]3CED'-NN#F68K=^5:3V'-X#'@B@2KGXP*JW)*ZFZ4RKBVRE$Y/
-M2?[!4!*W1G\L"0`<`0``'`$```(```!%``$85`,``$`1``#`J`$!P*@!`@'T
-M`?0!!`?I$&-H5E1L&S<%S-,3'3+-`BX@)`@````%````_"$``."VHP944<(8
-M%VI08$=]AZ+ZA1^,,>QC/X9&SF8_X%WO,I?;6]-M0@)3U<$A="`N787/8.@V
-M`$ZC$*Y>X;94C+48%03^=X7-NX]$69[<<N(:-O\SP$];1F)R$(\W9T`=4;&^
-MA)1;O3CY-0YVL83I5^\YR3JD5!1:W]G'E$)LDFQ#6AO#R]M+GNY(EGQ6/BMZ
-M^AB)&=S]P3LJ,6(1X:X+/\:#(F;R)C0MXJ&-OH'@[@/J(F1I31+JPW1@UZA3
-M<Y&_&S,5F\74\O_[1;7L#?(KF_76=77M.W\!0NBYBPOE4!*W1DL\"0#L````
-M[`````(```!%``#H5`0``$`1``#`J`$!P*@!`@'T`?0`U`:Y$&-H5E1L&S<%
-MS-,3'3+-`BX@)"`````$````S"$``+#;VP0\]DJMQ:K5:*I)2='D6A`.N4I:
-MK$`AM#0,0A#<2TAC-?MU"$K&%RX3K?@T51H:"-8.5)>W+#')H0'0&'B&"RE-
-M2@;L5R)#_(E2NI+;N$Y+S92M5QZP(8WAWO(/%<<'NWXD!6"A`1%I.KKX2T%A
-MGYK2]-5P/2^0+.UKAMI>[Y(!X[7+\4DD09`?B*JJ_ELQZD2L.L#[QA:419N5
-M\J1HA7EUMCHZA3IF\1/!4!*W1@1@"0#L````[`````(```!%``#H5`4``$`1
-M``#`J`$!P*@!`@'T`?0`U`:Y$&-H5E1L&S<%S-,3'3+-`BX@)"`````%````
-MS"$``+#>/JH.^0&]5:BW3O_U),^-AQU0/BH:%(E/^[9!KRJ6D9I9-=F(PC'.
-M]%P*M5J,)A5/I$83<ZHMMR891;GB[5;,VA!;8XWAR=+7SN'GE%S7H=G;\\0M
-MJ.LQE.!P59EGW^:[_UIT(0_8O8',6=0FXL@UQ#Z2O*5242[R@]OLL4&UJS#J
-MX-'Z?/^?!?:8\@[3!KMK6UH_87A992K3/K@5]$C-`9*:2"R9$#M6_VWM4!*W
-M1E9]"0`\`0``/`$```(```!%``$X5`<``$`1``#`J`$!P*@!`@'T`?0!)`<)
-M$&-H5E1L&S<%S-,3'3+-`BX@)`@````&```!'"$``0`7OKL:E`'"S(A1/^^Q
-M]XSOSY.4O[V^T-T3,,(<K^&8`V.C/@B?;_`J=JQ+ECLF]<H3_4.$=;)G/K*R
-MT8\V?1[W^FW-#]Q193`%?AH>B4^V[8F-_<3DOP-I^"$@.H4GN"T$?=E?=.>I
-MWCH?H[VIYDA7:!QITLDNUF[/ABEY%LD1H[HY%%QNR+5)@2GUR36E.'D[$>BF
-M(K3%F[N-A_J'E3'VN]KL(^*"RC$YA9!JE'AS]2!Z[1YA^K9K[9C/FS\>R`16
-M%KN;%/07=+1$M4R),8W:A"?B@(;4W396K+["V#X7<G]L$JZ6GZL\HV*.=@&W
-M2';P9H]LN.4P;FUZ_=A0$K=&2HD)`!P!```<`0```@```$4``1A4"```0!$`
-M`,"H`0'`J`$"`?0!]`$$!^D08VA65&P;-P7,TQ,=,LT"+B`D"`````<```#\
-M(0``X)4YIV.P)$7&M<]Z+2C:5@0%<_Y"*?4&80SS8V#?O\;AD>=DVSS;[Q``
-M.$$<>9EV=X9B/EGJHZ"1?*G3BQ3D;M_Q;,K\2I(<KK"ZLVH=V8T#V#<\&Z_%
-M\J!&&YG1N88A@K,!>@4J,_-.DF8.FSLST&7#3HL%IF8!N5K63_9F[1H\:8,2
-MDI-V5*1WHA]8\V:5TD"G9==TFG[(9S.>D*5$$2N>7XI@LXR'NVK;1E=,10TZ
-M#EE$9R0D;><Z0(^HAJ)]-CS23^NY$M]7ZH/HCC'/]T:)R:SQ+<8+,%KQP310
-M$K=&>)H)`.P```#L`````@```$4``.A4"@``0!$``,"H`0'`J`$"`?0!]`#4
-M!KD08VA65&P;-P7,TQ,=,LT"+B`D(`````8```#,(0``L'"=GF^QV*T@L#H\
-M<L!@@QK25^M"'J-U#I_3C?@*=P8E)SFUVF33::&2\ZK0).6P6RH&0)L"V85X
-M'SI:GT8EL]*60.*#PT%DA(DB0==:<,]PNC\>RLSZ3H6QSCOT8;>:LH?ZP.H(
-M:]QZ781/ZII#WWQ^E3#T5M2D>\WR_BPUC',Y@<I]N`,`QS=QKAF-9-W^0#>3
-M$^\7NI]:A$9#A2\`E\LL&D]2#4S$0N^RH(-0$K=&N+T)`.P```#L`````@``
-M`$4``.A4"P``0!$``,"H`0'`J`$"`?0!]`#4!KD08VA65&P;-P7,TQ,=,LT"
-M+B`D(`````<```#,(0``L,R-#XKN,7A9OE3`I.0-%MOH07"7@PL&"?P3&^/`
-M\%+J@67\:KYFY6;V"L#3EV,A:J*-,=3FCJFO9CQT'*,P;"$;IHO?5]^E9,.C
-MOMQV=L3T!9JCRJ\(7LS-8SI<PX.6KG(Q='=NF(K+V9SV-+%FG?$Q-0?R3/>C
-MH_!H-4[6:TDJ)5PA6BXZZF=UZ>/OBV5GDQD72W"[34A^2G"4N20[K0I<!6#G
-M%]I2XFP3W)I0$K=&R^,)`(P!``",`0```@```$4``8A4#0``0!$``,"H`0'`
-MJ`$"`?0!]`%T!UD08VA65&P;-P7,TQ,=,LT"+B`D"`````@```%L(0`!4$9[
-MY0-7WIEG*M:6,NA;2?DLV>B+#&!*^N(@&>=A\;;S?O'15=L3S'RC5AR+'1['
-MC?=97NU%!JEY[[(4[L%\\D'E+GAA96(D!#]M0`NM;UM^9<<O,Z%R<@Z`K-W!
-M,SZ`>A6KZ!TMG6^V^J@[5>AFW0:-ETU*DL/.#PB]?[N92`=!,GA_#0Y29>/"
-MMT"NIJ#&$AC7U^=!>;1J%7QH9N@V:@Q=\-L.;KX<3_GEYDAD^VS79=A:PEPK
-M[4O86-J9F*A#IG-SNY?/NB<0SF>_=N6@(#V(1=UIL$$\9A+!5P#0PTG6X3A;
-M_M6,<R?_4)7C;2#X01,9PC78A/&)HG.6G=1%^[(?%1]*P,[VV\V/"_AW>YD[
-M$=N"+?+B@S=,61++>AT("]4E;:+F\"73TE)9,4BQBW$:HSC05]2$=#<0,Y<3
-M,$D&)H;2KHH>E(7^0^7N4!*W1I48"@!<`0``7`$```(```!%``%85`X``$`1
-M``#`J`$!P*@!`@'T`?0!1`<I$&-H5E1L&S<%S-,3'3+-`BX@)"`````(```!
-M/"$``2"Q>"+T'EGV-RC(0F)S.=LX4PDS/SSRG67)OE:,#P%]Q4Y<8I*[9TLL
-MU=:7,\=>;G6V0+NZ]CI:](C6=X@;"HT&V5X)F+[0=S(,,PR.Z96<1F__VC$=
-M)<]65)G#,B;`[VJ(]B^Y)-1@UV/-,J^;(=$0ZE;Z0;$*`)Z]-43Y+]3-9C7`
-MZ][]N&&9[K7F;CY8D+&A@<M<:'UTOBCM`-ONQ)A%.Z$A)+7+DCZHB"'_AV+E
-MV_TR2G^MP"V<QIQ9;+E?K0+)[RJC0O?53`/H^#^S_"2=IE12<3D>B]ZE@-O?
-M_+[$(K#1\&[(/7K1X]X^2/DF'-W(:LX1N][_XET<`I)LBV-==G^&W4),,G\5
-M%ZDO:YB-@P16(FKWB[W;@_V2T%`2MT9*/PH`?````'P````"````10``>%0/
-M``!`$0``P*@!`<"H`0(!]`'T`&0&2;H%WZ#\P:LD&S!+J)5!*;\N("4(````
-M`````%PJ``!`1&_Q5,F6#\4,05(PQ@Q/8,0+3=AT["5QIM^S#KMA7R!/N%[A
-MK3X]ZSFZBSU:Y:D:S;N[W.Q&N(B9K$J(4!*W1H=*"@!L````;`````(```!%
-M``!H5!```$`1``#`J`$!P*@!`@'T`?0`5`8YN@7?H/S!JR0;,$NHE4$IORX@
-M)2``````````3````##::O#YZA:YZ-Y*9=>(Z<_2'9$*UHZ518KF#F2SP#(%
-M9U@7"2[>;4OKF_BKKE`2MT9]60H`;````&P````"````10``:%01``!`$0``
-MP*@!`<"H`0(!]`'T`%0&.;H%WZ#\P:LD&S!+J)5!*;\N("4(`````0```$PJ
-M```P7A/%F"@G,<E],!(3/-KML34-2'0$@`S5091R<3Z[?<Z\&`_#D*1>!8JC
-MO*I0$K=&!F@*`&P```!L`````@```$4``&A4$P``0!$``,"H`0'`J`$"`?0!
-M]`!4!CFZ!=^@_,&K)!LP2ZB502F_+B`E(`````$```!,````,"QT9_&8`,3^
-MNG^[2EZNT#.#/MANL_@-J;:W$>MHY/C&;L3WA]ZM=DK-IKCS4!*W1@=F"P"8
-M`0``F`$```(```!%``&45!<``$`1``#`J`$!P*@!`@'T`?0!@`=EA@9Y2+,X
-M+D0``````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``OR'&J+SZ]XT#@J=>S^9$.>%R!G_PM,R42!1=_*,'
-MI9=JR&\CO9BWYPOQP`HG\17ZL46T30S:?7\KP6/H@:KST2$#(D&*"`-8PJ3_
-M;'",21*LYX9%W`6G<4#/<Z)5X>^,[NO`32"H_LW5H"Z0*$3C\>"U!#T.A![4
-MJ;V[WRF@P#TI```D]!JKFV,C+`BAU,TKV=1=9+DR6AC6C;$\"-@*"X&K@GXI
-M```<``!`!!7?H()W01BQTE]+'[ILY@4/!!@F````'```0`6K'Q`I]40=F"CG
-M4171`-"3([^N5E`2MT8U=0L`7````%P````"````10``6%08``!`$0``P*@!
-M`<"H`0(!]`'T`$0&*88&>4BS."Y$```````````I("(@`````````#P````@
-M``!`!@````$?>([)S0,7[2`'EH&LU@O<A^\@Y5`2MT;RA`L`N`$``+@!```"
-M````10`!M%09``!`$0``P*@!`<"H`0(!]`'T`:`'A88&>4BS."Y$````````
-M```I("((`````````9@A```@``!`!@````$?>([)S0,7[2`'EH&LU@O<A^\@
-MY2(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``OR'&J+SZ
-M]XT#@J=>S^9$.>%R!G_PM,R42!1=_*,'I9=JR&\CO9BWYPOQP`HG\17ZL46T
-M30S:?7\KP6/H@:KST2$#(D&*"`-8PJ3_;'",21*LYX9%W`6G<4#/<Z)5X>^,
-M[NO`32"H_LW5H"Z0*$3C\>"U!#T.A![4J;V[WRF@P#TI```D]!JKFV,C+`BA
-MU,TKV=1=9+DR6AC6C;$\"-@*"X&K@GXI```<``!`!!7?H()W01BQTE]+'[IL
-MY@4/!!@F````'```0`6K'Q`I]40=F"CG4171`-"3([^N5E`2MT8_J0L`4`$`
-M`%`!```"````10`!3%0:``!`$0``P*@!`<"H`0(!]`'T`3@''88&>4BS."Y$
-M`L:;L#G:8:PA("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#
-M```(`@```@,```@#```"````"`0```(H``"(``(``#*C=$AR#^ZZFDQJFUY:
-MEU>U4E.'HJ0>C@I>$I+C[YEV/&\B0K_X<BY?`,%8#O(^H'9YBEIM(8B;)D84
-MM&AN`TF./#[$/1*I8Z[DRS]3X3]/8]6;J*Y4+&DR%GU)K>6HJH4]/C$^0N(4
-MW!H6S"*?7#E+UO86X.B=PKS<\R:*N$P5*0``)-X^-XUA>/\J9<:J$1#-E@ZP
-MP@:,KZQLN2O%E/P%,ZG?*0``'```0`2Q-E]<S4ZV;^__E%-63RI_1I-_%```
-M`!P``$`%KPL"6I8(%">N3>]-#&2*T4O]2RI0$K=&)]8+``P!```,`0```@``
-M`$4``0A4&P``0!$``,"H`0'`J`$"`?0!]`#T!]F&!GE(LS@N1`+&F[`YVF&L
-M+B`C"`````$```#L(P``T/_R9R+3?435`HA(UIA=_R1\V@8<EK(LT_JGSYB0
-MDV%<*K)JD[_^+OI"27#+\)*\G$#E,I`!CZZ*J_8QW=W#UYF_U-9QCY'\W%D%
-MI"O;X<IVUO@MKI4J1ZQDH\EYZN@2?WM(L`G);^/9F>'%47!"DID)9Y*5ZZ0(
-M4!:#738)!BEQL<5H\K>([36B05T$1YPU935DV<X`6!;"4U*$R<C_N%"75=PF
-M@0[^JLTP:P[X%%ZZ@";`+I(0N+1LA-M+(7A>I7PGR/%MY%!OV'B165`2MT;2
-M[PL`O````+P````"````10``N%0<``!`$0``P*@!`<"H`0(!]`'T`*0&B88&
-M>4BS."Y$`L:;L#G:8:PN(",@`````0```)PD``"`M4*E;P(0<F[/:JNL#1;O
-M0/3Z,^1Z2>0@=AL@7W)S]X&K[!0?&TB'K;A1UES&88:%GP[_5,TC7_W%E];/
-M_>Y98*'77:XM1-,.)E@;K//#V]-I"F>LY::K@4?$4<K@XKQXV:C5SL%Q"35(
-M%K(XJJ;&:?^],@'T_&6.ALO?/5`2MT8W#PP`'`$``!P!```"````10`!&%0=
-M``!`$0``P*@!`<"H`0(!]`'T`00'Z88&>4BS."Y$`L:;L#G:8:PN("0(````
-M`@```/PA``#@EA%I^\:!`?&1JFAL/@"<3`I`U700!SYK*H457&<AT6CAY#I*
-M9,#C1V$16PX>0H*%%4@:CQYQ"V@/H(SUMG?C<,Z'P;Q@1\GXE_-6#,I&$YDN
-M?+:(,"1.N]"'IV$N-%25-`>JTC3$\V^Q_1AJ.]ZXTEL0^_"60-O='"!$7IY"
-MGT:;+V5H2)3`J>8K#"1S"'Q)0QP=U9)B;^)*.BS/B'=-Y5#1L:H.K92QYOUR
-M8[)SZR,(CD<E$TZYG!J@MK0K(PF"07AHC&22DVL$A=WL@$)+.K*G.+KB*07\
-M^,G/85`2MT:O&@P`_````/P````"````10``^%0>``!`$0``P*@!`<"H`0(!
-M]`'T`.0&R88&>4BS."Y$`L:;L#G:8:PN("0(`````P```-PA``#`\"V<12S@
-M`E`F(!0+G+@7;62%*OUNAP3-</(T$1*9\;DN!UXV5F)4#"=Y&J5+M0:[;D9>
-M'S[HAL.\L^^Z(A":[!F?1"UX>>V&NQP>X\YRQO(26XU=[W-#\IPWRV^KKW%C
-MDSE02J,3K.OU)3EA+?W2-'<,EOD]4L63S=.#&JXA.RXH85!02UCPP7S9)P8]
-M(,E(MN4JXK#<[_L/5J`(Z[-H]."!HUA:C1O3XR$X#3*03?]>H>LZQKQ!A==@
-M\G=0$K=&9B4,`&P```!L`````@```$4``&A4'P``0!$``,"H`0'`J`$"`?0!
-M]`!4!CF&!GE(LS@N1`+&F[`YVF&L+B`D(`````(```!,*0``,&<WJ,X$))?W
-M5><Y0-J.`BZ34JG)X)T0:H,KW3O?&HP+FU&E-"Q.D28B5KG@4!*W1H=`#`!L
-M````;`````(```!%``!H5"```$`1``#`J`$!P*@!`@'T`?0`5`8YA@9Y2+,X
-M+D0"QINP.=IAK"X@)"`````#````3"D``#"`36G#*J-W#SR*SN5UHA6TU><^
-M%C9[A6F*($-GP']^H0,E;,!JH;;/A2%F3E`2MT9X6PP`/`$``#P!```"````
-M10`!.%0A``!`$0``P*@!`<"H`0(!]`'T`20'"88&>4BS."Y$`L:;L#G:8:PN
-M("0(````!````1PA``$``6&MP1'V]817B3>`"&M"'-E(!*"V.8&!W(O8F_R>
-M"6KJOTB42X!I$')Z<!AX!@>6_P!07(`1X?]1)`Z:/6`8\`8MW(:K:_3RW1,O
-M$2P+E^40:<5]UGVX/]IYZ#HZ+:)$Y(CHRXW@B9"S.2]@)Z'+,AN/OWJB\"M+
-MBKL*LZO#U=XMUK%T*>5K%P<WD,O5O:!^!)N#BM#;\MGTU1(>IO%J0#AO5Y$#
-M("-"MI2_&SI<^L2'M-5-/K"0!3,)\E@&PM(.7N6M*6GH[$,DTDE8[ZTFYV&)
-M/@!>_Y@6;8&&%SMQJW%$[I,*IS4_<_ZD,+\EJNM1V&`LK!P&[;Q$VS\D4!*W
-M1J=G#``<`0``'`$```(```!%``$85"(``$`1``#`J`$!P*@!`@'T`?0!!`?I
-MA@9Y2+,X+D0"QINP.=IAK"X@)`@````%````_"$``.`^LT`?8($;_Z^\+<WP
-M#2,>82[O`$,$1T3^8A;H/TH`\Z,PLJJ#%5[D+1$VMP^NZJQWH.R0O9PAQB^^
-M<""KQG-,=J`8&U)-V-@J76X'"_Y/<S^R`@7/5,RK+N.OQ2CZ2.?<YD^10KH<
-M5AB51]#6:,K.AE@[-EY[U&[?7]-H3U)%EBDR?L:RR`@PYW4NZ?'U,D!;IDW:
-M3$\(S^TE*";K[W^IDMQA;J!B(M<<[*4YW\"9=G'E8-\41!3:1'_)U5CNRB*>
-M.9=H+S*@Q!8L.0'&`8ZC)2\FW/+,CDQ`Q]P&4!*W1CEW#`#L````[`````(`
-M``!%``#H5",``$`1``#`J`$!P*@!`@'T`?0`U`:YA@9Y2+,X+D0"QINP.=IA
-MK"X@)"`````$````S"$``+"TK\I<^^&H+A1K@$`++W//>RU]ZIR9]NO[IZWR
-M1/1>QISG@20C70BMRWV\2>.V1/^!>JUYG"3IF\&S>_2(,^94?R&'?-*$M`SS
-MQ<*`VCH-T;\=+$#U-XKS:#':H.:T%*6<&;`9&M[M30N"II](3YBU"6KFP(JW
-M<\6*M]8+F+/(=)AHLC`=GA-T!,]3W@8,U\W=[=NR,8X"5015\Z80RUME4?\3
-M:R4$/3#I?-X_4!*W1L6:#`#L````[`````(```!%``#H5"0``$`1``#`J`$!
-MP*@!`@'T`?0`U`:YA@9Y2+,X+D0"QINP.=IAK"X@)"`````%````S"$``+"#
-ME*"B\DM94O$DHOZ)&24B(68X)ZDK8;UQ(WR,B*+EH>1QC/:3MAS)N_N*%]=T
-M4JU---FKAZO_DY:^ER*,ULJ>+8X.YB-#`YE$=!3_%:U4,'-6L[JTTP*C(JXN
-M&)_2L`GKONG/.X<R;J1-L,`1ZZ`T@.<?L"E1S'OQ#A4Q5YKRJB4E?"S%5VN2
-MUGU'6_H].:G#]\8J%G0=GFR%,5PS`,EUOF,:7#O.J<J(*"BI4!*W1NFW#``\
-M`0``/`$```(```!%``$X5"4``$`1``#`J`$!P*@!`@'T`?0!)`<)A@9Y2+,X
-M+D0"QINP.=IAK"X@)`@````&```!'"$``0"7P*$`S&>[]C/_G6/"<2JTMZS7
-M^SEE*?O@_4502T>&%V'@+#Y[.@AT:@*YL+UK]6FK<#7ZXT>^C,_IYL(+K03Q
-MTSR/?V1H?W*Y&2<6+J[OY']6N+2\273B,L'!JGSYT0>+Y$@^2?7V+?3E3`"L
-MFGM*JB#HM)!W-<N\<L?0&*W5>@W&G\0H/88_["$G)=VK+O#<>P:%A9I^5]\]
-M?X\3:I.QQFAZB6R/7I6DA-QM%9QA7YJ82(<`LG+\]2E2;3X,1O>C(QKC4DQ*
-M.B:-XT+P7\*A+LH&]Y.I75O&(JB^>W6`I&=%8IK&J#I$L<-O/W6J.]U:X&S;
-M:EF*DKV)O0M0$K=&4,,,`!P!```<`0```@```$4``1A4)@``0!$``,"H`0'`
-MJ`$"`?0!]`$$!^F&!GE(LS@N1`+&F[`YVF&L+B`D"`````<```#\(0``X!/M
-M`%/BI]YR3D,2TNW6Y(>W`EYO(./&2"?S4!!L`%Z,=,_&0.1,4WQ';[UU%A+V
-M$V>^8EQTP_9RZ/4I_<<N7E'SDW!AYS!A'82K`1VI`U57,>N6_P/?F`LKO2JI
-M<O%&O1A?9+3="^,B;H6D9#TN*$8SQ:%-"B2R_NR>)'=U1>L6V3O%!3VZ8%(#
-M!UU;<<R3<U+6$)\A_ZT)(42ZN)X>GVX4^V=',0@SB/A^;`0@UU^=7=($GO*+
-M]:+QWWYE!QYT"#NS_5IH'O/]3B[<4-'0ZB,O@5YM"@YP,-B-7790$K=&'M,,
-M`.P```#L`````@```$4``.A4)P``0!$``,"H`0'`J`$"`?0!]`#4!KF&!GE(
-MLS@N1`+&F[`YVF&L+B`D(`````8```#,(0``L!N&$20Z6[<GGGMN?]K^;61N
-ML$)7$].BD/B[Q+X416',,.D>_M04DRR8@]#=/"JH#'!JM%L)Y9[B=TK2%9-J
-M`JH?:W0+"\Q9W#GR=W;WX?HW%J5*%QD]B9+SFYBOVY30"D=#B:AM4+%\74\W
-M.$,.,"D4[D`@)E5CV*.?+H*,<6G:)P`U;EX!@&GO%K3^2,;HO33/(/SOVC:Q
-MC%N&W8F#7SD`:I_/2L-]D/98ND90$K=&I/4,`.P```#L`````@```$4``.A4
-M*```0!$``,"H`0'`J`$"`?0!]`#4!KF&!GE(LS@N1`+&F[`YVF&L+B`D(```
-M``<```#,(0``L(*^#/D6=ART:[(TZTW764!(OY)%?^S/T4ZL!TB(9H3K5HZX
-M&ETN8.'Y9]/<&Y3[$V?-:E""=,O#/-QSN31!GHSDZ_6920F//])C;3@AEJX,
-M]!IW9#M;LN@]Y=CT,RM*^=N`?KQ8!)-2N\,E\>M@R1AYKKGZ`"?%4R<ULHNK
-M!=_WH6[&1&!O;YG>AT`M_M\[L3#RPK%XAIPD#;GM\(/RA'Z'^P*.ZS_LUJKE
-MZ3E0$K=&CAL-`(P!``",`0```@```$4``8A4*0``0!$``,"H`0'`J`$"`?0!
-M]`%T!UF&!GE(LS@N1`+&F[`YVF&L+B`D"`````@```%L(0`!4+_`)B_+SGW9
-MV^!ZG%M5<;&#U@@>:@?E9D''*AU':,HQ!G,D-##$/=,57[`[^KO2WJ'/]/_/
-M.02"RF'QT-(4?+64T$[B+`WM(+.W9]$G^7S]BWT-*?]`E[P%<'IM.IH$7A!"
-M!@(!ZVA.H3$M7`0$-$Y\KP"11STX:8V]V7\VPW&ABZ#E2532;=_B__"ZK(]?
-MH]TI&J!Z>X39KX:"G+6U8=N1@)SKS'*0IR_,BP#0S"FV'58U?\#_:YN0/-?#
-M$XAD+]&0*.E+^+=#3ONC/-O@L^W6W9D*KU&5%0>H%9_SB`E_9YJP&71\-\2>
-M[E`M#0SNV$-ZQ8<X*\1(-H(#%M1':L8D,:`"'`/3V,*025/K^WB]X3O'$0?%
-M\0)1E5]?"ZO@.`;A0*^^&=OIHDSK1F)7]'IXWU9;W(0!!8SS@CRBU>55<29[
-MH!TVRJHX`1@Y4!*W1BE0#0!<`0``7`$```(```!%``%85"H``$`1``#`J`$!
-MP*@!`@'T`?0!1`<IA@9Y2+,X+D0"QINP.=IAK"X@)"`````(```!/"$``2!@
-M/.4BNH5`V1]GYCAK4BF8]XH6>TUEKHF^MLHK[IK7OU]=JTWOMR1J]7]%I-7,
-MR>XL--B:T=C!@IS?2:2T'XP=AN!2CJN-GYE,)75AV?SKC_Z-SU]S8!@R$]:_
-M:X<!C]>!)T4)G7PHR#8J.72$E,O!D&B*(;YO!Y'Q6+\+8"F!<AX$62'(48DV
-MT/K8?4QT:7QM[9,$QS7T@6N9%HFEZN;O+6.41-@YN7^@9J`</NK_:6[$72%-
-M-KD')KUX3ULO>50?T7>;7#RBKW=*FW0?WN^D83F;6HHYQRDY2`V%2[RQ>ZVG
-M(HT\NLI2NL4RRC%,?D2*(35)A@I=7DC^,'ES<V,KEO8QWIJ].)YJ%P2N=0A,
-M@")H=6<GMC8F0AETI5`2MT8>>`T`?````'P````"````10``>%0K``!`$0``
-MP*@!`<"H`0(!]`'T`&0&2>V7H`\JPLZC(B13I*PNOQ4N("4(`````````%PJ
-M``!`U)Q;!P]F&SO+LS>].[S@X2I_J1I3?4?Z]C>T'M=M6[C&+84FVG1XMY@U
-MA14.8B)D(_:2]YSL7_V_[`3L4!*W1G^##0!L````;`````(```!%``!H5"P`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y[9>@#RK"SJ,B)%.DK"Z_%2X@)2``````
-M````3````#`&,$UP[G)T*4/AY=)MQ4+:J)"H^%<UBEOD+<W4.2]7U&I@,T5%
-M\<4AI($\SE`2MT8%D@T`;````&P````"````10``:%0M``!`$0``P*@!`<"H
-M`0(!]`'T`%0&.>V7H`\JPLZC(B13I*PNOQ4N("4(`````0```$PJ```P$-%S
-M>+-7<Z(C.!M:L./'K$SG3,+U@K78!H6HO"ZJ(-1>7(M)$O51DS)P\O%0$K=&
-M\)\-`&P```!L`````@```$4``&A4+@``0!$``,"H`0'`J`$"`?0!]`!4!CGM
-MEZ`/*L+.HR(D4Z2L+K\5+B`E(`````$```!,````,,E!;A:'WN&9O+,/+T?D
-ME<2YB8K>Z$)]B3ID=U9,`>=<CATN>-`N-K^D;L(94!*W1IZ?#@"8`0``F`$`
-M``(```!%``&45#4``$`1``#`J`$!P*@!`@'T`?0!@`=E&[#;@&5GW7,`````
-M`````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``0`4VBPKZ8Q=HW%?VQ:7]H:5C1&K9-B18'-LE5ZMU-;?W\=@U
-M!I(YIXT5W3"XO8$F+.Y"#0T3+;2\GQ,_:?=6H]@[(_UW>+KV7S3*_."^GXX<
-M02IL1&GUWJ`TA'QENY,N?G:*_I1FHG#B)$!739\XBPQI^@.4QA6`3=D`90[;
-M*Q`I```D2J`]R(:2PU8=6P]:KL[L24K7.?2U,=;WP"KT>R)[N5LI```<``!`
-M!,+.D@39#1BN7RX*]8R1:EU972Q5````'```0`6'@/*^7T%M3RYS;%':K7#'
-MB-Q2B%`2MT:)K@X`7````%P````"````10``6%0V``!`$0``P*@!`<"H`0(!
-M]`'T`$0&*1NPVX!E9]US```````````I("(@`````````#P````@``!`!@``
-M``%\Q;:]&@A"!P)$]LSI0*O6'`U+^5`2MT;-O@X`N`$``+@!```"````10`!
-MM%0W``!`$0``P*@!`<"H`0(!]`'T`:`'A1NPVX!E9]US```````````I("((
-M`````````9@A```@``!`!@````%\Q;:]&@A"!P)$]LSI0*O6'`U+^2(``'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``0`4VBPKZ8Q=HW%?V
-MQ:7]H:5C1&K9-B18'-LE5ZMU-;?W\=@U!I(YIXT5W3"XO8$F+.Y"#0T3+;2\
-MGQ,_:?=6H]@[(_UW>+KV7S3*_."^GXX<02IL1&GUWJ`TA'QENY,N?G:*_I1F
-MHG#B)$!739\XBPQI^@.4QA6`3=D`90[;*Q`I```D2J`]R(:2PU8=6P]:KL[L
-M24K7.?2U,=;WP"KT>R)[N5LI```<``!`!,+.D@39#1BN7RX*]8R1:EU972Q5
-M````'```0`6'@/*^7T%M3RYS;%':K7#'B-Q2B%`2MT:1X@X`4`$``%`!```"
-M````10`!3%0X``!`$0``P*@!`<"H`0(!]`'T`3@''1NPVX!E9]USJNU^+ON)
-MZI8A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@``
-M`@,```@#```"````"`0```(H``"(``(``.<J([?SU"Z#3/'6LQDKWD5PQCXP
-MS`"YKA'HQ82#_C%9=V:P]*#>;'^B!U+0P3?,@A/P2KJC:WB\7<N\)"1'S%;.
-MLUP.77'+:!1M[ITA.J+6]$Y#K#;>%!50=C3Y!K,XW<)6M'J5]X>$-3M"MM9M
-M;4\^*#0A"&^AU">KV$2S:TL:*0``),MQA/8U/+JVQ[3']<>J.<=Y@6\3A\0[
-M"WF?$C7<D,)'*0``'```0`01E-ZQJV%:];F"SULDV3>/](C5_@```!P``$`%
-MQZ;>,?V$[0LW)XJV+Q+\EBC9:V10$K=&'Q$/``P!```,`0```@```$4``0A4
-M.0``0!$``,"H`0'`J`$"`?0!]`#T!]D;L-N`96?=<ZKM?B[[B>J6+B`C"```
-M``$```#L(P``T`9:'6$47W$?;P1^7$T2?*=BA6''^5X"$1[GD\?S8;C_7^;[
-M+FI>E3OP0Y162;>WJPGY(U8@Y=MT.!D@?RPO6$DD)(P(V]<#OY5MK0SU#H<Y
-MQ`M37?O*\X6#*,RXAID.%MM^:T[M-LC!&PPBK;9(4-]<^TK3X9KBH4P4KPFW
-M8HWO:$F3H%X#1ETC?$C2]5;90PMZ4(R"LZ+37.$[TQSR4O&?>N`\?(H4!S7T
-M?9I?7X)(92U=HQ4K^G&WJI^LO0D$V&L+`(1(,@0DK)XY>E`2MT;[*0\`O```
-M`+P````"````10``N%0Z``!`$0``P*@!`<"H`0(!]`'T`*0&B1NPVX!E9]US
-MJNU^+ON)ZI8N(",@`````0```)PD``"`W95@:]$!.090(#OLU/LNC?,WMK`_
-M<7;WX+I<N-,"J"\\WWB=.*2PT+CS9#0?M@$MH;G;6.T1Q;R,#`N5V"E@3>![
-M*C\73YKN:]VG.(IE^LV,L23%7MUB/F#&%:9Q@>1CBR8GCS_TIB"H%XG%ZY[B
-M$YCNCFSL$.2K1^YS!E$2MT97!P``'`$``!P!```"````10`!&%0[``!`$0``
-MP*@!`<"H`0(!]`'T`00'Z1NPVX!E9]USJNU^+ON)ZI8N("0(`````@```/PA
-M``#@MZ`[';)R?J=<*/R+KCX5P*V7?1S.JG9>5(L&G@C6H'EE6[=GU'"N'&CC
-MP&FT1\ZZ77>0,[6%!`:95W:/39FTLY;;DPO6.S8:_H*+;S/7)]&E#8&I">N$
-M\9/-]N7N+PDK$\[$0=(,7F@@\[(7#^W7D=QK7$V'PRW4'E%*7I\J1(DX@W-_
-MQPERL()[/[D)Z0''8#:AR=F1@@C0^CM$W+Y,G"3JC9G`^JX2*Z!%%]Q8EEX9
-M#>MEU"I]KD2]@?09I7_CT'/_N&W*OY0W7=@\$`1Q^41`<;O;DP8J)Z9+,E$2
-MMT:2$@``_````/P````"````10``^%0\``!`$0``P*@!`<"H`0(!]`'T`.0&
-MR1NPVX!E9]USJNU^+ON)ZI8N("0(`````P```-PA``#`K/$FG%)!K^0+(7NJ
-MV4[W]W=&W`8>(D+0_'.]IL!V21B1P^25U1*QHR==D3HY=6E!0Q<G?P]:DA.K
-MNF>*OCF?'#H:&3<81,WB;$!K?323*F+ZPU**&0Y^EY0D`>C&7;`6*CIK0PIS
-MU01%[L%;U'9?_3;^(^F_NQMIIR2^?UO4X'Y6Z"UBO)V+U#=0V((&`<^&J45U
-M1E`C(J/S"UQ\"RA3QT+0!\76\["W=+#ACG0#4CHY$$+=['G.[#9.9K]1$K=&
-M41X``&P```!L`````@```$4``&A4/0``0!$``,"H`0'`J`$"`?0!]`!4!CD;
-ML-N`96?=<ZKM?B[[B>J6+B`D(`````(```!,*0``,,MIC7S4G5V8XM3!SIAW
-MBH=K1X:D!Z*WE4D4Q.,<1DTPV7PY?Q9M>NO\[:NV41*W1I<Y``!L````;```
-M``(```!%``!H5#X``$`1``#`J`$!P*@!`@'T`?0`5`8Y&[#;@&5GW7.J[7XN
-M^XGJEBX@)"`````#````3"D``##3)--V;(G%]G5R=$<*TMJFK17>+TU,ZFDL
-M=^!G0H<;SHD6UB@T_G511U*\JE$2MT8;50``/`$``#P!```"````10`!.%0_
-M``!`$0``P*@!`<"H`0(!]`'T`20'"1NPVX!E9]USJNU^+ON)ZI8N("0(````
-M!````1PA``$`"M*Y`!TM$L1<ZX)OT]T-E%9.1V`:ZBCB=)+@%S:J70Y,5YO`
-M2*'W`P':KS3P6%#/RR;<!-!+4!,CNR+5[O05\'IV9C#&1`O3U8-1`061O(,C
-MJ2UI[\[S(&9C.2%^(51TU'W7>!NU"IFX'!SHUYFHY[>74W>$1(:VY`)Y1726
-M^EJ,D^+HP(7+[L^LJU+2&GKOIC`7NMA1?E>UR[T=:$=(W.$_ET5+$/N]5Z;M
-M>0TX-I@*"?[[X)/B1JK0F''N],ER^LR7P;TIM%[^OS:5&906%XM#J8"-0>5>
-M]^MI'W:A)1]:VFWDUDRK<>(MI'QOO\QT$#+&V"=RUSL7CD>O41*W1K!@```<
-M`0``'`$```(```!%``$85$```$`1``#`J`$!P*@!`@'T`?0!!`?I&[#;@&5G
-MW7.J[7XN^XGJEBX@)`@````%````_"$``.!LG`*90+6NXA]+GM@(_BDGU,81
-M+V,"H2=6J5)*T*3H#.)NK*!23#:70MA/^V.E18KA#)?DN'M#EG"+4C!(@Q,-
-M<RF0P;]C9SYIQ^CSJ0Z;WQ!^+I1)@Q`J-'J>P9#,"9]48'"/3`::7*BBTEES
-MC')WI1=.J'6;4*UP,U9:61VD$YT,+7QI("D5\"\S;-@X?EY.F%U&O9XOC+[!
-M&4YH;EO7;JPQ@WT`YJ3Z`0`%G(<2R%(/8_[_YK<K3,8?B1/@0>YT<0Y"2K_<
-M0O(D,CY>B^<<"3Q1V'N5]]P)]+7S41*W1GMP``#L````[`````(```!%``#H
-M5$$``$`1``#`J`$!P*@!`@'T`?0`U`:Y&[#;@&5GW7.J[7XN^XGJEBX@)"``
-M```$````S"$``+#HGX?O9`8FY,5(0\&0:J9</8\ZNNAC?8L[!!;>!J;F/Q@_
-M<IN<R3X@R;[-9R%H.6182+!;((RCA,FU:X2=%VU!IED*<9#%C6Y*U)&6JF.;
-MA5_DWI#/RU0?$B?\Q2$8_3R51:E/IH-WK\FI\'OMP$!%.\$SS^PCU$C!4KTV
-MFZS@JSDWP!SX^V]AC^IU0R`EIN@^=5]PW"-9IV&4*;A5]$1D+1?GRL]Y-G7]
-M"IX<41*W1A>3``#L````[`````(```!%``#H5$(``$`1``#`J`$!P*@!`@'T
-M`?0`U`:Y&[#;@&5GW7.J[7XN^XGJEBX@)"`````%````S"$``+"U!:;E\JQ"
-MQJ6PPPM6D+R!XR]1?>$VG/V*6/*-)`EP%Z1#)>1(DK<0NA<FBY?=QAH!;N*P
-MTA/"#:=D3.6^_XU$R<5WVM,<2L$Q@H1_ELT=:_@R9$EI=A4%.B/%=@2#2"P=
-M&H-?81JSXS$D&C^6[;'5RU9QC22^MA\1$6GW7&E)SO@5>CQ'3ZW/<6%EM$"U
-M40DN-8!O6.,4(7O]\G6M*_84YL55-"V=)3/>X"V;41*W1N&O```\`0``/`$`
-M``(```!%``$X5$,``$`1``#`J`$!P*@!`@'T`?0!)`<)&[#;@&5GW7.J[7XN
-M^XGJEBX@)`@````&```!'"$``0#N>"8U`_B=PP[?U['S?X:?,06-!DOOA-R"
-M>$=9UPM$9L_$K>&^P<=;P[MV#=+1@S"Z]L]C@J-P1U&##DUL4M)KZ/O['I&D
-MYTR])8:[(*Z5R8F;AL@&@A$KGP6ZR*K&Q21500T@P/8^2]+Z@IDQ`H6(#6DA
-MQ3"U&[?HASN3WLE<%X%U;/Z(AZ7=K@A#5IT?G^"^\5L^J)*K_3'!'A&%J&RX
-M)#Z,9L@&K*S4?R=TJPW/I+JJ5O\SB<"TY3&\160X"I;>;5?]X_MI"BP9R]LK
-MN%[76>FUU''QK7&&4!8]<:>_??P447`:CY.Y[A@OE]<AY#U'@R>Z"1=79YF]
-MB/Y1$K=&3;P``!P!```<`0```@```$4``1A41```0!$``,"H`0'`J`$"`?0!
-M]`$$!^D;L-N`96?=<ZKM?B[[B>J6+B`D"`````<```#\(0``X,[DMY^?4+$D
-M-_]3)7PND]8I12Y0F'``Z4L]RC)]9=K%'[''3*KX^LEG\7-4]8&3YQ1^U+]7
-M=QM#;TBTE?GVV*MZ,$K"&Z\IU4)KBLO"$>Q+CW$1P&O=3F&;WQ-XY4!(^N(8
-M!IZ^*2%DPI3(*A37>]+;99-_)GK^32OK$P`/<==;<"^L<?$Z5W*CKF1,66"[
-MFJXO[QSP>]X,CK9(27AH:N/$*C\R4.$3[8L8LM'L43]BZRJ\XW#U@GF20LD8
-M_TKE3]Z35=C6:-"N-X%QR8C;NM*#1#H1'Z:VAL4O<A%1$K=&D\P``.P```#L
-M`````@```$4``.A410``0!$``,"H`0'`J`$"`?0!]`#4!KD;L-N`96?=<ZKM
-M?B[[B>J6+B`D(`````8```#,(0``L'\U5AN&J[N%G;0@YK<BVO'"'6G5.HWB
-MF3F59LN2)P)%,FXHX0"O%%'GL<$&F/JG<,%?N3L-%^9$5-TU?5!N)Z='_EK?
-M<]V::RI'@1E==Z@OPF2D@EVY]KGVLTJ`KW&3*?Q[<`>H0('[N2SM78P=51]4
-M]087!O+#.XUC:P(-R&F(!3'W/[:WUIC7-SA%W(\7[(3T;Y%^1P,3B^DL5:LW
-M-.HDZL`^)"@HRV&S;Z=1$K=&/>X``.P```#L`````@```$4``.A41@``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KD;L-N`96?=<ZKM?B[[B>J6+B`D(`````<```#,
-M(0``L$@\33.#M=$]%>_H8F-4E_@JIJN"%VM"R1E'EUYI3UM(M&MLAXL.WU=U
-MBI$@JZ[[LVA59IH]8F*%S;42;0EX,!:W;GKZGV0QP)R-N']Z'34,,UN/UB;A
-M=R$UC!G(W3F2-Y1\GT6UHC_R.F6`ZAQEBV@29,Z&)$=&,Z3@$4ZEYHK<&!U[
-M#,@SU:[-^`RP/K7.2@[46FXR0IC6_>Z5A4>D:@O^>5L`L_]D%31%A%E1$K=&
-M^Q@!`(P!``",`0```@```$4``8A41P``0!$``,"H`0'`J`$"`?0!]`%T!UD;
-ML-N`96?=<ZKM?B[[B>J6+B`D"`````@```%L(0`!4#"Z`<1<5Y]C)"N5R5MS
-M71(M]DW<"?F%']K]B?1F%A,F2ICY`[K&.^L;140:H.`9PV[YWV1!YMP"Q.^,
-M#SA=F@)[$JZ[;R#P2*!#0L+<`R44[O.>EW$*SL<DPTZ8)-+)L#.+32B<H9/Q
-MZ5N\*C]`VM?M_LRU5,8'9R'+%D:I'I%9T<.=GV%?%8[;?'4K+0#/I'NH8X*/
-M#B^1G%RP^U($X%#X)^0OOXP]5@71&=V\9[,9S;Y+Q#`[)*`#:+4R)H.3T2J#
-M\?*1F.$R[@T=FWJ+1F)PC2],RY%I9*:Q1^Q3Z+%0P6,E]+(>C@90S?-9*`D'
-MCN*%&&39^=;_B_([JZZ+W>C6[A<E:C[^-VT97S@TA=BWF:F\K(X0D<$ZEIRY
-MR@2IHI-!BF)N\/AB+3P_3(/XF-VY+@FOI9VIC4>$`/=547:0'6F%:.`,4DFX
-M+'@`41*W1L)-`0!<`0``7`$```(```!%``%85$@``$`1``#`J`$!P*@!`@'T
-M`?0!1`<I&[#;@&5GW7.J[7XN^XGJEBX@)"`````(```!/"$``2!G"EY?_\7S
-ML8L]\:XJ4J6X`?B$A9Q#)Y10D^82?%WB<V`E)U6Q\]7$C;^($<-!\YQ'7<7/
-M1[M!%>5<M\41]_O_%\0R:GG3=%32S1F(`<AOI4'*FO,61C?O<RK4ZECQATBE
-M84I)[L#5M':C\$VAQ0<J%9]F^DO=JE(1!V%*W``@L9/NG!%)\Q<'=V87"%!K
-MFW18<\FZ,GG`UV!<\D8>CNWI\0Y'N>([MKUNLI6I*/'DD;7)F%M5W#6G^ZPI
-M"VRD&.S()8M!E/"`*1,Z7QM@1DGSE4(:<YI?5I-`:4E8C*-J]$2`W-+3;JT8
-M,'9!O<X-_E\C<\I@PAH3G]C+S?:-?+EJ]5.S)GUBL8QFWO;LA=%T)=9L`PO*
-M<8OFELA^K%$2MT:?=`$`?````'P````"````10``>%1)``!`$0``P*@!`<"H
-M`0(!]`'T`&0&216GBU<-DJDN!J*I26BI*MDN("4(`````````%PJ``!`1G:'
-MIE=81P_KD[JP&*,7`DIBF>RQ)Z)WB>&#M!P:5T%,V1\'I[I(F\<-H<''FV1>
-MTC=-(L[#N":XO\I-41*W1D6``0!L````;`````(```!%``!H5$H``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y%:>+5PV2J2X&HJE):*DJV2X@)2``````````3```
-M`#`T`W^L[XUE6/:#DWH+QKV`(&"D!'Z!W13Q:=U-]6O_L$/YW4(&DD(7BI%Y
-M/E$2MT;8C@$`;````&P````"````10``:%1+``!`$0``P*@!`<"H`0(!]`'T
-M`%0&.16GBU<-DJDN!J*I26BI*MDN("4(`````0```$PJ```P#%1EN7^GO!(P
-MWFJI^P+?I2$F[N\T_$7`'`Z]Y;"D.]<A]EJ;Z-66+"$)FF51$K=&"YP!`&P`
-M``!L`````@```$4``&A43```0!$``,"H`0'`J`$"`?0!]`!4!CD5IXM7#9*I
-M+@:BJ4EHJ2K9+B`E(`````$```!,````,%;T('/EBU*=`JM,(>P>24&$H`UC
-MA!*6;`:\6SH5U2R2H>D4&C-GNBU?1Y=K41*W1J&9`@"8`0``F`$```(```!%
-M``&45%```$`1``#`J`$!P*@!`@'T`?0!@`=EQLJ^>&O""8(``````````"$@
-M(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``,X3^AA+(*DP_K7Q(:W]+^'AN@8/)LYE3%)C5B3%=R/X\[=J13!(A3#[2
-ML#2/"-3QZS[.+@5(KHGC('_2HIW+G:/]&Q)OU,M4J=N,@Y_[KQTWRQ/7ASRD
-M#\:3CBRS5'S-HKJ\@K0%0\#KT0N7-MLFT&1T&-WY28L1]QRN1)DQ5[,I```D
-M^L33F!D]/L2T.L8`B197R!4/&;_IZRQS/4\T_1F+4\,I```<``!`!'6?[R2Z
-MC!Z.[@*L=85!ZO494$NH````'```0`5`I"*:3R+=@.E6YLPPUZZ@+"57IE$2
-MMT8MJ0(`7````%P````"````10``6%11``!`$0``P*@!`<"H`0(!]`'T`$0&
-M*<;*OGAKP@F"```````````I("(@`````````#P````@``!`!@````%;DMQ@
-MJ?XT@##\*:9*X<X]`*$I$E$2MT:FN0(`N`$``+@!```"````10`!M%12``!`
-M$0``P*@!`<"H`0(!]`'T`:`'A<;*OGAKP@F"```````````I("((````````
-M`9@A```@``!`!@````%;DMQ@J?XT@##\*:9*X<X]`*$I$B(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``,X3^AA+(*DP_K7Q(:W]+^'AN
-M@8/)LYE3%)C5B3%=R/X\[=J13!(A3#[2L#2/"-3QZS[.+@5(KHGC('_2HIW+
-MG:/]&Q)OU,M4J=N,@Y_[KQTWRQ/7ASRD#\:3CBRS5'S-HKJ\@K0%0\#KT0N7
-M-MLFT&1T&-WY28L1]QRN1)DQ5[,I```D^L33F!D]/L2T.L8`B197R!4/&;_I
-MZRQS/4\T_1F+4\,I```<``!`!'6?[R2ZC!Z.[@*L=85!ZO494$NH````'```
-M0`5`I"*:3R+=@.E6YLPPUZZ@+"57IE$2MT;ZW0(`4`$``%`!```"````10`!
-M3%13``!`$0``P*@!`<"H`0(!]`'T`3@''<;*OGAKP@F"_>Q)=VD*,@PA("(@
-M`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#
-M```"````"`0```(H``"(``(``$`]F`R:4!NJ/>)'.->FNW;7)ZQCXWKEW:S_
-M0FSY?[!E%0ZX7,]>C6\_77#MI]L9,8"44Z?`ON!7&L;LO^YJ!;X@S+:)*1'Y
-M#"?E.]YR8]957\#J+]-$MPV3$@(/:G4T^,9I&!@\E-HHWQ97_>*%BLW$JF.$
-M20.#,S$4_7LPOSA$*0``)`V!F!WY]Y9K@.&3=JNY"?0=Q^8Y8^MQZ-8PU*VX
-M]TVJ*0``'```0`2"L(+):VUE\?==23;%!Y,NNAL71P```!P``$`%.,47<KSQ
-MX1+:Q:ZJQF+03Y;A%2Q1$K=&]PH#``P!```,`0```@```$4``0A45```0!$`
-M`,"H`0'`J`$"`?0!]`#T!]G&RKYX:\()@OWL27=I"C(,+B`C"`````$```#L
-M(P``T)5O-ED'NB=*2:C'.S)N*#>5:Y/]HD[U#(:<53;T%H?-,6]D."023IM?
-M5N>OC7P]->7Y36"T5X',_D&S2L,E)D&;HRB1N\<I^-+L+;'*_X8`/0.AG*/$
-MNP>DA;KQRHRFNH;>Y__`GH1Z.V$:9SIXX^Q^0Z]Z<&?L^A"/3)<CNF[*?%]G
-M>?:]G"NVN:(2=8?]K=]A_V]OX'=/X_3`4@6I^+/"1)Z[Q+*89->/HB-M$*"L
-M.VD\/;<?98&ETWIXG#WT=6[L-QBQ^[#:J@DZVE$2MT:$(P,`O````+P````"
-M````10``N%15``!`$0``P*@!`<"H`0(!]`'T`*0&B<;*OGAKP@F"_>Q)=VD*
-M,@PN(",@`````0```)PD``"`E$<545SW])16F6L]U$RQW4$1^07\87ZV@\(,
-M_(H5FPQ?N_#N(Y-A,E7_OY\[O8`Y(IOHWCP^N5^UJ0$X;,7F'2+Q3)@.Q\OD
-M&"\HV(R[<TH8F,$5EA-5*^\PYNS.;0"7W[."`Y6K7<Q3RP'@)\V1P3R&4Q;D
-MZ5S>R+#M35$2MT;E0@,`'`$``!P!```"````10`!&%16``!`$0``P*@!`<"H
-M`0(!]`'T`00'Z<;*OGAKP@F"_>Q)=VD*,@PN("0(`````@```/PA``#@,D>?
-M#JBI6K0X[)*,N[PR=:JK=6BK#42L(/UL$%\BDG1HJF@:YQ*-;FOD;[3Z(FPT
-MY?LZ_UT=SU*9YG2I&A&/W=BK#ZH!I,[`Q=<C;"?ZVSB!LL)JW&@J)5;*U40F
-M?`?9B,V!5,"AB'/AQ^CMU)VM&&1U[UL3Y213>DRH`(,1T4D-:111F5W238G(
-M9B.E)B1HN1<W484GXANTM]>NH)HA3.H'SOOMR@$/;87"U$=.7+*8D@M_L+/*
-MC.OMW="OV&5R-ZB?/("\P:E?@OUI)'KD`6V"(JP!AHVOJK6,AE$2MT;L30,`
-M_````/P````"````10``^%17``!`$0``P*@!`<"H`0(!]`'T`.0&R<;*OGAK
-MP@F"_>Q)=VD*,@PN("0(`````P```-PA``#`"4N0"_Q&R7W+E2P#?^[!=2RI
-M%.$@9>#GG>_JJ1J'.1]1-''ZG13V6&2:O?!>XFS6]>-X;3J.5<ABSQMS0#M@
-MC,\CV)=MRT(Z<:Z4];9-?9\N=#%E]$B-ELD*X?$A?#<BU>G#HL";/6[VOU05
-MZI`6<_>X5Z()EZ].%R4C;3YX%V(YZR2XF._X.(9;?Q=J#9`?N5N218.R5>C+
-M`0#2.OON6AZ;O_WUZPT.0.H[C7(=(&R0I'D)]/YP(EFKT8U1$K=&XE@#`&P`
-M``!L`````@```$4``&A46```0!$``,"H`0'`J`$"`?0!]`!4!CG&RKYX:\()
-M@OWL27=I"C(,+B`D(`````(```!,*0``,$?'V$;!7;EJ.ZQ5M)Y+*7/E1;XU
-MEW?HZ)K0JCU.JKJA:JX"=LJ)*35_P]B&41*W1@AU`P!L````;`````(```!%
-M``!H5%D``$`1``#`J`$!P*@!`@'T`?0`5`8YQLJ^>&O""8+][$EW:0HR#"X@
-M)"`````#````3"D``#!RKPT%G.*O@`49DD?6"`MFNZ^],V7Y>)_NT1H:DL=+
-MT""!IA7D8D3R@'FN$5$2MT;;CP,`/`$``#P!```"````10`!.%1:``!`$0``
-MP*@!`<"H`0(!]`'T`20'"<;*OGAKP@F"_>Q)=VD*,@PN("0(````!````1PA
-M``$`_B)Q6^-=1/,Y7ZPG+>F>0TK0)N;W(`\G:#$@D)_&#$9`88$\=2IAA^/8
-M@;-\,]5R8/0V=Z%+2U)K;LJ($5ORW*H5@CWP$#4\=I!HFY/S%RP"S$B+UC/!
-M+9YV&0Q&<#V9EJ[6!BH*,68K)RF$0=YW7V4HT'Z]S.`@<Y6VVTOU<>$:J%`F
-M!:)%#JU3@<G@H-3RG4P%=],T7F:N$NH<PL90H-OIO'G41.X^9V9+NYJ@?C-!
-MBLF84VDN$"J+6V,'/_8S4FUUG^7>-)+Z1N;T@_5:2@_A8JB*H!LF0`K#T/1N
-MK6O';<OZY`*+C!88*%6C1^7^3/WD[9F&B]FW854D41*W1G.;`P`<`0``'`$`
-M``(```!%``$85%L``$`1``#`J`$!P*@!`@'T`?0!!`?IQLJ^>&O""8+][$EW
-M:0HR#"X@)`@````%````_"$``.`%TQP*I,*N62'5)G[Z;/*U,&8;GV;<B1`Y
-MORPZ#=8MKK[N*:^MVRT93D__:_8R%L@3ON-X8+LRD70*[R9!E:+7A_!B<7OJ
-MW$H<HUM77F76?'V7FK4__&:K'H\?[.1LJ3@6A`.`PK`,Y:&)-<Q`@M%$X:*_
-MXQ$N,]J!YB'Y#TC4"B8*HIL\DJO=0CRYZZ%@%^$K+=7.Q6RVT)6^X?*>;'@&
-M_*%^3.OHRW1X+<1?IPA+6YK:Q.4I"(T6D>/;OC>?#5L`J\8N_JM2.$#/)L*'
-M=5OE<#B\Z"-$22ITR3],41*W1O"J`P#L````[`````(```!%``#H5%P``$`1
-M``#`J`$!P*@!`@'T`?0`U`:YQLJ^>&O""8+][$EW:0HR#"X@)"`````$````
-MS"$``+"&[E@'V%V-Z4Q'Q\>,&H9OT%9A;SS*WL2U#\,^@Y5`)DZYVE!#'36=
-M9IS`#EZXRRV7=B<6>@S;#DRD"FY0UN00ZV6J$+[<46#D>H&'G"?OPQ8QJ(Y-
-M-KI>;Q0Y-97(LV@!\4M-YULLH!;XLO^I:.>3I[<$B[=@;U(!JQJ)Q+1PY6P.
-M-H@[WN)%P!D%.#"ZQO(7>6?O>9@;73G*RT4)K8AY_I%Q9.U$W,A'X/,O41*W
-M1OC.`P#L````[`````(```!%``#H5&```$`1``#`J`$!P*@!`@'T`?0`U`:Y
-MQLJ^>&O""8+][$EW:0HR#"X@)"`````%````S"$``+#[3[P4TFW3P3^;.;)E
-MYP6(G5!3/6P"_$*`/">)>.#'F!\W-U6SBF>UZ1_V:-1JGP3L*S"GXG0(RN"E
-M(-B5.Q0&E["M6E&O\29SH=+QR(PA*&S!$EXJ9UH0B]#56AY+T<'\MGIA/>SY
-MZF?>29M.'5'_:B&NCPP[WR[@/QO4N+]N`7II"/(2/':F_SSN3LN'<H<):<'1
-M5NSEK-DL":N$^4[]'='7EK<\W;Q9>#ZI41*W1E#L`P`\`0``/`$```(```!%
-M``$X5&$``$`1``#`J`$!P*@!`@'T`?0!)`<)QLJ^>&O""8+][$EW:0HR#"X@
-M)`@````&```!'"$``0#K6B/ISAPY3F?E<R\%%^".:`+];LO\I+XK`]609SI,
-MB;O\!_">F.'W#K=*D2XECCB2Z&472R'L`M9YB`X-?.6"OWB_`R#E$6Q+K.#:
-M^-)2I*;IR7/SEGA[+KRW\6`<Y71P4$+@`&JPQG-#/C^^`\Y-T?)])LG(W%J5
-MWK'`K8]2U,-.HTW=RG:&TSB]N-=D5('CEH^J/?P>^0!#+M`-$MOF?[V^%0]8
-M>W^5^)0`&EA-P^1L,E&ZOMVP\/7:N*K^@TN"&4U4;*[T.#'<]?0,5:H/6Z]?
-M,"J-`@FG/`QPZLSNDR(J4I*PG6L1$)/`N%T6R=7_,8=S'#,!"]R(N\!1$K=&
-M?O@#`!P!```<`0```@```$4``1A48@``0!$``,"H`0'`J`$"`?0!]`$$!^G&
-MRKYX:\()@OWL27=I"C(,+B`D"`````<```#\(0``X!H1&D9*S<N$B).A7^G\
-M`T%%E/^!3W$?O16$6735\)BHBM^H49V==61*3<PG]5Z_[:1OQZ4U:P_LUIF[
-MA#Y+CUHNU9IV9`@7<N945UP3N4Z5,>8:$X#N[TL*2Q6C19H&BK4U7CQU4@(5
-M,:TB8T4"CS]'[`IS?.BA#+FI=$H=G"!@P!UO[%8YHCDK]`(LG?@='*$WFHZ@
-M"]D(D((R?W2(!X9=*S/<Z5&V@R#"20UA0&*/CZH>V=AHS:UD4Q_0[)85BU"1
-M*P!::@.^9<R`S';^`PZC%JW@`#WK7=VADZA1$K=&Z`<$`.P```#L`````@``
-M`$4``.A48P``0!$``,"H`0'`J`$"`?0!]`#4!KG&RKYX:\()@OWL27=I"C(,
-M+B`D(`````8```#,(0``L/^D4'\L>:L3790UNBRLQ_+5EN:D].X2ME"0;(O/
-M.N1WV8HL<4;CG=%\I]RJ:(<=6&SLF8..FZ^/OY^S`#6FKL83B6&\N)'3@F!Z
-MQOE\M(R;ZX#:7#*.A!(&$+I'$K+W_,^+?7!\?"!!HAZ![HJ1[MS"-ZH^4J<Z
-MBN8.%6Y\Z.X0EN#82(\("3`\(O:9&_WMLH2)(=9,>@F;C=V@(7#MQO[`XT/]
-M/7K\(@D_*M-1$K=&*"L$`.P```#L`````@```$4``.A49```0!$``,"H`0'`
-MJ`$"`?0!]`#4!KG&RKYX:\()@OWL27=I"C(,+B`D(`````<```#,(0``L/M8
-M^EEWBC5D\+K&[4$GAR=U$TYL0R]PNJ74,EL^3:SJ9"\]]X0V3A*DYEGG:GAG
-M<\N55G;8DG]CF^$$9_L-P)B]D6'0*V-6O;$U"H<,$.`.X;2Z/AM*YC%+/[I#
-M#GU%#<HG/I_Z>Q+'L,[3>+`Y]+X$S6O"2Z5LDDU)#JN3VPI!_5S"9S>BA8MM
-M.;A#+'8R=$]C_6K=>8X&V?C=#Q]?J*![U'B!*06])-("[OQ1$K=&AE,$`(P!
-M``",`0```@```$4``8A4:```0!$``,"H`0'`J`$"`?0!]`%T!UG&RKYX:\()
-M@OWL27=I"C(,+B`D"`````@```%L(0`!4,2\>^?.8BZ_D"WA_L<_Q0YIFP+S
-M*Q#Y%T\'1Q"..@I/57PS/WH7,6=AVW3SM56MZ[XTL&H?"*7*EAC-:)M.HX$=
-MN/&TXZMT\@$AX^T4Y*1;YO],(!R)+I+]$>\)6`.MX77D@O(Q?HBHZ;>,)(X,
-M[0#G=C>)DC;7VA`1``2[\I">[2S/T2J2:_1!X"`=7HW@OG1M$"`0E(]_=-D?
-MV*:JDUL7B"FT$9HW-J]:?_(8,[O)HNNEG^JUA76)!9,JW0L=_B!;)W#2B2T`
-MM6PL2>0"_>Z]FOO1H8".Y]`?X2-])H@$%7T3]>0RK"=LSA$DM>8PW#I,'BE;
-MTXI!B@]=M32WO/4=.PB'$6=G\^,!$P]2E:@0;5'S>AR6'2SJA'N$J3B*AFR+
-MN<=,,34=O_"DU9A`:^6$P5[`23.4ZF>6[=.X)M+R,AV+3C:(09P%[Q>+41*W
-M1L>'!`!<`0``7`$```(```!%``%85&D``$`1``#`J`$!P*@!`@'T`?0!1`<I
-MQLJ^>&O""8+][$EW:0HR#"X@)"`````(```!/"$``2`108JRBF$W&/.1?IM-
-MP`Y9^A;VJ7MAZ^/<HU39-6S_L%IT$<[KBK1P'H_&+AI,MGXK+]H'$OTY**"K
-M;;SNI+2>)0DT&H6L<`'BE#DJF1-UJ2B1^YP=!$A`)APXB]:CEVIJ\`>S?D_R
-M'-1&2(E@G3$>C%1%UQ>SYQ_38L@RJX?V!*'H?H#3E5@.KZAKWQAIEK!!N]S2
-M@$Q@FR+P&^CA.&!59,&MTO*16T%<?Y8]U]R,2>P5MF]B.'#U4YAL>'2W11%5
-M,:SD9'F4S,D;!O.(:J:4)$5).A,P%QF1&X$LSZ*56V6B)!&4O_75HZ[]1%$G
-M=+<?"LC[W>$,[#(22]8NU_ZFB9M$<*1Q$G*DW67UWP!7QW"LX)9D3E*A7@QK
-M_%$2MT9.K@0`?````'P````"````10``>%1J``!`$0``P*@!`<"H`0(!]`'T
-M`&0&27UPCC>):,.;R%A2W?7Z+W,N("4(`````````%PJ``!`&:;IH2\\?_-B
-MPX]:VG.,%#S23]'-Z%B-ERIMTYA)]<V8FP9^:_$9,,<87S]F.Y&`2%QC\.OT
-M'<RT-J2T41*W1ABZ!`!L````;`````(```!%``!H5&L``$`1``#`J`$!P*@!
-M`@'T`?0`5`8Y?7".-XEHPYO(6%+=]?HO<RX@)2``````````3````##/],6N
-MI"M%@37?"*/7/UOM%L$K'DK@2>P*1L_074:PG0T\/:9SE*;K&N8U%E$2MT;9
-MR`0`;````&P````"````10``:%1L``!`$0``P*@!`<"H`0(!]`'T`%0&.7UP
-MCC>):,.;R%A2W?7Z+W,N("4(`````0```$PJ```PY45Y;'5*-[[NDI*KR]HS
-ME[L\"-P;D\-92SS+9:])MVN2V;NJ#7TF#ED4+'!1$K=&[M4$`&P```!L````
-M`@```$4``&A4;0``0!$``,"H`0'`J`$"`?0!]`!4!CE]<(XWB6C#F\A84MWU
-M^B]S+B`E(`````$```!,````,#-8@G#9N-W!OF/S$'-EQ3_Y>IXN8'20@(UV
-M'^R3XJG<G'6CY9"MD$YW$:\>41*W1L;4!0"8`0``F`$```(```!%``&45&X`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=EH7]B)B<Q+;8``````````"$@(@@`````
-M```!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``V]",
-M0X9Q34G$-B>>VY3"9UNA9C:>WI7T5YZ)45+5D)\7TI\[J$G%I$PE90@Y/,!&
-M'K>R\?HYE,2--&L\BXA:<G(Q;0RQ1<LY4%UX^Q*>%=DQ#A(;8:,BG$W9?OL!
-MP#IFCL/\W0H,SKKRSIF1F17D=P7D.-DS)S.8=AD3,I?UO8PI```D\32:!!F6
-M#9G(D!S[F/CH@[VHCY^L/D=MX^;;)`01!Z@I```<``!`!%!/VXR@:I4.O+<J
-MB:A30M9H3N2!````'```0`4WEIC_2`L_XV7=/7)?2VFU:V,W$U$2MT:]XP4`
-M7````%P````"````10``6%1O``!`$0``P*@!`<"H`0(!]`'T`$0&*:%_8B8G
-M,2VV```````````I("(@`````````#P````@``!`!@````$4NM+X98`PO5TH
-M:0WH@JZN`Z`UCE$2MT8;]`4`N`$``+@!```"````10`!M%1P``!`$0``P*@!
-M`<"H`0(!]`'T`:`'A:%_8B8G,2VV```````````I("((`````````9@A```@
-M``!`!@````$4NM+X98`PO5TH:0WH@JZN`Z`UCB(``'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``V]",0X9Q34G$-B>>VY3"9UNA9C:>WI7T
-M5YZ)45+5D)\7TI\[J$G%I$PE90@Y/,!&'K>R\?HYE,2--&L\BXA:<G(Q;0RQ
-M1<LY4%UX^Q*>%=DQ#A(;8:,BG$W9?OL!P#IFCL/\W0H,SKKRSIF1F17D=P7D
-M.-DS)S.8=AD3,I?UO8PI```D\32:!!F6#9G(D!S[F/CH@[VHCY^L/D=MX^;;
-M)`01!Z@I```<``!`!%!/VXR@:I4.O+<JB:A30M9H3N2!````'```0`4WEIC_
-M2`L_XV7=/7)?2VFU:V,W$U$2MT8%&P8`4`$``%`!```"````10`!3%1T``!`
-M$0``P*@!`<"H`0(!]`'T`3@'':%_8B8G,2VVR1/1H+D[FAXA("(@````````
-M`3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````
-M"`0```(H``"(``(``*%Q0\-&`,EQXZ6*`ZO\A#T`/=QHC!37&S#6O5"9:(,0
-MLZ[[9\V<\WG*.`H3.9[9$IP%*RX3G!8!7?Q2.8*(H.RU!"4LY2$5"Q2A?7#A
-M\^>]8R!GH=TWY,9O)SBH]I"^8MR8'>$*!4'7-N#B@F*=,8RP_!9M[.67Y[^\
-M;TESW?OI*0``)!0P\ZK-M`DT.KPAN$@Z(B<WP*@F?6ZS<79@.RK9BI'/*0``
-M'```0`1L=*-`Z40AHD>72+'&1K]JK:P8-@```!P``$`%1&G-/EZ/'@^L]EG*
-M>Q?G0I:JO-I1$K=&T4<&``P!```,`0```@```$4``0A4=0``0!$``,"H`0'`
-MJ`$"`?0!]`#T!]FA?V(F)S$MMLD3T:"Y.YH>+B`C"`````$```#L(P``T('I
-MC:DVAO%\VZGT`]1"EAK(GBH;92\]*#6)+0@>$1`%I\-@GRP*R\YD`QC-)WGA
-MCC^1XQ="GMV2XW7@S@IB'H"!?V0R7,.X-/[)1D8Q6!2MQT!4T>%LI].RE5O;
-MW(1=@7X_`MK>=U[2(2<H)59;.7[R`GCU6X<>/%L;VQ50:IGZ?X'V"9!$6EG_
-MY0UMP:*?79D/:V6N=TU^2SXP^"XA*+MHS0+!`URZ@8C71J>[@J'8MLE&EFO5
-M(<OT:C!%!H\6G3(H'@:FD,5)F1VZ7U$2MT;/8`8`O````+P````"````10``
-MN%1V``!`$0``P*@!`<"H`0(!]`'T`*0&B:%_8B8G,2VVR1/1H+D[FAXN(",@
-M`````0```)PD``"`_UAN"O5,:E71L9<OA'9Y>\LN\8J-[@U\T(A!31#`D@;Y
-M0V=L/.P<5V<P=KWWQS"*XNYYVSA!V,KT=0U9DK)PD_)K7>$=R./N$CQU+"Y&
-MAC9)(+HSR9)RWU8&N"`B!8XL!!A(MP1QY_$&&W2.>Z:$);Z;07;+4RNM'\B@
-MWE$2MT9]?P8`'`$``!P!```"````10`!&%1W``!`$0``P*@!`<"H`0(!]`'T
-M`00'Z:%_8B8G,2VVR1/1H+D[FAXN("0(`````@```/PA``#@8TN+S#@$@(PC
-M)D3OCU83N.;KREB385"4K"=>319%A9F&>O&$,1KI5M._7B=^ACF&#Y?N;B':
-M_*2:30&17C1Y;8D=9G6CY<F"'+KR`3I4%5-GHXM"0PV;RV":U>?'H_9VP238
-MCLQ2@=!"S.NW#$M%)O%H@W<U^73(L.8H>Q1K9:0D_U\R"7NS;R.<)+_NLDF,
-M0-5V#RZQ:2[N;C^X,V>/SU$U]0[K8]9N&41?74;0X;'M$WY;3P$,*JRY1/@<
-MD=T'=;1]_%"Y`1:7P2$3`B23;/LU'@N[AF^Z4M;U6U$2MT;DB@8`_````/P`
-M```"````10``^%1X``!`$0``P*@!`<"H`0(!]`'T`.0&R:%_8B8G,2VVR1/1
-MH+D[FAXN("0(`````P```-PA``#`]T&&Y>O[KL;]ZS><CEM\DH9TT-O]3$;&
-MG@==EXCAR/2W5,[J%*FEU%)8.-W(F!](F?$JR<.#9^J:.WF3G"X",PGR^7P4
-MS+I1$,[?\C]I56[\F5?>9OOHHG>;E>?\RC7#73^,I/<FT'-/4PUNT2=<ZAJ=
-M.XW4*"G4U3F.,((Y_Q9&+^7+R.>-O<9(,HYXG+7070CO19`O2B=N=0V/G"(7
-M8`Y].-)@9=4JE^&*@US8K,UKSS\#TPILP,F_",!1$K=&T)4&`&P```!L````
-M`@```$4``&A4>0``0!$``,"H`0'`J`$"`?0!]`!4!CFA?V(F)S$MMLD3T:"Y
-M.YH>+B`D(`````(```!,*0``,,R&*2I('28PL8*.B907>>7)U6%2HG*,Y`:3
-MV,?9#!!,ZQE%14>8*]QC!<V241*W1GRQ!@!L````;`````(```!%``!H5'H`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8YH7]B)B<Q+;;)$]&@N3N:'BX@)"`````#
-M````3"D``#`AHG>UL'L0=?C$S+\!#%OI>@L(C!H5/MIA`L.WC.-\FA`(0E^,
-MY1NIM[O+;%$2MT:LS`8`/`$``#P!```"````10`!.%1[``!`$0``P*@!`<"H
-M`0(!]`'T`20'":%_8B8G,2VVR1/1H+D[FAXN("0(````!````1PA``$`UE7`
-MD<`B*5;E=Z*$=4.1SQ7A:#B%\*D/P$!UCH&/V"G%['%'0@)6H'@3]Q@[RM@(
-MLV%SN-/9^ZOY=EXO[J/9@\>^!8/UDU4AY$/NNNLG@:QN:6@RG-G&)G0<FA(V
-M6M^0Q:_T-:=[FHQ?A;@C=-]2`?_[%',B7,-KK2S<G;G\ON+P\2P+0>:+?/G!
-M_2I]BF'.TSA_A2$VP5M`M,C]2MD.PL(B]$!+0;$<(0,']=9[D-O.'*4`*[.B
-M_R>B\(3=\W.)LFMG"=G$GU\YA%%^4U%VK$M$6:$3/=DWN/`21E[,M8H/:C,I
-MGH.>^80?GE'>^SJ:DK1D1^/D?>8IY)&P41*W1AO9!@`<`0``'`$```(```!%
-M``$85'P``$`1``#`J`$!P*@!`@'T`?0!!`?IH7]B)B<Q+;;)$]&@N3N:'BX@
-M)`@````%````_"$``.`PAFXKOWU_"JMG1G3K+T`.TUOY!Q0@/Z8@?D.Q=\Q;
-M"WMM(-/'QN_W/\":CGUU>G$G[HWS`+8V(U^[_L_[JY&Y97=L?_&02N[B28HU
-M7^&7>!#EV@Z06R^VP*%Y,>T;?<49.%0@X$.>V/.`8^E`%U!!"J_UXP<%F2EB
-M',R$I6XD1/JE1\A/QGZ3JB*!($@WCR$BJ(T%&(,HR:8K[_Y[35GV2Z-7SP!\
-MMP_ZAK029M-^J?E*P_"\F/@8+]SJLB0^A\0_WM>JX)M&E9^?+6ZOP7BL1I6F
-M$@G((+YGE#MV41*W1O#H!@#L````[`````(```!%``#H5'T``$`1``#`J`$!
-MP*@!`@'T`?0`U`:YH7]B)B<Q+;;)$]&@N3N:'BX@)"`````$````S"$``+`F
-M:-@MP"H2ZF9NPP^S<8@F5`<.?<J;Y`;F$&(JXM\.]%V_G"E/`^;5[73\2(G1
-MD,^2SEQ2@M?>X4\HI^9^9P%ZKO,U@/;ICC<PT,0?D$-;<##N8BE%7ZZ7?D3]
-M?/+PEP_?7";PTJU`ZU0?[,;K`'5U(V^"?:'%[B$_SF4Q/*R;D:YF-=T+((??
-MA,9<GP*V4IU)3E^R@H%X2>/B=9(/O@8WSM)H3@$W[D6P-MMT41*W1O<,!P#L
-M````[`````(```!%``#H5($``$`1``#`J`$!P*@!`@'T`?0`U`:YH7]B)B<Q
-M+;;)$]&@N3N:'BX@)"`````%````S"$``+!K&<_5?8W=9;M(>X<CJ#8&JX\"
-M^`?T[#LULA-QAHDVWV55OPLF.&)`A%XB.1QGE9<4">!=SI<S'C"U%$.IL-N[
-M;--]F/872#1F$`2+PCN_X.C]?>U1!PES#9*#!<8K]_G5<6!`:7C:[!S/=NO[
-M%JT&AM7K=&#HP=/Q0),!5%T[O4/J?TBNJ@_2X/EFGDOGK9-<3`-YPZ[*.]N$
-MT2F(.^DLT7RC?GC/XFI='V;$41*W1A,L!P`\`0``/`$```(```!%``$X5((`
-M`$`1``#`J`$!P*@!`@'T`?0!)`<)H7]B)B<Q+;;)$]&@N3N:'BX@)`@````&
-M```!'"$``0#DE/3N<$W'*,MW@$=+'%@2#,I_PN0O/$DD(,8/\CG^*AF(S[%W
-M-U6X5Z:D*VF/^V[\`;,=H&,G-ILAUE,8_*WF]0<.8/E^WY6(Y\!-F!8ZFJ)9
-M`-L(`-QF)CJ*R$9[R+)DP0VN>39%B"-&\V$&&OJW0!10+I,&%%LHT'3?QT!`
-M?\6[6YC[[@#\9?\KT;E_KX9`GLQRACUKN/'XE+6=7!C(([8K707TX26'XPQJ
-MVV7JRC2K5Y%I'(TM\@5141A]?$I9_LE%#E623+$]&"8*Q`IZ5=DQ>X7VT2#<
-M-2>0,Z&^*K0RARK1'&=SY7;Y\V=9AW95H);?^DU0L$=^BXE1$K=&*#@'`!P!
-M```<`0```@```$4``1A4@P``0!$``,"H`0'`J`$"`?0!]`$$!^FA?V(F)S$M
-MMLD3T:"Y.YH>+B`D"`````<```#\(0``X!RRI]Z!8>CWW93F[/ZYWFL-]7#(
-M).3!_ZY38@>72AKK&"GH`EZ9AZA!MD;^@-K/?-NRPZV-^Z.8I,'8*3<?M[ZT
-MNTL?6#FBMIE6G<._;$71Z9Z,G:Z=P&O-<#/(`L@J;RT=S[/)1I?5B3=&>=G]
-MKJ`-$*?;OJ/X,)G[_P;[/#+%2B"V[KS51K*-(3MLZ1^S]R8<U!Y8S$,-+E<.
-M4%.=\ZQ9-'.<6A\2^:Y8JY0*3DZ*W6Z^['YRE)6+EQDX3]R;Z.A7DDLA'0IQ
-M]"?[G$^D&(8SYWO5%MG[\>N,DU)1$K=&)D@'`.P```#L`````@```$4``.A4
-MA```0!$``,"H`0'`J`$"`?0!]`#4!KFA?V(F)S$MMLD3T:"Y.YH>+B`D(```
-M``8```#,(0``L!P1E4F';12+5''4?"U@`&8D#AO'#YQF$`Q.1DF(#?XJ1W$?
-MLD$._C,")>:Y`K"W]`T`TR86%LCO%16/:C>T&W3_6^P"JU"_T;Y.NZ@./L2$
-M%%PPKNIU*7IEUE(.G9Z3B"`QOJKRH,FMC9^,*%:<P]XME6E#H\CTBJGUDLC[
-M#[<8/763)G7(0.^@`%>N"IDA3TJ:V%?H64H^/CU,T<(YY;7'`JR,5Y"N\M74
-M)`A1$K=&WFH'`.P```#L`````@```$4``.A4A0``0!$``,"H`0'`J`$"`?0!
-M]`#4!KFA?V(F)S$MMLD3T:"Y.YH>+B`D(`````<```#,(0``L&RC@[B9`,3=
-M&PB]-F.9)CQ5O87AS,:45C,&_`_&LAM&51\G<P#<78;92KZP<S#B1*GN''J:
-M8[MHI?C90"V2+V;5!W*+3=Q7O2[3/SKN@A0`4Z/E<0U=\O@:K<98H94?@UEA
-MR6Z>.JM`]C.PS^![;Z\1.JM:78Q,-:8*PI/[>U([N*,+*^V`XN9;,IJI#-%:
-MO8Z`I3K=NTY]?Z<"Y-BO",N$GKGWID@N`"-7Y8M1$K=&/I`'`(P!``",`0``
-M`@```$4``8A4A@``0!$``,"H`0'`J`$"`?0!]`%T!UFA?V(F)S$MMLD3T:"Y
-M.YH>+B`D"`````@```%L(0`!4(Y;JMC+G6JP2!&9/S-R?U\+0;/A-GM(VV<@
-MVY/1[&OQ/DQ1M;\/N>*3FA!?*$?]M3K=C0\8VUH\=()L_`(L[6:G%?4I$-Q9
-M%HO=80T7)96%@Y-V>%TWP+7/^E$G$FZ@0SV!9EPET51V%),#8F^3B]D:"I[V
-M,"2\[""MM')HOXI7+PV:S&L)Y<\9Q%WXW+A\HT@I[UZ+&Q/B='!H?B2+I%$5
-M!<IUZ$Q)8!,FASKQB"`V6X32N"(-'4KES']76)>4.Q?R'W(V+<AKU%BEUE._
-MWFK\'_$]=1P"M6JCPS^*2C14I.W@OOY580,KK_K3L<C6?.'2[93-YCZS7]!2
-M6^D]F5LG>86.D@)[:XTF>K6*"*`-9Q;"(KC*2*0V/=3"BQ60=KFRMO`%L2"[
-M;$$B_`/DXRAYE(;!&P039NG9:4IW4"WXN]L&D$[YD"<KM';-41*W1IG&!P!<
-M`0``7`$```(```!%``%85(<``$`1``#`J`$!P*@!`@'T`?0!1`<IH7]B)B<Q
-M+;;)$]&@N3N:'BX@)"`````(```!/"$``2!ZDJVB,Z(Y?X`MHN&S[$00]DI.
-M1X!P!Q>N@#MGHDFBE0\#\QQF/(K+I'GV=K^HS(Y$PI&L?O5G"]#:HWHPP9L)
-MKN8!T=_T&_?K8IRMFT_9YMKSQ_H[8;"2]_83@`W)L%(5)/Y&H\,-.8]GI[T.
-MNB]>E<3X8",]Q#Y5L,`Y<,IV_IA;WQ&Z#9NN(W.)REWJ[2!9DQ*H:3GR2&=#
-M`=VQY<A1DYI8H868\SN('!J[X!B6M9S`)(0)[-I03R&4O[K`<PU>.#O<,3`Z
-M#HYR'P89HG+\1I.@S@7)$+1PS,P/:/5:U6GG@I\(LI$L%]+Q$!+&;;T<@U'4
-MH5F"A4Q0*8]I85+91E`:V1[5#8&=Y-?F%]M@.\ZYO1+LQ+>H<^&<O%$2MT;@
-M[@<`?````'P````"````10``>%2+``!`$0``P*@!`<"H`0(!]`'T`&0&27^G
-MBN'B442@G&%0YFP\G@DN("4(`````````%PJ``!`/@V;Y/ZEX)OMX1-U+81J
-MN>3L'+P?HX.`BF45<4<O%$Y8NY=->C'!'4'[#IIYQ/'S_FS@)XY.9F+"5]_F
-M41*W1C_Z!P!L````;`````(```!%``!H5(P``$`1``#`J`$!P*@!`@'T`?0`
-M5`8Y?Z>*X>)11*"<85#F;#R>"2X@)2``````````3````#`PE((3NK#/F*SY
-M-K[^+-"_A`'Z^PRW!)[5XF,].6A:]F@[69S'E%G5IKA#W5$2MT9V"0@`;```
-M`&P````"````10``:%2-``!`$0``P*@!`<"H`0(!]`'T`%0&.7^GBN'B442@
-MG&%0YFP\G@DN("4(`````0```$PJ```P_P'O&M#^79"&IC]T,X^L3O`_D;F`
-M_`_O+CO!!-P&78&R#9GGGA@;UR#17H51$K=&41<(`&P```!L`````@```$4`
-M`&A4C@``0!$``,"H`0'`J`$"`?0!]`!4!CE_IXKAXE%$H)QA4.9L/)X)+B`E
-M(`````$```!,````,&+72ZB52?8Q@2BS-YS"D$5C1>""O"*B"=H-9S7E2I87
-M_^'4+U`,3A*&N,7)41*W1A03"0"8`0``F`$```(```!%``&45(\``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=EZUR"OJ@K*@```````````"$@(@@````````!>"(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``CG&L8G#,+L*;
-MJZ4,,''$2#9Q=5E(UK/WV9_664/9J-RKOSB=<SU/5!WBHS`E847BL6VJ)(N7
-M\\K4!C;`"3ZJ=9,8L(%\#7TQ;AF^+WCR8/_8GQ$8[BD!\W_2W6+CUU\65LUU
-M$TZ1D)-G4R(<!Y',B8A'BR3X.:2W9E^U<V@K49<I```D1ES5*6"%Z*[S/]1V
-MUJ%Q\=B=C4K.-[Z'JW2_]L6[HQPI```<``!`!"P.QG?>2WGX$D^L!>J-9L4_
-MR>V_````'```0`5"ICC(!R%($77LB,=P06VSR3;[!E$2MT;I(0D`7````%P`
-M```"````10``6%20``!`$0``P*@!`<"H`0(!]`'T`$0&*>M<@KZH*RH`````
-M```````I("(@`````````#P````@``!`!@````%,"OZ&36$=Y^F<[J2&K4K)
-MF2OD'5$2MT:X,0D`N`$``+@!```"````10`!M%21``!`$0``P*@!`<"H`0(!
-M]`'T`:`'A>M<@KZH*RH````````````I("((`````````9@A```@``!`!@``
-M``%,"OZ&36$=Y^F<[J2&K4K)F2OD'2(``'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``CG&L8G#,+L*;JZ4,,''$2#9Q=5E(UK/WV9_664/9
-MJ-RKOSB=<SU/5!WBHS`E847BL6VJ)(N7\\K4!C;`"3ZJ=9,8L(%\#7TQ;AF^
-M+WCR8/_8GQ$8[BD!\W_2W6+CUU\65LUU$TZ1D)-G4R(<!Y',B8A'BR3X.:2W
-M9E^U<V@K49<I```D1ES5*6"%Z*[S/]1VUJ%Q\=B=C4K.-[Z'JW2_]L6[HQPI
-M```<``!`!"P.QG?>2WGX$D^L!>J-9L4_R>V_````'```0`5"ICC(!R%($77L
-MB,=P06VSR3;[!E$2MT9+5@D`4`$``%`!```"````10`!3%22``!`$0``P*@!
-M`<"H`0(!]`'T`3@''>M<@KZH*RH`D-AJ#!2,2_<A("(@`````````3`B```P
-M````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H
-M``"(``(``#UX4<.*WRBQ/)2B'.3C*5,A_X2>RY`-7E"L-<7UJHVM5-$W@DX&
-M/PB%/CHK77/L&2!I6U)L:QAO,$:K=["*"[*/]&A-OM[/)K$I#W%JN_XQ(]A^
-MW[+'`'P`&.V6$&V;`N[7B+?W<_)U8N?3+CM)>L_UP@9NZC>8^]@T;W]N,(^Z
-M*0``)"82=']<)T!DK%F)52(TVQ^?1,NI&:P:^#[MH(-`<\;"*0``'```0`33
-M\U=/>PUSANR>2LX/GQ*R-Z6;UP```!P``$`%[D#I35[J=N-6L&K+XZ`=(YNW
-MN#Y1$K=&I84)``P!```,`0```@```$4``0A4E@``0!$``,"H`0'`J`$"`?0!
-M]`#T!]GK7(*^J"LJ`)#8:@P4C$OW+B`C"`````$```#L(P``T#J^\5E\'4D@
-MS0DJ(WQ@:<IF\!8>:O^43-(B'T+NO<=R&XF4W4,SI*98NJ\@V](W1;!<J3,I
-MA&EPK+1L8<@Q-=X3"\KN7^80+1'F+S\^AZU/V\H`%;8>Y88L4BD2L(,F08S2
-M*NK&Q\\.27L3N)I:-9E+H#J%KX7#/DSH-CIE,75I?YJ['Z`(Z6&&9MI:DSAC
-MNO0482;M"'_]0B#67B/+2O:4#CR0UF(,U)R5A4)>A.$;S8.+.+IBC2PJWRI<
-M7W/7<.#4<3>TGG]^**'F=U$2MT:#G@D`O````+P````"````10``N%27``!`
-M$0``P*@!`<"H`0(!]`'T`*0&B>M<@KZH*RH`D-AJ#!2,2_<N(",@`````0``
-M`)PD``"``>,W];AYE=\+31T&TS\YCO%X]6[JF=>#'.SB3F?F<4^;#P_;C!U*
-M'HJ'`0#-2A4D2XYU!B`I*5N_'7$R]!4OM3=%4V/B&"V*-;%QMJZ_7Q+9=!>3
-ML7$T>Y\2!MK+Q5&.%TT,(]EB$WWO#7*?IMW-(!QIUUM;F.A8%W0.#E$2MT;9
-MO`D`'`$``!P!```"````10`!&%28``!`$0``P*@!`<"H`0(!]`'T`00'Z>M<
-M@KZH*RH`D-AJ#!2,2_<N("0(`````@```/PA``#@)+7[+I3^=$<N#[-C?XJ,
-MVB(VFU#[I,H\X?WG2&B?^-&.!UB%QVA!;I]4\BA=X$!3KU0R`!8E]^NI,["V
-M[P*LX8Y^;FW(ZX_WL;)8C,-\[165G)#\9B\K6QZ)\#0VC\4(GY=*1;,3P8U6
-MYERX,FEK6GYZ$,6*?<1I\NY$WZJB<:5<@1%`YV+ZMO\?7UW(5DLA&NCX*_#V
-M5'X;8Q>?!"%LIL:!P1?UA\B4I8A"V\I;3"0JB\7PS3'U3>^]_DZP&W>GGN18
-MRT,(:.!LW1>X-KS`"V/P?Q>)R%UP:FX]>E$2MT;=QPD`_````/P````"````
-M10``^%29``!`$0``P*@!`<"H`0(!]`'T`.0&R>M<@KZH*RH`D-AJ#!2,2_<N
-M("0(`````P```-PA``#`W$'A>>DD.EW)35=M,^2!U82V5C?,^8C!A-C6D%N%
-M]EHXKL@7;+&^M+589U91-G^BEB(#25AIKRZH]EPIDDD[&I>+9HA0Y72<GT4O
-M2"8'BFI5^&FU6_\$[*WK%<'POV"M>Z2/J<+=5-Y-[3FQ?ZSCCS]A&UPI`)H7
-MS1.S5&@M<MMU490&/M`33;DGM!=@TD":9Q9$Y2@<5_[@0'0>O-SA9TI)LTNS
-M#:][1'R"6^8-"4D_]RYK[F:"%ST2+`M1$K=&L=()`&P```!L`````@```$4`
-M`&A4F@``0!$``,"H`0'`J`$"`?0!]`!4!CGK7(*^J"LJ`)#8:@P4C$OW+B`D
-M(`````(```!,*0``,&56RD8+C"E)_T'W$>A)!:Y<=U^FSXVT+^QWO.!WP$@H
-MG&R\/\BOT),LL$++41*W1JGM"0!L````;`````(```!%``!H5)L``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8YZUR"OJ@K*@"0V&H,%(Q+]RX@)"`````#````3"D`
-M`##BPMZ.[KC!Z<&,T,"`59<^P!:Z%JM18>W_*Z1NP%QKH#^LW_84=#'\E5E*
-M-U$2MT8B"`H`/`$``#P!```"````10`!.%2<``!`$0``P*@!`<"H`0(!]`'T
-M`20'">M<@KZH*RH`D-AJ#!2,2_<N("0(````!````1PA``$`9\NY#TJ%<\7B
-MZ9Y*C@FI*/H[K^$)=-V"M(M_PR)J4]"PZU,E4Q&7M*$1O("*D]3H%#U(@&AF
-MF4&0`>:G@^52P.O$54C.BMS#BC[TKBPG-F0=FCFXZ@:N%^[F57)YS0*9!7Z*
-M@QQ#7EJ-[P@ZD8T=2Y<5P+_@KVMV"KF0.)<%G]G1]SJ#UH6^I<#T0DMJ&?V%
-M:$P!#H"B$2%TD*?<LZ8_BQ.F;A%55**;L8!E_!I\I\Z93H]#^#7$.OK2FLJW
-M1.F]9V%X`4GAA22H*X4[,A8W,*L[1X?-PLG;*;G_Q,!9`'4W,T[@*KN/P?X/
-MZ6BA3T@1.\FY(1'?+\FNVPG241*W1G04"@`<`0``'`$```(```!%``$85)T`
-M`$`1``#`J`$!P*@!`@'T`?0!!`?IZUR"OJ@K*@"0V&H,%(Q+]RX@)`@````%
-M````_"$``.!BY*H_7#SZJI2:Z:D]@N'`TF19E;7;@;['<8.,IJ`);0Z=-&+1
-M)!WD0V5ET>NQ,\0YU+Z>[%E[%VS/0@8#5CS&+=X64F)+9^,/Y4BTINX2<XW>
-M?=[2'(42,*OJ3$BNRW=1XQ#.>^F#XSSE'][ZUOWI\96T0[([MX^Q%7FF?ZI7
-MM_^);ZMJS6F2D#!4]![:/1%'#&^1/$;W/FC1_\;MA\?#:^WWE)9\:N]+G#O0
-MN6[0.0B5E$1CJJ6L=+V4D`,B9-RER]?W!0\S#=!/7IR8E:UG]QF_ML6;>[%W
-M3"?741*W1C$J"@#L````[`````(```!%``#H5)X``$`1``#`J`$!P*@!`@'T
-M`?0`U`:YZUR"OJ@K*@"0V&H,%(Q+]RX@)"`````$````S"$``+#I[LUBP$X.
-MD&]*'\LV1O"0[7^%7I3I!9U.L,IVC/RX>_C>=YEEN+"<BX&2^BT)S+0CRMY!
-M2.H>`I]!$U$+ZE7YI_M!Y%'$=B$I-E_OO8!?!-B^G`Z[B+4IA]P4C"B_LVXI
-M%_]R_#DKU@.@':!".SN;*GB8`9_R%8FFL)T%+87?U:8D9F$YU7W.[34L!V,H
-MBQA/#R\_81&!T?W<>3K3S0A:(74QH!`/>P$'TF3841*W1B1."@#L````[```
-M``(```!%``#H5*(``$`1``#`J`$!P*@!`@'T`?0`U`:YZUR"OJ@K*@"0V&H,
-M%(Q+]RX@)"`````%````S"$``+"BWF2ULHL6D45,^`"Q070!4N@2"KR%F,^N
-MUK@TFFQS45.8?LTDH=/`I]',Y3]%!4E\'>8#L,+:GFB'X8CNNRH"8QL375LR
-MHVB%'IZE7C([-D9$?T1\=Q>F\CY9-PTXY,.7[_5JAR&R(.Y?WWP"8/+$0HO-
-M22%#]:6XXBA&#\K#;,]>CJ@Q;GY4"?8<GI#!GT22@93'ZPVT=Q"U@L*$-CC6
-M:N?8%HF>81*UAMMV41*W1LMJ"@`\`0``/`$```(```!%``$X5*,``$`1``#`
-MJ`$!P*@!`@'T`?0!)`<)ZUR"OJ@K*@"0V&H,%(Q+]RX@)`@````&```!'"$`
-M`0`"L>$PQ+),.,(X'NY$'O<;TV2SECWI3M0O'0H[P-([9>-07(XO>+&Q(D@A
-MK+STZQS];J"I;]@80U!>.T$=>$T"^3RWH`R[+,[)6%ORBG/Q%;+3*B)Q%T_#
-MUA+=+$7-=)/7UO^@16WU?Y-Q3>PD8H?\YEBJB:I8,CJB7%`IJ*;EQHHB^9YI
-MRS_$O*[D>+2_LN=;ZTIX4:1&E9T0>".$#)PE/)!9I/-/#JG:T:"N&\Z%I[]4
-MH26-!7I_A0RN0`$>37[B?^UWA8B8&LF^??&%=<IT7:B2Q1P!X3:@6PHV!G_L
-MC/*C4&=>$QA%0JU^PI"#OPW`V06]+"KO$YL>)[E1$K=&U7`*`!P!```<`0``
-M`@```$4``1A4I```0!$``,"H`0'`J`$"`?0!]`$$!^GK7(*^J"LJ`)#8:@P4
-MC$OW+B`D"`````<```#\(0``X*!SKOF7=EIS#3ZG^:&\A%XR'I$1K`]]83E=
-M9IM"($4K5'+F"1,FDT,22?697^&8K&N;TL"!_K\"_Y6;;[!SE+ER]*?-JVB_
-M*<;2BY"=#'!RG<"2[RH_2=]#3OG,^V^S[;6KLD6)T`5OS:27-$B67FX*3J7\
-MD6SMNT2EA&K2*!#L4KIQ!&1:.%T_EO7T_Y\%[V!`K&#*K_KOX,#&<J7K9*!*
-M$YV1A)5!P)47C0*WQGBZE09FLWE`/CPF(F:9XO_??*'F/=Q<BX,/^)]8DGJ\
-MZH`O*JW`74L[MB?>C&=1$K=&*X8*`.P```#L`````@```$4``.A4I0``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KGK7(*^J"LJ`)#8:@P4C$OW+B`D(`````8```#,
-M(0``L)7N=!6$1B&KP'G6(0WL@%4:W'.$`YP*EM(+*4/"CXC5K<>DE-1N\0UB
-M('!*`(]1E[U:':!*R#-6$U6O2!NDE3MS_9,"9Q.%)WV5CM--?SPZH@"+\,"-
-MZ?JPM[75Z=V]R*?)4Q?>$P607N`5@#9<Q7UU#K];8_DI,4N3JHX3=HEH/;Z-
-MLT*>LRN&.US4M3XQ4+EY[:)AO<8F9"Q0#:WCEWAJ<KA8B8X%PLX%M_%1$K=&
-M/*@*`.P```#L`````@```$4``.A4I@``0!$``,"H`0'`J`$"`?0!]`#4!KGK
-M7(*^J"LJ`)#8:@P4C$OW+B`D(`````<```#,(0``L#F3]-47<9@3(+[DYRDV
-M@&?\QCIB^CNCQ63H%,5#DM5H'(1$<B=U%/V/.QP6P/F]N-T_TDC,1\&EIKZ\
-MMHC-<VP%*?%GO]K%=I[V9;S=)SWK[E1BXE=@Q^43T>G:=/SJ%S;W&S_/=[DK
-MA`9S@ZA/>PYI:0=27R4?A%Y%SZ9R2@"%TN`4QY7+'G;LO<^/WQC'5I)":/7F
-MTZEC:%31-<U8M3(4@O9;HLPH.VZ+)TU1$K=&W\X*`(P!``",`0```@```$4`
-M`8A4IP``0!$``,"H`0'`J`$"`?0!]`%T!UGK7(*^J"LJ`)#8:@P4C$OW+B`D
-M"`````@```%L(0`!4)_CNF2],1=I(0?DM/GZY_SK)_31#V,*=5R/)UL\??=$
-M'H)'EVP*B:Q791=`VZUGW.$J!<6&:LCK0#PZ*1:O;0/5<VF($3>0&^B[E[4E
-MQT;J@X>9[W:K8[D)JXYCF)NE_GE5+5QZAIH!@%E\94Y[Z]#QZ9_ZZDJK.0TR
-MYG2B38B,)$8.=SS+594>T$;V-Z:BT9TI4O)H4[UCF?A+S\F8Y[&%ZT4CV#*)
-MEJ^82.23^A?:=&U!J&2,SFJ00N)>;VG7I.#E61`E^T#GW16X:"+-+*PYH<T,
-M6P/-"`*L7'LN[Z[%AA[Q:@A&31BI<_G2NE!2'8',IZ,TA+X-EVR5+<7P!"82
-MBI2B55PIGH#+@:&=1W8U,9S%-WON[];M)A/D3#IV_<2*ZD.'@,W_B?\1P(^'
-M>`V>\A--!JJ:/>AW@YX&.!'>TR;,1MDHWG=(M>,941*W1FD$"P!<`0``7`$`
-M``(```!%``%85*@``$`1``#`J`$!P*@!`@'T`?0!1`<IZUR"OJ@K*@"0V&H,
-M%(Q+]RX@)"`````(```!/"$``2#-?.+B"[6_GYVR]0Y@^9S9)'0VMQ(U*HW1
-M*01T85F$-A[3I(PPK0Y3(I?8:M;GC>`4%?]ZZMWDSBS7I80X4.]Y`[.K+=2P
-M0F%(X"Q?>M9*[E;#0P?CXM+%GIZ3AU`P[.[V/<!QUO=42C?(38TM[N`FK$X*
-M2K8]7%ON\&*9L]TUU4:'OV8N@PEVE9+U^:P)MO>:HD.K8%<G"0^Z2B&S=*\6
-M:3S6R0XQ*/DG;O<1YC<'=?(#=Y\DWRWS'H"7_0TF^>8TX1VL_+>]WK/:W^_W
-M](A2<QC/"S_K2L@"+17(]Z#?P)MA"<($36_M<&*BE%3B'*6H"5%?-5]9:72.
-M;=+THH#1.]LOH2`,)_PJ#I]CD`"?!D*2%0>7RWQYH.<W/5$2MT8?*PL`?```
-M`'P````"````10``>%2I``!`$0``P*@!`<"H`0(!]`'T`&0&26\":1;X0FW'
-MX$%GJB`Q=O0N("4(`````````%PJ``!`\_2*GPLS`AW^DDV!MW1M3ZH*L//J
-M9#P0-/=^8*ANW<.K@$C\`%B<J?HIYIQP'&..3_71LQ#,9ONT+"C141*W1G$V
-M"P!L````;`````(```!%``!H5*H``$`1``#`J`$!P*@!`@'T`?0`5`8Y;P)I
-M%OA";<?@06>J(#%V]"X@)2``````````3````##U`/>GR"#301U=NQ(@B0</
-M6`K*T:P6J1#:V#1]M98+=L\^B;36OP7-VQ$0!U$2MT9>10L`;````&P````"
-M````10``:%2K``!`$0``P*@!`<"H`0(!]`'T`%0&.6\":1;X0FW'X$%GJB`Q
-M=O0N("4(`````0```$PJ```P.;B(O056IMP+*!.9?CPNT,<W&N'D?ZC9?.TK
-M!73W7PD6T4/6XZF/8(A^-TI1$K=&SE(+`&P```!L`````@```$4``&A4K```
-M0!$``,"H`0'`J`$"`?0!]`!4!CEO`FD6^$)MQ^!!9ZH@,7;T+B`E(`````$`
-M``!,````,-,N%NZ:K'[(4IQ09-[KNB7P)>M>.7B4,/DHM=F]G29X6_FDR#H8
-M#1C'AAB"41*W1E5.#`"8`0``F`$```(```!%``&45*T``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E'6+<8?"WKJ(``````````"$@(@@````````!>"(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``F'+"+H.B\<CD3E>O\45D
-M;,`\,S[IU.NTV`N)??JA/X13J@("LVJC92]Q]5F^G;#/=_],M,9"'NEJ]<P_
-M;B\B0YK2)!<-ZK?8L/(&_&X>RJMQ;/GP@$64:!3%G!5-SZ&_!(<;U0W)HX0F
-M66J\L7"E8+8DKH/0[VD':0XQ5/<[SZ0I```DI[N&KX>6X.&S2W"15BW^':32
-MH.PECYE\(!MFT'2%?RPI```<``!`!'BCM%8.@B>6<5F[`'%ZB.9UM:,V````
-M'```0`7).UL/H?5O4^U@:RT,+8N4YB2X=E$2MT9I70P`7````%P````"````
-M10``6%2N``!`$0``P*@!`<"H`0(!]`'T`$0&*1UBW&'PMZZB```````````I
-M("(@`````````#P````@``!`!@````$163D8L;P@[#\WC.C)=&_@27JT@U$2
-MMT8(;0P`N`$``+@!```"````10`!M%2O``!`$0``P*@!`<"H`0(!]`'T`:`'
-MA1UBW&'PMZZB```````````I("((`````````9@A```@``!`!@````$163D8
-ML;P@[#\WC.C)=&_@27JT@R(``'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``F'+"+H.B\<CD3E>O\45D;,`\,S[IU.NTV`N)??JA/X13J@("
-MLVJC92]Q]5F^G;#/=_],M,9"'NEJ]<P_;B\B0YK2)!<-ZK?8L/(&_&X>RJMQ
-M;/GP@$64:!3%G!5-SZ&_!(<;U0W)HX0F66J\L7"E8+8DKH/0[VD':0XQ5/<[
-MSZ0I```DI[N&KX>6X.&S2W"15BW^':32H.PECYE\(!MFT'2%?RPI```<``!`
-M!'BCM%8.@B>6<5F[`'%ZB.9UM:,V````'```0`7).UL/H?5O4^U@:RT,+8N4
-MYB2X=E$2MT9-D0P`4`$``%`!```"````10`!3%2P``!`$0``P*@!`<"H`0(!
-M]`'T`3@''1UBW&'PMZZBH5%O`JLEU1HA("(@`````````3`B```P````+`$!
-M``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(`
-M`,;V0@06RNL1:H8R&D+_9U\Z-[-'6PXTKFE\;,,T)AU_TG.#-"YM(NQIP73[
-MVFPFU:E]\;Z@O[XW?SQ1!`%1>_YXZ0;7X(P*\<:S*OAO)=H$!*0'*LC&_RE"
-M?6GVDNZ<:R3MVPV.=LWU5_TL][\0"0N\WRRV):F-G`N?)_5(<BN\*0``)&\,
-M/AQQV@D4EZL*Z:C[,;<5`MJ_'M7X`$P>5!5?*>AV*0``'```0`2(K2XDR/("
-MF$+`UW5<T<>#&"XY\@```!P``$`%Z#3R05*A>!J>[)2.7NG$3+GK^4I1$K=&
-M)[X,``P!```,`0```@```$4``0A4L0``0!$``,"H`0'`J`$"`?0!]`#T!]D=
-M8MQA\+>NHJ%1;P*K)=4:+B`C"`````$```#L(P``T%.MLL'U09PR^I,2?-*>
-MES\"K:]ED6EK>C=:.X*BV'\P<WJD)394ZXQLTOI?`MFYA:&`U)U,W'RK`D4^
-MP]&K>28:RH>Q@08>KSYFI+_5/>([]4P1%^H%0+2PQ/F@<$R1A0C^%LD!]W7Z
-M5GSOG6`T[\B0(?_M,Q3FEPOMY*I_Q9Q`=^RZQW/,U_P5K@P(6FVXQ%#`#G@`
-M#VWX"EHH#/Q&%6',_JR70D)&KF\S`<OH[!_C;QJQ#)-4OT17Q$""R!2B5S*D
-MHXO5$4.BK(O`V%$2MT:`UPP`O````+P````"````10``N%2R``!`$0``P*@!
-M`<"H`0(!]`'T`*0&B1UBW&'PMZZBH5%O`JLEU1HN(",@`````0```)PD``"`
-MS$](MP%3#'^E2R+TP-C?=?4[^$B[2.P2;9*.H_$2*>D^#F+A&I9Z>52")(Q[
-M^],VWTH^^G;^$XP6))-(U`=S07?.G,6%_.F`D8;C(^GCV__8A6?L6!.X+7AL
-M<9[#<\E@_-DC%WX&BZZZ.LCO(\!M@D&]&24GCQ7OQ&R`#5$2MT80]@P`'`$`
-M`!P!```"````10`!&%2S``!`$0``P*@!`<"H`0(!]`'T`00'Z1UBW&'PMZZB
-MH5%O`JLEU1HN("0(`````@```/PA``#@=),)4J,ZG4@3S^94O<8=FJE$SLH^
-MU)G+J(V)7L1SHJ6L.<;NX'D4Z/?V@^]2B.*C"8!+@5M)-*8H$[J#'LEV\Y*T
-MV2'RV?@L0I=#4.>JBF=?BL%7#B]G4P0ZVS4`%DECTRU#!"1W)=#NXX$1U3L_
-M!$CRP.T55GGKT909@"6%O3NM;<<F\F8N1\3(S+!L6B$:T%TUI*A*2=!=%B]R
-M"9Z=Q[;,46(/)(K9USJ`U$(C(_C&H2/XNNEDAB/LIZE?Y#X?DL3Z_5\M:(K>
-M;41]XUR(:QS;^UMS:K0/FL9R2E$2MT9V`@T`_````/P````"````10``^%2T
-M``!`$0``P*@!`<"H`0(!]`'T`.0&R1UBW&'PMZZBH5%O`JLEU1HN("0(````
-M`P```-PA``#`_FV\'@?1D5.;-6QD1:\BM=@Q2GBTWP*@:_0*EN[HIHXL;2;*
-M!-+L_;%']4<FMK4B=@^C*BNZMU=40X&09O.A:<2<M$?D+HL^9:C>O<^U`OW0
-M8"*D9?->&"SI&^UDUKA[?LO&V>YH\5!9)^L.^FBA97\4`R./EUI0CE@`FA_(
-MG00"%F9;'6414UJ3*;`.*H,EC=AD%&.>WP*8D,-`8\2KZL5?L%('!M+#&`7H
-M]&M'VK64R%^4PI$!,+_!'TA1$K=&20T-`&P```!L`````@```$4``&A4M0``
-M0!$``,"H`0'`J`$"`?0!]`!4!CD=8MQA\+>NHJ%1;P*K)=4:+B`D(`````(`
-M``!,*0``,`#(%HGT[3F@JA$$.U6X)Y0>\7`Z/'>#\O`!OWZ26O,'H)!WF4GC
-M/E>KWX[Q41*W1NPH#0!L````;`````(```!%``!H5+8``$`1``#`J`$!P*@!
-M`@'T`?0`5`8Y'6+<8?"WKJ*A46\"JR75&BX@)"`````#````3"D``#"KB0Z/
-MR\$ERV_>9X0Z:C7[HL(FZ$5KT;2N8IR%>=-4G&VC06Y%H%AW;""IQE$2MT9]
-M1`T`/`$``#P!```"````10`!.%2Y``!`$0``P*@!`<"H`0(!]`'T`20'"1UB
-MW&'PMZZBH5%O`JLEU1HN("0(````!````1PA``$`GCV9\/2K-09+EKR=7,?;
-M+8=K_]-1RI`DCG43#)W/C<KNQ_/V%MQKIORXWA*P,M=I.X1S>G%)YJ%%A>CJ
-M[=>'@&F&A9,7>G2<+J9NS5&@N)WY8V]\M0=R(V-E(TX??$\B*_>/B%![QAVC
-M;$?Z+]^C>JAFSEQ!.00:M>!)*$BW@8;0'="BM!B7KV@@E9\QD6N!]%+\4V;P
-MU'N0K2B+3NL!\[:VUQUB8SR*L(Q[*8;BJ92K`<7FI)KPV(AP!<M(RN94?E-%
-M0K@V<MHM1C,ACH)O)D%P!]0@ZRM].2]OY^>V)F7,.]09D;L(FD.T5_TV'+A8
-MCS*[2EX00Q[[\22$41*W1F!0#0`<`0``'`$```(```!%``$85+H``$`1``#`
-MJ`$!P*@!`@'T`?0!!`?I'6+<8?"WKJ*A46\"JR75&BX@)`@````%````_"$`
-M`.`$L)3ARW:^MIM[](4!?98^[2&I(7XJBP9RD)@,6R(;\M^_\FDL@A<7Y$5C
-M9=B"^*[QC0"$#]WLOS[QQAZ6,O@K21003O2<"$%&\%&Z=1$SP>H3U_5@E8"*
-M'P%^RYEKH'9,[`/,:\+*K08M^+8'\&#JUP;RP/3=J5)1A!=!W%<)K$ZW&R2A
-MR4"5?V?8].)6]N;/>)=G<:4[X%OS80-&9WWMTDC;H%W"6D9;5!-+5)>98H4?
-MHXX6C$\19).5WF.A6ERZ/8-';#R3?CLRY_K]-AR*@YY68C4L`BR@CR7F41*W
-M1NI?#0#L````[`````(```!%``#H5+L``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-M'6+<8?"WKJ*A46\"JR75&BX@)"`````$````S"$``+#&ZP<M&Z?Z%1N7E[*$
-M[%XL`%7TH`,?Y]);$M!]\N5$4]RHTQ'^Y0,KPN`V(R+0_?+*W/ZESU:./+UH
-M;>>R94A`3_6RSCS^("WUJ6X#D"3_^`^(U]2<6,84"5U[(G!Z`V/IUON4#<*&
-M4,<[&7AYY*=S3;XXW`Z.*TDI;Y>U`&;?\]AM&#SHAL%6\!0,]LJ4:$)9G[)*
-ML`_S\1(#+P+*Z>P8=!0)=)K=3H*_745K41*W1C:##0#L````[`````(```!%
-M``#H5+P``$`1``#`J`$!P*@!`@'T`?0`U`:Y'6+<8?"WKJ*A46\"JR75&BX@
-M)"`````%````S"$``+"TN@H0Y<J*0Z.LQ#7ZM?#M!6C]PQ'@_8SHA>,8%JX[
-MIM;56<QT;)30<^]OS>`+Y&'H]A-_A5C+#?M%;11Z,$/8E6+J@*N!5N*Z(?7`
-M+9"&/S>6.7_^1L.[_6:^.!;W6?$""C>5N<4\&:N64KB\98\:<MH[BE/+5T@5
-MKLU8=S_Y`M89:V/J([EYV':!$C'TZ]S^1!S`TN+#+;[G#M<,@5NS4!EDDGS!
-M4J&HU8ZE41*W1K^@#0`\`0``/`$```(```!%``$X5+T``$`1``#`J`$!P*@!
-M`@'T`?0!)`<)'6+<8?"WKJ*A46\"JR75&BX@)`@````&```!'"$``0"AUE?8
-M!+KYAZA.5/-6M<(PWTM<F_/Q&]<*<0:!?5`Q.MFZ//GAR2ZPQ<[Z0A6<[4@V
-M3WI07KI28%N7&Y>OP9<7`B;`=4R*K^L8Z/O<'ZS_K)1L.A>]J".G:0]D4*OA
-M(K)3S'`I$B>$Y*5GPEH!8H<WA9P#O(23JRNP<I1F8V:H3TT500CQI9.+4BKF
-M>;"E=3848'R%*TG4..YHU64"+[-:&833=$V9/4[N4O;ZF/&2Z6UW&>^(9`<2
-M=TN\\0*N!4W'OBZC-K>7\,99>G3;Q@%1Z"K0-',@LXVOK85,YQX#.:,<&QOX
-M@/]&HJC5D\[>\$73;^G(V?EE\E9UP/M1$K=&GZP-`!P!```<`0```@```$4`
-M`1A4O@``0!$``,"H`0'`J`$"`?0!]`$$!^D=8MQA\+>NHJ%1;P*K)=4:+B`D
-M"`````<```#\(0``X.<H$/S^2X5=&[*.5=.>@D&=#67<YPJ/Z<5YN=]2\I)1
-M)M#>J"-ZM`K4VT]>8AR8-GUHLJ7V:RSIWBK\C2-)WUOU4;J^GD'2CSH&J*"C
-MQT]\N.2^X!3:NWU7]*KG9[4"'$@H_717RBF>PUS`<//%[3L\D7Q`P+7ZG/.\
-MK%$X5L%VD:-?;X.YGG>[?*'2>PQCI/CD`0Y[/#RN&;F6$*<9_C@-JKG=1FA2
-M(1RQ,"KM7S1G7.@I!!`TLXK@.O$;=.$Z:LW8:U,"LNLO*+,@2X'3=+1AA.=R
-M/H8XN),"X=!1$K=&'[X-`.P```#L`````@```$4``.A4P@``0!$``,"H`0'`
-MJ`$"`?0!]`#4!KD=8MQA\+>NHJ%1;P*K)=4:+B`D(`````8```#,(0``L(NJ
-MH/F";8\V[$,'",\Y]==14[45C4[*6T^WPY7T=7WC:0Q'79#YEIB3D82RBR6M
-M!>$EWI3XOQY=,-)NU[OY:-2C!3@SDJ9:8HXB)AD6%AO6C-)X-IQ"!A`_!`UI
-MAX1UGL0`2V2%4AW*S_O6:&;[$@8\]TBB2[LB^X7="BI,G[&1?BTM=7\K/5K#
-M\E#T*WAT\KM*O)DO?]8E,S)\^E!XE_<8PQ4&>"NC4FOJ(G11$K=&@.$-`.P`
-M``#L`````@```$4``.A4PP``0!$``,"H`0'`J`$"`?0!]`#4!KD=8MQA\+>N
-MHJ%1;P*K)=4:+B`D(`````<```#,(0``L&]TD')@;_F)+(F_KJZ%0E_,/YS@
-MY>SDJ,,U>U<6=-:$ND!6V%\GX_K/9A_X,8S/'8-//@K5G9%T\_X0S4D"MC^G
-MLT1+Q,-,I*7@<Z*+;M;3@/CD#+?7$_OU=\XDGE+4'5,4C7Q)49M8<2OFS_K$
-M&ZM>CV4DT?=Q=>N,4(LBC>_C&.<,H4!ICC*%V%5N+CW(A/6;GOZ!]!TW,K-B
-M[*!;RL^$(H'5&-'N:\(X0K91$K=&^P8.`(P!``",`0```@```$4``8A4Q```
-M0!$``,"H`0'`J`$"`?0!]`%T!UD=8MQA\+>NHJ%1;P*K)=4:+B`D"`````@`
-M``%L(0`!4/%1KJ5!:)2^P_X4\1/VDH]SHL$_B[^Y!+>:I1-5%45CZ&,SSIN>
-MS\BCIC=2X08NX";H:C466\N"\+<Q#,#8<(27VJ93<7!?):J7IYCLM6GG03H-
-M4^Z,/3^S&HK^%`*%:,"V#!TKLUU9?Y$=JX!M!6#G(E+U3P$/(/$_,73B1/5'
-MF?$4N(,*<\M&:=B](:&&-.,2WH8WJ;VU=6`ALP(5DF-Z(;,2%$=U:I\C16O9
-M5I[=NW]*-XCGEY3\O3N<-W;%*$/#1["HSN_:[&WUH63M4#?1=)T[@0^V0Q1'
-M!S?"SGRY[A\_\K2WPDI[ELGC0S`L^@J))>+GC4G0;T/C60PFZRY[.J-(0>@_
-MJ]?-FT*<OO2D4P2[Z?]<HX+U4]G"CRV>>OQVE_R"'9%JZ\W`9"K_F<VVO3;!
-M12B.)US[JUD)'BE;\XH@L8BLXZ4'FU9^41*W1@D[#@!<`0``7`$```(```!%
-M``%85,4``$`1``#`J`$!P*@!`@'T`?0!1`<I'6+<8?"WKJ*A46\"JR75&BX@
-M)"`````(```!/"$``2"^FD+AC?8FB8OP*;[;S$U_,48$=5HX'%IC2WNHF4L>
-M,R"G@_;,LI]LHT)3M-+-6M([^=T>!BR:^:)J$--1CK04DS)+4V)2\USLZ'PK
-M*4=A#WOH`^^QP`D)(`$:O?G]`@("X6O@&J&6HS.M_;A9%0OMGC^/F25AAFYD
-MX6\B3F3;C:]R![+/IMH1.;A`*`X]AE/P`Q]>S=H@RMB0W_N_020'>)2B`3D-
-MPLK057"&\3=+CK]A)-!W%Y(//URYW5,81)19"-6]^!PP-U<3P"6/_L9N3S&I
-M:_%)TT*!OL)?1\"$_'2T9$N/O.7:V6G6HC3,J[$K\7X&&.L7[,CU-%?3&4I4
-M^>RK9("RVH*K-$<5V&OZ9/>DYL;V@U'\'V/B_5$2MT:,8@X`?````'P````"
-M````10``>%3&``!`$0``P*@!`<"H`0(!]`'T`&0&24#25E%JNL2TH58#`,U+
-M7T8N("4(`````````%PJ``!``E9W5`\XR64PHHRQFDYRPLOV[?TUNX(4/W2>
-M3C\406N%6BKF(18NF'6O\S*RVIS\?!_:XO-Q.R6?&CQO41*W1N=N#@!L````
-M;`````(```!%``!H5,<``$`1``#`J`$!P*@!`@'T`?0`5`8Y0-)646JZQ+2A
-M5@,`S4M?1BX@)2``````````3````#!524`,Y4DSN',YG09+3<E%QH9!$PY$
-MB4B']8Y&2-`\?,$,^[G4H%.!.$0IA%$2MT95?0X`;````&P````"````10``
-M:%3(``!`$0``P*@!`<"H`0(!]`'T`%0&.4#25E%JNL2TH58#`,U+7T8N("4(
-M`````0```$PJ```PS.DU^5Q&/F5'ZN.L!N8\_L$Z4I>+#N-HV?86M2UV_W-W
-MO'GCY!W=G&/)Y=A1$K=&:XH.`&P```!L`````@```$4``&A4R0``0!$``,"H
-M`0'`J`$"`?0!]`!4!CE`TE91:KK$M*%6`P#-2U]&+B`E(`````$```!,````
-M,..H\`-8-\0C8OE3L4W/G*U(A_T6.?$E'Y0UJ%E+PH984OHP\A8<)4:4'/$E
-M4A*W1KI'``"8`0``F`$```(```!%``&45,T``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E9=+>Z5P$3!<``````````"$@(@@````````!>"(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``J+X*0K*N<CQT6EZWEA$I$?=6?I#*
-MT)W"0?:0.7(@',#789<QT@P5)KK$>AS<JX/$9<JQE^>2>ZTO[^@%_88"";E"
-M1ZYMWCP3,I#[J$F8$$VZ:HP@U%,ISB*[LF!;/'3&Z&5/D/TZF-R.U$->PMI3
-M_<RRG.EE7N9':S"X(E=M7_0I```D:AX.--=+&X*L=:X!CM7(4N\6^M)ZK67`
-MH=7.),A4^DTI```<``!`!*7S^_Z:/N?W'"C$98I-)3O-[\G"````'```0`4)
-MRQ^JCY]:3>-C2TW%1)+O;I6_-5(2MT:(5@``7````%P````"````10``6%3.
-M``!`$0``P*@!`<"H`0(!]`'T`$0&*672WNE<!$P7```````````I("(@````
-M`````#P````@``!`!@````%B4G=QG/,D6H+@J,3+,N30\(6^5U(2MT8=9@``
-MN`$``+@!```"````10`!M%3/``!`$0``P*@!`<"H`0(!]`'T`:`'A672WNE<
-M!$P7```````````I("((`````````9@A```@``!`!@````%B4G=QG/,D6H+@
-MJ,3+,N30\(6^5R(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``J+X*0K*N<CQT6EZWEA$I$?=6?I#*T)W"0?:0.7(@',#789<QT@P5)KK$
-M>AS<JX/$9<JQE^>2>ZTO[^@%_88"";E"1ZYMWCP3,I#[J$F8$$VZ:HP@U%,I
-MSB*[LF!;/'3&Z&5/D/TZF-R.U$->PMI3_<RRG.EE7N9':S"X(E=M7_0I```D
-M:AX.--=+&X*L=:X!CM7(4N\6^M)ZK67`H=7.),A4^DTI```<``!`!*7S^_Z:
-M/N?W'"C$98I-)3O-[\G"````'```0`4)RQ^JCY]:3>-C2TW%1)+O;I6_-5(2
-MMT8<B@``4`$``%`!```"````10`!3%30``!`$0``P*@!`<"H`0(!]`'T`3@'
-M'672WNE<!$P7U!]-.\.A:B4A("(@`````````3`B```P````+`$!``0#```,
-M`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``!*`=^!&
-M8F;!P:55;IH&(@^<)]S/$+&KC<2F%A3\Y_[D,?USK'OFN,A^%RJ+_1/UAH1\
-M.9.&6R%IPYD&5X?7:(\?PSJYBWW_976TAB*JA7+,%NW-<W>&T0XP3*<'R?@`
-M<<]E`<0X>[FRHWLG/ZWP8)\I&!YWP'"6P&WX%UU]2\!^*0``)-\HO3;Z3C"B
-MP5,H9&LX,L02@)P3J--+BQ33U%JO_&O8*0``'```0`2ZR71",5EPT/U6-YK<
-MVB,8H+IL+P```!P``$`%F!.LL3[40U*#%;R#78<=)5OG6(A2$K=&V+H```P!
-M```,`0```@```$4``0A4T0``0!$``,"H`0'`J`$"`?0!]`#T!]EETM[I7`1,
-M%]0?33O#H6HE+B`C"`````$```#L(P``T*WQ]:"**O-VL&PS>0+R-DFG3YV^
-M\#5?$I:;5\YK)IK*=Y=C)@*T\$*`2<=%T-J#EWBIRE57Y<R*//Q/*FW*'4`Y
-MK'VLS.PLGF2=5#(,Y0WN4IOZB&IB)^TN$9*SX#D8GI5Q:@'ZY-("#Y%#C+SY
-M-@;)!`87(&28Z82A/?`N1ZN4>(8QN(-KJ[AU\IY5Q$T.H4=^!^OADZ:Y)R\2
-MH`&5<K@^L2RMS@!,WJWK\2K.E@Q@%+\C/ZT%2F`$1%FN&!XJ)UL1JM^3L?N?
-MZB_[K5(2MT:,TP``O````+P````"````10``N%32``!`$0``P*@!`<"H`0(!
-M]`'T`*0&B672WNE<!$P7U!]-.\.A:B4N(",@`````0```)PD``"`+=\!_4")
-M7`\KCTH-/`79"1H:NKOT0KFU:NP/!GH<^D(3@6T@6SLMGE3,ZY!L28::SD-@
-MK-UC2CL(*X]0'[X/#E"=A.5T\0YI8VEW`7V:3%\#CVPDA!<C]RYAXEV(?E+M
-M(?F<*(^#E<;J%@%IM9J+*E=J[1R'YGMK_MWOYE(2MT;)\0``'`$``!P!```"
-M````10`!&%33``!`$0``P*@!`<"H`0(!]`'T`00'Z672WNE<!$P7U!]-.\.A
-M:B4N("0(`````@```/PA``#@$VB,%?2M-`B(F(>+P:&B/8F-!V1_7GBQIGN&
-MD7S(A%29KWP!*(GE5W<*`&]?_(T2\*/)<+E`]W!-C9@]DGY084_5`OA.&;T"
-M>K)0P=TXW7O%V]MJ=_6J,7)C(+9\<;I]TK+0OW,G(2-Y77(&:_/URAQ_TRW6
-M]54_1]=0,?%S(31'>])EV2+Z<F*W_@!>+4(0:<CH6`,C<3,W*C)6CRM3WQEU
-M&J4R;Y]+N_"P]9-1Q$(?/20R+IW9:LR6MJ5CB$245IU@8=Q]@T?\H>3(@`@/
-M!9]%8GXJIL](P<',N%(2MT8U_@``_````/P````"````10``^%34``!`$0``
-MP*@!`<"H`0(!]`'T`.0&R672WNE<!$P7U!]-.\.A:B4N("0(`````P```-PA
-M``#`0-UM@]4KK(?Y)$]6="#5I@7Z#(.=K>+Q7_O^R!],+3WS#K7U!,/XA*P*
-ML`*LQ+AXTI,$&?6S,AL7'1.(S^U.'2^UK;8>T6O\.BP9EJRL<(9U"'8[7Q59
-M>9Q#I/U7!+&6EQ$\"1"Y$C]K#^1OY'VF/*0N-5K7N\>TVN'H1Z+,3B+'D%OL
-MO:48:J9B!G_?32F&&/=K35*8?ZC+7$QNQ2%:"\VUJK^(#M*8%7,A&=:I3:*A
-M6A7%8F(P-MBA6`!2$K=&UPH!`&P```!L`````@```$4``&A4U@``0!$``,"H
-M`0'`J`$"`?0!]`!4!CEETM[I7`1,%]0?33O#H6HE+B`D(`````(```!,*0``
-M,#$[/UE.I9J4KXQ,P!&>IL!:*NDDKZ6#4Y)L`-0*54$5PM?\.8,A"/BX^`3A
-M4A*W1C`H`0!L````;`````(```!%``!H5-D``$`1``#`J`$!P*@!`@'T`?0`
-M5`8Y9=+>Z5P$3!?4'TT[PZ%J)2X@)"`````#````3"D``#"\JSKM=<VO0$:L
-M3AS8JQX4SL0K=`8H*9[.`P<8SO!)4N[-?#W7S,E*L]0;?5(2MT;40P$`/`$`
-M`#P!```"````10`!.%3:``!`$0``P*@!`<"H`0(!]`'T`20'"672WNE<!$P7
-MU!]-.\.A:B4N("0(````!````1PA``$``QD9<XOZ`6G_#V13RBV<IFC&58*G
-M0"U\$=MJ+A&L=3<<$&1:8#D:M`!CJISG&\-$M3Q?3OI`"WP+N"&]-`!M[]XN
-M!"K$"7]KD(Z1C?KGW+%JX5KS,*>J&1L12Y%$\RWP:6&'YV7;*96UQGK7QDI/
-M,O9)B')+_H$F6D`)XS>#&^B0+WRC^[=<8['7/)MC7NM5HQ=0;4!(S&(;YRK$
-M54H]==O5?XKUG49+[FS12M'3X]7.<_F;[-D>YO1ZCQ:')@'RTI%[9_F+2%J4
-M`:?H_:FLF]&(MO.GFGM5<I,`ERL$!U%D6J)6@G])/6J=B`K6>3PA6E.=<S:2
-M6\W;Z-KA4A*W1H-/`0`<`0``'`$```(```!%``$85-L``$`1``#`J`$!P*@!
-M`@'T`?0!!`?I9=+>Z5P$3!?4'TT[PZ%J)2X@)`@````%````_"$``.`CD,/)
-MW`R-2XB??HNBQ-FSD+<45E,P)AS-)EQF`/A,'G:&"R68.V[W^4=8PSN%BU<9
-M-:#6U"\[G(=)91GD^H-]1>B)0M0#=Y8#!!OIXVHW7C#B&:(*Z76\+0.\;<NN
-M!D>4V-3U^[O%$+5H*X\7`^+5"!$"GM-3+@"%HO^(KS)CB%Y))<>EFB6>C%=&
-MVC#GBS#/"ZK-]]@"-:X9!;)*,@26A*'#=&UUFJ6`7,;G'6^YEM<#8FI,@#P+
-ML`QX2^G>SXRQWN)92/_NZ\;4M^V!W\OF4_J55[]2#+WEH]^H4A*W1H9?`0#L
-M````[`````(```!%``#H5-P``$`1``#`J`$!P*@!`@'T`?0`U`:Y9=+>Z5P$
-M3!?4'TT[PZ%J)2X@)"`````$````S"$``+!`KJX,)=$(3O"VT#@*@M<=DR;1
-MSF6<9L8^/K\T^0U2"+]U(@5[!>0HN^'M5.J3C![@>C9I$A6_0V.DA/3(L^B&
-M`UHFQ0&,%]MV)3?E4T:6=E38NIXRR(=#A[)2+HJJ;&FVDTQ>B6;R@\WW+BC5
-M)H=:=WMA:.ZH9)_?%MP*1R"W_;5>]52?AH0`+]0>`Z.);/&!"LF[02_Q<V53
-M,D-\H5:BYV.]B+^D!B1W-M774A*W1KR!`0#L````[`````(```!%``#H5-T`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:Y9=+>Z5P$3!?4'TT[PZ%J)2X@)"`````%
-M````S"$``+#4HDUJW/'Y6(I)=`6\[_ZRX!/U&Z&KB)$"F5DP6;`[)DP<\V6E
-M;Q7Z+6%JPAL43\#[$H5VDN3FS+8I6NQIO%/)[K/!+F`-'Y&0&R=VC@KV;_X9
-MN;FB!M4ZIB5^2Y6RGL(LE(%6-V/3D^O:^:JI[ZY@]WRLW?1;7XR1Z/T=R^T.
-MC"H4O=9V+`&;8H:5%LSF`QDZ3ZG)0<B>><YQ1S/!@%P("-X<5S<KPA3X,CI3
-M4A*W1BJ>`0`\`0``/`$```(```!%``$X5-X``$`1``#`J`$!P*@!`@'T`?0!
-M)`<)9=+>Z5P$3!?4'TT[PZ%J)2X@)`@````&```!'"$``0`^OU20SEM7?'5C
-MG%\YO?T%Y!S3G[EFX>=,":-@"V#+5.)<8R(?R<[)Y<2;4^YUE^?RM)09'^UD
-M_W5>2#@@S]08)/Z,%%9+1'(0L,8/*"GV^P,RH()-D$ICKRSN%C;>]%.Q+=3Y
-M>!IR5615[7CR_BF&L2^-`D)1/.K#+BXJ$.JN$!Y=@_2BJVGOG'XR6?DCYLTW
-MP0+)/&8R^M3'/,*JW[IL(NB*YH9T(0)^V5AMR[QU[KJ*X&@KG*2DB#D?!-%%
-M.!2I4.:'?`+W"`H-`OJE['YX/&`C/<D[2YOTU6M8H**;9^BG;_TP"*2$F]+L
-M.`%G#;=X]/8&\X$R2M[X[^!2$K=&5JH!`!P!```<`0```@```$4``1A4WP``
-M0!$``,"H`0'`J`$"`?0!]`$$!^EETM[I7`1,%]0?33O#H6HE+B`D"`````<`
-M``#\(0``X`9'?><#R5T[><*Y^PD-PD)9^'6,]+8"+<G;/;$N%9]OC14>CKQY
-M`Z98!UO[/._G9:91A>"R5IX>]+"I4ZK@1UZY[%)TK![(N@MWT'O[81Y,-9*E
-M5]8"/F,;(AB3.\`*\,G:LM8ZN?\AUDA+I/G[T6>[XQQQ1C[O[-DH5D*W^F=3
-MO'S>:#I76=8H`%.P9>1!^<4;TT$SD(5X)*/B^.658FU0-B#ADVWIHA*[4K'B
-M#NF0=XS@=!C1:#[N201`-_9;B2"RY.FI9DT*8NKC)($2(/;&L;)]I*^;GF?A
-MVE]2$K=&6;L!`.P```#L`````@```$4``.A4X```0!$``,"H`0'`J`$"`?0!
-M]`#4!KEETM[I7`1,%]0?33O#H6HE+B`D(`````8```#,(0``L+\4Q6,N4W%<
-M'B^%KGAF:D9PUK!)ZQMV>180Y'I,;@E5U@(Y^P^7D=R^I7@#%Y>CF?KM\_%J
-M`CW[37N_YY4"[8G/,(5FY1;1WL5H#[WW&!DEJ>&;8"ZEH+J`@,JR"")3B.:(
-M#?*+*?$08Z/>R;;6'.5]N<IH&MUM:)_@<EA^V!:J\7<5HMW'1-11P'R52NA=
-M4%`9@.::@E)2XML\7:OJ!/'Q0UY0W?EU4CGN;)M2$K=&X]X!`.P```#L````
-M`@```$4``.A4X@``0!$``,"H`0'`J`$"`?0!]`#4!KEETM[I7`1,%]0?33O#
-MH6HE+B`D(`````<```#,(0``L,6Q\%-!XG4%P*6E-I3W#GZADZ0^I5D<W^^[
-MEXB50DN<?R[(;;Y\HFJ-"<34-QTL5/*Q!6F?I$RZRPSD@O+^PL?/I<<H"0%M
-M5MI+F?`V!Z2N#0%2$S$X<G/@!9(K&UD;EQW&$UPJT?/R71S3K(+>4Z5K[<`]
-M&\KMQ2<1'1EQP*>Q62>JA'VV!?O9E_3M;CFI1*-*BB^J_C=O`S-,\E4M1@*]
-M%65OW?GQHD@$LJU2$K=&&@4"`(P!``",`0```@```$4``8A4XP``0!$``,"H
-M`0'`J`$"`?0!]`%T!UEETM[I7`1,%]0?33O#H6HE+B`D"`````@```%L(0`!
-M4.FZ1!^?;_;5\I#M6*ZN:\L,A!W[RT+G`P_3P32:C$@U^E+3,C\*FZ)Z\/RF
-M:ZAE!\^BUYZ93DO;FV9?\M>XFEZ*AV?09SOG<9VO\0R[J]+?:+%UDFM0MXOY
-M;D^AJ$?C98-8;D;F4GG:M=T*''UY,`I<<,1C_,D@T)=2M1K#J]#Z`D;N^YL2
-M,IC4`XT(8*)X*L8,TO,AJJG,AB2X7*U"Z;5?6N#CG%.;14&1B)&'/KLV6TC&
-MO;(D+U6<E/#OU"DW"\9E=5,R.KG,2U(`M9%4^IQGP>4J[&$&[!?-2.*B)[[1
-MU[QQ'ADHE7VW/N6@/7XX<E#@\,RJ\TS#,H2DF"*D:H,>F]J!_J7AU1$ILX.R
-M\#OGJ'=T;N]H>[D`DC*&JV2+AE\O8WA(8<1)/3.HV_Z(&4E*/H1((RCQ.-]V
-MQX&L2KIUW$6V7U=MWLEQ6LY-4A*W1H\Z`@!<`0``7`$```(```!%``%85.0`
-M`$`1``#`J`$!P*@!`@'T`?0!1`<I9=+>Z5P$3!?4'TT[PZ%J)2X@)"`````(
-M```!/"$``2!5X0\<HM475JT\/+4F764?W`[]*W26].-?NZ&X9'L1O3B88U-9
-M/%Z.(L!)[K0G<JYY8&J#/ODM:?)S,%)6#8E@IM&HR8&-"S2P[JM:DE/=87RA
-M@VA(IB]4*H'EXUWFR@<[@(93Z`_L+#?.]LZ"9&8OD\@L,?SJ]_JBDJ/9"(H<
-MGM7<:>HGSQXBS#+Z\:=`N;V(4GUC_1(#4TDU)$(OYE>-;"O)L`F#<99;-SA?
-M\[.M^^*5"CAMH[E=,<SG=Y"?_Z>7'6%]'UFW:%$'I3P@2?+8AL'0EDN1Z_3N
-M]!Y80A/]Q8N@-"HDSG029WY<QB:T%+1T+B=1M/D&A<+%V*@W\.;B@3!E1L/5
-MF%A&30?/_;XL*OF:'JZV9?BICG=77U(2MT:J8@(`?````'P````"````10``
-M>%3G``!`$0``P*@!`<"H`0(!]`'T`&0&2:;149(-,<SB.G>9?X]5@HLN("4(
-M`````````%PJ``!`0CV!-UA':8YQLY4,:_(Y@_,DO0P(A]TV;YOW^<_*+IOW
-MO92%V[*0I"#3F@P#1@L9LVGB*?_]+V?TA6>"4A*W1FUN`@!L````;`````(`
-M``!%``!H5.@``$`1``#`J`$!P*@!`@'T`?0`5`8YIM%1D@TQS.(Z=YE_CU6"
-MBRX@)2``````````3````#`CHYV7%;CX71.M&5ISR7`I@UUM@$+V-(E0]"4"
-M="R,L=GK]6J98M&'OD,R$U(2MT84?0(`;````&P````"````10``:%3I``!`
-M$0``P*@!`<"H`0(!]`'T`%0&.:;149(-,<SB.G>9?X]5@HLN("4(`````0``
-M`$PJ```P!:"FO9(6]OK=F#8JDS.O[OSW/:4.5^Y\L>J2'80)IG-)`9F2#.[[
-M'SC_7P]2$K=&(XL"`&P```!L`````@```$4``&A4Z@``0!$``,"H`0'`J`$"
-M`?0!]`!4!CFFT5&2#3',XCIWF7^/58*++B`E(`````$```!,````,),5=Y*-
-M.P^RD#4FW$`'92N&&R$3_&.&;O5837.'_?1/;2)@RAWGA-D;!J^Q4A*W1EV%
-M`P"8`0``F`$```(```!%``&45.P``$`1``#`J`$!P*@!`@'T`?0!@`=ED<%A
-MK+F*0XL``````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``_2:JZF3ZZ^WS@2"T[Y%^Y(66RA`CX!L4>L1S
-M'#H;89">!1!N:J$HF]0<'XYBW`$N=N?*-GV<=I"BO`4K+,/>?"X?`IA;@-0]
-M""#?CMPX6^6A)NU4+>\-"^T%[.FA5U[L((SZQ144L:5Z$N;#Z7^1AZAO3PO;
-MWZT/KW-G381H'T`I```DR6T]V[WP"54WK8\593@^3UZ\]7MI3/-4B:(R.+SP
-MG'\I```<``!`!+5\H6UG958.(N62JBFAPPO;V%*:````'```0`4'&XV>R6RR
-MQOF46PL0<Z.ED3`<DE(2MT8+E`,`7````%P````"````10``6%3M``!`$0``
-MP*@!`<"H`0(!]`'T`$0&*9'!8:RYBD.+```````````I("(@`````````#P`
-M```@``!`!@````'A?%X;2J9OZ6YF%;;J')S-Q&<3\E(2MT;8HP,`N`$``+@!
-M```"````10`!M%3N``!`$0``P*@!`<"H`0(!]`'T`:`'A9'!8:RYBD.+````
-M```````I("((`````````9@A```@``!`!@````'A?%X;2J9OZ6YF%;;J')S-
-MQ&<3\B(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``_2:J
-MZF3ZZ^WS@2"T[Y%^Y(66RA`CX!L4>L1S'#H;89">!1!N:J$HF]0<'XYBW`$N
-M=N?*-GV<=I"BO`4K+,/>?"X?`IA;@-0]""#?CMPX6^6A)NU4+>\-"^T%[.FA
-M5U[L((SZQ144L:5Z$N;#Z7^1AZAO3PO;WZT/KW-G381H'T`I```DR6T]V[WP
-M"54WK8\593@^3UZ\]7MI3/-4B:(R.+SPG'\I```<``!`!+5\H6UG958.(N62
-MJBFAPPO;V%*:````'```0`4'&XV>R6RRQOF46PL0<Z.ED3`<DE(2MT;6RP,`
-M4`$``%`!```"````10`!3%3O``!`$0``P*@!`<"H`0(!]`'T`3@''9'!8:RY
-MBD.+95]24XL0A%<A("(@`````````3`B```P````+`$!``0#```,`0``#(`.
-M`(`#```(`@```@,```@#```"````"`0```(H``"(``(``*L%Y&&?C`)-BHHH
-M:VEX)8O9(B\U3_AGCY""G8OSTDR?F@6^[,N#Q]\25/TZNF^>*YQ5"MF^T,::
-M51'\O:>HO29%/66R1LHG'Z%_%.KULA[MOKH`'F?"1&:PHSW+<,X<FL*R-UEQ
-M>;%?5+>8D->'O,6OJMRKTVU*U*1>L@!F\0EH*0``)%,P`HP4L1M5Z8H8/:'?
-MP)@V/IDS)<(JZ#:LS#3RQ4<X*0``'```0`1](BPW&6O#G=/)@L[ITI("HYK)
-M<````!P``$`%KP)SO'U9_]5*0.+;*K52!YI08'Y2$K=&5_D#``P!```,`0``
-M`@```$4``0A4\```0!$``,"H`0'`J`$"`?0!]`#T!]F1P6&LN8I#BV5?4E.+
-M$(17+B`C"`````$```#L(P``T.<V[Q>"1@(FF^]_H$I>85(N6/QO<D>U9ON`
-M]&H!X0R^X[VW6O)9$,_`4H<8J6K=I\`18K_(=R>Z"Z&I)2!YNRBX$Y]2R0@&
-MP,O(/JK>TP]Z'<O_!*)/[U>_NQB9X>LX:1>3F7P6[,%)NYS2R9T#GM?/G,!,
-MY`1*/=#Z7QP`2;WKEN(`NQ;43<IX;G^I:*8'WWYQP$MBW.T1.6+H<;(G%"W^
-M[_C$AWWFBFG8K+(^-6NP]D@"9KW;#KP+JZ!1[1P#UD\O`W/V#^Q&,_#V;5(2
-MMT:'$@0`O````+P````"````10``N%3Q``!`$0``P*@!`<"H`0(!]`'T`*0&
-MB9'!8:RYBD.+95]24XL0A%<N(",@`````0```)PD``"`VA=\$K]>HL"?ZMJ8
-M$XE.+`'><GONM+F1BGP%H1F)T?N:YTS%[^4H67)VZNVP<S!C5E7WZD"'EXDP
-M6:Y.`SYK*/EZE.E7,OMKN`P'8X<&5R.<S[?LZU:FV-U\IP4G*ZI=W!'-H1YD
-M^U4^%*E(TJ,8DM(1U=@IA^QA9`\2FU(2MT:=,00`'`$``!P!```"````10`!
-M&%3R``!`$0``P*@!`<"H`0(!]`'T`00'Z9'!8:RYBD.+95]24XL0A%<N("0(
-M`````@```/PA``#@%)43[YT.*>11$WOK4U'L7@C-?!RD4,7BK>%G8R>]%\6Q
-M+I4R8K#O*<S$2/AOHEAT4T%.4I$^-JLO>@>'RP4E?Q,R`9E](]<5]Z0)LPM7
-MY\:CIRE7=:*@B=X!2^(5_"GUDINC93>C`;E,"7>G_CZ0BO_VIC1`(+_?+VK-
-M7HC08[VAIED4M/GCPC87D#J1]&;PISU=SN,>F1E`#SE9Z3)=45P*!]^,@YL^
-M(+\"/L0]9*@8$0'+M2._1>`%P23ZD``EI,=;&W)DG!`N\H][RX5'+K`LJY6M
-M:TBH*FI[(%(2MT:6/`0`_````/P````"````10``^%3S``!`$0``P*@!`<"H
-M`0(!]`'T`.0&R9'!8:RYBD.+95]24XL0A%<N("0(`````P```-PA``#`CMY(
-M.7[O:>;O(@F;:QU%7#8M7Y32E:=%TN!-558AWZQ./;X1`;\-BK.=GPQ*[,9,
-MBV_W.+D28F9:BH@7L-AE)+A2?B#OWZQZ3RB\EV]@XF>VR/D+4!51,H:"LEAK
-MB+>?=YJ?G\AF[[M@?^$S;<(0CR7%/MLMM442`?KK](%6N)P)+P9'UYS;ES&<
-MQ-!_W`K+(U1UF:"O1>062><,03``R)$J0VFUR4%-;5@["`=08CW\'+2$0\RQ
-M_T%BWZE2$K=&)$@$`&P```!L`````@```$4``&A4]```0!$``,"H`0'`J`$"
-M`?0!]`!4!CF1P6&LN8I#BV5?4E.+$(17+B`D(`````(```!,*0``,$=QGJ#B
-M8\^$\UNBHPN82KO"\9P`7,4]W^*(3^M8<&&#6:4-.OM+G#5HC<^F4A*W1H5C
-M!`!L````;`````(```!%``!H5/4``$`1``#`J`$!P*@!`@'T`?0`5`8YD<%A
-MK+F*0XME7U)3BQ"$5RX@)"`````#````3"D``#"_#H3L*Q+Z,8Z1D-MD_^.2
-M'OT/RS:R=&^->[$$NS#/BA=^UH8Z7@/YR%^KEU(2MT;=?00`/`$``#P!```"
-M````10`!.%3V``!`$0``P*@!`<"H`0(!]`'T`20'"9'!8:RYBD.+95]24XL0
-MA%<N("0(````!````1PA``$`HJI6\AB9.?\ZXUF=`V."RF/+^OQK4/]`26IU
-M#49D,'(,QZ\@0X*A7:8W5(_*CJ3<]Z5_]J-W15PU[DA]4^QESFC]$FK-LD0\
-M$O^ET]]MPZ??E7+?DW&1.DQ64*J!O\GX]AP_5KM1/-I#3YD"!-N]YY=]GVVE
-M""(!58/6;[AE2I4NRX1DF/PL9<+;?5M)_F(5_/FGV!X,=!="8[A@R>"<FEA3
-MYVN>Z(S]UUCX5\2O<.[5J4TE.LJ1I<4"R0T'?!_$BB@!+^=_<!*HUN0=QKPE
-M8$/7Q6X!.AYHM]*,T[$!];JUYA]:<"Z/7![Y\JO1J9&=3@'U0LYA(N"=J/P$
-M4A*W1L"(!``<`0``'`$```(```!%``$85/<``$`1``#`J`$!P*@!`@'T`?0!
-M!`?ID<%AK+F*0XME7U)3BQ"$5RX@)`@````%````_"$``."C7EFY;*``M8^#
-M8S04@)M+[6$-RO@E:2P4[DXG`H<1VYN./6%6#8,XZYGN"<HNON.W*I^,#Q*=
-MKOS-UX7V13)Q@OM)YX']DA,TM<+N6^C-/",FR#)[J"JTKA$VLR%F:-=3.^@U
-M5#'NS3T;HF:*12Y1_5.^PGA]&4)7YMJ?/'PLHY/]`0%DL>9&CCML];7(V4GV
-MNTY/$Y&C?]R\Z75".,!<$Q9%EM\K[!&KDP:37P=1X7#/2>FNO2N*`;[6O6S@
-M];'''U@F,A\HP$QG]76B&&C&0S[F,]U9IW<CZDM64A*W1FB8!`#L````[```
-M``(```!%``#H5/@``$`1``#`J`$!P*@!`@'T`?0`U`:YD<%AK+F*0XME7U)3
-MBQ"$5RX@)"`````$````S"$``+!%BMPTZ$514*6?A%U)73-5>\GZ&>?I'IUB
-MOQ8NYQCB4$>Q=U/Q_J:,X>`H<2B+M09LF'?]4ZQFIP=LV05%VDE=J3-ZW?9F
-M7N-CNY^!9Q!@7>);/(6!L==-&SP\\=,6;/VYI`.D8E7\</RC'\L?^O7GZ``A
-M48=E\/=`/(Y[EKOCM>#-&&YC^+J7=!LF9H6G^:(7GJQW8+7V#3X`!.]93A#5
-M/OIJY6>'W`4H!"XY4A*W1I*Z!`#L````[`````(```!%``#H5/D``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:YD<%AK+F*0XME7U)3BQ"$5RX@)"`````%````S"$`
-M`+`4QZC5C/<ER5,YI[O*]![HU7PR"2_E`4X^=29>?N/>?,<(C6KYI<H^>JA+
-M.9G!AK"UA3\PDSMPY!<."JMLUW\5/[#5<CL-7;MYK%5;K3D::BJ1.&2_!946
-M-,<FW05YUC:?O6_RUZ!*-XR8E^31&8V<,GY,HC/]])NT3FT2I3=SU:WR#(RF
-MWAD=^3Z&MQ7J.=D%L9I[98,YM>;QZ*_*<<5=?I@!OJRF"$K^6X?94A*W1LG7
-M!``\`0``/`$```(```!%``$X5/H``$`1``#`J`$!P*@!`@'T`?0!)`<)D<%A
-MK+F*0XME7U)3BQ"$5RX@)`@````&```!'"$``0",J7=QZ8(D*U9(92H2.5."
-M74QPR491H4Q+DP!21UE%83PJ,=`VI2NE_Q%7B\0@U37]1$'K+@EL$!8[XM5P
-MB#V%/`)(O!::KSU>:.(F6C&W<VG=V2=UNF@#6%T/BISS,;*XD3"2TY&K6I=R
-M":?H#;KX%Z@XH/Z9H$BUXQ)^-QF+KR0K'=4YEQI@[L.42?HX0@S$*0`-XVON
-M?:V+K.U`V+[HZ>(P>7'L0?0U1I&4.!/08HVM@%`4__C'HC@DP2JE!>Q*)KN(
-M\).%ZO\WW2SG^=C8@M0@%;,'%;^$KUQ4P?.AA3ML%[>Y]LT12KU\ZZ/4R9B$
-MKZA*8"M:<BH``Q92$K=&Y.,$`!P!```<`0```@```$4``1A4^P``0!$``,"H
-M`0'`J`$"`?0!]`$$!^F1P6&LN8I#BV5?4E.+$(17+B`D"`````<```#\(0``
-MX(DTEYG'^S+_J?V\]*]&?F;I<&1#"2]J@-1L,%7H$]C*;]E3N*=XA$G&H0$V
-MF6''JNQ`$ER`/[@:OKI;P\*P2D%EK'C-89)"PV634JYMO!);,%;`>CE-3\A@
-M!F1`0!7%2XJNG&XO,5B8;R4_TQ"TK7K*8LF>-:TS+'M(VL]:8^16$]\-P>JC
-M-#I9N^:CC]\:`S*S0M.@6ZU?SK2.V(T4LB<DL^/D`T$P@$=`BH\YAZ/1[M7$
-M,0CZXC/H[_6"CQJFGQ42)IZIR$\2U^LB$G99#.?HX8T2]KZ6;MO\<\92$K=&
-M%O,$`.P```#L`````@```$4``.A4_```0!$``,"H`0'`J`$"`?0!]`#4!KF1
-MP6&LN8I#BV5?4E.+$(17+B`D(`````8```#,(0``L#?-X?2&0;()>G4\AES_
-M34JM_)$.&2EL]'O',T.\FZ,JB0+*^U_8ST'/]TD+++W%^<3)@I<@SWYXWTTP
-ML$Z'GWN7D<=OO%*;*"%UDSN-.@#9^$/%=MGGV6BS$D**^1"*@27&7'C&:]YP
-M'2ANW9*4'.M3B642IO^(F!AT^2-'-I-`9@5K-7E5'3[!?^*.TIT:6#0*_DBF
-M"2W/EW:&0">5Y#N7+;@E@&S6L2PBMLE2$K=&'A8%`.P```#L`````@```$4`
-M`.A4_0``0!$``,"H`0'`J`$"`?0!]`#4!KF1P6&LN8I#BV5?4E.+$(17+B`D
-M(`````<```#,(0``L#;][YZ623I1$/&V%O(H]FVS-$N^/U6^/=LJ.?O]S@X/
-M:5/N3>:`4>U6&*%VZ5IUG?VN)3<;BV92_L^"AW>O%)T3MB>$K4KV+2&ID')8
-M3L36E[/Z(&YD3$_#'F\'8]E#+OW2$LHXGFMA>M]]+12!?PE2CW<>+YK@0,(@
-M>05,#FG\2;\U2J8X<'0O57F,U\'LLR<OFFO:TD'$RW.@G82`Q581LYO^J<X8
-M`S>Y=/12$K=&%SP%`(P!``",`0```@```$4``8A4_@``0!$``,"H`0'`J`$"
-M`?0!]`%T!UF1P6&LN8I#BV5?4E.+$(17+B`D"`````@```%L(0`!4'P=(<=M
-M&HT#CZH<D2"]D[+73\8AF$L_^0@UAY[E`T,KCX2%;$9F@%N%JJ>.0<-:C!=?
-MVE,XN`:7@")4M'G0U:UQ#,6#;.BXZK0[`)4:1<0@JJ/6@+G8F0<K:)T'F9+$
-M*@W)]C`$$^,7C%_:-2X3#J$C%'V]_N.\!^^`:ZB91?YMO&1*=%=!;KO(Y'DD
-M#S.>O\+-`>>8`HPOPH.*A[N()-[GT(^>FWE8DJTP()%$`979;GGR.71(>Z69
-MRJP&J(K/6-FIH#!=_:R;_^A>]*_5X;'!)-],:HU_)?A!==O9?C&?D2_HA(O,
-MU'19SS-OI[8+OV$I"]OKQJ629LA3D##G([6<R'H<B8M^,V1K-ZCO`640<?X&
-MC7Q=(1X;/!WA"WXCM*'&+,SBO7S(DKKG6E%F;FP_^'Q>NG)$R*L^US="DG7<
-M6=*7[>5(?P_[8GWK4A*W1D!P!0!<`0``7`$```(```!%``%85/\``$`1``#`
-MJ`$!P*@!`@'T`?0!1`<ID<%AK+F*0XME7U)3BQ"$5RX@)"`````(```!/"$`
-M`2!%X.X"LJ%%PFCD_!*EPMZ5$-]W(IDD'/R-PDDR<\A"&C&J3T6(@N$PY3>L
-MSVD6Q#GI"<AO'X%GOTH3.$3>[+H`K/.22IXIM=@W9]U27$9PK"S%W>W:6Z'3
-MQ0],OH@-BP9)L[0=*4ULZB"^/N&NJ7=R?^2G]NCE#MH6$[7H$-UT5M.EVRR*
-M;&S*CLDZ-,AGCSRC*H%\U?I?/J8RP,(I]*#*A*\+>"_JBX+$GDQRJL6B3N5'
-MGM9V"NBX)&IIV/;##AID_;QRB&-%5#F=/TZ/!475BT_2<BP!)D<#,$\.\4@>
-MQK=8,PG[\462T^:(9"F^C6C3]H%35U]^*($,"G@'?-C?-YE3*9)JB14VCQ>E
-MPDR8&@GB>:#1F**$[2X$M5(2MT;>EP4`?````'P````"````10``>%4```!`
-M$0``P*@!`<"H`0(!]`'T`&0&26=N$)U(-KG1#->*2GY75WTN("4(````````
-M`%PJ``!`C:V$AE&H(F(JSI0ACF`.C^`#+8X<B]+M$+T8O^PRDNM>A+LF4JX^
-M4Z91WV^F;(NO1E%8`Y?E>@&ND%4C4A*W1E*C!0!L````;`````(```!%``!H
-M50$``$`1``#`J`$!P*@!`@'T`?0`5`8Y9VX0G4@VN=$,UXI*?E=7?2X@)2``
-M````````3````#`(^9PH%Z77#>RM4]65V#"R3<GDRO;PDC4,?$S3.`\1FI1V
-M3*/GWLI^WPR&@5(2MT;GL04`;````&P````"````10``:%4"``!`$0``P*@!
-M`<"H`0(!]`'T`%0&.6=N$)U(-KG1#->*2GY75WTN("4(`````0```$PJ```P
-M+WH7F]-<),0YN0HB";8_/^LGI<IZ,]Z+,!A^BO+UMW*!69IL`DY%]#07,(52
-M$K=&6+\%`&P```!L`````@```$4``&A5`P``0!$``,"H`0'`J`$"`?0!]`!4
-M!CEG;A"=2#:YT0S7BDI^5U=]+B`E(`````$```!,````,-L?M"CQ;R6*Y+W"
-M[7-P!:;.>EOG^J8+8&-,J8Y3JZQZ;A-<CM7NBI=*G\O74A*W1J"]!@"8`0``
-MF`$```(```!%``&4508``$`1``#`J`$!P*@!`@'T`?0!@`=E%!X>M:PA!]8`
-M`````````"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``F?5$9Z>)`@K1]%W#*DX?X0<?-51Z]M;/-35BC5L>@31L
-M,.9J#/#B-U;$IE,1G@^LU.SZ1H*6@?8-D/YM#]?G>G]6#F*UQ#=0G\*E;@!.
-MX;2[[YT/$O#!?-<A<OJ?S95MTK-I1"*M*;`HEPU=J;3Q8KN>3X'27_3-U%Q3
-MLT2-S/(I```DR?X]<I,!=MXLC,-.,%46KB;DD<(FQ#GD88\NG%IX_/8I```<
-M``!`!'.Y(V$@+V#Q">Y9P;`?*!$W]+*P````'```0`6^5(W<;^"VH8YO\JU9
-MKA,%-6NEA%(2MT8'S@8`7````%P````"````10``6%4(``!`$0``P*@!`<"H
-M`0(!]`'T`$0&*10>'K6L(0?6```````````I("(@`````````#P````@``!`
-M!@````%]L>YG2ZS9C55OFU]"Z83,5,1`"U(2MT9<W@8`N`$``+@!```"````
-M10`!M%4)``!`$0``P*@!`<"H`0(!]`'T`:`'A10>'K6L(0?6```````````I
-M("((`````````9@A```@``!`!@````%]L>YG2ZS9C55OFU]"Z83,5,1`"R(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``F?5$9Z>)`@K1
-M]%W#*DX?X0<?-51Z]M;/-35BC5L>@31L,.9J#/#B-U;$IE,1G@^LU.SZ1H*6
-M@?8-D/YM#]?G>G]6#F*UQ#=0G\*E;@!.X;2[[YT/$O#!?-<A<OJ?S95MTK-I
-M1"*M*;`HEPU=J;3Q8KN>3X'27_3-U%Q3LT2-S/(I```DR?X]<I,!=MXLC,-.
-M,%46KB;DD<(FQ#GD88\NG%IX_/8I```<``!`!'.Y(V$@+V#Q">Y9P;`?*!$W
-M]+*P````'```0`6^5(W<;^"VH8YO\JU9KA,%-6NEA%(2MT9P`@<`4`$``%`!
-M```"````10`!3%4*``!`$0``P*@!`<"H`0(!]`'T`3@''10>'K6L(0?6:49S
-M<7^2OC`A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(
-M`@```@,```@#```"````"`0```(H``"(``(``-<OD+VG$.Q9]738C#W\G]-Y
-M.F`**_YP`E^%C9M=R;^NP*#<=K:BX4=F-667OTUU4UE=)HV[F?N&FJI*Z:W9
-M8U)^&>B85T)WHDW$._]ZA-R="Z)Q5R).QS0\3C]H@7J&IG9NCWCJRD[(M,HE
-MY_*HOW38BUG=<EY>9.EN)7YXTV!_*0``)'RN5ZV#X>+/-.3(91:]VE=:4SB(
-MO//S,6]TRI$()VTC*0``'```0`3K0WDL54@EGB\_VC842/(YD6;,J````!P`
-M`$`%W\<[',DB`_-*I*G?*"!+$Z"QW@12$K=&5C$'``P!```,`0```@```$4`
-M`0A5"P``0!$``,"H`0'`J`$"`?0!]`#T!]D4'AZUK"$'UFE&<W%_DKXP+B`C
-M"`````$```#L(P``T*LJ.J=)SC8KHPQY2+X(:6_Q[RGGT7&]4OJPWB[0!]BU
-M?\],(6"K'N#A5:35%A7=DU78A6+HV)_OK)15KLIG":CHX5/;3K/)\>5P313`
-MZ4RY9S)7S]^JR.;R9&&>S/I/O^TS+W#E'!?=2PF5CL79^_N.5C`*=FVX\-$=
-MWJ2CR)"ZW!UX+3+[/GF?;TZB9X\'HP("XV8/P02A#*3C[!@JN`82O\3>,B2>
-MS,G$E.@$);&ZX$RA[N]FMZZD[J]:FQLD4"+E=>N,GU_?>\`LA5(2MT8A2@<`
-MO````+P````"````10``N%4,``!`$0``P*@!`<"H`0(!]`'T`*0&B10>'K6L
-M(0?6:49S<7^2OC`N(",@`````0```)PD``"`YM?'G3UR9$,%BKT-1?E[0`.(
-MPO=<G(^!FNYB1EFLL42AG29'YOZEV^=8,^,(OAZU,]>G4@*(L-ERF<W!#9.*
-MM)")H$7`?*Z;-)/9JK+'8])C%TZ-@VEN44_3@*.<>_H>H982Y7WE@[RQH=E"
-M_F_>TR"]<]'__+-1W[O7\U(2MT;9:`<`'`$``!P!```"````10`!&%4-``!`
-M$0``P*@!`<"H`0(!]`'T`00'Z10>'K6L(0?6:49S<7^2OC`N("0(`````@``
-M`/PA``#@7AH2>4PQY%`41B%5V=!,N!9\,01_!8#^Z2RD>LX<"?FZ@1LU'3.P
-M"WP_K40S9OR^^](M="BJ84JPF>2>]W^NUBG".10_8^%]$YP\A&4L`=$47X!*
-MPNG&#*R@!TK[3<!Y=/Q)#0RFV&Q@:Y]HM*>O5.()/X'IL!_;M73N)/24JM%8
-MTPO)KO:I%S>_(HH:K:_H-69]E*8OTF?5.T+6EOI'>K%QC<X!+LK]"%^^9$]`
-M6I^T'+.\@\4;W&5:,_.DR4S#/M>+SM;+?.]UU:_"NU&'-252IM=2EP2L6@J(
-M0E(2MT9==`<`_````/P````"````10``^%4.``!`$0``P*@!`<"H`0(!]`'T
-M`.0&R10>'K6L(0?6:49S<7^2OC`N("0(`````P```-PA``#`IOI=Q#9()Z`2
-ME*EKX.=_MF(H3+'A_R.2SMY%A8FO8#&=R<V,K\982PD.JN]_.Z5$E09%9B>?
-M_"\;0J+C0AI\I=GW=FFLR#.D.0;AGZ8`L7S'2`J"=$Y!NL"A:SVIGUMF)LV5
-M,5K#`7-V(LDLM0,L",3C*Q<GNF8A;6<A4!:V2D#$L+%O=P>Q!:JM.SCYI=X\
-M_L`+TG$5U^94I6/9LA%%LT=C:C@XGHUB8R_@`^J3,JY_6$L]2B:)N`:JY$!2
-M$K=&#G\'`&P```!L`````@```$4``&A5#P``0!$``,"H`0'`J`$"`?0!]`!4
-M!CD4'AZUK"$'UFE&<W%_DKXP+B`D(`````(```!,*0``,+D[\!"7HHKXR7XF
-M16+3FU?(#EL4.S,I&==>*KY#BTU\1RJTV3"#I;X4]R2>4A*W1N2:!P!L````
-M;`````(```!%``!H51```$`1``#`J`$!P*@!`@'T`?0`5`8Y%!X>M:PA!]9I
-M1G-Q?Y*^,"X@)"`````#````3"D``#"B&:[Y3VD#-DA'4V$A!HXYAO&R@`@L
-MVD(K"Z;]5D0A!R<K4`O32F^YO(R:,E(2MT9IM@<`/`$``#P!```"````10`!
-M.%41``!`$0``P*@!`<"H`0(!]`'T`20'"10>'K6L(0?6:49S<7^2OC`N("0(
-M````!````1PA``$`ZBTB;2;W-UMR<87&^CZ#??H$_3KWCGUH28VARS,HU;NW
-MC8'&VI=**=1%>%$;UQ#!7T@YM(H$$&"3S:1Y5&6K<:KBD92QC:O$CT"@(N.3
-M]1A87X-\5[Y'8)%*J><-Q@F%'AS;H&P8M!AC6O!8`Q<RQ&EV4@F^\RNH@F>S
-M[DC[_KI"N1NI=CTQ`T^+)!'7Z%^HV5U/V3M"@`2R3+AWR``TT903US]2%+OZ
-M95O1@'%'M(MM="D32<INL:#CWE'PX<6T;$Z8T%F7T,\Q;G!T.""$/_?EMO#U
-MS;_.HO%SYL2^#T4>C4D(",3/&\1F0]2^U.D*7Z%>3$)XFKS$`_\#4A*W1DC"
-M!P`<`0``'`$```(```!%``$851(``$`1``#`J`$!P*@!`@'T`?0!!`?I%!X>
-MM:PA!]9I1G-Q?Y*^,"X@)`@````%````_"$``.#4W:@7?0'&$WT3'#>SU:>E
-ME$GLEDBO=]V)#$H+-ZGH"C<ITMW4SO)I4+\%N%E7[F?+<"](&3G27.CDV$V7
-M5<6N$:'NKE=(8^&&%GXE]@FW\.2^<.\!^>VLWKH^9QW9I\BN?O^")Z055:)Q
-MX0%_J)!"Q_X03I].8.UE#:JG=E:O;6E<+\HM7QL</R'^B8C:5MS1Z8=BJ^0Z
-MV@ST<41=L^Q?601^@B7/*ZNLU;U',M,QMW`FIK$VHQ[YD5G"QPNP:M]XT`PG
-MS=2<DP:-)5]ZU*/<97\2Q%6NA@O"<PQ84A*W1M+1!P#L````[`````(```!%
-M``#H51,``$`1``#`J`$!P*@!`@'T`?0`U`:Y%!X>M:PA!]9I1G-Q?Y*^,"X@
-M)"`````$````S"$``+#^L,8,OK099>L4TQ;![0E\UCFR'N1ST8=8K[,O0KSJ
-M[KM%.+TX@QD81+UD>3UNC_(P@^8<Z"^**1*9R+F*`J*:!1%Z=>HA2D_>D@79
-MF0]P-=-2-[X&D>?N%5KI3]SDB`9*AAH*QRO'51.OQ0,2,AJ_^Y@G?=2)^?=%
-MFHYZJ*6@,'#)?!JF[:\+SH8%P<*MZA?#&/\P,2<WTV.,=!Y`QO4(,CRDS!+;
-M/NEBF*/>4A*W1F[T!P#L````[`````(```!%``#H510``$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y%!X>M:PA!]9I1G-Q?Y*^,"X@)"`````%````S"$``+#<;,A7
-M]"\JU:<-6`'3OJUAT]X'/%`I'Q$=.*KS/9L8<10)5-Y:V'GZM06[D@U8O]^@
-MSW%#Q7I>>3-/[C][EC$VEO_-'^<GMXN;+/69&U@&J"9\#0YAXZU\,RQPJ*>G
-M#2'$/Z!\MA^!"'E_?@;XM,JN<TN)E?;\JH3&FX6KP8DK?>)=VP&SN8K9Y&9"
-M]8/])RID&4%66A_-_)FZ;1>IF-\WS$ANVSJ)4\$#JUA(4A*W1I<1"``\`0``
-M/`$```(```!%``$X514``$`1``#`J`$!P*@!`@'T`?0!)`<)%!X>M:PA!]9I
-M1G-Q?Y*^,"X@)`@````&```!'"$``0"VK;5]_8DPNH9@1)8"?((Q3CFZ-*9I
-MZ-R2PM[?W?F^]CP.JS8&NYT'8YIZH@K;?V3E4?:2*@<#8^AB;O#EO3J:@?YB
-MN`7N^LZ383D#`Y-DG7C9?EP9L[?WFS\08^)GNYC=<65,/M*K,.@\/S)9W\.K
-M(P/]Z4B@0J7=[@V<!LI*Y/Z`U^"NQ%'>*U)U7K`V:(HO25I\/BR8_K?/5^T3
-MO-Q+;IN##O87QAE'%$P.5JPKGU<,?UX9ZJ,(EPZ;[\X_]/A>7=]XFCW?OU#^
-MU8RT$99/"S/S'AG<%5E])N3?-.1X^B05$E@W:1!W-(/SS()S(?&ES1)KMJXF
-M#=.[\8%2$K=&7QT(`!P!```<`0```@```$4``1A5%@``0!$``,"H`0'`J`$"
-M`?0!]`$$!^D4'AZUK"$'UFE&<W%_DKXP+B`D"`````<```#\(0``X/HV.IT'
-M798,>F`\Q2+KS_>9>Q$:RA(\\GO!_VD%HSG^BTC/3P&-93P>0!)RJZ2R?7DS
-MU'R'S)`7X7%#^8%897[%=HJ6'3W(&L]EO8F4""#^63*2)UB]CAB,P9I*_.8@
-MZH-V=*O-K#DXJ$LQ*7H#L8Z)]*+3+.\,QV9=36_(5MC*NKB)-(:\>X]<XI#]
-MYUH^3X;,1"FM+4^I%)A+H*1KS!C[6K*_^XKX'<68-JY?6'"/`X*7F:4@T\+B
-M6Z]B,-#LHA2\Y+_&LE00^99C<,M`N)D@KY(XVJ@Z-[,7`!Q2$K=&URP(`.P`
-M``#L`````@```$4``.A5%P``0!$``,"H`0'`J`$"`?0!]`#4!KD4'AZUK"$'
-MUFE&<W%_DKXP+B`D(`````8```#,(0``L,U5-MA<JJ>,CM`\D&>9X/Q_38:;
-MH]AL]S1CVBHD93(-ZIK/P^#&GG,(G2B;DH-M$\YD_R^O,9^C0+NU$OA\%6ZG
-M"97X3=GP`GLUPR_"29X?%+?$7O#;+O0*83KD;'2#U$#/65:N"01`FX-#B.WB
-MY,<`;W.7.Z%+1:%5BW.>03<#9O)OD[P+L>/)8+RN%RC0]=A(KB%[::+2+Z1Z
-M6LKL,7K7LG@CF#=93PLU\`]2$K=&S4\(`.P```#L`````@```$4``.A5&```
-M0!$``,"H`0'`J`$"`?0!]`#4!KD4'AZUK"$'UFE&<W%_DKXP+B`D(`````<`
-M``#,(0``L*V_Q)SQ@V>VC)I5T>`)%9HZQ>-%S`.8U%F%LF!RNE,XVS0B+6CI
-M2?];-51\?^"J)2[$"GZF^EK$8%2&,<L'=DHE$`F*/Q36$,2BX*]*O]J(37@:
-M9A6*6/`PT7UBS9*EA6/SS2J5@'"XN__PP8E+,)`(/48`,&#79*BAU;]BC0[T
-M31-KX7:24W^:H,)'+9EG"O;X3-'NI!5_'VI)<H(J>1QE!C)1.J)#?YV;&9U2
-M$K=&H7<(`(P!``",`0```@```$4``8A5&P``0!$``,"H`0'`J`$"`?0!]`%T
-M!UD4'AZUK"$'UFE&<W%_DKXP+B`D"`````@```%L(0`!4-W,,T0W>=462R:1
-M4R&__;\-0`[]Y34[]?O(XO8Y$(N$$R?A;:XZ3?0&DRS3)=E,X/_-1XV[J4#J
-M-%C)],P97R9;B@>+H/C,14B>=8;V(DP.I@ZPVH)0-?7@#$OO9@*']1]$-(UR
-M"J=J#]G,YSL+PF8#UCK?S=!H(89=NRZPDGF@$7H0:A:VO-[U)5\"6\U2,V\6
-MK*CYRENK+-EP,QT$N9<0E54[)6*U(VN0)8@OC$*?3S6.Z5N3+TX/HR%CSJ;Z
-MY(,Q&(RU/GK>66C/6['"@H5S.5H4'%R)3E\?DY07U=]"5%7H2$]OOC*/YLVI
-MW7(0J:^66V5OV=WLH\_M6,`?<(.<15G]>R<D6<3UVFKN6$.F?+4$8&*6UYE$
-M5#I(E[.^HY*=QN$'0Z_V)8$2'K2.UP^BI\,@N!*5%PZ[HM0#='HW;7-X7\OI
-M]J>X%Y5'4A*W1B2L"`!<`0``7`$```(```!%``%851P``$`1``#`J`$!P*@!
-M`@'T`?0!1`<I%!X>M:PA!]9I1G-Q?Y*^,"X@)"`````(```!/"$``2"8@+&9
-MUJ0O\CS]I1_;-P[IM[Z_-5@-G<GLE2UGK?P!X()2%LS!]Z0'D0/BWU*(C^+P
-M![U,N+X&['K+;-@A2]N>R'?D:=,W-D"JR1:IW&]2$)D00:B).6=Z^I/B=IP5
-M*\L3\0`F:H-YX"E%JOR#3#&DPC8!FR`/K!RH+&,1>>4IA;D<@/>H9$;<1DN>
-M[V+,XK18S92"%*7^XF-<7[MR62&'M:EUS-8Q`>;.`/_Q;7]HA$(K@`J%RQ8=
-MYJ:81?U@P'.M.1-E`$*ZNWH5LLE');NQ2>*>%QB)6,C@:4[(;?-1G6T0(_U8
-M`5+7'":H/FS@CNM6T<IX(+&78]0.#XV_0XW>Z/<91_\Z!'SH9?T'.U6\,5,>
-M-Z<K'ION&I=/6U(2MT;PT@@`?````'P````"````10``>%4=``!`$0``P*@!
-M`<"H`0(!]`'T`&0&219RO'(VM!&!?^.6AJM-$+@N("4(`````````%PJ``!`
-M\6-$/8:CWHZ#=^6PLKX4_>VA0:-`+UM!>%.P7@OLD]C(#84+%BQ%RY4^8+49
-M,;7G%SU[WV("//YGH#A%4A*W1CK?"`!L````;`````(```!%``!H51\``$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y%G*\<C:T$8%_XY:&JTT0N"X@)2``````````
-M3````##71$4PPBS\Q^43O#RP"I3&Q>@'DL#-,E;HU*L(FM=`BO&S)Y9QV/R(
-ML:=X25(2MT85[@@`;````&P````"````10``:%4@``!`$0``P*@!`<"H`0(!
-M]`'T`%0&.19RO'(VM!&!?^.6AJM-$+@N("4(`````0```$PJ```P=X8SB\>9
-M>1>=N]9=8Q-[9<RMVANI?XI"TPN6\I:)F&`=HC[KAH&5@B";,"I2$K=&>OL(
-M`&P```!L`````@```$4``&A5(0``0!$``,"H`0'`J`$"`?0!]`!4!CD6<KQR
-M-K01@7_CEH:K31"X+B`E(`````$```!,````,+]>_<5&U_VT*04AA>I5ZV!B
-MECS_$=C(3!V]4UUT=R1Y.-TL#(R2H2])@OIW4A*W1DSZ"0"8`0``F`$```(`
-M``!%``&452<``$`1``#`J`$!P*@!`@'T`?0!@`=EE$NB@)'*VP\`````````
-M`"$@(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``HU$]Z>>JU#U0F<343HGB+%&:,%>#_U7Z3F[8\T5P"7)-BYO%_I^&
-M1->:;M@1>D[`UK:/8GY&2D/U5RUD.LS/R)+/"R\NS)*1,<EN;K/K-F'3V3)$
-M5NQQ4GH,>KP-Y^FZ>ZZ0Y2'0XSJP8;URI9*N6ZZ2V2%E+^0X;I0>:Z6LA[DI
-M```DO32/P%G<6Q0*;Q%SXHIAUJ5$#W:8FHI]-=/`'[IT*:@I```<``!`!%QP
-MA<%ZZ#F'1U5OUE;.DG'/&@SP````'```0`7D%RTQ&@Q/%7+?-)M[QY2H;93X
-M"%(2MT9Q"0H`7````%P````"````10``6%4H``!`$0``P*@!`<"H`0(!]`'T
-M`$0&*91+HH"1RML/```````````I("(@`````````#P````@``!`!@````$5
-M<+0@I13=[T&*3WS.^FO1NV[T-%(2MT;J&`H`N`$``+@!```"````10`!M%4I
-M``!`$0``P*@!`<"H`0(!]`'T`:`'A91+HH"1RML/```````````I("((````
-M`````9@A```@``!`!@````$5<+0@I13=[T&*3WS.^FO1NV[T-"(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``HU$]Z>>JU#U0F<343HGB
-M+%&:,%>#_U7Z3F[8\T5P"7)-BYO%_I^&1->:;M@1>D[`UK:/8GY&2D/U5RUD
-M.LS/R)+/"R\NS)*1,<EN;K/K-F'3V3)$5NQQ4GH,>KP-Y^FZ>ZZ0Y2'0XSJP
-M8;URI9*N6ZZ2V2%E+^0X;I0>:Z6LA[DI```DO32/P%G<6Q0*;Q%SXHIAUJ5$
-M#W:8FHI]-=/`'[IT*:@I```<``!`!%QPA<%ZZ#F'1U5OUE;.DG'/&@SP````
-M'```0`7D%RTQ&@Q/%7+?-)M[QY2H;93X"%(2MT:O/0H`4`$``%`!```"````
-M10`!3%4J``!`$0``P*@!`<"H`0(!]`'T`3@''91+HH"1RML/-#"<LK/A#[$A
-M("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,`
-M``@#```"````"`0```(H``"(``(``)<_$(O6G9]5PALL7I>3Z-_7JE#Z^L6<
-M)9_K!N):Q&Y""0@?\.M-&E2FK^IJS&LY9R;44C6$<*#?H1Z'2B.QZZ,M&5R"
-MJGC-LRH#',=2^,]4=&1P)#F/,&=:05XL<3B3IDQT\1RZ#F/^0'+!VQ,`K>QK
-M;4!,^,/]=JR6(S"L-/CU*0``)$A[A\*803%RCH"^L"-AG`Z?$=-TRME_HC^%
-MF-PK!/;$*0``'```0`3DF[D8X890#31S%(5"3CA9F*AHF````!P``$`%#XS"
-MY>9Q2BDDA]^LR=PT#BQ]9MI2$K=&4&P*``P!```,`0```@```$4``0A5+```
-M0!$``,"H`0'`J`$"`?0!]`#T!]F42Z*`D<K;#S0PG+*SX0^Q+B`C"`````$`
-M``#L(P``T/I$;[,6QB0I12S):.*4XE+':)B`.<%%OS%D[%+4-#*;BR/S3`)W
-MCEPP1EDH+FWIZCYQL<-]&&$?>NP1G`VL,E[<V6/2_R1CF^B=5]$N&R<%S@J4
-MW-VZ!,#*H%&&^-.R8%/1"AXE]`NN[-,0C/XSD;.`,6=4`5%I`L&5XN4/VLJT
-M>%_(-9,^K6BH.D)F8,P2-L3!7_'J+R[%X!-!!ZPQY/9/.H]IAL7=)RS9.B]K
-M,8PZ:XW.T36H7'$_G/Z-L2X<2J#PH1&I(QYE/G`0?E(2MT94A0H`O````+P`
-M```"````10``N%4M``!`$0``P*@!`<"H`0(!]`'T`*0&B91+HH"1RML/-#"<
-MLK/A#[$N(",@`````0```)PD``"`X4&=;#1SX0IM;+S[5C<5S8C:Z6YD1;H5
-M9160FD+&CX.>)>\?"O$PF<N9Q1SCXO@AA4IUE5S\0*S:,.A6ON&KPW+`$+[>
-M^5!<\$Q&D9&CTKV#=3SQ&B%9U*$A+8;VR>I[>)G@>,4516K?TAJ!!BF[E($G
-M]H$O9)'OW_857U(2MT9ZI`H`'`$``!P!```"````10`!&%4N``!`$0``P*@!
-M`<"H`0(!]`'T`00'Z91+HH"1RML/-#"<LK/A#[$N("0(`````@```/PA``#@
-M^BSP5KW4%'*X:BM8(9;ZF02@QSY(:EA9:4"A_@*BC59I1&Z_PHW/DCU$09Q?
-M'<.8@$2_I=!??M"1@VK#/$\DJOU`?/Y2%V795)Y0T>S$I.*&4B1[G+[A_,5F
-M#+F-M_2[B[[T[$+&;3$N$3)+:Q@B1X!`7S`C,S@^HV@2N/X/IPPB1-<X+(\H
-MZ;]B]?,J[-Y>3!F#_E>-ZD-*5W9\!//>27QHY`EAP/WF_2'C"^_W>>RH<K/*
-M*8DG/%_I]1!KJ%XCFJB-&]_]<Y=3JP_?+2HYC2G70\+=YZA=5^7L;U(2MT;2
-MKPH`_````/P````"````10``^%4O``!`$0``P*@!`<"H`0(!]`'T`.0&R91+
-MHH"1RML/-#"<LK/A#[$N("0(`````P```-PA``#`\J$8JB+SS6I*'^-<9'5]
-MQ1\IH$HNMVX?<*EE"-4\&:60WZ4-:-$N,Q66O9W>D1D*ELI\2_C4'F+_-!NU
-M6"P9HCTL7_C:].=B!H.O:S&5<#!IL)0]^^D8?;IC8Z^0Z0UEI,*O.;.OF[U>
-M3#%WIMW8B!)G5U([SFB1]5:!T\(]PO2WE\));T^VCJ,,:T<0D$P.!(+Q]0%:
-MB-7^CZ6H<DG,$5,;:-?6<QT^`,I59=%N4'-:H+W&+8/NQC*NPF=2$K=&C[H*
-M`&P```!L`````@```$4``&A5,```0!$``,"H`0'`J`$"`?0!]`!4!CF42Z*`
-MD<K;#S0PG+*SX0^Q+B`D(`````(```!,*0``,)Q7R\GGS42MF.TX+1WW%E?'
-MCJ\,Z-U[DIB3MTWEMYAO7GHP`%@H-!Q7QFL54A*W1K?6"@!L````;`````(`
-M``!%``!H53$``$`1``#`J`$!P*@!`@'T`?0`5`8YE$NB@)'*VP\T,)RRL^$/
-ML2X@)"`````#````3"D``#"0T%DL^!B\=\7`997[T#:<!>:75D/CBK('>=R>
-M=OYZ:&.;DYVU-S=_"I;!05(2MT9Y\0H`/`$``#P!```"````10`!.%4R``!`
-M$0``P*@!`<"H`0(!]`'T`20'"91+HH"1RML/-#"<LK/A#[$N("0(````!```
-M`1PA``$`X([:/-=.506`K#VKMY;'@YP^2&->Z+U6^;TWV&O+'.1ZI#9'OS4B
-MB9,LJNC/%4+$'FC<1"&>0%(;N$?.S+!F1Z[4T>O:C/%0^;>(<\P87(!X-#7W
-MYB4,)`<PG<[W7)S,L7?*1S!+/:-&E]2UX5M=KCJUP!=,DZ>3>379@EHPGQS)
-MOAEV`T[-!&^><G0ZCL;->;F/JN!QK!5!6]Y]U>&Q11B<O0Y]#;3T\!BGEXEW
-MP@<D\BE"U;>:HI\O<:4`#<G0?[&D\Q@DZT:L0EDM\]!2P2/:$:%&=J*4,C0)
-M\M`''K\%'JX9?#?K9M@9LDXN8>A)XVB>V9_?SF)$]59^4A*W1GC]"@`<`0``
-M'`$```(```!%``$853,``$`1``#`J`$!P*@!`@'T`?0!!`?IE$NB@)'*VP\T
-M,)RRL^$/L2X@)`@````%````_"$``.!1/O`@=5^EV+A9_>"B*57]XS6)&?SI
-M6R6X311I&>':15V21`1X@WDT,J(IOX]DL]%\H1!B\ZYVI']XB;.=310"H84?
-M&CAP5#T(=M&9L8T_OWBT4V+K7'W;,0BZPP_OGS$/W0Y"!<.:]]R92`_`YZ\T
-M&!52O^.@!Q>;[)8.B82_92'^4P/0@1<:6TZ_U\$3H&QR)]WU;5:;@_HT6'0D
-MJW'JNZI-IN`C\GKP`1)B)0<[D\^QCF7/^6D=0*X,'2`<(-ZR@AED]RF$;)#/
-M3RV"^K<".8C<Q6/J0;3"IF$N4A*W1IX-"P#L````[`````(```!%``#H530`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:YE$NB@)'*VP\T,)RRL^$/L2X@)"`````$
-M````S"$``+`GVF:SC_KVR.N826J2[F.8CO;Q11CD0%O?\MM!+/`K<@5'*!.\
-M(<?/_2(4*VL+$3F'_B]'O7W9ER^#,V?JEW*VI\6F6>B4)`N#$+J*XC4<^F4`
-MZU2PV"?J]Z]\$EH7GX/=.J?_3;%DM?+OS&8\G[*;#%`ZU&`SX)8Z@?>DO-TY
-MG6U3U=@2V([O2\EBP;N\/9&=.#Y@9-O*5;^_#5=?Z>LC71@*PE1WA'-O;HU3
-M4A*W1J8P"P#L````[`````(```!%``#H534``$`1``#`J`$!P*@!`@'T`?0`
-MU`:YE$NB@)'*VP\T,)RRL^$/L2X@)"`````%````S"$``+"A<YM5^!!N\O:_
-M*_Q)O^"E>7;?E[3#L8(4A+8_=+*;:A.::D+ML71UR,%J.>KX**@`6L033IF!
-M%W2X6XGLG/!I2BY[FPD-T1*=-B@F<=96*:JPS.[$1851GG&KAER%:H'^,HK-
-MBN9>?[8A>R"!&C9]JN<;]SK.A*RI*C+>3D#D>?D*SRNX#AMJ7*M#F-?GC:.Q
-MN-\K^N:61D$\S7,<`PWJR[[$!#%@/>O-N]F>4A*W1D9."P`\`0``/`$```(`
-M``!%``$X538``$`1``#`J`$!P*@!`@'T`?0!)`<)E$NB@)'*VP\T,)RRL^$/
-ML2X@)`@````&```!'"$``0`_UP'$_WAHI%&*N>.YX;OK1])B_N9EIS">+"W]
-MO]S!M:#!3CL<)2VA/,`.E;@G)'^LV4ND/M85=S@NO.E;7'MP9+R?!4M0(%BF
-M02J%*5QP^B>4"=:KDX;_ERT3EXI`-*)?>IBYHAF,P,I==V71'%#KF#>$-'3Y
-MJL?^>>GH%MT':)1D10!.A#]5(!9DHR125<UZ\!9_Q@6=::E[>U7<^66Y>!.#
-M8.=X11!FW]Z@ALK=6N<F09RA[1!]2<(5`19EG-7@@%6MQ<6,4!$SWN?Q0M%G
-M#U$$%MI9QT)^9$>8?%L[78WN:J^BGL]]_5^L*@KW3QCZ*B2:HTDBXZ3`Z?12
-M$K=&,%H+`!P!```<`0```@```$4``1A5-P``0!$``,"H`0'`J`$"`?0!]`$$
-M!^F42Z*`D<K;#S0PG+*SX0^Q+B`D"`````<```#\(0``X'P:1L;O2A&,;-S9
-MV_X0`6A8);76Y"Y4]E[WXXQ>JVI`20F,6P89V\E:+8/"H;:G5X>]M`]H)^_$
-M/FZMY!*%H^A4#_<2J[[U_/!V5JK*B5="*XLV.,7;>;*7T8O)%Q,AXP7%\W\S
-M5$W=@][M#1:X'M22#[M(GDT!,4DE7%D!'*!BAU9=,!'\(_2J])K*X*7^!%HG
-MT5O4Z//B@M\B33YKYH.:TW1Z0]:_<64,-#L?OCJV?V&"%Q%35'CCZ@+;=*>I
-MLTWZ(#=-QWH*,4TDKB6]S>LC64OQ@&3-H9[5!UI2$K=&N6D+`.P```#L````
-M`@```$4``.A5.```0!$``,"H`0'`J`$"`?0!]`#4!KF42Z*`D<K;#S0PG+*S
-MX0^Q+B`D(`````8```#,(0``L#S_#?Y)H_Q1PQT\HM\4+D8NE0#_[;%J\AY!
-MAZ.(`7"Q:)F]B2>R6<\*W+2X>BVGYF&1Z+CD%(SUC.F]L%P9(*_36`BEF>T'
-M3A4HF-X9?%/Q+4T*"FFH(:9_TJ2BVY4<LD&]JLN0H`7Q#H=UIIYCS1M3X18O
-M]+GBHL8?>T0&9?!3VY][=6H7OY#.E9"I0F"?LH^`KP>G3"*?ZU,ZK^:YS3^)
-M4J`$@&T]/!-*N=M2$K=&XY`+`.P```#L`````@```$4``.A5.0``0!$``,"H
-M`0'`J`$"`?0!]`#4!KF42Z*`D<K;#S0PG+*SX0^Q+B`D(`````<```#,(0``
-ML%5;"@["1%X*RB0'LSFJ@"\%5+9%D'DS[WOW*NM@Z@)&"!8%"OS"_TI`3F)D
-M?3.3)O"X&"5,S6RKD2IX;DO3A>.<;`)#8IPO3O5M<24W[J5:]/L`#,&H4CF4
-M:_,)=BMG*R-1ZSF`LZ]RJ9[L0:E!5@=H8?$0S36#%_([L$LHO9*ZIE=\AQ,T
-M)L&2%-7FZ?D5D1!VS!-=:G^L`QIZ!@H6\Y\HF=&XZ?5$=+#/Z5]2$K=&++<+
-M`(P!``",`0```@```$4``8A5.@``0!$``,"H`0'`J`$"`?0!]`%T!UF42Z*`
-MD<K;#S0PG+*SX0^Q+B`D"`````@```%L(0`!4*[DN$-"\_T8T]X4,'GYZ/QE
-MR=D^S<13K]"P_=PDZ)'&WA*-/6(WFTYC$.;_F8A-VZ0#>/`[9R99<>]9EH[5
-M;RS@>]5"Z+PX\<8]0H_0!O,'RRTD>CQ!I`OG#`LHS]5.E5O^DD."*7;5W)OH
-M*!6S0@(I&XL\!3)G&"BFPDHV84<E;C#YU@'KF?P&:`MELL,;\BU[W'V3C%78
-M8?A=Z6-&7A)6&3JARU%Y\T5Z+R$4MF9U0`]'%S&JZ)X@9QB>IBFB#^UY(OMR
-M2L%7%KCU]R9'PF!U[CRE`-K6&I?-(/P=B8^G<_]+)9RISK1ZD$L#4QX-2#R9
-MPS).1)#ES0'/J.M%@'4)(:M<HYUV6!&;%V():VS*U+_$0R8&"B-4>0;AW9P-
-M8M5'B*>"0"YR$H[B*E`H9MV9)\$)B54JJ*IPRPA^8NLCP=<S(FD-?V)!2;+#
-M4A*W1A;M"P!<`0``7`$```(```!%``%853L``$`1``#`J`$!P*@!`@'T`?0!
-M1`<IE$NB@)'*VP\T,)RRL^$/L2X@)"`````(```!/"$``2`V"U3LF/X#O3_2
-M:,HK*`9<)I+D`YG:"&ZC"",SCC05L?.<"(4]O8E!UN"8DNA74J00<8-W$U,P
-M_,K]=)U]EPB'1/4L-<9-&D*!548(3WF[,TH<)^\#$[A\V*D]OMS!'LP%9N5K
-M%W43E/$9(:-_F*158#OG"[0#=J?HIF2HA7TMP<KK^NP9E9!=44F!)O)'%E7+
-M4WAIV*'DGW9V]3"P8>%O56]6^KMH)M4K]099P(V`4(G4^8\&8B[0#&3DX\$G
-MY0!-K:@Q/&QM.!$S=)(=Z$!9-788\EP(9\/3-4`/>A`]X"VZ15H\';F[>>_@
-M,.-P'XOBO2PP9"??AP>UNN,TLD!5DJO3'?EEP-XJ/I1L0\T:-ZFY1+Z-C;SQ
-M3NR795(2MT:@%`P`?````'P````"````10``>%4\``!`$0``P*@!`<"H`0(!
-M]`'T`&0&24TF9!V-E;!^&?9^@!6FA%<N("4(`````````%PJ``!`%[[#9:6Q
-MC.UO^)P(Z0*52$WG`(VD1P`BJB$2*AR&BW(EXZ/'TLL[&H+EZ1M&7T_VM?Q3
-M!7:&28#-*!PZ4A*W1D`@#`!L````;`````(```!%``!H53T``$`1``#`J`$!
-MP*@!`@'T`?0`5`8Y329D'8V5L'X9]GZ`%::$5RX@)2``````````3````#!)
-MX'R`(3I7"!UC#SC6"*)N;$:"U!X:TR53B7"X*0%F;7B):RP'R!'U;7HBV5(2
-MMT8++PP`;````&P````"````10``:%4^``!`$0``P*@!`<"H`0(!]`'T`%0&
-M.4TF9!V-E;!^&?9^@!6FA%<N("4(`````0```$PJ```PS:YXJP,\\-O:XW?C
-MTQF@N`DZL6(K=C"#?Z\8ZU1/*TTXTS'MD(?@/7YJR&Y2$K=&23P,`&P```!L
-M`````@```$4``&A5/P``0!$``,"H`0'`J`$"`?0!]`!4!CE-)F0=C96P?AGV
-M?H`5IH17+B`E(`````$```!,````,,556$-7=39RCHGW-;I\1TI^XW8P2=`,
-M/JV#JQ,S64"/MW_.U[*.+^K.N6V,4A*W1H<Z#0"8`0``F`$```(```!%``&4
-M54(``$`1``#`J`$!P*@!`@'T`?0!@`=ETC4QDKYQDA$``````````"$@(@@`
-M```````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MY9D1BTRN-JO`3(O%RAT(N@ZHWJV;0W+&$>P:HWCGH<G-N)[J>+;LJ.DH%1B5
-MJ01LGBYI?U"`6T4=2?:_O2M2I9HN9RK\G/Y[_S#.O:.8<G?)HS`8K=]%S!1,
-MYI#,Y],'\^D(314;YF=3)F/GO`SCJS2H2>;G$EW#P&XY?:A8+5HI```DX5X)
-M7A:<H7Z!^463]>CU3G'L70##SD"[KZ^66PFR%N`I```<``!`!+0?Z:6*L&=`
-M=^B;S3C[X20S!!CT````'```0`6FKK9P\#4]NTV<CP=Z:7KJ)2+[65(2MT:#
-M20T`7````%P````"````10``6%5#``!`$0``P*@!`<"H`0(!]`'T`$0&*=(U
-M,9*^<9(1```````````I("(@`````````#P````@``!`!@````'%>D"<B[Z*
-MV!GRMX#AWKZ0LG`VF%(2MT;S60T`N`$``+@!```"````10`!M%5$``!`$0``
-MP*@!`<"H`0(!]`'T`:`'A=(U,9*^<9(1```````````I("((`````````9@A
-M```@``!`!@````'%>D"<B[Z*V!GRMX#AWKZ0LG`VF"(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``Y9D1BTRN-JO`3(O%RAT(N@ZHWJV;
-M0W+&$>P:HWCGH<G-N)[J>+;LJ.DH%1B5J01LGBYI?U"`6T4=2?:_O2M2I9HN
-M9RK\G/Y[_S#.O:.8<G?)HS`8K=]%S!1,YI#,Y],'\^D(314;YF=3)F/GO`SC
-MJS2H2>;G$EW#P&XY?:A8+5HI```DX5X)7A:<H7Z!^463]>CU3G'L70##SD"[
-MKZ^66PFR%N`I```<``!`!+0?Z:6*L&=`=^B;S3C[X20S!!CT````'```0`6F
-MKK9P\#4]NTV<CP=Z:7KJ)2+[65(2MT9Z?@T`4`$``%`!```"````10`!3%5%
-M``!`$0``P*@!`<"H`0(!]`'T`3@''=(U,9*^<9(1!(=_8")ELA<A("(@````
-M`````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"
-M````"`0```(H``"(``(``(R=G<A7,S-\RXY!U9V?T5SW'Z)8^\NZ[V\,F\@Z
-M#)$PS)_;)1(A3_E)K"Q1V\`1([P2(/`>3N_@U@2$AI;BR/,TSA@+=/QCI"8)
-MRR/N39/./`?9C(GXN1$DG?5#Y(BS>ZZ!8RBERC["Z;>?\/O]+XK7UEYI@E2Y
-M@+S:$<LJBZKP*0``),E/6<I,IJME&`5@O^L#I;B7`58%U2`[/]*#3,0*%XUB
-M*0``'```0`20$UA@24DNK/WR8[GOEF-XV5)S!@```!P``$`%I](4X">[Q?.1
-MC1)V0B?L3AM>]\M2$K=&AJP-``P!```,`0```@```$4``0A51P``0!$``,"H
-M`0'`J`$"`?0!]`#T!]G2-3&2OG&2$02'?V`B9;(7+B`C"`````$```#L(P``
-MT..==8G.@RM(\LC4]^(SY?&:)UD[F%_$UR[KL$M,.(3$],]N&45H*?O0[M-5
-MDL-,B5!.:USBB39`X%J9X`>8.`<RNO>`(OY>:?Y+-?$ZR2;[W+[-Q&YM>&.M
-M_FLD!D&BW!F(=XH*V^PB`T=Z_:9CU:3TB.\_)9;ZJG"Z?>%\`=570*[/BW;N
-M(`-U!N%-#9*IE)UU!YM9[''*;F?T34>59!!&]RL7@B=_4P713"B#4%Y3#/?!
-M']H#`>-SC(:/J=E=N(V1[IG^'(H7G\R(?%(2MT;WQ0T`O````+P````"````
-M10``N%5(``!`$0``P*@!`<"H`0(!]`'T`*0&B=(U,9*^<9(1!(=_8")ELA<N
-M(",@`````0```)PD``"`QN?.M%5W_,I9Y-N=6O2?;4)9Y>/BO5^F!EV)QNU6
-M?0`[$2L2,E;H0.-9@J=3(2*Y^B&N(P0%,3+)NZFNG"A:'N-S,W=`'89:G=%0
-MBVY$X<]'W$%7,@SWPH^38MJ^QF7B-_I]OM;-");"%-J(^!HC4(TV<1SV=]2/
-MJ^*58%(2MT9[Y`T`'`$``!P!```"````10`!&%5)``!`$0``P*@!`<"H`0(!
-M]`'T`00'Z=(U,9*^<9(1!(=_8")ELA<N("0(`````@```/PA``#@'])I#@Z:
-MB*3J!*8A/"O%U%H@FE?41YLO%392'IC;(=>O9CP%%>"KWN13_O<B3;%NYA,B
-M3,9Z,L0Q+P(PZAA-2?HU_1@XZDPQUS.6#J]9'0'3W0:63;.S_=<)25QMIUVU
-MY36=>G.?*9V8V)"U`N#9WM-DGX+&`F0+;=PPF\1]UWY69#7=?>E;3^D^&K$Y
-M'X+K7Q;;9:&>]\:)]M[[CH5#JE*ZD?_=M]8_[*T^`]S4!E5@GID]!/4I5E`"
-ME[+*SDQ13ED'W\^"IP)CW/A/W7F2J-9,C#\/*B.+-=@B9U(2MT;C[PT`_```
-M`/P````"````10``^%5*``!`$0``P*@!`<"H`0(!]`'T`.0&R=(U,9*^<9(1
-M!(=_8")ELA<N("0(`````P```-PA``#`/+"0A6:<'+J+D[1LO7XR+M#0$W.$
-MN^O)O[)K8@\EQ[LP*);[UV?"[XRL#&>:V,FP,J,A`3W#:BY`13!!!2%3Q<V`
-M"^B4&V*XKL=O0KHS7RB!#+X.#OSZ'.,WR*.8(5II/ELO`B*0E0NK(SB10?0K
-M`Y3=IIA#BKZY<T_M7D#M=+N##/7E%;[:B/&VB28]VVFPL81!:@Z;(HJD('M6
-M'`OUHMS7HB0T.I/_3T=^9JS>+#1B=%$7?0`YR[04MAU2$K=&R/H-`&P```!L
-M`````@```$4``&A52P``0!$``,"H`0'`J`$"`?0!]`!4!CG2-3&2OG&2$02'
-M?V`B9;(7+B`D(`````(```!,*0``,'W?)7"QQ'J24H%0I;T*_OG1)NDR[-<K
-MTZ^XDWNMWY2%;]U@B7%)!!=&H*^Y4A*W1N,5#@!L````;`````(```!%``!H
-M54P``$`1``#`J`$!P*@!`@'T`?0`5`8YTC4QDKYQDA$$AW]@(F6R%RX@)"``
-M```#````3"D``#";3OQ`NL01T73&6AT6-/ZC);[3`0%+ZKD^)ZJ=`S:6S:S.
-M^X2FQ(LJ_F`%&%(2MT:C,0X`/`$``#P!```"````10`!.%5-``!`$0``P*@!
-M`<"H`0(!]`'T`20'"=(U,9*^<9(1!(=_8")ELA<N("0(````!````1PA``$`
-M'BU.VN\]!?2WKYK(:#;Y7^&49OD'>"ENA$W2%R[V$)ZAM=L$%W.2&V$)S%=<
-MU;>EVT^$>V)4GR</:\5W1H4'">2)\<PG7E&#;/\3S=]1ISBW2YKKG0B57K&5
-M\6L-#_L&^"LK3P>7W=9]559VF*6NB?(8JLO!>93M"60IHM3[1Y>`V0IT>Z]4
-MVDC08O,(@'EK2E2.?;;/3L%2@L)SO`D:+J&,IP0%KP?V,X1)ZG%JX)FJ[>C<
-M@6/K:((CG77RK;%Q1C/K5LV_UT;]%\@DJ?4_M%0!-T!A4AS=Q\=BU1`+9!^D
-MY(5_-KBV)6TW0F]ZC]MH15%O^XRGTAK-'>-B4A*W1FL]#@`<`0``'`$```(`
-M``!%``$854X``$`1``#`J`$!P*@!`@'T`?0!!`?ITC4QDKYQDA$$AW]@(F6R
-M%RX@)`@````%````_"$``."@0,Y@VR9#CXR8E3_TWA:Y0J9)[!TV=-!BW85B
-MYI,XL,C!PSZ2&R;'(IG'X/-D6F2>O.,#?(VK@7^P?WS+=_A%7X%J!W#(;7$R
-M2^3.F=:RZP8_0''?5QKF%_2K*B%">8F?_?NM_=H<;8^):#?`@%X3=RH4N.A/
-MN$.:EM5I]71E@%>VO9CD1N)MQA4C3M3O2%9J\7H=*`P+%@BH;I$FC0&-B.CC
-MS/A`13YY=@WG[.[I;"*#Q5<<TJ%-34?Q9[M\K_,-G^?:!!)H%"V10"+8M@WN
-M?/`MT*!P"66Q:^"J4A*W1N9,#@#L````[`````(```!%``#H54\``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:YTC4QDKYQDA$$AW]@(F6R%RX@)"`````$````S"$`
-M`+`?=8?AX$#;>YTM1Q$`C_;1-E`E<X2/_GB8T2@D?EV>'[5SY?Y?I:J4TF@J
-MIU4;O3$:CMY1?!\QCZ<,:<M0E2!`O$/\BV%[(B0/"M)NA6FC\VH&@]A&+S:*
-M+'@<?Y?!SV&G3(*<+0MZ^QO707UQ@W'*@MR"JZMZ0Y&6?N_A&X!M;VB>(/F.
-MD>D]2BV0GWXA>)ZQ8,[4V)!XZF/O9L`P$5K_!]:;$BU">P&`,@!#4A*W1JIO
-M#@#L````[`````(```!%``#H55```$`1``#`J`$!P*@!`@'T`?0`U`:YTC4Q
-MDKYQDA$$AW]@(F6R%RX@)"`````%````S"$``+"G<"_-U!3F]1K`5K2&MJ@Q
-MMWN0GN7DS!#P5MZ,0<SQX+XI4#F]_?_]F2=DXUV`A%6I([.6$UP-=%GQ:_;Q
-MR$0:/G$<BUQ\B1G%U18QA?B@C(@&@&4=>6F"[,AW']S;6;KN\2F&P)EY*BXV
-M)&V6;0W:M5KTQ+GP,@N5@MS9/I%7.*ADRA+65A,"C@OR7:FZA6/JKP2<(J_,
-M*C7M&;F?RUU%`YCF;R,9=^E<L/)B4A*W1DZ.#@`\`0``/`$```(```!%``$X
-M55,``$`1``#`J`$!P*@!`@'T`?0!)`<)TC4QDKYQDA$$AW]@(F6R%RX@)`@`
-M```&```!'"$``0`+38+12!8I0N223,381VKJCI#B%#21DG8[JD`@PCN1IZR'
-M0"(4]B7'^,YA_.4_<1PXU5PR/%D"I<1ZO5''*AV`]S16J+"/KG-J]`;A`TN`
-MVE$FHO@ZH96;7EQ*HZ(V/7/',L6CNSAE^G\XP]](-5*?)E0]+&FIQ;,)Z'O&
-M]^H@I(._^;B739<]5H\NOVOR/BB_!]RO4RTID]?,<?0278U.ZN)(DZ$2YKDR
-M[@,QE!^2C0X&=R](..KQ"?@,36"NGM'0X,]8*6X(KA\S(<H5;"^_L@ZR#=MX
-M.<Z"HG(XZ=IV%-Z`UP;"YP=G.I9?%U[$/`(-W(0Y'O<S<Y3A<A!2$K=&ZYD.
-M`!P!```<`0```@```$4``1A55```0!$``,"H`0'`J`$"`?0!]`$$!^G2-3&2
-MOG&2$02'?V`B9;(7+B`D"`````<```#\(0``X+NZ(!H^+X-#5D<@#H6!V'/L
-MI)?Q&_CY\"2</,$1@Z8RD.-$=QCBRZ*<`QLQKFL_E[BH>8[>W!NMJD-P>`XO
-M_)Y\[^./:@IQZ?IX&08#W(K+#FS?)*/QQS5!1(6+K_1:KK'KS1\^/ZEM5FW1
-MG>K"YU#3?WF`(_J`E:FA=*V_[,2>%MG&ONU/<Y5<,08NF6TIH0+7$J]DQ'/:
-MDL[&UH6D<RD7)W]\>C1?=CCIUI"MP.&((S&Z&VZC8(4:;UP:O*P=@@GAX'=Y
-MTG:X?;K>'L&)3V?<?\>SX.PN:LR-)F%2$K=&@*D.`.P```#L`````@```$4`
-M`.A550``0!$``,"H`0'`J`$"`?0!]`#4!KG2-3&2OG&2$02'?V`B9;(7+B`D
-M(`````8```#,(0``L*OUH>DWVW[H^)`G2@3X;H!8P<);Y<ZP*@'EK(F@[I;*
-MD6Q+?P!?'7+K6X"8EU*B$EEJ[C]!+BU0+\K-*^Z<5WYD4(09G/#PTK'I`J<!
-MTI^*:=(+X#70$ZDH`$?XS)O`FY6M<FMB1#E#",(S8RF@9=YS&&=W@L1T.LTM
-MW?-XCWH#"`.=F5SRCED<X5ON."_U\N=3Y^K3J=W=`J[#/WDMXFDV[J$"I\AR
-M12X+`JU2$K=&.<P.`.P```#L`````@```$4``.A55@``0!$``,"H`0'`J`$"
-M`?0!]`#4!KG2-3&2OG&2$02'?V`B9;(7+B`D(`````<```#,(0``L!!>Q/OD
-M`FY00*FOA<@$PB3:L.*1<4QKE5L*B')YGZ4/:I%T,QS6">8X/V7/(>(E5<ZV
-MIM"YP;M-9*M,!4#K&2=2X=/@F-RMJ]DQ.:918H^CEZ_@6LK(T/_^KF;.D'66
-MU3CAZ96"=$RN]H*>>"&@B,SQRH@\&V+&W]E=Q%7$C*U)U0-UPMU;G'^'-"=>
-M&A9=8A6`]1>^!0H'.[-1OVB3O"7N/UZ=BX(3F?*\F:I2$K=&(?(.`(P!``",
-M`0```@```$4``8A55P``0!$``,"H`0'`J`$"`?0!]`%T!UG2-3&2OG&2$02'
-M?V`B9;(7+B`D"`````@```%L(0`!4,>@R&0(?G+&U#@S-@+_[+RP2U-`GF$O
-M3\-5\]07-[$6K_,1;GGKU9-E[ZQ_#LTX5OU73T%F?>(A>LG*%07M!N.V^?`.
-MTBFCK'N*FV@5W887@8OPOUN8.$*`\CY,OJM*(T7Q^'F/!2.2M`@D68;F0Z&5
-MMA='3/!LX*"K7QH&$$,!)W3DU4FQ:S>YJ?-4Q1U"UA'6E$Y3C&E'<@#CZHB!
-M6_:MQK-S2+F(^HFYCNI,V&+<U^#60)J^2FP9^V*,=5AWT7-'4CMI),VW6?A3
-M1B.I:W03-A'#O82],_26+IT$&I=;10VPQV'&E!$\>M=N_IDV8$DU%58"W=#!
-M=]&(BI4KBS"UL80:;-$Q$$QZ%)2T0^UR2\\@Q+8<ZJB<Q\]V<N*5Z[\876%M
-M0D.88;A)`#\==/FE#6QE*"//>>QSC\A+[61E8/FQ"XNL`ZA4'T^J4A*W1N(F
-M#P!<`0``7`$```(```!%``%855D``$`1``#`J`$!P*@!`@'T`?0!1`<ITC4Q
-MDKYQDA$$AW]@(F6R%RX@)"`````(```!/"$``2`!'F@#9YD535P._]2POVJ5
-MY(ET`__:99!-O"2Z"TE5Q@3)S8N@HE%']GIBZ\,T,8XAY#H9[=-ES)PIT>#.
-M.F`U>KO$<FJ4B)V%TF55F&$L`%*'I@DXY$6Q68:7E&WS/Q8^#OP,9AKO%;,^
-M-R13M'<FNZ,0UY#!42GGV&.X"2'?3KLAL+97HY5(\HF0R^EK2]WJ9UJ$MWV@
-M:-/.24X78R`;EO_Z=28=__,>5RO@BTE@]62HM-=2*Z^,(($:#RUISF>/$4;Q
-M>U!<1M+7[*S>NSAO"NL#T0:\?ADI*:LC:M5O&^]EXK(CB4,&Q&\;/A/T7-M^
-MMT[8'1'%F%\R^]4,5%0/:2M.Q=?`@CE62O-V\JW]8LZ@F%,9+-/F#>!!+5,2
-MMT8R#0``?````'P````"````10``>%5:``!`$0``P*@!`<"H`0(!]`'T`&0&
-M2>AUH,P(N;"@N:Z'+G[8*YDN("4(`````````%PJ``!`YQ=L-QA\8],N$K3A
-MUP1QL&XVSXKY+HA(:0)M;GKD;$0F8#>9-%2;4V>9(TY%;9Z)S]_(YX$/4HY_
-MRED24Q*W1ID9``!L````;`````(```!%``!H55L``$`1``#`J`$!P*@!`@'T
-M`?0`5`8YZ'6@S`BYL*"YKH<N?M@KF2X@)2``````````3````#!L8EM\@P[W
-MI$7!V%UCN]-+_#HZR?$VK[(_*#(D>XU]5@4YT6'9Y.PM*^LESU,2MT:)*```
-M;````&P````"````10``:%5<``!`$0``P*@!`<"H`0(!]`'T`%0&.>AUH,P(
-MN;"@N:Z'+G[8*YDN("4(`````0```$PJ```P#PZ1D'?6Z1>0I,0BMU!&@(IC
-MVB8JC,"N#GM[@ZR^A8^LZU3?NY/P_WS/$+13$K=&#38``&P```!L`````@``
-M`$4``&A570``0!$``,"H`0'`J`$"`?0!]`!4!CGH=:#,"+FPH+FNARY^V"N9
-M+B`E(`````$```!,````,&;L`T[.B9?6\AH!POESPTP0$2D@J,K<>29*_3Q&
-M"R.,;129`GTW@_$)-[:Y4Q*W1CLQ`0"8`0``F`$```(```!%``&455X``$`1
-M``#`J`$!P*@!`@'T`?0!@`=EQM;L-[C*9+T``````````"$@(@@````````!
-M>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``20'A@?+<
-M_(,.?,'SG0=TVMK.7QI"5,3)87KI,;7"8<B?PAXMZUT)+7'$$(%!5O'V=&D[
-ML\Y^H(Y?W2C(2YE\*111^0/7<M?LF&SO78[JR&U&Z<'FU6;J&3<N>W,`D$-,
-M$G,WR;ITL^=L#?+:$;/%)Y>;AS&4E+/$4B\)C*?>F](I```D<J1%NURF6;&_
-M\=^4\\5JG5:B(V3(XV'YNZ\0>"ZYN>@I```<``!`!.87&BF:NAZ"O4?+">H_
-MTW]"<IA:````'```0`7J1J(JI:WQ87LS.8KXA;-JI(&F@%,2MT;7/P$`7```
-M`%P````"````10``6%5?``!`$0``P*@!`<"H`0(!]`'T`$0&*<;6[#>XRF2]
-M```````````I("(@`````````#P````@``!`!@````'"0,)^T!;BXH"=+@1,
-M\O>?C29VD%,2MT:Y3P$`N`$``+@!```"````10`!M%5@``!`$0``P*@!`<"H
-M`0(!]`'T`:`'A<;6[#>XRF2]```````````I("((`````````9@A```@``!`
-M!@````'"0,)^T!;BXH"=+@1,\O>?C29VD"(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``20'A@?+<_(,.?,'SG0=TVMK.7QI"5,3)87KI
-M,;7"8<B?PAXMZUT)+7'$$(%!5O'V=&D[L\Y^H(Y?W2C(2YE\*111^0/7<M?L
-MF&SO78[JR&U&Z<'FU6;J&3<N>W,`D$-,$G,WR;ITL^=L#?+:$;/%)Y>;AS&4
-ME+/$4B\)C*?>F](I```D<J1%NURF6;&_\=^4\\5JG5:B(V3(XV'YNZ\0>"ZY
-MN>@I```<``!`!.87&BF:NAZ"O4?+">H_TW]"<IA:````'```0`7J1J(JI:WQ
-M87LS.8KXA;-JI(&F@%,2MT9$=`$`4`$``%`!```"````10`!3%5A``!`$0``
-MP*@!`<"H`0(!]`'T`3@''<;6[#>XRF2];"D!O]B7^,LA("(@`````````3`B
-M```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0`
-M``(H``"(``(```?%)V-!:MT0RC,K'S*TMMZIN<!D=^+F8AK'-`_-DWPR&P-.
-MD[YL%36E(YR*YEZ%'^J$N.<F,?E-`C)&[OSN&[E7^J*;)G^N=E.@$%<V($=@
-M@[U>7%_C^C*S!/)Y^KDZ<ZWH[0D3#1C;*+9ZP37TV6.5-6%VRC9;-HE9`$$#
-M[50B*0``))_.WP_5F">Q`_Z3QVG5U4IM?T-<4R4A5K*0&.&6?F;S*0``'```
-M0`2#PH+:<!EJG0XH>EVH31EXU&+<M0```!P``$`%?E022?$T]QEM422G+K]B
-MRB?^JI)3$K=&5:,!``P!```,`0```@```$4``0A59```0!$``,"H`0'`J`$"
-M`?0!]`#T!]G&UNPWN,IDO6PI`;_8E_C++B`C"`````$```#L(P``T.%@2#E-
-M(P-I4NM7UG2CPZ+Z-3-L)I8?7&U98\,`/T(M0=^+?[)%MY^8L[&@.ACV@KS6
-M](_\!TF;,46R`?#"V>$]`M]^ZO+`K5*J=GEM%Z1(9=1':<C.AL7Y.[FJ/QSR
-M;1IT%S'>>P4WN5DS4+;<13/8R.NRD9N`\6M2M.6M1@#C%^[W"J3<T1<.LX+F
-MNZD<^JD%$'0[T%_YAP_"T>T<)V*CIA5/XGG*7)@HB`<SU[>="2C;--B-Q'4Y
-MH(K*8@]&N9HMI&-#JVP(B8]#`5,2MT;HO`$`O````+P````"````10``N%5E
-M``!`$0``P*@!`<"H`0(!]`'T`*0&B<;6[#>XRF2];"D!O]B7^,LN(",@````
-M`0```)PD``"`CA_/9X:<*4>(*+75),ZKKDJ*/WMPCCV9T9I1SH2X**J<FV=M
-ME`CF@]>)$'YB5"(0562*'_00NJWWQZUX?&/,+#Y'K3KF6L]UIF>@9Y7>P-+X
-MQ0G\XM7D"WO6U6N"]>NX=>?'6-0:M-OA]1=(`,.$"G=BGM-1WUS"B,MS*%,2
-MMT80W`$`'`$``!P!```"````10`!&%5F``!`$0``P*@!`<"H`0(!]`'T`00'
-MZ<;6[#>XRF2];"D!O]B7^,LN("0(`````@```/PA``#@FJ3F$_,/)/$M`BIA
-M@0N;I*6>?;&_EOYN;*#=Q.-[^^WBQVG6T!JJ-EHBM[K.)3L?>F8U\-,5'SI:
-M$(G#3;,LNDFF7N!N7`#TN>R9U(8?DDY:887LP7E?JG]/"?1&-Y5+LR]+D\K<
-M)T<%J,GN9'0[`Y?;WL0L'`]S;5X7O6'U[V"&N=8EPLNF1:A+C2SU]`N!9^L;
-MWY[4N,B/$PD(R9[L[%HK,N#C.)R+E"'VB2E9E_(/GZ-@8T)D:,LK4()D-TZ$
-ML,9L^UO,_>ZOIXB,7<J!#B$*P+N3;(S$03CX!%,2MT8:YP$`_````/P````"
-M````10``^%5G``!`$0``P*@!`<"H`0(!]`'T`.0&R<;6[#>XRF2];"D!O]B7
-M^,LN("0(`````P```-PA``#`6=9\PG9C,T/S!`31LY#5G5![FVGS5O!E0'4!
-M=<F@4;Q,^O*4KEB1%2::\T;HNL1P;I`DZB:9&4+[DN)'.0_QPK13T+1$\>$:
-MSCUNSU^/0>9@9Q5P=3BV=+\4C]AQ_'ZR`H[BZ<S.3+]60T@YF9Z)U:`(^1=H
-MSO`B3A/^R:QP!+I=N:4(>OL;E_?L,8TJ-P+-@O5);UK#5@].2P%<-.D=IW3+
-M*V,[62,@M(8%KTHW5ORS+'FH(<)S=/*-2IE3$K=&5?(!`&P```!L`````@``
-M`$4``&A5:```0!$``,"H`0'`J`$"`?0!]`!4!CG&UNPWN,IDO6PI`;_8E_C+
-M+B`D(`````(```!,*0``,+J$WA=W4Y>+N2/J1%S$J<9J\U)>R>[MN$O]*RV:
-M!]Y3`'UM11VAH,SXH]*Q4Q*W1G`-`@!L````;`````(```!%``!H56D``$`1
-M``#`J`$!P*@!`@'T`?0`5`8YQM;L-[C*9+UL*0&_V)?XRRX@)"`````#````
-M3"D``##^2-&J0N^\5]Y!AOIWNK7Z_GF*=0"_0Z5BH?NJP@8/[99S+"<BKS]K
-M=10:8U,2MT9F*0(`/`$``#P!```"````10`!.%5K``!`$0``P*@!`<"H`0(!
-M]`'T`20'"<;6[#>XRF2];"D!O]B7^,LN("0(````!````1PA``$`Z./WFU&N
-MT6DVSYW0'Y`-^CPF8"2^YHXO&M$F0BK^M^1-7BV4BS=!D=<;YL'L(J[G18FS
-M&RG#4#CTCTZZC^T4V/*NI#6'T''CUBZ4"=`*O:XX)J\V:A9)-&1,VSO;=WV]
-M^5&WA^1MEWDK;I?"38BX\C,AEK%C<#E/*0&C6>V4`G5[9^.*:Z*]H.]'\,*E
-MD]VZ:2)I)MC4LC?6?;W9B-5KZ1"`RXTLV$<H9?#3MX7RU6@BE."#BMLEGS#'
-M4-_WN!78J#031+P^U\3OI_BB;,*DE+Y;57NVGM[6O%TK^7>0W/0H5+!L0*P'
-M33QGQ^&`3:U;V*/++"#_/`NYOQ)14Q*W1H0U`@`<`0``'`$```(```!%``$8
-M56P``$`1``#`J`$!P*@!`@'T`?0!!`?IQM;L-[C*9+UL*0&_V)?XRRX@)`@`
-M```%````_"$``.!5N;PDSSB68&X!40AM8I$CNKT^,C-]3H6D^L;ZO!4C\*X1
-MHUM:#."]:6<F=\/YT+/%%IUX2A!YQ4TC@:=+#SQ>0J,5P43`>'30#NRY'],P
-M`G*>FV1@J^SR^6:!E(WM*"(K+(FEU%*0[>F5)HF(+SM9#.Y*T3E=;:$5[7<M
-M)XG)##3_CY,=2&^8D[*,6TWUL]X8&_P/KT=&;Q\SF.OT_@_QC9!IV[W^:*AF
-MT.4<:]%=8'QU9=;-!HTG&%S(%0+IP.7.+P3^?JJ<>!O(LCM!ECK3J:0NMSEQ
-M<S>'E;YW4Q*W1F!%`@#L````[`````(```!%``#H56T``$`1``#`J`$!P*@!
-M`@'T`?0`U`:YQM;L-[C*9+UL*0&_V)?XRRX@)"`````$````S"$``+#3!+Q[
-M%&.O#_A2-2+5=$A37.5R27;<$9L=Q#D3K]U"ZSI$ET.A#"G7(H]YERIQSTVY
-MO7/K2R9`.\=&JB!L9NNZGF$CO@G0O5%UF6\/#XZ+)Z40(^RUKB!XYUVYD,.<
-M%-AQ@GQ[NU,U;XX@:!J_D5':](!5RC2'2EE2.5[4/DJ'V9@EMX:02_ZG_Z1Q
-M\[3'-B<)'#U=6`Z/WRPYP1@5_,?4-JY/&@X^%HX"1A#A4Q*W1D%I`@#L````
-M[`````(```!%``#H56X``$`1``#`J`$!P*@!`@'T`?0`U`:YQM;L-[C*9+UL
-M*0&_V)?XRRX@)"`````%````S"$``+!(+U#"9B`S3H>D>B1&U9\I/+KD/*6*
-M[#B-]6O,Q6%ZF(KB'3#+'@%&>J$>H?T_ZKZO@R9(MC8@F_1#XFT"*G8K<$Y=
-M75V?^Q&WEIK!TQK>3'(@*Y*A/J<3][ROII7):W9S7H\'9G0;9G2M@\"YLJP5
-M[_"ZU?&E3ZF8V=#PY2#TK$T)V:M5$J'$V4R;)6DN<2W_[#A.KA&<P,[\,%+\
-M2+J/V>!L2@,ME]:*""AJ4Q*W1FB&`@`\`0``/`$```(```!%``$X56\``$`1
-M``#`J`$!P*@!`@'T`?0!)`<)QM;L-[C*9+UL*0&_V)?XRRX@)`@````&```!
-M'"$``0#O)]TQ)LY;DBF1M[9N8\E?UY0MATI_>@`:S=*O/*E-^4'5/Z,F_JX=
-M_TQ7GD1ST\:VT!5>*?(U!]#<G%XR(GLD.'P5L9&5+__T>K/<8OJXI3@LF75&
-M^ITLWMRYILK\LO;5<.,'K>M0;CR"O+1WY]Q?H>&ZS#1(>];6'N([\[N007GG
-M&*2U@&W,$-RC,A#.LA/&8BH+)-R3U?4(JDUV?WM2E#_F>WYCK@7<LZR1#HX@
-M9S`E:\-6F%)QEW'ML$O7Z"..:_>-QHG`EY;$_7HP,Z9X6KJ9[P1)4E5T+>67
-MLWO6-8`\`KY%#I12,C[A7ME#%WQ=56(@N_O@#C=S2)E3$K=&PY,"`!P!```<
-M`0```@```$4``1A5<```0!$``,"H`0'`J`$"`?0!]`$$!^G&UNPWN,IDO6PI
-M`;_8E_C++B`D"`````<```#\(0``X.I@-TB5%D;$W49)()),H1[4MS3!X3^@
-MIA8@XU=HH$P9.N.;;N<NK>9%<U55;=\\G=?FDMMEU>46)+3VEL\)IDW]JZ0C
-M74HGP:\';ZR2=>*NH1AK$*[O3GI'J-DE('GQXK-'5'?:4L;PD>Q]-!2-!LRS
-M<YS2FY'9=+D457,'ZZ7JR`E%1K&4\(?'IT+EQOW,U&/0^?:[E^J2*?VU?X:]
-MT"BR@W=>J_Q7R_^=U*916+M$(>*&L@RZ":=NQ]W1BZ.]?8;8K\*T^"0,=WJR
-M1RNYVQ@!DO*7B5S4^]?TS']3$K=&+Z,"`.P```#L`````@```$4``.A5<0``
-M0!$``,"H`0'`J`$"`?0!]`#4!KG&UNPWN,IDO6PI`;_8E_C++B`D(`````8`
-M``#,(0``L.(?Z*I)81&;_.2_)!L_1]=5<"=:C4,!?,-V._`C+R&!$"HUKXRE
-M:6TG+YE"6H,DE9$>3`6S?M0Y-=;`<.#Q@^P;SG97'/A8C&8<@NCN;]C4+'Q]
-MHT\-@VB9J`JZPO]].__)'[)1*##IA4.:`RSN^_L5^TUCXI8F&P@;<+P@5;`"
-MKJ3KQJ/IZOUG(V:*^7O_/#:G$S;#QGA""^>?3?X%9IIV5_7."@HCMQ$E'-)3
-M$K=&>,8"`.P```#L`````@```$4``.A5=```0!$``,"H`0'`J`$"`?0!]`#4
-M!KG&UNPWN,IDO6PI`;_8E_C++B`D(`````<```#,(0``L+O3Y\!)F*=2*CC"
-MCW7#7UM'G81P.#[^$F4)Q%:B=>=>'Y]X5BPY^TFGFS[N&J>/91AMBF0QWE1_
-M'^:K<9,JX[B(U%/G1!0PQ[`OZ+8T(?Y@7"I$HB'COFFD;0\33B-K,Y?2_6:_
-M?ND:,[%UFBUD"[G0$2G785)I.EV,Z?"J$M&VS7V*AB`'0C0;EFH$W;O><KO2
-MBC'$DXQ:R"YB\=6AV,V]6U=.M?J&<'D!FQA3$K=&).T"`(P!``",`0```@``
-M`$4``8A5=0``0!$``,"H`0'`J`$"`?0!]`%T!UG&UNPWN,IDO6PI`;_8E_C+
-M+B`D"`````@```%L(0`!4)?E`5UM<:($KXAI0,G(/VYQ3.@DP<2<O(P![Q-_
-M:%ND#=7?7FT&=_+/`[LYH@#S[:O]TA9AYI\?T``GU:G'_203[:\L-E^8]HQJ
-M!B"K+301D9_:DJA(T"%`D<'G.4KJ_$PN90+Z-,FSY'V<)10IXO8]LD15G#W%
-M`\V\=O).C88X;VN7N0-Z)W]BZ*Z--/_5#5OAP,;=^KKXW^6._(7ON&S_;,.V
-M%/SMA@D%5J?##*%'&=29YC#K>DO<!I#CDYF7$1L%@'HWP7>WS3F[T\+2F;A3
-M30TV-8]R3G.S9PK@S@(1"*Z89N#'K6U660[[QR1E46LB-UH-;&4_.-+R_^=T
-M-9QL<&;Z0TF*V<U9J3%10V.<2`0K9:=="[&R8H($R'PI$&E*^"G11F>G1]2[
-M)S=RD.I<>7)\:+HPEH@6(V+(H*9K]H&2,SC:\&YWO?Q44Q*W1N,C`P!<`0``
-M7`$```(```!%``%857@``$`1``#`J`$!P*@!`@'T`?0!1`<IQM;L-[C*9+UL
-M*0&_V)?XRRX@)"`````(```!/"$``2"8;X7%!0/ACR+B[2JFT6Y>'3HCHL7Y
-M^<[BUUD,.^-"#A`*@GA\F5.%!M`%RB'^HPMXK]ZV+R^722*`]ZY*)VEAJ)U4
-M'&2"U1JBC&3;"820D]-AKQUF!QPE81J7L]<PF5#,0\Y->%]2\F6+[+"9W(=J
-MD69Y4-9_X0J#&)]46/XU#/FT(SWU'6PQ<8UGHFHI,I%HG82H+#JF5S,X5EXM
-M/=["@U(EG'\KMD`([9!7Y)K/T=JC;O7[$=*YDW$9&*MX]Z=&)LH&#Z97HB*D
-MG3+*[WM":<A1.$LP&7^:<WAC&AM986P2LGB!HL"_?.+GC'CT""]K8Y0HC:HP
-M*HO'N^(&`"ZT)BH'T][AH2M`U!8*#?Y>W4_S.8)F[_UU8)L_MU,2MT9&3`,`
-M?````'P````"````10``>%5[``!`$0``P*@!`<"H`0(!]`'T`&0&29)U:=#=
-MT2\5J'/<:'-)C$`N("4(`````````%PJ``!`M/^`$:R1A%:MV`H&8Z!T:QXE
-MA">+1T-MKQLG?1"".V;GE/J7\$BJ&#DERQ6+6$^7]/;3ET[<B<5*(3U+4Q*W
-M1LI7`P!L````;`````(```!%``!H57P``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-MDG5IT-W1+Q6H<]QH<TF,0"X@)2``````````3````##]+%.^Q&(!@;F;-?-!
-MTC-LV\L=3+*+!T*+&E!`T!"+MCEQPDE@[^IK,MF=,5,2MT;@9@,`;````&P`
-M```"````10``:%5]``!`$0``P*@!`<"H`0(!]`'T`%0&.9)U:=#=T2\5J'/<
-M:'-)C$`N("4(`````0```$PJ```PC&=L?:<UIN4)@J?N;;:GVD&B1RSI:(B"
-MYE"^4:P.3$*TP;9HA(JHJTDU<$I3$K=&%74#`&P```!L`````@```$4``&A5
-M?@``0!$``,"H`0'`J`$"`?0!]`!4!CF2=6G0W=$O%:ASW&AS28Q`+B`E(```
-M``$```!,````,(S$L8B.`C\H:#0N&B:&M9L9/'\HTCI:D+<@AC1>$BRV`K/R
-M^IQ@1'TE]&^D4Q*W1IMQ!`"8`0``F`$```(```!%``&457\``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E]XB.:W:UPF@``````````"$@(@@````````!>"(``'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``KY+A`3[KH>UZQ*:J
-M0$7+U?6PYAV<9AX9)?`:VN*][<'BYAF%%(0PRL^HNY:%8P>@\CS00V88^L92
-M\OW(LW$9SBC7&GI7A^-K-=G&:/=&J[8*"@>)7NOWPI<"7Z-XJB=82C="Q\+X
-M^3+K6BBWM$F13R%IG:3)XN\-V6U`6Y,$0&`I```DF_#9E*-)B6`U"3AE?GU!
-M@K2!TX\;!U]@?O3[X/2;E]`I```<``!`!`+WN^@IN>F7;8M),8?0M"0+(`U2
-M````'```0`5PK$?J1*88D6)MU0<U6%8.0W[K-E,2MT9Y@`0`7````%P````"
-M````10``6%6```!`$0``P*@!`<"H`0(!]`'T`$0&*?>(CFMVM<)H````````
-M```I("(@`````````#P````@``!`!@````'I2!BB`VF\2H[AMSJYE+DG2=+B
-M45,2MT:HD`0`N`$``+@!```"````10`!M%6!``!`$0``P*@!`<"H`0(!]`'T
-M`:`'A?>(CFMVM<)H```````````I("((`````````9@A```@``!`!@````'I
-M2!BB`VF\2H[AMSJYE+DG2=+B42(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``KY+A`3[KH>UZQ*:J0$7+U?6PYAV<9AX9)?`:VN*][<'B
-MYAF%%(0PRL^HNY:%8P>@\CS00V88^L92\OW(LW$9SBC7&GI7A^-K-=G&:/=&
-MJ[8*"@>)7NOWPI<"7Z-XJB=82C="Q\+X^3+K6BBWM$F13R%IG:3)XN\-V6U`
-M6Y,$0&`I```DF_#9E*-)B6`U"3AE?GU!@K2!TX\;!U]@?O3[X/2;E]`I```<
-M``!`!`+WN^@IN>F7;8M),8?0M"0+(`U2````'```0`5PK$?J1*88D6)MU0<U
-M6%8.0W[K-E,2MT9WM`0`4`$``%`!```"````10`!3%6"``!`$0``P*@!`<"H
-M`0(!]`'T`3@''?>(CFMVM<)H.M/%29[57\$A("(@`````````3`B```P````
-M+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(
-M``(``(MS+_5^`?70L*C?2/X3S@["2L3<U#/1J71IR=,5Y/.;U;M:;1LJQS^)
-MEP5Z)3@R=4Z&'6.U'KSQX:")<L%VI)F;*6,`&5#=FYFB,NTEHT=!WB>'6(SB
-MG_U)]P!8WJEJ64-TVRSU7AB.Z['0TDA.O/P4S^+,4;VZW>'>]J?EJPHE*0``
-M),0&QQ_$.*/?^[%B?/V@BSV"R9HM_'!Q-1-NGLJA.AI(*0``'```0`3S+DW0
-M=NB;\@3UUNAQ7$5IICBB'````!P``$`%058^]=F(.7,*Z-PE,4TN)R&=9-M3
-M$K=&8^$$``P!```,`0```@```$4``0A5@P``0!$``,"H`0'`J`$"`?0!]`#T
-M!]GWB(YK=K7":#K3Q4F>U5_!+B`C"`````$```#L(P``T&OTWXD0CH>IVSXK
-MDL/;F!G!I_NMC51[T$RLTH.+]!AQUC^D_-FKI8R2NEL<85O1KI8R9$9]:_'!
-MM^`9]8YC[W/8$Y680JH*.$`TUOHYI,#AV2)J>P('>-HGFS^`..W6$JWMR59G
-M:.^SJ36@RE''X3&([T;,E@IQ#F(%*$L;0$4[V0AH&);M!SPWP/`7>=@IFN7@
-M$*7$PVLOIV:85X*J+;A4OF0CK\=MZ/[#Z[8W\RP]\HFY<++$2]+^@X:8O3II
-MHI6S187Y:;Q<!NJJ#E,2MT8*^@0`O````+P````"````10``N%6$``!`$0``
-MP*@!`<"H`0(!]`'T`*0&B?>(CFMVM<)H.M/%29[57\$N(",@`````0```)PD
-M``"`>'7/A71E->'^.5\Y(P@2[Q][-^#Z:ENUF&C":#27O/<VQ^_R*9K\_P:H
-M+,ZL[-9>0J\TJ$)-G3)9H8^A@3]$]6ED;96?%'/*20#BPZQK/D7V'^.D"H,+
-M0$*Q2[7-HN"1WS]"3=OX>AH:_3/ZP*$6:DX#ZF^YI!5,OPH[\5,2MT9?&`4`
-M'`$``!P!```"````10`!&%6%``!`$0``P*@!`<"H`0(!]`'T`00'Z?>(CFMV
-MM<)H.M/%29[57\$N("0(`````@```/PA``#@/<F/Q$TJ&`JRH0_U@*WB%9W5
-M%>/A\->)(N8:1Z]N<=#?.X@:#T9ZBDS%@.\3V&X(NJ%[<!=+/ZRM_PUSLZW,
-M6M:\0=U\><AIU&/3[F;F/9,7V9=:-X2C)D5%,I='")@64:V`AR?MLAQ?PE/<
-MT#IORT'/44#:_\4UBU?#"XHK=T8K65J,78J:V6?Z50S@D)/GB:B6W?&(LS`*
-MKC7P\26>)H!*Q95>H%RE+.+,GB.BSRS&!^UQ$P=S<+-5&0-QZA62N81PPJ(<
-ME26J5,_H&&^Q3L>8RH=D@OCTT^5JA5,2MT8;'@4`_````/P````"````10``
-M^%6&``!`$0``P*@!`<"H`0(!]`'T`.0&R?>(CFMVM<)H.M/%29[57\$N("0(
-M`````P```-PA``#`>M-S`PK'SH>2),GGP3?HQM!R=-21D\=.AVGMA*Y3'C=W
-M<`L[!Y+,>XYOS$YO;)B]AR[.B;6=GK=%@[>ILI5,B`GZX42?.\QG:?T*[6B8
-MD,G>>@!L;ILU^7.LC&>8^NC@*`;GXK(WJ^"]P^,L:Y[T3N"OB"AU4K[$1255
-M[_*J`<AEP\LI?JI*P4;'YZF$7L:S?)"NUBJ:3175BTL'?'V2-+=.2YG*J74;
-MO,=X(&JD#`Z5;O`=":$]R4?4MYA3$K=&:S0%`&P```!L`````@```$4``&A5
-MAP``0!$``,"H`0'`J`$"`?0!]`!4!CGWB(YK=K7":#K3Q4F>U5_!+B`D(```
-M``(```!,*0``,-G&VR3>P"97_,"V2D.8]8W51&?((:[N0ME%^DZGHLL["QE"
-MDK/$%Y5B#ESA4Q*W1I-0!0!L````;`````(```!%``!H58@``$`1``#`J`$!
-MP*@!`@'T`?0`5`8Y]XB.:W:UPF@ZT\5)GM5?P2X@)"`````#````3"D``##B
-MB_II&&-:Z&$@)?34]42=!RI\/3]2W(V^Z#@Z\U#A?H7&>9;GI4UMB-O\<%,2
-MMT;U:@4`/`$``#P!```"````10`!.%6)``!`$0``P*@!`<"H`0(!]`'T`20'
-M"?>(CFMVM<)H.M/%29[57\$N("0(````!````1PA``$`$6N5SSN<;^U>F@)Y
-MS'P-;]A,IYVX>^7W'Q6#P_0C<D-PT7ZO)D[Z.I>S<[RHW,Q!)P%@J=7[_+@(
-MN10B/R%7*IX+(*J4VZU-0`D92#2]^:[.#D@;YZT`GXR(8(]_Q"&/6O[\`+Y$
-MX3$+>1],A+MWD<L[);^O%L4OR[INCET9.J5IG>*V0ZSS#E,*FAF[RBI%%@)L
-M62^`.`R:SY`XDW&,)[;8B)O9W<^GP?-IZX$"6LOT<'"4KT9R@+LP>(K$_?<3
-MO9KDCCQO*W*A5GTC&W*TUL#$(K\K!-8#"]D5LEZ1:B#A[;P%>>%UOLBB6;,=
-MZ_S8DL[$\@A?<W1#R@I94Q*W1A=W!0`<`0``'`$```(```!%``$858H``$`1
-M``#`J`$!P*@!`@'T`?0!!`?I]XB.:W:UPF@ZT\5)GM5?P2X@)`@````%````
-M_"$``."0H*3=O!1YQT)_\"XN_;7?E>*3!=2NRRVMD]_S?B96/9Z1NHIA;0]C
-M#D'#FXYLZ`!YBF24%[ZA@YZ2E_1\[H=-BG;9'8I2YJY7R]V'\\YQ0^J"EP9@
-M]V7'T;Q-7O-GQB5?$T24%5KBEJ/S=BK4%;^3^==]=D^.S\'%SII^,XJC6*]-
-MAQ!0?!<7^YX=II9.Y93:>/1E`>2OEJ2AT$FRQ5O:!YL:]BR<HU#<&HB'&8;"
-M8JREYEVN#&5U3DS`%Y@0=,'_Y$<':#M<3M&OXJ7;<DFP*'^Y;$S21N\IVQ'N
-M4Q*W1E"&!0#L````[`````(```!%``#H58L``$`1``#`J`$!P*@!`@'T`?0`
-MU`:Y]XB.:W:UPF@ZT\5)GM5?P2X@)"`````$````S"$``+`/H;&&W?3TD9LX
-M"-D\#UZF&I[-#YEGRZ)5>!SU^ZFWD<ZGJ6-E\B6['DZ?2^WS\7[#H6.%)8C,
-M:R5EKVBB)-+AZF#4HC>@\Y2H0[L#3F2>I2=&]U!9%Q7D25M*=\3PC`WF#MT[
-M4QM)RS55MLZ]G>7SBC,$N@Q2SC3^24R.H8J$J*/<J],`]H$?E9@5%I3([XTI
-M!L\]5EH=10X^3.W17)0E:M9<X)7%"]N!^Y'!4Q*W1C*H!0#L````[`````(`
-M``!%``#H58P``$`1``#`J`$!P*@!`@'T`?0`U`:Y]XB.:W:UPF@ZT\5)GM5?
-MP2X@)"`````%````S"$``+`@1Z=1UDDAVY8P/<^H&>0B6YA/GXSD@R-%=)E1
-M"U3T+.\ES!;J!K%$/:RTZYQ<-P^&FA\(98\:T6Q_KS_DTKZF-UW$T(:AKN"O
-M)N>F$U9<-V(979$TNIR0*6UM0@'3!Y9:K9AVL`-#P'QR+,+U4@2=5K%X-7-?
-M9ZH#.?4M+?GTX2$L/19`C_J'[?ND[^9KXV\RZ-*T'/6"MHYIPOMR*YXF+('8
-ME[9\#1*2J6BZ4Q*W1F'%!0`\`0``/`$```(```!%``$X58T``$`1``#`J`$!
-MP*@!`@'T`?0!)`<)]XB.:W:UPF@ZT\5)GM5?P2X@)`@````&```!'"$``0"Y
-M`[!AZ)'KAHSDEE][J-<'@0D<?'<K`E(#2?D1?*^KRM$PMH+%F-D<#(#X0I+9
-M@]4(\0O(SK?'?9@O.\Z]1D8['?PK.#4>>GPT]8[OS-E5_+AVMGV?+4:E*]Y"
-M6#P%@C.9$,.=W0=Z`+]U@)*X/,2@:%;[H3HLOCE#)HVSW!*F1Y[GRM\+U54/
-M_M,$"6QN&JK/3+Y=$'9@^`:!-&3ID"_4!+]^_K]*`Y,T?0T[\*CP&/^^(LX!
-MG%LLS@PO3B;L_:_^0M_G?OH7-R$+,0:6Q=#IMLE,?T7/<S299FUA,O1?E;(2
-MRS6NRX2E42C@]U+I&YJ^'A^>;LRL9ODZE(=3$K=&4=$%`!P!```<`0```@``
-M`$4``1A5C@``0!$``,"H`0'`J`$"`?0!]`$$!^GWB(YK=K7":#K3Q4F>U5_!
-M+B`D"`````<```#\(0``X.0*6?C&5](+P6+?0[ZCJZ15#0;A#/)'53\Q=)JU
-MQL;9)`'=_P=5H5/*5&])+0K+<T&DZNNHUUF*WSBK3C0`1-L/<3P=`MS"(>ZZ
-M*:+7>[4QI;,%7NUB@&!<^+7*&W,`-3KUR!BWYK4MD?J7],SZ[LLTJ]RU126-
-M^=:!^H^ZW.":[NV$3;DRU4):KH").`O>=YG[QRI<PECI'.0$L]3:RBD4"#&`
-MV"#+!5=9B67DL@M?>1-E@>IJ4#I:VNH:LMTS[#@XT?3R_SK&",OL@]@:+`"?
-MVLVXJ>B05Z/2G<I3$K=&7N$%`.P```#L`````@```$4``.A5CP``0!$``,"H
-M`0'`J`$"`?0!]`#4!KGWB(YK=K7":#K3Q4F>U5_!+B`D(`````8```#,(0``
-ML*,.7$D4<G=9<+1-,1!V$R(GG(%"IKM0A`X<+P.,=JK(*OLSY`Y),W0LZ._?
-M/(:C6;!AQ6K=9=E)S`5PH#7<PHK"M-V#V,=X75(=\[:/[E6FEUP):-3*G/:^
-MH`8^0DOUK_KN.*&%C6M89<(-EOOOJL%HXY!)6T/%J\)_]FO_X:Z71_`.DEH&
-M1(L0Q4RK>_"=.<$52(T6/B#7^)%N-`)V\Z58\_'WGP56;9T5-+Q3$K=&*`,&
-M`.P```#L`````@```$4``.A5D```0!$``,"H`0'`J`$"`?0!]`#4!KGWB(YK
-M=K7":#K3Q4F>U5_!+B`D(`````<```#,(0``L(J0!F:U[W<C;^D7.-QCW0ZH
-MVHG:<VHFDD<($7FJ^A><RC-\GBIKPGXJ/*D&^WRP_LB'EF0_V5G^\B7^QBRY
-MUOU(KC'Q#2)ZQ`;\<WSOY!'].SB,$/[T/")S5K9@P*U0IR(7JI1YY=.LX:4W
-M`2RP5Q<FU+J#1:(#@JP!EKOBB6J^&8*H+TA($?,WAU%ALYBSA@EO3X/ZA%C2
-M-%MJ3`5#<6I&\7N8Q\.4"V.69)A3$K=&@2@&`(P!``",`0```@```$4``8A5
-MD0``0!$``,"H`0'`J`$"`?0!]`%T!UGWB(YK=K7":#K3Q4F>U5_!+B`D"```
-M``@```%L(0`!4.D*J'I%()1A%M^>LA+W)M%']<5J.(7V2<$%X`[S*DAW7.XC
-M\"WT!ZOB,MQ=Z476QP_X!;Z!M<9"TD2Q89&J4@W"UP%CZ7N@*S4%;<LB!\\3
-MM-V:>9?NASE\=`T4.([5>:W<V=4"2QF?A_W5_[[K`W9<*T--83G*4)EVNJU?
-M)%!3W'#X.0U4M`;<`U5R"D']=FSYA%,B=\MO:'KC!:7X*5D$9IY!9KJTU47W
-M@$$!ONSSWMY&$+M&%!Y&.+`-8+XJ;XM5]@$;3JHAS)N]*C%V(`H+)U;G+,4P
-MR'N#N\M#;IEJSOF<ERS/+95/NCIMJ;-CAOGC\'\@$9N>2`+W>SBU^\7\;D5_
-MN$>M3R.AGC*^V.[,/KY/-.6ZX'%(10NX#?+^`V/6+.M.Y#K';8MQ?MNV,VD#
-MIFK@::<84[K]7'ZH/_(U/JD'GB)@Y8+[AAM74Q*W1I5<!@!<`0``7`$```(`
-M``!%``%8590``$`1``#`J`$!P*@!`@'T`?0!1`<I]XB.:W:UPF@ZT\5)GM5?
-MP2X@)"`````(```!/"$``2#Y*>G6$$LI-)YQCUF)'5UH1W\8_X#-':S9R1PV
-MMW"1+4\^DP06@/RK:5BNA+J)X7`7RV.[A#GQQV*-Z//Z?:K"(][(0^G#0C#^
-M$'FSC9K*XY,9LWW0WL.K:E.;&5369)O%!Z%]8_R2]P<GO_MCNB=^+>Z(`;5,
-MS/(I$CE]&&2>&.8G4Z8YPH-5F'7%BX"4-`R[RICAF\8PMS'KQFKQX^XRL+61
-MCCW*C+7K<DB-(N1B;J(26)KL3'!]M(_QR(PQ0I&WFLN;;NRBK3-SE/E(Y^QB
-M:8+"MENW%73R`"]TM*/.E':@Y6XY9O<EZVOT]OYBS'+ERF`(0QXW8R+?L3'M
-MY8%;:BUJ*B!;/=0;`^(173G7U.D@%T7S8'T4S8Z5'%,2MT;`@@8`?````'P`
-M```"````10``>%65``!`$0``P*@!`<"H`0(!]`'T`&0&2=<ER&B1MTH9&"6+
-M.N>6-KTN("4(`````````%PJ``!`MM(&H5>P:MK;=R[=`FJ%I0U@'Q]ZZ59W
-MHE.AFA!E@<<-S$VV-JB,%)EU'=KO*SK3P6#GBC_L7^X=\P:[4Q*W1E^.!@!L
-M````;`````(```!%``!H598``$`1``#`J`$!P*@!`@'T`?0`5`8YUR7(:)&W
-M2AD8)8LZYY8VO2X@)2``````````3````#`&EL]PO,X\8[PSX=MMH@A0)Y0G
-M3A/RYD8NK]1/`6%:)W=>NCD@V\$OF^4:@%,2MT:EG08`;````&P````"````
-M10``:%67``!`$0``P*@!`<"H`0(!]`'T`%0&.=<ER&B1MTH9&"6+.N>6-KTN
-M("4(`````0```$PJ```PEQ]'28!_6G!#S(7DS_ZA^4-;]HKNQ(4F'9H].0]6
-MWK,2<WYKX[Z5O`K/M!%3$K=&?JL&`&P```!L`````@```$4``&A5F0``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CG7)<AHD;=*&1@EBSKGEC:]+B`E(`````$```!,
-M````,-ORC3E/2%EBG319B=#H:_SB?5U_:I<2-T[)^4B5>J8Q,EH\K\F?-M8"
-MR>-S4Q*W1@ZG!P"8`0``F`$```(```!%``&459H``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E>+Q&\MFYTP$``````````"$@(@@````````!>"(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``X:0$Y0H\7BH+^_/#3D[HL4)W
-M>D7L5_7HV@7Q=.MZ4-&;55!<ZT.P>'6J^+6!*\'!U:U6*\WI_];38EQT`T<"
-M:44U7_MR$029@.:_W3S!"`%;`7B<8'HO;;I`-I=*&I@/B((,HT9'=JC0R_W%
-M3E.;X1!3,!\LYS<7OL:I%*)7==HI```DM,&Z#,]-04CV)6O*9Y<1L//&*T^;
-M?+-K*2+U1/4UU;$I```<``!`!%]>%V@BN8"9K5A/"FAWR!U>I(EJ````'```
-M0`6#V+6N8M`E3"C;RQ>(E"3))]S[@%,2MT;XM@<`7````%P````"````10``
-M6%6;``!`$0``P*@!`<"H`0(!]`'T`$0&*7B\1O+9N=,!```````````I("(@
-M`````````#P````@``!`!@````$777:P2K&F>.SHX":'FF=#:O'2`5,2MT:J
-MQ@<`N`$``+@!```"````10`!M%6<``!`$0``P*@!`<"H`0(!]`'T`:`'A7B\
-M1O+9N=,!```````````I("((`````````9@A```@``!`!@````$777:P2K&F
-M>.SHX":'FF=#:O'2`2(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``X:0$Y0H\7BH+^_/#3D[HL4)W>D7L5_7HV@7Q=.MZ4-&;55!<ZT.P
-M>'6J^+6!*\'!U:U6*\WI_];38EQT`T<":44U7_MR$029@.:_W3S!"`%;`7B<
-M8'HO;;I`-I=*&I@/B((,HT9'=JC0R_W%3E.;X1!3,!\LYS<7OL:I%*)7==HI
-M```DM,&Z#,]-04CV)6O*9Y<1L//&*T^;?+-K*2+U1/4UU;$I```<``!`!%]>
-M%V@BN8"9K5A/"FAWR!U>I(EJ````'```0`6#V+6N8M`E3"C;RQ>(E"3))]S[
-M@%,2MT9FZ@<`4`$``%`!```"````10`!3%6=``!`$0``P*@!`<"H`0(!]`'T
-M`3@''7B\1O+9N=,!2N_$VD8G&DLA("(@`````````3`B```P````+`$!``0#
-M```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``"<;
-MH7ZMM1R4'#/&V2YK<C/G"/(1:`''J]PP/6X5-Q>-G2')?M$&9/UWLB$XRJF<
-M9LU!JJ:3ZJ@;K<$Y"-CY>*=*WFY2O*)@;L7G4+DD$K(+%U=.E9C&OC,.CP8.
-MK7Y,B!KO;-T*K'J4PP(R]>06@>`,:=$FED+A"3FY0!@,ZM,4*0``)([]B@`.
-MV*K84M.IZT90@S[3BD.$4[F"UM(>I^:KVZKC*0``'```0`2:?APXG3GO]4&G
-MH`;TK]=#+C?])P```!P``$`%'/Y9P,],8VY\_?<3%W\9.WC^SYA3$K=&M1@(
-M``P!```,`0```@```$4``0A5G@``0!$``,"H`0'`J`$"`?0!]`#T!]EXO$;R
-MV;G3`4KOQ-I&)QI++B`C"`````$```#L(P``T)52R[:II9DG"HH/)2RA@-/U
-MI<Q&AN>SE!P^P19W/PR5"1W+^R-QBRK+(QBB=(5U:$L:&WJ90CB.L;$"LK$%
-MX@\ME:NF#KQ\?H"H1'*;AL36MM6P%XI9JBN`$>\M9HH:LA`ESL;-?S9QXX@-
-MD3C\AC?=%,=`U;G&]E"4Z*)_`<`R9)F-L'-H4#1F,#"GJB1YU0&I+*QU@Q8`
-MF"IK'H'K0&EM%J7:!P3O44D,T'O+\'\Q<H;JH/0;$""91<'HFO^%;[M;X6>*
-M6]6F.5#23U,2MT;#,0@`O````+P````"````10``N%6?``!`$0``P*@!`<"H
-M`0(!]`'T`*0&B7B\1O+9N=,!2N_$VD8G&DLN(",@`````0```)PD``"`ZHW7
-MP0/$&T\;T_Z[??)@JE2.*22;!^\2=&2'^$5O,9'P5N]U@O//\V>W-RA'&-8#
-MX"1K(R_<QVV_<.!6E^4CR47III`*?OE^*36SH1DO[N'?90?BM7'=DC+.K%>E
-M:/SB,(<43,`7MVA6B>#$YWL(Z_S,.-P=BCIQF@/VD5,2MT:Y4`@`'`$``!P!
-M```"````10`!&%6@``!`$0``P*@!`<"H`0(!]`'T`00'Z7B\1O+9N=,!2N_$
-MVD8G&DLN("0(`````@```/PA``#@(?!JP$V0^KI?'W9.M'W@ZF0@D7$Z\%9`
-M9VPY4LZPDB4JI=WD:3)RRE;F>\..54&<+?W3O=EG<-7H!J*=[=L$>Y^&+G*9
-M:#0STV20RNL@S3T5/H*<:*"?G,1;&/J$O$<FGP@UA&.P#@OBY7'=G/T4@#16
-M"$,?Q&._OF13KO;B=7`W(8)?1[/Z!4%@5&;NV+20=;2TO6A;IY&>6Z34<Q0?
-MQ0A[]^=2-7,>$#MS+A%Z)V7L^H:9<EB6S$)_\!(GR>^M&=K(V\^G*U06VI"M
-M4NF1-21+%W=IDK<`I>Y+S%,2MT;26P@`_````/P````"````10``^%6A``!`
-M$0``P*@!`<"H`0(!]`'T`.0&R7B\1O+9N=,!2N_$VD8G&DLN("0(`````P``
-M`-PA``#`%DD!$",=@1Y&.**3'YX_>#"$":9$NM<*JS10"KC_S-[_%S+CI8%D
-MVS<&U>#5,SG4P0%SO7<N8('W"O\=<&7.$-<-O^'&ML3#I6?3!]_TCFXS"5P7
-M>NV4PK(ZLBFGBR_Z@>@8N$)#%W$2MY-J6OW?[/XC!;..,7_&D>.\9`-_.5D&
-M.&JFP;TXCZ7WU1"G$F1BF'9DRUWE]8Y,$'X&(*5/8][B<8*?8_D3.>++A8XG
-MZY0?>@-NQ9EY'\1M;D)3$K=&AF8(`&P```!L`````@```$4``&A5H@``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CEXO$;RV;G3`4KOQ-I&)QI++B`D(`````(```!,
-M*0``,`0VS,2UR`GZ$Z-;SB=NGT+%AW+7%(FX03:-V7^%.EVHT!T:^FQHH=$I
-MR&'Z4Q*W1H>""`!L````;`````(```!%``!H5:,``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y>+Q&\MFYTP%*[\3:1B<:2RX@)"`````#````3"D``#!I#]L_RR@(
-M5J"'M\G""L`5;^Z6#C2=E]Z>G4!G$PUL<??2Z_D!?S4[O@?!B5,2MT81G0@`
-M/`$``#P!```"````10`!.%6D``!`$0``P*@!`<"H`0(!]`'T`20'"7B\1O+9
-MN=,!2N_$VD8G&DLN("0(````!````1PA``$`^F_%Y?`![&?8E$6KKZX8Q,R.
-MO8:GO\]`TB9%(5.[JNDLM`197<U&D09[.G["Z-%5!UCQH+76U'S(=YKVEEP#
-M`S%`RUXYE#BU$;F**!TH^$_M7M360*\+`+^JXAZ\$<^%%BT69FD7(1K@'@89
-MA4_/,DD%6O!68LC4GZ#9"_H%7?%HT/=HX,8(*UFB!_X2P1CC,EB;&\7?O94$
-M=\Z]?"*LZ=M:);JS>2J^SO>U\PVL(Q+(2C5;Z\"4<LJ7C$9^Z6`\\4HL$K.(
-M(K[_5&_\O;B2D*FK",Y2%P$?'?7@EI91;2\`Q-&:BXA.)D>;BE6R0)!DX3:T
-M:!3,4H(C'?:Q4Q*W1F"I"``<`0``'`$```(```!%``$85:4``$`1``#`J`$!
-MP*@!`@'T`?0!!`?I>+Q&\MFYTP%*[\3:1B<:2RX@)`@````%````_"$``.#J
-MB.,CN9]S8X7@D0^5S#,^=H_H]SM9\_:/:\M@[2$+)Y`/D*2K..!_(A(8.H^L
-MC4W2(44\9K,A]&)N1<BB-P%)^%YL[.4^C\-K=;WNR0X.,5C^.25?$^#*GJ(\
-M[8\E/-=@PD03@%<,^GF<:D[&RM)(AQ&]$GGNOJ^("WUW1H'7V2FD=GI=A`9-
-MJ_OHB%Y@&<'U<]Y5BK6`=<(B-VD1C$F);>12N]:Y/N]B3:VW%>:JM-<JG1_3
-MZ@`/NEP?%#6GDPZ`#(868)T/^`LH>IU.[NRYOF2X$T5#:);@TN8P4Q*W1N6X
-M"`#L````[`````(```!%``#H5:8``$`1``#`J`$!P*@!`@'T`?0`U`:Y>+Q&
-M\MFYTP%*[\3:1B<:2RX@)"`````$````S"$``+`#-)!2^</FK2:0!J^MD#+D
-M6+[D>H9DI?=\%<&&?,-[5!*B:]MU`P?(^9VEDA"?<.0Q2S)HI6.8C!&J'4B@
-M)/)4F%G6<:Q8/B:-,[Q@:P3@A)R`U1`3Q1OWE0;8X8#3*X<4G7^QVRH4H0:D
-M:]NYFR=T_]HHV]":8#:^#)V95OD$1WBMY+0+U2?,I..<:ZHNVK#I3B$ZTOR;
-M81$<9TUB5SXWDHL&&^D"X+(C_B3^4Q*W1A;;"`#L````[`````(```!%``#H
-M5:<``$`1``#`J`$!P*@!`@'T`?0`U`:Y>+Q&\MFYTP%*[\3:1B<:2RX@)"``
-M```%````S"$``+`'EK'S5M'0-9QAY&X26]0!:Z70L4ZE$',#+]9*J8GF'%4/
-M@\R^,9!*4$8_^6=F5O;JJ:_L'/K\A,$#6='D.MM>57J2N'F[\1_/234\,H>'
-M?F^8R?@94WX.O66Z8="7+&IO]:F39=QZY*+;@$0[V*.R<L2J@->J3W5L&F$<
-MNO50O=W,A@UTU+$KT/K6!5)#F1.4Z868+4-D@6+_Q`3)S-\\;@R^#7YT08%]
-MD*.;4Q*W1LGW"``\`0``/`$```(```!%``$X5:@``$`1``#`J`$!P*@!`@'T
-M`?0!)`<)>+Q&\MFYTP%*[\3:1B<:2RX@)`@````&```!'"$``0#NC2,>)D!8
-MBN$Z$ETLZO+HH\W"/*&YHJ5+Y7'.*QLL+R]#]\END%;A+#N=`186L<U;*DZ.
-M.5`:@MWJG37[9M;PE=NQOXL?"58K62(-+RE1.:>_?:YS_DT(ZJBA8CTHX"'T
-MN5;48E3IBB>L)P'R';]]8D=4SE.PJ6`$<7.RP/^)*E2'YH?_:;BQ4_52LGJP
-ME,77->[T\S4^DH#)#UV/3JT#\/U[/[H1*^R1SD\+F+NT![5#_"R/)C$810Z3
-MQ`$CDWTFT59US[LRX\<MCN)>EUZJ\E0!04T4*20A]J:)>>`LO0%?J9@YQ_$D
-M.LW&2OW7M!:9OM39+(W++>`!!P]3$K=&;0,)`!P!```<`0```@```$4``1A5
-MJ0``0!$``,"H`0'`J`$"`?0!]`$$!^EXO$;RV;G3`4KOQ-I&)QI++B`D"```
-M``<```#\(0``X!49V'AP:RK9/+4NA[`[L&WC:JFI7Z^9,/0^BDK'>P_/NDW3
-MJ+RUCO&8"WK?HZ,K;M@1>Q38FO[&C=.SOV60R.P3AC<1EY5R$=%-A_T69RV$
-MPJUMN.WJH3;K5%J3R-SBVM?^B]&O%/1$&UQ>('LTTD"6C/L7>.556L+7?S_X
-MQ2#+]UP9L8FQ@:\/PS7[=N/?@*Y4B=,<9NH.592?'0O67HN?9YU5W6YQ82B]
-M4A'^-6CCVLAD#G1;=-&H)ZF"-G,*D<Y;NF&`S:*J_F6\U?TBKLX>\6T&S_P-
-M*#U+TNU3$K=&ZA()`.P```#L`````@```$4``.A5J@``0!$``,"H`0'`J`$"
-M`?0!]`#4!KEXO$;RV;G3`4KOQ-I&)QI++B`D(`````8```#,(0``L$;\/M1W
-MA_`BA4TYU8\?-TZ/T'PP-FSI$32@PX)'IH%6)WQ0O/!.5QRK]H=/\>[HE@^3
-M^]1L-CI5G@[E\>*+-C#.7-\RL=59<[N)T9K#51&AJ0D]>2!JZYH4=:<BV-C/
-M8])>H.=6>7C5EW`+T[*UGGQ=BU_UWPTO<$;3;#)<2B_[C@(Z/4-3C)%=H$>L
-M5OB*(2:RO>.!D?G@=TR.@]*8<<5<6_!<?4KA#NH^IC-3$K=&@S4)`.P```#L
-M`````@```$4``.A5JP``0!$``,"H`0'`J`$"`?0!]`#4!KEXO$;RV;G3`4KO
-MQ-I&)QI++B`D(`````<```#,(0``L'8"QB>QX!F\958"B`:#,%4*FHX_96/-
-M&?5#1G#1KH<C(6.(6\I@L4=HPEWD"$*MJ1?AE:RLV>/A-/75ILVX$#TKP').
-MSBL,Z,0ID"'$79#RZEZ[R,&6!C>#)IBWOZ*4)2_[FED@!9X2GZC=]4$-T<T3
-MT6T8+WES(G"&$-S[LC%,!7>64$_UK[;R6V`O==BMH?O#@M0[(Z6'C-LR38[O
-M,;]N:>-=@4L9XNQL=J13$K=&W5L)`(P!``",`0```@```$4``8A5K0``0!$`
-M`,"H`0'`J`$"`?0!]`%T!UEXO$;RV;G3`4KOQ-I&)QI++B`D"`````@```%L
-M(0`!4&D?")V9OY[R4]G)8Q"%%Q4JLE563R2Q&NNK4=,)6:>?421Y]*Q&Y/?.
-M)E!))=[UA#`9VM35D1E82I3$U)45V;3I\]0&1$'V+K&F4ZA',QIDG;_YJ>"/
-MC(14I$@&ZG<&)XA$5*$Y91IN.M49\[`X*^H$MIQHV$PLK&W7L"CF6?$_"Y<P
-M=:S@-/!;[&>VT8#1E%AI_D1?9C-5UC"C`#PO'ZRLT>K%#-;U/;]Z$3?Y"J&<
-M$>`&H<7*H__0'K8WF205AI10)727&YZI4$84V0)(;R1:)S2`00`O&U%OF@;B
-M0>,II;$3.V77O-ZBM01CP]M7^^*!<_62RV%\:1K,1%Q&\4+B#C/=5&,\<L@A
-MMG(N^B$YH_8&H7S>GD&RVN2N3!37U-V.".%6O=YQ1NEI[6Q<*;3QP>C%`:+A
-MJUZ2.R;LU".I(#(/@7[ZCU"[H`[;4Q*W1BZ0"0!<`0``7`$```(```!%``%8
-M5:X``$`1``#`J`$!P*@!`@'T`?0!1`<I>+Q&\MFYTP%*[\3:1B<:2RX@)"``
-M```(```!/"$``2!?9OM;Z4:%9*J/\<Q,J#=?O5R#YPJIL7(Z2>$LO%W)Z?!F
-M<*TX1BN:D<#E^K_P*G>BX*B6P/C?3H8)NK$$S%N>V*`]NP63GCTF#NN-Z_6N
-MEE(PER;&$/RB=20%R;?S5);8S#".V@]UU^U&O,YUS/`I3LC61A>2AHTNB`.N
-M/:3*AZ<A0>MF`@#IL8@KS%/UM-O5DKT\65&$AG04%IBYJG!"H9S.7T$Y;?='
-M;M1A*$V#"PJ@8=WTHMSI%[L4M#[!G4_8@:A$*@5V@,I4JCWX?FP!XL)5\IL;
-MR;4886.<SD:K=/I5"='/7CA:KYP"><QI(>%>,.@K^?-?AY/C.;P>*S:+P22\
-M?Y,M?IA_7MC1&=8+)30E[+*T$<)P/.3<'E,2MT:NM@D`?````'P````"````
-M10``>%6O``!`$0``P*@!`<"H`0(!]`'T`&0&25[3?=#I72X>/J@R6%]&F%<N
-M("4(`````````%PJ``!`)#T.&*69WX)$FQS&.F"+81L0Q$D>Y4<R)N>3=N*=
-M-B/^]8:YDKP\\8)8VF@4Z7\[0B,#-@.#U_G?PMYK4Q*W1CG""0!L````;```
-M``(```!%``!H5;```$`1``#`J`$!P*@!`@'T`?0`5`8Y7M-]T.E=+AX^J#)8
-M7T:85RX@)2``````````3````#!K^/9I^B=%'>&]FM6I`$MIB^WWZTWU;%:'
-M<K<-#(]H^42*`";IUPU:)#"2$5,2MT;!T`D`;````&P````"````10``:%6Q
-M``!`$0``P*@!`<"H`0(!]`'T`%0&.5[3?=#I72X>/J@R6%]&F%<N("4(````
-M`0```$PJ```PS$JY(0AISGW2;O^`^3.IR754YFIF@,&^+EK'T=+ZA@U=Y"@F
-M.0<Z_7T4`?A3$K=&V]T)`&P```!L`````@```$4``&A5L@``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CE>TWW0Z5TN'CZH,EA?1IA7+B`E(`````$```!,````,.%3
-M)(^9B6RGPVX\!=KZ,;N%8_,EW2U9BH*R?3I9/5':5TG1GJ,C`YPN6_(44Q*W
-M1AC<"@"8`0``F`$```(```!%``&45;,``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M+)%1F[&JB&P``````````"$@(@@````````!>"(``'@!``!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``XQ?;4?`0P*!KDHLOO9)I_$,U3TJ9*XSL
-M9(B5,,_7)[MS@KF0XW(#39N@Z4^@KSW5F/VV=I,;9\Y()T-,I]=W5B37Q.21
-MRAU4?KF3>MSK_H>+MEK%KC_F^8*B@M3<P0BWT7D=>X#E(1+T,^*._T3OJMC#
-MVQE>P+'Z*>_SJ"0Y[)8I```DP&BT^3K>S?^_3EH`W[Q->(:#IIZ7`QG49A]9
-M&(")%'@I```<``!`!&&=F>%1`547X6IY>]'$J=;6E?A7````'```0`4YV4PZ
-ML.='L!JC*KDX47H5O9V4XE,2MT8W_@T`F`$``)@!```"````10`!E%6T``!`
-M$0``P*@!`<"H`0(!]`'T`8`'92R149NQJHAL```````````A("((````````
-M`7@B``!X`0``=`$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``.,7VU'P
-M$,"@:Y*++[V2:?Q#-4]*F2N,[&2(E3#/UR>[<X*YD.-R`TV;H.E/H*\]U9C]
-MMG:3&V?.2"=#3*?7=U8DU\3DD<H=5'ZYDWK<Z_Z'B[9:Q:X_YOF"HH+4W,$(
-MM]%Y'7N`Y2$2]#/BCO]$[ZK8P]L97L"Q^BGO\Z@D.>R6*0``),!HM/DZWLW_
-MOTY:`-^\37B&@Z:>EP,9U&8?61B`B11X*0``'```0`1AG9GA40%5%^%J>7O1
-MQ*G6UI7X5P```!P``$`%.=E,.K#G1[`:HRJY.%%Z%;V=E.)4$K=&M/T$`)@!
-M``"8`0```@```$4``915O@``0!$``,"H`0'`J`$"`?0!]`&`!V4LD5&;L:J(
-M;```````````(2`B"`````````%X(@``>`$``'0!`0`,`P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``#C%]M1\!#`H&N2BR^]DFG\0S5/2IDKC.QDB)4PS]<G
-MNW."N9#C<@--FZ#I3Z"O/=68_;9VDQMGSD@G0TRGUW=6)-?$Y)'*'51^N9-Z
-MW.O^AXNV6L6N/^;Y@J*"U-S!"+?1>1U[@.4A$O0SXH[_1.^JV,/;&5[`L?HI
-M[_.H)#GLEBD``"3`:+3Y.M[-_[].6@#?O$UXAH.FGI<#&=1F'UD8@(D4>"D`
-M`!P``$`$89V9X5$!51?A:GE[T<2IUM:5^%<````<``!`!3G93#JPYT>P&J,J
-MN3A1>A6]G93B51*W1@`-`P"8`0``F`$```(```!%``&45=T``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E*,$P]NS/%S,``````````"$@(@@````````!>"(``'@!
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``DL>HR!Y7IBP,*-@E
-MD$$1/GM`)#VQN+F[T^F21N>:'W>C5JLN<^6RJI51,#POEL[+E!*M[2S*$#\;
-M3"#T)1R>"V&1'1"Z+.U;WA^)0O\^.IS3O?*#`F7PZV^3+KWWA0[\T_:6O6P?
-M&^I`B;FVJCWQ:^%ALFIL@K6T%B5)LCD],R,I```DQ4AV,6@B@TU=\+W9CN9*
-M.E)XUVT[Q$3QT@ZH1!*]?S4I```<``!`!'VY,!_24)D1^,U[Q;?XQ+NK1695
-M````'```0`7,ZP(4(VWF*-_0DC.2^-B'^6TFVE42MT8)-@8`F`$``)@!```"
-M````10`!E%7A``!`$0``P*@!`<"H`0(!]`'T`8`'92C!,/;LSQ<S````````
-M```A("((`````````7@B``!X`0``=`$!``P#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``)+'J,@>5Z8L#"C8)9!!$3Y[0"0]L;BYN]/IDD;GFA]WHU:K+G/E
-MLJJ543`\+Y;.RY02K>TLRA`_&TP@]"4<G@MAD1T0NBSM6]X?B4+_/CJ<T[WR
-M@P)E\.MODRZ]]X4._-/VEKUL'QOJ0(FYMJH]\6OA8;)J;(*UM!8E2;(Y/3,C
-M*0``),5(=C%H(H--7?"]V8[F2CI2>-=M.\1$\=(.J$02O7\U*0``'```0`1]
-MN3`?TE"9$?C->\6W^,2[JT5F50```!P``$`%S.L"%"-MYBC?T)(SDOC8A_EM
-M)MI5$K=&E7<,`)@!``"8`0```@```$4``9168@``0!$``,"H`0'`J`$"`?0!
-M]`&`!V4HP3#V[,\7,P``````````(2`B"`````````%X(@``>`$``'0!`0`,
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``"2QZC('E>F+`PHV"6001$^>T`D
-M/;&XN;O3Z9)&YYH?=Z-6JRYSY;*JE5$P/"^6SLN4$JWM+,H0/QM,(/0E')X+
-M89$=$+HL[5O>'XE"_SXZG-.]\H,"9?#K;Y,NO?>%#OS3]I:];!\;ZD")N;:J
-M/?%KX6&R:FR"M;06)4FR.3TS(RD``"3%2'8Q:"*#35WPO=F.YDHZ4GC7;3O$
-M1/'2#JA$$KU_-2D``!P``$`$?;DP'])0F1'XS7O%M_C$NZM%9E4````<``!`
-M!<SK`A0C;>8HW]"2,Y+XV(?Y;2;:5A*W1E.%"@"8`0``F`$```(```!%``&4
-M5J(``$`1``#`J`$!P*@!`@'T`?0!@`=E?6!^U()9U;4``````````"$@(@@`
-M```````!>"(``'@"``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MDJ#1:713(^`,5-K40>[29;JFPDO03M2#C;<"U$5H6TFNUQP5$SI.IW6#J<85
-M/.KU%#JE;E@&V3RSEK,C2K8:`O)2A6R-:7@A0"3Y7QPG6?!%)IN0YC,VQXK_
-MS%`#:/U,JG=],I>`OKK>[&VZU9*N4X$DTSAH*R.=YQ!8G$68$X\I```D9#0A
-MW!1M\,&1WV!V6K&16TPK]#R'2;J9YO7;,@Y?7!PI```<``!`!"1#Y@A+%-M:
-M7,A;@+W'<XDU-B-,````'```0`54P4&-8:GQV]4\\>B]FFW8#7B5@U82MT94
-ME`H`7````%P````"````10``6%:C``!`$0``P*@!`<"H`0(!]`'T`$0&*7U@
-M?M2"6=6U```````````I("(@`````````#P````@``!`!@````(@6O$4[TU;
-MRF+SUH<D>Q(MI_%P,582MT9BI`H`N`$``+@!```"````10`!M%:D``!`$0``
-MP*@!`<"H`0(!]`'T`:`'A7U@?M2"6=6U```````````I("((`````````9@A
-M```@``!`!@````(@6O$4[TU;RF+SUH<D>Q(MI_%P,2(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``DJ#1:713(^`,5-K40>[29;JFPDO0
-M3M2#C;<"U$5H6TFNUQP5$SI.IW6#J<85/.KU%#JE;E@&V3RSEK,C2K8:`O)2
-MA6R-:7@A0"3Y7QPG6?!%)IN0YC,VQXK_S%`#:/U,JG=],I>`OKK>[&VZU9*N
-M4X$DTSAH*R.=YQ!8G$68$X\I```D9#0AW!1M\,&1WV!V6K&16TPK]#R'2;J9
-MYO7;,@Y?7!PI```<``!`!"1#Y@A+%-M:7,A;@+W'<XDU-B-,````'```0`54
-MP4&-8:GQV]4\\>B]FFW8#7B5@U82MT9>R`H`4`$``%`!```"````10`!3%:E
-M``!`$0``P*@!`<"H`0(!]`'T`3@''7U@?M2"6=6U<SK\U^+,BE`A("(@````
-M`````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"
-M````"`0```(H``"(``(``&MLU*_78^.G/X7X%M2.WX&B^"3=0'5+AZ]Z+*R:
-M(>*ALTU^%CPR2W[F.R!:W?'!EV0*S>[J:=>W$SY^)?_XA&$5I4_$ZL<8$R57
-M.L=.*]O:0,O4NJK4%[TM4""R6Y+E')`"3>'>W2`NM%5,.Z0^Z4*>D_G^+0Y8
-M`W$]S5;G9/$/*0``)#,0:W/^$W*XWM*QG!2,5/SB?3Y<DLQC51O;^-$3+C/M
-M*0``'```0`2_M7SD5D0^LO-*\[%ATQ8%I)8L%P```!P``$`%[JOY5@(,6B.X
-MLC__OL9OHEJ6_?56$K=&Z_4*``P!```,`0```@```$4``0A6I@``0!$``,"H
-M`0'`J`$"`?0!]`#T!]E]8'[4@EG5M7,Z_-?BS(I0+B`C"`````$```#L(P``
-MT+FP3?$I$Y?U(L_:WPDT4S#-%$0Z@=AV\A/YFZ[1@"HHTI^,NBE):[8Y8D,%
-MG3/]9&"8&ACW*J]CLZA`%G>^;-%[<*<*4>4L]VLP,`,U:9@6**@SVQY>.8*X
-M'EV&S;Y)=P=(\^%'I*(-.F5*F%8>_&P;\`O?=C+>,.*,'6TW!2S20]Q]\;.%
-M#Y@,*[]_Z8\.A3%_2?,ZP5BYZ_JO='ONJ"O&^FW-Q<)JL"Y@<'R$]J@6/'RY
-M`%&@"PO*%@9NIHX>2$*&W;#(<I&0R.O:1E82MT:+$0L`O````+P````"````
-M10``N%:H``!`$0``P*@!`<"H`0(!]`'T`*0&B7U@?M2"6=6U<SK\U^+,BE`N
-M(",@`````0```)PD``"`Q8Z+U<.H>@MQ,*I_8)3)"P5734;N9AB+X`!6.30)
-M+9';#-]XT=Y>H`VMVY:7=.B/&2>MA-P+=^,L'2S)]*N@V!KLR(_X;9W*>L\^
-MO^Z>,DJ6H1[CV7*;%TF(W`@2P?`$-4[7Q2?$C?)`U]7X?0<NG0G3-[Y>("XX
-M.2%.6582MT:?,`L`'`$``!P!```"````10`!&%:I``!`$0``P*@!`<"H`0(!
-M]`'T`00'Z7U@?M2"6=6U<SK\U^+,BE`N("0(`````@```/PA``#@7>\5"W#<
-M*SD'TL:([`R"J1B*6;6#X`7/:.G#6SJ^ZIH)"6HQ#!\XC#K*1?=C.E2`,$8P
-M+?Q5=JNLA@\E]RFI8!F.6X&>*7O3:UA!W<=XY)^>GV^($?>>P/A'L4Z]EB.L
-ME)U6)^'[>VQW@F/\[84#?$?K1-86JU$HTE;.F%1^[;;DD=`GE*D7_PNQ3#16
-MTR1?/=">OV*"O-D>.#+QDK#3]2EEJ^[2HJ+/A&WDO/TII"K/'`_59G)'ZR5'
-M%'06FF]SGC/.MK'*,J(?AXAO=@;,%K>L!$4?2BMKL+<(E582MT:..PL`_```
-M`/P````"````10``^%:J``!`$0``P*@!`<"H`0(!]`'T`.0&R7U@?M2"6=6U
-M<SK\U^+,BE`N("0(`````P```-PA``#`,H-NLA@R:#OUXR^2JN3J7[*VD*I4
-M-6A!+K_LHH+DN&R50<698]B4BI$*'Z3QX%N"5RVZL8)%"M<W\KB;$GF;7*#7
-MSL0#+P(R"5]@W%<SRDU>0LPT19,'(EKNAN0H"<8I3C,(B3(G2>SM_WUOPC.(
-M0>AL%\)F)2);%)W&':OR942M1K#+-$$'E[XR%9^\(>/.5MWD`MVHU#=):)_?
-M^S(3GB+P8+;2--#K+Z\]_!.DX"8K]W+AV>UUEBN!)-Q6$K=&.$8+`&P```!L
-M`````@```$4``&A6JP``0!$``,"H`0'`J`$"`?0!]`!4!CE]8'[4@EG5M7,Z
-M_-?BS(I0+B`D(`````(```!,*0``,*Q-PU5PG$:'J=,)S)K?5KUKV1&QX'9<
-MR\5/%[0[ON[H^"W5_4FZN-.DU-(+5A*W1B-C"P!L````;`````(```!%``!H
-M5JX``$`1``#`J`$!P*@!`@'T`?0`5`8Y?6!^U()9U;5S.OS7XLR*4"X@)"``
-M```#````3"D``##4JX&=3IWB]/<VD4A"9@,D/FUD+2.>_U*\)0,$3;RAWH<(
-MLI!C!CV;0#*.;E82MT;&?@L`/`$``#P!```"````10`!.%:O``!`$0``P*@!
-M`<"H`0(!]`'T`20'"7U@?M2"6=6U<SK\U^+,BE`N("0(````!````1PA``$`
-M.>MRP_#]Z&R0ULR1C\VF,A#TA,N]Q]^`$C[\_`C&$T8:.K5/X?TABDAM[NR^
-MKD'W@1`.%8P6KCH#1;:&[?E4[Q._W5O,EX=P371$N0J(.Z,5P;9W8;Z!98"Y
-M/)H,HQ+`T<^UHEBFQG_@>XFS*I:7^71]KV>\A'(")48IJOBFH)GC,!$_WQM3
-MQ2,+?DFJ%P0S,T3Q7=JLSDQK[+IA7]^)$`"RCO,'6IU$S#8V;U'=4#X3_&%<
-MY?ID!HL^A+P_5.]=&"$P6H&3>R2\`D!OJ&'CPR`GP%WYE2RFLLX6(3XDD?(/
-M!<ZJ?LX<1<OIY..*6CB_2C3/'0!0=[B!LF1T5A*W1F6*"P`<`0``'`$```(`
-M``!%``$85K```$`1``#`J`$!P*@!`@'T`?0!!`?I?6!^U()9U;5S.OS7XLR*
-M4"X@)`@````%````_"$``.!NJ//CA@Y>/H487@G53\9XA![IEL9K79H[:[_T
-M9F'4!7L<*A"S*AWY%V7*W/C)GMM`T[Q.[,P<V?E_LLV6R@K1JYQ1.5L:C7^#
-MAHTMO>?T,%[$`YLF<&?,?I1-?FF0B<8%#1``3$Z!?]$NP\^RT%XK`PK!BRAI
-M'S7"^-9;!Q_Q0!A;(A,UBP*EQ=3VB$]&RY?OQ166DPA*B%[>#44[DR]3SSCU
-M"OP4H'1P$F^]E([L!N3A=A64#"MR@;]K!G^K@40E?R5A_"?)S1ER+S@S.[Q^
-M.4;`@B^$'9NGW0(I5A*W1B::"P#L````[`````(```!%``#H5K$``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:Y?6!^U()9U;5S.OS7XLR*4"X@)"`````$````S"$`
-M`+"<T;_3L_R>&+1MM])JHU$U%9T5[:0EI](-*$2)KKDD4F_K"=JT[KJW`,@N
-MS5\8"]/0[G"H!2,M7<?P%L,Z0K;2@D>0SA':"$?_K`2HMSB@BL+.UEC8R`+)
-M2L>#@W.$D7369;Z_`?MU2(;F;-N,N@\M9"A)AF95Z$Z.#B(]"JUB5\!V**[+
-M*MY:7O50OR;TK*0%)^$<LO9]^;<T4])12FWKD#R;18'&^Z8E.&I!5A*W1J*]
-M"P#L````[`````(```!%``#H5K(``$`1``#`J`$!P*@!`@'T`?0`U`:Y?6!^
-MU()9U;5S.OS7XLR*4"X@)"`````%````S"$``+`HW?"._^\,Z[BQWYX:M@H/
-MYV>\YGG;8QJFO3JX/*@\35D-"60U`TJ'=E.B*%R'[,JIXD>._*DO75?BWRN)
-M5I[.P)AS%JQM-%C1:N1^V`".MLE"4_-K!93?R3D;5>`Z2,HP'>)BC4OS51D3
-MKLWI#84XU66Z\N4_:SJ"<W=F)\D;!%6@=;7F1Z>/E+&?6Y5680CFNK+^!11`
-MFD6[JGFIVPB\D?_WB3;Q-4P)X[*:5A*W1I?;"P`\`0``/`$```(```!%``$X
-M5K0``$`1``#`J`$!P*@!`@'T`?0!)`<)?6!^U()9U;5S.OS7XLR*4"X@)`@`
-M```&```!'"$``0`S!PQ^M?B#S37HXP/=9E%-FV-ZMK$1>4;[+W_9'!3V62`8
-M"1PU9<ROTRBU'S!TA]@"_0:T6K?:1O&&9-;J&@($%`R=E2.MJ@"K-QPTF8+G
-M^JI"S319A5"0$4[EJ,"G.-$W"I")%6<7E)[_['&:[_8^G.O&^],4%CNY%=W4
-M"3?L)`S4P\`2@.=G`@++:C;*X5M\%:']F(4O]9%+5$Z(RE5JBF^V<K]XLDHC
-M"-""E6&AR8WF1F#WCQI>;Y/=GM.G`=Y#\NU\WVUPR!2.`YYY-9HI(*WW?U!=
-MI-IY9*B_>'GDZ!*.P`HBL39*_)'SG.XJ4/ZI;W#":"B<4.KQ,^Y6$K=&4><+
-M`!P!```<`0```@```$4``1A6M0``0!$``,"H`0'`J`$"`?0!]`$$!^E]8'[4
-M@EG5M7,Z_-?BS(I0+B`D"`````<```#\(0``X-`+9=P_Y0F7`.$O0Z\95S+G
-M%Y7X?A:G;@'&)=MN&$?WPFVCGFP]!JL9R8Q"W\82VL'5$IO*`,52(95Z@LQ"
-ML>3PLG=F`>EK=WR3]`CD`+(6>('YRQDC7I\WLOC0=ASMR5N"F*`1KV>I(^QG
-MZS-PG'9=S%9J)D993Y^%_Y?U,503!BK4+@(.@A]41!FJ_V224MJ+KU6+JMMO
-MF_"3J9B?PC')L:H21T7[O&4V0I:=9"3GI'0AW?PR,$\%=BS"-/;BUAL]_D$?
-MP.O'*D)/FU,D_X(_F6N3)L3ON6@J#!A6$K=&@O<+`.P```#L`````@```$4`
-M`.A6M@``0!$``,"H`0'`J`$"`?0!]`#4!KE]8'[4@EG5M7,Z_-?BS(I0+B`D
-M(`````8```#,(0``L)-MCFD9GIZ0XB[Q*`>3P3(!$C&DIS<`P(5//W;,5X!X
-MY*U4[%YN+8!^,"]!O4W_;%BL!/7@-_5;_S.$1"!\.U,DCBW>=,:?6-S3L7.H
-M(N`VK"N8+Q;?X4WNPKT8V>:POW/!)DT1J\6E\[1K)L;8Z+-^@6@O:8#(C/N?
-M*OAY&'U\IZ'DE#]0J`YC@-EKCR/I=[>*N+T_#J<0,_J-LG.:6+>PW35_$KZ9
-M*9"2=`I6$K=&)QH,`.P```#L`````@```$4``.A6MP``0!$``,"H`0'`J`$"
-M`?0!]`#4!KE]8'[4@EG5M7,Z_-?BS(I0+B`D(`````<```#,(0``L*X>9!RT
-M5^4F!6*;_A2VL0HBFF4]C"=_:/G!;+Z.$'[T`>CC3N3)[CK-@V5@SLOH71&C
-M?M?PD*UQ7+/1E1R'=TXYJ6:^C');8*?7V1J-8$$<;$8$X-ZO>H,E:G?NI#S9
-M>2<T8EVYP(2C<NQPB_DLR-OB05/S*9!04[L4Q/^8J_EE/Y;UAI;%XRM;I06N
-M5I[Y5F#TX-<]K\P?'-&HQW0NGO_`(2==MXBL!MIHS2E6$K=&[C\,`(P!``",
-M`0```@```$4``8A6N```0!$``,"H`0'`J`$"`?0!]`%T!UE]8'[4@EG5M7,Z
-M_-?BS(I0+B`D"`````@```%L(0`!4%B)Y0;I2?,HD%;V^-]?V;AKO0+*?Q/N
-M"P)@R+?,>%^!^8V=P5AYOY8"3^M#12VP/Q^CQ9*9-U5<Q'U`MC@\,(%`KUPJ
-M$+#F134!"](7SU!H2ZB'MO2,QE@V;Z&P=CJ$_NN*Z"Z!1^[<P-SI6KP;S<BV
-MRX2I0:VC/??PZJ<_+!P9715:3FK8UQ:\+EV^9H!],I#Y0J:.A`<'W&+_@29D
-MI("`6/KG7VH6DP2;DY]V?'H\JEV>0Y#;[SO=#O]\J"/SR'`@"_O*TWZ'@A7Z
-M2?<3IHVCF]Z8$F7R,JY#_<L4(5,*./]%3U@C+>XS6\<3,X9D<^&*9$1\N<8%
-M[>C)%-%$*72:U&EU(DA38,1L&9*0896+:>?)AU.N($`0&&P&+-.I(2KZ*:3U
-M0`-6=^.`6-H.PTEU/+QY!Y^WGU9#Y685C*P,*H1!ZSU=3]EDL+<C5A*W1H9]
-M#`!<`0``7`$```(```!%``%85KD``$`1``#`J`$!P*@!`@'T`?0!1`<I?6!^
-MU()9U;5S.OS7XLR*4"X@)"`````(```!/"$``2!PKEKV;;PW8^V#NNVP-$FA
-MWBVY5>#F=<'C);QR'OV,3LZ;+*9B6X',<\6]=JZ;DAP3,\09JJC@-9X63C8\
-MUZ.MGW7K.&+:O._A'P7S!62=E(Y-&`Z6+2;@D`]9[(-)TS`O.OL&#A6]C^CQ
-M%KST3``!K*2Z<F67^O#5W)0"EXR:_M7D@$%-IGZM4%CJ!JG,`NI%H%[JY=1S
-M"@>%I/<RW`<[%`PH=ZPH^IC-H[2F%<3Y_G=R?@+W3`AT1O=.DAG;I*[HWB+X
-M^[5X;\NTS)'[J6?$3PYPMGN-SV3-I;%SE(W_&9M>4'UZ:RHQA[RBD=A(M=RB
-M=X^D8L&M/6O7=BN%K.'5`:[=\CXE;@_]%&MW'"@K&2(<ZV%Z$C<%$*H(VU82
-MMT85I0P`?````'P````"````10``>%:Z``!`$0``P*@!`<"H`0(!]`'T`&0&
-M26EAWC0"RW4LII*]/I]H;A@N("4(`````````%PJ``!`J09)'+@P0R?6`N"S
-M/$+&E5V>KP`MG!,/UE]<]=S=,MH>J40;1>."DPL>[B[#1!)!6&CPZ\_@YLIX
-ME($,5A*W1FJP#`!L````;`````(```!%``!H5KL``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y:6'>-`++=2RFDKT^GVAN&"X@)2``````````3````#`1>SWX#\H\
-M5B66DCO^;A!_O!#J2<+7C#B;4#&H6ZQ7@^SHYPT!X%PODV5JI582MT8YOPP`
-M;````&P````"````10``:%:\``!`$0``P*@!`<"H`0(!]`'T`%0&.6EAWC0"
-MRW4LII*]/I]H;A@N("4(`````0```$PJ```PAROHV_3YU=\1X)$.;0M>R_DY
-MN!'-;Q)@L%!+YW/+]LC\V]_$#NGK"9#_=4=6$K=&U,P,`&P```!L`````@``
-M`$4``&A6O0``0!$``,"H`0'`J`$"`?0!]`!4!CEI8=XT`LMU+*:2O3Z?:&X8
-M+B`E(`````$```!,````,"%,H&*`C,&A;\^6XC4<K5O@2H_%\AVM&2/QQ]RK
-M&*<T7TGP=WAR,;I$@+V15A*W1F+*#0"8`0``F`$```(```!%``&45L$``$`1
-M``#`J`$!P*@!`@'T`?0!@`=E+]19`0.A\1```````````"$@(@@````````!
-M>"(``'@#``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``%T'N'DL5
-MFOE"4(&/OV3X]513_#/:B,48;?1AK$#:-3W24];BD"V@GIR$']/Y]<ZZA6NS
-MIO]5(*UY1^P;+5QXU*](O5S:UYJ6;GKK"MVT$2#UG0:-I?J2.F);;*6A4,[8
-MKAV(L?B*1?)(C4DK32OSWN<_8G=7*#9JOE<MHA@8B#PI```D&%Y?E5R$7.?Z
-M)$X>=/1K#%^[A\S,60**>E.S>'M98%PI```<``!`!.3REOSWX!WO,X:6[8@X
-MC7REQIR:````'```0`7>T?;1'^^AB%:O(=SN"^!18\1H"%<2MT8LH@$`F`$`
-M`)@!```"````10`!E%;'``!`$0``P*@!`<"H`0(!]`'T`8`'92_460$#H?$0
-M```````````A("((`````````7@B``!X`P``=`$!``P#```,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``!=![AY+%9KY0E"!C[]D^/544_PSVHC%&&WT8:Q`VC4]
-MTE/6XI`MH)Z<A!_3^?7.NH5KLZ;_52"M>4?L&RU<>-2O2+U<VM>:EFYZZPK=
-MM!$@]9T&C:7ZDCIB6VREH5#.V*X=B+'XBD7R2(U)*TTK\][G/V)W5R@V:KY7
-M+:(8&(@\*0``)!A>7Y5<A%SG^B1.'G3T:PQ?NX?,S%D"BGI3LWA[66!<*0``
-M'```0`3D\I;\]^`=[S.&ENV(.(U\I<:<F@```!P``$`%WM'VT1_OH8A6KR'<
-M[@O@46/$:`A7$K=&O>,'`)@!``"8`0```@```$4``916S0``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V4OU%D!`Z'Q$```````````(2`B"`````````%X(@``>`,`
-M`'0!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"```70>X>2Q6:^4)0@8^_
-M9/CU5%/\,]J(Q1AM]&&L0-HU/=)3UN*0+:">G(0?T_GUSKJ%:[.F_U4@K7E'
-M[!LM7'C4KTB]7-K7FI9N>NL*W;01(/6=!HVE^I(Z8EMLI:%0SMBN'8BQ^(I%
-M\DB-22M-*_/>YS]B=U<H-FJ^5RVB&!B(/"D``"087E^57(1<Y_HD3AYT]&L,
-M7[N'S,Q9`HIZ4[-X>UE@7"D``!P``$`$Y/*6_/?@'>\SAI;MB#B-?*7&G)H`
-M```<``!`!=[1]M$?[Z&(5J\AW.X+X%%CQ&@(6!*W1BWQ!0"8`0``F`$```(`
-M``!%``&45N$``$`1``#`J`$!P*@!`@'T`?0!@`=E1;`.U'S)V3D`````````
-M`"$@(@@````````!>"(``'@$``!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``FOFCDRG%RS_]A:_I''8-.=P6N2\HJA]<LW.Y=$Z,\:WV^>):LC=6
-M#JVI/%7G.+M_9W<=_NQAIB'HB=]Z:&3:L:82KW\@;#Y%\118+P.N".2\7M\%
-M"3B`(1AKZHX7R;\-5(!\@@`2SW]RS3)HQ5"VH[MP'`!'45M?J:ATO8=@Y(8I
-M```D_2]SM(UE*'Z<WC`ZD>=[>8^JLSP>$,$&\2`#)CC*U"0I```<``!`!+C1
-MT=[3`(V=B74VS/SU\07ZM&\4````'```0`5A$BB_I<C`G1O<FUF.'&!9=Y"*
-MOU@2MT8Q'`D`F`$``)@!```"````10`!E%;I``!`$0``P*@!`<"H`0(!]`'T
-M`8`'946P#M1\R=DY```````````A("((`````````7@B``!X!```=`$!``P#
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``)KYHY,IQ<L__86OZ1QV#3G<%KDO
-M**H?7+-SN71.C/&M]OGB6K(W5@ZMJ3Q5YSB[?V=W'?[L8:8AZ(G?>FADVK&F
-M$J]_(&P^1?$46"\#K@CDO%[?!0DX@"$8:^J.%\F_#52`?((`$L]_<LTR:,50
-MMJ.[<!P`1U%;7ZFH=+V'8.2&*0``)/TO<[2-92A^G-XP.I'G>WF/JK,\'A#!
-M!O$@`R8XRM0D*0``'```0`2XT='>TP"-G8EU-LS\]?$%^K1O%````!P``$`%
-M81(HOZ7(P)T;W)M9CAQ@67>0BK]9$K=&?1L``)@!``"8`0```@```$4``916
-M]@``0!$``,"H`0'`J`$"`?0!]`&`!V5%L`[4?,G9.0``````````(2`B"```
-M``````%X(@``>`0``'0!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``":
-M^:.3*<7+/_V%K^D<=@TYW!:Y+RBJ'URS<[ET3HSQK?;YXEJR-U8.K:D\5><X
-MNW]G=QW^[&&F(>B)WWIH9-JQIA*O?R!L/D7Q%%@O`ZX(Y+Q>WP4).(`A&&OJ
-MCA?)OPU4@'R"`!+/?W+-,FC%4+:CNW`<`$=16U^IJ'2]AV#DABD``"3]+W.T
-MC64H?IS>,#J1YWMYCZJS/!X0P0;Q(`,F.,K4)"D``!P``$`$N-'1WM,`C9V)
-M=3;,_/7Q!?JT;Q0````<``!`!6$2*+^ER,"=&]R;68X<8%EWD(J_61*W1NYF
-M#0"8`0``F`$```(```!%``&45Q@``$`1``#`J`$!P*@!`@'T`?0!@`=E&W@L
-M#DI!)S@``````````"$@(@@````````!>"(``'@'``!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``$4/J@.WN;TE4B$D`#V:_?]BH^$6"APE8*]CO
-M;/9#I\LJ'D*L`O!ZZX-0.T7J"[E%F$PY&$',A)#HS?Z\U"5IOQS>QEIB]B.6
-M2[C2]?UN$&AT_V>8T+-[6=--@*4OI&='#.?HE8Z8P-F<XO--&YOZMK28.X%O
-M%T$-:)7*<P(K@?8I```D-L4:%DG#S=<(;(M$/MS5RV?EW4!YL%["LRWU+'EU
-M/;HI```<``!`!'>B+X!Q-H17>Q80%'7;.2CO:=VT````'```0`5*8(>"+70`
-MV]^\L=!W@@8WSO`EP%H2MT;T4P$`F`$``)@!```"````10`!E%<<``!`$0``
-MP*@!`<"H`0(!]`'T`8`'91MX+`Y*02<X```````````A("((`````````7@B
-M``!X!P``=`$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``!%#ZH#M[F])
-M5(A)``]FOW_8J/A%@H<)6"O8[VSV0Z?+*AY"K`+P>NN#4#M%Z@NY19A,.1A!
-MS(20Z,W^O-0E:;\<WL9:8O8CEDNXTO7];A!H=/]GF-"S>UG338"E+Z1G1PSG
-MZ)6.F,#9G.+S31N;^K:TF#N!;Q=!#6B5RG,"*X'V*0``)#;%&A9)P\W7"&R+
-M1#[<U<MGY=U`>;!>PK,M]2QY=3VZ*0``'```0`1WHB^`<3:$5WL6$!1UVSDH
-M[VG=M````!P``$`%2F"'@BUT`-O?O+'0=X(&-\[P)<!:$K=&AY4'`)@!``"8
-M`0```@```$4``917*0``0!$``,"H`0'`J`$"`?0!]`&`!V4;>"P.2D$G.```
-M````````(2`B"`````````%X(@``>`<``'0!`0`,`P``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"```10^J`[>YO252(20`/9K]_V*CX18*'"5@KV.]L]D.GRRH>
-M0JP"\'KK@U`[1>H+N4683#D80<R$D.C-_KS4)6F_'-[&6F+V(Y9+N-+U_6X0
-M:'3_9YC0LWM9TTV`I2^D9T<,Y^B5CIC`V9SB\TT;F_JVM)@[@6\700UHE<IS
-M`BN!]BD``"0VQ1H62</-UPALBT0^W-7+9^7=0'FP7L*S+?4L>74]NBD``!P`
-M`$`$=Z(O@'$VA%=[%A`4==LY*.]IW;0````<``!`!4I@AX(M=`#;W[RQT'>"
-M!C?.\"7`6Q*W1CRB!0"8`0``F`$```(```!%``&45SD``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E_!/(*-AX-7(``````````"$@(@@````````!>"(``'@(``!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``,S2A&EML7<?IW]/,3LJ1
-M`%MC#LIT`TXML-_$WCS'M6(!^,/K^<'[#B2Y4):L''.^KYZ,J7%>.)E[/;^^
-MQX5%'9<ZQERHQ->@3G_U57=5X@C$K;S'[7[_58\SGO.S]2X%SWHL^J.V\B)_
-M_&F/_JX3\!Q;5QV,Q[(@R<RE'Z*^(#8I```D=57D!B1:C,?X&)+`V.ET&IGS
-M>*A]:+@H!W]*ZY`H88DI```<``!`!,5#H05($E<4)DJR)5^4QNH=(N-O````
-M'```0`7;:18A1DF+F-*_'"C1S"=@1.[5(UL2MT8%S@@`F`$``)@!```"````
-M10`!E%=```!`$0``P*@!`<"H`0(!]`'T`8`'9?P3R"C8>#5R```````````A
-M("((`````````7@B``!X"```=`$!``P#```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``#,TH1I;;%W'Z=_3S$[*D0!;8P[*=`-.+;#?Q-X\Q[5B`?C#Z_G!^PXD
-MN5"6K!QSOJ^>C*EQ7CB9>SV_OL>%11V7.L9<J,37H$Y_]55W5>((Q*V\Q^U^
-M_U6/,Y[SL_4N!<]Z+/JCMO(B?_QIC_ZN$_`<6U<=C,>R(,G,I1^BOB`V*0``
-M)'55Y`8D6HS'^!B2P-CI=!J9\WBH?6BX*`=_2NN0*&&)*0``'```0`3%0Z$%
-M2!)7%"9*LB5?E,;J'2+C;P```!P``$`%VVD6(49)BYC2OQPHT<PG8$3NU2-;
-M$K=&?`\/`)@!``"8`0```@```$4``9172@``0!$``,"H`0'`J`$"`?0!]`&`
-M!V7\$\@HV'@U<@``````````(2`B"`````````%X(@``>`@``'0!`0`,`P``
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"```S-*$:6VQ=Q^G?T\Q.RI$`6V,.RG0#
-M3BVPW\3>/,>U8@'XP^OYP?L.)+E0EJP<<[ZOGHRI<5XXF7L]O[['A44=ESK&
-M7*C$UZ!.?_55=U7B",2MO,?M?O]5CS.>\[/U+@7/>BSZH[;R(G_\:8_^KA/P
-M'%M7'8S'LB#)S*4?HKX@-BD``"1U5>0&)%J,Q_@8DL#8Z70:F?-XJ'UHN"@'
-M?TKKD"AAB2D``!P``$`$Q4.A!4@25Q0F2K(E7Y3&ZATBXV\````<``!`!=MI
-M%B%&28N8TK\<*-',)V!$[M4C7!*W1N@=#0"8`0``F`$```(```!%``&45V\`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E\PI"*U/]B.P``````````"$@(@@`````
-M```!>"(``'@)``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``9?+2
-M22A&RE4@,KU7BK]4\K%]CR>^5N+`P$.7KD:<[-P3V>W6NG9\)#0W$%!A84)K
-MQ31X/0`*D<L@70`%_GBDP.H:@-NTO:RJ:[+U6*@SK/QE0RKY5D$0KLX6JPRD
-M_#?0L<`<5P@'PZ17:Z/T*/+AX6F`;KG8V,3='3E[B9?=LA0I```DJ"-`Y.B!
-M&-O9()<`(/0/>\-S-R:WJ[LR+2HR@'5%[ETI```<``!`!,#U@?]2A<I1QC)M
-M:F&!CI(>TC5!````'```0`6)CF[_H0HNRZPY=)NV848)"O!Z*5T2MT:Y!0$`
-MF`$``)@!```"````10`!E%=W``!`$0``P*@!`<"H`0(!]`'T`8`'9?,*0BM3
-M_8CL```````````A("((`````````7@B``!X"0``=`$!``P#```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``&7RTDDH1LI5(#*]5XJ_5/*Q?8\GOE;BP,!#EZY&
-MG.S<$]GMUKIV?"0T-Q!086%":\4T>#T`"I'+(%T`!?YXI,#J&H#;M+VLJFNR
-M]5BH,ZS\94,J^59!$*[.%JL,I/PWT+'`'%<(!\.D5VNC]"CRX>%I@&ZYV-C$
-MW1TY>XF7W;(4*0``)*@C0.3H@1C;V2"7`"#T#WO#<S<FMZN[,BTJ,H!U1>Y=
-M*0``'```0`3`]8'_4H7*4<8R;6IA@8Z2'M(U00```!P``$`%B8YN_Z$*+LNL
-M.72;MF%&"0KP>BE=$K=&7T<'`)@!``"8`0```@```$4``917?@``0!$``,"H
-M`0'`J`$"`?0!]`&`!V7S"D(K4_V([```````````(2`B"`````````%X(@``
-M>`D``'0!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"``!E\M))*$;*52`R
-MO5>*OU3RL7V/)[Y6XL#`0Y>N1ISLW!/9[=:Z=GPD-#<04&%A0FO%-'@]``J1
-MRR!=``7^>*3`ZAJ`V[2]K*IKLO58J#.L_&5#*OE601"NSA:K#*3\-]"QP!Q7
-M"`?#I%=KH_0H\N'A:8!NN=C8Q-T=.7N)E]VR%"D``"2H(T#DZ($8V]D@EP`@
-M]`][PW,W)K>KNS(M*C*`=47N72D``!P``$`$P/6!_U*%RE'&,FUJ88&.DA[2
-M-4$````<``!`!8F.;O^A"B[+K#ETF[9A1@D*\'HI7A*W1NI4!0"8`0``F`$`
-M``(```!%``&45Z```$`1``#`J`$!P*@!`@'T`?0!@`=EI0:O#^ZBU20`````
-M`````"$@(@@````````!>"(``'CW``!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``+8RU$A8C5RN?P)@4:)L^XFW*$_8VT;V9`;MJ*MGSY@.@WJDZ
-M;WQP\MVG#I@,?<>;^$0J2N`UDRXIC_'<98<)_$4N9ZA8_-W]D8B[IH0B?Z-\
-MJ1M]@=DW*>?E/(9K-@*WMW-9#6&0\0]E*/#/-*3]+Q>/W>G4$$>%8:"`;UW^
-MV?`I```DW([#P)*^[_MVQ4@\YVSO'-"U>%42CB0'`M^55B9;S#LI```<``!`
-M!'9;UA_^[%&POS!_IT!VS@OQPSE5````'```0`4/Z53$;W;#'.!/$P23#RZJ
-M@@)ZF5X2MT;#?P@`F`$``)@!```"````10`!E%>D``!`$0``P*@!`<"H`0(!
-M]`'T`8`'9:4&KP_NHM4D```````````A("((`````````7@B``!X]P``=`$!
-M``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``"V,M1(6(U<KG\"8%&B;/N)M
-MRA/V-M&]F0&[:BK9\^8#H-ZI.F]\</+=IPZ8#'W'F_A$*DK@-9,N*8_QW&6'
-M"?Q%+F>H6/S=_9&(NZ:$(G^C?*D;?8'9-RGGY3R&:S8"M[=S60UAD/$/92CP
-MSS2D_2\7C]WIU!!'A6&@@&]=_MGP*0``)-R.P\"2ON_[=L5(/.=L[QS0M7A5
-M$HXD!P+?E58F6\P[*0``'```0`1V6]8?_NQ1L+\P?Z=`=LX+\<,Y50```!P`
-M`$`%#^E4Q&]VPQS@3Q,$DP\NJH(">IE>$K=&/\$.`)@!``"8`0```@```$4`
-M`917LP``0!$``,"H`0'`J`$"`?0!]`&`!V6E!J\/[J+5)```````````(2`B
-M"`````````%X(@``>/<``'0!`0`,`P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M```MC+42%B-7*Y_`F!1HFS[B;<H3]C;1O9D!NVHJV?/F`Z#>J3IO?'#RW:<.
-MF`Q]QYOX1"I*X#63+BF/\=QEAPG\12YGJ%C\W?V1B+NFA")_HWRI&WV!V3<I
-MY^4\AFLV`K>W<UD-89#Q#V4H\,\TI/TO%X_=Z=001X5AH(!O7?[9\"D``"3<
-MCL/`DK[O^W;%2#SG;.\<T+5X51*.)`<"WY56)EO,.RD``!P``$`$=EO6'_[L
-M4;"_,'^G0';."_'#.54````<``!`!0_I5,1O=L,<X$\3!),/+JJ"`GJ97Q*W
-M1F+4#`"8`0``F`$```(```!%``&46`,``$`1``#`J`$!P*@!`@'T`?0!@`=E
-MN*[K`84`E/,``````````"$@(@@````````!>"(``'CX``!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``4N^_SVHGC*OO&ALTD&YSO@`1<_@R+DRH
-M2_PWG(Q+9I%?YX#X'M:UKRL^PS*F(B)=K?_6]([QNPJKQD+3]JNX<ZO3.D?;
-M..Q=1$JA`%5(DLJ#Y']N[R&<'3`25,,I^PD\$_'4<%`%H^,1&#R8>.=RN=-F
-M93:UI\:<P'<;VH_OFU$I```D&4"MW86_>2&&[,X2^GY'<#>A4=-X.N"P#L)Y
-M]%E:.&4I```<``!`!)O7#/7XX1G=\H]*+_>#5T)RMA(N````'```0`7DQ5;9
-MKLH8%7`$`"%JZ5)E9\I]F&`2MT:(MP``F`$``)@!```"````10`!E%@E``!`
-M$0``P*@!`<"H`0(!]`'T`8`'9;BNZP&%`)3S```````````A("((````````
-M`7@B``!X^```=`$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``%+OO\]J
-M)XRK[QH;-)!N<[X`$7/X,BY,J$O\-YR,2V:17^>`^![6M:\K/L,RIB(B7:W_
-MUO2.\;L*J\9"T_:KN'.KTSI'VSCL741*H0!52)+*@^1_;N\AG!TP$E3#*?L)
-M/!/QU'!0!:/C$1@\F'CG<KG39F4VM:?&G,!W&]J/[YM1*0``)!E`K=V%OWDA
-MANS.$OI^1W`WH5'3>#K@L`[">?196CAE*0``'```0`2;UPSU^.$9W?*/2B_W
-M@U="<K82+@```!P``$`%Y,56V:[*&!5P!``A:NE296?*?9A@$K=&#_D&`)@!
-M``"8`0```@```$4``91850``0!$``,"H`0'`J`$"`?0!]`&`!V6XKNL!A0"4
-M\P``````````(2`B"`````````%X(@``>/@``'0!`0`,`P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``!2[[_/:B>,J^\:&S20;G.^`!%S^#(N3*A+_#><C$MF
-MD5_G@/@>UK6O*S[#,J8B(EVM_];TCO&["JO&0M/VJ[ASJ],Z1]LX[%U$2J$`
-M54B2RH/D?V[O(9P=,!)4PRG["3P3\=1P4`6CXQ$8/)AXYW*YTV9E-K6GQIS`
-M=QO:C^^;42D``"090*W=A;]Y(8;LSA+Z?D=P-Z%1TW@ZX+`.PGGT65HX92D`
-M`!P``$`$F]<,]?CA&=WRCTHO]X-70G*V$BX````<``!`!>3%5MFNRA@5<`0`
-M(6KI4F5GRGV881*W1C$%!0"8`0``F`$```(```!%``&46*$``$`1``#`J`$!
-MP*@!`@'T`?0!@`=ES$9T>B$M_B8``````````"$@(@@````````!>"(``'CY
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``71DE8+_9@V9\W7])
-M`#*@MJ9+V5ZG6U9PWQS:?1=<W!P3"`-9+1K_8]WG99Y".@ZJ8P;7R&G2CX'G
-MI1IL+4SW;:#NB<T4'M<:R6TZ[5T`.`JO<+.E-ENSE:^#\SVTW,0.`8&QB!:4
-MH7N8JZW5.83<$O=684W[JR>=1B7NN;M7[IXI```D!`/L?Y0'(Z]]O-G$G_/M
-MW7/)T^PYEZO\9IN7.;+*:V\I```<``!`!`W0;171?.OZJF9[[-T$F$[*D@BK
-M````'```0`7DG3]AYR?URZ"LP':B'BXP4WA96V$2MT:',0@`F`$``)@!```"
-M````10`!E%BF``!`$0``P*@!`<"H`0(!]`'T`8`'9<Q&='HA+?XF````````
-M```A("((`````````7@B``!X^0``=`$!``P#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``%T9)6"_V8-F?-U_20`RH+:F2]E>IUM6<-\<VGT77-P<$P@#62T:
-M_V/=YV6>0CH.JF,&U\AITH^!YZ4:;"U,]VV@[HG-%![7&LEM.NU=`#@*KW"S
-MI39;LY6O@_,]M-S$#@&!L8@6E*%[F*NMU3F$W!+W5F%-^ZLGG48E[KF[5^Z>
-M*0``)`0#['^4!R.O?;S9Q)_S[=USR=/L.9>K_&:;ESFRRFMO*0``'```0`0-
-MT&T5T7SK^JIF>^S=!)A.RI((JP```!P``$`%Y)T_8><G]<N@K,!VHAXN,%-X
-M65MA$K=&$G,.`)@!``"8`0```@```$4``918L0``0!$``,"H`0'`J`$"`?0!
-M]`&`!V7,1G1Z(2W^)@``````````(2`B"`````````%X(@``>/D``'0!`0`,
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``!=&25@O]F#9GS=?TD`,J"VIDO9
-M7J=;5G#?'-I]%US<'!,(`UDM&O]CW>=EGD(Z#JIC!M?(:=*/@>>E&FPM3/=M
-MH.Z)S10>UQK);3KM70`X"J]PLZ4V6[.5KX/S/;3<Q`X!@;&(%I2A>YBKK=4Y
-MA-P2]U9A3?NK)YU&)>ZYNU?NGBD``"0$`^Q_E`<CKWV\V<2?\^W=<\G3[#F7
-MJ_QFFY<YLLIK;RD``!P``$`$#=!M%=%\Z_JJ9GOLW0283LJ2"*L````<``!`
-M!>2=/V'G)_7+H*S`=J(>+C!3>%E;8A*W1FY^#`"8`0``F`$```(```!%``&4
-M6,L``$`1``#`J`$!P*@!`@'T`?0!@`=E:DZL=(&"8X,``````````"$@(@@`
-M```````!>"(``'C\``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MZOK,]EYLGV93N?YY'H<P>[-^E=0$3&-K@[)7QKHGTVYO,@)F6"Z8Q6F4:8!C
-M<_"P4`X\-=,#WLX7Q%4,O;/_Q$$T5>I5PU^LG%&FEE]!6LMG/;-6.'"';R92
-MF[[&UE@.JIJ$@@O:<5^CRIF_<MX32;,4US'?,.`;X;/9!<[*\LHI```D/>YO
-MJ<+!M5P93UM=H82:-$$$`KP*>=(V,37%Q+I+1E@I```<``!`!.082$9[/MN]
-M/U5N,,%\L)<!%>59````'```0`5F57S]P;,F@#I6JH>A*G#:]Q?**6,2MT8K
-M:0``F`$``)@!```"````10`!E%C0``!`$0``P*@!`<"H`0(!]`'T`8`'96I.
-MK'2!@F.#```````````A("((`````````7@B``!X_```=`$!``P#```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``.KZS/9>;)]F4[G^>1Z','NS?I74!$QC:X.R
-M5\:Z)]-N;S("9E@NF,5IE&F`8W/PL%`./#73`][.%\15#+VS_\1!-%7J5<-?
-MK)Q1II9?05K+9SVS5CAPAV\F4IN^QM98#JJ:A((+VG%?H\J9OW+>$TFS%-<Q
-MWS#@&^&SV07.RO+**0``)#WN;ZG"P;5<&4];7:&$FC1!!`*\"GG2-C$UQ<2Z
-M2T98*0``'```0`3D&$A&>S[;O3]5;C#!?+"7`17E60```!P``$`%9E5\_<&S
-M)H`Z5JJ'H2IPVO<7RBEC$K=&S:H&`)@!``"8`0```@```$4``918W```0!$`
-M`,"H`0'`J`$"`?0!]`&`!V5J3JQT@8)C@P``````````(2`B"`````````%X
-M(@``>/P``'0!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#J^LSV7FR?
-M9E.Y_GD>AS![LWZ5U`1,8VN#LE?&NB?3;F\R`F98+IC%:91I@&-S\+!0#CPU
-MTP/>SA?$50R]L__$0315ZE7#7ZR<4::67T%:RV<]LU8X<(=O)E*;OL;66`ZJ
-MFH2""]IQ7Z/*F;]RWA-)LQ37,=\PX!OAL]D%SLKRRBD``"0][F^IPL&U7!E/
-M6UVAA)HT000"O`IYTC8Q-<7$NDM&6"D``!P``$`$Y!A(1GL^V[T_56XPP7RP
-MEP$5Y5D````<``!`!695?/W!LR:`.E:JAZ$J<-KW%\HI9!*W1C&W!`"8`0``
-MF`$```(```!%``&46/8``$`1``#`J`$!P*@!`@'T`?0!@`=EXY/3M[_L`<$`
-M`````````"$@(@@````````!>"(``'C]``!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``?\A:T^&%^5M(']R?*1S!KW48_.SG96]Q>7JS;P,F^&AG
-MDF?_R'*.P^@--7?M0CX88`_74_8&#Y$8M"!PV+!2@Q&'+G_N!FA1FXBR\O<N
-M>NQ#\E9>4F2`)%:-@(3$E.LFG^ROKC!0N!8VU;J.B6!?:4?5H<N09[^VIO1,
-MQP2DQTPI```D7BNK>RE&GEV8*-ZM*&@S,'YI5GU)O%/$XTX4MN@\*WLI```<
-M``!`!(:-7<>ZW;8L@W4+I?=*L`E&Z@?W````'```0`4V@<A3J-#\'7./-AJ.
-M\>H,-.HCUF02MT90XP<`F`$``)@!```"````10`!E%C[``!`$0``P*@!`<"H
-M`0(!]`'T`8`'9>.3T[>_[`'!```````````A("((`````````7@B``!X_0``
-M=`$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``'_(6M/AA?E;2!_<GRD<
-MP:]U&/SLYV5O<7EZLV\#)OAH9Y)G_\ARCL/H#35W[4(^&&`/UU/V!@^1&+0@
-M<-BP4H,1ARY_[@9H49N(LO+W+GKL0_)67E)D@"16C8"$Q)3K)I_LKZXP4+@6
-M-M6ZCHE@7VE'U:'+D&>_MJ;T3,<$I,=,*0``)%XKJWLI1IY=F"C>K2AH,S!^
-M:59]2;Q3Q.-.%+;H/"M[*0``'```0`2&C5W'NMVV+(-U"Z7W2K`)1NH']P``
-M`!P``$`%-H'(4ZC0_!USCS8:CO'J##3J(]9D$K=&M"0.`)@!``"8`0```@``
-M`$4``919!P``0!$``,"H`0'`J`$"`?0!]`&`!V7CD].WO^P!P0``````````
-M(2`B"`````````%X(@``>/T``'0!`0`,`P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"``!_R%K3X87Y6T@?W)\I',&O=1C\[.=E;W%Y>K-O`R;X:&>29__(<H[#
-MZ`TU=^U"/AA@#]=3]@8/D1BT('#8L%*#$8<N?^X&:%&;B++R]RYZ[$/R5EY2
-M9(`D5HV`A,24ZR:?[*^N,%"X%C;5NHZ)8%]I1]6ARY!GO[:F]$S'!*3'3"D`
-M`"1>*ZM[*4:>79@HWJTH:#,P?FE6?4F\4\3C3A2VZ#PK>RD``!P``$`$AHU=
-MQ[K=MBR#=0NE]TJP"4;J!_<````<``!`!3:!R%.HT/P=<X\V&H[QZ@PTZB/6
-M91*W1HDO#`"8`0``F`$```(```!%``&4614``$`1``#`J`$!P*@!`@'T`?0!
-M@`=EA[+$^DH5'WD``````````"$@(@@````````!>"(``'C^``!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``LEXO&OS)`X%\Z""_P_L<AHW$D'CK
-M\T`0\)4A`5R3:"]*E;J&R,R=8P=CM#!N/[WO:%5`K"`77'M9)-B/1`'#9C.S
-M$S\Z`+6C+1R@0M?E]*.=ZXWA>WSE8-=/;LT#,D-E0LWN$0FVSEK?[981'OHE
-M1/?*0L'B2GKJO3.^?PXJX]$I```DJ3TP-N0T#+X[Q2(=LLU-_S$GZ>E4N0?]
-M1#K9\>\#@^@I```<``!`!`"7EYG]7#5)\#=SE5:6I]*-#!;Y````'```0`40
-M";SBI#*ICGG0X>L2C]WT44D[\F82MT;O&@``F`$``)@!```"````10`!E%D6
-M``!`$0``P*@!`<"H`0(!]`'T`8`'98>RQ/I*%1]Y```````````A("((````
-M`````7@B``!X_@``=`$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``+)>
-M+QK\R0.!?.@@O\/['(:-Q)!XZ_-`$/"5(0%<DV@O2I6ZALC,G6,'8[0P;C^]
-M[VA50*P@%UQ[6238CT0!PV8SLQ,_.@"UHRT<H$+7Y?2CG>N-X7M\Y6#73V[-
-M`S)#94+-[A$)MLY:W^V6$1[Z)43WRD+!XDIZZKTSOG\.*N/1*0``)*D],#;D
-M-`R^.\4B';+-3?\Q)^GI5+D'_40ZV?'O`X/H*0``'```0`0`EY>9_5PU2?`W
-M<Y56EJ?2C0P6^0```!P``$`%$`F\XJ0RJ8YYT.'K$H_=]%%)._)F$K=&GEP&
-M`)@!``"8`0```@```$4``91990``0!$``,"H`0'`J`$"`?0!]`&`!V6'LL3Z
-M2A4?>0``````````(2`B"`````````%X(@``>/X``'0!`0`,`P``#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"``"R7B\:_,D#@7SH(+_#^QR&C<20>.OS0!#PE2$!
-M7)-H+TJ5NH;(S)UC!V.T,&X_O>]H54"L(!=<>UDDV(]$`<-F,[,3/SH`M:,M
-M'*!"U^7THYWKC>%[?.5@UT]NS0,R0V5"S>X1";;.6M_MEA$>^B5$]\I"P>)*
-M>NJ],[Y_#BKCT2D``"2I/3`VY#0,OCO%(AVRS4W_,2?IZ52Y!_U$.MGQ[P.#
-MZ"D``!P``$`$`)>7F?U<-4GP-W.55I:GTHT,%OD````<``!`!1`)O.*D,JF.
-M>=#AZQ*/W?1123OR9Q*W1M%I!`"8`0``F`$```(```!%``&46;<``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=EA<2J%"169+L``````````"$@(@@````````!>"(`
-M`'C_``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``O;?7/_R?;YFH
-M/N\D60\TE&SY9>@](8YZ"K-\C;3IC(1NXN13J[]I=:M54$";-I#W:WB!DNEU
-M0$C))74D'T]KNI>>FEI>[FB])(C[FT^MA#+DK<@WA^5\<*E+8Q-73FEOJ!R-
-MQ6!7XET=N[2<FL*MC]UG;6ZQ:1]Z?`("[D@$7U@I```DRS_[7]'GR6960]Y<
-M0!B`\A;Q%J8%MFJD1F79G0)':8XI```<``!`!$'+]#95_I1+`\`3B!8.KV]H
-MZKP`````'```0`6\>Q+9P(4`>29WB.WMF8S-LC'LX&<2MT:)E0<`F`$``)@!
-M```"````10`!E%F]``!`$0``P*@!`<"H`0(!]`'T`8`'987$JA0D5F2[````
-M```````A("((`````````7@B``!X_P``=`$!``P#```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``+VWUS_\GV^9J#[O)%D/-)1L^67H/2&.>@JS?(VTZ8R$;N+D
-M4ZN_:76K55!`FS:0]VMX@9+I=4!(R25U)!]/:[J7GII:7NYHO22(^YM/K80R
-MY*W(-X?E?'"I2V,35TYI;Z@<C<5@5^)=';NTG)K"K8_=9VUNL6D?>GP"`NY(
-M!%]8*0``),L_^U_1Y\EF5D/>7$`8@/(6\1:F!;9JI$9EV9T"1VF.*0``'```
-M0`1!R_0V5?Z42P/`$X@6#J]O:.J\`````!P``$`%O'L2V<"%`'DF=XCM[9F,
-MS;(Q[.!G$K=&GM8-`)@!``"8`0```@```$4``919RP``0!$``,"H`0'`J`$"
-M`?0!]`&`!V6%Q*H4)%9DNP``````````(2`B"`````````%X(@``>/\``'0!
-M`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"``"]M]<__)]OF:@^[R19#S24
-M;/EEZ#TACGH*LWR-M.F,A&[BY%.KOVEUJU500)LVD/=K>(&2Z75`2,DE=20?
-M3VNZEYZ:6E[N:+TDB/N;3ZV$,N2MR#>'Y7QPJ4MC$U=.:6^H'(W%8%?B71V[
-MM)R:PJV/W6=M;K%I'WI\`@+N2`1?6"D``"3+/_M?T>?)9E9#WEQ`&(#R%O$6
-MI@6V:J1&9=F=`D=ICBD``!P``$`$0<OT-E7^E$L#P!.(%@ZO;VCJO``````<
-M``!`!;Q[$MG`A0!Y)G>([>V9C,VR,>S@:!*W1N3C"P"8`0``F`$```(```!%
-M``&46?```$`1``#`J`$!P*@!`@'T`?0!@`=E4),)Y]#YMV0``````````"$@
-M(@@````````!>"(``'@!``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``P,%-,ZRJ"5(<$U)\+G?,DO<H2+X[Z8^^\XFP%92JWG(.*GUNS[G@?CUS
-MD3XW,1EE:S_E76K+!<G&)BLDKF%DE-C9*7?X!TNSBZ#7F#4ZJY05B<BG0QIC
-MK!?B]G?1\F./>E3!SN?2QC&"B?(DG'XK6W7@%B1'V5?A^,=^>!+MWLPI```D
-MW!1>=;N'XW.>LZK4UJJ)T/SK6)4R+C>%YK2;EEE$K;PI```<``!`!+@#9]GJ
-MC#ZC?PX6MC/_"EG*\$\C````'```0`5_DSH$.]WW(E+PPU,KZCTR;,L7`F@2
-MMT8*#P\`F`$``)@!```"````10`!E%GW``!`$0``P*@!`<"H`0(!]`'T`8`'
-M95"3">?0^;=D```````````A("((`````````7@B``!X`0``=`$!``P#```,
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``,#!33.LJ@E2'!-2?"YWS)+W*$B^.^F/
-MOO.)L!64JMYR#BI];L^YX'X]<Y$^-S$996L_Y5UJRP7)QB8K)*YA9)38V2EW
-M^`=+LXN@UY@U.JN4%8G(IT,:8ZP7XO9WT?)CCWI4P<[GTL8Q@HGR))Q^*UMU
-MX!8D1]E7X?C'?G@2[=[,*0``)-P47G6[A^-SGK.JU-:JB=#\ZUB5,BXWA>:T
-MFY991*V\*0``'```0`2X`V?9ZHP^HW\.%K8S_PI9RO!/(P```!P``$`%?Y,Z
-M!#O=]R)2\,-3*^H],FS+%P)I$K=&8@X&`)@!``"8`0```@```$4``91:````
-M0!$``,"H`0'`J`$"`?0!]`&`!V50DPGGT/FW9```````````(2`B"```````
-M``%X(@``>`$``'0!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#`P4TS
-MK*H)4AP34GPN=\R2]RA(OCOIC[[SB;`5E*K><@XJ?6[/N>!^/7.1/C<Q&65K
-M/^5=:LL%R<8F*R2N8624V-DI=_@'2[.+H->8-3JKE!6)R*=#&F.L%^+V=]'R
-M8X]Z5,'.Y]+&,8*)\B2<?BM;=>`6)$?95^'XQWYX$NW>S"D``"3<%%YUNX?C
-M<YZSJM36JHG0_.M8E3(N-X7FM)N6642MO"D``!P``$`$N`-GV>J,/J-_#A:V
-M,_\*6<KP3R,````<``!`!7^3.@0[W?<B4O##4ROJ/3)LRQ<":A*W1G(:!`"8
-M`0``F`$```(```!%``&46AH``$`1``#`J`$!P*@!`@'T`?0!@`=EB`JTL`FM
-MNW@``````````"$@(@@````````!>"(``'@"``!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``?PSC'%7R3D#099@0#DG%B0U;:\XG2*17TG@4\5"_
-M4C48/[YS18UT"Q/4MP/S\,Z$NN#@H0`$Z`$U3GR>;$HR!T3>&ARG#WK4D:$T
-M+AK!B-2)'B1&#`DD4T1A0NW<WG0/>R9G`%W1J]#!69)I>GG#FHQ;S`0T,NKP
-M6H!^/@RP:S`I```D'RG`WA,KV(@0/KE^0;;'7&2M\[?@#K7,C&538EW?E_`I
-M```<``!`!"X*>GA(9D+&<W.9$/!J)8MLS!I'````'```0`6=3=5DU$0$^=PR
-M;>N#%IF"WRE]96H2MT98*00`7````%P````"````10``6%H;``!`$0``P*@!
-M`<"H`0(!]`'T`$0&*8@*M+`)K;MX```````````I("(@`````````#P````@
-M``!`!@````3KN^T\Q:SHS7Y_V0748*Q3[<"G/&H2MT;1.`0`N`$``+@!```"
-M````10`!M%H<``!`$0``P*@!`<"H`0(!]`'T`:`'A8@*M+`)K;MX````````
-M```I("((`````````9@A```@``!`!@````3KN^T\Q:SHS7Y_V0748*Q3[<"G
-M/"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``?PSC'%7R
-M3D#099@0#DG%B0U;:\XG2*17TG@4\5"_4C48/[YS18UT"Q/4MP/S\,Z$NN#@
-MH0`$Z`$U3GR>;$HR!T3>&ARG#WK4D:$T+AK!B-2)'B1&#`DD4T1A0NW<WG0/
-M>R9G`%W1J]#!69)I>GG#FHQ;S`0T,NKP6H!^/@RP:S`I```D'RG`WA,KV(@0
-M/KE^0;;'7&2M\[?@#K7,C&538EW?E_`I```<``!`!"X*>GA(9D+&<W.9$/!J
-M)8MLS!I'````'```0`6=3=5DU$0$^=PR;>N#%IF"WRE]96H2MT::7`0`4`$`
-M`%`!```"````10`!3%H=``!`$0``P*@!`<"H`0(!]`'T`3@''8@*M+`)K;MX
-ML$42Z4<XK1(A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#
-M```(`@```@,```@#```"````"`0```(H``"(``(``"&]"GVT8M@B+`R\?N<)
-MS,FSDI0EX%>10>("!L5`-*7POAV$`J$?R.V2##/2\S,^S@YH,:;Q^623%G26
-M6$FP/E>`[:>*4BHV5A1D9H!MU%`?I!>4:[Q%3HH<V$\UZOKS5$B-TZMJ7XRM
-M8*\9:M<#,&IRO`+E(G;?R)[22#@@WXF:*0``)"B*1E?<.'/P'F560&N`&<)J
-M14`*)8GVW/UE4<';7Y82*0``'```0`32WVN1#)=G=0#(:W_=,!RNC5&Y)P``
-M`!P``$`%C/<OC2J3/<#OLV6N<=5<9/\O=OMJ$K=&FXH$``P!```,`0```@``
-M`$4``0A:'@``0!$``,"H`0'`J`$"`?0!]`#T!]F("K2P":V[>+!%$NE'.*T2
-M+B`C"`````$```#L(P``T#"+[;RGF=LM7>B/07MQ8#N2NL<3T3I=[9SHR324
-MOT`/Q:,.OORRZ\;XJZ5[M(N303TI("YF0M<$F=$Y^7"]7DCXKF=K5$\;EO*^
-M(=3Z#F)T$_MM:*A9)O#3@26]>@[&ER@[1!:#KROV6(DN$\4/#6+NN.B8BS2%
-M*SO*^1_*8Q^60BRQR^0NKB86=U0*UHXPD^"ON^J&3KZ?BFX8$M"!Q\5T1W-S
-M`<E#&WE\-[H`NEMH'/%MA7DSW3&JG+*Q`G$]U6B4*_R/7JB,'W<=@&H2MT;O
-MHP0`O````+P````"````10``N%H?``!`$0``P*@!`<"H`0(!]`'T`*0&B8@*
-MM+`)K;MXL$42Z4<XK1(N(",@`````0```)PD``"`LCSNB&K:02][:CL"LEPB
-M(.+7QM>*)7#R!>LQDVX1")>Y(G!P/B@DLIN1K=4&Q)T93,Y:Z7Q1J9D@!$B<
-MP)2?]I,=+N^B+!$'*V2DO4[_%]S(<PC(E[-DG-FQRT;O*B'YB!O#W*8"HV)&
-M/B2&&9]+.R4XQ;"58D,9PI.\)&H2MT8GP@0`'`$``!P!```"````10`!&%H@
-M``!`$0``P*@!`<"H`0(!]`'T`00'Z8@*M+`)K;MXL$42Z4<XK1(N("0(````
-M`@```/PA``#@>'9MMCZGTJ52)N7<NOKGY*(SJKQ1^.=ODX^>=-&ZN)=N5S)N
-MZ9S\:ORVO7Z#?6=XL=BK;IT6N3AD]8*ZWP4IFN"O1ZCK5QAJ;,6@N\CG^TOX
-M(36/X^21E<5:&>Q?FS,B33R\"@#"C"@H8FOQ@M@SRLW0F'MO,(R8O"_D]=Y=
-MK`ZZP6$/>(2P(X6!ZD6L@'JE>V*G[O4N-#F>^A3T`+5?=82.[CV'K)N3,J7T
-M)@A",9EL0@QR&P!D#K.^]-YLTEFU1B(-]F$NHJU/6H\VNTE/]KO8^TEK+4(I
-MX0I<*&H2MT;5S`0`_````/P````"````10``^%HA``!`$0``P*@!`<"H`0(!
-M]`'T`.0&R8@*M+`)K;MXL$42Z4<XK1(N("0(`````P```-PA``#`:1O+EBN#
-MR(EZ(ST[*9Q@?VBD8?'4RYOS6[&`J*W6`ML!`;4_A$IFQ9HH2<^6<HG3^S]A
-MO3=9+AZE,FIYG5Q;VC2%QFXE71R90U\TV#UXNPS(@/RGC=U"<_=^&KE5F"._
-MM`"63K(FG9R"DH65L*#H<5(V8>*E&XR$4)7W(D4VK;D\TNE3JA9H5<\X=OC5
-M1CP&V6+D4'&21R*5'A4A$/CAR-,3;>(O2?+O[C*,*@E3XWQJO&T1[?O?&_;3
-MFT9J$K=&D]<$`&P```!L`````@```$4``&A:(@``0!$``,"H`0'`J`$"`?0!
-M]`!4!CF("K2P":V[>+!%$NE'.*T2+B`D(`````(```!,*0``,.7<'(*"E9LG
-MQT8"5'Q=IU,3R0*_QTP/D42XAOZ`5X@F^=,[,UFT=U30YJOR:A*W1H_R!`!L
-M````;`````(```!%``!H6B,``$`1``#`J`$!P*@!`@'T`?0`5`8YB`JTL`FM
-MNWBP11+I1SBM$BX@)"`````#````3"D``#"4W9(6,5GZ2/<<G,J]J`$BYY8U
-M&0#5S\_M"4T/-1>HV]'L[9BD9;024:P]_6H2MT;$#04`/`$``#P!```"````
-M10`!.%HD``!`$0``P*@!`<"H`0(!]`'T`20'"8@*M+`)K;MXL$42Z4<XK1(N
-M("0(````!````1PA``$`47K9#N\2U%TK$%8B5L!OP]XCZ2'QVQP.D@,;V+DT
-M(A,7<M`ND;7]B\Q*+JI$9(4$(2#;9YL3&S,7@_H@YGP2.B.?HWX\&OAKX#U0
-M\G?BTENC8*KK]O'CD?5)7WL;7!FZ>.[W_F3RY3AM(AO)U)6Q*"E1UMTA,"JL
-M;N4[05*8%#_L`[*[HI<E$4)`1QVQ,[65J[MX8^&'C$!=CZ5>DOF/,M[X?:A3
-M6/*@&IRM"FB24]KMGL`4^:G/(1KE_H2W<=`*\NP!?,KJ(.A=-H4O`G8[,WON
-M=>O$]P>2`-(QF)`=P_:&@%!>JRJKN84?2O>Y$D^0T-6Y%&F"K1C64("$:A*W
-M1DL9!0`<`0``'`$```(```!%``$86B4``$`1``#`J`$!P*@!`@'T`?0!!`?I
-MB`JTL`FMNWBP11+I1SBM$BX@)`@````%````_"$``.`U?+2=*XM8A^#O`K*Y
-M7%+<&UOHF=D$(1&V>N0EQ$1\7^\`:MBI]/\HIY[`UR%V7V@=A^"<L`XHV/K&
-M<AG#CCNHD+)FWQW*<V6TW?>10*YHF"<LQ,/UF"!\]<]U??XVE+?H0Y6ZS<FM
-M5C.LR#,B'UM=3T0IA]GXMY-2$&NFS!34K]<*M%G=OS9S.\KK:39<U[E[TN2E
-M.XF:CJEQBN:6OH;;2%*;]+)?A]C6R,3$O(^#_HLOFY":OS<5G_>K-VQ4YUR.
-M2H8)5\0P-1`&-/1[.-_WV/YC'?*18M]Z\!_B:A*W1O`H!0#L````[`````(`
-M``!%``#H6B8``$`1``#`J`$!P*@!`@'T`?0`U`:YB`JTL`FMNWBP11+I1SBM
-M$BX@)"`````$````S"$``+!`8]7<4_?;G("#P]($*A^IU-(8V,7;WQ\`EW/J
-M/6-;A2"S!B?O+0T5R(T-]I=^7HT@4^3:PXR7F%.EJ]J$K8UYWM&^FI)H#/<<
-M+3U\+JA0:^Y%3685G;T`2?H6O0`JJESF6L@Z2?!6XA'5A?"PFXE^_'<5IOCA
-MHX<KK8Z=;A5#8;3'&%N8SOK\*4=5B;B*&IAO8%WM;DE*05Y6[,U]`EUTDM+A
-M=84[>R9$N-^Q:A*W1I1+!0#L````[`````(```!%``#H6B@``$`1``#`J`$!
-MP*@!`@'T`?0`U`:YB`JTL`FMNWBP11+I1SBM$BX@)"`````%````S"$``+`%
-M0SH,?:'T+F+`S'$$891#!/<@FK\+[L[4=0`XIK15P7M(E5+#>7G]SRI1YSD*
-MZZ`,\,(>&72BK5_Y0)P0';YAQJ[+3.^"\Y+^L9G%/;NUOP=$]EN1#253H"@E
-M"45.^GT-U7R94[**%X=B0"AUVH.M1JM9BSDD_+#"T7C8E9>R8TEVA,?Z^>G]
-M>==93!#8OXL@4;I.KI$J'I:ZZ<F_(%4M,DAPFG&YEL:C4U';:A*W1MYG!0`\
-M`0``/`$```(```!%``$X6BD``$`1``#`J`$!P*@!`@'T`?0!)`<)B`JTL`FM
-MNWBP11+I1SBM$BX@)`@````&```!'"$``0"LD6]9U.'>(;45VY!'(4X6WL^K
-M\\>."V4W/">G2OU+733S`^%0QW",MZ\9]^4$NQ]!TDZB+8CX]W@^H`.#-_XK
-M,L<DILS!RM0D8^@V7`9,%#6>'1C_6M?CP6EXJYDD7>X0Q)2[MFSM('YR!PV$
-M5@WW<:OJD'H3VBK4-HC*')Y>J-23LGL<,.!0,P[XD=PRK%F89);'9<B@]0TD
-M,E*@__):"44N@K4<#?%J'N+2!>F">SK.:="HE,[$ZRI?KL15M(MKVT/\$_&:
-MUL>X(C86F6;"OML:G"R,[]E(KDJ*X7+.U[I._,;9ZI8H3(LH/B-_ND/?79(Y
-MYUBVG-L$=/AJ$K=&EG,%`!P!```<`0```@```$4``1A:*@``0!$``,"H`0'`
-MJ`$"`?0!]`$$!^F("K2P":V[>+!%$NE'.*T2+B`D"`````<```#\(0``X-[5
-MG(,T<=@*7>'#589U;Y/VWQP1MLH+AYR00,1B=S-4IMH4@$1&.%ZMI^)GL^.[
-M_@`J3"^;QA*[OR2DZ.&U>H24X`:CO)XG4<CLQ@9]QU0[_EF[P$I&?100V7^=
-M.8@3FC76\H_\:,!`)&\81<P;%*QEIR[0"W<'%ZRN\#T9W*O$^]EARK$)@BAO
-M!&2<K3S\_:'$6_'#?JLI\C?Y4(9Q34E)OAEJ\_A(<YT*1'WZW7-;Q]R$2T&5
-M;?5[Q_?N5*7#QWO<GA749/$P!A:RVD51.EOS!L27L07$`JN>*$)J$K=&Q8(%
-M`.P```#L`````@```$4``.A:*P``0!$``,"H`0'`J`$"`?0!]`#4!KF("K2P
-M":V[>+!%$NE'.*T2+B`D(`````8```#,(0``L+85<@2Q]?SR@@!$+IMP7K0M
-M8L(!S1TV9\@^((L10+!Y^"QS0ZNS[=;.GB[W8Q<1X4[C_N>ZA79V4+:.(V?<
-MP*-PJDE^5CY)Z??%`TO_+:]+/OP?],KRM+44%[323<X%B$AY2U;Y>__TRB"@
-M'@\/<A_GTGHQ6",)J*L$OAME@(#%WW]#ZL]?E%&#?Q.N_L8+M-^1RM+CD9_4
-MTSMF26H3.#/PF01IR3ZF\`%/G>UJ$K=&$J4%`.P```#L`````@```$4``.A:
-M+```0!$``,"H`0'`J`$"`?0!]`#4!KF("K2P":V[>+!%$NE'.*T2+B`D(```
-M``<```#,(0``L*T%`Z5(7)N$*VU*E;7O&8W!"/$0$)%!XXA9IWZDZ<W.2(#'
-MA71GV`SC_35M\EKX!=*TKO=:"H+5=MF\]^>*(L`K>C$[FU%AM^HSRT7^@5M3
-M*A\[VX<O)[V0]D<+-;>2308V)@%U@*X<$0\W3H-IS:MY(LO]Q-`IM1LHE'"S
-M';"(41K,X^LF$P>>HKWL5[$!Y*2J2)H(4,#Q/G^##DX"WH)U1RU\KSV8)TSE
-M(RAJ$K=&8\L%`(P!``",`0```@```$4``8A:+0``0!$``,"H`0'`J`$"`?0!
-M]`%T!UF("K2P":V[>+!%$NE'.*T2+B`D"`````@```%L(0`!4"M8JV0GH2,*
-M-7O:<0*QI+,,DAV9%Q>DY[>'\OECJ#26;I,QM0JYE]%"YX*UG@8_41KXKT0.
-MY_=MRP67,K-SK9"E"V@JIN[GNH(T/))HO@P@]$6'=U$F<RJ']`Y!ACTDHNG%
-M;Q?$S)N%_:M45HCO!BK^])9*?)I3,\6-_9HR;]@0!0U-##_JV,[X@90*'0VS
-M'0BYI,?]KIR_QNN'[$%JX!9(WQ@CFU2E[EV>JL3MDAN[X3M272FDZWQ_<8S@
-M3FRL.4FRYHUR$U'8=^+PJY`JSTH:>IPSL3Z4ULU"A%X8$`3;/J3BGVR4!4J]
-M+;59#D8:&9?';J_)5)A^"0";MHLE@CL`.JD&`,5*,D5WRJ-Y(9Z$=P?^1;/M
-M6M+U6*0"MHZ"AD/19'X&(&`-3Z[>F+MM:09&5((`:)C3:O;6^GHH'VLXS*U>
-M]?F#S!:=)Y.+:A*W1O__!0!<`0``7`$```(```!%``%86BX``$`1``#`J`$!
-MP*@!`@'T`?0!1`<IB`JTL`FMNWBP11+I1SBM$BX@)"`````(```!/"$``2`?
-MCSLG%1.7K'+HD!#P7R\:Z`'`A7:D.1:P)/09!:06%X"#U7](NT%4>+:])8Q_
-MO\&>,0T_L.T1&!<<GVK?A_%UJFRT/ZDY9C@1(W>]27J90,>5R0]7U)!;&-M!
-MA\D>9=^-I/@THVS6+)<!&`<[:IWYA:7"&9Z(Z%''=UF'RNK$<B"4"<%S1=\K
-MP7>ZO\!O?W;CMK(.!#K3][0DD+6,+Y0US-X#L&H.+=T@YZ$`GGGWY_!&WT6Q
-MR`P%ZP!VONPUGV9B%#G5>O&`B#,[!$<R?W'W1S*4\+41H1?Q\G^CT:J#LPNN
-MXB3+);+FT`+WUOGE4]@PIZ**^W*-(1V22,S/]&Y7##42YV\/\GR(?CS+,YPS
-M?WM+J?"[&?.3KCQ5%6H2MT;=)@8`?````'P````"````10``>%HO``!`$0``
-MP*@!`<"H`0(!]`'T`&0&25\WSRZW"&8K5O`+VI`QSA<N("4(`````````%PJ
-M``!`3H."16W/W9?7L3/2X9/I?>']XP1?='B6E0?*.:Q&WS>SN?S_7+*6?(N<
-M0'NJ@6>A!;!4:ER>S)Z'4VP`:A*W1JLY!@!L````;`````(```!%``!H6C``
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y7S?/+K<(9BM6\`O:D#'.%RX@)2``````
-M````3````#"NN*9[MX3//SC$J%$>-%-"4#Z.G:3/ES:2Y;3A_=^^ACFFYZ;[
-MC.HV1`?8@6H2MT8(2`8`;````&P````"````10``:%HQ``!`$0``P*@!`<"H
-M`0(!]`'T`%0&.5\WSRZW"&8K5O`+VI`QSA<N("4(`````0```$PJ```PKK$U
-MO`2QFO6.O]7=8SZX851+I(W16[>)XW[Y*:!CHGNJF^W2R'X6/6=^[EMJ$K=&
-MD54&`&P```!L`````@```$4``&A:,@``0!$``,"H`0'`J`$"`?0!]`!4!CE?
-M-\\NMPAF*U;P"]J0,<X7+B`E(`````$```!,````,%U4C'`61D((O4%N3\E9
-M>&+>P'#VDGUEDD#.\>Y]I?]E@PX(`L!JKU4BQ2_<:A*W1JI0!P"8`0``F`$`
-M``(```!%``&46C,``$`1``#`J`$!P*@!`@'T`?0!@`=E;^^I=3";/9P`````
-M`````"$@(@@````````!>"(``'@#``!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``Y?AW^%B65_JG66HXCS)]G&Y7[*7OI-UPOJ@.K9*15N#BCB0]
-MQ0+L>K)84Z!V)H27<T*+K!>N''JO2,]-)XLK3DURQZZ!)YU=9J':)Q1BG1<(
-M7X^4&@'57ZM'6BQ!K3)A""$K\(>NP!XI1XLB&M0:'AE00KW"1:1J%H^8QSR%
-MQ8<I```D9(;Y4KQT?RDF1_X"P-Y1!?BMC/`*//AZ63D`+Z)_%\HI```<``!`
-M!`3`S*.$$E[+*A3.S3A&0$S*$%=:````'```0`5O6K3W&,P$ONJ"$/NK%UU,
-M1`_;C6H2MT8+>PH`F`$``)@!```"````10`!E%HT``!`$0``P*@!`<"H`0(!
-M]`'T`8`'96_OJ74PFSV<```````````A("((`````````7@B``!X`P``=`$!
-M``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``.7X=_A8EE?ZIUEJ.(\R?9QN
-M5^RE[Z3=<+ZH#JV2D5;@XHXD/<4"['JR6%.@=B:$EW-"BZP7KAQZKTC/32>+
-M*TY-<L>N@2>=76:AVB<48IT7"%^/E!H!U5^K1UHL0:TR80@A*_"'KL`>*4>+
-M(AK4&AX94$*]PD6D:A:/F,<\A<6'*0``)&2&^5*\='\I)D?^`L#>407XK8SP
-M"CSX>EDY`"^B?Q?**0``'```0`0$P,RCA!)>RRH4SLTX1D!,RA!76@```!P`
-M`$`%;UJT]QC,!+[J@A#[JQ==3$0/VXUK$K=&A'H!`)@!``"8`0```@```$4`
-M`91:-0``0!$``,"H`0'`J`$"`?0!]`&`!V5O[ZEU,)L]G```````````(2`B
-M"`````````%X(@``>`,``'0!`0`,`P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M``#E^'?X6)97^J=9:CB/,GV<;E?LI>^DW7"^J`ZMDI%6X.*.)#W%`NQZLEA3
-MH'8FA)=S0HNL%ZX<>J](STTGBRM.37+'KH$GG5UFH=HG%&*=%PA?CY0:`=5?
-MJT=:+$&M,F$((2OPAZ[`'BE'BR(:U!H>&5!"O<)%I&H6CYC'/(7%ARD``"1D
-MAOE2O'1_*29'_@+`WE$%^*V,\`H\^'I9.0`OHG\7RBD``!P``$`$!,#,HX02
-M7LLJ%,[-.$9`3,H05UH````<``!`!6]:M/<8S`2^ZH(0^ZL774Q$#]N-:Q*W
-M1MK-#@"8`0``F`$```(```!%``&46D@``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M\\,H(+K\:X(``````````"$@(@@````````!>"(``'@$``!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``=Z!MC6D$.*;<RQW=_+LF4]S\^V+8%T<S
-M3HFP"<%*,+;+P`^?_"K'QQ9X6P-1<EJ,IA[*-?G9KDEJ'(<+XBGPW+9,=0<@
-MM0-S!>]]\\.30B%\M;%3UKE][HYF'7BF*ZKP!PD*Y259#\,7I3QPT^&7W-Y$
-M_?@>U#X2H,[(Y<%K\Q(I```D$=2F&=SG1BDOOG0*>LFXM:*@172,F4$<KWPC
-M@DGZ\3\I```<``!`!`-[Y7!]^E-5,Q(-Q`HB*Q-IX`D1````'```0`6H#8V1
-M7S#E4@S%S&H</W$GG-;U$FP2MT;/L@(`F`$``)@!```"````10`!E%I,``!`
-M$0``P*@!`<"H`0(!]`'T`8`'9?/#*""Z_&N"```````````A("((````````
-M`7@B``!X!```=`$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``'>@;8UI
-M!#BFW,L=W?R[)E/<_/MBV!=',TZ)L`G!2C"VR\`/G_PJQ\<6>%L#47):C*8>
-MRC7YV:Y):AR'"^(I\-RV3'4'(+4#<P7O??/#DT(A?+6Q4]:Y?>Z.9AUXIBNJ
-M\`<)"N4E60_#%Z4\<-/AE]S>1/WX'M0^$J#.R.7!:_,2*0``)!'4IAG<YT8I
-M+[YT"GK)N+6BH$5TC)E!'*]\(X))^O$_*0``'```0`0#>^5P??I353,2#<0*
-M(BL3:>`)$0```!P``$`%J`V-D5\PY5(,Q<QJ'#]Q)YS6]1)L$K=&@?0(`)@!
-M``"8`0```@```$4``91:5@``0!$``,"H`0'`J`$"`?0!]`&`!V7SPR@@NOQK
-M@@``````````(2`B"`````````%X(@``>`0``'0!`0`,`P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``!WH&V-:00XIMS+'=W\NR93W/S[8M@71S-.B;`)P4HP
-MMLO`#Y_\*L?'%GA;`U%R6HRF'LHU^=FN26H<APOB*?#<MDQU!R"U`W,%[WWS
-MPY-"(7RUL5/6N7WNCF8=>*8KJO`'"0KE)5D/PQ>E/'#3X9?<WD3]^![4/A*@
-MSLCEP6OS$BD``"01U*89W.=&*2^^=`IZR;BUHJ!%=(R901RO?"."2?KQ/RD`
-M`!P``$`$`WOE<'WZ4U4S$@W$"B(K$VG@"1$````<``!`!:@-C9%?,.52#,7,
-M:AP_<2><UO42;1*W1AX`!P"8`0``F`$```(```!%``&46G```$`1``#`J`$!
-MP*@!`@'T`?0!@`=EKR!B"1X_A80``````````"$@(@@````````!>"(``'@'
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``L^YY(ZAS-B]%L(`Z
-MWEX;=!:]&TNS9=VQ)K*7B.A#%]Y9T`5YUR^=EE_AA7Z5R5>04G@"V=R>C/(G
-MB0"HF/P'0A[QN&,1(S?:W(X37M]"&CCPO1*G$[B#%AWY0#+UT#X#L1H7'T1\
-M">G8J!ON98@@G\ZO(7_*^X1Z<O,3"(6":"$I```D,9[?!Z9+[SI\88-(Z:(]
-M!0>D780&*AU%K35%4H"&@\@I```<``!`!&I&V,6GLHG%9XA66L<%L%,H*)1"
-M````'```0`6G#'UG6I+56=5_B;2$E?6<A@R\FVT2MT;-+`H`F`$``)@!```"
-M````10`!E%IR``!`$0``P*@!`<"H`0(!]`'T`8`'9:\@8@D>/X6$````````
-M```A("((`````````7@B``!X!P``=`$!``P#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``+/N>2.H<S8O1;"`.MY>&W06O1M+LV7=L2:REXCH0Q?>6=`%>=<O
-MG99?X85^E<E7D%)X`MG<GHSR)XD`J)C\!T(>\;AC$2,WVMR.$U[?0AHX\+T2
-MIQ.X@Q8=^4`R]=`^`[$:%Q]$?`GIV*@;[F6(()_.KR%_RON$>G+S$PB%@F@A
-M*0``)#&>WP>F2^\Z?&&#2.FB/04'I%V$!BH=1:TU15*`AH/(*0``'```0`1J
-M1MC%I[*)Q6>(5EK'!;!3*"B40@```!P``$`%IPQ]9UJ2U5G5?XFTA)7UG(8,
-MO)MN$K=&>2P!`)@!``"8`0```@```$4``91:@0``0!$``,"H`0'`J`$"`?0!
-M]`&`!V6O(&()'C^%A```````````(2`B"`````````%X(@``>`<``'0!`0`,
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``"S[GDCJ',V+T6P@#K>7AMT%KT;
-M2[-EW;$FLI>(Z$,7WEG0!7G7+YV67^&%?I7)5Y!2>`+9W)Z,\B>)`*B8_`="
-M'O&X8Q$C-]K<CA->WT(:./"]$J<3N(,6'?E`,O70/@.Q&A<?1'P)Z=BH&^YE
-MB""?SJ\A?\K[A'IR\Q,(A8)H(2D``"0QGM\'IDOO.GQA@TCIHCT%!Z1=A`8J
-M'46M-452@(:#R"D``!P``$`$:D;8Q:>RB<5GB%9:QP6P4R@HE$(````<``!`
-M!:<,?6=:DM59U7^)M(25]9R&#+R;;A*W1HM]#@"8`0``F`$```(```!%``&4
-M6ID``$`1``#`J`$!P*@!`@'T`?0!@`=E0QJ#-MEAF*,``````````"$@(@@`
-M```````!>"(``'@(``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M(0TO=%L(']HZ-&SXM<B07RH`@UD2MF9VEZT/JB1PM%;=Z&LM_/-#33;?MES@
-M%0%77IM&Y0MKJ^#WLV](F'ZVX-3CGD#+!QV0)\#;I<#Y2DP3^<^".+2D;JIS
-M9%O8?X2%EJ-75Z)PE/JYW("IQIX`LP_-\9:)QAZ&`I8)8GVB-'PI```DFGWC
-M)!4M!P2\&TT&U3L6#Q.L!S6]PQ!K;'=^XM>!U>HI```<``!`!$LI^R9^>.S*
-M!CM:A>#W_:O$M-Q@````'```0`5T00T>'E#NM?N%X^>C):C`X(Z)Y&\2MT:8
-M9`(`F`$``)@!```"````10`!E%J=``!`$0``P*@!`<"H`0(!]`'T`8`'94,:
-M@S;989BC```````````A("((`````````7@B``!X"```=`$!``P#```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``"$-+W1;"!_:.C1L^+7(D%\J`(-9$K9F=I>M
-M#ZHD<+16W>AK+?SS0TTVW[9<X!4!5UZ;1N4+:ZO@][-O2)A^MN#4XYY`RP<=
-MD"?`VZ7`^4I,$_G/@CBTI&ZJ<V1;V'^$A9:C5U>B<)3ZN=R`J<:>`+,/S?&6
-MB<8>A@*6"6)]HC1\*0``))I]XR05+0<$O!M-!M4[%@\3K`<UO<,0:VQW?N+7
-M@=7J*0``'```0`1+*?LF?GCLR@8[6H7@]_VKQ+3<8````!P``$`%=$$-'AY0
-M[K7[A>/GHR6HP.".B>1O$K=&+Z8(`)@!``"8`0```@```$4``91:JP``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V5#&H,VV6&8HP``````````(2`B"`````````%X
-M(@``>`@``'0!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"```A#2]T6P@?
-MVCHT;/BUR)!?*@"#61*V9G:7K0^J)'"T5MWH:RW\\T---M^V7.`5`5=>FT;E
-M"VNKX/>S;TB8?K;@U..>0,L''9`GP-NEP/E*3!/YSX(XM*1NJG-D6]A_A(66
-MHU=7HG"4^KG<@*G&G@"S#\WQEHG&'H8"E@EB?:(T?"D``"2:?>,D%2T'!+P;
-M30;5.Q8/$ZP'-;W#$&ML=W[BUX'5ZBD``!P``$`$2RG[)GYX[,H&.UJ%X/?]
-MJ\2TW&`````<``!`!71!#1X>4.ZU^X7CYZ,EJ,#@CHGD<!*W1@*U!@"8`0``
-MF`$```(```!%``&46L4``$`1``#`J`$!P*@!`@'T`?0!@`=E.<IW'A9)+]T`
-M`````````"$@(@@````````!>"(``'@)``!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``6L,:&K5$UY?W4@#(G'5(VSX3!V$^<96*=BG+8-G;0.4(
-M60?W*3SXB[<5'AS`N/J4%U="Y$("9CQP,#W@O#ZA#S9U=LYV:4_K&GMM$9&^
-M9.QEH,UR<:_KP!_<Y`NRJPD*KJ$-Q1SA(-=W5&1$S!G"[.(.;N_&@;D0[0#(
-MQ3M&=2TI```DX.@-X08$A6L/I;K=(V2%5*F@4X@,%9C6=D1&[OPE7'(I```<
-M``!`!-#?4J30P+_D>_%O%E)%_D`N!R`+````'```0`7)XP+DOOJ,@)&"P#B\
-M0U;O?G+ZHG`2MT;+W@D`F`$``)@!```"````10`!E%K+``!`$0``P*@!`<"H
-M`0(!]`'T`8`'93G*=QX622_=```````````A("((`````````7@B``!X"0``
-M=`$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``%K#&AJU1->7]U(`R)QU
-M2-L^$P=A/G&5BG8IRV#9VT#E"%D']RD\^(NW%1X<P+CZE!=70N1"`F8\<#`]
-MX+P^H0\V=7;.=FE/ZQI[;1&1OF3L9:#-<G&OZ\`?W.0+LJL)"JZA#<4<X2#7
-M=U1D1,P9PNSB#F[OQH&Y$.T`R,4[1G4M*0``).#H#>$&!(5K#Z6ZW2-DA52I
-MH%.(#!68UG9$1N[\)5QR*0``'```0`30WU*DT,"_Y'OQ;Q921?Y`+@<@"P``
-M`!P``$`%R>,"Y+[ZC("1@L`XO$-6[WYR^J)Q$K=&[=T``)@!``"8`0```@``
-M`$4``91:U@``0!$``,"H`0'`J`$"`?0!]`&`!V4YRG<>%DDOW0``````````
-M(2`B"`````````%X(@``>`D``'0!`0`,`P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"``!:PQH:M437E_=2`,B<=4C;/A,'83YQE8IV*<M@V=M`Y0A9!_<I//B+
-MMQ4>',"X^I075T+D0@)F/'`P/>"\/J$/-G5VSG9I3^L:>VT1D;YD[&6@S7)Q
-MK^O`']SD"[*K"0JNH0W%'.$@UW=49$3,&<+LX@YN[\:!N1#M`,C%.T9U+2D`
-M`"3@Z`WA!@2%:P^ENMTC9(54J:!3B`P5F-9V1$;N_"5<<BD``!P``$`$T-]2
-MI-#`O^1[\6\64D7^0"X'(`L````<``!`!<GC`N2^^HR`D8+`.+Q#5N]^<OJB
-M<1*W1J@L#@"8`0``F`$```(```!%``&46WL``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E[$DRRB$7_X$``````````"$@(@@````````!>"(``'C_``!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``C^>")B8O,RM>FUM@M`0BWA*I,?VM
-MVNW;EN[OQ_3W*Q\E6#<%733M'3DRGU>WC#((K0T:KG'<!ZE/Z":.1W^0;WG*
-ME;+-(%D.WGFW2CK;L1`O(CK06.Q\Y\J+3BE9X=/;$>0MB<B=5$^<8"36^VEX
-MG(.;E?BB=9NDUQJX1`$`PKTI```DKUHPB[_$^'FSJWPF4;DDXVN#DG]`(R(4
-M"``7<X!M[<HI```<``!`!$\Z])+>>WE>&@`"/VI'NT@OR-H8````'```0`5C
-M.-J#V+C5<_EE$ZI8ZW?U=F&(Q'(2MT9K%@(`F`$``)@!```"````10`!E%N1
-M``!`$0``P*@!`<"H`0(!]`'T`8`'9>Q),LHA%_^!```````````A("((````
-M`````7@B``!X_P``=`$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``(_G
-M@B8F+S,K7IM;8+0$(MX2J3']K=KMVY;N[\?T]RL?)5@W!5TT[1TY,I]7MXPR
-M"*T-&JYQW`>I3^@FCD=_D&]YRI6RS2!9#MYYMTHZV[$0+R(ZT%CL?.?*BTXI
-M6>'3VQ'D+8G(G51/G&`DUOMI>)R#FY7XHG6;I-<:N$0!`,*]*0``)*]:,(N_
-MQ/AYLZM\)E&Y).-K@Y)_0",B%`@`%W.`;>W**0``'```0`1/.O22WGMY7AH`
-M`C]J1[M(+\C:&````!P``$`%8SC:@]BXU7/Y91.J6.MW]79AB,1R$K=&-%@(
-M`)@!``"8`0```@```$4``91;NP``0!$``,"H`0'`J`$"`?0!]`&`!V7L23+*
-M(1?_@0``````````(2`B"`````````%X(@``>/\``'0!`0`,`P``#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"``"/YX(F)B\S*UZ;6V"T!"+>$JDQ_:W:[=N6[N_'
-M]/<K'R58-P5=-.T=.3*?5[>,,@BM#1JN<=P'J4_H)HY'?Y!O><J5LLT@60[>
-M>;=*.MNQ$"\B.M!8['SGRHM.*5GAT]L1Y"V)R)U43YQ@)-;[:7B<@YN5^*)U
-MFZ37&KA$`0#"O2D``"2O6C"+O\3X>;.K?"91N23C:X.2?T`C(A0(`!=S@&WM
-MRBD``!P``$`$3SKTDMY[>5X:``(_:D>[2"_(VA@````<``!`!6,XVH/8N-5S
-M^643JECK=_5V88C$<Q*W1NYC!@"8`0``F`$```(```!%``&46]@``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=E,AL&AE=.7AT``````````"$@(@@````````!>"(`
-M`'B```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``[LRVD@WN79F!
-MC]QDM^&,PC2%-^OAX-4G[-D,*#'E!*Y]]"YZ50;R8MDKC7*=?$=ICXZOP)A6
-MV5JAM.W=X"S\1PA2I:5JD@U[BI$A$=$R:;-/U4*3"+.BD5LV.<8BCK1O:%O8
-MR:LO+]FP/\DG.ZQPD+*)]%<O2JS?$TF-+IR=)A(I```D=7SKL,F'5^$FL2C`
-M/RVSG/E<(MC2""Y50]#E"]KNP<$I```<``!`!&3@\34%5S!\W'AS71<41(+T
-M/V-]````'```0`6FL`B%6HXNM=_.K$0>AEWR8'>.?W,2MT:8D`D`F`$``)@!
-M```"````10`!E%O<``!`$0``P*@!`<"H`0(!]`'T`8`'93(;!H973EX=````
-M```````A("((`````````7@B``!X@```=`$!``P#```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``.[,MI(-[EV9@8_<9+?AC,(TA3?KX>#5)^S9#"@QY02N??0N
-M>E4&\F+9*XURG7Q':8^.K\"85ME:H;3MW>`L_$<(4J6E:I(->XJ1(1'1,FFS
-M3]5"DPBSHI%;-CG&(HZT;VA;V,FK+R_9L#_))SNL<)"RB?17+TJLWQ-)C2Z<
-MG282*0``)'5\Z[#)AU?A)K$HP#\MLYSY7"+8T@@N54/0Y0O:[L'!*0``'```
-M0`1DX/$U!5<P?-QX<UT7%$2"]#]C?0```!P``$`%IK`(A5J.+K7?SJQ$'H9=
-M\F!WCG]T$K=&M8\``)@!``"8`0```@```$4``91;YP``0!$``,"H`0'`J`$"
-M`?0!]`&`!V4R&P:&5TY>'0``````````(2`B"`````````%X(@``>(```'0!
-M`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"``#NS+:2#>Y=F8&/W&2WX8S"
-M-(4WZ^'@U2?LV0PH,>4$KGWT+GI5!O)BV2N-<IU\1VF/CJ_`F%;96J&T[=W@
-M+/Q'"%*EI6J2#7N*D2$1T3)ILT_50I,(LZ*16S8YQB*.M&]H6]C)JR\OV;`_
-MR2<[K'"0LHGT5R]*K-\328TNG)TF$BD``"1U?.NPR8=7X2:Q*,`_+;.<^5PB
-MV-((+E5#T.4+VN[!P2D``!P``$`$9.#Q-057,'S<>'-=%Q1$@O0_8WT````<
-M``!`!::P"(5:CBZUW\ZL1!Z&7?)@=XY_=!*W1E3?#0"8`0``F`$```(```!%
-M``&46_,``$`1``#`J`$!P*@!`@'T`?0!@`=E.?O="O^XAI$``````````"$@
-M(@@````````!>"(``'@``0!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``9UN@C2Q'%]FZ)MV=8(!%V42FS._`JS@UU0&X6<W(;V`*8A`PK0-DU(FQ
-M41?@Q+TS6+4OMNJX]N,QP:71DM&-C!<>:+BB-T6C;:)FXH?M)/O8U`SZ5X#(
-MO=-7^HI$-WR'LL>*M44<>$63WF#"]051IMAHEQ'LI>=SVU,BB^B1$^`I```D
-M5J@C$%V7DHB;:(N&#Q)]:#.G0:;TB!YX`G1AHNZQCQHI```<``!`!-L:>A51
-MR>\U6\2,4G$%JUHLX@=C````'```0`4FM"OP[[,U+Q"QH(&[+D#Z-;EO/'02
-MMT9<[@T`7````%P````"````10``6%OT``!`$0``P*@!`<"H`0(!]`'T`$0&
-M*3G[W0K_N(:1```````````I("(@`````````#P````@``!`!@````;;H!"2
-M9;?<$.#HUVU)[$!K[/#YX'02MT:P_0T`N`$``+@!```"````10`!M%OU``!`
-M$0``P*@!`<"H`0(!]`'T`:`'A3G[W0K_N(:1```````````I("((````````
-M`9@A```@``!`!@````;;H!"29;?<$.#HUVU)[$!K[/#YX"(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``9UN@C2Q'%]FZ)MV=8(!%V42F
-MS._`JS@UU0&X6<W(;V`*8A`PK0-DU(FQ41?@Q+TS6+4OMNJX]N,QP:71DM&-
-MC!<>:+BB-T6C;:)FXH?M)/O8U`SZ5X#(O=-7^HI$-WR'LL>*M44<>$63WF#"
-M]051IMAHEQ'LI>=SVU,BB^B1$^`I```D5J@C$%V7DHB;:(N&#Q)]:#.G0:;T
-MB!YX`G1AHNZQCQHI```<``!`!-L:>A51R>\U6\2,4G$%JUHLX@=C````'```
-M0`4FM"OP[[,U+Q"QH(&[+D#Z-;EO/'02MT:\(0X`4`$``%`!```"````10`!
-M3%OV``!`$0``P*@!`<"H`0(!]`'T`3@''3G[W0K_N(:1M03>L5SM#>DA("(@
-M`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#
-M```"````"`0```(H``"(``(``-(-%+X$:,?2E9.^R%J58'0.*?%.P?R*"MQ2
-MBFW*@&L.R\.T$(!X\3;8;F*N75V(7X;:.*YKM%%VT?H3XP-K`-\^?!ZPU>%1
-MA=P#(?^%^8/KB64(5U,F0,^Z6H5$2,?*U&<T.O\1CSS^KAZG.CD<AB0O/G<]
-M[.[I29#!B#(TQF&/*0``))[BL4]R3P--P?*S6'<T:JD2R77]EW@-P($ZMBFZ
-M;U3B*0``'```0`1GQA&/$QU7$R5%]?;W['2IQ>^P\````!P``$`%2EQ:0^H`
-ME@`,*9*!/%F>?M.X5D)T$K=&]TX.``P!```,`0```@```$4``0A;]P``0!$`
-M`,"H`0'`J`$"`?0!]`#T!]DY^]T*_[B&D;4$WK%<[0WI+B`C"`````$```#L
-M(P``T)G)]TVND<UC=L2,@A&B87W3;I'8WVRWF7SW5E=LQ*T-L68Y5MIYT3#X
-M\6HPX$OPU"RV'65K&\LUZW97/S#4(DU-8_>)AT^RG;N7JZQ!R7!H1^J8/BF)
-M:^M&*TV6MOMR5BCG)I&S]./TP#WFYF#%E"IV]:2(SKJ_R>'C'KL[)J+B#[6>
-M##U`EY#S?<B6YG^FM!22WEO`L\,8A/0O"L:Q4\*-4?=E!"2$HF\51I5NE^[X
-MTX-,R5Z=CP"&<YI!.BBG:GK_(2`3%-B'1SS97W02MT;U9PX`O````+P````"
-M````10``N%OX``!`$0``P*@!`<"H`0(!]`'T`*0&B3G[W0K_N(:1M03>L5SM
-M#>DN(",@`````0```)PD``"`R/).+3>;O(M,@QDV&0N80!O8[#MI@K?%0/`+
-MI8_W6=?":_*MMG>_33BD!$NX^V(:1J;(V$PF.&PC<_,A5+"1R?%2Y.(^;FX/
-MM%Q?MO^!VLH\:&B('&1R9FS86^<AXURB9Q9'7F*)FRAAQ)&%B/81&+VVJ*PR
-MG/_L>4,[\G02MT8XA@X`'`$``!P!```"````10`!&%OY``!`$0``P*@!`<"H
-M`0(!]`'T`00'Z3G[W0K_N(:1M03>L5SM#>DN("0(`````@```/PA``#@R3P,
-M=R)[M$C6K\7V+^R:KWD-'`UD^+3L(U6C(2R[)+93#_WP.`P1@6Y_GP-VK+`R
-MCQ+WAS(LPC!DQ"$)@PL*%;Q2^;3Z^@F"8>&&&J"H%,X#12BH`6+\[O;ZA;#>
-M>1_.^VF-"B:+/3Z&S0@`;TQE70`6Q@9"6;7V0+25;$7$ZPUJ%,W["\YJCJ'/
-M.PSR^I5+=W<^-!6]Q^YJJYQ;0K9$C9PUT_NTBH'X)]>\Q5\.,LCD(DK>%9\?
-M0JHLI1^2%&Z(P8EUX;V_SKG%/$R`N.>DV+,OGGJU](6I!V>+!702MT:.D0X`
-M_````/P````"````10``^%OZ``!`$0``P*@!`<"H`0(!]`'T`.0&R3G[W0K_
-MN(:1M03>L5SM#>DN("0(`````P```-PA``#`;?0HD,/H[+D_"OH3N=$TN#&:
-M"\A.&[>;4&5_V1#W-<.+HT*U)PGU,@(:65B;.9#Z8&^:74;GON8&6(SPV1*K
-M-2)/C/NF4A#BLL\;#I)`[@"#::F.L8"/%GK]/M*`T$[86<8#0D>F5O(_"0?5
-MF4CDHB_54YGB(%;%G3_&@,2F:.)S509S]SX$\%;%2/#&=%#'J@`H@,WW(I1+
-M-X=\(#J?<U.$$1=&>=.^@$EC`RGBQS'J(HQ.^>P_&_CK$@MT$K=&])P.`&P`
-M``!L`````@```$4``&A;^P``0!$``,"H`0'`J`$"`?0!]`!4!CDY^]T*_[B&
-MD;4$WK%<[0WI+B`D(`````(```!,*0``,`32OW=M&.)[S&SDJZS4T<7ZX6@>
-M?0W9>BX2\_D5);Q/6#G7M0KYO<"3&31\=!*W1C^X#@!L````;`````(```!%
-M``!H6_P``$`1``#`J`$!P*@!`@'T`?0`5`8Y.?O="O^XAI&U!-ZQ7.T-Z2X@
-M)"`````#````3"D``#"LT&PW0+(@A@^I<,@3$Q)TI91\V;WA?LA:DCN,]05W
-M5?<27.,MJLIYBJTNE702MT:,T@X`/`$``#P!```"````10`!.%O]``!`$0``
-MP*@!`<"H`0(!]`'T`20'"3G[W0K_N(:1M03>L5SM#>DN("0(````!````1PA
-M``$`E:99YWUA:SVW.P_D.B/F$SFAK#G%R0DS4QGR]D?*K?#FGY!2IR051"O<
-ME=UT(Y-H7M](TG&ZF7HX8V=)HA^()RX<`BOSM6=TN[':XSQIX.W+`R_K`J`8
-M;RR/2N?Y,2OW*POKW56B=FO0Z+82>$<'`OX1*IVC(Y!_4E4399/U'=\;E>NX
-MA:#WTMR7D,)D21^=JXRJ\WOUC>\>TL_I9B4;(&(_::J["##_)N-==#"C<;`=
-ME8M5[:?FW]<XUXHJ6<"EH"4UK[HZEVK]$VY/&E@T:R87#3O3N)QRJG2HTL7\
-ME^YRK6L,SP=K!(&K2"\\`0#-U]33]"K64:]XK30+=!*W1BK?#@`<`0``'`$`
-M``(```!%``$86_X``$`1``#`J`$!P*@!`@'T`?0!!`?I.?O="O^XAI&U!-ZQ
-M7.T-Z2X@)`@````%````_"$``."1HS`A-OU]\F-Y^L89CL+?4Y]&$I>FYOS)
-M&_,NA*G(,4>,LFFXYR[6+O&!.N5;W'\&A+]!0I:H&HGK`K;M'#S*H1J-67G;
-MI5@NOF0&92XUP3_N$PXHI?$+6;3++NM)`]\'_&%EXN*B(F_MUF!D1$-(>8NI
-M_2E96J,5[*GN6D=F'ZTJZ5((-4N9KJGS@^@LSSEL*\6X];<9'/MRC-!"CR;]
-M;:L\%^`'&5BWZW%<";N:R89=$LEM:5.):$N&?_CP=X@NP^^>@PL^RWB,7*?Q
-M^G3[Q6)S=ZX"3)@OV%#I=!*W1OWN#@#L````[`````(```!%``#H6_\``$`1
-M``#`J`$!P*@!`@'T`?0`U`:Y.?O="O^XAI&U!-ZQ7.T-Z2X@)"`````$````
-MS"$``+`+"C?X"#0,6&%H-CK&JON^:GW06.SU_J80\@'LR??S!-S$2T@(GZ-F
-M5XN$N4C<XPX.-#AM6_C_*EGC'R$7^&%EN8#S-S>^Q]A?BU(<%A:9)O3,N:X6
-MN=VGJU%OS"U!9O6P$!GSU/6?YZ,9,!U6XJY<(\!`-F+]=W\/`1+;.U<H/5=\
-MK6_]0J=-#KS:1,BW"#IAZ.I<VRS?N&.VS)9=5Q2FY?,%J^S>$>9X7Y]U=!*W
-M1E$1#P#L````[`````(```!%``#H7````$`1``#`J`$!P*@!`@'T`?0`U`:Y
-M.?O="O^XAI&U!-ZQ7.T-Z2X@)"`````%````S"$``+#TN0YS,926)REHKJB8
-M1=.?3S3+[U^FMZZTXD,-LRK9M,!&5WS%Z&1>56!EVT%8EAD>77&`A<ISLEB*
-MQF9AV].&5JWC1]`JS^)L%#22A&M^++P-SF02/<Z]X=IH8AP.Y8W'+.T@&FS:
-M"@D35LX6=9LEP,_[@]#YRL[\4%X',7R7YZNNU$RY,5A*BY7KZ=I$XG1.U,\]
-M.J:,UM;OI$+/?4S13V=Y6UA<6O.AD.$*=!*W1@<N#P`\`0``/`$```(```!%
-M``$X7`$``$`1``#`J`$!P*@!`@'T`?0!)`<).?O="O^XAI&U!-ZQ7.T-Z2X@
-M)`@````&```!'"$``0"$LH,7A>Z0;\I`F-<;>U/^VL:<Q@POQ&@7>AVQ3WPZ
-M8OX<]T&$W'Q1C!1`P0$>[\6>EBO543X*`:J*%X`)MQ(I+0R?YT)O&GJ2@TM]
-M-@]HB*>4Q4SIB>AVYW9\U!C(LQNA5`Z39$$#J^ZHK1AQM8^06GPAB@)Y=3=O
-M?/Y1L7)<SL)A1DX\DSJU4_GC%N%,\M$#M,"#JPI+TC49]QP.APF[QE'AW]@O
-M+^$\#<;M.#B!!A47%:T:%)N-`"'F"@'_XQR_@F%&B6%I)NEZ+3?\?-N$G*>_
-MNB,ZP4$HX?DET@]NOK]8C)H_MIP:LE[KEC<9M&":RQCZ<3E-`=AS<ZQT$K=&
-M7CD/`!P!```<`0```@```$4``1A<`@``0!$``,"H`0'`J`$"`?0!]`$$!^DY
-M^]T*_[B&D;4$WK%<[0WI+B`D"`````<```#\(0``X!7*%5WQ,L0%#UI$ZRDX
-M4(YFJ?$Z#R-'?W@JGTY2CO[F'\]T>+8LOEULKL\`L*EL4S.W?NB\TA6NW.CJ
-M9"F&+M"U7F(Y1TP/@IDK?*!LWQ[\;^MZ[D#G2DL]_#E9OJH]K>+S$L'>[AC*
-M+/9$\5R2ONA6<OQZOE'6[P(@2ZSDWHV64TD-(,+[KC&")`XZGMZ56ALN6:.3
-M>RWWG%UBK2!:(>1!EO%:H`;<9YW;[+3:7%ZH10MI%9[5K9#C?JJQ8PESY\R;
-M5_G\:F6[4A+R5,8FKE777F]"AV,JI-@HF7]U$K=&:@<``.P```#L`````@``
-M`$4``.A<`P``0!$``,"H`0'`J`$"`?0!]`#4!KDY^]T*_[B&D;4$WK%<[0WI
-M+B`D(`````8```#,(0``L)T)[$4NJ_E4>YT_0Z&L/S:[V46O>MYRQ>31X'?_
-MF_Z3E#$1,3_7$'?3BJ/@;\GO'APA8(BE)2&7`)F"S*4,>-WI%=F-SVI"FVQE
-M`*JX%0)D/Y*,SH+E*5G=XL-MQ0WO.MBM!<N(G=SE\7AQ";G.BRQO=&\ZM<SS
-M=`W9DZ<V0*!$\S+A$A^WTY?:S#A7(NEKA))):"&/_?D3X6DU\]AL:?DQ\$-/
-M^G<R^3?Z"<)U$K=&"RH``.P```#L`````@```$4``.A<!```0!$``,"H`0'`
-MJ`$"`?0!]`#4!KDY^]T*_[B&D;4$WK%<[0WI+B`D(`````<```#,(0``L#[_
-MX?EA0:Y&/\)DV2B<-#T2DZ$>'U]>LNLR'B^,N>=1X2!@))SC2$4N*-3PT>ZE
-MB.4#0)(W`N9:0`&"1UFC@7\!,$[_PRV4\@:3N2N$^19\^\L%8CPZZUFE0W11
-M=HYN_.WL;Z)F=?Y>BT2:"MCK/$X)OO1TBQ\<',79BP6Y*E8W+:6W3<$"<G82
-MQH[??G>ZDCW:_>4?5%EB.<N'4PTX-KX>*,TU)D[WX98#P$UU$K=&[T\``(P!
-M``",`0```@```$4``8A<!0``0!$``,"H`0'`J`$"`?0!]`%T!UDY^]T*_[B&
-MD;4$WK%<[0WI+B`D"`````@```%L(0`!4%;:/%X#2[+%YUFU*4**M#2@Z8)<
-MU=XG03$NR`*(L$'"MU07?5V,U7%S2;,'N`I:<K"`3RV)K`XI/4\QT,LMU<,C
-ME\9^HNYCSCQCQL"R!8OML2Z7CI`!$TX/#HVQ*K.::)/O`DV3[?-(I6#$#)AK
-M]F<\YJC'XWX\-:-N1O^F4V`@R)3'LEKCM4$3+!B-5)_))(\GMM;>E<N(+;0%
-MH(%D:J@O8N;L8??4=C5,QS2W\2771VPLC08Y@?%D<^.O7""M,18!ZJ]@E%JY
-M8[6UM(BZ4,;3C=:"K"W!U5CMQ88WVTVF+G2D!]$;4>C;TU5Q#"KGG]]!9B&1
-MH2P?P]E:K5Y`1]75](]K'MXV:PK_%XQ+X^&SC3L3_7W;ELZTX9EYYXZ*7M*H
-M;%>_.70Q2:]A"8PAE4-@X/%GRJB<LV!&MX0-\KB"3=:&K9%!G`V:65W==1*W
-M1BV$``!<`0``7`$```(```!%``%87`8``$`1``#`J`$!P*@!`@'T`?0!1`<I
-M.?O="O^XAI&U!-ZQ7.T-Z2X@)"`````(```!/"$``2"$[S4*0@.U7]B!?,V+
-MTYNC+LWA33G/6>%P15PVSLITQOZD,:A[>6\8$#D:#9O*)NT<!`C<6#_=K*\*
-M]@@;.@<KH`I;61B^,5-;&F[X+KULJ#L;1U'O%L'<,P\MO[7FYI:P)#"$%^4;
-M+)EEDCMQ&`N;^213G<V[K!"J_"!+13*=07N5%AS4&7[+X7O7D=G%&"-LM.@A
-M>C5B:PPW65'UD0Y(E+9ER"+P\6A?_;6&6\0+):VHFVC07ET;D=L=<']VJRX#
-MV#.GX%,=8#`GQC0%YN]'*[MFD3Z9AF5[/,GYP_![[2;[A./6HG0Z#,#%ZJAX
-M[IFBW]CX:LS1G?V`'OU1V,G2?PA@#:VVA7!(',Z"(:P%*A^Q[G,?NY_].[OI
-M)742MT9)JP``?````'P````"````10``>%P'``!`$0``P*@!`<"H`0(!]`'T
-M`&0&275O]QB#F/053.$%I7!STF4N("4(`````````%PJ``!`0V:-WD!%;-@\
-M.,/_MQN8A<;/$!(/_8P*((SV;U-%*K_+'75#R4=2G?5@+'AF(NDYLA:B?WY]
-MOT;&F=/4=1*W1MNV``!L````;`````(```!%``!H7`@``$`1``#`J`$!P*@!
-M`@'T`?0`5`8Y=6_W&(.8]!5,X06E<'/292X@)2``````````3````#!=)FM5
-M'@$3T9M,-$1I)/HXX07B0<2T>8)2D*RWTBB`8S67U5<R$@NC.TTU-G42MT9^
-MQ0``;````&P````"````10``:%P)``!`$0``P*@!`<"H`0(!]`'T`%0&.75O
-M]QB#F/053.$%I7!STF4N("4(`````0```$PJ```P\#["UYSW!?!C1PTWP2;6
-MW=XKR;=#"CBQ%;.O:3RKN'CINV`-2"R^-2I)4TAU$K=&G-(``&P```!L````
-M`@```$4``&A<"@``0!$``,"H`0'`J`$"`?0!]`!4!CEU;_<8@YCT%4SA!:5P
-M<])E+B`E(`````$```!,````,`\_:MS2K?^<7?(,$3](M/L"&5VMB.!LSX^/
-M=M5:%OT<26EAH.Q!`V1'/OE?=1*W1JO.`0"8`0``F`$```(```!%``&47`L`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E/.KOU[^[Q#<``````````"$@(@@`````
-M```!>"(``'@``0!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``K;KV
-MN.75LI%Z@_O7BGP@#G?XA<%&)2[AK=:$MQ67WCO2WY:)V!4,1Y5U.)D7I1`^
-MB1!]EVSRZPNMKY!&989U+C0[13KGT;HIA8!"RI'7UVD&]B16;?8<>S;[&,]1
-M7+/%R604U1OVZ1>T_EI&@#16D@U*.*;A<D1:`ZDD\)YGTBLI```D2\KUG'"Y
-MR)8Q_7+7OAI>O8B9=S+?YGX@:8?&"I=Q.C$I```<``!`!(S6JI7O1Y;7^_J;
-M?0Y')^,<ZWGY````'```0`5%&YU1$],G0<LE5XV:FCJ`OZ]7?W42MT8-W@$`
-M7````%P````"````10``6%P,``!`$0``P*@!`<"H`0(!]`'T`$0&*3SJ[]>_
-MN\0W```````````I("(@`````````#P````@``!`!@````9RN=UJLOECS"`^
-M=%`L(:%#W@<F#G42MT:<[0$`N`$``+@!```"````10`!M%P-``!`$0``P*@!
-M`<"H`0(!]`'T`:`'A3SJ[]>_N\0W```````````I("((`````````9@A```@
-M``!`!@````9RN=UJLOECS"`^=%`L(:%#W@<F#B(``'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``K;KVN.75LI%Z@_O7BGP@#G?XA<%&)2[A
-MK=:$MQ67WCO2WY:)V!4,1Y5U.)D7I1`^B1!]EVSRZPNMKY!&989U+C0[13KG
-MT;HIA8!"RI'7UVD&]B16;?8<>S;[&,]17+/%R604U1OVZ1>T_EI&@#16D@U*
-M.*;A<D1:`ZDD\)YGTBLI```D2\KUG'"YR)8Q_7+7OAI>O8B9=S+?YGX@:8?&
-M"I=Q.C$I```<``!`!(S6JI7O1Y;7^_J;?0Y')^,<ZWGY````'```0`5%&YU1
-M$],G0<LE5XV:FCJ`OZ]7?W42MT:P$0(`4`$``%`!```"````10`!3%P.``!`
-M$0``P*@!`<"H`0(!]`'T`3@''3SJ[]>_N\0W77(1RHORL"HA("(@````````
-M`3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````
-M"`0```(H``"(``(``$#;(])3TG<J3KC#'KUXY297#$W+[;6:N*&E"_\U,-FD
-M3E;B9#A@D4MO8?ROP-LQ87VOH-:O3<N@E@9#MDZ\"/E#]4:6X$I=:/`S*T2(
-M&8W_LF)@Q\LX?=J&%LXUXC.=0OEZ"%C7NZY=1@XGBL%V-.%Y)3D&S6/!M0R+
-M,'K6SJ(5*0``)&IYP=HRA.)ARW&80*),-:)T6ZL4"=.`./)]"](DQ!YC*0``
-M'```0`381:)S6=PO_=40J+Y`6(!SGZ]WLP```!P``$`%ZPJ4DB-XXHUR2LB'
-M@D^="DM^P]=U$K=&H4`"``P!```,`0```@```$4``0A<#P``0!$``,"H`0'`
-MJ`$"`?0!]`#T!]D\ZN_7O[O$-UUR$<J+\K`J+B`C"`````$```#L(P``T!)_
-MG!<P44=72P5OK9E.!?9C3H0/GH9X,)"",+F6#_>D%K5IJO9>1CU850QS5BL\
-M;-9\-#"^GN%#!(\P4XW\^<OQ7CD&@#BS.)#",W$#ZF**+]HK&(E@F@KJ,I'+
-M=+WDQI)CR:BPQ`B2LJJ0O9E\.#C_:_E&GHJ;V+15B6;T*O56J#UKK'T%%S+Z
-MO%A33A"E8\0?<W&!J41!8YCX24-Z#>IP3G])O>5>_.\.B:X'!%>M*,/2A\WJ
-M66KC+]M,?=P"()FT.TWRE:%Z[WAHCW42MT9*60(`O````+P````"````10``
-MN%P0``!`$0``P*@!`<"H`0(!]`'T`*0&B3SJ[]>_N\0W77(1RHORL"HN(",@
-M`````0```)PD``"`G"H]>P)Q-K`9/07FUW@:8N[&[X26R9<K"ODZ&G34TP9/
-MIVI9B$_*+U(WF3A3KCHDPWT<05#1")06N58"&?%/MO1-@W"1V@*PM"ER^3ZL
-M5@\--XKO$1*9FPK*:MT"^5MAY=]-)VT[@9MT"XS0QO@CCF:C,^R+[8X^%<C(
-M,G42MT9Q=P(`'`$``!P!```"````10`!&%P1``!`$0``P*@!`<"H`0(!]`'T
-M`00'Z3SJ[]>_N\0W77(1RHORL"HN("0(`````@```/PA``#@K[5.#)R_\:TS
-M]<^CQ,7U%UN4C8^`ME.8AR2\0JWJJP`9I2$LH<#0N4FB]5J(E5#FTBTH_[+I
-M\,F:O>(.O(N?L,:+TL:@F?"A`4\<_R_D_)(0_Q4[,3Z(R%,,<IYJYR5AA/IK
-M6(/VHQYRO(CN/VQ^`+^@MX+PBX#NK2_'H"A"U=X?Y%+J`.,1-UG&>6SGJ8.X
-M?+JOK8=;185AFRG:><0-0(A:,AK7)LLV;'&-PR8SA\82HOX!<6FYOT@32%N=
-MQ4=V^7\"(14H;IO9N@GB)*>M9/AUQ0VXG(U</H-YZ742MT;6@P(`_````/P`
-M```"````10``^%P2``!`$0``P*@!`<"H`0(!]`'T`.0&R3SJ[]>_N\0W77(1
-MRHORL"HN("0(`````P```-PA``#`SR<#Q63XT(16(N&Q8OI;(VJ+K9>2OSA<
-M[NL?9]HY:.-@1*1+N3L-I$;(B?0-(15<!8LQRX5Y*V5<M:GYH`"]::R/?Z2]
-M6KJB2IYY-2LMQ,I3('^J[4"SBXAJH,\1D\'T0*2#RAV)6$#<X=@GVKD\D0S`
-MN8>)^>&Q_#=!*0@GPC<T'U'/RJ[:#_7.MJ/$'B50XIM*1?O%LOM!F0T$D5@$
-MVH[2470/-E\SS>'<UW84)T_8_K<Y\L[D89,2L&]U$K=&I8X"`&P```!L````
-M`@```$4``&A<$P``0!$``,"H`0'`J`$"`?0!]`!4!CD\ZN_7O[O$-UUR$<J+
-M\K`J+B`D(`````(```!,*0``,+19[)<C@.A=;W!?26%.SP'R;?V*3EE?W323
-M0-]9M.F`<0'[9REKAC@FY:E==1*W1JRJ`@!L````;`````(```!%``!H7!0`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y/.KOU[^[Q#==<A'*B_*P*BX@)"`````#
-M````3"D``#!0A`JZ?)FK%_B$5;(G97YQ$;I>/;R,W,8BN$_.A7C0)]#B&)F(
-M$>NV6QK]/W42MT98Q0(`/`$``#P!```"````10`!.%P5``!`$0``P*@!`<"H
-M`0(!]`'T`20'"3SJ[]>_N\0W77(1RHORL"HN("0(````!````1PA``$`ZGV]
-M(CH[L)UNV175GG'9[!&1??%H)X,Q+I$HO2#HJ=*$>^-1#7+`4;[]#!N;BNK?
-MK;)F+_NIZR6U+5BU57E$F^FK3B4R$GG5Z[X"AT(KSC2)YF3+L^.-15!1M\1+
-MPA6#J9";C#]@7$PTI:>^U=(\@H^!2*/N(8`\N=Y-G*9S/+@1KA'ERY\&6JWD
-M'YIA2;@="PTL$*9%]F[3JK:MZ4%K'TXM4C#0O@_7C>?)I2LKUU5=<9^52JN8
-M3CKSA!ZR0]V^)1YSC",U.J*(CJVS>^J3*T?ER'V.A;V7O,YU?341V`'(\=]=
-M>?/J@K+D9!13O-#&"NLIC^J^S?B.`H3N=1*W1@/1`@`<`0``'`$```(```!%
-M``$87!8``$`1``#`J`$!P*@!`@'T`?0!!`?I/.KOU[^[Q#==<A'*B_*P*BX@
-M)`@````%````_"$``.#9R4?+;,_7N;F\D<0L[#4%QCMI*M#DG;FU.Y&X:)F_
-MEALCX??!3E0;[UFVU+/]J!F]EWDQF3;#/?BL:K)S[0+U1\M[R1^C#B=EZ;E^
-M.OA\+Y/5O>F0HX&^ODIB'*O(IAPNIP%=84'BGXWC7Z0U"JTXU/L`&OPJ1KK]
-M7)6=2IQ.2Q+8-S=\H:X\U>79P&!_%880G@$+,]-=71R\;[9_J;."U,89>W^O
-M]Y#_$YV@DTDX&2F\*U"AV=LPLGD8F?O5I2U-[>R)$Z;*P%4F]1GQP/2OZ1'L
-M^&/_85QJ`\G!=1*W1IW@`@#L````[`````(```!%``#H7!<``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y/.KOU[^[Q#==<A'*B_*P*BX@)"`````$````S"$``+`/
-MC@GQZ;_.E>=5H_<^LCI-28/2YPEW`M/]H[-*8=\9L3*>QL=*X1O1N#7VDF&*
-ML9,6470IF@]=4%(0NEMK_9E[2"K-8<##?%<S(%8>,\V:O?Q+UB?)<SKUF\M)
-M*MFBMD#9VE:&+LK9)O!*"[$PPJ0F^)_*KZ:X)"Z:I]04(<V""_<_I;5@-X<E
-M1<%Q#<RB9_,AK3B;Y(I@FNK/O6UTFV[VU^1RGN73@`4;CI?X=1*W1O,"`P#L
-M````[`````(```!%``#H7!@``$`1``#`J`$!P*@!`@'T`?0`U`:Y/.KOU[^[
-MQ#==<A'*B_*P*BX@)"`````%````S"$``+!\ZK$>S1R;26-?_H5BPY&]3-NI
-M4@>7P>I!$I#]JF(89G[(C+>0"2AWWC`YW:+\9A^CZ>)T"DGG)(&<M2[V8N3Q
-MY?3;`8E`T;^O=W`),^/"<9-D74Z"_G28("PZ/?FN(:$K"U^^!)1C@ZNN825Z
-MG$O&-H]FKFSO7#=-E^Z++0!J(P;]I"60'A7O@VC0N?X]4$8BP!5BDHY=N,81
-M1$!A`;*3J]34TGPI*1-)H98$=1*W1@@@`P`\`0``/`$```(```!%``$X7!D`
-M`$`1``#`J`$!P*@!`@'T`?0!)`<)/.KOU[^[Q#==<A'*B_*P*BX@)`@````&
-M```!'"$``0":L=HXJ4'9J+1=V8W!:-FL@FD0M7R/`<SELFMW+/2Z4^&TKY.W
-M$PT"=`69>P^2-:]^:$82EO$"2S,X9P%1YZ?,TM0:E905`OKAT;*R3OYMS?W4
-M7FMIY"0+>TFRIC07@F>Z8&2EX??%568:ME)8:'/SP'+9D$6[>O$!`7HI;:6C
-M\WH.MEJD:*A9/FO=E5&!D#AXGN]%V,6:8_$#-JOR`PGD:@\L*7U<P#_^2L"F
-M]!--'WL'ZG[B/AW1S]H)EBES8Q*BJT2J2ZIP"0-4UP$+Y9.<G!#"/),MII+F
-M#8!HS_3OJ0W']C3I`&F8V>/ZTI.C&0X%,@L\PEAWN7X.*+QU$K=&E2L#`!P!
-M```<`0```@```$4``1A<&@``0!$``,"H`0'`J`$"`?0!]`$$!^D\ZN_7O[O$
-M-UUR$<J+\K`J+B`D"`````<```#\(0``X.,]:G#_2JJNYB:+@4+L@/&/JCVQ
-MJ7U!%#PBIS9?%3^J=[<+:I59V2GM2VP#KSBSB;UI.GPN]FHZ[?0*(XT!"8I'
-MK_5X:4.X[_,6(,O7I-NM=0R(Y0Y1B0^!`FLG<.,FXHD\W:(U.Z=,X-(5FH#1
-M*(,X.?]M'//8E]:XX"02G`$Z/.PU.[U'\=VV>6GMRIB#/'8<5G;<8^B;!F1W
-M8[(1I14IUB92;AO11?5'KWT-=6A^/F>I(2KW6,@(0.<\=QO72#U(ZQE[4&:#
-MI%M6HU_]#SYRHMG%,[0:L6:0?X!U$K=&&3L#`.P```#L`````@```$4``.A<
-M&P``0!$``,"H`0'`J`$"`?0!]`#4!KD\ZN_7O[O$-UUR$<J+\K`J+B`D(```
-M``8```#,(0``L!W6O[?%Z"Y:0J%B:M?+(_/E0_(01]V&![>0E;%X<U/[MB)S
-M#K"Y3C+D8JE#:-4+I'G+B.<FFXF/Q>AFZ(&+,9;:P,56H^YC9\[Y>NK4QZ%I
-M8.?RB6&J8B=O@ZOZJ,+Y'4.&,C&Y?PT@M=#M9LD+'"';?8ZD)L^?):N0FBA=
-MBOH5:R2M*5J\CRV?*#XY\\5X?R1,#@N17/\\AN<V/3!U/A6R/Q#0E9LE.SJC
-M#65U$K=&!%X#`.P```#L`````@```$4``.A<'```0!$``,"H`0'`J`$"`?0!
-M]`#4!KD\ZN_7O[O$-UUR$<J+\K`J+B`D(`````<```#,(0``L"0EJP!S];AF
-M^T86:F.2\NL*$;-H:??NW0_II1]>>T1G-$7\;PO>G]];JW)9X7.6:8A46EQS
-M6)J(3`5BO['HK!^04:OO6<H10Q&K`2JT;%UZ4(-_9OS/6./U?>14T:J"HO2=
-MWKRJM$TS5F.&;OD.:M3BC'_H81MSZ'[R`JGG[ZVU5!5(MY[EO^CPBD@;YQG>
-M@>/WHR-9EX!]_N:F4Q[B/*ORV#*_4;TXI!@DD))U$K=&<(,#`(P!``",`0``
-M`@```$4``8A<'0``0!$``,"H`0'`J`$"`?0!]`%T!UD\ZN_7O[O$-UUR$<J+
-M\K`J+B`D"`````@```%L(0`!4,CO_'OQ2Y)F<Y6(F$'+(5+\L-RX!.RT6P#`
-M*G<<R-L'H4E72"RG:Q<N.I"K$]G<:A_A+XQ,7O@SWWZF#H\OBDR#D1$53'#B
-M'G_S7A,<P(,6];E'3\EB\[[)@_6RZ9T(>(I1AX=6E9D!?1384[=,U*<&/A*[
-M(G4"$$49OUJF".1_#//\6B55?Q&NF_%:_%Q]EP1^@**JRZ71P[U82%4L]OB"
-M48FJ]_2/N44.0='(\`KM:KVYB3N1POO<J8DOFY&1:P-D6EH=N],`.@*].1G&
-MV#-'%M&M?A<'#ZV-5"&09"5Z1?E(77.23+\ND>>%&2FB+SZ'5"QH1TH]K"72
-MQIV(Y8`1?DQA.7X]<2H079KT0\6!V+28XJ&RP%^)5\\D>!?T]U;<3FQ&44/?
-ML0"9%Z#.K/&-:!U/M1+%X8R9WRBEGR1A\624Q0=ER9.J(>!D=1*W1EVX`P!<
-M`0``7`$```(```!%``%87!X``$`1``#`J`$!P*@!`@'T`?0!1`<I/.KOU[^[
-MQ#==<A'*B_*P*BX@)"`````(```!/"$``2`V@#AI#;U]Y#9%^B520*+ERL_B
-MUS):<%$@BD-F8C]B&E<Z5H_:B_2>'V:[N!L\O'N@93)T#"V:*4TC"Y(/`IC3
-MP"$8I/LRYGMXX`2QRNK9T<Y([P<ZXQV".?N.2.AR2R'W[FN_!FQ:P^E5$]:^
-M%WP"IXP'9#-<U`Q]5^S@W5D@_]VPJ$[K+WZ/^M<P.3D\=E2BW!/[<MI.KV*T
-M8S-T;,P(F>4Q4;6IU%U#JV*&I.F+5'"RNOC$#!!.;YAM"W__$EP]@]/+3*(I
-M35V*Y292N$Q\10<,\+E[2BTA1;P*QE3;^',K$"D'3.:ABW\_58AFL<]^9)N$
-M0Q-KV"T.1;:1$<GGM4"QN#YG[`GW**XF+M*H,F2<!-F[<\,?T#<-;742MT9$
-MY0,`?````'P````"````10``>%P?``!`$0``P*@!`<"H`0(!]`'T`&0&23=G
-MJ`.Y<IUI>*JUDC(1J4,N("4(`````````%PJ``!`F9WJ.QCQ.*JRU^0K%,)-
-MOPK$HJ\:3-_1;%QL?%O3-14S=];13#7Q>MH3^,!U1NI_0X@?YAI1"\CI5B/#
-M=1*W1@CQ`P!L````;`````(```!%``!H7"```$`1``#`J`$!P*@!`@'T`?0`
-M5`8Y-V>H`[ERG6EXJK62,A&I0RX@)2``````````3````#!";)@[_872BH%_
-M*<6%X9BTA$[L-2R-,]RP?:HK.,J-;,4K02IW7HR"?\;17'42MT:+_P,`;```
-M`&P````"````10``:%PA``!`$0``P*@!`<"H`0(!]`'T`%0&.3=GJ`.Y<IUI
-M>*JUDC(1J4,N("4(`````0```$PJ```P?81=5&AD8;2)`"[#E1<ZQ1X@V85"
-M,+^H(Z6IGA!'O$DWRP,NN1JP^^WPV81U$K=&[@P$`&P```!L`````@```$4`
-M`&A<(@``0!$``,"H`0'`J`$"`?0!]`!4!CDW9Z@#N7*=:7BJM9(R$:E#+B`E
-M(`````$```!,````,`8L>4WCH;Z"SVETNR8@<EP#9V.GMLO4<<3H+I-^$3I4
-M$*'3%877W6?V903Z=1*W1N4%!0"8`0``F`$```(```!%``&47",``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=E5E7M]H0OAJ```````````"$@(@@````````!>"(`
-M`'@``@!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``\3K4+<C]B`F?
-M2><V$ET!C',M[K&F/+CG4+P^WRCECKMP]W*=;#0167#0X5["<XDK*.)7Y_R=
-M5="O%T]0I2?$@0JBPI;,Q<YN6T6"L2*)$).XY6>MZHHCGD*S<E3_.8('YTEF
-M>LLX#V<EU:%J937;:$X4Z;6)O/M!/A^DN$`1=2TI```D2FOKVCH+"9`:1J_C
-M\-314$4-@=T'/$TO04T.TMGO-KXI```<``!`!&"X@NS!-CA@FN)"0=G5D`Y<
-M,S<`````'```0`4`K`0,H3MR'Q<"530O7\)R:9+Q1742MT:@%`4`7````%P`
-M```"````10``6%PD``!`$0``P*@!`<"H`0(!]`'T`$0&*595[?:$+X:@````
-M```````I("(@`````````#P````@``!`!@````9P<O8%'9?O+C@%%[0##`QO
-MJ)Q1Z'42MT9O)`4`N`$``+@!```"````10`!M%PE``!`$0``P*@!`<"H`0(!
-M]`'T`:`'A595[?:$+X:@```````````I("((`````````9@A```@``!`!@``
-M``9P<O8%'9?O+C@%%[0##`QOJ)Q1Z"(``'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``\3K4+<C]B`F?2><V$ET!C',M[K&F/+CG4+P^WRCE
-MCKMP]W*=;#0167#0X5["<XDK*.)7Y_R=5="O%T]0I2?$@0JBPI;,Q<YN6T6"
-ML2*)$).XY6>MZHHCGD*S<E3_.8('YTEF>LLX#V<EU:%J937;:$X4Z;6)O/M!
-M/A^DN$`1=2TI```D2FOKVCH+"9`:1J_C\-314$4-@=T'/$TO04T.TMGO-KXI
-M```<``!`!&"X@NS!-CA@FN)"0=G5D`Y<,S<`````'```0`4`K`0,H3MR'Q<"
-M530O7\)R:9+Q1742MT;L2`4`4`$``%`!```"````10`!3%PF``!`$0``P*@!
-M`<"H`0(!]`'T`3@''595[?:$+X:@*R-1W6N4AT(A("(@`````````3`B```P
-M````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H
-M``"(``(``#'A=ALA?.?O`D/'*^>WCL^(F7;N"AX0^U%QNU\M5O`AEE0H&X$!
-MF`P@01G<\B>'E:=0$1U,0[Z79\&_H9!UN*W#Y"GITVKXZ</B+"[K-R-0:Z0$
-M=TX,_;P_?F"#"U8(F<)"#.^)ADN]ZQ9%(]_!I1F,K`V*AS")JK6RIA/6WN+E
-M*0``).'23AU<&),9DPT\,/0H'-0Y2+YO1"=>R+P)^(!%\AJ<*0``'```0`2@
-M)YBG?H,3D"XYGDC`'UX+*G[420```!P``$`%1ZZ-;0$_<!'%?$3S._:00@6&
-M-WYU$K=&O'8%``P!```,`0```@```$4``0A<)P``0!$``,"H`0'`J`$"`?0!
-M]`#T!]E65>WVA"^&H"LC4=UKE(="+B`C"`````$```#L(P``T'"+XWC;_7E)
-M7B2@/$Z7U<.Y0$54Z05D25B:-:`\)KG*T"T&'"%FU7'YYK[6*8,9O,?FP3[^
-M:KY)MVV0N!F6&WL,S+!QF"ED[)#U2:ZP0C\"5%UR;@,(_R"AV)3#`*L-('6+
-MM$\]<G(X2'=UHWMLY$N0]\WHCN-'0PKB8:U^Y<2ABK2CQS^W-^FQ;A`,(B3/
-M4J4)6\Y)QL73/-0?TV'D9H\L!^73ZAD\`K1+R+!?IJLO!Z!V]@*";2+(VQE+
-M++R&B1^MB"2[;DPXA#;.$W42MT9CCP4`O````+P````"````10``N%PH``!`
-M$0``P*@!`<"H`0(!]`'T`*0&B595[?:$+X:@*R-1W6N4AT(N(",@`````0``
-M`)PD``"`.>#3)"!<&IUVK]WKYY-LD'+Z>NXA-G<+OY$"M!2H/M:_5%$T#B5S
-MC9[<)%_C$.0\[VB_SDHPK7+/03HY$CK%&H*@4:I8W`_6--NTL]'^U<>>'YE9
-MW5M9O^]R^6[_DEYY#H3"8OO2$.BZU\=9)8YK]R;;WRB]7O?[91-(;W42MT8Z
-MK@4`'`$``!P!```"````10`!&%PI``!`$0``P*@!`<"H`0(!]`'T`00'Z595
-M[?:$+X:@*R-1W6N4AT(N("0(`````@```/PA``#@X%C&X^[WSH5<4FIK7)5W
-MLW\\T&!XG.`'T&D\Q_M<UT+F?`@@TG/L>7(L-;EJ3.#S1V0,:WV9=RHR$X/^
-MI$>;T5Y(Z(>%#>92D4PST4R]Z"6@I^QCB;WOA85.B5_UOV#.'SJ37`ODYQX;
-M0R`1B?0+,O(Z]+0K;=V%Y+;8/]H<3S%U+^/EC?8[=E1QP]S[\&NU2,E84RZ0
-M](\+(@/OX[J-=!?&^N-/_UWP,CDRBLDZ##Y>>?/OW+CIC_\"0?7`%E%A#/P4
-M41?Q)?8FF>V&!3C\IT7',S]2J+5VQI4@X742MT9[N04`_````/P````"````
-M10``^%PJ``!`$0``P*@!`<"H`0(!]`'T`.0&R595[?:$+X:@*R-1W6N4AT(N
-M("0(`````P```-PA``#`?CDIY^^)"&.,2WY(X$%=R)L>DZO%K($3./=GB4/J
-M3X;SDMBFO)3.(!L^I^9*_ST70/RS0%'/C'TT]P0G/NM]V-Q0Q[L:!&3%N\_]
-MGL+V/H8MZ6?Z>E%G,\\F(JLD,T`:VX5'6,"E(MG=NQPZQZ/_M\EE2>/>T9S+
-M6B`ZCKQ`EQELZ%$UJ[CY(7>7R37.*)FI0XOWL0EY:0^M.ZL_^+[0Y3V=)B0C
-M!G0"9,2PC;Q6[[>KO??(XGXP@D&]25IU$K=&.L0%`&P```!L`````@```$4`
-M`&A<*P``0!$``,"H`0'`J`$"`?0!]`!4!CE65>WVA"^&H"LC4=UKE(="+B`D
-M(`````(```!,*0``,!$H\?:^`YIG\+$7=(V\>,,-G0$L"+D#W5=6@Y9"H;)E
-M7+-/.-+(@^(-PES:=1*W1B/5!0!L````;`````(```!%``!H7"P``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y5E7M]H0OAJ`K(U'=:Y2'0BX@)"`````#````3"D`
-M`##CP>"DCW,,0LWET%@%!<MB(6O/AQ8"`"@]@BG.QS>\>2<X;6Q.I%$(>)/3
-MFG42MT:/^P4`/`$``#P!```"````10`!.%PM``!`$0``P*@!`<"H`0(!]`'T
-M`20'"595[?:$+X:@*R-1W6N4AT(N("0(````!````1PA``$`;^Y8%<R+_T9,
-M:;Q7_R=8=W:.LS)K_@9?B-]PRPP'T=LT'C!)5^!"GSY)%Y>(!K@.NLQE2^6,
-MADL=PNUZ^E;>@9DH(KKSVDW#*IZ4U/)I8"):NC@F.V$\+G;603I8C'5L%*3[
-M`(:P3=[<U_Z.!SK3\Y82WJVL&YBP9=:YTU=X+5(#:>!693DR=1Y[DW)Z3AG$
-M2;1??UR!-%`DN8=7<LH1C;6\.>B%%Q!*A#O7>L(U[GC`=H%*L',Z8$5M$C'^
-M0'*VPC"X1CYNKVF&7('9.MF@"4+P-M,>-HJV<=O83`9H(5812H%2AY=))@4=
-M^CIW'UOST9&W'4]G/&1-'M_B=1*W1G,+!@`<`0``'`$```(```!%``$87"X`
-M`$`1``#`J`$!P*@!`@'T`?0!!`?I5E7M]H0OAJ`K(U'=:Y2'0BX@)`@````%
-M````_"$``."E$QGM;=G-\N-R7ROYE%)6;>7:K8=1Z5SCH=I4L'&\A[`R,K&?
-M"\Y'ZO%;XFJ%<@42R9&^^NF!;H=C*(?O69)F1%>^F<[^!0O=+C17/BJ%RFB.
-MD_,_/AA;$*<1`8!'YW*K$9'Z3=J1\+,2FC:;1$CLOO:^1`>3U@-Y!14N".%A
-M/T68X*"H[6^*UR7Z()O7'P4L-Z+?@*KT0`4M_GS"=#/=!`$\"+"V[-O5P^Q(
-MAQ3KI&WE^?[SBI3\65$X:T2J$UO5TZ.UAMMC8SVF&E`P(W.^6;+N-V/\P$4]
-M`I`)=1*W1NX6!@#L````[`````(```!%``#H7"\``$`1``#`J`$!P*@!`@'T
-M`?0`U`:Y5E7M]H0OAJ`K(U'=:Y2'0BX@)"`````$````S"$``+!Y,"Z]/9HV
-M@#]"I0(!)'6@@^;?V-5*(M58@5'B"\SQ5BH"2?ZM<E%@^@R48JLT,@/@[,5O
-MPZ6&M*G7(I,]NF%&$$#!&=F4L.:9U8(0:*M/CD>C.<SZB3?J5TX-L5LA[HHZ
-M3@"RN,L9)O2':"=912D4UXTB<TZV!K2@M+$)L1[^$?PP)LE9#+O,CSJ3T'4.
-MXE?'E,X"&U,/5HV!ZR\X<XY_'E-N-&MZFQO[D%IQ=1*W1M$X!@#L````[```
-M``(```!%``#H7#```$`1``#`J`$!P*@!`@'T`?0`U`:Y5E7M]H0OAJ`K(U'=
-M:Y2'0BX@)"`````%````S"$``+"%!ET^^B:WV7A3YMFJRE"PNC=+3_\#FTP.
-MXAW4ZRK".]L(<W<?AY).($HGU<K;@AIB1V)F6[TA-R07GR#[$'HS9"!;0:TG
-M8'P-!+@_?E;0-G-R`W?V:<)*`02_>])Y%W6JKWI;-D[?_0YZII[HW@(0>@AV
-MW9)9#4+_.LU?0X.:[K`:MA.-\M95)%W6-1X^,2B@&\>._DD3UR_Z!?-%EL+&
-MRYA?S./_C%@_H$!%=1*W1JE5!@`\`0``/`$```(```!%``$X7#$``$`1``#`
-MJ`$!P*@!`@'T`?0!)`<)5E7M]H0OAJ`K(U'=:Y2'0BX@)`@````&```!'"$`
-M`0#T::$EAQ`+=-8IC]>.X+3T(>5)WDU\JK22PUY[LGFXQ`M1`3!=?]:=':-B
-ML^5<_@+LY:Q%-@VGYINC#!D#'*-N"E*`87^43,,ZY!?BV:J!1C7*OZ5`7F0<
-MRK!0C1DT4+!J`M9VH-:?#AS/W4DD:+6+WT/_._*>=7=CI;]+1.WXFV=FJ'N3
-M'+%PFM*JP+MG!D']TM*G)+@2&Q_7F-43B<04'ZCMF'?;.=SI>,(,&%G%[M"M
-M5L6GMON)P8=#$!/$U6:6\7GU3(><C\9J;A1H^I]D^GOH6MRB&Q](WN`2]W]V
-MY=UMEOTT5D];N[X9B!BL+/E!2.C6%<3V0V&>HO9U$K=&8F(&`!P!```<`0``
-M`@```$4``1A<,@``0!$``,"H`0'`J`$"`?0!]`$$!^E65>WVA"^&H"LC4=UK
-ME(="+B`D"`````<```#\(0``X"Y9N@!HV__<\5\SP3I)HA@A,#6K&@]SJDN#
-M1()_U5PIR_;T,D#X.>Y,VUP*S"5T1R\YE.)`W34*VGDAN"^$?>TPEIP]*QAV
-M)UNVJ=*,J@VCO(3C_YPL6!5!GK,6E[D6*!<BA^E$0,//.25&U&``6YWFNXC$
-M%-#.K^U9?Y5<>M$`4^1_7[^?M-A'8V&M=U41JZZH7R>DA8XVDJ!L,N>&]SF`
-MW-KI@8[S=4H=Z",HPWK^LN^<^390,F!HA]EF$!(O0SV4?ANPX9,M@BXF+ERI
-MD0IV"(\WRL"P!?U!@IAU$K=&EW$&`.P```#L`````@```$4``.A<,P``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KE65>WVA"^&H"LC4=UKE(="+B`D(`````8```#,
-M(0``L!R37A_B,_A76YC&,50C26'BY^R20`GA:^H^L#P'+%"Q'_?'YB\>XI&D
-MT_]H\`2P2SVKBB$A^`3;;\#)1@T_I7@LWWQ]H5TK`'"_+^W'2$4VJWYH#?,Y
-M3N);^:1R#[H_%#RCLM^O^OO=0/W#R&-A2*WHY6#&[?BVD7*$,XRFQFB<7]=D
-M>4M#,(8,+\72K\X4I6DQX!O$TM=9MIU09\!\489R0SC)$H:3>S3,)[9U$K=&
-M490&`.P```#L`````@```$4``.A<-```0!$``,"H`0'`J`$"`?0!]`#4!KE6
-M5>WVA"^&H"LC4=UKE(="+B`D(`````<```#,(0``L&3X!V#O*"BT]'SY3W8]
-MWT*-D'KU-8+W_N$4_-ENWD%Q"K"O5>)"71RU8UDMAO0Y_X7$<!U4*,.CCK-L
-M!BS*?FF.[SS/;,Z%N7;;9'J-25;67O671FJ:#-[JB]!'F/*Y;_;B]?,#1C@W
-M+:P82WZM1SB2RH(%#\)-H4(=_")T:*5GN(`"J$H(#F-NDG,VF8[SL&(PK&E,
-M8G;UB4?=G%-V?<"H-*DO(M'!6]F0F2=U$K=&*KL&`(P!``",`0```@```$4`
-M`8A<-0``0!$``,"H`0'`J`$"`?0!]`%T!UE65>WVA"^&H"LC4=UKE(="+B`D
-M"`````@```%L(0`!4)F,=?9@$G</<3!.>0P8R0%/1DD^]>LBW.S3Q?BH'KDY
-M;R?U8#<]97I-D/[QGRVS.-;2H@3RH^(TR'@<DOB9"SO(.=;Y+:]F4GDUB.,-
-M<<M1[AGQ[X%)X#J+VI.?C6`O7#O6,?_,X(9Q$3R;.DO#(,L`K%2?*!$A6B6U
-MJ$EW@Y5W1UH\.HB-O<)I?*E)'#E#-8QVH(=Y[^E'N9I8]I55$+Z@(DE&+"I:
-M"0ERV7-)GYK2D(SQL@I+Z=9V40$*%>$LV<VA'B16-KTHSA+2@!#0_@7>.HJ$
-MD;B#`#I&M#SH:_A&J[?H#^=GP/I&QQ>$3P%=O_L&^=^=7]^'^ME[HP2[.@UH
-M&E-3'B+Q=R5<7Q)152EHJY)<'S<DJLC<Q0TA>\V/$!!_44M_<J:LI_LKC^SI
-MP1F?TEW";ZVK_@!'>ARG1HV(?]U)8+W?_FH&IG*O=1*W1@;Q!@!<`0``7`$`
-M``(```!%``%87#8``$`1``#`J`$!P*@!`@'T`?0!1`<I5E7M]H0OAJ`K(U'=
-M:Y2'0BX@)"`````(```!/"$``2#JD83P5#?R4[E8,OJ&F;UDZ(5]_G?WQY`'
-MK3SIQ/?6*;W0$S*]8Z$W'.F">(\4F_V-D(4K(7I)QVTVI3?`C:TC,0:).[:R
-M@FZ4^;O#0PEGUMI2(MWA<N=45?U*3LGKP:UKL]&+-[[.M5@*.O$]17R9R6T>
-MFI3J(H(Y0!Q6]&1800T)&919\]`D+(";8R].@)VTEOAIF*CE=#VTKV!==W$D
-M4+/A^48I4V=+VRF6[_3%-J!Q$LD9(9K-TMJ8IEI81/@L[XM$O;ZIB#%=>W<X
-MT40+RI:\S%O1.6JL-G)(3SGQU5B8T'W$G2)MFC6A:,KVZVSR\HV//8>B:FRK
-M*<5/JL[L&XBK*"ZFDO):FV%?5",8!>KY,VJJ(_5-M)TUTW42MT8&&`<`?```
-M`'P````"````10``>%PW``!`$0``P*@!`<"H`0(!]`'T`&0&26LSUH@PW+T!
-MA/BD?"_$:NXN("4(`````````%PJ``!`\CNQ`))2(QH*IT)'>5@!+LVO>M9"
-M"T`^#1*NR:YPBBPE'ZUDS)0XOGV6&DD2)0O6K8Z$25`,A^[!3BV\=1*W1K@D
-M!P!L````;`````(```!%``!H7#@``$`1``#`J`$!P*@!`@'T`?0`5`8Y:S/6
-MB##<O0&$^*1\+\1J[BX@)2``````````3````#"H;C3*YLQ=,5?,,%'62I.^
-MN0E`>1*B<`=LU78C%%P7D^;V2HE,:E]9K8Y\9'42MT8_,P<`;````&P````"
-M````10``:%PY``!`$0``P*@!`<"H`0(!]`'T`%0&.6LSUH@PW+T!A/BD?"_$
-M:NXN("4(`````0```$PJ```P&EA>$$"F,+C2J^44TK)07;V`0%DJS2K$7L(9
-MWZ?_UU%73@MKK&OJJQ/Q@WQU$K=&_T`'`&P```!L`````@```$4``&A<.@``
-M0!$``,"H`0'`J`$"`?0!]`!4!CEK,]:(,-R]`83XI'POQ&KN+B`E(`````$`
-M``!,````,-X!U<"9:ZO^B+R/&3*G\8GQIB`^:0T<LS-6\*'"4I$37;629NB'
-M@8YQB-.\=1*W1CL]"`"8`0``F`$```(```!%``&47#L``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E^`,56OZA?+,``````````"$@(@@````````!>"(``'@``P!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``\_+?PSXK/;/(+;;1]+`^
-M)%T)LMS[V?(,'?`9RF@"(=+@&@Z^R6$'R;!U55<LO&(RH1AZX[V2892Q717U
-M28@.'Y5:L`_RY`:##P.ZJZ[O5\\0@AO&LL:F3RW#-V<1+#';<@2T3JKKJ'VU
-MJO3=WJX&.EW]XF/542CN@?R-G:$J5CLI```D:(UE:BGX$GDN>K-&C\'V?Z#8
-M<5:VL"9=Q[R9`8.*J_$I```<``!`!,!9M=`1"P$'17V[/0@!D$.!N9$5````
-M'```0`4HY*K#;N3HJ!WCJ5:XPMPB"8VQ^742MT9G3`@`7````%P````"````
-M10``6%P\``!`$0``P*@!`<"H`0(!]`'T`$0&*?@#%5K^H7RS```````````I
-M("(@`````````#P````@``!`!@````:PE5EC@B$AJ+WPN";]WB;?^+*7;'42
-MMT8H7`@`N`$``+@!```"````10`!M%P]``!`$0``P*@!`<"H`0(!]`'T`:`'
-MA?@#%5K^H7RS```````````I("((`````````9@A```@``!`!@````:PE5EC
-M@B$AJ+WPN";]WB;?^+*7;"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``\_+?PSXK/;/(+;;1]+`^)%T)LMS[V?(,'?`9RF@"(=+@&@Z^
-MR6$'R;!U55<LO&(RH1AZX[V2892Q717U28@.'Y5:L`_RY`:##P.ZJZ[O5\\0
-M@AO&LL:F3RW#-V<1+#';<@2T3JKKJ'VUJO3=WJX&.EW]XF/542CN@?R-G:$J
-M5CLI```D:(UE:BGX$GDN>K-&C\'V?Z#8<5:VL"9=Q[R9`8.*J_$I```<``!`
-M!,!9M=`1"P$'17V[/0@!D$.!N9$5````'```0`4HY*K#;N3HJ!WCJ5:XPMPB
-M"8VQ^742MT;X@`@`4`$``%`!```"````10`!3%P^``!`$0``P*@!`<"H`0(!
-M]`'T`3@''?@#%5K^H7RS^?P>9ON(-#LA("(@`````````3`B```P````+`$!
-M``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(`
-M`,72W=.'XC8^,)(XQ*MFDLE?&[E-1`7C>1R!4<^Q@9G"`VL4F:'<(VG@%QW.
-MP'O\%A>;.%/78KBHW#^3-&A@B676_`QOVF@=MXPSD[#BD>@0XC"Q_9RLM8*8
-MRL3>PITE+R\"QLLBX_%M][,D)O,:?%P<,'AY_=VL5S2DZ)Y/[T""*0``)-=^
-M]D2TA45B5)P<LO*"@5.(7J^27Q%.3>3H[;P)4:].*0``'```0`31.BRD>.VD
-M#<VBC!0Y*._KV8<)IP```!P``$`%HG9!(:)9:DT:L/*,TLP.@Y<ZJ)IU$K=&
-MZJT(``P!```,`0```@```$4``0A</P``0!$``,"H`0'`J`$"`?0!]`#T!]GX
-M`Q5:_J%\L_G\'F;[B#0[+B`C"`````$```#L(P``T`M*BIZV`MZZ<N*D<\^7
-MCO(0/*,.T5;Q@R(2Y:(=)2KZ"*UJBIQL__$CS^+0%,S4B7)(\VC1_$_P)L??
-MN>V$HO?#<\V&"A"UKA=W2N3H](;N*2_H??'>-WU%"X215H-+J)TWJV4/];O7
-MO--`0XEAMDSFVH(]OPQSIW-[RSD\E"U<,;`<;;'^7V[(DXF=RY:NEH]6'EU3
-MT6_8N:+05_*;S!93B[&Z;]R`"I:04RD\L*ZP#R=.E45^(G3:V'0?`T:0"1:$
-M!-;$B+Z;]3403742MT;;Q@@`O````+P````"````10``N%Q```!`$0``P*@!
-M`<"H`0(!]`'T`*0&B?@#%5K^H7RS^?P>9ON(-#LN(",@`````0```)PD``"`
-M?5BXP<2Z<(TY/_HW$:5=M0FN+Z^#P+[1@@:;%KHF-2S#W</1JYW'#*?1/R`6
-MJP#H5C6)(K*#WC&\I9<)+5]`:/7UV&(!D_DZ2:"7E[O61T<>0[=&_UN0$)%N
-M<52*Q"W$+\':;SAPM!V0N-H9NU]B-C16O_DKZ#56JC#7EW42MT9,Y@@`'`$`
-M`!P!```"````10`!&%Q!``!`$0``P*@!`<"H`0(!]`'T`00'Z?@#%5K^H7RS
-M^?P>9ON(-#LN("0(`````@```/PA``#@9KS%8GSDJ&QBN<OV?.Q!:LX,+IZ/
-M6O>YO(YATU_JDY82,'M52,O+)"`12GYDKL[-RK7,@&`R!=KS53R&UV6;31>>
-M46*QZ&VHJ2\V*^;,'PYRG@<<`OQ%`N82N$\(:1`")1K6)-9UB^&S1(7+Q<TM
-MFJEVVH`[AFL!/3[8P`>,5SUC:---,C/E7F/E`=/6NZ[;5"2<-]TE#38^0,(,
-M565%]5A`P#G@.`;%JV!K*B-I5$!&92H7S%@?SL20V\RN-0N)ONK(DQ5<*^B%
-M+<>GT4N#X3).*1B^IA-%T<F^3742MT8F\0@`_````/P````"````10``^%Q"
-M``!`$0``P*@!`<"H`0(!]`'T`.0&R?@#%5K^H7RS^?P>9ON(-#LN("0(````
-M`P```-PA``#`<"<H@XNR(\.;\LO'<Q7K.R<E^7?43S^=O(,L"+]GN]_#^[KR
-M1\;$,F1KI)Q3RNL.T.)0Q=LY5K*2AAY^K[4@(<^3=S7</-?2+.5FQQ9BMX[D
-M8IZY$#``_B\/(4#"SO1&&_=`BS2(&//^E2B>A4ZFC456FN)8]8OYGC;U<7<8
-M,"B"%XEGIJ^@'[>\8L'2I+CSI&EX$^Q!GBTZS*X"J?9G_>]VC/U[6+ENB0D8
-M3/3M_<2]L,-EC)T?HB!_/MYU$K=&)/P(`&P```!L`````@```$4``&A<0P``
-M0!$``,"H`0'`J`$"`?0!]`!4!CGX`Q5:_J%\L_G\'F;[B#0[+B`D(`````(`
-M``!,*0``,!-E40'[R$Z29\.L2&'80!M6>44A$LL.@S$V\M9-5R+XC7;ZQ?O!
-MA1LQ+QV-=1*W1F,7"0!L````;`````(```!%``!H7$0``$`1``#`J`$!P*@!
-M`@'T`?0`5`8Y^`,56OZA?+/Y_!YF^X@T.RX@)"`````#````3"D``##2`'[<
-M:^!=67<;AX^=#I'U7_A9&N5+B(8//VF2@&.LL-+F=_W@K/VH:$^-*W42MT81
-M,@D`/`$``#P!```"````10`!.%Q%``!`$0``P*@!`<"H`0(!]`'T`20'"?@#
-M%5K^H7RS^?P>9ON(-#LN("0(````!````1PA``$`)KUYI3G1<G4*[HOIN_`M
-MUNN2,A2[O;RI7!+=2\UI<><LPJO[@R7.MK<O:FS/R*S0+(P+J<G/\KN9@G,*
-MIH'G@1:>L*XP?E9>V^7\\W(`V#=+8*&D3J9FRE].%2$$OG8`C#!PI)*7D/K?
-M(H:HP"$PZY0_*]0"90#S-<>2#\>`2K&1K$;0&N\W]ZE[350@=ZLOYAX$C16#
-M^"KMDW1P1!J;<.+/';H`]\\->8;$J);%YO0W2R-]I=?-F3N!>1`%E6FJP?VA
-M.EE[;!E\X#2:@HHVRD8'].5,?X</A&H&3=I(@&EPC#5V?=_CHQ!4VF0&HHJ9
-MC@$R:PY)FGG&G$B]=1*W1LX]"0`<`0``'`$```(```!%``$87$8``$`1``#`
-MJ`$!P*@!`@'T`?0!!`?I^`,56OZA?+/Y_!YF^X@T.RX@)`@````%````_"$`
-M`."P#+PX:X5E'L,\E&C?ZBFO0GO>7D,H-!(@WQO#UINNCSE%/BG7>'SNDZ)-
-MH_^@N,`F+IUY\I"30=63K]&+&)1/&_(L/:ZUJ0[V#D7G^[V'6U5210P#[\E=
-M0PFQ2<J]'#!63]SV*\--6'-XI>ESC[/$ZP13UP1:QT3%8MMO:K:#J?7>-<^Y
-MI1>>R8/R"/UG%(W7'R@"4C;9]]]H)W<'JU-;`965T!7&0^A8`:`*@/&[L[TT
-MN!?*_Z]_>Q,P_W8[M4.;U^+DPOL6$S=9BDOK&;Z'B38U4YK7_.3M:&Y7=1*W
-M1EI."0#L````[`````(```!%``#H7$<``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-M^`,56OZA?+/Y_!YF^X@T.RX@)"`````$````S"$``+`E'0KG%5B3P"]0YLHP
-ME[1.Z4.`CF)3/N-^E,83YG0O4.8IO<?6('B"#)Q=FJ^9#2VWH.2H7E!V)`#+
-M^DDZ>MWJ+-%M4^^5`9AK4(-N48(9_/>KT]E:[IUE]"+.G,AZ/7@8V/J,Y8WT
-MY*U,<663R*"\_]\J]BG<S<'!Z%H;64QV`"S8888'!R,0[0$!SS69HG28N*9J
-MFKJI^!TW$9P.%]BW;9?586$S92?;J$0K=1*W1@]Q"0#L````[`````(```!%
-M``#H7$@``$`1``#`J`$!P*@!`@'T`?0`U`:Y^`,56OZA?+/Y_!YF^X@T.RX@
-M)"`````%````S"$``+`^P>L-.`J,/M19I_+?FK])"M(:2AOQ3V+ZQ(Z>#`CS
-M+<(6>)`<4A.''M?I$4CD3#^(B(,^2;Y%/I1BWXRX7>_XZ6#,)!OK)-]*=^YV
-M%Q63V?_*:LF:F>G&DD&=,*A.K"AKP0@TR.7E9;]5<7P)=AT+2_F/9'.#DGN,
-MGQQT%W(]^ZCYWO?"1&S5<S*T!AE$G-KVST%)-H=6X[6^F]W7)`-8B8@Z/.'5
-M-;-:"$ID=1*W1G.."0`\`0``/`$```(```!%``$X7$D``$`1``#`J`$!P*@!
-M`@'T`?0!)`<)^`,56OZA?+/Y_!YF^X@T.RX@)`@````&```!'"$``0!,O?SP
-MUDVZPE\EVO0YBOV8,Q*U>HPIP1"ZW<#$H5F68FU?C^5O%W1(J%*1@W5FR;:3
-M:62Z^R3T+\NH!'7X6>YH3O:2SQ9%2^W.RZ4FS/!I=MXTM^0_N92LV,MV/WC1
-M/11DH\[JF9E$680'Q43K&/73?P$?97^?'E\ONQ\#%C^0LA;O]H`\F3QL*X?Y
-M53_BD3:]#5Q\-_2%@G<XJD/\:K0Z:#>T41PS[X%.AKU!?'RIUH3A3^)+A):,
-M&[U2HF)+^(F)N#`^-\SEZD"L2QKV_E*8(7+5VS@H^>L.>8Q0$(J@\`8):'H6
-MG.BEEWXP%M3MD"O=[=>F%9U&.."A.;QU$K=&6YH)`!P!```<`0```@```$4`
-M`1A<2@``0!$``,"H`0'`J`$"`?0!]`$$!^GX`Q5:_J%\L_G\'F;[B#0[+B`D
-M"`````<```#\(0``X/@(UM2`RU=+$Z(!WU^$9U1)-5@G3=F+7_1,GI,@S/-F
-M[N1#DFVF#.@9HWMBE'V+/W,G8>)I+5AHHT0B!A9]O45W#V@A>FG?3C!X*(K`
-M?L_W/E(G\Z2X]SY1)/[]%SV1;6L%P%AYBIWW[]W1%EHY.]Q2F154+;\0AUZ'
-M=N"?V)@<8+ZFNE,&G\F#P0&*X,@@U4,TXA0:&R[LF)V:DR:"K\\CKB%JU#5<
-MWER$.:Y@4O!-="Z1'HE,"YL'H$W9NWH,4KM"B,*_\ITB:U2(AJ.4?=P=>K;O
-M#@41&<,:@B=U$K=&+ZH)`.P```#L`````@```$4``.A<2P``0!$``,"H`0'`
-MJ`$"`?0!]`#4!KGX`Q5:_J%\L_G\'F;[B#0[+B`D(`````8```#,(0``L*\A
-MHOL_Z7N+RY(/LU"\WI.30,R63=;\*Z.B7UH@6-<&PYHXWTV!Y'>O%X8T.(SJ
-MX70Y_UFLGH(#[@KT=931BR%T)P\$`4ZOF=/[H0U;$^AO%'*VJNO8.[,(7-N2
-M9_<<]]&I2KJF\#GU37[(2XYQ^M(W*7DPM-1D:A9'].OMQ"HY2;X$L,Q[&J2K
-M;B[IMO%C\VH_<)#K>'LWAE?+$U[BI8_5+*)Q0<U.O@]-%ZEU$K=&>LP)`.P`
-M``#L`````@```$4``.A<3```0!$``,"H`0'`J`$"`?0!]`#4!KGX`Q5:_J%\
-ML_G\'F;[B#0[+B`D(`````<```#,(0``L'EKF17GF"!ZE3%)V^_'SDI:WC*N
-M](G,@9)ZNHW3'IA;A6(I4$O+ZN)7$%?!R;6B-SRR\%60%3L?E)YG<YW#^YDF
-M_VNO@1S<7QB4!X[%AJ'*ML+5Z_&0%&!K%JA6KC.T`=#*=!2<E1\SV1=?A&0Y
-MIU0DN>Z9RB,Y(3%,*YR\A_>T"B'$2M^6*80$6/XRV-9N<X#'KL).ROO&!CM3
-M6%^X)[#Q@6RQ/P@<T;$/6[5U$K=&9/,)`(P!``",`0```@```$4``8A<3@``
-M0!$``,"H`0'`J`$"`?0!]`%T!UGX`Q5:_J%\L_G\'F;[B#0[+B`D"`````@`
-M``%L(0`!4*)CS\>X=&Z^+EYXD[B%?9&[L:NH^X\K^7P`W-;4KMK(Z/9NDR[]
-M.UV'LV-7PJYFA[M8N&R=9);QX9['*&)G?:&^.^IJ,8)7A^O0Q/AG]LAGR=P$
-MKVLVSN0X/->9;?53QJ%?TS/_:ZM"$>&]]6T@0`W[Z;G=_J\6=I@L=3]-H`%K
-MV;R54?)*!"L3RY!XC'0_8ZX5\X_!L)<#;-!#(IJ\R=3U%SGW!TIMSC:FVN>(
-M:>ZF]QN]((%I5'UW&<JR4SW5Q].=<CVXO_7_+.V;R^XQ$M\U>?X\<<S"NC$^
-M+-(G]N;5N8BUORO`T_0%,*9>HM.=AU2KNN\:-3C-V@3ZKG_N1T'*O?:G3%D?
-MJS8D"UL0ETQA3@NL8[;E2E#>S06Z*K[%(4LX2>9*F;/U^_LR'JFIS&NGL]QF
-M#]=PFR(`Y9:T0"'GH`-RK'[=96_IXK,7=1*W1HTH"@!<`0``7`$```(```!%
-M``%87$\``$`1``#`J`$!P*@!`@'T`?0!1`<I^`,56OZA?+/Y_!YF^X@T.RX@
-M)"`````(```!/"$``2"+P:/X\G3HY!NA;"3;4E--9-C70^EPFRJ<>$TE<H#D
-M`XYXFP>"H\\=3T5R/L'-LH>#=<<D^#U.?->+Z`74$Q3W1',D+`$UT&F*O_00
-M8Z#)$ZXQ`;H]HO\,XS7WI?.AG3,)$=U)PIT<0<Z:LS#M=FX[LL]T95ZL..Q:
-M/T&0(DZ:4/O=%>K,S_JU2D4[.$4^0P!=JR*'HE4<Z20+WJ0VC7L3NQS%MZ3H
-MY;4ED(^I&3SG;3)*EF<BJ7O>DSQPU*\D+'1<K"FC/"BS,[W\&;$*/$18F%PH
-M39R#TMJTL-8G&YNNLYWQ$873Q^CA3VBLWX`]S7XTG8(O(TEM#'Q;8"0U9`E"
-M_?^P.Z\,`X`$<#S3A'(B*$4BNE4$\:^Z+A)H6742MT9=4`H`?````'P````"
-M````10``>%Q0``!`$0``P*@!`<"H`0(!]`'T`&0&298T]90"`@)E8<HTZVK\
-M0[\N("4(`````````%PJ``!`S[ZMQT;)YP>D:.!2>C,G>#'.+5<0+67+B;-@
-MHY@HU\#;1BD156*@5_9X>YI>/>JR'T`?JQV[4;!$V[AH=1*W1O];"@!L````
-M;`````(```!%``!H7%$``$`1``#`J`$!P*@!`@'T`?0`5`8YEC3UE`("`F5A
-MRC3K:OQ#ORX@)2``````````3````##UU/\2)K5JKLS4H93>&B]!T_P+YSV:
-MZ9-&;NTQTL#+8-)!S/T1>`&$+1;D]'42MT;/:@H`;````&P````"````10``
-M:%Q2``!`$0``P*@!`<"H`0(!]`'T`%0&.98T]90"`@)E8<HTZVK\0[\N("4(
-M`````0```$PJ```PYE@SMC'0V[$@>=+L&\B<=K91N`,L`S@\JI+K/)9UI98(
-M&P)X_&](OSQ>UY)U$K=&3G@*`&P```!L`````@```$4``&A<4P``0!$``,"H
-M`0'`J`$"`?0!]`!4!CF6-/64`@("96'*-.MJ_$._+B`E(`````$```!,````
-M,%V0$,FD=X:K,9<B00$A4CAK!)4^RU!W@-SN&5-^!D#-^)8KKP4UQ+C(Y?_2
-M=1*W1F!T"P"8`0``F`$```(```!%``&47%0``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E7MQ>F+*Z=H0``````````"$@(@@````````!>"(``'@`!`!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``\>W%FHU%*&'TYWTK0=3LF.89--$H
-M_J=%722MG;<-[4^$J,@6,;(,&80M-O_:TD4T(H45K@&_0WOSH,I*]]_B"?H(
-M,]CTZ]AO$+'08!JY-S(WBI,B!Y`D!%P;/QX8/AU8D@MAC1:SC+9R/PM^\1L,
-MDD-"GN?]CLQ^H/(TS/^_30`I```D"G8E_O%-G-F6T2Z\?F>)2F&J%$:_L^YD
-M44T$"%5.\H<I```<``!`!*ETV!.FM5*).W^!^F8`>0\=+11-````'```0`5J
-M*>.W7!RUP=W)YQZP98^3`2,^[742MT9$@PL`7````%P````"````10``6%Q5
-M``!`$0``P*@!`<"H`0(!]`'T`$0&*5[<7IBRNG:$```````````I("(@````
-M`````#P````@``!`!@````:RV_ZO,/"@06'X(IC_*9I!K=U3-W42MT8?DPL`
-MN`$``+@!```"````10`!M%Q6``!`$0``P*@!`<"H`0(!]`'T`:`'A5[<7IBR
-MNG:$```````````I("((`````````9@A```@``!`!@````:RV_ZO,/"@06'X
-M(IC_*9I!K=U3-R(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``\>W%FHU%*&'TYWTK0=3LF.89--$H_J=%722MG;<-[4^$J,@6,;(,&80M
-M-O_:TD4T(H45K@&_0WOSH,I*]]_B"?H(,]CTZ]AO$+'08!JY-S(WBI,B!Y`D
-M!%P;/QX8/AU8D@MAC1:SC+9R/PM^\1L,DD-"GN?]CLQ^H/(TS/^_30`I```D
-M"G8E_O%-G-F6T2Z\?F>)2F&J%$:_L^YD44T$"%5.\H<I```<``!`!*ETV!.F
-MM5*).W^!^F8`>0\=+11-````'```0`5J*>.W7!RUP=W)YQZP98^3`2,^[742
-MMT9"MPL`4`$``%`!```"````10`!3%Q7``!`$0``P*@!`<"H`0(!]`'T`3@'
-M'5[<7IBRNG:$#+()7TY,8VTA("(@`````````3`B```P````+`$!``0#```,
-M`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``&A&YBN!
-M2<1T`VN^`A=<$)H,*LXF<14W6:7\X0SSC(0?H";Z9\:RJ[YQ$/\+!8N9_U'Y
-M"GAY%'CS>6OUE=?[889YO%&*S1^/8S#@U7+1R:H:X5D.5N46-Z0DVK4PN2<F
-M>`+@INS,\Z1*JEZ;,T8`FC+!#RV5X1.,^296#W1(@9HT*0``)%,!(^=EFLA*
-MO+HKFGUV7\P_:Y`.7\>8F8J\%7]KIN`U*0``'```0`3Y?Q\?#=XW>DVT#WX1
-MR+H:$R*<]0```!P``$`%D\=&3%:50=?&JY-(R\%^&`VS<TAU$K=&[N0+``P!
-M```,`0```@```$4``0A<6```0!$``,"H`0'`J`$"`?0!]`#T!]E>W%Z8LKIV
-MA`RR"5].3&-M+B`C"`````$```#L(P``T+A1,.\K'3PLZ.4H2_L4[H<^VH@I
-M^9W?@IEM!F(K_"I3;H4D<:7Z0RNA6_[U(V].EL@&9X5R4M)TU7/K1N>0);4(
-M8OAV)LV;%.?;?^)5-=ALF(>F!@!E1F?14IP4\VD+"<.'XJ,ALB-=(:-_I6L5
-ML%(^'FB-M(4W)4VEQZ#[[744$&S_A5D>XQ2LEHA5ZC-2Q:>=]6>N7Z04.`R]
-MA%E-.]P=5=X/L8@0W^#V,F9*%&/AAQ=V6;$:DV2'R9;@QG`+U=WY$@PC&+SQ
-M9?J3SG42MT9^_@L`O````+P````"````10``N%Q9``!`$0``P*@!`<"H`0(!
-M]`'T`*0&B5[<7IBRNG:$#+()7TY,8VTN(",@`````0```)PD``"`/#:#F:R"
-M4=4'5\RY:XM[-P*7*B*K4K&_SGXR5L;TI$ABX$HBY@),P$D)`(]^LH&X^Z:E
-M'B%KK*=I#O'D;+;.CE?))#E+'W!@,H5,Y0$>ME%R1+?9U#W._WF4(%IAC77[
-M^#.WNK:1TCE]12WC&>KD`LV'DP)[YIK^5\.W6'42MT9#'0P`'`$``!P!```"
-M````10`!&%Q:``!`$0``P*@!`<"H`0(!]`'T`00'Z5[<7IBRNG:$#+()7TY,
-M8VTN("0(`````@```/PA``#@'Q,:>')^;J?W.IH8IT9>$Q`LN.3O0)5R[/J0
-MU^/4I]??Y.9#8%&]KW85IQ2#&(GQ+,Y>L9W&1E378#C"6*NT@P$K6`ZN-@`S
-MXN(="4<E09'W&;J\5>)3N/$-)V->+\$*#4'$KOS_Q:)U9)=DOSJ,63$U$9Z5
-ME66>Q-V'$A$_@1-#\0NH"1L\M-ZE`]Q05ODTG]-B]$HQHIYU>KCL,#?*%H47
-MV@;F=#SV(DV0ZQB=B7S/ML^)W_[W%K9,)[A5];/3]'/4_NS4([Q;6JU+OL+)
-M@-[U7,K":P@3G\:L@'42MT;,*`P`_````/P````"````10``^%Q;``!`$0``
-MP*@!`<"H`0(!]`'T`.0&R5[<7IBRNG:$#+()7TY,8VTN("0(`````P```-PA
-M``#`)ZK]-EW"V7>4LU?_A+SCF?U;D^(\'A25YB=\KNX`36.R[A?M@:,_^)P,
-M\5F[V"A@YO=*PKM)G[W;<7EVC"J[[*.4!R!PE_:1V$UYY4JE9$DP6Y?96*.J
-MT3\HG&P'<C!*E<;A%2Z18&I\BF,@P[[OFZ$D`8&08UAW+9^X9)Z)PUZBIT[Q
-MA3-0:Q+$3S?T*KG^4TDD7#5I^:Y^,3M",;@[D]M4MA;I;CGTC8?E;1CBGCD5
-M*"Y-T*D90A7LG2!U$K=&83,,`&P```!L`````@```$4``&A<7```0!$``,"H
-M`0'`J`$"`?0!]`!4!CE>W%Z8LKIVA`RR"5].3&-M+B`D(`````(```!,*0``
-M,,0GFN#4"!V/C%?@8$/TO<D)>\PI,AFQ6_5?P4'6H6;3X5,+M-^HL;N8+"-8
-M=1*W1O!.#`!L````;`````(```!%``!H7%T``$`1``#`J`$!P*@!`@'T`?0`
-M5`8Y7MQ>F+*Z=H0,L@E?3DQC;2X@)"`````#````3"D``#!RR%)_&YTH8H+I
-M<9]<*SWH$E+.W5YZ8,V'\\UY@@=/):3)`]:H^#)SO[HEN742MT9@:@P`/`$`
-M`#P!```"````10`!.%Q>``!`$0``P*@!`<"H`0(!]`'T`20'"5[<7IBRNG:$
-M#+()7TY,8VTN("0(````!````1PA``$`/^%VJUBRYS-)A8G/S9*#Q,9QIB5H
-MPAX/+@$*/$4.-$D$IPU0/ZQ1F,D[#0^D<[+\UK<'EF\\Q@*LOI]=7@N23[H@
-MFS^I/M<ZJ,6/NLQM*H&SEA98TK0QSBGJ/J`B7'ZI,/;R%67V)X5K;EC8X;%+
-M!#O6OGN$K9/MO]'0@\B@1[PUN^^*N@>"L(L!7+75W\LDHSIMPD2JV0*GZ1(*
-M9_-7$5<O_[9843%EWQ#3%`/E/P>_I8SYXX]V&?P"I+M%\_7Y3^JU;XR<^2,.
-ML27^UZ0DCO8X=_1A''0607RCN75T\,IS@GV;PJ#1@[=1ST%*+H2EV"Q.0@96
-MWKW5GU3(=1*W1C5V#``<`0``'`$```(```!%``$87%\``$`1``#`J`$!P*@!
-M`@'T`?0!!`?I7MQ>F+*Z=H0,L@E?3DQC;2X@)`@````%````_"$``.#/R'LH
-MF>JO)U,E;C6^,3$V#+"SG,V&L/<38GPMOO&IO['`-U"Y[)-]C@><DNT\B]`+
-MJB4X7C28B*/@0,BS&V\\1`PF[PO!<5G<-80JLZTG(!M$0!`GR.GMGN"M@1/P
-MLV/)G:%RQGR.+M#!K.CB#"N#3K61[9TC`O'^DL!;&LL,1G]E3]AM6C5?L(0.
-M2-669"[UCGT+@U/5I`AQ=[,-3E/B1L9(_%S%&)IPP+3WR_5CB3JI!C"H]_I2
-ME=SB-<3@<A5^UOU1Q:^FX/@C[UJ-FBM#?UDR?'WODY8KW-"W=1*W1LV%#`#L
-M````[`````(```!%``#H7&```$`1``#`J`$!P*@!`@'T`?0`U`:Y7MQ>F+*Z
-M=H0,L@E?3DQC;2X@)"`````$````S"$``+!1.?@6T1BX6[IBDE#W5_A"07)I
-MQ2HRXO:%V`_!+#9]*X`K-I$)2[.>LM31SQ`,#(7RAA.3PAS6XL20B/T4*LXI
-MD'^TQVP`=R6AXA*%&221V1N"TY\V?!U-AX_VB8A`YO9KD]'^Z#>EI)H$#EDD
-M*0!`59/LI@(E*5?;$MV62!9YG=^;/4*F=_WO$NI)YV"LGCP[!Y+I^CN^_D3`
-M*OMQK-C!*\REP?]DHT,,QS9F=1*W1L&H#`#L````[`````(```!%``#H7&$`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:Y7MQ>F+*Z=H0,L@E?3DQC;2X@)"`````%
-M````S"$``+#U!HGU<>EB^O5*E7*A2>HMTOU!9]%#I"*VD"-^&I#:`HVKCY^:
-MIIX5]*$RHQZ\[$<PNEX\S(X8TA\1P98&I@3E1\RG!NC%P-B=OXYX=Z[6T=3]
-M)XM[DUGRXRD.;P(VPCH\*;$;F.@NP:#$Q_STFA)T^CPCVR:D91!49UXW6$9,
-M12RE^:'JK,$>I0.B?NXE,SSS_'_YNB[V@KVF<&;T#A8,3W>\88I'@W&W[CE&
-M=1*W1L_%#``\`0``/`$```(```!%``$X7&(``$`1``#`J`$!P*@!`@'T`?0!
-M)`<)7MQ>F+*Z=H0,L@E?3DQC;2X@)`@````&```!'"$``0`06?JW/[*IPW#]
-MHPYKSQ$O;\J!8>?Y*'@JSRN/5$C(]ZI\HM\NI<3]]V)W5>'PV@99-01<%;`,
-M@.E2?QWH+VQ0FEWUM0FK14;<?>W9'V)*_U@H+82R-;I7?S`0W9[BC3<[<\#>
-MR'([<(JP)^W!YH>*W9;2,J0P:E^"L?$#PJ.;6VL;7GM&BQT]$#Q+1S&P#K(X
-M:]1?=&?UNZW*M:1+V&-\/#5'_D4QK%J`V'T0HH1?;^10^,8M5I#"W"X'FYI@
-MHY59HD6C.N-YQA$Z;!KJ*4X1^LY.45V5*Q(VZ^?-'0.VYCI<WMC'WIZ?(&<`
-M*SV#FIQ@_!#Z')Y*(3+7=Z%U$K=&X\L,`!P!```<`0```@```$4``1A<8P``
-M0!$``,"H`0'`J`$"`?0!]`$$!^E>W%Z8LKIVA`RR"5].3&-M+B`D"`````<`
-M``#\(0``X!-ZG&U&C08D6\GD/2L@DL\(KWD_2H\M5>EGEAO926^3AW3+$6V)
-M7BV3?G!:D/DN43\B@49)M&ALXAV:#AB1F9Y:P8A*%3!P9Q8<?3P^#D&I)I#`
-M$FL?CV5$*2=J/NS75>T%K0->?(KO-P$?$F>\3NPV"O="6M>L%>>:7*YH,BL_
-MMU+`P/8V]\PM\$3WK9T"!6Y"VF6C?TNYRS*3CF5L?C:?P`>^$'P\2Z[V8#9"
-MUF``BKRR_KEDF$?'BV)`MC1PSYB;Y\01*_)2MGC*ZY8%GQ:`3TE4_\7_>;SR
-MHF1U$K=&&^<,`.P```#L`````@```$4``.A<9```0!$``,"H`0'`J`$"`?0!
-M]`#4!KE>W%Z8LKIVA`RR"5].3&-M+B`D(`````8```#,(0``L*ETY9M^M[EJ
-MOYUO^"2P-O.+ZL:7-Z_)UBT%7&<UIA6X]_I#D_4?"T>G53N^EL2$O\(MXPKG
-MCA\7C68DO<$`7+#"NHJ\,H"-RN,Z,Q;T990X49?/$5_LWV'4J8K"IQ27*#FI
-MR8=%5\]P?WY[:1RW@?102\4%NXLI`*??C,CM;=/Q0OUQ@3!?G*$"")7,'&=H
-MZBM9_%9^KA_->ZE1NP3S(7%NQIB:[0Q#S6'P4Z!U$K=&F@@-`.P```#L````
-M`@```$4``.A<9P``0!$``,"H`0'`J`$"`?0!]`#4!KE>W%Z8LKIVA`RR"5].
-M3&-M+B`D(`````<```#,(0``L(>L3_]$]RHFU+LW+Y<0N?02>5H#+ID&A4$,
-MH1]YJS2[5AO1)@[;@;/=P7Z+I0>9L%?#AV^%RD>/WC6X&W@X$G2F?KU*4W)P
-M.@8D#YD?`D#]TEM*1!&A*"KP^&Y0%+C]DH&*:U3R^*R&D].PZ8"_X<W$+!%1
-MGO'5;(&H\KJ[2)GEX*6.KUB5*3_.[S@2E"L<ZZ0#77,`*UY9IP;3@,[PM>W_
-M5FXG]\1_.-8`@A]U$K=&$C`-`(P!``",`0```@```$4``8A<:```0!$``,"H
-M`0'`J`$"`?0!]`%T!UE>W%Z8LKIVA`RR"5].3&-M+B`D"`````@```%L(0`!
-M4*O::$R-9+6Y%/=D9%#M.;TF]3^F)G.EB8O`K&?<PNNX0Z5$N2HHJA\3<W^-
-M!3;Y]A,B#D^IT5S6>NJ1K3/F?_\;V-N&B*("8DTN=?(PK<OWMRP`*B_M8KQ/
-M9!(RYU"H%R76)M;T)TIA@D_QB2SI%2*'11!*5M7Z57;AJ_5#]#_7FV(5Q;/N
-M^4W<%K"\[;/(0M4:,!/UV)*>:P?+Q$?'KFI27:7K"=@FF4R^%2MA*6T$W9+4
-M?FTFU`=]E\66V?_VF'A1KV"BQZ"1E?LB)T-R=`9$;_",D'I@T-/>(#+YPWR%
-MA;N*U3S!PB7;C#Q^UT<;0(F`;%.@7NUDYPC?7ST2';M$KICN+.93+<"`U;9#
-MRQTK?S0.3?]RDLC1I>QO>YYZF;&\MYT!+`:.TC,C0Y535VQ8.`(XW71D:4GD
-M+\%+,N#.]91K;*RK7=Z?B<?:=1*W1M]E#0!<`0``7`$```(```!%``%87&L`
-M`$`1``#`J`$!P*@!`@'T`?0!1`<I7MQ>F+*Z=H0,L@E?3DQC;2X@)"`````(
-M```!/"$``2!ZE_L(!87L(T#NG?02XB7N0XCNX62E`=AXQ/IZPIY5G%"RKMI6
-M)>OQ?CL<"VOL#;80.EYX:\24X>T5"`UHK+S#]!(,P]6=[XDCD2%-KHC\)D+4
-MV+'_L1.#X>,HDY`8%;FZZ?%;;@XIMZF?XR9QD&T\X0>L?#_1O(*!87MN;0*S
-M/5;-6:P>!P%W=;5TU34KJ58-#1%V-L_-E.M<@5HILZ7@.7?&6O-V/W:9"!*.
-M7W"YW;-']-$-[&V&>5[4M<]0H&S-,9BL?=7._0`,165T3?A9,G6%2]L=8'@"
-M5`8!M"1\JL:?I@8`>2D^#<(T:_'=-SV)I^)VJ2(^Q8`&&+>&(:R5$9=\Y<TJ
-MEN.L\]XY@)T_/Z:T[UAW+\T:=UO5VG42MT8.C0T`?````'P````"````10``
-M>%QL``!`$0``P*@!`<"H`0(!]`'T`&0&2:H)3YSKCEX,[_/>R!JD1>PN("4(
-M`````````%PJ``!`7@@&-KQE>)*ETP$V_./)36H<CZ,U"=+HZ5C@L<7F-(WW
-M"_-_XVHNMZ_[O9JAS>L'-NG1T>:-%J"8I'1+=1*W1F^9#0!L````;`````(`
-M``!%``!H7&T``$`1``#`J`$!P*@!`@'T`?0`5`8YJ@E/G.N.7@SO\][(&J1%
-M["X@)2``````````3````#"T0&HS"A#6#C:B0`EIVAX#30\"W9^R7;P+<H[*
-MSVHE9!KM<(<?T*C-X;>H6W42MT93J`T`;````&P````"````10``:%QN``!`
-M$0``P*@!`<"H`0(!]`'T`%0&.:H)3YSKCEX,[_/>R!JD1>PN("4(`````0``
-M`$PJ```PD.VFYE4;>OO/'M>'*":A=48JJMD7]XCK*;]R*.):I'&2^N)`;+Y=
-M2(`'CW!U$K=&A+8-`&P```!L`````@```$4``&A<<```0!$``,"H`0'`J`$"
-M`?0!]`!4!CFJ"4^<ZXY>#._SWL@:I$7L+B`E(`````$```!,````,&(EJ[9]
-M#\(RNT8G5-R7T>$'.]>KBM.D;V)0@G154D,,;17<?10-+460W-M'=1*W1BNU
-M#@"8`0``F`$```(```!%``&47',``$`1``#`J`$!P*@!`@'T`?0!@`=E$!J<
-M@11ANWD``````````"$@(@@````````!>"(``'@`!P!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``6%XGDQ3>!U*R_NT4F`>HCGFY.PN,);TQ.'"W
-MJQS4]'?J4=TK4@4^:.-XL*Z*C]H;&0WWBS;S]+\?S`2CYD5I+M?K`YR=1VF9
-MMCKC:;UWL\W001E3F]`!$KG$`-9G(AY/5L)UJ_?(RS&*?J04<1WU%>1/A*9Y
-M!KZS2_6ALI]X>PTI```D]LU^O/(TRVD7+O7W2#>-M"P.%TE@CRTH0(/*.#DT
-M=4HI```<``!`!)8UIR!I4<L/`%8K!C:9[L0&1+(>````'```0`7P"8:@<.W%
-MV0+#D&(<Q4YZ[H4S&742MT:4Q`X`7````%P````"````10``6%QT``!`$0``
-MP*@!`<"H`0(!]`'T`$0&*1`:G($48;MY```````````I("(@`````````#P`
-M```@``!`!@````9KAU]QLY0"BY:N6C0\=PG'MV%'GW42MT8QU`X`N`$``+@!
-M```"````10`!M%QU``!`$0``P*@!`<"H`0(!]`'T`:`'A1`:G($48;MY````
-M```````I("((`````````9@A```@``!`!@````9KAU]QLY0"BY:N6C0\=PG'
-MMV%'GR(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``6%XG
-MDQ3>!U*R_NT4F`>HCGFY.PN,);TQ.'"WJQS4]'?J4=TK4@4^:.-XL*Z*C]H;
-M&0WWBS;S]+\?S`2CYD5I+M?K`YR=1VF9MCKC:;UWL\W001E3F]`!$KG$`-9G
-M(AY/5L)UJ_?(RS&*?J04<1WU%>1/A*9Y!KZS2_6ALI]X>PTI```D]LU^O/(T
-MRVD7+O7W2#>-M"P.%TE@CRTH0(/*.#DT=4HI```<``!`!)8UIR!I4<L/`%8K
-M!C:9[L0&1+(>````'```0`7P"8:@<.W%V0+#D&(<Q4YZ[H4S&742MT:E^`X`
-M4`$``%`!```"````10`!3%QV``!`$0``P*@!`<"H`0(!]`'T`3@''1`:G($4
-M8;MYOZE4+'(`9.8A("(@`````````3`B```P````+`$!``0#```,`0``#(`.
-M`(`#```(`@```@,```@#```"````"`0```(H``"(``(``%;F@QMC6\+^9]-T
-MSH95XT1J]>05?JZAK1E?'>_MI_&I-UTGH^L'=E:9E1/WVAU"W6%!>R#Y6(@"
-M.RC+5=Z7(?`."W$K,X-4QWXKI4JXBJ@6DCAFL#A]3:H9)L,M-]JUJ.Y*BVTT
-M^),,Y-E5B5CP-GRTT)>E2RM006[ZO2WW^N!"*0``)'U=)T8)C9)Q`HI_]:YW
-MF7(?T'@8B/JU^*88//(0P!)/*0``'```0`1CHFW0K`5(P+`X?;Z:(QWUT,S@
-M6@```!P``$`%-%O[)NPX=D?R"2QN;HW#7S80+TEU$K=&\24/``P!```,`0``
-M`@```$4``0A<=P``0!$``,"H`0'`J`$"`?0!]`#T!]D0&IR!%&&[>;^I5"QR
-M`&3F+B`C"`````$```#L(P``T'TF5KZARC?EJVU0@YV9(_%O1?Z37[J;$-Z9
-MK-QR/1NNS+[#/ZPW:GOED<>LVJL/_4G/@DK?6NK>C/GI2$3-"[RQP!N,W"'(
-MV(8$GDD#-('X=W)Z='$4&(H)>Z],7,ALNM-9FF&)!`(^A@B-6+Z"^+IW4PC`
-MVGQY+"D3C>HN'`)MJS6"\MS@NENSO3)@WF,5[F3;M&*[P#K(J=R*5G996#`T
-M3(=A0%]/^3?(L9[0R^-SMAGHKA%OKTJ\AVE>`Z2QA9BV`46<=B/.9Z-D#W42
-MMT8"0`\`O````+P````"````10``N%QX``!`$0``P*@!`<"H`0(!]`'T`*0&
-MB1`:G($48;MYOZE4+'(`9.8N(",@`````0```)PD``"`\ZLKRI_]?6,`W6DI
-M570OF(G3[X++[>OEH>2@O[@(0!L!\))!0*8.][GBMX2#O>_C$AC-6YI_LW24
-MWM8@:='R']$AT=CH0R\%ZM/PF<<%HN6XT+,@[L,)=1QF=H69.F>'!7"0.C?'
-M>#E?%]2RDU(Z\^:@HX)9P,9=PI1BCG82MT8['0``'`$``!P!```"````10`!
-M&%QY``!`$0``P*@!`<"H`0(!]`'T`00'Z1`:G($48;MYOZE4+'(`9.8N("0(
-M`````@```/PA``#@C"SR=6GQ&1L@?-T&J\1N2DTH&``H\13X-]OZZL%D+]9^
-MF`@0'#<WUK4R\MQO.+B)7_,BJ,7;RPS@S@<%#Y[VQ#3+XADS]L'/JF2#[L,J
-MV"\S+'0%%QFVWZ,/8E9\'\]#W9=_[NPZJL7&SQY=?'<'D5NX^"#M[HUATIV^
-M*HM-M%9^-`61/1^>^)]^/?0*8@^J2]YU3PW3D8.DYKQ8.<4[P`FD5P,%R\:N
-M8T[1U?QD'$UZ3#&(RY1_%,:)#-L6&>U1$2FYH@-D&?:+WV9@))>/WTB@ZO9?
-M<J7RA?U];'82MT:N*```_````/P````"````10``^%QZ``!`$0``P*@!`<"H
-M`0(!]`'T`.0&R1`:G($48;MYOZE4+'(`9.8N("0(`````P```-PA``#`N8I5
-M9"GI1(LTA:ACNT]332OOK5%GFT?J?]YCH[%@0P?8)3T7C$;9D3#)YN\]S:'V
-MC>_/]T]/<U<*J=D:9GZF"8\,DD/3FW:F%P?C^9`0+PVGLM<IPX3,0J4J"#=%
-M^+3[V'RX%4.Q@*3([F<EUBDRS(.-@QOKI$R6Q`X8O]8_F:BN"#XW&\S';U=Y
-M]4G@]FD"0JMAU9Q&/LY4^WY)P/8T&9JZ#J):D+HY_P+,,8SYYKG?CUV12@1Y
-M!ZM36H=V$K=&.C,``&P```!L`````@```$4``&A<>P``0!$``,"H`0'`J`$"
-M`?0!]`!4!CD0&IR!%&&[>;^I5"QR`&3F+B`D(`````(```!,*0``,+*[.YT3
-MF(I(K4S2\K4G?>!Y/PP94RH&]Y98`\SW)9=757B&Z7NJYVTK:"])=A*W1EA0
-M``!L````;`````(```!%``!H7'X``$`1``#`J`$!P*@!`@'T`?0`5`8Y$!J<
-M@11ANWF_J50L<@!DYBX@)"`````#````3"D``#`R^EDIPY$>TJ;FX0&NY_4Q
-M!(-W6#]V8M8*IZ6%-$.@Z?K5SD<C\7<'T6]Z7'82MT:":P``/`$``#P!```"
-M````10`!.%Q_``!`$0``P*@!`<"H`0(!]`'T`20'"1`:G($48;MYOZE4+'(`
-M9.8N("0(````!````1PA``$`Z$M5/!(NF]-=\<,N!T7ID*I(A:JL70><(CMW
-M*TZI:9L#`+E9VVWM^[9IWF,`P`F+917K3[6S+L0F(`*VUSRTN8N&?MW';57W
-MLRBU$.-8!SNK337RHPGPD_MMQ1&UUU':7^%H+P=654*2MND0R4P(^C5;0N.G
-ME'O,X(7AV<84*6;(:U:/D;BF2`:1D?XGJ4,X'9Z7NG_N<*><J]>R5P9I:6WE
-M]/$LK#C"WW-J<W+RHE[4)>#U(\-7'N7]DE>.Q%)UBAN8,ECE/F@HLO;FG[98
-MCD]WUE_Z3ASC\B,*K2%`"WHL&^0WTQC%Q5MG*1!WA;,J-MMR83_V&^1L/?.S
-M=A*W1FAW```<`0``'`$```(```!%``$87(```$`1``#`J`$!P*@!`@'T`?0!
-M!`?I$!J<@11ANWF_J50L<@!DYBX@)`@````%````_"$``.!J\HL462I`[&5R
-M4F.F7DR,:CJ[=LEWS?V'Z[/*RKSPT=7I%]7?I"UO&Z#HUIA)OL]5]9`(!7"X
-M*V*TZ&[5$\&%M&2]J+U6[V]@*JCW$&RR6C,`4B<*ZNWV_",4/XC1T+WMU2A2
-M#V7]`K.R>1UJTP1JQVU6K^)>"]M.JO,#\W!YVWXW\L&M"2?]^'-T0Q=]4#\$
-MV,R!KD.,`J`W^7WQDYBKSJ1R74HX--A-><L3`LW7Y<8^WC*C!AF9++L5_%"'
-MP"BF4ML8<LYYDSE0Z.^X@$J7)N2/F7)^YJ+F2CT%=A*W1A:'``#L````[```
-M``(```!%``#H7($``$`1``#`J`$!P*@!`@'T`?0`U`:Y$!J<@11ANWF_J50L
-M<@!DYBX@)"`````$````S"$``+#%YS3TGY;&Q`(6MV*5=K#U8,NLP@:%4!(S
-MH:4VTUJ<>3O^I,*9\3'U_4_5.=87L[Y^KL_^**Q]V-ZT"*#-XXK*68L%QKP:
-MNV)O.W.1;5LB'H::ZX"\J#:GSU^U+_YW:=%HYB$,IQ20,*8B-^#"U5[N"(MY
-MZGG-/L/5UG>]%KVO5[ICJ!-2OG(YD.(HP;O6)W:;NPE+>O&$IRH1_]XR*2]3
-MP2.E(S"F]_7E0HLU=A*W1GBG``#L````[`````(```!%``#H7((``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:Y$!J<@11ANWF_J50L<@!DYBX@)"`````%````S"$`
-M`+#(J"<VEPW^5\3A(;KP)XVK9B@"L$Z]G#KK+UW>K!3L_YMW1+QE"(6B&.T)
-M>NUQ@ZK17NOF#3:=IU%]ZGY5$/S13^!$[26]H3G@!K=Y$X\K]&8]K:NUQO.R
-MNL*93D1;(7J9I1?MB8[=$@CK#5K)I0&^_BG^W45)&O(L&..X?>I#5L?UY=;0
-M%3]7=J4614>EU?VA(NA2(^=Z=C3?']N&1],4I0AQAN)`.$A/SK/0=A*W1C?&
-M```\`0``/`$```(```!%``$X7(,``$`1``#`J`$!P*@!`@'T`?0!)`<)$!J<
-M@11ANWF_J50L<@!DYBX@)`@````&```!'"$``0#5498>\14V$CP>2T"1^#52
-M#(!C[L(!?"F8TK\WMNM3G8`1`)=M-YZRJ<I>)Z"*I->\L1V&M'=FCUR3+_N"
-MN:VN>?\^2#5+AJ$+S?S&^PY"_T].0J`*QY<`/EJ-WJ18BB9F$N.KV]A@_0Y)
-MF]1IQ<RE/^K?"#&([X">8-Z6]U98HH!3>_$?)/SC.*##REZI8*D,D['B!A(=
-M!>`?M7$B9;A3:-Y4WDKC&^P_LL=4-%[)UGGJ9]03ZQ_*T2I'L]D'DLCXQEZ>
-M&E4.N]#W.I;_G8_R>5;$"JD[S/9N+S#)GX'?^7'L:)4RZAW7A9\W/5D_55UX
-MH9C+#BXT8`).:]UV$K=&+-(``!P!```<`0```@```$4``1A<A```0!$``,"H
-M`0'`J`$"`?0!]`$$!^D0&IR!%&&[>;^I5"QR`&3F+B`D"`````<```#\(0``
-MX*B5FD[T&AKD(#ZK3HC:F-12(Q?)WS/?E2"Y`@W6_`.A'F,>3FE7Z[NLP`_R
-M<W^J]ZE)6G!M"QF1FP01KWV-XV"(4A7,,:.^*S:XR"^'V6BC5.Y:[:%R@%B!
-MVVRN](G2MSP/(WYKB'C+/[#:)0ZE+G')]\K&`6YXWNI)23%@D<D&['JQ"%G)
-M@;76H'.<#4K%;P<M$V.&\\#!7^CAQ9DZHYL,:U+@6;:2(\3EN_:_`GG!D41/
-MMN,@ZJ74#+RL,D?53RZC$5&0FON7T]7CSHVZG!^@MDG,JYLAH&12+#EV$K=&
-MPN(``.P```#L`````@```$4``.A<A0``0!$``,"H`0'`J`$"`?0!]`#4!KD0
-M&IR!%&&[>;^I5"QR`&3F+B`D(`````8```#,(0``L%J13BQ9]5W&DAWU[7Z/
-MOSA'B.V7@];%*6EU+UC`FVQRPVSOQ9!0A1$WF\U877!!P@0+P2]^=010"?I"
-M4#DN1`N+_%2("HKL^;QI#*+<3T_-A_=0,CDC_;`Y*G.2.UO!W[+%_=B4S(#5
-M-';%4KW/]AEPI>/=^?Q7>G]3R5(!\W`!05?;0DF<(3`>&*_;9:^-*KA**-U.
-MARH[:F^/9X@#,9=?W/M_)G9QE0ER:*5V$K=&Q@4!`.P```#L`````@```$4`
-M`.A<A@``0!$``,"H`0'`J`$"`?0!]`#4!KD0&IR!%&&[>;^I5"QR`&3F+B`D
-M(`````<```#,(0``L'LU)Z'4*XU&/4PS>OL>6?47ZIT=*8SKP[D#4Y!O@BD&
-M:J@^OQ*LV%JURD&_ZCMD/.<RL\#<E]0V3^MT$V#MSL\1TZ3-A/F=V@.9[R*R
-MH3K<JUK;.T6S(5RP,9S#>L`N.[:R8>*8$2<LSH-8%\JJ]6A[=_B`95:1NRJ&
-M#X\3DHB=I@)DJ7AP4G*,Y[]:I?<S"F@G]".,S3!TN=*OY\7@:`4>?*ML'7$F
-MO$;W;7]V$K=&P2L!`(P!``",`0```@```$4``8A<AP``0!$``,"H`0'`J`$"
-M`?0!]`%T!UD0&IR!%&&[>;^I5"QR`&3F+B`D"`````@```%L(0`!4(*BITU[
-M"V>+/NRZ<7.^)<N/;7?T"J6D!>&GRYOM2&4*ZA046X.)7]]Y#/V-S"LQMV;D
-M<O4>:7W'^_?]9M/TZ[STH6&<?Z%*PT?"$,=X.S&"#H/4;_>_E@!HEG(YO`5S
-M!6^8TX;N<!L:)U#;="3E>=&X!=_FN+]'I#LB`NO4QY)*O)M*G,EZV]:.@1\8
-M(12Q-W`*#FC]2C3DO#X3?5_/.>A^&9W>;`H$F,1S^L)-,4`1A;[`]YPE.9R=
-MH2%:=R6"\>[=PUW\REHP@_>#K[!C]]&04%.`XC<$,7GXR@HMG3,YEIEUH318
-M=V6SG,\?2FD=XY@?=2(O!<I3H5OFJ;9O(6[4)>W%R6UYKZ^D"[Y/<UJ[]_QB
-M'5Z4HSV)(/VYGFK%S(),^0W3LWE'B=963(^<`99KX!B+:A%7%'><KR[1)A(]
-MBP-:M/(UN`((S'SZ=A*W1C1@`0!<`0``7`$```(```!%``%87(@``$`1``#`
-MJ`$!P*@!`@'T`?0!1`<I$!J<@11ANWF_J50L<@!DYBX@)"`````(```!/"$`
-M`2#Q7_R2<[!W#[)S#II'(*HT<&_@223ETX$K@[ZS*\[>,CUUKK.LH1&*^'9M
-MN`8Q-.L6Y7ZV-P*=[NL&9M`;4;2Z)006[.[`BV1<.;([(]4?)U=Y<MB<+K$1
-M6#W(5RY0M4"EJ_RZ?JGV\'OI$=W:<CB%VMZYD.%&21G5D^A?J<C_R#C1&-CK
-MJ<02(",1X/(?;97D?[Z28N8/46)EDG5'74%M`#HFB&FK*5$"P9I'%Y3"_;O`
-M*E.V:EA=SB`>F2]^HM*MPZZCV-%*;R^SF&AL`[VVIF3>JU2NK&'QLSYR::X-
-MPYE8,L)I=!4OKPHK76JE*!MBIS.Q7^,*]D`PQE%,'"$R>87_^<((O%MP277+
-M_;1[EGT4];2\)=)+Q68GP782MT8*B`$`?````'P````"````10``>%R)``!`
-M$0``P*@!`<"H`0(!]`'T`&0&26"#@(ZR`?BP6@JDR0*3E,0N("4(````````
-M`%PJ``!`[=ERN@+SP<IC\@.K'K.Y3*."1CB..X=JRAVGI59PY4R\\CMTE,84
-M>/N"F.B=8=CR1](BIU/74!C''J?_=A*W1H*3`0!L````;`````(```!%``!H
-M7(H``$`1``#`J`$!P*@!`@'T`?0`5`8Y8(.`CK(!^+!:"J3)`I.4Q"X@)2``
-M````````3````#!;T6@:S$:I<'YRAW!3?]"7<@-QCBX3`UEV;=%E5P']:_)3
-MN$QC%6M5"+?(['82MT9:H@$`;````&P````"````10``:%R+``!`$0``P*@!
-M`<"H`0(!]`'T`%0&.6"#@(ZR`?BP6@JDR0*3E,0N("4(`````0```$PJ```P
-MW@)/:>O`-M1_U0)U&H9)`HP*R9KZV1A>A%3/P`]@^KZEM5A4$!)=#35?.$EV
-M$K=&*;`!`&P```!L`````@```$4``&A<C```0!$``,"H`0'`J`$"`?0!]`!4
-M!CE@@X".L@'XL%H*I,D"DY3$+B`E(`````$```!,````,$]K]EUT]RJB8TG!
-M&TU-"TG&"-W]C&(M!CQVQ^9P8HK/B9^3[W96P^3%W/0%=A*W1G&K`@"8`0``
-MF`$```(```!%``&47(T``$`1``#`J`$!P*@!`@'T`?0!@`=E3-H.&N#RVX$`
-M`````````"$@(@@````````!>"(``'@`"`!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``847NT/L"<9^U8K]R180PDU.)U;D"6+"<H9U1:UN,Y]G(
-M?1HDO[YO[P>C6^#'WK:,<<Y($[X1?XW%`:GA<\M]%H6:%.PV9Z*&.W4K$07F
-MVXO9CJ[.0JYQ.NH^`X6V@?W078CC7ZY7XQ%Q[)YU$"EQ/$+9T$)?:\;LVDF_
-M<F:F)$PI```D?:=4ZG2B3NB-.*#D#C,F6]8-!WT8E1W_Y*$:>;Q)QX@I```<
-M``!`!$Q0CWB.XHQ@<\P\SDUV:O^:R]6T````'```0`4;4L)"+B[0U,^M\/_,
-M0$[M,@1(,782MT;3N0(`7````%P````"````10``6%R.``!`$0``P*@!`<"H
-M`0(!]`'T`$0&*4S:#AK@\MN!```````````I("(@`````````#P````@``!`
-M!@````>;U*P1E8W\J*V-P0JFXW5_ER@N<G82MT9CR@(`N`$``+@!```"````
-M10`!M%R/``!`$0``P*@!`<"H`0(!]`'T`:`'A4S:#AK@\MN!```````````I
-M("((`````````9@A```@``!`!@````>;U*P1E8W\J*V-P0JFXW5_ER@N<B(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``847NT/L"<9^U
-M8K]R180PDU.)U;D"6+"<H9U1:UN,Y]G(?1HDO[YO[P>C6^#'WK:,<<Y($[X1
-M?XW%`:GA<\M]%H6:%.PV9Z*&.W4K$07FVXO9CJ[.0JYQ.NH^`X6V@?W078CC
-M7ZY7XQ%Q[)YU$"EQ/$+9T$)?:\;LVDF_<F:F)$PI```D?:=4ZG2B3NB-.*#D
-M#C,F6]8-!WT8E1W_Y*$:>;Q)QX@I```<``!`!$Q0CWB.XHQ@<\P\SDUV:O^:
-MR]6T````'```0`4;4L)"+B[0U,^M\/_,0$[M,@1(,782MT;J[@(`4`$``%`!
-M```"````10`!3%R1``!`$0``P*@!`<"H`0(!]`'T`3@''4S:#AK@\MN!M'^!
-M(A"AJ]@A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(
-M`@```@,```@#```"````"`0```(H``"(``(```VI)%C*$;J>**5E48%;:^EK
-M/&+%7BK@^Y1:N<7V!V38/U:@L8PJ\L]M0SGI8;EWN1]]Z*F;0/I0SLX!<BB'
-M-GU:#P7>]8O0>;9T2&+.;:<4X#=TQ1#(@\:I0&C24(-V8['&2`R8;KC4O19,
-M#;",_.2H0)+S.*E;R)\H3]D\:<J$*0``)+)5Y2C@&`K94D`'.7(=!TJ9V]6]
-M'@2R%CD/V?,1I@=;*0``'```0`3YD?B#ZN+J/J<D4X+R>-Z(^6ENQ@```!P`
-M`$`%5@?>R&X>^4/;D5U@`KF^UVYL2Q)V$K=&Y!L#``P!```,`0```@```$4`
-M`0A<D@``0!$``,"H`0'`J`$"`?0!]`#T!]E,V@X:X/+;@;1_@2(0H:O8+B`C
-M"`````$```#L(P``T$L':1^+)O&[KS&"M)E6/9LCO^]Y.UH1(M@\4\[0.C[\
-M!@NR^W,/J%K6W!T.#;C9`<Y^B=O?1]$7FZM*S;)Y/'%+L-V%X,K%#C1MV$LL
-MG,,P<L/%Y%U(BD[O92=XQ:""&/ZY0)FY(.C<SQ7S\\`<=KF/56ABRQX]T:I*
-M=).!F-*SID5.=M5M0F]"UU!X2+U6@)4I9B5X"A^P5I@XOMB,&^'KOUT(:ESP
-M&JF6?/YJ@R=+SS,'#37QA;I4=K*CKKCMJO^#>M^NVO[ZQ,O?+'82MT;T-`,`
-MO````+P````"````10``N%R3``!`$0``P*@!`<"H`0(!]`'T`*0&B4S:#AK@
-M\MN!M'^!(A"AJ]@N(",@`````0```)PD``"`GB0(9_7.!JP?)=Z-KIV&$R#V
-MQIWB:$0D,&!2[\23]ZN?!0C>-!+'YV(`\1[D\.?5K*!D,(GJ&#;AS9F([[<J
-MQ*P9X]K?IS,W.$&3W#;NX!4-MU<'6.$2"#R!^IUH8*^%4P@+)8G0NBI^:[A0
-MY6V'OM;)Z6TD>*/WUHG2C782MT9B4P,`'`$``!P!```"````10`!&%R4``!`
-M$0``P*@!`<"H`0(!]`'T`00'Z4S:#AK@\MN!M'^!(A"AJ]@N("0(`````@``
-M`/PA``#@`3DHS2VEV[VO5S\UE?&8V1@->R)\7`RA%+MO(#`Z/#DTO$B,<FJ#
-MXGN,]<7S<+N23%L;T<?,V.A..HJ:(@_KK[^C^6N^F#@&,^DL=]2*6>U&YD+!
-ME(;6-QUU6+L/%$_%0?Y5I=(9J<>#0G6.B*>+>]94WZ*IM>FA5%&O..39F9!9
-M;YGTF6`RCD<)D#>O/..`E2OK'L.+/\5=]5V`;Z2V0/\WHG%9G0YT^L\,$47<
-M-"PPZ'F*OD:'F#G&@'$98T4B2A`NG+@)?_54@WL63C9A6ZTK5:Y7&+MY0_;F
-MX'82MT;>7@,`_````/P````"````10``^%R5``!`$0``P*@!`<"H`0(!]`'T
-M`.0&R4S:#AK@\MN!M'^!(A"AJ]@N("0(`````P```-PA``#`,K/3&G(1D%CI
-M6XCW91JX$:9`AM:FE#'U0I1B7"RF\L=5/+MCTP[CO`.,J(>CK\_A=0[0TUCG
-M6RS.[,N80RI\\7:C.S'S;EBOKQ!\[1I8W)](`P#,B'D"Q&[+[:;`TW,22;DH
-M!G_D[&N,6KK>/BXX6JOS!$N!%5;P[@N'6HO)*S03,9`[3=IA=Z#R57)YGJJ"
-M^<$LE1:R,2!6K)$W3,G;+C<KZBSHP$/[ZZZ#J+=PU-E'.&R,]#46Q?]P0&AV
-M$K=&H&L#`&P```!L`````@```$4``&A<EP``0!$``,"H`0'`J`$"`?0!]`!4
-M!CE,V@X:X/+;@;1_@2(0H:O8+B`D(`````(```!,*0``,!8_!6]%;0SPNJ=U
-M3&[U-\`IH0%!H:_=0E:^8$;3%1#^\%AOP;O7G_`F<RW2=A*W1B:'`P!L````
-M;`````(```!%``!H7)@``$`1``#`J`$!P*@!`@'T`?0`5`8Y3-H.&N#RVX&T
-M?X$B$*&KV"X@)"`````#````3"D``#"MPCR?6@2X1],O?1&)K51F#SR;!36\
-MZ'M:AKDC)[KG6:"NAJ:\CU@`)V>K)782MT;1H@,`/`$``#P!```"````10`!
-M.%R9``!`$0``P*@!`<"H`0(!]`'T`20'"4S:#AK@\MN!M'^!(A"AJ]@N("0(
-M````!````1PA``$`?0_KE,!F0VD.'W49BY+*E3H5CX@K+J__V%>(>U")IN^Z
-M*TR\+!0[!*5(WQ=AZ51G]H=+V%LMZHT.?_$J-*C^G8U$H_`TK@3RUP<?)52X
-M\!MU=)]45@D3.X5OZJWQ#D"M[B!GCBPW*VOM6_!AGAIL>X136Z%CE@@3@;5-
-MVF=J?-<@@D-HEFERS>DD__CFX*8+WJ;<M%S?1QZ<""W2#A^P9-=VV#=9DO,E
-MDC33)T#O8SMPIKR!*.DK7;;7VRNA]=JQ.-ON=:!I!8_Q3I>X#'V6>D1C:',?
-MFXX=WZ#8<Y@^Q!C"%;_%\`,40":F'&P^&Y15G$B#PS;O50D5X]51=A*W1LNN
-M`P`<`0``'`$```(```!%``$87)H``$`1``#`J`$!P*@!`@'T`?0!!`?I3-H.
-M&N#RVX&T?X$B$*&KV"X@)`@````%````_"$``."4T5@IK@&1,P1H-;E%C5O$
-M=_BBGA66T-J?I>G2/FWSXAXZI.%")2#86W1$?0WE3R<9:/;,9YU1/EOQ$,",
-M=WCR?50CP>$BP(`B?567!]S'SEL52%LFC!M4*1)PC!^:UFUW6E170Y^#O@/I
-M!9,F=H>@__Z][>J+X,VJ^)";5Q@AH+"L=9K?F2R;>1;2E;X=CZ6`KG&_[K4Q
-M-7IEQP;PB>%W(BZ?WH;FG%!R0O(O@EQS9:=-?IG"R$(`_L.Z!_+-;QHO29C%
-MA=M.+;G1ZI%GI*GS:[WNZ]AP;ZF/)0*&=A*W1F*^`P#L````[`````(```!%
-M``#H7)L``$`1``#`J`$!P*@!`@'T`?0`U`:Y3-H.&N#RVX&T?X$B$*&KV"X@
-M)"`````$````S"$``+!(%?+_2U<^[V%$@T*39;L82DM!/T*Y^\D8S$S!GC?`
-M:O6@]9Z8G89S:F&K1*=&$*N437F8"*<46A5(1*5>9/K,^2HCD@53WJ#0"_K@
-M-&&N-8(W-8W13]BS*%I\E=FHU<@)+OC*>,;9E*F\PA7`_J(H(NGXXP&C56RV
-MQ)HC=2;%S26EKHKO*QD*Q2+BL<%NGN[8(#9Y0HJA;"RRE(.#85%LC(XB?=M.
-M#528?X`I=A*W1K+B`P#L````[`````(```!%``#H7)X``$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y3-H.&N#RVX&T?X$B$*&KV"X@)"`````%````S"$``+#;?13>
-MKD6^W2+GF)!*2@4#1*\-'1R,",&8S!R*=DYI`LPRK=Q]5Q4:CJ!<FJ7=<2_5
-M0C%%^BT464XLEXBN/!#E#J%HLY;1;R*%\_>);ME45Q6S&+-+)DVWQP``UNVY
-M*@)XO80+[PJGH4`<LX(H:HKG$<W4*YPV&[Y^#"F*$XG5&U[UV9NOU1)"*<D(
-M`']K$@;_%/85K[L[]U-!21+VQ-NL#.#F$,=UW[7+I))#=A*W1H/_`P`\`0``
-M/`$```(```!%``$X7)\``$`1``#`J`$!P*@!`@'T`?0!)`<)3-H.&N#RVX&T
-M?X$B$*&KV"X@)`@````&```!'"$``0"P2F%9#<6R.,8&*AX>#[B%SH@G!DV^
-MW(1=@T6)_B72JF6X0T=@"6[*9JH6.0GA%Q##PB8N$]Z]9MRTW;H^JUU#\Y!_
-M/QUB>L.1#Q*LD4$7["+<O@0;-SN`.3]H[[\%>.TV7$A5#Y;FM-A[+)F>V=W&
-MEHG%D"",H4\E#AYE='%GCM3*O0;M/W_M8Z5]66I>:J-N((@5?`84Q5369WR`
-M#,U*J`^I+J7FSJ#K;`'>QXMS8A9JP^$A1TP0%CF0NRBZ]5M_@/BCOW,$4Q>A
-M`F)I>22R+U5_8`MUIK8]D]'=`KT?5#D>>1_63R[PJGPN2!(*KJ+?]K61C+W[
-M/*#Z1)UV$K=&TPL$`!P!```<`0```@```$4``1A<H```0!$``,"H`0'`J`$"
-M`?0!]`$$!^E,V@X:X/+;@;1_@2(0H:O8+B`D"`````<```#\(0``X*+:V^O=
-MZ>"-SBED=UD\GMMYQ0=]`TWH^"IJPV,_P(0%KU7-BQ33,5"`QMA6>D1*)]WN
-MQ#(L9U?*C5TCB^^!W@Z\+P3C?NM1X9432O.5W!<.4_.O_3*.Z`?P1F'0A7[>
-M*$<)J!X5R$%;MV^[\AJ&1%T^9:OA[3=`%(E/M@'\'7X7D=P;-SL$]'ZT]EN8
-M\@6HGP41GY.VVO?4TQ%JES09JO&DO>\&E]XUZ*S-_AD_Z-5%-]%(J!4<G=@4
-M%7HO*2V-LIQE=-8HB^\8!)[ZIFLBX<K_CN]T%;T7G:_L^&MV$K=&^AL$`.P`
-M``#L`````@```$4``.A<H0``0!$``,"H`0'`J`$"`?0!]`#4!KE,V@X:X/+;
-M@;1_@2(0H:O8+B`D(`````8```#,(0``L/]*2F03.B%.ZPO?L$2]9J$B_BJ!
-MZZY,S<'K-@"OA(`#:_1Z47-'&C6'@A=@28\N>/G,<2E-HDTD6%-C;7_W=_Y&
-M3"^L:V(,]=2;;"K^)E@D>4\=H&A+7>IJ&'WE@4TS*6H-,J+A3&/:QR3_5WQ1
-M!O_F,B.C[[6.>*RCV>PI@:C;D)](U0=6ZJ([V7PU@5&GWW'K@77775!7\!<,
-M9%:X,GQNA7QQ5@&9+C]@\$IV$K=&64`$`.P```#L`````@```$4``.A<H@``
-M0!$``,"H`0'`J`$"`?0!]`#4!KE,V@X:X/+;@;1_@2(0H:O8+B`D(`````<`
-M``#,(0``L/IOFC,JZ`$NOFQ\`/TF5N:/4UIA`6*L&_9T%=Q='6WQ`_2I6'L7
-MI2MR>:7?A[AX(;6.2KN2_W54E;1(A.,>0WJ507T1,E"&@9\70OD+V]T1I&>T
-MS3VL6[QF9=_GOA#ED!`U3`&9SVTMT[P7\VDGK+W`(O79U-UE<#)`J;EQ4?T@
-M5^92YZZ^Q.F^XE'>%;V($XF+])S)9'T\!26C.G?^6Q+C5HT2<1LAC*J16*9V
-M$K=&1&8$`(P!``",`0```@```$4``8A<HP``0!$``,"H`0'`J`$"`?0!]`%T
-M!UE,V@X:X/+;@;1_@2(0H:O8+B`D"`````@```%L(0`!4+<4Y801&L3*%(KH
-M8.<ST!QS<O?=H%ZIS_#MY[;>`=9HR%<1,"`Z:/T5&7"]YK,6"?_$6$76S.A<
-M;$Y"A8J@,'E".JY&XU+8R^1AU,>6M&,PL]Q*A1./WJ7@A]BLI&1X!N.QM_#A
-MURM5`Q@^F9A*.=R2EDJCL#-+&;LB`IYZ9``3(M(?U>>''F\D`+G[W<>G-.3'
-M.$\S;QF\VY7@&?'])#"J]P].K*0)-$(\[)Z=F8XH&Z._V@9X"IY2SM')^R[*
-M</7_J&5S+]IHF3G#DY(E+V=T<5T\-A/F%E.78(H)%N00"RMN@,J:4,4I/P7M
-MQ*T<48UHY3^(]D%6%,`JSI*]CE228W:K*2`(X\.BU)"C03$KZ9=C^H>._QW@
-MMIHEU9C:CG<.*2(USA)@P\3_Z6K\E#+^7?<I?^-V=2@QD&ZKB5YC":`C_7U@
-M_AL$GXVO=A*W1EB;!`!<`0``7`$```(```!%``%87*0``$`1``#`J`$!P*@!
-M`@'T`?0!1`<I3-H.&N#RVX&T?X$B$*&KV"X@)"`````(```!/"$``2#]8*LQ
-MH*IPK9%+1,L<^?*GXCP[<3E=?,3CXOGN<\'&Y%M+R0H@GZ&)]2"&S6X]I']P
-MTW`6J]4^$$$M)7ELHT18H)D8C1)&,B)E!>!7)30O!HK5*%$O-7^Z&.YBDFJZ
-MH3O.JDDST])3@4\Q_A[4#,U<6IK=,F,N.<''TN)8REK[GNKXL'EJ'?6H)=#Z
-MPD/C[F<:QQ<[88`?8-L$_!^-SH<7,5!5_0^7IPW0`91+O`9)Y8>I?RR:PMC!
-M)7EAWR612'0\&IHW\!>G`^D$7_N6&"NO$6U/LEQ5$-+K8&$P#DE)T7%LQC4_
-M%RV0TG5SD0Q@]2VJH/`"]L;-&<(\')Y='[KWOK5JKE,GVTD6*T%"M_;RID",
-M+(.[+/XK^_P%*G82MT;4P@0`?````'P````"````10``>%RE``!`$0``P*@!
-M`<"H`0(!]`'T`&0&262M,P$C#T,G\4YH?./)(,$N("4(`````````%PJ``!`
-MJ-F-04]6>*T2C=@-RYL2'-$@]HSBAF78R2<7831<TW7I<FH!^R='($#Q2B:A
-M:NZ1(7Z6ECCX&PSXYII<=A*W1E#.!`!L````;`````(```!%``!H7*8``$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y9*TS`2,/0R?Q3FA\X\D@P2X@)2``````````
-M3````#!UC1@</#Z?LKLO(;Y,[J(,?F@=([^Y-^+!BXY@G5/Q]6Y@\>E*`]97
-M$Z6X(W82MT;IW`0`;````&P````"````10``:%RG``!`$0``P*@!`<"H`0(!
-M]`'T`%0&.62M,P$C#T,G\4YH?./)(,$N("4(`````0```$PJ```PJA+[)M@`
-M_PZB,:F']\R[AB$1A'*KN.-:T$BD$'-E@;EOL?#N9_#,1)`KE0%V$K=&3>H$
-M`&P```!L`````@```$4``&A<J```0!$``,"H`0'`J`$"`?0!]`!4!CEDK3,!
-M(P]#)_%.:'SCR2#!+B`E(`````$```!,````,`_CPQN[5.7H(^*@$1A`A9[1
-M8'"PC6>7PL^X;029SCHX^6C_Y2&F^\/!VQY6=A*W1H_G!0"8`0``F`$```(`
-M``!%``&47*D``$`1``#`J`$!P*@!`@'T`?0!@`=EZ\;@\9-]I[8`````````
-M`"$@(@@````````!>"(``'@`"0!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``Y0>NPNK@OQP1`^RQ,`PDBXT9CH(R?I!UE+!M^D!1(H+^\2FQJ2:,
-M92<8WJ_3><5(`JQ%52L`]JW1D++,^4DZ["@\-Z<W:M>+."$F1N2.+FH5>L1F
-M\Z)#-IT#"@#):ZZ,^P5PB^^X5K+J6H"L`37M!.W(/*ZQXOV\OV:!D0H,_J(I
-M```DNRMI^<UUD7^].`F-WG6C9QTPKG@H0IK.:VR,`V[HE9XI```<``!`!"IL
-M$\27J5H[VPJB(P[9N,EH<GZ1````'```0`6+URX:HUG%X)P:TIY8Y(M=COC>
-M1G82MT8%]P4`7````%P````"````10``6%RJ``!`$0``P*@!`<"H`0(!]`'T
-M`$0&*>O&X/&3?:>V```````````I("(@`````````#P````@``!`!@````?,
-M[.15P1ANF<PC7VO>7A/U;M9N#W82MT;&!@8`N`$``+@!```"````10`!M%RK
-M``!`$0``P*@!`<"H`0(!]`'T`:`'A>O&X/&3?:>V```````````I("((````
-M`````9@A```@``!`!@````?,[.15P1ANF<PC7VO>7A/U;M9N#R(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``Y0>NPNK@OQP1`^RQ,`PD
-MBXT9CH(R?I!UE+!M^D!1(H+^\2FQJ2:,92<8WJ_3><5(`JQ%52L`]JW1D++,
-M^4DZ["@\-Z<W:M>+."$F1N2.+FH5>L1F\Z)#-IT#"@#):ZZ,^P5PB^^X5K+J
-M6H"L`37M!.W(/*ZQXOV\OV:!D0H,_J(I```DNRMI^<UUD7^].`F-WG6C9QTP
-MKG@H0IK.:VR,`V[HE9XI```<``!`!"IL$\27J5H[VPJB(P[9N,EH<GZ1````
-M'```0`6+URX:HUG%X)P:TIY8Y(M=COC>1G82MT;J*@8`4`$``%`!```"````
-M10`!3%RL``!`$0``P*@!`<"H`0(!]`'T`3@''>O&X/&3?:>VM,2C<`7HBE0A
-M("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,`
-M``@#```"````"`0```(H``"(``(``$S-IW;:G`J6WTF0WG/=IZ74@FJM)F;D
-M&DG\_]SOJ>0^%*HLR4REZLT\>/_+TV;)=KS\-(0/:>L<?@\CQ&2'9%SI0`FJ
-M`=98-+DX+ZN";:P:9(-E[W:1MGT'M?.-54N&[PH,!L$JO@+)D/@%N<0[`$6D
-M+9WYD@-TN,=\,7`021$9*0``)%L<.8+P<:WC"_8/(-C5?!K;MDO$4!1PR)GR
-M301CFXH&*0``'```0`2&.G^<M$H5S`+UK0&ZM6P4*XW8G0```!P``$`%&`!V
-MK>5?O1"'.63XY/3'*<5:=DYV$K=&VU@&``P!```,`0```@```$4``0A<K0``
-M0!$``,"H`0'`J`$"`?0!]`#T!]GKQN#QDWVGMK3$HW`%Z(I4+B`C"`````$`
-M``#L(P``T+$:TB/W69NE6[\>2C_7B%$$YFJT+U%A"$R-A566S`<W+SQE&4N.
-M@"7Y#+$^GI#`ICYB+'YZ?O;7MN6+>LSL&L6>0+RIUZRFEGYUOG@'LP"PMIKS
-MM+@M]+:>SG^Z5G53$=Q5GIZUX!G;ZQH!-;BBU];J.1<I8+<VT?$H05VP=D'_
-MW8LTYWA0K#WTTW@G0REF"M&#-:3=B:<73*IC-7!3]-Z?EZ*29,Z;DYU4//*\
-M#PM"FHV!N$ZB:U\_(:E]"-Z9>5*U;.\U>24Q;J@C.G82MT9M<08`O````+P`
-M```"````10``N%RN``!`$0``P*@!`<"H`0(!]`'T`*0&B>O&X/&3?:>VM,2C
-M<`7HBE0N(",@`````0```)PD``"`^X,]=MD5U(X41(+`4M%A6<%GZY"KML7<
-M4!@98PMVPLE2(WB"OU[##!N;W*=9W6X`)\EC!]\(`D7N"_\X::HMA5.^I`+,
-MZ0:O[^8^@<\"9:Q<@AP";D-7<(,W>:/#<X#T6R7`"46"L0Z-^><S)WJ?"=$C
-M;PV>#UP[R#O'4W82MT9'E08`'`$``!P!```"````10`!&%RO``!`$0``P*@!
-M`<"H`0(!]`'T`00'Z>O&X/&3?:>VM,2C<`7HBE0N("0(`````@```/PA``#@
-M-@^A<)(^RESGL?W1,6?A4FZ`P20)6T'\!6RBU]A3+8),!<F<@9#!/5,?EQB!
-M%FD$73HG:!Q>MR4\KV$565/1#XM4B/-FB?W\(]NKS"T(&17*HO($Q^\_SQA:
-MY%]63:VG,$A96.(@C>V?*4%4KZQ&@8567\7\3:,NK*K*0$M3SUSK)(`\'H6P
-M7Q4AC`B"&*>PL,`$L&M.?.1B]*WS0;%<RAOTN>#H4Z9\$5H4;/;#VQ+AKZ\6
-MMG&P7^"SL4@1RFZK[,H>4/;G_X&FF'!DV[5OE92C;]M',A(M`Y3F>W82MT9X
-MH`8`_````/P````"````10``^%RP``!`$0``P*@!`<"H`0(!]`'T`.0&R>O&
-MX/&3?:>VM,2C<`7HBE0N("0(`````P```-PA``#`PO2\0Q9PKX,"I<H:<E4C
-M]REV!3/$YF)D7M.6N]_M26:0?=K0Y"*9#WM1[C%7Q%T&/S][:^[MXR:+&NW0
-M1RQ])(%,GW<`;X!\G4"$G2D?<(R+LLULFU&FV/T+&@<3+IY0:HI$MQ<'W3*K
-M3R+?]A!3WQ+&JOY(\\D-C>Q#N=;W:T.E_X.RU6-66&"F$P:HX6*6R770/\)"
-M>B\QSO-F["+4Y&G5Y1.&@3Y=VE^&!+D/>7<E,CJP(.',@ZU>RAEV$K=&9JL&
-M`&P```!L`````@```$4``&A<L0``0!$``,"H`0'`J`$"`?0!]`!4!CGKQN#Q
-MDWVGMK3$HW`%Z(I4+B`D(`````(```!,*0``,#0,G,HA-+>N>J]"M^NG9$J*
-M6F[6!&:V!P?+LL+J(TL0#F#NK#[,QQK%[&X0=A*W1D?'!@!L````;`````(`
-M``!%``!H7+(``$`1``#`J`$!P*@!`@'T`?0`5`8YZ\;@\9-]I[:TQ*-P!>B*
-M5"X@)"`````#````3"D``#"$'S)ELN9!;GFA\']YL9)B^?<+VH/X0T3^(^U*
-MCW9Y*H&#F[]9+4_YK0P%W782MT8[X@8`/`$``#P!```"````10`!.%RT``!`
-M$0``P*@!`<"H`0(!]`'T`20'">O&X/&3?:>VM,2C<`7HBE0N("0(````!```
-M`1PA``$`DZLB3R@@"KD=\^'*!5MI4$BN#[0?4'!UB\SB>\*-0L3<]`XG3#-C
-M]E_B7KTV0A<%B_>C[!)(L_Q*AJ5U+[0KC"+'8?JG[!OU]>6Z]^['0$R!D2SC
-M]4`)J.W;FZ2+#^1AK2>/J[<:!"K7N?';2P8.B^P&?1.$,T96+>QCP!2_.U$?
-MB,3C*3L"OX]X.:#F&`Z^!VIV.D?['.:/1HKZH2*6@24DOI"9[E4R@7_-ON3K
-M?SE^?K9<5]6EA5B=SV!\*"P!*B#G8"A9>/+F)N^)$%B9SQ#7&9"!MQ1FQD46
-M,9:)$S0+$4D(G89'7IPS)_0<1$_M@`PC</0STG0QRAVL=A*W1@CN!@`<`0``
-M'`$```(```!%``$87+4``$`1``#`J`$!P*@!`@'T`?0!!`?IZ\;@\9-]I[:T
-MQ*-P!>B*5"X@)`@````%````_"$``.!VLQ.>_DY)\3XL=[2H'FI6P"*RFF*O
-M=P2>+9''B^AU_=K<ML%_9'$](%Z6NK`R>_]`=%>9(=QIU;^D!8Q-]LC/2@]L
-MC/&@HU2[U=<C%@W!788Y&)U"2D3J[PO/1("CQ[4["2-:4^^]&A&Z8LXE/[5,
-MG!KKY@["#T-\U2K)<NS[$4>!>;+TG%0<L_^>I?@$^I!T2C>KL?G*U1YH"1OZ
-M;^%D*;*+._23FF61&45<Q@")-+)B4*<Q%@KLU]?4&I]+'GU8@`(\4+8&!-,D
-MTN+'ER9&2MKMG:KC-4D#[:@C=A*W1E[]!@#L````[`````(```!%``#H7+8`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:YZ\;@\9-]I[:TQ*-P!>B*5"X@)"`````$
-M````S"$``+`64;/K/]\^_@J>HJL775Y/(9W:$0W&K;10D)\X("H1P>NQ7.FB
-M1D2IFBPZP_5BA2--<LP!7SR82WYE-&Y>KG72G=4N&W0:^7!6??AE&><+^9.+
-M5MJ'VTR5'*4.[0*F]6WF[V&6@7IW6@E=&<!-U.#^T,LFT)"^_*XJ7?[-$[,/
-M19EV\$Z=J`<\-SRTY"]MOE8RZ&DF\2OFX.)H1O4<L6!VZV@A>^@Z&=R5@O%?
-M=A*W1G<A!P#L````[`````(```!%``#H7+<``$`1``#`J`$!P*@!`@'T`?0`
-MU`:YZ\;@\9-]I[:TQ*-P!>B*5"X@)"`````%````S"$``+#,!Y*)^HX9*X)D
-M[Q9@4H1FN1:I!V[X+]X2?3)PBGM5*0SE!AP^TF^G>IR6IWX++9:/)@[+CC/-
-MFX&QL\^H]SIEEC4C#OA2PN7JO<<X[J.R>QB4#O]40(\KCE]]X'GG?%N&F/=_
-M67F*W%!"6'#`;=M0&N3XS+A4_3[(<.DGR2D/C<4OD-?'7136S^*SN4>R$A25
-M&4<GY%;I`*-E7%[I$P]'^&E55*3_MXQNH&A8=A*W1I0^!P`\`0``/`$```(`
-M``!%``$X7+@``$`1``#`J`$!P*@!`@'T`?0!)`<)Z\;@\9-]I[:TQ*-P!>B*
-M5"X@)`@````&```!'"$``0`4\QM"?=_=5">6]&:\8KJ4H=I>L7`1L8O=WVYE
-MCN:!&P:>HGK3QJ,$#SD3*.70W&J34XPERCN^G$E5"7&.I6]=:@OU[ZH]<^1?
-M,W^J77NNF%>-V@0L\N,DCR072A)#8"G4EST"?$)2R;-C7?*CDNC:FGWYK8(-
-M:%5E9AG;>_1\7%MZ>[M74@%1X/N=F:M=-3;#HC\>1RKY@75IW"#:.$4`5D8I
-MTN;"TE19]]7^A4]QUF4XA/&6UW%KS!YS]2$GF6!_/P)XNK,6OZTZ`)':OP6&
-M^EO712L?SF`]E-]#2:W<NI`#94'_FZ/PZ!V!0J_J+@_>554/$K;$\`E,[QAV
-M$K=&T%H'`.P```#L`````@```$4``.A<N@``0!$``,"H`0'`J`$"`?0!]`#4
-M!KGKQN#QDWVGMK3$HW`%Z(I4+B`D(`````8```#,(0``L"1G*B^94.VY;P3=
-M3HN^`ZZX?WV;UX2J[1+"S'SI74OIJK.OED.S![\A:J@TC.@VF,J4_!C%/<C2
-M%^Z!,&QZWA:WQQ#_K5DX'R:T/0^*O7#5>CQ(91^7N:L_O,L?PAEF(-[YRH8?
-MJJT7)OD?=>ENM(>:'G>.^,+/(F&<DQ*[>^+$NZQU-#2!*#,T1CEO>1LVM@DO
-M`:C>CU=L=+433=8CR0/-50#)%T(-$[C.%81V$K=&*5L'`!P!```<`0```@``
-M`$4``1A<NP``0!$``,"H`0'`J`$"`?0!]`$$!^GKQN#QDWVGMK3$HW`%Z(I4
-M+B`D"`````<```#\(0``X)0]E?2F.%]_;%"`*+M;>M8WA)\V.#K<M^:MSP6Q
-MS,!I=$#7K&@V63[*!J5J!?W$'28%4`>L$OCU%$6_(H8_1E1O]J@<F>NM.I,A
-M4I&"IFYNNWP`;(T^X51!PU>8@/>F\M[W;VZ>RB&@-Z'3X<Y?/;:=QL)M$_?+
-M9B2BML+]W\QA:U=E$'P-%I"F36HR&4$3_7[1RI))QL"07G6"3M+J6V;4=2/Y
-MV0%!#=A'=K"5[?-3Q`:EZK76]<@=3G`,$W[GB-IFV(HHE2"K#:S'NM&]]2WY
-M-1=O.07.WC>&WO=V$K=&@GX'`.P```#L`````@```$4``.A<O```0!$``,"H
-M`0'`J`$"`?0!]`#4!KGKQN#QDWVGMK3$HW`%Z(I4+B`D(`````<```#,(0``
-ML*L]MH1^^8)Z>TDIQV)"L4N1"N9^I^?DIGJ65X"?:LZ4TD\^?+.D7](O7F2V
-M]#7'<[H\@J<D1WQ8C$-^YSGS%&BSP.[LH*O_=8\$OP<'NZH45KD2TWBIV:%F
-MBS=BI>Z_16$R&>-9F,8,,B4H6M[8THI':M'G_-VW:(F;:1+F(9M9%'%/":<G
-MI>EHE+.(;)J@\/'W<07,!:JM(OQD\/,LA<SL&YV6V9RNK-/,I_=V$K=&4*4'
-M`(P!``",`0```@```$4``8A<O0``0!$``,"H`0'`J`$"`?0!]`%T!UGKQN#Q
-MDWVGMK3$HW`%Z(I4+B`D"`````@```%L(0`!4#]*^K8$"@QUT21--=/[SZH[
-MU3IM55Q_#?=_TGP-YQ:<&W4BE4R%_,?%I4N:]:XHN>>.[R3LE,N,\Q8P8^+(
-M-NR[2B7@^#V[+SV4SH@XGAA?J*B@W/)[&1?Z_L_<"!UC^(73DTSIU0O?+4EV
-M$8$@=-Q*^8M/0$M?ZX5_$JK1CZ3KL9*C(E<PB0>(;`O&Q-\7<[)!'PNHS8CE
-M98S>:XU)!9X*[L"(B4U%JN<TG2G0)"*A;5^+VH>164@4;9E!TZ.[#)DI83/`
-M19D^PVJ0>?O3FG%?OA*@H`*/UXM?G6W^:]-1.;^>==)G1TO8%+5!1.X$[4G>
-MIH;U&GU',M3Y7P:P84_\%C<V.+GM3Y(4=1)(F87Z2$C988^FSW:*K)4VL7#$
-M<"Y5^VTM>J*%N;TN)A`,=?%ZA/.&E6];HA.'L-@TE`_%[>-._@9!"9A,(\ZR
-M=A*W1M_9!P!<`0``7`$```(```!%``%87+X``$`1``#`J`$!P*@!`@'T`?0!
-M1`<IZ\;@\9-]I[:TQ*-P!>B*5"X@)"`````(```!/"$``2!SZZV-G5/``CX&
-M9%\["^U-X]_BVZ'D;XJ5[9E)N%KD(S+V7]>4[I]U99$P&*F.*EN1DJYDYNE"
-M]UCW`'6X<5K=*5+CQCXN/N\M*?W?PE3V^W=V2P6SI'?O44U\M_$3@\?QA^]*
-M@WM%5BBW.<O4KA;Q#>?/*_V#QI73Y-VBZCUNCLT(4"'\,S%4:YQ?V0N/K^A5
-M<3%6^_P"%&>W$2J-)]LX]!<7RTX@_%??-KP,HG8Q+5%T6<IHP,B[!ND55X\K
-M-_E_'U,!+WOX*+0[$>;LU;A$_<#P=;L\K'E6A+D5T6>PFEU/*3/O>'!D)H-]
-M828:'@L*@R75*104SS17.^!"#SHS6@Y`7[L%?BR2)LD\@#W66="NX4/WH`R7
-MWE08K'82MT;1``@`?````'P````"````10``>%R_``!`$0``P*@!`<"H`0(!
-M]`'T`&0&27GPSTTP":S`P]4L`]=]R70N("4(`````````%PJ``!`Y"(+TM?Q
-MB-Q8/:[\TSGTK48C++@9Y-45WE:'7N5\BGT"YTG*B$WG:GX&N?X'17MN?B'#
-M*6]<_8?[98:H=A*W1G\,"`!L````;`````(```!%``!H7,```$`1``#`J`$!
-MP*@!`@'T`?0`5`8Y>?#/33`)K,##U2P#UWW)="X@)2``````````3````#!`
-M^2?=NDIQA(S#H"5:R1%ZVX>:V/@E=G3>89/#'<*M;K@V*>6"R`?*R\Q_XW82
-MMT90&P@`;````&P````"````10``:%S!``!`$0``P*@!`<"H`0(!]`'T`%0&
-M.7GPSTTP":S`P]4L`]=]R70N("4(`````0```$PJ```PBUMAW9;M^/S:@?1)
-MAY?*3!MD823R>HU<V&0KD0*7P4@)G*S7K?1]>@ZR2'5V$K=&CR@(`&P```!L
-M`````@```$4``&A<P@``0!$``,"H`0'`J`$"`?0!]`!4!CEY\,]-,`FLP,/5
-M+`/7?<ET+B`E(`````$```!,````,*R:NJ#GGFV'7R0QJ*;D]Z#QF2\286[/
-M#$UL$!&5/1+M9FAH/&)BGB:0HYLB=A*W1AXD"0"8`0``F`$```(```!%``&4
-M7,4``$`1``#`J`$!P*@!`@'T`?0!@`=EA;F8JO&+[2\``````````"$@(@@`
-M```````!>"(``'@`]P!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MOJ5_T4?/R%'2E.!)E'EI.P#G@/K<7#\7`JF87@QCY(".ED`D1.%'H#ROVJIR
-M]3)@Q>,8[-*0;Q+XL&AR%$9?>SF;=)_R*\;Y?0G64%GULY]NI7E(/'./-3/R
-M[]@0Y8DJ[PI@_^JO<1]@J-^ZJ_?N;D:"[1L`(PHBDGZSC1<-MD,I```D^L;'
-M*\_TLP)"$X0C?@+I.9]'9(>?S1\5S%G17/JK$VTI```<``!`!*=W?WS%J/S/
-M/.TZ8H3X\W5]<$_8````'```0`5#/`Q[M>*J(.U&.+%)1QPL`G1.OW82MT8W
-M,PD`7````%P````"````10``6%S&``!`$0``P*@!`<"H`0(!]`'T`$0&*86Y
-MF*KQB^TO```````````I("(@`````````#P````@``!`!@````<CN+/%!O^4
-M0WJ\CL-3M5[99>?8B'82MT;S0PD`N`$``+@!```"````10`!M%S'``!`$0``
-MP*@!`<"H`0(!]`'T`:`'A86YF*KQB^TO```````````I("((`````````9@A
-M```@``!`!@````<CN+/%!O^40WJ\CL-3M5[99>?8B"(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``OJ5_T4?/R%'2E.!)E'EI.P#G@/K<
-M7#\7`JF87@QCY(".ED`D1.%'H#ROVJIR]3)@Q>,8[-*0;Q+XL&AR%$9?>SF;
-M=)_R*\;Y?0G64%GULY]NI7E(/'./-3/R[]@0Y8DJ[PI@_^JO<1]@J-^ZJ_?N
-M;D:"[1L`(PHBDGZSC1<-MD,I```D^L;'*\_TLP)"$X0C?@+I.9]'9(>?S1\5
-MS%G17/JK$VTI```<``!`!*=W?WS%J/S//.TZ8H3X\W5]<$_8````'```0`5#
-M/`Q[M>*J(.U&.+%)1QPL`G1.OW82MT:#:@D`4`$``%`!```"````10`!3%S)
-M``!`$0``P*@!`<"H`0(!]`'T`3@''86YF*KQB^TO>-U1\H]?K\TA("(@````
-M`````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"
-M````"`0```(H``"(``(``-T(CJ5P'\CYXZ#\<J2[MB`C&3`O9TW7L9^?I\A4
-MV[6D=F<7^#0*$6K^L,KS([CQ65[++=>:)*U*"NEQ3XTKFT,/D#+68&]2_^DG
-MA]\N5R"#?>T@4)^:=K`</,%C"UW&A\:>22ZH;2$_V;'LH)?GZ3@BA#LWWS=T
-M23Q@2L[:ZJW,*0``)%!@-QLTJUHXDMP+IV+Y*Q9:)$418[YM$I;,!.FI*:$Z
-M*0``'```0`2F%,MH9X@%NV[WT(QDO`J6"F``0````!P``$`%<1F%K_S&W@W/
-M<?/[[<?WH'R]L^%V$K=&.9@)``P!```,`0```@```$4``0A<R@``0!$``,"H
-M`0'`J`$"`?0!]`#T!]F%N9BJ\8OM+WC=4?*/7Z_-+B`C"`````$```#L(P``
-MT`<W((9:)=R_M3-OYRD(+*J<:!Q1PLYC2C$A0%LI4-$5#R@;+XUTW<U:5$KO
-MG%RKDNM>W'U@U\4)0R1(W(/^J:"T=\.*>'Y75)(><5WK]-:5."4$M]9TN2?W
-M9HJ]G\T]_YPEK01GO8H=4X8_/;@"<';Y,X'"E=S1"=$UIE$0C2P;Y,@3Y$*V
-M(;N/XRW242N?;^HF$%ZFXN/4[Y5X#]<+2=H<=L;P0(SZC`/`P_Z,O3`4/OG?
-M^L[LC,>29BRQ+V,F=&?!J2'@JA?W]>`+;G82MT8+L0D`O````+P````"````
-M10``N%S+``!`$0``P*@!`<"H`0(!]`'T`*0&B86YF*KQB^TO>-U1\H]?K\TN
-M(",@`````0```)PD``"`*;XB`%"&RKKU1,3_$3:R;K2!?/DU-62K%1HH2S+1
-MLI9)1:6_;+/MEX[SV)9MF"]_&8O0G+C@T7A%8<V^-9S49H`:LL3A/`:U1&;X
-M^D0+Z.(WQ#J=(5-^QR?!L5V_O?P8-<EB0'N7XAFCZ^RE9H8\`09+4-&7D-`B
-MQUD;-W82MT8FT`D`'`$``!P!```"````10`!&%S,``!`$0``P*@!`<"H`0(!
-M]`'T`00'Z86YF*KQB^TO>-U1\H]?K\TN("0(`````@```/PA``#@S]>ZI"GT
-M?ZAO!3Q?`DZ8[)+UAMK)'5E-WI5_`Q'DIKX:"_E(KD^>HB5.YI67@AI[2301
-M0?9&H>5/Z<E*RB"F>Q1F<I)&)6=;;B//+8:C6+-WJ_WW8:""^UST8B/(XX)O
-M_6])BOXHGX-TZ'*26ZD8U@X]3WHUS'T=RA1&IITDLE<0'!?1JBWKP]W#*'"P
-M<Y&%0_E*3Q*N3NL$)O_$:Q>4&O0K(,;=>)I&$C&,<F_%(0K0&QGK#?R/=$SO
-M%&UXQ8GJ$.:(Y2KN[%=@^I[M-/^*9"T>'S#(3[K$S2?#H782MT8$WPD`_```
-M`/P````"````10``^%S-``!`$0``P*@!`<"H`0(!]`'T`.0&R86YF*KQB^TO
-M>-U1\H]?K\TN("0(`````P```-PA``#`$RH^@@/Y0+U5>]/Y`^=BW0C)DUIQ
-MW(J<D$G=YO+7[.R<A/J?6$\UB0O8HF;*.G&)]-T#.P*EBR;,E@]L1Q+=9"1_
-M.V)=G#WOWJ,=M('U)?'>*K'6:9I2(E4P>.XKSW!K?%@(&YJ\Z^Y1983],\%N
-M!AJ)YNV'V)TGVOQ\J??R\R;J(@VX+R'L6I2G<4>H?,]>RFHM;`-?MOQ[WBGW
-M2E8V68D64?QO%X>][^B7COG-T>7Z<N)F<--N\Y&40HQV$K=&P>4)`&P```!L
-M`````@```$4``&A<S@``0!$``,"H`0'`J`$"`?0!]`!4!CF%N9BJ\8OM+WC=
-M4?*/7Z_-+B`D(`````(```!,*0``,&8*;0::NO]/^T8.'9VI,#U^L[<'G[R:
-M=G?0@>8*(H=3023_TOJ2=+OF`I#-=A*W1@$""@!L````;`````(```!%``!H
-M7,\``$`1``#`J`$!P*@!`@'T`?0`5`8YA;F8JO&+[2]XW5'RCU^OS2X@)"``
-M```#````3"D``#!U9DJTB[0F]8N'L0./_OQKIZ'"@*F8`6`C')F$*DRJ6?=]
-M\4T^)&BN=G*W,G82MT8Y'0H`/`$``#P!```"````10`!.%S0``!`$0``P*@!
-M`<"H`0(!]`'T`20'"86YF*KQB^TO>-U1\H]?K\TN("0(````!````1PA``$`
-MR:6&+?X8'+K/HCHZOX*R=52TS^,0VAQHK=);[)4DG5?VOU+NOI-7&<*)CH--
-MLRS)9LZ:%'1KB_0`@/9U>M/.]U#*G26G2%4QRA8D-RP(<4).\*K`[Y7&[G]$
-MO<&J)&H0Q"@CK)=^@]VLZCI7_1@+><D\\RC$+!?Z([M\:1Y8&D(.(*"72F-`
-M`>[[\?GN^#CU:A6G^G&#,BVG>)"1FZ]XV"[*F.O-)LM+64^21UNX7@H\M#=I
-MB+Y`:,J5?'!U^YT_%.YE0Y24PE"R_.$TQLF7*JST_:483@40R#O2:7*`B#0*
-M'(41AZ$GQ"FN8/Y'SENU785M%TKKHS\\?]-P=A*W1OTH"@`<`0``'`$```(`
-M``!%``$87-$``$`1``#`J`$!P*@!`@'T`?0!!`?IA;F8JO&+[2]XW5'RCU^O
-MS2X@)`@````%````_"$``.!BXO1L1:U8_RMC-W'\O^`8O0C`\]V`0.H69ZL6
-M8$\5;$[\%R8RUC\-IX`@([0_5VWSO!Q_&B-E<FCPUQ"]+3M&U?]/%`OH[(YR
-MBGV%U4(`3Q.RL^.:U6!E#@+Q(U8GDEPQ(]2@VQ@+C"NS33A'^G!@J>/J\I:[
-MR?W]K^$5S#DV(E3C[H%D8WV;OQ)*VN)H<+O3QG#L`+/,C<+.RP.6X+#XGFZK
-M/?<(0TY^MYQ?;_6M[M`3N+0H%6R\1,II2Q/VI.02,&QXN'/2#7O.M492L-/2
-M4B(C1<X%>8*OKKE8=A*W1F$Y"@#L````[`````(```!%``#H7-(``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:YA;F8JO&+[2]XW5'RCU^OS2X@)"`````$````S"$`
-M`+#J].>EN0$54@5P?*M,,P&,VD%#ZB`YV#][S/=;5(;?$)M)PC;-D9L*1)B!
-M%].X"M6EIB&(Q.L%[Y`U@-G2<P`@0]';GZRY(<RK%4*4H^A;D(+9LSZ#-+JP
-M7?-I2?9IPPO#+7_JO<XC]H=<'R/J-0@>X/)R%N]GS?$U\C69@"?OF#<:M7+K
-M4\7R4,)CS/L]-.FDZF9%9RIE^&+941>``N%=B!8O.J'^@`,L/'9_=A*W1G)=
-M"@#L````[`````(```!%``#H7-4``$`1``#`J`$!P*@!`@'T`?0`U`:YA;F8
-MJO&+[2]XW5'RCU^OS2X@)"`````%````S"$``+`%JWWS=-&QMJ?B)_69<F8/
-M$`3D^0W_1,#2R`$=R2P5(.Q`@2X;_&"]@YR<'K&I[;%=<>%1'$5[V)7<)@2M
-M.U>7]"+%RC=MWPPL9H(<ZETL2LZV+IU!K2W"*A?,M:/YP79R$0[.OOJ"_V@W
-MBF4)]GV*,T5:MW8/B-1F(>B7<0$`8$JB*C\^H*+D*J"T%AC3_?`KH#D;7:.`
-MG!ZY1L8`=T9NW"MO\UNKI24?&&ML=A*W1H1["@`\`0``/`$```(```!%``$X
-M7-8``$`1``#`J`$!P*@!`@'T`?0!)`<)A;F8JO&+[2]XW5'RCU^OS2X@)`@`
-M```&```!'"$``0!L+QXQ'$0LE05AK*L(77`8*F/=*5U[6_16ZV<G7T4RINHH
-MQFL*[A[.'3GS^X]4@"!9E+G01=,H'CMOH#;^!F&QQW3^E>'!^?BH%-"8N8_0
-MX_I3[I._MW/PD;6]>WEZA8#+O2ZS8QKO;CIE0B9/Z[,NO5(3Y!KG[:0G+M'X
-MT=8G</MT).+R0&TABF`4J%<HX/7G[$J7DG1GFZCZK`DKIB+=+;;)7Y4UG`#H
-M`UQ\=Y/R;OPGT6.G%-<B<]F/L<-F?,0$@'W3JY>M"AB6NO!0QN1;5>7#!S?*
-M5[KN_FTB\E3_UE5!067.C_OQJC("+JN/JY.O&[&QGO4E;7^5H!AV$K=&KH<*
-M`!P!```<`0```@```$4``1A<UP``0!$``,"H`0'`J`$"`?0!]`$$!^F%N9BJ
-M\8OM+WC=4?*/7Z_-+B`D"`````<```#\(0``X',0UQ/P!7<#D"4"5F?0_\ED
-M/<!=Y9IV''B-*:'K&F&`Q@=$_'U9E=URHQWG^(>_WU6H6(MG\,=81KL+3D-"
-M=;GWZ9S@K#2.@N/%,U*I+*D55%H'!P_+GVB:1DJOG=)P90UP_:/]V#R$UWFS
-MSA-]?U$D*I>)E^<RAD0/`#FG$F+`$?0*JA!O+Y&WGADNQ-_K;_P?&9,:M@FG
-M)RJG.J[I5](!]9W$K$YAX6<VR5?`@V\?>QK$<B!DX>!0CE0O=*>-+.8LHB!X
-M;4<X=$=,]OW!%A46Q-1`X4T2'B$7V#)V$K=&9)<*`.P```#L`````@```$4`
-M`.A<V```0!$``,"H`0'`J`$"`?0!]`#4!KF%N9BJ\8OM+WC=4?*/7Z_-+B`D
-M(`````8```#,(0``L`SIYG9>&0IY8[<]2&&JSG9%XN\AU%Y]BHN]R4W=WT.]
-M6:-T#,L:G7D8+DJ$FZ>.BH>'RHH:#?-Z]\;9]&;&5N95;+M/")!3)[BR)9>A
-M36EXW`K),1$8/8MT[VB7:_RE?QCK6*^?4+R;1[,U3;W>V#'09):CCJ>CZ'5*
-M2%W5A3_EL!SV9A0FEGU+K9X/1IBK)S2#A0%K3%F[:'AD:I31/X]'LHCU.KFE
-MUQ$.#4)V$K=&[;D*`.P```#L`````@```$4``.A<V0``0!$``,"H`0'`J`$"
-M`?0!]`#4!KF%N9BJ\8OM+WC=4?*/7Z_-+B`D(`````<```#,(0``L%4G1P!;
-M]%IX75]AY3P@T?%D`O?&%<NK[<CYXR$C`MJQL=10\<_DPK9*<IU[ON4M)N32
-M'8:B!*9\@U3MOJ.E@T19PY:'-,<JB(44"O`1_KN3\W96TB)8E)C`.M\0S*7#
-MUB]KK.P'[0#76D!AK4$D#K.20D<35IH7)D4CW%T'<$LM?YL[0)CRI_%[`I_\
-M*>D44=42W;57]C>49W99R+Z[%Y;7*S`-0O\7I^D>NT!V$K=&Y>`*`(P!``",
-M`0```@```$4``8A<VP``0!$``,"H`0'`J`$"`?0!]`%T!UF%N9BJ\8OM+WC=
-M4?*/7Z_-+B`D"`````@```%L(0`!4&+2)9E<Z!$WOGW)]=E9E)C1XAM9[;LY
-MBL7TY-BYI494WC_.Q>2[O(E;P0`U*VQ?-<I'Q'([I@>,_>@0)@9ITG%[(.F_
-MR9O&T==VG))R(5?,J#I"S(;S"Z&D[OV[8*=TE67B,2..G9'(?U\SHL(!^6`4
-M3H.XK.;)RHHRJUS?XM>9"&V+UX(:(AWF.(P4"81>F7U=CZL!L_/VUGVC&D=:
-MT5-42/F>$'W:)4?@&?VH?8O6DN;F[::(AJAZL`*=-^06E#8!<,9)0I/9P!).
-MX<10H,FC;L5R8.%,.&X*SC3L(]R]__7>I\H^7V"FO,PN?H1>).5[;%HY<,>D
-M$ZU1N476G7JQ1L\SMJ'16]J]-]63RP2AUB_D]N0^*^Q4]3U9'J_I.-Z@A_?7
-MXIVH/R-!J[NJ"S/:!K<-%"M]K64],/AN\J=4*RK]SA1JJ022@B"?=A*W1G`6
-M"P!<`0``7`$```(```!%``%87-P``$`1``#`J`$!P*@!`@'T`?0!1`<IA;F8
-MJO&+[2]XW5'RCU^OS2X@)"`````(```!/"$``2!X047&'^Y7IL<9<\L.6]^5
-M%3K]7$T&5>Z44.[30;,$\WE*,K(#&ZB9Y?$?[R4-Z/'RL::6KQ,X]Q:=U'\U
-M)YH2'$Z+_;!\YI/VVB.%=8S9!_Z9LW`++#[Q?^,1VRT1%/TYDP2IIYQM7%EU
-M[*,D%:I@J]G'/J_<A5G6EN>*!%`B'.PWUS1:1,O*HD4ZZ-6DI>>#TJ[&OHRT
-MO;+.-(K*\03N@CLC6SVPDMLS?"OG`42DJ"R!5+&.=:1RN;S64*/F?USR$CG\
-M)Y0ZRZ1&!>03'D3"`Z]V[-,82`!=J^L7D@PH7#)F>-Q&Q`AH"7JU[[L*G8W7
-MW[*O[B#OL0UXEHCR0C"[EH$#L222-$N>;U$RNU%)E@Q^$K"XW>[.PO]D)782
-MMT8V/@L`?````'P````"````10``>%S=``!`$0``P*@!`<"H`0(!]`'T`&0&
-M26G;1+=L]E@A#)'VVF2M9K@N("4(`````````%PJ``!`G*:%*V*9/641/34Q
-MN#-R^X$CCP#Y<3[OM3J/$FH%2TB/+?!FIY^@(.8JI1@\`').8)@P:^4"9>^S
-M)E.[=A*W1M))"P!L````;`````(```!%``!H7-X``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y:=M$MVSV6"$,D?;:9*UFN"X@)2``````````3````#"6@+EW+,28
-MF,;ET;^E_MOU>,F,N-%.[(26>8'0I8X$\T)OEQ@>A/E?66*-V'82MT8^60L`
-M;````&P````"````10``:%S?``!`$0``P*@!`<"H`0(!]`'T`%0&.6G;1+=L
-M]E@A#)'VVF2M9K@N("4(`````0```$PJ```PQL`'>[N&21114.'F6(E)P6X+
-M<,JA`DS^%[D[8I#YNDH1.+KJW:X8]-'H/&1V$K=&EV8+`&P```!L`````@``
-M`$4``&A<X```0!$``,"H`0'`J`$"`?0!]`!4!CEIVT2W;/98(0R1]MIDK6:X
-M+B`E(`````$```!,````,(S_JFA7<=@I'(+F+GWMKLEE:B\:G5?9UJ!S7/=<
-MW%?KD[1BT$!W$8JRZ>.$=A*W1A%C#`"8`0``F`$```(```!%``&47.,``$`1
-M``#`J`$!P*@!`@'T`?0!@`=E\BUZ=L4A;B4``````````"$@(@@````````!
-M>"(``'@`^`!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``G3ZS5?P[
-M'MV\P_@^<\L.GHDVQ^<Y6/N08D,6R/,%":S&'Z%]\6IL@E<*1<09$9S.C)N;
-M:))Y'@TXB=H,03?+#LKH>`8$>R;GAQSKOI7,5@F-ZN^DT>".+',4Q?)6(AT5
-MOJOQ[(UF>9?YI?/>T4W]#'3:,VP1:)/M!NL1DP6'==0I```D7Q=3A^I#N#52
-MKA'C=M9'G'".;5618H0*BLJ>;3@V1I0I```<``!`!$LE24;</E1`=*N74#(Z
-M4I>!&T%#````'```0`7VTOGF!5>C[6TH*X/M:H[HK6(-S'82MT8(<@P`7```
-M`%P````"````10``6%SD``!`$0``P*@!`<"H`0(!]`'T`$0&*?(M>G;%(6XE
-M```````````I("(@`````````#P````@``!`!@````>L=_@0,JL]E\,4(]++
-MZVMLX7XDX'82MT8B@@P`N`$``+@!```"````10`!M%SE``!`$0``P*@!`<"H
-M`0(!]`'T`:`'A?(M>G;%(6XE```````````I("((`````````9@A```@``!`
-M!@````>L=_@0,JL]E\,4(]++ZVMLX7XDX"(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``G3ZS5?P['MV\P_@^<\L.GHDVQ^<Y6/N08D,6
-MR/,%":S&'Z%]\6IL@E<*1<09$9S.C)N;:))Y'@TXB=H,03?+#LKH>`8$>R;G
-MAQSKOI7,5@F-ZN^DT>".+',4Q?)6(AT5OJOQ[(UF>9?YI?/>T4W]#'3:,VP1
-M:)/M!NL1DP6'==0I```D7Q=3A^I#N#52KA'C=M9'G'".;5618H0*BLJ>;3@V
-M1I0I```<``!`!$LE24;</E1`=*N74#(Z4I>!&T%#````'```0`7VTOGF!5>C
-M[6TH*X/M:H[HK6(-S'82MT9"I@P`4`$``%`!```"````10`!3%SF``!`$0``
-MP*@!`<"H`0(!]`'T`3@''?(M>G;%(6XE4YKR#=O,4R8A("(@`````````3`B
-M```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0`
-M``(H``"(``(``%=K'D83[2/.JA#7D<%J5^8+&X_.9F2MFCTRJA!IH;A%;++3
-M`8A%-@&?YK%32Q#>2AEHL3?0]'6@WA%9T@1$3`'MF%(-%OT.)5MS.P95U&18
-MOXP\`B,DJ[;`'364SMBS17I8/5;GL[+Q;[#`RE.68Q:4+ZGKA>^6L?'^IJ8Y
-M.G-C*0``)(>87B[RT2=:#%GAU#@X/F]K)]]DH<JP=U&_'V0YT13"*0``'```
-M0`2KMZPD[*$+?TPY;K&(57)/R2Q0R0```!P``$`%5BBE\3E3CD]L`#M"$9#E
-ML07'Y39V$K=&OM,,``P!```,`0```@```$4``0A<YP``0!$``,"H`0'`J`$"
-M`?0!]`#T!]GR+7IVQ2%N)5.:\@W;S%,F+B`C"`````$```#L(P``T'POL_'1
-M_A&)!((G/H/F_@C1O*$#M-HL7P,Z"R-R^G#PW):5UVDRSS>PD"I7$<@8Y<4O
-M]M4&CYO0M!2$6B!$)KN.P6*J<6GGHV7.NKA">+E7YTY;^%CZV;'_Y\2X1W*]
-MF*$C(`%L;/5L!7*=Y;XI;@3\(N+4>(O5CQV\@IN9?$31SN+FJ!:VF!X4%T3T
-M])W9HG6/KVQ5`S(:C\U?DW2B+YJS"T5$P\<G>$M5JJ_P2F&/&A;[5T$2B&+9
-M5!Z.USJO2$&VGR9$)_T,<<:K^782MT87[PP`O````+P````"````10``N%SI
-M``!`$0``P*@!`<"H`0(!]`'T`*0&B?(M>G;%(6XE4YKR#=O,4R8N(",@````
-M`0```)PD``"`A4GOZ/F#41ULVBQ\%'!<\HUVT);/VVG'BH]`FHNRT8"JY[6H
-MF_\Z6^D_'7[$8$`7GRUM*5:@\;2<ANSS'!68!&,<F.Q5D'/J@$%Z7O=<`K9.
-M+Z\;7GJY/%>JY<.%O*>4>22\73D7\L7E15*OR#C1&+_E*(?EFA#]-!']E782
-MMT9L#@T`'`$``!P!```"````10`!&%SJ``!`$0``P*@!`<"H`0(!]`'T`00'
-MZ?(M>G;%(6XE4YKR#=O,4R8N("0(`````@```/PA``#@R^U<U:XZ33*NGYSV
-MCX`=B.A9=-[/\:SILT,KD.AS5!R5C]G@JM$.-<7U.49QXVH-BHE;FWGCKO8=
-MYM;"0"*<-(^LP]3-@=U>;SHZL*T;T;+AI^B-FN""TFFK:!XR]Y_T4@UM^&(K
-M('9V1?`Y[E$IGG@(0Z426/KUOQ7F,OZ-33S#`#`I8JD$*7*=4!+Y/W%*G=@6
-ML-"F)5=$6CY[^]=:%P]:<N#ZU1WI?JR(4DPTMH63G>809_RE<?RB\83H*E53
-M'_VFQZSMX!59YLB!NUT_5O'"PI$?64$BX?0KS782MT9_&0T`_````/P````"
-M````10``^%SK``!`$0``P*@!`<"H`0(!]`'T`.0&R?(M>G;%(6XE4YKR#=O,
-M4R8N("0(`````P```-PA``#`6Y6[&O^2$"F:[70LE'LICBK+@<<W]MJC_8JO
-MU`&K`MTD:Z'Y!\20,J-)[#L\V[(@9?A-=W+J$8#/[/UK%G@,^>68W/SMWTFP
-M?DZJ,'\)LST6`8)W3J=;^0#E)Z3R$%CSBZ/%W:FJ'.'@:BPE3GD=36)%K^2I
-M"`5QN90ZGRDHI-"&!X@[(22#1NU#VON1=Z]V)-6<(M,?0T"+1\G^N]O4IK#-
-MV17@/K7Y<^"'9/_3=D%'D00CS;<KK#0=IQEV$K=&.20-`&P```!L`````@``
-M`$4``&A<[```0!$``,"H`0'`J`$"`?0!]`!4!CGR+7IVQ2%N)5.:\@W;S%,F
-M+B`D(`````(```!,*0``,"R%1D1U:^B!$^Z-KD1F^6V>,YXJ(^;620P(U3XF
-M=KZ:#'^AZLDLH966`/7Y=A*W1E=`#0!L````;`````(```!%``!H7.T``$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y\BUZ=L4A;B53FO(-V\Q3)BX@)"`````#````
-M3"D``#"[?<]M>[>?)]]:=9+MF'K,;E[IW9JV_[2\OXYNJ5[HJ'I<3"$P)G#:
-MX[D25'82MT846PT`/`$``#P!```"````10`!.%SN``!`$0``P*@!`<"H`0(!
-M]`'T`20'"?(M>G;%(6XE4YKR#=O,4R8N("0(````!````1PA``$`1=+GQ&,=
-MLI)DFL6?#<JE#M$FZ=N:H5/I1V!`5@U"1QJTYM#A*].`G#!/?59R._S*-R<V
-M1.)4QG-K8^]O.5C!Y:^][4%+^(>&QPR9N1TUS3_[L2O0X=E2:\KRR,W9HVN7
-M(^]//CBBI'T<-1@<WGDQB]'H.KX_<GH[4\DP6FI:2TJ42HY$K3G3&Y'&4Y5+
-MIA8#P3G!1\9#*86LP&,R<$LS":#6ZS%4#5R8>:?+'@:7A3>8;P^_/.X;[\0`
-MV(NO#%C*5Z;%AE60PYX30I6[7D8>YE`R\Z/94:7R@GAM1Y'@IL2C)?F-!'@F
-M&UV`I%^<C-X`VL%N8XN?D*I]N6,Z=A*W1@MG#0`<`0``'`$```(```!%``$8
-M7.\``$`1``#`J`$!P*@!`@'T`?0!!`?I\BUZ=L4A;B53FO(-V\Q3)BX@)`@`
-M```%````_"$``.#U;0OUL%M+H5+`WIO+%#U2DT#`@(#61"TVY1'6>=H2_F0K
-M;=4_?P0]F]2+LA?@@$,'O-E>+I.D"_.>S%6?::>>%3FB!@.Y?4H7^KZ"3.JI
-MJDB0_1C7['MA$?+,XV"`%#3X+H\:F,ZM&HYV/HM)2%@4%_&:;F3F6Y3@QB*D
-MA[_4R=+,GDTB+JRR\>C0A$&8(%XR5+8R9.'WZKI4O2OZ80D630J@8V&'-9Z4
-MA+Q9`56%V$<R58`@99$[9#%8+K&F.&,+0G&2-=?([,290G'EI*?F_NM.=`;R
-M%D.5.2!K=A*W1M-V#0#L````[`````(```!%``#H7/```$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y\BUZ=L4A;B53FO(-V\Q3)BX@)"`````$````S"$``+"3*']=
-M8I*R@Z45&36Y;UU((B+F)YT`L6@D]=:4AHGD*DLBB"U0#9;L[-8LW-9@HX7B
-MYL"2AGB"X3I<@%NN'C"(G>GQ_M"E"NR^7)\ZF!'HF@!N-_XS3^*%BG[DH]48
-M0TZ0-3!",F*ZYM3@/I>CM0SG^J[[TJ"*G^BE#M2L==>HF4M88RVEI/=J%-J5
-MESE$T,51`5D9D2/U?&EM[/,J,Q)#&'C7-3KOQ6!0;63P=A*W1@N:#0#L````
-M[`````(```!%``#H7/$``$`1``#`J`$!P*@!`@'T`?0`U`:Y\BUZ=L4A;B53
-MFO(-V\Q3)BX@)"`````%````S"$``+`^S/7W"91='=#^&9/;0B[8F0Z&*EO@
-MS,:#*/BM\7T$X#^<603,=,_,$=8]%+XU!2[*:X.Y@[3-0A![\WZ59/@I,^@"
-M7*\>W);!;9\2TYZ/&*NGVQ.6*W1GSKCY=?0TUGJ'CZ00I5$G(R+C.TFN5A9E
-M5=B#GB?=FFWO+H9SJ75,K-Q%\ANEJ=HK>V"^X?G@0/8>ERF@6L/_$5;U<YP9
-M-#GAWS*."D=G-*5ILHEU=A*W1F2W#0`\`0``/`$```(```!%``$X7/(``$`1
-M``#`J`$!P*@!`@'T`?0!)`<)\BUZ=L4A;B53FO(-V\Q3)BX@)`@````&```!
-M'"$``0"(@>D_F%54+2=\N8P/`CK)H>CV$^>FN)SEI:HHEUJJQ2/S^[VNT,BF
-MD:,`YX_*(2GLJ`0?"=3Y*=_->C&Y/8429U$:GVCKDF(*O!;8!*D$N3\W59`'
-M?52!?UE35NI,0QC?(WY20/.?1K\71TQB`3'7&MT,D:()/FYP7=)ZN*5>*^.X
-M``O%4U\'":H&1>RE?7@@B"ZWGY:PT12)(!)A*H'3EPO'4$_?K:<;[;H#"@#J
-M=,N06?Y(L?"$\.4:;_9CL8GE/R8HW('R-+.$1>TJ4'UR/(9L^V%](<-,#U@%
-ML8@)[V+`C#>J7+$?++:5)S('()E79"6$F%84M;6P95-V$K=&>\,-`!P!```<
-M`0```@```$4``1A<\P``0!$``,"H`0'`J`$"`?0!]`$$!^GR+7IVQ2%N)5.:
-M\@W;S%,F+B`D"`````<```#\(0``X%J"(D>R_WFI?YIRYVCA/&/KJ'$_KO>&
-MW)`$(%FY>(3QX]_,)<9$W+^@64A0.UQ$SNK=5;+8#LM(D4DC+8>#XC8[Y+@S
-M:H7*#.5'JA^9QZO6N@0YAP[P[F0B,I)I0.*D1[561&7"=*$`"0/+L[38`@H'
-MD8#N#J2QP*QP'6BX>5!NW0![*Z9V""DRHS'%<,_WW]H$J(6V?BJ)S_C-7N?:
-M;BYN-850IR:T(Q!_E!"O,M0)6I3;\",[?XWM-JC@-FG'F$3E[\];7G?8V/>/
-M@:18?:YPD'R*6(R]D[IEAWYV$K=&WM(-`.P```#L`````@```$4``.A<]```
-M0!$``,"H`0'`J`$"`?0!]`#4!KGR+7IVQ2%N)5.:\@W;S%,F+B`D(`````8`
-M``#,(0``L`#[_`VYXXDH%*#..2;+*Z]7K\U=2UNSC//^-HNJ;?5QL$3;8C8M
-M"T%-AU<^4G5D_N5#<=$=71CU@J)X0`P(6RMGUY^1NG?#F]6VS^$=])A.A\_=
-MWX-1Z?ES1E3S:Y-!L2T'FU(QU![6U[>7X!4"2.F+7G5!$PMD[4+O#.!]_?RK
-MY!W"N'O9:+#1V\QJ!<PL@7@!RCLL%9O)B\ZI60JZUN/Q'`FKX"L_$Q>P&MUV
-M$K=&Z/0-`.P```#L`````@```$4``.A<]0``0!$``,"H`0'`J`$"`?0!]`#4
-M!KGR+7IVQ2%N)5.:\@W;S%,F+B`D(`````<```#,(0``L-8>&OUTD01,YDEP
-M<:_)';^OYADY6Q>@CZD=5EO^"A5I]*PWT7NM.FO`G'9U+-_L)FON>C(AZ^VG
-M7;)UP&6^5621V8OGG()Z=/GI`37==%J/V<B:+^I!4\2-G.BO<06WSAUA?@#`
-ML=Y7R?OD6"_HL]6EM>NOW(6/N!,,73<"):3'0OOLA^4,\;Z;>0(J3>5;+O"W
-MJMO.!>3J)OQF<X\-A"QI/$':05>>I\Y5JKAV$K=&IQL.`(P!``",`0```@``
-M`$4``8A<]@``0!$``,"H`0'`J`$"`?0!]`%T!UGR+7IVQ2%N)5.:\@W;S%,F
-M+B`D"`````@```%L(0`!4.A1-W13(5GTV[O3'Z1^@;9*#BZB[7Z4-_+`2@8C
-MNVS\+R^Z@R"$,FT_T/EGFFQ""@BER5&<O=?,@:R%7HOT]Y-CEMPE35O-&38J
-M8>JP@,N7W=AUMZ^+UL2`$2HBP4K/T!SMG'2K&;>*N`E54=PTY0N994*(ZQ.;
-M.)*M$/#JY4>AD1H#.M//M\8??M`&#=$B_Z&14J'W]'$[CW2GK$BL0\'"%/'&
-M?.+JFQ.0A0=0.?7QP3J2M_Y7WO@EH/9X[+VDII]R:Z=!)]/HU9HXL30RM&[,
-M&J$`H>_ET5(,*[;]I5P(52OXD1U?8[BQ=OFP`N:5C,C%<6%ET/8'@6>?\0N<
-M;:S#GL:`=.M9-.,V\R^N$'0IIU@Q\W0GPS]Q*MDA$!K\QH9L\VDM5%JF]H7:
-MT82CTI"@V$&S-T0"A1"@%*_1+!//*ELRZG)YL(7EHTW,=A*W1DM1#@!<`0``
-M7`$```(```!%``%87/<``$`1``#`J`$!P*@!`@'T`?0!1`<I\BUZ=L4A;B53
-MFO(-V\Q3)BX@)"`````(```!/"$``2#=XCQ`+@U;Q^E6T%M[,8HR$>X"X]8V
-MVBBH1G-HF@\X&04R]M,2G$V.;/LH;>5M85>#<4MR[]VKE<Z,#.!&;OJ+T<Y)
-M\E3K'?B'IYEF0][X!4F[U]+I*=&C^U\#71VO+?9&$E&:Q:"PW3[1700%GPA3
-M],*/1>+[-W,)*8%=//_K[J]R&W4<PT);>Y;6YQRN]ERNU8PP2GCYSI_/2GXJ
-M:.4'G4R@V%31=]HJH,L[JWGBF2/-7+1^5G*9U6A&$TTDM^K+BU)1?N;BM;_C
-MA^A<;O)L>XJME*AER%<WV='IH:#TC&XV?4:7QZHID02J@_^_K@=Z(/.%Q^$;
-MI_1<G;0RZ`?N\]YH/_ZTT\FCN.<4;D!X&<:M:VW9&?=]S$:Z('82MT9`?@X`
-M?````'P````"````10``>%SX``!`$0``P*@!`<"H`0(!]`'T`&0&2?F%'BB6
-MA?-H%M=N2"$&C(\N("4(`````````%PJ``!`EE*3A#V(<:J+]>R"5;KXK4DZ
-MIQ_2'^T,Y!.KI>@"7\&QKRH,6)\-1X1-)QK$DUT-K>SP!"M!FSM?8HR>=A*W
-M1LJ)#@!L````;`````(```!%``!H7/D``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-M^84>*):%\V@6UVY((0:,CRX@)2``````````3````#"'^ZT*K)VS$:GL:V1`
-MCBIN7<&H-=W^F\J300,/ZB5>L-L.+C]@3<+US2?R_G82MT:-F`X`;````&P`
-M```"````10``:%SZ``!`$0``P*@!`<"H`0(!]`'T`%0&.?F%'BB6A?-H%M=N
-M2"$&C(\N("4(`````0```$PJ```PO*QG=&/R*HD][=SFTE7I`##/^>,78XJ^
-M.._EK(;OT6'^-G;?U_QKN%3`WZEV$K=&-Z8.`&P```!L`````@```$4``&A<
-M^P``0!$``,"H`0'`J`$"`?0!]`!4!CGYA1XHEH7S:!;7;D@A!HR/+B`E(```
-M``$```!,````,(B@[OSW#2R\9&J7'@><OQV9L=CLB$N5J4VO.FW'(@=8"IE;
-MQ?,5B:JI*QC2=Q*W1J]@``"8`0``F`$```(```!%``&47/P``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E!'D+]1F"R7L``````````"$@(@@````````!>"(``'@`
-M^0!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``*9+[T>>[X[YN]@C/
-M)1/)\S"K%!0<F/C;Y_N3.V+PN+*_DLZ)G@AATM6U.X?H-1L4_0>K!^+*]*;#
-M3BTW!"5W]A\_WWM>)K2`"G3ZIESW>XN>O@A])$C[XIN37]T@-^^Y\:84CQXT
-M;'963R)V.D9HY.A4`HD?1>I(=#NB\GC\$<@I```D67FEVB6.]R)&#+'=_7+9
-MA%77MA4$`2]*Y[$$M..-1TLI```<``!`!/_=NL`(3NE=14\\&T*ZQ.6GT\.Z
-M````'```0`5[&3'<X8L7T0J9X<5G!I)9>WG''G<2MT9-;P``7````%P````"
-M````10``6%S]``!`$0``P*@!`<"H`0(!]`'T`$0&*01Y"_49@LE[````````
-M```I("(@`````````#P````@``!`!@````<#,.(A_,29A':AUQ6>F&F"+-_R
-M;'<2MT;7?@``N`$``+@!```"````10`!M%S^``!`$0``P*@!`<"H`0(!]`'T
-M`:`'A01Y"_49@LE[```````````I("((`````````9@A```@``!`!@````<#
-M,.(A_,29A':AUQ6>F&F"+-_R;"(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``*9+[T>>[X[YN]@C/)1/)\S"K%!0<F/C;Y_N3.V+PN+*_
-MDLZ)G@AATM6U.X?H-1L4_0>K!^+*]*;#3BTW!"5W]A\_WWM>)K2`"G3ZIESW
-M>XN>O@A])$C[XIN37]T@-^^Y\:84CQXT;'963R)V.D9HY.A4`HD?1>I(=#NB
-M\GC\$<@I```D67FEVB6.]R)&#+'=_7+9A%77MA4$`2]*Y[$$M..-1TLI```<
-M``!`!/_=NL`(3NE=14\\&T*ZQ.6GT\.Z````'```0`5[&3'<X8L7T0J9X<5G
-M!I)9>WG''G<2MT;$HP``4`$``%`!```"````10`!3%T!``!`$0``P*@!`<"H
-M`0(!]`'T`3@''01Y"_49@LE[+/KZ3]37H!@A("(@`````````3`B```P````
-M+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(
-M``(``&[L8YA[<U<"*ULO7NMAX%#U'\MC.9UKN(,-^6K^_.<#S]LP-.+-1\0W
-MM=2B'ZS2$)('+V@5A[\W\>7:+GC^OPB"@00*(R\+W\?V?(A3OEB%!!/5KACO
-M01#Y.Y854"9%,VC/LF=?CT-A@6+0#-A,$>;9"T;<?I4K6%<:45>%T/_E*0``
-M)(>^K/:C0$VT9IY"\S9L32?CTS"D2(M/^K=W?WF!Z'%:*0``'```0`3;LR9^
-ME>-\+I@BAJ,DF&S[-_E4[@```!P``$`%WX!9Y.$X/GHH1/!M93(-R3N*3KMW
-M$K=&:=$```P!```,`0```@```$4``0A=`@``0!$``,"H`0'`J`$"`?0!]`#T
-M!]D$>0OU&8+)>RSZ^D_4UZ`8+B`C"`````$```#L(P``T)W8SS@\(2#ZH^D0
-MQ@6B[\G=S+!W88*MP5%W!W)OUP2HL5'Y?MTD^#84G3ZN%H#E5`%F+5/G%\A%
-M2%[)T'L61AKG#"R%V5N1$V&Y)B)%P\@YIQ5=.MMVA8./C`;D"53DC1ECG22E
-M,Q<]P2\?TLS'>:R)GZ^MIJ-.MT((HA8ET@/C,F5"KC1"#''/L(T31F?3935I
-MBXI_"V4L-(-TX]O(JNWW]US4?@$76/W>;.A+-9`M<D@)?G@ICW=01;R-^N-6
-MEV68QZOR:DL`MFU,BG<2MT:AZP``O````+P````"````10``N%T#``!`$0``
-MP*@!`<"H`0(!]`'T`*0&B01Y"_49@LE[+/KZ3]37H!@N(",@`````0```)PD
-M``"`#&1>7GZX<8F"SE^0)67GWMMY$'^=Q-37AXV-30-BHX_I.!TR&0$E(;-@
-M':)K$['G@S)G4LNK'JRW:EQS1M8@D*:#6PT/+C(KYGE^!I%4Z/2F!^D3Z0`^
-MLY:-/<*]^L`=>G#DJQCAU5D6$$(B^R&'.O(-5@'#I?NHW.N4G'<2MT90"@$`
-M'`$``!P!```"````10`!&%T$``!`$0``P*@!`<"H`0(!]`'T`00'Z01Y"_49
-M@LE[+/KZ3]37H!@N("0(`````@```/PA``#@?0$O]LVF\>$$B5&\'\<]^SPK
-M@@5;=%N=/NK9"+B9NTA]:4OUN50'>3YR[<)_L7NF)_E_CS36CG:OX;Q!SP\N
-MU<''VM%O`#38C*KYP.H)B=1H0":&$23G_PG7"*4?2H9]T`")])VE#N!X-[_(
-M(SF=@5)&_F'1>^TDG<$`<WA6!0?DWI.5-Z,H\(30K%6;;B8EO[42H=`(_SZF
-M,/`X-(FC?X\N)RK,IG>#Z?^KU<CACQ7@QN,P_:E(5\3R#^!S;3UO)>^>]SN,
-M?>XJP&CXXX2QGA[YQA)]-3FGB17YY7<2MT84%@$`_````/P````"````10``
-M^%T%``!`$0``P*@!`<"H`0(!]`'T`.0&R01Y"_49@LE[+/KZ3]37H!@N("0(
-M`````P```-PA``#`U=S!J^FPK>2"KZ`NBK^&[.E1^='+@QKCA5<@W@>H6CY.
-MB55OTB-%WF=H8_8"XDJ-T1_9OH&'9(/:Y53$JF311M+`CQYS&T`&@#C_6GEX
-M-"LM=+>,,-00WAGEP1\T\>10YF]A&F<1+\MMM)&;CV)4G4QJL)K>N,TF>0X/
-MKA$):V(X)$L:%(@>-_@;Z_F%$+:8=A%D=;-?;,40MCG\Q'A(^E6-6B!4CX5K
-MM0,C+SW=(/-\6HI:G.@5LQ4%KO]W$K=&/2$!`&P```!L`````@```$4``&A=
-M!@``0!$``,"H`0'`J`$"`?0!]`!4!CD$>0OU&8+)>RSZ^D_4UZ`8+B`D(```
-M``(```!,*0``,/H-CQ7$4JR+(5UP2B_M1[X6I1)+I78")VJ;:A`)1KDT>@KL
-MC!"MQJ#F]^QH=Q*W1IX\`0!L````;`````(```!%``!H70<``$`1``#`J`$!
-MP*@!`@'T`?0`5`8Y!'D+]1F"R7LL^OI/U->@&"X@)"`````#````3"D``#"L
-MM-!X5ZFJ>]1!TZ5M1A@S?=SG'%_6(IE*8+=F9SJG:@.^YMMM`_UW'<@V-W<2
-MMT915P$`/`$``#P!```"````10`!.%T(``!`$0``P*@!`<"H`0(!]`'T`20'
-M"01Y"_49@LE[+/KZ3]37H!@N("0(````!````1PA``$`+(X4,E?!XJ+N)4GK
-MG"FFW_!Z'K'`G^Y1%C2L+/&"=4A)QLP)\/'8S9\#-M\C'6JGV&H00>FR261V
-MMZ*L5I?^V;;4;38879BZ6G,X"O[^(@P#8_9R+>>NIO1[Q5L3LTUKJ]V#ASO6
-M+FHO.S-84RWJGE3`1>'X=,E`OAJ4"LTWV[OC)LXZNK1]-3'$UP,%@?<%D<HR
-ML#11:OV#)WT@NZ%Y(Z`Y`QU:@D@-*[<49^DP*^H80M[FM$YUY/7/$JZ81"/F
-M]I_'('^.#Y>+(MA/N)4^UM&3?XUGTD;N6\1M2=*Y'_:H1V>KE2WM\#W?/FQB
-M.-LAR%<!0W-UZ_'1T'@2=Q*W1H-C`0`<`0``'`$```(```!%``$870D``$`1
-M``#`J`$!P*@!`@'T`?0!!`?I!'D+]1F"R7LL^OI/U->@&"X@)`@````%````
-M_"$``.!TZSWDC<"DONOSNJF&+3:MQ1X$#[$=?!;0*:Y-QE-#!6+*LR_XW@R3
-M)5(5]JE:G[_3-?2`J<(I7^B=>:WCKV`O/!A,H0GNM(0H+5,P9_T4/!4O,CTL
-M5Y(L-8@OY(4Y<@=FK(0]_T881I"^+HCC-[66.76KT^7(Z.;RH)UO)?/*%FI>
-M04N<LZ%E)X^NEB9U`LZ!8P$@SL)"8Q*-(+15GJTEW.X:SMR3&65):D)5A^W2
-MI=OG(G^JGJVB9B$`[VH)S&A)^W-.^`A$_?0(X<YEO8/X@2(G%EZ2P-72LKF:
-M=Q*W1BAS`0#L````[`````(```!%``#H70H``$`1``#`J`$!P*@!`@'T`?0`
-MU`:Y!'D+]1F"R7LL^OI/U->@&"X@)"`````$````S"$``+!J2X,7ZNNC3J2G
-M/-?L]U8+M/>8,`9O-*2G2$=4JH%2!V3F6WAW@C-QEH/E>>[GMZ^I14\(_:I)
-MO:C7H;%SJ)36F5`02_N9<^U[%>3PK79QV(;VC"P=-8D^J\(<JHQAWY0#D9LC
-M]W`_,4NK!R7F/44%E2&&'\R4'"5K.;&RC0[0O,?+,`,G=&)]BRRFW8BL@^I$
-M'L*M2PG10`=2K`^J\7L/H^H2KNE/R1`1NZ/B=Q*W1G>5`0#L````[`````(`
-M``!%``#H70L``$`1``#`J`$!P*@!`@'T`?0`U`:Y!'D+]1F"R7LL^OI/U->@
-M&"X@)"`````%````S"$``+#^:<JX,J>1C!^68T["SW*\E+WRA8O*?Q!4TQ1D
-M+3\/]%9.Y.WI'"ZDM.%P'E,[-OT>0,.^0KK>?S,MXS2+G?*("XP\I!V(K/)_
-M6N.M.[-E]$+,X3>G(GR#[X=(&<)8<YT2,CVU"KH,FMWJ$<>?`518[^`4`.&Z
-ME'J^:"7]R!Q,+HGBK?2<QBX->%+U"CSQ@3=V!<];875NDDJ8D>$T!$4GNXJ^
-M,8RZ=]1[L$\F=Q*W1C&S`0`\`0``/`$```(```!%``$X70P``$`1``#`J`$!
-MP*@!`@'T`?0!)`<)!'D+]1F"R7LL^OI/U->@&"X@)`@````&```!'"$``0!1
-MRLL-+%=(`D_LQH<PO1EN6F>(</I*RB<5C[JA$2Y:83+"K+#B:%T-HY43N+08
-MRO72X$HAFZ\NDRD/D?%44B:5!E4TB67L\]2W962?-!4*-MO-6JJV1ZDJ%ZGP
-MG*'!1::\7A`CC5*5)$UY4^%3D;!TGL0WC*P`8?5QW,TY=JIR+%#@7Z+][K6$
-MW1[)9-U7-H^YQ]^9HG'<F4T/3F@D)6,SXJ!_;G$OSCE2X7^N7M[102Z-#2T2
-MU%OC@9(NYBP#H5FJM,4'*:*4^AKC6RSG<-ZM'U6/@J:<<!*GOY@:8&*!HC\%
-M>@1MT^@>[*$<5+7L_QPV8URN]7W-X27!R@UW$K=&Q+X!`!P!```<`0```@``
-M`$4``1A=#0``0!$``,"H`0'`J`$"`?0!]`$$!^D$>0OU&8+)>RSZ^D_4UZ`8
-M+B`D"`````<```#\(0``X`2D01`'TPIKGD+H9L2:F83_QOQ#A-'QH!YC)W_D
-M/Z%P*.-F+,(6>%^?_BG27`<BQB69P();,!W!M!\)V3`-%-V\QL&*[,Z6+[AV
-MN]L/%H*N`T"0YWW]MB00@,`5I3-1"2"F-=YJX*R,4M[`Z001;0,$N18Q=\D[
-MG54WFKTC_LQZ34#!.#OW(*,-SO9X8#!YP@$6,QNPYQG:6(X,@_WIDQ?.U;NZ
-MP?X4H2KEG`*8+R2))YRMB%=;V"[VZ:@GZDZ*1C*0F:?-Q,^E&Z#JS4FREK9+
-M,A0(_?P?3;;B"VMW$K=&?\X!`.P```#L`````@```$4``.A=#@``0!$``,"H
-M`0'`J`$"`?0!]`#4!KD$>0OU&8+)>RSZ^D_4UZ`8+B`D(`````8```#,(0``
-ML!!IUWI-6G,9#&#(M5!OL+G6XY*EL^\1/[K7V2URV%]O_][,&!!JC2KO>G&`
-MF&/#)G\N-[.VR&.L-&E;LXRY']W%8FA[D6@\0'L=G^[/D-(HOL9=X^LIRG>K
-M,GEE`RVA0.NV^5Z\GN)HS1HI3Y@(_$;ETU%8,:YE,IL\P5U"I)\BC_&&4H&"
-M:PVQRLX:.7:AYE1#'+>N1%5QB>[X_EP4L6T!%I$]_K#=E'+V!69W$K=&%O$!
-M`.P```#L`````@```$4``.A=#P``0!$``,"H`0'`J`$"`?0!]`#4!KD$>0OU
-M&8+)>RSZ^D_4UZ`8+B`D(`````<```#,(0``L!D$:KM;#_T@<83'!(]']FIQ
-MM[<W9N=6:IR+P!R_09\<[*T;16/5B6XG9TC4ZZ%22=E."G**/['NNKL%.S!X
-MQ"/NX-37)T+N'RN6M&<$`D<AC1I9X<ANM$M#QB&><]7JV#9?3M^<5^C:2QA^
-M#$OGI*?<!"!?4_5E0@VJ<^[9UJ0D=_W;I/_CGH8D'1V8[9#M'XRC]S700O1-
-M7!'YYK'>/ZH^(?L(7P<;;07[6,EW$K=&(!<"`(P!``",`0```@```$4``8A=
-M$```0!$``,"H`0'`J`$"`?0!]`%T!UD$>0OU&8+)>RSZ^D_4UZ`8+B`D"```
-M``@```%L(0`!4`]^'RT)D\G)/ST$GW:/8?9:*6ENK[HC-L!]H,4K:GUV*X1G
-M2FE7D#N)=K6)$N$/=P,;."%)EOJVK0;;(>*8H_+96L5$PXW*6Z.2861L<SMI
-MG(O[?OOZX;^$?0FMGCQ)1AF=R'/AI?BSL#8X7)]7L>;=6P9<KN[<;B*8(LR1
-M1>O"(>]N4\>"K$)[`=E-6:D6+I78W>0'AV$1<F]SV>`\21AEQSP'0KN$]F#_
-M5BDGUZH"3WINFEXZ)%&/5N7/9^1J\MNHF^6YB*F)`>C.A4%S_(W?WJ`-1R78
-MG7=S.7J^!2^`AO+%U[:FQ8542^W/A$,82O\%QQM-`P]C6O%+T;95HBM/6+)W
-M,O0U9'N#;5KF`^5_=.A45N."8W)U.Z;YWW^H\K828>?>SI9MOSF3I*N('ZV`
-M.<6%\K<J"\,9A,B,X*V$\G(IX3M]5[)@Q&\?=Q*W1C5+`@!<`0``7`$```(`
-M``!%``%871$``$`1``#`J`$!P*@!`@'T`?0!1`<I!'D+]1F"R7LL^OI/U->@
-M&"X@)"`````(```!/"$``2!`I1L=2./DXV<P<XM/)%J5H.%"-%>3!1%G/GK8
-M"$!381/QFHQ\,0;5L!S)%GLNT2_OLM4MZAP:WIW3`%Y#-WN_,&/]AC:.:]/?
-MV+W:O02^YMML),2-+Q^._/>+AEFBFKN-\BOI8IY=GH(F"I#>&IP\E4+'$V5L
-M$2",Z%QG::,W>]\R^2#9)"8GX][KR%JQE&5JB_3+]G2"N1*2G7V`.G+3L8S_
-M:G$.0TND7[JR!4)%A%`//ENHO4M$H\%"441A4:1E&J2V<.1Z/D?0>+."17/0
-M+U/(_UJHU.E<&_^4&E_`_$6-:L+"B\.#FX[@2_V/J#<,X#Z(TW^V*:[T'Y1'
-M;H?T.<;T,I/-*(P^N@WP9.S18(:"UF`5+K*UDVN9''<2MT9+<@(`?````'P`
-M```"````10``>%T2``!`$0``P*@!`<"H`0(!]`'T`&0&2:/:)98@#8RI]29U
-M'!(%VZ4N("4(`````````%PJ``!`]HT!GDLJP!O<D0OC@06Q=]H%#NX77PMH
-M`NF&GM&-UDXA/!(>V=<X#G0C1>OK,*5LT#P"91G$O_I!F8G9=Q*W1J1]`@!L
-M````;`````(```!%``!H71,``$`1``#`J`$!P*@!`@'T`?0`5`8YH]HEEB`-
-MC*GU)G4<$@7;I2X@)2``````````3````##6\_NB`";P+BYZWAT,=_X!UHM7
-MHN;I(B?P5#D-F*HXMVDFHBP:.*FQ24#O4'<2MT9&C0(`;````&P````"````
-M10``:%T4``!`$0``P*@!`<"H`0(!]`'T`%0&.:/:)98@#8RI]29U'!(%VZ4N
-M("4(`````0```$PJ```PA+*<LW/+Q(YGB"T2H5"^BLJ^6*KG>_@``JA<&(I7
-M1LXIRF-+A.&2],;BOFAW$K=&8)L"`&P```!L`````@```$4``&A=%0``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CFCVB66(`V,J?4F=1P2!=NE+B`E(`````$```!,
-M````,+%A_BBL-(W7!MQA)B7LNQ1B1%$:-C3_/^U*D=[0R+H^HP.%.B-^^A6T
-MS0R2=Q*W1G^5`P"8`0``F`$```(```!%``&4718``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E.IE7L0C7^U,``````````"$@(@@````````!>"(``'@`_`!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``X&H:#Y"Q0'UT7$%<:N9_Z\2E
-MWQ58-(=,)87RAJ,HY'D[.UI<'ZK0%,&16W'#2$<2&WQW#<_1RNA"K\M*%Z%A
-M/!3,-]5),V_N"F'PSSS.X[J+-,8%O!"A*KYK_:[5B6B7VJ+*:E@FMF1@CMM?
-MU^^$WA_`V3J0FST.63/L7_J9U/DI```DJ$SC1:]:4*I(Z74W1=SXQ</6&L+5
-M'S+`7""QT$I+8B`I```<``!`!/7<-6>GUS.$Y>>'!K':2VZ<7FAR````'```
-M0`7V3Q<Y=1-W<%-1';:BF2SB\M[U:7<2MT:II`,`7````%P````"````10``
-M6%T7``!`$0``P*@!`<"H`0(!]`'T`$0&*3J95[$(U_M3```````````I("(@
-M`````````#P````@``!`!@````<R]L\F.5D]=>9]T_;BE7%76!2LY'<2MT9F
-MM`,`N`$``+@!```"````10`!M%T8``!`$0``P*@!`<"H`0(!]`'T`:`'A3J9
-M5[$(U_M3```````````I("((`````````9@A```@``!`!@````<R]L\F.5D]
-M=>9]T_;BE7%76!2LY"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``X&H:#Y"Q0'UT7$%<:N9_Z\2EWQ58-(=,)87RAJ,HY'D[.UI<'ZK0
-M%,&16W'#2$<2&WQW#<_1RNA"K\M*%Z%A/!3,-]5),V_N"F'PSSS.X[J+-,8%
-MO!"A*KYK_:[5B6B7VJ+*:E@FMF1@CMM?U^^$WA_`V3J0FST.63/L7_J9U/DI
-M```DJ$SC1:]:4*I(Z74W1=SXQ</6&L+5'S+`7""QT$I+8B`I```<``!`!/7<
-M-6>GUS.$Y>>'!K':2VZ<7FAR````'```0`7V3Q<Y=1-W<%-1';:BF2SB\M[U
-M:7<2MT8>V0,`4`$``%`!```"````10`!3%T9``!`$0``P*@!`<"H`0(!]`'T
-M`3@''3J95[$(U_M332IKB'"KJ]PA("(@`````````3`B```P````+`$!``0#
-M```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``*--
-MSJ+?1>#J\`@(V/4`(XO22[0$W]GC9@")X"D"KIN66UMXQ7?6*!?4U"_$!SA=
-M7C:*6,./C.^>H:F:\H.XOYP,U+1(3>.ED,D5W60X?%Z3J3Y64<?1AE2]MXN1
-MM,5;_[494]ZLN5C<1+_K(%126/7@S3'G:,O<Z7;3OD2KZS3"*0``)&;&Z#OI
-MK47J/1!_;-@V;392]KMQJFX]^3K)J7=!_?3M*0``'```0`2<KW;?_3]6S!"+
-MWJK39^=*=`0ED````!P``$`%M-Z'X2D>J0%8//0/Z)@&?\]`#FUW$K=&XP8$
-M``P!```,`0```@```$4``0A=&@``0!$``,"H`0'`J`$"`?0!]`#T!]DZF5>Q
-M"-?[4TTJ:XAPJZO<+B`C"`````$```#L(P``T&V[M4IW\5MZE&IKB<4CN4N?
-M6=!K(%F@!"O[3MWZEJ_JZ`)+Q%@;B4D`%KNZT5@Y1^1LPIN9U'0SXJAZ9'Y?
-MS&14%O#\?ZN/G,`;YW;+AS16,STKP#JK65D_KX8^I!T0>H39M-P1Q:O0C@RM
-M8(_Q#C&-*JG-2[TXH?'7"Y\Y'L7BA#8*&NU8,2GI98F09/^1G`RZG;IF\!G2
-M]`;C!D:ZKA1E=W:R^9=<_NTQIJZW5MR09C--@F_3BHZW$NFM%=6W"J$D;L^1
-M:RU!XD[.^7<2MT;5'P0`O````+P````"````10``N%T;``!`$0``P*@!`<"H
-M`0(!]`'T`*0&B3J95[$(U_M332IKB'"KJ]PN(",@`````0```)PD``"`#^Y:
-M35#J<!88YOG*^]>[YR=7W<"7?%1TA.]VQNO0'.=[WDLH.CC.COE3`X?[;B:&
-MB=$BTL1W5[*Q__N@].[R0&P/WSE?D7Q!+WO#J#!/N^;_D):WZ,;1E3M>'M_)
-MC/MK1@[BI:?JXIJJ&-&[K2[>ME78/E1\$=Y`E$8PHG<2MT:*/@0`'`$``!P!
-M```"````10`!&%T<``!`$0``P*@!`<"H`0(!]`'T`00'Z3J95[$(U_M332IK
-MB'"KJ]PN("0(`````@```/PA``#@T4E`AA&\9I;]OD0\23'=#1S+K4BJ:Y`=
-M)BU@BGCC23$*"(7SZ'NG]6@JBQC11.!#;#D.R<K\/5]AB.J"5Q.H`!^DK1[(
-M@KBRIU')G!E*Q5>Y]L&"M[#\&!YJ4VL*J-H'.'T-VHV:G>Y`;D_1?"URZJ"\
-M^)`Q(OPZ:72=;RR=H[50<Q"_CM/H'??:?2*EK)WL:.V=)3=:G'+7Y<4[>.!:
-M*06'M"HJILK9WK$C!`*3A`2DL#2V&\4!L^,;UI\PO"LW6:014X3+3CH2M'=8
-MH/^^QLTRZ8B[><F9.5Q25W<2MT:]200`_````/P````"````10``^%T=``!`
-M$0``P*@!`<"H`0(!]`'T`.0&R3J95[$(U_M332IKB'"KJ]PN("0(`````P``
-M`-PA``#`RH],F(1J4!2?M9SYSCRT2V6>$?&_@SMLC?!<-*5*N-_,X&*B=K06
-MDSBI2NQIB48RS\?W3+KA_<LX)DV12\MDVPS6LK.BL"/@\2RB`S1SJ#AO-!9W
-M^@)]F'BTMFGWG),^"VB@J+("`J_(//#G8V'LAZRSQ()7JX@U'WT")@ZG^X_6
-M"6/V:^!-N2=4M)LRL@K"E<R5+U%*4%?XV**T#O@I)4@^H1(SR..J<>O/_FO2
-MRT-#9541Y)7D_P:4[TMW$K=&8E4$`&P```!L`````@```$4``&A='@``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CDZF5>Q"-?[4TTJ:XAPJZO<+B`D(`````(```!,
-M*0``,,9_-:?SH8?2CH@@D3I@)B!%A,--]S$=<6'K!]#DB*=4E4`3_\=&7&#K
-MVIT-=Q*W1B%Q!`!L````;`````(```!%``!H71\``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y.IE7L0C7^U--*FN(<*NKW"X@)"`````#````3"D``#`+*(S90KZG
-MS,TXR"UD0G1H$V`(Q_3T:4:_N%`!_6G*<!#)Y#)I68IZN<3_\7<2MT:-C`0`
-M/`$``#P!```"````10`!.%T@``!`$0``P*@!`<"H`0(!]`'T`20'"3J95[$(
-MU_M332IKB'"KJ]PN("0(````!````1PA``$`ES5:D[M3/RC?U6"H\3+),^*6
-M''+CB5!?.-1,)R3KO/E$L(10T:/@\2".ZQ&C/=EF-,V/.5U-WDIJZE.[/:F$
-MU3S&1!7PU&T:QL8!GI^!&3Q$0%2>E?H/O(`HV>INWY`.[27YO8G'JS<V%#_#
-MJ!Q6N^B*\WCW+,]PVERH2^,IBNKV<#274WXX3];JQ/QT@,V5N;9V=YWDTDTS
-M$SW_IJ'"\0>EVW+.(]JGUP/B?O/`X4VLQ^6=!IWO)']PD[%.>S`WA[!@,_W!
-M0U9:\&/+2E[>302M`,7^6/MN%:A8`^=FTI=1*U'F2:5N)ZZ-$I9:"4,MS-O3
-ME=I"6TDQY(_.=Q*W1M67!``<`0``'`$```(```!%``$872$``$`1``#`J`$!
-MP*@!`@'T`?0!!`?I.IE7L0C7^U--*FN(<*NKW"X@)`@````%````_"$``.`K
-MM!$.1#;G"ZA*]P[KSJN>2>8=0]5&VI?I<V?(E"!&AP)R/6C='&_`(YS7]`3%
-MF__8,Y/L20V,BPP>#CI/SY8!&[_)1/4^.*.R#.Q,7"6M8QM.C#@^1RC["CK8
-M?=2@0O'K_D'2W#S<TP)$%\OW(3Z;UP?:%"NM%<5$U1*B(Q:C3-`=!T/7Y/M'
-M>YMS25Z@:ZJA@0$XSHX6%K^%&N@V\>_^X$)#+Q.+IL+L&TBQM]\J*().``'*
-M6/P=SYN'-$<,^:KJ86?QRWN?C:%X77)];80H1N5=;KU]/LD_?FTL=Q*W1HRG
-M!`#L````[`````(```!%``#H72(``$`1``#`J`$!P*@!`@'T`?0`U`:Y.IE7
-ML0C7^U--*FN(<*NKW"X@)"`````$````S"$``+#X(V(Z.#]Z:G.U0Q3S^)`'
-M3`>^\..*'_I?0R,?+&^DB4@,IP(AS-8FFW;%SANMPXZR*@*&N^NJS4%[+>T9
-M3`,O9\]OJW)0WNNNYAJ/LXJJB&P;D9F4<<P@B['(1\WZ91,^9>:8'NII;!-S
-MG"AE8Y]9GBT^0`%]XJ20H,UPM!G/V@;JX:IQEG+\4"X5S/=J^[[8#271J#M\
-ML.MW6E6.DHM5I)JC<4>W8#PA@QX-=Q*W1I/*!`#L````[`````(```!%``#H
-M72,``$`1``#`J`$!P*@!`@'T`?0`U`:Y.IE7L0C7^U--*FN(<*NKW"X@)"``
-M```%````S"$``+!Y[P+<812()+0&`TN$2/(&)=``."+;NE-P$C*/-DNRFUMT
-MCK*7`*;7G&]LUAX]+&@FNBCZK*X`(W9QBM9K@),X^9ZNSL0G5*`7;VTE3"8V
-M'V4`CPR3'#NZY@(4P#_;F&N&*N.E4^F[+*/@C'E[_Q#GV>JT"F$STVE=7#^U
-M-38;Z:%%0*'G!M*=E$<C57I\1,^F[`]X>PS4GDZN)+WD](<&DN>A#VU4;_DM
-MG]X+=Q*W1H#G!``\`0``/`$```(```!%``$X720``$`1``#`J`$!P*@!`@'T
-M`?0!)`<).IE7L0C7^U--*FN(<*NKW"X@)`@````&```!'"$``0!8OLR2S/PG
-M+FW%=#Z-;WV&.)<^!5_%^);@$-EA=$F,\=Q,M*.;=GM#[U-\;5XY!P_NCNQ;
-MM_^$&82`S^7#UL<'"Z+_6*,J<:7.L`C8-_CNN!U96]$C,8AELY/S'2D<<'5;
-M&.JK&&0F;UW"G_/'*@(>Z^X?/M#3D3OQ4S(>98N$.0E/HUK1QCW0F7\!17O_
-M%U']DG^&]YW6A3[#CO[B)->S'G?4]!@+#?B!=M2$JR]P!Z&?44Q.[?UQ\0,]
-M70'K5QPTBEC`;X<,U_S&[T*O>>2^_!8$;:`NIP)AU?#A9/0GL&VT\.&ZM1#\
-M-5(GF/X-`6HA`A_57/!;S%P-DM=W$K=&WO($`!P!```<`0```@```$4``1A=
-M)0``0!$``,"H`0'`J`$"`?0!]`$$!^DZF5>Q"-?[4TTJ:XAPJZO<+B`D"```
-M``<```#\(0``X,T>E,,A]CT8T%3Z0\H$(F>U4FRZRHL&,4V20<5V\8;,'`])
-MFZ_EV(J42_(2<;@5O4[YJ=O>RH`E*:8EQDK<D8"06I@?'/5'NAZ:)_03`5:[
-MFM>]5K./+!:KW>$HKT'/<":ALEF\?A'0TOR.-V?N';$&:R;6)TCW)/J,'MTA
-M;XG4+_/YT\NT-P])3+)50S['*U1?70MIZ4<*KC4.B!1<9D^9&^KZ9SPIA5",
-MAELL?KK43LH3Q(-R*\6$"A#O\/`9/BTNWAVX$C<*8ZJ_U4?Q\@F3V;.7]]0D
-MX2XC]6)W$K=&K@,%`.P```#L`````@```$4``.A=)@``0!$``,"H`0'`J`$"
-M`?0!]`#4!KDZF5>Q"-?[4TTJ:XAPJZO<+B`D(`````8```#,(0``L/_IZE[=
-M"_,^V.CKVSH/ZN<L@$2&!_Q*(0A[S<S"54,Y#`H79J*)%NSD`:_];^;I66TJ
-M66L)CW+W^(1SN;60A]]EF8#VHYL6.0;_M&FDTFPK6F%IB9WRW(=9J/?[8DA5
-M*1JJ9I]$!H\'1:UURZK^09IYKDLU2K(QYL.Z!AN%`-:E$4F9U2QA@'CE:'Y"
-M"C.@,=G+OP&"@&6-,#GR*74!0D/EU]"U8(2'ALR%DR-W$K=&D"8%`.P```#L
-M`````@```$4``.A=)P``0!$``,"H`0'`J`$"`?0!]`#4!KDZF5>Q"-?[4TTJ
-M:XAPJZO<+B`D(`````<```#,(0``L$`DNSA<J&<8W[W<MWK_@XQX",W7MU3?
-MDR#NG.:U#S43D`<8KO9WMTPCEN?1\:</0@CGZN):)Y>`O$UGFUMORQ9.GNSO
-M8-,P?]3>EWG`&@CCQMM6FC;E;(`'S>2-$/E[^Z8?("5)9(<1;VOHW.TNRR\'
-MU1L-^&A?6ZE%CV<\+"F_PZ!2E=H+8Q%9.9H7Z1\&^$.U];%)I+[S)`Y%U(3A
-M0<>7M$)>?BS'QFC6,8IW$K=&&$T%`(P!``",`0```@```$4``8A=*```0!$`
-M`,"H`0'`J`$"`?0!]`%T!UDZF5>Q"-?[4TTJ:XAPJZO<+B`D"`````@```%L
-M(0`!4&KXG5NHRS1562Z/<YBPSJ<;JM4YGYOH+_OC3OZIN=;=.V>]:8DD+'Y=
-MV)URD54N?Q#)"CS:O"F[S7\(P=0+9%A5AP?K@UD43J<6B-!I*V$NZ.-$F3TH
-MD[!"BYR9@'5[T$RO6:_%A#CAC0I5^'$4'&>HG,_ML"=%SNOQX[("F)#6"1:/
-MJ58G<"Z0:T1P^I</@$4%66-8\,&NS7+5ZPBMLV=PI()%1[SM!->.+_#/-7%(
-MR!RL9%W43N._L"EQG3GCN>PO]+0GS99K!<_]M1*&%RF,C;("Q^EK2G`DJR03
-MO9Z\WGSNK&IF/"6:A<VIJK<\NJQ;Y6)<^@1`@)O\#HU0'?'K9E<+JXEU$<3T
-MCG44S+MT0NJ1#A$9Q?V36?#IOJ?5S!OYF=EFS,0$R.&@:S3%QI:MCAV^::4^
-MS.QZ"7/*L8;N#H<_CS?M?"4*;(->=Q*W1A6!!0!<`0``7`$```(```!%``%8
-M72D``$`1``#`J`$!P*@!`@'T`?0!1`<I.IE7L0C7^U--*FN(<*NKW"X@)"``
-M```(```!/"$``2`B!2X5.7XV;5V.:%IAN!A!E6RS!/O\]MFQO<RR^C"X(J[9
-M'J9`]:OLV-`/"J^E&BKRIZ3>^D/O27E0066?-%"W_\,)E6F'Q/YC@O7MOODL
-MI4)=Z-8L=TQ$P$PG6[/?`Y1%$><5ML9!9^SA+1`>K%01TAF9E!'8I].U_XF&
-M9T%#V2A"_71L4[H&;()F^A;5&'-57[0_QKI2-89'KL:BEAQ"$:."45,DW@_4
-MV!4,(/.3XN9H9HCG!/!&>K-24)#EAK0"D2>R)C$^)]@'&#!Y^4C\2#+R0D9K
-ME\Z)M[O<8\EK,*)ZWP>OP7?Z7/W0?G3'?*?-@1<.`1-+<'[38OEJWU/5CD8`
-MA</N=W+U9$>)'SN@A:/)?71`6E*#BO)4X'<2MT;.IP4`?````'P````"````
-M10``>%TJ``!`$0``P*@!`<"H`0(!]`'T`&0&22P@A_#,J%V4\X>2G,&<J7LN
-M("4(`````````%PJ``!`UNR!YF^3!37.HK!8VZ#S`B(;5]XS:9H;B6N8U1)4
-M#&C@RS9,9*N*PL)1E@6:QA9RVZ,:I<2"]$P@$5<,=Q*W1C^S!0!L````;```
-M``(```!%``!H72L``$`1``#`J`$!P*@!`@'T`?0`5`8Y+""'\,RH793SAY*<
-MP9RI>RX@)2``````````3````##QONAM2(;PY/N*()7VC[:?J-5Y[`^8$*YY
-MX._=V&0?(<!MH,88!GV*:_[=@G<2MT;8P04`;````&P````"````10``:%TL
-M``!`$0``P*@!`<"H`0(!]`'T`%0&.2P@A_#,J%V4\X>2G,&<J7LN("4(````
-M`0```$PJ```P(T[@\T*5F62/,J?Z(M:)`^:H]Y(R?\;A?MTWV@<GHKE,WA>H
-M@)V\G(:V(\IW$K=&]LX%`&P```!L`````@```$4``&A=+0``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CDL((?PS*A=E/.'DIS!G*E[+B`E(`````$```!,````,-M@
-M)@%<7!((VT`X7['"54-/\ZZP=:5N2&69<`J7<R0*2*?U6MF9"\<P,G@!=Q*W
-M1LK-!@"8`0``F`$```(```!%``&473$``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M@R'5;`N*EU,``````````"$@(@@````````!>"(``'@`_0!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``I"(J3Y;<?4&`3PTYDD7GK-%0X5\NK#50
-M!XEA]&643,K<?[M,INR[B2+-NM[C(%U2SCH),J3D5K5&:DPE_>`,G-?B=--3
-M7Z9.)9E]+#7=;Y/2('G!SVO,%7LL=5,2C6+$QD/'I`-CN;6A<0Q!I01/VMWQ
-M)5H%>MDE/K*:\[TG(SPI```D_+*:F+6[7KOEO7><VNCOO?8,.+HKJ_(QF0A?
-MU$Q7-_,I```<``!`!#1(UTXHQ7KBWBNK3.0@?10A($5G````'```0`5R%15K
-M#:W=B=,#VCYSTTAV4W.*;W<2MT9DWP8`7````%P````"````10``6%TT``!`
-M$0``P*@!`<"H`0(!]`'T`$0&*8,AU6P+BI=3```````````I("(@````````
-M`#P````@``!`!@````>7/&@?R-I'_6J:#3)`8_HS9RZJ3G<2MT8X[P8`N`$`
-M`+@!```"````10`!M%TU``!`$0``P*@!`<"H`0(!]`'T`:`'A8,AU6P+BI=3
-M```````````I("((`````````9@A```@``!`!@````>7/&@?R-I'_6J:#3)`
-M8_HS9RZJ3B(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MI"(J3Y;<?4&`3PTYDD7GK-%0X5\NK#50!XEA]&643,K<?[M,INR[B2+-NM[C
-M(%U2SCH),J3D5K5&:DPE_>`,G-?B=--37Z9.)9E]+#7=;Y/2('G!SVO,%7LL
-M=5,2C6+$QD/'I`-CN;6A<0Q!I01/VMWQ)5H%>MDE/K*:\[TG(SPI```D_+*:
-MF+6[7KOEO7><VNCOO?8,.+HKJ_(QF0A?U$Q7-_,I```<``!`!#1(UTXHQ7KB
-MWBNK3.0@?10A($5G````'```0`5R%15K#:W=B=,#VCYSTTAV4W.*;W<2MT;P
-M$@<`4`$``%`!```"````10`!3%TV``!`$0``P*@!`<"H`0(!]`'T`3@''8,A
-MU6P+BI=3$L$TB[F@QL0A("(@`````````3`B```P````+`$!``0#```,`0``
-M#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``-A@Z1(>'K;;
-M&JJ5O)82S!>Q5^RT"OV"GDJ5RL+JEK0!==VU_F\K0?3F(Y8.S+<2W,^Y;@SS
-M"IWALI/.IE\?^:J\!A7S88;6OFY(.K1;O.<OT%Q2UAP1AGS0QE\-,'1:9[O.
-M":28`Y:9_VW#"N+J5NM4TE=#@AC,A/O&97[3<4(W*0``)+`&[G??ABS,D9:Z
-MBN96*/'3-X+L'*EP::+0CPZL=R2V*0``'```0`2GAVO3M3@Y4\YV\V.A!JG]
-MU*4^B0```!P``$`%&%Q6EW'M(J1IBJ<2X3(09]FM,PUW$K=&-$$'``P!```,
-M`0```@```$4``0A=-P``0!$``,"H`0'`J`$"`?0!]`#T!]F#(=5L"XJ74Q+!
-M-(NYH,;$+B`C"`````$```#L(P``T#71FZ&6V'P1%&<%\<28NO$.M_MT_SBY
-M-\!=^ZM.M#G/HP]?4:+6EH``B;(P8TOU])93O8$;?,VM,(*B5`8-D2L1F^C%
-M"XJ#U5_Y"!`\I<F,V*U5]>Z]6&M[I#SKS0+6_<+-M'F24M9!W?+L=S@E01A9
-MB*2A<O4$[:XZ.K>!<F>!&..(H0N"/30<MEL6QJ'(GV:![YF&Z;#'OMB%%;[,
-M[KP+C`!#`%D#&#+3^H"[<X8,<9R'0MR$P,"R;&6E4)9[16HXLM3N=T5&\_H#
-MYG<2MT;460<`O````+P````"````10``N%TX``!`$0``P*@!`<"H`0(!]`'T
-M`*0&B8,AU6P+BI=3$L$TB[F@QL0N(",@`````0```)PD``"`-H0Y'L30YQ#.
-M::16AOG/5962H%S.\QL'"[3<QRB]+5K_MF.%21N)?[<%0DU2;E6-C.]S7FU7
-MWSQ:UMB;'?XO#Y8A\SU*6LM1D1-1U8GR\6<$NO_FU\K.1<[S_Q_7?IE;QVYQ
-MXW]%R6>LJX;VD921O@(^!<\2O=NT016,;G<2MT8`>0<`'`$``!P!```"````
-M10`!&%TY``!`$0``P*@!`<"H`0(!]`'T`00'Z8,AU6P+BI=3$L$TB[F@QL0N
-M("0(`````@```/PA``#@UM)YQUH^*4]S[+]Y@/PDIDMQR+@%[PI\T<`RGPDI
-MAU_G-![M6[D<I0>T,N=\F1+<G-,&$$"<+<L46?5N&1Y9@XAGB\LQ!M8]'%1@
-MYSP&,=..U])AQ3>\`2G.]=[T3^WF8\>5)_LNF!?SE?7FY^GAC,;B%O<XOHQK
-MRX#`9+YBSK/>"V;[F,OZ10=E`+F?ZVHA1<!*J&O*$[(=SZ6:&YT/A@&G3I1G
-M^.&5Z7F`KAJQ`Z62-&Q-+&O-#,)M0D\-!!(CFI>>9W1<=^`PPDF8(VM@1%3@
-M24Q#.,D`2U6S5W<2MT8-A@<`_````/P````"````10``^%TZ``!`$0``P*@!
-M`<"H`0(!]`'T`.0&R8,AU6P+BI=3$L$TB[F@QL0N("0(`````P```-PA``#`
-MM#N)RW1"=W,I>PA8;<@+F@!BE63PA,G&J>-L_$C>(\(PN[^/^,HLDK+:]&._
-M5#;70J+&=X3,8][-X$@MC:.OM6=V3TN@)X.+Y3P%"#`/!!C5T+B%OGOGLIR\
-M0K[PKM:LWNCN]*T^FC!]2LJIR]QK(%&?>F@IXK<MX#++\`_*:E6QCXV&M[Q2
-MX](YD(=O/5ZMY)92UK22=J#1:*MGR9/D\H[H7/0K')PW)5W*Z@,4W%8CQ`>F
-MK]SLC1BG\;9W$K=&Y8\'`&P```!L`````@```$4``&A=.P``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CF#(=5L"XJ74Q+!-(NYH,;$+B`D(`````(```!,*0``,'&$
-M(+CO=:.\:`)EB"Q#`A^@+NP&GS]R<:JD`D>@S<0LX\G=8X.M)HD1HC]X=Q*W
-M1NJK!P!L````;`````(```!%``!H73P``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-M@R'5;`N*EU,2P32+N:#&Q"X@)"`````#````3"D``#!0#,6[[U\E6IQ&FOP-
-M$]O[6Q1_/BV45O(Y6N^Q7^&2G@'U;/2?&4RI<;7[@G<2MT9\R`<`/`$``#P!
-M```"````10`!.%T_``!`$0``P*@!`<"H`0(!]`'T`20'"8,AU6P+BI=3$L$T
-MB[F@QL0N("0(````!````1PA``$`AMT[,%;ZUA^/V0%N4W_,,ZNO'7]-LP7W
-MZ(,LX\*`=Z>'\L2+!4:7GSX'2HITJ`TXA]CW6GQ0L,W<T+TU"6U*I;VS/"O:
-ML>LS!(_ABM(TLQ.-<*"@J,OS),AQ6QW*#+G52NH!38N$:20I58QTHA54>$E\
-M_OJAD8X!\8PD$!:[,\M7K5.G&RDT%=VE<6.P/&P@8HA.K:0&^$MHHI3(F&75
-MGLHWMG.@/-4Z+Y#R!F%-)_F):].$+4?;B32O7+^!+6/>?R8+,*L\JUAEX_N%
-M5X2RA`CGN>$Q)SH8=AD3$G#I=)HT_6V9R0BNRP(7&GP-7C_'`^1SD,(C',V1
-M">1@=Q*W1D[4!P`<`0``'`$```(```!%``$874```$`1``#`J`$!P*@!`@'T
-M`?0!!`?I@R'5;`N*EU,2P32+N:#&Q"X@)`@````%````_"$``.#7SR=VB\3[
-MY%U_!J7Y@%GP6#Q7KBQ+B]"B\^L^^[<3X<F2^^T,#/JS%%U)``[XYYA=D7'L
-MS>RY7O:;54:71Q_9,770XA5_(4B\M`3X6%_-5'UHA[.T@P;%)^D\`B>DT#$O
-M^O=0"H)QD[G.;,@?(-%"W0>,LQLG6Y7N[(VN-;LI?ABYRVLZW(6H:L'!S<41
-M*TI-2X:LCE63F4]R`9$\!?$>*+V=FR.]VW'`'99.G`^Z,1N(MCJ]+<D5M:]W
-M.3OYWK_@499-M!:9W"JT3YY!HBM7RWOT;_A9JM9<4,@Q=Q*W1FCH!P#L````
-M[`````(```!%``#H74$``$`1``#`J`$!P*@!`@'T`?0`U`:Y@R'5;`N*EU,2
-MP32+N:#&Q"X@)"`````$````S"$``+`9D>+*H?9>'Y,RH"<6,*#_Z*<EKX9*
-MEMT7ROCE#<XAXSR(W'FRB;49AVR#R7B(I,;>2+<R%''?8>,ZJ4,WMC(E39AC
-M#O4424FJ>P"M5SK_AQ&#Z*A'*6D`/%#SA*>^S_2]YV%@X#2_$9BZ7'P=H)6?
-MN.@2%-G/65<&7<;Z+<OY^(HF<T:4=MP.WPFB9;<\F822(LW<AYU]%5$6N`']
-M*%3Z#B;B>&C.E4HC1D./=Q*W1I@+"`#L````[`````(```!%``#H74(``$`1
-M``#`J`$!P*@!`@'T`?0`U`:Y@R'5;`N*EU,2P32+N:#&Q"X@)"`````%````
-MS"$``+")?,>".#LHTGV#"Z=\&(')/)'FB>*]3G-NHAHF7T]>G@6WEJW3QQF@
-MH1W8<EJF9F0QKT&Z:UHO!V[:=![W5!^)!4=LH$L2TT5)#YP5ZO9'[4;&2:ZG
-M!)WN.S6^*B?X=<+$&LR`Z@8!Q)9][W`<LES:1V9QB`*L!"$?>"V=L9>2ZO`K
-MC[D*FCL!BCO%UKF$?8?*@U@*E;]K&G?9LM=4'?\4ZOUK"QIAX7@Q?D96=Q*W
-M1@$I"``\`0``/`$```(```!%``$X74,``$`1``#`J`$!P*@!`@'T`?0!)`<)
-M@R'5;`N*EU,2P32+N:#&Q"X@)`@````&```!'"$``0`Y7*)]APN!QCN/TB3]
-M+J>(X.JDSC1)PL4W[!-+?+D8?QB:$+2]07^[3Z;X&G([;A0F-L)OEA>A&28V
-M?#=6^1EY>C*2^2+N#>AYHZ:.S<KE"%JBP+>,S+!UP9]:/VAO?;8SH?)/E%(/
-MCJTS>XTZ"O@@CA^<DW7D1$;?R@DOI7V\*YDZA\J`SZ`\`&&*>#RB'LG%$D[W
-M=BQI%ZDK6\=$XH&P>4[5/=T#-7AU$/8P^#-#=0IG86.<D0Z1B_L?W3)KPV4$
-MB0<(25_K:V9"BHQ9ZD-\+.GAM]/O&22(DY$R`2>2-D0#SWJ>[Z[L^/;N.!)J
-MHI9"73."Z'YX\WQ,"F)W$K=&(C,(`!P!```<`0```@```$4``1A=1```0!$`
-M`,"H`0'`J`$"`?0!]`$$!^F#(=5L"XJ74Q+!-(NYH,;$+B`D"`````<```#\
-M(0``X$ML>/0+"*I.R6%[K5M67VEAH6_I^_U#RSYIB)M-Y3$3S-AZ*Z%^%?_5
-MQB2GKO-9\M4EQZK#+(TW`Y+W"G>)MKP&_:=B*B_1J?/Y?B3H6`5^'8],[";)
-M/%(+-RR`;'_JX?/%X?,\48WBP&&639J4H754L\G>0L45OR<#T>90>B"O&U;N
-MV-+0I/XT_M91DS$H[$\%4>'4S_U2`W)`E]F75'(+3!Z=X?@NLXIDY2L$7Q^6
-M[;&W8$?R%<>R?O;V1L,A;;6IH`!CH)#K,WPB2Y3IJ@KT4#OA."SH[6-MD$!W
-M$K=&,40(`.P```#L`````@```$4``.A=10``0!$``,"H`0'`J`$"`?0!]`#4
-M!KF#(=5L"XJ74Q+!-(NYH,;$+B`D(`````8```#,(0``L+@%GN"IP$+/5@AP
-M6FWMBWM-YZ(2,9P(0(,PS5TA42&<>(1F<TV7HL8V05_EA4%O-GU^]0)_:8D`
-M$Y*G(@@U/6THPD.2AN!OO+=92I!.;=8Z=8)IP\DYL[-2G'M[LU#/)`^H'NIM
-MR)FUFR^;@<2._FE&N'?NZFO`P.E06AA2F%%<CJWK9KK]0TK0+,.'VG\R^<HY
-M#6X.=(,XR)5?/C-W,V8D\/ERVW&BR+UI@I=W$K=&G&8(`.P```#L`````@``
-M`$4``.A=1@``0!$``,"H`0'`J`$"`?0!]`#4!KF#(=5L"XJ74Q+!-(NYH,;$
-M+B`D(`````<```#,(0``L!&EVGE`5T2?*)HXN#R-SL\#0I]?L+D26"O"DJQP
-M&O$J-O,E),"@<1";!>Y4D6@J2QO_-(ML*&-Z^"J08J4*I%=TR)9!^B*/6X'^
-M%@B>^0*5E@7H4-5*='60.U>>WYCG4<ITJ4U:;LN!#=V9Y*:#Z6'[5H8_2_9_
-MA"8[_TU+*\`1YCD1+4RW_ZJ"1'0!K'J9+DYSW2;$YW1LPB\]N7#R>R"&Y7:F
-MV'P9GIM[+*!W$K=&Y8P(`(P!``",`0```@```$4``8A=1P``0!$``,"H`0'`
-MJ`$"`?0!]`%T!UF#(=5L"XJ74Q+!-(NYH,;$+B`D"`````@```%L(0`!4%C(
-MZ7>%-X3\V\EEKR)-Z:6ARPQQ^W2_XQ7+GU-C'4$I%7MTNN5W]&OPU^O;0=;&
-MO@1%;O2;4V$L6&LOPQ[7P--YG6X0!R?[[,_?B\"[G+?#I@MH/P@_.::5AJ\B
-M>CNP,_\I!L8$FI+)&3&7=95JWDT]HQ#&"Y1?6)D=#;]J[`41,7@,^$`FY)C*
-M1+&KS@\-3BTWE6%-DQ>XZISMCHU=&J+:UT.G_79.$[_2`/M*:+LB6C45+0Q=
-MT`5'*MYQZX\6BLZ%.W#?2)UZN%"%DYL?731#U>*YM7D7R*AC'^?/OJI0;@:C
-MR38E<7X-NYC1E^$:NT5(="VYC`]YWOSY4C"S?8H?BNQNIN#]/]SKU2_:D>@U
-M6>W2M.ZR&V@G`"G3]!3OO@6&WPNV$;G^@@NI]2*04+;(\81Y(BBU&G(M;8;]
-M#44[-I2QJ67MDNPDYQ!<=Q*W1@[!"`!<`0``7`$```(```!%``%874@``$`1
-M``#`J`$!P*@!`@'T`?0!1`<I@R'5;`N*EU,2P32+N:#&Q"X@)"`````(```!
-M/"$``2"CMJ2%SBXR:S^:?<\L9%_^?C\+K%-OSAYV_LE.-3),:U3U*&7#5W54
-M@10R?)P;C)8/LK#ME71!3A=@D_6GHN0.=RUKDP6NSR:)"N9_&(CT?E.GPP#:
-M7=[]8H,PNBEVL_-5V?*V?KA/W9_Y2K6%8VBB7'*!@T,A`.9L?80;03;+%X"\
-MMY4.A6HFC#KEC97]AS'N;6,9<U2>711(0%SH-PLP`*B\@7.+9I@F26*/I$9\
-MI@G71#DW8Q>`)"1BL/ICN"JWF'<284"?+V_<3^HCF>WN\0LK(U>";:V?;JW3
-M<`"<Q\9<8ER`%B,7LHC%YP+G@*@:9_B4'BE1A<!<^UE"#GEBOV5<DIB</;/F
-M<-$?.924"9&4KI`\.L@YI3R.4'<2MT;&Z`@`?````'P````"````10``>%U)
-M``!`$0``P*@!`<"H`0(!]`'T`&0&29:U$1D/QPD2PQ?,*99]%%,N("4(````
-M`````%PJ``!`[ET^>0B\4+BCIZ?X!OOBN(LB'K*5Z:"5*U&)WP]^,'G,I3_*
-M:')>W[5L7=9+;YVR5%%L*ZDSLH'D_8J1=Q*W1FOT"`!L````;`````(```!%
-M``!H74H``$`1``#`J`$!P*@!`@'T`?0`5`8YEK41&0_'"1+#%\PIEGT44RX@
-M)2``````````3````##8E39[$S62B%OTJW2W+C3YDAVQG:^IEH<]^?Z(9[88
-M^Z3K=;\1U^05M[]Z87<2MT9!`PD`;````&P````"````10``:%U+``!`$0``
-MP*@!`<"H`0(!]`'T`%0&.9:U$1D/QPD2PQ?,*99]%%,N("4(`````0```$PJ
-M```PZ)8.36G(IDOT^:$TQB4/7@"_[6,]-7I4.SW*Q'9FH,I35-[N47"ZIB6&
-MA*AW$K=&=!`)`&P```!L`````@```$4``&A=3```0!$``,"H`0'`J`$"`?0!
-M]`!4!CF6M1$9#\<)$L,7S"F6?113+B`E(`````$```!,````,*MD;0I&HN'8
-M*J^D"3#]-<W8A5[M,&DO,D2!F6Q5WT":Y_$DS,7;%!,2[;^$=Q*W1NH*"@"8
-M`0``F`$```(```!%``&474T``$`1``#`J`$!P*@!`@'T`?0!@`=E6`>3^X2N
-M39(``````````"$@(@@````````!>"(``'@`_@!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``FFDE^C413*Y^R6[%J)+<@Q*/BD+ML.0E&E/[ENX+
-MCFR!?0$\5`*M6<AJ>+^F(L(:;&N.&YQ:&3G.@!JY>W18'U$X&W&>?22KLBFX
-M47CM?6)C:%J!_(&.\(!PG;'\S^B->/Q?2JI).NUUJH?G4E-UU7:-5(#V7V#^
-MW%#BWP%5X((I```D"G-LS7V?S1\_-DS6N9D((519;[4Q?MH03+OQ_ZUI_@@I
-M```<``!`!#!?$3R+494;IYB"Z:,IO[(5Y(YR````'```0`4)1PE0U]"GV3+P
-MY\P4#2,X_]*9J7<2MT;D&0H`7````%P````"````10``6%U.``!`$0``P*@!
-M`<"H`0(!]`'T`$0&*5@'D_N$KDV2```````````I("(@`````````#P````@
-M``!`!@````<JVCX8F/^Q4KHE_MC9_7ZVRNM-\W<2MT:1*0H`N`$``+@!```"
-M````10`!M%U/``!`$0``P*@!`<"H`0(!]`'T`:`'A5@'D_N$KDV2````````
-M```I("((`````````9@A```@``!`!@````<JVCX8F/^Q4KHE_MC9_7ZVRNM-
-M\R(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``FFDE^C41
-M3*Y^R6[%J)+<@Q*/BD+ML.0E&E/[ENX+CFR!?0$\5`*M6<AJ>+^F(L(:;&N.
-M&YQ:&3G.@!JY>W18'U$X&W&>?22KLBFX47CM?6)C:%J!_(&.\(!PG;'\S^B-
-M>/Q?2JI).NUUJH?G4E-UU7:-5(#V7V#^W%#BWP%5X((I```D"G-LS7V?S1\_
-M-DS6N9D((519;[4Q?MH03+OQ_ZUI_@@I```<``!`!#!?$3R+494;IYB"Z:,I
-MO[(5Y(YR````'```0`4)1PE0U]"GV3+PY\P4#2,X_]*9J7<2MT8M3@H`4`$`
-M`%`!```"````10`!3%U1``!`$0``P*@!`<"H`0(!]`'T`3@''5@'D_N$KDV2
-M(WWM2&>[D]PA("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#
-M```(`@```@,```@#```"````"`0```(H``"(``(``+J6Y%M.53D17EP=/:X(
-M\,Z,IR+;=5@AD\LVYNOP-A?==+B`?9&CG0EE:JT<2"<H"KPIZ'A,OGV[M7'`
-MN0CHZ=SL-(W$<FLD791&LO^46SA]N.46W6_E1!F"F&]=%`W(]0ZZ"LL6D&1[
-M'MCTVUFW_(Y"/KA>FVA#<?YS(KM*XVV**0``)!\O*G?Q93,'C+**+Q(H6LWV
-MRU?5G[B\F5KA?6"3Y#52*0``'```0`0U(N2E199;0HJISP]\R0<ZY^$;V@``
-M`!P``$`%YR>RO&<4IW>Z:<84-@@C#D``D6YW$K=&,'P*``P!```,`0```@``
-M`$4``0A=4@``0!$``,"H`0'`J`$"`?0!]`#T!]E8!Y/[A*Y-DB-][4AGNY/<
-M+B`C"`````$```#L(P``T"I4(JP)LWD"M[4)L!CX-L;*U6<!A?AVVJ8;]Z0$
-M:TQ@42#W?,X*$$Q:CDX&-EC%,3,\+,O+*@?!5)"8X-T,,$]=/ZB<T:O*G!*@
-M/VS>&#>O*;ZZ39W=S9.%O7#OZ]05V(=UEQAPT3J7/NK'8H6-!>[\$H(IY*"]
-MTN:(+W;[5I"D%TQ6`/YG>*5Z;K$(`Z'KZKU'58F)!IV$"W%/-2BJ$?5=K)4U
-M<YO9."5E?()&7N\ZTSW^2;8J__S9[%9HJ`\J<WQD6;WP';6,AN;4/G<2MT86
-ME0H`O````+P````"````10``N%U3``!`$0``P*@!`<"H`0(!]`'T`*0&B5@'
-MD_N$KDV2(WWM2&>[D]PN(",@`````0```)PD``"`NG])(HP5YG#_K=[MK*9S
-M'(<P!.&I(+0E5TJ1[V1BSN[5;8)`>4T'&U"*3S,]B="S(Q#5A]A[@BK5VH@=
-MOZ&'5`)@$CX-1Y1HT6BC2CVBL@X2G?S#,$%:`=,\YMD@#!4MW_5P#(?.W3>K
-ML^_!].:RZZQ=$O?VQI79D-_,UG<2MT;5LPH`'`$``!P!```"````10`!&%U4
-M``!`$0``P*@!`<"H`0(!]`'T`00'Z5@'D_N$KDV2(WWM2&>[D]PN("0(````
-M`@```/PA``#@QJJ0*4#W8W_:\Y&QEU?''CZKU@!L\(C0`+_-0[YKZ`UE!S&6
-M^\(Z+``NW)PR/SW)=@$JOU2@<JBT/!E5//E(H@W^(%"AT@5W()-G#)6$>\.F
-MF.@]$LUI__[C'SQ!'QR;+WN`"=]'.E6**`W"V4Q*-9-$\7,AM^_`T@/U^C2'
-M/6MV8^ZF^-O[(\XDD%:"%]5NMBT.B=%\>FM0S7!UC_9MQ6(=>4N)U0\7O`5K
-MQ"K`\S%ZCRQJ/5?L[_F0)VJU_^9CSU*#6.3=$`G*]+_2&,BY+[('N;W_K3,?
-MW)CB`W<2MT:/O@H`_````/P````"````10``^%U5``!`$0``P*@!`<"H`0(!
-M]`'T`.0&R5@'D_N$KDV2(WWM2&>[D]PN("0(`````P```-PA``#`C-:&<1)E
-M[X<K1V?&T@\*I-*WE+T1E.*\4_;2#)&(U78\=M(-4+";30SCF3'$Z#N6[T@5
-MV9Q<;CV\MF$VE.\/2[1>HO7HP6STW7'\A@-/,\BM<IVX7C+7HP@>AF7I:$W*
-MBOAV7R=UBBTE+.^,R.,1WDAW6G3`<_]/H2,W4*RZ+"A^P@^F@W'<7-7#QS)Z
-M[.7'/UC%V*:46G8/0K!=`WU,Z@J1$*P#>LZP@T;X4D7Q**7YPP%5=;]=58G6
-M=BEW$K=&.,D*`&P```!L`````@```$4``&A=5@``0!$``,"H`0'`J`$"`?0!
-M]`!4!CE8!Y/[A*Y-DB-][4AGNY/<+B`D(`````(```!,*0``,+S=')*/9[<*
-MZ)Z^B=&Z2`-1\7PM9XQ<RO0.`-(/3GBZ.&O?Z5/56/+O(BU5=Q*W1NOE"@!L
-M````;`````(```!%``!H75@``$`1``#`J`$!P*@!`@'T`?0`5`8Y6`>3^X2N
-M39(C?>U(9[N3W"X@)"`````#````3"D``##A/CK#N^5N0JL@J6#"9S<3*A9B
-MY="E\5)F0`?9]#)M$TZ/?)`\[]<'NTZ@+G<2MT:"`0L`/`$``#P!```"````
-M10`!.%U9``!`$0``P*@!`<"H`0(!]`'T`20'"5@'D_N$KDV2(WWM2&>[D]PN
-M("0(````!````1PA``$`/X,%/5;79?ZRLZ=@OF@>[>L#-AR\Y"/6^[8FG<U%
-M/4-4]?&,WJ&,7D'&SF:![CP788X^MO_1JOL9&($*(QSBU4/2`S#E^;A,":`M
-MX;X.!P%XH72"'&S9;4$XFS8TPK/VY=1^/U`S$"#39W%NWF2\I\`)YC(F;.?,
-MB\I&E6`>WX,2'-W7>H<SY*^T8U%L66P_*A;]GO*;;4&/GCOA)X5W7$D1661\
-MZZ1^&QC+G!Z?XVVK>B$>A4>])?V=#9G1Z(1#CS;&"4$M.#6H\6-GJB_08VC_
-MLHF.:MQ3H:/I^4WH4\HG7%K(9!NQW\G2NO4\M![ME#M[=?G6.BR2THOH=Q*W
-M1E$-"P`<`0``'`$```(```!%``$875H``$`1``#`J`$!P*@!`@'T`?0!!`?I
-M6`>3^X2N39(C?>U(9[N3W"X@)`@````%````_"$``.".,=\_I'+KIH,;]=3+
-M>".:L1M>OI)5H.-=A)C99!\=&0-UP*I*>TO84UO]"R@<YUV>QO5;`5<1O-$%
-MA3?:I(D<>'ADP(LBUGOV_3YI*+AKFEF2JZQ:,XCQ!ROXXD'>Z#?!'5\5:V0*
-MU*'X<E`TT/4I!)7CU;G7`0)M.(U'%7?CQS!@DIDIJLBOMQ"?M9QIW,'HC0Q5
-M_SE78+2,E:@HK7':#WJVA45I[!8]0,-1TW$%Z:&T2!WFJ07,4W,_(>TP5/H\
-MX?AF-/_2RI82K%R(1GWSGUQFXQ*&1D>IX8+#=Q*W1N(="P#L````[`````(`
-M``!%``#H75L``$`1``#`J`$!P*@!`@'T`?0`U`:Y6`>3^X2N39(C?>U(9[N3
-MW"X@)"`````$````S"$``+#H;81&[5VO]!%K,*#V0Y*3OY3)^>A(WT&]DXBT
-M1?6.#FFX%V.MT*7ABM^%S)P332JN]]B9DSV=>=/:HTO;JU2SAT#%T7!>LSFR
-M;^-24+<#-I+?6?QKU%KYHCH1Y\L.5O%:M*9,+>U&]+/</7?QYN(EP<Y_)4W*
-M`K.2OJ@5.&HEWB1G0J*R)UQ5A_'#3!8XA62.?Y\Y$,7<2G01T?"0__'45R?L
-M\/=[</CH#Y10=Q*W1LU`"P#L````[`````(```!%``#H75P``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y6`>3^X2N39(C?>U(9[N3W"X@)"`````%````S"$``+#E
-M##\!;7W-;PJWR2'`!6P6NOUC?,,=$YPA-7R3EAT:OV5B"0$?2*$[<C6].%L"
-MN);4U3Y$AM(A%"4,10;OPB[S?+,:S2*C>3*<O:8&O/SC\MYD,H'(:.FL"NLZ
-M5O8^`@^D#>[>/U2JV7:SGS1)M%3]J/<Q5B#2M(HAPIY,FWK[YM$$)DFV^";H
-M3QZN;T,N,QA85R!P^?`NHD49*LI!\@0A71`&&K1!_5H;L!X>=Q*W1@I>"P`\
-M`0``/`$```(```!%``$X75T``$`1``#`J`$!P*@!`@'T`?0!)`<)6`>3^X2N
-M39(C?>U(9[N3W"X@)`@````&```!'"$``0#F#/K[7UPOZ,5K)[`EQT/E*>5W
-M3Y+8\A^_R=@!AR'N&J5(O:C&E4K!T6+6%I$X&^^UDCQ",HT<$G/1]%7T7"D`
-M>^J^6`)74S"21E^DXA8J;7HU![X?`,8ZBV1P]?:M^+AV/5$/Q1S6E.>=^BCL
-M-C@2N(.C$4,GTAU@@Y+\F!JLQCL`^B8TMPL4T!2R[^52D(CM=R??W+`R.^F(
-MHP#A9VMV5Y,`&849=!XRX#0QV?3,^DIPE[*."ZU&A6/VW$`KN#L_$BG**'R6
-MXVV8+\RX5<*`R.`094>'IIY;%:'Y8CE1X3MU;K9GFOGZ?F2ZJ<,\S_H-5U*V
-MQ#BR&V\N8P%W$K=&UVD+`!P!```<`0```@```$4``1A=7@``0!$``,"H`0'`
-MJ`$"`?0!]`$$!^E8!Y/[A*Y-DB-][4AGNY/<+B`D"`````<```#\(0``X#-(
-MSV5-^E,.1F,N(LSC@3CL32NNBP)FGS#?S(>8"/A;@BLA(6J2!S+/TIF4ZL'%
-MFA34<*Z'P<$$@O;>1`/G(]QRLB='`V#0?G.*BT\981B;\J.3/F*A39]33&=#
-M'7\W*@$Q9:H.>0B;=S,!%56C4S81GE-U/6EKLE"E[]`@IKF-1#GY,5"A&WP=
-M.3AU-6*F1K3H`W$.,%9,TQQMNJ")VU+LT4/=R]QU$9N-ZYNEI4A(0<%K)E%F
-M[4X<1V^]>!["LH/L@&',I2AB3NV_ER-MOU%7GCO?[?OQR+'"'3]W$K=&('D+
-M`.P```#L`````@```$4``.A=7P``0!$``,"H`0'`J`$"`?0!]`#4!KE8!Y/[
-MA*Y-DB-][4AGNY/<+B`D(`````8```#,(0``L-U.,[A;*Q/=527;*\AAM4YN
-M-\"#UBBIQKGZI+6]5?L^SS;(<!*VF`*BX:S]AG(:N43-%6Y]_;/0HA"VZ//Z
-M.O$OP:\XQ1-&JZKH(I:";XD2=MCHEOB]KWR"XOLWS3QPYFH#1PL%D*D7\&0O
-M<,X84K,B\MD]!FOU_3I[")GQ6:5L&4/V=\KO;0)$5^"B\\.6.W^7I$0X2A9P
-M?T/1SYLFX8@P6>D]2`@@447;%HQW$K=&2IP+`.P```#L`````@```$4``.A=
-M8```0!$``,"H`0'`J`$"`?0!]`#4!KE8!Y/[A*Y-DB-][4AGNY/<+B`D(```
-M``<```#,(0``L!^W6NN)%ZRCNBQ(8A[_CM>'FV/VG6V[_79L-@A@PQH!<(==
-M!T&B4A3T'MJV`N;N9J/B?.(W._!*9\CD49;:1QY*B<9L_39KXPHMGJW?AZ3<
-M0HF:>7/,7(,$E_Q:'M?$5O$+M34@Q4-C8O<>NXGHQZ,=_(>+#K\).O=7+JN^
-M.8B8`PNB=5@N!F.1T%00$FY7+68A4PYL@U-#V6S-&D7GZ>KURO>"YS'@Z):@
-M?,5W$K=&@<(+`(P!``",`0```@```$4``8A=80``0!$``,"H`0'`J`$"`?0!
-M]`%T!UE8!Y/[A*Y-DB-][4AGNY/<+B`D"`````@```%L(0`!4#UY0AR6>IEO
-M[TZ]_J3G2:QXKRQ7BDS"GU0X">TW9`W:=%N$US3N;>=GP`1P1:Y#\9S]D51+
-M96]ETN=Q^,!E_Y0)VIE2)W%J\;D++VEZH(M?D9+CBX3T3I^C3M+?SIGQ6+T]
-MOO/)U]T.NSNFFS&8/A%)6:@!W\"4[EQ+)('@VTS\PX-[PM2@GFEOK5'UWTY2
-M5V-"\+KN,_"\Z-UA5%CQ,FW1!>5+=['J)7]5`V@D=4DH4WR\$,'8J'U-JE]H
-MP;BJ<Q7C1#GW%6WONE9FM2][8<9`X7GGEX;;#VZ-TT(\#!)/:`0XH9$WVOIU
-MGE#P)CF:MA:'$_<G4)_L86@@:H8EX5:;\QQ#N+F2U4<"0S(#!2;QP"06%3C#
-M$)M:^S*4#3>.F6Y`J&8';+GX?1CA6Y7<MI#0[G6(<3T,#-1GZ%O0].">0/$F
-MG`(!QJ^<A`NY=Q*W1J'W"P!<`0``7`$```(```!%``%8760``$`1``#`J`$!
-MP*@!`@'T`?0!1`<I6`>3^X2N39(C?>U(9[N3W"X@)"`````(```!/"$``2"'
-M=/8L"9B?KA%`X*DY'"Y+F;6+:O#H[G1YF/*H2,+LS\5V+JA)CRYFJP.+%Q97
-M*RINY[%^>[D7=V5K8`PUK@`^9`B?$]DNWZVA7^0F&K<;HW4A]1R^7BO6*KTC
-M[)V*6D8QTH;OW&,1L`<1Q[T=PDXBH=`%I^GJCI(>'Q]38^2@S0K4Y=/;&R9G
-M-5XC>E1'Z]J1<X*)-5!X;&"0_L!*'.5'7NP1A='NIG%MK?SK_EN?[LV$2'8+
-M]'2";0.[9+.%U"IP)%6I*P$>$%7E"4;%`++9VSD<9)D0];PIVHS8:2\;]Z$1
-M.+?IYST,'4+8JTN-9IES/=O\IBY[TK^$Y$%PN,-)8G&QOG_BB<)"MR-.KN@_
-M/WIJ@]46<@@CFX$E?W<2MT9W'@P`?````'P````"````10``>%UE``!`$0``
-MP*@!`<"H`0(!]`'T`&0&21MD"/E9>T<VFW;CG>'F=3LN("4(`````````%PJ
-M``!`M9L,-HX)RFA\?PRAY+=,1<&+#]B2\DK"Q50#DGOH0=--2,E\*WKVH&:7
-MRSMDU5:WD$@N>'4XJR`\*4&E=Q*W1@XJ#`!L````;`````(```!%``!H768`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y&V0(^5E[1S:;=N.=X>9U.RX@)2``````
-M````3````#"<D?T:A#_8^;.R'>YI&>BG[N<"J!-]C);FZ)LP;8<2!=H38^M9
-M+"USPXR/A7<2MT;4.`P`;````&P````"````10``:%UG``!`$0``P*@!`<"H
-M`0(!]`'T`%0&.1MD"/E9>T<VFW;CG>'F=3LN("4(`````0```$PJ```PQ6=.
-M>=U"4"U?"(U5+Q^4RRA7'.@:&LYOKQI>#^M47F.2_(/1!/B&,]IH^.9W$K=&
-M0$8,`&P```!L`````@```$4``&A=:```0!$``,"H`0'`J`$"`?0!]`!4!CD;
-M9`CY67M'-IMVXYWAYG4[+B`E(`````$```!,````,.`/F$BB).2Z-Q$[L\BR
-M@UN+]C=E"PL*)K4A3<.^EKJ7V6>AZGO-O=O4NOD?=Q*W1F9"#0"8`0``F`$`
-M``(```!%``&476D``$`1``#`J`$!P*@!`@'T`?0!@`=E%*H^'`2.)5D`````
-M`````"$@(@@````````!>"(``'@`_P!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``K?JX#8GS6QS^9F#P%\$%)7?QMAP.*/O?_Z!FK7.3N4!FN$YA
-M_!GW_5-4Q4Z<996L`(LOL<9/K4V9T_P-,E3X&#G,LDZK]2F>&0/SX$,AN"B7
-M7I$OE7_JT$9YYQ<]&Q2XWH,DT4;.?"X2/)6QZKV0QT(%]GH\PA&-_RSR`+EZ
-MUE<I```D^AY^@RE"J>9?T%CZ9-I?`O\LB;/]$&&6<HQF9%U)ENLI```<``!`
-M!+HL/M)6ZS%[B]CR?!!="X&Z^]`N````'```0`4^Q!\K)A[#\PCR^&,B11)8
-MKS;W+W<2MT8R40T`7````%P````"````10``6%UJ``!`$0``P*@!`<"H`0(!
-M]`'T`$0&*12J/AP$CB59```````````I("(@`````````#P````@``!`!@``
-M``>RX/%23O[]4/GE#4,`6YPO'68MD7<2MT8%80T`N`$``+@!```"````10`!
-MM%UK``!`$0``P*@!`<"H`0(!]`'T`:`'A12J/AP$CB59```````````I("((
-M`````````9@A```@``!`!@````>RX/%23O[]4/GE#4,`6YPO'68MD2(``'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``K?JX#8GS6QS^9F#P
-M%\$%)7?QMAP.*/O?_Z!FK7.3N4!FN$YA_!GW_5-4Q4Z<996L`(LOL<9/K4V9
-MT_P-,E3X&#G,LDZK]2F>&0/SX$,AN"B77I$OE7_JT$9YYQ<]&Q2XWH,DT4;.
-M?"X2/)6QZKV0QT(%]GH\PA&-_RSR`+EZUE<I```D^AY^@RE"J>9?T%CZ9-I?
-M`O\LB;/]$&&6<HQF9%U)ENLI```<``!`!+HL/M)6ZS%[B]CR?!!="X&Z^]`N
-M````'```0`4^Q!\K)A[#\PCR^&,B11)8KS;W+W<2MT;?A0T`4`$``%`!```"
-M````10`!3%UL``!`$0``P*@!`<"H`0(!]`'T`3@''12J/AP$CB59GC-'&P0J
-MG\DA("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@``
-M`@,```@#```"````"`0```(H``"(``(```M#H`E3E3G+;R18DG[]%6$B5O0H
-M^%FSIZ@$`$A0V!),G>)R*C0-J!9G\YM6PO1?&N4S$4(--N2H_,2?\[`&KX=_
-M"*QE_.DN_O!]78UPZ3Q260.HMV34:R':K/A8C*(IPY0C`.$XWW]%W+[[6K#<
-M8_;Y].Y](DUV]/A[HNF%&T']*0``)'Y=AE+F_8H)Q,:):2:DO7"!KHS?*L]-
-MR"XE2VU8&(S&*0``'```0`2!I[-"*B^>V#U@*(NW2BPVI@6C@@```!P``$`%
-M=7Y$AC;8/E5_;*YVYAZ6]5&=MH9W$K=&5+,-``P!```,`0```@```$4``0A=
-M;0``0!$``,"H`0'`J`$"`?0!]`#T!]D4JCX<!(XE69XS1QL$*I_)+B`C"```
-M``$```#L(P``T*YCC96K&MU`[G46;+W[A]2D+@*QVFX0$QX.F7D5@2NWG_JT
-M%*XX,N9`)490*#+=E6?B)]2)(#I((PI_^RX;$2F[^"FANNY7Y/A[-A1X4L03
-M68=FG11>F-^0AYH>T_S[<I9T;+@AXN+.IMW7:1X`?-T'<?(7]N/*@>#>F5.;
-MWUX[VK+$6Q@JPD"U*Y:V@$$HRP*FUB,$0HUCYX`]KLK14%[][/]<H@0MD;W3
-M7AK)K&*J%1HUW8D,%WM)K+12RPP[V3AFTNBGM<"J"]<KR7<2MT8XS`T`O```
-M`+P````"````10``N%UN``!`$0``P*@!`<"H`0(!]`'T`*0&B12J/AP$CB59
-MGC-'&P0JG\DN(",@`````0```)PD``"`!M105F*VMC&!\+-6=U__OQ&Y5PU'
-M?^Q/&"AH2MZ2-2)LN3:BD-R3&TMZ_*#_V"FJ94>'`G"MKW\!3<RL[AI"?@3Y
-MF]&TF>#YOLEL:>F;M3=EGFI)DV1L*:;X8M2G>R+PPCFI[>3%<>=L=8FKH>>;
-M&4W7#DZ'=8WR$!@MEW<2MT9OZPT`'`$``!P!```"````10`!&%UO``!`$0``
-MP*@!`<"H`0(!]`'T`00'Z12J/AP$CB59GC-'&P0JG\DN("0(`````@```/PA
-M``#@7P"&O.8[/]J;V8BU3KE"`OJK&DE%\%Q=[T<IG]R^T.(*"<VW9(2U:6!(
-M$)][+-A:OOS)+."`^R6J@E5SY"S401-??/_9YR[W@*(VE3.9QR5I?24X:TKP
-MVTZI)0)3P:9D66JU91\M-W(B*6X%O01L3UWO4[@OO460;QP*&\%JMQ7D>$'=
-M)9?4`%P(&ZS*7'$-]E4#^)0P$CBEIQ:<&Q,.+.OTZ5;RWPM"L'NR8G^F`F20
-M93)>6%&O=-=+29^#,%35M%4O.=1*_>:`W+GT-MU6?Z^QR0N%V#O&:.MKH'<2
-MMT:H]@T`_````/P````"````10``^%UP``!`$0``P*@!`<"H`0(!]`'T`.0&
-MR12J/AP$CB59GC-'&P0JG\DN("0(`````P```-PA``#`DVJ9N;LH_+&W;M-C
-MI#9E@'6>._[#ZPZ8!]%NS#?K&-&1<R0=L=E]WO.*53^N34M,94CJ*HTL?%.Q
-M9GU'K6#^^>B*?5V!<5NUT`!M#K=^1@%_G^P89WH(8H-'GJ440IM4LQ&WX8&5
-M9&3=6?L>WT8ORPYJ'39(A*N-'ISA!SSEYK<7=2MN;"9C3<;9YQ19M_L"<GC'
-MD^86D6H&KOPFAMX$V%F@&DO_T-]D3*\<M<PKM*Q*Z/8C0.`LXC#+TQ%W$K=&
-ML0$.`&P```!L`````@```$4``&A=<0``0!$``,"H`0'`J`$"`?0!]`!4!CD4
-MJCX<!(XE69XS1QL$*I_)+B`D(`````(```!,*0``,$1V!J-WY/!=:P]/2O8P
-MQ7T0GH%4A37"952AI!&?\=L5]4O(@(,X0_-8`YD"=Q*W1F<=#@!L````;```
-M``(```!%``!H77(``$`1``#`J`$!P*@!`@'T`?0`5`8Y%*H^'`2.)5F>,T<;
-M!"J?R2X@)"`````#````3"D``#`B0_G*`'9WDJEC;":\M@&L77XA5X_RJTBO
-MJDT]?Z6,0_0XK0BZBTM7>2$R%7<2MT92.`X`/`$``#P!```"````10`!.%US
-M``!`$0``P*@!`<"H`0(!]`'T`20'"12J/AP$CB59GC-'&P0JG\DN("0(````
-M!````1PA``$`(J!L6`;<<"T-CR4^MF[UV;T0%FQ7*MU8SV^%Z.MK0$^TE!`-
-MJUK4P$A>Q^:>YA-=A^$(O2\YVC=;G-6*U=YEO52X+XD_,Z.G#V8*9&N,$7X!
-MKS\P1/YCL55V*^R+,8(A^>:A6,^MHDI;`VK4A'RZX%/`F?H:'+$M\:)-"9DI
-M;]'>YJ;K!CV4MGA8HOKP$4+7S6"$%&GY-\&=`1=^E5D_\CEW_5;:E'OR*X4'
-M\<'SK]QD`/C2D3B;D8>*1>X1'V+AI6G&-<:-4)<&V"+E7>77</6C2T*TZSNV
-M_B6?O$=50HB"G(4R`W+C$!0%*Y^_OP=WAQ$&]U(;39+$.A+F=Q*W1GI$#@`<
-M`0``'`$```(```!%``$8770``$`1``#`J`$!P*@!`@'T`?0!!`?I%*H^'`2.
-M)5F>,T<;!"J?R2X@)`@````%````_"$``.!_)KVVZ,(2X-SJ^L[FV'*=K[K%
-MXZW%6*OHU&1B9)L!C;6)WBZ`@`[K83HO(1M2E%&E>R,KO@L,%F.]#(%6D#O]
-M&==W\TYN8)%7-=CS4L!Q/^C1[3>KKC\:%T=Y^2R"[.?LXQYU9=6:%?#`X,-[
-MZJSDOJ%Y][KP(UFN0!$()[C*.(U,BHT41UCY:6=XG-(<VNF)![G=.-)1?!<\
-M?-_Q5>5^/1H1X_[YP-_K.775A\.W'E<F]A^SKA<*%&Q-<O_ULT"*??-A:;CB
-M=:IBI@ZD>`=71"$,E2"RXAOZ"4QB=Q*W1H%4#@#L````[`````(```!%``#H
-M774``$`1``#`J`$!P*@!`@'T`?0`U`:Y%*H^'`2.)5F>,T<;!"J?R2X@)"``
-M```$````S"$``+`)$0/9N+)H/OT>G7T7<,,A]*"5'.B<<4XI[5P_J6;<LY@5
-M\9*&A:A+ZZ9=@_D2'Z!,8A_3@DV$7&*5`Q>Q9M$N(;+*^OHP+_O=-4D0O[;0
-M-C!4XOYWSD+7E.)YE\'CL89/-&Y+32G2Q<KTJ_4<<=$8@Z*7J%O*F$9BJM'.
-M<.F'+TC]PJK84_]BC?LL.,,@.UGG-=/^\N3(WXF=8&7P>S!1A*P@XP/QR255
-M>CO:=Q*W1FAW#@#L````[`````(```!%``#H778``$`1``#`J`$!P*@!`@'T
-M`?0`U`:Y%*H^'`2.)5F>,T<;!"J?R2X@)"`````%````S"$``+`1F&.:]DVB
-ML)7:A#F=2;FQO'^*B$"`@`;>839Y`[J1MNY&5ZL?/WL0MSC,]^&VSP]8;YB<
-MSM'MFCWC"<"T`"D*#9G9,@+C+#HRZGX][B]Y7JCX:)._#VKIRX24V3"62&WR
-MMDUA()M(XEH+:@:ZP<356Y7:<@IZR?,[N'ETJ$G<I7XZW1$D4%T:6$6`AHY&
-MT:9=R=)L1I_C4BI2]'X>;BW<RT#,%BC#QD"]<%^+=Q*W1@:5#@`\`0``/`$`
-M``(```!%``$X77<``$`1``#`J`$!P*@!`@'T`?0!)`<)%*H^'`2.)5F>,T<;
-M!"J?R2X@)`@````&```!'"$``0!SJ(YY7KAJ@B#EF#;V*EY,RG36:Z8C"0:8
-MUZ4@YU?]=?53.E5!PR!ZH?;.H6KQV64;<"25@VC^%W]0[\3<3T4.MA7G'Q`[
-M[JY%;]GOYY/%#".6^5Q75VNW%/<9SPY2QM6,B/,YD]8\-$U13/#W:<UAE(C*
-MC-<_Y37\=FC+*\L&I7=*W'(0^,]#L(':*/T7/L$E)R-T`K\[7O5D#D"BZ-&J
-M'EM3:,IS]$?`-'=?4M2T/UX6$NL)1ZO-?B$V>'`TSS^7]+#(N=*>[E5UL*33
-M=X@?=M6GF*\V+)G.Z+Q**%@5HA'/LVM3\-/"5DE"662P1."*1V]IR8]30X'*
-MF"-W$K=&LJ`.`!P!```<`0```@```$4``1A=>```0!$``,"H`0'`J`$"`?0!
-M]`$$!^D4JCX<!(XE69XS1QL$*I_)+B`D"`````<```#\(0``X'</DR/E'NW^
-M).]1Z'@8D<5G>YM`YZ2"9D=&J=0&R6EY'XV64@`LI8C@;IW==C$!W?OYS?`E
-M-D@KR_Z8[[U%B>&A@C;+BH*'OWA/H(/1#;51OZ,.0Z9]<`"2R*+H:I#E]%UD
-M^FZC_/K?(/&_C6O.[YJR[O\:L<K)VN/`))5G_<.F1BADU#!S+8J,AQI:(&S2
-M9GZ@>J>.$P^R8.?W8FJBD[7?%C&6\NOW,S=-\+B<(6>S,HPB@-_$7IPGI2$S
-MZ<B$(Q>MT#\8C(2#FLA3S^XG6@BY0S8&Y-/8LV"L.0MW$K=&F[$.`.P```#L
-M`````@```$4``.A=>@``0!$``,"H`0'`J`$"`?0!]`#4!KD4JCX<!(XE69XS
-M1QL$*I_)+B`D(`````8```#,(0``L``CB/*ZKV:2K.&;9`=(I=A&U"VJ:&G$
-MUMH9I1&X:3D]\PRKZ0[A00-*?*A5;0LS=1FEF\?LHE&0E^XK=5F;S(8KMXW_
-MD+#"_I""ZN9]S1HY!$81_L(ES1:`25C2LU<+M$&3"1EF.O9D`>3]3`R]6A)V
-MYW-35P^#I"<F"WKJP,PJH[(/C7U&``IS3K#[ZI)L<$C>=M'?OKJV0+6&%P`3
-MD[Y\+)AO4JYTF(V97O5W$K=&&-4.`.P```#L`````@```$4``.A=>P``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KD4JCX<!(XE69XS1QL$*I_)+B`D(`````<```#,
-M(0``L(,9E0!]7_57,47^54S>(H[:4N)T==F/"F;]\._4Q?(&E,?T,U\AM*Y[
-M0"B(KP+Y@3<%JDHG9!).SPSMD/@MX6=DY>AS=I4.:NU'J["1#JJQA)R^$7+A
-M`@3CX3D3.S6%EJ:'&IYA.9$IM1C2PUW3E>UJIG#6Q$-S0/V7N2[@Q^KAP:T*
-MEO%7W1[!/QC(AJ-K`_@M*1#J7LD&M];"[/&(6QQDFVG9&`\.LDZWL<5W$K=&
-M"?L.`(P!``",`0```@```$4``8A=?```0!$``,"H`0'`J`$"`?0!]`%T!UD4
-MJCX<!(XE69XS1QL$*I_)+B`D"`````@```%L(0`!4.D8`;M^O5?D()^ES\J_
-MX>ECCT("^<*A2=T^7'%?MJP62<N]TT@#4-]6^N0K[TA;IYB*P7@@K%G\-\\T
-M/^H>A871K^&DET])_#=A-8[02`V>]?^)-8'K>3V=L-PVX`1HH\[Y4X&M=H,C
-M3L,ELZ*B6''2C6J_<,!U!(XR5<!.D2!A0-!VV*!3W<<8P&9:`H":#<>>?]>T
-M.O%`P:<$&"KLT\GG]Q*\]Y>;6A[W.4DZZ-Z3;Z26M2J7`41%++6)3E0S..P\
-M9F#)ZW;:&S02+;7KXNVC7/T2H(HMN#>`@3OFY!7302R6)4*2=M)A>L$JL)3G
-M-8_A1.G;9=X"*;[ON\27_D($@N8HX)-40H]U*\,&(7QI=:6,Z41Y$G0C;74I
-M?LLH@#]+WPO66`=T.[^W[]\MW'2ZWQ7XYMJG<*FJT2E%C#9)$=[!ZA*%R^%6
-M5VDW=Q*W1F4P#P!<`0``7`$```(```!%``%877T``$`1``#`J`$!P*@!`@'T
-M`?0!1`<I%*H^'`2.)5F>,T<;!"J?R2X@)"`````(```!/"$``2`;]$3^.&*%
-M#E\4Q5R0TYN3MP&XUG7@Y&!8?&N""Z8A>[#0=?/OU''W^&#L"/-P0M]J*(3>
-MB"ZC1,0NV[@T>^F=&>93*7?P^FS57#T-,`3'2)9I1(G#GKR_%45BR;*.("A)
-M$?RWNUY\4GB4.N0U\:_(MW>$G/&1*PO?!$XF=D0_1617"]6F3#*GK7HS*`H0
-ML\V7I.<@6[?Z3*;7-88WH%&@E=G-R`(HY+-;,E/,TO@Y5\*C=<5#KFZG37?]
-M1,;&W.*/E07QIK[%=40,`S@0C$^-LU9$$2=%%B>1?;YC,Z*C_T/VZ1@=Q:48
-MY1C6EGP)C.K./YE[[SS+R?/0RYG+?]CZ.2@!3\[U'8>94*0*R?W][)VOQ!`X
-M+@]+L?]V?G@2MT;7%@``?````'P````"````10``>%U^``!`$0``P*@!`<"H
-M`0(!]`'T`&0&28%<>U;`+Z(H:6Z"J\;!'>PN("4(`````````%PJ``!`5B[X
-M5%LB5??!H4!*,`4.5,/!:AGRG`DEO]MWJKHL4]SYOS<<31$2#B1WQ$GMPX$E
-M0YPWXIZA_B2,F6>:>!*W1G,B``!L````;`````(```!%``!H77\``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y@5Q[5L`OHBAI;H*KQL$=["X@)2``````````3```
-M`#!AYJD>6+?K253_0]*AZ2OO!,3F%V7WV1A`N/N?Z':=Y-U4920)IPG9$SLK
-MCW@2MT94,0``;````&P````"````10``:%V```!`$0``P*@!`<"H`0(!]`'T
-M`%0&.8%<>U;`+Z(H:6Z"J\;!'>PN("4(`````0```$PJ```PB>:F]XKR*EO'
-M@529/W^6M'(^7Z'D#6'@Y4_(^3TNX-4C8@'##$KF?^F#SX=X$K=&M#X``&P`
-M``!L`````@```$4``&A=@0``0!$``,"H`0'`J`$"`?0!]`!4!CF!7'M6P"^B
-M*&EN@JO&P1WL+B`E(`````$```!,````,!M)SNHE<%"ZKL0./(E@LH,-553U
-M%-G"@AK/S1%_Q[-U`W;MG`U^9K(#L:<Y>!*W1FXX`0"8`0``F`$```(```!%
-M``&478(``$`1``#`J`$!P*@!`@'T`?0!@`=EI,=_S@QR+IP``````````"$@
-M(@@````````!>"(``'@``0!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``G]TED7@,P7#RX`1,^GZY!J`!YO?W=^:AW5G(<V#RGULJK"!"'UPOJV?D
-M?!B/X*KJ;B-6(0GG`RA_T3!3/T-A+/.PB)&:V.P?`3ZTNY[S\84&"99Y%?[9
-M$?70!N*PHMJX]C#+3OP/9Y59@45Q5\!Y:MW^85'_`$_`P@*-.81<[9(I```D
-M]KZ]EP]V6?%7$0("4>@OT-)!/IG]L`D(Z[98BFJ'+_XI```<``!`!#)%$4RL
-M,`A:3Q,MY\+HO&_Z8*4`````'```0`6UL.XHUL%<IGWN:V:V7IOT!-V:HG@2
-MMT;/2P$`7````%P````"````10``6%V#``!`$0``P*@!`<"H`0(!]`'T`$0&
-M*:3'?\X,<BZ<```````````I("(@`````````#P````@``!`!@````<*"D_)
-M)A]D/^"\VG>BON$@6%(.J7@2MT9H7`$`N`$``+@!```"````10`!M%V$``!`
-M$0``P*@!`<"H`0(!]`'T`:`'A:3'?\X,<BZ<```````````I("((````````
-M`9@A```@``!`!@````<*"D_))A]D/^"\VG>BON$@6%(.J2(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``G]TED7@,P7#RX`1,^GZY!J`!
-MYO?W=^:AW5G(<V#RGULJK"!"'UPOJV?D?!B/X*KJ;B-6(0GG`RA_T3!3/T-A
-M+/.PB)&:V.P?`3ZTNY[S\84&"99Y%?[9$?70!N*PHMJX]C#+3OP/9Y59@45Q
-M5\!Y:MW^85'_`$_`P@*-.81<[9(I```D]KZ]EP]V6?%7$0("4>@OT-)!/IG]
-ML`D(Z[98BFJ'+_XI```<``!`!#)%$4RL,`A:3Q,MY\+HO&_Z8*4`````'```
-M0`6UL.XHUL%<IGWN:V:V7IOT!-V:HG@2MT:U@`$`4`$``%`!```"````10`!
-M3%V%``!`$0``P*@!`<"H`0(!]`'T`3@'':3'?\X,<BZ</W<)1_IS?],A("(@
-M`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#
-M```"````"`0```(H``"(``(``#E8]>.6FQ)8`,=F]()=8(UD=#:_C:RC08\3
-M#+,P):5H0*/[8[^`[V;W?_T@&XBEE-"BJQ%RV-])(-O%C/!C!R'N`]%&J9=A
-MO3C>V-<;!^=,UZ$*W6YRU!71(P+:";TS1"-*&E#T+-#K;^I;8N!>"F#D4,X3
-M^SRC5#WHGZB6>B3R*0``)!HB8V>B+^;EO-$Y[B4A8JHK*N#QVQC4J"1P@(LD
-M>H/W*0``'```0`2UK0,4A':_=THP&$V;7KM[AT/H#P```!P``$`%I9S(%:['
-M!G]G+/K[!:D&0(W#U?!X$K=&TJT!``P!```,`0```@```$4``0A=A@``0!$`
-M`,"H`0'`J`$"`?0!]`#T!]FDQW_.#'(NG#]W"4?Z<W_3+B`C"`````$```#L
-M(P``T%$`.Y!AL@,$5)>"E>^*Z,DF.Q&</:M5H;SH4(QDG[NF&YNE7PFT*V3Y
-M8=GHVR>R^?"Z6;4O[EUSU6P5/0^4[2$Y%ATDP:TSB\-95\KZAPJ08=9_HCH1
-M/VHX4=,W-0`,?QO_)*#>C(B4>+>L6(%,VSX`'D8NE6&%-Q(L;LV;\Y!]YM&B
-MQE]7MVR;1A>"'GH+/=*3\""`\YK9?^GBJE&T/@?=?B56'7ES6<'8X1P(&-*]
-MJ=R3!@X>]F@W85W(075SC"C.;,C7QAS5.;W@$7@2MT89QP$`O````+P````"
-M````10``N%V'``!`$0``P*@!`<"H`0(!]`'T`*0&B:3'?\X,<BZ</W<)1_IS
-M?],N(",@`````0```)PD``"`=LZN)^GUXCVS`;<7PZ['AARV`\DJZHI):AAV
-M&K/8ON1,]E@-:ABB#7&QL_L*C"\9$@;<0<RV3AWQEZAB`=*V!S82@T.KWRO\
-M_UK4Z:XO/GR5JF*[&GI:W(,+:;B!4._O-?%$=EX=*AMBV0<S@%4E16GQ3%G?
-M_*3?4[??,'@2MT:1Y0$`'`$``!P!```"````10`!&%V(``!`$0``P*@!`<"H
-M`0(!]`'T`00'Z:3'?\X,<BZ</W<)1_IS?],N("0(`````@```/PA``#@4@."
-M=#-P`W@URK[ZL8B2J`B#LGVXG!T]BEB=!"U-'57>)C"UL=MDL'K)YW0]\":U
-M%^/]$B*Q5>,9I&"%4B8W#*$^KA,'.;&Z/B%D<<7OB<9VT[U0J"-%%M$O'9"M
-MJB6R<2E"H8$]CSNMPWGH:)_%[4CL<R!Z]=6>[]E1YRDK]-0X>')0+O74X['-
-M%[[8H\1RH9`IW'1,G)93Q3#>>NQ>64>;Q/VU:]W.R&]QUP3JK`41E8[RYHBM
-MQ(Y7*P?%3;SUZ4>!F>U$BPKR'/UYVOT;]_9*Y3*<BY6A?1"PU'@2MT8G\0$`
-M_````/P````"````10``^%V)``!`$0``P*@!`<"H`0(!]`'T`.0&R:3'?\X,
-M<BZ</W<)1_IS?],N("0(`````P```-PA``#`>YF;EON+2YNQN<_6\[.58RU7
-M@!&5%7P7:$$2*HD<DT;NW^SY]C9Y[1Z[J?6D0UR`C;Y'M1WSTU7`0%9BCSQ0
-MK<Y2HCLA(5+%0>O.!288C/S1?@4<Q<T<ZW!:`<Y?Z*=&UHY%)"V7R.B<ZP(Q
-M[9\,;$!*G-5N;@(^VRI\H1JHY6>T(N/IC#XA"VG5KA86I!35JC`*(HM!"&PI
-M(U;/3RD*8VJ(D*3%Y6(0U)":"RS,:C'&O8QZ;&2L-M5%7T-X$K=&]?L!`&P`
-M``!L`````@```$4``&A=B@``0!$``,"H`0'`J`$"`?0!]`!4!CFDQW_.#'(N
-MG#]W"4?Z<W_3+B`D(`````(```!,*0``,)5UHF?W8B$3I-OAQ%#'?^Y023K8
-MA"R76_@JN`C#+>S*M+_D',].`+H68K%Y>!*W1G%R`@!L````;`````(```!%
-M``!H78\``$`1``#`J`$!P*@!`@'T`?0`5`8YI,=_S@QR+IP_=PE'^G-_TRX@
-M)"`````#````3"D``#"GKXC13.%I"_/?M"MS'8-`I/4!'F6M:35!U'W95E)4
-M@IE+;_YG:776/O&4VW@2MT9:C@(`/`$``#P!```"````10`!.%V0``!`$0``
-MP*@!`<"H`0(!]`'T`20'":3'?\X,<BZ</W<)1_IS?],N("0(````!````1PA
-M``$`]D:V1DF%JQNF3/39\Q/%#8=F[,/-/>8.6PA-Y628),:_\)["RW(\W..R
-MH4UG3^_JZ0!%:0P!K1ZI*!MU_J11K*A8!G'E6A:R+IWOQF'FE3&I[!D+R`K\
-M[_N)G2RU3Q-L(7:#2D,5,V;8P;8MY*?U:F65>6;\Y8DE-T:_@-9\]I*8!7N6
-MWC;PCLC*G:N?YA;DHVF2J\DZMW'[2"6(\5=_HI:W*'Q10AL&ZZ')/&YATY?'
-MAHJ^&_1:K`>!QR4E*G3@V-=8-P`=Q<E]NRJ:+%O%_[A^=O0N&)U</@KF3&8/
-MX2\6/CNV_7%H]:TN$YGF-0!X:KNPPD<R/!'SQ2F5>!*W1M29`@`<`0``'`$`
-M``(```!%``$879$``$`1``#`J`$!P*@!`@'T`?0!!`?II,=_S@QR+IP_=PE'
-M^G-_TRX@)`@````%````_"$``.!JE'QE%6]W82M)NGBT"J(S)AT+;$Y"`U_\
-M`$_\Z[@Z$N("[G-4R0R0\.2><WH\A>66V_8/SY`%B%>+4!?XPZ*![>Z3D2A-
-M&P^0YTY-[>VPHOC&WXVDGPF^I)-OLKR.T&PS`>!]?;DC^7+["H('0<]T.2X%
-M*WJ,ELVA4*LO`%R'_#HU3<#J4R##<=K%O:N.K='S[@)%V#.&N%D.&<@E*4#R
-M7,]?`E\.#2G2TX,L>;H)4(.EH>^2/X6S5'>-20+"&$`W?&"^)8^N)=ZUG$EP
-M2K3`[Q/86)V'RLN.TH&;>!*W1DZI`@#L````[`````(```!%``#H79(``$`1
-M``#`J`$!P*@!`@'T`?0`U`:YI,=_S@QR+IP_=PE'^G-_TRX@)"`````$````
-MS"$``+#")YE9UO9F+:L'&8*;I^\)Q"ZM5:3+V12P<'EUJL0*)$WG%JW376D]
-MDY,.5H^"M>W]%AX.KOJ]9E>L=N8XF:#"4.<)PPEV`$7PN>./:5)O&)#\Y^:&
-M_U`09:]^>N.]2RUAH<$2%5\>?X$2'3/!/MJR:C&U&(U_\0*OR=#ZX\YE)#@E
-M&(U*.WHE''AW)I3,+U%'\FM2`')V-2KSFHP;O7;9U)Y:!5/D3_1.)SLI>!*W
-M1ES,`@#L````[`````(```!%``#H79,``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-MI,=_S@QR+IP_=PE'^G-_TRX@)"`````%````S"$``+`F55NR_$4?T&W_&9N]
-M^VOIJ`PYANIVM*FQ(\5O2A"9U$+H\R^_&-$O3'KSSQUQZBCL49\"=$]X8^^G
-M.6#YR7*`[ZB-SJ[LKO+IK]2_Y<2PIKQ5YE2)S_+SOM(_@TY;`]N78B^M_WAF
-M0N-*YD/TS"1C\9#)P]N[[_U3+_4Z\-#(JOF2FIA/_4(SM(J`H;-^Y;YYQUDY
-M(N1R/5^25EF:5IN@':?)F9G@N$%PWN-(>!*W1I?J`@`\`0``/`$```(```!%
-M``$X794``$`1``#`J`$!P*@!`@'T`?0!)`<)I,=_S@QR+IP_=PE'^G-_TRX@
-M)`@````&```!'"$``0"Q.AZ(ND4406KU3F#N=5SZ5JK+NA)/'*3'7T+!CR%)
-M!E-,E>)[6*+&E.R]W$Z:CXJ[@LN`<:D2OV7=8O\2ZR:I(,IO6\ZF+NR$?AS+
-M:6<SZX+Z30'GJ3+(SBDW&5^&G"ATG10^\L:(*S1$ST6<YEY6S?UXF5(N#T3<
-MPP9KN3)>%WQ]C4@5/R`6\)P#A`)U["FKK9B/KV'!U22=@$K/S+`TY+P)6!?K
-MJ244:H>C>)`LVZB+"S4UNS[5KG<S]5P`0L9#L,J35RJH2[RL*J6NO$"/D0`(
-M8V)M*`7Z/PU7/Z<PB)FNC=:]'`6.3@1H`CU6[KMF$GG[T1[?=H7`J&UX$K=&
-ME_8"`!P!```<`0```@```$4``1A=E@``0!$``,"H`0'`J`$"`?0!]`$$!^FD
-MQW_.#'(NG#]W"4?Z<W_3+B`D"`````<```#\(0``X#8%88PYKF&`9H=PU0>.
-M\V<*6_J*JWM!V9M`+]_GH,),<^\4PU^,"/@1)MQI/(19$`1(LYYQM=]Q!GDX
-M?;FSG^5AM"7*J;#8D_\,X"*YZ9M_M@Z1!2OKZ$$!F-5@]8CPCHN32B$1SK'4
-MG\V>")_4%<$S$'/`%0ZD+(S&_'SQ7DMXS7V*PQ_EBY1&L3\*G1+2CVA7?;8$
-MKM&+72ZB9Q!6)%7QS\8!B@=]?CV\Q)MN32&S:3#9\H(OL*S6&+>4IQI)32*2
-MWHD0YSJP:#9)5S/M&HZO15Z(AM;"BYDOR15X$K=&,P8#`.P```#L`````@``
-M`$4``.A=EP``0!$``,"H`0'`J`$"`?0!]`#4!KFDQW_.#'(NG#]W"4?Z<W_3
-M+B`D(`````8```#,(0``L"3_^&R7E9"%F$EP!$I(U=H>K,WB\WN5/LAQ+QJ:
-M!#J$1>B_/PL1V1XFJ]=O+5Y_RO>^"QXCU2442CM$]TN*=#6LPV).<OL89.5@
-MAT/)]*\3[%U^?BUQU7E/U2CF#6R>"!+&EK42Y_LW"]&0*@<.1DE61(OJ!LRJ
-MFN3Q58.`7)(B9,ATPSAI%^:TF8A0MWN0%^9;-E3)=`.O'LL2=3AZ,\_.>!B_
-M#NZU>/\_ZR]X$K=&]BD#`.P```#L`````@```$4``.A=F```0!$``,"H`0'`
-MJ`$"`?0!]`#4!KFDQW_.#'(NG#]W"4?Z<W_3+B`D(`````<```#,(0``L.46
-MK.6/V_/2O6\JE5_$BKS`"&X0;B,B9*@H&!MS>0"I8PGP4\*6Z<RQ0*AF3?'L
-MYOP;GPO$VME-M+9\5$1Z#%Z6;1;PAY#:+*ZJ4^^B=K@I2MB_90VUL-%![/0E
-M:'\7Z41\KJR=HQOS!F$Y&BW,TC3*W*T?__I`;-B#&H^*A4XG;UJ\'3.;A]Y)
-M4:JW0=X;)A9W:<+=)E*>2"3WU/)&[CJ3W=7)J/&M=`I-.;AX$K=&ST\#`(P!
-M``",`0```@```$4``8A=F0``0!$``,"H`0'`J`$"`?0!]`%T!UFDQW_.#'(N
-MG#]W"4?Z<W_3+B`D"`````@```%L(0`!4(OIA2E_0Q%+?9C#])-U_AGDPZUL
-MBE?SZJ0!;`1\*UV3B.,`X]"?KA"P(D\#*RF+TT7(:+J7Q>1*>3E["VKR78M<
-M8C_BH:TGIBOM1'SN9=TQY3FN<4[\]?2&Q=,>Y]2D`9W'7:!]4Z/AP4VO[L`8
-MUN!X'6-QE(DK50&#033P?8E&1`#WJ*E<&<#.=`%<W\.?0<EO._%=(7M8.@@K
-MVPI>2C]1;3*FX1@/G`]*7H:=>]N.S_52#UC1T$9V.BH00_%Q\[!E[W/W]Q$\
-M#DN38#./0S!0[V^UO9!*1*1;XWJ_4!X!P!H'M##O,']R$?U<97BG3PB/L\_$
-M-D^7ML-U7939'PXS>;3*JPK9G5--C-@`X&:+@Q&&==RM$=>M]8BBA3J:O"[Q
-M`<_--GQC=PR,BMX:OW5323Y(-BG1^%(&0@/DBR#N+89"B?HY80U+$9D3>!*W
-M1CJ$`P!<`0``7`$```(```!%``%879H``$`1``#`J`$!P*@!`@'T`?0!1`<I
-MI,=_S@QR+IP_=PE'^G-_TRX@)"`````(```!/"$``2"LP1Z]W/'ZIC1^2<(0
-M9-@MLFBHB4'9=P/MV[Y%C4.5N@(M%4LGX>[VA8`N7VZ)D&=.?;+I\"@]J4-Q
-MGG)J[R0VAG'+R=!>V!V;40#NVO'?E.,?4>9N@'X0+OTZ>^$(J)V[7%!X3K7&
-MT*8_M.KMY"3?%@6'F"3YR1E$!'K#F*G28\MJ[6H65%*U,S[W]NYW,FNXPXT)
-M4*0,NMP-__9`(F"6M-!3YH4HKDFQ0_>!N>3\I4AJ!$G82;5P3E!,"TVWJ\8/
-M4/[M75NW]+&AC_""'DD=2IM64PWW?_RRF3.8_B:<$]DZ<X^6%DZN7IQ"LVS+
-MMW/;2_HY0SF1F\*<O)K\=U&"P'U8YA649T`%HD7]2G$R$5;LP?0&7^J-&?9B
-MO7@2MT81JP,`?````'P````"````10``>%V;``!`$0``P*@!`<"H`0(!]`'T
-M`&0&2=F%8)Q&9+'/;<'E.@IF"64N("4(`````````%PJ``!`@*:XD\`R^+-4
-M<@??Q!<)NS+<I^)W*-D[S/SN"XXGO/^`8I0_&019S88)KMLTBQ;H@_$80$`=
-MA78G..#)>!*W1@6W`P!L````;`````(```!%``!H79P``$`1``#`J`$!P*@!
-M`@'T`?0`5`8YV85@G$9DL<]MP>4Z"F8)92X@)2``````````3````#`M6NFW
-M:PR3GV[^=%G,;X:3S8"^"HRF=2SW4=:E[^*BM6P9>4(D,(S&N2QPE'@2MT;?
-MQ0,`;````&P````"````10``:%V=``!`$0``P*@!`<"H`0(!]`'T`%0&.=F%
-M8)Q&9+'/;<'E.@IF"64N("4(`````0```$PJ```PQJCR:/3*5B@)><9L;:;G
-M_K`ALZL&%D]<B%Y"&83DZ*.D5A4]T=E!D[R;>>)X$K=&^-(#`&P```!L````
-M`@```$4``&A=G@``0!$``,"H`0'`J`$"`?0!]`!4!CG9A6"<1F2QSVW!Y3H*
-M9@EE+B`E(`````$```!,````,`"ZD=,ECCBD`-GA,\$H4X``7I]9,Z/[@7GJ
-MWT??/"/:S:\$#>%GHF%$E#_S>!*W1G/2!`"8`0``F`$```(```!%``&47:$`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E/K[]*.1V-(P``````````"$@(@@`````
-M```!>"(``'@``@!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``C0X(
-M>C.P>9CKRKG`95?JQ<5%F@LT[\,P<U_`R50*E%R'8_#+!?H/"2;6;0>9(T";
-M";;(2=,\YEL<:5EJ1OIT"<1*O&=&B\I5SE:;"(/_]M03J"KR/AN2T5TZ%&@E
-M(>$L@O\R@'/64F6M6HM2.[K4[VI#>YW@VO>M"'Z[`:9&KLXI```D/T%2HE*\
-MEB6_&#O$2'X`XOT8%Q??I.?;_)6C@DK5"D4I```<``!`!/J4-$'%M2?30/'G
-MC?3PD@\4\6`+````'```0`6U';.1NY,)0CQXO>O/,G>T0!/?+G@2MT:-X00`
-M7````%P````"````10``6%VB``!`$0``P*@!`<"H`0(!]`'T`$0&*3Z^_2CD
-M=C2,```````````I("(@`````````#P````@``!`!@````<@UI-A?Y9%\HHQ
-M%3F<6HO/Y#<T7W@2MT96\00`N`$``+@!```"````10`!M%VC``!`$0``P*@!
-M`<"H`0(!]`'T`:`'A3Z^_2CD=C2,```````````I("((`````````9@A```@
-M``!`!@````<@UI-A?Y9%\HHQ%3F<6HO/Y#<T7R(``'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``C0X(>C.P>9CKRKG`95?JQ<5%F@LT[\,P
-M<U_`R50*E%R'8_#+!?H/"2;6;0>9(T";";;(2=,\YEL<:5EJ1OIT"<1*O&=&
-MB\I5SE:;"(/_]M03J"KR/AN2T5TZ%&@E(>$L@O\R@'/64F6M6HM2.[K4[VI#
-M>YW@VO>M"'Z[`:9&KLXI```D/T%2HE*\EB6_&#O$2'X`XOT8%Q??I.?;_)6C
-M@DK5"D4I```<``!`!/J4-$'%M2?30/'GC?3PD@\4\6`+````'```0`6U';.1
-MNY,)0CQXO>O/,G>T0!/?+G@2MT;N%04`4`$``%`!```"````10`!3%VD``!`
-M$0``P*@!`<"H`0(!]`'T`3@''3Z^_2CD=C2,UU7.AER7#PXA("(@````````
-M`3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````
-M"`0```(H``"(``(``*4N/,1IQQKAN"&%)0$2]E4@&;[3O,('A)''YJZ"FZXM
-MOBU#FW>_G7U^TG`C"\[892E!F@%Y$CL;$A>MS:6(27ND(T++NB28]),"V)/*
-M89S3VKF[$KO-%$A2)VFG9NA'U."T7-_5M*2.>`DC0^8N5%_SXT,)]7HOW[30
-M$G.&83#A*0``)"BT\@0+(J4VSSU-D\>7962/)('AN\1&UNG+`CWFRX7%*0``
-M'```0`0TZ9`%:4ABO5I^EVLOU'UDY#5J90```!P``$`%;,A!91^L^X:Y+483
-M=PXK*^6+!WYX$K=&0$H%``P!```,`0```@```$4``0A=I@``0!$``,"H`0'`
-MJ`$"`?0!]`#T!]D^OOTHY'8TC-=5SH9<EP\.+B`C"`````$```#L(P``T!NE
-M>MFW@/*=,)Q^A_9JBM)^JSOH<3!CGKZ1^OW[\#`AO+NN)*I^%2H-S?,QHXK+
-MMCL(9$OTK9"BE*+7U92F4#:U:!2:E"GHQ]B&/"UK'HQQ`627(J]4(?TM+$^!
-MQ\4=-ZR7TQ53D<%JGOX57=#9PL"=^X370^I\'J83AG@.0M#NJ[Q\*`PZZM_J
-M%\Q*MIDRB[?\7-?:X;VU1RYOS4>6C%#`Z:5QZ/4+BINX7C)NN`!$H2999WD7
-M>6/N`@XN&8:9+]@'2&1'P;_QS^FB4G@2MT;N8@4`O````+P````"````10``
-MN%VG``!`$0``P*@!`<"H`0(!]`'T`*0&B3Z^_2CD=C2,UU7.AER7#PXN(",@
-M`````0```)PD``"`MOC>*C-,F+ESV%N!CK(HH>WJ[0H0/G@S6]%UDFO]EQ]W
-MZHHP.$0VS>3*JJT\&NSIX)XQI<F@*4@'_6-;?3\A\KSP:D%#O%:N9E)@+?'M
-M[W:NF5J'*NE\(37G))$C"ZQQ)N;P_AT8IZ7GIGUDB)ZK(>E<'6G"B]NDWQ65
-MVG@2MT90@@4`'`$``!P!```"````10`!&%VH``!`$0``P*@!`<"H`0(!]`'T
-M`00'Z3Z^_2CD=C2,UU7.AER7#PXN("0(`````@```/PA``#@".NF)-9[G,$V
-M_950_ADT^2XMD2MGW7W&<$X4V24IV*\M$6"8VH=!*RXC"A80).V]<A_B+TVH
-M_+P4K5I07*O6>)Z!7"SGEJ321E*VNBS`LBP-0[YL3.]-:90VZ7O\RC0ZE0S8
-MA822>)O'1T&R<%0Q[+_<J0>V"Q"@ARB9998A4^1X9<13VN/#FMBFN*':&2@>
-MEU>/?UQ#8MA8N!<(1O!&I77).8;,0!5]^Z:0OK*TD)J+<'OC<7RC[`(*"?NY
-M]#W,RM_R(P,K&=4NI5"8U(@:AE2'5%C7R%2/*6^VL'@2MT8JC@4`_````/P`
-M```"````10``^%VI``!`$0``P*@!`<"H`0(!]`'T`.0&R3Z^_2CD=C2,UU7.
-MAER7#PXN("0(`````P```-PA``#`I')"HX+^3>4E?#.]>B;=:A^;.N^9,Y2>
-M[1BJK&ZJK::`M2DSFITE=EZ(:O<1I*5>-(\?/0)GF"?%&N$)*'YIK?/ROL49
-M/D+MH\&HKZ#)N5#,H!&D8$!C:8?;H%YP'X6Z"2*:0_"X%L'7ZB@YJ)+:V7O1
-M\*JQ/VO4)5ZKP13X\NQMD3_6D0W)_"00OJA"T8UT[*QVWC.)/(2B4$SVGI!"
-M&,5R1OG1=D]A$-6@L3TD\@+DI#]L",-W+E/SQC!X$K=&.9D%`&P```!L````
-M`@```$4``&A=J@``0!$``,"H`0'`J`$"`?0!]`!4!CD^OOTHY'8TC-=5SH9<
-MEP\.+B`D(`````(```!,*0``,.0!,VEL*D-.39\%BP'.:=R2-X$O;;[@!X`Y
-M!NV!#H9U.(F3I"^06EHY[_GD>!*W1E^T!0!L````;`````(```!%``!H7:L`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8Y/K[]*.1V-(S75<Z&7)</#BX@)"`````#
-M````3"D``##8=9VC!^/#R(IK*:K_#^SJU0#9'Q']?#3!+@TCF:X#O!:;`UCJ
-MPPD$N!V02G@2MT;!SP4`/`$``#P!```"````10`!.%VL``!`$0``P*@!`<"H
-M`0(!]`'T`20'"3Z^_2CD=C2,UU7.AER7#PXN("0(````!````1PA``$`APK1
-M95]]%\#[H.I4B\WSTS0=A>/U(QN4<571$@UR88Y!BS0=/^[`]=:^]5LJ5+X6
-MZO^I7MS_>C<%48.9H_]$)'F\+5QB<A.8=`&BP'".65?J+)G$5[#(,NI'F*LX
-MNN1U1WA!P#;,G"(\NQ9N/+=294HF491+?"ZOC_E,?#(,E@DH'EZL#XZ`44,L
-MR=64I4)=#/W\]`OI^G%J50T!9I6Y0HH0HFA_A(]FW3A0WFU_\<NB`(Q`^%],
-M^6]CVMK3<TJ<")M]D>9%CQ.:TI%[UB9P(W`O7;K"5-SD0KB\>];S2/DIGF8[
-M;GKIPS8BR0L"$LZM11_\3:X6P4YT.R!P>!*W1E;=!0`<`0``'`$```(```!%
-M``$87:X``$`1``#`J`$!P*@!`@'T`?0!!`?I/K[]*.1V-(S75<Z&7)</#BX@
-M)`@````%````_"$``.!G4:%&#3E$C"B)?/VP]#[;Q2[!*E\PTES-HM$BO]UD
-MC2BV\^.H6W.=[4QA'?$/:$--N.`&5XKQ@@D[$P-F8*^$X-!_!=```A\&&^;H
-MO3X=D"JPX_/OES7)X"#^)Q,M7YRNGB/L;'FH+BSF5SR!=K-,RXE?4(JS``O4
-MO*^N(8>1I^=?0TQD*8I//^4Z.7/,3G$N?/C\PD.,%_>&6#U8#YE?O626.^.4
-MB?%XU/'H9Q'J34:49B'7B6:&$'WF,"#X4+440JJWA?F(4_%[ELOWL(-[;#^P
-M^WRDM_BM5F^!>!*W1HSL!0#L````[`````(```!%``#H7:\``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y/K[]*.1V-(S75<Z&7)</#BX@)"`````$````S"$``+`H
-MT5?9M)()B=&;",I\]*$V6L.9SHS;69%U@+94<EUY39^R;5?R.LE`Y=^%,$3M
-M<V<%*DK=I&IL]AGPWDF6@F;%8$C'J_2N!4T:L>;]=6Y8B**&H+(D^<-6L951
-MA+LX:B<0C="O,,I(#W%74G8SBV-?&G3@7+4;SDQA(N94B8\UMHF9VEI.K&TT
-MV3I>,L>L8KX'A-J6H0A73FV4N%2A8N6P.)?#F]IZ)%,U+*Q+>!*W1E\/!@#L
-M````[`````(```!%``#H7;```$`1``#`J`$!P*@!`@'T`?0`U`:Y/K[]*.1V
-M-(S75<Z&7)</#BX@)"`````%````S"$``+#_3GM)B'3-SDK2J81JD4F\4,LT
-M25<A&QN"W&U]*'')X,+NABD1T/D+.)!Z>\H7_P`:WR]CA#[UWW9#M#`LL]ZU
-MPC;96SV'AC-[]J;D)H93,NIJ;1EJ?%D&[N"&G>,<47+5/$;112/6*&6H?RS,
-M@(KO(20-SY90^+\Y\</;T!8(%#5.?Q013.JW'4:86([)/)KE>?'BC4@`4D1Q
-M\L,2:]^LWR7Y``DZ`,);)>/&>!*W1D<M!@`\`0``/`$```(```!%``$X7;$`
-M`$`1``#`J`$!P*@!`@'T`?0!)`<)/K[]*.1V-(S75<Z&7)</#BX@)`@````&
-M```!'"$``0!3X_GF^/)TJ3>`SRQ*U;`;`WDE2(BS=Z&YRS0@[O2I&*\!/;?.
-M/9&U6[H.Y$8SE/CZR);$L6<$F<U>TTB#(_,4:N6E`48N>=U:R^B*2X;0MD>(
-M4E];9L42#H\)T-)GK?1=^Y`%"ML;WL\):O]"5*-K%;M/=FKLQX@UHA=?D5"J
-M+ET<5Z95"5SM[A?8!>DTG"83#E_0<CGX7"AC;K`,I3=21XJP8R*+Z\"IK!8,
-M_;^T(P483C4\-,I]=.\Q>Y*M$`EM>OT2[:9'5GD\S^/]D+JS//MY3)1IV=G?
-M.@(W\_`+PT1]_S(FI5#^J/>FE*>V%5SK_82$<L-2#]'>D^%X$K=&ISD&`!P!
-M```<`0```@```$4``1A=L@``0!$``,"H`0'`J`$"`?0!]`$$!^D^OOTHY'8T
-MC-=5SH9<EP\.+B`D"`````<```#\(0``X`U/2LDNTZYZ;7I",VCH>_)31R+O
-M4P7,S:98UTZ8ZYC3@T";MMQJR"SLL:'+LS42F;$7SPN^6,X.^K1@48HXUZ#8
-M:N4\KC#DPB7--$V9#0SXN3==1'2(.3C4"M;/`X39$Y66,EMUC)F8Y#F2?E$!
-MJ='.K:<812ZW1%[R1.0YC2.)43S<;*X:%.Z?YCKBE2^;(XV:Q71[4:=9*E?_
-MW>G9-\-=/U0`#^Y!)]4O<N)O=GDF<(E+^758M:162_/=0PX0/_-KQ?#W>;EX
-M>4JIEF)@C!<QX[GQN9C6Y>3N1SEX$K=&_TD&`.P```#L`````@```$4``.A=
-MLP``0!$``,"H`0'`J`$"`?0!]`#4!KD^OOTHY'8TC-=5SH9<EP\.+B`D(```
-M``8```#,(0``L#P^TS>I[(9KC4^Z:.OL[7T"6\HR2BJG%4,X`"[K1$#^\JS`
-M+&.H-A`L!T!=RVK&%'[(>0/BABE5D1=VQF/<@BS!7QZ_(?2%R5;H0S*.S@]W
-M+F9"FY`:*8:*#I'-MF:.%X++?$Z:@UF%N2FN9DU\_;L?T_1C;)7&'0XP:(.I
-M&*D]`*!<#+G`C173UOF=&Z/JRC[A3_=0<=#VHS%WW8GYO=?XGR'Y$"!.(B0%
-M%"QX$K=&66P&`.P```#L`````@```$4``.A=M```0!$``,"H`0'`J`$"`?0!
-M]`#4!KD^OOTHY'8TC-=5SH9<EP\.+B`D(`````<```#,(0``L#FF;;?412.6
-MS`-G&5#:[X_[3Y145@XKDBM?U,;&?.<X*T#N'>P3R4IO)D7*@J`)PWPG@CL;
-M;2LPE5'L5]Q*(JE`-P^`>\JTOX>W*P'(TD?*#X0_@,S^P9+9U?L(+=-``@HW
-M&(TWAAD8W7KVTQL8PD&WC9/;##R"3+7W@M%F%LY!<TO6IZ.PJN@(-%)+U'1!
-M^QCP)G.>;!RY'Q4%P3%-^N[U.0M&,O@S."+'=G!X$K=&*Y,&`(P!``",`0``
-M`@```$4``8A=M@``0!$``,"H`0'`J`$"`?0!]`%T!UD^OOTHY'8TC-=5SH9<
-MEP\.+B`D"`````@```%L(0`!4!RI6%]27OB&`V"XD!UW[-;Y/=0Z=CE1S8Z:
-M252%4W](\Z]%D@)/9;#`?M!ULWWSC#8AM^+XI:(J_?N4$T+Y.L&%W,*AT!7?
-M5D8.?<9E]&^[]?E\=!+]HAL1#'G;)>4&1$+)'^2!ZT3EX=$FPZW>;WVPC21)
-M'RK7K*>4\:L%>SH%K'"\<NQ\',3LGC9_?G8S"@!:K%3B+9Y=,!X9(O8;&GDH
-MXTF_)GM4<;AERYT3YF%#E\3U%<2&Y':R!(P)#H61?J_(B$U"1&Q'J/\9JSW9
-M9)->%S!ZP(S)R]3/8&>U<^0SP,,C94(9;1P,565#GR&4?P#$91&$T*N>_0S3
-ME9M:HR00_>B>;Z"K]1\A]!)38R?IBFVV^Z=`_=E&1\K$\+4!R>DWTG;3H.@=
-MT36GO#==77G/#!V0$1.DO=3XFT!U!8BWSH18YO//N/`I+943>!*W1K;'!@!<
-M`0``7`$```(```!%``%87;<``$`1``#`J`$!P*@!`@'T`?0!1`<I/K[]*.1V
-M-(S75<Z&7)</#BX@)"`````(```!/"$``2`E=L6M@!R3QALO!A8=3LKVT?G2
-MS&9FAFC_)P35(85L9>H3,<.)LK*PN.U\<\B_E%.D95MKWKX*KZ*9C?TY=_8-
-M34M"9P7V!X``$&8'\S!/^9-/Q-RAN'O5ZSP*?V:>K$V4.,_(V!>U1_PF'?$R
-MIVQVEDT5I\>6A4T@_'B5,6U&7V=I87W>N8A0=IR(E\67NIG]&NSVO'#)!OKE
-M5!7JB`M^/TB@.32$DVK"]&#>*?3Q(IY2-;3@M?3,F.]LE#_DZ6M,2.7(;$A^
-MZ1Z<\P7X>GW/_/Q^S+OD$5`)!D)01*M@_82JS/XKEAG@UX6N)#C%F^\V<.@3
-M,U0!(-M`EQH'R=%P'VH&5NX.-/K(2)4_^J(+3_=Z7!`*59G83B=UF'@2MT9Z
-M\`8`?````'P````"````10``>%VX``!`$0``P*@!`<"H`0(!]`'T`&0&2:)(
-MJTO?1T#?S)59&,Q8W%0N("4(`````````%PJ``!`39^XZ9)H7W\J1M>&N)['
-MEPP(4^%UX)7GJZ^I.,-.=ZYT)Y94+*J8@*#:I2C3]7`^`=E'40C/%,?'LI+O
-M>!*W1CW\!@!L````;`````(```!%``!H7;D``$`1``#`J`$!P*@!`@'T`?0`
-M5`8YHDBK2]]'0-_,E5D8S%C<5"X@)2``````````3````#!0-L^[G<YAT*'3
-M_D7BJ"G!2+BH.J@WX80%C'99YU3>`[OOQ"7,EAUR=MQE[G@2MT;@"@<`;```
-M`&P````"````10``:%VZ``!`$0``P*@!`<"H`0(!]`'T`%0&.:)(JTO?1T#?
-MS)59&,Q8W%0N("4(`````0```$PJ```PEDCI)(54FG2P:7'8ZRD0WV6.?/F$
-MN5HB?'("3#<OL28YGL4U=,:^S].1,.-X$K=&GA@'`&P```!L`````@```$4`
-M`&A=NP``0!$``,"H`0'`J`$"`?0!]`!4!CFB2*M+WT=`W\R561C,6-Q4+B`E
-M(`````$```!,````,"M;YUGPB%+W:WJDA_IX7NRI2'7;9N@#L_6B]`B\?<RF
-M<,CG>>UY)KPHK'5]>!*W1F\6"`"8`0``F`$```(```!%``&47;X``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=E1RI'M*A58)(``````````"$@(@@````````!>"(`
-M`'@``P!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``K&X.N2<JI`&T
-M`?7=.#`6/NMYJ!];M*:7^<.Y%5NS]KH5879@%=]\LP:/ISLDA\O>AH<IHN_B
-MI0UW5/F(7/N)`56D<1.Q+S5$,MWV#D_7-]S3N-H\-Y9`"P\>H,41/3M:46T'
-M,4K,;V:69"O!:'*2L*E[66XN<*@QZX9NO_(`*8$I```D<0_*S^0-C"O]?_]*
-M#[OZD]H<?!K>R^A9*]FG29JG%.(I```<``!`!%.P4F<TME`&C"<;=*<WI2**
-MJ7C'````'```0`4ELR_D]CR:QO6V:\'I^'FYRE,7F7@2MT8))0@`7````%P`
-M```"````10``6%V_``!`$0``P*@!`<"H`0(!]`'T`$0&*4<J1[2H56"2````
-M```````I("(@`````````#P````@``!`!@````>HP_W,G_6J\OD\^2.O$W9U
-MB#6GZG@2MT:M2`@`N`$``+@!```"````10`!M%W,``!`$0``P*@!`<"H`0(!
-M]`'T`:`'A4<J1[2H56"2```````````I("((`````````9@A```@``!`!@``
-M``>HP_W,G_6J\OD\^2.O$W9UB#6GZB(``'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``K&X.N2<JI`&T`?7=.#`6/NMYJ!];M*:7^<.Y%5NS
-M]KH5879@%=]\LP:/ISLDA\O>AH<IHN_BI0UW5/F(7/N)`56D<1.Q+S5$,MWV
-M#D_7-]S3N-H\-Y9`"P\>H,41/3M:46T',4K,;V:69"O!:'*2L*E[66XN<*@Q
-MZX9NO_(`*8$I```D<0_*S^0-C"O]?_]*#[OZD]H<?!K>R^A9*]FG29JG%.(I
-M```<``!`!%.P4F<TME`&C"<;=*<WI2**J7C'````'```0`4ELR_D]CR:QO6V
-M:\'I^'FYRE,7F7@2MT;-;`@`4`$``%`!```"````10`!3%W-``!`$0``P*@!
-M`<"H`0(!]`'T`3@''4<J1[2H56"2N*G=["0B\\TA("(@`````````3`B```P
-M````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H
-M``"(``(``*Z+SDRN@JCLSRE="<Q,`'P2)^)PQ"9+=A@LH]T#/AX:U(K1J^TB
-M^5$4+;POI,0,+?/6*UV-8RAW2D_40HN[%=OX3LX=F$*7S9E8*,SJ3U_A7NM/
-M.85-0[/S##F3L&)+YM'^,S6#EU5RA"4#D]NW]!,"[H`@);GE.ROTR.^WM<NH
-M*0``)%@8RR&40DLJ%!5?4%LZAOJ3TQO@Z.'N`4=H/&_]A_D**0``'```0`2&
-MG^"P^;:'>&O>;JA\Z,\.D%0QN@```!P``$`%!B`12-YJ:F:01]M9;>@_LCR8
-ML)MX$K=&T)D(``P!```,`0```@```$4``0A=S@``0!$``,"H`0'`J`$"`?0!
-M]`#T!]E'*D>TJ%5@DKBIW>PD(O/-+B`C"`````$```#L(P``T$VS(`*90>`5
-M9Q1>/%V[ZUME4;EIGC-#8B$O_,P3QH\)@JG+[V`$6""/XH_B(Q>=^>;HDZ4@
-M#P@\"1SL[R&::8545X51P)-OAK]8Y`[F1PPD!^=U;ZDNHK2@4%CTGX65O!!7
-MK@,<`@'@&>_?7M3`E<18I&":2-@V7$(B9H8OG]>\A4ITJ-8*`'(9#2(8,7&K
-M@4/I-]XT(($C&S]4W2DYJM[4]H.#=&"0F10-(3E`$X?_-F[)MB.XW^0Y-K+Q
-M;!SEGNJ**<QR22LBH@P@@'@2MT8#LP@`O````+P````"````10``N%W/``!`
-M$0``P*@!`<"H`0(!]`'T`*0&B4<J1[2H56"2N*G=["0B\\TN(",@`````0``
-M`)PD``"`>8'2?XKD3@YQ&\5ZDCP+8Z[E4A!^7%N?J2%OX\9)@\C+/'9P1J&H
-MW9O]MW)F74)?8#?=#S3!*1'&5J_OF%,!TA<H]XG2:WUS5$XOXK/THP400!SC
-MG+'TMW"_H%+%`:8Z?O]"VXKSV^<.H_'!%KCVI;L=?K8:0$(HA[2'N7@2MT:Q
-MT0@`'`$``!P!```"````10`!&%W0``!`$0``P*@!`<"H`0(!]`'T`00'Z4<J
-M1[2H56"2N*G=["0B\\TN("0(`````@```/PA``#@;65%Y-RE:,^G.$ZDI[/1
-M7<]^*D,7)[(9)3=K60L>1DN]W"A/0KP!A/1IY'FG+T\F"/B'1*^Z+E%GW;PS
-M1Y'GRQ%8GJ%%@SA[M*J-G?AV\RCSV0,_&,C>2_@]<1\=K#@F;;NHNH"S6OWA
-MCIL]IM;43-J6*F0)FJIIVKG:::I_F)(WFL5%!`%'.G!E/8,DP@=KX_Q!CL4%
-MWC0#7PNHLW5(H/M`N*,^"/!L`#(GEC"M_6W@-7A@NPK>7^<^I\96-5-96=T@
-MV?/P+B5&I$D`#NMOIAC&:"V`@IM8M(=G?'@2MT:*UP@`_````/P````"````
-M10``^%W1``!`$0``P*@!`<"H`0(!]`'T`.0&R4<J1[2H56"2N*G=["0B\\TN
-M("0(`````P```-PA``#`JE'.YZ_1F,T<P5!N6KG!'V7W/^7-;%)56,@S6]<-
-M:F"F_)-5JC.A(ZJ8Z_\M7GGQ=D9B>"-P\XUU+'N.`?X'OG^1(6('UCIQ>;XH
-M$")#T-PZK(O)8YY[8'ULH;RP8L&'R5?Z^;5Q-96GG'(@UA,O*B`6LOP3KQXA
-MLZN`^UC,BI-!6-6`DB(.J*/0U+1RJ"U2H=ZP-SK2MGF2WS/&K(FYVOPNP0Q(
-M-?J9F7M9JCY:YSR_B&.TLTLW`T@6_YYX$K=&L.<(`&P```!L`````@```$4`
-M`&A=T@``0!$``,"H`0'`J`$"`?0!]`!4!CE'*D>TJ%5@DKBIW>PD(O/-+B`D
-M(`````(```!,*0``,->3*0[3!.HOJ-?ZAB8@?`_MJ:#4"!6;"4D\S"-P8-`F
-M5.+M28U31E@M+Q^(>!*W1C$%"0!L````;`````(```!%``!H7=,``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y1RI'M*A58)*XJ=WL)"+SS2X@)"`````#````3"D`
-M`#!*OG>]A`C$0[L@-KP&U>6+.7C$"EE9,,-B11/7=#@Y]44R,\"WP3&N>(_,
-MC7@2MT;='PD`/`$``#P!```"````10`!.%W4``!`$0``P*@!`<"H`0(!]`'T
-M`20'"4<J1[2H56"2N*G=["0B\\TN("0(````!````1PA``$`"M=V^I1=3ZNA
-MO"YJP(?AN"'`_AZ/"@4-_DR]P>NE5\_T?[.1S(RDCAT[M%86$K,^UBUN@QIC
-MJ(&=<;P>$F`XM^@SS\XZ%IMZ&:AMZUWL()6'&YF/9Y&-C676$Z]A)%N3U0&6
-M;W0':\V>6-70-;C=39[N@5H8LBEZB>\"K3NE!W_KZ'8)NI%!HT.H[V+XAI@;
-M?+HW[D]<$\LK0C^94K\(^DSQFXO!VMJ(Z3&.JE`UKB/\8MQ>0@HL2)KT%/'/
-MLI!'J6D4HUT)+]+NYZ.VF'6!$9.:I:%X5XW'-&E760?A/&NCF;?P3ICB@^1D
-M=(#F/8S3:NIF`%/#B!67+O27>!*W1NXK"0`<`0``'`$```(```!%``$87=4`
-M`$`1``#`J`$!P*@!`@'T`?0!!`?I1RI'M*A58)*XJ=WL)"+SS2X@)`@````%
-M````_"$``.!\UEFA;3S^ED5Y1(<.2_;VRC5@SGQ^%"=8UK[$8^<6>R>6^6*:
-M9Q5"R4<BC#X#4^W\VZ>I:]I*,A0Y"]&Q/?T"U]A5;>H-IPRUY8WDM*C:U=/L
-MZ5]=>F'T,[S;?T3AK6BB"!(6-`$;N^Y\Z_5D76C,7*"$Z2`SSWVS8'GX%V:1
-M-COC(-L@89&&;(N]['ETC`W@:1?)9>N1RK&*H+BDH"W_E@I`FC3!:<![-,=8
-M>7TI`FK,>,+V]U<(,X'&1F_TNF2*G3L(D$;0/;_3G[##<F>/BF(@C<.-CT3B
-M`,N7>!*W1F8^"0#L````[`````(```!%``#H7=@``$`1``#`J`$!P*@!`@'T
-M`?0`U`:Y1RI'M*A58)*XJ=WL)"+SS2X@)"`````$````S"$``+`CPW%_H!TW
-M]'*$[7$W]V`O,G/.#',UJ%;^$&EM-E/.#0#WO`))+;HUZ<RPOO+00I.1+5$F
-M*I?(X++2=ACW6VV4C\>J3&;A'S`P9GL#.;`2X3"L%6'"&0"JKMS>38`TNY&Q
-M^;#/.$68GH>WM=H#5<D;::W\7`$9@N,`K*PS=EH3^2I7MD]!OZ,8(B5]HK'Z
-M!02$2GU021/9!@%\&<Z'#'+*Z&W\ERG(`VQM[KP">!*W1E1@"0#L````[```
-M``(```!%``#H7=D``$`1``#`J`$!P*@!`@'T`?0`U`:Y1RI'M*A58)*XJ=WL
-M)"+SS2X@)"`````%````S"$``+`)Q0$+S]@B,*X6HTIG(J*6E%?_P@-8<9Q;
-M7@!"X=UK+Q[+YQ`+HQYB:KNE.U!'"9HP,)[B_7DB1<H'(-!R<XXS?3B-<;!G
-M1D#4;S1'@<>)]9Y!SGK*G/(W8(%8A:'U<@GY]6MV4A8SS>3F^T]+_:7HEB;)
-MH+I9-U*KM%MQ&9ZN7'5@_SOG+9+YWX!H*EX202M[=U-M&#F;U+IT#V*=C8<Y
-M0F$?X_*W.JAT+>"J>!*W1D1]"0`\`0``/`$```(```!%``$X7=H``$`1``#`
-MJ`$!P*@!`@'T`?0!)`<)1RI'M*A58)*XJ=WL)"+SS2X@)`@````&```!'"$`
-M`0!QO0K->X6WW%GKX`T#1L-;PR#2W4<$6$I:(4@OI!DM<_66/YC=!G`,>)0N
-MI$6<"8E(S<2F&T]!7;6'6,O\0A-:5JU62>.]9D-/S"U"$R$T/N$X(Z)5:STY
-MJ!&-E[:`8_<^J2PH7G.P04H..S?>E]F(=C*QX3T)XHI@O/)Y@]]-$_ZL-K-0
-M.1`#*\?U&>0O'_N8170W[LE9#\A$`V_T&["9_$910L2:IO,:E,BYK]@\N];O
-M5?'8:;+_P;'_5)F,N>=Y9<D:[9\[4EU)G7CK3^,#N/SW">ZZCH4)8FUXM'HF
-M'-QCIC.B;,_5HB/@/IWO*7V>\L&DIR_+^O&Z7UMX$K=&8HH)`!P!```<`0``
-M`@```$4``1A=VP``0!$``,"H`0'`J`$"`?0!]`$$!^E'*D>TJ%5@DKBIW>PD
-M(O/-+B`D"`````<```#\(0``X,V[(#2[+UU=M9UN#CY.B)Z$5!Y%PIG2@^29
-MRJ,<`%ZBG:N=9X%E<DY`3G;>]A:FKM[[4]'*+<F)]SRBO?DTQ^CIR_*GI]4>
-M0D9>PMD9D@R38P-J$O),5:R+#U>2Y.+=9G2KO\C!_H4VH9XF<F[M.%*5!7O4
-MZ;&$+3XQ3'=+NO9$\)<8GXA%6DV;Z%@1+,(N:#D#K+Z37"HNI$+R_#GB"O)H
-M@P@)J=R&7VTC`>I<Y..`,@>6:4%!=ML&57NRH_H$O'*A_R8VJ!5+T2+E#,J!
-MW'(-UO^*Q`2/?=CQ!IMX$K=&KIH)`.P```#L`````@```$4``.A=W```0!$`
-M`,"H`0'`J`$"`?0!]`#4!KE'*D>TJ%5@DKBIW>PD(O/-+B`D(`````8```#,
-M(0``L.4%FM7@E7IQ)#4I"YT\=[&HR!&J5HE9*9G`D)GST:(N*WH$$!D"')'\
-MUP$Q4\H25HI-P=C?3<7:JY]#I]II-WJ[K+Z?F)\&MWT,3S`.T(ZZH>\K#+\M
-MX+Z;3K^E@D)71V=C3+!I[NPQ_<,B7Z7OQ@'@4WK&/&NM6]I"_,1:GN^>'00R
-MV,A6WS$<D93)S5*+G6:0<@+#AI#=3^'0DL*;@9A7PO1_]S,:!HO#N^1X$K=&
-M!+T)`.P```#L`````@```$4``.A=W0``0!$``,"H`0'`J`$"`?0!]`#4!KE'
-M*D>TJ%5@DKBIW>PD(O/-+B`D(`````<```#,(0``L-[\TH]VD0/>C#=`$3DT
-MLO,31_Q&NE'D7.O%K>B8E[7&FV5_.8K#T%H+#!7;&OX<UW0P;?W!>[XX8KG-
-M-M1>C7HBI"8)>2_'!RA'52:4<_RI7?&1&>@PY*+F^*6-VM'K(3,LD%#):+$>
-M?I'F6P1?6HNKP7FJ35/E\VGO30:)&"*41'7?YN0#E_[>9D_VF/)UVGO?`I64
-M=^Z_-QC=:!D/EGWO26D-,/W=6EMWBRQX$K=&#.D)`(P!``",`0```@```$4`
-M`8A=WP``0!$``,"H`0'`J`$"`?0!]`%T!UE'*D>TJ%5@DKBIW>PD(O/-+B`D
-M"`````@```%L(0`!4(@RE-<5PD`Z=%^OJNC&EKG*];AFP^B?WBD=WO^UH;8;
-MJX#/!L]#=5!0XJ]>]PN7R@SLI]K/>@\M<%.<SE&6RF?1;;DT0Y!(X5J<A7_M
-M?5>GX!`0(4PSB6*Q"HMSE,'D+F9`S&'A3U'2-LW8[>Q97%\@155QEQ"Z+]C2
-M7QR!=Q:1=>9.E;%1B>W-P5N[!L>C^J<)'.`P+#Z).M;Q`]`-\JV,OEOUJHM^
-M7]^V>MBA3F/%[T0P>25VI`;FN$RP:G7N:\-`KR0(8JS(35Z1%XFG'TJ50J]H
-MH@A7]^S9"P_PW^QY$NX6`&*S]\4]A^9KK>\0)YB9<>K/N\BBO6Y$S';V,JDU
-MC_+U5%SUTDP*M9V0`DBWH?'W+8=M5^8]6!WP\4U2UEL*&;(=!Q!=TDJ14R,'
-M>RUQ[AY9=.PA5_G8Z:?:Q8??"I*;982D2?3`IPND>!*W1D$="@!<`0``7`$`
-M``(```!%``%87>```$`1``#`J`$!P*@!`@'T`?0!1`<I1RI'M*A58)*XJ=WL
-M)"+SS2X@)"`````(```!/"$``2!W9EF"9O/_)8!.\L#!,%&L4J'<U,#MDQU/
-M_9N*<UZ:`T$*0)X]CBH`8LJ/]CE:[>3T2R.<:BF@I/\6X0WZJ.M#^ZN.3&H(
-M=L#<QG(M#P\B/*O_4GJ`X=S,/>Y.'PCA?X:[GX?;/V54(LIXG<+CQX,-W!/-
-MOHSB(2DD;X<8_5/.T64MQVQ`"NYU.$KXD]%(WY=Y,;^"`1YSV<6^-F#P*:[/
-M0T=G-[8:A9X/*IM4E35[#ZIL)&T<`P=4(6P=L&#-_:LNP4S$1897;5UW8AQ=
-MR/Y\RCFDX4CUI7Z,&!/:3$6B`]K&Q'/&^866[(PS49ZB2?LN`4)5AOOQQ%)%
-M_L4VNZ4>BEUFG:FEG\'*X1>QFK=)M2P0FOY?VVV4U-&O"W@2MT;01`H`?```
-M`'P````"````10``>%WA``!`$0``P*@!`<"H`0(!]`'T`&0&22Y!W*`WK)<)
-M=X0V_E3I[-(N("4(`````````%PJ``!`C4Q2:\GX#R[M'9:1Y]RCODIMWNE]
-M2N^A49H\&1^J9;^"'<I5=#K/)7D/;&]5,!D^.=-+=?'Q;QC@\:-/>!*W1D!0
-M"@!L````;`````(```!%``!H7>(``$`1``#`J`$!P*@!`@'T`?0`5`8Y+D'<
-MH#>LEPEWA#;^5.GLTBX@)2``````````3````#!TK*V91M`,>C=DB%KE>OH4
-MO,N"+)R#??;_D%"H4&C=L,PF?<)B?2EM&':>''@2MT:S7PH`;````&P````"
-M````10``:%WC``!`$0``P*@!`<"H`0(!]`'T`%0&.2Y!W*`WK)<)=X0V_E3I
-M[-(N("4(`````0```$PJ```PM"1[(N/]$'L2[CI'"%M(H['8=5IK2L=U9JF<
-M]*8"@I*YHJ/T[T4K6M8W>[]X$K=&/VT*`&P```!L`````@```$4``&A=Y```
-M0!$``,"H`0'`J`$"`?0!]`!4!CDN0=R@-ZR7"7>$-OY4Z>S2+B`E(`````$`
-M``!,````,+Y)1957/@GSHL!H8B-MMA8E[&98D.9>U<TD''KR^6K[[(+C<U6E
-M(;SP-K&?>!*W1O9K"P"8`0``F`$```(```!%``&47>D``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E%;2;T=?2(",``````````"$@(@@````````!>"(``'@`!`!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``2D%F$:=7-LR9X!XE9A`C
-M><(UCMZ4L6^P(;:,]A=T6XYX,==F&"1WC@`(.::NR#!"]N7E,Q86/T_'WT/0
-M!<8O\)F,$&D-[KMK72A>&WT2K=%Y><6E:UT:';-]8X\POSUK*?(<9QI*$VDO
-M;7O9@MEB-J#!6M'-\\I=10UM5K,?-:PI```D23YMHJ]08O,8]>_W97$,I#E_
-M5T__7D;-2WAL(^0P+-`I```<``!`!!_)]NK9Y25!C%='D<\_0IR$U`W1````
-M'```0`5/U73JK`<SP+Z5=Y/XFGGQ/]@^S7@2MT9H>PL`7````%P````"````
-M10``6%WJ``!`$0``P*@!`<"H`0(!]`'T`$0&*16TF]'7TB`C```````````I
-M("(@`````````#P````@``!`!@````=U=(%XJQ7CAG#MG(AL?&"[6[%?$G@2
-MMT9HBPL`N`$``+@!```"````10`!M%WK``!`$0``P*@!`<"H`0(!]`'T`:`'
-MA16TF]'7TB`C```````````I("((`````````9@A```@``!`!@````=U=(%X
-MJQ7CAG#MG(AL?&"[6[%?$B(``'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``2D%F$:=7-LR9X!XE9A`C><(UCMZ4L6^P(;:,]A=T6XYX,==F
-M&"1WC@`(.::NR#!"]N7E,Q86/T_'WT/0!<8O\)F,$&D-[KMK72A>&WT2K=%Y
-M><6E:UT:';-]8X\POSUK*?(<9QI*$VDO;7O9@MEB-J#!6M'-\\I=10UM5K,?
-M-:PI```D23YMHJ]08O,8]>_W97$,I#E_5T__7D;-2WAL(^0P+-`I```<``!`
-M!!_)]NK9Y25!C%='D<\_0IR$U`W1````'```0`5/U73JK`<SP+Z5=Y/XFGGQ
-M/]@^S7@2MT8(KPL`4`$``%`!```"````10`!3%WL``!`$0``P*@!`<"H`0(!
-M]`'T`3@''16TF]'7TB`CRJ=%.O935WHA("(@`````````3`B```P````+`$!
-M``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(`
-M`$E]OI:=8S;4(V8RR$F"I/>1N3IN&#X8B?,5UY^,W4_#I[<1!,8>M(3Q3'#U
-M.H,+VP>>:X''Q3*?8I<ED<_CLH?9>LK*=@B+9D4:<^70L\Q_607[-,9*$"-E
-MSO-$Q_<7Q']6!2E`AJ@'OH\N?K50Y+)H%MF9:7#O/5M?ZDNVSL"'*0``).8J
-MTFG-V++=PPTV!DB'&R/7+@C=ZO-V_V9_PJ]Y"Z42*0``'```0`2Q3F324#&#
-MIZN6'\+`Q3<=`"ZC90```!P``$`%%]H7^((F_YMFW]/-[XWSV!5/C2%X$K=&
-M&-P+``P!```,`0```@```$4``0A=[0``0!$``,"H`0'`J`$"`?0!]`#T!]D5
-MM)O1U](@(\JG13KV4U=Z+B`C"`````$```#L(P``T-J2DL&Z%6_N185Q5#^&
-M8A!U_T&L/\[PT<F\4L<F+7E=6[PRS4(@"-,U5(G2G/Y!EG"HQ`(!-BKJOBCJ
-M,ZM.4)6I^/EPJ!L!'_=I>LG'7#XRO(6"7`I&,0T2)F`(XL%H@8Y2W;7,N,PC
-MZ])GV[/1>&ZA(=(I9T=%*AOIJ+EEMW-UPRU(#J]3N@)5,0%YFK&P_^85I@Q+
-M"VMPCG[4STCBJ#L\4.W)H.>7H4J:OC0:FAE%0&83ZZ`?:=N0CC*,@'%[(,.,
-M@W+FU>.R4TQ9WW@2MT:@]`L`O````+P````"````10``N%WN``!`$0``P*@!
-M`<"H`0(!]`'T`*0&B16TF]'7TB`CRJ=%.O935WHN(",@`````0```)PD``"`
-MEU?E.;6Q]EC#S]2%WF!4DR3@)7*_6_A>7'/81S_T#>J]71Y=J7W>GNDS'ZYC
-M.!O8S-N^40:MK0%:J'BFI\['_NV3.]2H>*J+](Y+T$6R5#O"AR+_M4Y)6?"Y
-M&4+Z.M4Z$EQNSX+\UN`S#:!(&'8G21!EX^ROS<>.C,T`67@2MT;6$PP`'`$`
-M`!P!```"````10`!&%WO``!`$0``P*@!`<"H`0(!]`'T`00'Z16TF]'7TB`C
-MRJ=%.O935WHN("0(`````@```/PA``#@!='Z7<$ES\B?L(2.&#M&1&SB%`[7
-M.Y,X4]L>CO#\!@J<071>V/JU*CKAD#+RDM4S*QJ-Z/5BY>HA>3TWP)8G?"@"
-M=`3:$@VW*\@+DT8B"DH.[T8Z,U0,;K#B^Q%W=Y]_VVZ)Q;"EV9;H14_BPAGC
-MFAXQ&^X[]D2!1VM>D%\`K#O6@HC-X@.\$@"V5-7>NHTV21P6/1RX>'B"'!4G
-M4;2A#Q/":*IPQ8Q-/ZSF7KK]D)<V%G>.@N<PQR/#%@-IG_90J2V#H!Z]+H(R
-M-Y[Z*?U"ASAUK`$R>1APPR]!1W@2MT8]'PP`_````/P````"````10``^%WP
-M``!`$0``P*@!`<"H`0(!]`'T`.0&R16TF]'7TB`CRJ=%.O935WHN("0(````
-M`P```-PA``#`AY>!H(+NO^/4D2=A]H21'V.S%EZ9YB<?GNI"*0F\*4KE<FK8
-M_*N?$PX6J0+WD43_SPM`:8H$L*=63/FC!UP(!<ILZ?!8&-\C,*#N=^2@A%TO
-M_T2"#2?!G(20..MXW%$2LE1*16`1"_=0BR%*<SC;(E'0ZVI3:,6'T!Z?0J/;
-MV.#I?W0WWX3!W=?=Q?0VZZD*=P_PHS7>P%2%_OH^-PWJ:1HO(O'H:L?E%(OM
-MXP5-VO+C6TIS8D+HZ?4=(XEX$K=&*BT,`&P```!L`````@```$4``&A=\P``
-M0!$``,"H`0'`J`$"`?0!]`!4!CD5M)O1U](@(\JG13KV4U=Z+B`D(`````(`
-M``!,*0``,)L<:^K"*!B(5=6=P@:RQ\=1$@5X,X#\']">`R(O(_:BTZ4TTF'\
-MT.K("/88>!*W1N-(#`!L````;`````(```!%``!H7?0``$`1``#`J`$!P*@!
-M`@'T`?0`5`8Y%;2;T=?2("/*IT4Z]E-7>BX@)"`````#````3"D``##;T_I6
-MNJ26$I1A?B<0_EADWKC-9*SJ/3(UO-M/KL!U99!=2LB?0JYQ-.SV<W@2MT9!
-M9`P`/`$``#P!```"````10`!.%WU``!`$0``P*@!`<"H`0(!]`'T`20'"16T
-MF]'7TB`CRJ=%.O935WHN("0(````!````1PA``$`E8H`.X>)GGTIPLQVO(RB
-MUR5[Q%@-;48^G[E;P<C)\UTX6LE_N8*QX1)P1'V0OT$"K"/U>E':1*;0&VO(
-MO;C92MQ5<$:1V^T@Q)0WJG^W9NS0??RHK8J_:^4IA)+:7@'@ZU/.&-&/%4K3
-MH8T7\!6,1&[,'0\6YV%@]<->#A]:L4!MI'>P9B.B^9]!!@;"=`/6EA6CI;.J
-M23#CA0W-UDE7V@)0,99ML>71=^G]ZI$-H[6T)L8CZF*M_)O(+[2P7`D@%R:F
-MV0/3BYU(OK9TQ>27@NRI+4-'@^`+[*)W#/:D6#Q<#$)+4*!#:<H1<F(A>HA]
-MNJ8>1@$)P.L-+[_D>!*W1N9O#``<`0``'`$```(```!%``$87?8``$`1``#`
-MJ`$!P*@!`@'T`?0!!`?I%;2;T=?2("/*IT4Z]E-7>BX@)`@````%````_"$`
-M`.!@K;G>(L(\5C+'D5QDN/&>5X@(!6T%7$YXBA@2[;DV:W!@-:@_<.WS)_-%
-MUF4[]5N@Q5^GYN*DOX@<!/<96*+N,LUL7O)*,D>394L6<I8"%2ZR:"-K>,K1
-M\;M7UEYKU#UIE_\`@\DR/PK1+S7S"@BE.2NW1+12B=2BB$'H0,^>]UO=4_DN
-MAAO'N;:MRLCRY`4KVPH8B?V%'J^8*G@N;D.2_+ZX,/-+KW'_&TPY5EL`$_$E
-M[JZO-'6+S3CW^N15JF`&/P`U*N8\C!EZ3;H>*)8O:-8397^%EB8=AP,B>!*W
-M1F=_#`#L````[`````(```!%``#H7?<``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-M%;2;T=?2("/*IT4Z]E-7>BX@)"`````$````S"$``+#+$-`HJ\%,<L]:5/T]
-M+6<J"&K!1@A-A_F:/KG(5R+M(!:F@H""/-EN^R[8-FD'PSB&C[V!Z-<M0<^F
-M+-')(]AYJ3+396ENIB@#2S7,%F)_$U)4^9IUL,OB3O:Y=#D1Y[JP]4H$/69:
-MB_\/-[.>?:JAW3@2=D5["8G,+[,`HQ83-])9,E'<%R@VIIF=E_#3D0PI(6S.
-M\Y\\)#Q(+OLIC`I#M-$<M'"&PK8;HES->!*W1DJC#`#L````[`````(```!%
-M``#H7?@``$`1``#`J`$!P*@!`@'T`?0`U`:Y%;2;T=?2("/*IT4Z]E-7>BX@
-M)"`````%````S"$``+#<5Z/=V$;:8T?$XPQR4L204KHU&B(WQ]^?^4C^I3QU
-M^NI#8B$>TL)YB=PA8[QH]@OQMF#>6VU61^"H.0?&?Z"$XG@H?YK67&R:0ILW
-M.*C8+KLUX,@G01?-AK;H1.1)C<IF1'RB$-F)(]`DEQ`\@&+9>A%\>Q0"65%?
-M]4P6,*"N0,JCIH$JFHY60A[>`_9V3#%^O-T'55\NCOX1*.A%H643H?+!$D4S
-M?1G*`*%S>!*W1AO`#``\`0``/`$```(```!%``$X7?D``$`1``#`J`$!P*@!
-M`@'T`?0!)`<)%;2;T=?2("/*IT4Z]E-7>BX@)`@````&```!'"$``0"EW@QJ
-MT(&?8N.)@(*L3+]X(Q$#\+:1/_?9<5@E,`UK@Y-Y8G3_Q`(KCS/<2%PSQ]6_
-M?<J0+@]@2)9:S):Y)5E-Q4'TD0D:85%5PJGG]$=@IKP\Y63<V!=(GA)X7#79
-M[?]RBO6I/%N)*<'NQQLA#THGRXU\/;9UL#9P2!EWE:%_HGJQ;F:,C#9S_*RX
-M@1I?K:I/(0\$88G_2%=I8;&89P)[!C$Y!H].&8W(&>0(E.%`XZVU6L#TQKJ*
-MM1<<R<T@NS2#FQKE8^!PNOF##0=8S7G<(J\2SA4(8N$6ZG8D$19MC$V42:]5
-M(!B@7&[ZO#_;H!9J;]TPRFRV6+D0^@UX$K=&&<P,`!P!```<`0```@```$4`
-M`1A=^@``0!$``,"H`0'`J`$"`?0!]`$$!^D5M)O1U](@(\JG13KV4U=Z+B`D
-M"`````<```#\(0``X%C\U3FE=&IV54:IV^*..9M$3](6$6NK^1S-E4GN>.=]
-M5".+K7KB"S</K.YTO:<$[E,SI2D^GE-L(Z?O>MMNB^FN6T&2]D$^<.;`QM\T
-M,?M,0AWE<)VGN3\LQR7,&_F2W/XGO(XO?*_O,`,!Z"Y$(BG^Z)ES4RMO-JQG
-M`-T4CX07*/X(.-UR.)%R&*-A0"0`9Y+B9/C.ET;F`D.CYRLK4(8>:S#(0IY$
-M*<*&?M1OX`_NL;C.]I=G!87E6N;3]\+%0:C/H4AI/OY'\.\?L0HLPNW.NPZB
-MY,WOLHDMZ3-X$K=&<ML,`.P```#L`````@```$4``.A=^P``0!$``,"H`0'`
-MJ`$"`?0!]`#4!KD5M)O1U](@(\JG13KV4U=Z+B`D(`````8```#,(0``L%/K
-M5[D(07L!1-X#1FQ<JRP2J/2*0$'10!%>#G#21#>;'1#PN;?<_W;H<<K<LY]_
-MM5`:P:)0L+Q5U]MB&C;TN;R;D6;OQUY#-/;ADV!-11W$Z]R&]JNK(IR&J3%+
-M.O1,!@#\VU8*;9Y.KTX">P=2XGB-`#2'XM*1<X<?R6D<BXZFM=[1[VOH\JW&
-MPV__%5ZGDS#UH$(;$#YJS>62H1#<UX@Q@HOLA"#.84?M(;=X$K=&JOX,`.P`
-M``#L`````@```$4``.A=_```0!$``,"H`0'`J`$"`?0!]`#4!KD5M)O1U](@
-M(\JG13KV4U=Z+B`D(`````<```#,(0``L*SHP;TI!,NQ?BKQVX<043AG.V1R
-M0148A6@#8-LJ,42(\E*))]5Z'L>CLNTICB^79C'+[>M.B".FN`Q-T#AT'=;)
-MQ7'L+7D[%J6->OPJDRJ'D@]WG:`6&!+G[2(\GEFYYLBW[9KB;Y%08J>C**J!
-MI3@=$D'D1#'8*L<=E),%1U/WRI+;;4CV1HH4`I!1G3S)/4+5M.Z"?;%%#TKN
-M*/CLJYSC=Q3Z,1N%*&QXVYMX$K=&*"4-`(P!``",`0```@```$4``8A=_0``
-M0!$``,"H`0'`J`$"`?0!]`%T!UD5M)O1U](@(\JG13KV4U=Z+B`D"`````@`
-M``%L(0`!4+H'6XS7$9Q!I*<E@G1889=7?Q!/+I)8%GB+E;I4CV(61IXQ9<'"
-MV*#O2BFC[845Y50!V7V+&'JJI^IS]9*D:1>5-3IY3#BAW^H0?7WC+RT3%!\#
-M!0)F)6M]V(6[+NZN<X<N`ES87+C>(H?T-D'+0CLU'I>A;F/0)+:4N]^@[5>D
-M\\"26R%,4@%)86F)<44T?2NN8.TPMSFA@NKL'NYIWBU`-]>QM'O@T>7>B:T-
-M>+"[4:_SC8J160ZP!7SUA)S-!$8-G*[DC0D>W1Y+8M*>%9PI5@EVU_?CL+CV
-M0WW8&:'0!3^+Q*TR^)[\_F$PIAUK?J^>4&N2G?XE4@#DVUR:0[9NA=U@_YS$
-ML,,=^L=\"6ZC2"LC<-5PI.@).R&3OT3D0S4E3RU@*&L640^"ZC_1_TV,O?S`
-M:K;PXE&(^J77/<OCET>\IJE8W6L.B<-L>!*W1LI8#0!<`0``7`$```(```!%
-M``%87?X``$`1``#`J`$!P*@!`@'T`?0!1`<I%;2;T=?2("/*IT4Z]E-7>BX@
-M)"`````(```!/"$``2#'^-K5DQUQ9QXMACO>(KC&[+CN@9GF,U+\R7<UA\IH
-MIN/X6*H+!H[CS\$*](_2@B0[)V+D!X+D8>76G[T#S<T(U--U7*KUF\RIJ0_]
-M8_M[0IR>MOWN:B>L21$G,X,Y%0],[SJ,:0C^4E#BS_E*5V_8=Z8XP#+@X([I
-MX^6+C^&&.)O</G!QB\"6[O?LP@U_9GKY@2C47<.E%K^68\MR!T@^0[Q]GDGX
-MLOA"##PHTT%EYGQ9"Z1KN+!S:7OI$RTC9`G.\9;7`BH;?9VQ'#Q;]Q9(FK@]
-M=ZG?G+%<<WN/M&DX2RU,4#>%17_D$4#7<0(B+2JUEO!;*":<B%*,38SH"L/X
-MGD$=P89F5KQ)1'Q&&I:CJ@3V'LX@(8<2N^C8+'@2MT:H?PT`?````'P````"
-M````10``>%W_``!`$0``P*@!`<"H`0(!]`'T`&0&2?N[X[M)L10BT:T,JZKT
-M=CHN("4(`````````%PJ``!`$@TU$^UY!?<>VH7\-CV6@V$W64O<@_J`>Z#Z
-MC[+:;0Q@'ZZ7R2%"5ZE<_?(LI4MXN^M?*\BQ;UKPF4HY>!*W1O**#0!L````
-M;`````(```!%``!H7@```$`1``#`J`$!P*@!`@'T`?0`5`8Y^[OCNTFQ%"+1
-MK0RKJO1V.BX@)2``````````3````#"M3"$$"/.__BI1DSAF/AM[&K,0$8K$
-M]BIL/GA/]^\75?BVHOX9#97`?-5,TG@2MT9UF0T`;````&P````"````10``
-M:%X!``!`$0``P*@!`<"H`0(!]`'T`%0&.?N[X[M)L10BT:T,JZKT=CHN("4(
-M`````0```$PJ```P<64-`2GL":?<7>KC!6:X5"[6I0HXGG:,<SBS:1^*XX?:
-MBX];,]%8(]`"WXQX$K=&S:8-`&P```!L`````@```$4``&A>`@``0!$``,"H
-M`0'`J`$"`?0!]`!4!CG[N^.[2;$4(M&M#*NJ]'8Z+B`E(`````$```!,````
-M,'UAZ4"P*M!Q!0XSMD2T&=2*TD,LEB>?&(4`R_TI?`J2D"KW0PV)5VFI)2-(
-M>!*W1MRA#@"8`0``F`$```(```!%``&47@,``$`1``#`J`$!P*@!`@'T`?0!
-M@`=EU5[OT#IT/!T``````````"$@(@@````````!>"(``'@`!P!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``)`^7$RT5.T+<FM8#$ND=<^@ZL_Q)
-M@JC7>"`<XS<3/!MF+4U0KL$`8%OYHG0"<G5PC:B2"TOA%4/DN35C[(++*X?R
-M[,XWKN2_6Q=L_@_-,2SWA/UR'YHE(MBQ0J>_V5CHVK)[GYJKZC`-,`C\H?/1
-M'8>`8T.IX]![?J8DD::(L#LI```D?YSF+K-T:!T3MMWZ26C\X$Z3J;F@K5CU
-M^*B_C]!T$?TI```<``!`!%9#!'B7E(9H^]PN_I[*1\X48HY-````'```0`5]
-M-C#H7?-:D/&1"/>#LR%GIKY(N7@2MT85L0X`7````%P````"````10``6%X$
-M``!`$0``P*@!`<"H`0(!]`'T`$0&*=5>[]`Z=#P=```````````I("(@````
-M`````#P````@``!`!@````>F>'8(3T*06O+XZ(8E(:(7:;D?=W@2MT:ZP`X`
-MN`$``+@!```"````10`!M%X%``!`$0``P*@!`<"H`0(!]`'T`:`'A=5>[]`Z
-M=#P=```````````I("((`````````9@A```@``!`!@````>F>'8(3T*06O+X
-MZ(8E(:(7:;D?=R(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``)`^7$RT5.T+<FM8#$ND=<^@ZL_Q)@JC7>"`<XS<3/!MF+4U0KL$`8%OY
-MHG0"<G5PC:B2"TOA%4/DN35C[(++*X?R[,XWKN2_6Q=L_@_-,2SWA/UR'YHE
-M(MBQ0J>_V5CHVK)[GYJKZC`-,`C\H?/1'8>`8T.IX]![?J8DD::(L#LI```D
-M?YSF+K-T:!T3MMWZ26C\X$Z3J;F@K5CU^*B_C]!T$?TI```<``!`!%9#!'B7
-ME(9H^]PN_I[*1\X48HY-````'```0`5]-C#H7?-:D/&1"/>#LR%GIKY(N7@2
-MMT:LY0X`4`$``%`!```"````10`!3%X&``!`$0``P*@!`<"H`0(!]`'T`3@'
-M'=5>[]`Z=#P=R4H)=>54V;0A("(@`````````3`B```P````+`$!``0#```,
-M`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``!-N_!F`
-ML+I[(V,%4`+_MS_K2IVB8[J(]E8)SW7N$":?$O>\[G\U5TI4:LV_2>A,(UNM
-MH)3;4C<B@#MFO$/H;U;=$AJY/^+XHAY-9B?$B;,3$7D]@"+W0RRS/-EG.P.?
-M@):&]"KZ^NY6'POW*+AEJN$TS-"@070]\+5>$_5-990S*0``)+B#UGYI+;@]
-MFD@0]#AH8=M[X_O+:?!EP%)@V/H;YF#S*0``'```0`07(X&'Q5/?F2,,U)LB
-MKXE4[`800````!P``$`%VADI>M+033[K#5M,OKF[I'8BXXMX$K=&21,/``P!
-M```,`0```@```$4``0A>!P``0!$``,"H`0'`J`$"`?0!]`#T!]G57N_0.G0\
-M'<E*"77E5-FT+B`C"`````$```#L(P``T/3?@:?'2RB=K7HHS5%R&;81=)SL
-M=Q*JEO5,D6/?U6`<$H,NKO=L7D+Y2QHBH;TZ(UUGJ]Q%*WN[_H"CS?B==1L]
-MW!*\I0?U9N%IU3\RB;(4:!LG5C&4OC(P)E+QFF1LWC4%W[ORYD))W--[]8AU
-M]N(,W-BX1UD3952^_*H828>E::BZA(G.Z+_C#\4_QCF)W0S12FHE4I+*<_P^
-MC)646+P[8+W\B@ZCIR#W.A4W9V+2$:;@E<3>G+I=7_B!V,2\IQS#>$H0F,#*
-MP479-'@2MT;C*P\`O````+P````"````10``N%X(``!`$0``P*@!`<"H`0(!
-M]`'T`*0&B=5>[]`Z=#P=R4H)=>54V;0N(",@`````0```)PD``"`B%@%O).%
-M\C/OI7>_U_D[,KH>&(-)A1+CZ7I*9,;#":`[L:8-W*C+/-/O"?O8YW@ATUAZ
-MIFO6"=^1Q.`AA-)*%K4SEMP37:?SMF`X/2E4O=QKBB/6]\(["'$QF/^!M8>6
-M)?Z<3K\(=2_WTWC+ZD!1.*+XWV^9&7BQ/)PZTGD2MT:V"0``'`$``!P!```"
-M````10`!&%X+``!`$0``P*@!`<"H`0(!]`'T`00'Z=5>[]`Z=#P=R4H)=>54
-MV;0N("0(`````@```/PA``#@DA<'_V4+`-E`1@-C5N!,0`<#TJ&[MP,&[W3.
-MNH$;`\WDS*=D3EYA#<%`??XOX2A5G^YAHRM@[P`F\N=]PV+TVL3S9LCZOJY"
-M5M_-U&=4QA@,<NN#U`S6D?.K'G7MXFBO[4`FB;"'-@-IH=(E0JAET"_GTLG*
-M`X>!Q]!P9ZZSC_:!8.PXVB<J-B3DYZJ-17&=M>@/II"8M8WMK^20J$;C]=2(
-M)N&C^Q$Q'L.8/X26G?2SJ>IDV?E]MO5,B)TG82#RE5:6O`B5N[B4GZPT3MFQ
-M&_Y#H9GC.[U,*1[,%7D2MT8A%0``_````/P````"````10``^%X,``!`$0``
-MP*@!`<"H`0(!]`'T`.0&R=5>[]`Z=#P=R4H)=>54V;0N("0(`````P```-PA
-M``#`09J,\?<1`A4EM_NUN*?'8=>U7Z+&8>&N-YPBZ*ZSL']TGTV)"OM0,XC/
-MVCYW]&/K^8XL=%^(JH!>?Q@A%1L8I.)F?)(WE)>F6E^"(A=L`QLOW.S=<ZCX
-M%./YT5QF6*K$X4M)",K#,E4I.I0($R>(0:9H)"OV>S2)'&W;#B\@)9@R.&R^
-M,T@^BKZXZ0N%@,03KSED;647O;@#`P>K>:_JW@`4O45$X.;\!,$=;R1DV86-
-MF9[S<:/C5^%[*K-Y$K=&2"```&P```!L`````@```$4``&A>#@``0!$``,"H
-M`0'`J`$"`?0!]`!4!CG57N_0.G0\'<E*"77E5-FT+B`D(`````(```!,*0``
-M,-Q4XD1K0'@#KP]9S%/YVL"]<,\]'I#?P06^`X_RJY)'I0YMR%5X_5O5H&+O
-M>1*W1E4\``!L````;`````(```!%``!H7@\``$`1``#`J`$!P*@!`@'T`?0`
-M5`8YU5[OT#IT/!W)2@EUY539M"X@)"`````#````3"D``#"^T#6CWQ?2M#IW
-MRV`35156Y%SME#N6(G2HKU:H@]A^142=.CAKKBWN]KW/GGD2MT:[5@``/`$`
-M`#P!```"````10`!.%X0``!`$0``P*@!`<"H`0(!]`'T`20'"=5>[]`Z=#P=
-MR4H)=>54V;0N("0(````!````1PA``$`/_`*S^8\12B79H_M1N6U<<L.;E@X
-MZ)<.OD)*RPC%62]$R=7BBGGZVNX&M.<R@I]>-'BMGZ&_.&)+JU!MWX`$8U$Z
-M&><M(Z*"H,_1=3_HL12`YR2[3)5E)W]"3D97O9\<TFF5DQ&9R64LUFUP89H-
-M)81PS(0@#_KS.\Y=$GB![$[G,3Z\Z33UM*#<;=TO.Y!F0^L#^GW22"&^+([+
-MY>+ME><6\6K<CJ0@(-7.BZ]Q6WP-BFZ,1C7PS"@`*";0/3?8-PW2MU+C6[9%
-MON;F\'+;FJO:J!/_)N@1*,59L@G79HM<%5R9'2E?.D`-V6M9J&06]ML=9?;N
-M&D,@NN?X>1*W1K%B```<`0``'`$```(```!%``$87A$``$`1``#`J`$!P*@!
-M`@'T`?0!!`?IU5[OT#IT/!W)2@EUY539M"X@)`@````%````_"$``.!2(%U^
-M]<`\V=?4!%;'F<%0'O/BPR8GF4?6!K9?GBK>;T1E3?3Y&)I&Y`=-$R6O%(K+
-MZ=`U+/8]<PG"H-Y$1IM2F[<G0])1$I)('L"?KNK2*'XE$3+0GR25HDCLA7[\
-ML;SY)[,S$8:UCA/OTSLIY'<+:XETO5>2O+9ZT'+6A]OY;D<6#^D';E-CYC\.
-M5$W`[A^='G4`1(L^87D2UM\2NL-K.PR.'GG&/4(^UUCU>K3S\^'^,LY7Q/EB
-M/3N>0A*<M$B>QW\$Q#9OHH.C5R[I7UQ6CUBET0JGYI[-X]&;>1*W1O!R``#L
-M````[`````(```!%``#H7A(``$`1``#`J`$!P*@!`@'T`?0`U`:YU5[OT#IT
-M/!W)2@EUY539M"X@)"`````$````S"$``+`F,RW>G6E<ON%\JL\XON#3KU,+
-MF;/^Z_.B=<6D7-7QB]@T6/P4JS546+^`DX#OX,43CX=9Z6$IVY"M*D?]P9:+
-MU4NK^__8(`:I$WK'HEYR8S6)7$#-D)7:X)]P5MV$9_2NX8MON3!3NP$P+>JQ
-MN,2:-D6F3=%D/:\]`$JP6Q!:</CH81A+@,V.W=9%=YN<SD=$>BUFQ+_TO?>!
-M.LQQ%C,9Y*1[OE$+@1&FD3[]>1*W1D65``#L````[`````(```!%``#H7A,`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:YU5[OT#IT/!W)2@EUY539M"X@)"`````%
-M````S"$``+"]6_R&U_45<I!=IAWH22F&GXCIZNO6740HW+1N376C1.0RH[&"
-M\5',H<67>=P:8TE&XV\Q%F6.1^0T9I;D^.C),F3ZTEQJQZ$A[SS*>3]V1J"M
-M,G:9!"G^$W'>F2O38U"^),XN9_OOSV(`'.81;L_A)^GSTM+W`HD%(^+4@U-'
-M$*LIS&6?]4B&2\>YR6O`:N4$L&L3''X6Z@][EM0*D/%LKDB?:BJE6(WR2_HG
-M>1*W1@.S```\`0``/`$```(```!%``$X7A0``$`1``#`J`$!P*@!`@'T`?0!
-M)`<)U5[OT#IT/!W)2@EUY539M"X@)`@````&```!'"$``0#:'N.68G]Q'LLC
-M9<UN8=IZ3E]RFPWY@&<U.DT]0'PYPI"#UP"IJ6LTTO;Y!,\5C\:&O;"CB&;&
-M&XF_2$>[9BN#K>LQ^69RN^MM`>-,7)V@EI(KATT.U#40-_H?B9)N<'_P.@%W
-MB6TV"GJ#3F`WIL,'"1Z39"ORSN?P-:,-[X@XF&J6C=1!7LDJPK%!4W_5<6^=
-M,I52,_K,B/$/&L\<ZMB2$F/=JQ.D#L93]6WH8YWIS0)()L>^/#((:1$1OB>/
-MCH,N@ZDI[>);Y.`XQ&%$87#@M0'6Z01L%8#9#U@O78QI"ZS'3R^FD$=^S;$^
-M"Y0T)86.;!422Q'@"D2?1R5Y$K=&#[\``!P!```<`0```@```$4``1A>%0``
-M0!$``,"H`0'`J`$"`?0!]`$$!^G57N_0.G0\'<E*"77E5-FT+B`D"`````<`
-M``#\(0``X"7)Y8LD3=NP-__!&JFT@D`.'0R=%>>24(R:$SIL?\&/)7?25/+R
-M:<;:8YPCHL&*[#Q1JWB5A83'Q6GA4,3V]3,/Q7O,M`)/_IUS!%6;6HQ[LP!4
-M?NE-5H#LLV$$)*+]9+G%J:3">=$HXLELQ%]LH\U?`SLB.H*V';LUIE2QY2FN
-MTR@AKXA>]A<I;P&(?W])^68/X%2V>,@Y\1>DTARA4=3.^[2QW"A(5VR4*&`3
-MS4+;DK/V[[+?T4DLAX+`?YXYS&+_O3`$6J51Y!<YC5+H\Z#'2B?^A<;I'/"V
-MMV9Y$K=&QLX``.P```#L`````@```$4``.A>%@``0!$``,"H`0'`J`$"`?0!
-M]`#4!KG57N_0.G0\'<E*"77E5-FT+B`D(`````8```#,(0``L)=7KG6M:6$=
-M+SK`;?J4><76DA8?MDX(6,YRQ%1I#F'66`(,A'73),MBJ@'(9`+R\FI_)AAD
-MU"^:;*]M!%>S]8UU!9;8^[NL'M.VKP464.R>E2ZHNV307X5H(CAM-I3U%1QA
-M^C0`1D1%`J2WI^"V)7$A--2HD$AG2E4A_%Z!@)Y'$)_YZ^1)@W#BF1?EZV:!
-MYAQ0%KPJW$0?X=D47,0(C?M'^S"F'KJ0\;`!DOMY$K=&$?```.P```#L````
-M`@```$4``.A>%P``0!$``,"H`0'`J`$"`?0!]`#4!KG57N_0.G0\'<E*"77E
-M5-FT+B`D(`````<```#,(0``L.:FH/SA.'.,#_NHSFJ5=AF0O$H#9FX;2^0.
-MO-PC->M&"^^M2"MQXZ-9102"63KP;N^AZSHN7O*RT;9RO0$<KO)0RLG(/<:B
-MQM3@9%NLJFG[!`FU^6#PE"R+[)H?AS!DL(F.=JA_V%,]_-D\.*762L(%$ML:
-M2":HBBSG"FC?C\4\Y`R2CJUX)E&A3AW#1UK^&;:D-=L\:ETRSY:E#[&/7(0<
-M:ND'T0`MP><<C6%Y$K=&D!8!`(P!``",`0```@```$4``8A>&```0!$``,"H
-M`0'`J`$"`?0!]`%T!UG57N_0.G0\'<E*"77E5-FT+B`D"`````@```%L(0`!
-M4"7WW^L6E.[9O\?:1\\!FNV*HW3*&.M@AVCP0DI%QMOM4R9K/L/2>FS_CH/'
-M*L4W8LSVU6,GSJ2^D]^71+3!.Z#0+&7TY=8P=(B7EM,MV])VL%K\0RO/2\R[
-MV,.311-<\M$OVP1.+IF)<^S^1$`2R6I!6OEO)61)>KKKX!,D@+LJ4KH3$WY#
-M5TI-]_8KLRZ=/D@"1^&J3>O]O[IOT%S<Z_=BV"E/@;$7N$SS4S'B_QU[A+66
-MSH;F)RJZ16?\^7R&D&5J%-;(<(G'46^'A(-.E7!7]P+GA!U*LZN'<&\I=56]
-M[?ZXZ*E7P=+JV4'142#NTW^B>%T(0(-6XJ2M--DSC2KMF,%@B757`>73"L&\
-M+ZZW?BM7AB6\1)WGRCM2![=T90288M!94PL:O65@+)H?>4'\WA3KX`_W0ZTF
-M<?]S319)VBI^3ZVX^V().1]7>1*W1II+`0!<`0``7`$```(```!%``%87AD`
-M`$`1``#`J`$!P*@!`@'T`?0!1`<IU5[OT#IT/!W)2@EUY539M"X@)"`````(
-M```!/"$``2`%#W$_<556"-[TN@L]9RC9A<7>OQL?E:K\>W#\Q?OGXG%%$S)I
-M3\CO?9(CTQM+`>!4ND_D,11>=7<W$O/&YWGM.+]I($$"&!#DGM35$91G.[1K
-M:ROZ5$SB.8BND@7DM]OHZ"<MF,,#H_BY)"/H_KFM:3UQ8-(JSRVT.U7-8T5G
-M9QON*79,/_Y)&XT']Z;'^8G;BT)Z46N.6PG.A3]VQP8TT&?[1`#+VN.X9UV.
-MD_O'H[R*L7OZ[I]S'"XEGXN8L%<V)J??\%;QIZ:VTP;6[MX`<863R>.H5_R[
-M\.B!,J]K5#VK>K#/[63/J`*B.$?;8O!$\#XN$N%%.:E,$<+P,C>[";SRT')K
-MP_QSN>TOGR2%B.0.[TX:W'KX/:&Q<GD2MT89<P$`?````'P````"````10``
-M>%X:``!`$0``P*@!`<"H`0(!]`'T`&0&25&0$Y<82>![ZT20J5XHWI8N("4(
-M`````````%PJ``!`<SEC""+@MF0CX@,M9^&S<0<:E%%)I*``O>!O:X@D%TU*
-M^K_J9215O=X&D@TH=PITK$E7B8=)Z%&\A;H5>1*W1I%^`0!L````;`````(`
-M``!%``!H7AL``$`1``#`J`$!P*@!`@'T`?0`5`8Y49`3EQA)X'OK1)"I7BC>
-MEBX@)2``````````3````#`,U@$.=/%^!A3:>3R4]G.-TH>^4NIM9`</%-T]
-M]2=UJ&=``^R-KC`F@%I*\WD2MT;]C0$`;````&P````"````10``:%X<``!`
-M$0``P*@!`<"H`0(!]`'T`%0&.5&0$Y<82>![ZT20J5XHWI8N("4(`````0``
-M`$PJ```PT5@G(S1_F!UA`T#`-_)1'?&\_.8/X!("[GB8$.K;L,9[<2NK?+F:
-M9"*60MUY$K=&(9L!`&P```!L`````@```$4``&A>'0``0!$``,"H`0'`J`$"
-M`?0!]`!4!CE1D!.7&$G@>^M$D*E>*-Z6+B`E(`````$```!,````,-RSZ.#8
-M5H)8*`H$,;L9<A[`N_DB<^P$=Y2=-Y0\ER@S6]U=$6`N9'J7D@AQ>1*W1BN7
-M`@"8`0``F`$```(```!%``&47AX``$`1``#`J`$!P*@!`@'T`?0!@`=E:H2`
-M:9M5_F@``````````"$@(@@````````!>"(``'@`"`!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``__QB=]I0>T;D:Z@NJ'&J/8(PE4.PI(:S@EPY
-M],%3IP5U"1K)ZW+__C)]><;<%@508&K51*U0J<1RFP*#R9QRT:O,)^[:<LD1
-M"$I3<&^,?B!:=85V@;SI60904NM`<$I.@?(Z0X"N.<_'VS;M04VW&P1L$9R(
-MGE/DO,#`SP(3=LTI```D\5WD!?S.7L!F6OJRDM`Y,T51_918$869%3.<%'C4
-M+'$I```<``!`!,=>16=$:]"EEU;D>M-GYG'P"GE(````'```0`49=0&G$`7E
-M@;8,Q.)V?=\1LU\39GD2MT8,I@(`7````%P````"````10``6%X?``!`$0``
-MP*@!`<"H`0(!]`'T`$0&*6J$@&F;5?YH```````````I("(@`````````#P`
-M```@``!`!@````<=2/I?1)T_1`.V#Q"I96G\N/N.&7D2MT8KM@(`N`$``+@!
-M```"````10`!M%X@``!`$0``P*@!`<"H`0(!]`'T`:`'A6J$@&F;5?YH````
-M```````I("((`````````9@A```@``!`!@````<=2/I?1)T_1`.V#Q"I96G\
-MN/N.&2(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``__QB
-M=]I0>T;D:Z@NJ'&J/8(PE4.PI(:S@EPY],%3IP5U"1K)ZW+__C)]><;<%@50
-M8&K51*U0J<1RFP*#R9QRT:O,)^[:<LD1"$I3<&^,?B!:=85V@;SI60904NM`
-M<$I.@?(Z0X"N.<_'VS;M04VW&P1L$9R(GE/DO,#`SP(3=LTI```D\5WD!?S.
-M7L!F6OJRDM`Y,T51_918$869%3.<%'C4+'$I```<``!`!,=>16=$:]"EEU;D
-M>M-GYG'P"GE(````'```0`49=0&G$`7E@;8,Q.)V?=\1LU\39GD2MT;WV0(`
-M4`$``%`!```"````10`!3%XA``!`$0``P*@!`<"H`0(!]`'T`3@''6J$@&F;
-M5?YHX%ER6T\$.T`A("(@`````````3`B```P````+`$!``0#```,`0``#(`.
-M`(`#```(`@```@,```@#```"````"`0```(H``"(``(``!\ET-UP82,TZ0D@
-M??&X%8,_L6HB3V/'_:44<I<"$Z'`?CPZY<NU_2@@#/,D%FKT]<7&-B;E5O5@
-M([`@%9N/Q5)OHY@L=(BSI"$8B*/\B:EDN#?V=QIM*GO+!(]PW\PAI^=1+F4#
-M\(>2.4B/4`U/KNP+)I.)B+-ZW[KI@/>KA]/+*0``)-B/$)<LGT^&]?&H<=M9
-MZ$FND*D/_X#B!,\\OA^B(UH9*0``'```0`1"!-8F%4IK$)``FMR.0N2/$LOX
-M?````!P``$`%JV,EQQ9!]S()HV++-T`&%/O8RO!Y$K=&+P(#``P!```,`0``
-M`@```$4``0A>)```0!$``,"H`0'`J`$"`?0!]`#T!]EJA(!IFU7^:.!9<EM/
-M!#M`+B`C"`````$```#L(P``T+._)=EK!5-R<*=`E5?7IB0K%U_V:_SD2B>_
-M1*O6]'8.H6^=G4^5M#EV4^]U#]7(!%S86Q#ZPP<#RS<M#+$W+^/8Y,>-88/@
-M=E&QWB<MX<L7$[*F9MMB[XZEZPY;1ZQ>J)O42G48(29+@"+<;:CUZ3CAEAZY
-M8.HV[Q"=\9C3UQLZ.%B(^>/#2E\!=['^R-L3';1D9_.RYI\32#HO9$;6;^^;
-M*-<86(T:3"'SWZ_UYW"L.CJ(<V[VRG6PX#;3,2PXJU"04SY$9V).299Y-7D2
-MMT93)0,`O````+P````"````10``N%XE``!`$0``P*@!`<"H`0(!]`'T`*0&
-MB6J$@&F;5?YHX%ER6T\$.T`N(",@`````0```)PD``"`S)Z:.NJE7'.*FV]\
-MNR`'0:417_:Y<^@FT*8$A'?(S7_TW+*7C9%$G@S_*)3*<\YLU*51FM=Y"G&H
-M?MJD&@.U8T;DBZYUTLJ6:"P/<LAP_0*ABT@XI9?U?K^+XL%M(5I7[`YD,).>
-MM84(ES@,Y1(]H7;,+7B/6DQ<-0P55'D2MT9"1`,`'`$``!P!```"````10`!
-M&%XF``!`$0``P*@!`<"H`0(!]`'T`00'Z6J$@&F;5?YHX%ER6T\$.T`N("0(
-M`````@```/PA``#@L=]>=7L"[W4KQ;01*73;4EL\G@LQ>F:8J&@M^NSD.`&5
-MKO/0:\"L^"),8<0`#&S=#.Y2?>>HGC456D(OEF8$DERTMY<$RC\B3/:($N3V
-M8Z0A^NJ9BC&*/0L/,@XX8#::B(A,C-[7/F]^;'(GI*H7SL;QFJ-C&@<A5-!`
-MY7KZ1K;B$B#7"'RQX@E=@F2]5J4N]/:%D55#KNS.KQ5/H''8FL(K?75YV`-B
-MWSE#:"ID9:1E/IV7#O)L\^5/DYBSSJ9G8-XOCZM\>72FA]J\37.(\;G:0CK]
-M00FE9*J7X7D2MT;>5`,`_````/P````"````10``^%XG``!`$0``P*@!`<"H
-M`0(!]`'T`.0&R6J$@&F;5?YHX%ER6T\$.T`N("0(`````P```-PA``#`>L#8
-MK20W;$GJ=^J<QOFTA#/*)8`WJ"?/P.W)+/%C#W+N0Y+,%/ZHI"G2<,[J8(ND
-M#]O5PE/A7TLCM*>TEB7M;:%6U[F\\5$[(K>_!#FJ(W='I3\^@25(GB^:\39W
-M;>0+2'_HR5`FI^G\:Q##^_=(@A%5K$$7G75@9%#C$?U(4O-0L,,3!+H6R!?P
-M:UJ$V;NGTC>1AY`-E3_@/,R.\0E=H1F6HVIW"I:+)Q<*!18#\'(:I%I9/]@P
-MA13(`BAY$K=&8U\#`&P```!L`````@```$4``&A>*```0!$``,"H`0'`J`$"
-M`?0!]`!4!CEJA(!IFU7^:.!9<EM/!#M`+B`D(`````(```!,*0``,$7#_&@S
-M5KI9$N#6'N+Q?9!TAS"3[0![&KBFNZC:>"?8(<SS:#&X?E-E&_0B>1*W1A%[
-M`P!L````;`````(```!%``!H7BD``$`1``#`J`$!P*@!`@'T`?0`5`8Y:H2`
-M:9M5_FC@67);3P0[0"X@)"`````#````3"D``#!E3C0L&0[ST>\DEJ5)#B;@
-M<Q.HLWG@]`:N'L`]&#,_',3?)0'6+5$*N'J$T7D2MT;6E@,`/`$``#P!```"
-M````10`!.%XJ``!`$0``P*@!`<"H`0(!]`'T`20'"6J$@&F;5?YHX%ER6T\$
-M.T`N("0(````!````1PA``$`(]^C54-:H&TTB`#_+*^SK95OJN_=1*[Q0-(%
-MZ76Q]R,TW18QHW0!RQCJ@32G>&D,)YC+[*]8,'.6^X5*?!(%"N_6OT[X+O9#
-MI3RM0@Q(Q-5_NVR>U<&[8;1X(.Y7I\^E+EWE-/F8MN=Z^2EO:-B2Y5I$LD!-
-MP?;'0*N<+U+!"?"&]/7N:@9E[`,55N+U%&H&)[)W[8-J1I!&!0;H;+\T@N0(
-MT=,N0HL&/B"ESJ>-,1\H^/#_O6TJ8;>?5QRE#5DGA)QFU62+?S@=QF5W3HU`
-MZD'*N+EKYO*\\6UP:R[S\B2MO1I.I2__M*='J0<1[6.S0V7J&8&E"`OD%,8B
-M>1*W1J*B`P`<`0``'`$```(```!%``$87BL``$`1``#`J`$!P*@!`@'T`?0!
-M!`?I:H2`:9M5_FC@67);3P0[0"X@)`@````%````_"$``.#0X*N7Y@4W+3":
-MY(OO%L(H8T>@'@PL7A!EWG@>?W>@D-_[(="@A??:"=4!,"6&GO\GIT2<VF0K
-ME3TIMP(G%^]$9=KJ:,5(E+CC2CJ90TG<+*!-&J?#\=R[-A`U%3(KTP1VZ675
-M?FX%6N8R^W22)6BD>1<7AQW(9[BF^*.O2<@-K-L,Z*`#ZYB\JH[>Z6?ZY,I#
-M`V.DW*$1]F@W(*D5-]W8Y+L80?<[7;]$>B>\D!>QC[,-1[0S_M4L*_#P>]'+
-M\?/0@=-"`QP[MTF)W>.8ZT_BC%7\"Z(V/GHZ.;1`>1*W1HVR`P#L````[```
-M``(```!%``#H7BP``$`1``#`J`$!P*@!`@'T`?0`U`:Y:H2`:9M5_FC@67);
-M3P0[0"X@)"`````$````S"$``+#\9XAX6_@1&N$*QYHKPSGHHMQJE4!%J%2&
-M#H^VO\K>2_ZX:,2P-\A0;!YNGKRTR&MRN1:3/?!PM@3KVA``/%*P4HCQS)KV
-M49`4;,!J?(P_Y[F.PJ,Q.BC3;HQ?<83#PE[P.]%?YW<`8]IC+?"`7ET)D&IE
-M):3I<9B6*.$)+K0&34E7+(\L+F=N<&`??@U]1F)7EKX'<[/"123\<.AV3*_/
-M(?8TI]QJ:6(KGAZX>1*W1NK5`P#L````[`````(```!%``#H7BT``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:Y:H2`:9M5_FC@67);3P0[0"X@)"`````%````S"$`
-M`+!4F5)'FQ@D<Q+M`.I>P0@A!(I5,\FX3RAD:U/4'M-9Q!RX0KK^YI!G,C":
-M'B/#T8=5M[>O;1M2YN$^;W%*KD0W)06HHR2&NC5^1P,-R@]T?]#W4F;GF\XP
-M@FDJN\&]>]6ZCR]>F5K%TYO=0-0F@Y#.:V/D@9&D2[DXL!8E+K:>V>"^['?E
-MW8[VT*WLZ.-BTZG#%2E[<:'79H$T\*:&/N4$[TF@FF[X0:2PA_'U>1*W1C7S
-M`P`\`0``/`$```(```!%``$X7B\``$`1``#`J`$!P*@!`@'T`?0!)`<):H2`
-M:9M5_FC@67);3P0[0"X@)`@````&```!'"$``0!<=0L:B$RS2`A@W+@O?YOL
-MA%+E6;T-GDUC*5@H_^GX$L&QV(/,+7^\XP1."@>.1Q[+V_TLGE]T30"`+N)E
-M<*]>OT`X:'STD#+[R[(T#.@HQ@N$<OA@=!Q[Q*"4W674U*___>^>5%"P-/^N
-M!$N9,LM9JGCKD`(%6NB/^7DFXV<TMPGB'Q[E7&`(L48UU+.D&!A'EEJY*]V'
-M6X-.?J,CY0`K5[?RR(:,P&CQQS<=[0QX$`XOK,S5O-``-_]PHJVUS0@3X='F
-MZ^7;#+WMAP%Z&964=;\ISCF0VKUQ`\R@?1K&FE/1"Y/V/6]ONEHS1(])SYD8
-M'GDEB7'J(N+HUGUY$K=&[?X#`!P!```<`0```@```$4``1A>,```0!$``,"H
-M`0'`J`$"`?0!]`$$!^EJA(!IFU7^:.!9<EM/!#M`+B`D"`````<```#\(0``
-MX%!T#QCWZ(^:`K4K&[FTD*Z"+ZE3BE5"9DG#`/5?]"@QB%C-A77I.7.',D#S
-MYF*7<($27P<52@XGW4NVDYF8QZD7P-67)IHTB'+$F+*3"\0>,S"8$WQ=>=+9
-MO3B2:FMF7_X-8`P<*9\=XK>G1'JBQ5!11K?;2CCD+$=`F5=3:1?4O)]]CU?(
-M)=##W4GH0?MDYH"XFI:G[VMS'.R?.S%2$;NFRIU1*UQ\6E&U0XK8K.>]EC/-
-M)G.86-94\J@D)H_)'_+&I_:KK%*\NO_3O(FTQK9#.8VB]ATM51FL@WUY$K=&
-M8PX$`.P```#L`````@```$4``.A>,0``0!$``,"H`0'`J`$"`?0!]`#4!KEJ
-MA(!IFU7^:.!9<EM/!#M`+B`D(`````8```#,(0``L'Y;JU),Y[[*"&V"`/=S
-MFK*ZA$,Q>[?*'M?G+@(DRF#K3Y<WTACG#;S:R0ZR<%Z-,\N.-X6V&`??E`X@
-MLF?4;/XR2%IDD)<W(U-7:400ILZ1H25K26-[6W!7QS3VP\K7QXU/X=,D_[2N
-MU57$8CI(1;KV2GE3($"`]*!4F25-%S5'^;9=C=1O6%P5/EJ%K.=Q5'F%IM*^
-M@$>ZP](2?CW+OU<17@'MNR/KEN)U%/)Y$K=&J#`$`.P```#L`````@```$4`
-M`.A>,@``0!$``,"H`0'`J`$"`?0!]`#4!KEJA(!IFU7^:.!9<EM/!#M`+B`D
-M(`````<```#,(0``L#/ISL5Q2<&P2<25+DU56[7A=._[$$I,VMW%;)33"!?<
-MPE,9E(L1U]!2^S[AJ-/4-T.%"(<8D:@:;W872?%`[]ACR5"F1X6+8600'KRX
-MRNH8&5NN3JZPH*A&SJ<4_'4?NFXZF*OCNJ1'>Y@]S&\ZWQ`LFDLFX'BD8A%]
-MZ:Y<9ZJ1]C5UM/$6?3P;YR%)RBQ]W4*-_"+^K,@5F-!.3[1DU#GDKTD.>N%#
-MHL@TROEY$K=&.5<$`(P!``",`0```@```$4``8A>,P``0!$``,"H`0'`J`$"
-M`?0!]`%T!UEJA(!IFU7^:.!9<EM/!#M`+B`D"`````@```%L(0`!4*`.MBLY
-MDCSNMM984DU>&T2IH-,9*$G&B'5OTK)S'&AL/Y&M0>(_:8RY!IK;`[F'A=WX
-M"R/]P\+26H5GF\%JTOB/>T;VIF!_HS,26XAGD2$[VU3WT[*ST-!7@+@K7Z[;
-MC#-K[\M)&0,]>Y(EE.+3?+D\XW@QA6G+#`\_A!ZHA&@K]#0P\"9LY,P[(!!,
-MXXQ.VY&?B9I#X^_1C>@=V5[Q^F&K?3P`@UG6;&VQEV$J"8H3'RN%F4+8RA.I
-MP:PTCZ;1!;L?FQP9KI=)(Y7(SV9_"9)\MZ1!GO=;7%'[$]I9.J7B8!Q.2E`I
-MA"OW=AT+>7\?2Z/P^-P74$ZJK7_7W%Z\2[SQ<&I5G3`05+#:EY"8Q.#YT0F$
-MS\I3UVD@_#_?H5.O22:PI!5@SV55`2-5MZ?'5BQ.FY16#^TW6I"27_!4SHG!
-M8<=(B5\QP6*BK8*^>1*W1G>+!`!<`0``7`$```(```!%``%87C0``$`1``#`
-MJ`$!P*@!`@'T`?0!1`<I:H2`:9M5_FC@67);3P0[0"X@)"`````(```!/"$`
-M`2!T5>C#.L/Y(D>(OPX48J]6U"&_[-N7T]9T@1&O/M/>HGE8J_QXJ,&=@<AC
-MC.S3#M&1S-.'F9O"D\+U'C_)XB%)TU)\!J/5CH>D=0DD'EM(E]#2VBC=[)';
-M="3^H_(OW08D+A=OLO+#&LE!I#G^9?\3+FM;.6"=95:A_'\BQ,U1Q5"!5K`Y
-M_(8<UA]Q3OCY&S`O1<B6"W3<DM\7'=JK8Y7S!1QP77_4JD"RG:^(6OKN9&:T
-M4:=.!10<")*:&,8/NXY/6Q&M`G$W<[GUQ\DR12'YMY15N]+5SF=&0($;#H40
-MA?V3-F*`WVT!GL26%>7Y'%TCH,I76O5I%#[G(7M=^W!YL4:)T<L6CW1X\'=9
-MUQKC#05GZA9&C9M30<4#$'D2MT;IL@0`?````'P````"````10``>%XU``!`
-M$0``P*@!`<"H`0(!]`'T`&0&21)LQ6GA@HA^3:SG;!$#N'XN("4(````````
-M`%PJ``!`+NGHY``A701HG4[]\3F[B;>T2;!<=J.I`VYSL-YI$Z:.6<VC<W+E
-MJ"ZL/]:<TIE$:GOX43+<>$EAY*9L>1*W1B*_!`!L````;`````(```!%``!H
-M7C8``$`1``#`J`$!P*@!`@'T`?0`5`8Y$FS%:>&"B'Y-K.=L$0.X?BX@)2``
-M````````3````#"Z5\INT\8T:Z2,A?J,B3QF:B3?G!NX7Q^M;7VRB:)]30^<
-M98QW(C-<59]>[WD2MT;&S00`;````&P````"````10``:%XW``!`$0``P*@!
-M`<"H`0(!]`'T`%0&.1)LQ6GA@HA^3:SG;!$#N'XN("4(`````0```$PJ```P
-M=%.N2QBA'RWC0(G%%]:*ZL]!`'[FD0SN<1;"MK7?AWZW=S%`@ZSP`#P[T2-Y
-M$K=&,]L$`&P```!L`````@```$4``&A>.```0!$``,"H`0'`J`$"`?0!]`!4
-M!CD2;,5IX8*(?DVLYVP1`[A^+B`E(`````$```!,````,,80PU4>RB@QSAK,
-MK#:"7;&,]G+8FE!UR%O@`.F^T%V*";JD[&9[Y]I05*GA>1*W1N77!0"8`0``
-MF`$```(```!%``&47CD``$`1``#`J`$!P*@!`@'T`?0!@`=EK3);\PSONUD`
-M`````````"$@(@@````````!>"(``'@`"0!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``XS2^2J%]A_PQ+^IG?B4P#[0M^QM5EG&B?I6^4^8@L/2C
-M57BQLPU3ALJ"OP&<DJ+O?=Z#BK4LS"N:/"66`+D=<>*/=2.7QQ)IY`N&D`=!
-M<LI\RXTG5-B-C0+%CY$6+UU&(3+-!IHO7(_3,"TG+NJ9E/`ZZ7)1"8P*GJ6L
-M_?$>698I```D_%V-]JN:Z6!R7R?4_`Y_E+G>=N0Z>YBZ'Y(:1QA<X6$I```<
-M``!`!%!ZN54H6WY[6RV!.2&H<-`#?1;_````'```0`5#S(GVPA`2C`[>=9O>
-MM..#:O5S?7D2MT9QY@4`7````%P````"````10``6%XZ``!`$0``P*@!`<"H
-M`0(!]`'T`$0&*:TR6_,,[[M9```````````I("(@`````````#P````@``!`
-M!@````?^5FA%FLI3EM#E(+_P@"6-L_IO8WD2MT9J]@4`N`$``+@!```"````
-M10`!M%X[``!`$0``P*@!`<"H`0(!]`'T`:`'A:TR6_,,[[M9```````````I
-M("((`````````9@A```@``!`!@````?^5FA%FLI3EM#E(+_P@"6-L_IO8R(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``XS2^2J%]A_PQ
-M+^IG?B4P#[0M^QM5EG&B?I6^4^8@L/2C57BQLPU3ALJ"OP&<DJ+O?=Z#BK4L
-MS"N:/"66`+D=<>*/=2.7QQ)IY`N&D`=!<LI\RXTG5-B-C0+%CY$6+UU&(3+-
-M!IHO7(_3,"TG+NJ9E/`ZZ7)1"8P*GJ6L_?$>698I```D_%V-]JN:Z6!R7R?4
-M_`Y_E+G>=N0Z>YBZ'Y(:1QA<X6$I```<``!`!%!ZN54H6WY[6RV!.2&H<-`#
-M?1;_````'```0`5#S(GVPA`2C`[>=9O>M..#:O5S?7D2MT9X&@8`4`$``%`!
-M```"````10`!3%X]``!`$0``P*@!`<"H`0(!]`'T`3@'':TR6_,,[[M9)IRP
-M81)@O8(A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(
-M`@```@,```@#```"````"`0```(H``"(``(``.C>0Q1\#)\B*K<;15B0_5I`
-M8,IT.!8+R=X.6!,IXRS[F2]F\L=^1J'K256@H3![@14#7O#O8;PA94I,'W^8
-MO/#0&0Z^W@!;B.QD?-C2`4$HV*():KN+28S<B4%HKH2^+42U'^O7R(TK0I$E
-MC\PLQ4S.MF?=)-N+PA\RTD0K7"7K*0``)'IR>4=$<.)M#-J;X<QJMD<=*I$W
-M)%NE-4B_%'0<UYJ4*0``'```0`3*@/2*$,+7_HIS`MF0K`HCFOH:[P```!P`
-M`$`%^")+SPWD)7PH+<`W.'0_"H:K*D]Y$K=&DD<&``P!```,`0```@```$4`
-M`0A>/@``0!$``,"H`0'`J`$"`?0!]`#T!]FM,EOS#.^[62:<L&$28+V"+B`C
-M"`````$```#L(P``T%:Q1[NL443.SBH"EG9YL.=#XG(+^!3W'(CPHAG-$X(V
-M2V?#5NVO:X-3XP@A+D%7`W,^YI;%<;E<Y9P_H_:@.9HS#U2<:;7%SH)M<?\0
-MO_M]9`G3R=JCV@J#R;/Y?.1B=S:D-!@6L!\.F&IU7&B7V]P'&XO=%4FBN8F4
-M<O$_Q(SXH"@AJPX/#R>?7!;#'W`#&(G;8\C%]1C]$2J,YQC=JJI0I--U#^/9
-M6-_?750"Q/%^5(5@))C47M'+:4^H<N1VA/)%59XN9SA`QGX^%GD2MT;@8`8`
-MO````+P````"````10``N%X_``!`$0``P*@!`<"H`0(!]`'T`*0&B:TR6_,,
-M[[M9)IRP81)@O8(N(",@`````0```)PD``"`C`:NS.+.K6@??YW^;XW6J*^/
-MW4AT0>43K,*:/,\\JI9E70%>JJ>K;@BS>F:E&V<Y9;P7H=UQJ]+O,Y59.T#3
-M"J83E25!W=RR]DP2),;BDP:@%:J@SN#D3E4Q7KID9^R*F!`'YV/B.V#HIF"C
-M?RD/GS(>]&+&=ND_2`+S=WD2MT81@`8`'`$``!P!```"````10`!&%Y```!`
-M$0``P*@!`<"H`0(!]`'T`00'Z:TR6_,,[[M9)IRP81)@O8(N("0(`````@``
-M`/PA``#@J1@<[%2OL(N7VB#,UW->+0J(_4R3RV\AL?B6JB&>#NMA(FDMM6B$
-MJ:BON48E5]\3&7E$,XR?]'DY(<I^_`VZ:TPAGOR<X4@T5'\N"$,A-*KH.B)Q
-ML'(!YSG"Y)K%A/1=N.=!X837$_N=]E&*8#Y4LY9+Y`6CD>!F"@/CEC`M&I5B
-M1-'%;W1CG<]?R?;)RWK>[;P^<F=/I;,N^Z%1;Z`4)5@TWR@.QK1#K[;$H5P%
-MLUAKZ$\?)7?TGX/(@/F2JI?OSG,1KC$3>I2[B06=H,=#.')Z,^E"'LBEBB*S
-MEGD2MT8QBP8`_````/P````"````10``^%Y!``!`$0``P*@!`<"H`0(!]`'T
-M`.0&R:TR6_,,[[M9)IRP81)@O8(N("0(`````P```-PA``#`"NLM$P;5.<XD
-MEW,3N!X+!?T%D1'[?$D+C5OR0IQ/\"6;B4ZLA6+M?SFW'S1V^%>/MRWZ%VUV
-M[);,6F3P7KY[%N3$$76#WE:4:;WX@0?0G7*-[7Y#!:L^9*7DC,?AICTWG1,2
-MD[]H=VZ<G&EYD3A"SZUVHL27(2.N9X]@>S0F2P6ZB8&1`:K2U_YZ0K-^9YWK
-M>->CRGNOS%$W;OH*OG(9Q*"*)Z#3Y-^6O-Y\D2@"SA._UGS])M$>U,66_A-Y
-M$K=&/I8&`&P```!L`````@```$4``&A>0@``0!$``,"H`0'`J`$"`?0!]`!4
-M!CFM,EOS#.^[62:<L&$28+V"+B`D(`````(```!,*0``,`+;^D.QPOHG^'])
-M'-N\#X?(XB<)<""K,!Q<!@?TM";4OBQN`^4=;A#)"!D0>1*W1JRQ!@!L````
-M;`````(```!%``!H7D,``$`1``#`J`$!P*@!`@'T`?0`5`8YK3);\PSONUDF
-MG+!A$F"]@BX@)"`````#````3"D``#"UQ:(74\9'TX6N^0GI!Z.D%]8PQ!W^
-MTPXZEI4*("JW.`(9IYZ#F\7@"LQG07D2MT9WS`8`/`$``#P!```"````10`!
-M.%Y$``!`$0``P*@!`<"H`0(!]`'T`20'":TR6_,,[[M9)IRP81)@O8(N("0(
-M````!````1PA``$`*AR7+'J@<3EBF)R#IHQ5@03=K(5FGL\D:_M5(KVX7#G=
-M(U`/\6F??.4JW+KWNHBH"'8,2((B_";7HFNN^#6DE)BIIE\@NTH!_DD1U<$6
-MKAJJE"T("UW4X_496C@&.QSPDR,U(_:")EWO-V!S1XM*\C5])$+4<"$501@+
-MB3S0.=_Q,3-2L>"X`S_?_IW\^"VOG8=Z=XNC;MO7^OS@.E(6CJXW_0!6CGDI
-M6M^KCB)UTIFRH@&&>)8$ROV$A<==!0V$_*W60T$+IS9BL)B(AK<B"MCO,NX,
-M@8\`.,_L*R$4'0\LT;L!(3G4NY.\<`0K=?'Q_K6$6//K$\%+@FN8>1*W1F;8
-M!@`<`0``'`$```(```!%``$87D4``$`1``#`J`$!P*@!`@'T`?0!!`?IK3);
-M\PSONUDFG+!A$F"]@BX@)`@````%````_"$``.#Q%<M59*B!>L70]=ZB59`A
-MAO-/]%4Z;;<#T'ZQ3GC:_7'<Z]XX4(/%NVAM7]$[A[ZYK:O9,4E(U9@8WC[0
-MM?46XU;11^T\$?W"-FKI&Q/MTE>(Z%,[E\HC:=[:B.'(&\R0QP!:RD7K;ZX^
-MIP1/7N+=>\YT%Z5(*?K-)SN5%8&)PJ<!SB-5WV`3C,B!^]/AK^*)RQ0WBQ(7
-M`6\+%*.<?EO\5SZ+#>,)/3*0$\&&Y5W9$_9*1IS5D]\QT[:US+-XCS&\=,<Z
-M:!!EPBL9/DBLE;'>V\B@6/_E)2WD(]7M>1*W1BOH!@#L````[`````(```!%
-M``#H7D8``$`1``#`J`$!P*@!`@'T`?0`U`:YK3);\PSONUDFG+!A$F"]@BX@
-M)"`````$````S"$``+`,.9KT&!B\ZU">)D0>)V4'W`1CEA6?<^X-H(MRN8*,
-M&3+#@6K`N^O)IR+N)+F>SY`/4!AG<5?#$?QM-FES3<15<@G9FQ*YD9[#_`QP
-M-BP`GWW['^L6:?"6=N]);Z.'.X:>Z-!`F$SF\'Q_&Q^Z8]+W*VW-[W*,=_;#
-MVHL6;;MNWU?-[ZAI7:6EMZ`N>OD5W^Z=I+E9@%#KRK3N+O?>7NI39L6W4V/^
-MWE!!HZL&>1*W1LT*!P#L````[`````(```!%``#H7D<``$`1``#`J`$!P*@!
-M`@'T`?0`U`:YK3);\PSONUDFG+!A$F"]@BX@)"`````%````S"$``+"Y06Q(
-M'\./QBSZ@0OV"U2%%O0`8O0&&YA5-@D!&U:A2OJ-)/5)]:*TGFT5<3W,?I'M
-MWKY&1]:_$SB^%3KYP4X5?%;?C"`T=L=]SB@R(W\G9E]?9RO'+;+[LE$O"#W9
-M;(58T6N.6_[LT-L"NDTFY&0EMFX,R\XB-)7LBB5",UK>`08W'T^XG0>Y@I>U
-MV<#O6^:RR=/@?H.5K[`?UM<A!-2(QJS7GL1/EK48"D<J>1*W1IXI!P`\`0``
-M/`$```(```!%``$X7D@``$`1``#`J`$!P*@!`@'T`?0!)`<)K3);\PSONUDF
-MG+!A$F"]@BX@)`@````&```!'"$``0"JC2TYD%-?BPO>^RP/!.'>PMA3!?JP
-M>#GAOJBV)QBQ<VU*0(CN!W1MVTWK&YA>$0(6,MDUOIL*W)>2B3V.Z^W]HA:-
-MP`3AH'@.4"[Z)7')^OTS"8P0*EUTR=V6@9QB\H.!+MD:T>PAS5&_I5E,!,L=
-M<K/%RSD_96LN+6J1TW9E"BM6SWE#GRF#SA3WLI0#R>D\-3/N`N']XB4S1,<I
-M_EMW<>>*L5SA&C*FK@:"B+G!$D]?]C3P@DQ9&C&)T\.$-S5B=4\S*V`:](E(
-MS3$=>P5`/NAX@F>;-B[%]CZF>ZL+:58^HFR*_C7YL-QK+9W&HO$9UM,@1_DA
-MIPW4!O!Y$K=&:38'`!P!```<`0```@```$4``1A>20``0!$``,"H`0'`J`$"
-M`?0!]`$$!^FM,EOS#.^[62:<L&$28+V"+B`D"`````<```#\(0``X+[9RG#%
-M3EQGB?0>X#D[(9-F4;B!BDQ^1:`N_+EX]6,;ZDOV+P&.ETXY_@5V/?&[U&O+
-MVGK%"BKVPI$>WG[]1";/O:7'4VN[B"7+3ARY7I:Y\$%LF[-9N?DN3Q5,=W-F
-M(U>L/],$L4\3XK33-E)EZJ(/@I%B<@ZEWMHID\IBP@4MA%1JF,5B4\*$H`/=
-ME)@F.2]7EPI2XLAYZI+^$H*#77_?"B'SL-75S0;4N=@P@:.M2(U7G@Z/(O4H
-M\SJN%\.^BU:P%"YEP4M5(&+::1W9"?QR06O`C!$R1.`A-OIY$K=&ZT4'`.P`
-M``#L`````@```$4``.A>2@``0!$``,"H`0'`J`$"`?0!]`#4!KFM,EOS#.^[
-M62:<L&$28+V"+B`D(`````8```#,(0``L*:BT%C75&X>"&7GG<45[RJ.1]0,
-M3:W(,1WQ(I#.':H*_KZ"F:H#6ZQ-49Y36A3(L3--7U1QW=V/5_Z`7]9^PT1V
-M+4Y4TBK&(&FL)F?2GHHM(XTJ%['9)RTRAIM%LS8Q7)F_&_A@7[$9QLR+YGY+
-M<8N6N91YW-7J"JTGM@D!+2@LB._.\B_(DEE?(\V5;"RL3AM)M]K^NI>$:Z->
-M8;RUCIZ5R#P%::W-'U]*EI9Y$K=&7&@'`.P```#L`````@```$4``.A>2P``
-M0!$``,"H`0'`J`$"`?0!]`#4!KFM,EOS#.^[62:<L&$28+V"+B`D(`````<`
-M``#,(0``L*5,:Q_YN;9]-?E&,PUK4%@HH8(Y.[)IYSV=/[$1VSG'^B>/&W:_
-M3=4<GBHAM<LN4SJ<8.;3FXLXHQJ.&``46=4KK]1BI359GR1I1TX-:LU;CR.?
-MG<>`M?3XRX'MAW)-Z[.$K-2KP")$_S/OTM0E5SRKP',/1K:OG^7P['!\_+OK
-MF-QP<^&1>X-X4M3^&$YUF3.XM^0HO=HNMAC3/SU]O#H:53[%`SW/H'0/>.-Y
-M$K=&9HX'`(P!``",`0```@```$4``8A>3```0!$``,"H`0'`J`$"`?0!]`%T
-M!UFM,EOS#.^[62:<L&$28+V"+B`D"`````@```%L(0`!4#:Q'/J>E+1ID!&I
-M!!>'S&,IZ*HKW-5(B0X31JA0[.5>WTE?GJP))[[OZ+?B%LHH4_'H`<]QP4X[
-M-IJXC.I=]L+&OC&Y,H`",O(@H'+9[",I3)J.,4DFB%$@?O\H?&-:DDB>Q/<%
-M[7JOXK9"`7KI+'6:TN26@/A8G(JC;-30#\GWB9(!UW'.*3J5VS7)>U8;3+,Q
-M9R!+%C8)KZX8JP#S,G37C':(IE?:$)G?UTD_N6'U/TNF-)GD#A;%0DO0Q2O.
-M3^=@`<YK3HR[*@N1]#3TSLW+3^4(L.US`P'QE]#]4N9HM#;$<6H`8P@JO2GR
-M.[SG#`)7+>OH,@(,W..SAE'9T3_W@`JA)%-)A/07W\7:\+>0$H5_]`(N\A^\
-MR:>:'\AQSQ&PGKR3_Z`C[%"9/Y7K".Y("K95WQU^WA6;\&@$_5`#'8Q9]ZEN
-MC^I^B:<8>1*W1LG#!P!<`0``7`$```(```!%``%87DT``$`1``#`J`$!P*@!
-M`@'T`?0!1`<IK3);\PSONUDFG+!A$F"]@BX@)"`````(```!/"$``2`J.#+2
-M=0@7@>&V]S12DMTQAC:X2H7U[9=`I8V2KF4\QZ"1R#9;9OSO+S5^!83;V2OA
-M-M].=52TU1IG$UVPC@ZX>Y@ZP:4ML7%K$]+&4/NH5K>>O6WC"$MT4]L*VS$N
-MMVI0>F5*!@?/Z;>]^<$$PU(E@Y%71)A*CH+WA\IM4&[^9'@YRT&QH!5(A!!5
-MX64]8)8`#5V69^/O-"9KYC<J(;V&G3'<$X;0^ZQ[);:,*>9E,VWO;V,I',-]
-M2?B=F`R?=X"=B`"<-Z`;VQ+4L>1C[L\0V$1YQP'>`A4V4M#<G.T@'&MY<O-S
-M(TY\]^'%>.I%\Q0.;WC$9>8NX76WM0._J2E1L&6-$,)_T#8:B%M=7XYL4[+\
-MJO:C1NGW9-E\Y'D2MT9[ZP<`?````'P````"````10``>%Y.``!`$0``P*@!
-M`<"H`0(!]`'T`&0&22@T@?]8.T'VKC89\/H[.PHN("4(`````````%PJ``!`
-MIC[UU!,2MJ@O4&_@:+?0L7MU.NDVJ?HT.T.RO5=>4+:H(6XO>^!:1J'U1)D0
-MIR.[BD9.3@.F;[;[SDB+>1*W1MSV!P!L````;`````(```!%``!H7D\``$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y*#2!_U@[0?:N-AGP^CL["BX@)2``````````
-M3````##RR.M&\EWSY2:W%T]UGPQF^@6%(ZI&OXI-<ZOY.MC\-*42_&H`9P?Z
-MSV<**'D2MT:G!0@`;````&P````"````10``:%Y0``!`$0``P*@!`<"H`0(!
-M]`'T`%0&.2@T@?]8.T'VKC89\/H[.PHN("4(`````0```$PJ```PN)'D?$IO
-M6:1TY45+64945U^&_AG"FV#*.!\+_VI8JU4$#AQL/%Q&AQIY'9UY$K=&N!,(
-M`&P```!L`````@```$4``&A>40``0!$``,"H`0'`J`$"`?0!]`!4!CDH-('_
-M6#M!]JXV&?#Z.SL*+B`E(`````$```!,````,,LGG.=,J.B%C<CR09F;)%0U
-M=#YE$V9,O!WV#.Q1S2)7`M,JZ(8U^JEB424Y>1*W1D</"0"8`0``F`$```(`
-M``!%``&47E(``$`1``#`J`$!P*@!`@'T`?0!@`=EO5.GS^U,83H`````````
-M`"$@(@@````````!>"(``'@`_P!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``#WE;;.3WAS\2V1P(MAG7,$=*WGER-P+1/LE[%CJJ`":U"[+U5XUG
-MM#Q#EPY.!6G*H?F@CK=Q]O=QVN(#RS87++'-YS2_1DR`LN?',[&U<%O`&/PD
-MGJ-.5Q.VE*RNTYT2.#4QY<1:F>M3(-Z`G;*.)__;&W@WZ#X>,@+W?.!'<)\I
-M```DD1JL`.)6=M`.1S&'DT-IA@*7L1G<->:@J,A*K%\Q46@I```<``!`!+R*
-MV*I!U#W)@M8:@M\(W3"%!0?I````'```0`7IE&5L8N&8_**0C=1/I\VOKFEU
-MB'D2MT9I'@D`7````%P````"````10``6%Y3``!`$0``P*@!`<"H`0(!]`'T
-M`$0&*;U3I\_M3&$Z```````````I("(@`````````#P````@``!`!@````>'
-MMC_TA.'0Y5G]J1T;KU]"Z`U.Y7D2MT8M+@D`N`$``+@!```"````10`!M%Y4
-M``!`$0``P*@!`<"H`0(!]`'T`:`'A;U3I\_M3&$Z```````````I("((````
-M`````9@A```@``!`!@````>'MC_TA.'0Y5G]J1T;KU]"Z`U.Y2(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``#WE;;.3WAS\2V1P(MAG7
-M,$=*WGER-P+1/LE[%CJJ`":U"[+U5XUGM#Q#EPY.!6G*H?F@CK=Q]O=QVN(#
-MRS87++'-YS2_1DR`LN?',[&U<%O`&/PDGJ-.5Q.VE*RNTYT2.#4QY<1:F>M3
-M(-Z`G;*.)__;&W@WZ#X>,@+W?.!'<)\I```DD1JL`.)6=M`.1S&'DT-IA@*7
-ML1G<->:@J,A*K%\Q46@I```<``!`!+R*V*I!U#W)@M8:@M\(W3"%!0?I````
-M'```0`7IE&5L8N&8_**0C=1/I\VOKFEUB'D2MT8A4@D`4`$``%`!```"````
-M10`!3%Y5``!`$0``P*@!`<"H`0(!]`'T`3@'';U3I\_M3&$Z7B4E0^'ZU:PA
-M("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,`
-M``@#```"````"`0```(H``"(``(``([4&QX)0CJ[,R3=#+8VZ66T`\D7R*`X
-MX`//.&R66736!6R%&W.:>,!*&&H6;%U\R:9?F4`U\`\)8+H3L$NRGM`H0CHL
-MVORCR:^U%O]J-^6->12RT>B+-/RL8WNX/4^J_,]KAKX#S;B>R+_4:WCTQ%;C
-M].:#RVGY2X:F?%^FE.Y0*0``)'B$!=4=]8_$GN-)%6=J4!_SQV<JS7!^*@5$
-MJ0=P1\I!*0``'```0`2!R+WOPUV<B-^R"QYNG[;`G(VX&````!P``$`%G<QN
-M=[+UFN8[O:+!F0W=C":_Z_-Y$K=&Y'\)``P!```,`0```@```$4``0A>5@``
-M0!$``,"H`0'`J`$"`?0!]`#T!]F]4Z?/[4QA.EXE)4/A^M6L+B`C"`````$`
-M``#L(P``T-JN'.W2+LZ3Z#>H6)V1`"K+\3H(;GR828B<5_S&>(HKZ2O^BYW1
-MOH#T7^4.^/4:ST>*"%TV<R7(^Q1_^]G^O_6T[6@N`O3Z\MYF%L6S%_ZOIY(R
-M*'(=`MF")&A6OAK_Z5Y?61B6;DP;E%4/=-H]H[.<;2/GZT/@`ZND-)H(M[/(
-M3:J3KA;AQ3-PYECP(&AJ^Q649OVUU;;)>)8[_\7(OY-C(T[[SF0:TR]P7_UM
-M01)BL/G4GMX%EEJ(2V6T5EG,DMKAX.Y>#AE2CA-Y3GD2MT:#F@D`O````+P`
-M```"````10``N%Y9``!`$0``P*@!`<"H`0(!]`'T`*0&B;U3I\_M3&$Z7B4E
-M0^'ZU:PN(",@`````0```)PD``"`-^7B*']TJ[L@Y8"0]>MG@<U59)QY]DI4
-M.P=E+.^A_>JY15N`8I?19!$;[GN$Z(SU9Z-DR4_'`LDAFV,!D`MQ:I-\1!$N
-MMF'V/C!Z832F6CQ@T>_]?:/4>2(8UV^AMH$<Q3%P5$-#./.EL-T$"-@$X`[I
-M.0#`BKYD;RN.,7D2MT9+N0D`'`$``!P!```"````10`!&%Y:``!`$0``P*@!
-M`<"H`0(!]`'T`00'Z;U3I\_M3&$Z7B4E0^'ZU:PN("0(`````@```/PA``#@
-M3!Y#0+CX9WVH>/Q`,H.*HH8^YFA@$K+NO`-BZ$X!7H'C(%S][A"&=CEK:0>Y
-M($7;16`ZBAXVT7V2O-\$ND2?&H&HDQTX`9X)35MX'E:,9W[,\S?=;?D_TM!X
-MH5$Q@,PR"(:<.4NZB243MO\`!2$3JHWT^V?]9V-X6U(^VE]J-'"32\)#U7,%
-M0C/%^=>7Y9Z.H?GYEZA%[4#DF\;8K.M09KYJ!IR;CL>??@5:I\B8=-^^+'OD
-M/ZQL"R7/=$Z],%R8/Q.]NS1$-[79LZ(O2O5/@^392W$Q*LS$L&O9,GD2MT:)
-MQ`D`_````/P````"````10``^%Y;``!`$0``P*@!`<"H`0(!]`'T`.0&R;U3
-MI\_M3&$Z7B4E0^'ZU:PN("0(`````P```-PA``#`<\V4"!@O)^P.^PM;_K]"
-M\5D[H</6",G_/F2PR`G$MH[`MY0+'H`DH5@E6^SSN^`4.1M9U8"5P+E&0\-!
-MA,>'EZ:>99?+:`1[L31P?A@&"46^`*SIR)P[EV,MQ3-L4?>H6>#;R#(<I7L%
-M![V2+Q;[$RI^W_!N5U?>H8"`8X^15=$$&?MS?$"RA_4"5]4O>="]__4[>4RI
-MT<*"ZTE[,#@B>+[+S-YD:Y@VMKJ+B#R16P`UC-K>9P8=^K14AT9Y$K=&],\)
-M`&P```!L`````@```$4``&A>7```0!$``,"H`0'`J`$"`?0!]`!4!CF]4Z?/
-M[4QA.EXE)4/A^M6L+B`D(`````(```!,*0``,$_-''8P#3D0N`\5:<.9>%5N
-MA:!^87W(/;K!<+,8>0)DTY=/+20%``Z7H?:`>1*W1C#K"0!L````;`````(`
-M``!%``!H7ET``$`1``#`J`$!P*@!`@'T`?0`5`8YO5.GS^U,83I>)25#X?K5
-MK"X@)"`````#````3"D``#!?KC-.&KILN:!&[Y>E%,HZZ9P%:9[YAFM[GJZ+
-M*[A4*VARL=/(>G]'$@Y-%7D2MT;2!@H`/`$``#P!```"````10`!.%Y>``!`
-M$0``P*@!`<"H`0(!]`'T`20'";U3I\_M3&$Z7B4E0^'ZU:PN("0(````!```
-M`1PA``$`0,0OI>@TW;KGOI(SW3E)`PK*,(FW#L\4_=7)FP)%76ER_C9VB_,>
-M:"_ZK<Z-Z.+/AO(#!F"$1)U/D+5W)2#^C/U\D!+/7REOXW+O59CA^O/(:';J
-MC2JH*I%[4<*XL&D"2C',_"DI7Q6C!/[D'6SBPTL^"B5H)TU$W)AN6A?5A`UH
-MSFH(;SYR[SF937KOV)<:M<>>,"X-=5&V8F$Z4#[\?)62#CX[O4^'9C5D2%UA
-M,:=\QV_--EVPL_*9IW:L"0)!"6XA1RBE=Q6D%7PW7U\Z%I<UUWK.P^O"(]Q#
-MOX@AL9V+O[JTSS?R;M1KWK(W?Y]D+*SQ31$9^*F8K+B@>1*W1FX2"@`<`0``
-M'`$```(```!%``$87E\``$`1``#`J`$!P*@!`@'T`?0!!`?IO5.GS^U,83I>
-M)25#X?K5K"X@)`@````%````_"$``.""A'^)\[,W\:\K_D>S@A[*C-X-Q&/<
-M7]_7E=&T>=#,<O:#(M;E$+D$\9U4FDN>N]9[<D->*5<I3&\[K/$C\I"4"NU*
-M\*U#'=RVBM#>YN@!Y6AB8``(DZ(J@XD"6]1@(L-V$9:*-($!D_K"`!:=G?0(
-M!_;*K+`4GK?#ZEK(Y&,XVY68+8;DYT3_P06)M;@H3J_2V;8IZOQ70B%4'56[
-MXLWRR\]R@UOG$S@@_]EQLL#F_N04`I*LDV*F!6UW)AL'1M^/#;B10&;+O);6
-MP=</;-<D"M7+,0`AGBRA=0)%>1*W1OTA"@#L````[`````(```!%``#H7F``
-M`$`1``#`J`$!P*@!`@'T`?0`U`:YO5.GS^U,83I>)25#X?K5K"X@)"`````$
-M````S"$``+"\/K1>L8)V-LD\L+;Q:^,T$+\L`GP4SC<E.V9]!IO0;OW$Q26R
-MRW_?A3=O^=JL-3,U?M^DBS(:7N@9N).J.[X7[AE`5(;`X9THE;HB,H]/<&PT
-M7L6@G+<O[(4`[3<XDD#VNL>R%A2!1A1(J5CM.=0DD=#N2E..7"".OW4/J/"]
-MKCXU-0QL>OOH$.')L'L:(Z6O#4J]71-@G\3=?5'!1J:MORJ<'1N2^S1PWG;H
-M>1*W1I!#"@#L````[`````(```!%``#H7F$``$`1``#`J`$!P*@!`@'T`?0`
-MU`:YO5.GS^U,83I>)25#X?K5K"X@)"`````%````S"$``+"N=NF:Y-^Z]W2!
-MC>*B]FP#EFH#VJMNJ].TI0E^,N"9WI*&=#PB"):&-\-;2K0.IA0VWZ.%K/HR
-MRC6K!O0J*VUIV;O.R4HPS]T)Q)EMGXBO3JC_X^^;9H(_3-/-YMH8),F6,"\Q
-M8]Z[_9<I:L!*")K0R'F7;6I7\F->T\6K!YWC&W)?QV+OT&04+&TU04VB$2.3
-M+>7J)T%-[MUJB$Z[%18@F[/.:LP=81Q?9+(L>1*W1MA@"@`\`0``/`$```(`
-M``!%``$X7F(``$`1``#`J`$!P*@!`@'T`?0!)`<)O5.GS^U,83I>)25#X?K5
-MK"X@)`@````&```!'"$``0!E%$W50X;R\G%VD"'QQ]:L8CQ81G%Y6YU$;4_]
-M&;,,E"6CLZA97S?E:.?`:O$-N$MG9@&TIA.J]*\8(6DK6?N'$XBV<O31$D!]
-MZ)*597SK=]O+LI/6SM/1J?S`CR!7J+LVKCDBSS8LGP'L*-M354-+<!2BEI5!
-M0DH_2K9FFMRG4-?]\QUP]T9_">QB#47Q!#TT65`&?";75P57`[ZT_7IGR(7>
-M@HB/M#R!9+XVF_X/O?;88$0E:K#)UJ["$=2_5&B,(/8M-W,(&8C@UN2:!(:0
-M)*)CNVF?`D@J8(&;`H1<0.SDAZ[5N(PGBGU:'/14=-3)R*M'S7W)DWFY:<QY
-M$K=&TV@*`!P!```<`0```@```$4``1A>8P``0!$``,"H`0'`J`$"`?0!]`$$
-M!^F]4Z?/[4QA.EXE)4/A^M6L+B`D"`````<```#\(0``X(BQ`"Q#76ZO4ZVQ
-M<176&2RUN#Z*PV^>3LG0%4H^=WR;^#^>%O"G8]<R2<R"1HYJ%"K7P6\TKJ17
-MN5V1=0;UV,E1P"<6SCCZC?R71PEI_=D'(@W7G.!)$^0T+D@FZHX%S\N.Y95*
-M&_KN&ODY./:BNL>$XT.1E&B;,E!(<CQ[YD4V,P3!R5/`IKJO0,7-TRNJ1ZU2
-MV`DG3\>&78PW1&NHE,-W$_6>5QDG`M:SDJ$[3FY>T1Q*\O7#MGH0K-H2*WD;
-MRC+ME9UHHSB%"/VHJ6.<275(;V==(E8!Q4@8]<AY$K=&]H`*`.P```#L````
-M`@```$4``.A>;0``0!$``,"H`0'`J`$"`?0!]`#4!KF]4Z?/[4QA.EXE)4/A
-M^M6L+B`D(`````8```#,(0``L"Q0,09;%]NXSL)6A0_,ED>Z]>@OL8GCT2V#
-MF2A!\87Z&:H8W]F*1=D5!&M=\?<_7?E[=W&J>K<G#66..5;7JFD,(9\V>PRS
-M$F6J.*A)=OAVNB__:`.O\@1[#/]K')\^G,O&OD.2&V)R996RQ$])C@@U^G$^
-M[J+`K5O[]I(EG:_FP,C$UF>Q!WH(0HS#Z/5EQ(>PGGQ']R$/O>QG$5^4-<$\
-M.'&9!Y`O1R=VRLMY$K=&::0*`.P```#L`````@```$4``.A>;@``0!$``,"H
-M`0'`J`$"`?0!]`#4!KF]4Z?/[4QA.EXE)4/A^M6L+B`D(`````<```#,(0``
-ML`U1%SW10W2#(A8[V2"X7D</II=<?PZIK:3NW+8U:IV4N)ELCGGTROR9V=;B
-MRWFM;H#F[6ZUV3--*OL+J]TK\#"-\T@$:_P$]CHV<R?D>@<:[HRAP+Q1)_:N
-MAPW;U+QFG,%W'K&((5YNAL$0$/!L+Z.ML_.P%+`+W(U*-F,Z;#S+2T+R^"`:
-M)*+!.<Z/-3#-$_H=,G-T"X4L[*YF:JO?QCIIK#E]M!>*;T)JR^YY$K=&9<H*
-M`(P!``",`0```@```$4``8A>;P``0!$``,"H`0'`J`$"`?0!]`%T!UF]4Z?/
-M[4QA.EXE)4/A^M6L+B`D"`````@```%L(0`!4'X/K/JE+<F=E-4:EVS/_S(-
-ME.B&;&Q,@(^B>1;MN049IL*Z$DVU<U'PTW5U>;+X\9XI8UW9;VI92XG'$)/@
-M^B>557QXM?-E^<>R&=%\GF#V;V_?>@5/A3W`9PJZW2\(ZZ?C.,,-B%Q6,IP&
-MHU*-'A*"+5[USM&`)B;M9F3Y?]^_"U;<A:<;UO7SO>'*&8@<U:K56A99$E^/
-M*CGKROHJ?UQG$F.).VIN6RJ19KP>[E=^X8)AY9G!A+,LQ@56$7AU83X,&/XN
-M[3PH,$V\D:)/>*8;M]?V?O:]`N.]+P9WJB<CQ&&'"IUYEGLHYFU&J"?^=%1N
-M=V?$9BW8\"TX@_I[A[J%@>J![1,JS(EPO)Q,`H6U)"J%/X,[4#BD72T&KA7\
-M3.>W3FE9,>`T/7C/:3C]W+2>[3Z=(;W:A.5";ML]1;!N$0]E-ER!OG:`9\8^
-M>1*W1M[^"@!<`0``7`$```(```!%``%87G```$`1``#`J`$!P*@!`@'T`?0!
-M1`<IO5.GS^U,83I>)25#X?K5K"X@)"`````(```!/"$``2#HQQ`M+9S-_VM#
-M0NG38^HZG.*`5J:GY:@/C!L0BYWZ-6TD!._/PTT./<*@.(($__":/J#`5[F?
-MBO<*ST_=W/FY@L`Y?WW8(CM32CRM!QM_CENC9NY*37YWT-68E)GEH99F63$<
-M33-PX@&+E=AI`<3A_(,L0\4K8$AK8>?*`R'_ZU33L.-O[R\CYL9>GUM)'-SN
-M6"%>$QV>-!_S3G"@9U#U]J=5%U'P'Q4@/$N&/HW:_;8BUG&JA=&BA-[([FEG
-MMA<4XD:@65\/E<]WPS/Y7NX/Z"%;/U2WT,KOC9%MO".?P3&''&`J@YJAY7Y!
-M(W\[Y]^6JFM`/B,`%3+D?12%L9"3`[_VDO;NH5,#PI-&R(P3DH&D::N&5EPO
-M+<BO!GD2MT;F)0L`?````'P````"````10``>%YQ``!`$0``P*@!`<"H`0(!
-M]`'T`&0&28B'9(.YJE^U4<B)[-T?Q:@N("4(`````````%PJ``!`':KQ`2@!
-MLR:;E?EB_#UP[6<)1S/STV,<XK4A`:40",NLBN'B]DE,"^$"\(ZQS8`L`$FU
-MQP$-3?[W+I!H>1*W1A(Q"P!L````;`````(```!%``!H7G(``$`1``#`J`$!
-MP*@!`@'T`?0`5`8YB(=D@[FJ7[51R(GLW1_%J"X@)2``````````3````#`(
-MI-RZ-':XU&>SD"`*()G619.:"-$BY9,F4G=>2YM21GODYA;+AAG#&!UR+GD2
-MMT850`L`;````&P````"````10``:%YS``!`$0``P*@!`<"H`0(!]`'T`%0&
-M.8B'9(.YJE^U4<B)[-T?Q:@N("4(`````0```$PJ```P/R[;"2]H:>\)%Y4&
-M'VWN]438K*IJQ?)W8SK5V6QT^A[)XCHCX7/WBEB?\))Y$K=&7$T+`&P```!L
-M`````@```$4``&A>=```0!$``,"H`0'`J`$"`?0!]`!4!CF(AV2#N:I?M5'(
-MB>S='\6H+B`E(`````$```!,````,,KXS<%\L+`+TNQ+&JO+W4^T8\#OMR*(
-MNOL#(!/,B(3W)(!E'?S*#6*,QO[B>1*W1IE0#`"8`0``F`$```(```!%``&4
-M7G<``$`1``#`J`$!P*@!`@'T`?0!@`=E))'E6G^?8QP``````````"$@(@@`
-M```````!>"(``'@`@`!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MF4T;GO]<!D\M+99658-=(\Y(X517<K[(N$-J7['FZ610W?7ADPS(AJ6+`((2
-M3'LDJLE"-LXL5"2@?I0>S'G]A>YA36V#N"M7+/@S5@TOG7F["HKGNNGCN5_<
-M:P^'H&I"@'X4,$$^:Y%?TF7,9`A/E\MQ.)B;^R-_-6-4'&F/"S,I```DG;=&
-MS!>V;0*A#7_YK6;`^S$J+Z2-5Q:?9!S;K;?>U/4I```<``!`!(G&7$\_JOH%
-M&?$39IN(Y^SBZO*B````'```0`6J.]O6C?=\VTQ7(!8!Y%Z$4+]EL7D2MT8B
-M8`P`7````%P````"````10``6%YX``!`$0``P*@!`<"H`0(!]`'T`$0&*221
-MY5I_GV,<```````````I("(@`````````#P````@``!`!@````<7*K%M1<[O
-M:V.=/1:V)GQWY'RS''D2MT;F;PP`N`$``+@!```"````10`!M%YY``!`$0``
-MP*@!`<"H`0(!]`'T`:`'A221Y5I_GV,<```````````I("((`````````9@A
-M```@``!`!@````<7*K%M1<[O:V.=/1:V)GQWY'RS'"(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``F4T;GO]<!D\M+99658-=(\Y(X517
-M<K[(N$-J7['FZ610W?7ADPS(AJ6+`((23'LDJLE"-LXL5"2@?I0>S'G]A>YA
-M36V#N"M7+/@S5@TOG7F["HKGNNGCN5_<:P^'H&I"@'X4,$$^:Y%?TF7,9`A/
-ME\MQ.)B;^R-_-6-4'&F/"S,I```DG;=&S!>V;0*A#7_YK6;`^S$J+Z2-5Q:?
-M9!S;K;?>U/4I```<``!`!(G&7$\_JOH%&?$39IN(Y^SBZO*B````'```0`6J
-M.]O6C?=\VTQ7(!8!Y%Z$4+]EL7D2MT;_DPP`4`$``%`!```"````10`!3%YZ
-M``!`$0``P*@!`<"H`0(!]`'T`3@''221Y5I_GV,<4"1X5OX'HX\A("(@````
-M`````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"
-M````"`0```(H``"(``(``%ZQ4WB?QVI>\+`U?X<Z<%-"RPAFP]+73Q<<>AM3
-MU(%F)/[HK-V7I'$S91U?(;P<<G@)1.NRK"Y(LN*<I9H*0(N$U8<\6/^!D)V6
-M34,SURUZ54(D6/BZ'"G(<G61R!/@3-`0XV^G[<P0_A/.UT9E/OD^B_TI.'.B
-MI5[IAP&(XF2J*0``)$4YNFO5H,&,2HF($+P@X"`D1HMX9$(:J"`V@@_G#>B#
-M*0``'```0`1^R6_!\MCQ/F)4%.*S"<P=A6U>%P```!P``$`%`@VI78D.%EFO
-M]P0PDN[49A,^^?9Y$K=&O,`,``P!```,`0```@```$4``0A>>P``0!$``,"H
-M`0'`J`$"`?0!]`#T!]DDD>5:?Y]C'%`D>%;^!Z./+B`C"`````$```#L(P``
-MT#CUF31(9I*6HLHL\EEBZW=#>7$U!K;KJQ"[H50B#4AS]EN[S6!S0U1`F/AZ
-MG(7PC&!>H$FGDD5Y;#@&F`;Z*:Y>GZ=Q1?X6-522_I:)5S;G"4=HDUT-,8J<
-M>\BQ[K`UJK)J.8L8FIMC'\;:%84FPS"Y,/`_Q2G;P'=4%@#`RO3.1&P4AD/P
-M6OUW``V%H+DOGY%&JY33_+AP:?Z2^8L[;^6U[(3:CS(FO[#;7Q1(^N4S^T-8
-M&WK.IQ6['9>OT,?;Z\5LUQ%TE*-3X.D:PGD2MT9BV0P`O````+P````"````
-M10``N%Y\``!`$0``P*@!`<"H`0(!]`'T`*0&B221Y5I_GV,<4"1X5OX'HX\N
-M(",@`````0```)PD``"`!"!V>6\PK?DH%ZXR900C'4C5..ZD$%)DEQV=K2\C
-MIF(N_L$=U=[E)\;X!T'$Q7J2`@<F.`.`8U4BW7H\/-`QC;P<>(>(M@*$C/])
-M';'8B7A??]&J#XI/.$O0('7:(QQ'33U\-%5C)\CI@I=9Y:<"RW]['P,VRDGA
-M6R^U8'D2MT;%^`P`'`$``!P!```"````10`!&%Y]``!`$0``P*@!`<"H`0(!
-M]`'T`00'Z221Y5I_GV,<4"1X5OX'HX\N("0(`````@```/PA``#@M0,6;K9;
-MB%6Q-`D6(9N"QF)>`V8DC<,!=1GRI+HTAW0Z&F3,D8N5XSYD,.L^F`B7Y1W5
-MR\[,ZYL;YLT3.Y!*9I49G@;Q70IF]K[`$_8(G'(7P6DBZBLT/>+G0@+4A@)+
-M[BU"!V3@&ZS8.321LU%"@X*D&ZF)OD:7M?'NA8Z0L,E=*W&,Y]LI+'O:"U*J
-M6=ZOL.H*!*4MQ]$R]V>9P&7*9ON*#<W_N6^M3$+RXV$%QC&=."X#/C&B@.1_
-M7)@IW'T@926">JPX]X-J*YA+&6H*(;R`;=9CMF">^!I+P'D2MT9N`PT`_```
-M`/P````"````10``^%Y^``!`$0``P*@!`<"H`0(!]`'T`.0&R221Y5I_GV,<
-M4"1X5OX'HX\N("0(`````P```-PA``#`$B9F69<$8\*WK`UQ%T2-,@&KOFP$
-M-75%/'#?JJ*E7L9&5U%)NQ<;!Q4U87P^4?+ZFT,,D9NVZ:9-<0V7(3%WIB%+
-MBY0P7[5G2E<E!.6MG>.\FJM5#0$]5'#S1YZ:&`=_/`[P24'%EZ0(I$"MKLO(
-MC$#3FES94#EY^HXE,DYI;W#*&\EN'P`O/EWM#%/9"04MF-?$QG8V":.%R?C!
-M?&".^14VI"_[V!#Z+5-*E6\4$*?DN/)!3]I'%IM'1:-Y$K=&20X-`&P```!L
-M`````@```$4``&A>?P``0!$``,"H`0'`J`$"`?0!]`!4!CDDD>5:?Y]C'%`D
-M>%;^!Z./+B`D(`````(```!,*0``,'T@^03@_#SNNTGJ,<[X#L@AT>0*4Q[I
-MD[?*;0+^NWQ,6,4O=Q=0(.7PT(KG>1*W1KLJ#0!L````;`````(```!%``!H
-M7H```$`1``#`J`$!P*@!`@'T`?0`5`8Y))'E6G^?8QQ0)'A6_@>CCRX@)"``
-M```#````3"D``##!EUU#(KB@3TA?V?PQ3>FJ$45IN&TWI6`Q;115YCW9*BP"
-MB-,<MP%BSAFKZ7D2MT:-10T`/`$``#P!```"````10`!.%Z!``!`$0``P*@!
-M`<"H`0(!]`'T`20'"221Y5I_GV,<4"1X5OX'HX\N("0(````!````1PA``$`
-MI,9(;`4Z)YD9TP76>>/T@S`G%//#PG\1P-U#!5=VNAH-1S5XA`&#&`RY95P,
-M^4UDJAA@6^C^/7D-5XJSE)(@W.+P&IMXL&,9YP,L;M(DOBK#<A[P3/6U&@EJ
-M.>64G!.D#\'Z7OQ.E/^\S&@60F\8?N5`XRT/)!U#R8-FB![G1;&9=U)V[_UG
-MJ=CWJH1?KC(/0(3',,.U8[93C[IDU&@-GA7K:F65IT8`X"SB(MS8L`)W("S6
-M[X=U_@!*D'&"QXT->SNB)HDIKFA6C3B-PZQD$Z:N?LQ&'PJ<:;5#N<BP5^RU
-MN@[B](ZSAR9YP`8)%I!*WQ*7F\6$"C4=KP?+>1*W1MY1#0`<`0``'`$```(`
-M``!%``$87H(``$`1``#`J`$!P*@!`@'T`?0!!`?I))'E6G^?8QQ0)'A6_@>C
-MCRX@)`@````%````_"$``.`=6P:E8\+$@F0:#-*V+>/40&M$+32)NY#E84'=
-M*7.]T$"!BQB`J,-(N\ZTKL9%O'%,2?:T9W#)8J_%+S_'I1L:#INE=_WO/AM8
-M<9G:!Z<D,>W/HT3L7=$!&L^#50;^Y$2R**:QG0$QLD?'8E8*7/&7HTJ*O_0E
-M8%X1/L4UI];S=-QU>&!`&.=O?W,O.^+H"$INFS(/T0<I$V`3;%RT+)Q7TI_G
-M9XD2-M6W'T'AHGV<<F?:I)]/@@DDFGKI>=A\5[7AL@_(8F3QQHZU=)X5Y:7\
-M7Z!@90?0/!"@H5[?>1*W1F-A#0#L````[`````(```!%``#H7H0``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:Y))'E6G^?8QQ0)'A6_@>CCRX@)"`````$````S"$`
-M`+">==^*+QF;-,',;F($^YF\OM/FM7X&I&TRIJ/AT]!YD@M,ZE8\/T7O<EE(
-MXA?YDU(N^5@920Y&3639@\N!#0[V#$)UB[N9A)ATQ(U7#WJ;++/9$.C"EGA^
-M#Q:D\0SJ)VV;_B0+>W,?I6J>>#8?S"SN1+?!2R29CF[D!"JP\!><:.9R`>`S
-M'-;ZA<FC^5YU17$X&A`C"2Q<7"W'2DJ)4<]ND[.SR#%\:85..Q_?>1*W1I>#
-M#0#L````[`````(```!%``#H7H4``$`1``#`J`$!P*@!`@'T`?0`U`:Y))'E
-M6G^?8QQ0)'A6_@>CCRX@)"`````%````S"$``+"L]J\"UN4?&?[+C1H28;LV
-M+R1L9"%8R;H]<O%ME)GG#5<FETU6>PT3)X4JW%:$0-;FN4DC;HO2I>OYH:P-
-MMN'AV1<'S(EW0AN-%?G^$R.?*R?Q/7FH5<4JOZ\5]3CUX'^YL&3*_(X<I!U@
-MRR9AOO*O_#Y1MI`F5A3/GW$T.V!`C<,5^[/X2NK=U'@<4-`-=Q,D]%EY1XM]
-M6:*6]\3P9B8/B;%^/PJVZ=7WH6QX>1*W1DVA#0`\`0``/`$```(```!%``$X
-M7H8``$`1``#`J`$!P*@!`@'T`?0!)`<)))'E6G^?8QQ0)'A6_@>CCRX@)`@`
-M```&```!'"$``0"M?WM"K3_[$4F2__-Q-G!V^,(AC,I,(&N9`3K7`Y`*+<?0
-MVS(::,>RWDDZSQ>!0S\,-[`5DXC/KUR_(";8F"YE7+/6>-A`XG5U7X(4[9:3
-MI&=U#([R@\9+X72J[&%G:@LO'DW9%\AV79Y@!":#A-AN)1:&E@]S;T4;5RIW
-MY0XJUYL!-F0=#&)?3AAJKL/:*"R4N#+NQ[X:IT07WW@WKZ#S5+O8!@T5M`(1
-M&:K>->VE)5/.Y2:XV:SK,^T#JWAM]BL[2H3)&1^GW=D\&=\?)(KPX!]BEE7L
-M)9'0>F-@Q>MMC3,\9.=1,C2!O['PC1I#D#EB;:04ZJK&H'N&1LMY$K=&"ZT-
-M`!P!```<`0```@```$4``1A>AP``0!$``,"H`0'`J`$"`?0!]`$$!^DDD>5:
-M?Y]C'%`D>%;^!Z./+B`D"`````<```#\(0``X#_3`'=(*N!EJGP>Z,W&66S-
-MGGQN-J'4W[<4H>)C:B;>BB/@4LW-19D"&V"AIJM+O=9W(D=T@BBTN>OBRU_3
-MW[YP[D'EBVPV(C*7!@]2F"T/CJG_!(MF.,<`3<-&<N9C:7;%'$(-4G6U^XME
-M_<%XIMQ;X3<>MM4GT6Y/PN2%63[L-Q/K>;@3R`MO:36UMKSXC;+]EKJ;:<"]
-M5^SVHL,X)N<A/N_26>/E!@6(<NT($IQ$2S!:95;N9OOK[>JB\,-DLC)_(M(T
-M"5['$VX#B&1^!ZGG[J`LG1;Q,?W8R0MY$K=&BKP-`.P```#L`````@```$4`
-M`.A>B```0!$``,"H`0'`J`$"`?0!]`#4!KDDD>5:?Y]C'%`D>%;^!Z./+B`D
-M(`````8```#,(0``L``9?:2KC+>/9E.'`CX.LN03TH&$&_WGX;AZS.\I]HJ<
-MQ)&E)R51(\>&D'[Z%HF^<&79'0V>#^5G@TTX,;Q2E#Q0HY(?N23K)>I(,M5D
-M8X-<1P3XWH4..^;7P:(]9B\KJNQ8F/!^5EA=3!;_3G$-4ICW%MRDX;$KKF9N
-M,W"*B<I[?9=2:#'1]@1U-3$W!%RV=HJ72E&V]+N,0!TMP"+I(\;H[%KWGPT7
-M@90WX^QY$K=&:=\-`.P```#L`````@```$4``.A>B0``0!$``,"H`0'`J`$"
-M`?0!]`#4!KDDD>5:?Y]C'%`D>%;^!Z./+B`D(`````<```#,(0``L%W;THI+
-M'3)\XM@@-8R2DZJRJ-<9"EP2M2A-1")Q/.BT&,CD"S/858PG7UC"E#4@EIW(
-ML]3U('U.6B+Q=/#7>8?*G^(M^N7NVSQ?"5`>=7,;$?]^UO,$H.MHUHW@=7;Z
-M?6-(P.2,79GU?QL4BY7GWFA>D!9,Q7[87@4=`JA,XK*.T,C/"D+GQ:Y(8U(P
-M0/XB*0<NFQGY1#09-MC^"KP`G*ZY9AJ2U&R#571,F95Y$K=&D@4.`(P!``",
-M`0```@```$4``8A>B@``0!$``,"H`0'`J`$"`?0!]`%T!UDDD>5:?Y]C'%`D
-M>%;^!Z./+B`D"`````@```%L(0`!4(@GQI<J_\"(;_[;7?&$D(']`9\1*YMV
-M5+W^5N`RY0'QF_`&<(G+IO/43V.:ZY!HMD`P#VF$O1S7I?M5;WGR<[L94<35
-MZD>0WE6<R.+&I:O8'3;'BJ?FE6,--]CDNWC5^W`T98\%Y0I@(>2AW=Y;/C.;
-M-9Z.\Y1"P''S017HE]PT,YWUY3UL"WQW0OQ?+,`-K7H&U6*-]9&>(:XX49_5
-M1R#%PVX4KVO%(8/ADEPL%V2NJ&.%:"(?6/WI$,%=C\Z<+DVC]D.2%"*"01&<
-M!C[&=X?.!!Q[A`2AVXG665#A/#C5]_AF<&N3ZY0V+"@3..$@'@C/3[OH\81!
-M9]1P>FOK#DK@C4#I+'!*U7AJY#SY1QDCH[)C!#RLX[V&]S?VUP;:\!QR[&[Z
-M3AJ'O[QM]EK=M!O_2A^G+\CR8J&BC6.CJ_[+Y9)&?(&J),[.I"LY>1*W1BLY
-M#@!<`0``7`$```(```!%``%87HL``$`1``#`J`$!P*@!`@'T`?0!1`<I))'E
-M6G^?8QQ0)'A6_@>CCRX@)"`````(```!/"$``2":4?H#'D7CHJ:F$0YN$!LJ
-MK'!YXP*X1_XF;WA9\B)#B,F%'::W^P?HT,4DD*,Y4DKQOO""I5C+5=ZJ\26Q
-M;,B=SV-."%_@`E0<B$G!<1_=+^Y2;LK^A]X;P6(;0(;GKYA>:R08]S&GOG7P
-M<,F04ZV<W'PRJCC8NB5`!%_X\[X-"9$-N1`R>)J,P+F.V4A0("4GGI[,L0MH
-MK\*2[5V9`T&%QQ:`D`^VTJ(#7'N;H2E0%-+$1VCQ2'"/1>UXXZ+%=FZI4S6:
-M,].@S_9QDQWF3LGY&8Z:2"1G#7=SN.;J0(V6;UTH9K%F"Y!T#BX!$?RO52!_
-M<HW!)LEGA^I#0:0!Q94@H%78'WXC.=@WWF87/-,+YZ\(K*$C9R+S0*"2&'D2
-MMT:_8`X`?````'P````"````10``>%Z,``!`$0``P*@!`<"H`0(!]`'T`&0&
-M2:M`8ZD7Z4M"NYG0]=.W3*PN("4(`````````%PJ``!`A*&"[NF8"S#L[$E9
-MT+B_>!1PP?+UW]">+B781@J6@!BZ#S3P>EY9$=(O$L4PK7'LZ3P@U?""+/9[
-MD.RX>1*W1D-L#@!L````;`````(```!%``!H7HT``$`1``#`J`$!P*@!`@'T
-M`?0`5`8YJT!CJ1?I2T*[F=#UT[=,K"X@)2``````````3````##SJCG=6%\(
-MA\@`[@Z;M"P`B?N"AM>[8@-W3D`H@(FC-3LTUKB3F;ZB4F\6!7D2MT;1>PX`
-M;````&P````"````10``:%Z0``!`$0``P*@!`<"H`0(!]`'T`%0&.:M`8ZD7
-MZ4M"NYG0]=.W3*PN("4(`````0```$PJ```P@O`_2%NVJ&$L)9BQLA]^"FTS
-MJ*)I9B]9XV@8?XU\L)W)J0W/_'P["Y>`(25Y$K=&(XD.`&P```!L`````@``
-M`$4``&A>D0``0!$``,"H`0'`J`$"`?0!]`!4!CFK0&.I%^E+0KN9T/73MTRL
-M+B`E(`````$```!,````,'%74+X^;HQU45I:!%Q?&-/Y]MB4!3@N9>B^EO2!
-M%^M2],$(=C:KMZP]I)KY>A*W1J9"``"8`0``F`$```(```!%``&47I,``$`1
-M``#`J`$!P*@!`@'T`?0!@`=E:SGX4"]@[#D``````````"$@(@@````````!
-M>"(``'@``````0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``H*4GVD;9
-MB:49]>',\$(JTH^,_EV19BR"JVL2+1%IMAGK;JP2*_U%E_U1?KPR9:Y^T\*<
-M"H]FVQ<F,0X&*W6V6IR'$,+QB%VE\6VL7\JI"08F:$"BEQ]JYM_M.*Q3!4.S
-MI-^^RX&>9L26[/4(2O^T2HP/S!QK$F1QZ5KZW"5805HI```D0DIV5;/&GV-$
-MCCME9[FRA\/-*?,8C")0D[3$@TXH6&4I```<``!`!$Q&`7'0GC)VC2G+\!)K
-M*BB'V=/H````'```0`4XP8"<.U_%^?R$?JSLU@S\_Q?$M7H2MT;5=0,`F`$`
-M`)@!```"````10`!E%Z9``!`$0``P*@!`<"H`0(!]`'T`8`'96LY^%`O8.PY
-M```````````A("((`````````7@B``!X``````$!``P#```,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``*"E)]I&V8FE&?7AS/!"*M*/C/Y=D68L@JMK$BT1:;89
-MZVZL$BO]19?]47Z\,F6N?M/"G`J/9ML7)C$.!BMUMEJ<AQ#"\8A=I?%MK%_*
-MJ0D&)FA`HI<?:N;?[3BL4P5#LZ3?OLN!GF;$ENSU"$K_M$J,#\P<:Q)D<>E:
-M^MPE6$%:*0``)$)*=E6SQI]C1(X[96>YLH?#S2GS&(PB4).TQ(-.*%AE*0``
-M'```0`1,1@%QT)XR=HTIR_`2:RHHA]G3Z````!P``$`%.,&`G#M?Q?G\A'ZL
-M[-8,_/\7Q+5Z$K=&9[<)`)@!``"8`0```@```$4``91>L0``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V5K.?A0+V#L.0``````````(2`B"`````````%X(@``>```
-M```!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"``"@I2?:1MF)I1GUX<SP
-M0BK2CXS^79%F+(*K:Q(M$6FV&>MNK!(K_467_5%^O#)EKG[3PIP*CV;;%R8Q
-M#@8K=;9:G(<0PO&(7:7Q;:Q?RJD)!B9H0**7'VKFW^TXK%,%0[.DW[[+@9YF
-MQ);L]0A*_[1*C`_,'&L29''I6OK<)5A!6BD``"1"2G95L\:?8T2..V5GN;*'
-MP\TI\QB,(E"3M,2#3BA892D``!P``$`$3$8!<=">,G:-*<OP$FLJ*(?9T^@`
-M```<``!`!3C!@)P[7\7Y_(1^K.S6#/S_%\2U>Q*W1G;#!P"8`0``F`$```(`
-M``!%``&47KX``$`1``#`J`$!P*@!`@'T`?0!@`=E0L;T@&A1"^H`````````
-M`"$@(@@````````!>"(``'@````!`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``XYE9=L/CKK\C#.\_.'=4NUF^IV=L`:HA5P0.R?%^6A+#2J0&O.=2
-MIUSGV(3Y&)`?K1KKJ;WM<G$PJ_$G)`D*--G:`$4SK;?@44R=SZ*YYJ^Y[LW+
-MN_P(2'V+5:VAHCCH$(Y^/\DOQ-'[O[2(:UGGI9OX]44H4]%#]M]I5.&:48HI
-M```D%JG4K?V3XC!PN+H^M\J94.:*H"Q)3//"<C`_R:]&*+DI```<``!`!+&:
-M-604A11$BNTQYAR/2E7'<;FM````'```0`59"E."HW'\KB9-QK$]-H;JDK=Q
-MQWL2MT;1[PH`F`$``)@!```"````10`!E%[!``!`$0``P*@!`<"H`0(!]`'T
-M`8`'94+&](!H40OJ```````````A("((`````````7@B``!X`````0$!``P#
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``..967;#XZZ_(PSO/SAW5+M9OJ=G
-M;`&J(5<$#LGQ?EH2PTJD!KSG4J=<Y]B$^1B0'ZT:ZZF][7)Q,*OQ)R0)"C39
-MV@!%,ZVWX%%,G<^BN>:ON>[-R[O\"$A]BU6MH:(XZ!".?C_)+\31^[^TB&M9
-MYZ6;^/5%*%/10_;?:53AFE&**0``)!:IU*W]D^(P<+BZ/K?*F5#FBJ`L24SS
-MPG(P/\FO1BBY*0``'```0`2QFC5D%(441(KM,>8<CTI5QW&YK0```!P``$`%
-M60I3@J-Q_*XF3<:Q/3:&ZI*W<<=\$K=&`.\!`)@!``"8`0```@```$4``91>
-MT```0!$``,"H`0'`J`$"`?0!]`&`!V5"QO2`:%$+Z@``````````(2`B"```
-M``````%X(@``>`````$!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#C
-MF5EVP^.NOR,,[S\X=U2[6;ZG9VP!JB%7!`[)\7Y:$L-*I`:\YU*G7.?8A/D8
-MD!^M&NNIO>UR<3"K\2<D"0HTV=H`13.MM^!13)W/HKGFK[GNS<N[_`A(?8M5
-MK:&B..@0CGX_R2_$T?N_M(AK6>>EF_CU12A3T4/VWVE4X9I1BBD``"06J=2M
-M_9/B,'"XNCZWRIE0YHJ@+$E,\\)R,#_)KT8HN2D``!P``$`$L9HU9!2%%$2*
-M[3'F'(]*5<=QN:T````<``!`!5D*4X*C<?RN)DW&L3TVANJ2MW''?!*W1BH^
-M#P"8`0``F`$```(```!%``&47N8``$`1``#`J`$!P*@!`@'T`?0!@`=ER%`/
-M'P#-&U<``````````"$@(@@````````!>"(``'@````"`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``,J?A<J_8=*8H11D#]\,/@'9!>OUC?DG"*Z#]
-MA(6V9SPF3<^4;*.U-_@&W%+->.TJA`\)E_(5!4#'Q%`8K)D6TT93VA??I:QX
-M2.IK*/B<(T:R^RQ$Z?VUCZ,=N,HU3XP5")<P:5K"8)$=--^1NA&L7%7J;"W5
-M46O.X4+N?X-6XB0I```DPU?/M@KK/(#N5\"2VDVLXE<XHHGHQ*=C2QI;.(,#
-M2.XI```<``!`!!@'FITNK=1HY4&:;HK24HSC/7;/````'```0`6I@UL:<LHC
-M#N9G390'GIPDZBC8:WT2MT:>)P,`F`$``)@!```"````10`!E%[W``!`$0``
-MP*@!`<"H`0(!]`'T`8`'9<A0#Q\`S1M7```````````A("((`````````7@B
-M``!X`````@$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``#*GX7*OV'2F
-M*$49`_?##X!V07K]8WY)PBN@_82%MF<\)DW/E&RCM3?X!MQ2S7CM*H0/"9?R
-M%05`Q\10&*R9%M-&4]H7WZ6L>$CJ:RCXG"-&LOLL1.G]M8^C';C*-4^,%0B7
-M,&E:PF"1'33?D;H1K%Q5ZFPMU5%KSN%"[G^#5N(D*0``),-7S[8*ZSR`[E?`
-MDMI-K.)7.**)Z,2G8TL:6SB#`TCN*0``'```0`08!YJ=+JW4:.5!FFZ*TE*,
-MXSUVSP```!P``$`%J8-;&G+*(P[F9TV4!YZ<).HHV&M]$K=&+FD)`)@!``"8
-M`0```@```$4``91?"0``0!$``,"H`0'`J`$"`?0!]`&`!V7(4`\?`,T;5P``
-M````````(2`B"`````````%X(@``>`````(!`0`,`P``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"```RI^%RK]ATIBA%&0/WPP^`=D%Z_6-^2<(KH/V$A;9G/"9-
-MSY1LH[4W^`;<4LUX[2J$#PF7\A4%0,?$4!BLF1;31E/:%]^EK'A(ZFLH^)PC
-M1K+[+$3I_;6/HQVXRC5/C!4(ES!I6L)@D1TTWY&Z$:Q<5>IL+=51:\[A0NY_
-M@U;B)"D``"3#5\^V"NL\@.Y7P)+:3:SB5SBBB>C$IV-+&ELX@P-([BD``!P`
-M`$`$&`>:G2ZMU&CE09INBM)2C.,]=L\````<``!`!:F#6QIRRB,.YF=-E`>>
-MG"3J*-AK?A*W1L5T!P"8`0``F`$```(```!%``&47R,``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E-+K1HCE%HDL``````````"$@(@@````````!>"(``'@````#
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``P&IEF2FY_Z*24=V_Y/HK
-M\JEG7AXH)^U,*4B)%ZQI.2/OP@[:36^4"5ZH0:BT*)P%`2>?+V]QY6-0PB;`
-MMH(R'CWIT*O1P*X.")._D_4A.9G>^1U^K05A.0FZ9+#$`JHQ>6:C<H7'E1+7
-MRWSO_Z388M=L7CT%FH]H&-/(B_SD&P\I```D4XMER^$]/F=NNX1H,3_OH#",
-M-R6MVI-8K-";?QO;7J(I```<``!`!.GFL6^:<JF&-C=;G=\%^F>"VLS;````
-M'```0`54(H"2(*/'>LT1[E]P9?0?."ZG''X2MT:&H0H`F`$``)@!```"````
-M10`!E%\D``!`$0``P*@!`<"H`0(!]`'T`8`'932ZT:(Y1:)+```````````A
-M("((`````````7@B``!X`````P$!``P#```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``,!J99DIN?^BDE'=O^3Z*_*I9UX>*"?M3"E(B1>L:3DC[\(.VDUOE`E>
-MJ$&HM"B<!0$GGR]O<>5C4,(FP+:",AX]Z="KT<"N#@B3OY/U(3F9WOD=?JT%
-M83D)NF2PQ`*J,7EFHW*%QY42U\M\[_^DV&+7;%X]!9J/:!C3R(O\Y!L/*0``
-M)%.+9<OA/3YG;KN$:#$_[Z`PC#<EK=J36*S0FW\;VUZB*0``'```0`3IYK%O
-MFG*IAC8W6YW?!?IG@MK,VP```!P``$`%5"*`DB"CQWK-$>Y?<&7T'S@NIQQ_
-M$K=&X*`!`)@!``"8`0```@```$4``91?*```0!$``,"H`0'`J`$"`?0!]`&`
-M!V4TNM&B.46B2P``````````(2`B"`````````%X(@``>`````,!`0`,`P``
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"``#`:F69*;G_HI)1W;_D^BORJ6=>'B@G
-M[4PI2(D7K&DY(^_"#MI-;Y0)7JA!J+0HG`4!)Y\O;W'E8U#")L"V@C(>/>G0
-MJ]'`K@X(D[^3]2$YF=[Y'7ZM!6$Y";IDL,0"JC%Y9J-RA<>5$M?+?.__I-AB
-MUVQ>/06:CV@8T\B+_.0;#RD``"13BV7+X3T^9VZ[A&@Q/^^@,(PW):W:DUBL
-MT)M_&]M>HBD``!P``$`$Z>:Q;YIRJ88V-UN=WP7Z9X+:S-L````<``!`!50B
-M@)(@H\=ZS1'N7W!E]!\X+J<<?Q*W1A[O#@"8`0``F`$```(```!%``&47S@`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E_5['9)RH4N4``````````"$@(@@`````
-M```!>"(``'@````$`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``VK=\
-MI,2JW6A#O*O9:Z3G,E/P\@!V&3XC-.0@VO7ZVJML0`G8EAC'AI8,7(E8SZ(=
-M`\8]5%?%9LW#6/ZUAM='<=M;G)L%D+ANB<=XP"^MO9;S>%9GFK0_$S%LO)_\
-MK?9';TSA&!3(%UH;NE)*?9]DP-[K$"V42.L\Q&V@X0TS;U,I```DQ5,WW)1V
-M'K_)8FMNW;U]13P37._4^Q)X9ZZ+(8B&$P$I```<``!`!/S2Y2=AE&V@X:P'
-M[2ROMNX?PG$)````'```0`467X,2?T(39`8UH.5+>MX(%(#B*X`2MT9!V0(`
-MF`$``)@!```"````10`!E%\Y``!`$0``P*@!`<"H`0(!]`'T`8`'9?U>QV2<
-MJ%+E```````````A("((`````````7@B``!X````!`$!``P#```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``-JW?*3$JMUH0[RKV6NDYS)3\/(`=AD^(S3D(-KU
-M^MJK;$`)V)88QX:6#%R)6,^B'0/&/517Q6;-PUC^M8;71W';6YR;!9"X;HG'
-M>,`OK;V6\WA69YJT/Q,Q;+R?_*WV1V],X1@4R!=:&[I22GV?9,#>ZQ`ME$CK
-M/,1MH.$-,V]3*0``),53-]R4=AZ_R6)K;MV]?44\$USOU/L2>&>NBR&(AA,!
-M*0``'```0`3\TN4G891MH.&L!^TLK[;N'\)Q"0```!P``$`%%E^#$G]"$V0&
-M-:#E2WK>"!2`XBN`$K=&U1H)`)@!``"8`0```@```$4``91?.@``0!$``,"H
-M`0'`J`$"`?0!]`&`!V7]7L=DG*A2Y0``````````(2`B"`````````%X(@``
-M>`````0!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"``#:MWRDQ*K=:$.\
-MJ]EKI.<R4_#R`'89/B,TY"#:]?K:JVQ`"=B6&,>&E@Q<B5C/HAT#QCU45\5F
-MS<-8_K6&UT=QVUN<FP60N&Z)QWC`+ZV]EO-X5F>:M#\3,6R\G_RM]D=O3.$8
-M%,@76ANZ4DI]GV3`WNL0+91(ZSS$;:#A#3-O4RD``"3%4S?<E'8>O\EB:V[=
-MO7U%/!-<[]3[$GAGKHLAB(83`2D``!P``$`$_-+E)V&4;:#AK`?M+*^V[A_"
-M<0D````<``!`!19?@Q)_0A-D!C6@Y4MZW@@4@.(K@1*W1J4I!P"8`0``F`$`
-M``(```!%``&47ST``$`1``#`J`$!P*@!`@'T`?0!@`=E^('74]R8#/D`````
-M`````"$@(@@````````!>"(``'@````'`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``(PNH@ZI;N:,@AFUL"PQ!4(S[I#K:@!C#ZNG)XTP"@@0ROH+3
-M\#KO?D'(V?,H\;J_JRV$"O'`,(:-6+&KG;LED_.9Y9>:5OD%2?5I1\<@/'$5
-MJ50GPO_91H4VKN8/L.8%\+(!F'4O4*$05O5^[O^]>YR#/W;K^0Q)L:N;<UB=
-M,)4I```DL2`$V<LEO8&$;C)QT973L3T2!OCXF^^+H.YJL@/N][LI```<``!`
-M!.+F>(W8*IN:C1["=.IF%'7?^P.C````'```0`7]J^1[!,2#IQ9`30L[EYCS
-M!8C@[8$2MT964PH`F`$``)@!```"````10`!E%\_``!`$0``P*@!`<"H`0(!
-M]`'T`8`'9?B!UU/<F`SY```````````A("((`````````7@B``!X````!P$!
-M``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``",+J(.J6[FC((9M;`L,05",
-M^Z0ZVH`8P^KIR>-,`H($,KZ"T_`Z[WY!R-GS*/&ZOZLMA`KQP#"&C5BQJYV[
-M)9/SF>67FE;Y!4GU:4?'(#QQ%:E4)\+_V4:%-J[F#[#F!?"R`9AU+U"A$%;U
-M?N[_O7N<@S]VZ_D,2;&KFW-8G3"5*0``)+$@!-G+);V!A&XR<=&5T[$]$@;X
-M^)OOBZ#N:K(#[O>[*0``'```0`3BYGB-V"J;FHT>PG3J9A1UW_L#HP```!P`
-M`$`%_:OD>P3$@Z<60$T+.Y>8\P6(X.V"$K=&L%(!`)@!``"8`0```@```$4`
-M`91?0@``0!$``,"H`0'`J`$"`?0!]`&`!V7X@==3W)@,^0``````````(2`B
-M"`````````%X(@``>`````<!`0`,`P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M```C"ZB#JENYHR"&;6P+#$%0C/ND.MJ`&,/JZ<GC3`*"!#*^@M/P.N]^0<C9
-M\RCQNK^K+80*\<`PAHU8L:N=NR63\YGEEYI6^05)]6E'QR`\<16I5"?"_]E&
-MA3:NY@^PY@7PL@&8=2]0H1!6]7[N_[U[G(,_=NOY#$FQJYMS6)TPE2D``"2Q
-M(`39RR6]@81N,G'1E=.Q/1(&^/B;[XN@[FJR`^[WNRD``!P``$`$XN9XC=@J
-MFYJ-'L)TZF84==_[`Z,````<``!`!?VKY'L$Q(.G%D!-"SN7F/,%B.#M@A*W
-M1DJA#@"8`0``F`$```(```!%``&47V```$`1``#`J`$!P*@!`@'T`?0!@`=E
-M;?&G651YB*D``````````"$@(@@````````!>"(``'@````(`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``.!/DAF"*87?*X]BTN*4N8<XT^9BJ;V37
-M*$-L&+XI^A+>G*KN1>`$2N/4<96Q7/VPJ">&!;3&*A29+H/*_-"E(+EPN8N(
-M#>.O)#_BG2L;UO@<Y3:R7)I$C,3(W&EK&MKC*+%&"[V&YUQ?4\,R_!N_32$)
-M*3S<I2CPQH'LQ#8FA$(I```D1UJ3#8[J[X;TY&H\&7I\:Z&56MVKX\!WQ^]H
-M/P)=R/0I```<``!`!#V^-6K"(-$!4ZL)FWNT@2R%<>HA````'```0`419R[^
-MZB2]"75/3I)\D`NS%#8=K(,2MT8*BP(`F`$``)@!```"````10`!E%]D``!`
-M$0``P*@!`<"H`0(!]`'T`8`'96WQIUE4>8BI```````````A("((````````
-M`7@B``!X````"`$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``#@3Y(9@
-MBF%WRN/8M+BE+F'.-/F8JF]DURA#;!B^*?H2WIRJ[D7@!$KCU'&5L5S]L*@G
-MA@6TQBH4F2Z#ROS0I2"Y<+F+B`WCKR0_XITK&];X'.4VLER:1(S$R-QI:QK:
-MXRBQ1@N]AN=<7U/#,OP;OTTA"2D\W*4H\,:![,0V)H1"*0``)$=:DPV.ZN^&
-M].1J/!EZ?&NAE5K=J^/`=\?O:#\"7<CT*0``'```0`0]OC5JPB#1`5.K"9M[
-MM($LA7'J(0```!P``$`%$6<N_NHDO0EU3TZ2?)`+LQ0V':R#$K=&RLP(`)@!
-M``"8`0```@```$4``91?;```0!$``,"H`0'`J`$"`?0!]`&`!V5M\:=95'F(
-MJ0``````````(2`B"`````````%X(@``>`````@!`0`,`P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"```X$^2&8(IA=\KCV+2XI2YASC3YF*IO9-<H0VP8OBGZ
-M$MZ<JNY%X`1*X]1QE;%<_;"H)X8%M,8J%)DN@\K\T*4@N7"YBX@-XZ\D/^*=
-M*QO6^!SE-K)<FD2,Q,C<:6L:VN,HL48+O8;G7%]3PS+\&[]-(0DI/-RE*/#&
-M@>S$-B:$0BD``"1'6I,-CNKOAO3D:CP9>GQKH95:W:OCP'?'[V@_`EW(]"D`
-M`!P``$`$/;XU:L(@T0%3JPF;>[2!+(5QZB$````<``!`!1%G+O[J)+T)=4].
-MDGR0"[,4-AVLA!*W1F_9!@"8`0``F`$```(```!%``&47XD``$`1``#`J`$!
-MP*@!`@'T`?0!@`=EI&1L_!HMDHP``````````"$@(@@````````!>"(``'@`
-M```)`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``W/N%=/%B.KC3>H2"
-M+D@3E'`&!0Y="W+"NM=2>/N64!O[>/<I"*OV`]W@?0^$#I3C8Y"-SM>.+`@:
-MP<\AUFZ@I(^[9Y-QQ1N^$C\C0I>'H?OP.YK_V8&%HKDNCYN#6&^J5IJ++C[)
-M+"YR@"B>I?:W&/-WXTLU6FG";6WM54D0OI`I```D]S]O[J/H=D@3CPJ5`>_.
-M@^A0NZ3%>@`J)'Q3`5NK'#4I```<``!`!/ZB6;=09O=VXED"7B1(1`R#SH%-
-M````'```0`5;K&^`5SG^2@YB1TYWN%=&(T[,E(02MT95!0H`F`$``)@!```"
-M````10`!E%^=``!`$0``P*@!`<"H`0(!]`'T`8`'9:1D;/P:+9*,````````
-M```A("((`````````7@B``!X````"0$!``P#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``-S[A73Q8CJXTWJ$@BY($Y1P!@4.70MRPKK74GC[EE`;^WCW*0BK
-M]@/=X'T/A`Z4XV.0C<[7CBP(&L'/(=9NH*2/NV>3<<4;OA(_(T*7AZ'[\#N:
-M_]F!A:*Y+H^;@UAOJE::BRX^R2PN<H`HGJ7VMQCS=^-+-5IIPFUM[55)$+Z0
-M*0``)/<_;^ZCZ'9($X\*E0'OSH/H4+NDQ7H`*B1\4P%;JQPU*0``'```0`3^
-MHEFW4&;W=N)9`EXD2$0,@\Z!30```!P``$`%6ZQO@%<Y_DH.8D=.=[A71B-.
-MS)2%$K=&?P0!`)@!``"8`0```@```$4``91?K0``0!$``,"H`0'`J`$"`?0!
-M]`&`!V6D9&S\&BV2C```````````(2`B"`````````%X(@``>`````D!`0`,
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``#<^X5T\6(ZN--ZA((N2!.4<`8%
-M#ET+<L*ZUU)X^Y90&_MX]RD(J_8#W>!]#X0.E.-CD(W.UXXL"!K!SR'6;J"D
-MC[MGDW'%&[X2/R-"EX>A^_`[FO_9@86BN2Z/FX-8;ZI6FHLN/LDL+G*`*)ZE
-M]K<8\W?C2S5::<)M;>U521"^D"D``"3W/V_NH^AV2!./"I4![\Z#Z%"[I,5Z
-M`"HD?%,!6ZL<-2D``!P``$`$_J)9MU!F]W;B60)>)$A$#(/.@4T````<``!`
-M!5NL;X!7.?Y*#F)'3G>X5T8C3LR4A1*W1NYD#@"8`0``F`$```(```!%``&4
-M7\4``$`1``#`J`$!P*@!`@'T`?0!@`=EJX+#7N*AX:H``````````"$@(@@`
-M```````!>"(``'@```!K`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M.9*6E`/C;-ICY]T2:\J>_49=FN84E'J_`37]%O!;]AH-@V\?*S=O>W22/"W^
-M2ZCQR.F]'<:O"&47=,[DJ&E<78-1%]"\[AQOD;T2\KA^*Y1C#/U\.H0F>K;]
-M4Y8/:X_OGI+>W9[<9M8WL3=0LO=!WF#^!\<_2MWT6):W8L^A_D<I```DP+M3
-M:D/$ZI%?1`=>GI+:S1/MM%XYDR%F*F7A5X4G<=0I```<``!`!/OZ785(*BR[
-MN#1FTGOZS,#$QB))````'```0`6_>5MLQH$;][0X6Z:;><_?@;*+4882MT;&
-M/`(`F`$``)@!```"````10`!E%_(``!`$0``P*@!`<"H`0(!]`'T`8`'9:N"
-MPU[BH>&J```````````A("((`````````7@B``!X````:P$!``P#```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``#F2EI0#XVS:8^?=$FO*GOU&79KF%)1ZOP$U
-M_1;P6_8:#8-O'RLW;WMTDCPM_DNH\<CIO1W&KPAE%W3.Y*AI7%V#41?0O.X<
-M;Y&]$O*X?BN48PS]?#J$)GJV_5.6#VN/[YZ2WMV>W&;6-[$W4++W0=Y@_@?'
-M/TK=]%B6MV+/H?Y'*0``),"[4VI#Q.J17T0'7IZ2VLT3[;1>.9,A9BIEX5>%
-M)W'4*0``'```0`3[^EV%2"HLN[@T9M)[^LS`Q,8B20```!P``$`%OWE;;,:!
-M&_>T.%NFFWG/WX&RBU&&$K=&?7X(`)@!``"8`0```@```$4``91?R0``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V6K@L->XJ'AJ@``````````(2`B"`````````%X
-M(@``>````&L!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"```YDI:4`^-L
-MVF/GW1)KRI[]1EV:YA24>K\!-?T6\%OV&@V#;Q\K-V][=)(\+?Y+J/'(Z;T=
-MQJ\(91=TSN2H:5Q=@U$7T+SN'&^1O1+RN'XKE&,,_7PZA"9ZMOU3E@]KC^^>
-MDM[=GMQFUC>Q-U"R]T'>8/X'QS]*W?18EK=BSZ'^1RD``"3`NU-J0\3JD5]$
-M!UZ>DMK-$^VT7CF3(68J9>%7A2=QU"D``!P``$`$^_I=A4@J++NX-&;2>_K,
-MP,3&(DD````<``!`!;]Y6VS&@1OWM#A;IIMYS]^!LHM1AQ*W1D:+!@"8`0``
-MF`$```(```!%``&47\H``$`1``#`J`$!P*@!`@'T`?0!@`=E57>?7Q:1*JX`
-M`````````"$@(@@````````!>"(``'@```!L`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``8+0'"K`G8))LR,Z2SVO>_1B6ZX04<[:]P*TU(FO=KG,3
-MV66-A_:[P8GF_`+3JL._.?<'&=RP!5'@`;9`/*['G+97L@4E;\V-`X^DED'P
-MZ>L38!'S9,5&I-?M&Y90E1:-]'S'<+MTJ9.3ONRV"7*M7_CYB<$[@-/RUDHA
-MBANOSG4I```D=$1,2H9`&651$ENQ;X[TYZA1,<6`AR0*X:*H31KTS5@I```<
-M``!`!%/R?@(%Q\-J(#U<0S'+ZIT%^:OM````'```0`7Q;=X]BO^3_P4LEP^M
-M;N%>X@*19(<2MT;GM@D`F`$``)@!```"````10`!E%_+``!`$0``P*@!`<"H
-M`0(!]`'T`8`'955WGU\6D2JN```````````A("((`````````7@B``!X````
-M;`$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``&"T!PJP)V"2;,C.DL]K
-MWOT8ENN$%'.VO<"M-2)KW:YS$]EEC8?VN\&)YOP"TZK#OSGW!QG<L`51X`&V
-M0#RNQYRV5[(%)6_-C0./I)9!\.GK$V`1\V3%1J37[1N64)46C?1\QW"[=*F3
-MD[[LM@ERK5_X^8G!.X#3\M9*(8H;K\YU*0``)'1$3$J&0!EE41);L6^.].>H
-M43'%@(<D"N&BJ$T:],U8*0``'```0`13\GX"!<?#:B`]7$,QR^J=!?FK[0``
-M`!P``$`%\6W>/8K_D_\%+)</K6[A7N("D62($K=&7+8``)@!``"8`0```@``
-M`$4``91?S```0!$``,"H`0'`J`$"`?0!]`&`!V55=Y]?%I$JK@``````````
-M(2`B"`````````%X(@``>````&P!`0`,`P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"``!@M`<*L"=@DFS(SI+/:][]&);KA!1SMKW`K34B:]VN<Q/998V']KO!
-MB>;\`M.JP[\Y]P<9W+`%4>`!MD`\KL><ME>R!25OS8T#CZ260?#IZQ-@$?-D
-MQ4:DU^T;EE"5%HWT?,=PNW2IDY.^[+8)<JU?^/F)P3N`T_+62B&*&Z_.=2D`
-M`"1T1$Q*AD`995$26[%OCO3GJ%$QQ8"')`KAHJA-&O3-6"D``!P``$`$4_)^
-M`@7'PVH@/5Q#,<OJG07YJ^T````<``!`!?%MWCV*_Y/_!2R7#ZUNX5[B`I%D
-MB!*W1I$"#@"8`0``F`$```(```!%``&47\T``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E)GOY,;Y8,/(``````````"$@(@@````````!>"(``'@```!M`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``'[/H^_&)33-3F9#.]8JU_,`I3KFJ
-M`T30NTQVUSD>V28'=Z<Q%JK@TF/,;%*%LX3RML(Y>BB)4`;9M3ORF82P7[)@
-MFXY)C(+/E'%3SGG;]0*B0J-2-#^_G(]9^9]4WN4TE.&\0D;76:<13D^::ESF
-MZ-O]S-JH5I8\>;8U12`7U?(I```DUZ@9VT"/CV.P'++C&1G8:4?*T9V_6H[G
-M(1>%`;=)4.<I```<``!`!"D0%YR*B=LGQ^8LR_U0.VGO@?6P````'```0`4#
-M:4Y:5>(66'%`A\=,?A.+?[C"ZXD2MT:8[@$`F`$``)@!```"````10`!E%_.
-M``!`$0``P*@!`<"H`0(!]`'T`8`'929[^3&^6##R```````````A("((````
-M`````7@B``!X````;0$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``!^S
-MZ/OQB4TS4YF0SO6*M?S`*4ZYJ@-$T+M,=M<Y'MDF!W>G,1:JX-)CS&Q2A;.$
-M\K;".7HHB5`&V;4[\IF$L%^R8)N.28R"SY1Q4\YYV_4"HD*C4C0_OYR/6?F?
-M5-[E-)3AO$)&UUFG$4Y/FFI<YNC;_<S:J%:6/'FV-44@%]7R*0``)->H&=M`
-MCX]CL!RRXQD9V&E'RM&=OUJ.YR$7A0&W25#G*0``'```0`0I$!><BHG;)\?F
-M+,O]4#MI[X'UL````!P``$`%`VE.6E7B%EAQ0(?'3'X3BW^XPNN)$K=&.#`(
-M`)@!``"8`0```@```$4``91?SP``0!$``,"H`0'`J`$"`?0!]`&`!V4F>_DQ
-MOE@P\@``````````(2`B"`````````%X(@``>````&T!`0`,`P``#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"```?L^C[\8E-,U.9D,[UBK7\P"E.N:H#1-"[3';7
-M.1[9)@=WIS$6JN#28\QL4H6SA/*VPCEZ*(E0!MFU._*9A+!?LF";CDF,@L^4
-M<5/.>=OU`J)"HU(T/[^<CUGYGU3>Y324X;Q"1M=9IQ%.3YIJ7.;HV_W,VJA6
-MECQYMC5%(!?5\BD``"37J!G;0(^/8[`<LN,9&=AI1\K1G;]:CN<A%X4!MTE0
-MYRD``!P``$`$*1`7G(J)VR?'YBS+_5`[:>^!];`````<``!`!0-I3EI5XA98
-M<4"'QTQ^$XM_N,+KBA*W1N`Z!@"8`0``F`$```(```!%``&47]```$`1``#`
-MJ`$!P*@!`@'T`?0!@`=EN@Z"R8:E;I@``````````"$@(@@````````!>"(`
-M`'@```!P`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``<,TPM_$]-T63
-MA$C*[N\R%=[2Y^A=?S7H=\^2[#YRRT4!Q<$8+,./$KV<DSL@AALH9&+'=AZ/
-M`X7RU)(@Y7N4IB>//IZ'2YT#(5)1--_)K]O&IA;H,FO*5K!+`'6O_\!&+^51
-M45V!B&+"`5S$&QVF8I(<F8KH[>#OL/SV`M5KN6<I```DR1_9ODP\*Z2_.V7$
-M[IB-M;Z]Q1!.!*$\!N?T&ZYY!B(I```<``!`!`OO02:Y,UJKMM*%+2].VY8$
-MXA*9````'```0`76)`S>G_XO9!:Q!QSZ?T,$VZ&UC(H2MT;':`D`F`$``)@!
-M```"````10`!E&`[``!`$0``P*@!`<"H`0(!]`'T`8`'9;H.@LF&I6Z8````
-M```````A("((`````````7@B``!X````<`$!``P#```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``'#-,+?Q/3=%DX1(RN[O,A7>TN?H77\UZ'?/DNP^<LM%`<7!
-M&"S#CQ*]G),[((8;*&1BQW8>CP.%\M22(.5[E*8GCSZ>ATN=`R%2433?R:_;
-MQJ86Z#)KRE:P2P!UK__`1B_E45%=@8ABP@%<Q!L=IF*2')F*Z.W@[[#\]@+5
-M:[EG*0``),D?V;Y,/"NDOSMEQ.Z8C;6^O<403@2A/`;G]!NN>08B*0``'```
-M0`0+[T$FN3-:J[;2A2TO3MN6!.(2F0```!P``$`%UB0,WI_^+V06L0<<^G]#
-M!-NAM8R+$K=&"F@``)@!``"8`0```@```$4``91@0```0!$``,"H`0'`J`$"
-M`?0!]`&`!V6Z#H+)AJ5NF```````````(2`B"`````````%X(@``>````'`!
-M`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"``!PS3"W\3TW19.$2,KN[S(5
-MWM+GZ%U_->AWSY+L/G++10'%P1@LPX\2O9R3.R"&&RAD8L=V'H\#A?+4DB#E
-M>Y2F)X\^GH=+G0,A4E$TW\FOV\:F%N@R:\I6L$L`=:__P$8OY5%178&(8L(!
-M7,0;':9BDAR9BNCMX.^P_/8"U6NY9RD``"3)']F^3#PKI+\[9<3NF(VUOKW%
-M$$X$H3P&Y_0;KGD&(BD``!P``$`$"^]!)KDS6JNVTH4M+T[;E@3B$ID````<
-M``!`!=8D#-Z?_B]D%K$''/I_0P3;H;6,BQ*W1NO3#0"8`0``F`$```(```!%
-M``&484<``$`1``#`J`$!P*@!`@'T`?0!@`=EPE2U(M\35F4``````````"$@
-M(@@````````!>"(``'@```!Q`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@```?&WO);=;T*4:M<0:1!<S#:2_;6\EKV9_0T\ZOR@TB:I9IQ\BQ9NFKK$
-MR!"^/(O?^6A[Q![^M;'M)OV0@"^$^\FB&-(]N]_OH=6%_4=SI$%W*:\_POY&
-M25['8)-&4&@A^TLLS(MEE]S:6*A1"EGF[TC:O+:U0O-_H:HR74'!';HI```D
-M/CW<PT;U2LW^O-U<:>L,1,#05]5RY=!CK&,69U=3AN\I```<``!`!-]*$TR'
-M@3J[:(%(!+)[=_^)ZG?H````'```0`4X:<[Y:#S25Q=J&VJ[%)7HVB?N9HP2
-MMT:IQP$`F`$``)@!```"````10`!E&'W``!`$0``P*@!`<"H`0(!]`'T`8`'
-M9<)4M2+?$U9E```````````A("((`````````7@B``!X````<0$!``P#```,
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(```'QM[R6W6]"E&K7$&D07,PVDOVUO):]
-MF?T-/.K\H-(FJ6:<?(L6;IJZQ,@0OCR+W_EH>\0>_K6Q[2;]D(`OA/O)HAC2
-M/;O?[Z'5A?U'<Z1!=RFO/\+^1DE>QV"31E!H(?M++,R+99?<VEBH40I9YN](
-MVKRVM4+S?Z&J,EU!P1VZ*0``)#X]W,-&]4K-_KS=7&GK#$3`T%?5<N708ZQC
-M%F=74X;O*0``'```0`3?2A-,AX$ZNVB!2`2R>W?_B>IWZ````!P``$`%.&G.
-M^6@\TE<7:AMJNQ25Z-HG[F:,$K=&+`D(`)@!``"8`0```@```$4``91B>0``
-M0!$``,"H`0'`J`$"`?0!]`&`!V7"5+4BWQ-690``````````(2`B"```````
-M``%X(@``>````'$!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"```!\;>\
-MEMUO0I1JUQ!I$%S,-I+]M;R6O9G]#3SJ_*#2)JEFG'R+%FZ:NL3($+X\B]_Y
-M:'O$'OZUL>TF_9"`+X3[R:(8TCV[W^^AU87]1W.D07<IKS_"_D9)7L=@DT90
-M:"'[2RS,BV67W-I8J%$*6>;O2-J\MK5"\W^AJC)=0<$=NBD``"0^/=S#1O5*
-MS?Z\W5QIZPQ$P-!7U7+ET&.L8Q9G5U.&[RD``!P``$`$WTH33(>!.KMH@4@$
-MLGMW_XGJ=^@````<``!`!3AISOEH/-)7%VH;:KL4E>C:)^YFC1*W1I`;!@"8
-M`0``F`$```(```!%``&48PH``$`1``#`J`$!P*@!`@'T`?0!@`=E);I>R;%1
-MJS@``````````"$@(@@````````!>"(``'@```!R`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``S7FNHB]X@=1>L[&%1PR9SGQ;A0<KL<TA<WVJ*I\E
-MO(W))3]DM%ELE\?Z+NZ7Q-!0!L1%R""K%/@2T:+@D>)YC7'K.=AIZWAR"RN1
-MWF/HZ)E"^,R+.E%1WG<RX\!2K7,=U":<&L>1!BOY(%'5),@)<ZG&7'5\(@&]
-M!X6Q?=)@M+<I```D_&]_+7P/I&[AD99\DW%/M<':G9,<2G`ON;`#A@D(ZT0I
-M```<``!`!&$P*'J#87-/-0Q!BVU_3Y1;BINH````'```0`7@UZ,/ZZLJ&=8B
-M/:!;J>CL,%Q5K8T2MT:\00D`F`$``)@!```"````10`!E&,8``!`$0``P*@!
-M`<"H`0(!]`'T`8`'926Z7LFQ4:LX```````````A("((`````````7@B``!X
-M````<@$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``,UYKJ(O>('47K.Q
-MA4<,F<Y\6X4'*['-(7-]JBJ?);R-R24_9+19;)?'^B[NE\304`;$1<@@JQ3X
-M$M&BX)'B>8UQZSG8:>MX<@LKD=YCZ.B90OC,BSI14=YW,N/`4JUS'=0FG!K'
-MD08K^2!1U23("7.IQEQU?"(!O0>%L7W28+2W*0``)/QO?RU\#Z1NX9&6?)-Q
-M3[7!VIV3'$IP+[FP`X8)".M$*0``'```0`1A,"AZ@V%S3S4,08MM?T^46XJ;
-MJ````!P``$`%X->C#^NK*AG6(CV@6ZGH[#!<5:V.$K=&[4```)@!``"8`0``
-M`@```$4``91C,```0!$``,"H`0'`J`$"`?0!]`&`!V4ENE[)L5&K.```````
-M````(2`B"`````````%X(@``>````'(!`0`,`P``#`$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``#->:ZB+WB!U%ZSL85'#)G.?%N%!RNQS2%S?:HJGR6\C<DE/V2T
-M66R7Q_HN[I?$T%`&Q$7((*L4^!+1HN"1XGF-<>LYV&GK>'(+*Y'>8^CHF4+X
-MS(LZ45'>=S+CP%*M<QW4)IP:QY$&*_D@4=4DR`ESJ<9<=7PB`;T'A;%]TF"T
-MMRD``"3\;W\M?`^D;N&1EGR3<4^UP=J=DQQ*<"^YL`.&"0CK1"D``!P``$`$
-M83`H>H-A<T\U#$&+;7]/E%N*FZ@````<``!`!>#7HP_KJRH9UB(]H%NIZ.PP
-M7%6MCA*W1L^,#0"8`0``F`$```(```!%``&48V4``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E"F9524Z"DP(``````````"$@(@@````````!>"(``'@```!S`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``68T>G8<R!B%Q&T."=B79OAI<
-MSY#UB6X&",A'F-@VC%8HW))V',>TG@Q2]W2=36MZN-UI(XL_VO.B@^R7T^#J
-MFH>C`R@+EX@)E1U0MSI58-;)GX6%U(3@.523<S*M@5V0X$^[/6$W\%]?&)SU
-M^)PX$4FF)@;-'[::.0NZ%GF,F`0I```D&0-*N.Z7OR8`AF5."^"*=YX`WW&:
-MP]LRQAE.O?&Z,RPI```<``!`!*\9LX\,H[#02ER@Q*79'S`+I%H!````'```
-M0`7F3_X7:'"WK5V*MOD"NLH+@"OM"(\2MT98>0$`F`$``)@!```"````10`!
-ME&-N``!`$0``P*@!`<"H`0(!]`'T`8`'90IF54E.@I,"```````````A("((
-M`````````7@B``!X````<P$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M`%F-'IV',@8A<1M#@G8EV;X:7,^0]8EN!@C(1YC8-HQ6*-R2=AS'M)X,4O=T
-MG4UK>KC=:2.+/]KSHH/LE]/@ZIJ'HP,H"Y>("94=4+<Z56#6R9^%A=2$X#E4
-MDW,RK8%=D.!/NSUA-_!?7QB<]?B<.!%)IB8&S1^VFCD+NA9YC)@$*0``)!D#
-M2KCNE[\F`(9E3@O@BG>>`-]QFL/;,L893KWQNC,L*0``'```0`2O&;./#*.P
-MT$I<H,2EV1\P"Z1:`0```!P``$`%YD_^%VAPMZU=BK;Y`KK*"X`K[0B/$K=&
-M[[H'`)@!``"8`0```@```$4``91CBP``0!$``,"H`0'`J`$"`?0!]`&`!V4*
-M9E5)3H*3`@``````````(2`B"`````````%X(@``>````',!`0`,`P``#`$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"``!9C1Z=AS(&(7$;0X)V)=F^&ES/D/6);@8(
-MR$>8V#:,5BC<DG8<Q[2>#%+W=)U-:WJXW6DCBS_:\Z*#[)?3X.J:AZ,#*`N7
-MB`F5'5"W.E5@ULF?A874A.`Y5)-S,JV!79#@3[L]83?P7U\8G/7XG#@12:8F
-M!LT?MIHY"[H6>8R8!"D``"09`TJX[I>_)@"&94X+X(IWG@#?<9K#VS+&&4Z]
-M\;HS+"D``!P``$`$KQFSCPRCL-!*7*#$I=D?,`ND6@$````<``!`!>9/_A=H
-M<+>M78JV^0*ZR@N`*^T(D!*W1LO&!0"8`0``F`$```(```!%``&48[D``$`1
-M``#`J`$!P*@!`@'T`?0!@`=E_YN-E>Y_]Y4``````````"$@(@@````````!
-M>"(``'@```!U`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``?8LXYB=V
-MDAOW;G7$D9!TWYO>Q9JOF[AS:$SU-TOU^[4V%_N1=OA?*7D**RC4V"HY/WO1
-M:Z[8RYP!T.KL2VFNYP?V.'WW.S\TA"%:7=3Z_@0F-<4PNUQT<H1X9:T[R!KD
-M^60<3NI?^RWCBS>NG%P-*L^@,[^.6Q3H(75%4QBM8$(I```D$5:OI@`IF/=9
-M)MD!/@0@G.M?WUSU%S_2P)>]2JT21]DI```<``!`!/+.U;1)XJJ!)812K@-2
-MANC"G*E#````'```0`6&L>N[YR7>S#-LD/\Y+0I&?,^[U9`2MT9R\P@`F`$`
-M`)@!```"````10`!E&._``!`$0``P*@!`<"H`0(!]`'T`8`'9?^;C97N?_>5
-M```````````A("((`````````7@B``!X````=0$!``P#```,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``'V+..8G=I(;]VYUQ)&0=-^;WL6:KYNX<VA,]3=+]?NU
-M-A?[D7;X7REY"BLHU-@J.3][T6NNV,N<`=#J[$MIKN<']CA]]SL_-(0A6EW4
-M^OX$)C7%,+M<='*$>&6M.\@:Y/ED'$[J7_LMXXLWKIQ<#2K/H#._CEL4Z"%U
-M15,8K6!"*0``)!%6KZ8`*9CW62;9`3X$()SK7]]<]1<_TL"7O4JM$D?9*0``
-M'```0`3RSM6T2>*J@26$4JX#4H;HPIRI0P```!P``$`%AK'KN^<EWLPS;)#_
-M.2T*1GS/N]60$K=&N34/`)@!``"8`0```@```$4``91CR```0!$``,"H`0'`
-MJ`$"`?0!]`&`!V7_FXV5[G_WE0``````````(2`B"`````````%X(@``>```
-M`'4!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"``!]BSCF)W:2&_=N=<21
-MD'3?F][%FJ^;N'-H3/4W2_7[M387^Y%V^%\I>0HK*-38*CD_>]%KKMC+G`'0
-MZNQ+::[G!_8X??<[/S2$(5I=U/K^!"8UQ3"[7'1RA'AEK3O(&N3Y9!Q.ZE_[
-M+>.+-ZZ<7`TJSZ`SOXY;%.@A=453&*U@0BD``"015J^F`"F8]UDFV0$^!""<
-MZU_?7/47/]+`E[U*K1)'V2D``!P``$`$\L[5M$GBJH$EA%*N`U*&Z,*<J4,`
-M```<``!`!8:QZ[OG)=[,,VR0_SDM"D9\S[O5D1*W1OA"#0"8`0``F`$```(`
-M``!%``&48]D``$`1``#`J`$!P*@!`@'T`?0!@`=E<MP[L4RM)40`````````
-M`"$@(@@````````!>"(``'@```!V`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``P6KF5)&@]V.8\RT1_(E;\#N@-^*!J\(H">_,R@!$\\G];1%Q;`*_
-MY@8K1R\/Q6+IQF2R2&7_ZK69AFS\OQGZS8WL^2?N%)2S_R=.7\<%0/#C7-ZR
-MO8"O8&46M^236*JW:'TO`J9I=',+XF\.""YN>%^484P08@2`NA>MRVH:FV`I
-M```D1*HLR[FW-$$I&?@9U!1TG*4:/\'H@227U.V=@-(Y_K4I```<``!`!/2L
-MP@S>,A?F;]CJ9W_3,L=<%6LJ````'```0`7&S5<M?]0J8];CSJC12YV$22P0
-MO)(2MT8)*P$`F`$``)@!```"````10`!E&/:``!`$0``P*@!`<"H`0(!]`'T
-M`8`'97+<.[%,K25$```````````A("((`````````7@B``!X````=@$!``P#
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``,%JYE21H/=CF/,M$?R)6_`[H#?B
-M@:O"*`GOS,H`1//)_6T1<6P"O^8&*T<O#\5BZ<9DLDAE_^JUF89L_+\9^LV-
-M[/DG[A24L_\G3E_'!4#PXUS>LKV`KV!E%K?DDUBJMVA]+P*F:71S"^)O#@@N
-M;GA?E&%,$&($@+H7K<MJ&IM@*0``)$2J+,NYMS1!*1GX&=04=)RE&C_!Z($D
-ME]3MG8#2.?ZU*0``'```0`3TK,(,WC(7YF_8ZF=_TS+'7!5K*@```!P``$`%
-MQLU7+7_4*F/6X\ZHT4N=A$DL$+R2$K=&RVP'`)@!``"8`0```@```$4``91C
-MX@``0!$``,"H`0'`J`$"`?0!]`&`!V5RW#NQ3*TE1```````````(2`B"```
-M``````%X(@``>````'8!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#!
-M:N94D:#W8YCS+1'\B5OP.Z`WXH&KPB@)[\S*`$3SR?UM$7%L`K_F!BM'+P_%
-M8NG&9+)(9?_JM9F&;/R_&?K-C>SY)^X4E+/_)TY?QP5`\.-<WK*]@*]@91:W
-MY)-8JK=H?2\"IFET<POB;PX(+FYX7Y1A3!!B!("Z%ZW+:AJ;8"D``"1$JBS+
-MN;<T02D9^!G4%'2<I1H_P>B!))?4[9V`TCG^M2D``!P``$`$]*S"#-XR%^9O
-MV.IG?],RQUP5:RH````<``!`!<;-5RU_U"ICUN/.J-%+G81)+!"\DQ*W1EJ#
-M!0"8`0``F`$```(```!%``&48_@``$`1``#`J`$!P*@!`@'T`?0!@`=E(;LC
-M@P:H_AD``````````"$@(@@````````!>"(``'@```!W`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``EDNP\W9FS[:H:CQ*P93?"-!F:.9XC=@@0:ZS
-M+HDI"?Y>+HSNQW0EA7'7'];27`#OI!]V7WMP!$76=S.,)&?4P![W5#;@X&0;
-MHRQ\E_X]MN*H=S$&IVF5?]@+:M?G%);T2URVUIL0QV?AXFR##(PU"X*21JW\
-M"WX\1.>G]>=M/-XI```DA;4HG4R"L74#8UV=P8!_/GPF*EV`CGPK3C73Z,N@
-M<J,I```<``!`!#XCQY0VQY3'QG@>`5,4:TO41^=4````'```0`4UL4]#Y-#0
-MT+5OBQD62_[=&_)>&Y,2MT8$I0@`F`$``)@!```"````10`!E&/Z``!`$0``
-MP*@!`<"H`0(!]`'T`8`'92&[(X,&J/X9```````````A("((`````````7@B
-M``!X````=P$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``)9+L/-V9L^V
-MJ&H\2L&4WPC09FCF>(W8($&NLRZ)*0G^7BZ,[L=T)85QUQ_6TEP`[Z0?=E][
-M<`1%UG<SC"1GU,`>]U0VX.!D&Z,L?)?^/;;BJ'<Q!J=IE7_8"VK7YQ26]$M<
-MMM:;$,=GX>)L@PR,-0N"DD:M_`M^/$3GI_7G;3S>*0``)(6U*)U,@K%U`V-=
-MG<&`?SY\)BI=@(Y\*TXUT^C+H'*C*0``'```0`0^(\>4-L>4Q\9X'@%3%&M+
-MU$?G5````!P``$`%-;%/0^30T-"U;XL9%DO^W1OR7AN3$K=&EN8.`)@!``"8
-M`0```@```$4``91C^P``0!$``,"H`0'`J`$"`?0!]`&`!V4ANR.#!JC^&0``
-M````````(2`B"`````````%X(@``>````'<!`0`,`P``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"``"62[#S=F;/MJAJ/$K!E-\(T&9HYGB-V"!!KK,NB2D)_EXN
-MC.['="6%<=<?UM)<`.^D'W9?>W`$1=9W,XPD9]3`'O=4-N#@9!NC+'R7_CVV
-MXJAW,0:G:95_V`MJU^<4EO1+7+;6FQ#'9^'B;(,,C#4+@I)&K?P+?CQ$YZ?U
-MYVT\WBD``"2%M2B=3(*Q=0-C79W!@'\^?"8J78".?"M.-=/HRZ!RHRD``!P`
-M`$`$/B/'E#;'E,?&>!X!4Q1K2]1'YU0````<``!`!36Q3T/DT-#0M6^+&19+
-M_MT;\EX;E!*W1K+R#`"8`0``F`$```(```!%``&48_X``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E^:"D$FFP<O(``````````"$@(@@````````!>"(``'@```!X
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``&:;EH!0N')FU;T:/ONMH
-M))E2V7P%W9]+H5_(J316(A#+1WMR)HLT0QWMQK<Y(B\SNXT\%._M6`SM]/HX
-MYFX&S85AR!S*WD33G:Q5DH&=V=],P&4B5C89ZLRH9K?U+()EDPL<GWON)LN!
-M?5%V8W3LN'L(7,%A&V+AI]@QJ4T8=LPI```D6O$;'GL3^<\]8JDJ*FICJ9>F
-M-YZ1Q,$!$4J`_M\V(L$I```<``!`!)<4-V50S#.IV*!FP7V&3I*P0,;2````
-M'```0`64C<YIG'P;;SN`>[%^/+_06\IV5942MT;2W```F`$``)@!```"````
-M10`!E&/_``!`$0``P*@!`<"H`0(!]`'T`8`'9?F@I!)IL'+R```````````A
-M("((`````````7@B``!X````>`$!``P#```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``!FFY:`4+AR9M6]&C[[K:"294ME\!=V?2Z%?R*DT5B(0RT=[<B:+-$,=
-M[<:W.2(O,[N-/!3O[5@,[?3Z..9N!LV%8<@<RMY$TYVL59*!G=G?3,!E(E8V
-M&>K,J&:W]2R"99,+')][[B;+@7U1=F-T[+A["%S!81MBX:?8,:E-&';,*0``
-M)%KQ&QY[$_G//6*I*BIJ8ZF7IC>>D<3!`1%*@/[?-B+!*0``'```0`27%#=E
-M4,PSJ=B@9L%]ADZ2L$#&T@```!P``$`%E(W.:9Q\&V\[@'NQ?CR_T%O*=E65
-M$K=&<Q\'`)@!``"8`0```@```$4``91D````0!$``,"H`0'`J`$"`?0!]`&`
-M!V7YH*02:;!R\@``````````(2`B"`````````%X(@``>````'@!`0`,`P``
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"```9IN6@%"X<F;5O1H^^ZV@DF5+9?`7=
-MGTNA7\BI-%8B$,M'>W(FBS1#'>W&MSDB+S.[C3P4[^U8#.WT^CCF;@;-A6'(
-M',K>1-.=K%62@9W9WTS`92)6-AGJS*AFM_4L@F63"QR?>^XFRX%]479C=.RX
-M>PA<P6$;8N&GV#&I31AVS"D``"1:\1L>>Q/YSSUBJ2HJ:F.IEZ8WGI'$P0$1
-M2H#^WS8BP2D``!P``$`$EQ0W95#,,ZG8H&;!?89.DK!`QM(````<``!`!92-
-MSFF<?!MO.X![L7X\O]!;RG95EA*W1BXK!0"8`0``F`$```(```!%``&49`H`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E8"OUP1F[/_@``````````"$@(@@`````
-M```!>"(``'@```![`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``L8OJ
-MRL)M7):8:*OB4V(B&IYDE%#QQ;)VKR"O1I:C;!H\T1^KV6*IQ&0N*%2W]2C1
-MIN4'#+M4%S-&'N!4*O=G1T`QNS^HUG"#EI[3GKRRRY#E-6Q#HN0I54?(W^1A
-M05U[(3HJ][2\GM6OBGG(Z!]A9)((&!Z?AP!\M&&$XD?`X\HI```DI,:>$U80
-MX/$:F%RTDR.Z59XE)"`;?LZ[)5]45AA0J'(I```<``!`!*UY8@M-WS>GT283
-M$WR=#"9`TZWE````'```0`47O/N2'T+$#7^>%Q("5@K\!Q^66)82MT;25@@`
-MF`$``)@!```"````10`!E&0.``!`$0``P*@!`<"H`0(!]`'T`8`'96`K]<$9
-MNS_X```````````A("((`````````7@B``!X````>P$!``P#```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``+&+ZLK";5R6F&BKXE-B(AJ>9)10\<6R=J\@KT:6
-MHVP:/-$?J]EBJ<1D+BA4M_4HT:;E!PR[5!<S1A[@5"KW9T=`,;L_J-9P@Y:>
-MTYZ\LLN0Y35L0Z+D*55'R-_D84%=>R$Z*O>TO)[5KXIYR.@?8622"!@>GX<`
-M?+1AA.)'P./**0``)*3&GA-6$.#Q&IA<M),CNE6>)20@&W[.NR5?5%884*AR
-M*0``'```0`2M>6(+3=\WI]$F$Q-\G0PF0-.MY0```!P``$`%%[S[DA]"Q`U_
-MGA<2`E8*_`<?EEB6$K=&89@.`)@!``"8`0```@```$4``91D'P``0!$``,"H
-M`0'`J`$"`?0!]`&`!V5@*_7!&;L_^```````````(2`B"`````````%X(@``
-M>````'L!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"``"QB^K*PFU<EIAH
-MJ^)38B(:GF244/'%LG:O(*]&EJ-L&CS1'ZO98JG$9"XH5+?U*-&FY0<,NU07
-M,T8>X%0J]V='0#&[/ZC6<(.6GM.>O+++D.4U;$.BY"E51\C?Y&%!77LA.BKW
-MM+R>U:^*><CH'V%DD@@8'I^'`'RT883B1\#CRBD``"2DQIX35A#@\1J87+23
-M([I5GB4D(!M^SKLE7U16&%"H<BD``!P``$`$K7EB"TW?-Z?1)A,3?)T,)D#3
-MK>4````<``!`!1>\^Y(?0L0-?YX7$@)6"OP''Y98EQ*W1I*A#`"8`0``F`$`
-M``(```!%``&49"```$`1``#`J`$!P*@!`@'T`?0!@`=EAU,J.O#CV=4`````
-M`````"$@(@@````````!>"(``'@```!\`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``2L"EM:%/5>4SR6]_Z:-@]ZM8JVMUH6M(GH!<&Z.QQFQ3F@-^
-MDB.8SD\N.F842UNIWXW2N65+D"!1I$-X_^=>"IT\$\"H0Q/5!ED8WS$_"M3O
-M_>JHX&SUHC3#LASUZ1NWC*F1.=7H-@8(8]/R5[.>0*0+*^F_EU,D&#`.;/:*
-M.U(I```D.8`:Z2F1TJKZ?T,;O*(>1%_Z[I_SHT:YL?@I&4]6M"0I```<``!`
-M!%@3O@3B=-Z%^T0?DLUHQ+$C`PT?````'```0`5!6-+J13.VH5\3(3S\AKAW
-M4[,H+Y@2MT:KC@``F`$``)@!```"````10`!E&0A``!`$0``P*@!`<"H`0(!
-M]`'T`8`'98=3*CKPX]G5```````````A("((`````````7@B``!X````?`$!
-M``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``$K`I;6A3U7E,\EO?^FC8/>K
-M6*MK=:%K2)Z`7!NCL<9L4YH#?I(CF,Y/+CIF%$M;J=^-TKEE2Y`@4:1#>/_G
-M7@J=/!/`J$,3U099&-\Q/PK4[_WJJ.!L]:(TP[(<]>D;MXRID3G5Z#8&"&/3
-M\E>SGD"D"ROIOY=3)!@P#FSVBCM2*0``)#F`&NDID=*J^G]#&[RB'D1?^NZ?
-M\Z-&N;'X*1E/5K0D*0``'```0`18$[X$XG3>A?M$'Y+-:,2Q(P,-'P```!P`
-M`$`%05C2ZD4SMJ%?$R$\_(:X=U.S*"^8$K=&(]`&`)@!``"8`0```@```$4`
-M`91D(@``0!$``,"H`0'`J`$"`?0!]`&`!V6'4RHZ\./9U0``````````(2`B
-M"`````````%X(@``>````'P!`0`,`P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M``!*P*6UH4]5Y3/);W_IHV#WJUBK:W6A:TB>@%P;H['&;%.:`WZ2(YC.3RXZ
-M9A1+6ZG?C=*Y94N0(%&D0WC_YUX*G3P3P*A#$]4&61C?,3\*U._]ZJC@;/6B
-M-,.R'/7I&[>,J9$YU>@V!@ACT_)7LYY`I`LKZ;^74R08,`YL]HH[4BD``"0Y
-M@!KI*9'2JOI_0QN\HAY$7_KNG_.C1KFQ^"D93U:T)"D``!P``$`$6!.^!.)T
-MWH7[1!^2S6C$L2,##1\````<``!`!4%8TNI%,[:A7Q,A//R&N'=3LR@OF1*W
-M1@/9!`"8`0``F`$```(```!%``&49",``$`1``#`J`$!P*@!`@'T`?0!@`=E
-MU:A&8`.*8W4``````````"$@(@@````````!>"(``'@```!]`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``.2@:JI.63ET`AJ@%58DF6H``J"L-%1%(
-MNWDI*?__(\]2*)JCC:/\[7#A]4[O,<ASZGH^K#-H0.4/9?BPSP<V>VDLHNTO
-M%<)4^ZZ38Z8V*$2![C]Q11=J(>%=VVA%.WOR0O:\>`S=_LS?-W"O5G4,N`,B
-MP-Q,9]6C=\1@;KGVE3(I```DZ`6V-'R1$V^B%`.HM'$[1*G:07`Y-'L"/7U+
-MEJ=O,<,I```<``!`!-#`M>Q.WO57)D5;</V/]CE/_S<-````'```0`4Z&HGT
-MI[<^;K3[';UCE*9_=[76UYD2MT:E"`@`F`$``)@!```"````10`!E&0D``!`
-M$0``P*@!`<"H`0(!]`'T`8`'9=6H1F`#BF-U```````````A("((````````
-M`7@B``!X````?0$!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``#DH&JJ3
-MEDY=`(:H!56))EJ``*@K#1412+MY*2G__R//4BB:HXVC_.UPX?5.[S'(<^IZ
-M/JPS:$#E#V7XL,\'-GMI+*+M+Q7"5/NNDV.F-BA$@>X_<447:B'A7=MH13M[
-M\D+VO'@,W?[,WS=PKU9U#+@#(L#<3&?5HW?$8&ZY]I4R*0``).@%MC1\D1-O
-MHA0#J+1Q.T2IVD%P.31[`CU]2Y:G;S'#*0``'```0`30P+7L3M[U5R9%6W#]
-MC_8Y3_\W#0```!P``$`%.AJ)]*>W/FZT^QV]8Y2F?W>UUM>9$K=&34H.`)@!
-M``"8`0```@```$4``91D)0``0!$``,"H`0'`J`$"`?0!]`&`!V75J$9@`XIC
-M=0``````````(2`B"`````````%X(@``>````'T!`0`,`P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"```Y*!JJDY9.70"&J`55B29:@`"H*PT5$4B[>2DI__\C
-MSU(HFJ.-H_SM<.'U3N\QR'/J>CZL,VA`Y0]E^+#/!S9[:2RB[2\5PE3[KI-C
-MIC8H1('N/W%%%VHAX5W;:$4[>_)"]KQX#-W^S-\W<*]6=0RX`R+`W$QGU:-W
-MQ&!NN?:5,BD``"3H!;8T?)$3;Z(4`ZBT<3M$J=I!<#DT>P(]?4N6IV\QPRD`
-M`!P``$`$T,"U[$[>]5<F15MP_8_V.4__-PT````<``!`!3H:B?2GMSYNM/L=
-MO6.4IG]WM=;7FA*W1H-;#`"8`0``F`$```(```!%``&49"L``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E,NRL[98J,/T``````````"$@(@@````````!>"(``'@`
-M`/__`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``M*^#!%0A^/T+'J=]
-MU+D:I!>9+:[JU)P1<3_](+(67E/>\QE&)6HPAPTQ(F(]APOZSU<RM1X4<^7P
-M#T--=`U$Z5IXX>#\A'G4IZ4U-$)3Y&1@'N?6>T(N<9^[+C$A9W1"4S34+K$!
-M$K6?'O=O?$SZ3`R/%_>X(@JZS1E!@(6ZPBDI```D`*.,CDFHCC8F%<==S,A$
-MVZ07.7NL]E27-58!BZ@H</LI```<``!`!'XJ,;%K&.,4.42ABP:,/L"/C-Z,
-M````'```0`5VA5G##FOH'J^DN[OF(A$`(W"%-9L2MT9>0```F`$``)@!```"
-M````10`!E&0L``!`$0``P*@!`<"H`0(!]`'T`8`'93+LK.V6*C#]````````
-M```A("((`````````7@B``!X``#__P$!``P#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``+2O@P14(?C]"QZG?=2Y&J07F2VNZM2<$7$__2"R%EY3WO,91B5J
-M,(<-,2)B/8<+^L]7,K4>%'/E\`]#370-1.E:>.'@_(1YU*>E-31"4^1D8![G
-MUGM"+G&?NRXQ(6=T0E,TU"ZQ`1*UGQ[W;WQ,^DP,CQ?WN"(*NLT908"%NL(I
-M*0``)`"CC(Y)J(XV)A7'7<S(1-ND%SE[K/94ES56`8NH*'#[*0``'```0`1^
-M*C&Q:QCC%#E$H8L&C#[`CXS>C````!P``$`%=H59PPYKZ!ZOI+N[YB(1`"-P
-MA36;$K=&_H$&`)@!``"8`0```@```$4``91D-```0!$``,"H`0'`J`$"`?0!
-M]`&`!V4R[*SMEBHP_0``````````(2`B"`````````%X(@``>```__\!`0`,
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``"TKX,$5"'X_0L>IWW4N1JD%YDM
-MKNK4G!%Q/_T@LA9>4][S&48E:C"'#3$B8CV'"_K/5S*U'A1SY?`/0TUT#43I
-M6GCAX/R$>=2GI34T0E/D9&`>Y]9[0BYQG[LN,2%G=$)3--0NL0$2M9\>]V]\
-M3/I,#(\7][@B"KK-&4&`A;K"*2D``"0`HXR.2:B.-B85QUW,R$3;I!<Y>ZSV
-M5)<U5@&+J"AP^RD``!P``$`$?BHQL6L8XQ0Y1*&+!HP^P(^,WHP````<``!`
-M!7:%6<,.:^@>KZ2[N^8B$0`C<(4UG!*W1MJ-!`"8`0``F`$```(```!%``&4
-M9'$``$`1``#`J`$!P*@!`@'T`?0!@`=E+B+0&]%]H5```````````"$@(@@`
-M```````!>"(``'@``(```0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M9^J^2>C2^3X=&F^YU3)[>B0@C_!\#"V7_)4&+/C.`#9FR"@0P?/SAM0DS^F=
-M9[>+9&J%&ICTO-JFV+R.M26@D\:@6_'G=E`=18P>A1/8W["'(^D\WA2=S:R#
-MD4\'._*-.!7(^,?/GT#FZ])T<QDQ-IZ^Q!1(LCB9</Y'1T"%GKLI```DU/WL
-M\<IE/]K?AX)`DT*@GWP^GRPA`G:@(\4X4^7.&T,I```<``!`!$4*!?$]E1\-
-MDRCC#DD2J%*XR$4P````'```0`7/_%U9_8@<\3)#/:5*-?P9!)1ZSIP2MT9_
-MN@<`F`$``)@!```"````10`!E&1V``!`$0``P*@!`<"H`0(!]`'T`8`'92XB
-MT!O1?:%0```````````A("((`````````7@B``!X``"```$!``P#```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``&?JODGHTOD^'1ION=4R>WHD((_P?`PME_R5
-M!BSXS@`V9L@H$,'S\X;4),_IG6>WBV1JA1J8]+S:IMB\CK4EH)/&H%OQYW90
-M'46,'H43V-^PAR/I/-X4G<VL@Y%/!SORC3@5R/C'SY]`YNO2=',9,3:>OL04
-M2+(XF7#^1T=`A9Z[*0``)-3][/'*93_:WX>"0)-"H)]\/I\L(0)VH"/%.%/E
-MSAM#*0``'```0`1%"@7Q/94?#9,HXPY)$JA2N,A%,````!P``$`%S_Q=6?V(
-M'/$R0SVE2C7\&024>LZ<$K=&>?P-`)@!``"8`0```@```$4``91D?P``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V4N(M`;T7VA4```````````(2`B"`````````%X
-M(@``>```@``!`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"``!GZKY)Z-+Y
-M/AT:;[G5,GMZ)""/\'P,+9?\E08L^,X`-F;(*!#!\_.&U"3/Z9UGMXMD:H4:
-MF/2\VJ;8O(ZU):"3QJ!;\>=V4!U%C!Z%$]C?L(<CZ3S>%)W-K(.13P<[\HTX
-M%<CXQ\^?0.;KTG1S&3$VGK[$%$BR.)EP_D='0(6>NRD``"34_>SQRF4_VM^'
-M@D"30J"??#Z?+"$"=J`CQ3A3Y<X;0RD``!P``$`$10H%\3V5'PV3*.,.21*H
-M4KC(13`````<``!`!<_\75G]B!SQ,D,]I4HU_!D$E'K.G1*W1O`'#`"8`0``
-MF`$```(```!%``&49(@``$`1``#`J`$!P*@!`@'T`?0!@`=EU!;\,@XH!X``
-M`````````"$@(@@````````!>"(``'@```!T``$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``;**S2:1PPAVT*;<@0W`0O_'B6.B#-X"7Q24+Q2]!?#&3
-MA-(B8&(G0.?D#-6"6,Y7;@@*G@1=E-]0S[S,\+U0[2(CE(UY'N5N:6P<?+#/
-M@YV+%.4ZCO>&MD]4FCDWG!S.Y$UICWMRMH(F7(T+;<G'&T\'O]+4J_;H#F<4
-MD;'Z6F$I```DP>B_0`QTE2$HTEZ#U_=%>NN\]IJ:#$M,[."QIH=B(T,I```<
-M``!`!/YLD^GOP,2UAX,=M@;XXX%[1G[+````'```0`4KD3E0C9@T?4=\*=W_
-M_7"U9DL.0YT2MT:5-`\`F`$``)@!```"````10`!E&2Q``!`$0``P*@!`<"H
-M`0(!]`'T`8`'9=06_#(.*`>````````````A("((`````````7@B``!X````
-M=``!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``&RBLTFD<,(=M"FW($-P
-M$+_QXECH@S>`E\4E"\4O07PQDX32(F!B)T#GY`S5@EC.5VX("IX$793?4,^\
-MS/"]4.TB(Y2->1[E;FEL''RPSX.=BQ3E.H[WAK9/5)HY-YP<SN1-:8][<K:"
-M)ER-"VW)QQM/![_2U*OVZ`YG%)&Q^EIA*0``),'HOT`,=)4A*-)>@]?W17KK
-MO/::F@Q+3.S@L::'8B-#*0``'```0`3^;)/I[\#$M8>#';8&^..!>T9^RP``
-M`!P``$`%*Y$Y4(V8-'U'?"G=__UPM69+#D.>$K=&Q3,&`)@!``"8`0```@``
-M`$4``91EFP``0!$``,"H`0'`J`$"`?0!]`&`!V74%OPR#B@'@```````````
-M(2`B"`````````%X(@``>````'0``0`,`P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"``!LHK-)I'#"';0IMR!#<!"_\>)8Z(,W@)?%)0O%+T%\,9.$TB)@8B=`
-MY^0,U8)8SE=N"`J>!%V4WU#/O,SPO5#M(B.4C7D>Y6YI;!Q\L,^#G8L4Y3J.
-M]X:V3U2:.3><',[D36F/>W*V@B9<C0MMR<<;3P>_TM2K]N@.9Q21L?I:82D`
-M`"3!Z+]`#'25(2C27H/7]T5ZZ[SVFIH,2TSLX+&FAV(C0RD``!P``$`$_FR3
-MZ>_`Q+6'@QVV!OCC@7M&?LL````<``!`!2N1.5"-F#1]1WPIW?_]<+5F2PY#
-MGQ*W1E!"!`"8`0``F`$```(```!%``&49N8``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E>?]B!O<.OA<``````````"$@(@@````````!>"(``'@```!T`@$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``]!>83ZV\'AS3BR50U3,R*UQ\T/25
-M9F$'-P7[F.N8C!C!B,NYQ,[=@FO1'IK=B"'Y;?KYR3XXTFQTYK7EMDT,)M4/
-M"Q\E*XAHJAU:XK)8<4<;DWNH:&L.(M3O,!A,WPO.I[C3,2_:FT$T!1$'<*B"
-M^RNY"^W2[Z<].@T'9HNNZ>DI```D:Q-H7%Y,)M;+CEUP+)H$ADQPNMLU"W.[
-M6ZD?+*SEZ`,I```<``!`!/\)3FH7WAQL21*+Y1Q(HGH,+I;O````'```0`5U
-M2GB__KA\<#8<[1XJ\W<^)D6$RY\2MT9';`<`F`$``)@!```"````10`!E&;R
-M``!`$0``P*@!`<"H`0(!]`'T`8`'97G_8@;W#KX7```````````A("((````
-M`````7@B``!X````=`(!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``/07
-MF$^MO!X<TXLE4-4S,BM<?-#TE69A!S<%^YCKF(P8P8C+N<3.W8)KT1Z:W8@A
-M^6WZ^<D^.-)L=.:UY;9-#";5#PL?)2N(:*H=6N*R6'%'&Y-[J&AK#B+4[S`8
-M3-\+SJ>XTS$OVIM!-`41!W"H@OLKN0OMTN^G/3H-!V:+KNGI*0``)&L3:%Q>
-M3";6RXY=<"R:!(9,<+K;-0MSNUNI'RRLY>@#*0``'```0`3_"4YJ%]X<;$D2
-MB^4<2*)Z#"Z6[P```!P``$`%=4IXO_ZX?'`V'.T>*O-W/B9%A,N?$K=&UJT-
-M`)@!``"8`0```@```$4``91F^@``0!$``,"H`0'`J`$"`?0!]`&`!V5Y_V(&
-M]PZ^%P``````````(2`B"`````````%X(@``>````'0"`0`,`P``#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"``#T%YA/K;P>'-.+)5#5,S(K7'S0])5F80<W!?N8
-MZYB,&,&(R[G$SMV":]$>FMV((?EM^OG)/CC2;'3FM>6V30PFU0\+'R4KB&BJ
-M'5KBLEAQ1QN3>ZAH:PXBU.\P&$S?"\ZGN-,Q+]J;030%$0=PJ(+[*[D+[=+O
-MISTZ#0=FBZ[IZ2D``"1K$VA<7DPFULN.77`LF@2&3'"ZVS4+<[M;J1\LK.7H
-M`RD``!P``$`$_PE.:A?>'&Q)$HOE'$BB>@PNEN\````<``!`!75*>+_^N'QP
-M-ASM'BKS=SXF183+H!*W1E*Y"P"8`0``F`$```(```!%``&49TT``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=E4567_<H:.-(``````````"$@(@@````````!>"(`
-M`'@```!T`@$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``@+K%%XGPUV)&
-M#7_3O58JVSW!&<2WUP<[*7Z\4]YA*^.,)V#Q,8%<I'4'*S1[5E6:E??G2*3&
-MG2\EJ6CA9H7V_N5ZN20W#@,.0?:=WMYCB?7`_ZY($$,(,E3T`W\&EN8\DN"9
-M!%<"I7DJ7\\@B31C:^[.2\U7R3V&8CJM$L\BB,`I```D,'QN7.WMA47_$`T,
-M1`8#N$IX&#RI70[L=X7?2`2U;8<I```<``!`!`I88B@;H/ZW*@E>`2^9J]IE
-M)"-+````'```0`5U9@>8K<HK46Q3]Z!R<GUN(^F49*`2MT9&Y@X`F`$``)@!
-M```"````10`!E&=.``!`$0``P*@!`<"H`0(!]`'T`8`'95%5E_W*&CC2````
-M```````A("((`````````7@B``!X````=`(!``P#```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``("ZQ1>)\-=B1@U_T[U6*ML]P1G$M]<'.RE^O%/>82OCC"=@
-M\3&!7*1U!RLT>U95FI7WYTBDQITO):EHX6:%]O[E>KDD-PX##D'VG=[>8XGU
-MP/^N2!!#"#)4]`-_!I;F/)+@F017`J5Y*E_/((DT8VONSDO-5\D]AF(ZK1+/
-M(HC`*0``)#!\;ESM[85%_Q`-#$0&`[A*>!@\J5T.['>%WT@$M6V'*0``'```
-M0`0*6&(H&Z#^MRH)7@$OF:O:920C2P```!P``$`%=68'F*W**U%L4_>@<G)]
-M;B/IE&2A$K=&Q>4%`)@!``"8`0```@```$4``91G3P``0!$``,"H`0'`J`$"
-M`?0!]`&`!V5159?]RAHXT@``````````(2`B"`````````%X(@``>````'0"
-M`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"``"`NL47B?#78D8-?].]5BK;
-M/<$9Q+?7!SLI?KQ3WF$KXXPG8/$Q@5RD=0<K-'M659J5]^=(I,:=+R6I:.%F
-MA?;^Y7JY)#<.`PY!]IW>WF.)]<#_KD@00P@R5/0#?P:6YCR2X)D$5P*E>2I?
-MSR")-&-K[LY+S5?)/89B.JT2SR*(P"D``"0P?&Y<[>V%1?\0#0Q$!@.X2G@8
-M/*E=#NQWA=](!+5MARD``!P``$`$"EAB*!N@_K<J"5X!+YFKVF4D(TL````<
-M``!`!75F!YBMRBM1;%/WH')R?6XCZ91DHA*W1C3R`P"8`0``F`$```(```!%
-M``&49ZT``$`1``#`J`$!P*@!`@'T`?0!@`=E-8R2PT>#KBL``````````"$@
-M(@@````````!>"(``'@```!T`P$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``TBJ;2:@L(:"])^D3>]D8]ZQY1A":B,]*W0[<+P\-7!VV5`>R54(;>$BZ
-MRUKXV#=AWEK92?`MDRU1"[*EFO4;;!)J!U_%^KUB_?,[9>S`VXSTK$>;\197
-M2I@8AV3I=0P`EF""$&SS-_=@6;F?;)HB+-B7MFOC.VE*?XSSG27*0EXI```D
-MHU\TS3R2AZ'42X90TF%)67KR#LN$QE3`\>B?Q&!.LU\I```<``!`!,FYF[>;
-MJ+FQQMP.$^US+[Q:00R!````'```0`7D9Y+GBWAIH5!OP\7APV?<G%OG):(2
-MMT8#'P<`F`$``)@!```"````10`!E&>O``!`$0``P*@!`<"H`0(!]`'T`8`'
-M936,DL-'@ZXK```````````A("((`````````7@B``!X````=`,!``P#```,
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``-(JFTFH+"&@O2?I$WO9&/>L>480FHC/
-M2MT.W"\/#5P=ME0'LE5"&WA(NLM:^-@W8=Y:V4GP+9,M40NRI9KU&VP2:@=?
-MQ?J]8OWS.V7LP-N,]*Q'F_$65TJ8&(=DZ74,`)9@@A!L\S?W8%FYGVR:(BS8
-ME[9KXSMI2G^,\YTERD)>*0``)*-?-,T\DH>AU$N&4-)A25EZ\@[+A,94P/'H
-MG\1@3K-?*0``'```0`3)N9NWFZBYL<;<#A/M<R^\6D$,@0```!P``$`%Y&>2
-MYXMX::%0;\/%X<-GW)Q;YR6B$K=&IU\-`)@!``"8`0```@```$4``91GL```
-M0!$``,"H`0'`J`$"`?0!]`&`!V4UC)+#1X.N*P``````````(2`B"```````
-M``%X(@``>````'0#`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#2*IM)
-MJ"PAH+TGZ1-[V1CWK'E&$)J(STK=#MPO#PU<';94![)50AMX2+K+6OC8-V'>
-M6ME)\"V3+5$+LJ6:]1ML$FH'7\7ZO6+]\SME[,#;C/2L1YOQ%E=*F!B'9.EU
-M#`"68((0;/,W]V!9N9]LFB(LV)>V:^,[:4I_C/.=)<I"7BD``"2C7S3-/)*'
-MH=1+AE#284E9>O(.RX3&5,#QZ)_$8$ZS7RD``!P``$`$R;F;MYNHN;'&W`X3
-M[7,OO%I!#($````<``!`!>1GDN>+>&FA4&_#Q>'#9]R<6^<EHQ*W1G%L"P"8
-M`0``F`$```(```!%``&4:`T``$`1``#`J`$!P*@!`@'T`?0!@`=EUWCB?\CN
-MI"@``````````"$@(@@````````!>"(``'@```!T!`$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``29-:O[K9&EZG4/5SR=!UXQT4&7#ZG1%^0PDD\U8L
-M677J%V@#@R3L]$T9?]URLX[A<H>LCU5<SUO<3JTI_1L36&;=8MV=I3RZ@(IO
-MQG[&HWF@-UNWH2:W22>#`%.9/?]\P;I#:WV4A-H#2T?=R<9U/YY632)C3P/W
-M8=M#&`VN.API```D0IC![8=*8P!E7]3V#^X7UR/:$I,RXCTH,;L?@B(^H<`I
-M```<``!`!+)"AW*"`R_V!X\&DSYR&7(LG$\H````'```0`7@HHK8=F!8PC@X
-MG^,,WEPN9[.]?*,2MT80F`X`F`$``)@!```"````10`!E&@2``!`$0``P*@!
-M`<"H`0(!]`'T`8`'9==XXG_([J0H```````````A("((`````````7@B``!X
-M````=`0!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``$F36K^ZV1I>IU#U
-M<\G0=>,=%!EP^IT1?D,))/-6+%EUZA=H`X,D[/1-&7_=<K..X7*'K(]57,];
-MW$ZM*?T;$UAFW6+=G:4\NH"*;\9^QJ-YH#=;MZ$FMTDG@P!3F3W_?,&Z0VM]
-ME(3:`TM'W<G&=3^>5DTB8T\#]V';0Q@-KCH<*0``)$*8P>V'2F,`95_4]@_N
-M%]<CVA*3,N(]*#&['X(B/J'`*0``'```0`2R0H=R@@,O]@>/!I,^<AER+)Q/
-M*````!P``$`%X***V'9@6,(X.)_C#-Y<+F>SO7RD$K=&W9<%`)@!``"8`0``
-M`@```$4``91H&@``0!$``,"H`0'`J`$"`?0!]`&`!V77>.)_R.ZD*```````
-M````(2`B"`````````%X(@``>````'0$`0`,`P``#`$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``!)DUJ_NMD:7J=0]7/)T'7C'109</J=$7Y#"23S5BQ9=>H7:`.#
-M).ST31E_W7*SCN%RAZR/55S/6]Q.K2G]&Q-89MUBW9VE/+J`BF_&?L:C>:`W
-M6[>A)K=))X,`4YD]_WS!ND-K?92$V@-+1]W)QG4_GE9-(F-/`_=AVT,8#:XZ
-M'"D``"1"F,'MATIC`&5?U/8/[A?7(]H2DS+B/2@QNQ^"(CZAP"D``!P``$`$
-MLD*'<H(#+_8'CP:3/G(9<BR<3R@````<``!`!>"BBMAV8%C".#B?XPS>7"YG
-ML[U\I1*W1L"B`P"8`0``F`$```(```!%``&4:!\``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E0K^WN.=KWYH``````````"$@(@@````````!>"(``'@```!T!P$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``V4FR4/N#H^9(Y=VTY\5.=<.E
-M"DE5_<B$WH:+,+.A0+^V+6R.:[P:4H(E@1G81R</>;Y8E=0,#Q1#(57,9:TR
-M6(+%U+]\^AW+1C"K>C=GNN+TZCFRPHCHM7N"<@MVPC(M;X?GX'QTUW3664<@
-M*J6>.OZ@U&7JRHQ:IG<O:3__]&,I```DX(U%PB:V\3B$IF017X'1'OW[;,,0
-M)THC6S,`^2RF<:@I```<``!`!%_ML^:"2_BEWTTKP=.^<&0_"#UZ````'```
-M0`7HQRA<)PZ>UJ^@]O5G0H"X&H#<(:42MT:KSP8`F`$``)@!```"````10`!
-ME&@@``!`$0``P*@!`<"H`0(!]`'T`8`'94*_M[CG:]^:```````````A("((
-M`````````7@B``!X````=`<!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M`-E)LE#[@Z/F2.7=M.?%3G7#I0I)5?W(A-Z&BS"SH4"_MBULCFN\&E*")8$9
-MV$<G#WF^6)74#`\40R%5S&6M,EB"Q=2_?/H=RT8PJWHW9[KB].HYLL*(Z+5[
-M@G(+=L(R+6^'Y^!\=-=TUEE'("JEGCK^H-1EZLJ,6J9W+VD___1C*0``)."-
-M1<(FMO$XA*9D$5^!T1[]^VS#$"=*(ULS`/DLIG&H*0``'```0`1?[;/F@DOX
-MI=]-*\'3OG!D/P@]>@```!P``$`%Z,<H7"<.GM:OH/;U9T*`N!J`W"&E$K=&
-M8A$-`)@!``"8`0```@```$4``91H(@``0!$``,"H`0'`J`$"`?0!]`&`!V5"
-MO[>XYVO?F@``````````(2`B"`````````%X(@``>````'0'`0`,`P``#`$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"``#92;)0^X.CYDCEW;3GQ4YUPZ4*257]R(3>
-MAHLPLZ%`O[8M;(YKO!I2@B6!&=A')P]YOEB5U`P/%$,A5<QEK3)8@L74OWSZ
-M'<M&,*MZ-V>ZXO3J.;+"B.BU>X)R"W;",BUOA^?@?'37=-991R`JI9XZ_J#4
-M9>K*C%JF=R]I/__T8RD``"3@C47")K;Q.(2F9!%?@=$>_?MLPQ`G2B-;,P#Y
-M+*9QJ"D``!P``$`$7^VSYH)+^*7?32O!T[YP9#\(/7H````<``!`!>C'*%PG
-M#I[6KZ#V]6="@+@:@-PAIA*W1H\>"P"8`0``F`$```(```!%``&4:"P``$`1
-M``#`J`$!P*@!`@'T`?0!@`=E3&UB<`W<ZI$``````````"$@(@@````````!
-M>"(``'@```!T"`$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``--#)HZ,=
-MM3.BUF75Q!CE'V^'3^^1"VS6C,`OCNPS7DL)2+5KVX,DF66NA;4,)O@@.*FH
-M:&XIN?6]D$R0F]J23G#0$I@Z*PG#1C`9U0AWGH8QB&Z(L3Q6R>^).LY):)I=
-MV7OQAV<!0\=8+=R-[9]GU4P`MEXA=R*'75%=MH6C9T\I```DW8=AK`=CZLAJ
-MU<%6!H)`C;J.9DM,Q`TK:AD,W!F2PFXI```<``!`!$#(H9`RVUXJ%E&(@JQ[
-M1%W.8?A"````'```0`6.0O8I5C'IU104*35ZACI.10MM@J82MT;:20X`F`$`
-M`)@!```"````10`!E&@R``!`$0``P*@!`<"H`0(!]`'T`8`'94QM8G`-W.J1
-M```````````A("((`````````7@B``!X````=`@!``P#```,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``#30R:.C';4SHM9EU<08Y1]OAT_OD0MLUHS`+X[L,UY+
-M"4BU:]N#))EEKH6U#";X(#BIJ&AN*;GUO9!,D)O:DDYPT!*8.BL)PT8P&=4(
-M=YZ&,8ANB+$\5LGOB3K.26B:7=E[\8=G`4/'6"W<C>V?9]5,`+9>(7<BAUU1
-M7;:%HV=/*0``)-V'8:P'8^K(:M7!5@:"0(VZCF9+3,0-*VH9#-P9DL)N*0``
-M'```0`1`R*&0,MM>*A91B(*L>T1=SF'X0@```!P``$`%CD+V*58QZ=44%"DU
-M>H8Z3D4+;8*G$K=&+TD%`)@!``"8`0```@```$4``91H.P``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V5,;6)P#=SJD0``````````(2`B"`````````%X(@``>```
-M`'0(`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"```TT,FCHQVU,Z+69=7$
-M&.4?;X=/[Y$+;-:,P"^.[#->2PE(M6O;@R299:Z%M0PF^"`XJ:AH;BFY];V0
-M3)";VI).<-`2F#HK"<-&,!G5"'>>AC&(;HBQ/%;)[XDZSDEHFEW9>_&'9P%#
-MQU@MW(WMGV?53`"V7B%W(H==45VVA:-G3RD``"3=AV&L!V/JR&K5P58&@D"-
-MNHYF2TS$#2MJ&0S<&9+";BD``!P``$`$0,BAD#+;7BH648B"K'M$7<YA^$(`
-M```<``!`!8Y"]BE6,>G5%!0I-7J&.DY%"VV"J!*W1HI5`P"8`0``F`$```(`
-M``!%``&4:#T``$`1``#`J`$!P*@!`@'T`?0!@`=E+:GTMV*?#HL`````````
-M`"$@(@@````````!>"(``'@```!T"0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``H$Q5[Z@A!4/3J/?WR!9KQ>.14Y+RFFB5_I_CV3\P#V7FIOD\QTU(
-MV(("#!:+;XWJ[LW</]5D(\N%$T%:Q_B8IW!-?$C'F5"U.OIK85C=3%$;V.9L
-MVCWH1#S^XE5\A]*W/O2MB)?1-BFC'FGLWXT4;ZPEI+6HS'@,=:`.^$_6T1XI
-M```DI8?ACZ]Z2#]:/?%A$@PO2O9JZ3SPZ#56-T6K>C\!)9`I```<``!`!&$;
-M.1P"%?_!$L#0CERX+!$X?-ZU````'```0`7NE:"]M#7,Y,?0]Y57M<Y+(V8R
-M`J@2MT:?@08`F`$``)@!```"````10`!E&@_``!`$0``P*@!`<"H`0(!]`'T
-M`8`'92VI]+=BGPZ+```````````A("((`````````7@B``!X````=`D!``P#
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``*!,5>^H(05#TZCW]\@6:\7CD5.2
-M\IIHE?Z?X]D_,`]EYJ;Y/,=-2-B"`@P6BV^-ZN[-W#_59"/+A1-!6L?XF*=P
-M37Q(QYE0M3KZ:V%8W4Q1&]CF;-H]Z$0\_N)5?(?2MS[TK8B7T38IHQYI[-^-
-M%&^L):2UJ,QX#'6@#OA/UM$>*0``)*6'X8^O>D@_6CWQ81(,+TKV:ND\\.@U
-M5C=%JWH_`260*0``'```0`1A&SD<`A7_P1+`T(Y<N"P1.'S>M0```!P``$`%
-M[I6@O;0US.3'T/>55[7.2R-F,@*H$K=&+<,,`)@!``"8`0```@```$4``91H
-M10``0!$``,"H`0'`J`$"`?0!]`&`!V4MJ?2W8I\.BP``````````(2`B"```
-M``````%X(@``>````'0)`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``"@
-M3%7OJ"$%0].H]_?(%FO%XY%3DO*::)7^G^/9/S`/9>:F^3S'34C8@@(,%HMO
-MC>KNS=P_U60CRX4305K'^)BG<$U\2,>94+4Z^FMA6-U,41O8YFS:/>A$//[B
-M57R'TK<^]*V(E]$V*:,>:>S?C11OK"6DM:C,>`QUH`[X3];1'BD``"2EA^&/
-MKWI(/UH]\6$2#"]*]FKI//#H-58W1:MZ/P$ED"D``!P``$`$81LY'`(5_\$2
-MP-".7+@L$3A\WK4````<``!`!>Z5H+VT-<SDQ]#WE5>USDLC9C("J1*W1N0[
-M"P"8`0``F`$```(```!%``&4:-$``$`1``#`J`$!P*@!`@'T`?0!@`=E[X9?
-M[F*,X4(``````````"$@(@@````````!>"(``'@```!T^`$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``8'8'VN:J3&+GZ/ID:$2UO\3K^%[/;_\Y3FH:
-MH(UC/_!_P+?>227QJ6LC350!`>E*'+CCO``&%>.1%W8+[0%9>88PJ^JH@]I$
-M*;0'('5;:M:Z?^!=N3.2A3TT7-=W)`\J>]"6EW#GDM74AC\IJ`+DC%RQ?F3#
-ML>;CPH4UW)KZ&>(I```DH5,C;FTW)!%&;&+Q0,F1@W^;MNL>?U&&TFKK.U$"
-M9;0I```<``!`!-L&L2=#XV]*4DO7GAR!PVBD6WSS````'```0`5\G7FF8#3G
-M.IS1R9>'KJU_EZ$F<ZD2MT8=<0X`F`$``)@!```"````10`!E&C3``!`$0``
-MP*@!`<"H`0(!]`'T`8`'9>^&7^YBC.%"```````````A("((`````````7@B
-M``!X````=/@!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``&!V!]KFJDQB
-MY^CZ9&A$M;_$Z_A>SV__.4YJ&J"-8S_P?\"WWDDE\:EK(TU4`0'I2ARXX[P`
-M!A7CD1=V"^T!67F&,*OJJ(/:1"FT!R!U6VK6NG_@7;DSDH4]-%S7=R0/*GO0
-MEI=PYY+5U(8_*:@"Y(Q<L7YDP['FX\*%-=R:^AGB*0``)*%3(VYM-R011FQB
-M\4#)D8-_F[;K'G]1AM)JZSM1`F6T*0``'```0`3;!K$G0^-O2E)+UYX<@<-H
-MI%M\\P```!P``$`%?)UYIF`TYSJ<T<F7AZZM?Y>A)G.J$K=&$W`%`)@!``"8
-M`0```@```$4``91HU```0!$``,"H`0'`J`$"`?0!]`&`!V7OAE_N8HSA0@``
-M````````(2`B"`````````%X(@``>````'3X`0`,`P``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"``!@=@?:YJI,8N?H^F1H1+6_Q.OX7L]O_SE.:AJ@C6,_\'_`
-MM]Y))?&I:R--5`$!Z4H<N..\``85XY$7=@OM`5EYAC"KZJB#VD0IM`<@=5MJ
-MUKI_X%VY,Y*%/31<UW<D#RI[T):7<.>2U=2&/RFH`N2,7+%^9,.QYN/"A37<
-MFOH9XBD``"2A4R-N;3<D$49L8O%`R9&#?YNVZQY_48;2:NL[40)EM"D``!P`
-M`$`$VP:Q)T/C;TI22]>>'('#:*1;?/,````<``!`!7R=>:9@-.<ZG-')EX>N
-MK7^7H29SJQ*W1N)Z`P"8`0``F`$```(```!%``&4:-4``$`1``#`J`$!P*@!
-M`@'T`?0!@`=EK86F^]W"*>P``````````"$@(@@````````!>"(``'@```!T
-M^0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``C?&A.:E_JJY'65:,A2@9
-MWV@U3:V3M;UV<B%/4<*G">'Z%`3(0@XIN:YDZZ^[)+,%&2\[0OCB8IP7X9.R
-M<B^_HXJ103T<<IS'CW.CP%L:?"TPH^`"(WI-.',%R':_N-G5Q6_%<.\\#X`A
-MPZ1VGYHKQC<A@(]:1+MG;LUP.`L5:V8I```D<8PP13@LPB19`'R`G"#PTVJ2
-MBWKOM@O&T@=K-)VF/API```<``!`!#??YTX5ZABE.>[2S-[E(MQPBKS&````
-M'```0`5>*>>&RYX$Z^+:S[W$@V.S#(I[6:L2MT:@J`8`F`$``)@!```"````
-M10`!E&C:``!`$0``P*@!`<"H`0(!]`'T`8`'9:V%IOO=PBGL```````````A
-M("((`````````7@B``!X````=/D!``P#```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``(WQH3FI?ZJN1UE6C(4H&=]H-4VMD[6]=G(A3U'"IPGA^A0$R$(.*;FN
-M9.NONR2S!1DO.T+XXF*<%^&3LG(OOZ.*D4$]''*<QX]SH\!;&GPM,*/@`B-Z
-M33AS!<AVO[C9U<5OQ7#O/`^`(<.D=I^:*\8W(8"/6D2[9V[-<#@+%6MF*0``
-M)'&,,$4X+,(D60!\@)P@\--JDHMZ[[8+QM(':S2=ICX<*0``'```0`0WW^=.
-M%>H8I3GNTLS>Y2+<<(J\Q@```!P``$`%7BGGALN>!.OBVL^]Q(-CLPR*>UFK
-M$K=&+^H,`)@!``"8`0```@```$4``91HXP``0!$``,"H`0'`J`$"`?0!]`&`
-M!V6MA:;[W<(I[```````````(2`B"`````````%X(@``>````'3Y`0`,`P``
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"``"-\:$YJ7^JKD=95HR%*!G?:#5-K9.U
-MO79R(4]1PJ<)X?H4!,A"#BFYKF3KK[LDLP49+SM"^.)BG!?AD[)R+[^CBI%!
-M/1QRG,>/<Z/`6QI\+3"CX`(C>DTX<P7(=K^XV=7%;\5P[SP/@"'#I':?FBO&
-M-R&`CUI$NV=NS7`X"Q5K9BD``"1QC#!%."S")%D`?("<(/#3:I*+>N^V"\;2
-M!VLTG:8^'"D``!P``$`$-]_G3A7J&*4Y[M+,WN4BW'"*O,8````<``!`!5XI
-MYX;+G@3KXMK/O<2#8[,,BGM9K!*W1H7U"@"8`0``F`$```(```!%``&4:/4`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E*#>4BK.<BE0``````````"$@(@@`````
-M```!>"(``'@```!T^@$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``'.I<
-MVV7'2G7,/':GJ4B4R&RO+IIZ*'GH8TG'C;D<KU-C[0UPOZXVW!^"O5KL-L_H
-M57=I!QQ(:<411'AX<PH;+KX!8L8PTQF0OUQ",=H#-:P>6(R5;UV,8Z!`E8E%
-M)2SE05*'OA03RU8OQD2(?"O.Q4:$<]`-_I7?J_WN63!T7!,I```D=Y7<J@I'
-MLU2MPJ[)6*\8W,."$40(>$Y<T,;E9Y\-.%LI```<``!`!*CO0,SKS%[3*!P?
-MR%[L$#.=3D*\````'```0`6VIJ9%@,V,9V>[]P9UUW`_"&[OZZP2MT:T(@X`
-MF`$``)@!```"````10`!E&D%``!`$0``P*@!`<"H`0(!]`'T`8`'92@WE(JS
-MG(I4```````````A("((`````````7@B``!X````=/H!``P#```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``!SJ7-MEQTIUS#QVIZE(E,ALKRZ:>BAYZ&-)QXVY
-M'*]38^T-<+^N-MP?@KU:[#;/Z%5W:0<<2&G%$41X>',*&RZ^`6+&,-,9D+]<
-M0C':`S6L'EB,E6]=C&.@0)6)124LY4%2A[X4$\M6+\9$B'PKSL5&A'/0#?Z5
-MWZO][EDP=%P3*0``)'>5W*H*1[-4K<*NR5BO&-S#@A%$"'A.7-#&Y6>?#3A;
-M*0``'```0`2H[T#,Z\Q>TR@<'\A>[!`SG4Y"O````!P``$`%MJ:F18#-C&=G
-MN_<&===P/PAN[^NM$K=&["$%`)@!``"8`0```@```$4``91I"```0!$``,"H
-M`0'`J`$"`?0!]`&`!V4H-Y2*LYR*5```````````(2`B"`````````%X(@``
-M>````'3Z`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"```<ZES;9<=*=<P\
-M=J>I2)3(;*\NFGHH>>AC2<>-N1RO4V/M#7"_KC;<'X*]6NPVS^A5=VD''$AI
-MQ1%$>'AS"ALNO@%BQC#3&9"_7$(QV@,UK!Y8C)5O78QCH$"5B44E+.5!4H>^
-M%!/+5B_&1(A\*\[%1H1ST`W^E=^K_>Y9,'1<$RD``"1WE=RJ"D>S5*W"KLE8
-MKQC<PX(11`AX3ES0QN5GGPTX6RD``!P``$`$J.]`S.O,7M,H'!_(7NP0,YU.
-M0KP````<``!`!;:FID6`S8QG9[OW!G77<#\(;N_KKA*W1HHN`P"8`0``F`$`
-M``(```!%``&4:2D``$`1``#`J`$!P*@!`@'T`?0!@`=EE]?.N=O353(`````
-M`````"$@(@@````````!>"(``'@```!T_0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``&.?G+Z,Y6N\VE\?D+_A2W,](P$%-T.O49\;-S^9:%!X$L@D2
-M2L'%%;+[SP/>P%DT.1K:THG<.HW8JKN_6E5@=Y(3S[-LSTU<=%WZ^G)%(]56
-MH0F*<)4DXR1/[.X"]HG_`:#\S,<&-0>0\!?X(&,\\&,'=#N808,'`QQK>A*8
-MV$XI```DF=:..Q2J)1KM7XZ3TU7.@!@!!Q2E1,;:5F%!$^P7X?PI```<``!`
-M!.]]GZ8N!-ZJA'M"[-)EI.D0#!MM````'```0`6#+&"B>SC7F#[R$ZLL<PE%
-M9#!O\:X2MT9(6@8`F`$``)@!```"````10`!E&DJ``!`$0``P*@!`<"H`0(!
-M]`'T`8`'99?7SKG;TU4R```````````A("((`````````7@B``!X````=/T!
-M``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``!CGYR^C.5KO-I?'Y"_X4MS/
-M2,!!3=#KU&?&S<_F6A0>!+()$DK!Q16R^\\#WL!9-#D:VM*)W#J-V*J[OUI5
-M8'>2$\^S;,]-7'1=^OIR12/55J$)BG"5).,D3^SN`O:)_P&@_,S'!C4'D/`7
-M^"!C//!C!W0[F$&#!P,<:WH2F-A.*0``))G6CCL4JB4:[5^.D]-5SH`8`0<4
-MI43&VE9A01/L%^'\*0``'```0`3O?9^F+@3>JH1[0NS29:3I$`P;;0```!P`
-M`$`%@RQ@HGLXUY@^\A.K+',)160P;_&N$K=&WIL,`)@!``"8`0```@```$4`
-M`91I*P``0!$``,"H`0'`J`$"`?0!]`&`!V67U\ZYV]-5,@``````````(2`B
-M"`````````%X(@``>````'3]`0`,`P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M```8Y^<OHSE:[S:7Q^0O^%+<STC`04W0Z]1GQLW/YEH4'@2R"1)*P<45LOO/
-M`][`630Y&MK2B=PZC=BJN[]:56!WDA//LVS/35QT7?KZ<D4CU5:A"8IPE23C
-M)$_L[@+VB?\!H/S,QP8U!Y#P%_@@8SSP8P=T.YA!@P<#'&MZ$IC83BD``"29
-MUHX[%*HE&NU?CI/35<Z`&`$'%*5$QMI684$3[!?A_"D``!P``$`$[WV?IBX$
-MWJJ$>T+LTF6DZ1`,&VT````<``!`!8,L8*)[.->8/O(3JRQS"45D,&_QKQ*W
-M1@2H"@"8`0``F`$```(```!%``&4:2T``$`1``#`J`$!P*@!`@'T`?0!@`=E
-MMA.+4>O;#7<``````````"$@(@@````````!>"(``'@```!T_@$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``2#S+H;PQ,5/F,(\5'\&?_)B"MT"X1TK(
-M92?)&+:!C:/2C,;6*0%`2JGP;V5BO]:8OD!\#X>01H=BP%NA`?_N>7"3@^D^
-MQFC5H*NA[?(V]J6NA&UNST/9!^,M&03!LDN+ZX&@[>@8'CMR7,)5#U$T=4(`
-MJA/M/X,RN^09\2&R0_TI```D&V.`&T\ZOL[%UE#E,3V/Z]L_(I^Q??>\C5GA
-M-.T\&Y8I```<``!`!","4CV15L9-"3B$9>V7QK"2%X=W````'```0`7[X67E
-M=.CF2+W'JEQV4KAWF/"7CJ\2MT9,U`T`F`$``)@!```"````10`!E&DN``!`
-M$0``P*@!`<"H`0(!]`'T`8`'9;83BU'KVPUW```````````A("((````````
-M`7@B``!X````=/X!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``$@\RZ&\
-M,3%3YC"/%1_!G_R8@K=`N$=*R&4GR1BV@8VCTHS&UBD!0$JI\&]E8K_6F+Y`
-M?`^'D$:'8L!;H0'_[GEPDX/I/L9HU:"KH>WR-O:EKH1M;L]#V0?C+1D$P;)+
-MB^N!H.WH&!X[<ES"50]1-'5"`*H3[3^#,KOD&?$ALD/]*0``)!MC@!M/.K[.
-MQ=90Y3$]C^O;/R*?L7WWO(U9X33M/!N6*0``'```0`0C`E(]D5;&30DXA&7M
-ME\:PDA>'=P```!P``$`%^^%EY73HYDB]QZI<=E*X=YCPEXZP$K=&G],$`)@!
-M``"8`0```@```$4``91I+P``0!$``,"H`0'`J`$"`?0!]`&`!V6V$XM1Z]L-
-M=P``````````(2`B"`````````%X(@``>````'3^`0`,`P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``!(/,NAO#$Q4^8PCQ4?P9_\F(*W0+A'2LAE)\D8MH&-
-MH]*,QM8I`4!*J?!O96*_UIB^0'P/AY!&AV+`6Z$!_^YY<).#Z3[&:-6@JZ'M
-M\C;VI:Z$;6[/0]D'XRT9!,&R2XOK@:#MZ!@>.W)<PE4/431U0@"J$^T_@S*[
-MY!GQ(;)#_2D``"0;8X`;3SJ^SL764.4Q/8_KVS\BG[%]][R-6>$T[3P;EBD`
-M`!P``$`$(P)2/9%6QDT).(1E[9?&L)(7AW<````<``!`!?OA9>5TZ.9(O<>J
-M7'92N'>8\)>.L1*W1N+?`@"8`0``F`$```(```!%``&4:3```$`1``#`J`$!
-MP*@!`@'T`?0!@`=E1N<N:XVP3F\``````````"$@(@@````````!>"(``'@`
-M``!T_P$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``KJK2PQ2='ZN!:7$:
-MNXQ,1I85373?S+>"_)Q6<W&@*[?IQSB@K]Z)8P"#0.8#9LEA9J/\!]1+;CC"
-MM/LQ9+Z5.`=L*(D2HPC!?L^2^2WA>6V?%GCXRZJA$LD3,2`MCT&-ZU>.8/5Z
-MV)J`Y030`1XIN/AAD43.V.VUHU:'#)";\M@I```DL0Q=G.)&EZ5-&FJ=V0J=
-MGD/)<_E\B$`S[X[6(9!L*MDI```<``!`!%XFY<;R^2$(3:M)6R!#JKC\5MR=
-M````'```0`53*T90/$-GNC'78:IAPK'TD(C49K$2MT84#`8`F`$``)@!```"
-M````10`!E&DQ``!`$0``P*@!`<"H`0(!]`'T`8`'94;G+FN-L$YO````````
-M```A("((`````````7@B``!X````=/\!``P#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``*ZJTL,4G1^K@6EQ&KN,3$:6%4UTW\RW@OR<5G-QH"NWZ<<XH*_>
-MB6,`@T#F`V;)86:C_`?42VXXPK3[,62^E3@';"B)$J,(P7[/DODMX7EMGQ9X
-M^,NJH1+)$S$@+8]!C>M7CF#U>MB:@.4$T`$>*;CX89%$SMCMM:-6APR0F_+8
-M*0``)+$,79SB1I>E31IJG=D*G9Y#R7/Y?(A`,^^.UB&0;"K9*0``'```0`1>
-M)N7&\ODA"$VK25L@0ZJX_%;<G0```!P``$`%4RM&4#Q#9[HQUV&J8<*Q])"(
-MU&:Q$K=&GTT,`)@!``"8`0```@```$4``91I,@``0!$``,"H`0'`J`$"`?0!
-M]`&`!V5&YRYKC;!.;P``````````(2`B"`````````%X(@``>````'3_`0`,
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``"NJM+#%)T?JX%I<1J[C$Q&EA5-
-M=-_,MX+\G%9S<:`KM^G'.*"OWHEC`(-`Y@-FR6%FH_P'U$MN.,*T^S%DOI4X
-M!VPHB1*C",%^SY+Y+>%Y;9\6>/C+JJ$2R1,Q("V/08WK5XY@]7K8FH#E!-`!
-M'BFX^&&11,[8[;6C5H<,D)ORV"D``"2Q#%V<XD:7I4T::IW9"IV>0\ES^7R(
-M0#/OCM8AD&PJV2D``!P``$`$7B;EQO+Y(0A-JTE;($.JN/Q6W)T````<``!`
-M!5,K1E`\0V>Z,==AJF'"L?20B-1FLA*W1IA="@"8`0``F`$```(```!%``&4
-M:3<``$`1``#`J`$!P*@!`@'T`?0!@`=E>`2M9JJ24/\``````````"$@(@@`
-M```````!>"(``'@```!T``$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M0#L>L.*]XQ+T[&4W*./`ROL7X-1JXP"DP)\\\?,/2MQ'@Y\K@HI.E6B6%(!\
-M(Q!Z)?>:0*^0U/C)@5'<2G&GUC%NZC&2VGP7,:!<;2=W[-AEB>V4\U4DA6/1
-MCK$?RE7RN9@D*M\@DI8+)H2NN!M'?J)2\>L?D"BGW\A=H/<V5\4I```D/)*'
-M+B(=J?S[)D^,$'X)$WNRL.BU53U[]R_ZAHZZ)6DI```<``!`!(*A#V#9?%\H
-M^W[&?!Q^Z-4Q:;UF````'```0`6U\^)3G8B,W_8(3$XS+0@W3;DYZ[(2MT8P
-MA@T`F`$``)@!```"````10`!E&DZ``!`$0``P*@!`<"H`0(!]`'T`8`'97@$
-MK6:JDE#_```````````A("((`````````7@B``!X````=``!``P#```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``$`['K#BO>,2].QE-RCCP,K[%^#4:N,`I,"?
-M//'S#TK<1X.?*X**3I5HEA2`?",0>B7WFD"OD-3XR8%1W$IQI]8Q;NHQDMI\
-M%S&@7&TG=^S898GME/-5)(5CT8ZQ'\I5\KF8)"K?()*6"R:$KK@;1WZB4O'K
-M'Y`HI]_(7:#W-E?%*0``)#R2ARXB':G\^R9/C!!^"1-[LK#HM54]>_<O^H:.
-MNB5I*0``'```0`2"H0]@V7Q?*/M^QGP<?NC5,6F]9@```!P``$`%M?/B4YV(
-MC-_V"$Q.,RT(-TVY.>NS$K=&?(4$`)@!``"8`0```@```$4``91I00``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V5X!*UFJI)0_P``````````(2`B"`````````%X
-M(@``>````'0``0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"``!`.QZPXKWC
-M$O3L93<HX\#*^Q?@U&KC`*3`GSSQ\P]*W$>#GRN"BDZ5:)84@'PC$'HE]YI`
-MKY#4^,F!4=Q*<:?6,6[J,9+:?!<QH%QM)W?LV&6)[93S522%8]&.L1_*5?*Y
-MF"0JWR"2E@LFA*ZX&T=^HE+QZQ^0**??R%V@]S97Q2D``"0\DH<N(AVI_/LF
-M3XP0?@D3>[*PZ+55/7OW+_J&CKHE:2D``!P``$`$@J$/8-E\7RC[?L9\''[H
-MU3%IO68````<``!`!;7SXE.=B(S?]@A,3C,M"#=-N3GKM!*W1I22`@"8`0``
-MF`$```(```!%``&4:4D``$`1``#`J`$!P*@!`@'T`?0!@`=EL[45*532?]P`
-M`````````"$@(@@````````!>"(``'@```!T`@$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``;9RH\C??@04IW3V5:#GZGXCF2B]&%[$ZRK3=VWK<AP^\
-M`VM,,6N`=NSV5^>8?X&HM"4OGD?.]$,B0YS%6%^O4YIWV,A5HXN9LCF4*5_.
-M@VY*DTSX2NEPQ]\NQR1-_6:3C]:&,LX[ANZNL>3%:FU7G+`H:NNCYGW5X0K1
-M3CJ_K*DI```DIX-H+5OQ#&/.Z,HX7W<'%>_<-E$XJAFNJ%PK5U-0=W,I```<
-M``!`!.-N0B0<\3->7I+7<\H+H*/`R)[)````'```0`4S?7U]\I(^6Y/,SA#A
-M@N&M)TW#DK02MT;KO04`F`$``)@!```"````10`!E&E+``!`$0``P*@!`<"H
-M`0(!]`'T`8`'9;.U%2E4TG_<```````````A("((`````````7@B``!X````
-M=`(!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``&V<J/(WWX$%*=T]E6@Y
-M^I^(YDHO1A>Q.LJTW=MZW(</O`-K3#%K@';L]E?GF'^!J+0E+YY'SO1#(D.<
-MQ5A?KU.:=]C(5:.+F;(YE"E?SH-N2I-,^$KI<,??+L<D3?UFDX_6AC+..X;N
-MKK'DQ6IM5YRP*&KKH^9]U>$*T4XZOZRI*0``)*>#:"U;\0QCSNC*.%]W!Q7O
-MW#91.*H9KJA<*U=34'=S*0``'```0`3C;D(D'/$S7EZ2UW/*"Z"CP,B>R0``
-M`!P``$`%,WU]??*2/EN3S,X0X8+AK2=-PY*T$K=&:O\+`)@!``"8`0```@``
-M`$4``91I30``0!$``,"H`0'`J`$"`?0!]`&`!V6SM14I5-)_W```````````
-M(2`B"`````````%X(@``>````'0"`0`,`P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"``!MG*CR-]^!!2G=/95H.?J?B.9*+T87L3K*M-W;>MR'#[P#:TPQ:X!V
-M[/97YYA_@:BT)2^>1\[T0R)#G,587Z]3FG?8R%6CBYFR.90I7\Z#;DJ33/A*
-MZ7#'WR[')$W]9I./UH8RSCN&[JZQY,5J;5><L"AJZZ/F?=7A"M%..K^LJ2D`
-M`"2G@V@M6_$,8\[HRCA?=P<5[]PV43BJ&:ZH7"M74U!W<RD``!P``$`$XVY"
-M)!SQ,UY>DM=SR@N@H\#(GLD````<``!`!3-]?7WRDCY;D\S.$.&"X:TG3<.2
-MM1*W1DX/"@"8`0``F`$```(```!%``&4:5D``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E[M`0Q#RKL6@``````````"$@(@@````````!>"(``'@```!T`P$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``X=$].@0[Y9EN6NC91E70D`,'6"$4
-MR\?D6WZ]`4L!4+4<Z;\;FY>T4H"I6KU8"W;K=6:E9.":B8XXYK6A%>T,N2WI
-M,F(\>\WM60X3>U<:AK8%X_.!6W*IG%"2]=/#^K]6%[A:O%E9_N:9KY3M:S_Y
-M-T6GI4?X7>RCD\F+VY8Q/3$I```D.C?:A_B"YKJ@R%>(N30K2P^<H!<"U`[U
-M3`5<*,BAUE`I```<``!`!"MMNWK7E,X"D8=>L4BE-)YB*R.?````'```0`63
-M-DT!6\V@O',O=NJ^WD`':0-VA;42MT;R-PT`F`$``)@!```"````10`!E&E<
-M``!`$0``P*@!`<"H`0(!]`'T`8`'9>[0$,0\J[%H```````````A("((````
-M`````7@B``!X````=`,!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``.'1
-M/3H$.^69;EKHV495T)`#!U@A%,O'Y%M^O0%+`5"U'.F_&YN7M%*`J5J]6`MV
-MZW5FI63@FHF...:UH17M#+DMZ3)B/'O-[5D.$WM7&H:V!>/S@5MRJ9Q0DO73
-MP_J_5A>X6KQ96?[FF:^4[6L_^3=%IZ5'^%WLHY/)B]N6,3TQ*0``)#HWVH?X
-M@N:ZH,A7B+DT*TL/G*`7`M0.]4P%7"C(H=90*0``'```0`0K;;MZUY3.`I&'
-M7K%(I32>8BLCGP```!P``$`%DS9-`5O-H+QS+W;JOMY`!VD#=H6V$K=&4C<$
-M`)@!``"8`0```@```$4``91I8P``0!$``,"H`0'`J`$"`?0!]`&`!V7NT!#$
-M/*NQ:```````````(2`B"`````````%X(@``>````'0#`0`,`P``#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"``#AT3TZ!#OEF6Y:Z-E&5="0`P=8(13+Q^1;?KT!
-M2P%0M1SIOQN;E[12@*E:O5@+=NMU9J5DX)J)CCCFM:$5[0RY+>DR8CQ[S>U9
-M#A-[5QJ&M@7C\X%;<JF<4)+UT\/ZOU87N%J\65G^YIFOE.UK/_DW1:>E1_A=
-M[*.3R8O;EC$],2D``"0Z-]J'^(+FNJ#(5XBY-"M+#YR@%P+4#O5,!5PHR*'6
-M4"D``!P``$`$*VV[>M>4S@*1AUZQ2*4TGF(K(Y\````<``!`!9,V30%;S:"\
-M<R]VZK[>0`=I`W:%MQ*W1KM#`@"8`0``F`$```(```!%``&4:64``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=E[SV!8AW#15P``````````"$@(@@````````!>"(`
-M`'@```!T!`$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``\V%L*H')3QEW
-M*ORK?@HV`H%X0`"29W!@%ZLT&2UU=*;-[F#T"XL*PV8?7`[1\_PU8#I?X[DW
-MK`(0B>JC.=<0R("0Q[0@TI,65X!NT?;W!9G?#'#)M"C[K&K2G=NZ;TU#`9,W
-M0?:WW?OA:J3-@%+/KC*=C.WJ)N_2-TE(BO(\1.@I```D=!']P&H[FDDXP*K*
-MV,"F\0/PE/$7J2XRS\'EX/`TKW\I```<``!`!&4QDI8_*2KP[I%N95(7(LO)
-MFO8T````'```0`7IE/"5?@S\(M1SH]3H"K9;+_#JEK<2MT:N;P4`F`$``)@!
-M```"````10`!E&EF``!`$0``P*@!`<"H`0(!]`'T`8`'9>\]@6(=PT5<````
-M```````A("((`````````7@B``!X````=`0!``P#```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``/-A;"J!R4\9=RK\JWX*-@*!>$``DF=P8!>K-!DM=72FS>Y@
-M]`N+"L-F'UP.T?/\-6`Z7^.Y-ZP"$(GJHSG7$,B`D,>T(-*3%E>`;M'V]P69
-MWPQPR;0H^ZQJTIW;NF]-0P&3-T'VM]W[X6JDS8!2SZXRG8SMZB;OTC=)2(KR
-M/$3H*0``)'01_<!J.YI).,"JRMC`IO$#\)3Q%ZDN,L_!Y>#P-*]_*0``'```
-M0`1E,9*6/RDJ\.Z1;F52%R++R9KV-````!P``$`%Z93PE7X,_"+4<Z/4Z`JV
-M6R_PZI:W$K=&*;$+`)@!``"8`0```@```$4``91I9P``0!$``,"H`0'`J`$"
-M`?0!]`&`!V7O/8%B'<-%7```````````(2`B"`````````%X(@``>````'0$
-M`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"``#S86PJ@<E/&7<J_*M^"C8"
-M@7A``))G<&`7JS09+75TILWN8/0+BPK#9A]<#M'S_#5@.E_CN3>L`A")ZJ,Y
-MUQ#(@)#'M"#2DQ97@&[1]O<%F=\,<,FT*/NL:M*=V[IO34,!DS=!]K?=^^%J
-MI,V`4L^N,IV,[>HF[](W24B*\CQ$Z"D``"1T$?W`:CN:23C`JLK8P*;Q`_"4
-M\1>I+C+/P>7@\#2O?RD``!P``$`$93&2EC\I*O#ND6YE4A<BR\F:]C0````<
-M``!`!>F4\)5^#/PBU'.CU.@*MELO\.J6N!*W1A6]"0"8`0``F`$```(```!%
-M``&4:6H``$`1``#`J`$!P*@!`@'T`?0!@`=E.O/5@#`=3!4``````````"$@
-M(@@````````!>"(``'@```!T!0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``C-)FKD)JN_P&+WEKRA5X-&<F-$;ZE;<LZ]H9E:)"!?I%[PQ1%7K?0IW:
-MB'BD"G%SX^4&*RC`/(M/?(Z"I?^C`6D-B-J:!E./&&.N'>E6_%Q8HS&<LASJ
-M++;L$W\WO,"]%HS6UOLN000E$.-K<\C#P\!.X%SX89#):U<)81LA+F8I```D
-M>1U\=O1<:)[KXS53),2(6_(/'2B\%0-ZA]>/B#7KJ,4I```<``!`!)XJZQ&2
-MJ6=3F"CX4V3GR[.=/`)#````'```0`6+38!R7=;,[,!"8N<#HR>FY11'];@2
-MMT:HZ0P`F`$``)@!```"````10`!E&EK``!`$0``P*@!`<"H`0(!]`'T`8`'
-M93KSU8`P'4P5```````````A("((`````````7@B``!X````=`4!``P#```,
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``(S29JY":KO\!B]Y:\H5>#1G)C1&^I6W
-M+.O:&96B0@7Z1>\,415ZWT*=VHAXI`IQ<^/E!BLHP#R+3WR.@J7_HP%I#8C:
-MF@93CQACKAWI5OQ<6*,QG+(<ZBRV[!-_-[S`O1:,UM;[+D$$)1#C:W/(P\/`
-M3N!<^&&0R6M7"6$;(2YF*0``)'D=?';T7&B>Z^,U4R3$B%OR#QTHO!4#>H?7
-MCX@UZZC%*0``'```0`2>*NL1DJEG4Y@H^%-DY\NSG3P"0P```!P``$`%BTV`
-M<EW6S.S`0F+G`Z,GIN441_6Y$K=&\^@#`)@!``"8`0```@```$4``91I;```
-M0!$``,"H`0'`J`$"`?0!]`&`!V4Z\]6`,!U,%0``````````(2`B"```````
-M``%X(@``>````'0%`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``",TF:N
-M0FJ[_`8O>6O*%7@T9R8T1OJ5MRSKVAF5HD(%^D7O#%$5>M]"G=J(>*0*<7/C
-MY08K*,`\BT]\CH*E_Z,!:0V(VIH&4X\88ZX=Z5;\7%BC,9RR'.HLMNP3?S>\
-MP+T6C-;6^RY!!"40XVMSR,/#P$[@7/AAD,EK5PEA&R$N9BD``"1Y'7QV]%QH
-MGNOC-5,DQ(A;\@\=*+P5`WJ'UX^(->NHQ2D``!P``$`$GBKK$9*I9U.8*/A3
-M9.?+LYT\`D,````<``!`!8M-@')=ULSLP$)BYP.C)Z;E%$?UNA*W1G[W`0"8
-M`0``F`$```(```!%``&4:6X``$`1``#`J`$!P*@!`@'T`?0!@`=E&[])+1EZ
-MI:X``````````"$@(@@````````!>"(``'@```!T"`$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``54E\0:%A.;M6RE<R218P;.\4]QFL5/ZES/HSM((7
-MP&Z.`M0D6VN<SZQ[4%FY[1RHH4"RZ([H=0[`83W(U!OH!B#P$;S[;S"P63*U
-MKX$WW1`"NJ1?0[J0O'/T%5A)@WV7USYT-"Y@G9IG`:#)YG@;E?(SPA+"Z$'G
-ML`T&E5FYSMDI```D#\I#38W^H_8)@[KY8-8V]:$?Q";AJTO`TX,O6!*.5ODI
-M```<``!`!,:Z77HT>R2*0FPH,7+!L@Z'37>"````'```0`5S//[M9'YV&!0L
-MH"^[;G;^'#(#%KH2MT:=(04`F`$``)@!```"````10`!E&EQ``!`$0``P*@!
-M`<"H`0(!]`'T`8`'91N_22T9>J6N```````````A("((`````````7@B``!X
-M````=`@!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``%5)?$&A83F[5LI7
-M,DD6,&SO%/<9K%3^I<SZ,[2"%\!NC@+4)%MKG,^L>U!9N>T<J*%`LNB.Z'4.
-MP&$]R-0;Z`8@\!&\^V\PL%DRM:^!-]T0`KJD7T.ZD+QS]!5828-]E]<^=#0N
-M8)V:9P&@R>9X&Y7R,\(2PNA!Y[`-!I59N<[9*0``)`_*0TV-_J/V"8.Z^6#6
-M-O6A'\0FX:M+P-.#+U@2CE;Y*0``'```0`3&NEUZ-'LDBD)L*#%RP;(.ATUW
-M@@```!P``$`%<SS^[61^=A@4+*`ONVYV_APR`Q:Z$K=&'F,+`)@!``"8`0``
-M`@```$4``91I=P``0!$``,"H`0'`J`$"`?0!]`&`!V4;OTDM&7JEK@``````
-M````(2`B"`````````%X(@``>````'0(`0`,`P``#`$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``!527Q!H6$YNU;*5S))%C!L[Q3W&:Q4_J7,^C.T@A?`;HX"U"1;
-M:YS/K'M06;GM'*BA0++HCNAU#L!A/<C4&^@&(/`1O/MO,+!9,K6O@3?=$`*Z
-MI%]#NI"\<_056$F#?9?7/G0T+F"=FF<!H,GF>!N5\C/"$L+H0>>P#0:56;G.
-MV2D``"0/RD--C?ZC]@F#NOE@UC;UH1_$)N&K2\#3@R]8$HY6^2D``!P``$`$
-MQKI=>C1[)(I";"@Q<L&R#H=-=X(````<``!`!7,\_NUD?G88%"R@+[MN=OX<
-M,@,6NQ*W1M]O"0"8`0``F`$```(```!%``&4:7H``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E5D1F`SAX[>X``````````"$@(@@````````!>"(``'@```!T"0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``\RP=>[Q>7OSPK_U#U/^TW^?3
-M"-.TRD.A\RBA@;\@Z,C'O,*FGB;(Z*T-?RSG7*^[Q="R4"=1\EB@"$WN9+"'
-MR*X39*JRRBGS<X)Z^?UDX,U-VW0-R*E?(HQX6.%9VF97T0ZX5@M/&`W_979;
-MPN*D\5-'^:3V3'_8V(&YK3UJ[Y<I```D9;4HE,M]Y8H5E%GP6;F"*`9/)+,C
-M52!35</<+B$]$:TI```<``!`!-.NS%B<0.+:[_-677=?C&L)BGV<````'```
-M0`4X,B=!(%807+B\YH<K>KE!<]3V>+L2MT:%FPP`F`$``)@!```"````10`!
-ME&E\``!`$0``P*@!`<"H`0(!]`'T`8`'959$9@,X>.WN```````````A("((
-M`````````7@B``!X````=`D!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M`/,L'7N\7E[\\*_]0]3_M-_GTPC3M,I#H?,HH8&_(.C(Q[S"IIXFR.BM#7\L
-MYURON\70LE`G4?)8H`A-[F2PA\BN$V2JLLHI\W.">OG]9.#-3=MT#<BI7R*,
-M>%CA6=IF5]$.N%8+3Q@-_V5V6\+BI/%31_FD]DQ_V-B!N:T]:N^7*0``)&6U
-M*)3+?>6*%919\%FY@B@&3R2S(U4@4U7#W"XA/1&M*0``'```0`33KLQ8G$#B
-MVN_S5EUW7XQK"8I]G````!P``$`%.#(G02!6$%RXO.:'*WJY07/4]GB\$K=&
-MPYH#`)@!``"8`0```@```$4``91I?@``0!$``,"H`0'`J`$"`?0!]`&`!V56
-M1&8#.'CM[@``````````(2`B"`````````%X(@``>````'0)`0`,`P``#`$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"``#S+!U[O%Y>_/"O_4/4_[3?Y],(T[3*0Z'S
-M**&!OR#HR,>\PJ:>)LCHK0U_+.=<K[O%T+)0)U'R6*`(3>YDL(?(KA-DJK+*
-M*?-S@GKY_63@S4W;=`W(J5\BC'A8X5G:9E?1#KA6"T\8#?]E=EO"XJ3Q4T?Y
-MI/9,?]C8@;FM/6KOERD``"1EM2B4RWWEBA646?!9N8(H!D\DLR-5(%-5P]PN
-M(3T1K2D``!P``$`$TZ[,6)Q`XMKO\U9==U^,:PF*?9P````<``!`!3@R)T$@
-M5A!<N+SFARMZN4%SU/9XO1*W1LFF`0"8`0``F`$```(```!%``&4:7\``$`1
-M``#`J`$!P*@!`@'T`?0!@`=EU"?<NU2*'VX``````````"$@(@@````````!
-M>"(``'@```!T"@$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``VQ3\!*;/
-MX9,!+9>;E7D!#1D;M#!YX(/?K/()%]1%X*5IJNDUV?((_U[`^S<2<JE!;NZK
-MWY&:OKG#J'_3=K_H7V0PZ_.F8T*:^(ZIBRNK.K_?!5_H-\$WU,C:L82=7N@\
-MV_;+G%`BY4#_K=N$E5F=VL'*?\E/D8/;K]=B]VQ:N?@I```DGGX9M\IZI6CO
-M])Q$1H!()X649")J]05PE+1%YSJ-#PTI```<``!`!$49&"Y&%\"WSC&8/_AG
-M!0EE\F$`````'```0`6'J3&*(^+QUUJ1N@Q/`B!AW&KYD[T2MT8VTP0`F`$`
-M`)@!```"````10`!E&F```!`$0``P*@!`<"H`0(!]`'T`8`'9=0GW+M4BA]N
-M```````````A("((`````````7@B``!X````=`H!``P#```,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``-L4_`2FS^&3`2V7FY5Y`0T9&[0P>>"#WZSR"1?41>"E
-M::KI-=GR"/]>P/LW$G*I06[NJ]^1FKZYPZA_TW:_Z%]D,.OSIF-"FOB.J8LK
-MJSJ_WP5?Z#?!-]3(VK&$G5[H/-OVRYQ0(N5`_ZW;A)59G=K!RG_)3Y&#VZ_7
-M8O=L6KGX*0``))Y^&;?*>J5H[_2<1$:`2">%E&0B:O4%<)2T1><ZC0\-*0``
-M'```0`1%&1@N1A?`M\XQF#_X9P4)9?)A`````!P``$`%AZDQBB/B\==:D;H,
-M3P(@8=QJ^9.]$K=&NQ0+`)@!``"8`0```@```$4``91I@0``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V74)]R[5(H?;@``````````(2`B"`````````%X(@``>```
-M`'0*`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"``#;%/P$IL_ADP$MEYN5
-M>0$-&1NT,'G@@]^L\@D7U$7@I6FJZ379\@C_7L#[-Q)RJ4%N[JO?D9J^N<.H
-M?]-VO^A?9##K\Z9C0IKXCJF+*ZLZO]\%7^@WP3?4R-JQA)U>Z#S;]LN<4"+E
-M0/^MVX2569W:P<I_R4^1@]NOUV+W;%JY^"D``"2>?AFWRGJE:._TG$1&@$@G
-MA91D(FKU!7"4M$7G.HT/#2D``!P``$`$11D8+D87P+?.,9@_^&<%"67R80``
-M```<``!`!8>I,8HCXO'76I&Z#$\"(&'<:OF3OA*W1F@A"0"8`0``F`$```(`
-M``!%``&4:80``$`1``#`J`$!P*@!`@'T`?0!@`=E?*Y1;CYAVQT`````````
-M`"$@(@@````````!>"(``'@```!T_P$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``@4YH\)3@A^..U`>V\HLEZ4;`R/V#EFQLGJ.EN;@K"UCEX#B[E'_0
-M)QN\F;<)D3X(PS.Y$(62_1WZX+/W7<,8F!0\YIKX,\`$6%^)THN18'*D3V[]
-M"2RZE1]DX'\JF)(+1XKG8(1__5BOVK?(3Q0Z8#!IMJNA)J0):\5QUHJ/"`0I
-M```D%[*-[W<\5K6AAK)IPM&>[)R_P!$S?Z.NH-7/B`JT5(\I```<``!`!(P(
-M[M1Q3-$-T^8]-*)<J0?_$CB9````'```0`4-'>8\^!$*_+FN+H21<+<CUXU+
-M#[X2MT8Q30P`F`$``)@!```"````10`!E&F'``!`$0``P*@!`<"H`0(!]`'T
-M`8`'97RN46X^8=L=```````````A("((`````````7@B``!X````=/\!``P#
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``(%.:/"4X(?CCM0'MO*+)>E&P,C]
-M@Y9L;)ZCI;FX*PM8Y>`XNY1_T"<;O)FW"9$^",,SN1"%DOT=^N"S]UW#&)@4
-M/.::^#/`!%A?B=*+D6!RI$]N_0DLNI4?9.!_*IB2"T>*YV"$?_U8K]JWR$\4
-M.F`P:;:KH2:D"6O%<=:*CP@$*0``)!>RC>]W/%:UH8:R:<+1GNR<O\`1,W^C
-MKJ#5SX@*M%2/*0``'```0`2,".[4<4S1#=/F/32B7*D'_Q(XF0```!P``$`%
-M#1WF//@1"ORYKBZ$D7"W(]>-2P^_$K=&HTP#`)@!``"8`0```@```$4``91I
-MBP``0!$``,"H`0'`J`$"`?0!]`&`!V5\KE%N/F';'0``````````(2`B"```
-M``````%X(@``>````'3_`0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``"!
-M3FCPE."'XX[4![;RBR7I1L#(_8.6;&R>HZ6YN"L+6.7@.+N4?]`G&[R9MPF1
-M/@C#,[D0A9+]'?K@L_==PQB8%#SFFO@SP`187XG2BY%@<J1/;OT)++J5'V3@
-M?RJ8D@M'BN=@A'_]6*_:M\A/%#I@,&FVJZ$FI`EKQ7'6BH\(!"D``"07LHWO
-M=SQ6M:&&LFG"T9[LG+_`$3-_HZZ@U<^("K14CRD``!P``$`$C`CNU'%,T0W3
-MYCTTHERI!_\2.)D````<``!`!0T=YCSX$0K\N:XNA)%PMR/7C4L/P!*W1O5:
-M`0"8`0``F`$```(```!%``&4:8\``$`1``#`J`$!P*@!`@'T`?0!@`=E-="J
-MF%YEWN8``````````"$@(@@````````!>"(``'@```!T@`$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``M+9:6>L'D<L>64E>G+O8LNL^K$[`Q^SHKTI_
-M[(3VIAU)YPL4G0YQ0:OR)!<#5;YS,BH'E(ILRB=XC;A@/%]G\5)Q[\6N?G9(
-M]2T"G3T;J49;*9^4&HFNX(0O/%FGATNLY(%AJMHFAK$K_LH5XJT4B`(`FB.<
-M;N#9T?=TS>D(NG\I```D1+JV%8.75;&"O=CY,.^?M1]T#R'%JM6\:51:,SQ2
-M/E,I```<``!`!!J3M(E1U=<\G"B/Y!1O%.T6BU#2````'```0`6#$],6*4/:
-M6-D-J3GXB`WU\]6L8L`2MT8(A00`F`$``)@!```"````10`!E&F1``!`$0``
-MP*@!`<"H`0(!]`'T`8`'9370JIA>9=[F```````````A("((`````````7@B
-M``!X````=(`!``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``+2V6EGK!Y'+
-M'EE)7IR[V++K/JQ.P,?LZ*]*?^R$]J8=2><+%)T.<4&K\B07`U6^<S(J!Y2*
-M;,HG>(VX8#Q?9_%2<>_%KGYV2/4M`IT]&ZE&6RF?E!J)KN"$+SQ9IX=+K.2!
-M8:K:)H:Q*_[*%>*M%(@"`)HCG&[@V='W=,WI"+I_*0``)$2ZMA6#EU6Q@KW8
-M^3#OG[4?=`\AQ:K5O&E46C,\4CY3*0``'```0`0:D[2)4=77/)PHC^04;Q3M
-M%HM0T@```!P``$`%@Q/3%BE#VEC9#:DY^(@-]?/5K&+`$K=&G,8*`)@!``"8
-M`0```@```$4``91IEP``0!$``,"H`0'`J`$"`?0!]`&`!V4UT*J87F7>Y@``
-M````````(2`B"`````````%X(@``>````'2``0`,`P``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"``"TMEI9ZP>1RQY925Z<N]BRZSZL3L#'[.BO2G_LA/:F'4GG
-M"Q2=#G%!J_(D%P-5OG,R*@>4BFS*)WB-N&`\7V?Q4G'OQ:Y^=DCU+0*=/1NI
-M1ELIGY0:B:[@A"\\6:>'2ZSD@6&JVB:&L2O^RA7BK12(`@":(YQNX-G1]W3-
-MZ0BZ?RD``"1$NK85@Y=5L8*]V/DP[Y^U'W0/(<6JU;QI5%HS/%(^4RD``!P`
-M`$`$&I.TB5'5USR<*(_D%&\4[1:+4-(````<``!`!8,3TQ8I0]I8V0VI.?B(
-M#?7SU:QBP1*W1G?2"`"8`0``F`$```(```!%``&4:9\``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E+P_'*/C<CG@``````````"$@(@@````````!>"(``'@```!T
-M`0``#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``XL$>!,PN/`;L`\)5^(V#
-M@A]@N)RLPLE8I`ZL6<HD4PV>R6Z?#KG2`X;%]:Y5__I0HOK$=\NSO?`2I[LO
-M[:>]LZK+_,.(SA!]5#=F?IKZ:,#%#FY1WLJN)CM</(?/$]E0BEP',%)IVT;\
-M:2Q<@=2,YHK%R'T4]UUX!,.LNA:31(\I```D'1O#ZR'A6GGN,0(#+K>0SS/Q
-M+YFC*N/Q7_<OU&+XT?(I```<``!`!+.E-R/)0*,56.NB%3HO+\*GRAE&````
-M'```0`4O!`+*6T#%42VJ-]CY4/TZ;)>`-L$2MT;N_@L`F`$``)@!```"````
-M10`!E&F@``!`$0``P*@!`<"H`0(!]`'T`8`'92\/QRCXW(YX```````````A
-M("((`````````7@B``!X````=`$```P#```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``.+!'@3,+CP&[`/"5?B-@X(?8+B<K,+)6*0.K%G*)%,-GLENGPZYT@.&
-MQ?6N5?_Z4*+ZQ'?+L[WP$J>[+^VGO;.JR_S#B,X0?50W9GZ:^FC`Q0YN4=[*
-MKB8[7#R'SQ/94(I<!S!2:=M&_&DL7('4C.:*Q<A]%/==>`3#K+H6DT2/*0``
-M)!T;P^LAX5IY[C$"`RZWD,\S\2^9HRKC\5_W+]1B^-'R*0``'```0`2SI3<C
-MR4"C%5CKHA4Z+R_"I\H91@```!P``$`%+P0"REM`Q5$MJC?8^5#].FR7@#;"
-M$K=&<?X"`)@!``"8`0```@```$4``91II0``0!$``,"H`0'`J`$"`?0!]`&`
-M!V4O#\<H^-R.>```````````(2`B"`````````%X(@``>````'0!```,`P``
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"``#BP1X$S"X\!NP#PE7XC8."'V"XG*S"
-MR5BD#JQ9RB13#9[);I\.N=(#AL7UKE7_^E"B^L1WR[.]\!*GNR_MI[VSJLO\
-MPXC.$'U4-V9^FOIHP,4.;E'>RJXF.UP\A\\3V5"*7`<P4FG;1OQI+%R!U(SF
-MBL7(?13W77@$PZRZ%I-$CRD``"0=&\/K(>%:>>XQ`@,NMY#/,_$OF:,JX_%?
-M]R_48OC1\BD``!P``$`$LZ4W(\E`HQ58ZZ(5.B\OPJ?*&48````<``!`!2\$
-M`LI;0,51+:HWV/E0_3ILEX`VPQ*W1H8-`0"8`0``F`$```(```!%``&4:;8`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E\;[69&DX>^P``````````"$@(@@`````
-M```!>"(``'@```!T`0(`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``>.M(
-M4M+P(4]M\[?N,>^K=M=W?]"R6.-+U$00B&CFRB``R#5$%>_@)]X6?K<^2*QJ
-M*KG&&N[E.-I]M:[^B8(Z^"5?[&0-&=0`V*&JD=4\@FRH)^)7UO`\#/:_$1R<
-MMWGL6.MJW`OOYZRYS.6>\CLBY_@>/O1\K5#%$Q.6+].0#.4I```DC$W'V8BM
-MK8C0&<$GSW$X($NB-YJ0;''Z+XJ0$8Z<R94I```<``!`!,0*I0$;2`X"^Y>;
-M"!+U6Y=E*]Z*````'```0`7Q$LXFQ@;!&)YSYW>%%C*$*4%-S\,2MT;9-@0`
-MF`$``)@!```"````10`!E&FX``!`$0``P*@!`<"H`0(!]`'T`8`'9?&^UF1I
-M.'OL```````````A("((`````````7@B``!X````=`$"``P#```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``'CK2%+2\"%/;?.W[C'OJW;7=W_0LECC2]1$$(AH
-MYLH@`,@U1!7OX"?>%GZW/DBL:BJYQAKNY3C:?;6N_HF".O@E7^QD#1G4`-BA
-MJI'5/()LJ"?B5];P/`SVOQ$<G+=Y[%CK:MP+[^>LN<SEGO([(N?X'C[T?*U0
-MQ1,3EB_3D`SE*0``)(Q-Q]F(K:V(T!G!)\]Q."!+HC>:D&QQ^B^*D!&.G,F5
-M*0``'```0`3$"J4!&T@.`ON7FP@2]5N792O>B@```!P``$`%\1+.)L8&P1B>
-M<^=WA18RA"E!3<_#$K=&='@*`)@!``"8`0```@```$4``91INP``0!$``,"H
-M`0'`J`$"`?0!]`&`!V7QOM9D:3A[[```````````(2`B"`````````%X(@``
-M>````'0!`@`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"``!XZTA2TO`A3VWS
-MM^XQ[ZMVUW=_T+)8XTO41!"(:.;*(`#(-405[^`GWA9^MSY(K&HJN<8:[N4X
-MVGVUKOZ)@CKX)5_L9`T9U`#8H:J1U3R";*@GXE?6\#P,]K\1')RW>>Q8ZVK<
-M"^_GK+G,Y9[R.R+G^!X^]'RM4,43$Y8OTY`,Y2D``"2,3<?9B*VMB-`9P2?/
-M<3@@2Z(WFI!L<?HOBI`1CIS)E2D``!P``$`$Q`JE`1M(#@+[EYL($O5;EV4K
-MWHH````<``!`!?$2SB;&!L$8GG/G=X46,H0I04W/Q!*W1FF%"`"8`0``F`$`
-M``(```!%``&4:=T``$`1``#`J`$!P*@!`@'T`?0!@`=EXH!\#![5-3(`````
-M`````"$@(@@````````!>"(``'@```!T`0(`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``])_,`R&-"4'ZLN)$IJ-9SHR(C(M!IK>>_;[RU[K#L/NT;.YS
-M0-_/]]%QYF$X+ZB7@)@[P8'BI<#[NA7"6[!#LS0@SN[M`P2US)9<U9E7K$QW
-MN).A:S+\M!CG\W^B/>571MU59"Q"7S%CN!>1\HUMHN?%"Z-&'AW1M7NJ-]UU
-M@>,I```DH1L]"_4&7I.DQNR[D@+<`Y7;S/6$=!S..X_]3P!(#`TI```<``!`
-M!"&3D+170X(\=0*"P0\X;?X$8GJ%````'```0`5[?6=`0,NV&D":E*<<0R0)
-MJ7)-<,02MT:QL`L`F`$``)@!```"````10`!E&G>``!`$0``P*@!`<"H`0(!
-M]`'T`8`'9>*`?`P>U34R```````````A("((`````````7@B``!X````=`$"
-M``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``/2?S`,AC0E!^K+B1*:C6<Z,
-MB(R+0::WGOV^\M>ZP[#[M&SN<T#?S_?1<>9A."^HEX"8.\&!XJ7`^[H5PENP
-M0[,T(,[N[0,$M<R67-695ZQ,=[B3H6LR_+08Y_-_HCWE5T;=560L0E\Q8[@7
-MD?*-;:+GQ0NC1AX=T;5[JC?==8'C*0``)*$;/0OU!EZ3I,;LNY("W`.5V\SU
-MA'0<SCN/_4\`2`P-*0``'```0`0ADY"T5T."/'4"@L$/.&W^!&)ZA0```!P`
-M`$`%>WUG0$#+MAI`FI2G'$,D":ER37#%$K=&%K`"`)@!``"8`0```@```$4`
-M`91IWP``0!$``,"H`0'`J`$"`?0!]`&`!V7B@'P,'M4U,@``````````(2`B
-M"`````````%X(@``>````'0!`@`,`P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M``#TG\P#(8T)0?JRXD2FHUG.C(B,BT&FMY[]OO+7NL.P^[1L[G-`W\_WT7'F
-M83@OJ)>`F#O!@>*EP/NZ%<);L$.S-"#.[NT#!+7,EES5F5>L3'>XDZ%K,ORT
-M&.?S?Z(]Y5=&W55D+$)?,6.X%Y'RC6VBY\4+HT8>'=&U>ZHWW76!XRD``"2A
-M&ST+]09>DZ3&[+N2`MP#E=O,]81T',X[C_U/`$@,#2D``!P``$`$(9.0M%=#
-M@CQU`H+!#SAM_@1B>H4````<``!`!7M]9T!`R[8:0)J4IQQ#)`FI<DUPQA*W
-M1A^]``"8`0``F`$```(```!%``&4:>```$`1``#`J`$!P*@!`@'T`?0!@`=E
-MRQ0'?GB@7NT``````````"$@(@@````````!>"(``'@```!T`0,`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``BIWYT6BP4+H7D3>=6T)/ZG"W\M][BS`)
-MF]98E]A7E971#2]M!7G@TYK-]2;IVERG]>AA5/01FHFF?B]QL,"A%\ICF]C[
-MN.^^%8,Q*O-D-K0JRIH'(./M0!X1%4]'&NO+#XL797\F?'TLF($T>&&B<\"5
-MQ@,\3<+Y%!Z3'8IU`_PI```D0/2%9L9[5M^MQ1'!F3ZOO&!/E+]7U=/(2XG<
-M4Q?K@3TI```<``!`!),-2R/F?ZI08&&8B>ZHX4K4:'I%````'```0`5E"*MV
-M-ZCQ<40RJ1W"+1J7"SD:3,82MT:&Z`,`F`$``)@!```"````10`!E&GA``!`
-M$0``P*@!`<"H`0(!]`'T`8`'9<L4!WYXH%[M```````````A("((````````
-M`7@B``!X````=`$#``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``(J=^=%H
-ML%"Z%Y$WG5M"3^IPM_+?>XLP"9O66)?85Y65T0TO;05YX-.:S?4FZ=I<I_7H
-M853T$9J)IGXO<;#`H1?*8YO8^[COOA6#,2KS9#:T*LJ:!R#C[4`>$15/1QKK
-MRP^+%V5_)GQ]+)B!-'AAHG/`E<8#/$W"^10>DQV*=0/\*0``)$#TA6;&>U;?
-MK<41P9D^K[Q@3Y2_5]73R$N)W%,7ZX$]*0``'```0`23#4LCYG^J4&!AF(GN
-MJ.%*U&AZ10```!P``$`%90BK=C>H\7%$,JD=PBT:EPLY&DS&$K=&9BH*`)@!
-M``"8`0```@```$4``91IZ0``0!$``,"H`0'`J`$"`?0!]`&`!V7+%`=^>*!>
-M[0``````````(2`B"`````````%X(@``>````'0!`P`,`P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``"*G?G1:+!0NA>1-YU;0D_J<+?RWWN+,`F;UEB7V%>5
-ME=$-+VT%>>#3FLWU)NG:7*?UZ&%4]!&:B:9^+W&PP*$7RF.;V/NX[[X5@S$J
-M\V0VM"K*F@<@X^U`'A$53T<:Z\L/BQ=E?R9\?2R8@31X8:)SP)7&`SQ-POD4
-M'I,=BG4#_"D``"1`](5FQGM6WZW%$<&9/J^\8$^4OU?5T\A+B=Q3%^N!/2D`
-M`!P``$`$DPU+(^9_JE!@89B)[JCA2M1H>D4````<``!`!64(JW8WJ/%Q1#*I
-M'<(M&I<+.1I,QQ*W1CLX"`"8`0``F`$```(```!%``&4:?L``$`1``#`J`$!
-MP*@!`@'T`?0!@`=EK'3)=VO+\^T``````````"$@(@@````````!>"(``'@`
-M``!T`00`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``C%`^1@J_ZVP<<C#`
-M!4G[N=N`B0Y<7G##TW]57JVT4DI0^RBKAG.F#3H\ESK.054I`U]5Q%Y2M/J5
-M9#9LLC)TX%NT1KW3E1=/:.1\JMV*@_(*0,P.\J\G\(?&](F>%/V>?W[9%9[E
-ME>F*?+EB($ZC\]JRRA)QR#7D4/E=D76K$<8I```D^0I5\O.$\<2/NGHG!7;T
-M.L]C9;NW_4$K]UF+:V,'JE\I```<``!`!"G/2)>MZ,)G-P^NTS[]^\\803*/
-M````'```0`7<T0W'7V@':MXPA.E`%)MDJ&M3,L<2MT:O8@L`F`$``)@!```"
-M````10`!E&G^``!`$0``P*@!`<"H`0(!]`'T`8`'9:QTR7=KR_/M````````
-M```A("((`````````7@B``!X````=`$$``P#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``(Q0/D8*O^ML''(PP`5)^[G;@(D.7%YPP]-_55ZMM%)*4/LHJX9S
-MI@TZ/)<ZSD%5*0-?5<1>4K3ZE60V;+(R=.!;M$:]TY473VCD?*K=BH/R"D#,
-M#O*O)_"'QO2)GA3]GG]^V16>Y97IBGRY8B!.H_/:LLH2<<@UY%#Y79%UJQ'&
-M*0``)/D*5?+SA/'$C[IZ)P5V]#K/8V6[M_U!*_=9BVMC!ZI?*0``'```0`0I
-MSTB7K>C"9S</KM,^_?O/&$$RCP```!P``$`%W-$-QU]H!VK>,(3I0!2;9*AK
-M4S+($K=&_&$"`)@!``"8`0```@```$4``91J#```0!$``,"H`0'`J`$"`?0!
-M]`&`!V6L=,EW:\OS[0``````````(2`B"`````````%X(@``>````'0!!``,
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``",4#Y&"K_K;!QR,,`%2?NYVX")
-M#EQ><,/3?U5>K;122E#[**N&<Z8-.CR7.LY!52D#7U7$7E*T^I5D-FRR,G3@
-M6[1&O=.5%T]HY'RJW8J#\@I`S`[RKR?PA\;TB9X4_9Y_?MD5GN65Z8I\N6(@
-M3J/SVK+*$G'(->10^5V1=:L1QBD``"3Y"E7R\X3QQ(^Z>B<%=O0ZSV-EN[?]
-M02OW68MK8P>J7RD``!P``$`$*<](EZWHPF<W#Z[3/OW[SQA!,H\````<``!`
-M!=S1#<=?:`=JWC"$Z4`4FV2H:U,RR1*W1M)Z``"8`0``F`$```(```!%``&4
-M:I,``$`1``#`J`$!P*@!`@'T`?0!@`=E/9JEK>"CBV\``````````"$@(@@`
-M```````!>"(``'@```!T`0<`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MCL])JCCR%LV78.Y<'V:I8CT,,H\@`*[U3;S)VD$&FPE:0U/[<QCL'_+FIV10
-MPN5O,?5$&MWXD=]M6#`Y3`TA:I2IEN4ZOQ?ZA@Z6-Q#B08[D0U0"=N0'R=<#
-M\CCM$]9:5RR;YR:(J2`")_//4DA\PO3_T0#]\I)<?BG*0U'YBVDI```DT?"I
-MIV++=N?<FHN5,@"Y93Y#G0.5Z-MA2>W;;.SC$7\I```<``!`!$;.[4;O((B>
-M<MZ/Q\BG''I!JRC0````'```0`6#7`IR7*D6-_L9+^62SWD.<Y*B>\D2MT9Q
-MF@,`F`$``)@!```"````10`!E&J8``!`$0``P*@!`<"H`0(!]`'T`8`'93V:
-MI:W@HXMO```````````A("((`````````7@B``!X````=`$'``P#```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``([/2:HX\A;-EV#N7!]FJ6(]##*/(`"N]4V\
-MR=I!!IL)6D-3^W,8[!_RYJ=D4,+E;S'U1!K=^)'?;5@P.4P-(6J4J9;E.K\7
-M^H8.EC<0XD&.Y$-4`G;D!\G7`_(X[1/66E<LF^<FB*D@`B?SSU)(?,+T_]$`
-M_?*27'XIRD-1^8MI*0``)-'PJ:=BRW;GW)J+E3(`N64^0YT#E>C;84GMVVSL
-MXQ%_*0``'```0`1&SNU&[R"(GG+>C\?(IQQZ0:LHT````!P``$`%@UP*<ERI
-M%C?[&2_EDL]Y#G.2HGO)$K=&^-L)`)@!``"8`0```@```$4``91JG@``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V4]FJ6MX*.+;P``````````(2`B"`````````%X
-M(@``>````'0!!P`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"``".STFJ./(6
-MS9=@[EP?9JEB/0PRCR``KO5-O,G:00:;"5I#4_MS&.P?\N:G9%#"Y6\Q]40:
-MW?B1WVU8,#E,#2%JE*F6Y3J_%_J&#I8W$.)!CN1#5`)VY`?)UP/R..T3UEI7
-M+)OG)HBI(`(G\\]22'S"]/_1`/WRDEQ^*<I#4?F+:2D``"31\*FG8LMVY]R:
-MBY4R`+EE/D.=`Y7HVV%)[=ML[.,1?RD``!P``$`$1L[M1N\@B)YRWH_'R*<<
-M>D&K*-`````<``!`!8-<"G)<J18W^QDOY9+/>0YSDJ)[RA*W1FKI!P"8`0``
-MF`$```(```!%``&4:JT``$`1``#`J`$!P*@!`@'T`?0!@`=E#=D/M0^P`<$`
-M`````````"$@(@@````````!>"(``'@```!T`0@`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``G;0HYEJ@HL%]!W7<]L<L5:W]NOE9PHNVQ%PH=)W](U43
-M<W,E#CE!0VE;=STW97>G$_4%=U7@12$C:/6B"NE.MS$B0BZ.]M`!_^G-X3#<
-M<I*0PY[Q!%;!0M_J+*:!7/TQID^W4$)D\C#3D:?<W%&JQI6M:3E-.D:S@9+"
-M])L!8/TI```D;/.0(@U['BYI07JW`O:T_]4<-YQ6R_E-TY<*N=UPF3,I```<
-M``!`!)*R7VK*1>%,35LXL_$<^@)?#<`=````'```0`6X]P"T'DAYKU,#A5-"
-MOVI!?:F:;,H2MT9M%`L`F`$``)@!```"````10`!E&JR``!`$0``P*@!`<"H
-M`0(!]`'T`8`'90W9#[4/L`'!```````````A("((`````````7@B``!X````
-M=`$(``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``)VT*.9:H*+!?0=UW/;'
-M+%6M_;KY6<*+ML1<*'2=_2-5$W-S)0XY04-I6W<]-V5WIQ/U!7=5X$4A(VCU
-MH@KI3K<Q(D(NCO;0`?_IS>$PW'*2D,.>\016P4+?ZBRF@5S],:9/MU!"9/(P
-MTY&GW-Q1JL:5K6DY33I&LX&2PO2;`6#]*0``)&SSD"(->QXN:4%ZMP+VM/_5
-M'#><5LOY3=.7"KG=<)DS*0``'```0`22LE]JRD7A3$U;.+/Q'/H"7PW`'0``
-M`!P``$`%N/<`M!Y(>:]3`X530K]J07VIFFS+$K=&R!,"`)@!``"8`0```@``
-M`$4``91JQP``0!$``,"H`0'`J`$"`?0!]`&`!V4-V0^U#[`!P0``````````
-M(2`B"`````````%X(@``>````'0!"``,`P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"``"=M"CF6J"BP7T'==SVQRQ5K?VZ^5G"B[;$7"ATG?TC51-S<R4..4%#
-M:5MW/3=E=Z<3]05W5>!%(2-H]:(*Z4ZW,2)"+H[VT`'_Z<WA,-QRDI##GO$$
-M5L%"W^HLIH%<_3&F3[=00F3R,-.1I]S<4:K&E:UI.4TZ1K.!DL+TFP%@_2D`
-M`"1L\Y`B#7L>+FE!>K<"]K3_U1PWG%;+^4W3EPJYW7"9,RD``!P``$`$DK)?
-M:LI%X4Q-6SBS\1SZ`E\-P!T````<``!`!;CW`+0>2'FO4P.%4T*_:D%]J9IL
-MS!*W1L8?``"8`0``F`$```(```!%``&4:L\``$`1``#`J`$!P*@!`@'T`?0!
-M@`=EQ8N5_6W+.T@``````````"$@(@@````````!>"(``'@```!T`0D`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``T*4-7Z9:1#`#SRLZ0QI)EKIUE&)]
-M*#6E]LLJHYK]8'-=172W%52X991;%Y2PAF(J3.%MS:!4J9ODK+JC2T9>`\]0
-M?\L?$DF20_[73Y_S2U3WW:9-Q@(D@E[]O>K!7PR">I&_$GU/%W>3J5;3=^<B
-M:R+4DDHT&+(?D45(?68]!Y@I```DK#H]^(X9;<JDE$>?@G&,KOSIIC@P%*/9
-M^,#A_I9HSI\I```<``!`!".6S]?4.6#=T[>OAM$UO#0E7,7;````'```0`6@
-MEK)O"65'?!EIMJ.M(?QVN)N0B,P2MT8?3`,`F`$``)@!```"````10`!E&K0
-M``!`$0``P*@!`<"H`0(!]`'T`8`'9<6+E?UMRSM(```````````A("((````
-M`````7@B``!X````=`$)``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``-"E
-M#5^F6D0P`\\K.D,:29:Z=91B?2@UI?;+*J.:_6!S745TMQ54N&646Q>4L(9B
-M*DSA;<V@5*F;Y*RZHTM&7@//4'_+'Q))DD/^UT^?\TM4]]VF3<8")()>_;WJ
-MP5\,@GJ1OQ)]3Q=WDZE6TW?G(FLBU))*-!BR'Y%%2'UF/0>8*0``)*PZ/?B.
-M&6W*I)1'GX)QC*[\Z:8X,!2CV?C`X?Z6:,Z?*0``'```0`0CEL_7U#E@W=.W
-MKX;1-;PT)5S%VP```!P``$`%H):R;PEE1WP9:;:CK2'\=KB;D(C,$K=&M(T)
-M`)@!``"8`0```@```$4``91JT0``0!$``,"H`0'`J`$"`?0!]`&`!V7%BY7]
-M;<L[2```````````(2`B"`````````%X(@``>````'0!"0`,`P``#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"``#0I0U?IEI$,`//*SI#&DF6NG648GTH-:7VRRJC
-MFOU@<UU%=+<55+AEE%L7E+"&8BI,X6W-H%2IF^2LNJ-+1EX#SU!_RQ\229)#
-M_M=/G_-+5/?=IDW&`B2"7OV]ZL%?#()ZD;\2?4\7=Y.I5M-WYR)K(M222C08
-MLA^114A]9CT'F"D``"2L.CWXCAEMRJ241Y^"<8RN_.FF.#`4H]GXP.'^EFC.
-MGRD``!P``$`$(Y;/U]0Y8-W3MZ^&T36\-"5<Q=L````<``!`!:"6LF\)94=\
-M&6FVHZTA_':XFY"(S1*W1OZ:!P"8`0``F`$```(```!%``&4:M,``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=ER?LEB+'"WAH``````````"$@(@@````````!>"(`
-M`'@```!T`?@`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``7Y5J]G(G<216
-M+JMD;L^N&DN7W=7DVW,',P$OF\_<$B5W*95.O.2]R%LD.#UTN,,]/EN\X-E.
-M)N_M\H;2[/V&8Z$`H+=\+PF65D_.WF07+1_2<XT?2ZIJ&B6/9'#'=+RFCEL-
-MGU7!NJO(`$$E#GL4D5,)UB"QWXIN5)/?E+\/\:\I```D>]$7]`<3Z\1+`+WL
-M>!SKE3)?AP[R5`?YTPXD?\0ZV!4I```<``!`!$;AFJW3>E,!3*30&JO%L`/<
-M'5IQ````'```0`49=\]QAGT1,D/AY@;N+5^(VF:\$\T2MT8+Q@H`F`$``)@!
-M```"````10`!E&K4``!`$0``P*@!`<"H`0(!]`'T`8`'9<G[)8BQPMX:````
-M```````A("((`````````7@B``!X````=`'X``P#```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``%^5:O9R)W$D5BZK9&[/KAI+E]W5Y-MS!S,!+YO/W!(E=RF5
-M3KSDO<A;)#@]=+C#/3Y;O.#93B;O[?*&TNS]AF.A`*"W?"\)EE9/SMYD%RT?
-MTG.-'TNJ:AHECV1PQW2\IHY;#9]5P;JKR`!!)0Y[%)%3"=8@L=^*;E23WY2_
-M#_&O*0``)'O1%_0'$^O$2P"]['@<ZY4R7X<.\E0'^=,.)'_$.M@5*0``'```
-M0`1&X9JMTWI3`4RDT!JKQ;`#W!U:<0```!P``$`%&7?/<89]$3)#X>8&[BU?
-MB-IFO!/.$K=&9\4!`)@!``"8`0```@```$4``91JU0``0!$``,"H`0'`J`$"
-M`?0!]`&`!V7)^R6(L<+>&@``````````(2`B"`````````%X(@``>````'0!
-M^``,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"``!?E6KV<B=Q)%8NJV1NSZX:
-M2Y?=U>3;<P<S`2^;S]P2)7<IE4Z\Y+W(6R0X/72XPST^6[S@V4XF[^WRAM+L
-M_89CH0"@MWPO"9963\[>9!<M'])SC1]+JFH:)8]D<,=TO*:.6PV?5<&ZJ\@`
-M024.>Q214PG6(+'?BFY4D]^4OP_QKRD``"1[T1?T!Q/KQ$L`O>QX'.N5,E^'
-M#O)4!_G3#B1_Q#K8%2D``!P``$`$1N&:K=-Z4P%,I-`:J\6P`]P=6G$````<
-M``!`!1EWSW&&?1$R0^'F!NXM7XC:9KP3SA*W1O80#P"8`0``F`$```(```!%
-M``&4:M\``$`1``#`J`$!P*@!`@'T`?0!@`=E?%A-J>%;].X``````````"$@
-M(@@````````!>"(``'@```!T`?D`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``X>A1]L_[`NHDC0"',:"\/YCRZJ(A:4`#6=/(:*64"VM[U#]K-'+\*@F\
-M[$(=,CES1;B!-L7@/GM2SP40.M+(D'92])<SXUI!IJ(6</.;TVT8D;U_G-PA
-M\E=Q(OV\MIB[EXMTHQ=]H3/I]29RX%.1BJ8XIT:8E^I^!#<8O2([;C`I```D
-MQ=X]%D3!2)YI.E%Q66<A$5I.B@%C'<B.CE-Q*#4J3&TI```<``!`!`@/'`(X
-MH6K\L39351C^NGAM/@*Q````'```0`47IR[#KWWVD>?^M@")>I3"8(OPZ\\2
-MMT8$_@(`F`$``)@!```"````10`!E&KB``!`$0``P*@!`<"H`0(!]`'T`8`'
-M97Q83:GA6_3N```````````A("((`````````7@B``!X````=`'Y``P#```,
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``.'H4?;/^P+J)(T`AS&@O#^8\NJB(6E`
-M`UG3R&BEE`MK>]0_:S1R_"H)O.Q"'3(Y<T6X@3;%X#Y[4L\%$#K2R)!V4O27
-M,^-:0::B%G#SF]-M&)&]?YS<(?)7<2+]O+:8NY>+=*,7?:$SZ?4F<N!3D8JF
-M.*=&F)?J?@0W&+TB.VXP*0``),7>/19$P4B>:3I1<5EG(1%:3HH!8QW(CHY3
-M<2@U*DQM*0``'```0`0(#QP".*%J_+$V4U48_KIX;3X"L0```!P``$`%%Z<N
-MPZ]]]I'G_K8`B7J4PF"+\.O/$K=&CS\)`)@!``"8`0```@```$4``91JY```
-M0!$``,"H`0'`J`$"`?0!]`&`!V5\6$VIX5OT[@``````````(2`B"```````
-M``%X(@``>````'0!^0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#AZ%'V
-MS_L"ZB2-`(<QH+P_F/+JHB%I0`-9T\AHI90+:WO4/VLT<OPJ";SL0ATR.7-%
-MN($VQ>`^>U+/!1`ZTLB0=E+TES/C6D&FHA9P\YO3;1B1O7^<W"'R5W$B_;RV
-MF+N7BW2C%WVA,^GU)G+@4Y&*ICBG1IB7ZGX$-QB](CMN,"D``"3%WCT61,%(
-MGFDZ47%99R$16DZ*`6,=R(Z.4W$H-2I,;2D``!P``$`$"`\<`CBA:ORQ-E-5
-M&/ZZ>&T^`K$````<``!`!1>G+L.O??:1Y_ZV`(EZE,)@B_#KT!*W1A=/!P"8
-M`0``F`$```(```!%``&4:NP``$`1``#`J`$!P*@!`@'T`?0!@`=E(F@!'`_#
-M*F$``````````"$@(@@````````!>"(``'@```!T`?H`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``J="O5V_6K<H,$%J+VT<V837;I&_05TZYM!ROL26D
-M;B$%S.\(#&%P?L.&GU$^:0225670RRR1PK,VH[M7+/WS(,0G9_\=HNOCL+VG
-MBE@17IS\^N9O'W_)$.55"Y/4>0<-5=/E>2T-#S\K@C/OFWTQDX>DAEVSAD;X
-M60!E`0U&,10I```D=Q,39+J.M_2K\#GCRCK'H.*%4N5LU:VYFD([H+%;N$\I
-M```<``!`!,"&7\M!P8CQ(E*Z'8T(%\]W@2&(````'```0`7XY#8BIK%`=+;>
-M9+Y]YI'14W54JM`2MT8*>`H`F`$``)@!```"````10`!E&KP``!`$0``P*@!
-M`<"H`0(!]`'T`8`'92)H`1P/PRIA```````````A("((`````````7@B``!X
-M````=`'Z``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``*G0KU=OUJW*#!!:
-MB]M'-F$UVZ1OT%=.N;0<K[$EI&XA!<SO"`QA<'[#AI]1/FD$DE5ET,LLD<*S
-M-J.[5RS]\R#$)V?_':+KX["]IXI8$5Z<_/KF;Q]_R1#E50N3U'D'#573Y7DM
-M#0\_*X(S[YM],9.'I(9=LX9&^%D`90$-1C$4*0``)'<3$V2ZCK?TJ_`YX\HZ
-MQZ#BA5+E;-6MN9I".Z"Q6[A/*0``'```0`3`AE_+0<&(\2)2NAV-"!?/=X$A
-MB````!P``$`%^.0V(J:Q0'2VWF2^?>:1T5-U5*K1$K=&-7<!`)@!``"8`0``
-M`@```$4``91J\@``0!$``,"H`0'`J`$"`?0!]`&`!V4B:`$<#\,J80``````
-M````(2`B"`````````%X(@``>````'0!^@`,`P``#`$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``"IT*]7;]:MR@P06HO;1S9A-=ND;]!73KFT'*^Q):1N(07,[P@,
-M87!^PX:?43YI!))59=#++)'"LS:CNU<L_?,@Q"=G_QVBZ^.PO:>*6!%>G/SZ
-MYF\??\D0Y54+D]1Y!PU5T^5Y+0T//RN",^^;?3&3AZ2&7;.&1OA9`&4!#48Q
-M%"D``"1W$Q-DNHZW]*OP.>/*.L>@XH52Y6S5K;F:0CN@L5NX3RD``!P``$`$
-MP(9?RT'!B/$B4KH=C0@7SW>!(8@````<``!`!?CD-B*FL4!TMMYDOGWFD=%3
-M=52JT1*W1H;$#@"8`0``F`$```(```!%``&4:OH``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E"&UXC%V1@H4``````````"$@(@@````````!>"(``'@```!T`?T`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``U63"TF0U?C?G75[2%;UFU*%T
-MR4D5J[;4=($X=<%A^[-P%5?=`FHDM/15@6!+0N8-==3[=<P=?.H=0O:^TW(H
-M'[VT)?0:,"'"O`;U5K8>UB7&`J<$<H</@RQ3$]^J&QRIFC\8'-)EBI=H..B<
-M9MB'R4XHZH+Y;9.7.PB@PW(Z)[@I```D2?FL1]-7Y^W8<FXSH)2Z+A[!8+4:
-MGZO*^MY5*:-&W]HI```<``!`!'H$[?!0=B;EM+J//XR+5=')B!8Q````'```
-M0`7VX$.I/,1&%J+&*TZ=)I%)^RB`.-(2MT;0KP(`F`$``)@!```"````10`!
-ME&L```!`$0``P*@!`<"H`0(!]`'T`8`'90AM>(Q=D8*%```````````A("((
-M`````````7@B``!X````=`']``P#```,`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M`-5DPM)D-7XWYUU>TA6]9M2A=,E)%:NVU'2!.'7!8?NS<!57W0)J)+3T58%@
-M2T+F#774^W7,'7SJ'4+VOM-R*!^]M"7T&C`APKP&]5:V'M8EQ@*G!'*'#X,L
-M4Q/?JAL<J9H_&!S298J7:#CHG&;8A\E.*.J"^6V3ESL(H,-R.B>X*0``)$GY
-MK$?35^?MV')N,Z"4NBX>P6"U&I^KROK>52FC1M_:*0``'```0`1Z!.WP4'8F
-MY;2ZCS^,BU71R8@6,0```!P``$`%]N!#J3S$1A:BQBM.G2:12?LH@#C2$K=&
-M4_$(`)@!``"8`0```@```$4``91K!```0!$``,"H`0'`J`$"`?0!]`&`!V4(
-M;7B,79&"A0``````````(2`B"`````````%X(@``>````'0!_0`,`P``#`$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"``#59,+29#5^-^==7M(5O6;4H73)216KMM1T
-M@3AUP6'[LW`55]T":B2T]%6!8$M"Y@UUU/MUS!U\ZAU"]K[3<B@?O;0E]!HP
-M(<*\!O56MA[6)<8"IP1RAP^#+%,3WZH;'*F:/Q@<TF6*EV@XZ)QFV(?)3BCJ
-M@OEMDY<["*##<CHGN"D``"1)^:Q'TU?G[=AR;C.@E+HN'L%@M1J?J\KZWE4I
-MHT;?VBD``!P``$`$>@3M\%!V)N6TNH\_C(M5T<F(%C$````<``!`!?;@0ZD\
-MQ$86HL8K3ITFD4G[*(`XTQ*W1F'[!@"8`0``F`$```(```!%``&4:PH``$`1
-M``#`J`$!P*@!`@'T`?0!@`=EW@<*&Q71YOL``````````"$@(@@````````!
-M>"(``'@```!T`?X`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``U10=<4(J
-M9`9VR9E]Y%@WY2\`6#P@$&*H=X-?+,(SZ^&9!RJ:=(T3(\0RP!B$G:;+!P-D
-M=D8L**.X-7:N`66+1P>IT1@?*DF+'?W6G?YS>@9+RQ0?R-M2'Z,AH[LK<)->
-M55[\R#111%-I*0D"S.-/HHJ(N!%QLD-Z?_%!WM_(T$,I```D0F6DS=&_X[IK
-M,<`(&QCM<@^?U"H,FS#/`@]LN+2A=Z4I```<``!`!,42#RC5AA]BOV*U#RT5
-MM-R_V^Q,````'```0`5&6=U%YC2HD)]1H>OI,WMU6092HM,2MT:L*0H`F`$`
-M`)@!```"````10`!E&L+``!`$0``P*@!`<"H`0(!]`'T`8`'9=X'"AL5T>;[
-M```````````A("((`````````7@B``!X````=`'^``P#```,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``-44'7%"*F0&=LF9?>18-^4O`%@\(!!BJ'>#7RS",^OA
-MF0<JFG2-$R/$,L`8A)VFRP<#9'9&+"BCN#5VK@%EBT<'J=$8'RI)BQW]UIW^
-M<WH&2\L4'\C;4A^C(:.[*W"37E5>_,@T4413:2D)`LSC3Z**B+@1<;)#>G_Q
-M0=[?R-!#*0``)$)EI,W1O^.Z:S'`"!L8[7(/G]0J#)LPSP(/;+BTH7>E*0``
-M'```0`3%$@\HU88?8K]BM0\M%;3<O]OL3````!P``$`%1EG=1>8TJ)"?4:'K
-MZ3-[=5D&4J+4$K=&+"D!`)@!``"8`0```@```$4``91K$@``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V7>!PH;%='F^P``````````(2`B"`````````%X(@``>```
-M`'0!_@`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"``#5%!UQ0BID!G;)F7WD
-M6#?E+P!8/"`08JAW@U\LPC/KX9D'*IITC1,CQ#+`&(2=ILL'`V1V1BPHH[@U
-M=JX!98M'!ZG1&!\J28L=_=:=_G-Z!DO+%!_(VU(?HR&CNRMPDUY57OS(-%%$
-M4VDI"0+,XT^BBHBX$7&R0WI_\4'>W\C00RD``"1"9:3-T;_CNFLQP`@;&.UR
-M#Y_4*@R;,,\"#VRXM*%WI2D``!P``$`$Q1(/*-6&'V*_8K4/+16TW+_;[$P`
-M```<``!`!499W47F-*B0GU&AZ^DS>W59!E*BU!*W1G]X#@"8`0``F`$```(`
-M``!%``&4:R$``$`1``#`J`$!P*@!`@'T`?0!@`=E"^5U0NT@^=L`````````
-M`"$@(@@````````!>"(``'@```!T`?\`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``Y\J!,4HY818[6&CL?;C&TIY1`LBQC.-N.A5K]^+F@BSU%;'6U;U4
-MF,8+#F>?NPC&(:C'1?&+2TZ9Y38PK9ETK4ZI4!ZL=GL[G%50WW'4J=/GS)RN
-M(I_N"D&$*'(*:M<Z<T#3V=I0Z@!*IW__B;N`$K>6A<BSHNYJ$(*(FK#N/4TI
-M```D'L0ER_?'FR._=5#1\D,]9$BEXGUOR+;:45PJLS:$LXHI```<``!`!#S;
-M";`VJES`6;8H'4^L76FE>'QR````'```0`4LX2]:N;\K^A=.X\5N<$OP)-(.
-M`]42MT:280(`F`$``)@!```"````10`!E&LD``!`$0``P*@!`<"H`0(!]`'T
-M`8`'90OE=4+M(/G;```````````A("((`````````7@B``!X````=`'_``P#
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``.?*@3%*.6$6.UAH['VXQM*>40+(
-ML8SC;CH5:_?BYH(L]16QUM6]5)C&"PYGG[L(QB&HQT7QBTM.F>4V,*V9=*U.
-MJ5`>K'9[.YQ54-]QU*G3Y\R<KB*?[@I!A"AR"FK7.G-`T]G:4.H`2J=__XF[
-M@!*WEH7(LZ+N:A""B)JP[CU-*0``)![$)<OWQYLCOW50T?)#/61(I>)];\BV
-MVE%<*K,VA+.**0``'```0`0\VPFP-JI<P%FV*!U/K%UII7A\<@```!P``$`%
-M+.$O6KF_*_H73N/%;G!+\"32#@/5$K=&/J,(`)@!``"8`0```@```$4``91K
-M)@``0!$``,"H`0'`J`$"`?0!]`&`!V4+Y75"[2#YVP``````````(2`B"```
-M``````%X(@``>````'0!_P`,`P``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#G
-MRH$Q2CEA%CM8:.Q]N,;2GE$"R+&,XVXZ%6OWXN:"+/45L=;5O528Q@L.9Y^[
-M",8AJ,=%\8M+3IGE-C"MF72M3JE0'JQV>SN<55#?<=2IT^?,G*XBG^X*080H
-M<@IJUSIS0-/9VE#J`$JG?_^)NX`2MY:%R+.B[FH0@HB:L.X]32D``"0>Q"7+
-M]\>;([]U4-'R0SUD2*7B?6_(MMI17"JS-H2SBBD``!P``$`$/-L)L#:J7,!9
-MMB@=3ZQ=::5X?'(````<``!`!2SA+UJYOROZ%T[CQ6YP2_`DT@X#UA*W1I:U
-M!@"8`0``F`$```(```!%``&4:X\``$`1``#`J`$!P*@!`@'T`?0!@`=EW7=B
-M(^@JI#D``````````"$@(@@````````!>"(``'@```!T`0``#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``*.;V$>Z?=JV$<(+0LMI/&IVDX0_7X<L'C_%L
-M8Q$'#J)?'NL#CQY8@2+;R>YW)@RMG?`ML][4L_".5DKT59^RM:,6WW,2/U'T
-MO`=N.Q110^,&B-I#4H%,^)##?<YD]W@#."DTE'>>!Q,@<U*2ANHT+:Q[8QWI
-M>"+`8Y/T>SC#<-XI```D:T:,EGDG//'2RZI3HP8]=]MN7DW73/(N=!*V3*R!
-MU*HI```<``!`!%J(&"1._RN\=AE*%-_>S8CDPO#"````'```0`5NM=U`:>)D
-MAIWR@P.ZCV=W=LK*1M82MT:%VPD`F`$``)@!```"````10`!E&N0``!`$0``
-MP*@!`<"H`0(!]`'T`8`'9=UW8B/H*J0Y```````````A("((`````````7@B
-M``!X````=`$```P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``"CF]A'NGW:M
-MA'""T++:3QJ=I.$/U^'+!X_Q;&,1!PZB7Q[K`X\>6($BV\GN=R8,K9WP+;/>
-MU+/PCE9*]%6?LK6C%M]S$C]1]+P';CL444/C!HC:0U*!3/B0PWW.9/=X`S@I
-M-)1WG@<3('-2DH;J-"VL>V,=Z7@BP&.3]'LXPW#>*0``)&M&C)9Y)SSQTLNJ
-M4Z,&/7?;;EY-UTSR+G02MDRL@=2J*0``'```0`1:B!@D3O\KO'892A3?WLV(
-MY,+PP@```!P``$`%;K7=0&GB9(:=\H,#NH]G=W;*RD;7$K=&P=H``)@!``"8
-M`0```@```$4``91KDP``0!$``,"H`0'`J`$"`?0!]`&`!V7==V(CZ"JD.0``
-M````````(2`B"`````````%X(@``>````'0!```,`P``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"```HYO81[I]VK81P@M"RVD\:G:3A#]?ARP>/\6QC$0<.HE\>
-MZP./'EB!(MO)[G<F#*V=\"VSWM2S\(Y62O15G[*UHQ;?<Q(_4?2\!VX[%%%#
-MXP:(VD-2@4SXD,-]SF3W>`,X*324=YX'$R!S4I*&ZC0MK'MC'>EX(L!CD_1[
-M.,-PWBD``"1K1HR6>2<\\=++JE.C!CUWVVY>3==,\BYT$K9,K('4JBD``!P`
-M`$`$6H@8)$[_*[QV&4H4W][-B.3"\,(````<``!`!6ZUW4!IXF2&G?*#`[J/
-M9W=VRLI&UQ*W1A0I#@"8`0``F`$```(```!%``&4:Y<``$`1``#`J`$!P*@!
-M`@'T`?0!@`=EQJ*Q_AZX"1P``````````"$@(@@````````!>"(``'@```!T
-M`0(`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``3C8M;+XK,('Z7]YL.'?Z
-M13T+]N1S&3!.PA4K`$0:L)#UF*[G8Q!DEX4>6L(TR+P;&&1<`%UL5^BQQ<_3
-M4L]#OYU@QGK$MBYVU>Y$&M&GBC0^N\8B;@FC:[SKT)RQ,(F-D(784:+AC(MZ
-M!K!26]#@2BK42*!1>9M%VP&/^M9:8VLI```D=9V)UN..HN8<M7^&.T4]LHCG
-MC4IW+)='%6O].M37<:@I```<``!`!#95=D-?G9(:D@TL2R?KIS1K1W-#````
-M'```0`5`YNGSN,67ZXG\14AJCSO?(VAOH]@2MT93$P(`F`$``)@!```"````
-M10`!E&N9``!`$0``P*@!`<"H`0(!]`'T`8`'9<:BL?X>N`D<```````````A
-M("((`````````7@B``!X````=`$"``P#```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``$XV+6R^*S"!^E_>;#AW^D4]"_;D<QDP3L(5*P!$&K"0]9BNYV,09)>%
-M'EK"-,B\&QAD7`!=;%?HL<7/TU+/0[^=8,9ZQ+8N=M7N1!K1IXHT/KO&(FX)
-MHVN\Z]"<L3")C9"%V%&BX8R+>@:P4EO0X$HJU$B@47F;1=L!C_K66F-K*0``
-M)'6=B=;CCJ+F'+5_ACM%/;*(YXU*=RR71Q5K_3K4UW&H*0``'```0`0V579#
-M7YV2&I(-+$LGZZ<T:T=S0P```!P``$`%0.;I\[C%E^N)_$5(:H\[WR-H;Z/8
-M$K=&YE0(`)@!``"8`0```@```$4``91KG@``0!$``,"H`0'`J`$"`?0!]`&`
-M!V7&HK'^'K@)'```````````(2`B"`````````%X(@``>````'0!`@`,`P``
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"``!.-BULOBLP@?I?WFPX=_I%/0OVY',9
-M,$["%2L`1!JPD/68KN=C$&27A1Y:PC3(O!L89%P`76Q7Z+'%S]-2ST._G6#&
-M>L2V+G;5[D0:T:>*-#Z[QB)N":-KO.O0G+$PB8V0A=A1HN&,BWH&L%);T.!*
-M*M1(H%%YFT7;`8_ZUEIC:RD``"1UG8G6XXZBYARU?X8[13VRB.>-2G<LET<5
-M:_TZU-=QJ"D``!P``$`$-E5V0U^=DAJ2#2Q+)^NG-&M'<T,````<``!`!4#F
-MZ?.XQ9?KB?Q%2&J/.]\C:&^CV1*W1@*/!@"8`0``F`$```(```!%``&4:[L`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E'Q(4D8^P4(\``````````"$@(@@`````
-M```!>"(``'@```!T`0,`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``E2L5
-MH_X7;0_`SKB;Y6Z*,M"$7K:Z%@LF/+7\5D1D'N45!9,DC0:?T',\`]SBUE4E
-MC-[[!F^,/]41P,Z?'%;;::&HZ!#(/54KET'T=6^?5?M-&/'C.B&]7@E=G0>%
-M(IA)TVZ_BXOJH_IXCE),67O<78ZEDQOO8KQY%7_B,C!_DJ4I```D%C<G'LUD
-M\+AU'M]KHX*.##7DDB.(Q*;]O-E%E:*/Z+,I```<``!`!!B0)RCM&Y.(M6L'
-M>J"0R.KYZ]_Z````'```0`6H<NO5UR2_T#X,$O0&[/KH63!F<MD2MT9JM`D`
-MF`$``)@!```"````10`!E&N^``!`$0``P*@!`<"H`0(!]`'T`8`'91\2%)&/
-ML%"/```````````A("((`````````7@B``!X````=`$#``P#```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``)4K%:/^%VT/P,ZXF^5NBC+0A%ZVNA8+)CRU_%9$
-M9![E%063)(T&G]!S/`/<XM95)8S>^P9OC#_5$<#.GQQ6VVFAJ.@0R#U5*Y=!
-M]'5OGU7[31CQXSHAO5X)79T'A2*82=-NOXN+ZJ/Z>(Y23%E[W%V.I9,;[V*\
-M>15_XC(P?Y*E*0``)!8W)Q[-9/"X=1[?:Z."C@PUY)(CB,2F_;S9196BC^BS
-M*0``'```0`08D"<H[1N3B+5K!WJ@D,CJ^>O?^@```!P``$`%J'+KU=<DO]`^
-M#!+T!NSZZ%DP9G+:$K=&CK,``)@!``"8`0```@```$4``91KP```0!$``,"H
-M`0'`J`$"`?0!]`&`!V4?$A21C[!0CP``````````(2`B"`````````%X(@``
-M>````'0!`P`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"``"5*Q6C_A=M#\#.
-MN)OE;HHRT(1>MKH6"R8\M?Q61&0>Y14%DR2-!I_0<SP#W.+6526,WOL&;XP_
-MU1'`SI\<5MMIH:CH$,@]52N70?1U;Y]5^TT8\>,Z(;U>"5V=!X4BF$G3;K^+
-MB^JC^GB.4DQ9>]Q=CJ63&^]BO'D5?^(R,'^2I2D``"06-R<>S63PN'4>WVNC
-M@HX,->22(XC$IOV\V465HH_HLRD``!P``$`$&)`G*.T;DXBU:P=ZH)#(ZOGK
-MW_H````<``!`!:ARZ]77)+_0/@P2]`;L^NA9,&9RVA*W1DH$#@"8`0``F`$`
-M``(```!%``&4;`,``$`1``#`J`$!P*@!`@'T`?0!@`=E@Y?8-M)OT.H`````
-M`````"$@(@@````````!>"(``'@```!T`00`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``_S*C0NBQ0@Q[-8.'KUB=@U`:Y._IO3%C;D!-SZ]CDTYQX.RQ
-MT8H7)54]5@+_V_<\9H74TYE2DENROU(L##1\EG$`VK2.3SMV)/I>;FF@!?18
-M]0&)B_4GCZH'-H??LC8)P9!V*OSA+LZNHP4<^JX^]5$X7;$-.0]68=7M+0QB
-M^B@I```DV/K="\Q%!88[UYNZZ-"+[QIO[>`+\\68L>Z+KX-O<[@I```<``!`
-M!&%)!1)&M88Q/*E*CI)T2$`&!ZZ=````'```0`6/K"M@@L(<F(X<AUS1IQF?
-MJ+^[U=L2MT8K[`$`F`$``)@!```"````10`!E&P(``!`$0``P*@!`<"H`0(!
-M]`'T`8`'98.7V#;2;]#J```````````A("((`````````7@B``!X````=`$$
-M``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``/\RHT+HL4(,>S6#AZ]8G8-0
-M&N3OZ;TQ8VY`3<^O8Y-.<>#LL=&*%R55/58"_]OW/&:%U-.94I);LK]2+`PT
-M?)9Q`-JTCD\[=B3Z7FYIH`7T6/4!B8OU)X^J!S:'W[(V"<&0=BK\X2[.KJ,%
-M'/JN/O51.%VQ#3D/5F'5[2T,8OHH*0``)-CZW0O,106&.]>;NNC0B^\:;^W@
-M"_/%F+'NBZ^#;W.X*0``'```0`1A20421K6&,3RI2HZ2=$A`!@>NG0```!P`
-M`$`%CZPK8(+"')B.'(=<T:<9GZB_N]7;$K=&P"T(`)@!``"8`0```@```$4`
-M`91L$0``0!$``,"H`0'`J`$"`?0!]`&`!V6#E]@VTF_0Z@``````````(2`B
-M"`````````%X(@``>````'0!!``,`P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M``#_,J-"Z+%"#'LU@X>O6)V#4!KD[^F],6-N0$W/KV.33G'@[+'1BA<E53U6
-M`O_;]SQFA=33F5*26[*_4BP,-'R6<0#:M(Y/.W8D^EYN::`%]%CU`8F+]2>/
-MJ@<VA]^R-@G!D'8J_.$NSJZC!1SZKC[U43A=L0TY#U9AU>TM#&+Z*"D``"38
-M^MT+S$4%ACO7F[KHT(OO&F_MX`OSQ9BQ[HNO@V]SN"D``!P``$`$84D%$D:U
-MAC$\J4J.DG1(0`8'KIT````<``!`!8^L*V""PAR8CAR'7-&G&9^HO[O5W!*W
-M1EL[!@"8`0``F`$```(```!%``&4;!L``$`1``#`J`$!P*@!`@'T`?0!@`=E
-MHF7FO05SP9\``````````"$@(@@````````!>"(``'@```!T`04`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``Q1,=0EAHUJ.E6RR0\9\-Q&7GJ;ZM#F'U
-M<%S!BMM_*UUY258LR"B(D]>E"+Z`E/&T,OU?&YJY-;G+SYPVAXLI@R60D[CU
-MW@XM1P=]Q:K&.)FD<2`D]F`Q[\9VJ@0:7UB\X."8CY@ZH2Y)M32^9BZ)24(V
-MQ7_._8Q%IG#Y;3YV<3$I```DPQ;E1CKFAYS2"]_!>P!W8_MM'%)[;^D\U!`;
-M\@\+NS@I```<``!`!-M,L9!,Z.DE:04I1@>+V.05:X]C````'```0`4(QK14
-M,%;`T$=:+%G,0][?(3-%^=P2MT8Y9@D`F`$``)@!```"````10`!E&P=``!`
-M$0``P*@!`<"H`0(!]`'T`8`'9:)EYKT%<\&?```````````A("((````````
-M`7@B``!X````=`$%``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``,43'4)8
-M:-:CI5LLD/&?#<1EYZF^K0YA]7!<P8K;?RM=>4E6+,@HB)/7I0B^@)3QM#+]
-M7QN:N36YR\^<-H>+*8,ED).X]=X.+4<'?<6JQCB9I'$@)/9@,>_&=JH$&E]8
-MO.#@F(^8.J$N2;4TOF8NB4E"-L5_SOV,1:9P^6T^=G$Q*0``),,6Y48ZYH><
-MT@O?P7L`=V/[;1Q2>V_I/-00&_(/"[LX*0``'```0`3;3+&03.CI)6D%*48'
-MB]CD%6N/8P```!P``$`%",:T5#!6P-!'6BQ9S$/>WR$S1?G=$K=&CV4``)@!
-M``"8`0```@```$4``91L)0``0!$``,"H`0'`J`$"`?0!]`&`!V6B9>:]!7/!
-MGP``````````(2`B"`````````%X(@``>````'0!!0`,`P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``#%$QU"6&C6HZ5;+)#QGPW$9>>IOJT.8?5P7,&*VW\K
-M77E)5BS(*(B3UZ4(OH"4\;0R_5\;FKDUN<O/G#:'BRF#)9"3N/7>#BU'!WW%
-MJL8XF:1Q("3V8#'OQG:J!!I?6+S@X)B/F#JA+DFU-+YF+HE)0C;%?\[]C$6F
-M</EM/G9Q,2D``"3#%N5&.N:'G-(+W\%[`'=C^VT<4GMOZ3S4$!OR#PN[."D`
-M`!P``$`$VTRQD$SHZ25I!2E&!XO8Y!5KCV,````<``!`!0C&M%0P5L#01UHL
-M6<Q#WM\A,T7YW1*W1NBP#0"8`0``F`$```(```!%``&4;"P``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E<MG][D+IHM<``````````"$@(@@````````!>"(``'@`
-M``!T`0@`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``E3N!&;N5[LS[5<UW
-MTA]+'@80P.&B[,NV,DL!/4LX\H''PS^6GOCL!`U%?ZTF26KFA+AIWUO'*J1T
-MH+`+LE3X+]W#I0D7$\*_^*X4DO-$%RB.'ER03+-;R*&<&IO"3B0T%OV+I[UB
-M0X,:E!@`((=T*0[`$15="^OD9<PRW,#;,#,I```D^4@Q>B>M(:]NWW+D^&+8
-M=S>&CW&&S,7ACA6@'L7B^GHI```<``!`!&9;@>Z"6`!X3N:4/*G5!QD,1/J]
-M````'```0`7;*[38C?V40[-=3\$1!IA=%BU+P-X2MT;TG0$`F`$``)@!```"
-M````10`!E&PQ``!`$0``P*@!`<"H`0(!]`'T`8`'97+9_>Y"Z:+7````````
-M```A("((`````````7@B``!X````=`$(``P#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``)4[@1F[E>[,^U7-=](?2QX&$,#AHNS+MC)+`3U+./*!Q\,_EI[X
-M[`0-17^M)DEJYH2X:=];QRJD=*"P"[)4^"_=PZ4)%Q/"O_BN%)+S1!<HCAY<
-MD$RS6\BAG!J;PDXD-!;]BZ>]8D.#&I08`""'="D.P!$570OKY&7,,MS`VS`S
-M*0``)/E(,7HGK2&O;M]RY/ABV'<WAH]QALS%X8X5H![%XOIZ*0``'```0`1F
-M6X'N@E@`>$[FE#RIU0<9#$3ZO0```!P``$`%VRNTV(W]E$.S74_!$0:8718M
-M2\#>$K=&>-\'`)@!``"8`0```@```$4``91L,P``0!$``,"H`0'`J`$"`?0!
-M]`&`!V5RV?WN0NFBUP``````````(2`B"`````````%X(@``>````'0!"``,
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``"5.X$9NY7NS/M5S7?2'TL>!A#`
-MX:+LR[8R2P$]2SCR@<?#/Y:>^.P$#45_K29):N:$N&G?6\<JI'2@L`NR5/@O
-MW<.E"1<3PK_XKA22\T07*(X>7)!,LUO(H9P:F\).)#06_8NGO6)#@QJ4&``@
-MAW0I#L`1%5T+Z^1ES#+<P-LP,RD``"3Y2#%Z)ZTAKV[?<N3X8MAW-X:/<8;,
-MQ>&.%:`>Q>+Z>BD``!P``$`$9EN![H)8`'A.YI0\J=4'&0Q$^KT````<``!`
-M!=LKM-B-_91#LUU/P1$&F%T6+4O`WQ*W1K+N!0"8`0``F`$```(```!%``&4
-M;#L``$`1``#`J`$!P*@!`@'T`?0!@`=E4."=9$OB@K```````````"$@(@@`
-M```````!>"(``'@```!T`0D`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M"`M(KG:"C63G7L/Y4U)`]PFP&&],&(S*0058WN\7S=>ZVXC/5D$9:6^PH;RH
-M1XWV=%$"+)$7@0--*632J7'`EX-]JJ>4JZ))F%Y=S(8)1[A2X=U"UV-#JO?G
-MV/Q!GP>-IFX]ZZTBRGV0/RJU6:1;>5;\JLG?Z;OO&$65V.I!]"\I```DWMO*
-M<6<X3V4;SMZ&D2CKN=^N(A[_^]+U``Y&P6S106`I```<``!`!*R$@`[.3Z;!
-M+(X[-6:HX$Z`L;3N````'```0`7=BV_GACCDNW\%IZOJP3_"&,;36M\2MT8;
-M&`D`F`$``)@!```"````10`!E&Q```!`$0``P*@!`<"H`0(!]`'T`8`'95#@
-MG61+XH*P```````````A("((`````````7@B``!X````=`$)``P#```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(```@+2*YV@HUDYU[#^5-20/<)L!AO3!B,RD$%
-M6-[O%\W7NMN(SU9!&6EOL*&\J$>-]G11`BR1%X$#32EDTJEQP)>#?:JGE*NB
-M29A>7<R&"4>X4N'=0M=C0ZKWY]C\09\'C:9N/>NM(LI]D#\JM5FD6WE6_*K)
-MW^F[[QA%E=CJ0?0O*0``)-[;RG%G.$]E&\[>AI$HZ[G?KB(>__O2]0`.1L%L
-MT4%@*0``'```0`2LA(`.SD^FP2R..S5FJ.!.@+&T[@```!P``$`%W8MOYX8X
-MY+M_!:>KZL$_PAC&TUK@$K=&(A<``)@!``"8`0```@```$4``91L0@``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V50X)UD2^*"L```````````(2`B"`````````%X
-M(@``>````'0!"0`,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"```("TBN=H*-
-M9.=>P_E34D#W";`8;TP8C,I!!5C>[Q?-U[K;B,]601EI;["AO*A'C?9T40(L
-MD1>!`TTI9-*I<<"7@WVJIY2KHDF87EW,A@E'N%+AW4+78T.J]^?8_$&?!XVF
-M;CWKK2+*?9`_*K59I%MY5ORJR=_IN^\81978ZD'T+RD``"3>V\IQ9SA/91O.
-MWH:1*.NYWZXB'O_[TO4`#D;!;-%!8"D``!P``$`$K(2`#LY/IL$LCCLU9JC@
-M3H"QM.X````<``!`!=V+;^>&..2[?P6GJ^K!/\(8QM-:X!*W1K9C#0"8`0``
-MF`$```(```!%``&4;%@``$`1``#`J`$!P*@!`@'T`?0!@`=ETKN_O;+(%J,`
-M`````````"$@(@@````````!>"(``'@```!T`0H`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``^]`?-B2/!+01:.#'GOQ2VRYFIX!L[PW]H+6&T\.E')@)
-M5YOAWK/UJ6(?>X]Y8<VK]Q1><U)K6ZXTG<:^(C)V(J,#E-*]G=\NC2N>!-=5
-MESLYL@5$&BX,\@.+.W2JHL6\<E*.A\E[I2`,$"]:Q>FY8MLNQJD12K[$W(I+
-M,N>)^(8I```D7<=CF.K%I*0>`>PO8LSP3_H,AHK?:H'45!MA2V=U.U$I```<
-M``!`!+CD1RJ1KM%<.%9MOFM8PN.23+(O````'```0`7F\&)T.F6Q#'$H+I^S
-M:O+DNFK+@.$2MT;53P$`F`$``)@!```"````10`!E&Q>``!`$0``P*@!`<"H
-M`0(!]`'T`8`'9=*[O[VRR!:C```````````A("((`````````7@B``!X````
-M=`$*``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``/O0'S8DCP2T$6C@QY[\
-M4MLN9J>`;.\-_:"UAM/#I1R8"5>;X=ZS]:EB'WN/>6'-J_<47G-2:UNN-)W&
-MOB(R=B*C`Y32O9W?+HTKG@3759<[.;(%1!HN#/(#BSMTJJ+%O')2CH?)>Z4@
-M#!`O6L7IN6+;+L:I$4J^Q-R*2S+GB?B&*0``)%W'8YCJQ:2D'@'L+V+,\$_Z
-M#(:*WVJ!U%0;84MG=3M1*0``'```0`2XY$<JD:[17#A6;;YK6,+CDDRR+P``
-M`!P``$`%YO!B=#IEL0QQ*"Z?LVKRY+IJRX#A$K=&9)$'`)@!``"8`0```@``
-M`$4``91L8```0!$``,"H`0'`J`$"`?0!]`&`!V72N[^]LL@6HP``````````
-M(2`B"`````````%X(@``>````'0!"@`,`P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"``#[T!\V)(\$M!%HX,>>_%+;+F:G@&SO#?V@M8;3PZ4<F`E7F^'>L_6I
-M8A][CWEAS:OW%%YS4FM;KC2=QKXB,G8BHP.4TKV=WRZ-*YX$UU67.SFR!40:
-M+@SR`XL[=*JBQ;QR4HZ'R7NE(`P0+UK%Z;EBVR[&J1%*OL3<BDLRYXGXABD`
-M`"1=QV.8ZL6DI!X!["]BS/!/^@R&BM]J@=14&V%+9W4[42D``!P``$`$N.1'
-M*I&NT5PX5FV^:UC"XY),LB\````<``!`!>;P8G0Z9;$,<2@NG[-J\N2Z:LN`
-MXA*W1IN=!0"8`0``F`$```(```!%``&4;&X``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E6)!'=6H-X_D``````````"$@(@@````````!>"(``'@```!T`?\`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``A7*SX&)@@>>+7TL@\\P5I/L[\%-3
-MSU'Y!9"!STB7&/*]VWP1GVB@V+WILQQMNU2BW//F\(LJ/PC0ZJ6N,8(+1C7O
-M@L`C5_[S@+>&\ZN/V`"_.U9:I.=*E>B((>7\].1A@JF:`2LXF$8B+'ORKJ;2
-MLL4!-8AG<P$<#]%%CP88X&,I```D:')U]#\\!GH6H;G#.$T3_$)B<89?*?/Y
-MQLP#E/'G]XXI```<``!`!$S(+PZ<,I<!N-*&5QO=0&$953>7````'```0`4[
-MR$PHR618#PW.;3R;$ZRKU,?VEN(2MT;/R0@`F`$``)@!```"````10`!E&QQ
-M``!`$0``P*@!`<"H`0(!]`'T`8`'95B01W5J#>/Y```````````A("((````
-M`````7@B``!X````=`'_``P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``(5R
-ML^!B8('GBU]+(//,%:3[._!34\]1^060@<](EQCRO=M\$9]HH-B]Z;,<;;M4
-MHMSSYO"+*C\(T.JEKC&""T8U[X+`(U?^\X"WAO.KC]@`OSM66J3G2I7HB"'E
-M_/3D88*IF@$K.)A&(BQ[\JZFTK+%`36(9W,!'`_118\&&.!C*0``)&AR=?0_
-M/`9Z%J&YPSA-$_Q"8G&&7RGS^<;,`Y3QY_>.*0``'```0`1,R"\.G#*7`;C2
-MAE<;W4!A&54WEP```!P``$`%.\A,*,ED6`\-SFT\FQ.LJ]3']I;B$K=&8`L/
-M`)@!``"8`0```@```$4``91L=P``0!$``,"H`0'`J`$"`?0!]`&`!V58D$=U
-M:@WC^0``````````(2`B"`````````%X(@``>````'0!_P`,`P``#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"``"%<K/@8F"!YXM?2R#SS!6D^SOP4U//4?D%D('/
-M2)<8\KW;?!&?:*#8O>FS'&V[5*+<\^;PBRH_"-#JI:XQ@@M&->^"P"-7_O.`
-MMX;SJX_8`+\[5EJDYTJ5Z(@AY?STY&&"J9H!*SB81B(L>_*NIM*RQ0$UB&=S
-M`1P/T46/!AC@8RD``"1H<G7T/SP&>A:AN<,X31/\0F)QAE\I\_G&S`.4\>?W
-MCBD``!P``$`$3,@O#IPREP&XTH97&]U`81E5-Y<````<``!`!3O(3"C)9%@/
-M#<YM/)L3K*O4Q_:6XQ*W1AT7#0"8`0``F`$```(```!%``&4;'T``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=E`TL-++I!^CX``````````"$@(@@````````!>"(`
-M`'@```!T`8``#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``'*HA@CIKPS7S
-M"L!^RHDWK;WUH*WI+68()4ZG&<8&+C.4A"\-*-T[8I-6MG3W'K9&&K9'_L@#
-MYI'N%F!H.ZGC7FU+,TKDZ4.&#\A3R8HT4^N=75$QF'><D\+(!#/S\FLA+P^-
-M'8]7G:V5`?*[&@@N(GR#J@6)-,V<*^Y9U*3FDALI```DSVD610.5)W%^15TQ
-MCJQ2H\P[D_/=<]]Y50WS"E^T!E(I```<``!`!#R$/'_3&SLG9"T%!-+_>N$-
-MN[DP````'```0`6W<C$Y=*TO7<%O[N*$#J0MEFM/).02MT9N`0$`F`$``)@!
-M```"````10`!E&R!``!`$0``P*@!`<"H`0(!]`'T`8`'90-+#2RZ0?H^````
-M```````A("((`````````7@B``!X````=`&```P#```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``!RJ(8(Z:\,U\PK`?LJ)-ZV]]:"MZ2UF""5.IQG&!BXSE(0O
-M#2C=.V*35K9T]QZV1AJV1_[(`^:1[A9@:#NIXUYM2S-*Y.E#A@_(4\F*-%/K
-MG5U1,9AWG)/"R`0S\_)K(2\/C1V/5YVME0'RNQH(+B)\@ZH%B33-G"ON6=2D
-MYI(;*0``),]I%D4#E2=Q?D5=,8ZL4J/,.Y/SW7/?>54-\PI?M`92*0``'```
-M0`0\A#Q_TQL[)V0M!032_WKA#;NY,````!P``$`%MW(Q.72M+UW!;^[BA`ZD
-M+99K3R3D$K=&`T,'`)@!``"8`0```@```$4``91L@@``0!$``,"H`0'`J`$"
-M`?0!]`&`!V4#2PTLND'Z/@``````````(2`B"`````````%X(@``>````'0!
-M@``,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"```<JB&".FO#-?,*P'[*B3>M
-MO?6@K>DM9@@E3J<9Q@8N,Y2$+PTHW3MBDU:V=/<>MD8:MD?^R`/FD>X68&@[
-MJ>->;4LS2N3I0X8/R%/)BC13ZYU=43&8=YR3PL@$,_/R:R$O#XT=CU>=K94!
-M\KL:""XB?(.J!8DTS9PK[EG4I.:2&RD``"3/:19%`Y4G<7Y%73&.K%*CS#N3
-M\]USWWE5#?,*7[0&4BD``!P``$`$/(0\?],;.R=D+04$TO]ZX0V[N3`````<
-M``!`!;=R,3ETK2]=P6_NXH0.I"V6:T\DY1*W1C]1!0"8`0``F`$```(```!%
-M``&4;(P``$`1``#`J`$!P*@!`@'T`?0!@`=EHIX7<X:7*M4``````````"$@
-M(@@````````!>"(``'@```!T`0$!#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``O')GI$SV'8"?(9EZ\F#3`X=?ZABBZA?H\8L+2:OK:2MY;08>N0(60[=`
-M$'*U6"43&V-*(3KI85-;--YO\37]?4K%MT2B>-6YW20B.K_)!9'K*9,&>>%$
-MOC1GQUF!#?S/R6'VR<_)H@)[^Y@$[%)\,+N4?:,F/O4^Q"U\[P)5Y70I```D
-M!N-!H*%B8*/_UYF`1_"PVP%L/X2L2X'7T%G!^/)JS=8I```<``!`!)EE3RVZ
-M?SNHC%Y9'*:02I]\WF[-````'```0`5?0D=J%=FF'A842D1&^)H/U1`,QN42
-MMT:.>P@`F`$``)@!```"````10`!E&R/``!`$0``P*@!`<"H`0(!]`'T`8`'
-M9:*>%W.&ERK5```````````A("((`````````7@B``!X````=`$!`0P#```,
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``+QR9Z1,]AV`GR&9>O)@TP.'7^H8HNH7
-MZ/&+"TFKZVDK>6T&'KD"%D.W0!!RM5@E$QMC2B$ZZ6%36S3>;_$U_7U*Q;=$
-MHGC5N=TD(CJ_R061ZRF3!GGA1+XT9\=9@0W\S\EA]LG/R:(">_N8!.Q2?#"[
-ME'VC)C[U/L0M?.\"5>5T*0``)`;C0:"A8F"C_]>9@$?PL-L!;#^$K$N!U]!9
-MP?CR:LW6*0``'```0`2994\MNG\[J(Q>61RFD$J??-YNS0```!P``$`%7T)'
-M:A79IAX6%$I$1OB:#]40#,;E$K=&%;T.`)@!``"8`0```@```$4``91LDP``
-M0!$``,"H`0'`J`$"`?0!]`&`!V6BGA=SAI<JU0``````````(2`B"```````
-M``%X(@``>````'0!`0$,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``"\<F>D
-M3/8=@)\AF7KR8-,#AU_J&*+J%^CQBPM)J^MI*WEM!AZY`A9#MT`0<K58)1,;
-M8THA.NEA4ULTWF_Q-?U]2L6W1*)XU;G=)"(ZO\D%D>LIDP9YX42^-&?'68$-
-M_,_)8?;)S\FB`GO[F`3L4GPPNY1]HR8^]3[$+7SO`E7E="D``"0&XT&@H6)@
-MH__7F8!'\+#;`6P_A*Q+@=?06<'X\FK-UBD``!P``$`$F65/+;I_.ZB,7ED<
-MII!*GWS>;LT````<``!`!5]"1VH5V:8>%A1*1$;XF@_5$`S&YA*W1L#,#`"8
-M`0``F`$```(```!%``&4;*$``$`1``#`J`$!P*@!`@'T`?0!@`=E@1&`1!X?
-MP<P``````````"$@(@@````````!>"(``'@```!T`0$!#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``5HKHZPF?A%_;R@S#=$ICSE2PC/G)U`<'W0<%U(RK
-M$;5$T6+C(2>O$'=K1[]\P;V:@Z@(WM,,.O!TV,#!!7^*__ZRU$49:'*6;3(Q
-M?AG5/8I=KO%_5:7C9^)JZ2CK/["P,5(!/20-;`;MX000X54EUKG,MUZI7HEF
-MSX.A"+;\77HI```DAH$]XM5)7RB4913QMS<:/[1^`?"!"B46@0WCG#GN6ZTI
-M```<``!`!*;QV1T1S&1"Z,*75A%67U[^%&B>````'```0`7E"BL%[$%F^<+S
-MYSNJ!3XZR]FH8.<2MT9/LP``F`$``)@!```"````10`!E&RF``!`$0``P*@!
-M`<"H`0(!]`'T`8`'98$1@$0>'\',```````````A("((`````````7@B``!X
-M````=`$!`0P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``%:*Z.L)GX1?V\H,
-MPW1*8\Y4L(SYR=0'!]T'!=2,JQ&U1-%BXR$GKQ!W:T>_?,&]FH.H"-[3##KP
-M=-C`P05_BO_^LM1%&6AREFTR,7X9U3V*7:[Q?U6EXV?B:NDHZS^PL#%2`3TD
-M#6P&[>$$$.%5)=:YS+=>J5Z)9L^#H0BV_%UZ*0``)(:!/>+525\HE&44\;<W
-M&C^T?@'P@0HE%H$-XYPY[ENM*0``'```0`2F\=D=$<QD0NC"EU815E]>_A1H
-MG@```!P``$`%Y0HK!>Q!9OG"\^<[J@4^.LO9J&#G$K=&X/0&`)@!``"8`0``
-M`@```$4``91LK@``0!$``,"H`0'`J`$"`?0!]`&`!V6!$8!$'A_!S```````
-M````(2`B"`````````%X(@``>````'0!`0$,`P``#`$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``!6BNCK"9^$7]O*#,-T2F/.5+",^<G4!P?=!P74C*L1M4318N,A
-M)Z\0=VM'OWS!O9J#J`C>TPPZ\'38P,$%?XK__K+411EH<I9M,C%^&=4]BEVN
-M\7]5I>-GXFKI*.L_L+`Q4@$])`UL!NWA!!#A5276N<RW7JE>B6;/@Z$(MOQ=
-M>BD``"2&@3WBU4E?*)1E%/&W-QH_M'X!\($*)1:!#>.<.>Y;K2D``!P``$`$
-MIO'9'1',9$+HPI=6$59?7OX4:)X````<``!`!>4**P7L06;YPO/G.ZH%/CK+
-MV:A@Z!*W1K'_!`"8`0``F`$```(```!%``&4;+8``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E1%1Q^1Q'K$```````````"$@(@@````````!>"(``'@```!T`0$"
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``:+DA*7GGZKYV1A]ATW6:1BYM
-MJO"W].F8@TC%N4]K@$,L_?S$B%_,>H_MC*.Y[?34*<-*B8NED/(WE0NM.ZGL
-MY4LV.YC.KK:!T(8*QF>ZE,Z`?HVUG*T4O[.YTRA+@1Z1A7DN_C$]1'KRQEB#
-MIZ3VND69C>M2FA>/SEU%IQX7XTLI```DRX65N1LCY]N77@S(4P42&.ZUOC'5
-MN;,1N289E0O/AU\I```<``!`!"*5,.<RR0SIY,'&FP*L'1`!,H;W````'```
-M0`7TOW,$VAF+,$!#BTW,>`D17&@RV.@2MT90+0@`F`$``)@!```"````10`!
-ME&RX``!`$0``P*@!`<"H`0(!]`'T`8`'9414<?D<1ZQ````````````A("((
-M`````````7@B``!X````=`$!`@P#```,`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M`&BY(2EYY^J^=D8?8=-UFD8N;:KPM_3IF(-(Q;E/:X!#+/W\Q(A?S'J/[8RC
-MN>WTU"G#2HF+I9#R-Y4+K3NI[.5+-CN8SJZV@="&"L9GNI3.@'Z-M9RM%+^S
-MN=,H2X$>D85Y+OXQ/41Z\L98@Z>D]KI%F8WK4IH7C\Y=1:<>%^-+*0``),N%
-ME;D;(^?;EUX,R%,%$ACNM;XQU;FS$;DF&94+SX=?*0``'```0`0BE3#G,LD,
-MZ>3!QIL"K!T0`3*&]P```!P``$`%]+]S!-H9BS!`0XM-S'@)$5QH,MCH$K=&
-MZVX.`)@!``"8`0```@```$4``91LP0``0!$``,"H`0'`J`$"`?0!]`&`!V5$
-M5''Y'$>L0```````````(2`B"`````````%X(@``>````'0!`0(,`P``#`$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"``!HN2$I>>?JOG9&'V'3=9I&+FVJ\+?TZ9B#
-M2,6Y3VN`0RS]_,2(7\QZC^V,H[GM]-0IPTJ)BZ60\C>5"ZT[J>SE2S8[F,ZN
-MMH'0A@K&9[J4SH!^C;6<K12_L[G3*$N!'I&%>2[^,3U$>O+&6(.GI/:Z19F-
-MZU*:%X_.746G'A?C2RD``"3+A96Y&R/GVY=>#,A3!1(8[K6^,=6YLQ&Y)AF5
-M"\^'7RD``!P``$`$(I4PYS+)#.GDP<:;`JP=$`$RAO<````<``!`!?2_<P3:
-M&8LP0$.+3<QX"1%<:#+8Z1*W1@)]#`"8`0``F`$```(```!%``&4;,8``$`1
-M``#`J`$!P*@!`@'T`?0!@`=EJJ[\9P+1Y=H``````````"$@(@@````````!
-M>"(``'@```!T`0$##`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``K4.Q0@*:
-MU1G(N.YQUFH6&<;-<ET+P9=H#<3_J[Y?#286[,JHF\-V`74:;]59J;1.^-1U
-M\@`=[ZI9VS.EYLON6,)&A(W^K2OH$R'5ZZE5K=WL.T@B3J^U(YBFE;[JF,?U
-MBL>@`=\ZCGY]M?DHZ$3Z!>V-$B;V.2I;8I@QC'/E,HHI```D:PE!VB]OOYP,
-MT7*?2)I26/76ATUD@I]>W:-F,^SA_[4I```<``!`!`U;VA<`:@((*5.9R?%A
-MUW_=0UV>````'```0`5'Y-BY]?,&'I=9<_;T&MRI!QI6(NH2MT8490``F`$`
-M`)@!```"````10`!E&S)``!`$0``P*@!`<"H`0(!]`'T`8`'9:JN_&<"T>7:
-M```````````A("((`````````7@B``!X````=`$!`PP#```,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``*U#L4("FM49R+CN<=9J%AG&S7)="\&7:`W$_ZN^7PTF
-M%NS*J)O#=@%U&F_56:FT3OC4=?(`'>^J6=LSI>;+[EC"1H2-_JTKZ!,AU>NI
-M5:W=[#M((DZOM2.8II6^ZIC']8K'H`'?.HY^?;7Y*.A$^@7MC1(F]CDJ6V*8
-M,8QSY3***0``)&L)0=HO;[^<#-%RGTB:4ECUUH=-9(*?7MVC9C/LX?^U*0``
-M'```0`0-6]H7`&H"""E3F<GQ8==_W4-=G@```!P``$`%1^38N?7S!AZ767/V
-M]!K<J0<:5B+J$K=&N:8&`)@!``"8`0```@```$4``91LS@``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V6JKOQG`M'EV@``````````(2`B"`````````%X(@``>```
-M`'0!`0,,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"``"M0[%"`IK5&<BX[G'6
-M:A89QLUR70O!EV@-Q/^KOE\-)A;LRJB;PW8!=1IOU5FIM$[XU'7R`!WOJEG;
-M,Z7FR^Y8PD:$C?ZM*^@3(=7KJ56MW>P[2").K[4CF*:5ONJ8Q_6*QZ`!WSJ.
-M?GVU^2CH1/H%[8T2)O8Y*EMBF#&,<^4RBBD``"1K"4':+V^_G`S1<I](FE)8
-M]=:'362"GU[=HV8S[.'_M2D``!P``$`$#5O:%P!J`@@I4YG)\6'7?]U#79X`
-M```<``!`!4?DV+GU\P8>EUES]O0:W*D'&E8BZQ*W1G*P!`"8`0``F`$```(`
-M``!%``&4;-D``$`1``#`J`$!P*@!`@'T`?0!@`=E@;TO85HE1XX`````````
-M`"$@(@@````````!>"(``'@```!T`0$$#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``QIO'W<H#6PF3#P;*^U8@GP6Y"*YA=ZY_0X4*C7!Z`3?LC^C8T,BU
-M$WFIA\LLR8=?HBYD?TLN0Z7BGY[\55V=<#NE>DLZ!QT7F]OA?8U6SZQ[%.4`
-M-(^BPBB_%29BHCQX3>0J^Q>%90`O0ZZ%)(*-LT"I7%B_IK*U"U*IZAM:;*PI
-M```DMN:?J>$_7*TEXULO1G&..MJ/(*6,5&VVJI!`G?O:+I4I```<``!`!%=5
-MIC:M$.Q6)4:;JI7@`2U^(UZG````'```0`4MNC/]PC+$-HY8Z$I8I25)NY?$
-MG^L2MT8>WP<`F`$``)@!```"````10`!E&S<``!`$0``P*@!`<"H`0(!]`'T
-M`8`'98&]+V%:)4>.```````````A("((`````````7@B``!X````=`$!!`P#
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``,:;Q]W*`UL)DP\&ROM6()\%N0BN
-M87>N?T.%"HUP>@$W[(_HV-#(M1-YJ8?++,F'7Z(N9']++D.EXI^>_%5=G7`[
-MI7I+.@<=%YO;X7V-5L^L>Q3E`#2/HL(HOQ4F8J(\>$WD*OL7A64`+T.NA22"
-MC;-`J5Q8OZ:RM0M2J>H;6FRL*0``)+;FGZGA/URM)>-;+T9QCCK:CR"EC%1M
-MMJJ00)W[VBZ5*0``'```0`175:8VK1#L5B5&FZJ5X`$M?B->IP```!P``$`%
-M+;HS_<(RQ#:.6.A*6*4E2;N7Q)_K$K=&K2`.`)@!``"8`0```@```$4``91L
-MXP``0!$``,"H`0'`J`$"`?0!]`&`!V6!O2]A6B5'C@``````````(2`B"```
-M``````%X(@``>````'0!`00,`P``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#&
-MF\?=R@-;"9,/!LK[5B"?!;D(KF%WKG]#A0J-<'H!-^R/Z-C0R+43>:F'RRS)
-MAU^B+F1_2RY#I>*?GOQ579UP.Z5Z2SH''1>;V^%]C5;/K'L4Y0`TCZ+"*+\5
-M)F*B/'A-Y"K[%X5E`"]#KH4D@HVS0*E<6+^FLK4+4JGJ&UILK"D``"2VYI^I
-MX3]<K27C6R]&<8XZVH\@I8Q4;;:JD$"=^]HNE2D``!P``$`$5U6F-JT0[%8E
-M1INJE>`!+7XC7J<````<``!`!2VZ,_W",L0VCECH2EBE)4F[E\2?[!*W1ITM
-M#`"8`0``F`$```(```!%``&4;.8``$`1``#`J`$!P*@!`@'T`?0!@`=E/VR>
-M*?YE_%```````````"$@(@@````````!>"(``'@```!T`0$'#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``#I+I.IT9"6>CLTYYX6"+>KG3%/GVT1;O`Q.*
-M#XBYJ').K%3/!1\)3_M<83!^]$H5TM$8$OJXE-TUJ@+5PJS`CIQVQR,4/R>B
-MT6,_181J;\A-_@@2B3WW[_)D3>/`GXGOB?;V\$KQI0)1]/R$Q(J7*T53*K-I
-MS!L.,XLLYNR`M+TI```DSVP>_9H7/++#V<J0UZYDM:G2T&@Y]CW9K7__+JUS
-MJ]DI```<``!`!.J=@%:;BVNW<_%N$3^U$^+!>$8!````'```0`5)'V'<2L?T
-M^.2[L;G8>+U`Z!6,<NT2MT:_%@``F`$``)@!```"````10`!E&SH``!`$0``
-MP*@!`<"H`0(!]`'T`8`'93]LGBG^9?Q0```````````A("((`````````7@B
-M``!X````=`$!!PP#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(```Z2Z3J=&0EG
-MH[-.>>%@BWJYTQ3Y]M$6[P,3B@^(N:AR3JQ4SP4?"4_[7&$P?O1*%=+1&!+Z
-MN)3=-:H"U<*LP(Z<=L<C%#\GHM%C/T6$:F_(3?X($HD]]^_R9$WCP)^)[XGV
-M]O!*\:4"4?3\A,2*ERM%4RJS:<P;#C.++.;L@+2]*0``),]L'OV:%SRRP]G*
-MD->N9+6ITM!H.?8]V:U__RZM<ZO9*0``'```0`3JG8!6FXMKMW/Q;A$_M1/B
-MP7A&`0```!P``$`%21]AW$K']/CDN[&YV'B]0.@5C'+M$K=&=%@&`)@!``"8
-M`0```@```$4``91L[@``0!$``,"H`0'`J`$"`?0!]`&`!V4_;)XI_F7\4```
-M````````(2`B"`````````%X(@``>````'0!`0<,`P``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"```.DNDZG1D)9Z.S3GGA8(MZN=,4^?;1%N\#$XH/B+FH<DZL
-M5,\%'PE/^UQA,'[T2A72T1@2^KB4W36J`M7"K,".G';'(Q0_)Z+18S]%A&IO
-MR$W^"!*)/??O\F1-X\"?B>^)]O;P2O&E`E'T_(3$BI<K15,JLVG,&PXSBRSF
-M[("TO2D``"3/;![]FA<\LL/9RI#7KF2UJ=+0:#GV/=FM?_\NK7.KV2D``!P`
-M`$`$ZIV`5IN+:[=S\6X1/[43XL%X1@$````<``!`!4D?8=Q*Q_3XY+NQN=AX
-MO4#H%8QR[A*W1@EE!`"8`0``F`$```(```!%``&4;/P``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E#F+!'8>9R!```````````"$@(@@````````!>"(``'@```!T
-M`0$(#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``YR?.H+(YRG4(?$&'%@RJ
-M!B1H6XQIR/LW_<P>A&:ICVPTC,L**@XNU[]B4PRBC)U=6.ZI'DF-8I;)'C$]
-MEEL9P5LE*VKX7!^,(^I$(X9CU.-E[U%5%K\+Y$(H?"6,8N)ES,B+E/>P'AL;
-M5;V%^2G5WN^L(3[:\2S<6>#A\SY+QDDI```D41+/BV%)?$+)QIXY*#Z'&+T[
-M;N5._Y#$J#0<:0ED0-<I```<``!`!+3%G$%(N[F@<9Z&E!97V5J!RW1/````
-M'```0`5,COMGJ@C5VUS?F3-+=%7WKQXD#.X2MT;DD`<`F`$``)@!```"````
-M10`!E&T!``!`$0``P*@!`<"H`0(!]`'T`8`'90YBP1V'F<@0```````````A
-M("((`````````7@B``!X````=`$!"`P#```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``.<GSJ"R.<IU"'Q!AQ8,J@8D:%N,:<C[-_W,'H1FJ8]L-(S+"BH.+M>_
-M8E,,HHR=75CNJ1Y)C6*6R1XQ/99;&<%;)2MJ^%P?C"/J1".&8]3C9>]151:_
-M"^1"*'PEC&+B9<S(BY3WL!X;&U6]A?DIU=[OK"$^VO$LW%G@X?,^2\9)*0``
-M)%$2SXMA27Q"R<:>.2@^AQB].V[E3O^0Q*@T'&D)9$#7*0``'```0`2TQ9Q!
-M2+NYH'&>AI065]E:@<MT3P```!P``$`%3([[9ZH(U=M<WYDS2W15]Z\>)`SN
-M$K=&==(-`)@!``"8`0```@```$4``91M!P``0!$``,"H`0'`J`$"`?0!]`&`
-M!V4.8L$=AYG($```````````(2`B"`````````%X(@``>````'0!`0@,`P``
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"``#G)\Z@LCG*=0A\08<6#*H&)&A;C&G(
-M^S?]S!Z$9JF/;#2,RPHJ#B[7OV)3#**,G5U8[JD>28UBELD>,3V66QG!6R4K
-M:OA<'XPCZD0CAF/4XV7O4546OPOD0BA\)8QBXF7,R(N4][`>&QM5O87Y*=7>
-M[ZPA/MKQ+-Q9X.'S/DO&22D``"11$L^+84E\0LG&GCDH/H<8O3MNY4[_D,2H
-M-!QI"61`URD``!P``$`$M,6<04B[N:!QGH:4%E?96H'+=$\````<``!`!4R.
-M^V>J"-7;7-^9,TMT5?>O'B0,[Q*W1H/@"P"8`0``F`$```(```!%``&4;0D`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E\#E9-<3I$R8``````````"$@(@@`````
-M```!>"(``'@```!T`0$)#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``:R@*
-MWG'2Q,%(#V&;-LI2"_7'BI#\@-3-*RS_\+O3JBUG8YTP)H/>;PNH*:@KDF;]
-MP7^_F$F_>N9ZA:\=!EJ`JSJ8/^9$[I`59=:]YX65&<P<YQN(@B41`+2YAF5'
-M:8$$.JGU<PJR<$#G*2EB(_X>^^5)U"*T)GC11CFBMU#[X:0I```DL1*+-M7<
-M"3OZ*'%/`B"K%V^6HGBE/KV*F_IKEW\8LI<I```<``!`!(X`I>P_4S)JI]A5
-MD]NUEO.R=`&?````'```0`4,01H6[^FN9,-`Q+TKL\9LD]D&2^\2MT;`"@\`
-MF`$``)@!```"````10`!E&T*``!`$0``P*@!`<"H`0(!]`'T`8`'9?`Y637$
-MZ1,F```````````A("((`````````7@B``!X````=`$!"0P#```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``&LH"MYQTL3!2`]AFS;*4@OUQXJ0_(#4S2LL__"[
-MTZHM9V.=,":#WF\+J"FH*Y)F_<%_OYA)OWKF>H6O'09:@*LZF#_F1.Z0%676
-MO>>%E1G,'.<;B((E$0"TN89E1VF!!#JI]7,*LG!`YRDI8B/^'OOE2=0BM"9X
-MT48YHK=0^^&D*0``)+$2BS;5W`D[^BAQ3P(@JQ=OEJ)XI3Z]BIOZ:Y=_&+*7
-M*0``'```0`2.`*7L/U,R:J?859/;M9;SLG0!GP```!P``$`%#$$:%N_IKF3#
-M0,2]*[/&;)/9!DOP$K=&3@H&`)@!``"8`0```@```$4``91M#P``0!$``,"H
-M`0'`J`$"`?0!]`&`!V7P.5DUQ.D3)@``````````(2`B"`````````%X(@``
-M>````'0!`0D,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"``!K*`K><=+$P4@/
-M89LVRE(+]<>*D/R`U,TK+/_PN].J+6=CG3`F@]YO"Z@IJ"N29OW!?[^82;]Z
-MYGJ%KQT&6H"K.I@_YD3ND!5EUKWGA949S!SG&XB")1$`M+F&94=I@00ZJ?5S
-M"K)P0.<I*6(C_A[[Y4G4(K0F>-%&.:*W4/OAI"D``"2Q$HLVU=P)._HH<4\"
-M(*L7;Y:B>*4^O8J;^FN7?QBRERD``!P``$`$C@"E[#]3,FJGV%63V[66\[)T
-M`9\````<``!`!0Q!&A;OZ:YDPT#$O2NSQFR3V09+\1*W1O`4!`"8`0``F`$`
-M``(```!%``&4;14``$`1``#`J`$!P*@!`@'T`?0!@`=E]7Z9DU&>E,$`````
-M`````"$@(@@````````!>"(``'@```!T`0'W#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``J)KPN[80LY(4K$(F=-.T]/5[`F(6'9-:>RBRL[]$"*'K.=8;
-M-G'U^%I\B?V8EXZFR5S+WR=M$;BG@(S=&O%`B&K8^.IN6EJ/4=9$*-^66N*R
-MNL69T*!5%1[$SW8$`<=/ZKLO\IZAS:.!`$.8S5>GU;08-1)AV-SN>;1!5_P\
-MK8<I```D6]SOJ`W>7S4I:RZOH"U6-H==AW$#%P(_UY8]'6+\-V<I```<``!`
-M!(Z-$X[M/-FGPV@V?PVC_0>SGSL=````'```0`4&Y,-B_QN13%:%EXME+W5B
-M3A:D0/$2MT::0@<`F`$``)@!```"````10`!E&T6``!`$0``P*@!`<"H`0(!
-M]`'T`8`'9?5^F9-1GI3!```````````A("((`````````7@B``!X````=`$!
-M]PP#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``*B:\+NV$+.2%*Q")G33M/3U
-M>P)B%AV36GLHLK._1`BAZSG6&S9Q]?A:?(G]F)>.ILE<R]\G;1&XIX",W1KQ
-M0(AJV/CJ;EI:CU'61"C?EEKBLKK%F="@514>Q,]V!`''3^J[+_*>H<VC@0!#
-MF,U7I]6T&#428=C<[GFT05?\/*V'*0``)%O<[Z@-WE\U*6LNKZ`M5C:'78=Q
-M`Q<"/]>6/1UB_#=G*0``'```0`2.C1..[3S9I\-H-G\-H_T'LY\['0```!P`
-M`$`%!N3#8O\;D4Q6A9>+92]U8DX6I$#Q$K=&.H0-`)@!``"8`0```@```$4`
-M`91M%P``0!$``,"H`0'`J`$"`?0!]`&`!V7U?IF349Z4P0``````````(2`B
-M"`````````%X(@``>````'0!`?<,`P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M``"HFO"[MA"SDA2L0B9TT[3T]7L"8A8=DUI[*+*SOT0(H>LYUALV<?7X6GR)
-M_9B7CJ;)7,O?)VT1N*>`C-T:\4"(:MCXZFY:6H]1UD0HWY9:XK*ZQ9G0H%45
-M'L3/=@0!QT_JNR_RGJ'-HX$`0YC-5Z?5M!@U$F'8W.YYM$%7_#RMARD``"1;
-MW.^H#=Y?-2EK+J^@+58VAUV'<0,7`C_7ECT=8OPW9RD``!P``$`$CHT3CNT\
-MV:?#:#9_#:/]![.?.QT````<``!`!0;DPV+_&Y%,5H67BV4O=6).%J1`\A*W
-M1CR2"P"8`0``F`$```(```!%``&4;24``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M\:(:EDZ'#F4``````````"$@(@@````````!>"(``'@```!T`0'X#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``C+9#W&NNY#VF5F9DZE>.9(,.65*BP>-E
-MXPR:.]RZJZ,C$\^XJ`S.P?71$9I;B0?X<>C>3NQ\X0`AX)S^NKV6P2_`#\`Z
-MAG?YX'9(D54#-^(+9\47L'(3^7=$GUNPFQCOPB4T/<EHRF]A;"(_G@PTQ^D8
-M@TN[^6_[W=*FZ1*KJ1\I```D.5>1"`?,!"E4.*/$:&%.4W.L`R"YL$BG$*4I
-M_@@"<Q,I```<``!`!'XL)%5G-'6=9^E!$[>BUG'X!#"\````'```0`720*KM
-M%L/O3?9(90LZ/[V:T=>*/?(2MT:=O`X`F`$``)@!```"````10`!E&TG``!`
-M$0``P*@!`<"H`0(!]`'T`8`'9?&B&I9.APYE```````````A("((````````
-M`7@B``!X````=`$!^`P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``(RV0]QK
-MKN0]IE9F9.I7CF2##EE2HL'C9>,,FCO<NJNC(Q//N*@,SL'UT1&:6XD'^''H
-MWD[L?.$`(>"<_KJ]EL$OP`_`.H9W^>!V2)%5`S?B"V?%%[!R$_EW1)];L)L8
-M[\(E-#W):,IO86PB/YX,-,?I&(-+N_EO^]W2IND2JZD?*0``)#E7D0@'S`0I
-M5#BCQ&AA3E-SK`,@N;!(IQ"E*?X(`G,3*0``'```0`1^+"159S1UG6?I01.W
-MHM9Q^`0PO````!P``$`%TD"J[1;#[TWV2&4+.C^]FM'7BCWS$K=&V[L%`)@!
-M``"8`0```@```$4``91M*```0!$``,"H`0'`J`$"`?0!]`&`!V7QHAJ63H<.
-M90``````````(2`B"`````````%X(@``>````'0!`?@,`P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``",MD/<:Z[D/:969F3J5XYD@PY94J+!XV7C#)H[W+JK
-MHR,3S[BH#,[!]=$1FEN)!_AQZ-Y.['SA`"'@G/ZZO9;!+\`/P#J&=_G@=DB1
-M50,WX@MGQ1>P<A/Y=T2?6[";&._")30]R6C*;V%L(C^>##3'Z1B#2[OY;_O=
-MTJ;I$JNI'RD``"0Y5Y$(!\P$*50XH\1H84Y3<ZP#(+FP2*<0I2G^"`)S$RD`
-M`!P``$`$?BPD56<T=9UGZ4$3MZ+6<?@$,+P````<``!`!=)`JNT6P^]-]DAE
-M"SH_O9K1UXH]]!*W1LK)`P"8`0``F`$```(```!%``&4;3,``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E2\T5:R//H-,``````````"$@(@@````````!>"(``'@`
-M``!T`0'Y#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``]B5],M=L^0N?#:T.
-MQMGJ1*MA&&PZ;J#Q!Q;Z?1T1X./"^DS<L9BQU#T5A;@86WR]R!@+4%](8-/Y
-M#];2P0N6BA&KDH-@(E3DDTEYQ)X<T488YUBOYRR?K8?LZ9[5N87!DTB>M-'^
-M`V-X?(*EMCO&D@>#(PR1Y.I/3H[N%'FY/WPI```DA[3(>B<0@F;"G^`UZXFG
-ME^%+X%LB^E7.R.)1.%4E0\XI```<``!`!&NWGG+P_$R>-_;FDM!YDW')"2A!
-M````'```0`7NJ[!4X./ZTA+BO7'UUY5"RG_0#/02MT:H]`8`F`$``)@!```"
-M````10`!E&TV``!`$0``P*@!`<"H`0(!]`'T`8`'94O-%6LCSZ#3````````
-M```A("((`````````7@B``!X````=`$!^0P#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``/8E?3+7;/D+GPVM#L;9ZD2K81AL.FZ@\0<6^GT=$>#CPOI,W+&8
-ML=0]%86X&%M\O<@8"U!?2&#3^0_6TL$+EHH1JY*#8")4Y)-)><2>'-%&&.=8
-MK^<LGZV'[.F>U;F%P9-(GK31_@-C>'R"I;8[QI('@R,,D>3J3TZ.[A1YN3]\
-M*0``)(>TR'HG$()FPI_@->N)IY?A2^!;(OI5SLCB43A5)4/.*0``'```0`1K
-MMYYR\/Q,GC?VYI+0>9-QR0DH00```!P``$`%[JNP5.#C^M(2XKUQ]=>50LI_
-MT`ST$K=&]C4-`)@!``"8`0```@```$4``91M.```0!$``,"H`0'`J`$"`?0!
-M]`&`!V5+S15K(\^@TP``````````(2`B"`````````%X(@``>````'0!`?D,
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``#V)7TRUVSY"Y\-K0[&V>I$JV$8
-M;#INH/$'%OI]'1'@X\+Z3-RQF+'4/16%N!A;?+W(&`M07TA@T_D/UM+!"Y:*
-M$:N2@V`B5.2327G$GAS11ACG6*_G+)^MA^SIGM6YA<&32)ZTT?X#8WA\@J6V
-M.\:2!X,C#)'DZD].CNX4>;D_?"D``"2'M,AZ)Q""9L*?X#7KB:>7X4O@6R+Z
-M5<[(XE$X525#SBD``!P``$`$:[>><O#\3)XW]N:2T'F3<<D)*$$````<``!`
-M!>ZKL%3@X_K2$N*]<?77E4+*?]`,]1*W1OY""P"8`0``F`$```(```!%``&4
-M;3T``$`1``#`J`$!P*@!`@'T`?0!@`=E"T9:+NOGB[```````````"$@(@@`
-M```````!>"(``'@```!T`0'\#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MLZJ@,VQ%^+X[$(*[B>.I4LQBY@IF`UQ[T11"J+%TR)>!<4;FHPXNGF@1+3Z9
-MNVKRA=<[X752J^<E2='=<QJ@IW#UAJ_QG"D$P40,`)74_M20TYE6!:?B7Z76
-M6,ZW`-P*]#M5UA3&R,"&Z:9HU4=BAG=5)>Z011Q/EM+\O:^[7-XI```DU:N&
-ML@J(GB9UIK:[[+6F/1)EVK+9T.4%\24680UMFLPI```<``!`!-5=6=Z<>#$S
-MLQZ712$O5Q>:BR\8````'```0`68XY2-YG=YX:`P.MG;N)1].[26L/42MT:*
-M;@X`F`$``)@!```"````10`!E&U```!`$0``P*@!`<"H`0(!]`'T`8`'90M&
-M6B[KYXNP```````````A("((`````````7@B``!X````=`$!_`P#```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``+.JH#-L1?B^.Q""NXGCJ5+,8N8*9@-<>]$4
-M0JBQ=,B7@7%&YJ,.+IYH$2T^F;MJ\H77.^%U4JOG)4G1W7,:H*=P]8:O\9PI
-M!,%$#`"5U/[4D-.95@6GXE^EUEC.MP#<"O0[5=84QLC`ANFF:-5'8H9W527N
-MD$4<3Y;2_+VONUS>*0``)-6KAK(*B)XF=::VN^RUICT29=JRV=#E!?$E%F$-
-M;9K,*0``'```0`3575G>G'@Q,[,>ET4A+U<7FHLO&````!P``$`%F..4C>9W
-M>>&@,#K9V[B4?3NTEK#V$K=&I6T%`)@!``"8`0```@```$4``91M0@``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V4+1EHNZ^>+L```````````(2`B"`````````%X
-M(@``>````'0!`?P,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"``"SJJ`S;$7X
-MOCL0@KN)XZE2S&+F"F8#7'O1%$*HL73(EX%Q1N:C#BZ>:!$M/IF[:O*%USOA
-M=5*KYR5)T=US&J"G</6&K_&<*03!1`P`E=3^U)#3F58%I^)?I=98SK<`W`KT
-M.U76%,;(P(;IIFC51V*&=U4E[I!%'$^6TOR]K[M<WBD``"35JX:R"HB>)G6F
-MMKOLM:8]$F7:LMG0Y07Q)19A#6V:S"D``!P``$`$U5U9WIQX,3.S'I=%(2]7
-M%YJ++Q@````<``!`!9CCE(WF=WGAH#`ZV=NXE'T[M):P]Q*W1H5Y`P"8`0``
-MF`$```(```!%``&4;4H``$`1``#`J`$!P*@!`@'T`?0!@`=E_55LP`@=01$`
-M`````````"$@(@@````````!>"(``'@```!T`0']#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@```=$%$IU?P@O6'=BT03'J_,`<],5-C\X4B*R6VO\QB^=6
-M4I[4G0/"GPR'@AEH/M+->8I'GUZ%=&Q>%8;6Q8JF+4$A0>(G(Y*H[$\=H9\2
-MC->J7>1EJ6B=2:!1)7E*:^Z)B)66/*2&/&^R8SZ73A![BZ,"'XG8!5;8N.W1
-MYCTKT?,I```D14K*X.,R*A*^J=<.G8(Q=L3JN'B)U7@MI6O=>ELM\&HI```<
-M``!`!&=T:M!KGP;O?)DJP6!V@+-+_HA:````'```0`5W^JG^N#-L+2P)\/""
-MTT!HN[^<8_<2MT8AI@8`F`$``)@!```"````10`!E&U+``!`$0``P*@!`<"H
-M`0(!]`'T`8`'9?U5;,`('4$1```````````A("((`````````7@B``!X````
-M=`$!_0P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(```'1!1*=7\(+UAW8M$$Q
-MZOS`'/3%38_.%(BLEMK_,8OG5E*>U)T#PI\,AX(9:#[2S7F*1Y]>A71L7A6&
-MUL6*IBU!(4'B)R.2J.Q/':&?$HS7JEWD9:EHG4F@425Y2FONB8B5ECRDACQO
-MLF,^ETX0>XNC`A^)V`56V+CMT>8]*]'S*0``)$5*RN#C,BH2OJG7#IV",7;$
-MZKAXB=5X+:5KW7I;+?!J*0``'```0`1G=&K0:Y\&[WR9*L%@=H"S2_Z(6@``
-M`!P``$`%=_JI_K@S;"TL"?#P@M-`:+N_G&/W$K=&U><,`)@!``"8`0```@``
-M`$4``91M40``0!$``,"H`0'`J`$"`?0!]`&`!V7]56S`"!U!$0``````````
-M(2`B"`````````%X(@``>````'0!`?T,`P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"```!T042G5_""]8=V+1!,>K\P!STQ4V/SA2(K);:_S&+YU92GM2=`\*?
-M#(>"&6@^TLUYBD>?7H5T;%X5AM;%BJ8M02%!XB<CDJCL3QVAGQ*,UZI=Y&6I
-M:)U)H%$E>4IK[HF(E98\I(8\;[)C/I=.$'N+HP(?B=@%5MBX[='F/2O1\RD`
-M`"1%2LK@XS(J$KZIUPZ=@C%VQ.JX>(G5>"VE:]UZ6RWP:BD``!P``$`$9W1J
-MT&N?!N]\F2K!8':`LTO^B%H````<``!`!7?ZJ?ZX,VPM+`GP\(+30&B[OYQC
-M^!*W1I/T"@"8`0``F`$```(```!%``&4;54``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E]""QR9U:%+H``````````"$@(@@````````!>"(``'@```!T`0'^#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``,Y+;2T;LF]ONCP.6'LHN((?D'@P2
-M/\]SN&ZAT6O:,R50T&?I7]6"IF&^DTG0?B%4@4:)*BQ5]B'9XHZ9;PC$M'I1
-M[:!/R:.CHU[&'T[7Q59!Y=#+9-5CGHC,T=;D#$/?O\]5(E<BX=:_>+6B70RB
-M!'&G@14%B2"Z3^V@YM[.V2@I```DI=NS%2*EYSSQ;3=^]_%1JIA#K$V#(1?,
-M\KNQS/*ZL:PI```<``!`!*:.71GU^8IP&")VPA;9=_2ADT__````'```0`4L
-M($Y*<LKH4V6M\K*-C,]"6Z'UT/@2MT8?(`X`F`$``)@!```"````10`!E&U6
-M``!`$0``P*@!`<"H`0(!]`'T`8`'9?0@L<F=6A2Z```````````A("((````
-M`````7@B``!X````=`$!_@P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``#.2
-MVTM&[)O;[H\#EA[*+B"'Y!X,$C_/<[ANH=%KVC,E4-!GZ5_5@J9AOI-)T'XA
-M5(%&B2HL5?8AV>*.F6\(Q+1Z4>V@3\FCHZ->QA].U\560>70RV358YZ(S-'6
-MY`Q#W[_/52)7(N'6OWBUHET,H@1QIX$5!8D@ND_MH.;>SMDH*0``)*7;LQ4B
-MI><\\6TW?O?Q4:J80ZQ-@R$7S/*[L<SRNK&L*0``'```0`2FCET9]?F*<!@B
-M=L(6V7?TH9-/_P```!P``$`%+"!.2G+*Z%-EK?*RC8S/0ENA]=#Y$K=&C!\%
-M`)@!``"8`0```@```$4``91M6P``0!$``,"H`0'`J`$"`?0!]`&`!V7T(+')
-MG5H4N@``````````(2`B"`````````%X(@``>````'0!`?X,`P``#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"```SDMM+1NR;V^Z/`Y8>RBX@A^0>#!(_SW.X;J'1
-M:]HS)5#09^E?U8*F8;Z32=!^(52!1HDJ+%7V(=GBCIEO",2T>E'MH$_)HZ.C
-M7L8?3M?%5D'ET,MDU6.>B,S1UN0,0]^_SU4B5R+AUK]XM:)=#*($<:>!%06)
-M(+I/[:#FWL[9*"D``"2EV[,5(J7G//%M-W[W\5&JF$.L38,A%\SRN[',\KJQ
-MK"D``!P``$`$IHY=&?7YBG`8(G;"%MEW]*&33_\````<``!`!2P@3DIRRNA3
-M9:WRLHV,ST);H?70^A*W1H,K`P"8`0``F`$```(```!%``&4;64``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=E-<4"\C"D'G(``````````"$@(@@````````!>"(`
-M`'@```!T`0'_#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``&I;$BK`.,&QO
-M,_]-J6?G33*DY$([TB$]&0_XSG/L1AZU#(*Y:UP:!>]C'@AAA+^/YC!8QK;%
-MB].BO,&4\IZ;U?8(&J2+`0`WA5RT[JDX*]"E,J'1Y\DY_DNHG2.V0_-E[RW2
-M/S,;E@,EB@BJA1O)[L9VO);:G%?[=FN!$9W#\``I```D6N9?@@0C:F(VGO6J
-MH_Z-^-BKK3V@;B0PY,MO0U@+`-@I```<``!`!(,8G1U8VG82N-^RA[V]P_T%
-MTA8R````'```0`7GU8F/96/H`AV6.<>\T2?EJI`)/OH2MT826`8`F`$``)@!
-M```"````10`!E&UJ``!`$0``P*@!`<"H`0(!]`'T`8`'937%`O(PI!YR````
-M```````A("((`````````7@B``!X````=`$!_PP#```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``!J6Q(JP#C!L;S/_3:EGYTTRI.1".](A/1D/^,YS[$8>M0R"
-MN6M<&@7O8QX(882_C^8P6,:VQ8O3HKS!E/*>F]7V"!JDBP$`-X5<M.ZI."O0
-MI3*AT>?).?Y+J)TCMD/S9>\MTC\S&Y8#)8H(JH4;R>[&=KR6VIQ7^W9K@1&=
-MP_``*0``)%KF7X($(VIB-I[UJJ/^C?C8JZT]H&XD,.3+;T-8"P#8*0``'```
-M0`2#&)T=6-IV$KC?LH>]O</]!=(6,@```!P``$`%Y]6)CV5CZ`(=ECG'O-$G
-MY:J0"3[Z$K=&GYD,`)@!``"8`0```@```$4``91M;P``0!$``,"H`0'`J`$"
-M`?0!]`&`!V4UQ0+R,*0><@``````````(2`B"`````````%X(@``>````'0!
-M`?\,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"```:EL2*L`XP;&\S_TVI9^=-
-M,J3D0CO2(3T9#_C.<^Q&'K4,@KEK7!H%[V,>"&&$OX_F,%C&ML6+TZ*\P93R
-MGIO5]@@:I(L!`#>%7+3NJ3@KT*4RH='GR3G^2ZB=([9#\V7O+=(_,QN6`R6*
-M"*J%&\GNQG:\EMJ<5_MV:X$1G</P`"D``"1:YE^"!"-J8C:>]:JC_HWXV*NM
-M/:!N)##DRV]#6`L`V"D``!P``$`$@QB='5C:=A*XW[*'O;W#_072%C(````<
-M``!`!>?5B8]E8^@"'98YQ[S1)^6JD`D^^Q*W1E>F"@"8`0``F`$```(```!%
-M``&4;7D``$`1``#`J`$!P*@!`@'T`?0!@`=E>U<>BM&;C5X``````````"$@
-M(@@````````!>"(``'@```!T`0$!#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``FUA9Y:!F9!2M,#J&<Z#?!$9O)3??N!I*141$.O*Y6.,I28_I\-9]$]6Q
-M#UXRNI.J-FQR(CX0T[1&)_TQ5.N,L:)$V0G]B;*>_//_%__"A_AHLOZ7Z)UX
-M"1@3G58I;D<]U<@%M1U)L1<C<9`]/]%$E7SGF^#7*OZ**D'*\^BFADLI```D
-M`+]B]15H56;+9K?2*Y;<3MDO:9^@,%A/]*-`-[XQ3`,I```<``!`!"6O1Q]0
-M,&A2S?QP\OTMT[CBXWG:````'```0`6>J')>Q">L9R0]R70'9>?/7,HE&/L2
-MMT8>T@T`F`$``)@!```"````10`!E&U\``!`$0``P*@!`<"H`0(!]`'T`8`'
-M97M7'HK1FXU>```````````A("((`````````7@B``!X````=`$!`0P#```,
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``)M86>6@9F04K3`ZAG.@WP1&;R4WW[@:
-M2D5$1#KRN5CC*4F/Z?#6?1/5L0]>,KJ3JC9L<B(^$-.T1B?],53KC+&B1-D)
-M_8FRGOSS_Q?_PH?X:++^E^B=>`D8$YU6*6Y'/=7(!;4=2;$7(W&0/3_11)5\
-MYYO@URK^BBI!RO/HIH9+*0``)`"_8O45:%5FRV:WTBN6W$[9+VF?H#!83_2C
-M0#>^,4P#*0``'```0`0EKT<?4#!H4LW\</+]+=.XXN-YV@```!P``$`%GJAR
-M7L0GK&<D/<ET!V7GSUS*)1C\$K=&,M$$`)@!``"8`0```@```$4``91M@@``
-M0!$``,"H`0'`J`$"`?0!]`&`!V5[5QZ*T9N-7@``````````(2`B"```````
-M``%X(@``>````'0!`0$,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``";6%GE
-MH&9D%*TP.H9SH-\$1F\E-]^X&DI%1$0Z\KE8XRE)C^GPUGT3U;$/7C*ZDZHV
-M;'(B/A#3M$8G_3%4ZXRQHD39"?V)LI[\\_\7_\*'^&BR_I?HG7@)&!.=5BEN
-M1SW5R`6U'4FQ%R-QD#T_T425?.>;X-<J_HHJ0<KSZ*:&2RD``"0`OV+U%6A5
-M9LMFM](KEMQ.V2]IGZ`P6$_THT`WOC%,`RD``!P``$`$):]''U`P:%+-_'#R
-M_2W3N.+C>=H````<``!`!9ZH<E[$)ZQG)#W)=`=EY\]<RB48_1*W1C/B`@"8
-M`0``F`$```(```!%``&4;8@``$`1``#`J`$!P*@!`@'T`?0!@`=E9_)&]]2N
-M1'H``````````"$@(@@````````!>"(``'@```!T`0$"#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``;[?5);,/#*/Z6%3Z/,#YYG@A2]0S9")SH&R!\^Q4
-M:X5ZZ'`>0:BB:P2O>JJC#M^!0`F,8AER4+8P:8F@<;;=?GOMC!'@5N_B8L^/
-M?W*US1-U$QQ_H.=CFLV<>(;HPWQ/@^6.,!,*@@<($H-M$@(!K5=E#X->+LUI
-MUB5Y3V\WAXPI```DR&;T9`\=K]@QE&W6JY`V^\>R@HHFO*I02F(16`BV5@,I
-M```<``!`!+^A_VHTN5A>V!D&IK]SAZD]G58V````'```0`68KQMWBQTRRA#4
-M`/":-MO*RL/.Z?T2MT;#"08`F`$``)@!```"````10`!E&V*``!`$0``P*@!
-M`<"H`0(!]`'T`8`'96?R1O?4KD1Z```````````A("((`````````7@B``!X
-M````=`$!`@P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``&^WU26S#PRC^EA4
-M^CS`^>9X(4O4,V0B<Z!L@?/L5&N%>NAP'D&HHFL$KWJJHP[?@4`)C&(9<E"V
-M,&F)H'&VW7Y[[8P1X%;OXF+/CW]RM<T3=1,<?Z#G8YK-G'B&Z,-\3X/ECC`3
-M"H('"!*#;1("`:U790^#7B[-:=8E>4]O-X>,*0``),AF]&0/':_8,91MUJN0
-M-OO'LH**)KRJ4$IB$5@(ME8#*0``'```0`2_H?]J-+E87M@9!J:_<X>I/9U6
-M-@```!P``$`%F*\;=XL=,LH0U`#PFC;;RLK#SNG]$K=&8TL,`)@!``"8`0``
-M`@```$4``91MEP``0!$``,"H`0'`J`$"`?0!]`&`!V5G\D;WU*Y$>@``````
-M````(2`B"`````````%X(@``>````'0!`0(,`P``#`$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``!OM]4ELP\,H_I85/H\P/GF>"%+U#-D(G.@;('S[%1KA7KH<!Y!
-MJ*)K!*]ZJJ,.WX%`"8QB&7)0MC!IB:!QMMU^>^V,$>!6[^)BSX]_<K7-$W43
-M''^@YV.:S9QXANC#?$^#Y8XP$PJ"!P@2@VT2`@&M5V4/@UXNS6G6)7E/;S>'
-MC"D``"3(9O1D#QVOV#&4;=:KD#;[Q[*"BB:\JE!*8A%8"+96`RD``!P``$`$
-MOZ'_:C2Y6%[8&0:FOW.'J3V=5C8````<``!`!9BO&W>+'3+*$-0`\)HVV\K*
-MP\[I_A*W1B95"@"8`0``F`$```(```!%``&4;9T``$`1``#`J`$!P*@!`@'T
-M`?0!@`=EC;-:LPUC`M0``````````"$@(@@````````!>"(``'@```!T`0$#
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``)`CJHJ"&PZ63;QT&UP&U1'4)
-MC==I//XPP&:M!DHW@>1X=[]_%B]]'K8RH[[1HR%0_&ET/IE\,5MS+D5!!6+R
-MN+*X_\_@U'-.7;AO<E4])LR?31&0?(F6S^-96%'92,,NDF^/L_4)%V5A46?2
-M"OH#4WI2FK0G[`TEFF;P#V#UA=4I```DZ>+_[B&FIL"'YF][I,00\;J#+DO+
-M?[/NHN2'$QJ`:S`I```<``!`!/CC;TC?^,_U-*KH,$A,X:\U;NWD````'```
-M0`5=]@%ZRPYFFP;I$0:%.#.]SV/8OOX2MT:K@PT`F`$``)@!```"````10`!
-ME&V>``!`$0``P*@!`<"H`0(!]`'T`8`'98VS6K,-8P+4```````````A("((
-M`````````7@B``!X````=`$!`PP#```,`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M`"0(ZJ*@AL.EDV\=!M<!M41U"8W7:3S^,,!FK09*-X'D>'>_?Q8O?1ZV,J.^
-MT:,A4/QI=#Z9?#%;<RY%005B\KBRN/_/X-1S3EVX;W)5/2;,GTT1D'R)EL_C
-M65A1V4C#+I)OC[/U"1=E85%GT@KZ`U-Z4IJT)^P-)9IF\`]@]875*0``).GB
-M_^XAIJ;`A^9O>Z3$$/&Z@RY+RW^S[J+DAQ,:@&LP*0``'```0`3XXV](W_C/
-M]32JZ#!(3.&O-6[MY````!P``$`%7?8!>LL.9IL&Z1$&A3@SO<]CV+[_$K=&
-M&(,$`)@!``"8`0```@```$4``91MHP``0!$``,"H`0'`J`$"`?0!]`&`!V6-
-MLUJS#6,"U```````````(2`B"`````````%X(@``>````'0!`0,,`P``#`$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"```D".JBH(;#I9-O'0;7`;5$=0F-UVD\_C#`
-M9JT&2C>!Y'AWOW\6+WT>MC*COM&C(5#\:70^F7PQ6W,N14$%8O*XLKC_S^#4
-M<TY=N&]R53TFS)]-$9!\B9;/XUE84=E(PRZ2;X^S]0D796%19](*^@-3>E*:
-MM"?L#26:9O`/8/6%U2D``"3IXO_N(::FP(?F;WNDQ!#QNH,N2\M_L^ZBY(<3
-M&H!K,"D``!P``$`$^.-O2-_XS_4TJN@P2$SAKS5N[>0````<``!`!5WV`7K+
-M#F:;!ND1!H4X,[W/8]B^`!.W1G./`@"8`0``F`$```(```!%``&4;:\``$`1
-M``#`J`$!P*@!`@'T`?0!@`=E<,;E<@I`PY$``````````"$@(@@````````!
-M>"(``'@```!T`0$$#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``KE.S+T!E
-MT$XPJDQ8%I+9-WX:K=F.I[(]HD1;4D0338Q6`N4.J',?F51/Y^JR]#(EEEPT
-M"`H(WA6.$E+;!"I>L?967.DMU,SMB/K)C(0KL&,<&#R+$XOEQ[5.:=W.Y%]L
-M_)@2Z`5S=D;9`.P(W,`41(#AD"CEVA?%P`/^9]Z@-D(I```D5^M-J^J.AL,8
-M0S4;P%S_D)3)%&AF,B6F$(:MSM"TM!4I```<``!`!*J-`;ZT>/@Y("4WQPM_
-MBUJFJKZ&````'```0`6&P,GE9\M:I!SOD$]@UKWJ)?>1?``3MT:.NP4`F`$`
-M`)@!```"````10`!E&VR``!`$0``P*@!`<"H`0(!]`'T`8`'97#&Y7(*0,.1
-M```````````A("((`````````7@B``!X````=`$!!`P#```,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``*Y3LR]`9=!.,*I,6!:2V3=^&JW9CJ>R/:)$6U)$$TV,
-M5@+E#JAS'YE43^?JLO0R)99<-`@*"-X5CA)2VP0J7K'V5ESI+=3,[8CZR8R$
-M*[!C'!@\BQ.+Y<>U3FG=SN1?;/R8$N@%<W9&V0#L"-S`%$2`X9`HY=H7Q<`#
-M_F?>H#9"*0``)%?K3:OJCH;#&$,U&\!<_Y"4R11H9C(EIA"&K<[0M+05*0``
-M'```0`2JC0&^M'CX.2`E-\<+?XM:IJJ^A@```!P``$`%AL#)Y6?+6J0<[Y!/
-M8-:]ZB7WD7P`$[=&)_T+`)@!``"8`0```@```$4``91MN@``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V5PQN5R"D##D0``````````(2`B"`````````%X(@``>```
-M`'0!`00,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"``"N4[,O0&703C"J3%@6
-MDMDW?AJMV8ZGLCVB1%M21!--C%8"Y0ZH<Q^95$_GZK+T,B667#0("@C>%8X2
-M4ML$*EZQ]E9<Z2W4S.V(^LF,A"NP8QP8/(L3B^7'M4YIW<[D7VS\F!+H!7-V
-M1MD`[`C<P!1$@.&0*.7:%\7``_YGWJ`V0BD``"17ZTVKZHZ&PQA#-1O`7/^0
-ME,D4:&8R):80AJW.T+2T%2D``!P``$`$JHT!OK1X^#D@)3?'"W^+6J:JOH8`
-M```<``!`!8;`R>5GRUJD'.^03V#6O>HE]Y%\`1.W1I`*"@"8`0``F`$```(`
-M``!%``&4;=(``$`1``#`J`$!P*@!`@'T`?0!@`=EU/ZI.@R5L*8`````````
-M`"$@(@@````````!>"(``'@```!T`0$'#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``,QD2V%";MNAT&[1:5D=4PSHQ^(S6*4;5\E4A!/A#FL,RULW&C\55
-ME'1TYP9%3G@Z\3(0(Q/H!4]1RUD(*-O[G8K'\/E;G,>UFWLZB7YN2YV7D6W:
-M2^8UQ!>8M(Z.),>Z<O#=O(:.S(=.E7^:YP0;FYRSRD_2[[%`U>%2>)($QJ(I
-M```D)@&:^5/>6:KPNVON1\"/5)99'FFR.*/(&ADWZKX"F_,I```<``!`!%@)
-MQ4@>N=7QU%P.8A7>>+YF=V43````'```0`5SV-9#'I7!WZ*0,+2M`X"#:+E!
-MZP$3MT9\-0T`F`$``)@!```"````10`!E&W4``!`$0``P*@!`<"H`0(!]`'T
-M`8`'9=3^J3H,E;"F```````````A("((`````````7@B``!X````=`$!!PP#
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``#,9$MA0F[;H=!NT6E9'5,,Z,?B,
-MUBE&U?)5(03X0YK#,M;-QH_%591T=.<&14YX.O$R$",3Z`5/4<M9""C;^YV*
-MQ_#Y6YS'M9M[.HE^;DN=EY%MVDOF-<07F+2.CB3'NG+PW;R&CLR'3I5_FN<$
-M&YN<L\I/TN^Q0-7A4GB2!,:B*0``)"8!FOE3WEFJ\+MK[D?`CU2661YILCBC
-MR!H9-^J^`IOS*0``'```0`18"<5('KG5\=1<#F(5WGB^9G=E$P```!P``$`%
-M<]C60QZ5P=^BD#"TK0.`@VBY0>L"$[=&&C4$`)@!``"8`0```@```$4``91M
-MU0``0!$``,"H`0'`J`$"`?0!]`&`!V74_JDZ#)6PI@``````````(2`B"```
-M``````%X(@``>````'0!`0<,`P``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"```S
-M&1+84)NVZ'0;M%I61U3#.C'XC-8I1M7R52$$^$.:PS+6S<:/Q564='3G!D5.
-M>#KQ,A`C$^@%3U'+60@HV_N=BL?P^5N<Q[6;>SJ)?FY+G9>1;=I+YC7$%YBT
-MCHXDQ[IR\-V\AH[,ATZ5?YKG!!N;G+/*3]+OL4#5X5)XD@3&HBD``"0F`9KY
-M4]Y9JO"[:^Y'P(]4EED>:;(XH\@:&3?JO@*;\RD``!P``$`$6`G%2!ZYU?'4
-M7`YB%=YXOF9W91,````<``!`!7/8UD,>E<'?HI`PM*T#@(-HN4'K`Q.W1B<_
-M`@"8`0``F`$```(```!%``&4;=8``$`1``#`J`$!P*@!`@'T`?0!@`=E,L]8
-M>P:U&5T``````````"$@(@@````````!>"(``'@```!T`0$(#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``19G`*8.P02*/=D44`.$/6/AF%7Q%5U5^8?\[
-MRPB1Q.\K0;"S4-L-()``1%S\="8))T;T;9FJY_,2IS.X)`7NW`>O5-+X6WMA
-MLHH.O#!!A`Z[.]>S=:W4%\2O\T$1L\;;>K5BINBTP@35;2*]7!@`M77M*LX^
-MW\JOII_O=Y=7M88I```D$\/;^1=KM`L]PH`1&[".4`C'-6,^Y*J8@-@UIO:-
-MXY@I```<``!`!&DP==D,4`Y<^UO7127&QL]/OOY"````'```0`68&>^4E3??
-M_`4XD4V8GWD.0-&4E@,3MT8S;04`F`$``)@!```"````10`!E&W7``!`$0``
-MP*@!`<"H`0(!]`'T`8`'93+/6'L&M1E=```````````A("((`````````7@B
-M``!X````=`$!"`P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``$69P"F#L$$B
-MCW9%%`#A#UCX9A5\15=5?F'_.\L(D<3O*T&PLU#;#2"0`$1<_'0F"2=&]&V9
-MJN?S$J<SN"0%[MP'KU32^%M[8;**#KPP080.NSO7LW6MU!?$K_-!$;/&VWJU
-M8J;HM,($U6TBO5P8`+5U[2K./M_*KZ:?[W>75[6&*0``)!/#V_D7:[0+/<*`
-M$1NPCE`(QS5C/N2JF(#8-:;VC>.8*0``'```0`1I,'79#%`.7/M;UT4EQL;/
-M3[[^0@```!P``$`%F!GOE)4WW_P%.)%-F)]Y#D#1E)8#$[=&VJX+`)@!``"8
-M`0```@```$4``91MV```0!$``,"H`0'`J`$"`?0!]`&`!V4RSUA[!K4970``
-M````````(2`B"`````````%X(@``>````'0!`0@,`P``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"``!%F<`I@[!!(H]V110`X0]8^&85?$5757YA_SO+")'$[RM!
-ML+-0VPT@D`!$7/QT)@DG1O1MF:KG\Q*G,[@D!>[<!Z]4TOA;>V&RB@Z\,$&$
-M#KL[U[-UK=07Q*_S01&SQMMZM6*FZ+3"!-5M(KU<&`"U=>TJSC[?RJ^FG^]W
-MEU>UABD``"03P]OY%VNT"SW"@!$;L(Y0",<U8S[DJIB`V#6F]HWCF"D``!P`
-M`$`$:3!UV0Q0#ES[6]=%)<;&ST^^_D(````<``!`!9@9[Y25-]_\!3B139B?
-M>0Y`T926!!.W1B&["0"8`0``F`$```(```!%``&4;=D``$`1``#`J`$!P*@!
-M`@'T`?0!@`=EUP.6OR<961X``````````"$@(@@````````!>"(``'@```!T
-M`0$)#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``*)XO)L*V!41FI$N*;S6!
-MP^*,'EARRTD_B3^UB?("HZ!/FRIT;@LA<"8T&;=[@QGESU,6,V@>MMH?/W^\
-M9E9SHQ-SEM)];^'7Q;1?VY'O3S\'EO3KP&04TSG]W8[:"5'LM3$(X;>]2!>,
-MPEDH@:4;:MLF(&CQ0<G2`9GTW!E:"%(I```DMEVY\37HXE)-U:N/P=FL>X&Q
-M_7S?#<6YB&R2IL'EU<HI```<``!`!$O\J#J#]_+/^L:$Z94(P3<[SD73````
-M'```0`4WW"SB4`KJX8PH)$1C-X&-$B4`$`03MT96YPP`F`$``)@!```"````
-M10`!E&W:``!`$0``P*@!`<"H`0(!]`'T`8`'9=<#EK\G&5D>```````````A
-M("((`````````7@B``!X````=`$!"0P#```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``"B>+R;"M@5$9J1+BF\U@</BC!Y8<LM)/XD_M8GR`J.@3YLJ=&X+(7`F
-M-!FW>X,9Y<]3%C-H'K;:'S]_O&96<Z,3<Y;2?6_AU\6T7]N1[T\_!Y;TZ\!D
-M%-,Y_=V.V@E1[+4Q".&WO4@7C,)9*(&E&VK;)B!H\4')T@&9]-P96@A2*0``
-M)+9=N?$UZ.)23=6KC\'9K'N!L?U\WPW%N8ALDJ;!Y=7**0``'```0`1+_*@Z
-M@_?RS_K&A.F5",$W.\Y%TP```!P``$`%-]PLXE`*ZN&,*"1$8S>!C1(E`!`%
-M$[=&HN8#`)@!``"8`0```@```$4``91MVP``0!$``,"H`0'`J`$"`?0!]`&`
-M!V77`Y:_)QE9'@``````````(2`B"`````````%X(@``>````'0!`0D,`P``
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"```HGB\FPK8%1&:D2XIO-8'#XHP>6'++
-M23^)/[6)\@*CH$^;*G1N"R%P)C09MWN#&>7/4Q8S:!ZVVA\_?[QF5G.C$W.6
-MTGUOX=?%M%_;D>]//P>6].O`9!33.?W=CMH)4>RU,0CAM[U(%XS"62B!I1MJ
-MVR8@:/%!R=(!F?3<&5H(4BD``"2V7;GQ->CB4DW5JX_!V:Q[@;']?-\-Q;F(
-M;)*FP>75RBD``!P``$`$2_RH.H/W\L_ZQH3IE0C!-SO.1=,````<``!`!3?<
-M+.)0"NKAC"@D1&,W@8T2)0`0!A.W1O#R`0"8`0``F`$```(```!%``&4;=T`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E]'M'<X5W1A$``````````"$@(@@`````
-M```!>"(``'@```!T`0'_#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``PKQY
-M,'?U=TP+C:3T8[7^3\3BXT7\3W,G/KH#OI.T!^#-Z.6\1?S\V]S5V!`0<3S&
-M1>TQH(@D"NLS6^#JE'T+RN[T]@"'Y6(7F&:B[EX\1,-.V1)%'N"U\MBZOMD/
-M)BGM".S"([JM-<@1T.M#]FRGU_D\I7;0LX=8A[M;#RT@\&\I```D4V.F(14^
-MIH*U2_@Q!L66$VN@SEI5D"'")T6A_3L?^T<I```<``!`!&:-7)T.Q7`R6PB3
-M0#`G$]Z9YSND````'```0`7UG:6GY6#_Z/,.@!DRI)B`GTK^DP83MT8<'P4`
-MF`$``)@!```"````10`!E&W>``!`$0``P*@!`<"H`0(!]`'T`8`'9?1[1W.%
-M=T81```````````A("((`````````7@B``!X````=`$!_PP#```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``,*\>3!W]7=,"XVD]&.U_D_$XN-%_$]S)SZZ`[Z3
-MM`?@S>CEO$7\_-O<U=@0$'$\QD7M,:"()`KK,UO@ZI1]"\KN]/8`A^5B%YAF
-MHNY>/$3#3MD211[@M?+8NK[9#R8I[0CLPB.ZK37($=#K0_9LI]?Y/*5VT+.'
-M6(>[6P\M(/!O*0``)%-CIB$5/J:"M4OX,0;%EA-KH,Y:59`APB=%H?T['_M'
-M*0``'```0`1FC5R=#L5P,EL(DT`P)Q/>F><[I````!P``$`%]9VEI^5@_^CS
-M#H`9,J28@)]*_I,&$[=&!&$+`)@!``"8`0```@```$4``91MWP``0!$``,"H
-M`0'`J`$"`?0!]`&`!V7T>T=SA7=&$0``````````(2`B"`````````%X(@``
-M>````'0!`?\,`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"``#"O'DP=_5W3`N-
-MI/1CM?Y/Q.+C1?Q/<R<^N@.^D[0'X,WHY;Q%_/S;W-78$!!Q/,9%[3&@B"0*
-MZS-;X.J4?0O*[O3V`(?E8A>89J+N7CQ$PT[9$D4>X+7RV+J^V0\F*>T([,(C
-MNJTUR!'0ZT/V;*?7^3RE=M"SAUB'NUL/+2#P;RD``"138Z8A%3ZF@K5+^#$&
-MQ983:Z#.6E60(<(G1:'].Q_[1RD``!P``$`$9HU<G0[%<#);")-`,"<3WIGG
-M.Z0````<``!`!?6=I:?E8/_H\PZ`&3*DF("?2OZ3!Q.W1BYL"0"8`0``F`$`
-M``(```!%``&4;>$``$`1``#`J`$!P*@!`@'T`?0!@`=E2?2_U@V5\\P`````
-M`````"$@(@@````````!>"(``'@```!T`0&`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``;[@[K8JU)R*%;>TR.^M5>-.&N#G3/W!JO2B5^;N.O<"WUNE(
-M6E3?^AEBV!V+>;._!YI.!C0)WQ[;[J8ZS-X';04:5(D,*[7GNRE7-P8,DP\9
-MN4V\5`"_X>9MJ+8O5QZX3&Y5[+\@=Q]P<NC(OM,RZ,@[80T5<)>]X4HS.K#<
-MYK4I```DL@DR@(!!3E7LO'%!W&L!H<\]P)S`^QU!92^]6KJ`$]LI```<``!`
-M!!!O[YM@)IT\@_X,;/$)C?>6_"4V````'```0`7K6J-W-H?8+GX_`I>[E=J$
-M:.UH9`<3MT81F0P`F`$``)@!```"````10`!E&WB``!`$0``P*@!`<"H`0(!
-M]`'T`8`'94GTO]8-E?/,```````````A("((`````````7@B``!X````=`$!
-M@`P#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``&^X.ZV*M2<BA6WM,COK57C3
-MAK@YTS]P:KTHE?F[CKW`M];I2%I4W_H98M@=BWFSOP>:3@8T"=\>V^ZF.LS>
-M!VT%&E2)#"NUY[LI5S<&#),/&;E-O%0`O^'F;:BV+U<>N$QN5>R_('<?<'+H
-MR+[3,NC(.V$-%7"7O>%*,SJPW.:U*0``)+(),H"`04Y5[+QQ0=QK`:'//<"<
-MP/L=064OO5JZ@!/;*0``'```0`00;^^;8":=/(/^#&SQ"8WWEOPE-@```!P`
-M`$`%ZUJC=S:'V"Y^/P*7NY7:A&CM:&0($[=&7Y@#`)@!``"8`0```@```$4`
-M`91MXP``0!$``,"H`0'`J`$"`?0!]`&`!V5)]+_6#97SS```````````(2`B
-M"`````````%X(@``>````'0!`8`,`P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M``!ON#NMBK4G(H5M[3([ZU5XTX:X.=,_<&J]*)7YNXZ]P+?6Z4A:5-_Z&6+8
-M'8MYL[\'FDX&-`G?'MONICK,W@=M!1I4B0PKM>>[*5<W!@R3#QFY3;Q4`+_A
-MYFVHMB]7'KA,;E7LOR!W'W!RZ,B^TS+HR#MA#15PE[WA2C,ZL-SFM2D``"2R
-M"3*`@$%.5>R\<4'<:P&ASSW`G,#['4%E+[U:NH`3VRD``!P``$`$$&_OFV`F
-MG3R#_@QL\0F-]Y;\)38````<``!`!>M:HW<VA]@N?C\"E[N5VH1H[6AD"1.W
-M1M"B`0"8`0``F`$```(```!%``&4;>0``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M-E(9L,5Z3PH``````````"$@(@@````````!>"(``'@```!T`0$```,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``PO+>&5=;:_M>XYHE,IOYW\.:[I6CD%A`
-M-,>_6[,68^?0D@Q2=RI:5=-SBD6N'>I_1$$331VV[X8,-&PNO_V^910@ZDGU
-M.@`N[DETLQAHA\Q)UL4?V'R:937AHV#4F#\((#1(2I+1JFNC,.+9RG./@O\K
-M68=G05:^?,MBO5Y?9C(I```D]`D4.\VF&2NYKP@Y3!\*'2?*6?_X%PS9K@F3
-MGR@`:T@I```<``!`!)/8O?2J^!SG':A6YPS22&E0BW2G````'```0`4E:MA"
-M)!P-@"E07,R0KL=80K[J90D3MT;/T`0`F`$``)@!```"````10`!E&WE``!`
-M$0``P*@!`<"H`0(!]`'T`8`'9392&;#%>D\*```````````A("((````````
-M`7@B``!X````=`$!```#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``,+RWAE7
-M6VO[7N.:)3*;^=_#FNZ5HY!80#3'OUNS%F/GT)(,4G<J6E73<XI%KAWJ?T1!
-M$TT=MN^&##1L+K_]OF44(.I)]3H`+NY)=+,8:(?,2=;%']A\FF4UX:-@U)@_
-M""`T2$J2T:IKHS#BV<ISCX+_*UF'9T%6OGS+8KU>7V8R*0``)/0)%#O-IADK
-MN:\(.4P?"ATGREG_^!<,V:X)DY\H`&M(*0``'```0`23V+WTJO@<YQVH5N<,
-MTDAI4(MTIP```!P``$`%)6K80B0<#8`I4%S,D*['6$*^ZF4)$[=&A1(+`)@!
-M``"8`0```@```$4``91MY@``0!$``,"H`0'`J`$"`?0!]`&`!V4V4AFPQ7I/
-M"@``````````(2`B"`````````%X(@``>````'0!`0```P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``#"\MX95UMK^U[CFB4RF_G?PYKNE:.06$`TQ[];LQ9C
-MY]"2#%)W*EI5TW.*1:X=ZG]$01--';;OA@PT;"Z__;YE%"#J2?4Z`"[N272S
-M&&B'S$G6Q1_8?)IE->&C8-28/P@@-$A*DM&J:Z,PXMG*<X^"_RM9AV=!5KY\
-MRV*]7E]F,BD``"3T"10[S:89*[FO"#E,'PH=)\I9__@7#-FN"9.?*`!K2"D`
-M`!P``$`$D]B]]*KX'.<=J%;G#-)(:5"+=*<````<``!`!25JV$(D'`V`*5!<
-MS)"NQUA"ONIE"A.W1MH>"0"8`0``F`$```(```!%``&4;><``$`1``#`J`$!
-MP*@!`@'T`?0!@`=EIQA;?"*9C38``````````"$@(@@````````!>"(``'@`
-M``!T`0$``0,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``IETU:R=5%E&(&5ZK
-M,@&U054"H!4\(P6-S9JTC0WY6)!&Z^=V`"(X<;?BAPZFBT`*MEX3R5`HU-SY
-MLD[!Q:F#;KRBG@9#*0L[G[JB)2^FOSS=H;_P#,(E"5PTO1"`SAZ/^JB7>!C$
-M_/[R/W2;T<0JZHY\`B/*.<)%YI!J/PQUD?HI```DQEKK8%T9?JN?/?E3JI7T
-M9#7PS(U<;PPG9H$A"`;\D@DI```<``!`!"IQ@=Q#G<NM+(O2A>_PA^PT2WVV
-M````'```0`7\OD4@0GS>JAI/2*)@P("P9Z490@H3MT;82@P`F`$``)@!```"
-M````10`!E&WH``!`$0``P*@!`<"H`0(!]`'T`8`'9:<86WPBF8TV````````
-M```A("((`````````7@B``!X````=`$!``$#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``*9=-6LG5191B!E>JS(!M4%5`J`5/",%C<V:M(T-^5B01NOG=@`B
-M.'&WXH<.IHM`"K9>$\E0*-3<^;).P<6I@VZ\HIX&0RD+.Y^ZHB4OIK\\W:&_
-M\`S")0E<-+T0@,X>C_JHEW@8Q/S^\C]TF]'$*NJ.?`(CRCG"1>:0:C\,=9'Z
-M*0``),9:ZV!=&7ZKGSWY4ZJ5]&0U\,R-7&\,)V:!(0@&_)()*0``'```0`0J
-M<8'<0YW+K2R+TH7O\(?L-$M]M@```!P``$`%_+Y%($)\WJH:3TBB8,"`L&>E
-M&4(+$[=&+$H#`)@!``"8`0```@```$4``91MZ0``0!$``,"H`0'`J`$"`?0!
-M]`&`!V6G&%M\(IF--@``````````(2`B"`````````%X(@``>````'0!`0`!
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``"F735K)U4648@97JLR`;5!50*@
-M%3PC!8W-FK2-#?E8D$;KYW8`(CAQM^*'#J:+0`JV7A/)4"C4W/FR3L'%J8-N
-MO**>!D,I"SN?NJ(E+Z:_/-VAO_`,PB4)7#2]$(#.'H_ZJ)=X&,3\_O(_=)O1
-MQ"KJCGP"(\HYPD7FD&H_#'61^BD``"3&6NM@71E^JY\]^5.JE?1D-?#,C5QO
-M#"=F@2$(!OR2"2D``!P``$`$*G&!W$.=RZTLB]*%[_"'[#1+?;8````<``!`
-M!?R^12!"?-ZJ&D](HF#`@+!GI1E"#!.W1O5P`0"8`0``F`$```(```!%``&4
-M;?D``$`1``#`J`$!P*@!`@'T`?0!@`=E5+`_?1Y7]@<``````````"$@(@@`
-M```````!>"(``'@```!T`0$``@,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M7AD<O4N'_P?,"LF-C)5-U>G[1C.[F)/=_31JFJ\/H$J&<_()*ZZZSX%M%L*D
-M8GJ9<QS`Z*7V!TU^!XJ52/Y0(='B=1=A#XY0^+@H4Q57PO!8O"TJ$EP8+KO5
-M1#?+"D-5)]$R'@_2\2N^H=N'S%6<.OI!W<N1H)-"%AUU[8.&9T\I```D/HX_
-MDID20!YFDCIV.UFC##BM??PX3V(G%%(ZQ1-\_S@I```<``!`!*VT"\"GP&DG
-M(>K<G%#FXP>K=DZA````'```0`7MI9=P31W,PPD":TN<E`/-J'X-YPP3MT:\
-MJ00`F`$``)@!```"````10`!E&WZ``!`$0``P*@!`<"H`0(!]`'T`8`'952P
-M/WT>5_8'```````````A("((`````````7@B``!X````=`$!``(#```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``%X9'+U+A_\'S`K)C8R53=7I^T8SNYB3W?TT
-M:IJO#Z!*AG/R"2NNNL^!;1;"I&)ZF7,<P.BE]@=-?@>*E4C^4"'1XG4780^.
-M4/BX*%,55\+P6+PM*A)<&"Z[U40WRPI#52?1,AX/TO$KOJ';A\Q5G#KZ0=W+
-MD:"30A8==>V#AF=/*0``)#Z./Y*9$D`>9I(Z=CM9HPPXK7W\.$]B)Q12.L43
-M?/\X*0``'```0`2MM`O`I\!I)R'JW)Q0YN,'JW9.H0```!P``$`%[:67<$T=
-MS,,)`FM+G)0#S:A^#><,$[=&5.L*`)@!``"8`0```@```$4``91M^P``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V54L#]]'E?V!P``````````(2`B"`````````%X
-M(@``>````'0!`0`"`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"``!>&1R]2X?_
-M!\P*R8V,E4W5Z?M&,[N8D]W]-&J:KP^@2H9S\@DKKKK/@6T6PJ1B>IES',#H
-MI?8'37X'BI5(_E`AT>)U%V$/CE#XN"A3%5?"\%B\+2H27!@NN]5$-\L*0U4G
-MT3(>#]+Q*[ZAVX?,59PZ^D'=RY&@DT(6'77M@X9G3RD``"0^CC^2F1)`'F:2
-M.G8[6:,,.*U]_#A/8B<44CK%$WS_."D``!P``$`$K;0+P*?`:2<AZMR<4.;C
-M!ZMV3J$````<``!`!>VEEW!-'<S#"0)K2YR4`\VH?@WG#1.W1C;U"`"8`0``
-MF`$```(```!%``&4;?T``$`1``#`J`$!P*@!`@'T`?0!@`=EM^PN5.TT['@`
-M`````````"$@(@@````````!>"(``'@```!T`0$``P,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``[1A!I#VT0WJ.(AC,A(?);>UCK\18.R=^Q':[.FOY/`VU
-M9&W6F[RW=N<&%,X+2S(:B`8:L<I(4Z8?2W)%OI6*`!0V1DBY@YM^^D[UO8T*
-M:XQ/GWGOM\NF];SX_/:6V5EA`RS:;3`Q9W)\!!*TS;-&262T#H9*"P5!#L!5
-MB_PU;&,I```DK[&Y^COJ$_IU5:L7.@6GE3#H+,>4@?P-DL`"J4JDJHDI```<
-M``!`!-C&F),2()U#(%$1H^J-G:`^:+T=````'```0`4:`.`$<,\<0LQG`*!!
-M3)V:YW*=8PT3MT:H(PP`F`$``)@!```"````10`!E&W^``!`$0``P*@!`<"H
-M`0(!]`'T`8`'9;?L+E3M-.QX```````````A("((`````````7@B``!X````
-M=`$!``,#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``.T80:0]M$-ZCB(8S(2'
-MR6WM8Z_$6#LG?L1VNSIK^3P-M61MUIN\MW;G!A3."TLR&H@&&K'*2%.F'TMR
-M1;Z5B@`4-D9(N8.;?OI.];V-"FN,3Y]Y[[?+IO6\^/SVEME980,LVFTP,6=R
-M?`02M,VS1DEDM`Z&2@L%00[`58O\-6QC*0``)*^QN?H[ZA/Z=56K%SH%IY4P
-MZ"S'E('\#9+``JE*I*J)*0``'```0`38QIB3$B"=0R!1$:/JC9V@/FB]'0``
-M`!P``$`%&@#@!'#/'$+,9P"@04R=FN=RG6,.$[=&'2,#`)@!``"8`0```@``
-M`$4``91M_P``0!$``,"H`0'`J`$"`?0!]`&`!V6W["Y4[33L>```````````
-M(2`B"`````````%X(@``>````'0!`0`#`P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"``#M&$&D/;1#>HXB&,R$A\EM[6.OQ%@[)W[$=KLZ:_D\#;5D;=:;O+=V
-MYP84S@M+,AJ(!AJQRDA3IA]+<D6^E8H`%#9&2+F#FW[Z3O6]C0IKC$^?>>^W
-MRZ;UO/C\]I;966$#+-IM,#%G<GP$$K3-LT9)9+0.ADH+!4$.P%6+_#5L8RD`
-M`"2OL;GZ.^H3^G55JQ<Z!:>5,.@LQY2!_`V2P`*I2J2JB2D``!P``$`$V,:8
-MDQ(@G4,@41&CZHV=H#YHO1T````<``!`!1H`X`1PSQQ"S&<`H$%,G9KG<IUC
-M#Q.W1ADP`0"8`0``F`$```(```!%``&4;@```$`1``#`J`$!P*@!`@'T`?0!
-M@`=ETAV$$DY_,#<``````````"$@(@@````````!>"(``'@```!T`0$`!`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``M?0=8#=^N_&@SUW4&[O_U1<WE,U1
-MIYGKD1,Q%[I5]<O._P0/JIQL$U8QT<.L[9#,>H98`+VB-5YR/:@;L%7P(%13
-M,;6/!OGU@Y;Z*/$2J;XN,*G#JB5$%#0A%4YWU?*HSU'S(Y;W+@'38#STBJKI
-M]@VX#U*?:D\/(BQR%/V6-P$I```D$#V;=.37/]<1"UA/J>6+-BYR_J-Z*K@#
-M<J1RZ\6\7FHI```<``!`!+8_Z^0`M6P5NK@P@R%O?8KH&TY@````'```0`5R
-M1C%\I!X0=6&C/HT0)6D`X]S3M0\3MT:I6P0`F`$``)@!```"````10`!E&X!
-M``!`$0``P*@!`<"H`0(!]`'T`8`'9=(=A!).?S`W```````````A("((````
-M`````7@B``!X````=`$!``0#```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``+7T
-M'6`W?KOQH,]=U!N[_]47-Y3-4:>9ZY$3,1>Z5?7+SO\$#ZJ<;!-6,='#K.V0
-MS'J&6`"]HC5><CVH&[!5\"!44S&UCP;Y]8.6^BCQ$JF^+C"IPZHE1!0T(15.
-M=]7RJ,]1\R.6]RX!TV`\](JJZ?8-N`]2GVI/#R(L<A3]EC<!*0``)!`]FW3D
-MUS_7$0M83ZGEBS8N<OZC>BJX`W*D<NO%O%YJ*0``'```0`2V/^OD`+5L%;JX
-M,(,A;WV*Z!M.8````!P``$`%<D8Q?*0>$'5AHSZ-$"5I`./<T[4/$[=&`9T*
-M`)@!``"8`0```@```$4``91N`@``0!$``,"H`0'`J`$"`?0!]`&`!V72'802
-M3G\P-P``````````(2`B"`````````%X(@``>````'0!`0`$`P``#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"``"U]!U@-WZ[\:#/7=0;N__5%S>4S5&GF>N1$S$7
-MNE7UR\[_!`^JG&P35C'1PZSMD,QZAE@`O:(U7G(]J!NP5?`@5%,QM8\&^?6#
-MEOHH\1*IOBXPJ<.J)404-"$53G?5\JC/4?,CEO<N`=-@//2*JNGV#;@/4I]J
-M3P\B+'(4_98W`2D``"00/9MTY-<_UQ$+6$^IY8LV+G+^HWHJN`-RI'+KQ;Q>
-M:BD``!P``$`$MC_KY`"U;!6ZN#"#(6]]BN@;3F`````<``!`!7)&,7RD'A!U
-M8:,^C1`E:0#CW-.U$!.W1C6I"`"8`0``F`$```(```!%``&4;@,``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=E-#H<@XJQTFT``````````"$@(@@````````!>"(`
-M`'@```!T`0$`!P,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``?3A<+&Y<@^P7
-M4O52O:5\D7[3#DZ#*N`LQ-']C&[\(#N&41#6ZD6!KB/Z2=EMG7R!BZQY^Y,G
-MV:)^?A!\<*D/U1WAY9$7<:UB^N.BIPI'*L+<2"W5&,^B)Z"10/C%MEHK=XMX
-M#_54JBVY]PT@-J+&O43S75"^LEH*-9]P)D^,/X0I```D1)A`M#.3C(BS1:.R
-M6.E03*`@[N?>XH()`<O!RUD@49$I```<``!`!*JLAEM^OP5?-TY@YU,Z02'S
-M5QW.````'```0`52HAQW*:V3XB"14X_?]&:W\+_))A`3MT9[U0L`F`$``)@!
-M```"````10`!E&X$``!`$0``P*@!`<"H`0(!]`'T`8`'930Z'(.*L=)M````
-M```````A("((`````````7@B``!X````=`$!``<#```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``'TX7"QN7(/L%U+U4KVE?)%^TPY.@RK@+,31_8QN_"`[AE$0
-MUNI%@:XC^DG9;9U\@8NL>?N3)]FB?GX0?'"I#]4=X>61%W&M8OKCHJ<*1RK"
-MW$@MU1C/HB>@D4#XQ;9:*W>+>`_U5*HMN?<-(#:BQKU$\UU0OK):"C6?<"9/
-MC#^$*0``)$280+0SDXR(LT6CLECI4$R@(.[GWN*""0'+P<M9(%&1*0``'```
-M0`2JK(9;?K\%7S=.8.=3.D$A\U<=S@```!P``$`%4J(<=RFMD^(@D5./W_1F
-MM_"_R281$[=&S=0"`)@!``"8`0```@```$4``91N!0``0!$``,"H`0'`J`$"
-M`?0!]`&`!V4T.AR#BK'2;0``````````(2`B"`````````%X(@``>````'0!
-M`0`'`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"``!].%PL;ER#[!=2]5*]I7R1
-M?M,.3H,JX"S$T?V,;OP@.X91$-;J18&N(_I)V6V=?(&+K'G[DR?9HGY^$'QP
-MJ0_5'>'ED1=QK6+ZXZ*G"D<JPMQ(+=48SZ(GH)%`^,6V6BMWBW@/]52J+;GW
-M#2`VHL:]1/-=4+ZR6@HUGW`F3XP_A"D``"1$F$"T,Y.,B+-%H[)8Z5!,H"#N
-MY][B@@D!R\'+62!1D2D``!P``$`$JJR&6WZ_!5\W3F#G4SI!(?-7'<X````<
-M``!`!5*B''<IK9/B()%3C]_T9K?PO\DF$A.W1@S@``"8`0``F`$```(```!%
-M``&4;@8``$`1``#`J`$!P*@!`@'T`?0!@`=EP7OD9QUPP^\``````````"$@
-M(@@````````!>"(``'@```!T`0$`"`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``P;T:]E$02XCYO<F=LP=.X[(+B@HJO4O6M2N-JJ@VM[?1ZS*F%8W50SH7
-M?[!:_4>*\TJ#WE&8093XO1J0_ND:R2K,D!DT,GD;1?Y4#.WLNN4';(F1/[WU
-M&U)U8]LA$BI,+=(+5MNS.HUK.TKJ,C%]U(?%T'5QS#AO5M\@6UFWD\@I```D
-MV3?/+A!;$XB3D[`0<;R];TWN?I>=^$UT>PX!GC?LS/,I```<``!`!.Q@X2Q?
-M#$)"JR$VH[/Z9YPD\'M+````'```0`6?HW'<SS.N;$G%)TWZ2AT_L93.51(3
-MMT8J#00`F`$``)@!```"````10`!E&X'``!`$0``P*@!`<"H`0(!]`'T`8`'
-M9<%[Y&<=<,/O```````````A("((`````````7@B``!X````=`$!``@#```,
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``,&]&O91$$N(^;W)G;,'3N.R"XH**KU+
-MUK4KC:JH-K>WT>LRIA6-U4,Z%W^P6OU'BO-*@]Y1F$&4^+T:D/[I&LDJS)`9
-M-#)Y&T7^5`SM[+KE!VR)D3^]]1M2=6/;(1(J3"W2"U;;LSJ-:SM*ZC(Q?=2'
-MQ=!U<<PX;U;?(%M9MY/(*0``)-DWSRX06Q.(DY.P$'&\O6]-[GZ7G?A-='L.
-M`9XW[,SS*0``'```0`3L8.$L7PQ"0JLA-J.S^F><)/![2P```!P``$`%GZ-Q
-MW,\SKFQ)Q2=-^DH=/[&4SE42$[=&TTX*`)@!``"8`0```@```$4``91N"```
-M0!$``,"H`0'`J`$"`?0!]`&`!V7!>^1G'7##[P``````````(2`B"```````
-M``%X(@``>````'0!`0`(`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#!O1KV
-M41!+B/F]R9VS!T[CL@N*"BJ]2]:U*XVJJ#:WM]'K,J85C=5#.A=_L%K]1XKS
-M2H/>49A!E/B]&I#^Z1K)*LR0&30R>1M%_E0,[>RZY0=LB9$_O?4;4G5CVR$2
-M*DPMT@M6V[,ZC6L[2NHR,7W4A\70=7',.&]6WR!;6;>3R"D``"39-\\N$%L3
-MB).3L!!QO+UO3>Y^EYWX371[#@&>-^S,\RD``!P``$`$[&#A+%\,0D*K(3:C
-ML_IGG"3P>TL````<``!`!9^C<=S/,ZYL2<4G3?I*'3^QE,Y5$Q.W1J-="`"8
-M`0``F`$```(```!%``&4;AL``$`1``#`J`$!P*@!`@'T`?0!@`=E]9S48[ZQ
-M`F@``````````"$@(@@````````!>"(``'@```!T`0$`"0,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``K38\*#:U.?#>RWA>I/G!X$\\Q,GVKAM$/3.^=CP_
-M#\!F@LL4!V`E?5I+HC75",`6*&V\ET43Y0Y3G+AS.)N'H@0'#-+8/$/!9MAZ
-MV-$XZ.@SZ0B*:MT@B[L:]AVL@T,;0<#);_JI7/0Y@DRTF<7#H`YX;0<V)H*C
-MD:)K6SO`5F,I```D/<T3EJ.!L+1@?AFL)U!`FA@E*JXDX>*AN=9&QQE*?THI
-M```<``!`!)FEB];52EC/^_90RA6`1D\G1.?6````'```0`50F#,7&P0-BG1^
-MXHAK,4+WQB@@HQ,3MT:.APL`F`$``)@!```"````10`!E&X=``!`$0``P*@!
-M`<"H`0(!]`'T`8`'9?6<U&.^L0)H```````````A("((`````````7@B``!X
-M````=`$!``D#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``*TV/"@VM3GPWLMX
-M7J3YP>!//,3)]JX;1#TSOG8\/P_`9H++%`=@)7U:2Z(UU0C`%BAMO)=%$^4.
-M4YRX<SB;AZ($!PS2V#Q#P6;8>MC1..CH,^D(BFK=((N[&O8=K(-#&T'`R6_Z
-MJ5ST.8),M)G%PZ`.>&T'-B:"HY&B:UL[P%9C*0``)#W-$Y:C@;"T8'X9K"=0
-M0)H8)2JN).'BH;G61L<92G]**0``'```0`29I8O6U4I8S_OV4,H5@$9/)T3G
-MU@```!P``$`%4)@S%QL$#8IT?N*(:S%"]\8H(*,4$[=&L88"`)@!``"8`0``
-M`@```$4``91N(0``0!$``,"H`0'`J`$"`?0!]`&`!V7UG-1COK$":```````
-M````(2`B"`````````%X(@``>````'0!`0`)`P``#`$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``"M-CPH-K4Y\-[+>%ZD^<'@3SS$R?:N&T0],[YV/#\/P&:"RQ0'
-M8"5]6DNB-=4(P!8H;;R711/E#E.<N',XFX>B!`<,TM@\0\%FV'K8T3CHZ#/I
-M"(IJW2"+NQKV':R#0QM!P,EO^JE<]#F"3+29Q<.@#GAM!S8F@J.1HFM;.\!6
-M8RD``"0]S1.6HX&PM&!^&:PG4$":&"4JKB3AXJ&YUD;'&4I_2BD``!P``$`$
-MF:6+UM5*6,_[]E#*%8!&3R=$Y]8````<``!`!5"8,Q<;!`V*='[BB&LQ0O?&
-M*""C%1.W1N20``"8`0``F`$```(```!%``&4;B(``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E$[X*D(`5^*8``````````"$@(@@````````!>"(``'@```!T`0$`
-M`P,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``5L`!?-6\?'O/$VLP&9@`V0LY
-M*$>RNBZ=1J01.2_F%%B2MZ5F9[H*'O/)G#]IU7VW>CL^$?Z2;I&1_L!4I$-!
-M'^A*Z-S+2I/#=O0^>_!L+Y*RJNLIEE;8=C\;WK57-R]"._)<R",XG-[_D\.!
-MV'@Q#R"#I6P&W=:$B$[!":!]]DDI```DN((;MW%ID3X9HLY1:W>*P*RV'LF8
-M$^$;R8&]GGO,@I4I```<``!`!">R3$-$PXRPJ4P'MWDD%*7WK[AI````'```
-M0`4[*6*Q20+0UC.Z7;$H+C-,I#RDP143MT8@OP,`F`$``)@!```"````10`!
-ME&XG``!`$0``P*@!`<"H`0(!]`'T`8`'91.^"I"`%?BF```````````A("((
-M`````````7@B``!X````=`$!``,#```,`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M`%;``7S5O'Q[SQ-K,!F8`-D+.2A'LKHNG4:D$3DOYA18DK>E9F>Z"A[SR9P_
-M:=5]MWH[/A'^DFZ1D?[`5*1#01_H2NC<RTJ3PW;T/GOP;"^2LJKK*996V'8_
-M&]ZU5S<O0COR7,@C.)S>_Y/#@=AX,0\@@Z5L!MW6A(A.P0F@??9)*0``)+B"
-M&[=Q:9$^&:+.46MWBL"LMA[)F!/A&\F!O9Y[S(*5*0``'```0`0GLDQ#1,.,
-ML*E,![=Y)!2E]Z^X:0```!P``$`%.REBL4D"T-8SNEVQ*"XS3*0\I,$5$[=&
-MH@`*`)@!``"8`0```@```$4``91N+```0!$``,"H`0'`J`$"`?0!]`&`!V43
-MO@J0@!7XI@``````````(2`B"`````````%X(@``>````'0!`0`#`P``#`$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"``!6P`%\U;Q\>\\3:S`9F`#9"SDH1[*Z+IU&
-MI!$Y+^846)*WI69GN@H>\\F</VG5?;=Z.SX1_I)ND9'^P%2D0T$?Z$KHW,M*
-MD\-V]#Y[\&PODK*JZRF65MAV/QO>M5<W+T([\ES((SB<WO^3PX'8>#$/((.E
-M;`;=UH2(3L$)H'WV22D``"2X@ANW<6F1/AFBSE%K=XK`K+8>R9@3X1O)@;V>
-M>\R"E2D``!P``$`$)[),0T3#C+"I3`>W>204I?>ON&D````<``!`!3LI8K%)
-M`M#6,[I=L2@N,TRD/*3!%A.W1DL."`"8`0``F`$```(```!%``&4;C0``$`1
-M``#`J`$!P*@!`@'T`?0!@`=EA/IUV/3)9MD``````````"$@(@@````````!
-M>"(``'@```!T`0$`!`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``Q?H"?Z)6
-MZ='^!V?XLJ*S8*J/7.X&!9?A\SSH?R4=<5]XY*"#B:DAT7Q2G=_#?OS.2MP9
-ME=83>YGBS:`45D#0H^>13[N.(MA344X-*@D4MW>[`O#I##B5J6FM%0WM//T"
-MWX!6`LV*8Y$.VI$(2.M(&`+Z5>9VXQYT'7Q_,4NM-?8I```D<(H]F6*.W3P^
-MIX>:J3)"I[SF]+>C0)':<$@O85;)!0XI```<``!`!*!0AYS2L"NIP\HFYR%!
-M\-Y;0JZ,````'```0`5),<,^<2Q62/-H\FO.C`DQ<)8&6Q83MT8..0L`F`$`
-M`)@!```"````10`!E&XV``!`$0``P*@!`<"H`0(!]`'T`8`'983Z==CTR6;9
-M```````````A("((`````````7@B``!X````=`$!``0#```,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``,7Z`G^B5NG1_@=G^+*BLV"JCUSN!@67X?,\Z'\E'7%?
-M>.2@@XFI(=%\4IW?PW[\SDK<&976$WN9XLV@%%9`T*/GD4^[CB+84U%.#2H)
-M%+=WNP+PZ0PXE:EIK14-[3S]`M^`5@+-BF.1#MJ1"$CK2!@"^E7F=N,>=!U\
-M?S%+K37V*0``)'"*/9EBCMT\/J>'FJDR0J>\YO2WHT"1VG!(+V%6R04.*0``
-M'```0`2@4(><TK`KJ</*)N<A0?#>6T*NC````!P``$`%23'#/G$L5DCS:/)K
-MSHP),7"6!EL7$[=&@3@"`)@!``"8`0```@```$4``91N.0``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V6$^G78],EFV0``````````(2`B"`````````%X(@``>```
-M`'0!`0`$`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"``#%^@)_HE;IT?X'9_BR
-MHK-@JH]<[@8%E^'S/.A_)1UQ7WCDH(.)J2'1?%*=W\-^_,Y*W!F5UA-[F>+-
-MH!160-"CYY%/NXXBV%-13@TJ"12W=[L"\.D,.)6I::T5#>T\_0+?@%8"S8IC
-MD0[:D0A(ZT@8`OI5YG;C'G0=?'\Q2ZTU]BD``"1PBCV98H[=/#ZGAYJI,D*G
-MO.;TMZ-`D=IP2"]A5LD%#BD``!P``$`$H%"'G-*P*ZG#RB;G(4'PWEM"KHP`
-M```<``!`!4DQPSYQ+%9(\VCR:\Z,"3%PE@9;&!.W1E]&``"8`0``F`$```(`
-M``!%``&4;D```$`1``#`J`$!P*@!`@'T`?0!@`=E%SR3M1:FP=8`````````
-M`"$@(@@````````!>"(``'@```!T`0$`!0,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``<;QRVXK8.D\^K!>>ANF*_&`UC:<K=:?%\OE99KDKX2"98DC"0+=F
-M"$MN'M4HXV8@]LLU]67AP5(5P2!P2K-A=8KH.IYOB11*TIX($Q2A=84;SI0D
-M-6X>%4&NQ5;+$Q]*<N%5V2.*BU`@F)Z59I36LKBK^D=(IV!8@KT\ZOF1)0(I
-M```DW"XVMA>7C<RD^[B]U"(31A1A\R;OS23UXCA*JU:[,N<I```<``!`!'8O
-M?O%-[3,70PL2,[\9/R?+(G3F````'```0`7O='2QJXEY2L0!B`ZG2Z#GQ'KC
-M\A@3MT;D<`,`F`$``)@!```"````10`!E&Y!``!`$0``P*@!`<"H`0(!]`'T
-M`8`'91<\D[46IL'6```````````A("((`````````7@B``!X````=`$!``4#
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``'&\<MN*V#I//JP7GH;IBOQ@-8VG
-M*W6GQ?+Y66:Y*^$@F6)(PD"W9@A+;A[5*.-F(/;+-?5EX<%2%<$@<$JS876*
-MZ#J>;XD42M*>"!,4H76%&\Z4)#5N'A5!KL56RQ,?2G+A5=DCBHM0()B>E6:4
-MUK*XJ_I'2*=@6(*]/.KYD24"*0``)-PN-K87EXW,I/NXO=0B$T848?,F[\TD
-M]>(X2JM6NS+G*0``'```0`1V+W[Q3>TS%T,+$C._&3\GRR)TY@```!P``$`%
-M[W1TL:N)>4K$`8@.ITN@Y\1ZX_(8$[=&4K()`)@!``"8`0```@```$4``91N
-M0@``0!$``,"H`0'`J`$"`?0!]`&`!V47/).U%J;!U@``````````(2`B"```
-M``````%X(@``>````'0!`0`%`P``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``!Q
-MO'+;BM@Z3SZL%YZ&Z8K\8#6-IRMUI\7R^5EFN2OA()EB2,)`MV8(2VX>U2CC
-M9B#VRS7U9>'!4A7!('!*LV%UBN@ZGF^)%$K2G@@3%*%UA1O.E"0U;AX50:[%
-M5LL3'TIRX579(XJ+4""8GI5FE-:RN*OZ1TBG8%B"O3SJ^9$E`BD``"3<+C:V
-M%Y>-S*3[N+W4(A-&%&'S)N_-)/7B.$JK5KLRYRD``!P``$`$=B]^\4WM,Q=#
-M"Q(SOQD_)\LB=.8````<``!`!>]T=+&KB7E*Q`&(#J=+H.?$>N/R&1.W1AN^
-M!P"8`0``F`$```(```!%``&4;D0``$`1``#`J`$!P*@!`@'T`?0!@`=E=-1L
-M,,7"UTP``````````"$@(@@````````!>"(``'@```!T`0$`"`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``('68/\_DVDXUY[K1@C%4*A*U88B2-MFE8@>0
-M1KG2\`3,JT$I9V:,WE6975+Y[W6/_]&T]QL*-[ZOLZN?_WXVL3VQG;%E%AT-
-M+DP0GH#^IH_CU!?:H695CMH)\LJ`0=99J*^-]%5!#P'QU$.6]H3*H,E?CL,I
-MAC+A(-`YL2',-G\I```D#HV#<Y?`=Z#'R+G-!G03.<P\O665YT;RF#(D73FQ
-M\6@I```<``!`!"50VI=-MOI'7FIL'15AFG869)1@````'```0`6ECYOG^_)Y
-M%%%%CN:H`O='CLX=S1D3MT;8Z@H`F`$``)@!```"````10`!E&Y%``!`$0``
-MP*@!`<"H`0(!]`'T`8`'9734;##%PM=,```````````A("((`````````7@B
-M``!X````=`$!``@#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``"!UF#_/Y-I.
-M->>ZT8(Q5"H2M6&(DC;9I6('D$:YTO`$S*M!*6=FC-Y5F5U2^>]UC__1M/<;
-M"C>^K[.KG_]^-K$]L9VQ918=#2Y,$)Z`_J:/X]07VJ%F58[:"?+*@$'66:BO
-MC?1500\!\=1#EO:$RJ#)7X[#*88RX2#0.;$AS#9_*0``)`Z-@W.7P'>@Q\BY
-MS09T$SG,/+UEE>=&\I@R)%TYL?%H*0``'```0`0E4-J73;;Z1UYJ;!T589IV
-M%F248````!P``$`%I8^;Y_OR>11118[FJ`+W1X[.'<T:$[=&&.H!`)@!``"8
-M`0```@```$4``91N1@``0!$``,"H`0'`J`$"`?0!]`&`!V5TU&PPQ<+73```
-M````````(2`B"`````````%X(@``>````'0!`0`(`P``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"```@=9@_S^3:3C7GNM&",50J$K5AB)(VV:5B!Y!&N=+P!,RK
-M02EG9HS>59E=4OGO=8__T;3W&PHWOJ^SJY__?C:Q/;&=L646'0TN3!">@/ZF
-MC^/4%]JA9E6.V@GRRH!!UEFHKXWT54$/`?'40Y;VA,J@R5^.PRF&,N$@T#FQ
-M(<PV?RD``"0.C8-SE\!WH,?(N<T&=!,YS#R]997G1O*8,B1=.;'Q:"D``!P`
-M`$`$)5#:ETVV^D=>:FP=%6&:=A9DE&`````<``!`!:6/F^?[\GD4446.YJ@"
-M]T>.SAW-&A.W1F,X#P"8`0``F`$```(```!%``&4;E$``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E^GC!EZ,+PI<``````````"$@(@@````````!>"(``'@```!T
-M`0$`"0,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``/$7</%<WIB(\Q1*'VZ>>
-MEN?E%2*B926>='E=0_IJ7`6-[FTUA1[@QL4$9:O`D+8R9$=@M0.AN98K#TZT
-MDV4]$3*8!O5?7B-V>^WJ@50U)QVOH)HVQZ(R+3VOCP06:+8)#`1,3.G<AW1&
-MXRWA`"0V?CADJZN=TBZFT%IQ%2H"NFLI```D1EQ"IVK;45U::''T'(VE[0L4
-M'I*$/C4@A-C9"-)/;24I```<``!`!``-Y9P&W%C[M\JX?86%L,\;$F;'````
-M'```0`5CK@[./%5$.XS+:+!FE>7R/-@>JQL3MT:*(@,`F`$``)@!```"````
-M10`!E&Y3``!`$0``P*@!`<"H`0(!]`'T`8`'9?IXP9>C"\*7```````````A
-M("((`````````7@B``!X````=`$!``D#```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``#Q%W#Q7-Z8B/,42A]NGGI;GY14BHF4EGG1Y74/Z:EP%C>YM-84>X,;%
-M!&6KP)"V,F1'8+4#H;F6*P].M)-E/1$RF`;U7UXC=GOMZH%4-2<=KZ":-L>B
-M,BT]KX\$%FBV"0P$3$SIW(=T1N,MX0`D-GXX9*NKG=(NIM!:<14J`KIK*0``
-M)$9<0J=JVU%=6FAQ]!R-I>T+%!Z2A#XU((38V0C23VTE*0``'```0`0`#>6<
-M!MQ8^[?*N'V%A;#/&Q)FQP```!P``$`%8ZX.SCQ51#N,RVBP9I7E\CS8'JL;
-M$[=&&V0)`)@!``"8`0```@```$4``91N5```0!$``,"H`0'`J`$"`?0!]`&`
-M!V7Z>,&7HPO"EP``````````(2`B"`````````%X(@``>````'0!`0`)`P``
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"```\1=P\5S>F(CS%$H?;IYZ6Y^45(J)E
-M)9YT>5U#^FI<!8WN;36%'N#&Q01EJ\"0MC)D1V"U`Z&YEBL/3K2393T1,I@&
-M]5]>(W9[[>J!5#4G':^@FC;'HC(M/:^/!!9HM@D,!$Q,Z=R'=$;C+>$`)#9^
-M.&2KJYW2+J;06G$5*@*Z:RD``"1&7$*G:MM175IH<?0<C:7M"Q0>DH0^-2"$
-MV-D(TD]M)2D``!P``$`$``WEG`;<6/NWRKA]A86PSQL29L<````<``!`!6.N
-M#LX\540[C,MHL&:5Y?(\V!ZK'!.W1N-Q!P"8`0``F`$```(```!%``&4;ET`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E>9I]X`\$$?$``````````"$@(@@`````
-M```!>"(``'@```!T`0$`"@,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``9&[Q
-MX.?8-I=+.!(7H]*]QL'0='54!_7_W^$E/VY!%A[]Z?P35->9EAL]$>=^)P9C
-ME[E*+30;*NL,!3.>I\:_O7%VN8[6#!R08$]E?9?0.O`GBQLEM[NP&]V\0SCI
-MU3,E;$95;LQLB7=+$"6T1<6]X>B^$@J]HMX)+/[1^T)0ZN`I```D9HHT/6_;
-M!8[%QL>PQQ&/-G.OTLY2A]&'DS^X8>OQ?VHI```<``!`!'0_'M]I&_G@;<@.
-M,H258ML;*.7+````'```0`48W21+Q/^U@[DZZ5?M(GB-+>JQXAP3MT:=G`H`
-MF`$``)@!```"````10`!E&Y>``!`$0``P*@!`<"H`0(!]`'T`8`'97F:?>`/
-M!!'Q```````````A("((`````````7@B``!X````=`$!``H#```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``&1N\>#GV#:72S@2%Z/2O<;!T'1U5`?U_]_A)3]N
-M018>_>G\$U37F98;/1'G?B<&8Y>Y2BTT&RKK#`4SGJ?&O[UQ=KF.U@P<D&!/
-M97V7T#KP)XL;);>[L!O=O$,XZ=4S)6Q&56[,;(EW2Q`EM$7%O>'HOA(*O:+>
-M"2S^T?M"4.K@*0``)&:*-#UOVP6.Q<;'L,<1CS9SK]+.4H?1AY,_N&'K\7]J
-M*0``'```0`1T/Q[?:1OYX&W(#C*$E6+;&RCERP```!P``$`%&-TD2\3_M8.Y
-M.NE7[2)XC2WJL>(=$[=&W9L!`)@!``"8`0```@```$4``91N7P``0!$``,"H
-M`0'`J`$"`?0!]`&`!V5YFGW@#P01\0``````````(2`B"`````````%X(@``
-M>````'0!`0`*`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"``!D;O'@Y]@VETLX
-M$A>CTKW&P=!T=50']?_?X24_;D$6'OWI_!-4UYF6&ST1YWXG!F.7N4HM-!LJ
-MZPP%,YZGQK^]<7:YCM8,')!@3V5]E]`Z\">+&R6WN[`;W;Q#..G5,R5L1E5N
-MS&R)=TL0);1%Q;WAZ+X2"KVBW@DL_M'[0E#JX"D``"1FBC0];]L%CL7&Q[#'
-M$8\V<Z_2SE*'T8>3/[AAZ_%_:BD``!P``$`$=#\>WVD;^>!MR`XRA)5BVQLH
-MY<L````<``!`!1C=)$O$_[6#N3KI5^TB>(TMZK'B'1.W1@/K#@"8`0``F`$`
-M``(```!%``&4;F```$`1``#`J`$!P*@!`@'T`?0!@`=EJHU7TT[0UCD`````
-M`````"$@(@@````````!>"(``'@```!T`0$`"P,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``,Z]!_!5BR]W3]]"9P)!(Q$V&'\V%Z+>.B@<W67XWI]XKLUE8
-M#BD8,"Z8;O&SB;8OH%1+KR<:V*&=I,]"!./@HF,Z7J=I=+ALI?$S(`"*LL,]
-M2W32ME;$-IT1W0BQ2#I\VZ"@^>[WWCQ+.1T4,&6CPL3H!"\@.4/*:U;&`8"8
-MX4\I```D.,822%]O^Q$FS^FCG>S*]"HT4SHHR!/6Y_8@@@XSW$$I```<``!`
-M!(,A5J%\RY1IE%_O:RH%CPJF#\)+````'```0`5FAD876WDORGD<3UDP>:R'
-M6);O-!X3MT9[U`(`F`$``)@!```"````10`!E&YC``!`$0``P*@!`<"H`0(!
-M]`'T`8`'9:J-5]-.T-8Y```````````A("((`````````7@B``!X````=`$!
-M``L#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``#.O0?P58LO=T_?0F<"02,1-
-MAA_-A>BWCHH'-UE^-Z?>*[-96`XI&#`NF&[QLXFV+Z!42Z\G&MBAG:3/0@3C
-MX*)C.EZG:72X;*7Q,R``BK+#/4MTTK96Q#:=$=T(L4@Z?-N@H/GN]]X\2SD=
-M%#!EH\+$Z`0O(#E#RFM6Q@&`F.%/*0``)#C&$DA?;_L1)L_IHYWLRO0J-%,Z
-M*,@3UN?V(((.,]Q!*0``'```0`2#(5:A?,N4:91?[VLJ!8\*I@_"2P```!P`
-M`$`%9H9&%UMY+\IY'$]9,'FLAUB6[S0>$[=&"Q8)`)@!``"8`0```@```$4`
-M`91N:P``0!$``,"H`0'`J`$"`?0!]`&`!V6JC5?33M#6.0``````````(2`B
-M"`````````%X(@``>````'0!`0`+`P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M```SKT'\%6++W=/WT)G`D$C$388?S87HMXZ*!S=9?C>GWBNS65@.*1@P+IAN
-M\;.)MB^@5$NO)QK8H9VDST($X^"B8SI>IVETN&RE\3,@`(JRPSU+=-*V5L0V
-MG1'="+%(.GS;H*#Y[O?>/$LY'10P9:/"Q.@$+R`Y0\IK5L8!@)CA3RD``"0X
-MQA)(7V_[$2;/Z:.=[,KT*C13.BC($];G]B""#C/<02D``!P``$`$@R%6H7S+
-ME&F47^]K*@6/"J8/PDL````<``!`!6:&1A=;>2_*>1Q/63!YK(=8EN\T'Q.W
-M1B(B!P"8`0``F`$```(```!%``&4;G<``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M;11P('J$`"0``````````"$@(@@````````!>"(``'@```!T`0$`#0,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``F>Z:XW*'%.W1H(V=/DZ`@0<-@0:U<M3(
-MEFX<51N#UIQ'\"KS$BL/3],5W4?L"*JO`T)^_X&W<T75[EBD]2*KM+`[O-A%
-M@$44ZTOU"W!8),0Z>(C^6>/\FFPF3<(\1AFQW`SZ!?2_E'1%BI\8^IZHEY<1
-M$/"VO._)AS-0@FU#=O$I```DV4R'5VO#H3=EK=S:@NW0O%$K2$,8'M>0DL;[
-M-;B0")<I```<``!`!'8@;SEJ@3EQ50@P1HYHSRYGVX5Q````'```0`575\BO
-MA62'DK4H8#A,QE^Q_C"`C1\3MT983@H`F`$``)@!```"````10`!E&YY``!`
-M$0``P*@!`<"H`0(!]`'T`8`'96T4<"!ZA``D```````````A("((````````
-M`7@B``!X````=`$!``T#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``)GNFN-R
-MAQ3MT:"-G3Y.@($'#8$&M7+4R)9N'%4;@]:<1_`J\Q(K#T_3%=U'[`BJKP-"
-M?O^!MW-%U>Y8I/4BJ[2P.[S818!%%.M+]0MP6"3$.GB(_EGC_)IL)DW"/$89
-ML=P,^@7TOY1T18J?&/J>J)>7$1#PMKSOR8<S4()M0W;Q*0``)-E,AU=KPZ$W
-M9:W<VH+MT+Q1*TA#&![7D)+&^S6XD`B7*0``'```0`1V(&\Y:H$Y<54(,$:.
-M:,\N9]N%<0```!P``$`%5U?(KX5DAY*U*&`X3,9?L?XP@(T@$[=&LDT!`)@!
-M``"8`0```@```$4``91N>@``0!$``,"H`0'`J`$"`?0!]`&`!V5M%'`@>H0`
-M)```````````(2`B"`````````%X(@``>````'0!`0`-`P``#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``"9[IKC<H<4[=&@C9T^3H"!!PV!!K5RU,B6;AQ5&X/6
-MG$?P*O,2*P]/TQ7=1^P(JJ\#0G[_@;=S1=7N6*3U(JNTL#N\V$6`113K2_4+
-M<%@DQ#IXB/Y9X_R:;"9-PCQ&&;'<#/H%]+^4=$6*GQCZGJB7EQ$0\+:\[\F'
-M,U"";4-V\2D``"393(=7:\.A-V6MW-J"[="\42M(0Q@>UY"2QOLUN)`(ERD`
-M`!P``$`$=B!O.6J!.7%5"#!&CFC/+F?;A7$````<``!`!5=7R*^%9(>2M2A@
-M.$S&7['^,("-(!.W1G6<#@"8`0``F`$```(```!%``&4;GL``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E#$\;H2=>V_8``````````"$@(@@````````!>"(``'@`
-M``!T`0$`#@,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``Y@H0)YQ#>MMWQ^0P
-M+**;?FJ%N*M+-OFV):*%71<SWV;6>N(OR983M&D=_?AQ,A"([B#^./MY07R=
-MFNC?"I>$S!LN/JF^C*BXR%MFTT)J/<PN=2MTV900-'0DFT(SP;!YL5=/+\_K
-MY-G)Z4(\^+$/FE/Q<P>VL,KX9K>Y]OD6%Z<I```DRJ<0%TRFJZ<]_XRC((F^
-MI@SINEOZBP#/5FP9!OJ;J.@I```<``!`!*OB2RD`FU,>SJ*I@V1O&U79=Q7`
-M````'```0`605^V0^V1P`@/C>!IYQT4.TMU$]"$3MT8@A@(`F`$``)@!```"
-M````10`!E&Y\``!`$0``P*@!`<"H`0(!]`'T`8`'90Q/&Z$G7MOV````````
-M```A("((`````````7@B``!X````=`$!``X#```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``.8*$"><0WK;=\?D,"RBFWYJA;BK2S;YMB6BA5T7,]]FUGKB+\F6
-M$[1I'?WX<3(0B.X@_CC[>4%\G9KHWPJ7A,P;+CZIOHRHN,A;9M-":CW,+G4K
-M=-F4$#1T))M",\&P>;%73R_/Z^39R>E"//BQ#YI3\7,'MK#*^&:WN?;Y%A>G
-M*0``),JG$!=,IJNG/?^,HR")OJ8,Z;I;^HL`SU9L&0;ZFZCH*0``'```0`2K
-MXDLI`)M3'LZBJ8-D;QM5V7<5P````!P``$`%D%?MD/MD<`(#XW@:><=%#M+=
-M1/0A$[=&R<<(`)@!``"8`0```@```$4``91N?0``0!$``,"H`0'`J`$"`?0!
-M]`&`!V4,3QNA)U[;]@``````````(2`B"`````````%X(@``>````'0!`0`.
-M`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``#F"A`GG$-ZVW?'Y#`LHIM^:H6X
-MJTLV^;8EHH5=%S/?9M9ZXB_)EA.T:1W]^'$R$(CN(/XX^WE!?)V:Z-\*EX3,
-M&RX^J;Z,J+C(6V;30FH]S"YU*W39E!`T="2;0C/!L'FQ5T\OS^ODV<GI0CSX
-ML0^:4_%S![:PROAFM[GV^187IRD``"3*IQ`73*:KISW_C*,@B;ZF#.FZ6_J+
-M`,]6;!D&^INHZ"D``!P``$`$J^)+*0";4Q[.HJF#9&\;5=EW%<`````<``!`
-M!9!7[9#[9'`"`^-X&GG'10[2W43T(A.W1D#3!@"8`0``F`$```(```!%``&4
-M;H@``$`1``#`J`$!P*@!`@'T`?0!@`=E$,9$4<OSD%$``````````"$@(@@`
-M```````!>"(``'@```!T`0$`#P,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M2XJ2[Z>G3%0,*(?^V.VK:<W])Z"M='C$R!LOA<A`KK*QBCM>X;K[LF\P8S2H
-M(Y-&Q1='F91OK()HRE9P4#H.08844P"+T>[6;7-X417-C.AOW3KRTPC^[2$#
-M\3\(I@@^50/\T/KS;*JJNB8\P+I;VHO2&1UYOT?Z52JQ9QU!&>LI```DR:L]
-M#;#+8IXPG%L"%%"LMV,Z$@#G,53<_%"Z[3O4L@<I```<``!`!&FUG1VA^-JK
-MX`AJ\90*=(JX$IXN````'```0`4X:"ZU%[:'SPYHK(__,^.?>T167R(3MT8>
-M``H`F`$``)@!```"````10`!E&Z)``!`$0``P*@!`<"H`0(!]`'T`8`'91#&
-M1%'+\Y!1```````````A("((`````````7@B``!X````=`$!``\#```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``$N*DN^GITQ4#"B'_MCMJVG-_2>@K71XQ,@;
-M+X7(0*ZRL8H[7N&Z^[)O,&,TJ".31L471YF4;ZR":,I6<%`Z#D&&%%,`B]'N
-MUFUS>%$5S8SH;]TZ\M,(_NTA`_$_"*8(/E4#_-#Z\VRJJKHF/,"Z6]J+TAD=
-M>;]'^E4JL6<=01GK*0``),FK/0VPRV*>,)Q;`A10K+=C.A(`YS%4W/Q0NNT[
-MU+('*0``'```0`1IM9T=H?C:J^`(:O&4"G2*N!*>+@```!P``$`%.&@NM1>V
-MA\\.:*R/_S/CGWM$5E\C$[=&=/\``)@!``"8`0```@```$4``91NB@``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V40QD11R_.040``````````(2`B"`````````%X
-M(@``>````'0!`0`/`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"``!+BI+OIZ=,
-M5`PHA_[8[:MIS?TGH*UT>,3(&R^%R$"NLK&*.U[ANONR;S!C-*@CDT;%%T>9
-ME&^L@FC*5G!0.@Y!AA13`(O1[M9M<WA1%<V,Z&_=.O+3"/[M(0/Q/PBF"#Y5
-M`_S0^O-LJJJZ)CS`NEO:B](9'7F_1_I5*K%G'4$9ZRD``"3)JST-L,MBGC"<
-M6P(44*RW8SH2`.<Q5-S\4+KM.]2R!RD``!P``$`$:;6=':'XVJO@"&KQE`IT
-MBK@2GBX````<``!`!3AH+K47MH?/#FBLC_\SXY][1%9?(Q.W1H%-#@"8`0``
-MF`$```(```!%``&4;HT``$`1``#`J`$!P*@!`@'T`?0!@`=EJ0%3GA(>[_D`
-M`````````"$@(@@````````!>"(``'@```!T`0$`$`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``GZRXN(LB,Z!LE&PUXZL-=/)IM96*\@N,"P>:.6^[W>+M
-M"^KDVT?R$`]NF<;O3%.X)<:OY$K1X!VFWD0BWYR_D8Z`^S4`*2H/,,BJ\7IT
-M][88,[_L2WLKU)WQ[/WI750JO4M-C_I`CLU(%/36D]K5T.=KSR[-$5+,X6:%
-MT/Y7<,@I```DA1_$)?Z\^8^<_/QP4T]S)K`$"5E1B,<5AA0FW*"&8H@I```<
-M``!`!*[_`3KX6#Z_U?P<!]7-Q-&`QMN`````'```0`6&G]?CO_MTBHR5;NS>
-MH*Q$LB:1^203MT8-.`(`F`$``)@!```"````10`!E&Z2``!`$0``P*@!`<"H
-M`0(!]`'T`8`'9:D!4YX2'N_Y```````````A("((`````````7@B``!X````
-M=`$!`!`#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``)^LN+B+(C.@;)1L->.K
-M#73R:;65BO(+C`L'FCEON]WB[0OJY-M'\A`/;IG&[TQ3N"7&K^1*T>`=IMY$
-M(M^<OY&.@/LU`"DJ#S#(JO%Z=/>V&#._[$M[*]2=\>S]Z5U4*KU+38_Z0([-
-M2!3TUI/:U=#G:\\NS1%2S.%FA=#^5W#(*0``)(4?Q"7^O/F/G/S\<%-/<R:P
-M!`E948C'%884)MR@AF*(*0``'```0`2N_P$Z^%@^O]7\'`?5S<31@,;;@```
-M`!P``$`%AI_7X[_[=(J,E6[LWJ"L1+(FD?DD$[=&H7D(`)@!``"8`0```@``
-M`$4``91NE@``0!$``,"H`0'`J`$"`?0!]`&`!V6I`5.>$A[O^0``````````
-M(2`B"`````````%X(@``>````'0!`0`0`P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"``"?K+BXBR(SH&R4;#7CJPUT\FFUE8KR"XP+!YHY;[O=XNT+ZN3;1_(0
-M#VZ9QN],4[@EQJ_D2M'@':;>1"+?G+^1CH#[-0`I*@\PR*KQ>G3WMA@SO^Q+
-M>RO4G?'L_>E=5"J]2TV/^D".S4@4]-:3VM70YVO/+LT14LSA9H70_E=PR"D`
-M`"2%'\0E_KSYCYS\_'!33W,FL`0)65&(QQ6&%";<H(9BB"D``!P``$`$KO\!
-M.OA8/K_5_!P'U<W$T8#&VX`````<``!`!8:?U^._^W2*C)5N[-Z@K$2R)I'Y
-M)1.W1OZ%!@"8`0``F`$```(```!%``&4;J$``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E(H3RM0=1@P0``````````"$@(@@````````!>"(``'@```!T`0$`$P,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``4\)NGR%:?#Y!_,/M:+N;ISH7XM\!
-M9^!A#_MP*5YEUJP>!-:E;CW+,YA).4_*\.O!)1]QJR[N?R1;10H,GW7SNC]8
-MW>Z[12#^S:GF"CQ:Z=YA.1H9(G[15SP9S`4R>]\KM+,7V&P$D&'1K'<BO+/X
-M.]>\D6M7=)O4._D6Z_.Y%K<I```DM*6`SP,[<<2.6!]:()`V>V+<41:81"FK
-MN<E$*JLTOFDI```<``!`!%$$QYB:9R)O%ZVA!DM3^P`GB><O````'```0`5J
-M/9AL#J$&2S+*4F+#6F.(T!:ATB43MT8%L@D`F`$``)@!```"````10`!E&ZB
-M``!`$0``P*@!`<"H`0(!]`'T`8`'92*$\K4'48,$```````````A("((````
-M`````7@B``!X````=`$!`!,#```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``%/"
-M;I\A6GP^0?S#[6B[FZ<Z%^+?`6?@80_[<"E>9=:L'@36I6X]RS.823E/RO#K
-MP24?<:LN[G\D6T4*#)]U\[H_6-WNNT4@_LVIY@H\6NG>83D:&2)^T5<\&<P%
-M,GO?*[2S%]AL!)!AT:QW(KRS^#O7O)%K5W2;U#OY%NOSN1:W*0``)+2E@,\#
-M.W'$CE@?6B"0-GMBW%$6F$0IJ[G)1"JK-+YI*0``'```0`11!,>8FF<B;Q>M
-MH09+4_L`)XGG+P```!P``$`%:CV8;`ZA!DLRRE)BPUICB-`6H=(F$[=&0;$`
-M`)@!``"8`0```@```$4``91NHP``0!$``,"H`0'`J`$"`?0!]`&`!V4BA/*U
-M!U&#!```````````(2`B"`````````%X(@``>````'0!`0`3`P``#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"``!3PFZ?(5I\/D'\P^UHNYNG.A?BWP%GX&$/^W`I
-M7F76K!X$UJ5N/<LSF$DY3\KPZ\$E'W&K+NY_)%M%"@R?=?.Z/UC=[KM%(/[-
-MJ>8*/%KIWF$Y&ADB?M%7/!G,!3)[WRNTLQ?8;`208=&L=R*\L_@[U[R1:U=T
-MF]0[^1;K\[D6MRD``"2TI8#/`SMQQ(Y8'UH@D#9[8MQ1%IA$*:NYR40JJS2^
-M:2D``!P``$`$403'F)IG(F\7K:$&2U/[`">)YR\````<``!`!6H]F&P.H09+
-M,LI28L-:8XC0%J'2)A.W1IG]#0"8`0``F`$```(```!%``&4;J@``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=ERT^7%Q3Z*F0``````````"$@(@@````````!>"(`
-M`'@```!T`0$`%`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``WR!-ADMSME%G
-MF"/@J7QQW"?,EF?DZ-<@EGW:$P7!$N")F;LQK3S9Q_H*3-")7@KMJ\Y@.HND
-MO:-)*NZT:TOI&/%G\L'['6/$=-I59C&Q;W_YMPOK:I"X"`>_!7-T+18\31F0
-M`PUF',4/:)ACTHE"J:QM#=5ZZW1O'!^JUX0&[6(I```DE?PZ>[6Z4F[@0)(:
-M;ED#![+@W!@%R3@"P:NB&A\10W8I```<``!`!"Z.[`L]C4DLE41MLM&".?3*
-M`.=K````'```0`7\.#QK^=]/$SB2.#(!IW\`XI)PKB<3MT;6Z0$`F`$``)@!
-M```"````10`!E&ZK``!`$0``P*@!`<"H`0(!]`'T`8`'9<M/EQ<4^BID````
-M```````A("((`````````7@B``!X````=`$!`!0#```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``-\@389+<[919Y@CX*E\<=PGS)9GY.C7()9]VA,%P1+@B9F[
-M,:T\V<?Z"DS0B5X*[:O.8#J+I+VC22KNM&M+Z1CQ9_+!^QUCQ'3:568QL6]_
-M^;<+ZVJ0N`@'OP5S="T6/$T9D`,-9AS%#VB88]*)0JFL;0W5>NMT;QP?JM>$
-M!NUB*0``))7\.GNUNE)NX$"2&FY9`P>RX-P8!<DX`L&KHAH?$4-V*0``'```
-M0`0NCNP+/8U)+)5$;;+1@CGTR@#G:P```!P``$`%_#@\:_G?3Q,XDC@R`:=_
-M`.*2<*XG$[=&8RL(`)@!``"8`0```@```$4``91NL```0!$``,"H`0'`J`$"
-M`?0!]`&`!V7+3Y<7%/HJ9```````````(2`B"`````````%X(@``>````'0!
-M`0`4`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"``#?($V&2W.V46>8(^"I?''<
-M)\R69^3HUR"6?=H3!<$2X(F9NS&M/-G'^@I,T(E>"NVKSF`ZBZ2]HTDJ[K1K
-M2^D8\6?RP?L=8\1TVE5F,;%O?_FW"^MJD+@(![\%<W0M%CQ-&9`##68<Q0]H
-MF&/2B4*IK&T-U7KK=&\<'ZK7A`;M8BD``"25_#I[M;I2;N!`DAIN60,'LN#<
-M&`7).`+!JZ(:'Q%#=BD``!P``$`$+H[L"SV-22R51&VRT8(Y],H`YVL````<
-M``!`!?PX/&OYWT\3.)(X,@&G?P#BDG"N*!.W1DLU!@"8`0``F`$```(```!%
-M``&4;KD``$`1``#`J`$!P*@!`@'T`?0!@`=EA$N"^NCVFE(``````````"$@
-M(@@````````!>"(``'@```!T`0$`%0,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``+7)?/#BE2*9W.[C?@50"47)U@:6=]U*>+!4LQR"COLT;!_&+!*I7Z%1P
-MT^:$ZVQM\.)W#@C#>ZID@?&($-"YY@G>;)*GF"<N-N'Z,K0N*]]1D.=7OEYM
-M'9"HNDFM5BYPK1DRX7H#IKG(R2A[^?/\V70_?Z;"[YRJ#QY%6>TJZWPI```D
-M^OA*+R/H@0RZ1>_^T2"*S<"-8SP0*`:&"NDP>_(WJ8\I```<``!`!)1YL,J5
-MZBNVO,RN_E9PJ"E)D,;?````'```0`7#`S"OB!X?2^_\U(E.(,&D'OU6"R@3
-MMT;N8PD`F`$``)@!```"````10`!E&Z[``!`$0``P*@!`<"H`0(!]`'T`8`'
-M981+@OKH]II2```````````A("((`````````7@B``!X````=`$!`!4#```,
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``"UR7SPXI4BF=SNXWX%4`E%R=8&EG?=2
-MGBP5+,<@H[[-&P?QBP2J5^A4<-/FA.ML;?#B=PX(PWNJ9('QB!#0N>8)WFR2
-MIY@G+C;A^C*T+BO?49#G5[Y>;1V0J+I)K58N<*T9,N%Z`Z:YR,DH>_GS_-ET
-M/W^FPN^<J@\>15GM*NM\*0``)/KX2B\CZ($,ND7O_M$@BLW`C6,\$"@&A@KI
-M,'OR-ZF/*0``'```0`24>;#*E>HKMKS,KOY6<*@I29#&WP```!P``$`%PP,P
-MKX@>'TOO_-2)3B#!I![]5@LI$[=&$V,``)@!``"8`0```@```$4``91NO@``
-M0!$``,"H`0'`J`$"`?0!]`&`!V6$2X+ZZ/::4@``````````(2`B"```````
-M``%X(@``>````'0!`0`5`P``#`$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"```M<E\\
-M.*5(IG<[N-^!5`)1<G6!I9WW4IXL%2S'(*.^S1L'\8L$JE?H5'#3YH3K;&WP
-MXG<.",-[JF2!\8@0T+GF"=YLDJ>8)RXVX?HRM"XKWU&0YU>^7FT=D*BZ2:U6
-M+G"M&3+A>@.FN<C)*'OY\_S9=#]_IL+OG*H/'D59[2KK?"D``"3Z^$HO(^B!
-M#+I%[_[1((K-P(UC/!`H!H8*Z3![\C>ICRD``!P``$`$E'FPRI7J*[:\S*[^
-M5G"H*4F0QM\````<``!`!<,#,*^('A]+[_S4B4X@P:0>_58+*1.W1M>Q#0"8
-M`0``F`$```(```!%``&4;L0``$`1``#`J`$!P*@!`@'T`?0!@`=E+;JZ)+U%
-M0(,``````````"$@(@@````````!>"(``'@```!T`0$`_P,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``2LVHN)*GV=H,+QZ`N)[,)F`BJ+-!324E4<)_]++/
-M8+XWE<M*<;`V3GHYEU/;&%6?5KQ-4PC\I3D\4J88$`Y<,>[&M/HN(U=CG';6
-M7Q3#)WMDHH&#U,&N#0`EPPT!:)(55_:HF21`?%"*7GT71]^YV<4GE;)?2:V/
-M#N$+(<D0+=$I```D"910(OO*]UZ4>!-^E.0<SBEO(Z?76$RC+)$0DBA]_,8I
-M```<``!`!&LGK-^*;>G<PQFZ0[[#4?1I)NTU````'```0`5OPB7NTF?L'K"G
-MXA]>.C'^$6P4S2H3MT:,FP$`F`$``)@!```"````10`!E&[%``!`$0``P*@!
-M`<"H`0(!]`'T`8`'92VZNB2]14"#```````````A("((`````````7@B``!X
-M````=`$!`/\#```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``$K-J+B2I]G:#"\>
-M@+B>S"9@(JBS04TE)5'"?_2RSV"^-Y7+2G&P-DYZ.9=3VQA5GU:\35,(_*4Y
-M/%*F&!`.7#'NQK3Z+B-78YQVUE\4PR=[9**!@]3!K@T`)<,-`6B2%5?VJ)DD
-M0'Q0BEY]%T??N=G%)Y6R7TFMCP[A"R')$"W1*0``)`F44"+[RO=>E'@3?I3D
-M',XI;R.GUUA,HRR1$)(H??S&*0``'```0`1K)ZS?BFWIW,,9ND.^PU'T:2;M
-M-0```!P``$`%;\(E[M)G[!ZPI^(?7CHQ_A%L%,TJ$[=&*=T'`)@!``"8`0``
-M`@```$4``91NR@``0!$``,"H`0'`J`$"`?0!]`&`!V4MNKHDO45`@P``````
-M````(2`B"`````````%X(@``>````'0!`0#_`P``#`$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``!*S:BXDJ?9V@PO'H"XGLPF8"*HLT%-)251PG_TLL]@OC>5RTIQ
-ML#9.>CF74]L859]6O$U3"/RE.3Q2IA@0#EPQ[L:T^BXC5V.<=M9?%,,G>V2B
-M@8/4P:X-`"7##0%HDA57]JB9)$!\4(I>?1='W[G9Q2>5LE])K8\.X0LAR1`M
-MT2D``"0)E%`B^\KW7I1X$WZ4Y!S.*6\CI]=83*,LD1"2*'W\QBD``!P``$`$
-M:R>LWXIMZ=S#&;I#OL-1]&DF[34````<``!`!6_")>[29^P>L*?B'UXZ,?X1
-M;!3-*Q.W1JGH!0"8`0``F`$```(```!%``&4;M@``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E/V`_:D6GF3,``````````"$@(@@````````!>"(``'@```!T`0$`
-M@`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``!:)MO:WLS4$-J\*2IW]&T1P1
-M;3GC0W$2?J?,V5#<!.1ZH5W;*?`D<@6N5IG163[,K@J%:7^?[,11HS[TQXBX
-M*BVZM6)RR;O.0UA)OO`5RJML$C:6`C9^1E#*WOP:]>LZ%5L]LG.%,>#R)J3S
-M+:)G[![#K\DJAY/N"YY]/5;#<ADI```DVZJ08#JNZ0;0XV?)W'#OO\+R/<%G
-M8@*:<*CA6;I.)!,I```<``!`!)*7X,7GOC<67!(]B=@WGD1>/`1X````'```
-M0`5[5]4L$S.M64XU7=A^B47EK(JAA2L3MT:?%0D`F`$``)@!```"````10`!
-ME&[;``!`$0``P*@!`<"H`0(!]`'T`8`'93]@/VI%IYDS```````````A("((
-M`````````7@B``!X````=`$!`(`#```,`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M``6B;;VM[,U!#:O"DJ=_1M$<$6TYXT-Q$GZGS-E0W`3D>J%=VRGP)'(%KE:9
-MT5D^S*X*A6E_G^S$4:,^],>(N"HMNK5B<LF[SD-82;[P%<JK;!(VE@(V?D90
-MRM[\&O7K.A5;/;)SA3'@\B:D\RVB9^P>PZ_)*H>3[@N>?3U6PW(9*0``)-NJ
-MD&`ZKND&T.-GR=QP[[_"\CW!9V("FG"HX5FZ3B03*0``'```0`22E^#%Y[XW
-M%EP2/8G8-YY$7CP$>````!P``$`%>U?5+!,SK5E.-5W8?HE%Y:R*H84L$[=&
-M_A0``)@!``"8`0```@```$4``91O6@``0!$``,"H`0'`J`$"`?0!]`&`!V4_
-M8#]J1:>9,P``````````(2`B"`````````%X(@``>````'0!`0"``P``#`$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"```%HFV]K>S-00VKPI*G?T;1'!%M.>-#<1)^
-MI\S94-P$Y'JA7=LI\"1R!:Y6F=%9/LRN"H5I?Y_LQ%&C/O3'B+@J+;JU8G+)
-MN\Y#6$F^\!7*JVP2-I8"-GY&4,K>_!KUZSH56SVR<X4QX/(FI/,MHF?L'L.O
-MR2J'D^X+GGT]5L-R&2D``"3;JI!@.J[I!M#C9\G<<.^_PO(]P6=B`IIPJ.%9
-MNDXD$RD``!P``$`$DI?@Q>>^-Q9<$CV)V#>>1%X\!'@````<``!`!7M7U2P3
-M,ZU93C5=V'Z)1>6LBJ&%+!.W1M-@#0"8`0``F`$```(```!%``&4;UL``$`1
-M``#`J`$!P*@!`@'T`?0!@`=EXX]=?34"7<(``````````"$@(@@````````!
-M>"(``'@```!T`0$`#`````P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``:2[VB/;6
-M2'A]VN]'B0),`N6U-1H'I^\;#2?'TYY6;;C<S4Z:#X"_K5DR+];@#K<A$'&^
-M-6AK\!_$0'PLWZ[=;Q9>7SY;$:AA1_XL7)6KZ8?<6ND^#K\>Y(FXS*/&8,H;
-MBB4#'FF#5G5!R.PP;OZW.@"GRX.EZ,I[)A_/<E'_U%<I```D"IB]^D6_N)^4
-MT`)Q@'IU[!#N="0R=8C#>0F#+&/"I*PI```<``!`!'7"<-T#OUTD+;>*?)4D
-MS*\K]:KS````'```0`7EX#RTITEUM-&A*?G14S4)S+8&;BT3MT9;30$`F`$`
-M`)@!```"````10`!E&]<``!`$0``P*@!`<"H`0(!]`'T`8`'9>./77TU`EW"
-M```````````A("((`````````7@B``!X````=`$!``P````,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``&DN]HCVUDAX?=KO1XD"3`+EM34:!Z?O&PTGQ].>5FVX
-MW,U.F@^`OZU9,B_6X`ZW(1!QOC5H:_`?Q$!\+-^NW6\67E\^6Q&H84?^+%R5
-MJ^F'W%KI/@Z_'N2)N,RCQF#*&XHE`QYI@U9U0<CL,&[^MSH`I\N#I>C*>R8?
-MSW)1_]17*0``)`J8O?I%O[B?E-`"<8!Z=>P0[G0D,G6(PWD)@RQCPJ2L*0``
-M'```0`1UPG#=`[]=)"VWBGR5),RO*_6J\P```!P``$`%Y>`\M*=)=;31H2GY
-MT5,U"<RV!FXM$[=&[XX'`)@!``"8`0```@```$4``91O8@``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V7CCUU]-0)=P@``````````(2`B"`````````%X(@``>```
-M`'0!`0`,````#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"``!I+O:(]M9(>'W:[T>)
-M`DP"Y;4U&@>G[QL-)\?3GE9MN-S-3IH/@+^M63(OUN`.MR$0<;XU:&OP'\1`
-M?"S?KMUO%EY?/EL1J&%'_BQ<E:OIA]Q:Z3X.OQ[DB;C,H\9@RAN*)0,>:8-6
-M=4'([#!N_K<Z`*?+@Z7HRGLF'\]R4?_45RD``"0*F+WZ1;^XGY30`G&`>G7L
-M$.YT)#)UB,-Y"8,L8\*DK"D``!P``$`$=<)PW0._720MMXI\E23,KROUJO,`
-M```<``!`!>7@/+2G276TT:$I^=%3-0G,M@9N+A.W1FR:!0"8`0``F`$```(`
-M``!%``&4;VL``$`1``#`J`$!P*@!`@'T`?0!@`=E4UM^=966N1@`````````
-M`"$@(@@````````!>"(``'@```!T`0$`#`$```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``K8SP%\"2N2S5<`)A7L<UR.D.(I.KJ.TJ^P6.Y9O%IZBDCH)<2MS.
-MC4:Z!T-!U8>(-A![5_BN#1?AGN&6E66XH>/L'Y##/Q=_G<B+_F(*8O/2C].I
-MGTE38#OP_0.MWF@PSYIY-,[$)4+]E^<7IDD8+.;<+OOSOTIX46O<[X%$6^\I
-M```D8QUX^1MTNVY'F-S$4HDJ,#,ZFR\!JHD/%O7,''!%9^DI```<``!`!%J<
-M#D^0W=*ARJ+0QO)4M^AQK`@*````'```0`7Z4H/`!A+CQ^'KQ/@[$7XGH>G8
-M?"X3MT9?QP@`F`$``)@!```"````10`!E&]L``!`$0``P*@!`<"H`0(!]`'T
-M`8`'95-;?G65EKD8```````````A("((`````````7@B``!X````=`$!``P!
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``*V,\!?`DKDLU7`"85['-<CI#B*3
-MJZCM*OL%CN6;Q:>HI(Z"7$K<SHU&N@=#0=6'B#80>U?XK@T7X9[AEI5EN*'C
-M[!^0PS\7?YW(B_YB"F+STH_3J9])4V`[\/T#K=YH,,^:>33.Q"5"_9?G%Z9)
-M&"SFW"[[\[]*>%%KW.^!1%OO*0``)&,=>/D;=+MN1YC<Q%*)*C`S.ILO`:J)
-M#Q;US!QP16?I*0``'```0`1:G`Y/D-W2H<JBT,;R5+?H<:P("@```!P``$`%
-M^E*#P`82X\?AZ\3X.Q%^)Z'IV'PN$[=&T`@/`)@!``"8`0```@```$4``91O
-M;0``0!$``,"H`0'`J`$"`?0!]`&`!V536WYUE9:Y&```````````(2`B"```
-M``````%X(@``>````'0!`0`,`0``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``"M
-MC/`7P)*Y+-5P`F%>QS7(Z0XBDZNH[2K[!8[EF\6GJ*2.@EQ*W,Z-1KH'0T'5
-MAX@V$'M7^*X-%^&>X9:59;BAX^P?D,,_%W^=R(O^8@IB\]*/TZF?25-@._#]
-M`ZW>:##/FGDTSL0E0OV7YQ>F21@LYMPN^_._2GA1:]SO@41;[RD``"1C'7CY
-M&W2[;D>8W,12B2HP,SJ;+P&JB0\6]<P<<$5GZ2D``!P``$`$6IP.3Y#=TJ'*
-MHM#&\E2WZ'&L"`H````<``!`!?I2@\`&$N/'X>O$^#L1?B>AZ=A\+Q.W1B(1
-M#0"8`0``F`$```(```!%``&4;VX``$`1``#`J`$!P*@!`@'T`?0!@`=EH[;8
-MDK)JX^D``````````"$@(@@````````!>"(``'@```!T`0$`#`(```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``._[#\QG?O8Z7$U]9']<0!C+643GF!JJ\]2O1
-M>'"-'8[W:?2XF95/C/MO%?N60,^]WA3%>QS8QY%-SO;7:Z.E!*1+=;6\(ONR
-M*LA`A%7^`;!5[D:<`&;N#@"TV`"%>%&FNESF)585>#!0%*C)^R&13>)<ADHS
-M'HOLCO)HS`OY$DHI```D4TG56ZCN!;>;MRZ.K6?HA[.:T*,&+V$+\ZD+0-RM
-MF)8I```<``!`!*'F(0#6*-^&2,!>1",GZV!6C_YD````'```0`5O_PFM8D'Y
-MC'[^$#?,%\/?&A:<^3`3MT8I_P``F`$``)@!```"````10`!E&]O``!`$0``
-MP*@!`<"H`0(!]`'T`8`'9:.VV)*R:N/I```````````A("((`````````7@B
-M``!X````=`$!``P"```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``#O^P_,9W[V.
-MEQ-?61_7$`8RUE$YY@:JO/4KT7APC1V.]VGTN)F53XS[;Q7[ED#/O=X4Q7L<
-MV,>13<[VUVNCI02D2W6UO"+[LBK(0(15_@&P5>Y&G`!F[@X`M-@`A7A1IKI<
-MYB56%7@P4!2HR?LAD4WB7(9*,QZ+[([R:,P+^1)**0``)%-)U5NH[@6WF[<N
-MCJUGZ(>SFM"C!B]A"_.I"T#<K9B6*0``'```0`2AYB$`UBC?ADC`7D0C)^M@
-M5H_^9````!P``$`%;_\)K6)!^8Q^_A`WS!?#WQH6G/DP$[=&F$`'`)@!``"8
-M`0```@```$4``91O<```0!$``,"H`0'`J`$"`?0!]`&`!V6CMMB2LFKCZ0``
-M````````(2`B"`````````%X(@``>````'0!`0`,`@``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"```[_L/S&=^]CI<37UD?UQ`&,M91.>8&JKSU*]%X<(T=CO=I
-M]+B9E4^,^V\5^Y9`S[W>%,5['-C'D4W.]M=KHZ4$I$MUM;PB^[(JR$"$5?X!
-ML%7N1IP`9NX.`+38`(5X4::Z7.8E5A5X,%`4J,G[(9%-XER&2C,>B^R.\FC,
-M"_D22BD``"132=5;J.X%MYNW+HZM9^B'LYK0HP8O80OSJ0M`W*V8EBD``!P`
-M`$`$H>8A`-8HWX9(P%Y$(R?K8%:/_F0````<``!`!6__":UB0?F,?OX0-\P7
-MP]\:%ISY,1.W1CI-!0"8`0``F`$```(```!%``&4;W(``$`1``#`J`$!P*@!
-M`@'T`?0!@`=EK560S/8G_WH``````````"$@(@@````````!>"(``'@```!T
-M`0$`#`0```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``43$P5?7B@GL(VNMZ`*7Q
-MAT;RL&&;HO(\K_JV<6Y;6U[781S'&]_Y<[::^DY-J0[Q_3,B4DMS.O8B/1<#
-M2UE3+-G?BFQ0FV*-A-RAL-N<;63;$?T@HXO_!;L1X<;A+0XYEKJ&K_?+9*(!
-MQ+'U2O;%F,'HFUR/??#H1US88-9"DZTI```DFC[D2AX2$@)VU;KX5(4*!3F0
-MI76`FLBBJ.Q=,R_.,L@I```<``!`!%'4RVZ!A#\A/.%QZ2WQP9U,_XM&````
-M'```0`4JIY+R3@AR43%<:`O&\(2$`CUS_#$3MT8N>0@`F`$``)@!```"````
-M10`!E&]S``!`$0``P*@!`<"H`0(!]`'T`8`'9:U5D,SV)_]Z```````````A
-M("((`````````7@B``!X````=`$!``P$```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``%$Q,%7UXH)["-KK>@"E\8=&\K!AFZ+R/*_ZMG%N6UM>UV$<QQO?^7.V
-MFOI.3:D.\?TS(E)+<SKV(CT7`TM94RS9WXIL4)MBC83<H;#;G&UDVQ'](*.+
-M_P6[$>'&X2T..9:ZAJ_WRV2B`<2Q]4KVQ9C!Z)M<CWWPZ$=<V&#60I.M*0``
-M))H^Y$H>$A("=M6Z^%2%"@4YD*5U@)K(HJCL73,OSC+(*0``'```0`11U,MN
-M@80_(3SA<>DM\<&=3/^+1@```!P``$`%*J>2\DX(<E$Q7&@+QO"$A`(]<_PQ
-M$[=&PKH.`)@!``"8`0```@```$4``91O>```0!$``,"H`0'`J`$"`?0!]`&`
-M!V6M59#,]B?_>@``````````(2`B"`````````%X(@``>````'0!`0`,!```
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"``!1,3!5]>*">PC:ZWH`I?&'1O*P89NB
-M\CRO^K9Q;EM;7M=A',<;W_ESMIKZ3DVI#O'],R)22W,Z]B(]%P-+65,LV=^*
-M;%";8HV$W*&PVYQM9-L1_2"CB_\%NQ'AQN$M#CF6NH:O]\MDH@'$L?5*]L68
-MP>B;7(]]\.A'7-A@UD*3K2D``"2:/N1*'A(2`G;5NOA4A0H%.9"E=8":R**H
-M[%TS+\XRR"D``!P``$`$4=3+;H&$/R$\X7'I+?'!G4S_BT8````<``!`!2JG
-MDO)."')1,5QH"\;PA(0"/7/\,A.W1N/$#`"8`0``F`$```(```!%``&4;X,`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=E?Q3.@T=ML3(``````````"$@(@@`````
-M```!>"(``'@```!T`0$`#`0```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``_VZ2
-M&LDZ#>4#(A&QC'Q_X2H)`0&4QCP"&"[B5"!;JR"O_XE;%EBS;U$%^#F83V,*
-M7U4A;80<6*&)^)5AB%&T3!7]"<'DBZK_1B[8SEN'5'_*]X/U".F/+)5MO^%U
-MRR7L4-X&$,@KL3T-F43GQR+HC/IG-6SBG/`+'*RAG1://8`I```DM=`O(_<Z
-M`8>5[CH"P.4J_I&D:0SN2^CC7DB",&C:C`(I```<``!`!'9!!>7-0\:R[Z["
-M?C&P"PB_FJR#````'```0`5>>7<YCRX1Y!%;RZ9TVN0+$A\K/3,3MT;_L```
-MF`$``)@!```"````10`!E&^(``!`$0``P*@!`<"H`0(!]`'T`8`'97\4SH-'
-M;;$R```````````A("((`````````7@B``!X````=`$!``P$```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``/]NDAK).@WE`R(1L8Q\?^$J"0$!E,8\`A@NXE0@
-M6ZL@K_^)6Q98LV]1!?@YF$]C"E]5(6V$'%BAB?B588A1M$P5_0G!Y(NJ_T8N
-MV,Y;AU1_RO>#]0CICRR5;;_A=<LE[%#>!A#(*[$]#9E$Y\<BZ(SZ9S5LXISP
-M"QRLH9T6CSV`*0``)+70+R/W.@&'E>XZ`L#E*OZ1I&D,[DOHXUY(@C!HVHP"
-M*0``'```0`1V007ES4/&LN^NPGXQL`L(OYJL@P```!P``$`%7GEW.8\N$>01
-M6\NF=-KD"Q(?*STS$[=&FO(&`)@!``"8`0```@```$4``91OC@``0!$``,"H
-M`0'`J`$"`?0!]`&`!V5_%,Z#1VVQ,@``````````(2`B"`````````%X(@``
-M>````'0!`0`,!```#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"``#_;I(:R3H-Y0,B
-M$;&,?'_A*@D!`93&/`(8+N)4(%NK(*__B5L66+-O407X.9A/8PI?52%MA!Q8
-MH8GXE6&(4;1,%?T)P>2+JO]&+MC.6X=4?\KW@_4(Z8\LE6V_X77+)>Q0W@80
-MR"NQ/0V91.?'(NB,^F<U;.*<\`L<K*&=%H\]@"D``"2UT"\C]SH!AY7N.@+`
-MY2K^D:1I#.Y+Z.->2((P:-J,`BD``!P``$`$=D$%Y<U#QK+OKL)^,;`+"+^:
-MK(,````<``!`!5YY=SF/+A'D$5O+IG3:Y`L2'RL]-!.W1B/_!`"8`0``F`$`
-M``(```!%``&4;YP``$`1``#`J`$!P*@!`@'T`?0!@`=E@R</*E'3A0P`````
-M`````"$@(@@````````!>"(``'@```!T`0$`#`<```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``-$Z_)=\!`9V;MJ,>M081L,QO&IH>_U+/GP)R%^MD@B"\-KJX
-MODK?8]D^9=H9&B;1P>;L7+FL:U15J%^#LD*CU/R09!<RSGY^U7OJS.';JZE-
-M&MHBR/)>/B4H=I_+_<EROHT'.R[?E]ODE>]:MR.)&$3+:M!N'053IDY!QM'[
-M"PPI```DF4>.=$FM+Y^64]2Z83(I**`,;5]3XN651X"\7P^=AY`I```<``!`
-M!'RB58:R!8UI>8F4_LCR*$SV,WLS````'```0`4R/`*<0NM#A_#.YW>$[!,8
-MPH>>]C03MT85*P@`F`$``)@!```"````10`!E&^=``!`$0``P*@!`<"H`0(!
-M]`'T`8`'98,G#RI1TX4,```````````A("((`````````7@B``!X````=`$!
-M``P'```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``#1.OR7?`0&=F[:C'K4&$;#,
-M;QJ:'O]2SY\"<A?K9((@O#:ZN+Y*WV/9/F7:&1HFT<'F[%RYK&M45:A?@[)"
-MH]3\D&07,LY^?M5[ZLSAVZNI31K:(LCR7CXE*':?R_W)<KZ-!SLNWY?;Y)7O
-M6K<CB1A$RVK0;AT%4Z9.0<;1^PL,*0``))E'CG1)K2^?EE/4NF$R*2B@#&U?
-M4^+EE4>`O%\/G8>0*0``'```0`1\HE6&L@6-:7F)E/[(\BA,]C-[,P```!P`
-M`$`%,CP"G$+K0X?PSN=WA.P3&,*'GO8T$[=&;6P.`)@!``"8`0```@```$4`
-M`91OH0``0!$``,"H`0'`J`$"`?0!]`&`!V6#)P\J4=.%#```````````(2`B
-M"`````````%X(@``>````'0!`0`,!P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M```T3K\EWP$!G9NVHQZU!A&PS&\:FA[_4L^?`G(7ZV2"(+PVNKB^2M]CV3YE
-MVAD:)M'!YNQ<N:QK5%6H7X.R0J/4_)!D%S+.?G[5>^K,X=NKJ4T:VB+(\EX^
-M)2AVG\O]R7*^C0<[+M^7V^25[UJW(XD81,MJT&X=!5.F3D'&T?L+#"D``"29
-M1XYT2:TOGY93U+IA,BDHH`QM7U/BY95'@+Q?#YV'D"D``!P``$`$?*)5AK(%
-MC6EYB93^R/(H3/8S>S,````<``!`!3(\`IQ"ZT.'\,[G=X3L$QC"AY[V-1.W
-M1DEZ#`"8`0``F`$```(```!%``&4;ZH``$`1``#`J`$!P*@!`@'T`?0!@`=E
-MB1@RG%1ZW=\``````````"$@(@@````````!>"(``'@```!T`0$`#`@```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``YEUPCYD'IGT&(L6?+%QI/#2$`&(>:7"5
-MXE@EY.AC7P>8F4?V#QW\\!KUL=!.=;BT2[P<?\YJ3#(PF07P:3'%.F;=N=^&
-M_5E"$8?%^,07/W^<5#R[:1*JEPRWZBT&#DH22JPTK<V^CFJY]RX_YG1AEN&Q
-M/*.^!$G5ZU94]7PVV]XI```D>G7:YVF+;41\J\SX'?N7NL8%&'M8:UI/[L1G
-MJ-859=0I```<``!`!%V$5Y?VRHS2"6UR9O;.>,XIVPQU````'```0`4S_(_-
-M_DE$L?8EET*H@WCO=TMC.C83MT;`8@``F`$``)@!```"````10`!E&^M``!`
-M$0``P*@!`<"H`0(!]`'T`8`'98D8,IQ4>MW?```````````A("((````````
-M`7@B``!X````=`$!``P(```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``.9=<(^9
-M!Z9]!B+%GRQ<:3PTA`!B'FEPE>)8)>3H8U\'F)E']@\=_/`:];'03G6XM$N\
-M''_.:DPR,)D%\&DQQ3IFW;G?AOU90A&'Q?C$%S]_G%0\NVD2JI<,M^HM!@Y*
-M$DJL-*W-OHYJN?<N/^9T89;AL3RCO@1)U>M65/5\-MO>*0``)'IUVN=IBVU$
-M?*O,^!W[E[K&!1A[6&M:3^[$9ZC6%674*0``'```0`1=A%>7]LJ,T@EM<F;V
-MSGC.*=L,=0```!P``$`%,_R/S?Y)1+'V)9="J(-X[W=+8SHV$[=&2*0&`)@!
-M``"8`0```@```$4``91OM```0!$``,"H`0'`J`$"`?0!]`&`!V6)&#*<5'K=
-MWP``````````(2`B"`````````%X(@``>````'0!`0`,"```#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``#F77"/F0>F?08BQ9\L7&D\-(0`8AYI<)7B6"7DZ&-?
-M!YB91_8/'?SP&O6QT$YUN+1+O!Q_SFI,,C"9!?!I,<4Z9MVYWX;]64(1A\7X
-MQ!<_?YQ4/+MI$JJ7#+?J+08.2A)*K#2MS;Z.:KGW+C_F=&&6X;$\H[X$2=7K
-M5E3U?#;;WBD``"1Z==KG:8MM1'RKS/@=^Y>ZQ@48>UAK6D_NQ&>HUA5EU"D`
-M`!P``$`$7817E_;*C-();7)F]LYXSBG;#'4````<``!`!3/\C\W^242Q]B67
-M0JB#>.]W2V,Z-Q.W1B&Q!`"8`0``F`$```(```!%``&4;[@``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E\+,U=K='8&\``````````"$@(@@````````!>"(``'@`
-M``!T`0$`#`D```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``#O+Y[YA8&Q2)`&8=
-METE&:N==46#6I<.]')"G5#[PY7(=_(%B,L>Z]G._U8OJDBY<RWF3YSTG-JR!
-MY$LX$/;3:V^</5)+HMZ+M_55&_-[/6,9Y><H]5<7`C2=?_%XYX,7AH@??$?8
-M[(Q=9VB"MFK`+SH9V!J.LCAHW5P?J?CWA_<I```D.:Q8TG9O4[A.C%7S7@MF
-M^4#O0(7CEA^\*T)TGMZ9G6PI```<``!`!$C:72X*#[@[%+OQI?!IQL0;-8F(
-M````'```0`4Q%(O2:89KWE=R,]X]G8>.$2)/13<3MT:9W`<`F`$``)@!```"
-M````10`!E&^Y``!`$0``P*@!`<"H`0(!]`'T`8`'9?"S-7:W1V!O````````
-M```A("((`````````7@B``!X````=`$!``P)```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(```[R^>^86!L4B0!F'9=)1FKG75%@UJ7#O1R0IU0^\.5R'?R!8C+'
-MNO9SO]6+ZI(N7,MYD^<])S:L@>1+.!#VTVMOG#U22Z+>B[?U51OS>SUC&>7G
-M*/57%P(TG7_Q>.>#%X:('WQ'V.R,76=H@K9JP"\Z&=@:CK(X:-U<'ZGX]X?W
-M*0``)#FL6-)V;U.X3HQ5\UX+9OE`[T"%XY8?O"M"=)[>F9UL*0``'```0`1(
-MVETN"@^X.Q2[\:7P:<;$&S6)B````!P``$`%,12+TFF&:]Y7<C/>/9V'CA$B
-M3T4W$[=&0!X.`)@!``"8`0```@```$4``91ON@``0!$``,"H`0'`J`$"`?0!
-M]`&`!V7PLS5VMT=@;P``````````(2`B"`````````%X(@``>````'0!`0`,
-M"0``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"```.\OGOF%@;%(D`9AV7249JYUU1
-M8-:EP[T<D*=4/O#E<AW\@6(RQ[KV<[_5B^J2+ES+>9/G/2<VK('D2S@0]M-K
-M;YP]4DNBWHNW]54;\WL]8QGEYRCU5Q<"-)U_\7CG@Q>&B!]\1]CLC%UG:(*V
-M:L`O.AG8&HZR.&C=7!^I^/>']RD``"0YK%C2=F]3N$Z,5?->"V;Y0.]`A>.6
-M'[PK0G2>WIF=;"D``!P``$`$2-I=+@H/N#L4N_&E\&G&Q!LUB8@````<``!`
-M!3$4B])IAFO>5W(SWCV=AXX1(D]%.!.W1K`J#`"8`0``F`$```(```!%``&4
-M;[\``$`1``#`J`$!P*@!`@'T`?0!@`=EEORT.M:R#C8``````````"$@(@@`
-M```````!>"(``'@```!T`0$`#/H```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MGY72G!J5(3G(PUK<),T]\DYP2:=O-#`6&#OO"YQ=E]&OW$!!T1V?/^P<."[I
-M!YFL0RS3NA$"E(VL+86M$8^Y?2$QB*,XC[X<>K[Z*Y/:X)K+R\JSH"S4>T^R
-MIU#6^Y]'ULSD'J(]EW[)\!'J6\-`=S@NH.:.KB5"F2-#!0(HNB`I```D-(RS
-M+:)M"(_/Q>2E%I58PEG9X)S`EZW*2VKJ.KX6J7,I```<``!`!'$+&ZT9C4/^
-MCCI)G'0J7^0TPEM*````'```0`5'##K'A$]`+I9?943;@W9K/P2/C#D3MT9I
-M%```F`$``)@!```"````10`!E&_!``!`$0``P*@!`<"H`0(!]`'T`8`'99;\
-MM#K6L@XV```````````A("((`````````7@B``!X````=`$!``SZ```,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``)^5TIP:E2$YR,-:W"3-/?).<$FG;S0P%A@[
-M[PN<79?1K]Q`0=$=GS_L'#@NZ0>9K$,LT[H1`I2-K"V%K1&/N7TA,8BC.(^^
-M''J^^BN3VN":R\O*LZ`LU'M/LJ=0UON?1];,Y!ZB/9=^R?`1ZEO#0'<X+J#F
-MCJXE0IDC0P4"*+H@*0``)#2,LRVB;0B/S\7DI1:56,)9V>"<P)>MRDMJZCJ^
-M%JES*0``'```0`1Q"QNM&8U#_HXZ29QT*E_D-,);2@```!P``$`%1PPZQX1/
-M0"Z67V5$VX-V:S\$CXPY$[=&'58&`)@!``"8`0```@```$4``91OQP``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V66_+0ZUK(.-@``````````(2`B"`````````%X
-M(@``>````'0!`0`,^@``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"``"?E=*<&I4A
-M.<C#6MPDS3WR3G!)IV\T,!88.^\+G%V7T:_<0$'1'9\_[!PX+ND'F:Q#+-.Z
-M$0*4C:PMA:T1C[E](3&(HSB/OAQZOOHKD]K@FLO+RK.@+-1[3[*G4-;[GT?6
-MS.0>HCV7?LGP$>I;PT!W."Z@YHZN)4*9(T,%`BBZ("D``"0TC+,MHFT(C\_%
-MY*46E5C"6=G@G,"7K<I+:NHZOA:I<RD``!P``$`$<0L;K1F-0_Z..DF<="I?
-MY#3"6TH````<``!`!4<,.L>$3T`NEE]E1-N#=FL_!(^,.A.W1B5B!`"8`0``
-MF`$```(```!%``&4;](``$`1``#`J`$!P*@!`@'T`?0!@`=EZ8T%SM[T*_,`
-M`````````"$@(@@````````!>"(``'@```!T`0$`#/L```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``W)#P-3C5!MG&X]@M'-<EDRN(O$.X#VDY1I!GH;&ZN\=E
-M;C:SUH5$7BN-=<9,^:_;(/AGNHEW,_4HF>Q5R4HE)DT>8^?"Q/ZE)XB.'$:<
-MHHGJ=][\W7#*C3$,\>911U"Y7,SYS:4@CW/$U5>_X+C%`[&8*#M^H)AQM!/!
-M_XX2N-8I```D>Y_;N&OWGT"ZK#"ZI!SUH2GB<"@DZ1>V5OZ`&,`>+NPI```<
-M``!`!"5OB\Q(6.8B>[/^W%AV%\[2-L(@````'```0`4B+R?W4#:P4`5W.)*(
-M%N544STXO3H3MT:?C@<`F`$``)@!```"````10`!E&_:``!`$0``P*@!`<"H
-M`0(!]`'T`8`'9>F-!<[>]"OS```````````A("((`````````7@B``!X````
-M=`$!``S[```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``-R0\#4XU0;9QN/8+1S7
-M)9,KB+Q#N`]I.4:09Z&QNKO'96XVL]:%1%XKC77&3/FOVR#X9[J)=S/U*)GL
-M5<E*)29-'F/GPL3^I2>(CAQ&G**)ZG?>_-UPRHTQ#/'F44=0N5S,^<VE((]S
-MQ-57O^"XQ0.QF"@[?J"8<;03P?^.$KC6*0``)'N?V[AK]Y]`NJPPNJ0<]:$I
-MXG`H).D7ME;^@!C`'B[L*0``'```0`0E;XO,2%CF(GNS_MQ8=A?.TC;"(```
-M`!P``$`%(B\G]U`VL%`%=SB2B!;E5%,].+TZ$[=&#-`-`)@!``"8`0```@``
-M`$4``91OY0``0!$``,"H`0'`J`$"`?0!]`&`!V7IC07.WO0K\P``````````
-M(2`B"`````````%X(@``>````'0!`0`,^P``#`$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"``#<D/`U.-4&V<;CV"T<UR63*XB\0[@/:3E&D&>AL;J[QV5N-K/6A41>
-M*XUUQDSYK]L@^&>ZB7<S]2B9[%7)2B4F31YCY\+$_J4GB(X<1IRBB>IWWOS=
-M<,J-,0SQYE%'4+E<S/G-I2"/<\355[_@N,4#L9@H.WZ@F'&T$\'_CA*XUBD`
-M`"1[G]NX:_>?0+JL,+JD'/6A*>)P*"3I%[96_H`8P!XN["D``!P``$`$)6^+
-MS$A8YB)[L_[<6'87SM(VPB`````<``!`!2(O)_=0-K!0!7<XDH@6Y513/3B]
-M.Q.W1L/<"P"8`0``F`$```(```!%``&4;^H``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E>NHC)G)?%)4``````````"$@(@@````````!>"(``'@```!T`0$`#/P`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``HESGO+?B_'.CZ%VMX([[WM,SL@+`
-MVSL1J&?Q7D@+>O;3K&T`8)AWQ]8N&D^:H],!DDR^5?X?7QW\.Y^X#1"VF_!&
-MNH26&2KU`O+`2&>U6VMM8/7)8LQE0F2$#EX7F^IQL:)#`P&@V>=2\?29'VE5
-M]L5G&>M*F?R)_>,XE+T=1-,I```DJ=T[1$YFCI*C/A5;O.)(%J*,,@J5[H#:
-M+L94JJD&W\LI```<``!`!%/H.(Z@1*+K>^2]EQR`3<S_5V;C````'```0`4X
-MD[4F;SFC_,?<%D7!^Q#+(NTOVSL3MT9I"`\`F`$``)@!```"````10`!E&_K
-M``!`$0``P*@!`<"H`0(!]`'T`8`'97KJ(R9R7Q25```````````A("((````
-M`````7@B``!X````=`$!``S\```,`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``*)<
-MY[RWXOQSH^A=K>".^][3,[("P-L[$:AG\5Y("WKVTZQM`&"8=\?6+AI/FJ/3
-M`9),OE7^'U\=_#N?N`T0MIOP1KJ$EADJ]0+RP$AGM5MK;6#UR6+,94)DA`Y>
-M%YOJ<;&B0P,!H-GG4O'TF1]I5?;%9QGK2IG\B?WC.)2]'433*0``)*G=.T1.
-M9HZ2HSX56[SB2!:BC#(*E>Z`VB[&5*JI!M_+*0``'```0`13Z#B.H$2BZWOD
-MO9<<@$W,_U=FXP```!P``$`%.).U)F\YH_S'W!9%P?L0RR+M+]L\$[=&U@<&
-M`)@!``"8`0```@```$4``91O[```0!$``,"H`0'`J`$"`?0!]`&`!V5ZZB,F
-M<E\4E0``````````(2`B"`````````%X(@``>````'0!`0`,_```#`$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"``"B7.>\M^+\<Z/H7:W@COO>TS.R`L#;.Q&H9_%>
-M2`MZ]M.L;0!@F'?'UBX:3YJCTP&23+Y5_A]?'?P[G[@-$+:;\$:ZA)89*O4"
-M\L!(9[5;:VU@]<EBS&5"9(0.7A>;ZG&QHD,#`:#9YU+Q])D?:57VQ6<9ZTJ9
-M_(G]XSB4O1U$TRD``"2IW3M$3F:.DJ,^%5N\XD@6HHPR"I7N@-HNQE2JJ0;?
-MRRD``!P``$`$4^@XCJ!$HNM[Y+V7'(!-S/]79N,````<``!`!3B3M29O.:/\
-MQ]P61<'[$,LB[2_;/1.W1B80!`"8`0``F`$```(```!%``&4;^T``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=ESA,W*QJ[0L,``````````"$@(@@````````!>"(`
-M`'@```!T`0$`#/\```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``A>)<$$IV,?>E
-M."'1A=7&]N@Q*B*V*7C__Q4'4="VNYU\QB?R*J*5"EE][X;XX+_L>T8,JYP`
-M"0KP.A.5)+T,R4]6U@8U>HS_]V-=^D%-+Q.E]!P!OJ)DER7X8&J&+9&H"\W[
-M<+[PUZOEG5E4^TH.J//7_""U\&U73(A1@<I,*;(I```D50--8C;!F\B:!"3G
-MQF"UK?[2Z%R`^)-5VQH%`8G,\]PI```<``!`!&^?V-V,B)&]N@>"CE9)\<^M
-M\[:[````'```0`5Y(;E;C*%*654I:=6KGRN$7A/\Z3T3MT9)0`<`F`$``)@!
-M```"````10`!E&_N``!`$0``P*@!`<"H`0(!]`'T`8`'9<X3-RL:NT+#````
-M```````A("((`````````7@B``!X````=`$!``S_```,`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``(7B7!!*=C'WI3@AT875QO;H,2HBMBEX__\5!U'0MKN=?,8G
-M\BJBE0I9?>^&^."_['M&#*N<``D*\#H3E22]#,E/5M8&-7J,__=C7?I!32\3
-MI?0<`;ZB9)<E^&!JABV1J`O-^W"^\->KY9U95/M*#JCSU_P@M?!M5TR(48'*
-M3"FR*0``)%4#36(VP9O(F@0DY\9@M:W^TNA<@/B35=L:!0&)S//<*0``'```
-M0`1OG]C=C(B1O;H'@HY62?'/K?.VNP```!P``$`%>2&Y6XRA2EE5*6G5JY\K
-MA%X3_.D]$[=&_8$-`)@!``"8`0```@```$4``91O]```0!$``,"H`0'`J`$"
-M`?0!]`&`!V7.$S<K&KM"PP``````````(2`B"`````````%X(@``>````'0!
-M`0`,_P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"``"%XEP02G8Q]Z4X(=&%U<;V
-MZ#$J(K8I>/__%0=1T+:[G7S&)_(JHI4*67WOAOC@O^Q[1@RKG``)"O`Z$Y4D
-MO0S)3U;6!C5ZC/_W8UWZ04TO$Z7T'`&^HF27)?A@:H8MD:@+S?MPOO#7J^6=
-M653[2@ZH\]?\(+7P;5=,B%&!RDPILBD``"15`TUB-L&;R)H$).?&8+6M_M+H
-M7(#XDU7;&@4!B<SSW"D``!P``$`$;Y_8W8R(D;VZ!X*.5DGQSZWSMKL````<
-M``!`!7DAN5N,H4I952EIU:N?*X1>$_SI/A.W1H*6"P"8`0``F`$```(```!%
-M``&4;_\``$`1``#`J`$!P*@!`@'T`?0!@`=E47_$74;MIX<``````````"$@
-M(@@````````!>"(``'@```!T`0$`#`````P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``]%?U?=&CHR[CIRRV!QGDFGJUDX3H9B1V-Y\8@8EL,%>TW*_^9.WQ4')%
-M*USVFBT7[5QS/4BI5)!EZ&X0V/J,/-U(QCBQ!&:+'#I^X_HU`.$E[335I5MB
-M8#Y(@$UD=,Z.>MB;5\P^M'!$$/PA-G8*#0"38Z74^&Y*LU`2*^QXQ2HI```D
-M9CHB`7#(:6)KMAS@4R*ABE?_>U2BKDLLRM=)9>1__!PI```<``!`!"_T!5[I
-M\\680&O^IDD%8BDY='+X````'```0`6Y'E@W^<1?%UKN)@K)=TK-EAZ6P3X3
-MMT9-N@X`F`$``)@!```"````10`!E'````!`$0``P*@!`<"H`0(!]`'T`8`'
-M95%_Q%U&[:>'```````````A("((`````````7@B``!X````=`$!``P````,
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``/17]7W1HZ,NXZ<LM@<9Y)IZM9.$Z&8D
-M=C>?&(&);#!7M-RO_F3M\5!R12M<]IHM%^U<<SU(J5209>AN$-CZC#S=2,8X
-ML01FBQPZ?N/Z-0#A)>TTU:5;8F`^2(!-9'3.CGK8FU?,/K1P1!#\(39V"@T`
-MDV.EU/AN2K-0$BOL>,4J*0``)&8Z(@%PR&EB:[8<X%,BH8I7_WM4HJY++,K7
-M267D?_P<*0``'```0`0O]`5>Z?/%F$!K_J9)!6(I.71R^````!P``$`%N1Y8
-M-_G$7Q=:[B8*R7=*S98>EL$_$[=&K;D%`)@!``"8`0```@```$4``91P'P``
-M0!$``,"H`0'`J`$"`?0!]`&`!V51?\1=1NVGAP``````````(2`B"```````
-M``%X(@``>````'0!`0`,````#`$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#T5_5]
-MT:.C+N.G++8'&>2:>K63A.AF)'8WGQB!B6PP5[3<K_YD[?%0<D4K7/::+1?M
-M7',]2*E4D&7H;A#8^HP\W4C&.+$$9HL<.G[C^C4`X27M--6E6V)@/DB`361T
-MSHYZV)M7S#ZT<$00_"$V=@H-`)-CI=3X;DJS4!(K['C%*BD``"1F.B(!<,AI
-M8FNV'.!3(J&*5_][5**N2RS*UTEEY'_\'"D``!P``$`$+_0%7NGSQ9A`:_ZF
-M205B*3ET<O@````<``!`!;D>6#?YQ%\76NXF"LEW2LV6'I;!0!.W1OSM`P"8
-M`0``F`$```(```!%``&4<+X``$`1``#`J`$!P*@!`@'T`?0!@`=EHDV/[5Y<
-MX$H``````````"$@(@@````````!>"(``'@```!T`0$`#`$```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``:_NLW\CV:T682BR6`?S5KN%['7-<5)C/CQ1+'NI9
-MS,:<#W^;&)F//SE88XQ3!GNMI`HK[5(G<&5C_XW3N8%$#O<!HV.:HQ#)X(DX
-MJC6@$E$<#4L&7\5J!6_`OJ3O\VM7<'1FN)2$'R]5Y6Y+-.%^EH=SE^+%DX>\
-M,@/)GI4?N\XI```D'+UH!IK>V[[[D:R!B:_2Y)+#XR-W@1OX7V)`DV6['(8I
-M```<``!`!,P$BG&K^P-O^4?'&`(CDT<.AR04````'```0`5I\F'I,VE3:0J?
-MLP2X/\<^4J#HOT`3MT8]&@<`F`$``)@!```"````10`!E'),``!`$0``P*@!
-M`<"H`0(!]`'T`8`'9:)-C^U>7.!*```````````A("((`````````7@B``!X
-M````=`$!``P!```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``&O[K-_(]FM%F$HL
-ME@'\U:[A>QUS7%28SX\42Q[J6<S&G`]_FQB9CS\Y6&.,4P9[K:0**^U2)W!E
-M8_^-T[F!1`[W`:-CFJ,0R>").*HUH!)1'`U+!E_%:@5OP+ZD[_-K5W!T9KB4
-MA!\O5>5N2S3A?I:'<Y?BQ9.'O#(#R9Z5'[O.*0``)!R]:`::WMN^^Y&L@8FO
-MTN22P^,C=X$;^%]B0)-ENQR&*0``'```0`3,!(IQJ_L#;_E'QQ@"(Y-'#H<D
-M%````!P``$`%:?)AZ3-I4VD*G[,$N#_'/E*@Z+]`$[=&#5L-`)@!``"8`0``
-M`@```$4``91S2@``0!$``,"H`0'`J`$"`?0!]`&`!V6B38_M7ES@2@``````
-M````(2`B"`````````%X(@``>````'0!`0`,`0``#`$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``!K^ZS?R/9K19A*+)8!_-6NX7L=<UQ4F,^/%$L>ZEG,QIP/?YL8
-MF8\_.5ACC%,&>ZVD"BOM4B=P96/_C=.Y@40.]P&C8YJC$,G@B3BJ-:`241P-
-M2P9?Q6H%;\"^I._S:U=P=&:XE(0?+U7E;DLTX7Z6AW.7XL63A[PR`\F>E1^[
-MSBD``"0<O6@&FM[;OON1K(&)K]+DDL/C(W>!&_A?8D"39;L<ABD``!P``$`$
-MS`2*<:O[`V_Y1\<8`B.31PZ')!0````<``!`!6GR8>DS:5-I"I^S!+@_QSY2
-MH.B_01.W1J*M"P"8`0``F`$```(```!%``&4=````$`1``#`J`$!P*@!`@'T
-M`?0!@`=EB?#`//PC(>(``````````"$@(@@````````!>"(``'@```!T`0$`
-M#`(```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``2%TZ3A_<Q"B#7L**92.&[9`Z
-MP^K?XIC0;K$F7JJQ#IMRH1+FK?M9A#V%YB'9/2T2T0DPK')?EY@%C_#J2B0D
-ML>!]<F:G8"GGX1*._&97Q<"J?S=95BHO^T9*]6+4;*85>1EU!'^21D3O*WW4
-MZ=CBSTR/#0%1PSUA?OC4!'=T80<I```DF80D@+*SL*>NRQ,>M\7XE5A[*LND
-M61NQ:\EC>8;6SH$I```<``!`!(QI,Z1P&>X.272:_//RKP<NXJV<````'```
-M0`4GS>R`7_!S";#FXDQQA?V>.TV%Y4$3MT9QX0X`F`$``)@!```"````10`!
-ME'11``!`$0``P*@!`<"H`0(!]`'T`8`'98GPP#S\(R'B```````````A("((
-M`````````7@B``!X````=`$!``P"```,`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M`$A=.DX?W,0H@U["BF4CANV0.L/JW^*8T&ZQ)EZJL0Z;<J$2YJW[680]A>8A
-MV3TM$M$),*QR7Y>8!8_PZDHD)+'@?7)FIV`IY^$2COQF5\7`JG\W658J+_M&
-M2O5BU&RF%7D9=01_DD9$[RM]U.G8XL],CPT!4<,]87[XU`1W=&$'*0``))F$
-M)("RL["GKLL3'K?%^)58>RK+I%D;L6O)8WF&ULZ!*0``'```0`2,:3.D<!GN
-M#DETFOSS\J\'+N*MG````!P``$`%)\WL@%_P<PFPYN),<87]GCM-A>5"$[=&
-MD^$%`)@!``"8`0```@```$4``91V0```0!$``,"H`0'`J`$"`?0!]`&`!V6)
-M\,`\_",AX@``````````(2`B"`````````%X(@``>````'0!`0`,`@``#`$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"``!(73I.']S$*(->PHIE(X;MD#K#ZM_BF-!N
-ML29>JK$.FW*A$N:M^UF$/87F(=D]+1+1"3"L<E^7F`6/\.I*)"2QX'UR9J=@
-M*>?A$H[\9E?%P*I_-UE6*B_[1DKU8M1LIA5Y&74$?Y)&1.\K?=3IV.+/3(\-
-M`5'#/6%^^-0$=W1A!RD``"29A"2`LK.PIZ[+$QZWQ?B56'LJRZ19&[%KR6-Y
-MAM;.@2D``!P``$`$C&DSI'`9[@Y)=)K\\_*O!R[BK9P````<``!`!2?-[(!?
-M\',)L.;B3'&%_9X[387E0Q.W1I7M`P"8`0``F`$```(```!%``&4=S,``$`1
-M``#`J`$!P*@!`@'T`?0!@`=E>JBJG&>TP2X``````````"$@(@@````````!
-M>"(``'@```!T`0$`#`0```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``/--/$(*#
-M/TL3[%F".=TG[X`)<N)+<P#"+TRA^`/)^N0ISOV*5)I^[F43+P.YK46>?Z@L
-MFNJ\(]PWT,_H!+#J86'S$?[`MU@/LMN!'+JA52Y]ZAI,QE,F=Q2UDVW\(!,.
-M^E'X6"T#E,3144%4+LIUH4HV0J-;0=;/_,$'F)091RTI```D5B[#$P2="X`7
-M4C,(,GJ0P?]-H7>2F2,FUC'Q]5BQ(.PI```<``!`!#G@EX/(CS+;6M)LYK\4
-M2(!JH1-S````'```0`6R;]KI.Q]D)FQR%":E2REZ\ACS/D,3MT9/&@<`F`$`
-M`)@!```"````10`!E'=```!`$0``P*@!`<"H`0(!]`'T`8`'97JHJIQGM,$N
-M```````````A("((`````````7@B``!X````=`$!``P$```,`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``#S33Q""@S]+$^Q9@CG=)^^`"7+B2W,`PB],H?@#R?KD
-M*<[]BE2:?NYE$R\#N:U%GG^H+)KJO"/<-]#/Z`2PZF%A\Q'^P+=8#[+;@1RZ
-MH54N?>H:3,93)G<4M9-M_"`3#OI1^%@M`Y3$T5%!5"[*=:%*-D*C6T'6S_S!
-M!YB4&4<M*0``)%8NPQ,$G0N`%U(S"#)ZD,'_3:%WDIDC)M8Q\?58L2#L*0``
-M'```0`0YX)>#R(\RVUK2;.:_%$B`:J$3<P```!P``$`%LF_:Z3L?9"9L<A0F
-MI4LI>O(8\SY#$[=&I5H-`)@!``"8`0```@```$4``91W3@``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V5ZJ*J<9[3!+@``````````(2`B"`````````%X(@``>```
-M`'0!`0`,!```#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"```\TT\0@H,_2Q/L68(Y
-MW2?O@`ERXDMS`,(O3*'X`\GZY"G._8I4FG[N91,O`[FM19Y_J"R:ZKPCW#?0
-MS^@$L.IA8?,1_L"W6`^RVX$<NJ%5+GWJ&DS&4R9W%+63;?P@$P[Z4?A8+0.4
-MQ-%1050NRG6A2C9"HUM!UL_\P0>8E!E'+2D``"16+L,3!)T+@!=2,P@R>I#!
-M_TVA=Y*9(R;6,?'U6+$@["D``!P``$`$.>"7@\B/,MM:TFSFOQ1(@&JA$W,`
-M```<``!`!;)OVND['V0F;'(4)J5+*7KR&/,^1!.W1L]L"P"8`0``F`$```(`
-M``!%``&4=UD``$`1``#`J`$!P*@!`@'T`?0!@`=E):DG8K.)Y7H`````````
-M`"$@(@@````````!>"(``'@```!T`0$`#`4```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``7ZZNE4?P71B]'W=SA2>BIZ_V(NOBG9PR+W#DR-!PIZV*?_N8=],Q
-MU,C99`"G=X)"?*E7;]C#_CL9/E+UE<7+P99X'>8&>(1)47,NSC;][/2-:G-8
-M3=7QR'.DZ`6G<-Z>,@YUH_1<HW&;3SKK_![[GJ.>8W<4)=/KG@_TM]1L32XI
-M```DU-!\W\[ZMDAOKG6MC&<`]8K<P4?+R6C$`WQ9B6FUM;`I```<``!`!`HJ
-MLZ/=9A@:H7X'?$[Z4HW"-'\:````'```0`6J0-9'<9$UAS)*0W_[QC/_ER?-
-M#D03MT8GDPX`F`$``)@!```"````10`!E'==``!`$0``P*@!`<"H`0(!]`'T
-M`8`'926I)V*SB>5Z```````````A("((`````````7@B``!X````=`$!``P%
-M```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``%^NKI5'\%T8O1]W<X4GHJ>O]B+K
-MXIV<,B]PY,C0<*>MBG_[F'?3,=3(V60`IW>"0GRI5V_8P_X[&3Y2]97%R\&6
-M>!WF!GB$25%S+LXV_>STC6IS6$W5\<ASI.@%IW#>GC(.=:/T7*-QFT\ZZ_P>
-M^YZCGF-W%"73ZYX/]+?4;$TN*0``)-30?-_.^K9(;ZYUK8QG`/6*W,%'R\EH
-MQ`-\68EIM;6P*0``'```0`0**K.CW688&J%^!WQ.^E*-PC1_&@```!P``$`%
-MJD#61W&1-8<R2D-_^\8S_Y<GS0Y%$[=&7)(%`)@!``"8`0```@```$4``91W
-M8P``0!$``,"H`0'`J`$"`?0!]`&`!V4EJ2=BLXGE>@``````````(2`B"```
-M``````%X(@``>````'0!`0`,!0``#`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``!?
-MKJZ51_!=&+T?=W.%)Z*GK_8BZ^*=G#(O<.3(T'"GK8I_^YAWTS'4R-ED`*=W
-M@D)\J5=OV,/^.QD^4O65Q<O!EG@=Y@9XA$E1<R[.-OWL](UJ<UA-U?'(<Z3H
-M!:=PWIXR#G6C]%RC<9M/.NO\'ON>HYYC=Q0ET^N>#_2WU&Q-+BD``"34T'S?
-MSOJV2&^N=:V,9P#UBMS!1\O):,0#?%F):;6UL"D``!P``$`$"BJSH]UF&!JA
-M?@=\3OI2C<(T?QH````<``!`!:I`UD=QD36',DI#?_O&,_^7)\T.1A.W1CJ?
-M`P"8`0``F`$```(```!%``&4>&,``$`1``#`J`$!P*@!`@'T`?0!@`=E4!%O
-M![K>D9(``````````"$@(@@````````!>"(``'@```!T`0$`#`8```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``;%B554[4S&#6FU<+.@(MA1Y9[<U!K.N'(E08
-M12P=^5\I?.A`%U7/@8(+-?NN#83+5'W5M/9TN4BS5\DVU4!D^T4J6">',%W>
-MW;,J@,#L,V[:-;*_>VI+HTS@]$$$H>&[Y=!JY6PL]#"A)3"CCHN>*(V"D[IY
-MA6GL62P%3#H-IG4I```D":J"ZA=F5;9L'>R4M34]N5+>[CY<EE^?AEFDE8`)
-MU8HI```<``!`!&#II%'.[[.^=O3#8"@%KU5J.#LU````'```0`6IRI;T'$BC
-M$>-H<(DG02=^9%1)PT83MT;LR@8`F`$``)@!```"````10`!E'AH``!`$0``
-MP*@!`<"H`0(!]`'T`8`'95`1;P>ZWI&2```````````A("((`````````7@B
-M``!X````=`$!``P&```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``&Q8E55.U,Q@
-MUIM7"SH"+84>6>W-0:SKAR)4&$4L'?E?*7SH0!=5SX&""S7[K@V$RU1]U;3V
-M=+E(LU?)-M5`9/M%*E@GAS!=WMVS*H#`[#-NVC6ROWMJ2Z-,X/1!!*'AN^70
-M:N5L+/0PH24PHXZ+GBB-@I.Z>85I[%DL!4PZ#:9U*0``)`FJ@NH79E6V;!WL
-ME+4U/;E2WNX^7)9?GX99I)6`"=6**0``'```0`1@Z:11SN^SOG;TPV`H!:]5
-M:C@[-0```!P``$`%J<J6]!Q(HQ'C:'"))T$G?F142<-&$[=&9@P-`)@!``"8
-M`0```@```$4``91X;0``0!$``,"H`0'`J`$"`?0!]`&`!V50$6\'NMZ1D@``
-M````````(2`B"`````````%X(@``>````'0!`0`,!@``#`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"``!L6)553M3,8-:;5PLZ`BV%'EGMS4&LZX<B5!A%+!WY7RE\
-MZ$`75<^!@@LU^ZX-A,M4?=6T]G2Y2+-7R3;50&3[12I8)X<P7=[=LRJ`P.PS
-M;MHULK][:DNC3.#T002AX;OET&KE;"ST,*$E,*..BYXHC8*3NGF%:>Q9+`5,
-M.@VF=2D``"0)JH+J%V95MFP=[)2U-3VY4M[N/ER67Y^&6:25@`G5BBD``!P`
-M`$`$8.FD4<[OL[YV],-@*`6O56HX.S4````<``!`!:G*EO0<2*,1XVAPB2=!
-M)WYD5$G#1Q.W1H48"P"8`0``F`$```(```!%``&4>-P``$`1``#`J`$!P*@!
-M`@'T`?0!@`=EH?9U[BO1HH```````````"$@(@@````````!>"(``'@```!T
-M`0$`#`<```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``#03"`XNE/='J;U#6&[-L
-M&,\IASOZLIF52^"YN0T,%V+(79QTY*IO".001'S;X'_M5%%]I>,=`L5J4S,A
-M1H_O>"-I]?`+@6CN+@"VLRQ?/FE@`QXXL'W?:[CX),:K=I+_PPPN);1E"+!>
-M8B5,[U7A(B**EAJHR_?:;<?K;U7SX-XI```D#"'I(=QYU=/&;>;<.)AQ/[@7
-MRV=8G72I(N=F-'R]IA<I```<``!`!&TX,,Z49]T:X3R/;I+%BS?$[L]/````
-M'```0`7ZB0$;5<LP_!\\[O29%K'$*Q@C<T<3MT;H1`X`F`$``)@!```"````
-M10`!E'CG``!`$0``P*@!`<"H`0(!]`'T`8`'9:'V=>XKT:*````````````A
-M("((`````````7@B``!X````=`$!``P'```,`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(```T$P@.+I3W1ZF]0UANS;!C/*8<[^K*9E4O@N;D-#!=BR%V<=.2J;PCD
-M$$1\V^!_[511?:7C'0+%:E,S(4:/[W@C:?7P"X%H[BX`MK,L7SYI8`,>.+!]
-MWVNX^"3&JW:2_\,,+B6T90BP7F(E3.]5X2(BBI8:J,OWVFW'ZV]5\^#>*0``
-M)`PAZ2'<>=73QFWFW#B8<3^X%\MG6)UTJ2+G9C1\O:87*0``'```0`1M.##.
-ME&?=&N$\CVZ2Q8LWQ.[/3P```!P``$`%^HD!&U7+,/P?/.[TF1:QQ"L8(W-(
-M$[=&-T0%`)@!``"8`0```@```$4``91Y-@``0!$``,"H`0'`J`$"`?0!]`&`
-M!V6A]G7N*]&B@```````````(2`B"`````````%X(@``>````'0!`0`,!P``
-M#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"```-!,(#BZ4]T>IO4-8;LVP8SRF'._JR
-MF95+X+FY#0P78LA=G'3DJF\(Y!!$?-O@?^U447VEXQT"Q6I3,R%&C^]X(VGU
-M\`N!:.XN`+:S+%\^:6`#'CBP?=]KN/@DQJMVDO_##"XEM&4(L%YB)4SO5>$B
-M(HJ6&JC+]]IMQ^MO5?/@WBD``"0,(>DAW'G5T\9MYMPXF'$_N!?+9UB==*DB
-MYV8T?+VF%RD``!P``$`$;3@PSI1GW1KA/(]NDL6+-\3NST\````<``!`!?J)
-M`1M5RS#\'SSN])D6L<0K&"-S21.W1J51`P"8`0``F`$```(```!%``&4>4<`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=ETT4OPV"8@M$``````````"$@(@@`````
-M```!>"(``'@```!T`0$`#`H```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``&$&M
-M6#GCJM3BU.-HX3P7J8@8WP4W=7`%I==OJEP@-M>D8+96YS(H+*2O9B&=\OQ0
-M:I$]8-AM60A5K27NW/K^E5*RI/<[PF.IT&03W/6&`$@-J/O<%N,.G5@D1>IG
-MUKI'')6F.WHKY)_"'3UXX9>^(FF7@[`J[LP`:>YAU2`IZ#0I```DT(92!9`7
-M>E@+$H;ZE(SQ4VN'0RKM=B1))-VEV9H$JZ4I```<``!`!)Y5>*!8OF1=O9K(
-MO%X+KTN1`S(I````'```0`4$WL!1,MEV'LO]5?2B')`/0J&L>TD3MT:C?`8`
-MF`$``)@!```"````10`!E'E*``!`$0``P*@!`<"H`0(!]`'T`8`'9=-%+\-@
-MF(+1```````````A("((`````````7@B``!X````=`$!``P*```,`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``!A!K5@YXZK4XM3C:.$\%ZF(&-\%-W5P!:77;ZI<
-M(#;7I&"V5N<R*"RDKV8AG?+\4&J1/6#8;5D(5:TE[MSZ_I52LJ3W.\)CJ=!D
-M$]SUA@!(#:C[W!;C#IU8)$7J9]:Z1QR5ICMZ*^2?PAT]>.&7OB)IEX.P*N[,
-M`&GN8=4@*>@T*0``)-"&4@60%WI8"Q*&^I2,\5-KAT,J[78D223=I=F:!*NE
-M*0``'```0`2>57B@6+YD7;V:R+Q>"Z]+D0,R*0```!P``$`%!-[`43+9=A[+
-M_57THAR0#T*AK'M)$[=&-;X,`)@!``"8`0```@```$4``91Y4P``0!$``,"H
-M`0'`J`$"`?0!]`&`!V7312_#8)B"T0``````````(2`B"`````````%X(@``
-M>````'0!`0`,"@``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"```80:U8.>.JU.+4
-MXVCA/!>IB!C?!3=U<`6EUV^J7"`VUZ1@ME;G,B@LI*]F(9WR_%!JD3U@V&U9
-M"%6M)>[<^OZ54K*D]SO"8ZG09!/<]88`2`VH^]P6XPZ=6"1%ZF?6ND<<E:8[
-M>BODG\(=/7CAE[XB:9>#L"KNS`!I[F'5("GH-"D``"30AE(%D!=Z6`L2AOJ4
-MC/%3:X=#*NUV)$DDW:79F@2KI2D``!P``$`$GE5XH%B^9%V]FLB\7@NO2Y$#
-M,BD````<``!`!03>P%$RV78>R_U5]*(<D`]"H:Q[2A.W1HC."@"8`0``F`$`
-M``(```!%``&4>5X``$`1``#`J`$!P*@!`@'T`?0!@`=E<AM<IW(PH;(`````
-M`````"$@(@@````````!>"(``'@```!T`0$`#`L```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``R2GYLT</E0S)C%1=O/KN[4]Q@M@.\;I^`\NB5J(I'4;LZ%#V
-M4_G+7,#G$8P<!/;M_(50C",-V4_&D91EL3.5C`_%2U(X.GU:L?Z(C_NK/5G$
-M,+>&K:CP]OF8Q7[ZZW#!1$=?CCUG#J"^1?M_K6N290=(2`^ZP]S'%'3^[@2(
-MN1\I```D/LB!$O#HCU+./,IJZF>/O0B#J-^1-EFVSWE75BIXSZ<I```<``!`
-M!!S[)*"[X@%=HR)N)G_)N(*$>?[!````'```0`5+7&:N#T)M%',&\`W9[)JL
-MH/]IM$H3MT:C]@T`F`$``)@!```"````10`!E'EA``!`$0``P*@!`<"H`0(!
-M]`'T`8`'97(;7*=R,*&R```````````A("((`````````7@B``!X````=`$!
-M``P+```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``,DI^;-'#Y4,R8Q47;SZ[NU/
-M<8+8#O&Z?@/+HE:B*1U&[.A0]E/YRUS`YQ&,'`3V[?R%4(PC#=E/QI&49;$S
-ME8P/Q4M2.#I]6K'^B(_[JSU9Q#"WAJVH\/;YF,5^^NMPP41'7XX]9PZ@OD7[
-M?ZUKDF4'2$@/NL/<QQ1T_NX$B+D?*0``)#[(@1+PZ(]2SCS*:NIGC[T(@ZC?
-MD399ML]Y5U8J>,^G*0``'```0`0<^R2@N^(!7:,B;B9_R;B"A'G^P0```!P`
-M`$`%2UQFK@]";11S!O`-V>R:K*#_:;1+$[=&^O4$`)@!``"8`0```@```$4`
-M`91Y:0``0!$``,"H`0'`J`$"`?0!]`&`!V5R&URG<C"AL@``````````(2`B
-M"`````````%X(@``>````'0!`0`,"P``#`$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M``#)*?FS1P^5#,F,5%V\^N[M3W&"V`[QNGX#RZ)6HBD=1NSH4/93^<M<P.<1
-MC!P$]NW\A5",(PW93\:1E&6Q,Y6,#\5+4C@Z?5JQ_HB/^ZL]6<0PMX:MJ/#V
-M^9C%?OKK<,%$1U^./6<.H+Y%^W^M:Y)E!TA(#[K#W,<4=/[N!(BY'RD``"0^
-MR($2\.B/4LX\RFKJ9X^]"(.HWY$V6;;/>5=6*GC/IRD``!P``$`$'/LDH+OB
-M`5VC(FXF?\FX@H1Y_L$````<``!`!4M<9JX/0FT4<P;P#=GLFJR@_VFT3!.W
-M1@MM`P"8`0``F`$```(```!%``&4?'X``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M:@6?D@\"BDP``````````"$@(@@````````!>"(``'@```!T`0$`#`P```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``^W5;N`G^%`A;8X^DI+%')NTIB><>&-HE
-M@L@'9]`RU"PW^B)'P+T/ZFSUITK`G#5PP5C\3U$(WL9-NQO/8Q]&JQT0/9P5
-M[-ANXQL(S]W8=]I>#9X31MR$+DS$"6^[NONL`>VS=!OX)#$K%5MB1G5*:,X'
-M&&YHU<?,M6`'@J=/M`8I```DF#[=08C),_]BS5S#V6=WK1F64X"DVH?]/L,X
-MK&@K9)DI```<``!`!*U@$<C7>8(^08/@J*^NZ!U5CDW#````'```0`6`IDT'
-MSGJ):.8]!VQ_CXQ_O]2$H4P3MT:AHP8`F`$``)@!```"````10`!E'T3``!`
-M$0``P*@!`<"H`0(!]`'T`8`'96H%GY(/`HI,```````````A("((````````
-M`7@B``!X````=`$!``P,```,`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``/MU6[@)
-M_A0(6V./I*2Q1R;M*8GG'AC:)8+(!V?0,M0L-_HB1\"]#^IL]:=*P)PU<,%8
-M_$]1"-[&3;L;SV,?1JL=$#V<%>S8;N,;",_=V'?:7@V>$T;<A"Y,Q`EON[K[
-MK`'MLW0;^"0Q*Q5;8D9U2FC.!QAN:-7'S+5@!X*G3[0&*0``))@^W4&(R3/_
-M8LU<P]EG=ZT9EE.`I-J'_3[#.*QH*V29*0``'```0`2M8!'(UWF"/D&#X*BO
-MKN@=58Y-PP```!P``$`%@*9-!\YZB6CF/0=L?X^,?[_4A*%,$[=&*^4,`)@!
-M``"8`0```@```$4``91]*P``0!$``,"H`0'`J`$"`?0!]`&`!V5J!9^2#P**
-M3```````````(2`B"`````````%X(@``>````'0!`0`,#```#`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"``#[=5NX"?X4"%MCCZ2DL4<F[2F)YQX8VB6"R`=GT#+4
-M+#?Z(D?`O0_J;/6G2L"<-7#!6/Q/40C>QDV[&\]C'T:K'1`]G!7LV&[C&PC/
-MW=AWVEX-GA-&W(0N3,0);[NZ^ZP![;-T&_@D,2L56V)&=4IHS@<8;FC5Q\RU
-M8`>"IT^T!BD``"28/MU!B,DS_V+-7,/99W>M&993@*3:A_T^PSBL:"MDF2D`
-M`!P``$`$K6`1R-=Y@CY!@^"HKZ[H'56.3<,````<``!`!8"F30?.>HEHYCT'
-M;'^/C'^_U(2A31.W1H+R"@"8`0``F`$```(```!%``&4?E(``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E`)GS&-6\9V<``````````"$@(@@````````!>"(``'@`
-M``!T`0$`#/\```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``99MX@#N_^O[+]^.Q
-M%.2$C>/^[0V4;:LR$/>Y4D:__)>WI[HP=<4Y:?I\?W<TBK1I8]V5E"#8N%L"
-MDZ#;>H08B$A4D*22?5!6P-F"^\+Q3:.@M(`+]T[7U@X8;-BWYO5/D)/VFT1H
-M2_H\;M'&?@4=F_U*P1%<=X,I1+-/F@Z4#14I```D+9**L@B'+V]O$+FP@UM.
-M$DY<;HAB1_*MN>^MAH-UBVTI```<``!`!,DX9Z*SG>("U248U\/-HE%-\G.4
-M````'```0`5X.W8UF'BK24J^1SF;;$/L@,W:/4T3MT:)'0X`F`$``)@!```"
-M````10`!E'Y3``!`$0``P*@!`<"H`0(!]`'T`8`'90"9\QC5O&=G````````
-M```A("((`````````7@B``!X````=`$!``S_```,`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``&6;>(`[O_K^R_?CL13DA(WC_NT-E&VK,A#WN5)&O_R7MZ>Z,'7%
-M.6GZ?']W-(JT:6/=E90@V+A;`I.@VWJ$&(A(5)"DDGU05L#9@OO"\4VCH+2`
-M"_=.U]8.&&S8M^;U3Y"3]IM$:$OZ/&[1QGX%'9O]2L$17'>#*42S3YH.E`T5
-M*0``)"V2BK((AR]O;Q"YL(-;3A).7&Z(8D?RK;GOK8:#=8MM*0``'```0`3)
-M.&>BLYWB`M4E&-?#S:)13?)SE````!P``$`%>#MV-9AXJTE*OD<YFVQ#[(#-
-MVCU.$[=&\AP%`)@!``"8`0```@```$4``91^5P``0!$``,"H`0'`J`$"`?0!
-M]`&`!V4`F?,8U;QG9P``````````(2`B"`````````%X(@``>````'0!`0`,
-M_P``#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``!EFWB`.[_Z_LOWX[$4Y(2-X_[M
-M#91MJS(0][E21K_\E[>GNC!UQ3EI^GQ_=S2*M&ECW964(-BX6P*3H-MZA!B(
-M2%20I))]4%;`V8+[PO%-HZ"T@`OW3M?6#AALV+?F]4^0D_:;1&A+^CQNT<9^
-M!1V;_4K!$5QW@RE$LT^:#I0-%2D``"0MDHJR"(<O;V\0N;"#6TX23EQNB&)'
-M\JVY[ZV&@W6+;2D``!P``$`$R3AGHK.=X@+5)1C7P\VB44WR<Y0````<``!`
-M!7@[=C68>*M)2KY'.9ML0^R`S=H]3Q.W1@@H`P"8`0``F`$```(```!%``&4
-M?J<``$`1``#`J`$!P*@!`@'T`?0!@`=E*B!>X3O@UUP``````````"$@(@@`
-M```````!>"(``'@```!T`0$`#(````P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M@IZLP^&WHOKP*4.<7#)048_!N[[UR&05784SV8RHWA6-P9'4!`&2F2%Y679<
-MQA5#+T)EMBO;FVAE`I!;1Q4$0T.R:2']*L'2=2'XQ7@S/K]4Q$0>S?NFB7WN
-MXHXJ1NII^7<#3<;:UBN4M>MO;%AE/RA%S\@GP-WU38TV^LI?=V$I```DKO;V
-M_WUU$V4G(1KF$-37[LY*#*@19GY.<-!`:!%3H04I```<``!`!)'P#T#R%_+Q
-M)POEL^OI*)H(U(4P````'```0`6$G=4C/4[)M>UNL0_6AV2\6JBOM4\3MT9C
-M508`F`$``)@!```"````10`!E'ZM``!`$0``P*@!`<"H`0(!]`'T`8`'92H@
-M7N$[X-=<```````````A("((`````````7@B``!X````=`$!``R````,`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``(*>K,/AMZ+Z\"E#G%PR4%&/P;N^]<AD%5V%
-M,]F,J-X5C<&1U`0!DIDA>5EV7,850R]"9;8KVYMH90*06T<5!$-#LFDA_2K!
-MTG4A^,5X,SZ_5,1$'LW[IHE][N*.*D;J:?EW`TW&VM8KE+7K;VQ893\H1<_(
-M)\#=]4V--OK*7W=A*0``)*[V]O]]=1-E)R$:YA#4U^[.2@RH$69^3G#00&@1
-M4Z$%*0``'```0`21\`]`\A?R\2<+Y;/KZ2B:"-2%,````!P``$`%A)W5(SU.
-MR;7M;K$/UH=DO%JHK[5/$[=&#Y<,`)@!``"8`0```@```$4``91^M0``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V4J(%[A.^#77```````````(2`B"`````````%X
-M(@``>````'0!`0`,@```#`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"``""GJS#X;>B
-M^O`I0YQ<,E!1C\&[OO7(9!5=A3/9C*C>%8W!D=0$`9*9(7E9=ES&%4,O0F6V
-M*]N;:&4"D%M'%01#0[)I(?TJP=)U(?C%>#,^OU3$1![-^Z:)?>[BCBI&ZFGY
-M=P--QMK6*Y2UZV]L6&4_*$7/R"?`W?5-C3;ZRE]W82D``"2N]O;_?74392<A
-M&N80U-?NSDH,J!%F?DYPT$!H$5.A!2D``!P``$`$D?`/0/(7\O$G"^6SZ^DH
-MF@C4A3`````<``!`!82=U2,]3LFU[6ZQ#]:'9+Q:J*^U4!.W1F4I"P"8`0``
-MF`$```(```!%``&4@94``$`1``#`J`$!P*@!`@'T`?0!@`=E=8N0#WQB9/P`
-M`````````"$@(@@````````!>"(``'@```!T`0$`#`,!``P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``PBPTK(W7@X9+RS:0LN`/Q`#;T:)G:.P\IN6<FQWRK?5.
-M<V,M[';&RGH`P;.CSF[-OK#_6-UD-AMCF#67>R0%,_?KJ$?MB=]BN?*4X<L&
-M?2R!SS8@C65L<84^==QKXT6*<I\HKM>"VR7N@@_SG/[),XK@:$+ATJ7#N3B:
-M'*I9>(@I```D`-0?%\%CL"+E`A<XV!\Q^J.3)A&FV"I)WV#@5W<+!3,I```<
-M``!`!-WBP]H4TU.E(:Q+N+G<'ST91L)9````'```0`7VSE_":P4EIEJ`;T^"
-M6R'M?<3P.%`3MT;C/PL`7````%P````"````10``6(&6``!`$0``P*@!`<"H
-M`0(!]`'T`$0&*76+D`]\8F3\```````````I("(@`````````#P````@``!`
-M!@````G9]V,J9FVC8+`#>;2<\4E>;)DIAU`3MT;,6`L`N`$``+@!```"````
-M10`!M(&7``!`$0``P*@!`<"H`0(!]`'T`:`'A76+D`]\8F3\```````````I
-M("((`````````9@A```@``!`!@````G9]V,J9FVC8+`#>;2<\4E>;)DIAR(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``PBPTK(W7@X9+
-MRS:0LN`/Q`#;T:)G:.P\IN6<FQWRK?5.<V,M[';&RGH`P;.CSF[-OK#_6-UD
-M-AMCF#67>R0%,_?KJ$?MB=]BN?*4X<L&?2R!SS8@C65L<84^==QKXT6*<I\H
-MKM>"VR7N@@_SG/[),XK@:$+ATJ7#N3B:'*I9>(@I```D`-0?%\%CL"+E`A<X
-MV!\Q^J.3)A&FV"I)WV#@5W<+!3,I```<``!`!-WBP]H4TU.E(:Q+N+G<'ST9
-M1L)9````'```0`7VSE_":P4EIEJ`;T^"6R'M?<3P.%`3MT9>E0L`4`$``%`!
-M```"````10`!3(&>``!`$0``P*@!`<"H`0(!]`'T`3@''76+D`]\8F3\M>DU
-M++*1HP(A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(
-M`@```@,```@#```"````"`0```(H``"(``(``'Z=5$+)RNG,Y_YK,"5+0^9\
-MAR>,"7#.:IFV.@9JD_\H;90Q;_0Q.R$,F:00+_KZ&5^1WW%1<@P)%"KNX=D)
-MBFM`\8'BTQA19W30@KE.R#,L%<\-Q$N!CWH_"@D,L]>>%9#5'E25UOTHV?"M
-M<?CZ&4!-!Q40&LFQ-/B89GQBZ`6F*0``)"H#-M%E5,PACN[/L!Z8\!N#\XV7
-M3%0"VQ_<CVR*`T7\*0``'```0`1\730V,0$X<B3@),\ZQ$<4W\LV1P```!P`
-M`$`%(+<1#JII463'CQ<X=.).\5*BQ-90$[=&`,\+``P!```,`0```@```$4`
-M`0B!H```0!$``,"H`0'`J`$"`?0!]`#T!]EUBY`/?&)D_+7I-2RRD:,"+B`C
-M"`````$```#L(P``T/ZL](]LB",Z*[6[;\B-</D[QG!8*2X-BG3EX+]EV*%?
-MX(OU6SOC`+=!2?U/X;Z2+TV%U_G>J@HRNL,\J-=C$@_3/0),WVY%.D!!,35&
-M_CEY7XEL*ZL?<6<SD2%-^L;/6CR*DB((6="X0=8_2Q28E1GE+C/\`S2FQ;T"
-MSEN2)I5RN%A-!.3/=P5)C*/>=O12H3L:'Z*UE2A4(ELN&$^"1C7VGQVD!8<K
-M?$TO_U`U&#,7DS%)'[?(8XF.6!'B3O$KND:7QR.34H)F#AE(A%`3MT8T#PP`
-MO````+P````"````10``N(&D``!`$0``P*@!`<"H`0(!]`'T`*0&B76+D`]\
-M8F3\M>DU++*1HP(N(",@`````0```)PD``"`DZ",E>IA-Q$)4/^#*;$\4U7B
-M2=])\]Y5XA&OM5TA`S4/8#I5\J1---*!Q]2PT:D=TQ8#MKC8H*)@"]RWHC&:
-M>L[>:/E:_9>[?:6F632IM;K^98P0ZYP+JECV8$L+#D^O$!N[PA9XFD&P@244
-MVF<T\2??%^0-]=X;J"K!-U`3MT87/@P`'`$``!P!```"````10`!&(&E``!`
-M$0``P*@!`<"H`0(!]`'T`00'Z76+D`]\8F3\M>DU++*1HP(N("0(`````@``
-M`/PA``#@T5TF@;5?G@A<;84Q'Y_!N&X:7WI2K4*(BO^]5%=S#IK*MYU`Q]%F
-MUVP52_8O[9<:5<GV997@WZ'\6)F6O1##6?,&;)#`+L.%PK=.=LX)&\5#?X*@
-MD]+[!N?<=\%584+1REJ$LMBUGRN\]#2_VVAH-#1B$(J1<?-0=$!DKD)@O1VN
-M-@:1\>JV;<)#>V-_S%.B3CR1`PC^HW#Y)9C>@1$;+L_^HY'X8-(GT.&M%D6T
-M-*F`O1D#ZOP,(4VSFX$"_$/^U=J9+^3K'>_C,IIO85SR4.]$]5`AQKZ4R+U*
-M25`3MT;!1PP`_````/P````"````10``^(&F``!`$0``P*@!`<"H`0(!]`'T
-M`.0&R76+D`]\8F3\M>DU++*1HP(N("0(`````P```-PA``#`HU%9>0DS&_KE
-M68'F(21-1Q]T0@_)0J5VW&M&V]91RC9;1E8:]ZOE/MN>9LGI+4XG%H]*+5R/
-M@K+KM02,A0I3>PQF.NR6GSH^L>84;QO*/[:25I,%8=L12HTQQB-G`A%_2[7=
-M2C=OQ!38)Z`*]R@<K(<1IMYG(3OKI^))+5VT=,G"X^A8M#A=0-U63E%VK4`5
-M.UOWW[&M^]21XEC))9<S)V0Y$$@AW=#M-&!F<RW&Y$8DJKN0ALA.D^*BO9E0
-M$[=&QV(,`&P```!L`````@```$4``&B!J```0!$``,"H`0'`J`$"`?0!]`!4
-M!CEUBY`/?&)D_+7I-2RRD:,"+B`D(`````(```!,*0``,.MY95Z]\+FC[GF3
-MU#T'D"9]1-&^SMC;UD!%<,+:6/>*,UQJ-2"+GW.!DJ.Y4!.W1N:)#`!L````
-M;`````(```!%``!H@:H``$`1``#`J`$!P*@!`@'T`?0`5`8Y=8N0#WQB9/RU
-MZ34LLI&C`BX@)"`````#````3"D``#!-=:_NB:.TZ>I8?3WY;=D\TP@N5L5?
-MHP[.GN6NY2FGGFGK-:_;AX9'B@H25%`3MT8OMPP`/`$``#P!```"````10`!
-M.(&K``!`$0``P*@!`<"H`0(!]`'T`20'"76+D`]\8F3\M>DU++*1HP(N("0(
-M````!````1PA``$`CVV[9`FD1E3#'YJ5WO)IG9<$$1'!.-HNO0UAHPP;+FW'
-M2$@O3EZH#;84T,<2S7N<!`-52._':VO?9\<12[2B;*>Z^:3)^>LQX37]TS8&
-MTHXOFV[]\DR05@JEROE7,4(&78RRJR3FV(CK:%Y)["("W;7./E[/U<@>.JU6
-MX'(_YI]=R]I0\-<UDY;F_F+3E&0(,E:;P\8[D(",:23N95W@FHF9F:'71,LA
-MTK:&!3&C(LZRE5)&<@.-*4/$C#OSQ:>_D\&;;-"6\I(G`BO(O7O!#/]3CW9E
-MM`.$!)PR-'.DZ@F0,Q"GSYPYM):5LP:G3RO=.9$X1,ZT1.!M.SL!4!.W1F[9
-M#`#L````[`````(```!%``#H@:X``$`1``#`J`$!P*@!`@'T`?0`U`:Y=8N0
-M#WQB9/RUZ34LLI&C`BX@)"`````$````S"$``+"0;1?/O:N?>9,RKB6-(SG-
-M`Q06)+YQ<-:^ZELNMMVIFMP(I+$A'+B1DJ&"_RR75XC(N4]46/!F=\`D^^;K
-M>:G,Q@KBIKA$Y&ND!0$JU8;8G7`1@:=`?JY2<=$SZ6NIG=W$$8_BU;__9\;/
-MJM%;1$9``L.Q@)C:108G26_#A!V-%1G%O6X\$,T@1K?FX!J\8$7X5D.,6OW&
-MQ_7+W/ZU&X3E'U@G._J`*][:![M*4!.W1N3C#``<`0``'`$```(```!%``$8
-M@;```$`1``#`J`$!P*@!`@'T`?0!!`?I=8N0#WQB9/RUZ34LLI&C`BX@)`@`
-M```%````_"$``.!0^ZQS=35C;N0=H[^E5T;.FUVR,(,I:N"@#:5;'+7UR";,
-M_'V"$_^:6$&W,R31S5;_*._<OQ9[H\%VI@6_>*,;+M:V?HM4,=9AL7\<5+W!
-M:O/4>?E,9Y3U?64%B&$2,4D54UINKK@5O]Q!/UGSO&,J2;20DP$+J,S&4N+(
-MS,A7':!EM#T'V3?"4<`.(NLCJSAJD;'8?96^KCKVCA1`L0_US7[H7MT#D$7Z
-M)NX[IOA6\_AL;+8;J3T!Y/@JI/&J0'^<Z9+>+V:)-W8K2BM7V%EEALG#(G"S
-MBP>:HM5B4!.W1GL)#0#L````[`````(```!%``#H@;0``$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y=8N0#WQB9/RUZ34LLI&C`BX@)"`````%````S"$``+!((Q:I
-M_B42`%O)=!#`OE<QC1J5C=1`;MR(1/UZ*`%X,`_MK/"+GG#<ISSQ\K)%=W!W
-M,'=+J"A9#NIX0$TMK0V7:G'>"+(YYK4\Q#O.J]D,D_,0NZ+B,Q<OQ-"V_!/P
-MH[`D2=,HJDCO<R!W;_)ZC\,#==;@56%M%U9R;2P4?+C;MBS-.),.K1H\\E>8
-M-Z+I?N&E.%0+D\/?Q=E_E.T3]E;&68>">$$4?*N2^`C04!.W1L`V#0`\`0``
-M/`$```(```!%``$X@;4``$`1``#`J`$!P*@!`@'T`?0!)`<)=8N0#WQB9/RU
-MZ34LLI&C`BX@)`@````&```!'"$``0#'4SOCS:3.O[%F[F2\W>-RB5./F_I;
-M34W8:<8>@P)#,%*<L?0@ZXY$!`XRB%8@VUD1EOZ'7/:I2RT_XK"_5+$0"(QB
-M(^@.5A?M.3#/R?M('UAVVZ)HAPK;V9%:3I:?I4;PGET+-/$T/3+#Q^&MFEDM
-M<0F6ZMD)W114:X82TFP-$W77\15T27]7BUDS?;F?6,&IGG`[FVA-<V'@%U_I
-M3S1@*"_MRHS(/9`LE"`X.F"`O=[MC&DT3*BQLHW98?HKGBKZ/9=`58[AFTSL
-M+E`3_<M$OMO1'/8^6NZXS:H.JM%SW2<,EU5A&^KG-(6580@);'B]_5`N@UB_
-M$9B'M(=0$[=&QU@-`.P```#L`````@```$4``.B!M@``0!$``,"H`0'`J`$"
-M`?0!]`#4!KEUBY`/?&)D_+7I-2RRD:,"+B`D(`````8```#,(0``L"\$3>6L
-M1II4T8!1205E?LA/]BHY6_CB^%.??@8M+!HXYNV%-%%J\#WA5U_/=5SZ,Z?*
-MKA4;SO5.^1QHPVO2IG./_-SHGP6HHH:S"2NZF+O<;WNGYE^8VFBG!IL8+@*<
-MX*'$04,6^W<3@*9<K&<EOPZZ)E4WITQO&PW"5UP;6XKK4DXE"X#2WC_UJ3T`
-M7`*(>%^AU`#T'7NW!%G-P/=9*/.M'&C([^6^M`C`J[U0$[=&'&4-`!P!```<
-M`0```@```$4``1B!O0``0!$``,"H`0'`J`$"`?0!]`$$!^EUBY`/?&)D_+7I
-M-2RRD:,"+B`D"`````<```#\(0``X+:\E_"&8)JTY<B$]VV8/C'?%A;!-4PR
-M6/:N<\'-#`&B]#O$Q[$(M*V/#Z^I`LU%.<L*3J=X`.Z$80G%_T\OT&\3J@;H
-MVN3?%];3^W]8899UG@;S>7A,MM9@F3OU">%G%&.474`S0/(!A+ZE[%1FL./]
-MD$.][8"-\4QLT]UM):4(-L/8Q@UXX](B!86$BTVH&S,_OYEKC%.$40`7T09J
-MUU^\::EE3B+@G#)9"W4#1UXD\*Z%'>U'5"*R&"'VL:UJ1M5!>0M')-,BD/^H
-MW=IO'IGSHP4QIEGK77R-F8Y0$[=&KH0-`.P```#L`````@```$4``.B!O@``
-M0!$``,"H`0'`J`$"`?0!]`#4!KEUBY`/?&)D_+7I-2RRD:,"+B`D(`````<`
-M``#,(0``L"F4,KR:B<`L24Y)@;AHB5"0&?3/=K1X<L\Q-#RTB[X-:U%_Y7J`
-M1^-O8OV$*(-QHAT(=)]J3AL:'FZ%[W#LN1`;/3--T,K7L:=BNKXVLY-?IKWM
-M6O>_Y!/'VT3SC^P><9#Q75XE2QR(CMMM&TS]GZ9QZF@\F4AA(TJCMT#09<A@
-M)G&)G(N*#+F>:&7<6DH9XZ;#*R!R9QS:GKZ=YC1.SD,*:(??;^H_1=T3#?Y0
-M$[=&U-<-`(P!``",`0```@```$4``8B!P@``0!$``,"H`0'`J`$"`?0!]`%T
-M!UEUBY`/?&)D_+7I-2RRD:,"+B`D"`````@```%L(0`!4`2&,%2K3"]3B>(0
-MJSE3UK`;`@FTQFA-1`U$?WGW!)<VEYLFXR3T)+5V#$@6U_*LD5'[O=W%!C'/
-M2O_H\3Q?MI>%^97[]5Q-B[>9W#!=RK:#)3BCY=W/2^TMZNS66&M0\P>'=9$E
-M$+L)TWUNB;6:!%MJ@_:,?5-I534@A[)JC?9B7$DE+<)\H.(=TUH+QJ=YIE45
-MA)K*PLCY%;J3!TR<]%!ROMB&F50P1_"VR=0I0K,PBQ^KZ&"3SIB`I>RZ\+MM
-MUK=G3YRP>\#R*3#]+/\2L"%%&?WST0&WFBFM9>/^P\*Y4-5J;6`I@FS;1[_I
-M;\#D3I!]7BS3/VIB"##SQ/(I`['DQK='V0)_UHZQIM+X?B;A&"U36X5-DX"U
-M:-\G)5H3B^5NQ_`O_]XY>64D85?DCV<]HF(9L'TSJ9SD`OT`C2IM#_DGA+HS
-MIG]W7+''4!.W1M0M#@!<`0``7`$```(```!%``%8@<8``$`1``#`J`$!P*@!
-M`@'T`?0!1`<I=8N0#WQB9/RUZ34LLI&C`BX@)"`````(```!/"$``2"=SIWI
-MOW3)B>L>'XW%.6$<Z'7[/@D3,Z+_+10YO@5IH*I])CFW\Q`9>FMQW1/5B+CK
-MC9_N1!CBKHJ%Q,<@O*$VT*)U*@G>,R`LLWWFG[EUA3]MR27;:&J">6BP6;?@
-M,\70C"L[^D%U\+8H5_>D)`%41$?*/5(0+IZ/!#U)<`W<9:KSL@K'FCK>?M+<
-MHETBPUT8)YA/?6'_)0="'"\R#._X_(''SS\!^83.)==K+N<_!(N%X8Q3RI.C
-M5@RMAB?D//N>(S'AR'<Y-7,]EUW^,#AM.PF2#KBP==\=>3P9HJ96C17<T6(]
-M'<?'DKJ(Q4CQ([.4M6JRD;#EOV"I&+?B52(EC1-J[`Q[B';3>.QT*^T/;V>?
-M>UK`D0^`9.R15U`3MT;@:PX`?````'P````"````10``>('-``!`$0``P*@!
-M`<"H`0(!]`'T`&0&262A\R+$4^'L`\7[7AG:+AXN("4(`````````%PJ``!`
-M0I%8T+0KR2><WX<>I!$[:VM-P\@9USZWV2LE"N'')RXR95R(_#TCVY7WF-`!
-MR_^9\)<`$'MU9\&%;8C14!.W1AI]#@!L````;`````(```!%``!H@<X``$`1
-M``#`J`$!P*@!`@'T`?0`5`8Y9*'S(L13X>P#Q?M>&=HN'BX@)2``````````
-M3````#!MTU('?C$3I6P0PPIZT?,A:%:%!UHC[5JG3CSWH#-(T^+3$G;E8TWQ
-MIL$*25`3MT9JE`X`;````&P````"````10``:('/``!`$0``P*@!`<"H`0(!
-M]`'T`%0&.62A\R+$4^'L`\7[7AG:+AXN("4(`````0```$PJ```P@,X0"8PN
-MR&>C2*<YJ=06>!H$[9!2IH8:*N*OUA9;`LPB9$*'2)P[#XTO@YY0$[=&#:@.
-M`&P```!L`````@```$4``&B!T```0!$``,"H`0'`J`$"`?0!]`!4!CEDH?,B
-MQ%/A[`/%^UX9VBX>+B`E(`````$```!,````,)B\*\G%)0*_"!&/#ABGXB58
-M+F:4"?<0:U<S2,TLDJ\,Y^]=8PV<9LF\>_Q641.W1KSL``"8`0``F`$```(`
-M``!%``&4@>D``$`1``#`J`$!P*@!`@'T`?0!@`=E(ZXD5#YLX,X`````````
-M`"$@(@@````````!>"(``'@```!T`0$`#`,!``P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``-$CL'F;O.9[0RD'?%%OJ]FAA+JSI24PW@+T.Z*&M+3@X&A[S)R`;
-M0X_>QQ[]TY><"">;LQI9B&D(2`.U?VB:7_?NA"O7Y:LW*'A4,WB#DG&Y4N(,
-MS0B0+O279*TCN@UA^;0*CF7R16((Z59THV&"8%0'F!97`$UAT!*]"F)>R(<I
-M```D#ES5G206@5RYY$;-.S>6W",CS;^BU-9$D4QH[QL%Q+TI```<``!`!(M"
-MW[>&ZDB-B.JO/EC"'P-US6*X````'```0`54HURB_7(UL%)1"L&XHQY`-H0R
-ME5$3MT;B!`$`7````%P````"````10``6('J``!`$0``P*@!`<"H`0(!]`'T
-M`$0&*2.N)%0^;.#.```````````I("(@`````````#P````@``!`!@````EC
-MGR3=);`X-8^9"U[RQG@0(X68!%$3MT:S(`$`N`$``+@!```"````10`!M('K
-M``!`$0``P*@!`<"H`0(!]`'T`:`'A2.N)%0^;.#.```````````I("((````
-M`````9@A```@``!`!@````ECGR3=);`X-8^9"U[RQG@0(X68!"(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``-$CL'F;O.9[0RD'?%%OJ
-M]FAA+JSI24PW@+T.Z*&M+3@X&A[S)R`;0X_>QQ[]TY><"">;LQI9B&D(2`.U
-M?VB:7_?NA"O7Y:LW*'A4,WB#DG&Y4N(,S0B0+O279*TCN@UA^;0*CF7R16((
-MZ59THV&"8%0'F!97`$UAT!*]"F)>R(<I```D#ES5G206@5RYY$;-.S>6W",C
-MS;^BU-9$D4QH[QL%Q+TI```<``!`!(M"W[>&ZDB-B.JO/EC"'P-US6*X````
-M'```0`54HURB_7(UL%)1"L&XHQY`-H0RE5$3MT;]:`$`4`$``%`!```"````
-M10`!3('R``!`$0``P*@!`<"H`0(!]`'T`3@''2.N)%0^;.#.NM"5'$;]Z+\A
-M("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,`
-M``@#```"````"`0```(H``"(``(``"L7C--P+>:V/RZC0R]A@"_O]XS096D?
-M$X.>ITDJ&\QUP^:I!#B@HTTYQ#"14Z/D-^Y-_SW1$^A;D0UE5\0:D]R"V5;D
-M;-$61+^?SY!4#[@5@`>A5#F(>@5W!XRZJ@0$%@91A4<!?\+U$-ZX#NK$:MQ=
-M=L\>"I5*^#;7LI@W*J?]*0``)!3_#M"P@=]6I#I(,55GSQE2/Y;PI]&Q.3>?
-MUKZ,VUZ>*0``'```0`2-0C%LH`Y$E*>(!YYU#0*J1CIF/P```!P``$`%<>%+
-MVUFECW4!.R6(^3+$T,&(E"U1$[=&,*D!``P!```,`0```@```$4``0B!\P``
-M0!$``,"H`0'`J`$"`?0!]`#T!]DCKB14/FS@SKK0E1Q&_>B_+B`C"`````$`
-M``#L(P``T-]R^'"(S/TST`8&G")U;S#Z6$_"9]Q'W%@,%QSZV;?,,LY5`?\^
-M/.@1HX]A%\/62XJ%/XS->8^\_S^<^Q7$IB9[/JGU;3L'*3.Z2G!PP4/Q-"56
-M/X/[G69'(KC*"0U!7U:@*[%>@^\7XKJNDPTF`21@-4AT2ELW-M2-&*W62:%=
-M\VG_\<`'TAP]?/9`U!"<\-.W%G8>@>D_5'8DVZ=[[;+;,<DE628,*"PMC/:`
-M!_K>2<O7@?K[:H'AG[>]\[E;3P0E($"(M/F[[%^HQ5$3MT8BW0$`O````+P`
-M```"````10``N('W``!`$0``P*@!`<"H`0(!]`'T`*0&B2.N)%0^;.#.NM"5
-M'$;]Z+\N(",@`````0```)PD``"`7T1J70?'&'FTR\6TLG4VH1B!\&@[O;A#
-M?DKJ&F0R]+P-H0FK'*TL_96KK8)BXI'H?/>-E.%4FJV0:W/4C-^:`02'CAE,
-M>STF+5;FE'8A(N(V*L,AT>4C.["(QP9VD=_<RUH6F981"86#=?`=@#S.0S-!
-MOI*HO5;2AH36E%$3MT:7&P(`'`$``!P!```"````10`!&('X``!`$0``P*@!
-M`<"H`0(!]`'T`00'Z2.N)%0^;.#.NM"5'$;]Z+\N("0(`````@```/PA``#@
-M<KPJ")`%JP+N97*.O<GO`R])KVZC_X65>V>/J-?1@WMJV.(JFNM6L#-H=EJ3
-M#4RL1#([G^U.LT/-]%Q_6NG0Y2=!?BZ;!>@KN$CO&3_NBU^7FM@O.JE_YS$*
-MS<Y0-9'C!(EXSN<SL^MY?B5&$H])6%?.'<1:]DYC*E>B(\P^@U!T/DQYJ>VR
-M21$N?EAQ,IM86<(B,;^7`?'F=N*P1T\/9E[2"3J%VX_+:-^$`QQE%??,3#U#
-M937"<_.]+-4L3V6F?,YT\IE#OH849L3<)>OC&RX5K.YTFUF*.>'+>5$3MT80
-M)P(`_````/P````"````10``^('Y``!`$0``P*@!`<"H`0(!]`'T`.0&R2.N
-M)%0^;.#.NM"5'$;]Z+\N("0(`````P```-PA``#`[#W^K[]MTRH]`372[>PP
-M9ES&<Y:9N@W_%3O9,S_HIMF*^.GK#0'H^VZCGS9I=7(_HH9Z<GNHBY!+EK5Q
-MH9FDB!&`OA'`>'+]MVYF;`*+(Y<1P+MS_*7\S'Z_WE4+2/0Z7)2^[C3JA65<
-M?:T%+7,;3Q]#>BDMUR4U0P/B_,?L"\EPG_LEQQ]^)Q2]#.<;+2KL]4X0SO$>
-M)$]*<`/#)8L$PFHJGTY*SV9$\WR^E2_#F6A-\GD_':MTUQ9V?'A1$[=&K#P"
-M`&P```!L`````@```$4``&B!^@``0!$``,"H`0'`J`$"`?0!]`!4!CDCKB14
-M/FS@SKK0E1Q&_>B_+B`D(`````(```!,*0``,`N/&D=@O4/P8B<1/>6))/N!
-M)GN6S0&!3`8A9&/T$YV,4A*Y_C.FS7XD%;>.41.W1BAA`@!L````;`````(`
-M``!%``!H@?X``$`1``#`J`$!P*@!`@'T`?0`5`8Y(ZXD5#YLX,ZZT)4<1OWH
-MORX@)"`````#````3"D``##/U[_URTHTHG_MX$I'$M<@,T1)OP>.*SY7`\J$
-M4`V`R3SFXIG=US#)>_MO.U$3MT8#FP(`/`$``#P!```"````10`!.('_``!`
-M$0``P*@!`<"H`0(!]`'T`20'"2.N)%0^;.#.NM"5'$;]Z+\N("0(````!```
-M`1PA``$`M`#=>L3#BV+]F_>FP84U$_W0&1KK.MPYGBUU!TR<CQ9I@Q)71F1#
-M2'<V(',F>;6#,1K'W88WN\D(%"PSNP`H#PK+C(C>2C832K`OI?L9J\7QMM`F
-M1CA@T<^(R:2D1DNLY>[Y0P,A-O:=.(#H#%X4"W%.<]1I;O-")RJ_PWRCT4P9
-M`J'9BX2B\95MQ,<:Q44K,U/)I0;6U)"X0$<QW)`F(ONCQ)Q2_,(.H64C:K.H
-M>R%'3![17$.E?5V?G!\@@6?]./U/;>[4S+]%=?+!`73?`6.$XG\CV8CUR==*
-MOFRH`:BS3_^%!FT>BM/5F?0G48%5BCEUYDLA["9[>@-041.W1MVG`@`<`0``
-M'`$```(```!%``$8@@```$`1``#`J`$!P*@!`@'T`?0!!`?I(ZXD5#YLX,ZZ
-MT)4<1OWHORX@)`@````%````_"$``.`'LQ!-*T"=1)T$XWGC'A?UT\E19N[4
-M#CW5-5&+74O+QN`2^ZC^^2E'+B#H<]&E5/TP=(YU3<O-'@XYHN>?#!"-C#/Q
-MS\$9`B]P;>_!=*1T@I;H!'!#>8P4X&/WNPQG&5-\RA`]^0F)9I1Q`3B0O<`;
-M85PS/P=X6TN8L1,\EO?&4>7AT93-^E.L6LFK;+>>Y>'BYJUKVS&G?C;K[T.M
-MHLP_.$&6'>79+81QL,*>>FAB]%%X3@V'LAL,@B"H!6%::,4':`L9M$P^[OOT
-M'E*F!BT=>BE84L-8H*FOJ`<.41.W1GG(`@#L````[`````(```!%``#H@@0`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:Y(ZXD5#YLX,ZZT)4<1OWHORX@)"`````$
-M````S"$``+`\1`^7$*&]2&".9?@WZ26QTH0DV<HXW,R&2G;KS38L4$741`*\
-MJ3"43`";RNNJLG'XU/TJ&FSO04N+XDG)'TS$(`&)\7/J/(`$7N<N2`J*SR5\
-MZKQ+=2*F7`N,V:T6=L\BI]0;GW<L8W)..[BX^MM`JM#!HP[@Z#70JURZ.P8/
-M]ON;3L+[&F1.<$[`4RVH7LV:TF3FE8A8TK\!#[.\W"M$[`M8NBGGL[+6R>]'
-M41.W1I#R`@#L````[`````(```!%``#H@@4``$`1``#`J`$!P*@!`@'T`?0`
-MU`:Y(ZXD5#YLX,ZZT)4<1OWHORX@)"`````%````S"$``+#"O0E\P_`7"[CZ
-M20@PQ>TX)*).NGW$/^+Z#VBX=0>E"YMS44?4B*<VF%'X$&OT=#[%!QC$,3H_
-M*R<\/^=CR7?GIWXBKL]?\SV>P(XF2GO-D#K-S^WG89`*$=0($+./YI1!&?O>
-M_H:*)5\%$5A<(<C5)37@W+B^FP7?L?V>06_FIV"ZO_SK>S@]]AK>1&PZV%@!
-M4JK#.XB!;2784SEZAC^2>NL(K[2;5626Y(6&41.W1CDQ`P`\`0``/`$```(`
-M``!%``$X@@8``$`1``#`J`$!P*@!`@'T`?0!)`<)(ZXD5#YLX,ZZT)4<1OWH
-MORX@)`@````&```!'"$``0!IW[Y52O6ZY+8XCG*PAIGF?:=_>B</T9@#D=!N
-MSX7]WUQ1I`E>"%0Z2WJL]MXV/L)@=B:AA%I=9\]Z>>;/5N$'ABZ<50)4[)#)
-M30\A25\U2<7.`U<!E^P[H23@],1:I$7P8LO\R_%DD#*S'HIY<]QB?/)YAT7X
-M/YFA/`A<TNLY.Y0%MC1Q:D"-L(,7D)0(_0FM>MW\L.HC#I&4>IC&BW8)9ITE
-M]M7K\^-`!CRPO]L.I=`]PWA)T`X/=;*3ILR,$`<^7(0`BH@)U8HU0E.41[?]
-MGL+,!,ECV,;+UI;K:B&'0D<;\-9ZBKTA.):,B)?N:^G[53U#"#6,D;%%%XY1
-M$[=&=S\#`!P!```<`0```@```$4``1B""@``0!$``,"H`0'`J`$"`?0!]`$$
-M!^DCKB14/FS@SKK0E1Q&_>B_+B`D"`````<```#\(0``X*KR#GH5PZ@9,O]*
-MI!:-SMG9)&D3BF>IL;LQU0:P5Q9J?KL$B&U;HJ!N"4HH<FO?_)3)PN1KB2'C
-M!-P'L5PB"*=M'U'IODDN*ZO)95S9!HN*SWFZ`.M@^$IOXW0I0+QN.#;0)G46
-M3(`$B<]E02.'S09%A6%?)@4`A0UXD?/P#9!<]5D*^$?M`$;0$)#,7TXW=$^Q
-M:G<I,25=E\#+5MDHZB:PP.&6>5$+F/,"T.4T]$QOWI)3@UC3`KJ5V_F/97I&
-M+)<EP5&_'$!J&94H=7"MO],KWD?6P8WD98W>#EI1$[=&TUP#`.P```#L````
-M`@```$4``.B""P``0!$``,"H`0'`J`$"`?0!]`#4!KDCKB14/FS@SKK0E1Q&
-M_>B_+B`D(`````8```#,(0``L(TI>W`L*WLX*,$X3GNR!L8F@"9XT"I5+BRB
-M9-"_:#'M4*OSNT-:N:T%00*8HX#RU9<'AXLD;]9:>P@J]X/U2PC/!.L)A@,U
-MM$HN!T78\:UL!O$C2,"U4(W2A7?R"'G=+_3^&!?N8XLU^`5S@_`$F+XH-[/D
-M7=C,>FVQ%D1=\GIJ@WTVKF#W`_W>N3E5[.)[3ZR/BZ`,($X'6(7J_);UAAU&
-M_0$P1J`ER^>]KSQ1$[=&Q(8#`.P```#L`````@```$4``.B"#```0!$``,"H
-M`0'`J`$"`?0!]`#4!KDCKB14/FS@SKK0E1Q&_>B_+B`D(`````<```#,(0``
-ML%X%/[=)&J,U55VI3JX+`Q/;E,R[.^@"D&0H&"$!>8\@_Q:;'=X<:?=@:8)P
-M=1]C2(!Q-ZM'314)RI"):&S8@1PPEQ!V4?07A^@;E"!W8(B19W'M=G<M`NTS
-M;</I#M.K\$(2\SDP,78R3$L%XSB7I#NXF4?P&Q?L`6%&&X*)_9\V-VY6C%D!
-M5-"*G3)(#Y77&9!6-:([PE@''Z%\KF42+)JW5O?\@XD[51PD*)11$[=&;-<#
-M`(P!``",`0```@```$4``8B"$```0!$``,"H`0'`J`$"`?0!]`%T!UDCKB14
-M/FS@SKK0E1Q&_>B_+B`D"`````@```%L(0`!4"+CG^F=926FD8IED]U&K#E=
-MT>?%?,(%QO2ZI;0C,2OY%(_C1Q*+@D_:.DB[149>AC>MC(-_`-]^$$OE.&W4
-MHOE8$;V4`$*=K[`89^.&<-1=J5QOTAD_G,?HC)\Q!AGONX1_X&P:7<EYG6+0
-MLIOAD!9_HY/3@ZM3!8'WNV9.(+#D2TTB*Z*]KQME#$-T`J2UQ:1J&<2FX3RS
-M5ZS>VK?;7F&WY_;J9F?PI2REKTLHMW"!U%RMVX6V63"IIE@KKF7.)3@J2OT[
-M:^MHY]3Q=N_EX7?DK_,TW_S&5D>F3OG`;?X,>*=IRS],:390;7%S:8T8)KH;
-MIQ26DB<?K4W<\F-8P5L+S*;#%;PL/57"=#W-1V**AK?,F:G^]QK\4P4CGK-(
-M;I-B\J(S!%?6HAL]C)BQ79'8_=14K/8MMDI&O-O+$`/S"#@XZ^OV5^@G00V;
-M41.W1J@\!`!<`0``7`$```(```!%``%8@A(``$`1``#`J`$!P*@!`@'T`?0!
-M1`<I(ZXD5#YLX,ZZT)4<1OWHORX@)"`````(```!/"$``2`@X%\V2GRF7:Q6
-MNAB>9Z[&R^@:MK^T*QCAN4]V"M4;O*(B>H7T:N7HF&#CVV7XT3PE%`\;QJ5E
-MVP1&1+F+UBY"X<AX[,@``L,=]4(F+@<D2H7XTH]$NN2HE_^?7WS7#%$[!D^#
-M[/U>\=@QO8U0TQAMT3:>!R^%)U)_3S<8P_V'Y"[AXB$YNLI((SF36'W-LW4+
-MO]K:5OL-JN6W<&7T@CVRK:L+D>8"?]VWPE*N+-OLPWHS[]4,CJ9&>Y#`E%2"
-MU@16IN0TD\'#BNRBXPA^"`8US4:G=QJL&5NG5I%KTEQ,%DW</^M$M2YCP@O\
-MA_H/WO41N58)02K]F2K_[J+J[:VGBJWSF")&FN]ZWBK84([D^V;4S)T>*:11
-MYI>_XU$3MT;>CP0`?````'P````"````10``>((4``!`$0``P*@!`<"H`0(!
-M]`'T`&0&2=I,%X,J::>BRRRZM8<,Y=4N("4(`````````%PJ``!`+]/>#_H/
-MXG6WN<$(^997W=3N@B=-=A'IDB'K\/-+*'TV%,+DZ1`WYFP6Z<7=L9;]*#TJ
-M"DH)$S_*U7JZ41.W1IFH!`!L````;`````(```!%``!H@A4``$`1``#`J`$!
-MP*@!`@'T`?0`5`8YVDP7@RIIIZ++++JUAPSEU2X@)2``````````3````#!8
-MB-H<)HR6#JX9K2A%[NJ6*^U,T8WI%$:[&&`M8B<HU"HA\>W@B^M/148YBE$3
-MMT:JR00`;````&P````"````10``:((6``!`$0``P*@!`<"H`0(!]`'T`%0&
-M.=I,%X,J::>BRRRZM8<,Y=4N("4(`````0```$PJ```P6`'@BSS\H/F<ZF7*
-MCB)WRC2%#H?/'V<UT!L7K6*OS)D"Q=!1=F$TFVD3F"-1$[=&X.8$`&P```!L
-M`````@```$4``&B"%P``0!$``,"H`0'`J`$"`?0!]`!4!CG:3!>#*FFGHLLL
-MNK6'#.75+B`E(`````$```!,````,%?]!X-*^9B#\+<@`/$(,7,-2C\EIPJ`
-M5+*(U:,"(-E]_*O;MJPAU#B5P"0.41.W1BM9!@"8`0``F`$```(```!%``&4
-M@J8``$`1``#`J`$!P*@!`@'T`?0!@`=EG+(0TB=A%W```````````"$@(@@`
-M```````!>"(``'@```!T`0$`#`,"``P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MKU]P!8^O_MH6EVY8*%XCT/O]+O:N-PF#)-/%U)9)A?:68?948W25131PO&2@
-M0>GV\Y97"MQ.#2%S=F.&'<8"`=EAKRAYZ@KE%M`RH+$KA\<V<K^=G1,'0\-J
-MUR#U^FF^9VQ=Z3>WR7!HD+`CXK>ISN]`5%S0)G$AA'YP!Z_M_>8I```DQ4]5
-M849#-Z0>?1WPNHDB1MBVL]G(=)DF4<5<)7YL3JHI```<``!`!*\T4/HCN0Y$
-MS/6Z&"-&8`>O<<G_````'```0`7_66*2V52U&:+[/1@$B>)AK_(I;E$3MT;>
-M9P8`7````%P````"````10``6(*G``!`$0``P*@!`<"H`0(!]`'T`$0&*9RR
-M$-(G81=P```````````I("(@`````````#P````@``!`!@````H.N+TM!1'0
-M<E-_-9'P47YHE:*@CE$3MT;'=P8`N`$``+@!```"````10`!M(*H``!`$0``
-MP*@!`<"H`0(!]`'T`:`'A9RR$-(G81=P```````````I("((`````````9@A
-M```@``!`!@````H.N+TM!1'0<E-_-9'P47YHE:*@CB(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``KU]P!8^O_MH6EVY8*%XCT/O]+O:N
-M-PF#)-/%U)9)A?:68?948W25131PO&2@0>GV\Y97"MQ.#2%S=F.&'<8"`=EA
-MKRAYZ@KE%M`RH+$KA\<V<K^=G1,'0\-JUR#U^FF^9VQ=Z3>WR7!HD+`CXK>I
-MSN]`5%S0)G$AA'YP!Z_M_>8I```DQ4]5849#-Z0>?1WPNHDB1MBVL]G(=)DF
-M4<5<)7YL3JHI```<``!`!*\T4/HCN0Y$S/6Z&"-&8`>O<<G_````'```0`7_
-M66*2V52U&:+[/1@$B>)AK_(I;E$3MT8*G08`4`$``%`!```"````10`!3(*I
-M``!`$0``P*@!`<"H`0(!]`'T`3@''9RR$-(G81=P*XZRS4.9F`@A("(@````
-M`````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"
-M````"`0```(H``"(``(``!KMY)KM;LE/W-+'/X[XDJQM-]XU["3%&L-5Q&A2
-M5PB-ZT/U/^PJ-76K,.V,N*U6^^"4&]&6W$J_SRT_9W>:Q+^M.C^_!+J29!H/
-M2[&)2*P]P8LP$ZZY]X2P;=Z^[7"S<L1-GE#9?E:.*MUDL1CNR7XW=.ND&1),
-MV^^\!Y-T_>7P*0``)*C#^/.\H?OS435-9$T.ZC*^V4?KHNHH9PI+3CN#9U1\
-M*0``'```0`0_XJ1;X!U3$_U85_1I)8\!RE#)$````!P``$`%#P[Y`IPE9Q]2
-M5"L'9UP]Y2?L(Y51$[=&G]`&``P!```,`0```@```$4``0B"J@``0!$``,"H
-M`0'`J`$"`?0!]`#T!]F<LA#2)V$7<"N.LLU#F9@(+B`C"`````$```#L(P``
-MT'Z^H+UG^P!?9E<#G#C$!2AW07GZ?'MHEECJ6?K4D?J*K>GG[!`(R)HC[7LI
-MW50HQ_RQG"`J*B:Y@S'*`U"KT/@G&:J8_GUM6X'=B&8ORX@N;_>H;)HIM$?A
-MVO+_8NK$6-#3)[Z92DFX.S^]ZCF3]$B<),HPV%*V,T*6+MV705GG"0@>4',8
-M=POX81`A:&DGPF4/CRK0C?.@C&0FAKEEK$<3ZL7?<=;K\;J9=O-B/KVH?OB!
-M*)<G[[!_;Q.ZQ,G7)Y5MR?+:<H.?JBQU[U$3MT:_Z08`O````+P````"````
-M10``N(*K``!`$0``P*@!`<"H`0(!]`'T`*0&B9RR$-(G81=P*XZRS4.9F`@N
-M(",@`````0```)PD``"`@J9N!_;':Y_'X8.A/,!U=JT$N-ST]<1Z-V<X]RO\
-MMF4+/HH5X5/M1U+O4+>#S,-ZQ5!72E&H."*S3NA4G=BL`QR=W+<?_#:[Z;D)
-M*Y8@,:[]I&)Y(.9KB.:R`&;>I2YU&GI_>-_`_KG[0D!6YR^>1(Y:86#L#*N.
-MR&[_]5$3MT9Q"`<`'`$``!P!```"````10`!&(*L``!`$0``P*@!`<"H`0(!
-M]`'T`00'Z9RR$-(G81=P*XZRS4.9F`@N("0(`````@```/PA``#@'-Z`TBP<
-MHE\*G_$OL),E%_/DOE@,Q5KNL)64:\20),\+;[3ZG>I&*5F>-E]573;L0WT\
-M](5!T+1G03(H'/?N.4&9VU]V$+-[2X`5.:$/QQ,MQ5P<#_(Z;5O%G.=H9_7P
-MDT.[X3#NYBS''1/:,(H0JT?9$M1]G\I*4NUU_GX,\[5$]EW$``5-26R6CC?J
-M*[HQ7UB]1MITXI)*^R_2R5(8[`>>$NR!GMF8LUS?NE%7OJC)PGL:_4_ZYE(X
-MJ0H]WE?<_5$VT3\8\XA6<%"Z[:N,?JG#>@GP*?H/(1:9G%$3MT:^$P<`_```
-M`/P````"````10``^(*M``!`$0``P*@!`<"H`0(!]`'T`.0&R9RR$-(G81=P
-M*XZRS4.9F`@N("0(`````P```-PA``#`R:_JP[(]$JK+9=&8P'U>#J*.O`TD
-M\*&<Z9$3,ES$E.X$T-#Z3JOIKRR3*`R8Z>2FE+ZXCP[Q;VI""I7)3*_QCC[?
-MKRDDI>$85OH)[!P7L"F.V>;8HMY)*)GZ*5`2/MO4GJR8F$,W8\NWV2A2MD+*
-MTM"LK/U[U#5L+O66Q5&"T\$2PS/>%QKR\JSA,O<,\>^(6#<`',SYQIX.H1O&
-M>H]!VWD])!*FM.D%/>A:#NUXVX':X.C@9<UE:MZ=_+]1$[=&QA\'`&P```!L
-M`````@```$4``&B"K@``0!$``,"H`0'`J`$"`?0!]`!4!CF<LA#2)V$7<"N.
-MLLU#F9@(+B`D(`````(```!,*0``,/Z5C/R(QXYUP*=1V'"\!<J`NR2(Q]?#
-MZQX4SK'4T7%,YV&&8JIHT;$3ZB,T41.W1JXT!P!L````;`````(```!%``!H
-M@J\``$`1``#`J`$!P*@!`@'T`?0`5`8YG+(0TB=A%W`KCK+-0YF8""X@)"``
-M```#````3"D``#!$T.H7&)VJ"^CURB!\=8IDO1C10P`32L6!G5@,^'Z#4VQ]
-M67;B(PQ3HK#JM%$3MT:"5@<`/`$``#P!```"````10`!.(*R``!`$0``P*@!
-M`<"H`0(!]`'T`20'"9RR$-(G81=P*XZRS4.9F`@N("0(````!````1PA``$`
-MLTCB?3W=W51^GZIQ,'T5GW7V_QRCFF9RLF5`Z5,PB@Q4TTAI9Q3R:+XE0U(F
-M+RM*[RD5#9Z=KQY[?G>I_`)>R`B4[4DPZ3\-GP1A(VAKMY4J\SG.?"ELGC_%
-M6/`DED/SF&`E%@I`#ZW>(E)]Y`REU&`^$@-==K2N$NH[L,7CF4+$]SZ$7JC3
-MM`)C1VY)0)&V")#?#3_A<67?;N:D*L4C#B[2#3LWD(*MY`&6B?JL!"BPC(NB
-MG%[DE.9IDR:)]M87$T!JP8BI-MSE>&21.<49&01)Z"N,@)@C;`0)8R!XA="=
-M7T86V-5Z%"!7>T8>A.(B5Z88*G9"/_Q:9!O!41.W1G==!P`<`0``'`$```(`
-M``!%``$8@K,``$`1``#`J`$!P*@!`@'T`?0!!`?IG+(0TB=A%W`KCK+-0YF8
-M""X@)`@````%````_"$``.`E^R*5%HQ)_.``IO%VN9W$0OD.G;!T7)O\:RCU
-MQM,J2@BSK!=5IG&92\6.9D_XE'^<V2+B8>SX<C3E$4A&6M:<OH2P+EP5]A@6
-M!.H3SZ-V/:9B>(@)*,FE+#]TGJ[@)'J_(,G-"YMFYRSU>C+;ZH\0:'&5_KQ+
-MVB]*T\MJS1D4M._QFOS<?'>!)HB^\P[&UH#&0_\1H-M`6G#Q18TH/_V=Z0GR
-MD@N9)MV@;\FJ$8?Z88=J?X_MN1C$NYM-MKSN6DUE#IZJ86"9JR%C<U?[TH#<
-MW(C'(Z.*#C"^IH2>41.W1G9S!P#L````[`````(```!%``#H@K0``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:YG+(0TB=A%W`KCK+-0YF8""X@)"`````$````S"$`
-M`+"3$L!M^8C;M*0V*B%?,1J$/6NA1X%+,7=<3EX9N(U]E':0?!W4$0^GK880
-M[D`C<V)N@<5"N2.W*=-WU)N9@$LZXC1RW8N'0"T0]BU1&$?XSZIRX@!1;I)6
-MJ2UJ;4S![S]@AP"%]=C;%*%I@#$]Z%9E4R*;P?^+5+PN)8J/=X_@1!=O0KX\
-MP%X8SBX*K/8DP"!&FH5)SW]6[`\6`Q5JX/@&E>0V:9T:3!7T1C4E41.W1B26
-M!P#L````[`````(```!%``#H@K4``$`1``#`J`$!P*@!`@'T`?0`U`:YG+(0
-MTB=A%W`KCK+-0YF8""X@)"`````%````S"$``+#&.'X?_QIY9MP(Z72C3Y<H
-M`99TM:(C[6D7*4W.NN\[-([&=?E3S46T;FBQK$1LK=)L8@;0B-%%-RZRO+F;
-MWY+KR&%&W6C^BUAY-D[Y\VW5Z$%'Y%6^3'"H>D,/`N+,"G)_-VHJB)^FA%L,
-M::.@-Z\*@_ARY#SHCWO,&D@J$X5/#/U6?AC?!3?!@/:$UI4UFR#*^R:']%G"
-M"#&)$_49#U687E!E(N]R<]PB:X.N41.W1I"S!P`\`0``/`$```(```!%``$X
-M@K8``$`1``#`J`$!P*@!`@'T`?0!)`<)G+(0TB=A%W`KCK+-0YF8""X@)`@`
-M```&```!'"$``0!0[</HA6KPT@Q/V0.5TV/A!_#61RYL+[+V1V#)#?1"5YE3
-M$[KW&8;A`+UCZ-Q#[/E_.G.O^8!_)5$O]FH^`S9*Y4&6EP3@_8I(=L"^1'!@
-M!_APDIES""];?T^GMKS/6*\[5A@BZ,NOJ*[F[A6SK@#V!X7A@`M<C)"<0MU\
-MD(LG'&E^&%-_RSJV(&C!S`JHQNPY"HXT)Z3UJZ[WA1;>S";BSDK!LGX+@&8K
-MQT2PS2&O"P4O8&UWCN:W:GMDO&6I"7"#9O/@?($+NIV#'UW+U#)MH=8%<+4Z
-MX300$T^\N)8)0A<^P$D$N61B+`6\*KLCU4%^C,G%^!.8:@Z2(ZY1$[=&?+\'
-M`!P!```<`0```@```$4``1B"MP``0!$``,"H`0'`J`$"`?0!]`$$!^F<LA#2
-M)V$7<"N.LLU#F9@(+B`D"`````<```#\(0``X(U/W5<#,+CMI]PA@'\E9\'R
-M#I-)6-Q2T2EYN%LW;!?*?>_X5C/C'56_DT`L(%I2V"4T@&M3N60>25$WUO>O
-M?"?0"N\(`#4\I24!8I74$F5V`7^B1%\E;F-'[Q5^4XYTJ*GKAGX3?3YWO7T*
-M08F@X@9%"@1VAEYOECFR#J,UOH*NPO"=1&V8+8K/&1YU.LRWK"AEYT$24RZN
-M_'G-=<*$3RV>/+V&(4$LUDW+_<0P+N-@O5CF*U%`6C^:2<C=Z:9%ZN_07**]
-M;+[H28V2<V;&LNA@%;@F`R.F]]Y*#B)1$[=&C\\'`.P```#L`````@```$4`
-M`.B"N```0!$``,"H`0'`J`$"`?0!]`#4!KF<LA#2)V$7<"N.LLU#F9@(+B`D
-M(`````8```#,(0``L!U32ZMEP*#4CC',)#\87*PY9R93\$9YJ\[YPN)5"[>I
-M^OOS`_3J">*ET8><Z]1LJYSQ(WPJO<`A5>LI@UR.LK::@@$J7@&.D/QR[7BZ
-M5I(^!<J%?EV)Z;<NV8VUO)WC=<(Z]>E4T2F\Q!!XD`T;.MQ)<,R]S+)X8#\H
-MHZE7%\<(?C675>BQ6RX,/9_0D+Z`W!\?_1K?VS0T@._R&N>RP+$4VV/D\]W$
-MK3@%#C-1$[=&1O,'`.P```#L`````@```$4``.B"N0``0!$``,"H`0'`J`$"
-M`?0!]`#4!KF<LA#2)V$7<"N.LLU#F9@(+B`D(`````<```#,(0``L(15@`_W
-M-XDO7@X-FF&8KF$^/N*74;`+>[$-HSF)F(V?:6+;;IIDM,2+TEJ:='J/S,C8
-M?C.=FN-OP"([E10<O,OV"'\4YJ028#@9S43!NR&Y34*:ZUNX3;_PN#]EGV6H
-M)-IT79!>(I!!J>F@^>;?.!Q[9=$*PUJK;SUDX+"PL0U8SB/FY[LQ\)RM!!U_
-M\+0E78@+I@.S[FU#W%-N/&G5]"?C!W,=GIWN%%I>LL!1$[=&S!D(`(P!``",
-M`0```@```$4``8B"N@``0!$``,"H`0'`J`$"`?0!]`%T!UF<LA#2)V$7<"N.
-MLLU#F9@(+B`D"`````@```%L(0`!4'T[M.([>R\YJC/K.70%17-LX"M5JMY^
-MD/_EAJ]S0-3\7=G\F.I"0VNGU,_)E<=0S@Y+<'=F+(EEBA$%"(I<6<0J5.W6
-M*W1"2?6^=)"72Q6.SI=]^KM1P5)6\).P6C="#?@4'TD]$3)TABI6VZ#H%9;&
-M^>E64D?ZHDK..#7>\XW\8NFW%D/^L,_:Q@=9ZLWZW*M-O^>='N/*L5BTDP_Y
-MO#T,+23W&1J`H(L6S7T!*#6!"N3:=^?M=G5PT`RN:UYRK8<,'<89D#%2GMMP
-M><F%[F)4R=>"NB4*AYBZ'_`>ZV/`'O&TI[9WE[$2_N86>S62M^,I#WAX>(?-
-M%@-,^R%S/#>GI?A?V3^S,9)!R.F\L/E][CQ)W<):JMJOK/)6`LZV-%:^:.%6
-MDYRUPP`6,!%V'/G,61$K493WN#]^XE)^_H.EAHCW-;?$`(EGO0TI41.W1D=.
-M"`!<`0``7`$```(```!%``%8@KL``$`1``#`J`$!P*@!`@'T`?0!1`<IG+(0
-MTB=A%W`KCK+-0YF8""X@)"`````(```!/"$``2"'R1P@'6#0ZN\BSB(RT346
-MWT^Y9[);R\E_+"/:<P/I5^NU(`HM@@R^V:#,/@["-J'<;7!5S?!PJ5TD5Y;V
-M*P+/!$)&X/BZZ*=37AR>.LD=4!ZD'X?^!F,&.T,3NP@E%XV![2X/=^T>O>Q7
-MV1)60)I"F_0`)PC.^6`$VX_H&&4"6.GLUN:U<Q/@,BHU`!27?_$42;[[^7P&
-MNQBT*$;^5P9>_N@"Z0??V.Q`%8/WJRFHEH*B9#T))A26XZ`;V[WZ2Y$^;+`-
-M!Q$+L$/*_3>/-DN*.$).I?IJ7AR[ESF:!KR,A+9P7N>USWSU)_E!Y13I>-:0
-MRBQQ1O1GP!"4??!AX\03LLD"_G678?]Y7'V\+P(7)RWW*$J*LM'MC<PE6U$3
-MMT8[=P@`?````'P````"````10``>(*\``!`$0``P*@!`<"H`0(!]`'T`&0&
-M227VP3D4_0@?`CAF-;%Q0<XN("4(`````````%PJ``!`Y[$'!Z=;CZC1]>_J
-M!->_0?1F3%6T0U*!$7O,0Z_P,EN)20X+#1+U5"E2N$'=97DK5$NNDV-A"H4`
-MDF-141.W1HR""`!L````;`````(```!%``!H@KT``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y)?;!.13]"!\".&8UL7%!SBX@)2``````````3````#`IHT7>9$DU
-M!\@/2.<_4BKE(WP:"(1>%KO,ID(\NB,+4)/BE<M3$$<[\U]CO5$3MT8\D0@`
-M;````&P````"````10``:(*^``!`$0``P*@!`<"H`0(!]`'T`%0&.27VP3D4
-M_0@?`CAF-;%Q0<XN("4(`````0```$PJ```P_*9"*#<+30K&1L/(?9ITI`0Y
-MZ:?<)>$'X,)82^Z--3,!K__45_`H0U6R/K51$[=&\9X(`&P```!L`````@``
-M`$4``&B"OP``0!$``,"H`0'`J`$"`?0!]`!4!CDE]L$Y%/T('P(X9C6Q<4'.
-M+B`E(`````$```!,````,'34#ZT.'VT4GO4;<P'NSO`3<U)S'MK.J^ICNS^:
-MV540.-@WT71=:*>8V0,541.W1O?M"0"8`0``F`$```(```!%``&4@L,``$`1
-M``#`J`$!P*@!`@'T`?0!@`=ES2"%[][#R\$``````````"$@(@@````````!
-M>"(``'@```!T`0$`#`,#``P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``"H\/8;":
-MRE/C0W.)1"NPT0I0\&"G;<%$74;>GNG*7P8#-X0E2*KF/+C9<BE<,D_9=/E!
-M,$7[%-H5GF7\?J\0#JR12"*(I0-)'.Z`Z&0BR^9FHU'U@9;Y!9):O]C^/NT^
-M.%.VN9!'PI4>G_4*%?4";=04[1DU-*/Z$;>AP\F"%:`I```DLUGHSV_;EA:B
-M?/&Q.=&`EWX1GFK=)9J*1+Y)%E(U>BDI```<``!`!':>PJ#7A="O%^[]:$.2
-M3XN>)Z=N````'```0`6[Y:L.N!#:0U&L]I!"'$@BB`RII%$3MT8,_0D`7```
-M`%P````"````10``6(+$``!`$0``P*@!`<"H`0(!]`'T`$0&*<T@A>_>P\O!
-M```````````I("(@`````````#P````@``!`!@````HM?./%FC;MG347UNPY
-MA'FA.&T!*U$3MT:C#`H`N`$``+@!```"````10`!M(+%``!`$0``P*@!`<"H
-M`0(!]`'T`:`'A<T@A>_>P\O!```````````I("((`````````9@A```@``!`
-M!@````HM?./%FC;MG347UNPYA'FA.&T!*R(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``"H\/8;":RE/C0W.)1"NPT0I0\&"G;<%$74;>
-MGNG*7P8#-X0E2*KF/+C9<BE<,D_9=/E!,$7[%-H5GF7\?J\0#JR12"*(I0-)
-M'.Z`Z&0BR^9FHU'U@9;Y!9):O]C^/NT^.%.VN9!'PI4>G_4*%?4";=04[1DU
-M-*/Z$;>AP\F"%:`I```DLUGHSV_;EA:B?/&Q.=&`EWX1GFK=)9J*1+Y)%E(U
-M>BDI```<``!`!':>PJ#7A="O%^[]:$.23XN>)Z=N````'```0`6[Y:L.N!#:
-M0U&L]I!"'$@BB`RII%$3MT:&,0H`4`$``%`!```"````10`!3(+&``!`$0``
-MP*@!`<"H`0(!]`'T`3@''<T@A>_>P\O!4TXMCC(/D0<A("(@`````````3`B
-M```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0`
-M``(H``"(``(``&_AFML]AV"V_L,;S_GI-5(*^H/7[:H0.^]TP&I,\JX"^$J5
-M6:TSJ33T;+@>::/O2C_.OJ/C!`52L*10V;4.3HRK)+X1K$8FP?:0T5VHM%22
-M^%'7S1#!]X>WSTDGZ+"X8SPTMMFTL'KBC1R60P^22N1/1UP2I-[`9_5N'S'8
-MMN%P*0``))%)MM$^_AUMQLZJ2(.]<Q:Y9+%KT&[^!^ZI,"/GI2+9*0``'```
-M0`3$P\GGG^GJK/E8V1TSH!\-;^7K&P```!P``$`%Y"CDD[;VF#L[JRZ,48S#
-MZ8VH(%-1$[=&`U\*``P!```,`0```@```$4``0B"QP``0!$``,"H`0'`J`$"
-M`?0!]`#T!]G-((7OWL/+P5-.+8XR#Y$'+B`C"`````$```#L(P``T'5K)XIB
-M2O-!=#4\RR1^5!Y;LLM?"J-?*NU8)90`8O4@MZ@`F3!]W6Y1'M\'IL"-%?#S
-M75C'P0!1B_(:OPXPU4H"MTA\1P4TWJ(H]WWVY!A"8_VJQ%;ZD%U]=LM%W7%E
-MM,VP.RM:`I01+13*7FK'G&BD"+AG$M>K'NGP+]1GC+[[Q_48_IVW(FX.S^Z"
-M6S@1O]YC7*WK@<=O%YC"RP'>#QFZ"SQ,#%N*.T=&[LE3$-S1A[%*%1KP:PSD
-M8$D.RO\DN0>&+*Z$2P?:RC?25%$3MT;S=PH`O````+P````"````10``N(+(
-M``!`$0``P*@!`<"H`0(!]`'T`*0&B<T@A>_>P\O!4TXMCC(/D0<N(",@````
-M`0```)PD``"`!7?@"0]X6$&U(>:VB>0!!3F)KH46B-?[%MZ'4#Z^I31$S\WJ
-MKNY40"$O1TSA.E"6:SX#1//AF#B7>3GH`=N*9[31`B,<WWW+GG9`-8O<'[B^
-MF5I2UH\%>%\@_D[IZ'N=SC4^;0,,V,_(@+K>T4N;)L;K."9SO9VKF9$*IE$3
-MMT8YE@H`'`$``!P!```"````10`!&(+)``!`$0``P*@!`<"H`0(!]`'T`00'
-MZ<T@A>_>P\O!4TXMCC(/D0<N("0(`````@```/PA``#@QC@:)7%R*;].'F".
-M^KR*X^RCZHU=32QSUW"9+?=\]#GK/=Y-C]>Y:(BJ3%UX'KK$M>14XC*R'><"
-MR),%R]I1^BG^%<#:RCZQM\D_08JCQ_Y$"3[`E=UXXCU5H`<):W0Z$]);TJMA
-MT`"5;,-[`/POSZ""]Z6;(Q\QI8O4?\7[X^RR&K1MY&3^WJQ7U\^,02*7@]@)
-M\G@YG&(+.[8A=8OOUE1](%7:A][-,$H%KR>S[S&_+&\^F.'&$";]%[H45I*B
-M$H%/'#G]6JFS;C64@\FKVDQO&&*[89>)2W8HNE$3MT8IH0H`_````/P````"
-M````10``^(+*``!`$0``P*@!`<"H`0(!]`'T`.0&R<T@A>_>P\O!4TXMCC(/
-MD0<N("0(`````P```-PA``#`_X$NE!O:##(Z@X8^-X-@_V\@0.(E*:I!=!Q4
-M9^`"HGX(0<SF:5ARD$9=ZN/J)?EC48''N?Q6$62\+61Q>O+8]\;*RAV&6:*<
-MI>4TJD+XSS6D`C]ROE))-S>92)RD^K-#$1S&7FFM_$RKA8SG^Y<V;6/%:8HB
-MQ(4!(&`159&O<Y-I`667ONS-[%J_H-O$2/.2WR^YCLK2Y^E3+#@A:;S2@6.;
-MKKA^B:XRUB9P0!$!3AI[6`Y<J4*1\6B'[5)1$[=&.*P*`&P```!L`````@``
-M`$4``&B"RP``0!$``,"H`0'`J`$"`?0!]`!4!CG-((7OWL/+P5-.+8XR#Y$'
-M+B`D(`````(```!,*0``,%A$4S]\Z=IS;ZW%OQ[CXUXZ^[1'%R.7@Z,7>]L%
-MU#;8@NQGW?I5A]F43??041.W1L3'"@!L````;`````(```!%``!H@LP``$`1
-M``#`J`$!P*@!`@'T`?0`5`8YS2"%[][#R\%33BV.,@^1!RX@)"`````#````
-M3"D``#"SCMT_LQ"$9"D=)(J;G#&=!P()_DL<*U,1GF!BQ:=9F8C\1Z>X\#RS
-MX)\,\%$3MT;1X@H`/`$``#P!```"````10`!.(+-``!`$0``P*@!`<"H`0(!
-M]`'T`20'"<T@A>_>P\O!4TXMCC(/D0<N("0(````!````1PA``$`9PC]W53?
-M%:HC)OIX^".E&>F`36/T\#-AJA1@T'WC:HWWSG]<Q7=FN167B%L(,.Q5^O]F
-MML]&%[$ZR:"D=X)@AAUTV$VBD=>^2J\=`OZV\;5VJ#;<QJ$:6O4P.`]BOD=+
-M2KY9Y\C#]R@_9=]O(D!?/1-T*C2&%-DD4(?_R$.$)FVCN"2G[DB=OXLULBKY
-M'A["'KTSM"L`_0,^AU9=I^.</:ISZ9EZ#/3)DYT6=#>!X)5*@=9W.>D?A_#3
-M2K4CCT/&/?/YYS-U#`KXK=HAHVH-':W0M2'-ZT=["!I>!BTE'9H5SS9EVC./
-MS.8(S@``?;C#X.ED7H@E9@Q9>MKY41.W1D[N"@`<`0``'`$```(```!%``$8
-M@LX``$`1``#`J`$!P*@!`@'T`?0!!`?IS2"%[][#R\%33BV.,@^1!RX@)`@`
-M```%````_"$``.",XJURN]:2@U4G%8VJ$"OQ$(P;?\BJYVW57IG)4-.V98HP
-MCE[,=CK6-K8`U$Q%I/"@3?"M[A-$\NT@HO4;JRN>C#(LP#^$!3-9Y4D\YJ["
-MV]#6V\GNCAEYX5F4L#\UZ"-<W$XBUB^(6U:2:'J0EY5&:0B/H-9YDBPP1J]]
-M)TSF^9#/<04^;,$VX/;SHF/D=GI#]P!>-B$DP*8-8OQQZ@J;GIN[^@OKG>IA
-M_@>W=HYWQ9R"IO2=W6W(0DO'UAN5D5X+#)$(Z,6WYDNRCB^9VM*M]]VYW2'L
-M0BM,/7V!41.W1F[^"@#L````[`````(```!%``#H@L\``$`1``#`J`$!P*@!
-M`@'T`?0`U`:YS2"%[][#R\%33BV.,@^1!RX@)"`````$````S"$``+"@>N$S
-MI\1JSP<?0DGM7TQ#\:!>EIH^&XZ@X9AU0'X(K=A-X^C@D4NM(VQ`L@*35_K"
-M/YET1>PGNW#'#DHIE*92!P7)+=0:29(AS31K6E2[GL2A+0P8&QE?%J'>4)9L
-M>`@/R]]-`<&3AS.)$RCU26^(NB[Q7J`+!.E.::QBFCJ"S$(M8,8>D>$)93*^
-MK"2LB_^>=/-KJDF)-"703M)OO+`$=2\<MZWE21^H]LY!41.W1JX@"P#L````
-M[`````(```!%``#H@M```$`1``#`J`$!P*@!`@'T`?0`U`:YS2"%[][#R\%3
-M3BV.,@^1!RX@)"`````%````S"$``+#B+$@Q5RW)U:F%*S6.L%/)8B4V559+
-MA>PNV\Y2#4PE_<?=Q1,?1?YA76\M>92NB9DG6P`O#>8MN8._W;/2.,<DG'^N
-MO7Y4NNO6P_QXRR`,=HOZ^T_FN6<UZI?\S3HCV62ZFTM)?)V:M`#PBL&'JI--
-MTS+ZF>H:2D1*+V,M);+\_;P5?R0G3XVN3&Z&?@0KW^*9F6$3IQM&Y-C#]):I
-MZR,]G+#[',&`6AW=-&9N41.W1DL]"P`\`0``/`$```(```!%``$X@M$``$`1
-M``#`J`$!P*@!`@'T`?0!)`<)S2"%[][#R\%33BV.,@^1!RX@)`@````&```!
-M'"$``0#@TRQ':<!W7@/FQG,[)4)&X=P^6>,,NLWUCJP?L19(T.=J^TV+[`!^
-M@96<M!?IPW]Z!WB!8SJA!.@GNVQM!=)\,H#0%;4Q''DUU:H*$83=R423?GZ/
-MT9CJRUAJL(1O>7=6*307`[7)FSWK%I.A:[75"6AHI]=*A'''`O3!WY%Y8BBD
-M;U6-B=Q1;"DF0YQ;)^F+$PT+`B^9SO%&O6!\#*>/TQONNI9_`-%!#&1]R*7A
-M<9S>B=!7@YV`B&.^IN;FAD%2@(TD8I?$D-(N`I"(<K+-@T,-\P(JTE,;+C83
-MR_O"$@QJL3_&Z<##O&19)!V^.!_^SRZY.-N1\\RT(PI1$[=&`4D+`!P!```<
-M`0```@```$4``1B"T@``0!$``,"H`0'`J`$"`?0!]`$$!^G-((7OWL/+P5-.
-M+8XR#Y$'+B`D"`````<```#\(0``X,54'@GA^I+$*UR,X<-UZQ!^Z'8[1EP3
-M:"9.WJ'3UTX42=J@1$XV7S]:"'\A]S]:F[ZT^%AE?;:*YUI]L]B!Y=_["0*S
-M>_W[^=-')$S"UX+!VAIUQ!Q&1SV<=XP:5H\#%C/0",^`^+>>>G[5410<E&;$
-M@2'^+Z$$-;!`#'G(K>AJ5Y%:&X1.\,5RI]Z2&;4<>7PD"?3R&`W;!N_"8'+.
-MH&(+Y&ST9E*^+5CR2[H(FPQG1[F7!C$PAQT';37`KH8^[@\Q\UH]R4P^M(RM
-MT/TDBR,>BZ`:,H2A50+G8<U1$[=&RU@+`.P```#L`````@```$4``.B"TP``
-M0!$``,"H`0'`J`$"`?0!]`#4!KG-((7OWL/+P5-.+8XR#Y$'+B`D(`````8`
-M``#,(0``L+HZ+ZW0S;'\L.8]H25W6U,R>JP#"(2]R@50GZ5&=$)!!61`G)VO
-M4V0*V7RNX,F'8`YRK+6RNM-4<7#_`>/CRUO&HYU)!>/QKBTF:10_V7ZJO0D%
-MY1W`Z'P11\U2R\LA5;_:`Q]I,%'@:6O%MB#D$1V]+-$_;^^'\:XF"K:B@*38
-M4>0TZ]'RLZ=Q\Y71HJ&ZU$'^9Y[-K1*/>BB42U'38"C?I;]NF<C6%"]P$J51
-M$[=&L7D+`.P```#L`````@```$4``.B"U```0!$``,"H`0'`J`$"`?0!]`#4
-M!KG-((7OWL/+P5-.+8XR#Y$'+B`D(`````<```#,(0``L,!?3R(66%7K7RTP
-M=SX3II7:,I<P!<YF:^I1+>Z)[0[L%U"'[W2K\.^-!<V/0@`8_H?)PFW=%$Y&
-MV-7V5\QH?9?F*'"1BMHW#Q0\A*;P6_#+JIV\O<5_7?1&2LNK9[K$6=SWGF$Q
-M1FI5V_$5WAU'E?8Q:<$METVZT_>$D!EV2ZIZY-LB'.!75-GB;EO$>*!Y_+%E
-MQ9QS\<$ZSV]SIYP>B-]#K05BC`*'D_0,8#)1$[=&U9\+`(P!``",`0```@``
-M`$4``8B"U0``0!$``,"H`0'`J`$"`?0!]`%T!UG-((7OWL/+P5-.+8XR#Y$'
-M+B`D"`````@```%L(0`!4);_6V=-K<)?YN(RP%3[Q/[O'/FL9XGK.O-OA[/P
-M#Q#^TSY8Z5X([+$DJM4$49&HJJS\HL:B?5K+0.!04=%4@]Y')+RS@AHD\P*J
-M93,`?8&M9NHCY.%V/-_MPT.G,(HM*G?QFO(8F85WZT&`QT$R8$,[JKD^IDI;
-MQ^;A*:*#A([@'SRR*LO,KDA4&C%_%:K$[9L]GMBZX5^3B8,\-F3DH9D<-\6.
-M;JIE?3_W7MDZ#R<X5?VJ1[MZNJ.2<*N=N.[04W\/\Z,^-R_WGOSM4^#6]2)S
-MA6E81X#5N&=\"#V\)5!3Z/\I+1[K!P^Y1JFE;\$=RGP^=7FI'?!>YV@&^.L.
-M+78WV-;PY\B'-R,A=[Y:/ZE>N7:-'R)QS+V:'.ZEB727Q3T'C%##5BZ^VJ1S
-M$#_)MHX-.^/U:_YF.VQ,Z[!=`"3`07@_B4@W48.<T\E'41.W1EG5"P!<`0``
-M7`$```(```!%``%8@M8``$`1``#`J`$!P*@!`@'T`?0!1`<IS2"%[][#R\%3
-M3BV.,@^1!RX@)"`````(```!/"$``2`H'`DGK*-Q?.$@H:F2[;&D6^S6_(T.
-M.]2#1MPUQ068P?^3]5HP6I1\[3795E=T48S1OG.(A&G#D")+/NSW,-7\[-Y,
-MI--.E%+W@_1H8G^,V-_P2_!3['=E/<WFG:B(N1Q%2$ER/9](?1`(+K(0K/B^
-MEH\DHC=SSE5<FT>JN6>:5!A%(39:0CC-3UJ\F>5MG`P6Q>1T35JRM`[R/GK/
-M1S/9&8!:LK<FV*9+G!ONP>B^E+!9@?6.IHF/1O%U0I^P('0CEE);#>ZM2I%%
-MJ7B17SR$KBBC8&EMS4FW[_0[K.<_\_.-7C9K49``(,ABE597[YO1,Z%:FJ8G
-M/'5]JHQ32KP3B6U\.==SOGM?922JJ19TVR@V&A%WV8W'R`\I/E$3MT9Y^PL`
-M?````'P````"````10``>(+7``!`$0``P*@!`<"H`0(!]`'T`&0&23'?V$L2
-M,&B2FID7&%AJXELN("4(`````````%PJ``!`]@:5I5+UT(Q=394^PAY/2U%<
-M1.$"/,!XIQ:CM.O=:)[\1D8D./O4O#IV:-/-87BR#&,&5]1LLA)DV5?Z41.W
-M1KT&#`!L````;`````(```!%``!H@M@``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-M,=_82Q(P:)*:F1<86&KB6RX@)2``````````3````##^.=NMK!=.E*M3^KW_
-MZY_X6CS*"_@H6,B-,)+NCATDAA4O>J8GI&!>8/(FQE$3MT9D%0P`;````&P`
-M```"````10``:(+9``!`$0``P*@!`<"H`0(!]`'T`%0&.3'?V$L2,&B2FID7
-M&%AJXELN("4(`````0```$PJ```PXL4R\H8S(\3?/.Z[@?$)4L?03#.'75L[
-M`Y8@-1ZKQ2@(5&RU8=>-*9+A)J51$[=&Y"(,`&P```!L`````@```$4``&B"
-MV@``0!$``,"H`0'`J`$"`?0!]`!4!CDQW]A+$C!HDIJ9%QA8:N);+B`E(```
-M``$```!,````,(L@H9!_(_M`4/+D9F091[&/OO9\;R'EG;QD`0B>($M^[$+=
-M7)82O'MZ:;/S41.W1EL?#0"8`0``F`$```(```!%``&4@ML``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E9%QOF$I+]3(``````````"$@(@@````````!>"(``'@`
-M``!T`0$`#`,$``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``VI]2=2]EK$)0)@PR
-M!&7J2/I`JQS<]HP_4+'IG^0I3$6FQBR#$OTP!B3=QR+;IP1K^/(R,JDJI)&R
-M@73.T-?MTEM%]4S!1+T=K\.B3%B3\7ZO"+"(T4N_\2Z5"D"L_QJY+B]-^3E2
-MK8O.D@3Z5MTGOE,7`;;,0T'_`R7KL+=J>LHI```D68((PQ((`T`#/.O-=CX@
-M.^_;?U1Z57A4=_]92OX+=W<I```<``!`!%H4]VL-ET4--I:A9^BUJ>/:I6.T
-M````'```0`5F&3*C%UL^@W^T-0'GE7QE@P(K^E$3MT9A+@T`7````%P````"
-M````10``6(+<``!`$0``P*@!`<"H`0(!]`'T`$0&*61<;YA*2_4R````````
-M```I("(@`````````#P````@``!`!@````J04GWB<*P2,3F#NIJI?*[W'C08
-M>U$3MT;V/0T`N`$``+@!```"````10`!M(+=``!`$0``P*@!`<"H`0(!]`'T
-M`:`'A61<;YA*2_4R```````````I("((`````````9@A```@``!`!@````J0
-M4GWB<*P2,3F#NIJI?*[W'C08>R(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``VI]2=2]EK$)0)@PR!&7J2/I`JQS<]HP_4+'IG^0I3$6F
-MQBR#$OTP!B3=QR+;IP1K^/(R,JDJI)&R@73.T-?MTEM%]4S!1+T=K\.B3%B3
-M\7ZO"+"(T4N_\2Z5"D"L_QJY+B]-^3E2K8O.D@3Z5MTGOE,7`;;,0T'_`R7K
-ML+=J>LHI```D68((PQ((`T`#/.O-=CX@.^_;?U1Z57A4=_]92OX+=W<I```<
-M``!`!%H4]VL-ET4--I:A9^BUJ>/:I6.T````'```0`5F&3*C%UL^@W^T-0'G
-ME7QE@P(K^E$3MT8X8@T`4`$``%`!```"````10`!3(+>``!`$0``P*@!`<"H
-M`0(!]`'T`3@''61<;YA*2_4R3V-IN&\0-+\A("(@`````````3`B```P````
-M+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(
-M``(``.R(Q<P7C`@Y\Z'^[1C2L,3H.@9RJ0,9E<8(5W+72_K"G]2<)I@TM>$1
-M1$!A,LK2%P+J&7=))AV?W*X5NF5>GK^RR-,:&^L8-2^Y^.+Z+=$HW*LM:^^T
-MFIGP#H6J3QFB,Z.G7FH=J;H98*_JU`&^/=M1`0F_#?7OL!5.5/B-RW`.*0``
-M)+,C>J>(!FBG.7/N[L6OH'`Q;E80J!;G<V-_?[HZ;99X*0``'```0`0LJQK_
-MA#8(&!$W1A"/;IK;&[-/$P```!P``$`%P*8HP$8O"P0I-$WK^HSVF<EY02M1
-M$[=&X(X-``P!```,`0```@```$4``0B"WP``0!$``,"H`0'`J`$"`?0!]`#T
-M!]ED7&^82DOU,D]C:;AO$#2_+B`C"`````$```#L(P``T/<,#EAM^-GXOW8%
-M9/<2S3F$48S#"UUZ"-ZE[,1J<_)3`+CQ>^KJ5YG`PN\Y*M)S]@2#U,?@DAD[
-M]E7X;*?]_['MO#]LK;+?=#1VTBTB$*!RM(!4AQS>`^1.G<!Z%!6^%B=GIT1W
-M]1X:1P>#F3BD<7$J+L4G8L\4M[%.6N[+<:UY4YC)],OL+W4P@H^>YMGBJ>+M
-M&>3J^XCF'<BT"NE,\PY&2'G]YL-#!FR)?I.-^\ALA&^$6_>.F'PW#GBTFZ\$
-MNOG*Y@[>X-EAG/WTEU$3MT8MJ`T`O````+P````"````10``N(+@``!`$0``
-MP*@!`<"H`0(!]`'T`*0&B61<;YA*2_4R3V-IN&\0-+\N(",@`````0```)PD
-M``"`:*GX6SG27[T/!UG!3HB+3>6M?+V7),B'(7@AKRZJ4\6FE#1DC.J'849D
-M6`=<>;NL8NI41(3Z3-U%RP;[OG6Y`DJ_\'+ROE%ML>#97_V\;"`KG7X56`_G
-M>Z^31R)7TES'&.#FA[];%L^*6Q2DNP6FP11:I"7H[*1C:M[2X%$3MT86QPT`
-M'`$``!P!```"````10`!&(+A``!`$0``P*@!`<"H`0(!]`'T`00'Z61<;YA*
-M2_4R3V-IN&\0-+\N("0(`````@```/PA``#@5;D4;RP^BMCDPZXJ/NW5RI`K
-M/W[6,_@SB,?:OHI034;X-!Y*37UV/ZE?Q@5]@`J^C6*[W7I/VY<QMP+\5$8N
-MR;OM.$(G88.\XU5>.0MN@Z?]SK0$60O5M)H`4`_77(<$;/W&$[H9<*7LK'Y;
-MG/\5S3V2208R:_2`>B"4895MKY-V?+D&7W?[&=TV.]]&$H2U7;^=TH(8*A3Q
-M<_\I%=09$F51]U_**2W:H8!BE>>GF.23:R*OJ#1\5M`7-/^@K#C&AA]?6`$9
-MK763Y]2?1?GE&C'.\Z>ZS5^/+OCX0E$3MT9FT@T`_````/P````"````10``
-M^(+B``!`$0``P*@!`<"H`0(!]`'T`.0&R61<;YA*2_4R3V-IN&\0-+\N("0(
-M`````P```-PA``#`,]P==R6Q)X<;^9];4,J%DKLQMF2#W/8&SJSHC"L;<M_%
-M/1HN^F9D)[5PQ-*+*V/I,[*J\PCH]?]FWAKI@\ATFOJ_3@0%A/'"^OUP]X2P
-MG`QN@+N>&LE\-+XB+.!Q^`L$G?/N@'?"1`:("5:>;<QHQ4W&!EGM16OK4:W,
-M^<$E]'MV/VB@;I6;$&+(%NJ%NV<\44%68FK?-HO4M2M)SMAD"*-WV:`IQ[<P
-M9:Z]'K-<((G?_P6EKXK#,H.EF^51$[=&PMT-`&P```!L`````@```$4``&B"
-MXP``0!$``,"H`0'`J`$"`?0!]`!4!CED7&^82DOU,D]C:;AO$#2_+B`D(```
-M``(```!,*0``,&\58#.M#MM"IH<!5^$=]BTWV*H#^@N)Z4@F["O8D8/R+2IO
-MZ+#54EC^0KFP41.W1H_X#0!L````;`````(```!%``!H@N0``$`1``#`J`$!
-MP*@!`@'T`?0`5`8Y9%QOF$I+]3)/8VFX;Q`TORX@)"`````#````3"D``#`D
-M8ZLN$WTV<R!7:/5RXI"DW7V3<'ZQ+`\LOF1XYVM6Z_178'U/8!(G@<_.$5$3
-MMT:?$PX`/`$``#P!```"````10`!.(+E``!`$0``P*@!`<"H`0(!]`'T`20'
-M"61<;YA*2_4R3V-IN&\0-+\N("0(````!````1PA``$`J>(GQ'`@4$%X_,[Q
-MZ%W'5"9`RZFXCEYLIW]#G3DH-%`?DH[655@YB<<;\7GDHUUB<2C#/5>9@!0C
-M]?_J@1R5,$"`6^%Y;IR.3\!)_@5"!/&OL5G%'D9,DARU>6SPZNCBB_KH)@@\
-M^*;>I$+ECP(@,4NRU<`#%[;+?QBJ9""M45#IS\3M68F+A]3`I5OQ3$@*U#/7
-MO1-,C]X:PZR_?=JDXVZM7=/\8%I4V"<7IL(2P^BSZ-J62C,R&"G@]-LT3'P)
-M2O*L!ON;)UP`\23=W>2Z?Z%&!G0`YM0I8&OC%WR0?/*<]]Y7'Y.WVQJ-PR2A
-M^O7?-GT'7BRDO4'$Z>NW41.W1ML>#@`<`0``'`$```(```!%``$8@N8``$`1
-M``#`J`$!P*@!`@'T`?0!!`?I9%QOF$I+]3)/8VFX;Q`TORX@)`@````%````
-M_"$``."@SD3)8Y)8=X-O$I>N71DL^W5':KV`ZTZP^RK*8U.0`VJ""(96KNXL
-MSVNJKA%E)I,WZU)O_]$6R=M@/;\(Z0)RK`$?_'HR7R3@D>VC'=_YWQ-98.!"
-M6;:Q4PW.#+JFMKNPG.3-Z<LAI_'S>/O.^]QHL$B>M42.CF:V[-/S8+2C%[.I
-M6>)=2$;^Y=V=(1!Y#-C4;GC,E1+91!4',RDZ<A0K&X&1;1`-"(YCF,[@Y9@,
-M!&"D>=>C)P4$&HE6_U^$!%#=&(&F%B[^R=MH-"=R/GS7,5C>V:N#$GP+Q@4"
-M41.W1K,N#@#L````[`````(```!%``#H@N<``$`1``#`J`$!P*@!`@'T`?0`
-MU`:Y9%QOF$I+]3)/8VFX;Q`TORX@)"`````$````S"$``+#`1J$^VN/N*'A)
-M-%TSL8Q!3"RVVJ7J!4/ZC++,E^FQB/DL90^P76UE?L=9J0F('H_3&4CU^X47
-M#[17`-<]@D!5=ZHW.75`HV^IQ`UX>MUI^S=6.E,JRW+W'B!4KWVQ#6OL3E3(
-M]&"-M<$`H846<VWS-(,*"J^_AZAE!U/Y>=&I0N478MI2M4,41I'30)F/\YOD
-M*GTL30XP,E7@I:4*D.E&(WBZ6J(OE8-8DZ:<41.W1KQ1#@#L````[`````(`
-M``!%``#H@N@``$`1``#`J`$!P*@!`@'T`?0`U`:Y9%QOF$I+]3)/8VFX;Q`T
-MORX@)"`````%````S"$``+!IVCHU$@JJ*#17U1>2S0-]R-^_>,]W+Z=M``J\
-M<O<P`&V8V$I44TJ.O-IG(UNJ%JFP!J*;RG1/61K18WTGVG#Y@TQM@\+K!I^>
-M1&N1`29<US3VE.R#N\*N7CJ7*IS26HK!_YBM&0@-K&B6"I8#@.23;/QE2G)[
-M!9GC>9B),>4(N9>5=6$*,N"-C]VFH7R5XW)Q_)$#;G,^F_#K#JM[Z:1G3?-4
-M2$\,`LK5?8!N41.W1G1O#@`\`0``/`$```(```!%``$X@ND``$`1``#`J`$!
-MP*@!`@'T`?0!)`<)9%QOF$I+]3)/8VFX;Q`TORX@)`@````&```!'"$``0`&
-M.SVR<AQ+U[GTK]LGP@/*<KOHTMI:,+I_;NAC]9IPW(M+DP'E7\NR/-Y%A@T'
-M)%G1`I'E*PS(LA;@K1$/I%QRP?:IC>>M;T6;/X/<K+]R$=B9Y-^284L0MY8[
-MWWW]!205[#GV**DI!:,ZU?0K&7C*)1<\C9-ZDP"&+C0&TH*&F:VF$B<:;^?J
-M?7*_?%9:EOJ`;KZVOYQG=\,!!'`X(M!TM=**R`.9A\1/H05FTPT":8%`S7X5
-ML!A!>#*$7,W,8:6>`Y*E>3PMK`AM^<"E`46_]^@8UY/2*UZT50!:,[I+#':Y
-MT\61\P?#7NCF)487ZG6_EK9*I1E86>N;^@%1$[=&5GL.`!P!```<`0```@``
-M`$4``1B"Z@``0!$``,"H`0'`J`$"`?0!]`$$!^ED7&^82DOU,D]C:;AO$#2_
-M+B`D"`````<```#\(0``X"3;]%*S'U)K8RE23<T`>9#>I'30#BO1GUS>P0ZP
-M;J&C/@N)'.5QDD.SF@BY';$TQ%<,/4;6%21RU1M/_R#PY="B_+EV9SO-),HU
-MR6Q".7BG,SI2%NPH33`OU]L3<"IH.$*<)%XN^H#_G`1J7+./E.N,U0_0\7T=
-MV'H[&.?J\'D:TIJ(0"$]G"5NNZ()#YE1R94H@!>UW[.`W%Q)NJ/<L)/(BG04
-MY(4\:%T&TRD(ZU4V^3<N#F%?IP_#EDQ5MK;"R(.D(9(OMA=)7.@D$0"GVL+U
-MGHV8BKW;2@;U==-1$[=&TXH.`.P```#L`````@```$4``.B"ZP``0!$``,"H
-M`0'`J`$"`?0!]`#4!KED7&^82DOU,D]C:;AO$#2_+B`D(`````8```#,(0``
-ML!PRY74`]_B<:T`A.?5FNXVN2"X2'RUUGCS-,9"=F?J];QI0NT3F?6&=L>1&
-M^<QW/$E,EB%Y4PW\9$SC#$^SD;0JCO44];`8<8<9@'&9PERI'G@8(9>!;(RL
-MJ7@X2\2[I,/<G@[OH+Z%$@Q,X32J?"R\$_<<H6B;YY!1J)KF>A#/#H0M;]3`
-M?B*0I,O^_*Q]D*_]X>T$/SL;>M,S(VU)S,22@M%O\F3WF1$,=FI1$[=&8:T.
-M`.P```#L`````@```$4``.B"[0``0!$``,"H`0'`J`$"`?0!]`#4!KED7&^8
-M2DOU,D]C:;AO$#2_+B`D(`````<```#,(0``L'>6+=Z/XHL"+H-09*KE3L_?
-M`=S>"T#)C[5TR;?D><2?<G)YR=^1<D@]45:M648PLG9'3@XU8AGC/L-C:D:-
-M'MU1L9:`&RPXJ#`HYQ6]_J[`T:>AP&F@<".$VI6&7C$Q'=!0+>RIEM-LT#\*
-M\*90CSBFEQTQ&M>$>U!3?1$=2L/&`TL<M6^OLE@Z%9Z4B7G2<'=<C=&`+0\L
-M#I:^D_`-PV5H&>XL\@<:UGKM^M)1$[=&T=,.`(P!``",`0```@```$4``8B"
-M[@``0!$``,"H`0'`J`$"`?0!]`%T!UED7&^82DOU,D]C:;AO$#2_+B`D"```
-M``@```%L(0`!4#H#YV'BD+$":"L;74O.C04/<EP%R%(MI+-N3P#-[E$IT4.Z
-M"-(H*)7DZ2*4'/*X7Y=XE=+^N"V@,^?!RC;04/T>K^GF(\*H=X[>YWH[OBR.
-M10X##N7R8$QR/1=*[#H`U8H?D\&M5[@>Y!N.TI-ENP"V+\3X)>(#$UF:5\^F
-MQG*#?!-L#1='ENE()WY0-^*&Y7*A5;7DO>O\5S3C%>DGRI>EW?1]9E5(O&H'
-M'<C8('(S#C>CK&J_!\?43C%(<)N*<\#"+2"-0/CWJ^>KMT0`V0YY$^442Y+L
-M00O-R60,`+UD:KR-^MA-(3%XQA-!;[O<V=AC&#@3>N<`UY``+=?,(%"N":3^
-MCBT/_AME&Z=B4EF?R^I7/!>CZT"^JF,<(.0:MD8UX`UY!RXH$*G.8$,O^!EW
-MD=2@XABK6;?.W=W&>%J0OWZK3-/5)$74*3`W41.W1CX)#P!<`0``7`$```(`
-M``!%``%8@N\``$`1``#`J`$!P*@!`@'T`?0!1`<I9%QOF$I+]3)/8VFX;Q`T
-MORX@)"`````(```!/"$``2!;H+=;OKO-&AHKVIN`?BD*&B9TV"TZ^J^^T8R[
-M9<"75O<9@(S=G8#T+5LR@#/THZ"&?"LSF1>S']E]RD'2.E*_$']Q]6=5[!Q1
-M='U&_S)`KA0T=`>_\A`GE$YD/N7<JR55L34QI-(V1NFP6C_Z5KN>0:=RYN>(
-M=%YG5`S-3>.VUA:KW6`*W2S&/CEK#6%+!A2#%RSC-%\;P'3+?4><'NMPLCO4
-M+YN*TAR6X`=\UNMK$1/?#'_!*.,HL[T95*KM>B[:>F\W[W?/2?=3L+1ZH%\A
-M2T]^PD?>.)/A;'3SJ1<-D*N]Q'BA,%(MP)3U>W*10\PY;2-F,Y=])T!U_VX#
-M#U<P?YSL%+D?K[%`1V`1K<:,VB*)`\%A790U37)4&%$3MT;/,0\`?````'P`
-M```"````10``>(+P``!`$0``P*@!`<"H`0(!]`'T`&0&227ZG]KRFGF#,D++
-M"HMMDW,N("4(`````````%PJ``!`2I2A>]?OIAAAN(PP0#4;#.A@0ID7]5!$
-MO/G7J"8`28BR?`%DPM@%J,L$KBH7F43>Z4_WB'"]WT:UY[(`41.W1D(_#P!L
-M````;`````(```!%``!H@O,``$`1``#`J`$!P*@!`@'T`?0`5`8Y)?J?VO*:
-M>8,R0LL*BVV3<RX@)2``````````3````#!.23MJG7]B241[Y<Z5Z$8@/.JW
-M8+AKF_=:^ULC<AE4?N?X(?KW4<-F4+0!7E(3MT;."P``;````&P````"````
-M10``:(+T``!`$0``P*@!`<"H`0(!]`'T`%0&.27ZG]KRFGF#,D++"HMMDW,N
-M("4(`````0```$PJ```PL%[,OQASGWCA>#+W98DB+@W7J_VZ,1](7@Q^'E1E
-M+*)#I9$UDK1M@3HIV^12$[=&1!D``&P```!L`````@```$4``&B"]0``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CDE^I_:\IIY@S)"RPJ+;9-S+B`E(`````$```!,
-M````,(^R0Q6DN"^\!^#\QZ&W"1"-*W>`I^7<3))SK^[8]#03,+_4,6[.E4!)
-M:*CJ4A.W1C$7`0"8`0``F`$```(```!%``&4@O8``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E1FR2NJ.5`FD``````````"$@(@@````````!>"(``'@```!T`0$`
-M#`,'``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``@`V;)@21V?C]26``Z.RD+5BI
-M\R#PV<ES>M5:H)(7PZ?1@`,40"+MYS66E$DY#I"EZQUQ3D$"7=LZ!('03N$+
-M.<VLH0-\,%S1?[SKBCS3^"U$+:QO'R@6\\Q4ZW)750-_U-9.CHCPB;@+F]V?
-M!85R@"JDQ)#W(T6_$"[IQ'/UE`PI```D6OH_L5!&:9S(\PPQ=DLQ2>&NA-1E
-M(!))/6^Y\BA9\=DI```<``!`!&'C3Q>28F&V[]ST^L0VS;=3,(WV````'```
-M0`5\%2S2-4!.(*N?F#(1KVY"X-AKME(3MT8Q)P$`7````%P````"````10``
-M6(+W``!`$0``P*@!`<"H`0(!]`'T`$0&*49LDKJCE0)I```````````I("(@
-M`````````#P````@``!`!@````J8)2K-]9N#`9C4Y?ADZ0=QQ=(+FE(3MT;#
-M-@$`N`$``+@!```"````10`!M(+X``!`$0``P*@!`<"H`0(!]`'T`:`'A49L
-MDKJCE0)I```````````I("((`````````9@A```@``!`!@````J8)2K-]9N#
-M`9C4Y?ADZ0=QQ=(+FB(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``@`V;)@21V?C]26``Z.RD+5BI\R#PV<ES>M5:H)(7PZ?1@`,40"+M
-MYS66E$DY#I"EZQUQ3D$"7=LZ!('03N$+.<VLH0-\,%S1?[SKBCS3^"U$+:QO
-M'R@6\\Q4ZW)750-_U-9.CHCPB;@+F]V?!85R@"JDQ)#W(T6_$"[IQ'/UE`PI
-M```D6OH_L5!&:9S(\PPQ=DLQ2>&NA-1E(!))/6^Y\BA9\=DI```<``!`!&'C
-M3Q>28F&V[]ST^L0VS;=3,(WV````'```0`5\%2S2-4!.(*N?F#(1KVY"X-AK
-MME(3MT:D6P$`4`$``%`!```"````10`!3(+Y``!`$0``P*@!`<"H`0(!]`'T
-M`3@''49LDKJCE0)IAK@;?JI(\!8A("(@`````````3`B```P````+`$!``0#
-M```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``(YL
-M(P"<4AS\Z)43#5JYCV6#*BE2Q<'G9A\A]5<25ZLJ''I[7%C*FP*)-WZXY(N-
-MPX?&&J=2B_R(1C"^;-I7DYL"E","Q:SJ$G,PF>@8[%%BRE"*)\RT*KOU9*+K
-MAY]1"7!:_R'IKW[+N.[AK,G%,3H("1E5!MQ24`4?$@M8$S3R*0``)*L+`G+D
-MS^KP`U7YOR7P/*J)!8E]RQ#0DG=78N5:#$*G*0``'```0`37B])C^B6$&&/=
-MZM*UR5_E)_'Y(````!P``$`%2Y37@*?IN=2Q,@GY[C#M'%^Z4WE2$[=&V8@!
-M``P!```,`0```@```$4``0B"^@``0!$``,"H`0'`J`$"`?0!]`#T!]E&;)*Z
-MHY4":8:X&WZJ2/`6+B`C"`````$```#L(P``T*T'2$)8<ETQ5&>IB&]8ACLR
-MV%)MD]%Y'>!/X8E?PL-UG#5(`+K!A_\D,AVN;3%L4@#IKQ-2#8E,QZF^D>XB
-MJ0U?^<Q\_/'>@5AVN(@U="MQ)YR[AV^&9^^SJ`2,V%*CX1TJ.-J*-MN_ZBV.
-MXWJO6EBY,;6T'+_Z.X^6076C(CVO?^@6O3^K<I)*C'3&)ND:-2$=&MCD_8U2
-M3WE@OQX)`GOK/_S#X9[:'*+\51-),WVSFG[=W#%A;^UMQ9^I%444/$,%":A+
-M&1#^>@N%`U(3MT;;H@$`O````+P````"````10``N(+[``!`$0``P*@!`<"H
-M`0(!]`'T`*0&B49LDKJCE0)IAK@;?JI(\!8N(",@`````0```)PD``"`&(&!
-ML6(O[DKW]1#,J>+(MCLQ)HG)1T;3N988V/9N;4X!$6^1:*;<J=*A=P,(4%&,
-MC-!WH[;BV-K,S/)S7&VGTIH#+?[(E'JA42E*?<\%&X$?CMD."2;J09_5:?7R
-M'&G[D&[WV*:DK+J14[U8$^SJ^<B&.;E;9N`/N#Z(VU(3MT;>P0$`'`$``!P!
-M```"````10`!&(+\``!`$0``P*@!`<"H`0(!]`'T`00'Z49LDKJCE0)IAK@;
-M?JI(\!8N("0(`````@```/PA``#@==U#A?86TPNJL6P!M!V,OOHD)K=B%<?"
-MUZBE]5EEG),N%0T=I*#L)3P!F[93T,N$]T=RM5#H7@8O//0%CE>28%CF5A);
-M.QIO4AQ^T.PU8![X;EFXFT?^8&#D!&S-6"CD`<Q'OG%X1\M/GK;,-M<%ES6M
-M1U6_N4@4*5'#4YIL^X\Y8Q&UHD.?0SG_)A_4B.;RHX4'5]7CQ=QW9I&P-<\P
-M'YT-66F8T.2`FN,-5:]1Y@4^T/#0/!^4OZCM%_^"CJR;Z0X<ZOV:>KQ,1*.%
-M=-8]8))BG!%ZPS[3`40Q?%(3MT;\S`$`_````/P````"````10``^(+]``!`
-M$0``P*@!`<"H`0(!]`'T`.0&R49LDKJCE0)IAK@;?JI(\!8N("0(`````P``
-M`-PA``#`"Y*4:EO@-=],7X$M[871Y)"SX#L[X<=R:GV,,/^F05+[3WY@+^AZ
-MVE'JW:*#DVAL2U=R`AI31[QQ<XQ]6H_E^"-WZ01FHR,LZG=(X8C/N69V`:BS
-M7YE=\VLK'K;8([GYFTY#TO=@#UZ!,NO%WK4B_)6TWQD4^L5QM=AQ$#.J>#84
-MHN$)5/1>`6C1,(+M//)<:BLB&M__6KS[!'T^)&JHC$"?CD6.7CR.:SNJSBOM
-M=.=+,&V!`O7:%F0\8:I2$[=&J=<!`&P```!L`````@```$4``&B"_@``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CE&;)*ZHY4":8:X&WZJ2/`6+B`D(`````(```!,
-M*0``,,-6HOMRWS,'6O`/?!S=QTKOKI8-5S\)/,EKS"%Z80_G+EGBO69YALS:
-M*/C#4A.W1GSS`0!L````;`````(```!%``!H@O\``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y1FR2NJ.5`FF&N!M^JDCP%BX@)"`````#````3"D``#!B7ALNPP19
-M;YD!7KR_QMC4**U1=(-XJI2311:HP33V;,H!:?^^::*H"F'/S5(3MT:;#@(`
-M/`$``#P!```"````10`!.(,```!`$0``P*@!`<"H`0(!]`'T`20'"49LDKJC
-ME0)IAK@;?JI(\!8N("0(````!````1PA``$`W6P]0XVJ2MAU02#::D93B\-O
-M8&0*<;!S?-,;BI;ZT6K2]JGUT.D(*E:83`#/3^<[)>/V43O"`9K/&,Q0Q2:^
-MB/;W]PO.Z-9E8LQMSICSV-K=-?/LK[P8EFT$26+_26U1Z:=@KKWA2FF7O7B.
-M"B5P@T!Q4?3R9M$'*3:)-M_2T8_%1:[#51EE>_P\,>JCB=%500#XQ],^*7\`
-MP6-CX^C\"_GQ>L(\@`^X2[5Z-8?56"1/)+M6O!_A18]/)N-3:GDW0N0J\$W#
-M#@N?L2.SLA$HX\73A^$D5<*EKZF>V-5RQ,OJM_U6TT1$:.HWN932L<T#Z[2:
-MKQ`#5BVFB8>04A.W1D$:`@`<`0``'`$```(```!%``$8@P$``$`1``#`J`$!
-MP*@!`@'T`?0!!`?I1FR2NJ.5`FF&N!M^JDCP%BX@)`@````%````_"$``.`W
-M;:Y_*==/KQGJ:;"TD(/Z\&)!G%]7I>0HW*?I]%N>5P93!\2QA\UU1CD`?8TO
-M##\(A`R-?0RU(/B'JR@%3=)1FS9?\DV(9D6J#X99%F-KT4CPT33T9^@IH)QD
-M-3A@EI.^BO+3<>]ZTU+P"RGI$KUM+MQ,;_'%W6/V+^3-][!TF-P";J1`F14B
-M9:+VT^SL[,K7)<F_\%]+-SGW`.6L#DD+R*^/#!SY_<^)]<:%&F((?8A*/#BW
-M0+"EY^7`^"Q#5L([C:2EBH/Q7(+6'71L'C[`VCRC\J*O8U12/WY?4A.W1G$J
-M`@#L````[`````(```!%``#H@P(``$`1``#`J`$!P*@!`@'T`?0`U`:Y1FR2
-MNJ.5`FF&N!M^JDCP%BX@)"`````$````S"$``+"BQ<(Z';&*AOI^FI[Q5?/4
-M=MO]M3#S9S1[9[0+>B)[T?YX68V#I7U`\MK9&-(4<E'KV>VF"?0+Z#-UR]"H
-MD"YQ%7=BO4S\/%A)945"-VLTLZFK<T$2\P'I;M\SG"\R'@\#83(J5.G'[/:=
-M+T0%6Q(CQM';E5IV12H$#+7RSTT@<E>(;.232NAS>C1R^,I#.VTMO/@\?P@Q
-M4TSXD<"5'\NBFD#-;D"QP%6$IG584A.W1LM,`@#L````[`````(```!%``#H
-M@P,``$`1``#`J`$!P*@!`@'T`?0`U`:Y1FR2NJ.5`FF&N!M^JDCP%BX@)"``
-M```%````S"$``+`(2&FS'\4!J5EDU$`J&9J#_&(<M^;GO/LH-Q?MI/`FYJUT
-MN@8E(F7;GRR&M"\[ZY40H0-;AK(#60:PM!&F"(UWU#JSD9'V;3J/8\&_EF&(
-M,X6%RISM<#G0HZ1K?@O&]AY)K!F]Y*:]XO5IS^4OA0'.?(F67H2'U'U#C$/:
-MCNG"^2(M*/_<E#T;JG9KDT:DY0@UE_=F)A9<$TD>I:\H<0=2B2A8*)IZ4*:F
-M0+\G4A.W1I5I`@`\`0``/`$```(```!%``$X@P0``$`1``#`J`$!P*@!`@'T
-M`?0!)`<)1FR2NJ.5`FF&N!M^JDCP%BX@)`@````&```!'"$``0!F6A)+1/^)
-MWWDG:\&P"X<R0<H')W__F]:YD!:!*$,W7):$QD4O7A?`N\5I"$2),DJ0_ZDC
-MK3[%4UHCP*Z8TK40+'@27'R!M>_\GV(%IJU_0IX]8GB8HV^9,99!QC^='7$-
-M9&@?Y.RDB3'<T(B.]B[3H4?VZTT*Z/Q[E\YI7*FB31CX_ER"'90]X)4U]>>Q
-M%RV5D16@!J6;"W_X3V%MTD)YT7FL6T+O;!2_+'J7[K&V#3_\PZ>Q<X5[]H;U
-MP+S4'UQQ%^U:+!\>LFKZ_QR]S&MEQ+?L@MAOE5&+#4VC3"T3!W-?/;5#!+\Y
-M`BS0(.>-6FP](>BA*JOTO!_Y%-]2$[=&"G4"`!P!```<`0```@```$4``1B#
-M!0``0!$``,"H`0'`J`$"`?0!]`$$!^E&;)*ZHY4":8:X&WZJ2/`6+B`D"```
-M``<```#\(0``X.F>=FU8?WWL]F^_'X"V$:F2'Q+>(@C8YJ&_:V"4)7GH!)GM
-MRF^(HKQKV.0Z0IT.`7B8L&QS3CWD(A-]H\G;;=K8>[WIE0:,WUD']-F<<CGO
-M2=].3EQYV.C+=QYC)=,X7^QL?M:%%2F%4(H?6\UXF(^V=<KBX0V@YT9.[=50
-M!EL*RA!:J07Q0%Y:)1JZK^7WJ[19T4?,`IT)/X?=<R@5\`$D/+M):/!7_GVI
-M1ND8<?@J?`&MA']A.+NN)GE;'QI("J#;7=*FD>2!;<L3AX8/^5<Z^E8(#FG1
-M%R!RY,M2$[=&G84"`.P```#L`````@```$4``.B#!@``0!$``,"H`0'`J`$"
-M`?0!]`#4!KE&;)*ZHY4":8:X&WZJ2/`6+B`D(`````8```#,(0``L!W:-O[K
-M@W-@:`ZT@`5_&L=,#$`J</U?D$_`SR3R_$+Q0N!&:TQW#<D@+"AZL`^KG3B-
-M]#33FLVV7:>JY)^U[6E4+Z8&"<-Q-(MU]YPNB-)I17JA:42W7>.IIW]M.+U?
-M5!KCNL];9.+^&3\M@9>3HVOQ/O_90?5'V;-#JD+\2%D$$I^06$QIC;?M";*(
-MS`Z$&[0U%/$63S"#S2K,N2XYXGU=]T>7_00@P2;1S"!2$[=&@J@"`.P```#L
-M`````@```$4``.B#!P``0!$``,"H`0'`J`$"`?0!]`#4!KE&;)*ZHY4":8:X
-M&WZJ2/`6+B`D(`````<```#,(0``L!XLUP--NQ12.O2?UZ:JV)S]<N.UEK>>
-MBZ:5%3T;&9NEM'3U3?S[7MG&Q)50LN@([%"'QT)?6@1"=:T8_?_)H@.%^*1;
-M5>0W8`B\^&*/$C^<PS*W;W$DHDLTQ23BB&CWV9UB/?4/+?.JL3VERCH4')L4
-MOWA%9M3Q04'QXNZ;ZOA/8_`]:0-8>K%J9'J/]?`C$[`SMK?]^5I>N,#]O0J$
-M=_G/K+Z@L<%UP;X"2N92$[=&,,X"`(P!``",`0```@```$4``8B#"```0!$`
-M`,"H`0'`J`$"`?0!]`%T!UE&;)*ZHY4":8:X&WZJ2/`6+B`D"`````@```%L
-M(0`!4+//L>6-IA@10HR):H<-UAU%C1QSVXVC7W:FX[4YZJ;D`YI\+R,?HY4)
-MH:WG?,=<4EI5=5=1C^8X;Z:$PE=SJ/K&+,^).:B6_HB38@P&>-7`E]@@;41D
-MOZ*9R@EVGH*7G`$O:)@WZS+R!W9CD$=)$=,X%V\'CJR3MNIO2T&8;,"`<_<C
-M)'R%I^L#Q[XJ/5P,O8=B><YV(^=F>J!(K/U@M+YHF*'@Q&W6!]KZG+$]\9%8
-MT6U!J6?2K=7G6<_D\GWU*LZ*0F\7ZH?'"L5@<V35`_4,D'4V4=)"%P$8&^'^
-M<W6=^LZB?K%T?AV=>3P)#K;5.3[`2_N#+7.HKQ@D*CYL/N'V&'2_VNVK\/T6
-M3!+$ODOP3Y&5/9J5M$+1&PF`O67/U5HI+FZ^2_#2)<^D7B#59A-SY%-Q"!09
-MXZLUWR=JC-V\Q^<*ZA!YD)D"O(OG4A.W1F,#`P!<`0``7`$```(```!%``%8
-M@PD``$`1``#`J`$!P*@!`@'T`?0!1`<I1FR2NJ.5`FF&N!M^JDCP%BX@)"``
-M```(```!/"$``2#XS45.++6WR\1X+<+S)PP`Z@F#US3AR3`"J1F'*[2,TW:K
-M[$`(64XC;0HO_:G2S%<F'N11)JPS/%W^]&>N12`NS==ZY!1T<QW+23X@`#]_
-M/9%AT'&M`Q&BGT4[H\N2O6=!I8P"DP13DUK/M2Q13DQQ8E&QJ(-_`K+TL\X1
-MAP=,HGU<.+.U,`0.4K:Y[!U5A.\<:KPK(JT5]_]^FDEFF4;>&JZ35G>&GD?T
-MMZ(%D\O)@QJB\L-RE-3@&F<4NSI#&TV.<6AN'0V.#F363'51-C7;\:23<U\K
-M7FP3FB'*D]*8C@_VAI!E)B`WV;LZU_[URN/8?D^1?3ZXTJ,A*7@-CZ(K&,N?
-M.?62'\"X#:KAK,0-`J?\DD!:(Q=<-\9LL%(3MT8Q*@,`?````'P````"````
-M10``>(,*``!`$0``P*@!`<"H`0(!]`'T`&0&2;T%EB]4\L<^=S?BI/#'$(,N
-M("4(`````````%PJ``!`B=`^P'&+U1"XHR7"%?\D2/$VO(AH(J8!9=Z!B(*Q
-MD-P_0S*I@W>[;M$=]JN$"!7+O+J,Q6P/K3LK'Y1N4A.W1L\U`P!L````;```
-M``(```!%``!H@PL``$`1``#`J`$!P*@!`@'T`?0`5`8YO066+U3RQSYW-^*D
-M\,<0@RX@)2``````````3````#"[/[%)\Y+F8'O#DBN5"F<<<,B3(:(L6A.*
-M&,DB1)OXFD>-S[5C0T0?+MC7`%(3MT9U1`,`;````&P````"````10``:(,,
-M``!`$0``P*@!`<"H`0(!]`'T`%0&.;T%EB]4\L<^=S?BI/#'$(,N("4(````
-M`0```$PJ```P0;;TX5>+H2:_X63=1OMETD1]Y8)'OUTVU)GE$$?*&93L7&";
-M$`YELEK\_XM2$[=&=E(#`&P```!L`````@```$4``&B##0``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CF]!98O5/+'/G<WXJ3PQQ"#+B`E(`````$```!,````,.C-
-M[L3O:/_XZ;Y?GY*>?*G>E_>G#6UEH\=^:YZ(A:Q;?*&-(*"V9+@(+S9F4A.W
-M1G1/!`"8`0``F`$```(```!%``&4@PX``$`1``#`J`$!P*@!`@'T`?0!@`=E
-MW18[AP=8\Z4``````````"$@(@@````````!>"(``'@```!T`0$`#`,(``P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``GD3^I_[<7@O?=@X%+B?C]8GY"%TJL36D
-MP]VC)[`LTNMU6,)A%.IFS,<F.)4?E3T(>8/9%E#(`SB2J#!W(H2LLSCCV1/,
-MA='`=T4&%-9W^:-;1<\?DQHD]VZ!4C1,^(D3=%^6.1HD.7\>^'Q"'>7.+/LG
-M%]NOFMC6@`YN2=D/"JTI```D@26!_>3+Z!\`J#A^1QZ($=$$(]93(]IJLH,4
-MN=(G*2`I```<``!`!)$62KFR$>4XX_W*6\NVNN.OTJC7````'```0`5A>"7;
-MU"0NDN7(R)3+39,',\O3N%(3MT:>7@0`7````%P````"````10``6(,/``!`
-M$0``P*@!`<"H`0(!]`'T`$0&*=T6.X<'6/.E```````````I("(@````````
-M`#P````@``!`!@````IK@>D00E&K5]Y&,NK?`;1"D*D)+%(3MT;M;00`N`$`
-M`+@!```"````10`!M(,0``!`$0``P*@!`<"H`0(!]`'T`:`'A=T6.X<'6/.E
-M```````````I("((`````````9@A```@``!`!@````IK@>D00E&K5]Y&,NK?
-M`;1"D*D)+"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MGD3^I_[<7@O?=@X%+B?C]8GY"%TJL36DP]VC)[`LTNMU6,)A%.IFS,<F.)4?
-ME3T(>8/9%E#(`SB2J#!W(H2LLSCCV1/,A='`=T4&%-9W^:-;1<\?DQHD]VZ!
-M4C1,^(D3=%^6.1HD.7\>^'Q"'>7.+/LG%]NOFMC6@`YN2=D/"JTI```D@26!
-M_>3+Z!\`J#A^1QZ($=$$(]93(]IJLH,4N=(G*2`I```<``!`!)$62KFR$>4X
-MX_W*6\NVNN.OTJC7````'```0`5A>"7;U"0NDN7(R)3+39,',\O3N%(3MT8F
-MD@0`4`$``%`!```"````10`!3(,1``!`$0``P*@!`<"H`0(!]`'T`3@''=T6
-M.X<'6/.E'J5/>YE`Q_$A("(@`````````3`B```P````+`$!``0#```,`0``
-M#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``)?T2S'ZDLJ@
-M^ZDU_XG5V-V:$]">#XVSHJE&<AVS<#GG[Q(%5^D0MTJ9/X[I#^%5:X*J.%M.
-MGK^-&S,?,25Z:AXW)_01_YPD57DGD[/#&'6!Z:[!L!C%0S";-"-!_@\9?8O_
-MZ8D10H"0,B**+K5]QL4U.:M`"]\WZFZ2#H!C"=@7*0``).KD&MP&9)J^/@/9
-M71%1)5IBL(9[6?>T`K`OR_J7.P;I*0``'```0`3)0J*:OICA#Q!WV^J>^P<9
-MOW;$?P```!P``$`%3KJG[>Q&_+C4'_UQ31.`9/YF=O12$[=&-[\$``P!```,
-M`0```@```$4``0B#$@``0!$``,"H`0'`J`$"`?0!]`#T!]G=%CN'!UCSI1ZE
-M3WN90,?Q+B`C"`````$```#L(P``T&JXM@_O)QU-S)K=$89??.0&<W7!N00C
-M?.WL-,D&R1#'`3M`IPZL10#5M*:[:ZH6'&'(F]&%P<3Z>`U,PN.OI,Y\'2[$
-M(Y!_75H+S7FJ4I2EC=NK9<S0?4P`ER/=.I_-&7>SYVYF$JQ`RTUEYYV=!Z!3
-MT]$I??HU115*K1X;3[%1'%DIS>5A\3R4M(83__EC965R><!J'#F][(2R\V\;
-MPU1H!(%Z?[!=,(+0'FCNOGL4B22T3^JE)!7T(5V^H'D_UW776'[%>.,80YM:
-MO%(3MT;HV`0`O````+P````"````10``N(,3``!`$0``P*@!`<"H`0(!]`'T
-M`*0&B=T6.X<'6/.E'J5/>YE`Q_$N(",@`````0```)PD``"`#/(EGS4O_![_
-M?4.\(><NJP.G4M%0[6@1QS/$.U"2ET&)GCVGK=F#WGF6#^:[Y0X,74_<1YL7
-M2\[Q#A_['^Y%(0*,&$:@I]?'%0Y+;5@>7).2CRN1F##I-19V=75"N$`O?[OX
-MY=$M3'[&).'CP1(U*D@[9!0#!R-\UQ.C_U(3MT;2]P0`'`$``!P!```"````
-M10`!&(,4``!`$0``P*@!`<"H`0(!]`'T`00'Z=T6.X<'6/.E'J5/>YE`Q_$N
-M("0(`````@```/PA``#@YS+OUHM!A9Z'?S@OZ^II.<7@]9-%UQ.TJ,TP_?<9
-M*V&A%UMU\_Z`X69@32[1@N5*<(CY2;)FZ%JV`L`P]+E0#9FJL373Z+9FJLMC
-M%>$[[5,"F"'1VJIV8[HS$$9-3GUDJ.!6*CBMKIJERU5#PA%D"IL>;NQ<YL"B
-MJ'V^:=:(ELEM$5^*IZSXJRBW7(\;W5NY1FZ_L=16D=:(7QPUE=E/L?+:I*TX
-M4+$1+/5NT"@C-B0Y_8S(&T3(O[Z5:<&%SDJ@-_*DX7FQU-1:[^^GFDT"X\KO
-MQ:E6MZ@^%P<.PU(3MT;T`@4`_````/P````"````10``^(,5``!`$0``P*@!
-M`<"H`0(!]`'T`.0&R=T6.X<'6/.E'J5/>YE`Q_$N("0(`````P```-PA``#`
-MQ_SU,@_-S84M]Y68+92H8?Y:2:#"*MMLKX86AZ$$=UY4%[/K76F`E@>WW/>4
-MNAORV%R4\JC-,&A!L'W]?.+>*T4H'7Y]J$]WYD!,"LJZ_CR`?G$1ED?J],/.
-M)W%(:=B?SQ`>^]*;3W1*!]C$UF/KP*3>?9MJQ8I$)E%Y3Z2%`:^HL95607Z;
-M=^ICR_.(J@S)+_=-Y84%OV_`J'$@[;L]]2>\6XT'U]SN(@R<#+8%L_!,TE<=
-M@[I+Q`H(IVQ2$[=&7`X%`&P```!L`````@```$4``&B#%@``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CG=%CN'!UCSI1ZE3WN90,?Q+B`D(`````(```!,*0``,"BP
-MZN1TQ0*[Z8]4J0!=$QQU?D@>ZY&6*$4L$(ML64.07BP>>XA=@)(_ISS]4A.W
-M1L8I!0!L````;`````(```!%``!H@Q<``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-MW18[AP=8\Z4>I4][F4#'\2X@)"`````#````3"D``##I13R&S\L6Y.J>5(Q(
-MJ5]E[I..1MO5UE%K)64F3TM?*BV-E/>#7QV255^J>%(3MT:*1`4`/`$``#P!
-M```"````10`!.(,8``!`$0``P*@!`<"H`0(!]`'T`20'"=T6.X<'6/.E'J5/
-M>YE`Q_$N("0(````!````1PA``$`TR1-&:>H#92411_]F_OO;9AFCVY0@X5S
-M(VQP#0+AF]?=03-_18*5Q0IW'S9MB?EN,0O-3<)-CN\SUAVPDM,`NVMXP;DN
-M5`;KW`V%P1O&XPAO!3F6[_408>$?;!Y7JX%&#-B*A.0X?LPS.6G<$AHX$/R)
-MD,I,+U%O,6*+,B`GWR>M;KKRUMJ&AAD+)$\K!RJ?U8=AW)&K"AC_@D3V>F[Y
-ML$04<'*,U_)X2)+\,"9];K*OH)%9'"F[85.\I#O_KH3YK1GJV[B/8X'%ZX"V
-M@[X;WZ0130WICB/V@-,^).QQ^&A4R^:4@%7X,BAG!3CH/M29'4<KULFK&A^H
-M%&-:4A.W1ME0!0`<`0``'`$```(```!%``$8@QD``$`1``#`J`$!P*@!`@'T
-M`?0!!`?IW18[AP=8\Z4>I4][F4#'\2X@)`@````%````_"$``.")"QWB-#N+
-MKHD>S+YAB-\LB_8Y)1KMTZZ_U26K@<^TY>2DR;90<3VRBSF#]TL<,O6&XS#8
-M[:39`"ADW?JD#*90*%+1V@'.;A9I<&WU-IYK5$ML+G"_^W"I_`1)]00G68:?
-MDZ-N+$F2,,62MD+;;*GY25Z[B,S^>K9,ENM@AIFSF..DV=5X*O.H3YR!9%8!
-M,WSF1Q/FEWWP<P@G(!'F.XSA$9[?%XCI=89N]':K]C_A@7Z<PM#%61+K7;5B
-M@4/4X3FEQ/W$QKISX)+;65AR\1ID$NGH#B($GX\\T!OK4A.W1D1@!0#L````
-M[`````(```!%``#H@QH``$`1``#`J`$!P*@!`@'T`?0`U`:YW18[AP=8\Z4>
-MI4][F4#'\2X@)"`````$````S"$``+`A4C5=]('/?-SWM*XX>#)J20[*](M,
-MC^&4\/TO=1@9B$;$.AXQ?1"%]QZH%ME9_Q.J'.J,&MBN`@]JK!:WPX9'1QRJ
-MM"2:UFY^A#K7=05M].?":^%N]P/$4_@+?R53QY,32#2=2PQ7^#Y<JX.:OH/2
-M8SJ/-)*:_;JEL;M8EYKL>M$,.8^_0GX4LI@>LOG9!YQIW@#"S(V)&BDOZLD*
-M%J@RRFF_*.M5?H,`00$/4A.W1JB!!0#L````[`````(```!%``#H@QL``$`1
-M``#`J`$!P*@!`@'T`?0`U`:YW18[AP=8\Z4>I4][F4#'\2X@)"`````%````
-MS"$``+!EQB;>$O=<JV@^"QI=J#:1,E3;5XA.S,%8VI*9T99I6BCR\'$*F@V-
-M\*U"4Y.\Z?\IQ+$8/!ABU;-660OI_)CFT1-8.O4J9$$A4(B/G!;7Z8AP*@:W
-MGI.S%[(9KG#90-SX%,&,00D3>:T<G-E[=!50<47.95@\^AE`=AG])8)?0ZGY
-MY)(S<%.#"5X/Z3G_+@1C#&Y.$&.ZU7RP>0;@R0]D(6H8%0%^5B)RS8`-4A.W
-M1AZ?!0`\`0``/`$```(```!%``$X@QP``$`1``#`J`$!P*@!`@'T`?0!)`<)
-MW18[AP=8\Z4>I4][F4#'\2X@)`@````&```!'"$``0"<_BIBODFS^/@@2AN\
-M("FT,CY,9T$P:K\,8&KIDM<7=Y(3.I"VCP"7?X%8-A1(]?U5Q93@.8[W>EX$
-MKF"*&!MM2#\R#].B%V\]PK"!7?9$VD8R<_?@S,\P7_^18ZJ(BW>^3P$`12[T
-MIC;OQG;/M%A5,F;82#\.Z+OB?%NFL'L&U#YFM2M8+V-?/[^JYE86`N,,OKZJ
-M`V!%A6["I0D7=Z:ZA;K23G]Z(Y*[$<"(,B,]KB5LGX>>CR*F])LL4M.DF/=A
-MH'7VDX0J3^NL7B011S2?>$-L"@LB-ZF/@=PUZ`D,=#P71DD%0"7`P/[[:;\>
-M7$)TNWR)$;(7DL#*UFM2$[=&/*L%`!P!```<`0```@```$4``1B#'0``0!$`
-M`,"H`0'`J`$"`?0!]`$$!^G=%CN'!UCSI1ZE3WN90,?Q+B`D"`````<```#\
-M(0``X,?U<XFT"1Z>$JP[S)C)XRHPBE0V3H0C'00&[KM1BC'1C9[7!"S37V8]
-MCA0J^"#>4$TJ1]\*'$BN9Q+KQ*WR(&$TB\'?ZD/Y>TL9W6'^BI'0LWSQV_::
-M#@F`09"DOPND)?2C!+=6@T+8S6!BD+(-$K'8C`T2?\8#FR(QM,N=.HZRU6*-
-M9@?-,-M]06%<>'12*H[06FL+Z*]`NULJ&`)JO,_;.$WUVEM<,8<=YQWA6`5R
-M72:MZ^TN(">&BKKY'QJH]+,<FC`;E>_BF;D2ZYQNO+TO".L*-7*U$N`&A852
-M$[=&Q;P%`.P```#L`````@```$4``.B#(```0!$``,"H`0'`J`$"`?0!]`#4
-M!KG=%CN'!UCSI1ZE3WN90,?Q+B`D(`````8```#,(0``L!2$)W$7SH%8X0#]
-MQ*C@O)[KC[;$]Z:QB0P+./(A\$#?`R[SBLF2S;QN8?11KLP7X$IBJ'AW^,7*
-M.D86;0.2_"Q@!$P)_>LB:C,*O-U9:S'Q0IN3_?5!#W34.&E*)XY@2XM$7^T"
-MVCK)ZD4`,NGC,Z,*,O;0$:OFF!I%UP>MLS"_[K0+VG^!]GO+(..I<.&J'E;/
-M3W)MUCQ&2,VF#?%(IF[3>/C%18+7),D8^"M2$[=&+>`%`.P```#L`````@``
-M`$4``.B#(0``0!$``,"H`0'`J`$"`?0!]`#4!KG=%CN'!UCSI1ZE3WN90,?Q
-M+B`D(`````<```#,(0``L/[F87W9&R>LSCQN2T!(_HF"%T'+D"L28BP_7I&3
-M7`@BB#@H5N3^8_PK2%/G\M#%@4=!^L\6_E>A!F*-O6HX?*2[>`/4+#(\E;O*
-M=$61$`X$@').VVT)0A3&+/TNFL#:$,CO\ZFH[)M^HE^L76^=EJ@C.C`\6=ZQ
-MLQQD>[2/1":F4_<U!/4BLU-PH"Q^AEIWM$GU1>#(K)%XN`K"2]I'*4%=EVD"
-MX:'@Z<X>LO92$[=&\@\&`(P!``",`0```@```$4``8B#4P``0!$``,"H`0'`
-MJ`$"`?0!]`%T!UG=%CN'!UCSI1ZE3WN90,?Q+B`D"`````@```%L(0`!4$C'
-MR_7&;/>W`*QS#AH,D\VB>QY-K_1#%O<>MV?`F?&2#GU';_[D0J5Y3(E,/%<V
-M(($OX3?P@',H'O&YZE+!O_]20YRU$20?,$^-CP4F>B;I7JD60//"DGM4(C#8
-M8Z90-&TR?<<R?NE'S^H!MX#M+>-W$U*,]:DC04/7WU6$$;H'1K&&JOA4%T7&
-M7'DH/\=XXM`1U%Q-DC?47[6*4(Y??73R:6%E?3=&*K8^"@*N5B)>SOD>DGA;
-M8=SWSC@\T7K10<F($C^[YNWH5/@;0E+E/N8F\(-STMGAGTN"(EGE6TY?(GN7
-M^5QDM8%=".<AB'L?=MW-B[.F+/I7";(:7[N-BR-W=:AG;1@#RM?YS0'QD!<#
-M6:68=B9J0A,W7^U@9RW)0%$D.K7@KC`]E(62%IV)0HYM;,Q*1H6,/D3#9,I(
-M+94O!`,A"RC[B7R0ZN*34A.W1@!P!@!<`0``7`$```(```!%``%8@W<``$`1
-M``#`J`$!P*@!`@'T`?0!1`<IW18[AP=8\Z4>I4][F4#'\2X@)"`````(```!
-M/"$``2#YCC4.+2<!:(='BK.-K+)`/785%&@8EX@MH_DY0N,PLF!F(2F<0MXR
-M6?0-&VSXE;0=R,NCO;R4L:K]3V*;K9BMGPG2I+W9+?/??;FPP9L3&LRBD""3
-M>@TAN<K"Q<A&_@.8VAEQD:C*M`J0<8JO?Z?)F7'1H0^W@A+;$']C1:ZI9\>(
-MAU:P`\2D5;==,$]7_6Y2Y/O)[VSGYHO,G7L1N8I:4V+7\A%PQBAQX/C4#&SW
-MWH'"59\-T;$*NH%3<M9;7",9Q2O&AN\'Y1V*!#Y8T'7\Q@NH4;7$A;J/^S;J
-M$Z]'HSE,(=8I#9*.1P232V*3?9\'0S&1IV"[BJF)I5A8S").9FB9VK+4#T)(
-MM@15S[C.P)HY:TZKI($QBE([(E(3MT8JN@8`?````'P````"````10``>(.^
-M``!`$0``P*@!`<"H`0(!]`'T`&0&20G!DQQP\S8_>K%`Y$\P&%@N("4(````
-M`````%PJ``!`A"$V.JD>B'VGGBI!B\YCK$2>+H'0%=GKC%*9L6+I:C@,JB!3
-M&R_-^H.HP%V8)%MB0Q@[M$M6(8L=AW'F4A.W1KS*!@!L````;`````(```!%
-M``!H@[\``$`1``#`J`$!P*@!`@'T`?0`5`8Y"<&3''#S-C]ZL4#D3S`86"X@
-M)2``````````3````##2T"=1BC9QE10S@3A>%X3;WG<M`@678)\%4P!RZ*%-
-M)SV+1<<DCB1E>T_SD%(3MT8PX@8`;````&P````"````10``:(/+``!`$0``
-MP*@!`<"H`0(!]`'T`%0&.0G!DQQP\S8_>K%`Y$\P&%@N("4(`````0```$PJ
-M```PB78WYN<>*Y>+-,YUCC8WVS_$FU2I3:$4I[_?+]I?,+UBSJTU>G50>W-%
-MMZ]2$[=&908'`&P```!L`````@```$4``&B$$P``0!$``,"H`0'`J`$"`?0!
-M]`!4!CD)P9,<</,V/WJQ0.1/,!A8+B`E(`````$```!,````,!EV@!D["=![
-M'25O`:HY_85>!X?Y=.(.HB?R_8S-:H1.B=I,_'/VW\=HV>YY4A.W1K0E"`"8
-M`0``F`$```(```!%``&4A$$``$`1``#`J`$!P*@!`@'T`?0!@`=E;#4V5*QD
-ML50``````````"$@(@@````````!>"(``'@```!T`0$`#`,)``P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``BB5$W#OQ1MW1$*?3A:*AE/%`-]O+Z$T7A9)0=!U[
-MA5@@>[U!$TZGH%KQL.=3AD`D"@J(X!=:2ZL9GJ7]U0O#V]N5I[TDYC**D&"?
-M[7,@">.L.5BD:X,-@T?@-;0OYY7)25LG_TF^>X=0%UPMOX09YFQB)O5(,.AI
-M["+0NM7U>S(I```DU/<F*PZP"R"V/OKS+UKEC0AL*3:)\+NP;)/:O#]-"/4I
-M```<``!`!'JK3Y^;$,'F^&OZKA0VX'!+$ZEO````'```0`46G*N&-;V#1-)/
-MX-$2@SR0O3BY4U(3MT;*-0@`7````%P````"````10``6(1"``!`$0``P*@!
-M`<"H`0(!]`'T`$0&*6PU-E2L9+%4```````````I("(@`````````#P````@
-M``!`!@````ID"C"M?_7NL+>=1-F.%1QACR,7HU(3MT9,1@@`N`$``+@!```"
-M````10`!M(1#``!`$0``P*@!`<"H`0(!]`'T`:`'A6PU-E2L9+%4````````
-M```I("((`````````9@A```@``!`!@````ID"C"M?_7NL+>=1-F.%1QACR,7
-MHR(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``BB5$W#OQ
-M1MW1$*?3A:*AE/%`-]O+Z$T7A9)0=!U[A5@@>[U!$TZGH%KQL.=3AD`D"@J(
-MX!=:2ZL9GJ7]U0O#V]N5I[TDYC**D&"?[7,@">.L.5BD:X,-@T?@-;0OYY7)
-M25LG_TF^>X=0%UPMOX09YFQB)O5(,.AI["+0NM7U>S(I```DU/<F*PZP"R"V
-M/OKS+UKEC0AL*3:)\+NP;)/:O#]-"/4I```<``!`!'JK3Y^;$,'F^&OZKA0V
-MX'!+$ZEO````'```0`46G*N&-;V#1-)/X-$2@SR0O3BY4U(3MT9&:P@`4`$`
-M`%`!```"````10`!3(1$``!`$0``P*@!`<"H`0(!]`'T`3@''6PU-E2L9+%4
-MAWO%A!35>>,A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#
-M```(`@```@,```@#```"````"`0```(H``"(``(``(FU193STV__T=]N+!X7
-MB,<:M.J@W_FG(#3N@``FTSS_&I)I/XCBC$.^/CC;OVCM4*A(TKE,HLI!1_&C
-MJUP)FZH7;.T@I4W:]ZS&P#4$PY<-S&AQI';N,6JW#&&>R@W!U!06AZ^3J*%1
-MZ\B4^5*`!LG:0+7A:9P[CLTOH)C&20J"*0``),[#;.\)LZQ,SL,H(QI-X![_
-MV`.%*R%HXLB0F=.3S0L!*0``'```0`03F5[_Z86:=5VXRPH3`V2MWK]1I@``
-M`!P``$`%#K];:J=]508G/RD;,&H4CG2DZ,U2$[=&>ID(``P!```,`0```@``
-M`$4``0B$10``0!$``,"H`0'`J`$"`?0!]`#T!]EL-394K&2Q5(=[Q804U7GC
-M+B`C"`````$```#L(P``T"EGQ-8>(>G(I>#`5GJC5YFC-='0AKRD515QEQ*\
-MTFZ+`$!R,S$3HBAMD8'0E;BQ#=NV,(9'R%/]8[5<5[<_#1($?0],62S)5-:U
-MFPAOPNX^1">HRBN;B*2B"0XPXE6[C_\(:@ETDO3O+\8[K_--IOU4J9B\VS8-
-M^[)G$SMCN;B\!OY`*IGP&K2?"@C0AO7@EO%X\1FKK$Q&/\Y=?K&6QT;$\78V
-M)9IBF[&Y9-@$N&K^V`F?MV.3IHBKR%N8(\%M;KF-ZV[ZX&<B/;"M&5(3MT:"
-ML@@`O````+P````"````10``N(1&``!`$0``P*@!`<"H`0(!]`'T`*0&B6PU
-M-E2L9+%4AWO%A!35>>,N(",@`````0```)PD``"`\J8J&I(=-_3(/=1VJ$X@
-M[`59.<WX*V<N,%D0=8]S>`D770NBW]I]EA"'\DSFN]P'=8:YKJ<'XFM2XV>`
-MU-;L>KD^YRSU55$B5UAZO-"$D%Y2OEI"82/U'[6M4V7S,VV]X8GZ5*=;*K:8
-MYWPT8HKDH,#QE0U)A)P*(;=Z)U(3MT;@T0@`'`$``!P!```"````10`!&(1'
-M``!`$0``P*@!`<"H`0(!]`'T`00'Z6PU-E2L9+%4AWO%A!35>>,N("0(````
-M`@```/PA``#@`!<:7^DN!\&3!+1N;]:1M&I)-DZ15L9S7?PH_0<"A7MFW[<]
-M*F8%#X;=6(H+)>+@-S<$S%(/'F.3U#5V?F5(0`Z\,^YN&OY\(8RV3GIQ;"50
-MM@]9?7B3,(Q_',]GK*>+%LDI[7OTH_ON-:^,IGM)U:]LJ<1JE_^W"D9*9*)!
-M93*/<&E%2-'-5Q*ZZ?OQHTOO;*[_FXW1S$"1X8C8(Z:_*>F%0Y5PW;3W5-ZT
-M^;`9,:P6'8[L<*2:0OK2]5Y;H!U">P6C:RSNM[]MP->*"C[#6ZFAZL''#8"7
-M$*,@]5(3MT8<W0@`_````/P````"````10``^(1(``!`$0``P*@!`<"H`0(!
-M]`'T`.0&R6PU-E2L9+%4AWO%A!35>>,N("0(`````P```-PA``#`3.G0;KQ?
-M2DJUT^C.Q%F@N^*]5/I#ZJ*`C,OINDE\Q-R_13F[<72B;@_X4**S-7'`"6=I
-M^,"(B'7^/I5\!QV]NGQ?HQV^+186BB*:U]USL\S0SS<,?)QFJA4:3"",N0%\
-M(V,.>*3IR3@#0J.1RRQ&SC9#I>Q*`$Q:>8@@IJ`,)[@FS&3DV(OYQ)4T:KEC
-MCP''J@2[P`1"0T^@.KW9KVOF3YET_++=`KY\I8M$%U91L1K%3Q=Z$$S(JZW.
-M)%U2$[=&[N<(`&P```!L`````@```$4``&B$20``0!$``,"H`0'`J`$"`?0!
-M]`!4!CEL-394K&2Q5(=[Q804U7GC+B`D(`````(```!,*0``,(,I_P1$.6-A
-M8U9-*HU)^4^AN.;C4O`!_[(X/P1NDY=15/G?*70=VZ?;Y7WU4A.W1KP#"0!L
-M````;`````(```!%``!HA$H``$`1``#`J`$!P*@!`@'T`?0`5`8Y;#4V5*QD
-ML52'>\6$%-5YXRX@)"`````#````3"D``#"GLSH^T;C0J407CYO"$65Y-(MT
-MJ"67G?]S712[F2N#EFT(Q6E@#N]A<G$U\U(3MT8+(`D`/`$``#P!```"````
-M10`!.(1+``!`$0``P*@!`<"H`0(!]`'T`20'"6PU-E2L9+%4AWO%A!35>>,N
-M("0(````!````1PA``$`6%09P)(#\],9NKO[P!D/I@1&;FV8`H3.3M*WO<2A
-M4^H;*%?3>?S1T9$X`+.`/`VC+C6L]UK>73X!W=!&>Y/IX2W*N+!ZC5NP\BSO
-M9HOKI#UQ:_0O$0JW+AKU7+Y0S(GE+3/R:<HHP.5M3V0_PS\2)U9M_9KZOLI\
-M9+Y6PHN_R"9+^JL@,WUM]X=;E:_<G%B2^DF41L%(.$>(],1:(!#W>]>;.>X9
-M>^F;)HTY*9=Y#7C$-Y@A=A-??//$2?\S&8;/,+FE\@ZE`?`KLE\:;<[QP3Q=
-MA.7<L?L@ZK,D\&PSF7W*3$X6W3A),<F*YQ$W@!^1L*F#.+.QYI,A5T)-4A.W
-M1EHK"0`<`0``'`$```(```!%``$8A$P``$`1``#`J`$!P*@!`@'T`?0!!`?I
-M;#4V5*QDL52'>\6$%-5YXRX@)`@````%````_"$``.`=,J)/MH@UK(,]CC0C
-M&->3IWP!'@^""OT(PT_6AB'XE<;=GHDSP*DV/X#[2A3E,"-'#_X[X`8W<\%7
-MDC-W?6IZ$00<`HT7ZD]PNU(:JV4XL`IC]4&32)!4<7PEG`Y67V$QWL%FGW-%
-M_&_Z%4(&9M6+-!8E'KSI$=_9O95MQ[3X+LO6W=D+L07[CS=6:43]RI/*S-??
-MYRE8G;NT"(ZGA,$ON_DMK;_VE8OJ8*7WLC(2+<82$&:TSFF$P)AM[&:\,=XM
-M<ELKY3=&QI[,]GW5^X6.^%F2,"UJ-RQM#>W+4A.W1A,["0#L````[`````(`
-M``!%``#HA$T``$`1``#`J`$!P*@!`@'T`?0`U`:Y;#4V5*QDL52'>\6$%-5Y
-MXRX@)"`````$````S"$``+`$6[KSE4.#B<S>O!GTPP?;DYN:<W0I@3^1ZBN5
-MHK@KT/KJKF(15L085Y6J+*F.MJA`!AJQ9[2*BYQSO*^?/(Y0-NP'ZS&CCJS0
-MTD"\0[[<$"&HN0YCS02T[\^*L2)\G(9:Y[I>GP2)K0(%A;YIT5CX.8@M>`5Z
-MH*GS\\B[R+REBS-<8V\"Q$N&QGH[3%C$,:&KF/4MC42A$6%7!)3?WF$N'2)`
-MEM&_4=,'6_HT4A.W1B)="0#L````[`````(```!%``#HA$X``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y;#4V5*QDL52'>\6$%-5YXRX@)"`````%````S"$``+#T
-M9V7Z?<U*_@@S8PSYHWL<7T\MV!O;V3)M"*6KEE8CJHU<TYWB@WK,7*))J=[U
-MHL`<V6BZ>S4U#KM>(>R_52OS]O7U5=-'M^$ZB]N]T@*?.+9&3$J/@9]N?X#V
-M3#9'HFZG;9+0AKKT^>U0+^F)!H>/0V`R1IRV(_`8^0#[P"MVPTX3OUM<S$`@
-MQ&P[XW!`JIY21G'PB:$?,W#G%U"!*)<]<V07MS`)[T<;R!^I4A.W1C1Z"0`\
-M`0``/`$```(```!%``$XA$\``$`1``#`J`$!P*@!`@'T`?0!)`<);#4V5*QD
-ML52'>\6$%-5YXRX@)`@````&```!'"$``0#4*QQM&R^&+&_,LQ0`PN7@8YYH
-M7H[S_]"9`#+@75\=<.I$W4QJ4TD3=A=AXK(%VE7@RALF*."I)`PZ:1<=^K)4
-M[O;M]OQK1:U$5GH]+,NTV2!#^>-7=C)Z=D]\B&_VX"SW?4OI,R@&NH8_#$)'
-M/(X3?7H%O\W_I\X&AN=#3*:@9X[?:D[]VP[X;1!3RGD8(P=MSQT-=KCVQOKX
-MX'5+W_M2BU/T@]7]O\1^FQ&2D5PQ'H893S(2062(`X'+&G[-+\?WM]S$R%UU
-M=>A6S)].=R^`^8J(60GC<LM.S`SE_3[<)`Y+4O<V_!'EN+]7'\_8&Z>0MJ@7
-MZ2<C4JR_QB-2$[=&XX4)`!P!```<`0```@```$4``1B$4```0!$``,"H`0'`
-MJ`$"`?0!]`$$!^EL-394K&2Q5(=[Q804U7GC+B`D"`````<```#\(0``X&0V
-M7FR&6P32L3[3?T<]O42QNXD?%R=FP$$4+W``CH1.;@!7=#1]`*_CM'WERT/R
-MNN>N+HQ)![W07Y0^S9+M#M`NG/M":=J5U@A=\FZ):RILMCG`]7`H,%$20>RP
-MR!-.WH-R7K34X1<KD;%79+S8G%8V2(>I<L!H#_OX>5[EBU5QE1R-M2_(*99P
-MG7Q-PK>MV%_.8:K<9B?8\@ECD*S=_6YWN1;_A(ZXAC3>J;?8!]M"3G&;K*<<
-MR3AO_E>38L!MNI2:0-7SNT6!;85);)]IRS..F5V\5IL](N?RFMI2$[=&QY4)
-M`.P```#L`````@```$4``.B$40``0!$``,"H`0'`J`$"`?0!]`#4!KEL-394
-MK&2Q5(=[Q804U7GC+B`D(`````8```#,(0``L%)JL-*>A8+T87UJ3\3:^T`$
-MVZ:I2F0X3)EDC5:@%<1/8WFW;4+)"0O(7,V?@Y;D@XA#5K51M'^/')MWP]<0
-MCE_,'LTW4=64.&5]<$[2Z6::"$8L7K@6+D])!F`\G>Q@MJVWB'L7`K`ZM-W+
-M?HEL?;U3NIH),V;959#[3#]INMJ?/?/5?B$F;:`D6KU.X(.&.'.DOVZN3B7/
-MC=P?_\B?2<BTL-5$G>>6S#[#`G=2$[=&S[D)`.P```#L`````@```$4``.B$
-M4@``0!$``,"H`0'`J`$"`?0!]`#4!KEL-394K&2Q5(=[Q804U7GC+B`D(```
-M``<```#,(0``L)4<\'2Q(E/EI:?EC95<Z3&TIH0]D=#4U;V+S2H+LNNE!TY[
-M,/M"+0`&@'&*%!2[!S3XS2RAOR#A$U`1Q*=VQ(-:-Q$1\1CK(#<B1T7;VU2F
-MKDZK,E!]\A]J=V%G0JJ*,XDYPE0FSZN^!FJ*JAPR`3">:LU5`ANJ79M3T3C[
-MQ68_;1;:*B%^)G;"/@/O%_7+D&#,%92;Z;`0\).W7+R;T&*)3!./BY'*KZGA
-M-]M2$[=&^M\)`(P!``",`0```@```$4``8B$50``0!$``,"H`0'`J`$"`?0!
-M]`%T!UEL-394K&2Q5(=[Q804U7GC+B`D"`````@```%L(0`!4$$<`/0LY$FF
-M][P89&]C_18FS(4H8'*?GJOM&_H?&%1X:^C:1=$`M(PUM39AMAR;0C^Z4)4&
-M9^UFG2)KZ[@L=WQ6CTXXL@IHZBEBI)N#`&:GPA]_*J6S:*R0C=^V]5JXE"Y[
-M*Y7QNC!!<V-V\#!+@NNM".^UKR3((`7:(Q/,S6W&=ZR%2L<AF'/\6K#!QDH<
-M`JN2DJBRK)8M0%_V*J.[X.V.9!$5.G?1,9>Q&&>`+I];E9[[=BW5D$*Y70EW
-MXV.B32K+T_*,^2J!;+P04WSOQ?:NEP3E?B^WY#F\PHS)H='<0=.)!,C!U:='
-MV9DE?D6!TN[9,\C[9^VYQ`[I`BO&CGQGPN`77;<>2%*('R7@ME8[AO["5E\<
-MG0RTXU!4OL@;R'H5>9F0SX>:RY(((M;A.MD/#%',KF2@</+@?Z2LU\:"D>3N
-MEFX(WU)`:3:H4A.W1B04"@!<`0``7`$```(```!%``%8A%8``$`1``#`J`$!
-MP*@!`@'T`?0!1`<I;#4V5*QDL52'>\6$%-5YXRX@)"`````(```!/"$``2#6
-M]CR#&)G0#?[K`)EM((]\A.*MRLC]H3?N8L""755K:0'_12%7CW%7^4='(SED
-M\Z+!),_XV-"0_VZMRH53-JT_-P9;]2-`&UAG&TC;E8?1*],EZY#WW@8-$=Z5
-M>%<*1)T[M?II)XI'Z@=-M"DA:4K?-++@;?0%/2)O`R?BZU6V/HFB<:>[T4+0
-MQ9/PPCW1V?4Z,\F'0H^MT=#>'-BVO,C@Q?/FL=W>IYA7VI.,Q@.4Y,_L5?@Q
-M#^D]9>#0VQZU>Z']0W<-<6F_>YOBL##GY#*.CG8C!1F.E*_L::3QGP7J&"\D
-MW0AK6R^)U&*3"XS%\J!9?A9ELG4.87L1[4>%,?Z8OBV!4=>PNC@5;D)_6X(L
-MXEQO6)S><`>3%\MZ\U(3MT8M.PH`?````'P````"````10``>(17``!`$0``
-MP*@!`<"H`0(!]`'T`&0&29Q\3YTTU51S$MBQ@K%D3?8N("4(`````````%PJ
-M``!`(/"5CD^4%3G_>Q1Z&W:<"U$'=>NBWP78\!L/\J6AYL??X6S=@0E)]]I#
-M32T<'<,!'K/E>BWLW5>FI"H@4A.W1KM&"@!L````;`````(```!%``!HA%@`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8YG'Q/G3355',2V+&"L61-]BX@)2``````
-M````3````#!<.'PD7,,I,!!T&][UEKA%SJ.7^8K-X*(:G'.%!C>07@D%"#-^
-M\)NK6IVH?U(3MT9H50H`;````&P````"````10``:(19``!`$0``P*@!`<"H
-M`0(!]`'T`%0&.9Q\3YTTU51S$MBQ@K%D3?8N("4(`````0```$PJ```PJHH<
-MF;454NN4`IQ3S<HI8&FF>4KC>E0"8:GT2C2BSFOD66G2J-34;JI;TB-2$[=&
-MB&(*`&P```!L`````@```$4``&B$6@``0!$``,"H`0'`J`$"`?0!]`!4!CF<
-M?$^=--54<Q+8L8*Q9$WV+B`E(`````$```!,````,(AD=27,LVD#WAJ]M@HJ
-M*OJ-PZEK8V:AZFE:.RCUR6_K&&7!]YHH_^&=OO<S4A.W1K1?"P"8`0``F`$`
-M``(```!%``&4A%L``$`1``#`J`$!P*@!`@'T`?0!@`=E9ZH^0#^XP8T`````
-M`````"$@(@@````````!>"(``'@```!T`0$`#`/W``P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``^+(?S7P^;M:_U]L4`@8!0S?,2N&>GI6?U$+/JQ\Z+W%9F4(R
-MH2=5KAX,?_-A2LS)03]\@I2=S\.[?KIU'S[_(3)OHZR]Q=X)<BQ9&\W`9`]/
-MVC"LF7C<&'=!1>W(:A_J#V&M?3<R`HA?E;'O_`G1%LB*N-7&O<;[;W8[F6LE
-MZADI```DP)ARA!.>.U70JL)S$P&YH!-"JRDV<$W#R7P,4_G+CD8I```<``!`
-M!`ACZT]E!7.<PLMK:,+LF6$1(.>4````'```0`7-891HG,""I3O+.;C&J&+"
-M$D]/)%(3MT;#;@L`7````%P````"````10``6(1<``!`$0``P*@!`<"H`0(!
-M]`'T`$0&*6>J/D`_N,&-```````````I("(@`````````#P````@``!`!@``
-M``HV_$UXDHU<G3%3Z>,X00A,+-&&(U(3MT9(?@L`N`$``+@!```"````10`!
-MM(1=``!`$0``P*@!`<"H`0(!]`'T`:`'A6>J/D`_N,&-```````````I("((
-M`````````9@A```@``!`!@````HV_$UXDHU<G3%3Z>,X00A,+-&&(R(``'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``^+(?S7P^;M:_U]L4
-M`@8!0S?,2N&>GI6?U$+/JQ\Z+W%9F4(RH2=5KAX,?_-A2LS)03]\@I2=S\.[
-M?KIU'S[_(3)OHZR]Q=X)<BQ9&\W`9`]/VC"LF7C<&'=!1>W(:A_J#V&M?3<R
-M`HA?E;'O_`G1%LB*N-7&O<;[;W8[F6LEZADI```DP)ARA!.>.U70JL)S$P&Y
-MH!-"JRDV<$W#R7P,4_G+CD8I```<``!`!`ACZT]E!7.<PLMK:,+LF6$1(.>4
-M````'```0`7-891HG,""I3O+.;C&J&+"$D]/)%(3MT;NH@L`4`$``%`!```"
-M````10`!3(1>``!`$0``P*@!`<"H`0(!]`'T`3@''6>J/D`_N,&-B@\DEP\Z
-M'Q4A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@``
-M`@,```@#```"````"`0```(H``"(``(``-3#%I]1R>`'`.4.)BE^^%!ST1Q?
-M^=&KAD8+"(@50EX'K`L\#`YL$BSG0'R\J9,&A^X<Y)--98@R@(J+;Z2X9:O^
-M;TX=.;1.S\'H#(]E1(2#)39#T)>U'%9,*YXVL3D7J:>G'S[LWA^@`WI'+!N/
-MC<5#59$^2R#S7]MDANDC>E;Q*0``)$=@W4/W"^L8P)9:>8TYD?/HBXRSJW22
-MAQ0?/"?B<@DN*0``'```0`3_L[<Q9DQ"#CWLL5E7EG6%)0T#C````!P``$`%
-M2Z;B%A&D>P38BJ;"Q$J@4C_5M3Q2$[=&2=`+``P!```,`0```@```$4``0B$
-M7P``0!$``,"H`0'`J`$"`?0!]`#T!]EGJCY`/[C!C8H/))</.A\5+B`C"```
-M``$```#L(P``T..E69#%ZN%]@N>2(,G+)D@.U@0WKO,2]@T3[YA+6,Y>`E/1
-MOGQAHY7W.@]8VNC'-\^IU>S,XV)#9?;5Y.=73QIC"M<G^3D0Y=]">XDZBE13
-MG7U'M=UG[M3.`C,2"Q^]F8XOZL&CV^U14Q&U$Z&X'V30">QI<_Z%0GU!/=FP
-MQ\44`'H5=VW_H*P@WN:='T3",HCWK#:,L>^O3L*7(R!7.WZ9%_?.ZDWZX-KM
-MG-W.SB24@?[N<8;/QG\#<'+NZ-/=YBH7O9EE#?<C\/`\>5(3MT8CZ0L`O```
-M`+P````"````10``N(1@``!`$0``P*@!`<"H`0(!]`'T`*0&B6>J/D`_N,&-
-MB@\DEP\Z'Q4N(",@`````0```)PD``"`+S]8[8D9I:K(!&IIH)K&%ZFFSXV=
-M`48#5ZD?)#"M9^13[>*5/4_64R0U<H.+)[1'>5]M&IAT]B/\BY'2Z@)OOF8O
-MA*=#H@V.X4.M;3HJW,MMB8/&]?>!-P\N<S_%']BO8DMG<JCN9.Z[ZM#ZH"X!
-M>6:.0@#XGKUDA]P1`%(3MT8#"`P`'`$``!P!```"````10`!&(1A``!`$0``
-MP*@!`<"H`0(!]`'T`00'Z6>J/D`_N,&-B@\DEP\Z'Q4N("0(`````@```/PA
-M``#@@A6?]?R7A_)#,YHVQ#YZ:4S1,,"<A\41TV\JD@?>A>\3DN*@EB/(;9(1
-MHG;F_02"13(F,&W`2`\CLRR%)47O@41<P/(PV07S$F92J8OTEBY3>[OJ+:TB
-M4HGMD>Z3%.&E'E1;?_]\;1VO_[GOUYV!\0^/QW'!Z/'ZHC6#-7-LNRIV9E#`
-M*64HXU?@-J-,!Q&@=Y[A4*UKW+)[9JKM0V=E`J,!]]I-_"EX?Q.H?U*-8S9(
-MGNCH8RYID;MXJWQLL96L`U@<</H<8_HW(O0*A\FJC.4+,R]%DFRQ!)WKS%(3
-MMT9N%@P`_````/P````"````10``^(1B``!`$0``P*@!`<"H`0(!]`'T`.0&
-MR6>J/D`_N,&-B@\DEP\Z'Q4N("0(`````P```-PA``#`5Z1BD6[$$17?]]7J
-M).85V\=<U,KQ1"^^6K@0E38/<#T*J<'NM`K6ZF`]VY[5T7<"64MGM*CU[,6X
-MO4RBGR="!68)];,&I]8V95"^:`6B3\?HW+F-J<Q\NERL%GC@*9O+;[ZZ3:51
-M8CL2/.EKMQB:>,`HMH0_O8U'G8%M8N_&X8YU_2:X)Q?7+;XH6Y7F!]S\:_NC
-MW#O>-T2)+2H;3_)(>%DH0/?QWNL`@(OU$MAK:-MTE2G\CJ.BR;8&Y_A2$[=&
-M?AT,`&P```!L`````@```$4``&B$8P``0!$``,"H`0'`J`$"`?0!]`!4!CEG
-MJCY`/[C!C8H/))</.A\5+B`D(`````(```!,*0``,)F1F"8&@"$_WWCH7"_.
-M1X@;6LN__PB=`>$<V;P.`[^%9E\1__J"]&0SK#7K4A.W1E0Y#`!L````;```
-M``(```!%``!HA&0``$`1``#`J`$!P*@!`@'T`?0`5`8Y9ZH^0#^XP8V*#R27
-M#SH?%2X@)"`````#````3"D``#"%X'A5>7"6%K#O=W]=:4K<*I6">3&P^P0R
-MA$5D$XGDLQ#:)7086ZQZO!_5I%(3MT;D4PP`/`$``#P!```"````10`!.(1E
-M``!`$0``P*@!`<"H`0(!]`'T`20'"6>J/D`_N,&-B@\DEP\Z'Q4N("0(````
-M!````1PA``$`4HFT2!YXT%RNG8=$[V."IZ\SB#0!:43N$F:FM'%NZGAN[,PC
-MBX*2`!@[[=8*[R$`2O,%E!P)&5(R0''DK^Q30N>+Z558J2@$4:P1:O^2`A/1
-M'_0E)"A)(9E*Z>*$D_,]G8K#K']5DMRSM@0416#(.55!'TRNS^W:Z<;K>L$8
-M[!]/C)R:D_>/<\[;Z="G')/I^)19@_J_[+&$-3I[8N(L;TM^W\>,('!WCE'B
-MY%H1+,)P0R_M4TY4.._5/=\5/0]Y:I,%IM8C&W$56DY?RUZ+?')XB\=^H&6`
-MDQ3@!3Y_%C[2F%'1'DQVY)NE5>(]1PC`^WYZ2CP6`92D8`0N4A.W1L1?#``<
-M`0``'`$```(```!%``$8A&8``$`1``#`J`$!P*@!`@'T`?0!!`?I9ZH^0#^X
-MP8V*#R27#SH?%2X@)`@````%````_"$``.`H!3$``(FA))G'M7"L2AA*47F2
-M[',/%))_B&F=3$[TWWH>B!IH0O)<WW7_SZFT'EA.>CC9@GC9_"[\;O5E6K.W
-M__A/_YW_Y6:!FA<2I\N33K;XOK)1V]DMN67([23`@KDJSBEO;&;OE8LY<]0/
-M/`;AW%-\6Q5?F+DVY&,'561:VO]8#W)B?Y;.DPJ5'KVFGQ"W:P\2J2@3O8`I
-MM->C_,X.;,Y>7I3%NR.\PW`KTG*,+AKYMCDG+@%%\++'4Y600!CP_+AC.AEK
-M#Y5SBFH?0R:@OLFN)&,EM?D<'&+"4A.W1B%P#`#L````[`````(```!%``#H
-MA&<``$`1``#`J`$!P*@!`@'T`?0`U`:Y9ZH^0#^XP8V*#R27#SH?%2X@)"``
-M```$````S"$``+#H]9OM>+DW)C-V&3W4-XQ5[YX#X6>?R:.=-)-(B2+";R$)
-M6K5"9MW%BPO)_\.5&289A-/M;JL/L''E$CHQ\\&2`PY^<(5MUVT&7<J;T%%`
-MU\DCS2..<"Y:A.8,$SS.",UIQ&D=B:/;OO0$HE[YMMBG0/@OYIR&0@*>+>N:
-MDAN>[_=9<.*99Y(H#<`VX,74"!M^^K^;?/S[[?1M(/`^G7-RTJU!0*=&#_;^
-MUN=@4A.W1CR3#`#L````[`````(```!%``#HA&@``$`1``#`J`$!P*@!`@'T
-M`?0`U`:Y9ZH^0#^XP8V*#R27#SH?%2X@)"`````%````S"$``+![JDZ3"W!^
-MVIC[+9@-OBXASR5)?HFA]2O((J*4P3!.T%R1V.KP&CC50_[`5*PR`_K9B#ID
-M,.]0)=@7=S3)1W#:@L7^'^U)3=O\,OJUGQ/"9^XDF%C&X5ER9EURO6A(R%#*
-M(WP$1GOZL;?\S.3=YJN1K"(,VC32?`".+-;#>F5L&G_>"]3$CJU2X;H\D4C-
-M>"D/"^&QIT/F$_?0.`^-W&>,<64#D9%C6^$EP]>(4A.W1E.P#``\`0``/`$`
-M``(```!%``$XA&D``$`1``#`J`$!P*@!`@'T`?0!)`<)9ZH^0#^XP8V*#R27
-M#SH?%2X@)`@````&```!'"$``0#[WPNJM\Z,*DXVEMFT'[E<^*/3M=LBC1M<
-MZ#E"?ON$-H;M1U,A5_YZI6R98HVTR-(?2?(094[(<CENKJ%+,GPB]SYR4BPW
-MZ]LG6(_1!OPO*$&=90=@FQ7]$[UQ]X`@[Y3T).77.(ODOFEG-UO(^8:<_712
-MXO8G=Y_IN:MQPAN7]E/%^(+(:"#H"KK'M#(]M1)<VP?":F:P-+T$H)+["ADA
-M%G35ES[O%R?U57[,6"YJ9/+_E!G\<!ZWV;K6.S%MJ5^CNHR'OQT<_;D>+='X
-MS$S<UEDRU9[@O0F,Y^=_46V1JKL()&@'R?+@:1FO7<#[;O"!.5@4'-!N99@3
-MD[Q2$[=&`KH,`!P!```<`0```@```$4``1B$:@``0!$``,"H`0'`J`$"`?0!
-M]`$$!^EGJCY`/[C!C8H/))</.A\5+B`D"`````<```#\(0``X$"L2'/$FB>Z
-MYZG4KHO;\4544NFFW\?R"!D]BA-[$.(HH,(HS'+D-LYJ49SSR6!UGM(+HS%J
-MSF6+\(OCC-*XOTS>0B@(OQ6I8[G*WMJG>O8Z<L)8C\C];SI(F32;?^U\AFXI
-M,2+Z7[TF<]+(`_6U'B\XH!1W800A0O?0O_'P#JDQBUT4N[>HJ:_N2E+\1D68
-M.([CCOT%'VU@`URB(D:,IZB+UBR>#R4]"4D,%KJR7)F]:^+0&IVEHSW6=("&
-M/#9!VWM%*+2WUK-@)O`+VI:NM%0W<DD99:KS?X#>V'92$[=&#<P,`.P```#L
-M`````@```$4``.B$:P``0!$``,"H`0'`J`$"`?0!]`#4!KEGJCY`/[C!C8H/
-M))</.A\5+B`D(`````8```#,(0``L+TQG>B_3;F5"P=,$A2A9%J[NC@LZ/TY
-MI5`B=1:*S<._`)2?*HX`W.-?P\D!0/9W\@;*#5S39ID*@19,%O7P-QJ!9A]4
-M")3GG#5S`W)'-]1(`7WN_5\0NMB5(5L4*1-WF%>)S1#:KSY<)U1RO2(1W!.<
-M_"7/?M'-R]"\1;TV%DE697CY8?6/G7$U\TR?"%:62S.$%PC4]`JMN`5NE;D$
-M.<2F4)A<[O9=R$[9O392$[=&?>X,`.P```#L`````@```$4``.B$;```0!$`
-M`,"H`0'`J`$"`?0!]`#4!KEGJCY`/[C!C8H/))</.A\5+B`D(`````<```#,
-M(0``L+XB`M725F2R'@FQIPD2`)\MLK:E4V[Y>A;F6=C]6!#-1"W=9,F`,P(Q
-M@`:T,+$E/,)#R/.KT;7R>"IM<X'N]&0;"+GG_$_".?4V%*FBB71&U!XEQ[[L
-MN>)Q^9HY/ID)KL>D'$A#P2H&96Z^2:4ZL$5WPQ<1I@"ZVY[S\3"^`",]Q6QL
-MPH*[%_)^]%1T!N:R`"W,DRJ2Q23V3+X(%B@4IFF7Z.G;W4A+2(P%,EI2$[=&
-M-!4-`(P!``",`0```@```$4``8B$;0``0!$``,"H`0'`J`$"`?0!]`%T!UEG
-MJCY`/[C!C8H/))</.A\5+B`D"`````@```%L(0`!4"9?)FN$M0*:_CCD_V6H
-M7!UE&>])4K/2KE:7%]+N!<LN&*H$3R&RSR.'MF15;L'#J^H^BOX^]E=9KP_A
-M`5=IR=(?V4M;"',)_(W"C"U\743C=U-.\G#_B_8[;0<>D3PD<R#=_-VM"8?M
-M_A3+V@,44)I72WP\=PD&FJ7::Y/JT`7[M7NC0XCSW\+>=Y0W4D,F)QX&U2D.
-MTHD`*?L0*U=#CS(!0Q>\OSV&M#!4\>]:X@Q+BQ>4)W;\PA.TG<->4'HH[T(R
-ML7D1J/KAAUM3>0L+<-VJZJI]@<4EU4I")ZHWXHI38XW26^=(:_4X2<,1+NS\
-M#YWY]<G^?LR(\Q]41>1@&].^RGY:0O%6RTH.T+#^0]R=5[G;R#*F>.@C^VT_
-MA0_1)D7;O"6SK,:H3.9C+0B#=L6-I&8$93`Z>`2"J^#@PHS&$T7K<@ZS<MIV
-MU*\H4A.W1ME)#0!<`0``7`$```(```!%``%8A&X``$`1``#`J`$!P*@!`@'T
-M`?0!1`<I9ZH^0#^XP8V*#R27#SH?%2X@)"`````(```!/"$``2"7TM,9DD&5
-M<JHG;42`[80WGF2303,5%'0Q:SP3/H6),J=*`\3/?I&'B@./<;/T0NOHU\/U
-MBAG,A4UB7G4E.HP@.[$>B:+/['';7&YD-C==M'_@#`#T06./D92=,>CW)7HY
-MCZS*1QO7XG0^'$`J"Z`O2^&YI*R)=E%;`("YO`Y_CMK2W@%D%90V?W1=>L;+
-MML@7S*&(@AL$DE]6FL"(?1.]+R[AV[=)%\S]Q\TY%^T;#OA5"C!9C9"28QR3
-MF%!4"PA<?4P<(XEY,?%D[USGRC7_AZV`;J44AZP&:8Q0!13LI^5XVBH&HKNU
-M@;&/#:D/)B)!7^"NPS5]R/=%^^J^&]FD7[>H,EC_,Q6KWC6T_[08'#PPHQ;+
-MH9W3;*)^<5(3MT9S<`T`?````'P````"````10``>(1O``!`$0``P*@!`<"H
-M`0(!]`'T`&0&261O1N98B(CT,SMA3&@26Q\N("4(`````````%PJ``!`SAK*
-M-;A4>CS#3JJ>S<HI_7ZQ@Y6N1*9K0^FX)*;YJT\)K]U(P:^8X:D555>FCC4?
-M8#RX5=;SCY7[[8F[4A.W1OE[#0!L````;`````(```!%``!HA'```$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y9&]&YEB(B/0S.V%,:!);'RX@)2``````````3```
-M`#"1N9EX:N6"AI?0]!>CAB%5O0>S"2IH:]8)A1-$W:QR2H#<_8$EPQXF(:*E
-M/%(3MT8RBPT`;````&P````"````10``:(1Q``!`$0``P*@!`<"H`0(!]`'T
-M`%0&.61O1N98B(CT,SMA3&@26Q\N("4(`````0```$PJ```P-Q^7/O)#6,^?
-MD,/?-#*LI6NU)M=P[91P%G]`,6,,S1W_C%J=J\5*P8O%H1U2$[=&;9@-`&P`
-M``!L`````@```$4``&B$<@``0!$``,"H`0'`J`$"`?0!]`!4!CED;T;F6(B(
-M]#,[84QH$EL?+B`E(`````$```!,````,"(9VST:_LYG&,JF8I%`AH87`QH4
-M8129FQ?I"_EOZ^+CDW]X'P>&T4^\ZQY]4A.W1N.3#@"8`0``F`$```(```!%
-M``&4A',``$`1``#`J`$!P*@!`@'T`?0!@`=E84KO#*9$7"D``````````"$@
-M(@@````````!>"(``'@```!T`0$`#`/X``P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``&HR+7-[Z:U$&QU\JUY-2*$75>,>U%.C_[D-724EN?3Z^U6<O.PYD_>^&
-M.)/X9_0&5!IDG`@!K;C2_K"DU[TY45852=]JW:)_(&PNXTKZER^;HT'[B?5L
-M=>QR8/[@:S/H0'U.!E3V']&&]:\T2>88*P:HLRWJ.5+AAOZFZ7(1M6\I```D
-MKBV`'D/4B.")RR%3S*1Q4ZEO>;@/F"[NR3T%\%4<<>0I```<``!`!/2G-DWI
-MC5!-33L8$A,PPTV!#FW;````'```0`7$*_.R"$R9#E*/MZI+E78X"NZD6U(3
-MMT;6H@X`7````%P````"````10``6(1T``!`$0``P*@!`<"H`0(!]`'T`$0&
-M*6%*[PRF1%PI```````````I("(@`````````#P````@``!`!@````KGA19/
-M?<Z%U8BLWFWYE234,V.I'%(3MT8?LPX`N`$``+@!```"````10`!M(1U``!`
-M$0``P*@!`<"H`0(!]`'T`:`'A6%*[PRF1%PI```````````I("((````````
-M`9@A```@``!`!@````KGA19/?<Z%U8BLWFWYE234,V.I'"(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``&HR+7-[Z:U$&QU\JUY-2*$75
-M>,>U%.C_[D-724EN?3Z^U6<O.PYD_>^&.)/X9_0&5!IDG`@!K;C2_K"DU[TY
-M45852=]JW:)_(&PNXTKZER^;HT'[B?5L=>QR8/[@:S/H0'U.!E3V']&&]:\T
-M2>88*P:HLRWJ.5+AAOZFZ7(1M6\I```DKBV`'D/4B.")RR%3S*1Q4ZEO>;@/
-MF"[NR3T%\%4<<>0I```<``!`!/2G-DWIC5!-33L8$A,PPTV!#FW;````'```
-M0`7$*_.R"$R9#E*/MZI+E78X"NZD6U(3MT;:U@X`4`$``%`!```"````10`!
-M3(1V``!`$0``P*@!`<"H`0(!]`'T`3@''6%*[PRF1%PI'07*F[4.7)PA("(@
-M`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#
-M```"````"`0```(H``"(``(```,IG2IRT1PB.TKS]"QGV@I0F<L]?YA%+0HO
-M\]37P."E*G0RC0!N-$CI7#3!DBWS&=*YJ^^1MV4[L@F0[*4<7`:V2'Q1%;K]
-M<0-V4D0$:BHG5Q4P%!&W,HEA[=T12D_ZJ`ONX=YH)J=Z^\_4?6YNPI?R):?J
-MGOZXUK[I].&E:+>K*0``)#5P_V3N*.\3'NI.(S08>%_KZ`'&P3I0NC-XQ8(>
-M<<U?*0``'```0`3`2=#\V^;1^LF!]-=3!"Y(2H!C*0```!P``$`%3LYK.3`X
-M`"%'9BF/G/XE[(A93/%2$[=&?@,/``P!```,`0```@```$4``0B$=P``0!$`
-M`,"H`0'`J`$"`?0!]`#T!]EA2N\,ID1<*1T%RINU#ER<+B`C"`````$```#L
-M(P``T+<\&5T3:LIEY0%Z1-WI1#?`4C'3"A=%]]G7AJ)M/KD752SX`^"H/:B+
-M!XM'%R=4BQ,;^0:PF:EO<C=HRG<XV(6B'"EF3'9Y+"EKN0ZU>M94<`!=X@A^
-M>%:#HCZW;8]:Q7I-<O=,](6UD6LP2F[^U>]M\AQZKL:/B^!;^;2P=EX]8J#@
-MH6WZF_WA3."CH8[7)Z8_!(C6QH@LHQ.QWCM5W2T(UOA@1\<8H?"\9^=("+"4
-MR1K)^#"G]PY3;H@$<U,-BJAXQH=SX?=L]'(29U(3MT8-'0\`O````+P````"
-M````10``N(1X``!`$0``P*@!`<"H`0(!]`'T`*0&B6%*[PRF1%PI'07*F[4.
-M7)PN(",@`````0```)PD``"`L\COA,50H./#G7B+LHW&]^)'<I]%>LQ+`ON6
-M:!V"-]B&P^;4%@H$X6LM7R`3IQLIOO`8ML2HQQQ\=*,*G$QL`VFRXF9F:6,X
-M)Z6Z1;VYZR--$GHTQP[B:]47F]'ZC)O$F8Y.%"R7L`(]60:WP:\M*#(.=VJE
-M@]*)[#2?'5(3MT:J/`\`'`$``!P!```"````10`!&(1Y``!`$0``P*@!`<"H
-M`0(!]`'T`00'Z6%*[PRF1%PI'07*F[4.7)PN("0(`````@```/PA``#@F\WY
-M3'^1/LA0V[]WV,HP"(E4#*NFS+S#O?C.P*D45P0`JIV%.]'&`:RI%6]#B4#9
-MQP8]]^0H<0J(*T;'U$X8K3"'049!)#A0]N.'!(6['+TH:BJ)NSLSI$GD&9IA
-MC*0Z)Y5.?X>O4)9NY0<KEIK1K6P5_".FC-9'?\7F"0K8XV^9;_^<,#20!<\0
-M2;/&,_4L_(GTY32`%$O]5/'_Y+8.WT^ODI(GWEWFZ:O3N3]:,P`\;3N/3F\4
-M$\@PDQ*)PE2Y@T:$(0\,412&-X3>WU%"BQ4YG$HJ+_-@FLM0GE,3MT9L"@``
-M;````&P````"````10``:(1Z``!`$0``P*@!`<"H`0(!]`'T`%0&.6%*[PRF
-M1%PI'07*F[4.7)PN("0@`````@```$PI```P,-+?K(CN5ZCET[OO8U4U-)"Y
-M@++$&>N"-]78:`,W-[/:#T0^^QSM8?C*3_-3$[=&>1```/P```#\`````@``
-M`$4``/B$>P``0!$``,"H`0'`J`$"`?0!]`#D!LEA2N\,ID1<*1T%RINU#ER<
-M+B`D"`````,```#<(0``P),!\!XV(%BMZ:58NQ6[C]VC''1R%[1KZY])O-<U
-MFG,D?B$QIOA.C^[S-GZ"&,?]S:9\6*1.LS0V`'1,0\$W(O<HE9__)_BA,_R>
-M6>"NS4^(#-#+4K::O;)`.VJ8L\O"!#@V#+7M@[MRT=]_(K1@V48#<TF?:MJ4
-M=J/7EEUZ&:.N(%IL&^L&'MW$:I8[?S.AXS&0+%.OQ$ZWOXMAZ",EE&]-)FF_
-MWLP[I[*12#[`!M!7H^F:4H?(`I.AI24<4Q.W1JDM``!L````;`````(```!%
-M``!HA'T``$`1``#`J`$!P*@!`@'T`?0`5`8Y84KO#*9$7"D=!<J;M0Y<G"X@
-M)"`````#````3"D``#">@?26<E.-\M*R/;LK4QD7E/A09TB4M]HHCPG[UU>?
-M\(TINID3&^DQ>)9$O%,3MT8@2```/`$``#P!```"````10`!.(1^``!`$0``
-MP*@!`<"H`0(!]`'T`20'"6%*[PRF1%PI'07*F[4.7)PN("0(````!````1PA
-M``$`R(4,.!,(/1&?-`<I].'?0#Q]81&J;&#3Y$!XC--/\-/IC%YOD>D$#D7[
-M;)95<FE(Z#M8%`"WC3&&H@%=?^^Z,PPM.3:8.D5819C]8X'W;>D^+EB5T.R4
-M:$24$*V82+UQ+(IDG8?AYDI:MB(=F,5F6SDXV*1B4Y1@_X@.,`6%AA[VN3^D
-M!9C$G10-!.38>P?C@WXZ5S=D&-D[;OQ-#SZ8K8!DXPZNRNN&<0A?:+;5O(&@
-M/2N6045J1$HF')=-OLU^.(LL\(\1]KH4$,E(\H5=,2:KWIA\0LHH=I&0@?G(
-M$A5Q,2M0.6S`>6]1JSFGC&G:M^(W-@\<$#"9<G#Z4Q.W1OU3```<`0``'`$`
-M``(```!%``$8A'\``$`1``#`J`$!P*@!`@'T`?0!!`?I84KO#*9$7"D=!<J;
-MM0Y<G"X@)`@````%````_"$``.#$T"J1L5).BJ/YHJF9:`/@W+&O_^Q9_X':
-MU5;\W80W7Y6:=G!^K=&-/+0>]X8%=#(H)OV$/ZL+)K.,MWO$M2Q_+%%>#S>W
-M<7-M(/6OTJ]`PL!B&T-27'>N\LXK&XT7D*J*2*OBT/\H2^CMA'32C>'\6?*(
-M&TA+*OB<=7WTJLK\\Q2>(%&0$<[]1/-P;^+_A]E.>Q-Y`12-G[SUAU<&4-HX
-MSKP!^([?4V.?<'MIQL\G@:8R1$O^E8C@[F48;I#]$I3W$2+YY9Z#'-K2E)AI
-M`,."EFWJJM)W]8!T)VK]4Q.W1M-C``#L````[`````(```!%``#HA(```$`1
-M``#`J`$!P*@!`@'T`?0`U`:Y84KO#*9$7"D=!<J;M0Y<G"X@)"`````$````
-MS"$``+`%'9+IZ/G7<=B@<4#Z0,A'!E[B/.1H2(QK.>)+0;DKEA2MOL>LEOIJ
-M$4ULUF9R#X,&N-)&H(?BUP6G13"]`T11Q1;O7+I>!N(UT-@'>2FC&MEV`#_#
-M7+R0U:#`'<-PAC(WOK<H[5A?^9&8ZG-7)TQ'CB$'"?&B9_B`)F$#[F4VUC/N
-ML4O8#OT=J(M(93OC$]Z'R35<1O<`?N6T?Q_WGS\F6_0MZIE,77#I[![44Q.W
-M1D.&``#L````[`````(```!%``#HA($``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-M84KO#*9$7"D=!<J;M0Y<G"X@)"`````%````S"$``+#P6/IK8+`(8C&Q[GZ4
-M8%8+2Y;:(5LT3LK646'5U$N^!H%%5GZ$CD>0M%"'[?3L>W?6R)A!X*\'TDCB
-M6E&.VBS%C44.:6RYICG%%4_A[\X/I+XY*]#O,F.-"$\PGZ^4_]"6Z32<*Y1_
-M-!=;%Y:1=UDBVCGU:2`,D$'6!L:VQ2I2J+@#!M?.G8`<S</S*YFK!=VTL(!`
-MS.#"_Y/EFS?2E>/=T>!>5Q-;<-\'E.@^4Q.W1A"D```\`0``/`$```(```!%
-M``$XA((``$`1``#`J`$!P*@!`@'T`?0!)`<)84KO#*9$7"D=!<J;M0Y<G"X@
-M)`@````&```!'"$``0#^MZ!?MI"0NB3.#P?*O!8I9>OLU@3&9F%6<%4`2Y"5
-M+1\8KO&(FL618(69QN6DEZTX'GQ9-C&\=&;$N[7*$`MM$&$KN9[^;\_]G8M0
-M7\??#SD`8B\8DQRI1*UMT!;%]_BM[B"*P9\\)4N?696M@Q,<N"E9_=+T;HC<
-MGY=)$WL:XIFAVV(&>P\?#:I\#'@TDK,7?"DG$-1N96:)8L/3_C0E<M``4]W)
-M*5AS(9<(Y>[]'[$,$FC=-%!(9PU7>7W68R9_.K]O'S[2_P'G58O5"EU@*\9(
-MTHV85^3)AL/C**OB*M%T4;NI<?WB=1?WN7RK?"\'U.;K,(N'C1"<UP-3$[=&
-MW:\``!P!```<`0```@```$4``1B$@P``0!$``,"H`0'`J`$"`?0!]`$$!^EA
-M2N\,ID1<*1T%RINU#ER<+B`D"`````<```#\(0``X*E@M6,)Y?F6]]`DP/K!
-MVFV4J.:MN/E8'6"!WQUF(!2M7VK5[BM5$]8O!K'B5(]NOAA6BV-XU!1^)BUL
-M8LMLB[:T^\/%.6AZ$&3(P=7U;']4E7F_$^W<`_7"M%(_1YMZ4030&,(2S:*!
-M>]X70UD.@QM?Z'2Z<GF$,Z]1`:%'(I09U0NXGEZR^\H@(Z*FZ%WZV-#^K(5V
-M7Z/)0H=7@X4B/C39)(Z5Z*W-./S$5NHNXZ"ZM]4Q(65*FW-AZ#OW5?`=O]+F
-MUI&*X.]K=3CX#P'65<G?Y2:98)D:[%B5+653$[=&;K\``.P```#L`````@``
-M`$4``.B$A```0!$``,"H`0'`J`$"`?0!]`#4!KEA2N\,ID1<*1T%RINU#ER<
-M+B`D(`````8```#,(0``L/?GC\"ZD,S=.XUK9.=AI%P#6?N;'83N=DBQA(Q^
-MWZ#=B2:"L)52SA[]U[_71O?W,R8`&M`*?EZ399NTT`M[EM\=H77):`CI>(!J
-M0P`3I&']H(MO;3#&7$/4@ARI;G)!,T.Z``(;==<&I]!'L"5ZB^=:"26#?O:Z
-M]-/Y_RU!_^=;&Y3QL5P)1&.FCK%6^9WKB)7-0W^(N/+O;BD3NNHK(/.4QI$3
-MQQMM@ZJ"+^Y3$[=&1.$``.P```#L`````@```$4``.B$A0``0!$``,"H`0'`
-MJ`$"`?0!]`#4!KEA2N\,ID1<*1T%RINU#ER<+B`D(`````<```#,(0``L.W$
-M\$WUQ#PDW<"LG[(K1#^MP%S]B,)O%/"K#;$"&Z54>63DK4O3C]2.ZDEL%UK;
-MR8K?5$%KN`!>-XXCV>YQHCK,!2[05^Y_T#4=4@%V-I4##N&=H1Y:45`N9:MN
-MB-C[^U0Y,\C)OC5YM-V)BGLMP?_C],'6#C2,C>N%KWLA(YP8P%HO^C7W5KF&
-M*L5\R73AMIZ@@^/C$,E*@F_S`9E7<3*0.VK&%C,1F/]I_1-3$[=&C0<!`(P!
-M``",`0```@```$4``8B$A@``0!$``,"H`0'`J`$"`?0!]`%T!UEA2N\,ID1<
-M*1T%RINU#ER<+B`D"`````@```%L(0`!4"KXLTV#0Q_Z9`.E]2OUYCIR#R63
-MS<\O+IRIUR]IN$?:WP*W,ZZ/)',.!AF/8MP7Q.0&7$X)/O%7U;RZ)O3M+Q.V
-MBV!CLGM]D0M:OY/>`]X1]J5#W=Q8RK9:(V:`-@*Q/P(FHYSD9J5^Z@`WUE@8
-MZ"T-;05SM$R4YT$+D@2++\AHVV".!AO-5XP?+:<L,L!_<U9>H!KF=HV:`]B[
-MB@BKT=MY4\=_$:.1\]*6%NOY!2^CF3$T?Q`>Z'OD/I\B53BD[8[I'C6?`1O[
-MCU5`S^\DL#$#S*5W+GA@_)KF<R$-FL#_6V5FI%4$5B0'LP2`6V:Q)V!5X?22
-M,+_S,A,;""H\CT#)]7A1#02$)*S:O']"X,KI+U;^-A,`F4Z8;ID5QH!BJSJJ
-M(%KO*UA\VB7`[@_5*SXQ'W_.D0+I9FX/2C$N$(EFH6(K,K9F9/[13HX?4Q.W
-M1M(\`0!<`0``7`$```(```!%``%8A(<``$`1``#`J`$!P*@!`@'T`?0!1`<I
-M84KO#*9$7"D=!<J;M0Y<G"X@)"`````(```!/"$``2#7S.RB.#?C5O)$415'
-M&;MW98;N4'<R:D=ZR$G<M4B[S\0#I>#YKF"X2!\IG#QBG?4V&@JSO%NJ`F)Q
-MHROK4/?N7P''O&IC:IQ0RP[!`U:]NZ8:#[`C228](9I6Z+UH3']I`$>MV,RW
-M3?:=S>MR$:F;^=(,8.QFP2;C4\E9L@V*3_Y)`!UI/2EAZ$JA)0"E=4)^`5P@
-M-060P/5H%%EWIV>O&>KR8.[`(1M2X^<GX9&LO3W!WY(R=.?.DEJ$3<MY:S^]
-MB%Q?/[J0BL9KJ\S[E]N\WNN(7$,T1SRI9^&L;8W(LRS=RA**OQM6DXV6?MPL
-MZH&AU14UZZS\+33<8MJ_H"H$G)_D`2YL*DH$G@=U6K`U"`NEO#F0PY/X@X'Y
-MQ5,3MT;L8P$`?````'P````"````10``>(2(``!`$0``P*@!`<"H`0(!]`'T
-M`&0&2=@<_?":3N-1IYC9N!H.="@N("4(`````````%PJ``!`>EJO6TAO*`%?
-M`1=WXLG[18LL8<>Z?@K?A=,`CVG.&4NO[C8X"#VXHUZ3E9SK;[?N4B^N'O<M
-MB(>+W`H`4Q.W1G!O`0!L````;`````(```!%``!HA(D``$`1``#`J`$!P*@!
-M`@'T`?0`5`8YV!S]\)I.XU&GF-FX&@YT*"X@)2``````````3````#``E,3H
-MPA\V9IGD@BH,:ZL_7.<5;RN"Y2E9&!5!3??/*SB[&M/11+=6?QUCM%,3MT8+
-M?P$`;````&P````"````10``:(2*``!`$0``P*@!`<"H`0(!]`'T`%0&.=@<
-M_?":3N-1IYC9N!H.="@N("4(`````0```$PJ```P]G!-M%,FBV`E$8%?%PGS
-M]^A2N>L>*,:J@>>;0/#&,<YX'XR7)9:`V`5C,SY3$[=&CXP!`&P```!L````
-M`@```$4``&B$BP``0!$``,"H`0'`J`$"`?0!]`!4!CG8'/WPFD[C4:>8V;@:
-M#G0H+B`E(`````$```!,````,+"6<;,"NLFFZC'GG?0KKO$0FZW4RH5(*3T,
-MO\1=/X>Y2Y#D+,=AT/<7$1<+4Q.W1EB)`@"8`0``F`$```(```!%``&4A(P`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=EX(FE@37V358``````````"$@(@@`````
-M```!>"(``'@```!T`0$`#`/Y``P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``4FV!
-MU6^S"0/++1BFL7`J"XQ+C,C?I)=6N]NEB#DM=<!:.(LIPQOL*5>OH;2S++U3
-M8'E=3`:Q:L-OS#)WH4'%4F5ZR]Q/9DW!GWS>A_K`.+V[8A/C3":*?D3#V<5@
-M,'JDAWFY<'#,(O!F##Z)/ZKZI\^\53LE^)HL3F*MMW"/(/XI```DU[\G%>2)
-M):S.>]X&"611FE(4T[P%*#]$6H0IC]G015\I```<``!`!!:>.@;.NFFG9V@E
-M/;#(5@WPYI^,````'```0`6K%FK#]+(^R#!64QA4&NO60M[#F5,3MT8BF`(`
-M7````%P````"````10``6(2-``!`$0``P*@!`<"H`0(!]`'T`$0&*>")I8$U
-M]DU6```````````I("(@`````````#P````@``!`!@````JBT[N2?)FY3:M"
-M7;)/%4,Q;+JO2E,3MT;&IP(`N`$``+@!```"````10`!M(2.``!`$0``P*@!
-M`<"H`0(!]`'T`:`'A>")I8$U]DU6```````````I("((`````````9@A```@
-M``!`!@````JBT[N2?)FY3:M"7;)/%4,Q;+JO2B(``'@```!T`0$`#`,```P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``4FV!U6^S"0/++1BFL7`J"XQ+C,C?I)=6
-MN]NEB#DM=<!:.(LIPQOL*5>OH;2S++U38'E=3`:Q:L-OS#)WH4'%4F5ZR]Q/
-M9DW!GWS>A_K`.+V[8A/C3":*?D3#V<5@,'JDAWFY<'#,(O!F##Z)/ZKZI\^\
-M53LE^)HL3F*MMW"/(/XI```DU[\G%>2)):S.>]X&"611FE(4T[P%*#]$6H0I
-MC]G015\I```<``!`!!:>.@;.NFFG9V@E/;#(5@WPYI^,````'```0`6K%FK#
-M]+(^R#!64QA4&NO60M[#F5,3MT83S`(`4`$``%`!```"````10`!3(2/``!`
-M$0``P*@!`<"H`0(!]`'T`3@''>")I8$U]DU6O#(?A^R$=4TA("(@````````
-M`3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````
-M"`0```(H``"(``(``+Z\4;)?#&L\/V-"8H.W*M?^3`T&E0]JYP\$V/&@6.#S
-M,M#K*+$H2#VF(34ZR\.TNM3`W7]XAFTW3B!AD/G3`,]__0K&&K[KK_I_S+HJ
-M!7ECCHV#'=DR(%?Q0FV0P5V9+!]15&!H)P3CF,Z1-P(2>D+C_^$\RU1M8EU\
-MO+6*9:T**0``)#0,;HF#S>\VKR]$@7$63E)G/U?Z^FA1#J6QQ1#L?)O)*0``
-M'```0`0(>3.S\#-XA5Z)E\2A66>Q(NJ()P```!P``$`%G[Q'+&BZ&)\F2((=
-M4_YFX>;)(PI3$[=&-OD"``P!```,`0```@```$4``0B$D```0!$``,"H`0'`
-MJ`$"`?0!]`#T!]G@B:6!-?9-5KPR'X?LA'5-+B`C"`````$```#L(P``T'SZ
-M3PGX/#.C@"UXG!47X<MRK@UJL_S7&O$]AY]P.3DR%Y`]65T<0>:S%[OVW?&9
-MW'&??MI_++L^3VO&S&)^[8O%\4R0M:;DT5J$?;%9YL;T\\1Z:IMHJ`H\1V#4
-MP`.=M"Y0*(T[\3`UH-LFKA*YI66WK@#)4'8UE(XBKHG@L9H;0$%%EQ;(W@$$
-MH;3[FFJF=M'6$2Q1UW@?[O(QZ^$DZ\`D>'Y>&@MME6%.S.4`QZ=!3D=+6]"]
-M1>(;144\TI,@^?M\'%?(2A(I;TS$X%,3MT9P$@,`O````+P````"````10``
-MN(21``!`$0``P*@!`<"H`0(!]`'T`*0&B>")I8$U]DU6O#(?A^R$=4TN(",@
-M`````0```)PD``"`"YB;R#2PW6B&O3^73-0R&!I!O:U_T=G'F<U,>&G']G/=
-M,,."(=^V$;'(5^;_GTRM,Y'IDC&/7%?2?6*@[30VK-PD),XML\WHTOI<V[_<
-M^AMG'28L\46(Y[WLC-HF=^0.0SY=FK/#[#@O6WNQ]X:1[RKC'((@=B-\K8D%
-MW5,3MT:F,0,`'`$``!P!```"````10`!&(23``!`$0``P*@!`<"H`0(!]`'T
-M`00'Z>")I8$U]DU6O#(?A^R$=4TN("0(`````@```/PA``#@7]2#3KTHCX$N
-M13[SHG+C]07$F^(-0.>+Y(H4;"2?HYJY[]Q7>].?]^A"<R;@2T#M"T,A'<RF
-MR]S7224>;FOS[%=8"$;'YQ`"-WCKV"71FIEF6%L`T6_,(U,7%%XB$6EA<W"V
-M(VXM,N92HP=T1N]SI<A3RW2Y]A^IW#RIK8.:HX>[[Z)DIFGNY&11?=U[.4@K
-M(_>&2">\<7.$=+CW)_'#41]$'.3.NW&7?6K#92JE&YO[G[OWP[X=]!1(L/V_
-M6R>Z/A'>ZHU)QJJ9^L'=ZT:T.FD6IVJR^#5;%"1@]U,3MT9U/`,`_````/P`
-M```"````10``^(24``!`$0``P*@!`<"H`0(!]`'T`.0&R>")I8$U]DU6O#(?
-MA^R$=4TN("0(`````P```-PA``#`Z"W^S!;\F=>ARA^6E^NZ9_OZ]Y\':Q@@
-M4O!T!XV;TCB]EDE4)]*893N):T>R,^5-03\Z$&=%WXQTN\6&W&[T/.YU\;;.
-MVY2SF;JK]37-S''^OB?B=K7`TQXF\P9+)WJ=#',<K"'5T$,QWA_KE^7RG2?B
-MW6IDY(5M-'W"CZ6`GJT@6U'2N&\[WGX;O,FK\:0JN-WXK5@DI`5Y_(UJS%"V
-M[<<,_*H<EZ+I0L;^7>,E32D5R<-R9N10@.=UM]93$[=&DT<#`&P```!L````
-M`@```$4``&B$E0``0!$``,"H`0'`J`$"`?0!]`!4!CG@B:6!-?9-5KPR'X?L
-MA'5-+B`D(`````(```!,*0``,/$OH[*F#T8+(V[/3X@6B^YZ%N&%;(C]#9?<
-M%FI^$$.;?^VA_64^_3KX9?,M4Q.W1KIB`P!L````;`````(```!%``!HA)8`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8YX(FE@37V35:\,A^'[(1U32X@)"`````#
-M````3"D``#`NYS>V+=\#X,4#5U'H0U')L!TQF-G0)+(%/3U$+:6MVZP]\)IO
-M_LQ<*REH]E,3MT9+?0,`/`$``#P!```"````10`!.(27``!`$0``P*@!`<"H
-M`0(!]`'T`20'">")I8$U]DU6O#(?A^R$=4TN("0(````!````1PA``$`)R;'
-MM7P=QKU<#IYPWSKYE'O6V]_"J9`@.I'O%]#*NCT@_:T68#`@77.%Z`D[:U`5
-MO\E4.O`^&&B;[9Q@TPL!0@P4ED81+2(4/@..@'^\O+D?:2A\X`ZGVE%JX>0(
-M,L*U\JX2P)%(Z30L\9K<9AUY=)=TN=J6D4HOX&]Y1Y.\53IK\(+'''-0(9$B
-MJ#CCY\O&\!Q'N#?&-E;V^</WZI/]/[#Y4Y01I)!($OH()^+"0RLNZA<=>,&0
-M)23EA@]!U-IS#ZM,`'C5*=0(LTIRF,M[$BH.*PX:)1*7YUGQY@YV++V4<Y*9
-M;W*4PLKX_FN_P>^I:>0P=_%O;T#Y_^UL4Q.W1OJ)`P`<`0``'`$```(```!%
-M``$8A)@``$`1``#`J`$!P*@!`@'T`?0!!`?IX(FE@37V35:\,A^'[(1U32X@
-M)`@````%````_"$``.#?H0)2Z5RF1?37&#$T'Q<9:=O,T89,JUE/[WQB:+W/
-MUS;;Y#NX7LZH*SYFK&MWR[8U%GG<A:;XB;/OV5*:?Q'RAM[%.^O5^EY;?O7(
-MO=&KS5K<UAXIA>`1G+U`UDD^(\C'4Z;F4Y':>1_<S(F;5ZUEDR+2"1GS$@]K
-M_O=>/?]0;T6ID>180DE6;[<@P+2N`_W3>TH&2*,LUY&$6\R7*T8H&^=&`7QZ
-M_[(+OO=;T_9>.MPG@::5*Z$8.#>,Y(::S`8&-]HOT+`C1$_6NB3@6Y`7Q+'M
-MA-(J8V)LL*A#4Q.W1G*9`P#L````[`````(```!%``#HA)D``$`1``#`J`$!
-MP*@!`@'T`?0`U`:YX(FE@37V35:\,A^'[(1U32X@)"`````$````S"$``+!Y
-M5]+>]%04E6R_/V@AV38C8;?@?G(TUR+E@H8!!BDV'0@GC/Y4'5SUS!*J:JJ/
-MLLZC&3IH(NW=.,[P=2$:05\'M+"1^K6SA&XVLWS?^&L\)$?8TM6A43!]`+F9
-M:F85;4`&&+P2ZS6H/3F.]*`=J$_IY&U+V9WT94ZDQW2\G%`R/$9!+8K17%"2
-MSY8M:T4HR=R%(@?J3;X@?BU:X?3._H:7A)(RE4U(<3X`<'H&4Q.W1GF[`P#L
-M````[`````(```!%``#HA)H``$`1``#`J`$!P*@!`@'T`?0`U`:YX(FE@37V
-M35:\,A^'[(1U32X@)"`````%````S"$``+`+:Y([$X")TZA%&IM3M$L:C4%+
-MM>_Y1$O@[C/=C'^Z*#/+AUQK"RMN!L)]D,DY,S6<$0%AZV+&/E4=I?>Y2S3#
-M@17Z>(7B:?%B7R0:65HH<S^>H#[(%A0WH-V:MG:\.!6)R3@82DEP7>?B9/1'
-MC+6;Y`[.IKSZ>XP`POW(#V3P&Z\3.&(07+ZX,P11C1?)M:H!8__B]TO2A'12
-M]+!J<S-4<&>0:E4/":_-2L-$4Q.W1LO8`P`\`0``/`$```(```!%``$XA)L`
-M`$`1``#`J`$!P*@!`@'T`?0!)`<)X(FE@37V35:\,A^'[(1U32X@)`@````&
-M```!'"$``0`SZF?TBQ((42VCF90I$7-=_#-S"'/4"HX2XR!V]1LYR8\$MS[G
-M)D60BF39!7URKV3R7"%JA-Q9,IB:GT$F-1G6>6EW;\X^QNO/1JTSY/S.^JR9
-M^>[RU`7E*E#!*3DI*^<Q9-GP[XPCY1&PE)2JR[:!9#K,F8DSZZ.-ZX36XWY_
-M],)Q^:Z-.<+SYE)"TOZ&XY/[3K+0[;7$9I3D[D2:1JOWK?1.P?<;SYYA!U0S
-M/X%I<4;2<A8*!^Z7(QL'R(/GAU46%72E>RR'K13_H!B=?X@13HO4#8S-:"`X
-M]&@2FE(6A6*`F4/;KB[,M[>2U#/G;VZ:/*/XKT`%8'47BKI3$[=&C>0#`!P!
-M```<`0```@```$4``1B$G```0!$``,"H`0'`J`$"`?0!]`$$!^G@B:6!-?9-
-M5KPR'X?LA'5-+B`D"`````<```#\(0``X*:$GTO/99;_BNS"MV=)M#'G!6G0
-M;(+8&0!]J9RKITQZ!US]1Y)[#7<;^J+(:FR;)JSXQ<T#+"?=`CD42=;MG_S$
-MU27Z*E0NO%(E]\`NWF*=R3X.FH0M;G-8SK-]S&:IAH8D0R5*;$-*A'X9ZU=V
-MA86G'[+:<8X7^19?IY40/`EZ;Z883HEH7Y3TR=S<,@I+H62E>FO9PV#`E]:D
-MDC;82/K&X30UC_XIHW7\9QQR9K[WZ&C3R^`7DS"9I:%/.'/(X9XO>&%HFS&S
-MT?>@C#O>2<H?H.]9\(IR2>OQ8_M3$[=&+?0#`.P```#L`````@```$4``.B$
-MG0``0!$``,"H`0'`J`$"`?0!]`#4!KG@B:6!-?9-5KPR'X?LA'5-+B`D(```
-M``8```#,(0``L-`(:<&G5A'FE^KA`IQ;X:-0/X]M3$W@##_RW?-O)J[F0&:3
-ME;CVF#"JCMIVKACJ5J[]]M=U?YWC)FI]C+`0*)\WHOJGE]@U[Y10O(:@L@69
-MU@L@5Z:>8F5G;W);M9M??;>\H5P<I8:QR4%^_Q(D+VJLV>-7%2UOVV+/<=:Q
-MNH[S<"[!P8"+G5@5K<2HU$%]2UXL"`(/%DDT\DOMU9ALIRHW<V-ZBUO?S,=]
-M\/%3$[=&C!8$`.P```#L`````@```$4``.B$G@``0!$``,"H`0'`J`$"`?0!
-M]`#4!KG@B:6!-?9-5KPR'X?LA'5-+B`D(`````<```#,(0``L-[F86Y4H6F$
-M4B$H'DIA0;[EQ%=JQRP1I)^DKSR=]SL:!NYTQ0GEYVB>PP03L"SP49,T8MY#
-MBI_&/:1\3ZL&)NN^2R;FY8[4)O`N0XJ=E^;/V'E?!WS#\;U8D8UM2SD?DM-X
-M''3Q/+LLOPBE7#%A_V[C,/6Z8>@1$=\Y,^$#1"N%),7\J(0<8K0/5FC?'8).
-MI,U%(+FXH22IB&)+<408A;QB%!,^92JCW(,T*J53$[=&AST$`(P!``",`0``
-M`@```$4``8B$GP``0!$``,"H`0'`J`$"`?0!]`%T!UG@B:6!-?9-5KPR'X?L
-MA'5-+B`D"`````@```%L(0`!4(5*2!;I=X-_N^V&=3>?R5\YJ/"0\,>\+XIZ
-M)<BJ%W%`8QLXLN;,\^IC1@.J/C#JK\,H7U=^I/-^7,^@C(@C<[Q#ZO=Y`8-.
-M;$[K^F#HX;$9K:8O*V>X'2.P#9NJXV#*2"GU!O\S+!]AI='[WA((=:+E";:B
-M[P1GKM^FI%AO&C'F@>H!3=EB1,E(8M&_QC!!N\EO@))I=EX.*PI_`H"\U085
-M\YC8.O[9M#6!23V+SG.!\@]U]EM&>MUU%F/H$GQ5W,EWXJO0&B;)/#2OO8A&
-M0EZIVZZY#>HJ&[6_KM2T:AKTOQI$<#VJ5+4QP9G&?C?)YRN_@(4UK\=W<NZ)
-M&E280VU2`ZS`R!]C917@()!G5;ELLE"'=#1T&BE97W!)SJR%]ZP=*(K>NO&P
-M'@+71OF#V)*CL7+A2S+9,LVS/0GH%[Y'ZQ.T[373#\DNB.U74Q.W1D%Q!`!<
-M`0``7`$```(```!%``%8A*```$`1``#`J`$!P*@!`@'T`?0!1`<IX(FE@37V
-M35:\,A^'[(1U32X@)"`````(```!/"$``2`"R;SQS1:A$#*QRJ"K>TQN-)ZH
-MT=)+<8_R,'2Z('72,<TGCCZ2(O8_N_8OL4@V?"+@V7$P-'$<!2.)"=>0(+OI
-M,3?0(4[:494GFS'//.+6+/G/C!?)XHS(#_OV,FBI)-@B$JA[?>W+Y]Y*`*E1
-M,5_G0D":]9O&IW>8U2><*SJY%M@D`GYP6TG-1<.E\B0=>4RM/I7C\M=O`_0O
-M^=+P5Q8L)L$`/.RLSTP?#RG':;KE\6VF3)S%)N=>.MHS(_V*S]9M6])]RY0%
-M=5!H!*[KU;RV>CX>Z60`BQL>;9C&'4"WZJ:JZ\E.GU$:)+X4>Z@H)*QI80NE
-ML1M\36G6I->Y$TL&\(;?&J"DSHC%MR`;OOM>BA>^@;^09?7-*[0L)E,3MT9`
-MF`0`?````'P````"````10``>(2A``!`$0``P*@!`<"H`0(!]`'T`&0&2;G*
-MVZ.-<:0]#_.X#K$=WJ\N("4(`````````%PJ``!`_<?D8-S^9S'[!;U@*:`N
-M[%.`AZ9,F')(L0TZ[I$RLE5DC=C%U6=(3GBSAZIW&>1%,_4KL9P=T%<WMY"U
-M4Q.W1I"C!`!L````;`````(```!%``!HA*(``$`1``#`J`$!P*@!`@'T`?0`
-M5`8YN<K;HXUQI#T/\[@.L1W>KRX@)2``````````3````##^")<?^MQ1]RU%
-M;5NHN:OL&`XITJ"I1$LKFW68(VK`*JTA=OV#2KG`$Z`Q<E,3MT:$L@0`;```
-M`&P````"````10``:(2C``!`$0``P*@!`<"H`0(!]`'T`%0&.;G*VZ.-<:0]
-M#_.X#K$=WJ\N("4(`````0```$PJ```P+R9-__8XTO!::$#9P+?%LD=XI(HI
-M.>B!3`MTC"W/2932GVC5H%8A[:9&FCE3$[=&E,`$`&P```!L`````@```$4`
-M`&B$I```0!$``,"H`0'`J`$"`?0!]`!4!CFYRMNCC7&D/0_SN`ZQ'=ZO+B`E
-M(`````$```!,````,#'FNS2H_3+:SK_;#*\KQ\2R=)I@<']')I][:=X,"E*7
-M.^?FO+?!D*PTKA374Q.W1E[D!0"8`0``F`$```(```!%``&4A-X``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=E5=XOG8,`3-H``````````"$@(@@````````!>"(`
-M`'@```!T`0$`#`/\``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``288R*T==I$],
-MYW2CT<^>PO-$F:EK#W74K'1D`6MK>KU`Z*:]X.ID+A8L4-C]H?8HQ;X`X3?9
-MXY@O@R4QJ1R3^YP\$(FF=H:VLH9N4$_8KLQ,[@Z04D_\*@G.5?]R&?[/6'20
-M>:*_P]Q^5H^$?7^&X'IOY[_+0XM3PU0J<T,=>V4I```D\%P.FD)EE]EI*F-2
-M#VOV")1ZI5%]C#]2P3.PT?&CQE0I```<``!`!&+YM.\I509E)!?\[(>@*U#;
-M?W-F````'```0`7@R4I5#Z+VSCNVHR$B.:'0>M9K`%,3MT:7\P4`7````%P`
-M```"````10``6(3?``!`$0``P*@!`<"H`0(!]`'T`$0&*57>+YV#`$S:````
-M```````I("(@`````````#P````@``!`!@````J!&0YB44-G$1&)P>(LXS<&
-MKJ,7/E,3MT;<`@8`N`$``+@!```"````10`!M(3@``!`$0``P*@!`<"H`0(!
-M]`'T`:`'A57>+YV#`$S:```````````I("((`````````9@A```@``!`!@``
-M``J!&0YB44-G$1&)P>(LXS<&KJ,7/B(``'@```!T`0$`#`,```P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``288R*T==I$],YW2CT<^>PO-$F:EK#W74K'1D`6MK
-M>KU`Z*:]X.ID+A8L4-C]H?8HQ;X`X3?9XY@O@R4QJ1R3^YP\$(FF=H:VLH9N
-M4$_8KLQ,[@Z04D_\*@G.5?]R&?[/6'20>:*_P]Q^5H^$?7^&X'IOY[_+0XM3
-MPU0J<T,=>V4I```D\%P.FD)EE]EI*F-2#VOV")1ZI5%]C#]2P3.PT?&CQE0I
-M```<``!`!&+YM.\I509E)!?\[(>@*U#;?W-F````'```0`7@R4I5#Z+VSCNV
-MHR$B.:'0>M9K`%,3MT9J)P8`4`$``%`!```"````10`!3(3A``!`$0``P*@!
-M`<"H`0(!]`'T`3@''57>+YV#`$S:7@3U"^M8E_8A("(@`````````3`B```P
-M````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H
-M``"(``(``!_0S:\E@C9=.R!>4*[J-B2]&&ATYE,F?N'5+N=\:]QO%9;?F5^F
-M1"7$X2,[?5VXL`KO;-#_+0T%9J/!+'9$/<(0G-_((NL'F_1@V/H3AFMJ8Z*%
-MY(&38CU#S3>2GQ4R036""X-0*#%HY%W$Z=>U9(!("S&FOG6'L:?1Q$XD^E)F
-M*0``)%+-/(X3TCPS\'L,PQ'HC<L;2`N[S3"E`AR<"!,+M-0$*0``'```0`1:
-M/L06B:2-%SLST2+"*\6_#;#N)````!P``$`%*DW@P+`_#K'[I`9FF%&)[U#@
-M2WY3$[=&5U8&``P!```,`0```@```$4``0B$XP``0!$``,"H`0'`J`$"`?0!
-M]`#T!]E5WB^=@P!,VEX$]0OK6)?V+B`C"`````$```#L(P``T+O:U7]V37:\
-M6F+.4.7"XA>@5I(D&(QV$#2'`QN$GIPU]M@GIUP)%3_O#RMR\=_0(B7H<5Z'
-M7-C&=5DB,.<NAOF?>0X>-03A\$Z\[5;[()I%!2M-^*DW"P=/BKJILES/`W44
-M09PC(T;6,D,V\T+:`WJP)Y`2EXK_38(!<%7?<OE\7H\Y9JSUU0]FQ+V8T6^9
-M)]7P&"CP'`LJP0F+$91S"(UUL8[C=03)J!6NQ>%>@'OX8?)F'X*`K+H`PH=^
-M9DB\B"Y=M\O)B%GY&PF>,5,3MT81;P8`O````+P````"````10``N(3D``!`
-M$0``P*@!`<"H`0(!]`'T`*0&B57>+YV#`$S:7@3U"^M8E_8N(",@`````0``
-M`)PD``"`<\I_-,A"V$34L'CWR3(AT<$E$]:U+HJ*-_9XXY[KD?9R]^ONI3XI
-MV522+^,,#+'$!/JTSZB\U,U-%;!I3:^=VE)TPENKI;W(QO;_"E7_%=,^459(
-M:.^ICKOC=V)]EB[CN#0#@9@T"KU5]RKQ&[UJ#3,N]-3PMC]I4JR32E,3MT:2
-MC@8`'`$``!P!```"````10`!&(3F``!`$0``P*@!`<"H`0(!]`'T`00'Z57>
-M+YV#`$S:7@3U"^M8E_8N("0(`````@```/PA``#@A<ODZ]!'\THUZ&\P#@T&
-M<!W!IO=K9>0I?FV"(S1B&>8W4@.'\.W//:DV^%V1H"@K>.C*V&!UV9-8YL2P
-M(3H"[F'/R>QZ;"AT_!]]V2`W[ZUN#.SW_;#Q%9&:)$]KQ&E>9]RD1$_\JHQK
-M]:U33(&7P1^(NV"A7=/HC%5*Z-$EKDIPP>H3ZYI-'8_:O$>=_/O;%.:FT(W!
-M&_;!`\`HQP%A?]_]RM/";;`;];%^CA5H_]'=AS%8M_M#%\Y9=9\P^28]YD^M
-MM2@Q.@*(-VE`<.W7\S5C^.>4S?QMQL(!OE,3MT:/F@8`_````/P````"````
-M10``^(3G``!`$0``P*@!`<"H`0(!]`'T`.0&R57>+YV#`$S:7@3U"^M8E_8N
-M("0(`````P```-PA``#`DI('#01M"]";UZI734@D0N=ZGM*I%_;D4"1O-$B9
-M3NH0Y`UZ]AR^&U$)GE[S&/%%R_7@N<\D<3-(%W"RA9Z]1'@9/C\Y\K0OD/@Q
-MZRCFL>)CBJS/UY,N:"FD]J`:*#Z#GS;AUIQB`M91LZ"=W"BI,S)VC5.6X_R3
-M9,,SO`,0R?;.4^^[WH6MK9/+IE-#7+.&]A9"\NP+BOQ[&ZZ!*,/-0#0;NDXE
-MDOP][;E-=K,K,*<8CR`,(H,&`*DM"^53$[=&%:8&`&P```!L`````@```$4`
-M`&B$Z```0!$``,"H`0'`J`$"`?0!]`!4!CE5WB^=@P!,VEX$]0OK6)?V+B`D
-M(`````(```!,*0``,/=`%=#\,#\L7?!&NQN\1:LL&/`A!4VZDXD'/&RJ]^O2
-M)="D"?</42;LG`FJ4Q.W1D[!!@!L````;`````(```!%``!HA.D``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y5=XOG8,`3-I>!/4+ZUB7]BX@)"`````#````3"D`
-M`#!R^#""&8AX>;KP)B-WV!\")=;Q.^I51K=+!KN>N\QR9$46T>4<IC&76-:0
-M+%,3MT8XW08`/`$``#P!```"````10`!.(3J``!`$0``P*@!`<"H`0(!]`'T
-M`20'"57>+YV#`$S:7@3U"^M8E_8N("0(````!````1PA``$`OZK"&-.S^<)`
-M2XM)I+/3^T`;=*-#!9=PHQH0*,I*7::O\I.=;ET&/+YY'JU`YLUMP^K]SZV0
-ME_#\HJA_,,W)!3(6#K5-N$20#[*)-HENI+EWICKPK+[78>H\C?@80GSM+CH6
-MG)6=A^Y=P6XOW@\T8/E`JWNL![2&-T5YJ7(+KB,RT70Z`.P/AAZXQ-$4@&A=
-M4VSCF"++%8*'?<?4%:Z!FN228DLB(1.UXXT(+]Z1_=CN2[WWE%EL%8`'#QO*
-M/):!Z/S(KNV_7&1N??%=0U[K4%A:-4/7U(*/5/X,^QH[X1R?@S&GLC-TD0#>
-M<)9@=T-;OY@"48#B:>KIDJ_H4Q.W1B'I!@`<`0``'`$```(```!%``$8A.L`
-M`$`1``#`J`$!P*@!`@'T`?0!!`?I5=XOG8,`3-I>!/4+ZUB7]BX@)`@````%
-M````_"$``.`5?K+-5U)!@]+\*/'528LD"D&".6+Y\TT/0[%R775ZIB><>GBI
-M!-3TFL.:'E]B6%+K=>(\]C3M3XWQ'A8VN5<JZ'?)*_LXI^J]`$?D;^52KNKN
-MD`$.@G%C?XJUIO\O'VJ>/"=G\0D`UOL0M#^Y0,3</T2*=9R:E<O6S"&WK[5M
-M2#\H:B/4X,)G15(+'6\P:S`+/S-'%)6*%;E'Q"@1"R.9[O2M=GQZ>"UBQ4$N
-M1K5U':A+S)3K:;BUR!S7\_!KO$@6)-G4R\'0_T/F6<%:!!P+%6%W&+A=[[)Z
-M[P@14Q.W1KSX!@#L````[`````(```!%``#HA.P``$`1``#`J`$!P*@!`@'T
-M`?0`U`:Y5=XOG8,`3-I>!/4+ZUB7]BX@)"`````$````S"$``+!6%,E7DA&1
-M#=#TE"4Z9%5K`@UO,?5O"]KW3>$G`!P$K1N$D0=Q)5<CY'X^5.5X#`A]/<8M
-MJ>J%0HF&ZFGCR$81&IMN:7@W.5:Y"AIX8?VHI<C7.R%.2LF3\BE.\D)'4YXL
-MW*9/%1J.YG.C%YO<.XQIJG(.<DJTH1;K5DK`<\CH?/V-;,2NT&XRS^M*7(HL
-M(%59D7B=UJTTU$?]#ULA0M,)32F*1ET!"#W=/L@34Q.W1B$<!P#L````[```
-M``(```!%``#HA.X``$`1``#`J`$!P*@!`@'T`?0`U`:Y5=XOG8,`3-I>!/4+
-MZUB7]BX@)"`````%````S"$``+`]^D5W_3;<'9OVJWVFR64:V.^]#;S)E\]M
-M9NT&S'OZB"J4%.[_SE^U*&"`BX/SVAC\4A]01_J>$$B=C":*(8T*WSHJG]R4
-M5-`JTB7/P5.S-%ZG'6K&>"E:DP>I`XQP,.'*-`DM2V+I#L^A!E)(,<U?Q75Z
-MHY)`EV\EPL/J70CQZ+O#3>G"T+SBYCY9ASN>57E:U53*T,^V4>!'D<=34;!$
-MU.]&R@,_K08).AD[4Q.W1H8Y!P`\`0``/`$```(```!%``$XA.\``$`1``#`
-MJ`$!P*@!`@'T`?0!)`<)5=XOG8,`3-I>!/4+ZUB7]BX@)`@````&```!'"$`
-M`0`WXGO"]T;O)N636JH!T]#F=:]1V'QA*D^1R<S1:MT;SU^Q<=]/[E7(A?,J
-MR,"5R_@7D-OUIZ!T/,^(\'.3K&E+[DZK*]U]-C5-)U<G@/F+LE_[[4`DRI2G
-MUG#:/N!!0RJ`B1I3B`XOQSVUI?=+>O4W,6#8$6F&,@0A=P76=?X!S8<X]:>U
-M7!Q:.;F;E%\/&>_V!O![G-N5!4U-ZR=*'\_\WQOW9QKW+4P7><]QH/8?2FEW
-MLCK]R=CP7#IY7Y%>.F,3_S$E'X5:?JNJ69MD_]OV<8=U>Z4>#(DI`!S[A":3
-M%9$V8!*YMFPCB],&_ZPHG;73%B/YX`M!#?77<NE3$[=&`$<'`!P!```<`0``
-M`@```$4``1B$\```0!$``,"H`0'`J`$"`?0!]`$$!^E5WB^=@P!,VEX$]0OK
-M6)?V+B`D"`````<```#\(0``X%Y@GK[_HZVCQP5_R:R]<G7^6`]I:3/Z^2%U
-M)DE9K"#I^2:_!8<2_D!7_^X-,B?N^A8G)R0ATN`?F/UW9^Y6`(/8M!L4/";S
-M7`TS^'T%:^#_149<I"P6;,,K*4+0`:<I<QPG/F@("?G=1BA)!*$9'FR(5PQ6
-M%@VXG#3M:X,+)O#W^\0:MX+;E;+B#H[_PK[RQ\/\T1I[&79('2,D<$ZV`K<A
-M0%[*M`PNP=&<*C0]VNF5C["K.@>$.MNNFV;U[YYNB)6Y_^#9(W&.V[4"'54<
-M467T<(?OWH_`L5G:VA]3$[=&858'`.P```#L`````@```$4``.B$\0``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KE5WB^=@P!,VEX$]0OK6)?V+B`D(`````8```#,
-M(0``L&5J4,_Q@&H.R8I#,<L-D<A:<!RF3]$_S"D?"C/4C3.&*.*H.G-L\&)S
-MFWBN"@?D^UCI#L,Y=,98Q&K@<="43XZ15E'O59U_891;USV:^P12>22<=DE3
-M=(R5S)P>=WDN1A0F3@)G)PQ[0=&]";[7\Q"+3*+=+5$\;6$#ME0?)HB5B.IX
-M,7NY;IZ!EN(+W[<C37/DCJ*;-M@-N/,#CO`1=P9H[N^(G_WNA[,]<PA3$[=&
-MYWD'`.P```#L`````@```$4``.B$\P``0!$``,"H`0'`J`$"`?0!]`#4!KE5
-MWB^=@P!,VEX$]0OK6)?V+B`D(`````<```#,(0``L":ZB]HAB-OIU:(U8EZZ
-MFT3D>Y=8O-M-784^D'4EM8-D1:/ZS3'MJ<"15`'^(0F+OUX,!-UNY6[,,)A+
-M9>,"3BR=HCW4P%/Y98"7/.!B*;T[+;_1-=I[U4;>V.Y%SX^;CNYUD>/#(!L)
-M]:$:;*1)R=]VDO7I,/>T\D:?0NXN+J^91Q=Q3G2_T2Q!;U(*A?L9%GI[9@`#
-M#\=+Y4J,VG5@5P>S-@'])^7D@<ZM@6=3$[=&T9\'`(P!``",`0```@```$4`
-M`8B$]```0!$``,"H`0'`J`$"`?0!]`%T!UE5WB^=@P!,VEX$]0OK6)?V+B`D
-M"`````@```%L(0`!4*6<NBL%OM#HJ2L2\.A!S"F7AN9%OD*/`^LVXIA:N3U5
-M<D>J2%/,7`=J``+S:#`G'`PW!_U5"0"D>CN@-KXLL_/J8-\>A\!L<_@>GL7Z
-MQ4=9]:\@Z<YU]&5/LEF<;NU],%';JZ(8##.[XG%3/(Y7.8--S;9_(XZ]T(^<
-MPA`&E60JX$*WVR73X'#)`1WD9:/GT<ERV"A_813JX5<YR=CM:%]9X;UUP&1X
-M2@HK&A#U`'RY2OKQD;+L.WY!Q]W0DWH=F!=WW-U1C4)S(HAL,Y1=1"].7S,1
-M/#KQH(>9.J:)O;KB.OO^#8@FG/7Y0@\;":&NG:O24*MX:YMN_T=MF'21D&((
-MM2.>B89_':UVW#=1FF/]*V.;=3/IZ+G,1%1XPISWVZ?M.A7?,P/:#HKB!6NP
-M\I=R<&_>:Z-,!BT$(4YQI/T?$A-`0AZ+:=4BULUG4Q.W1K/4!P!<`0``7`$`
-M``(```!%``%8A/4``$`1``#`J`$!P*@!`@'T`?0!1`<I5=XOG8,`3-I>!/4+
-MZUB7]BX@)"`````(```!/"$``2!"A^V[[>)AM6`$^PD@'C:)\7WBLMZB4^?H
-M@)K<'8"2*GX@R"$?!)NW$E+M0C:9OW_&-B,V+=1[!Z5OJ$7W/36B!8O4Y$=:
-M3L#$!YP4!Q=5!U9[Z`/8X#%3&.8?&:2XELX;K+1%M*Y(5?7@0?.,7[T%IK;6
-M[F#*L2_E<U=:UF71VO,P&0%:XF$P?_2?B7JGN]MV@8&U4GXH,:H4_QC]\:WA
-M$?+&-$/9Y;^6<3(JD](X;<&0P2IXI]&SC^=\C%^APJZHLW(H6WNQ31EKK822
-M?2$2U/K_`U2T14%GDH^&.3OK0J20/]_K'A:J*5K0JJKASL=7ZYNTUD`L:*&N
-M3,IL3)D9=DE&/]I')(R/KSBRZZQ$.EV_#C=Q/"2JLN?*>E,3MT8^_`<`?```
-M`'P````"````10``>(3V``!`$0``P*@!`<"H`0(!]`'T`&0&28WO(75U9]WI
-MP#0ICL'L4:<N("4(`````````%PJ``!`!B(/1R[E0*W2]!5-5U!X0U166[L=
-M+@$T8(<F3JWH'UUJ]J,#;A)X<,"'V8M*J2$7TU%8W/H=?-4*8</N4Q.W1L,'
-M"`!L````;`````(```!%``!HA/<``$`1``#`J`$!P*@!`@'T`?0`5`8YC>\A
-M=75GW>G`-"F.P>Q1IRX@)2``````````3````#"OJ*Y]T\F#J?-2.EZI>U5'
-M$W8*G:NOF8_WXVJ[*^'_Z,'W7@#ILG$=QUI;H%,3MT8D%P@`;````&P````"
-M````10``:(3X``!`$0``P*@!`<"H`0(!]`'T`%0&.8WO(75U9]WIP#0ICL'L
-M4:<N("4(`````0```$PJ```P*OV,>Z<":U=E(>-66U4ZL_<V'@URZ!+"='-?
-MT$.`=1CR>&$=T-PCRETVW=-3$[=&8"0(`&P```!L`````@```$4``&B$^0``
-M0!$``,"H`0'`J`$"`?0!]`!4!CF-[R%U=6?=Z<`T*8[![%&G+B`E(`````$`
-M``!,````,'J9=O)XRN5QR-Z@F,;N+G#4!G[W1T7L&3"?#`(XE,_ULECU%$%V
-M3PBT+Z$44Q.W1FH>"0"8`0``F`$```(```!%``&4A/T``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E\4$]F5`$Q`D``````````"$@(@@````````!>"(``'@```!T
-M`0$`#`/]``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``%)V&5+H[ID76>A3Q-HR8
-MV8Z4`_!VBQO<RHW[QNW'-+M#F%VI,Q\`J43U8>Y`OXQ(_$JKC'PBU*FRK>8,
-M'$2";R`/TTFQOEKLGX,/08\M+K'&E%5A&.T52!E).ST9[&];9<*2<9/O+HI7
-M*'QM=SG;U@Z^`%0&1$OD^\IM\,UR2H(I```DTW7B2[6M@G9R2$=ES!=2[V17
-M5*"3.0EPTUW0&S4WM>XI```<``!`!*Q^0"EV"-2^SZ.&(J:(]]-P"6;_````
-M'```0`50_.*4G#M&CFZ?OA74`=&\+*C3\U,3MT8&+@D`7````%P````"````
-M10``6(3^``!`$0``P*@!`<"H`0(!]`'T`$0&*?%!/9E0!,0)```````````I
-M("(@`````````#P````@``!`!@````JE2,ZLVU-C>:KO(Y*NE,@_5>EN]E,3
-MMT;_0@D`N`$``+@!```"````10`!M(4#``!`$0``P*@!`<"H`0(!]`'T`:`'
-MA?%!/9E0!,0)```````````I("((`````````9@A```@``!`!@````JE2,ZL
-MVU-C>:KO(Y*NE,@_5>EN]B(``'@```!T`0$`#`,```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``%)V&5+H[ID76>A3Q-HR8V8Z4`_!VBQO<RHW[QNW'-+M#F%VI
-M,Q\`J43U8>Y`OXQ(_$JKC'PBU*FRK>8,'$2";R`/TTFQOEKLGX,/08\M+K'&
-ME%5A&.T52!E).ST9[&];9<*2<9/O+HI7*'QM=SG;U@Z^`%0&1$OD^\IM\,UR
-M2H(I```DTW7B2[6M@G9R2$=ES!=2[V175*"3.0EPTUW0&S4WM>XI```<``!`
-M!*Q^0"EV"-2^SZ.&(J:(]]-P"6;_````'```0`50_.*4G#M&CFZ?OA74`=&\
-M+*C3\U,3MT9.9PD`4`$``%`!```"````10`!3(4$``!`$0``P*@!`<"H`0(!
-M]`'T`3@''?%!/9E0!,0)6(6HST?Y)^4A("(@`````````3`B```P````+`$!
-M``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(`
-M`$C.8B<Y#;L>FN5)W4&!Z*3%N;<Q#W`-=*U`085THN\Y\ZM=,WES#9>[E&,=
-M1F]KW$R]E<YF,R#TBJP3>-W_2ZHDU<#!LL_W+;7&\/9PB7]@<`KE761Q&F4O
-MJ:I`%UUT`T&^(@-'G?[R_-R(20^:J:WL:QL'(;?U3P]%QHT^25TC*0``)(?$
-M##/-%47$Y*4Z8`9%JE5]^08TZ:S[(12S$7\\RM1[*0``'```0`3F9OV1[@)P
-MG?>8+;*D'6R-_Y.*%````!P``$`%+6HCQ8K-X#\E5=C91P]<;=@XMDI3$[=&
-M>I4)``P!```,`0```@```$4``0B%!0``0!$``,"H`0'`J`$"`?0!]`#T!]GQ
-M03V94`3$"5B%J,]'^2?E+B`C"`````$```#L(P``T'P@B6:(5M+R-P-;"&#N
-MRY(6U.*NT5+L>6IT"IM``*#M]Z[+/+`9/D13YZ174K350/>V/!='[]G>&/'#
-M,[F_H305ZI@:C8:6:>O2R0!Z:>"B@,H^I:FD9;[8B&T%%FF=(,RG0Y+P\-!P
-M7R40*5$^N$D=[8XQ2XF3F"!OZE:$/HZ)YJGYG6WC8I0[/Y<I>&C`_4/`D'1/
-MRMNC)[*+<%(`Y'+2'B/[IL:8Z=TWH6U#_(-R`/Q_^+[A99\!I2_G>!!R'E>O
-MV'?FB&?7_B^SL5,3MT8]K@D`O````+P````"````10``N(4&``!`$0``P*@!
-M`<"H`0(!]`'T`*0&B?%!/9E0!,0)6(6HST?Y)^4N(",@`````0```)PD``"`
-MQN`Y_5.Z!&D!-VPLIV1V2_(4A9TZNGV6(HR26*?=N<UL,;QX$@Q#FNMDB*9<
-MUQ%'"NR%',7<'>KF(/):9!`O9IKG+EE)(ZLIV*-4['A^%U:_49Z</3HQ7&WS
-M#P@9069]5+7:9MBF1$]BEE.V-<RH.I7Q0M3/-)N/*=*P"U,3MT:SS`D`'`$`
-M`!P!```"````10`!&(4'``!`$0``P*@!`<"H`0(!]`'T`00'Z?%!/9E0!,0)
-M6(6HST?Y)^4N("0(`````@```/PA``#@'D1E^EE$YY>&;J2`9TOFRL[]-(&)
-MP^ZR:5ZZ:%!9\9)S_+FV$P>WA"2)%-70T^'';:^^MCHW;,B,+$8&#:(/3SB1
-M/,!Y:X>GT<!VH>JAJ>[]'#9+#3A33'S/G-4<[;'Y<%ZR6YH)@*P&'CXL+6*M
-M=6T(WR.ZZB#=%#RT996BN7K:7,;4.%@P'!R+*R_!F-&'^3;B;L>5K--GP0K;
-M\B;;C71L3ZF,6Q&>+9VXM=H,2X3A'EA#VT$8]7WC+-Z\K]\SSKOR$(U7+\^'
-M!6);/_0N6D]B=G>".^LL6_'>,5,3MT9;V`D`_````/P````"````10``^(4(
-M``!`$0``P*@!`<"H`0(!]`'T`.0&R?%!/9E0!,0)6(6HST?Y)^4N("0(````
-M`P```-PA``#`=2^E\.6\1X9.!3D;Y;/(*E+5;H?^_!@@?0:ES4M-P./PC\(E
-M-'BA2=9Y7I#6>;;:2=&S;;,>%957#9..APM@FXA&0]GI1,"GW-DGA"7X0Z]A
-M%=A`P0L_R)NI\4!V6!$6F#13,Q\4E:"-O::HU"#`5F3JJ3KBM^%18[ZXD/UU
-MD-B@#8/GAS7IE;[9KOF86,T!]/*VBJET8C,IZ(:M(VW3?Z_!=I('%^R+<F#H
-M`Y^MB7&R@:D[I,=.$*)QMU]3$[=&E.()`&P```!L`````@```$4``&B%"0``
-M0!$``,"H`0'`J`$"`?0!]`!4!CGQ03V94`3$"5B%J,]'^2?E+B`D(`````(`
-M``!,*0``,+T;CWD/4@MJFRA#OA^YO62@FIA@SBY<[MS,I3A/PR!JF!7WE[;_
-MR0FJDIU,4Q.W1O_^"0!L````;`````(```!%``!HA0H``$`1``#`J`$!P*@!
-M`@'T`?0`5`8Y\4$]F5`$Q`E8A:C/1_DGY2X@)"`````#````3"D``#"G=YQE
-M+)FUHCKLC'!58H8F`+,>P/?23@7\4#[6[53&/[H!;4;H96AS\_PX;E,3MT9@
-M&@H`/`$``#P!```"````10`!.(4+``!`$0``P*@!`<"H`0(!]`'T`20'"?%!
-M/9E0!,0)6(6HST?Y)^4N("0(````!````1PA``$`\&A1:%,X8#&R[/OU?%>5
-MVBH.21L+P8V<9"#M?&-MCI&I[A!:]T[K_^]KE)DFM)A4#JE;',/%0@H4R]&2
-M.X88'T3=,UFP+N_-S_QIY-G?<G9A&0ZKBQ_ONO,F4[J3.N7N,`(U,!>-V07<
-MCHO/H\-IU8!(AUU[(S^>5K?T)-"-9H*WD?L:#1.=P2/S!\31$V.^V13/2C21
-M?33I"X+/&1[EIW<@@6>LD`;?G0W:Q4,S;DL(=?_A=?9A=YS7[3M9-)*1L;LU
-MCR:+0/*4`3E+Q7<$UCN*S3/LZ_Z0B@+(#O4PD*2:0:89\`DDH0!#38(GU#F'
-MXDT=#]G"<[71$M@04Q.W1@0F"@`<`0``'`$```(```!%``$8A0P``$`1``#`
-MJ`$!P*@!`@'T`?0!!`?I\4$]F5`$Q`E8A:C/1_DGY2X@)`@````%````_"$`
-M`.#$*A'E:S6"K\_4C!H0)1NK[6[)"63%-9H]>2B[MU+IK`LUUYA9[,/CPZC1
-MBN'.@?3Z-?FXXW*<7S3HFW;(-=+GCE0^W1P:%(&`[E)-(D.9$ZIU[U`>[-KC
-MD@LJ&=N+HHPP)I:TD];9.+F`]KV0.;!Z(K=P;"F"8Y&+-D'#U==8J&Y%>S\M
-MOC,[BL<4P-ZE)QVV<5!PZ+YD0NS&\$80"EA94-I8B"9$,6D>,%<B",?P&#?Y
-M+1\YT4G1%%(#(@RIES__X/"``K`-ZF'5E_%*GT]`T19D7HZ,0=$ZS2-`4Q.W
-M1HHW"@#L````[`````(```!%``#HA0\``$`1``#`J`$!P*@!`@'T`?0`U`:Y
-M\4$]F5`$Q`E8A:C/1_DGY2X@)"`````$````S"$``+!T>40M1YS+[#A77B</
-MK2^7:%'1>LNY6XQND[/P0\R0;+?%;\F0N9*O1ZZC;IAF1.&P2V9@4FV+3+UY
-M\6BCIF5TV58_%M#F0R"--[,D+@7X027S0C@9_.T4@YB182=*.,51.391]H^4
-MQ1N(17+"'/3T,UT!`$AEE->?A:6K1RO::<)Z!8!QV0>7#3/"M".H4;W9BB/6
-M(J1*J90#!7`\9*17@?S-<=6;Z*.UPH``4Q.W1LA9"@#L````[`````(```!%
-M``#HA1```$`1``#`J`$!P*@!`@'T`?0`U`:Y\4$]F5`$Q`E8A:C/1_DGY2X@
-M)"`````%````S"$``+!LFN)4;+S3#`Z1Q8\7-3(=)Z5XWY_0ZC8PK(/REB`!
-ML\Q/S`7!R_R90U!"(2`5RCK6&HA;W_SF*"<U,AF!(T4WTQ$9W_I&S46G(UJJ
-M&#9]`$%U*O]&AO$)/Z/+[C"*!_7?XY8`C+5?!QAGXS[NW\#I_6**'V9G$J(7
-MEHU9(Q.(N@49RS0):I&TEW6ZQ0B.NF+JP`$=J.MO+45'XHUW]C!>FPD;>2Z-
-M\9#L@MS?4Q.W1E%V"@`\`0``/`$```(```!%``$XA1$``$`1``#`J`$!P*@!
-M`@'T`?0!)`<)\4$]F5`$Q`E8A:C/1_DGY2X@)`@````&```!'"$``0"-,H\P
-M68_$0^!EI#ZQ@1!%TSUM<F19:"]1MM<L!QN=>IMV\LP$=@;U,=]GDY[T\X!/
-M>6/4[3-*[P!"$>U45%]CYP)8%@7.@%$')I[.,.KK_S=Y&%2"44J%9,+K!YN.
-MG@%[IA@YFFAP@'\^KL=L'Z\(WJ`^8,B@7R2C?9%#Q+M(D-"KKHQ-3[_A\Z;$
-M#Y?(,7BEFQ`H!>)H*!(N(@8C9JR2`9FJU!/;ZGCF7+QT@;GDZN:J1">T6'-3
-M`MK$])'KD&1F4JR@.G%J']VB,YT`KJO&Q;B#;MJJGV,;3H%]M@;S[JM'`!^T
-M:,<C&GV05Q:AFVM_"FX5=5`MV?YDL@]3$[=&YH$*`!P!```<`0```@```$4`
-M`1B%$@``0!$``,"H`0'`J`$"`?0!]`$$!^GQ03V94`3$"5B%J,]'^2?E+B`D
-M"`````<```#\(0``X+CWSM<F4NJ*H,RQ_V8+4C4/T/*S(#VW81."MA$R:K4P
-MC#U23?$(`0!%?9CJC([(2G&J24IQ74YT\\J@WP*B;4097&EDLS1>2!5"-GZC
-M!8<SG61M/2E%311@AC660F]AT#-YD7EWU>>)A<R3AC^=K-137>2HN_;_:)X1
-M!><J9ZU3_P6PWB5V\\B5-BA20=40^8510.IXN)@VK2*T94TDOI(L\XV,1"ZV
-MO=B>GA76JP['(3H>#$C911_D%/WB&[JI!D+T\X3-N16X0^UER5S34%,,'F$J
-MAZQDX+?4=/!3$[=&8Y$*`.P```#L`````@```$4``.B%$P``0!$``,"H`0'`
-MJ`$"`?0!]`#4!KGQ03V94`3$"5B%J,]'^2?E+B`D(`````8```#,(0``L*0(
-M\Q(G;-=WLK34R>P[L)O(^$U*YO(49R9U]-IVT0!AXQWBJ7X/=$0EUIY)7:+F
-M&G;V[XJ4P436\.<+!P3D#`R-M0FW]U8%A"8>*3[=VLD^\S7;&[(N9KNWS0F.
-MLU6<8HO:WO?AHO;B9EGB7&,B[TW:\@M]5I05I694&)1*@YEW##<1GOI944%$
-MR!=ZA-F]O3@"<U3A;SNNB?H#.W<[`=LP_,=P*6-\3ZPO'"=3$[=&C[0*`.P`
-M``#L`````@```$4``.B%%```0!$``,"H`0'`J`$"`?0!]`#4!KGQ03V94`3$
-M"5B%J,]'^2?E+B`D(`````<```#,(0``L*I'-8]_QNCE\BJ6/!<6\<-]^P4'
-M^-DDRP]90N/:\3T]*0$>-K"\IY<7?LA&ST_"I=K;:CYFM8AN)T3,$-MIYMM9
-M[^$QP9"4""!G%?]-S6=+R;"U2P+"QU*N,,\GI\7-9,FZ'A/E!_83]L$$#T7)
-M6,ZCS13U"8#Y1+,=T%VCSGA"!8?#J[\(K(^Z'=>-U3<CM0DI00"@G7L"QV>M
-MB62()!Q7IFK(][VXV&R,.$Y3$[=&TMH*`(P!``",`0```@```$4``8B%%0``
-M0!$``,"H`0'`J`$"`?0!]`%T!UGQ03V94`3$"5B%J,]'^2?E+B`D"`````@`
-M``%L(0`!4+!`<XOMC@)[.]4KFRN+$9>6VU?9@H*D+_%&F073"LHVXE"R]*!G
-MA6N&E>O%-[;ZU:Z+LI+:;4USQ!=9RUMH95LQ\+MGA]%L6X0:4)N)!IU@/0<!
-MPY_=>`^Q&9E+O2PZM_'#J/C'X#4,"1`XM4@9SB`Q)Q)&-?YY).VK2C^.9!;M
-M]R+KZUF06M<UC8``LA*[^O+7"V@^M+^?>6YP2'2_K4E?APNXR[^O>0C2*L[&
-M\A+PH&BAH7`D-5B88#E`XA!>12;0G="J^W_TZF:F\.5*.X41*F>&$`VT.KY0
-M8GA.2MMS9&LT'`BD(8W-04<XS`G`TD-LL`_.<XC*I;@L:I56"\@\?"#ST3(;
-MZVVG'\,9@O.@689YI$(EN2?2GB-I-JNRC@^H8%DM]L5$-TZ'[W`>S$8>[3D[
-M7'C2BU!'@HBIG-!KGC/$A5SEB;$(J6M!4Q.W1MP/"P!<`0``7`$```(```!%
-M``%8A18``$`1``#`J`$!P*@!`@'T`?0!1`<I\4$]F5`$Q`E8A:C/1_DGY2X@
-M)"`````(```!/"$``2!S/`=_B9"^ELZJ>I7AD$'DKAFO+_R/?M9!3$S>4$IH
-MCHA.Z7$9VH?IW%.M14M_XF:SW]IW/%$^2#U4'?<B9^E/TV+0JH>J509)P]S?
-MU"=QN;?^CYRCP%WNN++@$2B0A/138OODF]<2Q,8[@EAOSFE6H*CNB8<(HB$4
-M]3%MQX'R&E`1`WR0F"]U/Q-!#!A<,&NDL!-A?54L=Z<D.2X-*C0/F7H0W6VR
-M>/E\'B&%I@F,-HXS'"OP%AKCD80<'L]5WX$L'<7DO0FG+/OXBJV'9T,"NH38
-MZ^)R,*^#:`KUWX).$5HVJDXM314Y_5ZY.GUE?0[HCJL:;2@6Y,I,,+4O-/8=
-M)B!R$$!W:LJ/G]IS`N?-S_0)0J:2&'?B[>O+.5,3MT8S-PL`?````'P````"
-M````10``>(47``!`$0``P*@!`<"H`0(!]`'T`&0&22S*Z&M[`&'"V\2M-8_L
-M<TDN("4(`````````%PJ``!`4\P[8O?#43W`$_;A\6MI.ZVRZ#\`]=12OZ`U
-M:]Z^NG?)0P.RC6!:%-08_'!Q8`A,$E4[Z\9@E!^34)@#4Q.W1LE""P!L````
-M;`````(```!%``!HA1@``$`1``#`J`$!P*@!`@'T`?0`5`8Y+,KH:WL`8<+;
-MQ*TUC^QS22X@)2``````````3````##Q5_K#;FV-)C/E_E)-28U)^BB+X5"M
-M1R7"8/"0O7^N'%F^4K=J]KWO&`]N.E,3MT8A40L`;````&P````"````10``
-M:(49``!`$0``P*@!`<"H`0(!]`'T`%0&.2S*Z&M[`&'"V\2M-8_L<TDN("4(
-M`````0```$PJ```PA&=&03UAJ&8U05E7.N]O13QOH9+[P"Z$17$^>2[#-QRE
-M*`L]WT8L_WW20\Q3$[=&UUX+`&P```!L`````@```$4``&B%&@``0!$``,"H
-M`0'`J`$"`?0!]`!4!CDLRNAK>P!APMO$K36/['-)+B`E(`````$```!,````
-M,*A%XEJ5DQZ$.#Q4(95O?BR:(5,#:N=JK!I['+I]D\QD+*FMH!:KKLO"QJ;S
-M4Q.W1HI:#`"8`0``F`$```(```!%``&4A1P``$`1``#`J`$!P*@!`@'T`?0!
-M@`=E97O@[4\;W6H``````````"$@(@@````````!>"(``'@```!T`0$`#`/^
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``2D4G@K]@=Q)U]KK/MT@>,M9:8(^4
-MJQB(!;0J0,@3+-4JITI<XB5$:U*+AQ#Q/++#3"`S`4Q!B&R2:[8":163+@;I
-M&]7:JEA4Q06!`JH>UU_)[)8^6AJ=R[&;O_-I_D#>'>:R*1P>.=!,A.MTZ>NF
-MX)4E0$D*BK)?D+I@0J_F'54I```D:`&?E%T[B9NVYC)[IG"`$M_TO\=+L;K,
-MW@88=1QL"1TI```<``!`!,4;A:YLZ.(8&O[;"]I'`IWKR*(R````'```0`4K
-MMZ[].>-E]\GM-X$)86M!4SFWCE,3MT9_:0P`7````%P````"````10``6(4=
-M``!`$0``P*@!`<"H`0(!]`'T`$0&*65[X.U/&]UJ```````````I("(@````
-M`````#P````@``!`!@````K\+.)I@9$!$\I_%N"L<OD';@-Y(%,3MT8(>0P`
-MN`$``+@!```"````10`!M(4>``!`$0``P*@!`<"H`0(!]`'T`:`'A65[X.U/
-M&]UJ```````````I("((`````````9@A```@``!`!@````K\+.)I@9$!$\I_
-M%N"L<OD';@-Y("(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``2D4G@K]@=Q)U]KK/MT@>,M9:8(^4JQB(!;0J0,@3+-4JITI<XB5$:U*+
-MAQ#Q/++#3"`S`4Q!B&R2:[8":163+@;I&]7:JEA4Q06!`JH>UU_)[)8^6AJ=
-MR[&;O_-I_D#>'>:R*1P>.=!,A.MTZ>NFX)4E0$D*BK)?D+I@0J_F'54I```D
-M:`&?E%T[B9NVYC)[IG"`$M_TO\=+L;K,W@88=1QL"1TI```<``!`!,4;A:YL
-MZ.(8&O[;"]I'`IWKR*(R````'```0`4KMZ[].>-E]\GM-X$)86M!4SFWCE,3
-MMT:YG0P`4`$``%`!```"````10`!3(4?``!`$0``P*@!`<"H`0(!]`'T`3@'
-M'65[X.U/&]UJ+,$`75`V-M8A("(@`````````3`B```P````+`$!``0#```,
-M`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``"-!*W>@
-M8;-(L%X*<<2`\D!B1E*VIC*?E)J($W!2,\5.KW,BG+=6.H)H9M1^&`\_KF.I
-M-TM9V4`F`SC-U?3RV^JL.BFE59X@QP0]Z$ZP3_:E$G/*XXP*S3"0Z$S58O@M
-M*OZ)6,)NP'"VEVW!L+H_:N89UV9-_=5]L?RV%P!XNB"/*0``)$[D&^%]/-/;
-MB/&0%2?<0D@=@<]B8.B9L2,.'@#9=28'*0``'```0`10^VC`8F2V#"O#]O$X
-M&20;T13%!0```!P``$`%9T'_+(BBJ[8>(HH&$+0?;P.I^DE3$[=&V,H,``P!
-M```,`0```@```$4``0B%(```0!$``,"H`0'`J`$"`?0!]`#T!]EE>^#M3QO=
-M:BS!`%U0-C;6+B`C"`````$```#L(P``T$+5%OA#U:;14-BP1D%B-V@O]X&2
-M_S^S63J6Z68O*J`6$CA($,&O,F,)IYA3SJ&_YRKWX%O_J9`)B9*5W2[9&"21
-MLP@IH2O/'QQ3]K@IP?;^P8#ODK<N1_W5`DWO$0QH'@M(T5_]+D;A;S]02`1R
-M^:U[\J84EO*$S'WDIUL\^GY:]!*2S[H1/'VI,3F)5I1'L&CV>7=GA$P%WY4<
-MRFL\Q9G^J[A#)IMY-I!@PY+%_(W<I4QY]8OM6AJ:>SO-.UG@Z5SXT%:]VH,`
-M8&J(*E,3MT:[XPP`O````+P````"````10``N(4A``!`$0``P*@!`<"H`0(!
-M]`'T`*0&B65[X.U/&]UJ+,$`75`V-M8N(",@`````0```)PD``"`HJW9BP%.
-M(Q31Y;%".L`JN.>3$T/1>FZ`<H.70[4Y41N]W:O"AI?2V+\^5-RHG,&H=FB/
-MQOG2K&7<UR07[&^!D(NG?$!G.[;!X.3[262>:_PEM$W*3*%;I*Z4$$"4(S9+
-M!7<<(?([<;G.#Q7$'"O_H)3.UI"/,^^"Q>$1&U,3MT;D`@T`'`$``!P!```"
-M````10`!&(4B``!`$0``P*@!`<"H`0(!]`'T`00'Z65[X.U/&]UJ+,$`75`V
-M-M8N("0(`````@```/PA``#@'.=L#<%P%"?P(N>:%Q]^-3%]</:WPZ<EB%P"
-M!F;Q#2N'C!JM4%72..!@6F^N9>&<PR'/R,Q["B=JTY//";VOL6X=\G;'+_-;
-MJ;TF"&K,B0'"UZHT^F=&4?M-+9%I?D7.?H99.99&"I)*6SC189F-X?5ISU/Q
-M,`@GZK3PX7I"K3Y2!HCH$];M_(&J$"\Z*,GA"H'H=DJ5&(Z<._"IA<N_4V2J
-MQM_LD6VU$R+L^%GT"MLT)J%DWG/66_K%BP^O(%\9]4+AVF=8.8]^R+WH.2T(
-MJE7DMQ=6Q8A$@$F,[%,3MT;1#0T`_````/P````"````10``^(4C``!`$0``
-MP*@!`<"H`0(!]`'T`.0&R65[X.U/&]UJ+,$`75`V-M8N("0(`````P```-PA
-M``#`S12*<3ZO;^$1'1;)^;6XL!A,7^C2K[H3N0Q<Y]X*KD];%K6=V9Y81+(!
-M)]\><T;'#.9FA6$1>$^]S;*WNUG.]%L2X\@OI6=SI2N-V]XW/.57/\S`ZL#;
-M^H]V(S*;[2UP&PK[S!9!7%]C)BLV\$%61`G@M\,@&</X!<*F5(0$F='"MU6=
-M)Y,3Q`32RXN/&;B8[5BXXE3A(NIE.B"EBZ$I9L=DV,R*\7;WE+%C.:7A0&'Q
-M.!J3&`<E.I*.2K93$[=&H!@-`&P```!L`````@```$4``&B%)```0!$``,"H
-M`0'`J`$"`?0!]`!4!CEE>^#M3QO=:BS!`%U0-C;6+B`D(`````(```!,*0``
-M,)(@/)`>FX>)]<%[=PD#GC"V'&?@D]X'O$9_C$`(J-P'4B=]1\ET(IWA6A54
-M4Q.W1OHU#0!L````;`````(```!%``!HA28``$`1``#`J`$!P*@!`@'T`?0`
-M5`8Y97O@[4\;W6HLP0!=4#8VUBX@)"`````#````3"D``#!T\"C0S2<T0VG_
-MR."F_-#\@<:"HYV<HVWW'OY--]GPR1OYY/Y]>MF>[#"2>E,3MT964`T`/`$`
-M`#P!```"````10`!.(4G``!`$0``P*@!`<"H`0(!]`'T`20'"65[X.U/&]UJ
-M+,$`75`V-M8N("0(````!````1PA``$`!CJ^)PZ`;+A\7(+BQ5A<Y_0U?"_:
-MI+-@UJ-"]I7BTCYKBA._V![)-2]]6?.&2^^4ZZ1*K4YX%`O"(UC)+F_8X[:H
-MDC]&;E1E6X!ET'IC8TWB,&N\B(DO[L#4U"1HF51UVE6EH`Y;OCP-H^%)'[KN
-MUXP;AK"/I.1*<`]B683C4&$,/0($^(&V`JA?\;\LT;[($,^=/$%X+.U_MO"&
-MJYFP]S3.\17S;_P%Q%[HJG_!#6S_*=AJ*A<,F\WN/3!&(/E*%@&M&]'>GXHL
-MT>?>MW3GY50A&CFVF&^NU/?&9L]_(,4*^5;^0"ZY@6)DD"![(TP,B#%:[@I5
-MS$\FF+5;4Q.W1@Q>#0`<`0``'`$```(```!%``$8A2D``$`1``#`J`$!P*@!
-M`@'T`?0!!`?I97O@[4\;W6HLP0!=4#8VUBX@)`@````%````_"$``."B(:*V
-MV^12]:?]_;A>8GS"-L+8=TDJ^*;'TL,X5SVVAF>.XFS83*'C!FWJ-:K3\CF+
-M.0,T>+`"BMXGOKLP9#N^:0LTF[UNH[U#\ESX237F)51?P",[V[1;_T.QL`"O
-MFEUC.+_+#@WW6PG$\QK8D$4)!+&J6U>TGT4-*R)28*B%&+\\J,@5ZVR!Z2NA
-M@1#5,(K_"@-^3@)]#!15]S[B!ZKZ@6JHPUB?%V?+)(5FRF*>>L>0T(CK.7K#
-MOET-=@WC.^I3ROGYX@%OXQM3.:3!=QW,I3T(?JNJ,IYI94=A4Q.W1N]L#0#L
-M````[`````(```!%``#HA2H``$`1``#`J`$!P*@!`@'T`?0`U`:Y97O@[4\;
-MW6HLP0!=4#8VUBX@)"`````$````S"$``+"[<<DM[(9*"5KU>VVD,Y5R)NUK
-M51>REU;.ZV5F(";N=T9OCMU2T?[#X;]R5F#+O*28-\C`C7TK,FK:#$@NYBC_
-M<]E*Y#J'SC#D"@IKP%7R?Y37N>\,7[$.%H$2+7H(V5'@D=E1))+Y(^=Z(/DD
-M1QL@HE%85`L[@Z$X)&KI!DL4+`";0@XKS^34]BZC4.,2=7^[%GCR\DFPL+"G
-M_B[?U;^9ND`J*?-0H):U2"3J4Q.W1D2/#0#L````[`````(```!%``#HA2L`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:Y97O@[4\;W6HLP0!=4#8VUBX@)"`````%
-M````S"$``+#4N!S%@@?S08D[$R!=>2EJFJ<6:2BZZJR1G.ZE_<?L&KTY9G!O
-M?&+B"E'B#MA#1\31,0^P'N?4Q2?E9'[75[HC&&:@G@K#[!/3/\$X-`XP=CW>
-M*OPD3=>6*<:E56O[9_CR?;R/%7;D\"*U1AG5W[;41.(&<12MSI(B-R*<0])8
-MLF:JHY(8VZ;L"\N+)4#W'RSTV$[:6;*L)HZ4VG)^12^ZH3W[13.Q71!>X8HN
-M4Q.W1L.L#0`\`0``/`$```(```!%``$XA2P``$`1``#`J`$!P*@!`@'T`?0!
-M)`<)97O@[4\;W6HLP0!=4#8VUBX@)`@````&```!'"$``0"+X-.5Y6G(SO/<
-M)M:46`DXV*!Z<36YV?E`F#C\<U]6+G&%&23FO-CXN3&7X!(TT:U`N6:,:ZAW
-ME9<M";3\$XQOJ:7EJ).:L*/P'Z6Q4"-+9#20L(2-S1XD#XV?23G3+3.G>:[.
-M8?%?HR3`6C,>)4YU!_GZC]0@J3&.D;1M$B+^=5I<W\:?4F/=8L@`ZU1>8!+R
-MR\_D276QN>;*C+B'E-=\G"T3D^+1?[X4&VC+D<X:&F1JC,X^;F]C8I43SBUC
-M`+E69#BS*D%LZ3B=CBZ@H:/=];!YS]#Q`2M_DB,?MRPT/I^?XWG`3\0[K,P<
-M\+2`V.,X/3EV)7">PPL[#9I3$[=&"[D-`!P!```<`0```@```$4``1B%+0``
-M0!$``,"H`0'`J`$"`?0!]`$$!^EE>^#M3QO=:BS!`%U0-C;6+B`D"`````<`
-M``#\(0``X)>1ABP,>>I6SK;B(E04C'A_%0'IBM3M\0";<#0[4`?=/SPY!?JN
-M&OU&1F>YZYAKY]X2U_23LWS;)=*KWUMD9DM11Y!7:YM40%K:5CWJIT#,&+G\
-M`I>2UXPP5Z*"XQKU=6%S<Y5#`@(MK^;%QXK(8GDJ-]K*=AP4Y;G":W=MCS0:
-MLB[)Z>9NC@"4!Y][I-6>8`E76(>*B$/(OOJ.34/$6)D+S'F"7ZE(G%,O5A,,
-M!UB(I]:#5--6EJM"*[B[3]3)$B&U&ERM)$M`,&B`DDW)W>_ZYB>PD#76;F4J
-M!1A3$[=&7,@-`.P```#L`````@```$4``.B%+@``0!$``,"H`0'`J`$"`?0!
-M]`#4!KEE>^#M3QO=:BS!`%U0-C;6+B`D(`````8```#,(0``L&X9'DL..+C<
-MBPA5A=T,1XZL<-0/WSUN15$<]Q!1SUYUJ&6G4^S>_RG>]EXV'&FNEMSVYU<:
-MEK?V[1NU7(TG`'="3SL*TB*PW+1OY[G7L^K4$$>TL`-Y,@:'<SB6-)^)-\0I
-MG;/,:/4O&FZ<+;.^'8-).5A>EA=NC)J]'=9I;@S]\F>Y29K?;J!G-BG2TQ)S
-M_>5?J^>'Y##%P645KA104(-7)=XVE^:JWB!D(NE3$[=&:NH-`.P```#L````
-M`@```$4``.B%+P``0!$``,"H`0'`J`$"`?0!]`#4!KEE>^#M3QO=:BS!`%U0
-M-C;6+B`D(`````<```#,(0``L.C.G]1]G>0R*>1",/[EK<'7"MUTS$0\@0ZS
-MW]%[4=)V)HX5YF-:>AFR&2687>+5VCN(Q_\@$;2JPR3L%-&V]:S&>01L%CV[
-M%`O1X`@J_Z_UH1*,Q8?FL7(`X_5K9'Z],5G7<&^C2!IWV5T:[AYI&1.W^DC'
-M>F<AVE2(-&<=-1M@`WIZ3V!M+YX5,>FH"VS_$^"1QJ/]5'=%7/C(+G\]`ND2
-M(@FP,(;M[.X]"AU3$[=&-Q$.`(P!``",`0```@```$4``8B%,```0!$``,"H
-M`0'`J`$"`?0!]`%T!UEE>^#M3QO=:BS!`%U0-C;6+B`D"`````@```%L(0`!
-M4*<P60)5S9T)3;$NS#'B7X$[B>7R/&6\44J=*4O#&W3QUDEK/)^T.,[:MKSC
-M?E4U\<,^@GR.<`&&A1:*_Z.M@!O.Y]*-)<&XBV.W"#K:$^<Z?=OS2E6.!N)0
-M4V8VWXQQO#"8D<9TL*"3*J`8+4KP[(!)NO:?`:3Q4,FO"3_K4!6?H2GC7=:4
-M-\$E0,'$1*C=0NH>27@Y_TP%J%U,7"J4^QN!]6@,&8^G9172IG[C:UL1+\\6
-M:O0;\1H"\6>%IC@?=6%A+F^MK4\KAQ,+E^&)!\'Q.X0O+TDQI!8KH.8\/F3J
-MJAAU,)X85G1?)UK`=V6[FC[?^)%$KG@&#SQ.@I/.WVV?'`/1K)L+L1Y"DONH
-M+6U5+A3)W9Z?'U,;!F'"V=Y81;YY"'6$9Z=N$;SNOI=I,EQM#$(USC+UD.>]
-M6`\XI=66`D"U2RAR\XA2):&L4Q.W1O)'#@!<`0``7`$```(```!%``%8A3$`
-M`$`1``#`J`$!P*@!`@'T`?0!1`<I97O@[4\;W6HLP0!=4#8VUBX@)"`````(
-M```!/"$``2"J]_@JV-7.TLW`98DUC-59=I]<!@2,2A9N\5#G1&#*)RO7@JM4
-MQ$B^?8V"X',[6ZNTJ?$$3H*V<'#XJ*9*EE0'*]K4PC@6=I;%SHKQHV0B_!$#
-M!"'[K\Z%=X^R>,5[U6G1PQ/5ROA!3R>XVU7[Z#;6PM#BJS\Q&`HNM>\8H7L[
-M3.\/ES\7E^7"?P9"I!X\XY-/!0V1\#(=TN!V):G3P?[`D=X%<@B46$)N'!W@
-M:*2'.X=H,Y9F1C^7XKY8>*$4];\RL,5V[.==,J([WQ8`B;O7JS"^</'1Z$7T
-M4A#FOI\[/<XK!W;!E*-H-OJA+*:;4/):13(%T)AJ8M#X%$2E3U)@-1/0I'3$
-M5O5)G-$2P'`O#[=9=+6M+0'^?&8H=%,3MT:U;PX`?````'P````"````10``
-M>(4R``!`$0``P*@!`<"H`0(!]`'T`&0&27>I7\4$&*F4\&9EXE-Z"HXN("4(
-M`````````%PJ``!`:Z(-#X$WGK?.5WG9O2HM`&[@48B(!*639\32-OOGB9FI
-M_+/V_UA4!DN)R'/5A?Q3Q?'%9!1D'@4N^]CI4Q.W1@-[#@!L````;`````(`
-M``!%``!HA3,``$`1``#`J`$!P*@!`@'T`?0`5`8Y=ZE?Q008J93P9F7B4WH*
-MCBX@)2``````````3````#"@D(2O/#R`;3Z(/]]JII#]P4R*@5G(H6+-$<27
-M_E7=G=ESNF*3AWQ&&>2@UE,3MT:DB0X`;````&P````"````10``:(4T``!`
-M$0``P*@!`<"H`0(!]`'T`%0&.7>I7\4$&*F4\&9EXE-Z"HXN("4(`````0``
-M`$PJ```PH0'J*-?9L:+JAXO(?../[A&T!?R<M.D;&IM;QOK+@%X=T[[!_?*S
-M;LDV<AM3$[=&"9<.`&P```!L`````@```$4``&B%-0``0!$``,"H`0'`J`$"
-M`?0!]`!4!CEWJ5_%!!BIE/!F9>)3>@J.+B`E(`````$```!,````,"U2.V)>
-M,T"Y`4%!&.>=W_869/\I%52AHRV@F'+"\0!N(&^E<@@L$)2L-:<O5!.W1C91
-M``"8`0``F`$```(```!%``&4A3@``$`1``#`J`$!P*@!`@'T`?0!@`=E!UBV
-M#FG8^3X``````````"$@(@@````````!>"(``'@```!T`0$`#`/_``P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``H_IR"JUGK_-UKJ67<B?F"E>3H=P&5F[C].VP
-M,LM="4YOMV4Z<1HE(_O^##1I"U1/F<AO%UPJ&J1)K.*U'A>K7Z:HK-J+>.-A
-M_L9F":*HU:H&\>XG[EPRDCKS$C$4A-HR$7Y1;50/`]=XZ?9*W/Y%'1CXNTF3
-M$4\4?S+Y!<Z\W&8I```DJ3][P#!6TPICDY2O3R0*D^6G#RGVC/FCF!$4Y(U5
-MCDTI```<``!`!`8[&'"3@,Z];^/FI\.`$H3]4O<"````'```0`5-Y,H;4Y]1
-M[9KX7:0`,6DH%A9%MU03MT:Q7P``7````%P````"````10``6(4Y``!`$0``
-MP*@!`<"H`0(!]`'T`$0&*0=8M@YIV/D^```````````I("(@`````````#P`
-M```@``!`!@````KI*_QX.=N6/2IC`W\\3>RS2O8\I%03MT:3;P``N`$``+@!
-M```"````10`!M(4Z``!`$0``P*@!`<"H`0(!]`'T`:`'A0=8M@YIV/D^````
-M```````I("((`````````9@A```@``!`!@````KI*_QX.=N6/2IC`W\\3>RS
-M2O8\I"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``H_IR
-M"JUGK_-UKJ67<B?F"E>3H=P&5F[C].VP,LM="4YOMV4Z<1HE(_O^##1I"U1/
-MF<AO%UPJ&J1)K.*U'A>K7Z:HK-J+>.-A_L9F":*HU:H&\>XG[EPRDCKS$C$4
-MA-HR$7Y1;50/`]=XZ?9*W/Y%'1CXNTF3$4\4?S+Y!<Z\W&8I```DJ3][P#!6
-MTPICDY2O3R0*D^6G#RGVC/FCF!$4Y(U5CDTI```<``!`!`8[&'"3@,Z];^/F
-MI\.`$H3]4O<"````'```0`5-Y,H;4Y]1[9KX7:0`,6DH%A9%MU03MT8AE0``
-M4`$``%`!```"````10`!3(4[``!`$0``P*@!`<"H`0(!]`'T`3@''0=8M@YI
-MV/D^]@^(YB)R&O,A("(@`````````3`B```P````+`$!``0#```,`0``#(`.
-M`(`#```(`@```@,```@#```"````"`0```(H``"(``(``%E;0M[KMN=UF2;X
-M/SW;I7WL/S"*&P1/%FQO663^:IWW4HQL0M'#K2Y^D^QIA'JZY3O/2.;:BWT)
-M<`*4!"AX6"N[5BW>NYN)]-:'X#;:I_,,3*+E0:1QM>K[H/4M(PBRQ`M.#6?L
-MEB-HKQ_<%#W\#.]XNWOU;'G&\HUI^^_&P@40*0``)/.F4^^U9.`%"&IQ_C!A
-MZ?M0(`E5U,!.+*DXKPT+/1J1*0``'```0`2[GPT*JR95@W.R$3G)'BH&1?WK
-MP0```!P``$`%EWP7U<2X-8"GH&_+$ODUV2\9);54$[=&M<(```P!```,`0``
-M`@```$4``0B%/```0!$``,"H`0'`J`$"`?0!]`#T!]D'6+8.:=CY/O8/B.8B
-M<AKS+B`C"`````$```#L(P``T(J-^D*^Z?\GTR(X0N(T*C$;TV6#='Q#6EH1
-M>?,7R69/&WH23ETES3)+9>X(F,1*TB8W,LXA;S%/R8>]>')RN&M;4"K*N6H"
-MTQZN0+0Y24V(M+]#(L&E':<L^LJD.S@MZ@\]N-8M>,C:X8FJ&(Y,>'.N*#B:
-M1/.N1I,5:Y&HF$Z$A&\V_AL]7DUW"X?<^I5=M-MC'*CL75]3JW/JAVA>T6I?
-MY3GP&=B2EQR8WE?-$K[L_H')X)P`"'%Z-[=:!1G'E""=JX.W<3L)0]G)LE03
-MMT:\VP``O````+P````"````10``N(4]``!`$0``P*@!`<"H`0(!]`'T`*0&
-MB0=8M@YIV/D^]@^(YB)R&O,N(",@`````0```)PD``"`W>K2WRP6#&S<N>A-
-MD[&O7&DQ6*]?_YX3K`51&`^J==PQK^0LK,;39%B:I$CJW1O:02AET_(CV$TM
-M1TJ]=#6M".#W$][H47[F&RC.F4M_;'R2(IKE$C>EM#(]^$NP62;*YS5M6[.@
-MANRZL8=<>Y#"]R3WA3PU;/EQ>W_!\%03MT8/^@``'`$``!P!```"````10`!
-M&(4^``!`$0``P*@!`<"H`0(!]`'T`00'Z0=8M@YIV/D^]@^(YB)R&O,N("0(
-M`````@```/PA``#@QY=23`1R@-B!^@MEVOQ[6\_D'B9K,5MAEE/OO9"'SHL,
-MZ/6>%4AS%U_OS!Z@&P0.1@=\K1462C(`KC1>91.F(#G!3,#C?'Y%@(LG&`;\
-MV,75T1$4WYADPS:XL6<.ZJ%RJ4?`584'8H>OXZK<ZR0O@]WBC,6L`9JH4&1\
-M\5^^9!R/?=%:EK&O^)!:B<I&3"82.<ZY.4L%($ZCF5):XV<>J+:^'N)L$FSQ
-MB@F^UKI0/L-+J$O`OND,H@)5>_E@R+?W#;%@L:.;6?\G,'ZRPH$F1]+*DAX5
-MB;->>((LW%03MT9#!@$`_````/P````"````10``^(4_``!`$0``P*@!`<"H
-M`0(!]`'T`.0&R0=8M@YIV/D^]@^(YB)R&O,N("0(`````P```-PA``#`(`.&
-MO[?M^O?/R<H#$"9V3?MNET2FC=5+Z*'@,C%W"6K.!=?V^%>3ZQW_YL^\6ADE
-M/8#2NUK/9-!'S$[')_@I,5T*DDA($=\>.11I2E'V6N4X'6MC_FF-Q)`$P\BP
-M,MJ96QT-W/:E@?-[?A@;3:1.&"-8QD<QG?#-SQ`TA2P2)6O8+MY$48C*$,=>
-MX9>+YR/A]8B>9WI"Y]&6962KX=Q1&5)T5)+"!B!`A\O1"1'G,+O@"M2=CL'C
-MY#'(:S]4$[=&!1$!`&P```!L`````@```$4``&B%0```0!$``,"H`0'`J`$"
-M`?0!]`!4!CD'6+8.:=CY/O8/B.8B<AKS+B`D(`````(```!,*0``,+S`)#HK
-MO\F?MSF`L?:7H`UU";L5W_)^-*BA,><+3EW.!)W@AY_$.IIL7<_I5!.W1D(M
-M`0!L````;`````(```!%``!HA4$``$`1``#`J`$!P*@!`@'T`?0`5`8Y!UBV
-M#FG8^3[V#XCF(G(:\RX@)"`````#````3"D``##3PW;'6J-K9N%G91!#PNF4
-MP[&E&."%159!KYXGW?>,1/$+ET.HT<QAKR)JCE03MT9U2`$`/`$``#P!```"
-M````10`!.(5"``!`$0``P*@!`<"H`0(!]`'T`20'"0=8M@YIV/D^]@^(YB)R
-M&O,N("0(````!````1PA``$`4W]]"":\@*VK?OPP03%6$.&()EPJ5^`:Y_*^
-M(E#!%MQ8W7L^Y'/="3YA;KNY]`BH7D,/26,=-=-_-[-3IF^N^HO8F4G%"O]\
-M//RN4SFN%B!V@JG9T\7S0U1?DCK$WT[VJK471(PJHY"[+%-+`\)@2CFM%,B5
-MUWIWLY7X$=-]<ECEAGEE%E%NY[)=SQ6EYEGD\[$&L4T\*TZ)VRJ1P3I0!(*1
-M3)B$V^?`HV320+Y>?DV5SSOD`Y.-&2XU]>R;^ZCPVM/VMP1G&[JDW7WF<A;@
-MT'!?64_^PNVT$YUF%WR3,Q;'A(?&)GDEA1K#T@52MXXU$2I<KPT\3(*ZX?/6
-M5!.W1F!4`0`<`0``'`$```(```!%``$8A4,``$`1``#`J`$!P*@!`@'T`?0!
-M!`?I!UBV#FG8^3[V#XCF(G(:\RX@)`@````%````_"$``."2BV!8W^CZE@ZU
-MS8U>N/VI$&[Q/SOH<CBY&=^0-H88VTL4B1DJ20S%R`.71XB@0X6ZFFWP47P5
-MCO;37:ODN<O7:X:6*O.=U<W,\]D]4B?K%)-52A;'R95>T-^*4A,"9]&TT#\"
-MB<U*I^04*A^.C$U?A0K;S?U@N\35#(LM,/GU^UHLET/+0DZS>6VE+NX'/+X)
-M&?=1Z!ZN$/MR)\$4`ON[KDP#8M-SX0B$!E>\ZN.G>E[C(WTCHN9X/(BLOBY)
-MOPD=A61<F!N`*Y!H$26U'7^O),=Z3:4&#9`\[J";5!.W1GMD`0#L````[```
-M``(```!%``#HA40``$`1``#`J`$!P*@!`@'T`?0`U`:Y!UBV#FG8^3[V#XCF
-M(G(:\RX@)"`````$````S"$``+`J%IR"KAV]K'F77-H$W9)B69M3KDM]\=M/
-M^,@ILHW-%"A8*J'YN\>3/',UX/I9!SH*)"(U0Z.FO>QS39+E8U;_HO_G<54,
-M`NZH,><2KP07F41M-5_ME[5*?C_+0HK8PQ;37,FKQO_OYV[4+B9#@XIA+0B[
-MHU$(!?=-L[?-(75NI#L4:Z16$YH;1CS/<YQH42XA)=L-QKRSMJM7K5!U-AV&
-MV@)>T%8Q)`:N;.695!.W1FN'`0#L````[`````(```!%``#HA44``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:Y!UBV#FG8^3[V#XCF(G(:\RX@)"`````%````S"$`
-M`+#2OQ>QGP"._^H.K\6I.5S65?411;LHFFOZK\'5O-BKQELCP0N:4X)R7#FP
-MOOAK`WA+CQ^`?;89J#Z<$\UKO;$"I],M@_U!MS!>\DB7OEN[5$'\O(CO9"^=
-M=]%C&6_IQ'*2Y,AJ]=,%Z52Y0W4#<975L(QI+H"X)%W]8YQ<B"]#]DE[.SS]
-M23#[SV`YM1<Y:9<A"#`E@:MG]ANS2A*4"**;Q(%C]&A)'[E*).Q15!.W1CND
-M`0`\`0``/`$```(```!%``$XA48``$`1``#`J`$!P*@!`@'T`?0!)`<)!UBV
-M#FG8^3[V#XCF(G(:\RX@)`@````&```!'"$``0"^ICY%_M=?`514<$'0J!E<
-M,[UQUT"_MG.:1@!:T,AP;W\.@&P:1K4^UX%?%H/MZUH;Q_19;M7Y8KCGQ?W0
-M;D_5BIW;ICK)[3^0`TA#C].\K5_46)@3]Y7$I';%;#VVF`5!D)C11)V7MXQ4
-M\S=@EU@_U+9/1P:4S*LUZG$H^E+H^@T'<-W^I0U>6VB'$<!M56=R!=[:B8@A
-M("!H#>_PW&6$]P/OD8RZ?W#L(QDQ,+JU3$6*LNS!KKMOOYV(6(9.28F$D:>M
-M00@,Z[!&.OU&$T2U6S/[QC>BK&'!U>KVB:B[W0CJQHAF3#6XSR9%DBL\IP[1
-M5AO:*U`:M7)GB9U4$[=&\J\!`!P!```<`0```@```$4``1B%1P``0!$``,"H
-M`0'`J`$"`?0!]`$$!^D'6+8.:=CY/O8/B.8B<AKS+B`D"`````<```#\(0``
-MX(`@@6$LS_H._5=:TAE])A:*;AA?)3.@866V0=)*;;9<MXU+\G6/T(H^EOG+
-MGWP_IFO,]*<0,%NBW$88$.3@S%S0_3D5\JC'Y0[NDW']*TC!&8.?FC*H,#M6
-MJG'&=7]`53F9(AV58)XE*_I@=_@S!V"'$7@+7AO?O&IYFTLE^AWP:5%U1=T4
-M^6WQLJJ]VYL2,;H&4RNZB2,`8!)'"T:O)-X88,K`S\&"OH=II5<C+6@[``5>
-M_*`Z4+H]+,Z_A'#S-BNY2=,,&\J#N6-8KXN(;LH=+;F6E$T4[_\?E?%4$[=&
-MJ;\!`.P```#L`````@```$4``.B%2```0!$``,"H`0'`J`$"`?0!]`#4!KD'
-M6+8.:=CY/O8/B.8B<AKS+B`D(`````8```#,(0``L,Y@&IY<Z#MJ#4\."2K@
-MYIW$=UPP;*=4/$C8W`.W18KC>HBK0MB\]N)^6FW/STB;E93T.^6IQBJDPJ<)
-M%ENP4YU>"[*O@6`T>+Q)H8-WDH4J*"K<`L^G2*K(P@_0(WWBNYU,L+N2RO1-
-MI*$S<M@?5@\]L_4A\X!_V3V,2(S8HW(3,N@&#1HZ,Q-GNHJO-ZXH6_@QU$C`
-M7`/@7NPVIXZZ[$!"K0!#H,'`P,$<BK14$[=&%^,!`.P```#L`````@```$4`
-M`.B%20``0!$``,"H`0'`J`$"`?0!]`#4!KD'6+8.:=CY/O8/B.8B<AKS+B`D
-M(`````<```#,(0``L->JX:&UMRU*EF*2_\KM1\Q1Q\[QR#$?UJ9">+*R(!+R
-M33UZ:U[6Y+2L22!-:$H]BH7MO#$M`_L.?SP;NY[JFXS%8#1C&+,'OSM_\K&5
-M'QL[\O6-@V*D6'`^]"K:V*OG+:^$R;Y5;RDC6WP5)5:.G8[[P]]`X_@KA9+&
-MR"0MXHZK%]]-T4)]%PDJGA`Y2>@9&D5C$1;D[#H48D@$$"#38^'2:YCU^T#>
-M.#YVX754$[=&"@D"`(P!``",`0```@```$4``8B%2@``0!$``,"H`0'`J`$"
-M`?0!]`%T!UD'6+8.:=CY/O8/B.8B<AKS+B`D"`````@```%L(0`!4``(&Y*T
-M5=2BLPN?5`E2[%'.?EIG3LEU8+)@1_+PECE300(X3W"DI7_EUD`8@<YKQ+'A
-M`>+50##.'SQ\2'X,$-_N4E8=J"+*Z6%].%B,!)\@/K;DF5>]?"QF%H7TUHJX
-M4[N'S.>KG#NTAZAD)<GF?1@+9T]TVVJ5=X?2H:6'R_4R@%*[-&I"T+%<LYGY
-M/U*GWD(B^"CPY#9US"&SH`Z?,<7%FED_D>?7`7W2Y(K3N5@R%`J='D%D`KS"
-M?2F!)(,/X=-:*9%HO1L!#M#=W1%<QJ33-IRL`(DJ("87;B)^%/*T.BA$7F0I
-MHR83-GDT/BS542#V4;AVP:<)_XG`'Q3UPZB`XO6EFQK$NK/$4AKFR>#CY\-\
-MK:P:B<73HZ9,?>DJ18W'RYN/HS/[2X@W^'<D&R"X:F.MJ$]$,`88\=C@E\Y9
-MLTA9T.'KJ`6(X7.E5!.W1C\^`@!<`0``7`$```(```!%``%8A4L``$`1``#`
-MJ`$!P*@!`@'T`?0!1`<I!UBV#FG8^3[V#XCF(G(:\RX@)"`````(```!/"$`
-M`2"0O"PI8KBX]?F01`^L:8G:65&&)`W@K:04NHEC`=-E&I-)17UUZN.H/LR1
-M1<@P"PW38"IL8K>!'HZ05=-<WGC5L@\`#G#W^V.`$?3^"'UZXICE@GL',IGI
-M!<][EUB/OE<Y1K>,BI)%J*KFB>6,3)#27C`NU;H%9*8,<Y`X'B9HD'WX$E3T
-M1<S?Q&Z<&?T/!=AJ#[\JZ>OZ%$`=7ULC1(:H=[8KHYPTQGB/+NR3'B0[)/UF
-M095]M8O4!XZ&(2([T`\I$,_\4-0BQI6(NX#G@\\1(2S"J<110R,("@PZ$SX_
-M0-?,&`-;-=Z]=Y01>E7M7"6FL__"!3;G<#VM%^&-7B/3^3D!WI&P'6KE,29,
-M-@1(!"EY(<<_=UF*6VPZZE03MT8>90(`?````'P````"````10``>(5,``!`
-M$0``P*@!`<"H`0(!]`'T`&0&2?XFN_+YZE?KX.U"7+Z\9C@N("4(````````
-M`%PJ``!`&9+S9%'$[2$?\8OX1>+]9:*;)V[P>_?V_C"*.6V[[//`71AFKH#J
-M:0S5A*IE>*1PV_O;^$K'O"Q_H";"5!.W1G1P`@!L````;`````(```!%``!H
-MA4T``$`1``#`J`$!P*@!`@'T`?0`5`8Y_B:[\OGJ5^O@[4)<OKQF."X@)2``
-M````````3````#`ZJ4OJQPO;,$TJZK[V*LUBEG!N+DC/X]B6C8P)7/V<6C@Q
-MBH'$]&<!S,G3I503MT8-?P(`;````&P````"````10``:(5.``!`$0``P*@!
-M`<"H`0(!]`'T`%0&.?XFN_+YZE?KX.U"7+Z\9C@N("4(`````0```$PJ```P
-M':/I2%G8BP[,&"CB5<=`26>?0G#4JYEN8=YM.80!5*UTL90!C-"WS_0R:RA4
-M$[=&L8X"`&P```!L`````@```$4``&B%40``0!$``,"H`0'`J`$"`?0!]`!4
-M!CG^)KOR^>I7Z^#M0ER^O&8X+B`E(`````$```!,````,+.I0E,,&EP`;WC;
-M3;9VM_XH!!2(Q;TOX.1\S``,YH<2>-/#JAMT:Y+I#9IL5!.W1N:,`P"8`0``
-MF`$```(```!%``&4A5(``$`1``#`J`$!P*@!`@'T`?0!@`=E1Z%IZEH=NJH`
-M`````````"$@(@@````````!>"(``'@```!T`0$`#`,!``P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``D\CEL%3K/&V:S,0/3!CHI/65L#&ZF=7Z;TYY%8>8*<HL
-M6]/A4ZV:)817HJ3P<TB!-R:*F*;1\7CI/^=<6I![$T*4U3:(C3``_;P@LN)#
-M?(Y:D0G3"?1&W5AE-[H2=#M#>^9F6?Q(P&JF\UU,=%FOOG`LI8(?IT:F@5\?
-M-PT-W_0I```DUF,%)Q`U+G;$9GL$%LWTLH^[N+`@N&5;-C7ET-<+?O`I```<
-M``!`!!+'/5;_2+:%,(7%AFH656)*<9-W````'```0`43UYZ)E#)L=8FCG55K
-M^`+>>;CC)%03MT;JFP,`7````%P````"````10``6(53``!`$0``P*@!`<"H
-M`0(!]`'T`$0&*4>A:>I:';JJ```````````I("(@`````````#P````@``!`
-M!@````JW!9$<S%#ZH&2'03;?VD/EF8;1J503MT9+JP,`N`$``+@!```"````
-M10`!M(54``!`$0``P*@!`<"H`0(!]`'T`:`'A4>A:>I:';JJ```````````I
-M("((`````````9@A```@``!`!@````JW!9$<S%#ZH&2'03;?VD/EF8;1J2(`
-M`'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``D\CEL%3K/&V:
-MS,0/3!CHI/65L#&ZF=7Z;TYY%8>8*<HL6]/A4ZV:)817HJ3P<TB!-R:*F*;1
-M\7CI/^=<6I![$T*4U3:(C3``_;P@LN)#?(Y:D0G3"?1&W5AE-[H2=#M#>^9F
-M6?Q(P&JF\UU,=%FOOG`LI8(?IT:F@5\?-PT-W_0I```DUF,%)Q`U+G;$9GL$
-M%LWTLH^[N+`@N&5;-C7ET-<+?O`I```<``!`!!+'/5;_2+:%,(7%AFH656)*
-M<9-W````'```0`43UYZ)E#)L=8FCG55K^`+>>;CC)%03MT:$SP,`4`$``%`!
-M```"````10`!3(55``!`$0``P*@!`<"H`0(!]`'T`3@''4>A:>I:';JJ6'*X
-M_<$SAH\A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(
-M`@```@,```@#```"````"`0```(H``"(``(```$A>TZ_FQ+.0W`IJMY+2/4S
-M`RU]:C?^4`*@PEX\XT0P(\J3AQR3:,)CNQ1F)T3P;JB&V\+?^>WZ4^5)"5,2
-MB9:$:3:CY>*)%T^"+Z(^JWI\QUH]BGD./DV>QTG-XQ97A=70::+-X`@VJ/S3
-MKX)R.`,9&/Y=TDBFB1!9>@X^<54=*0``)$0?JX::P[8:WD77>;UJ.D`5C$<#
-MAZWX27@5\W;O>D\Y*0``'```0`2@$]R+VRG^"$,?JB3_&.A,[HZ=T````!P`
-M`$`%0/GC%,M=Z0V#$BN)*'Y2#[.D<&Q4$[=&/?P#``P!```,`0```@```$4`
-M`0B%5@``0!$``,"H`0'`J`$"`?0!]`#T!]E'H6GJ6AVZJEARN/W!,X:/+B`C
-M"`````$```#L(P``T";)"YPJ@M\HO!W!'+*8"*RN[ICPOSBJ!645WKQV%0"#
-MNU%;.G3^L6CMHH.\-'".S<9!D8FX8)_3QTL7.K3U@HR#]P7.X,DP'#X'%G7)
-M)UAYTZU4Q*+8'_Z&@?)=A0RBUOU!I57V47!!S#4(LN#3#9\__V"0_VY/YGC<
-MT6Q[*?.(H-EA4>7_&?OR[""\6I&'OE&+/;P7F;5F)1OCAQG>#([:P!*]GPX'
-M6K-I:A?E#$_.A`I,](SZ)IUI]X:1H$C']J4]R%N[2L[-5NBQE%03MT8(%@0`
-MO````+P````"````10``N(57``!`$0``P*@!`<"H`0(!]`'T`*0&B4>A:>I:
-M';JJ6'*X_<$SAH\N(",@`````0```)PD``"`K0D-*6A<5,'8JZGS,O-C:Z8L
-M-JZUI?S?,SR\+>4NZ#RE!HOE=>RP^"WH[34H+%'=J?3(\OX?&E7HH2E7]XA9
-MBQSNM50Z%DD&($AGF08R%ER<O7S;=TGW#1.!@;]9[N46PT.G50Y)M/24[6[[
-M5XW<6>K)"?-/0A2>YWI`C%03MT8G-00`'`$``!P!```"````10`!&(58``!`
-M$0``P*@!`<"H`0(!]`'T`00'Z4>A:>I:';JJ6'*X_<$SAH\N("0(`````@``
-M`/PA``#@0$Q`+"OG+L]4-Y!WB6XYKP+QLFN!L`H43U80*<K/[-H9\AJD%.*H
-M4:%L,5<>N)(C8[$/_U'Q`*J^25(G\E38+%"];QS7$$6_..\E(DG]*<@0I#,;
-M*FN1NNT!00<($+=\NZX/#ZW<N:S^ZH@N&FD<!,Y*PH>VD6\$1.\)=I@TU>NC
-M#0^K=ZP+BCR^ES2AX:.<.Y-;O#>&?F_*#TE`#PS`,/TA9N4EZ%5X2%LE&-Y&
-M?.>BI9RN8+SDZSS9Y8`=-,*.JDM>Q)O(X]-<AG"'`IH]3PW^T!XY@];J5Y!Z
-MVU03MT;L/P0`_````/P````"````10``^(59``!`$0``P*@!`<"H`0(!]`'T
-M`.0&R4>A:>I:';JJ6'*X_<$SAH\N("0(`````P```-PA``#`AF\&T[SA;:W*
-M?D)T9^#X,'G];*BD9H]FNM&]6.ELK2N>[:ELL[MQ<)D\!D4>[W5-"E45#DN?
-M+"GEJ,[_8^%'$8SJAB=)F1E<P%%%;.K)(E^MM^61#IN[5*OZ\]Z]61GN4](]
-ME#Y"5Z4"21Y^HZ.9H-@M&`:Q3V&WT-G"<]:E"SX@@=.45CK5)A7L13B*<K_O
-M#IE3K"*[5X<6Z^:@IUF:H;5=BKQ'/0!X@:>R3'!\[H0*L4KU0ZF\RK5_32M4
-M$[=&]$H$`&P```!L`````@```$4``&B%6@``0!$``,"H`0'`J`$"`?0!]`!4
-M!CE'H6GJ6AVZJEARN/W!,X:/+B`D(`````(```!,*0``,'EK^+`VDHL(/9TL
-M5=12@<(J<%M4N1&*(9WFM[N`Q%HR=*W,Q/HS57,A>,`O5!.W1J-F!`!L````
-M;`````(```!%``!HA5L``$`1``#`J`$!P*@!`@'T`?0`5`8Y1Z%IZEH=NJI8
-M<KC]P3.&CRX@)"`````#````3"D``#!,?4H/U<W54D!/T'Z1)KJ!F0<J.2^E
-M[D>J9;9$IYIRH2#95:YT[2&RUY+E.%03MT86@00`/`$``#P!```"````10`!
-M.(5<``!`$0``P*@!`<"H`0(!]`'T`20'"4>A:>I:';JJ6'*X_<$SAH\N("0(
-M````!````1PA``$`PS*\)5R4(!1>CA-74`7#IA_Q96F**\E&8XJ)L"ITA5TC
-MWMI(,8@A,E#;:>0A*E9_*FRE5F^G)A8!NIF54T=U?"P0CH-;]FD#C3RS!'^1
-MQCPTYB%!:E0+=%;PA3XJ&T59_+&?TCXM_7&=CX_O'MV)!ASR-5\SW)6;108]
-M<F(,@A:M^E990:N1M:YZI=L\)?9W)(X<D:]IB&HYV3FG2%"5VH4S.'#C:,C5
-M.-K''4TE)]&$2(L@B..$PV@;L1]X92^,92HE$,>+YOQ.BFN.7I(@#0>36P%&
-M9@G''%\?=?&F^#2-?U70YVQ)RCBB#2?Q5!,0@WP!XXHGC\-/`,9"5!.W1A*-
-M!``<`0``'`$```(```!%``$8A5T``$`1``#`J`$!P*@!`@'T`?0!!`?I1Z%I
-MZEH=NJI8<KC]P3.&CRX@)`@````%````_"$``.!>D?V"1N^<V'S6O]B!OR'>
-M59<.WYA1#.B0#QH3VBE.`6O`#MW=L//%)A%N04YDAYS)\[M)8PCG?$7,;KH@
-M,AJ=!9:*#7G/8195P_YH7/CRYG>)D37EB%!)%T(S)3O[0A&"C?43$P*5^3KY
-M76S)&[4'93?ZQ1\1=ZI"7!;=GW`&AX98(`@1&"QWKD(;0(?EF(WR*&+Q!#TT
-MVO><B*?U]S)@M>Q';)/25UM4M**=-[*+\[SGX7NX#N=22C8/_YUOHJ?ZB(@6
-M2L*9VICIK]@!,^#4^02:KA+\51^W5?.*5!.W1J:>!`#L````[`````(```!%
-M``#HA6```$`1``#`J`$!P*@!`@'T`?0`U`:Y1Z%IZEH=NJI8<KC]P3.&CRX@
-M)"`````$````S"$``+"];[J2O58<<O+;K46_,-5W<?<$/RX9+O2<G=UCSRUA
-M(S4_[,4`F79R\KS,/^B7MO8593&Y&.,A]<X#LV_#SH0DN..2A=QP+.N%`NRC
-M*6<P$3MO7AYBU#91Q4YI$42.FXT&$#3*_^".>M)['L?GW4F(P(V6BO>=J3KH
-M06QZB(W5QF*N0,9DP"%+Y(#MS!C\B6WE&\/=*\?ND<<(1)Z[MEQ+XR:7RL*+
-M96#B\9":5!.W1G7!!`#L````[`````(```!%``#HA6$``$`1``#`J`$!P*@!
-M`@'T`?0`U`:Y1Z%IZEH=NJI8<KC]P3.&CRX@)"`````%````S"$``+`$S&5R
-MYR[Z@;Y*&,_PSE+*A$]C?$*/6UO<5'2[%0B:"E^+50%]#`1]:*[RS\=>]-^T
-M4IA"(?,KD=4W,S<8\:V.#'6>-AO1^_M>-5D*8CF!T;_W/'2)N@RQMT(U@NA#
-M*XT\]I,7G\^4G@QY!38^,FT"%NAUKT"F0\M]9VL//=+HYMGTHKS<.=<FUL/Q
-M>KU[9#X8PR+\5$Q?`$X'77$!.@1=(=<<DP[Z@];K\0U75!.W1N'>!``\`0``
-M/`$```(```!%``$XA6(``$`1``#`J`$!P*@!`@'T`?0!)`<)1Z%IZEH=NJI8
-M<KC]P3.&CRX@)`@````&```!'"$``0"ZAL$-(.;.\^'88Y"N2R>>T$>GC::E
-M;K-%3#B7&P8%O*R;KFYG2@%NS1Y4S:+L)7(JT8YK<4L2M47&1FNPZNYJK(."
-M^HB:K<_[Z4L>TQ>Y#/_NXCU=1D-"6L')28$.18*N.9!JH(I%YU_T]=[`5XR^
-M0A1<#R1;X[2VA/[46O2FN]&XU3W>3#O?6'"]`R^UV$[[ZFH'#F&.Y9X!+*^N
-MI7R*[K`G7N'7Y>FU=3MH*#A\]*N8L9_LR>5*U8/#ZG]S:"[G=%#%;JQ%I6`:
-M<^\*3U56\OEL5@7[2G)HF4#-YAIBM0]9Y2DWM%8?)!#!T2X!PVX0(PF!`3-V
-M'554-WA4$[=&J.H$`!P!```<`0```@```$4``1B%8P``0!$``,"H`0'`J`$"
-M`?0!]`$$!^E'H6GJ6AVZJEARN/W!,X:/+B`D"`````<```#\(0``X#1/G[TE
-MX0LDXLA##S3,_,=$W.F3205PT4R]DSSO^>.4^QZ#!I2LKW7<ZJ>(-'8C4M<=
-M!=\(5M"'7A8,1D6+Z_+[>LU)KE6T@VZ)87DNR9?QXQ0S63#B`$*TKT+H#EK0
-MCV]FLA@V<DG:F%DU@7_3;=JX[\N?:2DY(('A2DY&=E]2!__NV"P2>S]34-]'
-M=Y_U79!)S?@+:&7\XF.D;E,83"Y,`1KBF=1(4GNXMXJ[=@AHO`VZE,D>S"0H
-M?DL?_N57)QW".YU/,=;ZEJUQ_G/\9%56];M\(9!K<([L;V14$[=&D?H$`.P`
-M``#L`````@```$4``.B%9```0!$``,"H`0'`J`$"`?0!]`#4!KE'H6GJ6AVZ
-MJEARN/W!,X:/+B`D(`````8```#,(0``L'8N!\B2+>SKY=S;H4+;8:XLUQK`
-MZ(/]FP96C@V-PAOC708(]U$?Z:0^MS+KZ!UCH$*H&*:!C<EKK3[!:N-0]HQS
-M<FLM"J;,+BFZ>Y.3)+[J`@YU:L9LO^'`@<BT$M?<@PKP.)/!;!UQPU%/%]XZ
-MHPQ-*O=^IA,220.ZCO773JIH>8QC\1.'#[]T-^D4)Z_?B:7")H`5IA^$"=6D
-M%O7,X>$8\.J)6>-IW1D)@<U4$[=&(1T%`.P```#L`````@```$4``.B%90``
-M0!$``,"H`0'`J`$"`?0!]`#4!KE'H6GJ6AVZJEARN/W!,X:/+B`D(`````<`
-M``#,(0``L"'[Q:272I;-U_R2HL/,*2#4B?5=\F5LS"]DJQ2[TY/D$(I%:2`=
-M:K>$Y:%MK1*"Z;*C?FA%`6F!\[(,+LO/B^\9+Y),`1'^`.P%FE49N+GA5@)'
-M?P9;(68!"?Z<='>,Q?[]<0`!<\+4A)'"]J1HDZ$=5MW\"--3W"87>QY':5M+
-M2P]^B1R1_@NO)_Z_ZL,+NLIZ7IU:&=H39>3VX6Z30?-S[?3WE_:4B)MUN6]4
-M$[=&[T(%`(P!``",`0```@```$4``8B%9@``0!$``,"H`0'`J`$"`?0!]`%T
-M!UE'H6GJ6AVZJEARN/W!,X:/+B`D"`````@```%L(0`!4(1.N&85&6P=7'80
-MYQ%GCK-,3\@7D/9@PJO`9A`=C179HA>*V93Z7[;1Z+UAQIYTPH/G^ZX[[93(
-MUVA*K8#4&L4'C]"C>Y1>G.SM`AR!`]<QF$EI3RG/ALF<43Z&CU"O=P>22:8#
-M2W"WN\^QY;3:>I>T=:O(YJ9#OAW%/X>*0,\D12U9"["'NJ1X;IV3M@=>VW<3
-MAD%P?YL/"0(MK^!(V`C(V_KME&S7QF%3M^4MYI4"^Y<$L?;-P;-K*`^=XF#Y
-M.JD8D'1A&``1VZ?A?.ER;Z)&D*353=!W/EP./$F\>NLV4&H!3*7\/2G'I+M^
-M^<'?*3&C\`U\"KZ(3AG:9-;PCAZ58:5$+9M?%1OL@438<V`NRW\\+1R*VW?M
-MC`S4$I+'!RXZZ!<`R??AB)PSS@7Q\T>?*??734';=`$"1BN*FJK1LFRX;/FC
-M%-&8/;=#5!.W1N5V!0!<`0``7`$```(```!%``%8A6<``$`1``#`J`$!P*@!
-M`@'T`?0!1`<I1Z%IZEH=NJI8<KC]P3.&CRX@)"`````(```!/"$``2!K=>9U
-MH,1E6Y$B/5?IO\++!'J/<JQ6KW6NG4WAYXU^N5>0("YA5F`WCIEM)+TF,)!6
-M*B/MT!>L1(\D+-O6O1'C<Y&#/CF*][X@56T%B]D]$LQ+/M-L(LWY&>VD\(6H
-M;5]N4F&"3,A5_<2]!NG[[X&B?%MO>\4@_@DKX@MCP6ZB<PQEE0>8$+U%(@NS
-MGPG$VHJ?%TMDW=O;#1P8Z[`;^\!>^<^)4F6I9G60N+EJT$R.Y-77N^0+9\\2
-M.POJA6-O<L0/;*'%=%DN[$1BM,B%_=:B)4_+S)N"(@X[K("L6+V2+AJ&_SA`
-M9_T'Q<Q47]9Y<+&PSSTX>HB,BW4/ABT10<:8A<ZT_$;^0_OKSP#WWX3S0-HY
-MXP[C'MT)54-VLU03MT8"G@4`?````'P````"````10``>(5H``!`$0``P*@!
-M`<"H`0(!]`'T`&0&2;M)@I;N-A$X/](=]E'5$ZXN("4(`````````%PJ``!`
-M_I9P&2$8YEMG/9)4P)IC#S)Y\[F"9=`DMPBAK6FS9D/BW6CO%O^0)LF$%YVD
-MWT2]</%\=Z-]-]<R__M^5!.W1OBI!0!L````;`````(```!%``!HA6D``$`1
-M``#`J`$!P*@!`@'T`?0`5`8YNTF"ENXV$3@_TAWV4=43KBX@)2``````````
-M3````#`.J)\-!IC;2$W2/D'QA,,6-*$R.Y/@WM1C$NW'=1XH3..)!5X4H%#!
-M]!_D-%03MT86N04`;````&P````"````10``:(5J``!`$0``P*@!`<"H`0(!
-M]`'T`%0&.;M)@I;N-A$X/](=]E'5$ZXN("4(`````0```$PJ```PA%3:+8PE
-MH'ZBXP"`O^*%T9>7O4Z"1?ZA-XHKB2[V%#,]$(&R0Z.;E4Z_'0=4$[=&0,8%
-M`&P```!L`````@```$4``&B%:P``0!$``,"H`0'`J`$"`?0!]`!4!CF[28*6
-M[C81.#_2'?91U1.N+B`E(`````$```!,````,%VVKYCYD0_IUO3T>6%%Z1C"
-M3RM?7[Z$C,'>[.B5KP<K$B3V_"AJ,_P(W5VX5!.W1I?"!@"8`0``F`$```(`
-M``!%``&4A6P``$`1``#`J`$!P*@!`@'T`?0!@`=ETV5LB%((SSD`````````
-M`"$@(@@````````!>"(``'@```!T`0$`#`,"``P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``@8>L/V$PN)NU]@(2Z,+6KXRU>\IB0M<G8SAU:.WU:>L<6'#IG&TP
-M>$$:9_4D!1OW%RV^UC:"YSJ6)<'7#\G+3:#-28[O32M3Z"O:24I3V*RKVL1-
-M:Y[1EW:&]W);QL`R5RKB3%(T*;)H<`8F5VBU5TI[WT>S.HDU,938>.Q.TK$I
-M```D)7Z_&!8>O;/+^04B)3V2E;NHN+W9D4[N_U*"S40%+'(I```<``!`!&X1
-M]NB8"/H7:`"5MZ&8#;@K?E\G````'```0`5P84W`[DWC$)++&FC)`]A[;QW*
-M8503MT;8T08`7````%P````"````10``6(5M``!`$0``P*@!`<"H`0(!]`'T
-M`$0&*=-E;(A2",\Y```````````I("(@`````````#P````@``!`!@````KU
-MY`*BZ<%Y5'HX'>P@C)/+]=IDLE03MT8@X@8`N`$``+@!```"````10`!M(5N
-M``!`$0``P*@!`<"H`0(!]`'T`:`'A=-E;(A2",\Y```````````I("((````
-M`````9@A```@``!`!@````KUY`*BZ<%Y5'HX'>P@C)/+]=IDLB(``'@```!T
-M`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``@8>L/V$PN)NU]@(2Z,+6
-MKXRU>\IB0M<G8SAU:.WU:>L<6'#IG&TP>$$:9_4D!1OW%RV^UC:"YSJ6)<'7
-M#\G+3:#-28[O32M3Z"O:24I3V*RKVL1-:Y[1EW:&]W);QL`R5RKB3%(T*;)H
-M<`8F5VBU5TI[WT>S.HDU,938>.Q.TK$I```D)7Z_&!8>O;/+^04B)3V2E;NH
-MN+W9D4[N_U*"S40%+'(I```<``!`!&X1]NB8"/H7:`"5MZ&8#;@K?E\G````
-M'```0`5P84W`[DWC$)++&FC)`]A[;QW*8503MT8E!@<`4`$``%`!```"````
-M10`!3(5O``!`$0``P*@!`<"H`0(!]`'T`3@''=-E;(A2",\Y2480.SS);VDA
-M("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,`
-M``@#```"````"`0```(H``"(``(``,L$;7?$+-OUP:>QII;H4P'JN_;K_74`
-M61\0EO87''%$*6]*(,U^2I"'I0AW`/QS>.$F!W$4DSG9N+0&+<E[KR>C_)*G
-M=\8&-G9#E\953OLW:5Y/H$*IT2M'&T,>LDYK^5N"8R40&E4DS:AI4'#]:PO]
-M[(YCM<BNA24`SK4+;B?,*0``)`[3N@[>,$NL2"_%P&>QK9]'KYHZ/3Q9ZR.Z
-MHSI(N&QN*0``'```0`0>9&UFHGO<"%U43,T6FF_8JB<YH@```!P``$`%![AA
-M-6$'*^N$LVPM\`)C/+\O+PU4$[=&HS,'``P!```,`0```@```$4``0B%<```
-M0!$``,"H`0'`J`$"`?0!]`#T!]G396R(4@C/.4E&$#L\R6]I+B`C"`````$`
-M``#L(P``T$Z,'NZK::"5=EE<F@5"+L:%PZ_;OI3+J?B/@>#Y)_N[6=ZX^N)_
-M)<W5MA+9,$@H!&VGJFPL6EU]UQ$S0XP%\=/%/[.#V1YM3(SJ^MTDQC@B1P%4
-M$)([2(GONPND///M=?%_O#L(2B?,$,]+.:Q](J@S2KA@P`*+QO;QZ9<]AV?=
-MFBO8/0_RF!C*_(*,DH]4M6M$.K,4-U`63;P*E)%$L;%U%A%2/W>))XL;E2OF
-M+EHYS;.SNR)/[4_/*G>2!?\5BJ7E)N2FSAW-%[L]A%03MT9R3`<`O````+P`
-M```"````10``N(5Q``!`$0``P*@!`<"H`0(!]`'T`*0&B=-E;(A2",\Y2480
-M.SS);VDN(",@`````0```)PD``"`IC0<,=H!D`:A7;CHS>Z/`D&-<Q"N<G<#
-MTLC@<Y35"=?"*1>L)WT]ZF8,4)CY'=BJ&='E='`I,);?'V&\,VB8R-3Q'Q+9
-M%'RHLYSQM%&A+CG>>C@O882NQ>;"5?<UYV8&P$1RF-5C74@%+EE6J-'6`4BM
-MVL=.7(@^Z+[2G503MT:B:@<`'`$``!P!```"````10`!&(5R``!`$0``P*@!
-M`<"H`0(!]`'T`00'Z=-E;(A2",\Y2480.SS);VDN("0(`````@```/PA``#@
-MQ@M4.I,H=:=_/[59WBTDGOME)CJ#`<IVUAQ)"%>T'CW%<:J(PF>(PG>`H!E2
-M&)/OY:=]W=^-M7L86K`?KNPQ(X<$B4]/48J_5NAF<0L>,&FVB\1XNA52G7IM
-MSO_.-2`3V`>D2J)DN#%C.RJDG8E)AES?\4W,&NYC^\,E)[R%2+DK^!05[@+6
-MS1D>JZ:76N9^/4D@58K,2%/])05+J9[F*3A?JF]8665+UTUNS\'GSI`_DN4H
-M$Q%^R8CP_K?/C,A,#F[J[NN9*NFIU8Z7"\PY&Y5#]#*@@O]SKDI8QE03MT8[
-M>`<`_````/P````"````10``^(5S``!`$0``P*@!`<"H`0(!]`'T`.0&R=-E
-M;(A2",\Y2480.SS);VDN("0(`````P```-PA``#`2@]N29+M3VO@_O-[;IR@
-MK4(*C@GAHT.:&>D`T^OKGJP[Y!!<@>Z]Z,1,;BR1[QJ7A!)A=T21)J^N^$S'
-M452'U9`DA*2[94W]N8YR=AF_C56X)I0LQ*K]R*!\[SB?2!Q&QY?=L?NHFICJ
-M0D<%[3A\>W<7OQRV:,JDQ9Y2[,SF0'>\8'*<`M+K"GX2EP<'H*KL:]KY_(!U
-M/K[`8>>_<`5`KHB4^N@'56\^^W]6;PZ#LZIN`%NL3K+1.T3VP))4$[=&:H$'
-M`&P```!L`````@```$4``&B%=```0!$``,"H`0'`J`$"`?0!]`!4!CG396R(
-M4@C/.4E&$#L\R6]I+B`D(`````(```!,*0``,)+P`<,>[M-B:-'#+G_XI2G#
-MM4+X*P/4][->7\,''O=C_,=F6'DY&&[W_ZHO5!.W1A"=!P!L````;`````(`
-M``!%``!HA78``$`1``#`J`$!P*@!`@'T`?0`5`8YTV5LB%((SSE)1A`[/,EO
-M:2X@)"`````#````3"D``#`GRA=65M&SIBSJ;#Z8I]0W(JO@(431*ENF[2\5
-M7)Q<H`_/H!Y+A%Z4YR8WO503MT:BN`<`/`$``#P!```"````10`!.(5W``!`
-M$0``P*@!`<"H`0(!]`'T`20'"=-E;(A2",\Y2480.SS);VDN("0(````!```
-M`1PA``$`A+8=#5K2U"&$T8"1J45A[]3G/O3SW/URD?F9=$(K6I[<F:ZV_KI!
-M5+U83</K0."!!#2IO5I?D41;3MQY&CM1,(WAL#))VYCA*6UGQT(.I[5!':%]
-M69I(]B9V8R=K^E(9JYXT#N1S<&F*0^3.:&'=$L$ZLY=S`DC-VW8#!5J=G6;9
-M`AJ&9\A#3AKNN9)LA@CG@<IVQO=VQE"'*O9NSK9K9""KI!]W;QI]"KNEK;D2
-MW>7JA656)Y%%_/CO*&G5%[,3Q.DS\$:1*[@L1^';%%P>EDH$U5(+$*K**]X&
-ML:('4S(9?M?H+>;/I1T-0<=)3N'(;]!N,8VE/HW'_W745!.W1E;$!P`<`0``
-M'`$```(```!%``$8A7@``$`1``#`J`$!P*@!`@'T`?0!!`?ITV5LB%((SSE)
-M1A`[/,EO:2X@)`@````%````_"$``.#S(MV#Z;K>$QL*=[B6K>B4,$_YA^.T
-M0[02!]R`/#O*)N2KGXWAKL/;AF@"PM;2P5^*$VEZS5?V$2VQ9QEVHG'R^G@U
-M.RM[.GAF^7%0<*43NN\'U5=XGM9P&KQ5@)DUIEC.<&T:AO3H*TSC-4G8KQ?3
-M`F'1%EMPP-!`MJ*8(E9(S.P8LLE*O'J2K-$I1W11D>E_)M=KK/&_6$CY2L)X
-MG.M_SCC:G2:Q2U*^)9T36Z.73(09A%.S:M.ZG"1H_1\3J1J@\B0QSX:JYK:Q
-M6XBL;?N2T!H@!/NM86^1E@CX5!.W1NS3!P#L````[`````(```!%``#HA7D`
-M`$`1``#`J`$!P*@!`@'T`?0`U`:YTV5LB%((SSE)1A`[/,EO:2X@)"`````$
-M````S"$``+`O`WU:925LP*#=(10?^2E)!,1_403>Y,5OBZU9FO^.YURBSB?6
-M#C^%_/[J)P%^7].`:5\L-I?52(]`*SH08:=J.(Y*0*+]3/-40%F?Z*DJI*_6
-MS/>),&P9_N!RO['%T.]GQ\S;`)KMJV$U>H*A++>[G12O45C$P\T<7EAV-Q2^
-MN>$<>?QK5$Y*BG\+"&LB3OKS1)871#7?LR5.FX&3&_/Z30B@B=J(=6X"/67:
-M5!.W1LWV!P#L````[`````(```!%``#HA7H``$`1``#`J`$!P*@!`@'T`?0`
-MU`:YTV5LB%((SSE)1A`[/,EO:2X@)"`````%````S"$``+"'EU=K'32".RU4
-M<E!=3U6_2X5-_[&%%[+,IEU_DDA.D(-O)E*1$D-"T*[9E>FI\'BD>[^5:Z7@
-M"Z$QG.ZTT<_'S&)@L&$0?EX"42\T==X?\8X0(@M/\:*>0D0B>XQEW_^MY(%>
-M(;;@L9MC1=-4+F;1I-E@4C$F*OWAB-YBEY>26?SDQRPPI[0FHX"ZRY7BTG=S
-MQ]_NW*TC9P$AD@&+R@E]B%I4I;0G9#4WSX5`5!.W1F83"``\`0``/`$```(`
-M``!%``$XA7L``$`1``#`J`$!P*@!`@'T`?0!)`<)TV5LB%((SSE)1A`[/,EO
-M:2X@)`@````&```!'"$``0"<J.Z,\?.TN/)3P20'D@KU^3#<]6E#5=8_ZO-)
-MF]UQ7B-)-A/Z4S1-2-UMN[N,>@_#]3_-<(R]X]2G/^A0F5)K<81ZP^'`9,UE
-MU_VL1*+F?I>91K0!#/^KMW`K8O6S@&Y)OAHC[@@")@@FQ6UEZX%-;*P2""5_
-MMG4#9;^Z!70+>9KT(2XGS0)]=HZJ*TQ;O!AF2C(`XS>4E,W\<7O-U@,,,JT.
-M<I\]AE6_,9C9RRN6']9B5K//F@UY^(\4YU,^101X25C-RE>_]>`[C?G(T:',
-M@`[TX%(8$:/[ZD61*IROFGZS2LSV7HL-7S<<\R[WQ*&!2S1X[DH2&K/+1"E4
-M$[=&W1X(`!P!```<`0```@```$4``1B%?```0!$``,"H`0'`J`$"`?0!]`$$
-M!^G396R(4@C/.4E&$#L\R6]I+B`D"`````<```#\(0``X!('BL"M[J6K((:-
-MR%KIQQP2[+!EDVO=EI)K;B>C00RQP*)T#,*IK5[G?:I*AF`N/`R!U`TP_YM/
-M0JS%73NDY@TMZ>J_="^[(U#T_4>G2VM::"_TN0(VW271D8,+-9D)PP%\('?(
-M2^7K_4)%3"7*7&F7<J&((06S]D3+6J>)=/"JO,DYR;0G<)1M;UZI$J%Q.\&U
-MP.X@C+ZJUVT_49RP\4^WF]@/3E:]1%BKJ$NL>7TI$3PO#WY5E["VQ#*X3QR3
-M/GWI63J'`3&J-9:LC`$II\[?[P5-ZVCI;[QX_;)4$[=&#"\(`.P```#L````
-M`@```$4``.B%?0``0!$``,"H`0'`J`$"`?0!]`#4!KG396R(4@C/.4E&$#L\
-MR6]I+B`D(`````8```#,(0``L/.;Z#\F-=E^/S9D*/"`8!WS+<!!!];0SJS?
-MPN60#TQ1UK]BP'C1?0-/)U@<^@C(L70UR`]TD^1:*7Q)@BLZ8QWY<&)QM_%9
-M11UXW`A"J"&IX)"$I5DHO]6\-#BT@36]?A&%/:@/0%E*4L?W,XPD<M1FF36)
-MGY[(/_Z25A]"RJV'<"PV136LH81^+`JK+L^]'-`:]1:*&Z==;=Y,Y6#3-A4Q
-M\6$\^]F&!-/%CZ-4$[=&R%`(`.P```#L`````@```$4``.B%?@``0!$``,"H
-M`0'`J`$"`?0!]`#4!KG396R(4@C/.4E&$#L\R6]I+B`D(`````<```#,(0``
-ML)-=Y37==@D_+T=1EEJDN26+>\FQG(7I#B#^`S'&/G!"[+#14)9\U;==@-!D
-M^R4?TK0IZS`8<\-R)_Q]R<35QHA'MARC(CKZ5:[ZB%/:W)P.8"0*,L=/UP7)
-MT.2PR5^/#M!Q4/5:I-!T&;I*KUKR^P?WL0Y=*+/O5UJV?F&XO3YNNR/((?"S
-M83@C6KD;]]A_U."4-EFY%[,<?'1=U_<,@[+Y"$/:9>8LD@"6:QY4$[=&0GD(
-M`(P!``",`0```@```$4``8B%@0``0!$``,"H`0'`J`$"`?0!]`%T!UG396R(
-M4@C/.4E&$#L\R6]I+B`D"`````@```%L(0`!4#0Z>!(:3EX-(%2,7#$2E9+<
-MEO<OC?Q/!&ILLE_DG>&9*RQE\V)KGISK_;IY;'4,R5T:`\PSIW@K?.I&H?#A
-MH+7&[<V9#D:,4)G\5BIRDIFHL7**3?78ZM-R]++;4METNVL5<-;PK7;%@>L0
-MCP-NC>6^N:>TP(UU)Z%^[#3%BN.H6P9)H-Z%CG.!U-R"MV,O)\2:[DMAM@=T
-M=?2Y7-(=^%]H*[8EIGK;>4($M=;C;+9>.7L_QV]3T>K7F;T>J,'@]V-!FFVE
-M!Y7DNCFDB/.$_J%</ZT)\B9?SSI92B/C0-3&???!X=8D!V64I6)I._Z<*:6*
-M+T;7-9Y1DE)7C2*+6NG4#<22L'1D5W>;O7))2U3K1P)JGRA`Q*6+2Z9"/@YW
-M2BSZ5&T).)8&^\+9M>&LT39T)Q@A4>C?73N&!I#2\M]@#F)J$YGM(IFDD,`:
-M5!.W1DNM"`!<`0``7`$```(```!%``%8A8(``$`1``#`J`$!P*@!`@'T`?0!
-M1`<ITV5LB%((SSE)1A`[/,EO:2X@)"`````(```!/"$``2`TO&4;K?O59-^2
-M2V(]5%<4(F$19VA9[][^=TLUYQ`6/A44)BJL]2]/P+,L'V20%77&]!CFR!1+
-M66M;D)`(EDEU`PV(Q)&3"P9VOCM+_Z\Q_GM/2'3?`PJ]D),.=>Y1^/6EF8X@
-M@DSYF-2'![?#';/!"=EJV"A/%_;ZNQ#[]RP:@D)@IRMF&4Q%&>LJ8?'Z%`>>
-M+`Z>H8U1"B9W_S)0I>!S6P%.<O?08.UW+DJ_,_$Y<!]-.\;Q_W)VY;VA;((+
-M)W7.%SOQUI8V1%Z%3!MHR2Q!(T"2XA<S!2AO9GI\*_Y%Z#B0$7:?3Q@Y,'AW
-MO><:0<&54\F`4?O&=&"Q;G^(^B5AQE=U``E0FJ;O8,&J\)!CEH8BBU[33EVY
-MR*0@F%03MT;PU`@`?````'P````"````10``>(6#``!`$0``P*@!`<"H`0(!
-M]`'T`&0&263C*>N"T5#'9P!6(2V;XJ,N("4(`````````%PJ``!`\T7`K@2F
-MK'PCEQ(!R0#RK;^X+'OCHY*?E,KX>>3Z16,CX)5XUVST/SJ0%T8=#`$#>&^3
-ME2!)F?=9!!4D5!.W1HO@"`!L````;`````(```!%``!HA80``$`1``#`J`$!
-MP*@!`@'T`?0`5`8Y9.,IZX+14,=G`%8A+9OBHRX@)2``````````3````#"Q
-M=W<,?:KU<7"NA23]!4P<JVAVKJP65DQM>#GR>V,V/)ALN,)J'0)._)-'AE03
-MMT8)[P@`;````&P````"````10``:(6%``!`$0``P*@!`<"H`0(!]`'T`%0&
-M.63C*>N"T5#'9P!6(2V;XJ,N("4(`````0```$PJ```P,Y)B'$CV4`@U74D9
-M)$Z&S6>Z\TO)R(:8&UN]L#^*5@62%TU#ZN%P?1MF-6E4$[=&V?P(`&P```!L
-M`````@```$4``&B%A@``0!$``,"H`0'`J`$"`?0!]`!4!CEDXRGK@M%0QV<`
-M5B$MF^*C+B`E(`````$```!,````,/B(EH/NQT4VO3AG`82ELE0)VK>RW07@
-MW8HDWSHGF(F_\8YD:WS5*)`UPF8;5!.W1C?Y"0"8`0``F`$```(```!%``&4
-MA8<``$`1``#`J`$!P*@!`@'T`?0!@`=EW5DHJ=-+Q*,``````````"$@(@@`
-M```````!>"(``'@```!T`0$`#`,#``P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M%`W*)6:1C3.$V:5+\4)O\K1SE)N3L4I+5\\NHR=BW[9T`X?!)2+:"DQ;8FS8
-MV$6R3N@R@^:30\J)/&+D@7@9\8EP5I58YVP2^!X9<IFP<\P"OT_EC($7+D%R
-M0YES)>/O2"WLG%JK+(<^5AM\J/L-K4Y_V,(1UHA4/+%0"FMK'ZLI```D0>M1
-M&%PU.`32_LG6+&;QRF@V<5ODM%6%3@E1Y<'XO<\I```<``!`!"Q08);%IER&
-M>MI80)<T1E`C\;^'````'```0`6QK)ED2"[N,7.U9-9]DW6I!YPLQ%03MT8X
-M"`H`7````%P````"````10``6(6(``!`$0``P*@!`<"H`0(!]`'T`$0&*=U9
-M**G32\2C```````````I("(@`````````#P````@``!`!@````K&='C;!G!P
-M0J_@]TI-@Q=S;7?^]U03MT;2%PH`N`$``+@!```"````10`!M(6)``!`$0``
-MP*@!`<"H`0(!]`'T`:`'A=U9**G32\2C```````````I("((`````````9@A
-M```@``!`!@````K&='C;!G!P0J_@]TI-@Q=S;7?^]R(``'@```!T`0$`#`,`
-M``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@``%`W*)6:1C3.$V:5+\4)O\K1SE)N3
-ML4I+5\\NHR=BW[9T`X?!)2+:"DQ;8FS8V$6R3N@R@^:30\J)/&+D@7@9\8EP
-M5I58YVP2^!X9<IFP<\P"OT_EC($7+D%R0YES)>/O2"WLG%JK+(<^5AM\J/L-
-MK4Y_V,(1UHA4/+%0"FMK'ZLI```D0>M1&%PU.`32_LG6+&;QRF@V<5ODM%6%
-M3@E1Y<'XO<\I```<``!`!"Q08);%IER&>MI80)<T1E`C\;^'````'```0`6Q
-MK)ED2"[N,7.U9-9]DW6I!YPLQ%03MT:C.PH`4`$``%`!```"````10`!3(6*
-M``!`$0``P*@!`<"H`0(!]`'T`3@''=U9**G32\2CGULE_>MHD$`A("(@````
-M`````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"
-M````"`0```(H``"(``(``)3VW.6-_,(SB]U_CEKNGL4O^L$`DL4&V8]\EB<`
-MW,='S^PKDV"1IS;ONY8XACUVY-`0%CZ3E43BG/WU\@@6%!EF<';&8F32N_6"
-MID(CYLS2_Y\:WI70RC`FXVC)^=<@X(3EXM@5I6V4'=&'9!L-D+>Y!T_TW['B
-MCD`]_R'CVX<**0``)+HT<P'\_E(TCKM9209&N>:8<7N-++UPI5@M351%OT\G
-M*0``'```0`3W'<T!YN'\7GZ%J4`3F8%RJYT<QP```!P``$`%Z?B'NVZB>5K^
-M<QMHD#0TH_B5KY14$[=&I6@*``P!```,`0```@```$4``0B%BP``0!$``,"H
-M`0'`J`$"`?0!]`#T!]G=62BITTO$HY];)?WK:)!`+B`C"`````$```#L(P``
-MT,UZS4M,=$9VY(8ZE<Y48-4ZH"$M0HA/?*U!VTPVP4[`L360C;F&5^-,\`JE
-MJ.GD6MWH<'9@-D'5G?YF42)ZZ%Q(A1YSYFETXCZ<-=%'HE>:?[!O_"\(*JCJ
-M3!)%P8/Z4D;$CE^",WRW?/6N'C3HV(X+@'TE86LUU2,#:/7G3*B=._,F.]B#
-MTHKL!J"L?P=%IIST8F9!E*>*A+0+3HS_-H/'1^,'\>,M_.TZ61C2SX+T++;/
-MW.VDINY%G[?*A9BIL?PS5AX;?O-KU_MPSE03MT:W@0H`O````+P````"````
-M10``N(6,``!`$0``P*@!`<"H`0(!]`'T`*0&B=U9**G32\2CGULE_>MHD$`N
-M(",@`````0```)PD``"`N86MG,E3F'T.B=6!O+0RH?2L@UCBA=XR\E#7^G6O
-MU,2\)#S'E*2]^`%Q(8EN/;:`R378KA?F:`$I=?:3]_\=RM)8\P%9&5Z9S99\
-MY[DKH<R4\PKS`I0(>&U(&7-Z-<;3C@<<(@A0`QMB("X#X@'4`(;T_PC&*S?.
-M_)3&M%03MT;2H`H`'`$``!P!```"````10`!&(6-``!`$0``P*@!`<"H`0(!
-M]`'T`00'Z=U9**G32\2CGULE_>MHD$`N("0(`````@```/PA``#@A#5],1D,
-MXE<NJ!DJ8,[PLX3OW,^.5S'*S75=UZ(]JSDDQSY&_$C,P7C.<?X:@W\2XC*2
-M*'J'-<.9>XT-UUD%X1DJ<,'M,HU\/N-'>Z6;<+?GA!')J^`.80()[J@-63L2
-MI^GD)N/3^[H9Y@&@!4;G998U+R1O\0'5$M5IV]\>2/>5E^Y'0"`50?8;J7BM
-M[GML<Y<P-V9^;\*Z3D;C3M-EW@(?+SPU]2?^6",SF%1#M&>!]$V!!F0%Z.*4
-M^C)NC4=/%7+XV=%R.1M68$&YU'9$3H\;E@?_77J_!)+UF503MT:@JPH`_```
-M`/P````"````10``^(6.``!`$0``P*@!`<"H`0(!]`'T`.0&R=U9**G32\2C
-MGULE_>MHD$`N("0(`````P```-PA``#`<46^94`U+.T`SV;MWO'BVK]KIOM:
-M64X?1^";)'J.-V#TX;P$KGB6BMJ*QN,VE7G@2=SG#$6,E`(R>><U;"Q`;[==
-MN?5*T/B@X6[CG*O9(?X2.1!-LV(PCN3+\RR>;O52B\"K+OHH:5J8WE--/Z7E
-M=&WXZ8A)C7NV`M58L^.FQ.K4MSM;"[#1LN%"F&IE-WPXG.(1W,J!%\UT,&=M
-M$-W8.0%3"`']X1;NN+NR>#UFPR1YXOL`=90<<IO#RR14$[=&/[8*`&P```!L
-M`````@```$4``&B%CP``0!$``,"H`0'`J`$"`?0!]`!4!CG=62BITTO$HY];
-M)?WK:)!`+B`D(`````(```!,*0``,.-PUKGY>AH$K-RY9WU#O"K:Z(9ZCV)Y
-MF9PSE%20(#$][=)@;1.@E>94[QB35!.W1@?2"@!L````;`````(```!%``!H
-MA9```$`1``#`J`$!P*@!`@'T`?0`5`8YW5DHJ=-+Q*.?6R7]ZVB00"X@)"``
-M```#````3"D``#!C"M79U-P[LSBI+&HD.]!H7QZ-H70PY=TT36&4XYQ/Q6LM
-M#A;ANK4SL"G?4503MT8+[0H`/`$``#P!```"````10`!.(61``!`$0``P*@!
-M`<"H`0(!]`'T`20'"=U9**G32\2CGULE_>MHD$`N("0(````!````1PA``$`
-M&F*D%83G_2+C<TYXA_[SY;HE?;H?BC>%>H#[>5N'Q?=H\S_E9#);,%Y!T-7X
-M84(8DYFQ=CLESPY'!0R5*.7[:&WG,6)MX]#7;F:(B.']N6R5=D\'<)`O`><(
-M[7)]6T2=%44+>XD^VOY(W$=$FV6O>VB=,B,R/X,[63SS,2[O@]]3N[2M%<G[
-M#X`QDT1M'.:X@?2(&S?DW^<$C10S%O_2N*3?YZ)E=L:Z1N<LY*5L1H'`K)S_
-M_(78?H*2PU61O'>=PGRR%?(@]351O@2C):&!IF'_4NRGY0]>TB6B)>W4.DWK
-M4R*/A(Y<.<M?\0_:7T<JR1UGK"\](N(0H)9$5!.W1A3Y"@`<`0``'`$```(`
-M``!%``$8A9(``$`1``#`J`$!P*@!`@'T`?0!!`?IW5DHJ=-+Q*.?6R7]ZVB0
-M0"X@)`@````%````_"$``.!5K,87&Z/.:^M7,4H=[!@U0[2)4ATJ\R;Y(K^!
-M\TI/(.ONTD"E5RAS[*5\FB51@*!'`J)4VTYV@J:"/[2(&^\X4HQ;N;-@'>3,
-M(LP?>Q`K\>Z8XM.6_2[:#IUUQ_"\@0="N\!(5ZEG\@%*ZBS'8;M]('M0EK%\
-M(^3(<?:PQ+$=Z:`VK@(O=U0,9\M)]PGB,^D0K%O4V_#72(6@B&S`E&_P^4:'
-MN26\^AAG+OYYOY)4<E]B,#]2GP-1WO4E_G\32Q4[TYKG%&[&5K25I[EI2_>O
-M.H553^SZ3((.P':'5!.W1G`("P#L````[`````(```!%``#HA9,``$`1``#`
-MJ`$!P*@!`@'T`?0`U`:YW5DHJ=-+Q*.?6R7]ZVB00"X@)"`````$````S"$`
-M`+#<X#"=8"5&A+3-VO=C.E>E2J%$9PBP%&;#/ZM=!\)SC%NJ+,P_E--,N`@<
-M6S/O=LFPQNRGH-M5Q@?#]&?<<\8&G9:@+1"T(BMKLE4OGB<QVVZDP[-Q9-;;
-M;>+,?]<"J]03NZ=#5,^OLFOAB<@;#^?#R+WPRD?]I><1^L=)D-VV>.8E+;V$
-M4%!!,'#KA*).:,IKINF14^8=;JS'H(`F*EQN$(Q+NV0)O:F3VE#F5!.W1J8K
-M"P#L````[`````(```!%``#HA90``$`1``#`J`$!P*@!`@'T`?0`U`:YW5DH
-MJ=-+Q*.?6R7]ZVB00"X@)"`````%````S"$``+""?YV0DEV/)<Q5&,IB!P+,
-MG1<]S//H-T+?,1$O,6V\KE28?+.[(#N5)`;!-%@>&_G9N>,HF7VO+K>J>?1=
-MT!OEG5R:,V9L,]\NQCI,]5>JC(EN^#4"B#13KG/P!E;C2W[2E_`HI0(@1;,:
-ML;;P"9[7P<BP+^6)L@15N8NMM::?@:0.35&U][R+75%-Q,XLL1*\5",W?FML
-M7P!!2':3.TAPD#&U^O[OA7[#4M'$5!.W1HY("P`\`0``/`$```(```!%``$X
-MA94``$`1``#`J`$!P*@!`@'T`?0!)`<)W5DHJ=-+Q*.?6R7]ZVB00"X@)`@`
-M```&```!'"$``0"`4WZ6QSR2`H.QTK^>;)(=]]1J6`5K*IO!0L"II]'%FYOE
-MLS*.N3BC-DP!3Q6.R&]-WQ:Z845L1T)!X;__CH7P`8I^N)&%H2,*\L^2TF*^
-MZR(#R9K<+\1ZD0_S\B5)U'<P#M_U'LH'W%YJ()_IXTY8#UZ%",;QC\2?*]F!
-M-+@%5')2F9!]ZHP@JRBX9=[N6\F@Q=1"1[*U+/74X#68;84U^4<AKR4"H80F
-MMQ!#64NR=VZ?2#PB1M<YT>U;73RWPGNH:\5;"F6_)3W6&5EY`N=G]W)25B_T
-MKE7U;Z%&R&J07RL?Q4-^?%1;N"3E*YVXC#B5-+T$+)+E$6V%LK14$[=&DE0+
-M`!P!```<`0```@```$4``1B%E@``0!$``,"H`0'`J`$"`?0!]`$$!^G=62BI
-MTTO$HY];)?WK:)!`+B`D"`````<```#\(0``X.;4L^CX7L#PRV-]T&BJ-?P!
-M-R*1>FW'B>'$^AEQQ:")*SX9+B"*S6HXEXD_LP@]3&H$RN2NY+@^#X"N1:(+
-MZZBU5]\<,BIIN.^15##_7'M.U=X"S=Q*,EP:0,D9`!!CTVC#U1E;JC)!'^L(
-MK/`SW_BW[4\5(F0&K8^Y,UNZH/9+KZ035Z5#\8H1H!KM97'Q%\5<7LT\[H`L
-MX!2:;/.:U7M5UF0`0&/HOD@5V8T)I?-L7CPC?S+I1WTBL]-UWUQ/+20CM//0
-M;7?@(AE(6BK<M=/.,Z3YV!J)DA.-EO)4$[=&*&0+`.P```#L`````@```$4`
-M`.B%F```0!$``,"H`0'`J`$"`?0!]`#4!KG=62BITTO$HY];)?WK:)!`+B`D
-M(`````8```#,(0``L([N()Y$K?]JCN'#L"FIP%CP26&80Y.M5>JP:9=Y$Q<#
-M]^%=PAD2,*B1]U9@1,#K!7`V!EZ+*1/,1Z(#,B%3)?Z"DI9$WM!UH);H^3`Y
-M:1WG%MIT/F;A$_UA222@3<>8Z15/PA"6VEZ3^(U]>/.GB-H#*"ET!8`:MO_E
-M?(C+2>?UAY2WL#=*)7/(0HB-<2Q6\DHBU.H218N6M_'P",,%D0;T3*JY`V-'
-MC8X,]:I4$[=&OX8+`.P```#L`````@```$4``.B%F0``0!$``,"H`0'`J`$"
-M`?0!]`#4!KG=62BITTO$HY];)?WK:)!`+B`D(`````<```#,(0``L*3FD/L4
-MU]Q,%"$F/YO.?F/6;`#%K=<*E+,@1E99JCE%9_ET*L[_,[M&6H%I(#5*VA@Y
-M08<E"9+O48.8@=?@RHJWWZ\[F+)NP*@L%NYR28Z[]B?C+@3&^W;^J90-`#1*
-M3G66TA\QW1=LIZO$"$"W]ANFS['\]P->LEX(@57),@2,>MY->?HJP36KX(*M
-M_E)QTKOK_;YW8=A^!,*O;JDJ#\@GGV,+I&A?W>1X)TA4$[=&A:P+`(P!``",
-M`0```@```$4``8B%F@``0!$``,"H`0'`J`$"`?0!]`%T!UG=62BITTO$HY];
-M)?WK:)!`+B`D"`````@```%L(0`!4&!P_2([M:!T$R^Q+PKN@85?R@>HP<%:
-MRE-)+:1ZBL5*DS#09=PU1R"]QMFMM\S25-H><(L]74\[;V8X$(+J3+FG&(K;
-MB^]5--<864$_G(+8&G0W]+H!2X7W-S[-)M$TX<."D'I*J4I_5TQER'Q9>[0F
-M('61>;/QTX#Z:@X:@8NXW5>?O['[)?"9X9=LBB`&5GC,(=3MEB?W,OD?$8+Q
-M/4V85=?]6'H*F`&8=\PA,U\1C"WQO4X'8X)`AV-`TQCJ$?<='E=_(T`)>$.@
-MS9EVOW"$K'SA3:#%-UFP6^&EZQJPE;L[U@,*#)TD9?@U9H1J8]^P#OJ<H=/P
-M()1B,D0:CQXG09[=Z+BZ"8E%4IKO*GFHC4CE$4KM&DT)T0KL[D3&DWFC5F1^
-M($2<Q(<0>);,]&P:-C'\OA`90[GN_!Y'-T^LTY@R6<B%>TZI!ECJ5!.W1B#A
-M"P!<`0``7`$```(```!%``%8A9L``$`1``#`J`$!P*@!`@'T`?0!1`<IW5DH
-MJ=-+Q*.?6R7]ZVB00"X@)"`````(```!/"$``2""0;Z"T0AXL+B=Y61!#I3[
-MP2WE9KCP]23%E3W$"H\&,B6>U\4/RAZ@1AA$7LAG)ON<-;&&\0Z,$-*380B]
-M@'4`.'O,X!\*%T*_G!%WW2&V.#J"I:-%4&TIV0$O*\(U'F?K\[(MM-I]W;$M
-MOOD1?B!BZ/QG.[T\YLC-\F2(,>4L&BC[PW2`X,#-Q)52*22.$3M3W3#<(Z[R
-MINSDR_]<SDETS-)4:SD2./_@EY@,530*`S\&',@].,<^V..<_QO!\OZ@RF+V
-MWO2GVVTS/GS`M_6WI#^L`^1XIG5&8`-=_0\1Y<2=A2Z6G.C+N?]]<0-1)W-4
-M:E%:Y>`F=KY4.^*7X(P^N8N=9`/[N8(X"&4\CG,E\&J>VQHF2E&AD,N&P%03
-MMT8;"0P`?````'P````"````10``>(6<``!`$0``P*@!`<"H`0(!]`'T`&0&
-M27Z:;FL3N=<I<_=P60OPQOHN("4(`````````%PJ``!`(8LQ5WQC3@P!YT^%
-M3U6;I4B8)WAY.P:;XUR0`\RZBGC`,UGET*+8,%W?9!W,$FG@5"AY6!\.$JH]
-MZ@J:5!.W1A05#`!L````;`````(```!%``!HA9T``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y?IIN:Q.YURES]W!9"_#&^BX@)2``````````3````##VRF'++<&!
-M._1`5/U=G5%&/+[Z6;FS[JU0)ESVKPB&*+K;$R'[K;.V2LK_W503MT81)0P`
-M;````&P````"````10``:(6@``!`$0``P*@!`<"H`0(!]`'T`%0&.7Z:;FL3
-MN=<I<_=P60OPQOHN("4(`````0```$PJ```P0_+'/<)^3J["N"TL_7<G`T.U
-M2M[#UR:A,#\SVYD?UM>5&?<BB$=MXJ.%F194$[=&K#(,`&P```!L`````@``
-M`$4``&B%H0``0!$``,"H`0'`J`$"`?0!]`!4!CE^FFYK$[G7*7/W<%D+\,;Z
-M+B`E(`````$```!,````,.2E3)C)9PN>/A,ZHHAV&#/T5DV_<R<0L802R1M0
-MM<3T:UJ]E!&Y<&$!#CG35!.W1@4R#0"8`0``F`$```(```!%``&4A:0``$`1
-M``#`J`$!P*@!`@'T`?0!@`=EBK_H?Z\-(/P``````````"$@(@@````````!
-M>"(``'@```!T`0$`#`,$``P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``SG,"'=!F
-M\MP%L!$MO`J@1VD/-&Y-3/*K3A,(]$8^?;X=^8X83WY3GI3Q\7Z5M<Q_"XN_
-MTT0UJ&XCJ=`_>'?Q5=*8981\HN,/F4W\9&C:/GZ23??&[4195K)X1J1NH1\)
-M@.R,LL9X%C:Y.4E8*"';HK<M5RH/4'QBN!39?G)>7S(I```D=C:WI?W5%A;0
-MQJ6$V,5=U+W!HZVY`;,5\)=RS&\AA"@I```<``!`!*P]=E7=Y)$0!VW8+/,Z
-M'6L'V`Y<````'```0`7C7<0$P4V1AERA3N%;#J%I\06MS503MT:H00T`7```
-M`%P````"````10``6(6E``!`$0``P*@!`<"H`0(!]`'T`$0&*8J_Z'^O#2#\
-M```````````I("(@`````````#P````@``!`!@````K^#[?JN&UO$>_M$UM6
-ML\<@DI!<)E03MT844@T`N`$``+@!```"````10`!M(6F``!`$0``P*@!`<"H
-M`0(!]`'T`:`'A8J_Z'^O#2#\```````````I("((`````````9@A```@``!`
-M!@````K^#[?JN&UO$>_M$UM6L\<@DI!<)B(``'@```!T`0$`#`,```P!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``SG,"'=!F\MP%L!$MO`J@1VD/-&Y-3/*K3A,(
-M]$8^?;X=^8X83WY3GI3Q\7Z5M<Q_"XN_TT0UJ&XCJ=`_>'?Q5=*8981\HN,/
-MF4W\9&C:/GZ23??&[4195K)X1J1NH1\)@.R,LL9X%C:Y.4E8*"';HK<M5RH/
-M4'QBN!39?G)>7S(I```D=C:WI?W5%A;0QJ6$V,5=U+W!HZVY`;,5\)=RS&\A
-MA"@I```<``!`!*P]=E7=Y)$0!VW8+/,Z'6L'V`Y<````'```0`7C7<0$P4V1
-MAERA3N%;#J%I\06MS503MT89=@T`4`$``%`!```"````10`!3(6G``!`$0``
-MP*@!`<"H`0(!]`'T`3@''8J_Z'^O#2#\P1,\B'`A']LA("(@`````````3`B
-M```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0`
-M``(H``"(``(``#;I_FAMA32/WH:2=*\4S-7)ZS7E'T)"4,[4B#-+*3Y4WGF>
-MP<_`4V`>-N]-SAE=?54#:]AS'5L*MN,Z=6]GL3$(;U]DKHGY8_IYIAL@$@=Z
-M>M]*/KTJ4_,@OGV"+AN_KY*E/2>B<55-7PH$2\A5;?2H6`X:.R'C6&/4>B3[
-M(I%**0``)/"GN@S3EHL4QXU8=B)W*/Q)(<`I;0I30E-MXPO%T]V^*0``'```
-M0`1<OLH2S`(8A$6TM4E5;,QZY.!Z8````!P``$`%?8<,SYCB2U\CB-#G(=&^
-M,JCZO1=4$[=&'Z,-``P!```,`0```@```$4``0B%J```0!$``,"H`0'`J`$"
-M`?0!]`#T!]F*O^A_KPT@_,$3/(AP(1_;+B`C"`````$```#L(P``T+51HN;X
-M4Z:+K@#+9\B"[2DA($Q,"/1;&@(8PF.\M2"<97%$.7"]#A@%RULJ30+3W>TB
-MX_AT?1X&>S7(OM2LWH#2<)D1V#KR(NFCGS>51^?O#MF9TS=M+;[0<IQU$(.C
-M/N>,(8_9,:PTMV`H4;I'QB3S;\'BL=\&7P9L&6@\48:FG(FT\Q?3W"S\Q2LQ
-MN6^"+0L4KR#^N#4"NM/ZW3M%EZMV8@IL6#@Q:VW/\&0V>'B^J\#"=II;V[^C
-M21HCF(9BG[%,3OL'PMG\?6XL2E03MT;GNPT`O````+P````"````10``N(6I
-M``!`$0``P*@!`<"H`0(!]`'T`*0&B8J_Z'^O#2#\P1,\B'`A']LN(",@````
-M`0```)PD``"`:SNO-RZ"9_6)/\6\B9@$M1UL*8$QJ*UEU=%@4.#H23"-8U]2
-M,[S\*[M\ZM!*8',SS?:B?C$8E$_.QYLAU^1O'5^M9<1`A0?X'\[ZD9D#2\JB
-M\%(^%.HJF>1A.,![TG/Y%&Y-R'GGMQX26Z.YY_.J+`;OVXM!Y@Y#\W@>7503
-MMT9OV@T`'`$``!P!```"````10`!&(6J``!`$0``P*@!`<"H`0(!]`'T`00'
-MZ8J_Z'^O#2#\P1,\B'`A']LN("0(`````@```/PA``#@3U2.`B>H>>`>/1MO
-M#85X5!Y]S4M1RY89BGW'^",-H7QCI8Q8O(H!W_<.1U-@$Y%,J6Z*`DDG%]VG
-MCFB6B<K;E\+#6!NMC?)ZW5Q47QEIR\+H["LXHNYC.7M9,OD9_<H_>R.'IRZ*
-MFL-Y4E'`[QPQM5L+B_&6K[.I\89_\*RNW/_<YCB(^W:OGZ`"FO/2EUDO7\6`
-M\S$]4Z5+H#X7XBH,_Q3VC6QN,9P*!*ZIJ1XA67SE6U<MKO.IG.5`A0>HHW<I
-MK^'@0!T]T(,98N&(`.0)Y%1<=?9OXT-(^<<'Q%03MT:*Y@T`_````/P````"
-M````10``^(6K``!`$0``P*@!`<"H`0(!]`'T`.0&R8J_Z'^O#2#\P1,\B'`A
-M']LN("0(`````P```-PA``#`:#MZ"ZFK$&*8A47V7C8L6I&3]Z23Z]-Y[IY]
-M^_DE^/7+[8?U<V>F2DYM8Q6Y%'UAV$M,<-?Y[&])LYW$<[T):C(BX14^0[-]
-M[[[LM80JF($NZH(2"WR<V/:>NW=U1>]\EOE1?$XFG_+%`,+C._6ZGH/8/0I(
-M^%ZO>N!F#789#A7P7/S>6;::NJAI'F_@/DJ.U;C?P'V*Z[RMF?ISH1T]#S/]
-M`AO_.&V*Z`?)2=@DON_K_@,CF:A7S:RSOF)4$[=&+/$-`&P```!L`````@``
-M`$4``&B%K```0!$``,"H`0'`J`$"`?0!]`!4!CF*O^A_KPT@_,$3/(AP(1_;
-M+B`D(`````(```!,*0``,,UO#[YG,V-/P-\#9)_R.(O6QR47>@7)873MBS'#
-M2K3N34B*'4CM?NGS5A/X5!.W1OH-#@!L````;`````(```!%``!HA:T``$`1
-M``#`J`$!P*@!`@'T`?0`5`8YBK_H?Z\-(/S!$SR(<"$?VRX@)"`````#````
-M3"D``#!N72RB:.C3"MB@_R=+1XME4ACVK%YL!!N]64U(72EI;P5(-.YU]/XV
-MC47<GU03MT:R*`X`/`$``#P!```"````10`!.(6N``!`$0``P*@!`<"H`0(!
-M]`'T`20'"8J_Z'^O#2#\P1,\B'`A']LN("0(````!````1PA``$`B3"$[Q/H
-MR%0ITMRZMM-6#;+1%"7GI`<$CV@\D.+71T7G.'X"QST-HB+[/]4PV'!P.WYO
-MRE+9^26U/#OWA]!4[OQ,&J.;2"(NO])'8+RZA$+MBE4?S^?%@Z<WL\M2&6CZ
-MN;#,Y1\1?G!,7E',B7D#/1-2LF&D9%,%<@JEK[YP9.GO/<N=A"C"/Q*\K,P>
-M'Y=_3++@FS!EEAFN^"CU=\!EGC05,Q_\R+MNQB2*Y7.<"(K`E;M!@-W2_6G]
-M`?+L22&3T'ID-=+1KL5Z@_J1ZVVIVAWE&,0(1LKZJ(N@\"N5*35LL5H5J+[*
-MB@;?VG1.B0;ZJ8OZM=OWMEH/3'EK5!.W1G\T#@`<`0``'`$```(```!%``$8
-MA:\``$`1``#`J`$!P*@!`@'T`?0!!`?IBK_H?Z\-(/S!$SR(<"$?VRX@)`@`
-M```%````_"$``.!,ORLD81$;'V00V^%285L^<\WC$&W:YAI5EH/L&)25B@AE
-M%)M7Q:&@@[3K,+U&W'<SDF.@UK)+T:5M-(]5(YN%[[Q_4TW%3%Q58`U1(Q2R
-MR:NY5E0:F5,"S:P%!;#7AMP_KED\/G/+?ED41?*,+`J4+WGV;!@H=JUZ]%*/
-M!]]&(CV,41#8T7NHU6W5&R&T$K+?1B6EW1`,BMJ+[2"@'/.`,&RS\H)6`WHX
-M.5/2^+:-IY\4CID%`(&I!252>U.\]N[<J0Q)R=*M5,=&F!_8#LIA4^C]D(3&
-MB"1T?,AP5!.W1EY$#@#L````[`````(```!%``#HA;```$`1``#`J`$!P*@!
-M`@'T`?0`U`:YBK_H?Z\-(/S!$SR(<"$?VRX@)"`````$````S"$``+`'HYX.
-M[[N,??&?)MR./FV\?X#":S3G@'<I>V#0VP_F8+N"W@3\T?S/<,;/LZ!@N;8C
-M<+-9JH=][&+O="-25X>JPE(H_RU*!S\]/Y-3'Z!0BS$-6C,S0C4G.]JM@PV(
-MMO:)H@>B^\G98W[LNBT\_RD]O!#7H-BL7<$:J;$*U.[(&+%Z&_U+N#6$]4_8
-M+.>\K4)[]=]3/P9<E!8#6]`J9GFZ;P]6%3BV,KEU$?><5!.W1BUG#@#L````
-M[`````(```!%``#HA;$``$`1``#`J`$!P*@!`@'T`?0`U`:YBK_H?Z\-(/S!
-M$SR(<"$?VRX@)"`````%````S"$``+#^L%Z'Y+&1Z]LZSE8$@SS^D^:1C5'U
-M%:0'66<V&<VEO6!(%S;D3@*8]];I.II.[N[5=?92LP-:NS8Z8K7D.D2/2%B#
-M`V+H/)1&SQ/O<^QY0QX4"(%2DV;`A/1I:J2S_\[Q:,]Z(G\)Z()>.J[GT+65
-M/`-.7(U@=G*6U@\BZE)FR3;9>#'<,DRVEGKLLK6RO(^<W8#N]FY0Q4N`T%7D
-M3S\1FPX-QS%V5<M0#26`5!.W1N*##@`\`0``/`$```(```!%``$XA;(``$`1
-M``#`J`$!P*@!`@'T`?0!)`<)BK_H?Z\-(/S!$SR(<"$?VRX@)`@````&```!
-M'"$``0#D"9;(NIK@:76TAB,G=J#_4YPD\37.FDF`<6XA0LN<]="#!3R'R=&9
-M06`N;$%_UAW)T.IJG8SAST>Y]7'ZE#N?E$&TQF7GSH<+F_<I+#""A=MC)A_2
-M7W`A0DT:J]A5'3\OKC1$A.E<O#%%DU/MO,-Z%<_:_/OU*]=@:LPH8$/"2LL"
-M&^-51`.((5"HGQ3MT[(_>%0T7&9["TBN&#T7<"[E+S[7J.S$D6CRGOBB\YLX
-M63?HOO[,BWY/$8KYOPQK:)&"9XN.."JG33.'4\*1(W1\M7P5%?"/D:D+G>$`
-ME*8B-<SXYF*Q='CEU_\R#[2(J=QI6!L-6T_]]Z)'63Y4$[=&"9`.`!P!```<
-M`0```@```$4``1B%LP``0!$``,"H`0'`J`$"`?0!]`$$!^F*O^A_KPT@_,$3
-M/(AP(1_;+B`D"`````<```#\(0``X)W7YS<E/8&'VTE%`7LSL`#;`194U>`B
-M@3?D+Z9%4QW;`MF[H3!<)U5_$;;)I/G5T>2[AU$7A,W!6[E]?M:$Q"^)?I#)
-M?J;B-OO,07UMMG[N\8S&*U(P4DBP";OZK%S,?#C[J@_J;ZUX)O]N?-9G76DO
-M]S%L#LS7Y(_L)3(<<V`KIIY.%K+;J>CN=>J6.O(*P`:V;61S]X@DMJIY93U5
-M2.]1LB?!>VO""/[CCL*L$T#Q"^7<(XC2R,J,6N;DAA8$U6R&:14"R7,VDWU)
-M4X:+MOA,/G>Z#O;/91(]*A]4$[=&H9\.`.P```#L`````@```$4``.B%M```
-M0!$``,"H`0'`J`$"`?0!]`#4!KF*O^A_KPT@_,$3/(AP(1_;+B`D(`````8`
-M``#,(0``L$HMK`/LE]4V$5K^Q@\@"44K;V4+:EM+?BT*'@_'M>X+(GCC+.I0
-M/[ADN9QZ0)#BXA7PX+*"`8K44-!Q4=@+UEE._FF23.4U;3NCKJX%C">ZS"28
-M6[OSM@)-O)$S&,6-XEV(,OR:,:_PY:-%4@%5^VRM%67*^9;&?#XFX?@^I5XA
-M7\HP>T2@75^:=;L,$&NM5;$`F2Z^+-;=</Y5(TNON-B:VO&Y2D@5BH-W,AE4
-M$[=&$\,.`.P```#L`````@```$4``.B%M0``0!$``,"H`0'`J`$"`?0!]`#4
-M!KF*O^A_KPT@_,$3/(AP(1_;+B`D(`````<```#,(0``L,2ZNX3D5NF/GU`C
-MI2V-,J$CBW[80KH8MXLS1+YH4Z+&=SA!3H?&UD:_31].Q6,%:P,]>81Z:+;$
-M?E:X'V1O'.QZ'G6LZ6SG%R*T`*8K.V]*.1,#H6(:JOOX\J:6YB7V%.MSG4OX
-MA4IJV3.W[?&V1,!*9QOT2`/0T1=_DR#EE6$/XR4[MA.F(TX@#0+3D[1&-?F_
-M\^ON9Z>691N$?AUP[*GE,"RQ``\@=.4]61%4$[=&<ND.`(P!``",`0```@``
-M`$4``8B%M@``0!$``,"H`0'`J`$"`?0!]`%T!UF*O^A_KPT@_,$3/(AP(1_;
-M+B`D"`````@```%L(0`!4*L\EX/+@S4;"&3#=P3N5&SO/X)(O0?EU(YEQ/31
-M^/R"JUGU3H0*MA%+O%XFT*G,D-;6]C%Y:0%*<HG%)8#]2&<ZO`HGT=(`53Y6
-M<'7&K,\6!C`A<M^N%ZNJY=*,D4G?#3%-?A;"JT91L0;2X9DC]VL?=D<Y)0$@
-MZ?;6TK&F4`"!6-EO1ZI!0,/7_S1P&&?6I/3?XKI$IKW464%`-OGL>HU@]8U)
-M(FZI,(U<QXA5MIRE8?QCIC@.$T,.\>\4]9J_ZD[]PM,8<<C]U\(\59,<:;H6
-MW^KC?@0++29L"$3Q/Q`Q9'H*)6]PTX41HC#*,"X%TTC:M$`P(D/VZB*SZ?NY
-M/>KL9`^Z`6UZ`,C??+DD`/!JE\ZZK,-"`)2@U)(&80GRR-I89[M$0`>Y^]%-
-M"@=_;TN'7';YN,/R1HDH],B&$7@$W%'&%RMY\S0J/;6@5!.W1NP=#P!<`0``
-M7`$```(```!%``%8A;<``$`1``#`J`$!P*@!`@'T`?0!1`<IBK_H?Z\-(/S!
-M$SR(<"$?VRX@)"`````(```!/"$``2")APFX<+>/"U6#5=^5Y@P^*@$V:N1C
-M_Y4*]Y"#C1^(9ME0IECW`6P]<;9!7D.`W`822=!#[\(Q+JG4'<^`*A1#;H)(
-MQ80%M:^!<,("X`7HWJ."K)-HIPZ76,:R#_&BM4`1IYIR'+]?)@(D\U9>%)YH
-M7&Z.%G<6>%VPU3Y7ID<57X18V'C4(\,^GZ'(\*B(V/;Z;,[06T&4Q1_P,P0R
-MB&#N`1>0P29-,_,0:`EBRHYQM*$V/S"4D7596?4G<=^D'91S/J4*^8?VJF9"
-MMF6(E%J8%_KC/#LLBOT:\:<<J>Z1-(7BQ^Z!W-(';9[3"[W,Y\3<#]LG=ZHN
-MFX11R\-9T>55;%*#KMQ&+/'R;%)5)XBO,`)>".(9?"0+BAZVNU43MT:.`P``
-M?````'P````"````10``>(6X``!`$0``P*@!`<"H`0(!]`'T`&0&29TL,4O.
-M7><@-F>+T'NJ\"(N("4(`````````%PJ``!`%I-:D0N+9SIJTGKYJ:<.$H$6
-M@:$L#@E=I\D5ML7@K:/R_V0HKOF4NP]SN8L0T[0!@NQBB8#,P=R\FL6=51.W
-M1NH.``!L````;`````(```!%``!HA;D``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-MG2PQ2\Y=YR`V9XO0>ZKP(BX@)2``````````3````#`7BM#OD>&IY&6J()GC
-M,_W[G!KL!"'T.Y98!#3^)J8;G@^/P:#39(F#3OLQJU43MT;;'@``;````&P`
-M```"````10``:(6Z``!`$0``P*@!`<"H`0(!]`'T`%0&.9TL,4O.7><@-F>+
-MT'NJ\"(N("4(`````0```$PJ```PNG!R%(^Q&&HC8YAEC/EB$G;?""UT3FP>
-M\15Q.V4[W:,9F^^/P9OJ@(+/1:15$[=&2RP``&P```!L`````@```$4``&B%
-MNP``0!$``,"H`0'`J`$"`?0!]`!4!CF=+#%+SEWG(#9GB]![JO`B+B`E(```
-M``$```!,````,,U--I^HW?,)1\YH^Q"U[C,O6F6F>T#=.8F"!$H8\)RGJ,<2
-M]LTK7!2%?,&M51.W1FPI`0"8`0``F`$```(```!%``&4A;\``$`1``#`J`$!
-MP*@!`@'T`?0!@`=EL8BBX,+N$#D``````````"$@(@@````````!>"(``'@`
-M``!T`0$`#`,'``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``PVY(PIWQ^*HP2O#D
-M^8F448IC\!N=3+-P1:QW$$,4LRXN5H,8=1WUY.\JDEU-<"U=.*9RB,(S&I!1
-M&P4XT(LR6M@?>\Z9M#JN^%$=1ZKMJ#'N5X:X0K^>$8HH/`[APL*J5J5L;K)F
-M?$&"@FE$CCB4'@B,-W<<9Q).G,3TPH"0:_XI```D<Z<U+>_R4)X#5R/8+;FC
-M:2'Q.E_K__:)_^=JGZ4#2O(I```<``!`!$7&J&&K6-1.O3:R%)JM-'<\*$1L
-M````'```0`4H1?5?MOV#.^[SQ4XD.HSL5J&"WU43MT:H.`$`7````%P````"
-M````10``6(7```!`$0``P*@!`<"H`0(!]`'T`$0&*;&(HN#"[A`Y````````
-M```I("(@`````````#P````@``!`!@````KP>T\<T*9;WZT9_OVRX2/"C=)8
-MH%43MT962`$`N`$``+@!```"````10`!M(7!``!`$0``P*@!`<"H`0(!]`'T
-M`:`'A;&(HN#"[A`Y```````````I("((`````````9@A```@``!`!@````KP
-M>T\<T*9;WZT9_OVRX2/"C=)8H"(``'@```!T`0$`#`,```P!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``PVY(PIWQ^*HP2O#D^8F448IC\!N=3+-P1:QW$$,4LRXN
-M5H,8=1WUY.\JDEU-<"U=.*9RB,(S&I!1&P4XT(LR6M@?>\Z9M#JN^%$=1ZKM
-MJ#'N5X:X0K^>$8HH/`[APL*J5J5L;K)F?$&"@FE$CCB4'@B,-W<<9Q).G,3T
-MPH"0:_XI```D<Z<U+>_R4)X#5R/8+;FC:2'Q.E_K__:)_^=JGZ4#2O(I```<
-M``!`!$7&J&&K6-1.O3:R%)JM-'<\*$1L````'```0`4H1?5?MOV#.^[SQ4XD
-M.HSL5J&"WU43MT96;0$`4`$``%`!```"````10`!3(7"``!`$0``P*@!`<"H
-M`0(!]`'T`3@'';&(HN#"[A`Y^9>GK+VA`W4A("(@`````````3`B```P````
-M+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(
-M``(``"R3^_3F+"5]A<`QR&0&PUD7@G&6L+05.Z,Q@5;PA8LV=E5T=<\7U_'T
-M!(=4*>!6UN.AG4HQ>-!>/2BE6O37HL(R!@.CROA@W;`1%(F.D=ER;K(5DUH=
-MQ)^[X:UA-D@^ZB.9(UB>6!HG:E+RSG]5XYX8HIA=PQ#"I);!$<FM&$YB*0``
-M)/0+8S=JBJ44J/CN0N$X&E#OE?#>KD3N]N9;T5#A=,Z-*0``'```0`1).-?,
-MZG&S-#\")'*LXB\UI?`#)@```!P``$`%P;`6GWNS'@B.S_-L6,"SJ5.<7695
-M$[=&RYH!``P!```,`0```@```$4``0B%PP``0!$``,"H`0'`J`$"`?0!]`#T
-M!]FQB*+@PNX0.?F7IZR]H0-U+B`C"`````$```#L(P``T"[:1HFI-/]>_)#Z
-M[42'/WZ,V@VL@YQ=)5A;1__4M>IWE<?\7?R+^VXJ0\&*1<`./8=^S4GI!Q^I
-M`>"3/>0?VQL0LVM[F+D7I:B?M%Z8:8ZP"KK2EIE375)O'SP-,C2O#![FQ.QD
-M1!%`0P_[K^,(NFF3M'V`'%4_0\EH8C5;QK-K0>VD3R&PS;*X=U$]JZH@(Q^+
-MCAN6"4:&?^^B\GYM0"*/N.^#;,(9?O@+BULG,E8[!>YYT2=S$ZHB)RYGZ=-E
-M/@D[IFFM^&%;*UG&3U43MT;CMP$`O````+P````"````10``N(7$``!`$0``
-MP*@!`<"H`0(!]`'T`*0&B;&(HN#"[A`Y^9>GK+VA`W4N(",@`````0```)PD
-M``"`+7A"(S&/&C\]CTM0M03.^<MF)G#P<?ZXB@@@\^2?+NL1[#FFE"!C(CK^
-M.`-_$K=07$<%R_.2UY2GGH<L<$]?4]NIEYH!S5'8M4Q83]YJI!$F&L;YDE=,
-MR!=7Y8Q$NW8D\D'2/I:1%RZKK]1Y8N*@;9H_TN>%,%ZI$N-*KU43MT9BUP$`
-M'`$``!P!```"````10`!&(7%``!`$0``P*@!`<"H`0(!]`'T`00'Z;&(HN#"
-M[A`Y^9>GK+VA`W4N("0(`````@```/PA``#@4-`U-?0`36NG*:*H&]=#]4=>
-M@Q?G/%E)==ILI0I-WPB/S0D?5"M(K&6B&<M&6:T3C&BGE.(3+(^0H=E1INUU
-MI.+B@6G-)?F_OR5>YBJ7VBA2!-?[CAJ..1OI8:K?/["\'W#PC#2KQW-DMK*%
-MFD**FX0]FK0BOH;D9Z_X8`W+'0)-#)^U3]81IWXTUVRO;TO!_M'D$`:$-Z?$
-MXCL)N`S%V1$JH<3CTQ9DU\9^0[96---SA'75M/+$?A(Y4W(9ZK\,CC(%CS><
-ME)TB-Q?0(U[R+1VMY>,P4*XU#IF'SE43MT9WX@$`_````/P````"````10``
-M^(7&``!`$0``P*@!`<"H`0(!]`'T`.0&R;&(HN#"[A`Y^9>GK+VA`W4N("0(
-M`````P```-PA``#`6)1^'O*.)W@`X:8(UQ:!Q*$1@.VH5NX(R-?:2]NSVEZ6
-M7_EI^<S/G?@WB-8<MU%"+OM8,[*8<IUI]]A5/)CH`P]CK#&`5$Y"++\"I/*+
-M.FHOL">%,AXP6)Q,"J#(6L_L,6[EF`M$?FO4>1'%4V^_@$KG58?H^DWQTOHT
-MZ*W4U\'IE7UX)C#\>1A5@CIQS`T4)10!"$-X:*53"S,:[=@BT4`,&1#ANF=%
-M(Y]XYVN(:J1@9(G,I`<'TDZWH]15$[=&E>T!`&P```!L`````@```$4``&B%
-MQP``0!$``,"H`0'`J`$"`?0!]`!4!CFQB*+@PNX0.?F7IZR]H0-U+B`D(```
-M``(```!,*0``,/*9Z+20^@YYGT!$C`;!9/`!T!]UU',:A/7-7]]<R'T(F:8'
-MAT_W<5,E`^^/51.W1HX(`@!L````;`````(```!%``!HA<@``$`1``#`J`$!
-MP*@!`@'T`?0`5`8YL8BBX,+N$#GYEZ>LO:$#=2X@)"`````#````3"D``##B
-MTEB7-/,#U+T?'WDM8CU!4A\@A)=?B::S!JS6P@SF?),*#0$RWG1W4&X*W543
-MMT;](@(`/`$``#P!```"````10`!.(7)``!`$0``P*@!`<"H`0(!]`'T`20'
-M";&(HN#"[A`Y^9>GK+VA`W4N("0(````!````1PA``$`P[=\@65J#$`\A10*
-M]."!NR%$6(ZBHB]W1F.P8V$DTBH&L<$*NO_'*I1R4?4S\'M4TZH2M4"M**UF
-MNYRU?B`X+\6N'3?)^#+@M1\JDV?)$</+*<FEX(#FH`=G_`^*+:PI=A(82YO.
-M-7=V^_&.Q9MUN@408<8GC4"\@J'ILGM\C@T7-`+R7#N-7IB:>"*<T6.V[.9_
-M#]N+@6B>B;\8CS[HF$T)N21H<=+\0NO*).!>*0C@ZI5<)Q,JO*,)8YVM'\)_
-M8'657%06*#/,]+PFU;!L>*XL(WGLA4H.?WLEK9MPHFCV0#5C-=LAHOW;T]^*
-M<C\/%[X%<1@B;<8C8%E]51.W1JXN`@`<`0``'`$```(```!%``$8A<H``$`1
-M``#`J`$!P*@!`@'T`?0!!`?IL8BBX,+N$#GYEZ>LO:$#=2X@)`@````%````
-M_"$``.#,8U!P*Q$HSSE5$J=?(58GHX5=K2VB1K)N@$W#63BCGT1_*VYFE+%*
-MVUF[@^:YP/">3FD#/_O1&V7-G#79Q.GCC-H/Y@>$\R<4@CHIV&5WMSTS8&SQ
-M9:X3WUKDFF"4U@\^'///AZG"&]UI@"<_@MBT_JUC*W2A1XL(L@1;+-NF)+P$
-M6Q!H_](8)SGX9N`+$9O4WFIA1W:'9<2R0L1AWP`#N)6;&/Y5BT-K#TA&6,S:
-M1P2.8Z\=N=]0`,+01Z"#+Y1?03PI?>N.YZ&O$:^HG58_&FFUL5W<Y"*`)NJS
-M51.W1L@_`@#L````[`````(```!%``#HA<L``$`1``#`J`$!P*@!`@'T`?0`
-MU`:YL8BBX,+N$#GYEZ>LO:$#=2X@)"`````$````S"$``+"^-WCM,1Z`KKWY
-M@KDH1RFYC>>F-\Z'3I^*K[</;KPH!*7<VF2QO)>0]T;SU92THV"*574.KPE%
-MOA-+7W-5J>39>C1'VL6N/4PJ/2]?W_<4Y-M`>T9FU@QXG[8I:L?O"C[<[T33
-MKG)MMS+\LK8:9K%%&7/>D+`'V/:_#<9W.*G*\,#5>4]?EB65:J52*FJIT,&0
-M$U[B4-\;LT0D^>NL1[O>.-X3PX,_NE>$KUO*51.W1BMB`@#L````[`````(`
-M``!%``#HA<P``$`1``#`J`$!P*@!`@'T`?0`U`:YL8BBX,+N$#GYEZ>LO:$#
-M=2X@)"`````%````S"$``+#VN/L2^&<>'`&PA,0@AG[43.O#_:@<8FQG^JT4
-M@O+.^+]1OB2P%:$"VUEXSV_Y47_GS*9W@`#A*OU)5"U1VX6W_QU"&\L/;'F/
-MFPX[4ZJ]4ZTO/!5?C6.A\^-7C[PAON[;]Y,I?T('!7K\0TC/2!NG;'!-1=3/
-M5F63V2\TPR5R+N0AOVX@04497,Y6'4*`B?SS@&B4OH]?#O"8EG.7ELV#93S&
-MAG(M4;<-A]#151.W1N]^`@`\`0``/`$```(```!%``$XA<T``$`1``#`J`$!
-MP*@!`@'T`?0!)`<)L8BBX,+N$#GYEZ>LO:$#=2X@)`@````&```!'"$``0!.
-M-<T#S^F&J5@V<<OMM/.T:[6\E\/&IQ-1?BM,>D"E.,'Q-<.26Q22;D/D1N1B
-M\@1"^AE_<>Z?3A,!2.%^G;;H)]`=2VH5HIQD8=^8!]&>9@!X9KC:&Z..NM1A
-M,YM#5`@YXWV7`:NG8S$-%/4&!&\\:\"_Q)/.]T>&ZZNGRU=31QZ\,M/0>VWY
-M;C);^WA'@SSM4R!/'IL@("JWU$;;D%5\U@#]%M-CN'%R_4V,N=/GG#<3\U>U
-MYA[/?+PM+`IW4T'VM@P;-!+$0>Q^N;PN(/T=>1+&?(>AW-\Q*7[9TM'XOT=>
-M,JW79D;&(<.6^6V9$2*']05FQ3N&5^K",E!5$[=&I(H"`!P!```<`0```@``
-M`$4``1B%S@``0!$``,"H`0'`J`$"`?0!]`$$!^FQB*+@PNX0.?F7IZR]H0-U
-M+B`D"`````<```#\(0``X`&'#$3NGT*W6-<;&*)D$$8BW^AP7RN<(X#M4ND3
-ME:*+MWW_ZA?"(=9UQ;@1J^TO2/L@2H<\61'@5(WDFC^;O^QKJMH/'`*H!CX+
-MW#$LRV:36[!&+<84JI0XC(HK$E`=XI+#HMK2O[OQ<&&C-]MENY4WI/385IU7
-MB%]G":!%JE[8?JZ)'[-"BW]/:VX*P'606>_4MXAY-M/B/"VQIJGYRUN,E*\Q
-M?2B=<L(C;M%<:.L:'%6T,6.:?D?79+O\G*RGB'M2)?XBQSLTW72MN"HG==RZ
-M+'":^-P"HU)(&2A5$[=&3)H"`.P```#L`````@```$4``.B%SP``0!$``,"H
-M`0'`J`$"`?0!]`#4!KFQB*+@PNX0.?F7IZR]H0-U+B`D(`````8```#,(0``
-ML+3TJ'Z/8=)D=6!U"N:9DC@0VBU$55;`RO+9$*#G#%8/#%2$(&7D.Z+@V'B$
-M+'YWD9E5B10?>^1/ZK>#%RQ>GM.<%#;B>)5WCT,]N^`$-Z\D._JNOOA$]B8O
-ME7UO6,O><A'-?ZSU=LQ>C)X$:?@,'O!'3@5-SA,HU^G8LLE4O(=_J.9S,47]
-MPR^:_-;AE\`<1(C0G:I$W*[9-0PI/70`L>$S:W(OIS'L5]F:WW)5$[=&@+P"
-M`.P```#L`````@```$4``.B%T```0!$``,"H`0'`J`$"`?0!]`#4!KFQB*+@
-MPNX0.?F7IZR]H0-U+B`D(`````<```#,(0``L$=K7/X['#;HJMB;G8'PCD.G
-MLA&C)E&H/:4QR&,+;#ZZ>OU[@F)NRMS[SK<E)K#($=$.O:,*2_9`UNG9N#F:
-MF(L5DHWRURK-(74LX\`)Y(34]TMDPGYJ.X_X,YEQ!MPEA.`>,8S3L`:5Z%ZE
-M2[_8.'IX"/'MWYZIQE-(H<'')O0&M$F!_#.9D%J[_U!@J#/Q^`PSG@3M84DT
-M>&!>TNLU8@<$P=5SJP\%U@E^,GU5$[=&Z^("`(P!``",`0```@```$4``8B%
-MT0``0!$``,"H`0'`J`$"`?0!]`%T!UFQB*+@PNX0.?F7IZR]H0-U+B`D"```
-M``@```%L(0`!4&L0OOZS`:"E$,/L$Y$'3+6RL[[27+!=D^'*M>X+'$I09;J[
-MF$*5H/I$:TW&7EL,\>(M_4(\$I[<^4WRWX](J03H2F!^BW5!05P"O(06`J>0
-MOBJIL6(>\.223+6>V>;=NP"'\;.0[!7OK)`2$3%<MVHZ]!KC,74H*@5_$U')
-M`?:>V1/_=FB``5O]3A9E5\3I!2I^^U,NP(&S0>=@!X:79I@P'8JX$(>,.,?A
-M[2$QB?-G*)L67AATU290`*6LKL[S3>OX.:=GNR^>L;FTC95_R`R+@?)HRLYM
-MEU[(\&[Y%'L"T_UVG)<F6.>%5C-381[1MK$B>9@%W$^AA[]S_F02X!9`1@K2
-M[%29]W.KJ%KVY\G=>G`49TY/RZ7#UB#^'XE;%A5SBMT^(.-K:!:1?(,R(6^Z
-MU%EZ]M?P%')Q\^4J;OG"A)]2>+1N]T%8!JS$51.W1C$8`P!<`0``7`$```(`
-M``!%``%8A=(``$`1``#`J`$!P*@!`@'T`?0!1`<IL8BBX,+N$#GYEZ>LO:$#
-M=2X@)"`````(```!/"$``2"2D!2\`E`?+OM&W#>#D4'^,T`3B6-W0`C[*MEI
-MOL$7\[M^T1DMHI5[F@(?OY%7>61;'H0G)V=0,679D753>8&^+)DO46IE827H
-M5+/H_H2('YAM$'+0Y8FT5-5F$D>*_9W.9,3U8UFB4\Y;DS%MI:<NVR^)D;M-
-M;"BU#1G/<SBT_P]%=\"FE58=)W7"#TP*J#![PD[6-TUBQ%5TENY#!$E*VG!P
-M=\R=`#L9@)&$O`&'?TH&XTE%X[6J[$XW>CI^E_KG/F68H':1,>[HE(8_Y0AT
-M@&Y>YE]P+I1%6#/._"<&L22KAFS)470@WHXAVR&FIY%K:[9'N#($ZW<"RYXT
-M8,2W773V0DPR@FLG>@V24IR:'LM5EPX6#I!7C[7%_U43MT:K/@,`?````'P`
-M```"````10``>(73``!`$0``P*@!`<"H`0(!]`'T`&0&29OJC,R]+ZBKZ=<2
-M"'^@P.LN("4(`````````%PJ``!`.4$_>N#`-FJ%.<'DQ4TN*6)V-[I8ON1!
-M'#!0XT5]<P\[ET#O)R&`[V8G=Q#LG37W4LD=+*)4CL4&+*_@51.W1D)*`P!L
-M````;`````(```!%``!HA=0``$`1``#`J`$!P*@!`@'T`?0`5`8YF^J,S+TO
-MJ*OIUQ((?Z#`ZRX@)2``````````3````#`*&_WN1A(BM5T>>A4UVVO[J<Y&
-M)UIZ_:>)<N0,,V:B<I':M$Y*;)`7PR>U)543MT;Y6`,`;````&P````"````
-M10``:(75``!`$0``P*@!`<"H`0(!]`'T`%0&.9OJC,R]+ZBKZ=<2"'^@P.LN
-M("4(`````0```$PJ```P]-!FO=.]#]%A;*J@R@^NN%U*@.':@YW@*YL=8P)P
-M4<T;JBXF,FC]A!TZ^M95$[=&&F8#`&P```!L`````@```$4``&B%U@``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CF;ZHS,O2^HJ^G7$@A_H,#K+B`E(`````$```!,
-M````,.$TD`QKHS[6FGS=NBS%JZ`N><?-M9ST:,4RKR'SS3ILYC@=\FT8F"\T
-M()<A51.W1N-B!`"8`0``F`$```(```!%``&4A=@``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E4R?2BL\U<QT``````````"$@(@@````````!>"(``'@```!T`0$`
-M#`,(``P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``2P^1XRWC`]0AQR(C&>7DI4S[
-MP!KUPXU@HPTW2UE9D'5?)].\)6-OP=$;0T%"ZM$ZTQ72>_<J4/_5CJC+4?+M
-M9!3KHT8@^6?[?W16J).+N1O1_*NU^IAS9(<K5)=R#;>'1OX:%JU/>](7&&[\
-M&5V;K6W,.S08?NE7X"$G"NRZDK$I```DXI?_<+50R<,LI;.!N28GPD'AT@PP
-MLY=[&29E3IV:(;(I```<``!`!+1?&GB<;1&W`_!OGX3/U:IPZ<L%````'```
-M0`4"E;([JE.-.Z36>6\GB>O5U*ICL%43MT;E<00`7````%P````"````10``
-M6(79``!`$0``P*@!`<"H`0(!]`'T`$0&*5,GTHK/-7,=```````````I("(@
-M`````````#P````@``!`!@````HJ_^2A>1[U41BLB,I\6,#S&M%";543MT8]
-M@00`N`$``+@!```"````10`!M(7:``!`$0``P*@!`<"H`0(!]`'T`:`'A5,G
-MTHK/-7,=```````````I("((`````````9@A```@``!`!@````HJ_^2A>1[U
-M41BLB,I\6,#S&M%";2(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``2P^1XRWC`]0AQR(C&>7DI4S[P!KUPXU@HPTW2UE9D'5?)].\)6-O
-MP=$;0T%"ZM$ZTQ72>_<J4/_5CJC+4?+M9!3KHT8@^6?[?W16J).+N1O1_*NU
-M^IAS9(<K5)=R#;>'1OX:%JU/>](7&&[\&5V;K6W,.S08?NE7X"$G"NRZDK$I
-M```DXI?_<+50R<,LI;.!N28GPD'AT@PPLY=[&29E3IV:(;(I```<``!`!+1?
-M&GB<;1&W`_!OGX3/U:IPZ<L%````'```0`4"E;([JE.-.Z36>6\GB>O5U*IC
-ML%43MT:"J`0`4`$``%`!```"````10`!3(7>``!`$0``P*@!`<"H`0(!]`'T
-M`3@''5,GTHK/-7,=A@P4?,%FTZTA("(@`````````3`B```P````+`$!``0#
-M```,`0``#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``.'E
-M^0#DW0N===[1&ZI+Y>`3<Z=/2?B/[C3`I'2NE($YD*G_-+L#TJ^W0J]%AW_A
-M33'5>I*L<AS]JBE&L"X7%.<DLR[27L50$I)[H'(`5@&00@!OFULY4L=F?<_D
-MEW0H.[/S`^D(.VE#838?+=]S9BPQL>;TR6[AWO_$@V]9"^X8*0``)#QFQ[YJ
-M*O?\%$%;6SVL.)NK'5T/=>WG">`X;2W1VG6I*0``'```0`2*N0M6'$CX#7)-
-M9.PUZ;X#=.P?[````!P``$`%R,-1(K]1.I"F4/?X[:Y`0#>H7XA5$[=&S-4$
-M``P!```,`0```@```$4``0B%WP``0!$``,"H`0'`J`$"`?0!]`#T!]E3)]**
-MSS5S'88,%'S!9M.M+B`C"`````$```#L(P``T`_2IPFMSYR!DZ9_='7+08^5
-M[=GIK`-BI=0O0;)AOGZJ,E4;I$[H3&SODBH=WP5`IHB,@7H@&CO.XJOG"AE&
-M011@9@_`Q!5;'/V9F*./]>B9J$O$Z.J:A-]#@<M^J\,J`F%2:$',7VQ-+FBK
-MRY+SF.4HJPC:STEW3GE"?GNV4`LRYV9-"LZ58?A@K5-'I%AP((*V$E*T=YW,
-M.B%6!W$>XRP;6FC_+G1T'7E7L!$73PW[4AI5=!3`=6_,U!GWC)F#M6]EX&'C
-MCR8%`ID%3E43MT8D[P0`O````+P````"````10``N(7@``!`$0``P*@!`<"H
-M`0(!]`'T`*0&B5,GTHK/-7,=A@P4?,%FTZTN(",@`````0```)PD``"`)>D7
-M4Z!HO7"C9,QS=,:?[""<X0`\UU$-FPO*\;<_+G@E3\TV-Y3IY1$->#U+$:#R
-M]R,,S=]M4:@8ILS8V>@"N9!5"WB\V]OTTL[B0LZ6-Y$TKZ]837O'EIXP+X#F
-M@U%;,%"C/1R$YVC5K(P$%'ZY"T?\/I>Y=;X:&7\!7E43MT;`#04`'`$``!P!
-M```"````10`!&(7A``!`$0``P*@!`<"H`0(!]`'T`00'Z5,GTHK/-7,=A@P4
-M?,%FTZTN("0(`````@```/PA``#@H_<[_L5WM6',JD$')9S.ZMWGT5-]*3'S
-M@J4=90PF1XK?=M+J50VRR/>YUEYK>;?@C[$N8&T/E1RV/0\.-V"!:^"VY/.(
-M^!W#RP+T%EU]\LYT=;ZH1$N6ZU'2`RAB1G](=#P&J><QI<I0FBQ'#[<4*P"U
-M36RD[K;VC:*DLM=EMQ]A^>@*:?P%=]JBG`>M']O*R.YE3LKI@+8YL.H,;0H)
-MD9^'QI,+<X6Y/K)M'+_A#]*RA-/?*5*`K>,&-ZB?,@R=C7$PGJ=KK'Y!0B`E
-MG*VK%C5C*FQM"HM6@IG.MU43MT9_$P4`_````/P````"````10``^(7B``!`
-M$0``P*@!`<"H`0(!]`'T`.0&R5,GTHK/-7,=A@P4?,%FTZTN("0(`````P``
-M`-PA``#`LK+:IF!_N"B[/1-0=IF5^DH70(X6`[2M#,I+`E?+`O%83+ZP;F8>
-ML`D`"'F&F8Y-I^HR>/BC)`N\VF%^Y(@B1\>.^1H&UG),/RL3AL=BJ(_-SU47
-M?7Y#>V:WOF81,AO!<_`,V-6=1-X(/O^'(YEAMBU>27IIH8V"3L+!^U74&NN>
-M3T@&1/!2&2;,PJ:5;F\@V(*(;3DFRXG@/_JN;G";P^N1UP",Y2#N"<^(=/@2
-M5:SA[]0:*#VX@\JN[0I5$[=&^R,%`&P```!L`````@```$4``&B%XP``0!$`
-M`,"H`0'`J`$"`?0!]`!4!CE3)]**SS5S'88,%'S!9M.M+B`D(`````(```!,
-M*0``,'&2\EMBVG(&F?BDM_]_URY!URD`R=X(@H?V]GLE.\X]X9I)[]5I*J'%
-M.G<?51.W1DE`!0!L````;`````(```!%``!HA>0``$`1``#`J`$!P*@!`@'T
-M`?0`5`8Y4R?2BL\U<QV&#!1\P6;3K2X@)"`````#````3"D``##;U2Z)>:WQ
-M(;#!]1_$O%>=@IM0WXYRJT:8V`5*+P\=>C8+*4YX5'L62_O&`U43MT;P6@4`
-M/`$``#P!```"````10`!.(7E``!`$0``P*@!`<"H`0(!]`'T`20'"5,GTHK/
-M-7,=A@P4?,%FTZTN("0(````!````1PA``$`]7]&GW.2KQA5V^C3?-C_CG9%
-MF?OG+_GM:TTC,M#@T2\J%6QR=#1JJ"5#K%EGTAI[L47#YM:-W%[LF?%?-QE\
-MA.5?8?F[Z"5FR*6KY">0#!N(FO.=A0)P&7>9CR'O+-A'5_3`]-2$T9<Q@XS"
-MZV#5S%`O]Y^FCW:9G)^*/A_C$\"D!HQ;WUJ+!AVIHW>,#-FE]X$N)8U"F=C9
-M7;35$I)MOMC(ZYZ[F/(&,!'0'Z977C=`)%9,42!,6_V"5+UP_M&<T05JGJ.)
-M7O+<@<-`1EN=43ON^G"`Q6A(N!7+Y0SD=GO['0Q8E.T>UU_G%M[BCWM`,PGK
-MI?N"OK6`6C$M51.W1OMF!0`<`0``'`$```(```!%``$8A>8``$`1``#`J`$!
-MP*@!`@'T`?0!!`?I4R?2BL\U<QV&#!1\P6;3K2X@)`@````%````_"$``.`C
-MOJ8M?.R>IL]*M1P9:J;OD]9XTBYV6<WR\2?;U+T"!$/(29,--K&D3-^V^-F7
-M)R3Y]1.VM=C()+U3I%07.U6&3LC&#.O7OA=,1=KI&L6<';&+Q<H--3BKG^AH
-MA_3J4L'\(?_@%.W>E6SA$$1?FT_YG?,(4LCE'7&^+<\_L#JPF.&G*+'C$KW.
-M8'=%U3#'S,/OZ#5_'6^E"&!H/-G:K`Q%!01^5S__]_P9DJZF]U(U>LE42(UK
-ML5)[K!$*KX;;S=?1P*KF^V^"IHX9Q%/-R[[KI,-/PM$/I.\S$SBX51.W1I%V
-M!0#L````[`````(```!%``#HA><``$`1``#`J`$!P*@!`@'T`?0`U`:Y4R?2
-MBL\U<QV&#!1\P6;3K2X@)"`````$````S"$``+#\]&@L#U:%&`Z)S%\0AD2E
-M-`O91[Q_$BL@5KG?)Y.6TV0O:K@]GT0S50.GVQ$G`!K88]Q9Q%C0.&^#*@66
-MC;D703KRUFR$Y\QO`YHPU:/=3:H#B^:6-(>`)`$.1B%2\N\HX2_#SWV\5(IZ
-M!*[>^/I'F"\S"#^Z16\(7O)4`N^*5E8J<..L`<QZZ25+[F!L)!1?<V!138B!
-M]+N:?Y4GV)$D>[BG].J%+:GHZ)!X51.W1NF8!0#L````[`````(```!%``#H
-MA>@``$`1``#`J`$!P*@!`@'T`?0`U`:Y4R?2BL\U<QV&#!1\P6;3K2X@)"``
-M```%````S"$``+"![?CM5>ME^*MC<IE9,]8F1NE,U+GN9HBSTMZU$=>_>NYT
-M"YT)KF_79+@$NOF9EV/CT&);\5S8)0(ZV\@8*^9PPB#KCB$#3-%&+B+0'0!%
-M\&4+_3[94&]7F<!%A1M(%K4*UMQ2#Y@SM5M/;&_[,2^WW-(2;(0WGO_B^UB5
-MH;:+'RQ]J&GPLKXS"S^]#[/E&5Y2W5+>4ASKJ/NI<K^ORM'F7Q`X-Q&.3*FH
-ML%#151.W1D.V!0`\`0``/`$```(```!%``$XA>D``$`1``#`J`$!P*@!`@'T
-M`?0!)`<)4R?2BL\U<QV&#!1\P6;3K2X@)`@````&```!'"$``0#\VF#K,D),
-M[1Y?R4H/'@!I_:`UD">XELQE(K<-YM?AT@R\3TE!!'=3HS0:*(#2R7>72E_*
-M"G'?M`JIK!'I4]"F:N=3Y7DF=\>3R/=7QC-4!Z@"?!I-HJ%Y&\*>+5Q[:1FY
-M0'$S\]BU<E,4QUR7>[-,U5:2:)+&?;E1@!EUD&&=NM8*B!7[HCOK(`[@T9+K
-MBTSTY:0,ZY@Z4I*..1Z6OR9-`8:**+5>IT@012\4M!,WO:[^PIEYL8U:A![8
-M;%Z%;B`;OO)W5"XIU'<,SW%<@M:G;I".O-M$S]*=L-H2$`!%B9[Z(!IBP'B7
-MX/ZW)-*P%&XIF@/$DF:FUQA*K[=5$[=&[<(%`!P!```<`0```@```$4``1B%
-MZ@``0!$``,"H`0'`J`$"`?0!]`$$!^E3)]**SS5S'88,%'S!9M.M+B`D"```
-M``<```#\(0``X(DTJYJ9^>G7H2Z6%\NZEL+XQ1N7@/I")6WZ$64$>J5IO!BF
-M3"!,G57X';"BS[&4Q$H9(T<5.B7\HW;WXO^Q>KR:.8[*!F\MB/9V20<@S&\*
-MQRV$!6I`^AP?#=3;78L(/F&W_39N-(:PN06U7QO:%^E`&.;8[##C1T$/P)WV
-M#\\JW26M%POVB;^*^VO$JZ7-D8HD$EVB>C?U#P%3X?=RT;\<H');D,MZLO=I
-M->(C0L"""^C\^(YZE`U&TZU_]=''P;,VDM(=$@Q;T&%'/3=^'L=G!"7<P*<L
-M9N`#(<=5$[=&/=(%`.P```#L`````@```$4``.B%ZP``0!$``,"H`0'`J`$"
-M`?0!]`#4!KE3)]**SS5S'88,%'S!9M.M+B`D(`````8```#,(0``L+C<;N2T
-M++W:LAO6J*VW[A]-NXFS*8S7\X^R-7W9)`V6'4C%WU5@]1Y?L:F#@/`8NN)+
-MC6E48),._*MM%Z)3[ZMB"0V#;+4QVW@`8O)PFLLD>VB-2..DW;.:2KC4@;)`
-M-N*=O9I:#E\(_"Q`ARN011B?_95-9RRO^/SBL\/QE/RT5N^BKPF'+RFDF6[X
-M+;\3+Y>4NZ_#5`-=1[S1J`I*_X,O1OM:XTU173GYZ]=5$[=&6_0%`.P```#L
-M`````@```$4``.B%[```0!$``,"H`0'`J`$"`?0!]`#4!KE3)]**SS5S'88,
-M%'S!9M.M+B`D(`````<```#,(0``L)'CQSZ_\C)3N'*?$@[A.B_6:^/.Q_WA
-M]($'\FTF2IBL<4*7A!^LBHW^(E,W8WL'W;#4N2M/B(,]ZEOR6`RCS7E)3K*#
-M'W`-]T]U=&$N^A":'AFCV%/,7%$<W@^>!;A>E',[,?3PMGL?+WKNWFL2_-GO
-M\.Y=PA#^6[=<X]IB`+3]1F43-?W<=._/NWL#YI]YH9:F<73'%F;'$%(/[\2_
-MV8P3T7ES3=JZ<-OI;P)5$[=&#1H&`(P!``",`0```@```$4``8B%[0``0!$`
-M`,"H`0'`J`$"`?0!]`%T!UE3)]**SS5S'88,%'S!9M.M+B`D"`````@```%L
-M(0`!4-1.(5,@@<VB:^\8_U&H`6@+C1]?CR`(!)]H:WZ$BW2(\)@<@H-8W88#
-MG:%?PJ+:,?U_75TJ=3;S3V,I&D+P]7N$5R(.=@<$6WJ#H`TY993'@E$68&$.
-M\<\]Z1:+L4U^TB/7U=N`"NK_?B>EIBB29VD`\U;0?Y/=6MI$-QGL-A>`\R+B
-MKLQ^&$"./!R-Z0:TX*`X;S=,!RK?.FCXH<*_2("G((;)Q"<<-]IM;J/=JIYD
-ME<=N.@1XL^65Y;VQ>_-^F@>WU0OIT>54D01(>&DNHG4*P#EN)`![3#P2?",.
-MU'#XC+8W7(?5*N?ZJ[`W_2IBP;,J%6'[4]?LJ%`S<ORY6$:GHVBMV;O]HAS[
-M5]:*AQ%!L%[+&)T&9836_L6:<'C!?W:K75BFBE1:"Q/J0K&\6,TD^3:4DUNB
-M'_K(^B[[7CZS]0FO.[,C))3L5P8E51.W1OY.!@!<`0``7`$```(```!%``%8
-MA>X``$`1``#`J`$!P*@!`@'T`?0!1`<I4R?2BL\U<QV&#!1\P6;3K2X@)"``
-M```(```!/"$``2"MVS-@V9Z*5_D-`JM.?*=%#V6NLO^I5_271E^P1;<2QZ(`
-MQ:'7\6$+&I<$"?_E%=#NRZSN&S7IBT:(O&3BZ+(@ET90?P!\!QLGDY1(0?/,
-MVM`YAF[*@?-;MRSMI+>LEV)<@8;@\63J"D\GA$Y%.`<H/+6WD?ZWKT18AH=,
-M8'7@J7L)=^CVVRA5>OALT>Z`('E4P@<:Q]-<R8ECP,I(1'*)++*F9G$2+XO<
-MLT[RTC01&KU^/5YAG]S>)(:A5!PT,WRQ.M8SN"ZJOH8('X<';AXFN0\9=H'A
-M4R<#:NYTD5T.KQH`K!)1,U#@KUNX3Z_\=1?4H1#&N5<"B/Q_.B-J#82[V+A0
-MCFIJ/6S]D;UEQ8!^%\9);&;:%40>'C'B;%43MT;A=08`?````'P````"````
-M10``>(7O``!`$0``P*@!`<"H`0(!]`'T`&0&2;H:T#U:,>?M;'U:P^HG0@DN
-M("4(`````````%PJ``!`:)<B59O6%L<?Y:&WPMV>*8\Y%?F$[<LK'O-Q)"Z[
-M;'-+;N]'4X:7Q7Y-JQF\ML."@(]TTNR(.Y<)))8J51.W1BJ"!@!L````;```
-M``(```!%``!HA?```$`1``#`J`$!P*@!`@'T`?0`5`8YNAK0/5HQY^UL?5K#
-MZB=""2X@)2``````````3````#`N<W.')!3/KO@S=?X2)TDKHM);FSR)71M9
-M2S>=Y9P8%>YGN:0V[WVCEF'K3U43MT9[D08`;````&P````"````10``:(7Q
-M``!`$0``P*@!`<"H`0(!]`'T`%0&.;H:T#U:,>?M;'U:P^HG0@DN("4(````
-M`0```$PJ```P9TN3*$INB,I63+]U62[W+G\A]D^[_HGXO(P/<@L$)>AE06,R
-M1RC-M_`E_D!5$[=&!Y\&`&P```!L`````@```$4``&B%\@``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CFZ&M`]6C'G[6Q]6L/J)T()+B`E(`````$```!,````,'5P
-MT3ID#O$KO7OWQ1+ZZV0+VVTDL&+R\Z\.6L)5V4^ZU0M'7_%19H,I2;3?51.W
-M1L&=!P"8`0``F`$```(```!%``&4A?4``$`1``#`J`$!P*@!`@'T`?0!@`=E
-MP`/.<\:B33X``````````"$@(@@````````!>"(``'@```!T`0$`#`,)``P!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``G=7J<U?0*:#_U"<T4Y1%4R1^=`CVJBW)
-M`==-P`D,H?O8*'C_UK\C_-QPGF*Y1W]-.@V.V"FFK'\.X(;M&4IEKONW).O;
-MXJC2NST8)V-9[=>O$;!B;"4)>R-25/O*Q&3`==`A6[U!I`+*-^-MDU(XZ=WF
-M'/?*WAX,%=U$5>%PNGDI```D`$QB5HA'HSK:TS`($5\4-.<,98$W\?"V`'FV
-MB7J$1;\I```<``!`!!.(:*VGE-K>P2RK^?.!L<@G?`O1````'```0`57NH?/
-M?/?V7",@`+R^'NE,053*J543MT:+K`<`7````%P````"````10``6(7V``!`
-M$0``P*@!`<"H`0(!]`'T`$0&*<`#SG/&HDT^```````````I("(@````````
-M`#P````@``!`!@````KE=,+%[+E(+?M110!N0FL$94`Q8543MT8LO`<`N`$`
-M`+@!```"````10`!M(7W``!`$0``P*@!`<"H`0(!]`'T`:`'A<`#SG/&HDT^
-M```````````I("((`````````9@A```@``!`!@````KE=,+%[+E(+?M110!N
-M0FL$94`Q82(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-MG=7J<U?0*:#_U"<T4Y1%4R1^=`CVJBW)`==-P`D,H?O8*'C_UK\C_-QPGF*Y
-M1W]-.@V.V"FFK'\.X(;M&4IEKONW).O;XJC2NST8)V-9[=>O$;!B;"4)>R-2
-M5/O*Q&3`==`A6[U!I`+*-^-MDU(XZ=WF'/?*WAX,%=U$5>%PNGDI```D`$QB
-M5HA'HSK:TS`($5\4-.<,98$W\?"V`'FVB7J$1;\I```<``!`!!.(:*VGE-K>
-MP2RK^?.!L<@G?`O1````'```0`57NH?/?/?V7",@`+R^'NE,053*J543MT;D
-MWP<`4`$``%`!```"````10`!3(7X``!`$0``P*@!`<"H`0(!]`'T`3@''<`#
-MSG/&HDT^2*V(@S9_R-XA("(@`````````3`B```P````+`$!``0#```,`0``
-M#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``)TPK(%FM<4W
-M\UY!;CTI-HA3-"G/\OC`N89LS2HSXF)WGI!EI.94+G2>I_[8M_CD="(^99UL
-M9I#3?-WVU,#;&=05'ROP3\+-C9J#C:KLV!N;!`V!5"C-!Z?F&,D,X_HQX.Y!
-MHL,%3_1*#FP/B$I7',%G]XR9HV2D:S]W`K0;KBB3*0``)-+N]TF5#0F&5QLY
-MS:2A"HG9.LWG00KOOD[<0O";$)*K*0``'```0`36%0[61GW'/(7I254^RS+?
-MO3@TG@```!P``$`%@\@UC?T_?E!PRLL5/=>UY@4PY8!5$[=&<@T(``P!```,
-M`0```@```$4``0B%^0``0!$``,"H`0'`J`$"`?0!]`#T!]G``\YSQJ)-/DBM
-MB(,V?\C>+B`C"`````$```#L(P``T%$&MHV2]$B)>NAY;CD`C#Z8U+Y@C)D@
-M0Q_(@*.N6OU$4[XJ<J4)"H1--$0W]%3CT8?M"MPEZT`RZNRU=ZU"!4*/NC^\
-M./4I&-0U2L\YM,P61TP`PRD;5.F7)(SR4(?%:I?3P+I!J>]V`>O_3Z#]"3L^
-M#+^T"WY=U[XC5Y9^M06&1Z0N\[F/;-KZS36/,3_Q;:K:A//*0ZVA9O1OT0K^
-M#;O=]JRFZ<1\"(=W(!E`4EG36[P.]8/BZI,N-7T;VNNPY=STJ[M+40AN\\$-
-M?E43MT;T)@@`O````+P````"````10``N(7Z``!`$0``P*@!`<"H`0(!]`'T
-M`*0&B<`#SG/&HDT^2*V(@S9_R-XN(",@`````0```)PD``"`XVU,8AO4Z@SQ
-M6\4;)$B/BVJ;V].IXXNJ?Y=M,61"IEJIIDS'^P!)2Q%S`M47&(5OD)^%F[%Z
-M]T_C6'&.PDPH<VP?K;HGMT(N\V,09YT:N%E\W7SP0Z(LY2#KL&E#8=@N\91/
-M%!)'+OR`N)(HZ=3GHJ</N^/F8<+,4_\C:E43MT9"1@@`'`$``!P!```"````
-M10`!&(7[``!`$0``P*@!`<"H`0(!]`'T`00'Z<`#SG/&HDT^2*V(@S9_R-XN
-M("0(`````@```/PA``#@*7.>]30Y:$$>N89*?MB[Z5E^`2CM#0B%\MY9NAT5
-MM<)WKC+4FRT3;<1^;#BN.R^)9%X)PU[S>]GZ>S_!<O^KAL:*?0Z,,51LOI1\
-MEVWK_HYV08:)59!2-L%*?I`/AO:?=.E<5K]AGOG=I5B3VF;'FUA-4RO2,4/.
-M/7T$>1J&HB>4Q+=6M[;DH6YQ-)/2[$NHQ'<]W<V<^<-QIW*?&,KAMTTUFB6`
-MNNX1C18Z=L]*,M_TL?:/&@97VW&YD[\&B,W5["ET0C`IK0#%()6&-*>0B?EH
-M\2!!0%^5K?,KBE43MT9%5P@`_````/P````"````10``^(7\``!`$0``P*@!
-M`<"H`0(!]`'T`.0&R<`#SG/&HDT^2*V(@S9_R-XN("0(`````P```-PA``#`
-M+`NLG?10*'_BF^$/Y$XPBFA12GPS&?;K-P>2)B-)_)*Y*R;LYC/\<I;!;5S0
-MN,)B1=J)'FE[NBH:%9#YH,>N.8N(G53QA%TLD**:W'`B_K-V,9KX"86W7ZZ$
-M!H^B_[ILB9?,T83<<H:.U_;#7P#<I":J'RO[8CLZY];>/]TY)?82`5.<F4!D
-MB:$+!D^0TN'\ZW'6N'$2RQX4I)):5AOHK#M9IKZEI0"9,2@*T/+7NWO)_N)8
-MRATT^J(6T3E5$[=&R5L(`&P```!L`````@```$4``&B%_0``0!$``,"H`0'`
-MJ`$"`?0!]`!4!CG``\YSQJ)-/DBMB(,V?\C>+B`D(`````(```!,*0``,*I8
-MG<:*[#XT3Z_-FGQ!$T\MB/+9SR[(^()E24I!>JI\,2:>:H8\K2HVE5CI51.W
-M1IEV"`!L````;`````(```!%``!HA?X``$`1``#`J`$!P*@!`@'T`?0`5`8Y
-MP`/.<\:B33Y(K8B#-G_(WBX@)"`````#````3"D``#"<=Y1&6X0#<J]<FT2I
-M8E7-G9F6+`F0**V`!^SHH`X$-PHN22Y!Z:;4+_*((U43MT;%D0@`/`$``#P!
-M```"````10`!.(7_``!`$0``P*@!`<"H`0(!]`'T`20'"<`#SG/&HDT^2*V(
-M@S9_R-XN("0(````!````1PA``$`8S)]K,:C\Z81].#^*=A5D(6&>WWFV-YO
-M/"G]0IRH[`[E%94SB"*IE:"<5^E*(`7/I+;:;HZ-3EA]Z-Q``0-2^N2:$_<O
-MU#"N\)RR+B_:I?4DV4?FFD0Q1,&8FLK?EBP5`*61_+;]KN43'PL>#?MJR)JC
-MAB%:;9XF\24NH`1AB`G)JSCF,HM@O[Y*>7-0U=M1$1X*@>,6"%2^QOO2+2EW
-M-9-D)`\:>9-J'F(\\&KKTX]!,@E]@CHY,_H[WLF<G<FA[60%]TU?@@/PW#4J
-M>O]/8WK&8/6IX6VE]LI0T9VU'VV"<FUVT!AY\J<*(4!SFXHA('H/^>U4*)3C
-M\,2&51.W1K:="``<`0``'`$```(```!%``$8A@```$`1``#`J`$!P*@!`@'T
-M`?0!!`?IP`/.<\:B33Y(K8B#-G_(WBX@)`@````%````_"$``.!X?ZJ;)UX$
-M.!&K*9.W"G&&C`ON1Y[POM3Q?S)-6PI2G)XXF[K$8L6,:-XQ\U`X]>B];#_A
-M\$0DCQ"<"-HUG`[G=AJI93\4.W%VGK,Z4-Q&<AQT+MN/L'D-@P?W4?BG9/1#
-M4MTDN<K+ENW!IRB=U/Y=^>)<K[,K4=?V]4"[0C)I^WN:"#+7MN+Q08]%QY$%
-MDL?B.;Y]$RU3X1`JXLL&C'3*-\H[QL`FVC[_?-:TG8NUT<+%+I&']\/[>V%H
-MWV*).Z3[9Z6LKI91&^[_S,C;G^HVW6`6Y@:>N=FJ;JX$51.W1A:M"`#L````
-M[`````(```!%``#HA@$``$`1``#`J`$!P*@!`@'T`?0`U`:YP`/.<\:B33Y(
-MK8B#-G_(WBX@)"`````$````S"$``+#)B,G#/DX!=CGL%2BR**`U^<V%>D"Q
-MPP>`48=3S-E.PIL3*33S.E]U$@M)*#$B125=]AV?MZ_AX5QFLHGB?,/TZ&('
-M?AHW\AVF$>JR-L8:L>B<.8#A&Q@`LLMCFZ+IS3Q@LG)W<UJP#N^E@]VAO99P
-MG`[D<J&X#68-X;8I3_%?5%BU*>T1O*N@QKQ;?%;U.`9TD/"OQ!49:(-"UG.@
-MWI`JT3-S!S`MI`^1Q$^+51.W1OC."`#L````[`````(```!%``#HA@(``$`1
-M``#`J`$!P*@!`@'T`?0`U`:YP`/.<\:B33Y(K8B#-G_(WBX@)"`````%````
-MS"$``+##YH/I-'2T/S?<&V5K';M0;;2M_E?Z26@XO*RZG*6MJKJ<^*9+XF6-
-M@Y]778(WPIY_F;>G1&+PS<H.[A_W,-2^G</B%^+"2W3]>V4I7_Y.L?/MN.(V
-M0&13."D"[H/*T2EO&X2]W,`$4OT]!*)1QE>2BJ[6QJB@4`(0K"&X&YTB(M^G
-MD%O7[U^;X0(YAWY3=TL$W\@??\N8#^[5A[V=0<^W>^1ON3UD3*.Y^)LG51.W
-M1G7K"``\`0``/`$```(```!%``$XA@,``$`1``#`J`$!P*@!`@'T`?0!)`<)
-MP`/.<\:B33Y(K8B#-G_(WBX@)`@````&```!'"$``0!\V2VT]C>'75%LM0,3
-M<G-++31A/$-CY=]6A1?.:G&&,([00YQQ[^O31,W];@5]W<[H51]$'><-E2$<
-MQCF^7`VO?X->_4VM5T@_2E(04_M=`1^1<>.'Z<[&H1R%&E*%5-0?%,0FR+TR
-MV*D20IT,0L!EPCWG5@-_<K3_I175W:X*_G`_ZRN=(S-#;4:M8)D$#1Q;%Z96
-M8ASD,+O'YV.$,^[TP7NOW=8-GEDKWP?#\=>+&>MJ"J+RV0N8)2@T(_[LU'@T
-M'2+/KJA)UF0!1,NHGSJ3F7.#KR,`@.Y[(IY_^,M.W`M//K%$^@^9-6[JU^B5
-M,_]`O,@1[X?`P[5QXE!5$[=&RO<(`!P!```<`0```@```$4``1B&!```0!$`
-M`,"H`0'`J`$"`?0!]`$$!^G``\YSQJ)-/DBMB(,V?\C>+B`D"`````<```#\
-M(0``X!QFJ0'1GP8A=3UH<_]Z42-SL:BW<A>W@CF]:JT@14KG$&:`\!-`JD]L
-ME#=2H\%1(>U0>W6Z#.XP%.`<'GUO*\P%"!_\U('_<+QKZZ7.UE""C5%4@HR?
-MX]&$43OP+IQWH(&?JA26U%9VCV/%VU^U7IVS$Q[_1B7+RRK03+G47>1?<5$.
-M^>#"XP,HQ172_GD3^,#;`M\+$1*:#0@D$Z%TZ^Y;.0Y,UI0:69R]&4%L;]AX
-MEN+>WN[)(XZEFS0-@*A>/QIB177&323PZA5&UV(AGXLM18K?YW/U)T,QNM]5
-M$[=&0P<)`.P```#L`````@```$4``.B&!0``0!$``,"H`0'`J`$"`?0!]`#4
-M!KG``\YSQJ)-/DBMB(,V?\C>+B`D(`````8```#,(0``L`D[HD40<_%-DZ`$
-MV<$T`&,1YU!:RRP'`82MZOVWN-IU43').J3U2$Z3A,3'"G$:WAY3?*#^J<[F
-M]7^^/Q^:7%>)WAU7OACE5CY;5.;KJ5?Z#=M0,L2QZB&RN%S2+<\`O-?I07G@
-M:1#"OARYG5Y*@]7T?1<4.-1@OS'*A]1:BCM]]SP7,S2C2.")JFCA6X5,BQB"
-MOJ\2K84A3M>);]:W-2W!I7+]65ZF1XX/MWM5$[=&T"D)`.P```#L`````@``
-M`$4``.B&!@``0!$``,"H`0'`J`$"`?0!]`#4!KG``\YSQJ)-/DBMB(,V?\C>
-M+B`D(`````<```#,(0``L%@TP$V1=DCNWL'6,O@DC02*.\0*:HX-Q3>2^X&Z
-M?>J1.O/Q\4W_I&Y5V*M*V*/X%Q9\$<!N*8R"*(#Y8J`E*C+BGC0#'9%UL*[W
-M`]WO6>C(J(+813$JM1G$]MR8@>A+NELQ,,(C0/(@;294@=,-,*1#TTPW"3&L
-MJ:51V(CI9I#&88G[E+7>Q@=HQ/Q<<Z32J!TA;EUMQ!WH"2`)V4/@,MQ59&Y:
-M_[G@)%Z3UQM5$[=&!5`)`(P!``",`0```@```$4``8B&!P``0!$``,"H`0'`
-MJ`$"`?0!]`%T!UG``\YSQJ)-/DBMB(,V?\C>+B`D"`````@```%L(0`!4/>6
-MZV]7RF7XMW.*)\)=/84S]#^'/AI!8T#J?MU_B<?@7TK*N99-[`U+LM(,,-IB
-ME#G2`AFM_%/7%2GCD(X7@Y/J2G*/CD5N5]YJ[KADMZ-(]J.V6O\YO:XPYV:=
-MD0[%UF_E-AKA&4Z8-1L<Q\K+%8![?+E43?W(-Y[WD'.8R=OTS/SE(A"]S!8+
-M=,[!@G\>;DI7@B.G3@3.->C,X4EECHH=<("15F41:ZO[IKC/6IM,HV)V09P3
-M?K8.5D=930E]#"@*4Q$HD5S'47HNZ7'Y/U`5GX5V!'36;]2UCRU^R=^UI\H3
-MFH$91`\]T0=)8'.?9L*ST$)R1]+3HW&SPQU>OOC2`5F0`E;J+9A,RVF;0$"J
-M?C65A$-K,D/WL$2L[C0VQ_8L!'[QO?S54NH[&7,<U-*2T,)1_?P[F"RVUA4:
-MF_[FJ8A^LL,YX?2:Q;*#51.W1FJ$"0!<`0``7`$```(```!%``%8A@@``$`1
-M``#`J`$!P*@!`@'T`?0!1`<IP`/.<\:B33Y(K8B#-G_(WBX@)"`````(```!
-M/"$``2`*RZC*R4??/)T"N7@OB.;3G)H#376U7`?:&N#-5+FTD&RWUU^#1UR<
-M1U-`W%+)<"6,ZJ%&V<!3-Q*"OUVK.L6V=VY,._"&P!KZK?DX^'P[C6EB5_-`
-MJIA=M%]"7SKP(5B0ER_XE!0<;]AC&B-)&:\TU#HMAF<9[X)QQ\Z'Y6^H*VH^
-M"O"7$_B8Q!K.OSN12KE>]^>YM@C:RQ[3M`'=H)CPR<BY4#6E99]:,6#:"6GE
-M"?!DXPNG)475ZSH$'-W[JY*OW4J]@4J_+U36-WJ@D($X,FU-4ZG>#Q&%ZE/+
-MK!<+F(JQ#8KE"@,]4N$T54)V`Z\T7%L$O*41K+DWX0I*][.6IF.+7QE*]!DZ
-M=@TI'Y,LHG2AP'L&KIO"Z'!%'U43MT:5J@D`?````'P````"````10``>(8)
-M``!`$0``P*@!`<"H`0(!]`'T`&0&28,6Q30ZB%3E!@L=:5;2V4LN("4(````
-M`````%PJ``!`>^L)<#NIZTCX(;$R<#+"I(>4]\'MN6$]`6\3]:QRYJR---'`
-M:5H(OM\#H*?D6.;<;2J(#FK/]@EP`H2Y51.W1NRU"0!L````;`````(```!%
-M``!HA@H``$`1``#`J`$!P*@!`@'T`?0`5`8Y@Q;%-#J(5.4&"QUI5M+92RX@
-M)2``````````3````#!U:MX+#_PJ\B6KV,#PKQ.[BG=]D]K3\4YMV__F=@"E
-MW_?<`KUP89GPK0XB7%43MT90Q`D`;````&P````"````10``:(8+``!`$0``
-MP*@!`<"H`0(!]`'T`%0&.8,6Q30ZB%3E!@L=:5;2V4LN("4(`````0```$PJ
-M```P\@[+21.NC.B$MR/NV3&X6/5B_JMH6S4`SZ\W$_.B[I`Z'P)F7GJBAT2)
-M#%!5$[=&&=4)`&P```!L`````@```$4``&B&#```0!$``,"H`0'`J`$"`?0!
-M]`!4!CF#%L4T.HA4Y08+'6E6TME++B`E(`````$```!,````,!DX$>&V3R;9
-M_;)<L.?H7(2(QLK])7V%1S@49``KATZNL(N.]Q@YUL,F[;NZ51.W1J?3"@"8
-M`0``F`$```(```!%``&4A@T``$`1``#`J`$!P*@!`@'T`?0!@`=E[1WH;_/*
-MT:<``````````"$@(@@````````!>"(``'@```!T`0$`#`/_``P!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``SN4@D71TKC]S[HM@TT77-2T,(PF</6LS@4O&*HTA
-MM-Z8+`:=L]T:_VCO>/>8<"F:4(7CDD%E^QKS:-A`8Z.U"L[P+K-&`&*\7X=4
-M\F%+^E%JXBJ9F30.TD''8A_3J&J,ZJ>J'6X<F3L7$SZDL7XERJC&71_!5BT$
-MRHO!=K?SFFTI```D00^Y]7AH=%ZT&.JAD5^H[1KJ4"BOV&W6`-*0S-"NN1$I
-M```<``!`!/>-9F[9S/.L1P54'D8B?,K])5=7````'```0`4^BBD&,J8F:2P\
-M%=$9L\'%+I:M,%43MT:^X@H`7````%P````"````10``6(8.``!`$0``P*@!
-M`<"H`0(!]`'T`$0&*>T=Z&_SRM&G```````````I("(@`````````#P````@
-M``!`!@````K!D2N"KVZLMI<JI.;,K6ARR#]&V543MT9$\@H`N`$``+@!```"
-M````10`!M(8/``!`$0``P*@!`<"H`0(!]`'T`:`'A>T=Z&_SRM&G````````
-M```I("((`````````9@A```@``!`!@````K!D2N"KVZLMI<JI.;,K6ARR#]&
-MV2(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``SN4@D71T
-MKC]S[HM@TT77-2T,(PF</6LS@4O&*HTAM-Z8+`:=L]T:_VCO>/>8<"F:4(7C
-MDD%E^QKS:-A`8Z.U"L[P+K-&`&*\7X=4\F%+^E%JXBJ9F30.TD''8A_3J&J,
-MZJ>J'6X<F3L7$SZDL7XERJC&71_!5BT$RHO!=K?SFFTI```D00^Y]7AH=%ZT
-M&.JAD5^H[1KJ4"BOV&W6`-*0S-"NN1$I```<``!`!/>-9F[9S/.L1P54'D8B
-M?,K])5=7````'```0`4^BBD&,J8F:2P\%=$9L\'%+I:M,%43MT8*%@L`4`$`
-M`%`!```"````10`!3(80``!`$0``P*@!`<"H`0(!]`'T`3@''>T=Z&_SRM&G
-MW<5`D@('/O(A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#
-M```(`@```@,```@#```"````"`0```(H``"(``(``/]JC@L"[647QEW7)+N^
-M`.CA*;_@E3S4YWL(-37_/0A]5M1JFLBC=7^.-]*^Z@WDYEQ%2A1>/&2UW+A_
-MN_OO-Y&WMC$C(ZB2HH-HFSN'GT$\4$(W;"O+H%D##VW'5&0N&HIDJ?;1C4!K
-MIUIAK4Y^WYVTV7IK);D]QC2M8SA]400T*0``)`%('I$2FB6_XW##RF]RHW&G
-M"':Z[LC=JUE_PD8,?@SG*0``'```0`0WGEA'(-;YJ@\;LVZ.XU#Z+I%/@@``
-M`!P``$`%.AU1C%@UWH'+*R<)<PB/;:@,!`!5$[=&K4(+``P!```,`0```@``
-M`$4``0B&$0``0!$``,"H`0'`J`$"`?0!]`#T!]GM'>AO\\K1I]W%0)("!S[R
-M+B`C"`````$```#L(P``T%[NR]6.>SW71#AXL04A7^LDPQ3%;RQ4CDODO0'"
-MI>S4T_OS7<>.[;/V58*VU]'A%BP"HLEE;,0T)HOP[>2`$>E9,K1U1L^+6CLN
-M'6BKOW0KO3B7"[(>+:+8[0@H-,\C#-Y:J[ZY^>=#G>V#?"(ZOF+1LJG#UU*Q
-M'MRO+NDZ"D&+38JI`LI89F;H\K'BV19U-<$1YC*F^?/!AK=?A^`'3YSAM'_[
-MGK$H0BT49WM+<!M.EKVDX9.!=_"%-L*`,PS8!)'?T?/ONP'%AO(PU%43MT:,
-M6PL`O````+P````"````10``N(82``!`$0``P*@!`<"H`0(!]`'T`*0&B>T=
-MZ&_SRM&GW<5`D@('/O(N(",@`````0```)PD``"`%$>V6F-VA.@E!Z*.\0_(
-MM`B&>BB7_UEYU@92K=:#?#&3V.OV?$HR[\.H3O<5^]7IR#N"Z?%JZLOP^Z17
-M*?<W]1*8<2YDU8Q?/K=#TT']B3;%\%X/G9ST)'7MM;3BM+:V()8M'46XBL[R
-M4"+^_>*5GDHO4ZQ[DS`;;T_/5E43MT9<>@L`'`$``!P!```"````10`!&(83
-M``!`$0``P*@!`<"H`0(!]`'T`00'Z>T=Z&_SRM&GW<5`D@('/O(N("0(````
-M`@```/PA``#@^^;.P-W:_.PF94P(."AZ7=%`;-PEQ6HU[BR9O61Y=4Q[LI;:
-M<:/(B&)[UU'":+TL*$JPF<@^GG>2;BO%.2O!W/`RWB(02/CX!)<8/1.6<F0C
-M=^!L-#[O$E_1`]J%^CL1Q#Y-BGQ/Q2E'<)PPJ*8VK(\2E*28`2O)<^V/TF%*
-MVIGZ@_X")^BU%>`J&PDR_O3L13[\1W$'C=H2K9?B)-T%C/I;)5A%-<.`:O\P
-M^SL+EK]'`@-,X"+]RR\K6H[?OK9?G.D7ZC#5%;H2+G%`,0O9^=^Y?VDGT5@K
-MC<0RJE43MT9MA0L`_````/P````"````10``^(84``!`$0``P*@!`<"H`0(!
-M]`'T`.0&R>T=Z&_SRM&GW<5`D@('/O(N("0(`````P```-PA``#`GE&U'6'-
-M1EC=,J'C4DH,ON:&H!7S=G!?PAP82W`?NJ%O9YSF\4/*#'0^B#S>10;H50;)
-MZS2B@FV=/LP&'ZS"=32YM?#^7P\O!UO#4<8D:I%Q`$KX1N-\_"5K/XP]TF+/
-M.2N6A+T(AJ\%:"L7`Z?OF**[(#VTF$$K[1U^WS6\\5@2Q%-M65&OW97]64\"
-M3]<@)YMDR>N9`Z3[JM2L^R;\V?;;!O%[B'=%`=Q09?<PHA_A$4<B#';]5ZK?
-MPP55$[=&#I$+`&P```!L`````@```$4``&B&%0``0!$``,"H`0'`J`$"`?0!
-M]`!4!CGM'>AO\\K1I]W%0)("!S[R+B`D(`````(```!,*0``,%.09.5V'/2*
-MRQKN`">5SG.T@JFZ8&8\`7U%*2$:OZ=`(:]Q@4XF165>LF8X51.W1ABM"P!L
-M````;`````(```!%``!HAA8``$`1``#`J`$!P*@!`@'T`?0`5`8Y[1WH;_/*
-MT:?=Q4"2`@<^\BX@)"`````#````3"D``##Q1HGQS3[8#=G.H]:H^V/';)^*
-M/S(@SL6(#:ZL2(;IZR89"N'9#E_"%6EFOU43MT:<QPL`/`$``#P!```"````
-M10`!.(87``!`$0``P*@!`<"H`0(!]`'T`20'">T=Z&_SRM&GW<5`D@('/O(N
-M("0(````!````1PA``$`["7,JV6UJ25#FQ6V'CQT!(>P,64?TE<!61_D,#:7
-MI)^B`&[23*?C5CUK#1"#I%WMQ]J=;^F&_Q;(/P>P<:KTT>Z`I>K&&2A:/,2[
-M+3.VM'X@#K3#GL:W+-RH.YQW&NKL32G?>__,9._Z[Y_;I=;[H#STH$C;+H;8
-M<VG9'_;1BWI'J<Y^#"!3>@%Q@,`'FB#K.0M&_Y("FH6F,PS)E+\'O)Q0(C3H
-MUV\4,]C&])[HVW-;IP)M>)P:_$["0>%[_HQ>#3KM;R35X$$`1\I_Z9ZX+,`1
-MOC-(0.&4QPLE95@#)/_0:]AJ;55H2RJY=G@<-[[_8)2TU6EQ1"MW/=+#51.W
-M1B;3"P`<`0``'`$```(```!%``$8AA@``$`1``#`J`$!P*@!`@'T`?0!!`?I
-M[1WH;_/*T:?=Q4"2`@<^\BX@)`@````%````_"$``.`T.0E@M6:]D4)U4#8L
-M&+32V>.$I$Y0F&)8->;S(!W">?<;^.#UJ\.@;+!R0;_5OE65.ZX5@PMO4@_J
-MO`,=_'DV&46$YL(CGQC#$PB1X<4-PV`KTQ'1-/`DQ.B&)QX#$L;EY:PI3F?U
-M(#9PDTF3[##N7O*I%)VLI>(I&K0-5S=Q.]+$DHOT#'L`AP14=W)^?E?QMN%R
-MX<G](NO+06QV+&BAZ$F!T0MJT%%8<U8$I#)2IH4,`^?5]%BB7&:C+K3&1)(M
-MNT]_-:EW14=MLW_*"/'!\&\`;0(C#.A8W[:I51.W1L+B"P#L````[`````(`
-M``!%``#HAAD``$`1``#`J`$!P*@!`@'T`?0`U`:Y[1WH;_/*T:?=Q4"2`@<^
-M\BX@)"`````$````S"$``+#A22A.&A1_5LDTY30#!^AE$7C*D@QQAEIJ.9A6
-M9.43!%.ET3VV5E$:0.&MNUV0$?%>\R+>I^%RP1?<"OQ1D!Y)4O,(P62#,9-U
-MAC=FV?>QE*PO5/I5%2(J*^KO=<7JK$6F$``X!PR#_%RO0;`/^VSH4H7:J;L+
-M;H$XEY<N(Z=;\M^?U35M7(XF=F>L":D4-VR:-B8RD7,!)F\L96M4<>2T=GMG
-MPW==IK)#/@4'51.W1@T%#`#L````[`````(```!%``#HAAH``$`1``#`J`$!
-MP*@!`@'T`?0`U`:Y[1WH;_/*T:?=Q4"2`@<^\BX@)"`````%````S"$``+#[
-M4M-";QG=NU.D-[<D/\P%1R&,^AJ&-Z]\V0TV@A!^&%0#JJNE^G%&/T-X_F)D
-M2JP=QKCSO6.Q`/TXIW522R+M=?@[W#/:H"+WW6DE(C2J=!46M5@=APF941[Y
-MN+1K!7]NTXJLJT!>-#8JX;(-2NW26'>YSN5_6^?\B2!<!:?@C64W:[1OT93G
-M]<^,OWY]74;&(CW')]O,<W:\_QV('-63)"?@[9]#4/P5O@YZ51.W1GHB#``\
-M`0``/`$```(```!%``$XAAL``$`1``#`J`$!P*@!`@'T`?0!)`<)[1WH;_/*
-MT:?=Q4"2`@<^\BX@)`@````&```!'"$``0!)UZY[TM68ZS-K5XY&6Y#S]QMG
-MFN$?S@K.Q$1IE\%C?Q^28C]02_]0JO.DB9T%=7R/<@L'P.5DNR!OE*X*PE\T
-M;H/2#ZY>F>']W2#@.P$0:D9A+RM$!-X)FF&J66KV)QL6:,'::.;/Y0-A0G"0
-ML33UU5Z;0&@S16FW)4LB[>@=0GW"Z.5,BO.163\-1;]$YKI4$FVU'_7-BSV)
-M"8%!E-\85*3C5O[@R12'D4)5>/=LU"/_D+O9(VMOS(H`E:HSO9GC8N@W/N=Q
-MHQ5VKG]+UR`?=,,4&=R,4(@KV3>M=T^[1]O#-E0;U61J&-P('F,P!/98)59X
-M[FX\'\C0*'!5$[=&XBT,`!P!```<`0```@```$4``1B&'```0!$``,"H`0'`
-MJ`$"`?0!]`$$!^GM'>AO\\K1I]W%0)("!S[R+B`D"`````<```#\(0``X`)`
-M%>T?A\2%6`I'A7W6F7RH;D*,SQ/[HZ%I;]3+!+4W6>^I6+T?@D"@-00#]7:]
-M8".(:WY7#GDH;<G$%"?-<_'3$N`7$ND#>4Q1,V<4&ML[UF(OC1Q4EX4?`F"/
-MWCI.MYKC[>,H]^A&B"U.$$]D:K>UIJ\:0*I+']7GCR]\BOID_:I'A?TJD,1M
-M*P:KFG*3L(DN_Y+;;64=8?'M`:-J')`LCS8&U+0&M(@\P:D!AG,*)_@<.TO&
-M</.<:$-YWC89SS*.T%@VHFL0?J%H/N]AA`[2!2\&QD(5H/`G]<Y5$[=&*#X,
-M`.P```#L`````@```$4``.B&'0``0!$``,"H`0'`J`$"`?0!]`#4!KGM'>AO
-M\\K1I]W%0)("!S[R+B`D(`````8```#,(0``L/AX9=?S;%?40<T8]O\LG?BL
-M/R)P57YS+JCJM6:('%<D4N+J\Y<:G8G\F^]]H/`I*!_0;RG<GF$9Q"-JN=T=
-M/#`O&KT7.(D-R64:)-R2`--W`!\[(:W8C'(`E3>KM0$CI^7NEU95"IEO["X_
-MX[[^#QXB5QL&T=VYD/ZO:N2'[?5>IX^K37_,;S\P.3?,$[@Q5Y%[N\.P:,KU
-M#K.@J+CM17.>8T:E]0_3;"473.=5$[=&D6`,`.P```#L`````@```$4``.B&
-M'@``0!$``,"H`0'`J`$"`?0!]`#4!KGM'>AO\\K1I]W%0)("!S[R+B`D(```
-M``<```#,(0``L((JU$=*:CY.<^.2]C9Q.NI]Q$C)#I(IEU#P%FK%8Q$?9Y^T
-MWI.&V02DVBM)4.;`6_C1G\QT@/KGQ^2?UA=\\WYY1X6]A1.4Z#[Z3)\P"/I@
-M4;VS&X"2"^I8$S;&TQ^&#V#G=FLODX\!F7RUVK7.50A*J?)Q*=46A6,59!`0
-M</#=]0'F*GY?-[`>"&ZIAU8;J0.-(YHLKD%[]'DEE()#@-[*K\:*_4FTYJ?,
-M9%Y5$[=&@X8,`(P!``",`0```@```$4``8B&'P``0!$``,"H`0'`J`$"`?0!
-M]`%T!UGM'>AO\\K1I]W%0)("!S[R+B`D"`````@```%L(0`!4%M4=]^0C7V,
-M.4#MR==RZ6J#IB0:IHG!N6F%-J;`WDZIT-/91G8?L(C]7_"GB7:2Q!M-.`1S
-M.0"N:OK+O(Y+C1E,JTZ!$MK^>JU/+54\8FB.*B*=CW1B!)@&T&,RXD$&_9^P
-M!O23L2;L^U>0TF>P=;-A,V*T\2MX<*S\9[54KBNB%EA/-\GY5]](PDHEWAGY
-M+^0PO\.+2'B-7^,%21[EL&W$+<9/+IY!]MV>@IW=3PNF32`0MYFUC.R)U1G@
-ME1O/7P3T_4VN9#W2.-A!F-0\Q%8,VU(/OY4'3SMUC/"R8$/";>;V;@_"+&N.
-MPIQ5BKW6:_FH1K2"KW3KG+-!`\(\TR+X%:@^@,W8*5?PC4D>CS3D)/`&+ALW
-M?64SY?>YD2"L/FG>!?*X4BD@71ITQN%AO-E`'Q:RA3/]5)"0@?8,Y.9@.X='
-MZTPHT33J$5H$51.W1O2Z#`!<`0``7`$```(```!%``%8AB```$`1``#`J`$!
-MP*@!`@'T`?0!1`<I[1WH;_/*T:?=Q4"2`@<^\BX@)"`````(```!/"$``2!Z
-M>H](+@=<GF2U*'ZB23Z%L@ZBYM%\LB8O==C>0^,P&50PM+""%383B?FY`M`_
-MIO#4(WW)FG?YDDGZTYZ>LGM%.^VJA[K_+J5?*L961%5:+OK'U8JV+9=P:>'S
-MO*(78.J0?&\1!=NLBQ\.V/-?U(03JWV;TI$!QXPZR7H91,<7_%V9.8XC6(KE
-M*.75/C/HFK0/UVS'^>)<C_A_5;&P`7SOUO*4C,2E5=>`&ZXXR`PRJ*R(#!K9
-MCJTB(M`:)>0/,0[RIW9]L\\?><+;]MDR'I"KYS?PFOQ8K':)X"G_",D98.DY
-M9*:._9QAI7**2AB<A3-K,CGA:A4YO(/%P_119:"+E\=@2R)XQ>66LDXX/(9T
-M`7G,)#4>,<]T/&>=/%43MT8*X@P`?````'P````"````10``>(8A``!`$0``
-MP*@!`<"H`0(!]`'T`&0&2;IJ'6-,NU;KRN4;9U"N;>\N("4(`````````%PJ
-M``!``V/KQ*V,EK5\4':B9I.?PQWXF01A?GE#></I\DS4MH)&XXL\IP59W-KI
-MN(Z0ER64.WU_PRZ:8-RX79>451.W1A[M#`!L````;`````(```!%``!HAB(`
-M`$`1``#`J`$!P*@!`@'T`?0`5`8YNFH=8TR[5NO*Y1MG4*YM[RX@)2``````
-M````3````#"FN$[4]/TWD';Z]DM>/4Z<E]Z:TY7G"TS<$HX6:M4$E%C8#F<S
-MI)IYN0HT\%43MT8*_`P`;````&P````"````10``:(8C``!`$0``P*@!`<"H
-M`0(!]`'T`%0&.;IJ'6-,NU;KRN4;9U"N;>\N("4(`````0```$PJ```P!&W9
-M'FWLS-XUP6LV#2XQRM'+$[S4/%"Q.JI[0>@2)'GZ6TFF'&ZSE=)>(J15$[=&
-MA0D-`&P```!L`````@```$4``&B&)```0!$``,"H`0'`J`$"`?0!]`!4!CFZ
-M:AUC3+M6Z\KE&V=0KFWO+B`E(`````$```!,````,(5V"Z(8BP?K$S.KP+>@
-MF[`/R*GVL8H*S-M3.B1]$?HSGJM`4VUJSXM;C7J:51.W1IP$#@"8`0``F`$`
-M``(```!%``&4AB4``$`1``#`J`$!P*@!`@'T`?0!@`=E>9,?Z,3RGR<`````
-M`````"$@(@@````````!>"(``'@```!T`0$`#`.```P!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``6RX.:E(H_U,_^:)7;6L$G&@?=&Y]LQ>'=$"F53V,V%@$:2R/
-MR'[Z>[;Y?5F]`)JL:6+1(8`(33:L<C@^/Y^!'\*YE0!3<;D<][S48:*'UDZ5
-M-"/^.52L*2]RQ*C6/AGA7]%-&DY=X&EU[_%1I$"HV,(U-O-_F?,WX%=S.#RN
-MEJ,I```DW"49@\3Y`W$"?TE\P>,_2BJ0@7;&;P]8,B;G_C)VSRHI```<``!`
-M!%4)J?(:O&]<]AX]6<Y3W:27](DG````'```0`5586FA1JR[+NUG[`[=NX,9
-MLTFV%543MT8[%`X`7````%P````"````10``6(8F``!`$0``P*@!`<"H`0(!
-M]`'T`$0&*7F3'^C$\I\G```````````I("(@`````````#P````@``!`!@``
-M``I19,W\;1@<8YL(Z1!'8GYY$UKX#U43MT;W(PX`N`$``+@!```"````10`!
-MM(8G``!`$0``P*@!`<"H`0(!]`'T`:`'A7F3'^C$\I\G```````````I("((
-M`````````9@A```@``!`!@````I19,W\;1@<8YL(Z1!'8GYY$UKX#R(``'@`
-M``!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``6RX.:E(H_U,_^:)7
-M;6L$G&@?=&Y]LQ>'=$"F53V,V%@$:2R/R'[Z>[;Y?5F]`)JL:6+1(8`(33:L
-M<C@^/Y^!'\*YE0!3<;D<][S48:*'UDZ5-"/^.52L*2]RQ*C6/AGA7]%-&DY=
-MX&EU[_%1I$"HV,(U-O-_F?,WX%=S.#RNEJ,I```DW"49@\3Y`W$"?TE\P>,_
-M2BJ0@7;&;P]8,B;G_C)VSRHI```<``!`!%4)J?(:O&]<]AX]6<Y3W:27](DG
-M````'```0`5586FA1JR[+NUG[`[=NX,9LTFV%543MT:41PX`4`$``%`!```"
-M````10`!3(8H``!`$0``P*@!`<"H`0(!]`'T`3@''7F3'^C$\I\G(VK\G8E1
-MW-@A("(@`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@``
-M`@,```@#```"````"`0```(H``"(``(``-?1*R_!E%=5@-;6A?L#+QL%=%1O
-M[[YK-CI`&%EUKW(<9\1NAKW<N-PL7=M-<;YM^R5V/C<-=4S=%K]$`UAE(RBW
-M4M;L42P=NE43,6!NVIN2N+<TH.O9H]#LY`S5WUD:OU7B@'_#D287T[\:RK_!
-MTV=3*.`1&C0>"!,ZH(`30NE3*0``)(V_>Q1=\M5P::KAI9@2,Z6-&&KO;E#M
-MVZO;RBU>D7&6*0``'```0`0C`B[/L[.0!:L54_FUC^Y94(''N@```!P``$`%
-MCH_23TV^63P(6X<P;Q6;VH6F1)E5$[=&?7H.``P!```,`0```@```$4``0B&
-M*0``0!$``,"H`0'`J`$"`?0!]`#T!]EYDQ_HQ/*?)R-J_)V)4=S8+B`C"```
-M``$```#L(P``T`@KJ`"L,4&&"NNDP,"2L5>VU0ETGD*W4UFFVAM"(45:B/XR
-M(S&L>B_VRK>CP^\!RV5\#T:HFQ/G]-(>'ZW=^8[F=QXFI729PH(.RC;K6S_,
-M1"7HBJ=6Q('*$T]:\F->8M\OC,OU3FJ1Y1/C4&D7_A$'GFU#-'T-FS9IE?G:
-M?XM0,U`H"RPM3^2N4GWI?WT#?YS]?JT*X@O.EBQ^3J?)(?^Q;TCGB&ZXX!3I
-MBEZOGN"&C%CM;.)D<\KIDPUO-X^26E&GV:5IPB9G'EP5V%43MT9%DPX`O```
-M`+P````"````10``N(8J``!`$0``P*@!`<"H`0(!]`'T`*0&B7F3'^C$\I\G
-M(VK\G8E1W-@N(",@`````0```)PD``"`[@='H70[C@@CXN[;4OC1!4[NB3",
-M'&]*WNEA59>Z0VMNG2.I4-\K)NXO0V0:H&,]/DKH=!)U1\`DDGJZ%I^W0N6U
-MS!\:F@(SSX)'K]+&>N*"F4VH'`VG*Z`:'W$:8:S\BZ5@($N+CE>OP13_#Q.U
-MI6S-IR'GD5=BM7].-543MT:&L0X`'`$``!P!```"````10`!&(8K``!`$0``
-MP*@!`<"H`0(!]`'T`00'Z7F3'^C$\I\G(VK\G8E1W-@N("0(`````@```/PA
-M``#@S>(/+R/!>KPOTC4&C#0N>P=/)']Y76$J)1#1*#8/N'5(>CX/PPBOU;&A
-M\Z76ON)PUN[9SBFNN)D@$>MI#!GQYFWJZM=##KF\$.<AJM!"N"^<WZVC4"9G
-M[`0`7[A+N.%'I!<@6N^V7UO:JP`J]-9OQ!'\;F][GI6U*\F>@QH6&5D.PY5J
-MHGS3V&-87"Y5L?<L^"E%.!QI%X/DMZ,I`Q:^B57#R[BC&,M0/TJ26O%^2"L/
-MII3G]0+G[E7,`$-.82U_$D_@>AD,)=!,&?<:/VM9%CN,%ZMFK)O^;)A_#E43
-MMT;'O`X`_````/P````"````10``^(8L``!`$0``P*@!`<"H`0(!]`'T`.0&
-MR7F3'^C$\I\G(VK\G8E1W-@N("0(`````P```-PA``#`*0_V9HT,AUL8CT*E
-MHF)Q(V;*]U`DHR/D=F#7$:5`TZI/<UP#V-F"TV\^7%'#=G3FMW6HID%(C[I<
-M>[7"/5)/^T<<$$\"WDLTZJ6[_UT$<6R-S3AV9%8E'"42#`Q=X*0<6=\I)8,B
-M)G"8D5=8D(`W:EQ1J/%(`.:ZO)Q)`C/C(FWUK!E[I@J9LF&"^R!\V7&]K&!*
-MZ2%Y\EJU=^%":4>HJO2E!!4Y6(3X"K,HF&]5@PO/2Z(CYWW)_B#@^NA5$[=&
-MZ<<.`&P```!L`````@```$4``&B&+0``0!$``,"H`0'`J`$"`?0!]`!4!CEY
-MDQ_HQ/*?)R-J_)V)4=S8+B`D(`````(```!,*0``,/]SY^H[FZP13VAHOS/]
-M5IPXIP-GCB6Q;>F:!ZVV+HS0B&9+%4\YBY5TFO\751.W1G?D#@!L````;```
-M``(```!%``!HABX``$`1``#`J`$!P*@!`@'T`?0`5`8Y>9,?Z,3RGR<C:OR=
-MB5'<V"X@)"`````#````3"D``#!H,IOB/+Z,JJC\#F;'`9HZX0XHU?VHVWZ2
-M5*&JHN8`6OY1OJ,2KOV"X;#_]U43MT9T_PX`/`$``#P!```"````10`!.(8O
-M``!`$0``P*@!`<"H`0(!]`'T`20'"7F3'^C$\I\G(VK\G8E1W-@N("0(````
-M!````1PA``$`7B80[[-SNQV/721K\8C3!>;Y9J[VJP,=G*SITYP$]Z##_(VO
-M6UL*8!P$>:3$^6SSREO@]!J/I3P<K!*I<^T;-U)>D;KN>@8-)99&-YQM'/#&
-M&)=-O`/'J<UW)UO1QG5!"_*?A[QCL2,9LR\E#_8]IH(\+.=LN489#%>+_B0B
-M2JM6J81!<*ON*,Z7R:R^F(&1J3'-P)P*CP4.;R#,55\MM2V"A&^D)84>MW^_
-MJY$L6]!X.A-`KR5OE6-=;IO])UC4YU?C94:0Z/_+":B=X-@SEAIP1*L=-6%.
-M5,I![GQG7R3T1G?MW0)YU2/IFAG\CX\;"U9(*&L+HAWF\&PQ51.W1@T+#P`<
-M`0``'`$```(```!%``$8AC```$`1``#`J`$!P*@!`@'T`?0!!`?I>9,?Z,3R
-MGR<C:OR=B5'<V"X@)`@````%````_"$``.`6+-TC#X=H/T0N.$5@R!A](\PE
-M'8E+MKI/NDW!XEIE5\R7P[$L5EI'=;)4NC/87*XPJ83B<6;(4HLID+SIIX>,
-M%'6$X2[7[65B<6P^0G4PR<]7-7XCQ(F>PJM3X(K>%*1RW$,)Z7W'VPS#'O5?
-M;7",B9@@NB@<ZC6_<3"8(VN69?A<I;`'I7..9B!CTPS/"_&VI5Z3P0_)<K:T
-M!/Z0J`.D+7GM4.37VPK8XAW<J5*Z\!UD9FV/PZ%@]2VF)4(>(!XD4@3-$(F2
-M:#C^,G\@?<=V)+."Q&T%FD@!F#P>51.W1IT:#P#L````[`````(```!%``#H
-MAC$``$`1``#`J`$!P*@!`@'T`?0`U`:Y>9,?Z,3RGR<C:OR=B5'<V"X@)"``
-M```$````S"$``+#QW-7$KL*N+K?9N)C@*5<H=%P=[/;-Y>$JR32+$H$9(_R\
-ME\U!WJ1T7Y%MW_'*=BUP@7S&EI7?>0Y@%XR`Q0',K,EJ8--A&I]3>6ZX5<+N
-M""YXHHH;*\M03FA&=_`-452ZLP::J_S4G`DX]#JK!H-@'^:["/A9&'G[Y<R'
-M(92#ARA98&LMBWV44U5PC?/B`A?(]SRVTQV#G4J$+4TUJ&;RS`-+0^I,*3<Q
-M]0E951.W1NL]#P#L````[`````(```!%``#HAC(``$`1``#`J`$!P*@!`@'T
-M`?0`U`:Y>9,?Z,3RGR<C:OR=B5'<V"X@)"`````%````S"$``+#^QMRFC;-*
-M!X^31.:;I!IF?L3]#WF[U(5I5A3GM-F,KN>Y%RL<LY;T&#PG/,J80[DH&7A'
-M#WQ%=MD[;RN:6P]HBXG!G3`=D.%0;IHP`-AHLX?]5._)E=XYXD/W4VN:R)-N
-MFC!&`F5'3X[-M+DB/RZL76M48XHE)_!&KMUK[DY?OW[6")4Q1%^1R%]TPB3.
-M'[:@W()R`]'=1G>7`O5A^G+@>F0]>\]G:+.DC@/U5A.W1LH8```\`0``/`$`
-M``(```!%``$XAC,``$`1``#`J`$!P*@!`@'T`?0!)`<)>9,?Z,3RGR<C:OR=
-MB5'<V"X@)`@````&```!'"$``0!"(]:8/J)5=K@3D&D=5)<-^YVK>/6VV+*+
-M;]ITA\(&?PE%KV8<0:%1>$7BT5129(IJN-&2G#96,&_H&OJ$<]G"1<6_6L!F
-M3T;$6I7HY8C<U2<G&#5%RP1IUL"H48#&(*%`!AS'2%\%.X#$E/&JQY'\H"0[
-MD7OU58\A_8`%.QM.1]01(.G<&>!]>=\A@/(1HL4F%`U'#DKZ6_*#'SS9>2K_
-MP^[XP0[Z<KOY')^TJ?__7:806KX;Q.X.<JY&6D<.^O]'>3X<K6%%JGJ1[2J$
-MV5KX%2_]JJ?9K&L%+`]_(E7YWZ@"UMANW39+3^GFS?51'`*M,<Q\LP0Z=!X,
-MI496$[=&A20``!P!```<`0```@```$4``1B&-```0!$``,"H`0'`J`$"`?0!
-M]`$$!^EYDQ_HQ/*?)R-J_)V)4=S8+B`D"`````<```#\(0``X$#:TTIE^CZM
-MZ[=)>Y&[T90F]R>:E:ZN'T,2.E<8]\"V#[V2M3S.]DYE52'VI!XD%)V>C#_W
-MV')E51[#7D]@S'^(A3>(_R[P%0&AFL5ZBL!JDM<V/7PPV+05KQ'_$80U.,?X
-ME0JLZ9`]C>T@,E,(>@XV?%C._8R-[/TB7:?G%E3"2S6`\O,+"2W*^:;,3:]W
-M)W9`<,RQPNV!F;G"I(TA\+\XJ3-PL)NF;M00,9[#6I1EH6-`"H_OJ6^^">.2
-MV^Y!KNT=`)=&KU@JS8\6*T;-4=48")(^Q1K*J1`;4716$[=&3S0``.P```#L
-M`````@```$4``.B&-0``0!$``,"H`0'`J`$"`?0!]`#4!KEYDQ_HQ/*?)R-J
-M_)V)4=S8+B`D(`````8```#,(0``L-6K>K43#BZFX6*6_MK[^J83;6+%R6O5
-M(=JG3MRP^[#D!8^!+FY*AV>82,N*<Z]A>"#B;G-KY9VX%_P"`7REYNEA+FM[
-MGHZ(>$S[S!LX`'V_J9+66@/;DEZQM$X2(7V>8(4<A,OP:]1/.UP3[1GE'1?;
-M+YA$>7?8!A@2"5T7L=>?1='[N#@[.3^`QTVY`UY]DFMSDP`O]"91%IZZ+)=5
-M;H-R2L,PZ\.Z-7-&;[A6$[=&NU@``.P```#L`````@```$4``.B&-@``0!$`
-M`,"H`0'`J`$"`?0!]`#4!KEYDQ_HQ/*?)R-J_)V)4=S8+B`D(`````<```#,
-M(0``L);^GYDQ@THIE>-AD31R*NDP'I_"N`2:%I5'A1^OW"7)L99*(O`684VI
-M`@HR=2!68B(6J8IC-17RI780)ZRU0+DI^D0>^`)R@L\J\IKL,2'&G<XX:.FY
-MP](W?PN*,(J0V39>*_=1VPYW2-<Q!]^R%O0<DZ71&1W(84ELU[B0\)=5MP=V
-M"!:VNZG:\,C%6XN0]`+_C77-TF4%WJ@OH8XWL,T46M/(1/N(*C__<(Q6$[=&
-M0WX``(P!``",`0```@```$4``8B&-P``0!$``,"H`0'`J`$"`?0!]`%T!UEY
-MDQ_HQ/*?)R-J_)V)4=S8+B`D"`````@```%L(0`!4)2P137):N;*^'F4;H;+
-MP5S)77_N+7?!TY3WI4O"NN"YS'D#EU6M\_BY6$14*\ACK?H`<YPA@:VR:($R
-M[YMMBF43N4:=$O,&C/A?Z.DO/1B)2O)&'O7,#:?;3(@#T\;ZRD%=HHS?D\^A
-M]^GP?XD]P*ES+88WHE/7MXS"U*K2G],P/B]!?X\N[YS:\:+-_)R[PE!A2MW+
-MGNQO7<:V=AUVA[U.BSY.C]R&$IEF:5V3.&!Q$\ZF_(^^V+7P[KXYD\R&4J<N
-MNXG[`^EVO(W]C%QEN#VHK<1&.)8V.4,Y62)YQ"C(PVZ-]_H@N59=SOLC&/!S
-M`)?NC#SQI^A:D1,,D_YVMH%>O0!Y9;RFEM2DU8+ZOWV(OE"#P4B%=;*S%2.A
-M>(,;4X$K@:SN*XF/,5Z\69\53=7\08E>?#`KZI[\8%<5T-J9"=FR%.I(+QCH
-M?A=G5A.W1B&S``!<`0``7`$```(```!%``%8AC@``$`1``#`J`$!P*@!`@'T
-M`?0!1`<I>9,?Z,3RGR<C:OR=B5'<V"X@)"`````(```!/"$``2`[9"T')I"_
-M54RP*\CH)WK?YL@9J84Z.E4)J^Q_6+[.>E3<QWLMD*J(HQAWXJ#[.@L))^Z/
-MD)J#W+/5B=>>BAY0$B%=[@[(*F"CX3Z?0MBWZ??GVE!D6XPPS2W82$F]\3PW
-MRU@18C9\X(_\R..J[>#=ZW\>RN:32]0*0X:HRL1PJG)G;I`'_?Q,/H$V)3ZS
-M_H=V]UIN+>".#XFM1[.I)^%]CD-G0.#&9@SJE+Y_G3['I>HYZ\3!S.@E&GV"
-M!AU>!4DW\V_E$9X42OZJ<>//(8X",V5CA4VS]Y.B,'W"@T,E=AI?(J8X]5C8
-M5#$W[:=N%9+^0N:5C[@$R)?M`'6!E`E*"1,7I0AFH-7%-ZM`,DN]\8+J&3/R
-M)PY<S;5A^583MT:3V0``?````'P````"````10``>(8Y``!`$0``P*@!`<"H
-M`0(!]`'T`&0&2?Y_P8Z9:NBSA'-S-91G*WHN("4(`````````%PJ``!`YE=Q
-M<94\(SJ8^+IE^*R>&#X6Z#!\EM^?^V]3$0@=W7J)-Q>_TTOY-\S;1";MZ+40
-MXLLOZ2B5/`HW,OO45A.W1D/E``!L````;`````(```!%``!HACH``$`1``#`
-MJ`$!P*@!`@'T`?0`5`8Y_G_!CIEJZ+.$<W,UE&<K>BX@)2``````````3```
-M`#!X0L^C*\IJCT/W&D-T(;!>F[/5<$%!3A9FA)WIE()XK'A'":Y)<,==6X<J
-MEE83MT;X\P``;````&P````"````10``:(8[``!`$0``P*@!`<"H`0(!]`'T
-M`%0&.?Y_P8Z9:NBSA'-S-91G*WHN("4(`````0```$PJ```PX#7`UD*K6L?@
-MY@[.%:T7R=J$)`7<IQ>A+V24&K*N?[D;YU;1S24F-S7AU7Y6$[=&9@$!`&P`
-M``!L`````@```$4``&B&/```0!$``,"H`0'`J`$"`?0!]`!4!CG^?\&.F6KH
-MLX1S<S649RMZ+B`E(`````$```!,````,`K*6"YJ^GM)TQ3?7+ID/3)(7&XR
-MH'VU"^'0)^)A%1H81B$J6[':/U.;_J<[5A.W1A?]`0"8`0``F`$```(```!%
-M``&4ACT``$`1``#`J`$!P*@!`@'T`?0!@`=ELW4O6#X)]-$``````````"$@
-M(@@````````!>"(``'@```!T`0$`#`,````!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``?NDP#$B!T4:DOW+,>67!4W4PR\I&PN]^8/OS$\Z)5E?"Z-]].,?-9H"K
-MJ081,Q@H&B3Z6T71,A$6_67X`XLP8,&M`).?=2>5,4(N4NJB_+QE[AM[]6::
-MV+^O=>9V;,FH@*Y<%]?\N:!B+7&O-,DE0D"7;H(+^,':JS!1)?\WZ.TI```D
-M&_T0F_G4QL,*0"SHVKBYU$OIXF2R?A&2A%3T,Z-\TY8I```<``!`!.O20CAU
-MA$`\J?;<>7QSOMW452(5````'```0`5TC1:=JYRP1$<Y[;UT[(B&T[*D'U83
-MMT:&'`4`F`$``)@!```"````10`!E(8^``!`$0``P*@!`<"H`0(!]`'T`8`'
-M9;-U+U@^"?31```````````A("((`````````7@B``!X````=`$!``P#````
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``'[I,`Q(@=%&I+]RS'EEP5-U,,O*1L+O
-M?F#[\Q/.B597PNC??3C'S6:`JZD&$3,8*!HD^EM%T3(1%OUE^`.+,&#!K0"3
-MGW4GE3%"+E+JHOR\9>X;>_5FFMB_KW7F=FS)J("N7!?7_+F@8BUQKS3))4)`
-MEVZ""_C!VJLP427_-^CM*0``)!O]$)OYU,;#"D`LZ-JXN=1+Z>)DLGX1DH14
-M]#.C?-.6*0``'```0`3KTD(X=81`/*GVW'E\<[[=U%4B%0```!P``$`%=(T6
-MG:N<L$1'.>V]=.R(AM.RI!]6$[=&A%X+`)@!``"8`0```@```$4``92&1@``
-M0!$``,"H`0'`J`$"`?0!]`&`!V6S=2]8/@GTT0``````````(2`B"```````
-M``%X(@``>````'0!`0`,`P````$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``!^Z3`,
-M2('11J2_<LQY9<%3=3#+RD;"[WY@^_,3SHE65\+HWWTXQ\UF@*NI!A$S&"@:
-M)/I;1=$R$1;]9?@#BS!@P:T`DY]U)Y4Q0BY2ZJ+\O&7N&WOU9IK8OZ]UYG9L
-MR:B`KEP7U_RYH&(M<:\TR25"0)=N@@OXP=JK,%$E_S?H[2D``"0;_1";^=3&
-MPPI`+.C:N+G42^GB9+)^$9*$5/0SHWS3EBD``!P``$`$Z])".'6$0#RI]MQY
-M?'.^W=15(A4````<``!`!72-%IVKG+!$1SGMO73LB(;3LJ0?5Q.W1GUU"0"8
-M`0``F`$```(```!%``&4AD@``$`1``#`J`$!P*@!`@'T`?0!@`=E%H/C$3%#
-M_@```````````"$@(@@````````!>"(``'@```!T`0$`#`,```$!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``?UR]*-V="?G740%M4BI;`M[:/;$'E/E,"-`3BJD7
-MIP`=3P%VQV"LYJ\B$BE'&3&U]T?LH=R_S.5VXMLX$8V?[O9,.?Y)^UZ`S`=Z
-M2[&Q9R`Y<#-'(0Z$G_.@W))QX!U]6A.)CJ&SPOS?;TV42K+DJ]9>FTOF;NE"
-MTU5VYLD2.8\I```DS'DE@#N%OC4',>=$3R+\X_*5SF3.%^Z=C(E./R"A5H@I
-M```<``!`!`,*M:U&*B=-*XA5F5^'!M#\MCXF````'```0`6A-=V]>,2/X($N
-M)G@C[J&Q2#$-,U<3MT:XE@P`F`$``)@!```"````10`!E(9+``!`$0``P*@!
-M`<"H`0(!]`'T`8`'91:#XQ$Q0_X````````````A("((`````````7@B``!X
-M````=`$!``P#```!`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``']<O2C=G0GYUU$!
-M;5(J6P+>VCVQ!Y3Y3`C0$XJI%Z<`'4\!=L=@K.:O(A(I1QDQM?='[*'<O\SE
-M=N+;.!&-G^[V3#G^2?M>@,P'>DNQL6<@.7`S1R$.A)_SH-R2<>`=?5H3B8ZA
-ML\+\WV]-E$JRY*O67IM+YF[I0M-5=N;)$CF/*0``),QY)8`[A;XU!S'G1$\B
-M_./RE<YDSA?NG8R)3C\@H5:(*0``'```0`0#"K6M1BHG32N(59E?AP;0_+8^
-M)@```!P``$`%H37=O7C$C^"!+B9X(^ZAL4@Q#3-8$[=&[I4#`)@!``"8`0``
-M`@```$4``92&6@``0!$``,"H`0'`J`$"`?0!]`&`!V46@^,1,4/^````````
-M````(2`B"`````````%X(@``>````'0!`0`,`P```0$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``!_7+THW9T)^==1`6U2*EL"WMH]L0>4^4P(T!.*J1>G`!U/`7;'
-M8*SFKR(2*4<9,;7W1^RAW+_,Y7;BVS@1C9_N]DPY_DG[7H#,!WI+L;%G(#EP
-M,T<A#H2?\Z#<DG'@'7U:$XF.H;/"_-]O391*LN2KUEZ;2^9NZ4+357;FR1(Y
-MCRD``"3,>26`.X6^-0<QYT1/(OSC\I7.9,X7[IV,B4X_(*%6B"D``!P``$`$
-M`PJUK48J)TTKB%697X<&T/RV/B8````<``!`!:$UW;UXQ(_@@2XF>"/NH;%(
-M,0TS61.W1LS!`0"8`0``F`$```(```!%``&4AFH``$`1``#`J`$!P*@!`@'T
-M`?0!@`=EY2,J$SU-,F4``````````"$@(@@````````!>"(``'@```!T`0$`
-M#`,```(!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``0]T"Z=UCA-RP$T/,5>8&S.,-
-MIJY=Q2=QA/WR'4A4TE;9EE"G(*8/!DE6DA#3+?1VS:'S_=%>;;X+RCF)=?<[
-M/#'0599SP<F721*M*[.25=S4Y//^R8?4/N/?U_^R(I4$M*@2RX>8+#`?D</7
-M5@T:<((D0.FZQ7'XB_W`5@.1+-$I```D^KR0GWX:]]W^_%K9>\""E`%D\)DB
-MDED=#T0H<Q9='DDI```<``!`!,<\=!(C>A<C%DE0-UT:`UQV6.`F````'```
-M0`7)3:\8L$WC-)#>F#C-*D8O]E%%QUD3MT9O]00`F`$``)@!```"````10`!
-ME(9L``!`$0``P*@!`<"H`0(!]`'T`8`'9>4C*A,]33)E```````````A("((
-M`````````7@B``!X````=`$!``P#```"`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M`$/=`NG=8X3<L!-#S%7F!LSC#::N7<4G<83]\AU(5-)6V990IR"F#P9)5I(0
-MTRWT=LVA\_W17FV^"\HYB77W.SPQT%66<\')ETD2K2NSDE7<U.3S_LF'U#[C
-MW]?_LB*5!+2H$LN'F"PP'Y'#UU8-&G"")$#INL5Q^(O]P%8#D2S1*0``)/J\
-MD)]^&O?=_OQ:V7O`@I0!9/"9(I)9'0]$*',671Y)*0``'```0`3'/'02(WH7
-M(Q9)4#==&@-<=EC@)@```!P``$`%R4VO&+!-XS20WI@XS2I&+_911<=9$[=&
-M$#<+`)@!``"8`0```@```$4``92&;@``0!$``,"H`0'`J`$"`?0!]`&`!V7E
-M(RH3/4TR90``````````(2`B"`````````%X(@``>````'0!`0`,`P```@$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"``!#W0+IW6.$W+`30\Q5Y@;,XPVFKEW%)W&$
-M_?(=2%325MF64*<@I@\&25:2$-,M]';-H?/]T5YMO@O*.8EU]SL\,=!5EG/!
-MR9=)$JTKLY)5W-3D\_[)A]0^X]_7_[(BE02TJ!++AY@L,!^1P]=6#1IP@B1`
-MZ;K%<?B+_<!6`Y$LT2D``"3ZO)"??AKWW?[\6ME[P(*4`63PF2*261T/1"AS
-M%ET>22D``!P``$`$QSQT$B-Z%R,625`W71H#7'98X"8````<``!`!<E-KQBP
-M3>,TD-Z8.,TJ1B_V447'6A.W1@Y$"0"8`0``F`$```(```!%``&4AG,``$`1
-M``#`J`$!P*@!`@'T`?0!@`=E_:!\\<..#/8``````````"$@(@@````````!
-M>"(``'@```!T`0$`#`,```,!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@```X8`P`!_
-M8G3+535?$JI8)-ZB[O3;1CK/_%F<HE,OQE?1SX9K\7-N(!]716MS9&1:34.M
-M3EBA5(P):6-=:T9[&GD(_W3F'NY?)4:XK/*YH"POHK0%63=BZZ2ODN+7W0A3
-M`.S/Y#[>N=IMG@7QDE;WVZ@X:")HF+G>F55;M7KC_%@I```D@F;L5HYJIQTP
-M&OUP(]_;!]U73*?!ZR(S$!`!GGWA(U@I```<``!`!([KIG`3>]N45`Y#%$[R
-M[@8M=5\7````'```0`5<-"&(FB`!45<KK$9;3QU9R9:NIUH3MT;C;PP`F`$`
-M`)@!```"````10`!E(9U``!`$0``P*@!`<"H`0(!]`'T`8`'9?V@?/'#C@SV
-M```````````A("((`````````7@B``!X````=`$!``P#```#`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(```.&`,``?V)TRU4U7Q*J6"3>HN[TVT8ZS_Q9G*)3+\97
-MT<^&:_%S;B`?5T5K<V1D6DU#K4Y8H52,"6EC76M&>QIY"/]TYA[N7R5&N*SR
-MN:`L+Z*T!5DW8NNDKY+BU]T(4P#LS^0^WKG:;9X%\9)6]]NH.&@B:)BYWIE5
-M6[5ZX_Q8*0``)()F[%:.:J<=,!K]<"/?VP?=5TRGP>LB,Q`0`9Y]X2-8*0``
-M'```0`2.ZZ9P$WO;E%0.0Q1.\NX&+75?%P```!P``$`%7#0AB)H@`5%7*ZQ&
-M6T\=6<F6KJ=;$[=&L&X#`)@!``"8`0```@```$4``92&=P``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V7]H'SQPXX,]@``````````(2`B"`````````%X(@``>```
-M`'0!`0`,`P```P$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"```#A@#``']B=,M5-5\2
-MJE@DWJ+N]-M&.L_\69RB4R_&5]'/AFOQ<VX@'U=%:W-D9%I-0ZU.6*%4C`EI
-M8UUK1GL:>0C_=.8>[E\E1KBL\KF@+"^BM`59-V+KI*^2XM?="%,`[,_D/MZY
-MVFV>!?&25O?;J#AH(FB8N=Z955NU>N/\6"D``"2"9NQ6CFJG'3`:_7`CW]L'
-MW5=,I\'K(C,0$`&>?>$C6"D``!P``$`$CNNF<!-[VY14#D,43O+N!BUU7Q<`
-M```<``!`!5PT(8B:(`%15RNL1EM/'5G)EJZG7!.W1JUX`0"8`0``F`$```(`
-M``!%``&4AGX``$`1``#`J`$!P*@!`@'T`?0!@`=EJ`/2`59.>$8`````````
-M`"$@(@@````````!>"(``'@```!T`0$`#`,```0!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``#`IT9$-EV=4;[2<J'!N/QB4&0L#`6YBU:#OP\55$*"'G0^9IX@-&
-MEI7,_"4+XQ06S]34O2GD#F]A""/*>C2V--`=,ECM-%#1U]B];S?I?T4'_(L!
-MG^AD;4@RA62)YI2#;(4E+\@F-^E%)Q^NNSM_D9NCB.D@CD,_!RR5D,)CR7PI
-M```D2J+V)"1$G)CV;HA;;^H'<OICWO7%&G9B"5)2^<3:P1TI```<``!`!"0(
-M:UZ1V+O7H(W)%`+&U[FC$D-#````'```0`5SL3-6BLAII5_T@I#/F"5&4CA4
-MG5P3MT8IIP0`F`$``)@!```"````10`!E(9_``!`$0``P*@!`<"H`0(!]`'T
-M`8`'9:@#T@%63GA&```````````A("((`````````7@B``!X````=`$!``P#
-M```$`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(```P*=&1#9=G5&^TG*AP;C\8E!D+`
-MP%N8M6@[\/%51"@AYT/F:>(#1I:5S/PE"^,4%L_4U+TIY`YO80@CRGHTMC30
-M'3)8[310T=?8O6\WZ7]%!_R+`9_H9&U(,H5DB>:4@VR%)2_()C?I12<?KKL[
-M?Y&;HXCI((Y#/P<LE9#"8\E\*0``)$JB]B0D1)R8]FZ(6V_J!W+Z8][UQ1IV
-M8@E24OG$VL$=*0``'```0`0D"&M>D=B[UZ"-R10"QM>YHQ)#0P```!P``$`%
-M<[$S5HK(::5?](*0SY@E1E(X5)U<$[=&Z>@*`)@!``"8`0```@```$4``92&
-M@```0!$``,"H`0'`J`$"`?0!]`&`!V6H`](!5DYX1@``````````(2`B"```
-M``````%X(@``>````'0!`0`,`P``!`$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"```,
-M"G1D0V79U1OM)RH<&X_&)09"P,!;F+5H._#Q540H(>=#YFGB`T:6E<S\)0OC
-M%!;/U-2]*>0.;V$((\IZ-+8TT!TR6.TT4-'7V+UO-^E_10?\BP&?Z&1M2#*%
-M9(GFE(-LA24OR"8WZ44G'ZZ[.W^1FZ.(Z2".0S\'+)60PF/)?"D``"1*HO8D
-M)$2<F/9NB%MOZ@=R^F/>]<4:=F()4E+YQ-K!'2D``!P``$`$)`AK7I'8N]>@
-MC<D4`L;7N:,20T,````<``!`!7.Q,U:*R&FE7_2"D,^8)492.%2=71.W1@R+
-M"0"8`0``F`$```(```!%``&4B7$``$`1``#`J`$!P*@!`@'T`?0!@`=EK"T4
-MS7;=AA4``````````"$@(@@````````!>"(``'@```!T`0$`#`,```<!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``BM#<(L1D$7<\IK%$>C--?0X<2K'K5!0,HQ@>
-MKZY?(^D4%$0:OZ:]$2O-@60^M_@\H0"QN#5/'2AH'Q'Y=PD_3$*N),YTOS['
-M)1\A5RGN9GGZB+K(D?\O.$*O6A"%?%4I$7K6E):S<NWS:1!TSWOG>!OTQ8.J
-MMR9E&UIY<@#.SN`I```D<)F.843K,R4,$0>W_=&"_`4\BT=:D!1#:>J1H>J)
-M]I,I```<``!`!*W[);1S.!_Q(A+5[`%LJCS6/6Q1````'```0`6[$'#<`&:Q
-MGJQ@)L?'2],_</7<C%T3MT:CO0P`F`$``)@!```"````10`!E(IB``!`$0``
-MP*@!`<"H`0(!]`'T`8`'9:PM%,UVW885```````````A("((`````````7@B
-M``!X````=`$!``P#```'`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``(K0W"+$9!%W
-M/*:Q1'HS37T.'$JQZU04#*,8'J^N7R/I%!1$&K^FO1$KS8%D/K?X/*$`L;@U
-M3QTH:!\1^7<)/TQ"KB3.=+\^QR4?(5<I[F9Y^HBZR)'_+SA"KUH0A7Q5*1%Z
-MUI26LW+M\VD0=,][YW@;],6#JK<F91M:>7(`SL[@*0``)'"9CF%$ZS,E#!$'
-MM_W1@OP%/(M'6I`40VGJD:'JB?:3*0``'```0`2M^R6T<S@?\2(2U>P!;*H\
-MUCUL40```!P``$`%NQ!PW`!FL9ZL8";'QTO3/W#UW(Q>$[=&+[T#`)@!``"8
-M`0```@```$4``921HP``0!$``,"H`0'`J`$"`?0!]`&`!V6L+13-=MV&%0``
-M````````(2`B"`````````%X(@``>````'0!`0`,`P``!P$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"``"*T-PBQ&01=SRFL41Z,TU]#AQ*L>M4%`RC&!ZOKE\CZ104
-M1!J_IKT1*\V!9#ZW^#RA`+&X-4\=*&@?$?EW"3],0JXDSG2_/L<E'R%7*>YF
-M>?J(NLB1_R\X0J]:$(5\52D1>M:4EK-R[?-I$'3/>^=X&_3%@ZJW)F4;6GER
-M`,[.X"D``"1PF8YA1.LS)0P1![?]T8+\!3R+1UJ0%$-IZI&AZHGVDRD``!P`
-M`$`$K?LEM',X'_$B$M7L`6RJ/-8];%$````<``!`!;L0<-P`9K&>K&`FQ\=+
-MTS]P]=R,7Q.W1F_)`0"8`0``F`$```(```!%``&4JID``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E`+H:G<..AHX``````````"$@(@@````````!>"(``'@```!T
-M`0$`#`,```@!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``0`;_8)'"''MH1$\U;7?_
-M992'90DN4#7KPLO1J<H'+-O_)<^]/#B=W0,'@%[:U?L`"W!7/N']Q<*US>`$
-M*R%1D<57\$')+"D3"GN+1!R/-63D+)^$!=@):X@7/#G#UT\"T47U-TU&7V7$
-M?G/WCZ$*(FE\Z#&R@GO.P(W++0KX.\DI```D&-5F6N)"?WY$0S2S)&C[%D>!
-MI;P9&0P()'>_'.U!'6,I```<``!`!"HWIL_<89X(G(EW\R'57=_`)?L:````
-M'```0`4-DBB=<P`9%@-]>QY><P2*P#2$<%\3MT:J]00`F`$``)@!```"````
-M10`!E*J=``!`$0``P*@!`<"H`0(!]`'T`8`'90"Z&IW#CH:.```````````A
-M("((`````````7@B``!X````=`$!``P#```(`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``$`&_V"1PAQ[:$1/-6UW_V64AV4)+E`UZ\++T:G*!RS;_R7/O3PXG=T#
-M!X!>VM7[``MP5S[A_<7"M<W@!"LA49'%5_!!R2PI$PI[BT0<CS5DY"R?A`78
-M"6N(%SPYP]=/`M%%]3=-1E]EQ'YS]X^A"B)I?.@QLH)[SL"-RRT*^#O)*0``
-M)!C59EKB0G]^1$,TLR1H^Q9'@:6\&1D,""1WOQSM01UC*0``'```0`0J-Z;/
-MW&&>")R)=_,AU5W?P"7[&@```!P``$`%#9(HG7,`&18#?7L>7G,$BL`TA'!?
-M$[=&W38+`)@!``"8`0```@```$4``92JH@``0!$``,"H`0'`J`$"`?0!]`&`
-M!V4`NAJ=PXZ&C@``````````(2`B"`````````%X(@``>````'0!`0`,`P``
-M"`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"``!`!O]@D<(<>VA$3S5M=_]EE(=E"2Y0
-M->O"R]&IR@<LV_\ES[T\.)W=`P>`7MK5^P`+<%<^X?W%PK7-X`0K(5&1Q5?P
-M0<DL*1,*>XM$'(\U9.0LGX0%V`EKB!<\.</73P+11?4W349?9<1^<_>/H0HB
-M:7SH,;*">\[`C<LM"O@[R2D``"08U69:XD)_?D1#-+,D:/L61X&EO!D9#`@D
-M=[\<[4$=8RD``!P``$`$*C>FS]QAG@B<B7?S(=5=W\`E^QH````<``!`!0V2
-M*)US`!D6`WU['EYS!(K`-(1P8!.W1OQ$"0"8`0``F`$```(```!%``&4JJX`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=EG"6R'B_>%.@``````````"$@(@@`````
-M```!>"(``'@```!T`0$`#`,```D!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``/>Q$
-MSBYX_$$I!6F1^331779LV)FTN3)C#WN.G9=5<.>#0;4H`&%T!A#MWW'?9A^:
-M=*`V5%12?`X=3V@^QY3%F^WM2Q`UO\BVDGFL?Y\WAFHEB&W.#R@&U=?I:"#Z
-M[!?HMGHMGSC[K+^9(8-#V;SHTMU"_G1:A.Q'#K>K)_L,,C$I```D:U1%\?;;
-M/?#.5%'3S6=UJ^Y"T4<&#?;3MGQD'1N*/1\I```<``!`!(BF5D($-<#MC_`E
-M.'#WGA.BGM]T````'```0`4C*E5DV([N:N;GI;7(M&1E;7NQP&`3MT9(;PP`
-MF`$``)@!```"````10`!E*JR``!`$0``P*@!`<"H`0(!]`'T`8`'99PELAXO
-MWA3H```````````A("((`````````7@B``!X````=`$!``P#```)`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``#WL1,XN>/Q!*05ID?DTT5UV;-B9M+DR8P][CIV7
-M57#G@T&U*`!A=`80[=]QWV8?FG2@-E144GP.'4]H/L>4Q9OM[4L0-;_(MI)Y
-MK'^?-X9J)8AMS@\H!M77Z6@@^NP7Z+9Z+9\X^ZR_F2&#0]F\Z-+=0OYT6H3L
-M1PZWJR?[##(Q*0``)&M41?'VVSWPSE11T\UG=:ON0M%'!@WVT[9\9!T;BCT?
-M*0``'```0`2(IE9"!#7`[8_P)3AP]YX3HI[?=````!P``$`%(RI59-B.[FKF
-MYZ6UR+1D96U[L<!A$[=&N&X#`)@!``"8`0```@```$4``92JR@``0!$``,"H
-M`0'`J`$"`?0!]`&`!V6<);(>+]X4Z```````````(2`B"`````````%X(@``
-M>````'0!`0`,`P``"0$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"```][$3.+GC\02D%
-M:9'Y--%==FS8F;2Y,F,/>XZ=EU5PYX-!M2@`870&$.W?<=]F'YITH#945%)\
-M#AU/:#['E,6;[>U+$#6_R+:2>:Q_GS>&:B6(;<X/*`;5U^EH(/KL%^BV>BV?
-M./NLOYDA@T/9O.C2W4+^=%J$[$<.MZLG^PPR,2D``"1K5$7Q]ML]\,Y44=/-
-M9W6K[D+11P8-]M.V?&0=&XH]'RD``!P``$`$B*960@0UP.V/\"4X</>>$Z*>
-MWW0````<``!`!2,J5638CNYJYN>EM<BT9&5M>['`8A.W1H%Y`0"8`0``F`$`
-M``(```!%``&4K-D``$`1``#`J`$!P*@!`@'T`?0!@`=E0!K:5/C:O'\`````
-M`````"$@(@@````````!>"(``'@```!T`0$`#`,```,!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``S\-4&(J1ZOAP@M[YGEMB`E(H\;05)WW+TCOG"8]8L6+.P:2B
-MYSSI/."CF5?`H0K5)Q!8M?@HOAMC%&^KX$TB?)];<I6":1R/JNC:\2;UNL](
-MUG%9-',BG%<.H`[GM%;@P32K%M-[4PZ(&;*8'I)B4I>*)\*"V+]\.*@3SE(M
-M;%8I```D.E9SG'1A^RJ`U1&$!1SCLR+?":P(+O4#`#FWIL.$:#HI```<``!`
-M!-L[/[7MS;AL[R)<Q,-4(1)3`B1Q````'```0`7H[C25>%_Z]4;(B4PLR9O3
-M_86F[F(3MT:HIP0`F`$``)@!```"````10`!E*T:``!`$0``P*@!`<"H`0(!
-M]`'T`8`'94`:VE3XVKQ_```````````A("((`````````7@B``!X````=`$!
-M``P#```#`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``,_#5!B*D>KX<(+>^9Y;8@)2
-M*/&T%2=]R]([YPF/6+%BSL&DHN<\Z3S@HYE7P*$*U2<06+7X*+X;8Q1OJ^!-
-M(GR?6W*5@FD<CZKHVO$F];K/2-9Q631S(IQ7#J`.Y[16X,$TJQ;3>U,.B!FR
-MF!Z28E*7BB?"@MB_?#BH$\Y2+6Q6*0``)#I6<YQT8?LJ@-41A`4<X[,BWPFL
-M""[U`P`YMZ;#A&@Z*0``'```0`3;.S^U[<VX;.\B7,3#5"$24P(D<0```!P`
-M`$`%Z.XTE7A?^O5&R(E,+,F;T_V%INYB$[=&R>@*`)@!``"8`0```@```$4`
-M`92NE```0!$``,"H`0'`J`$"`?0!]`&`!V5`&MI4^-J\?P``````````(2`B
-M"`````````%X(@``>````'0!`0`,`P```P$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M``#/PU08BI'J^'""WOF>6V("4BCQM!4G?<O2.^<)CUBQ8L[!I*+G/.D\X*.9
-M5\"A"M4G$%BU^"B^&V,4;ZO@32)\GUMRE8)I'(^JZ-KQ)O6ZSTC6<5DT<R*<
-M5PZ@#N>T5N#!-*L6TWM3#H@9LI@>DF)2EXHGPH+8OWPXJ!/.4BUL5BD``"0Z
-M5G.<=&'[*H#5$80%'..S(M\)K`@N]0,`.;>FPX1H.BD``!P``$`$VSL_M>W-
-MN&SO(ES$PU0A$E,")'$````<``!`!>CN-)5X7_KU1LB)3"S)F]/]A:;N8Q.W
-M1EOV"`"8`0``F`$```(```!%``&4L%(``$`1``#`J`$!P*@!`@'T`?0!@`=E
-M0_8=V@SQU?8``````````"$@(@@````````!>"(``'@```!T`0$`#`,```0!
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``(B_RI5=@&TS]HZV!V7EB&O"7+KM]097F
-M&`(_2E^_*`(_SW:%%Q!`?ULF1FB#(66%9#6.X4[KW'UQKTBPYZXK^`?N85N&
-MN=^G7>'(TCWBM8'?`5$-.A<OOML0*WIIBT&83D-`R*Z[JBO>Y6"=Z^W>L;![
-M^OSH"]M1)E'%%N%,J#\I```D3QR5L1#]&\:V>ZW])].]<Z;=ZN?4CT[5L)DG
-MZ1MYJ5DI```<``!`!/;JWIO?;N],4K(*K*C"I)3G7#[$````'```0`4U#*\`
-M?()X09<6?CJ'^\YMY(!(N6,3MT84(0P`F`$``)@!```"````10`!E+!6``!`
-M$0``P*@!`<"H`0(!]`'T`8`'94/V'=H,\=7V```````````A("((````````
-M`7@B``!X````=`$!``P#```$`0``#(`.`(`#```,`0``#(`.`0`#```,`0``
-M#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"
-M`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``"(O\J57
-M8!M,_:.M@=EY8AKPERZ[?4&5YA@"/TI?OR@"/\]VA1<00'];)D9H@R%EA60U
-MCN%.Z]Q]<:](L.>N*_@'[F%;AKG?IUWAR-(]XK6!WP%1#3H7+[[;$"MZ:8M!
-MF$Y#0,BNNZHKWN5@G>OMWK&P>_K\Z`O;4291Q1;A3*@_*0``)$\<E;$0_1O&
-MMGNM_2?3O7.FW>KGU(].U;"9)^D;>:E9*0``'```0`3VZMZ;WV[O3%*R"JRH
-MPJ24YUP^Q````!P``$`%-0RO`'R">$&7%GXZA_O.;>2`2+ED$[=&9B`#`)@!
-M``"8`0```@```$4``92P70``0!$``,"H`0'`J`$"`?0!]`&`!V5#]AW:#/'5
-M]@``````````(2`B"`````````%X(@``>````'0!`0`,`P``!`$```R`#@"`
-M`P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"
-M```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@``
-M``@$```.*```B``"```B+_*E5V`;3/VCK8'9>6(:\)<NNWU!E>88`C]*7[\H
-M`C_/=H47$$!_6R9&:(,A985D-8[A3NO<?7&O2+#GKBOX!^YA6X:YWZ==X<C2
-M/>*U@=\!40TZ%R^^VQ`K>FF+09A.0T#(KKNJ*][E8)WK[=ZQL'OZ_.@+VU$F
-M4<46X4RH/RD``"1/')6Q$/T;QK9[K?TGT[USIMWJY]2/3M6PF2?I&WFI62D`
-M`!P``$`$]NK>F]]N[TQ2L@JLJ,*DE.=</L0````<``!`!34,KP!\@GA!EQ9^
-M.H?[SFWD@$BY91.W1F=9`0"8`0``F`$```(```!%``&4L,8``$`1``#`J`$!
-MP*@!`@'T`?0!@`=E\CHS>"F%!#\``````````"$@(@@````````!>"(``'@`
-M``!T`0$`#`,```4!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,`
-M``@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P``
-M`0,```@#```%`P``"`0```(````(!```#B@``(@``@``8V[=/WI3F,&WHKMT
-M&CAE24_0^\>>)8.%>G&`KK<HHN]4:MDN?`H#`L;J2'.^TE,KY3:%71Z#_<`'
-M6&DE1<2>U_J/6-FZ#D2?T5""2%T1PD882KVMV9[-KE),B9)D2-GP^MZK7_>Z
-M_B))]D67TPW3Q/NU3(6<7S1N%-?CBS(2_"LI```D,(V'"6B6$#!W1-#F)W>P
-M!6[>Q?I8#8MA`_([UJ5#G0<I```<``!`!"^KE0^RQ&H@W@:I9W"TKY8.]T`/
-M````'```0`4\"Y=A59><;NY(X\E4*1O(S0P&MV43MT;*?P0`F`$``)@!```"
-M````10`!E+#-``!`$0``P*@!`<"H`0(!]`'T`8`'9?(Z,W@IA00_````````
-M```A("((`````````7@B``!X````=`$!``P#```%`0``#(`.`(`#```,`0``
-M#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(
-M`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH
-M``"(``(``&-NW3]Z4YC!MZ*[=!HX94E/T/O'GB6#A7IQ@*ZW**+O5&K9+GP*
-M`P+&ZDASOM)3*^4VA5T>@_W`!UAI)47$GM?ZCUC9N@Y$G]%0@DA=$<)&&$J]
-MK=F>S:Y23(F29$C9\/K>JU_WNOXB2?9%E],-T\3[M4R%G%\T;A37XXLR$OPK
-M*0``)#"-APEHEA`P=T30YB=WL`5NWL7Z6`V+80/R.]:E0YT'*0``'```0`0O
-MJY4/LL1J(-X&J6=PM*^6#O=`#P```!P``$`%/`N78567G&[N2./)5"D;R,T,
-M!K=E$[=&I,$*`)@!``"8`0```@```$4``92Q$```0!$``,"H`0'`J`$"`?0!
-M]`&`!V7R.C-X*84$/P``````````(2`B"`````````%X(@``>````'0!`0`,
-M`P``!0$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#
-M```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,`
-M``4#```(!````@````@$```.*```B``"``!C;MT_>E.8P;>BNW0:.&5)3]#[
-MQYXE@X5Z<8"NMRBB[U1JV2Y\"@,"QNI(<[[24ROE-H5='H/]P`=8:25%Q)[7
-M^H]8V;H.1)_14()(71'"1AA*O:W9GLVN4DR)DF1(V?#ZWJM?][K^(DGV19?3
-M#=/$^[5,A9Q?-&X4U^.+,A+\*RD``"0PC8<):)80,'=$T.8G=[`%;M[%^E@-
-MBV$#\CO6I4.=!RD``!P``$`$+ZN5#[+$:B#>!JEG<+2OE@[W0`\````<``!`
-M!3P+EV%5EYQN[DCCR50I&\C-#`:W9A.W1NK-"`"8`0``F`$```(```!%``&4
-ML2(``$`1``#`J`$!P*@!`@'T`?0!@`=EDQ(VQ]9Q-P0``````````"$@(@@`
-M```````!>"(``'@```!T`0$`#`,```@!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M4B$F2Y\S`JT,4CXGBOVMS@%4MW('PBQ.D'_J`,B6S^!8M=%=%%PZY)D`8:_%
-MK1\/5K1PX7O'X@+#*Z:H#-#-]-4Y[)[U>;@FWJ=2P]@%4@8,\\##L:%$CR#A
-M",97#0^`-\/E;^5_9)S.<^0D.7AM]H-5$/)HRZ8^QY"TV(>FO$@I```D0\@0
-M<A\]@V-U\A5A><C#H3,`&,V^"8BIQ'J_R),&8)`I```<``!`!+&EFQ,!-P7F
-M.V34NBX,![=)U;AY````'```0`42JEY/9#&E&;K,"H;9I="64D//"&83MT;\
-M^0L`F`$``)@!```"````10`!E+$D``!`$0``P*@!`<"H`0(!]`'T`8`'99,2
-M-L?6<3<$```````````A("((`````````7@B``!X````=`$!``P#```(`0``
-M#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"
-M`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$
-M```"````"`0```XH``"(``(``%(A)DN?,P*M#%(^)XK]K<X!5+=R!\(L3I!_
-MZ@#(EL_@6+71711<.N29`&&OQ:T?#U:T<.%[Q^("PRNFJ`S0S?35.>R>]7FX
-M)MZG4L/8!5(&#//`P[&A1(\@X0C&5PT/@#?#Y6_E?V2<SG/D)#EX;?:#51#R
-M:,NF/L>0M-B'IKQ(*0``)$/($'(?/8-C=?(587G(PZ$S`!C-O@F(J<1ZO\B3
-M!F"0*0``'```0`2QI9L3`3<%YCMDU+HN#`>W2=6X>0```!P``$`%$JI>3V0Q
-MI1FZS`J&V:70EE)#SPAG$[=&5?D"`)@!``"8`0```@```$4``92Q*P``0!$`
-M`,"H`0'`J`$"`?0!]`&`!V63$C;'UG$W!```````````(2`B"`````````%X
-M(@``>````'0!`0`,`P``"`$```R`#@"``P``#`$```R`#@$``P``#`$```R`
-M#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,`
-M``@#```!`P``"`,```4#```(!````@````@$```.*```B``"``!2(29+GS,"
-MK0Q2/B>*_:W.`52W<@?"+$Z0?^H`R);/X%BUT5T47#KDF0!AK\6M'P]6M'#A
-M>\?B`L,KIJ@,T,WTU3GLGO5YN";>IU+#V`52!@SSP,.QH42/(.$(QE<-#X`W
-MP^5OY7]DG,YSY"0Y>&WV@U40\FC+IC['D+38AZ:\2"D``"1#R!!R'SV#8W7R
-M%6%YR,.A,P`8S;X)B*G$>K_(DP9@D"D``!P``$`$L:6;$P$W!>8[9-2Z+@P'
-MMTG5N'D````<``!`!1*J7D]D,:49NLP*AMFET)920\\(:!.W1OL%`0"8`0``
-MF`$```(```!%``&4L3\``$`1``#`J`$!P*@!`@'T`?0!@`=E3"JBXRW!NF,`
-M`````````"$@(@@````````!>"(``'@```!T`0$`#`,```D!```,@`X`@`,`
-M``P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@``
-M`0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(
-M!```#B@``(@``@``$P"^',.<.6]#%/NLG$R<3JQ:!78!3*=+MCY6B*%0:9#$
-M%5M.7'8'QY+LZ.!"K&A`SZD!XNGH!#BG%:`SV!!;?=/!)$&J==F7!.9T/M,H
-M+1+8`GANE4F[22#R&0GR0/;;'6=@+6M/VAMS_O1VSNNU^^+/8]RN7[Y/(.52
-MKRS"/UHI```DOPN;K8NDMI#,O06U7!YW1Z-,K$3OIMO5%6<&GG\7O^(I```<
-M``!`!#I)).Y1BR+EWE/H;*R^<SE+HR;5````'```0`4&)R6>\+A<O0DR,9J-
-M+\AJ*;?Y+&@3MT:M,00`F`$``)@!```"````10`!E+%!``!`$0``P*@!`<"H
-M`0(!]`'T`8`'94PJHN,MP;IC```````````A("((`````````7@B``!X````
-M=`$!``P#```)`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(
-M`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#
-M```(`P``!0,```@$```"````"`0```XH``"(``(``!,`OAS#G#EO0Q3[K)Q,
-MG$ZL6@5V`4RG2[8^5HBA4&F0Q!5;3EQV!\>2[.C@0JQH0,^I`>+IZ`0XIQ6@
-M,]@06WW3P21!JG79EP3F=#[3*"T2V`)X;I5)NTD@\AD)\D#VVQUG8"UK3]H;
-M<_[T=L[KM?OBSV/<KE^^3R#E4J\LPC]:*0``)+\+FZV+I+:0S+T%M5P>=T>C
-M3*Q$[Z;;U15G!IY_%[_B*0``'```0`0Z223N48LBY=Y3Z&RLOG,Y2Z,FU0``
-M`!P``$`%!B<EGO"X7+T),C&:C2_(:BFW^2QH$[=&0G,*`)@!``"8`0```@``
-M`$4``92Q0@``0!$``,"H`0'`J`$"`?0!]`&`!V5,*J+C+<&Z8P``````````
-M(2`B"`````````%X(@``>````'0!`0`,`P``"0$```R`#@"``P``#`$```R`
-M#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(`
-M``0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```
-MB``"```3`+X<PYPY;T,4^ZR<3)Q.K%H%=@%,ITNV/E:(H5!ID,056TY<=@?'
-MDNSHX$*L:$#/J0'BZ>@$.*<5H#/8$%M]T\$D0:IUV9<$YG0^TR@M$M@">&Z5
-M2;M)(/(9"?)`]ML=9V`M:T_:&W/^]';.Z[7[XL]CW*Y?OD\@Y5*O+,(_6BD`
-M`"2_"YNMBZ2VD,R]!;5<'G='HTRL1.^FV]459P:>?Q>_XBD``!P``$`$.DDD
-M[E&+(N7>4^ALK+YS.4NC)M4````<``!`!08G)9[PN%R]"3(QFHTOR&HIM_DL
-M:1.W1BB`"`"8`0``F`$```(```!%``&4L4P``$`1``#`J`$!P*@!`@'T`?0!
-M@`=EQ>[;H@D"`#L``````````"$@(@@````````!>"(``'@```!T`0$`#`,`
-M``H!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``
-M"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%
-M`P``"`0```(````(!```#B@``(@``@```&7L[6NKM]:.CSM4'+K>7_T,P>9H
-M5/%`2;N'2S!R(/L0Q$%C"&1@,LK(WB7@+V9#">_I\,4?OK+X,L[3]IZ$FQ)*
-M0J$=G\W[`L3#@;N-1?6$E>8]@:5@B_-MCFU&$4@&X'U1VT+A=N!`]6S*JI\[
-MLG"S:+IN9MRU^WOQ.+<X+JTI```D%G4;_)(Y'[GU+G>R]/!RD80?54+X]=J$
-M<!9*75V9J$TI```<``!`!$$I_*T2H6,Y:`D3N_CG4DL([S34````'```0`6W
-MC*N.2@'T`F\C$(3MA8W%KX6EZ&D3MT:]JPL`F`$``)@!```"````10`!E+%/
-M``!`$0``P*@!`<"H`0(!]`'T`8`'9<7NVZ()`@`[```````````A("((````
-M`````7@B``!X````=`$!``P#```*`0``#(`.`(`#```,`0``#(`.`0`#```,
-M`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#
-M```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(```!E
-M[.UKJ[?6CH\[5!RZWE_]#,'F:%3Q0$F[ATLP<B#[$,1!8PAD8#+*R-XEX"]F
-M0PGOZ?#%'[ZR^#+.T_:>A)L22D*A'9_-^P+$PX&[C47UA)7F/8&E8(OS;8YM
-M1A%(!N!]4=M"X7;@0/5LRJJ?.[)PLVBZ;F;<M?M[\3BW."ZM*0``)!9U&_R2
-M.1^Y]2YWLO3P<I&$'U5"^/7:A'`62EU=F:A-*0``'```0`1!*?RM$J%C.6@)
-M$[OXYU)+".\TU````!P``$`%MXRKCDH!]`)O(Q"$[86-Q:^%I>AJ$[=&$*L"
-M`)@!``"8`0```@```$4``92Q50``0!$``,"H`0'`J`$"`?0!]`&`!V7%[MNB
-M"0(`.P``````````(2`B"`````````%X(@``>````'0!`0`,`P``"@$```R`
-M#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,`
-M``@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!```
-M`@````@$```.*```B``"````9>SM:ZNWUHZ/.U0<NMY?_0S!YFA4\4!)NX=+
-M,'(@^Q#$06,(9&`RRLC>)>`O9D,)[^GPQ1^^LO@RSM/VGH2;$DI"H1V?S?L"
-MQ,.!NXU%]825YCV!I6"+\VV.;4812`;@?5';0N%VX$#U;,JJGSNR<+-HNFYF
-MW+7[>_$XMS@NK2D``"06=1O\DCD?N?4N=[+T\'*1A!]50OCUVH1P%DI=79FH
-M32D``!P``$`$02G\K1*A8SEH"1.[^.=22PCO--0````<``!`!;>,JXY*`?0"
-M;R,0A.V%C<6OA:7H:Q.W1LRY``"8`0``F`$```(```!%``&4L6,``$`1``#`
-MJ`$!P*@!`@'T`?0!@`=EM,2KG3,'$9P``````````"$@(@@````````!>"(`
-M`'@```!T`0$`#`,```L!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`
-MP`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(
-M`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``X?N0J'<I7&ZP
-M/;E71/+\4A4?(R+\/3:TIF!5L]I3&"A0_X#W8D.FU]3?M_@;3LITTQZ34&3O
-MXE0.>T$D:X^(P9]IABO7GUSMT13<26^PM2U.`G6+B#8&U=(93H^LL)>-,BA.
-M4%^80I>(3-/SPEM7NMOB2N@D0DP=>O")W!B*ZY$I```D0V(L+7'/H`/L)FL?
-MH(NI6`/G_##+UGQ?DD6Z!+S]<_8I```<``!`!!8#++-EA$\61>1PDLU4@/#O
-M.9ZG````'```0`4$DR6>K+G9?R0,Q;6/M5H[.-@<_VL3MT:)XP,`F`$``)@!
-M```"````10`!E+%G``!`$0``P*@!`<"H`0(!]`'T`8`'9;3$JYTS!Q&<````
-M```````A("((`````````7@B``!X````=`$!``P#```+`0``#(`.`(`#```,
-M`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#
-M```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0`
-M``XH``"(``(``.'[D*AW*5QNL#VY5T3R_%(5'R,B_#TVM*9@5;/:4Q@H4/^`
-M]V)#IM?4W[?X&T[*=-,>DU!D[^)4#GM!)&N/B,&?:88KUY]<[=$4W$EOL+4M
-M3@)UBX@V!M72&4Z/K+"7C3(H3E!?F$*7B$S3\\);5[K;XDKH)$),'7KPB=P8
-MBNN1*0``)$-B+"UQSZ`#["9K'Z"+J5@#Y_PPR]9\7Y)%N@2\_7/V*0``'```
-M0`06`RRS981/%D7D<)+-5(#P[SF>IP```!P``$`%!),EGJRYV7\D#,6UC[5:
-M.SC8'/]K$[=&'B4*`)@!``"8`0```@```$4``92Q;0``0!$``,"H`0'`J`$"
-M`?0!]`&`!V6TQ*N=,P<1G```````````(2`B"`````````%X(@``>````'0!
-M`0`,`P``"P$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$`
-M``,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``
-M"`,```4#```(!````@````@$```.*```B``"``#A^Y"H=RE<;K`]N5=$\OQ2
-M%1\C(OP]-K2F8%6SVE,8*%#_@/=B0Z;7U-^W^!M.RG33'I-09._B5`Y[021K
-MCXC!GVF&*]>?7.W1%-Q);["U+4X"=8N(-@;5TAE.CZRPEXTR*$Y07YA"EXA,
-MT_/"6U>ZV^)*Z"1"3!UZ\(G<&(KKD2D``"1#8BPM<<^@`^PF:Q^@BZE8`^?\
-M,,O6?%^21;H$O/US]BD``!P``$`$%@,LLV6$3Q9%Y'"2S52`\.\YGJ<````<
-M``!`!023)9ZLN=E_)`S%M8^U6CLXV!S_;!.W1N(N"`"8`0``F`$```(```!%
-M``&4L7$``$`1``#`J`$!P*@!`@'T`?0!@`=E48]G_\X]S+X``````````"$@
-M(@@````````!>"(``'@```!T`0$`#`,```T!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``SQ8>6E,O3JUI-8!*8USKZ9EP4(GE."&#:?5?G&!J@FN,:W,>`L0Y8S)&
-MB(ROF*+D?4&I:!D@[1_8G@',_+JIGZGL=R$1M$AK@Z=+KS66WW7_HTG_B5E=
-M+*3&#P+8MR`Q$5!QEI0&XEZP*PCE$HP$C3L8-:L;U#-OZF0Z)B]&$*XI```D
-M&@>^GGZ)$#A]5%FNEMBP^W\*Q8+UD[[3S3\"^+M+7,`I```<``!`!/;3/'"&
-M3Q0W8W=Z$E$P+U:Q:'BY````'```0`7RU'[CH5YUX/A$`[G0\*<]TG&=AVP3
-MMT:"70L`F`$``)@!```"````10`!E+%S``!`$0``P*@!`<"H`0(!]`'T`8`'
-M95&/9__./<R^```````````A("((`````````7@B``!X````=`$!``P#```-
-M`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"
-M```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,`
-M``@$```"````"`0```XH``"(``(``,\6'EI3+TZM:36`2F-<Z^F9<%")Y3@A
-M@VGU7YQ@:H)KC&MS'@+$.6,R1HB,KYBBY'U!J6@9(.T?V)X!S/RZJ9^I['<A
-M$;1(:X.G2Z\UEM]U_Z-)_XE972RDQ@\"V+<@,1%0<9:4!N)>L"L(Y1*,!(T[
-M&#6K&]0S;^ID.B8O1A"N*0``)!H'OIY^B1`X?519KI;8L/M_"L6"]9.^T\T_
-M`OB[2US`*0``'```0`3VTSQPAD\4-V-W>A)1,"]6L6AXN0```!P``$`%\M1^
-MXZ%>=>#X1`.YT/"G/=)QG8=M$[=&UUP"`)@!``"8`0```@```$4``92Q>```
-M0!$``,"H`0'`J`$"`?0!]`&`!V51CV?_SCW,O@``````````(2`B"```````
-M``%X(@``>````'0!`0`,`P``#0$```R`#@"``P``#`$```R`#@$``P``#`$`
-M``R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P``
-M`@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"``#/%AY:
-M4R].K6DU@$IC7.OIF7!0B>4X(8-I]5^<8&J":XQK<QX"Q#EC,D:(C*^8HN1]
-M0:EH&2#M']B>`<S\NJF?J>QW(1&T2&N#ITNO-9;?=?^C2?^)65TLI,8/`MBW
-M(#$14'&6E`;B7K`K".42C`2-.Q@UJQO4,V_J9#HF+T80KBD``"0:![Z>?HD0
-M.'U46:Z6V+#[?PK%@O63OM/-/P+XNTM<P"D``!P``$`$]M,\<(9/%#=C=WH2
-M43`O5K%H>+D````<``!`!?+4?N.A7G7@^$0#N=#PISW2<9V';A.W1B'2``"8
-M`0``F`$```(```!%``&4M3\``$`1``#`J`$!P*@!`@'T`?0!@`=E,(1P?:=J
-M&,<``````````"$@(@@````````!>"(``'@```!T`0$`#`,```X!```,@`X`
-M@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(
-M`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(`
-M```(!```#B@``(@``@``T27%!ZD`F;M]6H*2E<M8]7BT$[^H88'^M_#<R!H7
-ML;`#1&T=%L:[=U$0\#YGA-.PPM^>1QK<?7T293!;:<`C.R<#,85N[O#C5QNZ
-M&@$Z?SA(&Q%6.;.$0H,]!:G4%:[C%U?S`)U!&[-66Z;A=$'BC.0A^'R\_%T8
-MQW?(W-^'2]PI```DVPO"/9:NA\V[%B7!XU'QXH-7LL@N2/B#'ON%A?I<^$0I
-M```<``!`!'#?M+&@!E:(##LUZXU.\#&N?@_T````'```0`60\?->CWC7["]K
-M:R";!&S0$C^J+VX3MT;(^`,`F`$``)@!```"````10`!E+5M``!`$0``P*@!
-M`<"H`0(!]`'T`8`'93"$<'VG:AC'```````````A("((`````````7@B``!X
-M````=`$!``P#```.`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#
-M```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,`
-M``$#```(`P``!0,```@$```"````"`0```XH``"(``(``-$EQ0>I`)F[?5J"
-MDI7+6/5XM!._J&&!_K?PW,@:%[&P`T1M'1;&NW=1$/`^9X33L,+?GD<:W'U]
-M$F4P6VG`(SLG`S&%;N[PXU<;NAH!.G\X2!L15CFSA$*#/06IU!6NXQ=7\P"=
-M01NS5ENFX71!XHSD(?A\O/Q=&,=WR-S?ATO<*0``)-L+PCV6KH?-NQ8EP>-1
-M\>*#5[+(+DCX@Q[[A87Z7/A$*0``'```0`1PW[2QH`96B`P[->N-3O`QKGX/
-M]````!P``$`%D/'S7H]XU^PO:VL@FP1LT!(_JB]N$[=&B"4*`)@!``"8`0``
-M`@```$4``92XB@``0!$``,"H`0'`J`$"`?0!]`&`!V4PA'!]IVH8QP``````
-M````(2`B"`````````%X(@``>````'0!`0`,`P``#@$```R`#@"``P``#`$`
-M``R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``
-M"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.
-M*```B``"``#1)<4'J0"9NWU:@I*5RUCU>+03OZAA@?ZW\-S(&A>QL`-$;1T6
-MQKMW41#P/F>$T[#"WYY'&MQ]?1)E,%MIP",[)P,QA6[N\.-7&[H:`3I_.$@;
-M$58YLX1"@ST%J=05KN,75_,`G4$;LU9;IN%T0>*,Y"'X?+S\71C'=\C<WX=+
-MW"D``"3;"\(]EJZ'S;L6)<'C4?'B@U>RR"Y(^(,>^X6%^ESX1"D``!P``$`$
-M<-^TL:`&5H@,.S7KC4[P,:Y^#_0````<``!`!9#Q\UZ/>-?L+VMK()L$;-`2
-M/ZHO;Q.W1L4Q"`"8`0``F`$```(```!%``&4N)8``$`1``#`J`$!P*@!`@'T
-M`?0!@`=E'#K_@GI><T,``````````"$@(@@````````!>"(``'@```!T`0$`
-M#`,```\!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``P4B-V;A6[-AR]D?3158(BO3@
-M>CLTMVRR"ZQ5"P8QQC!Q!M"[\=.L2>]OJ:&'^Q8FY)N.!/60-^'D7C#9\;O8
-M_+GF[8\RY*'?1/5Z:$GS7D+;H`7":P'9->MA^22=L62Y='PPW]>Q40X)2K8I
-M+G9Z')&FQ%W_)[HS8L'VY@%_$"LI```D%H7<#,V;%LT=.K^I?11@`C+F8)ZD
-M887P-&%2I0?EL[PI```<``!`!![=T+!0`I-U\FL72YW)2+=GXLZ%````'```
-M0`5FV2:&_'VDB*8LH..=4L;5E`UW?V\3MT:170L`F`$``)@!```"````10`!
-ME+B7``!`$0``P*@!`<"H`0(!]`'T`8`'91PZ_X)Z7G-#```````````A("((
-M`````````7@B``!X````=`$!``P#```/`0``#(`.`(`#```,`0``#(`.`0`#
-M```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,`
-M``@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(`
-M`,%(C=FX5NS8<O9'TT56"(KTX'H[-+=LL@NL50L&,<8P<0;0N_'3K$GO;ZFA
-MA_L6)N2;C@3UD#?AY%XPV?&[V/RYYNV/,N2AWT3U>FA)\UY"VZ`%PFL!V37K
-M8?DDG;%DN71\,-_7L5$."4JV*2YV>AR1IL1=_R>Z,V+!]N8!?Q`K*0``)!:%
-MW`S-FQ;-'3J_J7T48`(RYF">I&&%\#1A4J4'Y;.\*0``'```0`0>W="P4`*3
-M=?)K%TN=R4BW9^+.A0```!P``$`%9MDFAOQ]I(BF+*#CG5+&U90-=W]P$[=&
-MKUP"`)@!``"8`0```@```$4``92XG0``0!$``,"H`0'`J`$"`?0!]`&`!V4<
-M.O^">EYS0P``````````(2`B"`````````%X(@``>````'0!`0`,`P``#P$`
-M``R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@``
-M`@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(
-M!````@````@$```.*```B``"``#!2(W9N%;LV'+V1]-%5@B*].!Z.S2W;+(+
-MK%4+!C'&,'$&T+OQTZQ)[V^IH8?[%B;DFXX$]9`WX>1>,-GQN]C\N>;MCS+D
-MH=]$]7IH2?->0MN@!<)K`=DUZV'Y))VQ9+ET?##?U[%1#@E*MBDN=GH<D:;$
-M7?\GNC-BP?;F`7\0*RD``"06A=P,S9L6S1TZOZE]%&`",N9@GJ1AA?`T85*E
-M!^6SO"D``!P``$`$'MW0L%`"DW7R:Q=+G<E(MV?BSH4````<``!`!6;9)H;\
-M?:2(IBR@XYU2QM64#7=_<1.W1IYH``"8`0``F`$```(```!%``&4N*P``$`1
-M``#`J`$!P*@!`@'T`?0!@`=EHMC(.-CZ'=,``````````"$@(@@````````!
-M>"(``'@```!T`0$`#`,``!`!```,@`X`@`,```P!```,@`X!``,```P!```,
-M@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#
-M```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``UA]ML:9M
-MS,]96(YU?2=\^<C:1S='*B!,OZ\6W0F.;D5&U`Z4JGW[ET4D1V"O]AQVF&[V
-M`[FR-<L+3("L_505MD>\!I4#B&O_"8L(T@PYB0`:6>7DH\'NG[%8?J#&CM2M
-M]+'(;G?I=HA6NY>TP7C$][;BE0K7*GH,W'B1%6"ZSY,I```D8X$L6WM7_<>F
-M107A@?M'7G*GKCR4TLF;5>[\L^1<U80I```<``!`!%*5$"[UOB?<)@FJSK,K
-M-NI$ZQ*K````'```0`7DO=97>S([EB65YD2`1NP!,99P\7$3MT;CE0,`F`$`
-M`)@!```"````10`!E+CM``!`$0``P*@!`<"H`0(!]`'T`8`'9:+8R#C8^AW3
-M```````````A("((`````````7@B``!X````=`$!``P#```0`0``#(`.`(`#
-M```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(`
-M``$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````
-M"`0```XH``"(``(``-8?;;&F;<S/65B.=7TG?/G(VD<W1RH@3+^O%MT)CFY%
-M1M0.E*I]^Y=%)$=@K_8<=IAN]@.YLC7+"TR`K/U4%;9'O`:5`XAK_PF+"-(,
-M.8D`&EGEY*/![I^Q6'Z@QH[4K?2QR&YWZ7:(5KN7M,%XQ/>VXI4*URIZ#-QX
-MD15@NL^3*0``)&.!+%M[5_W'ID4%X8'[1UYRIZX\E-+)FU7N_+/D7-6$*0``
-M'```0`12E1`N];XGW"8)JLZS*S;J1.L2JP```!P``$`%Y+W65WLR.Y8EE>9$
-M@$;L`3&6</%Q$[=&L]8)`)@!``"8`0```@```$4``92YY0``0!$``,"H`0'`
-MJ`$"`?0!]`&`!V6BV,@XV/H=TP``````````(2`B"`````````%X(@``>```
-M`'0!`0`,`P``$`$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``
-M"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!
-M`P``"`,```4#```(!````@````@$```.*```B``"``#6'VVQIFW,SUE8CG5]
-M)WSYR-I'-T<J($R_KQ;="8YN14;4#I2J??N7121'8*_V'':8;O8#N;(URPM,
-M@*S]5!6V1[P&E0.(:_\)BPC2##F)`!I9Y>2CP>Z?L5A^H,:.U*WTL<AN=^EV
-MB%:[E[3!>,3WMN*5"M<J>@S<>)$58+K/DRD``"1C@2Q;>U?]QZ9%!>&!^T=>
-M<J>N/)32R9M5[ORSY%S5A"D``!P``$`$4I40+O6^)]PF":K.LRLVZD3K$JL`
-M```<``!`!>2]UE=[,CN6)97F1(!&[`$QEG#Q<A.W1LWB!P"8`0``F`$```(`
-M``!%``&4NF@``$`1``#`J`$!P*@!`@'T`?0!@`=EQ-N'V"%2VF<`````````
-M`"$@(@@````````!>"(``'@```!T`0$`#`,``!,!```,@`X`@`,```P!```,
-M@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"
-M```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@`
-M`(@``@``+1N"&R.!!]G7I9XY2XH#M:*\(UNUU'`_FXX79$1Q0R;/>9Q`C,E)
-M>.*N%/BV,ZP/J32U:D"1)QNLD[R,Y7!?28J[5:9E1R`MW=2'C53<6)7&'J&(
-MX$SBK<V6Y47]XG^[9E#TD4J\P?=J5+>."Q[4&%+NUFMD)#95(IXJ*X.>@#TI
-M```D!"<!8_M7@0'Y,!F:%C6!^+AL/UG(^M-'>(AE#&://^@I```<``!`!/7_
-M=$P[,&PELH[*DANV:3]#UI"\````'```0`62('Z&:^R5",EMQZMM9&?,1[*(
-M3'(3MT8K#PL`F`$``)@!```"````10`!E+IM``!`$0``P*@!`<"H`0(!]`'T
-M`8`'9<3;A]@A4MIG```````````A("((`````````7@B``!X````=`$!``P#
-M```3`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,`
-M``@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``
-M!0,```@$```"````"`0```XH``"(``(``"T;@ALC@0?9UZ6>.4N*`[6BO"-;
-MM=1P/YN.%V1$<4,FSWF<0(S)27CBKA3XMC.L#ZDTM6I`D2<;K).\C.5P7TF*
-MNU6F94<@+=W4AXU4W%B5QAZAB.!,XJW-EN5%_>)_NV90])%*O,'W:E2WC@L>
-MU!A2[M9K9"0V52*>*BN#GH`]*0``)`0G`6/[5X$!^3`9FA8U@?BX;#]9R/K3
-M1WB(90QFCS_H*0``'```0`3U_W1,.S!L);*.RI(;MFD_0]:0O````!P``$`%
-MDB!^AFOLE0C);<>K;61GS$>RB$QS$[=&=@X"`)@!``"8`0```@```$4``92Z
-M=@``0!$``,"H`0'`J`$"`?0!]`&`!V7$VX?8(5+:9P``````````(2`B"```
-M``````%X(@``>````'0!`0`,`P``$P$```R`#@"``P``#`$```R`#@$``P``
-M#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(
-M`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"```M
-M&X(;(X$'V=>EGCE+B@.UHKPC6[74<#^;CA=D1'%#)L]YG$",R4EXXJX4^+8S
-MK`^I-+5J0)$G&ZR3O(SE<%])BKM5IF5'("W=U(>-5-Q8E<8>H8C@3.*MS9;E
-M1?WB?[MF4/212KS!]VI4MXX+'M084N[6:V0D-E4BGBHK@YZ`/2D``"0$)P%C
-M^U>!`?DP&9H6-8'XN&P_6<CZTT=XB&4,9H\_Z"D``!P``$`$]?]T3#LP;"6R
-MCLJ2&[9I/T/6D+P````<``!`!9(@?H9K[)4(R6W'JVUD9\Q'LHA,=!.W1A8;
-M``"8`0``F`$```(```!%``&4NHD``$`1``#`J`$!P*@!`@'T`?0!@`=E3+;0
-M-'FP6P0``````````"$@(@@````````!>"(``'@```!T`0$`#`,``!0!```,
-M@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#
-M```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0`
-M``(````(!```#B@``(@``@``:(DC4B)DC>WU&PW&;83SSX7[<A&]-&"WWXE]
-M@$']]RXNYLE:MK_?.<H4%^-S>3*@J>ZUHK2Q"!J>9E3O-J8+A7&JM),-6%11
-M9[B>CSU[V22;TT4?\/OXGKR+B2V$.K0]>AEYRUH1*HOT%'T-%D'G\O,EQ%Q<
-M_`*PVF+!H`("3M8I```DXWETZ<7;[;G6]TLANK>O[S82+J(G=DN*]4T>LY8*
-M54HI```<``!`!!Q]]5#IGI-E[T13C9*2=FI'.X`Q````'```0`5,S-S="WF%
-M;*L^2S3R[,A/:WT>*703MT8E1P,`F`$``)@!```"````10`!E+KO``!`$0``
-MP*@!`<"H`0(!]`'T`8`'94RVT#1YL%L$```````````A("((`````````7@B
-M``!X````=`$!``P#```4`0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.
-M`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``
-M"`,```$#```(`P``!0,```@$```"````"`0```XH``"(``(``&B)(U(B9(WM
-M]1L-QFV$\\^%^W(1O31@M]^)?8!!_?<N+N;)6K:_WSG*%!?C<WDRH*GNM:*T
-ML0@:GF94[S:F"X5QJK23#5A446>XGH\]>]DDF]-%'_#[^)Z\BXDMA#JT/7H9
-M><M:$2J+]!1]#19!Y_+S)<1<7/P"L-IBP:`"`D[6*0``).-Y=.G%V^VYUO=+
-M(;JWK^\V$BZB)W9+BO5-'K.6"E5**0``'```0`0<??50Z9Z39>]$4XV2DG9J
-M1SN`,0```!P``$`%3,S<W0MYA6RK/DLT\NS(3VM]'BET$[=&GH@)`)@!``"8
-M`0```@```$4``92[+@``0!$``,"H`0'`J`$"`?0!]`&`!V5,MM`T>;!;!```
-M````````(2`B"`````````%X(@``>````'0!`0`,`P``%`$```R`#@"``P``
-M#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!
-M`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#```(!````@````@$
-M```.*```B``"``!HB2-2(F2-[?4;#<9MA///A?MR$;TT8+??B7V`0?WW+B[F
-MR5JVO]\YRA07XW-Y,J"I[K6BM+$(&IYF5.\VI@N%<:JTDPU85%%GN)Z//7O9
-M))O311_P^_B>O(N)+80ZM#UZ&7G+6A$JB_04?0T60>?R\R7$7%S\`K#:8L&@
-M`@).UBD``"3C>73IQ=OMN=;W2R&ZMZ_O-A(NHB=V2XKU31ZSE@I52BD``!P`
-M`$`$''WU4.F>DV7O1%.-DI)V:D<[@#$````<``!`!4S,W-T+>85LJSY+-/+L
-MR$]K?1XI=1.W1I"9!P"8`0``F`$```(```!%``&4NS\``$`1``#`J`$!P*@!
-M`@'T`?0!@`=E$@=5"HXPU$4``````````"$@(@@````````!>"(``'@```!T
-M`0$`#`,``!4!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!
-M```#`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,`
-M``@#```%`P``"`0```(````(!```#B@``(@``@``FOS$VX8$5"=P0%V%J3+#
-MCXBE*&Q/R#/2YLD<!+$%9J3'!#[,/4_$L0=\`K$1EN2.[^!FS!D)HS*[HI*,
-M^RKUA>>3CL\Y4](Y[N"_8XEMWVK>ERN=[R;:0_R>S-/?%7YA;E[F;#*TH1'P
-M0"*B".Z4:QH\_E[-;YT[M'@'5(RT#^,I```DIQS[8^CJ&X'-F`(M->A5O4N+
-MBZ+K'%4YHG"(3GQ(UDXI```<``!`!#R"-G3_OQ:A0WHA7-S#!^GG"WB%````
-M'```0`4'K#>"[\4J'5R;G#!8X)0J)?>C-G43MT8#P0H`F`$``)@!```"````
-M10`!E+M#``!`$0``P*@!`<"H`0(!]`'T`8`'91('50J.,-1%```````````A
-M("((`````````7@B``!X````=`$!``P#```5`0``#(`.`(`#```,`0``#(`.
-M`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``"`(```$#```(`@``
-M!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"````"`0```XH``"(
-M``(``)K\Q-N&!%0G<$!=A:DRPX^(I2AL3\@STN;)'`2Q!6:DQP0^S#U/Q+$'
-M?`*Q$9;DCN_@9LP9":,RNZ*2C/LJ]87GDX[/.5/2.>[@OV.);=]JWI<KG>\F
-MVD/\GLS3WQ5^86Y>YFPRM*$1\$`BH@CNE&L://Y>S6^=.[1X!U2,M`_C*0``
-M)*<<^V/HZAN!S9@"+37H5;U+BXNBZQQ5.:)PB$Y\2-9.*0``'```0`0\@C9T
-M_[\6H4-Z(5S<PP?IYPMXA0```!P``$`%!ZPW@N_%*AU<FYPP6."4*B7WHS9V
-M$[=&9\`!`)@!``"8`0```@```$4``92[2@``0!$``,"H`0'`J`$"`?0!]`&`
-M!V42!U4*CC#410``````````(2`B"`````````%X(@``>````'0!`0`,`P``
-M%0$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#``P``"`$```,#```(
-M`@```@,```@"```!`P``"`(```0#```(`P```@,```@#```!`P``"`,```4#
-M```(!````@````@$```.*```B``"``":_,3;A@14)W!`786I,L./B*4H;$_(
-M,]+FR1P$L05FI,<$/LP]3\2Q!WP"L1&6Y([OX&;,&0FC,KNBDHS[*O6%YY..
-MSSE3TCGNX+]CB6W?:MZ7*YWO)MI#_)[,T]\5?F%N7N9L,K2A$?!`(J(([I1K
-M&CS^7LUOG3NT>`=4C+0/XRD``"2G'/MCZ.H;@<V8`BTUZ%6]2XN+HNL<53FB
-M<(A.?$C63BD``!P``$`$/((V=/^_%J%#>B%<W,,'Z><+>(4````<``!`!0>L
-M-X+OQ2H=7)N<,%C@E"HE]Z,V=A.W1F0.#P"8`0``F`$```(```!%``&4NU$`
-M`$`1``#`J`$!P*@!`@'T`?0!@`=EX;T<RY0X5&```````````"$@(@@`````
-M```!>"(``'@```!T`0$`#`,`__\!```,@`X`@`,```P!```,@`X!``,```P!
-M```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``"`,`
-M``(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``SW,H
-M$+D)J5L#&?0@NNS61CU9&/@(90+@WX<YJ,/`;ZE?A(K1=;<95\,628!"0,I7
-M\0><[MXZ\].K`'6Z";F'2G>G`DMT\;"$;Y6N$OMW>KI=['.W483:`+$@JHU*
-MRWSN+8F]OSP^%9J5=W?L**,@*?SGRQFP.-KN4,%MU]3R@$4I```D60:,%`]%
-M_V,XU`/.2^9^Z(LHG_"JT)C**G/N]7L4&W\I```<``!`!"$@P@J855<CMF<R
-M^Z+>-\]-^4^`````'```0`42B_7G8>2$S-M7VN8%DRZ^"G]@LW<3MT;#^`(`
-MF`$``)@!```"````10`!E+M3``!`$0``P*@!`<"H`0(!]`'T`8`'9>&]',N4
-M.%1@```````````A("((`````````7@B``!X````=`$!``P#`/__`0``#(`.
-M`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0```P,```@"```"`P``
-M"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(`P``!0,```@$```"
-M````"`0```XH``"(``(``,]S*!"Y":E;`QGT(+KLUD8]61CX"&4"X-^'.:C#
-MP&^I7X2*T76W&5?#%DF`0D#*5_$'G.[>.O/3JP!UN@FYATIWIP)+=/&PA&^5
-MKA+[=WJZ7>QSMU&$V@"Q(*J-2LM\[BV)O;\\/A6:E7=W["BC("G\Y\L9L#C:
-M[E#!;=?4\H!%*0``)%D&C!0/1?]C.-0#SDOF?NB+*)_PJM"8RBIS[O5[%!M_
-M*0``'```0`0A(,(*F%57([9G,ONBWC?/3?E/@````!P``$`%$HOUYV'DA,S;
-M5]KF!9,NO@I_8+-W$[=&<#H)`)@!``"8`0```@```$4``92[7P``0!$``,"H
-M`0'`J`$"`?0!]`&`!V7AO1S+E#A48```````````(2`B"`````````%X(@``
-M>````'0!`0`,`P#__P$```R`#@"``P``#`$```R`#@$``P``#`$```R`#@#`
-M`P``"`$```,#```(`@```@,```@"```!`P``"`(```0#```(`P```@,```@#
-M```!`P``"`,```4#```(!````@````@$```.*```B``"``#/<R@0N0FI6P,9
-M]""Z[-9&/5D8^`AE`N#?ASFHP\!OJ5^$BM%UMQE7PQ9)@$)`RE?Q!YSNWCKS
-MTZL`=;H)N8=*=Z<"2W3QL(1OE:X2^W=ZNEWL<[=1A-H`L2"JC4K+?.XMB;V_
-M/#X5FI5W=^PHHR`I_.?+&;`XVNY0P6W7U/*`12D``"19!HP4#T7_8SC4`\Y+
-MYG[HBRB?\*K0F,HJ<^[U>Q0;?RD``!P``$`$(2#""IA55R.V9S+[HMXWSTWY
-M3X`````<``!`!1*+]>=AY(3,VU?:Y@63+KX*?V"S>!.W1OM&!P"8`0``F`$`
-M``(```!%``&4NV,``$`1``#`J`$!P*@!`@'T`?0!@`=E0?.A9'1+8B<`````
-M`````"$@(@@````````!>"(``'@```!T`0$`#`,`@``!```,@`X`@`,```P!
-M```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,`
-M``@"```$`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```
-M#B@``(@``@``\C`5K+.[4^;2R[]:V`(]S"ZRMO0_2HA'>9@^P9)W$BK\VEL@
-M_-BSZ..;@5<B"R!D]+M*=0QUBL8"FC_>M/19V+,&R0T`(5'CD>VF;F4$R`L\
-M^T7^`#+'1BH\TR1&00T;!]4XW:&Q^X09$)^_J61;?ZD^%>,`Z[2I602A3')Y
-MDL$I```D?%B)`G3UG*!J"[,6-&$>]Z5M7@R=7_7AOM1::^$V4SDI```<``!`
-M!'O]1C8*<[?;+J$,P_)Q41E]9;@^````'```0`62M8)NE>AN8Q2N'"7B9Z;*
-MYW/]S7@3MT;*<@H`F`$``)@!```"````10`!E+MD``!`$0``P*@!`<"H`0(!
-M]`'T`8`'94'SH61T2V(G```````````A("((`````````7@B``!X````=`$!
-M``P#`(```0``#(`.`(`#```,`0``#(`.`0`#```,`0``#(`.`,`#```(`0``
-M`P,```@"```"`P``"`(```$#```(`@``!`,```@#```"`P``"`,```$#```(
-M`P``!0,```@$```"````"`0```XH``"(``(``/(P%:RSNU/FTLN_6M@"/<PN
-MLK;T/TJ(1WF8/L&2=Q(J_-I;(/S8L^CCFX%7(@L@9/2[2G4,=8K&`IH_WK3T
-M6=BS!LD-`"%1XY'MIFYE!,@+//M%_@`RQT8J/-,D1D$-&P?5.-VAL?N$&1"?
-MOZED6W^I/A7C`.NTJ5D$H4QR>9+!*0``)'Q8B0)T]9R@:@NS%C1A'O>E;5X,
-MG5_UX;[46FOA-E,Y*0``'```0`1[_48V"G.WVRZA#,/R<5$9?66X/@```!P`
-M`$`%DK6";I7H;F,4KAPEXF>FRN=S_<UY$[=&&'(!`)@!``"8`0```@```$4`
-M`92[:@``0!$``,"H`0'`J`$"`?0!]`&`!V5!\Z%D=$MB)P``````````(2`B
-M"`````````%X(@``>````'0!`0`,`P"```$```R`#@"``P``#`$```R`#@$`
-M`P``#`$```R`#@#``P``"`$```,#```(`@```@,```@"```!`P``"`(```0#
-M```(`P```@,```@#```!`P``"`,```4#```(!````@````@$```.*```B``"
-M``#R,!6LL[M3YM++OUK8`CW,+K*V]#]*B$=YF#[!DG<2*OS:6R#\V+/HXYN!
-M5R(+(&3TNTIU#'6*Q@*:/]ZT]%G8LP;)#0`A4>.1[:9N903("SS[1?X`,L=&
-M*CS3)$9!#1L'U3C=H;'[A!D0G[^I9%M_J3X5XP#KM*E9!*%,<GF2P2D``"1\
-M6(D"=/6<H&H+LQ8T81[WI6U>#)U?]>&^U%IKX393.2D``!P``$`$>_U&-@IS
-MM]LNH0S#\G%1&7UEN#X````<``!`!9*U@FZ5Z&YC%*X<)>)GILKG<_W->1.W
-M1M[!#@"8`0``F`$```(```!%``&4NW8``$`1``#`J`$!P*@!`@'T`?0!@`=E
-MK&*8C?+@39P``````````"$@(@@````````!>"(``'@```!T`0$`#`,```P`
-M```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#`P``"`(`
-M``(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#```%`P``
-M"`0```(````(!```#B@``(@``@``%&`04LR()6'67;P%5`AL1!&LT_D-A[&^
-M1;X^ZH7_MA>(\/-KCOWB@P^F-1\DTM(EG%P>-Y'O1"XZSI"S1N-*E/,@AG+&
-MW8FRU76",1\QKF\+Z9/IFE-AQ0`A,;DB.Z(!,DNMPS-ECU$HD]9%IU2]:;(7
-M&%9X\O'7?7<3=JU@<(HI```D]A'(:M'YH&8@_Z4;-5[FQ'G\:W?S])`8F>"B
-MUMST!(DI```<``!`!)'<BQ`QRGVL5%V7;^+EOC,'!.M'````'```0`4]D#Y(
-M63(UW+LD??T0R[''9*T"C7D3MT;$T`X`7````%P````"````10``6+MW``!`
-M$0``P*@!`<"H`0(!]`'T`$0&*:QBF(WRX$V<```````````I("(@````````
-M`#P````@``!`!@````QNT=?'Z6OM;>AQ>KD-&2S]X0]!>WD3MT8.X`X`N`$`
-M`+@!```"````10`!M+MX``!`$0``P*@!`<"H`0(!]`'T`:`'A:QBF(WRX$V<
-M```````````I("((`````````9@A```@``!`!@````QNT=?'Z6OM;>AQ>KD-
-M&2S]X0]!>R(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!``,`
-M``P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$`P``
-M"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@``@``
-M%&`04LR()6'67;P%5`AL1!&LT_D-A[&^1;X^ZH7_MA>(\/-KCOWB@P^F-1\D
-MTM(EG%P>-Y'O1"XZSI"S1N-*E/,@AG+&W8FRU76",1\QKF\+Z9/IFE-AQ0`A
-M,;DB.Z(!,DNMPS-ECU$HD]9%IU2]:;(7&%9X\O'7?7<3=JU@<(HI```D]A'(
-M:M'YH&8@_Z4;-5[FQ'G\:W?S])`8F>"BUMST!(DI```<``!`!)'<BQ`QRGVL
-M5%V7;^+EOC,'!.M'````'```0`4]D#Y(63(UW+LD??T0R[''9*T"C7D3MT:Y
-M!0\`4`$``%`!```"````10`!3+M[``!`$0``P*@!`<"H`0(!]`'T`3@'':QB
-MF(WRX$V<81:2:X+)P[<A("(@`````````3`B```P````+`$!``0#```,`0``
-M#(`.`(`#```(`@```@,```@#```"````"`0```(H``"(``(``+F7CX\;[I&*
-M^'UH+N`J[/VG:6G(Y'B"MA?IP5A&!I:FPO&HO^1B-AF#AG17#U>2ZI7LAA#I
-MUG$.35W-"$#^E?#D;0<;NR"0\H<WK^I]64JS2H$.4"O5W$<&.C*:Q`(<X[F(
-M0KSQ/!@+PFG)\,K5*]3(@WGTH!"J9C+4F5-K!%<T*0``)&P-&;TLD/J^>(!Z
-M=8P%9]G<O8(@97?OF:G"C;="J.7?*0``'```0`3W,:'N.C-<Z8$8VC&L=85A
-M-+]T'0```!P``$`%:!T^>'H@/5>B3E5?Z",^_U4\D_]Y$[=&!S,/``P!```,
-M`0```@```$4``0B[?```0!$``,"H`0'`J`$"`?0!]`#T!]FL8IB-\N!-G&$6
-MDFN"R<.W+B`C"`````$```#L(P``T''3>4T,4H%%(I+X1>)5@._ACPF,_Z-1
-MKIW0_>'S4'K^X74U\TMO58>F6?`)9Z&HKC)4"?B,N&`(25[.&Z5##!UWG\@=
-M_8I,OM1\K40!B%$U%(8NEB,:AR(+]-W)9R8K8,AEKTV=VK1NG;7^8V5`'GAY
-MZXRRO54V\W8<^J]`1C;IKR-Z!V%8`UGV%M9(>+QCU;^6*8=E>US`>0L!)T`>
-M!0]41&+N:E6*S$!(P?G980W/-+7&3\@C:7/?7KY>)X9"S+@/'9O-H'$=V!K2
-!'P``
-`
-end
diff --git a/contrib/tcpdump/tests/ikev2four.out b/contrib/tcpdump/tests/ikev2four.out
deleted file mode 100644
index db2e8ef09fd8..000000000000
--- a/contrib/tcpdump/tests/ikev2four.out
+++ /dev/null
@@ -1,107 +0,0 @@
-IP (tos 0x0, ttl 64, id 19908, offset 0, flags [none], proto UDP (17), length 404)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000000: parent_sa ikev2_init[I]:
- (sa: len=116
- (p: #1 protoid=isakmp transform=12 len=116
- (t: #1 type=encr id=aes (type=keylen value=0080))
- (t: #2 type=encr id=aes (type=keylen value=0100))
- (t: #3 type=encr id=aes (type=keylen value=00c0))
- (t: #4 type=encr id=3des )
- (t: #5 type=prf id=hmac-sha )
- (t: #6 type=prf id=hmac-md5 )
- (t: #7 type=prf id=aes128_xcbc )
- (t: #8 type=integ id=hmac-sha )
- (t: #9 type=integ id=hmac-md5 )
- (t: #10 type=integ id=aes-xcbc )
- (t: #11 type=dh id=modp1024 )
- (t: #12 type=dh id=modp2048 )))
- (v2ke: len=128 group=modp1024)
- (nonce: len=32 data=(6128ebd023a864e94a7f...ba041b5de59955900d818ac54e18b236739d9e8b))
- (n: prot_id=#0 type=16388(nat_detection_source_ip))
- (n: prot_id=#0 type=16389(nat_detection_destination_ip))
-IP (tos 0x0, ttl 64, id 19909, offset 0, flags [none], proto UDP (17), length 88)
- 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000000: parent_sa ikev2_init[R]:
- (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e123f2b0c71aefcf0cb3b798782c6))
-IP (tos 0x0, ttl 64, id 19910, offset 0, flags [none], proto UDP (17), length 436)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000000: parent_sa ikev2_init[I]:
- (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e...ba041b5de59955900d818ac54e18b236739d9e8b))
- (sa: len=116
- (p: #1 protoid=isakmp transform=12 len=116
- (t: #1 type=encr id=aes (type=keylen value=0080))
- (t: #2 type=encr id=aes (type=keylen value=0100))
- (t: #3 type=encr id=aes (type=keylen value=00c0))
- (t: #4 type=encr id=3des )
- (t: #5 type=prf id=hmac-sha )
- (t: #6 type=prf id=hmac-md5 )
- (t: #7 type=prf id=aes128_xcbc )
- (t: #8 type=integ id=hmac-sha )
- (t: #9 type=integ id=hmac-md5 )
- (t: #10 type=integ id=aes-xcbc )
- (t: #11 type=dh id=modp1024 )
- (t: #12 type=dh id=modp2048 )))
- (v2ke: len=128 group=modp1024)
- (nonce: len=32 data=(6128ebd023a864e94a7f...ba041b5de59955900d818ac54e18b236739d9e8b))
- (n: prot_id=#0 type=16388(nat_detection_source_ip))
- (n: prot_id=#0 type=16389(nat_detection_destination_ip))
-IP (tos 0x0, ttl 64, id 19911, offset 0, flags [none], proto UDP (17), length 332)
- 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000000: parent_sa ikev2_init[R]:
- (sa: len=44
- (p: #1 protoid=isakmp transform=4 len=44
- (t: #1 type=encr id=aes (type=keylen value=0080))
- (t: #2 type=prf id=hmac-sha )
- (t: #3 type=integ id=hmac-sha )
- (t: #4 type=dh id=modp1024 )))
- (v2ke: len=128 group=modp1024)
- (nonce: len=32 data=(b31c379f272ce2984bd1...905954a783be2c37e2ccc4fdd270a532dbe6f428))
- (n: prot_id=#0 type=16388(nat_detection_source_ip))
- (n: prot_id=#0 type=16389(nat_detection_destination_ip))
-IP (tos 0x0, ttl 64, id 19912, offset 0, flags [none], proto UDP (17), length 264)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000001: child_sa ikev2_auth[I]:
- (v2e: len=204)
-IP (tos 0x0, ttl 64, id 19913, offset 0, flags [none], proto UDP (17), length 184)
- 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000001: child_sa ikev2_auth[R]:
- (v2e: len=124)
-IP (tos 0x0, ttl 64, id 19914, offset 0, flags [none], proto UDP (17), length 280)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000002: child_sa child_sa[I]:
- (v2e: len=220)
-IP (tos 0x0, ttl 64, id 19915, offset 0, flags [none], proto UDP (17), length 248)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000003: child_sa child_sa[I]:
- (v2e: len=188)
-IP (tos 0x0, ttl 64, id 19916, offset 0, flags [none], proto UDP (17), length 104)
- 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000002: child_sa child_sa[R]:
- (v2e: len=44)
-IP (tos 0x0, ttl 64, id 19917, offset 0, flags [none], proto UDP (17), length 104)
- 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000003: child_sa child_sa[R]:
- (v2e: len=44)
-IP (tos 0x0, ttl 64, id 19918, offset 0, flags [none], proto UDP (17), length 312)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000004: child_sa child_sa[I]:
- (v2e: len=252)
-IP (tos 0x0, ttl 64, id 19919, offset 0, flags [none], proto UDP (17), length 280)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000005: child_sa child_sa[I]:
- (v2e: len=220)
-IP (tos 0x0, ttl 64, id 19920, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000004: child_sa child_sa[R]:
- (v2e: len=172)
-IP (tos 0x0, ttl 64, id 19921, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000005: child_sa child_sa[R]:
- (v2e: len=172)
-IP (tos 0x0, ttl 64, id 19922, offset 0, flags [none], proto UDP (17), length 312)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000006: child_sa child_sa[I]:
- (v2e: len=252)
-IP (tos 0x0, ttl 64, id 19923, offset 0, flags [none], proto UDP (17), length 280)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000007: child_sa child_sa[I]:
- (v2e: len=220)
-IP (tos 0x0, ttl 64, id 19924, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000006: child_sa child_sa[R]:
- (v2e: len=172)
-IP (tos 0x0, ttl 64, id 19925, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000007: child_sa child_sa[R]:
- (v2e: len=172)
-IP (tos 0x0, ttl 64, id 19926, offset 0, flags [none], proto UDP (17), length 392)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000008: child_sa child_sa[I]:
- (v2e: len=332)
-IP (tos 0x0, ttl 64, id 19927, offset 0, flags [none], proto UDP (17), length 344)
- 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000008: child_sa child_sa[R]:
- (v2e: len=284)
-IP (tos 0x0, ttl 64, id 19928, offset 0, flags [none], proto UDP (17), length 120)
- 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000000: parent_sa inf2[I]:
- (v2e: len=60)
diff --git a/contrib/tcpdump/tests/ikev2four.puu b/contrib/tcpdump/tests/ikev2four.puu
deleted file mode 100644
index b9c607a4ec19..000000000000
--- a/contrib/tcpdump/tests/ikev2four.puu
+++ /dev/null
@@ -1,134 +0,0 @@
-begin 644 ikev2four.pcap
-MU,.RH0(`!````````````-P%````````1!*W1JWG!0"8`0``F`$```(```!%
-M``&43<0``$`1J$'`J`$"P*@!`0'T`?0!@`=EJ(AUJ!F)DJ8``````````"$@
-M(@@````````!>"(``'@```!T`0$`#`,```P!```,@`X`@`,```P!```,@`X!
-M``,```P!```,@`X`P`,```@!```#`P``"`(```(#```(`@```0,```@"```$
-M`P``"`,```(#```(`P```0,```@#```%`P``"`0```(````(!```#B@``(@`
-M`@``M41;U@SLYOW-/):E++M[M":HQZ#U:IPXT;'$\,.FZ.?;I<<SFV[0+G5Q
-M&=^UMI,\Z3M@28?[O'<B&RH,?-TR>'[_$%<K[U1L-A1B^=HTA'EII"Y1QU69
-M:^K$+F^ZEAIUW@_!LC\)DX");NB2`A(M[:P;U4JH24K#UT"^32I,\YTI```D
-M82CKT".H9.E*?_MTOWS.+]0V<R*XL'/Y0B@KU2Z_X^8I```<``!`!$0O_EKJ
-M#.Y-NLQUCH`2,[W`F@J_````'```0`6Z!!M=Y9E5D`V!BL5.&+(V<YV>BT02
-MMT9`]@4`7````%P````"````10``6$W%``!`$:E\P*@!`<"H`0(!]`'T`$0&
-M*:B(=:@9B9*F```````````I("(@`````````#P````@``!`!@````'"(AY0
-MP6X2/RL,<:[\\,L[>8>"QD02MT8;!08`N`$``+@!```"````10`!M$W&``!`
-M$:@?P*@!`L"H`0$!]`'T`:`'A:B(=:@9B9*F```````````I("((````````
-M`9@A```@``!`!@````'"(AY0P6X2/RL,<:[\\,L[>8>"QB(``'@```!T`0$`
-M#`,```P!```,@`X`@`,```P!```,@`X!``,```P!```,@`X`P`,```@!```#
-M`P``"`(```(#```(`@```0,```@"```$`P``"`,```(#```(`P```0,```@#
-M```%`P``"`0```(````(!```#B@``(@``@``M41;U@SLYOW-/):E++M[M":H
-MQZ#U:IPXT;'$\,.FZ.?;I<<SFV[0+G5Q&=^UMI,\Z3M@28?[O'<B&RH,?-TR
-M>'[_$%<K[U1L-A1B^=HTA'EII"Y1QU69:^K$+F^ZEAIUW@_!LC\)DX");NB2
-M`A(M[:P;U4JH24K#UT"^32I,\YTI```D82CKT".H9.E*?_MTOWS.+]0V<R*X
-ML'/Y0B@KU2Z_X^8I```<``!`!$0O_EKJ#.Y-NLQUCH`2,[W`F@J_````'```
-M0`6Z!!M=Y9E5D`V!BL5.&+(V<YV>BT02MT9-*`8`4`$``%`!```"````10`!
-M3$W'``!`$:B&P*@!`<"H`0(!]`'T`3@'':B(=:@9B9*F<;Z#6.^N=F,A("(@
-M`````````3`B```P````+`$!``0#```,`0``#(`.`(`#```(`@```@,```@#
-M```"````"`0```(H``"(``(``%I6<4TZOV3CH_0!ZMGU,C_PMW^J7QZ9&9L3
-MK((?"@Q/A4>&R@FWIVJE"+SN$?%C::%M7Z!!RBV:C?J"*,8?)(+2%UQ<&I21
-M_"(;['H?II]E;4R8NDFNG7(=[?2@+7[-_"`=QX6A/M=.3SF"=BHG(/_?PV7N
-M3C<GFO26S8;X@?T5*0``)+,<-Y\G+.*82]%\HXR'*>'MO`@:%/L/9\_X%R'?
-M[L'Y*0``'```0`3^*_M\+('M"V'W5K5_K'BG7.V*]@```!P``$`%D%E4IX.^
-M+#?BS,3]TG"E,MOF]"A$$K=&E%0&``P!```,`0```@```$4``0A-R```0!&H
-MR<"H`0+`J`$!`?0!]`#T!]FHB'6H&8F2IG&^@UCOKG9C+B`C"`````$```#L
-M(P``T/8&$UK3<^<(-OVI&V/*3&".&M6"&$B,)D?_'HJ1*5BJ=^^\,&BBKFJW
-MP]#+'F^X9-^9QB\LP$5P@(1P@52CD\+TR^^M'VA(4EU)VU8^$S1:3FXOT&;`
-M3BSBD?1Q2Z[&OS*#5L1&)'RK@UO:/HX:KEEG)(\!ZSH<`J5!M-H)LR=K0`U0
-MH&=4*F>$:,7T'E0!?`"63Q`#^,B(EJ;Q(A6E\:!@<3S(.`+*XZON&$%\##7<
-M;UB@&MN6[1P`G&CC!IKG#TL0K[=S;!$:WDV";D02MT;S:P8`O````+P````"
-M````10``N$W)``!`$:D8P*@!`<"H`0(!]`'T`*0&B:B(=:@9B9*F<;Z#6.^N
-M=F,N(",@`````0```)PD``"`:OZ5O%%'L*U^3,N10<%@I$]\;MW&LIU!2M7B
-MN()43]QL/N:8.N%`BU=DL6230X=D5-&_35%:KP/!7J_G&^:TSU&K8&,,1;SP
-MXJ+;CNYP"5I.`0_;-"K;;0/:Y=[YU)!\W\C,UO/:FW27Q8Z$J5+9@[K[E!JQ
-MWAL+N?^M.T02MT8RB@8`'`$``!P!```"````10`!&$W*``!`$:BWP*@!`L"H
-M`0$!]`'T`00'Z:B(=:@9B9*F<;Z#6.^N=F,N("0(`````@```/PA``#@4\QL
-M"T'Q3D_`5\?VHU)*W>A2'R;V?`6$,*D"VQI2[1;3(F,-+K45-RW!+9?<?"!5
-M)@?B[1D]FS.3GA"J+\-[89GPIBG&M8$U];;YX'D&S3#</*Y]5?X(V5T^9@IB
-M-S'#EJ,EK;_Q'$D/G]$"(D.1IE^WN^ABE%MDSQ^X,[G.:,@]\+G2SGO53V4(
-M9*^41>5'S?Y<JCDS1*Y2=),[?OSV%H(>I]JIQ:;H)UK6QHAP#+?TO-;[@"7I
-M.[;=7U@?KKR^RWF,AV%Z3L&P:Z*0K%_!UN3"<EP?GPX0L43[OD02MT9TE08`
-M_````/P````"````10``^$W+``!`$:C6P*@!`L"H`0$!]`'T`.0&R:B(=:@9
-MB9*F<;Z#6.^N=F,N("0(`````P```-PA``#`E@/@/R@)9'@G%]H5I0+PJ>GQ
-M?;]$A\:2//`+<$#5.;R4?'!7D.3IFX-*>N*HUY]6(.$6%>"G8HB:JX(>#0,3
-M+?N,QK-QA8)!&\V8PD*HL0IF)TVN'.!5^S"DT^9,EIOFX(MB:5CT1&QN2@R-
-M>B12*5G&%2YCI77`:3#""74YO[W_",<%,T*,]K12X+BP)9PBDI)=+M8NB5:\
-M?CJ1&F%0F^&LCWM\U&-A=N4D]-#Q=7/RKMW.(E'];5V<U4U$$K=&4Z`&`&P`
-M``!L`````@```$4``&A-S```0!&I9<"H`0'`J`$"`?0!]`!4!CFHB'6H&8F2
-MIG&^@UCOKG9C+B`D(`````(```!,*0``,%O2TFRT.VSL,-[!/Z.'-9>7NO>T
-M'G@T(KQ-J_70.K)"#2=].R\HT?`#VIC11!*W1A"[!@!L````;`````(```!%
-M``!H3<T``$`1J63`J`$!P*@!`@'T`?0`5`8YJ(AUJ!F)DJ9QOH-8[ZYV8RX@
-M)"`````#````3"D``#`X]@JVD1"6>6&N!*].1Z=P)@UAXIT8^Q/."3I'EP!H
-MVLLT+WF9S#T-6?=ZE$02MT9=U`8`/`$``#P!```"````10`!.$W.``!`$:B3
-MP*@!`L"H`0$!]`'T`20'":B(=:@9B9*F<;Z#6.^N=F,N("0(````!````1PA
-M``$`Q_+QS$F7LPIA8C(BU+^U-;JC`AF<38P?W/IT6PLIM>=AC_`U:$A$324!
-M#EK4('8(D.W@9L@X)ILBV>,-3^P:`2YS&B$,)#^`.V89<-,NF8Z1GU<\5T+2
-M*(E)!2Q:1J#-?$H:*5[>*6Q/V8.;9-Q)1.$:-?0JC.&+1'(`_0/;U8IQ6#LZ
-M)\.`%(R`'.%$4O?75K'U6Q"X2EC/J5)@`?_W%7%49%`BY$5@A5%\[MF+>>(.
-MTS*7SUK8`H?G@G**C&N'TK0BY^[:''*S/KQ1I;=M[YI9_]&T^7WLB,(J3U1(
-MIQKNWR#(?:Y;1,TN>E&=<9I0GX/SLOKV]<8'VF"?1!*W1A7@!@`<`0``'`$`
-M``(```!%``$83<\``$`1J++`J`$"P*@!`0'T`?0!!`?IJ(AUJ!F)DJ9QOH-8
-M[ZYV8RX@)`@````%````_"$``.#:YA-*G/\:3CS%FGG@&:D_A&G=3B^JJM'#
-MK[HB[-$H_;'HE4QU/X]BKK:JR7,O04L&7L.5::9POFF`R!ZSY$O)/L8^FG5-
-M!%;&<#S7&#<>WN]G22@8#YT4PYY2SZ2E%S:.?;+Z"_VT'/5MEP!B,Q`_(F4/
-MW-7_JX08Y`D#Y'2>$FT&Z=PJ&,_5O]H`$^/IZU/GF[XPZM\/3=SONK#`CH<+
-M*=.;)`''6VC\1J!F>"A7RDC51^00K!7*NV<XAU(`M37+V:X>'.F8.<G"5CD'
-M#E[9=X"<4+:[E5"U"TF[1!*W1I_N!@#L````[`````(```!%``#H3=```$`1
-MJ.'`J`$!P*@!`@'T`?0`U`:YJ(AUJ!F)DJ9QOH-8[ZYV8RX@)"`````$````
-MS"$``+`?V%%K5[&K&]O-NADPI0E][,`CQ<4T27RE/Q>+G4T1(H=&14-QL,QN
-MP&?A3AY<5E*$#/VN#JA,?PIN>9_W^Q,=%78_[O1>@/)'%LWD?2-2?VC@5:?#
-MK<<B5(DI7AO#\0*;8X(H<H9=]5QL)UWJV*;V2]J*Y$]"PQCZ<>L$[M<Q+:_2
-MW89E_5TR)?.JYO<S6U@<.HG`>O$`F''>J9)_!&0RS0&P0C0@30%8.Z\Z1!*W
-M1G4.!P#L````[`````(```!%``#H3=$``$`1J.#`J`$!P*@!`@'T`?0`U`:Y
-MJ(AUJ!F)DJ9QOH-8[ZYV8RX@)"`````%````S"$``+#V_($3\TN2ZWU96@2/
-M5]1EDT0:V:89&>61GGWD14^C6(*3?3MTR#JY6?T%/&H2I1L$H.DN`6@W@F6+
-MN:\KO,>DO5X>[RV\W'<5RL;J[/O,!1I&\B8]&X.'O:U^:,;DNAOI>4X6/DA'
-M:)E:GTH8[<O&I$\*=,L!PQCGA(5BX(9O.(N-!/%/&OA]Y]YL[A^(G4,PV"DR
-MIQ)[?1J33F0<,K=N,[-W!M4"AOC+XS6Z1!*W1F@L!P`\`0``/`$```(```!%
-M``$X3=(``$`1J(_`J`$"P*@!`0'T`?0!)`<)J(AUJ!F)DJ9QOH-8[ZYV8RX@
-M)`@````&```!'"$``0`*HF-J.XE_\_J`DR@JT7).R?,FMDOYF.>!UNV[=Z-I
-MJ$1-Q'I-P)7KTZP['<,W5PO$+)/-;<MRB;R9J0ATYFS$[>>A.EC.%\9;&%Z&
-MWO@]9O3$W<0SYFNO&#3E0I9G$U>E$YL+8^OS+F4M\).+K>I:E@[A=8X`^J9#
-MOMA?>M[BXN=;KNR>#?B(5Z9\I?*B])&="R<C$]0L>1ZW7^RA175J#,KC9`[I
-MC!9HG?411#(HA&TL6X@PZFT4G!J^T1K0HHRC.9,#;I&674BH*HF!1:VIE*]5
-MEX:62`JVRVE^$^9Y:*=TC#,X>&[[=R4.5!&SI^K(3-(A,DO7N1"=FFE$$K=&
-M=S8'`!P!```<`0```@```$4``1A-TP``0!&HKL"H`0+`J`$!`?0!]`$$!^FH
-MB'6H&8F2IG&^@UCOKG9C+B`D"`````<```#\(0``X`+'`_2]V#)&K<9^'*!]
-M?GS^(;:]Z48W:`HS*!.XI,I'-!J].IPW)CB6P()2O['J;'ZD1X.Y*L4JRT^_
-M[%/P-50H'&-W90P)((\]=XL1YWM?O9@[X>EFF2,CDN\QI0']ISQA4/S"Z`NK
-M'@U)A%O5U1'WR2A>P(-2:'HJR-<-#>PT=DD<0+E\N=I`5@;\7HU&N^&9YMD:
-MZ9.W^J!8/L0I:H"!+[?@KHC3O53$HPY>VR=XR6#SX,M;$VGIF?A-Y-QRM=`&
-M@%[[?BTNU`,^$?^5>`$M(I0N-YG)."4&H"%$$K=&#D8'`.P```#L`````@``
-M`$4``.A-U```0!&HW<"H`0'`J`$"`?0!]`#4!KFHB'6H&8F2IG&^@UCOKG9C
-M+B`D(`````8```#,(0``L'XN9B/&;A8=Z60:Q^&VW]SSI?1;OM$COHCS=4T2
-M440$K\!4L\?WB>M2I#*D.#6=WC$5+!&XT@D@/6)WG*!D@CUP4VQ`^$;4/6:4
-MHO$J,7;U<`>C4&R"__KSV[<3N]NU]4"WLYKN/)<45G%00U8)7WJPQ:A#1\`F
-MB\XEG*4;2BW76GXZ?N>?.__%C2_`K#9H8BGR,)M<T,#<PJ]YAF3!3U\6:K7C
-MP?:3"2$AJD1$$K=&D&<'`.P```#L`````@```$4``.A-U0``0!&HW,"H`0'`
-MJ`$"`?0!]`#4!KFHB'6H&8F2IG&^@UCOKG9C+B`D(`````<```#,(0``L'M4
-M4#.BTUWRJY\FQ+Q$1Q.1"C+F#[!,L0J>=F-'A_G=P3C&>2^J!TOBZ\M#^#]$
-M0DEGD!CL;<?4XB1]V,N15WC9#Z59?Q[+J$<=M3X[3:CW/1ZV#"/*G[7Z69W%
-M)JEA-D1QM)Y2B/SO:B30*@A-*<2EQ='Z,%,0VZ`="<G#;(;`KRE^!=/\A5FA
-M%F:D-CNLPU3I;)032;/V#=.7ZTPKL)\X&#$6?`LS:&QKM=A$$K=&*HP'`(P!
-M``",`0```@```$4``8A-U@``0!&H.\"H`0+`J`$!`?0!]`%T!UFHB'6H&8F2
-MIG&^@UCOKG9C+B`D"`````@```%L(0`!4,2_B>QN>3:LF*0RI27"0&WI0+,X
-MR12<X9RQOR.FG?U('?>SK:&MNW"_%P=&0^WY?F.MY>T']T9T\FQ(TM:I!$1W
-M[I\@,(3";H5`68?LBY:3WJZB#.>,*D4;].@TU[S#Q4P3(K7RBZ,'\LXQH`52
-MN7N/P0.BG^XN`$#,W?H0OSJST2">9#PBC>Q74D#'O74,]-;0;)6/9KV*>8,=
-M^''V^]D^`EL6O0/>-?_-NKK&57#2-GYB39^.A6#:F\.B%"MU`(M\ZXZ#G;]"
-M7:=,2^%<G<,7->\:QO9<(W4$+<^6@M]T)9N,1#?7[HWQG^INP=6]210)S')V
-MUP[@NI%RM!=_O.?Z*!<:(VRHXN#!2>8"R<:@H_]?!4*']4M\,4L'S?;21B0=
-MTV3'09S`9'0BT(]5$;$^>URW&6%D9N'&EF]<S4TLHK$MVG!'QO8Z]=U'1!*W
-M1BZ_!P!<`0``7`$```(```!%``%83=<``$`1J&K`J`$!P*@!`@'T`?0!1`<I
-MJ(AUJ!F)DJ9QOH-8[ZYV8RX@)"`````(```!/"$``2`L&LADKBR$F;/'KXQA
-MJ,3<GAKR-7>UB-:[/][SY(/,+P%8P'!QUM^N]SW,MLW/>E=8Y!=XVLZW'/9S
-M/A<6B^_V[R`5UG#`ME=/QRZ7U"@I"99O.4J?G@_.V.)IN_8.D_#R"`](W-3@
-M+_$2FY3VBR:-W9S_0V\XYX^GF&V'YB+1\]H[/">55PZ\)]/#U1\I[P__`:Z)
-MO7'2X0JX^NY]>[2UOHJ>X.J;7C1[NO/KWZ\9<UUUYOJ@(-;J<H)L*J7++N9(
-MWFLVR[)0AT*-ZD2]-%!.!?+4_O0\2.*FD%$.DGC*C_+W=7DJ\&&US+SW>S_N
-M98A1*)EIQ5[<;587&*#'8;";#V?);F'0"G^BDI`CM:W/W3-#;V.D>!0=4;4C
-M,T02MT9GY@<`?````'P````"````10``>$W8``!`$:E)P*@!`L"H`0$!]`'T
-M`&0&21V;Z44=3Y>H9**DM=#A>VHN("4(`````````%PJ``!`:1M(@IML76W9
-M/ZCC/#C=3`#U0TW"*T)1P(=O"]M=NZ/=!B@Y!U6:)R\'['<)N=66HDS8_FFX
-&*A]EV_;R
-`
-end
diff --git a/contrib/tcpdump/tests/ikev2fourv.out b/contrib/tcpdump/tests/ikev2fourv.out
deleted file mode 100644
index 1162649b4f6c..000000000000
--- a/contrib/tcpdump/tests/ikev2fourv.out
+++ /dev/null
@@ -1,107 +0,0 @@
-IP (tos 0x0, ttl 64, id 19908, offset 0, flags [none], proto UDP (17), length 404)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 7aee!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[I]:
- (sa: len=116
- (p: #1 protoid=isakmp transform=12 len=116
- (t: #1 type=encr id=aes (type=keylen value=0080))
- (t: #2 type=encr id=aes (type=keylen value=0100))
- (t: #3 type=encr id=aes (type=keylen value=00c0))
- (t: #4 type=encr id=3des )
- (t: #5 type=prf id=hmac-sha )
- (t: #6 type=prf id=hmac-md5 )
- (t: #7 type=prf id=aes128_xcbc )
- (t: #8 type=integ id=hmac-sha )
- (t: #9 type=integ id=hmac-md5 )
- (t: #10 type=integ id=aes-xcbc )
- (t: #11 type=dh id=modp1024 )
- (t: #12 type=dh id=modp2048 )))
- (v2ke: len=128 group=modp1024 b5445bd60cece6fdcd3c96a52cbb7bb426a8c7a0f56a9c38d1b1c4f0c3a6e8e7dba5c7339b6ed02e757119dfb5b6933ce93b604987fbbc77221b2a0c7cdd32787eff10572bef546c361462f9da34847969a42e51c755996beac42e6fba961a75de0fc1b23f099380896ee89202122dedac1bd54aa8494ac3d740be4d2a4cf39d)
- (nonce: len=32 nonce=(6128ebd023a864e94a7ffb74bf7cce2fd4367322b8b073f942282bd52ebfe3e6) )
- (n: prot_id=#0 type=16388(nat_detection_source_ip))
- (n: prot_id=#0 type=16389(nat_detection_destination_ip))
-IP (tos 0x0, ttl 64, id 19909, offset 0, flags [none], proto UDP (17), length 88)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum a706!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[R]:
- (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e123f2b0c71aefcf0cb3b798782c6))
-IP (tos 0x0, ttl 64, id 19910, offset 0, flags [none], proto UDP (17), length 436)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 7d6f!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[I]:
- (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e...ba041b5de59955900d818ac54e18b236739d9e8b))
- (sa: len=116
- (p: #1 protoid=isakmp transform=12 len=116
- (t: #1 type=encr id=aes (type=keylen value=0080))
- (t: #2 type=encr id=aes (type=keylen value=0100))
- (t: #3 type=encr id=aes (type=keylen value=00c0))
- (t: #4 type=encr id=3des )
- (t: #5 type=prf id=hmac-sha )
- (t: #6 type=prf id=hmac-md5 )
- (t: #7 type=prf id=aes128_xcbc )
- (t: #8 type=integ id=hmac-sha )
- (t: #9 type=integ id=hmac-md5 )
- (t: #10 type=integ id=aes-xcbc )
- (t: #11 type=dh id=modp1024 )
- (t: #12 type=dh id=modp2048 )))
- (v2ke: len=128 group=modp1024 b5445bd60cece6fdcd3c96a52cbb7bb426a8c7a0f56a9c38d1b1c4f0c3a6e8e7dba5c7339b6ed02e757119dfb5b6933ce93b604987fbbc77221b2a0c7cdd32787eff10572bef546c361462f9da34847969a42e51c755996beac42e6fba961a75de0fc1b23f099380896ee89202122dedac1bd54aa8494ac3d740be4d2a4cf39d)
- (nonce: len=32 nonce=(6128ebd023a864e94a7ffb74bf7cce2fd4367322b8b073f942282bd52ebfe3e6) )
- (n: prot_id=#0 type=16388(nat_detection_source_ip))
- (n: prot_id=#0 type=16389(nat_detection_destination_ip))
-IP (tos 0x0, ttl 64, id 19911, offset 0, flags [none], proto UDP (17), length 332)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 337f!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->71be8358efae7663: parent_sa ikev2_init[R]:
- (sa: len=44
- (p: #1 protoid=isakmp transform=4 len=44
- (t: #1 type=encr id=aes (type=keylen value=0080))
- (t: #2 type=prf id=hmac-sha )
- (t: #3 type=integ id=hmac-sha )
- (t: #4 type=dh id=modp1024 )))
- (v2ke: len=128 group=modp1024 5a56714d3abf64e3a3f401ead9f5323ff0b77faa5f1e99199b13ac821f0a0c4f854786ca09b7a76aa508bcee11f16369a16d5fa041ca2d9a8dfa8228c61f2482d2175c5c1a9491fc221bec7a1fa69f656d4c98ba49ae9d721dedf4a02d7ecdfc201dc785a13ed74e4f3982762a2720ffdfc365ee4e37279af496cd86f881fd15)
- (nonce: len=32 nonce=(b31c379f272ce2984bd17ca38c8729e1edbc081a14fb0f67cff81721dfeec1f9) )
- (n: prot_id=#0 type=16388(nat_detection_source_ip))
- (n: prot_id=#0 type=16389(nat_detection_destination_ip))
-IP (tos 0x0, ttl 64, id 19912, offset 0, flags [none], proto UDP (17), length 264)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum fdaa!] isakmp 2.0 msgid 00000001 cookie a88875a8198992a6->71be8358efae7663: child_sa ikev2_auth[I]:
- (v2e: len=204 f606135ad373e70836fda91b63ca4c608e1ad58218488c2647ff1e8a912958aa77efbc3068a2ae6ab7c3d0cb1e6fb864df99c62f2cc045708084708154a393c2f4cbefad1f6848525d49db563e13345a4e6e2fd066c04e2ce291f4714baec6bf328356c446247cab835bda3e8e1aae5967248f01eb3a1c02a541b4da09b3276b400d50a067542a678468c5f41e54017c00964f1003f8c88896a6f12215a5f1a060713cc83802cae3abee18417c0c35dc6f58a01adb96ed1c009c68e3069ae70f4b10afb7736c111ade4d826e)
-IP (tos 0x0, ttl 64, id 19913, offset 0, flags [none], proto UDP (17), length 184)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum bf00!] isakmp 2.0 msgid 00000001 cookie a88875a8198992a6->71be8358efae7663: child_sa ikev2_auth[R]:
- (v2e: len=124 6afe95bc5147b0ad7e4ccb9141c160a44f7c6eddc6b29d414ad5e2b882544fdc6c3ee6983ae1408b5764b1649343876454d1bf4d515aaf03c15eafe71be6b4cf51ab60630c45bcf0e2a2db8eee70095a4e010fdb342adb6d03dae5def9d4907cdfc8ccd6f3da9b7497c58e84a952d983bafb941ab1de1b0bb9ffad3b)
-IP (tos 0x0, ttl 64, id 19914, offset 0, flags [none], proto UDP (17), length 280)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum c32d!] isakmp 2.0 msgid 00000002 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=220 53cc6c0b41f14e4fc057c7f6a3524adde8521f26f67c058430a902db1a52ed16d322630d2eb515372dc12d97dc7c20552607e2ed193d9b33939e10aa2fc37b6199f0a629c6b58135f5b6f9e07906cd30dc3cae7d55fe08d95d3e660a623731c396a325adbff11c490f9fd102224391a65fb7bbe862945b64cf1fb833b9ce68c83df0b9d2ce7bd54f650864af9445e547cdfe5caa393344ae5274933b7efcf616821ea7daa9c5a6e8275ad6c688700cb7f4bcd6fb8025e93bb6dd5f581faebcbecb798c87617a4ec1b06ba290ac5fc1d6e4c2725c1f9f0e10b144fbbe)
-IP (tos 0x0, ttl 64, id 19915, offset 0, flags [none], proto UDP (17), length 248)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum e6d7!] isakmp 2.0 msgid 00000003 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=188 9603e03f280964782717da15a502f0a9e9f17dbf4487c6923cf00b7040d539bc947c705790e4e99b834a7ae2a8d79f5620e11615e0a762889aab821e0d03132dfb8cc6b3718582411bcd98c242a8b10a66274dae1ce055fb30a4d3e64c969be6e08b626958f4446c6e4a0c8d7a24522959c6152e63a575c06930c2097539bfbdff08c70533428cf6b452e0b8b0259c2292925d2ed62e8956bc7e3a911a61509be1ac8f7b7cd4636176e524f4d0f17573f2aeddce2251fd6d5d9cd54d)
-IP (tos 0x0, ttl 64, id 19916, offset 0, flags [none], proto UDP (17), length 104)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum f2c0!] isakmp 2.0 msgid 00000002 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=44 5bd2d26cb43b6cec30dec13fa387359797baf7b41e783422bc4dabf5d03ab2420d277d3b2f28d1f003da98d1)
-IP (tos 0x0, ttl 64, id 19917, offset 0, flags [none], proto UDP (17), length 104)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum e03a!] isakmp 2.0 msgid 00000003 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=44 38f60ab69110967961ae04af4e47a770260d61e29d18fb13ce093a47970068dacb342f7999cc3d0d59f77a94)
-IP (tos 0x0, ttl 64, id 19918, offset 0, flags [none], proto UDP (17), length 312)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 661c!] isakmp 2.0 msgid 00000004 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=252 c7f2f1cc4997b30a61623222d4bfb535baa302199c4d8c1fdcfa745b0b29b5e7618ff0356848444d25010e5ad420760890ede066c838269b22d9e30d4fec1a012e731a210c243f803b661970d32e998e919f573c5742d2288949052c5a46a0cd7c4a1a295ede296c4fd9839b64dc4944e11a35f42a8ce18b447200fd03dbd58a71583b3a27c380148c801ce14452f7d756b1f55b10b84a58cfa9526001fff7157154645022e4456085517ceed98b79e20ed33297cf5ad80287e782728a8c6b87d2b422e7eeda1c72b33ebc51a5b76def9a59ffd1b4f97dec88c22a4f5448a71aeedf20c87dae5b44cd2e7a519d719a509f83f3b2faf6f5c607da609f)
-IP (tos 0x0, ttl 64, id 19919, offset 0, flags [none], proto UDP (17), length 280)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum d1d0!] isakmp 2.0 msgid 00000005 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=220 dae6134a9cff1a4e3cc59a79e019a93f8469dd4e2faaaad1c3afba22ecd128fdb1e8954c753f8f62aeb6aac9732f414b065ec39569a670be6980c81eb3e44bc93ec63e9a754d0456c6703cd718371edeef674928180f9d14c39e52cfa4a517368e7db2fa0bfdb41cf56d97006233103f22650fdcd5ffab8418e40903e4749e126d06e9dc2a18cfd5bfda0013e3e9eb53e79bbe30eadf0f4ddcefbab0c08e870b29d39b2401c75b68fc46a066782857ca48d547e410ac15cabb6738875200b535cbd9ae1e1ce99839c9c25639070e5ed977809c50b6bb9550b50b49bb)
-IP (tos 0x0, ttl 64, id 19920, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum db6a!] isakmp 2.0 msgid 00000004 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=172 1fd8516b57b1ab1bdbcdba1930a5097decc023c5c534497ca53f178b9d4d11228746454371b0cc6ec067e14e1e5c5652840cfdae0ea84c7f0a6e799ff7fb131d15763feef45e80f24716cde47d23527f68e055a7c3adc7225489295e1bc3f1029b63822872865df55c6c275dead8a6f64bda8ae44f42c318fa71eb04eed7312dafd2dd8665fd5d3225f3aae6f7335b581c3a89c07af1009871dea9927f046432cd01b04234204d01583baf3a)
-IP (tos 0x0, ttl 64, id 19921, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 9a59!] isakmp 2.0 msgid 00000005 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=172 f6fc8113f34b92eb7d595a048f57d46593441ad9a61919e5919e7de4454fa35882937d3b74c83ab959fd053c6a12a51b04a0e92e01683782658bb9af2bbcc7a4bd5e1eef2dbcdc7715cac6eaecfbcc051a46f2263d1b8387bdad7e68c6e4ba1be9794e163e484768995a9f4a18edcbc6a44f0a74cb01c318e7848562e0866f388b8d04f14f1af87de7de6cee1f889d4330d82932a7127b7d1a934e641c32b76e33b37706d50286f8cbe335ba)
-IP (tos 0x0, ttl 64, id 19922, offset 0, flags [none], proto UDP (17), length 312)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 5ff4!] isakmp 2.0 msgid 00000006 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=252 0aa2636a3b897ff3fa8093282ad1724ec9f326b64bf998e781d6edbb77a369a8444dc47a4dc095ebd3ac3b1dc337570bc42c93cd6dcb7289bc99a90874e66cc4ede7a13a58ce17c65b185e86def83d66f4c4ddc433e66baf1834e54296671357a5139b0b63ebf32e652df0938badea5a960ee1758e00faa643bed85f7adee2e2e75baeec9e0df88857a67ca5f2a2f4919d0b272313d42c791eb75feca145756a0ccae3640ee98c16689df511443228846d2c5b8830ea6d149c1abed11ad0a28ca33993036e91965d48a82a898145ada994af55978696480ab6cb697e13e67968a7748c3338786efb77250e5411b3a7eac84cd221324bd7b9109d9a69)
-IP (tos 0x0, ttl 64, id 19923, offset 0, flags [none], proto UDP (17), length 280)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 9890!] isakmp 2.0 msgid 00000007 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=220 02c703f4bdd83246adc67e1ca07d7e7cfe21b6bde94637680a332813b8a4ca47341abd3a9c37263896c08252bfb1ea6c7ea44783b92ac52acb4fbfec53f03554281c6377650c09208f3d778b11e77b5fbd983be1e96699232392ef31a501fda73c6150fcc2e80bab1e0d49845bd5d511f7c9285ec08352687a2ac8d70d0dec3476491c40b97cb9da405606fc5e8d46bbe199e6d91ae993b7faa0583ec4296a80812fb7e0ae88d3bd54c4a30e5edb2778c960f3e0cb5b1369e999f84de4dc72b5d006805efb7e2d2ed4033e11ff9578012d22942e3799c9382506a021)
-IP (tos 0x0, ttl 64, id 19924, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 902e!] isakmp 2.0 msgid 00000006 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=172 7e2e6623c66e161de9641ac7e1b6dfdcf3a5f45bbed123be88f3754d12514404afc054b3c7f789eb52a432a438359dde31152c11b8d209203d62779ca064823d70536c40f846d43d6694a2f12a3176f57007a3506c82fffaf3dbb713bbdbb5f540b7b39aee3c97145671504356095f7ab0c5a84347c0268bce259ca51b4a2dd75a7e3a7ee79f3bffc58d2fc0ac36686229f2309b5cd0c0dcc2af798664c14f5f166ab5e3c1f693092121aa44)
-IP (tos 0x0, ttl 64, id 19925, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 49dd!] isakmp 2.0 msgid 00000007 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=172 7b545033a2d35df2ab9f26c4bc444713910a32e60fb04cb10a9e76634787f9ddc138c6792faa074be2ebcb43f83f444249679018ec6dc7d4e2247dd8cb915778d90fa5597f1ecba8471db53e3b4da8f73d1eb60c23ca9fb5fa599dc526a961364471b49e5288fcef6a24d02a084d29c4a5c5d1fa305310dba01d09c9c36c86c0af297e05d3fc8559a11666a4363bacc354e96c941349b3f60dd397eb4c2bb09f381831167c0b33686c6bb5d8)
-IP (tos 0x0, ttl 64, id 19926, offset 0, flags [none], proto UDP (17), length 392)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 1d29!] isakmp 2.0 msgid 00000008 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=332 c4bf89ec6e7936ac98a432a525c2406de940b338c9149ce19cb1bf23a69dfd481df7b3ada1adbb70bf17074643edf97e63ade5ed07f74674f26c48d2d6a9044477ee9f203084c26e85405987ec8b9693deaea20ce78c2a451bf4e834d7bcc3c54c1322b5f28ba307f2ce31a00552b97b8fc103a29fee2e0040ccddfa10bf3ab3d1209e643c228dec575240c7bd750cf4d6d06c958f66bd8a79831df871f6fbd93e025b16bd03de35ffcdbabac65570d2367e624d9f8e8560da9bc3a2142b75008b7ceb8e839dbf425da74c4be15c9dc31735ef1ac6f65c2375042dcf9682df74259b8c4437d7ee8df19fea6ec1d5bd491409cc7276d70ee0ba9172b4177fbce7fa28171a236ca8e2e0c149e602c9c6a0a3ff5f054287f54b7c314b07cdf6d246241dd364c7419cc0647422d08f5511b13e7b5cb719616466e1c6966f5ccd4d2ca2b12dda7047c6f63af5dd47)
-IP (tos 0x0, ttl 64, id 19927, offset 0, flags [none], proto UDP (17), length 344)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 25cf!] isakmp 2.0 msgid 00000008 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=284 2c1ac864ae2c8499b3c7af8c61a8c4dc9e1af23577b588d6bb3fdef3e483cc2f0158c07071d6dfaef73dccb6cdcf7a5758e41778daceb71cf6733e17168beff6ef2015d670c0b6574fc72e97d4282909966f394a9f9e0fced8e269bbf60e93f0f2080f48dcd4e02ff1129b94f68b268ddd9cff436f38e78fa7986d87e622d1f3da3b3c2795570ebc27d3c3d51f29ef0fff01ae89bd71d2e10ab8faee7d7bb4b5be8a9ee0ea9b5e347bbaf3ebdfaf19735d75e6faa020d6ea72826c2aa5cb2ee648de6b36cbb25087428dea44bd34504e05f2d4fef43c48e2a690510e9278ca8ff2f775792af061b5ccbcf77b3fee658851289969c55edc6d561718a0c761b09b0f67c96e61d00a7fa2929023b5adcfdd33436f63a478141d51b52333)
-IP (tos 0x0, ttl 64, id 19928, offset 0, flags [none], proto UDP (17), length 120)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 6e7f!] isakmp 2.0 msgid 00000000 cookie 1d9be9451d4f97a8->64a2a4b5d0e17b6a: parent_sa inf2[I]:
- (v2e: len=60 691b48829b6c5d6dd93fa8e33c38dd4c00f5434dc22b4251c0876f0bdb5dbba3dd06283907559a272f07ec7709b9d596a24cd8fe69b82a1f65dbf6f2)
diff --git a/contrib/tcpdump/tests/ikev2fourv4.out b/contrib/tcpdump/tests/ikev2fourv4.out
deleted file mode 100644
index d001fc8b682c..000000000000
--- a/contrib/tcpdump/tests/ikev2fourv4.out
+++ /dev/null
@@ -1,107 +0,0 @@
-IP (tos 0x0, ttl 64, id 19908, offset 0, flags [none], proto UDP (17), length 404)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 7aee!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[I]:
- (sa: len=116
- (p: #1 protoid=isakmp transform=12 len=116
- (t: #1 type=encr id=aes (type=keylen value=0080))
- (t: #2 type=encr id=aes (type=keylen value=0100))
- (t: #3 type=encr id=aes (type=keylen value=00c0))
- (t: #4 type=encr id=3des )
- (t: #5 type=prf id=hmac-sha )
- (t: #6 type=prf id=hmac-md5 )
- (t: #7 type=prf id=aes128_xcbc )
- (t: #8 type=integ id=hmac-sha )
- (t: #9 type=integ id=hmac-md5 )
- (t: #10 type=integ id=aes-xcbc )
- (t: #11 type=dh id=modp1024 )
- (t: #12 type=dh id=modp2048 )))
- (v2ke: len=128 group=modp1024 b5445bd60cece6fdcd3c96a52cbb7bb426a8c7a0f56a9c38d1b1c4f0c3a6e8e7dba5c7339b6ed02e757119dfb5b6933ce93b604987fbbc77221b2a0c7cdd32787eff10572bef546c361462f9da34847969a42e51c755996beac42e6fba961a75de0fc1b23f099380896ee89202122dedac1bd54aa8494ac3d740be4d2a4cf39d)
- (nonce: len=32 nonce=(6128ebd023a864e94a7ffb74bf7cce2fd4367322b8b073f942282bd52ebfe3e6) )
- (n: prot_id=#0 type=16388(nat_detection_source_ip) data=(442ffe5aea0cee4dbacc758e801233bdc09a0abf0000001c00004005ba041b5de59955900d818ac54e18b236739d9e8b))
- (n: prot_id=#0 type=16389(nat_detection_destination_ip) data=(ba041b5de59955900d818ac54e18b236739d9e8b))
-IP (tos 0x0, ttl 64, id 19909, offset 0, flags [none], proto UDP (17), length 88)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum a706!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[R]:
- (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e123f2b0c71aefcf0cb3b798782c6))
-IP (tos 0x0, ttl 64, id 19910, offset 0, flags [none], proto UDP (17), length 436)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 7d6f!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[I]:
- (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e123f2b0c71aefcf0cb3b798782c622000078000000740101000c0300000c0100000c800e00800300000c0100000c800e01000300000c0100000c800e00c003000008010000030300000802000002030000080200000103000008020000040300000803000002030000080300000103000008030000050300000804000002000000080400000e2800008800020000b5445bd60cece6fdcd3c96a52cbb7bb426a8c7a0f56a9c38d1b1c4f0c3a6e8e7dba5c7339b6ed02e757119dfb5b6933ce93b604987fbbc77221b2a0c7cdd32787eff10572bef546c361462f9da34847969a42e51c755996beac42e6fba961a75de0fc1b23f099380896ee89202122dedac1bd54aa8494ac3d740be4d2a4cf39d290000246128ebd023a864e94a7ffb74bf7cce2fd4367322b8b073f942282bd52ebfe3e62900001c00004004442ffe5aea0cee4dbacc758e801233bdc09a0abf0000001c00004005ba041b5de59955900d818ac54e18b236739d9e8b))
- (sa: len=116
- (p: #1 protoid=isakmp transform=12 len=116
- (t: #1 type=encr id=aes (type=keylen value=0080))
- (t: #2 type=encr id=aes (type=keylen value=0100))
- (t: #3 type=encr id=aes (type=keylen value=00c0))
- (t: #4 type=encr id=3des )
- (t: #5 type=prf id=hmac-sha )
- (t: #6 type=prf id=hmac-md5 )
- (t: #7 type=prf id=aes128_xcbc )
- (t: #8 type=integ id=hmac-sha )
- (t: #9 type=integ id=hmac-md5 )
- (t: #10 type=integ id=aes-xcbc )
- (t: #11 type=dh id=modp1024 )
- (t: #12 type=dh id=modp2048 )))
- (v2ke: len=128 group=modp1024 b5445bd60cece6fdcd3c96a52cbb7bb426a8c7a0f56a9c38d1b1c4f0c3a6e8e7dba5c7339b6ed02e757119dfb5b6933ce93b604987fbbc77221b2a0c7cdd32787eff10572bef546c361462f9da34847969a42e51c755996beac42e6fba961a75de0fc1b23f099380896ee89202122dedac1bd54aa8494ac3d740be4d2a4cf39d)
- (nonce: len=32 nonce=(6128ebd023a864e94a7ffb74bf7cce2fd4367322b8b073f942282bd52ebfe3e6) )
- (n: prot_id=#0 type=16388(nat_detection_source_ip) data=(442ffe5aea0cee4dbacc758e801233bdc09a0abf0000001c00004005ba041b5de59955900d818ac54e18b236739d9e8b))
- (n: prot_id=#0 type=16389(nat_detection_destination_ip) data=(ba041b5de59955900d818ac54e18b236739d9e8b))
-IP (tos 0x0, ttl 64, id 19911, offset 0, flags [none], proto UDP (17), length 332)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 337f!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->71be8358efae7663: parent_sa ikev2_init[R]:
- (sa: len=44
- (p: #1 protoid=isakmp transform=4 len=44
- (t: #1 type=encr id=aes (type=keylen value=0080))
- (t: #2 type=prf id=hmac-sha )
- (t: #3 type=integ id=hmac-sha )
- (t: #4 type=dh id=modp1024 )))
- (v2ke: len=128 group=modp1024 5a56714d3abf64e3a3f401ead9f5323ff0b77faa5f1e99199b13ac821f0a0c4f854786ca09b7a76aa508bcee11f16369a16d5fa041ca2d9a8dfa8228c61f2482d2175c5c1a9491fc221bec7a1fa69f656d4c98ba49ae9d721dedf4a02d7ecdfc201dc785a13ed74e4f3982762a2720ffdfc365ee4e37279af496cd86f881fd15)
- (nonce: len=32 nonce=(b31c379f272ce2984bd17ca38c8729e1edbc081a14fb0f67cff81721dfeec1f9) )
- (n: prot_id=#0 type=16388(nat_detection_source_ip) data=(fe2bfb7c2c81ed0b61f756b57fac78a75ced8af60000001c00004005905954a783be2c37e2ccc4fdd270a532dbe6f428))
- (n: prot_id=#0 type=16389(nat_detection_destination_ip) data=(905954a783be2c37e2ccc4fdd270a532dbe6f428))
-IP (tos 0x0, ttl 64, id 19912, offset 0, flags [none], proto UDP (17), length 264)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum fdaa!] isakmp 2.0 msgid 00000001 cookie a88875a8198992a6->71be8358efae7663: child_sa ikev2_auth[I]:
- (v2e: len=204 f606135ad373e70836fda91b63ca4c608e1ad58218488c2647ff1e8a912958aa77efbc3068a2ae6ab7c3d0cb1e6fb864df99c62f2cc045708084708154a393c2f4cbefad1f6848525d49db563e13345a4e6e2fd066c04e2ce291f4714baec6bf328356c446247cab835bda3e8e1aae5967248f01eb3a1c02a541b4da09b3276b400d50a067542a678468c5f41e54017c00964f1003f8c88896a6f12215a5f1a060713cc83802cae3abee18417c0c35dc6f58a01adb96ed1c009c68e3069ae70f4b10afb7736c111ade4d826e)
-IP (tos 0x0, ttl 64, id 19913, offset 0, flags [none], proto UDP (17), length 184)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum bf00!] isakmp 2.0 msgid 00000001 cookie a88875a8198992a6->71be8358efae7663: child_sa ikev2_auth[R]:
- (v2e: len=124 6afe95bc5147b0ad7e4ccb9141c160a44f7c6eddc6b29d414ad5e2b882544fdc6c3ee6983ae1408b5764b1649343876454d1bf4d515aaf03c15eafe71be6b4cf51ab60630c45bcf0e2a2db8eee70095a4e010fdb342adb6d03dae5def9d4907cdfc8ccd6f3da9b7497c58e84a952d983bafb941ab1de1b0bb9ffad3b)
-IP (tos 0x0, ttl 64, id 19914, offset 0, flags [none], proto UDP (17), length 280)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum c32d!] isakmp 2.0 msgid 00000002 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=220 53cc6c0b41f14e4fc057c7f6a3524adde8521f26f67c058430a902db1a52ed16d322630d2eb515372dc12d97dc7c20552607e2ed193d9b33939e10aa2fc37b6199f0a629c6b58135f5b6f9e07906cd30dc3cae7d55fe08d95d3e660a623731c396a325adbff11c490f9fd102224391a65fb7bbe862945b64cf1fb833b9ce68c83df0b9d2ce7bd54f650864af9445e547cdfe5caa393344ae5274933b7efcf616821ea7daa9c5a6e8275ad6c688700cb7f4bcd6fb8025e93bb6dd5f581faebcbecb798c87617a4ec1b06ba290ac5fc1d6e4c2725c1f9f0e10b144fbbe)
-IP (tos 0x0, ttl 64, id 19915, offset 0, flags [none], proto UDP (17), length 248)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum e6d7!] isakmp 2.0 msgid 00000003 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=188 9603e03f280964782717da15a502f0a9e9f17dbf4487c6923cf00b7040d539bc947c705790e4e99b834a7ae2a8d79f5620e11615e0a762889aab821e0d03132dfb8cc6b3718582411bcd98c242a8b10a66274dae1ce055fb30a4d3e64c969be6e08b626958f4446c6e4a0c8d7a24522959c6152e63a575c06930c2097539bfbdff08c70533428cf6b452e0b8b0259c2292925d2ed62e8956bc7e3a911a61509be1ac8f7b7cd4636176e524f4d0f17573f2aeddce2251fd6d5d9cd54d)
-IP (tos 0x0, ttl 64, id 19916, offset 0, flags [none], proto UDP (17), length 104)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum f2c0!] isakmp 2.0 msgid 00000002 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=44 5bd2d26cb43b6cec30dec13fa387359797baf7b41e783422bc4dabf5d03ab2420d277d3b2f28d1f003da98d1)
-IP (tos 0x0, ttl 64, id 19917, offset 0, flags [none], proto UDP (17), length 104)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum e03a!] isakmp 2.0 msgid 00000003 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=44 38f60ab69110967961ae04af4e47a770260d61e29d18fb13ce093a47970068dacb342f7999cc3d0d59f77a94)
-IP (tos 0x0, ttl 64, id 19918, offset 0, flags [none], proto UDP (17), length 312)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 661c!] isakmp 2.0 msgid 00000004 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=252 c7f2f1cc4997b30a61623222d4bfb535baa302199c4d8c1fdcfa745b0b29b5e7618ff0356848444d25010e5ad420760890ede066c838269b22d9e30d4fec1a012e731a210c243f803b661970d32e998e919f573c5742d2288949052c5a46a0cd7c4a1a295ede296c4fd9839b64dc4944e11a35f42a8ce18b447200fd03dbd58a71583b3a27c380148c801ce14452f7d756b1f55b10b84a58cfa9526001fff7157154645022e4456085517ceed98b79e20ed33297cf5ad80287e782728a8c6b87d2b422e7eeda1c72b33ebc51a5b76def9a59ffd1b4f97dec88c22a4f5448a71aeedf20c87dae5b44cd2e7a519d719a509f83f3b2faf6f5c607da609f)
-IP (tos 0x0, ttl 64, id 19919, offset 0, flags [none], proto UDP (17), length 280)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum d1d0!] isakmp 2.0 msgid 00000005 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=220 dae6134a9cff1a4e3cc59a79e019a93f8469dd4e2faaaad1c3afba22ecd128fdb1e8954c753f8f62aeb6aac9732f414b065ec39569a670be6980c81eb3e44bc93ec63e9a754d0456c6703cd718371edeef674928180f9d14c39e52cfa4a517368e7db2fa0bfdb41cf56d97006233103f22650fdcd5ffab8418e40903e4749e126d06e9dc2a18cfd5bfda0013e3e9eb53e79bbe30eadf0f4ddcefbab0c08e870b29d39b2401c75b68fc46a066782857ca48d547e410ac15cabb6738875200b535cbd9ae1e1ce99839c9c25639070e5ed977809c50b6bb9550b50b49bb)
-IP (tos 0x0, ttl 64, id 19920, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum db6a!] isakmp 2.0 msgid 00000004 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=172 1fd8516b57b1ab1bdbcdba1930a5097decc023c5c534497ca53f178b9d4d11228746454371b0cc6ec067e14e1e5c5652840cfdae0ea84c7f0a6e799ff7fb131d15763feef45e80f24716cde47d23527f68e055a7c3adc7225489295e1bc3f1029b63822872865df55c6c275dead8a6f64bda8ae44f42c318fa71eb04eed7312dafd2dd8665fd5d3225f3aae6f7335b581c3a89c07af1009871dea9927f046432cd01b04234204d01583baf3a)
-IP (tos 0x0, ttl 64, id 19921, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 9a59!] isakmp 2.0 msgid 00000005 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=172 f6fc8113f34b92eb7d595a048f57d46593441ad9a61919e5919e7de4454fa35882937d3b74c83ab959fd053c6a12a51b04a0e92e01683782658bb9af2bbcc7a4bd5e1eef2dbcdc7715cac6eaecfbcc051a46f2263d1b8387bdad7e68c6e4ba1be9794e163e484768995a9f4a18edcbc6a44f0a74cb01c318e7848562e0866f388b8d04f14f1af87de7de6cee1f889d4330d82932a7127b7d1a934e641c32b76e33b37706d50286f8cbe335ba)
-IP (tos 0x0, ttl 64, id 19922, offset 0, flags [none], proto UDP (17), length 312)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 5ff4!] isakmp 2.0 msgid 00000006 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=252 0aa2636a3b897ff3fa8093282ad1724ec9f326b64bf998e781d6edbb77a369a8444dc47a4dc095ebd3ac3b1dc337570bc42c93cd6dcb7289bc99a90874e66cc4ede7a13a58ce17c65b185e86def83d66f4c4ddc433e66baf1834e54296671357a5139b0b63ebf32e652df0938badea5a960ee1758e00faa643bed85f7adee2e2e75baeec9e0df88857a67ca5f2a2f4919d0b272313d42c791eb75feca145756a0ccae3640ee98c16689df511443228846d2c5b8830ea6d149c1abed11ad0a28ca33993036e91965d48a82a898145ada994af55978696480ab6cb697e13e67968a7748c3338786efb77250e5411b3a7eac84cd221324bd7b9109d9a69)
-IP (tos 0x0, ttl 64, id 19923, offset 0, flags [none], proto UDP (17), length 280)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 9890!] isakmp 2.0 msgid 00000007 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=220 02c703f4bdd83246adc67e1ca07d7e7cfe21b6bde94637680a332813b8a4ca47341abd3a9c37263896c08252bfb1ea6c7ea44783b92ac52acb4fbfec53f03554281c6377650c09208f3d778b11e77b5fbd983be1e96699232392ef31a501fda73c6150fcc2e80bab1e0d49845bd5d511f7c9285ec08352687a2ac8d70d0dec3476491c40b97cb9da405606fc5e8d46bbe199e6d91ae993b7faa0583ec4296a80812fb7e0ae88d3bd54c4a30e5edb2778c960f3e0cb5b1369e999f84de4dc72b5d006805efb7e2d2ed4033e11ff9578012d22942e3799c9382506a021)
-IP (tos 0x0, ttl 64, id 19924, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 902e!] isakmp 2.0 msgid 00000006 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=172 7e2e6623c66e161de9641ac7e1b6dfdcf3a5f45bbed123be88f3754d12514404afc054b3c7f789eb52a432a438359dde31152c11b8d209203d62779ca064823d70536c40f846d43d6694a2f12a3176f57007a3506c82fffaf3dbb713bbdbb5f540b7b39aee3c97145671504356095f7ab0c5a84347c0268bce259ca51b4a2dd75a7e3a7ee79f3bffc58d2fc0ac36686229f2309b5cd0c0dcc2af798664c14f5f166ab5e3c1f693092121aa44)
-IP (tos 0x0, ttl 64, id 19925, offset 0, flags [none], proto UDP (17), length 232)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 49dd!] isakmp 2.0 msgid 00000007 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=172 7b545033a2d35df2ab9f26c4bc444713910a32e60fb04cb10a9e76634787f9ddc138c6792faa074be2ebcb43f83f444249679018ec6dc7d4e2247dd8cb915778d90fa5597f1ecba8471db53e3b4da8f73d1eb60c23ca9fb5fa599dc526a961364471b49e5288fcef6a24d02a084d29c4a5c5d1fa305310dba01d09c9c36c86c0af297e05d3fc8559a11666a4363bacc354e96c941349b3f60dd397eb4c2bb09f381831167c0b33686c6bb5d8)
-IP (tos 0x0, ttl 64, id 19926, offset 0, flags [none], proto UDP (17), length 392)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 1d29!] isakmp 2.0 msgid 00000008 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
- (v2e: len=332 c4bf89ec6e7936ac98a432a525c2406de940b338c9149ce19cb1bf23a69dfd481df7b3ada1adbb70bf17074643edf97e63ade5ed07f74674f26c48d2d6a9044477ee9f203084c26e85405987ec8b9693deaea20ce78c2a451bf4e834d7bcc3c54c1322b5f28ba307f2ce31a00552b97b8fc103a29fee2e0040ccddfa10bf3ab3d1209e643c228dec575240c7bd750cf4d6d06c958f66bd8a79831df871f6fbd93e025b16bd03de35ffcdbabac65570d2367e624d9f8e8560da9bc3a2142b75008b7ceb8e839dbf425da74c4be15c9dc31735ef1ac6f65c2375042dcf9682df74259b8c4437d7ee8df19fea6ec1d5bd491409cc7276d70ee0ba9172b4177fbce7fa28171a236ca8e2e0c149e602c9c6a0a3ff5f054287f54b7c314b07cdf6d246241dd364c7419cc0647422d08f5511b13e7b5cb719616466e1c6966f5ccd4d2ca2b12dda7047c6f63af5dd47)
-IP (tos 0x0, ttl 64, id 19927, offset 0, flags [none], proto UDP (17), length 344)
- 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 25cf!] isakmp 2.0 msgid 00000008 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
- (v2e: len=284 2c1ac864ae2c8499b3c7af8c61a8c4dc9e1af23577b588d6bb3fdef3e483cc2f0158c07071d6dfaef73dccb6cdcf7a5758e41778daceb71cf6733e17168beff6ef2015d670c0b6574fc72e97d4282909966f394a9f9e0fced8e269bbf60e93f0f2080f48dcd4e02ff1129b94f68b268ddd9cff436f38e78fa7986d87e622d1f3da3b3c2795570ebc27d3c3d51f29ef0fff01ae89bd71d2e10ab8faee7d7bb4b5be8a9ee0ea9b5e347bbaf3ebdfaf19735d75e6faa020d6ea72826c2aa5cb2ee648de6b36cbb25087428dea44bd34504e05f2d4fef43c48e2a690510e9278ca8ff2f775792af061b5ccbcf77b3fee658851289969c55edc6d561718a0c761b09b0f67c96e61d00a7fa2929023b5adcfdd33436f63a478141d51b52333)
-IP (tos 0x0, ttl 64, id 19928, offset 0, flags [none], proto UDP (17), length 120)
- 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 6e7f!] isakmp 2.0 msgid 00000000 cookie 1d9be9451d4f97a8->64a2a4b5d0e17b6a: parent_sa inf2[I]:
- (v2e: len=60 691b48829b6c5d6dd93fa8e33c38dd4c00f5434dc22b4251c0876f0bdb5dbba3dd06283907559a272f07ec7709b9d596a24cd8fe69b82a1f65dbf6f2)
diff --git a/contrib/tcpdump/tests/ikev2pI2-secrets.txt b/contrib/tcpdump/tests/ikev2pI2-secrets.txt
deleted file mode 100644
index efe963678f3b..000000000000
--- a/contrib/tcpdump/tests/ikev2pI2-secrets.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-ikev2 I 0x0001020304050607 0xc02e7a3031a03188 sha1:0x4ea8e662b07cdd430f6944c6723e4b82d5722418 aes128:0x3f44bf47cafd8150591deb088199fcbf
-ikev2 R 0x0001020304050607 0xc02e7a3031a03188 sha1:0x515b0bd22e6d76b34fdb760aa7bfad80b109b75d aes128:0xbedb67ec7dc3d00cccac42e70cd63bde
diff --git a/contrib/tcpdump/tests/ikev2pI2.out b/contrib/tcpdump/tests/ikev2pI2.out
deleted file mode 100644
index 7940e8cd0382..000000000000
--- a/contrib/tcpdump/tests/ikev2pI2.out
+++ /dev/null
@@ -1,41 +0,0 @@
-IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 536, bad cksum 0 (->f48e)!)
- 192.1.2.45.500 > 192.1.2.23.500: [no cksum] isakmp 2.0 msgid 00000000 cookie 0001020304050607->0000000000000000: parent_sa ikev2_init[I]:
- (sa[C]: len=240
- (p: #1 protoid=isakmp transform=4 len=40
- (t: #1 type=encr id=aes )
- (t: #2 type=integ id=hmac-sha )
- (t: #3 type=prf id=hmac-sha )
- (t: #4 type=dh id=modp1536 ))
- (p: #2 protoid=isakmp transform=4 len=40
- (t: #1 type=encr id=aes )
- (t: #2 type=integ id=hmac-sha )
- (t: #3 type=prf id=hmac-md5 )
- (t: #4 type=dh id=modp1536 ))
- (p: #3 protoid=isakmp transform=4 len=40
- (t: #1 type=encr id=3des )
- (t: #2 type=integ id=hmac-sha )
- (t: #3 type=prf id=hmac-sha )
- (t: #4 type=dh id=modp1536 ))
- (p: #4 protoid=isakmp transform=4 len=40
- (t: #1 type=encr id=3des )
- (t: #2 type=integ id=hmac-sha )
- (t: #3 type=prf id=hmac-md5 )
- (t: #4 type=dh id=modp1536 ))
- (p: #5 protoid=isakmp transform=4 len=40
- (t: #1 type=encr id=3des )
- (t: #2 type=integ id=hmac-sha )
- (t: #3 type=prf id=hmac-sha )
- (t: #4 type=dh id=modp1024 ))
- (p: #6 protoid=isakmp transform=4 len=40
- (t: #1 type=encr id=3des )
- (t: #2 type=integ id=hmac-sha )
- (t: #3 type=prf id=hmac-md5 )
- (t: #4 type=dh id=modp1024 )))
- (v2ke: len=192 group=modp1536 ffbc6a92a6b9559b05fa96a7a43507b4c1e1c0861a5871d9ba73a163113788c0debb3979e7ff0c52b4ce6050eb05369ea4300d2bff3b1b299f3b802ccb13318c2ab9e3b5627cb4b35eb939982076b57c050d7b35c3c5c7cc8c0feab7b64a7d7b6b8f6b4dabf4ac406dd20126b90a98ac766efa37a7890c4394ff9a77615b58f52d651bbfa58d2a549af8b01aa4bca3d762426663b155d4ebda9f60a6a13573e6a888135cdc673dd483029903f3a90eca23e1ec1e270331b2d050f4f758f49927)
- (nonce[C]: len=16 nonce=(b5ce8419095c6e2b6b62d3055305b3c4) )
- (v2vid: len=12 vid=OErlA\nQukSR 4f45726c415c6e51756b5352)
-IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 312, bad cksum 0 (->f56e)!)
- 192.1.2.45.500 > 192.1.2.23.500: [no cksum] isakmp 2.0 msgid 00000000 cookie 0001020304050607->c02e7a3031a03188: parent_sa ikev2_auth[I]:
- (v2e[C]: len=252 000102030405060708090a0b0c0d0e0f4bcf2da20444caca5fb591c1ab4b9b4d4f22ac7cb49e6b08d2738884fb3efd8eebc607accc1f80f890e24df65e53d61e899f1d319d89c033524d036fd4ea7e0345def93356e2865e5481a6a20a7604083de04595e1071a2e98179eefb4e6ae4708e6875ae297b4dc5b2602d971e36f66cef12303946eea897d86bbb5903115281a266f4dcb627e146972ff2f7102931df82f24a2e40df594afc11e0a85eb1c56b9eddb7e2de52fa95cf51f4b4c9b5d53237ae39f64519413d201374a987fa8d1ce460fa2d67c417462203f2948c0b9ed8b734a69a015ff63bde767f44f83c3cfe5119d72d74e695b1032b957
- (v2IDi: len=8 0200000077657374 fqdn:west)
- (v2auth: len=196 method=rsasig authdata=(000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) ))
diff --git a/contrib/tcpdump/tests/ikev2pI2.puu b/contrib/tcpdump/tests/ikev2pI2.puu
deleted file mode 100644
index 314188e0175b..000000000000
--- a/contrib/tcpdump/tests/ikev2pI2.puu
+++ /dev/null
@@ -1,24 +0,0 @@
-begin 644 ikev2pI2.pcap
-MU,.RH0(`!````````````-P%````````@%$!```````<`@``'`(```(```!%
-M``(8`````$`1``#``0(MP`$"%P'T`?0"!`````$"`P0%!@<``````````"$@
-M(@@````````!_"*``/0"```H`0$`!`,```@!```,`P``"`,```(#```(`@``
-M`@````@$```%`@``*`(!``0#```(`0``#`,```@#```"`P``"`(```$````(
-M!```!0(``"@#`0`$`P``"`$```,#```(`P```@,```@"```"````"`0```4"
-M```H!`$`!`,```@!```#`P``"`,```(#```(`@```0````@$```%`@``*`4!
-M``0#```(`0```P,```@#```"`P``"`(```(````(!````@```"@&`0`$`P``
-M"`$```,#```(`P```@,```@"```!````"`0```(H``#(``4``/^\:I*FN56;
-M!?J6IZ0U![3!X<"&&EAQV;ISH6,1-XC`WKLY>>?_#%*TSF!0ZP4VGJ0P#2O_
-M.QLIGSN`+,L3,8PJN>.U8GRTLUZY.9@@=K5\!0U[-</%Q\R,#^JWMDI]>VN/
-M:TVK]*Q`;=(!)KD*F*QV;OHWIXD,0Y3_FG=A6UCU+64;OZ6-*E2:^+`:I+RC
-MUV)"9F.Q5=3KVI]@IJ$U<^:HB!-<W&<]U(,"F0/SJ0[*(^'L'B<#,;+04/3W
-M6/29)RN``!2USH09"5QN*VMBTP53!;/$````$$]%<FQ!7&Y1=6M34@"C`@``
-M````/`$``#P!```"````10`!.`````!`$0``P`$"+<`!`A<!]`'T`20````!
-M`@,$!08'P"YZ,#&@,8@N(",(`````````1PC@`$```$"`P0%!@<("0H+#`T.
-M#TO/+:($1,K*7[61P:M+FTU/(JQ\M)YK"-)SB(3[/OV.Z\8'K,P?@/B0XDWV
-M7E/6'HF?'3&=B<`S4DT#;]3J?@-%WODS5N*&7E2!IJ(*=@0(/>!%E>$'&BZ8
-M%Y[OM.:N1PCFAUKBE[3<6R8"V7'C;V;.\2,#E&[JB7V&N[60,14H&B9O3<MB
-M?A1I<O\O<0*3'?@O)*+D#?64K\$>"H7K'%:Y[=M^+>4OJ5SU'TM,FUU3(WKC
-MGV11E!/2`3=*F'^HT<Y&#Z+6?$%T8B`_*4C`N>V+<TIIH!7_8[WG9_1/@\//
-,Y1&=<M=.:5L0,KE7
-`
-end
diff --git a/contrib/tcpdump/tests/isakmp-delete-segfault.puu b/contrib/tcpdump/tests/isakmp-delete-segfault.puu
deleted file mode 100644
index 11512b128424..000000000000
--- a/contrib/tcpdump/tests/isakmp-delete-segfault.puu
+++ /dev/null
@@ -1,20 +0,0 @@
-begin 644 isakmp-delete-segfault.pcap
-MU,.RH0(`!``````````````$```!````@"X```````"I`@``J0(``/______
-M_P$!`0$!`0@`10``I@`O0`!`$3PA?P```7\```$!]`'T`<@``!N3$,+\/7K^
-M3SF!FR'H6?T,OKXN&YH=5T,AEYH%R@(@71+C65#___\`````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-!````
-`
-end
diff --git a/contrib/tcpdump/tests/isakmp-identification-segfault.puu b/contrib/tcpdump/tests/isakmp-identification-segfault.puu
deleted file mode 100644
index 6f0ae0e8db38..000000000000
--- a/contrib/tcpdump/tests/isakmp-identification-segfault.puu
+++ /dev/null
@@ -1,11 +0,0 @@
-begin 644 isakmp-identification-segfault.pcap
-MU,.RH0(`!````````````/__````````HV%@0"_*#@`\`0``/`$```(```!%
-M``$XH&P``/\1'$9_```!?P```0'U`?0!)$KL)9EPC(1ZBP(```````````40
-M`@`````````!'````0`"````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-I````````````````````````````````````````````````````````
-`
-end
diff --git a/contrib/tcpdump/tests/isakmp-pointer-loop.puu b/contrib/tcpdump/tests/isakmp-pointer-loop.puu
deleted file mode 100644
index fc582482c1e7..000000000000
--- a/contrib/tcpdump/tests/isakmp-pointer-loop.puu
+++ /dev/null
@@ -1,6 +0,0 @@
-begin 644 isakmp-pointer-loop.pcap
-MU,.RH0(`!````````````/__```!````DR;5/[_@!0!(````2``````$6D[H
-ME``"+6_:]@@`10``.H=E0`#S$0HB@:KY?H&J^5<!]`'T`";R?@``````````
-6```````````($`$````````````*````
-`
-end
diff --git a/contrib/tcpdump/tests/isakmp1.out b/contrib/tcpdump/tests/isakmp1.out
deleted file mode 100644
index 355a8ea3a49d..000000000000
--- a/contrib/tcpdump/tests/isakmp1.out
+++ /dev/null
@@ -1 +0,0 @@
-IP 127.0.0.1.500 > 127.0.0.1.500: isakmp:
diff --git a/contrib/tcpdump/tests/isakmp2.out b/contrib/tcpdump/tests/isakmp2.out
deleted file mode 100644
index 44c28db87b15..000000000000
--- a/contrib/tcpdump/tests/isakmp2.out
+++ /dev/null
@@ -1 +0,0 @@
-IP 129.170.249.126.500 > 129.170.249.87.500: isakmp: phase 1 ? base
diff --git a/contrib/tcpdump/tests/isakmp3.out b/contrib/tcpdump/tests/isakmp3.out
deleted file mode 100644
index 86192639628f..000000000000
--- a/contrib/tcpdump/tests/isakmp3.out
+++ /dev/null
@@ -1,3 +0,0 @@
-IP (tos 0x0, ttl 255, id 41068, offset 0, flags [none], proto UDP (17), length 312)
- 127.0.0.1.501 > 127.0.0.1.500: isakmp 1.0 msgid 00000000: phase 1 I ident:
- (id: idtype=FQDN protoid=0 port=0 len=248 \0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00\0x00)
diff --git a/contrib/tcpdump/tests/isakmp4.out b/contrib/tcpdump/tests/isakmp4.out
deleted file mode 100644
index 0de3ebcc2ab8..000000000000
--- a/contrib/tcpdump/tests/isakmp4.out
+++ /dev/null
@@ -1,35 +0,0 @@
-ARP, Request who-has 192.1.2.23 tell 192.1.2.254, length 28
-ARP, Reply 192.1.2.23 is-at 10:00:00:64:64:23, length 28
-IP 192.1.2.254.500 > 192.1.2.23.500: isakmp: phase 1 I ident
-IP 192.1.2.23.500 > 192.1.2.254.500: isakmp: phase 1 R ident
-IP 192.1.2.254.500 > 192.1.2.23.500: isakmp: phase 1 I ident
-IP 192.1.2.23.500 > 192.1.2.254.500: isakmp: phase 1 R ident
-IP 192.1.2.254.4500 > 192.1.2.23.4500: NONESP-encap: isakmp: phase 1 I ident[E]
-IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 1 R ident[E]
-IP 192.1.2.254.4500 > 192.1.2.23.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
-IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
-IP 192.1.2.254.4500 > 192.1.2.23.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
-IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x1), length 132
-ARP, Request who-has 192.1.2.254 tell 192.1.2.23, length 28
-ARP, Reply 192.1.2.254 is-at 10:00:00:de:ad:ba, length 28
-IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
-IP 192.1.2.254.4500 > 192.1.2.23.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
-IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x2), length 132
-IP 192.1.2.254.4500 > 192.1.2.23.4500: isakmp-nat-keep-alive
-IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x3), length 132
-IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
-IP 192.1.2.254.4500 > 192.1.2.23.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
-IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x4), length 132
-IP 192.1.2.254.4500 > 192.1.2.23.4500: isakmp-nat-keep-alive
-IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x5), length 132
-IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x6), length 132
-ARP, Request who-has 192.1.2.23 tell 192.1.2.254, length 28
-ARP, Reply 192.1.2.23 is-at 10:00:00:64:64:23, length 28
-IP 192.1.2.254.4500 > 192.1.2.23.4500: isakmp-nat-keep-alive
-IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x7), length 132
-IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
-IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x8), length 132
-ARP, Request who-has 192.1.2.254 tell 192.1.2.23, length 28
-ARP, Reply 192.1.2.254 is-at 10:00:00:de:ad:ba, length 28
-IP 192.1.2.254.4500 > 192.1.2.23.4500: isakmp-nat-keep-alive
-IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 2/others R inf[E]
diff --git a/contrib/tcpdump/tests/isakmp4500.puu b/contrib/tcpdump/tests/isakmp4500.puu
deleted file mode 100644
index 0b55dccfde4a..000000000000
--- a/contrib/tcpdump/tests/isakmp4500.puu
+++ /dev/null
@@ -1,155 +0,0 @@
-begin 644 isakmp4500.pcap
-MU,.RH0(`!``````````````&```!```````````````J````*@```/______
-M_Q```-ZMN@@&``$(``8$``$0``#>K;K``0+^````````P`$"%P``````````
-M*@```"H````0``#>K;H0``!D9",(!@`!"``&!``"$```9&0CP`$"%Q```-ZM
-MNL`!`OX``````````$X!``!.`0``$```9&0C$```WJVZ"`!%``%```!``#\1
-MM97``0+^P`$"%P'T`?0!+)6LGHGR.(^0O!X```````````$0`@`````````!
-M)`T``)0````!`````0```(@``0`$`P``(``!``"`"P`!@`P.$(`!``6``@`!
-M@`,``X`$``4#```@`0$``(`+``&`#`X0@`$`!8`"``*``P`#@`0`!0,``"`"
-M`0``@`L``8`,#A"``0`%@`(``H`#``.`!``"````(`,!``"`"P`!@`P.$(`!
-M``6``@`!@`,``X`$``(-```03T5K4F)'6%)V;5!%#0``%*_*UQ-HH?'):X:6
-M_'=7`0`-```42A,<@0<#6$5<5RCR#I5%+PT``!1]E!FF4Q#*;RP7G9(54IU6
-M#0``%,U@1D,UWR'X?/VR_&BVI$@````41(45+1BVN\T+Z*A&E7G=S```````
-M````L@```+(````0``#>K;H0``!D9",(`$4``*0``$``0!&U,<`!`A?``0+^
-M`?0!]`"08%.>B?(XCY"\'@IT-7SCT:2_`1`"``````````"(#0``-`````$`
-M```!````*``!``$````@``$``(`+``&`#`X0@`$`!8`"``&``P`#@`0`!0T`
-M`!!/16M28D=84G9M4$4-```4K\K7$VBA\<EKAI;\=U<!`````!1*$QR!!P-8
-M15Q7*/(.E44O``````````!&`0``1@$``!```&1D(Q```-ZMN@@`10`!.```
-M0``_$;6=P`$"_L`!`A<!]`'T`206L9Z)\CB/D+P>"G0U?./1I+\$$`(`````
-M`````1P*``#$M]N'X4E&AEMT*7(UA)]?Z:M`RW>TPRPR/2V-U^-O'ST7,9K7
-MCQQFQ`#^2/PP0G^@]QHR=9!Y7?/EL'O(\L(I'#51V6N1?)1J+6P-A6&T0Y@"
-M-KJ[,_WPC+W%H'KSV>J_(W#3`3A4&A^4Q*T^3Q*2'^M#9[XHW-IVWO.#J=M?
-MDHTX?/DS#]CDJG;?BC_E:$W:3AD]N9+!U'[+6UU.`,)4^&ASH2SO\CU.=2!#
-MH'<T@54L9-$X/5ZQ*&_;9BF5E3Q7%```%&;6]C)I>UY(FI*395>I?Z@4```4
-M;OX2\$KY#?O/L5UQN$&[G@```!1$]1?@/[.!^`^$+14XS/^L``````````!&
-M`0``1@$``!```-ZMNA```&1D(P@`10`!.```0`!`$;2=P`$"%\`!`OX!]`'T
-M`20!UYZ)\CB/D+P>"G0U?./1I+\$$`(``````````1P*``#$YYI?^#V[%WO*
-M+,?[XKU\"YVFZ0UCMOA'6Y:C93#4^M&/)'3",1Q/"&7*"D0_<1SX#@"KRZDV
-M\_XCB4O9XNS0"_O8-'[C&AG5O;G^G_N*#?4,"OA'?R><"WN68Q(H<1EONM3!
-MS3=]U]MRZ(4UBM]&:I\KW&3X;LQ%M[B0:,/"]DTM1^J8+8CESE'6JEFCE,,$
-M?$W5P,^5=1K1AT@YX0J-9%/E]`MY&<%C?*Y*K\'5X#2B5OD6+FTGJ)^V299#
-M*>H6%```%&Q^7ZRJ16$T%<6UJE<?IS$4```4.9,$U0^]3*/;'AEZ]\$>;P``
-M`!1N_A+P2OD-^\^Q77&X0;N>``````````!R`0``<@$``!```&1D(Q```-ZM
-MN@@`10`!9```0``_$;5QP`$"_L`!`A<1E!&4`5!RH0````">B?(XCY"\'@IT
-M-7SCT:2_!1`"`0````````%$H"1@W`ZTW:4&'Z=!K*`IRTNLK:3J/^$DD/B4
-M>Q,F?M5`3=(?!HGW$/M)`\W8Z/'FXK6$!(9!7BL9!@QV=(^E7><\)R8EVE3F
-M6`.O^:2F!(>LD7%71N]`LA?B!/!0\*H2"YOJ0]_W9#9DJYZ).M/.;+8A?L[O
-M`J-'HV_0*'&&^P\8:$'I^"13SN]VT%5\8O8;P2VV=`+&9+4]'MH+/&:'PR!H
-M4O#,GI+1=+*MRN"5.-8D&$16)<O!`SBZM\AKC&P_X<;S]@/)1)Y\.&WOY7\H
-M1V\P7.NL<92?18X,F+:L`^^F#O1Y505Q0H85DLC9DG)B/V<^\\%WS5TO;E$:
-M"1$F`DG*=R<?ZQYTN1P^4Q#1].60GK<.AK=_XOM^<JSB!P9\:C2X3QI`L]D`
-M`````````%H!``!:`0``$```WJVZ$```9&0C"`!%``%,``!``$`1M(G``0(7
-MP`$"_A&4$90!.,?$`````)Z)\CB/D+P>"G0U?./1I+\%$`(!`````````2S"
-M8Z5]+<^-M8Q9P&X;^%JN2^*NYC1"AZ%4J-PIMZM611W<D%]6ET9DUBF=TH.0
-MQQSMHS[FF;=E?$HJP1Z27H0;DRN`@QD+=-Y#&>A:Z$*6IBWC.3.9037)<B;;
-M0U&M+H9[&=K##GX++CXGX(L;7E^)B\Q+'_'N5/5,"[?P96K'-(4;25\#D%M/
-MVIN6C#7'Q:0PBF3\=1($ODAZ(&:$((=V1,STM/MIB(]C;^7T=R$*%X?+MTX^
-MB*X%6DJ09BC(XU@(,4IU1Q]MV_;%S@8Y96MB,W3/!#M5BS)JGA5$(J4H5W@8
-M<*B:G<;Q^>L`[ADSH`K&0*^[6)>")$E3;"4;U="I",2*`1TP_=5+%B"II3>(
-M'@``````````V@$``-H!```0``!D9",0``#>K;H(`$4``<P``$``/Q&U"<`!
-M`O[``0(7$901E`&XW3@`````GHGR.(^0O!X*=#5\X]&DOP@0(`&+?HE'```!
-MK''I#[H$<_"<YEGG2)8)!97PF%0-_\8^X(V1[(=%+UAMJ9A(1/!,[6+WM32C
-M)*0IG:EM/C)SF$P$=$P"Y_R.@/MCQOS;\U>4YQ5SAO`10)\84&I?],R2.?5M
-MZ/Y^Y"#*%+0.<9KX(/Z$'&M,-)/2I7U^,!G,*G!E_O.D;7F_;D^V#&&*(R.+
-MH;YSI'1@I8GV%+\'*6,1(8`8D(VUP[,(R?PQ7#,5WQY3[HT+IFF"3?.+;(*M
-M_?C;JQ#]O'9522*ZO7>'TEDYLLA`*L$8(XJ$!T>_HYS?G=WR11E($-021FMS
-MB[NXAJ^CQVGO87[B@^I6THHW-%Z8%PTH&BCO^.[@K_NS8RVTE7CE&MA]6C@>
-MEDIDM&T^.41?F(\X$Z-5[547$HC='*\>8``"[9.IHT)+[,^LZ?_6(6I\L32#
-MF-JM7U".L4?X/8=G*KFA<>THJ-622W,;J`IW2^MLBI?_O<<EC)!V1^7\U,YK
-M7'E&R_].`C#$#;X]E]1SX@092]ZE(@C-2M!ZAW.#%L^J[^'13BY&SG@`````
-M`````(H!``"*`0``$```WJVZ$```9&0C"`!%``%\``!``$`1M%G``0(7P`$"
-M_A&4$90!:,KN`````)Z)\CB/D+P>"G0U?./1I+\($"`!BWZ)1P```5RM:&N4
-MQ1;W19+;77%JE,,H'8&F6ITJM=R5O>KL1%[]#E/LJ#&./WFJ`#,3C!H=I_'*
-M34/)_E+)(`!A&W00*T\"9O9JX0N">$#'(ZL<$'\P=GHB.0:\AXT/!^^*<P2!
-M<!A\>%U.'5#'2IX<Q;9+I6GRVRW_+T,S>:7/2KZ$%^3W;%R4[&2T>'?2(@FF
-M#T/=+2O[?Q4.(\@Q;]3V=L5Q2XFG)^E)0J:1AX`J4%E3_Y]^6='!R-ENY%9#
-M3!XD:5K?/V&.!&X#>I_$96Y;P_!5']<G(@<:I94]["%1#F3MY*U1V%WQVL1_
-MRT*Z$\KEVW>070(D3N#$47!AZ^VCW-?I?JT2AL5YOWBO5[D!"OV)46(FK)9"
-M$C40GNJ7*A,SE6%6A(4>KPE(-$)=L6=2VQLO>Y12N8QBH3V%(90.\5YL`R,O
-M1@``````````8@```&(````0``!D9",0``#>K;H(`$4``%0``$``/Q&V@<`!
-M`O[``0(7$901E`!`KQ<`````GHGR.(^0O!X*=#5\X]&DOP@0(`&+?HE'````
-M-"4[,88.:.R$%:1S6K/X<EH]YZH).22D`@``````````K@```*X````0``!D
-M9",0``#>K;H(`$4``*"JM```/Q%+@<`!`O[``0(7$901E`",``#TW`KE````
-M`?SD"<11-X_=FBX7J&]'/C[B>;BA23X"^A;(BA/H;8_\0'U,E@M&;+=R&*LY
-MAF.NT6<PXR31!Z\MX@W4>/*J.SL[UR2)+H^A6#5<38R;!FY\:AV_6ZV)FQ2!
-M1T\L:`GPK6U?_?TVHSK[6(WSF?Q"XF5K/0U,A.Y+D\RP]G(``````````"H`
-M```J````$```WJVZ$```9&0C"`8``0@`!@0``1```&1D(\`!`A<```````#`
-M`0+^```````````J````*@```!```&1D(Q```-ZMN@@&``$(``8$``(0``#>
-MK;K``0+^$```9&0CP`$"%P``````````B@$``(H!```0``#>K;H0``!D9",(
-M`$4``7P``$``0!&T6<`!`A?``0+^$901E`%HRNX`````GHGR.(^0O!X*=#5\
-MX]&DOP@0(`&+?HE'```!7*UH:Y3%%O=%DMM=<6J4PR@=@:9:G2JUW)6]ZNQ$
-M7OT.4^RH,8X_>:H`,Q.,&AVG\<I-0\G^4LD@`&$;=!`K3P)F]FKA"X)X0,<C
-MJQP0?S!V>B(Y!KR'C0\'[XIS!(%P&'QX74X=4,=*GAS%MDNE:?+;+?\O0S-Y
-MI<]*OH07Y/=L7)3L9+1X=](B":8/0]TM*_M_%0XCR#%OU/9VQ7%+B:<GZ4E"
-MII&'@"I065/_GWY9T<'(V6[D5D-,'B1I6M\_88X$;@-ZG\1E;EO#\%4?UR<B
-M!QJEE3WL(5$.9.WDK5'87?':Q'_+0KH3RN7;=Y!=`B1.X,11<&'K[:/<U^E^
-MK1*&Q7F_>*]7N0$*_8E18B:LED(2-1">ZI<J$S.585:$A1ZO"4@T0EVQ9U+;
-M&R][E%*YC&*A/84AE`[Q7FP#(R]&``````````!B````8@```!```&1D(Q``
-M`-ZMN@@`10``5```0``_$;:!P`$"_L`!`A<1E!&4`$"O%P````">B?(XCY"\
-M'@IT-7SCT:2_"!`@`8M^B4<````T)3LQA@YH[(05I'-:L_AR6CWGJ@DY)*0"
-M``````````"N````K@```!```&1D(Q```-ZMN@@`10``H*JU```_$4N`P`$"
-M_L`!`A<1E!&4`(P``/3<"N4````";5_]_3:C.OM8C?.9_$+B9;KU/R+D"U^-
-MLGB)>"40ZCMW:+^A4%UI1Y)\.O4B]`44T(2XS\S=2[[[X.6A-PCDZP*3XFAD
-M294>+W:M%%+\`)?XP#[:6]NHG>#;FFF-RMAA7D"KQ-&OX<E(GNRS/6*%P8?B
-M>3Z5S'CBYC"740``````````*P```"L````0``!D9",0``#>K;H(`$4``!T`
-M`$``/Q&VN,`!`O[``0(7$901E``)6)O_``````````"N````K@```!```&1D
-M(Q```-ZMN@@`10``H*JV```_$4M_P`$"_L`!`A<1E!&4`(P``/3<"N4````#
-M7D"KQ-&OX<E(GNRS/6*%P6M-D[MJGU)RI[EA3)LD/W^:S2V!1P<2Y/0I:_`%
-MF3-`LSA3&QM8DD^\>1F0#F$^I@1V5E>.`*!H=Z?(&*,.MS]E4H#P+<JB/C=Q
-MS26IBN>2"^MMG?%@Y3*L%D'7$>LLOA,HUEB3IB;87,\:-0``````````B@$`
-M`(H!```0``#>K;H0``!D9",(`$4``7P``$``0!&T6<`!`A?``0+^$901E`%H
-MRNX`````GHGR.(^0O!X*=#5\X]&DOP@0(`&+?HE'```!7*UH:Y3%%O=%DMM=
-M<6J4PR@=@:9:G2JUW)6]ZNQ$7OT.4^RH,8X_>:H`,Q.,&AVG\<I-0\G^4LD@
-M`&$;=!`K3P)F]FKA"X)X0,<CJQP0?S!V>B(Y!KR'C0\'[XIS!(%P&'QX74X=
-M4,=*GAS%MDNE:?+;+?\O0S-YI<]*OH07Y/=L7)3L9+1X=](B":8/0]TM*_M_
-M%0XCR#%OU/9VQ7%+B:<GZ4E"II&'@"I065/_GWY9T<'(V6[D5D-,'B1I6M\_
-M88X$;@-ZG\1E;EO#\%4?UR<B!QJEE3WL(5$.9.WDK5'87?':Q'_+0KH3RN7;
-M=Y!=`B1.X,11<&'K[:/<U^E^K1*&Q7F_>*]7N0$*_8E18B:LED(2-1">ZI<J
-M$S.585:$A1ZO"4@T0EVQ9U+;&R][E%*YC&*A/84AE`[Q7FP#(R]&````````
-M``!B````8@```!```&1D(Q```-ZMN@@`10``5```0``_$;:!P`$"_L`!`A<1
-ME!&4`$"O%P````">B?(XCY"\'@IT-7SCT:2_"!`@`8M^B4<````T)3LQA@YH
-M[(05I'-:L_AR6CWGJ@DY)*0"``````````"N````K@```!```&1D(Q```-ZM
-MN@@`10``H*JW```_$4M^P`$"_L`!`A<1E!&4`(P``/3<"N4````$"^MMG?%@
-MY3*L%D'7$>LLOHFXH,6B3<'M/]A_UT%X.MP;F`ZT@=\62*]W'/Y5@1,(8+`W
-MTIZ(C;<M^%)G.9R$N1)6J_7Z_!GT%\UMQ:XQPM8]>8G'VC<"+'VM:$K/=:VI
-MD#:KB^/G$BB@:+=TSV\S)T5-E#UOBKZ"E5_,%P``````````*P```"L````0
-M``!D9",0``#>K;H(`$4``!T``$``/Q&VN,`!`O[``0(7$901E``)6)O_````
-M``````"N````K@```!```&1D(Q```-ZMN@@`10``H*JX```_$4M]P`$"_L`!
-M`A<1E!&4`(P``/3<"N4````%D#:KB^/G$BB@:+=TSV\S)XZ>X,YAOI/W1_BS
-M7:N%MO?3J+1\I=>O-<R^HIZU--!X&6`$]U#*J@;R@64%SKQ.B/^^IGB<&88W
-M[8)FS;H6%4)M9NV]\#Q+3^^'.,PQY7<SC6OG8>36N1GBDD+HMR]D8U)G(OJ]
-MMX!><$3'U0``````````K@```*X````0``!D9",0``#>K;H(`$4``*"JN0``
-M/Q%+?,`!`O[``0(7$901E`",``#TW`KE````!HUKYV'DUKD9XI)"Z+<O9&,5
-M_X1R'`1@>@>3:9638^IH_2\8CVE-BL2&43,3ZAY3'1@3Z:+\)XSXDSO]L,@?
-MCOL6<I7.*]L#N>@]+&+X^#H(D.X>B;)<%[E4:S:#.D70:!#<8Q\QZFH`<C&^
-MG'`JQ0_F"K\L?F]\HUG$8G,``````````"H````J````$```9&0C$```WJVZ
-M"`8``0@`!@0``1```-ZMNL`!`OX```````#``0(7```````````J````*@``
-M`!```-ZMNA```&1D(P@&``$(``8$``(0``!D9"/``0(7$```WJVZP`$"_@``
-M````````*P```"L````0``!D9",0``#>K;H(`$4``!T``$``/Q&VN,`!`O[`
-M`0(7$901E``)6)O_``````````"N````K@```!```&1D(Q```-ZMN@@`10``
-MH*JZ```_$4M[P`$"_L`!`A<1E!&4`(P``/3<"N4````'$-QC'S'J:@!R,;Z<
-M<"K%#ST!-8\O2;F**R/9Z%HAZ`2#KQIW*9'HI9C067ZK-G^XAL^O0I7Z/'H(
-M<.`7P<QG3<<?7R7Z!!3MQ1MY5B=F9N",J@L.`]?M!U5)TB`<"]W5C[,`[Y'2
-MT6\N$CD@6'"CP$3F`AEER>@/P'/E0@``````````B@$``(H!```0``#>K;H0
-M``!D9",(`$4``7P``$``0!&T6<`!`A?``0+^$901E`%HRNX`````GHGR.(^0
-MO!X*=#5\X]&DOP@0(`&+?HE'```!7*UH:Y3%%O=%DMM=<6J4PR@=@:9:G2JU
-MW)6]ZNQ$7OT.4^RH,8X_>:H`,Q.,&AVG\<I-0\G^4LD@`&$;=!`K3P)F]FKA
-M"X)X0,<CJQP0?S!V>B(Y!KR'C0\'[XIS!(%P&'QX74X=4,=*GAS%MDNE:?+;
-M+?\O0S-YI<]*OH07Y/=L7)3L9+1X=](B":8/0]TM*_M_%0XCR#%OU/9VQ7%+
-MB:<GZ4E"II&'@"I065/_GWY9T<'(V6[D5D-,'B1I6M\_88X$;@-ZG\1E;EO#
-M\%4?UR<B!QJEE3WL(5$.9.WDK5'87?':Q'_+0KH3RN7;=Y!=`B1.X,11<&'K
-M[:/<U^E^K1*&Q7F_>*]7N0$*_8E18B:LED(2-1">ZI<J$S.585:$A1ZO"4@T
-M0EVQ9U+;&R][E%*YC&*A/84AE`[Q7FP#(R]&``````````"N````K@```!``
-M`&1D(Q```-ZMN@@`10``H*J[```_$4MZP`$"_L`!`A<1E!&4`(P``/3<"N4`
-M```(C[,`[Y'2T6\N$CD@6'"CP*@CBNC9!,,HJ*K#(R8N5?*%N(<XX+>GVJ+F
-M#M/G_FP&NANM[W@`)Y9\\Z?F4SX%'E.^2BCP\9+!/`25PK%+G'U@$&1+=@%(
-M#9RV^U"B8-5,EXJ0-QZTLOJ/L^F\).BC@++XQGOL8JC_`L;'=```````````
-M*@```"H````0``#>K;H0``!D9",(!@`!"``&!``!$```9&0CP`$"%P``````
-M`,`!`OX``````````"H````J````$```9&0C$```WJVZ"`8``0@`!@0``A``
-M`-ZMNL`!`OX0``!D9"/``0(7```````````K````*P```!```&1D(Q```-ZM
-MN@@`10``'0``0``_$;:XP`$"_L`!`A<1E!&4``E8F_\``````````'H```!Z
-M````$```WJVZ$```9&0C"`!%``!L``!``$`1M6G``0(7P`$"_A&4$90`6,G#
-M`````)Z)\CB/D+P>"G0U?./1I+\($`4!`KW&3P```$S_T\^1(\?(IVCQDA]J
-C20SF@.^<&]2'1D(_3FHHKW7PKQJ'!!.01QV>?]$9K_EN`N<`
-`
-end
diff --git a/contrib/tcpdump/tests/isis-infinite-loop.pcap b/contrib/tcpdump/tests/isis-infinite-loop.pcap
deleted file mode 100644
index b482fc850d01..000000000000
--- a/contrib/tcpdump/tests/isis-infinite-loop.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/ldp-infinite-loop.pcap b/contrib/tcpdump/tests/ldp-infinite-loop.pcap
deleted file mode 100644
index ea31f0c06f3e..000000000000
--- a/contrib/tcpdump/tests/ldp-infinite-loop.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/lmp.out b/contrib/tcpdump/tests/lmp.out
deleted file mode 100644
index 2739d9fad254..000000000000
--- a/contrib/tcpdump/tests/lmp.out
+++ /dev/null
@@ -1,36 +0,0 @@
-IP (tos 0x0, ttl 1, id 44530, offset 0, flags [none], proto UDP (17), length 84)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 56
-IP (tos 0x0, ttl 1, id 44531, offset 0, flags [none], proto UDP (17), length 56)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 28
-IP (tos 0x0, ttl 1, id 44532, offset 0, flags [none], proto UDP (17), length 84)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 56
-IP (tos 0x0, ttl 1, id 44533, offset 0, flags [none], proto UDP (17), length 76)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 48
-IP (tos 0x0, ttl 1, id 44534, offset 0, flags [none], proto UDP (17), length 68)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 40
-IP (tos 0x0, ttl 1, id 44535, offset 0, flags [none], proto UDP (17), length 44)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 16
-IP (tos 0x0, ttl 1, id 44536, offset 0, flags [none], proto UDP (17), length 124)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 96
-IP (tos 0x0, ttl 1, id 44537, offset 0, flags [none], proto UDP (17), length 68)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 40
-IP (tos 0x0, ttl 1, id 44538, offset 0, flags [none], proto UDP (17), length 60)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 32
-IP (tos 0x0, ttl 1, id 44539, offset 0, flags [none], proto UDP (17), length 52)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 24
-IP (tos 0x0, ttl 1, id 44540, offset 0, flags [none], proto UDP (17), length 52)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 24
-IP (tos 0x0, ttl 1, id 44541, offset 0, flags [none], proto UDP (17), length 52)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 24
-IP (tos 0x0, ttl 1, id 44542, offset 0, flags [none], proto UDP (17), length 52)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 24
-IP (tos 0x0, ttl 1, id 44543, offset 0, flags [none], proto UDP (17), length 52)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 24
-IP (tos 0x0, ttl 1, id 44544, offset 0, flags [none], proto UDP (17), length 44)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 16
-IP (tos 0x0, ttl 1, id 44545, offset 0, flags [none], proto UDP (17), length 64)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 36
-IP (tos 0x0, ttl 1, id 44546, offset 0, flags [none], proto UDP (17), length 72)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 44
-IP (tos 0x0, ttl 1, id 44547, offset 0, flags [none], proto UDP (17), length 64)
- 10.0.12.1.49998 > 10.0.12.2.49998: [no cksum] UDP, length 36
diff --git a/contrib/tcpdump/tests/lmp.puu b/contrib/tcpdump/tests/lmp.puu
deleted file mode 100644
index c14cd560c96c..000000000000
--- a/contrib/tcpdump/tests/lmp.puu
+++ /dev/null
@@ -1,42 +0,0 @@
-begin 644 lmp.pcap
-MU,.RH0(`!````````````/__```!````I!J-0&;J``!B````8@`````%75SJ
-MQ@`$=="&2@@`10``5*WR```!$=^D"@`,`0H`#`+#3L-.`$```!````4`.```
-M`0,`"`$````!!0`(`````P(#``@!````@0@`&````!0````>")*``$+(````
-M```(I!J-0#SQ``!&````1@`````%75SJQ@`$=="&2@@`10``.*WS```!$=^_
-M"@`,`0H`#`+#3L-.`"0``!````0`'````0$`"`````$!!P`,````,@```#RD
-M&HU`@/(``&(```!B``````5=7.K&``1UT(9*"`!%``!4K?0```$1WZ(*``P!
-M"@`,`L-.PTX`0```$````P`X```!`0`(`````0$"``@*`#(!`@$`"`````("
-M!0`(`````P("``@*`#("@08`"``%``^D&HU`?_,``%H```!:``````5=7.K&
-M``1UT(9*"`!%``!,K?4```$1WZD*``P!"@`,`L-.PTX`.```$````@`P```!
-M`0`(`````0$"``@*`#(!`@$`"`````("!0`(`````P("``@*`#("I!J-0'+T
-M``!2````4@`````%75SJQ@`$=="&2@@`10``1*WV```!$=^P"@`,`0H`#`+#
-M3L-.`#```!````$`*````0$`"`````$!!0`(`````P$"``@*`#(!@08`"``%
-M``^D&HU`0_4``#H````Z``````5=7.K&``1UT(9*"`!%```LK?<```$1W\<*
-M``P!"@`,`L-.PTX`&```$```#P`0```"!0`(`````:0:C4"E]P``B@```(H`
-M````!5U<ZL8`!'70ADH(`$4``'RM^````1'?=@H`#`$*``P"PT[#3@!H```0
-M```0`&````(%``@````!`A0`"````#L!#``D`````,"H`0'`J`$"`0R6"$+(
-M``!"R````@@```````8!#``D``````H!`0$*`0$"`0R6`TZ3,2U.F=S6`@@`
-M`````6&D&HU`C/@``%(```!2``````5=7.K&``1UT(9*"`!%``!$K?D```$1
-MWZT*``P!"@`,`L-.PTX`,```$```!@`H```!`P`(`0````(%``@````!@0D`
-M"``R`&0!"@`(````!:0:C4!E^0``2@```$H`````!5U<ZL8`!'70ADH(`$4`
-M`#RM^@```1'?M`H`#`$*``P"PT[#3@`H```0```'`"````$#``@*`````@4`
-M"`````,!%``(````!Z0:C4`Q^@``0@```$(`````!5U<ZL8`!'70ADH(`$4`
-M`#2M^P```1'?NPH`#`$*``P"PT[#3@`@```0```(`!@```$%``@````#`0H`
-M"`````6D&HU``_L``$(```!"``````5=7.K&``1UT(9*"`!%```TK?P```$1
-MW[H*``P!"@`,`L-.PTX`(```$```"0`8```"!0`(`````P$*``@````%I!J-
-M0-#[``!"````0@`````%75SJQ@`$=="&2@@`10``-*W]```!$=^Y"@`,`0H`
-M#`+#3L-.`"```!````H`&````00`"`$````!"@`(````!:0:C4"=_```0@``
-M`$(`````!5U<ZL8`!'70ADH(`$4``#2M_@```1'?N`H`#`$*``P"PT[#3@`@
-M```0```,`!@```$%``@````!`0H`"`````6D&HU`:?T``$(```!"``````5=
-M7.K&``1UT(9*"`!%```TK?\```$1W[<*``P!"@`,`L-.PTX`(```$```#0`8
-M```"!0`(`````0$*``@````%I!J-0#C^```Z````.@`````%75SJQ@`$=="&
-M2@@`10``+*X````!$=^^"@`,`0H`#`+#3L-.`!@``!```!(`$````@4`"```
-M``.D&HU`)?\``$X```!.``````5=7.K&``1UT(9*"`!%``!`K@$```$1WZD*
-M``P!"@`,`L-.PTX`+```$```$P`D```!`P`(`0````$%``@````#`0X`#`(`
-M```"````I!J-0`8``0!6````5@`````%75SJQ@`$=="&2@@`10``2*X"```!
-M$=^@"@`,`0H`#`+#3L-.`#0``!```!$`+````0,`"`$````!!0`(`````P$-
-M`!0!````P````P$```"````"I!J-0-4``0!.````3@`````%75SJQ@`$=="&
-M2@@`10``0*X#```!$=^G"@`,`0H`#`+#3L-.`"P``!```!0`)````@4`"```
-6``,!#0`4`0```,````(!````P````0``
-`
-end
diff --git a/contrib/tcpdump/tests/lmp.sh b/contrib/tcpdump/tests/lmp.sh
deleted file mode 100755
index 79c9efbe7966..000000000000
--- a/contrib/tcpdump/tests/lmp.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-uudecode lmp.puu
-
-echo -n test lmp ...
-../tcpdump -t -n -v -v -v -r lmp.pcap >lmp.new
-if diff lmp.new lmp.out
-then
- echo passed.
-else
- echo failed.
-fi
-
-
diff --git a/contrib/tcpdump/tests/lspping-fec-ldp.pcap b/contrib/tcpdump/tests/lspping-fec-ldp.pcap
deleted file mode 100644
index 87e86c79e6d9..000000000000
--- a/contrib/tcpdump/tests/lspping-fec-ldp.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/lspping-fec-rsvp.pcap b/contrib/tcpdump/tests/lspping-fec-rsvp.pcap
deleted file mode 100644
index d9dcf544d8eb..000000000000
--- a/contrib/tcpdump/tests/lspping-fec-rsvp.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/mpls-ldp-hello.out b/contrib/tcpdump/tests/mpls-ldp-hello.out
deleted file mode 100644
index a8b237327c19..000000000000
--- a/contrib/tcpdump/tests/mpls-ldp-hello.out
+++ /dev/null
@@ -1,10 +0,0 @@
-IP (tos 0xc0, ttl 1, id 15579, offset 0, flags [none], proto UDP (17), length 70)
- 10.1.1.3.646 > 224.0.0.2.646:
- LDP, Label-Space-ID: 10.1.0.2:0, pdu-length: 38
- Hello Message (0x0100), length: 28, Message ID: 0x00011970, Flags: [ignore if unknown]
- Common Hello Parameters TLV (0x0400), length: 4, Flags: [ignore and don't forward if unknown]
- Hold Time: 15s, Flags: [Link Hello]
- IPv4 Transport Address TLV (0x0401), length: 4, Flags: [ignore and don't forward if unknown]
- IPv4 Transport Address: 10.1.0.2
- Configuration Sequence Number TLV (0x0402), length: 4, Flags: [ignore and don't forward if unknown]
- Sequence Number: 1
diff --git a/contrib/tcpdump/tests/mpls-ldp-hello.puu b/contrib/tcpdump/tests/mpls-ldp-hello.puu
deleted file mode 100644
index b7f3b625b34e..000000000000
--- a/contrib/tcpdump/tests/mpls-ldp-hello.puu
+++ /dev/null
@@ -1,6 +0,0 @@
-begin 644 mpls-ldp-hello.pcap
-MU,.RH0(`!````````````.H%```)````1UFZ/E2'#`!*````2@```/\#`"%%
-MP`!&/-L```$1D08*`0$#X````@*&`H8`,M2>``$`)@H!``(```$``!P``1EP
-8!```!``/```$`0`$"@$``@0"``0````!
-`
-end
diff --git a/contrib/tcpdump/tests/mpls-traceroute.pcap b/contrib/tcpdump/tests/mpls-traceroute.pcap
deleted file mode 100644
index ac0b6b3a1ed0..000000000000
--- a/contrib/tcpdump/tests/mpls-traceroute.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/tests/ospf-gmpls.out b/contrib/tcpdump/tests/ospf-gmpls.out
deleted file mode 100644
index e4dd9ab69c3b..000000000000
--- a/contrib/tcpdump/tests/ospf-gmpls.out
+++ /dev/null
@@ -1,86 +0,0 @@
-IP (tos 0xc0, ttl 1, id 4052, offset 0, flags [none], proto OSPF (89), length 172)
- 40.35.1.2 > 224.0.0.5: OSPFv2, LS-Update, length 152
- Router-ID 10.255.245.35, Backbone Area, Authentication Type: none (0), 1 LSA
- LSA #1
- Advertising Router 10.255.245.37, seq 0x80000002, age 9s, length 104
- Area Local Opaque LSA (10), Opaque-Type Traffic Engineering LSA (1), Opaque-ID 8
- Options: [External]
- Link TLV (2), length: 100
- Link Type subTLV (1), length: 1, Point-to-point (1)
- Link ID subTLV (2), length: 4, 10.255.245.69 (0x0afff545)
- Local Interface IP address subTLV (3), length: 4, 10.9.142.1
- Remote Interface IP address subTLV (4), length: 4, 10.9.142.2
- Traffic Engineering Metric subTLV (5), length: 4, Metric 63
- Maximum Bandwidth subTLV (6), length: 4, 622.080 Mbps
- Maximum Reservable Bandwidth subTLV (7), length: 4, 622.080 Mbps
- Unreserved Bandwidth subTLV (8), length: 32
- TE-Class 0: 622.080 Mbps
- TE-Class 1: 622.080 Mbps
- TE-Class 2: 622.080 Mbps
- TE-Class 3: 622.080 Mbps
- TE-Class 4: 622.080 Mbps
- TE-Class 5: 622.080 Mbps
- TE-Class 6: 622.080 Mbps
- TE-Class 7: 622.080 Mbps
- Administrative Group subTLV (9), length: 4, 0x00000000
-IP (tos 0xc0, ttl 1, id 4106, offset 0, flags [none], proto OSPF (89), length 172)
- 40.35.1.2 > 224.0.0.5: OSPFv2, LS-Update, length 152
- Router-ID 10.255.245.35, Backbone Area, Authentication Type: none (0), 1 LSA
- LSA #1
- Advertising Router 10.255.245.37, seq 0x80000002, age 9s, length 104
- Area Local Opaque LSA (10), Opaque-Type Traffic Engineering LSA (1), Opaque-ID 9
- Options: [External]
- Link TLV (2), length: 100
- Link Type subTLV (1), length: 1, Point-to-point (1)
- Link ID subTLV (2), length: 4, 10.255.245.69 (0x0afff545)
- Local Interface IP address subTLV (3), length: 4, 10.9.143.1
- Remote Interface IP address subTLV (4), length: 4, 10.9.143.2
- Traffic Engineering Metric subTLV (5), length: 4, Metric 63
- Maximum Bandwidth subTLV (6), length: 4, 622.080 Mbps
- Maximum Reservable Bandwidth subTLV (7), length: 4, 622.080 Mbps
- Unreserved Bandwidth subTLV (8), length: 32
- TE-Class 0: 622.080 Mbps
- TE-Class 1: 622.080 Mbps
- TE-Class 2: 622.080 Mbps
- TE-Class 3: 622.080 Mbps
- TE-Class 4: 622.080 Mbps
- TE-Class 5: 622.080 Mbps
- TE-Class 6: 622.080 Mbps
- TE-Class 7: 622.080 Mbps
- Administrative Group subTLV (9), length: 4, 0x00000000
-IP (tos 0xc0, ttl 1, id 4160, offset 0, flags [none], proto OSPF (89), length 212)
- 40.35.1.2 > 224.0.0.5: OSPFv2, LS-Update, length 192
- Router-ID 10.255.245.35, Backbone Area, Authentication Type: none (0), 1 LSA
- LSA #1
- Advertising Router 10.255.245.35, seq 0x80000003, age 3s, length 144
- Area Local Opaque LSA (10), Opaque-Type Traffic Engineering LSA (1), Opaque-ID 3
- Options: [External]
- Link TLV (2), length: 140
- Link Type subTLV (1), length: 1, Point-to-point (1)
- Link ID subTLV (2), length: 4, 10.255.245.40 (0x0afff528)
- Local Interface IP address subTLV (3), length: 4, 10.40.35.14
- Remote Interface IP address subTLV (4), length: 4, 10.40.35.13
- Traffic Engineering Metric subTLV (5), length: 4, Metric 1
- Maximum Bandwidth subTLV (6), length: 4, 100.000 Mbps
- Maximum Reservable Bandwidth subTLV (7), length: 4, 100.000 Mbps
- Unreserved Bandwidth subTLV (8), length: 32
- TE-Class 0: 0.000 Mbps
- TE-Class 1: 0.000 Mbps
- TE-Class 2: 0.000 Mbps
- TE-Class 3: 0.000 Mbps
- TE-Class 4: 0.000 Mbps
- TE-Class 5: 0.000 Mbps
- TE-Class 6: 0.000 Mbps
- TE-Class 7: 0.000 Mbps
- Interface Switching Capability subTLV (15), length: 44
- Interface Switching Capability: Packet-Switch Capable-1
- LSP Encoding: Ethernet V2/DIX
- Max LSP Bandwidth:
- priority level 0: 0.000 Mbps
- priority level 1: 0.000 Mbps
- priority level 2: 0.000 Mbps
- priority level 3: 0.000 Mbps
- priority level 4: 0.000 Mbps
- priority level 5: 0.000 Mbps
- priority level 6: 0.000 Mbps
- priority level 7: 0.000 Mbps
diff --git a/contrib/tcpdump/tests/ospf-gmpls.puu b/contrib/tcpdump/tests/ospf-gmpls.puu
deleted file mode 100644
index 691e38e9f54e..000000000000
--- a/contrib/tcpdump/tests/ospf-gmpls.puu
+++ /dev/null
@@ -1,18 +0,0 @@
-begin 644 ospf-gmpls.pcap
-MU,.RH0(`!````````````'81````````KME</_6D!0"P````L`````(```!%
-MP`"L#]0```%9GSLH(P$"X```!0($`)@*__4C`````*F*````````````````
-M``$`"0(*`0``"`K_]26````">#X`?``"`&0``0`!`0`````"``0*__5%``,`
-M!`H)C@$`!``$"@F.`@`%``0````_``8`!$R44,``!P`$3)10P``(`"!,E%#`
-M3)10P$R44,!,E%#`3)10P$R44,!,E%#`3)10P``)``0`````Y-E</P;,#0"P
-M````L`````(```!%P`"L$`H```%9GP4H(P$"X```!0($`)@*__4C`````&_$
-M``````````````````$`"0(*`0``"0K_]26````"L`,`?``"`&0``0`!`0``
-M```"``0*__5%``,`!`H)CP$`!``$"@F/`@`%``0````_``8`!$R44,``!P`$
-M3)10P``(`"!,E%#`3)10P$R44,!,E%#`3)10P$R44,!,E%#`3)10P``)``0`
-M````&=I</S4\!@#8````V`````(```!%P`#4$$````%9GJ<H(P$"X```!0($
-M`,`*__4C`````-HW``````````````````$``P(*`0```PK_]2.````#(00`
-MI``"`(P``0`!`0`````"``0*__4H``,`!`HH(PX`!``$"B@C#0`%``0````!
-M``8`!$L^O"``!P`$2SZ\(``(`"``````````````````````````````````
-M```````````/`"P!`@``````````````````````````````````````````
-*``!+/KP@"B@`````
-`
-end
diff --git a/contrib/tcpdump/tests/print-A.out b/contrib/tcpdump/tests/print-A.out
deleted file mode 100644
index 6765312868ea..000000000000
--- a/contrib/tcpdump/tests/print-A.out
+++ /dev/null
@@ -1,193 +0,0 @@
-22:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
-E..<.h@.@.!R.........p.P7X.~.........!....@....
-M...........
-22:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
-E..<..@.@.<..........P.p7z..7X......n.....@....
-M...M.......
-22:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
-E..4.j@.@.!X.........p.P7X..7z.... .7......
-M...M...
-22:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202
-E....l@.@. ..........p.P7X..7z.... ........
-M...M...GET / HTTP/1.1
-Host: localhost
-User-Agent: ELinks/0.10.4-7-debian (textmode; Linux 2.6.11-1-686-smp i686; 132x56-2)
-Accept: */*
-Accept-Encoding: gzip
-Accept-Language: en
-Connection: Keep-Alive
-
-
-22:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
-E..4..@.@............P.p7z..7X.I.. .7......
-M...M...
-22:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559
-E.....@.@..%.........P.p7z..7X.I.. ........
-M...M...HTTP/1.1 200 OK
-Date: Wed, 06 Jul 2005 03:57:35 GMT
-Server: Apache/1.3.33
-Last-Modified: Sun, 15 Aug 2004 00:43:41 GMT
-ETag: "6e80f0-148a-411eb1bd"
-Accept-Ranges: bytes
-Content-Length: 5258
-Keep-Alive: timeout=15, max=100
-Connection: Keep-Alive
-Content-Type: text/html; charset=iso-8859-1
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<HTML>
-<HEAD>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
- <META NAME="Description" CONTENT="The initial installation of Debian apache.">
- <TITLE>Placeholder page</TITLE>
-</HEAD>
-<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#55188A" ALINK="#FF0000">
-
-<H1>Placeholder page</H1>
-<H2>If you are just browsing the web</h2>
-
-<P>The owner of this web site has not put up any web pages yet.
-Please come back later.</P>
-
-<P><SMALL><CITE>Move along, nothing to see here...</CITE> :-)</SMALL></P>
-
-<H2>If you are trying to locate the administrator of this machine</H2>
-
-<P>If you want to report something about this host's behavior, please
-contact the Internet Service Provider (ISP) involved directly.</P>
-
-<P>See the <A href="http://www.abuse.net/">Network Abuse
-Clearinghouse</A> for how to do this.</P>
-
-<H2>If you are the administrator of this machine</H2>
-
-<P>The initial installation of <A href="http://www.debian.org/">Debian's
-apache</A> web server package was successful.</P>
-
-<P><STRONG>You should replace this page with your own web pages as
-soon as possible.</STRONG></P>
-
-<P>Unless you changed its configuration, your new server is configured as follows:
-<UL>
-<LI>
-Configuration files can be found in <TT>/etc/apache</TT>.</LI>
-
-<LI>
-The <TT>DocumentRoot</TT>, which is the directory under which all your
-HTML files should exist, is set to <TT>/var/www</TT>.</LI>
-
-<LI>
-CGI scripts are looked for in <TT>/usr/lib/cgi-bin</TT>, which is where
-Debian packages will place their scripts.</LI>
-
-<LI>
-Log files are placed in <TT>/var/log/apache</TT>, and will be rotated
-weekly. The frequency of rotation can be easily changed by editing
-<TT>/etc/logrotate.d/apache</TT>.</LI>
-
-<LI>
-The default directory index is <TT>index.html</TT>, meaning that requests
-for a directory <TT>/foo/bar/</TT> will give the contents of the file <TT>/var/www/foo/bar/index.html</TT>
-if it exists (assuming that <TT>/var/www</TT> is your <TT>DocumentRoot</TT>).</LI>
-
-<LI>
-User directories are enabled, and user documents will be looked for
-in the <TT>public_html</TT> directory of the users' homes. These dirs
-should be under <TT>/home</TT>, and users will not be able to symlink
-to files they don't own.</LI>
-
-</UL>
-All the standard apache modules are available with this release and are
-now managed with debconf. Type <TT>dpkg-reconfigure apache</TT> to
-select which modules you want enabled. Many other modules are available
-through the Debian package system with the names <TT>libapache-mod-*</TT>.
-If you need to compile a module yourself, you will need to install the
-<TT>apache-dev</TT> package.
-
-<P>More documentation on Apache can be found on:
-<UL>
-<LI>
-The <A HREF="/doc/apache-doc/manual/">Apache documentation</A> stored on your server.</LI>
-
-<LI>
-The <A HREF="http://www.apache.org/">Apache Project</A> home site.</LI>
-
-<LI>
-The <A HREF="http://www.apache-ssl.org/">Apache-SSL</A> home site.</LI>
-
-<LI>
-The <A HREF="http://perl.apache.org/">mod perl</A> home site.</LI>
-
-<LI>
-The <A HREF="http://www.apacheweek.com/">ApacheWeek</A> newsletter.</LI>
-
-<LI>
-The <A HREF="http://www.debian.org/doc/">Debian Project
-Documentation</A> which contains HOWTOs, FAQs, and software updates.</LI>
-</UL>
-
-<P>You can also consult the list of <A HREF="http://www.boutell.com/faq/">World
-Wide Web Frequently Asked Questions</A> for information.
-
-<H2>Let other people know about this server</H2>
-
-<A HREF="http://netcraft.com/">Netcraft</A> provides an interesting free
-service for web site monitoring and statistic collection.
-You can let them know about your server using their
-<A HREF="http://uptime.netcraft.com/">interface</A>.
-Enabling the monitoring of your server will provide a better global overview
-of who is using what and where, and it would give Debian a better
-overview of the apache package usage.
-
-<H2>About this page</H2>
-
-<IMG ALIGN="right" ALT="" HEIGHT="247" WIDTH="278" SRC="icons/jhe061.png">
-
-<P>This is a placeholder page installed by the <A
-HREF="http://www.debian.org/">Debian</A>
-release of the apache Web server package.
-
-<P>This computer has installed the Debian GNU/Linux operating system,
-but it has <strong>nothing to do with the Debian
-Project</strong>. Please do <strong>not</strong> contact the Debian
-Project about it.</P>
-
-<P>If you find a bug in this apache package, or in Apache itself,
-please file a bug report on it. Instructions on doing this, and the
-list of <A HREF="http://bugs.debian.org/src:apache">known bugs</A> of this
-package, can be found in the
-<A HREF="http://www.debian.org/Bugs/Reporting">Debian Bug Tracking System</A>.
-
-<P>Thanks for using this package, and congratulations for your choice of
-a Debian system!</P>
-
-<DIV align="center">
-<a href="http://www.debian.org/">
-<IMG align="middle" height="30" width="25" src="icons/debian/openlogo-25.jpg" alt="Debian">
-</a>
-<a href="http://www.apache.org/">
-<IMG align="middle" height="32" width="259" src="icons/apache_pb.png" alt="Apache">
-</a>
-</DIV>
-
-<!--
- This page was initially created by Johnie Ingram (http://netgod.net/)
- It was later edited by Matthew Wilcox and Josip Rodin.
- Last modified: $Date: 2004/06/20 15:33:57 $.
- -->
-
-</BODY>
-</HTML>
-
-22:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
-E..4.n@.@.!T.........p.P7X.I7z....0_.......
-M...M...
-22:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
-E..4.p@.@.!R.........p.P7X.I7z....0_.......
-M..!M...
-22:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
-E..4..@.@............P.p7z..7X.J.. ..5.....
-M..#M..!
-22:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
-E..4.r@.@.!P.........p.P7X.J7z....0_.......
-M..#M..#
diff --git a/contrib/tcpdump/tests/print-AA.out b/contrib/tcpdump/tests/print-AA.out
deleted file mode 100644
index 6a22df2be864..000000000000
--- a/contrib/tcpdump/tests/print-AA.out
+++ /dev/null
@@ -1,193 +0,0 @@
-22:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
-..............E..<.h@.@.!R.........p.P7X.~.........!....@....
-M...........
-22:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
-..............E..<..@.@.<..........P.p7z..7X......n.....@....
-M...M.......
-22:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
-..............E..4.j@.@.!X.........p.P7X..7z.... .7......
-M...M...
-22:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202
-..............E....l@.@. ..........p.P7X..7z.... ........
-M...M...GET / HTTP/1.1
-Host: localhost
-User-Agent: ELinks/0.10.4-7-debian (textmode; Linux 2.6.11-1-686-smp i686; 132x56-2)
-Accept: */*
-Accept-Encoding: gzip
-Accept-Language: en
-Connection: Keep-Alive
-
-
-22:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
-..............E..4..@.@............P.p7z..7X.I.. .7......
-M...M...
-22:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559
-..............E.....@.@..%.........P.p7z..7X.I.. ........
-M...M...HTTP/1.1 200 OK
-Date: Wed, 06 Jul 2005 03:57:35 GMT
-Server: Apache/1.3.33
-Last-Modified: Sun, 15 Aug 2004 00:43:41 GMT
-ETag: "6e80f0-148a-411eb1bd"
-Accept-Ranges: bytes
-Content-Length: 5258
-Keep-Alive: timeout=15, max=100
-Connection: Keep-Alive
-Content-Type: text/html; charset=iso-8859-1
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<HTML>
-<HEAD>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
- <META NAME="Description" CONTENT="The initial installation of Debian apache.">
- <TITLE>Placeholder page</TITLE>
-</HEAD>
-<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#55188A" ALINK="#FF0000">
-
-<H1>Placeholder page</H1>
-<H2>If you are just browsing the web</h2>
-
-<P>The owner of this web site has not put up any web pages yet.
-Please come back later.</P>
-
-<P><SMALL><CITE>Move along, nothing to see here...</CITE> :-)</SMALL></P>
-
-<H2>If you are trying to locate the administrator of this machine</H2>
-
-<P>If you want to report something about this host's behavior, please
-contact the Internet Service Provider (ISP) involved directly.</P>
-
-<P>See the <A href="http://www.abuse.net/">Network Abuse
-Clearinghouse</A> for how to do this.</P>
-
-<H2>If you are the administrator of this machine</H2>
-
-<P>The initial installation of <A href="http://www.debian.org/">Debian's
-apache</A> web server package was successful.</P>
-
-<P><STRONG>You should replace this page with your own web pages as
-soon as possible.</STRONG></P>
-
-<P>Unless you changed its configuration, your new server is configured as follows:
-<UL>
-<LI>
-Configuration files can be found in <TT>/etc/apache</TT>.</LI>
-
-<LI>
-The <TT>DocumentRoot</TT>, which is the directory under which all your
-HTML files should exist, is set to <TT>/var/www</TT>.</LI>
-
-<LI>
-CGI scripts are looked for in <TT>/usr/lib/cgi-bin</TT>, which is where
-Debian packages will place their scripts.</LI>
-
-<LI>
-Log files are placed in <TT>/var/log/apache</TT>, and will be rotated
-weekly. The frequency of rotation can be easily changed by editing
-<TT>/etc/logrotate.d/apache</TT>.</LI>
-
-<LI>
-The default directory index is <TT>index.html</TT>, meaning that requests
-for a directory <TT>/foo/bar/</TT> will give the contents of the file <TT>/var/www/foo/bar/index.html</TT>
-if it exists (assuming that <TT>/var/www</TT> is your <TT>DocumentRoot</TT>).</LI>
-
-<LI>
-User directories are enabled, and user documents will be looked for
-in the <TT>public_html</TT> directory of the users' homes. These dirs
-should be under <TT>/home</TT>, and users will not be able to symlink
-to files they don't own.</LI>
-
-</UL>
-All the standard apache modules are available with this release and are
-now managed with debconf. Type <TT>dpkg-reconfigure apache</TT> to
-select which modules you want enabled. Many other modules are available
-through the Debian package system with the names <TT>libapache-mod-*</TT>.
-If you need to compile a module yourself, you will need to install the
-<TT>apache-dev</TT> package.
-
-<P>More documentation on Apache can be found on:
-<UL>
-<LI>
-The <A HREF="/doc/apache-doc/manual/">Apache documentation</A> stored on your server.</LI>
-
-<LI>
-The <A HREF="http://www.apache.org/">Apache Project</A> home site.</LI>
-
-<LI>
-The <A HREF="http://www.apache-ssl.org/">Apache-SSL</A> home site.</LI>
-
-<LI>
-The <A HREF="http://perl.apache.org/">mod perl</A> home site.</LI>
-
-<LI>
-The <A HREF="http://www.apacheweek.com/">ApacheWeek</A> newsletter.</LI>
-
-<LI>
-The <A HREF="http://www.debian.org/doc/">Debian Project
-Documentation</A> which contains HOWTOs, FAQs, and software updates.</LI>
-</UL>
-
-<P>You can also consult the list of <A HREF="http://www.boutell.com/faq/">World
-Wide Web Frequently Asked Questions</A> for information.
-
-<H2>Let other people know about this server</H2>
-
-<A HREF="http://netcraft.com/">Netcraft</A> provides an interesting free
-service for web site monitoring and statistic collection.
-You can let them know about your server using their
-<A HREF="http://uptime.netcraft.com/">interface</A>.
-Enabling the monitoring of your server will provide a better global overview
-of who is using what and where, and it would give Debian a better
-overview of the apache package usage.
-
-<H2>About this page</H2>
-
-<IMG ALIGN="right" ALT="" HEIGHT="247" WIDTH="278" SRC="icons/jhe061.png">
-
-<P>This is a placeholder page installed by the <A
-HREF="http://www.debian.org/">Debian</A>
-release of the apache Web server package.
-
-<P>This computer has installed the Debian GNU/Linux operating system,
-but it has <strong>nothing to do with the Debian
-Project</strong>. Please do <strong>not</strong> contact the Debian
-Project about it.</P>
-
-<P>If you find a bug in this apache package, or in Apache itself,
-please file a bug report on it. Instructions on doing this, and the
-list of <A HREF="http://bugs.debian.org/src:apache">known bugs</A> of this
-package, can be found in the
-<A HREF="http://www.debian.org/Bugs/Reporting">Debian Bug Tracking System</A>.
-
-<P>Thanks for using this package, and congratulations for your choice of
-a Debian system!</P>
-
-<DIV align="center">
-<a href="http://www.debian.org/">
-<IMG align="middle" height="30" width="25" src="icons/debian/openlogo-25.jpg" alt="Debian">
-</a>
-<a href="http://www.apache.org/">
-<IMG align="middle" height="32" width="259" src="icons/apache_pb.png" alt="Apache">
-</a>
-</DIV>
-
-<!--
- This page was initially created by Johnie Ingram (http://netgod.net/)
- It was later edited by Matthew Wilcox and Josip Rodin.
- Last modified: $Date: 2004/06/20 15:33:57 $.
- -->
-
-</BODY>
-</HTML>
-
-22:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
-..............E..4.n@.@.!T.........p.P7X.I7z....0_.......
-M...M...
-22:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
-..............E..4.p@.@.!R.........p.P7X.I7z....0_.......
-M..!M...
-22:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
-..............E..4..@.@............P.p7z..7X.J.. ..5.....
-M..#M..!
-22:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
-..............E..4.r@.@.!P.........p.P7X.J7z....0_.......
-M..#M..#
diff --git a/contrib/tcpdump/tests/print-capX.out b/contrib/tcpdump/tests/print-capX.out
deleted file mode 100644
index f95a9e96033f..000000000000
--- a/contrib/tcpdump/tests/print-capX.out
+++ /dev/null
@@ -1,409 +0,0 @@
-22:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
- 0x0000: 4500 003c 1b68 4000 4006 2152 7f00 0001 E..<.h@.@.!R....
- 0x0010: 7f00 0001 da70 0050 3758 897e 0000 0000 .....p.P7X.~....
- 0x0020: a002 7fff 1421 0000 0204 400c 0402 080a .....!....@.....
- 0x0030: 4ddc 9216 0000 0000 0103 0302 M...........
-22:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
- 0x0000: 4500 003c 0000 4000 4006 3cba 7f00 0001 E..<..@.@.<.....
- 0x0010: 7f00 0001 0050 da70 377a 8df1 3758 897f .....P.p7z..7X..
- 0x0020: a012 7fff 6eb1 0000 0204 400c 0402 080a ....n.....@.....
- 0x0030: 4ddc 9216 4ddc 9216 0103 0302 M...M.......
-22:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
- 0x0000: 4500 0034 1b6a 4000 4006 2158 7f00 0001 E..4.j@.@.!X....
- 0x0010: 7f00 0001 da70 0050 3758 897f 377a 8df2 .....p.P7X..7z..
- 0x0020: 8010 2000 37d0 0000 0101 080a 4ddc 9216 ....7.......M...
- 0x0030: 4ddc 9216 M...
-22:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202
- 0x0000: 4500 00fe 1b6c 4000 4006 208c 7f00 0001 E....l@.@.......
- 0x0010: 7f00 0001 da70 0050 3758 897f 377a 8df2 .....p.P7X..7z..
- 0x0020: 8018 2000 fef2 0000 0101 080a 4ddc 9217 ............M...
- 0x0030: 4ddc 9216 4745 5420 2f20 4854 5450 2f31 M...GET./.HTTP/1
- 0x0040: 2e31 0d0a 486f 7374 3a20 6c6f 6361 6c68 .1..Host:.localh
- 0x0050: 6f73 740d 0a55 7365 722d 4167 656e 743a ost..User-Agent:
- 0x0060: 2045 4c69 6e6b 732f 302e 3130 2e34 2d37 .ELinks/0.10.4-7
- 0x0070: 2d64 6562 6961 6e20 2874 6578 746d 6f64 -debian.(textmod
- 0x0080: 653b 204c 696e 7578 2032 2e36 2e31 312d e;.Linux.2.6.11-
- 0x0090: 312d 3638 362d 736d 7020 6936 3836 3b20 1-686-smp.i686;.
- 0x00a0: 3133 3278 3536 2d32 290d 0a41 6363 6570 132x56-2)..Accep
- 0x00b0: 743a 202a 2f2a 0d0a 4163 6365 7074 2d45 t:.*/*..Accept-E
- 0x00c0: 6e63 6f64 696e 673a 2067 7a69 700d 0a41 ncoding:.gzip..A
- 0x00d0: 6363 6570 742d 4c61 6e67 7561 6765 3a20 ccept-Language:.
- 0x00e0: 656e 0d0a 436f 6e6e 6563 7469 6f6e 3a20 en..Connection:.
- 0x00f0: 4b65 6570 2d41 6c69 7665 0d0a 0d0a Keep-Alive....
-22:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
- 0x0000: 4500 0034 1fe4 4000 4006 1cde 7f00 0001 E..4..@.@.......
- 0x0010: 7f00 0001 0050 da70 377a 8df2 3758 8a49 .....P.p7z..7X.I
- 0x0020: 8010 2000 3703 0000 0101 080a 4ddc 9218 ....7.......M...
- 0x0030: 4ddc 9217 M...
-22:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559
- 0x0000: 4500 15eb 1fe6 4000 4006 0725 7f00 0001 E.....@.@..%....
- 0x0010: 7f00 0001 0050 da70 377a 8df2 3758 8a49 .....P.p7z..7X.I
- 0x0020: 8018 2000 13e0 0000 0101 080a 4ddc 9219 ............M...
- 0x0030: 4ddc 9217 4854 5450 2f31 2e31 2032 3030 M...HTTP/1.1.200
- 0x0040: 204f 4b0d 0a44 6174 653a 2057 6564 2c20 .OK..Date:.Wed,.
- 0x0050: 3036 204a 756c 2032 3030 3520 3033 3a35 06.Jul.2005.03:5
- 0x0060: 373a 3335 2047 4d54 0d0a 5365 7276 6572 7:35.GMT..Server
- 0x0070: 3a20 4170 6163 6865 2f31 2e33 2e33 330d :.Apache/1.3.33.
- 0x0080: 0a4c 6173 742d 4d6f 6469 6669 6564 3a20 .Last-Modified:.
- 0x0090: 5375 6e2c 2031 3520 4175 6720 3230 3034 Sun,.15.Aug.2004
- 0x00a0: 2030 303a 3433 3a34 3120 474d 540d 0a45 .00:43:41.GMT..E
- 0x00b0: 5461 673a 2022 3665 3830 6630 2d31 3438 Tag:."6e80f0-148
- 0x00c0: 612d 3431 3165 6231 6264 220d 0a41 6363 a-411eb1bd"..Acc
- 0x00d0: 6570 742d 5261 6e67 6573 3a20 6279 7465 ept-Ranges:.byte
- 0x00e0: 730d 0a43 6f6e 7465 6e74 2d4c 656e 6774 s..Content-Lengt
- 0x00f0: 683a 2035 3235 380d 0a4b 6565 702d 416c h:.5258..Keep-Al
- 0x0100: 6976 653a 2074 696d 656f 7574 3d31 352c ive:.timeout=15,
- 0x0110: 206d 6178 3d31 3030 0d0a 436f 6e6e 6563 .max=100..Connec
- 0x0120: 7469 6f6e 3a20 4b65 6570 2d41 6c69 7665 tion:.Keep-Alive
- 0x0130: 0d0a 436f 6e74 656e 742d 5479 7065 3a20 ..Content-Type:.
- 0x0140: 7465 7874 2f68 746d 6c3b 2063 6861 7273 text/html;.chars
- 0x0150: 6574 3d69 736f 2d38 3835 392d 310d 0a0d et=iso-8859-1...
- 0x0160: 0a3c 2144 4f43 5459 5045 2048 544d 4c20 .<!DOCTYPE.HTML.
- 0x0170: 5055 424c 4943 2022 2d2f 2f57 3343 2f2f PUBLIC."-//W3C//
- 0x0180: 4454 4420 4854 4d4c 2034 2e30 3120 5472 DTD.HTML.4.01.Tr
- 0x0190: 616e 7369 7469 6f6e 616c 2f2f 454e 223e ansitional//EN">
- 0x01a0: 0a3c 4854 4d4c 3e0a 3c48 4541 443e 0a20 .<HTML>.<HEAD>..
- 0x01b0: 2020 3c4d 4554 4120 4854 5450 2d45 5155 ..<META.HTTP-EQU
- 0x01c0: 4956 3d22 436f 6e74 656e 742d 5479 7065 IV="Content-Type
- 0x01d0: 2220 434f 4e54 454e 543d 2274 6578 742f ".CONTENT="text/
- 0x01e0: 6874 6d6c 3b20 6368 6172 7365 743d 6973 html;.charset=is
- 0x01f0: 6f2d 3838 3539 2d31 223e 0a20 2020 3c4d o-8859-1">....<M
- 0x0200: 4554 4120 4e41 4d45 3d22 4465 7363 7269 ETA.NAME="Descri
- 0x0210: 7074 696f 6e22 2043 4f4e 5445 4e54 3d22 ption".CONTENT="
- 0x0220: 5468 6520 696e 6974 6961 6c20 696e 7374 The.initial.inst
- 0x0230: 616c 6c61 7469 6f6e 206f 6620 4465 6269 allation.of.Debi
- 0x0240: 616e 2061 7061 6368 652e 223e 0a20 2020 an.apache.">....
- 0x0250: 3c54 4954 4c45 3e50 6c61 6365 686f 6c64 <TITLE>Placehold
- 0x0260: 6572 2070 6167 653c 2f54 4954 4c45 3e0a er.page</TITLE>.
- 0x0270: 3c2f 4845 4144 3e0a 3c42 4f44 5920 5445 </HEAD>.<BODY.TE
- 0x0280: 5854 3d22 2330 3030 3030 3022 2042 4743 XT="#000000".BGC
- 0x0290: 4f4c 4f52 3d22 2346 4646 4646 4622 204c OLOR="#FFFFFF".L
- 0x02a0: 494e 4b3d 2223 3030 3030 4546 2220 564c INK="#0000EF".VL
- 0x02b0: 494e 4b3d 2223 3535 3138 3841 2220 414c INK="#55188A".AL
- 0x02c0: 494e 4b3d 2223 4646 3030 3030 223e 0a0a INK="#FF0000">..
- 0x02d0: 3c48 313e 506c 6163 6568 6f6c 6465 7220 <H1>Placeholder.
- 0x02e0: 7061 6765 3c2f 4831 3e0a 3c48 323e 4966 page</H1>.<H2>If
- 0x02f0: 2079 6f75 2061 7265 206a 7573 7420 6272 .you.are.just.br
- 0x0300: 6f77 7369 6e67 2074 6865 2077 6562 3c2f owsing.the.web</
- 0x0310: 6832 3e0a 0a3c 503e 5468 6520 6f77 6e65 h2>..<P>The.owne
- 0x0320: 7220 6f66 2074 6869 7320 7765 6220 7369 r.of.this.web.si
- 0x0330: 7465 2068 6173 206e 6f74 2070 7574 2075 te.has.not.put.u
- 0x0340: 7020 616e 7920 7765 6220 7061 6765 7320 p.any.web.pages.
- 0x0350: 7965 742e 0a50 6c65 6173 6520 636f 6d65 yet..Please.come
- 0x0360: 2062 6163 6b20 6c61 7465 722e 3c2f 503e .back.later.</P>
- 0x0370: 0a0a 3c50 3e3c 534d 414c 4c3e 3c43 4954 ..<P><SMALL><CIT
- 0x0380: 453e 4d6f 7665 2061 6c6f 6e67 2c20 6e6f E>Move.along,.no
- 0x0390: 7468 696e 6720 746f 2073 6565 2068 6572 thing.to.see.her
- 0x03a0: 652e 2e2e 3c2f 4349 5445 3e20 3a2d 293c e...</CITE>.:-)<
- 0x03b0: 2f53 4d41 4c4c 3e3c 2f50 3e0a 0a3c 4832 /SMALL></P>..<H2
- 0x03c0: 3e49 6620 796f 7520 6172 6520 7472 7969 >If.you.are.tryi
- 0x03d0: 6e67 2074 6f20 6c6f 6361 7465 2074 6865 ng.to.locate.the
- 0x03e0: 2061 646d 696e 6973 7472 6174 6f72 206f .administrator.o
- 0x03f0: 6620 7468 6973 206d 6163 6869 6e65 3c2f f.this.machine</
- 0x0400: 4832 3e0a 0a3c 503e 4966 2079 6f75 2077 H2>..<P>If.you.w
- 0x0410: 616e 7420 746f 2072 6570 6f72 7420 736f ant.to.report.so
- 0x0420: 6d65 7468 696e 6720 6162 6f75 7420 7468 mething.about.th
- 0x0430: 6973 2068 6f73 7427 7320 6265 6861 7669 is.host's.behavi
- 0x0440: 6f72 2c20 706c 6561 7365 0a63 6f6e 7461 or,.please.conta
- 0x0450: 6374 2074 6865 2049 6e74 6572 6e65 7420 ct.the.Internet.
- 0x0460: 5365 7276 6963 6520 5072 6f76 6964 6572 Service.Provider
- 0x0470: 2028 4953 5029 2069 6e76 6f6c 7665 6420 .(ISP).involved.
- 0x0480: 6469 7265 6374 6c79 2e3c 2f50 3e0a 0a3c directly.</P>..<
- 0x0490: 503e 5365 6520 7468 6520 3c41 2068 7265 P>See.the.<A.hre
- 0x04a0: 663d 2268 7474 703a 2f2f 7777 772e 6162 f="http://www.ab
- 0x04b0: 7573 652e 6e65 742f 223e 4e65 7477 6f72 use.net/">Networ
- 0x04c0: 6b20 4162 7573 650a 436c 6561 7269 6e67 k.Abuse.Clearing
- 0x04d0: 686f 7573 653c 2f41 3e20 666f 7220 686f house</A>.for.ho
- 0x04e0: 7720 746f 2064 6f20 7468 6973 2e3c 2f50 w.to.do.this.</P
- 0x04f0: 3e0a 0a3c 4832 3e49 6620 796f 7520 6172 >..<H2>If.you.ar
- 0x0500: 6520 7468 6520 6164 6d69 6e69 7374 7261 e.the.administra
- 0x0510: 746f 7220 6f66 2074 6869 7320 6d61 6368 tor.of.this.mach
- 0x0520: 696e 653c 2f48 323e 0a0a 3c50 3e54 6865 ine</H2>..<P>The
- 0x0530: 2069 6e69 7469 616c 2069 6e73 7461 6c6c .initial.install
- 0x0540: 6174 696f 6e20 6f66 203c 4120 6872 6566 ation.of.<A.href
- 0x0550: 3d22 6874 7470 3a2f 2f77 7777 2e64 6562 ="http://www.deb
- 0x0560: 6961 6e2e 6f72 672f 223e 4465 6269 616e ian.org/">Debian
- 0x0570: 2773 0a61 7061 6368 653c 2f41 3e20 7765 's.apache</A>.we
- 0x0580: 6220 7365 7276 6572 2070 6163 6b61 6765 b.server.package
- 0x0590: 2077 6173 2073 7563 6365 7373 6675 6c2e .was.successful.
- 0x05a0: 3c2f 503e 0a0a 3c50 3e3c 5354 524f 4e47 </P>..<P><STRONG
- 0x05b0: 3e59 6f75 2073 686f 756c 6420 7265 706c >You.should.repl
- 0x05c0: 6163 6520 7468 6973 2070 6167 6520 7769 ace.this.page.wi
- 0x05d0: 7468 2079 6f75 7220 6f77 6e20 7765 6220 th.your.own.web.
- 0x05e0: 7061 6765 7320 6173 0a73 6f6f 6e20 6173 pages.as.soon.as
- 0x05f0: 2070 6f73 7369 626c 652e 3c2f 5354 524f .possible.</STRO
- 0x0600: 4e47 3e3c 2f50 3e0a 0a3c 503e 556e 6c65 NG></P>..<P>Unle
- 0x0610: 7373 2079 6f75 2063 6861 6e67 6564 2069 ss.you.changed.i
- 0x0620: 7473 2063 6f6e 6669 6775 7261 7469 6f6e ts.configuration
- 0x0630: 2c20 796f 7572 206e 6577 2073 6572 7665 ,.your.new.serve
- 0x0640: 7220 6973 2063 6f6e 6669 6775 7265 6420 r.is.configured.
- 0x0650: 6173 2066 6f6c 6c6f 7773 3a0a 3c55 4c3e as.follows:.<UL>
- 0x0660: 0a3c 4c49 3e0a 436f 6e66 6967 7572 6174 .<LI>.Configurat
- 0x0670: 696f 6e20 6669 6c65 7320 6361 6e20 6265 ion.files.can.be
- 0x0680: 2066 6f75 6e64 2069 6e20 3c54 543e 2f65 .found.in.<TT>/e
- 0x0690: 7463 2f61 7061 6368 653c 2f54 543e 2e3c tc/apache</TT>.<
- 0x06a0: 2f4c 493e 0a0a 3c4c 493e 0a54 6865 203c /LI>..<LI>.The.<
- 0x06b0: 5454 3e44 6f63 756d 656e 7452 6f6f 743c TT>DocumentRoot<
- 0x06c0: 2f54 543e 2c20 7768 6963 6820 6973 2074 /TT>,.which.is.t
- 0x06d0: 6865 2064 6972 6563 746f 7279 2075 6e64 he.directory.und
- 0x06e0: 6572 2077 6869 6368 2061 6c6c 2079 6f75 er.which.all.you
- 0x06f0: 720a 4854 4d4c 2066 696c 6573 2073 686f r.HTML.files.sho
- 0x0700: 756c 6420 6578 6973 742c 2069 7320 7365 uld.exist,.is.se
- 0x0710: 7420 746f 203c 5454 3e2f 7661 722f 7777 t.to.<TT>/var/ww
- 0x0720: 773c 2f54 543e 2e3c 2f4c 493e 0a0a 3c4c w</TT>.</LI>..<L
- 0x0730: 493e 0a43 4749 2073 6372 6970 7473 2061 I>.CGI.scripts.a
- 0x0740: 7265 206c 6f6f 6b65 6420 666f 7220 696e re.looked.for.in
- 0x0750: 203c 5454 3e2f 7573 722f 6c69 622f 6367 .<TT>/usr/lib/cg
- 0x0760: 692d 6269 6e3c 2f54 543e 2c20 7768 6963 i-bin</TT>,.whic
- 0x0770: 6820 6973 2077 6865 7265 0a44 6562 6961 h.is.where.Debia
- 0x0780: 6e20 7061 636b 6167 6573 2077 696c 6c20 n.packages.will.
- 0x0790: 706c 6163 6520 7468 6569 7220 7363 7269 place.their.scri
- 0x07a0: 7074 732e 3c2f 4c49 3e0a 0a3c 4c49 3e0a pts.</LI>..<LI>.
- 0x07b0: 4c6f 6720 6669 6c65 7320 6172 6520 706c Log.files.are.pl
- 0x07c0: 6163 6564 2069 6e20 3c54 543e 2f76 6172 aced.in.<TT>/var
- 0x07d0: 2f6c 6f67 2f61 7061 6368 653c 2f54 543e /log/apache</TT>
- 0x07e0: 2c20 616e 6420 7769 6c6c 2062 6520 726f ,.and.will.be.ro
- 0x07f0: 7461 7465 640a 7765 656b 6c79 2e20 2054 tated.weekly...T
- 0x0800: 6865 2066 7265 7175 656e 6379 206f 6620 he.frequency.of.
- 0x0810: 726f 7461 7469 6f6e 2063 616e 2062 6520 rotation.can.be.
- 0x0820: 6561 7369 6c79 2063 6861 6e67 6564 2062 easily.changed.b
- 0x0830: 7920 6564 6974 696e 670a 3c54 543e 2f65 y.editing.<TT>/e
- 0x0840: 7463 2f6c 6f67 726f 7461 7465 2e64 2f61 tc/logrotate.d/a
- 0x0850: 7061 6368 653c 2f54 543e 2e3c 2f4c 493e pache</TT>.</LI>
- 0x0860: 0a0a 3c4c 493e 0a54 6865 2064 6566 6175 ..<LI>.The.defau
- 0x0870: 6c74 2064 6972 6563 746f 7279 2069 6e64 lt.directory.ind
- 0x0880: 6578 2069 7320 3c54 543e 696e 6465 782e ex.is.<TT>index.
- 0x0890: 6874 6d6c 3c2f 5454 3e2c 206d 6561 6e69 html</TT>,.meani
- 0x08a0: 6e67 2074 6861 7420 7265 7175 6573 7473 ng.that.requests
- 0x08b0: 0a66 6f72 2061 2064 6972 6563 746f 7279 .for.a.directory
- 0x08c0: 203c 5454 3e2f 666f 6f2f 6261 722f 3c2f .<TT>/foo/bar/</
- 0x08d0: 5454 3e20 7769 6c6c 2067 6976 6520 7468 TT>.will.give.th
- 0x08e0: 6520 636f 6e74 656e 7473 206f 6620 7468 e.contents.of.th
- 0x08f0: 6520 6669 6c65 203c 5454 3e2f 7661 722f e.file.<TT>/var/
- 0x0900: 7777 772f 666f 6f2f 6261 722f 696e 6465 www/foo/bar/inde
- 0x0910: 782e 6874 6d6c 3c2f 5454 3e0a 6966 2069 x.html</TT>.if.i
- 0x0920: 7420 6578 6973 7473 2028 6173 7375 6d69 t.exists.(assumi
- 0x0930: 6e67 2074 6861 7420 3c54 543e 2f76 6172 ng.that.<TT>/var
- 0x0940: 2f77 7777 3c2f 5454 3e20 6973 2079 6f75 /www</TT>.is.you
- 0x0950: 7220 3c54 543e 446f 6375 6d65 6e74 526f r.<TT>DocumentRo
- 0x0960: 6f74 3c2f 5454 3e29 2e3c 2f4c 493e 0a0a ot</TT>).</LI>..
- 0x0970: 3c4c 493e 0a55 7365 7220 6469 7265 6374 <LI>.User.direct
- 0x0980: 6f72 6965 7320 6172 6520 656e 6162 6c65 ories.are.enable
- 0x0990: 642c 2061 6e64 2075 7365 7220 646f 6375 d,.and.user.docu
- 0x09a0: 6d65 6e74 7320 7769 6c6c 2062 6520 6c6f ments.will.be.lo
- 0x09b0: 6f6b 6564 2066 6f72 0a69 6e20 7468 6520 oked.for.in.the.
- 0x09c0: 3c54 543e 7075 626c 6963 5f68 746d 6c3c <TT>public_html<
- 0x09d0: 2f54 543e 2064 6972 6563 746f 7279 206f /TT>.directory.o
- 0x09e0: 6620 7468 6520 7573 6572 7327 2068 6f6d f.the.users'.hom
- 0x09f0: 6573 2e20 2054 6865 7365 2064 6972 730a es...These.dirs.
- 0x0a00: 7368 6f75 6c64 2062 6520 756e 6465 7220 should.be.under.
- 0x0a10: 3c54 543e 2f68 6f6d 653c 2f54 543e 2c20 <TT>/home</TT>,.
- 0x0a20: 616e 6420 7573 6572 7320 7769 6c6c 206e and.users.will.n
- 0x0a30: 6f74 2062 6520 6162 6c65 2074 6f20 7379 ot.be.able.to.sy
- 0x0a40: 6d6c 696e 6b0a 746f 2066 696c 6573 2074 mlink.to.files.t
- 0x0a50: 6865 7920 646f 6e27 7420 6f77 6e2e 3c2f hey.don't.own.</
- 0x0a60: 4c49 3e0a 0a3c 2f55 4c3e 0a41 6c6c 2074 LI>..</UL>.All.t
- 0x0a70: 6865 2073 7461 6e64 6172 6420 6170 6163 he.standard.apac
- 0x0a80: 6865 206d 6f64 756c 6573 2061 7265 2061 he.modules.are.a
- 0x0a90: 7661 696c 6162 6c65 2077 6974 6820 7468 vailable.with.th
- 0x0aa0: 6973 2072 656c 6561 7365 2061 6e64 2061 is.release.and.a
- 0x0ab0: 7265 0a6e 6f77 206d 616e 6167 6564 2077 re.now.managed.w
- 0x0ac0: 6974 6820 6465 6263 6f6e 662e 2020 5479 ith.debconf...Ty
- 0x0ad0: 7065 203c 5454 3e64 706b 672d 7265 636f pe.<TT>dpkg-reco
- 0x0ae0: 6e66 6967 7572 6520 6170 6163 6865 3c2f nfigure.apache</
- 0x0af0: 5454 3e20 746f 0a73 656c 6563 7420 7768 TT>.to.select.wh
- 0x0b00: 6963 6820 6d6f 6475 6c65 7320 796f 7520 ich.modules.you.
- 0x0b10: 7761 6e74 2065 6e61 626c 6564 2e20 204d want.enabled...M
- 0x0b20: 616e 7920 6f74 6865 7220 6d6f 6475 6c65 any.other.module
- 0x0b30: 7320 6172 6520 6176 6169 6c61 626c 650a s.are.available.
- 0x0b40: 7468 726f 7567 6820 7468 6520 4465 6269 through.the.Debi
- 0x0b50: 616e 2070 6163 6b61 6765 2073 7973 7465 an.package.syste
- 0x0b60: 6d20 7769 7468 2074 6865 206e 616d 6573 m.with.the.names
- 0x0b70: 203c 5454 3e6c 6962 6170 6163 6865 2d6d .<TT>libapache-m
- 0x0b80: 6f64 2d2a 3c2f 5454 3e2e 0a49 6620 796f od-*</TT>..If.yo
- 0x0b90: 7520 6e65 6564 2074 6f20 636f 6d70 696c u.need.to.compil
- 0x0ba0: 6520 6120 6d6f 6475 6c65 2079 6f75 7273 e.a.module.yours
- 0x0bb0: 656c 662c 2079 6f75 2077 696c 6c20 6e65 elf,.you.will.ne
- 0x0bc0: 6564 2074 6f20 696e 7374 616c 6c20 7468 ed.to.install.th
- 0x0bd0: 650a 3c54 543e 6170 6163 6865 2d64 6576 e.<TT>apache-dev
- 0x0be0: 3c2f 5454 3e20 7061 636b 6167 652e 0a0a </TT>.package...
- 0x0bf0: 3c50 3e4d 6f72 6520 646f 6375 6d65 6e74 <P>More.document
- 0x0c00: 6174 696f 6e20 6f6e 2041 7061 6368 6520 ation.on.Apache.
- 0x0c10: 6361 6e20 6265 2066 6f75 6e64 206f 6e3a can.be.found.on:
- 0x0c20: 0a3c 554c 3e0a 3c4c 493e 0a54 6865 203c .<UL>.<LI>.The.<
- 0x0c30: 4120 4852 4546 3d22 2f64 6f63 2f61 7061 A.HREF="/doc/apa
- 0x0c40: 6368 652d 646f 632f 6d61 6e75 616c 2f22 che-doc/manual/"
- 0x0c50: 3e41 7061 6368 6520 646f 6375 6d65 6e74 >Apache.document
- 0x0c60: 6174 696f 6e3c 2f41 3e20 7374 6f72 6564 ation</A>.stored
- 0x0c70: 206f 6e20 796f 7572 2073 6572 7665 722e .on.your.server.
- 0x0c80: 3c2f 4c49 3e0a 0a3c 4c49 3e0a 5468 6520 </LI>..<LI>.The.
- 0x0c90: 3c41 2048 5245 463d 2268 7474 703a 2f2f <A.HREF="http://
- 0x0ca0: 7777 772e 6170 6163 6865 2e6f 7267 2f22 www.apache.org/"
- 0x0cb0: 3e41 7061 6368 6520 5072 6f6a 6563 743c >Apache.Project<
- 0x0cc0: 2f41 3e20 686f 6d65 2073 6974 652e 3c2f /A>.home.site.</
- 0x0cd0: 4c49 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 LI>..<LI>.The.<A
- 0x0ce0: 2048 5245 463d 2268 7474 703a 2f2f 7777 .HREF="http://ww
- 0x0cf0: 772e 6170 6163 6865 2d73 736c 2e6f 7267 w.apache-ssl.org
- 0x0d00: 2f22 3e41 7061 6368 652d 5353 4c3c 2f41 /">Apache-SSL</A
- 0x0d10: 3e20 686f 6d65 2073 6974 652e 3c2f 4c49 >.home.site.</LI
- 0x0d20: 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 2048 >..<LI>.The.<A.H
- 0x0d30: 5245 463d 2268 7474 703a 2f2f 7065 726c REF="http://perl
- 0x0d40: 2e61 7061 6368 652e 6f72 672f 223e 6d6f .apache.org/">mo
- 0x0d50: 6420 7065 726c 3c2f 413e 2068 6f6d 6520 d.perl</A>.home.
- 0x0d60: 7369 7465 2e3c 2f4c 493e 0a0a 3c4c 493e site.</LI>..<LI>
- 0x0d70: 0a54 6865 203c 4120 4852 4546 3d22 6874 .The.<A.HREF="ht
- 0x0d80: 7470 3a2f 2f77 7777 2e61 7061 6368 6577 tp://www.apachew
- 0x0d90: 6565 6b2e 636f 6d2f 223e 4170 6163 6865 eek.com/">Apache
- 0x0da0: 5765 656b 3c2f 413e 206e 6577 736c 6574 Week</A>.newslet
- 0x0db0: 7465 722e 3c2f 4c49 3e0a 0a3c 4c49 3e0a ter.</LI>..<LI>.
- 0x0dc0: 5468 6520 3c41 2048 5245 463d 2268 7474 The.<A.HREF="htt
- 0x0dd0: 703a 2f2f 7777 772e 6465 6269 616e 2e6f p://www.debian.o
- 0x0de0: 7267 2f64 6f63 2f22 3e44 6562 6961 6e20 rg/doc/">Debian.
- 0x0df0: 5072 6f6a 6563 740a 446f 6375 6d65 6e74 Project.Document
- 0x0e00: 6174 696f 6e3c 2f41 3e20 7768 6963 6820 ation</A>.which.
- 0x0e10: 636f 6e74 6169 6e73 2048 4f57 544f 732c contains.HOWTOs,
- 0x0e20: 2046 4151 732c 2061 6e64 2073 6f66 7477 .FAQs,.and.softw
- 0x0e30: 6172 6520 7570 6461 7465 732e 3c2f 4c49 are.updates.</LI
- 0x0e40: 3e0a 3c2f 554c 3e0a 0a3c 503e 596f 7520 >.</UL>..<P>You.
- 0x0e50: 6361 6e20 616c 736f 2063 6f6e 7375 6c74 can.also.consult
- 0x0e60: 2074 6865 206c 6973 7420 6f66 203c 4120 .the.list.of.<A.
- 0x0e70: 4852 4546 3d22 6874 7470 3a2f 2f77 7777 HREF="http://www
- 0x0e80: 2e62 6f75 7465 6c6c 2e63 6f6d 2f66 6171 .boutell.com/faq
- 0x0e90: 2f22 3e57 6f72 6c64 0a57 6964 6520 5765 /">World.Wide.We
- 0x0ea0: 6220 4672 6571 7565 6e74 6c79 2041 736b b.Frequently.Ask
- 0x0eb0: 6564 2051 7565 7374 696f 6e73 3c2f 413e ed.Questions</A>
- 0x0ec0: 2066 6f72 2069 6e66 6f72 6d61 7469 6f6e .for.information
- 0x0ed0: 2e0a 0a3c 4832 3e4c 6574 206f 7468 6572 ...<H2>Let.other
- 0x0ee0: 2070 656f 706c 6520 6b6e 6f77 2061 626f .people.know.abo
- 0x0ef0: 7574 2074 6869 7320 7365 7276 6572 3c2f ut.this.server</
- 0x0f00: 4832 3e0a 0a3c 4120 4852 4546 3d22 6874 H2>..<A.HREF="ht
- 0x0f10: 7470 3a2f 2f6e 6574 6372 6166 742e 636f tp://netcraft.co
- 0x0f20: 6d2f 223e 4e65 7463 7261 6674 3c2f 413e m/">Netcraft</A>
- 0x0f30: 2070 726f 7669 6465 7320 616e 2069 6e74 .provides.an.int
- 0x0f40: 6572 6573 7469 6e67 2066 7265 650a 7365 eresting.free.se
- 0x0f50: 7276 6963 6520 666f 7220 7765 6220 7369 rvice.for.web.si
- 0x0f60: 7465 206d 6f6e 6974 6f72 696e 6720 616e te.monitoring.an
- 0x0f70: 6420 7374 6174 6973 7469 6320 636f 6c6c d.statistic.coll
- 0x0f80: 6563 7469 6f6e 2e0a 596f 7520 6361 6e20 ection..You.can.
- 0x0f90: 6c65 7420 7468 656d 206b 6e6f 7720 6162 let.them.know.ab
- 0x0fa0: 6f75 7420 796f 7572 2073 6572 7665 7220 out.your.server.
- 0x0fb0: 7573 696e 6720 7468 6569 720a 3c41 2048 using.their.<A.H
- 0x0fc0: 5245 463d 2268 7474 703a 2f2f 7570 7469 REF="http://upti
- 0x0fd0: 6d65 2e6e 6574 6372 6166 742e 636f 6d2f me.netcraft.com/
- 0x0fe0: 223e 696e 7465 7266 6163 653c 2f41 3e2e ">interface</A>.
- 0x0ff0: 0a45 6e61 626c 696e 6720 7468 6520 6d6f .Enabling.the.mo
- 0x1000: 6e69 746f 7269 6e67 206f 6620 796f 7572 nitoring.of.your
- 0x1010: 2073 6572 7665 7220 7769 6c6c 2070 726f .server.will.pro
- 0x1020: 7669 6465 2061 2062 6574 7465 7220 676c vide.a.better.gl
- 0x1030: 6f62 616c 206f 7665 7276 6965 770a 6f66 obal.overview.of
- 0x1040: 2077 686f 2069 7320 7573 696e 6720 7768 .who.is.using.wh
- 0x1050: 6174 2061 6e64 2077 6865 7265 2c20 616e at.and.where,.an
- 0x1060: 6420 6974 2077 6f75 6c64 2067 6976 6520 d.it.would.give.
- 0x1070: 4465 6269 616e 2061 2062 6574 7465 720a Debian.a.better.
- 0x1080: 6f76 6572 7669 6577 206f 6620 7468 6520 overview.of.the.
- 0x1090: 6170 6163 6865 2070 6163 6b61 6765 2075 apache.package.u
- 0x10a0: 7361 6765 2e0a 0a3c 4832 3e41 626f 7574 sage...<H2>About
- 0x10b0: 2074 6869 7320 7061 6765 3c2f 4832 3e0a .this.page</H2>.
- 0x10c0: 0a3c 494d 4720 414c 4947 4e3d 2272 6967 .<IMG.ALIGN="rig
- 0x10d0: 6874 2220 414c 543d 2222 2048 4549 4748 ht".ALT="".HEIGH
- 0x10e0: 543d 2232 3437 2220 5749 4454 483d 2232 T="247".WIDTH="2
- 0x10f0: 3738 2220 5352 433d 2269 636f 6e73 2f6a 78".SRC="icons/j
- 0x1100: 6865 3036 312e 706e 6722 3e0a 0a3c 503e he061.png">..<P>
- 0x1110: 5468 6973 2069 7320 6120 706c 6163 6568 This.is.a.placeh
- 0x1120: 6f6c 6465 7220 7061 6765 2069 6e73 7461 older.page.insta
- 0x1130: 6c6c 6564 2062 7920 7468 6520 3c41 0a48 lled.by.the.<A.H
- 0x1140: 5245 463d 2268 7474 703a 2f2f 7777 772e REF="http://www.
- 0x1150: 6465 6269 616e 2e6f 7267 2f22 3e44 6562 debian.org/">Deb
- 0x1160: 6961 6e3c 2f41 3e0a 7265 6c65 6173 6520 ian</A>.release.
- 0x1170: 6f66 2074 6865 2061 7061 6368 6520 5765 of.the.apache.We
- 0x1180: 6220 7365 7276 6572 2070 6163 6b61 6765 b.server.package
- 0x1190: 2e0a 0a3c 503e 5468 6973 2063 6f6d 7075 ...<P>This.compu
- 0x11a0: 7465 7220 6861 7320 696e 7374 616c 6c65 ter.has.installe
- 0x11b0: 6420 7468 6520 4465 6269 616e 2047 4e55 d.the.Debian.GNU
- 0x11c0: 2f4c 696e 7578 206f 7065 7261 7469 6e67 /Linux.operating
- 0x11d0: 2073 7973 7465 6d2c 0a62 7574 2069 7420 .system,.but.it.
- 0x11e0: 6861 7320 3c73 7472 6f6e 673e 6e6f 7468 has.<strong>noth
- 0x11f0: 696e 6720 746f 2064 6f20 7769 7468 2074 ing.to.do.with.t
- 0x1200: 6865 2044 6562 6961 6e0a 5072 6f6a 6563 he.Debian.Projec
- 0x1210: 743c 2f73 7472 6f6e 673e 2e20 506c 6561 t</strong>..Plea
- 0x1220: 7365 2064 6f20 3c73 7472 6f6e 673e 6e6f se.do.<strong>no
- 0x1230: 743c 2f73 7472 6f6e 673e 2063 6f6e 7461 t</strong>.conta
- 0x1240: 6374 2074 6865 2044 6562 6961 6e0a 5072 ct.the.Debian.Pr
- 0x1250: 6f6a 6563 7420 6162 6f75 7420 6974 2e3c oject.about.it.<
- 0x1260: 2f50 3e0a 0a3c 503e 4966 2079 6f75 2066 /P>..<P>If.you.f
- 0x1270: 696e 6420 6120 6275 6720 696e 2074 6869 ind.a.bug.in.thi
- 0x1280: 7320 6170 6163 6865 2070 6163 6b61 6765 s.apache.package
- 0x1290: 2c20 6f72 2069 6e20 4170 6163 6865 2069 ,.or.in.Apache.i
- 0x12a0: 7473 656c 662c 0a70 6c65 6173 6520 6669 tself,.please.fi
- 0x12b0: 6c65 2061 2062 7567 2072 6570 6f72 7420 le.a.bug.report.
- 0x12c0: 6f6e 2069 742e 2020 496e 7374 7275 6374 on.it...Instruct
- 0x12d0: 696f 6e73 206f 6e20 646f 696e 6720 7468 ions.on.doing.th
- 0x12e0: 6973 2c20 616e 6420 7468 650a 6c69 7374 is,.and.the.list
- 0x12f0: 206f 6620 3c41 2048 5245 463d 2268 7474 .of.<A.HREF="htt
- 0x1300: 703a 2f2f 6275 6773 2e64 6562 6961 6e2e p://bugs.debian.
- 0x1310: 6f72 672f 7372 633a 6170 6163 6865 223e org/src:apache">
- 0x1320: 6b6e 6f77 6e20 6275 6773 3c2f 413e 206f known.bugs</A>.o
- 0x1330: 6620 7468 6973 0a70 6163 6b61 6765 2c20 f.this.package,.
- 0x1340: 6361 6e20 6265 2066 6f75 6e64 2069 6e20 can.be.found.in.
- 0x1350: 7468 6520 0a3c 4120 4852 4546 3d22 6874 the..<A.HREF="ht
- 0x1360: 7470 3a2f 2f77 7777 2e64 6562 6961 6e2e tp://www.debian.
- 0x1370: 6f72 672f 4275 6773 2f52 6570 6f72 7469 org/Bugs/Reporti
- 0x1380: 6e67 223e 4465 6269 616e 2042 7567 2054 ng">Debian.Bug.T
- 0x1390: 7261 636b 696e 6720 5379 7374 656d 3c2f racking.System</
- 0x13a0: 413e 2e0a 0a3c 503e 5468 616e 6b73 2066 A>...<P>Thanks.f
- 0x13b0: 6f72 2075 7369 6e67 2074 6869 7320 7061 or.using.this.pa
- 0x13c0: 636b 6167 652c 2061 6e64 2063 6f6e 6772 ckage,.and.congr
- 0x13d0: 6174 756c 6174 696f 6e73 2066 6f72 2079 atulations.for.y
- 0x13e0: 6f75 7220 6368 6f69 6365 206f 660a 6120 our.choice.of.a.
- 0x13f0: 4465 6269 616e 2073 7973 7465 6d21 3c2f Debian.system!</
- 0x1400: 503e 0a0a 3c44 4956 2061 6c69 676e 3d22 P>..<DIV.align="
- 0x1410: 6365 6e74 6572 223e 0a3c 6120 6872 6566 center">.<a.href
- 0x1420: 3d22 6874 7470 3a2f 2f77 7777 2e64 6562 ="http://www.deb
- 0x1430: 6961 6e2e 6f72 672f 223e 0a3c 494d 4720 ian.org/">.<IMG.
- 0x1440: 616c 6967 6e3d 226d 6964 646c 6522 2068 align="middle".h
- 0x1450: 6569 6768 743d 2233 3022 2077 6964 7468 eight="30".width
- 0x1460: 3d22 3235 2220 7372 633d 2269 636f 6e73 ="25".src="icons
- 0x1470: 2f64 6562 6961 6e2f 6f70 656e 6c6f 676f /debian/openlogo
- 0x1480: 2d32 352e 6a70 6722 2061 6c74 3d22 4465 -25.jpg".alt="De
- 0x1490: 6269 616e 223e 0a3c 2f61 3e0a 3c61 2068 bian">.</a>.<a.h
- 0x14a0: 7265 663d 2268 7474 703a 2f2f 7777 772e ref="http://www.
- 0x14b0: 6170 6163 6865 2e6f 7267 2f22 3e0a 3c49 apache.org/">.<I
- 0x14c0: 4d47 2061 6c69 676e 3d22 6d69 6464 6c65 MG.align="middle
- 0x14d0: 2220 6865 6967 6874 3d22 3332 2220 7769 ".height="32".wi
- 0x14e0: 6474 683d 2232 3539 2220 7372 633d 2269 dth="259".src="i
- 0x14f0: 636f 6e73 2f61 7061 6368 655f 7062 2e70 cons/apache_pb.p
- 0x1500: 6e67 2220 616c 743d 2241 7061 6368 6522 ng".alt="Apache"
- 0x1510: 3e0a 3c2f 613e 0a3c 2f44 4956 3e0a 0a3c >.</a>.</DIV>..<
- 0x1520: 212d 2d0a 2020 5468 6973 2070 6167 6520 !--...This.page.
- 0x1530: 7761 7320 696e 6974 6961 6c6c 7920 6372 was.initially.cr
- 0x1540: 6561 7465 6420 6279 204a 6f68 6e69 6520 eated.by.Johnie.
- 0x1550: 496e 6772 616d 2028 6874 7470 3a2f 2f6e Ingram.(http://n
- 0x1560: 6574 676f 642e 6e65 742f 290a 2020 4974 etgod.net/)...It
- 0x1570: 2077 6173 206c 6174 6572 2065 6469 7465 .was.later.edite
- 0x1580: 6420 6279 204d 6174 7468 6577 2057 696c d.by.Matthew.Wil
- 0x1590: 636f 7820 616e 6420 4a6f 7369 7020 526f cox.and.Josip.Ro
- 0x15a0: 6469 6e2e 0a20 204c 6173 7420 6d6f 6469 din....Last.modi
- 0x15b0: 6669 6564 3a20 2444 6174 653a 2032 3030 fied:.$Date:.200
- 0x15c0: 342f 3036 2f32 3020 3135 3a33 333a 3537 4/06/20.15:33:57
- 0x15d0: 2024 2e0a 2020 2d2d 3e0a 0a3c 2f42 4f44 .$....-->..</BOD
- 0x15e0: 593e 0a3c 2f48 544d 4c3e 0a Y>.</HTML>.
-22:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
- 0x0000: 4500 0034 1b6e 4000 4006 2154 7f00 0001 E..4.n@.@.!T....
- 0x0010: 7f00 0001 da70 0050 3758 8a49 377a a3a9 .....p.P7X.I7z..
- 0x0020: 8010 305f 10ea 0000 0101 080a 4ddc 9219 ..0_........M...
- 0x0030: 4ddc 9219 M...
-22:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
- 0x0000: 4500 0034 1b70 4000 4006 2152 7f00 0001 E..4.p@.@.!R....
- 0x0010: 7f00 0001 da70 0050 3758 8a49 377a a3a9 .....p.P7X.I7z..
- 0x0020: 8011 305f 0be1 0000 0101 080a 4ddc 9721 ..0_........M..!
- 0x0030: 4ddc 9219 M...
-22:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
- 0x0000: 4500 0034 1fe8 4000 4006 1cda 7f00 0001 E..4..@.@.......
- 0x0010: 7f00 0001 0050 da70 377a a3a9 3758 8a4a .....P.p7z..7X.J
- 0x0020: 8011 2000 1735 0000 0101 080a 4ddc 9723 .....5......M..#
- 0x0030: 4ddc 9721 M..!
-22:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
- 0x0000: 4500 0034 1b72 4000 4006 2150 7f00 0001 E..4.r@.@.!P....
- 0x0010: 7f00 0001 da70 0050 3758 8a4a 377a a3aa .....p.P7X.J7z..
- 0x0020: 8010 305f 06d4 0000 0101 080a 4ddc 9723 ..0_........M..#
- 0x0030: 4ddc 9723 M..#
diff --git a/contrib/tcpdump/tests/print-capXX.out b/contrib/tcpdump/tests/print-capXX.out
deleted file mode 100644
index 5062a85a9d61..000000000000
--- a/contrib/tcpdump/tests/print-capXX.out
+++ /dev/null
@@ -1,419 +0,0 @@
-22:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
- 0x0010: 003c 1b68 4000 4006 2152 7f00 0001 7f00 .<.h@.@.!R......
- 0x0020: 0001 da70 0050 3758 897e 0000 0000 a002 ...p.P7X.~......
- 0x0030: 7fff 1421 0000 0204 400c 0402 080a 4ddc ...!....@.....M.
- 0x0040: 9216 0000 0000 0103 0302 ..........
-22:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
- 0x0010: 003c 0000 4000 4006 3cba 7f00 0001 7f00 .<..@.@.<.......
- 0x0020: 0001 0050 da70 377a 8df1 3758 897f a012 ...P.p7z..7X....
- 0x0030: 7fff 6eb1 0000 0204 400c 0402 080a 4ddc ..n.....@.....M.
- 0x0040: 9216 4ddc 9216 0103 0302 ..M.......
-22:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
- 0x0010: 0034 1b6a 4000 4006 2158 7f00 0001 7f00 .4.j@.@.!X......
- 0x0020: 0001 da70 0050 3758 897f 377a 8df2 8010 ...p.P7X..7z....
- 0x0030: 2000 37d0 0000 0101 080a 4ddc 9216 4ddc ..7.......M...M.
- 0x0040: 9216 ..
-22:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
- 0x0010: 00fe 1b6c 4000 4006 208c 7f00 0001 7f00 ...l@.@.........
- 0x0020: 0001 da70 0050 3758 897f 377a 8df2 8018 ...p.P7X..7z....
- 0x0030: 2000 fef2 0000 0101 080a 4ddc 9217 4ddc ..........M...M.
- 0x0040: 9216 4745 5420 2f20 4854 5450 2f31 2e31 ..GET./.HTTP/1.1
- 0x0050: 0d0a 486f 7374 3a20 6c6f 6361 6c68 6f73 ..Host:.localhos
- 0x0060: 740d 0a55 7365 722d 4167 656e 743a 2045 t..User-Agent:.E
- 0x0070: 4c69 6e6b 732f 302e 3130 2e34 2d37 2d64 Links/0.10.4-7-d
- 0x0080: 6562 6961 6e20 2874 6578 746d 6f64 653b ebian.(textmode;
- 0x0090: 204c 696e 7578 2032 2e36 2e31 312d 312d .Linux.2.6.11-1-
- 0x00a0: 3638 362d 736d 7020 6936 3836 3b20 3133 686-smp.i686;.13
- 0x00b0: 3278 3536 2d32 290d 0a41 6363 6570 743a 2x56-2)..Accept:
- 0x00c0: 202a 2f2a 0d0a 4163 6365 7074 2d45 6e63 .*/*..Accept-Enc
- 0x00d0: 6f64 696e 673a 2067 7a69 700d 0a41 6363 oding:.gzip..Acc
- 0x00e0: 6570 742d 4c61 6e67 7561 6765 3a20 656e ept-Language:.en
- 0x00f0: 0d0a 436f 6e6e 6563 7469 6f6e 3a20 4b65 ..Connection:.Ke
- 0x0100: 6570 2d41 6c69 7665 0d0a 0d0a ep-Alive....
-22:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
- 0x0010: 0034 1fe4 4000 4006 1cde 7f00 0001 7f00 .4..@.@.........
- 0x0020: 0001 0050 da70 377a 8df2 3758 8a49 8010 ...P.p7z..7X.I..
- 0x0030: 2000 3703 0000 0101 080a 4ddc 9218 4ddc ..7.......M...M.
- 0x0040: 9217 ..
-22:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
- 0x0010: 15eb 1fe6 4000 4006 0725 7f00 0001 7f00 ....@.@..%......
- 0x0020: 0001 0050 da70 377a 8df2 3758 8a49 8018 ...P.p7z..7X.I..
- 0x0030: 2000 13e0 0000 0101 080a 4ddc 9219 4ddc ..........M...M.
- 0x0040: 9217 4854 5450 2f31 2e31 2032 3030 204f ..HTTP/1.1.200.O
- 0x0050: 4b0d 0a44 6174 653a 2057 6564 2c20 3036 K..Date:.Wed,.06
- 0x0060: 204a 756c 2032 3030 3520 3033 3a35 373a .Jul.2005.03:57:
- 0x0070: 3335 2047 4d54 0d0a 5365 7276 6572 3a20 35.GMT..Server:.
- 0x0080: 4170 6163 6865 2f31 2e33 2e33 330d 0a4c Apache/1.3.33..L
- 0x0090: 6173 742d 4d6f 6469 6669 6564 3a20 5375 ast-Modified:.Su
- 0x00a0: 6e2c 2031 3520 4175 6720 3230 3034 2030 n,.15.Aug.2004.0
- 0x00b0: 303a 3433 3a34 3120 474d 540d 0a45 5461 0:43:41.GMT..ETa
- 0x00c0: 673a 2022 3665 3830 6630 2d31 3438 612d g:."6e80f0-148a-
- 0x00d0: 3431 3165 6231 6264 220d 0a41 6363 6570 411eb1bd"..Accep
- 0x00e0: 742d 5261 6e67 6573 3a20 6279 7465 730d t-Ranges:.bytes.
- 0x00f0: 0a43 6f6e 7465 6e74 2d4c 656e 6774 683a .Content-Length:
- 0x0100: 2035 3235 380d 0a4b 6565 702d 416c 6976 .5258..Keep-Aliv
- 0x0110: 653a 2074 696d 656f 7574 3d31 352c 206d e:.timeout=15,.m
- 0x0120: 6178 3d31 3030 0d0a 436f 6e6e 6563 7469 ax=100..Connecti
- 0x0130: 6f6e 3a20 4b65 6570 2d41 6c69 7665 0d0a on:.Keep-Alive..
- 0x0140: 436f 6e74 656e 742d 5479 7065 3a20 7465 Content-Type:.te
- 0x0150: 7874 2f68 746d 6c3b 2063 6861 7273 6574 xt/html;.charset
- 0x0160: 3d69 736f 2d38 3835 392d 310d 0a0d 0a3c =iso-8859-1....<
- 0x0170: 2144 4f43 5459 5045 2048 544d 4c20 5055 !DOCTYPE.HTML.PU
- 0x0180: 424c 4943 2022 2d2f 2f57 3343 2f2f 4454 BLIC."-//W3C//DT
- 0x0190: 4420 4854 4d4c 2034 2e30 3120 5472 616e D.HTML.4.01.Tran
- 0x01a0: 7369 7469 6f6e 616c 2f2f 454e 223e 0a3c sitional//EN">.<
- 0x01b0: 4854 4d4c 3e0a 3c48 4541 443e 0a20 2020 HTML>.<HEAD>....
- 0x01c0: 3c4d 4554 4120 4854 5450 2d45 5155 4956 <META.HTTP-EQUIV
- 0x01d0: 3d22 436f 6e74 656e 742d 5479 7065 2220 ="Content-Type".
- 0x01e0: 434f 4e54 454e 543d 2274 6578 742f 6874 CONTENT="text/ht
- 0x01f0: 6d6c 3b20 6368 6172 7365 743d 6973 6f2d ml;.charset=iso-
- 0x0200: 3838 3539 2d31 223e 0a20 2020 3c4d 4554 8859-1">....<MET
- 0x0210: 4120 4e41 4d45 3d22 4465 7363 7269 7074 A.NAME="Descript
- 0x0220: 696f 6e22 2043 4f4e 5445 4e54 3d22 5468 ion".CONTENT="Th
- 0x0230: 6520 696e 6974 6961 6c20 696e 7374 616c e.initial.instal
- 0x0240: 6c61 7469 6f6e 206f 6620 4465 6269 616e lation.of.Debian
- 0x0250: 2061 7061 6368 652e 223e 0a20 2020 3c54 .apache.">....<T
- 0x0260: 4954 4c45 3e50 6c61 6365 686f 6c64 6572 ITLE>Placeholder
- 0x0270: 2070 6167 653c 2f54 4954 4c45 3e0a 3c2f .page</TITLE>.</
- 0x0280: 4845 4144 3e0a 3c42 4f44 5920 5445 5854 HEAD>.<BODY.TEXT
- 0x0290: 3d22 2330 3030 3030 3022 2042 4743 4f4c ="#000000".BGCOL
- 0x02a0: 4f52 3d22 2346 4646 4646 4622 204c 494e OR="#FFFFFF".LIN
- 0x02b0: 4b3d 2223 3030 3030 4546 2220 564c 494e K="#0000EF".VLIN
- 0x02c0: 4b3d 2223 3535 3138 3841 2220 414c 494e K="#55188A".ALIN
- 0x02d0: 4b3d 2223 4646 3030 3030 223e 0a0a 3c48 K="#FF0000">..<H
- 0x02e0: 313e 506c 6163 6568 6f6c 6465 7220 7061 1>Placeholder.pa
- 0x02f0: 6765 3c2f 4831 3e0a 3c48 323e 4966 2079 ge</H1>.<H2>If.y
- 0x0300: 6f75 2061 7265 206a 7573 7420 6272 6f77 ou.are.just.brow
- 0x0310: 7369 6e67 2074 6865 2077 6562 3c2f 6832 sing.the.web</h2
- 0x0320: 3e0a 0a3c 503e 5468 6520 6f77 6e65 7220 >..<P>The.owner.
- 0x0330: 6f66 2074 6869 7320 7765 6220 7369 7465 of.this.web.site
- 0x0340: 2068 6173 206e 6f74 2070 7574 2075 7020 .has.not.put.up.
- 0x0350: 616e 7920 7765 6220 7061 6765 7320 7965 any.web.pages.ye
- 0x0360: 742e 0a50 6c65 6173 6520 636f 6d65 2062 t..Please.come.b
- 0x0370: 6163 6b20 6c61 7465 722e 3c2f 503e 0a0a ack.later.</P>..
- 0x0380: 3c50 3e3c 534d 414c 4c3e 3c43 4954 453e <P><SMALL><CITE>
- 0x0390: 4d6f 7665 2061 6c6f 6e67 2c20 6e6f 7468 Move.along,.noth
- 0x03a0: 696e 6720 746f 2073 6565 2068 6572 652e ing.to.see.here.
- 0x03b0: 2e2e 3c2f 4349 5445 3e20 3a2d 293c 2f53 ..</CITE>.:-)</S
- 0x03c0: 4d41 4c4c 3e3c 2f50 3e0a 0a3c 4832 3e49 MALL></P>..<H2>I
- 0x03d0: 6620 796f 7520 6172 6520 7472 7969 6e67 f.you.are.trying
- 0x03e0: 2074 6f20 6c6f 6361 7465 2074 6865 2061 .to.locate.the.a
- 0x03f0: 646d 696e 6973 7472 6174 6f72 206f 6620 dministrator.of.
- 0x0400: 7468 6973 206d 6163 6869 6e65 3c2f 4832 this.machine</H2
- 0x0410: 3e0a 0a3c 503e 4966 2079 6f75 2077 616e >..<P>If.you.wan
- 0x0420: 7420 746f 2072 6570 6f72 7420 736f 6d65 t.to.report.some
- 0x0430: 7468 696e 6720 6162 6f75 7420 7468 6973 thing.about.this
- 0x0440: 2068 6f73 7427 7320 6265 6861 7669 6f72 .host's.behavior
- 0x0450: 2c20 706c 6561 7365 0a63 6f6e 7461 6374 ,.please.contact
- 0x0460: 2074 6865 2049 6e74 6572 6e65 7420 5365 .the.Internet.Se
- 0x0470: 7276 6963 6520 5072 6f76 6964 6572 2028 rvice.Provider.(
- 0x0480: 4953 5029 2069 6e76 6f6c 7665 6420 6469 ISP).involved.di
- 0x0490: 7265 6374 6c79 2e3c 2f50 3e0a 0a3c 503e rectly.</P>..<P>
- 0x04a0: 5365 6520 7468 6520 3c41 2068 7265 663d See.the.<A.href=
- 0x04b0: 2268 7474 703a 2f2f 7777 772e 6162 7573 "http://www.abus
- 0x04c0: 652e 6e65 742f 223e 4e65 7477 6f72 6b20 e.net/">Network.
- 0x04d0: 4162 7573 650a 436c 6561 7269 6e67 686f Abuse.Clearingho
- 0x04e0: 7573 653c 2f41 3e20 666f 7220 686f 7720 use</A>.for.how.
- 0x04f0: 746f 2064 6f20 7468 6973 2e3c 2f50 3e0a to.do.this.</P>.
- 0x0500: 0a3c 4832 3e49 6620 796f 7520 6172 6520 .<H2>If.you.are.
- 0x0510: 7468 6520 6164 6d69 6e69 7374 7261 746f the.administrato
- 0x0520: 7220 6f66 2074 6869 7320 6d61 6368 696e r.of.this.machin
- 0x0530: 653c 2f48 323e 0a0a 3c50 3e54 6865 2069 e</H2>..<P>The.i
- 0x0540: 6e69 7469 616c 2069 6e73 7461 6c6c 6174 nitial.installat
- 0x0550: 696f 6e20 6f66 203c 4120 6872 6566 3d22 ion.of.<A.href="
- 0x0560: 6874 7470 3a2f 2f77 7777 2e64 6562 6961 http://www.debia
- 0x0570: 6e2e 6f72 672f 223e 4465 6269 616e 2773 n.org/">Debian's
- 0x0580: 0a61 7061 6368 653c 2f41 3e20 7765 6220 .apache</A>.web.
- 0x0590: 7365 7276 6572 2070 6163 6b61 6765 2077 server.package.w
- 0x05a0: 6173 2073 7563 6365 7373 6675 6c2e 3c2f as.successful.</
- 0x05b0: 503e 0a0a 3c50 3e3c 5354 524f 4e47 3e59 P>..<P><STRONG>Y
- 0x05c0: 6f75 2073 686f 756c 6420 7265 706c 6163 ou.should.replac
- 0x05d0: 6520 7468 6973 2070 6167 6520 7769 7468 e.this.page.with
- 0x05e0: 2079 6f75 7220 6f77 6e20 7765 6220 7061 .your.own.web.pa
- 0x05f0: 6765 7320 6173 0a73 6f6f 6e20 6173 2070 ges.as.soon.as.p
- 0x0600: 6f73 7369 626c 652e 3c2f 5354 524f 4e47 ossible.</STRONG
- 0x0610: 3e3c 2f50 3e0a 0a3c 503e 556e 6c65 7373 ></P>..<P>Unless
- 0x0620: 2079 6f75 2063 6861 6e67 6564 2069 7473 .you.changed.its
- 0x0630: 2063 6f6e 6669 6775 7261 7469 6f6e 2c20 .configuration,.
- 0x0640: 796f 7572 206e 6577 2073 6572 7665 7220 your.new.server.
- 0x0650: 6973 2063 6f6e 6669 6775 7265 6420 6173 is.configured.as
- 0x0660: 2066 6f6c 6c6f 7773 3a0a 3c55 4c3e 0a3c .follows:.<UL>.<
- 0x0670: 4c49 3e0a 436f 6e66 6967 7572 6174 696f LI>.Configuratio
- 0x0680: 6e20 6669 6c65 7320 6361 6e20 6265 2066 n.files.can.be.f
- 0x0690: 6f75 6e64 2069 6e20 3c54 543e 2f65 7463 ound.in.<TT>/etc
- 0x06a0: 2f61 7061 6368 653c 2f54 543e 2e3c 2f4c /apache</TT>.</L
- 0x06b0: 493e 0a0a 3c4c 493e 0a54 6865 203c 5454 I>..<LI>.The.<TT
- 0x06c0: 3e44 6f63 756d 656e 7452 6f6f 743c 2f54 >DocumentRoot</T
- 0x06d0: 543e 2c20 7768 6963 6820 6973 2074 6865 T>,.which.is.the
- 0x06e0: 2064 6972 6563 746f 7279 2075 6e64 6572 .directory.under
- 0x06f0: 2077 6869 6368 2061 6c6c 2079 6f75 720a .which.all.your.
- 0x0700: 4854 4d4c 2066 696c 6573 2073 686f 756c HTML.files.shoul
- 0x0710: 6420 6578 6973 742c 2069 7320 7365 7420 d.exist,.is.set.
- 0x0720: 746f 203c 5454 3e2f 7661 722f 7777 773c to.<TT>/var/www<
- 0x0730: 2f54 543e 2e3c 2f4c 493e 0a0a 3c4c 493e /TT>.</LI>..<LI>
- 0x0740: 0a43 4749 2073 6372 6970 7473 2061 7265 .CGI.scripts.are
- 0x0750: 206c 6f6f 6b65 6420 666f 7220 696e 203c .looked.for.in.<
- 0x0760: 5454 3e2f 7573 722f 6c69 622f 6367 692d TT>/usr/lib/cgi-
- 0x0770: 6269 6e3c 2f54 543e 2c20 7768 6963 6820 bin</TT>,.which.
- 0x0780: 6973 2077 6865 7265 0a44 6562 6961 6e20 is.where.Debian.
- 0x0790: 7061 636b 6167 6573 2077 696c 6c20 706c packages.will.pl
- 0x07a0: 6163 6520 7468 6569 7220 7363 7269 7074 ace.their.script
- 0x07b0: 732e 3c2f 4c49 3e0a 0a3c 4c49 3e0a 4c6f s.</LI>..<LI>.Lo
- 0x07c0: 6720 6669 6c65 7320 6172 6520 706c 6163 g.files.are.plac
- 0x07d0: 6564 2069 6e20 3c54 543e 2f76 6172 2f6c ed.in.<TT>/var/l
- 0x07e0: 6f67 2f61 7061 6368 653c 2f54 543e 2c20 og/apache</TT>,.
- 0x07f0: 616e 6420 7769 6c6c 2062 6520 726f 7461 and.will.be.rota
- 0x0800: 7465 640a 7765 656b 6c79 2e20 2054 6865 ted.weekly...The
- 0x0810: 2066 7265 7175 656e 6379 206f 6620 726f .frequency.of.ro
- 0x0820: 7461 7469 6f6e 2063 616e 2062 6520 6561 tation.can.be.ea
- 0x0830: 7369 6c79 2063 6861 6e67 6564 2062 7920 sily.changed.by.
- 0x0840: 6564 6974 696e 670a 3c54 543e 2f65 7463 editing.<TT>/etc
- 0x0850: 2f6c 6f67 726f 7461 7465 2e64 2f61 7061 /logrotate.d/apa
- 0x0860: 6368 653c 2f54 543e 2e3c 2f4c 493e 0a0a che</TT>.</LI>..
- 0x0870: 3c4c 493e 0a54 6865 2064 6566 6175 6c74 <LI>.The.default
- 0x0880: 2064 6972 6563 746f 7279 2069 6e64 6578 .directory.index
- 0x0890: 2069 7320 3c54 543e 696e 6465 782e 6874 .is.<TT>index.ht
- 0x08a0: 6d6c 3c2f 5454 3e2c 206d 6561 6e69 6e67 ml</TT>,.meaning
- 0x08b0: 2074 6861 7420 7265 7175 6573 7473 0a66 .that.requests.f
- 0x08c0: 6f72 2061 2064 6972 6563 746f 7279 203c or.a.directory.<
- 0x08d0: 5454 3e2f 666f 6f2f 6261 722f 3c2f 5454 TT>/foo/bar/</TT
- 0x08e0: 3e20 7769 6c6c 2067 6976 6520 7468 6520 >.will.give.the.
- 0x08f0: 636f 6e74 656e 7473 206f 6620 7468 6520 contents.of.the.
- 0x0900: 6669 6c65 203c 5454 3e2f 7661 722f 7777 file.<TT>/var/ww
- 0x0910: 772f 666f 6f2f 6261 722f 696e 6465 782e w/foo/bar/index.
- 0x0920: 6874 6d6c 3c2f 5454 3e0a 6966 2069 7420 html</TT>.if.it.
- 0x0930: 6578 6973 7473 2028 6173 7375 6d69 6e67 exists.(assuming
- 0x0940: 2074 6861 7420 3c54 543e 2f76 6172 2f77 .that.<TT>/var/w
- 0x0950: 7777 3c2f 5454 3e20 6973 2079 6f75 7220 ww</TT>.is.your.
- 0x0960: 3c54 543e 446f 6375 6d65 6e74 526f 6f74 <TT>DocumentRoot
- 0x0970: 3c2f 5454 3e29 2e3c 2f4c 493e 0a0a 3c4c </TT>).</LI>..<L
- 0x0980: 493e 0a55 7365 7220 6469 7265 6374 6f72 I>.User.director
- 0x0990: 6965 7320 6172 6520 656e 6162 6c65 642c ies.are.enabled,
- 0x09a0: 2061 6e64 2075 7365 7220 646f 6375 6d65 .and.user.docume
- 0x09b0: 6e74 7320 7769 6c6c 2062 6520 6c6f 6f6b nts.will.be.look
- 0x09c0: 6564 2066 6f72 0a69 6e20 7468 6520 3c54 ed.for.in.the.<T
- 0x09d0: 543e 7075 626c 6963 5f68 746d 6c3c 2f54 T>public_html</T
- 0x09e0: 543e 2064 6972 6563 746f 7279 206f 6620 T>.directory.of.
- 0x09f0: 7468 6520 7573 6572 7327 2068 6f6d 6573 the.users'.homes
- 0x0a00: 2e20 2054 6865 7365 2064 6972 730a 7368 ...These.dirs.sh
- 0x0a10: 6f75 6c64 2062 6520 756e 6465 7220 3c54 ould.be.under.<T
- 0x0a20: 543e 2f68 6f6d 653c 2f54 543e 2c20 616e T>/home</TT>,.an
- 0x0a30: 6420 7573 6572 7320 7769 6c6c 206e 6f74 d.users.will.not
- 0x0a40: 2062 6520 6162 6c65 2074 6f20 7379 6d6c .be.able.to.syml
- 0x0a50: 696e 6b0a 746f 2066 696c 6573 2074 6865 ink.to.files.the
- 0x0a60: 7920 646f 6e27 7420 6f77 6e2e 3c2f 4c49 y.don't.own.</LI
- 0x0a70: 3e0a 0a3c 2f55 4c3e 0a41 6c6c 2074 6865 >..</UL>.All.the
- 0x0a80: 2073 7461 6e64 6172 6420 6170 6163 6865 .standard.apache
- 0x0a90: 206d 6f64 756c 6573 2061 7265 2061 7661 .modules.are.ava
- 0x0aa0: 696c 6162 6c65 2077 6974 6820 7468 6973 ilable.with.this
- 0x0ab0: 2072 656c 6561 7365 2061 6e64 2061 7265 .release.and.are
- 0x0ac0: 0a6e 6f77 206d 616e 6167 6564 2077 6974 .now.managed.wit
- 0x0ad0: 6820 6465 6263 6f6e 662e 2020 5479 7065 h.debconf...Type
- 0x0ae0: 203c 5454 3e64 706b 672d 7265 636f 6e66 .<TT>dpkg-reconf
- 0x0af0: 6967 7572 6520 6170 6163 6865 3c2f 5454 igure.apache</TT
- 0x0b00: 3e20 746f 0a73 656c 6563 7420 7768 6963 >.to.select.whic
- 0x0b10: 6820 6d6f 6475 6c65 7320 796f 7520 7761 h.modules.you.wa
- 0x0b20: 6e74 2065 6e61 626c 6564 2e20 204d 616e nt.enabled...Man
- 0x0b30: 7920 6f74 6865 7220 6d6f 6475 6c65 7320 y.other.modules.
- 0x0b40: 6172 6520 6176 6169 6c61 626c 650a 7468 are.available.th
- 0x0b50: 726f 7567 6820 7468 6520 4465 6269 616e rough.the.Debian
- 0x0b60: 2070 6163 6b61 6765 2073 7973 7465 6d20 .package.system.
- 0x0b70: 7769 7468 2074 6865 206e 616d 6573 203c with.the.names.<
- 0x0b80: 5454 3e6c 6962 6170 6163 6865 2d6d 6f64 TT>libapache-mod
- 0x0b90: 2d2a 3c2f 5454 3e2e 0a49 6620 796f 7520 -*</TT>..If.you.
- 0x0ba0: 6e65 6564 2074 6f20 636f 6d70 696c 6520 need.to.compile.
- 0x0bb0: 6120 6d6f 6475 6c65 2079 6f75 7273 656c a.module.yoursel
- 0x0bc0: 662c 2079 6f75 2077 696c 6c20 6e65 6564 f,.you.will.need
- 0x0bd0: 2074 6f20 696e 7374 616c 6c20 7468 650a .to.install.the.
- 0x0be0: 3c54 543e 6170 6163 6865 2d64 6576 3c2f <TT>apache-dev</
- 0x0bf0: 5454 3e20 7061 636b 6167 652e 0a0a 3c50 TT>.package...<P
- 0x0c00: 3e4d 6f72 6520 646f 6375 6d65 6e74 6174 >More.documentat
- 0x0c10: 696f 6e20 6f6e 2041 7061 6368 6520 6361 ion.on.Apache.ca
- 0x0c20: 6e20 6265 2066 6f75 6e64 206f 6e3a 0a3c n.be.found.on:.<
- 0x0c30: 554c 3e0a 3c4c 493e 0a54 6865 203c 4120 UL>.<LI>.The.<A.
- 0x0c40: 4852 4546 3d22 2f64 6f63 2f61 7061 6368 HREF="/doc/apach
- 0x0c50: 652d 646f 632f 6d61 6e75 616c 2f22 3e41 e-doc/manual/">A
- 0x0c60: 7061 6368 6520 646f 6375 6d65 6e74 6174 pache.documentat
- 0x0c70: 696f 6e3c 2f41 3e20 7374 6f72 6564 206f ion</A>.stored.o
- 0x0c80: 6e20 796f 7572 2073 6572 7665 722e 3c2f n.your.server.</
- 0x0c90: 4c49 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 LI>..<LI>.The.<A
- 0x0ca0: 2048 5245 463d 2268 7474 703a 2f2f 7777 .HREF="http://ww
- 0x0cb0: 772e 6170 6163 6865 2e6f 7267 2f22 3e41 w.apache.org/">A
- 0x0cc0: 7061 6368 6520 5072 6f6a 6563 743c 2f41 pache.Project</A
- 0x0cd0: 3e20 686f 6d65 2073 6974 652e 3c2f 4c49 >.home.site.</LI
- 0x0ce0: 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 2048 >..<LI>.The.<A.H
- 0x0cf0: 5245 463d 2268 7474 703a 2f2f 7777 772e REF="http://www.
- 0x0d00: 6170 6163 6865 2d73 736c 2e6f 7267 2f22 apache-ssl.org/"
- 0x0d10: 3e41 7061 6368 652d 5353 4c3c 2f41 3e20 >Apache-SSL</A>.
- 0x0d20: 686f 6d65 2073 6974 652e 3c2f 4c49 3e0a home.site.</LI>.
- 0x0d30: 0a3c 4c49 3e0a 5468 6520 3c41 2048 5245 .<LI>.The.<A.HRE
- 0x0d40: 463d 2268 7474 703a 2f2f 7065 726c 2e61 F="http://perl.a
- 0x0d50: 7061 6368 652e 6f72 672f 223e 6d6f 6420 pache.org/">mod.
- 0x0d60: 7065 726c 3c2f 413e 2068 6f6d 6520 7369 perl</A>.home.si
- 0x0d70: 7465 2e3c 2f4c 493e 0a0a 3c4c 493e 0a54 te.</LI>..<LI>.T
- 0x0d80: 6865 203c 4120 4852 4546 3d22 6874 7470 he.<A.HREF="http
- 0x0d90: 3a2f 2f77 7777 2e61 7061 6368 6577 6565 ://www.apachewee
- 0x0da0: 6b2e 636f 6d2f 223e 4170 6163 6865 5765 k.com/">ApacheWe
- 0x0db0: 656b 3c2f 413e 206e 6577 736c 6574 7465 ek</A>.newslette
- 0x0dc0: 722e 3c2f 4c49 3e0a 0a3c 4c49 3e0a 5468 r.</LI>..<LI>.Th
- 0x0dd0: 6520 3c41 2048 5245 463d 2268 7474 703a e.<A.HREF="http:
- 0x0de0: 2f2f 7777 772e 6465 6269 616e 2e6f 7267 //www.debian.org
- 0x0df0: 2f64 6f63 2f22 3e44 6562 6961 6e20 5072 /doc/">Debian.Pr
- 0x0e00: 6f6a 6563 740a 446f 6375 6d65 6e74 6174 oject.Documentat
- 0x0e10: 696f 6e3c 2f41 3e20 7768 6963 6820 636f ion</A>.which.co
- 0x0e20: 6e74 6169 6e73 2048 4f57 544f 732c 2046 ntains.HOWTOs,.F
- 0x0e30: 4151 732c 2061 6e64 2073 6f66 7477 6172 AQs,.and.softwar
- 0x0e40: 6520 7570 6461 7465 732e 3c2f 4c49 3e0a e.updates.</LI>.
- 0x0e50: 3c2f 554c 3e0a 0a3c 503e 596f 7520 6361 </UL>..<P>You.ca
- 0x0e60: 6e20 616c 736f 2063 6f6e 7375 6c74 2074 n.also.consult.t
- 0x0e70: 6865 206c 6973 7420 6f66 203c 4120 4852 he.list.of.<A.HR
- 0x0e80: 4546 3d22 6874 7470 3a2f 2f77 7777 2e62 EF="http://www.b
- 0x0e90: 6f75 7465 6c6c 2e63 6f6d 2f66 6171 2f22 outell.com/faq/"
- 0x0ea0: 3e57 6f72 6c64 0a57 6964 6520 5765 6220 >World.Wide.Web.
- 0x0eb0: 4672 6571 7565 6e74 6c79 2041 736b 6564 Frequently.Asked
- 0x0ec0: 2051 7565 7374 696f 6e73 3c2f 413e 2066 .Questions</A>.f
- 0x0ed0: 6f72 2069 6e66 6f72 6d61 7469 6f6e 2e0a or.information..
- 0x0ee0: 0a3c 4832 3e4c 6574 206f 7468 6572 2070 .<H2>Let.other.p
- 0x0ef0: 656f 706c 6520 6b6e 6f77 2061 626f 7574 eople.know.about
- 0x0f00: 2074 6869 7320 7365 7276 6572 3c2f 4832 .this.server</H2
- 0x0f10: 3e0a 0a3c 4120 4852 4546 3d22 6874 7470 >..<A.HREF="http
- 0x0f20: 3a2f 2f6e 6574 6372 6166 742e 636f 6d2f ://netcraft.com/
- 0x0f30: 223e 4e65 7463 7261 6674 3c2f 413e 2070 ">Netcraft</A>.p
- 0x0f40: 726f 7669 6465 7320 616e 2069 6e74 6572 rovides.an.inter
- 0x0f50: 6573 7469 6e67 2066 7265 650a 7365 7276 esting.free.serv
- 0x0f60: 6963 6520 666f 7220 7765 6220 7369 7465 ice.for.web.site
- 0x0f70: 206d 6f6e 6974 6f72 696e 6720 616e 6420 .monitoring.and.
- 0x0f80: 7374 6174 6973 7469 6320 636f 6c6c 6563 statistic.collec
- 0x0f90: 7469 6f6e 2e0a 596f 7520 6361 6e20 6c65 tion..You.can.le
- 0x0fa0: 7420 7468 656d 206b 6e6f 7720 6162 6f75 t.them.know.abou
- 0x0fb0: 7420 796f 7572 2073 6572 7665 7220 7573 t.your.server.us
- 0x0fc0: 696e 6720 7468 6569 720a 3c41 2048 5245 ing.their.<A.HRE
- 0x0fd0: 463d 2268 7474 703a 2f2f 7570 7469 6d65 F="http://uptime
- 0x0fe0: 2e6e 6574 6372 6166 742e 636f 6d2f 223e .netcraft.com/">
- 0x0ff0: 696e 7465 7266 6163 653c 2f41 3e2e 0a45 interface</A>..E
- 0x1000: 6e61 626c 696e 6720 7468 6520 6d6f 6e69 nabling.the.moni
- 0x1010: 746f 7269 6e67 206f 6620 796f 7572 2073 toring.of.your.s
- 0x1020: 6572 7665 7220 7769 6c6c 2070 726f 7669 erver.will.provi
- 0x1030: 6465 2061 2062 6574 7465 7220 676c 6f62 de.a.better.glob
- 0x1040: 616c 206f 7665 7276 6965 770a 6f66 2077 al.overview.of.w
- 0x1050: 686f 2069 7320 7573 696e 6720 7768 6174 ho.is.using.what
- 0x1060: 2061 6e64 2077 6865 7265 2c20 616e 6420 .and.where,.and.
- 0x1070: 6974 2077 6f75 6c64 2067 6976 6520 4465 it.would.give.De
- 0x1080: 6269 616e 2061 2062 6574 7465 720a 6f76 bian.a.better.ov
- 0x1090: 6572 7669 6577 206f 6620 7468 6520 6170 erview.of.the.ap
- 0x10a0: 6163 6865 2070 6163 6b61 6765 2075 7361 ache.package.usa
- 0x10b0: 6765 2e0a 0a3c 4832 3e41 626f 7574 2074 ge...<H2>About.t
- 0x10c0: 6869 7320 7061 6765 3c2f 4832 3e0a 0a3c his.page</H2>..<
- 0x10d0: 494d 4720 414c 4947 4e3d 2272 6967 6874 IMG.ALIGN="right
- 0x10e0: 2220 414c 543d 2222 2048 4549 4748 543d ".ALT="".HEIGHT=
- 0x10f0: 2232 3437 2220 5749 4454 483d 2232 3738 "247".WIDTH="278
- 0x1100: 2220 5352 433d 2269 636f 6e73 2f6a 6865 ".SRC="icons/jhe
- 0x1110: 3036 312e 706e 6722 3e0a 0a3c 503e 5468 061.png">..<P>Th
- 0x1120: 6973 2069 7320 6120 706c 6163 6568 6f6c is.is.a.placehol
- 0x1130: 6465 7220 7061 6765 2069 6e73 7461 6c6c der.page.install
- 0x1140: 6564 2062 7920 7468 6520 3c41 0a48 5245 ed.by.the.<A.HRE
- 0x1150: 463d 2268 7474 703a 2f2f 7777 772e 6465 F="http://www.de
- 0x1160: 6269 616e 2e6f 7267 2f22 3e44 6562 6961 bian.org/">Debia
- 0x1170: 6e3c 2f41 3e0a 7265 6c65 6173 6520 6f66 n</A>.release.of
- 0x1180: 2074 6865 2061 7061 6368 6520 5765 6220 .the.apache.Web.
- 0x1190: 7365 7276 6572 2070 6163 6b61 6765 2e0a server.package..
- 0x11a0: 0a3c 503e 5468 6973 2063 6f6d 7075 7465 .<P>This.compute
- 0x11b0: 7220 6861 7320 696e 7374 616c 6c65 6420 r.has.installed.
- 0x11c0: 7468 6520 4465 6269 616e 2047 4e55 2f4c the.Debian.GNU/L
- 0x11d0: 696e 7578 206f 7065 7261 7469 6e67 2073 inux.operating.s
- 0x11e0: 7973 7465 6d2c 0a62 7574 2069 7420 6861 ystem,.but.it.ha
- 0x11f0: 7320 3c73 7472 6f6e 673e 6e6f 7468 696e s.<strong>nothin
- 0x1200: 6720 746f 2064 6f20 7769 7468 2074 6865 g.to.do.with.the
- 0x1210: 2044 6562 6961 6e0a 5072 6f6a 6563 743c .Debian.Project<
- 0x1220: 2f73 7472 6f6e 673e 2e20 506c 6561 7365 /strong>..Please
- 0x1230: 2064 6f20 3c73 7472 6f6e 673e 6e6f 743c .do.<strong>not<
- 0x1240: 2f73 7472 6f6e 673e 2063 6f6e 7461 6374 /strong>.contact
- 0x1250: 2074 6865 2044 6562 6961 6e0a 5072 6f6a .the.Debian.Proj
- 0x1260: 6563 7420 6162 6f75 7420 6974 2e3c 2f50 ect.about.it.</P
- 0x1270: 3e0a 0a3c 503e 4966 2079 6f75 2066 696e >..<P>If.you.fin
- 0x1280: 6420 6120 6275 6720 696e 2074 6869 7320 d.a.bug.in.this.
- 0x1290: 6170 6163 6865 2070 6163 6b61 6765 2c20 apache.package,.
- 0x12a0: 6f72 2069 6e20 4170 6163 6865 2069 7473 or.in.Apache.its
- 0x12b0: 656c 662c 0a70 6c65 6173 6520 6669 6c65 elf,.please.file
- 0x12c0: 2061 2062 7567 2072 6570 6f72 7420 6f6e .a.bug.report.on
- 0x12d0: 2069 742e 2020 496e 7374 7275 6374 696f .it...Instructio
- 0x12e0: 6e73 206f 6e20 646f 696e 6720 7468 6973 ns.on.doing.this
- 0x12f0: 2c20 616e 6420 7468 650a 6c69 7374 206f ,.and.the.list.o
- 0x1300: 6620 3c41 2048 5245 463d 2268 7474 703a f.<A.HREF="http:
- 0x1310: 2f2f 6275 6773 2e64 6562 6961 6e2e 6f72 //bugs.debian.or
- 0x1320: 672f 7372 633a 6170 6163 6865 223e 6b6e g/src:apache">kn
- 0x1330: 6f77 6e20 6275 6773 3c2f 413e 206f 6620 own.bugs</A>.of.
- 0x1340: 7468 6973 0a70 6163 6b61 6765 2c20 6361 this.package,.ca
- 0x1350: 6e20 6265 2066 6f75 6e64 2069 6e20 7468 n.be.found.in.th
- 0x1360: 6520 0a3c 4120 4852 4546 3d22 6874 7470 e..<A.HREF="http
- 0x1370: 3a2f 2f77 7777 2e64 6562 6961 6e2e 6f72 ://www.debian.or
- 0x1380: 672f 4275 6773 2f52 6570 6f72 7469 6e67 g/Bugs/Reporting
- 0x1390: 223e 4465 6269 616e 2042 7567 2054 7261 ">Debian.Bug.Tra
- 0x13a0: 636b 696e 6720 5379 7374 656d 3c2f 413e cking.System</A>
- 0x13b0: 2e0a 0a3c 503e 5468 616e 6b73 2066 6f72 ...<P>Thanks.for
- 0x13c0: 2075 7369 6e67 2074 6869 7320 7061 636b .using.this.pack
- 0x13d0: 6167 652c 2061 6e64 2063 6f6e 6772 6174 age,.and.congrat
- 0x13e0: 756c 6174 696f 6e73 2066 6f72 2079 6f75 ulations.for.you
- 0x13f0: 7220 6368 6f69 6365 206f 660a 6120 4465 r.choice.of.a.De
- 0x1400: 6269 616e 2073 7973 7465 6d21 3c2f 503e bian.system!</P>
- 0x1410: 0a0a 3c44 4956 2061 6c69 676e 3d22 6365 ..<DIV.align="ce
- 0x1420: 6e74 6572 223e 0a3c 6120 6872 6566 3d22 nter">.<a.href="
- 0x1430: 6874 7470 3a2f 2f77 7777 2e64 6562 6961 http://www.debia
- 0x1440: 6e2e 6f72 672f 223e 0a3c 494d 4720 616c n.org/">.<IMG.al
- 0x1450: 6967 6e3d 226d 6964 646c 6522 2068 6569 ign="middle".hei
- 0x1460: 6768 743d 2233 3022 2077 6964 7468 3d22 ght="30".width="
- 0x1470: 3235 2220 7372 633d 2269 636f 6e73 2f64 25".src="icons/d
- 0x1480: 6562 6961 6e2f 6f70 656e 6c6f 676f 2d32 ebian/openlogo-2
- 0x1490: 352e 6a70 6722 2061 6c74 3d22 4465 6269 5.jpg".alt="Debi
- 0x14a0: 616e 223e 0a3c 2f61 3e0a 3c61 2068 7265 an">.</a>.<a.hre
- 0x14b0: 663d 2268 7474 703a 2f2f 7777 772e 6170 f="http://www.ap
- 0x14c0: 6163 6865 2e6f 7267 2f22 3e0a 3c49 4d47 ache.org/">.<IMG
- 0x14d0: 2061 6c69 676e 3d22 6d69 6464 6c65 2220 .align="middle".
- 0x14e0: 6865 6967 6874 3d22 3332 2220 7769 6474 height="32".widt
- 0x14f0: 683d 2232 3539 2220 7372 633d 2269 636f h="259".src="ico
- 0x1500: 6e73 2f61 7061 6368 655f 7062 2e70 6e67 ns/apache_pb.png
- 0x1510: 2220 616c 743d 2241 7061 6368 6522 3e0a ".alt="Apache">.
- 0x1520: 3c2f 613e 0a3c 2f44 4956 3e0a 0a3c 212d </a>.</DIV>..<!-
- 0x1530: 2d0a 2020 5468 6973 2070 6167 6520 7761 -...This.page.wa
- 0x1540: 7320 696e 6974 6961 6c6c 7920 6372 6561 s.initially.crea
- 0x1550: 7465 6420 6279 204a 6f68 6e69 6520 496e ted.by.Johnie.In
- 0x1560: 6772 616d 2028 6874 7470 3a2f 2f6e 6574 gram.(http://net
- 0x1570: 676f 642e 6e65 742f 290a 2020 4974 2077 god.net/)...It.w
- 0x1580: 6173 206c 6174 6572 2065 6469 7465 6420 as.later.edited.
- 0x1590: 6279 204d 6174 7468 6577 2057 696c 636f by.Matthew.Wilco
- 0x15a0: 7820 616e 6420 4a6f 7369 7020 526f 6469 x.and.Josip.Rodi
- 0x15b0: 6e2e 0a20 204c 6173 7420 6d6f 6469 6669 n....Last.modifi
- 0x15c0: 6564 3a20 2444 6174 653a 2032 3030 342f ed:.$Date:.2004/
- 0x15d0: 3036 2f32 3020 3135 3a33 333a 3537 2024 06/20.15:33:57.$
- 0x15e0: 2e0a 2020 2d2d 3e0a 0a3c 2f42 4f44 593e ....-->..</BODY>
- 0x15f0: 0a3c 2f48 544d 4c3e 0a .</HTML>.
-22:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
- 0x0010: 0034 1b6e 4000 4006 2154 7f00 0001 7f00 .4.n@.@.!T......
- 0x0020: 0001 da70 0050 3758 8a49 377a a3a9 8010 ...p.P7X.I7z....
- 0x0030: 305f 10ea 0000 0101 080a 4ddc 9219 4ddc 0_........M...M.
- 0x0040: 9219 ..
-22:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
- 0x0010: 0034 1b70 4000 4006 2152 7f00 0001 7f00 .4.p@.@.!R......
- 0x0020: 0001 da70 0050 3758 8a49 377a a3a9 8011 ...p.P7X.I7z....
- 0x0030: 305f 0be1 0000 0101 080a 4ddc 9721 4ddc 0_........M..!M.
- 0x0040: 9219 ..
-22:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
- 0x0010: 0034 1fe8 4000 4006 1cda 7f00 0001 7f00 .4..@.@.........
- 0x0020: 0001 0050 da70 377a a3a9 3758 8a4a 8011 ...P.p7z..7X.J..
- 0x0030: 2000 1735 0000 0101 080a 4ddc 9723 4ddc ...5......M..#M.
- 0x0040: 9721 .!
-22:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
- 0x0010: 0034 1b72 4000 4006 2150 7f00 0001 7f00 .4.r@.@.!P......
- 0x0020: 0001 da70 0050 3758 8a4a 377a a3aa 8010 ...p.P7X.J7z....
- 0x0030: 305f 06d4 0000 0101 080a 4ddc 9723 4ddc 0_........M..#M.
- 0x0040: 9723 .#
diff --git a/contrib/tcpdump/tests/print-flags.puu b/contrib/tcpdump/tests/print-flags.puu
deleted file mode 100644
index bcd8b9926839..000000000000
--- a/contrib/tcpdump/tests/print-flags.puu
+++ /dev/null
@@ -1,151 +0,0 @@
-begin 644 print-flags.pcap
-MU,.RH0(`!````````````/__```!````KU;+0E)0#@!*````2@``````````
-M``````````@`10``/!MH0`!`!B%2?P```7\```':<`!0-UB)?@````"@`G__
-M%"$```($0`P$`@@*3=R2%@`````!`P,"KU;+0HI0#@!*````2@``````````
-M``````````@`10``/```0`!`!CRZ?P```7\```$`4-IP-WJ-\3=8B7^@$G__
-M;K$```($0`P$`@@*3=R2%DW<DA8!`P,"KU;+0K=0#@!"````0@``````````
-M``````````@`10``-!MJ0`!`!B%8?P```7\```':<`!0-UB)?S=ZC?*`$"``
-M-]````$!"`I-W)(63=R2%J]6RT*?50X`#`$```P!```````````````````(
-M`$4``/X;;$``0`8@C'\```%_```!VG``4#=8B7\W>HWR@!@@`/[R```!`0@*
-M3=R2%TW<DA9'150@+R!(5%10+S$N,0T*2&]S=#H@;&]C86QH;W-T#0I5<V5R
-M+4%G96YT.B!%3&EN:W,O,"XQ,"XT+3<M9&5B:6%N("AT97AT;6]D93L@3&EN
-M=7@@,BXV+C$Q+3$M-C@V+7-M<"!I-C@V.R`Q,S)X-38M,BD-"D%C8V5P=#H@
-M*B\J#0I!8V-E<'0M16YC;V1I;F<Z(&=Z:7`-"D%C8V5P="U,86YG=6%G93H@
-M96X-"D-O;FYE8W1I;VXZ($ME97`M06QI=F4-"@T*KU;+0KI9#@!"````0@``
-M``````````````````@`10``-!_D0`!`!AS>?P```7\```$`4-IP-WJ-\C=8
-MBDF`$"``-P,```$!"`I-W)(83=R2%Z]6RT*P7`X`^14``/D5````````````
-M```````(`$4`%>L?YD``0`8')7\```%_```!`%#:<#=ZC?(W6(I)@!@@`!/@
-M```!`0@*3=R2&4W<DA=(5%10+S$N,2`R,#`@3TL-"D1A=&4Z(%=E9"P@,#8@
-M2G5L(#(P,#4@,#,Z-3<Z,S4@1TU4#0I397)V97(Z($%P86-H92\Q+C,N,S,-
-M"DQA<W0M36]D:69I960Z(%-U;BP@,34@075G(#(P,#0@,#`Z-#,Z-#$@1TU4
-M#0I%5&%G.B`B-F4X,&8P+3$T.&$M-#$Q96(Q8F0B#0I!8V-E<'0M4F%N9V5S
-M.B!B>71E<PT*0V]N=&5N="U,96YG=&@Z(#4R-3@-"DME97`M06QI=F4Z('1I
-M;65O=70],34L(&UA>#TQ,#`-"D-O;FYE8W1I;VXZ($ME97`M06QI=F4-"D-O
-M;G1E;G0M5'EP93H@=&5X="]H=&UL.R!C:&%R<V5T/6ES;RTX.#4Y+3$-"@T*
-M/"%$3T-465!%($A434P@4%5"3$E#("(M+R]7,T,O+T141"!(5$U,(#0N,#$@
-M5')A;G-I=&EO;F%L+R]%3B(^"CQ(5$U,/@H\2$5!1#X*("`@/$U%5$$@2%14
-M4"U%455)5CTB0V]N=&5N="U4>7!E(B!#3TY414Y4/2)T97AT+VAT;6P[(&-H
-M87)S970]:7-O+3@X-3DM,2(^"B`@(#Q-151!($Y!344](D1E<V-R:7!T:6]N
-M(B!#3TY414Y4/2)4:&4@:6YI=&EA;"!I;G-T86QL871I;VX@;V8@1&5B:6%N
-M(&%P86-H92XB/@H@("`\5$E43$4^4&QA8V5H;VQD97(@<&%G93PO5$E43$4^
-M"CPO2$5!1#X*/$)/1%D@5$585#TB(S`P,#`P,"(@0D=#3TQ/4CTB(T9&1D9&
-M1B(@3$E.2STB(S`P,#!%1B(@5DQ)3DL](B,U-3$X.$$B($%,24Y+/2(C1D8P
-M,#`P(CX*"CQ(,3Y0;&%C96AO;&1E<B!P86=E/"](,3X*/$@R/DEF('EO=2!A
-M<F4@:G5S="!B<F]W<VEN9R!T:&4@=V5B/"]H,CX*"CQ0/E1H92!O=VYE<B!O
-M9B!T:&ES('=E8B!S:71E(&AA<R!N;W0@<'5T('5P(&%N>2!W96(@<&%G97,@
-M>65T+@I0;&5A<V4@8V]M92!B86-K(&QA=&5R+CPO4#X*"CQ0/CQ334%,3#X\
-M0TE413Y-;W9E(&%L;VYG+"!N;W1H:6YG('1O('-E92!H97)E+BXN/"]#251%
-M/B`Z+2D\+U--04Q,/CPO4#X*"CQ(,CY)9B!Y;W4@87)E('1R>6EN9R!T;R!L
-M;V-A=&4@=&AE(&%D;6EN:7-T<F%T;W(@;V8@=&AI<R!M86-H:6YE/"](,CX*
-M"CQ0/DEF('EO=2!W86YT('1O(')E<&]R="!S;VUE=&AI;F<@86)O=70@=&AI
-M<R!H;W-T)W,@8F5H879I;W(L('!L96%S90IC;VYT86-T('1H92!);G1E<FYE
-M="!397)V:6-E(%!R;W9I9&5R("A)4U`I(&EN=F]L=F5D(&1I<F5C=&QY+CPO
-M4#X*"CQ0/E-E92!T:&4@/$$@:')E9CTB:'1T<#HO+W=W=RYA8G5S92YN970O
-M(CY.971W;W)K($%B=7-E"D-L96%R:6YG:&]U<V4\+T$^(&9O<B!H;W<@=&\@
-M9&\@=&AI<RX\+U`^"@H\2#(^268@>6]U(&%R92!T:&4@861M:6YI<W1R871O
-M<B!O9B!T:&ES(&UA8VAI;F4\+T@R/@H*/%`^5&AE(&EN:71I86P@:6YS=&%L
-M;&%T:6]N(&]F(#Q!(&AR968](FAT='`Z+R]W=W<N9&5B:6%N+F]R9R\B/D1E
-M8FEA;B=S"F%P86-H93PO03X@=V5B('-E<G9E<B!P86-K86=E('=A<R!S=6-C
-M97-S9G5L+CPO4#X*"CQ0/CQ35%)/3D<^66]U('-H;W5L9"!R97!L86-E('1H
-M:7,@<&%G92!W:71H('EO=7(@;W=N('=E8B!P86=E<R!A<PIS;V]N(&%S('!O
-M<W-I8FQE+CPO4U123TY'/CPO4#X*"CQ0/E5N;&5S<R!Y;W4@8VAA;F=E9"!I
-M=',@8V]N9FEG=7)A=&EO;BP@>6]U<B!N97<@<V5R=F5R(&ES(&-O;F9I9W5R
-M960@87,@9F]L;&]W<SH*/%5,/@H\3$D^"D-O;F9I9W5R871I;VX@9FEL97,@
-M8V%N(&)E(&9O=6YD(&EN(#Q45#XO971C+V%P86-H93PO5%0^+CPO3$D^"@H\
-M3$D^"E1H92`\5%0^1&]C=6UE;G12;V]T/"]45#XL('=H:6-H(&ES('1H92!D
-M:7)E8W1O<GD@=6YD97(@=VAI8V@@86QL('EO=7(*2%1-3"!F:6QE<R!S:&]U
-M;&0@97AI<W0L(&ES('-E="!T;R`\5%0^+W9A<B]W=W<\+U14/BX\+TQ)/@H*
-M/$Q)/@I#1TD@<V-R:7!T<R!A<F4@;&]O:V5D(&9O<B!I;B`\5%0^+W5S<B]L
-M:6(O8V=I+6)I;CPO5%0^+"!W:&EC:"!I<R!W:&5R90I$96)I86X@<&%C:V%G
-M97,@=VEL;"!P;&%C92!T:&5I<B!S8W)I<'1S+CPO3$D^"@H\3$D^"DQO9R!F
-M:6QE<R!A<F4@<&QA8V5D(&EN(#Q45#XO=F%R+VQO9R]A<&%C:&4\+U14/BP@
-M86YD('=I;&P@8F4@<F]T871E9`IW965K;'DN("!4:&4@9G)E<75E;F-Y(&]F
-M(')O=&%T:6]N(&-A;B!B92!E87-I;'D@8VAA;F=E9"!B>2!E9&ET:6YG"CQ4
-M5#XO971C+VQO9W)O=&%T92YD+V%P86-H93PO5%0^+CPO3$D^"@H\3$D^"E1H
-M92!D969A=6QT(&1I<F5C=&]R>2!I;F1E>"!I<R`\5%0^:6YD97@N:'1M;#PO
-M5%0^+"!M96%N:6YG('1H870@<F5Q=65S=',*9F]R(&$@9&ER96-T;W)Y(#Q4
-M5#XO9F]O+V)A<B\\+U14/B!W:6QL(&=I=F4@=&AE(&-O;G1E;G1S(&]F('1H
-M92!F:6QE(#Q45#XO=F%R+W=W=R]F;V\O8F%R+VEN9&5X+FAT;6P\+U14/@II
-M9B!I="!E>&ES=',@*&%S<W5M:6YG('1H870@/%14/B]V87(O=W=W/"]45#X@
-M:7,@>6]U<B`\5%0^1&]C=6UE;G12;V]T/"]45#XI+CPO3$D^"@H\3$D^"E5S
-M97(@9&ER96-T;W)I97,@87)E(&5N86)L960L(&%N9"!U<V5R(&1O8W5M96YT
-M<R!W:6QL(&)E(&QO;VME9"!F;W(*:6X@=&AE(#Q45#YP=6)L:6-?:'1M;#PO
-M5%0^(&1I<F5C=&]R>2!O9B!T:&4@=7-E<G,G(&AO;65S+B`@5&AE<V4@9&ER
-M<PIS:&]U;&0@8F4@=6YD97(@/%14/B]H;VUE/"]45#XL(&%N9"!U<V5R<R!W
-M:6QL(&YO="!B92!A8FQE('1O('-Y;6QI;FL*=&\@9FEL97,@=&AE>2!D;VXG
-M="!O=VXN/"],23X*"CPO54P^"D%L;"!T:&4@<W1A;F1A<F0@87!A8VAE(&UO
-M9'5L97,@87)E(&%V86EL86)L92!W:71H('1H:7,@<F5L96%S92!A;F0@87)E
-M"FYO=R!M86YA9V5D('=I=&@@9&5B8V]N9BX@(%1Y<&4@/%14/F1P:V<M<F5C
-M;VYF:6=U<F4@87!A8VAE/"]45#X@=&\*<V5L96-T('=H:6-H(&UO9'5L97,@
-M>6]U('=A;G0@96YA8FQE9"X@($UA;GD@;W1H97(@;6]D=6QE<R!A<F4@879A
-M:6QA8FQE"G1H<F]U9V@@=&AE($1E8FEA;B!P86-K86=E('-Y<W1E;2!W:71H
-M('1H92!N86UE<R`\5%0^;&EB87!A8VAE+6UO9"TJ/"]45#XN"DEF('EO=2!N
-M965D('1O(&-O;7!I;&4@82!M;V1U;&4@>6]U<G-E;&8L('EO=2!W:6QL(&YE
-M960@=&\@:6YS=&%L;"!T:&4*/%14/F%P86-H92UD978\+U14/B!P86-K86=E
-M+@H*/%`^36]R92!D;V-U;65N=&%T:6]N(&]N($%P86-H92!C86X@8F4@9F]U
-M;F0@;VXZ"CQ53#X*/$Q)/@I4:&4@/$$@2%)%1CTB+V1O8R]A<&%C:&4M9&]C
-M+VUA;G5A;"\B/D%P86-H92!D;V-U;65N=&%T:6]N/"]!/B!S=&]R960@;VX@
-M>6]U<B!S97)V97(N/"],23X*"CQ,23X*5&AE(#Q!($A2148](FAT='`Z+R]W
-M=W<N87!A8VAE+F]R9R\B/D%P86-H92!0<F]J96-T/"]!/B!H;VUE('-I=&4N
-M/"],23X*"CQ,23X*5&AE(#Q!($A2148](FAT='`Z+R]W=W<N87!A8VAE+7-S
-M;"YO<F<O(CY!<&%C:&4M4U-,/"]!/B!H;VUE('-I=&4N/"],23X*"CQ,23X*
-M5&AE(#Q!($A2148](FAT='`Z+R]P97)L+F%P86-H92YO<F<O(CYM;V0@<&5R
-M;#PO03X@:&]M92!S:71E+CPO3$D^"@H\3$D^"E1H92`\02!(4D5&/2)H='1P
-M.B\O=W=W+F%P86-H97=E96LN8V]M+R(^07!A8VAE5V5E:SPO03X@;F5W<VQE
-M='1E<BX\+TQ)/@H*/$Q)/@I4:&4@/$$@2%)%1CTB:'1T<#HO+W=W=RYD96)I
-M86XN;W)G+V1O8R\B/D1E8FEA;B!0<F]J96-T"D1O8W5M96YT871I;VX\+T$^
-M('=H:6-H(&-O;G1A:6YS($A/5U1/<RP@1D%1<RP@86YD('-O9G1W87)E('5P
-M9&%T97,N/"],23X*/"]53#X*"CQ0/EEO=2!C86X@86QS;R!C;VYS=6QT('1H
-M92!L:7-T(&]F(#Q!($A2148](FAT='`Z+R]W=W<N8F]U=&5L;"YC;VTO9F%Q
-M+R(^5V]R;&0*5VED92!796(@1G)E<75E;G1L>2!!<VME9"!1=65S=&EO;G,\
-M+T$^(&9O<B!I;F9O<FUA=&EO;BX*"CQ(,CY,970@;W1H97(@<&5O<&QE(&MN
-M;W<@86)O=70@=&AI<R!S97)V97(\+T@R/@H*/$$@2%)%1CTB:'1T<#HO+VYE
-M=&-R869T+F-O;2\B/DYE=&-R869T/"]!/B!P<F]V:61E<R!A;B!I;G1E<F5S
-M=&EN9R!F<F5E"G-E<G9I8V4@9F]R('=E8B!S:71E(&UO;FET;W)I;F<@86YD
-M('-T871I<W1I8R!C;VQL96-T:6]N+@I9;W4@8V%N(&QE="!T:&5M(&MN;W<@
-M86)O=70@>6]U<B!S97)V97(@=7-I;F<@=&AE:7(*/$$@2%)%1CTB:'1T<#HO
-M+W5P=&EM92YN971C<F%F="YC;VTO(CYI;G1E<F9A8V4\+T$^+@I%;F%B;&EN
-M9R!T:&4@;6]N:71O<FEN9R!O9B!Y;W5R('-E<G9E<B!W:6QL('!R;W9I9&4@
-M82!B971T97(@9VQO8F%L(&]V97)V:65W"F]F('=H;R!I<R!U<VEN9R!W:&%T
-M(&%N9"!W:&5R92P@86YD(&ET('=O=6QD(&=I=F4@1&5B:6%N(&$@8F5T=&5R
-M"F]V97)V:65W(&]F('1H92!A<&%C:&4@<&%C:V%G92!U<V%G92X*"CQ(,CY!
-M8F]U="!T:&ES('!A9V4\+T@R/@H*/$E-1R!!3$E'3CTB<FEG:'0B($%,5#TB
-M(B!(14E'2%0](C(T-R(@5TE$5$@](C(W."(@4U)#/2)I8V]N<R]J:&4P-C$N
-M<&YG(CX*"CQ0/E1H:7,@:7,@82!P;&%C96AO;&1E<B!P86=E(&EN<W1A;&QE
-M9"!B>2!T:&4@/$$*2%)%1CTB:'1T<#HO+W=W=RYD96)I86XN;W)G+R(^1&5B
-M:6%N/"]!/@IR96QE87-E(&]F('1H92!A<&%C:&4@5V5B('-E<G9E<B!P86-K
-M86=E+@H*/%`^5&AI<R!C;VUP=71E<B!H87,@:6YS=&%L;&5D('1H92!$96)I
-M86X@1TY5+TQI;G5X(&]P97)A=&EN9R!S>7-T96TL"F)U="!I="!H87,@/'-T
-M<F]N9SYN;W1H:6YG('1O(&1O('=I=&@@=&AE($1E8FEA;@I0<F]J96-T/"]S
-M=')O;F<^+B!0;&5A<V4@9&\@/'-T<F]N9SYN;W0\+W-T<F]N9SX@8V]N=&%C
-M="!T:&4@1&5B:6%N"E!R;VIE8W0@86)O=70@:70N/"]0/@H*/%`^268@>6]U
-M(&9I;F0@82!B=6<@:6X@=&AI<R!A<&%C:&4@<&%C:V%G92P@;W(@:6X@07!A
-M8VAE(&ET<V5L9BP*<&QE87-E(&9I;&4@82!B=6<@<F5P;W)T(&]N(&ET+B`@
-M26YS=')U8W1I;VYS(&]N(&1O:6YG('1H:7,L(&%N9"!T:&4*;&ES="!O9B`\
-M02!(4D5&/2)H='1P.B\O8G5G<RYD96)I86XN;W)G+W-R8SIA<&%C:&4B/FMN
-M;W=N(&)U9W,\+T$^(&]F('1H:7,*<&%C:V%G92P@8V%N(&)E(&9O=6YD(&EN
-M('1H92`*/$$@2%)%1CTB:'1T<#HO+W=W=RYD96)I86XN;W)G+T)U9W,O4F5P
-M;W)T:6YG(CY$96)I86X@0G5G(%1R86-K:6YG(%-Y<W1E;3PO03XN"@H\4#Y4
-M:&%N:W,@9F]R('5S:6YG('1H:7,@<&%C:V%G92P@86YD(&-O;F=R871U;&%T
-M:6]N<R!F;W(@>6]U<B!C:&]I8V4@;V8*82!$96)I86X@<WES=&5M(3PO4#X*
-M"CQ$258@86QI9VX](F-E;G1E<B(^"CQA(&AR968](FAT='`Z+R]W=W<N9&5B
-M:6%N+F]R9R\B/@H\24U'(&%L:6=N/2)M:61D;&4B(&AE:6=H=#TB,S`B('=I
-M9'1H/2(R-2(@<W)C/2)I8V]N<R]D96)I86XO;W!E;FQO9V\M,C4N:G!G(B!A
-M;'0](D1E8FEA;B(^"CPO83X*/&$@:')E9CTB:'1T<#HO+W=W=RYA<&%C:&4N
-M;W)G+R(^"CQ)34<@86QI9VX](FUI9&1L92(@:&5I9VAT/2(S,B(@=VED=&@]
-M(C(U.2(@<W)C/2)I8V]N<R]A<&%C:&5?<&(N<&YG(B!A;'0](D%P86-H92(^
-M"CPO83X*/"]$258^"@H\(2TM"B`@5&AI<R!P86=E('=A<R!I;FET:6%L;'D@
-M8W)E871E9"!B>2!*;VAN:64@26YG<F%M("AH='1P.B\O;F5T9V]D+FYE="\I
-M"B`@270@=V%S(&QA=&5R(&5D:71E9"!B>2!-871T:&5W(%=I;&-O>"!A;F0@
-M2F]S:7`@4F]D:6XN"B`@3&%S="!M;V1I9FEE9#H@)$1A=&4Z(#(P,#0O,#8O
-M,C`@,34Z,S,Z-3<@)"X*("`M+3X*"CPO0D]$63X*/"](5$U,/@JO5LM"S%P.
-M`$(```!"````````````````````"`!%```T&VY``$`&(51_```!?P```=IP
-M`%`W6(I)-WJCJ8`0,%\0Z@```0$("DW<DAE-W)(9L5;+0L>``P!"````0@``
-M``````````````````@`10``-!MP0`!`!B%2?P```7\```':<`!0-UB*23=Z
-MHZF`$3!?"^$```$!"`I-W)<A3=R2&;%6RT*WA0,`0@```$(`````````````
-M```````(`$4``#0?Z$``0`8<VG\```%_```!`%#:<#=ZHZDW6(I*@!$@`!<U
-M```!`0@*3=R7(TW<ER&Q5LM"](4#`$(```!"````````````````````"`!%
-M```T&W)``$`&(5!_```!?P```=IP`%`W6(I*-WJCJH`0,%\&U````0$("DW<
-&ER--W)<C
-`
-end
diff --git a/contrib/tcpdump/tests/print-flags.sh b/contrib/tcpdump/tests/print-flags.sh
deleted file mode 100755
index 1b53c75b0a72..000000000000
--- a/contrib/tcpdump/tests/print-flags.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-uudecode print-flags.puu
-
-for i in x xx X XX A AA; do
- if (../tcpdump -$i -s0 -nr print-flags.pcap | tee NEW/print-$i.new | diff - print-$i.out >DIFF/print-$i.out.diff )
- then
- echo print-$i passed.
- else
- echo print-$i failed.
- fi
-done
diff --git a/contrib/tcpdump/tests/print-x.out b/contrib/tcpdump/tests/print-x.out
deleted file mode 100644
index 779422305d44..000000000000
--- a/contrib/tcpdump/tests/print-x.out
+++ /dev/null
@@ -1,409 +0,0 @@
-22:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
- 0x0000: 4500 003c 1b68 4000 4006 2152 7f00 0001
- 0x0010: 7f00 0001 da70 0050 3758 897e 0000 0000
- 0x0020: a002 7fff 1421 0000 0204 400c 0402 080a
- 0x0030: 4ddc 9216 0000 0000 0103 0302
-22:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
- 0x0000: 4500 003c 0000 4000 4006 3cba 7f00 0001
- 0x0010: 7f00 0001 0050 da70 377a 8df1 3758 897f
- 0x0020: a012 7fff 6eb1 0000 0204 400c 0402 080a
- 0x0030: 4ddc 9216 4ddc 9216 0103 0302
-22:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
- 0x0000: 4500 0034 1b6a 4000 4006 2158 7f00 0001
- 0x0010: 7f00 0001 da70 0050 3758 897f 377a 8df2
- 0x0020: 8010 2000 37d0 0000 0101 080a 4ddc 9216
- 0x0030: 4ddc 9216
-22:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202
- 0x0000: 4500 00fe 1b6c 4000 4006 208c 7f00 0001
- 0x0010: 7f00 0001 da70 0050 3758 897f 377a 8df2
- 0x0020: 8018 2000 fef2 0000 0101 080a 4ddc 9217
- 0x0030: 4ddc 9216 4745 5420 2f20 4854 5450 2f31
- 0x0040: 2e31 0d0a 486f 7374 3a20 6c6f 6361 6c68
- 0x0050: 6f73 740d 0a55 7365 722d 4167 656e 743a
- 0x0060: 2045 4c69 6e6b 732f 302e 3130 2e34 2d37
- 0x0070: 2d64 6562 6961 6e20 2874 6578 746d 6f64
- 0x0080: 653b 204c 696e 7578 2032 2e36 2e31 312d
- 0x0090: 312d 3638 362d 736d 7020 6936 3836 3b20
- 0x00a0: 3133 3278 3536 2d32 290d 0a41 6363 6570
- 0x00b0: 743a 202a 2f2a 0d0a 4163 6365 7074 2d45
- 0x00c0: 6e63 6f64 696e 673a 2067 7a69 700d 0a41
- 0x00d0: 6363 6570 742d 4c61 6e67 7561 6765 3a20
- 0x00e0: 656e 0d0a 436f 6e6e 6563 7469 6f6e 3a20
- 0x00f0: 4b65 6570 2d41 6c69 7665 0d0a 0d0a
-22:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
- 0x0000: 4500 0034 1fe4 4000 4006 1cde 7f00 0001
- 0x0010: 7f00 0001 0050 da70 377a 8df2 3758 8a49
- 0x0020: 8010 2000 3703 0000 0101 080a 4ddc 9218
- 0x0030: 4ddc 9217
-22:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559
- 0x0000: 4500 15eb 1fe6 4000 4006 0725 7f00 0001
- 0x0010: 7f00 0001 0050 da70 377a 8df2 3758 8a49
- 0x0020: 8018 2000 13e0 0000 0101 080a 4ddc 9219
- 0x0030: 4ddc 9217 4854 5450 2f31 2e31 2032 3030
- 0x0040: 204f 4b0d 0a44 6174 653a 2057 6564 2c20
- 0x0050: 3036 204a 756c 2032 3030 3520 3033 3a35
- 0x0060: 373a 3335 2047 4d54 0d0a 5365 7276 6572
- 0x0070: 3a20 4170 6163 6865 2f31 2e33 2e33 330d
- 0x0080: 0a4c 6173 742d 4d6f 6469 6669 6564 3a20
- 0x0090: 5375 6e2c 2031 3520 4175 6720 3230 3034
- 0x00a0: 2030 303a 3433 3a34 3120 474d 540d 0a45
- 0x00b0: 5461 673a 2022 3665 3830 6630 2d31 3438
- 0x00c0: 612d 3431 3165 6231 6264 220d 0a41 6363
- 0x00d0: 6570 742d 5261 6e67 6573 3a20 6279 7465
- 0x00e0: 730d 0a43 6f6e 7465 6e74 2d4c 656e 6774
- 0x00f0: 683a 2035 3235 380d 0a4b 6565 702d 416c
- 0x0100: 6976 653a 2074 696d 656f 7574 3d31 352c
- 0x0110: 206d 6178 3d31 3030 0d0a 436f 6e6e 6563
- 0x0120: 7469 6f6e 3a20 4b65 6570 2d41 6c69 7665
- 0x0130: 0d0a 436f 6e74 656e 742d 5479 7065 3a20
- 0x0140: 7465 7874 2f68 746d 6c3b 2063 6861 7273
- 0x0150: 6574 3d69 736f 2d38 3835 392d 310d 0a0d
- 0x0160: 0a3c 2144 4f43 5459 5045 2048 544d 4c20
- 0x0170: 5055 424c 4943 2022 2d2f 2f57 3343 2f2f
- 0x0180: 4454 4420 4854 4d4c 2034 2e30 3120 5472
- 0x0190: 616e 7369 7469 6f6e 616c 2f2f 454e 223e
- 0x01a0: 0a3c 4854 4d4c 3e0a 3c48 4541 443e 0a20
- 0x01b0: 2020 3c4d 4554 4120 4854 5450 2d45 5155
- 0x01c0: 4956 3d22 436f 6e74 656e 742d 5479 7065
- 0x01d0: 2220 434f 4e54 454e 543d 2274 6578 742f
- 0x01e0: 6874 6d6c 3b20 6368 6172 7365 743d 6973
- 0x01f0: 6f2d 3838 3539 2d31 223e 0a20 2020 3c4d
- 0x0200: 4554 4120 4e41 4d45 3d22 4465 7363 7269
- 0x0210: 7074 696f 6e22 2043 4f4e 5445 4e54 3d22
- 0x0220: 5468 6520 696e 6974 6961 6c20 696e 7374
- 0x0230: 616c 6c61 7469 6f6e 206f 6620 4465 6269
- 0x0240: 616e 2061 7061 6368 652e 223e 0a20 2020
- 0x0250: 3c54 4954 4c45 3e50 6c61 6365 686f 6c64
- 0x0260: 6572 2070 6167 653c 2f54 4954 4c45 3e0a
- 0x0270: 3c2f 4845 4144 3e0a 3c42 4f44 5920 5445
- 0x0280: 5854 3d22 2330 3030 3030 3022 2042 4743
- 0x0290: 4f4c 4f52 3d22 2346 4646 4646 4622 204c
- 0x02a0: 494e 4b3d 2223 3030 3030 4546 2220 564c
- 0x02b0: 494e 4b3d 2223 3535 3138 3841 2220 414c
- 0x02c0: 494e 4b3d 2223 4646 3030 3030 223e 0a0a
- 0x02d0: 3c48 313e 506c 6163 6568 6f6c 6465 7220
- 0x02e0: 7061 6765 3c2f 4831 3e0a 3c48 323e 4966
- 0x02f0: 2079 6f75 2061 7265 206a 7573 7420 6272
- 0x0300: 6f77 7369 6e67 2074 6865 2077 6562 3c2f
- 0x0310: 6832 3e0a 0a3c 503e 5468 6520 6f77 6e65
- 0x0320: 7220 6f66 2074 6869 7320 7765 6220 7369
- 0x0330: 7465 2068 6173 206e 6f74 2070 7574 2075
- 0x0340: 7020 616e 7920 7765 6220 7061 6765 7320
- 0x0350: 7965 742e 0a50 6c65 6173 6520 636f 6d65
- 0x0360: 2062 6163 6b20 6c61 7465 722e 3c2f 503e
- 0x0370: 0a0a 3c50 3e3c 534d 414c 4c3e 3c43 4954
- 0x0380: 453e 4d6f 7665 2061 6c6f 6e67 2c20 6e6f
- 0x0390: 7468 696e 6720 746f 2073 6565 2068 6572
- 0x03a0: 652e 2e2e 3c2f 4349 5445 3e20 3a2d 293c
- 0x03b0: 2f53 4d41 4c4c 3e3c 2f50 3e0a 0a3c 4832
- 0x03c0: 3e49 6620 796f 7520 6172 6520 7472 7969
- 0x03d0: 6e67 2074 6f20 6c6f 6361 7465 2074 6865
- 0x03e0: 2061 646d 696e 6973 7472 6174 6f72 206f
- 0x03f0: 6620 7468 6973 206d 6163 6869 6e65 3c2f
- 0x0400: 4832 3e0a 0a3c 503e 4966 2079 6f75 2077
- 0x0410: 616e 7420 746f 2072 6570 6f72 7420 736f
- 0x0420: 6d65 7468 696e 6720 6162 6f75 7420 7468
- 0x0430: 6973 2068 6f73 7427 7320 6265 6861 7669
- 0x0440: 6f72 2c20 706c 6561 7365 0a63 6f6e 7461
- 0x0450: 6374 2074 6865 2049 6e74 6572 6e65 7420
- 0x0460: 5365 7276 6963 6520 5072 6f76 6964 6572
- 0x0470: 2028 4953 5029 2069 6e76 6f6c 7665 6420
- 0x0480: 6469 7265 6374 6c79 2e3c 2f50 3e0a 0a3c
- 0x0490: 503e 5365 6520 7468 6520 3c41 2068 7265
- 0x04a0: 663d 2268 7474 703a 2f2f 7777 772e 6162
- 0x04b0: 7573 652e 6e65 742f 223e 4e65 7477 6f72
- 0x04c0: 6b20 4162 7573 650a 436c 6561 7269 6e67
- 0x04d0: 686f 7573 653c 2f41 3e20 666f 7220 686f
- 0x04e0: 7720 746f 2064 6f20 7468 6973 2e3c 2f50
- 0x04f0: 3e0a 0a3c 4832 3e49 6620 796f 7520 6172
- 0x0500: 6520 7468 6520 6164 6d69 6e69 7374 7261
- 0x0510: 746f 7220 6f66 2074 6869 7320 6d61 6368
- 0x0520: 696e 653c 2f48 323e 0a0a 3c50 3e54 6865
- 0x0530: 2069 6e69 7469 616c 2069 6e73 7461 6c6c
- 0x0540: 6174 696f 6e20 6f66 203c 4120 6872 6566
- 0x0550: 3d22 6874 7470 3a2f 2f77 7777 2e64 6562
- 0x0560: 6961 6e2e 6f72 672f 223e 4465 6269 616e
- 0x0570: 2773 0a61 7061 6368 653c 2f41 3e20 7765
- 0x0580: 6220 7365 7276 6572 2070 6163 6b61 6765
- 0x0590: 2077 6173 2073 7563 6365 7373 6675 6c2e
- 0x05a0: 3c2f 503e 0a0a 3c50 3e3c 5354 524f 4e47
- 0x05b0: 3e59 6f75 2073 686f 756c 6420 7265 706c
- 0x05c0: 6163 6520 7468 6973 2070 6167 6520 7769
- 0x05d0: 7468 2079 6f75 7220 6f77 6e20 7765 6220
- 0x05e0: 7061 6765 7320 6173 0a73 6f6f 6e20 6173
- 0x05f0: 2070 6f73 7369 626c 652e 3c2f 5354 524f
- 0x0600: 4e47 3e3c 2f50 3e0a 0a3c 503e 556e 6c65
- 0x0610: 7373 2079 6f75 2063 6861 6e67 6564 2069
- 0x0620: 7473 2063 6f6e 6669 6775 7261 7469 6f6e
- 0x0630: 2c20 796f 7572 206e 6577 2073 6572 7665
- 0x0640: 7220 6973 2063 6f6e 6669 6775 7265 6420
- 0x0650: 6173 2066 6f6c 6c6f 7773 3a0a 3c55 4c3e
- 0x0660: 0a3c 4c49 3e0a 436f 6e66 6967 7572 6174
- 0x0670: 696f 6e20 6669 6c65 7320 6361 6e20 6265
- 0x0680: 2066 6f75 6e64 2069 6e20 3c54 543e 2f65
- 0x0690: 7463 2f61 7061 6368 653c 2f54 543e 2e3c
- 0x06a0: 2f4c 493e 0a0a 3c4c 493e 0a54 6865 203c
- 0x06b0: 5454 3e44 6f63 756d 656e 7452 6f6f 743c
- 0x06c0: 2f54 543e 2c20 7768 6963 6820 6973 2074
- 0x06d0: 6865 2064 6972 6563 746f 7279 2075 6e64
- 0x06e0: 6572 2077 6869 6368 2061 6c6c 2079 6f75
- 0x06f0: 720a 4854 4d4c 2066 696c 6573 2073 686f
- 0x0700: 756c 6420 6578 6973 742c 2069 7320 7365
- 0x0710: 7420 746f 203c 5454 3e2f 7661 722f 7777
- 0x0720: 773c 2f54 543e 2e3c 2f4c 493e 0a0a 3c4c
- 0x0730: 493e 0a43 4749 2073 6372 6970 7473 2061
- 0x0740: 7265 206c 6f6f 6b65 6420 666f 7220 696e
- 0x0750: 203c 5454 3e2f 7573 722f 6c69 622f 6367
- 0x0760: 692d 6269 6e3c 2f54 543e 2c20 7768 6963
- 0x0770: 6820 6973 2077 6865 7265 0a44 6562 6961
- 0x0780: 6e20 7061 636b 6167 6573 2077 696c 6c20
- 0x0790: 706c 6163 6520 7468 6569 7220 7363 7269
- 0x07a0: 7074 732e 3c2f 4c49 3e0a 0a3c 4c49 3e0a
- 0x07b0: 4c6f 6720 6669 6c65 7320 6172 6520 706c
- 0x07c0: 6163 6564 2069 6e20 3c54 543e 2f76 6172
- 0x07d0: 2f6c 6f67 2f61 7061 6368 653c 2f54 543e
- 0x07e0: 2c20 616e 6420 7769 6c6c 2062 6520 726f
- 0x07f0: 7461 7465 640a 7765 656b 6c79 2e20 2054
- 0x0800: 6865 2066 7265 7175 656e 6379 206f 6620
- 0x0810: 726f 7461 7469 6f6e 2063 616e 2062 6520
- 0x0820: 6561 7369 6c79 2063 6861 6e67 6564 2062
- 0x0830: 7920 6564 6974 696e 670a 3c54 543e 2f65
- 0x0840: 7463 2f6c 6f67 726f 7461 7465 2e64 2f61
- 0x0850: 7061 6368 653c 2f54 543e 2e3c 2f4c 493e
- 0x0860: 0a0a 3c4c 493e 0a54 6865 2064 6566 6175
- 0x0870: 6c74 2064 6972 6563 746f 7279 2069 6e64
- 0x0880: 6578 2069 7320 3c54 543e 696e 6465 782e
- 0x0890: 6874 6d6c 3c2f 5454 3e2c 206d 6561 6e69
- 0x08a0: 6e67 2074 6861 7420 7265 7175 6573 7473
- 0x08b0: 0a66 6f72 2061 2064 6972 6563 746f 7279
- 0x08c0: 203c 5454 3e2f 666f 6f2f 6261 722f 3c2f
- 0x08d0: 5454 3e20 7769 6c6c 2067 6976 6520 7468
- 0x08e0: 6520 636f 6e74 656e 7473 206f 6620 7468
- 0x08f0: 6520 6669 6c65 203c 5454 3e2f 7661 722f
- 0x0900: 7777 772f 666f 6f2f 6261 722f 696e 6465
- 0x0910: 782e 6874 6d6c 3c2f 5454 3e0a 6966 2069
- 0x0920: 7420 6578 6973 7473 2028 6173 7375 6d69
- 0x0930: 6e67 2074 6861 7420 3c54 543e 2f76 6172
- 0x0940: 2f77 7777 3c2f 5454 3e20 6973 2079 6f75
- 0x0950: 7220 3c54 543e 446f 6375 6d65 6e74 526f
- 0x0960: 6f74 3c2f 5454 3e29 2e3c 2f4c 493e 0a0a
- 0x0970: 3c4c 493e 0a55 7365 7220 6469 7265 6374
- 0x0980: 6f72 6965 7320 6172 6520 656e 6162 6c65
- 0x0990: 642c 2061 6e64 2075 7365 7220 646f 6375
- 0x09a0: 6d65 6e74 7320 7769 6c6c 2062 6520 6c6f
- 0x09b0: 6f6b 6564 2066 6f72 0a69 6e20 7468 6520
- 0x09c0: 3c54 543e 7075 626c 6963 5f68 746d 6c3c
- 0x09d0: 2f54 543e 2064 6972 6563 746f 7279 206f
- 0x09e0: 6620 7468 6520 7573 6572 7327 2068 6f6d
- 0x09f0: 6573 2e20 2054 6865 7365 2064 6972 730a
- 0x0a00: 7368 6f75 6c64 2062 6520 756e 6465 7220
- 0x0a10: 3c54 543e 2f68 6f6d 653c 2f54 543e 2c20
- 0x0a20: 616e 6420 7573 6572 7320 7769 6c6c 206e
- 0x0a30: 6f74 2062 6520 6162 6c65 2074 6f20 7379
- 0x0a40: 6d6c 696e 6b0a 746f 2066 696c 6573 2074
- 0x0a50: 6865 7920 646f 6e27 7420 6f77 6e2e 3c2f
- 0x0a60: 4c49 3e0a 0a3c 2f55 4c3e 0a41 6c6c 2074
- 0x0a70: 6865 2073 7461 6e64 6172 6420 6170 6163
- 0x0a80: 6865 206d 6f64 756c 6573 2061 7265 2061
- 0x0a90: 7661 696c 6162 6c65 2077 6974 6820 7468
- 0x0aa0: 6973 2072 656c 6561 7365 2061 6e64 2061
- 0x0ab0: 7265 0a6e 6f77 206d 616e 6167 6564 2077
- 0x0ac0: 6974 6820 6465 6263 6f6e 662e 2020 5479
- 0x0ad0: 7065 203c 5454 3e64 706b 672d 7265 636f
- 0x0ae0: 6e66 6967 7572 6520 6170 6163 6865 3c2f
- 0x0af0: 5454 3e20 746f 0a73 656c 6563 7420 7768
- 0x0b00: 6963 6820 6d6f 6475 6c65 7320 796f 7520
- 0x0b10: 7761 6e74 2065 6e61 626c 6564 2e20 204d
- 0x0b20: 616e 7920 6f74 6865 7220 6d6f 6475 6c65
- 0x0b30: 7320 6172 6520 6176 6169 6c61 626c 650a
- 0x0b40: 7468 726f 7567 6820 7468 6520 4465 6269
- 0x0b50: 616e 2070 6163 6b61 6765 2073 7973 7465
- 0x0b60: 6d20 7769 7468 2074 6865 206e 616d 6573
- 0x0b70: 203c 5454 3e6c 6962 6170 6163 6865 2d6d
- 0x0b80: 6f64 2d2a 3c2f 5454 3e2e 0a49 6620 796f
- 0x0b90: 7520 6e65 6564 2074 6f20 636f 6d70 696c
- 0x0ba0: 6520 6120 6d6f 6475 6c65 2079 6f75 7273
- 0x0bb0: 656c 662c 2079 6f75 2077 696c 6c20 6e65
- 0x0bc0: 6564 2074 6f20 696e 7374 616c 6c20 7468
- 0x0bd0: 650a 3c54 543e 6170 6163 6865 2d64 6576
- 0x0be0: 3c2f 5454 3e20 7061 636b 6167 652e 0a0a
- 0x0bf0: 3c50 3e4d 6f72 6520 646f 6375 6d65 6e74
- 0x0c00: 6174 696f 6e20 6f6e 2041 7061 6368 6520
- 0x0c10: 6361 6e20 6265 2066 6f75 6e64 206f 6e3a
- 0x0c20: 0a3c 554c 3e0a 3c4c 493e 0a54 6865 203c
- 0x0c30: 4120 4852 4546 3d22 2f64 6f63 2f61 7061
- 0x0c40: 6368 652d 646f 632f 6d61 6e75 616c 2f22
- 0x0c50: 3e41 7061 6368 6520 646f 6375 6d65 6e74
- 0x0c60: 6174 696f 6e3c 2f41 3e20 7374 6f72 6564
- 0x0c70: 206f 6e20 796f 7572 2073 6572 7665 722e
- 0x0c80: 3c2f 4c49 3e0a 0a3c 4c49 3e0a 5468 6520
- 0x0c90: 3c41 2048 5245 463d 2268 7474 703a 2f2f
- 0x0ca0: 7777 772e 6170 6163 6865 2e6f 7267 2f22
- 0x0cb0: 3e41 7061 6368 6520 5072 6f6a 6563 743c
- 0x0cc0: 2f41 3e20 686f 6d65 2073 6974 652e 3c2f
- 0x0cd0: 4c49 3e0a 0a3c 4c49 3e0a 5468 6520 3c41
- 0x0ce0: 2048 5245 463d 2268 7474 703a 2f2f 7777
- 0x0cf0: 772e 6170 6163 6865 2d73 736c 2e6f 7267
- 0x0d00: 2f22 3e41 7061 6368 652d 5353 4c3c 2f41
- 0x0d10: 3e20 686f 6d65 2073 6974 652e 3c2f 4c49
- 0x0d20: 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 2048
- 0x0d30: 5245 463d 2268 7474 703a 2f2f 7065 726c
- 0x0d40: 2e61 7061 6368 652e 6f72 672f 223e 6d6f
- 0x0d50: 6420 7065 726c 3c2f 413e 2068 6f6d 6520
- 0x0d60: 7369 7465 2e3c 2f4c 493e 0a0a 3c4c 493e
- 0x0d70: 0a54 6865 203c 4120 4852 4546 3d22 6874
- 0x0d80: 7470 3a2f 2f77 7777 2e61 7061 6368 6577
- 0x0d90: 6565 6b2e 636f 6d2f 223e 4170 6163 6865
- 0x0da0: 5765 656b 3c2f 413e 206e 6577 736c 6574
- 0x0db0: 7465 722e 3c2f 4c49 3e0a 0a3c 4c49 3e0a
- 0x0dc0: 5468 6520 3c41 2048 5245 463d 2268 7474
- 0x0dd0: 703a 2f2f 7777 772e 6465 6269 616e 2e6f
- 0x0de0: 7267 2f64 6f63 2f22 3e44 6562 6961 6e20
- 0x0df0: 5072 6f6a 6563 740a 446f 6375 6d65 6e74
- 0x0e00: 6174 696f 6e3c 2f41 3e20 7768 6963 6820
- 0x0e10: 636f 6e74 6169 6e73 2048 4f57 544f 732c
- 0x0e20: 2046 4151 732c 2061 6e64 2073 6f66 7477
- 0x0e30: 6172 6520 7570 6461 7465 732e 3c2f 4c49
- 0x0e40: 3e0a 3c2f 554c 3e0a 0a3c 503e 596f 7520
- 0x0e50: 6361 6e20 616c 736f 2063 6f6e 7375 6c74
- 0x0e60: 2074 6865 206c 6973 7420 6f66 203c 4120
- 0x0e70: 4852 4546 3d22 6874 7470 3a2f 2f77 7777
- 0x0e80: 2e62 6f75 7465 6c6c 2e63 6f6d 2f66 6171
- 0x0e90: 2f22 3e57 6f72 6c64 0a57 6964 6520 5765
- 0x0ea0: 6220 4672 6571 7565 6e74 6c79 2041 736b
- 0x0eb0: 6564 2051 7565 7374 696f 6e73 3c2f 413e
- 0x0ec0: 2066 6f72 2069 6e66 6f72 6d61 7469 6f6e
- 0x0ed0: 2e0a 0a3c 4832 3e4c 6574 206f 7468 6572
- 0x0ee0: 2070 656f 706c 6520 6b6e 6f77 2061 626f
- 0x0ef0: 7574 2074 6869 7320 7365 7276 6572 3c2f
- 0x0f00: 4832 3e0a 0a3c 4120 4852 4546 3d22 6874
- 0x0f10: 7470 3a2f 2f6e 6574 6372 6166 742e 636f
- 0x0f20: 6d2f 223e 4e65 7463 7261 6674 3c2f 413e
- 0x0f30: 2070 726f 7669 6465 7320 616e 2069 6e74
- 0x0f40: 6572 6573 7469 6e67 2066 7265 650a 7365
- 0x0f50: 7276 6963 6520 666f 7220 7765 6220 7369
- 0x0f60: 7465 206d 6f6e 6974 6f72 696e 6720 616e
- 0x0f70: 6420 7374 6174 6973 7469 6320 636f 6c6c
- 0x0f80: 6563 7469 6f6e 2e0a 596f 7520 6361 6e20
- 0x0f90: 6c65 7420 7468 656d 206b 6e6f 7720 6162
- 0x0fa0: 6f75 7420 796f 7572 2073 6572 7665 7220
- 0x0fb0: 7573 696e 6720 7468 6569 720a 3c41 2048
- 0x0fc0: 5245 463d 2268 7474 703a 2f2f 7570 7469
- 0x0fd0: 6d65 2e6e 6574 6372 6166 742e 636f 6d2f
- 0x0fe0: 223e 696e 7465 7266 6163 653c 2f41 3e2e
- 0x0ff0: 0a45 6e61 626c 696e 6720 7468 6520 6d6f
- 0x1000: 6e69 746f 7269 6e67 206f 6620 796f 7572
- 0x1010: 2073 6572 7665 7220 7769 6c6c 2070 726f
- 0x1020: 7669 6465 2061 2062 6574 7465 7220 676c
- 0x1030: 6f62 616c 206f 7665 7276 6965 770a 6f66
- 0x1040: 2077 686f 2069 7320 7573 696e 6720 7768
- 0x1050: 6174 2061 6e64 2077 6865 7265 2c20 616e
- 0x1060: 6420 6974 2077 6f75 6c64 2067 6976 6520
- 0x1070: 4465 6269 616e 2061 2062 6574 7465 720a
- 0x1080: 6f76 6572 7669 6577 206f 6620 7468 6520
- 0x1090: 6170 6163 6865 2070 6163 6b61 6765 2075
- 0x10a0: 7361 6765 2e0a 0a3c 4832 3e41 626f 7574
- 0x10b0: 2074 6869 7320 7061 6765 3c2f 4832 3e0a
- 0x10c0: 0a3c 494d 4720 414c 4947 4e3d 2272 6967
- 0x10d0: 6874 2220 414c 543d 2222 2048 4549 4748
- 0x10e0: 543d 2232 3437 2220 5749 4454 483d 2232
- 0x10f0: 3738 2220 5352 433d 2269 636f 6e73 2f6a
- 0x1100: 6865 3036 312e 706e 6722 3e0a 0a3c 503e
- 0x1110: 5468 6973 2069 7320 6120 706c 6163 6568
- 0x1120: 6f6c 6465 7220 7061 6765 2069 6e73 7461
- 0x1130: 6c6c 6564 2062 7920 7468 6520 3c41 0a48
- 0x1140: 5245 463d 2268 7474 703a 2f2f 7777 772e
- 0x1150: 6465 6269 616e 2e6f 7267 2f22 3e44 6562
- 0x1160: 6961 6e3c 2f41 3e0a 7265 6c65 6173 6520
- 0x1170: 6f66 2074 6865 2061 7061 6368 6520 5765
- 0x1180: 6220 7365 7276 6572 2070 6163 6b61 6765
- 0x1190: 2e0a 0a3c 503e 5468 6973 2063 6f6d 7075
- 0x11a0: 7465 7220 6861 7320 696e 7374 616c 6c65
- 0x11b0: 6420 7468 6520 4465 6269 616e 2047 4e55
- 0x11c0: 2f4c 696e 7578 206f 7065 7261 7469 6e67
- 0x11d0: 2073 7973 7465 6d2c 0a62 7574 2069 7420
- 0x11e0: 6861 7320 3c73 7472 6f6e 673e 6e6f 7468
- 0x11f0: 696e 6720 746f 2064 6f20 7769 7468 2074
- 0x1200: 6865 2044 6562 6961 6e0a 5072 6f6a 6563
- 0x1210: 743c 2f73 7472 6f6e 673e 2e20 506c 6561
- 0x1220: 7365 2064 6f20 3c73 7472 6f6e 673e 6e6f
- 0x1230: 743c 2f73 7472 6f6e 673e 2063 6f6e 7461
- 0x1240: 6374 2074 6865 2044 6562 6961 6e0a 5072
- 0x1250: 6f6a 6563 7420 6162 6f75 7420 6974 2e3c
- 0x1260: 2f50 3e0a 0a3c 503e 4966 2079 6f75 2066
- 0x1270: 696e 6420 6120 6275 6720 696e 2074 6869
- 0x1280: 7320 6170 6163 6865 2070 6163 6b61 6765
- 0x1290: 2c20 6f72 2069 6e20 4170 6163 6865 2069
- 0x12a0: 7473 656c 662c 0a70 6c65 6173 6520 6669
- 0x12b0: 6c65 2061 2062 7567 2072 6570 6f72 7420
- 0x12c0: 6f6e 2069 742e 2020 496e 7374 7275 6374
- 0x12d0: 696f 6e73 206f 6e20 646f 696e 6720 7468
- 0x12e0: 6973 2c20 616e 6420 7468 650a 6c69 7374
- 0x12f0: 206f 6620 3c41 2048 5245 463d 2268 7474
- 0x1300: 703a 2f2f 6275 6773 2e64 6562 6961 6e2e
- 0x1310: 6f72 672f 7372 633a 6170 6163 6865 223e
- 0x1320: 6b6e 6f77 6e20 6275 6773 3c2f 413e 206f
- 0x1330: 6620 7468 6973 0a70 6163 6b61 6765 2c20
- 0x1340: 6361 6e20 6265 2066 6f75 6e64 2069 6e20
- 0x1350: 7468 6520 0a3c 4120 4852 4546 3d22 6874
- 0x1360: 7470 3a2f 2f77 7777 2e64 6562 6961 6e2e
- 0x1370: 6f72 672f 4275 6773 2f52 6570 6f72 7469
- 0x1380: 6e67 223e 4465 6269 616e 2042 7567 2054
- 0x1390: 7261 636b 696e 6720 5379 7374 656d 3c2f
- 0x13a0: 413e 2e0a 0a3c 503e 5468 616e 6b73 2066
- 0x13b0: 6f72 2075 7369 6e67 2074 6869 7320 7061
- 0x13c0: 636b 6167 652c 2061 6e64 2063 6f6e 6772
- 0x13d0: 6174 756c 6174 696f 6e73 2066 6f72 2079
- 0x13e0: 6f75 7220 6368 6f69 6365 206f 660a 6120
- 0x13f0: 4465 6269 616e 2073 7973 7465 6d21 3c2f
- 0x1400: 503e 0a0a 3c44 4956 2061 6c69 676e 3d22
- 0x1410: 6365 6e74 6572 223e 0a3c 6120 6872 6566
- 0x1420: 3d22 6874 7470 3a2f 2f77 7777 2e64 6562
- 0x1430: 6961 6e2e 6f72 672f 223e 0a3c 494d 4720
- 0x1440: 616c 6967 6e3d 226d 6964 646c 6522 2068
- 0x1450: 6569 6768 743d 2233 3022 2077 6964 7468
- 0x1460: 3d22 3235 2220 7372 633d 2269 636f 6e73
- 0x1470: 2f64 6562 6961 6e2f 6f70 656e 6c6f 676f
- 0x1480: 2d32 352e 6a70 6722 2061 6c74 3d22 4465
- 0x1490: 6269 616e 223e 0a3c 2f61 3e0a 3c61 2068
- 0x14a0: 7265 663d 2268 7474 703a 2f2f 7777 772e
- 0x14b0: 6170 6163 6865 2e6f 7267 2f22 3e0a 3c49
- 0x14c0: 4d47 2061 6c69 676e 3d22 6d69 6464 6c65
- 0x14d0: 2220 6865 6967 6874 3d22 3332 2220 7769
- 0x14e0: 6474 683d 2232 3539 2220 7372 633d 2269
- 0x14f0: 636f 6e73 2f61 7061 6368 655f 7062 2e70
- 0x1500: 6e67 2220 616c 743d 2241 7061 6368 6522
- 0x1510: 3e0a 3c2f 613e 0a3c 2f44 4956 3e0a 0a3c
- 0x1520: 212d 2d0a 2020 5468 6973 2070 6167 6520
- 0x1530: 7761 7320 696e 6974 6961 6c6c 7920 6372
- 0x1540: 6561 7465 6420 6279 204a 6f68 6e69 6520
- 0x1550: 496e 6772 616d 2028 6874 7470 3a2f 2f6e
- 0x1560: 6574 676f 642e 6e65 742f 290a 2020 4974
- 0x1570: 2077 6173 206c 6174 6572 2065 6469 7465
- 0x1580: 6420 6279 204d 6174 7468 6577 2057 696c
- 0x1590: 636f 7820 616e 6420 4a6f 7369 7020 526f
- 0x15a0: 6469 6e2e 0a20 204c 6173 7420 6d6f 6469
- 0x15b0: 6669 6564 3a20 2444 6174 653a 2032 3030
- 0x15c0: 342f 3036 2f32 3020 3135 3a33 333a 3537
- 0x15d0: 2024 2e0a 2020 2d2d 3e0a 0a3c 2f42 4f44
- 0x15e0: 593e 0a3c 2f48 544d 4c3e 0a
-22:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
- 0x0000: 4500 0034 1b6e 4000 4006 2154 7f00 0001
- 0x0010: 7f00 0001 da70 0050 3758 8a49 377a a3a9
- 0x0020: 8010 305f 10ea 0000 0101 080a 4ddc 9219
- 0x0030: 4ddc 9219
-22:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
- 0x0000: 4500 0034 1b70 4000 4006 2152 7f00 0001
- 0x0010: 7f00 0001 da70 0050 3758 8a49 377a a3a9
- 0x0020: 8011 305f 0be1 0000 0101 080a 4ddc 9721
- 0x0030: 4ddc 9219
-22:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
- 0x0000: 4500 0034 1fe8 4000 4006 1cda 7f00 0001
- 0x0010: 7f00 0001 0050 da70 377a a3a9 3758 8a4a
- 0x0020: 8011 2000 1735 0000 0101 080a 4ddc 9723
- 0x0030: 4ddc 9721
-22:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
- 0x0000: 4500 0034 1b72 4000 4006 2150 7f00 0001
- 0x0010: 7f00 0001 da70 0050 3758 8a4a 377a a3aa
- 0x0020: 8010 305f 06d4 0000 0101 080a 4ddc 9723
- 0x0030: 4ddc 9723
diff --git a/contrib/tcpdump/tests/print-xx.out b/contrib/tcpdump/tests/print-xx.out
deleted file mode 100644
index d9d24db55d50..000000000000
--- a/contrib/tcpdump/tests/print-xx.out
+++ /dev/null
@@ -1,419 +0,0 @@
-22:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
- 0x0010: 003c 1b68 4000 4006 2152 7f00 0001 7f00
- 0x0020: 0001 da70 0050 3758 897e 0000 0000 a002
- 0x0030: 7fff 1421 0000 0204 400c 0402 080a 4ddc
- 0x0040: 9216 0000 0000 0103 0302
-22:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
- 0x0010: 003c 0000 4000 4006 3cba 7f00 0001 7f00
- 0x0020: 0001 0050 da70 377a 8df1 3758 897f a012
- 0x0030: 7fff 6eb1 0000 0204 400c 0402 080a 4ddc
- 0x0040: 9216 4ddc 9216 0103 0302
-22:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
- 0x0010: 0034 1b6a 4000 4006 2158 7f00 0001 7f00
- 0x0020: 0001 da70 0050 3758 897f 377a 8df2 8010
- 0x0030: 2000 37d0 0000 0101 080a 4ddc 9216 4ddc
- 0x0040: 9216
-22:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
- 0x0010: 00fe 1b6c 4000 4006 208c 7f00 0001 7f00
- 0x0020: 0001 da70 0050 3758 897f 377a 8df2 8018
- 0x0030: 2000 fef2 0000 0101 080a 4ddc 9217 4ddc
- 0x0040: 9216 4745 5420 2f20 4854 5450 2f31 2e31
- 0x0050: 0d0a 486f 7374 3a20 6c6f 6361 6c68 6f73
- 0x0060: 740d 0a55 7365 722d 4167 656e 743a 2045
- 0x0070: 4c69 6e6b 732f 302e 3130 2e34 2d37 2d64
- 0x0080: 6562 6961 6e20 2874 6578 746d 6f64 653b
- 0x0090: 204c 696e 7578 2032 2e36 2e31 312d 312d
- 0x00a0: 3638 362d 736d 7020 6936 3836 3b20 3133
- 0x00b0: 3278 3536 2d32 290d 0a41 6363 6570 743a
- 0x00c0: 202a 2f2a 0d0a 4163 6365 7074 2d45 6e63
- 0x00d0: 6f64 696e 673a 2067 7a69 700d 0a41 6363
- 0x00e0: 6570 742d 4c61 6e67 7561 6765 3a20 656e
- 0x00f0: 0d0a 436f 6e6e 6563 7469 6f6e 3a20 4b65
- 0x0100: 6570 2d41 6c69 7665 0d0a 0d0a
-22:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
- 0x0010: 0034 1fe4 4000 4006 1cde 7f00 0001 7f00
- 0x0020: 0001 0050 da70 377a 8df2 3758 8a49 8010
- 0x0030: 2000 3703 0000 0101 080a 4ddc 9218 4ddc
- 0x0040: 9217
-22:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
- 0x0010: 15eb 1fe6 4000 4006 0725 7f00 0001 7f00
- 0x0020: 0001 0050 da70 377a 8df2 3758 8a49 8018
- 0x0030: 2000 13e0 0000 0101 080a 4ddc 9219 4ddc
- 0x0040: 9217 4854 5450 2f31 2e31 2032 3030 204f
- 0x0050: 4b0d 0a44 6174 653a 2057 6564 2c20 3036
- 0x0060: 204a 756c 2032 3030 3520 3033 3a35 373a
- 0x0070: 3335 2047 4d54 0d0a 5365 7276 6572 3a20
- 0x0080: 4170 6163 6865 2f31 2e33 2e33 330d 0a4c
- 0x0090: 6173 742d 4d6f 6469 6669 6564 3a20 5375
- 0x00a0: 6e2c 2031 3520 4175 6720 3230 3034 2030
- 0x00b0: 303a 3433 3a34 3120 474d 540d 0a45 5461
- 0x00c0: 673a 2022 3665 3830 6630 2d31 3438 612d
- 0x00d0: 3431 3165 6231 6264 220d 0a41 6363 6570
- 0x00e0: 742d 5261 6e67 6573 3a20 6279 7465 730d
- 0x00f0: 0a43 6f6e 7465 6e74 2d4c 656e 6774 683a
- 0x0100: 2035 3235 380d 0a4b 6565 702d 416c 6976
- 0x0110: 653a 2074 696d 656f 7574 3d31 352c 206d
- 0x0120: 6178 3d31 3030 0d0a 436f 6e6e 6563 7469
- 0x0130: 6f6e 3a20 4b65 6570 2d41 6c69 7665 0d0a
- 0x0140: 436f 6e74 656e 742d 5479 7065 3a20 7465
- 0x0150: 7874 2f68 746d 6c3b 2063 6861 7273 6574
- 0x0160: 3d69 736f 2d38 3835 392d 310d 0a0d 0a3c
- 0x0170: 2144 4f43 5459 5045 2048 544d 4c20 5055
- 0x0180: 424c 4943 2022 2d2f 2f57 3343 2f2f 4454
- 0x0190: 4420 4854 4d4c 2034 2e30 3120 5472 616e
- 0x01a0: 7369 7469 6f6e 616c 2f2f 454e 223e 0a3c
- 0x01b0: 4854 4d4c 3e0a 3c48 4541 443e 0a20 2020
- 0x01c0: 3c4d 4554 4120 4854 5450 2d45 5155 4956
- 0x01d0: 3d22 436f 6e74 656e 742d 5479 7065 2220
- 0x01e0: 434f 4e54 454e 543d 2274 6578 742f 6874
- 0x01f0: 6d6c 3b20 6368 6172 7365 743d 6973 6f2d
- 0x0200: 3838 3539 2d31 223e 0a20 2020 3c4d 4554
- 0x0210: 4120 4e41 4d45 3d22 4465 7363 7269 7074
- 0x0220: 696f 6e22 2043 4f4e 5445 4e54 3d22 5468
- 0x0230: 6520 696e 6974 6961 6c20 696e 7374 616c
- 0x0240: 6c61 7469 6f6e 206f 6620 4465 6269 616e
- 0x0250: 2061 7061 6368 652e 223e 0a20 2020 3c54
- 0x0260: 4954 4c45 3e50 6c61 6365 686f 6c64 6572
- 0x0270: 2070 6167 653c 2f54 4954 4c45 3e0a 3c2f
- 0x0280: 4845 4144 3e0a 3c42 4f44 5920 5445 5854
- 0x0290: 3d22 2330 3030 3030 3022 2042 4743 4f4c
- 0x02a0: 4f52 3d22 2346 4646 4646 4622 204c 494e
- 0x02b0: 4b3d 2223 3030 3030 4546 2220 564c 494e
- 0x02c0: 4b3d 2223 3535 3138 3841 2220 414c 494e
- 0x02d0: 4b3d 2223 4646 3030 3030 223e 0a0a 3c48
- 0x02e0: 313e 506c 6163 6568 6f6c 6465 7220 7061
- 0x02f0: 6765 3c2f 4831 3e0a 3c48 323e 4966 2079
- 0x0300: 6f75 2061 7265 206a 7573 7420 6272 6f77
- 0x0310: 7369 6e67 2074 6865 2077 6562 3c2f 6832
- 0x0320: 3e0a 0a3c 503e 5468 6520 6f77 6e65 7220
- 0x0330: 6f66 2074 6869 7320 7765 6220 7369 7465
- 0x0340: 2068 6173 206e 6f74 2070 7574 2075 7020
- 0x0350: 616e 7920 7765 6220 7061 6765 7320 7965
- 0x0360: 742e 0a50 6c65 6173 6520 636f 6d65 2062
- 0x0370: 6163 6b20 6c61 7465 722e 3c2f 503e 0a0a
- 0x0380: 3c50 3e3c 534d 414c 4c3e 3c43 4954 453e
- 0x0390: 4d6f 7665 2061 6c6f 6e67 2c20 6e6f 7468
- 0x03a0: 696e 6720 746f 2073 6565 2068 6572 652e
- 0x03b0: 2e2e 3c2f 4349 5445 3e20 3a2d 293c 2f53
- 0x03c0: 4d41 4c4c 3e3c 2f50 3e0a 0a3c 4832 3e49
- 0x03d0: 6620 796f 7520 6172 6520 7472 7969 6e67
- 0x03e0: 2074 6f20 6c6f 6361 7465 2074 6865 2061
- 0x03f0: 646d 696e 6973 7472 6174 6f72 206f 6620
- 0x0400: 7468 6973 206d 6163 6869 6e65 3c2f 4832
- 0x0410: 3e0a 0a3c 503e 4966 2079 6f75 2077 616e
- 0x0420: 7420 746f 2072 6570 6f72 7420 736f 6d65
- 0x0430: 7468 696e 6720 6162 6f75 7420 7468 6973
- 0x0440: 2068 6f73 7427 7320 6265 6861 7669 6f72
- 0x0450: 2c20 706c 6561 7365 0a63 6f6e 7461 6374
- 0x0460: 2074 6865 2049 6e74 6572 6e65 7420 5365
- 0x0470: 7276 6963 6520 5072 6f76 6964 6572 2028
- 0x0480: 4953 5029 2069 6e76 6f6c 7665 6420 6469
- 0x0490: 7265 6374 6c79 2e3c 2f50 3e0a 0a3c 503e
- 0x04a0: 5365 6520 7468 6520 3c41 2068 7265 663d
- 0x04b0: 2268 7474 703a 2f2f 7777 772e 6162 7573
- 0x04c0: 652e 6e65 742f 223e 4e65 7477 6f72 6b20
- 0x04d0: 4162 7573 650a 436c 6561 7269 6e67 686f
- 0x04e0: 7573 653c 2f41 3e20 666f 7220 686f 7720
- 0x04f0: 746f 2064 6f20 7468 6973 2e3c 2f50 3e0a
- 0x0500: 0a3c 4832 3e49 6620 796f 7520 6172 6520
- 0x0510: 7468 6520 6164 6d69 6e69 7374 7261 746f
- 0x0520: 7220 6f66 2074 6869 7320 6d61 6368 696e
- 0x0530: 653c 2f48 323e 0a0a 3c50 3e54 6865 2069
- 0x0540: 6e69 7469 616c 2069 6e73 7461 6c6c 6174
- 0x0550: 696f 6e20 6f66 203c 4120 6872 6566 3d22
- 0x0560: 6874 7470 3a2f 2f77 7777 2e64 6562 6961
- 0x0570: 6e2e 6f72 672f 223e 4465 6269 616e 2773
- 0x0580: 0a61 7061 6368 653c 2f41 3e20 7765 6220
- 0x0590: 7365 7276 6572 2070 6163 6b61 6765 2077
- 0x05a0: 6173 2073 7563 6365 7373 6675 6c2e 3c2f
- 0x05b0: 503e 0a0a 3c50 3e3c 5354 524f 4e47 3e59
- 0x05c0: 6f75 2073 686f 756c 6420 7265 706c 6163
- 0x05d0: 6520 7468 6973 2070 6167 6520 7769 7468
- 0x05e0: 2079 6f75 7220 6f77 6e20 7765 6220 7061
- 0x05f0: 6765 7320 6173 0a73 6f6f 6e20 6173 2070
- 0x0600: 6f73 7369 626c 652e 3c2f 5354 524f 4e47
- 0x0610: 3e3c 2f50 3e0a 0a3c 503e 556e 6c65 7373
- 0x0620: 2079 6f75 2063 6861 6e67 6564 2069 7473
- 0x0630: 2063 6f6e 6669 6775 7261 7469 6f6e 2c20
- 0x0640: 796f 7572 206e 6577 2073 6572 7665 7220
- 0x0650: 6973 2063 6f6e 6669 6775 7265 6420 6173
- 0x0660: 2066 6f6c 6c6f 7773 3a0a 3c55 4c3e 0a3c
- 0x0670: 4c49 3e0a 436f 6e66 6967 7572 6174 696f
- 0x0680: 6e20 6669 6c65 7320 6361 6e20 6265 2066
- 0x0690: 6f75 6e64 2069 6e20 3c54 543e 2f65 7463
- 0x06a0: 2f61 7061 6368 653c 2f54 543e 2e3c 2f4c
- 0x06b0: 493e 0a0a 3c4c 493e 0a54 6865 203c 5454
- 0x06c0: 3e44 6f63 756d 656e 7452 6f6f 743c 2f54
- 0x06d0: 543e 2c20 7768 6963 6820 6973 2074 6865
- 0x06e0: 2064 6972 6563 746f 7279 2075 6e64 6572
- 0x06f0: 2077 6869 6368 2061 6c6c 2079 6f75 720a
- 0x0700: 4854 4d4c 2066 696c 6573 2073 686f 756c
- 0x0710: 6420 6578 6973 742c 2069 7320 7365 7420
- 0x0720: 746f 203c 5454 3e2f 7661 722f 7777 773c
- 0x0730: 2f54 543e 2e3c 2f4c 493e 0a0a 3c4c 493e
- 0x0740: 0a43 4749 2073 6372 6970 7473 2061 7265
- 0x0750: 206c 6f6f 6b65 6420 666f 7220 696e 203c
- 0x0760: 5454 3e2f 7573 722f 6c69 622f 6367 692d
- 0x0770: 6269 6e3c 2f54 543e 2c20 7768 6963 6820
- 0x0780: 6973 2077 6865 7265 0a44 6562 6961 6e20
- 0x0790: 7061 636b 6167 6573 2077 696c 6c20 706c
- 0x07a0: 6163 6520 7468 6569 7220 7363 7269 7074
- 0x07b0: 732e 3c2f 4c49 3e0a 0a3c 4c49 3e0a 4c6f
- 0x07c0: 6720 6669 6c65 7320 6172 6520 706c 6163
- 0x07d0: 6564 2069 6e20 3c54 543e 2f76 6172 2f6c
- 0x07e0: 6f67 2f61 7061 6368 653c 2f54 543e 2c20
- 0x07f0: 616e 6420 7769 6c6c 2062 6520 726f 7461
- 0x0800: 7465 640a 7765 656b 6c79 2e20 2054 6865
- 0x0810: 2066 7265 7175 656e 6379 206f 6620 726f
- 0x0820: 7461 7469 6f6e 2063 616e 2062 6520 6561
- 0x0830: 7369 6c79 2063 6861 6e67 6564 2062 7920
- 0x0840: 6564 6974 696e 670a 3c54 543e 2f65 7463
- 0x0850: 2f6c 6f67 726f 7461 7465 2e64 2f61 7061
- 0x0860: 6368 653c 2f54 543e 2e3c 2f4c 493e 0a0a
- 0x0870: 3c4c 493e 0a54 6865 2064 6566 6175 6c74
- 0x0880: 2064 6972 6563 746f 7279 2069 6e64 6578
- 0x0890: 2069 7320 3c54 543e 696e 6465 782e 6874
- 0x08a0: 6d6c 3c2f 5454 3e2c 206d 6561 6e69 6e67
- 0x08b0: 2074 6861 7420 7265 7175 6573 7473 0a66
- 0x08c0: 6f72 2061 2064 6972 6563 746f 7279 203c
- 0x08d0: 5454 3e2f 666f 6f2f 6261 722f 3c2f 5454
- 0x08e0: 3e20 7769 6c6c 2067 6976 6520 7468 6520
- 0x08f0: 636f 6e74 656e 7473 206f 6620 7468 6520
- 0x0900: 6669 6c65 203c 5454 3e2f 7661 722f 7777
- 0x0910: 772f 666f 6f2f 6261 722f 696e 6465 782e
- 0x0920: 6874 6d6c 3c2f 5454 3e0a 6966 2069 7420
- 0x0930: 6578 6973 7473 2028 6173 7375 6d69 6e67
- 0x0940: 2074 6861 7420 3c54 543e 2f76 6172 2f77
- 0x0950: 7777 3c2f 5454 3e20 6973 2079 6f75 7220
- 0x0960: 3c54 543e 446f 6375 6d65 6e74 526f 6f74
- 0x0970: 3c2f 5454 3e29 2e3c 2f4c 493e 0a0a 3c4c
- 0x0980: 493e 0a55 7365 7220 6469 7265 6374 6f72
- 0x0990: 6965 7320 6172 6520 656e 6162 6c65 642c
- 0x09a0: 2061 6e64 2075 7365 7220 646f 6375 6d65
- 0x09b0: 6e74 7320 7769 6c6c 2062 6520 6c6f 6f6b
- 0x09c0: 6564 2066 6f72 0a69 6e20 7468 6520 3c54
- 0x09d0: 543e 7075 626c 6963 5f68 746d 6c3c 2f54
- 0x09e0: 543e 2064 6972 6563 746f 7279 206f 6620
- 0x09f0: 7468 6520 7573 6572 7327 2068 6f6d 6573
- 0x0a00: 2e20 2054 6865 7365 2064 6972 730a 7368
- 0x0a10: 6f75 6c64 2062 6520 756e 6465 7220 3c54
- 0x0a20: 543e 2f68 6f6d 653c 2f54 543e 2c20 616e
- 0x0a30: 6420 7573 6572 7320 7769 6c6c 206e 6f74
- 0x0a40: 2062 6520 6162 6c65 2074 6f20 7379 6d6c
- 0x0a50: 696e 6b0a 746f 2066 696c 6573 2074 6865
- 0x0a60: 7920 646f 6e27 7420 6f77 6e2e 3c2f 4c49
- 0x0a70: 3e0a 0a3c 2f55 4c3e 0a41 6c6c 2074 6865
- 0x0a80: 2073 7461 6e64 6172 6420 6170 6163 6865
- 0x0a90: 206d 6f64 756c 6573 2061 7265 2061 7661
- 0x0aa0: 696c 6162 6c65 2077 6974 6820 7468 6973
- 0x0ab0: 2072 656c 6561 7365 2061 6e64 2061 7265
- 0x0ac0: 0a6e 6f77 206d 616e 6167 6564 2077 6974
- 0x0ad0: 6820 6465 6263 6f6e 662e 2020 5479 7065
- 0x0ae0: 203c 5454 3e64 706b 672d 7265 636f 6e66
- 0x0af0: 6967 7572 6520 6170 6163 6865 3c2f 5454
- 0x0b00: 3e20 746f 0a73 656c 6563 7420 7768 6963
- 0x0b10: 6820 6d6f 6475 6c65 7320 796f 7520 7761
- 0x0b20: 6e74 2065 6e61 626c 6564 2e20 204d 616e
- 0x0b30: 7920 6f74 6865 7220 6d6f 6475 6c65 7320
- 0x0b40: 6172 6520 6176 6169 6c61 626c 650a 7468
- 0x0b50: 726f 7567 6820 7468 6520 4465 6269 616e
- 0x0b60: 2070 6163 6b61 6765 2073 7973 7465 6d20
- 0x0b70: 7769 7468 2074 6865 206e 616d 6573 203c
- 0x0b80: 5454 3e6c 6962 6170 6163 6865 2d6d 6f64
- 0x0b90: 2d2a 3c2f 5454 3e2e 0a49 6620 796f 7520
- 0x0ba0: 6e65 6564 2074 6f20 636f 6d70 696c 6520
- 0x0bb0: 6120 6d6f 6475 6c65 2079 6f75 7273 656c
- 0x0bc0: 662c 2079 6f75 2077 696c 6c20 6e65 6564
- 0x0bd0: 2074 6f20 696e 7374 616c 6c20 7468 650a
- 0x0be0: 3c54 543e 6170 6163 6865 2d64 6576 3c2f
- 0x0bf0: 5454 3e20 7061 636b 6167 652e 0a0a 3c50
- 0x0c00: 3e4d 6f72 6520 646f 6375 6d65 6e74 6174
- 0x0c10: 696f 6e20 6f6e 2041 7061 6368 6520 6361
- 0x0c20: 6e20 6265 2066 6f75 6e64 206f 6e3a 0a3c
- 0x0c30: 554c 3e0a 3c4c 493e 0a54 6865 203c 4120
- 0x0c40: 4852 4546 3d22 2f64 6f63 2f61 7061 6368
- 0x0c50: 652d 646f 632f 6d61 6e75 616c 2f22 3e41
- 0x0c60: 7061 6368 6520 646f 6375 6d65 6e74 6174
- 0x0c70: 696f 6e3c 2f41 3e20 7374 6f72 6564 206f
- 0x0c80: 6e20 796f 7572 2073 6572 7665 722e 3c2f
- 0x0c90: 4c49 3e0a 0a3c 4c49 3e0a 5468 6520 3c41
- 0x0ca0: 2048 5245 463d 2268 7474 703a 2f2f 7777
- 0x0cb0: 772e 6170 6163 6865 2e6f 7267 2f22 3e41
- 0x0cc0: 7061 6368 6520 5072 6f6a 6563 743c 2f41
- 0x0cd0: 3e20 686f 6d65 2073 6974 652e 3c2f 4c49
- 0x0ce0: 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 2048
- 0x0cf0: 5245 463d 2268 7474 703a 2f2f 7777 772e
- 0x0d00: 6170 6163 6865 2d73 736c 2e6f 7267 2f22
- 0x0d10: 3e41 7061 6368 652d 5353 4c3c 2f41 3e20
- 0x0d20: 686f 6d65 2073 6974 652e 3c2f 4c49 3e0a
- 0x0d30: 0a3c 4c49 3e0a 5468 6520 3c41 2048 5245
- 0x0d40: 463d 2268 7474 703a 2f2f 7065 726c 2e61
- 0x0d50: 7061 6368 652e 6f72 672f 223e 6d6f 6420
- 0x0d60: 7065 726c 3c2f 413e 2068 6f6d 6520 7369
- 0x0d70: 7465 2e3c 2f4c 493e 0a0a 3c4c 493e 0a54
- 0x0d80: 6865 203c 4120 4852 4546 3d22 6874 7470
- 0x0d90: 3a2f 2f77 7777 2e61 7061 6368 6577 6565
- 0x0da0: 6b2e 636f 6d2f 223e 4170 6163 6865 5765
- 0x0db0: 656b 3c2f 413e 206e 6577 736c 6574 7465
- 0x0dc0: 722e 3c2f 4c49 3e0a 0a3c 4c49 3e0a 5468
- 0x0dd0: 6520 3c41 2048 5245 463d 2268 7474 703a
- 0x0de0: 2f2f 7777 772e 6465 6269 616e 2e6f 7267
- 0x0df0: 2f64 6f63 2f22 3e44 6562 6961 6e20 5072
- 0x0e00: 6f6a 6563 740a 446f 6375 6d65 6e74 6174
- 0x0e10: 696f 6e3c 2f41 3e20 7768 6963 6820 636f
- 0x0e20: 6e74 6169 6e73 2048 4f57 544f 732c 2046
- 0x0e30: 4151 732c 2061 6e64 2073 6f66 7477 6172
- 0x0e40: 6520 7570 6461 7465 732e 3c2f 4c49 3e0a
- 0x0e50: 3c2f 554c 3e0a 0a3c 503e 596f 7520 6361
- 0x0e60: 6e20 616c 736f 2063 6f6e 7375 6c74 2074
- 0x0e70: 6865 206c 6973 7420 6f66 203c 4120 4852
- 0x0e80: 4546 3d22 6874 7470 3a2f 2f77 7777 2e62
- 0x0e90: 6f75 7465 6c6c 2e63 6f6d 2f66 6171 2f22
- 0x0ea0: 3e57 6f72 6c64 0a57 6964 6520 5765 6220
- 0x0eb0: 4672 6571 7565 6e74 6c79 2041 736b 6564
- 0x0ec0: 2051 7565 7374 696f 6e73 3c2f 413e 2066
- 0x0ed0: 6f72 2069 6e66 6f72 6d61 7469 6f6e 2e0a
- 0x0ee0: 0a3c 4832 3e4c 6574 206f 7468 6572 2070
- 0x0ef0: 656f 706c 6520 6b6e 6f77 2061 626f 7574
- 0x0f00: 2074 6869 7320 7365 7276 6572 3c2f 4832
- 0x0f10: 3e0a 0a3c 4120 4852 4546 3d22 6874 7470
- 0x0f20: 3a2f 2f6e 6574 6372 6166 742e 636f 6d2f
- 0x0f30: 223e 4e65 7463 7261 6674 3c2f 413e 2070
- 0x0f40: 726f 7669 6465 7320 616e 2069 6e74 6572
- 0x0f50: 6573 7469 6e67 2066 7265 650a 7365 7276
- 0x0f60: 6963 6520 666f 7220 7765 6220 7369 7465
- 0x0f70: 206d 6f6e 6974 6f72 696e 6720 616e 6420
- 0x0f80: 7374 6174 6973 7469 6320 636f 6c6c 6563
- 0x0f90: 7469 6f6e 2e0a 596f 7520 6361 6e20 6c65
- 0x0fa0: 7420 7468 656d 206b 6e6f 7720 6162 6f75
- 0x0fb0: 7420 796f 7572 2073 6572 7665 7220 7573
- 0x0fc0: 696e 6720 7468 6569 720a 3c41 2048 5245
- 0x0fd0: 463d 2268 7474 703a 2f2f 7570 7469 6d65
- 0x0fe0: 2e6e 6574 6372 6166 742e 636f 6d2f 223e
- 0x0ff0: 696e 7465 7266 6163 653c 2f41 3e2e 0a45
- 0x1000: 6e61 626c 696e 6720 7468 6520 6d6f 6e69
- 0x1010: 746f 7269 6e67 206f 6620 796f 7572 2073
- 0x1020: 6572 7665 7220 7769 6c6c 2070 726f 7669
- 0x1030: 6465 2061 2062 6574 7465 7220 676c 6f62
- 0x1040: 616c 206f 7665 7276 6965 770a 6f66 2077
- 0x1050: 686f 2069 7320 7573 696e 6720 7768 6174
- 0x1060: 2061 6e64 2077 6865 7265 2c20 616e 6420
- 0x1070: 6974 2077 6f75 6c64 2067 6976 6520 4465
- 0x1080: 6269 616e 2061 2062 6574 7465 720a 6f76
- 0x1090: 6572 7669 6577 206f 6620 7468 6520 6170
- 0x10a0: 6163 6865 2070 6163 6b61 6765 2075 7361
- 0x10b0: 6765 2e0a 0a3c 4832 3e41 626f 7574 2074
- 0x10c0: 6869 7320 7061 6765 3c2f 4832 3e0a 0a3c
- 0x10d0: 494d 4720 414c 4947 4e3d 2272 6967 6874
- 0x10e0: 2220 414c 543d 2222 2048 4549 4748 543d
- 0x10f0: 2232 3437 2220 5749 4454 483d 2232 3738
- 0x1100: 2220 5352 433d 2269 636f 6e73 2f6a 6865
- 0x1110: 3036 312e 706e 6722 3e0a 0a3c 503e 5468
- 0x1120: 6973 2069 7320 6120 706c 6163 6568 6f6c
- 0x1130: 6465 7220 7061 6765 2069 6e73 7461 6c6c
- 0x1140: 6564 2062 7920 7468 6520 3c41 0a48 5245
- 0x1150: 463d 2268 7474 703a 2f2f 7777 772e 6465
- 0x1160: 6269 616e 2e6f 7267 2f22 3e44 6562 6961
- 0x1170: 6e3c 2f41 3e0a 7265 6c65 6173 6520 6f66
- 0x1180: 2074 6865 2061 7061 6368 6520 5765 6220
- 0x1190: 7365 7276 6572 2070 6163 6b61 6765 2e0a
- 0x11a0: 0a3c 503e 5468 6973 2063 6f6d 7075 7465
- 0x11b0: 7220 6861 7320 696e 7374 616c 6c65 6420
- 0x11c0: 7468 6520 4465 6269 616e 2047 4e55 2f4c
- 0x11d0: 696e 7578 206f 7065 7261 7469 6e67 2073
- 0x11e0: 7973 7465 6d2c 0a62 7574 2069 7420 6861
- 0x11f0: 7320 3c73 7472 6f6e 673e 6e6f 7468 696e
- 0x1200: 6720 746f 2064 6f20 7769 7468 2074 6865
- 0x1210: 2044 6562 6961 6e0a 5072 6f6a 6563 743c
- 0x1220: 2f73 7472 6f6e 673e 2e20 506c 6561 7365
- 0x1230: 2064 6f20 3c73 7472 6f6e 673e 6e6f 743c
- 0x1240: 2f73 7472 6f6e 673e 2063 6f6e 7461 6374
- 0x1250: 2074 6865 2044 6562 6961 6e0a 5072 6f6a
- 0x1260: 6563 7420 6162 6f75 7420 6974 2e3c 2f50
- 0x1270: 3e0a 0a3c 503e 4966 2079 6f75 2066 696e
- 0x1280: 6420 6120 6275 6720 696e 2074 6869 7320
- 0x1290: 6170 6163 6865 2070 6163 6b61 6765 2c20
- 0x12a0: 6f72 2069 6e20 4170 6163 6865 2069 7473
- 0x12b0: 656c 662c 0a70 6c65 6173 6520 6669 6c65
- 0x12c0: 2061 2062 7567 2072 6570 6f72 7420 6f6e
- 0x12d0: 2069 742e 2020 496e 7374 7275 6374 696f
- 0x12e0: 6e73 206f 6e20 646f 696e 6720 7468 6973
- 0x12f0: 2c20 616e 6420 7468 650a 6c69 7374 206f
- 0x1300: 6620 3c41 2048 5245 463d 2268 7474 703a
- 0x1310: 2f2f 6275 6773 2e64 6562 6961 6e2e 6f72
- 0x1320: 672f 7372 633a 6170 6163 6865 223e 6b6e
- 0x1330: 6f77 6e20 6275 6773 3c2f 413e 206f 6620
- 0x1340: 7468 6973 0a70 6163 6b61 6765 2c20 6361
- 0x1350: 6e20 6265 2066 6f75 6e64 2069 6e20 7468
- 0x1360: 6520 0a3c 4120 4852 4546 3d22 6874 7470
- 0x1370: 3a2f 2f77 7777 2e64 6562 6961 6e2e 6f72
- 0x1380: 672f 4275 6773 2f52 6570 6f72 7469 6e67
- 0x1390: 223e 4465 6269 616e 2042 7567 2054 7261
- 0x13a0: 636b 696e 6720 5379 7374 656d 3c2f 413e
- 0x13b0: 2e0a 0a3c 503e 5468 616e 6b73 2066 6f72
- 0x13c0: 2075 7369 6e67 2074 6869 7320 7061 636b
- 0x13d0: 6167 652c 2061 6e64 2063 6f6e 6772 6174
- 0x13e0: 756c 6174 696f 6e73 2066 6f72 2079 6f75
- 0x13f0: 7220 6368 6f69 6365 206f 660a 6120 4465
- 0x1400: 6269 616e 2073 7973 7465 6d21 3c2f 503e
- 0x1410: 0a0a 3c44 4956 2061 6c69 676e 3d22 6365
- 0x1420: 6e74 6572 223e 0a3c 6120 6872 6566 3d22
- 0x1430: 6874 7470 3a2f 2f77 7777 2e64 6562 6961
- 0x1440: 6e2e 6f72 672f 223e 0a3c 494d 4720 616c
- 0x1450: 6967 6e3d 226d 6964 646c 6522 2068 6569
- 0x1460: 6768 743d 2233 3022 2077 6964 7468 3d22
- 0x1470: 3235 2220 7372 633d 2269 636f 6e73 2f64
- 0x1480: 6562 6961 6e2f 6f70 656e 6c6f 676f 2d32
- 0x1490: 352e 6a70 6722 2061 6c74 3d22 4465 6269
- 0x14a0: 616e 223e 0a3c 2f61 3e0a 3c61 2068 7265
- 0x14b0: 663d 2268 7474 703a 2f2f 7777 772e 6170
- 0x14c0: 6163 6865 2e6f 7267 2f22 3e0a 3c49 4d47
- 0x14d0: 2061 6c69 676e 3d22 6d69 6464 6c65 2220
- 0x14e0: 6865 6967 6874 3d22 3332 2220 7769 6474
- 0x14f0: 683d 2232 3539 2220 7372 633d 2269 636f
- 0x1500: 6e73 2f61 7061 6368 655f 7062 2e70 6e67
- 0x1510: 2220 616c 743d 2241 7061 6368 6522 3e0a
- 0x1520: 3c2f 613e 0a3c 2f44 4956 3e0a 0a3c 212d
- 0x1530: 2d0a 2020 5468 6973 2070 6167 6520 7761
- 0x1540: 7320 696e 6974 6961 6c6c 7920 6372 6561
- 0x1550: 7465 6420 6279 204a 6f68 6e69 6520 496e
- 0x1560: 6772 616d 2028 6874 7470 3a2f 2f6e 6574
- 0x1570: 676f 642e 6e65 742f 290a 2020 4974 2077
- 0x1580: 6173 206c 6174 6572 2065 6469 7465 6420
- 0x1590: 6279 204d 6174 7468 6577 2057 696c 636f
- 0x15a0: 7820 616e 6420 4a6f 7369 7020 526f 6469
- 0x15b0: 6e2e 0a20 204c 6173 7420 6d6f 6469 6669
- 0x15c0: 6564 3a20 2444 6174 653a 2032 3030 342f
- 0x15d0: 3036 2f32 3020 3135 3a33 333a 3537 2024
- 0x15e0: 2e0a 2020 2d2d 3e0a 0a3c 2f42 4f44 593e
- 0x15f0: 0a3c 2f48 544d 4c3e 0a
-22:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
- 0x0010: 0034 1b6e 4000 4006 2154 7f00 0001 7f00
- 0x0020: 0001 da70 0050 3758 8a49 377a a3a9 8010
- 0x0030: 305f 10ea 0000 0101 080a 4ddc 9219 4ddc
- 0x0040: 9219
-22:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
- 0x0010: 0034 1b70 4000 4006 2152 7f00 0001 7f00
- 0x0020: 0001 da70 0050 3758 8a49 377a a3a9 8011
- 0x0030: 305f 0be1 0000 0101 080a 4ddc 9721 4ddc
- 0x0040: 9219
-22:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
- 0x0010: 0034 1fe8 4000 4006 1cda 7f00 0001 7f00
- 0x0020: 0001 0050 da70 377a a3a9 3758 8a4a 8011
- 0x0030: 2000 1735 0000 0101 080a 4ddc 9723 4ddc
- 0x0040: 9721
-22:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
- 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
- 0x0010: 0034 1b72 4000 4006 2150 7f00 0001 7f00
- 0x0020: 0001 da70 0050 3758 8a4a 377a a3aa 8010
- 0x0030: 305f 06d4 0000 0101 080a 4ddc 9723 4ddc
- 0x0040: 9723
diff --git a/contrib/tcpdump/tests/rsvp-infinite-loop.pcap b/contrib/tcpdump/tests/rsvp-infinite-loop.pcap
deleted file mode 100644
index dc03dacc8b1c..000000000000
--- a/contrib/tcpdump/tests/rsvp-infinite-loop.pcap
+++ /dev/null
Binary files differ
diff --git a/contrib/tcpdump/udp.h b/contrib/tcpdump/udp.h
index fb45d68f7bef..ad1d8506dde5 100644
--- a/contrib/tcpdump/udp.h
+++ b/contrib/tcpdump/udp.h
@@ -90,4 +90,6 @@ struct udphdr {
#define RIPNG_PORT 521 /*XXX*/
#define DHCP6_SERV_PORT 546 /*XXX*/
#define DHCP6_CLI_PORT 547 /*XXX*/
+#define BABEL_PORT 6696
+#define BABEL_PORT_OLD 6697
#endif
diff --git a/crypto/openssh/ssh.c b/crypto/openssh/ssh.c
index 21fe19bf5dbe..ed3ab926ac79 100644
--- a/crypto/openssh/ssh.c
+++ b/crypto/openssh/ssh.c
@@ -437,7 +437,8 @@ main(int ac, char **av)
/* FALLTHROUGH */
case 'V':
fprintf(stderr, "%s, %s\n",
- SSH_RELEASE, SSLeay_version(SSLEAY_VERSION));
+ ssh_version_get(options.hpn_disabled),
+ SSLeay_version(SSLEAY_VERSION));
if (opt == 'V')
exit(0);
break;
diff --git a/crypto/openssh/sshconnect.c b/crypto/openssh/sshconnect.c
index 042f2a624312..f07317890ea3 100644
--- a/crypto/openssh/sshconnect.c
+++ b/crypto/openssh/sshconnect.c
@@ -585,7 +585,7 @@ ssh_exchange_identification(int timeout_ms)
snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s%s",
compat20 ? PROTOCOL_MAJOR_2 : PROTOCOL_MAJOR_1,
compat20 ? PROTOCOL_MINOR_2 : minor1,
- SSH_RELEASE, compat20 ? "\r\n" : "\n");
+ ssh_version_get(options.hpn_disabled), compat20 ? "\r\n" : "\n");
if (roaming_atomicio(vwrite, connection_out, buf, strlen(buf))
!= strlen(buf))
fatal("write: %.100s", strerror(errno));
diff --git a/crypto/openssh/sshd.c b/crypto/openssh/sshd.c
index 7851a6cfe3b6..fa79b6306a22 100644
--- a/crypto/openssh/sshd.c
+++ b/crypto/openssh/sshd.c
@@ -431,7 +431,7 @@ sshd_exchange_identification(int sock_in, int sock_out)
minor = PROTOCOL_MINOR_1;
}
snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s%s", major, minor,
- SSH_RELEASE, newline);
+ ssh_version_get(options.hpn_disabled), newline);
server_version_string = xstrdup(buf);
/* Send our protocol version identification. */
@@ -894,7 +894,7 @@ static void
usage(void)
{
fprintf(stderr, "%s, %s\n",
- SSH_RELEASE, SSLeay_version(SSLEAY_VERSION));
+ ssh_version_get(0), SSLeay_version(SSLEAY_VERSION));
fprintf(stderr,
"usage: sshd [-46DdeiqTt] [-b bits] [-C connection_spec] [-c host_cert_file]\n"
" [-f config_file] [-g login_grace_time] [-h host_key_file]\n"
@@ -1583,7 +1583,7 @@ main(int ac, char **av)
exit(1);
}
- debug("sshd version %.100s", SSH_RELEASE);
+ debug("sshd version %.100s", ssh_version_get(options.hpn_disabled));
/* Store privilege separation user for later use if required. */
if ((privsep_pw = getpwnam(SSH_PRIVSEP_USER)) == NULL) {
diff --git a/crypto/openssh/version.c b/crypto/openssh/version.c
index 3cb4b7a13aba..2f467949cde5 100644
--- a/crypto/openssh/version.c
+++ b/crypto/openssh/version.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2001 Brian Fundakowski Feldman
+ * Copyright (c) 2012 Eygene Ryabinkin <rea@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -35,30 +36,60 @@ __RCSID("$FreeBSD$");
static char *version = NULL;
+/* NULL means "use default value", empty string means "unset" */
+static const char *addendum = NULL;
+static unsigned char update_version = 1;
+/*
+ * Constructs the version string if it is empty or needs updating.
+ *
+ * HPN patch we're running requires both parties
+ * to have the "hpn" string inside the advertized version
+ * (see compat.c::compat_datafellows), so we should
+ * include it to the generated string if HPN is enabled.
+ */
const char *
-ssh_version_get(void) {
+ssh_version_get(int hpn_disabled)
+{
+ const char *hpn = NULL, *add = NULL;
+ char *newvers = NULL;
+ size_t size = 0;
- if (version == NULL)
- version = xstrdup(SSH_VERSION);
- return (version);
-}
+ if (version != NULL && !update_version)
+ return (version);
-void
-ssh_version_set_addendum(const char *add) {
- char *newvers;
- size_t size;
+ hpn = (hpn_disabled ? NULL : SSH_VERSION_HPN);
+ add = (addendum == NULL ? SSH_VERSION_ADDENDUM :
+ (addendum[0] == '\0' ? NULL : addendum));
- if (add != NULL) {
- size = strlen(SSH_VERSION_BASE) + strlen(SSH_VERSION_HPN) + 1 +
- strlen(add) + 1;
- newvers = xmalloc(size);
- snprintf(newvers, size, "%s %s", SSH_VERSION_BASE,
- SSH_VERSION_HPN, add);
- } else {
- newvers = xstrdup(SSH_VERSION_BASE SSH_VERSION_HPN);
+ size = strlen(SSH_VERSION_BASE) + (hpn ? strlen(hpn) : 0) +
+ (add ? strlen(add) + 1 : 0) + 1;
+ newvers = xmalloc(size);
+ strcpy(newvers, SSH_VERSION_BASE);
+ if (hpn)
+ strcat(newvers, hpn);
+ if (add) {
+ strcat(newvers, " ");
+ strcat(newvers, add);
}
- if (version != NULL)
+
+ if (version)
xfree(version);
version = newvers;
+ update_version = 0;
+
+ return (version);
+}
+
+void
+ssh_version_set_addendum(const char *add)
+{
+ if (add && addendum && !strcmp(add, addendum))
+ return;
+
+ if (addendum)
+ xfree((void *)addendum);
+ addendum = (add ? xstrdup(add) : xstrdup(""));
+
+ update_version = 1;
}
diff --git a/crypto/openssh/version.h b/crypto/openssh/version.h
index 3eb10fc4ffc4..129aad419b8d 100644
--- a/crypto/openssh/version.h
+++ b/crypto/openssh/version.h
@@ -1,13 +1,13 @@
/* $OpenBSD: version.h,v 1.62 2011/08/02 23:13:01 djm Exp $ */
/* $FreeBSD$ */
-#ifndef SSH_VERSION
+#ifndef _VERSION_H_
+#define _VERSION_H_
+
#define SSH_VERSION_BASE "OpenSSH_5.9p1"
#define SSH_VERSION_ADDENDUM "FreeBSD-20111001"
#define SSH_VERSION_HPN "_hpn13v11"
-#define SSH_VERSION SSH_VERSION_BASE SSH_VERSION_HPN " " SSH_VERSION_ADDENDUM
-#define SSH_RELEASE (ssh_version_get())
-const char *ssh_version_get(void);
+const char *ssh_version_get(int hpn_disabled);
void ssh_version_set_addendum(const char *);
-#endif /* SSH_VERSION */
+#endif /* _VERSION_H_ */
diff --git a/etc/defaults/periodic.conf b/etc/defaults/periodic.conf
index 66fbcd37322f..8692b305e21e 100644
--- a/etc/defaults/periodic.conf
+++ b/etc/defaults/periodic.conf
@@ -47,6 +47,7 @@ daily_clean_tmps_dirs="/tmp" # Delete under here
daily_clean_tmps_days="3" # If not accessed for
daily_clean_tmps_ignore=".X*-lock .X11-unix .ICE-unix .font-unix .XIM-unix"
daily_clean_tmps_ignore="$daily_clean_tmps_ignore quota.user quota.group .snap"
+daily_clean_tmps_ignore="$daily_clean_tmps_ignore .sujournal"
# Don't delete these
daily_clean_tmps_verbose="YES" # Mention files deleted
diff --git a/etc/devd/usb.conf b/etc/devd/usb.conf
index 7f830ab6d93c..eb40f3878dd1 100644
--- a/etc/devd/usb.conf
+++ b/etc/devd/usb.conf
@@ -157,7 +157,7 @@ nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x0403";
- match "product" "(0x6001|0x6004|0x6010|0x6011|0x8372|0x9e90|0xa6d0|0xa6d0|0xcc48|0xcc49|0xcc4a|0xd678|0xe6c8|0xe888|0xe889|0xe88a|0xe88b|0xe88c|0xee18|0xf608|0xf60b|0xf850|0xfa00|0xfa01|0xfa02|0xfa03|0xfa04|0xfc08|0xfc09|0xfc0b|0xfc0c|0xfc0d|0xfc82)";
+ match "product" "(0x6001|0x6004|0x6010|0x6011|0x8372|0x9e90|0xcc48|0xcc49|0xcc4a|0xd678|0xe6c8|0xe888|0xe889|0xe88a|0xe88b|0xe88c|0xee18|0xf608|0xf60b|0xf850|0xfa00|0xfa01|0xfa02|0xfa03|0xfa04|0xfc08|0xfc09|0xfc0b|0xfc0c|0xfc0d|0xfc82)";
action "kldload -n uftdi";
};
@@ -1021,7 +1021,7 @@ nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x05c6";
- match "product" "(0x1000|0x6000|0x6613)";
+ match "product" "(0x1000|0x6000|0x6613|0x9000)";
action "kldload -n u3g";
};
@@ -2852,6 +2852,14 @@ nomatch 32 {
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x1199";
+ match "product" "0x68aa";
+ action "kldload -n u3g";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x11ad";
match "product" "0x0701";
action "kldload -n uplcom";
@@ -3661,7 +3669,7 @@ nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x19d2";
- match "product" "(0x0001|0x0002|0x0003|0x0004|0x0005|0x0006|0x0007|0x0008|0x0009|0x000a|0x000b|0x000c|0x000d|0x000e|0x000f|0x0010|0x0011|0x0012|0x0013|0x0014|0x0015|0x0016|0x0017|0x0018|0x0019|0x0020|0x0021|0x0022|0x0023|0x0024|0x0025|0x0026|0x0027|0x0028|0x0029|0x0030|0x0031|0x0032|0x0033|0x0037|0x0039|0x0042|0x0043|0x0048|0x0049|0x0051|0x0052|0x0053|0x0054|0x0055|0x0057|0x0058|0x0059|0x0060|0x0061|0x0062|0x0063|0x0064|0x0066|0x0069|0x0070|0x0073|0x0076|0x0078|0x0082|0x0086|0x0117|0x2000|0x2002|0x2003|0xfff1|0xfff5|0xfffe)";
+ match "product" "(0x0001|0x0002|0x0003|0x0004|0x0005|0x0006|0x0007|0x0008|0x0009|0x000a|0x000b|0x000c|0x000d|0x000e|0x000f|0x0010|0x0011|0x0012|0x0013|0x0014|0x0015|0x0016|0x0017|0x0018|0x0019|0x0020|0x0021|0x0022|0x0023|0x0024|0x0025|0x0026|0x0027|0x0028|0x0029|0x0030|0x0031|0x0032|0x0033|0x0037|0x0039|0x0042|0x0043|0x0048|0x0049|0x0051|0x0052|0x0053|0x0054|0x0055|0x0057|0x0058|0x0059|0x0060|0x0061|0x0062|0x0063|0x0064|0x0066|0x0069|0x0070|0x0073|0x0076|0x0078|0x0082|0x0086|0x0117|0x1179|0x2000|0x2002|0x2003|0xfff1|0xfff5|0xfffe)";
action "kldload -n u3g";
};
@@ -4165,7 +4173,7 @@ nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x9710";
- match "product" "0x7830";
+ match "product" "(0x7830|0x7832)";
action "kldload -n if_mos";
};
@@ -4336,5 +4344,5 @@ nomatch 32 {
action "kldload -n umass";
};
-# 1652 USB entries processed
+# 1654 USB entries processed
diff --git a/etc/mtree/BSD.include.dist b/etc/mtree/BSD.include.dist
index 2de9e84c13e7..c2a0e912ace5 100644
--- a/etc/mtree/BSD.include.dist
+++ b/etc/mtree/BSD.include.dist
@@ -122,6 +122,8 @@
mpilib
..
..
+ nand
+ ..
ofw
..
pbio
@@ -154,6 +156,8 @@
..
msdosfs
..
+ nandfs
+ ..
nfs
..
ntfs
diff --git a/etc/mtree/BSD.usr.dist b/etc/mtree/BSD.usr.dist
index eb1b89b480f4..10e88f3cecea 100644
--- a/etc/mtree/BSD.usr.dist
+++ b/etc/mtree/BSD.usr.dist
@@ -200,6 +200,10 @@
..
..
..
+ dtrace
+ toolkit
+ ..
+ ..
examples
BSD_daemon
..
diff --git a/etc/pam.d/Makefile b/etc/pam.d/Makefile
index f3795b312ac0..7369022cc8b6 100644
--- a/etc/pam.d/Makefile
+++ b/etc/pam.d/Makefile
@@ -7,7 +7,6 @@ FILES= README \
cron \
ftpd \
imap \
- kde \
login \
other \
passwd pop3 \
diff --git a/etc/pam.d/kde b/etc/pam.d/kde
deleted file mode 100644
index f7d54f66c6ca..000000000000
--- a/etc/pam.d/kde
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# $FreeBSD$
-#
-# PAM configuration for the "kde" service
-#
-
-# auth
-#auth sufficient pam_krb5.so no_warn try_first_pass
-#auth sufficient pam_ssh.so no_warn try_first_pass
-auth required pam_unix.so no_warn try_first_pass
-
-# account
-account required pam_nologin.so
-#account required pam_krb5.so
-account required pam_unix.so
-
-# session
-#session optional pam_ssh.so want_agent
-session required pam_permit.so
diff --git a/gnu/lib/Makefile b/gnu/lib/Makefile
index 80039e2f3a96..6750403d66c5 100644
--- a/gnu/lib/Makefile
+++ b/gnu/lib/Makefile
@@ -2,7 +2,11 @@
.include <bsd.own.mk>
-SUBDIR= csu libgcc libgcov libdialog libgomp libregex libreadline libssp
+SUBDIR= csu libgcc libgcov libdialog libgomp libregex libreadline
+
+.if ${MK_SSP} != "no"
+SUBDIR+= libssp
+.endif
# libsupc++ uses libstdc++ headers, although 'make includes' should
# have taken care of that already.
diff --git a/gnu/lib/csu/Makefile b/gnu/lib/csu/Makefile
index 4999d06a578f..a65be66f3826 100644
--- a/gnu/lib/csu/Makefile
+++ b/gnu/lib/csu/Makefile
@@ -12,7 +12,7 @@ CCDIR= ${.CURDIR}/../../usr.bin/cc
SRCS= crtstuff.c tconfig.h tm.h options.h
OBJS= crtbegin.o crtend.o crtbeginT.o
-SOBJS= crtbegin.So crtend.So
+SOBJS= crtbeginS.o crtendS.o
CSTD?= gnu89
CFLAGS+= -DIN_GCC -DHAVE_LD_EH_FRAME_HDR -DDT_CONFIG -D__GLIBC__=3
CFLAGS+= -finhibit-size-directive -fno-inline-functions \
@@ -55,7 +55,7 @@ crtbeginT.o: ${BEGINSRC}
${CC} ${CFLAGS} -g0 -DCRT_BEGIN -DCRTSTUFFT_O \
-c -o ${.TARGET} ${.ALLSRC:N*.h}
-crtbegin.So: ${BEGINSRC}
+crtbeginS.o: ${BEGINSRC}
${CC} ${CFLAGS} -g0 -DCRT_BEGIN ${CRTS_CFLAGS} \
-c -o ${.TARGET} ${.ALLSRC:N*.h}
@@ -63,7 +63,7 @@ crtend.o: ${ENDSRC}
${CC} ${CFLAGS} -g0 -DCRT_END \
-c -o ${.TARGET} ${.ALLSRC:N*.h}
-crtend.So: ${ENDSRC}
+crtendS.o: ${ENDSRC}
${CC} ${CFLAGS} -g0 -DCRT_END ${CRTS_CFLAGS} \
-c -o ${.TARGET} ${.ALLSRC:N*.h}
@@ -74,7 +74,7 @@ tm.h tconfig.h options.h: ${CCDIR}/cc_tools/Makefile
realinstall:
.for file in ${OBJS} ${SOBJS} ${TGTOBJS}
${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
- ${file} ${DESTDIR}${LIBDIR}/${file:S/.So$/S.o/}
+ ${file} ${DESTDIR}${LIBDIR}/${file}
.endfor
.include <bsd.lib.mk>
diff --git a/gnu/lib/libgcc/Makefile b/gnu/lib/libgcc/Makefile
index 47829ca3bd28..9c543773216e 100644
--- a/gnu/lib/libgcc/Makefile
+++ b/gnu/lib/libgcc/Makefile
@@ -15,7 +15,7 @@ MK_SSP= no
.include "${.CURDIR}/../../usr.bin/cc/Makefile.tgt"
-.if ${TARGET_CPUARCH} == "sparc64" || ${TARGET_CPUARCH} == "mips"
+.if ${TARGET_CPUARCH} == "mips"
LIB= gcc
.endif
diff --git a/gnu/lib/libsupc++/Version.map b/gnu/lib/libsupc++/Version.map
index 12438ca61c1e..dfe453a1c238 100644
--- a/gnu/lib/libsupc++/Version.map
+++ b/gnu/lib/libsupc++/Version.map
@@ -126,6 +126,16 @@ CXXABI_1.3 {
# __gnu_cxx::_verbose_terminate_handler()
_ZN9__gnu_cxx27__verbose_terminate_handlerEv;
+ # new / delete operators
+ _Znaj;
+ _ZnajRKSt9nothrow_t;
+ _Znwj;
+ _ZnwjRKSt9nothrow_t;
+ _ZdaPv;
+ _ZdaPvRKSt9nothrow_t;
+ _ZdlPv;
+ _ZdlPvRKSt9nothrow_t;
+
local:
*;
};
diff --git a/gnu/usr.bin/gdb/libgdb/fbsd-threads.c b/gnu/usr.bin/gdb/libgdb/fbsd-threads.c
index 5733e4063ad6..78819a743e51 100644
--- a/gnu/usr.bin/gdb/libgdb/fbsd-threads.c
+++ b/gnu/usr.bin/gdb/libgdb/fbsd-threads.c
@@ -1311,7 +1311,7 @@ tsd_cb (thread_key_t key, void (*destructor)(void *), void *ignore)
else
name = DEPRECATED_SYMBOL_NAME (ms);
- printf_filtered ("Destructor %p <%s>\n", destructor, name);
+ printf_filtered ("Key %d, destructor %p <%s>\n", key, destructor, name);
return 0;
}
diff --git a/include/Makefile b/include/Makefile
index 2cbc9d2113e4..c67dc75b7f48 100644
--- a/include/Makefile
+++ b/include/Makefile
@@ -43,7 +43,7 @@ LSUBDIRS= cam/ata cam/scsi \
dev/ic dev/iicbus ${_dev_ieee488} dev/io dev/lmc dev/mfi dev/ofw \
dev/pbio ${_dev_powermac_nvram} dev/ppbus dev/smbus \
dev/speaker dev/usb dev/utopia dev/vkbd dev/wi \
- fs/devfs fs/fdescfs fs/msdosfs fs/nfs fs/ntfs fs/nullfs \
+ fs/devfs fs/fdescfs fs/msdosfs fs/nandfs fs/nfs fs/ntfs fs/nullfs \
${_fs_nwfs} fs/portalfs fs/procfs fs/smbfs fs/udf fs/unionfs \
geom/cache geom/concat geom/eli geom/gate geom/journal geom/label \
geom/mirror geom/mountver geom/multipath geom/nop \
@@ -157,7 +157,7 @@ copies:
done
.endif
.endfor
-.for i in ${LDIRS} ${LSUBDIRS:Ndev/acpica:Ndev/bktr} ${LSUBSUBDIRS}
+.for i in ${LDIRS} ${LSUBDIRS:Ndev/acpica:Ndev/bktr:Ndev/nand} ${LSUBSUBDIRS}
cd ${.CURDIR}/../sys; \
${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 $i/*.h \
${DESTDIR}${INCLUDEDIR}/$i
@@ -168,6 +168,13 @@ copies:
cd ${.CURDIR}/../sys/dev/bktr; \
${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 ioctl_*.h \
${DESTDIR}${INCLUDEDIR}/dev/bktr
+.if ${MK_NAND} != "no"
+ cd ${.CURDIR}/../sys/dev/nand; \
+ ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 nandsim.h \
+ ${DESTDIR}${INCLUDEDIR}/dev/nand; \
+ ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 nand_dev.h \
+ ${DESTDIR}${INCLUDEDIR}/dev/nand
+.endif
cd ${.CURDIR}/../sys/contrib/altq/altq; \
${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 *.h \
${DESTDIR}${INCLUDEDIR}/altq
@@ -224,7 +231,7 @@ symlinks:
ln -fs ../../../sys/$i/$$h ${DESTDIR}${INCLUDEDIR}/$i; \
done
.endfor
-.for i in ${LSUBDIRS:Ndev/acpica:Ndev/bktr}
+.for i in ${LSUBDIRS:Ndev/acpica:Ndev/bktr:Ndev/nand}
cd ${.CURDIR}/../sys/$i; \
for h in *.h; do \
ln -fs ../../../../sys/$i/$$h ${DESTDIR}${INCLUDEDIR}/$i; \
@@ -240,6 +247,13 @@ symlinks:
ln -fs ../../../../sys/dev/bktr/$$h \
${DESTDIR}${INCLUDEDIR}/dev/bktr; \
done
+.if ${MK_NAND} != "no"
+ cd ${.CURDIR}/../sys/dev/nand; \
+ for h in nandsim.h nand_dev.h; do \
+ ln -fs ../../../../sys/dev/nand/$$h \
+ ${DESTDIR}${INCLUDEDIR}/dev/nand; \
+ done
+.endif
.for i in ${LSUBSUBDIRS}
cd ${.CURDIR}/../sys/$i; \
for h in *.h; do \
diff --git a/include/dirent.h b/include/dirent.h
index e3ef1495f77f..941a97756ea6 100644
--- a/include/dirent.h
+++ b/include/dirent.h
@@ -55,24 +55,8 @@
/* definitions for library routines operating on directories. */
#define DIRBLKSIZ 1024
-struct _telldir; /* see telldir.h */
-struct pthread_mutex;
-
-/* structure describing an open directory. */
-typedef struct _dirdesc {
- int dd_fd; /* file descriptor associated with directory */
- long dd_loc; /* offset in current buffer */
- long dd_size; /* amount of data returned by getdirentries */
- char *dd_buf; /* data buffer */
- int dd_len; /* size of data buffer */
- long dd_seek; /* magic cookie returned by getdirentries */
- long dd_rewind; /* magic cookie for rewinding */
- int dd_flags; /* flags for readdir */
- struct pthread_mutex *dd_lock; /* lock */
- struct _telldir *dd_td; /* telldir position recording */
-} DIR;
-
-#define dirfd(dirp) ((dirp)->dd_fd)
+struct _dirdesc;
+typedef struct _dirdesc DIR;
/* flags for opendir2 */
#define DTF_HIDEW 0x0001 /* hide whiteout entries */
@@ -91,6 +75,7 @@ typedef void * DIR;
__BEGIN_DECLS
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 700
int alphasort(const struct dirent **, const struct dirent **);
+int dirfd(DIR *);
#endif
#if __BSD_VISIBLE
DIR *__opendir2(const char *, int);
diff --git a/include/malloc_np.h b/include/malloc_np.h
index 699077f3c1db..e1305523079d 100644
--- a/include/malloc_np.h
+++ b/include/malloc_np.h
@@ -55,13 +55,11 @@ int mallctlbymib(const size_t *mib, size_t miblen, void *oldp,
#define ALLOCM_ERR_OOM 1
#define ALLOCM_ERR_NOT_MOVED 2
-int allocm(void **ptr, size_t *rsize, size_t size, int flags)
- __attribute__(nonnull(1));
+int allocm(void **ptr, size_t *rsize, size_t size, int flags) __nonnull(1);
int rallocm(void **ptr, size_t *rsize, size_t size, size_t extra,
- int flags) __attribute__(nonnull(1));
-int sallocm(const void *ptr, size_t *rsize, int flags)
- __attribute__(nonnull(1));
-int dallocm(void *ptr, int flags) __attribute__(nonnull(1));
+ int flags) __nonnull(1);
+int sallocm(const void *ptr, size_t *rsize, int flags) __nonnull(1);
+int dallocm(void *ptr, int flags) __nonnull(1);
int nallocm(size_t *rsize, size_t size, int flags);
__END_DECLS
diff --git a/include/protocols/dumprestore.h b/include/protocols/dumprestore.h
index d6740a6193af..93552923f818 100644
--- a/include/protocols/dumprestore.h
+++ b/include/protocols/dumprestore.h
@@ -65,6 +65,15 @@
#endif
#define CHECKSUM (int)84446
+/*
+ * Since ino_t size is changing to 64-bits, yet we desire this structure to
+ * remain compatible with exiting dump formats, we do NOT use ino_t here,
+ * but rather define a 32-bit type in its place. At some point, it may be
+ * necessary to use some of the c_spare[] in order to fully support 64-bit
+ * inode numbers.
+ */
+typedef uint32_t dump_ino_t;
+
union u_spcl {
char dummy[TP_BSIZE];
struct s_spcl {
@@ -73,7 +82,7 @@ union u_spcl {
int32_t c_old_ddate; /* date of previous dump */
int32_t c_volume; /* dump volume number */
int32_t c_old_tapea; /* logical block of this record */
- ino_t c_inumber; /* number of inode */
+ dump_ino_t c_inumber; /* number of inode */
int32_t c_magic; /* magic number (see above) */
int32_t c_checksum; /* record checksum */
/*
diff --git a/lib/Makefile b/lib/Makefile
index 2bff80aa1366..a366f5f84c7f 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -88,6 +88,7 @@ SUBDIR= ${SUBDIR_ORDERED} \
libmemstat \
${_libmilter} \
${_libmp} \
+ ${_libnandfs} \
${_libncp} \
${_libngatm} \
libopie \
@@ -175,6 +176,10 @@ _libipx= libipx
_libthr= libthr
.endif
+.if ${MK_NAND} != "no"
+_libnandfs= libnandfs
+.endif
+
.if ${MK_NETGRAPH} != "no"
_libnetgraph= libnetgraph
.endif
diff --git a/lib/bind/dns/code.h b/lib/bind/dns/code.h
index ad9e11e54f9a..a451eeb03031 100644
--- a/lib/bind/dns/code.h
+++ b/lib/bind/dns/code.h
@@ -83,6 +83,7 @@
#include "rdata/in_1/dhcid_49.c"
#include "rdata/generic/nsec3_50.c"
#include "rdata/generic/nsec3param_51.c"
+#include "rdata/generic/tlsa_52.c"
#include "rdata/generic/hip_55.c"
#include "rdata/generic/spf_99.c"
#include "rdata/generic/unspec_103.c"
@@ -192,6 +193,7 @@
break; \
case 50: result = fromtext_nsec3(rdclass, type, lexer, origin, options, target, callbacks); break; \
case 51: result = fromtext_nsec3param(rdclass, type, lexer, origin, options, target, callbacks); break; \
+ case 52: result = fromtext_tlsa(rdclass, type, lexer, origin, options, target, callbacks); break; \
case 55: result = fromtext_hip(rdclass, type, lexer, origin, options, target, callbacks); break; \
case 99: result = fromtext_spf(rdclass, type, lexer, origin, options, target, callbacks); break; \
case 103: result = fromtext_unspec(rdclass, type, lexer, origin, options, target, callbacks); break; \
@@ -305,6 +307,7 @@
break; \
case 50: result = totext_nsec3(rdata, tctx, target); break; \
case 51: result = totext_nsec3param(rdata, tctx, target); break; \
+ case 52: result = totext_tlsa(rdata, tctx, target); break; \
case 55: result = totext_hip(rdata, tctx, target); break; \
case 99: result = totext_spf(rdata, tctx, target); break; \
case 103: result = totext_unspec(rdata, tctx, target); break; \
@@ -418,6 +421,7 @@
break; \
case 50: result = fromwire_nsec3(rdclass, type, source, dctx, options, target); break; \
case 51: result = fromwire_nsec3param(rdclass, type, source, dctx, options, target); break; \
+ case 52: result = fromwire_tlsa(rdclass, type, source, dctx, options, target); break; \
case 55: result = fromwire_hip(rdclass, type, source, dctx, options, target); break; \
case 99: result = fromwire_spf(rdclass, type, source, dctx, options, target); break; \
case 103: result = fromwire_unspec(rdclass, type, source, dctx, options, target); break; \
@@ -531,6 +535,7 @@
break; \
case 50: result = towire_nsec3(rdata, cctx, target); break; \
case 51: result = towire_nsec3param(rdata, cctx, target); break; \
+ case 52: result = towire_tlsa(rdata, cctx, target); break; \
case 55: result = towire_hip(rdata, cctx, target); break; \
case 99: result = towire_spf(rdata, cctx, target); break; \
case 103: result = towire_unspec(rdata, cctx, target); break; \
@@ -644,6 +649,7 @@
break; \
case 50: result = compare_nsec3(rdata1, rdata2); break; \
case 51: result = compare_nsec3param(rdata1, rdata2); break; \
+ case 52: result = compare_tlsa(rdata1, rdata2); break; \
case 55: result = compare_hip(rdata1, rdata2); break; \
case 99: result = compare_spf(rdata1, rdata2); break; \
case 103: result = compare_unspec(rdata1, rdata2); break; \
@@ -757,6 +763,7 @@
break; \
case 50: result = casecompare_nsec3(rdata1, rdata2); break; \
case 51: result = casecompare_nsec3param(rdata1, rdata2); break; \
+ case 52: result = casecompare_tlsa(rdata1, rdata2); break; \
case 55: result = casecompare_hip(rdata1, rdata2); break; \
case 99: result = casecompare_spf(rdata1, rdata2); break; \
case 103: result = casecompare_unspec(rdata1, rdata2); break; \
@@ -870,6 +877,7 @@
break; \
case 50: result = fromstruct_nsec3(rdclass, type, source, target); break; \
case 51: result = fromstruct_nsec3param(rdclass, type, source, target); break; \
+ case 52: result = fromstruct_tlsa(rdclass, type, source, target); break; \
case 55: result = fromstruct_hip(rdclass, type, source, target); break; \
case 99: result = fromstruct_spf(rdclass, type, source, target); break; \
case 103: result = fromstruct_unspec(rdclass, type, source, target); break; \
@@ -983,6 +991,7 @@
break; \
case 50: result = tostruct_nsec3(rdata, target, mctx); break; \
case 51: result = tostruct_nsec3param(rdata, target, mctx); break; \
+ case 52: result = tostruct_tlsa(rdata, target, mctx); break; \
case 55: result = tostruct_hip(rdata, target, mctx); break; \
case 99: result = tostruct_spf(rdata, target, mctx); break; \
case 103: result = tostruct_unspec(rdata, target, mctx); break; \
@@ -1096,6 +1105,7 @@
break; \
case 50: freestruct_nsec3(source); break; \
case 51: freestruct_nsec3param(source); break; \
+ case 52: freestruct_tlsa(source); break; \
case 55: freestruct_hip(source); break; \
case 99: freestruct_spf(source); break; \
case 103: freestruct_unspec(source); break; \
@@ -1209,6 +1219,7 @@
break; \
case 50: result = additionaldata_nsec3(rdata, add, arg); break; \
case 51: result = additionaldata_nsec3param(rdata, add, arg); break; \
+ case 52: result = additionaldata_tlsa(rdata, add, arg); break; \
case 55: result = additionaldata_hip(rdata, add, arg); break; \
case 99: result = additionaldata_spf(rdata, add, arg); break; \
case 103: result = additionaldata_unspec(rdata, add, arg); break; \
@@ -1322,6 +1333,7 @@
break; \
case 50: result = digest_nsec3(rdata, digest, arg); break; \
case 51: result = digest_nsec3param(rdata, digest, arg); break; \
+ case 52: result = digest_tlsa(rdata, digest, arg); break; \
case 55: result = digest_hip(rdata, digest, arg); break; \
case 99: result = digest_spf(rdata, digest, arg); break; \
case 103: result = digest_unspec(rdata, digest, arg); break; \
@@ -1435,6 +1447,7 @@
break; \
case 50: result = checkowner_nsec3(name, rdclass, type, wildcard); break; \
case 51: result = checkowner_nsec3param(name, rdclass, type, wildcard); break; \
+ case 52: result = checkowner_tlsa(name, rdclass, type, wildcard); break; \
case 55: result = checkowner_hip(name, rdclass, type, wildcard); break; \
case 99: result = checkowner_spf(name, rdclass, type, wildcard); break; \
case 103: result = checkowner_unspec(name, rdclass, type, wildcard); break; \
@@ -1548,6 +1561,7 @@
break; \
case 50: result = checknames_nsec3(rdata, owner, bad); break; \
case 51: result = checknames_nsec3param(rdata, owner, bad); break; \
+ case 52: result = checknames_tlsa(rdata, owner, bad); break; \
case 55: result = checknames_hip(rdata, owner, bad); break; \
case 99: result = checknames_spf(rdata, owner, bad); break; \
case 103: result = checknames_unspec(rdata, owner, bad); break; \
@@ -1718,6 +1732,9 @@
case 233: \
RDATATYPE_COMPARE("nsec3", 50, _typename, _length, _typep); \
break; \
+ case 120: \
+ RDATATYPE_COMPARE("tlsa", 52, _typename, _length, _typep); \
+ break; \
case 208: \
RDATATYPE_COMPARE("hip", 55, _typename, _length, _typep); \
break; \
@@ -1806,6 +1823,7 @@
case 49: return (RRTYPE_DHCID_ATTRIBUTES); \
case 50: return (RRTYPE_NSEC3_ATTRIBUTES); \
case 51: return (RRTYPE_NSEC3PARAM_ATTRIBUTES); \
+ case 52: return (RRTYPE_TLSA_ATTRIBUTES); \
case 55: return (RRTYPE_HIP_ATTRIBUTES); \
case 99: return (RRTYPE_SPF_ATTRIBUTES); \
case 100: return (DNS_RDATATYPEATTR_RESERVED); \
@@ -1875,6 +1893,7 @@
case 49: return (str_totext("DHCID", target)); \
case 50: return (str_totext("NSEC3", target)); \
case 51: return (str_totext("NSEC3PARAM", target)); \
+ case 52: return (str_totext("TLSA", target)); \
case 55: return (str_totext("HIP", target)); \
case 99: return (str_totext("SPF", target)); \
case 100: return (str_totext("UINFO", target)); \
diff --git a/lib/bind/dns/dns/enumtype.h b/lib/bind/dns/dns/enumtype.h
index bc64f69a3bdc..4c9a2f9b57fd 100644
--- a/lib/bind/dns/dns/enumtype.h
+++ b/lib/bind/dns/dns/enumtype.h
@@ -78,6 +78,7 @@ enum {
dns_rdatatype_dhcid = 49,
dns_rdatatype_nsec3 = 50,
dns_rdatatype_nsec3param = 51,
+ dns_rdatatype_tlsa = 52,
dns_rdatatype_hip = 55,
dns_rdatatype_spf = 99,
dns_rdatatype_unspec = 103,
@@ -140,6 +141,7 @@ enum {
#define dns_rdatatype_dhcid ((dns_rdatatype_t)dns_rdatatype_dhcid)
#define dns_rdatatype_nsec3 ((dns_rdatatype_t)dns_rdatatype_nsec3)
#define dns_rdatatype_nsec3param ((dns_rdatatype_t)dns_rdatatype_nsec3param)
+#define dns_rdatatype_tlsa ((dns_rdatatype_t)dns_rdatatype_tlsa)
#define dns_rdatatype_hip ((dns_rdatatype_t)dns_rdatatype_hip)
#define dns_rdatatype_spf ((dns_rdatatype_t)dns_rdatatype_spf)
#define dns_rdatatype_unspec ((dns_rdatatype_t)dns_rdatatype_unspec)
diff --git a/lib/bind/dns/dns/rdatastruct.h b/lib/bind/dns/dns/rdatastruct.h
index 4b50b575e335..9504fa8c79c0 100644
--- a/lib/bind/dns/dns/rdatastruct.h
+++ b/lib/bind/dns/dns/rdatastruct.h
@@ -1840,6 +1840,41 @@ typedef struct dns_rdata_nsec3param {
#endif /* GENERIC_NSEC3PARAM_51_H */
/*
+ * Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or 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" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id$ */
+
+#ifndef GENERIC_TLSA_52_H
+#define GENERIC_TLSA_52_H 1
+
+/*!
+ * \brief per draft-ietf-dane-protocol-19.txt
+ */
+typedef struct dns_rdata_tlsa {
+ dns_rdatacommon_t common;
+ isc_mem_t *mctx;
+ isc_uint8_t usage;
+ isc_uint8_t selector;
+ isc_uint8_t match;
+ isc_uint16_t length;
+ unsigned char *data;
+} dns_rdata_tlsa_t;
+
+#endif /* GENERIC_TLSA_52_H */
+/*
* Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
diff --git a/lib/clang/include/clang/Basic/Version.inc b/lib/clang/include/clang/Basic/Version.inc
index dd67a2b9dd88..b263857a383b 100644
--- a/lib/clang/include/clang/Basic/Version.inc
+++ b/lib/clang/include/clang/Basic/Version.inc
@@ -5,6 +5,6 @@
#define CLANG_VERSION_MINOR 1
#define CLANG_VENDOR "FreeBSD "
-#define CLANG_VENDOR_SUFFIX " 20120503"
+#define CLANG_VENDOR_SUFFIX " 20120523"
-#define SVN_REVISION "155985"
+#define SVN_REVISION "156863"
diff --git a/lib/clang/include/llvm/Config/config.h b/lib/clang/include/llvm/Config/config.h
index c84c6d893f6c..90bee6e6947a 100644
--- a/lib/clang/include/llvm/Config/config.h
+++ b/lib/clang/include/llvm/Config/config.h
@@ -663,13 +663,13 @@
#define PACKAGE_NAME "LLVM"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "LLVM 3.1svn"
+#define PACKAGE_STRING "LLVM 3.1"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "llvm"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "3.1svn"
+#define PACKAGE_VERSION "3.1"
/* Define as the return type of signal handlers (`int' or `void'). */
#define RETSIGTYPE void
diff --git a/lib/libc/Makefile b/lib/libc/Makefile
index 22223846695e..ed3705365611 100644
--- a/lib/libc/Makefile
+++ b/lib/libc/Makefile
@@ -26,7 +26,9 @@ SHLIB_MAJOR= 7
WARNS?= 2
CFLAGS+=-I${.CURDIR}/include -I${.CURDIR}/../../include
CFLAGS+=-I${.CURDIR}/${LIBC_ARCH}
+.if ${MK_NLS} != "no"
CFLAGS+=-DNLS
+.endif
CLEANFILES+=tags
INSTALL_PIC_ARCHIVE=
PRECIOUSLIB=
@@ -41,7 +43,11 @@ CFLAGS+=${CANCELPOINTS_CFLAGS}
#
DPADD+= ${LIBGCC}
LDFLAGS+= -nodefaultlibs
-LDADD+= -lgcc -lssp_nonshared
+LDADD+= -lgcc
+
+.if ${MK_SSP} != "no"
+LDADD+= -lssp_nonshared
+.endif
# Define (empty) variables so that make doesn't give substitution
# errors if the included makefiles don't change these:
diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc
index 0362ce0c10b6..98e8183adb4e 100644
--- a/lib/libc/gen/Makefile.inc
+++ b/lib/libc/gen/Makefile.inc
@@ -9,7 +9,7 @@ SRCS+= __getosreldate.c __xuname.c \
_thread_init.c \
alarm.c arc4random.c assert.c aux.c basename.c check_utility_compat.c \
clock.c closedir.c confstr.c \
- crypt.c ctermid.c daemon.c devname.c dirname.c disklabel.c \
+ crypt.c ctermid.c daemon.c devname.c dirfd.c dirname.c disklabel.c \
dlfcn.c drand48.c elf_utils.c erand48.c err.c errlst.c errno.c \
exec.c fdevname.c feature_present.c fmtcheck.c fmtmsg.c fnmatch.c \
fpclassify.c frexp.c fstab.c ftok.c fts.c fts-compat.c ftw.c \
diff --git a/lib/libc/gen/Symbol.map b/lib/libc/gen/Symbol.map
index d794c0a32ac2..356bee57bdca 100644
--- a/lib/libc/gen/Symbol.map
+++ b/lib/libc/gen/Symbol.map
@@ -382,6 +382,7 @@ FBSD_1.2 {
};
FBSD_1.3 {
+ dirfd;
fdlopen;
__FreeBSD_libc_enter_restricted_mode;
getcontextx;
diff --git a/lib/libc/gen/closedir.c b/lib/libc/gen/closedir.c
index 5db351bbd7da..4b520cc458ae 100644
--- a/lib/libc/gen/closedir.c
+++ b/lib/libc/gen/closedir.c
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
#include "un-namespace.h"
#include "libc_private.h"
+#include "gen-private.h"
#include "telldir.h"
/*
diff --git a/contrib/tcpdump/missing/resolv6.h b/lib/libc/gen/dirfd.c
index ccee03e6c436..e29bfdccb7e3 100644
--- a/contrib/tcpdump/missing/resolv6.h
+++ b/lib/libc/gen/dirfd.c
@@ -1,5 +1,5 @@
-/*
- * Copyright (C) 1999 WIDE Project.
+/*-
+ * Copyright (c) 2011 Gleb Kurtsou <gleb@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -10,14 +10,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. Neither the name of the project 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 PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * 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 PROJECT OR CONTRIBUTORS BE LIABLE
+ * 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)
@@ -25,12 +22,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.
+ *
+ * $FreeBSD$
*/
-/*
- * Resolver options for IPv6.
- * XXX: this should be in an offical include file. There may be conflicts...
- */
-#ifndef HAVE_RES_USE_INET6
-#define RES_USE_INET6 0x80000000 /* use/map IPv6 in gethostbyname() */
-#endif
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "namespace.h"
+#include <sys/param.h>
+
+#include <dirent.h>
+#include "un-namespace.h"
+
+#include "gen-private.h"
+
+int
+dirfd(DIR *dirp)
+{
+
+ return (_dirfd(dirp));
+}
diff --git a/lib/libc/gen/fts-compat.c b/lib/libc/gen/fts-compat.c
index a6ddde4f265d..65854164dc6f 100644
--- a/lib/libc/gen/fts-compat.c
+++ b/lib/libc/gen/fts-compat.c
@@ -52,6 +52,8 @@ __FBSDID("$FreeBSD$");
#include "fts-compat.h"
#include "un-namespace.h"
+#include "gen-private.h"
+
FTSENT *__fts_children_44bsd(FTS *, int);
int __fts_close_44bsd(FTS *);
void *__fts_get_clientptr_44bsd(FTS *);
@@ -711,7 +713,7 @@ fts_build(sp, type)
*/
cderrno = 0;
if (nlinks || type == BREAD) {
- if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) {
+ if (fts_safe_changedir(sp, cur, _dirfd(dirp), NULL)) {
if (nlinks && type == BREAD)
cur->fts_errno = errno;
cur->fts_flags |= FTS_DONTCHDIR;
diff --git a/lib/libc/gen/fts.c b/lib/libc/gen/fts.c
index 1344464585ad..153b8dad45ec 100644
--- a/lib/libc/gen/fts.c
+++ b/lib/libc/gen/fts.c
@@ -52,6 +52,8 @@ __FBSDID("$FreeBSD$");
#include <unistd.h>
#include "un-namespace.h"
+#include "gen-private.h"
+
static FTSENT *fts_alloc(FTS *, char *, size_t);
static FTSENT *fts_build(FTS *, int);
static void fts_lfree(FTSENT *);
@@ -697,7 +699,7 @@ fts_build(FTS *sp, int type)
*/
cderrno = 0;
if (nlinks || type == BREAD) {
- if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) {
+ if (fts_safe_changedir(sp, cur, _dirfd(dirp), NULL)) {
if (nlinks && type == BREAD)
cur->fts_errno = errno;
cur->fts_flags |= FTS_DONTCHDIR;
diff --git a/lib/libc/gen/gen-private.h b/lib/libc/gen/gen-private.h
new file mode 100644
index 000000000000..e8854ad2d856
--- /dev/null
+++ b/lib/libc/gen/gen-private.h
@@ -0,0 +1,59 @@
+/*-
+ * Copyright (c) 1989, 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
+ * 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 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _GEN_PRIVATE_H_
+#define _GEN_PRIVATE_H_
+
+struct _telldir; /* see telldir.h */
+struct pthread_mutex;
+
+/*
+ * Structure describing an open directory.
+ *
+ * NOTE. Change structure layout with care, at least dd_fd field has to
+ * remain unchanged to guarantee backward compatibility.
+ */
+struct _dirdesc {
+ int dd_fd; /* file descriptor associated with directory */
+ long dd_loc; /* offset in current buffer */
+ long dd_size; /* amount of data returned by getdirentries */
+ char *dd_buf; /* data buffer */
+ int dd_len; /* size of data buffer */
+ long dd_seek; /* magic cookie returned by getdirentries */
+ long dd_rewind; /* magic cookie for rewinding */
+ int dd_flags; /* flags for readdir */
+ struct pthread_mutex *dd_lock; /* lock */
+ struct _telldir *dd_td; /* telldir position recording */
+};
+
+#define _dirfd(dirp) ((dirp)->dd_fd)
+
+#endif /* !_GEN_PRIVATE_H_ */
diff --git a/lib/libc/gen/getcwd.c b/lib/libc/gen/getcwd.c
index c886dde98feb..40feedfa0f2a 100644
--- a/lib/libc/gen/getcwd.c
+++ b/lib/libc/gen/getcwd.c
@@ -46,6 +46,8 @@ __FBSDID("$FreeBSD$");
#include <unistd.h>
#include "un-namespace.h"
+#include "gen-private.h"
+
#define ISDOT(dp) \
(dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \
(dp->d_name[1] == '.' && dp->d_name[2] == '\0')))
@@ -117,7 +119,7 @@ getcwd(pt, size)
for (first = 1;; first = 0) {
/* Stat the current level. */
- if (dir != NULL ? _fstat(dirfd(dir), &s) : lstat(".", &s))
+ if (dir != NULL ? _fstat(_dirfd(dir), &s) : lstat(".", &s))
goto err;
/* Save current node values. */
@@ -139,13 +141,13 @@ getcwd(pt, size)
}
/* Open and stat parent directory. */
- fd = _openat(dir != NULL ? dirfd(dir) : AT_FDCWD,
+ fd = _openat(dir != NULL ? _dirfd(dir) : AT_FDCWD,
"..", O_RDONLY);
if (fd == -1)
goto err;
if (dir)
(void) closedir(dir);
- if (!(dir = fdopendir(fd)) || _fstat(dirfd(dir), &s)) {
+ if (!(dir = fdopendir(fd)) || _fstat(_dirfd(dir), &s)) {
_close(fd);
goto err;
}
@@ -171,7 +173,7 @@ getcwd(pt, size)
continue;
/* Save the first error for later. */
- if (fstatat(dirfd(dir), dp->d_name, &s,
+ if (fstatat(_dirfd(dir), dp->d_name, &s,
AT_SYMLINK_NOFOLLOW)) {
if (!save_errno)
save_errno = errno;
diff --git a/lib/libc/gen/getnetgrent.c b/lib/libc/gen/getnetgrent.c
index ca75d9b8d6c9..1ad0957af500 100644
--- a/lib/libc/gen/getnetgrent.c
+++ b/lib/libc/gen/getnetgrent.c
@@ -203,9 +203,7 @@ setnetgrent(const char *group)
if (parse_netgrp(group))
endnetgrent();
else {
- grouphead.grname = (char *)
- malloc(strlen(group) + 1);
- strcpy(grouphead.grname, group);
+ grouphead.grname = strdup(group);
}
if (netf)
fclose(netf);
@@ -292,12 +290,12 @@ _listmatch(const char *list, const char *group, int len)
while(*ptr != ',' && *ptr != '\0' && !isspace((unsigned char)*ptr))
ptr++;
if (strncmp(cptr, group, glen) == 0 && glen == (ptr - cptr))
- return(1);
+ return (1);
while(*ptr == ',' || isspace((unsigned char)*ptr))
ptr++;
}
- return(0);
+ return (0);
}
static int
@@ -311,32 +309,35 @@ _revnetgr_lookup(char* lookupdom, char* map, const char* str,
for (rot = 0; ; rot++) {
switch (rot) {
- case(0): snprintf(key, MAXHOSTNAMELEN, "%s.%s",
- str, dom?dom:lookupdom);
- break;
- case(1): snprintf(key, MAXHOSTNAMELEN, "%s.*",
- str);
- break;
- case(2): snprintf(key, MAXHOSTNAMELEN, "*.%s",
- dom?dom:lookupdom);
- break;
- case(3): snprintf(key, MAXHOSTNAMELEN, "*.*");
- break;
- default: return(0);
+ case(0):
+ snprintf(key, MAXHOSTNAMELEN, "%s.%s", str,
+ dom ? dom : lookupdom);
+ break;
+ case(1):
+ snprintf(key, MAXHOSTNAMELEN, "%s.*", str);
+ break;
+ case(2):
+ snprintf(key, MAXHOSTNAMELEN, "*.%s",
+ dom ? dom : lookupdom);
+ break;
+ case(3):
+ snprintf(key, MAXHOSTNAMELEN, "*.*");
+ break;
+ default: return (0);
}
y = yp_match(lookupdom, map, key, strlen(key), &result,
&resultlen);
if (y == 0) {
rv = _listmatch(result, group, resultlen);
free(result);
- if (rv) return(1);
+ if (rv) return (1);
} else if (y != YPERR_KEY) {
/*
* If we get an error other than 'no
* such key in map' then something is
* wrong and we should stop the search.
*/
- return(-1);
+ return (-1);
}
}
}
@@ -386,14 +387,14 @@ innetgr(const char *group, const char *host, const char *user, const char *dom)
if (_use_only_yp && (host == NULL) != (user == NULL)) {
int ret;
if(yp_get_default_domain(&_netgr_yp_domain))
- return(0);
+ return (0);
ret = _revnetgr_lookup(_netgr_yp_domain,
host?"netgroup.byhost":"netgroup.byuser",
host?host:user, dom, group);
if (ret == 1)
- return(1);
+ return (1);
else if (ret == 0 && dom != NULL)
- return(0);
+ return (0);
}
setnetgrent(group);
@@ -454,9 +455,9 @@ parse_netgrp(const char *group)
while (pos != NULL && *pos != '\0') {
if (*pos == '(') {
grp = (struct netgrp *)malloc(sizeof (struct netgrp));
+ if (grp == NULL)
+ return (1);
bzero((char *)grp, sizeof (struct netgrp));
- grp->ng_next = grouphead.gr;
- grouphead.gr = grp;
pos++;
gpos = strsep(&pos, ")");
#ifdef DEBUG
@@ -477,6 +478,13 @@ parse_netgrp(const char *group)
if (len > 0) {
grp->ng_str[strpos] = (char *)
malloc(len + 1);
+ if (grp->ng_str[strpos] == NULL) {
+ int freepos;
+ for (freepos = 0; freepos < strpos; freepos++)
+ free(grp->ng_str[freepos]);
+ free(grp);
+ return (1);
+ }
bcopy(spos, grp->ng_str[strpos],
len + 1);
}
@@ -490,6 +498,8 @@ parse_netgrp(const char *group)
grp->ng_str[strpos] = NULL;
}
}
+ grp->ng_next = grouphead.gr;
+ grouphead.gr = grp;
#ifdef DEBUG
/*
* Note: on other platforms, malformed netgroup
@@ -526,7 +536,7 @@ parse_netgrp(const char *group)
static struct linelist *
read_for_group(const char *group)
{
- char *pos, *spos, *linep, *olinep;
+ char *pos, *spos, *linep;
int len, olen;
int cont;
struct linelist *lp;
@@ -534,6 +544,7 @@ read_for_group(const char *group)
#ifdef YP
char *result;
int resultlen;
+ linep = NULL;
while (_netgr_yp_enabled || fgets(line, LINSIZ, netf) != NULL) {
if (_netgr_yp_enabled) {
@@ -554,6 +565,7 @@ read_for_group(const char *group)
free(result);
}
#else
+ linep = NULL;
while (fgets(line, LINSIZ, netf) != NULL) {
#endif
pos = (char *)&line;
@@ -576,8 +588,14 @@ read_for_group(const char *group)
pos++;
if (*pos != '\n' && *pos != '\0') {
lp = (struct linelist *)malloc(sizeof (*lp));
+ if (lp == NULL)
+ return (NULL);
lp->l_parsed = 0;
lp->l_groupname = (char *)malloc(len + 1);
+ if (lp->l_groupname == NULL) {
+ free(lp);
+ return (NULL);
+ }
bcopy(spos, lp->l_groupname, len);
*(lp->l_groupname + len) = '\0';
len = strlen(pos);
@@ -595,15 +613,15 @@ read_for_group(const char *group)
} else
cont = 0;
if (len > 0) {
- linep = (char *)malloc(olen + len + 1);
- if (olen > 0) {
- bcopy(olinep, linep, olen);
- free(olinep);
+ linep = (char *)reallocf(linep, olen + len + 1);
+ if (linep == NULL) {
+ free(lp->l_groupname);
+ free(lp);
+ return (NULL);
}
bcopy(pos, linep + olen, len);
olen += len;
*(linep + olen) = '\0';
- olinep = linep;
}
if (cont) {
if (fgets(line, LINSIZ, netf)) {
@@ -634,5 +652,5 @@ read_for_group(const char *group)
*/
rewind(netf);
#endif
- return ((struct linelist *)0);
+ return (NULL);
}
diff --git a/lib/libc/gen/opendir.c b/lib/libc/gen/opendir.c
index 3beead7fbd19..436639907ccc 100644
--- a/lib/libc/gen/opendir.c
+++ b/lib/libc/gen/opendir.c
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
#include <unistd.h>
#include "un-namespace.h"
+#include "gen-private.h"
#include "telldir.h"
static DIR * __opendir_common(int, const char *, int);
diff --git a/lib/libc/gen/readdir.c b/lib/libc/gen/readdir.c
index b4b4c39d7b4b..324870b39ad1 100644
--- a/lib/libc/gen/readdir.c
+++ b/lib/libc/gen/readdir.c
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
#include "un-namespace.h"
#include "libc_private.h"
+#include "gen-private.h"
#include "telldir.h"
/*
diff --git a/lib/libc/gen/rewinddir.c b/lib/libc/gen/rewinddir.c
index 45e450d856ba..0eb091a08246 100644
--- a/lib/libc/gen/rewinddir.c
+++ b/lib/libc/gen/rewinddir.c
@@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <dirent.h>
+#include "gen-private.h"
#include "telldir.h"
void
diff --git a/lib/libc/gen/seekdir.c b/lib/libc/gen/seekdir.c
index 45ed6b558694..e9851a7b1ea6 100644
--- a/lib/libc/gen/seekdir.c
+++ b/lib/libc/gen/seekdir.c
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
#include "un-namespace.h"
#include "libc_private.h"
+#include "gen-private.h"
#include "telldir.h"
/*
diff --git a/lib/libc/gen/telldir.c b/lib/libc/gen/telldir.c
index c2173333b8ea..4954b973a915 100644
--- a/lib/libc/gen/telldir.c
+++ b/lib/libc/gen/telldir.c
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
#include "un-namespace.h"
#include "libc_private.h"
+#include "gen-private.h"
#include "telldir.h"
/*
diff --git a/lib/libc/net/if_indextoname.c b/lib/libc/net/if_indextoname.c
index 4dadce351ad9..4b16433a4ee6 100644
--- a/lib/libc/net/if_indextoname.c
+++ b/lib/libc/net/if_indextoname.c
@@ -70,7 +70,7 @@ if_indextoname(unsigned int ifindex, char *ifname)
for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
if (ifa->ifa_addr &&
ifa->ifa_addr->sa_family == AF_LINK &&
- ifindex == ((struct sockaddr_dl*)ifa->ifa_addr)->sdl_index)
+ ifindex == LLINDEX((struct sockaddr_dl*)ifa->ifa_addr))
break;
}
diff --git a/lib/libc/net/if_nameindex.c b/lib/libc/net/if_nameindex.c
index 7a12d34b58e7..138289c6814e 100644
--- a/lib/libc/net/if_nameindex.c
+++ b/lib/libc/net/if_nameindex.c
@@ -123,7 +123,7 @@ if_nameindex(void)
if (ifa->ifa_addr &&
ifa->ifa_addr->sa_family == AF_LINK) {
ifni2->if_index =
- ((struct sockaddr_dl*)ifa->ifa_addr)->sdl_index;
+ LLINDEX((struct sockaddr_dl*)ifa->ifa_addr);
ifni2->if_name = cp;
strcpy(cp, ifa->ifa_name);
ifni2++;
diff --git a/lib/libc/net/if_nametoindex.c b/lib/libc/net/if_nametoindex.c
index 9d47089971e4..89076c0e021c 100644
--- a/lib/libc/net/if_nametoindex.c
+++ b/lib/libc/net/if_nametoindex.c
@@ -90,7 +90,7 @@ if_nametoindex(const char *ifname)
if (ifa->ifa_addr &&
ifa->ifa_addr->sa_family == AF_LINK &&
strcmp(ifa->ifa_name, ifname) == 0) {
- ni = ((struct sockaddr_dl*)ifa->ifa_addr)->sdl_index;
+ ni = LLINDEX((struct sockaddr_dl*)ifa->ifa_addr);
break;
}
}
diff --git a/lib/libc/net/nsparser.y b/lib/libc/net/nsparser.y
index 730458a37f07..2e57cd26dd3d 100644
--- a/lib/libc/net/nsparser.y
+++ b/lib/libc/net/nsparser.y
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
#define _NS_PRIVATE
#include <nsswitch.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include "un-namespace.h"
diff --git a/lib/libc/net/sctp_sys_calls.c b/lib/libc/net/sctp_sys_calls.c
index 74ff04a842f6..3785a048195a 100644
--- a/lib/libc/net/sctp_sys_calls.c
+++ b/lib/libc/net/sctp_sys_calls.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -32,6 +32,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+
#include <stdio.h>
#include <string.h>
#include <errno.h>
diff --git a/lib/libc/net/sourcefilter.c b/lib/libc/net/sourcefilter.c
index cc0f1b971e91..4d29d9f36e0b 100644
--- a/lib/libc/net/sourcefilter.c
+++ b/lib/libc/net/sourcefilter.c
@@ -120,7 +120,7 @@ __inaddr_to_index(in_addr_t ifaddr)
psu = (sockunion_t *)ifa->ifa_addr;
if (psu && psu->ss.ss_family == AF_LINK &&
strcmp(ifa->ifa_name, ifname) == 0) {
- ifindex = psu->sdl.sdl_index;
+ ifindex = LLINDEX(&psu->sdl);
break;
}
}
diff --git a/lib/libc/powerpc/Symbol.map b/lib/libc/powerpc/Symbol.map
index 14b48114a497..10b7c574e566 100644
--- a/lib/libc/powerpc/Symbol.map
+++ b/lib/libc/powerpc/Symbol.map
@@ -38,6 +38,10 @@ FBSD_1.0 {
vfork;
};
+FBSD_1.3 {
+ __eabi;
+};
+
FBSDprivate_1.0 {
/* PSEUDO syscalls */
__sys_getlogin;
diff --git a/lib/libc/powerpc/gen/Makefile.inc b/lib/libc/powerpc/gen/Makefile.inc
index 79a274656e82..81c6a698fac8 100644
--- a/lib/libc/powerpc/gen/Makefile.inc
+++ b/lib/libc/powerpc/gen/Makefile.inc
@@ -1,6 +1,6 @@
# $FreeBSD$
-SRCS += _ctx_start.S fabs.S flt_rounds.c fpgetmask.c fpgetround.c \
+SRCS += _ctx_start.S eabi.S fabs.S flt_rounds.c fpgetmask.c fpgetround.c \
fpgetsticky.c fpsetmask.c fpsetround.c getcontextx.c \
infinity.c ldexp.c makecontext.c _setjmp.S \
setjmp.S sigsetjmp.S signalcontext.c syncicache.c \
diff --git a/contrib/tcpdump/missing/addrsize.h b/lib/libc/powerpc/gen/eabi.S
index 13db4da9159d..59c231123f20 100644
--- a/contrib/tcpdump/missing/addrsize.h
+++ b/lib/libc/powerpc/gen/eabi.S
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1999 WIDE Project.
+ * Copyright (c) 2011 Marcel Moolenaar
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -10,14 +10,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. Neither the name of the project 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 PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * 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 PROJECT OR CONTRIBUTORS BE LIABLE
+ * 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)
@@ -26,11 +23,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-#ifndef INADDRSZ
-#define INADDRSZ 4 /* IPv4 T_A */
-#endif
-#ifndef IN6ADDRSZ
-#define IN6ADDRSZ 16 /* IPv6 T_AAAA */
-#endif
+#include <machine/asm.h>
+__FBSDID("$FreeBSD$");
+ENTRY(__eabi)
+ blr
+
+ .section .note.GNU-stack,"",%progbits
diff --git a/lib/libc/stdio/Makefile.inc b/lib/libc/stdio/Makefile.inc
index c3b60f64fbff..657005197fbb 100644
--- a/lib/libc/stdio/Makefile.inc
+++ b/lib/libc/stdio/Makefile.inc
@@ -36,7 +36,8 @@ MAN+= fclose.3 ferror.3 fflush.3 fgetln.3 fgets.3 fgetwln.3 fgetws.3 \
fopen.3 fputs.3 \
fputws.3 fread.3 fseek.3 funopen.3 fwide.3 getc.3 \
getline.3 getwc.3 mktemp.3 \
- printf.3 putc.3 putwc.3 remove.3 scanf.3 setbuf.3 stdio.3 tmpnam.3 \
+ printf.3 printf_l.3 putc.3 putwc.3 remove.3 scanf.3 scanf_l.3 setbuf.3 \
+ stdio.3 tmpnam.3 \
ungetc.3 ungetwc.3 wprintf.3 wscanf.3
MLINKS+=fclose.3 fcloseall.3
@@ -63,11 +64,16 @@ MLINKS+=printf.3 asprintf.3 printf.3 dprintf.3 printf.3 fprintf.3 \
printf.3 vasprintf.3 printf.3 vdprintf.3 \
printf.3 vfprintf.3 printf.3 vprintf.3 printf.3 vsnprintf.3 \
printf.3 vsprintf.3
+MLINKS+=printf_l.3 asprintf_l.3 printf_l.3 fprintf_l.3 printf_l.3 snprintf_l.3 \
+ printf_l.3 sprintf_l.3 printf_l.3 vasprintf_l.3 printf_l.3 vfprintf_l.3 \
+ printf_l.3 vprintf_l.3 printf_l.3 vsnprintf_l.3 printf_l.3 vsprintf_l.3
MLINKS+=putc.3 fputc.3 putc.3 putc_unlocked.3 putc.3 putchar.3 \
putc.3 putchar_unlocked.3 putc.3 putw.3
MLINKS+=putwc.3 fputwc.3 putwc.3 putwchar.3
MLINKS+=scanf.3 fscanf.3 scanf.3 sscanf.3 scanf.3 vfscanf.3 scanf.3 vscanf.3 \
scanf.3 vsscanf.3
+MLINKS+=scanf_l.3 fscanf_l.3 scanf_l.3 sscanf_l.3 scanf_l.3 vfscanf_l.3 \
+ scanf_l.3 vscanf_l.3 scanf_l.3 vsscanf_l.3
MLINKS+=setbuf.3 setbuffer.3 setbuf.3 setlinebuf.3 setbuf.3 setvbuf.3
MLINKS+=tmpnam.3 tempnam.3 tmpnam.3 tmpfile.3
MLINKS+=wprintf.3 fwprintf.3 wprintf.3 swprintf.3 \
diff --git a/lib/libc/stdio/fpurge.c b/lib/libc/stdio/fpurge.c
index 6a2c70c3c5da..148e490eafe2 100644
--- a/lib/libc/stdio/fpurge.c
+++ b/lib/libc/stdio/fpurge.c
@@ -62,7 +62,7 @@ fpurge(fp)
FREEUB(fp);
fp->_p = fp->_bf._base;
fp->_r = 0;
- fp->_w = fp->_flags & (__SLBF|__SNBF) ? 0 : fp->_bf._size;
+ fp->_w = fp->_flags & (__SLBF|__SNBF|__SRD) ? 0 : fp->_bf._size;
retval = 0;
}
FUNLOCKFILE(fp);
diff --git a/lib/libc/stdio/printf_l.3 b/lib/libc/stdio/printf_l.3
new file mode 100644
index 000000000000..20c855b0d538
--- /dev/null
+++ b/lib/libc/stdio/printf_l.3
@@ -0,0 +1,80 @@
+.\" Copyright (c) 2012 Isabell Long <issyl0@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 April 7, 2012
+.Dt PRINTF_L 3
+.Os
+.Sh NAME
+.Nm printf_l ,
+.Nm asprintf_l ,
+.Nm fprintf_l ,
+.Nm snprintf_l ,
+.Nm sprintf_l ,
+.Nm vasprintf_l ,
+.Nm vfprintf_l ,
+.Nm vprintf_l ,
+.Nm vsnprintf_l ,
+.Nm vsprintf_l
+.Nd formatted output conversion
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.In stdio.h
+.Ft int
+.Fn printf_l "locale_t loc" "const char * restrict format" "..."
+.Ft int
+.Fn asprintf_l "char **ret" "locale_t loc" "const char * format" "..."
+.Ft int
+.Fn fprintf_l "FILE * restrict stream" "locale_t loc" "const char * restrict format" "..."
+.Ft int
+.Fn snprintf_l "char * restrict str" "size_t size" "locale_t loc" "const char * restrict format" "..."
+.Ft int
+.Fn sprintf_l "char * restrict str" "locale_t loc" "const char * restrict format" "..."
+.Ft int
+.Fn vasprintf_l "char **ret" "locale_t loc" "const char *format" "va_list ap"
+.Ft int
+.Fn vfprintf_l "FILE * restrict stream" "locale_t loc" "const char * restrict format" "va_list ap"
+.Ft int
+.Fn vprintf_l "locale_t loc" "const char * restrict format" "va_list ap"
+.Ft int
+.Fn vsnprintf_l "char * restrict str" "size_t size" "locale_t loc" "const char * restrict format" "va_list ap"
+.Ft int
+.Fn vsprintf_l "char * restrict str" "locale_t loc" "const char * restrict format" "va_list ap"
+.Sh DESCRIPTION
+The above functions are used to convert formatted output in the locale
+.Fa loc .
+They behave in the same way as the versions without the _l suffix, but use
+the specified locale rather than the global or per-thread locale.
+See the specific manual pages for more information.
+.Sh SEE ALSO
+.Xr printf 3 ,
+.Xr xlocale 3
+.Sh STANDARDS
+These functions do not conform to any specific standard so they should be
+considered as non-portable local extensions.
+.Sh HISTORY
+These functions first appeared in Darwin and were first implemented in
+.Fx 9.1 .
diff --git a/lib/libc/stdio/scanf_l.3 b/lib/libc/stdio/scanf_l.3
new file mode 100644
index 000000000000..04ea5d942d33
--- /dev/null
+++ b/lib/libc/stdio/scanf_l.3
@@ -0,0 +1,70 @@
+.\" Copyright (c) 2012 Isabell Long <issyl0@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 April 8, 2012
+.Dt SCANF_L 3
+.Os
+.Sh NAME
+.Nm scanf_l ,
+.Nm fscanf_l ,
+.Nm sscanf_l ,
+.Nm vfscanf_l ,
+.Nm vscanf_l ,
+.Nm vsscanf_l
+.Nd input format conversion
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.In stdio.h
+.Ft int
+.Fn scanf_l "locale_t loc" "const char * restrict format" "..."
+.Ft int
+.Fn fscanf_l "FILE * restrict stream" "locale_t loc" "const char * restrict format" "..."
+.Ft int
+.Fn sscanf_l "const char * restrict str" "locale_t loc" "const char * restrict format" "..."
+.Ft int
+.Fn vfscanf_l "FILE * restrict stream" "locale_t loc" "const char * restrict format" "va_list ap"
+.Ft int
+.Fn vscanf_l "locale_t loc" "const char * restrict format" "va_list ap"
+.Ft int
+.Fn vsscanf_l "const char * restrict str" "locale_t loc" "const char * restrict format" "va_list ap"
+.Sh DESCRIPTION
+The above functions scan input according to a specified
+.Fa format
+in the locale
+.Fa loc .
+They behave in the same way as the versions without the _l suffix, but use
+the specific locale rather than the the global or per-thread locale.
+See the specific manual pages for more information.
+.Sh SEE ALSO
+.Xr scanf 3 ,
+.Xr xlocale 3
+.Sh STANDARDS
+These functions do not conform to any specific standard so they should be
+considered as non-portable local extensions.
+.Sh HISTORY
+These functions first appeared in Darwin and were first implemented in
+.Fx 9.1 .
diff --git a/lib/libc/sys/lseek.2 b/lib/libc/sys/lseek.2
index 874c523196dd..349940a2a5b8 100644
--- a/lib/libc/sys/lseek.2
+++ b/lib/libc/sys/lseek.2
@@ -28,7 +28,7 @@
.\" @(#)lseek.2 8.3 (Berkeley) 4/19/94
.\" $FreeBSD$
.\"
-.Dd April 5, 2007
+.Dd May 26, 2012
.Dt LSEEK 2
.Os
.Sh NAME
@@ -92,9 +92,9 @@ If
.Fa whence
is
.Dv SEEK_HOLE ,
-the offset of the start of the next hole greater than or equal to the supplied
-.Fa offset
-is returned.
+the offset is set to the start of the next hole greater than or equal
+to the supplied
+.Fa offset .
The definition of a hole is provided below.
.It
If
diff --git a/lib/libcompiler_rt/Makefile b/lib/libcompiler_rt/Makefile
index ff9daad1649d..84f9b368c137 100644
--- a/lib/libcompiler_rt/Makefile
+++ b/lib/libcompiler_rt/Makefile
@@ -176,7 +176,7 @@ SRCS+= ${file}.c
. endif
.endfor
-.if ${MACHINE_CPUARCH} != "sparc64" && ${MACHINE_CPUARCH} != "mips"
+.if ${MACHINE_CPUARCH} != "mips"
. if ${MK_INSTALLLIB} != "no"
SYMLINKS+=libcompiler_rt.a ${LIBDIR}/libgcc.a
. endif
diff --git a/lib/libfetch/common.c b/lib/libfetch/common.c
index 39a8a6b20af5..425b6de13145 100644
--- a/lib/libfetch/common.c
+++ b/lib/libfetch/common.c
@@ -209,11 +209,13 @@ conn_t *
fetch_reopen(int sd)
{
conn_t *conn;
+ int opt = 1;
/* allocate and fill connection structure */
if ((conn = calloc(1, sizeof(*conn))) == NULL)
return (NULL);
fcntl(sd, F_SETFD, FD_CLOEXEC);
+ setsockopt(sd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof opt);
conn->sd = sd;
++conn->ref;
return (conn);
diff --git a/lib/libjail/jail.c b/lib/libjail/jail.c
index fa39edf1d513..5cd2ad2dc90a 100644
--- a/lib/libjail/jail.c
+++ b/lib/libjail/jail.c
@@ -853,7 +853,7 @@ jailparam_free(struct jailparam *jp, unsigned njp)
static int
jailparam_type(struct jailparam *jp)
{
- char *p, *nname;
+ char *p, *name, *nname;
size_t miblen, desclen;
int i, isarray;
struct {
@@ -863,7 +863,8 @@ jailparam_type(struct jailparam *jp)
int mib[CTL_MAXNAME];
/* The "lastjid" parameter isn't real. */
- if (!strcmp(jp->jp_name, "lastjid")) {
+ name = jp->jp_name;
+ if (!strcmp(name, "lastjid")) {
jp->jp_valuelen = sizeof(int);
jp->jp_ctltype = CTLTYPE_INT | CTLFLAG_WR;
return (0);
@@ -872,19 +873,19 @@ jailparam_type(struct jailparam *jp)
/* Find the sysctl that describes the parameter. */
mib[0] = 0;
mib[1] = 3;
- snprintf(desc.s, sizeof(desc.s), SJPARAM ".%s", jp->jp_name);
+ snprintf(desc.s, sizeof(desc.s), SJPARAM ".%s", name);
miblen = sizeof(mib) - 2 * sizeof(int);
if (sysctl(mib, 2, mib + 2, &miblen, desc.s, strlen(desc.s)) < 0) {
if (errno != ENOENT) {
snprintf(jail_errmsg, JAIL_ERRMSGLEN,
- "sysctl(0.3.%s): %s", jp->jp_name, strerror(errno));
+ "sysctl(0.3.%s): %s", name, strerror(errno));
return (-1);
}
/*
* The parameter probably doesn't exist. But it might be
* the "no" counterpart to a boolean.
*/
- nname = nononame(jp->jp_name);
+ nname = nononame(name);
if (nname == NULL) {
unknown_parameter:
snprintf(jail_errmsg, JAIL_ERRMSGLEN,
@@ -892,8 +893,10 @@ jailparam_type(struct jailparam *jp)
errno = ENOENT;
return (-1);
}
- snprintf(desc.s, sizeof(desc.s), SJPARAM ".%s", nname);
+ name = alloca(strlen(nname) + 1);
+ strcpy(name, nname);
free(nname);
+ snprintf(desc.s, sizeof(desc.s), SJPARAM ".%s", name);
miblen = sizeof(mib) - 2 * sizeof(int);
if (sysctl(mib, 2, mib + 2, &miblen, desc.s,
strlen(desc.s)) < 0)
@@ -906,7 +909,7 @@ jailparam_type(struct jailparam *jp)
if (sysctl(mib, (miblen / sizeof(int)) + 2, &desc, &desclen,
NULL, 0) < 0) {
snprintf(jail_errmsg, JAIL_ERRMSGLEN,
- "sysctl(0.4.%s): %s", jp->jp_name, strerror(errno));
+ "sysctl(0.4.%s): %s", name, strerror(errno));
return (-1);
}
jp->jp_ctltype = desc.i;
@@ -952,7 +955,7 @@ jailparam_type(struct jailparam *jp)
if (sysctl(mib + 2, miblen / sizeof(int), desc.s, &desclen,
NULL, 0) < 0) {
snprintf(jail_errmsg, JAIL_ERRMSGLEN,
- "sysctl(" SJPARAM ".%s): %s", jp->jp_name,
+ "sysctl(" SJPARAM ".%s): %s", name,
strerror(errno));
return (-1);
}
@@ -970,7 +973,7 @@ jailparam_type(struct jailparam *jp)
if (sysctl(mib + 2, miblen / sizeof(int),
NULL, &jp->jp_valuelen, NULL, 0) < 0) {
snprintf(jail_errmsg, JAIL_ERRMSGLEN,
- "sysctl(" SJPARAM ".%s): %s", jp->jp_name,
+ "sysctl(" SJPARAM ".%s): %s", name,
strerror(errno));
return (-1);
}
@@ -995,10 +998,9 @@ jailparam_type(struct jailparam *jp)
"sysctl(0.1): %s", strerror(errno));
return (-1);
}
- if (desclen ==
- sizeof(SJPARAM) + strlen(jp->jp_name) + 2 &&
+ if (desclen == sizeof(SJPARAM) + strlen(name) + 2 &&
memcmp(SJPARAM ".", desc.s, sizeof(SJPARAM)) == 0 &&
- memcmp(jp->jp_name, desc.s + sizeof(SJPARAM),
+ memcmp(name, desc.s + sizeof(SJPARAM),
desclen - sizeof(SJPARAM) - 2) == 0 &&
desc.s[desclen - 2] == '.')
goto mib_desc;
diff --git a/lib/libkiconv/Makefile b/lib/libkiconv/Makefile
index 4ba860ef903e..ba884571b443 100644
--- a/lib/libkiconv/Makefile
+++ b/lib/libkiconv/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
LIB= kiconv
SHLIBDIR?= /lib
SRCS= kiconv_sysctl.c xlat16_iconv.c xlat16_sysctl.c
@@ -17,4 +19,8 @@ CFLAGS+= -I${.CURDIR}/../../sys
WARNS?= 1
+.if ${MK_ICONV} == "no"
+CFLAGS+= -DICONV_DLOPEN
+.endif
+
.include <bsd.lib.mk>
diff --git a/lib/libkiconv/xlat16_iconv.c b/lib/libkiconv/xlat16_iconv.c
index dc9dc865aba5..f402b784d85b 100644
--- a/lib/libkiconv/xlat16_iconv.c
+++ b/lib/libkiconv/xlat16_iconv.c
@@ -60,10 +60,18 @@ struct xlat16_table {
static struct xlat16_table kiconv_xlat16_open(const char *, const char *, int);
static int chklocale(int, const char *);
+#ifdef ICONV_DLOPEN
static int my_iconv_init(void);
static iconv_t (*my_iconv_open)(const char *, const char *);
static size_t (*my_iconv)(iconv_t, const char **, size_t *, char **, size_t *);
static int (*my_iconv_close)(iconv_t);
+#else
+#include <iconv.h>
+#define my_iconv_init() 0
+#define my_iconv_open iconv_open
+#define my_iconv iconv
+#define my_iconv_close iconv_close
+#endif
static size_t my_iconv_char(iconv_t, const u_char **, size_t *, u_char **, size_t *);
int
@@ -310,6 +318,7 @@ chklocale(int category, const char *code)
return (error);
}
+#ifdef ICONV_DLOPEN
static int
my_iconv_init(void)
{
@@ -327,6 +336,7 @@ my_iconv_init(void)
return (0);
}
+#endif
static size_t
my_iconv_char(iconv_t cd, const u_char **ibuf, size_t * ilen, u_char **obuf,
diff --git a/lib/libmagic/Makefile b/lib/libmagic/Makefile
index 59573060afb1..fbf71efac83b 100644
--- a/lib/libmagic/Makefile
+++ b/lib/libmagic/Makefile
@@ -39,8 +39,9 @@ magic.mgc: mkmagic magic
CLEANFILES+= mkmagic
build-tools: mkmagic
-mkmagic: apprentice.c funcs.c magic.c print.c
- ${CC} ${CFLAGS} -DCOMPILE_ONLY ${LDFLAGS} -o ${.TARGET} ${.ALLSRC}
+mkmagic: apprentice.c funcs.c getline.c magic.c print.c
+ ${CC} ${CFLAGS} -DCOMPILE_ONLY -DHOSTPROG ${LDFLAGS} \
+ -o ${.TARGET} ${.ALLSRC}
FILEVER!= awk '$$1 == "\#define" && $$2 == "VERSION" { print $$3; exit }' \
${.CURDIR}/config.h
diff --git a/lib/libmagic/config.h b/lib/libmagic/config.h
index c7e38ec761a1..c17883f76151 100644
--- a/lib/libmagic/config.h
+++ b/lib/libmagic/config.h
@@ -39,7 +39,9 @@
#define HAVE_FSEEKO 1
/* Define to 1 if you have the `getline' function. */
+#ifndef HOSTPROG
#define HAVE_GETLINE 1
+#endif
/* Define to 1 if you have the <getopt.h> header file. */
#define HAVE_GETOPT_H 1
diff --git a/lib/libnandfs/Makefile b/lib/libnandfs/Makefile
new file mode 100644
index 000000000000..d87573e2f343
--- /dev/null
+++ b/lib/libnandfs/Makefile
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+LIB= nandfs
+SRCS+= nandfs.c
+INCS= libnandfs.h
+
+CFLAGS += -I${.CURDIR}
+
+.include <bsd.lib.mk>
diff --git a/lib/libnandfs/libnandfs.h b/lib/libnandfs/libnandfs.h
new file mode 100644
index 000000000000..8338c63d600b
--- /dev/null
+++ b/lib/libnandfs/libnandfs.h
@@ -0,0 +1,65 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 _LIBNANDFS_NANDFS_H
+#define _LIBNANDFS_NANDFS_H
+
+struct nandfs {
+ struct nandfs_fsdata n_fsdata;
+ struct nandfs_super_block n_sb;
+ char n_ioc[MNAMELEN];
+ char n_dev[MNAMELEN];
+ int n_iocfd;
+ int n_devfd;
+ int n_flags;
+ char n_errmsg[120];
+};
+
+int nandfs_iserror(struct nandfs *);
+const char *nandfs_errmsg(struct nandfs *);
+
+void nandfs_init(struct nandfs *, const char *);
+void nandfs_destroy(struct nandfs *);
+
+const char *nandfs_dev(struct nandfs *);
+
+int nandfs_open(struct nandfs *);
+void nandfs_close(struct nandfs *);
+
+int nandfs_get_cpstat(struct nandfs *, struct nandfs_cpstat *);
+
+ssize_t nandfs_get_cp(struct nandfs *, uint64_t,
+ struct nandfs_cpinfo *, size_t);
+
+ssize_t nandfs_get_snap(struct nandfs *, uint64_t,
+ struct nandfs_cpinfo *, size_t);
+
+int nandfs_make_snap(struct nandfs *, uint64_t *);
+int nandfs_delete_snap(struct nandfs *, uint64_t);
+
+#endif /* _LIBNANDFS_NANDFS_H */
diff --git a/lib/libnandfs/nandfs.c b/lib/libnandfs/nandfs.c
new file mode 100644
index 000000000000..fd59a921133f
--- /dev/null
+++ b/lib/libnandfs/nandfs.c
@@ -0,0 +1,247 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 <assert.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/param.h>
+#include <sys/stdint.h>
+#include <sys/ucred.h>
+#include <sys/disk.h>
+#include <sys/mount.h>
+
+#include <fs/nandfs/nandfs_fs.h>
+#include <libnandfs.h>
+
+#define NANDFS_IS_VALID 0x1
+#define NANDFS_IS_OPENED 0x2
+#define NANDFS_IS_OPENED_DEV 0x4
+#define NANDFS_IS_ERROR 0x8
+
+#define DEBUG
+#undef DEBUG
+#ifdef DEBUG
+#define NANDFS_DEBUG(fmt, args...) do { \
+ printf("libnandfs:" fmt "\n", ##args); } while (0)
+#else
+#define NANDFS_DEBUG(fmt, args...)
+#endif
+
+#define NANDFS_ASSERT_VALID(fs) assert((fs)->n_flags & NANDFS_IS_VALID)
+#define NANDFS_ASSERT_VALID_DEV(fs) \
+ assert(((fs)->n_flags & (NANDFS_IS_VALID | NANDFS_IS_OPENED_DEV)) == \
+ (NANDFS_IS_VALID | NANDFS_IS_OPENED_DEV))
+
+int
+nandfs_iserror(struct nandfs *fs)
+{
+
+ NANDFS_ASSERT_VALID(fs);
+
+ return (fs->n_flags & NANDFS_IS_ERROR);
+}
+
+const char *
+nandfs_errmsg(struct nandfs *fs)
+{
+
+ NANDFS_ASSERT_VALID(fs);
+
+ assert(nandfs_iserror(fs));
+ assert(fs->n_errmsg);
+ return (fs->n_errmsg);
+}
+
+static void
+nandfs_seterr(struct nandfs *fs, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vsnprintf(fs->n_errmsg, sizeof(fs->n_errmsg), fmt, ap);
+ va_end(ap);
+ fs->n_flags |= NANDFS_IS_ERROR;
+}
+
+const char *
+nandfs_dev(struct nandfs *fs)
+{
+
+ NANDFS_ASSERT_VALID(fs);
+ return (fs->n_dev);
+}
+
+void
+nandfs_init(struct nandfs *fs, const char *dir)
+{
+
+ snprintf(fs->n_ioc, sizeof(fs->n_ioc), "%s/%s", dir, ".");
+ fs->n_iocfd = -1;
+ fs->n_flags = NANDFS_IS_VALID;
+}
+
+void
+nandfs_destroy(struct nandfs *fs)
+{
+
+ assert(fs->n_iocfd == -1);
+ fs->n_flags &=
+ ~(NANDFS_IS_ERROR | NANDFS_IS_VALID);
+ assert(fs->n_flags == 0);
+}
+
+int
+nandfs_open(struct nandfs *fs)
+{
+ struct nandfs_fsinfo fsinfo;
+
+ fs->n_flags |= NANDFS_IS_OPENED;
+
+ fs->n_iocfd = open(fs->n_ioc, O_RDONLY, S_IRUSR | S_IWUSR | S_IRGRP |
+ S_IWGRP | S_IROTH | S_IWOTH);
+ if (fs->n_iocfd == -1) {
+ nandfs_seterr(fs, "couldn't open %s: %s", fs->n_ioc,
+ strerror(errno));
+ return (-1);
+ }
+
+ if (ioctl(fs->n_iocfd, NANDFS_IOCTL_GET_FSINFO, &fsinfo) == -1) {
+ nandfs_seterr(fs, "couldn't fetch fsinfo: %s",
+ strerror(errno));
+ return (-1);
+ }
+
+ memcpy(&fs->n_fsdata, &fsinfo.fs_fsdata, sizeof(fs->n_fsdata));
+ memcpy(&fs->n_sb, &fsinfo.fs_super, sizeof(fs->n_sb));
+ snprintf(fs->n_dev, sizeof(fs->n_dev), "%s", fsinfo.fs_dev);
+
+ return (0);
+}
+
+void
+nandfs_close(struct nandfs *fs)
+{
+
+ NANDFS_ASSERT_VALID(fs);
+ assert(fs->n_flags & NANDFS_IS_OPENED);
+
+ close(fs->n_iocfd);
+ fs->n_iocfd = -1;
+ fs->n_flags &= ~NANDFS_IS_OPENED;
+}
+
+int
+nandfs_get_cpstat(struct nandfs *fs, struct nandfs_cpstat *cpstat)
+{
+
+ NANDFS_ASSERT_VALID(fs);
+
+ if (ioctl(fs->n_iocfd, NANDFS_IOCTL_GET_CPSTAT, cpstat) == -1) {
+ nandfs_seterr(fs, "ioctl NANDFS_IOCTL_GET_CPSTAT: %s",
+ strerror(errno));
+ return (-1);
+ }
+
+ return (0);
+}
+
+static ssize_t
+nandfs_get_cpinfo(struct nandfs *fs, uint64_t cno, int mode,
+ struct nandfs_cpinfo *cpinfo, size_t nci)
+{
+ struct nandfs_argv args;
+
+ NANDFS_ASSERT_VALID(fs);
+
+ args.nv_base = (u_long)cpinfo;
+ args.nv_nmembs = nci;
+ args.nv_index = cno;
+ args.nv_flags = mode;
+
+ if (ioctl(fs->n_iocfd, NANDFS_IOCTL_GET_CPINFO, &args) == -1) {
+ nandfs_seterr(fs, "ioctl NANDFS_IOCTL_GET_CPINFO: %s",
+ strerror(errno));
+ return (-1);
+ }
+
+ return (args.nv_nmembs);
+}
+
+ssize_t
+nandfs_get_cp(struct nandfs *fs, uint64_t cno, struct nandfs_cpinfo *cpinfo,
+ size_t nci)
+{
+
+ return (nandfs_get_cpinfo(fs, cno, NANDFS_CHECKPOINT, cpinfo, nci));
+}
+
+ssize_t
+nandfs_get_snap(struct nandfs *fs, uint64_t cno, struct nandfs_cpinfo *cpinfo,
+ size_t nci)
+{
+
+ return (nandfs_get_cpinfo(fs, cno, NANDFS_SNAPSHOT, cpinfo, nci));
+}
+
+int
+nandfs_make_snap(struct nandfs *fs, uint64_t *cno)
+{
+
+ NANDFS_ASSERT_VALID(fs);
+
+ if (ioctl(fs->n_iocfd, NANDFS_IOCTL_MAKE_SNAP, cno) == -1) {
+ nandfs_seterr(fs, "ioctl NANDFS_IOCTL_MAKE_SNAP: %s",
+ strerror(errno));
+ return (-1);
+ }
+
+ return (0);
+}
+
+int
+nandfs_delete_snap(struct nandfs *fs, uint64_t cno)
+{
+
+ NANDFS_ASSERT_VALID(fs);
+
+ if (ioctl(fs->n_iocfd, NANDFS_IOCTL_DELETE_SNAP, &cno) == -1) {
+ nandfs_seterr(fs, "ioctl NANDFS_IOCTL_DELETE_SNAP: %s",
+ strerror(errno));
+ return (-1);
+ }
+
+ return (0);
+}
diff --git a/lib/libpam/libpam/Makefile b/lib/libpam/libpam/Makefile
index 1071e05d4d10..b57a38e7b543 100644
--- a/lib/libpam/libpam/Makefile
+++ b/lib/libpam/libpam/Makefile
@@ -47,16 +47,22 @@ SRCS= openpam_borrow_cred.c \
openpam_constants.c \
openpam_dispatch.c \
openpam_dynamic.c \
+ openpam_features.c \
openpam_findenv.c \
openpam_free_data.c \
openpam_free_envlist.c \
+ openpam_get_feature.c \
openpam_get_option.c \
openpam_load.c \
openpam_log.c \
openpam_nullconv.c \
openpam_readline.c \
+ openpam_readlinev.c \
+ openpam_readword.c \
openpam_restore_cred.c \
+ openpam_set_feature.c \
openpam_set_option.c \
+ openpam_straddch.c \
openpam_subst.c \
openpam_ttyconv.c \
pam_acct_mgmt.c \
@@ -91,12 +97,17 @@ MAN= openpam.3 \
openpam_borrow_cred.3 \
openpam_free_data.3 \
openpam_free_envlist.3 \
+ openpam_get_feature.3 \
openpam_get_option.3 \
openpam_log.3 \
openpam_nullconv.3 \
openpam_readline.3 \
+ openpam_readlinev.3 \
+ openpam_readword.3 \
openpam_restore_cred.3 \
+ openpam_set_feature.3 \
openpam_set_option.3 \
+ openpam_straddch.3 \
openpam_subst.3 \
openpam_ttyconv.3 \
pam.3 \
@@ -137,11 +148,13 @@ MAN= openpam.3 \
MLINKS= pam.conf.5 pam.d.5
CSTD?= c99
-WARNS?= 3
CFLAGS+= -I${.CURDIR} -I${OPENPAM}/include
CFLAGS+= -DLIB_MAJ=${SHLIB_MAJOR}
CFLAGS+= -DOPENPAM_MODULES_DIR='"${PAM_MOD_DIR:C/\/*$//}/"'
-CFLAGS+= -DHAVE_FPURGE=1 -DHAVE_STRLCPY=1
+CFLAGS+= -DHAVE_FDLOPEN=1
+CFLAGS+= -DHAVE_FPURGE=1
+CFLAGS+= -DHAVE_STRLCAT=1
+CFLAGS+= -DHAVE_STRLCPY=1
HEADERS= security/openpam.h \
security/openpam_attr.h \
diff --git a/lib/libpam/modules/pam_exec/pam_exec.8 b/lib/libpam/modules/pam_exec/pam_exec.8
index 3231228927ed..e2be511b0ceb 100644
--- a/lib/libpam/modules/pam_exec/pam_exec.8
+++ b/lib/libpam/modules/pam_exec/pam_exec.8
@@ -131,10 +131,10 @@ This is useful in shell scripts for instance.
.Xr pam 8 ,
.Xr pam_sm_acct_mgmt 8 ,
.Xr pam_sm_authenticate 8 ,
-.Xr pam_sm_chauthtok 8,
+.Xr pam_sm_chauthtok 8 ,
.Xr pam_sm_close_session 8 ,
.Xr pam_sm_open_session 8 ,
-.Xr pam_sm_setcred 8 .
+.Xr pam_sm_setcred 8
.Sh AUTHORS
The
.Nm
diff --git a/lib/libpam/modules/pam_ssh/pam_ssh.c b/lib/libpam/modules/pam_ssh/pam_ssh.c
index ab4990bcbb1f..405dd6bbf416 100644
--- a/lib/libpam/modules/pam_ssh/pam_ssh.c
+++ b/lib/libpam/modules/pam_ssh/pam_ssh.c
@@ -112,7 +112,7 @@ pam_ssh_load_key(const char *dir, const char *kfn, const char *passphrase,
* with an empty passphrase, and if the key is not encrypted,
* accept only an empty passphrase.
*/
- key = key_load_private(fn, NULL, &comment);
+ key = key_load_private(fn, "", &comment);
if (key != NULL && !(*passphrase == '\0' && nullok)) {
key_free(key);
return (NULL);
diff --git a/lib/libprocstat/cd9660.c b/lib/libprocstat/cd9660.c
index 95882be5d9ec..ab95e2a04c33 100644
--- a/lib/libprocstat/cd9660.c
+++ b/lib/libprocstat/cd9660.c
@@ -84,7 +84,7 @@ isofs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn)
}
vn->vn_fsid = dev2udev(kd, mnt.im_dev);
vn->vn_mode = (mode_t)isonode.inode.iso_mode;
- vn->vn_fileid = (long)isonode.i_number;
- vn->vn_size = (u_long)isonode.i_size;
+ vn->vn_fileid = isonode.i_number;
+ vn->vn_size = isonode.i_size;
return (0);
}
diff --git a/lib/libprocstat/common_kvm.c b/lib/libprocstat/common_kvm.c
index 63302bc4f6ed..be05980f183f 100644
--- a/lib/libprocstat/common_kvm.c
+++ b/lib/libprocstat/common_kvm.c
@@ -99,9 +99,9 @@ ufs_filestat(kvm_t *kd, struct vnode *vp, struct vnstat *vn)
* comparisons
*/
vn->vn_fsid = dev2udev(kd, inode.i_dev);
- vn->vn_fileid = (long)inode.i_number;
+ vn->vn_fileid = inode.i_number;
vn->vn_mode = (mode_t)inode.i_mode;
- vn->vn_size = (u_long)inode.i_size;
+ vn->vn_size = inode.i_size;
return (0);
}
diff --git a/lib/libstand/Makefile b/lib/libstand/Makefile
index 567c88680ca4..0ad8fa50b53c 100644
--- a/lib/libstand/Makefile
+++ b/lib/libstand/Makefile
@@ -150,6 +150,9 @@ SRCS+= bootp.c rarp.c bootparam.c
SRCS+= ufs.c nfs.c cd9660.c tftp.c gzipfs.c bzipfs.c
SRCS+= dosfs.c ext2fs.c
SRCS+= splitfs.c
+.if ${MK_NAND} != "no"
+SRCS+= nandfs.c
+.endif
.include <bsd.lib.mk>
diff --git a/lib/libstand/bswap.c b/lib/libstand/bswap.c
index b8e6ffb5ba36..308edda63085 100644
--- a/lib/libstand/bswap.c
+++ b/lib/libstand/bswap.c
@@ -31,7 +31,7 @@ bswap32(u_int32_t x)
u_int64_t
bswap64(u_int64_t x)
{
-#ifdef _LP64
+#ifdef __LP64__
/*
* Assume we have wide enough registers to do it without touching
* memory.
diff --git a/lib/libstand/nandfs.c b/lib/libstand/nandfs.c
new file mode 100644
index 000000000000..67e2fea8103a
--- /dev/null
+++ b/lib/libstand/nandfs.c
@@ -0,0 +1,1041 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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/queue.h>
+#include <sys/stdint.h>
+#include <ufs/ufs/dinode.h>
+#include <fs/nandfs/nandfs_fs.h>
+#include "stand.h"
+#include "string.h"
+#include "zlib.h"
+
+#define DEBUG
+#undef DEBUG
+#ifdef DEBUG
+#define NANDFS_DEBUG(fmt, args...) do { \
+ printf("NANDFS_DEBUG:" fmt "\n", ##args); } while (0)
+#else
+#define NANDFS_DEBUG(fmt, args...)
+#endif
+
+struct nandfs_mdt {
+ uint32_t entries_per_block;
+ uint32_t entries_per_group;
+ uint32_t blocks_per_group;
+ uint32_t groups_per_desc_block; /* desc is super group */
+ uint32_t blocks_per_desc_block; /* desc is super group */
+};
+
+struct bmap_buf {
+ LIST_ENTRY(bmap_buf) list;
+ nandfs_daddr_t blknr;
+ uint64_t *map;
+};
+
+struct nandfs_node {
+ struct nandfs_inode *inode;
+ LIST_HEAD(, bmap_buf) bmap_bufs;
+};
+struct nandfs {
+ int nf_blocksize;
+ int nf_sectorsize;
+ int nf_cpno;
+
+ struct open_file *nf_file;
+ struct nandfs_node *nf_opened_node;
+ u_int nf_offset;
+ uint8_t *nf_buf;
+ int64_t nf_buf_blknr;
+
+ struct nandfs_fsdata *nf_fsdata;
+ struct nandfs_super_block *nf_sb;
+ struct nandfs_segment_summary nf_segsum;
+ struct nandfs_checkpoint nf_checkpoint;
+ struct nandfs_super_root nf_sroot;
+ struct nandfs_node nf_ifile;
+ struct nandfs_node nf_datfile;
+ struct nandfs_node nf_cpfile;
+ struct nandfs_mdt nf_datfile_mdt;
+ struct nandfs_mdt nf_ifile_mdt;
+
+ int nf_nindir[NIADDR];
+};
+
+static int nandfs_open(const char *, struct open_file *);
+static int nandfs_close(struct open_file *);
+static int nandfs_read(struct open_file *, void *, size_t, size_t *);
+static off_t nandfs_seek(struct open_file *, off_t, int);
+static int nandfs_stat(struct open_file *, struct stat *);
+static int nandfs_readdir(struct open_file *, struct dirent *);
+
+static int nandfs_buf_read(struct nandfs *, char **, size_t *);
+static struct nandfs_node *nandfs_lookup_inode(struct nandfs *, nandfs_daddr_t);
+static struct nandfs_node *nandfs_lookup_path(struct nandfs *, const char *);
+static int nandfs_read_inode(struct nandfs *, struct nandfs_node *,
+ nandfs_lbn_t, u_int, void *, int);
+static int nandfs_read_blk(struct nandfs *, nandfs_daddr_t, void *, int);
+static int nandfs_bmap_lookup(struct nandfs *, struct nandfs_node *,
+ nandfs_lbn_t, nandfs_daddr_t *, int);
+static int nandfs_get_checkpoint(struct nandfs *, uint64_t,
+ struct nandfs_checkpoint *);
+static nandfs_daddr_t nandfs_vtop(struct nandfs *, nandfs_daddr_t);
+static void nandfs_calc_mdt_consts(int, struct nandfs_mdt *, int);
+static void nandfs_mdt_trans(struct nandfs_mdt *, uint64_t,
+ nandfs_daddr_t *, uint32_t *);
+static int ioread(struct open_file *, off_t, void *, u_int);
+static int nandfs_probe_sectorsize(struct open_file *);
+
+struct fs_ops nandfs_fsops = {
+ "nandfs",
+ nandfs_open,
+ nandfs_close,
+ nandfs_read,
+ null_write,
+ nandfs_seek,
+ nandfs_stat,
+ nandfs_readdir
+};
+
+#define NINDIR(fs) ((fs)->nf_blocksize / sizeof(nandfs_daddr_t))
+
+static int
+nandfs_check_fsdata_crc(struct nandfs_fsdata *fsdata)
+{
+ uint32_t fsdata_crc, comp_crc;
+
+ if (fsdata->f_magic != NANDFS_FSDATA_MAGIC)
+ return (0);
+
+ /* Preserve crc */
+ fsdata_crc = fsdata->f_sum;
+
+ /* Calculate */
+ fsdata->f_sum = (0);
+ comp_crc = crc32(0, (uint8_t *)fsdata, fsdata->f_bytes);
+
+ /* Restore */
+ fsdata->f_sum = fsdata_crc;
+
+ /* Check CRC */
+ return (fsdata_crc == comp_crc);
+}
+
+static int
+nandfs_check_superblock_crc(struct nandfs_fsdata *fsdata,
+ struct nandfs_super_block *super)
+{
+ uint32_t super_crc, comp_crc;
+
+ /* Check super block magic */
+ if (super->s_magic != NANDFS_SUPER_MAGIC)
+ return (0);
+
+ /* Preserve CRC */
+ super_crc = super->s_sum;
+
+ /* Calculate */
+ super->s_sum = (0);
+ comp_crc = crc32(0, (uint8_t *)super, fsdata->f_sbbytes);
+
+ /* Restore */
+ super->s_sum = super_crc;
+
+ /* Check CRC */
+ return (super_crc == comp_crc);
+}
+
+static int
+nandfs_find_super_block(struct nandfs *fs, struct open_file *f)
+{
+ struct nandfs_super_block *sb;
+ int i, j, n;
+ int sectors_to_read, error;
+
+ sb = malloc(fs->nf_sectorsize);
+ if (sb == NULL)
+ return (ENOMEM);
+
+ memset(fs->nf_sb, 0, sizeof(*fs->nf_sb));
+
+ sectors_to_read = (NANDFS_NFSAREAS * fs->nf_fsdata->f_erasesize) /
+ fs->nf_sectorsize;
+ for (i = 0; i < sectors_to_read; i++) {
+ NANDFS_DEBUG("reading i %d offset %d\n", i,
+ i * fs->nf_sectorsize);
+ error = ioread(f, i * fs->nf_sectorsize, (char *)sb,
+ fs->nf_sectorsize);
+ if (error) {
+ NANDFS_DEBUG("error %d\n", error);
+ continue;
+ }
+ n = fs->nf_sectorsize / sizeof(struct nandfs_super_block);
+ if ((i * fs->nf_sectorsize) % fs->nf_fsdata->f_erasesize == 0) {
+ if (fs->nf_sectorsize == sizeof(struct nandfs_fsdata))
+ continue;
+ else {
+ sb += (sizeof(struct nandfs_fsdata) /
+ sizeof(struct nandfs_super_block));
+ n -= (sizeof(struct nandfs_fsdata) /
+ sizeof(struct nandfs_super_block));
+ }
+ }
+
+ for (j = 0; j < n; j++) {
+ if (!nandfs_check_superblock_crc(fs->nf_fsdata, &sb[j]))
+ continue;
+ NANDFS_DEBUG("magic %x wtime %jd\n", sb->s_magic,
+ sb->s_wtime);
+ if (sb[j].s_wtime > fs->nf_sb->s_wtime)
+ memcpy(fs->nf_sb, &sb[j], sizeof(*fs->nf_sb));
+ }
+ }
+
+ free(sb);
+
+ return (fs->nf_sb->s_magic != 0 ? 0 : EINVAL);
+}
+
+static int
+nandfs_find_fsdata(struct nandfs *fs, struct open_file *f)
+{
+ int offset, error, i;
+
+ NANDFS_DEBUG("starting\n");
+
+ offset = 0;
+ for (i = 0; i < 64 * NANDFS_NFSAREAS; i++) {
+ error = ioread(f, offset, (char *)fs->nf_fsdata,
+ sizeof(struct nandfs_fsdata));
+ if (error)
+ return (error);
+ if (fs->nf_fsdata->f_magic == NANDFS_FSDATA_MAGIC) {
+ NANDFS_DEBUG("found at %x, volume %s\n", offset,
+ fs->nf_fsdata->f_volume_name);
+ if (nandfs_check_fsdata_crc(fs->nf_fsdata))
+ break;
+ }
+ offset += fs->nf_sectorsize;
+ }
+
+ return (error);
+}
+
+static int
+nandfs_read_structures(struct nandfs *fs, struct open_file *f)
+{
+ int error;
+
+ error = nandfs_find_fsdata(fs, f);
+ if (error)
+ return (error);
+
+ error = nandfs_find_super_block(fs, f);
+
+ if (error == 0)
+ NANDFS_DEBUG("selected sb with w_time %jd last_pseg %jx\n",
+ fs->nf_sb->s_wtime, fs->nf_sb->s_last_pseg);
+
+ return (error);
+}
+
+static int
+nandfs_mount(struct nandfs *fs, struct open_file *f)
+{
+ int err = 0, level;
+ uint64_t last_pseg;
+
+ fs->nf_fsdata = malloc(sizeof(struct nandfs_fsdata));
+ fs->nf_sb = malloc(sizeof(struct nandfs_super_block));
+
+ err = nandfs_read_structures(fs, f);
+ if (err) {
+ free(fs->nf_fsdata);
+ free(fs->nf_sb);
+ return (err);
+ }
+
+ fs->nf_blocksize = 1 << (fs->nf_fsdata->f_log_block_size + 10);
+
+ NANDFS_DEBUG("using superblock with wtime %jd\n", fs->nf_sb->s_wtime);
+
+ fs->nf_cpno = fs->nf_sb->s_last_cno;
+ last_pseg = fs->nf_sb->s_last_pseg;
+
+ /*
+ * Calculate indirect block levels.
+ */
+ nandfs_daddr_t mult;
+
+ mult = 1;
+ for (level = 0; level < NIADDR; level++) {
+ mult *= NINDIR(fs);
+ fs->nf_nindir[level] = mult;
+ }
+
+ nandfs_calc_mdt_consts(fs->nf_blocksize, &fs->nf_datfile_mdt,
+ fs->nf_fsdata->f_dat_entry_size);
+
+ nandfs_calc_mdt_consts(fs->nf_blocksize, &fs->nf_ifile_mdt,
+ fs->nf_fsdata->f_inode_size);
+
+ err = ioread(f, last_pseg * fs->nf_blocksize, &fs->nf_segsum,
+ sizeof(struct nandfs_segment_summary));
+ if (err) {
+ free(fs->nf_sb);
+ free(fs->nf_fsdata);
+ return (err);
+ }
+
+ err = ioread(f, (last_pseg + fs->nf_segsum.ss_nblocks - 1) *
+ fs->nf_blocksize, &fs->nf_sroot, sizeof(struct nandfs_super_root));
+ if (err) {
+ free(fs->nf_sb);
+ free(fs->nf_fsdata);
+ return (err);
+ }
+
+ fs->nf_datfile.inode = &fs->nf_sroot.sr_dat;
+ LIST_INIT(&fs->nf_datfile.bmap_bufs);
+ fs->nf_cpfile.inode = &fs->nf_sroot.sr_cpfile;
+ LIST_INIT(&fs->nf_cpfile.bmap_bufs);
+
+ err = nandfs_get_checkpoint(fs, fs->nf_cpno, &fs->nf_checkpoint);
+ if (err) {
+ free(fs->nf_sb);
+ free(fs->nf_fsdata);
+ return (err);
+ }
+
+ NANDFS_DEBUG("checkpoint cp_cno=%lld\n", fs->nf_checkpoint.cp_cno);
+ NANDFS_DEBUG("checkpoint cp_inodes_count=%lld\n",
+ fs->nf_checkpoint.cp_inodes_count);
+ NANDFS_DEBUG("checkpoint cp_ifile_inode.i_blocks=%lld\n",
+ fs->nf_checkpoint.cp_ifile_inode.i_blocks);
+
+ fs->nf_ifile.inode = &fs->nf_checkpoint.cp_ifile_inode;
+ LIST_INIT(&fs->nf_ifile.bmap_bufs);
+ return (0);
+}
+
+#define NINDIR(fs) ((fs)->nf_blocksize / sizeof(nandfs_daddr_t))
+
+static int
+nandfs_open(const char *path, struct open_file *f)
+{
+ struct nandfs *fs;
+ struct nandfs_node *node;
+ int err, bsize, level;
+
+ NANDFS_DEBUG("nandfs_open('%s', %p)\n", path, f);
+
+ fs = malloc(sizeof(struct nandfs));
+ f->f_fsdata = fs;
+ fs->nf_file = f;
+
+ bsize = nandfs_probe_sectorsize(f);
+ if (bsize < 0) {
+ printf("Cannot probe medium sector size\n");
+ return (EINVAL);
+ }
+
+ fs->nf_sectorsize = bsize;
+
+ /*
+ * Calculate indirect block levels.
+ */
+ nandfs_daddr_t mult;
+
+ mult = 1;
+ for (level = 0; level < NIADDR; level++) {
+ mult *= NINDIR(fs);
+ fs->nf_nindir[level] = mult;
+ }
+
+ NANDFS_DEBUG("fs %p nf_sectorsize=%x\n", fs, fs->nf_sectorsize);
+
+ err = nandfs_mount(fs, f);
+ if (err) {
+ NANDFS_DEBUG("Cannot mount nandfs: %s\n", strerror(err));
+ return (err);
+ }
+
+ node = nandfs_lookup_path(fs, path);
+ if (node == NULL)
+ return (EINVAL);
+
+ fs->nf_offset = 0;
+ fs->nf_buf = NULL;
+ fs->nf_buf_blknr = -1;
+ fs->nf_opened_node = node;
+ LIST_INIT(&fs->nf_opened_node->bmap_bufs);
+ return (0);
+}
+
+static int
+nandfs_free_node(struct nandfs_node *node)
+{
+ struct bmap_buf *bmap, *tmp;
+
+ free(node->inode);
+ LIST_FOREACH_SAFE(bmap, &node->bmap_bufs, list, tmp) {
+ LIST_REMOVE(bmap, list);
+ free(bmap->map);
+ free(bmap);
+ }
+ free(node);
+}
+
+static int
+nandfs_close(struct open_file *f)
+{
+ struct nandfs *fs = f->f_fsdata;
+
+ NANDFS_DEBUG("nandfs_close(%p)\n", f);
+
+ if (fs->nf_buf != NULL)
+ free(fs->nf_buf);
+
+ nandfs_free_node(fs->nf_opened_node);
+ free(fs->nf_sb);
+ free(fs);
+}
+
+static int
+nandfs_read(struct open_file *f, void *addr, size_t size, size_t *resid)
+{
+ struct nandfs *fs = (struct nandfs *)f->f_fsdata;
+ size_t csize, buf_size;
+ uint8_t *buf;
+ int error = 0;
+
+ NANDFS_DEBUG("nandfs_read(file=%p, addr=%p, size=%d)\n", f, addr, size);
+
+ while (size != 0) {
+ if (fs->nf_offset >= fs->nf_opened_node->inode->i_size)
+ break;
+
+ error = nandfs_buf_read(fs, (void *)&buf, &buf_size);
+ if (error)
+ break;
+
+ csize = size;
+ if (csize > buf_size)
+ csize = buf_size;
+
+ bcopy(buf, addr, csize);
+
+ fs->nf_offset += csize;
+ addr = (char *)addr + csize;
+ size -= csize;
+ }
+
+ if (resid)
+ *resid = size;
+ return (error);
+}
+
+static off_t
+nandfs_seek(struct open_file *f, off_t offset, int where)
+{
+ struct nandfs *fs = f->f_fsdata;
+ off_t off;
+ u_int size;
+
+ NANDFS_DEBUG("nandfs_seek(file=%p, offset=%lld, where=%d)\n", f,
+ offset, where);
+
+ size = fs->nf_opened_node->inode->i_size;
+
+ switch (where) {
+ case SEEK_SET:
+ off = 0;
+ break;
+ case SEEK_CUR:
+ off = fs->nf_offset;
+ break;
+ case SEEK_END:
+ off = size;
+ break;
+ default:
+ errno = EINVAL;
+ return (-1);
+ }
+
+ off += offset;
+ if (off < 0 || off > size) {
+ errno = EINVAL;
+ return(-1);
+ }
+
+ fs->nf_offset = (u_int)off;
+
+ return (off);
+}
+
+static int
+nandfs_stat(struct open_file *f, struct stat *sb)
+{
+ struct nandfs *fs = f->f_fsdata;
+
+ NANDFS_DEBUG("nandfs_stat(file=%p, stat=%p)\n", f, sb);
+
+ sb->st_size = fs->nf_opened_node->inode->i_size;
+ sb->st_mode = fs->nf_opened_node->inode->i_mode;
+ sb->st_uid = fs->nf_opened_node->inode->i_uid;
+ sb->st_gid = fs->nf_opened_node->inode->i_gid;
+ return (0);
+}
+
+static int
+nandfs_readdir(struct open_file *f, struct dirent *d)
+{
+ struct nandfs *fs = f->f_fsdata;
+ struct nandfs_dir_entry *dirent;
+ uint8_t *buf;
+ size_t buf_size;
+
+ NANDFS_DEBUG("nandfs_readdir(file=%p, dirent=%p)\n", f, d);
+
+ if (fs->nf_offset >= fs->nf_opened_node->inode->i_size) {
+ NANDFS_DEBUG("nandfs_readdir(file=%p, dirent=%p) ENOENT\n",
+ f, d);
+ return (ENOENT);
+ }
+
+ if (nandfs_buf_read(fs, (void *)&buf, &buf_size)) {
+ NANDFS_DEBUG("nandfs_readdir(file=%p, dirent=%p)"
+ "buf_read failed\n", f, d);
+ return (EIO);
+ }
+
+ NANDFS_DEBUG("nandfs_readdir(file=%p, dirent=%p) moving forward\n",
+ f, d);
+
+ dirent = (struct nandfs_dir_entry *)buf;
+ fs->nf_offset += dirent->rec_len;
+ strncpy(d->d_name, dirent->name, dirent->name_len);
+ d->d_name[dirent->name_len] = '\0';
+ d->d_type = dirent->file_type;
+ return (0);
+}
+
+static int
+nandfs_buf_read(struct nandfs *fs, char **buf_p, size_t *size_p)
+{
+ nandfs_daddr_t blknr, blkoff;
+
+ blknr = fs->nf_offset / fs->nf_blocksize;
+ blkoff = fs->nf_offset % fs->nf_blocksize;
+
+ if (blknr != fs->nf_buf_blknr) {
+ if (fs->nf_buf == NULL)
+ fs->nf_buf = malloc(fs->nf_blocksize);
+
+ if (nandfs_read_inode(fs, fs->nf_opened_node, blknr, 1,
+ fs->nf_buf, 0))
+ return (EIO);
+
+ fs->nf_buf_blknr = blknr;
+ }
+
+ *buf_p = fs->nf_buf + blkoff;
+ *size_p = fs->nf_blocksize - blkoff;
+
+ NANDFS_DEBUG("nandfs_buf_read buf_p=%p size_p=%d\n", *buf_p, *size_p);
+
+ if (*size_p > fs->nf_opened_node->inode->i_size - fs->nf_offset)
+ *size_p = fs->nf_opened_node->inode->i_size - fs->nf_offset;
+
+ return (0);
+}
+
+static struct nandfs_node *
+nandfs_lookup_node(struct nandfs *fs, uint64_t ino)
+{
+ uint64_t blocknr;
+ int entrynr;
+ struct nandfs_inode *buffer;
+ struct nandfs_node *node;
+ struct nandfs_inode *inode;
+
+ NANDFS_DEBUG("nandfs_lookup_node ino=%lld\n", ino);
+
+ if (ino == 0) {
+ printf("nandfs_lookup_node: invalid inode requested\n");
+ return (NULL);
+ }
+
+ buffer = malloc(fs->nf_blocksize);
+ inode = malloc(sizeof(struct nandfs_inode));
+ node = malloc(sizeof(struct nandfs_node));
+
+ nandfs_mdt_trans(&fs->nf_ifile_mdt, ino, &blocknr, &entrynr);
+
+ if (nandfs_read_inode(fs, &fs->nf_ifile, blocknr, 1, buffer, 0))
+ return (NULL);
+
+ memcpy(inode, &buffer[entrynr], sizeof(struct nandfs_inode));
+ node->inode = inode;
+ free(buffer);
+ return (node);
+}
+
+static struct nandfs_node *
+nandfs_lookup_path(struct nandfs *fs, const char *path)
+{
+ struct nandfs_node *node;
+ struct nandfs_dir_entry *dirent;
+ char *namebuf;
+ uint64_t i, j, done, counter, pinode, inode;
+ int nlinks = 0, len, link_len, nameidx;
+ uint8_t *buffer, *orig;
+ char *strp, *lpath;
+
+ buffer = malloc(fs->nf_blocksize);
+ orig = buffer;
+
+ namebuf = malloc(2 * MAXPATHLEN + 2);
+ strncpy(namebuf, path, MAXPATHLEN);
+ namebuf[MAXPATHLEN] = '\0';
+ done = nameidx = 0;
+ lpath = namebuf;
+
+ /* Get the root inode */
+ node = nandfs_lookup_node(fs, NANDFS_ROOT_INO);
+ inode = NANDFS_ROOT_INO;
+
+ while ((strp = strsep(&lpath, "/")) != NULL) {
+ if (*strp == '\0')
+ continue;
+ if ((node->inode->i_mode & IFMT) != IFDIR) {
+ nandfs_free_node(node);
+ node = NULL;
+ goto out;
+ }
+
+ len = strlen(strp);
+ NANDFS_DEBUG("%s: looking for %s\n", __func__, strp);
+ for (i = 0; i < node->inode->i_blocks; i++) {
+ if (nandfs_read_inode(fs, node, i, 1, orig, 0)) {
+ node = NULL;
+ goto out;
+ }
+
+ buffer = orig;
+ done = counter = 0;
+ while (1) {
+ dirent = (struct nandfs_dir_entry *)buffer;
+ NANDFS_DEBUG("%s: dirent.name = %s\n",
+ __func__, dirent->name);
+ NANDFS_DEBUG("%s: dirent.rec_len = %d\n",
+ __func__, dirent->rec_len);
+ NANDFS_DEBUG("%s: dirent.inode = %lld\n",
+ __func__, dirent->inode);
+ if (len == dirent->name_len &&
+ (strncmp(strp, dirent->name, len) == 0) &&
+ dirent->inode != 0) {
+ nandfs_free_node(node);
+ node = nandfs_lookup_node(fs,
+ dirent->inode);
+ pinode = inode;
+ inode = dirent->inode;
+ done = 1;
+ break;
+ }
+
+ counter += dirent->rec_len;
+ buffer += dirent->rec_len;
+
+ if (counter == fs->nf_blocksize)
+ break;
+ }
+
+ if (done)
+ break;
+ }
+
+ if (!done) {
+ node = NULL;
+ goto out;
+ }
+
+ NANDFS_DEBUG("%s: %.*s has mode %o\n", __func__,
+ dirent->name_len, dirent->name, node->inode->i_mode);
+
+ if ((node->inode->i_mode & IFMT) == IFLNK) {
+ NANDFS_DEBUG("%s: %.*s is symlink\n",
+ __func__, dirent->name_len, dirent->name);
+ link_len = node->inode->i_size;
+
+ if (++nlinks > MAXSYMLINKS) {
+ nandfs_free_node(node);
+ node = NULL;
+ goto out;
+ }
+
+ if (nandfs_read_inode(fs, node, 0, 1, orig, 0)) {
+ nandfs_free_node(node);
+ node = NULL;
+ goto out;
+ }
+
+ NANDFS_DEBUG("%s: symlink is %.*s\n",
+ __func__, link_len, (char *)orig);
+
+ nameidx = (nameidx == 0) ? MAXPATHLEN + 1 : 0;
+ bcopy((char *)orig, namebuf + nameidx,
+ (unsigned)link_len);
+ if (lpath != NULL) {
+ namebuf[nameidx + link_len++] = '/';
+ strncpy(namebuf + nameidx + link_len, lpath,
+ MAXPATHLEN - link_len);
+ namebuf[nameidx + MAXPATHLEN] = '\0';
+ } else
+ namebuf[nameidx + link_len] = '\0';
+
+ NANDFS_DEBUG("%s: strp=%s, lpath=%s, namebuf0=%s, "
+ "namebuf1=%s, idx=%d\n", __func__, strp, lpath,
+ namebuf + 0, namebuf + MAXPATHLEN + 1, nameidx);
+
+ lpath = namebuf + nameidx;
+
+ nandfs_free_node(node);
+
+ /*
+ * If absolute pathname, restart at root. Otherwise
+ * continue with out parent inode.
+ */
+ inode = (orig[0] == '/') ? NANDFS_ROOT_INO : pinode;
+ node = nandfs_lookup_node(fs, inode);
+ }
+ }
+
+out:
+ free(namebuf);
+ free(orig);
+ return (node);
+}
+
+static int
+nandfs_read_inode(struct nandfs *fs, struct nandfs_node *node,
+ nandfs_daddr_t blknr, u_int nblks, void *buf, int raw)
+{
+ int i;
+ uint64_t *pblks;
+ uint64_t *vblks;
+ int error;
+
+ pblks = malloc(nblks * sizeof(uint64_t));
+ vblks = malloc(nblks * sizeof(uint64_t));
+
+ NANDFS_DEBUG("nandfs_read_inode fs=%p node=%p blknr=%lld nblks=%d\n",
+ fs, node, blknr, nblks);
+ for (i = 0; i < nblks; i++) {
+ error = nandfs_bmap_lookup(fs, node, blknr + i, &vblks[i], raw);
+ if (error) {
+ free(pblks);
+ free(vblks);
+ return (error);
+ }
+ if (raw == 0)
+ pblks[i] = nandfs_vtop(fs, vblks[i]);
+ else
+ pblks[i] = vblks[i];
+ }
+
+ for (i = 0; i < nblks; i++) {
+ if (ioread(fs->nf_file, pblks[i] * fs->nf_blocksize, buf,
+ fs->nf_blocksize)) {
+ free(pblks);
+ free(vblks);
+ return (EIO);
+ }
+
+ buf += fs->nf_blocksize;
+ }
+
+ free(pblks);
+ free(vblks);
+ return (0);
+}
+
+static int
+nandfs_read_blk(struct nandfs *fs, nandfs_daddr_t blknr, void *buf, int phys)
+{
+ uint64_t pblknr;
+
+ pblknr = (phys ? blknr : nandfs_vtop(fs, blknr));
+
+ return (ioread(fs->nf_file, pblknr * fs->nf_blocksize, buf,
+ fs->nf_blocksize));
+}
+
+static int
+nandfs_get_checkpoint(struct nandfs *fs, uint64_t cpno,
+ struct nandfs_checkpoint *cp)
+{
+ uint64_t blocknr;
+ int blockoff, cp_per_block, dlen;
+ uint8_t *buf;
+
+ NANDFS_DEBUG("nandfs_get_checkpoint(fs=%p cpno=%lld)\n", fs, cpno);
+
+ buf = malloc(fs->nf_blocksize);
+
+ cpno += NANDFS_CPFILE_FIRST_CHECKPOINT_OFFSET - 1;
+ dlen = fs->nf_fsdata->f_checkpoint_size;
+ cp_per_block = fs->nf_blocksize / dlen;
+ blocknr = cpno / cp_per_block;
+ blockoff = (cpno % cp_per_block) * dlen;
+
+ if (nandfs_read_inode(fs, &fs->nf_cpfile, blocknr, 1, buf, 0)) {
+ free(buf);
+ return (EINVAL);
+ }
+
+ memcpy(cp, buf + blockoff, sizeof(struct nandfs_checkpoint));
+ free(buf);
+
+ return (0);
+}
+
+static uint64_t *
+nandfs_get_map(struct nandfs *fs, struct nandfs_node *node, nandfs_daddr_t blknr,
+ int phys)
+{
+ struct bmap_buf *bmap;
+ uint64_t *map;
+
+ LIST_FOREACH(bmap, &node->bmap_bufs, list) {
+ if (bmap->blknr == blknr)
+ return (bmap->map);
+ }
+
+ map = malloc(fs->nf_blocksize);
+ if (nandfs_read_blk(fs, blknr, map, phys)) {
+ free(map);
+ return (NULL);
+ }
+
+ bmap = malloc(sizeof(struct bmap_buf));
+ bmap->blknr = blknr;
+ bmap->map = map;
+
+ LIST_INSERT_HEAD(&node->bmap_bufs, bmap, list);
+
+ NANDFS_DEBUG("%s:(node=%p, map=%p)\n", __func__, node, map);
+ return (map);
+}
+
+static int
+nandfs_bmap_lookup(struct nandfs *fs, struct nandfs_node *node,
+ nandfs_lbn_t lblknr, nandfs_daddr_t *vblknr, int phys)
+{
+ struct nandfs_inode *ino;
+ nandfs_daddr_t ind_block_num;
+ uint64_t *map, *indir;
+ uint64_t idx0, idx1, vblk, tmp;
+ int idx;
+ int level;
+
+ ino = node->inode;
+
+ if (lblknr < NDADDR) {
+ *vblknr = ino->i_db[lblknr];
+ return (0);
+ }
+
+ lblknr -= NDADDR;
+
+ /*
+ * nindir[0] = NINDIR
+ * nindir[1] = NINDIR**2
+ * nindir[2] = NINDIR**3
+ * etc
+ */
+ for (level = 0; level < NIADDR; level++) {
+ NANDFS_DEBUG("lblknr=%jx fs->nf_nindir[%d]=%d\n", lblknr, level, fs->nf_nindir[level]);
+ if (lblknr < fs->nf_nindir[level])
+ break;
+ lblknr -= fs->nf_nindir[level];
+ }
+
+ if (level == NIADDR) {
+ /* Block number too high */
+ NANDFS_DEBUG("lblknr %jx too high\n", lblknr);
+ return (EFBIG);
+ }
+
+ ind_block_num = ino->i_ib[level];
+
+ for (; level >= 0; level--) {
+ if (ind_block_num == 0) {
+ *vblknr = 0; /* missing */
+ return (0);
+ }
+
+ twiddle();
+ NANDFS_DEBUG("calling get_map with %jx\n", ind_block_num);
+ map = nandfs_get_map(fs, node, ind_block_num, phys);
+ if (map == NULL)
+ return (EIO);
+
+ if (level > 0) {
+ idx = lblknr / fs->nf_nindir[level - 1];
+ lblknr %= fs->nf_nindir[level - 1];
+ } else
+ idx = lblknr;
+
+ ind_block_num = ((nandfs_daddr_t *)map)[idx];
+ }
+
+ *vblknr = ind_block_num;
+
+ return (0);
+}
+
+static nandfs_daddr_t
+nandfs_vtop(struct nandfs *fs, nandfs_daddr_t vblocknr)
+{
+ nandfs_lbn_t blocknr;
+ nandfs_daddr_t pblocknr;
+ int entrynr;
+ struct nandfs_dat_entry *dat;
+
+ dat = malloc(fs->nf_blocksize);
+ nandfs_mdt_trans(&fs->nf_datfile_mdt, vblocknr, &blocknr, &entrynr);
+
+ if (nandfs_read_inode(fs, &fs->nf_datfile, blocknr, 1, dat, 1)) {
+ free(dat);
+ return (0);
+ }
+
+ NANDFS_DEBUG("nandfs_vtop entrynr=%d vblocknr=%lld pblocknr=%lld\n",
+ entrynr, vblocknr, dat[entrynr].de_blocknr);
+
+ pblocknr = dat[entrynr].de_blocknr;
+ free(dat);
+ return (pblocknr);
+}
+
+static void
+nandfs_calc_mdt_consts(int blocksize, struct nandfs_mdt *mdt, int entry_size)
+{
+
+ mdt->entries_per_group = blocksize * 8; /* bits in sector */
+ mdt->entries_per_block = blocksize / entry_size;
+ mdt->blocks_per_group =
+ (mdt->entries_per_group -1) / mdt->entries_per_block + 1 + 1;
+ mdt->groups_per_desc_block =
+ blocksize / sizeof(struct nandfs_block_group_desc);
+ mdt->blocks_per_desc_block =
+ mdt->groups_per_desc_block * mdt->blocks_per_group + 1;
+}
+
+static void
+nandfs_mdt_trans(struct nandfs_mdt *mdt, uint64_t index,
+ nandfs_daddr_t *blocknr, uint32_t *entry_in_block)
+{
+ nandfs_daddr_t blknr;
+ uint64_t group, group_offset, blocknr_in_group;
+ uint64_t desc_block, desc_offset;
+
+ /* Calculate our offset in the file */
+ group = index / mdt->entries_per_group;
+ group_offset = index % mdt->entries_per_group;
+ desc_block = group / mdt->groups_per_desc_block;
+ desc_offset = group % mdt->groups_per_desc_block;
+ blocknr_in_group = group_offset / mdt->entries_per_block;
+
+ /* To descgroup offset */
+ blknr = 1 + desc_block * mdt->blocks_per_desc_block;
+
+ /* To group offset */
+ blknr += desc_offset * mdt->blocks_per_group;
+
+ /* To actual file block */
+ blknr += 1 + blocknr_in_group;
+
+ *blocknr = blknr;
+ *entry_in_block = group_offset % mdt->entries_per_block;
+}
+
+static int
+ioread(struct open_file *f, off_t pos, void *buf, u_int length)
+{
+ void *buffer;
+ int err;
+ int bsize = ((struct nandfs *)f->f_fsdata)->nf_sectorsize;
+ u_int off, nsec;
+
+ off = pos % bsize;
+ pos /= bsize;
+ nsec = (length + (bsize - 1)) / bsize;
+
+ NANDFS_DEBUG("pos=%lld length=%d off=%d nsec=%d\n", pos, length,
+ off, nsec);
+
+ buffer = malloc(nsec * bsize);
+
+ err = (f->f_dev->dv_strategy)(f->f_devdata, F_READ, pos,
+ nsec * bsize, buffer, NULL);
+
+ memcpy(buf, buffer + off, length);
+ free(buffer);
+
+ return (err);
+}
+
+static int
+nandfs_probe_sectorsize(struct open_file *f)
+{
+ void *buffer;
+ int i, err;
+
+ buffer = malloc(16 * 1024);
+
+ NANDFS_DEBUG("probing for sector size: ");
+
+ for (i = 512; i < (16 * 1024); i <<= 1) {
+ NANDFS_DEBUG("%d ", i);
+ err = (f->f_dev->dv_strategy)(f->f_devdata, F_READ, 0, i,
+ buffer, NULL);
+
+ if (err == 0) {
+ NANDFS_DEBUG("found");
+ free(buffer);
+ return (i);
+ }
+ }
+
+ free(buffer);
+ NANDFS_DEBUG("not found\n");
+ return (-1);
+}
diff --git a/lib/libstand/stand.h b/lib/libstand/stand.h
index db0490f4d6ec..10bb829c4ced 100644
--- a/lib/libstand/stand.h
+++ b/lib/libstand/stand.h
@@ -118,6 +118,7 @@ extern struct fs_ops ufs_fsops;
extern struct fs_ops tftp_fsops;
extern struct fs_ops nfs_fsops;
extern struct fs_ops cd9660_fsops;
+extern struct fs_ops nandfs_fsops;
extern struct fs_ops gzipfs_fsops;
extern struct fs_ops bzipfs_fsops;
extern struct fs_ops dosfs_fsops;
diff --git a/lib/libthr/thread/thr_mutex.c b/lib/libthr/thread/thr_mutex.c
index 7573f28a092e..91b47eca86b5 100644
--- a/lib/libthr/thread/thr_mutex.c
+++ b/lib/libthr/thread/thr_mutex.c
@@ -538,6 +538,7 @@ mutex_self_trylock(struct pthread_mutex *m)
switch (PMUTEX_TYPE(m->m_flags)) {
case PTHREAD_MUTEX_ERRORCHECK:
case PTHREAD_MUTEX_NORMAL:
+ case PTHREAD_MUTEX_ADAPTIVE_NP:
ret = EBUSY;
break;
diff --git a/lib/libusbhid/parse.c b/lib/libusbhid/parse.c
index f7c2cb195be1..041e28999991 100644
--- a/lib/libusbhid/parse.c
+++ b/lib/libusbhid/parse.c
@@ -392,7 +392,7 @@ hid_get_item(hid_data_t s, hid_item_t *h)
s->loc_size = dval & mask;
break;
case 8:
- hid_switch_rid(s, c, dval);
+ hid_switch_rid(s, c, dval & mask);
break;
case 9:
/* mask because value is unsigned */
diff --git a/lib/msun/src/math.h b/lib/msun/src/math.h
index 9389ddaf793d..cf345835e77b 100644
--- a/lib/msun/src/math.h
+++ b/lib/msun/src/math.h
@@ -395,35 +395,15 @@ float significandf(float);
* long double versions of ISO/POSIX math functions
*/
#if __ISO_C_VISIBLE >= 1999
-#if _DECLARE_C99_LDBL_MATH
-long double acoshl(long double);
-#endif
long double acosl(long double);
-#if _DECLARE_C99_LDBL_MATH
-long double asinhl(long double);
-#endif
long double asinl(long double);
long double atan2l(long double, long double);
-#if _DECLARE_C99_LDBL_MATH
-long double atanhl(long double);
-#endif
long double atanl(long double);
long double cbrtl(long double);
long double ceill(long double);
long double copysignl(long double, long double) __pure2;
-#if _DECLARE_C99_LDBL_MATH
-long double coshl(long double);
-#endif
long double cosl(long double);
-#if _DECLARE_C99_LDBL_MATH
-long double erfcl(long double);
-long double erfl(long double);
-#endif
long double exp2l(long double);
-#if _DECLARE_C99_LDBL_MATH
-long double expl(long double);
-long double expm1l(long double);
-#endif
long double fabsl(long double) __pure2;
long double fdiml(long double, long double);
long double floorl(long double);
@@ -435,20 +415,9 @@ long double frexpl(long double value, int *); /* fundamentally !__pure2 */
long double hypotl(long double, long double);
int ilogbl(long double) __pure2;
long double ldexpl(long double, int);
-#if _DECLARE_C99_LDBL_MATH
-long double lgammal(long double);
-#endif
long long llrintl(long double);
long long llroundl(long double);
-#if _DECLARE_C99_LDBL_MATH
-long double log10l(long double);
-long double log1pl(long double);
-long double log2l(long double);
-#endif
long double logbl(long double);
-#if _DECLARE_C99_LDBL_MATH
-long double logl(long double);
-#endif
long lrintl(long double);
long lroundl(long double);
long double modfl(long double, long double *); /* fundamentally !__pure2 */
@@ -458,30 +427,54 @@ long double nextafterl(long double, long double);
double nexttoward(double, long double);
float nexttowardf(float, long double);
long double nexttowardl(long double, long double);
-#if _DECLARE_C99_LDBL_MATH
-long double powl(long double, long double);
-#endif
long double remainderl(long double, long double);
long double remquol(long double, long double, int *);
long double rintl(long double);
long double roundl(long double);
long double scalblnl(long double, long);
long double scalbnl(long double, int);
-#if _DECLARE_C99_LDBL_MATH
-long double sinhl(long double);
-#endif
long double sinl(long double);
long double sqrtl(long double);
-#if _DECLARE_C99_LDBL_MATH
-long double tanhl(long double);
-#endif
long double tanl(long double);
-#if _DECLARE_C99_LDBL_MATH
-long double tgammal(long double);
-#endif
long double truncl(long double);
#endif /* __ISO_C_VISIBLE >= 1999 */
__END_DECLS
#endif /* !_MATH_H_ */
+
+/* separate header for cmath */
+#ifndef _MATH_EXTRA_H_
+#if __ISO_C_VISIBLE >= 1999
+#if _DECLARE_C99_LDBL_MATH
+
+#define _MATH_EXTRA_H_
+
+/*
+ * extra long double versions of math functions for C99 and cmath
+ */
+__BEGIN_DECLS
+
+long double acoshl(long double);
+long double asinhl(long double);
+long double atanhl(long double);
+long double coshl(long double);
+long double erfcl(long double);
+long double erfl(long double);
+long double expl(long double);
+long double expm1l(long double);
+long double lgammal(long double);
+long double log10l(long double);
+long double log1pl(long double);
+long double log2l(long double);
+long double logl(long double);
+long double powl(long double, long double);
+long double sinhl(long double);
+long double tanhl(long double);
+long double tgammal(long double);
+
+__END_DECLS
+
+#endif /* !_DECLARE_C99_LDBL_MATH */
+#endif /* __ISO_C_VISIBLE >= 1999 */
+#endif /* !_MATH_EXTRA_H_ */
diff --git a/libexec/rbootd/rbootd.8 b/libexec/rbootd/rbootd.8
index cdf0412b9898..79c528dca923 100644
--- a/libexec/rbootd/rbootd.8
+++ b/libexec/rbootd/rbootd.8
@@ -126,7 +126,7 @@ The following signals have the specified effect when sent to the server
process using the
.Xr kill 1
command:
-.Bl -tag -width SIGUSR1 -offset -compact
+.Bl -tag -width SIGUSR1 -offset xxxxxxxx
.It SIGHUP
Drop all active connections and reconfigure.
.It SIGUSR1
diff --git a/libexec/tftpd/Makefile b/libexec/tftpd/Makefile
index 84458298d6c5..f005001bbb8b 100644
--- a/libexec/tftpd/Makefile
+++ b/libexec/tftpd/Makefile
@@ -6,6 +6,8 @@ MAN= tftpd.8
SRCS= tftp-file.c tftp-io.c tftp-options.c tftp-transfer.c tftp-utils.c
SRCS+= tftpd.c
WFORMAT=0
-LDFLAGS= -lwrap
+
+DPADD= ${LIBWRAP}
+LDADD= -lwrap
.include <bsd.prog.mk>
diff --git a/libexec/tftpd/tftpd.8 b/libexec/tftpd/tftpd.8
index 6944f7b340e2..c06cc61b4ad4 100644
--- a/libexec/tftpd/tftpd.8
+++ b/libexec/tftpd/tftpd.8
@@ -238,20 +238,16 @@ option.
.Pp
The following RFC's are supported:
.Rs
-RFC 1350
-.%T The TFTP Protocol (Revision 2)
+.%T RFC 1350: The TFTP Protocol (Revision 2)
.Re
.Rs
-RFC 2347
-.%T TFTP Option Extension
+.%T RFC 2347: TFTP Option Extension
.Re
.Rs
-RFC 2348
-.%T TFTP Blocksize Option
+.%T RFC 2348: TFTP Blocksize Option
.Re
.Rs
-RFC 2349
-.%T TFTP Timeout Interval and Transfer Size Options
+.%T RFC 2349: TFTP Timeout Interval and Transfer Size Options
.Re
.Pp
The non-standard
diff --git a/sbin/Makefile b/sbin/Makefile
index 0cb421f0d193..fcdb5672c53d 100644
--- a/sbin/Makefile
+++ b/sbin/Makefile
@@ -92,6 +92,11 @@ SUBDIR+= ipfw
SUBDIR+= natd
.endif
+.if ${MK_NAND} != "no"
+SUBDIR+= nandfs
+SUBDIR+= newfs_nandfs
+.endif
+
.if ${MK_PF} != "no"
SUBDIR+= pfctl
SUBDIR+= pflogd
diff --git a/sbin/atacontrol/atacontrol.8 b/sbin/atacontrol/atacontrol.8
index 8f4a4fc94a61..1468a012c489 100644
--- a/sbin/atacontrol/atacontrol.8
+++ b/sbin/atacontrol/atacontrol.8
@@ -367,8 +367,8 @@ You should not set a spindown timeout on a disk with
or syslog logging on it as the disk will be worn out spinning down and
up all the time.
.Sh SEE ALSO
-.Xr ata 4
-.Xr cam 4
+.Xr ata 4 ,
+.Xr cam 4 ,
.Xr camcontrol 8
.Sh HISTORY
The
diff --git a/sbin/camcontrol/camcontrol.c b/sbin/camcontrol/camcontrol.c
index 47fc791e5de4..e24fff1f13ef 100644
--- a/sbin/camcontrol/camcontrol.c
+++ b/sbin/camcontrol/camcontrol.c
@@ -3404,6 +3404,7 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout,
spi->flags &= ~CTS_SPI_FLAGS_DISC_ENB;
else
spi->flags |= CTS_SPI_FLAGS_DISC_ENB;
+ didsettings++;
}
if (scsi && tag_enable != -1) {
if ((cpi.hba_inquiry & PI_TAG_ABLE) == 0) {
diff --git a/sbin/devd/parse.y b/sbin/devd/parse.y
index 28b8a908adb1..6334b4e5a27b 100644
--- a/sbin/devd/parse.y
+++ b/sbin/devd/parse.y
@@ -29,6 +29,7 @@
* $FreeBSD$
*/
+#include <sys/cdefs.h>
#include "devd.h"
#include <stdio.h>
#include <string.h>
diff --git a/sbin/dump/dump.8 b/sbin/dump/dump.8
index a96995d8ed5a..c5726f257bf8 100644
--- a/sbin/dump/dump.8
+++ b/sbin/dump/dump.8
@@ -51,16 +51,6 @@
.Ar filesystem
.Nm
.Fl W | Fl w
-.Pp
-.Nm rdump
-is an alternate name for
-.Nm .
-.Pp
-.in \" XXX
-(The
-.Bx 4.3
-option syntax is implemented for backward compatibility, but
-is not documented here.)
.Sh DESCRIPTION
The
.Nm
@@ -97,6 +87,14 @@ as either its device-special file or its mount point
(if that is in a standard entry in
.Pa /etc/fstab ) .
.Pp
+.Nm
+may also be invoked as
+.Nm rdump .
+The
+.Bx 4.3
+option syntax is implemented for backward compatibility, but
+is not documented here.
+.Pp
The following options are supported by
.Nm :
.Bl -tag -width Ds
diff --git a/sbin/etherswitchcfg/etherswitchcfg.8 b/sbin/etherswitchcfg/etherswitchcfg.8
index aec7d6873688..4f3bc92494a4 100644
--- a/sbin/etherswitchcfg/etherswitchcfg.8
+++ b/sbin/etherswitchcfg/etherswitchcfg.8
@@ -71,7 +71,8 @@ Specifies the physical media configuration to be configured for a port.
Specifies a list of media options for a port. See
.Xr ifconfig 8
for details on
-.Ar media and
+.Ar media
+and
.Ar mediaopt .
.El
.Ss reg
diff --git a/sbin/fsck_msdosfs/main.c b/sbin/fsck_msdosfs/main.c
index 9ec15ca2b500..e9baf84b626b 100644
--- a/sbin/fsck_msdosfs/main.c
+++ b/sbin/fsck_msdosfs/main.c
@@ -138,6 +138,7 @@ ask(int def, const char *fmt, ...)
va_start(ap, fmt);
vsnprintf(prompt, sizeof(prompt), fmt, ap);
+ va_end(ap);
if (alwaysyes || rdonly) {
printf("%s? %s\n", prompt, rdonly ? "no" : "yes");
return !rdonly;
diff --git a/sbin/geom/class/part/gpart.8 b/sbin/geom/class/part/gpart.8
index b52da9675689..2e745c40fca3 100644
--- a/sbin/geom/class/part/gpart.8
+++ b/sbin/geom/class/part/gpart.8
@@ -650,7 +650,7 @@ for MBR,
for GPT.
.It Cm ms-ldm-metadata
A partition that contains Logical Disk Manager (LDM) database.
-The scheme-specifig type is
+The scheme-specific type is
.Qq Li "!5808c8aa-7e8f-42e0-85d2-e1e90434cfb3"
for GPT.
.El
@@ -971,7 +971,7 @@ By default mirrored volumes are shown as partitions with type
.Sx "PARTITION TYPES"
section).
If this variable set to 1 each component of the mirrored volume will be
-present as independet partition.
+present as independent partition.
.Em NOTE :
This may break a mirrored volume and lead to data damage.
.El
diff --git a/sbin/geom/class/raid/graid.8 b/sbin/geom/class/raid/graid.8
index 92127dd7716a..6b8cd61dbf56 100644
--- a/sbin/geom/class/raid/graid.8
+++ b/sbin/geom/class/raid/graid.8
@@ -294,7 +294,7 @@ Debug level of the
.Nm RAID
GEOM class.
.It Va kern.geom.raid.idle_threshold : No 1000000
-Time in microseconds to consider a volume idle for rebuild puroses.
+Time in microseconds to consider a volume idle for rebuild purposes.
.It Va kern.geom.raid.name_format : No 0
Providers name format: 0 -- raid/r{num}, 1 -- raid/{label}.
.It Va kern.geom.raid.read_err_thresh : No 10
diff --git a/sbin/geom/class/virstor/gvirstor.8 b/sbin/geom/class/virstor/gvirstor.8
index cd7cb2f5fdc0..cdb50b1d0f53 100644
--- a/sbin/geom/class/virstor/gvirstor.8
+++ b/sbin/geom/class/virstor/gvirstor.8
@@ -113,7 +113,7 @@ Adds new components to existing virtual device with the given
The specified virstor device must exist and be active
.Pq i.e. module loaded, device present in Pa /dev .
This action can be safely performed while the virstor device is in use
-.Pq Qo hot Qc operation
+.Pq Qo hot Qc operation .
.It Cm remove
Removes components from existing virtual device with the given
.Ar name .
@@ -268,7 +268,8 @@ change once it is set, and that the sizes of individual physical storage
components will always remain constant during their existence.
For alternative ways to implement virtual or resizable file systems see
.Xr zfs 1M ,
-.Xr gconcat 8 and
+.Xr gconcat 8
+and
.Xr growfs 8 .
.Pp
Note that
diff --git a/sbin/gvinum/gvinum.8 b/sbin/gvinum/gvinum.8
index 1300bf391e9b..4753d7988647 100644
--- a/sbin/gvinum/gvinum.8
+++ b/sbin/gvinum/gvinum.8
@@ -58,7 +58,8 @@ All subdisks in the
plex must be up for a parity check.
.It Ic concat Oo Fl fv Oc Oo Fl n Ar name Oc Ar drives
Create a concatenated volume from the specified drives.
-If no name is specified, a unique name will be set by gvinum.
+If no name is specified, a unique name will be set by
+.Ic gvinum .
.It Ic create Oo Fl f Oc Op Ar description-file
Create a volume as described in
.Ar description-file .
@@ -148,8 +149,8 @@ Normally this would be done by entering the
EOF character.
.It Ic raid5 Oo Fl fv Oc Oo Fl s Ar stripesize Oc Oo Fl n Ar name Oc Ar drives
Create a RAID-5 volume from the specified drives.
-If no name is specified,a unique name will be set by
-.Ic gvinum.
+If no name is specified, a unique name will be set by
+.Ic gvinum .
This organization requires at least three drives.
.It Ic rename Oo Fl r Oc Ar drive | subdisk | plex | volume newname
Change the name of the specified object.
@@ -202,8 +203,9 @@ Terminate access to the objects, or stop
if no parameters are specified.
.It Ic stripe Oo Fl fv Oc Oo Fl n Ar name Oc Ar drives
Create a striped volume from the specified drives. If no name is specified,
-a unique name will be set by Ic gvinum. This organization requires at least two
-drives.
+a unique name will be set by
+.Ic gvinum .
+This organization requires at least two drives.
.El
.Sh DESCRIPTION
The
@@ -278,7 +280,8 @@ objects
.El
.Sh EXAMPLES
To create a mirror on disks /dev/ad1 and /dev/ad2, create a filesystem, mount,
-unmount and then stop Ic gvinum:
+unmount and then stop
+.Ic gvinum :
.Pp
.Dl "gvinum mirror /dev/ad1 /dev/ad2"
.Dl "newfs /dev/gvinum/gvinumvolume0"
diff --git a/sbin/hastctl/hastctl.8 b/sbin/hastctl/hastctl.8
index 31353ca58ae0..9266fc01cbbd 100644
--- a/sbin/hastctl/hastctl.8
+++ b/sbin/hastctl/hastctl.8
@@ -211,7 +211,7 @@ nodeB# application_start
.Xr ggatel 8 ,
.Xr hastd 8 ,
.Xr mount 8 ,
-.Xr newfs 8 .
+.Xr newfs 8
.Sh AUTHORS
The
.Nm
diff --git a/sbin/hastd/hast.h b/sbin/hastd/hast.h
index 94e572426dd8..263e98410944 100644
--- a/sbin/hastd/hast.h
+++ b/sbin/hastd/hast.h
@@ -244,6 +244,5 @@ void yy_config_free(struct hastd_config *config);
void yyerror(const char *);
int yylex(void);
-int yyparse(void);
#endif /* !_HAST_H_ */
diff --git a/sbin/hastd/hastd.8 b/sbin/hastd/hastd.8
index 5cbe70ad805b..457b837f4bed 100644
--- a/sbin/hastd/hastd.8
+++ b/sbin/hastd/hastd.8
@@ -223,7 +223,7 @@ nodeA# mount -o noatime /dev/hast/shared /shared
.Xr hastctl 8 ,
.Xr mount 8 ,
.Xr newfs 8 ,
-.Xr g_bio 9 .
+.Xr g_bio 9
.Sh AUTHORS
The
.Nm
diff --git a/sbin/hastd/parse.y b/sbin/hastd/parse.y
index 2c16f34f6747..a20b61aa1f5a 100644
--- a/sbin/hastd/parse.y
+++ b/sbin/hastd/parse.y
@@ -77,296 +77,9 @@ static int depth1_metaflush;
extern void yyrestart(FILE *);
-static int
-isitme(const char *name)
-{
- char buf[MAXHOSTNAMELEN];
- char *pos;
- size_t bufsize;
-
- /*
- * First check if the given name matches our full hostname.
- */
- if (gethostname(buf, sizeof(buf)) < 0) {
- pjdlog_errno(LOG_ERR, "gethostname() failed");
- return (-1);
- }
- if (strcmp(buf, name) == 0)
- return (1);
-
- /*
- * Now check if it matches first part of the host name.
- */
- pos = strchr(buf, '.');
- if (pos != NULL && (size_t)(pos - buf) == strlen(name) &&
- strncmp(buf, name, pos - buf) == 0) {
- return (1);
- }
-
- /*
- * At the end check if name is equal to our host's UUID.
- */
- bufsize = sizeof(buf);
- if (sysctlbyname("kern.hostuuid", buf, &bufsize, NULL, 0) < 0) {
- pjdlog_errno(LOG_ERR, "sysctlbyname(kern.hostuuid) failed");
- return (-1);
- }
- if (strcasecmp(buf, name) == 0)
- return (1);
-
- /*
- * Looks like this isn't about us.
- */
- return (0);
-}
-
-static bool
-family_supported(int family)
-{
- int sock;
-
- sock = socket(family, SOCK_STREAM, 0);
- if (sock == -1 && errno == EPROTONOSUPPORT)
- return (false);
- if (sock >= 0)
- (void)close(sock);
- return (true);
-}
-
-static int
-node_names(char **namesp)
-{
- static char names[MAXHOSTNAMELEN * 3];
- char buf[MAXHOSTNAMELEN];
- char *pos;
- size_t bufsize;
-
- if (gethostname(buf, sizeof(buf)) < 0) {
- pjdlog_errno(LOG_ERR, "gethostname() failed");
- return (-1);
- }
-
- /* First component of the host name. */
- pos = strchr(buf, '.');
- if (pos != NULL && pos != buf) {
- (void)strlcpy(names, buf, MIN((size_t)(pos - buf + 1),
- sizeof(names)));
- (void)strlcat(names, ", ", sizeof(names));
- }
-
- /* Full host name. */
- (void)strlcat(names, buf, sizeof(names));
- (void)strlcat(names, ", ", sizeof(names));
-
- /* Host UUID. */
- bufsize = sizeof(buf);
- if (sysctlbyname("kern.hostuuid", buf, &bufsize, NULL, 0) < 0) {
- pjdlog_errno(LOG_ERR, "sysctlbyname(kern.hostuuid) failed");
- return (-1);
- }
- (void)strlcat(names, buf, sizeof(names));
-
- *namesp = names;
-
- return (0);
-}
-
-void
-yyerror(const char *str)
-{
-
- pjdlog_error("Unable to parse configuration file at line %d near '%s': %s",
- lineno, yytext, str);
-}
-
-struct hastd_config *
-yy_config_parse(const char *config, bool exitonerror)
-{
- int ret;
-
- curres = NULL;
- mynode = false;
- depth = 0;
- lineno = 0;
-
- depth0_timeout = HAST_TIMEOUT;
- depth0_replication = HAST_REPLICATION_FULLSYNC;
- depth0_checksum = HAST_CHECKSUM_NONE;
- depth0_compression = HAST_COMPRESSION_HOLE;
- strlcpy(depth0_control, HAST_CONTROL, sizeof(depth0_control));
- strlcpy(depth0_pidfile, HASTD_PIDFILE, sizeof(depth0_pidfile));
- TAILQ_INIT(&depth0_listen);
- strlcpy(depth0_listen_tcp4, HASTD_LISTEN_TCP4,
- sizeof(depth0_listen_tcp4));
- strlcpy(depth0_listen_tcp6, HASTD_LISTEN_TCP6,
- sizeof(depth0_listen_tcp6));
- depth0_exec[0] = '\0';
- depth0_metaflush = 1;
-
- lconfig = calloc(1, sizeof(*lconfig));
- if (lconfig == NULL) {
- pjdlog_error("Unable to allocate memory for configuration.");
- if (exitonerror)
- exit(EX_TEMPFAIL);
- return (NULL);
- }
-
- TAILQ_INIT(&lconfig->hc_listen);
- TAILQ_INIT(&lconfig->hc_resources);
-
- yyin = fopen(config, "r");
- if (yyin == NULL) {
- pjdlog_errno(LOG_ERR, "Unable to open configuration file %s",
- config);
- yy_config_free(lconfig);
- if (exitonerror)
- exit(EX_OSFILE);
- return (NULL);
- }
- yyrestart(yyin);
- ret = yyparse();
- fclose(yyin);
- if (ret != 0) {
- yy_config_free(lconfig);
- if (exitonerror)
- exit(EX_CONFIG);
- return (NULL);
- }
-
- /*
- * Let's see if everything is set up.
- */
- if (lconfig->hc_controladdr[0] == '\0') {
- strlcpy(lconfig->hc_controladdr, depth0_control,
- sizeof(lconfig->hc_controladdr));
- }
- if (lconfig->hc_pidfile[0] == '\0') {
- strlcpy(lconfig->hc_pidfile, depth0_pidfile,
- sizeof(lconfig->hc_pidfile));
- }
- if (!TAILQ_EMPTY(&depth0_listen))
- TAILQ_CONCAT(&lconfig->hc_listen, &depth0_listen, hl_next);
- if (TAILQ_EMPTY(&lconfig->hc_listen)) {
- struct hastd_listen *lst;
-
- if (family_supported(AF_INET)) {
- lst = calloc(1, sizeof(*lst));
- if (lst == NULL) {
- pjdlog_error("Unable to allocate memory for listen address.");
- yy_config_free(lconfig);
- if (exitonerror)
- exit(EX_TEMPFAIL);
- return (NULL);
- }
- (void)strlcpy(lst->hl_addr, depth0_listen_tcp4,
- sizeof(lst->hl_addr));
- TAILQ_INSERT_TAIL(&lconfig->hc_listen, lst, hl_next);
- } else {
- pjdlog_debug(1,
- "No IPv4 support in the kernel, not listening on IPv4 address.");
- }
- if (family_supported(AF_INET6)) {
- lst = calloc(1, sizeof(*lst));
- if (lst == NULL) {
- pjdlog_error("Unable to allocate memory for listen address.");
- yy_config_free(lconfig);
- if (exitonerror)
- exit(EX_TEMPFAIL);
- return (NULL);
- }
- (void)strlcpy(lst->hl_addr, depth0_listen_tcp6,
- sizeof(lst->hl_addr));
- TAILQ_INSERT_TAIL(&lconfig->hc_listen, lst, hl_next);
- } else {
- pjdlog_debug(1,
- "No IPv6 support in the kernel, not listening on IPv6 address.");
- }
- if (TAILQ_EMPTY(&lconfig->hc_listen)) {
- pjdlog_error("No address to listen on.");
- yy_config_free(lconfig);
- if (exitonerror)
- exit(EX_TEMPFAIL);
- return (NULL);
- }
- }
- TAILQ_FOREACH(curres, &lconfig->hc_resources, hr_next) {
- PJDLOG_ASSERT(curres->hr_provname[0] != '\0');
- PJDLOG_ASSERT(curres->hr_localpath[0] != '\0');
- PJDLOG_ASSERT(curres->hr_remoteaddr[0] != '\0');
-
- if (curres->hr_replication == -1) {
- /*
- * Replication is not set at resource-level.
- * Use global or default setting.
- */
- curres->hr_replication = depth0_replication;
- }
- if (curres->hr_replication == HAST_REPLICATION_MEMSYNC) {
- pjdlog_warning("Replication mode \"%s\" is not implemented, falling back to \"%s\".",
- "memsync", "fullsync");
- curres->hr_replication = HAST_REPLICATION_FULLSYNC;
- }
- if (curres->hr_checksum == -1) {
- /*
- * Checksum is not set at resource-level.
- * Use global or default setting.
- */
- curres->hr_checksum = depth0_checksum;
- }
- if (curres->hr_compression == -1) {
- /*
- * Compression is not set at resource-level.
- * Use global or default setting.
- */
- curres->hr_compression = depth0_compression;
- }
- if (curres->hr_timeout == -1) {
- /*
- * Timeout is not set at resource-level.
- * Use global or default setting.
- */
- curres->hr_timeout = depth0_timeout;
- }
- if (curres->hr_exec[0] == '\0') {
- /*
- * Exec is not set at resource-level.
- * Use global or default setting.
- */
- strlcpy(curres->hr_exec, depth0_exec,
- sizeof(curres->hr_exec));
- }
- if (curres->hr_metaflush == -1) {
- /*
- * Metaflush is not set at resource-level.
- * Use global or default setting.
- */
- curres->hr_metaflush = depth0_metaflush;
- }
- }
-
- return (lconfig);
-}
-
-void
-yy_config_free(struct hastd_config *config)
-{
- struct hastd_listen *lst;
- struct hast_resource *res;
-
- while ((lst = TAILQ_FIRST(&depth0_listen)) != NULL) {
- TAILQ_REMOVE(&depth0_listen, lst, hl_next);
- free(lst);
- }
- while ((lst = TAILQ_FIRST(&config->hc_listen)) != NULL) {
- TAILQ_REMOVE(&config->hc_listen, lst, hl_next);
- free(lst);
- }
- while ((res = TAILQ_FIRST(&config->hc_resources)) != NULL) {
- TAILQ_REMOVE(&config->hc_resources, res, hr_next);
- free(res);
- }
- free(config);
-}
+static int isitme(const char *name);
+static bool family_supported(int family);
+static int node_names(char **namesp);
%}
%token CONTROL PIDFILE LISTEN REPLICATION CHECKSUM COMPRESSION METAFLUSH
@@ -1004,3 +717,296 @@ source_statement: SOURCE STR
free($2);
}
;
+
+%%
+
+static int
+isitme(const char *name)
+{
+ char buf[MAXHOSTNAMELEN];
+ char *pos;
+ size_t bufsize;
+
+ /*
+ * First check if the given name matches our full hostname.
+ */
+ if (gethostname(buf, sizeof(buf)) < 0) {
+ pjdlog_errno(LOG_ERR, "gethostname() failed");
+ return (-1);
+ }
+ if (strcmp(buf, name) == 0)
+ return (1);
+
+ /*
+ * Now check if it matches first part of the host name.
+ */
+ pos = strchr(buf, '.');
+ if (pos != NULL && (size_t)(pos - buf) == strlen(name) &&
+ strncmp(buf, name, pos - buf) == 0) {
+ return (1);
+ }
+
+ /*
+ * At the end check if name is equal to our host's UUID.
+ */
+ bufsize = sizeof(buf);
+ if (sysctlbyname("kern.hostuuid", buf, &bufsize, NULL, 0) < 0) {
+ pjdlog_errno(LOG_ERR, "sysctlbyname(kern.hostuuid) failed");
+ return (-1);
+ }
+ if (strcasecmp(buf, name) == 0)
+ return (1);
+
+ /*
+ * Looks like this isn't about us.
+ */
+ return (0);
+}
+
+static bool
+family_supported(int family)
+{
+ int sock;
+
+ sock = socket(family, SOCK_STREAM, 0);
+ if (sock == -1 && errno == EPROTONOSUPPORT)
+ return (false);
+ if (sock >= 0)
+ (void)close(sock);
+ return (true);
+}
+
+static int
+node_names(char **namesp)
+{
+ static char names[MAXHOSTNAMELEN * 3];
+ char buf[MAXHOSTNAMELEN];
+ char *pos;
+ size_t bufsize;
+
+ if (gethostname(buf, sizeof(buf)) < 0) {
+ pjdlog_errno(LOG_ERR, "gethostname() failed");
+ return (-1);
+ }
+
+ /* First component of the host name. */
+ pos = strchr(buf, '.');
+ if (pos != NULL && pos != buf) {
+ (void)strlcpy(names, buf, MIN((size_t)(pos - buf + 1),
+ sizeof(names)));
+ (void)strlcat(names, ", ", sizeof(names));
+ }
+
+ /* Full host name. */
+ (void)strlcat(names, buf, sizeof(names));
+ (void)strlcat(names, ", ", sizeof(names));
+
+ /* Host UUID. */
+ bufsize = sizeof(buf);
+ if (sysctlbyname("kern.hostuuid", buf, &bufsize, NULL, 0) < 0) {
+ pjdlog_errno(LOG_ERR, "sysctlbyname(kern.hostuuid) failed");
+ return (-1);
+ }
+ (void)strlcat(names, buf, sizeof(names));
+
+ *namesp = names;
+
+ return (0);
+}
+
+void
+yyerror(const char *str)
+{
+
+ pjdlog_error("Unable to parse configuration file at line %d near '%s': %s",
+ lineno, yytext, str);
+}
+
+struct hastd_config *
+yy_config_parse(const char *config, bool exitonerror)
+{
+ int ret;
+
+ curres = NULL;
+ mynode = false;
+ depth = 0;
+ lineno = 0;
+
+ depth0_timeout = HAST_TIMEOUT;
+ depth0_replication = HAST_REPLICATION_FULLSYNC;
+ depth0_checksum = HAST_CHECKSUM_NONE;
+ depth0_compression = HAST_COMPRESSION_HOLE;
+ strlcpy(depth0_control, HAST_CONTROL, sizeof(depth0_control));
+ strlcpy(depth0_pidfile, HASTD_PIDFILE, sizeof(depth0_pidfile));
+ TAILQ_INIT(&depth0_listen);
+ strlcpy(depth0_listen_tcp4, HASTD_LISTEN_TCP4,
+ sizeof(depth0_listen_tcp4));
+ strlcpy(depth0_listen_tcp6, HASTD_LISTEN_TCP6,
+ sizeof(depth0_listen_tcp6));
+ depth0_exec[0] = '\0';
+ depth0_metaflush = 1;
+
+ lconfig = calloc(1, sizeof(*lconfig));
+ if (lconfig == NULL) {
+ pjdlog_error("Unable to allocate memory for configuration.");
+ if (exitonerror)
+ exit(EX_TEMPFAIL);
+ return (NULL);
+ }
+
+ TAILQ_INIT(&lconfig->hc_listen);
+ TAILQ_INIT(&lconfig->hc_resources);
+
+ yyin = fopen(config, "r");
+ if (yyin == NULL) {
+ pjdlog_errno(LOG_ERR, "Unable to open configuration file %s",
+ config);
+ yy_config_free(lconfig);
+ if (exitonerror)
+ exit(EX_OSFILE);
+ return (NULL);
+ }
+ yyrestart(yyin);
+ ret = yyparse();
+ fclose(yyin);
+ if (ret != 0) {
+ yy_config_free(lconfig);
+ if (exitonerror)
+ exit(EX_CONFIG);
+ return (NULL);
+ }
+
+ /*
+ * Let's see if everything is set up.
+ */
+ if (lconfig->hc_controladdr[0] == '\0') {
+ strlcpy(lconfig->hc_controladdr, depth0_control,
+ sizeof(lconfig->hc_controladdr));
+ }
+ if (lconfig->hc_pidfile[0] == '\0') {
+ strlcpy(lconfig->hc_pidfile, depth0_pidfile,
+ sizeof(lconfig->hc_pidfile));
+ }
+ if (!TAILQ_EMPTY(&depth0_listen))
+ TAILQ_CONCAT(&lconfig->hc_listen, &depth0_listen, hl_next);
+ if (TAILQ_EMPTY(&lconfig->hc_listen)) {
+ struct hastd_listen *lst;
+
+ if (family_supported(AF_INET)) {
+ lst = calloc(1, sizeof(*lst));
+ if (lst == NULL) {
+ pjdlog_error("Unable to allocate memory for listen address.");
+ yy_config_free(lconfig);
+ if (exitonerror)
+ exit(EX_TEMPFAIL);
+ return (NULL);
+ }
+ (void)strlcpy(lst->hl_addr, depth0_listen_tcp4,
+ sizeof(lst->hl_addr));
+ TAILQ_INSERT_TAIL(&lconfig->hc_listen, lst, hl_next);
+ } else {
+ pjdlog_debug(1,
+ "No IPv4 support in the kernel, not listening on IPv4 address.");
+ }
+ if (family_supported(AF_INET6)) {
+ lst = calloc(1, sizeof(*lst));
+ if (lst == NULL) {
+ pjdlog_error("Unable to allocate memory for listen address.");
+ yy_config_free(lconfig);
+ if (exitonerror)
+ exit(EX_TEMPFAIL);
+ return (NULL);
+ }
+ (void)strlcpy(lst->hl_addr, depth0_listen_tcp6,
+ sizeof(lst->hl_addr));
+ TAILQ_INSERT_TAIL(&lconfig->hc_listen, lst, hl_next);
+ } else {
+ pjdlog_debug(1,
+ "No IPv6 support in the kernel, not listening on IPv6 address.");
+ }
+ if (TAILQ_EMPTY(&lconfig->hc_listen)) {
+ pjdlog_error("No address to listen on.");
+ yy_config_free(lconfig);
+ if (exitonerror)
+ exit(EX_TEMPFAIL);
+ return (NULL);
+ }
+ }
+ TAILQ_FOREACH(curres, &lconfig->hc_resources, hr_next) {
+ PJDLOG_ASSERT(curres->hr_provname[0] != '\0');
+ PJDLOG_ASSERT(curres->hr_localpath[0] != '\0');
+ PJDLOG_ASSERT(curres->hr_remoteaddr[0] != '\0');
+
+ if (curres->hr_replication == -1) {
+ /*
+ * Replication is not set at resource-level.
+ * Use global or default setting.
+ */
+ curres->hr_replication = depth0_replication;
+ }
+ if (curres->hr_replication == HAST_REPLICATION_MEMSYNC) {
+ pjdlog_warning("Replication mode \"%s\" is not implemented, falling back to \"%s\".",
+ "memsync", "fullsync");
+ curres->hr_replication = HAST_REPLICATION_FULLSYNC;
+ }
+ if (curres->hr_checksum == -1) {
+ /*
+ * Checksum is not set at resource-level.
+ * Use global or default setting.
+ */
+ curres->hr_checksum = depth0_checksum;
+ }
+ if (curres->hr_compression == -1) {
+ /*
+ * Compression is not set at resource-level.
+ * Use global or default setting.
+ */
+ curres->hr_compression = depth0_compression;
+ }
+ if (curres->hr_timeout == -1) {
+ /*
+ * Timeout is not set at resource-level.
+ * Use global or default setting.
+ */
+ curres->hr_timeout = depth0_timeout;
+ }
+ if (curres->hr_exec[0] == '\0') {
+ /*
+ * Exec is not set at resource-level.
+ * Use global or default setting.
+ */
+ strlcpy(curres->hr_exec, depth0_exec,
+ sizeof(curres->hr_exec));
+ }
+ if (curres->hr_metaflush == -1) {
+ /*
+ * Metaflush is not set at resource-level.
+ * Use global or default setting.
+ */
+ curres->hr_metaflush = depth0_metaflush;
+ }
+ }
+
+ return (lconfig);
+}
+
+void
+yy_config_free(struct hastd_config *config)
+{
+ struct hastd_listen *lst;
+ struct hast_resource *res;
+
+ while ((lst = TAILQ_FIRST(&depth0_listen)) != NULL) {
+ TAILQ_REMOVE(&depth0_listen, lst, hl_next);
+ free(lst);
+ }
+ while ((lst = TAILQ_FIRST(&config->hc_listen)) != NULL) {
+ TAILQ_REMOVE(&config->hc_listen, lst, hl_next);
+ free(lst);
+ }
+ while ((res = TAILQ_FIRST(&config->hc_resources)) != NULL) {
+ TAILQ_REMOVE(&config->hc_resources, res, hr_next);
+ free(res);
+ }
+ free(config);
+}
diff --git a/sbin/ifconfig/ifconfig.8 b/sbin/ifconfig/ifconfig.8
index a9ffcd9e8689..975605521513 100644
--- a/sbin/ifconfig/ifconfig.8
+++ b/sbin/ifconfig/ifconfig.8
@@ -28,7 +28,7 @@
.\" From: @(#)ifconfig.8 8.3 (Berkeley) 1/5/94
.\" $FreeBSD$
.\"
-.Dd May 1, 2012
+.Dd May 27, 2012
.Dt IFCONFIG 8
.Os
.Sh NAME
@@ -372,16 +372,32 @@ This is useful for devices which have multiple physical layer interfaces
.It Cm name Ar name
Set the interface name to
.Ar name .
-.It Cm rxcsum , txcsum
+.It Cm rxcsum , txcsum , rxcsum6 , txcsum6
If the driver supports user-configurable checksum offloading,
enable receive (or transmit) checksum offloading on the interface.
+The feature can be turned on selectively per protocol family.
+Use
+.Cm rxcsum6 , txcsum6
+for
+.Xr ip6 4
+or
+.Cm rxcsum , txcsum
+otherwise.
Some drivers may not be able to enable these flags independently
of each other, so setting one may also set the other.
The driver will offload as much checksum work as it can reliably
support, the exact level of offloading varies between drivers.
-.It Fl rxcsum , txcsum
+.It Fl rxcsum , txcsum , rxcsum6 , txcsum6
If the driver supports user-configurable checksum offloading,
disable receive (or transmit) checksum offloading on the interface.
+The feature can be turned off selectively per protocol family.
+Use
+.Fl rxcsum6 , txcsum6
+for
+.Xr ip6 4
+or
+.Fl rxcsum , txcsum
+otherwise.
These settings may not always be independent of each other.
.It Cm tso
If the driver supports
@@ -400,6 +416,22 @@ It will always disable TSO for
.Xr ip 4
and
.Xr ip6 4 .
+.It Cm tso6 , tso4
+If the driver supports
+.Xr tcp 4
+segmentation offloading for
+.Xr ip6 4
+or
+.Xr ip 4
+use one of these to selectively enabled it only for one protocol family.
+.It Fl tso6 , tso4
+If the driver supports
+.Xr tcp 4
+segmentation offloading for
+.Xr ip6 4
+or
+.Xr ip 4
+use one of these to selectively disable it only for one protocol family.
.It Cm lro
If the driver supports
.Xr tcp 4
diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c
index 5eb71eadc0ca..082e15d61e2a 100644
--- a/sbin/ifconfig/ifconfig.c
+++ b/sbin/ifconfig/ifconfig.c
@@ -916,7 +916,8 @@ unsetifdescr(const char *val, int value, int s, const struct afswtch *afp)
#define IFCAPBITS \
"\020\1RXCSUM\2TXCSUM\3NETCONS\4VLAN_MTU\5VLAN_HWTAGGING\6JUMBO_MTU\7POLLING" \
"\10VLAN_HWCSUM\11TSO4\12TSO6\13LRO\14WOL_UCAST\15WOL_MCAST\16WOL_MAGIC" \
-"\21VLAN_HWFILTER\23VLAN_HWTSO\24LINKSTATE\25NETMAP"
+"\21VLAN_HWFILTER\23VLAN_HWTSO\24LINKSTATE\25NETMAP" \
+"\26RXCSUM_IPV6\27TXCSUM_IPV6"
/*
* Print the status of the interface. If an address family was
@@ -1193,6 +1194,10 @@ static struct cmd basic_cmds[] = {
DEF_CMD("-monitor", -IFF_MONITOR, setifflags),
DEF_CMD("staticarp", IFF_STATICARP, setifflags),
DEF_CMD("-staticarp", -IFF_STATICARP, setifflags),
+ DEF_CMD("rxcsum6", IFCAP_RXCSUM_IPV6, setifcap),
+ DEF_CMD("-rxcsum6", -IFCAP_RXCSUM_IPV6, setifcap),
+ DEF_CMD("txcsum6", IFCAP_TXCSUM_IPV6, setifcap),
+ DEF_CMD("-txcsum6", -IFCAP_TXCSUM_IPV6, setifcap),
DEF_CMD("rxcsum", IFCAP_RXCSUM, setifcap),
DEF_CMD("-rxcsum", -IFCAP_RXCSUM, setifcap),
DEF_CMD("txcsum", IFCAP_TXCSUM, setifcap),
@@ -1201,6 +1206,10 @@ static struct cmd basic_cmds[] = {
DEF_CMD("-netcons", -IFCAP_NETCONS, setifcap),
DEF_CMD("polling", IFCAP_POLLING, setifcap),
DEF_CMD("-polling", -IFCAP_POLLING, setifcap),
+ DEF_CMD("tso6", IFCAP_TSO6, setifcap),
+ DEF_CMD("-tso6", -IFCAP_TSO6, setifcap),
+ DEF_CMD("tso4", IFCAP_TSO4, setifcap),
+ DEF_CMD("-tso4", -IFCAP_TSO4, setifcap),
DEF_CMD("tso", IFCAP_TSO, setifcap),
DEF_CMD("-tso", -IFCAP_TSO, setifcap),
DEF_CMD("lro", IFCAP_LRO, setifcap),
diff --git a/sbin/ifconfig/iflagg.c b/sbin/ifconfig/iflagg.c
index ed39868e1bdc..a4747298019e 100644
--- a/sbin/ifconfig/iflagg.c
+++ b/sbin/ifconfig/iflagg.c
@@ -40,7 +40,8 @@ setlaggport(const char *val, int d, int s, const struct afswtch *afp)
strlcpy(rp.rp_ifname, name, sizeof(rp.rp_ifname));
strlcpy(rp.rp_portname, val, sizeof(rp.rp_portname));
- if (ioctl(s, SIOCSLAGGPORT, &rp))
+ /* Don't choke if the port is already in this lagg. */
+ if (ioctl(s, SIOCSLAGGPORT, &rp) && errno != EEXIST)
err(1, "SIOCSLAGGPORT");
}
diff --git a/sbin/init/init.c b/sbin/init/init.c
index 8fd93bdfec56..c19b0700b749 100644
--- a/sbin/init/init.c
+++ b/sbin/init/init.c
@@ -646,8 +646,6 @@ single_user(void)
if (Reboot) {
/* Instead of going single user, let's reboot the machine */
sync();
- alarm(2);
- pause();
reboot(howto);
_exit(0);
}
diff --git a/sbin/mount/mount.8 b/sbin/mount/mount.8
index fdfd75c031a2..e1673780f8df 100644
--- a/sbin/mount/mount.8
+++ b/sbin/mount/mount.8
@@ -448,7 +448,7 @@ However, for the following file system types:
.Cm smbfs ,
.Cm udf ,
and
-.Cm unionfs ,
+.Cm unionfs .
.Nm
will not call
.Xr nmount 2
diff --git a/sbin/nandfs/Makefile b/sbin/nandfs/Makefile
new file mode 100644
index 000000000000..8474b09c522d
--- /dev/null
+++ b/sbin/nandfs/Makefile
@@ -0,0 +1,10 @@
+# $FreeBSD$
+
+PROG= nandfs
+SRCS= nandfs.c lssnap.c mksnap.c rmsnap.c
+MAN= nandfs.8
+
+DPADD= ${LIBNANDFS}
+LDADD= -lnandfs
+
+.include <bsd.prog.mk>
diff --git a/sbin/nandfs/lssnap.c b/sbin/nandfs/lssnap.c
new file mode 100644
index 000000000000..fbee3cd7e55a
--- /dev/null
+++ b/sbin/nandfs/lssnap.c
@@ -0,0 +1,112 @@
+/*-
+ * Copyright (c) 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Semihalf 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/types.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sysexits.h>
+#include <time.h>
+
+#include <fs/nandfs/nandfs_fs.h>
+#include <libnandfs.h>
+
+#include "nandfs.h"
+
+#define NCPINFO 512
+
+static void
+lssnap_usage(void)
+{
+
+ fprintf(stderr, "usage:\n");
+ fprintf(stderr, "\tlssnap node\n");
+}
+
+static void
+print_cpinfo(struct nandfs_cpinfo *cpinfo)
+{
+ struct tm tm;
+ time_t t;
+ char timebuf[128];
+
+ t = (time_t)cpinfo->nci_create;
+ localtime_r(&t, &tm);
+ strftime(timebuf, sizeof(timebuf), "%F %T", &tm);
+
+ printf("%20llu %s\n", (unsigned long long)cpinfo->nci_cno, timebuf);
+}
+
+int
+nandfs_lssnap(int argc, char **argv)
+{
+ struct nandfs_cpinfo *cpinfos;
+ struct nandfs fs;
+ uint64_t next;
+ int error, nsnap, i;
+
+ if (argc != 1) {
+ lssnap_usage();
+ return (EX_USAGE);
+ }
+
+ cpinfos = malloc(sizeof(*cpinfos) * NCPINFO);
+ if (cpinfos == NULL) {
+ fprintf(stderr, "cannot allocate memory\n");
+ return (-1);
+ }
+
+ nandfs_init(&fs, argv[0]);
+ error = nandfs_open(&fs);
+ if (error == -1) {
+ fprintf(stderr, "nandfs_open: %s\n", nandfs_errmsg(&fs));
+ goto out;
+ }
+
+ for (next = 1; next != 0; next = cpinfos[nsnap - 1].nci_next) {
+ nsnap = nandfs_get_snap(&fs, next, cpinfos, NCPINFO);
+ if (nsnap < 1)
+ break;
+
+ for (i = 0; i < nsnap; i++)
+ print_cpinfo(&cpinfos[i]);
+ }
+
+ if (nsnap == -1)
+ fprintf(stderr, "nandfs_get_snap: %s\n", nandfs_errmsg(&fs));
+
+out:
+ nandfs_close(&fs);
+ nandfs_destroy(&fs);
+ free(cpinfos);
+ return (error);
+}
diff --git a/sbin/nandfs/mksnap.c b/sbin/nandfs/mksnap.c
new file mode 100644
index 000000000000..cd2d1309313f
--- /dev/null
+++ b/sbin/nandfs/mksnap.c
@@ -0,0 +1,80 @@
+/*-
+ * Copyright (c) 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Semihalf 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/types.h>
+
+#include <stdio.h>
+#include <sysexits.h>
+
+#include <fs/nandfs/nandfs_fs.h>
+#include <libnandfs.h>
+
+#include "nandfs.h"
+
+static void
+mksnap_usage(void)
+{
+
+ fprintf(stderr, "usage:\n");
+ fprintf(stderr, "\tmksnap node\n");
+}
+
+int
+nandfs_mksnap(int argc, char **argv)
+{
+ struct nandfs fs;
+ uint64_t cpno;
+ int error;
+
+ if (argc != 1) {
+ mksnap_usage();
+ return (EX_USAGE);
+ }
+
+ nandfs_init(&fs, argv[0]);
+ error = nandfs_open(&fs);
+ if (error == -1) {
+ fprintf(stderr, "nandfs_open: %s\n", nandfs_errmsg(&fs));
+ goto out;
+ }
+
+ error = nandfs_make_snap(&fs, &cpno);
+ if (error == -1)
+ fprintf(stderr, "nandfs_make_snap: %s\n", nandfs_errmsg(&fs));
+ else
+ printf("%jd\n", cpno);
+
+out:
+ nandfs_close(&fs);
+ nandfs_destroy(&fs);
+ return (error);
+}
diff --git a/sbin/nandfs/nandfs.8 b/sbin/nandfs/nandfs.8
new file mode 100644
index 000000000000..e54f9f81ef63
--- /dev/null
+++ b/sbin/nandfs/nandfs.8
@@ -0,0 +1,74 @@
+.\"
+.\" Copyright (c) 2012 The FreeBSD Foundation
+.\" All rights reserved.
+.\"
+.\" This software was developed by Semihalf 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.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd February 28, 2012
+.Dt NANDFS 8
+.Os
+.Sh NAME
+.Nm nandfs
+.Nd manage mounted NAND FS
+.Sh SYNOPSIS
+.Nm
+.Cm lssnap
+.Ar node
+.Nm
+.Cm mksnap
+.Ar node
+.Nm
+.Cm rmsnap
+.Ar snapshot node
+.Sh DESCRIPTION
+The
+.Nm
+utility allows to manage snapshots of a mounted NAND FS.
+.Sh EXAMPLES
+Create a snapshot of filesystem mounted on
+.Em /nand .
+.Bd -literal -offset 2n
+.Li # Ic nandfs mksnap /nand
+1
+.Ed
+.Pp
+List snapshots of filesystem mounted on
+.Em /nand .
+.Bd -literal -offset 2n
+.Li # Ic nandfs lssnap /nand
+1 2012-02-28 18:49:45 ss 138 2
+.Ed
+.Pp
+Remove snapshot 1 of filesystem mounted on
+.Em /nand .
+.Bd -literal -offset 2n
+.Li # Ic nandfs rmsnap 1 /nand
+.Ed
+.Sh AUTHORS
+This utility and manual page were written by
+.An Mateusz Guzik .
diff --git a/sbin/nandfs/nandfs.c b/sbin/nandfs/nandfs.c
new file mode 100644
index 000000000000..f7ddda161055
--- /dev/null
+++ b/sbin/nandfs/nandfs.c
@@ -0,0 +1,74 @@
+/*-
+ * Copyright (c) 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Semihalf 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 <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+
+#include "nandfs.h"
+
+static void
+usage(void)
+{
+
+ fprintf(stderr, "usage: nandfs [lssnap | mksnap | rmsnap <snap>] "
+ "node\n");
+ exit(1);
+}
+
+int
+main(int argc, char **argv)
+{
+ int error = 0;
+ char *cmd;
+
+ if (argc < 2)
+ usage();
+
+ cmd = argv[1];
+ argc -= 2;
+ argv += 2;
+
+ if (strcmp(cmd, "lssnap") == 0)
+ error = nandfs_lssnap(argc, argv);
+ else if (strcmp(cmd, "mksnap") == 0)
+ error = nandfs_mksnap(argc, argv);
+ else if (strcmp(cmd, "rmsnap") == 0)
+ error = nandfs_rmsnap(argc, argv);
+ else
+ usage();
+
+ return (error);
+}
diff --git a/sbin/nandfs/nandfs.h b/sbin/nandfs/nandfs.h
new file mode 100644
index 000000000000..f544cc254be1
--- /dev/null
+++ b/sbin/nandfs/nandfs.h
@@ -0,0 +1,40 @@
+/*-
+ * Copyright (c) 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Semihalf 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef NANDFS_H
+#define NANDFS_H
+
+int nandfs_lssnap(int, char **);
+int nandfs_mksnap(int, char **);
+int nandfs_rmsnap(int, char **);
+
+#endif /* !NANDFS_H */
diff --git a/sbin/nandfs/rmsnap.c b/sbin/nandfs/rmsnap.c
new file mode 100644
index 000000000000..df2cbd562f14
--- /dev/null
+++ b/sbin/nandfs/rmsnap.c
@@ -0,0 +1,87 @@
+/*-
+ * Copyright (c) 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Semihalf 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/types.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <sysexits.h>
+
+#include <fs/nandfs/nandfs_fs.h>
+#include <libnandfs.h>
+
+#include "nandfs.h"
+
+static void
+rmsnap_usage(void)
+{
+
+ fprintf(stderr, "usage:\n");
+ fprintf(stderr, "\trmsnap snap node\n");
+}
+
+int
+nandfs_rmsnap(int argc, char **argv)
+{
+ struct nandfs fs;
+ uint64_t cpno;
+ int error;
+
+ if (argc != 2) {
+ rmsnap_usage();
+ return (EX_USAGE);
+ }
+
+ cpno = strtoll(argv[0], (char **)NULL, 10);
+ if (cpno == 0) {
+ fprintf(stderr, "%s must be a number greater than 0\n",
+ argv[0]);
+ return (EX_USAGE);
+ }
+
+ nandfs_init(&fs, argv[1]);
+ error = nandfs_open(&fs);
+ if (error == -1) {
+ fprintf(stderr, "nandfs_open: %s\n", nandfs_errmsg(&fs));
+ goto out;
+ }
+
+ error = nandfs_delete_snap(&fs, cpno);
+ if (error == -1)
+ fprintf(stderr, "nandfs_delete_snap: %s\n", nandfs_errmsg(&fs));
+
+out:
+ nandfs_close(&fs);
+ nandfs_destroy(&fs);
+ return (error);
+}
diff --git a/sbin/natd/natd.8 b/sbin/natd/natd.8
index 0729e2ccd91c..cba4ed4a48d2 100644
--- a/sbin/natd/natd.8
+++ b/sbin/natd/natd.8
@@ -787,7 +787,7 @@ ipfw add allow ip from any to any
.Pp
Here the packet from internal network to Internet goes out via
.Ql sis0
-(rule number 2000) and gets catched by the
+(rule number 2000) and gets caught by the
.Ic globalport
socket (3000).
After that, either a match is found in a translation table
diff --git a/sbin/newfs_nandfs/Makefile b/sbin/newfs_nandfs/Makefile
new file mode 100644
index 000000000000..1d990eddf52c
--- /dev/null
+++ b/sbin/newfs_nandfs/Makefile
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+PROG= newfs_nandfs
+MAN= newfs_nandfs.8
+
+LDADD+= -lgeom
+DPADD+= ${LIBGEOM}
+
+.include <bsd.prog.mk>
diff --git a/sbin/newfs_nandfs/newfs_nandfs.8 b/sbin/newfs_nandfs/newfs_nandfs.8
new file mode 100644
index 000000000000..c6a6f1b7958e
--- /dev/null
+++ b/sbin/newfs_nandfs/newfs_nandfs.8
@@ -0,0 +1,76 @@
+.\"
+.\" Copyright (c) 2010 Semihalf
+.\" 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 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 April 11, 2009
+.Dt NEWFS_NANDFS 8
+.Os
+.Sh NAME
+.Nm newfs_nandfs
+.Nd construct a new NAND FS file system
+.Sh SYNOPSIS
+.Nm
+.Op Fl b Ar blocsize
+.Op Fl B Ar blocks-per-segment
+.Op Fl L Ar label
+.Op Fl m Ar reserved-segment-percent
+.Ar device
+.Sh DESCRIPTION
+The
+.Nm
+utility creates a NAND FS file system on device.
+.Pp
+The options are as follow:
+.Bl -tag -width indent
+.It Fl b Ar blocksize
+Size of block (1024 if not specified).
+.It Fl B Ar blocks_per_segment
+Number of blocks per segment (2048 if not specified).
+.It Fl L Ar label
+Volume label (up to 16 characters).
+.It Fl m Ar reserved_block_percent
+Percentage of reserved blocks (5 if not specified).
+.El
+.Sh EXIT STATUS
+Exit status is 0 on success and 1 on error.
+.Sh EXAMPLES
+Create a file system, using default parameters, on
+.Pa /dev/ad0s1 :
+.Bd -literal -offset indent
+newfs_nandfs /dev/ad0s1
+.Ed
+.Sh SEE ALSO
+.Xr disktab 5 ,
+.Xr disklabel 8 ,
+.Xr fdisk 8 ,
+.Xr newfs 8
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Fx 10.0 .
+.Sh AUTHOR
+.An Grzegorz Bernacki
diff --git a/sbin/newfs_nandfs/newfs_nandfs.c b/sbin/newfs_nandfs/newfs_nandfs.c
new file mode 100644
index 000000000000..c99667482b69
--- /dev/null
+++ b/sbin/newfs_nandfs/newfs_nandfs.c
@@ -0,0 +1,1176 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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/fdcio.h>
+#include <sys/disk.h>
+#include <sys/disklabel.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/endian.h>
+#include <sys/stddef.h>
+#include <sys/uuid.h>
+#include <sys/dirent.h>
+#include <sys/stat.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <libgeom.h>
+#include <paths.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <fs/nandfs/nandfs_fs.h>
+#include <dev/nand/nand_dev.h>
+
+#define DEBUG
+#undef DEBUG
+#ifdef DEBUG
+#define debug(fmt, args...) do { \
+ printf("nandfs:" fmt "\n", ##args); } while (0)
+#else
+#define debug(fmt, args...)
+#endif
+
+#define NANDFS_FIRST_BLOCK nandfs_first_block()
+#define NANDFS_FIRST_CNO 1
+#define NANDFS_BLOCK_BAD 1
+#define NANDFS_BLOCK_GOOD 0
+
+struct file_info {
+ uint64_t ino;
+ const char *name;
+ uint32_t mode;
+ uint64_t size;
+ uint8_t nblocks;
+ uint32_t *blocks;
+ struct nandfs_inode *inode;
+};
+
+struct file_info user_files[] =
+{
+ {NANDFS_ROOT_INO, NULL, S_IFDIR | 0755, 0, 1, NULL, NULL},
+};
+
+struct file_info ifile = {NANDFS_IFILE_INO, NULL, 0, 0, -1, NULL, NULL};
+struct file_info sufile = {NANDFS_SUFILE_INO, NULL, 0, 0, -1, NULL, NULL};
+struct file_info cpfile = {NANDFS_CPFILE_INO, NULL, 0, 0, -1, NULL, NULL};
+struct file_info datfile = {NANDFS_DAT_INO, NULL, 0, 0, -1, NULL, NULL};
+
+struct nandfs_block {
+ LIST_ENTRY(nandfs_block) block_link;
+ uint32_t number;
+ uint64_t offset;
+ void *data;
+};
+
+static LIST_HEAD(, nandfs_block) block_head = LIST_HEAD_INITIALIZER(&block_head);
+
+/* Storage geometry */
+static off_t mediasize;
+static ssize_t sectorsize;
+static uint64_t nsegments;
+static uint64_t erasesize;
+static uint64_t segsize;
+
+struct nandfs_fsdata fsdata;
+struct nandfs_super_block super_block;
+
+static int is_nand;
+
+/* Nandfs parameters */
+static size_t blocksize = NANDFS_DEF_BLOCKSIZE;
+static long blocks_per_segment;
+static long rsv_segment_percent = 5;
+static time_t nandfs_time;
+static uint32_t bad_segments_count = 0;
+static uint32_t *bad_segments = NULL;
+static uint8_t fsdata_blocks_state[NANDFS_NFSAREAS];
+
+u_char *volumelabel = NULL;
+
+struct nandfs_super_root *sr;
+
+uint32_t nuserfiles;
+uint32_t seg_segsum_size;
+uint32_t seg_nblocks;
+uint32_t seg_endblock;
+
+#define SIZE_TO_BLOCK(size) (((size) + (blocksize - 1)) / blocksize)
+
+static uint32_t
+nandfs_first_block(void)
+{
+ uint32_t i, first_free, start_bad_segments = 0;
+
+ for (i = 0; i < bad_segments_count; i++) {
+ if (i == bad_segments[i])
+ start_bad_segments++;
+ else
+ break;
+ }
+
+ first_free = SIZE_TO_BLOCK(NANDFS_DATA_OFFSET_BYTES(erasesize) +
+ (start_bad_segments * segsize));
+
+ if (first_free < (uint32_t)blocks_per_segment)
+ return (blocks_per_segment);
+ else
+ return (first_free);
+}
+
+static void
+usage(void)
+{
+
+ fprintf(stderr,
+ "usage: newfs_nandfs [ -options ] device\n"
+ "where the options are:\n"
+ "\t-b block-size\n"
+ "\t-B blocks-per-segment\n"
+ "\t-L volume label\n"
+ "\t-m reserved-segments-percentage\n");
+ exit(1);
+}
+
+static int
+nandfs_log2(unsigned n)
+{
+ unsigned count;
+
+ /*
+ * N.B. this function will return 0 if supplied 0.
+ */
+ for (count = 0; n/2; count++)
+ n /= 2;
+ return count;
+}
+
+/* from NetBSD's src/sys/net/if_ethersubr.c */
+static uint32_t
+crc32_le(uint32_t crc, const uint8_t *buf, size_t len)
+{
+ static const uint32_t crctab[] = {
+ 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
+ 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
+ 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
+ 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
+ };
+ size_t i;
+
+ crc = crc ^ ~0U;
+
+ for (i = 0; i < len; i++) {
+ crc ^= buf[i];
+ crc = (crc >> 4) ^ crctab[crc & 0xf];
+ crc = (crc >> 4) ^ crctab[crc & 0xf];
+ }
+
+ return (crc ^ ~0U);
+}
+
+static void *
+get_block(uint32_t block_nr, uint64_t offset)
+{
+ struct nandfs_block *block, *new_block;
+
+ LIST_FOREACH(block, &block_head, block_link) {
+ if (block->number == block_nr)
+ return block->data;
+ }
+
+ debug("allocating block %x\n", block_nr);
+
+ new_block = malloc(sizeof(*block));
+ if (!new_block)
+ err(1, "cannot allocate block");
+
+ new_block->number = block_nr;
+ new_block->offset = offset;
+ new_block->data = malloc(blocksize);
+ if (!new_block->data)
+ err(1, "cannot allocate block data");
+
+ memset(new_block->data, 0, blocksize);
+
+ LIST_INSERT_HEAD(&block_head, new_block, block_link);
+
+ return (new_block->data);
+}
+
+static int
+nandfs_seg_usage_blk_offset(uint64_t seg, uint64_t *blk, uint64_t *offset)
+{
+ uint64_t off;
+ uint16_t seg_size;
+
+ seg_size = sizeof(struct nandfs_segment_usage);
+
+ off = roundup(sizeof(struct nandfs_sufile_header), seg_size);
+ off += (seg * seg_size);
+
+ *blk = off / blocksize;
+ *offset = (off % blocksize) / seg_size;
+ return (0);
+}
+
+static uint32_t
+segment_size(void)
+{
+ u_int size;
+
+ size = sizeof(struct nandfs_segment_summary );
+ size += seg_nblocks * sizeof(struct nandfs_binfo_v);
+
+ if (size > blocksize)
+ err(1, "segsum info bigger that blocksize");
+
+ return (size);
+}
+
+
+static void
+prepare_blockgrouped_file(uint32_t block)
+{
+ struct nandfs_block_group_desc *desc;
+ uint32_t i, entries;
+
+ desc = (struct nandfs_block_group_desc *)get_block(block, 0);
+ entries = blocksize / sizeof(struct nandfs_block_group_desc);
+ for (i = 0; i < entries; i++)
+ desc[i].bg_nfrees = blocksize * 8;
+}
+
+static void
+alloc_blockgrouped_file(uint32_t block, uint32_t entry)
+{
+ struct nandfs_block_group_desc *desc;
+ uint32_t desc_nr;
+ uint32_t *bitmap;
+
+ desc = (struct nandfs_block_group_desc *)get_block(block, 0);
+ bitmap = (uint32_t *)get_block(block + 1, 1);
+
+ bitmap += (entry >> 5);
+ if (*bitmap & (1 << (entry % 32))) {
+ printf("nandfs: blockgrouped entry %d already allocated\n",
+ entry);
+ }
+ *bitmap |= (1 << (entry % 32));
+
+ desc_nr = entry / (blocksize * 8);
+ desc[desc_nr].bg_nfrees--;
+}
+
+
+static uint64_t
+count_su_blocks(void)
+{
+ uint64_t maxblk, blk, offset, i;
+
+ maxblk = blk = 0;
+
+ for (i = 0; i < bad_segments_count; i++) {
+ nandfs_seg_usage_blk_offset(bad_segments[i], &blk, &offset);
+ debug("bad segment at block:%jx off: %jx", blk, offset);
+ if (blk > maxblk)
+ maxblk = blk;
+ }
+
+ debug("bad segment needs %#jx", blk);
+ if (blk >= NDADDR) {
+ printf("nandfs: file too big (%jd > %d)\n", blk, NDADDR);
+ exit(2);
+ }
+
+ sufile.size = (blk + 1) * blocksize;
+ return (blk + 1);
+}
+
+static void
+count_seg_blocks(void)
+{
+ uint32_t i;
+
+ for (i = 0; i < nuserfiles; i++)
+ if (user_files[i].nblocks) {
+ seg_nblocks += user_files[i].nblocks;
+ user_files[i].blocks = malloc(user_files[i].nblocks * sizeof(uint32_t));
+ }
+
+ ifile.nblocks = 2 +
+ SIZE_TO_BLOCK(sizeof(struct nandfs_inode) * (NANDFS_USER_INO + 1));
+ ifile.blocks = malloc(ifile.nblocks * sizeof(uint32_t));
+ seg_nblocks += ifile.nblocks;
+
+ cpfile.nblocks =
+ SIZE_TO_BLOCK((NANDFS_CPFILE_FIRST_CHECKPOINT_OFFSET + 1) *
+ sizeof(struct nandfs_checkpoint));
+ cpfile.blocks = malloc(cpfile.nblocks * sizeof(uint32_t));
+ seg_nblocks += cpfile.nblocks;
+
+ if (!bad_segments) {
+ sufile.nblocks =
+ SIZE_TO_BLOCK((NANDFS_SUFILE_FIRST_SEGMENT_USAGE_OFFSET + 1) *
+ sizeof(struct nandfs_segment_usage));
+ } else {
+ debug("bad blocks found: extra space for sufile");
+ sufile.nblocks = count_su_blocks();
+ }
+
+ sufile.blocks = malloc(sufile.nblocks * sizeof(uint32_t));
+ seg_nblocks += sufile.nblocks;
+
+ datfile.nblocks = 2 +
+ SIZE_TO_BLOCK((seg_nblocks) * sizeof(struct nandfs_dat_entry));
+ datfile.blocks = malloc(datfile.nblocks * sizeof(uint32_t));
+ seg_nblocks += datfile.nblocks;
+}
+
+static void
+assign_file_blocks(uint64_t start_block)
+{
+ uint32_t i, j;
+
+ for (i = 0; i < nuserfiles; i++)
+ for (j = 0; j < user_files[i].nblocks; j++) {
+ debug("user file %d at block %d at %#jx",
+ i, j, (uintmax_t)start_block);
+ user_files[i].blocks[j] = start_block++;
+ }
+
+ for (j = 0; j < ifile.nblocks; j++) {
+ debug("ifile block %d at %#jx", j, (uintmax_t)start_block);
+ ifile.blocks[j] = start_block++;
+ }
+
+ for (j = 0; j < cpfile.nblocks; j++) {
+ debug("cpfile block %d at %#jx", j, (uintmax_t)start_block);
+ cpfile.blocks[j] = start_block++;
+ }
+
+ for (j = 0; j < sufile.nblocks; j++) {
+ debug("sufile block %d at %#jx", j, (uintmax_t)start_block);
+ sufile.blocks[j] = start_block++;
+ }
+
+ for (j = 0; j < datfile.nblocks; j++) {
+ debug("datfile block %d at %#jx", j, (uintmax_t)start_block);
+ datfile.blocks[j] = start_block++;
+ }
+
+ /* add one for superroot */
+ debug("sr at block %#jx", (uintmax_t)start_block);
+ sr = (struct nandfs_super_root *)get_block(start_block++, 0);
+ seg_endblock = start_block;
+}
+
+static void
+save_datfile(void)
+{
+
+ prepare_blockgrouped_file(datfile.blocks[0]);
+}
+
+static uint64_t
+update_datfile(uint64_t block)
+{
+ struct nandfs_dat_entry *dat;
+ static uint64_t vblock = 0;
+ uint64_t allocated, i, off;
+
+ if (vblock == 0) {
+ alloc_blockgrouped_file(datfile.blocks[0], vblock);
+ vblock++;
+ }
+ allocated = vblock;
+ i = vblock / (blocksize / sizeof(*dat));
+ off = vblock % (blocksize / sizeof(*dat));
+ vblock++;
+
+ dat = (struct nandfs_dat_entry *)get_block(datfile.blocks[2 + i], 2 + i);
+
+ alloc_blockgrouped_file(datfile.blocks[0], allocated);
+ dat[off].de_blocknr = block;
+ dat[off].de_start = NANDFS_FIRST_CNO;
+ dat[off].de_end = UINTMAX_MAX;
+
+ return (allocated);
+}
+
+static union nandfs_binfo *
+update_block_info(union nandfs_binfo *binfo, struct file_info *file)
+{
+ nandfs_daddr_t vblock;
+ uint32_t i;
+
+ for (i = 0; i < file->nblocks; i++) {
+ debug("%s: blk %x", __func__, i);
+ if (file->ino != NANDFS_DAT_INO) {
+ vblock = update_datfile(file->blocks[i]);
+ binfo->bi_v.bi_vblocknr = vblock;
+ binfo->bi_v.bi_blkoff = i;
+ binfo->bi_v.bi_ino = file->ino;
+ file->inode->i_db[i] = vblock;
+ } else {
+ binfo->bi_dat.bi_blkoff = i;
+ binfo->bi_dat.bi_ino = file->ino;
+ file->inode->i_db[i] = datfile.blocks[i];
+ }
+ binfo++;
+ }
+
+ return (binfo);
+}
+
+static void
+save_segsum(struct nandfs_segment_summary *ss)
+{
+ union nandfs_binfo *binfo;
+ struct nandfs_block *block;
+ uint32_t sum_bytes, i;
+ uint8_t crc_data, crc_skip;
+
+ sum_bytes = segment_size();
+ ss->ss_magic = NANDFS_SEGSUM_MAGIC;
+ ss->ss_bytes = sizeof(struct nandfs_segment_summary);
+ ss->ss_flags = NANDFS_SS_LOGBGN | NANDFS_SS_LOGEND | NANDFS_SS_SR;
+ ss->ss_seq = 1;
+ ss->ss_create = nandfs_time;
+
+ ss->ss_next = nandfs_first_block() + blocks_per_segment;
+ /* nblocks = segment blocks + segsum block + superroot */
+ ss->ss_nblocks = seg_nblocks + 2;
+ ss->ss_nbinfos = seg_nblocks;
+ ss->ss_sumbytes = sum_bytes;
+
+ crc_skip = sizeof(ss->ss_datasum) + sizeof(ss->ss_sumsum);
+ ss->ss_sumsum = crc32_le(0, (uint8_t *)ss + crc_skip,
+ sum_bytes - crc_skip);
+ crc_data = 0;
+
+ binfo = (union nandfs_binfo *)(ss + 1);
+ for (i = 0; i < nuserfiles; i++) {
+ if (user_files[i].nblocks)
+ binfo = update_block_info(binfo, &user_files[i]);
+ }
+
+ binfo = update_block_info(binfo, &ifile);
+ binfo = update_block_info(binfo, &cpfile);
+ binfo = update_block_info(binfo, &sufile);
+ update_block_info(binfo, &datfile);
+
+ /* save superroot crc */
+ crc_skip = sizeof(sr->sr_sum);
+ sr->sr_sum = crc32_le(0, (uint8_t *)sr + crc_skip,
+ NANDFS_SR_BYTES - crc_skip);
+
+ /* segment checksup */
+ crc_skip = sizeof(ss->ss_datasum);
+ LIST_FOREACH(block, &block_head, block_link) {
+ if (block->number < NANDFS_FIRST_BLOCK)
+ continue;
+ if (block->number == NANDFS_FIRST_BLOCK)
+ crc_data = crc32_le(0,
+ (uint8_t *)block->data + crc_skip,
+ blocksize - crc_skip);
+ else
+ crc_data = crc32_le(crc_data, (uint8_t *)block->data,
+ blocksize);
+ }
+ ss->ss_datasum = crc_data;
+}
+
+static void
+create_fsdata(void)
+{
+
+ memset(&fsdata, 0, sizeof(struct nandfs_fsdata));
+
+ fsdata.f_magic = NANDFS_FSDATA_MAGIC;
+ fsdata.f_nsegments = nsegments;
+ fsdata.f_erasesize = erasesize;
+ fsdata.f_first_data_block = NANDFS_FIRST_BLOCK;
+ fsdata.f_blocks_per_segment = blocks_per_segment;
+ fsdata.f_r_segments_percentage = rsv_segment_percent;
+ fsdata.f_rev_level = NANDFS_CURRENT_REV;
+ fsdata.f_sbbytes = NANDFS_SB_BYTES;
+ fsdata.f_bytes = NANDFS_FSDATA_CRC_BYTES;
+ fsdata.f_ctime = nandfs_time;
+ fsdata.f_log_block_size = nandfs_log2(blocksize) - 10;
+ fsdata.f_errors = 1;
+ fsdata.f_inode_size = sizeof(struct nandfs_inode);
+ fsdata.f_dat_entry_size = sizeof(struct nandfs_dat_entry);
+ fsdata.f_checkpoint_size = sizeof(struct nandfs_checkpoint);
+ fsdata.f_segment_usage_size = sizeof(struct nandfs_segment_usage);
+
+ uuidgen(&fsdata.f_uuid, 1);
+
+ if (volumelabel)
+ memcpy(fsdata.f_volume_name, volumelabel, 16);
+
+ fsdata.f_sum = crc32_le(0, (const uint8_t *)&fsdata,
+ NANDFS_FSDATA_CRC_BYTES);
+}
+
+static void
+save_fsdata(void *data)
+{
+
+ memcpy(data, &fsdata, sizeof(fsdata));
+}
+
+static void
+create_super_block(void)
+{
+
+ memset(&super_block, 0, sizeof(struct nandfs_super_block));
+
+ super_block.s_magic = NANDFS_SUPER_MAGIC;
+ super_block.s_last_cno = NANDFS_FIRST_CNO;
+ super_block.s_last_pseg = NANDFS_FIRST_BLOCK;
+ super_block.s_last_seq = 1;
+ super_block.s_free_blocks_count =
+ (nsegments - bad_segments_count) * blocks_per_segment;
+ super_block.s_mtime = 0;
+ super_block.s_wtime = nandfs_time;
+ super_block.s_state = NANDFS_VALID_FS;
+
+ super_block.s_sum = crc32_le(0, (const uint8_t *)&super_block,
+ NANDFS_SB_BYTES);
+}
+
+static void
+save_super_block(void *data)
+{
+
+ memcpy(data, &super_block, sizeof(super_block));
+}
+
+static void
+save_super_root(void)
+{
+
+ sr->sr_bytes = NANDFS_SR_BYTES;
+ sr->sr_flags = 0;
+ sr->sr_nongc_ctime = nandfs_time;
+ datfile.inode = &sr->sr_dat;
+ cpfile.inode = &sr->sr_cpfile;
+ sufile.inode = &sr->sr_sufile;
+}
+
+static struct nandfs_dir_entry *
+add_de(void *block, struct nandfs_dir_entry *de, uint64_t ino,
+ const char *name, uint8_t type)
+{
+ uint16_t reclen;
+
+ /* modify last de */
+ de->rec_len = NANDFS_DIR_REC_LEN(de->name_len);
+ de = (void *)((uint8_t *)de + de->rec_len);
+
+ reclen = blocksize - ((uintptr_t)de - (uintptr_t)block);
+ if (reclen < NANDFS_DIR_REC_LEN(strlen(name))) {
+ printf("nandfs: too many dir entries for one block\n");
+ return (NULL);
+ }
+
+ de->inode = ino;
+ de->rec_len = reclen;
+ de->name_len = strlen(name);
+ de->file_type = type;
+ memset(de->name, 0,
+ (strlen(name) + NANDFS_DIR_PAD - 1) & ~NANDFS_DIR_ROUND);
+ memcpy(de->name, name, strlen(name));
+
+ return (de);
+}
+
+static struct nandfs_dir_entry *
+make_dir(void *block, uint64_t ino, uint64_t parent_ino)
+{
+ struct nandfs_dir_entry *de = (struct nandfs_dir_entry *)block;
+
+ /* create '..' entry */
+ de->inode = parent_ino;
+ de->rec_len = NANDFS_DIR_REC_LEN(2);
+ de->name_len = 2;
+ de->file_type = DT_DIR;
+ memset(de->name, 0, NANDFS_DIR_NAME_LEN(2));
+ memcpy(de->name, "..", 2);
+
+ /* create '.' entry */
+ de = (void *)((uint8_t *)block + NANDFS_DIR_REC_LEN(2));
+ de->inode = ino;
+ de->rec_len = blocksize - NANDFS_DIR_REC_LEN(2);
+ de->name_len = 1;
+ de->file_type = DT_DIR;
+ memset(de->name, 0, NANDFS_DIR_NAME_LEN(1));
+ memcpy(de->name, ".", 1);
+
+ return (de);
+}
+
+static void
+save_root_dir(void)
+{
+ struct file_info *root = &user_files[0];
+ struct nandfs_dir_entry *de;
+ uint32_t i;
+ void *block;
+
+ block = get_block(root->blocks[0], 0);
+
+ de = make_dir(block, root->ino, root->ino);
+ for (i = 1; i < nuserfiles; i++)
+ de = add_de(block, de, user_files[i].ino, user_files[i].name,
+ IFTODT(user_files[i].mode));
+
+ root->size = ((uintptr_t)de - (uintptr_t)block) +
+ NANDFS_DIR_REC_LEN(de->name_len);
+}
+
+static void
+save_sufile(void)
+{
+ struct nandfs_sufile_header *header;
+ struct nandfs_segment_usage *su;
+ uint64_t blk, i, off;
+ void *block;
+ int start;
+
+ /*
+ * At the beginning just zero-out everything
+ */
+ for (i = 0; i < sufile.nblocks; i++)
+ get_block(sufile.blocks[i], 0);
+
+ start = 0;
+
+ block = get_block(sufile.blocks[start], 0);
+ header = (struct nandfs_sufile_header *)block;
+ header->sh_ncleansegs = nsegments - bad_segments_count - 1;
+ header->sh_ndirtysegs = 1;
+ header->sh_last_alloc = 1;
+
+ su = (struct nandfs_segment_usage *)header;
+ off = NANDFS_SUFILE_FIRST_SEGMENT_USAGE_OFFSET;
+ /* Allocate data segment */
+ su[off].su_lastmod = nandfs_time;
+ /* nblocks = segment blocks + segsum block + superroot */
+ su[off].su_nblocks = seg_nblocks + 2;
+ su[off].su_flags = NANDFS_SEGMENT_USAGE_DIRTY;
+ off++;
+ /* Allocate next segment */
+ su[off].su_lastmod = nandfs_time;
+ su[off].su_nblocks = 0;
+ su[off].su_flags = NANDFS_SEGMENT_USAGE_DIRTY;
+ for (i = 0; i < bad_segments_count; i++) {
+ nandfs_seg_usage_blk_offset(bad_segments[i], &blk, &off);
+ debug("storing bad_segments[%jd]=%x at %jx off %jx\n", i,
+ bad_segments[i], blk, off);
+ block = get_block(sufile.blocks[blk],
+ off * sizeof(struct nandfs_segment_usage *));
+ su = (struct nandfs_segment_usage *)block;
+ su[off].su_lastmod = nandfs_time;
+ su[off].su_nblocks = 0;
+ su[off].su_flags = NANDFS_SEGMENT_USAGE_ERROR;
+ }
+}
+
+static void
+save_cpfile(void)
+{
+ struct nandfs_cpfile_header *header;
+ struct nandfs_checkpoint *cp, *initial_cp;
+ int i, entries = blocksize / sizeof(struct nandfs_checkpoint);
+ uint64_t cno;
+
+ header = (struct nandfs_cpfile_header *)get_block(cpfile.blocks[0], 0);
+ header->ch_ncheckpoints = 1;
+ header->ch_nsnapshots = 0;
+
+ cp = (struct nandfs_checkpoint *)header;
+
+ /* fill first checkpoint data*/
+ initial_cp = &cp[NANDFS_CPFILE_FIRST_CHECKPOINT_OFFSET];
+ initial_cp->cp_flags = 0;
+ initial_cp->cp_checkpoints_count = 0;
+ initial_cp->cp_cno = NANDFS_FIRST_CNO;
+ initial_cp->cp_create = nandfs_time;
+ initial_cp->cp_nblk_inc = seg_endblock - 1;
+ initial_cp->cp_blocks_count = seg_nblocks;
+ memset(&initial_cp->cp_snapshot_list, 0,
+ sizeof(struct nandfs_snapshot_list));
+
+ ifile.inode = &initial_cp->cp_ifile_inode;
+
+ /* mark rest of cp as invalid */
+ cno = NANDFS_FIRST_CNO + 1;
+ i = NANDFS_CPFILE_FIRST_CHECKPOINT_OFFSET + 1;
+ for (; i < entries; i++) {
+ cp[i].cp_cno = cno++;
+ cp[i].cp_flags = NANDFS_CHECKPOINT_INVALID;
+ }
+}
+
+static void
+init_inode(struct nandfs_inode *inode, struct file_info *file)
+{
+
+ inode->i_blocks = file->nblocks;
+ inode->i_ctime = nandfs_time;
+ inode->i_mtime = nandfs_time;
+ inode->i_mode = file->mode & 0xffff;
+ inode->i_links_count = 1;
+
+ if (file->size > 0)
+ inode->i_size = file->size;
+ else
+ inode->i_size = 0;
+
+ if (file->ino == NANDFS_USER_INO)
+ inode->i_flags = SF_NOUNLINK|UF_NOUNLINK;
+ else
+ inode->i_flags = 0;
+}
+
+static void
+save_ifile(void)
+{
+ struct nandfs_inode *inode;
+ struct file_info *file;
+ uint64_t ino, blk, off;
+ uint32_t i;
+
+ prepare_blockgrouped_file(ifile.blocks[0]);
+ for (i = 0; i <= NANDFS_USER_INO; i++)
+ alloc_blockgrouped_file(ifile.blocks[0], i);
+
+ for (i = 0; i < nuserfiles; i++) {
+ file = &user_files[i];
+ ino = file->ino;
+ blk = ino / (blocksize / sizeof(*inode));
+ off = ino % (blocksize / sizeof(*inode));
+ inode =
+ (struct nandfs_inode *)get_block(ifile.blocks[2 + blk], 2 + blk);
+ file->inode = &inode[off];
+ init_inode(file->inode, file);
+ }
+
+ init_inode(ifile.inode, &ifile);
+ init_inode(cpfile.inode, &cpfile);
+ init_inode(sufile.inode, &sufile);
+ init_inode(datfile.inode, &datfile);
+}
+
+static int
+create_fs(void)
+{
+ uint64_t start_block;
+ uint32_t segsum_size;
+ char *data;
+ int i;
+
+ nuserfiles = (sizeof(user_files) / sizeof(user_files[0]));
+
+ /* Count and assign blocks */
+ count_seg_blocks();
+ segsum_size = segment_size();
+ start_block = NANDFS_FIRST_BLOCK + SIZE_TO_BLOCK(segsum_size);
+ assign_file_blocks(start_block);
+
+ /* Create super root structure */
+ save_super_root();
+
+ /* Create root directory */
+ save_root_dir();
+
+ /* Fill in file contents */
+ save_sufile();
+ save_cpfile();
+ save_ifile();
+ save_datfile();
+
+ /* Save fsdata and superblocks */
+ create_fsdata();
+ create_super_block();
+
+ for (i = 0; i < NANDFS_NFSAREAS; i++) {
+ if (fsdata_blocks_state[i] != NANDFS_BLOCK_GOOD)
+ continue;
+
+ data = get_block((i * erasesize)/blocksize, 0);
+ save_fsdata(data);
+
+ data = get_block((i * erasesize + NANDFS_SBLOCK_OFFSET_BYTES) /
+ blocksize, 0);
+ if (blocksize > NANDFS_SBLOCK_OFFSET_BYTES)
+ data += NANDFS_SBLOCK_OFFSET_BYTES;
+ save_super_block(data);
+ memset(data + sizeof(struct nandfs_super_block), 0xff,
+ (blocksize - sizeof(struct nandfs_super_block) -
+ NANDFS_SBLOCK_OFFSET_BYTES));
+ }
+
+ /* Save segment summary and CRCs */
+ save_segsum(get_block(NANDFS_FIRST_BLOCK, 0));
+
+ return (0);
+}
+
+static void
+write_fs(int fda)
+{
+ struct nandfs_block *block;
+ char *data;
+ u_int ret;
+
+ /* Overwrite next block with ff if not nand device */
+ if (!is_nand) {
+ data = get_block(seg_endblock, 0);
+ memset(data, 0xff, blocksize);
+ }
+
+ LIST_FOREACH(block, &block_head, block_link) {
+ lseek(fda, block->number * blocksize, SEEK_SET);
+ ret = write(fda, block->data, blocksize);
+ if (ret != blocksize)
+ err(1, "cannot write filesystem data");
+ }
+}
+
+static void
+check_parameters(void)
+{
+ int i;
+
+ /* check blocksize */
+ if ((blocksize < NANDFS_MIN_BLOCKSIZE) || (blocksize > MAXBSIZE) ||
+ ((blocksize - 1) & blocksize)) {
+ errx(1, "Bad blocksize (%zu). Must be in range [%u-%u] "
+ "and a power of two.", blocksize, NANDFS_MIN_BLOCKSIZE,
+ MAXBSIZE);
+ }
+
+ /* check blocks per segments */
+ if ((blocks_per_segment < NANDFS_SEG_MIN_BLOCKS) ||
+ ((blocksize - 1) & blocksize))
+ errx(1, "Bad blocks per segment (%lu). Must be greater than "
+ "%u and a power of two.", blocks_per_segment,
+ NANDFS_SEG_MIN_BLOCKS);
+
+ /* check reserved segment percentage */
+ if ((rsv_segment_percent < 1) && (rsv_segment_percent > 99))
+ errx(1, "Bad reserved segment percentage. "
+ "Must in range 1..99.");
+
+ /* check volume label */
+ i = 0;
+ if (volumelabel) {
+ while (isalnum(volumelabel[++i]))
+ ;
+
+ if (volumelabel[i] != '\0') {
+ errx(1, "bad volume label. "
+ "Valid characters are alphanumerics.");
+ }
+
+ if (strlen(volumelabel) >= 16)
+ errx(1, "Bad volume label. Length is longer than %d.",
+ 16);
+ }
+
+ nandfs_time = time(NULL);
+}
+
+static void
+print_parameters(void)
+{
+
+ printf("filesystem parameters:\n");
+ printf("blocksize: %#zx sectorsize: %#zx\n", blocksize, sectorsize);
+ printf("erasesize: %#jx mediasize: %#jx\n", erasesize, mediasize);
+ printf("segment size: %#jx blocks per segment: %#x\n", segsize,
+ (uint32_t)blocks_per_segment);
+}
+
+/*
+ * Exit with error if file system is mounted.
+ */
+static void
+check_mounted(const char *fname, mode_t mode)
+{
+ struct statfs *mp;
+ const char *s1, *s2;
+ size_t len;
+ int n, r;
+
+ if (!(n = getmntinfo(&mp, MNT_NOWAIT)))
+ err(1, "getmntinfo");
+
+ len = strlen(_PATH_DEV);
+ s1 = fname;
+ if (!strncmp(s1, _PATH_DEV, len))
+ s1 += len;
+
+ r = S_ISCHR(mode) && s1 != fname && *s1 == 'r';
+
+ for (; n--; mp++) {
+ s2 = mp->f_mntfromname;
+
+ if (!strncmp(s2, _PATH_DEV, len))
+ s2 += len;
+ if ((r && s2 != mp->f_mntfromname && !strcmp(s1 + 1, s2)) ||
+ !strcmp(s1, s2))
+ errx(1, "%s is mounted on %s", fname, mp->f_mntonname);
+ }
+}
+
+static void
+calculate_geometry(int fd)
+{
+ struct chip_param_io chip_params;
+ char ident[DISK_IDENT_SIZE];
+ char medianame[MAXPATHLEN];
+
+ /* Check storage type */
+ g_get_ident(fd, ident, DISK_IDENT_SIZE);
+ g_get_name(ident, medianame, MAXPATHLEN);
+ debug("device name: %s", medianame);
+
+ is_nand = (strstr(medianame, "gnand") != NULL);
+ debug("is_nand = %d", is_nand);
+
+ sectorsize = g_sectorsize(fd);
+ debug("sectorsize: %#zx", sectorsize);
+
+ /* Get storage size */
+ mediasize = g_mediasize(fd);
+ debug("mediasize: %#jx", mediasize);
+
+ /* Get storage erase unit size */
+ if (!is_nand)
+ erasesize = NANDFS_DEF_ERASESIZE;
+ else if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1)
+ errx(1, "Cannot ioctl(NAND_IO_GET_CHIP_PARAM)");
+ else
+ erasesize = chip_params.page_size * chip_params.pages_per_block;
+
+ debug("erasesize: %#jx", (uintmax_t)erasesize);
+
+ if (blocks_per_segment == 0) {
+ if (erasesize >= NANDFS_MIN_SEGSIZE)
+ blocks_per_segment = erasesize / blocksize;
+ else
+ blocks_per_segment = NANDFS_MIN_SEGSIZE / blocksize;
+ }
+
+ /* Calculate number of segments */
+ segsize = blocksize * blocks_per_segment;
+ nsegments = ((mediasize - NANDFS_NFSAREAS * erasesize) / segsize) - 2;
+ debug("segsize: %#jx", segsize);
+ debug("nsegments: %#jx", nsegments);
+}
+
+static void
+erase_device(int fd)
+{
+ int rest, failed;
+ uint64_t i, nblocks;
+ off_t offset;
+
+ failed = 0;
+ for (i = 0; i < NANDFS_NFSAREAS; i++) {
+ debug("Deleting %jx\n", i * erasesize);
+ if (g_delete(fd, i * erasesize, erasesize)) {
+ printf("cannot delete %jx\n", i * erasesize);
+ fsdata_blocks_state[i] = NANDFS_BLOCK_BAD;
+ failed++;
+ } else
+ fsdata_blocks_state[i] = NANDFS_BLOCK_GOOD;
+ }
+
+ if (failed == NANDFS_NFSAREAS) {
+ printf("%d first blocks not usable. Unable to create "
+ "filesystem.\n", failed);
+ exit(1);
+ }
+
+ for (i = 0; i < nsegments; i++) {
+ offset = NANDFS_NFSAREAS * erasesize + i * segsize;
+ if (g_delete(fd, offset, segsize)) {
+ printf("cannot delete segment %jx (offset %jd)\n",
+ i, offset);
+ bad_segments_count++;
+ bad_segments = realloc(bad_segments,
+ bad_segments_count * sizeof(uint32_t));
+ bad_segments[bad_segments_count - 1] = i;
+ }
+ }
+
+ if (bad_segments_count == nsegments) {
+ printf("no valid segments\n");
+ exit(1);
+ }
+
+ /* Delete remaining blocks at the end of device */
+ rest = mediasize % segsize;
+ nblocks = rest / erasesize;
+ for (i = 0; i < nblocks; i++) {
+ offset = (segsize * nsegments) + (i * erasesize);
+ if (g_delete(fd, offset, erasesize)) {
+ printf("cannot delete space after last segment "
+ "- probably a bad block\n");
+ }
+ }
+}
+
+static void
+erase_initial(int fd)
+{
+ char buf[512];
+ u_int i;
+
+ memset(buf, 0xff, sizeof(buf));
+
+ lseek(fd, 0, SEEK_SET);
+ for (i = 0; i < NANDFS_NFSAREAS * erasesize; i += sizeof(buf))
+ write(fd, buf, sizeof(buf));
+}
+
+static void
+create_nandfs(int fd)
+{
+
+ create_fs();
+
+ write_fs(fd);
+}
+
+static void
+print_summary(void)
+{
+
+ printf("filesystem created succesfully\n");
+ printf("total segments: %#jx valid segments: %#jx\n", nsegments,
+ nsegments - bad_segments_count);
+ printf("total space: %ju MB free: %ju MB\n",
+ (nsegments *
+ blocks_per_segment * blocksize) / (1024 * 1024),
+ ((nsegments - bad_segments_count) *
+ blocks_per_segment * blocksize) / (1024 * 1024));
+}
+
+int
+main(int argc, char *argv[])
+{
+ struct stat sb;
+ char buf[MAXPATHLEN];
+ const char opts[] = "b:B:L:m:";
+ const char *fname;
+ int ch, fd;
+
+ while ((ch = getopt(argc, argv, opts)) != -1) {
+ switch (ch) {
+ case 'b':
+ blocksize = strtol(optarg, (char **)NULL, 10);
+ if (blocksize == 0)
+ usage();
+ break;
+ case 'B':
+ blocks_per_segment = strtol(optarg, (char **)NULL, 10);
+ if (blocks_per_segment == 0)
+ usage();
+ break;
+ case 'L':
+ volumelabel = optarg;
+ break;
+ case 'm':
+ rsv_segment_percent = strtol(optarg, (char **)NULL, 10);
+ if (rsv_segment_percent == 0)
+ usage();
+ break;
+ default:
+ usage();
+ }
+ }
+
+ argc -= optind;
+ argv += optind;
+ if (argc < 1 || argc > 2)
+ usage();
+
+ /* construct proper device path */
+ fname = *argv++;
+ if (!strchr(fname, '/')) {
+ snprintf(buf, sizeof(buf), "%s%s", _PATH_DEV, fname);
+ if (!(fname = strdup(buf)))
+ err(1, NULL);
+ }
+
+ fd = g_open(fname, 1);
+ if (fd == -1)
+ err(1, "Cannot open %s", fname);
+
+ if (fstat(fd, &sb) == -1)
+ err(1, "Cannot stat %s", fname);
+ if (!S_ISCHR(sb.st_mode))
+ warnx("%s is not a character device", fname);
+
+ check_mounted(fname, sb.st_mode);
+
+ calculate_geometry(fd);
+
+ check_parameters();
+
+ print_parameters();
+
+ if (is_nand)
+ erase_device(fd);
+ else
+ erase_initial(fd);
+
+ create_nandfs(fd);
+
+ print_summary();
+
+ g_close(fd);
+
+ return (0);
+}
+
+
diff --git a/sbin/restore/restore.8 b/sbin/restore/restore.8
index 94ca8784f43a..d17496cce5e6 100644
--- a/sbin/restore/restore.8
+++ b/sbin/restore/restore.8
@@ -68,16 +68,6 @@
.Op Fl f Ar file | Fl P Ar pipecommand
.Op Fl s Ar fileno
.Op Ar
-.Pp
-.Nm rrestore
-is an alternate name for
-.Nm .
-.Pp
-.in \" XXX
-(The
-.Bx 4.3
-option syntax is implemented for backward compatibility, but
-is not documented here.)
.Sh DESCRIPTION
The
.Nm
@@ -104,6 +94,14 @@ flag is specified (see below),
the appearance of a directory name refers to
the files and (recursively) subdirectories of that directory.
.Pp
+.Nm
+may also be invoked as
+.Nm rrestore .
+The
+.Bx 4.3
+option syntax is implemented for backward compatibility, but
+is not documented here.
+.Pp
Exactly one of the following flags is required:
.Bl -tag -width Ds
.It Fl i
diff --git a/sbin/restore/utilities.c b/sbin/restore/utilities.c
index 6b984e409749..89c2b09298c9 100644
--- a/sbin/restore/utilities.c
+++ b/sbin/restore/utilities.c
@@ -411,6 +411,7 @@ panic(const char *fmt, ...)
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
+ va_end(ap);
if (yflag)
return;
if (reply("abort") == GOOD) {
diff --git a/sbin/shutdown/shutdown.c b/sbin/shutdown/shutdown.c
index 6e662a8b6f44..05d73a97a7ac 100644
--- a/sbin/shutdown/shutdown.c
+++ b/sbin/shutdown/shutdown.c
@@ -356,7 +356,6 @@ perform_shutdown(void)
syslog(LOG_NOTICE, "%s by %s: %s",
doreboot ? "reboot" : dohalt ? "halt" : dopower ? "power-down" :
"shutdown", whom, mbuf);
- (void)sleep(2);
(void)printf("\r\nSystem shutdown time has arrived\007\007\r\n");
if (killflg) {
diff --git a/share/Makefile b/share/Makefile
index 5ccf165930c3..e39da7f2792e 100644
--- a/share/Makefile
+++ b/share/Makefile
@@ -8,6 +8,7 @@
SUBDIR= ${_colldef} \
${_dict} \
${_doc} \
+ dtrace \
${_examples} \
${_i18n} \
${_man} \
diff --git a/share/dtrace/Makefile b/share/dtrace/Makefile
new file mode 100644
index 000000000000..71f1e4eeeec9
--- /dev/null
+++ b/share/dtrace/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+#
+# Hand installing our scripts and optionally (based on MK_CDDL) installing
+# the DTraceToolkit.
+#
+
+.include <bsd.own.mk>
+
+SUBDIR= ${_toolkit}
+
+.if ${MK_CDDL} != "no"
+_toolkit= toolkit
+.endif
+
+SCRIPTS= nfsclienttime
+
+SCRIPTSDIR= ${SHAREDIR}/dtrace/
+
+NO_OBJ=
+
+.include <bsd.prog.mk>
diff --git a/share/dtrace/README b/share/dtrace/README
new file mode 100644
index 000000000000..e446ceecf076
--- /dev/null
+++ b/share/dtrace/README
@@ -0,0 +1,11 @@
+$FreeBSD$
+
+This directory contains scripts for use with the DTrace system. The
+toolkit/ directory contains the latest vendor import of Brendan
+Gregg's DTraceToolkit while all the other files and directories
+contain code generated by the FreeBSD Project for use with DTrace on
+FreeBSD.
+
+NOTE: Do not add new scripts to the DTraceToolkit contained in this
+directory. New DTraceToolkit scripts should be send to the maintainer
+of the toolkit and then brought back into FreeBSD via future vendor imports.
diff --git a/usr.bin/yacc/yyfix.sh b/share/dtrace/nfsclienttime
index a8110c96745e..335f067b3852 100644..100755
--- a/usr.bin/yacc/yyfix.sh
+++ b/share/dtrace/nfsclienttime
@@ -1,8 +1,11 @@
-#!/bin/sh -
+#!/bin/sh
#
-# Copyright (c) 1990 The Regents of the University of California.
+# Copyright (c) 2012 Robert N. M. Watson
# All rights reserved.
#
+# This software was developed at the University of Cambridge Computer
+# Laboratory with support from a grant from Google, Inc.
+#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
@@ -11,14 +14,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.
-# 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
+# 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 REGENTS OR CONTRIBUTORS BE LIABLE
+# 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)
@@ -29,46 +29,46 @@
#
# $FreeBSD$
#
-# @(#)yyfix.sh 5.2 (Berkeley) 5/12/90
+# This script measures all time spent waiting on RPC replies for each
+# system call, and then generates a histogram of those times sorted by
+# system call name.
+#
+# Currently only supports NFSv3
+#
+# Usage: nfsclienttime
#
-OLDYACC="yyexca yyact yypact yypgo yyr1 yyr2 yychk yydef"
-NEWYACC="yylhs yylen yydefred yydgoto yysindex yyrindex yygindex \
- yytable yycheck"
+# Press Ctrl-C to exit and display statistics.
+#
+
+/usr/sbin/dtrace -n '
+#pragma D option quiet
+
+dtrace:::BEGIN
+{
+ printf("Collecting data...press Ctrl-C to exit.\n");
+}
+
+syscall:::entry
+{
+
+ self->count = 0;
+}
+
+nfsclient:nfs3::start
+{
+
+ self->timestamp = timestamp;
+}
-if [ $# -eq 0 ]; then
- echo "usage: $0 file [tables]" >&2
- exit 1
-fi
+nfsclient:nfs3::done
+{
-file=$1
->$file
-shift
+ self->count += (timestamp - self->timestamp);
+}
-if [ $# -eq 0 ] ; then
- if grep yylhs y.tab.c > /dev/null ; then
- if grep yyname y.tab.c > /dev/null ; then
- NEWYACC="$NEWYACC yyname"
- fi
- if grep yyrule y.tab.c > /dev/null ; then
- NEWYACC="$NEWYACC yyrule"
- fi
- set $NEWYACC
- else
- set $OLDYACC
- fi
-fi
+syscall:::return
+/self->count != 0/ {
-for i
-do
-ed - y.tab.c << END
-/^\(.*\)$i[ ]*\[]/s//extern \1 $i[];\\
-\1 $i []/
-.ka
-/}/kb
-'br $file
-'a,.w $file
-'a,.d
-w
-q
-END
-done
+ @syscalls[probefunc] = quantize(self->count);
+}
+'
diff --git a/share/dtrace/toolkit/Makefile b/share/dtrace/toolkit/Makefile
new file mode 100644
index 000000000000..0eb7ff21bc5c
--- /dev/null
+++ b/share/dtrace/toolkit/Makefile
@@ -0,0 +1,17 @@
+#$FreeBSD$
+#
+# Install scripts from the DTraceToolkit
+#
+DTRACETOOLKIT= ../../../cddl/contrib/dtracetoolkit
+
+SCRIPTS= ${DTRACETOOLKIT}/execsnoop \
+ ${DTRACETOOLKIT}/hotuser \
+ ${DTRACETOOLKIT}/hotkernel \
+ ${DTRACETOOLKIT}/opensnoop \
+ ${DTRACETOOLKIT}/procsystime \
+
+SCRIPTSDIR= ${SHAREDIR}/dtrace/toolkit
+
+NO_OBJ=
+
+.include <bsd.prog.mk>
diff --git a/share/examples/csh/dot.cshrc b/share/examples/csh/dot.cshrc
index 17951d4c4197..175bfd20e414 100644
--- a/share/examples/csh/dot.cshrc
+++ b/share/examples/csh/dot.cshrc
@@ -5,7 +5,7 @@
# Sets SSH_AUTH_SOCK to the user's ssh-agent socket path if running
if (${?SSH_AUTH_SOCK} != "1") then
- setenv SSH_AUTH_SOCK `sockstat | grep "${USER}" | cut -d ' ' -f 6`
+ setenv SSH_AUTH_SOCK `sockstat | grep "^${USER} " | awk '/ssh-agent/ { print $6 }'`
endif
# Change only root's prompt
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index dffe304045f2..f5567684e593 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -250,6 +250,8 @@ MAN= aac.4 \
mwlfw.4 \
mxge.4 \
my.4 \
+ nand.4 \
+ nandsim.4 \
natm.4 \
natmip.4 \
ncr.4 \
@@ -520,6 +522,7 @@ MAN= aac.4 \
${_vxge.4} \
watchdog.4 \
wb.4 \
+ ${_wbwd.4} \
wi.4 \
witness.4 \
wlan.4 \
@@ -733,6 +736,7 @@ _spkr.4= spkr.4
_tpm.4= tpm.4
_urtw.4= urtw.4
_viawd.4= viawd.4
+_wbwd.4= wbwd.4
_wpi.4= wpi.4
_xen.4= xen.4
_xnb.4= xnb.4
diff --git a/share/man/man4/nand.4 b/share/man/man4/nand.4
new file mode 100644
index 000000000000..d23e292fac74
--- /dev/null
+++ b/share/man/man4/nand.4
@@ -0,0 +1,140 @@
+.\"
+.\" Copyright (c) 2012 The FreeBSD Foundation
+.\" All rights reserved.
+.\"
+.\" This documentation was written by Semihalf 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.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd March 8, 2012
+.Dt NAND 4
+.Os
+.Sh NAME
+.Nm nand
+.Nd NAND Flash framework
+.Sh SYNOPSIS
+.Cd "device nand"
+.Sh DESCRIPTION
+The
+.Fx
+.Nm
+framework consists of a set of interfaces that aim to provide an extensible,
+object oriented environement for NAND controllers and NAND Flash memory chips
+from various hardware vendors, and to allow for uniform and flexible
+management of the NAND devices. It comprises of the following major
+components:
+.Bl -bullet
+.It
+NAND Flash controller (NFC) interface.
+.Pp
+Defines methods which allow to send commands as well as send/receive data
+between the controller and a NAND chip. Back-end drivers for specific NAND
+controllers plug into this interface and implement low-level routines for a
+given NAND controller.
+.Pp
+This layer implements basic functionality of a NAND Flash controller. It
+allows to send command and address to chip, drive CS (chip select line), as
+well as read/write to the selected NAND chip. This layer is independent of
+NAND chip devices actually connected to the controller.
+.It
+NAND chip interface.
+.Pp
+Provides basic operations like read page, program page, erase block. Currently
+three generic classes of drivers are available, which provide support for the
+following chips:
+.Bl -bullet
+.It
+large page
+.It
+small page
+.It
+ONFI-compliant
+.El
+.Pp
+This layer implements basic operations to be performed on a NAND chip, like
+read, program, erase, get status etc. Since these operations use specific
+commands (depending on the vendor), each chip has potentially its own
+implementation of the commands set.
+.Pp
+The framework is extensible so it is also possible to create a custom command
+set for a non standard chip support.
+.It
+NANDbus.
+.Pp
+This layer is responsible for enumerating NAND chips in the system and
+establishing the hierarchy between chips and their supervising controllers.
+.Pp
+Its main purpose is detecting type of NAND chips connected to a given chip
+select (CS line). It also allows manages locking access to the NAND
+controller. NANDbus passes requests from an active chip to the chip
+controller.
+.It
+NAND character / GEOM device.
+.Pp
+For each NAND chip found in a system a character and GEOM devices are created
+which allows to read / write directly to a device, as well as perform other
+specific operations (like via ioctl).
+.Pp
+There are two GEOM devices created for each NAND chip:
+.Bl -bullet
+.It
+raw device
+.It
+normal device
+.El
+.Pp
+Raw device allows to bypass ECC checking when reading/writing to it, while
+normal device always uses ECC algorithm to validate the read data.
+.Pp
+NAND character devices will be created for each NAND chip detected while
+probing the NAND controller.
+.El
+.Sh SEE ALSO
+.Xr libnandfs 3 ,
+.Xr gnand 4 ,
+.Xr nandsim 4 ,
+.Xr nandfs 5 ,
+.Xr makefs 8 ,
+.Xr mount_nandfs 8 ,
+.Xr nandfs 8 ,
+.Xr nandsim 8 ,
+.Xr nandtool 8 ,
+.Xr newfs_nandfs 8 ,
+.Xr umount_nandfs 8
+.Sh STANDARDS
+Open NAND Flash Interface Working Group
+.Pq Vt ONFI .
+.Sh HISTORY
+The
+.Nm
+framework support first appeared in
+.Fx 10.0 .
+.Sh AUTHOR
+The
+.Nm
+framework was designed and developed by
+.An Grzegorz Bernacki .
+This manual page was written by
+.An Rafal Jaworowski .
diff --git a/share/man/man4/nandsim.4 b/share/man/man4/nandsim.4
new file mode 100644
index 000000000000..ebb54527f502
--- /dev/null
+++ b/share/man/man4/nandsim.4
@@ -0,0 +1,92 @@
+.\"
+.\" Copyright (c) 2012 The FreeBSD Foundation
+.\" All rights reserved.
+.\"
+.\" This documentation was written by Semihalf 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.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd March 8, 2012
+.Dt NANDSIM 4
+.Os
+.Sh NAME
+.Nm nandsim
+.Nd NAND Flash simulator driver
+.Sh SYNOPSIS
+.Cd "device nand"
+.Cd "device nandsim"
+.Cd "options ALQ"
+.Sh DESCRIPTION
+The
+.Nm
+is part of the
+.Fx
+NAND framework
+.Xr nand 4
+and can be characterized with the following highlights:
+.Bl -bullet
+.It
+plugs into the
+.Xr nand 4
+framework APIs as if it were a hardware controller (hanging on the nexus bus)
+with real NAND chips connected to it
+.It
+physically part of the kernel code (either statically linked into the kernel
+image or built as a module)
+.It
+controlled with a user space program
+.Xr nandsim 8
+.El
+.Pp
+From the user perspective, the
+.Nm
+allows for imitating ONFI-compliant NAND Flash devices as if they were
+attached to the system via a virtual controller.
+.Pp
+Some
+.Nm
+features rely on the ability to log contents to a file, which is achieved
+through the
+.Xr alq 9
+facility.
+.Sh SEE ALSO
+.Xr nand 4 ,
+.Xr nandsim.conf 5 ,
+.Xr nandsim 8
+.Sh STANDARDS
+Open NAND Flash Interface Working Group
+.Pq Vt ONFI .
+.Sh HISTORY
+The
+.Nm
+support first appeared in
+.Fx 10.0 .
+.Sh AUTHOR
+The
+.Nm
+kernel driver was developed by
+.An Grzegorz Bernacki .
+This manual page was written by
+.An Rafal Jaworowski .
diff --git a/share/man/man4/siftr.4 b/share/man/man4/siftr.4
index 625c6578ded7..ab92f77b94e4 100644
--- a/share/man/man4/siftr.4
+++ b/share/man/man4/siftr.4
@@ -94,7 +94,7 @@ utilises the
.Xr sysctl 8
interface to export its configuration variables to user-space.
The following variables are available:
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va net.inet.siftr.enabled
controls whether the module performs its
measurements or not.
@@ -107,7 +107,7 @@ packet filtering hooks are only inserted when
.Va net.inet.siftr.enabled
is set to 1.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va net.inet.siftr.ppl
controls how many inbound/outbound packets for a given TCP connection will cause
a log message to be generated for the connection.
@@ -116,13 +116,13 @@ every packet of every TCP connection.
The value can be set to any integer in the range [1,2^32], and can be changed at
any time, even while the module is enabled.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va net.inet.siftr.logfile
controls the path to the file that the module writes its log messages to.
By default, the file /var/log/siftr.log is used.
The path can be changed at any time, even while the module is enabled.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va net.inet.siftr.genhashes
controls whether a hash is generated for each TCP packet seen by
.Nm .
@@ -153,36 +153,36 @@ sysname=FreeBSD sysver=604000 ipmode=4
.Ed
.Pp
Field descriptions are as follows:
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va enable_time_secs
time at which the module was enabled, in seconds since the UNIX epoch.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va enable_time_usecs
time at which the module was enabled, in microseconds since enable_time_secs.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va siftrver
version of
.Nm .
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va hz
tick rate of the kernel in ticks per second.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va tcp_rtt_scale
smoothed RTT estimate scaling factor.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va sysname
operating system name.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va sysver
operating system version.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va ipmode
IP mode as defined at compile time.
An ipmode of "4" means IPv6 is not supported and IP addresses are logged in
@@ -205,7 +205,7 @@ o,0xbec491a5,1238556193.463551,172.16.7.28,22,172.16.2.5,55931, \\
.Ed
.Pp
Field descriptions are as follows:
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 1
Direction of packet that triggered the log message.
Either
@@ -214,77 +214,77 @@ for in, or
.Qq o
for out.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 2
Hash of the packet that triggered the log message.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 3
Time at which the packet that triggered the log message was processed by
the
.Xr pfil 9
hook function, in seconds and microseconds since the UNIX epoch.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 4
The IPv4 or IPv6 address of the local host, in dotted quad (IPv4 packet)
or colon-separated hex (IPv6 packet) notation.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 5
The TCP port that the local host is communicating via.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 6
The IPv4 or IPv6 address of the foreign host, in dotted quad (IPv4 packet)
or colon-separated hex (IPv6 packet) notation.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 7
The TCP port that the foreign host is communicating via.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 8
The slow start threshold for the flow, in bytes.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 9
The current congestion window for the flow, in bytes.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 10
The current bandwidth-controlled window for the flow, in bytes.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 11
The current sending window for the flow, in bytes.
The post scaled value is reported, except during the initial handshake (first
few packets), during which time the unscaled value is reported.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 12
The current receive window for the flow, in bytes.
The post scaled value is always reported.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 13
The current window scaling factor for the sending window.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 14
The current window scaling factor for the receiving window.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 15
The current state of the TCP finite state machine, as defined
in
.Aq Pa netinet/tcp_fsm.h .
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 16
The maximum segment size for the flow, in bytes.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 17
The current smoothed RTT estimate for the flow, in units of TCP_RTT_SCALE * HZ,
where TCP_RTT_SCALE is a define found in tcp_var.h, and HZ is the kernel's tick
@@ -292,46 +292,46 @@ timer.
Divide by TCP_RTT_SCALE * HZ to get the RTT in secs. TCP_RTT_SCALE and HZ are
reported in the enable log message.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 18
SACK enabled indicator. 1 if SACK enabled, 0 otherwise.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 19
The current state of the TCP flags for the flow.
See
.Aq Pa netinet/tcp_var.h
for information about the various flags.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 20
The current retransmission timeout length for the flow, in units of HZ, where HZ
is the kernel's tick timer.
Divide by HZ to get the timeout length in seconds. HZ is reported in the
enable log message.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 21
The current size of the socket send buffer in bytes.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 22
The current number of bytes in the socket send buffer.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 23
The current size of the socket receive buffer in bytes.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 24
The current number of bytes in the socket receive buffer.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 25
The current number of unacknowledged bytes in-flight.
Bytes acknowledged via SACK are not excluded from this count.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va 26
The current number of segments in the reassembly queue.
.El
@@ -353,82 +353,82 @@ flow_list=172.16.7.28;22-172.16.2.5;55931,
.Ed
.Pp
Field descriptions are as follows:
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va disable_time_secs
Time at which the module was disabled, in seconds since the UNIX epoch.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va disable_time_usecs
Time at which the module was disabled, in microseconds since disable_time_secs.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va num_inbound_tcp_pkts
Number of TCP packets that traversed up the network stack.
This only includes inbound TCP packets during the periods when
.Nm
was enabled.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va num_outbound_tcp_pkts
Number of TCP packets that traversed down the network stack.
This only includes outbound TCP packets during the periods when
.Nm
was enabled.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va total_tcp_pkts
The summation of num_inbound_tcp_pkts and num_outbound_tcp_pkts.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va num_inbound_skipped_pkts_malloc
Number of inbound packets that were not processed because of failed malloc() calls.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va num_outbound_skipped_pkts_malloc
Number of outbound packets that were not processed because of failed malloc() calls.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va num_inbound_skipped_pkts_mtx
Number of inbound packets that were not processed because of failure to add the
packet to the packet processing queue.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va num_outbound_skipped_pkts_mtx
Number of outbound packets that were not processed because of failure to add the
packet to the packet processing queue.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va num_inbound_skipped_pkts_tcb
Number of inbound packets that were not processed because of failure to find the
TCP control block associated with the packet.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va num_outbound_skipped_pkts_tcb
Number of outbound packets that were not processed because of failure to find
the TCP control block associated with the packet.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va num_inbound_skipped_pkts_icb
Number of inbound packets that were not processed because of failure to find the
IP control block associated with the packet.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va num_outbound_skipped_pkts_icb
Number of outbound packets that were not processed because of failure to find
the IP control block associated with the packet.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va total_skipped_tcp_pkts
The summation of all skipped packet counters.
.El
-.Bl -tag -offset indent
+.Bl -tag -offset indent -width Va
.It Va flow_list
A CSV list of TCP flows that triggered data log messages to be generated since
the module was loaded.
Each flow entry in the CSV list is
formatted as
.Qq local_ip;local_port-foreign_ip;foreign_port .
-If there are no entries in the list (i.e. no data log messages were generated),
+If there are no entries in the list (i.e., no data log messages were generated),
the value will be blank.
If there is at least one entry in the list, a trailing comma will always be
present.
@@ -501,10 +501,10 @@ the system to trigger a dump of the state of the TCP control block for that
flow.
With the PPL set to 1, we are in effect sampling each TCP flow's control block
state as frequently as flow packets enter/leave the system.
-For example, setting PPL to 2 halves the sampling rate i.e. every second flow
+For example, setting PPL to 2 halves the sampling rate i.e., every second flow
packet (inbound OR outbound) causes a dump of the control block state.
.Pp
-The distinction between interrogating individual packets vs interrogating the
+The distinction between interrogating individual packets versus interrogating the
control block is important, because
.Nm
does not remove the need for packet capturing tools like
@@ -546,7 +546,7 @@ If one thread holds the lock, the other must wait before it can obtain it.
This does introduce some additional bounded delay into the kernel's packet
processing code path.
.Pp
-In some cases (e.g. low memory, connection termination), TCP packets that enter
+In some cases (e.g., low memory, connection termination), TCP packets that enter
the
.Nm
.Xr pfil 9
diff --git a/share/man/man4/vlan.4 b/share/man/man4/vlan.4
index 4ef65cbf13f0..dd36ff7ff142 100644
--- a/share/man/man4/vlan.4
+++ b/share/man/man4/vlan.4
@@ -79,16 +79,16 @@ to a properly configured switch port.
The VLAN tag should match one of those set up in the switched
network.
.Pp
-Initially
.Nm
-assumes the same minimum length for tagged and untagged frames.
-This mode is selected by the
+initially assumes the same minimum length for tagged and untagged frames.
+This mode is selected by setting the
.Xr sysctl 8
variable
.Va net.link.vlan.soft_pad
-set to 0 (default).
-However, there are network devices that fail to adjust frame length,
-should it fall below the allowed minimum due to untagging.
+to 0
+.Pq default .
+However, there are network devices that fail to adjust frame length
+when it falls below the allowed minimum due to untagging.
Such devices should be able to interoperate with
.Nm
after changing the value of
@@ -97,7 +97,7 @@ to 1.
In the latter mode,
.Nm
will pad short frames before tagging them
-so that their length stays not less than the minimum value
+so that their length is not less than the minimum value
after untagging by the non-compliant devices.
.Sh HARDWARE
The
@@ -111,7 +111,7 @@ receive and transmit long frames (up to 1522 bytes including an Ethernet
header and FCS).
The capabilities may be user-controlled by the respective parameters to
.Xr ifconfig 8 ,
-.Cm vlanhwtag
+.Cm vlanhwtag ,
and
.Cm vlanmtu .
However, a physical interface is not obliged to react to them:
@@ -119,8 +119,8 @@ It may have either capability enabled permanently without
a way to turn it off.
The whole issue is very specific to a particular device and its driver.
.Pp
-By now, the list of physical interfaces able of full VLAN processing
-in the hardware is limited to the following devices:
+At present, physical interfaces capable of full VLAN processing
+in the hardware is limited to these devices:
.Xr ae 4 ,
.Xr age 4 ,
.Xr alc 4 ,
@@ -146,11 +146,10 @@ in the hardware is limited to the following devices:
and
.Xr vge 4 .
.Pp
-The rest of the Ethernet interfaces can run
-VLANs using software emulation in the
+Other Ethernet interfaces can run VLANs using software emulation in the
.Nm
driver.
-However, some of them lack the capability
+However, some lack the capability
of transmitting and receiving long frames.
Assigning such an interface as the parent to
.Nm
@@ -163,9 +162,8 @@ connectivity problems due to massive, inadequate
.Xr icmp 4
filtering that breaks the Path MTU Discovery mechanism.
.Pp
-The following interfaces support long frames for
-.Nm
-natively:
+These interfaces natively support long frames for
+.Nm :
.Xr axe 4 ,
.Xr bfe 4 ,
.Xr cas 4 ,
diff --git a/share/man/man5/Makefile b/share/man/man5/Makefile
index b05c1eb924da..c7a3c592d04b 100644
--- a/share/man/man5/Makefile
+++ b/share/man/man5/Makefile
@@ -85,6 +85,10 @@ MLINKS+=resolver.5 resolv.conf.5
MAN+= hesiod.conf.5
.endif
+.if ${MK_NAND} != "no"
+MAN+= nandfs.5
+.endif
+
.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
_boot.config.5= boot.config.5
.endif
diff --git a/share/man/man5/devfs.conf.5 b/share/man/man5/devfs.conf.5
index 9d837263f1a4..f459696bed02 100644
--- a/share/man/man5/devfs.conf.5
+++ b/share/man/man5/devfs.conf.5
@@ -91,7 +91,7 @@ as explained in
.Xr chmod 1 .
.El
.Sh FILES
-.Bl -tag -compact
+.Bl -tag -compact -width Pa
.It Pa /etc/devfs.conf
.It Pa /usr/share/examples/etc/devfs.conf
.El
diff --git a/share/man/man5/devfs.rules.5 b/share/man/man5/devfs.rules.5
index 8a7b3d665ab2..603189e2e01d 100644
--- a/share/man/man5/devfs.rules.5
+++ b/share/man/man5/devfs.rules.5
@@ -82,7 +82,7 @@ file:
devfs_system_ruleset="localrules"
.Ed
.Sh FILES
-.Bl -tag -compact
+.Bl -tag -compact -width Pa
.It Pa /etc/defaults/devfs.rules
Default
.Nm
diff --git a/share/man/man5/nandfs.5 b/share/man/man5/nandfs.5
new file mode 100644
index 000000000000..2ef3259f591c
--- /dev/null
+++ b/share/man/man5/nandfs.5
@@ -0,0 +1,128 @@
+.\"
+.\" Copyright (c) 2010 Semihalf
+.\" 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 Nov 11, 2010
+.Dt NANDFS 5
+.Os
+.Sh NAME
+.Nm nandfs
+.Nd NAND Flash file system
+.Sh SYNOPSIS
+To compile support for the
+.Nm ,
+place the following in your kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "options NANDFS"
+.Ed
+.Pp
+Even though the NAND FS can be used with any storage media, it has been
+optimized and designed towards NAND Flash devices, so typically the following
+driver is used:
+.Bd -ragged -offset indent
+.Cd "device nand"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver enables
+.Fx
+with support for NAND-oriented file system.
+.Pp
+It is a log-structured style file system with the following major features and
+characteristics:
+.Bl -bullet
+.It
+Hard links, symbolic links support
+.It
+Block journaling
+.It
+Copy-On-Write
+.It
+Snapshots (continuous, taken automatically, simultaneously mountable)
+.It
+Quick crash recovery at mount time
+.It
+64-bit data structures; supports many files, large files and volumes
+.It
+POSIX file permissions
+.It
+Checksum / ECC
+.El
+.Sh EXAMPLES
+The most common usage is mounting the file system:
+.Pp
+.Dl "mount -t nandfs /dev/<gnandN> /mnt"
+.Pp
+or:
+.Dl "mount_nandfs /dev/<gnandN> /mnt"
+.Pp
+where
+.Ar gnandN
+is the GEOM device representing a Flash partition (slice) containing the
+.Nm
+structure, and
+.Pa /mnt
+is a mount point.
+.Pp
+It is possible to define an entry in
+.Pa /etc/fstab
+for the
+.Nm :
+.Bd -literal
+/dev/gnand0 /flash nandfs rw 0 0
+.Ed
+.Pp
+This will mount a
+.Nm
+partition at the specified mount point during system boot.
+.Sh SEE ALSO
+.Xr gnand 4 ,
+.Xr nand 4 ,
+.Xr mount_nandfs 8 ,
+.Xr nandfs 8 ,
+.Xr nandsim 8 ,
+.Xr nandtool 8 ,
+.Xr umount_nandfs 8
+.Sh HISTORY
+The NAND FS concepts are based on NILFS principles and initial implementation
+was derived from early NILFS NetBSD code (read only). Since then the NAND FS
+code diverged significantly and is by no means compatible with NILFS.
+.Pp
+The NAND Flash file system first appeared in
+.Fx 10.0 .
+.Sh AUTHOR
+The NAND FS was written by
+.An Grzegorz Bernacki with the help of
+.An Mateusz Guzik ,
+based on the NetBSD code created by
+.An Reinoud Zandijk .
+Additional help and support by
+.An Lukasz Plachno ,
+.An Jan Sieka and
+.An Lukasz Wojcik .
+This manual page was written by
+.An Rafal Jaworowski .
diff --git a/share/man/man5/periodic.conf.5 b/share/man/man5/periodic.conf.5
index 4ab009c18a98..d33555c3e528 100644
--- a/share/man/man5/periodic.conf.5
+++ b/share/man/man5/periodic.conf.5
@@ -504,6 +504,12 @@ Set to
.Dq Li YES
to compare the modes and modification times of setuid executables with
the previous day's values.
+.It Va daily_status_security_chkportsum_enable
+.Pq Vt bool
+Set to
+.Dq Li YES
+to verify checksums of all installed packages against the known checksums in
+.Pa /var/db/pkg .
.It Va daily_status_security_neggrpperm_enable
.Pq Vt bool
Set to
diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5
index 29d7abfc6087..d40e4cfeb0b3 100644
--- a/share/man/man5/src.conf.5
+++ b/share/man/man5/src.conf.5
@@ -1,7 +1,7 @@
.\" DO NOT EDIT-- this file is automatically generated.
-.\" from FreeBSD: head/tools/build/options/makeman 221733 2011-05-10 13:01:11Z ru
+.\" from FreeBSD: head/tools/build/options/makeman 236279 2012-05-30 02:37:20Z gjb
.\" $FreeBSD$
-.Dd May 12, 2012
+.Dd May 29, 2012
.Dt SRC.CONF 5
.Os
.Sh NAME
@@ -207,7 +207,7 @@ and
Set to enable the http statistics interface for named.
This requires ports/textproc/libxml2 to be installed in /usr/local.
.It Va WITHOUT_BINUTILS
-.\" from FreeBSD: head/tools/build/options/WITHOUT_BINUTILS 222090 2011-05-19 05:13:25Z imp
+.\" from FreeBSD: head/tools/build/options/WITHOUT_BINUTILS 235342 2012-05-12 16:12:36Z gjb
Set to not install binutils (as, c++-filt, gconv, gnu-ar, gnu-randlib,
ld, nm, objcopy, objdump, readelf, size and strip).
.Bf -symbolic
@@ -292,7 +292,7 @@ amd64/amd64, i386/i386, pc98/i386, powerpc/powerpc and powerpc/powerpc64.
.\" from FreeBSD: head/tools/build/options/WITH_CLANG_EXTRAS 231057 2012-02-05 23:56:22Z dim
Set to build additional clang and llvm tools, such as bugpoint.
.It Va WITH_CLANG_IS_CC
-.\" from FreeBSD: head/tools/build/options/WITH_CLANG_IS_CC 232322 2012-02-29 22:58:51Z dim
+.\" from FreeBSD: head/tools/build/options/WITH_CLANG_IS_CC 235342 2012-05-12 16:12:36Z gjb
Set to install the Clang C/C++ compiler as
.Pa /usr/bin/cc ,
.Pa /usr/bin/c++
@@ -368,6 +368,11 @@ Set this if you do not want to link
and
.Pa /sbin
dynamically.
+.It Va WITHOUT_ED_CRYPTO
+.\" from FreeBSD: head/tools/build/options/WITHOUT_ED_CRYPTO 235660 2012-05-19 20:05:27Z marcel
+Set to build
+.Xr ed 1
+without support for encryption/decryption.
.It Va WITHOUT_EXAMPLES
.\" from FreeBSD: head/tools/build/options/WITHOUT_EXAMPLES 156938 2006-03-21 09:06:24Z ru
Set to avoid installing examples to
@@ -667,6 +672,11 @@ and related programs.
Set to not build
.Xr lpr 1
and related programs.
+.It Va WITHOUT_LS_COLORS
+.\" from FreeBSD: head/tools/build/options/WITHOUT_LS_COLORS 235660 2012-05-19 20:05:27Z marcel
+Set to build
+.Xr ls 1
+without support for colors to distinguish file types.
.It Va WITHOUT_MAIL
.\" from FreeBSD: head/tools/build/options/WITHOUT_MAIL 183242 2008-09-21 22:02:26Z sam
Set to not build any mail support (MUA or MTA).
@@ -709,6 +719,9 @@ Set to not build utilities for manual pages,
.Xr whatis 1 ,
.Xr manctl 8 ,
and related support files.
+.It Va WITH_NAND
+.\" from FreeBSD: head/tools/build/options/WITH_NAND 235537 2012-05-17 10:11:18Z gber
+Set to build the NAND Flash components.
.It Va WITHOUT_NCP
.\" from FreeBSD: head/tools/build/options/WITHOUT_NCP 156932 2006-03-21 07:50:50Z ru
Set to not build programs, libraries, and kernel modules
@@ -893,7 +906,7 @@ Set to not build the
.Bx 4.4
legacy docs.
.It Va WITH_SHARED_TOOLCHAIN
-.\" from FreeBSD: head/tools/build/options/WITH_SHARED_TOOLCHAIN 234782 2012-04-29 09:32:44Z kib
+.\" from FreeBSD: head/tools/build/options/WITH_SHARED_TOOLCHAIN 235342 2012-05-12 16:12:36Z gjb
Set to build the toolchain binaries shared.
The set includes
.Xr cc 1 ,
@@ -1015,11 +1028,11 @@ protocols (usable only via 802.1X).
.\" from FreeBSD: head/tools/build/options/WITHOUT_ZFS 168409 2007-04-06 02:13:30Z pjd
Set to not build ZFS file system.
.It Va WITHOUT_ZONEINFO
-.\" from FreeBSD: head/tools/build/options/WITHOUT_ZONEINFO 171994 2007-08-27 20:01:08Z remko
+.\" from FreeBSD: head/tools/build/options/WITHOUT_ZONEINFO 235342 2012-05-12 16:12:36Z gjb
Set to not build the timezone database.
.El
.Sh FILES
-.Bl -tag -compact
+.Bl -tag -compact -width Pa
.It Pa /etc/src.conf
.It Pa /usr/share/mk/bsd.own.mk
.El
diff --git a/share/man/man7/c99.7 b/share/man/man7/c99.7
index 8c7d5e270d9e..e12d000476f3 100644
--- a/share/man/man7/c99.7
+++ b/share/man/man7/c99.7
@@ -103,7 +103,7 @@ The ISO C standard was later extended with an amendment as
ISO/IEC 9899 AM1 in 1995.
This contained, for example, the wide-character support in wchar.h and
wctype.h.
-Two corregenda were also published: Technical Corrigendum 1 as
+Two corrigenda were also published: Technical Corrigendum 1 as
ISO/IEC 9899 TCOR1 in 1995 and Technical Corrigendum 2 as ISO/IEC 9899 TCOR1
in 1996.
The continuous development and growth made it necessary to work out a new
diff --git a/share/man/man7/release.7 b/share/man/man7/release.7
index a725fc627e44..2a794c8f2113 100644
--- a/share/man/man7/release.7
+++ b/share/man/man7/release.7
@@ -221,7 +221,7 @@ hardware guide, and installation instructions. Other documentation (e.g.
the Handbook) is built during the
.Cm base.txz
target invoked by
-.Cm packagesystem.
+.Cm packagesystem .
.El
.Sh ENVIRONMENT
Optional variables:
@@ -283,7 +283,7 @@ Typically, one only needs to set
.Va TARGET .
.El
.Sh FILES
-.Bl -tag -compact
+.Bl -tag -compact -width Pa
.It Pa /usr/doc/Makefile
.It Pa /usr/doc/share/mk/doc.project.mk
.It Pa /usr/ports/Mk/bsd.port.mk
diff --git a/share/man/man8/picobsd.8 b/share/man/man8/picobsd.8
index 07373f67b5b1..f4c403ef8881 100644
--- a/share/man/man8/picobsd.8
+++ b/share/man/man8/picobsd.8
@@ -54,7 +54,7 @@ The most important options for common operations are
.Fl src ,
.Fl init ,
.Fl n and
-.Fl v.
+.Fl v .
.Bl -tag -width indent
.\"
.It Fl -all_in_mfs
@@ -94,7 +94,10 @@ subtree as necessary to subsequently build
images.
.\"
.It Fl -iso
-Generate an ISO image, picobsd.iso, in addition to the disk image picobsd.bin
+Generate an ISO image,
+.Pa picobsd.iso ,
+in addition to the disk image
+.Pa picobsd.bin .
.\"
.It Fl -modules
Also build kernel modules.
diff --git a/share/man/man8/rc.8 b/share/man/man8/rc.8
index ed8b706c5cce..a92c88b6bd50 100644
--- a/share/man/man8/rc.8
+++ b/share/man/man8/rc.8
@@ -253,7 +253,7 @@ The boot does not stop if such a script terminates with a non-zero status,
but a script can stop the boot if necessary by invoking the
.Fn stop_boot
function (from
-.Xr rc.subr 8 ).
+.Xr rc.subr 8 ) .
.El
.Pp
Each script should contain
diff --git a/share/man/man9/BUF_ISLOCKED.9 b/share/man/man9/BUF_ISLOCKED.9
index d55f2f5d0056..597038881fc3 100644
--- a/share/man/man9/BUF_ISLOCKED.9
+++ b/share/man/man9/BUF_ISLOCKED.9
@@ -52,7 +52,7 @@ It can return:
.It Dv LK_EXCLUSIVE
An exclusive lock is held by curthread.
.It Dv LK_EXCLOTHER
-An exclusive lock is held by someone other than curthread
+An exclusive lock is held by someone other than curthread.
.It Dv LK_SHARED
A shared lock is held.
.It Li 0
diff --git a/share/man/man9/DB_COMMAND.9 b/share/man/man9/DB_COMMAND.9
index bcb550c25e5e..179f3f3181a4 100644
--- a/share/man/man9/DB_COMMAND.9
+++ b/share/man/man9/DB_COMMAND.9
@@ -32,7 +32,7 @@
.Nm DB_COMMAND ,
.Nm DB_SHOW_COMMAND ,
.Nm DB_SHOW_ALL_COMMAND
-.Nd Extends the ddb command set.
+.Nd Extends the ddb command set
.Sh SYNOPSIS
.In ddb/ddb.h
.Fo DB_COMMAND
diff --git a/share/man/man9/EVENTHANDLER.9 b/share/man/man9/EVENTHANDLER.9
index ed83018d763c..4a1666087c9b 100644
--- a/share/man/man9/EVENTHANDLER.9
+++ b/share/man/man9/EVENTHANDLER.9
@@ -23,7 +23,7 @@
.\" SUCH DAMAGE.
.\" $FreeBSD$
.\"
-.Dd January 7, 2005
+.Dd May 11, 2012
.Dt EVENTHANDLER 9
.Os
.Sh NAME
@@ -197,6 +197,8 @@ Callbacks invoked when an interface is cloned.
Callbacks invoked when a new network interface appears.
.It Vt ifnet_departure_event
Callbacks invoked when a network interface is taken down.
+.It Vt bpf_track
+Callbacks invoked when a BPF listener attaches to/detaches from network interface.
.It Vt power_profile_change
Callbacks invoked when the power profile of the system changes.
.It Vt process_exec
diff --git a/share/man/man9/VOP_GETEXTATTR.9 b/share/man/man9/VOP_GETEXTATTR.9
index e3abcb9275d9..998ed2c4651a 100644
--- a/share/man/man9/VOP_GETEXTATTR.9
+++ b/share/man/man9/VOP_GETEXTATTR.9
@@ -71,7 +71,7 @@ will be
.Dv NULL
when
.Fa size
-is not, and vise versa.
+is not, and vice versa.
.It Fa cred
The user credentials to use in authorizing the request.
.It Fa td
@@ -113,7 +113,7 @@ The uio structure refers to an invalid userspace address.
.It Bq Er EINVAL
The
.Fa name ,
-.Fa namespace,
+.Fa namespace ,
or
.Fa uio
argument is invalid.
diff --git a/share/man/man9/VOP_GETPAGES.9 b/share/man/man9/VOP_GETPAGES.9
index e490862045f6..b165162f3946 100644
--- a/share/man/man9/VOP_GETPAGES.9
+++ b/share/man/man9/VOP_GETPAGES.9
@@ -115,7 +115,7 @@ The page could not be written because of an error on the underlying storage
medium or protocol.
.It Dv VM_PAGER_FAIL
Treated identically to
-.Dv VM_PAGER_ERROR
+.Dv VM_PAGER_ERROR .
.It Dv VM_PAGER_AGAIN
The page was not handled by this request.
.El
diff --git a/share/man/man9/VOP_GETVOBJECT.9 b/share/man/man9/VOP_GETVOBJECT.9
index 2490da710b57..47741d1225be 100644
--- a/share/man/man9/VOP_GETVOBJECT.9
+++ b/share/man/man9/VOP_GETVOBJECT.9
@@ -53,7 +53,7 @@ The vnode of the file.
The VM object being returned, or
.Dv NULL
if the caller wants to test for the existence
-of the VM object).
+of the VM object.
.El
.Pp
.Xr VFS 9
diff --git a/share/man/man9/VOP_SETEXTATTR.9 b/share/man/man9/VOP_SETEXTATTR.9
index 29f8cc27650a..edae937b5af7 100644
--- a/share/man/man9/VOP_SETEXTATTR.9
+++ b/share/man/man9/VOP_SETEXTATTR.9
@@ -96,7 +96,7 @@ The caller does not have the appropriate privilege.
The request was not valid in this file system for the specified vnode and
attribute name.
.It Bq Er ENOMEM
-Insufficient memory available to fulfill request
+Insufficient memory available to fulfill the request.
.It Bq Er EFAULT
The uio structure refers to an invalid userspace address.
.It Bq Er EINVAL
diff --git a/share/man/man9/acl.9 b/share/man/man9/acl.9
index 21640bd7b86f..c6c715918011 100644
--- a/share/man/man9/acl.9
+++ b/share/man/man9/acl.9
@@ -210,7 +210,7 @@ The following values are valid:
.Xr vaccess_acl_nfs4 9 ,
.Xr vaccess_acl_posix1e 9 ,
.Xr VFS 9 ,
-.Xr vnaccess 9 ,
+.Xr vaccess 9 ,
.Xr VOP_ACLCHECK 9 ,
.Xr VOP_GETACL 9 ,
.Xr VOP_SETACL 9
diff --git a/share/man/man9/bpf.9 b/share/man/man9/bpf.9
index 5a3ac07ad270..ebf26cb593aa 100644
--- a/share/man/man9/bpf.9
+++ b/share/man/man9/bpf.9
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 13, 2006
+.Dd May 11, 2012
.Dt BPF 9
.Os
.\"
@@ -246,9 +246,31 @@ The
function
returns 0 when the program is not a valid filter program.
.\"
+.Sh EVENT HANDLERS
+.Nm
+invokes
+.Fa bpf_track
+.Xr EVENTHANDLER 9
+event each time listener attaches to or detaches from an interface.
+Pointer to
+.Pq Vt "struct ifnet *"
+is passed as the first argument, interface
+.Fa dlt
+follows. Last argument indicates listener is attached (1) or
+detached (0).
+Note that handler is invoked with
+.Nm
+global lock held, which implies restriction on sleeping and calling
+.Nm
+subsystem inside
+.Xr EVENTHANDLER 9
+dispatcher.
+Note that handler is not called for write-only listeners.
+.\"
.Sh SEE ALSO
.Xr tcpdump 1 ,
-.Xr bpf 4
+.Xr bpf 4 ,
+.Xr EVENTHANDLER 9
.\"
.Sh HISTORY
The Enet packet filter was created in 1980 by Mike Accetta and
diff --git a/share/man/man9/bus_generic_print_child.9 b/share/man/man9/bus_generic_print_child.9
index 80a04ff3d506..388c0a0fb357 100644
--- a/share/man/man9/bus_generic_print_child.9
+++ b/share/man/man9/bus_generic_print_child.9
@@ -51,7 +51,7 @@ foo0: <FooCard 1234> on bar0
bus_generic_print_child itself calls two functions
.Fn bus_print_child_header
and
-.Fn bus_print_child_footer
+.Fn bus_print_child_footer .
The former prints "foo0: <FooCard 1234>" and the latter "on bar0".
These routines should be used if possible in your own code if
.Fn bus_generic_print_child
diff --git a/share/man/man9/bus_release_resource.9 b/share/man/man9/bus_release_resource.9
index 68187ccc7872..35e70d994a10 100644
--- a/share/man/man9/bus_release_resource.9
+++ b/share/man/man9/bus_release_resource.9
@@ -71,7 +71,7 @@ value must be the same as the one returned by
.It
.Fa r
is the pointer to
-.Va struct res ,
+.Va struct resource ,
i.e., the resource itself,
returned by
.Xr bus_alloc_resource 9 .
diff --git a/share/man/man9/bus_space.9 b/share/man/man9/bus_space.9
index 0f0425a61464..6bf03b45209c 100644
--- a/share/man/man9/bus_space.9
+++ b/share/man/man9/bus_space.9
@@ -1380,7 +1380,8 @@ functions may be executed in any order.
They may also be executed out
of order with respect to other pending read and write operations unless
order is enforced by use of the
-.Fn bus_space_barrier function .
+.Fn bus_space_barrier
+function.
There is no way to insert barriers between reads or writes of
individual bus space locations executed by the
.Fn bus_space_copy_region_N
diff --git a/share/man/man9/byteorder.9 b/share/man/man9/byteorder.9
index 20e31362a36c..e5737f6afe79 100644
--- a/share/man/man9/byteorder.9
+++ b/share/man/man9/byteorder.9
@@ -158,7 +158,7 @@ in big/little endian format.
The
.Fn hto*
and
-.Fn toh*
+.Fn *toh
functions first appeared in
.Fx 5.0 ,
and were originally developed by the
diff --git a/share/man/man9/devclass_get_maxunit.9 b/share/man/man9/devclass_get_maxunit.9
index c3be62785c29..40a2d7929815 100644
--- a/share/man/man9/devclass_get_maxunit.9
+++ b/share/man/man9/devclass_get_maxunit.9
@@ -49,7 +49,7 @@ The
function returns -1 if
.Fa dc
is
-.Dv NULL;
+.Dv NULL ,
otherwise it returns the next unit
number in
.Fa dc's
diff --git a/share/man/man9/device_find_child.9 b/share/man/man9/device_find_child.9
index a23b2b2a145a..391f44b7bb9f 100644
--- a/share/man/man9/device_find_child.9
+++ b/share/man/man9/device_find_child.9
@@ -41,7 +41,7 @@
.Fn device_find_child "device_t dev" "const char *classname" "int unit"
.Sh DESCRIPTION
This function looks for a specific child of
-.Dv dev .
+.Dv dev
with the given
.Fa classname
and
diff --git a/share/man/man9/firmware.9 b/share/man/man9/firmware.9
index 9987e09c2ac1..0f4fa9af67e9 100644
--- a/share/man/man9/firmware.9
+++ b/share/man/man9/firmware.9
@@ -101,11 +101,13 @@ they want as an argument. If a matching image is not already registered,
the firmware subsystem will try to load it using the
mechanisms specified below (typically, a kernel module
with
-.Nm the same name
+.Nm
+the same name
as the image).
.Sh API DESCRIPTION
The kernel
-.Nm firmware API
+.Nm
+firmware API
is made of the following functions:
.Pp
.Fn firmware_register
@@ -225,7 +227,7 @@ in the module, the imagename and version of each firmware image.
If you need to embed firmware images into a system, you should write
appropriate entries in the <files.arch> file, e.g. this example is
from
-.Nm sys/arm/xscale/ixp425/files.ixp425:
+.Nm sys/arm/xscale/ixp425/files.ixp425 :
.Bd -literal
ixp425_npe_fw.c optional npe_fw \\
compile-with "${AWK} -f $S/tools/fw_stub.awk \\
diff --git a/share/man/man9/hashinit.9 b/share/man/man9/hashinit.9
index d186dcfe18e2..b72cd7551195 100644
--- a/share/man/man9/hashinit.9
+++ b/share/man/man9/hashinit.9
@@ -29,7 +29,7 @@
.Dt HASHINIT 9
.Os
.Sh NAME
-.Nm hashinit , hashinit_flags, hashdestroy , phashinit
+.Nm hashinit , hashinit_flags , hashdestroy , phashinit
.Nd manage kernel hash tables
.Sh SYNOPSIS
.In sys/malloc.h
diff --git a/share/man/man9/ieee80211_proto.9 b/share/man/man9/ieee80211_proto.9
index 88412eb35333..6b0da064d811 100644
--- a/share/man/man9/ieee80211_proto.9
+++ b/share/man/man9/ieee80211_proto.9
@@ -238,4 +238,4 @@ work will be initiated outside the driver.
The state machine concept was part of the original
.Nm ieee80211
code base that first appeared in
-.Nx 1.5 ,
+.Nx 1.5 .
diff --git a/share/man/man9/ifnet.9 b/share/man/man9/ifnet.9
index dd4fdf53e66c..1059c889c620 100644
--- a/share/man/man9/ifnet.9
+++ b/share/man/man9/ifnet.9
@@ -637,7 +637,7 @@ interfaces registered at the interface list.
.Aq D
This interface blocks transmission of packets and discards incoming
packets after BPF processing.
-Used to monitor network trafic but not interact
+Used to monitor network traffic but not interact
with the network in question.
.It Dv IFF_STATICARP
.Aq D
diff --git a/share/man/man9/kqueue.9 b/share/man/man9/kqueue.9
index 555fe545e611..29ae5f7a76ae 100644
--- a/share/man/man9/kqueue.9
+++ b/share/man/man9/kqueue.9
@@ -260,8 +260,7 @@ is not required, but is commonly used.
If used, the
.Vt knlist
must be initialized with either
-.Fn knlist_init
-,
+.Fn knlist_init ,
.Fn knlist_init_mtx
or
.Fn knlist_init_rw_reader .
diff --git a/share/man/man9/lock.9 b/share/man/man9/lock.9
index 0e5cfb153731..bbcf5e810825 100644
--- a/share/man/man9/lock.9
+++ b/share/man/man9/lock.9
@@ -230,7 +230,7 @@ and
The
.Fn lockmgr_disown
function switches the owner from the current thread to be
-.Dv LK_KERNPROC,
+.Dv LK_KERNPROC ,
if the lock is already held.
.Pp
The
diff --git a/share/man/man9/locking.9 b/share/man/man9/locking.9
index 871dffe934fb..f634d34e912a 100644
--- a/share/man/man9/locking.9
+++ b/share/man/man9/locking.9
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd November 3, 2010
+.Dd May 25, 2012
.Dt LOCKING 9
.Os
.Sh NAME
@@ -298,7 +298,7 @@ one of the synchronization primitives discussed:
.It mutex Ta \&ok Ta \&ok-1 Ta \&no Ta \&ok Ta \&ok Ta \&no-3
.It sx Ta \&ok Ta \&ok Ta \&ok-2 Ta \&ok Ta \&ok Ta \&ok-4
.It rwlock Ta \&ok Ta \&ok Ta \&no Ta \&ok-2 Ta \&ok Ta \&no-3
-.It rmlock Ta \&ok Ta \&ok Ta \&ok-5 Ta \&ok Ta \&ok-2 Ta \&ok-5
+.It rmlock Ta \&ok Ta \&ok Ta \&no-5 Ta \&ok Ta \&ok-2 Ta \&no-5
.El
.Pp
.Em *1
@@ -315,8 +315,7 @@ and reacquire it on wakeup (e.g.
.Fn mtx_sleep ,
.Fn rw_sleep
and
-.Fn msleep_spin
-).
+.Fn msleep_spin ) .
.Pp
.Em *4
Though one can sleep holding an sx lock, one can also use
@@ -358,6 +357,6 @@ These
functions appeared in
.Bsx 4.1
through
-.Fx 7.0
+.Fx 7.0 .
.Sh BUGS
There are too many locking primitives to choose from.
diff --git a/share/man/man9/mbuf.9 b/share/man/man9/mbuf.9
index b029c5219ce9..5c940290886d 100644
--- a/share/man/man9/mbuf.9
+++ b/share/man/man9/mbuf.9
@@ -403,7 +403,8 @@ for details.
Associate externally managed data with
.Fa mbuf .
Any internal data contained in the mbuf will be discarded, and the
-.Dv M_EXT flag will be set.
+.Dv M_EXT
+flag will be set.
The
.Fa buf
and
@@ -722,7 +723,8 @@ are contiguous and lay in the data area of
.Fa mbuf ,
so they are accessible with
.Fn mtod mbuf type .
-.Fa len must be smaller than, or equal to, the size of an
+.Fa len
+must be smaller than, or equal to, the size of an
.Vt mbuf cluster .
Return a pointer to an intermediate
.Vt mbuf
diff --git a/share/man/man9/mod_cc.9 b/share/man/man9/mod_cc.9
index 75e2db039b56..d753a3c125d8 100644
--- a/share/man/man9/mod_cc.9
+++ b/share/man/man9/mod_cc.9
@@ -287,7 +287,7 @@ The CCF_CWND_LIMITED flag is relevant in
.Va ack_received
and is set when the connection's ability to send data is currently constrained
by the value of the congestion window.
-Algorithms should use the abscence of this flag being set to avoid accumulating
+Algorithms should use the absence of this flag being set to avoid accumulating
a large difference between the congestion window and send window.
.Sh SEE ALSO
.Xr cc_chd 4 ,
diff --git a/share/man/man9/netisr.9 b/share/man/man9/netisr.9
index bb64b0eb2c85..4377e02d03cf 100644
--- a/share/man/man9/netisr.9
+++ b/share/man/man9/netisr.9
@@ -78,7 +78,7 @@ and may also manage queue limits and statistics using the
.Fn netisr_getqdrops ,
.Fn netisr_getqlimit ,
and
-.Fn netisr_setqlimit.
+.Fn netisr_setqlimit .
.Pp
.Nm
supports multi-processor execution of handlers, and relies on a combination
diff --git a/share/man/man9/pci.9 b/share/man/man9/pci.9
index 4089ee8430ed..adc78b53f09f 100644
--- a/share/man/man9/pci.9
+++ b/share/man/man9/pci.9
@@ -488,7 +488,7 @@ The
.Fn pci_count_msi
function returns the maximum number of MSI messages supported by the
device
-.Fa dev.
+.Fa dev .
If the device does not support MSI,
then
.Fn pci_count_msi
@@ -567,7 +567,8 @@ is set to the number of messages allocated and
returns zero.
For MSI-X messages,
the resource ID for each
-.Dv SYS_RES_IRQ resource identifies the index in the MSI-X table of the
+.Dv SYS_RES_IRQ
+resource identifies the index in the MSI-X table of the
corresponding message.
A resource ID of one maps to the first index of the MSI-X table;
a resource ID two identifies the second index in the table, etc.
@@ -608,7 +609,7 @@ A driver may use a different distribution of available messages to
table entries via the
.Fn pci_remap_msix
function.
-Note that this function must be called after a succesful call to
+Note that this function must be called after a successful call to
.Fn pci_alloc_msix
but before any of the
.Dv SYS_RES_IRQ
@@ -649,7 +650,8 @@ above for
.Fn pci_alloc_msix .
MSI-X table entries that with a vector of zero will not have an
associated
-.Dv SYS_RES_IRQ resource.
+.Dv SYS_RES_IRQ
+resource.
Additionally,
if any of the original messages allocated by
.Fn pci_alloc_msix
diff --git a/share/man/man9/spl.9 b/share/man/man9/spl.9
index a71918c88a56..3bfa556d4b78 100644
--- a/share/man/man9/spl.9
+++ b/share/man/man9/spl.9
@@ -220,7 +220,8 @@ the system.
The historical number scheme can be considered as a
simple linearly ordered set of interrupt priority groups.
.Pp
-.Fx 5.0 eliminated spl entirely in favor of locking primitives which scale
+.Fx 5.0
+eliminated spl entirely in favor of locking primitives which scale
to more than one processor.
.Sh AUTHORS
This manual page was written by
diff --git a/share/man/man9/sysctl.9 b/share/man/man9/sysctl.9
index d58573b247a2..5399b5681d05 100644
--- a/share/man/man9/sysctl.9
+++ b/share/man/man9/sysctl.9
@@ -107,7 +107,7 @@ This is a 64-bit signed integer.
This is an opaque data structure.
.It Dv CTLTYPE_STRUCT
Alias for
-.Dv CTLTYPE_OPAQUE.
+.Dv CTLTYPE_OPAQUE .
.It Dv CTLTYPE_UINT
This is an unsigned integer.
.It Dv CTLTYPE_LONG
diff --git a/share/man/man9/taskqueue.9 b/share/man/man9/taskqueue.9
index 319aa2f23bfe..f1a43b609cfb 100644
--- a/share/man/man9/taskqueue.9
+++ b/share/man/man9/taskqueue.9
@@ -189,8 +189,8 @@ The
count is cleared, and the old value returned in the reference
parameter
.Fa pendp ,
-if it is non-
-.Dv NULL .
+if it is
+.Pf non- Dv NULL .
If the task is currently running,
.Dv EBUSY
is returned, otherwise 0.
diff --git a/share/man/man9/usbdi.9 b/share/man/man9/usbdi.9
index 72fec96f04e0..03cc3057b821 100644
--- a/share/man/man9/usbdi.9
+++ b/share/man/man9/usbdi.9
@@ -524,7 +524,7 @@ executed on the USB control endpoint.
.
This flag can be changed during operation.
.Pp
-"BOF" is short for "Block On Failure"
+"BOF" is short for "Block On Failure".
.Pp
NOTE: This flag should be set on all BULK and INTERRUPT USB transfers
which use an endpoint that can be shared between userland and kernel.
diff --git a/share/man/man9/vm_page_aflag.9 b/share/man/man9/vm_page_aflag.9
index 8ef5d8703c9f..4500bd2d69cc 100644
--- a/share/man/man9/vm_page_aflag.9
+++ b/share/man/man9/vm_page_aflag.9
@@ -27,7 +27,7 @@
.\" $FreeBSD$
.\"
.Dd August 31, 2011
-.Dt VM_PAGE_FLAG 9
+.Dt VM_PAGE_AFLAG 9
.Os
.Sh NAME
.Nm vm_page_aflag_clear , vm_page_aflag_set , vm_page_reference
diff --git a/share/misc/committers-doc.dot b/share/misc/committers-doc.dot
index 630cb8f98e22..5631ed4074a7 100644
--- a/share/misc/committers-doc.dot
+++ b/share/misc/committers-doc.dot
@@ -32,15 +32,19 @@ node [color=grey62, style=filled, bgcolor=black];
ache [label="Andrey Chernov\nache@FreeBSD.org\n1997/06/13\n2010/12/11"]
bmah [label="Bruce A. Mah\nbmah@FreeBSD.org\n2000/08/22\n2009/09/13"]
bvs [label="Vitaly Bogdanov\nbvs@FreeBSD.org\n2005/10/03\n2010/12/11"]
+ceri [label="Ceri Davies\nceri@FreeBSD.org\n2002/03/17\n2012/02/29"]
den [label="Denis Peplin\nden@FreeBSD.org\n2003/09/13\n2009/07/09"]
garys [label="Gary W. Swearingen\ngarys@FreeBSD.org\n2005/08/21\n2008/03/02"]
jcamou [label="Jesus R. Camou\njcamou@FreeBSD.org\n2005/03/02\n2008/12/20"]
jesusr [label="Jesus Rodriguez Cuesta\njesusr@FreeBSD.org\n1998/12/10\n2010/12/11"]
jim [label="Jim Mock\njim@FreeBSD.org\n1999/08/11\n2003/12/15"]
josef [label="Josef El-Rayes\njosef@FreeBSD.org\n2004/01/15\n2008/03/29"]
+marcel [label="Marcel Moolenaar\nmarcel@FreeBSD.org\n1999/07/03\n2012/04/25"]
mheinen [label="Martin Heinen\nmheinen@FreeBSD.org\n2002/10/04\n2006/04/26"]
+murray [label="Murray Stokely\nmurray@FreeBSD.org\n2000/04/05\n2012/04/25"]
nik [label="Nik Clayton\nnik@FreeBSD.org\n1998/02/26\n2008/12/20"]
pgj [label="Gabor Pali\npgj@FreeBSD.org\n2008/04/21\n2010/12/01"]
+roam [label="Peter Pentchev\nroam@FreeBSD.org\n2003/02/14\n2012/02/29"]
node [color=lightblue2, style=filled, bgcolor=black];
@@ -51,7 +55,6 @@ bcr [label="Benedict Reuschling\nbcr@FreeBSD.org\n2009/12/24"]
blackend [label="Marc Fonvieille\nblackend@FreeBSD.org\n2002/06/16"]
brd [label="Brad Davis\nbrd@FreeBSD.org\n2005/06/01"]
brueffer [label="Christian Brueffer\nbrueffer@FreeBSD.org\n2003/01/13"]
-ceri [label="Ceri Davies\nceri@FreeBSD.org\n2002/03/17"]
chinsan [label="Chinsan Huang\nchinsan@FreeBSD.org\n2006/09/20"]
danger [label="Daniel Gerzo\ndanger@FreeBSD.org\n2006/08/20"]
delphij [label="Xin Li\ndelphij@FreeBSD.org\n2004/09/14"]
@@ -67,16 +70,13 @@ keramida [label="Giorgos Keramidas\nkeramida@FreeBSD.org\n2001/10/12"]
linimon [label="Mark Linimon\nlinimon@FreeBSD.org\n2004/03/31"]
loader [label="Fukang Chen\nloader@FreeBSD.org\n2007/07/30"]
manolis [label="Manolis Kiagias\nmanolis@FreeBSD.org\n2008/05/24"]
-marcel [label="Marcel Moolenaar\nmarcel@FreeBSD.org\n1999/07/03"]
marck [label="Dmitry Morozovsky\nmarck@FreeBSD.org\n2004/08/10"]
maxim [label="Maxim Konovalov\nmaxim@FreeBSD.org\n2002/02/07"]
miwi [label="Martin Wilke\nmiwi@FreeBSD.org\n2007/10/26"]
-murray [label="Murray Stokely\nmurray@FreeBSD.org\n2000/04/05"]
pav [label="Pav Lucistnik\npav@FreeBSD.org\n2005/08/12"]
pluknet [label="Sergey Kandaurov\npluknet@FreeBSD.org\n2012/02/14"]
remko [label="Remko Lodder\nremko@FreeBSD.org\n2004/10/16"]
rene [label="Rene Ladan\nrene@FreeBSD.org\n2008/11/03"]
-roam [label="Peter Pentchev\nroam@FreeBSD.org\n2003/02/14"]
ryusuke [label="Ryusuke Suzuki\nryusuke@FreeBSD.org\n2009/12/21"]
simon [label="Simon L. Nielsen\nsimon@FreeBSD.org\n2003/07/20"]
taras [label="Taras Korenko\ntaras@FreeBSD.org\n2010/06/25"]
diff --git a/share/misc/committers-ports.dot b/share/misc/committers-ports.dot
index 2e897f2a976d..c6f93d9619f0 100644
--- a/share/misc/committers-ports.dot
+++ b/share/misc/committers-ports.dot
@@ -149,6 +149,7 @@ nork [label="Norikatsu Shigemura\nnork@FreeBSD.org\n2002/04/01"]
novel [label="Roman Bogorodskiy\nnovel@FreeBSD.org\n2005/03/07"]
nox [label="Juergen Lock\nnox@FreeBSD.org\n2006/12/22"]
obrien [label="David E. O'Brien\nobrien@FreeBSD.org\n1996/10/29"]
+olivierd [label="Olivier Duchateau\nolivierd@FreeBSD.org\n2012/05/29"]
mharo [label="Michael Haro\nmharo@FreeBSD.org\n1999/04/13"]
osa [label="Sergey A. Osokin\nosa@FreeBSD.org\n2003/06/04"]
pat [label="Patrick Li\npat@FreeBSD.org\n2001/11/14"]
@@ -371,6 +372,7 @@ miwi -> makc
miwi -> mandree
miwi -> mva
miwi -> nox
+miwi -> olivierd
miwi -> pawel
miwi -> rm
miwi -> sbz
@@ -413,6 +415,7 @@ rafan -> chinsan
rene -> crees
rene -> jgh
+rene -> olivierd
sahil -> culot
sahil -> eadler
diff --git a/share/misc/committers-src.dot b/share/misc/committers-src.dot
index 96b295b88c53..20ad00422ebb 100644
--- a/share/misc/committers-src.dot
+++ b/share/misc/committers-src.dot
@@ -39,6 +39,7 @@ billf [label="Bill Fumerola\nbillf@FreeBSD.org\n1998/11/11\n2008/11/10"]
bmah [label="Bruce A. Mah\nbmah@FreeBSD.org\n2002/01/29\n2009/09/13"]
bmilekic [label="Bosko Milekic\nbmilekic@FreeBSD.org\n2000/09/21\n2008/11/10"]
bushman [label="Michael Bushkov\nbushman@FreeBSD.org\n2007/03/10\n2010/04/29"]
+ceri [label="Ceri Davies\nceri@FreeBSD.org\n2006/11/07\n2012/03/07"]
cjc [label="Crist J. Clark\ncjc@FreeBSD.org\n2001/06/01\n2006/12/29"]
dds [label="Diomidis Spinellis\ndds@FreeBSD.org\n2003/06/20\n2010/09/22"]
dhartmei [label="Daniel Hartmeier\ndhartmei@FreeBSD.org\n2004/04/06\n2008/12/08"]
@@ -58,20 +59,21 @@ jtc [label="J.T. Conklin\njtc@FreeBSD.org\n1993/06/12\n????/??/??"]
kbyanc [label="Kelly Yancey\nkbyanc@FreeBSD.org\n2000/07/11\n2006/07/25"]
keichii [label="Michael Wu\nkeichii@FreeBSD.org\n2001/03/07\n2006/04/28"]
linimon [label="Mark Linimon\nlinimon@FreeBSD.org\n2006/09/30\n2008/05/04"]
+lulf [label="Ulf Lilleengen\nlulf@FreeBSD.org\n2007/10/24\n2012/01/19"]
mb [label="Maxim Bolotin\nmb@FreeBSD.org\n2000/04/06\n2003/03/08"]
marks [label="Mark Santcroos\nmarks@FreeBSD.org\n2004/03/18\n2008/09/29"]
mike [label="Mike Barcroft\nmike@FreeBSD.org\n2001/07/17\n2006/04/28"]
msmith [label="Mike Smith\nmsmith@FreeBSD.org\n????/??/??\n2003/12/15"]
murray [label="Murray Stokely\nmurray@FreeBSD.org\n2000/04/05\n2010/07/25"]
+mux [label="Maxime Henrion\nmux@FreeBSD.org\n2002/03/03\n2011/06/22"]
nate [label="Nate Willams\nnate@FreeBSD.org\n1993/06/12\n2003/12/15"]
njl [label="Nate Lawson\nnjl@FreeBSD.org\n2002/08/07\n2008/02/16"]
non [label="Noriaki Mitsnaga\nnon@FreeBSD.org\n2000/06/19\n2007/03/06"]
onoe [label="Atsushi Onoe\nonoe@FreeBSD.org\n2000/07/21\n2008/11/10"]
+randi [label="Randi Harper\nrandi@FreeBSD.org\n2010/04/20\n2012/05/10"]
rgrimes [label="Rod Grimes\nrgrimes@FreeBSD.org\n1993/06/12\n2003/03/08"]
rink [label="Rink Springer\nrink@FreeBSD.org\n2006/01/16\n2010/11/04"]
robert [label="Robert Drehmel\nrobert@FreeBSD.org\n2001/08/23\n2006/05/13"]
-rmh [label="Robert Millan\nrmh@FreeBSD.org\n2011/09/18"]
-rpaulo [label="Rui Paulo\nrpaulo@FreeBSD.org\n2007/09/25\n2010/12/03"]
sah [label="Sam Hopkins\nsah@FreeBSD.org\n2004/12/15\n2008/11/10"]
shafeeq [label="Shafeeq Sinnamohideen\nshafeeq@FreeBSD.org\n2000/06/19\n2006/04/06"]
sheldonh [label="Sheldon Hearn\nsheldonh@FreeBSD.org\n1999/06/14\n2006/05/13"]
@@ -82,6 +84,7 @@ tmm [label="Thomas Moestl\ntmm@FreeBSD.org\n2001/03/07\n2006/07/12"]
toshi [label="Toshihiko Arai\ntoshi@FreeBSD.org\n2000/07/06\n2003/03/08"]
tshiozak [label="Takuya SHIOZAKI\ntshiozak@FreeBSD.org\n2001/04/25\n2003/03/08"]
uch [label="UCHIYAMA Yasushi\nuch@FreeBSD.org\n2000/06/21\n2002/04/24"]
+yar [label="Yar Tikhiy\nyar@FreeBSD.org\n2001/03/25\n2012/05/23"]
node [color=lightblue2, style=filled, bgcolor=black];
@@ -112,7 +115,6 @@ brueffer [label="Christian Brueffer\nbrueffer@FreeBSD.org\n2006/02/28"]
bruno [label="Bruno Ducrot\nbruno@FreeBSD.org\n2005/07/18"]
bschmidt [label="Bernhard Schmidt\nbschmidt@FreeBSD.org\n2010/02/06"]
bz [label="Bjoern A. Zeeb\nbz@FreeBSD.org\n2004/07/27"]
-ceri [label="Ceri Davies\nceri@FreeBSD.org\n2006/11/07"]
cognet [label="Olivier Houchard\ncognet@FreeBSD.org\n2002/10/09"]
cokane [label="Coleman Kane\ncokane@FreeBSD.org\n2000/06/19"]
cperciva [label="Colin Percival\ncperciva@FreeBSD.org\n2004/01/20"]
@@ -187,7 +189,6 @@ kib [label="Konstantin Belousov\nkib@FreeBSD.org\n2006/06/03"]
kmacy [label="Kip Macy\nkmacy@FreeBSD.org\n2005/06/01"]
le [label="Lukas Ertl\nle@FreeBSD.org\n2004/02/02"]
lstewart [label="Lawrence Stewart\nlstewart@FreeBSD.org\n2008/10/06"]
-lulf [label="Ulf Lilleengen\nlulf@FreeBSD.org\n2007/10/24"]
marcel [label="Marcel Moolenaar\nmarcel@FreeBSD.org\n1999/07/03"]
marius [label="Marius Strobl\nmarius@FreeBSD.org\n2004/04/17"]
markm [label="Mark Murray\nmarkm@FreeBSD.org\n199?/??/??"]
@@ -202,7 +203,6 @@ mjacob [label="Matt Jacob\nmjacob@FreeBSD.org\n1997/08/13"]
mlaier [label="Max Laier\nmlaier@FreeBSD.org\n2004/02/10"]
monthadar [label="Monthadar Al Jaberi\nmonthadar@FreeBSD.org\n2012/04/02"]
mr [label="Michael Reifenberger\nmr@FreeBSD.org\n2001/09/30"]
-mux [label="Maxime Henrion\nmux@FreeBSD.org\n2002/03/03"]
neel [label="Neel Natu\nneel@FreeBSD.org\n2009/09/20"]
netchild [label="Alexander Leidinger\nnetchild@FreeBSD.org\n2005/03/31"]
nork [label="Norikatsu Shigemura\nnork@FreeBSD.org\n2009/06/09"]
@@ -213,7 +213,7 @@ olli [label="Oliver Fromme\nolli@FreeBSD.org\n2008/02/14"]
peadar [label="Peter Edwards\npeadar@FreeBSD.org\n2004/03/08"]
peter [label="Peter Wemm\npeter@FreeBSD.org\n????/??/??"]
pfg [label="Pedro Giffuni\npfg@FreeBSD.org\n2011/12/01"]
-philip [label="Philip Paeps\nphilip@FreBSD.org\n2004/01/21"]
+philip [label="Philip Paeps\nphilip@FreeBSD.org\n2004/01/21"]
phk [label="Poul-Henning Kamp\nphk@FreeBSD.org\n1994/02/21"]
pho [label="Peter Holm\npho@FreeBSD.org\n2008/11/16"]
pjd [label="Pawel Jakub Dawidek\npjd@FreeBSD.org\n2004/02/02"]
@@ -221,14 +221,15 @@ pluknet [label="Sergey Kandaurov\npluknet@FreeBSD.org\n2010/10/05"]
ps [label="Paul Saab\nps@FreeBSD.org\n2000/02/23"]
qingli [label="Qing Li\nqingli@FreeBSD.org\n2005/04/13"]
rafan [label="Rong-En Fan\nrafan@FreeBSD.org\n2007/01/31"]
-randi [label="Randi Harper\nrandi@FreeBSD.org\n2010/04/20"]
ray [label="Aleksandr Rybalko\nray@FreeBSD.org\n2011/05/25"]
rdivacky [label="Roman Divacky\nrdivacky@FreeBSD.org\n2008/03/13"]
remko [label="Remko Lodder\nremko@FreeBSD.org\n2007/02/23"]
rik [label="Roman Kurakin\nrik@FreeBSD.org\n2003/12/18"]
rmacklem [label="Rick Macklem\nrmacklem@FreeBSD.org\n2009/03/27"]
+rmh [label="Robert Millan\nrmh@FreeBSD.org\n2011/09/18"]
rnoland [label="Robert Noland\nrnoland@FreeBSD.org\n2008/09/15"]
roberto [label="Ollivier Robert\nroberto@FreeBSD.org\n1995/02/22"]
+rpaulo [label="Rui Paulo\nrpaulo@FreeBSD.org\n2007/09/25"]
rrs [label="Randall R Stewart\nrrs@FreeBSD.org\n2007/02/08"]
rse [label="Ralf S. Engelschall\nrse@FreeBSD.org\n1997/07/31"]
rstone [label="Ryan Stone\nrstone@FreeBSD.org\n2010/04/19"]
@@ -266,7 +267,6 @@ wes [label="Wes Peters\nwes@FreeBSD.org\n1998/11/25"]
wilko [label="Wilko Bulte\nwilko@FreeBSD.org\n2000/01/13"]
wollman [label="Garrett Wollman\nwollman@FreeBSD.org\n????/??/??"]
wsalamon [label="Wayne Salamon\nwsalamon@FreeBSD.org\n2005/06/25"]
-yar [label="Yar Tikhiy\nyar@FreeBSD.org\n2001/03/25"]
yongari [label="Pyun YongHyeon\nyongari@FreeBSD.org\n2004/08/01"]
zack [label="Zack Kirsch\nzack@FreeBSD.org\n2010/11/05"]
zec [label="Marko Zec\nzec@FreeBSD.org\n2008/06/22"]
diff --git a/share/mk/bsd.README b/share/mk/bsd.README
index e91a2313c754..f09142e838e3 100644
--- a/share/mk/bsd.README
+++ b/share/mk/bsd.README
@@ -228,7 +228,7 @@ LDADD Additional loader objects. Usually used for libraries.
For example, to load with the compatibility and utility
libraries, use:
- LDFILES=-lutil -lcompat
+ LDADD=-lutil -lcompat
LDFLAGS Additional loader flags.
@@ -261,7 +261,7 @@ DPADD Additional dependencies for the program. Usually used for
libraries. For example, to depend on the compatibility and
utility libraries use:
- SRCLIB=${LIBCOMPAT} ${LIBUTIL}
+ DPADD=${LIBCOMPAT} ${LIBUTIL}
There is a predefined identifier for each (non-profiled,
non-shared) library and object. Library file names are
diff --git a/share/mk/bsd.libnames.mk b/share/mk/bsd.libnames.mk
index d477c0eb27f7..075833b2c673 100644
--- a/share/mk/bsd.libnames.mk
+++ b/share/mk/bsd.libnames.mk
@@ -135,6 +135,7 @@ LIBPANEL?= ${DESTDIR}${LIBDIR}/libpanel.a
LIBPCAP?= ${DESTDIR}${LIBDIR}/libpcap.a
LIBPMC?= ${DESTDIR}${LIBDIR}/libpmc.a
LIBPROC?= ${DESTDIR}${LIBDIR}/libproc.a
+LIBPROCSTAT?= ${DESTDIR}${LIBDIR}/libprocstat.a
LIBPTHREAD?= ${DESTDIR}${LIBDIR}/libpthread.a
LIBRADIUS?= ${DESTDIR}${LIBDIR}/libradius.a
LIBREADLINE?= ${DESTDIR}${LIBDIR}/libreadline.a
diff --git a/share/mk/bsd.own.mk b/share/mk/bsd.own.mk
index 9802e79eebf1..924e9ceb57eb 100644
--- a/share/mk/bsd.own.mk
+++ b/share/mk/bsd.own.mk
@@ -334,6 +334,7 @@ __DEFAULT_YES_OPTIONS = \
CXX \
DICT \
DYNAMICROOT \
+ ED_CRYPTO \
EXAMPLES \
FLOPPY \
FORTH \
@@ -366,6 +367,7 @@ __DEFAULT_YES_OPTIONS = \
LOCALES \
LOCATE \
LPR \
+ LS_COLORS \
MAIL \
MAILWRAPPER \
MAKE \
@@ -426,6 +428,7 @@ __DEFAULT_NO_OPTIONS = \
ICONV \
IDEA \
LIBCPLUSPLUS \
+ NAND \
OFED \
SHARED_TOOLCHAIN
diff --git a/sys/amd64/acpica/acpi_machdep.c b/sys/amd64/acpica/acpi_machdep.c
index 25dd173240a7..f57bdc209686 100644
--- a/sys/amd64/acpica/acpi_machdep.c
+++ b/sys/amd64/acpica/acpi_machdep.c
@@ -44,8 +44,6 @@ __FBSDID("$FreeBSD$");
#include <machine/nexusvar.h>
-SYSCTL_DECL(_debug_acpi);
-
int acpi_resume_beep;
TUNABLE_INT("debug.acpi.resume_beep", &acpi_resume_beep);
SYSCTL_INT(_debug_acpi, OID_AUTO, resume_beep, CTLFLAG_RW, &acpi_resume_beep,
diff --git a/sys/amd64/amd64/fpu.c b/sys/amd64/amd64/fpu.c
index 27c618f19ee2..55299c8989c9 100644
--- a/sys/amd64/amd64/fpu.c
+++ b/sys/amd64/amd64/fpu.c
@@ -141,7 +141,7 @@ CTASSERT(sizeof(struct savefpu_ymm) == 832);
/*
* This requirement is to make it easier for asm code to calculate
* offset of the fpu save area from the pcb address. FPU save area
- * must by 64-bytes aligned.
+ * must be 64-byte aligned.
*/
CTASSERT(sizeof(struct pcb) % XSAVE_AREA_ALIGN == 0);
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index ff4f96ba330f..657b04a9c4ce 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -117,6 +117,7 @@ __FBSDID("$FreeBSD$");
#include <sys/mman.h>
#include <sys/mutex.h>
#include <sys/proc.h>
+#include <sys/rwlock.h>
#include <sys/sx.h>
#include <sys/vmmeter.h>
#include <sys/sched.h>
@@ -201,8 +202,10 @@ static u_int64_t DMPDPphys; /* phys addr of direct mapped level 3 */
/*
* Data for the pv entry allocation mechanism
*/
+static TAILQ_HEAD(pch, pv_chunk) pv_chunks = TAILQ_HEAD_INITIALIZER(pv_chunks);
static long pv_entry_count;
static struct md_page *pv_table;
+static struct rwlock pvh_global_lock;
/*
* All those kernel PT submaps that BSD is so fond of
@@ -216,7 +219,7 @@ caddr_t CADDR1 = 0;
static caddr_t crashdumpmap;
static void free_pv_entry(pmap_t pmap, pv_entry_t pv);
-static pv_entry_t get_pv_entry(pmap_t locked_pmap, boolean_t try);
+static pv_entry_t get_pv_entry(pmap_t pmap, boolean_t try);
static void pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa);
static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa);
static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa);
@@ -580,6 +583,11 @@ pmap_bootstrap(vm_paddr_t *firstaddr)
CPU_FILL(&kernel_pmap->pm_active); /* don't allow deactivation */
TAILQ_INIT(&kernel_pmap->pm_pvchunk);
+ /*
+ * Initialize the global pv list lock.
+ */
+ rw_init(&pvh_global_lock, "pvh global");
+
/*
* Reserve some special page table entries/VA space for temporary
* mapping of pages.
@@ -1650,9 +1658,9 @@ _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, int flags)
VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) {
if (flags & M_WAITOK) {
PMAP_UNLOCK(pmap);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
VM_WAIT;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
}
@@ -1993,7 +2001,7 @@ static __inline struct pv_chunk *
pv_to_chunk(pv_entry_t pv)
{
- return (struct pv_chunk *)((uintptr_t)pv & ~(uintptr_t)PAGE_MASK);
+ return ((struct pv_chunk *)((uintptr_t)pv & ~(uintptr_t)PAGE_MASK));
}
#define PV_PMAP(pv) (pv_to_chunk(pv)->pc_pmap)
@@ -2028,71 +2036,136 @@ SYSCTL_LONG(_vm_pmap, OID_AUTO, pv_entry_allocs, CTLFLAG_RD, &pv_entry_allocs, 0
"Current number of pv entry allocs");
SYSCTL_INT(_vm_pmap, OID_AUTO, pv_entry_spare, CTLFLAG_RD, &pv_entry_spare, 0,
"Current number of spare pv entries");
-
-static int pmap_collect_inactive, pmap_collect_active;
-
-SYSCTL_INT(_vm_pmap, OID_AUTO, pmap_collect_inactive, CTLFLAG_RD, &pmap_collect_inactive, 0,
- "Current number times pmap_collect called on inactive queue");
-SYSCTL_INT(_vm_pmap, OID_AUTO, pmap_collect_active, CTLFLAG_RD, &pmap_collect_active, 0,
- "Current number times pmap_collect called on active queue");
#endif
/*
* We are in a serious low memory condition. Resort to
* drastic measures to free some pages so we can allocate
- * another pv entry chunk. This is normally called to
- * unmap inactive pages, and if necessary, active pages.
+ * another pv entry chunk.
*
* We do not, however, unmap 2mpages because subsequent accesses will
* allocate per-page pv entries until repromotion occurs, thereby
* exacerbating the shortage of free pv entries.
*/
-static void
-pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq)
+static vm_page_t
+pmap_pv_reclaim(pmap_t locked_pmap)
{
+ struct pch newtail;
+ struct pv_chunk *pc;
+ struct md_page *pvh;
pd_entry_t *pde;
pmap_t pmap;
pt_entry_t *pte, tpte;
- pv_entry_t next_pv, pv;
+ pv_entry_t pv;
vm_offset_t va;
- vm_page_t m, free;
-
- TAILQ_FOREACH(m, &vpq->pl, pageq) {
- if ((m->flags & PG_MARKER) != 0 || m->hold_count || m->busy)
- continue;
- TAILQ_FOREACH_SAFE(pv, &m->md.pv_list, pv_list, next_pv) {
- va = pv->pv_va;
- pmap = PV_PMAP(pv);
+ vm_page_t free, m, m_pc;
+ uint64_t inuse, freemask;
+ int bit, field, freed;
+
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
+ PMAP_LOCK_ASSERT(locked_pmap, MA_OWNED);
+ pmap = NULL;
+ free = m_pc = NULL;
+ TAILQ_INIT(&newtail);
+ while ((pc = TAILQ_FIRST(&pv_chunks)) != NULL && free == NULL) {
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
+ if (pmap != pc->pc_pmap) {
+ if (pmap != NULL) {
+ pmap_invalidate_all(pmap);
+ if (pmap != locked_pmap)
+ PMAP_UNLOCK(pmap);
+ }
+ pmap = pc->pc_pmap;
/* Avoid deadlock and lock recursion. */
if (pmap > locked_pmap)
PMAP_LOCK(pmap);
- else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap))
+ else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap)) {
+ pmap = NULL;
+ TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
continue;
- pmap_resident_count_dec(pmap, 1);
- pde = pmap_pde(pmap, va);
- KASSERT((*pde & PG_PS) == 0, ("pmap_collect: found"
- " a 2mpage in page %p's pv list", m));
- pte = pmap_pde_to_pte(pde, va);
- tpte = pte_load_clear(pte);
- KASSERT((tpte & PG_W) == 0,
- ("pmap_collect: wired pte %#lx", tpte));
- if (tpte & PG_A)
- vm_page_aflag_set(m, PGA_REFERENCED);
- if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW))
- vm_page_dirty(m);
- free = NULL;
- pmap_unuse_pt(pmap, va, *pde, &free);
- pmap_invalidate_page(pmap, va);
- pmap_free_zero_pages(free);
- TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
- free_pv_entry(pmap, pv);
- if (pmap != locked_pmap)
- PMAP_UNLOCK(pmap);
+ }
}
- if (TAILQ_EMPTY(&m->md.pv_list) &&
- TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list))
- vm_page_aflag_clear(m, PGA_WRITEABLE);
+
+ /*
+ * Destroy every non-wired, 4 KB page mapping in the chunk.
+ */
+ freed = 0;
+ for (field = 0; field < _NPCM; field++) {
+ freemask = 0;
+ for (inuse = ~pc->pc_map[field] & pc_freemask[field];
+ inuse != 0; inuse &= ~(1UL << bit)) {
+ bit = bsfq(inuse);
+ pv = &pc->pc_pventry[field * 64 + bit];
+ va = pv->pv_va;
+ pde = pmap_pde(pmap, va);
+ if ((*pde & PG_PS) != 0)
+ continue;
+ pte = pmap_pde_to_pte(pde, va);
+ if ((*pte & PG_W) != 0)
+ continue;
+ tpte = pte_load_clear(pte);
+ if ((tpte & PG_G) != 0)
+ pmap_invalidate_page(pmap, va);
+ m = PHYS_TO_VM_PAGE(tpte & PG_FRAME);
+ if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW))
+ vm_page_dirty(m);
+ if ((tpte & PG_A) != 0)
+ vm_page_aflag_set(m, PGA_REFERENCED);
+ TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
+ if (TAILQ_EMPTY(&m->md.pv_list) &&
+ (m->flags & PG_FICTITIOUS) == 0) {
+ pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
+ if (TAILQ_EMPTY(&pvh->pv_list)) {
+ vm_page_aflag_clear(m,
+ PGA_WRITEABLE);
+ }
+ }
+ pmap_unuse_pt(pmap, va, *pde, &free);
+ freemask |= 1UL << bit;
+ freed++;
+ }
+ pc->pc_map[field] |= freemask;
+ }
+ if (freed == 0) {
+ TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
+ continue;
+ }
+ pmap_resident_count_dec(pmap, freed);
+ PV_STAT(pv_entry_frees += freed);
+ PV_STAT(pv_entry_spare += freed);
+ pv_entry_count -= freed;
+ TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
+ if (pc->pc_map[0] == PC_FREE0 && pc->pc_map[1] == PC_FREE1 &&
+ pc->pc_map[2] == PC_FREE2) {
+ PV_STAT(pv_entry_spare -= _NPCPV);
+ PV_STAT(pc_chunk_count--);
+ PV_STAT(pc_chunk_frees++);
+ /* Entire chunk is free; return it. */
+ m_pc = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc));
+ dump_drop_page(m_pc->phys_addr);
+ break;
+ }
+ TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list);
+ TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
+ /* One freed pv entry in locked_pmap is sufficient. */
+ if (pmap == locked_pmap)
+ break;
+ }
+ TAILQ_CONCAT(&pv_chunks, &newtail, pc_lru);
+ if (pmap != NULL) {
+ pmap_invalidate_all(pmap);
+ if (pmap != locked_pmap)
+ PMAP_UNLOCK(pmap);
}
+ if (m_pc == NULL && free != NULL) {
+ m_pc = free;
+ free = m_pc->right;
+ /* Recycle a freed page table page. */
+ m_pc->wire_count = 1;
+ atomic_add_int(&cnt.v_wire_count, 1);
+ }
+ pmap_free_zero_pages(free);
+ return (m_pc);
}
/*
@@ -2105,7 +2178,7 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv)
struct pv_chunk *pc;
int idx, field, bit;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
PV_STAT(pv_entry_frees++);
PV_STAT(pv_entry_spare++);
@@ -2125,6 +2198,7 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv)
return;
}
TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
PV_STAT(pv_entry_spare -= _NPCPV);
PV_STAT(pc_chunk_count--);
PV_STAT(pc_chunk_frees++);
@@ -2142,16 +2216,14 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv)
static pv_entry_t
get_pv_entry(pmap_t pmap, boolean_t try)
{
- struct vpgqueues *pq;
int bit, field;
pv_entry_t pv;
struct pv_chunk *pc;
vm_page_t m;
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
PV_STAT(pv_entry_allocs++);
- pq = NULL;
retry:
pc = TAILQ_FIRST(&pmap->pm_pvchunk);
if (pc != NULL) {
@@ -2171,35 +2243,26 @@ retry:
TAILQ_INSERT_TAIL(&pmap->pm_pvchunk, pc,
pc_list);
}
+ if (pc != TAILQ_LAST(&pv_chunks, pch)) {
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
+ TAILQ_INSERT_TAIL(&pv_chunks, pc, pc_lru);
+ }
pv_entry_count++;
PV_STAT(pv_entry_spare--);
return (pv);
}
}
/* No free items, allocate another chunk */
- m = vm_page_alloc(NULL, 0, (pq == &vm_page_queues[PQ_ACTIVE] ?
- VM_ALLOC_SYSTEM : VM_ALLOC_NORMAL) | VM_ALLOC_NOOBJ |
+ m = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ |
VM_ALLOC_WIRED);
if (m == NULL) {
if (try) {
PV_STAT(pc_chunk_tryfail++);
return (NULL);
}
- /*
- * Reclaim pv entries: At first, destroy mappings to inactive
- * pages. After that, if a pv chunk entry is still needed,
- * destroy mappings to active pages.
- */
- if (pq == NULL) {
- PV_STAT(pmap_collect_inactive++);
- pq = &vm_page_queues[PQ_INACTIVE];
- } else if (pq == &vm_page_queues[PQ_INACTIVE]) {
- PV_STAT(pmap_collect_active++);
- pq = &vm_page_queues[PQ_ACTIVE];
- } else
- panic("get_pv_entry: allocation failed");
- pmap_collect(pmap, pq);
- goto retry;
+ m = pmap_pv_reclaim(pmap);
+ if (m == NULL)
+ goto retry;
}
PV_STAT(pc_chunk_count++);
PV_STAT(pc_chunk_allocs++);
@@ -2209,6 +2272,7 @@ retry:
pc->pc_map[0] = PC_FREE0 & ~1ul; /* preallocated bit 0 */
pc->pc_map[1] = PC_FREE1;
pc->pc_map[2] = PC_FREE2;
+ TAILQ_INSERT_TAIL(&pv_chunks, pc, pc_lru);
pv = &pc->pc_pventry[0];
TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list);
pv_entry_count++;
@@ -2227,7 +2291,7 @@ pmap_pvh_remove(struct md_page *pvh, pmap_t pmap, vm_offset_t va)
{
pv_entry_t pv;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) {
if (pmap == PV_PMAP(pv) && va == pv->pv_va) {
TAILQ_REMOVE(&pvh->pv_list, pv, pv_list);
@@ -2250,7 +2314,7 @@ pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa)
vm_offset_t va_last;
vm_page_t m;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
KASSERT((pa & PDRMASK) == 0,
("pmap_pv_demote_pde: pa is not 2mpage aligned"));
@@ -2288,7 +2352,7 @@ pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa)
vm_offset_t va_last;
vm_page_t m;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
KASSERT((pa & PDRMASK) == 0,
("pmap_pv_promote_pde: pa is not 2mpage aligned"));
@@ -2334,7 +2398,7 @@ pmap_remove_entry(pmap_t pmap, vm_page_t m, vm_offset_t va)
{
struct md_page *pvh;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
pmap_pvh_free(&m->md, pmap, va);
if (TAILQ_EMPTY(&m->md.pv_list) && (m->flags & PG_FICTITIOUS) == 0) {
pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
@@ -2352,8 +2416,8 @@ pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m)
{
pv_entry_t pv;
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
pv = get_pv_entry(pmap, FALSE);
pv->pv_va = va;
TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
@@ -2367,8 +2431,8 @@ pmap_try_insert_pv_entry(pmap_t pmap, vm_offset_t va, vm_page_t m)
{
pv_entry_t pv;
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
if ((pv = get_pv_entry(pmap, TRUE)) != NULL) {
pv->pv_va = va;
TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
@@ -2386,7 +2450,7 @@ pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa)
struct md_page *pvh;
pv_entry_t pv;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
if ((pv = get_pv_entry(pmap, TRUE)) != NULL) {
pv->pv_va = va;
pvh = pa_to_pvh(pa);
@@ -2654,7 +2718,7 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
anyvalid = 0;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
/*
@@ -2764,7 +2828,7 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
out:
if (anyvalid)
pmap_invalidate_all(pmap);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
pmap_free_zero_pages(free);
}
@@ -2796,7 +2860,7 @@ pmap_remove_all(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_remove_all: page %p is not managed", m));
free = NULL;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
if ((m->flags & PG_FICTITIOUS) != 0)
goto small_mappings;
pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
@@ -2835,7 +2899,7 @@ small_mappings:
PMAP_UNLOCK(pmap);
}
vm_page_aflag_clear(m, PGA_WRITEABLE);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
pmap_free_zero_pages(free);
}
@@ -2956,12 +3020,12 @@ resume:
} else {
if (!pv_lists_locked) {
pv_lists_locked = TRUE;
- if (!mtx_trylock(&vm_page_queue_mtx)) {
+ if (!rw_try_wlock(&pvh_global_lock)) {
if (anychanged)
pmap_invalidate_all(
pmap);
PMAP_UNLOCK(pmap);
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
goto resume;
}
}
@@ -3012,7 +3076,7 @@ retry:
if (anychanged)
pmap_invalidate_all(pmap);
if (pv_lists_locked)
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
}
@@ -3167,7 +3231,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
mpte = NULL;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
/*
@@ -3323,7 +3387,7 @@ validate:
vm_reserv_level_iffullpop(m) == 0)
pmap_promote_pde(pmap, pde, va);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
}
@@ -3339,7 +3403,7 @@ pmap_enter_pde(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot)
pd_entry_t *pde, newpde;
vm_page_t free, mpde;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
if ((mpde = pmap_allocpde(pmap, va, M_NOWAIT)) == NULL) {
CTR2(KTR_PMAP, "pmap_enter_pde: failure for va %#lx"
@@ -3420,7 +3484,7 @@ pmap_enter_object(pmap_t pmap, vm_offset_t start, vm_offset_t end,
psize = atop(end - start);
mpte = NULL;
m = m_start;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) {
va = start + ptoa(diff);
@@ -3434,7 +3498,7 @@ pmap_enter_object(pmap_t pmap, vm_offset_t start, vm_offset_t end,
mpte);
m = TAILQ_NEXT(m, listq);
}
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
}
@@ -3451,10 +3515,10 @@ void
pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot)
{
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
(void)pmap_enter_quick_locked(pmap, va, m, prot, NULL);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
}
@@ -3469,7 +3533,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m,
KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva ||
(m->oflags & VPO_UNMANAGED) != 0,
("pmap_enter_quick_locked: managed mapping within the clean submap"));
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
/*
@@ -3688,9 +3752,9 @@ retry:
if (!wired != ((*pde & PG_W) == 0)) {
if (!are_queues_locked) {
are_queues_locked = TRUE;
- if (!mtx_trylock(&vm_page_queue_mtx)) {
+ if (!rw_try_wlock(&pvh_global_lock)) {
PMAP_UNLOCK(pmap);
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
goto retry;
}
}
@@ -3709,7 +3773,7 @@ retry:
}
out:
if (are_queues_locked)
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
}
@@ -3733,7 +3797,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len,
if (dst_addr != src_addr)
return;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
if (dst_pmap < src_pmap) {
PMAP_LOCK(dst_pmap);
PMAP_LOCK(src_pmap);
@@ -3849,7 +3913,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len,
}
}
out:
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(src_pmap);
PMAP_UNLOCK(dst_pmap);
}
@@ -3930,7 +3994,7 @@ pmap_page_exists_quick(pmap_t pmap, vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_page_exists_quick: page %p is not managed", m));
rv = FALSE;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) {
if (PV_PMAP(pv) == pmap) {
rv = TRUE;
@@ -3952,7 +4016,7 @@ pmap_page_exists_quick(pmap_t pmap, vm_page_t m)
break;
}
}
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (rv);
}
@@ -3970,13 +4034,13 @@ pmap_page_wired_mappings(vm_page_t m)
count = 0;
if ((m->oflags & VPO_UNMANAGED) != 0)
return (count);
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
count = pmap_pvh_wired_mappings(&m->md, count);
if ((m->flags & PG_FICTITIOUS) == 0) {
count = pmap_pvh_wired_mappings(pa_to_pvh(VM_PAGE_TO_PHYS(m)),
count);
}
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (count);
}
@@ -3992,7 +4056,7 @@ pmap_pvh_wired_mappings(struct md_page *pvh, int count)
pt_entry_t *pte;
pv_entry_t pv;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) {
pmap = PV_PMAP(pv);
PMAP_LOCK(pmap);
@@ -4015,11 +4079,11 @@ pmap_page_is_mapped(vm_page_t m)
if ((m->oflags & VPO_UNMANAGED) != 0)
return (FALSE);
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
rv = !TAILQ_EMPTY(&m->md.pv_list) ||
((m->flags & PG_FICTITIOUS) == 0 &&
!TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list));
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (rv);
}
@@ -4050,7 +4114,7 @@ pmap_remove_pages(pmap_t pmap)
printf("warning: pmap_remove_pages called with non-current pmap\n");
return;
}
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
TAILQ_FOREACH_SAFE(pc, &pmap->pm_pvchunk, pc_list, npc) {
allfree = 1;
@@ -4151,6 +4215,7 @@ pmap_remove_pages(pmap_t pmap)
PV_STAT(pc_chunk_count--);
PV_STAT(pc_chunk_frees++);
TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc));
dump_drop_page(m->phys_addr);
vm_page_unwire(m, 0);
@@ -4158,7 +4223,7 @@ pmap_remove_pages(pmap_t pmap)
}
}
pmap_invalidate_all(pmap);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
pmap_free_zero_pages(free);
}
@@ -4186,11 +4251,11 @@ pmap_is_modified(vm_page_t m)
if ((m->oflags & VPO_BUSY) == 0 &&
(m->aflags & PGA_WRITEABLE) == 0)
return (FALSE);
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
rv = pmap_is_modified_pvh(&m->md) ||
((m->flags & PG_FICTITIOUS) == 0 &&
pmap_is_modified_pvh(pa_to_pvh(VM_PAGE_TO_PHYS(m))));
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (rv);
}
@@ -4207,7 +4272,7 @@ pmap_is_modified_pvh(struct md_page *pvh)
pmap_t pmap;
boolean_t rv;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
rv = FALSE;
TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) {
pmap = PV_PMAP(pv);
@@ -4258,11 +4323,11 @@ pmap_is_referenced(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_is_referenced: page %p is not managed", m));
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
rv = pmap_is_referenced_pvh(&m->md) ||
((m->flags & PG_FICTITIOUS) == 0 &&
pmap_is_referenced_pvh(pa_to_pvh(VM_PAGE_TO_PHYS(m))));
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (rv);
}
@@ -4278,7 +4343,7 @@ pmap_is_referenced_pvh(struct md_page *pvh)
pmap_t pmap;
boolean_t rv;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
rv = FALSE;
TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) {
pmap = PV_PMAP(pv);
@@ -4317,7 +4382,7 @@ pmap_remove_write(vm_page_t m)
if ((m->oflags & VPO_BUSY) == 0 &&
(m->aflags & PGA_WRITEABLE) == 0)
return;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
if ((m->flags & PG_FICTITIOUS) != 0)
goto small_mappings;
pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
@@ -4351,7 +4416,7 @@ retry:
PMAP_UNLOCK(pmap);
}
vm_page_aflag_clear(m, PGA_WRITEABLE);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
}
/*
@@ -4379,7 +4444,7 @@ pmap_ts_referenced(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_ts_referenced: page %p is not managed", m));
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
if ((m->flags & PG_FICTITIOUS) != 0)
goto small_mappings;
pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
@@ -4437,7 +4502,7 @@ small_mappings:
} while ((pv = pvn) != NULL && pv != pvf);
}
out:
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (rtval);
}
@@ -4467,7 +4532,7 @@ pmap_clear_modify(vm_page_t m)
*/
if ((m->aflags & PGA_WRITEABLE) == 0)
return;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
if ((m->flags & PG_FICTITIOUS) != 0)
goto small_mappings;
pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
@@ -4516,7 +4581,7 @@ small_mappings:
}
PMAP_UNLOCK(pmap);
}
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
}
/*
@@ -4536,7 +4601,7 @@ pmap_clear_reference(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_clear_reference: page %p is not managed", m));
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
if ((m->flags & PG_FICTITIOUS) != 0)
goto small_mappings;
pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
@@ -4576,7 +4641,7 @@ small_mappings:
}
PMAP_UNLOCK(pmap);
}
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
}
/*
diff --git a/sys/amd64/include/in_cksum.h b/sys/amd64/include/in_cksum.h
index adfde8f22d1b..156035e8918b 100644
--- a/sys/amd64/include/in_cksum.h
+++ b/sys/amd64/include/in_cksum.h
@@ -43,6 +43,7 @@
#define in_cksum(m, len) in_cksum_skip(m, len, 0)
+#if defined(IPVERSION) && (IPVERSION == 4)
/*
* It it useful to have an Internet checksum routine which is inlineable
* and optimized specifically for the task of computing IP header checksums
@@ -69,9 +70,12 @@ in_cksum_update(struct ip *ip)
} while(0)
#endif
+#endif
#ifdef _KERNEL
+#if defined(IPVERSION) && (IPVERSION == 4)
u_int in_cksum_hdr(const struct ip *ip);
+#endif
u_short in_addword(u_short sum, u_short b);
u_short in_pseudo(u_int sum, u_int b, u_int c);
u_short in_cksum_skip(struct mbuf *m, int len, int skip);
diff --git a/sys/amd64/include/pmap.h b/sys/amd64/include/pmap.h
index 1b8108a3e3c6..48758ef8dc92 100644
--- a/sys/amd64/include/pmap.h
+++ b/sys/amd64/include/pmap.h
@@ -295,7 +295,7 @@ struct pv_chunk {
pmap_t pc_pmap;
TAILQ_ENTRY(pv_chunk) pc_list;
uint64_t pc_map[_NPCM]; /* bitmap; 1 = free */
- uint64_t pc_spare[2];
+ TAILQ_ENTRY(pv_chunk) pc_lru;
struct pv_entry pc_pventry[_NPCPV];
};
diff --git a/sys/amd64/linux32/linux32_proto.h b/sys/amd64/linux32/linux32_proto.h
index c8e0d3f8729d..204944571f44 100644
--- a/sys/amd64/linux32/linux32_proto.h
+++ b/sys/amd64/linux32/linux32_proto.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 234359 2012-04-16 23:16:18Z jkim
+ * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
#ifndef _LINUX_SYSPROTO_H_
@@ -60,8 +60,8 @@ struct linux_unlink_args {
};
struct linux_execve_args {
char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
- char argp_l_[PADL_(u_int32_t *)]; u_int32_t * argp; char argp_r_[PADR_(u_int32_t *)];
- char envp_l_[PADL_(u_int32_t *)]; u_int32_t * envp; char envp_r_[PADR_(u_int32_t *)];
+ char argp_l_[PADL_(uint32_t *)]; uint32_t * argp; char argp_r_[PADR_(uint32_t *)];
+ char envp_l_[PADL_(uint32_t *)]; uint32_t * envp; char envp_r_[PADR_(uint32_t *)];
};
struct linux_chdir_args {
char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
diff --git a/sys/amd64/linux32/linux32_syscall.h b/sys/amd64/linux32/linux32_syscall.h
index bba5e2d58fd9..5a411f87c921 100644
--- a/sys/amd64/linux32/linux32_syscall.h
+++ b/sys/amd64/linux32/linux32_syscall.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 234359 2012-04-16 23:16:18Z jkim
+ * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
#define LINUX_SYS_exit 1
diff --git a/sys/amd64/linux32/linux32_syscalls.c b/sys/amd64/linux32/linux32_syscalls.c
index 178ab1117bc7..ebde8997d9c0 100644
--- a/sys/amd64/linux32/linux32_syscalls.c
+++ b/sys/amd64/linux32/linux32_syscalls.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 234359 2012-04-16 23:16:18Z jkim
+ * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
const char *linux_syscallnames[] = {
diff --git a/sys/amd64/linux32/linux32_sysent.c b/sys/amd64/linux32/linux32_sysent.c
index ba7e0e314879..1ece240658a3 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 234359 2012-04-16 23:16:18Z jkim
+ * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
#include "opt_compat.h"
diff --git a/sys/amd64/linux32/linux32_systrace_args.c b/sys/amd64/linux32/linux32_systrace_args.c
index 16d93350b166..0b020a7350ef 100644
--- a/sys/amd64/linux32/linux32_systrace_args.c
+++ b/sys/amd64/linux32/linux32_systrace_args.c
@@ -94,8 +94,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 11: {
struct linux_execve_args *p = params;
uarg[0] = (intptr_t) p->path; /* char * */
- uarg[1] = (intptr_t) p->argp; /* u_int32_t * */
- uarg[2] = (intptr_t) p->envp; /* u_int32_t * */
+ uarg[1] = (intptr_t) p->argp; /* uint32_t * */
+ uarg[2] = (intptr_t) p->envp; /* uint32_t * */
*n_args = 3;
break;
}
@@ -2401,10 +2401,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "char *";
break;
case 1:
- p = "u_int32_t *";
+ p = "uint32_t *";
break;
case 2:
- p = "u_int32_t *";
+ p = "uint32_t *";
break;
default:
break;
diff --git a/sys/amd64/linux32/syscalls.master b/sys/amd64/linux32/syscalls.master
index a71e02d72d89..c3a10afeb0a3 100644
--- a/sys/amd64/linux32/syscalls.master
+++ b/sys/amd64/linux32/syscalls.master
@@ -54,8 +54,8 @@
l_int mode); }
9 AUE_LINK STD { int linux_link(char *path, char *to); }
10 AUE_UNLINK STD { int linux_unlink(char *path); }
-11 AUE_EXECVE STD { int linux_execve(char *path, u_int32_t *argp, \
- u_int32_t *envp); }
+11 AUE_EXECVE STD { int linux_execve(char *path, uint32_t *argp, \
+ uint32_t *envp); }
12 AUE_CHDIR STD { int linux_chdir(char *path); }
13 AUE_NULL STD { int linux_time(l_time_t *tm); }
14 AUE_MKNOD STD { int linux_mknod(char *path, l_int mode, \
diff --git a/sys/arm/arm/gdb_machdep.c b/sys/arm/arm/gdb_machdep.c
index eefb046ef901..2cccb7e60341 100644
--- a/sys/arm/arm/gdb_machdep.c
+++ b/sys/arm/arm/gdb_machdep.c
@@ -54,8 +54,12 @@ gdb_cpu_getreg(int regnum, size_t *regsz)
*regsz = gdb_cpu_regsz(regnum);
if (kdb_thread == curthread) {
- if (regnum < 15)
+ if (regnum < 13)
return (&kdb_frame->tf_r0 + regnum);
+ if (regnum == 13)
+ return (&kdb_frame->tf_svc_sp);
+ if (regnum == 14)
+ return (&kdb_frame->tf_svc_lr);
if (regnum == 15)
return (&kdb_frame->tf_pc);
if (regnum == 25)
diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c
index abd04a7f6574..1ec4bc41bedf 100644
--- a/sys/arm/arm/machdep.c
+++ b/sys/arm/arm/machdep.c
@@ -674,9 +674,9 @@ fake_preload_metadata(void)
static uint32_t fake_preload[35];
fake_preload[i++] = MODINFO_NAME;
- fake_preload[i++] = strlen("elf kernel") + 1;
- strcpy((char*)&fake_preload[i++], "elf kernel");
- i += 2;
+ fake_preload[i++] = strlen("kernel") + 1;
+ strcpy((char*)&fake_preload[i++], "kernel");
+ i += 1;
fake_preload[i++] = MODINFO_TYPE;
fake_preload[i++] = strlen("elf kernel") + 1;
strcpy((char*)&fake_preload[i++], "elf kernel");
diff --git a/sys/arm/arm/nexus.c b/sys/arm/arm/nexus.c
index bbde900734c8..422889e23acb 100644
--- a/sys/arm/arm/nexus.c
+++ b/sys/arm/arm/nexus.c
@@ -160,7 +160,7 @@ nexus_print_child(device_t bus, device_t child)
int retval = 0;
retval += bus_print_child_header(bus, child);
- retval += printf(" on motherboard\n"); /* XXX "motherboard", ick */
+ retval += printf("\n");
return (retval);
}
diff --git a/sys/arm/arm/pmap.c b/sys/arm/arm/pmap.c
index b6d8c768dfeb..5e49a440a06b 100644
--- a/sys/arm/arm/pmap.c
+++ b/sys/arm/arm/pmap.c
@@ -4557,9 +4557,59 @@ pmap_remove_write(vm_page_t m)
int
pmap_mincore(pmap_t pmap, vm_offset_t addr, vm_paddr_t *locked_pa)
{
- printf("pmap_mincore()\n");
-
- return (0);
+ struct l2_bucket *l2b;
+ pt_entry_t *ptep, pte;
+ vm_paddr_t pa;
+ vm_page_t m;
+ int val;
+ boolean_t managed;
+
+ PMAP_LOCK(pmap);
+retry:
+ l2b = pmap_get_l2_bucket(pmap, addr);
+ if (l2b == NULL) {
+ val = 0;
+ goto out;
+ }
+ ptep = &l2b->l2b_kva[l2pte_index(addr)];
+ pte = *ptep;
+ if (!l2pte_valid(pte)) {
+ val = 0;
+ goto out;
+ }
+ val = MINCORE_INCORE;
+ if (pte & L2_S_PROT_W)
+ val |= MINCORE_MODIFIED | MINCORE_MODIFIED_OTHER;
+ managed = false;
+ pa = l2pte_pa(pte);
+ m = PHYS_TO_VM_PAGE(pa);
+ if (m != NULL && !(m->oflags & VPO_UNMANAGED))
+ managed = true;
+ if (managed) {
+ /*
+ * the ARM pmap tries to maintain a per-mapping
+ * reference bit. The trouble is that it's kept in
+ * the PV entry, not the PTE, so it's costly to access
+ * here. You would need to acquire the page queues
+ * lock, call pmap_find_pv(), and introduce a custom
+ * version of vm_page_pa_tryrelock() that releases and
+ * reacquires the page queues lock. In the end, I
+ * doubt it's worthwhile. This may falsely report
+ * the given address as referenced.
+ */
+ if ((m->md.pvh_attrs & PVF_REF) != 0)
+ val |= MINCORE_REFERENCED | MINCORE_REFERENCED_OTHER;
+ }
+ if ((val & (MINCORE_MODIFIED_OTHER | MINCORE_REFERENCED_OTHER)) !=
+ (MINCORE_MODIFIED_OTHER | MINCORE_REFERENCED_OTHER) && managed) {
+ /* Ensure that "PHYS_TO_VM_PAGE(pa)->object" doesn't change. */
+ if (vm_page_pa_tryrelock(pmap, pa, locked_pa))
+ goto retry;
+ } else
+out:
+ PA_UNLOCK_COND(*locked_pa);
+ PMAP_UNLOCK(pmap);
+ return (val);
}
diff --git a/sys/arm/at91/at91.c b/sys/arm/at91/at91.c
index 3d55fd34fbeb..e9f27b59d0eb 100644
--- a/sys/arm/at91/at91.c
+++ b/sys/arm/at91/at91.c
@@ -56,11 +56,7 @@ extern const struct pmap_devmap at91_devmap[];
uint32_t at91_chip_id;
-#ifdef AT91C_MASTER_CLOCK
-uint32_t at91_master_clock = AT91C_MASTER_CLOCK;
-#else
uint32_t at91_master_clock;
-#endif
static int
at91_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flags,
@@ -69,11 +65,11 @@ at91_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flags,
vm_paddr_t pa, endpa;
pa = trunc_page(bpa);
- if (pa >= 0xfff00000) {
- *bshp = pa - 0xf0000000 + 0xd0000000;
+ if (pa >= AT91_PA_BASE + 0xff00000) {
+ *bshp = pa - AT91_PA_BASE + AT91_BASE;
return (0);
}
- if (pa >= 0xdff00000)
+ if (pa >= AT91_BASE + 0xff00000)
return (0);
endpa = round_page(bpa + size);
@@ -269,7 +265,7 @@ at91_attach(device_t dev)
sc->sc_mem_rman.rm_descr = "AT91 Memory";
if (rman_init(&sc->sc_mem_rman) != 0)
panic("at91_attach: failed to set up memory rman");
- for ( pdevmap = at91_devmap; pdevmap->pd_va != 0; pdevmap++) {
+ for (pdevmap = at91_devmap; pdevmap->pd_va != 0; pdevmap++) {
if (rman_manage_region(&sc->sc_mem_rman, pdevmap->pd_va,
pdevmap->pd_va + pdevmap->pd_size - 1) != 0)
panic("at91_attach: failed to set up memory rman");
diff --git a/sys/arm/at91/at91_machdep.c b/sys/arm/at91/at91_machdep.c
index a7eb5f6f81ee..28e691322e97 100644
--- a/sys/arm/at91/at91_machdep.c
+++ b/sys/arm/at91/at91_machdep.c
@@ -363,6 +363,7 @@ initarm(void *arg, void *arg2)
cninit();
+ at91_pmc_init_clock();
/* Get chip id so device drivers know about differences */
at91_chip_id = *(volatile uint32_t *)
(AT91_BASE + AT91_DBGU_BASE + DBGU_C1R);
diff --git a/sys/arm/at91/at91_pmc.c b/sys/arm/at91/at91_pmc.c
index 125e241a1b78..285d7eadff9d 100644
--- a/sys/arm/at91/at91_pmc.c
+++ b/sys/arm/at91/at91_pmc.c
@@ -55,13 +55,15 @@ static struct at91_pmc_softc {
bus_space_handle_t sc_sh;
struct resource *mem_res; /* Memory resource */
device_t dev;
- unsigned int main_clock_hz;
- uint32_t pllb_init;
} *pmc_softc;
+static uint32_t pllb_init;
+
MALLOC_DECLARE(M_PMC);
MALLOC_DEFINE(M_PMC, "at91_pmc_clocks", "AT91 PMC Clock descriptors");
+#define AT91_PMC_BASE 0xffffc00
+
static void at91_pmc_set_pllb_mode(struct at91_pmc_clock *, int);
static void at91_pmc_set_sys_mode(struct at91_pmc_clock *, int);
static void at91_pmc_set_periph_mode(struct at91_pmc_clock *, int);
@@ -147,22 +149,15 @@ static struct at91_pmc_clock *clock_list[16+32] = {
&cpu
};
-#if !defined(AT91C_MAIN_CLOCK)
-static const unsigned int at91_mainf_tbl[] = {
- 3000000, 3276800, 3686400, 3840000, 4000000,
- 4433619, 4915200, 5000000, 5242880, 6000000,
- 6144000, 6400000, 6553600, 7159090, 7372800,
- 7864320, 8000000, 9830400, 10000000, 11059200,
- 12000000, 12288000, 13560000, 14318180, 14745600,
- 16000000, 17344700, 18432000, 20000000
-};
-#define MAINF_TBL_LEN (sizeof(at91_mainf_tbl) / sizeof(*at91_mainf_tbl))
-#endif
-
static inline uint32_t
RD4(struct at91_pmc_softc *sc, bus_size_t off)
{
+ if (sc == NULL) {
+ uint32_t *p = (uint32_t *)(AT91_BASE + AT91_PMC_BASE + off);
+
+ return *p;
+ }
return (bus_read_4(sc->mem_res, off));
}
@@ -170,7 +165,12 @@ static inline void
WR4(struct at91_pmc_softc *sc, bus_size_t off, uint32_t val)
{
- bus_write_4(sc->mem_res, off, val);
+ if (sc == NULL) {
+ uint32_t *p = (uint32_t *)(AT91_BASE + AT91_PMC_BASE + off);
+
+ *p = val;
+ } else
+ bus_write_4(sc->mem_res, off, val);
}
void
@@ -181,7 +181,7 @@ at91_pmc_set_pllb_mode(struct at91_pmc_clock *clk, int on)
if (on) {
on = PMC_IER_LOCKB;
- value = sc->pllb_init;
+ value = pllb_init;
} else
value = 0;
@@ -401,18 +401,72 @@ fail:
return (0);
}
-static void
-at91_pmc_init_clock(struct at91_pmc_softc *sc, unsigned int main_clock)
+#if !defined(AT91C_MAIN_CLOCK)
+static const unsigned int at91_main_clock_tbl[] = {
+ 3000000, 3276800, 3686400, 3840000, 4000000,
+ 4433619, 4915200, 5000000, 5242880, 6000000,
+ 6144000, 6400000, 6553600, 7159090, 7372800,
+ 7864320, 8000000, 9830400, 10000000, 11059200,
+ 12000000, 12288000, 13560000, 14318180, 14745600,
+ 16000000, 17344700, 18432000, 20000000
+};
+#define MAIN_CLOCK_TBL_LEN (sizeof(at91_main_clock_tbl) / sizeof(*at91_main_clock_tbl))
+#endif
+
+static unsigned int
+at91_pmc_sense_main_clock(void)
+{
+#if !defined(AT91C_MAIN_CLOCK)
+ unsigned int ckgr_val;
+ unsigned int diff, matchdiff, freq;
+ int i;
+
+ ckgr_val = (RD4(NULL, CKGR_MCFR) & CKGR_MCFR_MAINF_MASK) << 11;
+
+ /*
+ * Clocks up to 50MHz can be connected to some models. If
+ * the frequency is >= 21MHz, assume that the slow clock can
+ * measure it correctly, and that any error can be adequately
+ * compensated for by roudning to the nearest 500Hz. Users
+ * with fast, or odd-ball clocks will need to set
+ * AT91C_MASTER_CLOCK in the kernel config file.
+ */
+ if (ckgr_val >= 21000000)
+ return ((ckgr_val + 250) / 500 * 500);
+
+ /*
+ * Try to find the standard frequency that match best.
+ */
+ freq = at91_main_clock_tbl[0];
+ matchdiff = abs(ckgr_val - at91_main_clock_tbl[0]);
+ for (i = 1; i < MAIN_CLOCK_TBL_LEN; i++) {
+ diff = abs(ckgr_val - at91_main_clock_tbl[i]);
+ if (diff < matchdiff) {
+ freq = at91_main_clock_tbl[i];
+ matchdiff = diff;
+ }
+ }
+ return (freq);
+#else
+ return (AT91C_MAIN_CLOCK);
+#endif
+}
+
+void
+at91_pmc_init_clock(void)
{
+ struct at91_pmc_softc *sc = NULL;
+ unsigned int main_clock;
uint32_t mckr;
uint32_t mdiv;
+ main_clock = at91_pmc_sense_main_clock();
+
if (at91_is_sam9() || at91_is_sam9xe()) {
uhpck.pmc_mask = PMC_SCER_UHP_SAM9;
udpck.pmc_mask = PMC_SCER_UDP_SAM9;
}
mckr = RD4(sc, PMC_MCKR);
- sc->main_clock_hz = main_clock;
main_ck.hz = main_clock;
at91_pmc_pll_rate(&plla, RD4(sc, CKGR_PLLAR));
@@ -424,8 +478,8 @@ at91_pmc_init_clock(struct at91_pmc_softc *sc, unsigned int main_clock)
* Initialize the usb clock. This sets up pllb, but disables the
* actual clock.
*/
- sc->pllb_init = at91_pmc_pll_calc(&pllb, 48000000 * 2) | 0x10000000;
- at91_pmc_pll_rate(&pllb, sc->pllb_init);
+ pllb_init = at91_pmc_pll_calc(&pllb, 48000000 * 2) | 0x10000000;
+ at91_pmc_pll_rate(&pllb, pllb_init);
#if 0
/* Turn off USB clocks */
@@ -463,11 +517,9 @@ at91_pmc_init_clock(struct at91_pmc_softc *sc, unsigned int main_clock)
at91_master_clock = mck.hz;
- device_printf(sc->dev,
- "Primary: %d Hz PLLA: %d MHz CPU: %d MHz MCK: %d MHz\n",
- sc->main_clock_hz,
- plla.hz / 1000000,
- cpu.hz / 1000000, mck.hz / 1000000);
+ /* These clocks refrenced by "special" names */
+ at91_pmc_clock_alias("ohci0", "ohci_clk");
+ at91_pmc_clock_alias("udp0", "udp_clk");
/* Turn off "Progamable" clocks */
WR4(sc, PMC_SCDR, PMC_SCER_PCK0 | PMC_SCER_PCK1 | PMC_SCER_PCK2 |
@@ -519,36 +571,9 @@ at91_pmc_probe(device_t dev)
return (0);
}
-#if !defined(AT91C_MAIN_CLOCK)
-static unsigned int
-at91_pmc_sense_mainf(struct at91_pmc_softc *sc)
-{
- unsigned int ckgr_val;
- unsigned int diff, matchdiff;
- int i, match;
-
- ckgr_val = (RD4(sc, CKGR_MCFR) & CKGR_MCFR_MAINF_MASK) << 11;
-
- /*
- * Try to find the standard frequency that match best.
- */
- match = 0;
- matchdiff = abs(ckgr_val - at91_mainf_tbl[0]);
- for (i = 1; i < MAINF_TBL_LEN; i++) {
- diff = abs(ckgr_val - at91_mainf_tbl[i]);
- if (diff < matchdiff) {
- match = i;
- matchdiff = diff;
- }
- }
- return (at91_mainf_tbl[match]);
-}
-#endif
-
static int
at91_pmc_attach(device_t dev)
{
- unsigned int mainf;
int err;
pmc_softc = device_get_softc(dev);
@@ -559,16 +584,16 @@ at91_pmc_attach(device_t dev)
/*
* Configure main clock frequency.
*/
-#if !defined(AT91C_MAIN_CLOCK)
- mainf = at91_pmc_sense_mainf(pmc_softc);
-#else
- mainf = AT91C_MAIN_CLOCK;
-#endif
- at91_pmc_init_clock(pmc_softc, mainf);
+ at91_pmc_init_clock();
- /* These clocks refrenced by "special" names */
- at91_pmc_clock_alias("ohci0", "ohci_clk");
- at91_pmc_clock_alias("udp0", "udp_clk");
+ /*
+ * Display info about clocks previously computed
+ */
+ device_printf(dev,
+ "Primary: %d Hz PLLA: %d MHz CPU: %d MHz MCK: %d MHz\n",
+ main_ck.hz,
+ plla.hz / 1000000,
+ cpu.hz / 1000000, mck.hz / 1000000);
return (0);
}
diff --git a/sys/arm/at91/at91reg.h b/sys/arm/at91/at91reg.h
index 692d36c5a4c1..7493de8c92cb 100644
--- a/sys/arm/at91/at91reg.h
+++ b/sys/arm/at91/at91reg.h
@@ -35,6 +35,9 @@
/* Where builtin peripherals start in KVM */
#define AT91_BASE 0xd0000000
+/* Where builtin peripherals start PA */
+#define AT91_PA_BASE 0xf0000000
+
/* A few things that we count on being the same
* throught the whole family of SOCs */
diff --git a/sys/arm/at91/at91rm92reg.h b/sys/arm/at91/at91rm92reg.h
index 8241646a3dd8..401d67ca3c06 100644
--- a/sys/arm/at91/at91rm92reg.h
+++ b/sys/arm/at91/at91rm92reg.h
@@ -403,10 +403,6 @@
#define AT91RM92_CF_PA_BASE 0x51400000
#define AT91RM92_CF_SIZE 0x00100000
-#ifndef AT91C_MASTER_CLOCK
-#define AT91C_MASTER_CLOCK 60000000
-#endif
-
/* SDRAMC */
#define AT91RM92_SDRAMC_BASE 0xfffff90
diff --git a/sys/arm/at91/at91sam9260reg.h b/sys/arm/at91/at91sam9260reg.h
index c790c2cf9e4b..2f347a474d8f 100644
--- a/sys/arm/at91/at91sam9260reg.h
+++ b/sys/arm/at91/at91sam9260reg.h
@@ -28,10 +28,6 @@
#ifndef AT91SAM9260REG_H_
#define AT91SAM9260REG_H_
-#ifndef AT91SAM9260_MASTER_CLOCK
-#define AT91SAM9260_MASTER_CLOCK ((18432000 * 43)/6)
-#endif
-
/* Chip Specific limits */
#define SAM9260_PLL_A_MIN_IN_FREQ 1000000 /* 1 Mhz */
#define SAM9260_PLL_A_MAX_IN_FREQ 32000000 /* 32 Mhz */
diff --git a/sys/arm/at91/at91sam9g20reg.h b/sys/arm/at91/at91sam9g20reg.h
index 41c328aa5a68..4ab0353d3f20 100644
--- a/sys/arm/at91/at91sam9g20reg.h
+++ b/sys/arm/at91/at91sam9g20reg.h
@@ -29,10 +29,6 @@
#ifndef AT91SAM9G20REG_H_
#define AT91SAM9G20REG_H_
-#ifndef AT91SAM9G20_MASTER_CLOCK
-#define AT91SAM9G20_MASTER_CLOCK ((18432000 * 43)/6)
-#endif
-
/* Chip Specific limits */
#define SAM9G20_PLL_A_MIN_IN_FREQ 2000000 /* 2 Mhz */
#define SAM9G20_PLL_A_MAX_IN_FREQ 32000000 /* 32 Mhz */
diff --git a/sys/arm/at91/at91var.h b/sys/arm/at91/at91var.h
index 9bd0265fc83e..be82eeeba456 100644
--- a/sys/arm/at91/at91var.h
+++ b/sys/arm/at91/at91var.h
@@ -97,4 +97,6 @@ at91_cpu_is(u_int cpu)
extern uint32_t at91_irq_system;
extern uint32_t at91_master_clock;
+void at91_pmc_init_clock(void);
+
#endif /* _AT91VAR_H_ */
diff --git a/sys/arm/at91/std.ethernut5 b/sys/arm/at91/std.ethernut5
index 684d606d6fdc..90b6755e84ee 100644
--- a/sys/arm/at91/std.ethernut5
+++ b/sys/arm/at91/std.ethernut5
@@ -7,8 +7,5 @@ makeoptions KERNVIRTADDR=0xc0000000
options KERNPHYSADDR=0x20000000
options KERNVIRTADDR=0xc0000000
-# SAM9XE512 w/ 90.3168 MHz master clock
-options AT91C_MASTER_CLOCK=90316800
-
device at91_board_ethernut5
nodevice at91sam9g20
diff --git a/sys/arm/at91/std.hl200 b/sys/arm/at91/std.hl200
index 3f99b49be88a..f48f72367162 100644
--- a/sys/arm/at91/std.hl200
+++ b/sys/arm/at91/std.hl200
@@ -6,6 +6,5 @@ makeoptions KERNPHYSADDR=0x20100000
options KERNPHYSADDR=0x20100000
makeoptions KERNVIRTADDR=0xc0100000
options KERNVIRTADDR=0xc0100000
-options AT91C_MASTER_CLOCK=45000000
device at91_board_hl200
diff --git a/sys/arm/at91/std.hl201 b/sys/arm/at91/std.hl201
index 2d7d92605067..86022b61137f 100644
--- a/sys/arm/at91/std.hl201
+++ b/sys/arm/at91/std.hl201
@@ -6,6 +6,5 @@ makeoptions KERNPHYSADDR=0x20000000
makeoptions KERNVIRTADDR=0xc0000000
options KERNPHYSADDR=0x20000000
options KERNVIRTADDR=0xc0000000
-options AT91C_MASTER_CLOCK=132000000
device at91_board_hl201
diff --git a/sys/arm/at91/std.kb920x b/sys/arm/at91/std.kb920x
index 26d0443f28f5..85c8d038bf7b 100644
--- a/sys/arm/at91/std.kb920x
+++ b/sys/arm/at91/std.kb920x
@@ -6,6 +6,5 @@ makeoptions KERNPHYSADDR=0x20000000
options KERNPHYSADDR=0x20000000
makeoptions KERNVIRTADDR=0xc0000000
options KERNVIRTADDR=0xc0000000
-options AT91C_MASTER_CLOCK=60000000
device at91_board_kb920x
diff --git a/sys/arm/at91/std.qila9g20 b/sys/arm/at91/std.qila9g20
index 007cdf5f8ba6..4595d4e4c9a0 100644
--- a/sys/arm/at91/std.qila9g20
+++ b/sys/arm/at91/std.qila9g20
@@ -6,6 +6,5 @@ makeoptions KERNPHYSADDR=0x20000000
makeoptions KERNVIRTADDR=0xc0000000
options KERNPHYSADDR=0x20000000
options KERNVIRTADDR=0xc0000000
-options AT91C_MASTER_CLOCK=((12000000*133)/12)
device at91_board_qila9g20
diff --git a/sys/arm/at91/std.sam9g20ek b/sys/arm/at91/std.sam9g20ek
index c5509c5ced64..f600d9ce94f5 100644
--- a/sys/arm/at91/std.sam9g20ek
+++ b/sys/arm/at91/std.sam9g20ek
@@ -7,9 +7,4 @@ makeoptions KERNVIRTADDR=0xc0000000
options KERNPHYSADDR=0x20000000
options KERNVIRTADDR=0xc0000000
-#SAM9G20 w/ 18.432 Mhz Clock
-#options AT91C_MASTER_CLOCK=((18432000*43)/6)
-#SAM9260 w/ 18.432 Mhz Clock
-#options AT91C_MASTER_CLOCK=((18432000*97)/18)
-
device at91_board_sam9g20ek
diff --git a/sys/arm/conf/DB-78XXX b/sys/arm/conf/DB-78XXX
index 218bea983cab..f3e62f5b61a9 100644
--- a/sys/arm/conf/DB-78XXX
+++ b/sys/arm/conf/DB-78XXX
@@ -17,6 +17,7 @@ options SCHED_4BSD #4BSD scheduler
options INET #InterNETworking
options INET6 #IPv6 communications protocols
options FFS #Berkeley Fast Filesystem
+options NANDFS #NAND Filesystem
options NFSCL #New Network Filesystem Client
options NFSLOCKD #Network Lock Manager
options NFS_ROOT #NFS usable as /, requires NFSCL
@@ -82,6 +83,10 @@ device ds133x
# SATA
device mvs
+# NAND
+device nand
+
# Flattened Device Tree
options FDT
+options FDT_DTB_STATIC
makeoptions FDT_DTS_FILE=db78100.dts
diff --git a/sys/arm/conf/DB-88F6XXX b/sys/arm/conf/DB-88F6XXX
index 7081117bc165..cf508ad77259 100644
--- a/sys/arm/conf/DB-88F6XXX
+++ b/sys/arm/conf/DB-88F6XXX
@@ -17,6 +17,7 @@ options SCHED_4BSD #4BSD scheduler
options INET #InterNETworking
options INET6 #IPv6 communications protocols
options FFS #Berkeley Fast Filesystem
+options NANDFS #NAND Filesystem
options NFSCL #New Network Filesystem Client
options NFSLOCKD #Network Lock Manager
options NFS_ROOT #NFS usable as /, requires NFSCL
@@ -85,6 +86,10 @@ device iicbus
# SATA
device mvs
+# NAND
+device nand
+
# Flattened Device Tree
options FDT
+options FDT_DTB_STATIC
makeoptions FDT_DTS_FILE=db88f6281.dts
diff --git a/sys/arm/conf/ETHERNUT5 b/sys/arm/conf/ETHERNUT5
index 1dbaa47b8359..31c278bc5857 100644
--- a/sys/arm/conf/ETHERNUT5
+++ b/sys/arm/conf/ETHERNUT5
@@ -141,7 +141,7 @@ device ether # Ethernet support
#device sa # Sequential Access (tape etc)
#device cd # CD
#device pass # Passthrough device (direct ATA/SCSI access)
-#device ses # SCSI Environmental Services (and SAF-TE)
+#device ses # Enclosure Services (SES and SAF-TE)
#device ctl # CAM Target Layer
# Serial (COM) ports
diff --git a/sys/arm/conf/ETHERNUT5.hints b/sys/arm/conf/ETHERNUT5.hints
index 8ab53e9cf8ed..6ab41a1cd643 100644
--- a/sys/arm/conf/ETHERNUT5.hints
+++ b/sys/arm/conf/ETHERNUT5.hints
@@ -27,18 +27,24 @@ hint.map.3.start=0x000c6000
hint.map.3.end=0x00359fff
hint.map.3.name="kernel"
#hint.map.3.readonly=1
-# nutos 3432 kbytes
+# nutos 528 kbytes
hint.map.4.at="flash/spi0"
hint.map.4.start=0x0035a000
hint.map.4.end=0x003ddfff
hint.map.4.name="nutos"
hint.map.4.readonly=1
-# env 3960 kbytes
+# env 132 kbytes
hint.map.5.at="flash/spi0"
hint.map.5.start=0x003de000
hint.map.5.end=0x003fefff
hint.map.5.name="env"
hint.map.5.readonly=1
+# env 132 kbytes
+hint.map.6.at="flash/spi0"
+hint.map.6.start=0x003ff000
+hint.map.6.end=0x0041ffff
+hint.map.6.name="nutoscfg"
+hint.map.6.readonly=1
# NXP PCF8563 clock/calendar
hint.pcf8563_rtc.0.at="iicbus0"
diff --git a/sys/arm/conf/SHEEVAPLUG b/sys/arm/conf/SHEEVAPLUG
index 29d37f4b39f1..e7ac524acadd 100644
--- a/sys/arm/conf/SHEEVAPLUG
+++ b/sys/arm/conf/SHEEVAPLUG
@@ -17,6 +17,7 @@ options SCHED_4BSD #4BSD scheduler
options INET #InterNETworking
options INET6 #IPv6 communications protocols
options FFS #Berkeley Fast Filesystem
+options NANDFS #NAND Filesystem
options NFSCL #New Network Filesystem Client
options NFSLOCKD #Network Lock Manager
options NFS_ROOT #NFS usable as /, requires NFSCL
@@ -72,6 +73,9 @@ device scbus
device pass
device da
+# NAND
+device nand
+
# Flattened Device Tree
options FDT
options FDT_DTB_STATIC
diff --git a/sys/arm/include/fdt.h b/sys/arm/include/fdt.h
index c7290aca129e..a342b7f27eba 100644
--- a/sys/arm/include/fdt.h
+++ b/sys/arm/include/fdt.h
@@ -57,6 +57,7 @@ struct mem_region {
vm_size_t mr_size;
};
+int fdt_localbus_devmap(phandle_t, struct pmap_devmap *, int, int *);
int fdt_pci_devmap(phandle_t, struct pmap_devmap *devmap, vm_offset_t,
vm_offset_t);
diff --git a/sys/arm/include/in_cksum.h b/sys/arm/include/in_cksum.h
index 8862f282f0a6..8a0ec1dc8a51 100644
--- a/sys/arm/include/in_cksum.h
+++ b/sys/arm/include/in_cksum.h
@@ -46,7 +46,9 @@ u_short in_cksum(struct mbuf *m, int len);
u_short in_addword(u_short sum, u_short b);
u_short in_cksum_skip(struct mbuf *m, int len, int skip);
u_int do_cksum(const void *, int);
+#if defined(IPVERSION) && (IPVERSION == 4)
u_int in_cksum_hdr(const struct ip *);
+#endif
static __inline u_short
in_pseudo(u_int sum, u_int b, u_int c)
diff --git a/sys/arm/include/pmc_mdep.h b/sys/arm/include/pmc_mdep.h
index 185fbd1744c0..ab08d3664486 100644
--- a/sys/arm/include/pmc_mdep.h
+++ b/sys/arm/include/pmc_mdep.h
@@ -54,6 +54,12 @@ union pmc_md_pmc {
#define PMC_TRAPFRAME_TO_FP(TF) ((TF)->tf_usr_lr)
#define PMC_TRAPFRAME_TO_SP(TF) ((TF)->tf_usr_sp)
+/* Build a fake kernel trapframe from current instruction pointer. */
+#define PMC_FAKE_TRAPFRAME(TF) \
+ do { \
+ __asm __volatile("mov %0, pc" : "=r" ((TF)->tf_pc)); \
+ } while (0)
+
/*
* Prototypes
*/
diff --git a/sys/arm/mv/discovery/discovery.c b/sys/arm/mv/discovery/discovery.c
index 1220c8db676e..3968b78d4cc7 100644
--- a/sys/arm/mv/discovery/discovery.c
+++ b/sys/arm/mv/discovery/discovery.c
@@ -43,6 +43,30 @@ __FBSDID("$FreeBSD$");
#include <arm/mv/mvvar.h>
#include <arm/mv/mvwin.h>
+/*
+ * Virtual address space layout:
+ * -----------------------------
+ * 0x0000_0000 - 0xBFFF_FFFF : User Process (3 GB)
+ * 0xC000_0000 - virtual_avail : Kernel Reserved (text, data, page tables,
+ * : stack etc.)
+ * virtual-avail - 0xEFFF_FFFF : KVA (virtual_avail is typically < 0xc0a0_0000)
+ * 0xF000_0000 - 0xF0FF_FFFF : No-Cache allocation area (16 MB)
+ * 0xF100_0000 - 0xF10F_FFFF : SoC Integrated devices registers range (1 MB)
+ * 0xF110_0000 - 0xF11F_FFFF : PCI-Express I/O space (1MB)
+ * 0xF120_0000 - 0xF12F_FFFF : PCI I/O space (1MB)
+ * 0xF130_0000 - 0xF52F_FFFF : PCI-Express memory space (64MB)
+ * 0xF530_0000 - 0xF92F_FFFF : PCI memory space (64MB)
+ * 0xF930_0000 - 0xF93F_FFFF : Device Bus: BOOT (1 MB)
+ * 0xF940_0000 - 0xF94F_FFFF : Device Bus: CS0 (1 MB)
+ * 0xF950_0000 - 0xFB4F_FFFF : Device Bus: CS1 (32 MB)
+ * 0xFB50_0000 - 0xFB5F_FFFF : Device Bus: CS2 (1 MB)
+ * 0xFB60_0000 - 0xFFFE_FFFF : Unused (~74MB)
+ * 0xFFFF_0000 - 0xFFFF_0FFF : 'High' vectors page (4 kB)
+ * 0xFFFF_1000 - 0xFFFF_1FFF : ARM_TP_ADDRESS/RAS page (4 kB)
+ * 0xFFFF_2000 - 0xFFFF_FFFF : Unused (56 kB)
+ */
+
+
struct resource_spec mv_gpio_res[] = {
{ SYS_RES_MEMORY, 0, RF_ACTIVE },
{ SYS_RES_IRQ, 0, RF_ACTIVE },
diff --git a/sys/arm/mv/files.mv b/sys/arm/mv/files.mv
index 7c1ef4972ff2..7f15deb5af09 100644
--- a/sys/arm/mv/files.mv
+++ b/sys/arm/mv/files.mv
@@ -22,6 +22,7 @@ arm/mv/bus_space.c standard
arm/mv/common.c standard
arm/mv/gpio.c standard
arm/mv/ic.c standard
+arm/mv/mv_localbus.c standard
arm/mv/mv_machdep.c standard
arm/mv/mv_pci.c optional pci
arm/mv/mv_sata.c optional ata | atamvsata
@@ -30,6 +31,7 @@ arm/mv/twsi.c optional iicbus
dev/cesa/cesa.c optional cesa
dev/mge/if_mge.c optional mge
+dev/nand/nfc_mv.c optional nand
dev/mvs/mvs_soc.c optional mvs
dev/uart/uart_dev_ns8250.c optional uart
dev/usb/controller/ehci_mv.c optional ehci
diff --git a/sys/arm/mv/mv_localbus.c b/sys/arm/mv/mv_localbus.c
new file mode 100644
index 000000000000..09f9348ba8d3
--- /dev/null
+++ b/sys/arm/mv/mv_localbus.c
@@ -0,0 +1,490 @@
+/*-
+ * Copyright (c) 2012 Semihalf.
+ * 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 "opt_platform.h"
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/ktr.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/bus.h>
+#include <sys/rman.h>
+#include <sys/malloc.h>
+
+#include <machine/fdt.h>
+
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+#include <dev/ofw/openfirm.h>
+
+#include "dev/fdt/fdt_common.h"
+#include "ofw_bus_if.h"
+
+#include <arm/mv/mvwin.h>
+
+#ifdef DEBUG
+#define debugf(fmt, args...) do { printf("%s(): ", __func__); \
+ printf(fmt,##args); } while (0)
+#else
+#define debugf(fmt, args...)
+#endif
+
+#define MV_LOCALBUS_MAX_BANKS 8
+#define MV_LOCALBUS_MAX_BANK_CELLS 4
+
+static MALLOC_DEFINE(M_LOCALBUS, "localbus", "localbus devices information");
+
+struct localbus_bank {
+ vm_offset_t va; /* VA of the bank */
+ vm_paddr_t pa; /* physical address of the bank */
+ vm_size_t size; /* bank size */
+ uint8_t mapped; /* device memory has mapping */
+};
+
+struct localbus_softc {
+ device_t sc_dev;
+ bus_space_handle_t sc_bsh;
+ bus_space_tag_t sc_bst;
+ int sc_rid;
+
+ struct localbus_bank *sc_banks;
+};
+
+struct localbus_devinfo {
+ struct ofw_bus_devinfo di_ofw;
+ struct resource_list di_res;
+ int di_bank;
+};
+
+struct localbus_va_entry {
+ int8_t bank;
+ vm_offset_t va;
+ vm_size_t size;
+};
+
+/*
+ * Prototypes.
+ */
+static int localbus_probe(device_t);
+static int localbus_attach(device_t);
+static int localbus_print_child(device_t, device_t);
+
+static struct resource *localbus_alloc_resource(device_t, device_t, int,
+ int *, u_long, u_long, u_long, u_int);
+static struct resource_list *localbus_get_resource_list(device_t, device_t);
+
+static ofw_bus_get_devinfo_t localbus_get_devinfo;
+
+/*
+ * Bus interface definition.
+ */
+static device_method_t localbus_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, localbus_probe),
+ DEVMETHOD(device_attach, localbus_attach),
+ DEVMETHOD(device_detach, bus_generic_detach),
+ DEVMETHOD(device_shutdown, bus_generic_shutdown),
+ DEVMETHOD(device_suspend, bus_generic_suspend),
+ DEVMETHOD(device_resume, bus_generic_resume),
+
+ /* Bus interface */
+ DEVMETHOD(bus_print_child, localbus_print_child),
+ DEVMETHOD(bus_alloc_resource, localbus_alloc_resource),
+ DEVMETHOD(bus_release_resource, bus_generic_release_resource),
+ DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
+ DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
+ DEVMETHOD(bus_setup_intr, bus_generic_setup_intr),
+ DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr),
+ DEVMETHOD(bus_get_resource_list, localbus_get_resource_list),
+
+ /* OFW bus interface */
+ DEVMETHOD(ofw_bus_get_devinfo, localbus_get_devinfo),
+ DEVMETHOD(ofw_bus_get_compat, ofw_bus_gen_get_compat),
+ DEVMETHOD(ofw_bus_get_model, ofw_bus_gen_get_model),
+ DEVMETHOD(ofw_bus_get_name, ofw_bus_gen_get_name),
+ DEVMETHOD(ofw_bus_get_node, ofw_bus_gen_get_node),
+ DEVMETHOD(ofw_bus_get_type, ofw_bus_gen_get_type),
+
+ { 0, 0 }
+};
+
+static driver_t localbus_driver = {
+ "localbus",
+ localbus_methods,
+ sizeof(struct localbus_softc)
+};
+
+const struct localbus_va_entry localbus_virtmap[] = {
+ { 0, MV_DEV_BOOT_BASE, MV_DEV_BOOT_SIZE },
+ { 1, MV_DEV_CS0_BASE, MV_DEV_CS0_SIZE },
+ { 2, MV_DEV_CS1_BASE, MV_DEV_CS1_SIZE },
+ { 3, MV_DEV_CS2_BASE, MV_DEV_CS2_SIZE },
+
+ { -1, 0, 0 }
+};
+
+static struct localbus_bank localbus_banks[MV_LOCALBUS_MAX_BANKS];
+
+devclass_t localbus_devclass;
+
+DRIVER_MODULE(localbus, fdtbus, localbus_driver, localbus_devclass, 0, 0);
+
+static int
+fdt_localbus_reg_decode(phandle_t node, struct localbus_softc *sc,
+ struct localbus_devinfo *di)
+{
+ u_long start, end, count;
+ pcell_t *reg, *regptr;
+ pcell_t addr_cells, size_cells;
+ int tuple_size, tuples;
+ int i, rv, bank;
+
+ if (fdt_addrsize_cells(OF_parent(node), &addr_cells, &size_cells) != 0)
+ return (ENXIO);
+
+ tuple_size = sizeof(pcell_t) * (addr_cells + size_cells);
+ tuples = OF_getprop_alloc(node, "reg", tuple_size, (void **)&reg);
+ debugf("addr_cells = %d, size_cells = %d\n", addr_cells, size_cells);
+ debugf("tuples = %d, tuple size = %d\n", tuples, tuple_size);
+ if (tuples <= 0)
+ /* No 'reg' property in this node. */
+ return (0);
+
+ regptr = reg;
+ for (i = 0; i < tuples; i++) {
+
+ bank = fdt_data_get((void *)regptr, 1);
+
+ if (bank >= MV_LOCALBUS_MAX_BANKS) {
+ device_printf(sc->sc_dev, "bank number [%d] out of "
+ "range\n", bank);
+ continue;
+ }
+
+ /*
+ * If device doesn't have virtual to physical mapping don't add
+ * resources
+ */
+ if (!(sc->sc_banks[bank].mapped)) {
+ device_printf(sc->sc_dev, "device [%d]: missing memory "
+ "mapping\n", bank);
+ continue;
+ }
+
+ di->di_bank = bank;
+ regptr += 1;
+
+ /* Get address/size. */
+ rv = fdt_data_to_res(regptr, addr_cells - 1, size_cells, &start,
+ &count);
+ if (rv != 0) {
+ resource_list_free(&di->di_res);
+ goto out;
+ }
+
+ /* Check if enough amount of memory is mapped */
+ if (sc->sc_banks[bank].size < count) {
+ device_printf(sc->sc_dev, "device [%d]: not enough "
+ "memory reserved\n", bank);
+ continue;
+ }
+
+ regptr += addr_cells - 1 + size_cells;
+
+ /* Calculate address range relative to VA base. */
+ start = sc->sc_banks[bank].va + start;
+ end = start + count - 1;
+
+ debugf("reg addr bank = %d, start = %lx, end = %lx, "
+ "count = %lx\n", bank, start, end, count);
+
+ /* Use bank (CS) cell as rid. */
+ resource_list_add(&di->di_res, SYS_RES_MEMORY, di->di_bank,
+ start, end, count);
+ }
+ rv = 0;
+out:
+ free(reg, M_OFWPROP);
+ return (rv);
+}
+
+static int
+localbus_probe(device_t dev)
+{
+
+ if (!ofw_bus_is_compatible_strict(dev, "mrvl,lbc"))
+ return (ENXIO);
+
+ device_set_desc(dev, "Marvell device bus");
+
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+localbus_attach(device_t dev)
+{
+ device_t dev_child;
+ struct localbus_softc *sc;
+ struct localbus_devinfo *di;
+ phandle_t dt_node, dt_child;
+
+ sc = device_get_softc(dev);
+ sc->sc_dev = dev;
+ sc->sc_banks = localbus_banks;
+
+ /*
+ * Walk localbus and add direct subordinates as our children.
+ */
+ dt_node = ofw_bus_get_node(dev);
+ for (dt_child = OF_child(dt_node); dt_child != 0;
+ dt_child = OF_peer(dt_child)) {
+
+ /* Check and process 'status' property. */
+ if (!(fdt_is_enabled(dt_child)))
+ continue;
+
+ if (!(fdt_pm_is_enabled(dt_child)))
+ continue;
+
+ di = malloc(sizeof(*di), M_LOCALBUS, M_WAITOK | M_ZERO);
+ if (ofw_bus_gen_setup_devinfo(&di->di_ofw, dt_child) != 0) {
+ free(di, M_LOCALBUS);
+ device_printf(dev, "could not set up devinfo\n");
+ continue;
+ }
+
+ resource_list_init(&di->di_res);
+ if (fdt_localbus_reg_decode(dt_child, sc, di)) {
+ device_printf(dev, "could not process 'reg' "
+ "property\n");
+ ofw_bus_gen_destroy_devinfo(&di->di_ofw);
+ free(di, M_LOCALBUS);
+ continue;
+ }
+
+ /* Add newbus device for this FDT node */
+ dev_child = device_add_child(dev, NULL, -1);
+ if (dev_child == NULL) {
+ device_printf(dev, "could not add child: %s\n",
+ di->di_ofw.obd_name);
+ resource_list_free(&di->di_res);
+ ofw_bus_gen_destroy_devinfo(&di->di_ofw);
+ free(di, M_LOCALBUS);
+ continue;
+ }
+#ifdef DEBUG
+ device_printf(dev, "added child: %s\n\n", di->di_ofw.obd_name);
+#endif
+ device_set_ivars(dev_child, di);
+ }
+
+ return (bus_generic_attach(dev));
+}
+
+static int
+localbus_print_child(device_t dev, device_t child)
+{
+ struct localbus_devinfo *di;
+ struct resource_list *rl;
+ int rv;
+
+ di = device_get_ivars(child);
+ rl = &di->di_res;
+
+ rv = 0;
+ rv += bus_print_child_header(dev, child);
+ rv += resource_list_print_type(rl, "mem", SYS_RES_MEMORY, "%#lx");
+ rv += resource_list_print_type(rl, "irq", SYS_RES_IRQ, "%ld");
+ rv += bus_print_child_footer(dev, child);
+
+ return (rv);
+}
+
+static struct resource *
+localbus_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 localbus_devinfo *di;
+ struct resource_list_entry *rle;
+
+ /*
+ * Request for the default allocation with a given rid: use resource
+ * list stored in the local device info.
+ */
+ if ((start == 0UL) && (end == ~0UL)) {
+ if ((di = device_get_ivars(child)) == NULL)
+ return (NULL);
+
+ if (type == SYS_RES_IOPORT)
+ type = SYS_RES_MEMORY;
+
+ rid = &di->di_bank;
+ rle = resource_list_find(&di->di_res, type, *rid);
+ if (rle == NULL) {
+ device_printf(bus, "no default resources for "
+ "rid = %d, type = %d\n", *rid, type);
+ return (NULL);
+ }
+ start = rle->start;
+ end = rle->end;
+ count = rle->count;
+ }
+
+ return (bus_generic_alloc_resource(bus, child, type, rid, start, end,
+ count, flags));
+}
+
+
+static struct resource_list *
+localbus_get_resource_list(device_t bus, device_t child)
+{
+ struct localbus_devinfo *di;
+
+ di = device_get_ivars(child);
+ return (&di->di_res);
+}
+
+static const struct ofw_bus_devinfo *
+localbus_get_devinfo(device_t bus, device_t child)
+{
+ struct localbus_devinfo *di;
+
+ di = device_get_ivars(child);
+ return (&di->di_ofw);
+}
+
+int
+fdt_localbus_devmap(phandle_t dt_node, struct pmap_devmap *fdt_devmap,
+ int banks_max_num, int *banks_added)
+{
+ pcell_t ranges[MV_LOCALBUS_MAX_BANKS * MV_LOCALBUS_MAX_BANK_CELLS];
+ pcell_t *rangesptr;
+ uint32_t tuple_size, bank;
+ vm_paddr_t offset;
+ vm_size_t size;
+ int dev_num, addr_cells, size_cells, par_addr_cells, va_index, i, j, k;
+
+ if ((fdt_addrsize_cells(dt_node, &addr_cells, &size_cells)) != 0)
+ return (EINVAL);
+
+ par_addr_cells = fdt_parent_addr_cells(dt_node);
+ if (par_addr_cells > 2) {
+ /*
+ * Localbus devmap initialization error: unsupported parent
+ * #addr-cells
+ */
+ return (ERANGE);
+ }
+
+ tuple_size = (addr_cells + par_addr_cells + size_cells);
+ if (tuple_size > MV_LOCALBUS_MAX_BANK_CELLS)
+ return (ERANGE);
+
+ tuple_size *= sizeof(pcell_t);
+
+ dev_num = OF_getprop(dt_node, "ranges", ranges, sizeof(ranges));
+ if (dev_num <= 0)
+ return (EINVAL);
+
+ /* Calculate number of devices attached to bus */
+ dev_num = dev_num / tuple_size;
+
+ /*
+ * If number of ranges > max number of localbus devices,
+ * additional entries will not be processed
+ */
+ dev_num = MIN(dev_num, banks_max_num);
+
+ rangesptr = &ranges[0];
+ j = 0;
+
+ /* Process data from FDT */
+ for (i = 0; i < dev_num; i++) {
+
+ /* First field is bank number */
+ bank = fdt_data_get((void *)rangesptr, 1);
+ rangesptr += 1;
+
+ if (bank < 0 || bank > MV_LOCALBUS_MAX_BANKS) {
+ /* Bank out of range */
+ rangesptr += ((addr_cells - 1) + par_addr_cells +
+ size_cells);
+ continue;
+ }
+
+ /* Find virtmap entry for this bank */
+ va_index = -1;
+ for (k = 0; localbus_virtmap[k].bank >= 0; k++) {
+ if (localbus_virtmap[k].bank == bank) {
+ va_index = k;
+ break;
+ }
+ }
+
+ /* Check if virtmap entry was found */
+ if (va_index == -1) {
+ rangesptr += ((addr_cells - 1) + par_addr_cells +
+ size_cells);
+ continue;
+ }
+
+ /* Remaining child's address fields are unused */
+ rangesptr += (addr_cells - 1);
+
+ /* Parent address offset */
+ offset = fdt_data_get((void *)rangesptr, par_addr_cells);
+ rangesptr += par_addr_cells;
+
+ /* Last field is size */
+ size = fdt_data_get((void *)rangesptr, size_cells);
+ rangesptr += size_cells;
+
+ if (size > localbus_virtmap[va_index].size) {
+ /* Not enough space reserved in virtual memory map */
+ continue;
+ }
+
+ fdt_devmap[j].pd_va = localbus_virtmap[va_index].va;
+ fdt_devmap[j].pd_pa = offset;
+ fdt_devmap[j].pd_size = size;
+ fdt_devmap[j].pd_prot = VM_PROT_READ | VM_PROT_WRITE;
+ fdt_devmap[j].pd_cache = PTE_NOCACHE;
+
+ /* Copy data to structure used by localbus driver */
+ localbus_banks[bank].va = fdt_devmap[j].pd_va;
+ localbus_banks[bank].pa = fdt_devmap[j].pd_pa;
+ localbus_banks[bank].size = fdt_devmap[j].pd_size;
+ localbus_banks[bank].mapped = 1;
+
+ j++;
+ }
+
+ *banks_added = j;
+ return (0);
+}
diff --git a/sys/arm/mv/mv_machdep.c b/sys/arm/mv/mv_machdep.c
index 9afd29af2780..1e3f343d0db1 100644
--- a/sys/arm/mv/mv_machdep.c
+++ b/sys/arm/mv/mv_machdep.c
@@ -314,7 +314,7 @@ initarm(void *mdp, void *unused __unused)
uint32_t memsize, l2size;
void *kmdp;
u_int l1pagetable;
- int i = 0, j = 0;
+ int i = 0, j = 0, err_devmap = 0;
kmdp = NULL;
lastaddr = 0;
@@ -496,8 +496,7 @@ initarm(void *mdp, void *unused __unused)
VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
/* Map pmap_devmap[] entries */
- if (platform_devmap_init() != 0)
- while (1);
+ err_devmap = platform_devmap_init();
pmap_devmap_bootstrap(l1pagetable, pmap_devmap_bootstrap_table);
cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL * 2)) |
@@ -530,12 +529,17 @@ initarm(void *mdp, void *unused __unused)
print_kernel_section_addr();
print_kenv();
+ if (err_devmap != 0)
+ printf("WARNING: could not fully configure devmap, error=%d\n",
+ err_devmap);
+
/*
* Re-initialise decode windows
*/
if (soc_decode_win() != 0)
printf("WARNING: could not re-initialise decode windows! "
"Running with existing settings...\n");
+
/*
* Pages were allocated during the secondary bootstrap for the
* stacks for different CPU modes.
@@ -733,25 +737,34 @@ moveon:
return (0);
}
-#define FDT_DEVMAP_MAX (1 + 2 + 1 + 1)
+#define FDT_DEVMAP_MAX (MV_WIN_CPU_MAX + 1)
static struct pmap_devmap fdt_devmap[FDT_DEVMAP_MAX] = {
{ 0, 0, 0, 0, 0, }
};
/*
+ * XXX: When device entry in devmap has pd_size smaller than section size,
+ * system will freeze during initialization
+ */
+
+/*
* Construct pmap_devmap[] with DT-derived config data.
*/
+
static int
platform_devmap_init(void)
{
phandle_t root, child;
+ pcell_t bank_count;
u_long base, size;
- int i;
+ int i, num_mapped;
+
+ i = 0;
+ pmap_devmap_bootstrap_table = &fdt_devmap[0];
/*
* IMMR range.
*/
- i = 0;
fdt_devmap[i].pd_va = fdt_immr_va;
fdt_devmap[i].pd_pa = fdt_immr_pa;
fdt_devmap[i].pd_size = fdt_immr_size;
@@ -760,12 +773,12 @@ platform_devmap_init(void)
i++;
/*
- * PCI range(s).
+ * PCI range(s) and localbus.
*/
if ((root = OF_finddevice("/")) == -1)
return (ENXIO);
- for (child = OF_child(root); child != 0; child = OF_peer(child))
+ for (child = OF_child(root); child != 0; child = OF_peer(child)) {
if (fdt_is_type(child, "pci")) {
/*
* Check space: each PCI node will consume 2 devmap
@@ -773,7 +786,6 @@ platform_devmap_init(void)
*/
if (i + 1 >= FDT_DEVMAP_MAX) {
return (ENOMEM);
- break;
}
/*
@@ -786,6 +798,29 @@ platform_devmap_init(void)
i += 2;
}
+ if (fdt_is_compatible(child, "mrvl,lbc")) {
+ /* Check available space */
+ if (OF_getprop(child, "bank-count", (void *)&bank_count,
+ sizeof(bank_count)) <= 0)
+ /* If no property, use default value */
+ bank_count = 1;
+ else
+ bank_count = fdt32_to_cpu(bank_count);
+
+ if ((i + bank_count) >= FDT_DEVMAP_MAX)
+ return (ENOMEM);
+
+ /* Add all localbus ranges to device map */
+ num_mapped = 0;
+
+ if (fdt_localbus_devmap(child, &fdt_devmap[i],
+ (int)bank_count, &num_mapped) != 0)
+ return (ENXIO);
+
+ i += num_mapped;
+ }
+ }
+
/*
* CESA SRAM range.
*/
@@ -795,7 +830,7 @@ platform_devmap_init(void)
if ((child = fdt_find_compatible(root, "mrvl,cesa-sram", 0)) == 0)
/* No CESA SRAM node. */
- goto out;
+ return (0);
moveon:
if (i >= FDT_DEVMAP_MAX)
return (ENOMEM);
@@ -809,8 +844,6 @@ moveon:
fdt_devmap[i].pd_prot = VM_PROT_READ | VM_PROT_WRITE;
fdt_devmap[i].pd_cache = PTE_NOCACHE;
-out:
- pmap_devmap_bootstrap_table = &fdt_devmap[0];
return (0);
}
diff --git a/sys/arm/mv/mvwin.h b/sys/arm/mv/mvwin.h
index e1e135f2b7f5..9c25e2594192 100644
--- a/sys/arm/mv/mvwin.h
+++ b/sys/arm/mv/mvwin.h
@@ -57,20 +57,17 @@
#define MV_PCI_MEM_BASE MV_PCI_MEM_PHYS_BASE
#define MV_PCI_MEM_SIZE (64 * 1024 * 1024)
-/* XXX DEV_BOOT, CSx are board specific, should be defined per platform */
-
-/* 512KB NOR FLASH */
-#define MV_DEV_BOOT_PHYS_BASE (MV_PCI_MEM_PHYS_BASE + MV_PCI_MEM_SIZE)
-#define MV_DEV_BOOT_SIZE (512 * 1024)
-/* CS0: 7-seg LED */
-#define MV_DEV_CS0_PHYS_BASE 0xFA000000
-#define MV_DEV_CS0_SIZE (1024 * 1024) /* XXX u-boot has 2MB */
-/* CS1: 32MB NOR FLASH */
-#define MV_DEV_CS1_PHYS_BASE (MV_DEV_CS0_PHYS_BASE + MV_DEV_CS0_SIZE)
-#define MV_DEV_CS1_SIZE (32 * 1024 * 1024)
-/* CS2: 32MB NAND FLASH */
-#define MV_DEV_CS2_PHYS_BASE (MV_DEV_CS1_PHYS_BASE + MV_DEV_CS1_SIZE)
-#define MV_DEV_CS2_SIZE 1024 /* XXX u-boot has 1MB */
+#define MV_DEV_BOOT_BASE 0xF9300000
+#define MV_DEV_BOOT_SIZE (1024 * 1024) /* 1 MB */
+
+#define MV_DEV_CS0_BASE 0xF9400000
+#define MV_DEV_CS0_SIZE (1024 * 1024) /* 1 MB */
+
+#define MV_DEV_CS1_BASE 0xF9500000
+#define MV_DEV_CS1_SIZE (32 * 1024 * 1024) /* 32 MB */
+
+#define MV_DEV_CS2_BASE 0xFB500000
+#define MV_DEV_CS2_SIZE (1024 * 1024) /* 1 MB */
#define MV_CESA_SRAM_PHYS_BASE 0xFD000000
#define MV_CESA_SRAM_BASE MV_CESA_SRAM_PHYS_BASE /* VA == PA mapping */
@@ -107,8 +104,6 @@
#define MV_PCIE12_BASE (MV_PCIE_BASE + 0x48000)
#define MV_PCIE13_BASE (MV_PCIE_BASE + 0x4C000)
-#define MV_DEV_CS0_BASE MV_DEV_CS0_PHYS_BASE
-
/*
* Decode windows definitions and macros
*/
diff --git a/sys/boot/arm/at91/boot2/boot2.c b/sys/boot/arm/at91/boot2/boot2.c
index f84ac30bc2c0..c3629a522c7b 100644
--- a/sys/boot/arm/at91/boot2/boot2.c
+++ b/sys/boot/arm/at91/boot2/boot2.c
@@ -95,7 +95,6 @@ static uint8_t dsk_meta;
static void load(void);
static int parse(void);
-static int xfsread(ino_t, void *, size_t);
static int dskread(void *, unsigned, unsigned);
#ifdef FIXUP_BOOT_DRV
static void fixup_boot_drv(caddr_t, int, int, int);
@@ -111,7 +110,7 @@ static void fixup_boot_drv(caddr_t, int, int, int);
#endif
static inline int
-xfsread(ino_t inode, void *buf, size_t nbyte)
+xfsread(ufs_ino_t inode, void *buf, size_t nbyte)
{
if ((size_t)fsread(inode, buf, nbyte) != nbyte)
return -1;
@@ -154,7 +153,7 @@ int
main(void)
{
int autoboot, c = 0;
- ino_t ino;
+ ufs_ino_t ino;
dmadat = (void *)(0x20000000 + (16 << 20));
board_init();
@@ -199,7 +198,7 @@ load(void)
Elf32_Ehdr eh;
static Elf32_Phdr ep[2];
caddr_t p;
- ino_t ino;
+ ufs_ino_t ino;
uint32_t addr;
int i, j;
#ifdef FIXUP_BOOT_DRV
diff --git a/sys/boot/arm/ixp425/boot2/boot2.c b/sys/boot/arm/ixp425/boot2/boot2.c
index 3d356f090651..e5f498273945 100644
--- a/sys/boot/arm/ixp425/boot2/boot2.c
+++ b/sys/boot/arm/ixp425/boot2/boot2.c
@@ -98,7 +98,6 @@ static int disk_layout;
static void load(void);
static int parse(void);
-static int xfsread(ino_t, void *, size_t);
static int dskread(void *, unsigned, unsigned);
static int drvread(void *, unsigned, unsigned);
#ifdef FIXUP_BOOT_DRV
@@ -114,7 +113,7 @@ static void fixup_boot_drv(caddr_t, int, int, int);
#endif
static inline int
-xfsread(ino_t inode, void *buf, size_t nbyte)
+xfsread(ufs_ino_t inode, void *buf, size_t nbyte)
{
if ((size_t)fsread(inode, buf, nbyte) != nbyte)
return -1;
@@ -158,7 +157,7 @@ main(void)
{
const char *bt;
int autoboot, c = 0;
- ino_t ino;
+ ufs_ino_t ino;
dmadat = (void *)(0x1c0000);
p_memset((char *)dmadat, 0, 32 * 1024);
@@ -207,7 +206,7 @@ load(void)
Elf32_Ehdr eh;
static Elf32_Phdr ep[2];
caddr_t p;
- ino_t ino;
+ ufs_ino_t ino;
uint32_t addr;
int i, j;
#ifdef FIXUP_BOOT_DRV
diff --git a/sys/boot/arm/uboot/Makefile b/sys/boot/arm/uboot/Makefile
index 906fc871a887..b8a92d6ddf64 100644
--- a/sys/boot/arm/uboot/Makefile
+++ b/sys/boot/arm/uboot/Makefile
@@ -7,6 +7,9 @@ NEWVERSWHAT= "U-Boot loader" ${MACHINE_ARCH}
BINDIR?= /boot
INSTALLFLAGS= -b
WARNS?= 1
+# Address at which ubldr will be loaded.
+# This varies for different boards and SOCs.
+UBLDR_LOADADDR?= 0x1000000
# Architecture-specific loader code
SRCS= start.S conf.c vers.c
@@ -15,6 +18,11 @@ LOADER_DISK_SUPPORT?= yes
LOADER_UFS_SUPPORT?= yes
LOADER_CD9660_SUPPORT?= no
LOADER_EXT2FS_SUPPORT?= no
+.if ${MK_NAND} != "no"
+LOADER_NANDFS_SUPPORT?= yes
+.else
+LOADER_NANDFS_SUPPORT?= no
+.endif
LOADER_NET_SUPPORT?= yes
LOADER_NFS_SUPPORT?= yes
LOADER_TFTP_SUPPORT?= no
@@ -38,6 +46,9 @@ CFLAGS+= -DLOADER_CD9660_SUPPORT
.if ${LOADER_EXT2FS_SUPPORT} == "yes"
CFLAGS+= -DLOADER_EXT2FS_SUPPORT
.endif
+.if ${LOADER_NANDFS_SUPPORT} == "yes"
+CFLAGS+= -DLOADER_NANDFS_SUPPORT
+.endif
.if ${LOADER_GZIP_SUPPORT} == "yes"
CFLAGS+= -DLOADER_GZIP_SUPPORT
.endif
@@ -77,7 +88,9 @@ CLEANFILES+= vers.c loader.help
CFLAGS+= -ffreestanding
-LDFLAGS= -nostdlib -static -T ${.CURDIR}/ldscript.${MACHINE_CPUARCH}
+LDFLAGS= -nostdlib -static
+LDFLAGS+= -T ldscript.generated
+LDFLAGS+= -T ${.CURDIR}/ldscript.${MACHINE_CPUARCH}
# Pull in common loader code
.PATH: ${.CURDIR}/../../uboot/common
@@ -102,6 +115,18 @@ loader.help: help.common help.uboot
cat ${.ALLSRC} | \
awk -f ${.CURDIR}/../../common/merge_help.awk > ${.TARGET}
+${PROG}: ldscript.generated ${.CURDIR}/ldscript.${MACHINE_CPUARCH}
+
+ldscript.generated::
+ rm -f ldscript.generated.tmp
+ echo "UBLDR_LOADADDR = ${UBLDR_LOADADDR};" >ldscript.generated.tmp
+ if diff ldscript.generated ldscript.generated.tmp > /dev/null; then \
+ true; \
+ else \
+ rm -f ldscript.generated; \
+ mv ldscript.generated.tmp ldscript.generated; \
+ fi
+
.PATH: ${.CURDIR}/../../forth
FILES= loader.help
diff --git a/sys/boot/arm/uboot/conf.c b/sys/boot/arm/uboot/conf.c
index b7975651310a..03dc64125e43 100644
--- a/sys/boot/arm/uboot/conf.c
+++ b/sys/boot/arm/uboot/conf.c
@@ -56,6 +56,9 @@ struct fs_ops *file_system[] = {
#if defined(LOADER_EXT2FS_SUPPORT)
&ext2fs_fsops,
#endif
+#if defined(LOADER_NANDFS_SUPPORT)
+ &nandfs_fsops,
+#endif
#if defined(LOADER_NFS_SUPPORT)
&nfs_fsops,
#endif
diff --git a/sys/boot/arm/uboot/ldscript.arm b/sys/boot/arm/uboot/ldscript.arm
index db8dc0c109cc..b3be11916236 100644
--- a/sys/boot/arm/uboot/ldscript.arm
+++ b/sys/boot/arm/uboot/ldscript.arm
@@ -5,7 +5,7 @@ ENTRY(_start)
SECTIONS
{
/* Read-only sections, merged into text segment: */
- . = 0x1000000 + SIZEOF_HEADERS;
+ . = UBLDR_LOADADDR + SIZEOF_HEADERS;
.interp : { *(.interp) }
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
diff --git a/sys/boot/arm/uboot/version b/sys/boot/arm/uboot/version
index 38c7eb60c0b4..486c4125cc0d 100644
--- a/sys/boot/arm/uboot/version
+++ b/sys/boot/arm/uboot/version
@@ -3,6 +3,7 @@ $FreeBSD$
NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this
file is important. Make sure the current version number is on line 6.
+1.2: Extended with NAND FS support.
1.1: Flattened Device Tree blob support.
1.0: Added storage support. Booting from HDD, USB, etc. is now possible.
0.5: Initial U-Boot/arm version (netbooting only).
diff --git a/sys/boot/common/loader.8 b/sys/boot/common/loader.8
index 7e30bd314eaa..36f260c0d278 100644
--- a/sys/boot/common/loader.8
+++ b/sys/boot/common/loader.8
@@ -423,7 +423,7 @@ variable take effect immediately.
Defines the base i/o port used to access console UART
(i386 and amd64 only).
If the variable is not set, its assumed value is 0x3F8, which
-corresponds to PC port COM1, unless overriden by
+corresponds to PC port COM1, unless overridden by
.Va BOOT_COMCONSOLE_PORT
variable during the compilation of
.Nm .
diff --git a/sys/boot/common/ufsread.c b/sys/boot/common/ufsread.c
index 18259571d13d..c02010f5284d 100644
--- a/sys/boot/common/ufsread.c
+++ b/sys/boot/common/ufsread.c
@@ -58,6 +58,8 @@ __FBSDID("$FreeBSD$");
#define cgbase(fs, c) ((ufs2_daddr_t)((fs)->fs_fpg * (c)))
#endif
+typedef uint32_t ufs_ino_t;
+
/*
* We use 4k `virtual' blocks for filesystem data, whatever the actual
* filesystem block size. FFS blocks are always a multiple of 4k.
@@ -85,14 +87,14 @@ struct dmadat {
};
static struct dmadat *dmadat;
-static ino_t lookup(const char *);
-static ssize_t fsread(ino_t, void *, size_t);
+static ufs_ino_t lookup(const char *);
+static ssize_t fsread(ufs_ino_t, void *, size_t);
static uint8_t ls, dsk_meta;
static uint32_t fs_off;
static __inline uint8_t
-fsfind(const char *name, ino_t * ino)
+fsfind(const char *name, ufs_ino_t * ino)
{
static char buf[DEV_BSIZE];
struct direct *d;
@@ -116,12 +118,12 @@ fsfind(const char *name, ino_t * ino)
return 0;
}
-static ino_t
+static ufs_ino_t
lookup(const char *path)
{
static char name[MAXNAMLEN + 1];
const char *s;
- ino_t ino;
+ ufs_ino_t ino;
ssize_t n;
uint8_t dt;
@@ -163,7 +165,7 @@ static int sblock_try[] = SBLOCKSEARCH;
#endif
static ssize_t
-fsread(ino_t inode, void *buf, size_t nbyte)
+fsread(ufs_ino_t inode, void *buf, size_t nbyte)
{
#ifndef UFS2_ONLY
static struct ufs1_dinode dp1;
@@ -173,7 +175,7 @@ fsread(ino_t inode, void *buf, size_t nbyte)
static struct ufs2_dinode dp2;
#endif
static struct fs fs;
- static ino_t inomap;
+ static ufs_ino_t inomap;
char *blkbuf;
void *indbuf;
char *s;
diff --git a/sys/boot/fdt/dts/bindings-localbus.txt b/sys/boot/fdt/dts/bindings-localbus.txt
new file mode 100644
index 000000000000..d960fefcf75d
--- /dev/null
+++ b/sys/boot/fdt/dts/bindings-localbus.txt
@@ -0,0 +1,83 @@
+$FreeBSD$
+
+Marvell Device bus (localbus) configuration.
+============================================
+
+1. Properties for localbus nodes
+
+1.1 ranges
+
+Property: ranges
+
+Value type: <prop-encoded-array> encoded as arbitrary number of localbus
+ nodes specifiers.
+
+Description: ranges property defines values used for mapping devices
+ connected to localbus, in Marvell devices it is used also for
+ setting decoding windows.
+
+ a) child node address-cells:
+ - first cell: number of bank (chip select)
+ - second cell: (Marvell devices) Target ID for decoding
+ windows setup
+
+ b) parent node address cells:
+ - address offset: used with parent's node base address to
+ specify base address of mapped device
+
+ c) child node size-cells:
+ - size: defines amount of memory that should be reserved for
+ device
+
+1.2 bank-count
+
+Property: bank-count
+
+Value type: <u32>
+
+Description: The bank_count property defines maximum number of banks on
+ localbus node. Bank is most often interpreted as device chip
+ select, but may also describe another device (e.g. SPI flash).
+
+1.3 Example
+
+ localbus@0 {
+ #address-cells = <2>;
+ #size-cells = <1>;
+ compatible = "mrvl,lbc";
+ bank-count = <5>;
+
+ /* This reflects CPU decode windows setup. */
+ ranges = <0x0 0x2f 0xb2200000 0x00100000
+ 0x1 0x3e 0xb2100000 0x00100000
+ 0x2 0x3d 0xb0000000 0x02000000
+ 0x3 0x3b 0xb2000000 0x00100000>;
+ };
+
+2. Properties for localbus consumer nodes:
+
+2.1 reg
+
+Property: reg
+
+Value type: <prop-encoded-array>
+
+Description: A standard property required for localbus child nodes. Defines
+ the device memory region.
+
+ a) first cell: number of bank (chip select)
+
+ b) address offset: used with address offset from parent's ranges
+ for corresponding bank to specify base address of
+ the device
+
+ c) size: defines size of the device memory region
+
+2.2 Example
+
+ nor@0,0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "cfi-flash";
+ reg = <0x0 0x0 0x00100000>;
+ };
diff --git a/sys/boot/fdt/dts/db78100.dts b/sys/boot/fdt/dts/db78100.dts
index caebaf18e8bf..8a9e91c02034 100644
--- a/sys/boot/fdt/dts/db78100.dts
+++ b/sys/boot/fdt/dts/db78100.dts
@@ -69,25 +69,23 @@
reg = <0x0 0x20000000>; // 512M at 0x0
};
- localbus@f1000000 {
+ localbus@0 {
#address-cells = <2>;
#size-cells = <1>;
compatible = "mrvl,lbc";
- win-count = <14>;
+ bank-count = <5>;
/* This reflects CPU decode windows setup. */
- ranges = <0x0 0x0f 0xf9300000 0x00100000
- 0x1 0x1e 0xfa000000 0x00100000
- 0x2 0x1d 0xfa100000 0x02000000
- 0x3 0x1b 0xfc100000 0x00000400>;
+ ranges = <0x0 0x2f 0xf9300000 0x00100000
+ 0x1 0x3e 0xf9400000 0x00100000
+ 0x2 0x3d 0xf9500000 0x02000000
+ 0x3 0x3b 0xfb500000 0x00100000>;
nor@0,0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "cfi-flash";
reg = <0x0 0x0 0x00100000>;
- bank-width = <2>;
- device-width = <1>;
};
led@1,0 {
@@ -102,16 +100,13 @@
#size-cells = <1>;
compatible = "cfi-flash";
reg = <0x2 0x0 0x02000000>;
- bank-width = <2>;
- device-width = <1>;
};
nand@3,0 {
#address-cells = <1>;
#size-cells = <1>;
+ compatible = "mrvl,nfc";
reg = <0x3 0x0 0x00100000>;
- bank-width = <2>;
- device-width = <1>;
};
};
diff --git a/sys/boot/fdt/dts/db88f6281.dts b/sys/boot/fdt/dts/db88f6281.dts
index fd4cdad35475..55a27fc30337 100644
--- a/sys/boot/fdt/dts/db88f6281.dts
+++ b/sys/boot/fdt/dts/db88f6281.dts
@@ -72,48 +72,33 @@
reg = <0x0 0x20000000>; // 512M at 0x0
};
- localbus@f1000000 {
+ localbus@0 {
#address-cells = <2>;
#size-cells = <1>;
compatible = "mrvl,lbc";
+ bank-count = <3>;
/* This reflects CPU decode windows setup. */
- ranges = <0x0 0x0f 0xf9300000 0x00100000
- 0x1 0x1e 0xfa000000 0x00100000
- 0x2 0x1d 0xfa100000 0x02000000
- 0x3 0x1b 0xfc100000 0x00000400>;
+ ranges = <0x0 0x2f 0xf9300000 0x00100000>;
- nor@0,0 {
+ nand@0,0 {
#address-cells = <1>;
#size-cells = <1>;
- compatible = "cfi-flash";
+ compatible = "mrvl,nfc";
reg = <0x0 0x0 0x00100000>;
bank-width = <2>;
device-width = <1>;
- };
-
- led@1,0 {
- #address-cells = <1>;
- #size-cells = <1>;
- compatible = "led";
- reg = <0x1 0x0 0x00100000>;
- };
- nor@2,0 {
- #address-cells = <1>;
- #size-cells = <1>;
- compatible = "cfi-flash";
- reg = <0x2 0x0 0x02000000>;
- bank-width = <2>;
- device-width = <1>;
- };
+ slice@0 {
+ reg = <0x0 0x200000>;
+ label = "u-boot";
+ read-only;
+ };
- nand@3,0 {
- #address-cells = <1>;
- #size-cells = <1>;
- reg = <0x3 0x0 0x00100000>;
- bank-width = <2>;
- device-width = <1>;
+ slice@200000 {
+ reg = <0x200000 0x7e00000>;
+ label = "root";
+ };
};
};
@@ -305,4 +290,9 @@
0x0 0x00100000>;
};
};
+
+ chosen {
+ stdin = "serial0";
+ stdout = "serial0";
+ };
};
diff --git a/sys/boot/fdt/dts/p2041rdb.dts b/sys/boot/fdt/dts/p2041rdb.dts
new file mode 100644
index 000000000000..aa5af072e768
--- /dev/null
+++ b/sys/boot/fdt/dts/p2041rdb.dts
@@ -0,0 +1,490 @@
+/*
+ * P2041RDB Device Tree Source
+ *
+ * Copyright 2011 Freescale Semiconductor Inc.
+ *
+ * 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 Freescale Semiconductor nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``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 Freescale Semiconductor 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/ "p2041si.dtsi"
+
+/ {
+ model = "fsl,P2041RDB";
+ compatible = "fsl,P2041RDB";
+ #address-cells = <2>;
+ #size-cells = <2>;
+ interrupt-parent = <&mpic>;
+
+ aliases {
+ phy_rgmii_0 = &phy_rgmii_0;
+ phy_rgmii_1 = &phy_rgmii_1;
+ phy_sgmii_2 = &phy_sgmii_2;
+ phy_sgmii_3 = &phy_sgmii_3;
+ phy_sgmii_4 = &phy_sgmii_4;
+ phy_sgmii_1c = &phy_sgmii_1c;
+ phy_sgmii_1d = &phy_sgmii_1d;
+ phy_sgmii_1e = &phy_sgmii_1e;
+ phy_sgmii_1f = &phy_sgmii_1f;
+ phy_xgmii_2 = &phy_xgmii_2;
+ };
+
+ memory {
+ device_type = "memory";
+ reg = <0x00000000 0x00000000 0x00000000 0x80000000>;
+ };
+
+ dcsr: dcsr@f00000000 {
+ ranges = <0x00000000 0xf 0x00000000 0x01008000>;
+ };
+
+ bman-portals@ff4000000 {
+ bman-portal@0 {
+ cpu-handle = <&cpu0>;
+ };
+ bman-portal@4000 {
+ cpu-handle = <&cpu1>;
+ };
+ bman-portal@8000 {
+ cpu-handle = <&cpu2>;
+ };
+ bman-portal@c000 {
+ cpu-handle = <&cpu3>;
+ };
+ bman-portal@10000 {
+ };
+ bman-portal@14000 {
+ };
+ bman-portal@18000 {
+ };
+ bman-portal@1c000 {
+ };
+ bman-portal@20000 {
+ };
+ bman-portal@24000 {
+ };
+
+ buffer-pool@0 {
+ compatible = "fsl,p2041-bpool", "fsl,bpool";
+ fsl,bpid = <0>;
+ fsl,bpool-cfg = <0 0x100 0 1 0 0x100>;
+ };
+ };
+
+ qman-portals@ff4200000 {
+ qportal0: qman-portal@0 {
+ cpu-handle = <&cpu0>;
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal1: qman-portal@4000 {
+ cpu-handle = <&cpu1>;
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal2: qman-portal@8000 {
+ cpu-handle = <&cpu2>;
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal3: qman-portal@c000 {
+ cpu-handle = <&cpu3>;
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal4: qman-portal@10000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal5: qman-portal@14000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal6: qman-portal@18000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal7: qman-portal@1c000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal8: qman-portal@20000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal9: qman-portal@24000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+ };
+
+ soc: soc@ffe000000 {
+ spi@110000 {
+ flash@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "spansion,s25sl12801";
+ reg = <0>;
+ spi-max-frequency = <40000000>; /* input clock */
+ partition@u-boot {
+ label = "u-boot";
+ reg = <0x00000000 0x00100000>;
+ read-only;
+ };
+ partition@kernel {
+ label = "kernel";
+ reg = <0x00100000 0x00500000>;
+ read-only;
+ };
+ partition@dtb {
+ label = "dtb";
+ reg = <0x00600000 0x00100000>;
+ read-only;
+ };
+ partition@fs {
+ label = "file system";
+ reg = <0x00700000 0x00900000>;
+ };
+ };
+ };
+
+ i2c@118000 {
+ lm75b@48 {
+ compatible = "nxp,lm75a";
+ reg = <0x48>;
+ };
+ eeprom@50 {
+ compatible = "at24,24c256";
+ reg = <0x50>;
+ };
+ rtc@68 {
+ compatible = "pericom,pt7c4338";
+ reg = <0x68>;
+ };
+ };
+
+ i2c@118100 {
+ eeprom@50 {
+ compatible = "at24,24c256";
+ reg = <0x50>;
+ };
+ };
+
+ usb1: usb@211000 {
+ dr_mode = "host";
+ };
+
+ pme: pme@316000 {
+ /* Commented out, use default allocation */
+ /* fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
+ /* fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
+ };
+
+ qman: qman@318000 {
+ /* Commented out, use default allocation */
+ /* fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
+ /* fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
+ };
+
+ bman: bman@31a000 {
+ /* Same as fsl,qman-*, use default allocation */
+ /* fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
+ };
+
+ fman0: fman@400000 {
+ enet0: ethernet@e0000 {
+ tbi-handle = <&tbi0>;
+ phy-handle = <&phy_sgmii_2>;
+ phy-connection-type = "sgmii";
+ };
+
+ mdio0: mdio@e1120 {
+ tbi0: tbi-phy@8 {
+ reg = <0x8>;
+ device_type = "tbi-phy";
+ };
+
+ phy_rgmii_0: ethernet-phy@0 {
+ reg = <0x0>;
+ };
+ phy_rgmii_1: ethernet-phy@1 {
+ reg = <0x1>;
+ };
+ phy_sgmii_2: ethernet-phy@2 {
+ reg = <0x2>;
+ };
+ phy_sgmii_3: ethernet-phy@3 {
+ reg = <0x3>;
+ };
+ phy_sgmii_4: ethernet-phy@4 {
+ reg = <0x4>;
+ };
+ phy_sgmii_1c: ethernet-phy@1c {
+ reg = <0x1c>;
+ };
+ phy_sgmii_1d: ethernet-phy@1d {
+ reg = <0x1d>;
+ };
+ phy_sgmii_1e: ethernet-phy@1e {
+ reg = <0x1e>;
+ };
+ phy_sgmii_1f: ethernet-phy@1f {
+ reg = <0x1f>;
+ };
+ };
+
+ enet1: ethernet@e2000 {
+ tbi-handle = <&tbi1>;
+ phy-handle = <&phy_sgmii_3>;
+ phy-connection-type = "sgmii";
+ };
+
+ mdio@e3120 {
+ tbi1: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
+ };
+ };
+
+ enet2: ethernet@e4000 {
+ tbi-handle = <&tbi2>;
+ phy-handle = <&phy_sgmii_4>;
+ phy-connection-type = "sgmii";
+ };
+
+ mdio@e5120 {
+ tbi2: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
+ };
+ };
+
+ enet3: ethernet@e6000 {
+ tbi-handle = <&tbi3>;
+ phy-handle = <&phy_rgmii_1>;
+ phy-connection-type = "rgmii";
+ };
+
+ mdio@e7120 {
+ tbi3: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
+ };
+ };
+
+ enet4: ethernet@e8000 {
+ tbi-handle = <&tbi4>;
+ phy-handle = <&phy_rgmii_0>;
+ phy-connection-type = "rgmii";
+ };
+
+ mdio@e9120 {
+ tbi4: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
+ };
+ };
+
+ enet5: ethernet@f0000 {
+ /*
+ * phy-handle will be updated by U-Boot to
+ * reflect the actual slot the XAUI card is in.
+ */
+ phy-handle = <&phy_xgmii_2>;
+ phy-connection-type = "xgmii";
+ };
+
+ mdio@f1000 {
+ /* XAUI card in slot 2 */
+ phy_xgmii_2: ethernet-phy@0 {
+ reg = <0x0>;
+ };
+ };
+ };
+ };
+
+ rapidio@ffe0c0000 {
+ reg = <0xf 0xfe0c0000 0 0x11000>;
+
+ port1 {
+ ranges = <0 0 0xc 0x20000000 0 0x10000000>;
+ };
+ port2 {
+ ranges = <0 0 0xc 0x30000000 0 0x10000000>;
+ };
+ };
+
+ localbus@ffe124000 {
+ reg = <0xf 0xfe124000 0 0x1000>;
+ ranges = <0 0 0xf 0xb8000000 0x04000000>;
+
+ flash@0,0 {
+ compatible = "cfi-flash";
+ /*
+ * Map 64Mb of 128MB NOR flash memory. Since highest
+ * line of address of NOR flash memory are set by
+ * FPGA, memory are divided into two pages equal to
+ * 64MB. One of the pages can be accessed at once.
+ */
+ reg = <0 0 0x04000000>;
+ bank-width = <2>;
+ device-width = <2>;
+ };
+ };
+
+ pci0: pcie@ffe200000 {
+ reg = <0xf 0xfe200000 0 0x1000>;
+ ranges = <0x02000000 0 0x80000000 0x0 0x80000000 0x0 0x10000000
+ 0x01000000 0 0x00000000 0x0 0xff000000 0x0 0x00010000>;
+ pcie@0 {
+ ranges = <0x02000000 0 0x80000000
+ 0x02000000 0 0x80000000
+ 0 0x10000000
+
+ 0x01000000 0 0x00000000
+ 0x01000000 0 0xff000000
+ 0 0x00010000>;
+ };
+ };
+
+ pci1: pcie@ffe201000 {
+ reg = <0xf 0xfe201000 0 0x1000>;
+ ranges = <0x02000000 0x0 0x90000000 0x0 0x90000000 0x0 0x10000000
+ 0x01000000 0x0 0x00000000 0x0 0xff010000 0x0 0x00010000>;
+ pcie@0 {
+ ranges = <0x02000000 0 0x90000000
+ 0x02000000 0 0x90000000
+ 0 0x10000000
+
+ 0x01000000 0 0x00000000
+ 0x01000000 0 0xff010000
+ 0 0x00010000>;
+ };
+ };
+
+ pci2: pcie@ffe202000 {
+ reg = <0xf 0xfe202000 0 0x1000>;
+ ranges = <0x02000000 0 0xa0000000 0x0 0xa0000000 0 0x10000000
+ 0x01000000 0 0x00000000 0x0 0xff020000 0 0x00010000>;
+ pcie@0 {
+ ranges = <0x02000000 0 0xa0000000
+ 0x02000000 0 0xa0000000
+ 0 0x10000000
+
+ 0x01000000 0 0x00000000
+ 0x01000000 0 0xff020000
+ 0 0x00010000>;
+ };
+ };
+
+ fsl,dpaa {
+ compatible = "fsl,p2041-dpaa", "fsl,dpaa";
+
+ ethernet@0 {
+ compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet0>;
+ status = "okay";
+ };
+ ethernet@1 {
+ compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet1>;
+ status = "okay";
+ };
+ ethernet@2 {
+ compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet2>;
+ status = "okay";
+ };
+ ethernet@3 {
+ compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet3>;
+ status = "okay";
+ };
+ ethernet@4 {
+ compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet4>;
+ status = "okay";
+ };
+ ethernet@5 {
+ compatible = "fsl,p2041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet5>;
+ status = "okay";
+ };
+ };
+
+ chosen {
+ stdin = "serial0";
+ stdout = "serial0";
+ };
+};
diff --git a/sys/boot/fdt/dts/p2041si.dtsi b/sys/boot/fdt/dts/p2041si.dtsi
new file mode 100644
index 000000000000..9db01fa62ca9
--- /dev/null
+++ b/sys/boot/fdt/dts/p2041si.dtsi
@@ -0,0 +1,1296 @@
+/*
+ * P2041 Silicon Device Tree Source
+ *
+ * Copyright 2011 Freescale Semiconductor Inc.
+ *
+ * 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 Freescale Semiconductor nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``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 Freescale Semiconductor 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$ */
+
+/dts-v1/;
+
+/ {
+ compatible = "fsl,P2041";
+ #address-cells = <2>;
+ #size-cells = <2>;
+ interrupt-parent = <&mpic>;
+
+ aliases {
+ ccsr = &soc;
+ dcsr = &dcsr;
+
+ ethernet0 = &enet0;
+ ethernet1 = &enet1;
+ ethernet2 = &enet2;
+ ethernet3 = &enet3;
+ ethernet4 = &enet4;
+ ethernet5 = &enet5;
+ serial0 = &serial0;
+ serial1 = &serial1;
+ serial2 = &serial2;
+ serial3 = &serial3;
+ pci0 = &pci0;
+ pci1 = &pci1;
+ pci2 = &pci2;
+ usb0 = &usb0;
+ usb1 = &usb1;
+ dma0 = &dma0;
+ dma1 = &dma1;
+ bman = &bman;
+ qman = &qman;
+ pme = &pme;
+ rman = &rman;
+ sdhc = &sdhc;
+ msi0 = &msi0;
+ msi1 = &msi1;
+ msi2 = &msi2;
+
+ crypto = &crypto;
+ sec_jr0 = &sec_jr0;
+ sec_jr1 = &sec_jr1;
+ sec_jr2 = &sec_jr2;
+ sec_jr3 = &sec_jr3;
+ rtic_a = &rtic_a;
+ rtic_b = &rtic_b;
+ rtic_c = &rtic_c;
+ rtic_d = &rtic_d;
+ sec_mon = &sec_mon;
+
+ fman0 = &fman0;
+ fman0_oh0 = &fman0_oh0;
+ fman0_oh1 = &fman0_oh1;
+ fman0_oh2 = &fman0_oh2;
+ fman0_oh3 = &fman0_oh3;
+ fman0_oh4 = &fman0_oh4;
+ fman0_oh5 = &fman0_oh5;
+ fman0_oh6 = &fman0_oh6;
+ fman0_rx0 = &fman0_rx0;
+ fman0_rx1 = &fman0_rx1;
+ fman0_rx2 = &fman0_rx2;
+ fman0_rx3 = &fman0_rx3;
+ fman0_rx4 = &fman0_rx4;
+ fman0_rx5 = &fman0_rx5;
+ };
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: PowerPC,e500mc@0 {
+ device_type = "cpu";
+ reg = <0>;
+ bus-frequency = <749999996>;
+ next-level-cache = <&L2_0>;
+ L2_0: l2-cache {
+ next-level-cache = <&cpc>;
+ };
+ };
+ cpu1: PowerPC,e500mc@1 {
+ device_type = "cpu";
+ reg = <1>;
+ next-level-cache = <&L2_1>;
+ L2_1: l2-cache {
+ next-level-cache = <&cpc>;
+ };
+ };
+ cpu2: PowerPC,e500mc@2 {
+ device_type = "cpu";
+ reg = <2>;
+ next-level-cache = <&L2_2>;
+ L2_2: l2-cache {
+ next-level-cache = <&cpc>;
+ };
+ };
+ cpu3: PowerPC,e500mc@3 {
+ device_type = "cpu";
+ reg = <3>;
+ next-level-cache = <&L2_3>;
+ L2_3: l2-cache {
+ next-level-cache = <&cpc>;
+ };
+ };
+ };
+
+ dcsr: dcsr@f00000000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,dcsr", "simple-bus";
+
+ dcsr-epu@0 {
+ compatible = "fsl,dcsr-epu";
+ interrupts = <52 2 0 0
+ 84 2 0 0
+ 85 2 0 0>;
+ interrupt-parent = <&mpic>;
+ reg = <0x0 0x1000>;
+ };
+ dcsr-npc {
+ compatible = "fsl,dcsr-npc";
+ reg = <0x1000 0x1000 0x1000000 0x8000>;
+ };
+ dcsr-nxc@2000 {
+ compatible = "fsl,dcsr-nxc";
+ reg = <0x2000 0x1000>;
+ };
+ dcsr-corenet {
+ compatible = "fsl,dcsr-corenet";
+ reg = <0x8000 0x1000 0xB0000 0x1000>;
+ };
+ dcsr-dpaa@9000 {
+ compatible = "fsl,p2041-dcsr-dpaa", "fsl,dcsr-dpaa";
+ reg = <0x9000 0x1000>;
+ };
+ dcsr-ocn@11000 {
+ compatible = "fsl,p2041-dcsr-ocn", "fsl,dcsr-ocn";
+ reg = <0x11000 0x1000>;
+ };
+ dcsr-ddr@12000 {
+ compatible = "fsl,dcsr-ddr";
+ dev-handle = <&ddr>;
+ reg = <0x12000 0x1000>;
+ };
+ dcsr-nal@18000 {
+ compatible = "fsl,p2041-dcsr-nal", "fsl,dcsr-nal";
+ reg = <0x18000 0x1000>;
+ };
+ dcsr-rcpm@22000 {
+ compatible = "fsl,p2041-dcsr-rcpm", "fsl,dcsr-rcpm";
+ reg = <0x22000 0x1000>;
+ };
+ dcsr-cpu-sb-proxy@40000 {
+ compatible = "fsl,dcsr-e500mc-sb-proxy", "fsl,dcsr-cpu-sb-proxy";
+ cpu-handle = <&cpu0>;
+ reg = <0x40000 0x1000>;
+ };
+ dcsr-cpu-sb-proxy@41000 {
+ compatible = "fsl,dcsr-e500mc-sb-proxy", "fsl,dcsr-cpu-sb-proxy";
+ cpu-handle = <&cpu1>;
+ reg = <0x41000 0x1000>;
+ };
+ dcsr-cpu-sb-proxy@42000 {
+ compatible = "fsl,dcsr-e500mc-sb-proxy", "fsl,dcsr-cpu-sb-proxy";
+ cpu-handle = <&cpu2>;
+ reg = <0x42000 0x1000>;
+ };
+ dcsr-cpu-sb-proxy@43000 {
+ compatible = "fsl,dcsr-e500mc-sb-proxy", "fsl,dcsr-cpu-sb-proxy";
+ cpu-handle = <&cpu3>;
+ reg = <0x43000 0x1000>;
+ };
+ };
+
+ bman-portals@ff4000000 {
+ #address-cells = <0x1>;
+ #size-cells = <0x1>;
+ compatible = "bman-portals";
+ ranges = <0x0 0xf 0xfde00000 0x200000>;
+ bman-portal@0 {
+ cell-index = <0x0>;
+ compatible = "fsl,p2041-bman-portal", "fsl,bman-portal";
+ reg = <0x0 0x4000 0x100000 0x1000>;
+ interrupts = <105 2 0 0>;
+ };
+ bman-portal@4000 {
+ cell-index = <0x1>;
+ compatible = "fsl,p2041-bman-portal", "fsl,bman-portal";
+ reg = <0x4000 0x4000 0x101000 0x1000>;
+ interrupts = <107 2 0 0>;
+ };
+ bman-portal@8000 {
+ cell-index = <2>;
+ compatible = "fsl,p2041-bman-portal", "fsl,bman-portal";
+ reg = <0x8000 0x4000 0x102000 0x1000>;
+ interrupts = <109 2 0 0>;
+ };
+ bman-portal@c000 {
+ cell-index = <0x3>;
+ compatible = "fsl,p2041-bman-portal", "fsl,bman-portal";
+ reg = <0xc000 0x4000 0x103000 0x1000>;
+ interrupts = <111 2 0 0>;
+ };
+ bman-portal@10000 {
+ cell-index = <0x4>;
+ compatible = "fsl,p2041-bman-portal", "fsl,bman-portal";
+ reg = <0x10000 0x4000 0x104000 0x1000>;
+ interrupts = <113 2 0 0>;
+ };
+ bman-portal@14000 {
+ cell-index = <0x5>;
+ compatible = "fsl,p2041-bman-portal", "fsl,bman-portal";
+ reg = <0x14000 0x4000 0x105000 0x1000>;
+ interrupts = <115 2 0 0>;
+ };
+ bman-portal@18000 {
+ cell-index = <0x6>;
+ compatible = "fsl,p2041-bman-portal", "fsl,bman-portal";
+ reg = <0x18000 0x4000 0x106000 0x1000>;
+ interrupts = <117 2 0 0>;
+ };
+ bman-portal@1c000 {
+ cell-index = <0x7>;
+ compatible = "fsl,p2041-bman-portal", "fsl,bman-portal";
+ reg = <0x1c000 0x4000 0x107000 0x1000>;
+ interrupts = <119 2 0 0>;
+ };
+ bman-portal@20000 {
+ cell-index = <0x8>;
+ compatible = "fsl,p2041-bman-portal", "fsl,bman-portal";
+ reg = <0x20000 0x4000 0x108000 0x1000>;
+ interrupts = <121 2 0 0>;
+ };
+ bman-portal@24000 {
+ cell-index = <0x9>;
+ compatible = "fsl,p2041-bman-portal", "fsl,bman-portal";
+ reg = <0x24000 0x4000 0x109000 0x1000>;
+ interrupts = <123 2 0 0>;
+ };
+
+ buffer-pool@0 {
+ compatible = "fsl,p2041-bpool", "fsl,bpool";
+ fsl,bpid = <0>;
+ fsl,bpool-cfg = <0 0x100 0 1 0 0x100>;
+ };
+ };
+
+ qman-portals@ff4200000 {
+ #address-cells = <0x1>;
+ #size-cells = <0x1>;
+ compatible = "qman-portals";
+ ranges = <0x0 0xf 0xfdc00000 0x200000>;
+ qportal0: qman-portal@0 {
+ cell-index = <0x0>;
+ compatible = "fsl,p2041-qman-portal", "fsl,qman-portal";
+ reg = <0x0 0x4000 0x100000 0x1000>;
+ interrupts = <104 0x2 0 0>;
+ fsl,qman-channel-id = <0x0>;
+ };
+
+ qportal1: qman-portal@4000 {
+ cell-index = <0x1>;
+ compatible = "fsl,p2041-qman-portal", "fsl,qman-portal";
+ reg = <0x4000 0x4000 0x101000 0x1000>;
+ interrupts = <106 0x2 0 0>;
+ fsl,qman-channel-id = <0x1>;
+ };
+
+ qportal2: qman-portal@8000 {
+ cell-index = <0x2>;
+ compatible = "fsl,p2041-qman-portal", "fsl,qman-portal";
+ reg = <0x8000 0x4000 0x102000 0x1000>;
+ interrupts = <108 0x2 0 0>;
+ fsl,qman-channel-id = <0x2>;
+ };
+
+ qportal3: qman-portal@c000 {
+ cell-index = <0x3>;
+ compatible = "fsl,p2041-qman-portal", "fsl,qman-portal";
+ reg = <0xc000 0x4000 0x103000 0x1000>;
+ interrupts = <110 0x2 0 0>;
+ fsl,qman-channel-id = <0x3>;
+ };
+
+ qportal4: qman-portal@10000 {
+ cell-index = <0x4>;
+ compatible = "fsl,p2041-qman-portal", "fsl,qman-portal";
+ reg = <0x10000 0x4000 0x104000 0x1000>;
+ interrupts = <112 0x2 0 0>;
+ fsl,qman-channel-id = <0x4>;
+ };
+
+ qportal5: qman-portal@14000 {
+ cell-index = <0x5>;
+ compatible = "fsl,p2041-qman-portal", "fsl,qman-portal";
+ reg = <0x14000 0x4000 0x105000 0x1000>;
+ interrupts = <114 0x2 0 0>;
+ fsl,qman-channel-id = <0x5>;
+ };
+
+ qportal6: qman-portal@18000 {
+ cell-index = <0x6>;
+ compatible = "fsl,p2041-qman-portal", "fsl,qman-portal";
+ reg = <0x18000 0x4000 0x106000 0x1000>;
+ interrupts = <116 0x2 0 0>;
+ fsl,qman-channel-id = <0x6>;
+ };
+
+ qportal7: qman-portal@1c000 {
+ cell-index = <0x7>;
+ compatible = "fsl,p2041-qman-portal", "fsl,qman-portal";
+ reg = <0x1c000 0x4000 0x107000 0x1000>;
+ interrupts = <118 0x2 0 0>;
+ fsl,qman-channel-id = <0x7>;
+ };
+
+ qportal8: qman-portal@20000 {
+ cell-index = <0x8>;
+ compatible = "fsl,p2041-qman-portal", "fsl,qman-portal";
+ reg = <0x20000 0x4000 0x108000 0x1000>;
+ interrupts = <120 0x2 0 0>;
+ fsl,qman-channel-id = <0x8>;
+ };
+
+ qportal9: qman-portal@24000 {
+ cell-index = <0x9>;
+ compatible = "fsl,p2041-qman-portal", "fsl,qman-portal";
+ reg = <0x24000 0x4000 0x109000 0x1000>;
+ interrupts = <122 0x2 0 0>;
+ fsl,qman-channel-id = <0x9>;
+ };
+
+ qpool1: qman-pool@1 {
+ cell-index = <1>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x21>;
+ };
+
+ qpool2: qman-pool@2 {
+ cell-index = <2>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x22>;
+ };
+
+ qpool3: qman-pool@3 {
+ cell-index = <3>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x23>;
+ };
+
+ qpool4: qman-pool@4 {
+ cell-index = <4>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x24>;
+ };
+
+ qpool5: qman-pool@5 {
+ cell-index = <5>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x25>;
+ };
+
+ qpool6: qman-pool@6 {
+ cell-index = <6>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x26>;
+ };
+
+ qpool7: qman-pool@7 {
+ cell-index = <7>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x27>;
+ };
+
+ qpool8: qman-pool@8 {
+ cell-index = <8>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x28>;
+ };
+
+ qpool9: qman-pool@9 {
+ cell-index = <9>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x29>;
+ };
+
+ qpool10: qman-pool@10 {
+ cell-index = <10>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2a>;
+ };
+
+ qpool11: qman-pool@11 {
+ cell-index = <11>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2b>;
+ };
+
+ qpool12: qman-pool@12 {
+ cell-index = <12>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2c>;
+ };
+
+ qpool13: qman-pool@13 {
+ cell-index = <13>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2d>;
+ };
+
+ qpool14: qman-pool@14 {
+ cell-index = <14>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2e>;
+ };
+
+ qpool15: qman-pool@15 {
+ cell-index = <15>;
+ compatible = "fsl,p2041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2f>;
+ };
+ };
+
+ soc: soc@ffe000000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ device_type = "soc";
+ compatible = "simple-bus";
+
+ bus-frequency = <0>; // Filled out by kernel.
+
+ ranges = <0x00000000 0xf 0xfe000000 0x1000000>;
+ reg = <0xf 0xfe000000 0 0x00001000>;
+
+ soc-sram-error {
+ compatible = "fsl,soc-sram-error";
+ interrupts = <16 2 1 29>;
+ };
+
+ corenet-law@0 {
+ compatible = "fsl,corenet-law";
+ reg = <0x0 0x1000>;
+ fsl,num-laws = <32>;
+ };
+
+ ddr: memory-controller@8000 {
+ compatible = "fsl,qoriq-memory-controller-v4.5", "fsl,qoriq-memory-controller";
+ reg = <0x8000 0x1000>;
+ interrupts = <16 2 1 23>;
+ };
+
+ cpc: l3-cache-controller@10000 {
+ compatible = "fsl,p2041-l3-cache-controller", "fsl,p4080-l3-cache-controller", "cache";
+ reg = <0x10000 0x1000>;
+ interrupts = <16 2 1 27>;
+ };
+
+ corenet-cf@18000 {
+ compatible = "fsl,corenet-cf";
+ reg = <0x18000 0x1000>;
+ interrupts = <16 2 1 31>;
+ fsl,ccf-num-csdids = <32>;
+ fsl,ccf-num-snoopids = <32>;
+ };
+
+ iommu@20000 {
+ compatible = "fsl,pamu-v1.0", "fsl,pamu";
+ reg = <0x20000 0x4000>;
+ interrupts = <
+ 24 2 0 0
+ 16 2 1 30>;
+ };
+
+ mpic: pic@40000 {
+ clock-frequency = <0>;
+ interrupt-controller;
+ #address-cells = <0>;
+ #interrupt-cells = <4>;
+ reg = <0x40000 0x40000>;
+ compatible = "fsl,mpic", "chrp,open-pic";
+ device_type = "open-pic";
+ };
+
+ msi0: msi@41600 {
+ compatible = "fsl,mpic-msi";
+ reg = <0x41600 0x200>;
+ msi-available-ranges = <0 0x100>;
+ interrupts = <
+ 0xe0 0 0 0
+ 0xe1 0 0 0
+ 0xe2 0 0 0
+ 0xe3 0 0 0
+ 0xe4 0 0 0
+ 0xe5 0 0 0
+ 0xe6 0 0 0
+ 0xe7 0 0 0>;
+ };
+
+ msi1: msi@41800 {
+ compatible = "fsl,mpic-msi";
+ reg = <0x41800 0x200>;
+ msi-available-ranges = <0 0x100>;
+ interrupts = <
+ 0xe8 0 0 0
+ 0xe9 0 0 0
+ 0xea 0 0 0
+ 0xeb 0 0 0
+ 0xec 0 0 0
+ 0xed 0 0 0
+ 0xee 0 0 0
+ 0xef 0 0 0>;
+ };
+
+ msi2: msi@41a00 {
+ compatible = "fsl,mpic-msi";
+ reg = <0x41a00 0x200>;
+ msi-available-ranges = <0 0x100>;
+ interrupts = <
+ 0xf0 0 0 0
+ 0xf1 0 0 0
+ 0xf2 0 0 0
+ 0xf3 0 0 0
+ 0xf4 0 0 0
+ 0xf5 0 0 0
+ 0xf6 0 0 0
+ 0xf7 0 0 0>;
+ };
+
+ guts: global-utilities@e0000 {
+ compatible = "fsl,qoriq-device-config-1.0";
+ reg = <0xe0000 0xe00>;
+ fsl,has-rstcr;
+ #sleep-cells = <1>;
+ fsl,liodn-bits = <12>;
+ };
+
+ pins: global-utilities@e0e00 {
+ compatible = "fsl,qoriq-pin-control-1.0";
+ reg = <0xe0e00 0x200>;
+ #sleep-cells = <2>;
+ };
+
+ clockgen: global-utilities@e1000 {
+ compatible = "fsl,p2041-clockgen", "fsl,qoriq-clockgen-1.0";
+ reg = <0xe1000 0x1000>;
+ clock-frequency = <0>;
+ };
+
+ rcpm: global-utilities@e2000 {
+ compatible = "fsl,qoriq-rcpm-1.0";
+ reg = <0xe2000 0x1000>;
+ #sleep-cells = <1>;
+ };
+
+ sfp: sfp@e8000 {
+ compatible = "fsl,p2041-sfp", "fsl,qoriq-sfp-1.0";
+ reg = <0xe8000 0x1000>;
+ };
+
+ serdes: serdes@ea000 {
+ compatible = "fsl,p2041-serdes";
+ reg = <0xea000 0x1000>;
+ };
+
+ dma0: dma@100300 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,p2041-dma", "fsl,eloplus-dma";
+ reg = <0x100300 0x4>;
+ ranges = <0x0 0x100100 0x200>;
+ cell-index = <0>;
+ dma-channel@0 {
+ compatible = "fsl,p2041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x0 0x80>;
+ cell-index = <0>;
+ interrupts = <28 2 0 0>;
+ };
+ dma-channel@80 {
+ compatible = "fsl,p2041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x80 0x80>;
+ cell-index = <1>;
+ interrupts = <29 2 0 0>;
+ };
+ dma-channel@100 {
+ compatible = "fsl,p2041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x100 0x80>;
+ cell-index = <2>;
+ interrupts = <30 2 0 0>;
+ };
+ dma-channel@180 {
+ compatible = "fsl,p2041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x180 0x80>;
+ cell-index = <3>;
+ interrupts = <31 2 0 0>;
+ };
+ };
+
+ dma1: dma@101300 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,p2041-dma", "fsl,eloplus-dma";
+ reg = <0x101300 0x4>;
+ ranges = <0x0 0x101100 0x200>;
+ cell-index = <1>;
+ dma-channel@0 {
+ compatible = "fsl,p2041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x0 0x80>;
+ cell-index = <0>;
+ interrupts = <32 2 0 0>;
+ };
+ dma-channel@80 {
+ compatible = "fsl,p2041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x80 0x80>;
+ cell-index = <1>;
+ interrupts = <33 2 0 0>;
+ };
+ dma-channel@100 {
+ compatible = "fsl,p2041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x100 0x80>;
+ cell-index = <2>;
+ interrupts = <34 2 0 0>;
+ };
+ dma-channel@180 {
+ compatible = "fsl,p2041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x180 0x80>;
+ cell-index = <3>;
+ interrupts = <35 2 0 0>;
+ };
+ };
+
+ spi@110000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,p2041-espi", "fsl,mpc8536-espi";
+ reg = <0x110000 0x1000>;
+ interrupts = <53 0x2 0 0>;
+ fsl,espi-num-chipselects = <4>;
+ };
+
+ sdhc: sdhc@114000 {
+ compatible = "fsl,p2041-esdhc", "fsl,esdhc";
+ reg = <0x114000 0x1000>;
+ interrupts = <48 2 0 0>;
+ sdhci,auto-cmd12;
+ clock-frequency = <0>;
+ };
+
+ i2c@118000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <0>;
+ compatible = "fsl-i2c";
+ reg = <0x118000 0x100>;
+ interrupts = <38 2 0 0>;
+ dfsrr;
+ };
+
+ i2c@118100 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <1>;
+ compatible = "fsl-i2c";
+ reg = <0x118100 0x100>;
+ interrupts = <38 2 0 0>;
+ dfsrr;
+ };
+
+ i2c@119000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <2>;
+ compatible = "fsl-i2c";
+ reg = <0x119000 0x100>;
+ interrupts = <39 2 0 0>;
+ dfsrr;
+ };
+
+ i2c@119100 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <3>;
+ compatible = "fsl-i2c";
+ reg = <0x119100 0x100>;
+ interrupts = <39 2 0 0>;
+ dfsrr;
+ };
+
+ serial0: serial@11c500 {
+ cell-index = <0>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11c500 0x100>;
+ clock-frequency = <0>;
+ interrupts = <36 2 0 0>;
+ };
+
+ serial1: serial@11c600 {
+ cell-index = <1>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11c600 0x100>;
+ clock-frequency = <0>;
+ interrupts = <36 2 0 0>;
+ };
+
+ serial2: serial@11d500 {
+ cell-index = <2>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11d500 0x100>;
+ clock-frequency = <0>;
+ interrupts = <37 2 0 0>;
+ };
+
+ serial3: serial@11d600 {
+ cell-index = <3>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11d600 0x100>;
+ clock-frequency = <0>;
+ interrupts = <37 2 0 0>;
+ };
+
+ gpio0: gpio@130000 {
+ compatible = "fsl,p2041-gpio", "fsl,qoriq-gpio";
+ reg = <0x130000 0x1000>;
+ interrupts = <55 2 0 0>;
+ #gpio-cells = <2>;
+ gpio-controller;
+ };
+
+ rman: rman@1e0000 {
+ compatible = "fsl,rman";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x1e0000 0x20000>;
+ reg = <0x1e0000 0x20000>;
+ interrupts = <16 2 1 11>; /* err_irq */
+ fsl,qman-channels-id = <0x62 0x63>;
+
+ inbound-block@0 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x0 0x800>;
+ };
+ global-cfg@b00 {
+ compatible = "fsl,rman-global-cfg";
+ reg = <0xb00 0x500>;
+ };
+ inbound-block@1000 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x1000 0x800>;
+ };
+ inbound-block@2000 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x2000 0x800>;
+ };
+ inbound-block@3000 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x3000 0x800>;
+ };
+ };
+
+ usb0: usb@210000 {
+ compatible = "fsl,p2041-usb2-mph",
+ "fsl,mpc85xx-usb2-mph", "fsl-usb2-mph";
+ reg = <0x210000 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ interrupts = <44 0x2 0 0>;
+ phy_type = "utmi";
+ port0;
+ };
+
+ usb1: usb@211000 {
+ compatible = "fsl,p2041-usb2-dr",
+ "fsl,mpc85xx-usb2-dr", "fsl-usb2-dr";
+ reg = <0x211000 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ interrupts = <45 0x2 0 0>;
+ phy_type = "utmi";
+ };
+
+ sata@220000 {
+ compatible = "fsl,p2041-sata", "fsl,pq-sata-v2";
+ reg = <0x220000 0x1000>;
+ interrupts = <68 0x2 0 0>;
+ };
+
+ sata@221000 {
+ compatible = "fsl,p2041-sata", "fsl,pq-sata-v2";
+ reg = <0x221000 0x1000>;
+ interrupts = <69 0x2 0 0>;
+ };
+
+ crypto: crypto@300000 {
+ compatible = "fsl,sec-v4.2", "fsl,sec-v4.0";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x300000 0x10000>;
+ ranges = <0 0x300000 0x10000>;
+ interrupts = <92 2 0 0>;
+
+ sec_jr0: jr@1000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x1000 0x1000>;
+ interrupts = <88 2 0 0>;
+ };
+
+ sec_jr1: jr@2000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x2000 0x1000>;
+ interrupts = <89 2 0 0>;
+ };
+
+ sec_jr2: jr@3000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x3000 0x1000>;
+ interrupts = <90 2 0 0>;
+ };
+
+ sec_jr3: jr@4000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x4000 0x1000>;
+ interrupts = <91 2 0 0>;
+ };
+
+ rtic@6000 {
+ compatible = "fsl,sec-v4.2-rtic",
+ "fsl,sec-v4.0-rtic";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x6000 0x100>;
+ ranges = <0x0 0x6100 0xe00>;
+
+ rtic_a: rtic-a@0 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x00 0x20 0x100 0x80>;
+ };
+
+ rtic_b: rtic-b@20 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x20 0x20 0x200 0x80>;
+ };
+
+ rtic_c: rtic-c@40 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x40 0x20 0x300 0x80>;
+ };
+
+ rtic_d: rtic-d@60 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x60 0x20 0x500 0x80>;
+ };
+ };
+ };
+
+ sec_mon: sec_mon@314000 {
+ compatible = "fsl,sec-v4.2-mon", "fsl,sec-v4.0-mon";
+ reg = <0x314000 0x1000>;
+ interrupts = <93 2 0 0>;
+ };
+
+ pme: pme@316000 {
+ compatible = "fsl,pme";
+ reg = <0x316000 0x10000>;
+ /* fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
+ /* fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
+ interrupts = <16 2 1 5>;
+ };
+
+ qman: qman@318000 {
+ compatible = "fsl,p2041-qman", "fsl,qman";
+ reg = <0x318000 0x1000>;
+ interrupts = <16 2 1 3>;
+ /* Commented out, use default allocation */
+ /* fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
+ /* fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
+ };
+
+ bman: bman@31a000 {
+ compatible = "fsl,p2041-bman", "fsl,bman";
+ reg = <0x31a000 0x1000>;
+ interrupts = <16 2 1 2>;
+ /* Same as fsl,qman-*, use default allocation */
+ /* fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
+ };
+
+ fman0: fman@400000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ cell-index = <0>;
+ compatible = "fsl,p2041-fman", "fsl,fman", "simple-bus";
+ ranges = <0 0x400000 0x100000>;
+ reg = <0x400000 0x100000>;
+ clock-frequency = <0>;
+ interrupts = <
+ 96 2 0 0
+ 16 2 1 1>;
+
+ cc@0 {
+ compatible = "fsl,p2041-fman-cc", "fsl,fman-cc";
+ };
+
+ parser@c7000 {
+ compatible = "fsl,p2041-fman-parser", "fsl,fman-parser";
+ reg = <0xc7000 0x1000>;
+ };
+
+ keygen@c1000 {
+ compatible = "fsl,p2041-fman-keygen", "fsl,fman-keygen";
+ reg = <0xc1000 0x1000>;
+ };
+
+ policer@c0000 {
+ compatible = "fsl,p2041-fman-policer", "fsl,fman-policer";
+ reg = <0xc0000 0x1000>;
+ };
+
+ muram@0 {
+ compatible = "fsl,p2041-fman-muram", "fsl,fman-muram";
+ reg = <0x0 0x28000>;
+ };
+
+ bmi@80000 {
+ compatible = "fsl,p2041-fman-bmi", "fsl,fman-bmi";
+ reg = <0x80000 0x400>;
+ };
+
+ qmi@80400 {
+ compatible = "fsl,p2041-fman-qmi", "fsl,fman-qmi";
+ reg = <0x80400 0x400>;
+ };
+
+ fman0_rx0: port@88000 {
+ cell-index = <0>;
+ compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x88000 0x1000>;
+ };
+ fman0_rx1: port@89000 {
+ cell-index = <1>;
+ compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x89000 0x1000>;
+ };
+ fman0_rx2: port@8a000 {
+ cell-index = <2>;
+ compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x8a000 0x1000>;
+ };
+ fman0_rx3: port@8b000 {
+ cell-index = <3>;
+ compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x8b000 0x1000>;
+ };
+ fman0_rx4: port@8c000 {
+ cell-index = <4>;
+ compatible = "fsl,p2041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x8c000 0x1000>;
+ };
+ fman0_rx5: port@90000 {
+ cell-index = <0>;
+ compatible = "fsl,p2041-fman-port-10g-rx", "fsl,fman-port-10g-rx";
+ reg = <0x90000 0x1000>;
+ };
+
+ fman0_tx5: port@b0000 {
+ cell-index = <0>;
+ compatible = "fsl,p2041-fman-port-10g-tx", "fsl,fman-port-10g-tx";
+ reg = <0xb0000 0x1000>;
+ fsl,qman-channel-id = <0x40>;
+ };
+ fman0_tx0: port@a8000 {
+ cell-index = <0>;
+ compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xa8000 0x1000>;
+ fsl,qman-channel-id = <0x41>;
+ };
+ fman0_tx1: port@a9000 {
+ cell-index = <1>;
+ compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xa9000 0x1000>;
+ fsl,qman-channel-id = <0x42>;
+ };
+ fman0_tx2: port@aa000 {
+ cell-index = <2>;
+ compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xaa000 0x1000>;
+ fsl,qman-channel-id = <0x43>;
+ };
+ fman0_tx3: port@ab000 {
+ cell-index = <3>;
+ compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xab000 0x1000>;
+ fsl,qman-channel-id = <0x44>;
+ };
+ fman0_tx4: port@ac000 {
+ cell-index = <4>;
+ compatible = "fsl,p2041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xac000 0x1000>;
+ fsl,qman-channel-id = <0x45>;
+ };
+
+ fman0_oh0: port@81000 {
+ cell-index = <0>;
+ compatible = "fsl,p2041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x81000 0x1000>;
+ fsl,qman-channel-id = <0x46>;
+ };
+ fman0_oh1: port@82000 {
+ cell-index = <1>;
+ compatible = "fsl,p2041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x82000 0x1000>;
+ fsl,qman-channel-id = <0x47>;
+ };
+ fman0_oh2: port@83000 {
+ cell-index = <2>;
+ compatible = "fsl,p2041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x83000 0x1000>;
+ fsl,qman-channel-id = <0x48>;
+ };
+ fman0_oh3: port@84000 {
+ cell-index = <3>;
+ compatible = "fsl,p2041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x84000 0x1000>;
+ fsl,qman-channel-id = <0x49>;
+ };
+ fman0_oh4: port@85000 {
+ cell-index = <4>;
+ compatible = "fsl,p2041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x85000 0x1000>;
+ fsl,qman-channel-id = <0x4a>;
+ };
+ fman0_oh5: port@86000 {
+ cell-index = <5>;
+ compatible = "fsl,p2041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x86000 0x1000>;
+ fsl,qman-channel-id = <0x4b>;
+ };
+ fman0_oh6: port@87000 {
+ cell-index = <6>;
+ compatible = "fsl,p2041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x87000 0x1000>;
+ };
+
+ enet0: ethernet@e0000 {
+ cell-index = <0>;
+ compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe0000 0x1000>;
+ fsl,port-handles = <&fman0_rx0 &fman0_tx0>;
+ };
+
+ mdio0: mdio@e1120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-mdio";
+ reg = <0xe1120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet1: ethernet@e2000 {
+ cell-index = <1>;
+ compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe2000 0x1000>;
+ fsl,port-handles = <&fman0_rx1 &fman0_tx1>;
+ };
+
+ mdio@e3120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe3120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet2: ethernet@e4000 {
+ cell-index = <2>;
+ compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe4000 0x1000>;
+ fsl,port-handles = <&fman0_rx2 &fman0_tx2>;
+ };
+
+ mdio@e5120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe5120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet3: ethernet@e6000 {
+ cell-index = <3>;
+ compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe6000 0x1000>;
+ fsl,port-handles = <&fman0_rx3 &fman0_tx3>;
+ };
+
+ mdio@e7120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe7120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet4: ethernet@e8000 {
+ cell-index = <4>;
+ compatible = "fsl,p2041-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe8000 0x1000>;
+ fsl,port-handles = <&fman0_rx4 &fman0_tx4>;
+ };
+
+ mdio@e9120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe9120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet5: ethernet@f0000 {
+ cell-index = <0>;
+ compatible = "fsl,p2041-fman-10g-mac", "fsl,fman-10g-mac";
+ reg = <0xf0000 0x1000>;
+ fsl,port-handles = <&fman0_rx5 &fman0_tx5>;
+ };
+
+ mdio@f1000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-xmdio";
+ reg = <0xf1000 0x1000>;
+ interrupts = <100 1 0 0>;
+ };
+ };
+ };
+
+ rapidio@ffe0c0000 {
+ compatible = "fsl,srio";
+ interrupts = <16 2 1 11>;
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ port1 {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ cell-index = <1>;
+ };
+
+ port2 {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ cell-index = <2>;
+ };
+ };
+
+ localbus@ffe124000 {
+ compatible = "fsl,p2041-elbc", "fsl,elbc", "simple-bus";
+ interrupts = <25 2 0 0>;
+ #address-cells = <2>;
+ #size-cells = <1>;
+ };
+
+ pci0: pcie@ffe200000 {
+ compatible = "fsl,p2041-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "disabled";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ bus-range = <0x0 0xff>;
+ clock-frequency = <33333333>;
+ fsl,msi = <&msi0>;
+ interrupts = <16 2 1 15>;
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 15>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 40 1 0 0
+ 0000 0 0 2 &mpic 1 1 0 0
+ 0000 0 0 3 &mpic 2 1 0 0
+ 0000 0 0 4 &mpic 3 1 0 0
+ >;
+ };
+ };
+
+ pci1: pcie@ffe201000 {
+ compatible = "fsl,p2041-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "okay";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ bus-range = <0 0xff>;
+ clock-frequency = <33333333>;
+ fsl,msi = <&msi1>;
+ interrupts = <16 2 1 14>;
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 14>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 41 1 0 0
+ 0000 0 0 2 &mpic 5 1 0 0
+ 0000 0 0 3 &mpic 6 1 0 0
+ 0000 0 0 4 &mpic 7 1 0 0
+ >;
+ };
+ };
+
+ pci2: pcie@ffe202000 {
+ compatible = "fsl,p2041-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "disabled";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ bus-range = <0x0 0xff>;
+ clock-frequency = <33333333>;
+ fsl,msi = <&msi2>;
+ interrupts = <16 2 1 13>;
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 13>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 42 1 0 0
+ 0000 0 0 2 &mpic 9 1 0 0
+ 0000 0 0 3 &mpic 10 1 0 0
+ 0000 0 0 4 &mpic 11 1 0 0
+ >;
+ };
+ };
+};
diff --git a/sys/boot/fdt/dts/p3041ds.dts b/sys/boot/fdt/dts/p3041ds.dts
index 01875d95a0b5..70787e432765 100644
--- a/sys/boot/fdt/dts/p3041ds.dts
+++ b/sys/boot/fdt/dts/p3041ds.dts
@@ -33,7 +33,7 @@
*/
/* $FreeBSD$ */
-/dts-v1/;
+/include/ "p3041si.dtsi"
/ {
model = "fsl,P3041DS";
@@ -43,305 +43,155 @@
interrupt-parent = <&mpic>;
aliases {
- ccsr = &soc;
-
- serial0 = &serial0;
- serial1 = &serial1;
- serial2 = &serial2;
- serial3 = &serial3;
- pci0 = &pci0;
- pci1 = &pci1;
- pci2 = &pci2;
- pci3 = &pci3;
- usb0 = &usb0;
- usb1 = &usb1;
- dma0 = &dma0;
- dma1 = &dma1;
- sdhc = &sdhc;
- msi0 = &msi0;
- msi1 = &msi1;
- msi2 = &msi2;
-
- crypto = &crypto;
- sec_jr0 = &sec_jr0;
- sec_jr1 = &sec_jr1;
- sec_jr2 = &sec_jr2;
- sec_jr3 = &sec_jr3;
- rtic_a = &rtic_a;
- rtic_b = &rtic_b;
- rtic_c = &rtic_c;
- rtic_d = &rtic_d;
- sec_mon = &sec_mon;
+ phy_rgmii_0 = &phy_rgmii_0;
+ phy_rgmii_1 = &phy_rgmii_1;
+ phy_sgmii_1c = &phy_sgmii_1c;
+ phy_sgmii_1d = &phy_sgmii_1d;
+ phy_sgmii_1e = &phy_sgmii_1e;
+ phy_sgmii_1f = &phy_sgmii_1f;
+ phy_xgmii_1 = &phy_xgmii_1;
+ phy_xgmii_2 = &phy_xgmii_2;
+ emi1_rgmii = &hydra_mdio_rgmii;
+ emi1_sgmii = &hydra_mdio_sgmii;
+ emi2_xgmii = &hydra_mdio_xgmii;
};
- cpus {
- #address-cells = <1>;
- #size-cells = <0>;
+ memory {
+ device_type = "memory";
+ reg = <0x00000000 0x00000000 0x00000000 0x80000000>;
+ };
- cpu0: PowerPC,e500mc@0 {
- device_type = "cpu";
- reg = <0>;
- next-level-cache = <&L2_0>;
- L2_0: l2-cache {
- next-level-cache = <&cpc>;
- };
+ dcsr: dcsr@f00000000 {
+ ranges = <0x00000000 0xf 0x00000000 0x01008000>;
+ };
+
+ bman-portals@ff4000000 {
+ bman-portal@0 {
+ cpu-handle = <&cpu0>;
};
- cpu1: PowerPC,e500mc@1 {
- device_type = "cpu";
- reg = <1>;
- next-level-cache = <&L2_1>;
- L2_1: l2-cache {
- next-level-cache = <&cpc>;
- };
+ bman-portal@4000 {
+ cpu-handle = <&cpu1>;
};
- cpu2: PowerPC,e500mc@2 {
- device_type = "cpu";
- reg = <2>;
- next-level-cache = <&L2_2>;
- L2_2: l2-cache {
- next-level-cache = <&cpc>;
- };
+ bman-portal@8000 {
+ cpu-handle = <&cpu2>;
};
- cpu3: PowerPC,e500mc@3 {
- device_type = "cpu";
- reg = <3>;
- next-level-cache = <&L2_3>;
- L2_3: l2-cache {
- next-level-cache = <&cpc>;
- };
+ bman-portal@c000 {
+ cpu-handle = <&cpu3>;
};
- };
-
- memory {
- device_type = "memory";
- };
-
- soc: soc@ffe000000 {
- #address-cells = <1>;
- #size-cells = <1>;
- device_type = "soc";
- compatible = "simple-bus";
- ranges = <0x00000000 0xf 0xfe000000 0x1000000>;
- reg = <0xf 0xfe000000 0 0x00001000>;
-
- soc-sram-error {
- compatible = "fsl,soc-sram-error";
- interrupts = <16 2 1 29>;
- };
-
- corenet-law@0 {
- compatible = "fsl,corenet-law";
- reg = <0x0 0x1000>;
- fsl,num-laws = <32>;
- };
-
- memory-controller@8000 {
- compatible = "fsl,qoriq-memory-controller-v4.5", "fsl,qoriq-memory-controller";
- reg = <0x8000 0x1000>;
- interrupts = <16 2 1 23>;
- };
-
- cpc: l3-cache-controller@10000 {
- compatible = "fsl,p3041-l3-cache-controller", "fsl,p4080-l3-cache-controller", "cache";
- reg = <0x10000 0x1000>;
- interrupts = <16 2 1 27>;
- };
-
- corenet-cf@18000 {
- compatible = "fsl,corenet-cf";
- reg = <0x18000 0x1000>;
- interrupts = <16 2 1 31>;
- fsl,ccf-num-csdids = <32>;
- fsl,ccf-num-snoopids = <32>;
- };
-
- iommu@20000 {
- compatible = "fsl,pamu-v1.0", "fsl,pamu";
- reg = <0x20000 0x4000>;
- interrupts = <
- 24 2 0 0
- 16 2 1 30>;
- };
-
- mpic: pic@40000 {
- clock-frequency = <0>;
- interrupt-controller;
- #address-cells = <0>;
- #interrupt-cells = <4>;
- reg = <0x40000 0x40000>;
- compatible = "fsl,mpic", "chrp,open-pic";
- device_type = "open-pic";
- };
-
- msi0: msi@41600 {
- compatible = "fsl,mpic-msi";
- reg = <0x41600 0x200>;
- msi-available-ranges = <0 0x100>;
- interrupts = <
- 0xe0 0 0 0
- 0xe1 0 0 0
- 0xe2 0 0 0
- 0xe3 0 0 0
- 0xe4 0 0 0
- 0xe5 0 0 0
- 0xe6 0 0 0
- 0xe7 0 0 0>;
- };
-
- msi1: msi@41800 {
- compatible = "fsl,mpic-msi";
- reg = <0x41800 0x200>;
- msi-available-ranges = <0 0x100>;
- interrupts = <
- 0xe8 0 0 0
- 0xe9 0 0 0
- 0xea 0 0 0
- 0xeb 0 0 0
- 0xec 0 0 0
- 0xed 0 0 0
- 0xee 0 0 0
- 0xef 0 0 0>;
- };
-
- msi2: msi@41a00 {
- compatible = "fsl,mpic-msi";
- reg = <0x41a00 0x200>;
- msi-available-ranges = <0 0x100>;
- interrupts = <
- 0xf0 0 0 0
- 0xf1 0 0 0
- 0xf2 0 0 0
- 0xf3 0 0 0
- 0xf4 0 0 0
- 0xf5 0 0 0
- 0xf6 0 0 0
- 0xf7 0 0 0>;
- };
-
- guts: global-utilities@e0000 {
- compatible = "fsl,qoriq-device-config-1.0";
- reg = <0xe0000 0xe00>;
- fsl,has-rstcr;
- #sleep-cells = <1>;
- fsl,liodn-bits = <12>;
+ bman-portal@10000 {
+ };
+ bman-portal@14000 {
+ };
+ bman-portal@18000 {
+ };
+ bman-portal@1c000 {
+ };
+ bman-portal@20000 {
+ };
+ bman-portal@24000 {
};
- pins: global-utilities@e0e00 {
- compatible = "fsl,qoriq-pin-control-1.0";
- reg = <0xe0e00 0x200>;
- #sleep-cells = <2>;
- };
-
- clockgen: global-utilities@e1000 {
- compatible = "fsl,p3041-clockgen", "fsl,qoriq-clockgen-1.0";
- reg = <0xe1000 0x1000>;
- clock-frequency = <0>;
- };
-
- rcpm: global-utilities@e2000 {
- compatible = "fsl,qoriq-rcpm-1.0";
- reg = <0xe2000 0x1000>;
- #sleep-cells = <1>;
- };
-
- sfp: sfp@e8000 {
- compatible = "fsl,p3041-sfp", "fsl,qoriq-sfp-1.0";
- reg = <0xe8000 0x1000>;
- };
-
- serdes: serdes@ea000 {
- compatible = "fsl,p3041-serdes";
- reg = <0xea000 0x1000>;
- };
-
- dma0: dma@100300 {
- #address-cells = <1>;
- #size-cells = <1>;
- compatible = "fsl,p3041-dma", "fsl,eloplus-dma";
- reg = <0x100300 0x4>;
- ranges = <0x0 0x100100 0x200>;
- cell-index = <0>;
- dma-channel@0 {
- compatible = "fsl,p3041-dma-channel",
- "fsl,eloplus-dma-channel";
- reg = <0x0 0x80>;
- cell-index = <0>;
- interrupts = <28 2 0 0>;
- };
- dma-channel@80 {
- compatible = "fsl,p3041-dma-channel",
- "fsl,eloplus-dma-channel";
- reg = <0x80 0x80>;
- cell-index = <1>;
- interrupts = <29 2 0 0>;
- };
- dma-channel@100 {
- compatible = "fsl,p3041-dma-channel",
- "fsl,eloplus-dma-channel";
- reg = <0x100 0x80>;
- cell-index = <2>;
- interrupts = <30 2 0 0>;
- };
- dma-channel@180 {
- compatible = "fsl,p3041-dma-channel",
- "fsl,eloplus-dma-channel";
- reg = <0x180 0x80>;
- cell-index = <3>;
- interrupts = <31 2 0 0>;
- };
+ buffer-pool@0 {
+ compatible = "fsl,p3041-bpool", "fsl,bpool";
+ fsl,bpid = <0>;
+ fsl,bpool-cfg = <0 0x100 0 1 0 0x100>;
};
+ };
- dma1: dma@101300 {
- #address-cells = <1>;
- #size-cells = <1>;
- compatible = "fsl,p3041-dma", "fsl,eloplus-dma";
- reg = <0x101300 0x4>;
- ranges = <0x0 0x101100 0x200>;
- cell-index = <1>;
- dma-channel@0 {
- compatible = "fsl,p3041-dma-channel",
- "fsl,eloplus-dma-channel";
- reg = <0x0 0x80>;
- cell-index = <0>;
- interrupts = <32 2 0 0>;
- };
- dma-channel@80 {
- compatible = "fsl,p3041-dma-channel",
- "fsl,eloplus-dma-channel";
- reg = <0x80 0x80>;
- cell-index = <1>;
- interrupts = <33 2 0 0>;
- };
- dma-channel@100 {
- compatible = "fsl,p3041-dma-channel",
- "fsl,eloplus-dma-channel";
- reg = <0x100 0x80>;
- cell-index = <2>;
- interrupts = <34 2 0 0>;
- };
- dma-channel@180 {
- compatible = "fsl,p3041-dma-channel",
- "fsl,eloplus-dma-channel";
- reg = <0x180 0x80>;
- cell-index = <3>;
- interrupts = <35 2 0 0>;
- };
+ qman-portals@ff4200000 {
+ qportal0: qman-portal@0 {
+ cpu-handle = <&cpu0>;
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal1: qman-portal@4000 {
+ cpu-handle = <&cpu1>;
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal2: qman-portal@8000 {
+ cpu-handle = <&cpu2>;
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal3: qman-portal@c000 {
+ cpu-handle = <&cpu3>;
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal4: qman-portal@10000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal5: qman-portal@14000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal6: qman-portal@18000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal7: qman-portal@1c000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal8: qman-portal@20000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal9: qman-portal@24000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
};
+ };
+ soc: soc@ffe000000 {
spi@110000 {
- #address-cells = <1>;
- #size-cells = <0>;
- compatible = "fsl,p3041-espi", "fsl,mpc8536-espi";
- reg = <0x110000 0x1000>;
- interrupts = <53 0x2 0 0>;
- fsl,espi-num-chipselects = <4>;
-
flash@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "spansion,s25sl12801";
reg = <0>;
- spi-max-frequency = <40000000>; /* input clock */
+ spi-max-frequency = <35000000>; /* input clock */
partition@u-boot {
label = "u-boot";
reg = <0x00000000 0x00100000>;
@@ -364,32 +214,7 @@
};
};
- sdhc: sdhc@114000 {
- compatible = "fsl,p3041-esdhc", "fsl,esdhc";
- reg = <0x114000 0x1000>;
- interrupts = <48 2 0 0>;
- sdhci,auto-cmd12;
- clock-frequency = <0>;
- };
-
- i2c@118000 {
- #address-cells = <1>;
- #size-cells = <0>;
- cell-index = <0>;
- compatible = "fsl-i2c";
- reg = <0x118000 0x100>;
- interrupts = <38 2 0 0>;
- dfsrr;
- };
-
i2c@118100 {
- #address-cells = <1>;
- #size-cells = <0>;
- cell-index = <1>;
- compatible = "fsl-i2c";
- reg = <0x118100 0x100>;
- interrupts = <38 2 0 0>;
- dfsrr;
eeprom@51 {
compatible = "at24,24c256";
reg = <0x51>;
@@ -400,24 +225,7 @@
};
};
- i2c@119000 {
- #address-cells = <1>;
- #size-cells = <0>;
- cell-index = <2>;
- compatible = "fsl-i2c";
- reg = <0x119000 0x100>;
- interrupts = <39 2 0 0>;
- dfsrr;
- };
-
i2c@119100 {
- #address-cells = <1>;
- #size-cells = <0>;
- cell-index = <3>;
- compatible = "fsl-i2c";
- reg = <0x119100 0x100>;
- interrupts = <39 2 0 0>;
- dfsrr;
rtc@68 {
compatible = "dallas,ds3232";
reg = <0x68>;
@@ -425,329 +233,355 @@
};
};
- serial0: serial@11c500 {
- cell-index = <0>;
- device_type = "serial";
- compatible = "ns16550";
- reg = <0x11c500 0x100>;
- clock-frequency = <0>;
- interrupts = <36 2 0 0>;
- };
-
- serial1: serial@11c600 {
- cell-index = <1>;
- device_type = "serial";
- compatible = "ns16550";
- reg = <0x11c600 0x100>;
- clock-frequency = <0>;
- interrupts = <36 2 0 0>;
+ pme: pme@316000 {
+ /* Commented out, use default allocation */
+ /* fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
+ /* fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
};
- serial2: serial@11d500 {
- cell-index = <2>;
- device_type = "serial";
- compatible = "ns16550";
- reg = <0x11d500 0x100>;
- clock-frequency = <0>;
- interrupts = <37 2 0 0>;
+ qman: qman@318000 {
+ /* Commented out, use default allocation */
+ /* fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
+ /* fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
};
- serial3: serial@11d600 {
- cell-index = <3>;
- device_type = "serial";
- compatible = "ns16550";
- reg = <0x11d600 0x100>;
- clock-frequency = <0>;
- interrupts = <37 2 0 0>;
+ bman: bman@31a000 {
+ /* Same as fsl,qman-*, use default allocation */
+ /* fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
};
- gpio0: gpio@130000 {
- compatible = "fsl,p3041-gpio", "fsl,qoriq-gpio";
- reg = <0x130000 0x1000>;
- interrupts = <55 2 0 0>;
- #gpio-cells = <2>;
- gpio-controller;
- };
+ fman0: fman@400000 {
+ enet0: ethernet@e0000 {
+ tbi-handle = <&tbi0>;
+ phy-handle = <&phy_rgmii_0>;
+ phy-connection-type = "rgmii";
+ };
- usb0: usb@210000 {
- compatible = "fsl,p3041-usb2-mph",
- "fsl,mpc85xx-usb2-mph", "fsl-usb2-mph";
- reg = <0x210000 0x1000>;
- #address-cells = <1>;
- #size-cells = <0>;
- interrupts = <44 0x2 0 0>;
- phy_type = "utmi";
- port0;
- };
+ mdio0: mdio@e1120 {
+ tbi0: tbi-phy@8 {
+ reg = <0x8>;
+ device_type = "tbi-phy";
+ };
- usb1: usb@211000 {
- compatible = "fsl,p3041-usb2-dr",
- "fsl,mpc85xx-usb2-dr", "fsl-usb2-dr";
- reg = <0x211000 0x1000>;
- #address-cells = <1>;
- #size-cells = <0>;
- interrupts = <45 0x2 0 0>;
- dr_mode = "host";
- phy_type = "utmi";
- };
+ /*
+ * Virtual MDIO for the two on-board RGMII
+ * ports. The fsl,hydra-mdio-muxval property
+ * is already correct.
+ */
+ hydra_mdio_rgmii: hydra-mdio-rgmii {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,hydra-mdio";
+ fsl,mdio-handle = <&mdio0>;
+ fsl,hydra-mdio-muxval = <0x00>;
+ status = "disabled";
+
+ phy_rgmii_0: ethernet-phy@0 {
+ reg = <0x0>;
+ };
+ phy_rgmii_1: ethernet-phy@1 {
+ reg = <0x1>;
+ };
+ };
- sata@220000 {
- compatible = "fsl,p3041-sata", "fsl,pq-sata-v2";
- reg = <0x220000 0x1000>;
- interrupts = <68 0x2 0 0>;
- };
+ /*
+ * Virtual MDIO for the four-port SGMII card.
+ * The fsl,hydra-mdio-muxval property will be
+ * fixed-up by U-Boot based on the slot that
+ * the SGMII card is in.
+ *
+ * Note: we do not support DTSEC5 connected to
+ * SGMII, so this is the only SGMII node.
+ */
+ hydra_mdio_sgmii: hydra-mdio-sgmii {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,hydra-mdio";
+ fsl,mdio-handle = <&mdio0>;
+ fsl,hydra-mdio-muxval = <0x00>;
+ status = "disabled";
+
+ phy_sgmii_1c: ethernet-phy@1c {
+ reg = <0x1c>;
+ };
+ phy_sgmii_1d: ethernet-phy@1d {
+ reg = <0x1d>;
+ };
+ phy_sgmii_1e: ethernet-phy@1e {
+ reg = <0x1e>;
+ };
+ phy_sgmii_1f: ethernet-phy@1f {
+ reg = <0x1f>;
+ };
+ };
+ };
- sata@221000 {
- compatible = "fsl,p3041-sata", "fsl,pq-sata-v2";
- reg = <0x221000 0x1000>;
- interrupts = <69 0x2 0 0>;
- };
+ enet1: ethernet@e2000 {
+ tbi-handle = <&tbi1>;
+ phy-handle = <&phy_sgmii_1d>;
+ phy-connection-type = "sgmii";
+ };
- crypto: crypto@300000 {
- compatible = "fsl,sec-v4.2", "fsl,sec-v4.0";
- #address-cells = <1>;
- #size-cells = <1>;
- reg = <0x300000 0x10000>;
- ranges = <0 0x300000 0x10000>;
- interrupts = <92 2 0 0>;
-
- sec_jr0: jr@1000 {
- compatible = "fsl,sec-v4.2-job-ring",
- "fsl,sec-v4.0-job-ring";
- reg = <0x1000 0x1000>;
- interrupts = <88 2 0 0>;
+ mdio@e3120 {
+ tbi1: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
+ };
};
- sec_jr1: jr@2000 {
- compatible = "fsl,sec-v4.2-job-ring",
- "fsl,sec-v4.0-job-ring";
- reg = <0x2000 0x1000>;
- interrupts = <89 2 0 0>;
+ enet2: ethernet@e4000 {
+ tbi-handle = <&tbi2>;
+ phy-handle = <&phy_sgmii_1e>;
+ phy-connection-type = "sgmii";
};
- sec_jr2: jr@3000 {
- compatible = "fsl,sec-v4.2-job-ring",
- "fsl,sec-v4.0-job-ring";
- reg = <0x3000 0x1000>;
- interrupts = <90 2 0 0>;
+ mdio@e5120 {
+ tbi2: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
+ };
};
- sec_jr3: jr@4000 {
- compatible = "fsl,sec-v4.2-job-ring",
- "fsl,sec-v4.0-job-ring";
- reg = <0x4000 0x1000>;
- interrupts = <91 2 0 0>;
+ enet3: ethernet@e6000 {
+ tbi-handle = <&tbi3>;
+ phy-handle = <&phy_sgmii_1f>;
+ phy-connection-type = "sgmii";
};
- rtic@6000 {
- compatible = "fsl,sec-v4.2-rtic",
- "fsl,sec-v4.0-rtic";
+ mdio@e7120 {
#address-cells = <1>;
- #size-cells = <1>;
- reg = <0x6000 0x100>;
- ranges = <0x0 0x6100 0xe00>;
-
- rtic_a: rtic-a@0 {
- compatible = "fsl,sec-v4.2-rtic-memory",
- "fsl,sec-v4.0-rtic-memory";
- reg = <0x00 0x20 0x100 0x80>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe7120 0xee0>;
+ interrupts = <100 1 0 0>;
+
+ tbi3: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
};
+ };
+
+ enet4: ethernet@e8000 {
+ tbi-handle = <&tbi4>;
+ phy-handle = <&phy_rgmii_1>;
+ phy-connection-type = "rgmii";
+ };
- rtic_b: rtic-b@20 {
- compatible = "fsl,sec-v4.2-rtic-memory",
- "fsl,sec-v4.0-rtic-memory";
- reg = <0x20 0x20 0x200 0x80>;
+ mdio@e9120 {
+ tbi4: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
};
+ };
+
+ enet5: ethernet@f0000 {
+ /*
+ * phy-handle will be updated by U-Boot to
+ * reflect the actual slot the XAUI card is in.
+ */
+ phy-handle = <&phy_xgmii_1>;
+ phy-connection-type = "xgmii";
+ };
- rtic_c: rtic-c@40 {
- compatible = "fsl,sec-v4.2-rtic-memory",
- "fsl,sec-v4.0-rtic-memory";
- reg = <0x40 0x20 0x300 0x80>;
+ /*
+ * We only support one XAUI card, so the MDIO muxing
+ * is set by U-Boot, and Linux never touches it.
+ * Therefore, we don't need a virtual MDIO node.
+ * However, the phy address depends on the slot, so
+ * only one of the ethernet-phy nodes below will be
+ * used.
+ */
+ hydra_mdio_xgmii: mdio@f1000 {
+ status = "disabled";
+
+ /* XAUI card in slot 1 */
+ phy_xgmii_1: ethernet-phy@4 {
+ reg = <0x4>;
};
- rtic_d: rtic-d@60 {
- compatible = "fsl,sec-v4.2-rtic-memory",
- "fsl,sec-v4.0-rtic-memory";
- reg = <0x60 0x20 0x500 0x80>;
+ /* XAUI card in slot 2 */
+ phy_xgmii_2: ethernet-phy@0 {
+ reg = <0x0>;
};
};
};
+ };
+
+ rapidio@ffe0c0000 {
+ reg = <0xf 0xfe0c0000 0 0x11000>;
- sec_mon: sec_mon@314000 {
- compatible = "fsl,sec-v4.2-mon", "fsl,sec-v4.0-mon";
- reg = <0x314000 0x1000>;
- interrupts = <93 2 0 0>;
+ port1 {
+ ranges = <0 0 0xc 0x20000000 0 0x10000000>;
+ };
+ port2 {
+ ranges = <0 0 0xc 0x30000000 0 0x10000000>;
};
};
localbus@ffe124000 {
- compatible = "fsl,p3041-elbc", "fsl,elbc", "simple-bus";
reg = <0xf 0xfe124000 0 0x1000>;
- interrupts = <25 2 0 0>;
- #address-cells = <2>;
- #size-cells = <1>;
-
- ranges = <0 0 0xf 0xe8000000 0x08000000
- 3 0 0xf 0xffdf0000 0x00008000>;
+ ranges = <0 0 0xf 0xb8000000 0x04000000>;
flash@0,0 {
compatible = "cfi-flash";
- reg = <0 0 0x08000000>;
+ /*
+ * Map 64Mb of 128MB NOR flash memory. Since highest
+ * line of address of NOR flash memory are set by
+ * FPGA, memory are divided into two pages equal to
+ * 64MB. One of the pages can be accessed at once.
+ */
+ reg = <0 0 0x04000000>;
bank-width = <2>;
device-width = <2>;
};
+ nand@2,0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,elbc-fcm-nand";
+ reg = <0x2 0x0 0x40000>;
+
+ partition@0 {
+ label = "NAND U-Boot Image";
+ reg = <0x0 0x02000000>;
+ read-only;
+ };
+
+ partition@2000000 {
+ label = "NAND Root File System";
+ reg = <0x02000000 0x10000000>;
+ };
+
+ partition@12000000 {
+ label = "NAND Compressed RFS Image";
+ reg = <0x12000000 0x08000000>;
+ };
+
+ partition@1a000000 {
+ label = "NAND Linux Kernel Image";
+ reg = <0x1a000000 0x04000000>;
+ };
+
+ partition@1e000000 {
+ label = "NAND DTB Image";
+ reg = <0x1e000000 0x01000000>;
+ };
+
+ partition@1f000000 {
+ label = "NAND Writable User area";
+ reg = <0x1f000000 0x21000000>;
+ };
+ };
+
board-control@3,0 {
- compatible = "fsl,p3041ds-pixis";
- reg = <3 0 0x20>;
+ compatible = "fsl,p3041ds-fpga", "fsl,fpga-ngpixis";
+ reg = <3 0 0x30>;
};
};
pci0: pcie@ffe200000 {
- compatible = "fsl,p3041-pcie", "fsl,qoriq-pcie-v2.2";
- device_type = "pci";
- #size-cells = <2>;
- #address-cells = <3>;
reg = <0xf 0xfe200000 0 0x1000>;
- bus-range = <0x0 0xff>;
- ranges = <0x02000000 0 0xe0000000 0xc 0x00000000 0x0 0x20000000
- 0x01000000 0 0x00000000 0xf 0xf8000000 0x0 0x00010000>;
- clock-frequency = <0x1fca055>;
- fsl,msi = <&msi0>;
- interrupts = <16 2 1 15>;
+ ranges = <0x02000000 0 0x80000000 0x0 0x80000000 0x0 0x10000000
+ 0x01000000 0 0x00000000 0x0 0xff000000 0x0 0x00010000>;
pcie@0 {
- reg = <0 0 0 0 0>;
- #interrupt-cells = <1>;
- #size-cells = <2>;
- #address-cells = <3>;
- device_type = "pci";
- interrupts = <16 2 1 15>;
- interrupt-map-mask = <0xf800 0 0 7>;
- interrupt-map = <
- /* IDSEL 0x0 */
- 0000 0 0 1 &mpic 40 1 0 0
- 0000 0 0 2 &mpic 1 1 0 0
- 0000 0 0 3 &mpic 2 1 0 0
- 0000 0 0 4 &mpic 3 1 0 0
- >;
- ranges = <0x02000000 0 0xe0000000
- 0x02000000 0 0xe0000000
- 0 0x20000000
+ ranges = <0x02000000 0 0x80000000
+ 0x02000000 0 0x80000000
+ 0 0x10000000
0x01000000 0 0x00000000
- 0x01000000 0 0x00000000
+ 0x01000000 0 0xff000000
0 0x00010000>;
};
};
pci1: pcie@ffe201000 {
- compatible = "fsl,p3041-pcie", "fsl,qoriq-pcie-v2.2";
- device_type = "pci";
- #size-cells = <2>;
- #address-cells = <3>;
reg = <0xf 0xfe201000 0 0x1000>;
- bus-range = <0 0xff>;
- ranges = <0x02000000 0x0 0xe0000000 0xc 0x20000000 0x0 0x20000000
- 0x01000000 0x0 0x00000000 0xf 0xf8010000 0x0 0x00010000>;
- clock-frequency = <0x1fca055>;
- fsl,msi = <&msi1>;
- interrupts = <16 2 1 14>;
+ ranges = <0x02000000 0x0 0x90000000 0x0 0x90000000 0x0 0x10000000
+ 0x01000000 0x0 0x00000000 0x0 0xff010000 0x0 0x00010000>;
pcie@0 {
- reg = <0 0 0 0 0>;
- #interrupt-cells = <1>;
- #size-cells = <2>;
- #address-cells = <3>;
- device_type = "pci";
- interrupts = <16 2 1 14>;
- interrupt-map-mask = <0xf800 0 0 7>;
- interrupt-map = <
- /* IDSEL 0x0 */
- 0000 0 0 1 &mpic 41 1 0 0
- 0000 0 0 2 &mpic 5 1 0 0
- 0000 0 0 3 &mpic 6 1 0 0
- 0000 0 0 4 &mpic 7 1 0 0
- >;
- ranges = <0x02000000 0 0xe0000000
- 0x02000000 0 0xe0000000
- 0 0x20000000
+ ranges = <0x02000000 0 0x90000000
+ 0x02000000 0 0x90000000
+ 0 0x10000000
0x01000000 0 0x00000000
- 0x01000000 0 0x00000000
+ 0x01000000 0 0xff010000
0 0x00010000>;
};
};
pci2: pcie@ffe202000 {
- compatible = "fsl,p3041-pcie", "fsl,qoriq-pcie-v2.2";
- device_type = "pci";
- #size-cells = <2>;
- #address-cells = <3>;
reg = <0xf 0xfe202000 0 0x1000>;
- bus-range = <0x0 0xff>;
- ranges = <0x02000000 0 0xe0000000 0xc 0x40000000 0 0x20000000
- 0x01000000 0 0x00000000 0xf 0xf8020000 0 0x00010000>;
- clock-frequency = <0x1fca055>;
- fsl,msi = <&msi2>;
- interrupts = <16 2 1 13>;
+ ranges = <0x02000000 0 0xa0000000 0x0 0xa0000000 0 0x10000000
+ 0x01000000 0 0x00000000 0x0 0xff020000 0 0x00010000>;
pcie@0 {
- reg = <0 0 0 0 0>;
- #interrupt-cells = <1>;
- #size-cells = <2>;
- #address-cells = <3>;
- device_type = "pci";
- interrupts = <16 2 1 13>;
- interrupt-map-mask = <0xf800 0 0 7>;
- interrupt-map = <
- /* IDSEL 0x0 */
- 0000 0 0 1 &mpic 42 1 0 0
- 0000 0 0 2 &mpic 9 1 0 0
- 0000 0 0 3 &mpic 10 1 0 0
- 0000 0 0 4 &mpic 11 1 0 0
- >;
- ranges = <0x02000000 0 0xe0000000
- 0x02000000 0 0xe0000000
- 0 0x20000000
+ ranges = <0x02000000 0 0xa0000000
+ 0x02000000 0 0xa0000000
+ 0 0x10000000
0x01000000 0 0x00000000
- 0x01000000 0 0x00000000
+ 0x01000000 0 0xff020000
0 0x00010000>;
};
};
pci3: pcie@ffe203000 {
- compatible = "fsl,p3041-pcie", "fsl,qoriq-pcie-v2.2";
- device_type = "pci";
- #size-cells = <2>;
- #address-cells = <3>;
reg = <0xf 0xfe203000 0 0x1000>;
- bus-range = <0x0 0xff>;
- ranges = <0x02000000 0 0xe0000000 0xc 0x60000000 0 0x20000000
- 0x01000000 0 0x00000000 0xf 0xf8030000 0 0x00010000>;
- clock-frequency = <0x1fca055>;
- fsl,msi = <&msi2>;
- interrupts = <16 2 1 12>;
+ ranges = <0x02000000 0 0xb0000000 0x0 0xb0000000 0 0x08000000
+ 0x01000000 0 0x00000000 0x0 0xff030000 0 0x00010000>;
pcie@0 {
- reg = <0 0 0 0 0>;
- #interrupt-cells = <1>;
- #size-cells = <2>;
- #address-cells = <3>;
- device_type = "pci";
- interrupts = <16 2 1 12>;
- interrupt-map-mask = <0xf800 0 0 7>;
- interrupt-map = <
- /* IDSEL 0x0 */
- 0000 0 0 1 &mpic 43 1 0 0
- 0000 0 0 2 &mpic 0 1 0 0
- 0000 0 0 3 &mpic 4 1 0 0
- 0000 0 0 4 &mpic 8 1 0 0
- >;
- ranges = <0x02000000 0 0xe0000000
- 0x02000000 0 0xe0000000
- 0 0x20000000
+ ranges = <0x02000000 0 0xb0000000
+ 0x02000000 0 0xb0000000
+ 0 0x08000000
0x01000000 0 0x00000000
- 0x01000000 0 0x00000000
+ 0x01000000 0 0xff030000
0 0x00010000>;
};
};
+
+ fsl,dpaa {
+ compatible = "fsl,p3041-dpaa", "fsl,dpaa";
+
+ ethernet@0 {
+ compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet0>;
+ status="okay";
+ };
+ ethernet@1 {
+ compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet1>;
+ status = "disabled";
+ };
+ ethernet@2 {
+ compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet2>;
+ status = "disabled";
+ };
+ ethernet@3 {
+ compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet3>;
+ status = "disabled";
+ };
+ ethernet@4 {
+ compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet4>;
+ status = "okay";
+ };
+ ethernet@5 {
+ compatible = "fsl,p3041-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet5>;
+ status = "disabled";
+ };
+ };
+
+ chosen {
+ stdin = "serial0";
+ stdout = "serial0";
+ };
};
diff --git a/sys/boot/fdt/dts/p3041si.dtsi b/sys/boot/fdt/dts/p3041si.dtsi
new file mode 100644
index 000000000000..3335e48d4702
--- /dev/null
+++ b/sys/boot/fdt/dts/p3041si.dtsi
@@ -0,0 +1,1339 @@
+/*
+ * P3041 Silicon Device Tree Source
+ *
+ * Copyright 2010-2011 Freescale Semiconductor Inc.
+ *
+ * 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 Freescale Semiconductor nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``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 Freescale Semiconductor 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$ */
+
+/dts-v1/;
+
+/ {
+ compatible = "fsl,P3041";
+ #address-cells = <2>;
+ #size-cells = <2>;
+ interrupt-parent = <&mpic>;
+
+ aliases {
+ ccsr = &soc;
+ dcsr = &dcsr;
+
+ ethernet0 = &enet0;
+ ethernet1 = &enet1;
+ ethernet2 = &enet2;
+ ethernet3 = &enet3;
+ ethernet4 = &enet4;
+ ethernet5 = &enet5;
+ serial0 = &serial0;
+ serial1 = &serial1;
+ serial2 = &serial2;
+ serial3 = &serial3;
+ pci0 = &pci0;
+ pci1 = &pci1;
+ pci2 = &pci2;
+ pci3 = &pci3;
+ usb0 = &usb0;
+ usb1 = &usb1;
+ dma0 = &dma0;
+ dma1 = &dma1;
+ bman = &bman;
+ qman = &qman;
+ pme = &pme;
+ rman = &rman;
+ sdhc = &sdhc;
+ msi0 = &msi0;
+ msi1 = &msi1;
+ msi2 = &msi2;
+
+ crypto = &crypto;
+ sec_jr0 = &sec_jr0;
+ sec_jr1 = &sec_jr1;
+ sec_jr2 = &sec_jr2;
+ sec_jr3 = &sec_jr3;
+ rtic_a = &rtic_a;
+ rtic_b = &rtic_b;
+ rtic_c = &rtic_c;
+ rtic_d = &rtic_d;
+ sec_mon = &sec_mon;
+
+ fman0 = &fman0;
+ fman0_oh0 = &fman0_oh0;
+ fman0_oh1 = &fman0_oh1;
+ fman0_oh2 = &fman0_oh2;
+ fman0_oh3 = &fman0_oh3;
+ fman0_oh4 = &fman0_oh4;
+ fman0_oh5 = &fman0_oh5;
+ fman0_oh6 = &fman0_oh6;
+ fman0_rx0 = &fman0_rx0;
+ fman0_rx1 = &fman0_rx1;
+ fman0_rx2 = &fman0_rx2;
+ fman0_rx3 = &fman0_rx3;
+ fman0_rx4 = &fman0_rx4;
+ fman0_rx5 = &fman0_rx5;
+ };
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: PowerPC,e500mc@0 {
+ device_type = "cpu";
+ reg = <0>;
+ bus-frequency = <749999996>;
+ next-level-cache = <&L2_0>;
+ L2_0: l2-cache {
+ next-level-cache = <&cpc>;
+ };
+ };
+ cpu1: PowerPC,e500mc@1 {
+ device_type = "cpu";
+ reg = <1>;
+ next-level-cache = <&L2_1>;
+ L2_1: l2-cache {
+ next-level-cache = <&cpc>;
+ };
+ };
+ cpu2: PowerPC,e500mc@2 {
+ device_type = "cpu";
+ reg = <2>;
+ next-level-cache = <&L2_2>;
+ L2_2: l2-cache {
+ next-level-cache = <&cpc>;
+ };
+ };
+ cpu3: PowerPC,e500mc@3 {
+ device_type = "cpu";
+ reg = <3>;
+ next-level-cache = <&L2_3>;
+ L2_3: l2-cache {
+ next-level-cache = <&cpc>;
+ };
+ };
+ };
+
+ dcsr: dcsr@f00000000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,dcsr", "simple-bus";
+
+ dcsr-epu@0 {
+ compatible = "fsl,dcsr-epu";
+ interrupts = <52 2 0 0
+ 84 2 0 0
+ 85 2 0 0>;
+ interrupt-parent = <&mpic>;
+ reg = <0x0 0x1000>;
+ };
+ dcsr-npc {
+ compatible = "fsl,dcsr-npc";
+ reg = <0x1000 0x1000 0x1000000 0x8000>;
+ };
+ dcsr-nxc@2000 {
+ compatible = "fsl,dcsr-nxc";
+ reg = <0x2000 0x1000>;
+ };
+ dcsr-corenet {
+ compatible = "fsl,dcsr-corenet";
+ reg = <0x8000 0x1000 0xB0000 0x1000>;
+ };
+ dcsr-dpaa@9000 {
+ compatible = "fsl,p43041-dcsr-dpaa", "fsl,dcsr-dpaa";
+ reg = <0x9000 0x1000>;
+ };
+ dcsr-ocn@11000 {
+ compatible = "fsl,p43041-dcsr-ocn", "fsl,dcsr-ocn";
+ reg = <0x11000 0x1000>;
+ };
+ dcsr-ddr@12000 {
+ compatible = "fsl,dcsr-ddr";
+ dev-handle = <&ddr>;
+ reg = <0x12000 0x1000>;
+ };
+ dcsr-nal@18000 {
+ compatible = "fsl,p43041-dcsr-nal", "fsl,dcsr-nal";
+ reg = <0x18000 0x1000>;
+ };
+ dcsr-rcpm@22000 {
+ compatible = "fsl,p43041-dcsr-rcpm", "fsl,dcsr-rcpm";
+ reg = <0x22000 0x1000>;
+ };
+ dcsr-cpu-sb-proxy@40000 {
+ compatible = "fsl,dcsr-e500mc-sb-proxy", "fsl,dcsr-cpu-sb-proxy";
+ cpu-handle = <&cpu0>;
+ reg = <0x40000 0x1000>;
+ };
+ dcsr-cpu-sb-proxy@41000 {
+ compatible = "fsl,dcsr-e500mc-sb-proxy", "fsl,dcsr-cpu-sb-proxy";
+ cpu-handle = <&cpu1>;
+ reg = <0x41000 0x1000>;
+ };
+ dcsr-cpu-sb-proxy@42000 {
+ compatible = "fsl,dcsr-e500mc-sb-proxy", "fsl,dcsr-cpu-sb-proxy";
+ cpu-handle = <&cpu2>;
+ reg = <0x42000 0x1000>;
+ };
+ dcsr-cpu-sb-proxy@43000 {
+ compatible = "fsl,dcsr-e500mc-sb-proxy", "fsl,dcsr-cpu-sb-proxy";
+ cpu-handle = <&cpu3>;
+ reg = <0x43000 0x1000>;
+ };
+ };
+
+ bman-portals@ff4000000 {
+ #address-cells = <0x1>;
+ #size-cells = <0x1>;
+ compatible = "bman-portals";
+ ranges = <0x0 0xf 0xfde00000 0x200000>;
+ bman-portal@0 {
+ cell-index = <0x0>;
+ compatible = "fsl,p3041-bman-portal", "fsl,bman-portal";
+ reg = <0x0 0x4000 0x100000 0x1000>;
+ interrupts = <105 2 0 0>;
+ };
+ bman-portal@4000 {
+ cell-index = <0x1>;
+ compatible = "fsl,p3041-bman-portal", "fsl,bman-portal";
+ reg = <0x4000 0x4000 0x101000 0x1000>;
+ interrupts = <107 2 0 0>;
+ };
+ bman-portal@8000 {
+ cell-index = <2>;
+ compatible = "fsl,p3041-bman-portal", "fsl,bman-portal";
+ reg = <0x8000 0x4000 0x102000 0x1000>;
+ interrupts = <109 2 0 0>;
+ };
+ bman-portal@c000 {
+ cell-index = <0x3>;
+ compatible = "fsl,p3041-bman-portal", "fsl,bman-portal";
+ reg = <0xc000 0x4000 0x103000 0x1000>;
+ interrupts = <111 2 0 0>;
+ };
+ bman-portal@10000 {
+ cell-index = <0x4>;
+ compatible = "fsl,p3041-bman-portal", "fsl,bman-portal";
+ reg = <0x10000 0x4000 0x104000 0x1000>;
+ interrupts = <113 2 0 0>;
+ };
+ bman-portal@14000 {
+ cell-index = <0x5>;
+ compatible = "fsl,p3041-bman-portal", "fsl,bman-portal";
+ reg = <0x14000 0x4000 0x105000 0x1000>;
+ interrupts = <115 2 0 0>;
+ };
+ bman-portal@18000 {
+ cell-index = <0x6>;
+ compatible = "fsl,p3041-bman-portal", "fsl,bman-portal";
+ reg = <0x18000 0x4000 0x106000 0x1000>;
+ interrupts = <117 2 0 0>;
+ };
+ bman-portal@1c000 {
+ cell-index = <0x7>;
+ compatible = "fsl,p3041-bman-portal", "fsl,bman-portal";
+ reg = <0x1c000 0x4000 0x107000 0x1000>;
+ interrupts = <119 2 0 0>;
+ };
+ bman-portal@20000 {
+ cell-index = <0x8>;
+ compatible = "fsl,p3041-bman-portal", "fsl,bman-portal";
+ reg = <0x20000 0x4000 0x108000 0x1000>;
+ interrupts = <121 2 0 0>;
+ };
+ bman-portal@24000 {
+ cell-index = <0x9>;
+ compatible = "fsl,p3041-bman-portal", "fsl,bman-portal";
+ reg = <0x24000 0x4000 0x109000 0x1000>;
+ interrupts = <123 2 0 0>;
+ };
+
+ buffer-pool@0 {
+ compatible = "fsl,p3041-bpool", "fsl,bpool";
+ fsl,bpid = <0>;
+ fsl,bpool-cfg = <0 0x100 0 1 0 0x100>;
+ };
+ };
+
+ qman-portals@ff4200000 {
+ #address-cells = <0x1>;
+ #size-cells = <0x1>;
+ compatible = "qman-portals";
+ ranges = <0x0 0xf 0xfdc00000 0x200000>;
+ qportal0: qman-portal@0 {
+ cell-index = <0x0>;
+ compatible = "fsl,p3041-qman-portal", "fsl,qman-portal";
+ reg = <0x0 0x4000 0x100000 0x1000>;
+ interrupts = <104 0x2 0 0>;
+ fsl,qman-channel-id = <0x0>;
+ };
+
+ qportal1: qman-portal@4000 {
+ cell-index = <0x1>;
+ compatible = "fsl,p3041-qman-portal", "fsl,qman-portal";
+ reg = <0x4000 0x4000 0x101000 0x1000>;
+ interrupts = <106 0x2 0 0>;
+ fsl,qman-channel-id = <0x1>;
+ };
+
+ qportal2: qman-portal@8000 {
+ cell-index = <0x2>;
+ compatible = "fsl,p3041-qman-portal", "fsl,qman-portal";
+ reg = <0x8000 0x4000 0x102000 0x1000>;
+ interrupts = <108 0x2 0 0>;
+ fsl,qman-channel-id = <0x2>;
+ };
+
+ qportal3: qman-portal@c000 {
+ cell-index = <0x3>;
+ compatible = "fsl,p3041-qman-portal", "fsl,qman-portal";
+ reg = <0xc000 0x4000 0x103000 0x1000>;
+ interrupts = <110 0x2 0 0>;
+ fsl,qman-channel-id = <0x3>;
+ };
+
+ qportal4: qman-portal@10000 {
+ cell-index = <0x4>;
+ compatible = "fsl,p3041-qman-portal", "fsl,qman-portal";
+ reg = <0x10000 0x4000 0x104000 0x1000>;
+ interrupts = <112 0x2 0 0>;
+ fsl,qman-channel-id = <0x4>;
+ };
+
+ qportal5: qman-portal@14000 {
+ cell-index = <0x5>;
+ compatible = "fsl,p3041-qman-portal", "fsl,qman-portal";
+ reg = <0x14000 0x4000 0x105000 0x1000>;
+ interrupts = <114 0x2 0 0>;
+ fsl,qman-channel-id = <0x5>;
+ };
+
+ qportal6: qman-portal@18000 {
+ cell-index = <0x6>;
+ compatible = "fsl,p3041-qman-portal", "fsl,qman-portal";
+ reg = <0x18000 0x4000 0x106000 0x1000>;
+ interrupts = <116 0x2 0 0>;
+ fsl,qman-channel-id = <0x6>;
+ };
+
+ qportal7: qman-portal@1c000 {
+ cell-index = <0x7>;
+ compatible = "fsl,p3041-qman-portal", "fsl,qman-portal";
+ reg = <0x1c000 0x4000 0x107000 0x1000>;
+ interrupts = <118 0x2 0 0>;
+ fsl,qman-channel-id = <0x7>;
+ };
+
+ qportal8: qman-portal@20000 {
+ cell-index = <0x8>;
+ compatible = "fsl,p3041-qman-portal", "fsl,qman-portal";
+ reg = <0x20000 0x4000 0x108000 0x1000>;
+ interrupts = <120 0x2 0 0>;
+ fsl,qman-channel-id = <0x8>;
+ };
+
+ qportal9: qman-portal@24000 {
+ cell-index = <0x9>;
+ compatible = "fsl,p3041-qman-portal", "fsl,qman-portal";
+ reg = <0x24000 0x4000 0x109000 0x1000>;
+ interrupts = <122 0x2 0 0>;
+ fsl,qman-channel-id = <0x9>;
+ };
+
+ qpool1: qman-pool@1 {
+ cell-index = <1>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x21>;
+ };
+
+ qpool2: qman-pool@2 {
+ cell-index = <2>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x22>;
+ };
+
+ qpool3: qman-pool@3 {
+ cell-index = <3>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x23>;
+ };
+
+ qpool4: qman-pool@4 {
+ cell-index = <4>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x24>;
+ };
+
+ qpool5: qman-pool@5 {
+ cell-index = <5>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x25>;
+ };
+
+ qpool6: qman-pool@6 {
+ cell-index = <6>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x26>;
+ };
+
+ qpool7: qman-pool@7 {
+ cell-index = <7>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x27>;
+ };
+
+ qpool8: qman-pool@8 {
+ cell-index = <8>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x28>;
+ };
+
+ qpool9: qman-pool@9 {
+ cell-index = <9>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x29>;
+ };
+
+ qpool10: qman-pool@10 {
+ cell-index = <10>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2a>;
+ };
+
+ qpool11: qman-pool@11 {
+ cell-index = <11>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2b>;
+ };
+
+ qpool12: qman-pool@12 {
+ cell-index = <12>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2c>;
+ };
+
+ qpool13: qman-pool@13 {
+ cell-index = <13>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2d>;
+ };
+
+ qpool14: qman-pool@14 {
+ cell-index = <14>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2e>;
+ };
+
+ qpool15: qman-pool@15 {
+ cell-index = <15>;
+ compatible = "fsl,p3041-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2f>;
+ };
+ };
+
+ soc: soc@ffe000000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ device_type = "soc";
+ compatible = "simple-bus";
+
+ bus-frequency = <0>; // Filled out by kernel.
+
+ ranges = <0x00000000 0xf 0xfe000000 0x1000000>;
+ reg = <0xf 0xfe000000 0 0x00001000>;
+
+ soc-sram-error {
+ compatible = "fsl,soc-sram-error";
+ interrupts = <16 2 1 29>;
+ };
+
+ corenet-law@0 {
+ compatible = "fsl,corenet-law";
+ reg = <0x0 0x1000>;
+ fsl,num-laws = <32>;
+ };
+
+ ddr: memory-controller@8000 {
+ compatible = "fsl,qoriq-memory-controller-v4.5", "fsl,qoriq-memory-controller";
+ reg = <0x8000 0x1000>;
+ interrupts = <16 2 1 23>;
+ };
+
+ cpc: l3-cache-controller@10000 {
+ compatible = "fsl,p3041-l3-cache-controller", "fsl,p4080-l3-cache-controller", "cache";
+ reg = <0x10000 0x1000>;
+ interrupts = <16 2 1 27>;
+ };
+
+ corenet-cf@18000 {
+ compatible = "fsl,corenet-cf";
+ reg = <0x18000 0x1000>;
+ interrupts = <16 2 1 31>;
+ fsl,ccf-num-csdids = <32>;
+ fsl,ccf-num-snoopids = <32>;
+ };
+
+ iommu@20000 {
+ compatible = "fsl,pamu-v1.0", "fsl,pamu";
+ reg = <0x20000 0x4000>;
+ interrupts = <
+ 24 2 0 0
+ 16 2 1 30>;
+ };
+
+ mpic: pic@40000 {
+ clock-frequency = <0>;
+ interrupt-controller;
+ #address-cells = <0>;
+ #interrupt-cells = <4>;
+ reg = <0x40000 0x40000>;
+ compatible = "fsl,mpic", "chrp,open-pic";
+ device_type = "open-pic";
+ };
+
+ msi0: msi@41600 {
+ compatible = "fsl,mpic-msi";
+ reg = <0x41600 0x200>;
+ msi-available-ranges = <0 0x100>;
+ interrupts = <
+ 0xe0 0 0 0
+ 0xe1 0 0 0
+ 0xe2 0 0 0
+ 0xe3 0 0 0
+ 0xe4 0 0 0
+ 0xe5 0 0 0
+ 0xe6 0 0 0
+ 0xe7 0 0 0>;
+ };
+
+ msi1: msi@41800 {
+ compatible = "fsl,mpic-msi";
+ reg = <0x41800 0x200>;
+ msi-available-ranges = <0 0x100>;
+ interrupts = <
+ 0xe8 0 0 0
+ 0xe9 0 0 0
+ 0xea 0 0 0
+ 0xeb 0 0 0
+ 0xec 0 0 0
+ 0xed 0 0 0
+ 0xee 0 0 0
+ 0xef 0 0 0>;
+ };
+
+ msi2: msi@41a00 {
+ compatible = "fsl,mpic-msi";
+ reg = <0x41a00 0x200>;
+ msi-available-ranges = <0 0x100>;
+ interrupts = <
+ 0xf0 0 0 0
+ 0xf1 0 0 0
+ 0xf2 0 0 0
+ 0xf3 0 0 0
+ 0xf4 0 0 0
+ 0xf5 0 0 0
+ 0xf6 0 0 0
+ 0xf7 0 0 0>;
+ };
+
+ guts: global-utilities@e0000 {
+ compatible = "fsl,qoriq-device-config-1.0";
+ reg = <0xe0000 0xe00>;
+ fsl,has-rstcr;
+ #sleep-cells = <1>;
+ fsl,liodn-bits = <12>;
+ };
+
+ pins: global-utilities@e0e00 {
+ compatible = "fsl,qoriq-pin-control-1.0";
+ reg = <0xe0e00 0x200>;
+ #sleep-cells = <2>;
+ };
+
+ clockgen: global-utilities@e1000 {
+ compatible = "fsl,p3041-clockgen", "fsl,qoriq-clockgen-1.0";
+ reg = <0xe1000 0x1000>;
+ clock-frequency = <0>;
+ };
+
+ rcpm: global-utilities@e2000 {
+ compatible = "fsl,qoriq-rcpm-1.0";
+ reg = <0xe2000 0x1000>;
+ #sleep-cells = <1>;
+ };
+
+ sfp: sfp@e8000 {
+ compatible = "fsl,p3041-sfp", "fsl,qoriq-sfp-1.0";
+ reg = <0xe8000 0x1000>;
+ };
+
+ serdes: serdes@ea000 {
+ compatible = "fsl,p3041-serdes";
+ reg = <0xea000 0x1000>;
+ };
+
+ dma0: dma@100300 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,p3041-dma", "fsl,eloplus-dma";
+ reg = <0x100300 0x4>;
+ ranges = <0x0 0x100100 0x200>;
+ cell-index = <0>;
+ dma-channel@0 {
+ compatible = "fsl,p3041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x0 0x80>;
+ cell-index = <0>;
+ interrupts = <28 2 0 0>;
+ };
+ dma-channel@80 {
+ compatible = "fsl,p3041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x80 0x80>;
+ cell-index = <1>;
+ interrupts = <29 2 0 0>;
+ };
+ dma-channel@100 {
+ compatible = "fsl,p3041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x100 0x80>;
+ cell-index = <2>;
+ interrupts = <30 2 0 0>;
+ };
+ dma-channel@180 {
+ compatible = "fsl,p3041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x180 0x80>;
+ cell-index = <3>;
+ interrupts = <31 2 0 0>;
+ };
+ };
+
+ dma1: dma@101300 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,p3041-dma", "fsl,eloplus-dma";
+ reg = <0x101300 0x4>;
+ ranges = <0x0 0x101100 0x200>;
+ cell-index = <1>;
+ dma-channel@0 {
+ compatible = "fsl,p3041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x0 0x80>;
+ cell-index = <0>;
+ interrupts = <32 2 0 0>;
+ };
+ dma-channel@80 {
+ compatible = "fsl,p3041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x80 0x80>;
+ cell-index = <1>;
+ interrupts = <33 2 0 0>;
+ };
+ dma-channel@100 {
+ compatible = "fsl,p3041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x100 0x80>;
+ cell-index = <2>;
+ interrupts = <34 2 0 0>;
+ };
+ dma-channel@180 {
+ compatible = "fsl,p3041-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x180 0x80>;
+ cell-index = <3>;
+ interrupts = <35 2 0 0>;
+ };
+ };
+
+ spi@110000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,p3041-espi", "fsl,mpc8536-espi";
+ reg = <0x110000 0x1000>;
+ interrupts = <53 0x2 0 0>;
+ fsl,espi-num-chipselects = <4>;
+ };
+
+ sdhc: sdhc@114000 {
+ compatible = "fsl,p3041-esdhc", "fsl,esdhc";
+ reg = <0x114000 0x1000>;
+ interrupts = <48 2 0 0>;
+ sdhci,auto-cmd12;
+ clock-frequency = <0>;
+ };
+
+ i2c@118000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <0>;
+ compatible = "fsl-i2c";
+ reg = <0x118000 0x100>;
+ interrupts = <38 2 0 0>;
+ dfsrr;
+ };
+
+ i2c@118100 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <1>;
+ compatible = "fsl-i2c";
+ reg = <0x118100 0x100>;
+ interrupts = <38 2 0 0>;
+ dfsrr;
+ };
+
+ i2c@119000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <2>;
+ compatible = "fsl-i2c";
+ reg = <0x119000 0x100>;
+ interrupts = <39 2 0 0>;
+ dfsrr;
+ };
+
+ i2c@119100 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <3>;
+ compatible = "fsl-i2c";
+ reg = <0x119100 0x100>;
+ interrupts = <39 2 0 0>;
+ dfsrr;
+ };
+
+ serial0: serial@11c500 {
+ cell-index = <0>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11c500 0x100>;
+ clock-frequency = <0>;
+ interrupts = <36 2 0 0>;
+ };
+
+ serial1: serial@11c600 {
+ cell-index = <1>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11c600 0x100>;
+ clock-frequency = <0>;
+ interrupts = <36 2 0 0>;
+ };
+
+ serial2: serial@11d500 {
+ cell-index = <2>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11d500 0x100>;
+ clock-frequency = <0>;
+ interrupts = <37 2 0 0>;
+ };
+
+ serial3: serial@11d600 {
+ cell-index = <3>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11d600 0x100>;
+ clock-frequency = <0>;
+ interrupts = <37 2 0 0>;
+ };
+
+ gpio0: gpio@130000 {
+ compatible = "fsl,p3041-gpio", "fsl,qoriq-gpio";
+ reg = <0x130000 0x1000>;
+ interrupts = <55 2 0 0>;
+ #gpio-cells = <2>;
+ gpio-controller;
+ };
+
+ rman: rman@1e0000 {
+ compatible = "fsl,rman";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x1e0000 0x20000>;
+ reg = <0x1e0000 0x20000>;
+ interrupts = <16 2 1 11>; /* err_irq */
+ fsl,qman-channels-id = <0x62 0x63>;
+
+ inbound-block@0 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x0 0x800>;
+ };
+ global-cfg@b00 {
+ compatible = "fsl,rman-global-cfg";
+ reg = <0xb00 0x500>;
+ };
+ inbound-block@1000 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x1000 0x800>;
+ };
+ inbound-block@2000 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x2000 0x800>;
+ };
+ inbound-block@3000 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x3000 0x800>;
+ };
+ };
+
+ usb0: usb@210000 {
+ compatible = "fsl,p3041-usb2-mph",
+ "fsl,mpc85xx-usb2-mph", "fsl-usb2-mph";
+ reg = <0x210000 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ interrupts = <44 0x2 0 0>;
+ phy_type = "utmi";
+ port0;
+ };
+
+ usb1: usb@211000 {
+ compatible = "fsl,p3041-usb2-dr",
+ "fsl,mpc85xx-usb2-dr", "fsl-usb2-dr";
+ reg = <0x211000 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ interrupts = <45 0x2 0 0>;
+ dr_mode = "host";
+ phy_type = "utmi";
+ };
+
+ sata@220000 {
+ compatible = "fsl,p3041-sata", "fsl,pq-sata-v2";
+ reg = <0x220000 0x1000>;
+ interrupts = <68 0x2 0 0>;
+ };
+
+ sata@221000 {
+ compatible = "fsl,p3041-sata", "fsl,pq-sata-v2";
+ reg = <0x221000 0x1000>;
+ interrupts = <69 0x2 0 0>;
+ };
+
+ crypto: crypto@300000 {
+ compatible = "fsl,sec-v4.2", "fsl,sec-v4.0";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x300000 0x10000>;
+ ranges = <0 0x300000 0x10000>;
+ interrupts = <92 2 0 0>;
+
+ sec_jr0: jr@1000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x1000 0x1000>;
+ interrupts = <88 2 0 0>;
+ };
+
+ sec_jr1: jr@2000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x2000 0x1000>;
+ interrupts = <89 2 0 0>;
+ };
+
+ sec_jr2: jr@3000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x3000 0x1000>;
+ interrupts = <90 2 0 0>;
+ };
+
+ sec_jr3: jr@4000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x4000 0x1000>;
+ interrupts = <91 2 0 0>;
+ };
+
+ rtic@6000 {
+ compatible = "fsl,sec-v4.2-rtic",
+ "fsl,sec-v4.0-rtic";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x6000 0x100>;
+ ranges = <0x0 0x6100 0xe00>;
+
+ rtic_a: rtic-a@0 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x00 0x20 0x100 0x80>;
+ };
+
+ rtic_b: rtic-b@20 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x20 0x20 0x200 0x80>;
+ };
+
+ rtic_c: rtic-c@40 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x40 0x20 0x300 0x80>;
+ };
+
+ rtic_d: rtic-d@60 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x60 0x20 0x500 0x80>;
+ };
+ };
+ };
+
+ sec_mon: sec_mon@314000 {
+ compatible = "fsl,sec-v4.2-mon", "fsl,sec-v4.0-mon";
+ reg = <0x314000 0x1000>;
+ interrupts = <93 2 0 0>;
+ };
+
+ pme: pme@316000 {
+ compatible = "fsl,pme";
+ reg = <0x316000 0x10000>;
+ /* fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
+ /* fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
+ interrupts = <16 2 1 5>;
+ };
+
+ qman: qman@318000 {
+ compatible = "fsl,p3041-qman", "fsl,qman";
+ reg = <0x318000 0x1000>;
+ interrupts = <16 2 1 3>;
+ /* Commented out, use default allocation */
+ /* fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
+ /* fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
+ };
+
+ bman: bman@31a000 {
+ compatible = "fsl,p3041-bman", "fsl,bman";
+ reg = <0x31a000 0x1000>;
+ interrupts = <16 2 1 2>;
+ /* Same as fsl,qman-*, use default allocation */
+ /* fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
+ };
+
+ fman0: fman@400000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ cell-index = <0>;
+ compatible = "fsl,p3041-fman", "fsl,fman", "simple-bus";
+ ranges = <0 0x400000 0x100000>;
+ reg = <0x400000 0x100000>;
+ clock-frequency = <0>;
+ interrupts = <
+ 96 2 0 0
+ 16 2 1 1>;
+
+ cc@0 {
+ compatible = "fsl,p3041-fman-cc", "fsl,fman-cc";
+ };
+
+ parser@c7000 {
+ compatible = "fsl,p3041-fman-parser", "fsl,fman-parser";
+ reg = <0xc7000 0x1000>;
+ };
+
+ keygen@c1000 {
+ compatible = "fsl,p3041-fman-keygen", "fsl,fman-keygen";
+ reg = <0xc1000 0x1000>;
+ };
+
+ policer@c0000 {
+ compatible = "fsl,p3041-fman-policer", "fsl,fman-policer";
+ reg = <0xc0000 0x1000>;
+ };
+
+ muram@0 {
+ compatible = "fsl,p3041-fman-muram", "fsl,fman-muram";
+ reg = <0x0 0x28000>;
+ };
+
+ bmi@80000 {
+ compatible = "fsl,p3041-fman-bmi", "fsl,fman-bmi";
+ reg = <0x80000 0x400>;
+ };
+
+ qmi@80400 {
+ compatible = "fsl,p3041-fman-qmi", "fsl,fman-qmi";
+ reg = <0x80400 0x400>;
+ };
+
+ fman0_rx0: port@88000 {
+ cell-index = <0>;
+ compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x88000 0x1000>;
+ };
+ fman0_rx1: port@89000 {
+ cell-index = <1>;
+ compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x89000 0x1000>;
+ };
+ fman0_rx2: port@8a000 {
+ cell-index = <2>;
+ compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x8a000 0x1000>;
+ };
+ fman0_rx3: port@8b000 {
+ cell-index = <3>;
+ compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x8b000 0x1000>;
+ };
+ fman0_rx4: port@8c000 {
+ cell-index = <4>;
+ compatible = "fsl,p3041-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x8c000 0x1000>;
+ };
+ fman0_rx5: port@90000 {
+ cell-index = <0>;
+ compatible = "fsl,p3041-fman-port-10g-rx", "fsl,fman-port-10g-rx";
+ reg = <0x90000 0x1000>;
+ };
+
+ fman0_tx5: port@b0000 {
+ cell-index = <0>;
+ compatible = "fsl,p3041-fman-port-10g-tx", "fsl,fman-port-10g-tx";
+ reg = <0xb0000 0x1000>;
+ fsl,qman-channel-id = <0x40>;
+ };
+ fman0_tx0: port@a8000 {
+ cell-index = <0>;
+ compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xa8000 0x1000>;
+ fsl,qman-channel-id = <0x41>;
+ };
+ fman0_tx1: port@a9000 {
+ cell-index = <1>;
+ compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xa9000 0x1000>;
+ fsl,qman-channel-id = <0x42>;
+ };
+ fman0_tx2: port@aa000 {
+ cell-index = <2>;
+ compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xaa000 0x1000>;
+ fsl,qman-channel-id = <0x43>;
+ };
+ fman0_tx3: port@ab000 {
+ cell-index = <3>;
+ compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xab000 0x1000>;
+ fsl,qman-channel-id = <0x44>;
+ };
+ fman0_tx4: port@ac000 {
+ cell-index = <4>;
+ compatible = "fsl,p3041-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xac000 0x1000>;
+ fsl,qman-channel-id = <0x45>;
+ };
+
+ fman0_oh0: port@81000 {
+ cell-index = <0>;
+ compatible = "fsl,p3041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x81000 0x1000>;
+ fsl,qman-channel-id = <0x46>;
+ };
+ fman0_oh1: port@82000 {
+ cell-index = <1>;
+ compatible = "fsl,p3041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x82000 0x1000>;
+ fsl,qman-channel-id = <0x47>;
+ };
+ fman0_oh2: port@83000 {
+ cell-index = <2>;
+ compatible = "fsl,p3041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x83000 0x1000>;
+ fsl,qman-channel-id = <0x48>;
+ };
+ fman0_oh3: port@84000 {
+ cell-index = <3>;
+ compatible = "fsl,p3041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x84000 0x1000>;
+ fsl,qman-channel-id = <0x49>;
+ };
+ fman0_oh4: port@85000 {
+ cell-index = <4>;
+ compatible = "fsl,p3041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x85000 0x1000>;
+ fsl,qman-channel-id = <0x4a>;
+ };
+ fman0_oh5: port@86000 {
+ cell-index = <5>;
+ compatible = "fsl,p3041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x86000 0x1000>;
+ fsl,qman-channel-id = <0x4b>;
+ };
+ fman0_oh6: port@87000 {
+ cell-index = <6>;
+ compatible = "fsl,p3041-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x87000 0x1000>;
+ };
+
+ enet0: ethernet@e0000 {
+ cell-index = <0>;
+ compatible = "fsl,p3041-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe0000 0x1000>;
+ fsl,port-handles = <&fman0_rx0 &fman0_tx0>;
+ ptimer-handle = <&ptp_timer0>;
+ };
+
+ mdio0: mdio@e1120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-mdio";
+ reg = <0xe1120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet1: ethernet@e2000 {
+ cell-index = <1>;
+ compatible = "fsl,p3041-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe2000 0x1000>;
+ fsl,port-handles = <&fman0_rx1 &fman0_tx1>;
+ ptimer-handle = <&ptp_timer0>;
+ };
+
+ mdio@e3120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe3120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet2: ethernet@e4000 {
+ cell-index = <2>;
+ compatible = "fsl,p3041-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe4000 0x1000>;
+ fsl,port-handles = <&fman0_rx2 &fman0_tx2>;
+ ptimer-handle = <&ptp_timer0>;
+ };
+
+ mdio@e5120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe5120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet3: ethernet@e6000 {
+ cell-index = <3>;
+ compatible = "fsl,p3041-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe6000 0x1000>;
+ fsl,port-handles = <&fman0_rx3 &fman0_tx3>;
+ };
+
+ mdio@e7120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe7120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet4: ethernet@e8000 {
+ cell-index = <4>;
+ compatible = "fsl,p3041-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe8000 0x1000>;
+ fsl,port-handles = <&fman0_rx4 &fman0_tx4>;
+ ptimer-handle = <&ptp_timer0>;
+ };
+
+ mdio@e9120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe9120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet5: ethernet@f0000 {
+ cell-index = <0>;
+ compatible = "fsl,p3041-fman-10g-mac", "fsl,fman-10g-mac";
+ reg = <0xf0000 0x1000>;
+ fsl,port-handles = <&fman0_rx5 &fman0_tx5>;
+ };
+
+ mdio@f1000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-xmdio";
+ reg = <0xf1000 0x1000>;
+ interrupts = <100 1 0 0>;
+ };
+
+ ptp_timer0: rtc@fe000 {
+ compatible = "fsl,fman-rtc";
+ reg = <0xfe000 0x1000>;
+ };
+ };
+ };
+
+ rapidio@ffe0c0000 {
+ compatible = "fsl,srio";
+ interrupts = <16 2 1 11>;
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ port1 {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ cell-index = <1>;
+ };
+
+ port2 {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ cell-index = <2>;
+ };
+ };
+
+ localbus@ffe124000 {
+ compatible = "fsl,p3041-rev1.0-elbc", "simple-bus", "fsl,elbc";
+ interrupts = <
+ 25 2 0 0
+ 16 2 1 19
+ >;
+ #address-cells = <2>;
+ #size-cells = <1>;
+ };
+
+ pci0: pcie@ffe200000 {
+ compatible = "fsl,p3041-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "okay";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ bus-range = <0x0 0xff>;
+ clock-frequency = <0x1fca055>;
+ fsl,msi = <&msi0>;
+ interrupts = <16 2 1 15>;
+
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 15>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 40 1 0 0
+ 0000 0 0 2 &mpic 1 1 0 0
+ 0000 0 0 3 &mpic 2 1 0 0
+ 0000 0 0 4 &mpic 3 1 0 0
+ >;
+ };
+ };
+
+ pci1: pcie@ffe201000 {
+ compatible = "fsl,p3041-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "disabled";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ bus-range = <0 0xff>;
+ clock-frequency = <0x1fca055>;
+ fsl,msi = <&msi1>;
+ interrupts = <16 2 1 14>;
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 14>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 41 1 0 0
+ 0000 0 0 2 &mpic 5 1 0 0
+ 0000 0 0 3 &mpic 6 1 0 0
+ 0000 0 0 4 &mpic 7 1 0 0
+ >;
+ };
+ };
+
+ pci2: pcie@ffe202000 {
+ compatible = "fsl,p3041-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "okay";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ bus-range = <0x0 0xff>;
+ clock-frequency = <0x1fca055>;
+ fsl,msi = <&msi2>;
+ interrupts = <16 2 1 13>;
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 13>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 42 1 0 0
+ 0000 0 0 2 &mpic 9 1 0 0
+ 0000 0 0 3 &mpic 10 1 0 0
+ 0000 0 0 4 &mpic 11 1 0 0
+ >;
+ };
+ };
+
+ pci3: pcie@ffe203000 {
+ compatible = "fsl,p3041-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "disabled";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ bus-range = <0x0 0xff>;
+ clock-frequency = <0x1fca055>;
+ fsl,msi = <&msi2>;
+ interrupts = <16 2 1 12>;
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 12>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 43 1 0 0
+ 0000 0 0 2 &mpic 0 1 0 0
+ 0000 0 0 3 &mpic 4 1 0 0
+ 0000 0 0 4 &mpic 8 1 0 0
+ >;
+ };
+ };
+};
diff --git a/sys/boot/fdt/dts/p5020ds.dts b/sys/boot/fdt/dts/p5020ds.dts
new file mode 100644
index 000000000000..cb070457924e
--- /dev/null
+++ b/sys/boot/fdt/dts/p5020ds.dts
@@ -0,0 +1,583 @@
+/*
+ * P5020DS Device Tree Source
+ *
+ * Copyright 2010-2011 Freescale Semiconductor Inc.
+ *
+ * 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 Freescale Semiconductor nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``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 Freescale Semiconductor 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/ "p5020si.dtsi"
+
+/ {
+ model = "fsl,P5020DS";
+ compatible = "fsl,P5020DS";
+ #address-cells = <2>;
+ #size-cells = <2>;
+ interrupt-parent = <&mpic>;
+
+ aliases {
+ phy_rgmii_0 = &phy_rgmii_0;
+ phy_rgmii_1 = &phy_rgmii_1;
+ phy_sgmii_1c = &phy_sgmii_1c;
+ phy_sgmii_1d = &phy_sgmii_1d;
+ phy_sgmii_1e = &phy_sgmii_1e;
+ phy_sgmii_1f = &phy_sgmii_1f;
+ phy_xgmii_1 = &phy_xgmii_1;
+ phy_xgmii_2 = &phy_xgmii_2;
+ emi1_rgmii = &hydra_mdio_rgmii;
+ emi1_sgmii = &hydra_mdio_sgmii;
+ emi2_xgmii = &hydra_mdio_xgmii;
+ };
+
+ memory {
+ device_type = "memory";
+ reg = <0x00000000 0x00000000 0x00000000 0x80000000>;
+ };
+
+ dcsr: dcsr@f00000000 {
+ ranges = <0x00000000 0xf 0x00000000 0x01008000>;
+ };
+
+ bman-portals@ff4000000 {
+ bman-portal@0 {
+ cpu-handle = <&cpu0>;
+ };
+ bman-portal@4000 {
+ cpu-handle = <&cpu1>;
+ };
+ bman-portal@8000 {
+ };
+ bman-portal@c000 {
+ };
+ bman-portal@10000 {
+ };
+ bman-portal@14000 {
+ };
+ bman-portal@18000 {
+ };
+ bman-portal@1c000 {
+ };
+ bman-portal@20000 {
+ };
+ bman-portal@24000 {
+ };
+
+ buffer-pool@0 {
+ compatible = "fsl,p5020-bpool", "fsl,bpool";
+ fsl,bpid = <0>;
+ fsl,bpool-cfg = <0 0x100 0 1 0 0x100>;
+ };
+ };
+
+ qman-portals@ff4200000 {
+ qportal0: qman-portal@0 {
+ cpu-handle = <&cpu0>;
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal1: qman-portal@4000 {
+ cpu-handle = <&cpu1>;
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal2: qman-portal@8000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal3: qman-portal@c000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal4: qman-portal@10000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal5: qman-portal@14000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal6: qman-portal@18000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal7: qman-portal@1c000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal8: qman-portal@20000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+
+ qportal9: qman-portal@24000 {
+ fsl,qman-pool-channels = <&qpool1 &qpool2 &qpool3
+ &qpool4 &qpool5 &qpool6
+ &qpool7 &qpool8 &qpool9
+ &qpool10 &qpool11 &qpool12
+ &qpool13 &qpool14 &qpool15>;
+ };
+ };
+
+ soc: soc@ffe000000 {
+ spi@110000 {
+ flash@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "spansion,s25sl12801";
+ reg = <0>;
+ spi-max-frequency = <40000000>; /* input clock */
+ partition@u-boot {
+ label = "u-boot";
+ reg = <0x00000000 0x00100000>;
+ read-only;
+ };
+ partition@kernel {
+ label = "kernel";
+ reg = <0x00100000 0x00500000>;
+ read-only;
+ };
+ partition@dtb {
+ label = "dtb";
+ reg = <0x00600000 0x00100000>;
+ read-only;
+ };
+ partition@fs {
+ label = "file system";
+ reg = <0x00700000 0x00900000>;
+ };
+ };
+ };
+
+ i2c@118100 {
+ eeprom@51 {
+ compatible = "at24,24c256";
+ reg = <0x51>;
+ };
+ eeprom@52 {
+ compatible = "at24,24c256";
+ reg = <0x52>;
+ };
+ };
+
+ i2c@119100 {
+ rtc@68 {
+ compatible = "dallas,ds3232";
+ reg = <0x68>;
+ interrupts = <0x1 0x1 0 0>;
+ };
+ };
+
+ pme: pme@316000 {
+ /* Commented out, use default allocation */
+ /* fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
+ /* fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
+ };
+
+ qman: qman@318000 {
+ /* Commented out, use default allocation */
+ /* fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
+ /* fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
+ };
+
+ bman: bman@31a000 {
+ /* Same as fsl,qman-*, use default allocation */
+ /* fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
+ };
+
+ fman0: fman@400000 {
+ enet0: ethernet@e0000 {
+ tbi-handle = <&tbi0>;
+ phy-handle = <&phy_rgmii_0>;
+ phy-connection-type = "rgmii";
+ };
+
+ mdio0: mdio@e1120 {
+ tbi0: tbi-phy@8 {
+ reg = <0x8>;
+ device_type = "tbi-phy";
+ };
+
+ /*
+ * Virtual MDIO for the two on-board RGMII
+ * ports. The fsl,hydra-mdio-muxval property
+ * is already correct.
+ */
+ hydra_mdio_rgmii: hydra-mdio-rgmii {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,hydra-mdio";
+ fsl,mdio-handle = <&mdio0>;
+ fsl,hydra-mdio-muxval = <0x00>;
+ status = "disabled";
+
+ phy_rgmii_0: ethernet-phy@0 {
+ reg = <0x0>;
+ };
+ phy_rgmii_1: ethernet-phy@1 {
+ reg = <0x1>;
+ };
+ };
+
+ /*
+ * Virtual MDIO for the four-port SGMII card.
+ * The fsl,hydra-mdio-muxval property will be
+ * fixed-up by U-Boot based on the slot that
+ * the SGMII card is in.
+ *
+ * Note: we do not support DTSEC5 connected to
+ * SGMII, so this is the only SGMII node.
+ */
+ hydra_mdio_sgmii: hydra-mdio-sgmii {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,hydra-mdio";
+ fsl,mdio-handle = <&mdio0>;
+ fsl,hydra-mdio-muxval = <0x00>;
+ status = "disabled";
+
+ phy_sgmii_1c: ethernet-phy@1c {
+ reg = <0x1c>;
+ };
+ phy_sgmii_1d: ethernet-phy@1d {
+ reg = <0x1d>;
+ };
+ phy_sgmii_1e: ethernet-phy@1e {
+ reg = <0x1e>;
+ };
+ phy_sgmii_1f: ethernet-phy@1f {
+ reg = <0x1f>;
+ };
+ };
+ };
+
+ enet1: ethernet@e2000 {
+ tbi-handle = <&tbi1>;
+ phy-handle = <&phy_sgmii_1d>;
+ phy-connection-type = "sgmii";
+ };
+
+ mdio@e3120 {
+ tbi1: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
+ };
+ };
+
+ enet2: ethernet@e4000 {
+ tbi-handle = <&tbi2>;
+ phy-handle = <&phy_sgmii_1e>;
+ phy-connection-type = "sgmii";
+ };
+
+ mdio@e5120 {
+ tbi2: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
+ };
+ };
+
+ enet3: ethernet@e6000 {
+ tbi-handle = <&tbi3>;
+ phy-handle = <&phy_sgmii_1f>;
+ phy-connection-type = "sgmii";
+ };
+
+ mdio@e7120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe7120 0xee0>;
+ interrupts = <100 1 0 0>;
+
+ tbi3: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
+ };
+ };
+
+ enet4: ethernet@e8000 {
+ tbi-handle = <&tbi4>;
+ phy-handle = <&phy_rgmii_1>;
+ phy-connection-type = "rgmii";
+ };
+
+ mdio@e9120 {
+ tbi4: tbi-phy@8 {
+ reg = <8>;
+ device_type = "tbi-phy";
+ };
+ };
+
+ enet5: ethernet@f0000 {
+ /*
+ * phy-handle will be updated by U-Boot to
+ * reflect the actual slot the XAUI card is in.
+ */
+ phy-handle = <&phy_xgmii_1>;
+ phy-connection-type = "xgmii";
+ };
+
+ /*
+ * We only support one XAUI card, so the MDIO muxing
+ * is set by U-Boot, and Linux never touches it.
+ * Therefore, we don't need a virtual MDIO node.
+ * However, the phy address depends on the slot, so
+ * only one of the ethernet-phy nodes below will be
+ * used.
+ */
+ hydra_mdio_xgmii: mdio@f1000 {
+ status = "disabled";
+
+ /* XAUI card in slot 1 */
+ phy_xgmii_1: ethernet-phy@4 {
+ reg = <0x4>;
+ };
+
+ /* XAUI card in slot 2 */
+ phy_xgmii_2: ethernet-phy@0 {
+ reg = <0x0>;
+ };
+ };
+ };
+ };
+
+ rapidio@ffe0c0000 {
+ reg = <0xf 0xfe0c0000 0 0x11000>;
+
+ port1 {
+ ranges = <0 0 0xc 0x20000000 0 0x10000000>;
+ };
+ port2 {
+ ranges = <0 0 0xc 0x30000000 0 0x10000000>;
+ };
+ };
+
+ localbus@ffe124000 {
+ reg = <0xf 0xfe124000 0 0x1000>;
+ ranges = <0 0 0xf 0xb8000000 0x04000000>;
+
+ flash@0,0 {
+ compatible = "cfi-flash";
+ /*
+ * Map 64Mb of 128MB NOR flash memory. Since highest
+ * line of address of NOR flash memory are set by
+ * FPGA, memory are divided into two pages equal to
+ * 64MB. One of the pages can be accessed at once.
+ */
+ reg = <0 0 0x04000000>;
+ bank-width = <2>;
+ device-width = <2>;
+ };
+
+ nand@2,0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,elbc-fcm-nand";
+ reg = <0x2 0x0 0x40000>;
+
+ partition@0 {
+ label = "NAND U-Boot Image";
+ reg = <0x0 0x02000000>;
+ read-only;
+ };
+
+ partition@2000000 {
+ label = "NAND Root File System";
+ reg = <0x02000000 0x10000000>;
+ };
+
+ partition@12000000 {
+ label = "NAND Compressed RFS Image";
+ reg = <0x12000000 0x08000000>;
+ };
+
+ partition@1a000000 {
+ label = "NAND Linux Kernel Image";
+ reg = <0x1a000000 0x04000000>;
+ };
+
+ partition@1e000000 {
+ label = "NAND DTB Image";
+ reg = <0x1e000000 0x01000000>;
+ };
+
+ partition@1f000000 {
+ label = "NAND Writable User area";
+ reg = <0x1f000000 0x21000000>;
+ };
+ };
+
+ board-control@3,0 {
+ compatible = "fsl,p5020ds-fpga", "fsl,fpga-ngpixis";
+ reg = <3 0 0x30>;
+ };
+ };
+
+ pci0: pcie@ffe200000 {
+ reg = <0xf 0xfe200000 0 0x1000>;
+ ranges = <0x02000000 0 0x80000000 0x0 0x80000000 0x0 0x10000000
+ 0x01000000 0 0x00000000 0x0 0xff000000 0x0 0x00010000>;
+ pcie@0 {
+ ranges = <0x02000000 0 0x80000000
+ 0x02000000 0 0x80000000
+ 0 0x10000000
+
+ 0x01000000 0 0x00000000
+ 0x01000000 0 0xff000000
+ 0 0x00010000>;
+ };
+ };
+
+ pci1: pcie@ffe201000 {
+ reg = <0xf 0xfe201000 0 0x1000>;
+ ranges = <0x02000000 0x0 0x90000000 0x0 0x90000000 0x0 0x10000000
+ 0x01000000 0x0 0x00000000 0x0 0xff010000 0x0 0x00010000>;
+ pcie@0 {
+ ranges = <0x02000000 0 0x90000000
+ 0x02000000 0 0x90000000
+ 0 0x10000000
+
+ 0x01000000 0 0x00000000
+ 0x01000000 0 0xff010000
+ 0 0x00010000>;
+ };
+ };
+
+ pci2: pcie@ffe202000 {
+ reg = <0xf 0xfe202000 0 0x1000>;
+ ranges = <0x02000000 0 0xa0000000 0x0 0xa0000000 0 0x10000000
+ 0x01000000 0 0x00000000 0x0 0xff020000 0 0x00010000>;
+ pcie@0 {
+ ranges = <0x02000000 0 0xa0000000
+ 0x02000000 0 0xa0000000
+ 0 0x10000000
+
+ 0x01000000 0 0x00000000
+ 0x01000000 0 0xff020000
+ 0 0x00010000>;
+ };
+ };
+
+ pci3: pcie@ffe203000 {
+ reg = <0xf 0xfe203000 0 0x1000>;
+ ranges = <0x02000000 0 0xb0000000 0x0 0xb0000000 0 0x08000000
+ 0x01000000 0 0x00000000 0x0 0xff030000 0 0x00010000>;
+ pcie@0 {
+ ranges = <0x02000000 0 0xb0000000
+ 0x02000000 0 0xb0000000
+ 0 0x08000000
+
+ 0x01000000 0 0x00000000
+ 0x01000000 0 0xff030000
+ 0 0x00010000>;
+ };
+ };
+
+ fsl,dpaa {
+ compatible = "fsl,p5020-dpaa", "fsl,dpaa";
+
+ ethernet@0 {
+ compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet0>;
+ status = "okay";
+ };
+ ethernet@1 {
+ compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet1>;
+ status = "disabled";
+ };
+ ethernet@2 {
+ compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet2>;
+ status = "disabled";
+ };
+ ethernet@3 {
+ compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet3>;
+ status = "disabled";
+ };
+ ethernet@4 {
+ compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet4>;
+ status = "okay";
+ };
+ ethernet@5 {
+ compatible = "fsl,p5020-dpa-ethernet", "fsl,dpa-ethernet";
+ fsl,qman-channel = <&qpool1>;
+ fsl,fman-mac = <&enet5>;
+ status = "disabled";
+ };
+ };
+
+ chosen {
+ stdin = "serial0";
+ stdout = "serial0";
+ };
+};
diff --git a/sys/boot/fdt/dts/p5020si.dtsi b/sys/boot/fdt/dts/p5020si.dtsi
new file mode 100644
index 000000000000..27699cbc7e03
--- /dev/null
+++ b/sys/boot/fdt/dts/p5020si.dtsi
@@ -0,0 +1,1389 @@
+/*
+ * P5020 Silicon Device Tree Source
+ *
+ * Copyright 2010-2011 Freescale Semiconductor Inc.
+ *
+ * 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 Freescale Semiconductor nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``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 Freescale Semiconductor 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$ */
+
+/dts-v1/;
+
+/ {
+ compatible = "fsl,P5020";
+ #address-cells = <2>;
+ #size-cells = <2>;
+ interrupt-parent = <&mpic>;
+
+ aliases {
+ ccsr = &soc;
+ dcsr = &dcsr;
+
+ ethernet0 = &enet0;
+ ethernet1 = &enet1;
+ ethernet2 = &enet2;
+ ethernet3 = &enet3;
+ ethernet4 = &enet4;
+ ethernet5 = &enet5;
+ serial0 = &serial0;
+ serial1 = &serial1;
+ serial2 = &serial2;
+ serial3 = &serial3;
+ pci0 = &pci0;
+ pci1 = &pci1;
+ pci2 = &pci2;
+ pci3 = &pci3;
+ usb0 = &usb0;
+ usb1 = &usb1;
+ dma0 = &dma0;
+ dma1 = &dma1;
+ bman = &bman;
+ qman = &qman;
+ pme = &pme;
+ rman = &rman;
+ sdhc = &sdhc;
+ msi0 = &msi0;
+ msi1 = &msi1;
+ msi2 = &msi2;
+
+ crypto = &crypto;
+ sec_jr0 = &sec_jr0;
+ sec_jr1 = &sec_jr1;
+ sec_jr2 = &sec_jr2;
+ sec_jr3 = &sec_jr3;
+ rtic_a = &rtic_a;
+ rtic_b = &rtic_b;
+ rtic_c = &rtic_c;
+ rtic_d = &rtic_d;
+ sec_mon = &sec_mon;
+
+ raideng = &raideng;
+ raideng_jr0 = &raideng_jr0;
+ raideng_jr1 = &raideng_jr1;
+ raideng_jr2 = &raideng_jr2;
+ raideng_jr3 = &raideng_jr3;
+
+ fman0 = &fman0;
+ fman0_oh0 = &fman0_oh0;
+ fman0_oh1 = &fman0_oh1;
+ fman0_oh2 = &fman0_oh2;
+ fman0_oh3 = &fman0_oh3;
+ fman0_oh4 = &fman0_oh4;
+ fman0_oh5 = &fman0_oh5;
+ fman0_oh6 = &fman0_oh6;
+ fman0_rx0 = &fman0_rx0;
+ fman0_rx1 = &fman0_rx1;
+ fman0_rx2 = &fman0_rx2;
+ fman0_rx3 = &fman0_rx3;
+ fman0_rx4 = &fman0_rx4;
+ fman0_rx5 = &fman0_rx5;
+ };
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: PowerPC,e5500@0 {
+ device_type = "cpu";
+ reg = <0>;
+ bus-frequency = <799999998>;
+ next-level-cache = <&L2_0>;
+ L2_0: l2-cache {
+ next-level-cache = <&cpc>;
+ };
+ };
+ cpu1: PowerPC,e5500@1 {
+ device_type = "cpu";
+ reg = <1>;
+ next-level-cache = <&L2_1>;
+ L2_1: l2-cache {
+ next-level-cache = <&cpc>;
+ };
+ };
+ };
+
+ dcsr: dcsr@f00000000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,dcsr", "simple-bus";
+
+ dcsr-epu@0 {
+ compatible = "fsl,dcsr-epu";
+ interrupts = <52 2 0 0
+ 84 2 0 0
+ 85 2 0 0>;
+ interrupt-parent = <&mpic>;
+ reg = <0x0 0x1000>;
+ };
+ dcsr-npc {
+ compatible = "fsl,dcsr-npc";
+ reg = <0x1000 0x1000 0x1000000 0x8000>;
+ };
+ dcsr-nxc@2000 {
+ compatible = "fsl,dcsr-nxc";
+ reg = <0x2000 0x1000>;
+ };
+ dcsr-corenet {
+ compatible = "fsl,dcsr-corenet";
+ reg = <0x8000 0x1000 0xB0000 0x1000>;
+ };
+ dcsr-dpaa@9000 {
+ compatible = "fsl,p5020-dcsr-dpaa", "fsl,dcsr-dpaa";
+ reg = <0x9000 0x1000>;
+ };
+ dcsr-ocn@11000 {
+ compatible = "fsl,p5020-dcsr-ocn", "fsl,dcsr-ocn";
+ reg = <0x11000 0x1000>;
+ };
+ dcsr-ddr@12000 {
+ compatible = "fsl,dcsr-ddr";
+ dev-handle = <&ddr1>;
+ reg = <0x12000 0x1000>;
+ };
+ dcsr-ddr@13000 {
+ compatible = "fsl,dcsr-ddr";
+ dev-handle = <&ddr2>;
+ reg = <0x13000 0x1000>;
+ };
+ dcsr-nal@18000 {
+ compatible = "fsl,p5020-dcsr-nal", "fsl,dcsr-nal";
+ reg = <0x18000 0x1000>;
+ };
+ dcsr-rcpm@22000 {
+ compatible = "fsl,p5020-dcsr-rcpm", "fsl,dcsr-rcpm";
+ reg = <0x22000 0x1000>;
+ };
+ dcsr-cpu-sb-proxy@40000 {
+ compatible = "fsl,dcsr-e5500-sb-proxy", "fsl,dcsr-cpu-sb-proxy";
+ cpu-handle = <&cpu0>;
+ reg = <0x40000 0x1000>;
+ };
+ dcsr-cpu-sb-proxy@41000 {
+ compatible = "fsl,dcsr-e5500-sb-proxy", "fsl,dcsr-cpu-sb-proxy";
+ cpu-handle = <&cpu1>;
+ reg = <0x41000 0x1000>;
+ };
+ };
+
+ bman-portals@ff4000000 {
+ #address-cells = <0x1>;
+ #size-cells = <0x1>;
+ compatible = "bman-portals";
+ ranges = <0x0 0xf 0xfde00000 0x200000>;
+ bman-portal@0 {
+ cell-index = <0x0>;
+ compatible = "fsl,p5020-bman-portal", "fsl,bman-portal";
+ reg = <0x0 0x4000 0x100000 0x1000>;
+ interrupts = <105 2 0 0>;
+ };
+ bman-portal@4000 {
+ cell-index = <0x1>;
+ compatible = "fsl,p5020-bman-portal", "fsl,bman-portal";
+ reg = <0x4000 0x4000 0x101000 0x1000>;
+ interrupts = <107 2 0 0>;
+ };
+ bman-portal@8000 {
+ cell-index = <2>;
+ compatible = "fsl,p5020-bman-portal", "fsl,bman-portal";
+ reg = <0x8000 0x4000 0x102000 0x1000>;
+ interrupts = <109 2 0 0>;
+ };
+ bman-portal@c000 {
+ cell-index = <0x3>;
+ compatible = "fsl,p5020-bman-portal", "fsl,bman-portal";
+ reg = <0xc000 0x4000 0x103000 0x1000>;
+ interrupts = <111 2 0 0>;
+ };
+ bman-portal@10000 {
+ cell-index = <0x4>;
+ compatible = "fsl,p5020-bman-portal", "fsl,bman-portal";
+ reg = <0x10000 0x4000 0x104000 0x1000>;
+ interrupts = <113 2 0 0>;
+ };
+ bman-portal@14000 {
+ cell-index = <0x5>;
+ compatible = "fsl,p5020-bman-portal", "fsl,bman-portal";
+ reg = <0x14000 0x4000 0x105000 0x1000>;
+ interrupts = <115 2 0 0>;
+ };
+ bman-portal@18000 {
+ cell-index = <0x6>;
+ compatible = "fsl,p5020-bman-portal", "fsl,bman-portal";
+ reg = <0x18000 0x4000 0x106000 0x1000>;
+ interrupts = <117 2 0 0>;
+ };
+ bman-portal@1c000 {
+ cell-index = <0x7>;
+ compatible = "fsl,p5020-bman-portal", "fsl,bman-portal";
+ reg = <0x1c000 0x4000 0x107000 0x1000>;
+ interrupts = <119 2 0 0>;
+ };
+ bman-portal@20000 {
+ cell-index = <0x8>;
+ compatible = "fsl,p5020-bman-portal", "fsl,bman-portal";
+ reg = <0x20000 0x4000 0x108000 0x1000>;
+ interrupts = <121 2 0 0>;
+ };
+ bman-portal@24000 {
+ cell-index = <0x9>;
+ compatible = "fsl,p5020-bman-portal", "fsl,bman-portal";
+ reg = <0x24000 0x4000 0x109000 0x1000>;
+ interrupts = <123 2 0 0>;
+ };
+
+ buffer-pool@0 {
+ compatible = "fsl,p5020-bpool", "fsl,bpool";
+ fsl,bpid = <0>;
+ fsl,bpool-cfg = <0 0x100 0 1 0 0x100>;
+ };
+ };
+
+ qman-portals@ff4200000 {
+ #address-cells = <0x1>;
+ #size-cells = <0x1>;
+ compatible = "qman-portals";
+ ranges = <0x0 0xf 0xfdc00000 0x200000>;
+ qportal0: qman-portal@0 {
+ cell-index = <0x0>;
+ compatible = "fsl,p5020-qman-portal", "fsl,qman-portal";
+ reg = <0x0 0x4000 0x100000 0x1000>;
+ interrupts = <104 0x2 0 0>;
+ fsl,qman-channel-id = <0x0>;
+ };
+
+ qportal1: qman-portal@4000 {
+ cell-index = <0x1>;
+ compatible = "fsl,p5020-qman-portal", "fsl,qman-portal";
+ reg = <0x4000 0x4000 0x101000 0x1000>;
+ interrupts = <106 0x2 0 0>;
+ fsl,qman-channel-id = <0x1>;
+ };
+
+ qportal2: qman-portal@8000 {
+ cell-index = <0x2>;
+ compatible = "fsl,p5020-qman-portal", "fsl,qman-portal";
+ reg = <0x8000 0x4000 0x102000 0x1000>;
+ interrupts = <108 0x2 0 0>;
+ fsl,qman-channel-id = <0x2>;
+ };
+
+ qportal3: qman-portal@c000 {
+ cell-index = <0x3>;
+ compatible = "fsl,p5020-qman-portal", "fsl,qman-portal";
+ reg = <0xc000 0x4000 0x103000 0x1000>;
+ interrupts = <110 0x2 0 0>;
+ fsl,qman-channel-id = <0x3>;
+ };
+
+ qportal4: qman-portal@10000 {
+ cell-index = <0x4>;
+ compatible = "fsl,p5020-qman-portal", "fsl,qman-portal";
+ reg = <0x10000 0x4000 0x104000 0x1000>;
+ interrupts = <112 0x2 0 0>;
+ fsl,qman-channel-id = <0x4>;
+ };
+
+ qportal5: qman-portal@14000 {
+ cell-index = <0x5>;
+ compatible = "fsl,p5020-qman-portal", "fsl,qman-portal";
+ reg = <0x14000 0x4000 0x105000 0x1000>;
+ interrupts = <114 0x2 0 0>;
+ fsl,qman-channel-id = <0x5>;
+ };
+
+ qportal6: qman-portal@18000 {
+ cell-index = <0x6>;
+ compatible = "fsl,p5020-qman-portal", "fsl,qman-portal";
+ reg = <0x18000 0x4000 0x106000 0x1000>;
+ interrupts = <116 0x2 0 0>;
+ fsl,qman-channel-id = <0x6>;
+ };
+
+ qportal7: qman-portal@1c000 {
+ cell-index = <0x7>;
+ compatible = "fsl,p5020-qman-portal", "fsl,qman-portal";
+ reg = <0x1c000 0x4000 0x107000 0x1000>;
+ interrupts = <118 0x2 0 0>;
+ fsl,qman-channel-id = <0x7>;
+ };
+
+ qportal8: qman-portal@20000 {
+ cell-index = <0x8>;
+ compatible = "fsl,p5020-qman-portal", "fsl,qman-portal";
+ reg = <0x20000 0x4000 0x108000 0x1000>;
+ interrupts = <120 0x2 0 0>;
+ fsl,qman-channel-id = <0x8>;
+ };
+
+ qportal9: qman-portal@24000 {
+ cell-index = <0x9>;
+ compatible = "fsl,p5020-qman-portal", "fsl,qman-portal";
+ reg = <0x24000 0x4000 0x109000 0x1000>;
+ interrupts = <122 0x2 0 0>;
+ fsl,qman-channel-id = <0x9>;
+ };
+
+ qpool1: qman-pool@1 {
+ cell-index = <1>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x21>;
+ };
+
+ qpool2: qman-pool@2 {
+ cell-index = <2>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x22>;
+ };
+
+ qpool3: qman-pool@3 {
+ cell-index = <3>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x23>;
+ };
+
+ qpool4: qman-pool@4 {
+ cell-index = <4>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x24>;
+ };
+
+ qpool5: qman-pool@5 {
+ cell-index = <5>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x25>;
+ };
+
+ qpool6: qman-pool@6 {
+ cell-index = <6>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x26>;
+ };
+
+ qpool7: qman-pool@7 {
+ cell-index = <7>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x27>;
+ };
+
+ qpool8: qman-pool@8 {
+ cell-index = <8>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x28>;
+ };
+
+ qpool9: qman-pool@9 {
+ cell-index = <9>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x29>;
+ };
+
+ qpool10: qman-pool@10 {
+ cell-index = <10>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2a>;
+ };
+
+ qpool11: qman-pool@11 {
+ cell-index = <11>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2b>;
+ };
+
+ qpool12: qman-pool@12 {
+ cell-index = <12>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2c>;
+ };
+
+ qpool13: qman-pool@13 {
+ cell-index = <13>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2d>;
+ };
+
+ qpool14: qman-pool@14 {
+ cell-index = <14>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2e>;
+ };
+
+ qpool15: qman-pool@15 {
+ cell-index = <15>;
+ compatible = "fsl,p5020-qman-pool-channel", "fsl,qman-pool-channel";
+ fsl,qman-channel-id = <0x2f>;
+ };
+ };
+
+ soc: soc@ffe000000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ device_type = "soc";
+ compatible = "simple-bus";
+
+ bus-frequency = <0>; // Filled out by kernel.
+
+ ranges = <0x00000000 0xf 0xfe000000 0x1000000>;
+ reg = <0xf 0xfe000000 0 0x00001000>;
+
+ soc-sram-error {
+ compatible = "fsl,soc-sram-error";
+ interrupts = <16 2 1 29>;
+ };
+
+ corenet-law@0 {
+ compatible = "fsl,corenet-law";
+ reg = <0x0 0x1000>;
+ fsl,num-laws = <32>;
+ };
+
+ ddr1: memory-controller@8000 {
+ compatible = "fsl,qoriq-memory-controller-v4.5", "fsl,qoriq-memory-controller";
+ reg = <0x8000 0x1000>;
+ interrupts = <16 2 1 23>;
+ };
+
+ ddr2: memory-controller@9000 {
+ compatible = "fsl,qoriq-memory-controller-v4.5", "fsl,qoriq-memory-controller";
+ reg = <0x9000 0x1000>;
+ interrupts = <16 2 1 22>;
+ };
+
+ cpc: l3-cache-controller@10000 {
+ compatible = "fsl,p5020-l3-cache-controller", "fsl,p4080-l3-cache-controller", "cache";
+ reg = <0x10000 0x1000
+ 0x11000 0x1000>;
+ interrupts = <16 2 1 27
+ 16 2 1 26>;
+ };
+
+ corenet-cf@18000 {
+ compatible = "fsl,corenet-cf";
+ reg = <0x18000 0x1000>;
+ interrupts = <16 2 1 31>;
+ fsl,ccf-num-csdids = <32>;
+ fsl,ccf-num-snoopids = <32>;
+ };
+
+ iommu@20000 {
+ compatible = "fsl,pamu-v1.0", "fsl,pamu";
+ reg = <0x20000 0x4000>;
+ interrupts = <
+ 24 2 0 0
+ 16 2 1 30>;
+ };
+
+ mpic: pic@40000 {
+ clock-frequency = <0>;
+ interrupt-controller;
+ #address-cells = <0>;
+ #interrupt-cells = <4>;
+ reg = <0x40000 0x40000>;
+ compatible = "fsl,mpic", "chrp,open-pic";
+ device_type = "open-pic";
+ };
+
+ msi0: msi@41600 {
+ compatible = "fsl,mpic-msi";
+ reg = <0x41600 0x200>;
+ msi-available-ranges = <0 0x100>;
+ interrupts = <
+ 0xe0 0 0 0
+ 0xe1 0 0 0
+ 0xe2 0 0 0
+ 0xe3 0 0 0
+ 0xe4 0 0 0
+ 0xe5 0 0 0
+ 0xe6 0 0 0
+ 0xe7 0 0 0>;
+ };
+
+ msi1: msi@41800 {
+ compatible = "fsl,mpic-msi";
+ reg = <0x41800 0x200>;
+ msi-available-ranges = <0 0x100>;
+ interrupts = <
+ 0xe8 0 0 0
+ 0xe9 0 0 0
+ 0xea 0 0 0
+ 0xeb 0 0 0
+ 0xec 0 0 0
+ 0xed 0 0 0
+ 0xee 0 0 0
+ 0xef 0 0 0>;
+ };
+
+ msi2: msi@41a00 {
+ compatible = "fsl,mpic-msi";
+ reg = <0x41a00 0x200>;
+ msi-available-ranges = <0 0x100>;
+ interrupts = <
+ 0xf0 0 0 0
+ 0xf1 0 0 0
+ 0xf2 0 0 0
+ 0xf3 0 0 0
+ 0xf4 0 0 0
+ 0xf5 0 0 0
+ 0xf6 0 0 0
+ 0xf7 0 0 0>;
+ };
+
+ guts: global-utilities@e0000 {
+ compatible = "fsl,qoriq-device-config-1.0";
+ reg = <0xe0000 0xe00>;
+ fsl,has-rstcr;
+ #sleep-cells = <1>;
+ fsl,liodn-bits = <12>;
+ };
+
+ pins: global-utilities@e0e00 {
+ compatible = "fsl,qoriq-pin-control-1.0";
+ reg = <0xe0e00 0x200>;
+ #sleep-cells = <2>;
+ };
+
+ clockgen: global-utilities@e1000 {
+ compatible = "fsl,p5020-clockgen", "fsl,qoriq-clockgen-1.0";
+ reg = <0xe1000 0x1000>;
+ clock-frequency = <0>;
+ };
+
+ rcpm: global-utilities@e2000 {
+ compatible = "fsl,qoriq-rcpm-1.0";
+ reg = <0xe2000 0x1000>;
+ #sleep-cells = <1>;
+ };
+
+ sfp: sfp@e8000 {
+ compatible = "fsl,p5020-sfp", "fsl,qoriq-sfp-1.0";
+ reg = <0xe8000 0x1000>;
+ };
+
+ serdes: serdes@ea000 {
+ compatible = "fsl,p5020-serdes";
+ reg = <0xea000 0x1000>;
+ };
+
+ dma0: dma@100300 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,p5020-dma", "fsl,eloplus-dma";
+ reg = <0x100300 0x4>;
+ ranges = <0x0 0x100100 0x200>;
+ cell-index = <0>;
+ dma-channel@0 {
+ compatible = "fsl,p5020-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x0 0x80>;
+ cell-index = <0>;
+ interrupts = <28 2 0 0>;
+ };
+ dma-channel@80 {
+ compatible = "fsl,p5020-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x80 0x80>;
+ cell-index = <1>;
+ interrupts = <29 2 0 0>;
+ };
+ dma-channel@100 {
+ compatible = "fsl,p5020-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x100 0x80>;
+ cell-index = <2>;
+ interrupts = <30 2 0 0>;
+ };
+ dma-channel@180 {
+ compatible = "fsl,p5020-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x180 0x80>;
+ cell-index = <3>;
+ interrupts = <31 2 0 0>;
+ };
+ };
+
+ dma1: dma@101300 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "fsl,p5020-dma", "fsl,eloplus-dma";
+ reg = <0x101300 0x4>;
+ ranges = <0x0 0x101100 0x200>;
+ cell-index = <1>;
+ dma-channel@0 {
+ compatible = "fsl,p5020-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x0 0x80>;
+ cell-index = <0>;
+ interrupts = <32 2 0 0>;
+ };
+ dma-channel@80 {
+ compatible = "fsl,p5020-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x80 0x80>;
+ cell-index = <1>;
+ interrupts = <33 2 0 0>;
+ };
+ dma-channel@100 {
+ compatible = "fsl,p5020-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x100 0x80>;
+ cell-index = <2>;
+ interrupts = <34 2 0 0>;
+ };
+ dma-channel@180 {
+ compatible = "fsl,p5020-dma-channel",
+ "fsl,eloplus-dma-channel";
+ reg = <0x180 0x80>;
+ cell-index = <3>;
+ interrupts = <35 2 0 0>;
+ };
+ };
+
+ spi@110000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,p5020-espi", "fsl,mpc8536-espi";
+ reg = <0x110000 0x1000>;
+ interrupts = <53 0x2 0 0>;
+ fsl,espi-num-chipselects = <4>;
+ };
+
+ sdhc: sdhc@114000 {
+ compatible = "fsl,p5020-esdhc", "fsl,esdhc";
+ reg = <0x114000 0x1000>;
+ interrupts = <48 2 0 0>;
+ sdhci,auto-cmd12;
+ clock-frequency = <0>;
+ };
+
+ i2c@118000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <0>;
+ compatible = "fsl-i2c";
+ reg = <0x118000 0x100>;
+ interrupts = <38 2 0 0>;
+ dfsrr;
+ };
+
+ i2c@118100 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <1>;
+ compatible = "fsl-i2c";
+ reg = <0x118100 0x100>;
+ interrupts = <38 2 0 0>;
+ dfsrr;
+ };
+
+ i2c@119000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <2>;
+ compatible = "fsl-i2c";
+ reg = <0x119000 0x100>;
+ interrupts = <39 2 0 0>;
+ dfsrr;
+ };
+
+ i2c@119100 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cell-index = <3>;
+ compatible = "fsl-i2c";
+ reg = <0x119100 0x100>;
+ interrupts = <39 2 0 0>;
+ dfsrr;
+ };
+
+ serial0: serial@11c500 {
+ cell-index = <0>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11c500 0x100>;
+ clock-frequency = <0>;
+ interrupts = <36 2 0 0>;
+ };
+
+ serial1: serial@11c600 {
+ cell-index = <1>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11c600 0x100>;
+ clock-frequency = <0>;
+ interrupts = <36 2 0 0>;
+ };
+
+ serial2: serial@11d500 {
+ cell-index = <2>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11d500 0x100>;
+ clock-frequency = <0>;
+ interrupts = <37 2 0 0>;
+ };
+
+ serial3: serial@11d600 {
+ cell-index = <3>;
+ device_type = "serial";
+ compatible = "ns16550";
+ reg = <0x11d600 0x100>;
+ clock-frequency = <0>;
+ interrupts = <37 2 0 0>;
+ };
+
+ gpio0: gpio@130000 {
+ compatible = "fsl,p5020-gpio", "fsl,qoriq-gpio";
+ reg = <0x130000 0x1000>;
+ interrupts = <55 2 0 0>;
+ #gpio-cells = <2>;
+ gpio-controller;
+ };
+
+ rman: rman@1e0000 {
+ compatible = "fsl,rman";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x1e0000 0x20000>;
+ reg = <0x1e0000 0x20000>;
+ interrupts = <16 2 1 11>; /* err_irq */
+ fsl,qman-channels-id = <0x62 0x63>;
+
+ inbound-block@0 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x0 0x800>;
+ };
+ global-cfg@b00 {
+ compatible = "fsl,rman-global-cfg";
+ reg = <0xb00 0x500>;
+ };
+ inbound-block@1000 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x1000 0x800>;
+ };
+ inbound-block@2000 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x2000 0x800>;
+ };
+ inbound-block@3000 {
+ compatible = "fsl,rman-inbound-block";
+ reg = <0x3000 0x800>;
+ };
+ };
+
+ usb0: usb@210000 {
+ compatible = "fsl,p5020-usb2-mph",
+ "fsl,mpc85xx-usb2-mph", "fsl-usb2-mph";
+ reg = <0x210000 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ interrupts = <44 0x2 0 0>;
+ phy_type = "utmi";
+ port0;
+ };
+
+ usb1: usb@211000 {
+ compatible = "fsl,p5020-usb2-dr",
+ "fsl,mpc85xx-usb2-dr", "fsl-usb2-dr";
+ reg = <0x211000 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ interrupts = <45 0x2 0 0>;
+ dr_mode = "host";
+ phy_type = "utmi";
+ };
+
+ sata@220000 {
+ compatible = "fsl,p5020-sata", "fsl,pq-sata-v2";
+ reg = <0x220000 0x1000>;
+ interrupts = <68 0x2 0 0>;
+ };
+
+ sata@221000 {
+ compatible = "fsl,p5020-sata", "fsl,pq-sata-v2";
+ reg = <0x221000 0x1000>;
+ interrupts = <69 0x2 0 0>;
+ };
+
+ crypto: crypto@300000 {
+ compatible = "fsl,sec-v4.2", "fsl,sec-v4.0";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x300000 0x10000>;
+ ranges = <0 0x300000 0x10000>;
+ interrupts = <92 2 0 0>;
+
+ sec_jr0: jr@1000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x1000 0x1000>;
+ interrupts = <88 2 0 0>;
+ };
+
+ sec_jr1: jr@2000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x2000 0x1000>;
+ interrupts = <89 2 0 0>;
+ };
+
+ sec_jr2: jr@3000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x3000 0x1000>;
+ interrupts = <90 2 0 0>;
+ };
+
+ sec_jr3: jr@4000 {
+ compatible = "fsl,sec-v4.2-job-ring",
+ "fsl,sec-v4.0-job-ring";
+ reg = <0x4000 0x1000>;
+ interrupts = <91 2 0 0>;
+ };
+
+ rtic@6000 {
+ compatible = "fsl,sec-v4.2-rtic",
+ "fsl,sec-v4.0-rtic";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x6000 0x100>;
+ ranges = <0x0 0x6100 0xe00>;
+
+ rtic_a: rtic-a@0 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x00 0x20 0x100 0x80>;
+ };
+
+ rtic_b: rtic-b@20 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x20 0x20 0x200 0x80>;
+ };
+
+ rtic_c: rtic-c@40 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x40 0x20 0x300 0x80>;
+ };
+
+ rtic_d: rtic-d@60 {
+ compatible = "fsl,sec-v4.2-rtic-memory",
+ "fsl,sec-v4.0-rtic-memory";
+ reg = <0x60 0x20 0x500 0x80>;
+ };
+ };
+ };
+
+ sec_mon: sec_mon@314000 {
+ compatible = "fsl,sec-v4.2-mon", "fsl,sec-v4.0-mon";
+ reg = <0x314000 0x1000>;
+ interrupts = <93 2 0 0>;
+ };
+
+ raideng: raideng@320000 {
+ compatible = "fsl,raideng-v1.0";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x320000 0x10000>;
+ ranges = <0 0x320000 0x10000>;
+
+ raideng_jq0@1000 {
+ compatible = "fsl,raideng-v1.0-job-queue";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x1000 0x1000>;
+ ranges = <0x0 0x1000 0x1000>;
+
+ raideng_jr0: jr@0 {
+ compatible = "fsl,raideng-v1.0-job-ring", "fsl,raideng-v1.0-hp-ring";
+ reg = <0x0 0x400>;
+ interrupts = <139 2 0 0>;
+ interrupt-parent = <&mpic>;
+ };
+
+ raideng_jr1: jr@400 {
+ compatible = "fsl,raideng-v1.0-job-ring", "fsl,raideng-v1.0-lp-ring";
+ reg = <0x400 0x400>;
+ interrupts = <140 2 0 0>;
+ interrupt-parent = <&mpic>;
+ };
+ };
+
+ raideng_jq1@2000 {
+ compatible = "fsl,raideng-v1.0-job-queue";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x2000 0x1000>;
+ ranges = <0x0 0x2000 0x1000>;
+
+ raideng_jr2: jr@0 {
+ compatible = "fsl,raideng-v1.0-job-ring", "fsl,raideng-v1.0-hp-ring";
+ reg = <0x0 0x400>;
+ interrupts = <141 2 0 0>;
+ interrupt-parent = <&mpic>;
+ };
+
+ raideng_jr3: jr@400 {
+ compatible = "fsl,raideng-v1.0-job-ring", "fsl,raideng-v1.0-lp-ring";
+ reg = <0x400 0x400>;
+ interrupts = <142 2 0 0>;
+ interrupt-parent = <&mpic>;
+ };
+ };
+ };
+
+ pme: pme@316000 {
+ compatible = "fsl,pme";
+ reg = <0x316000 0x10000>;
+ /* fsl,pme-pdsr = <0x0 0x23000000 0x0 0x01000000>; */
+ /* fsl,pme-sre = <0x0 0x24000000 0x0 0x00a00000>; */
+ interrupts = <16 2 1 5>;
+ };
+
+ qman: qman@318000 {
+ compatible = "fsl,p5020-qman", "fsl,qman";
+ reg = <0x318000 0x1000>;
+ interrupts = <16 2 1 3>;
+ /* Commented out, use default allocation */
+ /* fsl,qman-fqd = <0x0 0x20000000 0x0 0x01000000>; */
+ /* fsl,qman-pfdr = <0x0 0x21000000 0x0 0x01000000>; */
+ };
+
+ bman: bman@31a000 {
+ compatible = "fsl,p5020-bman", "fsl,bman";
+ reg = <0x31a000 0x1000>;
+ interrupts = <16 2 1 2>;
+ /* Same as fsl,qman-*, use default allocation */
+ /* fsl,bman-fbpr = <0x0 0x22000000 0x0 0x01000000>; */
+ };
+
+ fman0: fman@400000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ cell-index = <0>;
+ compatible = "fsl,p5020-fman", "fsl,fman", "simple-bus";
+ ranges = <0 0x400000 0x100000>;
+ reg = <0x400000 0x100000>;
+ clock-frequency = <0>;
+ interrupts = <
+ 96 2 0 0
+ 16 2 1 1>;
+
+ cc@0 {
+ compatible = "fsl,p5020-fman-cc", "fsl,fman-cc";
+ };
+
+ parser@c7000 {
+ compatible = "fsl,p5020-fman-parser", "fsl,fman-parser";
+ reg = <0xc7000 0x1000>;
+ };
+
+ keygen@c1000 {
+ compatible = "fsl,p5020-fman-keygen", "fsl,fman-keygen";
+ reg = <0xc1000 0x1000>;
+ };
+
+ policer@c0000 {
+ compatible = "fsl,p5020-fman-policer", "fsl,fman-policer";
+ reg = <0xc0000 0x1000>;
+ };
+
+ muram@0 {
+ compatible = "fsl,p5020-fman-muram", "fsl,fman-muram";
+ reg = <0x0 0x28000>;
+ };
+
+ bmi@80000 {
+ compatible = "fsl,p5020-fman-bmi", "fsl,fman-bmi";
+ reg = <0x80000 0x400>;
+ };
+
+ qmi@80400 {
+ compatible = "fsl,p5020-fman-qmi", "fsl,fman-qmi";
+ reg = <0x80400 0x400>;
+ };
+
+ fman0_rx0: port@88000 {
+ cell-index = <0>;
+ compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x88000 0x1000>;
+ };
+ fman0_rx1: port@89000 {
+ cell-index = <1>;
+ compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x89000 0x1000>;
+ };
+ fman0_rx2: port@8a000 {
+ cell-index = <2>;
+ compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x8a000 0x1000>;
+ };
+ fman0_rx3: port@8b000 {
+ cell-index = <3>;
+ compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x8b000 0x1000>;
+ };
+ fman0_rx4: port@8c000 {
+ cell-index = <4>;
+ compatible = "fsl,p5020-fman-port-1g-rx", "fsl,fman-port-1g-rx";
+ reg = <0x8c000 0x1000>;
+ };
+ fman0_rx5: port@90000 {
+ cell-index = <0>;
+ compatible = "fsl,p5020-fman-port-10g-rx", "fsl,fman-port-10g-rx";
+ reg = <0x90000 0x1000>;
+ };
+
+ fman0_tx5: port@b0000 {
+ cell-index = <0>;
+ compatible = "fsl,p5020-fman-port-10g-tx", "fsl,fman-port-10g-tx";
+ reg = <0xb0000 0x1000>;
+ fsl,qman-channel-id = <0x40>;
+ };
+ fman0_tx0: port@a8000 {
+ cell-index = <0>;
+ compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xa8000 0x1000>;
+ fsl,qman-channel-id = <0x41>;
+ };
+ fman0_tx1: port@a9000 {
+ cell-index = <1>;
+ compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xa9000 0x1000>;
+ fsl,qman-channel-id = <0x42>;
+ };
+ fman0_tx2: port@aa000 {
+ cell-index = <2>;
+ compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xaa000 0x1000>;
+ fsl,qman-channel-id = <0x43>;
+ };
+ fman0_tx3: port@ab000 {
+ cell-index = <3>;
+ compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xab000 0x1000>;
+ fsl,qman-channel-id = <0x44>;
+ };
+ fman0_tx4: port@ac000 {
+ cell-index = <4>;
+ compatible = "fsl,p5020-fman-port-1g-tx", "fsl,fman-port-1g-tx";
+ reg = <0xac000 0x1000>;
+ fsl,qman-channel-id = <0x45>;
+ };
+
+ fman0_oh0: port@81000 {
+ cell-index = <0>;
+ compatible = "fsl,p5020-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x81000 0x1000>;
+ fsl,qman-channel-id = <0x46>;
+ };
+ fman0_oh1: port@82000 {
+ cell-index = <1>;
+ compatible = "fsl,p5020-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x82000 0x1000>;
+ fsl,qman-channel-id = <0x47>;
+ };
+ fman0_oh2: port@83000 {
+ cell-index = <2>;
+ compatible = "fsl,p5020-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x83000 0x1000>;
+ fsl,qman-channel-id = <0x48>;
+ };
+ fman0_oh3: port@84000 {
+ cell-index = <3>;
+ compatible = "fsl,p5020-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x84000 0x1000>;
+ fsl,qman-channel-id = <0x49>;
+ };
+ fman0_oh4: port@85000 {
+ cell-index = <4>;
+ compatible = "fsl,p5020-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x85000 0x1000>;
+ fsl,qman-channel-id = <0x4a>;
+ };
+ fman0_oh5: port@86000 {
+ cell-index = <5>;
+ compatible = "fsl,p5020-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x86000 0x1000>;
+ fsl,qman-channel-id = <0x4b>;
+ };
+ fman0_oh6: port@87000 {
+ cell-index = <6>;
+ compatible = "fsl,p5020-fman-port-oh", "fsl,fman-port-oh";
+ reg = <0x87000 0x1000>;
+ };
+
+ enet0: ethernet@e0000 {
+ cell-index = <0>;
+ compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe0000 0x1000>;
+ fsl,port-handles = <&fman0_rx0 &fman0_tx0>;
+ ptimer-handle = <&ptp_timer0>;
+ };
+
+ mdio0: mdio@e1120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-mdio";
+ reg = <0xe1120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet1: ethernet@e2000 {
+ cell-index = <1>;
+ compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe2000 0x1000>;
+ fsl,port-handles = <&fman0_rx1 &fman0_tx1>;
+ ptimer-handle = <&ptp_timer0>;
+ };
+
+ mdio@e3120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe3120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet2: ethernet@e4000 {
+ cell-index = <2>;
+ compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe4000 0x1000>;
+ fsl,port-handles = <&fman0_rx2 &fman0_tx2>;
+ ptimer-handle = <&ptp_timer0>;
+ };
+
+ mdio@e5120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe5120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet3: ethernet@e6000 {
+ cell-index = <3>;
+ compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe6000 0x1000>;
+ fsl,port-handles = <&fman0_rx3 &fman0_tx3>;
+ ptimer-handle = <&ptp_timer0>;
+ };
+
+ mdio@e7120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe7120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet4: ethernet@e8000 {
+ cell-index = <4>;
+ compatible = "fsl,p5020-fman-1g-mac", "fsl,fman-1g-mac";
+ reg = <0xe8000 0x1000>;
+ fsl,port-handles = <&fman0_rx4 &fman0_tx4>;
+ ptimer-handle = <&ptp_timer0>;
+ };
+
+ mdio@e9120 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-tbi";
+ reg = <0xe9120 0xee0>;
+ interrupts = <100 1 0 0>;
+ };
+
+ enet5: ethernet@f0000 {
+ cell-index = <0>;
+ compatible = "fsl,p5020-fman-10g-mac", "fsl,fman-10g-mac";
+ reg = <0xf0000 0x1000>;
+ fsl,port-handles = <&fman0_rx5 &fman0_tx5>;
+ };
+
+ mdio@f1000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "fsl,fman-xmdio";
+ reg = <0xf1000 0x1000>;
+ interrupts = <100 1 0 0>;
+ };
+
+ ptp_timer0: rtc@fe000 {
+ compatible = "fsl,fman-rtc";
+ reg = <0xfe000 0x1000>;
+ };
+ };
+ };
+
+ rapidio@ffe0c0000 {
+ compatible = "fsl,srio";
+ interrupts = <16 2 1 11>;
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ port1 {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ cell-index = <1>;
+ };
+
+ port2 {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ cell-index = <2>;
+ };
+ };
+
+ localbus@ffe124000 {
+ compatible = "fsl,p5020-rev1.0-elbc", "simple-bus", "fsl,elbc";
+ interrupts = <
+ 25 2 0 0
+ 16 2 1 19
+ >;
+ #address-cells = <2>;
+ #size-cells = <1>;
+ };
+
+ pci0: pcie@ffe200000 {
+ compatible = "fsl,p5020-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "okay";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ cell-index = <0>;
+ bus-range = <0x0 0xff>;
+ clock-frequency = <0x1fca055>;
+ fsl,msi = <&msi0>;
+ interrupts = <16 2 1 15>;
+
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 15>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 40 1 0 0
+ 0000 0 0 2 &mpic 1 1 0 0
+ 0000 0 0 3 &mpic 2 1 0 0
+ 0000 0 0 4 &mpic 3 1 0 0
+ >;
+ };
+ };
+
+ pci1: pcie@ffe201000 {
+ compatible = "fsl,p5020-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "disabled";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ cell-index = <1>;
+ bus-range = <0 0xff>;
+ clock-frequency = <0x1fca055>;
+ fsl,msi = <&msi1>;
+ interrupts = <16 2 1 14>;
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 14>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 41 1 0 0
+ 0000 0 0 2 &mpic 5 1 0 0
+ 0000 0 0 3 &mpic 6 1 0 0
+ 0000 0 0 4 &mpic 7 1 0 0
+ >;
+ };
+ };
+
+ pci2: pcie@ffe202000 {
+ compatible = "fsl,p5020-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "okay";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ cell-index = <2>;
+ bus-range = <0x0 0xff>;
+ clock-frequency = <0x1fca055>;
+ fsl,msi = <&msi2>;
+ interrupts = <16 2 1 13>;
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 13>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 42 1 0 0
+ 0000 0 0 2 &mpic 9 1 0 0
+ 0000 0 0 3 &mpic 10 1 0 0
+ 0000 0 0 4 &mpic 11 1 0 0
+ >;
+ };
+ };
+
+ pci3: pcie@ffe203000 {
+ compatible = "fsl,p5020-pcie", "fsl,qoriq-pcie-v2.2";
+ device_type = "pci";
+ status = "disabled";
+ #size-cells = <2>;
+ #address-cells = <3>;
+ cell-index = <3>;
+ bus-range = <0x0 0xff>;
+ clock-frequency = <0x1fca055>;
+ fsl,msi = <&msi2>;
+ interrupts = <16 2 1 12>;
+ pcie@0 {
+ reg = <0 0 0 0 0>;
+ #interrupt-cells = <1>;
+ #size-cells = <2>;
+ #address-cells = <3>;
+ device_type = "pci";
+ interrupts = <16 2 1 12>;
+ interrupt-map-mask = <0xf800 0 0 7>;
+ interrupt-map = <
+ /* IDSEL 0x0 */
+ 0000 0 0 1 &mpic 43 1 0 0
+ 0000 0 0 2 &mpic 0 1 0 0
+ 0000 0 0 3 &mpic 4 1 0 0
+ 0000 0 0 4 &mpic 8 1 0 0
+ >;
+ };
+ };
+};
diff --git a/sys/boot/fdt/dts/sheevaplug.dts b/sys/boot/fdt/dts/sheevaplug.dts
index cbfde6246654..3d347da19df2 100644
--- a/sys/boot/fdt/dts/sheevaplug.dts
+++ b/sys/boot/fdt/dts/sheevaplug.dts
@@ -71,48 +71,33 @@
reg = <0x0 0x20000000>; // 512M at 0x0
};
- localbus@f1000000 {
+ localbus@0 {
#address-cells = <2>;
#size-cells = <1>;
compatible = "mrvl,lbc";
+ bank-count = <3>;
/* This reflects CPU decode windows setup. */
- ranges = <0x0 0x0f 0xf9300000 0x00100000
- 0x1 0x1e 0xfa000000 0x00100000
- 0x2 0x1d 0xfa100000 0x02000000
- 0x3 0x1b 0xfc100000 0x00000400>;
+ ranges = <0x0 0x2f 0xf9300000 0x00100000>;
- nor@0,0 {
+ nand@0,0 {
#address-cells = <1>;
#size-cells = <1>;
- compatible = "cfi-flash";
+ compatible = "mrvl,nfc";
reg = <0x0 0x0 0x00100000>;
bank-width = <2>;
device-width = <1>;
- };
-
- led@1,0 {
- #address-cells = <1>;
- #size-cells = <1>;
- compatible = "led";
- reg = <0x1 0x0 0x00100000>;
- };
- nor@2,0 {
- #address-cells = <1>;
- #size-cells = <1>;
- compatible = "cfi-flash";
- reg = <0x2 0x0 0x02000000>;
- bank-width = <2>;
- device-width = <1>;
- };
+ slice@0 {
+ reg = <0x0 0x200000>;
+ label = "u-boot";
+ read-only;
+ };
- nand@3,0 {
- #address-cells = <1>;
- #size-cells = <1>;
- reg = <0x3 0x0 0x00100000>;
- bank-width = <2>;
- device-width = <1>;
+ slice@200000 {
+ reg = <0x200000 0x1fe00000>;
+ label = "root";
+ };
};
};
diff --git a/sys/boot/fdt/fdt_loader_cmd.c b/sys/boot/fdt/fdt_loader_cmd.c
index 6e713b60b050..b52d92f972a5 100644
--- a/sys/boot/fdt/fdt_loader_cmd.c
+++ b/sys/boot/fdt/fdt_loader_cmd.c
@@ -57,11 +57,17 @@ __FBSDID("$FreeBSD$");
#define STR(number) #number
#define STRINGIFY(number) STR(number)
-#define COPYOUT(s,d,l) archsw.arch_copyout((vm_offset_t)(s), d, l)
+#define COPYOUT(s,d,l) archsw.arch_copyout(s, d, l)
+#define COPYIN(s,d,l) archsw.arch_copyin(s, d, l)
#define FDT_STATIC_DTB_SYMBOL "fdt_static_dtb"
+/* Local copy of FDT */
static struct fdt_header *fdtp = NULL;
+/* Size of FDT blob */
+static size_t fdtp_size = 0;
+/* Location of FDT in kernel or module */
+static vm_offset_t fdtp_va = 0;
static int fdt_cmd_nyi(int argc, char *argv[]);
@@ -98,21 +104,19 @@ static const struct cmdtab commands[] = {
static char cwd[FDT_CWD_LEN] = "/";
static vm_offset_t
-fdt_find_static_dtb(void)
+fdt_find_static_dtb()
{
+ Elf_Dyn dyn;
Elf_Sym sym;
- vm_offset_t dyntab, esym;
+ vm_offset_t dyntab, esym, strtab, symtab, fdt_start;
uint64_t offs;
struct preloaded_file *kfp;
struct file_metadata *md;
- Elf_Sym *symtab;
- Elf_Dyn *dyn;
- char *strtab, *strp;
- int i, sym_count;
+ char *strp;
+ int sym_count;
- symtab = NULL;
- dyntab = esym = 0;
- strtab = strp = NULL;
+ symtab = strtab = dyntab = esym = 0;
+ strp = NULL;
offs = __elfN(relocation_offset);
@@ -123,28 +127,29 @@ fdt_find_static_dtb(void)
md = file_findmetadata(kfp, MODINFOMD_ESYM);
if (md == NULL)
return (0);
- COPYOUT(md->md_data, &esym, sizeof(esym));
+ bcopy(md->md_data, &esym, sizeof(esym));
+ // esym is already offset
md = file_findmetadata(kfp, MODINFOMD_DYNAMIC);
if (md == NULL)
return (0);
- COPYOUT(md->md_data, &dyntab, sizeof(dyntab));
-
+ bcopy(md->md_data, &dyntab, sizeof(dyntab));
dyntab += offs;
/* Locate STRTAB and DYNTAB */
- for (dyn = (Elf_Dyn *)dyntab; dyn->d_tag != DT_NULL; dyn++) {
- if (dyn->d_tag == DT_STRTAB) {
- strtab = (char *)(uintptr_t)(dyn->d_un.d_ptr + offs);
- continue;
- } else if (dyn->d_tag == DT_SYMTAB) {
- symtab = (Elf_Sym *)(uintptr_t)
- (dyn->d_un.d_ptr + offs);
- continue;
+ for (;;) {
+ COPYOUT(dyntab, &dyn, sizeof(dyn));
+ if (dyn.d_tag == DT_STRTAB) {
+ strtab = (vm_offset_t)(dyn.d_un.d_ptr) + offs;
+ } else if (dyn.d_tag == DT_SYMTAB) {
+ symtab = (vm_offset_t)(dyn.d_un.d_ptr) + offs;
+ } else if (dyn.d_tag == DT_NULL) {
+ break;
}
+ dyntab += sizeof(dyn);
}
- if (symtab == NULL || strtab == NULL) {
+ if (symtab == 0 || strtab == 0) {
/*
* No symtab? No strtab? That should not happen here,
* and should have been verified during __elfN(loadimage).
@@ -153,7 +158,7 @@ fdt_find_static_dtb(void)
return (0);
}
- sym_count = (int)((Elf_Sym *)esym - symtab) / sizeof(Elf_Sym);
+ sym_count = (int)(esym - symtab) / sizeof(Elf_Sym);
/*
* The most efficent way to find a symbol would be to calculate a
@@ -165,26 +170,27 @@ fdt_find_static_dtb(void)
* we are eliminating symbols type of which is not STT_NOTYPE, or(and)
* those which binding attribute is not STB_GLOBAL.
*/
- for (i = 0; i < sym_count; i++) {
- COPYOUT(symtab + i, &sym, sizeof(sym));
+ fdt_start = 0;
+ while (sym_count > 0 && fdt_start == 0) {
+ COPYOUT(symtab, &sym, sizeof(sym));
+ symtab += sizeof(sym);
+ --sym_count;
if (ELF_ST_BIND(sym.st_info) != STB_GLOBAL ||
ELF_ST_TYPE(sym.st_info) != STT_NOTYPE)
continue;
-
- strp = strdupout((vm_offset_t)(strtab + sym.st_name));
- if (strcmp(strp, FDT_STATIC_DTB_SYMBOL) == 0) {
- /* Found a match ! */
- free(strp);
- return ((vm_offset_t)(sym.st_value + offs));
- }
+ strp = strdupout(strtab + sym.st_name);
+ if (strcmp(strp, FDT_STATIC_DTB_SYMBOL) == 0)
+ fdt_start = (vm_offset_t)sym.st_value + offs;
free(strp);
}
- return (0);
+ printf("fdt_start: 0x%08jX\n", (intmax_t)fdt_start);
+ return (fdt_start);
}
static int
fdt_setup_fdtp()
{
+ struct fdt_header header;
struct preloaded_file *bfp;
int err;
@@ -193,15 +199,26 @@ fdt_setup_fdtp()
*/
bfp = file_findfile(NULL, "dtb");
if (bfp == NULL) {
- if ((fdtp = (struct fdt_header *)fdt_find_static_dtb()) == 0) {
+ if ((fdtp_va = fdt_find_static_dtb()) == 0) {
command_errmsg = "no device tree blob found!";
+ printf("%s\n", command_errmsg);
return (CMD_ERROR);
}
} else {
/* Dynamic blob has precedence over static. */
- fdtp = (struct fdt_header *)bfp->f_addr;
+ fdtp_va = bfp->f_addr;
}
+ COPYOUT(fdtp_va, &header, sizeof(header));
+ fdtp_size = fdt_totalsize(&header);
+ fdtp = malloc(fdtp_size);
+ if (fdtp == NULL) {
+ command_errmsg = "can't allocate memory for device tree copy";
+ printf("%s\n", command_errmsg);
+ return (CMD_ERROR);
+ }
+ COPYOUT(fdtp_va, fdtp, fdtp_size);
+
/*
* Validate the blob.
*/
@@ -547,7 +564,7 @@ fixup_stdout(const char *env)
/*
* Locate the blob, fix it up and return its location.
*/
-void *
+vm_offset_t
fdt_fixup(void)
{
const char *env;
@@ -563,7 +580,7 @@ fdt_fixup(void)
err = fdt_setup_fdtp();
if (err) {
sprintf(command_errbuf, "No valid device tree blob found!");
- return (NULL);
+ return (0);
}
/* Create /chosen node (if not exists) */
@@ -618,7 +635,9 @@ fdt_fixup(void)
fdt_setprop(fdtp, chosen, "fixup-applied", NULL, 0);
success:
- return (fdtp);
+ /* Overwrite the FDT with the fixed version. */
+ COPYIN(fdtp, fdtp_va, fdtp_size);
+ return (fdtp_va);
}
int
@@ -636,7 +655,7 @@ command_fdt_internal(int argc, char *argv[])
/*
* Check if uboot env vars were parsed already. If not, do it now.
*/
- if (fdt_fixup() == NULL)
+ if (fdt_fixup() == 0)
return (CMD_ERROR);
/*
@@ -1153,6 +1172,8 @@ fdt_modprop(int nodeoff, char *propname, void *value, char mode)
else
sprintf(command_errbuf,
"Could not add/modify property!\n");
+ } else {
+ COPYIN(fdtp, fdtp_va, fdtp_size);
}
return (rv);
}
@@ -1373,6 +1394,8 @@ fdt_cmd_rm(int argc, char *argv[])
if (rv) {
sprintf(command_errbuf, "could not delete node");
return (CMD_ERROR);
+ } else {
+ COPYIN(fdtp, fdtp_va, fdtp_size);
}
return (CMD_OK);
}
@@ -1403,6 +1426,8 @@ fdt_cmd_mknode(int argc, char *argv[])
sprintf(command_errbuf,
"Could not add node!\n");
return (CMD_ERROR);
+ } else {
+ COPYIN(fdtp, fdtp_va, fdtp_size);
}
return (CMD_OK);
}
diff --git a/sys/boot/forth/beastie.4th b/sys/boot/forth/beastie.4th
index 75d6e02a1b51..fa455cec2dae 100644
--- a/sys/boot/forth/beastie.4th
+++ b/sys/boot/forth/beastie.4th
@@ -1,6 +1,6 @@
\ Copyright (c) 2003 Scott Long <scottl@freebsd.org>
\ Copyright (c) 2003 Aleksander Fafula <alex@fafula.com>
-\ Copyright (c) 2006-2011 Devin Teske <devinteske@hotmail.com>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/beastie.4th.8 b/sys/boot/forth/beastie.4th.8
index 51087697e41c..814867d8703b 100644
--- a/sys/boot/forth/beastie.4th.8
+++ b/sys/boot/forth/beastie.4th.8
@@ -29,7 +29,7 @@
.Os
.Sh NAME
.Nm beastie.4th
-.Nd FreeBSD ASCII art boot module.
+.Nd FreeBSD ASCII art boot module
.Sh DESCRIPTION
The file that goes by the name of
.Nm
@@ -168,4 +168,4 @@ set of commands was written by
.An Scott Long Aq scottl@FreeBSD.org ,
.An Aleksander Fafula Aq alex@fafula.com
and
-.An Devin Teske Aq devinteske@hotmail.com .
+.An Devin Teske Aq dteske@freebsd.org .
diff --git a/sys/boot/forth/brand.4th b/sys/boot/forth/brand.4th
index bc641749adf0..367ab934e6ec 100644
--- a/sys/boot/forth/brand.4th
+++ b/sys/boot/forth/brand.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2006-2011 Devin Teske <devinteske@hotmail.com>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/brand.4th.8 b/sys/boot/forth/brand.4th.8
index 1a1cc84a7fab..10e8c55b13a2 100644
--- a/sys/boot/forth/brand.4th.8
+++ b/sys/boot/forth/brand.4th.8
@@ -29,7 +29,7 @@
.Os
.Sh NAME
.Nm brand.4th
-.Nd FreeBSD ASCII art boot module.
+.Nd FreeBSD ASCII art boot module
.Sh DESCRIPTION
The file that goes by the name of
.Nm
@@ -122,4 +122,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq devinteske@hotmail.com .
+.An Devin Teske Aq dteske@freebsd.org .
diff --git a/sys/boot/forth/check-password.4th b/sys/boot/forth/check-password.4th
index 0a1fa5d74e67..005edf18a37f 100644
--- a/sys/boot/forth/check-password.4th
+++ b/sys/boot/forth/check-password.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2006-2011 Devin Teske <devinteske@hotmail.com>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/check-password.4th.8 b/sys/boot/forth/check-password.4th.8
index ec2323ec0a83..1b1d42ef3dc9 100644
--- a/sys/boot/forth/check-password.4th.8
+++ b/sys/boot/forth/check-password.4th.8
@@ -29,7 +29,7 @@
.Os
.Sh NAME
.Nm check-password.4th
-.Nd FreeBSD password-checking boot module.
+.Nd FreeBSD password-checking boot module
.Sh DESCRIPTION
The file that goes by the name of
.Nm
@@ -120,4 +120,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq devinteske@hotmail.com .
+.An Devin Teske Aq dteske@freebsd.org .
diff --git a/sys/boot/forth/color.4th b/sys/boot/forth/color.4th
index 4d4359387869..d16e1b32db87 100644
--- a/sys/boot/forth/color.4th
+++ b/sys/boot/forth/color.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2011 Devin Teske <devinteske@hotmail.com>
+\ Copyright (c) 2011 Devin Teske <dteske@freebsd.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/color.4th.8 b/sys/boot/forth/color.4th.8
index 5a734dd8d11a..6c24989afe37 100644
--- a/sys/boot/forth/color.4th.8
+++ b/sys/boot/forth/color.4th.8
@@ -29,7 +29,7 @@
.Os
.Sh NAME
.Nm color.4th
-.Nd FreeBSD color-detection boot module.
+.Nd FreeBSD color-detection boot module
.Sh DESCRIPTION
The file that goes by the name of
.Nm
@@ -114,4 +114,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq devinteske@hotmail.com .
+.An Devin Teske Aq dteske@freebsd.org .
diff --git a/sys/boot/forth/delay.4th b/sys/boot/forth/delay.4th
index 3068e653ff41..69b8781ba4e6 100644
--- a/sys/boot/forth/delay.4th
+++ b/sys/boot/forth/delay.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2008-2011 Devin Teske <devinteske@hotmail.com>
+\ Copyright (c) 2008-2011 Devin Teske <dteske@freebsd.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/delay.4th.8 b/sys/boot/forth/delay.4th.8
index 3fe5b5b17541..1e4e71d25fa0 100644
--- a/sys/boot/forth/delay.4th.8
+++ b/sys/boot/forth/delay.4th.8
@@ -29,7 +29,7 @@
.Os
.Sh NAME
.Nm delay.4th
-.Nd FreeBSD debugging boot module.
+.Nd FreeBSD debugging boot module
.Sh DESCRIPTION
The file that goes by the name of
.Nm
@@ -123,4 +123,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq devinteske@hotmail.com .
+.An Devin Teske Aq dteske@freebsd.org .
diff --git a/sys/boot/forth/menu-commands.4th b/sys/boot/forth/menu-commands.4th
index 22994941f7b6..3f365370b158 100644
--- a/sys/boot/forth/menu-commands.4th
+++ b/sys/boot/forth/menu-commands.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2006-2011 Devin Teske <devinteske@hotmail.com>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/menu.4th b/sys/boot/forth/menu.4th
index daac6c836f84..bf203f47f05f 100644
--- a/sys/boot/forth/menu.4th
+++ b/sys/boot/forth/menu.4th
@@ -1,6 +1,6 @@
\ Copyright (c) 2003 Scott Long <scottl@freebsd.org>
\ Copyright (c) 2003 Aleksander Fafula <alex@fafula.com>
-\ Copyright (c) 2006-2011 Devin Teske <devinteske@hotmail.com>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/menu.4th.8 b/sys/boot/forth/menu.4th.8
index c3b2fcb8f46f..e94ee86b6733 100644
--- a/sys/boot/forth/menu.4th.8
+++ b/sys/boot/forth/menu.4th.8
@@ -29,7 +29,7 @@
.Os
.Sh NAME
.Nm menu.4th
-.Nd FreeBSD dynamic menu boot module.
+.Nd FreeBSD dynamic menu boot module
.Sh DESCRIPTION
The file that goes by the name of
.Nm
@@ -320,4 +320,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq devinteske@hotmail.com .
+.An Devin Teske Aq dteske@freebsd.org .
diff --git a/sys/boot/forth/shortcuts.4th b/sys/boot/forth/shortcuts.4th
index 55a369b0aa34..ff64162587f3 100644
--- a/sys/boot/forth/shortcuts.4th
+++ b/sys/boot/forth/shortcuts.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2008-2011 Devin Teske <devinteske@hotmail.com>
+\ Copyright (c) 2008-2011 Devin Teske <dteske@freebsd.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/version.4th b/sys/boot/forth/version.4th
index c59f825ef299..8fa0b9836cdc 100644
--- a/sys/boot/forth/version.4th
+++ b/sys/boot/forth/version.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2006-2011 Devin Teske <devinteske@hotmail.com>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/version.4th.8 b/sys/boot/forth/version.4th.8
index fff22682f55b..c080a5d633b3 100644
--- a/sys/boot/forth/version.4th.8
+++ b/sys/boot/forth/version.4th.8
@@ -29,7 +29,7 @@
.Os
.Sh NAME
.Nm version.4th
-.Nd FreeBSD version string boot module.
+.Nd FreeBSD version string boot module
.Sh DESCRIPTION
The file that goes by the name of
.Nm
@@ -123,4 +123,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq devinteske@hotmail.com .
+.An Devin Teske Aq dteske@freebsd.org .
diff --git a/sys/boot/i386/boot2/boot2.c b/sys/boot/i386/boot2/boot2.c
index d5ac39e63879..a0779e0f156c 100644
--- a/sys/boot/i386/boot2/boot2.c
+++ b/sys/boot/i386/boot2/boot2.c
@@ -138,7 +138,6 @@ static uint8_t ioctrl = IO_KEYBOARD;
void exit(int);
static void load(void);
static int parse(void);
-static int xfsread(ino_t, void *, size_t);
static int dskread(void *, unsigned, unsigned);
static void printf(const char *,...);
static void putchar(int);
@@ -170,7 +169,7 @@ strcmp(const char *s1, const char *s2)
#include "ufsread.c"
static inline int
-xfsread(ino_t inode, void *buf, size_t nbyte)
+xfsread(ufs_ino_t inode, void *buf, size_t nbyte)
{
if ((size_t)fsread(inode, buf, nbyte) != nbyte) {
printf("Invalid %s\n", "format");
@@ -222,7 +221,7 @@ int
main(void)
{
uint8_t autoboot;
- ino_t ino;
+ ufs_ino_t ino;
size_t nbyte;
dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base);
@@ -307,7 +306,7 @@ load(void)
static Elf32_Phdr ep[2];
static Elf32_Shdr es[2];
caddr_t p;
- ino_t ino;
+ ufs_ino_t ino;
uint32_t addr;
int i, j;
diff --git a/sys/boot/i386/gptboot/gptboot.c b/sys/boot/i386/gptboot/gptboot.c
index 8cb413619464..b9763782c08f 100644
--- a/sys/boot/i386/gptboot/gptboot.c
+++ b/sys/boot/i386/gptboot/gptboot.c
@@ -90,14 +90,13 @@ static struct bootinfo bootinfo;
void exit(int);
static void load(void);
static int parse(char *, int *);
-static int xfsread(ino_t, void *, size_t);
static int dskread(void *, daddr_t, unsigned);
static uint32_t memsize(void);
#include "ufsread.c"
static inline int
-xfsread(ino_t inode, void *buf, size_t nbyte)
+xfsread(ufs_ino_t inode, void *buf, size_t nbyte)
{
if ((size_t)fsread(inode, buf, nbyte) != nbyte) {
@@ -138,7 +137,7 @@ main(void)
{
char cmd[512], cmdtmp[512];
int autoboot, dskupdated;
- ino_t ino;
+ ufs_ino_t ino;
dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base);
v86.ctl = V86_FLAGS;
@@ -247,7 +246,7 @@ load(void)
static Elf32_Phdr ep[2];
static Elf32_Shdr es[2];
caddr_t p;
- ino_t ino;
+ ufs_ino_t ino;
uint32_t addr, x;
int fmt, i, j;
diff --git a/sys/boot/i386/libi386/biospnp.c b/sys/boot/i386/libi386/biospnp.c
index 8573e8541213..30e55fc893d0 100644
--- a/sys/boot/i386/libi386/biospnp.c
+++ b/sys/boot/i386/libi386/biospnp.c
@@ -276,6 +276,7 @@ biospnp_call(int func, const char *fmt, ...)
break;
}
}
+ va_end(ap);
/* BIOS segment last */
*(u_int16_t *)argp = pnp_Icheck->pnp_rmds;
diff --git a/sys/boot/i386/loader/Makefile b/sys/boot/i386/loader/Makefile
index e2f889258cc9..d3f01b63e308 100644
--- a/sys/boot/i386/loader/Makefile
+++ b/sys/boot/i386/loader/Makefile
@@ -53,6 +53,9 @@ CFLAGS+= -DLOADER_GZIP_SUPPORT
.if !defined(LOADER_NO_GPT_SUPPORT)
CFLAGS+= -DLOADER_GPT_SUPPORT
.endif
+.if defined(LOADER_NANDFS_SUPPORT)
+CFLAGS+= -DLOADER_NANDFS_SUPPORT
+.endif
# Always add MI sources
.PATH: ${.CURDIR}/../../common
diff --git a/sys/boot/i386/loader/conf.c b/sys/boot/i386/loader/conf.c
index 09d6a4e2fa59..dda2eac829a5 100644
--- a/sys/boot/i386/loader/conf.c
+++ b/sys/boot/i386/loader/conf.c
@@ -74,6 +74,9 @@ struct fs_ops *file_system[] = {
&ext2fs_fsops,
&dosfs_fsops,
&cd9660_fsops,
+#if defined(LOADER_NANDFS_SUPPORT)
+ &nandfs_fsops,
+#endif
&splitfs_fsops,
#if defined(LOADER_ZFS_SUPPORT)
&zfs_fsops,
diff --git a/sys/boot/pc98/boot2/boot2.c b/sys/boot/pc98/boot2/boot2.c
index 393a460f98db..95384bd67b46 100644
--- a/sys/boot/pc98/boot2/boot2.c
+++ b/sys/boot/pc98/boot2/boot2.c
@@ -140,7 +140,6 @@ static uint8_t ioctrl = IO_KEYBOARD;
void exit(int);
static void load(void);
static int parse(void);
-static int xfsread(ino_t, void *, size_t);
static int dskread(void *, unsigned, unsigned);
static void printf(const char *,...);
static void putchar(int);
@@ -172,7 +171,7 @@ strcmp(const char *s1, const char *s2)
#include "ufsread.c"
static inline int
-xfsread(ino_t inode, void *buf, size_t nbyte)
+xfsread(ufs_ino_t inode, void *buf, size_t nbyte)
{
if ((size_t)fsread(inode, buf, nbyte) != nbyte) {
printf("Invalid %s\n", "format");
@@ -351,7 +350,7 @@ main(void)
int i;
#endif
uint8_t autoboot;
- ino_t ino;
+ ufs_ino_t ino;
size_t nbyte;
dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base);
@@ -446,7 +445,7 @@ load(void)
static Elf32_Phdr ep[2];
static Elf32_Shdr es[2];
caddr_t p;
- ino_t ino;
+ ufs_ino_t ino;
uint32_t addr;
int i, j;
diff --git a/sys/boot/powerpc/boot1.chrp/boot1.c b/sys/boot/powerpc/boot1.chrp/boot1.c
index 5ad405bbb480..ff99ce65783f 100644
--- a/sys/boot/powerpc/boot1.chrp/boot1.c
+++ b/sys/boot/powerpc/boot1.chrp/boot1.c
@@ -45,7 +45,6 @@ static char bootargs[128];
static ofwh_t bootdev;
static struct fs fs;
-static ino_t inomap;
static char blkbuf[BSIZEMAX];
static unsigned int fsblks;
@@ -492,7 +491,7 @@ load(const char *fname)
Elf32_Ehdr eh;
Elf32_Phdr ph;
caddr_t p;
- ino_t ino;
+ ufs_ino_t ino;
int i;
if ((ino = lookup(fname)) == 0) {
diff --git a/sys/boot/sparc64/boot1/boot1.c b/sys/boot/sparc64/boot1/boot1.c
index 685d414d5b83..4bafe06f2cb1 100644
--- a/sys/boot/sparc64/boot1/boot1.c
+++ b/sys/boot/sparc64/boot1/boot1.c
@@ -415,7 +415,6 @@ loadzfs(void)
Elf64_Ehdr eh;
Elf64_Phdr ph;
caddr_t p;
- ino_t ino;
int i;
if (zbread((char *)&eh, 0, sizeof(eh)) != sizeof(eh)) {
@@ -459,7 +458,7 @@ load(const char *fname)
Elf64_Ehdr eh;
Elf64_Phdr ph;
caddr_t p;
- ino_t ino;
+ ufs_ino_t ino;
int i;
if ((ino = lookup(fname)) == 0) {
diff --git a/sys/boot/uboot/common/metadata.c b/sys/boot/uboot/common/metadata.c
index ae20584484e4..40accc0ef7eb 100644
--- a/sys/boot/uboot/common/metadata.c
+++ b/sys/boot/uboot/common/metadata.c
@@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$");
#include "glue.h"
#if defined(LOADER_FDT_SUPPORT)
-extern int fdt_fixup(void);
+extern vm_offset_t fdt_fixup(void);
#endif
/*
@@ -337,7 +337,7 @@ md_load(char *args, vm_offset_t *modulep)
#if defined(LOADER_FDT_SUPPORT)
/* Handle device tree blob */
dtbp = fdt_fixup();
- if (dtbp != (vm_offset_t)NULL)
+ if (dtbp != 0)
file_addmetadata(kfp, MODINFOMD_DTBP, sizeof dtbp, &dtbp);
else
pager_output("WARNING! Trying to fire up the kernel, but no "
diff --git a/sys/boot/uboot/lib/api_public.h b/sys/boot/uboot/lib/api_public.h
index b0140c5a68ce..953747972502 100644
--- a/sys/boot/uboot/lib/api_public.h
+++ b/sys/boot/uboot/lib/api_public.h
@@ -132,6 +132,7 @@ typedef unsigned long lbastart_t;
#define DT_STOR_SCSI 0x0020
#define DT_STOR_USB 0x0040
#define DT_STOR_MMC 0x0080
+#define DT_STOR_NAND 0x0100
#define DEV_STA_CLOSED 0x0000 /* invalid, closed */
#define DEV_STA_OPEN 0x0001 /* open i.e. active */
diff --git a/sys/boot/uboot/lib/copy.c b/sys/boot/uboot/lib/copy.c
index e5e462612a54..71b7a94bbb92 100644
--- a/sys/boot/uboot/lib/copy.c
+++ b/sys/boot/uboot/lib/copy.c
@@ -29,32 +29,64 @@
__FBSDID("$FreeBSD$");
#include <stand.h>
+#include <stdint.h>
+
+#include "api_public.h"
+#include "glue.h"
/*
* MD primitives supporting placement of module data
- *
- * XXX should check load address/size against memory top.
*/
+void *
+uboot_vm_translate(vm_offset_t o) {
+ struct sys_info *si;
+ static uintptr_t start = 0;
+ static size_t size = 0;
+ int i;
+
+ if (size == 0) {
+ if ((si = ub_get_sys_info()) == NULL)
+ panic("could not retrieve system info");
+
+ /* Find start/size of largest DRAM block. */
+ for (i = 0; i < si->mr_no; i++) {
+ if (si->mr[i].flags == MR_ATTR_DRAM
+ && si->mr[i].size > size) {
+ start = si->mr[i].start;
+ size = si->mr[i].size;
+ }
+ }
+
+ if (size <= 0)
+ panic("No suitable DRAM?\n");
+ /*
+ printf("Loading into memory region 0x%08X-0x%08X (%d MiB)\n",
+ start, start + size, size / 1024 / 1024);
+ */
+ }
+ if (o > size)
+ panic("Address 0x%08jX bigger than size 0x%08X\n",
+ (intmax_t)o, size);
+ return (void *)(start + o);
+}
+
ssize_t
uboot_copyin(const void *src, vm_offset_t dest, const size_t len)
{
-
- bcopy(src, (void *)dest, len);
+ bcopy(src, uboot_vm_translate(dest), len);
return (len);
}
ssize_t
uboot_copyout(const vm_offset_t src, void *dest, const size_t len)
{
-
- bcopy((void *)src, dest, len);
+ bcopy(uboot_vm_translate(src), dest, len);
return (len);
}
ssize_t
uboot_readin(const int fd, vm_offset_t dest, const size_t len)
{
-
- return (read(fd, (void *) dest, len));
+ return (read(fd, uboot_vm_translate(dest), len));
}
diff --git a/sys/boot/uboot/lib/elf_freebsd.c b/sys/boot/uboot/lib/elf_freebsd.c
index 222c31453722..bbde80c81444 100644
--- a/sys/boot/uboot/lib/elf_freebsd.c
+++ b/sys/boot/uboot/lib/elf_freebsd.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <stand.h>
#include "bootstrap.h"
+#include "libuboot.h"
extern vm_offset_t md_load(char *, vm_offset_t *);
@@ -69,6 +70,7 @@ __elfN(uboot_exec)(struct preloaded_file *fp)
vm_offset_t mdp;
Elf_Ehdr *e;
int error;
+ void (*entry)(void *);
if ((fmp = file_findmetadata(fp, MODINFOMD_ELFHDR)) == NULL)
return (EFTYPE);
@@ -78,11 +80,12 @@ __elfN(uboot_exec)(struct preloaded_file *fp)
if ((error = md_load(fp->f_args, &mdp)) != 0)
return (error);
- printf("Kernel entry at 0x%x ...\n", e->e_entry);
+ entry = uboot_vm_translate(e->e_entry);
+ printf("Kernel entry at 0x%x...\n", (unsigned)entry);
dev_cleanup();
- (*(void (*)())e->e_entry)((void *)mdp);
+ (*entry)((void *)mdp);
panic("exec returned");
}
diff --git a/sys/boot/uboot/lib/glue.c b/sys/boot/uboot/lib/glue.c
index f154dc64462a..df12a7db01e1 100644
--- a/sys/boot/uboot/lib/glue.c
+++ b/sys/boot/uboot/lib/glue.c
@@ -407,6 +407,9 @@ ub_stor_type(int type)
if (type & DT_STOR_MMC)
return ("MMC");
+ if (type & DT_STOR_NAND)
+ return ("NAND");
+
return ("Unknown");
}
diff --git a/sys/boot/uboot/lib/libuboot.h b/sys/boot/uboot/lib/libuboot.h
index e0ddb1ac5249..16f4331c0519 100644
--- a/sys/boot/uboot/lib/libuboot.h
+++ b/sys/boot/uboot/lib/libuboot.h
@@ -60,6 +60,7 @@ extern int devs_no;
extern struct netif_driver uboot_net;
extern struct devsw uboot_storage;
+void *uboot_vm_translate(vm_offset_t);
ssize_t uboot_copyin(const void *src, vm_offset_t dest, const size_t len);
ssize_t uboot_copyout(const vm_offset_t src, void *dest, const size_t len);
ssize_t uboot_readin(const int fd, vm_offset_t dest, const size_t len);
diff --git a/sys/cam/ata/ata_pmp.c b/sys/cam/ata/ata_pmp.c
index 13fc760ef2e8..3d2951cd29a4 100644
--- a/sys/cam/ata/ata_pmp.c
+++ b/sys/cam/ata/ata_pmp.c
@@ -126,8 +126,13 @@ static void pmpdone(struct cam_periph *periph,
#define PMP_DEFAULT_RETRY 1
#endif
+#ifndef PMP_DEFAULT_HIDE_SPECIAL
+#define PMP_DEFAULT_HIDE_SPECIAL 1
+#endif
+
static int pmp_retry_count = PMP_DEFAULT_RETRY;
static int pmp_default_timeout = PMP_DEFAULT_TIMEOUT;
+static int pmp_hide_special = PMP_DEFAULT_HIDE_SPECIAL;
static SYSCTL_NODE(_kern_cam, OID_AUTO, pmp, CTLFLAG_RD, 0,
"CAM Direct Access Disk driver");
@@ -137,6 +142,9 @@ TUNABLE_INT("kern.cam.pmp.retry_count", &pmp_retry_count);
SYSCTL_INT(_kern_cam_pmp, OID_AUTO, default_timeout, CTLFLAG_RW,
&pmp_default_timeout, 0, "Normal I/O timeout (in seconds)");
TUNABLE_INT("kern.cam.pmp.default_timeout", &pmp_default_timeout);
+SYSCTL_INT(_kern_cam_pmp, OID_AUTO, hide_special, CTLFLAG_RW,
+ &pmp_hide_special, 0, "Hide extra ports");
+TUNABLE_INT("kern.cam.pmp.hide_special", &pmp_hide_special);
static struct periph_driver pmpdriver =
{
@@ -583,23 +591,33 @@ pmpdone(struct cam_periph *periph, union ccb *done_ccb)
(ataio->res.lba_mid << 16) +
(ataio->res.lba_low << 8) +
ataio->res.sector_count;
- /* This PMP declares 6 ports, while only 5 of them are real.
- * Port 5 is enclosure management bridge port, which has implementation
- * problems, causing probe faults. Hide it for now. */
- if (softc->pm_pid == 0x37261095 && softc->pm_ports == 6)
- softc->pm_ports = 5;
- /* This PMP declares 7 ports, while only 5 of them are real.
- * Port 5 is some fake "Config Disk" with 640 sectors size,
- * port 6 is enclosure management bridge port.
- * Both fake ports has implementation problems, causing
- * probe faults. Hide them for now. */
- if (softc->pm_pid == 0x47261095 && softc->pm_ports == 7)
- softc->pm_ports = 5;
- /* These PMPs declare one more port then actually have,
- * for configuration purposes. Hide it for now. */
- if (softc->pm_pid == 0x57231095 || softc->pm_pid == 0x57331095 ||
- softc->pm_pid == 0x57341095 || softc->pm_pid == 0x57441095)
- softc->pm_ports--;
+ if (pmp_hide_special) {
+ /*
+ * This PMP declares 6 ports, while only 5 of them
+ * are real. Port 5 is a SEMB port, probing which
+ * causes timeouts if external SEP is not connected
+ * to PMP over I2C.
+ */
+ if (softc->pm_pid == 0x37261095 && softc->pm_ports == 6)
+ softc->pm_ports = 5;
+
+ /*
+ * This PMP declares 7 ports, while only 5 of them
+ * are real. Port 5 is a fake "Config Disk" with
+ * 640 sectors size. Port 6 is a SEMB port.
+ */
+ if (softc->pm_pid == 0x47261095 && softc->pm_ports == 7)
+ softc->pm_ports = 5;
+
+ /*
+ * These PMPs have extra configuration port.
+ */
+ if (softc->pm_pid == 0x57231095 ||
+ softc->pm_pid == 0x57331095 ||
+ softc->pm_pid == 0x57341095 ||
+ softc->pm_pid == 0x57441095)
+ softc->pm_ports--;
+ }
printf("%s%d: %d fan-out ports\n",
periph->periph_name, periph->unit_number,
softc->pm_ports);
diff --git a/sys/cam/ata/ata_xpt.c b/sys/cam/ata/ata_xpt.c
index dd8b9010519d..3a25b69c2186 100644
--- a/sys/cam/ata/ata_xpt.c
+++ b/sys/cam/ata/ata_xpt.c
@@ -65,6 +65,7 @@ struct ata_quirk_entry {
struct scsi_inquiry_pattern inq_pat;
u_int8_t quirks;
#define CAM_QUIRK_MAXTAGS 0x01
+ u_int mintags;
u_int maxtags;
};
@@ -153,7 +154,7 @@ static struct ata_quirk_entry ata_quirk_table[] =
T_ANY, SIP_MEDIA_REMOVABLE|SIP_MEDIA_FIXED,
/*vendor*/"*", /*product*/"*", /*revision*/"*"
},
- /*quirks*/0, /*maxtags*/0
+ /*quirks*/0, /*mintags*/0, /*maxtags*/0
},
};
@@ -1019,7 +1020,8 @@ noerror:
path->device->flags |= CAM_DEV_IDENTIFY_DATA_VALID;
}
if (ident_buf->satacapabilities & ATA_SUPPORT_NCQ) {
- path->device->mintags = path->device->maxtags =
+ path->device->mintags = 2;
+ path->device->maxtags =
ATA_QUEUE_LEN(ident_buf->queue) + 1;
}
ata_find_quirk(path->device);
@@ -1327,9 +1329,9 @@ done:
done_ccb->ccb_h.status = found ? CAM_REQ_CMP : CAM_REQ_CMP_ERR;
xpt_done(done_ccb);
}
+ cam_periph_invalidate(periph);
cam_release_devq(periph->path,
RELSIM_RELEASE_RUNLEVEL, 0, CAM_RL_XPT + 1, FALSE);
- cam_periph_invalidate(periph);
cam_periph_release_locked(periph);
}
@@ -1355,8 +1357,10 @@ ata_find_quirk(struct cam_ed *device)
quirk = (struct ata_quirk_entry *)match;
device->quirk = quirk;
- if (quirk->quirks & CAM_QUIRK_MAXTAGS)
- device->mintags = device->maxtags = quirk->maxtags;
+ if (quirk->quirks & CAM_QUIRK_MAXTAGS) {
+ device->mintags = quirk->mintags;
+ device->maxtags = quirk->maxtags;
+ }
}
typedef struct {
@@ -1580,12 +1584,17 @@ ata_scan_lun(struct cam_periph *periph, struct cam_path *path,
}
if ((old_periph = cam_periph_find(path, "aprobe")) != NULL) {
- probe_softc *softc;
+ if ((old_periph->flags & CAM_PERIPH_INVALID) == 0) {
+ probe_softc *softc;
- softc = (probe_softc *)old_periph->softc;
- TAILQ_INSERT_TAIL(&softc->request_ccbs, &request_ccb->ccb_h,
- periph_links.tqe);
- softc->restart = 1;
+ softc = (probe_softc *)old_periph->softc;
+ TAILQ_INSERT_TAIL(&softc->request_ccbs,
+ &request_ccb->ccb_h, periph_links.tqe);
+ softc->restart = 1;
+ } else {
+ request_ccb->ccb_h.status = CAM_REQ_CMP_ERR;
+ xpt_done(request_ccb);
+ }
} else {
status = cam_periph_alloc(proberegister, NULL, probecleanup,
probestart, "aprobe",
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index 0fac2c10e91a..338fc6edebb8 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -2905,17 +2905,13 @@ xpt_action_default(union ccb *start_ccb)
if ((crs->release_flags & RELSIM_ADJUST_OPENINGS) != 0) {
- if (INQ_DATA_TQ_ENABLED(&dev->inq_data)) {
- /* Don't ever go below one opening */
- if (crs->openings > 0) {
- xpt_dev_ccbq_resize(path,
- crs->openings);
-
- if (bootverbose) {
- xpt_print(path,
- "tagged openings now %d\n",
- crs->openings);
- }
+ /* Don't ever go below one opening */
+ if (crs->openings > 0) {
+ xpt_dev_ccbq_resize(path, crs->openings);
+ if (bootverbose) {
+ xpt_print(path,
+ "number of openings is now %d\n",
+ crs->openings);
}
}
}
@@ -4862,7 +4858,8 @@ xpt_finishconfig_task(void *context, int pending)
* attached. For any devices like that, announce the
* passthrough driver so the user will see something.
*/
- xpt_for_all_devices(xptpassannouncefunc, NULL);
+ if (!bootverbose)
+ xpt_for_all_devices(xptpassannouncefunc, NULL);
/* Release our hook so that the boot can continue. */
config_intrhook_disestablish(xsoftc.xpt_config_hook);
diff --git a/sys/cam/scsi/scsi_ch.c b/sys/cam/scsi/scsi_ch.c
index 8b04b4ffc140..a82576f44fcd 100644
--- a/sys/cam/scsi/scsi_ch.c
+++ b/sys/cam/scsi/scsi_ch.c
@@ -107,8 +107,7 @@ static const u_int32_t CH_TIMEOUT_SEND_VOLTAG = 10000;
static const u_int32_t CH_TIMEOUT_INITIALIZE_ELEMENT_STATUS = 500000;
typedef enum {
- CH_FLAG_INVALID = 0x001,
- CH_FLAG_OPEN = 0x002
+ CH_FLAG_INVALID = 0x001
} ch_flags;
typedef enum {
@@ -211,7 +210,7 @@ PERIPHDRIVER_DECLARE(ch, chdriver);
static struct cdevsw ch_cdevsw = {
.d_version = D_VERSION,
- .d_flags = 0,
+ .d_flags = D_TRACKCLOSE,
.d_open = chopen,
.d_close = chclose,
.d_ioctl = chioctl,
@@ -404,16 +403,11 @@ chopen(struct cdev *dev, int flags, int fmt, struct thread *td)
cam_periph_lock(periph);
if (softc->flags & CH_FLAG_INVALID) {
+ cam_periph_release_locked(periph);
cam_periph_unlock(periph);
- cam_periph_release(periph);
return(ENXIO);
}
- if ((softc->flags & CH_FLAG_OPEN) == 0)
- softc->flags |= CH_FLAG_OPEN;
- else
- cam_periph_release(periph);
-
if ((error = cam_periph_hold(periph, PRIBIO | PCATCH)) != 0) {
cam_periph_unlock(periph);
cam_periph_release(periph);
@@ -424,9 +418,8 @@ chopen(struct cdev *dev, int flags, int fmt, struct thread *td)
* Load information about this changer device into the softc.
*/
if ((error = chgetparams(periph)) != 0) {
- softc->flags &= ~CH_FLAG_OPEN;
+ cam_periph_release_locked(periph);
cam_periph_unlock(periph);
- cam_periph_release(periph);
return(error);
}
@@ -451,11 +444,6 @@ chclose(struct cdev *dev, int flag, int fmt, struct thread *td)
softc = (struct ch_softc *)periph->softc;
- cam_periph_lock(periph);
-
- softc->flags &= ~CH_FLAG_OPEN;
-
- cam_periph_unlock(periph);
cam_periph_release(periph);
return(0);
diff --git a/sys/cam/scsi/scsi_enc.c b/sys/cam/scsi/scsi_enc.c
index 7b53bc427db6..b4d2025c448a 100644
--- a/sys/cam/scsi/scsi_enc.c
+++ b/sys/cam/scsi/scsi_enc.c
@@ -93,7 +93,7 @@ static struct cdevsw enc_cdevsw = {
.d_close = enc_close,
.d_ioctl = enc_ioctl,
.d_name = "ses",
- .d_flags = 0,
+ .d_flags = D_TRACKCLOSE,
};
static void
@@ -136,15 +136,8 @@ enc_oninvalidate(struct cam_periph *periph)
*/
enc->enc_flags |= ENC_FLAG_SHUTDOWN;
if (enc->enc_daemon != NULL) {
- /* Signal and wait for the ses daemon to terminate. */
+ /* Signal the ses daemon to terminate. */
wakeup(enc->enc_daemon);
- /*
- * We're called with the SIM mutex held, but we're dropping
- * the update mutex here on sleep. So we have to manually
- * drop the SIM mutex.
- */
- cam_periph_sleep(enc->periph, enc->enc_daemon,
- PUSER, "thtrm", 0);
}
callout_drain(&enc->status_updater);
@@ -172,7 +165,6 @@ enc_dtor(struct cam_periph *periph)
enc->enc_boot_hold_ch.ich_func = NULL;
}
- sx_destroy(&enc->enc_cache_lock);
ENC_FREE(enc);
}
@@ -262,12 +254,12 @@ enc_open(struct cdev *dev, int flags, int fmt, struct thread *td)
error = ENXIO;
goto out;
}
-
out:
+ if (error != 0)
+ cam_periph_release_locked(periph);
+
cam_periph_unlock(periph);
- if (error) {
- cam_periph_release(periph);
- }
+
return (error);
}
@@ -275,17 +267,11 @@ static int
enc_close(struct cdev *dev, int flag, int fmt, struct thread *td)
{
struct cam_periph *periph;
- struct enc_softc *softc;
periph = (struct cam_periph *)dev->si_drv1;
if (periph == NULL)
return (ENXIO);
- cam_periph_lock(periph);
-
- softc = (struct enc_softc *)periph->softc;
-
- cam_periph_unlock(periph);
cam_periph_release(periph);
return (0);
@@ -840,6 +826,7 @@ enc_daemon(void *arg)
}
enc->enc_daemon = NULL;
cam_periph_unlock(enc->periph);
+ cam_periph_release(enc->periph);
kproc_exit(0);
}
@@ -850,6 +837,9 @@ enc_kproc_init(enc_softc_t *enc)
callout_init_mtx(&enc->status_updater, enc->periph->sim->mtx, 0);
+ if (cam_periph_acquire(enc->periph) != CAM_REQ_CMP)
+ return (ENXIO);
+
result = kproc_create(enc_daemon, enc, &enc->enc_daemon, /*flags*/0,
/*stackpgs*/0, "enc_daemon%d",
enc->periph->unit_number);
@@ -858,7 +848,8 @@ enc_kproc_init(enc_softc_t *enc)
cam_periph_lock(enc->periph);
enc->enc_vec.poll_status(enc);
cam_periph_unlock(enc->periph);
- }
+ } else
+ cam_periph_release(enc->periph);
return (result);
}
@@ -956,7 +947,7 @@ enc_ctor(struct cam_periph *periph, void *arg)
err = enc_kproc_init(enc);
if (err) {
xpt_print(periph->path,
- "error %d string enc_daemon\n", err);
+ "error %d starting enc_daemon\n", err);
goto out;
}
}
diff --git a/sys/cam/scsi/scsi_enc.h b/sys/cam/scsi/scsi_enc.h
index a5af9a57e2ba..a5345f239489 100644
--- a/sys/cam/scsi/scsi_enc.h
+++ b/sys/cam/scsi/scsi_enc.h
@@ -1,4 +1,4 @@
-/* $FreeBSD: head/sys/cam/scsi/scsi_enc.h 154504 2006-01-18 08:37:27Z mjacob $ */
+/* $FreeBSD$ */
/*-
* Copyright (c) 2000 by Matthew Jacob
* All rights reserved.
@@ -125,10 +125,10 @@ typedef struct encioc_element {
unsigned int elm_idx;
/* ID of SubEnclosure containing Element*/
- unsigned char elm_subenc_id;
+ unsigned int elm_subenc_id;
/* Element Type */
- unsigned char elm_type;
+ elm_type_t elm_type;
} encioc_element_t;
/*
diff --git a/sys/cam/scsi/scsi_enc_internal.h b/sys/cam/scsi/scsi_enc_internal.h
index e14ca7fa0b4f..865b8a143b85 100644
--- a/sys/cam/scsi/scsi_enc_internal.h
+++ b/sys/cam/scsi/scsi_enc_internal.h
@@ -22,6 +22,8 @@
* 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$
*/
/*
diff --git a/sys/cam/scsi/scsi_enc_safte.c b/sys/cam/scsi/scsi_enc_safte.c
index e4a953f1f73a..f661e511dd9c 100644
--- a/sys/cam/scsi/scsi_enc_safte.c
+++ b/sys/cam/scsi/scsi_enc_safte.c
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_ses.c 201758 2010-01-07 21:01:37Z mbr $");
+__FBSDID("$FreeBSD$");
#include <sys/param.h>
diff --git a/sys/cam/scsi/scsi_enc_ses.c b/sys/cam/scsi/scsi_enc_ses.c
index 5cf037951700..9b6fba30242a 100644
--- a/sys/cam/scsi/scsi_enc_ses.c
+++ b/sys/cam/scsi/scsi_enc_ses.c
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_ses.c 201758 2010-01-07 21:01:37Z mbr $");
+__FBSDID("$FreeBSD$");
#include <sys/param.h>
diff --git a/sys/cam/scsi/scsi_pass.c b/sys/cam/scsi/scsi_pass.c
index a124468a56dc..5b81ba8b6071 100644
--- a/sys/cam/scsi/scsi_pass.c
+++ b/sys/cam/scsi/scsi_pass.c
@@ -111,7 +111,7 @@ PERIPHDRIVER_DECLARE(pass, passdriver);
static struct cdevsw pass_cdevsw = {
.d_version = D_VERSION,
- .d_flags = 0,
+ .d_flags = D_TRACKCLOSE,
.d_open = passopen,
.d_close = passclose,
.d_ioctl = passioctl,
@@ -377,8 +377,8 @@ passopen(struct cdev *dev, int flags, int fmt, struct thread *td)
softc = (struct pass_softc *)periph->softc;
if (softc->flags & PASS_FLAG_INVALID) {
+ cam_periph_release_locked(periph);
cam_periph_unlock(periph);
- cam_periph_release(periph);
return(ENXIO);
}
@@ -387,8 +387,8 @@ passopen(struct cdev *dev, int flags, int fmt, struct thread *td)
*/
error = securelevel_gt(td->td_ucred, 1);
if (error) {
+ cam_periph_release_locked(periph);
cam_periph_unlock(periph);
- cam_periph_release(periph);
return(error);
}
@@ -396,8 +396,8 @@ passopen(struct cdev *dev, int flags, int fmt, struct thread *td)
* Only allow read-write access.
*/
if (((flags & FWRITE) == 0) || ((flags & FREAD) == 0)) {
+ cam_periph_release_locked(periph);
cam_periph_unlock(periph);
- cam_periph_release(periph);
return(EPERM);
}
@@ -406,19 +406,12 @@ passopen(struct cdev *dev, int flags, int fmt, struct thread *td)
*/
if ((flags & O_NONBLOCK) != 0) {
xpt_print(periph->path, "can't do nonblocking access\n");
+ cam_periph_release_locked(periph);
cam_periph_unlock(periph);
- cam_periph_release(periph);
return(EINVAL);
}
- if ((softc->flags & PASS_FLAG_OPEN) == 0) {
- softc->flags |= PASS_FLAG_OPEN;
- cam_periph_unlock(periph);
- } else {
- /* Device closes aren't symmertical, so fix up the refcount */
- cam_periph_unlock(periph);
- cam_periph_release(periph);
- }
+ cam_periph_unlock(periph);
return (error);
}
@@ -427,18 +420,11 @@ static int
passclose(struct cdev *dev, int flag, int fmt, struct thread *td)
{
struct cam_periph *periph;
- struct pass_softc *softc;
periph = (struct cam_periph *)dev->si_drv1;
if (periph == NULL)
return (ENXIO);
- cam_periph_lock(periph);
-
- softc = (struct pass_softc *)periph->softc;
- softc->flags &= ~PASS_FLAG_OPEN;
-
- cam_periph_unlock(periph);
cam_periph_release(periph);
return (0);
diff --git a/sys/cam/scsi/scsi_pt.c b/sys/cam/scsi/scsi_pt.c
index 1abb45ed325e..67e7ecdc6d2d 100644
--- a/sys/cam/scsi/scsi_pt.c
+++ b/sys/cam/scsi/scsi_pt.c
@@ -148,8 +148,8 @@ ptopen(struct cdev *dev, int flags, int fmt, struct thread *td)
cam_periph_lock(periph);
if (softc->flags & PT_FLAG_DEVICE_INVALID) {
+ cam_periph_release_locked(periph);
cam_periph_unlock(periph);
- cam_periph_release(periph);
return(ENXIO);
}
@@ -182,8 +182,8 @@ ptclose(struct cdev *dev, int flag, int fmt, struct thread *td)
cam_periph_lock(periph);
softc->flags &= ~PT_FLAG_OPEN;
+ cam_periph_release_locked(periph);
cam_periph_unlock(periph);
- cam_periph_release(periph);
return (0);
}
diff --git a/sys/cam/scsi/scsi_ses.h b/sys/cam/scsi/scsi_ses.h
index 5a94cacb267e..ffc5493cc9fd 100644
--- a/sys/cam/scsi/scsi_ses.h
+++ b/sys/cam/scsi/scsi_ses.h
@@ -32,107 +32,8 @@
#ifndef _SCSI_SES_H_
#define _SCSI_SES_H_
-#include <sys/cdefs.h>
-#include <sys/stdint.h>
#include <cam/scsi/scsi_all.h>
-#if 1 /* Legacy API compatibility */
-
-#define SESIOC ('s' - 040)
-#define SESIOC_GETNOBJ _IO(SESIOC, 1)
-#define SESIOC_GETOBJMAP _IO(SESIOC, 2)
-#define SESIOC_GETENCSTAT _IO(SESIOC, 3)
-#define SESIOC_SETENCSTAT _IO(SESIOC, 4)
-#define SESIOC_GETOBJSTAT _IO(SESIOC, 5)
-#define SESIOC_SETOBJSTAT _IO(SESIOC, 6)
-#define SESIOC_GETTEXT _IO(SESIOC, 7)
-#define SESIOC_INIT _IO(SESIOC, 8)
-
-typedef struct {
- unsigned int obj_id; /* Object Identifier */
- unsigned char subencid; /* SubEnclosure ID */
- unsigned char object_type; /* Object Type */
-} ses_object;
-
-/* Object Types */
-#define SESTYP_UNSPECIFIED 0x00
-#define SESTYP_DEVICE 0x01
-#define SESTYP_POWER 0x02
-#define SESTYP_FAN 0x03
-#define SESTYP_THERM 0x04
-#define SESTYP_DOORLOCK 0x05
-#define SESTYP_ALARM 0x06
-#define SESTYP_ESCC 0x07 /* Enclosure SCC */
-#define SESTYP_SCC 0x08 /* SCC */
-#define SESTYP_NVRAM 0x09
-#define SESTYP_UPS 0x0b
-#define SESTYP_DISPLAY 0x0c
-#define SESTYP_KEYPAD 0x0d
-#define SESTYP_ENCLOSURE 0x0e
-#define SESTYP_SCSIXVR 0x0f
-#define SESTYP_LANGUAGE 0x10
-#define SESTYP_COMPORT 0x11
-#define SESTYP_VOM 0x12
-#define SESTYP_AMMETER 0x13
-#define SESTYP_SCSI_TGT 0x14
-#define SESTYP_SCSI_INI 0x15
-#define SESTYP_SUBENC 0x16
-#define SESTYP_ARRAY 0x17
-#define SESTYP_SASEXPANDER 0x18
-#define SESTYP_SASCONNECTOR 0x19
-
-/*
- * Overall Enclosure Status
- */
-typedef unsigned char ses_encstat;
-
-/*
- * Object Status
- */
-typedef struct {
- unsigned int obj_id;
- unsigned char cstat[4];
-} ses_objstat;
-
-/* Summary SES Status Defines, Common Status Codes */
-#define SES_OBJSTAT_UNSUPPORTED 0
-#define SES_OBJSTAT_OK 1
-#define SES_OBJSTAT_CRIT 2
-#define SES_OBJSTAT_NONCRIT 3
-#define SES_OBJSTAT_UNRECOV 4
-#define SES_OBJSTAT_NOTINSTALLED 5
-#define SES_OBJSTAT_UNKNOWN 6
-#define SES_OBJSTAT_NOTAVAIL 7
-
-/*
- * For control pages, cstat[0] is the same for the
- * enclosure and is common across all device types.
- *
- * If SESCTL_CSEL is set, then PRDFAIL, DISABLE and RSTSWAP
- * are checked, otherwise bits that are specific to the device
- * type in the other 3 bytes of cstat or checked.
- */
-#define SESCTL_CSEL 0x80
-#define SESCTL_PRDFAIL 0x40
-#define SESCTL_DISABLE 0x20
-#define SESCTL_RSTSWAP 0x10
-
-
-/* Control bits, Device Elements, byte 2 */
-#define SESCTL_DRVLCK 0x40 /* "DO NOT REMOVE" */
-#define SESCTL_RQSINS 0x08 /* RQST INSERT */
-#define SESCTL_RQSRMV 0x04 /* RQST REMOVE */
-#define SESCTL_RQSID 0x02 /* RQST IDENT */
-/* Control bits, Device Elements, byte 3 */
-#define SESCTL_RQSFLT 0x20 /* RQST FAULT */
-#define SESCTL_DEVOFF 0x10 /* DEVICE OFF */
-
-/* Control bits, Generic, byte 3 */
-#define SESCTL_RQSTFAIL 0x40
-#define SESCTL_RQSTON 0x20
-
-#endif /* Legacy API compatibility */
-
/*========================== Field Extraction Macros =========================*/
#define MK_ENUM(S, F, SUFFIX) S ## _ ## F ## SUFFIX
@@ -191,7 +92,7 @@ ses_page_length(const struct ses_page_hdr *hdr)
* code field.
*/
return (scsi_2btoul(hdr->length)
- + __offsetof(struct ses_page_hdr, gen_code));
+ + offsetof(struct ses_page_hdr, gen_code));
}
/*============= SCSI ENC Configuration Diagnostic Page Structures ============*/
diff --git a/sys/cam/scsi/scsi_sg.c b/sys/cam/scsi/scsi_sg.c
index b8d2a4822e43..e8ccecdbf407 100644
--- a/sys/cam/scsi/scsi_sg.c
+++ b/sys/cam/scsi/scsi_sg.c
@@ -61,9 +61,8 @@ __FBSDID("$FreeBSD$");
#include <compat/linux/linux_ioctl.h>
typedef enum {
- SG_FLAG_OPEN = 0x01,
- SG_FLAG_LOCKED = 0x02,
- SG_FLAG_INVALID = 0x04
+ SG_FLAG_LOCKED = 0x01,
+ SG_FLAG_INVALID = 0x02
} sg_flags;
typedef enum {
@@ -141,7 +140,7 @@ PERIPHDRIVER_DECLARE(sg, sgdriver);
static struct cdevsw sg_cdevsw = {
.d_version = D_VERSION,
- .d_flags = D_NEEDGIANT,
+ .d_flags = D_NEEDGIANT | D_TRACKCLOSE,
.d_open = sgopen,
.d_close = sgclose,
.d_ioctl = sgioctl,
@@ -415,19 +414,12 @@ sgopen(struct cdev *dev, int flags, int fmt, struct thread *td)
softc = (struct sg_softc *)periph->softc;
if (softc->flags & SG_FLAG_INVALID) {
+ cam_periph_release_locked(periph);
cam_periph_unlock(periph);
- cam_periph_release(periph);
return (ENXIO);
}
- if ((softc->flags & SG_FLAG_OPEN) == 0) {
- softc->flags |= SG_FLAG_OPEN;
- cam_periph_unlock(periph);
- } else {
- /* Device closes aren't symmetrical, fix up the refcount. */
- cam_periph_unlock(periph);
- cam_periph_release(periph);
- }
+ cam_periph_unlock(periph);
return (error);
}
@@ -436,18 +428,11 @@ static int
sgclose(struct cdev *dev, int flag, int fmt, struct thread *td)
{
struct cam_periph *periph;
- struct sg_softc *softc;
periph = (struct cam_periph *)dev->si_drv1;
if (periph == NULL)
return (ENXIO);
- cam_periph_lock(periph);
-
- softc = (struct sg_softc *)periph->softc;
- softc->flags &= ~SG_FLAG_OPEN;
-
- cam_periph_unlock(periph);
cam_periph_release(periph);
return (0);
diff --git a/sys/cam/scsi/scsi_xpt.c b/sys/cam/scsi/scsi_xpt.c
index ce721806f18b..3805a683252c 100644
--- a/sys/cam/scsi/scsi_xpt.c
+++ b/sys/cam/scsi/scsi_xpt.c
@@ -535,6 +535,10 @@ static struct scsi_quirk_entry scsi_quirk_table[] =
CAM_QUIRK_NOLUNS, /*mintags*/0, /*maxtags*/0
},
{
+ { T_DIRECT, SIP_MEDIA_REMOVABLE, "Garmin", "*", "*" },
+ CAM_QUIRK_NORPTLUNS, /*mintags*/2, /*maxtags*/255
+ },
+ {
/* Default tagged queuing parameters for all devices */
{
T_ANY, SIP_MEDIA_REMOVABLE|SIP_MEDIA_FIXED,
@@ -1706,9 +1710,9 @@ probe_device_check:
done_ccb->ccb_h.status = CAM_REQ_CMP;
xpt_done(done_ccb);
if (TAILQ_FIRST(&softc->request_ccbs) == NULL) {
+ cam_periph_invalidate(periph);
cam_release_devq(periph->path,
RELSIM_RELEASE_RUNLEVEL, 0, CAM_RL_XPT + 1, FALSE);
- cam_periph_invalidate(periph);
cam_periph_release_locked(periph);
} else {
probeschedule(periph);
@@ -2274,11 +2278,16 @@ scsi_scan_lun(struct cam_periph *periph, struct cam_path *path,
}
if ((old_periph = cam_periph_find(path, "probe")) != NULL) {
- probe_softc *softc;
+ if ((old_periph->flags & CAM_PERIPH_INVALID) == 0) {
+ probe_softc *softc;
- softc = (probe_softc *)old_periph->softc;
- TAILQ_INSERT_TAIL(&softc->request_ccbs, &request_ccb->ccb_h,
- periph_links.tqe);
+ softc = (probe_softc *)old_periph->softc;
+ TAILQ_INSERT_TAIL(&softc->request_ccbs,
+ &request_ccb->ccb_h, periph_links.tqe);
+ } else {
+ request_ccb->ccb_h.status = CAM_REQ_CMP_ERR;
+ xpt_done(request_ccb);
+ }
} else {
status = cam_periph_alloc(proberegister, NULL, probecleanup,
probestart, "probe",
diff --git a/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c b/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c
index add5bfb3a0b9..512e0675073e 100644
--- a/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c
+++ b/sys/cddl/contrib/opensolaris/common/zfs/zpool_prop.c
@@ -21,7 +21,7 @@
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
#include <sys/zio.h>
@@ -81,6 +81,8 @@ zpool_prop_init(void)
ZFS_TYPE_POOL, "<size>", "FREE");
zprop_register_number(ZPOOL_PROP_ALLOCATED, "allocated", 0,
PROP_READONLY, ZFS_TYPE_POOL, "<size>", "ALLOC");
+ zprop_register_number(ZPOOL_PROP_EXPANDSZ, "expandsize", 0,
+ PROP_READONLY, ZFS_TYPE_POOL, "<size>", "EXPANDSZ");
zprop_register_number(ZPOOL_PROP_CAPACITY, "capacity", 0, PROP_READONLY,
ZFS_TYPE_POOL, "<size>", "CAP");
zprop_register_number(ZPOOL_PROP_GUID, "guid", 0, PROP_READONLY,
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
index 56d41083673e..475b494c00fc 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
@@ -67,7 +67,6 @@ int zfs_resilver_min_time_ms = 3000; /* min millisecs to resilver per txg */
boolean_t zfs_no_scrub_io = B_FALSE; /* set to disable scrub i/o */
boolean_t zfs_no_scrub_prefetch = B_FALSE; /* set to disable srub prefetching */
enum ddt_class zfs_scrub_ddt_class_max = DDT_CLASS_DUPLICATE;
-int dsl_scan_delay_completion = B_FALSE; /* set to delay scan completion */
#define DSL_SCAN_IS_SCRUB_RESILVER(scn) \
((scn)->scn_phys.scn_func == POOL_SCAN_SCRUB || \
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
index d421d4b0ca95..c665f34a0e0f 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
@@ -21,7 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
/*
@@ -185,15 +185,17 @@ spa_prop_add_list(nvlist_t *nvl, zpool_prop_t prop, char *strval,
static void
spa_prop_get_config(spa_t *spa, nvlist_t **nvp)
{
+ vdev_t *rvd = spa->spa_root_vdev;
uint64_t size;
uint64_t alloc;
+ uint64_t space;
uint64_t cap, version;
zprop_source_t src = ZPROP_SRC_NONE;
spa_config_dirent_t *dp;
ASSERT(MUTEX_HELD(&spa->spa_props_lock));
- if (spa->spa_root_vdev != NULL) {
+ if (rvd != NULL) {
alloc = metaslab_class_get_alloc(spa_normal_class(spa));
size = metaslab_class_get_space(spa_normal_class(spa));
spa_prop_add_list(*nvp, ZPOOL_PROP_NAME, spa_name(spa), 0, src);
@@ -201,6 +203,15 @@ spa_prop_get_config(spa_t *spa, nvlist_t **nvp)
spa_prop_add_list(*nvp, ZPOOL_PROP_ALLOCATED, NULL, alloc, src);
spa_prop_add_list(*nvp, ZPOOL_PROP_FREE, NULL,
size - alloc, src);
+
+ space = 0;
+ for (int c = 0; c < rvd->vdev_children; c++) {
+ vdev_t *tvd = rvd->vdev_child[c];
+ space += tvd->vdev_max_asize - tvd->vdev_asize;
+ }
+ spa_prop_add_list(*nvp, ZPOOL_PROP_EXPANDSZ, NULL, space,
+ src);
+
spa_prop_add_list(*nvp, ZPOOL_PROP_READONLY, NULL,
(spa_mode(spa) == FREAD), src);
@@ -211,7 +222,7 @@ spa_prop_get_config(spa_t *spa, nvlist_t **nvp)
ddt_get_pool_dedup_ratio(spa), src);
spa_prop_add_list(*nvp, ZPOOL_PROP_HEALTH, NULL,
- spa->spa_root_vdev->vdev_state, src);
+ rvd->vdev_state, src);
version = spa_version(spa);
if (version == zpool_prop_default_numeric(ZPOOL_PROP_VERSION))
@@ -2060,7 +2071,7 @@ spa_load_impl(spa_t *spa, uint64_t pool_guid, nvlist_t *config,
cmn_err(CE_WARN, "pool '%s' could not be "
"loaded as it was last accessed by "
"another system (host: %s hostid: 0x%lx). "
- "See: http://www.sun.com/msg/ZFS-8000-EY",
+ "See: http://illumos.org/msg/ZFS-8000-EY",
spa_name(spa), hostname,
(unsigned long)hostid);
return (EBADF);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c
index a8df1c704607..ef5fb6202831 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/space_map.c
@@ -173,7 +173,6 @@ again:
void
space_map_remove(space_map_t *sm, uint64_t start, uint64_t size)
{
- avl_index_t where;
space_seg_t ssearch, *ss, *newseg;
uint64_t end = start + size;
int left_over, right_over;
@@ -185,7 +184,7 @@ space_map_remove(space_map_t *sm, uint64_t start, uint64_t size)
ssearch.ss_start = start;
ssearch.ss_end = end;
- ss = avl_find(&sm->sm_root, &ssearch, &where);
+ ss = avl_find(&sm->sm_root, &ssearch, NULL);
/* Make sure we completely overlap with someone */
if (ss == NULL) {
@@ -196,7 +195,7 @@ space_map_remove(space_map_t *sm, uint64_t start, uint64_t size)
}
VERIFY3U(ss->ss_start, <=, start);
VERIFY3U(ss->ss_end, >=, end);
- VERIFY(sm->sm_space - size <= sm->sm_size);
+ VERIFY(sm->sm_space - size < sm->sm_size);
left_over = (ss->ss_start != start);
right_over = (ss->ss_end != end);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h
index 992ce0cf2760..019d2bef9af8 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h
@@ -20,6 +20,7 @@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
#ifndef _SYS_VDEV_IMPL_H
@@ -55,7 +56,8 @@ typedef struct vdev_cache_entry vdev_cache_entry_t;
/*
* Virtual device operations
*/
-typedef int vdev_open_func_t(vdev_t *vd, uint64_t *size, uint64_t *ashift);
+typedef int vdev_open_func_t(vdev_t *vd, uint64_t *size, uint64_t *max_size,
+ uint64_t *ashift);
typedef void vdev_close_func_t(vdev_t *vd);
typedef uint64_t vdev_asize_func_t(vdev_t *vd, uint64_t psize);
typedef int vdev_io_start_func_t(zio_t *zio);
@@ -118,6 +120,7 @@ struct vdev {
uint64_t vdev_orig_guid; /* orig. guid prior to remove */
uint64_t vdev_asize; /* allocatable device capacity */
uint64_t vdev_min_asize; /* min acceptable asize */
+ uint64_t vdev_max_asize; /* max acceptable asize */
uint64_t vdev_ashift; /* block alignment shift */
uint64_t vdev_state; /* see VDEV_STATE_* #defines */
uint64_t vdev_prevstate; /* used when reopening a vdev */
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c
index b5d6fda56bc0..ffcefb9ebdda 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c
@@ -22,7 +22,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
#include <sys/zfs_context.h>
@@ -67,12 +67,6 @@ static vdev_ops_t *vdev_ops_table[] = {
NULL
};
-/* maximum scrub/resilver I/O queue per leaf vdev */
-int zfs_scrub_limit = 10;
-
-TUNABLE_INT("vfs.zfs.scrub_limit", &zfs_scrub_limit);
-SYSCTL_INT(_vfs_zfs, OID_AUTO, scrub_limit, CTLFLAG_RDTUN, &zfs_scrub_limit, 0,
- "Maximum scrub/resilver I/O queue");
/*
* Given a vdev type, return the appropriate ops vector.
@@ -119,7 +113,7 @@ vdev_get_min_asize(vdev_t *vd)
vdev_t *pvd = vd->vdev_parent;
/*
- * The our parent is NULL (inactive spare or cache) or is the root,
+ * If our parent is NULL (inactive spare or cache) or is the root,
* just return our own asize.
*/
if (pvd == NULL)
@@ -748,6 +742,7 @@ vdev_add_parent(vdev_t *cvd, vdev_ops_t *ops)
mvd->vdev_asize = cvd->vdev_asize;
mvd->vdev_min_asize = cvd->vdev_min_asize;
+ mvd->vdev_max_asize = cvd->vdev_max_asize;
mvd->vdev_ashift = cvd->vdev_ashift;
mvd->vdev_state = cvd->vdev_state;
mvd->vdev_crtxg = cvd->vdev_crtxg;
@@ -1119,7 +1114,8 @@ vdev_open(vdev_t *vd)
spa_t *spa = vd->vdev_spa;
int error;
uint64_t osize = 0;
- uint64_t asize, psize;
+ uint64_t max_osize = 0;
+ uint64_t asize, max_asize, psize;
uint64_t ashift = 0;
ASSERT(vd->vdev_open_thread == curthread ||
@@ -1150,7 +1146,7 @@ vdev_open(vdev_t *vd)
return (ENXIO);
}
- error = vd->vdev_ops->vdev_op_open(vd, &osize, &ashift);
+ error = vd->vdev_ops->vdev_op_open(vd, &osize, &max_osize, &ashift);
/*
* Reset the vdev_reopening flag so that we actually close
@@ -1208,6 +1204,7 @@ vdev_open(vdev_t *vd)
}
osize = P2ALIGN(osize, (uint64_t)sizeof (vdev_label_t));
+ max_osize = P2ALIGN(max_osize, (uint64_t)sizeof (vdev_label_t));
if (vd->vdev_children == 0) {
if (osize < SPA_MINDEVSIZE) {
@@ -1217,6 +1214,8 @@ vdev_open(vdev_t *vd)
}
psize = osize;
asize = osize - (VDEV_LABEL_START_SIZE + VDEV_LABEL_END_SIZE);
+ max_asize = max_osize - (VDEV_LABEL_START_SIZE +
+ VDEV_LABEL_END_SIZE);
} else {
if (vd->vdev_parent != NULL && osize < SPA_MINDEVSIZE -
(VDEV_LABEL_START_SIZE + VDEV_LABEL_END_SIZE)) {
@@ -1226,6 +1225,7 @@ vdev_open(vdev_t *vd)
}
psize = 0;
asize = osize;
+ max_asize = max_osize;
}
vd->vdev_psize = psize;
@@ -1245,6 +1245,7 @@ vdev_open(vdev_t *vd)
* For testing purposes, a higher ashift can be requested.
*/
vd->vdev_asize = asize;
+ vd->vdev_max_asize = max_asize;
vd->vdev_ashift = MAX(ashift, vd->vdev_ashift);
} else {
/*
@@ -1255,6 +1256,7 @@ vdev_open(vdev_t *vd)
VDEV_AUX_BAD_LABEL);
return (EINVAL);
}
+ vd->vdev_max_asize = max_asize;
}
/*
@@ -2478,6 +2480,7 @@ vdev_get_stats(vdev_t *vd, vdev_stat_t *vs)
vs->vs_rsize = vdev_get_min_asize(vd);
if (vd->vdev_ops->vdev_op_leaf)
vs->vs_rsize += VDEV_LABEL_START_SIZE + VDEV_LABEL_END_SIZE;
+ vs->vs_esize = vd->vdev_max_asize - vd->vdev_asize;
mutex_exit(&vd->vdev_stat_lock);
/*
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c
index d7417736b4ee..759f0f84f1c8 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c
@@ -20,6 +20,7 @@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
#include <sys/zfs_context.h>
@@ -30,6 +31,7 @@
#include <sys/fs/zfs.h>
#include <sys/zio.h>
#include <sys/sunldi.h>
+#include <sys/efi_partition.h>
#include <sys/fm/fs/zfs.h>
/*
@@ -102,8 +104,39 @@ vdev_disk_rele(vdev_t *vd)
}
}
+static uint64_t
+vdev_disk_get_space(vdev_t *vd, uint64_t capacity, uint_t blksz)
+{
+ ASSERT(vd->vdev_wholedisk);
+
+ vdev_disk_t *dvd = vd->vdev_tsd;
+ dk_efi_t dk_ioc;
+ efi_gpt_t *efi;
+ uint64_t avail_space = 0;
+ int efisize = EFI_LABEL_SIZE * 2;
+
+ dk_ioc.dki_data = kmem_alloc(efisize, KM_SLEEP);
+ dk_ioc.dki_lba = 1;
+ dk_ioc.dki_length = efisize;
+ dk_ioc.dki_data_64 = (uint64_t)(uintptr_t)dk_ioc.dki_data;
+ efi = dk_ioc.dki_data;
+
+ if (ldi_ioctl(dvd->vd_lh, DKIOCGETEFI, (intptr_t)&dk_ioc,
+ FKIOCTL, kcred, NULL) == 0) {
+ uint64_t efi_altern_lba = LE_64(efi->efi_gpt_AlternateLBA);
+
+ zfs_dbgmsg("vdev %s, capacity %llu, altern lba %llu",
+ vd->vdev_path, capacity, efi_altern_lba);
+ if (capacity > efi_altern_lba)
+ avail_space = (capacity - efi_altern_lba) * blksz;
+ }
+ kmem_free(dk_ioc.dki_data, efisize);
+ return (avail_space);
+}
+
static int
-vdev_disk_open(vdev_t *vd, uint64_t *psize, uint64_t *ashift)
+vdev_disk_open(vdev_t *vd, uint64_t *psize, uint64_t *max_psize,
+ uint64_t *ashift)
{
spa_t *spa = vd->vdev_spa;
vdev_disk_t *dvd;
@@ -274,16 +307,6 @@ skip_open:
}
/*
- * If we own the whole disk, try to enable disk write caching.
- * We ignore errors because it's OK if we can't do it.
- */
- if (vd->vdev_wholedisk == 1) {
- int wce = 1;
- (void) ldi_ioctl(dvd->vd_lh, DKIOCSETWCE, (intptr_t)&wce,
- FKIOCTL, kcred, NULL);
- }
-
- /*
* Determine the device's minimum transfer size.
* If the ioctl isn't supported, assume DEV_BSIZE.
*/
@@ -293,6 +316,25 @@ skip_open:
*ashift = highbit(MAX(dkmext.dki_pbsize, SPA_MINBLOCKSIZE)) - 1;
+ if (vd->vdev_wholedisk == 1) {
+ uint64_t capacity = dkmext.dki_capacity - 1;
+ uint64_t blksz = dkmext.dki_lbsize;
+ int wce = 1;
+
+ /*
+ * If we own the whole disk, try to enable disk write caching.
+ * We ignore errors because it's OK if we can't do it.
+ */
+ (void) ldi_ioctl(dvd->vd_lh, DKIOCSETWCE, (intptr_t)&wce,
+ FKIOCTL, kcred, NULL);
+
+ *max_psize = *psize + vdev_disk_get_space(vd, capacity, blksz);
+ zfs_dbgmsg("capacity change: vdev %s, psize %llu, "
+ "max_psize %llu", vd->vdev_path, *psize, *max_psize);
+ } else {
+ *max_psize = *psize;
+ }
+
/*
* Clear the nowritecache bit, so that on a vdev_reopen() we will
* try again.
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c
index 832ffdf566e2..f03a9234cac2 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_file.c
@@ -20,6 +20,7 @@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
#include <sys/zfs_context.h>
@@ -47,7 +48,8 @@ vdev_file_rele(vdev_t *vd)
}
static int
-vdev_file_open(vdev_t *vd, uint64_t *psize, uint64_t *ashift)
+vdev_file_open(vdev_t *vd, uint64_t *psize, uint64_t *max_psize,
+ uint64_t *ashift)
{
vdev_file_t *vf;
vnode_t *vp;
@@ -125,7 +127,7 @@ skip_open:
return (error);
}
- *psize = vattr.va_size;
+ *max_psize = *psize = vattr.va_size;
*ashift = SPA_MINBLOCKSHIFT;
return (0);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
index 6793391cbbe3..d42b0c18bde5 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
@@ -21,6 +21,8 @@
/*
* Copyright (c) 2006 Pawel Jakub Dawidek <pjd@FreeBSD.org>
* All rights reserved.
+ *
+ * Portions Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org>
*/
#include <sys/zfs_context.h>
@@ -489,7 +491,8 @@ vdev_geom_open_by_path(vdev_t *vd, int check_guid)
}
static int
-vdev_geom_open(vdev_t *vd, uint64_t *psize, uint64_t *ashift)
+vdev_geom_open(vdev_t *vd, uint64_t *psize, uint64_t *max_psize,
+ uint64_t *ashift)
{
struct g_provider *pp;
struct g_consumer *cp;
@@ -585,7 +588,7 @@ vdev_geom_open(vdev_t *vd, uint64_t *psize, uint64_t *ashift)
/*
* Determine the actual size of the device.
*/
- *psize = pp->mediasize;
+ *max_psize = *psize = pp->mediasize;
/*
* Determine the device's minimum transfer size.
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_mirror.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_mirror.c
index 698c0275d34e..a28ca3e3965b 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_mirror.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_mirror.c
@@ -23,6 +23,10 @@
* Use is subject to license terms.
*/
+/*
+ * Copyright (c) 2012 by Delphix. All rights reserved.
+ */
+
#include <sys/zfs_context.h>
#include <sys/spa.h>
#include <sys/vdev_impl.h>
@@ -127,7 +131,8 @@ vdev_mirror_map_alloc(zio_t *zio)
}
static int
-vdev_mirror_open(vdev_t *vd, uint64_t *asize, uint64_t *ashift)
+vdev_mirror_open(vdev_t *vd, uint64_t *asize, uint64_t *max_asize,
+ uint64_t *ashift)
{
int numerrors = 0;
int lasterror = 0;
@@ -149,6 +154,7 @@ vdev_mirror_open(vdev_t *vd, uint64_t *asize, uint64_t *ashift)
}
*asize = MIN(*asize - 1, cvd->vdev_asize - 1) + 1;
+ *max_asize = MIN(*max_asize - 1, cvd->vdev_max_asize - 1) + 1;
*ashift = MAX(*ashift, cvd->vdev_ashift);
}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_missing.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_missing.c
index 6a5588d59213..3bd8c90e04c7 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_missing.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_missing.c
@@ -24,6 +24,10 @@
*/
/*
+ * Copyright (c) 2012 by Delphix. All rights reserved.
+ */
+
+/*
* The 'missing' vdev is a special vdev type used only during import. It
* signifies a placeholder in the root vdev for some vdev that we know is
* missing. We pass it down to the kernel to allow the rest of the
@@ -40,7 +44,8 @@
/* ARGSUSED */
static int
-vdev_missing_open(vdev_t *vd, uint64_t *psize, uint64_t *ashift)
+vdev_missing_open(vdev_t *vd, uint64_t *psize, uint64_t *max_psize,
+ uint64_t *ashift)
{
/*
* Really this should just fail. But then the root vdev will be in the
@@ -49,6 +54,7 @@ vdev_missing_open(vdev_t *vd, uint64_t *psize, uint64_t *ashift)
* will fail the GUID sum check before ever trying to open the pool.
*/
*psize = 0;
+ *max_psize = 0;
*ashift = 0;
return (0);
}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c
index 4b0f5602c1d4..030ea4293002 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c
@@ -21,6 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
*/
#include <sys/zfs_context.h>
@@ -1441,7 +1442,8 @@ vdev_raidz_reconstruct(raidz_map_t *rm, int *t, int nt)
}
static int
-vdev_raidz_open(vdev_t *vd, uint64_t *asize, uint64_t *ashift)
+vdev_raidz_open(vdev_t *vd, uint64_t *asize, uint64_t *max_asize,
+ uint64_t *ashift)
{
vdev_t *cvd;
uint64_t nparity = vd->vdev_nparity;
@@ -1469,10 +1471,12 @@ vdev_raidz_open(vdev_t *vd, uint64_t *asize, uint64_t *ashift)
}
*asize = MIN(*asize - 1, cvd->vdev_asize - 1) + 1;
+ *max_asize = MIN(*max_asize - 1, cvd->vdev_max_asize - 1) + 1;
*ashift = MAX(*ashift, cvd->vdev_ashift);
}
*asize *= vd->vdev_children;
+ *max_asize *= vd->vdev_children;
if (numerrors > nparity) {
vd->vdev_stat.vs_aux = VDEV_AUX_NO_REPLICAS;
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_root.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_root.c
index 879f78f3a5b3..1abc79d330bb 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_root.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_root.c
@@ -23,6 +23,10 @@
* Use is subject to license terms.
*/
+/*
+ * Copyright (c) 2012 by Delphix. All rights reserved.
+ */
+
#include <sys/zfs_context.h>
#include <sys/spa.h>
#include <sys/vdev_impl.h>
@@ -50,7 +54,8 @@ too_many_errors(vdev_t *vd, int numerrors)
}
static int
-vdev_root_open(vdev_t *vd, uint64_t *asize, uint64_t *ashift)
+vdev_root_open(vdev_t *vd, uint64_t *asize, uint64_t *max_asize,
+ uint64_t *ashift)
{
int lasterror = 0;
int numerrors = 0;
@@ -77,6 +82,7 @@ vdev_root_open(vdev_t *vd, uint64_t *asize, uint64_t *ashift)
}
*asize = 0;
+ *max_asize = 0;
*ashift = 0;
return (0);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
index 8f53ded4d2b8..7c75aca5f2bc 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
@@ -24,7 +24,7 @@
* All rights reserved.
* Portions Copyright 2011 Martin Matuska <mm@FreeBSD.org>
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
* Copyright (c) 2012, Joyent, Inc. All rights reserved.
*/
@@ -4125,6 +4125,22 @@ zfs_ioc_clear(zfs_cmd_t *zc)
return (error);
}
+static int
+zfs_ioc_pool_reopen(zfs_cmd_t *zc)
+{
+ spa_t *spa;
+ int error;
+
+ error = spa_open(zc->zc_name, &spa, FTAG);
+ if (error)
+ return (error);
+
+ spa_vdev_state_enter(spa, SCL_NONE);
+ vdev_reopen(spa->spa_root_vdev);
+ (void) spa_vdev_state_exit(spa, NULL, 0);
+ spa_close(spa, FTAG);
+ return (0);
+}
/*
* inputs:
* zc_name name of filesystem
@@ -4994,7 +5010,9 @@ static zfs_ioc_vec_t zfs_ioc_vec[] = {
{ zfs_ioc_space_snaps, zfs_secpolicy_read, DATASET_NAME, B_FALSE,
B_TRUE },
{ zfs_ioc_send_progress, zfs_secpolicy_read, DATASET_NAME, B_FALSE,
- B_FALSE }
+ B_FALSE },
+ { zfs_ioc_pool_reopen, zfs_secpolicy_config, POOL_NAME, B_TRUE,
+ B_TRUE },
};
int
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
index de24310994a2..8ff15ec2e139 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
@@ -838,6 +838,12 @@ zfs_write(vnode_t *vp, uio_t *uio, int ioflag, cred_t *cr, caller_context_t *ct)
rl = zfs_range_lock(zp, woff, n, RL_WRITER);
}
+ if (vn_rlimit_fsize(vp, uio, uio->uio_td)) {
+ zfs_range_unlock(rl);
+ ZFS_EXIT(zfsvfs);
+ return (EFBIG);
+ }
+
if (woff >= limit) {
zfs_range_unlock(rl);
ZFS_EXIT(zfsvfs);
@@ -5696,9 +5702,6 @@ zfs_freebsd_write(ap)
} */ *ap;
{
- if (vn_rlimit_fsize(ap->a_vp, ap->a_uio, ap->a_uio->uio_td))
- return (EFBIG);
-
return (zfs_write(ap->a_vp, ap->a_uio, ioflags(ap->a_ioflag),
ap->a_cred, NULL));
}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
index ca98fcaa5d21..1b23dc2be25a 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
@@ -21,7 +21,7 @@
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2012, Joyent, Inc. All rights reserved.
* Copyright (c) 2012, Martin Matuska <mm@FreeBSD.org>. All rights reserved.
@@ -171,6 +171,7 @@ typedef enum {
ZPOOL_PROP_ALLOCATED,
ZPOOL_PROP_READONLY,
ZPOOL_PROP_COMMENT,
+ ZPOOL_PROP_EXPANDSZ,
ZPOOL_NUM_PROPS
} zpool_prop_t;
@@ -675,6 +676,7 @@ typedef struct vdev_stat {
uint64_t vs_space; /* total capacity */
uint64_t vs_dspace; /* deflated capacity */
uint64_t vs_rsize; /* replaceable dev size */
+ uint64_t vs_esize; /* expandable dev size */
uint64_t vs_ops[ZIO_TYPES]; /* operation count */
uint64_t vs_bytes[ZIO_TYPES]; /* bytes read/written */
uint64_t vs_read_errors; /* read errors */
@@ -797,6 +799,7 @@ typedef unsigned long zfs_ioc_t;
#define ZFS_IOC_SPACE_WRITTEN _IOWR('Z', 61, struct zfs_cmd)
#define ZFS_IOC_SPACE_SNAPS _IOWR('Z', 62, struct zfs_cmd)
#define ZFS_IOC_SEND_PROGRESS _IOWR('Z', 63, struct zfs_cmd)
+#define ZFS_IOC_POOL_REOPEN _IOWR('Z', 64, struct zfs_cmd)
/*
* Internal SPA load state. Used by FMA diagnosis engine.
diff --git a/sys/compat/freebsd32/freebsd32.h b/sys/compat/freebsd32/freebsd32.h
index e263f0d9d4ea..fccdef039f69 100644
--- a/sys/compat/freebsd32/freebsd32.h
+++ b/sys/compat/freebsd32/freebsd32.h
@@ -306,7 +306,7 @@ struct kinfo_proc32 {
u_int ki_estcpu;
u_int ki_slptime;
u_int ki_swtime;
- int ki_spareint1;
+ u_int ki_cow;
u_int64_t ki_runtime;
struct timeval32 ki_start;
struct timeval32 ki_childtime;
diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c
index 81568ae19e5c..ce8bd7ac2a73 100644
--- a/sys/compat/freebsd32/freebsd32_misc.c
+++ b/sys/compat/freebsd32/freebsd32_misc.c
@@ -1528,7 +1528,8 @@ freebsd32_getdirentries(struct thread *td,
int32_t base32;
int error;
- error = kern_getdirentries(td, uap->fd, uap->buf, uap->count, &base);
+ error = kern_getdirentries(td, uap->fd, uap->buf, uap->count, &base,
+ NULL, UIO_USERSPACE);
if (error)
return (error);
if (uap->basep != NULL) {
diff --git a/sys/compat/freebsd32/freebsd32_proto.h b/sys/compat/freebsd32/freebsd32_proto.h
index 48c6f2e0a9d3..2bd582c53fab 100644
--- a/sys/compat/freebsd32/freebsd32_proto.h
+++ b/sys/compat/freebsd32/freebsd32_proto.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 227776 2011-11-21 01:26:10Z lstewart
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
#ifndef _FREEBSD32_SYSPROTO_H_
@@ -54,11 +54,11 @@ struct freebsd32_sendmsg_args {
};
struct freebsd32_recvfrom_args {
char s_l_[PADL_(int)]; int s; char s_r_[PADR_(int)];
- char buf_l_[PADL_(u_int32_t)]; u_int32_t buf; char buf_r_[PADR_(u_int32_t)];
- char len_l_[PADL_(u_int32_t)]; u_int32_t len; char len_r_[PADR_(u_int32_t)];
+ char buf_l_[PADL_(uint32_t)]; uint32_t buf; char buf_r_[PADR_(uint32_t)];
+ char len_l_[PADL_(uint32_t)]; uint32_t len; char len_r_[PADR_(uint32_t)];
char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
- char from_l_[PADL_(u_int32_t)]; u_int32_t from; char from_r_[PADR_(u_int32_t)];
- char fromlenaddr_l_[PADL_(u_int32_t)]; u_int32_t fromlenaddr; char fromlenaddr_r_[PADR_(u_int32_t)];
+ char from_l_[PADL_(uint32_t)]; uint32_t from; char from_r_[PADR_(uint32_t)];
+ char fromlenaddr_l_[PADL_(uint32_t)]; uint32_t fromlenaddr; char fromlenaddr_r_[PADR_(uint32_t)];
};
struct ofreebsd32_sigpending_args {
register_t dummy;
@@ -74,8 +74,8 @@ struct freebsd32_ioctl_args {
};
struct freebsd32_execve_args {
char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)];
- char argv_l_[PADL_(u_int32_t *)]; u_int32_t * argv; char argv_r_[PADR_(u_int32_t *)];
- char envv_l_[PADL_(u_int32_t *)]; u_int32_t * envv; char envv_r_[PADR_(u_int32_t *)];
+ char argv_l_[PADL_(uint32_t *)]; uint32_t * argv; char argv_r_[PADR_(uint32_t *)];
+ char envv_l_[PADL_(uint32_t *)]; uint32_t * envv; char envv_r_[PADR_(uint32_t *)];
};
struct freebsd32_mprotect_args {
char addr_l_[PADL_(const void *)]; const void * addr; char addr_r_[PADR_(const void *)];
@@ -175,9 +175,9 @@ struct freebsd32_sysctl_args {
char name_l_[PADL_(int *)]; int * name; char name_r_[PADR_(int *)];
char namelen_l_[PADL_(u_int)]; u_int namelen; char namelen_r_[PADR_(u_int)];
char old_l_[PADL_(void *)]; void * old; char old_r_[PADR_(void *)];
- char oldlenp_l_[PADL_(u_int32_t *)]; u_int32_t * oldlenp; char oldlenp_r_[PADR_(u_int32_t *)];
+ char oldlenp_l_[PADL_(uint32_t *)]; uint32_t * oldlenp; char oldlenp_r_[PADR_(uint32_t *)];
char new_l_[PADL_(void *)]; void * new; char new_r_[PADR_(void *)];
- char newlen_l_[PADL_(u_int32_t)]; u_int32_t newlen; char newlen_r_[PADR_(u_int32_t)];
+ char newlen_l_[PADL_(uint32_t)]; uint32_t newlen; char newlen_r_[PADR_(uint32_t)];
};
struct freebsd32_futimes_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
@@ -232,15 +232,15 @@ struct freebsd32_preadv_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char iovp_l_[PADL_(struct iovec32 *)]; struct iovec32 * iovp; char iovp_r_[PADR_(struct iovec32 *)];
char iovcnt_l_[PADL_(u_int)]; u_int iovcnt; char iovcnt_r_[PADR_(u_int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
struct freebsd32_pwritev_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char iovp_l_[PADL_(struct iovec32 *)]; struct iovec32 * iovp; char iovp_r_[PADR_(struct iovec32 *)];
char iovcnt_l_[PADL_(u_int)]; u_int iovcnt; char iovcnt_r_[PADR_(u_int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
struct freebsd32_modstat_args {
char modid_l_[PADL_(int)]; int modid; char modid_r_[PADR_(int)];
@@ -309,8 +309,8 @@ struct freebsd32_nmount_args {
struct freebsd32_sendfile_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char s_l_[PADL_(int)]; int s; char s_r_[PADR_(int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
char nbytes_l_[PADL_(size_t)]; size_t nbytes; char nbytes_r_[PADR_(size_t)];
char hdtr_l_[PADL_(struct sf_hdtr32 *)]; struct sf_hdtr32 * hdtr; char hdtr_r_[PADR_(struct sf_hdtr32 *)];
char sbytes_l_[PADL_(off_t *)]; off_t * sbytes; char sbytes_r_[PADR_(off_t *)];
@@ -404,16 +404,16 @@ struct freebsd32_pread_args {
char buf_l_[PADL_(void *)]; void * buf; char buf_r_[PADR_(void *)];
char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
struct freebsd32_pwrite_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char buf_l_[PADL_(const void *)]; const void * buf; char buf_r_[PADR_(const void *)];
char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
struct freebsd32_mmap_args {
char addr_l_[PADL_(caddr_t)]; caddr_t addr; char addr_r_[PADR_(caddr_t)];
@@ -422,42 +422,42 @@ struct freebsd32_mmap_args {
char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char pos1_l_[PADL_(u_int32_t)]; u_int32_t pos1; char pos1_r_[PADR_(u_int32_t)];
- char pos2_l_[PADL_(u_int32_t)]; u_int32_t pos2; char pos2_r_[PADR_(u_int32_t)];
+ char pos1_l_[PADL_(uint32_t)]; uint32_t pos1; char pos1_r_[PADR_(uint32_t)];
+ char pos2_l_[PADL_(uint32_t)]; uint32_t pos2; char pos2_r_[PADR_(uint32_t)];
};
struct freebsd32_lseek_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
};
struct freebsd32_truncate_args {
char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char length1_l_[PADL_(u_int32_t)]; u_int32_t length1; char length1_r_[PADR_(u_int32_t)];
- char length2_l_[PADL_(u_int32_t)]; u_int32_t length2; char length2_r_[PADR_(u_int32_t)];
+ char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
+ char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
};
struct freebsd32_ftruncate_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char length1_l_[PADL_(u_int32_t)]; u_int32_t length1; char length1_r_[PADR_(u_int32_t)];
- char length2_l_[PADL_(u_int32_t)]; u_int32_t length2; char length2_r_[PADR_(u_int32_t)];
+ char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
+ char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
};
#else
struct freebsd32_pread_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char buf_l_[PADL_(void *)]; void * buf; char buf_r_[PADR_(void *)];
char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
struct freebsd32_pwrite_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char buf_l_[PADL_(const void *)]; const void * buf; char buf_r_[PADR_(const void *)];
char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
struct freebsd32_mmap_args {
char addr_l_[PADL_(caddr_t)]; caddr_t addr; char addr_r_[PADR_(caddr_t)];
@@ -465,69 +465,69 @@ struct freebsd32_mmap_args {
char prot_l_[PADL_(int)]; int prot; char prot_r_[PADR_(int)];
char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char pos1_l_[PADL_(u_int32_t)]; u_int32_t pos1; char pos1_r_[PADR_(u_int32_t)];
- char pos2_l_[PADL_(u_int32_t)]; u_int32_t pos2; char pos2_r_[PADR_(u_int32_t)];
+ char pos1_l_[PADL_(uint32_t)]; uint32_t pos1; char pos1_r_[PADR_(uint32_t)];
+ char pos2_l_[PADL_(uint32_t)]; uint32_t pos2; char pos2_r_[PADR_(uint32_t)];
};
struct freebsd32_lseek_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
};
struct freebsd32_truncate_args {
char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
- char length1_l_[PADL_(u_int32_t)]; u_int32_t length1; char length1_r_[PADR_(u_int32_t)];
- char length2_l_[PADL_(u_int32_t)]; u_int32_t length2; char length2_r_[PADR_(u_int32_t)];
+ char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
+ char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
};
struct freebsd32_ftruncate_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char length1_l_[PADL_(u_int32_t)]; u_int32_t length1; char length1_r_[PADR_(u_int32_t)];
- char length2_l_[PADL_(u_int32_t)]; u_int32_t length2; char length2_r_[PADR_(u_int32_t)];
+ char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
+ char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
};
#endif
#ifdef PAD64_REQUIRED
struct freebsd32_cpuset_setid_args {
char which_l_[PADL_(cpuwhich_t)]; cpuwhich_t which; char which_r_[PADR_(cpuwhich_t)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char id1_l_[PADL_(u_int32_t)]; u_int32_t id1; char id1_r_[PADR_(u_int32_t)];
- char id2_l_[PADL_(u_int32_t)]; u_int32_t id2; char id2_r_[PADR_(u_int32_t)];
+ char id1_l_[PADL_(uint32_t)]; uint32_t id1; char id1_r_[PADR_(uint32_t)];
+ char id2_l_[PADL_(uint32_t)]; uint32_t id2; char id2_r_[PADR_(uint32_t)];
char setid_l_[PADL_(cpusetid_t)]; cpusetid_t setid; char setid_r_[PADR_(cpusetid_t)];
};
#else
struct freebsd32_cpuset_setid_args {
char which_l_[PADL_(cpuwhich_t)]; cpuwhich_t which; char which_r_[PADR_(cpuwhich_t)];
- char id1_l_[PADL_(u_int32_t)]; u_int32_t id1; char id1_r_[PADR_(u_int32_t)];
- char id2_l_[PADL_(u_int32_t)]; u_int32_t id2; char id2_r_[PADR_(u_int32_t)];
+ char id1_l_[PADL_(uint32_t)]; uint32_t id1; char id1_r_[PADR_(uint32_t)];
+ char id2_l_[PADL_(uint32_t)]; uint32_t id2; char id2_r_[PADR_(uint32_t)];
char setid_l_[PADL_(cpusetid_t)]; cpusetid_t setid; char setid_r_[PADR_(cpusetid_t)];
};
#endif
struct freebsd32_cpuset_getid_args {
char level_l_[PADL_(cpulevel_t)]; cpulevel_t level; char level_r_[PADR_(cpulevel_t)];
char which_l_[PADL_(cpuwhich_t)]; cpuwhich_t which; char which_r_[PADR_(cpuwhich_t)];
- char id1_l_[PADL_(u_int32_t)]; u_int32_t id1; char id1_r_[PADR_(u_int32_t)];
- char id2_l_[PADL_(u_int32_t)]; u_int32_t id2; char id2_r_[PADR_(u_int32_t)];
+ char id1_l_[PADL_(uint32_t)]; uint32_t id1; char id1_r_[PADR_(uint32_t)];
+ char id2_l_[PADL_(uint32_t)]; uint32_t id2; char id2_r_[PADR_(uint32_t)];
char setid_l_[PADL_(cpusetid_t *)]; cpusetid_t * setid; char setid_r_[PADR_(cpusetid_t *)];
};
struct freebsd32_cpuset_getaffinity_args {
char level_l_[PADL_(cpulevel_t)]; cpulevel_t level; char level_r_[PADR_(cpulevel_t)];
char which_l_[PADL_(cpuwhich_t)]; cpuwhich_t which; char which_r_[PADR_(cpuwhich_t)];
- char id1_l_[PADL_(u_int32_t)]; u_int32_t id1; char id1_r_[PADR_(u_int32_t)];
- char id2_l_[PADL_(u_int32_t)]; u_int32_t id2; char id2_r_[PADR_(u_int32_t)];
+ char id1_l_[PADL_(uint32_t)]; uint32_t id1; char id1_r_[PADR_(uint32_t)];
+ char id2_l_[PADL_(uint32_t)]; uint32_t id2; char id2_r_[PADR_(uint32_t)];
char cpusetsize_l_[PADL_(size_t)]; size_t cpusetsize; char cpusetsize_r_[PADR_(size_t)];
char mask_l_[PADL_(cpuset_t *)]; cpuset_t * mask; char mask_r_[PADR_(cpuset_t *)];
};
struct freebsd32_cpuset_setaffinity_args {
char level_l_[PADL_(cpulevel_t)]; cpulevel_t level; char level_r_[PADR_(cpulevel_t)];
char which_l_[PADL_(cpuwhich_t)]; cpuwhich_t which; char which_r_[PADR_(cpuwhich_t)];
- char id1_l_[PADL_(u_int32_t)]; u_int32_t id1; char id1_r_[PADR_(u_int32_t)];
- char id2_l_[PADL_(u_int32_t)]; u_int32_t id2; char id2_r_[PADR_(u_int32_t)];
+ char id1_l_[PADL_(uint32_t)]; uint32_t id1; char id1_r_[PADR_(uint32_t)];
+ char id2_l_[PADL_(uint32_t)]; uint32_t id2; char id2_r_[PADR_(uint32_t)];
char cpusetsize_l_[PADL_(size_t)]; size_t cpusetsize; char cpusetsize_r_[PADR_(size_t)];
char mask_l_[PADL_(const cpuset_t *)]; const cpuset_t * mask; char mask_r_[PADR_(const cpuset_t *)];
};
struct freebsd32_fexecve_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char argv_l_[PADL_(u_int32_t *)]; u_int32_t * argv; char argv_r_[PADR_(u_int32_t *)];
- char envv_l_[PADL_(u_int32_t *)]; u_int32_t * envv; char envv_r_[PADR_(u_int32_t *)];
+ char argv_l_[PADL_(uint32_t *)]; uint32_t * argv; char argv_r_[PADR_(uint32_t *)];
+ char envv_l_[PADL_(uint32_t *)]; uint32_t * envv; char envv_r_[PADR_(uint32_t *)];
};
struct freebsd32_fstatat_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
@@ -812,8 +812,8 @@ struct freebsd4_freebsd32_fhstatfs_args {
struct freebsd4_freebsd32_sendfile_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char s_l_[PADL_(int)]; int s; char s_r_[PADR_(int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
char nbytes_l_[PADL_(size_t)]; size_t nbytes; char nbytes_r_[PADR_(size_t)];
char hdtr_l_[PADL_(struct sf_hdtr32 *)]; struct sf_hdtr32 * hdtr; char hdtr_r_[PADR_(struct sf_hdtr32 *)];
char sbytes_l_[PADL_(off_t *)]; off_t * sbytes; char sbytes_r_[PADR_(off_t *)];
@@ -854,16 +854,16 @@ struct freebsd6_freebsd32_pread_args {
char buf_l_[PADL_(void *)]; void * buf; char buf_r_[PADR_(void *)];
char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
struct freebsd6_freebsd32_pwrite_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char buf_l_[PADL_(const void *)]; const void * buf; char buf_r_[PADR_(const void *)];
char nbyte_l_[PADL_(size_t)]; size_t nbyte; char nbyte_r_[PADR_(size_t)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
};
struct freebsd6_freebsd32_mmap_args {
char addr_l_[PADL_(caddr_t)]; caddr_t addr; char addr_r_[PADR_(caddr_t)];
@@ -872,27 +872,27 @@ struct freebsd6_freebsd32_mmap_args {
char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char pos1_l_[PADL_(u_int32_t)]; u_int32_t pos1; char pos1_r_[PADR_(u_int32_t)];
- char pos2_l_[PADL_(u_int32_t)]; u_int32_t pos2; char pos2_r_[PADR_(u_int32_t)];
+ char pos1_l_[PADL_(uint32_t)]; uint32_t pos1; char pos1_r_[PADR_(uint32_t)];
+ char pos2_l_[PADL_(uint32_t)]; uint32_t pos2; char pos2_r_[PADR_(uint32_t)];
};
struct freebsd6_freebsd32_lseek_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char offset1_l_[PADL_(u_int32_t)]; u_int32_t offset1; char offset1_r_[PADR_(u_int32_t)];
- char offset2_l_[PADL_(u_int32_t)]; u_int32_t offset2; char offset2_r_[PADR_(u_int32_t)];
+ char offset1_l_[PADL_(uint32_t)]; uint32_t offset1; char offset1_r_[PADR_(uint32_t)];
+ char offset2_l_[PADL_(uint32_t)]; uint32_t offset2; char offset2_r_[PADR_(uint32_t)];
char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)];
};
struct freebsd6_freebsd32_truncate_args {
char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char length1_l_[PADL_(u_int32_t)]; u_int32_t length1; char length1_r_[PADR_(u_int32_t)];
- char length2_l_[PADL_(u_int32_t)]; u_int32_t length2; char length2_r_[PADR_(u_int32_t)];
+ char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
+ char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
};
struct freebsd6_freebsd32_ftruncate_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)];
- char length1_l_[PADL_(u_int32_t)]; u_int32_t length1; char length1_r_[PADR_(u_int32_t)];
- char length2_l_[PADL_(u_int32_t)]; u_int32_t length2; char length2_r_[PADR_(u_int32_t)];
+ char length1_l_[PADL_(uint32_t)]; uint32_t length1; char length1_r_[PADR_(uint32_t)];
+ char length2_l_[PADL_(uint32_t)]; uint32_t length2; char length2_r_[PADR_(uint32_t)];
};
#ifdef PAD64_REQUIRED
#else
diff --git a/sys/compat/freebsd32/freebsd32_syscall.h b/sys/compat/freebsd32/freebsd32_syscall.h
index ad3d9860a7ad..163df6113522 100644
--- a/sys/compat/freebsd32/freebsd32_syscall.h
+++ b/sys/compat/freebsd32/freebsd32_syscall.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 227776 2011-11-21 01:26:10Z lstewart
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
#define FREEBSD32_SYS_syscall 0
diff --git a/sys/compat/freebsd32/freebsd32_syscalls.c b/sys/compat/freebsd32/freebsd32_syscalls.c
index faba8645856d..8c92f62601f8 100644
--- a/sys/compat/freebsd32/freebsd32_syscalls.c
+++ b/sys/compat/freebsd32/freebsd32_syscalls.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 227776 2011-11-21 01:26:10Z lstewart
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
const char *freebsd32_syscallnames[] = {
diff --git a/sys/compat/freebsd32/freebsd32_sysent.c b/sys/compat/freebsd32/freebsd32_sysent.c
index 590ed41639d8..87daff5a24f0 100644
--- a/sys/compat/freebsd32/freebsd32_sysent.c
+++ b/sys/compat/freebsd32/freebsd32_sysent.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 227776 2011-11-21 01:26:10Z lstewart
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
#include "opt_compat.h"
diff --git a/sys/compat/freebsd32/freebsd32_systrace_args.c b/sys/compat/freebsd32/freebsd32_systrace_args.c
index 13df961d1c23..c7a43d02d04e 100644
--- a/sys/compat/freebsd32/freebsd32_systrace_args.c
+++ b/sys/compat/freebsd32/freebsd32_systrace_args.c
@@ -209,11 +209,11 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 29: {
struct freebsd32_recvfrom_args *p = params;
iarg[0] = p->s; /* int */
- uarg[1] = p->buf; /* u_int32_t */
- uarg[2] = p->len; /* u_int32_t */
+ uarg[1] = p->buf; /* uint32_t */
+ uarg[2] = p->len; /* uint32_t */
iarg[3] = p->flags; /* int */
- uarg[4] = p->from; /* u_int32_t */
- uarg[5] = p->fromlenaddr; /* u_int32_t */
+ uarg[4] = p->from; /* uint32_t */
+ uarg[5] = p->fromlenaddr; /* uint32_t */
*n_args = 6;
break;
}
@@ -402,8 +402,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 59: {
struct freebsd32_execve_args *p = params;
uarg[0] = (intptr_t) p->fname; /* char * */
- uarg[1] = (intptr_t) p->argv; /* u_int32_t * */
- uarg[2] = (intptr_t) p->envv; /* u_int32_t * */
+ uarg[1] = (intptr_t) p->argv; /* uint32_t * */
+ uarg[2] = (intptr_t) p->envv; /* uint32_t * */
*n_args = 3;
break;
}
@@ -996,9 +996,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
uarg[0] = (intptr_t) p->name; /* int * */
uarg[1] = p->namelen; /* u_int */
uarg[2] = (intptr_t) p->old; /* void * */
- uarg[3] = (intptr_t) p->oldlenp; /* u_int32_t * */
+ uarg[3] = (intptr_t) p->oldlenp; /* uint32_t * */
uarg[4] = (intptr_t) p->new; /* void * */
- uarg[5] = p->newlen; /* u_int32_t */
+ uarg[5] = p->newlen; /* uint32_t */
*n_args = 6;
break;
}
@@ -1360,8 +1360,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
iarg[0] = p->fd; /* int */
uarg[1] = (intptr_t) p->iovp; /* struct iovec32 * */
uarg[2] = p->iovcnt; /* u_int */
- uarg[3] = p->offset1; /* u_int32_t */
- uarg[4] = p->offset2; /* u_int32_t */
+ uarg[3] = p->offset1; /* uint32_t */
+ uarg[4] = p->offset2; /* uint32_t */
*n_args = 5;
break;
}
@@ -1371,8 +1371,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
iarg[0] = p->fd; /* int */
uarg[1] = (intptr_t) p->iovp; /* struct iovec32 * */
uarg[2] = p->iovcnt; /* u_int */
- uarg[3] = p->offset1; /* u_int32_t */
- uarg[4] = p->offset2; /* u_int32_t */
+ uarg[3] = p->offset1; /* uint32_t */
+ uarg[4] = p->offset2; /* uint32_t */
*n_args = 5;
break;
}
@@ -1933,8 +1933,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
struct freebsd32_sendfile_args *p = params;
iarg[0] = p->fd; /* int */
iarg[1] = p->s; /* int */
- uarg[2] = p->offset1; /* u_int32_t */
- uarg[3] = p->offset2; /* u_int32_t */
+ uarg[2] = p->offset1; /* uint32_t */
+ uarg[3] = p->offset2; /* uint32_t */
uarg[4] = p->nbytes; /* size_t */
uarg[5] = (intptr_t) p->hdtr; /* struct sf_hdtr32 * */
uarg[6] = (intptr_t) p->sbytes; /* off_t * */
@@ -2500,8 +2500,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
uarg[1] = (intptr_t) p->buf; /* void * */
uarg[2] = p->nbyte; /* size_t */
iarg[3] = p->pad; /* int */
- uarg[4] = p->offset1; /* u_int32_t */
- uarg[5] = p->offset2; /* u_int32_t */
+ uarg[4] = p->offset1; /* uint32_t */
+ uarg[5] = p->offset2; /* uint32_t */
*n_args = 6;
break;
}
@@ -2512,8 +2512,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
uarg[1] = (intptr_t) p->buf; /* const void * */
uarg[2] = p->nbyte; /* size_t */
iarg[3] = p->pad; /* int */
- uarg[4] = p->offset1; /* u_int32_t */
- uarg[5] = p->offset2; /* u_int32_t */
+ uarg[4] = p->offset1; /* uint32_t */
+ uarg[5] = p->offset2; /* uint32_t */
*n_args = 6;
break;
}
@@ -2526,8 +2526,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
iarg[3] = p->flags; /* int */
iarg[4] = p->fd; /* int */
iarg[5] = p->pad; /* int */
- uarg[6] = p->pos1; /* u_int32_t */
- uarg[7] = p->pos2; /* u_int32_t */
+ uarg[6] = p->pos1; /* uint32_t */
+ uarg[7] = p->pos2; /* uint32_t */
*n_args = 8;
break;
}
@@ -2536,8 +2536,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
struct freebsd32_lseek_args *p = params;
iarg[0] = p->fd; /* int */
iarg[1] = p->pad; /* int */
- uarg[2] = p->offset1; /* u_int32_t */
- uarg[3] = p->offset2; /* u_int32_t */
+ uarg[2] = p->offset1; /* uint32_t */
+ uarg[3] = p->offset2; /* uint32_t */
iarg[4] = p->whence; /* int */
*n_args = 5;
break;
@@ -2547,8 +2547,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
struct freebsd32_truncate_args *p = params;
uarg[0] = (intptr_t) p->path; /* char * */
iarg[1] = p->pad; /* int */
- uarg[2] = p->length1; /* u_int32_t */
- uarg[3] = p->length2; /* u_int32_t */
+ uarg[2] = p->length1; /* uint32_t */
+ uarg[3] = p->length2; /* uint32_t */
*n_args = 4;
break;
}
@@ -2557,8 +2557,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
struct freebsd32_ftruncate_args *p = params;
iarg[0] = p->fd; /* int */
iarg[1] = p->pad; /* int */
- uarg[2] = p->length1; /* u_int32_t */
- uarg[3] = p->length2; /* u_int32_t */
+ uarg[2] = p->length1; /* uint32_t */
+ uarg[3] = p->length2; /* uint32_t */
*n_args = 4;
break;
}
@@ -2569,8 +2569,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
iarg[0] = p->fd; /* int */
uarg[1] = (intptr_t) p->buf; /* void * */
uarg[2] = p->nbyte; /* size_t */
- uarg[3] = p->offset1; /* u_int32_t */
- uarg[4] = p->offset2; /* u_int32_t */
+ uarg[3] = p->offset1; /* uint32_t */
+ uarg[4] = p->offset2; /* uint32_t */
*n_args = 5;
break;
}
@@ -2580,8 +2580,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
iarg[0] = p->fd; /* int */
uarg[1] = (intptr_t) p->buf; /* const void * */
uarg[2] = p->nbyte; /* size_t */
- uarg[3] = p->offset1; /* u_int32_t */
- uarg[4] = p->offset2; /* u_int32_t */
+ uarg[3] = p->offset1; /* uint32_t */
+ uarg[4] = p->offset2; /* uint32_t */
*n_args = 5;
break;
}
@@ -2593,8 +2593,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
iarg[2] = p->prot; /* int */
iarg[3] = p->flags; /* int */
iarg[4] = p->fd; /* int */
- uarg[5] = p->pos1; /* u_int32_t */
- uarg[6] = p->pos2; /* u_int32_t */
+ uarg[5] = p->pos1; /* uint32_t */
+ uarg[6] = p->pos2; /* uint32_t */
*n_args = 7;
break;
}
@@ -2602,8 +2602,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 478: {
struct freebsd32_lseek_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = p->offset1; /* u_int32_t */
- uarg[2] = p->offset2; /* u_int32_t */
+ uarg[1] = p->offset1; /* uint32_t */
+ uarg[2] = p->offset2; /* uint32_t */
iarg[3] = p->whence; /* int */
*n_args = 4;
break;
@@ -2612,8 +2612,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 479: {
struct freebsd32_truncate_args *p = params;
uarg[0] = (intptr_t) p->path; /* char * */
- uarg[1] = p->length1; /* u_int32_t */
- uarg[2] = p->length2; /* u_int32_t */
+ uarg[1] = p->length1; /* uint32_t */
+ uarg[2] = p->length2; /* uint32_t */
*n_args = 3;
break;
}
@@ -2621,8 +2621,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 480: {
struct freebsd32_ftruncate_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = p->length1; /* u_int32_t */
- uarg[2] = p->length2; /* u_int32_t */
+ uarg[1] = p->length1; /* uint32_t */
+ uarg[2] = p->length2; /* uint32_t */
*n_args = 3;
break;
}
@@ -2665,8 +2665,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
struct freebsd32_cpuset_setid_args *p = params;
iarg[0] = p->which; /* cpuwhich_t */
iarg[1] = p->pad; /* int */
- uarg[2] = p->id1; /* u_int32_t */
- uarg[3] = p->id2; /* u_int32_t */
+ uarg[2] = p->id1; /* uint32_t */
+ uarg[3] = p->id2; /* uint32_t */
iarg[4] = p->setid; /* cpusetid_t */
*n_args = 5;
break;
@@ -2676,8 +2676,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 485: {
struct freebsd32_cpuset_setid_args *p = params;
iarg[0] = p->which; /* cpuwhich_t */
- uarg[1] = p->id1; /* u_int32_t */
- uarg[2] = p->id2; /* u_int32_t */
+ uarg[1] = p->id1; /* uint32_t */
+ uarg[2] = p->id2; /* uint32_t */
iarg[3] = p->setid; /* cpusetid_t */
*n_args = 4;
break;
@@ -2688,8 +2688,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
struct freebsd32_cpuset_getid_args *p = params;
iarg[0] = p->level; /* cpulevel_t */
iarg[1] = p->which; /* cpuwhich_t */
- uarg[2] = p->id1; /* u_int32_t */
- uarg[3] = p->id2; /* u_int32_t */
+ uarg[2] = p->id1; /* uint32_t */
+ uarg[3] = p->id2; /* uint32_t */
uarg[4] = (intptr_t) p->setid; /* cpusetid_t * */
*n_args = 5;
break;
@@ -2699,8 +2699,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
struct freebsd32_cpuset_getaffinity_args *p = params;
iarg[0] = p->level; /* cpulevel_t */
iarg[1] = p->which; /* cpuwhich_t */
- uarg[2] = p->id1; /* u_int32_t */
- uarg[3] = p->id2; /* u_int32_t */
+ uarg[2] = p->id1; /* uint32_t */
+ uarg[3] = p->id2; /* uint32_t */
uarg[4] = p->cpusetsize; /* size_t */
uarg[5] = (intptr_t) p->mask; /* cpuset_t * */
*n_args = 6;
@@ -2711,8 +2711,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
struct freebsd32_cpuset_setaffinity_args *p = params;
iarg[0] = p->level; /* cpulevel_t */
iarg[1] = p->which; /* cpuwhich_t */
- uarg[2] = p->id1; /* u_int32_t */
- uarg[3] = p->id2; /* u_int32_t */
+ uarg[2] = p->id1; /* uint32_t */
+ uarg[3] = p->id2; /* uint32_t */
uarg[4] = p->cpusetsize; /* size_t */
uarg[5] = (intptr_t) p->mask; /* const cpuset_t * */
*n_args = 6;
@@ -2753,8 +2753,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 492: {
struct freebsd32_fexecve_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->argv; /* u_int32_t * */
- uarg[2] = (intptr_t) p->envv; /* u_int32_t * */
+ uarg[1] = (intptr_t) p->argv; /* uint32_t * */
+ uarg[2] = (intptr_t) p->envv; /* uint32_t * */
*n_args = 3;
break;
}
@@ -2943,7 +2943,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 514: {
struct cap_new_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = p->rights; /* u_int64_t */
+ uarg[1] = p->rights; /* uint64_t */
*n_args = 2;
break;
}
@@ -2951,7 +2951,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 515: {
struct cap_getrights_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->rightsp; /* u_int64_t * */
+ uarg[1] = (intptr_t) p->rightsp; /* uint64_t * */
*n_args = 2;
break;
}
@@ -3380,19 +3380,19 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
p = "int";
break;
case 4:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 5:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -3679,10 +3679,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "char *";
break;
case 1:
- p = "u_int32_t *";
+ p = "uint32_t *";
break;
case 2:
- p = "u_int32_t *";
+ p = "uint32_t *";
break;
default:
break;
@@ -4664,13 +4664,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "void *";
break;
case 3:
- p = "u_int32_t *";
+ p = "uint32_t *";
break;
case 4:
p = "void *";
break;
case 5:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -5217,10 +5217,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "u_int";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 4:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -5239,10 +5239,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "u_int";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 4:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -6162,10 +6162,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 4:
p = "size_t";
@@ -7135,10 +7135,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 4:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 5:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -7160,10 +7160,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 4:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 5:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -7191,10 +7191,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 6:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 7:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -7210,10 +7210,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 4:
p = "int";
@@ -7232,10 +7232,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -7251,10 +7251,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -7274,10 +7274,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "size_t";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 4:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -7296,10 +7296,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "size_t";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 4:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -7324,10 +7324,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 5:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 6:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -7340,10 +7340,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
p = "int";
@@ -7359,10 +7359,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "char *";
break;
case 1:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -7375,10 +7375,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
default:
break;
@@ -7448,10 +7448,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 4:
p = "cpusetid_t";
@@ -7468,10 +7468,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "cpuwhich_t";
break;
case 1:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
p = "cpusetid_t";
@@ -7491,10 +7491,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "cpuwhich_t";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 4:
p = "cpusetid_t *";
@@ -7513,10 +7513,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "cpuwhich_t";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 4:
p = "size_t";
@@ -7538,10 +7538,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "cpuwhich_t";
break;
case 2:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 3:
- p = "u_int32_t";
+ p = "uint32_t";
break;
case 4:
p = "size_t";
@@ -7620,10 +7620,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "u_int32_t *";
+ p = "uint32_t *";
break;
case 2:
- p = "u_int32_t *";
+ p = "uint32_t *";
break;
default:
break;
@@ -7959,7 +7959,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "u_int64_t";
+ p = "uint64_t";
break;
default:
break;
@@ -7972,7 +7972,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "u_int64_t *";
+ p = "uint64_t *";
break;
default:
break;
diff --git a/sys/compat/freebsd32/syscalls.master b/sys/compat/freebsd32/syscalls.master
index 11476ed51248..0891e419ac67 100644
--- a/sys/compat/freebsd32/syscalls.master
+++ b/sys/compat/freebsd32/syscalls.master
@@ -104,9 +104,9 @@
int flags); }
28 AUE_SENDMSG STD { int freebsd32_sendmsg(int s, struct msghdr32 *msg, \
int flags); }
-29 AUE_RECVFROM STD { int freebsd32_recvfrom(int s, u_int32_t buf, \
- u_int32_t len, int flags, u_int32_t from, \
- u_int32_t fromlenaddr); }
+29 AUE_RECVFROM STD { int freebsd32_recvfrom(int s, uint32_t buf, \
+ uint32_t len, int flags, uint32_t from, \
+ uint32_t fromlenaddr); }
30 AUE_ACCEPT NOPROTO { int accept(int s, caddr_t name, \
int *anamelen); }
31 AUE_GETPEERNAME NOPROTO { int getpeername(int fdes, caddr_t asa, \
@@ -152,7 +152,7 @@
58 AUE_READLINK NOPROTO { ssize_t readlink(char *path, char *buf, \
size_t count); }
59 AUE_EXECVE STD { int freebsd32_execve(char *fname, \
- u_int32_t *argv, u_int32_t *envv); }
+ uint32_t *argv, uint32_t *envv); }
60 AUE_UMASK NOPROTO { int umask(int newmask); } umask \
umask_args int
61 AUE_CHROOT NOPROTO { int chroot(char *path); }
@@ -325,10 +325,10 @@
172 AUE_NULL UNIMPL nosys
173 AUE_PREAD COMPAT6 { ssize_t freebsd32_pread(int fd, void *buf, \
size_t nbyte, int pad, \
- u_int32_t offset1, u_int32_t offset2); }
+ uint32_t offset1, uint32_t offset2); }
174 AUE_PWRITE COMPAT6 { ssize_t freebsd32_pwrite(int fd, \
const void *buf, size_t nbyte, int pad, \
- u_int32_t offset1, u_int32_t offset2); }
+ uint32_t offset1, uint32_t offset2); }
175 AUE_NULL UNIMPL nosys
176 AUE_NTP_ADJTIME NOPROTO { int ntp_adjtime(struct timex *tp); }
177 AUE_NULL UNIMPL sfork (BSD/OS 2.x)
@@ -363,21 +363,21 @@
char *buf, u_int count, int32_t *basep); }
197 AUE_MMAP COMPAT6 { caddr_t freebsd32_mmap(caddr_t addr, \
size_t len, int prot, int flags, int fd, \
- int pad, u_int32_t pos1, u_int32_t pos2); }
+ int pad, uint32_t pos1, uint32_t pos2); }
198 AUE_NULL NOPROTO { int nosys(void); } __syscall \
__syscall_args int
199 AUE_LSEEK COMPAT6 { off_t freebsd32_lseek(int fd, int pad, \
- u_int32_t offset1, u_int32_t offset2, \
+ uint32_t offset1, uint32_t offset2, \
int whence); }
200 AUE_TRUNCATE COMPAT6 { int freebsd32_truncate(char *path, \
- int pad, u_int32_t length1, \
- u_int32_t length2); }
+ int pad, uint32_t length1, \
+ uint32_t length2); }
201 AUE_FTRUNCATE COMPAT6 { int freebsd32_ftruncate(int fd, int pad, \
- u_int32_t length1, u_int32_t length2); }
+ uint32_t length1, uint32_t length2); }
202 AUE_SYSCTL STD { int freebsd32_sysctl(int *name, \
u_int namelen, void *old, \
- u_int32_t *oldlenp, void *new, \
- u_int32_t newlen); }
+ uint32_t *oldlenp, void *new, \
+ uint32_t newlen); }
203 AUE_MLOCK NOPROTO { int mlock(const void *addr, \
size_t len); }
204 AUE_MUNLOCK NOPROTO { int munlock(const void *addr, \
@@ -513,11 +513,11 @@
289 AUE_PREADV STD { ssize_t freebsd32_preadv(int fd, \
struct iovec32 *iovp, \
u_int iovcnt, \
- u_int32_t offset1, u_int32_t offset2); }
+ uint32_t offset1, uint32_t offset2); }
290 AUE_PWRITEV STD { ssize_t freebsd32_pwritev(int fd, \
struct iovec32 *iovp, \
u_int iovcnt, \
- u_int32_t offset1, u_int32_t offset2); }
+ uint32_t offset1, uint32_t offset2); }
291 AUE_NULL UNIMPL nosys
292 AUE_NULL UNIMPL nosys
293 AUE_NULL UNIMPL nosys
@@ -591,7 +591,7 @@
struct timespec *interval); }
335 AUE_NULL NOPROTO { int utrace(const void *addr, size_t len); }
336 AUE_SENDFILE COMPAT4 { int freebsd32_sendfile(int fd, int s, \
- u_int32_t offset1, u_int32_t offset2, \
+ uint32_t offset1, uint32_t offset2, \
size_t nbytes, struct sf_hdtr32 *hdtr, \
off_t *sbytes, int flags); }
337 AUE_NULL NOPROTO { int kldsym(int fileid, int cmd, \
@@ -694,7 +694,7 @@
392 AUE_NULL NOPROTO { int uuidgen(struct uuid *store, \
int count); }
393 AUE_SENDFILE STD { int freebsd32_sendfile(int fd, int s, \
- u_int32_t offset1, u_int32_t offset2, \
+ uint32_t offset1, uint32_t offset2, \
size_t nbytes, struct sf_hdtr32 *hdtr, \
off_t *sbytes, int flags); }
394 AUE_NULL UNIMPL mac_syscall
@@ -847,42 +847,42 @@
475 AUE_PREAD STD { ssize_t freebsd32_pread(int fd, \
void *buf,size_t nbyte, \
int pad, \
- u_int32_t offset1, u_int32_t offset2); }
+ uint32_t offset1, uint32_t offset2); }
476 AUE_PWRITE STD { ssize_t freebsd32_pwrite(int fd, \
const void *buf, size_t nbyte, \
int pad, \
- u_int32_t offset1, u_int32_t offset2); }
+ uint32_t offset1, uint32_t offset2); }
477 AUE_MMAP STD { caddr_t freebsd32_mmap(caddr_t addr, \
size_t len, int prot, int flags, int fd, \
int pad, \
- u_int32_t pos1, u_int32_t pos2); }
+ uint32_t pos1, uint32_t pos2); }
478 AUE_LSEEK STD { off_t freebsd32_lseek(int fd, \
int pad, \
- u_int32_t offset1, u_int32_t offset2, \
+ uint32_t offset1, uint32_t offset2, \
int whence); }
479 AUE_TRUNCATE STD { int freebsd32_truncate(char *path, \
int pad, \
- u_int32_t length1, u_int32_t length2); }
+ uint32_t length1, uint32_t length2); }
480 AUE_FTRUNCATE STD { int freebsd32_ftruncate(int fd, \
int pad, \
- u_int32_t length1, u_int32_t length2); }
+ uint32_t length1, uint32_t length2); }
#else
475 AUE_PREAD STD { ssize_t freebsd32_pread(int fd, \
void *buf,size_t nbyte, \
- u_int32_t offset1, u_int32_t offset2); }
+ uint32_t offset1, uint32_t offset2); }
476 AUE_PWRITE STD { ssize_t freebsd32_pwrite(int fd, \
const void *buf, size_t nbyte, \
- u_int32_t offset1, u_int32_t offset2); }
+ uint32_t offset1, uint32_t offset2); }
477 AUE_MMAP STD { caddr_t freebsd32_mmap(caddr_t addr, \
size_t len, int prot, int flags, int fd, \
- u_int32_t pos1, u_int32_t pos2); }
+ uint32_t pos1, uint32_t pos2); }
478 AUE_LSEEK STD { off_t freebsd32_lseek(int fd, \
- u_int32_t offset1, u_int32_t offset2, \
+ uint32_t offset1, uint32_t offset2, \
int whence); }
479 AUE_TRUNCATE STD { int freebsd32_truncate(char *path, \
- u_int32_t length1, u_int32_t length2); }
+ uint32_t length1, uint32_t length2); }
480 AUE_FTRUNCATE STD { int freebsd32_ftruncate(int fd, \
- u_int32_t length1, u_int32_t length2); }
+ uint32_t length1, uint32_t length2); }
#endif
481 AUE_KILL NOPROTO { int thr_kill2(pid_t pid, long id, int sig); }
482 AUE_SHMOPEN NOPROTO { int shm_open(const char *path, int flags, \
@@ -892,25 +892,25 @@
#ifdef PAD64_REQUIRED
485 AUE_NULL STD { int freebsd32_cpuset_setid(cpuwhich_t which, \
int pad, \
- u_int32_t id1, u_int32_t id2, \
+ uint32_t id1, uint32_t id2, \
cpusetid_t setid); }
#else
485 AUE_NULL STD { int freebsd32_cpuset_setid(cpuwhich_t which, \
- u_int32_t id1, u_int32_t id2, \
+ uint32_t id1, uint32_t id2, \
cpusetid_t setid); }
#endif
486 AUE_NULL STD { int freebsd32_cpuset_getid(cpulevel_t level, \
cpuwhich_t which, \
- u_int32_t id1, u_int32_t id2, \
+ uint32_t id1, uint32_t id2, \
cpusetid_t *setid); }
487 AUE_NULL STD { int freebsd32_cpuset_getaffinity( \
cpulevel_t level, cpuwhich_t which, \
- u_int32_t id1, u_int32_t id2, \
+ uint32_t id1, uint32_t id2, \
size_t cpusetsize, \
cpuset_t *mask); }
488 AUE_NULL STD { int freebsd32_cpuset_setaffinity( \
cpulevel_t level, cpuwhich_t which, \
- u_int32_t id1, u_int32_t id2, \
+ uint32_t id1, uint32_t id2, \
size_t cpusetsize, \
const cpuset_t *mask); }
489 AUE_FACCESSAT NOPROTO { int faccessat(int fd, char *path, int amode, \
@@ -920,7 +920,7 @@
491 AUE_FCHOWNAT NOPROTO { int fchownat(int fd, char *path, uid_t uid, \
gid_t gid, int flag); }
492 AUE_FEXECVE STD { int freebsd32_fexecve(int fd, \
- u_int32_t *argv, u_int32_t *envv); }
+ uint32_t *argv, uint32_t *envv); }
493 AUE_FSTATAT STD { int freebsd32_fstatat(int fd, char *path, \
struct stat *buf, int flag); }
494 AUE_FUTIMESAT STD { int freebsd32_futimesat(int fd, char *path, \
@@ -959,9 +959,9 @@
512 AUE_SHMCTL NOSTD { int freebsd32_shmctl(int shmid, int cmd, \
struct shmid_ds32 *buf); }
513 AUE_LPATHCONF NOPROTO { int lpathconf(char *path, int name); }
-514 AUE_CAP_NEW NOPROTO { int cap_new(int fd, u_int64_t rights); }
+514 AUE_CAP_NEW NOPROTO { int cap_new(int fd, uint64_t rights); }
515 AUE_CAP_GETRIGHTS NOPROTO { int cap_getrights(int fd, \
- u_int64_t *rightsp); }
+ uint64_t *rightsp); }
516 AUE_CAP_ENTER NOPROTO { int cap_enter(void); }
517 AUE_CAP_GETMODE NOPROTO { int cap_getmode(u_int *modep); }
518 AUE_PDFORK UNIMPL pdfork
diff --git a/sys/compat/ndis/subr_ntoskrnl.c b/sys/compat/ndis/subr_ntoskrnl.c
index 863e35e02f1f..02e8e45b173a 100644
--- a/sys/compat/ndis/subr_ntoskrnl.c
+++ b/sys/compat/ndis/subr_ntoskrnl.c
@@ -3591,6 +3591,7 @@ DbgPrint(char *fmt, ...)
if (bootverbose) {
va_start(ap, fmt);
vprintf(fmt, ap);
+ va_end(ap);
}
return (STATUS_SUCCESS);
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index 889c53258e0b..19909b3276df 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -1295,7 +1295,7 @@ device ch #SCSI media changers
device da #SCSI direct access devices (aka disks)
device sa #SCSI tapes
device cd #SCSI CD-ROMs
-device ses #SCSI Environmental Services (and SAF-TE)
+device ses #Enclosure Services (SES and SAF-TE)
device pt #SCSI processor
device targ #SCSI Target Mode Code
device targbh #SCSI Target Mode Blackhole Device
diff --git a/sys/conf/files b/sys/conf/files
index a1e7e8e8466b..da9006913101 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -712,6 +712,8 @@ dev/ath/if_ath_ahb.c optional ath_ahb \
#
dev/ath/if_ath.c optional ath \
compile-with "${NORMAL_C} -I$S/dev/ath"
+dev/ath/if_ath_beacon.c optional ath \
+ compile-with "${NORMAL_C} -I$S/dev/ath"
dev/ath/if_ath_debug.c optional ath \
compile-with "${NORMAL_C} -I$S/dev/ath"
dev/ath/if_ath_keycache.c optional ath \
@@ -722,8 +724,12 @@ dev/ath/if_ath_tx.c optional ath \
compile-with "${NORMAL_C} -I$S/dev/ath"
dev/ath/if_ath_tx_ht.c optional ath \
compile-with "${NORMAL_C} -I$S/dev/ath"
+dev/ath/if_ath_tdma.c optional ath \
+ compile-with "${NORMAL_C} -I$S/dev/ath"
dev/ath/if_ath_sysctl.c optional ath \
compile-with "${NORMAL_C} -I$S/dev/ath"
+dev/ath/if_ath_rx.c optional ath \
+ compile-with "${NORMAL_C} -I$S/dev/ath"
dev/ath/ah_osdep.c optional ath \
compile-with "${NORMAL_C} -I$S/dev/ath"
#
@@ -1219,6 +1225,7 @@ dev/fatm/if_fatm.c optional fatm pci
dev/fb/splash.c optional splash
dev/fdt/fdt_common.c optional fdt
dev/fdt/fdt_pci.c optional fdt pci
+dev/fdt/fdt_slicer.c optional fdt cfi | fdt nand
dev/fdt/fdt_static_dtb.S optional fdt fdt_dtb_static
dev/fdt/fdtbus.c optional fdt
dev/fdt/simplebus.c optional fdt
@@ -1515,7 +1522,7 @@ dev/ixgb/if_ixgb.c optional ixgb
dev/ixgb/ixgb_ee.c optional ixgb
dev/ixgb/ixgb_hw.c optional ixgb
dev/ixgbe/ixgbe.c optional ixgbe inet \
- compile-with "${NORMAL_C} -I$S/dev/ixgbe"
+ compile-with "${NORMAL_C} -I$S/dev/ixgbe -DSMP -DIXGBE_FDIR"
dev/ixgbe/ixv.c optional ixgbe inet \
compile-with "${NORMAL_C} -I$S/dev/ixgbe"
dev/ixgbe/ixgbe_phy.c optional ixgbe inet \
@@ -1662,6 +1669,21 @@ dev/mxge/mxge_ethp_z8e.c optional mxge pci
dev/mxge/mxge_rss_eth_z8e.c optional mxge pci
dev/mxge/mxge_rss_ethp_z8e.c optional mxge pci
dev/my/if_my.c optional my
+dev/nand/nand.c optional nand
+dev/nand/nand_bbt.c optional nand
+dev/nand/nand_cdev.c optional nand
+dev/nand/nand_generic.c optional nand
+dev/nand/nand_geom.c optional nand
+dev/nand/nand_id.c optional nand
+dev/nand/nandbus.c optional nand
+dev/nand/nandbus_if.m optional nand
+dev/nand/nand_if.m optional nand
+dev/nand/nandsim.c optional nandsim nand
+dev/nand/nandsim_chip.c optional nandsim nand
+dev/nand/nandsim_ctrl.c optional nandsim nand
+dev/nand/nandsim_log.c optional nandsim nand
+dev/nand/nandsim_swap.c optional nandsim nand
+dev/nand/nfc_if.m optional nand
dev/ncv/ncr53c500.c optional ncv
dev/ncv/ncr53c500_pccard.c optional ncv pccard
dev/netmap/netmap.c optional netmap
@@ -2254,6 +2276,20 @@ fs/msdosfs/msdosfs_iconv.c optional msdosfs_iconv
fs/msdosfs/msdosfs_lookup.c optional msdosfs
fs/msdosfs/msdosfs_vfsops.c optional msdosfs
fs/msdosfs/msdosfs_vnops.c optional msdosfs
+fs/nandfs/bmap.c optional nandfs
+fs/nandfs/nandfs_alloc.c optional nandfs
+fs/nandfs/nandfs_bmap.c optional nandfs
+fs/nandfs/nandfs_buffer.c optional nandfs
+fs/nandfs/nandfs_cleaner.c optional nandfs
+fs/nandfs/nandfs_cpfile.c optional nandfs
+fs/nandfs/nandfs_dat.c optional nandfs
+fs/nandfs/nandfs_dir.c optional nandfs
+fs/nandfs/nandfs_ifile.c optional nandfs
+fs/nandfs/nandfs_segment.c optional nandfs
+fs/nandfs/nandfs_subr.c optional nandfs
+fs/nandfs/nandfs_sufile.c optional nandfs
+fs/nandfs/nandfs_vfsops.c optional nandfs
+fs/nandfs/nandfs_vnops.c optional nandfs
fs/nfs/nfs_commonkrpc.c optional nfscl | nfsd
fs/nfs/nfs_commonsubs.c optional nfscl | nfsd
fs/nfs/nfs_commonport.c optional nfscl | nfsd
@@ -2355,6 +2391,7 @@ geom/geom_disk.c standard
geom/geom_dump.c standard
geom/geom_event.c standard
geom/geom_fox.c optional geom_fox
+geom/geom_flashmap.c optional fdt cfi | fdt nand
geom/geom_io.c standard
geom/geom_kern.c standard
geom/geom_map.c optional geom_map
diff --git a/sys/conf/files.powerpc b/sys/conf/files.powerpc
index 5d9dec5ffd1f..33ce3352991b 100644
--- a/sys/conf/files.powerpc
+++ b/sys/conf/files.powerpc
@@ -97,17 +97,17 @@ powerpc/aim/swtch64.S optional aim powerpc64
powerpc/aim/trap.c optional aim
powerpc/aim/uma_machdep.c optional aim
powerpc/aim/vm_machdep.c optional aim
-powerpc/booke/clock.c optional e500
-powerpc/booke/copyinout.c optional e500
-powerpc/booke/interrupt.c optional e500
-powerpc/booke/locore.S optional e500 no-obj
-powerpc/booke/machdep.c optional e500
-powerpc/booke/mp_cpudep.c optional e500 smp
+powerpc/booke/clock.c optional booke
+powerpc/booke/copyinout.c optional booke
+powerpc/booke/interrupt.c optional booke
+powerpc/booke/locore.S optional booke no-obj
+powerpc/booke/machdep.c optional booke
+powerpc/booke/mp_cpudep.c optional booke smp
powerpc/booke/platform_bare.c optional mpc85xx
-powerpc/booke/pmap.c optional e500
-powerpc/booke/swtch.S optional e500
-powerpc/booke/trap.c optional e500
-powerpc/booke/vm_machdep.c optional e500
+powerpc/booke/pmap.c optional booke
+powerpc/booke/swtch.S optional booke
+powerpc/booke/trap.c optional booke
+powerpc/booke/vm_machdep.c optional booke
powerpc/cpufreq/dfs.c optional cpufreq
powerpc/cpufreq/pcr.c optional cpufreq aim
powerpc/fpu/fpu_add.c optional fpu_emu powerpc
@@ -132,7 +132,6 @@ powerpc/mpc85xx/isa.c optional mpc85xx isa
powerpc/mpc85xx/lbc.c optional mpc85xx
powerpc/mpc85xx/mpc85xx.c optional mpc85xx
powerpc/mpc85xx/nexus.c optional mpc85xx
-powerpc/mpc85xx/openpic_fdt.c optional fdt
powerpc/mpc85xx/pci_fdt.c optional pci mpc85xx
powerpc/ofw/ofw_cpu.c optional aim
powerpc/ofw/ofw_machdep.c optional aim
@@ -194,6 +193,7 @@ powerpc/powerpc/mem.c optional mem
powerpc/powerpc/mmu_if.m standard
powerpc/powerpc/mp_machdep.c optional smp
powerpc/powerpc/openpic.c standard
+powerpc/powerpc/openpic_fdt.c optional fdt
powerpc/powerpc/pic_if.m standard
powerpc/powerpc/pmap_dispatch.c standard
powerpc/powerpc/platform.c standard
diff --git a/sys/conf/options b/sys/conf/options
index 4c9596761196..8f810f4bf89c 100644
--- a/sys/conf/options
+++ b/sys/conf/options
@@ -213,6 +213,7 @@ FDESCFS opt_dontuse.h
FFS opt_dontuse.h
HPFS opt_dontuse.h
MSDOSFS opt_dontuse.h
+NANDFS opt_dontuse.h
NTFS opt_dontuse.h
NULLFS opt_dontuse.h
NWFS opt_dontuse.h
diff --git a/sys/conf/options.powerpc b/sys/conf/options.powerpc
index 7e3358e7f6ff..f82bb9d89cc7 100644
--- a/sys/conf/options.powerpc
+++ b/sys/conf/options.powerpc
@@ -2,7 +2,9 @@
# Options specific to the powerpc platform kernels
AIM opt_global.h
-E500 opt_global.h
+BOOKE opt_global.h
+BOOKE_E500 opt_global.h
+BOOKE_PPC4XX opt_global.h
CELL
POWERPC
diff --git a/sys/contrib/dev/acpica/acpica_prep.sh b/sys/contrib/dev/acpica/acpica_prep.sh
index e7157ce82229..3cbb12a5bf4f 100755
--- a/sys/contrib/dev/acpica/acpica_prep.sh
+++ b/sys/contrib/dev/acpica/acpica_prep.sh
@@ -10,8 +10,8 @@ if [ ! $# -eq 1 ]; then
fi
src=$1
-wrk=`realpath ./_acpi_ca_unpack`
-dst=`realpath ./acpi_ca_destination`
+wrk="$(realpath .)/_acpi_ca_unpack"
+dst="$(realpath .)/acpi_ca_destination"
# files that should keep their full directory path
fulldirs="common compiler components include os_specific"
@@ -67,7 +67,8 @@ for H in ${src_headers}; do
xargs sed -i "" -e "s|[\"<]$H[\">]|\<contrib/dev/acpica/include/$H\>|g"
done
for H in ${comp_headers}; do
- find ${dst}/common ${dst}/compiler -name "*.[chly]" -type f | \
+ find ${dst}/common ${dst}/compiler ${dst}/components \
+ -name "*.[chly]" -type f | \
xargs sed -i "" -e "s|[\"<]$H[\">]|\<contrib/dev/acpica/compiler/$H\>|g"
done
for H in ${platform_headers}; do
diff --git a/sys/contrib/dev/acpica/changes.txt b/sys/contrib/dev/acpica/changes.txt
index e55e28628d39..d31e91405caa 100644
--- a/sys/contrib/dev/acpica/changes.txt
+++ b/sys/contrib/dev/acpica/changes.txt
@@ -1,8 +1,70 @@
----------------------------------------
+18 May 2012. Summary of changes for version 20120518:
+
+
+1) ACPICA Core Subsystem:
+
+Added a new OSL interface, AcpiOsWaitEventsComplete. This interface is defined
+to block until asynchronous events such as notifies and GPEs have completed.
+Within ACPICA, it is only called before a notify or GPE handler is
+removed/uninstalled. It also may be useful for the host OS within related
+drivers such as the Embedded Controller driver. See the ACPICA reference for
+additional information. ACPICA BZ 868.
+
+ACPI Tables: Added a new error message for a possible overflow failure during
+the conversion of FADT 32-bit legacy register addresses to internal common 64-
+bit GAS structure representation. The GAS has a one-byte "bit length" field,
+thus limiting the register length to 255 bits. ACPICA BZ 953.
+
+Example Code and Data Size: These are the sizes for the OS-independent
+acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The debug
+version of the code includes the debug output trace mechanism and has a much
+larger code and data size.
+
+ Previous Release:
+ Non-Debug Version: 92.9K Code, 25.0K Data, 117.9K Total
+ Debug Version: 172.6K Code, 73.4K Data, 246.0K Total
+ Current Release:
+ Non-Debug Version: 93.0K Code, 25.1K Data, 118.1K Total
+ Debug Version: 172.7K Code, 73.6K Data, 246.3K Total
+
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Added the ACPI 5.0 "PCC" keyword for use in the Register() ASL macro.
+This keyword was added late in the ACPI 5.0 release cycle and was not
+implemented until now.
+
+Disassembler: Added support for Operation Region externals. Adds missing
+support for operation regions that are defined in another table, and
+referenced locally via a Field or BankField ASL operator. Now generates the
+correct External statement.
+
+Disassembler: Several additional fixes for the External() statement generation
+related to some ASL operators. Also, order the External() statements
+alphabetically in the disassembler output. Fixes the External() generation for
+the Create* field, Alias, and Scope operators:
+ 1) Create* buffer field operators - fix type mismatch warning on disassembly
+ 2) Alias - implement missing External support
+ 3) Scope - fix to make sure all necessary externals are emitted.
+
+iASL: Improved pathname support. For include files, merge the prefix pathname
+with the file pathname and eliminate unnecessary components. Convert
+backslashes in all pathnames to forward slashes, for readability. Include file
+pathname changes affect both #include and Include() type operators.
+
+iASL/DTC/Preprocessor: Gracefully handle early EOF. Handle an EOF at the end
+of a valid line by inserting a newline and then returning the EOF during the
+next call to GetNextLine. Prevents the line from being ignored due to EOF
+condition.
+
+iASL: Implemented some changes to enhance the IDE support (-vi option.) Error
+and Warning messages are now correctly recognized for both the source code
+browser and the global error and warning counts.
+
+----------------------------------------
20 April 2012. Summary of changes for version 20120420:
-This release is available at www.acpica.org/downloads.
-The ACPI 5.0 specification is available at www.acpi.info.
1) ACPICA Core Subsystem:
@@ -68,8 +130,6 @@ several extraneous "unrecognized operator" messages.
----------------------------------------
20 March 2012. Summary of changes for version 20120320:
-This release is available at www.acpica.org/downloads.
-The ACPI 5.0 specification is available at www.acpi.info.
1) ACPICA Core Subsystem:
@@ -160,8 +220,6 @@ Versions supported:
----------------------------------------
15 February 2012. Summary of changes for version 20120215:
-This release is available at www.acpica.org/downloads.
-The ACPI 5.0 specification is available at www.acpi.info.
1) ACPICA Core Subsystem:
@@ -252,8 +310,6 @@ specification.
----------------------------------------
11 January 2012. Summary of changes for version 20120111:
-This release is available at www.acpica.org/downloads.
-The ACPI 5.0 specification is available at www.acpi.info.
1) ACPICA Core Subsystem:
diff --git a/sys/contrib/dev/acpica/common/adfile.c b/sys/contrib/dev/acpica/common/adfile.c
index 50ebffd036d6..99b032f508e8 100644
--- a/sys/contrib/dev/acpica/common/adfile.c
+++ b/sys/contrib/dev/acpica/common/adfile.c
@@ -298,20 +298,24 @@ FlSplitInputPathname (
return (AE_NO_MEMORY);
}
- Substring = strrchr (DirectoryPath, '\\');
+ /* Convert backslashes to slashes in the entire path */
+
+ UtConvertBackslashes (DirectoryPath);
+
+ /* Backup to last slash or colon */
+
+ Substring = strrchr (DirectoryPath, '/');
if (!Substring)
{
- Substring = strrchr (DirectoryPath, '/');
- if (!Substring)
- {
- Substring = strrchr (DirectoryPath, ':');
- }
+ Substring = strrchr (DirectoryPath, ':');
}
+ /* Extract the simple filename */
+
if (!Substring)
{
+ Filename = FlStrdup (DirectoryPath);
DirectoryPath[0] = 0;
- Filename = FlStrdup (InputPath);
}
else
{
@@ -326,7 +330,6 @@ FlSplitInputPathname (
*OutDirectoryPath = DirectoryPath;
*OutFilename = Filename;
-
return (AE_OK);
}
diff --git a/sys/contrib/dev/acpica/common/adwalk.c b/sys/contrib/dev/acpica/common/adwalk.c
index 027366e47271..94ef450892d9 100644
--- a/sys/contrib/dev/acpica/common/adwalk.c
+++ b/sys/contrib/dev/acpica/common/adwalk.c
@@ -521,6 +521,7 @@ AcpiDmFindOrphanDescending (
if ((OpInfo->Class != AML_CLASS_EXECUTE) &&
(OpInfo->Class != AML_CLASS_CREATE) &&
+ (OpInfo->ObjectType != ACPI_TYPE_LOCAL_ALIAS) &&
(ParentOp->Common.AmlOpcode != AML_INT_METHODCALL_OP) &&
!Op->Common.Node)
{
@@ -743,13 +744,23 @@ AcpiDmXrefDescendingOp (
if (OpInfo->Flags & AML_NAMED)
{
- if ((Op->Common.AmlOpcode == AML_ALIAS_OP) ||
- (Op->Common.AmlOpcode == AML_SCOPE_OP))
+ /*
+ * Only these two operators (Alias, Scope) refer to an existing
+ * name, it is the first argument
+ */
+ if (Op->Common.AmlOpcode == AML_ALIAS_OP)
+ {
+ ObjectType = ACPI_TYPE_ANY;
+
+ NextOp = Op->Common.Value.Arg;
+ NextOp = NextOp->Common.Value.Arg;
+ if (NextOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP)
+ {
+ Path = NextOp->Common.Value.String;
+ }
+ }
+ else if (Op->Common.AmlOpcode == AML_SCOPE_OP)
{
- /*
- * Only these two operators refer to an existing name,
- * first argument
- */
Path = (char *) Op->Named.Path;
}
}
@@ -757,6 +768,8 @@ AcpiDmXrefDescendingOp (
{
/* Referenced Buffer Name is the first child */
+ ObjectType = ACPI_TYPE_BUFFER; /* Change from TYPE_BUFFER_FIELD */
+
NextOp = Op->Common.Value.Arg;
if (NextOp->Common.AmlOpcode == AML_INT_NAMEPATH_OP)
{
@@ -783,6 +796,11 @@ AcpiDmXrefDescendingOp (
Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
WalkState, &Node);
+ if (ACPI_SUCCESS (Status) && (Node->Flags & ANOBJ_IS_EXTERNAL))
+ {
+ Status = AE_NOT_FOUND;
+ }
+
if (ACPI_FAILURE (Status))
{
if (Status == AE_NOT_FOUND)
diff --git a/sys/contrib/dev/acpica/common/dmextern.c b/sys/contrib/dev/acpica/common/dmextern.c
index 6fca187d6270..0833bc3bf9b1 100644
--- a/sys/contrib/dev/acpica/common/dmextern.c
+++ b/sys/contrib/dev/acpica/common/dmextern.c
@@ -454,12 +454,12 @@ AcpiDmAddToExternalList (
NewExternal->InternalPath = Path;
- /* Link the new descriptor into the global list, ordered by string length */
+ /* Link the new descriptor into the global list, alphabetically ordered */
NextExternal = AcpiGbl_ExternalList;
while (NextExternal)
{
- if (NewExternal->Length <= NextExternal->Length)
+ if (AcpiUtStricmp (NewExternal->Path, NextExternal->Path) < 0)
{
if (PrevExternal)
{
@@ -508,7 +508,7 @@ AcpiDmAddExternalsToNamespace (
{
ACPI_STATUS Status;
ACPI_NAMESPACE_NODE *Node;
- ACPI_OPERAND_OBJECT *MethodDesc;
+ ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_EXTERNAL_LIST *External = AcpiGbl_ExternalList;
@@ -527,13 +527,29 @@ AcpiDmAddExternalsToNamespace (
"while adding external to namespace [%s]",
External->Path));
}
- else if (External->Type == ACPI_TYPE_METHOD)
+
+ else switch (External->Type)
{
+ case ACPI_TYPE_METHOD:
+
/* For methods, we need to save the argument count */
- MethodDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD);
- MethodDesc->Method.ParamCount = (UINT8) External->Value;
- Node->Object = MethodDesc;
+ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD);
+ ObjDesc->Method.ParamCount = (UINT8) External->Value;
+ Node->Object = ObjDesc;
+ break;
+
+ case ACPI_TYPE_REGION:
+
+ /* Regions require a region sub-object */
+
+ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_REGION);
+ ObjDesc->Region.Node = Node;
+ Node->Object = ObjDesc;
+ break;
+
+ default:
+ break;
}
External = External->Next;
diff --git a/sys/contrib/dev/acpica/compiler/aslcompile.c b/sys/contrib/dev/acpica/compiler/aslcompile.c
index 50eaf4ef26a2..736f0070a9bb 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompile.c
+++ b/sys/contrib/dev/acpica/compiler/aslcompile.c
@@ -59,12 +59,12 @@ CmFlushSourceCode (
static void
FlConsumeAnsiComment (
- ASL_FILE_INFO *FileInfo,
+ FILE *Handle,
ASL_FILE_STATUS *Status);
static void
FlConsumeNewComment (
- ASL_FILE_INFO *FileInfo,
+ FILE *Handle,
ASL_FILE_STATUS *Status);
@@ -253,7 +253,8 @@ CmFlushSourceCode (
*
* FUNCTION: FlConsume*
*
- * PARAMETERS: FileInfo - Points to an open input file
+ * PARAMETERS: Handle - Open input file
+ * Status - File current status struct
*
* RETURN: Number of lines consumed
*
@@ -263,14 +264,14 @@ CmFlushSourceCode (
static void
FlConsumeAnsiComment (
- ASL_FILE_INFO *FileInfo,
+ FILE *Handle,
ASL_FILE_STATUS *Status)
{
UINT8 Byte;
BOOLEAN ClosingComment = FALSE;
- while (fread (&Byte, 1, 1, FileInfo->Handle))
+ while (fread (&Byte, 1, 1, Handle))
{
/* Scan until comment close is found */
@@ -307,13 +308,13 @@ FlConsumeAnsiComment (
static void
FlConsumeNewComment (
- ASL_FILE_INFO *FileInfo,
+ FILE *Handle,
ASL_FILE_STATUS *Status)
{
UINT8 Byte;
- while (fread (&Byte, 1, 1, FileInfo->Handle))
+ while (fread (&Byte, 1, 1, Handle))
{
Status->Offset++;
@@ -332,7 +333,9 @@ FlConsumeNewComment (
*
* FUNCTION: FlCheckForAscii
*
- * PARAMETERS: FileInfo - Points to an open input file
+ * PARAMETERS: Handle - Open input file
+ * Filename - Input filename
+ * DisplayErrors - TRUE if error messages desired
*
* RETURN: Status
*
@@ -347,7 +350,9 @@ FlConsumeNewComment (
ACPI_STATUS
FlCheckForAscii (
- ASL_FILE_INFO *FileInfo)
+ FILE *Handle,
+ char *Filename,
+ BOOLEAN DisplayErrors)
{
UINT8 Byte;
ACPI_SIZE BadBytes = 0;
@@ -360,7 +365,7 @@ FlCheckForAscii (
/* Read the entire file */
- while (fread (&Byte, 1, 1, FileInfo->Handle))
+ while (fread (&Byte, 1, 1, Handle))
{
/* Ignore comment fields (allow non-ascii within) */
@@ -370,12 +375,12 @@ FlCheckForAscii (
if (Byte == '*')
{
- FlConsumeAnsiComment (FileInfo, &Status);
+ FlConsumeAnsiComment (Handle, &Status);
}
if (Byte == '/')
{
- FlConsumeNewComment (FileInfo, &Status);
+ FlConsumeNewComment (Handle, &Status);
}
/* Reset */
@@ -391,7 +396,7 @@ FlCheckForAscii (
if (!ACPI_IS_ASCII (Byte))
{
- if (BadBytes < 10)
+ if ((BadBytes < 10) && (DisplayErrors))
{
AcpiOsPrintf (
"Non-ASCII character [0x%2.2X] found in line %u, file offset 0x%.2X\n",
@@ -413,20 +418,24 @@ FlCheckForAscii (
/* Seek back to the beginning of the source file */
- fseek (FileInfo->Handle, 0, SEEK_SET);
+ fseek (Handle, 0, SEEK_SET);
/* Were there any non-ASCII characters in the file? */
if (BadBytes)
{
- AcpiOsPrintf (
- "%u non-ASCII characters found in input source text, could be a binary file\n",
- BadBytes);
- AslError (ASL_ERROR, ASL_MSG_NON_ASCII, NULL, FileInfo->Filename);
+ if (DisplayErrors)
+ {
+ AcpiOsPrintf (
+ "%u non-ASCII characters found in input source text, could be a binary file\n",
+ BadBytes);
+ AslError (ASL_ERROR, ASL_MSG_NON_ASCII, NULL, Filename);
+ }
+
return (AE_BAD_CHARACTER);
}
- /* File is OK */
+ /* File is OK (100% ASCII) */
return (AE_OK);
}
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.h b/sys/contrib/dev/acpica/compiler/aslcompiler.h
index bb29468f7600..03e1e149f502 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.h
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.h
@@ -166,7 +166,9 @@ CmCleanupAndExit (
ACPI_STATUS
FlCheckForAscii (
- ASL_FILE_INFO *FileInfo);
+ FILE *Handle,
+ char *Filename,
+ BOOLEAN DisplayErrors);
/*
@@ -608,6 +610,11 @@ void
FlAddIncludeDirectory (
char *Dir);
+char *
+FlMergePathnames (
+ char *PrefixDir,
+ char *FilePathname);
+
void
FlOpenIncludeFile (
ACPI_PARSE_OBJECT *Op);
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.l b/sys/contrib/dev/acpica/compiler/aslcompiler.l
index 68391269d76b..5b9ff122e189 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.l
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.l
@@ -523,6 +523,7 @@ NamePathTail [.]{NameSeg}
"IPMI" { count (0); return (PARSEOP_REGIONSPACE_IPMI); }
"GeneralPurposeIo" { count (0); return (PARSEOP_REGIONSPACE_GPIO); } /* ACPI 5.0 */
"GenericSerialBus" { count (0); return (PARSEOP_REGIONSPACE_GSBUS); } /* ACPI 5.0 */
+"PCC" { count (0); return (PARSEOP_REGIONSPACE_PCC); } /* ACPI 5.0 */
"FFixedHW" { count (0); return (PARSEOP_REGIONSPACE_FFIXEDHW); }
/* ResourceTypeKeyword: Resource Usage - Resource Descriptors */
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.y b/sys/contrib/dev/acpica/compiler/aslcompiler.y
index 0c53c2375af0..2688390f7879 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.y
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.y
@@ -363,6 +363,7 @@ void * AslLocalAllocate (unsigned int Size);
%token <i> PARSEOP_REGIONSPACE_IO
%token <i> PARSEOP_REGIONSPACE_IPMI
%token <i> PARSEOP_REGIONSPACE_MEM
+%token <i> PARSEOP_REGIONSPACE_PCC
%token <i> PARSEOP_REGIONSPACE_PCI
%token <i> PARSEOP_REGIONSPACE_PCIBAR
%token <i> PARSEOP_REGIONSPACE_SMBUS
@@ -2359,6 +2360,7 @@ RegionSpaceKeyword
| PARSEOP_REGIONSPACE_IPMI {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_IPMI);}
| PARSEOP_REGIONSPACE_GPIO {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GPIO);}
| PARSEOP_REGIONSPACE_GSBUS {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_GSBUS);}
+ | PARSEOP_REGIONSPACE_PCC {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_PCC);}
| PARSEOP_REGIONSPACE_FFIXEDHW {$$ = TrCreateLeafNode (PARSEOP_REGIONSPACE_FFIXEDHW);}
;
diff --git a/sys/contrib/dev/acpica/compiler/aslerror.c b/sys/contrib/dev/acpica/compiler/aslerror.c
index 9173d4659b3f..a11cf5cd9fd4 100644
--- a/sys/contrib/dev/acpica/compiler/aslerror.c
+++ b/sys/contrib/dev/acpica/compiler/aslerror.c
@@ -315,12 +315,16 @@ AePrintException (
}
else
{
+ /*
+ * Less verbose version of the error message, enabled via the
+ * -vi switch. The format is compatible with MS Visual Studio.
+ */
fprintf (OutputFile, "%s", Enode->Filename);
if (Enode->LineNumber)
{
- fprintf (OutputFile, "(%u) i:%6u : ",
- Enode->LineNumber, Enode->LineNumber);
+ fprintf (OutputFile, "(%u) : ",
+ Enode->LineNumber);
}
}
}
@@ -335,9 +339,18 @@ AePrintException (
{
/* Decode the message ID */
- fprintf (OutputFile, "%s %4.4d - ",
- AslErrorLevel[Enode->Level],
- Enode->MessageId + ((Enode->Level+1) * 1000));
+ if (Gbl_VerboseErrors)
+ {
+ fprintf (OutputFile, "%s %4.4d - ",
+ AslErrorLevel[Enode->Level],
+ Enode->MessageId + ((Enode->Level+1) * 1000));
+ }
+ else /* IDE case */
+ {
+ fprintf (OutputFile, "%s %4.4d:",
+ AslErrorLevelIde[Enode->Level],
+ Enode->MessageId + ((Enode->Level+1) * 1000));
+ }
MainMessage = AslMessages[Enode->MessageId];
ExtraMessage = Enode->Message;
diff --git a/sys/contrib/dev/acpica/compiler/aslfiles.c b/sys/contrib/dev/acpica/compiler/aslfiles.c
index e3d8a1a0b787..b1ec21006808 100644
--- a/sys/contrib/dev/acpica/compiler/aslfiles.c
+++ b/sys/contrib/dev/acpica/compiler/aslfiles.c
@@ -492,6 +492,107 @@ FlAddIncludeDirectory (
/*******************************************************************************
*
+ * FUNCTION: FlMergePathnames
+ *
+ * PARAMETERS: PrefixDir - Prefix directory pathname. Can be NULL or
+ * a zero length string.
+ * FilePathname - The include filename from the source ASL.
+ *
+ * RETURN: Merged pathname string
+ *
+ * DESCRIPTION: Merge two pathnames that (probably) have common elements, to
+ * arrive at a minimal length string. Merge can occur if the
+ * FilePathname is relative to the PrefixDir.
+ *
+ ******************************************************************************/
+
+char *
+FlMergePathnames (
+ char *PrefixDir,
+ char *FilePathname)
+{
+ char *CommonPath;
+ char *Pathname;
+ char *LastElement;
+
+
+ DbgPrint (ASL_PARSE_OUTPUT, "Include: Prefix path - \"%s\"\n"
+ "Include: FilePathname - \"%s\"\n",
+ PrefixDir, FilePathname);
+
+ /*
+ * If there is no prefix directory or if the file pathname is absolute,
+ * just return the original file pathname
+ */
+ if (!PrefixDir || (!*PrefixDir) ||
+ (*FilePathname == '/') ||
+ (FilePathname[1] == ':'))
+ {
+ Pathname = ACPI_ALLOCATE (strlen (FilePathname) + 1);
+ strcpy (Pathname, FilePathname);
+ goto ConvertBackslashes;
+ }
+
+ /* Need a local copy of the prefix directory path */
+
+ CommonPath = ACPI_ALLOCATE (strlen (PrefixDir) + 1);
+ strcpy (CommonPath, PrefixDir);
+
+ /*
+ * Walk forward through the file path, and simultaneously backward
+ * through the prefix directory path until there are no more
+ * relative references at the start of the file path.
+ */
+ while (*FilePathname && (!strncmp (FilePathname, "../", 3)))
+ {
+ /* Remove last element of the prefix directory path */
+
+ LastElement = strrchr (CommonPath, '/');
+ if (!LastElement)
+ {
+ goto ConcatenatePaths;
+ }
+
+ *LastElement = 0; /* Terminate CommonPath string */
+ FilePathname += 3; /* Point to next path element */
+ }
+
+ /*
+ * Remove the last element of the prefix directory path (it is the same as
+ * the first element of the file pathname), and build the final merged
+ * pathname.
+ */
+ LastElement = strrchr (CommonPath, '/');
+ if (LastElement)
+ {
+ *LastElement = 0;
+ }
+
+ /* Build the final merged pathname */
+
+ConcatenatePaths:
+ Pathname = ACPI_ALLOCATE_ZEROED (strlen (CommonPath) + strlen (FilePathname) + 2);
+ if (LastElement && *CommonPath)
+ {
+ strcpy (Pathname, CommonPath);
+ strcat (Pathname, "/");
+ }
+ strcat (Pathname, FilePathname);
+ ACPI_FREE (CommonPath);
+
+ /* Convert all backslashes to normal slashes */
+
+ConvertBackslashes:
+ UtConvertBackslashes (Pathname);
+
+ DbgPrint (ASL_PARSE_OUTPUT, "Include: Merged Pathname - \"%s\"\n",
+ Pathname);
+ return (Pathname);
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: FlOpenIncludeWithPrefix
*
* PARAMETERS: PrefixDir - Prefix directory pathname. Can be a zero
@@ -515,12 +616,9 @@ FlOpenIncludeWithPrefix (
/* Build the full pathname to the file */
- Pathname = ACPI_ALLOCATE (strlen (PrefixDir) + strlen (Filename) + 1);
-
- strcpy (Pathname, PrefixDir);
- strcat (Pathname, Filename);
+ Pathname = FlMergePathnames (PrefixDir, Filename);
- DbgPrint (ASL_PARSE_OUTPUT, "\nAttempt to open include file: path %s\n\n",
+ DbgPrint (ASL_PARSE_OUTPUT, "Include: Opening file - \"%s\"\n\n",
Pathname);
/* Attempt to open the file, push if successful */
diff --git a/sys/contrib/dev/acpica/compiler/aslmain.c b/sys/contrib/dev/acpica/compiler/aslmain.c
index b5d944eb8837..4b6b99f5f0d5 100644
--- a/sys/contrib/dev/acpica/compiler/aslmain.c
+++ b/sys/contrib/dev/acpica/compiler/aslmain.c
@@ -765,9 +765,18 @@ AslDoOptions (
break;
case 'i':
- /* Less verbose error messages */
-
+ /*
+ * Support for integrated development environment(s).
+ *
+ * 1) No compiler signon
+ * 2) Send stderr messages to stdout
+ * 3) Less verbose error messages (single line only for each)
+ * 4) Error/warning messages are formatted appropriately to
+ * be recognized by MS Visual Studio
+ */
Gbl_VerboseErrors = FALSE;
+ Gbl_DoSignon = FALSE;
+ Gbl_Files[ASL_FILE_STDERR].Handle = stdout;
break;
case 'o':
diff --git a/sys/contrib/dev/acpica/compiler/aslmap.c b/sys/contrib/dev/acpica/compiler/aslmap.c
index 46d612c5b850..5278888830f5 100644
--- a/sys/contrib/dev/acpica/compiler/aslmap.c
+++ b/sys/contrib/dev/acpica/compiler/aslmap.c
@@ -367,6 +367,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* REGIONSPACE_IO */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_SYSTEM_IO, 0, 0),
/* REGIONSPACE_IPMI */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_IPMI, 0, 0),
/* REGIONSPACE_MEM */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_SYSTEM_MEMORY, 0, 0),
+/* REGIONSPACE_PCC */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_PLATFORM_COMM, 0, 0),
/* REGIONSPACE_PCI */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_PCI_CONFIG, 0, 0),
/* REGIONSPACE_PCIBAR */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_PCI_BAR_TARGET, 0, 0),
/* REGIONSPACE_SMBUS */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, ACPI_ADR_SPACE_SMBUS, 0, 0),
diff --git a/sys/contrib/dev/acpica/compiler/aslmessages.h b/sys/contrib/dev/acpica/compiler/aslmessages.h
index 45d50da19172..595e5f4c96db 100644
--- a/sys/contrib/dev/acpica/compiler/aslmessages.h
+++ b/sys/contrib/dev/acpica/compiler/aslmessages.h
@@ -402,7 +402,7 @@ char *AslMessages [] = {
};
-char *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = {
+const char *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = {
"Warning ",
"Warning ",
"Warning ",
@@ -411,6 +411,15 @@ char *AslErrorLevel [ASL_NUM_REPORT_LEVELS] = {
"Optimize"
};
+const char *AslErrorLevelIde [ASL_NUM_REPORT_LEVELS] = {
+ "warning ",
+ "warning ",
+ "warning ",
+ "error ",
+ "remark ",
+ "optimize"
+};
+
#define ASL_ERROR_LEVEL_LENGTH 8 /* Length of strings above */
#endif /* ASL_EXCEPTIONS */
diff --git a/sys/contrib/dev/acpica/compiler/aslstartup.c b/sys/contrib/dev/acpica/compiler/aslstartup.c
index 9c5ef15f3ffc..4011bde599af 100644
--- a/sys/contrib/dev/acpica/compiler/aslstartup.c
+++ b/sys/contrib/dev/acpica/compiler/aslstartup.c
@@ -227,7 +227,7 @@ AslDetectSourceFileType (
/* Check for 100% ASCII source file (comments are ignored) */
- Status = FlCheckForAscii (Info);
+ Status = FlCheckForAscii (Info->Handle, Info->Filename, TRUE);
if (ACPI_FAILURE (Status))
{
printf ("Non-ascii input file - %s\n", Info->Filename);
diff --git a/sys/contrib/dev/acpica/compiler/dtio.c b/sys/contrib/dev/acpica/compiler/dtio.c
index 633ed2d9a58f..1d08389d15c3 100644
--- a/sys/contrib/dev/acpica/compiler/dtio.c
+++ b/sys/contrib/dev/acpica/compiler/dtio.c
@@ -427,7 +427,6 @@ DtGetNextLine (
{
case DT_START_QUOTED_STRING:
case DT_SLASH_ASTERISK_COMMENT:
- case DT_SLASH_SLASH_COMMENT:
AcpiOsPrintf ("**** EOF within comment/string %u\n", State);
break;
@@ -436,7 +435,22 @@ DtGetNextLine (
break;
}
- return (ASL_EOF);
+ /* Standalone EOF is OK */
+
+ if (i == 0)
+ {
+ return (ASL_EOF);
+ }
+
+ /*
+ * Received an EOF in the middle of a line. Terminate the
+ * line with a newline. The next call to this function will
+ * return a standalone EOF. Thus, the upper parsing software
+ * never has to deal with an EOF within a valid line (or
+ * the last line does not get tossed on the floor.)
+ */
+ c = '\n';
+ State = DT_NORMAL_TEXT;
}
switch (State)
diff --git a/sys/contrib/dev/acpica/compiler/prscan.c b/sys/contrib/dev/acpica/compiler/prscan.c
index a47f07f3e583..233e45a38ad6 100644
--- a/sys/contrib/dev/acpica/compiler/prscan.c
+++ b/sys/contrib/dev/acpica/compiler/prscan.c
@@ -654,7 +654,7 @@ PrDoDirective (
}
DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
- "Start #include file %s\n", Gbl_CurrentLineNumber,
+ "Start #include file \"%s\"\n", Gbl_CurrentLineNumber,
Token, Gbl_CurrentLineNumber);
PrOpenIncludeFile (Token);
diff --git a/sys/contrib/dev/acpica/compiler/prutils.c b/sys/contrib/dev/acpica/compiler/prutils.c
index 0bbd8f5a3b26..8f9f24dc0181 100644
--- a/sys/contrib/dev/acpica/compiler/prutils.c
+++ b/sys/contrib/dev/acpica/compiler/prutils.c
@@ -246,13 +246,11 @@ PrOpenIncludeFile (
ASL_INCLUDE_DIR *NextDir;
- /*
- * start the actual include file on the next line
- */
+ /* Start the actual include file on the next line */
+
Gbl_CurrentLineOffset++;
/* Attempt to open the include file */
-
/* If the file specifies an absolute path, just open it */
if ((Filename[0] == '/') ||
@@ -330,13 +328,10 @@ PrOpenIncludeWithPrefix (
/* Build the full pathname to the file */
- Pathname = ACPI_ALLOCATE (strlen (PrefixDir) + strlen (Filename) + 1);
+ Pathname = FlMergePathnames (PrefixDir, Filename);
- strcpy (Pathname, PrefixDir);
- strcat (Pathname, Filename);
-
- DbgPrint (ASL_PARSE_OUTPUT, "\n" PR_PREFIX_ID
- "Opening include file: path %s\n",
+ DbgPrint (ASL_PARSE_OUTPUT, PR_PREFIX_ID
+ "Include: Opening file - \"%s\"\n",
Gbl_CurrentLineNumber, Pathname);
/* Attempt to open the file, push if successful */
diff --git a/sys/contrib/dev/acpica/components/debugger/dbfileio.c b/sys/contrib/dev/acpica/components/debugger/dbfileio.c
index a558e4266f78..f266fc19aeea 100644
--- a/sys/contrib/dev/acpica/components/debugger/dbfileio.c
+++ b/sys/contrib/dev/acpica/components/debugger/dbfileio.c
@@ -51,6 +51,10 @@
#include <contrib/dev/acpica/include/actables.h>
#endif
+#ifdef ACPI_ASL_COMPILER
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
+#endif
+
#if (defined ACPI_DEBUGGER || defined ACPI_DISASSEMBLER)
#define _COMPONENT ACPI_CA_DEBUGGER
@@ -309,6 +313,15 @@ AcpiDbReadTable (
AcpiOsPrintf (
"TableHeader length [0x%X] greater than the input file size [0x%X]\n",
TableHeader.Length, FileSize);
+
+#ifdef ACPI_ASL_COMPILER
+ Status = FlCheckForAscii (fp, NULL, FALSE);
+ if (ACPI_SUCCESS (Status))
+ {
+ AcpiOsPrintf ("File appears to be ASCII only, must be binary\n",
+ TableHeader.Length, FileSize);
+ }
+#endif
return (AE_BAD_HEADER);
}
diff --git a/sys/contrib/dev/acpica/components/dispatcher/dsfield.c b/sys/contrib/dev/acpica/components/dispatcher/dsfield.c
index ec3d5dd1bbd2..a55541466124 100644
--- a/sys/contrib/dev/acpica/components/dispatcher/dsfield.c
+++ b/sys/contrib/dev/acpica/components/dispatcher/dsfield.c
@@ -57,6 +57,18 @@
/* Local prototypes */
+#ifdef ACPI_ASL_COMPILER
+#include <contrib/dev/acpica/include/acdisasm.h>
+
+static ACPI_STATUS
+AcpiDsCreateExternalRegion (
+ ACPI_STATUS LookupStatus,
+ ACPI_PARSE_OBJECT *Op,
+ char *Path,
+ ACPI_WALK_STATE *WalkState,
+ ACPI_NAMESPACE_NODE **Node);
+#endif
+
static ACPI_STATUS
AcpiDsGetFieldNames (
ACPI_CREATE_FIELD_INFO *Info,
@@ -64,6 +76,69 @@ AcpiDsGetFieldNames (
ACPI_PARSE_OBJECT *Arg);
+#ifdef ACPI_ASL_COMPILER
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiDsCreateExternalRegion (iASL Disassembler only)
+ *
+ * PARAMETERS: LookupStatus - Status from NsLookup operation
+ * Op - Op containing the Field definition and args
+ * Path - Pathname of the region
+ * ` WalkState - Current method state
+ * Node - Where the new region node is returned
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Add region to the external list if NOT_FOUND. Create a new
+ * region node/object.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+AcpiDsCreateExternalRegion (
+ ACPI_STATUS LookupStatus,
+ ACPI_PARSE_OBJECT *Op,
+ char *Path,
+ ACPI_WALK_STATE *WalkState,
+ ACPI_NAMESPACE_NODE **Node)
+{
+ ACPI_STATUS Status;
+ ACPI_OPERAND_OBJECT *ObjDesc;
+
+
+ if (LookupStatus != AE_NOT_FOUND)
+ {
+ return (LookupStatus);
+ }
+
+ /*
+ * Table disassembly:
+ * OperationRegion not found. Generate an External for it, and
+ * insert the name into the namespace.
+ */
+ AcpiDmAddToExternalList (Op, Path, ACPI_TYPE_REGION, 0);
+ Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_REGION,
+ ACPI_IMODE_LOAD_PASS1, ACPI_NS_SEARCH_PARENT, WalkState, Node);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ /* Must create and install a region object for the new node */
+
+ ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_REGION);
+ if (!ObjDesc)
+ {
+ return (AE_NO_MEMORY);
+ }
+
+ ObjDesc->Region.Node = *Node;
+ Status = AcpiNsAttachObject (*Node, ObjDesc, ACPI_TYPE_REGION);
+ return (Status);
+}
+#endif
+
+
/*******************************************************************************
*
* FUNCTION: AcpiDsCreateBufferField
@@ -438,11 +513,16 @@ AcpiDsCreateField (
/* First arg is the name of the parent OpRegion (must already exist) */
Arg = Op->Common.Value.Arg;
+
if (!RegionNode)
{
Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.Name,
ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE,
ACPI_NS_SEARCH_PARENT, WalkState, &RegionNode);
+#ifdef ACPI_ASL_COMPILER
+ Status = AcpiDsCreateExternalRegion (Status, Arg,
+ Arg->Common.Value.Name, WalkState, &RegionNode);
+#endif
if (ACPI_FAILURE (Status))
{
ACPI_ERROR_NAMESPACE (Arg->Common.Value.Name, Status);
@@ -628,6 +708,10 @@ AcpiDsCreateBankField (
Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.Name,
ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE,
ACPI_NS_SEARCH_PARENT, WalkState, &RegionNode);
+#ifdef ACPI_ASL_COMPILER
+ Status = AcpiDsCreateExternalRegion (Status, Arg,
+ Arg->Common.Value.Name, WalkState, &RegionNode);
+#endif
if (ACPI_FAILURE (Status))
{
ACPI_ERROR_NAMESPACE (Arg->Common.Value.Name, Status);
diff --git a/sys/contrib/dev/acpica/components/events/evxface.c b/sys/contrib/dev/acpica/components/events/evxface.c
index 5634ad757fb0..4027dce11ee5 100644
--- a/sys/contrib/dev/acpica/components/events/evxface.c
+++ b/sys/contrib/dev/acpica/components/events/evxface.c
@@ -280,11 +280,9 @@ AcpiRemoveNotifyHandler (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
-#ifdef _UNDER_DEVELOPMENT
- /* Make sure all deferred tasks are completed */
+ /* Make sure all deferred notify tasks are completed */
- AcpiOsWaitEventsComplete (NULL);
-#endif
+ AcpiOsWaitEventsComplete ();
Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE (Status))
@@ -802,6 +800,10 @@ AcpiRemoveGpeHandler (
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
+ /* Make sure all deferred GPE tasks are completed */
+
+ AcpiOsWaitEventsComplete ();
+
Status = AcpiUtAcquireMutex (ACPI_MTX_EVENTS);
if (ACPI_FAILURE (Status))
{
diff --git a/sys/contrib/dev/acpica/components/tables/tbfadt.c b/sys/contrib/dev/acpica/components/tables/tbfadt.c
index c6ba47f0ed34..cbf842621cb2 100644
--- a/sys/contrib/dev/acpica/components/tables/tbfadt.c
+++ b/sys/contrib/dev/acpica/components/tables/tbfadt.c
@@ -52,12 +52,13 @@
/* Local prototypes */
-static ACPI_INLINE void
+static void
AcpiTbInitGenericAddress (
ACPI_GENERIC_ADDRESS *GenericAddress,
UINT8 SpaceId,
UINT8 ByteWidth,
- UINT64 Address);
+ UINT64 Address,
+ char *RegisterName);
static void
AcpiTbConvertFadt (
@@ -202,13 +203,30 @@ static ACPI_FADT_PM_INFO FadtPmInfoTable[] =
*
******************************************************************************/
-static ACPI_INLINE void
+static void
AcpiTbInitGenericAddress (
ACPI_GENERIC_ADDRESS *GenericAddress,
UINT8 SpaceId,
UINT8 ByteWidth,
- UINT64 Address)
+ UINT64 Address,
+ char *RegisterName)
{
+ UINT8 BitWidth;
+
+
+ /* Bit width field in the GAS is only one byte long, 255 max */
+
+ BitWidth = (UINT8) (ByteWidth * 8);
+
+ if (ByteWidth > 31) /* (31*8)=248 */
+ {
+ ACPI_ERROR ((AE_INFO,
+ "%s - 32-bit FADT register is too long (%u bytes, %u bits) "
+ "to convert to GAS struct - 255 bits max, truncating",
+ RegisterName, ByteWidth, (ByteWidth * 8)));
+
+ BitWidth = 255;
+ }
/*
* The 64-bit Address field is non-aligned in the byte packed
@@ -219,7 +237,7 @@ AcpiTbInitGenericAddress (
/* All other fields are byte-wide */
GenericAddress->SpaceId = SpaceId;
- GenericAddress->BitWidth = (UINT8) ACPI_MUL_8 (ByteWidth);
+ GenericAddress->BitWidth = BitWidth;
GenericAddress->BitOffset = 0;
GenericAddress->AccessWidth = 0; /* Access width ANY */
}
@@ -484,7 +502,7 @@ AcpiTbConvertFadt (
*/
AcpiTbInitGenericAddress (Address64, ACPI_ADR_SPACE_SYSTEM_IO,
*ACPI_ADD_PTR (UINT8, &AcpiGbl_FADT, FadtInfoTable[i].Length),
- (UINT64) Address32);
+ (UINT64) Address32, FadtInfoTable[i].Name);
}
}
}
@@ -700,7 +718,8 @@ AcpiTbSetupFadtRegisters (
AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target,
Source64->SpaceId, Pm1RegisterByteWidth,
Source64->Address +
- (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth));
+ (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth),
+ "PmRegisters");
}
}
}
diff --git a/sys/contrib/dev/acpica/components/utilities/utmisc.c b/sys/contrib/dev/acpica/components/utilities/utmisc.c
index 281bb0f65d41..fc10f8cf165e 100644
--- a/sys/contrib/dev/acpica/components/utilities/utmisc.c
+++ b/sys/contrib/dev/acpica/components/utilities/utmisc.c
@@ -55,6 +55,41 @@
/*******************************************************************************
*
+ * FUNCTION: UtConvertBackslashes
+ *
+ * PARAMETERS: Pathname - File pathname string to be converted
+ *
+ * RETURN: Modifies the input Pathname
+ *
+ * DESCRIPTION: Convert all backslashes (0x5C) to forward slashes (0x2F) within
+ * the entire input file pathname string.
+ *
+ ******************************************************************************/
+
+void
+UtConvertBackslashes (
+ char *Pathname)
+{
+
+ if (!Pathname)
+ {
+ return;
+ }
+
+ while (*Pathname)
+ {
+ if (*Pathname == '\\')
+ {
+ *Pathname = '/';
+ }
+
+ Pathname++;
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiUtValidateException
*
* PARAMETERS: Status - The ACPI_STATUS code to be formatted
diff --git a/sys/contrib/dev/acpica/include/acobject.h b/sys/contrib/dev/acpica/include/acobject.h
index f2f8a1cfb112..e0f4a5259863 100644
--- a/sys/contrib/dev/acpica/include/acobject.h
+++ b/sys/contrib/dev/acpica/include/acobject.h
@@ -94,7 +94,7 @@
#define AOPOBJ_AML_CONSTANT 0x01 /* Integer is an AML constant */
#define AOPOBJ_STATIC_POINTER 0x02 /* Data is part of an ACPI table, don't delete */
-#define AOPOBJ_DATA_VALID 0x04 /* Object is intialized and data is valid */
+#define AOPOBJ_DATA_VALID 0x04 /* Object is initialized and data is valid */
#define AOPOBJ_OBJECT_INITIALIZED 0x08 /* Region is initialized, _REG was run */
#define AOPOBJ_SETUP_COMPLETE 0x10 /* Region setup is complete */
#define AOPOBJ_INVALID 0x20 /* Host OS won't allow a Region address */
@@ -124,7 +124,7 @@ typedef struct acpi_object_integer
/*
* Note: The String and Buffer object must be identical through the Pointer
- * and length elements. There is code that depends on this.
+ * and Length elements. There is code that depends on this.
*
* Fields common to both Strings and Buffers
*/
@@ -389,7 +389,7 @@ typedef struct acpi_object_notify_handler
ACPI_OBJECT_COMMON_HEADER
ACPI_NAMESPACE_NODE *Node; /* Parent device */
UINT32 HandlerType; /* Type: Device/System/Both */
- ACPI_NOTIFY_HANDLER Handler; /* Handler addess */
+ ACPI_NOTIFY_HANDLER Handler; /* Handler address */
void *Context;
union acpi_operand_object *Next[2]; /* Device and System handler lists */
@@ -405,7 +405,7 @@ typedef struct acpi_object_addr_handler
ACPI_NAMESPACE_NODE *Node; /* Parent device */
void *Context;
ACPI_ADR_SPACE_SETUP Setup;
- union acpi_operand_object *RegionList; /* regions using this handler */
+ union acpi_operand_object *RegionList; /* Regions using this handler */
union acpi_operand_object *Next;
} ACPI_OBJECT_ADDR_HANDLER;
diff --git a/sys/contrib/dev/acpica/include/acpiosxf.h b/sys/contrib/dev/acpica/include/acpiosxf.h
index 8106d8a8ecbe..c7280e76f264 100644
--- a/sys/contrib/dev/acpica/include/acpiosxf.h
+++ b/sys/contrib/dev/acpica/include/acpiosxf.h
@@ -275,7 +275,7 @@ AcpiOsExecute (
void
AcpiOsWaitEventsComplete (
- void *Context);
+ void);
void
AcpiOsSleep (
diff --git a/sys/contrib/dev/acpica/include/acpixf.h b/sys/contrib/dev/acpica/include/acpixf.h
index ff391e8cb170..2d27e693e801 100644
--- a/sys/contrib/dev/acpica/include/acpixf.h
+++ b/sys/contrib/dev/acpica/include/acpixf.h
@@ -48,7 +48,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20120420
+#define ACPI_CA_VERSION 0x20120518
#include <contrib/dev/acpica/include/acconfig.h>
#include <contrib/dev/acpica/include/actypes.h>
diff --git a/sys/contrib/dev/acpica/include/actypes.h b/sys/contrib/dev/acpica/include/actypes.h
index 4a5188544e77..53ebc91b0863 100644
--- a/sys/contrib/dev/acpica/include/actypes.h
+++ b/sys/contrib/dev/acpica/include/actypes.h
@@ -731,8 +731,9 @@ typedef UINT8 ACPI_ADR_SPACE_TYPE;
#define ACPI_ADR_SPACE_IPMI (ACPI_ADR_SPACE_TYPE) 7
#define ACPI_ADR_SPACE_GPIO (ACPI_ADR_SPACE_TYPE) 8
#define ACPI_ADR_SPACE_GSBUS (ACPI_ADR_SPACE_TYPE) 9
+#define ACPI_ADR_SPACE_PLATFORM_COMM (ACPI_ADR_SPACE_TYPE) 10
-#define ACPI_NUM_PREDEFINED_REGIONS 10
+#define ACPI_NUM_PREDEFINED_REGIONS 11
/*
* Special Address Spaces
diff --git a/sys/contrib/dev/acpica/include/acutils.h b/sys/contrib/dev/acpica/include/acutils.h
index e9c9b95dda1d..be568766af69 100644
--- a/sys/contrib/dev/acpica/include/acutils.h
+++ b/sys/contrib/dev/acpica/include/acutils.h
@@ -703,6 +703,10 @@ AcpiUtShortDivide (
/*
* utmisc
*/
+void
+UtConvertBackslashes (
+ char *Pathname);
+
const char *
AcpiUtValidateException (
ACPI_STATUS Status);
diff --git a/sys/contrib/dev/acpica/os_specific/service_layers/osunixxf.c b/sys/contrib/dev/acpica/os_specific/service_layers/osunixxf.c
index 189bfcdd9551..5be58a7e523e 100644
--- a/sys/contrib/dev/acpica/os_specific/service_layers/osunixxf.c
+++ b/sys/contrib/dev/acpica/os_specific/service_layers/osunixxf.c
@@ -1241,3 +1241,24 @@ AcpiOsExecute (
}
#endif /* ACPI_SINGLE_THREADED */
+
+
+/******************************************************************************
+ *
+ * FUNCTION: AcpiOsWaitEventsComplete
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Wait for all asynchronous events to complete. This
+ * implementation does nothing.
+ *
+ *****************************************************************************/
+
+void
+AcpiOsWaitEventsComplete (
+ void)
+{
+ return;
+}
diff --git a/sys/dev/acpica/Osd/OsdSchedule.c b/sys/dev/acpica/Osd/OsdSchedule.c
index c05ae93d4ffb..6d517cb3011d 100644
--- a/sys/dev/acpica/Osd/OsdSchedule.c
+++ b/sys/dev/acpica/Osd/OsdSchedule.c
@@ -215,6 +215,20 @@ AcpiOsExecute(ACPI_EXECUTE_TYPE Type, ACPI_OSD_EXEC_CALLBACK Function,
}
void
+AcpiOsWaitEventsComplete(void)
+{
+ int i;
+
+ ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
+
+ for (i = 0; i < acpi_max_tasks; i++)
+ if ((atomic_load_acq_int(&acpi_tasks[i].at_flag) &
+ ACPI_TASK_ENQUEUED) != 0)
+ taskqueue_drain(acpi_taskq, &acpi_tasks[i].at_task);
+ return_VOID;
+}
+
+void
AcpiOsSleep(UINT64 Milliseconds)
{
int timo;
diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c
index a4038b3fc99f..41cd9f1030fc 100644
--- a/sys/dev/acpica/acpi.c
+++ b/sys/dev/acpica/acpi.c
@@ -289,13 +289,6 @@ SYSCTL_INT(_debug_acpi, OID_AUTO, reset_clock, CTLFLAG_RW,
&acpi_reset_clock, 1, "Reset system clock while resuming.");
#endif
-/* Allow users to ignore processor orders in MADT. */
-static int acpi_cpu_unordered;
-TUNABLE_INT("debug.acpi.cpu_unordered", &acpi_cpu_unordered);
-SYSCTL_INT(_debug_acpi, OID_AUTO, cpu_unordered, CTLFLAG_RDTUN,
- &acpi_cpu_unordered, 0,
- "Do not use the MADT to match ACPI Processor objects to CPUs.");
-
/* Allow users to override quirks. */
TUNABLE_INT("debug.acpi.quirks", &acpi_quirks);
@@ -1863,15 +1856,11 @@ static ACPI_STATUS
acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status)
{
struct acpi_prw_data prw;
- ACPI_BUFFER buf;
- ACPI_OBJECT obj;
ACPI_OBJECT_TYPE type;
ACPI_HANDLE h;
- struct pcpu *pc;
device_t bus, child;
char *handle_str;
- u_int cpuid;
- int order, unit;
+ int order;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
@@ -1909,31 +1898,6 @@ acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status)
case ACPI_TYPE_PROCESSOR:
case ACPI_TYPE_THERMAL:
case ACPI_TYPE_POWER:
- unit = -1;
- if (type == ACPI_TYPE_PROCESSOR && acpi_cpu_unordered == 0) {
- ACPI_STATUS s;
- buf.Pointer = &obj;
- buf.Length = sizeof(obj);
- s = AcpiEvaluateObject(handle, NULL, NULL, &buf);
- if (ACPI_SUCCESS(s)) {
- CPU_FOREACH(cpuid) {
- pc = pcpu_find(cpuid);
- if (pc->pc_acpi_id == obj.Processor.ProcId) {
- unit = cpuid;
- if (bootverbose)
- printf("ACPI: %s (ACPI ID %u) -> cpu%d\n",
- handle_str, obj.Processor.ProcId, unit);
- break;
- }
- }
- if (unit == -1) {
- if (bootverbose)
- printf("ACPI: %s (ACPI ID %u) ignored\n",
- handle_str, obj.Processor.ProcId);
- break;
- }
- }
- }
/*
* Create a placeholder device for this node. Sort the
* placeholder so that the probe/attach passes will run
@@ -1944,7 +1908,7 @@ acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status)
ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "scanning '%s'\n", handle_str));
order = level * 10 + ACPI_DEV_BASE_ORDER;
acpi_probe_order(handle, &order);
- child = BUS_ADD_CHILD(bus, order, NULL, unit);
+ child = BUS_ADD_CHILD(bus, order, NULL, -1);
if (child == NULL)
break;
@@ -2485,15 +2449,29 @@ acpi_SetSleepState(struct acpi_softc *sc, int state)
#if defined(__amd64__) || defined(__i386__)
static void
+acpi_sleep_force_task(void *context)
+{
+ struct acpi_softc *sc = (struct acpi_softc *)context;
+
+ if (ACPI_FAILURE(acpi_EnterSleepState(sc, sc->acpi_next_sstate)))
+ device_printf(sc->acpi_dev, "force sleep state S%d failed\n",
+ sc->acpi_next_sstate);
+}
+
+static void
acpi_sleep_force(void *arg)
{
struct acpi_softc *sc = (struct acpi_softc *)arg;
device_printf(sc->acpi_dev,
"suspend request timed out, forcing sleep now\n");
- if (ACPI_FAILURE(acpi_EnterSleepState(sc, sc->acpi_next_sstate)))
- device_printf(sc->acpi_dev, "force sleep state S%d failed\n",
- sc->acpi_next_sstate);
+ /*
+ * XXX Suspending from callout cause the freeze in DEVICE_SUSPEND().
+ * Suspend from acpi_task thread in stead.
+ */
+ if (ACPI_FAILURE(AcpiOsExecute(OSL_NOTIFY_HANDLER,
+ acpi_sleep_force_task, sc)))
+ device_printf(sc->acpi_dev, "AcpiOsExecute() for sleeping failed\n");
}
#endif
@@ -2515,14 +2493,20 @@ acpi_ReqSleepState(struct acpi_softc *sc, int state)
if (!acpi_sleep_states[state])
return (EOPNOTSUPP);
- ACPI_LOCK(acpi);
-
/* If a suspend request is already in progress, just return. */
if (sc->acpi_next_sstate != 0) {
- ACPI_UNLOCK(acpi);
return (0);
}
+ /* Wait until sleep is enabled. */
+ while (sc->acpi_sleep_disabled) {
+ AcpiOsSleep(1000);
+ }
+
+ ACPI_LOCK(acpi);
+
+ sc->acpi_next_sstate = state;
+
/* S5 (soft-off) should be entered directly with no waiting. */
if (state == ACPI_STATE_S5) {
ACPI_UNLOCK(acpi);
@@ -2531,7 +2515,6 @@ acpi_ReqSleepState(struct acpi_softc *sc, int state)
}
/* Record the pending state and notify all apm devices. */
- sc->acpi_next_sstate = state;
STAILQ_FOREACH(clone, &sc->apm_cdevs, entries) {
clone->notify_status = APM_EV_NONE;
if ((clone->flags & ACPI_EVF_DEVD) == 0) {
@@ -2790,12 +2773,12 @@ backout:
acpi_wake_prep_walk(state);
sc->acpi_sstate = ACPI_STATE_S0;
}
+ if (slp_state >= ACPI_SS_DEV_SUSPEND)
+ DEVICE_RESUME(root_bus);
if (slp_state >= ACPI_SS_SLP_PREP) {
AcpiLeaveSleepStatePrep(state, acpi_sleep_flags);
AcpiLeaveSleepState(state);
}
- if (slp_state >= ACPI_SS_DEV_SUSPEND)
- DEVICE_RESUME(root_bus);
if (slp_state >= ACPI_SS_SLEPT) {
acpi_resync_clock(sc);
acpi_enable_fixed_events(sc);
diff --git a/sys/dev/acpica/acpi_cpu.c b/sys/dev/acpica/acpi_cpu.c
index 29034e1873e0..b70677611934 100644
--- a/sys/dev/acpica/acpi_cpu.c
+++ b/sys/dev/acpica/acpi_cpu.c
@@ -124,6 +124,13 @@ struct acpi_cpu_device {
#define PIIX4_STOP_BREAK_MASK (PIIX4_BRLD_EN_IRQ0 | PIIX4_BRLD_EN_IRQ | PIIX4_BRLD_EN_IRQ8)
#define PIIX4_PCNTRL_BST_EN (1<<10)
+/* Allow users to ignore processor orders in MADT. */
+static int cpu_unordered;
+TUNABLE_INT("debug.acpi.cpu_unordered", &cpu_unordered);
+SYSCTL_INT(_debug_acpi, OID_AUTO, cpu_unordered, CTLFLAG_RDTUN,
+ &cpu_unordered, 0,
+ "Do not use the MADT to match ACPI Processor objects to CPUs.");
+
/* Platform hardware resource information. */
static uint32_t cpu_smi_cmd; /* Value to write to SMI_CMD. */
static uint8_t cpu_cst_cnt; /* Indicate we are _CST aware. */
@@ -148,7 +155,7 @@ static int acpi_cpu_probe(device_t dev);
static int acpi_cpu_attach(device_t dev);
static int acpi_cpu_suspend(device_t dev);
static int acpi_cpu_resume(device_t dev);
-static int acpi_pcpu_get_id(uint32_t idx, uint32_t *acpi_id,
+static int acpi_pcpu_get_id(device_t dev, uint32_t *acpi_id,
uint32_t *cpu_id);
static struct resource_list *acpi_cpu_get_rlist(device_t dev, device_t child);
static device_t acpi_cpu_add_child(device_t dev, u_int order, const char *name,
@@ -245,7 +252,7 @@ acpi_cpu_probe(device_t dev)
*/
acpi_id = obj->Processor.ProcId;
AcpiOsFree(obj);
- if (acpi_pcpu_get_id(device_get_unit(dev), &acpi_id, &cpu_id) != 0)
+ if (acpi_pcpu_get_id(dev, &acpi_id, &cpu_id) != 0)
return (ENXIO);
/*
@@ -436,36 +443,66 @@ acpi_cpu_resume(device_t dev)
}
/*
- * Find the nth present CPU and return its pc_cpuid as well as set the
- * pc_acpi_id from the most reliable source.
+ * Find the processor associated with a given ACPI ID. By default,
+ * use the MADT to map ACPI IDs to APIC IDs and use that to locate a
+ * processor. Some systems have inconsistent ASL and MADT however.
+ * For these systems the cpu_unordered tunable can be set in which
+ * case we assume that Processor objects are listed in the same order
+ * in both the MADT and ASL.
*/
static int
-acpi_pcpu_get_id(uint32_t idx, uint32_t *acpi_id, uint32_t *cpu_id)
+acpi_pcpu_get_id(device_t dev, uint32_t *acpi_id, uint32_t *cpu_id)
{
- struct pcpu *pcpu_data;
- uint32_t i;
+ struct pcpu *pc;
+ uint32_t i, idx;
KASSERT(acpi_id != NULL, ("Null acpi_id"));
KASSERT(cpu_id != NULL, ("Null cpu_id"));
+ idx = device_get_unit(dev);
+
+ /*
+ * If pc_acpi_id for CPU 0 is not initialized (e.g. a non-APIC
+ * UP box) use the ACPI ID from the first processor we find.
+ */
+ if (idx == 0 && mp_ncpus == 1) {
+ pc = pcpu_find(0);
+ if (pc->pc_acpi_id == 0xffffffff)
+ pc->pc_acpi_id = *acpi_id;
+ *cpu_id = 0;
+ return (0);
+ }
+
CPU_FOREACH(i) {
- pcpu_data = pcpu_find(i);
- KASSERT(pcpu_data != NULL, ("no pcpu data for %d", i));
- if (idx-- == 0) {
- /*
- * If pc_acpi_id was not initialized (e.g., a non-APIC UP box)
- * override it with the value from the ASL. Otherwise, if the
- * two don't match, prefer the MADT-derived value. Finally,
- * return the pc_cpuid to reference this processor.
- */
- if (pcpu_data->pc_acpi_id == 0xffffffff)
- pcpu_data->pc_acpi_id = *acpi_id;
- else if (pcpu_data->pc_acpi_id != *acpi_id)
- *acpi_id = pcpu_data->pc_acpi_id;
- *cpu_id = pcpu_data->pc_cpuid;
- return (0);
+ pc = pcpu_find(i);
+ KASSERT(pc != NULL, ("no pcpu data for %d", i));
+ if (cpu_unordered) {
+ if (idx-- == 0) {
+ /*
+ * If pc_acpi_id doesn't match the ACPI ID from the
+ * ASL, prefer the MADT-derived value.
+ */
+ if (pc->pc_acpi_id != *acpi_id)
+ *acpi_id = pc->pc_acpi_id;
+ *cpu_id = pc->pc_cpuid;
+ return (0);
+ }
+ } else {
+ if (pc->pc_acpi_id == *acpi_id) {
+ if (bootverbose)
+ device_printf(dev,
+ "Processor %s (ACPI ID %u) -> APIC ID %d\n",
+ acpi_name(acpi_get_handle(dev)), *acpi_id,
+ pc->pc_cpuid);
+ *cpu_id = pc->pc_cpuid;
+ return (0);
+ }
}
}
+ if (bootverbose)
+ printf("ACPI: Processor %s (ACPI ID %u) ignored\n",
+ acpi_name(acpi_get_handle(dev)), *acpi_id);
+
return (ESRCH);
}
diff --git a/sys/dev/acpica/acpi_ec.c b/sys/dev/acpica/acpi_ec.c
index f8af33c454b2..46e17d39d563 100644
--- a/sys/dev/acpica/acpi_ec.c
+++ b/sys/dev/acpica/acpi_ec.c
@@ -178,7 +178,6 @@ struct acpi_ec_softc {
ACPI_SERIAL_DECL(ec, "ACPI embedded controller");
-SYSCTL_DECL(_debug_acpi);
static SYSCTL_NODE(_debug_acpi, OID_AUTO, ec, CTLFLAG_RD, NULL, "EC debugging");
static int ec_burst_mode;
diff --git a/sys/dev/acpica/acpi_smbat.c b/sys/dev/acpica/acpi_smbat.c
index 06477724b15c..f83392ff3f83 100644
--- a/sys/dev/acpica/acpi_smbat.c
+++ b/sys/dev/acpica/acpi_smbat.c
@@ -62,7 +62,6 @@ static int acpi_smbat_get_bst(device_t dev, struct acpi_bst *bst);
ACPI_SERIAL_DECL(smbat, "ACPI Smart Battery");
-SYSCTL_DECL(_debug_acpi);
static SYSCTL_NODE(_debug_acpi, OID_AUTO, batt, CTLFLAG_RD, NULL,
"Battery debugging");
diff --git a/sys/dev/acpica/acpivar.h b/sys/dev/acpica/acpivar.h
index 5791ca5683a7..a1892ea4d3fd 100644
--- a/sys/dev/acpica/acpivar.h
+++ b/sys/dev/acpica/acpivar.h
@@ -492,5 +492,7 @@ ACPI_HANDLE acpi_GetReference(ACPI_HANDLE scope, ACPI_OBJECT *obj);
/* Use the device logging level for ktr(4). */
#define KTR_ACPI KTR_DEV
+SYSCTL_DECL(_debug_acpi);
+
#endif /* _KERNEL */
#endif /* !_ACPIVAR_H_ */
diff --git a/sys/dev/agp/agp.c b/sys/dev/agp/agp.c
index 6e5aa358b24e..ccd7f517fbc3 100644
--- a/sys/dev/agp/agp.c
+++ b/sys/dev/agp/agp.c
@@ -239,7 +239,8 @@ agp_generic_attach(device_t dev)
if (memsize <= agp_max[i][0])
break;
}
- if (i == agp_max_size) i = agp_max_size - 1;
+ if (i == agp_max_size)
+ i = agp_max_size - 1;
sc->as_maxmem = agp_max[i][1] << 20U;
/*
@@ -803,6 +804,13 @@ agp_unbind_user(device_t dev, agp_unbind *unbind)
}
static int
+agp_chipset_flush(device_t dev)
+{
+
+ return (AGP_CHIPSET_FLUSH(dev));
+}
+
+static int
agp_open(struct cdev *kdev, int oflags, int devtype, struct thread *td)
{
device_t dev = kdev->si_drv1;
@@ -869,6 +877,8 @@ agp_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int fflag, struct thread
case AGPIOC_UNBIND:
return agp_unbind_user(dev, (agp_unbind *)data);
+ case AGPIOC_CHIPSET_FLUSH:
+ return agp_chipset_flush(dev);
}
return EINVAL;
diff --git a/sys/dev/agp/agp_i810.c b/sys/dev/agp/agp_i810.c
index ff3ad1c614aa..a181ad7e43d0 100644
--- a/sys/dev/agp/agp_i810.c
+++ b/sys/dev/agp/agp_i810.c
@@ -1,8 +1,12 @@
/*-
* Copyright (c) 2000 Doug Rabson
* Copyright (c) 2000 Ruslan Ermilov
+ * Copyright (c) 2011 The FreeBSD Foundation
* All rights reserved.
*
+ * Portions of this software were developed by Konstantin Belousov
+ * 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:
@@ -28,6 +32,9 @@
/*
* Fixes for 830/845G support: David Dawes <dawes@xfree86.org>
* 852GM/855GM/865G support added by David Dawes <dawes@xfree86.org>
+ *
+ * This is generic Intel GTT handling code, morphed from the AGP
+ * bridge code.
*/
#include <sys/cdefs.h>
@@ -35,10 +42,17 @@ __FBSDID("$FreeBSD$");
#include "opt_bus.h"
+#if 0
+#define KTR_AGP_I810 KTR_DEV
+#else
+#define KTR_AGP_I810 0
+#endif
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/malloc.h>
#include <sys/kernel.h>
+#include <sys/ktr.h>
#include <sys/module.h>
#include <sys/bus.h>
#include <sys/lock.h>
@@ -47,8 +61,10 @@ __FBSDID("$FreeBSD$");
#include <dev/agp/agppriv.h>
#include <dev/agp/agpreg.h>
+#include <dev/agp/agp_i810.h>
#include <dev/pci/pcivar.h>
#include <dev/pci/pcireg.h>
+#include <dev/pci/pci_private.h>
#include <vm/vm.h>
#include <vm/vm_object.h>
@@ -63,6 +79,88 @@ __FBSDID("$FreeBSD$");
MALLOC_DECLARE(M_AGP);
+struct agp_i810_match;
+
+static int agp_i810_check_active(device_t bridge_dev);
+static int agp_i830_check_active(device_t bridge_dev);
+static int agp_i915_check_active(device_t bridge_dev);
+static int agp_sb_check_active(device_t bridge_dev);
+
+static void agp_82852_set_desc(device_t dev,
+ const struct agp_i810_match *match);
+static void agp_i810_set_desc(device_t dev, const struct agp_i810_match *match);
+
+static void agp_i810_dump_regs(device_t dev);
+static void agp_i830_dump_regs(device_t dev);
+static void agp_i855_dump_regs(device_t dev);
+static void agp_i915_dump_regs(device_t dev);
+static void agp_i965_dump_regs(device_t dev);
+static void agp_sb_dump_regs(device_t dev);
+
+static int agp_i810_get_stolen_size(device_t dev);
+static int agp_i830_get_stolen_size(device_t dev);
+static int agp_i915_get_stolen_size(device_t dev);
+static int agp_sb_get_stolen_size(device_t dev);
+
+static int agp_i810_get_gtt_mappable_entries(device_t dev);
+static int agp_i830_get_gtt_mappable_entries(device_t dev);
+static int agp_i915_get_gtt_mappable_entries(device_t dev);
+
+static int agp_i810_get_gtt_total_entries(device_t dev);
+static int agp_i965_get_gtt_total_entries(device_t dev);
+static int agp_gen5_get_gtt_total_entries(device_t dev);
+static int agp_sb_get_gtt_total_entries(device_t dev);
+
+static int agp_i810_install_gatt(device_t dev);
+static int agp_i830_install_gatt(device_t dev);
+
+static void agp_i810_deinstall_gatt(device_t dev);
+static void agp_i830_deinstall_gatt(device_t dev);
+
+static void agp_i810_install_gtt_pte(device_t dev, u_int index,
+ vm_offset_t physical, int flags);
+static void agp_i830_install_gtt_pte(device_t dev, u_int index,
+ vm_offset_t physical, int flags);
+static void agp_i915_install_gtt_pte(device_t dev, u_int index,
+ vm_offset_t physical, int flags);
+static void agp_i965_install_gtt_pte(device_t dev, u_int index,
+ vm_offset_t physical, int flags);
+static void agp_g4x_install_gtt_pte(device_t dev, u_int index,
+ vm_offset_t physical, int flags);
+static void agp_sb_install_gtt_pte(device_t dev, u_int index,
+ vm_offset_t physical, int flags);
+
+static void agp_i810_write_gtt(device_t dev, u_int index, uint32_t pte);
+static void agp_i915_write_gtt(device_t dev, u_int index, uint32_t pte);
+static void agp_i965_write_gtt(device_t dev, u_int index, uint32_t pte);
+static void agp_g4x_write_gtt(device_t dev, u_int index, uint32_t pte);
+static void agp_sb_write_gtt(device_t dev, u_int index, uint32_t pte);
+
+static u_int32_t agp_i810_read_gtt_pte(device_t dev, u_int index);
+static u_int32_t agp_i915_read_gtt_pte(device_t dev, u_int index);
+static u_int32_t agp_i965_read_gtt_pte(device_t dev, u_int index);
+static u_int32_t agp_g4x_read_gtt_pte(device_t dev, u_int index);
+
+static vm_paddr_t agp_i810_read_gtt_pte_paddr(device_t dev, u_int index);
+static vm_paddr_t agp_i915_read_gtt_pte_paddr(device_t dev, u_int index);
+static vm_paddr_t agp_sb_read_gtt_pte_paddr(device_t dev, u_int index);
+
+static int agp_i810_set_aperture(device_t dev, u_int32_t aperture);
+static int agp_i830_set_aperture(device_t dev, u_int32_t aperture);
+static int agp_i915_set_aperture(device_t dev, u_int32_t aperture);
+
+static int agp_i810_chipset_flush_setup(device_t dev);
+static int agp_i915_chipset_flush_setup(device_t dev);
+static int agp_i965_chipset_flush_setup(device_t dev);
+
+static void agp_i810_chipset_flush_teardown(device_t dev);
+static void agp_i915_chipset_flush_teardown(device_t dev);
+static void agp_i965_chipset_flush_teardown(device_t dev);
+
+static void agp_i810_chipset_flush(device_t dev);
+static void agp_i830_chipset_flush(device_t dev);
+static void agp_i915_chipset_flush(device_t dev);
+
enum {
CHIP_I810, /* i810/i815 */
CHIP_I830, /* 830M/845G */
@@ -72,6 +170,7 @@ enum {
CHIP_G33, /* G33/Q33/Q35 */
CHIP_IGD, /* Pineview */
CHIP_G4X, /* G45/Q45 */
+ CHIP_SB, /* SandyBridge */
};
/* The i810 through i855 have the registers at BAR 1, and the GATT gets
@@ -96,19 +195,308 @@ static struct resource_spec agp_i965_res_spec[] = {
{ -1, 0 }
};
+static struct resource_spec agp_g4x_res_spec[] = {
+ { SYS_RES_MEMORY, AGP_G4X_MMADR, RF_ACTIVE | RF_SHAREABLE },
+ { SYS_RES_MEMORY, AGP_G4X_GTTADR, RF_ACTIVE | RF_SHAREABLE },
+ { -1, 0 }
+};
+
struct agp_i810_softc {
struct agp_softc agp;
u_int32_t initial_aperture; /* aperture size at startup */
struct agp_gatt *gatt;
- int chiptype; /* i810-like or i830 */
u_int32_t dcache_size; /* i810 only */
- u_int32_t stolen; /* number of i830/845 gtt entries for stolen memory */
+ u_int32_t stolen; /* number of i830/845 gtt
+ entries for stolen memory */
+ u_int stolen_size; /* BIOS-reserved graphics memory */
+ u_int gtt_total_entries; /* Total number of gtt ptes */
+ u_int gtt_mappable_entries; /* Number of gtt ptes mappable by CPU */
device_t bdev; /* bridge device */
-
void *argb_cursor; /* contigmalloc area for ARGB cursor */
-
- struct resource_spec * sc_res_spec;
struct resource *sc_res[2];
+ const struct agp_i810_match *match;
+ int sc_flush_page_rid;
+ struct resource *sc_flush_page_res;
+ void *sc_flush_page_vaddr;
+ int sc_bios_allocated_flush_page;
+};
+
+static device_t intel_agp;
+
+struct agp_i810_driver {
+ int chiptype;
+ int gen;
+ int busdma_addr_mask_sz;
+ struct resource_spec *res_spec;
+ int (*check_active)(device_t);
+ void (*set_desc)(device_t, const struct agp_i810_match *);
+ void (*dump_regs)(device_t);
+ int (*get_stolen_size)(device_t);
+ int (*get_gtt_total_entries)(device_t);
+ int (*get_gtt_mappable_entries)(device_t);
+ int (*install_gatt)(device_t);
+ void (*deinstall_gatt)(device_t);
+ void (*write_gtt)(device_t, u_int, uint32_t);
+ void (*install_gtt_pte)(device_t, u_int, vm_offset_t, int);
+ u_int32_t (*read_gtt_pte)(device_t, u_int);
+ vm_paddr_t (*read_gtt_pte_paddr)(device_t , u_int);
+ int (*set_aperture)(device_t, u_int32_t);
+ int (*chipset_flush_setup)(device_t);
+ void (*chipset_flush_teardown)(device_t);
+ void (*chipset_flush)(device_t);
+};
+
+static const struct agp_i810_driver agp_i810_i810_driver = {
+ .chiptype = CHIP_I810,
+ .gen = 1,
+ .busdma_addr_mask_sz = 32,
+ .res_spec = agp_i810_res_spec,
+ .check_active = agp_i810_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_i810_dump_regs,
+ .get_stolen_size = agp_i810_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i810_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_i810_get_gtt_total_entries,
+ .install_gatt = agp_i810_install_gatt,
+ .deinstall_gatt = agp_i810_deinstall_gatt,
+ .write_gtt = agp_i810_write_gtt,
+ .install_gtt_pte = agp_i810_install_gtt_pte,
+ .read_gtt_pte = agp_i810_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_i810_read_gtt_pte_paddr,
+ .set_aperture = agp_i810_set_aperture,
+ .chipset_flush_setup = agp_i810_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i810_chipset_flush_teardown,
+ .chipset_flush = agp_i810_chipset_flush,
+};
+
+static const struct agp_i810_driver agp_i810_i815_driver = {
+ .chiptype = CHIP_I810,
+ .gen = 2,
+ .busdma_addr_mask_sz = 32,
+ .res_spec = agp_i810_res_spec,
+ .check_active = agp_i810_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_i810_dump_regs,
+ .get_stolen_size = agp_i810_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i830_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_i810_get_gtt_total_entries,
+ .install_gatt = agp_i810_install_gatt,
+ .deinstall_gatt = agp_i810_deinstall_gatt,
+ .write_gtt = agp_i810_write_gtt,
+ .install_gtt_pte = agp_i810_install_gtt_pte,
+ .read_gtt_pte = agp_i810_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_i810_read_gtt_pte_paddr,
+ .set_aperture = agp_i810_set_aperture,
+ .chipset_flush_setup = agp_i810_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i810_chipset_flush_teardown,
+ .chipset_flush = agp_i830_chipset_flush,
+};
+
+static const struct agp_i810_driver agp_i810_i830_driver = {
+ .chiptype = CHIP_I830,
+ .gen = 2,
+ .busdma_addr_mask_sz = 32,
+ .res_spec = agp_i810_res_spec,
+ .check_active = agp_i830_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_i830_dump_regs,
+ .get_stolen_size = agp_i830_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i830_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_i810_get_gtt_total_entries,
+ .install_gatt = agp_i830_install_gatt,
+ .deinstall_gatt = agp_i830_deinstall_gatt,
+ .write_gtt = agp_i810_write_gtt,
+ .install_gtt_pte = agp_i830_install_gtt_pte,
+ .read_gtt_pte = agp_i810_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_i810_read_gtt_pte_paddr,
+ .set_aperture = agp_i830_set_aperture,
+ .chipset_flush_setup = agp_i810_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i810_chipset_flush_teardown,
+ .chipset_flush = agp_i830_chipset_flush,
+};
+
+static const struct agp_i810_driver agp_i810_i855_driver = {
+ .chiptype = CHIP_I855,
+ .gen = 2,
+ .busdma_addr_mask_sz = 32,
+ .res_spec = agp_i810_res_spec,
+ .check_active = agp_i830_check_active,
+ .set_desc = agp_82852_set_desc,
+ .dump_regs = agp_i855_dump_regs,
+ .get_stolen_size = agp_i915_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_i810_get_gtt_total_entries,
+ .install_gatt = agp_i830_install_gatt,
+ .deinstall_gatt = agp_i830_deinstall_gatt,
+ .write_gtt = agp_i810_write_gtt,
+ .install_gtt_pte = agp_i830_install_gtt_pte,
+ .read_gtt_pte = agp_i810_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_i810_read_gtt_pte_paddr,
+ .set_aperture = agp_i830_set_aperture,
+ .chipset_flush_setup = agp_i810_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i810_chipset_flush_teardown,
+ .chipset_flush = agp_i830_chipset_flush,
+};
+
+static const struct agp_i810_driver agp_i810_i865_driver = {
+ .chiptype = CHIP_I855,
+ .gen = 2,
+ .busdma_addr_mask_sz = 32,
+ .res_spec = agp_i810_res_spec,
+ .check_active = agp_i830_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_i855_dump_regs,
+ .get_stolen_size = agp_i915_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_i810_get_gtt_total_entries,
+ .install_gatt = agp_i830_install_gatt,
+ .deinstall_gatt = agp_i830_deinstall_gatt,
+ .write_gtt = agp_i810_write_gtt,
+ .install_gtt_pte = agp_i830_install_gtt_pte,
+ .read_gtt_pte = agp_i810_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_i810_read_gtt_pte_paddr,
+ .set_aperture = agp_i915_set_aperture,
+ .chipset_flush_setup = agp_i810_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i810_chipset_flush_teardown,
+ .chipset_flush = agp_i830_chipset_flush,
+};
+
+static const struct agp_i810_driver agp_i810_i915_driver = {
+ .chiptype = CHIP_I915,
+ .gen = 3,
+ .busdma_addr_mask_sz = 32,
+ .res_spec = agp_i915_res_spec,
+ .check_active = agp_i915_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_i915_dump_regs,
+ .get_stolen_size = agp_i915_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_i810_get_gtt_total_entries,
+ .install_gatt = agp_i830_install_gatt,
+ .deinstall_gatt = agp_i830_deinstall_gatt,
+ .write_gtt = agp_i915_write_gtt,
+ .install_gtt_pte = agp_i915_install_gtt_pte,
+ .read_gtt_pte = agp_i915_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_i915_read_gtt_pte_paddr,
+ .set_aperture = agp_i915_set_aperture,
+ .chipset_flush_setup = agp_i915_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i915_chipset_flush_teardown,
+ .chipset_flush = agp_i915_chipset_flush,
+};
+
+static const struct agp_i810_driver agp_i810_g965_driver = {
+ .chiptype = CHIP_I965,
+ .gen = 4,
+ .busdma_addr_mask_sz = 36,
+ .res_spec = agp_i965_res_spec,
+ .check_active = agp_i915_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_i965_dump_regs,
+ .get_stolen_size = agp_i915_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_i965_get_gtt_total_entries,
+ .install_gatt = agp_i830_install_gatt,
+ .deinstall_gatt = agp_i830_deinstall_gatt,
+ .write_gtt = agp_i965_write_gtt,
+ .install_gtt_pte = agp_i965_install_gtt_pte,
+ .read_gtt_pte = agp_i965_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_i915_read_gtt_pte_paddr,
+ .set_aperture = agp_i915_set_aperture,
+ .chipset_flush_setup = agp_i965_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i965_chipset_flush_teardown,
+ .chipset_flush = agp_i915_chipset_flush,
+};
+
+static const struct agp_i810_driver agp_i810_g33_driver = {
+ .chiptype = CHIP_G33,
+ .gen = 3,
+ .busdma_addr_mask_sz = 36,
+ .res_spec = agp_i915_res_spec,
+ .check_active = agp_i915_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_i965_dump_regs,
+ .get_stolen_size = agp_i915_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_i965_get_gtt_total_entries,
+ .install_gatt = agp_i830_install_gatt,
+ .deinstall_gatt = agp_i830_deinstall_gatt,
+ .write_gtt = agp_i915_write_gtt,
+ .install_gtt_pte = agp_i915_install_gtt_pte,
+ .read_gtt_pte = agp_i915_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_i915_read_gtt_pte_paddr,
+ .set_aperture = agp_i915_set_aperture,
+ .chipset_flush_setup = agp_i965_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i965_chipset_flush_teardown,
+ .chipset_flush = agp_i915_chipset_flush,
+};
+
+static const struct agp_i810_driver agp_i810_igd_driver = {
+ .chiptype = CHIP_IGD,
+ .gen = 3,
+ .busdma_addr_mask_sz = 36,
+ .res_spec = agp_i915_res_spec,
+ .check_active = agp_i915_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_i915_dump_regs,
+ .get_stolen_size = agp_i915_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_i965_get_gtt_total_entries,
+ .install_gatt = agp_i830_install_gatt,
+ .deinstall_gatt = agp_i830_deinstall_gatt,
+ .write_gtt = agp_i915_write_gtt,
+ .install_gtt_pte = agp_i915_install_gtt_pte,
+ .read_gtt_pte = agp_i915_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_i915_read_gtt_pte_paddr,
+ .set_aperture = agp_i915_set_aperture,
+ .chipset_flush_setup = agp_i965_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i965_chipset_flush_teardown,
+ .chipset_flush = agp_i915_chipset_flush,
+};
+
+static const struct agp_i810_driver agp_i810_g4x_driver = {
+ .chiptype = CHIP_G4X,
+ .gen = 5,
+ .busdma_addr_mask_sz = 36,
+ .res_spec = agp_i965_res_spec,
+ .check_active = agp_i915_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_i965_dump_regs,
+ .get_stolen_size = agp_i915_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_gen5_get_gtt_total_entries,
+ .install_gatt = agp_i830_install_gatt,
+ .deinstall_gatt = agp_i830_deinstall_gatt,
+ .write_gtt = agp_g4x_write_gtt,
+ .install_gtt_pte = agp_g4x_install_gtt_pte,
+ .read_gtt_pte = agp_g4x_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_i915_read_gtt_pte_paddr,
+ .set_aperture = agp_i915_set_aperture,
+ .chipset_flush_setup = agp_i965_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i965_chipset_flush_teardown,
+ .chipset_flush = agp_i915_chipset_flush,
+};
+
+static const struct agp_i810_driver agp_i810_sb_driver = {
+ .chiptype = CHIP_SB,
+ .gen = 6,
+ .busdma_addr_mask_sz = 40,
+ .res_spec = agp_g4x_res_spec,
+ .check_active = agp_sb_check_active,
+ .set_desc = agp_i810_set_desc,
+ .dump_regs = agp_sb_dump_regs,
+ .get_stolen_size = agp_sb_get_stolen_size,
+ .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
+ .get_gtt_total_entries = agp_sb_get_gtt_total_entries,
+ .install_gatt = agp_i830_install_gatt,
+ .deinstall_gatt = agp_i830_deinstall_gatt,
+ .write_gtt = agp_sb_write_gtt,
+ .install_gtt_pte = agp_sb_install_gtt_pte,
+ .read_gtt_pte = agp_g4x_read_gtt_pte,
+ .read_gtt_pte_paddr = agp_sb_read_gtt_pte_paddr,
+ .set_aperture = agp_i915_set_aperture,
+ .chipset_flush_setup = agp_i810_chipset_flush_setup,
+ .chipset_flush_teardown = agp_i810_chipset_flush_teardown,
+ .chipset_flush = agp_i810_chipset_flush,
};
/* For adding new devices, devid is the id of the graphics controller
@@ -118,75 +506,232 @@ struct agp_i810_softc {
*/
static const struct agp_i810_match {
int devid;
- int chiptype;
- int bridge_offset;
char *name;
+ const struct agp_i810_driver *driver;
} agp_i810_matches[] = {
- {0x71218086, CHIP_I810, 0x00010000,
- "Intel 82810 (i810 GMCH) SVGA controller"},
- {0x71238086, CHIP_I810, 0x00010000,
- "Intel 82810-DC100 (i810-DC100 GMCH) SVGA controller"},
- {0x71258086, CHIP_I810, 0x00010000,
- "Intel 82810E (i810E GMCH) SVGA controller"},
- {0x11328086, CHIP_I810, 0x00020000,
- "Intel 82815 (i815 GMCH) SVGA controller"},
- {0x35778086, CHIP_I830, 0x00020000,
- "Intel 82830M (830M GMCH) SVGA controller"},
- {0x25628086, CHIP_I830, 0x00020000,
- "Intel 82845M (845M GMCH) SVGA controller"},
- {0x35828086, CHIP_I855, 0x00020000,
- "Intel 82852/855GM SVGA controller"},
- {0x25728086, CHIP_I855, 0x00020000,
- "Intel 82865G (865G GMCH) SVGA controller"},
- {0x25828086, CHIP_I915, 0x00020000,
- "Intel 82915G (915G GMCH) SVGA controller"},
- {0x258A8086, CHIP_I915, 0x00020000,
- "Intel E7221 SVGA controller"},
- {0x25928086, CHIP_I915, 0x00020000,
- "Intel 82915GM (915GM GMCH) SVGA controller"},
- {0x27728086, CHIP_I915, 0x00020000,
- "Intel 82945G (945G GMCH) SVGA controller"},
- {0x27A28086, CHIP_I915, 0x00020000,
- "Intel 82945GM (945GM GMCH) SVGA controller"},
- {0x27AE8086, CHIP_I915, 0x00020000,
- "Intel 945GME SVGA controller"},
- {0x29728086, CHIP_I965, 0x00020000,
- "Intel 946GZ SVGA controller"},
- {0x29828086, CHIP_I965, 0x00020000,
- "Intel G965 SVGA controller"},
- {0x29928086, CHIP_I965, 0x00020000,
- "Intel Q965 SVGA controller"},
- {0x29A28086, CHIP_I965, 0x00020000,
- "Intel G965 SVGA controller"},
- {0x29B28086, CHIP_G33, 0x00020000,
- "Intel Q35 SVGA controller"},
- {0x29C28086, CHIP_G33, 0x00020000,
- "Intel G33 SVGA controller"},
- {0x29D28086, CHIP_G33, 0x00020000,
- "Intel Q33 SVGA controller"},
- {0xA0018086, CHIP_IGD, 0x00010000,
- "Intel Pineview SVGA controller"},
- {0xA0118086, CHIP_IGD, 0x00010000,
- "Intel Pineview (M) SVGA controller"},
- {0x2A028086, CHIP_I965, 0x00020000,
- "Intel GM965 SVGA controller"},
- {0x2A128086, CHIP_I965, 0x00020000,
- "Intel GME965 SVGA controller"},
- {0x2A428086, CHIP_G4X, 0x00020000,
- "Intel GM45 SVGA controller"},
- {0x2E028086, CHIP_G4X, 0x00020000,
- "Intel Eaglelake SVGA controller"},
- {0x2E128086, CHIP_G4X, 0x00020000,
- "Intel Q45 SVGA controller"},
- {0x2E228086, CHIP_G4X, 0x00020000,
- "Intel G45 SVGA controller"},
- {0x2E328086, CHIP_G4X, 0x00020000,
- "Intel G41 SVGA controller"},
- {0x00428086, CHIP_G4X, 0x00020000,
- "Intel Ironlake (D) SVGA controller"},
- {0x00468086, CHIP_G4X, 0x00020000,
- "Intel Ironlake (M) SVGA controller"},
- {0, 0, 0, NULL}
+ {
+ .devid = 0x71218086,
+ .name = "Intel 82810 (i810 GMCH) SVGA controller",
+ .driver = &agp_i810_i810_driver
+ },
+ {
+ .devid = 0x71238086,
+ .name = "Intel 82810-DC100 (i810-DC100 GMCH) SVGA controller",
+ .driver = &agp_i810_i810_driver
+ },
+ {
+ .devid = 0x71258086,
+ .name = "Intel 82810E (i810E GMCH) SVGA controller",
+ .driver = &agp_i810_i810_driver
+ },
+ {
+ .devid = 0x11328086,
+ .name = "Intel 82815 (i815 GMCH) SVGA controller",
+ .driver = &agp_i810_i815_driver
+ },
+ {
+ .devid = 0x35778086,
+ .name = "Intel 82830M (830M GMCH) SVGA controller",
+ .driver = &agp_i810_i830_driver
+ },
+ {
+ .devid = 0x25628086,
+ .name = "Intel 82845M (845M GMCH) SVGA controller",
+ .driver = &agp_i810_i830_driver
+ },
+ {
+ .devid = 0x35828086,
+ .name = "Intel 82852/855GM SVGA controller",
+ .driver = &agp_i810_i855_driver
+ },
+ {
+ .devid = 0x25728086,
+ .name = "Intel 82865G (865G GMCH) SVGA controller",
+ .driver = &agp_i810_i865_driver
+ },
+ {
+ .devid = 0x25828086,
+ .name = "Intel 82915G (915G GMCH) SVGA controller",
+ .driver = &agp_i810_i915_driver
+ },
+ {
+ .devid = 0x258A8086,
+ .name = "Intel E7221 SVGA controller",
+ .driver = &agp_i810_i915_driver
+ },
+ {
+ .devid = 0x25928086,
+ .name = "Intel 82915GM (915GM GMCH) SVGA controller",
+ .driver = &agp_i810_i915_driver
+ },
+ {
+ .devid = 0x27728086,
+ .name = "Intel 82945G (945G GMCH) SVGA controller",
+ .driver = &agp_i810_i915_driver
+ },
+ {
+ .devid = 0x27A28086,
+ .name = "Intel 82945GM (945GM GMCH) SVGA controller",
+ .driver = &agp_i810_i915_driver
+ },
+ {
+ .devid = 0x27AE8086,
+ .name = "Intel 945GME SVGA controller",
+ .driver = &agp_i810_i915_driver
+ },
+ {
+ .devid = 0x29728086,
+ .name = "Intel 946GZ SVGA controller",
+ .driver = &agp_i810_g965_driver
+ },
+ {
+ .devid = 0x29828086,
+ .name = "Intel G965 SVGA controller",
+ .driver = &agp_i810_g965_driver
+ },
+ {
+ .devid = 0x29928086,
+ .name = "Intel Q965 SVGA controller",
+ .driver = &agp_i810_g965_driver
+ },
+ {
+ .devid = 0x29A28086,
+ .name = "Intel G965 SVGA controller",
+ .driver = &agp_i810_g965_driver
+ },
+ {
+ .devid = 0x29B28086,
+ .name = "Intel Q35 SVGA controller",
+ .driver = &agp_i810_g33_driver
+ },
+ {
+ .devid = 0x29C28086,
+ .name = "Intel G33 SVGA controller",
+ .driver = &agp_i810_g33_driver
+ },
+ {
+ .devid = 0x29D28086,
+ .name = "Intel Q33 SVGA controller",
+ .driver = &agp_i810_g33_driver
+ },
+ {
+ .devid = 0xA0018086,
+ .name = "Intel Pineview SVGA controller",
+ .driver = &agp_i810_igd_driver
+ },
+ {
+ .devid = 0xA0118086,
+ .name = "Intel Pineview (M) SVGA controller",
+ .driver = &agp_i810_igd_driver
+ },
+ {
+ .devid = 0x2A028086,
+ .name = "Intel GM965 SVGA controller",
+ .driver = &agp_i810_g965_driver
+ },
+ {
+ .devid = 0x2A128086,
+ .name = "Intel GME965 SVGA controller",
+ .driver = &agp_i810_g965_driver
+ },
+ {
+ .devid = 0x2A428086,
+ .name = "Intel GM45 SVGA controller",
+ .driver = &agp_i810_g4x_driver
+ },
+ {
+ .devid = 0x2E028086,
+ .name = "Intel Eaglelake SVGA controller",
+ .driver = &agp_i810_g4x_driver
+ },
+ {
+ .devid = 0x2E128086,
+ .name = "Intel Q45 SVGA controller",
+ .driver = &agp_i810_g4x_driver
+ },
+ {
+ .devid = 0x2E228086,
+ .name = "Intel G45 SVGA controller",
+ .driver = &agp_i810_g4x_driver
+ },
+ {
+ .devid = 0x2E328086,
+ .name = "Intel G41 SVGA controller",
+ .driver = &agp_i810_g4x_driver
+ },
+ {
+ .devid = 0x00428086,
+ .name = "Intel Ironlake (D) SVGA controller",
+ .driver = &agp_i810_g4x_driver
+ },
+ {
+ .devid = 0x00468086,
+ .name = "Intel Ironlake (M) SVGA controller",
+ .driver = &agp_i810_g4x_driver
+ },
+ {
+ .devid = 0x01028086,
+ .name = "SandyBridge desktop GT1 IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x01128086,
+ .name = "SandyBridge desktop GT2 IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x01228086,
+ .name = "SandyBridge desktop GT2+ IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x01068086,
+ .name = "SandyBridge mobile GT1 IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x01168086,
+ .name = "SandyBridge mobile GT2 IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x01268086,
+ .name = "SandyBridge mobile GT2+ IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x01088086,
+ .name = "SandyBridge server IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x01528086,
+ .name = "IvyBridge desktop GT1 IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x01628086,
+ .name = "IvyBridge desktop GT2 IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x01568086,
+ .name = "IvyBridge mobile GT1 IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x01668086,
+ .name = "IvyBridge mobile GT2 IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0x015a8086,
+ .name = "IvyBridge server GT1 IG",
+ .driver = &agp_i810_sb_driver
+ },
+ {
+ .devid = 0,
+ }
};
static const struct agp_i810_match*
@@ -196,17 +741,17 @@ agp_i810_match(device_t dev)
if (pci_get_class(dev) != PCIC_DISPLAY
|| pci_get_subclass(dev) != PCIS_DISPLAY_VGA)
- return NULL;
+ return (NULL);
devid = pci_get_devid(dev);
for (i = 0; agp_i810_matches[i].devid != 0; i++) {
if (agp_i810_matches[i].devid == devid)
- break;
+ break;
}
if (agp_i810_matches[i].devid == 0)
- return NULL;
+ return (NULL);
else
- return &agp_i810_matches[i];
+ return (&agp_i810_matches[i]);
}
/*
@@ -215,28 +760,8 @@ agp_i810_match(device_t dev)
static device_t
agp_i810_find_bridge(device_t dev)
{
- device_t *children, child;
- int nchildren, i;
- u_int32_t devid;
- const struct agp_i810_match *match;
-
- match = agp_i810_match(dev);
- devid = match->devid - match->bridge_offset;
- if (device_get_children(device_get_parent(device_get_parent(dev)),
- &children, &nchildren))
- return 0;
-
- for (i = 0; i < nchildren; i++) {
- child = children[i];
-
- if (pci_get_devid(child) == devid) {
- free(children, M_TEMP);
- return child;
- }
- }
- free(children, M_TEMP);
- return 0;
+ return (pci_find_dbsf(0, 0, 0, 0));
}
static void
@@ -249,92 +774,116 @@ agp_i810_identify(driver_t *driver, device_t parent)
}
static int
+agp_i810_check_active(device_t bridge_dev)
+{
+ u_int8_t smram;
+
+ smram = pci_read_config(bridge_dev, AGP_I810_SMRAM, 1);
+ if ((smram & AGP_I810_SMRAM_GMS) == AGP_I810_SMRAM_GMS_DISABLED)
+ return (ENXIO);
+ return (0);
+}
+
+static int
+agp_i830_check_active(device_t bridge_dev)
+{
+ int gcc1;
+
+ gcc1 = pci_read_config(bridge_dev, AGP_I830_GCC1, 1);
+ if ((gcc1 & AGP_I830_GCC1_DEV2) == AGP_I830_GCC1_DEV2_DISABLED)
+ return (ENXIO);
+ return (0);
+}
+
+static int
+agp_i915_check_active(device_t bridge_dev)
+{
+ int deven;
+
+ deven = pci_read_config(bridge_dev, AGP_I915_DEVEN, 4);
+ if ((deven & AGP_I915_DEVEN_D2F0) == AGP_I915_DEVEN_D2F0_DISABLED)
+ return (ENXIO);
+ return (0);
+}
+
+static int
+agp_sb_check_active(device_t bridge_dev)
+{
+ int deven;
+
+ deven = pci_read_config(bridge_dev, AGP_I915_DEVEN, 4);
+ if ((deven & AGP_SB_DEVEN_D2EN) == AGP_SB_DEVEN_D2EN_DISABLED)
+ return (ENXIO);
+ return (0);
+}
+
+static void
+agp_82852_set_desc(device_t dev, const struct agp_i810_match *match)
+{
+
+ switch (pci_read_config(dev, AGP_I85X_CAPID, 1)) {
+ case AGP_I855_GME:
+ device_set_desc(dev,
+ "Intel 82855GME (855GME GMCH) SVGA controller");
+ break;
+ case AGP_I855_GM:
+ device_set_desc(dev,
+ "Intel 82855GM (855GM GMCH) SVGA controller");
+ break;
+ case AGP_I852_GME:
+ device_set_desc(dev,
+ "Intel 82852GME (852GME GMCH) SVGA controller");
+ break;
+ case AGP_I852_GM:
+ device_set_desc(dev,
+ "Intel 82852GM (852GM GMCH) SVGA controller");
+ break;
+ default:
+ device_set_desc(dev,
+ "Intel 8285xM (85xGM GMCH) SVGA controller");
+ break;
+ }
+}
+
+static void
+agp_i810_set_desc(device_t dev, const struct agp_i810_match *match)
+{
+
+ device_set_desc(dev, match->name);
+}
+
+static int
agp_i810_probe(device_t dev)
{
device_t bdev;
const struct agp_i810_match *match;
- u_int8_t smram;
- int gcc1, deven;
+ int err;
if (resource_disabled("agp", device_get_unit(dev)))
return (ENXIO);
match = agp_i810_match(dev);
if (match == NULL)
- return ENXIO;
+ return (ENXIO);
bdev = agp_i810_find_bridge(dev);
- if (!bdev) {
+ if (bdev == NULL) {
if (bootverbose)
printf("I810: can't find bridge device\n");
- return ENXIO;
+ return (ENXIO);
}
/*
* checking whether internal graphics device has been activated.
*/
- switch (match->chiptype) {
- case CHIP_I810:
- smram = pci_read_config(bdev, AGP_I810_SMRAM, 1);
- if ((smram & AGP_I810_SMRAM_GMS) ==
- AGP_I810_SMRAM_GMS_DISABLED) {
- if (bootverbose)
- printf("I810: disabled, not probing\n");
- return ENXIO;
- }
- break;
- case CHIP_I830:
- case CHIP_I855:
- gcc1 = pci_read_config(bdev, AGP_I830_GCC1, 1);
- if ((gcc1 & AGP_I830_GCC1_DEV2) ==
- AGP_I830_GCC1_DEV2_DISABLED) {
- if (bootverbose)
- printf("I830: disabled, not probing\n");
- return ENXIO;
- }
- break;
- case CHIP_I915:
- case CHIP_I965:
- case CHIP_G33:
- case CHIP_IGD:
- case CHIP_G4X:
- deven = pci_read_config(bdev, AGP_I915_DEVEN, 4);
- if ((deven & AGP_I915_DEVEN_D2F0) ==
- AGP_I915_DEVEN_D2F0_DISABLED) {
- if (bootverbose)
- printf("I915: disabled, not probing\n");
- return ENXIO;
- }
- break;
- }
-
- if (match->devid == 0x35828086) {
- switch (pci_read_config(dev, AGP_I85X_CAPID, 1)) {
- case AGP_I855_GME:
- device_set_desc(dev,
- "Intel 82855GME (855GME GMCH) SVGA controller");
- break;
- case AGP_I855_GM:
- device_set_desc(dev,
- "Intel 82855GM (855GM GMCH) SVGA controller");
- break;
- case AGP_I852_GME:
- device_set_desc(dev,
- "Intel 82852GME (852GME GMCH) SVGA controller");
- break;
- case AGP_I852_GM:
- device_set_desc(dev,
- "Intel 82852GM (852GM GMCH) SVGA controller");
- break;
- default:
- device_set_desc(dev,
- "Intel 8285xM (85xGM GMCH) SVGA controller");
- break;
- }
- } else {
- device_set_desc(dev, match->name);
+ err = match->driver->check_active(bdev);
+ if (err != 0) {
+ if (bootverbose)
+ printf("i810: disabled, not probing\n");
+ return (err);
}
- return BUS_PROBE_DEFAULT;
+ match->driver->set_desc(dev, match);
+ return (BUS_PROBE_DEFAULT);
}
static void
@@ -344,391 +893,641 @@ agp_i810_dump_regs(device_t dev)
device_printf(dev, "AGP_I810_PGTBL_CTL: %08x\n",
bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL));
+ device_printf(dev, "AGP_I810_MISCC: 0x%04x\n",
+ pci_read_config(sc->bdev, AGP_I810_MISCC, 2));
+}
- switch (sc->chiptype) {
- case CHIP_I810:
- device_printf(dev, "AGP_I810_MISCC: 0x%04x\n",
- pci_read_config(sc->bdev, AGP_I810_MISCC, 2));
+static void
+agp_i830_dump_regs(device_t dev)
+{
+ struct agp_i810_softc *sc = device_get_softc(dev);
+
+ device_printf(dev, "AGP_I810_PGTBL_CTL: %08x\n",
+ bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL));
+ device_printf(dev, "AGP_I830_GCC1: 0x%02x\n",
+ pci_read_config(sc->bdev, AGP_I830_GCC1, 1));
+}
+
+static void
+agp_i855_dump_regs(device_t dev)
+{
+ struct agp_i810_softc *sc = device_get_softc(dev);
+
+ device_printf(dev, "AGP_I810_PGTBL_CTL: %08x\n",
+ bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL));
+ device_printf(dev, "AGP_I855_GCC1: 0x%02x\n",
+ pci_read_config(sc->bdev, AGP_I855_GCC1, 1));
+}
+
+static void
+agp_i915_dump_regs(device_t dev)
+{
+ struct agp_i810_softc *sc = device_get_softc(dev);
+
+ device_printf(dev, "AGP_I810_PGTBL_CTL: %08x\n",
+ bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL));
+ device_printf(dev, "AGP_I855_GCC1: 0x%02x\n",
+ pci_read_config(sc->bdev, AGP_I855_GCC1, 1));
+ device_printf(dev, "AGP_I915_MSAC: 0x%02x\n",
+ pci_read_config(sc->bdev, AGP_I915_MSAC, 1));
+}
+
+static void
+agp_i965_dump_regs(device_t dev)
+{
+ struct agp_i810_softc *sc = device_get_softc(dev);
+
+ device_printf(dev, "AGP_I965_PGTBL_CTL2: %08x\n",
+ bus_read_4(sc->sc_res[0], AGP_I965_PGTBL_CTL2));
+ device_printf(dev, "AGP_I855_GCC1: 0x%02x\n",
+ pci_read_config(sc->bdev, AGP_I855_GCC1, 1));
+ device_printf(dev, "AGP_I965_MSAC: 0x%02x\n",
+ pci_read_config(sc->bdev, AGP_I965_MSAC, 1));
+}
+
+static void
+agp_sb_dump_regs(device_t dev)
+{
+ struct agp_i810_softc *sc = device_get_softc(dev);
+
+ device_printf(dev, "AGP_SNB_GFX_MODE: %08x\n",
+ bus_read_4(sc->sc_res[0], AGP_SNB_GFX_MODE));
+ device_printf(dev, "AGP_SNB_GCC1: 0x%04x\n",
+ pci_read_config(sc->bdev, AGP_SNB_GCC1, 2));
+}
+
+static int
+agp_i810_get_stolen_size(device_t dev)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(dev);
+ sc->stolen = 0;
+ sc->stolen_size = 0;
+ return (0);
+}
+
+static int
+agp_i830_get_stolen_size(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ unsigned int gcc1;
+
+ sc = device_get_softc(dev);
+
+ gcc1 = pci_read_config(sc->bdev, AGP_I830_GCC1, 1);
+ switch (gcc1 & AGP_I830_GCC1_GMS) {
+ case AGP_I830_GCC1_GMS_STOLEN_512:
+ sc->stolen = (512 - 132) * 1024 / 4096;
+ sc->stolen_size = 512 * 1024;
break;
- case CHIP_I830:
- device_printf(dev, "AGP_I830_GCC1: 0x%02x\n",
- pci_read_config(sc->bdev, AGP_I830_GCC1, 1));
+ case AGP_I830_GCC1_GMS_STOLEN_1024:
+ sc->stolen = (1024 - 132) * 1024 / 4096;
+ sc->stolen_size = 1024 * 1024;
break;
+ case AGP_I830_GCC1_GMS_STOLEN_8192:
+ sc->stolen = (8192 - 132) * 1024 / 4096;
+ sc->stolen_size = 8192 * 1024;
+ break;
+ default:
+ sc->stolen = 0;
+ device_printf(dev,
+ "unknown memory configuration, disabling (GCC1 %x)\n",
+ gcc1);
+ return (EINVAL);
+ }
+ return (0);
+}
+
+static int
+agp_i915_get_stolen_size(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ unsigned int gcc1, stolen, gtt_size;
+
+ sc = device_get_softc(dev);
+
+ /*
+ * Stolen memory is set up at the beginning of the aperture by
+ * the BIOS, consisting of the GATT followed by 4kb for the
+ * BIOS display.
+ */
+ switch (sc->match->driver->chiptype) {
case CHIP_I855:
- device_printf(dev, "AGP_I855_GCC1: 0x%02x\n",
- pci_read_config(sc->bdev, AGP_I855_GCC1, 1));
+ gtt_size = 128;
break;
case CHIP_I915:
+ gtt_size = 256;
+ break;
case CHIP_I965:
+ switch (bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL) &
+ AGP_I810_PGTBL_SIZE_MASK) {
+ case AGP_I810_PGTBL_SIZE_128KB:
+ gtt_size = 128;
+ break;
+ case AGP_I810_PGTBL_SIZE_256KB:
+ gtt_size = 256;
+ break;
+ case AGP_I810_PGTBL_SIZE_512KB:
+ gtt_size = 512;
+ break;
+ case AGP_I965_PGTBL_SIZE_1MB:
+ gtt_size = 1024;
+ break;
+ case AGP_I965_PGTBL_SIZE_2MB:
+ gtt_size = 2048;
+ break;
+ case AGP_I965_PGTBL_SIZE_1_5MB:
+ gtt_size = 1024 + 512;
+ break;
+ default:
+ device_printf(dev, "Bad PGTBL size\n");
+ return (EINVAL);
+ }
+ break;
case CHIP_G33:
+ gcc1 = pci_read_config(sc->bdev, AGP_I855_GCC1, 2);
+ switch (gcc1 & AGP_G33_MGGC_GGMS_MASK) {
+ case AGP_G33_MGGC_GGMS_SIZE_1M:
+ gtt_size = 1024;
+ break;
+ case AGP_G33_MGGC_GGMS_SIZE_2M:
+ gtt_size = 2048;
+ break;
+ default:
+ device_printf(dev, "Bad PGTBL size\n");
+ return (EINVAL);
+ }
+ break;
case CHIP_IGD:
case CHIP_G4X:
- device_printf(dev, "AGP_I855_GCC1: 0x%02x\n",
- pci_read_config(sc->bdev, AGP_I855_GCC1, 1));
- device_printf(dev, "AGP_I915_MSAC: 0x%02x\n",
- pci_read_config(sc->bdev, AGP_I915_MSAC, 1));
+ gtt_size = 0;
break;
+ default:
+ device_printf(dev, "Bad chiptype\n");
+ return (EINVAL);
}
- device_printf(dev, "Aperture resource size: %d bytes\n",
- AGP_GET_APERTURE(dev));
+
+ /* GCC1 is called MGGC on i915+ */
+ gcc1 = pci_read_config(sc->bdev, AGP_I855_GCC1, 1);
+ switch (gcc1 & AGP_I855_GCC1_GMS) {
+ case AGP_I855_GCC1_GMS_STOLEN_1M:
+ stolen = 1024;
+ break;
+ case AGP_I855_GCC1_GMS_STOLEN_4M:
+ stolen = 4 * 1024;
+ break;
+ case AGP_I855_GCC1_GMS_STOLEN_8M:
+ stolen = 8 * 1024;
+ break;
+ case AGP_I855_GCC1_GMS_STOLEN_16M:
+ stolen = 16 * 1024;
+ break;
+ case AGP_I855_GCC1_GMS_STOLEN_32M:
+ stolen = 32 * 1024;
+ break;
+ case AGP_I915_GCC1_GMS_STOLEN_48M:
+ stolen = sc->match->driver->gen > 2 ? 48 * 1024 : 0;
+ break;
+ case AGP_I915_GCC1_GMS_STOLEN_64M:
+ stolen = sc->match->driver->gen > 2 ? 64 * 1024 : 0;
+ break;
+ case AGP_G33_GCC1_GMS_STOLEN_128M:
+ stolen = sc->match->driver->gen > 2 ? 128 * 1024 : 0;
+ break;
+ case AGP_G33_GCC1_GMS_STOLEN_256M:
+ stolen = sc->match->driver->gen > 2 ? 256 * 1024 : 0;
+ break;
+ case AGP_G4X_GCC1_GMS_STOLEN_96M:
+ if (sc->match->driver->chiptype == CHIP_I965 ||
+ sc->match->driver->chiptype == CHIP_G4X)
+ stolen = 96 * 1024;
+ else
+ stolen = 0;
+ break;
+ case AGP_G4X_GCC1_GMS_STOLEN_160M:
+ if (sc->match->driver->chiptype == CHIP_I965 ||
+ sc->match->driver->chiptype == CHIP_G4X)
+ stolen = 160 * 1024;
+ else
+ stolen = 0;
+ break;
+ case AGP_G4X_GCC1_GMS_STOLEN_224M:
+ if (sc->match->driver->chiptype == CHIP_I965 ||
+ sc->match->driver->chiptype == CHIP_G4X)
+ stolen = 224 * 1024;
+ else
+ stolen = 0;
+ break;
+ case AGP_G4X_GCC1_GMS_STOLEN_352M:
+ if (sc->match->driver->chiptype == CHIP_I965 ||
+ sc->match->driver->chiptype == CHIP_G4X)
+ stolen = 352 * 1024;
+ else
+ stolen = 0;
+ break;
+ default:
+ device_printf(dev,
+ "unknown memory configuration, disabling (GCC1 %x)\n",
+ gcc1);
+ return (EINVAL);
+ }
+
+ gtt_size += 4;
+ sc->stolen_size = stolen * 1024;
+ sc->stolen = (stolen - gtt_size) * 1024 / 4096;
+
+ return (0);
}
static int
-agp_i810_attach(device_t dev)
+agp_sb_get_stolen_size(device_t dev)
{
- struct agp_i810_softc *sc = device_get_softc(dev);
- struct agp_gatt *gatt;
- const struct agp_i810_match *match;
- int error;
+ struct agp_i810_softc *sc;
+ uint16_t gmch_ctl;
- sc->bdev = agp_i810_find_bridge(dev);
- if (!sc->bdev)
- return ENOENT;
+ sc = device_get_softc(dev);
+ gmch_ctl = pci_read_config(sc->bdev, AGP_SNB_GCC1, 2);
+ switch (gmch_ctl & AGP_SNB_GMCH_GMS_STOLEN_MASK) {
+ case AGP_SNB_GMCH_GMS_STOLEN_32M:
+ sc->stolen_size = 32 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_64M:
+ sc->stolen_size = 64 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_96M:
+ sc->stolen_size = 96 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_128M:
+ sc->stolen_size = 128 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_160M:
+ sc->stolen_size = 160 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_192M:
+ sc->stolen_size = 192 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_224M:
+ sc->stolen_size = 224 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_256M:
+ sc->stolen_size = 256 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_288M:
+ sc->stolen_size = 288 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_320M:
+ sc->stolen_size = 320 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_352M:
+ sc->stolen_size = 352 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_384M:
+ sc->stolen_size = 384 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_416M:
+ sc->stolen_size = 416 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_448M:
+ sc->stolen_size = 448 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_480M:
+ sc->stolen_size = 480 * 1024 * 1024;
+ break;
+ case AGP_SNB_GMCH_GMS_STOLEN_512M:
+ sc->stolen_size = 512 * 1024 * 1024;
+ break;
+ }
+ sc->stolen = (sc->stolen_size - 4) / 4096;
+ return (0);
+}
- match = agp_i810_match(dev);
- sc->chiptype = match->chiptype;
+static int
+agp_i810_get_gtt_mappable_entries(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint32_t ap;
+ uint16_t miscc;
- switch (sc->chiptype) {
- case CHIP_I810:
- case CHIP_I830:
- case CHIP_I855:
- sc->sc_res_spec = agp_i810_res_spec;
- agp_set_aperture_resource(dev, AGP_APBASE);
+ sc = device_get_softc(dev);
+ miscc = pci_read_config(sc->bdev, AGP_I810_MISCC, 2);
+ if ((miscc & AGP_I810_MISCC_WINSIZE) == AGP_I810_MISCC_WINSIZE_32)
+ ap = 32;
+ else
+ ap = 64;
+ sc->gtt_mappable_entries = (ap * 1024 * 1024) >> AGP_PAGE_SHIFT;
+ return (0);
+}
+
+static int
+agp_i830_get_gtt_mappable_entries(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint32_t ap;
+ uint16_t gmch_ctl;
+
+ sc = device_get_softc(dev);
+ gmch_ctl = pci_read_config(sc->bdev, AGP_I830_GCC1, 2);
+ if ((gmch_ctl & AGP_I830_GCC1_GMASIZE) == AGP_I830_GCC1_GMASIZE_64)
+ ap = 64;
+ else
+ ap = 128;
+ sc->gtt_mappable_entries = (ap * 1024 * 1024) >> AGP_PAGE_SHIFT;
+ return (0);
+}
+
+static int
+agp_i915_get_gtt_mappable_entries(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint32_t ap;
+
+ sc = device_get_softc(dev);
+ ap = AGP_GET_APERTURE(dev);
+ sc->gtt_mappable_entries = ap >> AGP_PAGE_SHIFT;
+ return (0);
+}
+
+static int
+agp_i810_get_gtt_total_entries(device_t dev)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(dev);
+ sc->gtt_total_entries = sc->gtt_mappable_entries;
+ return (0);
+}
+
+static int
+agp_i965_get_gtt_total_entries(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint32_t pgetbl_ctl;
+ int error;
+
+ sc = device_get_softc(dev);
+ error = 0;
+ pgetbl_ctl = bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL);
+ switch (pgetbl_ctl & AGP_I810_PGTBL_SIZE_MASK) {
+ case AGP_I810_PGTBL_SIZE_128KB:
+ sc->gtt_total_entries = 128 * 1024 / 4;
break;
- case CHIP_I915:
- case CHIP_G33:
- case CHIP_IGD:
- sc->sc_res_spec = agp_i915_res_spec;
- agp_set_aperture_resource(dev, AGP_I915_GMADR);
+ case AGP_I810_PGTBL_SIZE_256KB:
+ sc->gtt_total_entries = 256 * 1024 / 4;
break;
- case CHIP_I965:
- case CHIP_G4X:
- sc->sc_res_spec = agp_i965_res_spec;
- agp_set_aperture_resource(dev, AGP_I915_GMADR);
+ case AGP_I810_PGTBL_SIZE_512KB:
+ sc->gtt_total_entries = 512 * 1024 / 4;
+ break;
+ /* GTT pagetable sizes bigger than 512KB are not possible on G33! */
+ case AGP_I810_PGTBL_SIZE_1MB:
+ sc->gtt_total_entries = 1024 * 1024 / 4;
+ break;
+ case AGP_I810_PGTBL_SIZE_2MB:
+ sc->gtt_total_entries = 2 * 1024 * 1024 / 4;
+ break;
+ case AGP_I810_PGTBL_SIZE_1_5MB:
+ sc->gtt_total_entries = (1024 + 512) * 1024 / 4;
break;
+ default:
+ device_printf(dev, "Unknown page table size\n");
+ error = ENXIO;
}
+ return (error);
+}
- error = agp_generic_attach(dev);
- if (error)
- return error;
+static void
+agp_gen5_adjust_pgtbl_size(device_t dev, uint32_t sz)
+{
+ struct agp_i810_softc *sc;
+ uint32_t pgetbl_ctl, pgetbl_ctl2;
- if (sc->chiptype != CHIP_I965 && sc->chiptype != CHIP_G33 &&
- sc->chiptype != CHIP_IGD && sc->chiptype != CHIP_G4X &&
- ptoa((vm_paddr_t)Maxmem) > 0xfffffffful)
- {
- device_printf(dev, "agp_i810.c does not support physical "
- "memory above 4GB.\n");
- return ENOENT;
+ sc = device_get_softc(dev);
+
+ /* Disable per-process page table. */
+ pgetbl_ctl2 = bus_read_4(sc->sc_res[0], AGP_I965_PGTBL_CTL2);
+ pgetbl_ctl2 &= ~AGP_I810_PGTBL_ENABLED;
+ bus_write_4(sc->sc_res[0], AGP_I965_PGTBL_CTL2, pgetbl_ctl2);
+
+ /* Write the new ggtt size. */
+ pgetbl_ctl = bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL);
+ pgetbl_ctl &= ~AGP_I810_PGTBL_SIZE_MASK;
+ pgetbl_ctl |= sz;
+ bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL, pgetbl_ctl);
+}
+
+static int
+agp_gen5_get_gtt_total_entries(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint16_t gcc1;
+
+ sc = device_get_softc(dev);
+
+ gcc1 = pci_read_config(sc->bdev, AGP_I830_GCC1, 2);
+ switch (gcc1 & AGP_G4x_GCC1_SIZE_MASK) {
+ case AGP_G4x_GCC1_SIZE_1M:
+ case AGP_G4x_GCC1_SIZE_VT_1M:
+ agp_gen5_adjust_pgtbl_size(dev, AGP_I810_PGTBL_SIZE_1MB);
+ break;
+ case AGP_G4x_GCC1_SIZE_VT_1_5M:
+ agp_gen5_adjust_pgtbl_size(dev, AGP_I810_PGTBL_SIZE_1_5MB);
+ break;
+ case AGP_G4x_GCC1_SIZE_2M:
+ case AGP_G4x_GCC1_SIZE_VT_2M:
+ agp_gen5_adjust_pgtbl_size(dev, AGP_I810_PGTBL_SIZE_2MB);
+ break;
+ default:
+ device_printf(dev, "Unknown page table size\n");
+ return (ENXIO);
}
- if (bus_alloc_resources(dev, sc->sc_res_spec, sc->sc_res)) {
- agp_generic_detach(dev);
- return ENODEV;
+ return (agp_i965_get_gtt_total_entries(dev));
+}
+
+static int
+agp_sb_get_gtt_total_entries(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint16_t gcc1;
+
+ sc = device_get_softc(dev);
+
+ gcc1 = pci_read_config(sc->bdev, AGP_SNB_GCC1, 2);
+ switch (gcc1 & AGP_SNB_GTT_SIZE_MASK) {
+ default:
+ case AGP_SNB_GTT_SIZE_0M:
+ printf("Bad GTT size mask: 0x%04x\n", gcc1);
+ return (ENXIO);
+ case AGP_SNB_GTT_SIZE_1M:
+ sc->gtt_total_entries = 1024 * 1024 / 4;
+ break;
+ case AGP_SNB_GTT_SIZE_2M:
+ sc->gtt_total_entries = 2 * 1024 * 1024 / 4;
+ break;
}
+ return (0);
+}
- sc->initial_aperture = AGP_GET_APERTURE(dev);
+static int
+agp_i810_install_gatt(device_t dev)
+{
+ struct agp_i810_softc *sc;
- gatt = malloc( sizeof(struct agp_gatt), M_AGP, M_NOWAIT);
- if (!gatt) {
- bus_release_resources(dev, sc->sc_res_spec, sc->sc_res);
- agp_generic_detach(dev);
- return ENOMEM;
+ sc = device_get_softc(dev);
+
+ /* Some i810s have on-chip memory called dcache. */
+ if ((bus_read_1(sc->sc_res[0], AGP_I810_DRT) & AGP_I810_DRT_POPULATED)
+ != 0)
+ sc->dcache_size = 4 * 1024 * 1024;
+ else
+ sc->dcache_size = 0;
+
+ /* According to the specs the gatt on the i810 must be 64k. */
+ sc->gatt->ag_virtual = contigmalloc(64 * 1024, M_AGP, 0, 0, ~0,
+ PAGE_SIZE, 0);
+ if (sc->gatt->ag_virtual == NULL) {
+ if (bootverbose)
+ device_printf(dev, "contiguous allocation failed\n");
+ return (ENOMEM);
}
- sc->gatt = gatt;
- gatt->ag_entries = AGP_GET_APERTURE(dev) >> AGP_PAGE_SHIFT;
+ bzero(sc->gatt->ag_virtual, sc->gatt->ag_entries * sizeof(u_int32_t));
+ sc->gatt->ag_physical = vtophys((vm_offset_t)sc->gatt->ag_virtual);
+ agp_flush_cache();
+ /* Install the GATT. */
+ bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL,
+ sc->gatt->ag_physical | 1);
+ return (0);
+}
- if ( sc->chiptype == CHIP_I810 ) {
- /* Some i810s have on-chip memory called dcache */
- if (bus_read_1(sc->sc_res[0], AGP_I810_DRT) &
- AGP_I810_DRT_POPULATED)
- sc->dcache_size = 4 * 1024 * 1024;
- else
- sc->dcache_size = 0;
-
- /* According to the specs the gatt on the i810 must be 64k */
- gatt->ag_virtual = contigmalloc( 64 * 1024, M_AGP, 0,
- 0, ~0, PAGE_SIZE, 0);
- if (!gatt->ag_virtual) {
- if (bootverbose)
- device_printf(dev, "contiguous allocation failed\n");
- bus_release_resources(dev, sc->sc_res_spec,
- sc->sc_res);
- free(gatt, M_AGP);
- agp_generic_detach(dev);
- return ENOMEM;
- }
- bzero(gatt->ag_virtual, gatt->ag_entries * sizeof(u_int32_t));
-
- gatt->ag_physical = vtophys((vm_offset_t) gatt->ag_virtual);
- agp_flush_cache();
- /* Install the GATT. */
- bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL,
- gatt->ag_physical | 1);
- } else if ( sc->chiptype == CHIP_I830 ) {
- /* The i830 automatically initializes the 128k gatt on boot. */
- unsigned int gcc1, pgtblctl;
-
- gcc1 = pci_read_config(sc->bdev, AGP_I830_GCC1, 1);
- switch (gcc1 & AGP_I830_GCC1_GMS) {
- case AGP_I830_GCC1_GMS_STOLEN_512:
- sc->stolen = (512 - 132) * 1024 / 4096;
- break;
- case AGP_I830_GCC1_GMS_STOLEN_1024:
- sc->stolen = (1024 - 132) * 1024 / 4096;
- break;
- case AGP_I830_GCC1_GMS_STOLEN_8192:
- sc->stolen = (8192 - 132) * 1024 / 4096;
- break;
- default:
- sc->stolen = 0;
- device_printf(dev, "unknown memory configuration, disabling\n");
- bus_release_resources(dev, sc->sc_res_spec,
- sc->sc_res);
- free(gatt, M_AGP);
- agp_generic_detach(dev);
- return EINVAL;
- }
+static int
+agp_i830_install_gatt(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint32_t pgtblctl;
- /* GATT address is already in there, make sure it's enabled */
- pgtblctl = bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL);
- pgtblctl |= 1;
- bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL, pgtblctl);
+ sc = device_get_softc(dev);
- gatt->ag_physical = pgtblctl & ~1;
- } else if (sc->chiptype == CHIP_I855 || sc->chiptype == CHIP_I915 ||
- sc->chiptype == CHIP_I965 || sc->chiptype == CHIP_G33 ||
- sc->chiptype == CHIP_IGD || sc->chiptype == CHIP_G4X) {
- unsigned int gcc1, pgtblctl, stolen, gtt_size;
+ /*
+ * The i830 automatically initializes the 128k gatt on boot.
+ * GATT address is already in there, make sure it's enabled.
+ */
+ pgtblctl = bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL);
+ pgtblctl |= 1;
+ bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL, pgtblctl);
+
+ sc->gatt->ag_physical = pgtblctl & ~1;
+ return (0);
+}
- /* Stolen memory is set up at the beginning of the aperture by
- * the BIOS, consisting of the GATT followed by 4kb for the
- * BIOS display.
- */
- switch (sc->chiptype) {
- case CHIP_I855:
- gtt_size = 128;
- break;
- case CHIP_I915:
- gtt_size = 256;
- break;
- case CHIP_I965:
- switch (bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL) &
- AGP_I810_PGTBL_SIZE_MASK) {
- case AGP_I810_PGTBL_SIZE_128KB:
- gtt_size = 128;
- break;
- case AGP_I810_PGTBL_SIZE_256KB:
- gtt_size = 256;
- break;
- case AGP_I810_PGTBL_SIZE_512KB:
- gtt_size = 512;
- break;
- case AGP_I965_PGTBL_SIZE_1MB:
- gtt_size = 1024;
- break;
- case AGP_I965_PGTBL_SIZE_2MB:
- gtt_size = 2048;
- break;
- case AGP_I965_PGTBL_SIZE_1_5MB:
- gtt_size = 1024 + 512;
- break;
- default:
- device_printf(dev, "Bad PGTBL size\n");
- bus_release_resources(dev, sc->sc_res_spec,
- sc->sc_res);
- free(gatt, M_AGP);
- agp_generic_detach(dev);
- return EINVAL;
- }
- break;
- case CHIP_G33:
- gcc1 = pci_read_config(sc->bdev, AGP_I855_GCC1, 2);
- switch (gcc1 & AGP_G33_MGGC_GGMS_MASK) {
- case AGP_G33_MGGC_GGMS_SIZE_1M:
- gtt_size = 1024;
- break;
- case AGP_G33_MGGC_GGMS_SIZE_2M:
- gtt_size = 2048;
- break;
- default:
- device_printf(dev, "Bad PGTBL size\n");
- bus_release_resources(dev, sc->sc_res_spec,
- sc->sc_res);
- free(gatt, M_AGP);
- agp_generic_detach(dev);
- return EINVAL;
- }
- break;
- case CHIP_IGD:
- case CHIP_G4X:
- gtt_size = 0;
- break;
- default:
- device_printf(dev, "Bad chiptype\n");
- bus_release_resources(dev, sc->sc_res_spec,
- sc->sc_res);
- free(gatt, M_AGP);
- agp_generic_detach(dev);
- return EINVAL;
- }
+static int
+agp_i810_attach(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ int error;
- /* GCC1 is called MGGC on i915+ */
- gcc1 = pci_read_config(sc->bdev, AGP_I855_GCC1, 1);
- switch (gcc1 & AGP_I855_GCC1_GMS) {
- case AGP_I855_GCC1_GMS_STOLEN_1M:
- stolen = 1024;
- break;
- case AGP_I855_GCC1_GMS_STOLEN_4M:
- stolen = 4 * 1024;
- break;
- case AGP_I855_GCC1_GMS_STOLEN_8M:
- stolen = 8 * 1024;
- break;
- case AGP_I855_GCC1_GMS_STOLEN_16M:
- stolen = 16 * 1024;
- break;
- case AGP_I855_GCC1_GMS_STOLEN_32M:
- stolen = 32 * 1024;
- break;
- case AGP_I915_GCC1_GMS_STOLEN_48M:
- if (sc->chiptype == CHIP_I915 ||
- sc->chiptype == CHIP_I965 ||
- sc->chiptype == CHIP_G33 ||
- sc->chiptype == CHIP_IGD ||
- sc->chiptype == CHIP_G4X) {
- stolen = 48 * 1024;
- } else {
- stolen = 0;
- }
- break;
- case AGP_I915_GCC1_GMS_STOLEN_64M:
- if (sc->chiptype == CHIP_I915 ||
- sc->chiptype == CHIP_I965 ||
- sc->chiptype == CHIP_G33 ||
- sc->chiptype == CHIP_IGD ||
- sc->chiptype == CHIP_G4X) {
- stolen = 64 * 1024;
- } else {
- stolen = 0;
- }
- break;
- case AGP_G33_GCC1_GMS_STOLEN_128M:
- if (sc->chiptype == CHIP_I965 ||
- sc->chiptype == CHIP_G33 ||
- sc->chiptype == CHIP_IGD ||
- sc->chiptype == CHIP_G4X) {
- stolen = 128 * 1024;
- } else {
- stolen = 0;
- }
- break;
- case AGP_G33_GCC1_GMS_STOLEN_256M:
- if (sc->chiptype == CHIP_I965 ||
- sc->chiptype == CHIP_G33 ||
- sc->chiptype == CHIP_IGD ||
- sc->chiptype == CHIP_G4X) {
- stolen = 256 * 1024;
- } else {
- stolen = 0;
- }
- break;
- case AGP_G4X_GCC1_GMS_STOLEN_96M:
- if (sc->chiptype == CHIP_I965 ||
- sc->chiptype == CHIP_G4X) {
- stolen = 96 * 1024;
- } else {
- stolen = 0;
- }
- break;
- case AGP_G4X_GCC1_GMS_STOLEN_160M:
- if (sc->chiptype == CHIP_I965 ||
- sc->chiptype == CHIP_G4X) {
- stolen = 160 * 1024;
- } else {
- stolen = 0;
- }
- break;
- case AGP_G4X_GCC1_GMS_STOLEN_224M:
- if (sc->chiptype == CHIP_I965 ||
- sc->chiptype == CHIP_G4X) {
- stolen = 224 * 1024;
- } else {
- stolen = 0;
- }
- break;
- case AGP_G4X_GCC1_GMS_STOLEN_352M:
- if (sc->chiptype == CHIP_I965 ||
- sc->chiptype == CHIP_G4X) {
- stolen = 352 * 1024;
- } else {
- stolen = 0;
- }
- break;
- default:
- device_printf(dev, "unknown memory configuration, "
- "disabling\n");
- bus_release_resources(dev, sc->sc_res_spec,
- sc->sc_res);
- free(gatt, M_AGP);
- agp_generic_detach(dev);
- return EINVAL;
- }
+ sc = device_get_softc(dev);
+ sc->bdev = agp_i810_find_bridge(dev);
+ if (sc->bdev == NULL)
+ return (ENOENT);
- gtt_size += 4;
+ sc->match = agp_i810_match(dev);
- sc->stolen = (stolen - gtt_size) * 1024 / 4096;
+ agp_set_aperture_resource(dev, sc->match->driver->gen <= 2 ?
+ AGP_APBASE : AGP_I915_GMADR);
+ error = agp_generic_attach(dev);
+ if (error)
+ return (error);
+
+ if (ptoa((vm_paddr_t)Maxmem) >
+ (1ULL << sc->match->driver->busdma_addr_mask_sz) - 1) {
+ device_printf(dev, "agp_i810 does not support physical "
+ "memory above %ju.\n", (uintmax_t)(1ULL <<
+ sc->match->driver->busdma_addr_mask_sz) - 1);
+ return (ENOENT);
+ }
- /* GATT address is already in there, make sure it's enabled */
- pgtblctl = bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL);
- pgtblctl |= 1;
- bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL, pgtblctl);
+ if (bus_alloc_resources(dev, sc->match->driver->res_spec, sc->sc_res)) {
+ agp_generic_detach(dev);
+ return (ENODEV);
+ }
- gatt->ag_physical = pgtblctl & ~1;
+ sc->initial_aperture = AGP_GET_APERTURE(dev);
+ sc->gatt = malloc(sizeof(struct agp_gatt), M_AGP, M_WAITOK);
+ sc->gatt->ag_entries = AGP_GET_APERTURE(dev) >> AGP_PAGE_SHIFT;
+
+ if ((error = sc->match->driver->get_stolen_size(dev)) != 0 ||
+ (error = sc->match->driver->install_gatt(dev)) != 0 ||
+ (error = sc->match->driver->get_gtt_mappable_entries(dev)) != 0 ||
+ (error = sc->match->driver->get_gtt_total_entries(dev)) != 0 ||
+ (error = sc->match->driver->chipset_flush_setup(dev)) != 0) {
+ bus_release_resources(dev, sc->match->driver->res_spec,
+ sc->sc_res);
+ free(sc->gatt, M_AGP);
+ agp_generic_detach(dev);
+ return (error);
}
+ intel_agp = dev;
device_printf(dev, "aperture size is %dM",
sc->initial_aperture / 1024 / 1024);
if (sc->stolen > 0)
printf(", detected %dk stolen memory\n", sc->stolen * 4);
else
printf("\n");
+ if (bootverbose) {
+ sc->match->driver->dump_regs(dev);
+ device_printf(dev, "Mappable GTT entries: %d\n",
+ sc->gtt_mappable_entries);
+ device_printf(dev, "Total GTT entries: %d\n",
+ sc->gtt_total_entries);
+ }
+ return (0);
+}
- if (0)
- agp_i810_dump_regs(dev);
+static void
+agp_i810_deinstall_gatt(device_t dev)
+{
+ struct agp_i810_softc *sc;
- return 0;
+ sc = device_get_softc(dev);
+ bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL, 0);
+ contigfree(sc->gatt->ag_virtual, 64 * 1024, M_AGP);
+}
+
+static void
+agp_i830_deinstall_gatt(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ unsigned int pgtblctl;
+
+ sc = device_get_softc(dev);
+ pgtblctl = bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL);
+ pgtblctl &= ~1;
+ bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL, pgtblctl);
}
static int
agp_i810_detach(device_t dev)
{
- struct agp_i810_softc *sc = device_get_softc(dev);
+ struct agp_i810_softc *sc;
+ sc = device_get_softc(dev);
agp_free_cdev(dev);
/* Clear the GATT base. */
- if ( sc->chiptype == CHIP_I810 ) {
- bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL, 0);
- } else {
- unsigned int pgtblctl;
- pgtblctl = bus_read_4(sc->sc_res[0], AGP_I810_PGTBL_CTL);
- pgtblctl &= ~1;
- bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL, pgtblctl);
- }
+ sc->match->driver->deinstall_gatt(dev);
+
+ sc->match->driver->chipset_flush_teardown(dev);
/* Put the aperture back the way it started. */
AGP_SET_APERTURE(dev, sc->initial_aperture);
- if ( sc->chiptype == CHIP_I810 ) {
- contigfree(sc->gatt->ag_virtual, 64 * 1024, M_AGP);
- }
free(sc->gatt, M_AGP);
-
- bus_release_resources(dev, sc->sc_res_spec, sc->sc_res);
+ bus_release_resources(dev, sc->match->driver->res_spec, sc->sc_res);
agp_free_res(dev);
- return 0;
+ return (0);
}
static int
@@ -758,143 +1557,338 @@ agp_i810_resume(device_t dev)
static int
agp_i810_set_aperture(device_t dev, u_int32_t aperture)
{
- struct agp_i810_softc *sc = device_get_softc(dev);
- u_int16_t miscc, gcc1;
+ struct agp_i810_softc *sc;
+ u_int16_t miscc;
- switch (sc->chiptype) {
- case CHIP_I810:
- /*
- * Double check for sanity.
- */
- if (aperture != 32 * 1024 * 1024 && aperture != 64 * 1024 * 1024) {
- device_printf(dev, "bad aperture size %d\n", aperture);
- return EINVAL;
- }
+ sc = device_get_softc(dev);
+ /*
+ * Double check for sanity.
+ */
+ if (aperture != 32 * 1024 * 1024 && aperture != 64 * 1024 * 1024) {
+ device_printf(dev, "bad aperture size %d\n", aperture);
+ return (EINVAL);
+ }
- miscc = pci_read_config(sc->bdev, AGP_I810_MISCC, 2);
- miscc &= ~AGP_I810_MISCC_WINSIZE;
- if (aperture == 32 * 1024 * 1024)
- miscc |= AGP_I810_MISCC_WINSIZE_32;
- else
- miscc |= AGP_I810_MISCC_WINSIZE_64;
+ miscc = pci_read_config(sc->bdev, AGP_I810_MISCC, 2);
+ miscc &= ~AGP_I810_MISCC_WINSIZE;
+ if (aperture == 32 * 1024 * 1024)
+ miscc |= AGP_I810_MISCC_WINSIZE_32;
+ else
+ miscc |= AGP_I810_MISCC_WINSIZE_64;
- pci_write_config(sc->bdev, AGP_I810_MISCC, miscc, 2);
- break;
- case CHIP_I830:
- if (aperture != 64 * 1024 * 1024 &&
- aperture != 128 * 1024 * 1024) {
- device_printf(dev, "bad aperture size %d\n", aperture);
- return EINVAL;
- }
- gcc1 = pci_read_config(sc->bdev, AGP_I830_GCC1, 2);
- gcc1 &= ~AGP_I830_GCC1_GMASIZE;
- if (aperture == 64 * 1024 * 1024)
- gcc1 |= AGP_I830_GCC1_GMASIZE_64;
- else
- gcc1 |= AGP_I830_GCC1_GMASIZE_128;
+ pci_write_config(sc->bdev, AGP_I810_MISCC, miscc, 2);
+ return (0);
+}
- pci_write_config(sc->bdev, AGP_I830_GCC1, gcc1, 2);
- break;
- case CHIP_I855:
- case CHIP_I915:
- case CHIP_I965:
- case CHIP_G33:
- case CHIP_IGD:
- case CHIP_G4X:
- return agp_generic_set_aperture(dev, aperture);
+static int
+agp_i830_set_aperture(device_t dev, u_int32_t aperture)
+{
+ struct agp_i810_softc *sc;
+ u_int16_t gcc1;
+
+ sc = device_get_softc(dev);
+
+ if (aperture != 64 * 1024 * 1024 &&
+ aperture != 128 * 1024 * 1024) {
+ device_printf(dev, "bad aperture size %d\n", aperture);
+ return (EINVAL);
}
+ gcc1 = pci_read_config(sc->bdev, AGP_I830_GCC1, 2);
+ gcc1 &= ~AGP_I830_GCC1_GMASIZE;
+ if (aperture == 64 * 1024 * 1024)
+ gcc1 |= AGP_I830_GCC1_GMASIZE_64;
+ else
+ gcc1 |= AGP_I830_GCC1_GMASIZE_128;
+
+ pci_write_config(sc->bdev, AGP_I830_GCC1, gcc1, 2);
+ return (0);
+}
+
+static int
+agp_i915_set_aperture(device_t dev, u_int32_t aperture)
+{
+
+ return (agp_generic_set_aperture(dev, aperture));
+}
+
+static int
+agp_i810_method_set_aperture(device_t dev, u_int32_t aperture)
+{
+ struct agp_i810_softc *sc;
- return 0;
+ sc = device_get_softc(dev);
+ return (sc->match->driver->set_aperture(dev, aperture));
}
/**
- * Writes a GTT entry mapping the page at the given offset from the beginning
- * of the aperture to the given physical address.
+ * Writes a GTT entry mapping the page at the given offset from the
+ * beginning of the aperture to the given physical address. Setup the
+ * caching mode according to flags.
+ *
+ * For gen 1, 2 and 3, GTT start is located at AGP_I810_GTT offset
+ * from corresponding BAR start. For gen 4, offset is 512KB +
+ * AGP_I810_GTT, for gen 5 and 6 it is 2MB + AGP_I810_GTT.
+ *
+ * Also, the bits of the physical page address above 4GB needs to be
+ * placed into bits 40-32 of PTE.
*/
static void
-agp_i810_write_gtt_entry(device_t dev, int offset, vm_offset_t physical,
- int enabled)
+agp_i810_install_gtt_pte(device_t dev, u_int index, vm_offset_t physical,
+ int flags)
{
- struct agp_i810_softc *sc = device_get_softc(dev);
- u_int32_t pte;
+ uint32_t pte;
+
+ pte = (u_int32_t)physical | I810_PTE_VALID;
+ if (flags == AGP_DCACHE_MEMORY)
+ pte |= I810_PTE_LOCAL;
+ else if (flags == AGP_USER_CACHED_MEMORY)
+ pte |= I830_PTE_SYSTEM_CACHED;
+ agp_i810_write_gtt(dev, index, pte);
+}
- pte = (u_int32_t)physical | 1;
- if (sc->chiptype == CHIP_I965 || sc->chiptype == CHIP_G33 ||
- sc->chiptype == CHIP_IGD || sc->chiptype == CHIP_G4X) {
- pte |= (physical & 0x0000000f00000000ull) >> 28;
- } else {
- /* If we do actually have memory above 4GB on an older system,
- * crash cleanly rather than scribble on system memory,
- * so we know we need to fix it.
- */
- KASSERT((pte & 0x0000000f00000000ull) == 0,
- (">4GB physical address in agp"));
- }
+static void
+agp_i810_write_gtt(device_t dev, u_int index, uint32_t pte)
+{
+ struct agp_i810_softc *sc;
- switch (sc->chiptype) {
- case CHIP_I810:
- case CHIP_I830:
- case CHIP_I855:
- bus_write_4(sc->sc_res[0],
- AGP_I810_GTT + (offset >> AGP_PAGE_SHIFT) * 4, pte);
- break;
- case CHIP_I915:
- case CHIP_G33:
- case CHIP_IGD:
- bus_write_4(sc->sc_res[1],
- (offset >> AGP_PAGE_SHIFT) * 4, pte);
- break;
- case CHIP_I965:
- bus_write_4(sc->sc_res[0],
- (offset >> AGP_PAGE_SHIFT) * 4 + (512 * 1024), pte);
- break;
- case CHIP_G4X:
- bus_write_4(sc->sc_res[0],
- (offset >> AGP_PAGE_SHIFT) * 4 + (2 * 1024 * 1024), pte);
- break;
- }
+ sc = device_get_softc(dev);
+ bus_write_4(sc->sc_res[0], AGP_I810_GTT + index * 4, pte);
+ CTR2(KTR_AGP_I810, "810_pte %x %x", index, pte);
+}
+
+static void
+agp_i830_install_gtt_pte(device_t dev, u_int index, vm_offset_t physical,
+ int flags)
+{
+ uint32_t pte;
+
+ pte = (u_int32_t)physical | I810_PTE_VALID;
+ if (flags == AGP_USER_CACHED_MEMORY)
+ pte |= I830_PTE_SYSTEM_CACHED;
+ agp_i810_write_gtt(dev, index, pte);
+}
+
+static void
+agp_i915_install_gtt_pte(device_t dev, u_int index, vm_offset_t physical,
+ int flags)
+{
+ uint32_t pte;
+
+ pte = (u_int32_t)physical | I810_PTE_VALID;
+ if (flags == AGP_USER_CACHED_MEMORY)
+ pte |= I830_PTE_SYSTEM_CACHED;
+ pte |= (physical & 0x0000000f00000000ull) >> 28;
+ agp_i915_write_gtt(dev, index, pte);
+}
+
+static void
+agp_i915_write_gtt(device_t dev, u_int index, uint32_t pte)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(dev);
+ bus_write_4(sc->sc_res[1], index * 4, pte);
+ CTR2(KTR_AGP_I810, "915_pte %x %x", index, pte);
+}
+
+static void
+agp_i965_install_gtt_pte(device_t dev, u_int index, vm_offset_t physical,
+ int flags)
+{
+ uint32_t pte;
+
+ pte = (u_int32_t)physical | I810_PTE_VALID;
+ if (flags == AGP_USER_CACHED_MEMORY)
+ pte |= I830_PTE_SYSTEM_CACHED;
+ pte |= (physical & 0x0000000f00000000ull) >> 28;
+ agp_i965_write_gtt(dev, index, pte);
+}
+
+static void
+agp_i965_write_gtt(device_t dev, u_int index, uint32_t pte)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(dev);
+ bus_write_4(sc->sc_res[0], index * 4 + (512 * 1024), pte);
+ CTR2(KTR_AGP_I810, "965_pte %x %x", index, pte);
+}
+
+static void
+agp_g4x_install_gtt_pte(device_t dev, u_int index, vm_offset_t physical,
+ int flags)
+{
+ uint32_t pte;
+
+ pte = (u_int32_t)physical | I810_PTE_VALID;
+ if (flags == AGP_USER_CACHED_MEMORY)
+ pte |= I830_PTE_SYSTEM_CACHED;
+ pte |= (physical & 0x0000000f00000000ull) >> 28;
+ agp_g4x_write_gtt(dev, index, pte);
+}
+
+static void
+agp_g4x_write_gtt(device_t dev, u_int index, uint32_t pte)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(dev);
+ bus_write_4(sc->sc_res[0], index * 4 + (2 * 1024 * 1024), pte);
+ CTR2(KTR_AGP_I810, "g4x_pte %x %x", index, pte);
+}
+
+static void
+agp_sb_install_gtt_pte(device_t dev, u_int index, vm_offset_t physical,
+ int flags)
+{
+ int type_mask, gfdt;
+ uint32_t pte;
+
+ pte = (u_int32_t)physical | I810_PTE_VALID;
+ type_mask = flags & ~AGP_USER_CACHED_MEMORY_GFDT;
+ gfdt = (flags & AGP_USER_CACHED_MEMORY_GFDT) != 0 ? GEN6_PTE_GFDT : 0;
+
+ if (type_mask == AGP_USER_MEMORY)
+ pte |= GEN6_PTE_UNCACHED;
+ else if (type_mask == AGP_USER_CACHED_MEMORY_LLC_MLC)
+ pte |= GEN6_PTE_LLC_MLC | gfdt;
+ else
+ pte |= GEN6_PTE_LLC | gfdt;
+
+ pte |= (physical & 0x000000ff00000000ull) >> 28;
+ agp_sb_write_gtt(dev, index, pte);
+}
+
+static void
+agp_sb_write_gtt(device_t dev, u_int index, uint32_t pte)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(dev);
+ bus_write_4(sc->sc_res[0], index * 4 + (2 * 1024 * 1024), pte);
+ CTR2(KTR_AGP_I810, "sb_pte %x %x", index, pte);
}
static int
agp_i810_bind_page(device_t dev, vm_offset_t offset, vm_offset_t physical)
{
struct agp_i810_softc *sc = device_get_softc(dev);
+ u_int index;
if (offset >= (sc->gatt->ag_entries << AGP_PAGE_SHIFT)) {
- device_printf(dev, "failed: offset is 0x%08jx, shift is %d, entries is %d\n", (intmax_t)offset, AGP_PAGE_SHIFT, sc->gatt->ag_entries);
- return EINVAL;
+ device_printf(dev, "failed: offset is 0x%08jx, "
+ "shift is %d, entries is %d\n", (intmax_t)offset,
+ AGP_PAGE_SHIFT, sc->gatt->ag_entries);
+ return (EINVAL);
}
-
- if ( sc->chiptype != CHIP_I810 ) {
- if ( (offset >> AGP_PAGE_SHIFT) < sc->stolen ) {
- device_printf(dev, "trying to bind into stolen memory");
- return EINVAL;
- }
+ index = offset >> AGP_PAGE_SHIFT;
+ if (sc->stolen != 0 && index < sc->stolen) {
+ device_printf(dev, "trying to bind into stolen memory\n");
+ return (EINVAL);
}
-
- agp_i810_write_gtt_entry(dev, offset, physical, 1);
-
- return 0;
+ sc->match->driver->install_gtt_pte(dev, index, physical, 0);
+ return (0);
}
static int
agp_i810_unbind_page(device_t dev, vm_offset_t offset)
{
- struct agp_i810_softc *sc = device_get_softc(dev);
+ struct agp_i810_softc *sc;
+ u_int index;
+ sc = device_get_softc(dev);
if (offset >= (sc->gatt->ag_entries << AGP_PAGE_SHIFT))
- return EINVAL;
-
- if ( sc->chiptype != CHIP_I810 ) {
- if ( (offset >> AGP_PAGE_SHIFT) < sc->stolen ) {
- device_printf(dev, "trying to unbind from stolen memory");
- return EINVAL;
- }
+ return (EINVAL);
+ index = offset >> AGP_PAGE_SHIFT;
+ if (sc->stolen != 0 && index < sc->stolen) {
+ device_printf(dev, "trying to unbind from stolen memory\n");
+ return (EINVAL);
}
+ sc->match->driver->install_gtt_pte(dev, index, 0, 0);
+ return (0);
+}
+
+static u_int32_t
+agp_i810_read_gtt_pte(device_t dev, u_int index)
+{
+ struct agp_i810_softc *sc;
+ u_int32_t pte;
+
+ sc = device_get_softc(dev);
+ pte = bus_read_4(sc->sc_res[0], AGP_I810_GTT + index * 4);
+ return (pte);
+}
+
+static u_int32_t
+agp_i915_read_gtt_pte(device_t dev, u_int index)
+{
+ struct agp_i810_softc *sc;
+ u_int32_t pte;
+
+ sc = device_get_softc(dev);
+ pte = bus_read_4(sc->sc_res[1], index * 4);
+ return (pte);
+}
+
+static u_int32_t
+agp_i965_read_gtt_pte(device_t dev, u_int index)
+{
+ struct agp_i810_softc *sc;
+ u_int32_t pte;
+
+ sc = device_get_softc(dev);
+ pte = bus_read_4(sc->sc_res[0], index * 4 + (512 * 1024));
+ return (pte);
+}
+
+static u_int32_t
+agp_g4x_read_gtt_pte(device_t dev, u_int index)
+{
+ struct agp_i810_softc *sc;
+ u_int32_t pte;
+
+ sc = device_get_softc(dev);
+ pte = bus_read_4(sc->sc_res[0], index * 4 + (2 * 1024 * 1024));
+ return (pte);
+}
+
+static vm_paddr_t
+agp_i810_read_gtt_pte_paddr(device_t dev, u_int index)
+{
+ struct agp_i810_softc *sc;
+ u_int32_t pte;
+ vm_paddr_t res;
+
+ sc = device_get_softc(dev);
+ pte = sc->match->driver->read_gtt_pte(dev, index);
+ res = pte & ~PAGE_MASK;
+ return (res);
+}
- agp_i810_write_gtt_entry(dev, offset, 0, 0);
+static vm_paddr_t
+agp_i915_read_gtt_pte_paddr(device_t dev, u_int index)
+{
+ struct agp_i810_softc *sc;
+ u_int32_t pte;
+ vm_paddr_t res;
- return 0;
+ sc = device_get_softc(dev);
+ pte = sc->match->driver->read_gtt_pte(dev, index);
+ res = (pte & ~PAGE_MASK) | ((pte & 0xf0) << 28);
+ return (res);
+}
+
+static vm_paddr_t
+agp_sb_read_gtt_pte_paddr(device_t dev, u_int index)
+{
+ struct agp_i810_softc *sc;
+ u_int32_t pte;
+ vm_paddr_t res;
+
+ sc = device_get_softc(dev);
+ pte = sc->match->driver->read_gtt_pte(dev, index);
+ res = (pte & ~PAGE_MASK) | ((pte & 0xff0) << 28);
+ return (res);
}
/*
@@ -909,29 +1903,30 @@ static int
agp_i810_enable(device_t dev, u_int32_t mode)
{
- return 0;
+ return (0);
}
static struct agp_memory *
agp_i810_alloc_memory(device_t dev, int type, vm_size_t size)
{
- struct agp_i810_softc *sc = device_get_softc(dev);
+ struct agp_i810_softc *sc;
struct agp_memory *mem;
+ vm_page_t m;
- if ((size & (AGP_PAGE_SIZE - 1)) != 0)
- return 0;
+ sc = device_get_softc(dev);
- if (sc->agp.as_allocated + size > sc->agp.as_maxmem)
- return 0;
+ if ((size & (AGP_PAGE_SIZE - 1)) != 0 ||
+ sc->agp.as_allocated + size > sc->agp.as_maxmem)
+ return (0);
if (type == 1) {
/*
* Mapping local DRAM into GATT.
*/
- if ( sc->chiptype != CHIP_I810 )
- return 0;
+ if (sc->match->driver->chiptype != CHIP_I810)
+ return (0);
if (size != sc->dcache_size)
- return 0;
+ return (0);
} else if (type == 2) {
/*
* Type 2 is the contiguous physical memory type, that hands
@@ -942,13 +1937,13 @@ agp_i810_alloc_memory(device_t dev, int type, vm_size_t size)
*/
if (size != AGP_PAGE_SIZE) {
if (sc->argb_cursor != NULL)
- return 0;
+ return (0);
/* Allocate memory for ARGB cursor, if we can. */
sc->argb_cursor = contigmalloc(size, M_AGP,
0, 0, ~0, PAGE_SIZE, 0);
if (sc->argb_cursor == NULL)
- return 0;
+ return (0);
}
}
@@ -958,7 +1953,7 @@ agp_i810_alloc_memory(device_t dev, int type, vm_size_t size)
mem->am_type = type;
if (type != 1 && (type != 2 || size == AGP_PAGE_SIZE))
mem->am_obj = vm_object_allocate(OBJT_DEFAULT,
- atop(round_page(size)));
+ atop(round_page(size)));
else
mem->am_obj = 0;
@@ -968,8 +1963,6 @@ agp_i810_alloc_memory(device_t dev, int type, vm_size_t size)
* Allocate and wire down the page now so that we can
* get its physical address.
*/
- vm_page_t m;
-
VM_OBJECT_LOCK(mem->am_obj);
m = vm_page_grab(mem->am_obj, 0, VM_ALLOC_NOBUSY |
VM_ALLOC_WIRED | VM_ALLOC_ZERO | VM_ALLOC_RETRY);
@@ -981,33 +1974,33 @@ agp_i810_alloc_memory(device_t dev, int type, vm_size_t size)
*/
mem->am_physical = vtophys(sc->argb_cursor);
}
- } else {
+ } else
mem->am_physical = 0;
- }
mem->am_offset = 0;
mem->am_is_bound = 0;
TAILQ_INSERT_TAIL(&sc->agp.as_memory, mem, am_link);
sc->agp.as_allocated += size;
- return mem;
+ return (mem);
}
static int
agp_i810_free_memory(device_t dev, struct agp_memory *mem)
{
- struct agp_i810_softc *sc = device_get_softc(dev);
+ struct agp_i810_softc *sc;
+ vm_page_t m;
if (mem->am_is_bound)
- return EBUSY;
+ return (EBUSY);
+
+ sc = device_get_softc(dev);
if (mem->am_type == 2) {
if (mem->am_size == AGP_PAGE_SIZE) {
/*
* Unwire the page which we wired in alloc_memory.
*/
- vm_page_t m;
-
VM_OBJECT_LOCK(mem->am_obj);
m = vm_page_lookup(mem->am_obj, 0);
vm_page_lock(m);
@@ -1025,14 +2018,13 @@ agp_i810_free_memory(device_t dev, struct agp_memory *mem)
if (mem->am_obj)
vm_object_deallocate(mem->am_obj);
free(mem, M_AGP);
- return 0;
+ return (0);
}
static int
-agp_i810_bind_memory(device_t dev, struct agp_memory *mem,
- vm_offset_t offset)
+agp_i810_bind_memory(device_t dev, struct agp_memory *mem, vm_offset_t offset)
{
- struct agp_i810_softc *sc = device_get_softc(dev);
+ struct agp_i810_softc *sc;
vm_offset_t i;
/* Do some sanity checks first. */
@@ -1040,76 +2032,78 @@ agp_i810_bind_memory(device_t dev, struct agp_memory *mem,
offset + mem->am_size > AGP_GET_APERTURE(dev)) {
device_printf(dev, "binding memory at bad offset %#x\n",
(int)offset);
- return EINVAL;
+ return (EINVAL);
}
+ sc = device_get_softc(dev);
if (mem->am_type == 2 && mem->am_size != AGP_PAGE_SIZE) {
mtx_lock(&sc->agp.as_lock);
if (mem->am_is_bound) {
mtx_unlock(&sc->agp.as_lock);
- return EINVAL;
+ return (EINVAL);
}
/* The memory's already wired down, just stick it in the GTT. */
for (i = 0; i < mem->am_size; i += AGP_PAGE_SIZE) {
- agp_i810_write_gtt_entry(dev, offset + i,
- mem->am_physical + i, 1);
+ sc->match->driver->install_gtt_pte(dev, (offset + i) >>
+ AGP_PAGE_SHIFT, mem->am_physical + i, 0);
}
agp_flush_cache();
mem->am_offset = offset;
mem->am_is_bound = 1;
mtx_unlock(&sc->agp.as_lock);
- return 0;
+ return (0);
}
if (mem->am_type != 1)
- return agp_generic_bind_memory(dev, mem, offset);
-
- if ( sc->chiptype != CHIP_I810 )
- return EINVAL;
+ return (agp_generic_bind_memory(dev, mem, offset));
- for (i = 0; i < mem->am_size; i += AGP_PAGE_SIZE) {
+ /*
+ * Mapping local DRAM into GATT.
+ */
+ if (sc->match->driver->chiptype != CHIP_I810)
+ return (EINVAL);
+ for (i = 0; i < mem->am_size; i += AGP_PAGE_SIZE)
bus_write_4(sc->sc_res[0],
AGP_I810_GTT + (i >> AGP_PAGE_SHIFT) * 4, i | 3);
- }
- return 0;
+ return (0);
}
static int
agp_i810_unbind_memory(device_t dev, struct agp_memory *mem)
{
- struct agp_i810_softc *sc = device_get_softc(dev);
+ struct agp_i810_softc *sc;
vm_offset_t i;
+ sc = device_get_softc(dev);
+
if (mem->am_type == 2 && mem->am_size != AGP_PAGE_SIZE) {
mtx_lock(&sc->agp.as_lock);
if (!mem->am_is_bound) {
mtx_unlock(&sc->agp.as_lock);
- return EINVAL;
+ return (EINVAL);
}
for (i = 0; i < mem->am_size; i += AGP_PAGE_SIZE) {
- agp_i810_write_gtt_entry(dev, mem->am_offset + i,
- 0, 0);
+ sc->match->driver->install_gtt_pte(dev,
+ (mem->am_offset + i) >> AGP_PAGE_SHIFT, 0, 0);
}
agp_flush_cache();
mem->am_is_bound = 0;
mtx_unlock(&sc->agp.as_lock);
- return 0;
+ return (0);
}
if (mem->am_type != 1)
- return agp_generic_unbind_memory(dev, mem);
-
- if ( sc->chiptype != CHIP_I810 )
- return EINVAL;
+ return (agp_generic_unbind_memory(dev, mem));
+ if (sc->match->driver->chiptype != CHIP_I810)
+ return (EINVAL);
for (i = 0; i < mem->am_size; i += AGP_PAGE_SIZE) {
- bus_write_4(sc->sc_res[0],
- AGP_I810_GTT + (i >> AGP_PAGE_SHIFT) * 4, 0);
+ sc->match->driver->install_gtt_pte(dev, i >> AGP_PAGE_SHIFT,
+ 0, 0);
}
-
- return 0;
+ return (0);
}
static device_method_t agp_i810_methods[] = {
@@ -1123,7 +2117,7 @@ static device_method_t agp_i810_methods[] = {
/* AGP interface */
DEVMETHOD(agp_get_aperture, agp_generic_get_aperture),
- DEVMETHOD(agp_set_aperture, agp_i810_set_aperture),
+ DEVMETHOD(agp_set_aperture, agp_i810_method_set_aperture),
DEVMETHOD(agp_bind_page, agp_i810_bind_page),
DEVMETHOD(agp_unbind_page, agp_i810_unbind_page),
DEVMETHOD(agp_flush_tlb, agp_i810_flush_tlb),
@@ -1132,6 +2126,7 @@ static device_method_t agp_i810_methods[] = {
DEVMETHOD(agp_free_memory, agp_i810_free_memory),
DEVMETHOD(agp_bind_memory, agp_i810_bind_memory),
DEVMETHOD(agp_unbind_memory, agp_i810_unbind_memory),
+ DEVMETHOD(agp_chipset_flush, agp_intel_gtt_chipset_flush),
{ 0, 0 }
};
@@ -1147,3 +2142,424 @@ static devclass_t agp_devclass;
DRIVER_MODULE(agp_i810, vgapci, agp_i810_driver, agp_devclass, 0, 0);
MODULE_DEPEND(agp_i810, agp, 1, 1, 1);
MODULE_DEPEND(agp_i810, pci, 1, 1, 1);
+
+extern vm_page_t bogus_page;
+
+void
+agp_intel_gtt_clear_range(device_t dev, u_int first_entry, u_int num_entries)
+{
+ struct agp_i810_softc *sc;
+ u_int i;
+
+ sc = device_get_softc(dev);
+ for (i = 0; i < num_entries; i++)
+ sc->match->driver->install_gtt_pte(dev, first_entry + i,
+ VM_PAGE_TO_PHYS(bogus_page), 0);
+ sc->match->driver->read_gtt_pte(dev, first_entry + num_entries - 1);
+}
+
+void
+agp_intel_gtt_insert_pages(device_t dev, u_int first_entry, u_int num_entries,
+ vm_page_t *pages, u_int flags)
+{
+ struct agp_i810_softc *sc;
+ u_int i;
+
+ sc = device_get_softc(dev);
+ for (i = 0; i < num_entries; i++) {
+ MPASS(pages[i]->valid == VM_PAGE_BITS_ALL);
+ MPASS(pages[i]->wire_count > 0);
+ sc->match->driver->install_gtt_pte(dev, first_entry + i,
+ VM_PAGE_TO_PHYS(pages[i]), flags);
+ }
+ sc->match->driver->read_gtt_pte(dev, first_entry + num_entries - 1);
+}
+
+struct intel_gtt
+agp_intel_gtt_get(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ struct intel_gtt res;
+
+ sc = device_get_softc(dev);
+ res.stolen_size = sc->stolen_size;
+ res.gtt_total_entries = sc->gtt_total_entries;
+ res.gtt_mappable_entries = sc->gtt_mappable_entries;
+ res.do_idle_maps = 0;
+ res.scratch_page_dma = VM_PAGE_TO_PHYS(bogus_page);
+ return (res);
+}
+
+static int
+agp_i810_chipset_flush_setup(device_t dev)
+{
+
+ return (0);
+}
+
+static void
+agp_i810_chipset_flush_teardown(device_t dev)
+{
+
+ /* Nothing to do. */
+}
+
+static void
+agp_i810_chipset_flush(device_t dev)
+{
+
+ /* Nothing to do. */
+}
+
+static void
+agp_i830_chipset_flush(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint32_t hic;
+ int i;
+
+ sc = device_get_softc(dev);
+ pmap_invalidate_cache();
+ hic = bus_read_4(sc->sc_res[0], AGP_I830_HIC);
+ bus_write_4(sc->sc_res[0], AGP_I830_HIC, hic | (1 << 31));
+ for (i = 0; i < 20000 /* 1 sec */; i++) {
+ hic = bus_read_4(sc->sc_res[0], AGP_I830_HIC);
+ if ((hic & (1 << 31)) != 0)
+ break;
+ DELAY(50);
+ }
+}
+
+static int
+agp_i915_chipset_flush_alloc_page(device_t dev, uint64_t start, uint64_t end)
+{
+ struct agp_i810_softc *sc;
+ device_t vga;
+
+ sc = device_get_softc(dev);
+ vga = device_get_parent(dev);
+ sc->sc_flush_page_rid = 100;
+ sc->sc_flush_page_res = BUS_ALLOC_RESOURCE(device_get_parent(vga), dev,
+ SYS_RES_MEMORY, &sc->sc_flush_page_rid, start, end, PAGE_SIZE,
+ RF_ACTIVE);
+ if (sc->sc_flush_page_res == NULL) {
+ device_printf(dev, "Failed to allocate flush page at 0x%jx\n",
+ (uintmax_t)start);
+ return (EINVAL);
+ }
+ sc->sc_flush_page_vaddr = rman_get_virtual(sc->sc_flush_page_res);
+ if (bootverbose) {
+ device_printf(dev, "Allocated flush page phys 0x%jx virt %p\n",
+ (uintmax_t)rman_get_start(sc->sc_flush_page_res),
+ sc->sc_flush_page_vaddr);
+ }
+ return (0);
+}
+
+static void
+agp_i915_chipset_flush_free_page(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ device_t vga;
+
+ sc = device_get_softc(dev);
+ vga = device_get_parent(dev);
+ if (sc->sc_flush_page_res == NULL)
+ return;
+ BUS_DEACTIVATE_RESOURCE(device_get_parent(vga), dev, SYS_RES_MEMORY,
+ sc->sc_flush_page_rid, sc->sc_flush_page_res);
+ BUS_RELEASE_RESOURCE(device_get_parent(vga), dev, SYS_RES_MEMORY,
+ sc->sc_flush_page_rid, sc->sc_flush_page_res);
+}
+
+static int
+agp_i915_chipset_flush_setup(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint32_t temp;
+ int error;
+
+ sc = device_get_softc(dev);
+ temp = pci_read_config(sc->bdev, AGP_I915_IFPADDR, 4);
+ if ((temp & 1) != 0) {
+ temp &= ~1;
+ if (bootverbose)
+ device_printf(dev,
+ "Found already configured flush page at 0x%jx\n",
+ (uintmax_t)temp);
+ sc->sc_bios_allocated_flush_page = 1;
+ /*
+ * In the case BIOS initialized the flush pointer (?)
+ * register, expect that BIOS also set up the resource
+ * for the page.
+ */
+ error = agp_i915_chipset_flush_alloc_page(dev, temp,
+ temp + PAGE_SIZE - 1);
+ if (error != 0)
+ return (error);
+ } else {
+ sc->sc_bios_allocated_flush_page = 0;
+ error = agp_i915_chipset_flush_alloc_page(dev, 0, 0xffffffff);
+ if (error != 0)
+ return (error);
+ temp = rman_get_start(sc->sc_flush_page_res);
+ pci_write_config(sc->bdev, AGP_I915_IFPADDR, temp | 1, 4);
+ }
+ return (0);
+}
+
+static void
+agp_i915_chipset_flush_teardown(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint32_t temp;
+
+ sc = device_get_softc(dev);
+ if (sc->sc_flush_page_res == NULL)
+ return;
+ if (!sc->sc_bios_allocated_flush_page) {
+ temp = pci_read_config(sc->bdev, AGP_I915_IFPADDR, 4);
+ temp &= ~1;
+ pci_write_config(sc->bdev, AGP_I915_IFPADDR, temp, 4);
+ }
+ agp_i915_chipset_flush_free_page(dev);
+}
+
+static int
+agp_i965_chipset_flush_setup(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint64_t temp;
+ uint32_t temp_hi, temp_lo;
+ int error;
+
+ sc = device_get_softc(dev);
+
+ temp_hi = pci_read_config(sc->bdev, AGP_I965_IFPADDR + 4, 4);
+ temp_lo = pci_read_config(sc->bdev, AGP_I965_IFPADDR, 4);
+
+ if ((temp_lo & 1) != 0) {
+ temp = ((uint64_t)temp_hi << 32) | (temp_lo & ~1);
+ if (bootverbose)
+ device_printf(dev,
+ "Found already configured flush page at 0x%jx\n",
+ (uintmax_t)temp);
+ sc->sc_bios_allocated_flush_page = 1;
+ /*
+ * In the case BIOS initialized the flush pointer (?)
+ * register, expect that BIOS also set up the resource
+ * for the page.
+ */
+ error = agp_i915_chipset_flush_alloc_page(dev, temp,
+ temp + PAGE_SIZE - 1);
+ if (error != 0)
+ return (error);
+ } else {
+ sc->sc_bios_allocated_flush_page = 0;
+ error = agp_i915_chipset_flush_alloc_page(dev, 0, ~0);
+ if (error != 0)
+ return (error);
+ temp = rman_get_start(sc->sc_flush_page_res);
+ pci_write_config(sc->bdev, AGP_I965_IFPADDR + 4,
+ (temp >> 32) & UINT32_MAX, 4);
+ pci_write_config(sc->bdev, AGP_I965_IFPADDR,
+ (temp & UINT32_MAX) | 1, 4);
+ }
+ return (0);
+}
+
+static void
+agp_i965_chipset_flush_teardown(device_t dev)
+{
+ struct agp_i810_softc *sc;
+ uint32_t temp_lo;
+
+ sc = device_get_softc(dev);
+ if (sc->sc_flush_page_res == NULL)
+ return;
+ if (!sc->sc_bios_allocated_flush_page) {
+ temp_lo = pci_read_config(sc->bdev, AGP_I965_IFPADDR, 4);
+ temp_lo &= ~1;
+ pci_write_config(sc->bdev, AGP_I965_IFPADDR, temp_lo, 4);
+ }
+ agp_i915_chipset_flush_free_page(dev);
+}
+
+static void
+agp_i915_chipset_flush(device_t dev)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(dev);
+ *(uint32_t *)sc->sc_flush_page_vaddr = 1;
+}
+
+int
+agp_intel_gtt_chipset_flush(device_t dev)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(dev);
+ sc->match->driver->chipset_flush(dev);
+ return (0);
+}
+
+void
+agp_intel_gtt_unmap_memory(device_t dev, struct sglist *sg_list)
+{
+}
+
+int
+agp_intel_gtt_map_memory(device_t dev, vm_page_t *pages, u_int num_entries,
+ struct sglist **sg_list)
+{
+ struct agp_i810_softc *sc;
+ struct sglist *sg;
+ int i;
+#if 0
+ int error;
+ bus_dma_tag_t dmat;
+#endif
+
+ if (*sg_list != NULL)
+ return (0);
+ sc = device_get_softc(dev);
+ sg = sglist_alloc(num_entries, M_WAITOK /* XXXKIB */);
+ for (i = 0; i < num_entries; i++) {
+ sg->sg_segs[i].ss_paddr = VM_PAGE_TO_PHYS(pages[i]);
+ sg->sg_segs[i].ss_len = PAGE_SIZE;
+ }
+
+#if 0
+ error = bus_dma_tag_create(bus_get_dma_tag(dev),
+ 1 /* alignment */, 0 /* boundary */,
+ 1ULL << sc->match->busdma_addr_mask_sz /* lowaddr */,
+ BUS_SPACE_MAXADDR /* highaddr */,
+ NULL /* filtfunc */, NULL /* filtfuncarg */,
+ BUS_SPACE_MAXADDR /* maxsize */,
+ BUS_SPACE_UNRESTRICTED /* nsegments */,
+ BUS_SPACE_MAXADDR /* maxsegsz */,
+ 0 /* flags */, NULL /* lockfunc */, NULL /* lockfuncarg */,
+ &dmat);
+ if (error != 0) {
+ sglist_free(sg);
+ return (error);
+ }
+ /* XXXKIB */
+#endif
+ *sg_list = sg;
+ return (0);
+}
+
+void
+agp_intel_gtt_insert_sg_entries(device_t dev, struct sglist *sg_list,
+ u_int first_entry, u_int flags)
+{
+ struct agp_i810_softc *sc;
+ vm_paddr_t spaddr;
+ size_t slen;
+ u_int i, j;
+
+ sc = device_get_softc(dev);
+ for (i = j = 0; j < sg_list->sg_nseg; j++) {
+ spaddr = sg_list->sg_segs[i].ss_paddr;
+ slen = sg_list->sg_segs[i].ss_len;
+ for (; slen > 0; i++) {
+ sc->match->driver->install_gtt_pte(dev, first_entry + i,
+ spaddr, flags);
+ spaddr += AGP_PAGE_SIZE;
+ slen -= AGP_PAGE_SIZE;
+ }
+ }
+ sc->match->driver->read_gtt_pte(dev, first_entry + i - 1);
+}
+
+void
+intel_gtt_clear_range(u_int first_entry, u_int num_entries)
+{
+
+ agp_intel_gtt_clear_range(intel_agp, first_entry, num_entries);
+}
+
+void
+intel_gtt_insert_pages(u_int first_entry, u_int num_entries, vm_page_t *pages,
+ u_int flags)
+{
+
+ agp_intel_gtt_insert_pages(intel_agp, first_entry, num_entries,
+ pages, flags);
+}
+
+struct intel_gtt
+intel_gtt_get(void)
+{
+
+ return (agp_intel_gtt_get(intel_agp));
+}
+
+int
+intel_gtt_chipset_flush(void)
+{
+
+ return (agp_intel_gtt_chipset_flush(intel_agp));
+}
+
+void
+intel_gtt_unmap_memory(struct sglist *sg_list)
+{
+
+ agp_intel_gtt_unmap_memory(intel_agp, sg_list);
+}
+
+int
+intel_gtt_map_memory(vm_page_t *pages, u_int num_entries,
+ struct sglist **sg_list)
+{
+
+ return (agp_intel_gtt_map_memory(intel_agp, pages, num_entries,
+ sg_list));
+}
+
+void
+intel_gtt_insert_sg_entries(struct sglist *sg_list, u_int first_entry,
+ u_int flags)
+{
+
+ agp_intel_gtt_insert_sg_entries(intel_agp, sg_list, first_entry, flags);
+}
+
+device_t
+intel_gtt_get_bridge_device(void)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(intel_agp);
+ return (sc->bdev);
+}
+
+vm_paddr_t
+intel_gtt_read_pte_paddr(u_int entry)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(intel_agp);
+ return (sc->match->driver->read_gtt_pte_paddr(intel_agp, entry));
+}
+
+u_int32_t
+intel_gtt_read_pte(u_int entry)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(intel_agp);
+ return (sc->match->driver->read_gtt_pte(intel_agp, entry));
+}
+
+void
+intel_gtt_write(u_int entry, uint32_t val)
+{
+ struct agp_i810_softc *sc;
+
+ sc = device_get_softc(intel_agp);
+ return (sc->match->driver->write_gtt(intel_agp, entry, val));
+}
diff --git a/sys/dev/agp/agp_i810.h b/sys/dev/agp/agp_i810.h
new file mode 100644
index 000000000000..68cad87a1589
--- /dev/null
+++ b/sys/dev/agp/agp_i810.h
@@ -0,0 +1,101 @@
+/*-
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Konstantin Belousov 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef AGP_AGP_I810_H
+#define AGP_AGP_I810_H
+
+#include <sys/param.h>
+#include <sys/sglist.h>
+
+#include <vm/vm.h>
+#include <vm/vm_page.h>
+
+/* Special gtt memory types */
+#define AGP_DCACHE_MEMORY 1
+#define AGP_PHYS_MEMORY 2
+
+/* New caching attributes for gen6/sandybridge */
+#define AGP_USER_CACHED_MEMORY_LLC_MLC (AGP_USER_TYPES + 2)
+#define AGP_USER_UNCACHED_MEMORY (AGP_USER_TYPES + 4)
+
+/* flag for GFDT type */
+#define AGP_USER_CACHED_MEMORY_GFDT (1 << 3)
+
+struct intel_gtt {
+ /* Size of memory reserved for graphics by the BIOS */
+ u_int stolen_size;
+ /* Total number of gtt entries. */
+ u_int gtt_total_entries;
+ /*
+ * Part of the gtt that is mappable by the cpu, for those
+ * chips where this is not the full gtt.
+ */
+ u_int gtt_mappable_entries;
+
+ /*
+ * Always false.
+ */
+ u_int do_idle_maps;
+
+ /*
+ * Share the scratch page dma with ppgtts.
+ */
+ vm_paddr_t scratch_page_dma;
+};
+
+struct intel_gtt agp_intel_gtt_get(device_t dev);
+int agp_intel_gtt_chipset_flush(device_t dev);
+void agp_intel_gtt_unmap_memory(device_t dev, struct sglist *sg_list);
+void agp_intel_gtt_clear_range(device_t dev, u_int first_entry,
+ u_int num_entries);
+int agp_intel_gtt_map_memory(device_t dev, vm_page_t *pages, u_int num_entries,
+ struct sglist **sg_list);
+void agp_intel_gtt_insert_sg_entries(device_t dev, struct sglist *sg_list,
+ u_int pg_start, u_int flags);
+void agp_intel_gtt_insert_pages(device_t dev, u_int first_entry,
+ u_int num_entries, vm_page_t *pages, u_int flags);
+
+struct intel_gtt intel_gtt_get(void);
+int intel_gtt_chipset_flush(void);
+void intel_gtt_unmap_memory(struct sglist *sg_list);
+void intel_gtt_clear_range(u_int first_entry, u_int num_entries);
+int intel_gtt_map_memory(vm_page_t *pages, u_int num_entries,
+ struct sglist **sg_list);
+void intel_gtt_insert_sg_entries(struct sglist *sg_list, u_int pg_start,
+ u_int flags);
+void intel_gtt_insert_pages(u_int first_entry, u_int num_entries,
+ vm_page_t *pages, u_int flags);
+vm_paddr_t intel_gtt_read_pte_paddr(u_int entry);
+u_int32_t intel_gtt_read_pte(u_int entry);
+device_t intel_gtt_get_bridge_device(void);
+void intel_gtt_write(u_int entry, uint32_t val);
+
+#endif
diff --git a/sys/dev/agp/agp_if.m b/sys/dev/agp/agp_if.m
index da2e19a80ceb..4a97ca95b343 100644
--- a/sys/dev/agp/agp_if.m
+++ b/sys/dev/agp/agp_if.m
@@ -36,6 +36,14 @@
#
INTERFACE agp;
+CODE {
+ static int
+ null_agp_chipset_flush(device_t dev)
+ {
+ return (ENXIO);
+ }
+};
+
#
# Return the current aperture size.
#
@@ -132,3 +140,7 @@ METHOD int unbind_memory {
device_t dev;
struct agp_memory *handle;
};
+
+METHOD int chipset_flush {
+ device_t dev;
+} DEFAULT null_agp_chipset_flush;
diff --git a/sys/dev/agp/agppriv.h b/sys/dev/agp/agppriv.h
index fd64056f6b48..00e7dc13b8d1 100644
--- a/sys/dev/agp/agppriv.h
+++ b/sys/dev/agp/agppriv.h
@@ -73,7 +73,7 @@ struct agp_softc {
struct agp_memory_list as_memory; /* list of allocated memory */
int as_nextid; /* next memory block id */
int as_isopen; /* user device is open */
- struct cdev *as_devnode; /* from make_dev */
+ struct cdev *as_devnode; /* from make_dev */
struct mtx as_lock; /* lock for access to GATT */
};
diff --git a/sys/dev/agp/agpreg.h b/sys/dev/agp/agpreg.h
index b453cac1b39e..dfa93a502b7e 100644
--- a/sys/dev/agp/agpreg.h
+++ b/sys/dev/agp/agpreg.h
@@ -176,10 +176,33 @@
#define AGP_I810_GMADR 0x10
#define AGP_I810_MMADR 0x14
+#define I810_PTE_VALID 0x00000001
+
+/*
+ * Cache control
+ *
+ * Pre-Sandybridge bits
+ */
+#define I810_PTE_MAIN_UNCACHED 0x00000000
+#define I810_PTE_LOCAL 0x00000002 /* Non-snooped main phys memory */
+#define I830_PTE_SYSTEM_CACHED 0x00000006 /* Snooped main phys memory */
+
+/*
+ * Sandybridge
+ * LLC - Last Level Cache
+ * MMC - Mid Level Cache
+ */
+#define GEN6_PTE_RESERVED 0x00000000
+#define GEN6_PTE_UNCACHED 0x00000002 /* Do not cache */
+#define GEN6_PTE_LLC 0x00000004 /* Cache in LLC */
+#define GEN6_PTE_LLC_MLC 0x00000006 /* Cache in LLC and MLC */
+#define GEN6_PTE_GFDT 0x00000008 /* Graphics Data Type */
+
/*
* Memory mapped register offsets for i810 chipset.
*/
#define AGP_I810_PGTBL_CTL 0x2020
+#define AGP_I810_PGTBL_ENABLED 0x00000001
/**
* This field determines the actual size of the global GTT on the 965
* and G33
@@ -187,7 +210,23 @@
#define AGP_I810_PGTBL_SIZE_MASK 0x0000000e
#define AGP_I810_PGTBL_SIZE_512KB (0 << 1)
#define AGP_I810_PGTBL_SIZE_256KB (1 << 1)
-#define AGP_I810_PGTBL_SIZE_128KB (2 << 1)
+#define AGP_I810_PGTBL_SIZE_128KB (2 << 1)
+#define AGP_I810_PGTBL_SIZE_1MB (3 << 1)
+#define AGP_I810_PGTBL_SIZE_2MB (4 << 1)
+#define AGP_I810_PGTBL_SIZE_1_5MB (5 << 1)
+#define AGP_G33_GCC1_SIZE_MASK (3 << 8)
+#define AGP_G33_GCC1_SIZE_1M (1 << 8)
+#define AGP_G33_GCC1_SIZE_2M (2 << 8)
+#define AGP_G4x_GCC1_SIZE_MASK (0xf << 8)
+#define AGP_G4x_GCC1_SIZE_1M (0x1 << 8)
+#define AGP_G4x_GCC1_SIZE_2M (0x3 << 8)
+#define AGP_G4x_GCC1_SIZE_VT_EN (0x8 << 8)
+#define AGP_G4x_GCC1_SIZE_VT_1M \
+ (AGP_G4x_GCC1_SIZE_1M | AGP_G4x_GCC1_SIZE_VT_EN)
+#define AGP_G4x_GCC1_SIZE_VT_1_5M ((0x2 << 8) | AGP_G4x_GCC1_SIZE_VT_EN)
+#define AGP_G4x_GCC1_SIZE_VT_2M \
+ (AGP_G4x_GCC1_SIZE_2M | AGP_G4x_GCC1_SIZE_VT_EN)
+
#define AGP_I810_DRT 0x3000
#define AGP_I810_DRT_UNPOPULATED 0x00
#define AGP_I810_DRT_POPULATED 0x01
@@ -207,6 +246,7 @@
#define AGP_I830_GCC1_GMASIZE 0x01
#define AGP_I830_GCC1_GMASIZE_64 0x01
#define AGP_I830_GCC1_GMASIZE_128 0x00
+#define AGP_I830_HIC 0x70
/*
* Config registers for 852GM/855GM/865G device 0
@@ -243,6 +283,9 @@
#define AGP_I915_GCC1_GMS_STOLEN_48M 0x60
#define AGP_I915_GCC1_GMS_STOLEN_64M 0x70
#define AGP_I915_DEVEN 0x54
+#define AGP_SB_DEVEN_D2EN 0x10 /* SB+ has IGD enabled bit */
+#define AGP_SB_DEVEN_D2EN_ENABLED 0x10 /* in different place */
+#define AGP_SB_DEVEN_D2EN_DISABLED 0x00
#define AGP_I915_DEVEN_D2F0 0x08
#define AGP_I915_DEVEN_D2F0_ENABLED 0x08
#define AGP_I915_DEVEN_D2F0_DISABLED 0x00
@@ -250,6 +293,7 @@
#define AGP_I915_MSAC_GMASIZE 0x02
#define AGP_I915_MSAC_GMASIZE_128 0x02
#define AGP_I915_MSAC_GMASIZE_256 0x00
+#define AGP_I915_IFPADDR 0x60
/*
* G965 registers
@@ -262,6 +306,8 @@
#define AGP_I965_PGTBL_SIZE_1MB (3 << 1)
#define AGP_I965_PGTBL_SIZE_2MB (4 << 1)
#define AGP_I965_PGTBL_SIZE_1_5MB (5 << 1)
+#define AGP_I965_PGTBL_CTL2 0x20c4
+#define AGP_I965_IFPADDR 0x70
/*
* G33 registers
@@ -275,12 +321,43 @@
/*
* G4X registers
*/
+#define AGP_G4X_GMADR 0x20
+#define AGP_G4X_MMADR 0x10
+#define AGP_G4X_GTTADR 0x18
#define AGP_G4X_GCC1_GMS_STOLEN_96M 0xa0
#define AGP_G4X_GCC1_GMS_STOLEN_160M 0xb0
#define AGP_G4X_GCC1_GMS_STOLEN_224M 0xc0
#define AGP_G4X_GCC1_GMS_STOLEN_352M 0xd0
/*
+ * SandyBridge/IvyBridge registers
+ */
+#define AGP_SNB_GCC1 0x50
+#define AGP_SNB_GMCH_GMS_STOLEN_MASK 0xF8
+#define AGP_SNB_GMCH_GMS_STOLEN_32M (1 << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_64M (2 << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_96M (3 << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_128M (4 << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_160M (5 << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_192M (6 << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_224M (7 << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_256M (8 << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_288M (9 << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_320M (0xa << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_352M (0xb << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_384M (0xc << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_416M (0xd << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_448M (0xe << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_480M (0xf << 3)
+#define AGP_SNB_GMCH_GMS_STOLEN_512M (0x10 << 3)
+#define AGP_SNB_GTT_SIZE_0M (0 << 8)
+#define AGP_SNB_GTT_SIZE_1M (1 << 8)
+#define AGP_SNB_GTT_SIZE_2M (2 << 8)
+#define AGP_SNB_GTT_SIZE_MASK (3 << 8)
+
+#define AGP_SNB_GFX_MODE 0x02520
+
+/*
* NVIDIA nForce/nForce2 registers
*/
#define AGP_NVIDIA_0_APBASE 0x10
diff --git a/sys/dev/agp/agpvar.h b/sys/dev/agp/agpvar.h
index 52d40ef2527a..5aeebc949bd2 100644
--- a/sys/dev/agp/agpvar.h
+++ b/sys/dev/agp/agpvar.h
@@ -122,4 +122,10 @@ int agp_unbind_memory(device_t dev, void *handle);
*/
void agp_memory_info(device_t dev, void *handle, struct agp_memory_info *mi);
+#define AGP_NORMAL_MEMORY 0
+
+#define AGP_USER_TYPES (1 << 16)
+#define AGP_USER_MEMORY (AGP_USER_TYPES)
+#define AGP_USER_CACHED_MEMORY (AGP_USER_TYPES + 1)
+
#endif /* !_PCI_AGPVAR_H_ */
diff --git a/sys/dev/ahci/ahci.c b/sys/dev/ahci/ahci.c
index 796dc3364f97..3b26da3fd54e 100644
--- a/sys/dev/ahci/ahci.c
+++ b/sys/dev/ahci/ahci.c
@@ -199,6 +199,7 @@ static struct {
{0x91231b4b, 0x00, "Marvell 88SE912x", AHCI_Q_EDGEIS|AHCI_Q_SATA2|AHCI_Q_NOBSYRES},
{0x91251b4b, 0x00, "Marvell 88SE9125", AHCI_Q_NOBSYRES},
{0x91281b4b, 0x00, "Marvell 88SE9128", AHCI_Q_NOBSYRES|AHCI_Q_ALTSIG},
+ {0x91301b4b, 0x00, "Marvell 88SE9130", AHCI_Q_NOBSYRES|AHCI_Q_ALTSIG},
{0x91721b4b, 0x00, "Marvell 88SE9172", AHCI_Q_NOBSYRES},
{0x91821b4b, 0x00, "Marvell 88SE9182", AHCI_Q_NOBSYRES},
{0x06201103, 0x00, "HighPoint RocketRAID 620", AHCI_Q_NOBSYRES},
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c
index 3caad019faed..6bee48d5b1a2 100644
--- a/sys/dev/ata/ata-all.c
+++ b/sys/dev/ata/ata-all.c
@@ -887,7 +887,7 @@ ata_add_child(device_t parent, struct ata_device *atadev, int unit)
{
device_t child;
- if ((child = device_add_child(parent, NULL, unit))) {
+ if ((child = device_add_child(parent, (unit < 0) ? NULL : "ad", unit))) {
device_set_softc(child, atadev);
device_quiet(child);
atadev->dev = child;
diff --git a/sys/dev/ath/ath_hal/ah.h b/sys/dev/ath/ath_hal/ah.h
index be49e55ff81d..657d14850d90 100644
--- a/sys/dev/ath/ath_hal/ah.h
+++ b/sys/dev/ath/ath_hal/ah.h
@@ -832,7 +832,8 @@ struct ath_hal {
HAL_BOOL bChannelChange, HAL_STATUS *status);
HAL_BOOL __ahdecl(*ah_phyDisable)(struct ath_hal *);
HAL_BOOL __ahdecl(*ah_disable)(struct ath_hal *);
- void __ahdecl(*ah_configPCIE)(struct ath_hal *, HAL_BOOL restore);
+ void __ahdecl(*ah_configPCIE)(struct ath_hal *, HAL_BOOL restore,
+ HAL_BOOL power_off);
void __ahdecl(*ah_disablePCIE)(struct ath_hal *);
void __ahdecl(*ah_setPCUConfig)(struct ath_hal *);
HAL_BOOL __ahdecl(*ah_perCalibration)(struct ath_hal*,
diff --git a/sys/dev/ath/ath_hal/ah_internal.h b/sys/dev/ath/ath_hal/ah_internal.h
index b34d92586d25..0353a9c310a3 100644
--- a/sys/dev/ath/ath_hal/ah_internal.h
+++ b/sys/dev/ath/ath_hal/ah_internal.h
@@ -355,8 +355,8 @@ struct ath_hal_private {
AH_PRIVATE(_ah)->ah_getNfAdjust(_ah, _c)
#define ath_hal_getNoiseFloor(_ah, _nfArray) \
AH_PRIVATE(_ah)->ah_getNoiseFloor(_ah, _nfArray)
-#define ath_hal_configPCIE(_ah, _reset) \
- (_ah)->ah_configPCIE(_ah, _reset)
+#define ath_hal_configPCIE(_ah, _reset, _poweroff) \
+ (_ah)->ah_configPCIE(_ah, _reset, _poweroff)
#define ath_hal_disablePCIE(_ah) \
(_ah)->ah_disablePCIE(_ah)
#define ath_hal_setInterrupts(_ah, _mask) \
diff --git a/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c b/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
index 0858b9706222..03c5f93221b6 100644
--- a/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
+++ b/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
@@ -33,7 +33,8 @@ static HAL_BOOL ar5210GetChannelEdges(struct ath_hal *,
static HAL_BOOL ar5210GetChipPowerLimits(struct ath_hal *ah,
struct ieee80211_channel *chan);
-static void ar5210ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore);
+static void ar5210ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore,
+ HAL_BOOL power_on);
static void ar5210DisablePCIE(struct ath_hal *ah);
static const struct ath_hal_private ar5210hal = {{
@@ -332,7 +333,7 @@ ar5210GetChipPowerLimits(struct ath_hal *ah, struct ieee80211_channel *chan)
}
static void
-ar5210ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore)
+ar5210ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore, HAL_BOOL power_off)
{
}
diff --git a/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c b/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
index 7034d56d732b..186ece2559e4 100644
--- a/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
+++ b/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
@@ -33,7 +33,8 @@ static HAL_BOOL ar5211GetChannelEdges(struct ath_hal *ah,
static HAL_BOOL ar5211GetChipPowerLimits(struct ath_hal *ah,
struct ieee80211_channel *chan);
-static void ar5211ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore);
+static void ar5211ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore,
+ HAL_BOOL power_off);
static void ar5211DisablePCIE(struct ath_hal *ah);
static const struct ath_hal_private ar5211hal = {{
@@ -455,7 +456,7 @@ ar5211GetChipPowerLimits(struct ath_hal *ah, struct ieee80211_channel *chan)
}
static void
-ar5211ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore)
+ar5211ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore, HAL_BOOL power_off)
{
}
diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
index 8aec9ff55e39..43cbe7fdf2ba 100644
--- a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
+++ b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
@@ -29,7 +29,8 @@
#define AH_5212_COMMON
#include "ar5212/ar5212.ini"
-static void ar5212ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore);
+static void ar5212ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore,
+ HAL_BOOL power_off);
static void ar5212DisablePCIE(struct ath_hal *ah);
static const struct ath_hal_private ar5212hal = {{
@@ -370,7 +371,7 @@ ar5212Attach(uint16_t devid, HAL_SOFTC sc,
if (AH_PRIVATE(ah)->ah_ispcie) {
/* XXX: build flag to disable this? */
- ath_hal_configPCIE(ah, AH_FALSE);
+ ath_hal_configPCIE(ah, AH_FALSE, AH_FALSE);
}
if (!ar5212ChipTest(ah)) {
@@ -666,7 +667,7 @@ ar5212GetChannelEdges(struct ath_hal *ah,
* XXX Clean up the magic numbers.
*/
static void
-ar5212ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore)
+ar5212ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore, HAL_BOOL power_off)
{
OS_REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fc00);
OS_REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c b/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
index 1fc7140b82f0..fc5eefb0feff 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
@@ -30,7 +30,9 @@
#include "ar5416/ar5416.ini"
-static void ar5416ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore);
+static void ar5416ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore,
+ HAL_BOOL power_off);
+static void ar5416DisablePCIE(struct ath_hal *ah);
static void ar5416WriteIni(struct ath_hal *ah,
const struct ieee80211_channel *chan);
static void ar5416SpurMitigate(struct ath_hal *ah,
@@ -99,6 +101,7 @@ ar5416InitState(struct ath_hal_5416 *ahp5416, uint16_t devid, HAL_SOFTC sc,
ah->ah_phyDisable = ar5416PhyDisable;
ah->ah_disable = ar5416Disable;
ah->ah_configPCIE = ar5416ConfigPCIE;
+ ah->ah_disablePCIE = ar5416DisablePCIE;
ah->ah_perCalibration = ar5416PerCalibration;
ah->ah_perCalibrationN = ar5416PerCalibrationN,
ah->ah_resetCalValid = ar5416ResetCalValid,
@@ -457,22 +460,73 @@ void
ar5416AttachPCIE(struct ath_hal *ah)
{
if (AH_PRIVATE(ah)->ah_ispcie)
- ath_hal_configPCIE(ah, AH_FALSE);
+ ath_hal_configPCIE(ah, AH_FALSE, AH_FALSE);
else
ath_hal_disablePCIE(ah);
}
static void
-ar5416ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore)
+ar5416ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore, HAL_BOOL power_off)
{
- if (AH_PRIVATE(ah)->ah_ispcie && !restore) {
+
+ /* This is only applicable for AR5418 (AR5416 PCIe) */
+ if (! AH_PRIVATE(ah)->ah_ispcie)
+ return;
+
+ if (! restore) {
ath_hal_ini_write(ah, &AH5416(ah)->ah_ini_pcieserdes, 1, 0);
OS_DELAY(1000);
- OS_REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
+ }
+
+ if (power_off) { /* Power-off */
+ /* clear bit 19 to disable L1 */
+ OS_REG_CLR_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
+ } else { /* Power-on */
+ /* Set default WAR values for Owl */
OS_REG_WRITE(ah, AR_WA, AR_WA_DEFAULT);
+
+ /* set bit 19 to allow forcing of pcie core into L1 state */
+ OS_REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
}
}
+/*
+ * Disable PCIe PHY if PCIe isn't used.
+ */
+static void
+ar5416DisablePCIE(struct ath_hal *ah)
+{
+
+ /* PCIe? Don't */
+ if (AH_PRIVATE(ah)->ah_ispcie)
+ return;
+
+ /* .. Only applicable for AR5416v2 or later */
+ if (! (AR_SREV_OWL(ah) && AR_SREV_OWL_20_OR_LATER(ah)))
+ return;
+
+ OS_REG_WRITE_BUFFER_ENABLE(ah);
+
+ /*
+ * Disable the PCIe PHY.
+ */
+ OS_REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fc00);
+ OS_REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
+ OS_REG_WRITE(ah, AR_PCIE_SERDES, 0x28000029);
+ OS_REG_WRITE(ah, AR_PCIE_SERDES, 0x57160824);
+ OS_REG_WRITE(ah, AR_PCIE_SERDES, 0x25980579);
+ OS_REG_WRITE(ah, AR_PCIE_SERDES, 0x00000000);
+ OS_REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40);
+ OS_REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554);
+ OS_REG_WRITE(ah, AR_PCIE_SERDES, 0x000e1007);
+
+ /* Load the new settings */
+ OS_REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
+
+ OS_REG_WRITE_BUFFER_FLUSH(ah);
+ OS_REG_WRITE_BUFFER_DISABLE(ah);
+}
+
static void
ar5416WriteIni(struct ath_hal *ah, const struct ieee80211_channel *chan)
{
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416reg.h b/sys/dev/ath/ath_hal/ar5416/ar5416reg.h
index f8e897dd4ccb..ea1a9cddfac0 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416reg.h
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416reg.h
@@ -253,11 +253,15 @@
#define AR_MAC_LED_ASSOC_PEND 0x2 /* STA is trying to associate */
#define AR_MAC_LED_ASSOC_S 10
+#define AR_WA_BIT6 0x00000040
+#define AR_WA_BIT7 0x00000080
+#define AR_WA_D3_L1_DISABLE 0x00004000 /* */
#define AR_WA_UNTIE_RESET_EN 0x00008000 /* ena PCI reset to POR */
#define AR_WA_RESET_EN 0x00040000 /* ena AR_WA_UNTIE_RESET_EN */
#define AR_WA_ANALOG_SHIFT 0x00100000
#define AR_WA_POR_SHORT 0x00200000 /* PCIE phy reset control */
-#define AR_WA_D3_L1_DISABLE 0x00800000 /* bit 23 */
+#define AR_WA_BIT22 0x00400000
+#define AR_WA_BIT23 0x00800000
#define AR_WA_DEFAULT 0x0000073f
#define AR9280_WA_DEFAULT 0x0040073b /* disable bit 2, see commit */
diff --git a/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c b/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
index 5c5ad9aa5a4e..36205d4eb610 100644
--- a/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
+++ b/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
@@ -61,7 +61,9 @@ static const HAL_PERCAL_DATA ar9280_adc_init_dc_cal = {
.calPostProc = ar5416AdcDcCalibration
};
-static void ar9280ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore);
+static void ar9280ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore,
+ HAL_BOOL power_off);
+static void ar9280DisablePCIE(struct ath_hal *ah);
static HAL_BOOL ar9280FillCapabilityInfo(struct ath_hal *ah);
static void ar9280WriteIni(struct ath_hal *ah,
const struct ieee80211_channel *chan);
@@ -187,6 +189,7 @@ ar9280Attach(uint16_t devid, HAL_SOFTC sc,
ah->ah_setAntennaSwitch = ar9280SetAntennaSwitch;
ah->ah_configPCIE = ar9280ConfigPCIE;
+ ah->ah_disablePCIE = ar9280DisablePCIE;
AH5416(ah)->ah_cal.iqCalData.calData = &ar9280_iq_cal;
AH5416(ah)->ah_cal.adcGainCalData.calData = &ar9280_adc_gain_cal;
@@ -415,17 +418,73 @@ bad:
}
static void
-ar9280ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore)
+ar9280ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore, HAL_BOOL power_off)
{
+ uint32_t val;
+
if (AH_PRIVATE(ah)->ah_ispcie && !restore) {
ath_hal_ini_write(ah, &AH5416(ah)->ah_ini_pcieserdes, 1, 0);
OS_DELAY(1000);
+ }
+
+
+ /*
+ * Set PCIe workaround bits
+ *
+ * NOTE:
+ *
+ * In Merlin and Kite, bit 14 in WA register (disable L1) should only
+ * be set when device enters D3 and be cleared when device comes back
+ * to D0.
+ */
+ if (power_off) { /* Power-off */
+ OS_REG_CLR_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
+
+ val = OS_REG_READ(ah, AR_WA);
+
+ /*
+ * Disable bit 6 and 7 before entering D3 to prevent
+ * system hang.
+ */
+ val &= ~(AR_WA_BIT6 | AR_WA_BIT7);
+
+ /*
+ * XXX Not sure, is specified in the reference HAL.
+ */
+ val |= AR_WA_BIT22;
+
+ /*
+ * See above: set AR_WA_D3_L1_DISABLE when entering D3 state.
+ *
+ * XXX The reference HAL does it this way - it only sets
+ * AR_WA_D3_L1_DISABLE if it's set in AR9280_WA_DEFAULT,
+ * which it (currently) isn't. So the following statement
+ * is currently a NOP.
+ */
+ if (AR9280_WA_DEFAULT & AR_WA_D3_L1_DISABLE)
+ val |= AR_WA_D3_L1_DISABLE;
+
+ OS_REG_WRITE(ah, AR_WA, val);
+ } else { /* Power-on */
+ val = AR9280_WA_DEFAULT;
+
+ /*
+ * See note above: make sure L1_DISABLE is not set.
+ */
+ val &= (~AR_WA_D3_L1_DISABLE);
+ OS_REG_WRITE(ah, AR_WA, val);
+
+ /* set bit 19 to allow forcing of pcie core into L1 state */
OS_REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
- OS_REG_WRITE(ah, AR_WA, AR9280_WA_DEFAULT);
}
}
static void
+ar9280DisablePCIE(struct ath_hal *ah)
+{
+}
+
+static void
ar9280WriteIni(struct ath_hal *ah, const struct ieee80211_channel *chan)
{
u_int modesIndex, freqIndex;
diff --git a/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c b/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
index b43b48542c4c..690a0cc52f44 100644
--- a/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
+++ b/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
@@ -66,7 +66,9 @@ static const HAL_PERCAL_DATA ar9280_adc_init_dc_cal = {
.calPostProc = ar5416AdcDcCalibration
};
-static void ar9285ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore);
+static void ar9285ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore,
+ HAL_BOOL power_off);
+static void ar9285DisablePCIE(struct ath_hal *ah);
static HAL_BOOL ar9285FillCapabilityInfo(struct ath_hal *ah);
static void ar9285WriteIni(struct ath_hal *ah,
const struct ieee80211_channel *chan);
@@ -152,6 +154,7 @@ ar9285Attach(uint16_t devid, HAL_SOFTC sc,
ah->ah_setAntennaSwitch = ar9285SetAntennaSwitch;
ah->ah_configPCIE = ar9285ConfigPCIE;
+ ah->ah_disablePCIE = ar9285DisablePCIE;
ah->ah_setTxPower = ar9285SetTransmitPower;
ah->ah_setBoardValues = ar9285SetBoardValues;
@@ -362,7 +365,7 @@ bad:
}
static void
-ar9285ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore)
+ar9285ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore, HAL_BOOL power_off)
{
if (AH_PRIVATE(ah)->ah_ispcie && !restore) {
ath_hal_ini_write(ah, &AH5416(ah)->ah_ini_pcieserdes, 1, 0);
@@ -373,6 +376,12 @@ ar9285ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore)
}
static void
+ar9285DisablePCIE(struct ath_hal *ah)
+{
+ /* XXX TODO */
+}
+
+static void
ar9285WriteIni(struct ath_hal *ah, const struct ieee80211_channel *chan)
{
u_int modesIndex, freqIndex;
diff --git a/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c b/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c
index 78f74937a72d..fc69103ba93e 100644
--- a/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c
+++ b/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c
@@ -65,7 +65,9 @@ static const HAL_PERCAL_DATA ar9287_adc_init_dc_cal = {
.calPostProc = ar5416AdcDcCalibration
};
-static void ar9287ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore);
+static void ar9287ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore,
+ HAL_BOOL power_off);
+static void ar9287DisablePCIE(struct ath_hal *ah);
static HAL_BOOL ar9287FillCapabilityInfo(struct ath_hal *ah);
static void ar9287WriteIni(struct ath_hal *ah,
const struct ieee80211_channel *chan);
@@ -141,6 +143,7 @@ ar9287Attach(uint16_t devid, HAL_SOFTC sc,
ah->ah_setAntennaSwitch = ar9287SetAntennaSwitch;
ah->ah_configPCIE = ar9287ConfigPCIE;
+ ah->ah_disablePCIE = ar9287DisablePCIE;
AH5416(ah)->ah_cal.iqCalData.calData = &ar9287_iq_cal;
AH5416(ah)->ah_cal.adcGainCalData.calData = &ar9287_adc_gain_cal;
@@ -357,17 +360,24 @@ bad:
}
static void
-ar9287ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore)
+ar9287ConfigPCIE(struct ath_hal *ah, HAL_BOOL restore, HAL_BOOL power_off)
{
if (AH_PRIVATE(ah)->ah_ispcie && !restore) {
ath_hal_ini_write(ah, &AH5416(ah)->ah_ini_pcieserdes, 1, 0);
OS_DELAY(1000);
OS_REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
- OS_REG_WRITE(ah, AR_WA, AR9285_WA_DEFAULT); /* Yes, Kiwi uses the Kite PCIe PHY WA */
+ /* Yes, Kiwi uses the Kite PCIe PHY WA */
+ OS_REG_WRITE(ah, AR_WA, AR9285_WA_DEFAULT);
}
}
static void
+ar9287DisablePCIE(struct ath_hal *ah)
+{
+ /* XXX TODO */
+}
+
+static void
ar9287WriteIni(struct ath_hal *ah, const struct ieee80211_channel *chan)
{
u_int modesIndex, freqIndex;
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c
index 4511203a2e1a..a4df6a983439 100644
--- a/sys/dev/ath/if_ath.c
+++ b/sys/dev/ath/if_ath.c
@@ -102,10 +102,13 @@ __FBSDID("$FreeBSD$");
#include <dev/ath/if_ath_debug.h>
#include <dev/ath/if_ath_misc.h>
+#include <dev/ath/if_ath_tsf.h>
#include <dev/ath/if_ath_tx.h>
#include <dev/ath/if_ath_sysctl.h>
#include <dev/ath/if_ath_led.h>
#include <dev/ath/if_ath_keycache.h>
+#include <dev/ath/if_ath_rx.h>
+#include <dev/ath/if_ath_beacon.h>
#include <dev/ath/if_athdfs.h>
#ifdef ATH_TX99_DIAG
@@ -139,7 +142,6 @@ static void ath_vap_delete(struct ieee80211vap *);
static void ath_init(void *);
static void ath_stop_locked(struct ifnet *);
static void ath_stop(struct ifnet *);
-static void ath_start(struct ifnet *);
static int ath_reset_vap(struct ieee80211vap *, u_long);
static int ath_media_change(struct ifnet *);
static void ath_watchdog(void *);
@@ -151,21 +153,9 @@ static void ath_key_update_begin(struct ieee80211vap *);
static void ath_key_update_end(struct ieee80211vap *);
static void ath_update_mcast(struct ifnet *);
static void ath_update_promisc(struct ifnet *);
-static void ath_mode_init(struct ath_softc *);
-static void ath_setslottime(struct ath_softc *);
static void ath_updateslot(struct ifnet *);
-static int ath_beaconq_setup(struct ath_hal *);
-static int ath_beacon_alloc(struct ath_softc *, struct ieee80211_node *);
-static void ath_beacon_update(struct ieee80211vap *, int item);
-static void ath_beacon_setup(struct ath_softc *, struct ath_buf *);
-static void ath_beacon_proc(void *, int);
-static struct ath_buf *ath_beacon_generate(struct ath_softc *,
- struct ieee80211vap *);
static void ath_bstuck_proc(void *, int);
static void ath_reset_proc(void *, int);
-static void ath_beacon_return(struct ath_softc *, struct ath_buf *);
-static void ath_beacon_free(struct ath_softc *);
-static void ath_beacon_config(struct ath_softc *, struct ieee80211vap *);
static void ath_descdma_cleanup(struct ath_softc *sc,
struct ath_descdma *, ath_bufhead *);
static int ath_desc_alloc(struct ath_softc *);
@@ -176,16 +166,9 @@ static void ath_node_cleanup(struct ieee80211_node *);
static void ath_node_free(struct ieee80211_node *);
static void ath_node_getsignal(const struct ieee80211_node *,
int8_t *, int8_t *);
-static int ath_rxbuf_init(struct ath_softc *, struct ath_buf *);
-static void ath_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m,
- int subtype, int rssi, int nf);
-static void ath_setdefantenna(struct ath_softc *, u_int);
-static void ath_rx_proc(struct ath_softc *sc, int);
-static void ath_rx_tasklet(void *, int);
static void ath_txq_init(struct ath_softc *sc, struct ath_txq *, int);
static struct ath_txq *ath_txq_setup(struct ath_softc*, int qtype, int subtype);
static int ath_tx_setup(struct ath_softc *, int, int);
-static int ath_wme_update(struct ieee80211com *);
static void ath_tx_cleanupq(struct ath_softc *, struct ath_txq *);
static void ath_tx_cleanup(struct ath_softc *);
static void ath_tx_proc_q0(void *, int);
@@ -194,8 +177,6 @@ static void ath_tx_proc(void *, int);
static void ath_txq_sched_tasklet(void *, int);
static int ath_chan_set(struct ath_softc *, struct ieee80211_channel *);
static void ath_draintxq(struct ath_softc *, ATH_RESET_TYPE reset_type);
-static void ath_stoprecv(struct ath_softc *, int);
-static int ath_startrecv(struct ath_softc *);
static void ath_chan_change(struct ath_softc *, struct ieee80211_channel *);
static void ath_scan_start(struct ieee80211com *);
static void ath_scan_end(struct ieee80211com *);
@@ -222,16 +203,10 @@ static void ath_announce(struct ath_softc *);
static void ath_dfs_tasklet(void *, int);
#ifdef IEEE80211_SUPPORT_TDMA
-static void ath_tdma_settimers(struct ath_softc *sc, u_int32_t nexttbtt,
- u_int32_t bintval);
-static void ath_tdma_bintvalsetup(struct ath_softc *sc,
- const struct ieee80211_tdma_state *tdma);
-static void ath_tdma_config(struct ath_softc *sc, struct ieee80211vap *vap);
-static void ath_tdma_update(struct ieee80211_node *ni,
- const struct ieee80211_tdma_param *tdma, int);
-static void ath_tdma_beacon_send(struct ath_softc *sc,
- struct ieee80211vap *vap);
+#include <dev/ath/if_ath_tdma.h>
+#endif
+#if 0
#define TDMA_EP_MULTIPLIER (1<<10) /* pow2 to optimize out * and / */
#define TDMA_LPF_LEN 6
#define TDMA_DUMMY_MARKER 0x127
@@ -272,7 +247,7 @@ SYSCTL_INT(_hw_ath, OID_AUTO, txbuf, CTLFLAG_RW, &ath_txbuf,
0, "tx buffers allocated");
TUNABLE_INT("hw.ath.txbuf", &ath_txbuf);
-static int ath_bstuck_threshold = 4; /* max missed beacons */
+int ath_bstuck_threshold = 4; /* max missed beacons */
SYSCTL_INT(_hw_ath, OID_AUTO, bstuck, CTLFLAG_RW, &ath_bstuck_threshold,
0, "max missed beacon xmits before chip reset");
@@ -1343,6 +1318,15 @@ ath_suspend(struct ath_softc *sc)
* mode; pci will power off our socket on suspend and
* CardBus detaches the device.
*/
+
+ /*
+ * XXX ensure none of the taskqueues are running
+ * XXX ensure sc_invalid is 1
+ * XXX ensure the calibration callout is disabled
+ */
+
+ /* Disable the PCIe PHY, complete with workarounds */
+ ath_hal_enablepcie(sc->sc_ah, 1, 1);
}
/*
@@ -1375,6 +1359,9 @@ ath_resume(struct ath_softc *sc)
DPRINTF(sc, ATH_DEBUG_ANY, "%s: if_flags %x\n",
__func__, ifp->if_flags);
+ /* Re-enable PCIe, re-enable the PCIe bus */
+ ath_hal_enablepcie(ah, 0, 0);
+
/*
* Must reset the chip before we reload the
* keycache as we were powered down on suspend.
@@ -2334,7 +2321,7 @@ ath_getbuf(struct ath_softc *sc)
return bf;
}
-static void
+void
ath_start(struct ifnet *ifp)
{
struct ath_softc *sc = ifp->if_softc;
@@ -2485,102 +2472,6 @@ ath_key_update_end(struct ieee80211vap *vap)
taskqueue_unblock(sc->sc_tq);
}
-/*
- * Calculate the receive filter according to the
- * operating mode and state:
- *
- * o always accept unicast, broadcast, and multicast traffic
- * o accept PHY error frames when hardware doesn't have MIB support
- * to count and we need them for ANI (sta mode only until recently)
- * and we are not scanning (ANI is disabled)
- * NB: older hal's add rx filter bits out of sight and we need to
- * blindly preserve them
- * o probe request frames are accepted only when operating in
- * hostap, adhoc, mesh, or monitor modes
- * o enable promiscuous mode
- * - when in monitor mode
- * - if interface marked PROMISC (assumes bridge setting is filtered)
- * o accept beacons:
- * - when operating in station mode for collecting rssi data when
- * the station is otherwise quiet, or
- * - when operating in adhoc mode so the 802.11 layer creates
- * node table entries for peers,
- * - when scanning
- * - when doing s/w beacon miss (e.g. for ap+sta)
- * - when operating in ap mode in 11g to detect overlapping bss that
- * require protection
- * - when operating in mesh mode to detect neighbors
- * o accept control frames:
- * - when in monitor mode
- * XXX HT protection for 11n
- */
-static u_int32_t
-ath_calcrxfilter(struct ath_softc *sc)
-{
- struct ifnet *ifp = sc->sc_ifp;
- struct ieee80211com *ic = ifp->if_l2com;
- u_int32_t rfilt;
-
- rfilt = HAL_RX_FILTER_UCAST | HAL_RX_FILTER_BCAST | HAL_RX_FILTER_MCAST;
- if (!sc->sc_needmib && !sc->sc_scanning)
- rfilt |= HAL_RX_FILTER_PHYERR;
- if (ic->ic_opmode != IEEE80211_M_STA)
- rfilt |= HAL_RX_FILTER_PROBEREQ;
- /* XXX ic->ic_monvaps != 0? */
- if (ic->ic_opmode == IEEE80211_M_MONITOR || (ifp->if_flags & IFF_PROMISC))
- rfilt |= HAL_RX_FILTER_PROM;
- if (ic->ic_opmode == IEEE80211_M_STA ||
- ic->ic_opmode == IEEE80211_M_IBSS ||
- sc->sc_swbmiss || sc->sc_scanning)
- rfilt |= HAL_RX_FILTER_BEACON;
- /*
- * NB: We don't recalculate the rx filter when
- * ic_protmode changes; otherwise we could do
- * this only when ic_protmode != NONE.
- */
- if (ic->ic_opmode == IEEE80211_M_HOSTAP &&
- IEEE80211_IS_CHAN_ANYG(ic->ic_curchan))
- rfilt |= HAL_RX_FILTER_BEACON;
-
- /*
- * Enable hardware PS-POLL RX only for hostap mode;
- * STA mode sends PS-POLL frames but never
- * receives them.
- */
- if (ath_hal_getcapability(sc->sc_ah, HAL_CAP_PSPOLL,
- 0, NULL) == HAL_OK &&
- ic->ic_opmode == IEEE80211_M_HOSTAP)
- rfilt |= HAL_RX_FILTER_PSPOLL;
-
- if (sc->sc_nmeshvaps) {
- rfilt |= HAL_RX_FILTER_BEACON;
- if (sc->sc_hasbmatch)
- rfilt |= HAL_RX_FILTER_BSSID;
- else
- rfilt |= HAL_RX_FILTER_PROM;
- }
- if (ic->ic_opmode == IEEE80211_M_MONITOR)
- rfilt |= HAL_RX_FILTER_CONTROL;
-
- /*
- * Enable RX of compressed BAR frames only when doing
- * 802.11n. Required for A-MPDU.
- */
- if (IEEE80211_IS_CHAN_HT(ic->ic_curchan))
- rfilt |= HAL_RX_FILTER_COMPBAR;
-
- /*
- * Enable radar PHY errors if requested by the
- * DFS module.
- */
- if (sc->sc_dodfs)
- rfilt |= HAL_RX_FILTER_PHYRADAR;
-
- DPRINTF(sc, ATH_DEBUG_MODE, "%s: RX filter 0x%x, %s if_flags 0x%x\n",
- __func__, rfilt, ieee80211_opmode_name[ic->ic_opmode], ifp->if_flags);
- return rfilt;
-}
-
static void
ath_update_promisc(struct ifnet *ifp)
{
@@ -2630,7 +2521,7 @@ ath_update_mcast(struct ifnet *ifp)
__func__, mfilt[0], mfilt[1]);
}
-static void
+void
ath_mode_init(struct ath_softc *sc)
{
struct ifnet *ifp = sc->sc_ifp;
@@ -2654,7 +2545,7 @@ ath_mode_init(struct ath_softc *sc)
/*
* Set the slot time based on the current setting.
*/
-static void
+void
ath_setslottime(struct ath_softc *sc)
{
struct ieee80211com *ic = sc->sc_ifp->if_l2com;
@@ -2707,248 +2598,10 @@ ath_updateslot(struct ifnet *ifp)
}
/*
- * Setup a h/w transmit queue for beacons.
- */
-static int
-ath_beaconq_setup(struct ath_hal *ah)
-{
- HAL_TXQ_INFO qi;
-
- memset(&qi, 0, sizeof(qi));
- qi.tqi_aifs = HAL_TXQ_USEDEFAULT;
- qi.tqi_cwmin = HAL_TXQ_USEDEFAULT;
- qi.tqi_cwmax = HAL_TXQ_USEDEFAULT;
- /* NB: for dynamic turbo, don't enable any other interrupts */
- qi.tqi_qflags = HAL_TXQ_TXDESCINT_ENABLE;
- return ath_hal_setuptxqueue(ah, HAL_TX_QUEUE_BEACON, &qi);
-}
-
-/*
- * Setup the transmit queue parameters for the beacon queue.
- */
-static int
-ath_beaconq_config(struct ath_softc *sc)
-{
-#define ATH_EXPONENT_TO_VALUE(v) ((1<<(v))-1)
- struct ieee80211com *ic = sc->sc_ifp->if_l2com;
- struct ath_hal *ah = sc->sc_ah;
- HAL_TXQ_INFO qi;
-
- ath_hal_gettxqueueprops(ah, sc->sc_bhalq, &qi);
- if (ic->ic_opmode == IEEE80211_M_HOSTAP ||
- ic->ic_opmode == IEEE80211_M_MBSS) {
- /*
- * Always burst out beacon and CAB traffic.
- */
- qi.tqi_aifs = ATH_BEACON_AIFS_DEFAULT;
- qi.tqi_cwmin = ATH_BEACON_CWMIN_DEFAULT;
- qi.tqi_cwmax = ATH_BEACON_CWMAX_DEFAULT;
- } else {
- struct wmeParams *wmep =
- &ic->ic_wme.wme_chanParams.cap_wmeParams[WME_AC_BE];
- /*
- * Adhoc mode; important thing is to use 2x cwmin.
- */
- qi.tqi_aifs = wmep->wmep_aifsn;
- qi.tqi_cwmin = 2*ATH_EXPONENT_TO_VALUE(wmep->wmep_logcwmin);
- qi.tqi_cwmax = ATH_EXPONENT_TO_VALUE(wmep->wmep_logcwmax);
- }
-
- if (!ath_hal_settxqueueprops(ah, sc->sc_bhalq, &qi)) {
- device_printf(sc->sc_dev, "unable to update parameters for "
- "beacon hardware queue!\n");
- return 0;
- } else {
- ath_hal_resettxqueue(ah, sc->sc_bhalq); /* push to h/w */
- return 1;
- }
-#undef ATH_EXPONENT_TO_VALUE
-}
-
-/*
- * Allocate and setup an initial beacon frame.
- */
-static int
-ath_beacon_alloc(struct ath_softc *sc, struct ieee80211_node *ni)
-{
- struct ieee80211vap *vap = ni->ni_vap;
- struct ath_vap *avp = ATH_VAP(vap);
- struct ath_buf *bf;
- struct mbuf *m;
- int error;
-
- bf = avp->av_bcbuf;
- DPRINTF(sc, ATH_DEBUG_NODE, "%s: bf_m=%p, bf_node=%p\n",
- __func__, bf->bf_m, bf->bf_node);
- if (bf->bf_m != NULL) {
- bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
- m_freem(bf->bf_m);
- bf->bf_m = NULL;
- }
- if (bf->bf_node != NULL) {
- ieee80211_free_node(bf->bf_node);
- bf->bf_node = NULL;
- }
-
- /*
- * NB: the beacon data buffer must be 32-bit aligned;
- * we assume the mbuf routines will return us something
- * with this alignment (perhaps should assert).
- */
- m = ieee80211_beacon_alloc(ni, &avp->av_boff);
- if (m == NULL) {
- device_printf(sc->sc_dev, "%s: cannot get mbuf\n", __func__);
- sc->sc_stats.ast_be_nombuf++;
- return ENOMEM;
- }
- error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m,
- bf->bf_segs, &bf->bf_nseg,
- BUS_DMA_NOWAIT);
- if (error != 0) {
- device_printf(sc->sc_dev,
- "%s: cannot map mbuf, bus_dmamap_load_mbuf_sg returns %d\n",
- __func__, error);
- m_freem(m);
- return error;
- }
-
- /*
- * Calculate a TSF adjustment factor required for staggered
- * beacons. Note that we assume the format of the beacon
- * frame leaves the tstamp field immediately following the
- * header.
- */
- if (sc->sc_stagbeacons && avp->av_bslot > 0) {
- uint64_t tsfadjust;
- struct ieee80211_frame *wh;
-
- /*
- * The beacon interval is in TU's; the TSF is in usecs.
- * We figure out how many TU's to add to align the timestamp
- * then convert to TSF units and handle byte swapping before
- * inserting it in the frame. The hardware will then add this
- * each time a beacon frame is sent. Note that we align vap's
- * 1..N and leave vap 0 untouched. This means vap 0 has a
- * timestamp in one beacon interval while the others get a
- * timstamp aligned to the next interval.
- */
- tsfadjust = ni->ni_intval *
- (ATH_BCBUF - avp->av_bslot) / ATH_BCBUF;
- tsfadjust = htole64(tsfadjust << 10); /* TU -> TSF */
-
- DPRINTF(sc, ATH_DEBUG_BEACON,
- "%s: %s beacons bslot %d intval %u tsfadjust %llu\n",
- __func__, sc->sc_stagbeacons ? "stagger" : "burst",
- avp->av_bslot, ni->ni_intval,
- (long long unsigned) le64toh(tsfadjust));
-
- wh = mtod(m, struct ieee80211_frame *);
- memcpy(&wh[1], &tsfadjust, sizeof(tsfadjust));
- }
- bf->bf_m = m;
- bf->bf_node = ieee80211_ref_node(ni);
-
- return 0;
-}
-
-/*
- * Setup the beacon frame for transmit.
- */
-static void
-ath_beacon_setup(struct ath_softc *sc, struct ath_buf *bf)
-{
-#define USE_SHPREAMBLE(_ic) \
- (((_ic)->ic_flags & (IEEE80211_F_SHPREAMBLE | IEEE80211_F_USEBARKER))\
- == IEEE80211_F_SHPREAMBLE)
- struct ieee80211_node *ni = bf->bf_node;
- struct ieee80211com *ic = ni->ni_ic;
- struct mbuf *m = bf->bf_m;
- struct ath_hal *ah = sc->sc_ah;
- struct ath_desc *ds;
- int flags, antenna;
- const HAL_RATE_TABLE *rt;
- u_int8_t rix, rate;
-
- DPRINTF(sc, ATH_DEBUG_BEACON_PROC, "%s: m %p len %u\n",
- __func__, m, m->m_len);
-
- /* setup descriptors */
- ds = bf->bf_desc;
- bf->bf_last = bf;
- bf->bf_lastds = ds;
-
- flags = HAL_TXDESC_NOACK;
- if (ic->ic_opmode == IEEE80211_M_IBSS && sc->sc_hasveol) {
- ds->ds_link = bf->bf_daddr; /* self-linked */
- flags |= HAL_TXDESC_VEOL;
- /*
- * Let hardware handle antenna switching.
- */
- antenna = sc->sc_txantenna;
- } else {
- ds->ds_link = 0;
- /*
- * Switch antenna every 4 beacons.
- * XXX assumes two antenna
- */
- if (sc->sc_txantenna != 0)
- antenna = sc->sc_txantenna;
- else if (sc->sc_stagbeacons && sc->sc_nbcnvaps != 0)
- antenna = ((sc->sc_stats.ast_be_xmit / sc->sc_nbcnvaps) & 4 ? 2 : 1);
- else
- antenna = (sc->sc_stats.ast_be_xmit & 4 ? 2 : 1);
- }
-
- KASSERT(bf->bf_nseg == 1,
- ("multi-segment beacon frame; nseg %u", bf->bf_nseg));
- ds->ds_data = bf->bf_segs[0].ds_addr;
- /*
- * Calculate rate code.
- * XXX everything at min xmit rate
- */
- rix = 0;
- rt = sc->sc_currates;
- rate = rt->info[rix].rateCode;
- if (USE_SHPREAMBLE(ic))
- rate |= rt->info[rix].shortPreamble;
- ath_hal_setuptxdesc(ah, ds
- , m->m_len + IEEE80211_CRC_LEN /* frame length */
- , sizeof(struct ieee80211_frame)/* header length */
- , HAL_PKT_TYPE_BEACON /* Atheros packet type */
- , ni->ni_txpower /* txpower XXX */
- , rate, 1 /* series 0 rate/tries */
- , HAL_TXKEYIX_INVALID /* no encryption */
- , antenna /* antenna mode */
- , flags /* no ack, veol for beacons */
- , 0 /* rts/cts rate */
- , 0 /* rts/cts duration */
- );
- /* NB: beacon's BufLen must be a multiple of 4 bytes */
- ath_hal_filltxdesc(ah, ds
- , roundup(m->m_len, 4) /* buffer length */
- , AH_TRUE /* first segment */
- , AH_TRUE /* last segment */
- , ds /* first descriptor */
- );
-#if 0
- ath_desc_swap(ds);
-#endif
-#undef USE_SHPREAMBLE
-}
-
-static void
-ath_beacon_update(struct ieee80211vap *vap, int item)
-{
- struct ieee80211_beacon_offsets *bo = &ATH_VAP(vap)->av_boff;
-
- setbit(bo->bo_flags, item);
-}
-
-/*
* Append the contents of src to dst; both queues
* are assumed to be locked.
*/
-static void
+void
ath_txqmove(struct ath_txq *dst, struct ath_txq *src)
{
@@ -2965,255 +2618,6 @@ ath_txqmove(struct ath_txq *dst, struct ath_txq *src)
}
/*
- * Transmit a beacon frame at SWBA. Dynamic updates to the
- * frame contents are done as needed and the slot time is
- * also adjusted based on current state.
- */
-static void
-ath_beacon_proc(void *arg, int pending)
-{
- struct ath_softc *sc = arg;
- struct ath_hal *ah = sc->sc_ah;
- struct ieee80211vap *vap;
- struct ath_buf *bf;
- int slot, otherant;
- uint32_t bfaddr;
-
- DPRINTF(sc, ATH_DEBUG_BEACON_PROC, "%s: pending %u\n",
- __func__, pending);
- /*
- * Check if the previous beacon has gone out. If
- * not don't try to post another, skip this period
- * and wait for the next. Missed beacons indicate
- * a problem and should not occur. If we miss too
- * many consecutive beacons reset the device.
- */
- if (ath_hal_numtxpending(ah, sc->sc_bhalq) != 0) {
- sc->sc_bmisscount++;
- sc->sc_stats.ast_be_missed++;
- DPRINTF(sc, ATH_DEBUG_BEACON,
- "%s: missed %u consecutive beacons\n",
- __func__, sc->sc_bmisscount);
- if (sc->sc_bmisscount >= ath_bstuck_threshold)
- taskqueue_enqueue(sc->sc_tq, &sc->sc_bstucktask);
- return;
- }
- if (sc->sc_bmisscount != 0) {
- DPRINTF(sc, ATH_DEBUG_BEACON,
- "%s: resume beacon xmit after %u misses\n",
- __func__, sc->sc_bmisscount);
- sc->sc_bmisscount = 0;
- }
-
- if (sc->sc_stagbeacons) { /* staggered beacons */
- struct ieee80211com *ic = sc->sc_ifp->if_l2com;
- uint32_t tsftu;
-
- tsftu = ath_hal_gettsf32(ah) >> 10;
- /* XXX lintval */
- slot = ((tsftu % ic->ic_lintval) * ATH_BCBUF) / ic->ic_lintval;
- vap = sc->sc_bslot[(slot+1) % ATH_BCBUF];
- bfaddr = 0;
- if (vap != NULL && vap->iv_state >= IEEE80211_S_RUN) {
- bf = ath_beacon_generate(sc, vap);
- if (bf != NULL)
- bfaddr = bf->bf_daddr;
- }
- } else { /* burst'd beacons */
- uint32_t *bflink = &bfaddr;
-
- for (slot = 0; slot < ATH_BCBUF; slot++) {
- vap = sc->sc_bslot[slot];
- if (vap != NULL && vap->iv_state >= IEEE80211_S_RUN) {
- bf = ath_beacon_generate(sc, vap);
- if (bf != NULL) {
- *bflink = bf->bf_daddr;
- bflink = &bf->bf_desc->ds_link;
- }
- }
- }
- *bflink = 0; /* terminate list */
- }
-
- /*
- * Handle slot time change when a non-ERP station joins/leaves
- * an 11g network. The 802.11 layer notifies us via callback,
- * we mark updateslot, then wait one beacon before effecting
- * the change. This gives associated stations at least one
- * beacon interval to note the state change.
- */
- /* XXX locking */
- if (sc->sc_updateslot == UPDATE) {
- sc->sc_updateslot = COMMIT; /* commit next beacon */
- sc->sc_slotupdate = slot;
- } else if (sc->sc_updateslot == COMMIT && sc->sc_slotupdate == slot)
- ath_setslottime(sc); /* commit change to h/w */
-
- /*
- * Check recent per-antenna transmit statistics and flip
- * the default antenna if noticeably more frames went out
- * on the non-default antenna.
- * XXX assumes 2 anntenae
- */
- if (!sc->sc_diversity && (!sc->sc_stagbeacons || slot == 0)) {
- otherant = sc->sc_defant & 1 ? 2 : 1;
- if (sc->sc_ant_tx[otherant] > sc->sc_ant_tx[sc->sc_defant] + 2)
- ath_setdefantenna(sc, otherant);
- sc->sc_ant_tx[1] = sc->sc_ant_tx[2] = 0;
- }
-
- if (bfaddr != 0) {
- /*
- * Stop any current dma and put the new frame on the queue.
- * This should never fail since we check above that no frames
- * are still pending on the queue.
- */
- if (!ath_hal_stoptxdma(ah, sc->sc_bhalq)) {
- DPRINTF(sc, ATH_DEBUG_ANY,
- "%s: beacon queue %u did not stop?\n",
- __func__, sc->sc_bhalq);
- }
- /* NB: cabq traffic should already be queued and primed */
- ath_hal_puttxbuf(ah, sc->sc_bhalq, bfaddr);
- ath_hal_txstart(ah, sc->sc_bhalq);
-
- sc->sc_stats.ast_be_xmit++;
- }
-}
-
-static struct ath_buf *
-ath_beacon_generate(struct ath_softc *sc, struct ieee80211vap *vap)
-{
- struct ath_vap *avp = ATH_VAP(vap);
- struct ath_txq *cabq = sc->sc_cabq;
- struct ath_buf *bf;
- struct mbuf *m;
- int nmcastq, error;
-
- KASSERT(vap->iv_state >= IEEE80211_S_RUN,
- ("not running, state %d", vap->iv_state));
- KASSERT(avp->av_bcbuf != NULL, ("no beacon buffer"));
-
- /*
- * Update dynamic beacon contents. If this returns
- * non-zero then we need to remap the memory because
- * the beacon frame changed size (probably because
- * of the TIM bitmap).
- */
- bf = avp->av_bcbuf;
- m = bf->bf_m;
- /* XXX lock mcastq? */
- nmcastq = avp->av_mcastq.axq_depth;
-
- if (ieee80211_beacon_update(bf->bf_node, &avp->av_boff, m, nmcastq)) {
- /* XXX too conservative? */
- bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
- error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m,
- bf->bf_segs, &bf->bf_nseg,
- BUS_DMA_NOWAIT);
- if (error != 0) {
- if_printf(vap->iv_ifp,
- "%s: bus_dmamap_load_mbuf_sg failed, error %u\n",
- __func__, error);
- return NULL;
- }
- }
- if ((avp->av_boff.bo_tim[4] & 1) && cabq->axq_depth) {
- DPRINTF(sc, ATH_DEBUG_BEACON,
- "%s: cabq did not drain, mcastq %u cabq %u\n",
- __func__, nmcastq, cabq->axq_depth);
- sc->sc_stats.ast_cabq_busy++;
- if (sc->sc_nvaps > 1 && sc->sc_stagbeacons) {
- /*
- * CABQ traffic from a previous vap is still pending.
- * We must drain the q before this beacon frame goes
- * out as otherwise this vap's stations will get cab
- * frames from a different vap.
- * XXX could be slow causing us to miss DBA
- */
- ath_tx_draintxq(sc, cabq);
- }
- }
- ath_beacon_setup(sc, bf);
- bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE);
-
- /*
- * Enable the CAB queue before the beacon queue to
- * insure cab frames are triggered by this beacon.
- */
- if (avp->av_boff.bo_tim[4] & 1) {
- struct ath_hal *ah = sc->sc_ah;
-
- /* NB: only at DTIM */
- ATH_TXQ_LOCK(cabq);
- ATH_TXQ_LOCK(&avp->av_mcastq);
- if (nmcastq) {
- struct ath_buf *bfm;
-
- /*
- * Move frames from the s/w mcast q to the h/w cab q.
- * XXX MORE_DATA bit
- */
- bfm = TAILQ_FIRST(&avp->av_mcastq.axq_q);
- if (cabq->axq_link != NULL) {
- *cabq->axq_link = bfm->bf_daddr;
- } else
- ath_hal_puttxbuf(ah, cabq->axq_qnum,
- bfm->bf_daddr);
- ath_txqmove(cabq, &avp->av_mcastq);
-
- sc->sc_stats.ast_cabq_xmit += nmcastq;
- }
- /* NB: gated by beacon so safe to start here */
- if (! TAILQ_EMPTY(&(cabq->axq_q)))
- ath_hal_txstart(ah, cabq->axq_qnum);
- ATH_TXQ_UNLOCK(&avp->av_mcastq);
- ATH_TXQ_UNLOCK(cabq);
- }
- return bf;
-}
-
-static void
-ath_beacon_start_adhoc(struct ath_softc *sc, struct ieee80211vap *vap)
-{
- struct ath_vap *avp = ATH_VAP(vap);
- struct ath_hal *ah = sc->sc_ah;
- struct ath_buf *bf;
- struct mbuf *m;
- int error;
-
- KASSERT(avp->av_bcbuf != NULL, ("no beacon buffer"));
-
- /*
- * Update dynamic beacon contents. If this returns
- * non-zero then we need to remap the memory because
- * the beacon frame changed size (probably because
- * of the TIM bitmap).
- */
- bf = avp->av_bcbuf;
- m = bf->bf_m;
- if (ieee80211_beacon_update(bf->bf_node, &avp->av_boff, m, 0)) {
- /* XXX too conservative? */
- bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
- error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m,
- bf->bf_segs, &bf->bf_nseg,
- BUS_DMA_NOWAIT);
- if (error != 0) {
- if_printf(vap->iv_ifp,
- "%s: bus_dmamap_load_mbuf_sg failed, error %u\n",
- __func__, error);
- return;
- }
- }
- ath_beacon_setup(sc, bf);
- bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE);
-
- /* NB: caller is known to have already stopped tx dma */
- ath_hal_puttxbuf(ah, sc->sc_bhalq, bf->bf_daddr);
- ath_hal_txstart(ah, sc->sc_bhalq);
-}
-
-/*
* Reset the hardware, with no loss.
*
* This can't be used for a general case reset.
@@ -3253,255 +2657,6 @@ ath_bstuck_proc(void *arg, int pending)
ath_reset(ifp, ATH_RESET_NOLOSS);
}
-/*
- * Reclaim beacon resources and return buffer to the pool.
- */
-static void
-ath_beacon_return(struct ath_softc *sc, struct ath_buf *bf)
-{
-
- DPRINTF(sc, ATH_DEBUG_NODE, "%s: free bf=%p, bf_m=%p, bf_node=%p\n",
- __func__, bf, bf->bf_m, bf->bf_node);
- if (bf->bf_m != NULL) {
- bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
- m_freem(bf->bf_m);
- bf->bf_m = NULL;
- }
- if (bf->bf_node != NULL) {
- ieee80211_free_node(bf->bf_node);
- bf->bf_node = NULL;
- }
- TAILQ_INSERT_TAIL(&sc->sc_bbuf, bf, bf_list);
-}
-
-/*
- * Reclaim beacon resources.
- */
-static void
-ath_beacon_free(struct ath_softc *sc)
-{
- struct ath_buf *bf;
-
- TAILQ_FOREACH(bf, &sc->sc_bbuf, bf_list) {
- DPRINTF(sc, ATH_DEBUG_NODE,
- "%s: free bf=%p, bf_m=%p, bf_node=%p\n",
- __func__, bf, bf->bf_m, bf->bf_node);
- if (bf->bf_m != NULL) {
- bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
- m_freem(bf->bf_m);
- bf->bf_m = NULL;
- }
- if (bf->bf_node != NULL) {
- ieee80211_free_node(bf->bf_node);
- bf->bf_node = NULL;
- }
- }
-}
-
-/*
- * Configure the beacon and sleep timers.
- *
- * When operating as an AP this resets the TSF and sets
- * up the hardware to notify us when we need to issue beacons.
- *
- * When operating in station mode this sets up the beacon
- * timers according to the timestamp of the last received
- * beacon and the current TSF, configures PCF and DTIM
- * handling, programs the sleep registers so the hardware
- * will wakeup in time to receive beacons, and configures
- * the beacon miss handling so we'll receive a BMISS
- * interrupt when we stop seeing beacons from the AP
- * we've associated with.
- */
-static void
-ath_beacon_config(struct ath_softc *sc, struct ieee80211vap *vap)
-{
-#define TSF_TO_TU(_h,_l) \
- ((((u_int32_t)(_h)) << 22) | (((u_int32_t)(_l)) >> 10))
-#define FUDGE 2
- struct ath_hal *ah = sc->sc_ah;
- struct ieee80211com *ic = sc->sc_ifp->if_l2com;
- struct ieee80211_node *ni;
- u_int32_t nexttbtt, intval, tsftu;
- u_int64_t tsf;
-
- if (vap == NULL)
- vap = TAILQ_FIRST(&ic->ic_vaps); /* XXX */
- ni = ieee80211_ref_node(vap->iv_bss);
-
- /* extract tstamp from last beacon and convert to TU */
- nexttbtt = TSF_TO_TU(LE_READ_4(ni->ni_tstamp.data + 4),
- LE_READ_4(ni->ni_tstamp.data));
- if (ic->ic_opmode == IEEE80211_M_HOSTAP ||
- ic->ic_opmode == IEEE80211_M_MBSS) {
- /*
- * For multi-bss ap/mesh support beacons are either staggered
- * evenly over N slots or burst together. For the former
- * arrange for the SWBA to be delivered for each slot.
- * Slots that are not occupied will generate nothing.
- */
- /* NB: the beacon interval is kept internally in TU's */
- intval = ni->ni_intval & HAL_BEACON_PERIOD;
- if (sc->sc_stagbeacons)
- intval /= ATH_BCBUF;
- } else {
- /* NB: the beacon interval is kept internally in TU's */
- intval = ni->ni_intval & HAL_BEACON_PERIOD;
- }
- if (nexttbtt == 0) /* e.g. for ap mode */
- nexttbtt = intval;
- else if (intval) /* NB: can be 0 for monitor mode */
- nexttbtt = roundup(nexttbtt, intval);
- DPRINTF(sc, ATH_DEBUG_BEACON, "%s: nexttbtt %u intval %u (%u)\n",
- __func__, nexttbtt, intval, ni->ni_intval);
- if (ic->ic_opmode == IEEE80211_M_STA && !sc->sc_swbmiss) {
- HAL_BEACON_STATE bs;
- int dtimperiod, dtimcount;
- int cfpperiod, cfpcount;
-
- /*
- * Setup dtim and cfp parameters according to
- * last beacon we received (which may be none).
- */
- dtimperiod = ni->ni_dtim_period;
- if (dtimperiod <= 0) /* NB: 0 if not known */
- dtimperiod = 1;
- dtimcount = ni->ni_dtim_count;
- if (dtimcount >= dtimperiod) /* NB: sanity check */
- dtimcount = 0; /* XXX? */
- cfpperiod = 1; /* NB: no PCF support yet */
- cfpcount = 0;
- /*
- * Pull nexttbtt forward to reflect the current
- * TSF and calculate dtim+cfp state for the result.
- */
- tsf = ath_hal_gettsf64(ah);
- tsftu = TSF_TO_TU(tsf>>32, tsf) + FUDGE;
- do {
- nexttbtt += intval;
- if (--dtimcount < 0) {
- dtimcount = dtimperiod - 1;
- if (--cfpcount < 0)
- cfpcount = cfpperiod - 1;
- }
- } while (nexttbtt < tsftu);
- memset(&bs, 0, sizeof(bs));
- bs.bs_intval = intval;
- bs.bs_nexttbtt = nexttbtt;
- bs.bs_dtimperiod = dtimperiod*intval;
- bs.bs_nextdtim = bs.bs_nexttbtt + dtimcount*intval;
- bs.bs_cfpperiod = cfpperiod*bs.bs_dtimperiod;
- bs.bs_cfpnext = bs.bs_nextdtim + cfpcount*bs.bs_dtimperiod;
- bs.bs_cfpmaxduration = 0;
-#if 0
- /*
- * The 802.11 layer records the offset to the DTIM
- * bitmap while receiving beacons; use it here to
- * enable h/w detection of our AID being marked in
- * the bitmap vector (to indicate frames for us are
- * pending at the AP).
- * XXX do DTIM handling in s/w to WAR old h/w bugs
- * XXX enable based on h/w rev for newer chips
- */
- bs.bs_timoffset = ni->ni_timoff;
-#endif
- /*
- * Calculate the number of consecutive beacons to miss
- * before taking a BMISS interrupt.
- * Note that we clamp the result to at most 10 beacons.
- */
- bs.bs_bmissthreshold = vap->iv_bmissthreshold;
- if (bs.bs_bmissthreshold > 10)
- bs.bs_bmissthreshold = 10;
- else if (bs.bs_bmissthreshold <= 0)
- bs.bs_bmissthreshold = 1;
-
- /*
- * Calculate sleep duration. The configuration is
- * given in ms. We insure a multiple of the beacon
- * period is used. Also, if the sleep duration is
- * greater than the DTIM period then it makes senses
- * to make it a multiple of that.
- *
- * XXX fixed at 100ms
- */
- bs.bs_sleepduration =
- roundup(IEEE80211_MS_TO_TU(100), bs.bs_intval);
- if (bs.bs_sleepduration > bs.bs_dtimperiod)
- bs.bs_sleepduration = roundup(bs.bs_sleepduration, bs.bs_dtimperiod);
-
- DPRINTF(sc, ATH_DEBUG_BEACON,
- "%s: tsf %ju tsf:tu %u intval %u nexttbtt %u dtim %u nextdtim %u bmiss %u sleep %u cfp:period %u maxdur %u next %u timoffset %u\n"
- , __func__
- , tsf, tsftu
- , bs.bs_intval
- , bs.bs_nexttbtt
- , bs.bs_dtimperiod
- , bs.bs_nextdtim
- , bs.bs_bmissthreshold
- , bs.bs_sleepduration
- , bs.bs_cfpperiod
- , bs.bs_cfpmaxduration
- , bs.bs_cfpnext
- , bs.bs_timoffset
- );
- ath_hal_intrset(ah, 0);
- ath_hal_beacontimers(ah, &bs);
- sc->sc_imask |= HAL_INT_BMISS;
- ath_hal_intrset(ah, sc->sc_imask);
- } else {
- ath_hal_intrset(ah, 0);
- if (nexttbtt == intval)
- intval |= HAL_BEACON_RESET_TSF;
- if (ic->ic_opmode == IEEE80211_M_IBSS) {
- /*
- * In IBSS mode enable the beacon timers but only
- * enable SWBA interrupts if we need to manually
- * prepare beacon frames. Otherwise we use a
- * self-linked tx descriptor and let the hardware
- * deal with things.
- */
- intval |= HAL_BEACON_ENA;
- if (!sc->sc_hasveol)
- sc->sc_imask |= HAL_INT_SWBA;
- if ((intval & HAL_BEACON_RESET_TSF) == 0) {
- /*
- * Pull nexttbtt forward to reflect
- * the current TSF.
- */
- tsf = ath_hal_gettsf64(ah);
- tsftu = TSF_TO_TU(tsf>>32, tsf) + FUDGE;
- do {
- nexttbtt += intval;
- } while (nexttbtt < tsftu);
- }
- ath_beaconq_config(sc);
- } else if (ic->ic_opmode == IEEE80211_M_HOSTAP ||
- ic->ic_opmode == IEEE80211_M_MBSS) {
- /*
- * In AP/mesh mode we enable the beacon timers
- * and SWBA interrupts to prepare beacon frames.
- */
- intval |= HAL_BEACON_ENA;
- sc->sc_imask |= HAL_INT_SWBA; /* beacon prepare */
- ath_beaconq_config(sc);
- }
- ath_hal_beaconinit(ah, nexttbtt, intval);
- sc->sc_bmisscount = 0;
- ath_hal_intrset(ah, sc->sc_imask);
- /*
- * When using a self-linked beacon descriptor in
- * ibss mode load it once here.
- */
- if (ic->ic_opmode == IEEE80211_M_IBSS && sc->sc_hasveol)
- ath_beacon_start_adhoc(sc, vap);
- }
- sc->sc_syncbeacon = 0;
- ieee80211_free_node(ni);
-#undef FUDGE
-#undef TSF_TO_TU
-}
-
static void
ath_load_cb(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
{
@@ -3788,197 +2943,10 @@ ath_node_getsignal(const struct ieee80211_node *ni, int8_t *rssi, int8_t *noise)
*noise = -95; /* nominally correct */
}
-static int
-ath_rxbuf_init(struct ath_softc *sc, struct ath_buf *bf)
-{
- struct ath_hal *ah = sc->sc_ah;
- int error;
- struct mbuf *m;
- struct ath_desc *ds;
-
- m = bf->bf_m;
- if (m == NULL) {
- /*
- * NB: by assigning a page to the rx dma buffer we
- * implicitly satisfy the Atheros requirement that
- * this buffer be cache-line-aligned and sized to be
- * multiple of the cache line size. Not doing this
- * causes weird stuff to happen (for the 5210 at least).
- */
- m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
- if (m == NULL) {
- DPRINTF(sc, ATH_DEBUG_ANY,
- "%s: no mbuf/cluster\n", __func__);
- sc->sc_stats.ast_rx_nombuf++;
- return ENOMEM;
- }
- m->m_pkthdr.len = m->m_len = m->m_ext.ext_size;
-
- error = bus_dmamap_load_mbuf_sg(sc->sc_dmat,
- bf->bf_dmamap, m,
- bf->bf_segs, &bf->bf_nseg,
- BUS_DMA_NOWAIT);
- if (error != 0) {
- DPRINTF(sc, ATH_DEBUG_ANY,
- "%s: bus_dmamap_load_mbuf_sg failed; error %d\n",
- __func__, error);
- sc->sc_stats.ast_rx_busdma++;
- m_freem(m);
- return error;
- }
- KASSERT(bf->bf_nseg == 1,
- ("multi-segment packet; nseg %u", bf->bf_nseg));
- bf->bf_m = m;
- }
- bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREREAD);
-
- /*
- * Setup descriptors. For receive we always terminate
- * the descriptor list with a self-linked entry so we'll
- * not get overrun under high load (as can happen with a
- * 5212 when ANI processing enables PHY error frames).
- *
- * To insure the last descriptor is self-linked we create
- * each descriptor as self-linked and add it to the end. As
- * each additional descriptor is added the previous self-linked
- * entry is ``fixed'' naturally. This should be safe even
- * if DMA is happening. When processing RX interrupts we
- * never remove/process the last, self-linked, entry on the
- * descriptor list. This insures the hardware always has
- * someplace to write a new frame.
- */
- /*
- * 11N: we can no longer afford to self link the last descriptor.
- * MAC acknowledges BA status as long as it copies frames to host
- * buffer (or rx fifo). This can incorrectly acknowledge packets
- * to a sender if last desc is self-linked.
- */
- ds = bf->bf_desc;
- if (sc->sc_rxslink)
- ds->ds_link = bf->bf_daddr; /* link to self */
- else
- ds->ds_link = 0; /* terminate the list */
- ds->ds_data = bf->bf_segs[0].ds_addr;
- ath_hal_setuprxdesc(ah, ds
- , m->m_len /* buffer size */
- , 0
- );
-
- if (sc->sc_rxlink != NULL)
- *sc->sc_rxlink = bf->bf_daddr;
- sc->sc_rxlink = &ds->ds_link;
- return 0;
-}
-
-/*
- * Extend 15-bit time stamp from rx descriptor to
- * a full 64-bit TSF using the specified TSF.
- */
-static __inline u_int64_t
-ath_extend_tsf15(u_int32_t rstamp, u_int64_t tsf)
-{
- if ((tsf & 0x7fff) < rstamp)
- tsf -= 0x8000;
-
- return ((tsf &~ 0x7fff) | rstamp);
-}
-
-/*
- * Extend 32-bit time stamp from rx descriptor to
- * a full 64-bit TSF using the specified TSF.
- */
-static __inline u_int64_t
-ath_extend_tsf32(u_int32_t rstamp, u_int64_t tsf)
-{
- u_int32_t tsf_low = tsf & 0xffffffff;
- u_int64_t tsf64 = (tsf & ~0xffffffffULL) | rstamp;
-
- if (rstamp > tsf_low && (rstamp - tsf_low > 0x10000000))
- tsf64 -= 0x100000000ULL;
-
- if (rstamp < tsf_low && (tsf_low - rstamp > 0x10000000))
- tsf64 += 0x100000000ULL;
-
- return tsf64;
-}
-
-/*
- * Extend the TSF from the RX descriptor to a full 64 bit TSF.
- * Earlier hardware versions only wrote the low 15 bits of the
- * TSF into the RX descriptor; later versions (AR5416 and up)
- * include the 32 bit TSF value.
- */
-static __inline u_int64_t
-ath_extend_tsf(struct ath_softc *sc, u_int32_t rstamp, u_int64_t tsf)
-{
- if (sc->sc_rxtsf32)
- return ath_extend_tsf32(rstamp, tsf);
- else
- return ath_extend_tsf15(rstamp, tsf);
-}
-
-/*
- * Intercept management frames to collect beacon rssi data
- * and to do ibss merges.
- */
-static void
-ath_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m,
- int subtype, int rssi, int nf)
-{
- struct ieee80211vap *vap = ni->ni_vap;
- struct ath_softc *sc = vap->iv_ic->ic_ifp->if_softc;
-
- /*
- * Call up first so subsequent work can use information
- * potentially stored in the node (e.g. for ibss merge).
- */
- ATH_VAP(vap)->av_recv_mgmt(ni, m, subtype, rssi, nf);
- switch (subtype) {
- case IEEE80211_FC0_SUBTYPE_BEACON:
- /* update rssi statistics for use by the hal */
- /* XXX unlocked check against vap->iv_bss? */
- ATH_RSSI_LPF(sc->sc_halstats.ns_avgbrssi, rssi);
- if (sc->sc_syncbeacon &&
- ni == vap->iv_bss && vap->iv_state == IEEE80211_S_RUN) {
- /*
- * Resync beacon timers using the tsf of the beacon
- * frame we just received.
- */
- ath_beacon_config(sc, vap);
- }
- /* fall thru... */
- case IEEE80211_FC0_SUBTYPE_PROBE_RESP:
- if (vap->iv_opmode == IEEE80211_M_IBSS &&
- vap->iv_state == IEEE80211_S_RUN) {
- uint32_t rstamp = sc->sc_lastrs->rs_tstamp;
- uint64_t tsf = ath_extend_tsf(sc, rstamp,
- ath_hal_gettsf64(sc->sc_ah));
- /*
- * Handle ibss merge as needed; check the tsf on the
- * frame before attempting the merge. The 802.11 spec
- * says the station should change it's bssid to match
- * the oldest station with the same ssid, where oldest
- * is determined by the tsf. Note that hardware
- * reconfiguration happens through callback to
- * ath_newstate as the state machine will go from
- * RUN -> RUN when this happens.
- */
- if (le64toh(ni->ni_tstamp.tsf) >= tsf) {
- DPRINTF(sc, ATH_DEBUG_STATE,
- "ibss merge, rstamp %u tsf %ju "
- "tstamp %ju\n", rstamp, (uintmax_t)tsf,
- (uintmax_t)ni->ni_tstamp.tsf);
- (void) ieee80211_ibss_merge(ni);
- }
- }
- break;
- }
-}
-
/*
* Set the default antenna.
*/
-static void
+void
ath_setdefantenna(struct ath_softc *sc, u_int antenna)
{
struct ath_hal *ah = sc->sc_ah;
@@ -3992,538 +2960,6 @@ ath_setdefantenna(struct ath_softc *sc, u_int antenna)
}
static void
-ath_rx_tap(struct ifnet *ifp, struct mbuf *m,
- const struct ath_rx_status *rs, u_int64_t tsf, int16_t nf)
-{
-#define CHAN_HT20 htole32(IEEE80211_CHAN_HT20)
-#define CHAN_HT40U htole32(IEEE80211_CHAN_HT40U)
-#define CHAN_HT40D htole32(IEEE80211_CHAN_HT40D)
-#define CHAN_HT (CHAN_HT20|CHAN_HT40U|CHAN_HT40D)
- struct ath_softc *sc = ifp->if_softc;
- const HAL_RATE_TABLE *rt;
- uint8_t rix;
-
- rt = sc->sc_currates;
- KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode));
- rix = rt->rateCodeToIndex[rs->rs_rate];
- sc->sc_rx_th.wr_rate = sc->sc_hwmap[rix].ieeerate;
- sc->sc_rx_th.wr_flags = sc->sc_hwmap[rix].rxflags;
-#ifdef AH_SUPPORT_AR5416
- sc->sc_rx_th.wr_chan_flags &= ~CHAN_HT;
- if (sc->sc_rx_th.wr_rate & IEEE80211_RATE_MCS) { /* HT rate */
- struct ieee80211com *ic = ifp->if_l2com;
-
- if ((rs->rs_flags & HAL_RX_2040) == 0)
- sc->sc_rx_th.wr_chan_flags |= CHAN_HT20;
- else if (IEEE80211_IS_CHAN_HT40U(ic->ic_curchan))
- sc->sc_rx_th.wr_chan_flags |= CHAN_HT40U;
- else
- sc->sc_rx_th.wr_chan_flags |= CHAN_HT40D;
- if ((rs->rs_flags & HAL_RX_GI) == 0)
- sc->sc_rx_th.wr_flags |= IEEE80211_RADIOTAP_F_SHORTGI;
- }
-#endif
- sc->sc_rx_th.wr_tsf = htole64(ath_extend_tsf(sc, rs->rs_tstamp, tsf));
- if (rs->rs_status & HAL_RXERR_CRC)
- sc->sc_rx_th.wr_flags |= IEEE80211_RADIOTAP_F_BADFCS;
- /* XXX propagate other error flags from descriptor */
- sc->sc_rx_th.wr_antnoise = nf;
- sc->sc_rx_th.wr_antsignal = nf + rs->rs_rssi;
- sc->sc_rx_th.wr_antenna = rs->rs_antenna;
-#undef CHAN_HT
-#undef CHAN_HT20
-#undef CHAN_HT40U
-#undef CHAN_HT40D
-}
-
-static void
-ath_handle_micerror(struct ieee80211com *ic,
- struct ieee80211_frame *wh, int keyix)
-{
- struct ieee80211_node *ni;
-
- /* XXX recheck MIC to deal w/ chips that lie */
- /* XXX discard MIC errors on !data frames */
- ni = ieee80211_find_rxnode(ic, (const struct ieee80211_frame_min *) wh);
- if (ni != NULL) {
- ieee80211_notify_michael_failure(ni->ni_vap, wh, keyix);
- ieee80211_free_node(ni);
- }
-}
-
-/*
- * Only run the RX proc if it's not already running.
- * Since this may get run as part of the reset/flush path,
- * the task can't clash with an existing, running tasklet.
- */
-static void
-ath_rx_tasklet(void *arg, int npending)
-{
- struct ath_softc *sc = arg;
-
- CTR1(ATH_KTR_INTR, "ath_rx_proc: pending=%d", npending);
- DPRINTF(sc, ATH_DEBUG_RX_PROC, "%s: pending %u\n", __func__, npending);
- ATH_PCU_LOCK(sc);
- if (sc->sc_inreset_cnt > 0) {
- device_printf(sc->sc_dev,
- "%s: sc_inreset_cnt > 0; skipping\n", __func__);
- ATH_PCU_UNLOCK(sc);
- return;
- }
- ATH_PCU_UNLOCK(sc);
- ath_rx_proc(sc, 1);
-}
-
-static void
-ath_rx_proc(struct ath_softc *sc, int resched)
-{
-#define PA2DESC(_sc, _pa) \
- ((struct ath_desc *)((caddr_t)(_sc)->sc_rxdma.dd_desc + \
- ((_pa) - (_sc)->sc_rxdma.dd_desc_paddr)))
- struct ath_buf *bf;
- struct ifnet *ifp = sc->sc_ifp;
- struct ieee80211com *ic = ifp->if_l2com;
- struct ath_hal *ah = sc->sc_ah;
- struct ath_desc *ds;
- struct ath_rx_status *rs;
- struct mbuf *m;
- struct ieee80211_node *ni;
- int len, type, ngood;
- HAL_STATUS status;
- int16_t nf;
- u_int64_t tsf, rstamp;
- int npkts = 0;
-
- /* XXX we must not hold the ATH_LOCK here */
- ATH_UNLOCK_ASSERT(sc);
- ATH_PCU_UNLOCK_ASSERT(sc);
-
- ATH_PCU_LOCK(sc);
- sc->sc_rxproc_cnt++;
- ATH_PCU_UNLOCK(sc);
-
- DPRINTF(sc, ATH_DEBUG_RX_PROC, "%s: called\n", __func__);
- ngood = 0;
- nf = ath_hal_getchannoise(ah, sc->sc_curchan);
- sc->sc_stats.ast_rx_noise = nf;
- tsf = ath_hal_gettsf64(ah);
- do {
- bf = TAILQ_FIRST(&sc->sc_rxbuf);
- if (sc->sc_rxslink && bf == NULL) { /* NB: shouldn't happen */
- if_printf(ifp, "%s: no buffer!\n", __func__);
- break;
- } else if (bf == NULL) {
- /*
- * End of List:
- * this can happen for non-self-linked RX chains
- */
- sc->sc_stats.ast_rx_hitqueueend++;
- break;
- }
- m = bf->bf_m;
- if (m == NULL) { /* NB: shouldn't happen */
- /*
- * If mbuf allocation failed previously there
- * will be no mbuf; try again to re-populate it.
- */
- /* XXX make debug msg */
- if_printf(ifp, "%s: no mbuf!\n", __func__);
- TAILQ_REMOVE(&sc->sc_rxbuf, bf, bf_list);
- goto rx_next;
- }
- ds = bf->bf_desc;
- if (ds->ds_link == bf->bf_daddr) {
- /* NB: never process the self-linked entry at the end */
- sc->sc_stats.ast_rx_hitqueueend++;
- break;
- }
- /* XXX sync descriptor memory */
- /*
- * Must provide the virtual address of the current
- * descriptor, the physical address, and the virtual
- * address of the next descriptor in the h/w chain.
- * This allows the HAL to look ahead to see if the
- * hardware is done with a descriptor by checking the
- * done bit in the following descriptor and the address
- * of the current descriptor the DMA engine is working
- * on. All this is necessary because of our use of
- * a self-linked list to avoid rx overruns.
- */
- rs = &bf->bf_status.ds_rxstat;
- status = ath_hal_rxprocdesc(ah, ds,
- bf->bf_daddr, PA2DESC(sc, ds->ds_link), rs);
-#ifdef ATH_DEBUG
- if (sc->sc_debug & ATH_DEBUG_RECV_DESC)
- ath_printrxbuf(sc, bf, 0, status == HAL_OK);
-#endif
- if (status == HAL_EINPROGRESS)
- break;
-
- TAILQ_REMOVE(&sc->sc_rxbuf, bf, bf_list);
- npkts++;
-
- /*
- * Calculate the correct 64 bit TSF given
- * the TSF64 register value and rs_tstamp.
- */
- rstamp = ath_extend_tsf(sc, rs->rs_tstamp, tsf);
-
- /* These aren't specifically errors */
-#ifdef AH_SUPPORT_AR5416
- if (rs->rs_flags & HAL_RX_GI)
- sc->sc_stats.ast_rx_halfgi++;
- if (rs->rs_flags & HAL_RX_2040)
- sc->sc_stats.ast_rx_2040++;
- if (rs->rs_flags & HAL_RX_DELIM_CRC_PRE)
- sc->sc_stats.ast_rx_pre_crc_err++;
- if (rs->rs_flags & HAL_RX_DELIM_CRC_POST)
- sc->sc_stats.ast_rx_post_crc_err++;
- if (rs->rs_flags & HAL_RX_DECRYPT_BUSY)
- sc->sc_stats.ast_rx_decrypt_busy_err++;
- if (rs->rs_flags & HAL_RX_HI_RX_CHAIN)
- sc->sc_stats.ast_rx_hi_rx_chain++;
-#endif /* AH_SUPPORT_AR5416 */
-
- if (rs->rs_status != 0) {
- if (rs->rs_status & HAL_RXERR_CRC)
- sc->sc_stats.ast_rx_crcerr++;
- if (rs->rs_status & HAL_RXERR_FIFO)
- sc->sc_stats.ast_rx_fifoerr++;
- if (rs->rs_status & HAL_RXERR_PHY) {
- sc->sc_stats.ast_rx_phyerr++;
- /* Process DFS radar events */
- if ((rs->rs_phyerr == HAL_PHYERR_RADAR) ||
- (rs->rs_phyerr == HAL_PHYERR_FALSE_RADAR_EXT)) {
- /* Since we're touching the frame data, sync it */
- bus_dmamap_sync(sc->sc_dmat,
- bf->bf_dmamap,
- BUS_DMASYNC_POSTREAD);
- /* Now pass it to the radar processing code */
- ath_dfs_process_phy_err(sc, mtod(m, char *), rstamp, rs);
- }
-
- /* Be suitably paranoid about receiving phy errors out of the stats array bounds */
- if (rs->rs_phyerr < 64)
- sc->sc_stats.ast_rx_phy[rs->rs_phyerr]++;
- goto rx_error; /* NB: don't count in ierrors */
- }
- if (rs->rs_status & HAL_RXERR_DECRYPT) {
- /*
- * Decrypt error. If the error occurred
- * because there was no hardware key, then
- * let the frame through so the upper layers
- * can process it. This is necessary for 5210
- * parts which have no way to setup a ``clear''
- * key cache entry.
- *
- * XXX do key cache faulting
- */
- if (rs->rs_keyix == HAL_RXKEYIX_INVALID)
- goto rx_accept;
- sc->sc_stats.ast_rx_badcrypt++;
- }
- if (rs->rs_status & HAL_RXERR_MIC) {
- sc->sc_stats.ast_rx_badmic++;
- /*
- * Do minimal work required to hand off
- * the 802.11 header for notification.
- */
- /* XXX frag's and qos frames */
- len = rs->rs_datalen;
- if (len >= sizeof (struct ieee80211_frame)) {
- bus_dmamap_sync(sc->sc_dmat,
- bf->bf_dmamap,
- BUS_DMASYNC_POSTREAD);
- ath_handle_micerror(ic,
- mtod(m, struct ieee80211_frame *),
- sc->sc_splitmic ?
- rs->rs_keyix-32 : rs->rs_keyix);
- }
- }
- ifp->if_ierrors++;
-rx_error:
- /*
- * Cleanup any pending partial frame.
- */
- if (sc->sc_rxpending != NULL) {
- m_freem(sc->sc_rxpending);
- sc->sc_rxpending = NULL;
- }
- /*
- * When a tap is present pass error frames
- * that have been requested. By default we
- * pass decrypt+mic errors but others may be
- * interesting (e.g. crc).
- */
- if (ieee80211_radiotap_active(ic) &&
- (rs->rs_status & sc->sc_monpass)) {
- bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap,
- BUS_DMASYNC_POSTREAD);
- /* NB: bpf needs the mbuf length setup */
- len = rs->rs_datalen;
- m->m_pkthdr.len = m->m_len = len;
- bf->bf_m = NULL;
- ath_rx_tap(ifp, m, rs, rstamp, nf);
- ieee80211_radiotap_rx_all(ic, m);
- m_freem(m);
- }
- /* XXX pass MIC errors up for s/w reclaculation */
- goto rx_next;
- }
-rx_accept:
- /*
- * Sync and unmap the frame. At this point we're
- * committed to passing the mbuf somewhere so clear
- * bf_m; this means a new mbuf must be allocated
- * when the rx descriptor is setup again to receive
- * another frame.
- */
- bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap,
- BUS_DMASYNC_POSTREAD);
- bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
- bf->bf_m = NULL;
-
- len = rs->rs_datalen;
- m->m_len = len;
-
- if (rs->rs_more) {
- /*
- * Frame spans multiple descriptors; save
- * it for the next completed descriptor, it
- * will be used to construct a jumbogram.
- */
- if (sc->sc_rxpending != NULL) {
- /* NB: max frame size is currently 2 clusters */
- sc->sc_stats.ast_rx_toobig++;
- m_freem(sc->sc_rxpending);
- }
- m->m_pkthdr.rcvif = ifp;
- m->m_pkthdr.len = len;
- sc->sc_rxpending = m;
- goto rx_next;
- } else if (sc->sc_rxpending != NULL) {
- /*
- * This is the second part of a jumbogram,
- * chain it to the first mbuf, adjust the
- * frame length, and clear the rxpending state.
- */
- sc->sc_rxpending->m_next = m;
- sc->sc_rxpending->m_pkthdr.len += len;
- m = sc->sc_rxpending;
- sc->sc_rxpending = NULL;
- } else {
- /*
- * Normal single-descriptor receive; setup
- * the rcvif and packet length.
- */
- m->m_pkthdr.rcvif = ifp;
- m->m_pkthdr.len = len;
- }
-
- /*
- * Validate rs->rs_antenna.
- *
- * Some users w/ AR9285 NICs have reported crashes
- * here because rs_antenna field is bogusly large.
- * Let's enforce the maximum antenna limit of 8
- * (and it shouldn't be hard coded, but that's a
- * separate problem) and if there's an issue, print
- * out an error and adjust rs_antenna to something
- * sensible.
- *
- * This code should be removed once the actual
- * root cause of the issue has been identified.
- * For example, it may be that the rs_antenna
- * field is only valid for the lsat frame of
- * an aggregate and it just happens that it is
- * "mostly" right. (This is a general statement -
- * the majority of the statistics are only valid
- * for the last frame in an aggregate.
- */
- if (rs->rs_antenna > 7) {
- device_printf(sc->sc_dev, "%s: rs_antenna > 7 (%d)\n",
- __func__, rs->rs_antenna);
-#ifdef ATH_DEBUG
- ath_printrxbuf(sc, bf, 0, status == HAL_OK);
-#endif /* ATH_DEBUG */
- rs->rs_antenna = 0; /* XXX better than nothing */
- }
-
- ifp->if_ipackets++;
- sc->sc_stats.ast_ant_rx[rs->rs_antenna]++;
-
- /*
- * Populate the rx status block. When there are bpf
- * listeners we do the additional work to provide
- * complete status. Otherwise we fill in only the
- * material required by ieee80211_input. Note that
- * noise setting is filled in above.
- */
- if (ieee80211_radiotap_active(ic))
- ath_rx_tap(ifp, m, rs, rstamp, nf);
-
- /*
- * From this point on we assume the frame is at least
- * as large as ieee80211_frame_min; verify that.
- */
- if (len < IEEE80211_MIN_LEN) {
- if (!ieee80211_radiotap_active(ic)) {
- DPRINTF(sc, ATH_DEBUG_RECV,
- "%s: short packet %d\n", __func__, len);
- sc->sc_stats.ast_rx_tooshort++;
- } else {
- /* NB: in particular this captures ack's */
- ieee80211_radiotap_rx_all(ic, m);
- }
- m_freem(m);
- goto rx_next;
- }
-
- if (IFF_DUMPPKTS(sc, ATH_DEBUG_RECV)) {
- const HAL_RATE_TABLE *rt = sc->sc_currates;
- uint8_t rix = rt->rateCodeToIndex[rs->rs_rate];
-
- ieee80211_dump_pkt(ic, mtod(m, caddr_t), len,
- sc->sc_hwmap[rix].ieeerate, rs->rs_rssi);
- }
-
- m_adj(m, -IEEE80211_CRC_LEN);
-
- /*
- * Locate the node for sender, track state, and then
- * pass the (referenced) node up to the 802.11 layer
- * for its use.
- */
- ni = ieee80211_find_rxnode_withkey(ic,
- mtod(m, const struct ieee80211_frame_min *),
- rs->rs_keyix == HAL_RXKEYIX_INVALID ?
- IEEE80211_KEYIX_NONE : rs->rs_keyix);
- sc->sc_lastrs = rs;
-
-#ifdef AH_SUPPORT_AR5416
- if (rs->rs_isaggr)
- sc->sc_stats.ast_rx_agg++;
-#endif /* AH_SUPPORT_AR5416 */
-
- if (ni != NULL) {
- /*
- * Only punt packets for ampdu reorder processing for
- * 11n nodes; net80211 enforces that M_AMPDU is only
- * set for 11n nodes.
- */
- if (ni->ni_flags & IEEE80211_NODE_HT)
- m->m_flags |= M_AMPDU;
-
- /*
- * Sending station is known, dispatch directly.
- */
- type = ieee80211_input(ni, m, rs->rs_rssi, nf);
- ieee80211_free_node(ni);
- /*
- * Arrange to update the last rx timestamp only for
- * frames from our ap when operating in station mode.
- * This assumes the rx key is always setup when
- * associated.
- */
- if (ic->ic_opmode == IEEE80211_M_STA &&
- rs->rs_keyix != HAL_RXKEYIX_INVALID)
- ngood++;
- } else {
- type = ieee80211_input_all(ic, m, rs->rs_rssi, nf);
- }
- /*
- * Track rx rssi and do any rx antenna management.
- */
- ATH_RSSI_LPF(sc->sc_halstats.ns_avgrssi, rs->rs_rssi);
- if (sc->sc_diversity) {
- /*
- * When using fast diversity, change the default rx
- * antenna if diversity chooses the other antenna 3
- * times in a row.
- */
- if (sc->sc_defant != rs->rs_antenna) {
- if (++sc->sc_rxotherant >= 3)
- ath_setdefantenna(sc, rs->rs_antenna);
- } else
- sc->sc_rxotherant = 0;
- }
-
- /* Newer school diversity - kite specific for now */
- /* XXX perhaps migrate the normal diversity code to this? */
- if ((ah)->ah_rxAntCombDiversity)
- (*(ah)->ah_rxAntCombDiversity)(ah, rs, ticks, hz);
-
- if (sc->sc_softled) {
- /*
- * Blink for any data frame. Otherwise do a
- * heartbeat-style blink when idle. The latter
- * is mainly for station mode where we depend on
- * periodic beacon frames to trigger the poll event.
- */
- if (type == IEEE80211_FC0_TYPE_DATA) {
- const HAL_RATE_TABLE *rt = sc->sc_currates;
- ath_led_event(sc,
- rt->rateCodeToIndex[rs->rs_rate]);
- } else if (ticks - sc->sc_ledevent >= sc->sc_ledidle)
- ath_led_event(sc, 0);
- }
-rx_next:
- TAILQ_INSERT_TAIL(&sc->sc_rxbuf, bf, bf_list);
- } while (ath_rxbuf_init(sc, bf) == 0);
-
- /* rx signal state monitoring */
- ath_hal_rxmonitor(ah, &sc->sc_halstats, sc->sc_curchan);
- if (ngood)
- sc->sc_lastrx = tsf;
-
- CTR2(ATH_KTR_INTR, "ath_rx_proc: npkts=%d, ngood=%d", npkts, ngood);
- /* Queue DFS tasklet if needed */
- if (resched && ath_dfs_tasklet_needed(sc, sc->sc_curchan))
- taskqueue_enqueue(sc->sc_tq, &sc->sc_dfstask);
-
- /*
- * Now that all the RX frames were handled that
- * need to be handled, kick the PCU if there's
- * been an RXEOL condition.
- */
- ATH_PCU_LOCK(sc);
- if (resched && sc->sc_kickpcu) {
- CTR0(ATH_KTR_ERR, "ath_rx_proc: kickpcu");
- device_printf(sc->sc_dev, "%s: kickpcu; handled %d packets\n",
- __func__, npkts);
-
- /* XXX rxslink? */
- /*
- * XXX can we hold the PCU lock here?
- * Are there any net80211 buffer calls involved?
- */
- bf = TAILQ_FIRST(&sc->sc_rxbuf);
- ath_hal_putrxbuf(ah, bf->bf_daddr);
- ath_hal_rxena(ah); /* enable recv descriptors */
- ath_mode_init(sc); /* set filters, etc. */
- ath_hal_startpcurecv(ah); /* re-enable PCU/DMA engine */
-
- ath_hal_intrset(ah, sc->sc_imask);
- sc->sc_kickpcu = 0;
- }
- ATH_PCU_UNLOCK(sc);
-
- /* XXX check this inside of IF_LOCK? */
- if (resched && (ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0) {
-#ifdef IEEE80211_SUPPORT_SUPERG
- ieee80211_ff_age_all(ic, 100);
-#endif
- if (!IFQ_IS_EMPTY(&ifp->if_snd))
- ath_start(ifp);
- }
-#undef PA2DESC
-
- ATH_PCU_LOCK(sc);
- sc->sc_rxproc_cnt--;
- ATH_PCU_UNLOCK(sc);
-}
-
-static void
ath_txq_init(struct ath_softc *sc, struct ath_txq *txq, int qnum)
{
txq->axq_qnum = qnum;
@@ -4700,7 +3136,7 @@ ath_txq_update(struct ath_softc *sc, int ac)
/*
* Callback from the 802.11 layer to update WME parameters.
*/
-static int
+int
ath_wme_update(struct ieee80211com *ic)
{
struct ath_softc *sc = ic->ic_ifp->if_softc;
@@ -5404,87 +3840,6 @@ ath_draintxq(struct ath_softc *sc, ATH_RESET_TYPE reset_type)
}
/*
- * Disable the receive h/w in preparation for a reset.
- */
-static void
-ath_stoprecv(struct ath_softc *sc, int dodelay)
-{
-#define PA2DESC(_sc, _pa) \
- ((struct ath_desc *)((caddr_t)(_sc)->sc_rxdma.dd_desc + \
- ((_pa) - (_sc)->sc_rxdma.dd_desc_paddr)))
- struct ath_hal *ah = sc->sc_ah;
-
- ath_hal_stoppcurecv(ah); /* disable PCU */
- ath_hal_setrxfilter(ah, 0); /* clear recv filter */
- ath_hal_stopdmarecv(ah); /* disable DMA engine */
- /*
- * TODO: see if this particular DELAY() is required; it may be
- * masking some missing FIFO flush or DMA sync.
- */
-#if 0
- if (dodelay)
-#endif
- DELAY(3000); /* 3ms is long enough for 1 frame */
-#ifdef ATH_DEBUG
- if (sc->sc_debug & (ATH_DEBUG_RESET | ATH_DEBUG_FATAL)) {
- struct ath_buf *bf;
- u_int ix;
-
- device_printf(sc->sc_dev,
- "%s: rx queue %p, link %p\n",
- __func__,
- (caddr_t)(uintptr_t) ath_hal_getrxbuf(ah),
- sc->sc_rxlink);
- ix = 0;
- TAILQ_FOREACH(bf, &sc->sc_rxbuf, bf_list) {
- struct ath_desc *ds = bf->bf_desc;
- struct ath_rx_status *rs = &bf->bf_status.ds_rxstat;
- HAL_STATUS status = ath_hal_rxprocdesc(ah, ds,
- bf->bf_daddr, PA2DESC(sc, ds->ds_link), rs);
- if (status == HAL_OK || (sc->sc_debug & ATH_DEBUG_FATAL))
- ath_printrxbuf(sc, bf, ix, status == HAL_OK);
- ix++;
- }
- }
-#endif
- if (sc->sc_rxpending != NULL) {
- m_freem(sc->sc_rxpending);
- sc->sc_rxpending = NULL;
- }
- sc->sc_rxlink = NULL; /* just in case */
-#undef PA2DESC
-}
-
-/*
- * Enable the receive h/w following a reset.
- */
-static int
-ath_startrecv(struct ath_softc *sc)
-{
- struct ath_hal *ah = sc->sc_ah;
- struct ath_buf *bf;
-
- sc->sc_rxlink = NULL;
- sc->sc_rxpending = NULL;
- TAILQ_FOREACH(bf, &sc->sc_rxbuf, bf_list) {
- int error = ath_rxbuf_init(sc, bf);
- if (error != 0) {
- DPRINTF(sc, ATH_DEBUG_RECV,
- "%s: ath_rxbuf_init failed %d\n",
- __func__, error);
- return error;
- }
- }
-
- bf = TAILQ_FIRST(&sc->sc_rxbuf);
- ath_hal_putrxbuf(ah, bf->bf_daddr);
- ath_hal_rxena(ah); /* enable recv descriptors */
- ath_mode_init(sc); /* set filters, etc. */
- ath_hal_startpcurecv(ah); /* re-enable PCU/DMA engine */
- return 0;
-}
-
-/*
* Update internal state after a channel change.
*/
static void
@@ -6555,357 +4910,6 @@ ath_announce(struct ath_softc *sc)
if_printf(ifp, "using multicast key search\n");
}
-#ifdef IEEE80211_SUPPORT_TDMA
-static void
-ath_tdma_settimers(struct ath_softc *sc, u_int32_t nexttbtt, u_int32_t bintval)
-{
- struct ath_hal *ah = sc->sc_ah;
- HAL_BEACON_TIMERS bt;
-
- bt.bt_intval = bintval | HAL_BEACON_ENA;
- bt.bt_nexttbtt = nexttbtt;
- bt.bt_nextdba = (nexttbtt<<3) - sc->sc_tdmadbaprep;
- bt.bt_nextswba = (nexttbtt<<3) - sc->sc_tdmaswbaprep;
- bt.bt_nextatim = nexttbtt+1;
- /* Enables TBTT, DBA, SWBA timers by default */
- bt.bt_flags = 0;
- ath_hal_beaconsettimers(ah, &bt);
-}
-
-/*
- * Calculate the beacon interval. This is periodic in the
- * superframe for the bss. We assume each station is configured
- * identically wrt transmit rate so the guard time we calculate
- * above will be the same on all stations. Note we need to
- * factor in the xmit time because the hardware will schedule
- * a frame for transmit if the start of the frame is within
- * the burst time. When we get hardware that properly kills
- * frames in the PCU we can reduce/eliminate the guard time.
- *
- * Roundup to 1024 is so we have 1 TU buffer in the guard time
- * to deal with the granularity of the nexttbtt timer. 11n MAC's
- * with 1us timer granularity should allow us to reduce/eliminate
- * this.
- */
-static void
-ath_tdma_bintvalsetup(struct ath_softc *sc,
- const struct ieee80211_tdma_state *tdma)
-{
- /* copy from vap state (XXX check all vaps have same value?) */
- sc->sc_tdmaslotlen = tdma->tdma_slotlen;
-
- sc->sc_tdmabintval = roundup((sc->sc_tdmaslotlen+sc->sc_tdmaguard) *
- tdma->tdma_slotcnt, 1024);
- sc->sc_tdmabintval >>= 10; /* TSF -> TU */
- if (sc->sc_tdmabintval & 1)
- sc->sc_tdmabintval++;
-
- if (tdma->tdma_slot == 0) {
- /*
- * Only slot 0 beacons; other slots respond.
- */
- sc->sc_imask |= HAL_INT_SWBA;
- sc->sc_tdmaswba = 0; /* beacon immediately */
- } else {
- /* XXX all vaps must be slot 0 or slot !0 */
- sc->sc_imask &= ~HAL_INT_SWBA;
- }
-}
-
-/*
- * Max 802.11 overhead. This assumes no 4-address frames and
- * the encapsulation done by ieee80211_encap (llc). We also
- * include potential crypto overhead.
- */
-#define IEEE80211_MAXOVERHEAD \
- (sizeof(struct ieee80211_qosframe) \
- + sizeof(struct llc) \
- + IEEE80211_ADDR_LEN \
- + IEEE80211_WEP_IVLEN \
- + IEEE80211_WEP_KIDLEN \
- + IEEE80211_WEP_CRCLEN \
- + IEEE80211_WEP_MICLEN \
- + IEEE80211_CRC_LEN)
-
-/*
- * Setup initially for tdma operation. Start the beacon
- * timers and enable SWBA if we are slot 0. Otherwise
- * we wait for slot 0 to arrive so we can sync up before
- * starting to transmit.
- */
-static void
-ath_tdma_config(struct ath_softc *sc, struct ieee80211vap *vap)
-{
- struct ath_hal *ah = sc->sc_ah;
- struct ifnet *ifp = sc->sc_ifp;
- struct ieee80211com *ic = ifp->if_l2com;
- const struct ieee80211_txparam *tp;
- const struct ieee80211_tdma_state *tdma = NULL;
- int rix;
-
- if (vap == NULL) {
- vap = TAILQ_FIRST(&ic->ic_vaps); /* XXX */
- if (vap == NULL) {
- if_printf(ifp, "%s: no vaps?\n", __func__);
- return;
- }
- }
- /* XXX should take a locked ref to iv_bss */
- tp = vap->iv_bss->ni_txparms;
- /*
- * Calculate the guard time for each slot. This is the
- * time to send a maximal-size frame according to the
- * fixed/lowest transmit rate. Note that the interface
- * mtu does not include the 802.11 overhead so we must
- * tack that on (ath_hal_computetxtime includes the
- * preamble and plcp in it's calculation).
- */
- tdma = vap->iv_tdma;
- if (tp->ucastrate != IEEE80211_FIXED_RATE_NONE)
- rix = ath_tx_findrix(sc, tp->ucastrate);
- else
- rix = ath_tx_findrix(sc, tp->mcastrate);
- /* XXX short preamble assumed */
- sc->sc_tdmaguard = ath_hal_computetxtime(ah, sc->sc_currates,
- ifp->if_mtu + IEEE80211_MAXOVERHEAD, rix, AH_TRUE);
-
- ath_hal_intrset(ah, 0);
-
- ath_beaconq_config(sc); /* setup h/w beacon q */
- if (sc->sc_setcca)
- ath_hal_setcca(ah, AH_FALSE); /* disable CCA */
- ath_tdma_bintvalsetup(sc, tdma); /* calculate beacon interval */
- ath_tdma_settimers(sc, sc->sc_tdmabintval,
- sc->sc_tdmabintval | HAL_BEACON_RESET_TSF);
- sc->sc_syncbeacon = 0;
-
- sc->sc_avgtsfdeltap = TDMA_DUMMY_MARKER;
- sc->sc_avgtsfdeltam = TDMA_DUMMY_MARKER;
-
- ath_hal_intrset(ah, sc->sc_imask);
-
- DPRINTF(sc, ATH_DEBUG_TDMA, "%s: slot %u len %uus cnt %u "
- "bsched %u guard %uus bintval %u TU dba prep %u\n", __func__,
- tdma->tdma_slot, tdma->tdma_slotlen, tdma->tdma_slotcnt,
- tdma->tdma_bintval, sc->sc_tdmaguard, sc->sc_tdmabintval,
- sc->sc_tdmadbaprep);
-}
-
-/*
- * Update tdma operation. Called from the 802.11 layer
- * when a beacon is received from the TDMA station operating
- * in the slot immediately preceding us in the bss. Use
- * the rx timestamp for the beacon frame to update our
- * beacon timers so we follow their schedule. Note that
- * by using the rx timestamp we implicitly include the
- * propagation delay in our schedule.
- */
-static void
-ath_tdma_update(struct ieee80211_node *ni,
- const struct ieee80211_tdma_param *tdma, int changed)
-{
-#define TSF_TO_TU(_h,_l) \
- ((((u_int32_t)(_h)) << 22) | (((u_int32_t)(_l)) >> 10))
-#define TU_TO_TSF(_tu) (((u_int64_t)(_tu)) << 10)
- struct ieee80211vap *vap = ni->ni_vap;
- struct ieee80211com *ic = ni->ni_ic;
- struct ath_softc *sc = ic->ic_ifp->if_softc;
- struct ath_hal *ah = sc->sc_ah;
- const HAL_RATE_TABLE *rt = sc->sc_currates;
- u_int64_t tsf, rstamp, nextslot, nexttbtt;
- u_int32_t txtime, nextslottu;
- int32_t tudelta, tsfdelta;
- const struct ath_rx_status *rs;
- int rix;
-
- sc->sc_stats.ast_tdma_update++;
-
- /*
- * Check for and adopt configuration changes.
- */
- if (changed != 0) {
- const struct ieee80211_tdma_state *ts = vap->iv_tdma;
-
- ath_tdma_bintvalsetup(sc, ts);
- if (changed & TDMA_UPDATE_SLOTLEN)
- ath_wme_update(ic);
-
- DPRINTF(sc, ATH_DEBUG_TDMA,
- "%s: adopt slot %u slotcnt %u slotlen %u us "
- "bintval %u TU\n", __func__,
- ts->tdma_slot, ts->tdma_slotcnt, ts->tdma_slotlen,
- sc->sc_tdmabintval);
-
- /* XXX right? */
- ath_hal_intrset(ah, sc->sc_imask);
- /* NB: beacon timers programmed below */
- }
-
- /* extend rx timestamp to 64 bits */
- rs = sc->sc_lastrs;
- tsf = ath_hal_gettsf64(ah);
- rstamp = ath_extend_tsf(sc, rs->rs_tstamp, tsf);
- /*
- * The rx timestamp is set by the hardware on completing
- * reception (at the point where the rx descriptor is DMA'd
- * to the host). To find the start of our next slot we
- * must adjust this time by the time required to send
- * the packet just received.
- */
- rix = rt->rateCodeToIndex[rs->rs_rate];
- txtime = ath_hal_computetxtime(ah, rt, rs->rs_datalen, rix,
- rt->info[rix].shortPreamble);
- /* NB: << 9 is to cvt to TU and /2 */
- nextslot = (rstamp - txtime) + (sc->sc_tdmabintval << 9);
- nextslottu = TSF_TO_TU(nextslot>>32, nextslot) & HAL_BEACON_PERIOD;
-
- /*
- * Retrieve the hardware NextTBTT in usecs
- * and calculate the difference between what the
- * other station thinks and what we have programmed. This
- * lets us figure how to adjust our timers to match. The
- * adjustments are done by pulling the TSF forward and possibly
- * rewriting the beacon timers.
- */
- nexttbtt = ath_hal_getnexttbtt(ah);
- tsfdelta = (int32_t)((nextslot % TU_TO_TSF(HAL_BEACON_PERIOD + 1)) - nexttbtt);
-
- DPRINTF(sc, ATH_DEBUG_TDMA_TIMER,
- "tsfdelta %d avg +%d/-%d\n", tsfdelta,
- TDMA_AVG(sc->sc_avgtsfdeltap), TDMA_AVG(sc->sc_avgtsfdeltam));
-
- if (tsfdelta < 0) {
- TDMA_SAMPLE(sc->sc_avgtsfdeltap, 0);
- TDMA_SAMPLE(sc->sc_avgtsfdeltam, -tsfdelta);
- tsfdelta = -tsfdelta % 1024;
- nextslottu++;
- } else if (tsfdelta > 0) {
- TDMA_SAMPLE(sc->sc_avgtsfdeltap, tsfdelta);
- TDMA_SAMPLE(sc->sc_avgtsfdeltam, 0);
- tsfdelta = 1024 - (tsfdelta % 1024);
- nextslottu++;
- } else {
- TDMA_SAMPLE(sc->sc_avgtsfdeltap, 0);
- TDMA_SAMPLE(sc->sc_avgtsfdeltam, 0);
- }
- tudelta = nextslottu - TSF_TO_TU(nexttbtt >> 32, nexttbtt);
-
- /*
- * Copy sender's timetstamp into tdma ie so they can
- * calculate roundtrip time. We submit a beacon frame
- * below after any timer adjustment. The frame goes out
- * at the next TBTT so the sender can calculate the
- * roundtrip by inspecting the tdma ie in our beacon frame.
- *
- * NB: This tstamp is subtlely preserved when
- * IEEE80211_BEACON_TDMA is marked (e.g. when the
- * slot position changes) because ieee80211_add_tdma
- * skips over the data.
- */
- memcpy(ATH_VAP(vap)->av_boff.bo_tdma +
- __offsetof(struct ieee80211_tdma_param, tdma_tstamp),
- &ni->ni_tstamp.data, 8);
-#if 0
- DPRINTF(sc, ATH_DEBUG_TDMA_TIMER,
- "tsf %llu nextslot %llu (%d, %d) nextslottu %u nexttbtt %llu (%d)\n",
- (unsigned long long) tsf, (unsigned long long) nextslot,
- (int)(nextslot - tsf), tsfdelta, nextslottu, nexttbtt, tudelta);
-#endif
- /*
- * Adjust the beacon timers only when pulling them forward
- * or when going back by less than the beacon interval.
- * Negative jumps larger than the beacon interval seem to
- * cause the timers to stop and generally cause instability.
- * This basically filters out jumps due to missed beacons.
- */
- if (tudelta != 0 && (tudelta > 0 || -tudelta < sc->sc_tdmabintval)) {
- ath_tdma_settimers(sc, nextslottu, sc->sc_tdmabintval);
- sc->sc_stats.ast_tdma_timers++;
- }
- if (tsfdelta > 0) {
- ath_hal_adjusttsf(ah, tsfdelta);
- sc->sc_stats.ast_tdma_tsf++;
- }
- ath_tdma_beacon_send(sc, vap); /* prepare response */
-#undef TU_TO_TSF
-#undef TSF_TO_TU
-}
-
-/*
- * Transmit a beacon frame at SWBA. Dynamic updates
- * to the frame contents are done as needed.
- */
-static void
-ath_tdma_beacon_send(struct ath_softc *sc, struct ieee80211vap *vap)
-{
- struct ath_hal *ah = sc->sc_ah;
- struct ath_buf *bf;
- int otherant;
-
- /*
- * Check if the previous beacon has gone out. If
- * not don't try to post another, skip this period
- * and wait for the next. Missed beacons indicate
- * a problem and should not occur. If we miss too
- * many consecutive beacons reset the device.
- */
- if (ath_hal_numtxpending(ah, sc->sc_bhalq) != 0) {
- sc->sc_bmisscount++;
- DPRINTF(sc, ATH_DEBUG_BEACON,
- "%s: missed %u consecutive beacons\n",
- __func__, sc->sc_bmisscount);
- if (sc->sc_bmisscount >= ath_bstuck_threshold)
- taskqueue_enqueue(sc->sc_tq, &sc->sc_bstucktask);
- return;
- }
- if (sc->sc_bmisscount != 0) {
- DPRINTF(sc, ATH_DEBUG_BEACON,
- "%s: resume beacon xmit after %u misses\n",
- __func__, sc->sc_bmisscount);
- sc->sc_bmisscount = 0;
- }
-
- /*
- * Check recent per-antenna transmit statistics and flip
- * the default antenna if noticeably more frames went out
- * on the non-default antenna.
- * XXX assumes 2 anntenae
- */
- if (!sc->sc_diversity) {
- otherant = sc->sc_defant & 1 ? 2 : 1;
- if (sc->sc_ant_tx[otherant] > sc->sc_ant_tx[sc->sc_defant] + 2)
- ath_setdefantenna(sc, otherant);
- sc->sc_ant_tx[1] = sc->sc_ant_tx[2] = 0;
- }
-
- bf = ath_beacon_generate(sc, vap);
- if (bf != NULL) {
- /*
- * Stop any current dma and put the new frame on the queue.
- * This should never fail since we check above that no frames
- * are still pending on the queue.
- */
- if (!ath_hal_stoptxdma(ah, sc->sc_bhalq)) {
- DPRINTF(sc, ATH_DEBUG_ANY,
- "%s: beacon queue %u did not stop?\n",
- __func__, sc->sc_bhalq);
- /* NB: the HAL still stops DMA, so proceed */
- }
- ath_hal_puttxbuf(ah, sc->sc_bhalq, bf->bf_daddr);
- ath_hal_txstart(ah, sc->sc_bhalq);
-
- sc->sc_stats.ast_be_xmit++; /* XXX per-vap? */
-
- /*
- * Record local TSF for our last send for use
- * in arbitrating slot collisions.
- */
- /* XXX should take a locked ref to iv_bss */
- vap->iv_bss->ni_tstamp.tsf = ath_hal_gettsf64(ah);
- }
-}
-#endif /* IEEE80211_SUPPORT_TDMA */
-
static void
ath_dfs_tasklet(void *p, int npending)
{
diff --git a/sys/dev/ath/if_ath_beacon.c b/sys/dev/ath/if_ath_beacon.c
new file mode 100644
index 000000000000..c4b159a59770
--- /dev/null
+++ b/sys/dev/ath/if_ath_beacon.c
@@ -0,0 +1,841 @@
+/*-
+ * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
+ * 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,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ * redistribution must be conditioned upon including a substantially
+ * similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * 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 NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Driver for the Atheros Wireless LAN controller.
+ *
+ * This software is derived from work of Atsushi Onoe; his contribution
+ * is greatly appreciated.
+ */
+
+#include "opt_inet.h"
+#include "opt_ath.h"
+/*
+ * This is needed for register operations which are performed
+ * by the driver - eg, calls to ath_hal_gettsf32().
+ *
+ * It's also required for any AH_DEBUG checks in here, eg the
+ * module dependencies.
+ */
+#include "opt_ah.h"
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/sysctl.h>
+#include <sys/mbuf.h>
+#include <sys/malloc.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/sockio.h>
+#include <sys/errno.h>
+#include <sys/callout.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/kthread.h>
+#include <sys/taskqueue.h>
+#include <sys/priv.h>
+#include <sys/module.h>
+#include <sys/ktr.h>
+#include <sys/smp.h> /* for mp_ncpus */
+
+#include <machine/bus.h>
+
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#include <net/if_types.h>
+#include <net/if_arp.h>
+#include <net/ethernet.h>
+#include <net/if_llc.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_regdomain.h>
+#ifdef IEEE80211_SUPPORT_SUPERG
+#include <net80211/ieee80211_superg.h>
+#endif
+
+#include <net/bpf.h>
+
+#ifdef INET
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+#endif
+
+#include <dev/ath/if_athvar.h>
+
+#include <dev/ath/if_ath_debug.h>
+#include <dev/ath/if_ath_misc.h>
+#include <dev/ath/if_ath_tx.h>
+#include <dev/ath/if_ath_beacon.h>
+
+#ifdef ATH_TX99_DIAG
+#include <dev/ath/ath_tx99/ath_tx99.h>
+#endif
+
+/*
+ * Setup a h/w transmit queue for beacons.
+ */
+int
+ath_beaconq_setup(struct ath_hal *ah)
+{
+ HAL_TXQ_INFO qi;
+
+ memset(&qi, 0, sizeof(qi));
+ qi.tqi_aifs = HAL_TXQ_USEDEFAULT;
+ qi.tqi_cwmin = HAL_TXQ_USEDEFAULT;
+ qi.tqi_cwmax = HAL_TXQ_USEDEFAULT;
+ /* NB: for dynamic turbo, don't enable any other interrupts */
+ qi.tqi_qflags = HAL_TXQ_TXDESCINT_ENABLE;
+ return ath_hal_setuptxqueue(ah, HAL_TX_QUEUE_BEACON, &qi);
+}
+
+/*
+ * Setup the transmit queue parameters for the beacon queue.
+ */
+int
+ath_beaconq_config(struct ath_softc *sc)
+{
+#define ATH_EXPONENT_TO_VALUE(v) ((1<<(v))-1)
+ struct ieee80211com *ic = sc->sc_ifp->if_l2com;
+ struct ath_hal *ah = sc->sc_ah;
+ HAL_TXQ_INFO qi;
+
+ ath_hal_gettxqueueprops(ah, sc->sc_bhalq, &qi);
+ if (ic->ic_opmode == IEEE80211_M_HOSTAP ||
+ ic->ic_opmode == IEEE80211_M_MBSS) {
+ /*
+ * Always burst out beacon and CAB traffic.
+ */
+ qi.tqi_aifs = ATH_BEACON_AIFS_DEFAULT;
+ qi.tqi_cwmin = ATH_BEACON_CWMIN_DEFAULT;
+ qi.tqi_cwmax = ATH_BEACON_CWMAX_DEFAULT;
+ } else {
+ struct wmeParams *wmep =
+ &ic->ic_wme.wme_chanParams.cap_wmeParams[WME_AC_BE];
+ /*
+ * Adhoc mode; important thing is to use 2x cwmin.
+ */
+ qi.tqi_aifs = wmep->wmep_aifsn;
+ qi.tqi_cwmin = 2*ATH_EXPONENT_TO_VALUE(wmep->wmep_logcwmin);
+ qi.tqi_cwmax = ATH_EXPONENT_TO_VALUE(wmep->wmep_logcwmax);
+ }
+
+ if (!ath_hal_settxqueueprops(ah, sc->sc_bhalq, &qi)) {
+ device_printf(sc->sc_dev, "unable to update parameters for "
+ "beacon hardware queue!\n");
+ return 0;
+ } else {
+ ath_hal_resettxqueue(ah, sc->sc_bhalq); /* push to h/w */
+ return 1;
+ }
+#undef ATH_EXPONENT_TO_VALUE
+}
+
+/*
+ * Allocate and setup an initial beacon frame.
+ */
+int
+ath_beacon_alloc(struct ath_softc *sc, struct ieee80211_node *ni)
+{
+ struct ieee80211vap *vap = ni->ni_vap;
+ struct ath_vap *avp = ATH_VAP(vap);
+ struct ath_buf *bf;
+ struct mbuf *m;
+ int error;
+
+ bf = avp->av_bcbuf;
+ DPRINTF(sc, ATH_DEBUG_NODE, "%s: bf_m=%p, bf_node=%p\n",
+ __func__, bf->bf_m, bf->bf_node);
+ if (bf->bf_m != NULL) {
+ bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
+ m_freem(bf->bf_m);
+ bf->bf_m = NULL;
+ }
+ if (bf->bf_node != NULL) {
+ ieee80211_free_node(bf->bf_node);
+ bf->bf_node = NULL;
+ }
+
+ /*
+ * NB: the beacon data buffer must be 32-bit aligned;
+ * we assume the mbuf routines will return us something
+ * with this alignment (perhaps should assert).
+ */
+ m = ieee80211_beacon_alloc(ni, &avp->av_boff);
+ if (m == NULL) {
+ device_printf(sc->sc_dev, "%s: cannot get mbuf\n", __func__);
+ sc->sc_stats.ast_be_nombuf++;
+ return ENOMEM;
+ }
+ error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m,
+ bf->bf_segs, &bf->bf_nseg,
+ BUS_DMA_NOWAIT);
+ if (error != 0) {
+ device_printf(sc->sc_dev,
+ "%s: cannot map mbuf, bus_dmamap_load_mbuf_sg returns %d\n",
+ __func__, error);
+ m_freem(m);
+ return error;
+ }
+
+ /*
+ * Calculate a TSF adjustment factor required for staggered
+ * beacons. Note that we assume the format of the beacon
+ * frame leaves the tstamp field immediately following the
+ * header.
+ */
+ if (sc->sc_stagbeacons && avp->av_bslot > 0) {
+ uint64_t tsfadjust;
+ struct ieee80211_frame *wh;
+
+ /*
+ * The beacon interval is in TU's; the TSF is in usecs.
+ * We figure out how many TU's to add to align the timestamp
+ * then convert to TSF units and handle byte swapping before
+ * inserting it in the frame. The hardware will then add this
+ * each time a beacon frame is sent. Note that we align vap's
+ * 1..N and leave vap 0 untouched. This means vap 0 has a
+ * timestamp in one beacon interval while the others get a
+ * timstamp aligned to the next interval.
+ */
+ tsfadjust = ni->ni_intval *
+ (ATH_BCBUF - avp->av_bslot) / ATH_BCBUF;
+ tsfadjust = htole64(tsfadjust << 10); /* TU -> TSF */
+
+ DPRINTF(sc, ATH_DEBUG_BEACON,
+ "%s: %s beacons bslot %d intval %u tsfadjust %llu\n",
+ __func__, sc->sc_stagbeacons ? "stagger" : "burst",
+ avp->av_bslot, ni->ni_intval,
+ (long long unsigned) le64toh(tsfadjust));
+
+ wh = mtod(m, struct ieee80211_frame *);
+ memcpy(&wh[1], &tsfadjust, sizeof(tsfadjust));
+ }
+ bf->bf_m = m;
+ bf->bf_node = ieee80211_ref_node(ni);
+
+ return 0;
+}
+
+/*
+ * Setup the beacon frame for transmit.
+ */
+static void
+ath_beacon_setup(struct ath_softc *sc, struct ath_buf *bf)
+{
+#define USE_SHPREAMBLE(_ic) \
+ (((_ic)->ic_flags & (IEEE80211_F_SHPREAMBLE | IEEE80211_F_USEBARKER))\
+ == IEEE80211_F_SHPREAMBLE)
+ struct ieee80211_node *ni = bf->bf_node;
+ struct ieee80211com *ic = ni->ni_ic;
+ struct mbuf *m = bf->bf_m;
+ struct ath_hal *ah = sc->sc_ah;
+ struct ath_desc *ds;
+ int flags, antenna;
+ const HAL_RATE_TABLE *rt;
+ u_int8_t rix, rate;
+
+ DPRINTF(sc, ATH_DEBUG_BEACON_PROC, "%s: m %p len %u\n",
+ __func__, m, m->m_len);
+
+ /* setup descriptors */
+ ds = bf->bf_desc;
+ bf->bf_last = bf;
+ bf->bf_lastds = ds;
+
+ flags = HAL_TXDESC_NOACK;
+ if (ic->ic_opmode == IEEE80211_M_IBSS && sc->sc_hasveol) {
+ ds->ds_link = bf->bf_daddr; /* self-linked */
+ flags |= HAL_TXDESC_VEOL;
+ /*
+ * Let hardware handle antenna switching.
+ */
+ antenna = sc->sc_txantenna;
+ } else {
+ ds->ds_link = 0;
+ /*
+ * Switch antenna every 4 beacons.
+ * XXX assumes two antenna
+ */
+ if (sc->sc_txantenna != 0)
+ antenna = sc->sc_txantenna;
+ else if (sc->sc_stagbeacons && sc->sc_nbcnvaps != 0)
+ antenna = ((sc->sc_stats.ast_be_xmit / sc->sc_nbcnvaps) & 4 ? 2 : 1);
+ else
+ antenna = (sc->sc_stats.ast_be_xmit & 4 ? 2 : 1);
+ }
+
+ KASSERT(bf->bf_nseg == 1,
+ ("multi-segment beacon frame; nseg %u", bf->bf_nseg));
+ ds->ds_data = bf->bf_segs[0].ds_addr;
+ /*
+ * Calculate rate code.
+ * XXX everything at min xmit rate
+ */
+ rix = 0;
+ rt = sc->sc_currates;
+ rate = rt->info[rix].rateCode;
+ if (USE_SHPREAMBLE(ic))
+ rate |= rt->info[rix].shortPreamble;
+ ath_hal_setuptxdesc(ah, ds
+ , m->m_len + IEEE80211_CRC_LEN /* frame length */
+ , sizeof(struct ieee80211_frame)/* header length */
+ , HAL_PKT_TYPE_BEACON /* Atheros packet type */
+ , ni->ni_txpower /* txpower XXX */
+ , rate, 1 /* series 0 rate/tries */
+ , HAL_TXKEYIX_INVALID /* no encryption */
+ , antenna /* antenna mode */
+ , flags /* no ack, veol for beacons */
+ , 0 /* rts/cts rate */
+ , 0 /* rts/cts duration */
+ );
+ /* NB: beacon's BufLen must be a multiple of 4 bytes */
+ ath_hal_filltxdesc(ah, ds
+ , roundup(m->m_len, 4) /* buffer length */
+ , AH_TRUE /* first segment */
+ , AH_TRUE /* last segment */
+ , ds /* first descriptor */
+ );
+#if 0
+ ath_desc_swap(ds);
+#endif
+#undef USE_SHPREAMBLE
+}
+
+void
+ath_beacon_update(struct ieee80211vap *vap, int item)
+{
+ struct ieee80211_beacon_offsets *bo = &ATH_VAP(vap)->av_boff;
+
+ setbit(bo->bo_flags, item);
+}
+
+/*
+ * Transmit a beacon frame at SWBA. Dynamic updates to the
+ * frame contents are done as needed and the slot time is
+ * also adjusted based on current state.
+ */
+void
+ath_beacon_proc(void *arg, int pending)
+{
+ struct ath_softc *sc = arg;
+ struct ath_hal *ah = sc->sc_ah;
+ struct ieee80211vap *vap;
+ struct ath_buf *bf;
+ int slot, otherant;
+ uint32_t bfaddr;
+
+ DPRINTF(sc, ATH_DEBUG_BEACON_PROC, "%s: pending %u\n",
+ __func__, pending);
+ /*
+ * Check if the previous beacon has gone out. If
+ * not don't try to post another, skip this period
+ * and wait for the next. Missed beacons indicate
+ * a problem and should not occur. If we miss too
+ * many consecutive beacons reset the device.
+ */
+ if (ath_hal_numtxpending(ah, sc->sc_bhalq) != 0) {
+ sc->sc_bmisscount++;
+ sc->sc_stats.ast_be_missed++;
+ DPRINTF(sc, ATH_DEBUG_BEACON,
+ "%s: missed %u consecutive beacons\n",
+ __func__, sc->sc_bmisscount);
+ if (sc->sc_bmisscount >= ath_bstuck_threshold)
+ taskqueue_enqueue(sc->sc_tq, &sc->sc_bstucktask);
+ return;
+ }
+ if (sc->sc_bmisscount != 0) {
+ DPRINTF(sc, ATH_DEBUG_BEACON,
+ "%s: resume beacon xmit after %u misses\n",
+ __func__, sc->sc_bmisscount);
+ sc->sc_bmisscount = 0;
+ }
+
+ if (sc->sc_stagbeacons) { /* staggered beacons */
+ struct ieee80211com *ic = sc->sc_ifp->if_l2com;
+ uint32_t tsftu;
+
+ tsftu = ath_hal_gettsf32(ah) >> 10;
+ /* XXX lintval */
+ slot = ((tsftu % ic->ic_lintval) * ATH_BCBUF) / ic->ic_lintval;
+ vap = sc->sc_bslot[(slot+1) % ATH_BCBUF];
+ bfaddr = 0;
+ if (vap != NULL && vap->iv_state >= IEEE80211_S_RUN) {
+ bf = ath_beacon_generate(sc, vap);
+ if (bf != NULL)
+ bfaddr = bf->bf_daddr;
+ }
+ } else { /* burst'd beacons */
+ uint32_t *bflink = &bfaddr;
+
+ for (slot = 0; slot < ATH_BCBUF; slot++) {
+ vap = sc->sc_bslot[slot];
+ if (vap != NULL && vap->iv_state >= IEEE80211_S_RUN) {
+ bf = ath_beacon_generate(sc, vap);
+ if (bf != NULL) {
+ *bflink = bf->bf_daddr;
+ bflink = &bf->bf_desc->ds_link;
+ }
+ }
+ }
+ *bflink = 0; /* terminate list */
+ }
+
+ /*
+ * Handle slot time change when a non-ERP station joins/leaves
+ * an 11g network. The 802.11 layer notifies us via callback,
+ * we mark updateslot, then wait one beacon before effecting
+ * the change. This gives associated stations at least one
+ * beacon interval to note the state change.
+ */
+ /* XXX locking */
+ if (sc->sc_updateslot == UPDATE) {
+ sc->sc_updateslot = COMMIT; /* commit next beacon */
+ sc->sc_slotupdate = slot;
+ } else if (sc->sc_updateslot == COMMIT && sc->sc_slotupdate == slot)
+ ath_setslottime(sc); /* commit change to h/w */
+
+ /*
+ * Check recent per-antenna transmit statistics and flip
+ * the default antenna if noticeably more frames went out
+ * on the non-default antenna.
+ * XXX assumes 2 anntenae
+ */
+ if (!sc->sc_diversity && (!sc->sc_stagbeacons || slot == 0)) {
+ otherant = sc->sc_defant & 1 ? 2 : 1;
+ if (sc->sc_ant_tx[otherant] > sc->sc_ant_tx[sc->sc_defant] + 2)
+ ath_setdefantenna(sc, otherant);
+ sc->sc_ant_tx[1] = sc->sc_ant_tx[2] = 0;
+ }
+
+ if (bfaddr != 0) {
+ /*
+ * Stop any current dma and put the new frame on the queue.
+ * This should never fail since we check above that no frames
+ * are still pending on the queue.
+ */
+ if (!ath_hal_stoptxdma(ah, sc->sc_bhalq)) {
+ DPRINTF(sc, ATH_DEBUG_ANY,
+ "%s: beacon queue %u did not stop?\n",
+ __func__, sc->sc_bhalq);
+ }
+ /* NB: cabq traffic should already be queued and primed */
+ ath_hal_puttxbuf(ah, sc->sc_bhalq, bfaddr);
+ ath_hal_txstart(ah, sc->sc_bhalq);
+
+ sc->sc_stats.ast_be_xmit++;
+ }
+}
+
+struct ath_buf *
+ath_beacon_generate(struct ath_softc *sc, struct ieee80211vap *vap)
+{
+ struct ath_vap *avp = ATH_VAP(vap);
+ struct ath_txq *cabq = sc->sc_cabq;
+ struct ath_buf *bf;
+ struct mbuf *m;
+ int nmcastq, error;
+
+ KASSERT(vap->iv_state >= IEEE80211_S_RUN,
+ ("not running, state %d", vap->iv_state));
+ KASSERT(avp->av_bcbuf != NULL, ("no beacon buffer"));
+
+ /*
+ * Update dynamic beacon contents. If this returns
+ * non-zero then we need to remap the memory because
+ * the beacon frame changed size (probably because
+ * of the TIM bitmap).
+ */
+ bf = avp->av_bcbuf;
+ m = bf->bf_m;
+ /* XXX lock mcastq? */
+ nmcastq = avp->av_mcastq.axq_depth;
+
+ if (ieee80211_beacon_update(bf->bf_node, &avp->av_boff, m, nmcastq)) {
+ /* XXX too conservative? */
+ bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
+ error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m,
+ bf->bf_segs, &bf->bf_nseg,
+ BUS_DMA_NOWAIT);
+ if (error != 0) {
+ if_printf(vap->iv_ifp,
+ "%s: bus_dmamap_load_mbuf_sg failed, error %u\n",
+ __func__, error);
+ return NULL;
+ }
+ }
+ if ((avp->av_boff.bo_tim[4] & 1) && cabq->axq_depth) {
+ DPRINTF(sc, ATH_DEBUG_BEACON,
+ "%s: cabq did not drain, mcastq %u cabq %u\n",
+ __func__, nmcastq, cabq->axq_depth);
+ sc->sc_stats.ast_cabq_busy++;
+ if (sc->sc_nvaps > 1 && sc->sc_stagbeacons) {
+ /*
+ * CABQ traffic from a previous vap is still pending.
+ * We must drain the q before this beacon frame goes
+ * out as otherwise this vap's stations will get cab
+ * frames from a different vap.
+ * XXX could be slow causing us to miss DBA
+ */
+ ath_tx_draintxq(sc, cabq);
+ }
+ }
+ ath_beacon_setup(sc, bf);
+ bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE);
+
+ /*
+ * Enable the CAB queue before the beacon queue to
+ * insure cab frames are triggered by this beacon.
+ */
+ if (avp->av_boff.bo_tim[4] & 1) {
+ struct ath_hal *ah = sc->sc_ah;
+
+ /* NB: only at DTIM */
+ ATH_TXQ_LOCK(cabq);
+ ATH_TXQ_LOCK(&avp->av_mcastq);
+ if (nmcastq) {
+ struct ath_buf *bfm;
+
+ /*
+ * Move frames from the s/w mcast q to the h/w cab q.
+ * XXX MORE_DATA bit
+ */
+ bfm = TAILQ_FIRST(&avp->av_mcastq.axq_q);
+ if (cabq->axq_link != NULL) {
+ *cabq->axq_link = bfm->bf_daddr;
+ } else
+ ath_hal_puttxbuf(ah, cabq->axq_qnum,
+ bfm->bf_daddr);
+ ath_txqmove(cabq, &avp->av_mcastq);
+
+ sc->sc_stats.ast_cabq_xmit += nmcastq;
+ }
+ /* NB: gated by beacon so safe to start here */
+ if (! TAILQ_EMPTY(&(cabq->axq_q)))
+ ath_hal_txstart(ah, cabq->axq_qnum);
+ ATH_TXQ_UNLOCK(&avp->av_mcastq);
+ ATH_TXQ_UNLOCK(cabq);
+ }
+ return bf;
+}
+
+void
+ath_beacon_start_adhoc(struct ath_softc *sc, struct ieee80211vap *vap)
+{
+ struct ath_vap *avp = ATH_VAP(vap);
+ struct ath_hal *ah = sc->sc_ah;
+ struct ath_buf *bf;
+ struct mbuf *m;
+ int error;
+
+ KASSERT(avp->av_bcbuf != NULL, ("no beacon buffer"));
+
+ /*
+ * Update dynamic beacon contents. If this returns
+ * non-zero then we need to remap the memory because
+ * the beacon frame changed size (probably because
+ * of the TIM bitmap).
+ */
+ bf = avp->av_bcbuf;
+ m = bf->bf_m;
+ if (ieee80211_beacon_update(bf->bf_node, &avp->av_boff, m, 0)) {
+ /* XXX too conservative? */
+ bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
+ error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m,
+ bf->bf_segs, &bf->bf_nseg,
+ BUS_DMA_NOWAIT);
+ if (error != 0) {
+ if_printf(vap->iv_ifp,
+ "%s: bus_dmamap_load_mbuf_sg failed, error %u\n",
+ __func__, error);
+ return;
+ }
+ }
+ ath_beacon_setup(sc, bf);
+ bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE);
+
+ /* NB: caller is known to have already stopped tx dma */
+ ath_hal_puttxbuf(ah, sc->sc_bhalq, bf->bf_daddr);
+ ath_hal_txstart(ah, sc->sc_bhalq);
+}
+
+/*
+ * Reclaim beacon resources and return buffer to the pool.
+ */
+void
+ath_beacon_return(struct ath_softc *sc, struct ath_buf *bf)
+{
+
+ DPRINTF(sc, ATH_DEBUG_NODE, "%s: free bf=%p, bf_m=%p, bf_node=%p\n",
+ __func__, bf, bf->bf_m, bf->bf_node);
+ if (bf->bf_m != NULL) {
+ bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
+ m_freem(bf->bf_m);
+ bf->bf_m = NULL;
+ }
+ if (bf->bf_node != NULL) {
+ ieee80211_free_node(bf->bf_node);
+ bf->bf_node = NULL;
+ }
+ TAILQ_INSERT_TAIL(&sc->sc_bbuf, bf, bf_list);
+}
+
+/*
+ * Reclaim beacon resources.
+ */
+void
+ath_beacon_free(struct ath_softc *sc)
+{
+ struct ath_buf *bf;
+
+ TAILQ_FOREACH(bf, &sc->sc_bbuf, bf_list) {
+ DPRINTF(sc, ATH_DEBUG_NODE,
+ "%s: free bf=%p, bf_m=%p, bf_node=%p\n",
+ __func__, bf, bf->bf_m, bf->bf_node);
+ if (bf->bf_m != NULL) {
+ bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
+ m_freem(bf->bf_m);
+ bf->bf_m = NULL;
+ }
+ if (bf->bf_node != NULL) {
+ ieee80211_free_node(bf->bf_node);
+ bf->bf_node = NULL;
+ }
+ }
+}
+
+/*
+ * Configure the beacon and sleep timers.
+ *
+ * When operating as an AP this resets the TSF and sets
+ * up the hardware to notify us when we need to issue beacons.
+ *
+ * When operating in station mode this sets up the beacon
+ * timers according to the timestamp of the last received
+ * beacon and the current TSF, configures PCF and DTIM
+ * handling, programs the sleep registers so the hardware
+ * will wakeup in time to receive beacons, and configures
+ * the beacon miss handling so we'll receive a BMISS
+ * interrupt when we stop seeing beacons from the AP
+ * we've associated with.
+ */
+void
+ath_beacon_config(struct ath_softc *sc, struct ieee80211vap *vap)
+{
+#define TSF_TO_TU(_h,_l) \
+ ((((u_int32_t)(_h)) << 22) | (((u_int32_t)(_l)) >> 10))
+#define FUDGE 2
+ struct ath_hal *ah = sc->sc_ah;
+ struct ieee80211com *ic = sc->sc_ifp->if_l2com;
+ struct ieee80211_node *ni;
+ u_int32_t nexttbtt, intval, tsftu;
+ u_int64_t tsf;
+
+ if (vap == NULL)
+ vap = TAILQ_FIRST(&ic->ic_vaps); /* XXX */
+ ni = ieee80211_ref_node(vap->iv_bss);
+
+ /* extract tstamp from last beacon and convert to TU */
+ nexttbtt = TSF_TO_TU(LE_READ_4(ni->ni_tstamp.data + 4),
+ LE_READ_4(ni->ni_tstamp.data));
+ if (ic->ic_opmode == IEEE80211_M_HOSTAP ||
+ ic->ic_opmode == IEEE80211_M_MBSS) {
+ /*
+ * For multi-bss ap/mesh support beacons are either staggered
+ * evenly over N slots or burst together. For the former
+ * arrange for the SWBA to be delivered for each slot.
+ * Slots that are not occupied will generate nothing.
+ */
+ /* NB: the beacon interval is kept internally in TU's */
+ intval = ni->ni_intval & HAL_BEACON_PERIOD;
+ if (sc->sc_stagbeacons)
+ intval /= ATH_BCBUF;
+ } else {
+ /* NB: the beacon interval is kept internally in TU's */
+ intval = ni->ni_intval & HAL_BEACON_PERIOD;
+ }
+ if (nexttbtt == 0) /* e.g. for ap mode */
+ nexttbtt = intval;
+ else if (intval) /* NB: can be 0 for monitor mode */
+ nexttbtt = roundup(nexttbtt, intval);
+ DPRINTF(sc, ATH_DEBUG_BEACON, "%s: nexttbtt %u intval %u (%u)\n",
+ __func__, nexttbtt, intval, ni->ni_intval);
+ if (ic->ic_opmode == IEEE80211_M_STA && !sc->sc_swbmiss) {
+ HAL_BEACON_STATE bs;
+ int dtimperiod, dtimcount;
+ int cfpperiod, cfpcount;
+
+ /*
+ * Setup dtim and cfp parameters according to
+ * last beacon we received (which may be none).
+ */
+ dtimperiod = ni->ni_dtim_period;
+ if (dtimperiod <= 0) /* NB: 0 if not known */
+ dtimperiod = 1;
+ dtimcount = ni->ni_dtim_count;
+ if (dtimcount >= dtimperiod) /* NB: sanity check */
+ dtimcount = 0; /* XXX? */
+ cfpperiod = 1; /* NB: no PCF support yet */
+ cfpcount = 0;
+ /*
+ * Pull nexttbtt forward to reflect the current
+ * TSF and calculate dtim+cfp state for the result.
+ */
+ tsf = ath_hal_gettsf64(ah);
+ tsftu = TSF_TO_TU(tsf>>32, tsf) + FUDGE;
+ do {
+ nexttbtt += intval;
+ if (--dtimcount < 0) {
+ dtimcount = dtimperiod - 1;
+ if (--cfpcount < 0)
+ cfpcount = cfpperiod - 1;
+ }
+ } while (nexttbtt < tsftu);
+ memset(&bs, 0, sizeof(bs));
+ bs.bs_intval = intval;
+ bs.bs_nexttbtt = nexttbtt;
+ bs.bs_dtimperiod = dtimperiod*intval;
+ bs.bs_nextdtim = bs.bs_nexttbtt + dtimcount*intval;
+ bs.bs_cfpperiod = cfpperiod*bs.bs_dtimperiod;
+ bs.bs_cfpnext = bs.bs_nextdtim + cfpcount*bs.bs_dtimperiod;
+ bs.bs_cfpmaxduration = 0;
+#if 0
+ /*
+ * The 802.11 layer records the offset to the DTIM
+ * bitmap while receiving beacons; use it here to
+ * enable h/w detection of our AID being marked in
+ * the bitmap vector (to indicate frames for us are
+ * pending at the AP).
+ * XXX do DTIM handling in s/w to WAR old h/w bugs
+ * XXX enable based on h/w rev for newer chips
+ */
+ bs.bs_timoffset = ni->ni_timoff;
+#endif
+ /*
+ * Calculate the number of consecutive beacons to miss
+ * before taking a BMISS interrupt.
+ * Note that we clamp the result to at most 10 beacons.
+ */
+ bs.bs_bmissthreshold = vap->iv_bmissthreshold;
+ if (bs.bs_bmissthreshold > 10)
+ bs.bs_bmissthreshold = 10;
+ else if (bs.bs_bmissthreshold <= 0)
+ bs.bs_bmissthreshold = 1;
+
+ /*
+ * Calculate sleep duration. The configuration is
+ * given in ms. We insure a multiple of the beacon
+ * period is used. Also, if the sleep duration is
+ * greater than the DTIM period then it makes senses
+ * to make it a multiple of that.
+ *
+ * XXX fixed at 100ms
+ */
+ bs.bs_sleepduration =
+ roundup(IEEE80211_MS_TO_TU(100), bs.bs_intval);
+ if (bs.bs_sleepduration > bs.bs_dtimperiod)
+ bs.bs_sleepduration = roundup(bs.bs_sleepduration, bs.bs_dtimperiod);
+
+ DPRINTF(sc, ATH_DEBUG_BEACON,
+ "%s: tsf %ju tsf:tu %u intval %u nexttbtt %u dtim %u nextdtim %u bmiss %u sleep %u cfp:period %u maxdur %u next %u timoffset %u\n"
+ , __func__
+ , tsf, tsftu
+ , bs.bs_intval
+ , bs.bs_nexttbtt
+ , bs.bs_dtimperiod
+ , bs.bs_nextdtim
+ , bs.bs_bmissthreshold
+ , bs.bs_sleepduration
+ , bs.bs_cfpperiod
+ , bs.bs_cfpmaxduration
+ , bs.bs_cfpnext
+ , bs.bs_timoffset
+ );
+ ath_hal_intrset(ah, 0);
+ ath_hal_beacontimers(ah, &bs);
+ sc->sc_imask |= HAL_INT_BMISS;
+ ath_hal_intrset(ah, sc->sc_imask);
+ } else {
+ ath_hal_intrset(ah, 0);
+ if (nexttbtt == intval)
+ intval |= HAL_BEACON_RESET_TSF;
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ /*
+ * In IBSS mode enable the beacon timers but only
+ * enable SWBA interrupts if we need to manually
+ * prepare beacon frames. Otherwise we use a
+ * self-linked tx descriptor and let the hardware
+ * deal with things.
+ */
+ intval |= HAL_BEACON_ENA;
+ if (!sc->sc_hasveol)
+ sc->sc_imask |= HAL_INT_SWBA;
+ if ((intval & HAL_BEACON_RESET_TSF) == 0) {
+ /*
+ * Pull nexttbtt forward to reflect
+ * the current TSF.
+ */
+ tsf = ath_hal_gettsf64(ah);
+ tsftu = TSF_TO_TU(tsf>>32, tsf) + FUDGE;
+ do {
+ nexttbtt += intval;
+ } while (nexttbtt < tsftu);
+ }
+ ath_beaconq_config(sc);
+ } else if (ic->ic_opmode == IEEE80211_M_HOSTAP ||
+ ic->ic_opmode == IEEE80211_M_MBSS) {
+ /*
+ * In AP/mesh mode we enable the beacon timers
+ * and SWBA interrupts to prepare beacon frames.
+ */
+ intval |= HAL_BEACON_ENA;
+ sc->sc_imask |= HAL_INT_SWBA; /* beacon prepare */
+ ath_beaconq_config(sc);
+ }
+ ath_hal_beaconinit(ah, nexttbtt, intval);
+ sc->sc_bmisscount = 0;
+ ath_hal_intrset(ah, sc->sc_imask);
+ /*
+ * When using a self-linked beacon descriptor in
+ * ibss mode load it once here.
+ */
+ if (ic->ic_opmode == IEEE80211_M_IBSS && sc->sc_hasveol)
+ ath_beacon_start_adhoc(sc, vap);
+ }
+ sc->sc_syncbeacon = 0;
+ ieee80211_free_node(ni);
+#undef FUDGE
+#undef TSF_TO_TU
+}
diff --git a/sys/dev/ath/if_ath_beacon.h b/sys/dev/ath/if_ath_beacon.h
new file mode 100644
index 000000000000..2e279a1c014e
--- /dev/null
+++ b/sys/dev/ath/if_ath_beacon.h
@@ -0,0 +1,51 @@
+/*-
+ * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
+ * 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,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ * redistribution must be conditioned upon including a substantially
+ * similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * 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 NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
+ *
+ * $FreeBSD$
+ */
+#ifndef __IF_ATH_BEACON_H__
+#define __IF_ATH_BEACON_H__
+
+extern int ath_bstuck_threshold;
+
+extern int ath_beaconq_setup(struct ath_hal *ah);
+extern int ath_beaconq_config(struct ath_softc *sc);
+extern void ath_beacon_config(struct ath_softc *sc,
+ struct ieee80211vap *vap);
+extern struct ath_buf * ath_beacon_generate(struct ath_softc *sc,
+ struct ieee80211vap *vap);
+extern int ath_wme_update(struct ieee80211com *ic);
+extern void ath_beacon_update(struct ieee80211vap *vap, int item);
+extern void ath_beacon_start_adhoc(struct ath_softc *sc,
+ struct ieee80211vap *vap);
+extern int ath_beacon_alloc(struct ath_softc *sc, struct ieee80211_node *ni);
+extern void ath_beacon_return(struct ath_softc *sc, struct ath_buf *bf);
+extern void ath_beacon_free(struct ath_softc *sc);
+extern void ath_beacon_proc(void *arg, int pending);
+
+#endif
diff --git a/sys/dev/ath/if_ath_debug.c b/sys/dev/ath/if_ath_debug.c
index b438455a53d8..e96013644f12 100644
--- a/sys/dev/ath/if_ath_debug.c
+++ b/sys/dev/ath/if_ath_debug.c
@@ -89,12 +89,12 @@ __FBSDID("$FreeBSD$");
#ifdef ATH_DEBUG
#include <dev/ath/if_ath_debug.h>
-int ath_debug = 0;
+uint64_t ath_debug = 0;
SYSCTL_DECL(_hw_ath);
-SYSCTL_INT(_hw_ath, OID_AUTO, debug, CTLFLAG_RW, &ath_debug,
+SYSCTL_QUAD(_hw_ath, OID_AUTO, debug, CTLFLAG_RW, &ath_debug,
0, "control debugging printfs");
-TUNABLE_INT("hw.ath.debug", &ath_debug);
+TUNABLE_QUAD("hw.ath.debug", &ath_debug);
void
ath_printrxbuf(struct ath_softc *sc, const struct ath_buf *bf,
diff --git a/sys/dev/ath/if_ath_debug.h b/sys/dev/ath/if_ath_debug.h
index 58199ff39d67..ff514ce148e5 100644
--- a/sys/dev/ath/if_ath_debug.h
+++ b/sys/dev/ath/if_ath_debug.h
@@ -34,39 +34,40 @@
#ifdef ATH_DEBUG
enum {
- ATH_DEBUG_XMIT = 0x00000001, /* basic xmit operation */
- ATH_DEBUG_XMIT_DESC = 0x00000002, /* xmit descriptors */
- ATH_DEBUG_RECV = 0x00000004, /* basic recv operation */
- ATH_DEBUG_RECV_DESC = 0x00000008, /* recv descriptors */
- ATH_DEBUG_RATE = 0x00000010, /* rate control */
- ATH_DEBUG_RESET = 0x00000020, /* reset processing */
- ATH_DEBUG_MODE = 0x00000040, /* mode init/setup */
- ATH_DEBUG_BEACON = 0x00000080, /* beacon handling */
- ATH_DEBUG_WATCHDOG = 0x00000100, /* watchdog timeout */
- ATH_DEBUG_INTR = 0x00001000, /* ISR */
- ATH_DEBUG_TX_PROC = 0x00002000, /* tx ISR proc */
- ATH_DEBUG_RX_PROC = 0x00004000, /* rx ISR proc */
- ATH_DEBUG_BEACON_PROC = 0x00008000, /* beacon ISR proc */
- ATH_DEBUG_CALIBRATE = 0x00010000, /* periodic calibration */
- ATH_DEBUG_KEYCACHE = 0x00020000, /* key cache management */
- ATH_DEBUG_STATE = 0x00040000, /* 802.11 state transitions */
- ATH_DEBUG_NODE = 0x00080000, /* node management */
- ATH_DEBUG_LED = 0x00100000, /* led management */
- ATH_DEBUG_FF = 0x00200000, /* fast frames */
- ATH_DEBUG_DFS = 0x00400000, /* DFS processing */
- ATH_DEBUG_TDMA = 0x00800000, /* TDMA processing */
- ATH_DEBUG_TDMA_TIMER = 0x01000000, /* TDMA timer processing */
- ATH_DEBUG_REGDOMAIN = 0x02000000, /* regulatory processing */
- ATH_DEBUG_SW_TX = 0x04000000, /* per-packet software TX */
- ATH_DEBUG_SW_TX_BAW = 0x08000000, /* BAW handling */
- ATH_DEBUG_SW_TX_CTRL = 0x10000000, /* queue control */
- ATH_DEBUG_SW_TX_AGGR = 0x20000000, /* aggregate TX */
- ATH_DEBUG_SW_TX_RETRIES = 0x40000000, /* software TX retries */
- ATH_DEBUG_FATAL = 0x80000000, /* fatal errors */
- ATH_DEBUG_ANY = 0xffffffff
+ ATH_DEBUG_XMIT = 0x000000001ULL, /* basic xmit operation */
+ ATH_DEBUG_XMIT_DESC = 0x000000002ULL, /* xmit descriptors */
+ ATH_DEBUG_RECV = 0x000000004ULL, /* basic recv operation */
+ ATH_DEBUG_RECV_DESC = 0x000000008ULL, /* recv descriptors */
+ ATH_DEBUG_RATE = 0x000000010ULL, /* rate control */
+ ATH_DEBUG_RESET = 0x000000020ULL, /* reset processing */
+ ATH_DEBUG_MODE = 0x000000040ULL, /* mode init/setup */
+ ATH_DEBUG_BEACON = 0x000000080ULL, /* beacon handling */
+ ATH_DEBUG_WATCHDOG = 0x000000100ULL, /* watchdog timeout */
+ ATH_DEBUG_INTR = 0x000001000ULL, /* ISR */
+ ATH_DEBUG_TX_PROC = 0x000002000ULL, /* tx ISR proc */
+ ATH_DEBUG_RX_PROC = 0x000004000ULL, /* rx ISR proc */
+ ATH_DEBUG_BEACON_PROC = 0x000008000ULL, /* beacon ISR proc */
+ ATH_DEBUG_CALIBRATE = 0x000010000ULL, /* periodic calibration */
+ ATH_DEBUG_KEYCACHE = 0x000020000ULL, /* key cache management */
+ ATH_DEBUG_STATE = 0x000040000ULL, /* 802.11 state transitions */
+ ATH_DEBUG_NODE = 0x000080000ULL, /* node management */
+ ATH_DEBUG_LED = 0x000100000ULL, /* led management */
+ ATH_DEBUG_FF = 0x000200000ULL, /* fast frames */
+ ATH_DEBUG_DFS = 0x000400000ULL, /* DFS processing */
+ ATH_DEBUG_TDMA = 0x000800000ULL, /* TDMA processing */
+ ATH_DEBUG_TDMA_TIMER = 0x001000000ULL, /* TDMA timer processing */
+ ATH_DEBUG_REGDOMAIN = 0x002000000ULL, /* regulatory processing */
+ ATH_DEBUG_SW_TX = 0x004000000ULL, /* per-packet software TX */
+ ATH_DEBUG_SW_TX_BAW = 0x008000000ULL, /* BAW handling */
+ ATH_DEBUG_SW_TX_CTRL = 0x010000000ULL, /* queue control */
+ ATH_DEBUG_SW_TX_AGGR = 0x020000000ULL, /* aggregate TX */
+ ATH_DEBUG_SW_TX_RETRIES = 0x040000000ULL, /* software TX retries */
+ ATH_DEBUG_FATAL = 0x080000000ULL, /* fatal errors */
+ ATH_DEBUG_SW_TX_BAR = 0x100000000ULL, /* BAR TX */
+ ATH_DEBUG_ANY = 0xffffffffffffffffULL
};
-extern int ath_debug;
+extern uint64_t ath_debug;
#define IFF_DUMPPKTS(sc, m) \
((sc->sc_debug & (m)) || \
diff --git a/sys/dev/ath/if_ath_misc.h b/sys/dev/ath/if_ath_misc.h
index c48590edac4b..0b3f38acb0c8 100644
--- a/sys/dev/ath/if_ath_misc.h
+++ b/sys/dev/ath/if_ath_misc.h
@@ -67,4 +67,22 @@ extern void ath_tx_update_ratectrl(struct ath_softc *sc,
extern void ath_tx_freebuf(struct ath_softc *sc, struct ath_buf *bf,
int status);
+extern void ath_txqmove(struct ath_txq *dst, struct ath_txq *src);
+
+extern void ath_mode_init(struct ath_softc *sc);
+
+extern void ath_setdefantenna(struct ath_softc *sc, u_int antenna);
+
+extern void ath_setslottime(struct ath_softc *sc);
+
+/*
+ * This is only here so that the RX proc function can call it.
+ * It's very likely that the "start TX after RX" call should be
+ * done via something in if_ath.c, moving "rx tasklet" into
+ * if_ath.c and do the ath_start() call there. Once that's done,
+ * we can kill this.
+ */
+extern void ath_start(struct ifnet *ifp);
+
+
#endif
diff --git a/sys/dev/ath/if_ath_rx.c b/sys/dev/ath/if_ath_rx.c
new file mode 100644
index 000000000000..3b26c2e6a503
--- /dev/null
+++ b/sys/dev/ath/if_ath_rx.c
@@ -0,0 +1,990 @@
+/*-
+ * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
+ * 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,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ * redistribution must be conditioned upon including a substantially
+ * similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * 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 NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Driver for the Atheros Wireless LAN controller.
+ *
+ * This software is derived from work of Atsushi Onoe; his contribution
+ * is greatly appreciated.
+ */
+
+#include "opt_inet.h"
+#include "opt_ath.h"
+/*
+ * This is needed for register operations which are performed
+ * by the driver - eg, calls to ath_hal_gettsf32().
+ *
+ * It's also required for any AH_DEBUG checks in here, eg the
+ * module dependencies.
+ */
+#include "opt_ah.h"
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/sysctl.h>
+#include <sys/mbuf.h>
+#include <sys/malloc.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/sockio.h>
+#include <sys/errno.h>
+#include <sys/callout.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/kthread.h>
+#include <sys/taskqueue.h>
+#include <sys/priv.h>
+#include <sys/module.h>
+#include <sys/ktr.h>
+#include <sys/smp.h> /* for mp_ncpus */
+
+#include <machine/bus.h>
+
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#include <net/if_types.h>
+#include <net/if_arp.h>
+#include <net/ethernet.h>
+#include <net/if_llc.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_regdomain.h>
+#ifdef IEEE80211_SUPPORT_SUPERG
+#include <net80211/ieee80211_superg.h>
+#endif
+#ifdef IEEE80211_SUPPORT_TDMA
+#include <net80211/ieee80211_tdma.h>
+#endif
+
+#include <net/bpf.h>
+
+#ifdef INET
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+#endif
+
+#include <dev/ath/if_athvar.h>
+#include <dev/ath/ath_hal/ah_devid.h> /* XXX for softled */
+#include <dev/ath/ath_hal/ah_diagcodes.h>
+
+#include <dev/ath/if_ath_debug.h>
+#include <dev/ath/if_ath_misc.h>
+#include <dev/ath/if_ath_tsf.h>
+#include <dev/ath/if_ath_tx.h>
+#include <dev/ath/if_ath_sysctl.h>
+#include <dev/ath/if_ath_led.h>
+#include <dev/ath/if_ath_keycache.h>
+#include <dev/ath/if_ath_rx.h>
+#include <dev/ath/if_ath_beacon.h>
+#include <dev/ath/if_athdfs.h>
+
+#ifdef ATH_TX99_DIAG
+#include <dev/ath/ath_tx99/ath_tx99.h>
+#endif
+
+#define ATH_KTR_INTR KTR_SPARE4
+#define ATH_KTR_ERR KTR_SPARE3
+
+/*
+ * Calculate the receive filter according to the
+ * operating mode and state:
+ *
+ * o always accept unicast, broadcast, and multicast traffic
+ * o accept PHY error frames when hardware doesn't have MIB support
+ * to count and we need them for ANI (sta mode only until recently)
+ * and we are not scanning (ANI is disabled)
+ * NB: older hal's add rx filter bits out of sight and we need to
+ * blindly preserve them
+ * o probe request frames are accepted only when operating in
+ * hostap, adhoc, mesh, or monitor modes
+ * o enable promiscuous mode
+ * - when in monitor mode
+ * - if interface marked PROMISC (assumes bridge setting is filtered)
+ * o accept beacons:
+ * - when operating in station mode for collecting rssi data when
+ * the station is otherwise quiet, or
+ * - when operating in adhoc mode so the 802.11 layer creates
+ * node table entries for peers,
+ * - when scanning
+ * - when doing s/w beacon miss (e.g. for ap+sta)
+ * - when operating in ap mode in 11g to detect overlapping bss that
+ * require protection
+ * - when operating in mesh mode to detect neighbors
+ * o accept control frames:
+ * - when in monitor mode
+ * XXX HT protection for 11n
+ */
+u_int32_t
+ath_calcrxfilter(struct ath_softc *sc)
+{
+ struct ifnet *ifp = sc->sc_ifp;
+ struct ieee80211com *ic = ifp->if_l2com;
+ u_int32_t rfilt;
+
+ rfilt = HAL_RX_FILTER_UCAST | HAL_RX_FILTER_BCAST | HAL_RX_FILTER_MCAST;
+ if (!sc->sc_needmib && !sc->sc_scanning)
+ rfilt |= HAL_RX_FILTER_PHYERR;
+ if (ic->ic_opmode != IEEE80211_M_STA)
+ rfilt |= HAL_RX_FILTER_PROBEREQ;
+ /* XXX ic->ic_monvaps != 0? */
+ if (ic->ic_opmode == IEEE80211_M_MONITOR || (ifp->if_flags & IFF_PROMISC))
+ rfilt |= HAL_RX_FILTER_PROM;
+ if (ic->ic_opmode == IEEE80211_M_STA ||
+ ic->ic_opmode == IEEE80211_M_IBSS ||
+ sc->sc_swbmiss || sc->sc_scanning)
+ rfilt |= HAL_RX_FILTER_BEACON;
+ /*
+ * NB: We don't recalculate the rx filter when
+ * ic_protmode changes; otherwise we could do
+ * this only when ic_protmode != NONE.
+ */
+ if (ic->ic_opmode == IEEE80211_M_HOSTAP &&
+ IEEE80211_IS_CHAN_ANYG(ic->ic_curchan))
+ rfilt |= HAL_RX_FILTER_BEACON;
+
+ /*
+ * Enable hardware PS-POLL RX only for hostap mode;
+ * STA mode sends PS-POLL frames but never
+ * receives them.
+ */
+ if (ath_hal_getcapability(sc->sc_ah, HAL_CAP_PSPOLL,
+ 0, NULL) == HAL_OK &&
+ ic->ic_opmode == IEEE80211_M_HOSTAP)
+ rfilt |= HAL_RX_FILTER_PSPOLL;
+
+ if (sc->sc_nmeshvaps) {
+ rfilt |= HAL_RX_FILTER_BEACON;
+ if (sc->sc_hasbmatch)
+ rfilt |= HAL_RX_FILTER_BSSID;
+ else
+ rfilt |= HAL_RX_FILTER_PROM;
+ }
+ if (ic->ic_opmode == IEEE80211_M_MONITOR)
+ rfilt |= HAL_RX_FILTER_CONTROL;
+
+ /*
+ * Enable RX of compressed BAR frames only when doing
+ * 802.11n. Required for A-MPDU.
+ */
+ if (IEEE80211_IS_CHAN_HT(ic->ic_curchan))
+ rfilt |= HAL_RX_FILTER_COMPBAR;
+
+ /*
+ * Enable radar PHY errors if requested by the
+ * DFS module.
+ */
+ if (sc->sc_dodfs)
+ rfilt |= HAL_RX_FILTER_PHYRADAR;
+
+ DPRINTF(sc, ATH_DEBUG_MODE, "%s: RX filter 0x%x, %s if_flags 0x%x\n",
+ __func__, rfilt, ieee80211_opmode_name[ic->ic_opmode], ifp->if_flags);
+ return rfilt;
+}
+
+int
+ath_rxbuf_init(struct ath_softc *sc, struct ath_buf *bf)
+{
+ struct ath_hal *ah = sc->sc_ah;
+ int error;
+ struct mbuf *m;
+ struct ath_desc *ds;
+
+ m = bf->bf_m;
+ if (m == NULL) {
+ /*
+ * NB: by assigning a page to the rx dma buffer we
+ * implicitly satisfy the Atheros requirement that
+ * this buffer be cache-line-aligned and sized to be
+ * multiple of the cache line size. Not doing this
+ * causes weird stuff to happen (for the 5210 at least).
+ */
+ m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
+ if (m == NULL) {
+ DPRINTF(sc, ATH_DEBUG_ANY,
+ "%s: no mbuf/cluster\n", __func__);
+ sc->sc_stats.ast_rx_nombuf++;
+ return ENOMEM;
+ }
+ m->m_pkthdr.len = m->m_len = m->m_ext.ext_size;
+
+ error = bus_dmamap_load_mbuf_sg(sc->sc_dmat,
+ bf->bf_dmamap, m,
+ bf->bf_segs, &bf->bf_nseg,
+ BUS_DMA_NOWAIT);
+ if (error != 0) {
+ DPRINTF(sc, ATH_DEBUG_ANY,
+ "%s: bus_dmamap_load_mbuf_sg failed; error %d\n",
+ __func__, error);
+ sc->sc_stats.ast_rx_busdma++;
+ m_freem(m);
+ return error;
+ }
+ KASSERT(bf->bf_nseg == 1,
+ ("multi-segment packet; nseg %u", bf->bf_nseg));
+ bf->bf_m = m;
+ }
+ bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREREAD);
+
+ /*
+ * Setup descriptors. For receive we always terminate
+ * the descriptor list with a self-linked entry so we'll
+ * not get overrun under high load (as can happen with a
+ * 5212 when ANI processing enables PHY error frames).
+ *
+ * To insure the last descriptor is self-linked we create
+ * each descriptor as self-linked and add it to the end. As
+ * each additional descriptor is added the previous self-linked
+ * entry is ``fixed'' naturally. This should be safe even
+ * if DMA is happening. When processing RX interrupts we
+ * never remove/process the last, self-linked, entry on the
+ * descriptor list. This insures the hardware always has
+ * someplace to write a new frame.
+ */
+ /*
+ * 11N: we can no longer afford to self link the last descriptor.
+ * MAC acknowledges BA status as long as it copies frames to host
+ * buffer (or rx fifo). This can incorrectly acknowledge packets
+ * to a sender if last desc is self-linked.
+ */
+ ds = bf->bf_desc;
+ if (sc->sc_rxslink)
+ ds->ds_link = bf->bf_daddr; /* link to self */
+ else
+ ds->ds_link = 0; /* terminate the list */
+ ds->ds_data = bf->bf_segs[0].ds_addr;
+ ath_hal_setuprxdesc(ah, ds
+ , m->m_len /* buffer size */
+ , 0
+ );
+
+ if (sc->sc_rxlink != NULL)
+ *sc->sc_rxlink = bf->bf_daddr;
+ sc->sc_rxlink = &ds->ds_link;
+ return 0;
+}
+
+/*
+ * Intercept management frames to collect beacon rssi data
+ * and to do ibss merges.
+ */
+void
+ath_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m,
+ int subtype, int rssi, int nf)
+{
+ struct ieee80211vap *vap = ni->ni_vap;
+ struct ath_softc *sc = vap->iv_ic->ic_ifp->if_softc;
+
+ /*
+ * Call up first so subsequent work can use information
+ * potentially stored in the node (e.g. for ibss merge).
+ */
+ ATH_VAP(vap)->av_recv_mgmt(ni, m, subtype, rssi, nf);
+ switch (subtype) {
+ case IEEE80211_FC0_SUBTYPE_BEACON:
+ /* update rssi statistics for use by the hal */
+ /* XXX unlocked check against vap->iv_bss? */
+ ATH_RSSI_LPF(sc->sc_halstats.ns_avgbrssi, rssi);
+ if (sc->sc_syncbeacon &&
+ ni == vap->iv_bss && vap->iv_state == IEEE80211_S_RUN) {
+ /*
+ * Resync beacon timers using the tsf of the beacon
+ * frame we just received.
+ */
+ ath_beacon_config(sc, vap);
+ }
+ /* fall thru... */
+ case IEEE80211_FC0_SUBTYPE_PROBE_RESP:
+ if (vap->iv_opmode == IEEE80211_M_IBSS &&
+ vap->iv_state == IEEE80211_S_RUN) {
+ uint32_t rstamp = sc->sc_lastrs->rs_tstamp;
+ uint64_t tsf = ath_extend_tsf(sc, rstamp,
+ ath_hal_gettsf64(sc->sc_ah));
+ /*
+ * Handle ibss merge as needed; check the tsf on the
+ * frame before attempting the merge. The 802.11 spec
+ * says the station should change it's bssid to match
+ * the oldest station with the same ssid, where oldest
+ * is determined by the tsf. Note that hardware
+ * reconfiguration happens through callback to
+ * ath_newstate as the state machine will go from
+ * RUN -> RUN when this happens.
+ */
+ if (le64toh(ni->ni_tstamp.tsf) >= tsf) {
+ DPRINTF(sc, ATH_DEBUG_STATE,
+ "ibss merge, rstamp %u tsf %ju "
+ "tstamp %ju\n", rstamp, (uintmax_t)tsf,
+ (uintmax_t)ni->ni_tstamp.tsf);
+ (void) ieee80211_ibss_merge(ni);
+ }
+ }
+ break;
+ }
+}
+
+static void
+ath_rx_tap(struct ifnet *ifp, struct mbuf *m,
+ const struct ath_rx_status *rs, u_int64_t tsf, int16_t nf)
+{
+#define CHAN_HT20 htole32(IEEE80211_CHAN_HT20)
+#define CHAN_HT40U htole32(IEEE80211_CHAN_HT40U)
+#define CHAN_HT40D htole32(IEEE80211_CHAN_HT40D)
+#define CHAN_HT (CHAN_HT20|CHAN_HT40U|CHAN_HT40D)
+ struct ath_softc *sc = ifp->if_softc;
+ const HAL_RATE_TABLE *rt;
+ uint8_t rix;
+
+ rt = sc->sc_currates;
+ KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode));
+ rix = rt->rateCodeToIndex[rs->rs_rate];
+ sc->sc_rx_th.wr_rate = sc->sc_hwmap[rix].ieeerate;
+ sc->sc_rx_th.wr_flags = sc->sc_hwmap[rix].rxflags;
+#ifdef AH_SUPPORT_AR5416
+ sc->sc_rx_th.wr_chan_flags &= ~CHAN_HT;
+ if (sc->sc_rx_th.wr_rate & IEEE80211_RATE_MCS) { /* HT rate */
+ struct ieee80211com *ic = ifp->if_l2com;
+
+ if ((rs->rs_flags & HAL_RX_2040) == 0)
+ sc->sc_rx_th.wr_chan_flags |= CHAN_HT20;
+ else if (IEEE80211_IS_CHAN_HT40U(ic->ic_curchan))
+ sc->sc_rx_th.wr_chan_flags |= CHAN_HT40U;
+ else
+ sc->sc_rx_th.wr_chan_flags |= CHAN_HT40D;
+ if ((rs->rs_flags & HAL_RX_GI) == 0)
+ sc->sc_rx_th.wr_flags |= IEEE80211_RADIOTAP_F_SHORTGI;
+ }
+#endif
+ sc->sc_rx_th.wr_tsf = htole64(ath_extend_tsf(sc, rs->rs_tstamp, tsf));
+ if (rs->rs_status & HAL_RXERR_CRC)
+ sc->sc_rx_th.wr_flags |= IEEE80211_RADIOTAP_F_BADFCS;
+ /* XXX propagate other error flags from descriptor */
+ sc->sc_rx_th.wr_antnoise = nf;
+ sc->sc_rx_th.wr_antsignal = nf + rs->rs_rssi;
+ sc->sc_rx_th.wr_antenna = rs->rs_antenna;
+#undef CHAN_HT
+#undef CHAN_HT20
+#undef CHAN_HT40U
+#undef CHAN_HT40D
+}
+
+static void
+ath_handle_micerror(struct ieee80211com *ic,
+ struct ieee80211_frame *wh, int keyix)
+{
+ struct ieee80211_node *ni;
+
+ /* XXX recheck MIC to deal w/ chips that lie */
+ /* XXX discard MIC errors on !data frames */
+ ni = ieee80211_find_rxnode(ic, (const struct ieee80211_frame_min *) wh);
+ if (ni != NULL) {
+ ieee80211_notify_michael_failure(ni->ni_vap, wh, keyix);
+ ieee80211_free_node(ni);
+ }
+}
+
+/*
+ * Only run the RX proc if it's not already running.
+ * Since this may get run as part of the reset/flush path,
+ * the task can't clash with an existing, running tasklet.
+ */
+void
+ath_rx_tasklet(void *arg, int npending)
+{
+ struct ath_softc *sc = arg;
+
+ CTR1(ATH_KTR_INTR, "ath_rx_proc: pending=%d", npending);
+ DPRINTF(sc, ATH_DEBUG_RX_PROC, "%s: pending %u\n", __func__, npending);
+ ATH_PCU_LOCK(sc);
+ if (sc->sc_inreset_cnt > 0) {
+ device_printf(sc->sc_dev,
+ "%s: sc_inreset_cnt > 0; skipping\n", __func__);
+ ATH_PCU_UNLOCK(sc);
+ return;
+ }
+ ATH_PCU_UNLOCK(sc);
+ ath_rx_proc(sc, 1);
+}
+
+static int
+ath_rx_pkt(struct ath_softc *sc, struct ath_rx_status *rs, HAL_STATUS status,
+ uint64_t tsf, int nf, struct ath_buf *bf)
+{
+ struct ath_hal *ah = sc->sc_ah;
+ struct mbuf *m = bf->bf_m;
+ uint64_t rstamp;
+ int len, type;
+ struct ifnet *ifp = sc->sc_ifp;
+ struct ieee80211com *ic = ifp->if_l2com;
+ struct ieee80211_node *ni;
+ int is_good = 0;
+
+ /*
+ * Calculate the correct 64 bit TSF given
+ * the TSF64 register value and rs_tstamp.
+ */
+ rstamp = ath_extend_tsf(sc, rs->rs_tstamp, tsf);
+
+ /* These aren't specifically errors */
+#ifdef AH_SUPPORT_AR5416
+ if (rs->rs_flags & HAL_RX_GI)
+ sc->sc_stats.ast_rx_halfgi++;
+ if (rs->rs_flags & HAL_RX_2040)
+ sc->sc_stats.ast_rx_2040++;
+ if (rs->rs_flags & HAL_RX_DELIM_CRC_PRE)
+ sc->sc_stats.ast_rx_pre_crc_err++;
+ if (rs->rs_flags & HAL_RX_DELIM_CRC_POST)
+ sc->sc_stats.ast_rx_post_crc_err++;
+ if (rs->rs_flags & HAL_RX_DECRYPT_BUSY)
+ sc->sc_stats.ast_rx_decrypt_busy_err++;
+ if (rs->rs_flags & HAL_RX_HI_RX_CHAIN)
+ sc->sc_stats.ast_rx_hi_rx_chain++;
+#endif /* AH_SUPPORT_AR5416 */
+
+ if (rs->rs_status != 0) {
+ if (rs->rs_status & HAL_RXERR_CRC)
+ sc->sc_stats.ast_rx_crcerr++;
+ if (rs->rs_status & HAL_RXERR_FIFO)
+ sc->sc_stats.ast_rx_fifoerr++;
+ if (rs->rs_status & HAL_RXERR_PHY) {
+ sc->sc_stats.ast_rx_phyerr++;
+ /* Process DFS radar events */
+ if ((rs->rs_phyerr == HAL_PHYERR_RADAR) ||
+ (rs->rs_phyerr == HAL_PHYERR_FALSE_RADAR_EXT)) {
+ /* Since we're touching the frame data, sync it */
+ bus_dmamap_sync(sc->sc_dmat,
+ bf->bf_dmamap,
+ BUS_DMASYNC_POSTREAD);
+ /* Now pass it to the radar processing code */
+ ath_dfs_process_phy_err(sc, mtod(m, char *), rstamp, rs);
+ }
+
+ /* Be suitably paranoid about receiving phy errors out of the stats array bounds */
+ if (rs->rs_phyerr < 64)
+ sc->sc_stats.ast_rx_phy[rs->rs_phyerr]++;
+ goto rx_error; /* NB: don't count in ierrors */
+ }
+ if (rs->rs_status & HAL_RXERR_DECRYPT) {
+ /*
+ * Decrypt error. If the error occurred
+ * because there was no hardware key, then
+ * let the frame through so the upper layers
+ * can process it. This is necessary for 5210
+ * parts which have no way to setup a ``clear''
+ * key cache entry.
+ *
+ * XXX do key cache faulting
+ */
+ if (rs->rs_keyix == HAL_RXKEYIX_INVALID)
+ goto rx_accept;
+ sc->sc_stats.ast_rx_badcrypt++;
+ }
+ if (rs->rs_status & HAL_RXERR_MIC) {
+ sc->sc_stats.ast_rx_badmic++;
+ /*
+ * Do minimal work required to hand off
+ * the 802.11 header for notification.
+ */
+ /* XXX frag's and qos frames */
+ len = rs->rs_datalen;
+ if (len >= sizeof (struct ieee80211_frame)) {
+ bus_dmamap_sync(sc->sc_dmat,
+ bf->bf_dmamap,
+ BUS_DMASYNC_POSTREAD);
+ ath_handle_micerror(ic,
+ mtod(m, struct ieee80211_frame *),
+ sc->sc_splitmic ?
+ rs->rs_keyix-32 : rs->rs_keyix);
+ }
+ }
+ ifp->if_ierrors++;
+rx_error:
+ /*
+ * Cleanup any pending partial frame.
+ */
+ if (sc->sc_rxpending != NULL) {
+ m_freem(sc->sc_rxpending);
+ sc->sc_rxpending = NULL;
+ }
+ /*
+ * When a tap is present pass error frames
+ * that have been requested. By default we
+ * pass decrypt+mic errors but others may be
+ * interesting (e.g. crc).
+ */
+ if (ieee80211_radiotap_active(ic) &&
+ (rs->rs_status & sc->sc_monpass)) {
+ bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap,
+ BUS_DMASYNC_POSTREAD);
+ /* NB: bpf needs the mbuf length setup */
+ len = rs->rs_datalen;
+ m->m_pkthdr.len = m->m_len = len;
+ bf->bf_m = NULL;
+ ath_rx_tap(ifp, m, rs, rstamp, nf);
+ ieee80211_radiotap_rx_all(ic, m);
+ m_freem(m);
+ }
+ /* XXX pass MIC errors up for s/w reclaculation */
+ goto rx_next;
+ }
+rx_accept:
+ /*
+ * Sync and unmap the frame. At this point we're
+ * committed to passing the mbuf somewhere so clear
+ * bf_m; this means a new mbuf must be allocated
+ * when the rx descriptor is setup again to receive
+ * another frame.
+ */
+ bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_POSTREAD);
+ bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
+ bf->bf_m = NULL;
+
+ len = rs->rs_datalen;
+ m->m_len = len;
+
+ if (rs->rs_more) {
+ /*
+ * Frame spans multiple descriptors; save
+ * it for the next completed descriptor, it
+ * will be used to construct a jumbogram.
+ */
+ if (sc->sc_rxpending != NULL) {
+ /* NB: max frame size is currently 2 clusters */
+ sc->sc_stats.ast_rx_toobig++;
+ m_freem(sc->sc_rxpending);
+ }
+ m->m_pkthdr.rcvif = ifp;
+ m->m_pkthdr.len = len;
+ sc->sc_rxpending = m;
+ goto rx_next;
+ } else if (sc->sc_rxpending != NULL) {
+ /*
+ * This is the second part of a jumbogram,
+ * chain it to the first mbuf, adjust the
+ * frame length, and clear the rxpending state.
+ */
+ sc->sc_rxpending->m_next = m;
+ sc->sc_rxpending->m_pkthdr.len += len;
+ m = sc->sc_rxpending;
+ sc->sc_rxpending = NULL;
+ } else {
+ /*
+ * Normal single-descriptor receive; setup
+ * the rcvif and packet length.
+ */
+ m->m_pkthdr.rcvif = ifp;
+ m->m_pkthdr.len = len;
+ }
+
+ /*
+ * Validate rs->rs_antenna.
+ *
+ * Some users w/ AR9285 NICs have reported crashes
+ * here because rs_antenna field is bogusly large.
+ * Let's enforce the maximum antenna limit of 8
+ * (and it shouldn't be hard coded, but that's a
+ * separate problem) and if there's an issue, print
+ * out an error and adjust rs_antenna to something
+ * sensible.
+ *
+ * This code should be removed once the actual
+ * root cause of the issue has been identified.
+ * For example, it may be that the rs_antenna
+ * field is only valid for the lsat frame of
+ * an aggregate and it just happens that it is
+ * "mostly" right. (This is a general statement -
+ * the majority of the statistics are only valid
+ * for the last frame in an aggregate.
+ */
+ if (rs->rs_antenna > 7) {
+ device_printf(sc->sc_dev, "%s: rs_antenna > 7 (%d)\n",
+ __func__, rs->rs_antenna);
+#ifdef ATH_DEBUG
+ ath_printrxbuf(sc, bf, 0, status == HAL_OK);
+#endif /* ATH_DEBUG */
+ rs->rs_antenna = 0; /* XXX better than nothing */
+ }
+
+ ifp->if_ipackets++;
+ sc->sc_stats.ast_ant_rx[rs->rs_antenna]++;
+
+ /*
+ * Populate the rx status block. When there are bpf
+ * listeners we do the additional work to provide
+ * complete status. Otherwise we fill in only the
+ * material required by ieee80211_input. Note that
+ * noise setting is filled in above.
+ */
+ if (ieee80211_radiotap_active(ic))
+ ath_rx_tap(ifp, m, rs, rstamp, nf);
+
+ /*
+ * From this point on we assume the frame is at least
+ * as large as ieee80211_frame_min; verify that.
+ */
+ if (len < IEEE80211_MIN_LEN) {
+ if (!ieee80211_radiotap_active(ic)) {
+ DPRINTF(sc, ATH_DEBUG_RECV,
+ "%s: short packet %d\n", __func__, len);
+ sc->sc_stats.ast_rx_tooshort++;
+ } else {
+ /* NB: in particular this captures ack's */
+ ieee80211_radiotap_rx_all(ic, m);
+ }
+ m_freem(m);
+ goto rx_next;
+ }
+
+ if (IFF_DUMPPKTS(sc, ATH_DEBUG_RECV)) {
+ const HAL_RATE_TABLE *rt = sc->sc_currates;
+ uint8_t rix = rt->rateCodeToIndex[rs->rs_rate];
+
+ ieee80211_dump_pkt(ic, mtod(m, caddr_t), len,
+ sc->sc_hwmap[rix].ieeerate, rs->rs_rssi);
+ }
+
+ m_adj(m, -IEEE80211_CRC_LEN);
+
+ /*
+ * Locate the node for sender, track state, and then
+ * pass the (referenced) node up to the 802.11 layer
+ * for its use.
+ */
+ ni = ieee80211_find_rxnode_withkey(ic,
+ mtod(m, const struct ieee80211_frame_min *),
+ rs->rs_keyix == HAL_RXKEYIX_INVALID ?
+ IEEE80211_KEYIX_NONE : rs->rs_keyix);
+ sc->sc_lastrs = rs;
+
+#ifdef AH_SUPPORT_AR5416
+ if (rs->rs_isaggr)
+ sc->sc_stats.ast_rx_agg++;
+#endif /* AH_SUPPORT_AR5416 */
+
+ if (ni != NULL) {
+ /*
+ * Only punt packets for ampdu reorder processing for
+ * 11n nodes; net80211 enforces that M_AMPDU is only
+ * set for 11n nodes.
+ */
+ if (ni->ni_flags & IEEE80211_NODE_HT)
+ m->m_flags |= M_AMPDU;
+
+ /*
+ * Sending station is known, dispatch directly.
+ */
+ type = ieee80211_input(ni, m, rs->rs_rssi, nf);
+ ieee80211_free_node(ni);
+ /*
+ * Arrange to update the last rx timestamp only for
+ * frames from our ap when operating in station mode.
+ * This assumes the rx key is always setup when
+ * associated.
+ */
+ if (ic->ic_opmode == IEEE80211_M_STA &&
+ rs->rs_keyix != HAL_RXKEYIX_INVALID)
+ is_good = 1;
+ } else {
+ type = ieee80211_input_all(ic, m, rs->rs_rssi, nf);
+ }
+ /*
+ * Track rx rssi and do any rx antenna management.
+ */
+ ATH_RSSI_LPF(sc->sc_halstats.ns_avgrssi, rs->rs_rssi);
+ if (sc->sc_diversity) {
+ /*
+ * When using fast diversity, change the default rx
+ * antenna if diversity chooses the other antenna 3
+ * times in a row.
+ */
+ if (sc->sc_defant != rs->rs_antenna) {
+ if (++sc->sc_rxotherant >= 3)
+ ath_setdefantenna(sc, rs->rs_antenna);
+ } else
+ sc->sc_rxotherant = 0;
+ }
+
+ /* Newer school diversity - kite specific for now */
+ /* XXX perhaps migrate the normal diversity code to this? */
+ if ((ah)->ah_rxAntCombDiversity)
+ (*(ah)->ah_rxAntCombDiversity)(ah, rs, ticks, hz);
+
+ if (sc->sc_softled) {
+ /*
+ * Blink for any data frame. Otherwise do a
+ * heartbeat-style blink when idle. The latter
+ * is mainly for station mode where we depend on
+ * periodic beacon frames to trigger the poll event.
+ */
+ if (type == IEEE80211_FC0_TYPE_DATA) {
+ const HAL_RATE_TABLE *rt = sc->sc_currates;
+ ath_led_event(sc,
+ rt->rateCodeToIndex[rs->rs_rate]);
+ } else if (ticks - sc->sc_ledevent >= sc->sc_ledidle)
+ ath_led_event(sc, 0);
+ }
+rx_next:
+ return (is_good);
+}
+
+void
+ath_rx_proc(struct ath_softc *sc, int resched)
+{
+#define PA2DESC(_sc, _pa) \
+ ((struct ath_desc *)((caddr_t)(_sc)->sc_rxdma.dd_desc + \
+ ((_pa) - (_sc)->sc_rxdma.dd_desc_paddr)))
+ struct ath_buf *bf;
+ struct ifnet *ifp = sc->sc_ifp;
+ struct ath_hal *ah = sc->sc_ah;
+#ifdef IEEE80211_SUPPORT_SUPERG
+ struct ieee80211com *ic = ifp->if_l2com;
+#endif
+ struct ath_desc *ds;
+ struct ath_rx_status *rs;
+ struct mbuf *m;
+ int ngood;
+ HAL_STATUS status;
+ int16_t nf;
+ u_int64_t tsf;
+ int npkts = 0;
+
+ /* XXX we must not hold the ATH_LOCK here */
+ ATH_UNLOCK_ASSERT(sc);
+ ATH_PCU_UNLOCK_ASSERT(sc);
+
+ ATH_PCU_LOCK(sc);
+ sc->sc_rxproc_cnt++;
+ ATH_PCU_UNLOCK(sc);
+
+ DPRINTF(sc, ATH_DEBUG_RX_PROC, "%s: called\n", __func__);
+ ngood = 0;
+ nf = ath_hal_getchannoise(ah, sc->sc_curchan);
+ sc->sc_stats.ast_rx_noise = nf;
+ tsf = ath_hal_gettsf64(ah);
+ do {
+ bf = TAILQ_FIRST(&sc->sc_rxbuf);
+ if (sc->sc_rxslink && bf == NULL) { /* NB: shouldn't happen */
+ if_printf(ifp, "%s: no buffer!\n", __func__);
+ break;
+ } else if (bf == NULL) {
+ /*
+ * End of List:
+ * this can happen for non-self-linked RX chains
+ */
+ sc->sc_stats.ast_rx_hitqueueend++;
+ break;
+ }
+ m = bf->bf_m;
+ if (m == NULL) { /* NB: shouldn't happen */
+ /*
+ * If mbuf allocation failed previously there
+ * will be no mbuf; try again to re-populate it.
+ */
+ /* XXX make debug msg */
+ if_printf(ifp, "%s: no mbuf!\n", __func__);
+ TAILQ_REMOVE(&sc->sc_rxbuf, bf, bf_list);
+ goto rx_proc_next;
+ }
+ ds = bf->bf_desc;
+ if (ds->ds_link == bf->bf_daddr) {
+ /* NB: never process the self-linked entry at the end */
+ sc->sc_stats.ast_rx_hitqueueend++;
+ break;
+ }
+ /* XXX sync descriptor memory */
+ /*
+ * Must provide the virtual address of the current
+ * descriptor, the physical address, and the virtual
+ * address of the next descriptor in the h/w chain.
+ * This allows the HAL to look ahead to see if the
+ * hardware is done with a descriptor by checking the
+ * done bit in the following descriptor and the address
+ * of the current descriptor the DMA engine is working
+ * on. All this is necessary because of our use of
+ * a self-linked list to avoid rx overruns.
+ */
+ rs = &bf->bf_status.ds_rxstat;
+ status = ath_hal_rxprocdesc(ah, ds,
+ bf->bf_daddr, PA2DESC(sc, ds->ds_link), rs);
+#ifdef ATH_DEBUG
+ if (sc->sc_debug & ATH_DEBUG_RECV_DESC)
+ ath_printrxbuf(sc, bf, 0, status == HAL_OK);
+#endif
+ if (status == HAL_EINPROGRESS)
+ break;
+
+ TAILQ_REMOVE(&sc->sc_rxbuf, bf, bf_list);
+ npkts++;
+
+ /*
+ * Process a single frame.
+ */
+ if (ath_rx_pkt(sc, rs, status, tsf, nf, bf))
+ ngood++;
+rx_proc_next:
+ TAILQ_INSERT_TAIL(&sc->sc_rxbuf, bf, bf_list);
+ } while (ath_rxbuf_init(sc, bf) == 0);
+
+ /* rx signal state monitoring */
+ ath_hal_rxmonitor(ah, &sc->sc_halstats, sc->sc_curchan);
+ if (ngood)
+ sc->sc_lastrx = tsf;
+
+ CTR2(ATH_KTR_INTR, "ath_rx_proc: npkts=%d, ngood=%d", npkts, ngood);
+ /* Queue DFS tasklet if needed */
+ if (resched && ath_dfs_tasklet_needed(sc, sc->sc_curchan))
+ taskqueue_enqueue(sc->sc_tq, &sc->sc_dfstask);
+
+ /*
+ * Now that all the RX frames were handled that
+ * need to be handled, kick the PCU if there's
+ * been an RXEOL condition.
+ */
+ ATH_PCU_LOCK(sc);
+ if (resched && sc->sc_kickpcu) {
+ CTR0(ATH_KTR_ERR, "ath_rx_proc: kickpcu");
+ device_printf(sc->sc_dev, "%s: kickpcu; handled %d packets\n",
+ __func__, npkts);
+
+ /* XXX rxslink? */
+ /*
+ * XXX can we hold the PCU lock here?
+ * Are there any net80211 buffer calls involved?
+ */
+ bf = TAILQ_FIRST(&sc->sc_rxbuf);
+ ath_hal_putrxbuf(ah, bf->bf_daddr);
+ ath_hal_rxena(ah); /* enable recv descriptors */
+ ath_mode_init(sc); /* set filters, etc. */
+ ath_hal_startpcurecv(ah); /* re-enable PCU/DMA engine */
+
+ ath_hal_intrset(ah, sc->sc_imask);
+ sc->sc_kickpcu = 0;
+ }
+ ATH_PCU_UNLOCK(sc);
+
+ /* XXX check this inside of IF_LOCK? */
+ if (resched && (ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0) {
+#ifdef IEEE80211_SUPPORT_SUPERG
+ ieee80211_ff_age_all(ic, 100);
+#endif
+ if (!IFQ_IS_EMPTY(&ifp->if_snd))
+ ath_start(ifp);
+ }
+#undef PA2DESC
+
+ ATH_PCU_LOCK(sc);
+ sc->sc_rxproc_cnt--;
+ ATH_PCU_UNLOCK(sc);
+}
+
+/*
+ * Disable the receive h/w in preparation for a reset.
+ */
+void
+ath_stoprecv(struct ath_softc *sc, int dodelay)
+{
+#define PA2DESC(_sc, _pa) \
+ ((struct ath_desc *)((caddr_t)(_sc)->sc_rxdma.dd_desc + \
+ ((_pa) - (_sc)->sc_rxdma.dd_desc_paddr)))
+ struct ath_hal *ah = sc->sc_ah;
+
+ ath_hal_stoppcurecv(ah); /* disable PCU */
+ ath_hal_setrxfilter(ah, 0); /* clear recv filter */
+ ath_hal_stopdmarecv(ah); /* disable DMA engine */
+ /*
+ * TODO: see if this particular DELAY() is required; it may be
+ * masking some missing FIFO flush or DMA sync.
+ */
+#if 0
+ if (dodelay)
+#endif
+ DELAY(3000); /* 3ms is long enough for 1 frame */
+#ifdef ATH_DEBUG
+ if (sc->sc_debug & (ATH_DEBUG_RESET | ATH_DEBUG_FATAL)) {
+ struct ath_buf *bf;
+ u_int ix;
+
+ device_printf(sc->sc_dev,
+ "%s: rx queue %p, link %p\n",
+ __func__,
+ (caddr_t)(uintptr_t) ath_hal_getrxbuf(ah),
+ sc->sc_rxlink);
+ ix = 0;
+ TAILQ_FOREACH(bf, &sc->sc_rxbuf, bf_list) {
+ struct ath_desc *ds = bf->bf_desc;
+ struct ath_rx_status *rs = &bf->bf_status.ds_rxstat;
+ HAL_STATUS status = ath_hal_rxprocdesc(ah, ds,
+ bf->bf_daddr, PA2DESC(sc, ds->ds_link), rs);
+ if (status == HAL_OK || (sc->sc_debug & ATH_DEBUG_FATAL))
+ ath_printrxbuf(sc, bf, ix, status == HAL_OK);
+ ix++;
+ }
+ }
+#endif
+ if (sc->sc_rxpending != NULL) {
+ m_freem(sc->sc_rxpending);
+ sc->sc_rxpending = NULL;
+ }
+ sc->sc_rxlink = NULL; /* just in case */
+#undef PA2DESC
+}
+
+/*
+ * Enable the receive h/w following a reset.
+ */
+int
+ath_startrecv(struct ath_softc *sc)
+{
+ struct ath_hal *ah = sc->sc_ah;
+ struct ath_buf *bf;
+
+ sc->sc_rxlink = NULL;
+ sc->sc_rxpending = NULL;
+ TAILQ_FOREACH(bf, &sc->sc_rxbuf, bf_list) {
+ int error = ath_rxbuf_init(sc, bf);
+ if (error != 0) {
+ DPRINTF(sc, ATH_DEBUG_RECV,
+ "%s: ath_rxbuf_init failed %d\n",
+ __func__, error);
+ return error;
+ }
+ }
+
+ bf = TAILQ_FIRST(&sc->sc_rxbuf);
+ ath_hal_putrxbuf(ah, bf->bf_daddr);
+ ath_hal_rxena(ah); /* enable recv descriptors */
+ ath_mode_init(sc); /* set filters, etc. */
+ ath_hal_startpcurecv(ah); /* re-enable PCU/DMA engine */
+ return 0;
+}
diff --git a/sys/dev/ath/if_ath_rx.h b/sys/dev/ath/if_ath_rx.h
new file mode 100644
index 000000000000..d3bd4306a4c2
--- /dev/null
+++ b/sys/dev/ath/if_ath_rx.h
@@ -0,0 +1,43 @@
+/*-
+ * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
+ * 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,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ * redistribution must be conditioned upon including a substantially
+ * similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * 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 NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
+ *
+ * $FreeBSD$
+ */
+#ifndef __IF_ATH_RX_H__
+#define __IF_ATH_RX_H__
+
+extern u_int32_t ath_calcrxfilter(struct ath_softc *sc);
+extern int ath_rxbuf_init(struct ath_softc *sc, struct ath_buf *bf);
+extern void ath_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m,
+ int subtype, int rssi, int nf);
+extern void ath_rx_tasklet(void *arg, int npending);
+extern void ath_rx_proc(struct ath_softc *sc, int resched);
+extern void ath_stoprecv(struct ath_softc *sc, int dodelay);
+extern int ath_startrecv(struct ath_softc *sc);
+
+#endif
diff --git a/sys/dev/ath/if_ath_sysctl.c b/sys/dev/ath/if_ath_sysctl.c
index 6e7c2c8024c4..86e84ae1ee91 100644
--- a/sys/dev/ath/if_ath_sysctl.c
+++ b/sys/dev/ath/if_ath_sysctl.c
@@ -501,8 +501,8 @@ ath_sysctlattach(struct ath_softc *sc)
"regdomain", CTLFLAG_RD, &sc->sc_eerd, 0,
"EEPROM regdomain code");
#ifdef ATH_DEBUG
- SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
- "debug", CTLFLAG_RW, &sc->sc_debug, 0,
+ SYSCTL_ADD_QUAD(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
+ "debug", CTLFLAG_RW, &sc->sc_debug,
"control debugging printfs");
#endif
SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
diff --git a/sys/dev/ath/if_ath_tdma.c b/sys/dev/ath/if_ath_tdma.c
new file mode 100644
index 000000000000..1d04ccd91c36
--- /dev/null
+++ b/sys/dev/ath/if_ath_tdma.c
@@ -0,0 +1,476 @@
+/*-
+ * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
+ * 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,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ * redistribution must be conditioned upon including a substantially
+ * similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * 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 NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Driver for the Atheros Wireless LAN controller.
+ *
+ * This software is derived from work of Atsushi Onoe; his contribution
+ * is greatly appreciated.
+ */
+
+#include "opt_inet.h"
+#include "opt_ath.h"
+/*
+ * This is needed for register operations which are performed
+ * by the driver - eg, calls to ath_hal_gettsf32().
+ *
+ * It's also required for any AH_DEBUG checks in here, eg the
+ * module dependencies.
+ */
+#include "opt_ah.h"
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/sysctl.h>
+#include <sys/mbuf.h>
+#include <sys/malloc.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/sockio.h>
+#include <sys/errno.h>
+#include <sys/callout.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/kthread.h>
+#include <sys/taskqueue.h>
+#include <sys/priv.h>
+#include <sys/module.h>
+#include <sys/ktr.h>
+#include <sys/smp.h> /* for mp_ncpus */
+
+#include <machine/bus.h>
+
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#include <net/if_types.h>
+#include <net/if_arp.h>
+#include <net/ethernet.h>
+#include <net/if_llc.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_regdomain.h>
+#ifdef IEEE80211_SUPPORT_SUPERG
+#include <net80211/ieee80211_superg.h>
+#endif
+#ifdef IEEE80211_SUPPORT_TDMA
+#include <net80211/ieee80211_tdma.h>
+#endif
+
+#include <net/bpf.h>
+
+#ifdef INET
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+#endif
+
+#include <dev/ath/if_athvar.h>
+#include <dev/ath/ath_hal/ah_devid.h> /* XXX for softled */
+#include <dev/ath/ath_hal/ah_diagcodes.h>
+
+#include <dev/ath/if_ath_debug.h>
+#include <dev/ath/if_ath_misc.h>
+#include <dev/ath/if_ath_tsf.h>
+#include <dev/ath/if_ath_tx.h>
+#include <dev/ath/if_ath_sysctl.h>
+#include <dev/ath/if_ath_led.h>
+#include <dev/ath/if_ath_keycache.h>
+#include <dev/ath/if_ath_rx.h>
+#include <dev/ath/if_ath_beacon.h>
+#include <dev/ath/if_athdfs.h>
+
+#ifdef ATH_TX99_DIAG
+#include <dev/ath/ath_tx99/ath_tx99.h>
+#endif
+
+#ifdef IEEE80211_SUPPORT_TDMA
+#include <dev/ath/if_ath_tdma.h>
+
+static void ath_tdma_settimers(struct ath_softc *sc, u_int32_t nexttbtt,
+ u_int32_t bintval);
+static void ath_tdma_bintvalsetup(struct ath_softc *sc,
+ const struct ieee80211_tdma_state *tdma);
+#endif /* IEEE80211_SUPPORT_TDMA */
+
+#ifdef IEEE80211_SUPPORT_TDMA
+static void
+ath_tdma_settimers(struct ath_softc *sc, u_int32_t nexttbtt, u_int32_t bintval)
+{
+ struct ath_hal *ah = sc->sc_ah;
+ HAL_BEACON_TIMERS bt;
+
+ bt.bt_intval = bintval | HAL_BEACON_ENA;
+ bt.bt_nexttbtt = nexttbtt;
+ bt.bt_nextdba = (nexttbtt<<3) - sc->sc_tdmadbaprep;
+ bt.bt_nextswba = (nexttbtt<<3) - sc->sc_tdmaswbaprep;
+ bt.bt_nextatim = nexttbtt+1;
+ /* Enables TBTT, DBA, SWBA timers by default */
+ bt.bt_flags = 0;
+ ath_hal_beaconsettimers(ah, &bt);
+}
+
+/*
+ * Calculate the beacon interval. This is periodic in the
+ * superframe for the bss. We assume each station is configured
+ * identically wrt transmit rate so the guard time we calculate
+ * above will be the same on all stations. Note we need to
+ * factor in the xmit time because the hardware will schedule
+ * a frame for transmit if the start of the frame is within
+ * the burst time. When we get hardware that properly kills
+ * frames in the PCU we can reduce/eliminate the guard time.
+ *
+ * Roundup to 1024 is so we have 1 TU buffer in the guard time
+ * to deal with the granularity of the nexttbtt timer. 11n MAC's
+ * with 1us timer granularity should allow us to reduce/eliminate
+ * this.
+ */
+static void
+ath_tdma_bintvalsetup(struct ath_softc *sc,
+ const struct ieee80211_tdma_state *tdma)
+{
+ /* copy from vap state (XXX check all vaps have same value?) */
+ sc->sc_tdmaslotlen = tdma->tdma_slotlen;
+
+ sc->sc_tdmabintval = roundup((sc->sc_tdmaslotlen+sc->sc_tdmaguard) *
+ tdma->tdma_slotcnt, 1024);
+ sc->sc_tdmabintval >>= 10; /* TSF -> TU */
+ if (sc->sc_tdmabintval & 1)
+ sc->sc_tdmabintval++;
+
+ if (tdma->tdma_slot == 0) {
+ /*
+ * Only slot 0 beacons; other slots respond.
+ */
+ sc->sc_imask |= HAL_INT_SWBA;
+ sc->sc_tdmaswba = 0; /* beacon immediately */
+ } else {
+ /* XXX all vaps must be slot 0 or slot !0 */
+ sc->sc_imask &= ~HAL_INT_SWBA;
+ }
+}
+
+/*
+ * Max 802.11 overhead. This assumes no 4-address frames and
+ * the encapsulation done by ieee80211_encap (llc). We also
+ * include potential crypto overhead.
+ */
+#define IEEE80211_MAXOVERHEAD \
+ (sizeof(struct ieee80211_qosframe) \
+ + sizeof(struct llc) \
+ + IEEE80211_ADDR_LEN \
+ + IEEE80211_WEP_IVLEN \
+ + IEEE80211_WEP_KIDLEN \
+ + IEEE80211_WEP_CRCLEN \
+ + IEEE80211_WEP_MICLEN \
+ + IEEE80211_CRC_LEN)
+
+/*
+ * Setup initially for tdma operation. Start the beacon
+ * timers and enable SWBA if we are slot 0. Otherwise
+ * we wait for slot 0 to arrive so we can sync up before
+ * starting to transmit.
+ */
+void
+ath_tdma_config(struct ath_softc *sc, struct ieee80211vap *vap)
+{
+ struct ath_hal *ah = sc->sc_ah;
+ struct ifnet *ifp = sc->sc_ifp;
+ struct ieee80211com *ic = ifp->if_l2com;
+ const struct ieee80211_txparam *tp;
+ const struct ieee80211_tdma_state *tdma = NULL;
+ int rix;
+
+ if (vap == NULL) {
+ vap = TAILQ_FIRST(&ic->ic_vaps); /* XXX */
+ if (vap == NULL) {
+ if_printf(ifp, "%s: no vaps?\n", __func__);
+ return;
+ }
+ }
+ /* XXX should take a locked ref to iv_bss */
+ tp = vap->iv_bss->ni_txparms;
+ /*
+ * Calculate the guard time for each slot. This is the
+ * time to send a maximal-size frame according to the
+ * fixed/lowest transmit rate. Note that the interface
+ * mtu does not include the 802.11 overhead so we must
+ * tack that on (ath_hal_computetxtime includes the
+ * preamble and plcp in it's calculation).
+ */
+ tdma = vap->iv_tdma;
+ if (tp->ucastrate != IEEE80211_FIXED_RATE_NONE)
+ rix = ath_tx_findrix(sc, tp->ucastrate);
+ else
+ rix = ath_tx_findrix(sc, tp->mcastrate);
+ /* XXX short preamble assumed */
+ sc->sc_tdmaguard = ath_hal_computetxtime(ah, sc->sc_currates,
+ ifp->if_mtu + IEEE80211_MAXOVERHEAD, rix, AH_TRUE);
+
+ ath_hal_intrset(ah, 0);
+
+ ath_beaconq_config(sc); /* setup h/w beacon q */
+ if (sc->sc_setcca)
+ ath_hal_setcca(ah, AH_FALSE); /* disable CCA */
+ ath_tdma_bintvalsetup(sc, tdma); /* calculate beacon interval */
+ ath_tdma_settimers(sc, sc->sc_tdmabintval,
+ sc->sc_tdmabintval | HAL_BEACON_RESET_TSF);
+ sc->sc_syncbeacon = 0;
+
+ sc->sc_avgtsfdeltap = TDMA_DUMMY_MARKER;
+ sc->sc_avgtsfdeltam = TDMA_DUMMY_MARKER;
+
+ ath_hal_intrset(ah, sc->sc_imask);
+
+ DPRINTF(sc, ATH_DEBUG_TDMA, "%s: slot %u len %uus cnt %u "
+ "bsched %u guard %uus bintval %u TU dba prep %u\n", __func__,
+ tdma->tdma_slot, tdma->tdma_slotlen, tdma->tdma_slotcnt,
+ tdma->tdma_bintval, sc->sc_tdmaguard, sc->sc_tdmabintval,
+ sc->sc_tdmadbaprep);
+}
+
+/*
+ * Update tdma operation. Called from the 802.11 layer
+ * when a beacon is received from the TDMA station operating
+ * in the slot immediately preceding us in the bss. Use
+ * the rx timestamp for the beacon frame to update our
+ * beacon timers so we follow their schedule. Note that
+ * by using the rx timestamp we implicitly include the
+ * propagation delay in our schedule.
+ */
+void
+ath_tdma_update(struct ieee80211_node *ni,
+ const struct ieee80211_tdma_param *tdma, int changed)
+{
+#define TSF_TO_TU(_h,_l) \
+ ((((u_int32_t)(_h)) << 22) | (((u_int32_t)(_l)) >> 10))
+#define TU_TO_TSF(_tu) (((u_int64_t)(_tu)) << 10)
+ struct ieee80211vap *vap = ni->ni_vap;
+ struct ieee80211com *ic = ni->ni_ic;
+ struct ath_softc *sc = ic->ic_ifp->if_softc;
+ struct ath_hal *ah = sc->sc_ah;
+ const HAL_RATE_TABLE *rt = sc->sc_currates;
+ u_int64_t tsf, rstamp, nextslot, nexttbtt;
+ u_int32_t txtime, nextslottu;
+ int32_t tudelta, tsfdelta;
+ const struct ath_rx_status *rs;
+ int rix;
+
+ sc->sc_stats.ast_tdma_update++;
+
+ /*
+ * Check for and adopt configuration changes.
+ */
+ if (changed != 0) {
+ const struct ieee80211_tdma_state *ts = vap->iv_tdma;
+
+ ath_tdma_bintvalsetup(sc, ts);
+ if (changed & TDMA_UPDATE_SLOTLEN)
+ ath_wme_update(ic);
+
+ DPRINTF(sc, ATH_DEBUG_TDMA,
+ "%s: adopt slot %u slotcnt %u slotlen %u us "
+ "bintval %u TU\n", __func__,
+ ts->tdma_slot, ts->tdma_slotcnt, ts->tdma_slotlen,
+ sc->sc_tdmabintval);
+
+ /* XXX right? */
+ ath_hal_intrset(ah, sc->sc_imask);
+ /* NB: beacon timers programmed below */
+ }
+
+ /* extend rx timestamp to 64 bits */
+ rs = sc->sc_lastrs;
+ tsf = ath_hal_gettsf64(ah);
+ rstamp = ath_extend_tsf(sc, rs->rs_tstamp, tsf);
+ /*
+ * The rx timestamp is set by the hardware on completing
+ * reception (at the point where the rx descriptor is DMA'd
+ * to the host). To find the start of our next slot we
+ * must adjust this time by the time required to send
+ * the packet just received.
+ */
+ rix = rt->rateCodeToIndex[rs->rs_rate];
+ txtime = ath_hal_computetxtime(ah, rt, rs->rs_datalen, rix,
+ rt->info[rix].shortPreamble);
+ /* NB: << 9 is to cvt to TU and /2 */
+ nextslot = (rstamp - txtime) + (sc->sc_tdmabintval << 9);
+ nextslottu = TSF_TO_TU(nextslot>>32, nextslot) & HAL_BEACON_PERIOD;
+
+ /*
+ * Retrieve the hardware NextTBTT in usecs
+ * and calculate the difference between what the
+ * other station thinks and what we have programmed. This
+ * lets us figure how to adjust our timers to match. The
+ * adjustments are done by pulling the TSF forward and possibly
+ * rewriting the beacon timers.
+ */
+ nexttbtt = ath_hal_getnexttbtt(ah);
+ tsfdelta = (int32_t)((nextslot % TU_TO_TSF(HAL_BEACON_PERIOD + 1)) - nexttbtt);
+
+ DPRINTF(sc, ATH_DEBUG_TDMA_TIMER,
+ "tsfdelta %d avg +%d/-%d\n", tsfdelta,
+ TDMA_AVG(sc->sc_avgtsfdeltap), TDMA_AVG(sc->sc_avgtsfdeltam));
+
+ if (tsfdelta < 0) {
+ TDMA_SAMPLE(sc->sc_avgtsfdeltap, 0);
+ TDMA_SAMPLE(sc->sc_avgtsfdeltam, -tsfdelta);
+ tsfdelta = -tsfdelta % 1024;
+ nextslottu++;
+ } else if (tsfdelta > 0) {
+ TDMA_SAMPLE(sc->sc_avgtsfdeltap, tsfdelta);
+ TDMA_SAMPLE(sc->sc_avgtsfdeltam, 0);
+ tsfdelta = 1024 - (tsfdelta % 1024);
+ nextslottu++;
+ } else {
+ TDMA_SAMPLE(sc->sc_avgtsfdeltap, 0);
+ TDMA_SAMPLE(sc->sc_avgtsfdeltam, 0);
+ }
+ tudelta = nextslottu - TSF_TO_TU(nexttbtt >> 32, nexttbtt);
+
+ /*
+ * Copy sender's timetstamp into tdma ie so they can
+ * calculate roundtrip time. We submit a beacon frame
+ * below after any timer adjustment. The frame goes out
+ * at the next TBTT so the sender can calculate the
+ * roundtrip by inspecting the tdma ie in our beacon frame.
+ *
+ * NB: This tstamp is subtlely preserved when
+ * IEEE80211_BEACON_TDMA is marked (e.g. when the
+ * slot position changes) because ieee80211_add_tdma
+ * skips over the data.
+ */
+ memcpy(ATH_VAP(vap)->av_boff.bo_tdma +
+ __offsetof(struct ieee80211_tdma_param, tdma_tstamp),
+ &ni->ni_tstamp.data, 8);
+#if 0
+ DPRINTF(sc, ATH_DEBUG_TDMA_TIMER,
+ "tsf %llu nextslot %llu (%d, %d) nextslottu %u nexttbtt %llu (%d)\n",
+ (unsigned long long) tsf, (unsigned long long) nextslot,
+ (int)(nextslot - tsf), tsfdelta, nextslottu, nexttbtt, tudelta);
+#endif
+ /*
+ * Adjust the beacon timers only when pulling them forward
+ * or when going back by less than the beacon interval.
+ * Negative jumps larger than the beacon interval seem to
+ * cause the timers to stop and generally cause instability.
+ * This basically filters out jumps due to missed beacons.
+ */
+ if (tudelta != 0 && (tudelta > 0 || -tudelta < sc->sc_tdmabintval)) {
+ ath_tdma_settimers(sc, nextslottu, sc->sc_tdmabintval);
+ sc->sc_stats.ast_tdma_timers++;
+ }
+ if (tsfdelta > 0) {
+ ath_hal_adjusttsf(ah, tsfdelta);
+ sc->sc_stats.ast_tdma_tsf++;
+ }
+ ath_tdma_beacon_send(sc, vap); /* prepare response */
+#undef TU_TO_TSF
+#undef TSF_TO_TU
+}
+
+/*
+ * Transmit a beacon frame at SWBA. Dynamic updates
+ * to the frame contents are done as needed.
+ */
+void
+ath_tdma_beacon_send(struct ath_softc *sc, struct ieee80211vap *vap)
+{
+ struct ath_hal *ah = sc->sc_ah;
+ struct ath_buf *bf;
+ int otherant;
+
+ /*
+ * Check if the previous beacon has gone out. If
+ * not don't try to post another, skip this period
+ * and wait for the next. Missed beacons indicate
+ * a problem and should not occur. If we miss too
+ * many consecutive beacons reset the device.
+ */
+ if (ath_hal_numtxpending(ah, sc->sc_bhalq) != 0) {
+ sc->sc_bmisscount++;
+ DPRINTF(sc, ATH_DEBUG_BEACON,
+ "%s: missed %u consecutive beacons\n",
+ __func__, sc->sc_bmisscount);
+ if (sc->sc_bmisscount >= ath_bstuck_threshold)
+ taskqueue_enqueue(sc->sc_tq, &sc->sc_bstucktask);
+ return;
+ }
+ if (sc->sc_bmisscount != 0) {
+ DPRINTF(sc, ATH_DEBUG_BEACON,
+ "%s: resume beacon xmit after %u misses\n",
+ __func__, sc->sc_bmisscount);
+ sc->sc_bmisscount = 0;
+ }
+
+ /*
+ * Check recent per-antenna transmit statistics and flip
+ * the default antenna if noticeably more frames went out
+ * on the non-default antenna.
+ * XXX assumes 2 anntenae
+ */
+ if (!sc->sc_diversity) {
+ otherant = sc->sc_defant & 1 ? 2 : 1;
+ if (sc->sc_ant_tx[otherant] > sc->sc_ant_tx[sc->sc_defant] + 2)
+ ath_setdefantenna(sc, otherant);
+ sc->sc_ant_tx[1] = sc->sc_ant_tx[2] = 0;
+ }
+
+ bf = ath_beacon_generate(sc, vap);
+ if (bf != NULL) {
+ /*
+ * Stop any current dma and put the new frame on the queue.
+ * This should never fail since we check above that no frames
+ * are still pending on the queue.
+ */
+ if (!ath_hal_stoptxdma(ah, sc->sc_bhalq)) {
+ DPRINTF(sc, ATH_DEBUG_ANY,
+ "%s: beacon queue %u did not stop?\n",
+ __func__, sc->sc_bhalq);
+ /* NB: the HAL still stops DMA, so proceed */
+ }
+ ath_hal_puttxbuf(ah, sc->sc_bhalq, bf->bf_daddr);
+ ath_hal_txstart(ah, sc->sc_bhalq);
+
+ sc->sc_stats.ast_be_xmit++; /* XXX per-vap? */
+
+ /*
+ * Record local TSF for our last send for use
+ * in arbitrating slot collisions.
+ */
+ /* XXX should take a locked ref to iv_bss */
+ vap->iv_bss->ni_tstamp.tsf = ath_hal_gettsf64(ah);
+ }
+}
+#endif /* IEEE80211_SUPPORT_TDMA */
diff --git a/sys/dev/ath/if_ath_tdma.h b/sys/dev/ath/if_ath_tdma.h
new file mode 100644
index 000000000000..1e90a5f29744
--- /dev/null
+++ b/sys/dev/ath/if_ath_tdma.h
@@ -0,0 +1,55 @@
+/*-
+ * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
+ * 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,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ * redistribution must be conditioned upon including a substantially
+ * similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * 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 NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
+ *
+ * $FreeBSD$
+ */
+#ifndef __IF_ATH_TDMA_H__
+#define __IF_ATH_TDMA_H__
+
+#define TDMA_EP_MULTIPLIER (1<<10) /* pow2 to optimize out * and / */
+#define TDMA_LPF_LEN 6
+#define TDMA_DUMMY_MARKER 0x127
+#define TDMA_EP_MUL(x, mul) ((x) * (mul))
+#define TDMA_IN(x) (TDMA_EP_MUL((x), TDMA_EP_MULTIPLIER))
+#define TDMA_LPF(x, y, len) \
+ ((x != TDMA_DUMMY_MARKER) ? (((x) * ((len)-1) + (y)) / (len)) : (y))
+#define TDMA_SAMPLE(x, y) do { \
+ x = TDMA_LPF((x), TDMA_IN(y), TDMA_LPF_LEN); \
+} while (0)
+#define TDMA_EP_RND(x,mul) \
+ ((((x)%(mul)) >= ((mul)/2)) ? \
+ ((x) + ((mul) - 1)) / (mul) : (x)/(mul))
+#define TDMA_AVG(x) TDMA_EP_RND(x, TDMA_EP_MULTIPLIER)
+
+extern void ath_tdma_config(struct ath_softc *sc, struct ieee80211vap *vap);
+extern void ath_tdma_update(struct ieee80211_node *ni,
+ const struct ieee80211_tdma_param *tdma, int changed);
+extern void ath_tdma_beacon_send(struct ath_softc *sc,
+ struct ieee80211vap *vap);
+
+#endif
diff --git a/sys/dev/ath/if_ath_tsf.h b/sys/dev/ath/if_ath_tsf.h
new file mode 100644
index 000000000000..cce089fab846
--- /dev/null
+++ b/sys/dev/ath/if_ath_tsf.h
@@ -0,0 +1,81 @@
+/*-
+ * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
+ * 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,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ * redistribution must be conditioned upon including a substantially
+ * similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * 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 NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
+ *
+ * $FreeBSD$
+ */
+#ifndef __IF_ATH_TSF_H__
+#define __IF_ATH_TSF_H__
+
+/*
+ * Extend 15-bit time stamp from rx descriptor to
+ * a full 64-bit TSF using the specified TSF.
+ */
+static __inline u_int64_t
+ath_extend_tsf15(u_int32_t rstamp, u_int64_t tsf)
+{
+ if ((tsf & 0x7fff) < rstamp)
+ tsf -= 0x8000;
+
+ return ((tsf &~ 0x7fff) | rstamp);
+}
+
+/*
+ * Extend 32-bit time stamp from rx descriptor to
+ * a full 64-bit TSF using the specified TSF.
+ */
+static __inline u_int64_t
+ath_extend_tsf32(u_int32_t rstamp, u_int64_t tsf)
+{
+ u_int32_t tsf_low = tsf & 0xffffffff;
+ u_int64_t tsf64 = (tsf & ~0xffffffffULL) | rstamp;
+
+ if (rstamp > tsf_low && (rstamp - tsf_low > 0x10000000))
+ tsf64 -= 0x100000000ULL;
+
+ if (rstamp < tsf_low && (tsf_low - rstamp > 0x10000000))
+ tsf64 += 0x100000000ULL;
+
+ return tsf64;
+}
+
+/*
+ * Extend the TSF from the RX descriptor to a full 64 bit TSF.
+ * Earlier hardware versions only wrote the low 15 bits of the
+ * TSF into the RX descriptor; later versions (AR5416 and up)
+ * include the 32 bit TSF value.
+ */
+static __inline u_int64_t
+ath_extend_tsf(struct ath_softc *sc, u_int32_t rstamp, u_int64_t tsf)
+{
+ if (sc->sc_rxtsf32)
+ return ath_extend_tsf32(rstamp, tsf);
+ else
+ return ath_extend_tsf15(rstamp, tsf);
+}
+
+#endif
diff --git a/sys/dev/ath/if_ath_tx.c b/sys/dev/ath/if_ath_tx.c
index 1e011f166cf1..c188e452939f 100644
--- a/sys/dev/ath/if_ath_tx.c
+++ b/sys/dev/ath/if_ath_tx.c
@@ -1298,6 +1298,18 @@ ath_tx_normal_setup(struct ath_softc *sc, struct ieee80211_node *ni,
return EIO;
}
+ /* Check if the TXQ wouldn't match what the hardware TXQ is! */
+ if (txq != sc->sc_ac2q[pri]) {
+ device_printf(sc->sc_dev,
+ "%s: txq=%p (%d), pri=%d, pri txq=%p (%d)\n",
+ __func__,
+ txq,
+ txq->axq_qnum,
+ pri,
+ sc->sc_ac2q[pri],
+ sc->sc_ac2q[pri]->axq_qnum);
+ }
+
/*
* Calculate miscellaneous flags.
*/
@@ -1568,21 +1580,21 @@ ath_tx_start(struct ath_softc *sc, struct ieee80211_node *ni,
* reached.)
*/
if (txq == &avp->av_mcastq) {
- DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
+ DPRINTF(sc, ATH_DEBUG_SW_TX,
"%s: bf=%p: mcastq: TX'ing\n", __func__, bf);
ATH_TXQ_LOCK(txq);
ath_tx_xmit_normal(sc, txq, bf);
ATH_TXQ_UNLOCK(txq);
} else if (type == IEEE80211_FC0_TYPE_CTL &&
subtype == IEEE80211_FC0_SUBTYPE_BAR) {
- DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
+ DPRINTF(sc, ATH_DEBUG_SW_TX,
"%s: BAR: TX'ing direct\n", __func__);
ATH_TXQ_LOCK(txq);
ath_tx_xmit_normal(sc, txq, bf);
ATH_TXQ_UNLOCK(txq);
} else {
/* add to software queue */
- DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
+ DPRINTF(sc, ATH_DEBUG_SW_TX,
"%s: bf=%p: swq: TX'ing\n", __func__, bf);
ath_tx_swq(sc, ni, txq, bf);
}
@@ -2673,10 +2685,12 @@ ath_tx_tid_bar_suspend(struct ath_softc *sc, struct ath_tid *tid)
{
ATH_TXQ_LOCK_ASSERT(sc->sc_ac2q[tid->ac]);
- DPRINTF(sc, ATH_DEBUG_SW_TX_BAW,
- "%s: tid=%p, called\n",
+ DPRINTF(sc, ATH_DEBUG_SW_TX_BAR,
+ "%s: tid=%p, bar_wait=%d, bar_tx=%d, called\n",
__func__,
- tid);
+ tid,
+ tid->bar_wait,
+ tid->bar_tx);
/* We shouldn't be called when bar_tx is 1 */
if (tid->bar_tx) {
@@ -2704,7 +2718,7 @@ ath_tx_tid_bar_unsuspend(struct ath_softc *sc, struct ath_tid *tid)
{
ATH_TXQ_LOCK_ASSERT(sc->sc_ac2q[tid->ac]);
- DPRINTF(sc, ATH_DEBUG_SW_TX_BAW,
+ DPRINTF(sc, ATH_DEBUG_SW_TX_BAR,
"%s: tid=%p, called\n",
__func__,
tid);
@@ -2732,6 +2746,9 @@ ath_tx_tid_bar_tx_ready(struct ath_softc *sc, struct ath_tid *tid)
if (tid->bar_wait == 0 || tid->hwq_depth > 0)
return (0);
+ DPRINTF(sc, ATH_DEBUG_SW_TX_BAR, "%s: tid=%p (%d), bar ready\n",
+ __func__, tid, tid->tid);
+
return (1);
}
@@ -2754,7 +2771,7 @@ ath_tx_tid_bar_tx(struct ath_softc *sc, struct ath_tid *tid)
ATH_TXQ_LOCK_ASSERT(sc->sc_ac2q[tid->ac]);
- DPRINTF(sc, ATH_DEBUG_SW_TX_BAW,
+ DPRINTF(sc, ATH_DEBUG_SW_TX_BAR,
"%s: tid=%p, called\n",
__func__,
tid);
@@ -2776,7 +2793,7 @@ ath_tx_tid_bar_tx(struct ath_softc *sc, struct ath_tid *tid)
/* Don't do anything if we still have pending frames */
if (tid->hwq_depth > 0) {
- DPRINTF(sc, ATH_DEBUG_SW_TX_BAW,
+ DPRINTF(sc, ATH_DEBUG_SW_TX_BAR,
"%s: tid=%p, hwq_depth=%d, waiting\n",
__func__,
tid,
@@ -2793,7 +2810,7 @@ ath_tx_tid_bar_tx(struct ath_softc *sc, struct ath_tid *tid)
*
* XXX verify this is _actually_ the valid value to begin at!
*/
- DPRINTF(sc, ATH_DEBUG_SW_TX_BAW,
+ DPRINTF(sc, ATH_DEBUG_SW_TX_BAR,
"%s: tid=%p, new BAW left edge=%d\n",
__func__,
tid,
@@ -2865,10 +2882,11 @@ ath_tx_tid_drain(struct ath_softc *sc, struct ath_node *an,
SEQNO(bf->bf_state.bfs_seqno),
bf->bf_state.bfs_retries);
device_printf(sc->sc_dev,
- "%s: node %p: bf=%p: tid txq_depth=%d hwq_depth=%d\n",
+ "%s: node %p: bf=%p: tid txq_depth=%d hwq_depth=%d, bar_wait=%d\n",
__func__, ni, bf,
tid->axq_depth,
- tid->hwq_depth);
+ tid->hwq_depth,
+ tid->bar_wait);
device_printf(sc->sc_dev,
"%s: node %p: bf=%p: tid %d: txq_depth=%d, "
"txq_aggr_depth=%d, sched=%d, paused=%d, "
@@ -3088,14 +3106,14 @@ ath_tx_comp_cleanup_unaggr(struct ath_softc *sc, struct ath_buf *bf)
* The caller is responsible for pausing the TID.
*/
static void
-ath_tx_cleanup(struct ath_softc *sc, struct ath_node *an, int tid)
+ath_tx_tid_cleanup(struct ath_softc *sc, struct ath_node *an, int tid)
{
struct ath_tid *atid = &an->an_tid[tid];
struct ieee80211_tx_ampdu *tap;
struct ath_buf *bf, *bf_next;
ath_bufhead bf_cq;
- DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
+ DPRINTF(sc, ATH_DEBUG_SW_TX_BAW,
"%s: TID %d: called\n", __func__, tid);
TAILQ_INIT(&bf_cq);
@@ -3562,7 +3580,7 @@ ath_tx_aggr_comp_aggr(struct ath_softc *sc, struct ath_buf *bf_first,
int nframes = 0, nbad = 0, nf;
int pktlen;
/* XXX there's too much on the stack? */
- struct ath_rc_series rc[4];
+ struct ath_rc_series rc[ATH_RC_NUM];
int txseq;
DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR, "%s: called; hwq_depth=%d\n",
@@ -3597,9 +3615,16 @@ ath_tx_aggr_comp_aggr(struct ath_softc *sc, struct ath_buf *bf_first,
pktlen = bf_first->bf_state.bfs_pktlen;
/*
- * handle errors first
+ * Handle errors first!
+ *
+ * Here, handle _any_ error as a "exceeded retries" error.
+ * Later on (when filtered frames are to be specially handled)
+ * it'll have to be expanded.
*/
+#if 0
if (ts.ts_status & HAL_TXERR_XRETRY) {
+#endif
+ if (ts.ts_status != 0) {
ATH_TXQ_UNLOCK(sc->sc_ac2q[atid->ac]);
ath_tx_comp_aggr_error(sc, bf_first, atid);
return;
@@ -3839,7 +3864,10 @@ ath_tx_aggr_comp_unaggr(struct ath_softc *sc, struct ath_buf *bf, int fail)
* Don't bother with the retry check if all frames
* are being failed (eg during queue deletion.)
*/
+#if 0
if (fail == 0 && ts->ts_status & HAL_TXERR_XRETRY) {
+#endif
+ if (fail == 0 && ts->ts_status != 0) {
ATH_TXQ_UNLOCK(sc->sc_ac2q[atid->ac]);
DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: retry_unaggr\n",
__func__);
@@ -4308,7 +4336,15 @@ ath_addba_request(struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap,
* fall within it.
*/
ATH_TXQ_LOCK(sc->sc_ac2q[atid->ac]);
- ath_tx_tid_pause(sc, atid);
+ /*
+ * This is a bit annoying. Until net80211 HT code inherits some
+ * (any) locking, we may have this called in parallel BUT only
+ * one response/timeout will be called. Grr.
+ */
+ if (atid->addba_tx_pending == 0) {
+ ath_tx_tid_pause(sc, atid);
+ atid->addba_tx_pending = 1;
+ }
ATH_TXQ_UNLOCK(sc->sc_ac2q[atid->ac]);
DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
@@ -4369,6 +4405,7 @@ ath_addba_response(struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap,
r = sc->sc_addba_response(ni, tap, status, code, batimeout);
ATH_TXQ_LOCK(sc->sc_ac2q[atid->ac]);
+ atid->addba_tx_pending = 0;
/*
* XXX dirty!
* Slide the BAW left edge to wherever net80211 left it for us.
@@ -4403,11 +4440,11 @@ ath_addba_stop(struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap)
sc->sc_addba_stop(ni, tap);
/*
- * ath_tx_cleanup will resume the TID if possible, otherwise
+ * ath_tx_tid_cleanup will resume the TID if possible, otherwise
* it'll set the cleanup flag, and it'll be unpaused once
* things have been cleaned up.
*/
- ath_tx_cleanup(sc, an, tid);
+ ath_tx_tid_cleanup(sc, an, tid);
}
/*
@@ -4430,8 +4467,15 @@ ath_bar_response(struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap,
struct ath_tid *atid = &an->an_tid[tid];
int attempts = tap->txa_attempts;
- DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
- "%s: called; status=%d\n", __func__, status);
+ DPRINTF(sc, ATH_DEBUG_SW_TX_BAR,
+ "%s: called; tap=%p, atid=%p, txa_tid=%d, atid->tid=%d, status=%d, attempts=%d\n",
+ __func__,
+ tap,
+ atid,
+ tap->txa_tid,
+ atid->tid,
+ status,
+ attempts);
/* Note: This may update the BAW details */
sc->sc_bar_response(ni, tap, status);
@@ -4465,6 +4509,10 @@ ath_addba_response_timeout(struct ieee80211_node *ni,
DPRINTF(sc, ATH_DEBUG_SW_TX_CTRL,
"%s: called; resuming\n", __func__);
+ ATH_TXQ_LOCK(sc->sc_ac2q[atid->ac]);
+ atid->addba_tx_pending = 0;
+ ATH_TXQ_UNLOCK(sc->sc_ac2q[atid->ac]);
+
/* Note: This updates the aggregate state to (again) pending */
sc->sc_addba_response_timeout(ni, tap);
diff --git a/sys/dev/ath/if_athvar.h b/sys/dev/ath/if_athvar.h
index e9cbabcf1d60..e197368178ed 100644
--- a/sys/dev/ath/if_athvar.h
+++ b/sys/dev/ath/if_athvar.h
@@ -47,7 +47,7 @@
* 802.11n requires more TX and RX buffers to do AMPDU.
*/
#ifdef ATH_ENABLE_11N
-#define ATH_TXBUF 128
+#define ATH_TXBUF 512
#define ATH_RXBUF 512
#endif
@@ -106,6 +106,7 @@ struct ath_tid {
TAILQ_ENTRY(ath_tid) axq_qelem;
int sched;
int paused; /* >0 if the TID has been paused */
+ int addba_tx_pending; /* TX ADDBA pending */
int bar_wait; /* waiting for BAR */
int bar_tx; /* BAR TXed */
@@ -237,7 +238,6 @@ struct ath_buf {
int bfs_txpower; /* tx power */
int bfs_txantenna; /* TX antenna config */
enum ieee80211_protmode bfs_protmode;
- HAL_11N_RATE_SERIES bfs_rc11n[ATH_RC_NUM]; /* 11n TX series */
int bfs_ctsrate; /* CTS rate */
int bfs_ctsduration; /* CTS duration (pre-11n NICs) */
struct ath_rc_series bfs_rc[ATH_RC_NUM]; /* non-11n TX series */
@@ -351,7 +351,7 @@ struct ath_softc {
struct ath_stats sc_stats; /* interface statistics */
struct ath_tx_aggr_stats sc_aggr_stats;
struct ath_intr_stats sc_intr_stats;
- int sc_debug;
+ uint64_t sc_debug;
int sc_nvaps; /* # vaps */
int sc_nstavaps; /* # station vaps */
int sc_nmeshvaps; /* # mbss vaps */
@@ -995,6 +995,14 @@ void ath_intr(void *);
((*(_ah)->ah_gpioSetIntr)((_ah), (_gpio), (_b)))
/*
+ * PCIe suspend/resume/poweron/poweroff related macros
+ */
+#define ath_hal_enablepcie(_ah, _restore, _poweroff) \
+ ((*(_ah)->ah_configPCIE)((_ah), (_restore), (_poweroff)))
+#define ath_hal_disablepcie(_ah) \
+ ((*(_ah)->ah_disablePCIE)((_ah)))
+
+/*
* This is badly-named; you need to set the correct parameters
* to begin to receive useful radar events; and even then
* it doesn't "enable" DFS. See the ath_dfs/null/ module for
diff --git a/sys/dev/bce/if_bce.c b/sys/dev/bce/if_bce.c
index b7b21479eb8d..f381dadf80df 100644
--- a/sys/dev/bce/if_bce.c
+++ b/sys/dev/bce/if_bce.c
@@ -2062,6 +2062,11 @@ bce_miibus_statchg(device_t dev)
media_status = mii->mii_media_status;
}
+ /* Ignore invalid media status. */
+ if ((media_status & (IFM_ACTIVE | IFM_AVALID)) !=
+ (IFM_ACTIVE | IFM_AVALID))
+ goto bce_miibus_statchg_exit;
+
val = REG_RD(sc, BCE_EMAC_MODE);
val &= ~(BCE_EMAC_MODE_PORT | BCE_EMAC_MODE_HALF_DUPLEX |
BCE_EMAC_MODE_MAC_LOOP | BCE_EMAC_MODE_FORCE_LINK |
@@ -2131,6 +2136,7 @@ bce_miibus_statchg(device_t dev)
/* ToDo: Update watermarks in bce_init_rx_context(). */
+bce_miibus_statchg_exit:
DBEXIT(BCE_VERBOSE_PHY);
}
@@ -4997,14 +5003,25 @@ bce_stop(struct bce_softc *sc)
static int
bce_reset(struct bce_softc *sc, u32 reset_code)
{
- u32 val;
+ u32 emac_mode_save, val;
int i, rc = 0;
+ static const u32 emac_mode_mask = BCE_EMAC_MODE_PORT |
+ BCE_EMAC_MODE_HALF_DUPLEX | BCE_EMAC_MODE_25G;
DBENTER(BCE_VERBOSE_RESET);
DBPRINT(sc, BCE_VERBOSE_RESET, "%s(): reset_code = 0x%08X\n",
__FUNCTION__, reset_code);
+ /*
+ * If ASF/IPMI is operational, then the EMAC Mode register already
+ * contains appropriate values for the link settings that have
+ * been auto-negotiated. Resetting the chip will clobber those
+ * values. Save the important bits so we can restore them after
+ * the reset.
+ */
+ emac_mode_save = REG_RD(sc, BCE_EMAC_MODE) & emac_mode_mask;
+
/* Wait for pending PCI transactions to complete. */
REG_WR(sc, BCE_MISC_ENABLE_CLR_BITS,
BCE_MISC_ENABLE_CLR_BITS_TX_DMA_ENABLE |
@@ -5094,6 +5111,11 @@ bce_reset(struct bce_softc *sc, u32 reset_code)
bce_fw_cap_init(sc);
bce_reset_exit:
+ /* Restore EMAC Mode bits needed to keep ASF/IPMI running. */
+ val = REG_RD(sc, BCE_EMAC_MODE);
+ val = (val & ~emac_mode_mask) | emac_mode_save;
+ REG_WR(sc, BCE_EMAC_MODE, val);
+
DBEXIT(BCE_VERBOSE_RESET);
return (rc);
}
diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c
index 555721862463..1f4e5a8d2414 100644
--- a/sys/dev/bge/if_bge.c
+++ b/sys/dev/bge/if_bge.c
@@ -3638,8 +3638,6 @@ bge_reset(struct bge_softc *sc)
/* Clear enable no snoop and disable relaxed ordering. */
devctl &= ~(PCIM_EXP_CTL_RELAXED_ORD_ENABLE |
PCIM_EXP_CTL_NOSNOOP_ENABLE);
- /* Set PCIE max payload size to 128. */
- devctl &= ~PCIM_EXP_CTL_MAX_PAYLOAD;
pci_write_config(dev, sc->bge_expcap + PCIR_EXPRESS_DEVICE_CTL,
devctl, 2);
/* Clear error status. */
diff --git a/sys/dev/cxgb/cxgb_adapter.h b/sys/dev/cxgb/cxgb_adapter.h
index ed75e7888b9d..4354b1c93066 100644
--- a/sys/dev/cxgb/cxgb_adapter.h
+++ b/sys/dev/cxgb/cxgb_adapter.h
@@ -46,6 +46,7 @@ $FreeBSD$
#include <net/if.h>
#include <net/if_media.h>
#include <net/if_dl.h>
+#include <netinet/in.h>
#include <netinet/tcp_lro.h>
#include <machine/bus.h>
diff --git a/sys/dev/cxgb/cxgb_sge.c b/sys/dev/cxgb/cxgb_sge.c
index 5450b7ef6b53..2a6dc2733975 100644
--- a/sys/dev/cxgb/cxgb_sge.c
+++ b/sys/dev/cxgb/cxgb_sge.c
@@ -30,6 +30,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_inet6.h"
#include "opt_inet.h"
#include <sys/param.h>
@@ -2085,7 +2086,7 @@ t3_free_qset(adapter_t *sc, struct sge_qset *q)
MTX_DESTROY(&q->rspq.lock);
}
-#ifdef INET
+#if defined(INET6) || defined(INET)
tcp_lro_free(&q->lro.ctrl);
#endif
@@ -2668,7 +2669,7 @@ t3_sge_alloc_qset(adapter_t *sc, u_int id, int nports, int irq_vec_idx,
/* Allocate and setup the lro_ctrl structure */
q->lro.enabled = !!(pi->ifp->if_capenable & IFCAP_LRO);
-#ifdef INET
+#if defined(INET6) || defined(INET)
ret = tcp_lro_init(&q->lro.ctrl);
if (ret) {
printf("error %d from tcp_lro_init\n", ret);
@@ -2961,9 +2962,11 @@ process_responses(adapter_t *adap, struct sge_qset *qs, int budget)
struct rsp_desc *r = &rspq->desc[rspq->cidx];
int budget_left = budget;
unsigned int sleeping = 0;
+#if defined(INET6) || defined(INET)
int lro_enabled = qs->lro.enabled;
int skip_lro;
struct lro_ctrl *lro_ctrl = &qs->lro.ctrl;
+#endif
struct mbuf *offload_mbufs[RX_BUNDLE_SIZE];
int ngathered = 0;
struct t3_mbuf_hdr *mh = &rspq->rspq_mh;
@@ -3082,15 +3085,16 @@ process_responses(adapter_t *adap, struct sge_qset *qs, int budget)
* The mbuf's rcvif was derived from the cpl header and
* is accurate. Skip LRO and just use that.
*/
+#if defined(INET6) || defined(INET)
skip_lro = __predict_false(qs->port->ifp != m->m_pkthdr.rcvif);
if (lro_enabled && lro_ctrl->lro_cnt && !skip_lro
-#ifdef INET
&& (tcp_lro_rx(lro_ctrl, m, 0) == 0)
-#endif
) {
/* successfully queue'd for LRO */
- } else {
+ } else
+#endif
+ {
/*
* LRO not enabled, packet unsuitable for LRO,
* or unable to queue. Pass it up right now in
@@ -3109,7 +3113,7 @@ process_responses(adapter_t *adap, struct sge_qset *qs, int budget)
deliver_partial_bundle(&adap->tdev, rspq, offload_mbufs, ngathered);
-#ifdef INET
+#if defined(INET6) || defined(INET)
/* Flush LRO */
while (!SLIST_EMPTY(&lro_ctrl->lro_active)) {
struct lro_entry *queued = SLIST_FIRST(&lro_ctrl->lro_active);
diff --git a/sys/dev/cxgbe/adapter.h b/sys/dev/cxgbe/adapter.h
index 020c4738056a..6be75bcaef0f 100644
--- a/sys/dev/cxgbe/adapter.h
+++ b/sys/dev/cxgbe/adapter.h
@@ -44,6 +44,7 @@
#include <net/ethernet.h>
#include <net/if.h>
#include <net/if_media.h>
+#include <netinet/in.h>
#include <netinet/tcp_lro.h>
#include "offload.h"
diff --git a/sys/dev/drm2/drm.h b/sys/dev/drm2/drm.h
new file mode 100644
index 000000000000..d7e57adda233
--- /dev/null
+++ b/sys/dev/drm2/drm.h
@@ -0,0 +1,1214 @@
+/**
+ * \file drm.h
+ * Header for the Direct Rendering Manager
+ *
+ * \author Rickard E. (Rik) Faith <faith@valinux.com>
+ *
+ * \par Acknowledgments:
+ * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic \c cmpxchg.
+ */
+
+/*-
+ * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/**
+ * \mainpage
+ *
+ * The Direct Rendering Manager (DRM) is a device-independent kernel-level
+ * device driver that provides support for the XFree86 Direct Rendering
+ * Infrastructure (DRI).
+ *
+ * The DRM supports the Direct Rendering Infrastructure (DRI) in four major
+ * ways:
+ * -# The DRM provides synchronized access to the graphics hardware via
+ * the use of an optimized two-tiered lock.
+ * -# The DRM enforces the DRI security policy for access to the graphics
+ * hardware by only allowing authenticated X11 clients access to
+ * restricted regions of memory.
+ * -# The DRM provides a generic DMA engine, complete with multiple
+ * queues and the ability to detect the need for an OpenGL context
+ * switch.
+ * -# The DRM is extensible via the use of small device-specific modules
+ * that rely extensively on the API exported by the DRM module.
+ *
+ */
+
+#ifndef _DRM_H_
+#define _DRM_H_
+
+#ifndef __user
+#define __user
+#endif
+#ifndef __iomem
+#define __iomem
+#endif
+
+#ifdef __GNUC__
+# define DEPRECATED __attribute__ ((deprecated))
+#else
+# define DEPRECATED
+#endif
+
+#if defined(__linux__)
+#include <asm/ioctl.h> /* For _IO* macros */
+#define DRM_IOCTL_NR(n) _IOC_NR(n)
+#define DRM_IOC_VOID _IOC_NONE
+#define DRM_IOC_READ _IOC_READ
+#define DRM_IOC_WRITE _IOC_WRITE
+#define DRM_IOC_READWRITE _IOC_READ|_IOC_WRITE
+#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
+#include <sys/ioccom.h>
+#define DRM_IOCTL_NR(n) ((n) & 0xff)
+#define DRM_IOC_VOID IOC_VOID
+#define DRM_IOC_READ IOC_OUT
+#define DRM_IOC_WRITE IOC_IN
+#define DRM_IOC_READWRITE IOC_INOUT
+#define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
+#endif
+
+#ifdef __OpenBSD__
+#define DRM_MAJOR 81
+#endif
+#if defined(__linux__) || defined(__NetBSD__)
+#define DRM_MAJOR 226
+#endif
+#define DRM_MAX_MINOR 15
+
+#define DRM_NAME "drm" /**< Name in kernel, /dev, and /proc */
+#define DRM_MIN_ORDER 5 /**< At least 2^5 bytes = 32 bytes */
+#define DRM_MAX_ORDER 22 /**< Up to 2^22 bytes = 4MB */
+#define DRM_RAM_PERCENT 10 /**< How much system ram can we lock? */
+
+#define _DRM_LOCK_HELD 0x80000000U /**< Hardware lock is held */
+#define _DRM_LOCK_CONT 0x40000000U /**< Hardware lock is contended */
+#define _DRM_LOCK_IS_HELD(lock) ((lock) & _DRM_LOCK_HELD)
+#define _DRM_LOCK_IS_CONT(lock) ((lock) & _DRM_LOCK_CONT)
+#define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
+
+#if defined(__linux__)
+typedef unsigned int drm_handle_t;
+#else
+#include <sys/types.h>
+typedef unsigned long drm_handle_t; /**< To mapped regions */
+#endif
+typedef unsigned int drm_context_t; /**< GLXContext handle */
+typedef unsigned int drm_drawable_t;
+typedef unsigned int drm_magic_t; /**< Magic for authentication */
+
+/**
+ * Cliprect.
+ *
+ * \warning If you change this structure, make sure you change
+ * XF86DRIClipRectRec in the server as well
+ *
+ * \note KW: Actually it's illegal to change either for
+ * backwards-compatibility reasons.
+ */
+struct drm_clip_rect {
+ unsigned short x1;
+ unsigned short y1;
+ unsigned short x2;
+ unsigned short y2;
+};
+
+/**
+ * Texture region,
+ */
+struct drm_tex_region {
+ unsigned char next;
+ unsigned char prev;
+ unsigned char in_use;
+ unsigned char padding;
+ unsigned int age;
+};
+
+/**
+ * Hardware lock.
+ *
+ * The lock structure is a simple cache-line aligned integer. To avoid
+ * processor bus contention on a multiprocessor system, there should not be any
+ * other data stored in the same cache line.
+ */
+struct drm_hw_lock {
+ __volatile__ unsigned int lock; /**< lock variable */
+ char padding[60]; /**< Pad to cache line */
+};
+
+/* This is beyond ugly, and only works on GCC. However, it allows me to use
+ * drm.h in places (i.e., in the X-server) where I can't use size_t. The real
+ * fix is to use uint32_t instead of size_t, but that fix will break existing
+ * LP64 (i.e., PowerPC64, SPARC64, IA-64, Alpha, etc.) systems. That *will*
+ * eventually happen, though. I chose 'unsigned long' to be the fallback type
+ * because that works on all the platforms I know about. Hopefully, the
+ * real fix will happen before that bites us.
+ */
+
+#ifdef __SIZE_TYPE__
+# define DRM_SIZE_T __SIZE_TYPE__
+#else
+# warning "__SIZE_TYPE__ not defined. Assuming sizeof(size_t) == sizeof(unsigned long)!"
+# define DRM_SIZE_T unsigned long
+#endif
+
+/**
+ * DRM_IOCTL_VERSION ioctl argument type.
+ *
+ * \sa drmGetVersion().
+ */
+struct drm_version {
+ int version_major; /**< Major version */
+ int version_minor; /**< Minor version */
+ int version_patchlevel; /**< Patch level */
+ DRM_SIZE_T name_len; /**< Length of name buffer */
+ char __user *name; /**< Name of driver */
+ DRM_SIZE_T date_len; /**< Length of date buffer */
+ char __user *date; /**< User-space buffer to hold date */
+ DRM_SIZE_T desc_len; /**< Length of desc buffer */
+ char __user *desc; /**< User-space buffer to hold desc */
+};
+
+/**
+ * DRM_IOCTL_GET_UNIQUE ioctl argument type.
+ *
+ * \sa drmGetBusid() and drmSetBusId().
+ */
+struct drm_unique {
+ DRM_SIZE_T unique_len; /**< Length of unique */
+ char __user *unique; /**< Unique name for driver instantiation */
+};
+
+#undef DRM_SIZE_T
+
+struct drm_list {
+ int count; /**< Length of user-space structures */
+ struct drm_version __user *version;
+};
+
+struct drm_block {
+ int unused;
+};
+
+/**
+ * DRM_IOCTL_CONTROL ioctl argument type.
+ *
+ * \sa drmCtlInstHandler() and drmCtlUninstHandler().
+ */
+struct drm_control {
+ enum {
+ DRM_ADD_COMMAND,
+ DRM_RM_COMMAND,
+ DRM_INST_HANDLER,
+ DRM_UNINST_HANDLER
+ } func;
+ int irq;
+};
+
+/**
+ * Type of memory to map.
+ */
+enum drm_map_type {
+ _DRM_FRAME_BUFFER = 0, /**< WC (no caching), no core dump */
+ _DRM_REGISTERS = 1, /**< no caching, no core dump */
+ _DRM_SHM = 2, /**< shared, cached */
+ _DRM_AGP = 3, /**< AGP/GART */
+ _DRM_SCATTER_GATHER = 4, /**< Scatter/gather memory for PCI DMA */
+ _DRM_CONSISTENT = 5, /**< Consistent memory for PCI DMA */
+ _DRM_GEM = 6 /**< GEM */
+};
+
+/**
+ * Memory mapping flags.
+ */
+enum drm_map_flags {
+ _DRM_RESTRICTED = 0x01, /**< Cannot be mapped to user-virtual */
+ _DRM_READ_ONLY = 0x02,
+ _DRM_LOCKED = 0x04, /**< shared, cached, locked */
+ _DRM_KERNEL = 0x08, /**< kernel requires access */
+ _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
+ _DRM_CONTAINS_LOCK = 0x20, /**< SHM page that contains lock */
+ _DRM_REMOVABLE = 0x40, /**< Removable mapping */
+ _DRM_DRIVER = 0x80 /**< Managed by driver */
+};
+
+struct drm_ctx_priv_map {
+ unsigned int ctx_id; /**< Context requesting private mapping */
+ void *handle; /**< Handle of map */
+};
+
+/**
+ * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls
+ * argument type.
+ *
+ * \sa drmAddMap().
+ */
+struct drm_map {
+ unsigned long offset; /**< Requested physical address (0 for SAREA)*/
+ unsigned long size; /**< Requested physical size (bytes) */
+ enum drm_map_type type; /**< Type of memory to map */
+ enum drm_map_flags flags; /**< Flags */
+ void *handle; /**< User-space: "Handle" to pass to mmap() */
+ /**< Kernel-space: kernel-virtual address */
+ int mtrr; /**< MTRR slot used */
+ /* Private data */
+};
+
+/**
+ * DRM_IOCTL_GET_CLIENT ioctl argument type.
+ */
+struct drm_client {
+ int idx; /**< Which client desired? */
+ int auth; /**< Is client authenticated? */
+ unsigned long pid; /**< Process ID */
+ unsigned long uid; /**< User ID */
+ unsigned long magic; /**< Magic */
+ unsigned long iocs; /**< Ioctl count */
+};
+
+enum drm_stat_type {
+ _DRM_STAT_LOCK,
+ _DRM_STAT_OPENS,
+ _DRM_STAT_CLOSES,
+ _DRM_STAT_IOCTLS,
+ _DRM_STAT_LOCKS,
+ _DRM_STAT_UNLOCKS,
+ _DRM_STAT_VALUE, /**< Generic value */
+ _DRM_STAT_BYTE, /**< Generic byte counter (1024bytes/K) */
+ _DRM_STAT_COUNT, /**< Generic non-byte counter (1000/k) */
+
+ _DRM_STAT_IRQ, /**< IRQ */
+ _DRM_STAT_PRIMARY, /**< Primary DMA bytes */
+ _DRM_STAT_SECONDARY, /**< Secondary DMA bytes */
+ _DRM_STAT_DMA, /**< DMA */
+ _DRM_STAT_SPECIAL, /**< Special DMA (e.g., priority or polled) */
+ _DRM_STAT_MISSED /**< Missed DMA opportunity */
+ /* Add to the *END* of the list */
+};
+
+/**
+ * DRM_IOCTL_GET_STATS ioctl argument type.
+ */
+struct drm_stats {
+ unsigned long count;
+ struct {
+ unsigned long value;
+ enum drm_stat_type type;
+ } data[15];
+};
+
+/**
+ * Hardware locking flags.
+ */
+enum drm_lock_flags {
+ _DRM_LOCK_READY = 0x01, /**< Wait until hardware is ready for DMA */
+ _DRM_LOCK_QUIESCENT = 0x02, /**< Wait until hardware quiescent */
+ _DRM_LOCK_FLUSH = 0x04, /**< Flush this context's DMA queue first */
+ _DRM_LOCK_FLUSH_ALL = 0x08, /**< Flush all DMA queues first */
+ /* These *HALT* flags aren't supported yet
+ -- they will be used to support the
+ full-screen DGA-like mode. */
+ _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */
+ _DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */
+};
+
+/**
+ * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type.
+ *
+ * \sa drmGetLock() and drmUnlock().
+ */
+struct drm_lock {
+ int context;
+ enum drm_lock_flags flags;
+};
+
+/**
+ * DMA flags
+ *
+ * \warning
+ * These values \e must match xf86drm.h.
+ *
+ * \sa drm_dma.
+ */
+enum drm_dma_flags {
+ /* Flags for DMA buffer dispatch */
+ _DRM_DMA_BLOCK = 0x01, /**<
+ * Block until buffer dispatched.
+ *
+ * \note The buffer may not yet have
+ * been processed by the hardware --
+ * getting a hardware lock with the
+ * hardware quiescent will ensure
+ * that the buffer has been
+ * processed.
+ */
+ _DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */
+ _DRM_DMA_PRIORITY = 0x04, /**< High priority dispatch */
+
+ /* Flags for DMA buffer request */
+ _DRM_DMA_WAIT = 0x10, /**< Wait for free buffers */
+ _DRM_DMA_SMALLER_OK = 0x20, /**< Smaller-than-requested buffers OK */
+ _DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */
+};
+
+/**
+ * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type.
+ *
+ * \sa drmAddBufs().
+ */
+struct drm_buf_desc {
+ int count; /**< Number of buffers of this size */
+ int size; /**< Size in bytes */
+ int low_mark; /**< Low water mark */
+ int high_mark; /**< High water mark */
+ enum {
+ _DRM_PAGE_ALIGN = 0x01, /**< Align on page boundaries for DMA */
+ _DRM_AGP_BUFFER = 0x02, /**< Buffer is in AGP space */
+ _DRM_SG_BUFFER = 0x04, /**< Scatter/gather memory buffer */
+ _DRM_FB_BUFFER = 0x08, /**< Buffer is in frame buffer */
+ _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
+ } flags;
+ unsigned long agp_start; /**<
+ * Start address of where the AGP buffers are
+ * in the AGP aperture
+ */
+};
+
+/**
+ * DRM_IOCTL_INFO_BUFS ioctl argument type.
+ */
+struct drm_buf_info {
+ int count; /**< Number of buffers described in list */
+ struct drm_buf_desc __user *list; /**< List of buffer descriptions */
+};
+
+/**
+ * DRM_IOCTL_FREE_BUFS ioctl argument type.
+ */
+struct drm_buf_free {
+ int count;
+ int __user *list;
+};
+
+/**
+ * Buffer information
+ *
+ * \sa drm_buf_map.
+ */
+struct drm_buf_pub {
+ int idx; /**< Index into the master buffer list */
+ int total; /**< Buffer size */
+ int used; /**< Amount of buffer in use (for DMA) */
+ void __user *address; /**< Address of buffer */
+};
+
+/**
+ * DRM_IOCTL_MAP_BUFS ioctl argument type.
+ */
+struct drm_buf_map {
+ int count; /**< Length of the buffer list */
+#if defined(__cplusplus)
+ void __user *c_virtual;
+#else
+ void __user *virtual; /**< Mmap'd area in user-virtual */
+#endif
+ struct drm_buf_pub __user *list; /**< Buffer information */
+};
+
+/**
+ * DRM_IOCTL_DMA ioctl argument type.
+ *
+ * Indices here refer to the offset into the buffer list in drm_buf_get.
+ *
+ * \sa drmDMA().
+ */
+struct drm_dma {
+ int context; /**< Context handle */
+ int send_count; /**< Number of buffers to send */
+ int __user *send_indices; /**< List of handles to buffers */
+ int __user *send_sizes; /**< Lengths of data to send */
+ enum drm_dma_flags flags; /**< Flags */
+ int request_count; /**< Number of buffers requested */
+ int request_size; /**< Desired size for buffers */
+ int __user *request_indices; /**< Buffer information */
+ int __user *request_sizes;
+ int granted_count; /**< Number of buffers granted */
+};
+
+enum drm_ctx_flags {
+ _DRM_CONTEXT_PRESERVED = 0x01,
+ _DRM_CONTEXT_2DONLY = 0x02
+};
+
+/**
+ * DRM_IOCTL_ADD_CTX ioctl argument type.
+ *
+ * \sa drmCreateContext() and drmDestroyContext().
+ */
+struct drm_ctx {
+ drm_context_t handle;
+ enum drm_ctx_flags flags;
+};
+
+/**
+ * DRM_IOCTL_RES_CTX ioctl argument type.
+ */
+struct drm_ctx_res {
+ int count;
+ struct drm_ctx __user *contexts;
+};
+
+/**
+ * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type.
+ */
+struct drm_draw {
+ drm_drawable_t handle;
+};
+
+/**
+ * DRM_IOCTL_UPDATE_DRAW ioctl argument type.
+ */
+typedef enum {
+ DRM_DRAWABLE_CLIPRECTS,
+} drm_drawable_info_type_t;
+
+struct drm_update_draw {
+ drm_drawable_t handle;
+ unsigned int type;
+ unsigned int num;
+ unsigned long long data;
+};
+
+/**
+ * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type.
+ */
+struct drm_auth {
+ drm_magic_t magic;
+};
+
+/**
+ * DRM_IOCTL_IRQ_BUSID ioctl argument type.
+ *
+ * \sa drmGetInterruptFromBusID().
+ */
+struct drm_irq_busid {
+ int irq; /**< IRQ number */
+ int busnum; /**< bus number */
+ int devnum; /**< device number */
+ int funcnum; /**< function number */
+};
+
+enum drm_vblank_seq_type {
+ _DRM_VBLANK_ABSOLUTE = 0x0, /**< Wait for specific vblank sequence number */
+ _DRM_VBLANK_RELATIVE = 0x1, /**< Wait for given number of vblanks */
+ _DRM_VBLANK_HIGH_CRTC_MASK = 0x0000003e,
+ _DRM_VBLANK_EVENT = 0x4000000, /**< Send event instead of blocking */
+ _DRM_VBLANK_FLIP = 0x8000000, /**< Scheduled buffer swap should flip */
+ _DRM_VBLANK_NEXTONMISS = 0x10000000, /**< If missed, wait for next vblank */
+ _DRM_VBLANK_SECONDARY = 0x20000000, /**< Secondary display controller */
+ _DRM_VBLANK_SIGNAL = 0x40000000 /**< Send signal instead of blocking */
+};
+#define _DRM_VBLANK_HIGH_CRTC_SHIFT 1
+
+#define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE)
+#define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_EVENT | _DRM_VBLANK_SIGNAL | \
+ _DRM_VBLANK_SECONDARY | _DRM_VBLANK_NEXTONMISS)
+
+struct drm_wait_vblank_request {
+ enum drm_vblank_seq_type type;
+ unsigned int sequence;
+ unsigned long signal;
+};
+
+struct drm_wait_vblank_reply {
+ enum drm_vblank_seq_type type;
+ unsigned int sequence;
+ long tval_sec;
+ long tval_usec;
+};
+
+/**
+ * DRM_IOCTL_WAIT_VBLANK ioctl argument type.
+ *
+ * \sa drmWaitVBlank().
+ */
+union drm_wait_vblank {
+ struct drm_wait_vblank_request request;
+ struct drm_wait_vblank_reply reply;
+};
+
+
+#define _DRM_PRE_MODESET 1
+#define _DRM_POST_MODESET 2
+
+/**
+ * DRM_IOCTL_MODESET_CTL ioctl argument type
+ *
+ * \sa drmModesetCtl().
+ */
+struct drm_modeset_ctl {
+ uint32_t crtc;
+ uint32_t cmd;
+};
+
+/**
+ * DRM_IOCTL_AGP_ENABLE ioctl argument type.
+ *
+ * \sa drmAgpEnable().
+ */
+struct drm_agp_mode {
+ unsigned long mode; /**< AGP mode */
+};
+
+/**
+ * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type.
+ *
+ * \sa drmAgpAlloc() and drmAgpFree().
+ */
+struct drm_agp_buffer {
+ unsigned long size; /**< In bytes -- will round to page boundary */
+ unsigned long handle; /**< Used for binding / unbinding */
+ unsigned long type; /**< Type of memory to allocate */
+ unsigned long physical; /**< Physical used by i810 */
+};
+
+/**
+ * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type.
+ *
+ * \sa drmAgpBind() and drmAgpUnbind().
+ */
+struct drm_agp_binding {
+ unsigned long handle; /**< From drm_agp_buffer */
+ unsigned long offset; /**< In bytes -- will round to page boundary */
+};
+
+/**
+ * DRM_IOCTL_AGP_INFO ioctl argument type.
+ *
+ * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(),
+ * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(),
+ * drmAgpVendorId() and drmAgpDeviceId().
+ */
+struct drm_agp_info {
+ int agp_version_major;
+ int agp_version_minor;
+ unsigned long mode;
+ unsigned long aperture_base; /**< physical address */
+ unsigned long aperture_size; /**< bytes */
+ unsigned long memory_allowed; /**< bytes */
+ unsigned long memory_used;
+
+ /** \name PCI information */
+ /*@{ */
+ unsigned short id_vendor;
+ unsigned short id_device;
+ /*@} */
+};
+
+/**
+ * DRM_IOCTL_SG_ALLOC ioctl argument type.
+ */
+struct drm_scatter_gather {
+ unsigned long size; /**< In bytes -- will round to page boundary */
+ unsigned long handle; /**< Used for mapping / unmapping */
+};
+
+/**
+ * DRM_IOCTL_SET_VERSION ioctl argument type.
+ */
+struct drm_set_version {
+ int drm_di_major;
+ int drm_di_minor;
+ int drm_dd_major;
+ int drm_dd_minor;
+};
+
+#define DRM_FENCE_FLAG_EMIT 0x00000001
+#define DRM_FENCE_FLAG_SHAREABLE 0x00000002
+/**
+ * On hardware with no interrupt events for operation completion,
+ * indicates that the kernel should sleep while waiting for any blocking
+ * operation to complete rather than spinning.
+ *
+ * Has no effect otherwise.
+ */
+#define DRM_FENCE_FLAG_WAIT_LAZY 0x00000004
+#define DRM_FENCE_FLAG_NO_USER 0x00000010
+
+/* Reserved for driver use */
+#define DRM_FENCE_MASK_DRIVER 0xFF000000
+
+#define DRM_FENCE_TYPE_EXE 0x00000001
+
+struct drm_fence_arg {
+ unsigned int handle;
+ unsigned int fence_class;
+ unsigned int type;
+ unsigned int flags;
+ unsigned int signaled;
+ unsigned int error;
+ unsigned int sequence;
+ unsigned int pad64;
+ uint64_t expand_pad[2]; /* Future expansion */
+};
+
+/* Buffer permissions, referring to how the GPU uses the buffers.
+ * these translate to fence types used for the buffers.
+ * Typically a texture buffer is read, A destination buffer is write and
+ * a command (batch-) buffer is exe. Can be or-ed together.
+ */
+
+#define DRM_BO_FLAG_READ (1ULL << 0)
+#define DRM_BO_FLAG_WRITE (1ULL << 1)
+#define DRM_BO_FLAG_EXE (1ULL << 2)
+
+/*
+ * All of the bits related to access mode
+ */
+#define DRM_BO_MASK_ACCESS (DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE | DRM_BO_FLAG_EXE)
+/*
+ * Status flags. Can be read to determine the actual state of a buffer.
+ * Can also be set in the buffer mask before validation.
+ */
+
+/*
+ * Mask: Never evict this buffer. Not even with force. This type of buffer is only
+ * available to root and must be manually removed before buffer manager shutdown
+ * or lock.
+ * Flags: Acknowledge
+ */
+#define DRM_BO_FLAG_NO_EVICT (1ULL << 4)
+
+/*
+ * Mask: Require that the buffer is placed in mappable memory when validated.
+ * If not set the buffer may or may not be in mappable memory when validated.
+ * Flags: If set, the buffer is in mappable memory.
+ */
+#define DRM_BO_FLAG_MAPPABLE (1ULL << 5)
+
+/* Mask: The buffer should be shareable with other processes.
+ * Flags: The buffer is shareable with other processes.
+ */
+#define DRM_BO_FLAG_SHAREABLE (1ULL << 6)
+
+/* Mask: If set, place the buffer in cache-coherent memory if available.
+ * If clear, never place the buffer in cache coherent memory if validated.
+ * Flags: The buffer is currently in cache-coherent memory.
+ */
+#define DRM_BO_FLAG_CACHED (1ULL << 7)
+
+/* Mask: Make sure that every time this buffer is validated,
+ * it ends up on the same location provided that the memory mask is the same.
+ * The buffer will also not be evicted when claiming space for
+ * other buffers. Basically a pinned buffer but it may be thrown out as
+ * part of buffer manager shutdown or locking.
+ * Flags: Acknowledge.
+ */
+#define DRM_BO_FLAG_NO_MOVE (1ULL << 8)
+
+/* Mask: Make sure the buffer is in cached memory when mapped. In conjunction
+ * with DRM_BO_FLAG_CACHED it also allows the buffer to be bound into the GART
+ * with unsnooped PTEs instead of snooped, by using chipset-specific cache
+ * flushing at bind time. A better name might be DRM_BO_FLAG_TT_UNSNOOPED,
+ * as the eviction to local memory (TTM unbind) on map is just a side effect
+ * to prevent aggressive cache prefetch from the GPU disturbing the cache
+ * management that the DRM is doing.
+ *
+ * Flags: Acknowledge.
+ * Buffers allocated with this flag should not be used for suballocators
+ * This type may have issues on CPUs with over-aggressive caching
+ * http://marc.info/?l=linux-kernel&m=102376926732464&w=2
+ */
+#define DRM_BO_FLAG_CACHED_MAPPED (1ULL << 19)
+
+
+/* Mask: Force DRM_BO_FLAG_CACHED flag strictly also if it is set.
+ * Flags: Acknowledge.
+ */
+#define DRM_BO_FLAG_FORCE_CACHING (1ULL << 13)
+
+/*
+ * Mask: Force DRM_BO_FLAG_MAPPABLE flag strictly also if it is clear.
+ * Flags: Acknowledge.
+ */
+#define DRM_BO_FLAG_FORCE_MAPPABLE (1ULL << 14)
+#define DRM_BO_FLAG_TILE (1ULL << 15)
+
+/*
+ * Memory type flags that can be or'ed together in the mask, but only
+ * one appears in flags.
+ */
+
+/* System memory */
+#define DRM_BO_FLAG_MEM_LOCAL (1ULL << 24)
+/* Translation table memory */
+#define DRM_BO_FLAG_MEM_TT (1ULL << 25)
+/* Vram memory */
+#define DRM_BO_FLAG_MEM_VRAM (1ULL << 26)
+/* Up to the driver to define. */
+#define DRM_BO_FLAG_MEM_PRIV0 (1ULL << 27)
+#define DRM_BO_FLAG_MEM_PRIV1 (1ULL << 28)
+#define DRM_BO_FLAG_MEM_PRIV2 (1ULL << 29)
+#define DRM_BO_FLAG_MEM_PRIV3 (1ULL << 30)
+#define DRM_BO_FLAG_MEM_PRIV4 (1ULL << 31)
+/* We can add more of these now with a 64-bit flag type */
+
+/*
+ * This is a mask covering all of the memory type flags; easier to just
+ * use a single constant than a bunch of | values. It covers
+ * DRM_BO_FLAG_MEM_LOCAL through DRM_BO_FLAG_MEM_PRIV4
+ */
+#define DRM_BO_MASK_MEM 0x00000000FF000000ULL
+/*
+ * This adds all of the CPU-mapping options in with the memory
+ * type to label all bits which change how the page gets mapped
+ */
+#define DRM_BO_MASK_MEMTYPE (DRM_BO_MASK_MEM | \
+ DRM_BO_FLAG_CACHED_MAPPED | \
+ DRM_BO_FLAG_CACHED | \
+ DRM_BO_FLAG_MAPPABLE)
+
+/* Driver-private flags */
+#define DRM_BO_MASK_DRIVER 0xFFFF000000000000ULL
+
+/*
+ * Don't block on validate and map. Instead, return EBUSY.
+ */
+#define DRM_BO_HINT_DONT_BLOCK 0x00000002
+/*
+ * Don't place this buffer on the unfenced list. This means
+ * that the buffer will not end up having a fence associated
+ * with it as a result of this operation
+ */
+#define DRM_BO_HINT_DONT_FENCE 0x00000004
+/**
+ * On hardware with no interrupt events for operation completion,
+ * indicates that the kernel should sleep while waiting for any blocking
+ * operation to complete rather than spinning.
+ *
+ * Has no effect otherwise.
+ */
+#define DRM_BO_HINT_WAIT_LAZY 0x00000008
+/*
+ * The client has compute relocations refering to this buffer using the
+ * offset in the presumed_offset field. If that offset ends up matching
+ * where this buffer lands, the kernel is free to skip executing those
+ * relocations
+ */
+#define DRM_BO_HINT_PRESUMED_OFFSET 0x00000010
+
+#define DRM_BO_INIT_MAGIC 0xfe769812
+#define DRM_BO_INIT_MAJOR 1
+#define DRM_BO_INIT_MINOR 0
+#define DRM_BO_INIT_PATCH 0
+
+
+struct drm_bo_info_req {
+ uint64_t mask;
+ uint64_t flags;
+ unsigned int handle;
+ unsigned int hint;
+ unsigned int fence_class;
+ unsigned int desired_tile_stride;
+ unsigned int tile_info;
+ unsigned int pad64;
+ uint64_t presumed_offset;
+};
+
+struct drm_bo_create_req {
+ uint64_t flags;
+ uint64_t size;
+ uint64_t buffer_start;
+ unsigned int hint;
+ unsigned int page_alignment;
+};
+
+
+/*
+ * Reply flags
+ */
+
+#define DRM_BO_REP_BUSY 0x00000001
+
+struct drm_bo_info_rep {
+ uint64_t flags;
+ uint64_t proposed_flags;
+ uint64_t size;
+ uint64_t offset;
+ uint64_t arg_handle;
+ uint64_t buffer_start;
+ unsigned int handle;
+ unsigned int fence_flags;
+ unsigned int rep_flags;
+ unsigned int page_alignment;
+ unsigned int desired_tile_stride;
+ unsigned int hw_tile_stride;
+ unsigned int tile_info;
+ unsigned int pad64;
+ uint64_t expand_pad[4]; /*Future expansion */
+};
+
+struct drm_bo_arg_rep {
+ struct drm_bo_info_rep bo_info;
+ int ret;
+ unsigned int pad64;
+};
+
+struct drm_bo_create_arg {
+ union {
+ struct drm_bo_create_req req;
+ struct drm_bo_info_rep rep;
+ } d;
+};
+
+struct drm_bo_handle_arg {
+ unsigned int handle;
+};
+
+struct drm_bo_reference_info_arg {
+ union {
+ struct drm_bo_handle_arg req;
+ struct drm_bo_info_rep rep;
+ } d;
+};
+
+struct drm_bo_map_wait_idle_arg {
+ union {
+ struct drm_bo_info_req req;
+ struct drm_bo_info_rep rep;
+ } d;
+};
+
+struct drm_bo_op_req {
+ enum {
+ drm_bo_validate,
+ drm_bo_fence,
+ drm_bo_ref_fence,
+ } op;
+ unsigned int arg_handle;
+ struct drm_bo_info_req bo_req;
+};
+
+
+struct drm_bo_op_arg {
+ uint64_t next;
+ union {
+ struct drm_bo_op_req req;
+ struct drm_bo_arg_rep rep;
+ } d;
+ int handled;
+ unsigned int pad64;
+};
+
+
+#define DRM_BO_MEM_LOCAL 0
+#define DRM_BO_MEM_TT 1
+#define DRM_BO_MEM_VRAM 2
+#define DRM_BO_MEM_PRIV0 3
+#define DRM_BO_MEM_PRIV1 4
+#define DRM_BO_MEM_PRIV2 5
+#define DRM_BO_MEM_PRIV3 6
+#define DRM_BO_MEM_PRIV4 7
+
+#define DRM_BO_MEM_TYPES 8 /* For now. */
+
+#define DRM_BO_LOCK_UNLOCK_BM (1 << 0)
+#define DRM_BO_LOCK_IGNORE_NO_EVICT (1 << 1)
+
+struct drm_bo_version_arg {
+ uint32_t major;
+ uint32_t minor;
+ uint32_t patchlevel;
+};
+
+struct drm_mm_type_arg {
+ unsigned int mem_type;
+ unsigned int lock_flags;
+};
+
+struct drm_mm_init_arg {
+ unsigned int magic;
+ unsigned int major;
+ unsigned int minor;
+ unsigned int mem_type;
+ uint64_t p_offset;
+ uint64_t p_size;
+};
+
+struct drm_mm_info_arg {
+ unsigned int mem_type;
+ uint64_t p_size;
+};
+
+struct drm_gem_close {
+ /** Handle of the object to be closed. */
+ uint32_t handle;
+ uint32_t pad;
+};
+
+struct drm_gem_flink {
+ /** Handle for the object being named */
+ uint32_t handle;
+
+ /** Returned global name */
+ uint32_t name;
+};
+
+struct drm_gem_open {
+ /** Name of object being opened */
+ uint32_t name;
+
+ /** Returned handle for the object */
+ uint32_t handle;
+
+ /** Returned size of the object */
+ uint64_t size;
+};
+
+struct drm_get_cap {
+ uint64_t capability;
+ uint64_t value;
+};
+
+struct drm_event {
+ uint32_t type;
+ uint32_t length;
+};
+
+#define DRM_EVENT_VBLANK 0x01
+#define DRM_EVENT_FLIP_COMPLETE 0x02
+
+struct drm_event_vblank {
+ struct drm_event base;
+ uint64_t user_data;
+ uint32_t tv_sec;
+ uint32_t tv_usec;
+ uint32_t sequence;
+ uint32_t reserved;
+};
+
+#define DRM_CAP_DUMB_BUFFER 0x1
+#define DRM_CAP_VBLANK_HIGH_CRTC 0x2
+#define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3
+#define DRM_CAP_DUMB_PREFER_SHADOW 0x4
+
+#include "drm_mode.h"
+
+/**
+ * \name Ioctls Definitions
+ */
+/*@{*/
+
+#define DRM_IOCTL_BASE 'd'
+#define DRM_IO(nr) _IO(DRM_IOCTL_BASE,nr)
+#define DRM_IOR(nr,type) _IOR(DRM_IOCTL_BASE,nr,type)
+#define DRM_IOW(nr,type) _IOW(DRM_IOCTL_BASE,nr,type)
+#define DRM_IOWR(nr,type) _IOWR(DRM_IOCTL_BASE,nr,type)
+
+#define DRM_IOCTL_VERSION DRM_IOWR(0x00, struct drm_version)
+#define DRM_IOCTL_GET_UNIQUE DRM_IOWR(0x01, struct drm_unique)
+#define DRM_IOCTL_GET_MAGIC DRM_IOR( 0x02, struct drm_auth)
+#define DRM_IOCTL_IRQ_BUSID DRM_IOWR(0x03, struct drm_irq_busid)
+#define DRM_IOCTL_GET_MAP DRM_IOWR(0x04, struct drm_map)
+#define DRM_IOCTL_GET_CLIENT DRM_IOWR(0x05, struct drm_client)
+#define DRM_IOCTL_GET_STATS DRM_IOR( 0x06, struct drm_stats)
+#define DRM_IOCTL_SET_VERSION DRM_IOWR(0x07, struct drm_set_version)
+#define DRM_IOCTL_MODESET_CTL DRM_IOW(0x08, struct drm_modeset_ctl)
+
+#define DRM_IOCTL_GEM_CLOSE DRM_IOW (0x09, struct drm_gem_close)
+#define DRM_IOCTL_GEM_FLINK DRM_IOWR(0x0a, struct drm_gem_flink)
+#define DRM_IOCTL_GEM_OPEN DRM_IOWR(0x0b, struct drm_gem_open)
+
+#define DRM_IOCTL_GET_CAP DRM_IOWR(0x0c, struct drm_get_cap)
+
+#define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, struct drm_unique)
+#define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, struct drm_auth)
+#define DRM_IOCTL_BLOCK DRM_IOWR(0x12, struct drm_block)
+#define DRM_IOCTL_UNBLOCK DRM_IOWR(0x13, struct drm_block)
+#define DRM_IOCTL_CONTROL DRM_IOW( 0x14, struct drm_control)
+#define DRM_IOCTL_ADD_MAP DRM_IOWR(0x15, struct drm_map)
+#define DRM_IOCTL_ADD_BUFS DRM_IOWR(0x16, struct drm_buf_desc)
+#define DRM_IOCTL_MARK_BUFS DRM_IOW( 0x17, struct drm_buf_desc)
+#define DRM_IOCTL_INFO_BUFS DRM_IOWR(0x18, struct drm_buf_info)
+#define DRM_IOCTL_MAP_BUFS DRM_IOWR(0x19, struct drm_buf_map)
+#define DRM_IOCTL_FREE_BUFS DRM_IOW( 0x1a, struct drm_buf_free)
+
+#define DRM_IOCTL_RM_MAP DRM_IOW( 0x1b, struct drm_map)
+
+#define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map)
+#define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map)
+
+#define DRM_IOCTL_SET_MASTER DRM_IO(0x1e)
+#define DRM_IOCTL_DROP_MASTER DRM_IO(0x1f)
+
+#define DRM_IOCTL_ADD_CTX DRM_IOWR(0x20, struct drm_ctx)
+#define DRM_IOCTL_RM_CTX DRM_IOWR(0x21, struct drm_ctx)
+#define DRM_IOCTL_MOD_CTX DRM_IOW( 0x22, struct drm_ctx)
+#define DRM_IOCTL_GET_CTX DRM_IOWR(0x23, struct drm_ctx)
+#define DRM_IOCTL_SWITCH_CTX DRM_IOW( 0x24, struct drm_ctx)
+#define DRM_IOCTL_NEW_CTX DRM_IOW( 0x25, struct drm_ctx)
+#define DRM_IOCTL_RES_CTX DRM_IOWR(0x26, struct drm_ctx_res)
+#define DRM_IOCTL_ADD_DRAW DRM_IOWR(0x27, struct drm_draw)
+#define DRM_IOCTL_RM_DRAW DRM_IOWR(0x28, struct drm_draw)
+#define DRM_IOCTL_DMA DRM_IOWR(0x29, struct drm_dma)
+#define DRM_IOCTL_LOCK DRM_IOW( 0x2a, struct drm_lock)
+#define DRM_IOCTL_UNLOCK DRM_IOW( 0x2b, struct drm_lock)
+#define DRM_IOCTL_FINISH DRM_IOW( 0x2c, struct drm_lock)
+
+#define DRM_IOCTL_GEM_PRIME_OPEN DRM_IOWR(0x2e, struct drm_gem_open)
+
+#define DRM_IOCTL_AGP_ACQUIRE DRM_IO( 0x30)
+#define DRM_IOCTL_AGP_RELEASE DRM_IO( 0x31)
+#define DRM_IOCTL_AGP_ENABLE DRM_IOW( 0x32, struct drm_agp_mode)
+#define DRM_IOCTL_AGP_INFO DRM_IOR( 0x33, struct drm_agp_info)
+#define DRM_IOCTL_AGP_ALLOC DRM_IOWR(0x34, struct drm_agp_buffer)
+#define DRM_IOCTL_AGP_FREE DRM_IOW( 0x35, struct drm_agp_buffer)
+#define DRM_IOCTL_AGP_BIND DRM_IOW( 0x36, struct drm_agp_binding)
+#define DRM_IOCTL_AGP_UNBIND DRM_IOW( 0x37, struct drm_agp_binding)
+
+#define DRM_IOCTL_SG_ALLOC DRM_IOWR(0x38, struct drm_scatter_gather)
+#define DRM_IOCTL_SG_FREE DRM_IOW( 0x39, struct drm_scatter_gather)
+
+#define DRM_IOCTL_WAIT_VBLANK DRM_IOWR(0x3a, union drm_wait_vblank)
+
+#define DRM_IOCTL_UPDATE_DRAW DRM_IOW(0x3f, struct drm_update_draw)
+
+#define DRM_IOCTL_MODE_GETRESOURCES DRM_IOWR(0xA0, struct drm_mode_card_res)
+#define DRM_IOCTL_MODE_GETCRTC DRM_IOWR(0xA1, struct drm_mode_crtc)
+#define DRM_IOCTL_MODE_SETCRTC DRM_IOWR(0xA2, struct drm_mode_crtc)
+#define DRM_IOCTL_MODE_CURSOR DRM_IOWR(0xA3, struct drm_mode_cursor)
+#define DRM_IOCTL_MODE_GETGAMMA DRM_IOWR(0xA4, struct drm_mode_crtc_lut)
+#define DRM_IOCTL_MODE_SETGAMMA DRM_IOWR(0xA5, struct drm_mode_crtc_lut)
+#define DRM_IOCTL_MODE_GETENCODER DRM_IOWR(0xA6, struct drm_mode_get_encoder)
+#define DRM_IOCTL_MODE_GETCONNECTOR DRM_IOWR(0xA7, struct drm_mode_get_connector)
+#define DRM_IOCTL_MODE_ATTACHMODE DRM_IOWR(0xA8, struct drm_mode_mode_cmd)
+#define DRM_IOCTL_MODE_DETACHMODE DRM_IOWR(0xA9, struct drm_mode_mode_cmd)
+
+#define DRM_IOCTL_MODE_GETPROPERTY DRM_IOWR(0xAA, struct drm_mode_get_property)
+#define DRM_IOCTL_MODE_SETPROPERTY DRM_IOWR(0xAB, struct drm_mode_connector_set_property)
+#define DRM_IOCTL_MODE_GETPROPBLOB DRM_IOWR(0xAC, struct drm_mode_get_blob)
+#define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
+#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
+#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int)
+#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip)
+#define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd)
+
+#define DRM_IOCTL_MODE_CREATE_DUMB DRM_IOWR(0xB2, struct drm_mode_create_dumb)
+#define DRM_IOCTL_MODE_MAP_DUMB DRM_IOWR(0xB3, struct drm_mode_map_dumb)
+#define DRM_IOCTL_MODE_DESTROY_DUMB DRM_IOWR(0xB4, struct drm_mode_destroy_dumb)
+#define DRM_IOCTL_MODE_GETPLANERESOURCES DRM_IOWR(0xB5, struct drm_mode_get_plane_res)
+#define DRM_IOCTL_MODE_GETPLANE DRM_IOWR(0xB6, struct drm_mode_get_plane)
+#define DRM_IOCTL_MODE_SETPLANE DRM_IOWR(0xB7, struct drm_mode_set_plane)
+#define DRM_IOCTL_MODE_ADDFB2 DRM_IOWR(0xB8, struct drm_mode_fb_cmd2)
+
+#define DRM_IOCTL_MM_INIT DRM_IOWR(0xc0, struct drm_mm_init_arg)
+#define DRM_IOCTL_MM_TAKEDOWN DRM_IOWR(0xc1, struct drm_mm_type_arg)
+#define DRM_IOCTL_MM_LOCK DRM_IOWR(0xc2, struct drm_mm_type_arg)
+#define DRM_IOCTL_MM_UNLOCK DRM_IOWR(0xc3, struct drm_mm_type_arg)
+
+#define DRM_IOCTL_FENCE_CREATE DRM_IOWR(0xc4, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_REFERENCE DRM_IOWR(0xc6, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_UNREFERENCE DRM_IOWR(0xc7, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_SIGNALED DRM_IOWR(0xc8, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_FLUSH DRM_IOWR(0xc9, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_WAIT DRM_IOWR(0xca, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_EMIT DRM_IOWR(0xcb, struct drm_fence_arg)
+#define DRM_IOCTL_FENCE_BUFFERS DRM_IOWR(0xcc, struct drm_fence_arg)
+
+#define DRM_IOCTL_BO_CREATE DRM_IOWR(0xcd, struct drm_bo_create_arg)
+#define DRM_IOCTL_BO_MAP DRM_IOWR(0xcf, struct drm_bo_map_wait_idle_arg)
+#define DRM_IOCTL_BO_UNMAP DRM_IOWR(0xd0, struct drm_bo_handle_arg)
+#define DRM_IOCTL_BO_REFERENCE DRM_IOWR(0xd1, struct drm_bo_reference_info_arg)
+#define DRM_IOCTL_BO_UNREFERENCE DRM_IOWR(0xd2, struct drm_bo_handle_arg)
+#define DRM_IOCTL_BO_SETSTATUS DRM_IOWR(0xd3, struct drm_bo_map_wait_idle_arg)
+#define DRM_IOCTL_BO_INFO DRM_IOWR(0xd4, struct drm_bo_reference_info_arg)
+#define DRM_IOCTL_BO_WAIT_IDLE DRM_IOWR(0xd5, struct drm_bo_map_wait_idle_arg)
+#define DRM_IOCTL_BO_VERSION DRM_IOR(0xd6, struct drm_bo_version_arg)
+#define DRM_IOCTL_MM_INFO DRM_IOWR(0xd7, struct drm_mm_info_arg)
+
+/*@}*/
+
+/**
+ * Device specific ioctls should only be in their respective headers
+ * The device specific ioctl range is from 0x40 to 0x99.
+ * Generic IOCTLS restart at 0xA0.
+ *
+ * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and
+ * drmCommandReadWrite().
+ */
+#define DRM_COMMAND_BASE 0x40
+#define DRM_COMMAND_END 0xA0
+
+/* typedef area */
+#ifndef __KERNEL__
+typedef struct drm_clip_rect drm_clip_rect_t;
+typedef struct drm_tex_region drm_tex_region_t;
+typedef struct drm_hw_lock drm_hw_lock_t;
+typedef struct drm_version drm_version_t;
+typedef struct drm_unique drm_unique_t;
+typedef struct drm_list drm_list_t;
+typedef struct drm_block drm_block_t;
+typedef struct drm_control drm_control_t;
+typedef enum drm_map_type drm_map_type_t;
+typedef enum drm_map_flags drm_map_flags_t;
+typedef struct drm_ctx_priv_map drm_ctx_priv_map_t;
+typedef struct drm_map drm_map_t;
+typedef struct drm_client drm_client_t;
+typedef enum drm_stat_type drm_stat_type_t;
+typedef struct drm_stats drm_stats_t;
+typedef enum drm_lock_flags drm_lock_flags_t;
+typedef struct drm_lock drm_lock_t;
+typedef enum drm_dma_flags drm_dma_flags_t;
+typedef struct drm_buf_desc drm_buf_desc_t;
+typedef struct drm_buf_info drm_buf_info_t;
+typedef struct drm_buf_free drm_buf_free_t;
+typedef struct drm_buf_pub drm_buf_pub_t;
+typedef struct drm_buf_map drm_buf_map_t;
+typedef struct drm_dma drm_dma_t;
+typedef union drm_wait_vblank drm_wait_vblank_t;
+typedef struct drm_agp_mode drm_agp_mode_t;
+typedef enum drm_ctx_flags drm_ctx_flags_t;
+typedef struct drm_ctx drm_ctx_t;
+typedef struct drm_ctx_res drm_ctx_res_t;
+typedef struct drm_draw drm_draw_t;
+typedef struct drm_update_draw drm_update_draw_t;
+typedef struct drm_auth drm_auth_t;
+typedef struct drm_irq_busid drm_irq_busid_t;
+typedef enum drm_vblank_seq_type drm_vblank_seq_type_t;
+typedef struct drm_agp_buffer drm_agp_buffer_t;
+typedef struct drm_agp_binding drm_agp_binding_t;
+typedef struct drm_agp_info drm_agp_info_t;
+typedef struct drm_scatter_gather drm_scatter_gather_t;
+typedef struct drm_set_version drm_set_version_t;
+
+typedef struct drm_fence_arg drm_fence_arg_t;
+typedef struct drm_mm_type_arg drm_mm_type_arg_t;
+typedef struct drm_mm_init_arg drm_mm_init_arg_t;
+typedef enum drm_bo_type drm_bo_type_t;
+#endif
+
+#endif
diff --git a/sys/dev/drm2/drmP.h b/sys/dev/drm2/drmP.h
new file mode 100644
index 000000000000..f216d035a0cd
--- /dev/null
+++ b/sys/dev/drm2/drmP.h
@@ -0,0 +1,1400 @@
+/* drmP.h -- Private header for Direct Rendering Manager -*- linux-c -*-
+ * Created: Mon Jan 4 10:05:05 1999 by faith@precisioninsight.com
+ */
+/*-
+ * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#ifndef _DRM_P_H_
+#define _DRM_P_H_
+
+#if defined(_KERNEL) || defined(__KERNEL__)
+
+struct drm_device;
+struct drm_file;
+
+#include <sys/param.h>
+#include <sys/queue.h>
+#include <sys/malloc.h>
+#include <sys/kernel.h>
+#include <sys/ktr.h>
+#include <sys/module.h>
+#include <sys/systm.h>
+#include <sys/conf.h>
+#include <sys/sglist.h>
+#include <sys/stat.h>
+#include <sys/priv.h>
+#include <sys/proc.h>
+#include <sys/lock.h>
+#include <sys/fcntl.h>
+#include <sys/uio.h>
+#include <sys/filio.h>
+#include <sys/selinfo.h>
+#include <sys/sysctl.h>
+#include <sys/bus.h>
+#include <sys/queue.h>
+#include <sys/signalvar.h>
+#include <sys/poll.h>
+#include <sys/sbuf.h>
+#include <sys/taskqueue.h>
+#include <sys/tree.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_map.h>
+#include <vm/vm_object.h>
+#include <vm/vm_page.h>
+#include <vm/vm_pager.h>
+#include <vm/vm_param.h>
+#include <vm/vm_phys.h>
+#include <machine/param.h>
+#include <machine/pmap.h>
+#include <machine/bus.h>
+#include <machine/resource.h>
+#if defined(__i386__) || defined(__amd64__)
+#include <machine/specialreg.h>
+#endif
+#include <machine/sysarch.h>
+#include <sys/endian.h>
+#include <sys/mman.h>
+#include <sys/rman.h>
+#include <sys/memrange.h>
+#include <dev/agp/agpvar.h>
+#include <sys/agpio.h>
+#include <sys/mutex.h>
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcireg.h>
+#include <sys/selinfo.h>
+#include <sys/bus.h>
+
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_atomic.h>
+#include <dev/drm2/drm_internal.h>
+#include <dev/drm2/drm_linux_list.h>
+#include <dev/drm2/drm_gem_names.h>
+#include <dev/drm2/drm_mm.h>
+#include <dev/drm2/drm_hashtab.h>
+
+#include "opt_drm.h"
+#ifdef DRM_DEBUG
+#undef DRM_DEBUG
+#define DRM_DEBUG_DEFAULT_ON 1
+#endif /* DRM_DEBUG */
+
+#define DRM_DEBUGBITS_DEBUG 0x1
+#define DRM_DEBUGBITS_KMS 0x2
+#define DRM_DEBUGBITS_FAILED_IOCTL 0x4
+
+#undef DRM_LINUX
+#define DRM_LINUX 0
+
+/* driver capabilities and requirements mask */
+#define DRIVER_USE_AGP 0x1
+#define DRIVER_REQUIRE_AGP 0x2
+#define DRIVER_USE_MTRR 0x4
+#define DRIVER_PCI_DMA 0x8
+#define DRIVER_SG 0x10
+#define DRIVER_HAVE_DMA 0x20
+#define DRIVER_HAVE_IRQ 0x40
+#define DRIVER_IRQ_SHARED 0x80
+#define DRIVER_IRQ_VBL 0x100
+#define DRIVER_DMA_QUEUE 0x200
+#define DRIVER_FB_DMA 0x400
+#define DRIVER_IRQ_VBL2 0x800
+#define DRIVER_GEM 0x1000
+#define DRIVER_MODESET 0x2000
+#define DRIVER_USE_PLATFORM_DEVICE 0x4000
+#define DRIVER_LOCKLESS_IRQ 0x8000
+
+
+#define DRM_HASH_SIZE 16 /* Size of key hash table */
+#define DRM_KERNEL_CONTEXT 0 /* Change drm_resctx if changed */
+#define DRM_RESERVED_CONTEXTS 1 /* Change drm_resctx if changed */
+
+#define DRM_GEM_MAPPING_MASK (3ULL << 62)
+#define DRM_GEM_MAPPING_KEY (2ULL << 62) /* Non-canonical address form */
+#define DRM_GEM_MAX_IDX 0x3fffff
+#define DRM_GEM_MAPPING_IDX(o) (((o) >> 40) & DRM_GEM_MAX_IDX)
+#define DRM_GEM_MAPPING_OFF(i) (((uint64_t)(i)) << 40)
+#define DRM_GEM_MAPPING_MAPOFF(o) \
+ ((o) & ~(DRM_GEM_MAPPING_OFF(DRM_GEM_MAX_IDX) | DRM_GEM_MAPPING_KEY))
+
+MALLOC_DECLARE(DRM_MEM_DMA);
+MALLOC_DECLARE(DRM_MEM_SAREA);
+MALLOC_DECLARE(DRM_MEM_DRIVER);
+MALLOC_DECLARE(DRM_MEM_MAGIC);
+MALLOC_DECLARE(DRM_MEM_IOCTLS);
+MALLOC_DECLARE(DRM_MEM_MAPS);
+MALLOC_DECLARE(DRM_MEM_BUFS);
+MALLOC_DECLARE(DRM_MEM_SEGS);
+MALLOC_DECLARE(DRM_MEM_PAGES);
+MALLOC_DECLARE(DRM_MEM_FILES);
+MALLOC_DECLARE(DRM_MEM_QUEUES);
+MALLOC_DECLARE(DRM_MEM_CMDS);
+MALLOC_DECLARE(DRM_MEM_MAPPINGS);
+MALLOC_DECLARE(DRM_MEM_BUFLISTS);
+MALLOC_DECLARE(DRM_MEM_AGPLISTS);
+MALLOC_DECLARE(DRM_MEM_CTXBITMAP);
+MALLOC_DECLARE(DRM_MEM_SGLISTS);
+MALLOC_DECLARE(DRM_MEM_DRAWABLE);
+MALLOC_DECLARE(DRM_MEM_MM);
+MALLOC_DECLARE(DRM_MEM_HASHTAB);
+MALLOC_DECLARE(DRM_MEM_KMS);
+
+SYSCTL_DECL(_hw_drm);
+
+#define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8)
+
+ /* Internal types and structures */
+#define DRM_ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
+#define DRM_MIN(a,b) ((a)<(b)?(a):(b))
+#define DRM_MAX(a,b) ((a)>(b)?(a):(b))
+
+#define DRM_IF_VERSION(maj, min) (maj << 16 | min)
+
+#define __OS_HAS_AGP 1
+
+#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
+#define DRM_DEV_UID 0
+#define DRM_DEV_GID 0
+
+#define wait_queue_head_t atomic_t
+#define DRM_WAKEUP(w) wakeup((void *)w)
+#define DRM_WAKEUP_INT(w) wakeup(w)
+#define DRM_INIT_WAITQUEUE(queue) do {(void)(queue);} while (0)
+
+#define DRM_CURPROC curthread
+#define DRM_STRUCTPROC struct thread
+#define DRM_SPINTYPE struct mtx
+#define DRM_SPININIT(l,name) mtx_init(l, name, NULL, MTX_DEF)
+#define DRM_SPINUNINIT(l) mtx_destroy(l)
+#define DRM_SPINLOCK(l) mtx_lock(l)
+#define DRM_SPINUNLOCK(u) mtx_unlock(u)
+#define DRM_SPINLOCK_IRQSAVE(l, irqflags) do { \
+ mtx_lock(l); \
+ (void)irqflags; \
+} while (0)
+#define DRM_SPINUNLOCK_IRQRESTORE(u, irqflags) mtx_unlock(u)
+#define DRM_SPINLOCK_ASSERT(l) mtx_assert(l, MA_OWNED)
+#define DRM_CURRENTPID curthread->td_proc->p_pid
+#define DRM_LOCK(dev) sx_xlock(&(dev)->dev_struct_lock)
+#define DRM_UNLOCK(dev) sx_xunlock(&(dev)->dev_struct_lock)
+#define DRM_LOCK_SLEEP(dev, chan, flags, msg, timeout) \
+ (sx_sleep((chan), &(dev)->dev_struct_lock, (flags), (msg), (timeout)))
+#if defined(INVARIANTS)
+#define DRM_LOCK_ASSERT(dev) sx_assert(&(dev)->dev_struct_lock, SA_XLOCKED)
+#define DRM_UNLOCK_ASSERT(dev) sx_assert(&(dev)->dev_struct_lock, SA_UNLOCKED)
+#else
+#define DRM_LOCK_ASSERT(d)
+#define DRM_UNLOCK_ASSERT(d)
+#endif
+
+#define DRM_SYSCTL_HANDLER_ARGS (SYSCTL_HANDLER_ARGS)
+
+#define DRM_IRQ_ARGS void *arg
+typedef void irqreturn_t;
+#define IRQ_HANDLED /* nothing */
+#define IRQ_NONE /* nothing */
+
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#define container_of(ptr, type, member) ({ \
+ __typeof( ((type *)0)->member ) *__mptr = (ptr); \
+ (type *)( (char *)__mptr - offsetof(type,member) );})
+
+enum {
+ DRM_IS_NOT_AGP,
+ DRM_IS_AGP,
+ DRM_MIGHT_BE_AGP
+};
+#define DRM_AGP_MEM struct agp_memory_info
+
+#define drm_get_device_from_kdev(_kdev) (_kdev->si_drv1)
+
+#define PAGE_ALIGN(addr) round_page(addr)
+/* DRM_SUSER returns true if the user is superuser */
+#define DRM_SUSER(p) (priv_check(p, PRIV_DRIVER) == 0)
+#define DRM_AGP_FIND_DEVICE() agp_find_device()
+#define DRM_MTRR_WC MDF_WRITECOMBINE
+#define jiffies ticks
+#define jiffies_to_msecs(x) (((int64_t)(x)) * 1000 / hz)
+#define msecs_to_jiffies(x) (((int64_t)(x)) * hz / 1000)
+#define time_after(a,b) ((long)(b) - (long)(a) < 0)
+#define time_after_eq(a,b) ((long)(b) - (long)(a) <= 0)
+#define drm_msleep(x, msg) pause((msg), ((int64_t)(x)) * 1000 / hz)
+
+typedef vm_paddr_t dma_addr_t;
+typedef uint64_t u64;
+typedef uint32_t u32;
+typedef uint16_t u16;
+typedef uint8_t u8;
+typedef int64_t s64;
+typedef int32_t s32;
+typedef int16_t s16;
+typedef int8_t s8;
+
+/* DRM_READMEMORYBARRIER() prevents reordering of reads.
+ * DRM_WRITEMEMORYBARRIER() prevents reordering of writes.
+ * DRM_MEMORYBARRIER() prevents reordering of reads and writes.
+ */
+#define DRM_READMEMORYBARRIER() rmb()
+#define DRM_WRITEMEMORYBARRIER() wmb()
+#define DRM_MEMORYBARRIER() mb()
+
+#define DRM_READ8(map, offset) \
+ *(volatile u_int8_t *)(((vm_offset_t)(map)->virtual) + \
+ (vm_offset_t)(offset))
+#define DRM_READ16(map, offset) \
+ le16toh(*(volatile u_int16_t *)(((vm_offset_t)(map)->virtual) + \
+ (vm_offset_t)(offset)))
+#define DRM_READ32(map, offset) \
+ le32toh(*(volatile u_int32_t *)(((vm_offset_t)(map)->virtual) + \
+ (vm_offset_t)(offset)))
+#define DRM_READ64(map, offset) \
+ le64toh(*(volatile u_int64_t *)(((vm_offset_t)(map)->virtual) + \
+ (vm_offset_t)(offset)))
+#define DRM_WRITE8(map, offset, val) \
+ *(volatile u_int8_t *)(((vm_offset_t)(map)->virtual) + \
+ (vm_offset_t)(offset)) = val
+#define DRM_WRITE16(map, offset, val) \
+ *(volatile u_int16_t *)(((vm_offset_t)(map)->virtual) + \
+ (vm_offset_t)(offset)) = htole16(val)
+#define DRM_WRITE32(map, offset, val) \
+ *(volatile u_int32_t *)(((vm_offset_t)(map)->virtual) + \
+ (vm_offset_t)(offset)) = htole32(val)
+#define DRM_WRITE64(map, offset, val) \
+ *(volatile u_int64_t *)(((vm_offset_t)(map)->virtual) + \
+ (vm_offset_t)(offset)) = htole64(val)
+
+#define DRM_VERIFYAREA_READ( uaddr, size ) \
+ (!useracc(__DECONST(caddr_t, uaddr), size, VM_PROT_READ))
+
+#define DRM_COPY_TO_USER(user, kern, size) \
+ copyout(kern, user, size)
+#define DRM_COPY_FROM_USER(kern, user, size) \
+ copyin(user, kern, size)
+#define DRM_COPY_FROM_USER_UNCHECKED(arg1, arg2, arg3) \
+ copyin(arg2, arg1, arg3)
+#define DRM_COPY_TO_USER_UNCHECKED(arg1, arg2, arg3) \
+ copyout(arg2, arg1, arg3)
+#define DRM_GET_USER_UNCHECKED(val, uaddr) \
+ ((val) = fuword32(uaddr), 0)
+
+#define cpu_to_le32(x) htole32(x)
+#define le32_to_cpu(x) le32toh(x)
+
+#define DRM_HZ hz
+#define DRM_UDELAY(udelay) DELAY(udelay)
+#define DRM_TIME_SLICE (hz/20) /* Time slice for GLXContexts */
+
+#define DRM_GET_PRIV_SAREA(_dev, _ctx, _map) do { \
+ (_map) = (_dev)->context_sareas[_ctx]; \
+} while(0)
+
+#define LOCK_TEST_WITH_RETURN(dev, file_priv) \
+do { \
+ if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) || \
+ dev->lock.file_priv != file_priv) { \
+ DRM_ERROR("%s called without lock held\n", \
+ __FUNCTION__); \
+ return EINVAL; \
+ } \
+} while (0)
+
+/* Returns -errno to shared code */
+#define DRM_WAIT_ON( ret, queue, timeout, condition ) \
+for ( ret = 0 ; !ret && !(condition) ; ) { \
+ DRM_UNLOCK(dev); \
+ mtx_lock(&dev->irq_lock); \
+ if (!(condition)) \
+ ret = -mtx_sleep(&(queue), &dev->irq_lock, \
+ PCATCH, "drmwtq", (timeout)); \
+ mtx_unlock(&dev->irq_lock); \
+ DRM_LOCK(dev); \
+}
+
+#define DRM_ERROR(fmt, ...) \
+ printf("error: [" DRM_NAME ":pid%d:%s] *ERROR* " fmt, \
+ DRM_CURRENTPID, __func__ , ##__VA_ARGS__)
+
+#define DRM_INFO(fmt, ...) printf("info: [" DRM_NAME "] " fmt , ##__VA_ARGS__)
+
+#define DRM_DEBUG(fmt, ...) do { \
+ if ((drm_debug_flag & DRM_DEBUGBITS_DEBUG) != 0) \
+ printf("[" DRM_NAME ":pid%d:%s] " fmt, DRM_CURRENTPID, \
+ __func__ , ##__VA_ARGS__); \
+} while (0)
+
+#define DRM_DEBUG_KMS(fmt, ...) do { \
+ if ((drm_debug_flag & DRM_DEBUGBITS_KMS) != 0) \
+ printf("[" DRM_NAME ":KMS:pid%d:%s] " fmt, DRM_CURRENTPID,\
+ __func__ , ##__VA_ARGS__); \
+} while (0)
+
+#define DRM_DEBUG_DRIVER(fmt, ...) do { \
+ if ((drm_debug_flag & DRM_DEBUGBITS_KMS) != 0) \
+ printf("[" DRM_NAME ":KMS:pid%d:%s] " fmt, DRM_CURRENTPID,\
+ __func__ , ##__VA_ARGS__); \
+} while (0)
+
+typedef struct drm_pci_id_list
+{
+ int vendor;
+ int device;
+ long driver_private;
+ char *name;
+} drm_pci_id_list_t;
+
+struct drm_msi_blacklist_entry
+{
+ int vendor;
+ int device;
+};
+
+#define DRM_AUTH 0x1
+#define DRM_MASTER 0x2
+#define DRM_ROOT_ONLY 0x4
+#define DRM_CONTROL_ALLOW 0x8
+#define DRM_UNLOCKED 0x10
+
+typedef struct drm_ioctl_desc {
+ unsigned long cmd;
+ int (*func)(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+ int flags;
+} drm_ioctl_desc_t;
+/**
+ * Creates a driver or general drm_ioctl_desc array entry for the given
+ * ioctl, for use by drm_ioctl().
+ */
+#define DRM_IOCTL_DEF(ioctl, func, flags) \
+ [DRM_IOCTL_NR(ioctl)] = {ioctl, func, flags}
+
+typedef struct drm_magic_entry {
+ drm_magic_t magic;
+ struct drm_file *priv;
+ struct drm_magic_entry *next;
+} drm_magic_entry_t;
+
+typedef struct drm_magic_head {
+ struct drm_magic_entry *head;
+ struct drm_magic_entry *tail;
+} drm_magic_head_t;
+
+typedef struct drm_buf {
+ int idx; /* Index into master buflist */
+ int total; /* Buffer size */
+ int order; /* log-base-2(total) */
+ int used; /* Amount of buffer in use (for DMA) */
+ unsigned long offset; /* Byte offset (used internally) */
+ void *address; /* Address of buffer */
+ unsigned long bus_address; /* Bus address of buffer */
+ struct drm_buf *next; /* Kernel-only: used for free list */
+ __volatile__ int pending; /* On hardware DMA queue */
+ struct drm_file *file_priv; /* Unique identifier of holding process */
+ int context; /* Kernel queue for this buffer */
+ enum {
+ DRM_LIST_NONE = 0,
+ DRM_LIST_FREE = 1,
+ DRM_LIST_WAIT = 2,
+ DRM_LIST_PEND = 3,
+ DRM_LIST_PRIO = 4,
+ DRM_LIST_RECLAIM = 5
+ } list; /* Which list we're on */
+
+ int dev_priv_size; /* Size of buffer private stoarge */
+ void *dev_private; /* Per-buffer private storage */
+} drm_buf_t;
+
+typedef struct drm_freelist {
+ int initialized; /* Freelist in use */
+ atomic_t count; /* Number of free buffers */
+ drm_buf_t *next; /* End pointer */
+
+ int low_mark; /* Low water mark */
+ int high_mark; /* High water mark */
+} drm_freelist_t;
+
+typedef struct drm_dma_handle {
+ void *vaddr;
+ bus_addr_t busaddr;
+ bus_dma_tag_t tag;
+ bus_dmamap_t map;
+} drm_dma_handle_t;
+
+typedef struct drm_buf_entry {
+ int buf_size;
+ int buf_count;
+ drm_buf_t *buflist;
+ int seg_count;
+ drm_dma_handle_t **seglist;
+ int page_order;
+
+ drm_freelist_t freelist;
+} drm_buf_entry_t;
+
+/* Event queued up for userspace to read */
+struct drm_pending_event {
+ struct drm_event *event;
+ struct list_head link;
+ struct drm_file *file_priv;
+ pid_t pid; /* pid of requester, no guarantee it's valid by the time
+ we deliver the event, for tracing only */
+ void (*destroy)(struct drm_pending_event *event);
+};
+
+typedef TAILQ_HEAD(drm_file_list, drm_file) drm_file_list_t;
+struct drm_file {
+ TAILQ_ENTRY(drm_file) link;
+ struct drm_device *dev;
+ int authenticated;
+ int master;
+ pid_t pid;
+ uid_t uid;
+ drm_magic_t magic;
+ unsigned long ioctl_count;
+
+ void *driver_priv;
+ struct drm_gem_names object_names;
+
+ int is_master;
+ struct drm_master *masterp;
+
+ struct list_head fbs;
+
+ struct list_head event_list;
+ int event_space;
+ struct selinfo event_poll;
+};
+
+typedef struct drm_lock_data {
+ struct drm_hw_lock *hw_lock; /* Hardware lock */
+ struct drm_file *file_priv; /* Unique identifier of holding process (NULL is kernel)*/
+ int lock_queue; /* Queue of blocked processes */
+ unsigned long lock_time; /* Time of last lock in jiffies */
+} drm_lock_data_t;
+
+/* This structure, in the struct drm_device, is always initialized while the
+ * device
+ * is open. dev->dma_lock protects the incrementing of dev->buf_use, which
+ * when set marks that no further bufs may be allocated until device teardown
+ * occurs (when the last open of the device has closed). The high/low
+ * watermarks of bufs are only touched by the X Server, and thus not
+ * concurrently accessed, so no locking is needed.
+ */
+typedef struct drm_device_dma {
+ drm_buf_entry_t bufs[DRM_MAX_ORDER+1];
+ int buf_count;
+ drm_buf_t **buflist; /* Vector of pointers info bufs */
+ int seg_count;
+ int page_count;
+ unsigned long *pagelist;
+ unsigned long byte_count;
+ enum {
+ _DRM_DMA_USE_AGP = 0x01,
+ _DRM_DMA_USE_SG = 0x02
+ } flags;
+} drm_device_dma_t;
+
+typedef struct drm_agp_mem {
+ void *handle;
+ unsigned long bound; /* address */
+ int pages;
+ struct drm_agp_mem *prev;
+ struct drm_agp_mem *next;
+} drm_agp_mem_t;
+
+typedef struct drm_agp_head {
+ device_t agpdev;
+ struct agp_info info;
+ const char *chipset;
+ drm_agp_mem_t *memory;
+ unsigned long mode;
+ int enabled;
+ int acquired;
+ unsigned long base;
+ int mtrr;
+ int cant_use_aperture;
+ unsigned long page_mask;
+} drm_agp_head_t;
+
+typedef struct drm_sg_mem {
+ vm_offset_t vaddr;
+ vm_paddr_t *busaddr;
+ vm_pindex_t pages;
+} drm_sg_mem_t;
+
+#define DRM_MAP_HANDLE_BITS (sizeof(void *) == 4 ? 4 : 24)
+#define DRM_MAP_HANDLE_SHIFT (sizeof(void *) * 8 - DRM_MAP_HANDLE_BITS)
+typedef TAILQ_HEAD(drm_map_list, drm_local_map) drm_map_list_t;
+
+typedef struct drm_local_map {
+ unsigned long offset; /* Physical address (0 for SAREA) */
+ unsigned long size; /* Physical size (bytes) */
+ enum drm_map_type type; /* Type of memory mapped */
+ enum drm_map_flags flags; /* Flags */
+ void *handle; /* User-space: "Handle" to pass to mmap */
+ /* Kernel-space: kernel-virtual address */
+ int mtrr; /* Boolean: MTRR used */
+ /* Private data */
+ int rid; /* PCI resource ID for bus_space */
+ void *virtual; /* Kernel-space: kernel-virtual address */
+ struct resource *bsr;
+ bus_space_tag_t bst;
+ bus_space_handle_t bsh;
+ drm_dma_handle_t *dmah;
+ TAILQ_ENTRY(drm_local_map) link;
+} drm_local_map_t;
+
+struct drm_vblank_info {
+ wait_queue_head_t queue; /* vblank wait queue */
+ atomic_t count; /* number of VBLANK interrupts */
+ /* (driver must alloc the right number of counters) */
+ atomic_t refcount; /* number of users of vblank interrupts */
+ u32 last; /* protected by dev->vbl_lock, used */
+ /* for wraparound handling */
+ int enabled; /* so we don't call enable more than */
+ /* once per disable */
+ int inmodeset; /* Display driver is setting mode */
+};
+
+/* Size of ringbuffer for vblank timestamps. Just double-buffer
+ * in initial implementation.
+ */
+#define DRM_VBLANKTIME_RBSIZE 2
+
+/* Flags and return codes for get_vblank_timestamp() driver function. */
+#define DRM_CALLED_FROM_VBLIRQ 1
+#define DRM_VBLANKTIME_SCANOUTPOS_METHOD (1 << 0)
+#define DRM_VBLANKTIME_INVBL (1 << 1)
+
+/* get_scanout_position() return flags */
+#define DRM_SCANOUTPOS_VALID (1 << 0)
+#define DRM_SCANOUTPOS_INVBL (1 << 1)
+#define DRM_SCANOUTPOS_ACCURATE (1 << 2)
+
+/* location of GART table */
+#define DRM_ATI_GART_MAIN 1
+#define DRM_ATI_GART_FB 2
+
+#define DRM_ATI_GART_PCI 1
+#define DRM_ATI_GART_PCIE 2
+#define DRM_ATI_GART_IGP 3
+
+struct drm_ati_pcigart_info {
+ int gart_table_location;
+ int gart_reg_if;
+ void *addr;
+ dma_addr_t bus_addr;
+ dma_addr_t table_mask;
+ dma_addr_t member_mask;
+ struct drm_dma_handle *table_handle;
+ drm_local_map_t mapping;
+ int table_size;
+ struct drm_dma_handle *dmah; /* handle for ATI PCIGART table */
+};
+
+typedef vm_paddr_t resource_size_t;
+
+/**
+ * GEM specific mm private for tracking GEM objects
+ */
+struct drm_gem_mm {
+ struct drm_open_hash offset_hash; /**< User token hash table for maps */
+ struct unrhdr *idxunr;
+};
+
+struct drm_gem_object {
+ /** Reference count of this object */
+ u_int refcount;
+
+ /** Handle count of this object. Each handle also holds a reference */
+ u_int handle_count; /* number of handles on this object */
+
+ /** Related drm device */
+ struct drm_device *dev;
+
+ /** File representing the shmem storage: filp in Linux parlance */
+ vm_object_t vm_obj;
+
+ bool on_map;
+ struct drm_hash_item map_list;
+
+ /**
+ * Size of the object, in bytes. Immutable over the object's
+ * lifetime.
+ */
+ size_t size;
+
+ /**
+ * Global name for this object, starts at 1. 0 means unnamed.
+ * Access is covered by the object_name_lock in the related drm_device
+ */
+ int name;
+
+ /**
+ * Memory domains. These monitor which caches contain read/write data
+ * related to the object. When transitioning from one set of domains
+ * to another, the driver is called to ensure that caches are suitably
+ * flushed and invalidated
+ */
+ uint32_t read_domains;
+ uint32_t write_domain;
+
+ /**
+ * While validating an exec operation, the
+ * new read/write domain values are computed here.
+ * They will be transferred to the above values
+ * at the point that any cache flushing occurs
+ */
+ uint32_t pending_read_domains;
+ uint32_t pending_write_domain;
+
+ void *driver_private;
+};
+
+#include "drm_crtc.h"
+
+#ifndef DMA_BIT_MASK
+#define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : (1ULL<<(n)) - 1)
+#endif
+
+#define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
+
+struct drm_driver_info {
+ int (*load)(struct drm_device *, unsigned long flags);
+ int (*firstopen)(struct drm_device *);
+ int (*open)(struct drm_device *, struct drm_file *);
+ void (*preclose)(struct drm_device *, struct drm_file *file_priv);
+ void (*postclose)(struct drm_device *, struct drm_file *);
+ void (*lastclose)(struct drm_device *);
+ int (*unload)(struct drm_device *);
+ void (*reclaim_buffers_locked)(struct drm_device *,
+ struct drm_file *file_priv);
+ int (*dma_ioctl)(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+ void (*dma_ready)(struct drm_device *);
+ int (*dma_quiescent)(struct drm_device *);
+ int (*dma_flush_block_and_flush)(struct drm_device *, int context,
+ enum drm_lock_flags flags);
+ int (*dma_flush_unblock)(struct drm_device *, int context,
+ enum drm_lock_flags flags);
+ int (*context_ctor)(struct drm_device *dev, int context);
+ int (*context_dtor)(struct drm_device *dev, int context);
+ int (*kernel_context_switch)(struct drm_device *dev, int old,
+ int new);
+ int (*kernel_context_switch_unlock)(struct drm_device *dev);
+ void (*irq_preinstall)(struct drm_device *dev);
+ int (*irq_postinstall)(struct drm_device *dev);
+ void (*irq_uninstall)(struct drm_device *dev);
+ void (*irq_handler)(DRM_IRQ_ARGS);
+
+ u32 (*get_vblank_counter)(struct drm_device *dev, int crtc);
+ int (*enable_vblank)(struct drm_device *dev, int crtc);
+ void (*disable_vblank)(struct drm_device *dev, int crtc);
+ int (*get_scanout_position)(struct drm_device *dev, int crtc,
+ int *vpos, int *hpos);
+
+ int (*get_vblank_timestamp)(struct drm_device *dev, int crtc,
+ int *max_error, struct timeval *vblank_time,
+ unsigned flags);
+
+ int (*gem_init_object)(struct drm_gem_object *obj);
+ void (*gem_free_object)(struct drm_gem_object *obj);
+
+ struct cdev_pager_ops *gem_pager_ops;
+
+ int (*dumb_create)(struct drm_file *file_priv,
+ struct drm_device *dev, struct drm_mode_create_dumb *args);
+ int (*dumb_map_offset)(struct drm_file *file_priv,
+ struct drm_device *dev, uint32_t handle, uint64_t *offset);
+ int (*dumb_destroy)(struct drm_file *file_priv,
+ struct drm_device *dev, uint32_t handle);
+
+ int (*sysctl_init)(struct drm_device *dev,
+ struct sysctl_ctx_list *ctx, struct sysctl_oid *top);
+ void (*sysctl_cleanup)(struct drm_device *dev);
+
+ drm_pci_id_list_t *id_entry; /* PCI ID, name, and chipset private */
+
+ /**
+ * Called by \c drm_device_is_agp. Typically used to determine if a
+ * card is really attached to AGP or not.
+ *
+ * \param dev DRM device handle
+ *
+ * \returns
+ * One of three values is returned depending on whether or not the
+ * card is absolutely \b not AGP (return of 0), absolutely \b is AGP
+ * (return of 1), or may or may not be AGP (return of 2).
+ */
+ int (*device_is_agp) (struct drm_device * dev);
+
+ drm_ioctl_desc_t *ioctls;
+ int max_ioctl;
+
+ int buf_priv_size;
+
+ int major;
+ int minor;
+ int patchlevel;
+ const char *name; /* Simple driver name */
+ const char *desc; /* Longer driver name */
+ const char *date; /* Date of last major changes. */
+
+ u32 driver_features;
+};
+
+/**
+ * DRM minor structure. This structure represents a drm minor number.
+ */
+struct drm_minor {
+ int index; /**< Minor device number */
+ int type; /**< Control or render */
+ device_t kdev; /**< OS device */
+ struct drm_device *dev;
+
+ struct drm_master *master; /* currently active master for this node */
+ struct list_head master_list;
+ struct drm_mode_group mode_group;
+};
+
+/* mode specified on the command line */
+struct drm_cmdline_mode {
+ bool specified;
+ bool refresh_specified;
+ bool bpp_specified;
+ int xres, yres;
+ int bpp;
+ int refresh;
+ bool rb;
+ bool interlace;
+ bool cvt;
+ bool margins;
+ enum drm_connector_force force;
+};
+
+struct drm_pending_vblank_event {
+ struct drm_pending_event base;
+ int pipe;
+ struct drm_event_vblank event;
+};
+
+/* Length for the array of resource pointers for drm_get_resource_*. */
+#define DRM_MAX_PCI_RESOURCE 6
+
+/**
+ * DRM device functions structure
+ */
+struct drm_device {
+ struct drm_driver_info *driver;
+ drm_pci_id_list_t *id_entry; /* PCI ID, name, and chipset private */
+
+ u_int16_t pci_device; /* PCI device id */
+ u_int16_t pci_vendor; /* PCI vendor id */
+
+ char *unique; /* Unique identifier: e.g., busid */
+ int unique_len; /* Length of unique field */
+ device_t device; /* Device instance from newbus */
+ struct cdev *devnode; /* Device number for mknod */
+ int if_version; /* Highest interface version set */
+
+ int flags; /* Flags to open(2) */
+
+ /* Locks */
+ struct mtx dma_lock; /* protects dev->dma */
+ struct mtx irq_lock; /* protects irq condition checks */
+ struct mtx dev_lock; /* protects everything else */
+ struct sx dev_struct_lock;
+ DRM_SPINTYPE drw_lock;
+
+ /* Usage Counters */
+ int open_count; /* Outstanding files open */
+ int buf_use; /* Buffers in use -- cannot alloc */
+
+ /* Performance counters */
+ unsigned long counters;
+ enum drm_stat_type types[15];
+ atomic_t counts[15];
+
+ /* Authentication */
+ drm_file_list_t files;
+ drm_magic_head_t magiclist[DRM_HASH_SIZE];
+
+ /* Linked list of mappable regions. Protected by dev_lock */
+ drm_map_list_t maplist;
+ struct unrhdr *map_unrhdr;
+
+ drm_local_map_t **context_sareas;
+ int max_context;
+
+ drm_lock_data_t lock; /* Information on hardware lock */
+
+ /* DMA queues (contexts) */
+ drm_device_dma_t *dma; /* Optional pointer for DMA support */
+
+ /* Context support */
+ int irq; /* Interrupt used by board */
+ int irq_enabled; /* True if the irq handler is enabled */
+ int msi_enabled; /* MSI enabled */
+ int irqrid; /* Interrupt used by board */
+ struct resource *irqr; /* Resource for interrupt used by board */
+ void *irqh; /* Handle from bus_setup_intr */
+
+ /* Storage of resource pointers for drm_get_resource_* */
+ struct resource *pcir[DRM_MAX_PCI_RESOURCE];
+ int pcirid[DRM_MAX_PCI_RESOURCE];
+
+ int pci_domain;
+ int pci_bus;
+ int pci_slot;
+ int pci_func;
+
+ atomic_t context_flag; /* Context swapping flag */
+ int last_context; /* Last current context */
+
+ int num_crtcs;
+
+ struct sigio *buf_sigio; /* Processes waiting for SIGIO */
+
+ /* Sysctl support */
+ struct drm_sysctl_info *sysctl;
+ int sysctl_node_idx;
+
+ drm_agp_head_t *agp;
+ drm_sg_mem_t *sg; /* Scatter gather memory */
+ atomic_t *ctx_bitmap;
+ void *dev_private;
+ unsigned int agp_buffer_token;
+ drm_local_map_t *agp_buffer_map;
+
+ struct drm_minor *control; /**< Control node for card */
+ struct drm_minor *primary; /**< render type primary screen head */
+
+ struct unrhdr *drw_unrhdr;
+ /* RB tree of drawable infos */
+ RB_HEAD(drawable_tree, bsd_drm_drawable_info) drw_head;
+
+ int vblank_disable_allowed;
+
+ atomic_t *_vblank_count; /**< number of VBLANK interrupts (driver must alloc the right number of counters) */
+ struct timeval *_vblank_time; /**< timestamp of current vblank_count (drivers must alloc right number of fields) */
+ struct mtx vblank_time_lock; /**< Protects vblank count and time updates during vblank enable/disable */
+ struct mtx vbl_lock;
+ atomic_t *vblank_refcount; /* number of users of vblank interruptsper crtc */
+ u32 *last_vblank; /* protected by dev->vbl_lock, used */
+ /* for wraparound handling */
+ int *vblank_enabled; /* so we don't call enable more than
+ once per disable */
+ int *vblank_inmodeset; /* Display driver is setting mode */
+ u32 *last_vblank_wait; /* Last vblank seqno waited per CRTC */
+ struct callout vblank_disable_callout;
+
+ u32 max_vblank_count; /**< size of vblank counter register */
+
+ struct list_head vblank_event_list;
+ struct mtx event_lock;
+
+ struct drm_mode_config mode_config; /**< Current mode config */
+
+ /* GEM part */
+ struct sx object_name_lock;
+ struct drm_gem_names object_names;
+ void *mm_private;
+
+ void *sysctl_private;
+ char busid_str[128];
+ int modesetting;
+};
+
+static __inline__ int drm_core_check_feature(struct drm_device *dev,
+ int feature)
+{
+ return ((dev->driver->driver_features & feature) ? 1 : 0);
+}
+
+#if __OS_HAS_AGP
+static inline int drm_core_has_AGP(struct drm_device *dev)
+{
+ return drm_core_check_feature(dev, DRIVER_USE_AGP);
+}
+#else
+#define drm_core_has_AGP(dev) (0)
+#endif
+
+enum dmi_field {
+ DMI_NONE,
+ DMI_BIOS_VENDOR,
+ DMI_BIOS_VERSION,
+ DMI_BIOS_DATE,
+ DMI_SYS_VENDOR,
+ DMI_PRODUCT_NAME,
+ DMI_PRODUCT_VERSION,
+ DMI_PRODUCT_SERIAL,
+ DMI_PRODUCT_UUID,
+ DMI_BOARD_VENDOR,
+ DMI_BOARD_NAME,
+ DMI_BOARD_VERSION,
+ DMI_BOARD_SERIAL,
+ DMI_BOARD_ASSET_TAG,
+ DMI_CHASSIS_VENDOR,
+ DMI_CHASSIS_TYPE,
+ DMI_CHASSIS_VERSION,
+ DMI_CHASSIS_SERIAL,
+ DMI_CHASSIS_ASSET_TAG,
+ DMI_STRING_MAX,
+};
+
+struct dmi_strmatch {
+ unsigned char slot;
+ char substr[79];
+};
+
+struct dmi_system_id {
+ int (*callback)(const struct dmi_system_id *);
+ const char *ident;
+ struct dmi_strmatch matches[4];
+};
+#define DMI_MATCH(a, b) {(a), (b)}
+bool dmi_check_system(const struct dmi_system_id *);
+
+extern int drm_debug_flag;
+extern int drm_notyet_flag;
+extern unsigned int drm_vblank_offdelay;
+extern unsigned int drm_timestamp_precision;
+
+/* Device setup support (drm_drv.c) */
+int drm_probe(device_t kdev, drm_pci_id_list_t *idlist);
+int drm_attach(device_t kdev, drm_pci_id_list_t *idlist);
+int drm_create_cdevs(device_t kdev);
+void drm_close(void *data);
+int drm_detach(device_t kdev);
+d_ioctl_t drm_ioctl;
+d_open_t drm_open;
+d_read_t drm_read;
+d_poll_t drm_poll;
+d_mmap_t drm_mmap;
+extern drm_local_map_t *drm_getsarea(struct drm_device *dev);
+
+void drm_event_wakeup(struct drm_pending_event *e);
+
+int drm_add_busid_modesetting(struct drm_device *dev,
+ struct sysctl_ctx_list *ctx, struct sysctl_oid *top);
+
+/* File operations helpers (drm_fops.c) */
+extern int drm_open_helper(struct cdev *kdev, int flags, int fmt,
+ DRM_STRUCTPROC *p,
+ struct drm_device *dev);
+
+/* Memory management support (drm_memory.c) */
+void drm_mem_init(void);
+void drm_mem_uninit(void);
+void *drm_ioremap_wc(struct drm_device *dev, drm_local_map_t *map);
+void *drm_ioremap(struct drm_device *dev, drm_local_map_t *map);
+void drm_ioremapfree(drm_local_map_t *map);
+int drm_mtrr_add(unsigned long offset, size_t size, int flags);
+int drm_mtrr_del(int handle, unsigned long offset, size_t size, int flags);
+
+int drm_context_switch(struct drm_device *dev, int old, int new);
+int drm_context_switch_complete(struct drm_device *dev, int new);
+
+int drm_ctxbitmap_init(struct drm_device *dev);
+void drm_ctxbitmap_cleanup(struct drm_device *dev);
+void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle);
+int drm_ctxbitmap_next(struct drm_device *dev);
+
+/* Locking IOCTL support (drm_lock.c) */
+int drm_lock_take(struct drm_lock_data *lock_data,
+ unsigned int context);
+int drm_lock_transfer(struct drm_lock_data *lock_data,
+ unsigned int context);
+int drm_lock_free(struct drm_lock_data *lock_data,
+ unsigned int context);
+
+/* Buffer management support (drm_bufs.c) */
+unsigned long drm_get_resource_start(struct drm_device *dev,
+ unsigned int resource);
+unsigned long drm_get_resource_len(struct drm_device *dev,
+ unsigned int resource);
+void drm_rmmap(struct drm_device *dev, drm_local_map_t *map);
+int drm_order(unsigned long size);
+int drm_addmap(struct drm_device *dev, unsigned long offset,
+ unsigned long size,
+ enum drm_map_type type, enum drm_map_flags flags,
+ drm_local_map_t **map_ptr);
+int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc *request);
+int drm_addbufs_sg(struct drm_device *dev, struct drm_buf_desc *request);
+int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc *request);
+
+/* DMA support (drm_dma.c) */
+int drm_dma_setup(struct drm_device *dev);
+void drm_dma_takedown(struct drm_device *dev);
+void drm_free_buffer(struct drm_device *dev, drm_buf_t *buf);
+void drm_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv);
+#define drm_core_reclaim_buffers drm_reclaim_buffers
+
+/* IRQ support (drm_irq.c) */
+int drm_irq_install(struct drm_device *dev);
+int drm_irq_uninstall(struct drm_device *dev);
+irqreturn_t drm_irq_handler(DRM_IRQ_ARGS);
+void drm_driver_irq_preinstall(struct drm_device *dev);
+void drm_driver_irq_postinstall(struct drm_device *dev);
+void drm_driver_irq_uninstall(struct drm_device *dev);
+
+void drm_vblank_pre_modeset(struct drm_device *dev, int crtc);
+void drm_vblank_post_modeset(struct drm_device *dev, int crtc);
+int drm_modeset_ctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+extern int drm_vblank_init(struct drm_device *dev, int num_crtcs);
+extern int drm_wait_vblank(struct drm_device *dev, void *data,
+ struct drm_file *filp);
+extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq);
+extern u32 drm_vblank_count(struct drm_device *dev, int crtc);
+extern u32 drm_vblank_count_and_time(struct drm_device *dev, int crtc,
+ struct timeval *vblanktime);
+extern bool drm_handle_vblank(struct drm_device *dev, int crtc);
+void drm_handle_vblank_events(struct drm_device *dev, int crtc);
+extern int drm_vblank_get(struct drm_device *dev, int crtc);
+extern void drm_vblank_put(struct drm_device *dev, int crtc);
+extern void drm_vblank_off(struct drm_device *dev, int crtc);
+extern void drm_vblank_cleanup(struct drm_device *dev);
+extern u32 drm_get_last_vbltimestamp(struct drm_device *dev, int crtc,
+ struct timeval *tvblank, unsigned flags);
+extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
+ int crtc, int *max_error,
+ struct timeval *vblank_time,
+ unsigned flags,
+ struct drm_crtc *refcrtc);
+extern void drm_calc_timestamping_constants(struct drm_crtc *crtc);
+
+struct timeval ns_to_timeval(const int64_t nsec);
+int64_t timeval_to_ns(const struct timeval *tv);
+
+/* AGP/PCI Express/GART support (drm_agpsupport.c) */
+int drm_device_is_agp(struct drm_device *dev);
+int drm_device_is_pcie(struct drm_device *dev);
+drm_agp_head_t *drm_agp_init(void);
+int drm_agp_acquire(struct drm_device *dev);
+int drm_agp_release(struct drm_device *dev);
+int drm_agp_info(struct drm_device * dev, struct drm_agp_info *info);
+int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
+void *drm_agp_allocate_memory(size_t pages, u32 type);
+int drm_agp_free_memory(void *handle);
+int drm_agp_bind_memory(void *handle, off_t start);
+int drm_agp_unbind_memory(void *handle);
+int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request);
+int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request);
+int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
+int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request);
+
+/* Scatter Gather Support (drm_scatter.c) */
+void drm_sg_cleanup(drm_sg_mem_t *entry);
+int drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather * request);
+
+/* sysctl support (drm_sysctl.h) */
+extern int drm_sysctl_init(struct drm_device *dev);
+extern int drm_sysctl_cleanup(struct drm_device *dev);
+
+/* ATI PCIGART support (ati_pcigart.c) */
+int drm_ati_pcigart_init(struct drm_device *dev,
+ struct drm_ati_pcigart_info *gart_info);
+int drm_ati_pcigart_cleanup(struct drm_device *dev,
+ struct drm_ati_pcigart_info *gart_info);
+
+/* Cache management (drm_memory.c) */
+void drm_clflush_pages(vm_page_t *pages, unsigned long num_pages);
+
+/* Locking IOCTL support (drm_drv.c) */
+int drm_lock(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_unlock(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_version(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_setversion(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+/* Misc. IOCTL support (drm_ioctl.c) */
+int drm_irq_by_busid(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_getunique(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_setunique(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_getmap(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_getclient(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_getstats(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_getcap(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_noop(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+/* Context IOCTL support (drm_context.c) */
+int drm_resctx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_addctx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_modctx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_getctx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_switchctx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_newctx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_rmctx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_setsareactx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_getsareactx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+/* Drawable IOCTL support (drm_drawable.c) */
+int drm_adddraw(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_rmdraw(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_update_draw(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+struct drm_drawable_info *drm_get_drawable_info(struct drm_device *dev,
+ int handle);
+
+/* Drawable support (drm_drawable.c) */
+void drm_drawable_free_all(struct drm_device *dev);
+
+/* Authentication IOCTL support (drm_auth.c) */
+int drm_getmagic(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_authmagic(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+/* Buffer management support (drm_bufs.c) */
+int drm_addmap_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_rmmap_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_addbufs(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_infobufs(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_markbufs(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_freebufs(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_mapbufs(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+/* DMA support (drm_dma.c) */
+int drm_dma(struct drm_device *dev, void *data, struct drm_file *file_priv);
+
+/* IRQ support (drm_irq.c) */
+int drm_control(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+/* AGP/GART support (drm_agpsupport.c) */
+int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_agp_release_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_agp_info_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_agp_free_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+ /* Stub support (drm_stub.h) */
+extern int drm_setmaster_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+extern int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+/* Scatter Gather Support (drm_scatter.c) */
+int drm_sg_alloc_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_sg_free(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+/* consistent PCI memory functions (drm_pci.c) */
+drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size,
+ size_t align, dma_addr_t maxaddr);
+void drm_pci_free(struct drm_device *dev, drm_dma_handle_t *dmah);
+
+/* Graphics Execution Manager library functions (drm_gem.c) */
+int drm_gem_init(struct drm_device *dev);
+void drm_gem_destroy(struct drm_device *dev);
+
+int drm_gem_close_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_gem_flink_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_gem_open_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int drm_gem_handle_create(struct drm_file *file_priv,
+ struct drm_gem_object *obj,
+ u32 *handlep);
+int drm_gem_handle_delete(struct drm_file *file_priv, uint32_t handle);
+void drm_gem_object_handle_reference(struct drm_gem_object *obj);
+void drm_gem_object_handle_unreference(struct drm_gem_object *obj);
+void drm_gem_object_handle_unreference_unlocked(struct drm_gem_object *obj);
+void drm_gem_object_handle_free(struct drm_gem_object *obj);
+void drm_gem_object_reference(struct drm_gem_object *obj);
+void drm_gem_object_unreference(struct drm_gem_object *obj);
+void drm_gem_object_unreference_unlocked(struct drm_gem_object *obj);
+void drm_gem_object_release(struct drm_gem_object *obj);
+void drm_gem_object_free(struct drm_gem_object *obj);
+int drm_gem_object_init(struct drm_device *dev, struct drm_gem_object *obj,
+ size_t size);
+int drm_gem_private_object_init(struct drm_device *dev,
+ struct drm_gem_object *obj, size_t size);
+struct drm_gem_object *drm_gem_object_alloc(struct drm_device *dev,
+ size_t size);
+struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev,
+ struct drm_file *file_priv, uint32_t handle);
+
+void drm_gem_open(struct drm_device *dev, struct drm_file *file_priv);
+void drm_gem_release(struct drm_device *dev, struct drm_file *file_priv);
+
+int drm_gem_create_mmap_offset(struct drm_gem_object *obj);
+void drm_gem_free_mmap_offset(struct drm_gem_object *obj);
+int drm_gem_mmap_single(struct cdev *kdev, vm_ooffset_t *offset, vm_size_t size,
+ struct vm_object **obj_res, int nprot);
+void drm_gem_pager_dtr(void *obj);
+
+void drm_device_lock_mtx(struct drm_device *dev);
+void drm_device_unlock_mtx(struct drm_device *dev);
+int drm_device_sleep_mtx(struct drm_device *dev, void *chan, int flags,
+ const char *msg, int timeout);
+void drm_device_assert_mtx_locked(struct drm_device *dev);
+void drm_device_assert_mtx_unlocked(struct drm_device *dev);
+
+void drm_device_lock_struct(struct drm_device *dev);
+void drm_device_unlock_struct(struct drm_device *dev);
+int drm_device_sleep_struct(struct drm_device *dev, void *chan, int flags,
+ const char *msg, int timeout);
+void drm_device_assert_struct_locked(struct drm_device *dev);
+void drm_device_assert_struct_unlocked(struct drm_device *dev);
+
+void drm_compat_locking_init(struct drm_device *dev);
+void drm_sleep_locking_init(struct drm_device *dev);
+
+/* drm_modes.c */
+bool drm_mode_parse_command_line_for_connector(const char *mode_option,
+ struct drm_connector *connector, struct drm_cmdline_mode *mode);
+struct drm_display_mode *drm_mode_create_from_cmdline_mode(
+ struct drm_device *dev, struct drm_cmdline_mode *cmd);
+
+/* drm_edid.c */
+u8 *drm_find_cea_extension(struct edid *edid);
+
+/* Inline replacements for drm_alloc and friends */
+static __inline__ void *
+drm_alloc(size_t size, struct malloc_type *area)
+{
+ return malloc(size, area, M_NOWAIT);
+}
+
+static __inline__ void *
+drm_calloc(size_t nmemb, size_t size, struct malloc_type *area)
+{
+ return malloc(size * nmemb, area, M_NOWAIT | M_ZERO);
+}
+
+static __inline__ void *
+drm_realloc(void *oldpt, size_t oldsize, size_t size,
+ struct malloc_type *area)
+{
+ return reallocf(oldpt, size, area, M_NOWAIT);
+}
+
+static __inline__ void
+drm_free(void *pt, size_t size, struct malloc_type *area)
+{
+ free(pt, area);
+}
+
+/* Inline replacements for DRM_IOREMAP macros */
+static __inline__ void
+drm_core_ioremap_wc(struct drm_local_map *map, struct drm_device *dev)
+{
+ map->virtual = drm_ioremap_wc(dev, map);
+}
+static __inline__ void
+drm_core_ioremap(struct drm_local_map *map, struct drm_device *dev)
+{
+ map->virtual = drm_ioremap(dev, map);
+}
+static __inline__ void
+drm_core_ioremapfree(struct drm_local_map *map, struct drm_device *dev)
+{
+ if ( map->virtual && map->size )
+ drm_ioremapfree(map);
+}
+
+static __inline__ struct drm_local_map *
+drm_core_findmap(struct drm_device *dev, unsigned long offset)
+{
+ drm_local_map_t *map;
+
+ DRM_LOCK_ASSERT(dev);
+ TAILQ_FOREACH(map, &dev->maplist, link) {
+ if (offset == (unsigned long)map->handle)
+ return map;
+ }
+ return NULL;
+}
+
+static __inline__ void drm_core_dropmap(struct drm_map *map)
+{
+}
+
+#define KIB_NOTYET() \
+do { \
+ if (drm_debug_flag && drm_notyet_flag) \
+ printf("NOTYET: %s at %s:%d\n", __func__, __FILE__, __LINE__); \
+} while (0)
+
+#define KTR_DRM KTR_DEV
+#define KTR_DRM_REG KTR_SPARE3
+
+#endif /* __KERNEL__ */
+#endif /* _DRM_P_H_ */
diff --git a/sys/dev/drm2/drm_agpsupport.c b/sys/dev/drm2/drm_agpsupport.c
new file mode 100644
index 000000000000..eafe11759df4
--- /dev/null
+++ b/sys/dev/drm2/drm_agpsupport.c
@@ -0,0 +1,434 @@
+/*-
+ * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Author:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_agpsupport.c
+ * Support code for tying the kernel AGP support to DRM drivers and
+ * the DRM's AGP ioctls.
+ */
+
+#include <dev/drm2/drmP.h>
+
+#include <dev/agp/agpreg.h>
+#include <dev/pci/pcireg.h>
+
+/* Returns 1 if AGP or 0 if not. */
+static int
+drm_device_find_capability(struct drm_device *dev, int cap)
+{
+
+ return (pci_find_cap(dev->device, cap, NULL) == 0);
+}
+
+int drm_device_is_agp(struct drm_device *dev)
+{
+ if (dev->driver->device_is_agp != NULL) {
+ int ret;
+
+ /* device_is_agp returns a tristate, 0 = not AGP, 1 = definitely
+ * AGP, 2 = fall back to PCI capability
+ */
+ ret = (*dev->driver->device_is_agp)(dev);
+ if (ret != DRM_MIGHT_BE_AGP)
+ return ret;
+ }
+
+ return (drm_device_find_capability(dev, PCIY_AGP));
+}
+
+int drm_device_is_pcie(struct drm_device *dev)
+{
+ return (drm_device_find_capability(dev, PCIY_EXPRESS));
+}
+
+int drm_agp_info(struct drm_device * dev, struct drm_agp_info *info)
+{
+ struct agp_info *kern;
+
+ if (!dev->agp || !dev->agp->acquired)
+ return EINVAL;
+
+ kern = &dev->agp->info;
+ agp_get_info(dev->agp->agpdev, kern);
+ info->agp_version_major = 1;
+ info->agp_version_minor = 0;
+ info->mode = kern->ai_mode;
+ info->aperture_base = kern->ai_aperture_base;
+ info->aperture_size = kern->ai_aperture_size;
+ info->memory_allowed = kern->ai_memory_allowed;
+ info->memory_used = kern->ai_memory_used;
+ info->id_vendor = kern->ai_devid & 0xffff;
+ info->id_device = kern->ai_devid >> 16;
+
+ return 0;
+}
+
+int drm_agp_info_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ int err;
+ struct drm_agp_info info;
+
+ err = drm_agp_info(dev, &info);
+ if (err != 0)
+ return err;
+
+ *(struct drm_agp_info *) data = info;
+ return 0;
+}
+
+int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+
+ return drm_agp_acquire(dev);
+}
+
+int drm_agp_acquire(struct drm_device *dev)
+{
+ int retcode;
+
+ if (!dev->agp || dev->agp->acquired)
+ return EINVAL;
+
+ retcode = agp_acquire(dev->agp->agpdev);
+ if (retcode)
+ return retcode;
+
+ dev->agp->acquired = 1;
+ return 0;
+}
+
+int drm_agp_release_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+
+ return drm_agp_release(dev);
+}
+
+int drm_agp_release(struct drm_device * dev)
+{
+ if (!dev->agp || !dev->agp->acquired)
+ return EINVAL;
+ agp_release(dev->agp->agpdev);
+ dev->agp->acquired = 0;
+ return 0;
+}
+
+int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode)
+{
+
+ if (!dev->agp || !dev->agp->acquired)
+ return EINVAL;
+
+ dev->agp->mode = mode.mode;
+ agp_enable(dev->agp->agpdev, mode.mode);
+ dev->agp->enabled = 1;
+ return 0;
+}
+
+int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_agp_mode mode;
+
+ mode = *(struct drm_agp_mode *) data;
+
+ return drm_agp_enable(dev, mode);
+}
+
+int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request)
+{
+ drm_agp_mem_t *entry;
+ void *handle;
+ unsigned long pages;
+ u_int32_t type;
+ struct agp_memory_info info;
+
+ if (!dev->agp || !dev->agp->acquired)
+ return EINVAL;
+
+ entry = malloc(sizeof(*entry), DRM_MEM_AGPLISTS, M_NOWAIT | M_ZERO);
+ if (entry == NULL)
+ return ENOMEM;
+
+ pages = (request->size + PAGE_SIZE - 1) / PAGE_SIZE;
+ type = (u_int32_t) request->type;
+
+ DRM_UNLOCK(dev);
+ handle = drm_agp_allocate_memory(pages, type);
+ DRM_LOCK(dev);
+ if (handle == NULL) {
+ free(entry, DRM_MEM_AGPLISTS);
+ return ENOMEM;
+ }
+
+ entry->handle = handle;
+ entry->bound = 0;
+ entry->pages = pages;
+ entry->prev = NULL;
+ entry->next = dev->agp->memory;
+ if (dev->agp->memory)
+ dev->agp->memory->prev = entry;
+ dev->agp->memory = entry;
+
+ agp_memory_info(dev->agp->agpdev, entry->handle, &info);
+
+ request->handle = (unsigned long) entry->handle;
+ request->physical = info.ami_physical;
+
+ return 0;
+}
+
+int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_agp_buffer request;
+ int retcode;
+
+ request = *(struct drm_agp_buffer *) data;
+
+ DRM_LOCK(dev);
+ retcode = drm_agp_alloc(dev, &request);
+ DRM_UNLOCK(dev);
+
+ *(struct drm_agp_buffer *) data = request;
+
+ return retcode;
+}
+
+static drm_agp_mem_t * drm_agp_lookup_entry(struct drm_device *dev,
+ void *handle)
+{
+ drm_agp_mem_t *entry;
+
+ for (entry = dev->agp->memory; entry; entry = entry->next) {
+ if (entry->handle == handle) return entry;
+ }
+ return NULL;
+}
+
+int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request)
+{
+ drm_agp_mem_t *entry;
+ int retcode;
+
+ if (!dev->agp || !dev->agp->acquired)
+ return EINVAL;
+
+ entry = drm_agp_lookup_entry(dev, (void *)request->handle);
+ if (entry == NULL || !entry->bound)
+ return EINVAL;
+
+ DRM_UNLOCK(dev);
+ retcode = drm_agp_unbind_memory(entry->handle);
+ DRM_LOCK(dev);
+
+ if (retcode == 0)
+ entry->bound = 0;
+
+ return retcode;
+}
+
+int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_agp_binding request;
+ int retcode;
+
+ request = *(struct drm_agp_binding *) data;
+
+ DRM_LOCK(dev);
+ retcode = drm_agp_unbind(dev, &request);
+ DRM_UNLOCK(dev);
+
+ return retcode;
+}
+
+int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request)
+{
+ drm_agp_mem_t *entry;
+ int retcode;
+ int page;
+
+ if (!dev->agp || !dev->agp->acquired)
+ return EINVAL;
+
+ DRM_DEBUG("agp_bind, page_size=%x\n", (int)PAGE_SIZE);
+
+ entry = drm_agp_lookup_entry(dev, (void *)request->handle);
+ if (entry == NULL || entry->bound)
+ return EINVAL;
+
+ page = (request->offset + PAGE_SIZE - 1) / PAGE_SIZE;
+
+ DRM_UNLOCK(dev);
+ retcode = drm_agp_bind_memory(entry->handle, page);
+ DRM_LOCK(dev);
+ if (retcode == 0)
+ entry->bound = dev->agp->base + (page << PAGE_SHIFT);
+
+ return retcode;
+}
+
+int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_agp_binding request;
+ int retcode;
+
+ request = *(struct drm_agp_binding *) data;
+
+ DRM_LOCK(dev);
+ retcode = drm_agp_bind(dev, &request);
+ DRM_UNLOCK(dev);
+
+ return retcode;
+}
+
+int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request)
+{
+ drm_agp_mem_t *entry;
+
+ if (!dev->agp || !dev->agp->acquired)
+ return EINVAL;
+
+ entry = drm_agp_lookup_entry(dev, (void*)request->handle);
+ if (entry == NULL)
+ return EINVAL;
+
+ if (entry->prev)
+ entry->prev->next = entry->next;
+ else
+ dev->agp->memory = entry->next;
+ if (entry->next)
+ entry->next->prev = entry->prev;
+
+ DRM_UNLOCK(dev);
+ if (entry->bound)
+ drm_agp_unbind_memory(entry->handle);
+ drm_agp_free_memory(entry->handle);
+ DRM_LOCK(dev);
+
+ free(entry, DRM_MEM_AGPLISTS);
+
+ return 0;
+
+}
+
+int drm_agp_free_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_agp_buffer request;
+ int retcode;
+
+ request = *(struct drm_agp_buffer *) data;
+
+ DRM_LOCK(dev);
+ retcode = drm_agp_free(dev, &request);
+ DRM_UNLOCK(dev);
+
+ return retcode;
+}
+
+drm_agp_head_t *drm_agp_init(void)
+{
+ device_t agpdev;
+ drm_agp_head_t *head = NULL;
+ int agp_available = 1;
+
+ agpdev = DRM_AGP_FIND_DEVICE();
+ if (!agpdev)
+ agp_available = 0;
+
+ DRM_DEBUG("agp_available = %d\n", agp_available);
+
+ if (agp_available) {
+ head = malloc(sizeof(*head), DRM_MEM_AGPLISTS,
+ M_NOWAIT | M_ZERO);
+ if (head == NULL)
+ return NULL;
+ head->agpdev = agpdev;
+ agp_get_info(agpdev, &head->info);
+ head->base = head->info.ai_aperture_base;
+ head->memory = NULL;
+ DRM_INFO("AGP at 0x%08lx %dMB\n",
+ (long)head->info.ai_aperture_base,
+ (int)(head->info.ai_aperture_size >> 20));
+ }
+ return head;
+}
+
+void *drm_agp_allocate_memory(size_t pages, u32 type)
+{
+ device_t agpdev;
+
+ agpdev = DRM_AGP_FIND_DEVICE();
+ if (!agpdev)
+ return NULL;
+
+ return agp_alloc_memory(agpdev, type, pages << AGP_PAGE_SHIFT);
+}
+
+int drm_agp_free_memory(void *handle)
+{
+ device_t agpdev;
+
+ agpdev = DRM_AGP_FIND_DEVICE();
+ if (!agpdev || !handle)
+ return 0;
+
+ agp_free_memory(agpdev, handle);
+ return 1;
+}
+
+int drm_agp_bind_memory(void *handle, off_t start)
+{
+ device_t agpdev;
+
+ agpdev = DRM_AGP_FIND_DEVICE();
+ if (!agpdev || !handle)
+ return EINVAL;
+
+ return agp_bind_memory(agpdev, handle, start * PAGE_SIZE);
+}
+
+int drm_agp_unbind_memory(void *handle)
+{
+ device_t agpdev;
+
+ agpdev = DRM_AGP_FIND_DEVICE();
+ if (!agpdev || !handle)
+ return EINVAL;
+
+ return agp_unbind_memory(agpdev, handle);
+}
diff --git a/sys/dev/drm2/drm_atomic.h b/sys/dev/drm2/drm_atomic.h
new file mode 100644
index 000000000000..e7dbed98be8f
--- /dev/null
+++ b/sys/dev/drm2/drm_atomic.h
@@ -0,0 +1,93 @@
+/**
+ * \file drm_atomic.h
+ * Atomic operations used in the DRM which may or may not be provided by the OS.
+ *
+ * \author Eric Anholt <anholt@FreeBSD.org>
+ */
+
+/*-
+ * Copyright 2004 Eric Anholt
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/* Many of these implementations are rather fake, but good enough. */
+
+typedef u_int32_t atomic_t;
+
+#define atomic_set(p, v) (*(p) = (v))
+#define atomic_read(p) (*(p))
+#define atomic_inc(p) atomic_add_int(p, 1)
+#define atomic_dec(p) atomic_subtract_int(p, 1)
+#define atomic_add(n, p) atomic_add_int(p, n)
+#define atomic_sub(n, p) atomic_subtract_int(p, n)
+
+static __inline atomic_t
+test_and_set_bit(int b, volatile void *p)
+{
+ int s = splhigh();
+ unsigned int m = 1<<b;
+ unsigned int r = *(volatile int *)p & m;
+ *(volatile int *)p |= m;
+ splx(s);
+ return r;
+}
+
+static __inline void
+clear_bit(int b, volatile void *p)
+{
+ atomic_clear_int(((volatile int *)p) + (b >> 5), 1 << (b & 0x1f));
+}
+
+static __inline void
+set_bit(int b, volatile void *p)
+{
+ atomic_set_int(((volatile int *)p) + (b >> 5), 1 << (b & 0x1f));
+}
+
+static __inline int
+test_bit(int b, volatile void *p)
+{
+ return ((volatile int *)p)[b >> 5] & (1 << (b & 0x1f));
+}
+
+static __inline int
+find_first_zero_bit(volatile void *p, int max)
+{
+ int b;
+ volatile int *ptr = (volatile int *)p;
+
+ for (b = 0; b < max; b += 32) {
+ if (ptr[b >> 5] != ~0) {
+ for (;;) {
+ if ((ptr[b >> 5] & (1 << (b & 0x1f))) == 0)
+ return b;
+ b++;
+ }
+ }
+ }
+ return max;
+}
+
+#define BITS_TO_LONGS(x) (howmany((x), NBBY * sizeof(long)))
diff --git a/sys/dev/drm2/drm_auth.c b/sys/dev/drm2/drm_auth.c
new file mode 100644
index 000000000000..69acff9df5a1
--- /dev/null
+++ b/sys/dev/drm2/drm_auth.c
@@ -0,0 +1,190 @@
+/*-
+ * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_auth.c
+ * Implementation of the get/authmagic ioctls implementing the authentication
+ * scheme between the master and clients.
+ */
+
+#include <dev/drm2/drmP.h>
+
+static int drm_hash_magic(drm_magic_t magic)
+{
+ return magic & (DRM_HASH_SIZE-1);
+}
+
+/**
+ * Returns the file private associated with the given magic number.
+ */
+static struct drm_file *drm_find_file(struct drm_device *dev, drm_magic_t magic)
+{
+ drm_magic_entry_t *pt;
+ int hash = drm_hash_magic(magic);
+
+ DRM_LOCK_ASSERT(dev);
+
+ for (pt = dev->magiclist[hash].head; pt; pt = pt->next) {
+ if (pt->magic == magic) {
+ return pt->priv;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Inserts the given magic number into the hash table of used magic number
+ * lists.
+ */
+static int drm_add_magic(struct drm_device *dev, struct drm_file *priv,
+ drm_magic_t magic)
+{
+ int hash;
+ drm_magic_entry_t *entry;
+
+ DRM_DEBUG("%d\n", magic);
+
+ DRM_LOCK_ASSERT(dev);
+
+ hash = drm_hash_magic(magic);
+ entry = malloc(sizeof(*entry), DRM_MEM_MAGIC, M_ZERO | M_NOWAIT);
+ if (!entry)
+ return ENOMEM;
+ entry->magic = magic;
+ entry->priv = priv;
+ entry->next = NULL;
+
+ if (dev->magiclist[hash].tail) {
+ dev->magiclist[hash].tail->next = entry;
+ dev->magiclist[hash].tail = entry;
+ } else {
+ dev->magiclist[hash].head = entry;
+ dev->magiclist[hash].tail = entry;
+ }
+
+ return 0;
+}
+
+/**
+ * Removes the given magic number from the hash table of used magic number
+ * lists.
+ */
+static int drm_remove_magic(struct drm_device *dev, drm_magic_t magic)
+{
+ drm_magic_entry_t *prev = NULL;
+ drm_magic_entry_t *pt;
+ int hash;
+
+ DRM_LOCK_ASSERT(dev);
+
+ DRM_DEBUG("%d\n", magic);
+ hash = drm_hash_magic(magic);
+
+ for (pt = dev->magiclist[hash].head; pt; prev = pt, pt = pt->next) {
+ if (pt->magic == magic) {
+ if (dev->magiclist[hash].head == pt) {
+ dev->magiclist[hash].head = pt->next;
+ }
+ if (dev->magiclist[hash].tail == pt) {
+ dev->magiclist[hash].tail = prev;
+ }
+ if (prev) {
+ prev->next = pt->next;
+ }
+ free(pt, DRM_MEM_MAGIC);
+ return 0;
+ }
+ }
+
+ return EINVAL;
+}
+
+/**
+ * Called by the client, this returns a unique magic number to be authorized
+ * by the master.
+ *
+ * The master may use its own knowledge of the client (such as the X
+ * connection that the magic is passed over) to determine if the magic number
+ * should be authenticated.
+ */
+int drm_getmagic(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ static drm_magic_t sequence = 0;
+ struct drm_auth *auth = data;
+
+ /* Find unique magic */
+ if (file_priv->magic) {
+ auth->magic = file_priv->magic;
+ } else {
+ DRM_LOCK(dev);
+ do {
+ int old = sequence;
+
+ auth->magic = old+1;
+
+ if (!atomic_cmpset_int(&sequence, old, auth->magic))
+ continue;
+ } while (drm_find_file(dev, auth->magic));
+ file_priv->magic = auth->magic;
+ drm_add_magic(dev, file_priv, auth->magic);
+ DRM_UNLOCK(dev);
+ }
+
+ DRM_DEBUG("%u\n", auth->magic);
+
+ return 0;
+}
+
+/**
+ * Marks the client associated with the given magic number as authenticated.
+ */
+int drm_authmagic(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_auth *auth = data;
+ struct drm_file *priv;
+
+ DRM_DEBUG("%u\n", auth->magic);
+
+ DRM_LOCK(dev);
+ priv = drm_find_file(dev, auth->magic);
+ if (priv != NULL) {
+ priv->authenticated = 1;
+ drm_remove_magic(dev, auth->magic);
+ DRM_UNLOCK(dev);
+ return 0;
+ } else {
+ DRM_UNLOCK(dev);
+ return EINVAL;
+ }
+}
diff --git a/sys/dev/drm2/drm_bufs.c b/sys/dev/drm2/drm_bufs.c
new file mode 100644
index 000000000000..410c88fa65e3
--- /dev/null
+++ b/sys/dev/drm2/drm_bufs.c
@@ -0,0 +1,1130 @@
+/*-
+ * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_bufs.c
+ * Implementation of the ioctls for setup of DRM mappings and DMA buffers.
+ */
+
+#include <dev/pci/pcireg.h>
+
+#include <dev/drm2/drmP.h>
+
+/* Allocation of PCI memory resources (framebuffer, registers, etc.) for
+ * drm_get_resource_*. Note that they are not RF_ACTIVE, so there's no virtual
+ * address for accessing them. Cleaned up at unload.
+ */
+static int drm_alloc_resource(struct drm_device *dev, int resource)
+{
+ struct resource *res;
+ int rid;
+
+ DRM_LOCK_ASSERT(dev);
+
+ if (resource >= DRM_MAX_PCI_RESOURCE) {
+ DRM_ERROR("Resource %d too large\n", resource);
+ return 1;
+ }
+
+ if (dev->pcir[resource] != NULL) {
+ return 0;
+ }
+
+ DRM_UNLOCK(dev);
+ rid = PCIR_BAR(resource);
+ res = bus_alloc_resource_any(dev->device, SYS_RES_MEMORY, &rid,
+ RF_SHAREABLE);
+ DRM_LOCK(dev);
+ if (res == NULL) {
+ DRM_ERROR("Couldn't find resource 0x%x\n", resource);
+ return 1;
+ }
+
+ if (dev->pcir[resource] == NULL) {
+ dev->pcirid[resource] = rid;
+ dev->pcir[resource] = res;
+ }
+
+ return 0;
+}
+
+unsigned long drm_get_resource_start(struct drm_device *dev,
+ unsigned int resource)
+{
+ if (drm_alloc_resource(dev, resource) != 0)
+ return 0;
+
+ return rman_get_start(dev->pcir[resource]);
+}
+
+unsigned long drm_get_resource_len(struct drm_device *dev,
+ unsigned int resource)
+{
+ if (drm_alloc_resource(dev, resource) != 0)
+ return 0;
+
+ return rman_get_size(dev->pcir[resource]);
+}
+
+int drm_addmap(struct drm_device * dev, unsigned long offset,
+ unsigned long size,
+ enum drm_map_type type, enum drm_map_flags flags, drm_local_map_t **map_ptr)
+{
+ drm_local_map_t *map;
+ int align;
+ /*drm_agp_mem_t *entry;
+ int valid;*/
+
+ /* Only allow shared memory to be removable since we only keep enough
+ * book keeping information about shared memory to allow for removal
+ * when processes fork.
+ */
+ if ((flags & _DRM_REMOVABLE) && type != _DRM_SHM) {
+ DRM_ERROR("Requested removable map for non-DRM_SHM\n");
+ return EINVAL;
+ }
+ if ((offset & PAGE_MASK) || (size & PAGE_MASK)) {
+ DRM_ERROR("offset/size not page aligned: 0x%lx/0x%lx\n",
+ offset, size);
+ return EINVAL;
+ }
+ if (offset + size < offset) {
+ DRM_ERROR("offset and size wrap around: 0x%lx/0x%lx\n",
+ offset, size);
+ return EINVAL;
+ }
+
+ DRM_DEBUG("offset = 0x%08lx, size = 0x%08lx, type = %d\n", offset,
+ size, type);
+
+ /* Check if this is just another version of a kernel-allocated map, and
+ * just hand that back if so.
+ */
+ if (type == _DRM_REGISTERS || type == _DRM_FRAME_BUFFER ||
+ type == _DRM_SHM) {
+ TAILQ_FOREACH(map, &dev->maplist, link) {
+ if (map->type == type && (map->offset == offset ||
+ (map->type == _DRM_SHM &&
+ map->flags == _DRM_CONTAINS_LOCK))) {
+ map->size = size;
+ DRM_DEBUG("Found kernel map %d\n", type);
+ goto done;
+ }
+ }
+ }
+ DRM_UNLOCK(dev);
+
+ /* Allocate a new map structure, fill it in, and do any type-specific
+ * initialization necessary.
+ */
+ map = malloc(sizeof(*map), DRM_MEM_MAPS, M_ZERO | M_NOWAIT);
+ if (!map) {
+ DRM_LOCK(dev);
+ return ENOMEM;
+ }
+
+ map->offset = offset;
+ map->size = size;
+ map->type = type;
+ map->flags = flags;
+ map->handle = (void *)((unsigned long)alloc_unr(dev->map_unrhdr) <<
+ DRM_MAP_HANDLE_SHIFT);
+
+ switch (map->type) {
+ case _DRM_REGISTERS:
+ map->virtual = drm_ioremap(dev, map);
+ if (!(map->flags & _DRM_WRITE_COMBINING))
+ break;
+ /* FALLTHROUGH */
+ case _DRM_FRAME_BUFFER:
+ if (drm_mtrr_add(map->offset, map->size, DRM_MTRR_WC) == 0)
+ map->mtrr = 1;
+ break;
+ case _DRM_SHM:
+ map->virtual = malloc(map->size, DRM_MEM_MAPS, M_NOWAIT);
+ DRM_DEBUG("%lu %d %p\n",
+ map->size, drm_order(map->size), map->virtual);
+ if (!map->virtual) {
+ free(map, DRM_MEM_MAPS);
+ DRM_LOCK(dev);
+ return ENOMEM;
+ }
+ map->offset = (unsigned long)map->virtual;
+ if (map->flags & _DRM_CONTAINS_LOCK) {
+ /* Prevent a 2nd X Server from creating a 2nd lock */
+ DRM_LOCK(dev);
+ if (dev->lock.hw_lock != NULL) {
+ DRM_UNLOCK(dev);
+ free(map->virtual, DRM_MEM_MAPS);
+ free(map, DRM_MEM_MAPS);
+ return EBUSY;
+ }
+ dev->lock.hw_lock = map->virtual; /* Pointer to lock */
+ DRM_UNLOCK(dev);
+ }
+ break;
+ case _DRM_AGP:
+ /*valid = 0;*/
+ /* In some cases (i810 driver), user space may have already
+ * added the AGP base itself, because dev->agp->base previously
+ * only got set during AGP enable. So, only add the base
+ * address if the map's offset isn't already within the
+ * aperture.
+ */
+ if (map->offset < dev->agp->base ||
+ map->offset > dev->agp->base +
+ dev->agp->info.ai_aperture_size - 1) {
+ map->offset += dev->agp->base;
+ }
+ map->mtrr = dev->agp->mtrr; /* for getmap */
+ /*for (entry = dev->agp->memory; entry; entry = entry->next) {
+ if ((map->offset >= entry->bound) &&
+ (map->offset + map->size <=
+ entry->bound + entry->pages * PAGE_SIZE)) {
+ valid = 1;
+ break;
+ }
+ }
+ if (!valid) {
+ free(map, DRM_MEM_MAPS);
+ DRM_LOCK(dev);
+ return EACCES;
+ }*/
+ break;
+ case _DRM_SCATTER_GATHER:
+ if (!dev->sg) {
+ free(map, DRM_MEM_MAPS);
+ DRM_LOCK(dev);
+ return EINVAL;
+ }
+ map->virtual = (void *)(dev->sg->vaddr + offset);
+ map->offset = dev->sg->vaddr + offset;
+ break;
+ case _DRM_CONSISTENT:
+ /* Unfortunately, we don't get any alignment specification from
+ * the caller, so we have to guess. drm_pci_alloc requires
+ * a power-of-two alignment, so try to align the bus address of
+ * the map to it size if possible, otherwise just assume
+ * PAGE_SIZE alignment.
+ */
+ align = map->size;
+ if ((align & (align - 1)) != 0)
+ align = PAGE_SIZE;
+ map->dmah = drm_pci_alloc(dev, map->size, align, 0xfffffffful);
+ if (map->dmah == NULL) {
+ free(map, DRM_MEM_MAPS);
+ DRM_LOCK(dev);
+ return ENOMEM;
+ }
+ map->virtual = map->dmah->vaddr;
+ map->offset = map->dmah->busaddr;
+ break;
+ default:
+ DRM_ERROR("Bad map type %d\n", map->type);
+ free(map, DRM_MEM_MAPS);
+ DRM_LOCK(dev);
+ return EINVAL;
+ }
+
+ DRM_LOCK(dev);
+ TAILQ_INSERT_TAIL(&dev->maplist, map, link);
+
+done:
+ /* Jumped to, with lock held, when a kernel map is found. */
+
+ DRM_DEBUG("Added map %d 0x%lx/0x%lx\n", map->type, map->offset,
+ map->size);
+
+ *map_ptr = map;
+
+ return 0;
+}
+
+int drm_addmap_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_map *request = data;
+ drm_local_map_t *map;
+ int err;
+
+ if (!(dev->flags & (FREAD|FWRITE)))
+ return EACCES; /* Require read/write */
+
+ if (!DRM_SUSER(DRM_CURPROC) && request->type != _DRM_AGP)
+ return EACCES;
+
+ DRM_LOCK(dev);
+ err = drm_addmap(dev, request->offset, request->size, request->type,
+ request->flags, &map);
+ DRM_UNLOCK(dev);
+ if (err != 0)
+ return err;
+
+ request->offset = map->offset;
+ request->size = map->size;
+ request->type = map->type;
+ request->flags = map->flags;
+ request->mtrr = map->mtrr;
+ request->handle = (void *)map->handle;
+
+ return 0;
+}
+
+void drm_rmmap(struct drm_device *dev, drm_local_map_t *map)
+{
+ DRM_LOCK_ASSERT(dev);
+
+ if (map == NULL)
+ return;
+
+ TAILQ_REMOVE(&dev->maplist, map, link);
+
+ switch (map->type) {
+ case _DRM_REGISTERS:
+ if (map->bsr == NULL)
+ drm_ioremapfree(map);
+ /* FALLTHROUGH */
+ case _DRM_FRAME_BUFFER:
+ if (map->mtrr) {
+ int __unused retcode;
+
+ retcode = drm_mtrr_del(0, map->offset, map->size,
+ DRM_MTRR_WC);
+ DRM_DEBUG("mtrr_del = %d\n", retcode);
+ }
+ break;
+ case _DRM_SHM:
+ free(map->virtual, DRM_MEM_MAPS);
+ break;
+ case _DRM_AGP:
+ case _DRM_SCATTER_GATHER:
+ break;
+ case _DRM_CONSISTENT:
+ drm_pci_free(dev, map->dmah);
+ break;
+ default:
+ DRM_ERROR("Bad map type %d\n", map->type);
+ break;
+ }
+
+ if (map->bsr != NULL) {
+ bus_release_resource(dev->device, SYS_RES_MEMORY, map->rid,
+ map->bsr);
+ }
+
+ DRM_UNLOCK(dev);
+ if (map->handle)
+ free_unr(dev->map_unrhdr, (unsigned long)map->handle >>
+ DRM_MAP_HANDLE_SHIFT);
+ DRM_LOCK(dev);
+
+ free(map, DRM_MEM_MAPS);
+}
+
+/* Remove a map private from list and deallocate resources if the mapping
+ * isn't in use.
+ */
+
+int drm_rmmap_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_local_map_t *map;
+ struct drm_map *request = data;
+
+ DRM_LOCK(dev);
+ TAILQ_FOREACH(map, &dev->maplist, link) {
+ if (map->handle == request->handle &&
+ map->flags & _DRM_REMOVABLE)
+ break;
+ }
+
+ /* No match found. */
+ if (map == NULL) {
+ DRM_UNLOCK(dev);
+ return EINVAL;
+ }
+
+ drm_rmmap(dev, map);
+
+ DRM_UNLOCK(dev);
+
+ return 0;
+}
+
+
+static void drm_cleanup_buf_error(struct drm_device *dev,
+ drm_buf_entry_t *entry)
+{
+ int i;
+
+ if (entry->seg_count) {
+ for (i = 0; i < entry->seg_count; i++) {
+ drm_pci_free(dev, entry->seglist[i]);
+ }
+ free(entry->seglist, DRM_MEM_SEGS);
+
+ entry->seg_count = 0;
+ }
+
+ if (entry->buf_count) {
+ for (i = 0; i < entry->buf_count; i++) {
+ free(entry->buflist[i].dev_private, DRM_MEM_BUFS);
+ }
+ free(entry->buflist, DRM_MEM_BUFS);
+
+ entry->buf_count = 0;
+ }
+}
+
+static int drm_do_addbufs_agp(struct drm_device *dev, struct drm_buf_desc *request)
+{
+ drm_device_dma_t *dma = dev->dma;
+ drm_buf_entry_t *entry;
+ /*drm_agp_mem_t *agp_entry;
+ int valid*/
+ drm_buf_t *buf;
+ unsigned long offset;
+ unsigned long agp_offset;
+ int count;
+ int order;
+ int size;
+ int alignment;
+ int page_order;
+ int total;
+ int byte_count;
+ int i;
+ drm_buf_t **temp_buflist;
+
+ count = request->count;
+ order = drm_order(request->size);
+ size = 1 << order;
+
+ alignment = (request->flags & _DRM_PAGE_ALIGN)
+ ? round_page(size) : size;
+ page_order = order - PAGE_SHIFT > 0 ? order - PAGE_SHIFT : 0;
+ total = PAGE_SIZE << page_order;
+
+ byte_count = 0;
+ agp_offset = dev->agp->base + request->agp_start;
+
+ DRM_DEBUG("count: %d\n", count);
+ DRM_DEBUG("order: %d\n", order);
+ DRM_DEBUG("size: %d\n", size);
+ DRM_DEBUG("agp_offset: 0x%lx\n", agp_offset);
+ DRM_DEBUG("alignment: %d\n", alignment);
+ DRM_DEBUG("page_order: %d\n", page_order);
+ DRM_DEBUG("total: %d\n", total);
+
+ /* Make sure buffers are located in AGP memory that we own */
+ /* Breaks MGA due to drm_alloc_agp not setting up entries for the
+ * memory. Safe to ignore for now because these ioctls are still
+ * root-only.
+ */
+ /*valid = 0;
+ for (agp_entry = dev->agp->memory; agp_entry;
+ agp_entry = agp_entry->next) {
+ if ((agp_offset >= agp_entry->bound) &&
+ (agp_offset + total * count <=
+ agp_entry->bound + agp_entry->pages * PAGE_SIZE)) {
+ valid = 1;
+ break;
+ }
+ }
+ if (!valid) {
+ DRM_DEBUG("zone invalid\n");
+ return EINVAL;
+ }*/
+
+ entry = &dma->bufs[order];
+
+ entry->buflist = malloc(count * sizeof(*entry->buflist), DRM_MEM_BUFS,
+ M_NOWAIT | M_ZERO);
+ if (!entry->buflist) {
+ return ENOMEM;
+ }
+
+ entry->buf_size = size;
+ entry->page_order = page_order;
+
+ offset = 0;
+
+ while (entry->buf_count < count) {
+ buf = &entry->buflist[entry->buf_count];
+ buf->idx = dma->buf_count + entry->buf_count;
+ buf->total = alignment;
+ buf->order = order;
+ buf->used = 0;
+
+ buf->offset = (dma->byte_count + offset);
+ buf->bus_address = agp_offset + offset;
+ buf->address = (void *)(agp_offset + offset);
+ buf->next = NULL;
+ buf->pending = 0;
+ buf->file_priv = NULL;
+
+ buf->dev_priv_size = dev->driver->buf_priv_size;
+ buf->dev_private = malloc(buf->dev_priv_size, DRM_MEM_BUFS,
+ M_NOWAIT | M_ZERO);
+ if (buf->dev_private == NULL) {
+ /* Set count correctly so we free the proper amount. */
+ entry->buf_count = count;
+ drm_cleanup_buf_error(dev, entry);
+ return ENOMEM;
+ }
+
+ offset += alignment;
+ entry->buf_count++;
+ byte_count += PAGE_SIZE << page_order;
+ }
+
+ DRM_DEBUG("byte_count: %d\n", byte_count);
+
+ temp_buflist = realloc(dma->buflist,
+ (dma->buf_count + entry->buf_count) * sizeof(*dma->buflist),
+ DRM_MEM_BUFS, M_NOWAIT);
+ if (temp_buflist == NULL) {
+ /* Free the entry because it isn't valid */
+ drm_cleanup_buf_error(dev, entry);
+ return ENOMEM;
+ }
+ dma->buflist = temp_buflist;
+
+ for (i = 0; i < entry->buf_count; i++) {
+ dma->buflist[i + dma->buf_count] = &entry->buflist[i];
+ }
+
+ dma->buf_count += entry->buf_count;
+ dma->byte_count += byte_count;
+
+ DRM_DEBUG("dma->buf_count : %d\n", dma->buf_count);
+ DRM_DEBUG("entry->buf_count : %d\n", entry->buf_count);
+
+ request->count = entry->buf_count;
+ request->size = size;
+
+ dma->flags = _DRM_DMA_USE_AGP;
+
+ return 0;
+}
+
+static int drm_do_addbufs_pci(struct drm_device *dev, struct drm_buf_desc *request)
+{
+ drm_device_dma_t *dma = dev->dma;
+ int count;
+ int order;
+ int size;
+ int total;
+ int page_order;
+ drm_buf_entry_t *entry;
+ drm_buf_t *buf;
+ int alignment;
+ unsigned long offset;
+ int i;
+ int byte_count;
+ int page_count;
+ unsigned long *temp_pagelist;
+ drm_buf_t **temp_buflist;
+
+ count = request->count;
+ order = drm_order(request->size);
+ size = 1 << order;
+
+ DRM_DEBUG("count=%d, size=%d (%d), order=%d\n",
+ request->count, request->size, size, order);
+
+ alignment = (request->flags & _DRM_PAGE_ALIGN)
+ ? round_page(size) : size;
+ page_order = order - PAGE_SHIFT > 0 ? order - PAGE_SHIFT : 0;
+ total = PAGE_SIZE << page_order;
+
+ entry = &dma->bufs[order];
+
+ entry->buflist = malloc(count * sizeof(*entry->buflist), DRM_MEM_BUFS,
+ M_NOWAIT | M_ZERO);
+ entry->seglist = malloc(count * sizeof(*entry->seglist), DRM_MEM_SEGS,
+ M_NOWAIT | M_ZERO);
+
+ /* Keep the original pagelist until we know all the allocations
+ * have succeeded
+ */
+ temp_pagelist = malloc((dma->page_count + (count << page_order)) *
+ sizeof(*dma->pagelist), DRM_MEM_PAGES, M_NOWAIT);
+
+ if (entry->buflist == NULL || entry->seglist == NULL ||
+ temp_pagelist == NULL) {
+ free(temp_pagelist, DRM_MEM_PAGES);
+ free(entry->seglist, DRM_MEM_SEGS);
+ free(entry->buflist, DRM_MEM_BUFS);
+ return ENOMEM;
+ }
+
+ memcpy(temp_pagelist, dma->pagelist, dma->page_count *
+ sizeof(*dma->pagelist));
+
+ DRM_DEBUG("pagelist: %d entries\n",
+ dma->page_count + (count << page_order));
+
+ entry->buf_size = size;
+ entry->page_order = page_order;
+ byte_count = 0;
+ page_count = 0;
+
+ while (entry->buf_count < count) {
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ drm_dma_handle_t *dmah = drm_pci_alloc(dev, size, alignment,
+ 0xfffffffful);
+ DRM_SPINLOCK(&dev->dma_lock);
+ if (dmah == NULL) {
+ /* Set count correctly so we free the proper amount. */
+ entry->buf_count = count;
+ entry->seg_count = count;
+ drm_cleanup_buf_error(dev, entry);
+ free(temp_pagelist, DRM_MEM_PAGES);
+ return ENOMEM;
+ }
+
+ entry->seglist[entry->seg_count++] = dmah;
+ for (i = 0; i < (1 << page_order); i++) {
+ DRM_DEBUG("page %d @ %p\n",
+ dma->page_count + page_count,
+ (char *)dmah->vaddr + PAGE_SIZE * i);
+ temp_pagelist[dma->page_count + page_count++] =
+ (long)dmah->vaddr + PAGE_SIZE * i;
+ }
+ for (offset = 0;
+ offset + size <= total && entry->buf_count < count;
+ offset += alignment, ++entry->buf_count) {
+ buf = &entry->buflist[entry->buf_count];
+ buf->idx = dma->buf_count + entry->buf_count;
+ buf->total = alignment;
+ buf->order = order;
+ buf->used = 0;
+ buf->offset = (dma->byte_count + byte_count + offset);
+ buf->address = ((char *)dmah->vaddr + offset);
+ buf->bus_address = dmah->busaddr + offset;
+ buf->next = NULL;
+ buf->pending = 0;
+ buf->file_priv = NULL;
+
+ buf->dev_priv_size = dev->driver->buf_priv_size;
+ buf->dev_private = malloc(buf->dev_priv_size,
+ DRM_MEM_BUFS, M_NOWAIT | M_ZERO);
+ if (buf->dev_private == NULL) {
+ /* Set count correctly so we free the proper amount. */
+ entry->buf_count = count;
+ entry->seg_count = count;
+ drm_cleanup_buf_error(dev, entry);
+ free(temp_pagelist, DRM_MEM_PAGES);
+ return ENOMEM;
+ }
+
+ DRM_DEBUG("buffer %d @ %p\n",
+ entry->buf_count, buf->address);
+ }
+ byte_count += PAGE_SIZE << page_order;
+ }
+
+ temp_buflist = realloc(dma->buflist,
+ (dma->buf_count + entry->buf_count) * sizeof(*dma->buflist),
+ DRM_MEM_BUFS, M_NOWAIT);
+ if (temp_buflist == NULL) {
+ /* Free the entry because it isn't valid */
+ drm_cleanup_buf_error(dev, entry);
+ free(temp_pagelist, DRM_MEM_PAGES);
+ return ENOMEM;
+ }
+ dma->buflist = temp_buflist;
+
+ for (i = 0; i < entry->buf_count; i++) {
+ dma->buflist[i + dma->buf_count] = &entry->buflist[i];
+ }
+
+ /* No allocations failed, so now we can replace the orginal pagelist
+ * with the new one.
+ */
+ free(dma->pagelist, DRM_MEM_PAGES);
+ dma->pagelist = temp_pagelist;
+
+ dma->buf_count += entry->buf_count;
+ dma->seg_count += entry->seg_count;
+ dma->page_count += entry->seg_count << page_order;
+ dma->byte_count += PAGE_SIZE * (entry->seg_count << page_order);
+
+ request->count = entry->buf_count;
+ request->size = size;
+
+ return 0;
+
+}
+
+static int drm_do_addbufs_sg(struct drm_device *dev, struct drm_buf_desc *request)
+{
+ drm_device_dma_t *dma = dev->dma;
+ drm_buf_entry_t *entry;
+ drm_buf_t *buf;
+ unsigned long offset;
+ unsigned long agp_offset;
+ int count;
+ int order;
+ int size;
+ int alignment;
+ int page_order;
+ int total;
+ int byte_count;
+ int i;
+ drm_buf_t **temp_buflist;
+
+ count = request->count;
+ order = drm_order(request->size);
+ size = 1 << order;
+
+ alignment = (request->flags & _DRM_PAGE_ALIGN)
+ ? round_page(size) : size;
+ page_order = order - PAGE_SHIFT > 0 ? order - PAGE_SHIFT : 0;
+ total = PAGE_SIZE << page_order;
+
+ byte_count = 0;
+ agp_offset = request->agp_start;
+
+ DRM_DEBUG("count: %d\n", count);
+ DRM_DEBUG("order: %d\n", order);
+ DRM_DEBUG("size: %d\n", size);
+ DRM_DEBUG("agp_offset: %ld\n", agp_offset);
+ DRM_DEBUG("alignment: %d\n", alignment);
+ DRM_DEBUG("page_order: %d\n", page_order);
+ DRM_DEBUG("total: %d\n", total);
+
+ entry = &dma->bufs[order];
+
+ entry->buflist = malloc(count * sizeof(*entry->buflist), DRM_MEM_BUFS,
+ M_NOWAIT | M_ZERO);
+ if (entry->buflist == NULL)
+ return ENOMEM;
+
+ entry->buf_size = size;
+ entry->page_order = page_order;
+
+ offset = 0;
+
+ while (entry->buf_count < count) {
+ buf = &entry->buflist[entry->buf_count];
+ buf->idx = dma->buf_count + entry->buf_count;
+ buf->total = alignment;
+ buf->order = order;
+ buf->used = 0;
+
+ buf->offset = (dma->byte_count + offset);
+ buf->bus_address = agp_offset + offset;
+ buf->address = (void *)(agp_offset + offset + dev->sg->vaddr);
+ buf->next = NULL;
+ buf->pending = 0;
+ buf->file_priv = NULL;
+
+ buf->dev_priv_size = dev->driver->buf_priv_size;
+ buf->dev_private = malloc(buf->dev_priv_size, DRM_MEM_BUFS,
+ M_NOWAIT | M_ZERO);
+ if (buf->dev_private == NULL) {
+ /* Set count correctly so we free the proper amount. */
+ entry->buf_count = count;
+ drm_cleanup_buf_error(dev, entry);
+ return ENOMEM;
+ }
+
+ DRM_DEBUG("buffer %d @ %p\n",
+ entry->buf_count, buf->address);
+
+ offset += alignment;
+ entry->buf_count++;
+ byte_count += PAGE_SIZE << page_order;
+ }
+
+ DRM_DEBUG("byte_count: %d\n", byte_count);
+
+ temp_buflist = realloc(dma->buflist,
+ (dma->buf_count + entry->buf_count) * sizeof(*dma->buflist),
+ DRM_MEM_BUFS, M_NOWAIT);
+ if (temp_buflist == NULL) {
+ /* Free the entry because it isn't valid */
+ drm_cleanup_buf_error(dev, entry);
+ return ENOMEM;
+ }
+ dma->buflist = temp_buflist;
+
+ for (i = 0; i < entry->buf_count; i++) {
+ dma->buflist[i + dma->buf_count] = &entry->buflist[i];
+ }
+
+ dma->buf_count += entry->buf_count;
+ dma->byte_count += byte_count;
+
+ DRM_DEBUG("dma->buf_count : %d\n", dma->buf_count);
+ DRM_DEBUG("entry->buf_count : %d\n", entry->buf_count);
+
+ request->count = entry->buf_count;
+ request->size = size;
+
+ dma->flags = _DRM_DMA_USE_SG;
+
+ return 0;
+}
+
+int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc *request)
+{
+ int order, ret;
+
+ if (request->count < 0 || request->count > 4096)
+ return EINVAL;
+
+ order = drm_order(request->size);
+ if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER)
+ return EINVAL;
+
+ DRM_SPINLOCK(&dev->dma_lock);
+
+ /* No more allocations after first buffer-using ioctl. */
+ if (dev->buf_use != 0) {
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ return EBUSY;
+ }
+ /* No more than one allocation per order */
+ if (dev->dma->bufs[order].buf_count != 0) {
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ return ENOMEM;
+ }
+
+ ret = drm_do_addbufs_agp(dev, request);
+
+ DRM_SPINUNLOCK(&dev->dma_lock);
+
+ return ret;
+}
+
+int drm_addbufs_sg(struct drm_device *dev, struct drm_buf_desc *request)
+{
+ int order, ret;
+
+ if (!DRM_SUSER(DRM_CURPROC))
+ return EACCES;
+
+ if (request->count < 0 || request->count > 4096)
+ return EINVAL;
+
+ order = drm_order(request->size);
+ if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER)
+ return EINVAL;
+
+ DRM_SPINLOCK(&dev->dma_lock);
+
+ /* No more allocations after first buffer-using ioctl. */
+ if (dev->buf_use != 0) {
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ return EBUSY;
+ }
+ /* No more than one allocation per order */
+ if (dev->dma->bufs[order].buf_count != 0) {
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ return ENOMEM;
+ }
+
+ ret = drm_do_addbufs_sg(dev, request);
+
+ DRM_SPINUNLOCK(&dev->dma_lock);
+
+ return ret;
+}
+
+int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc *request)
+{
+ int order, ret;
+
+ if (!DRM_SUSER(DRM_CURPROC))
+ return EACCES;
+
+ if (request->count < 0 || request->count > 4096)
+ return EINVAL;
+
+ order = drm_order(request->size);
+ if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER)
+ return EINVAL;
+
+ DRM_SPINLOCK(&dev->dma_lock);
+
+ /* No more allocations after first buffer-using ioctl. */
+ if (dev->buf_use != 0) {
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ return EBUSY;
+ }
+ /* No more than one allocation per order */
+ if (dev->dma->bufs[order].buf_count != 0) {
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ return ENOMEM;
+ }
+
+ ret = drm_do_addbufs_pci(dev, request);
+
+ DRM_SPINUNLOCK(&dev->dma_lock);
+
+ return ret;
+}
+
+int drm_addbufs(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_buf_desc *request = data;
+ int err;
+
+ if (request->flags & _DRM_AGP_BUFFER)
+ err = drm_addbufs_agp(dev, request);
+ else if (request->flags & _DRM_SG_BUFFER)
+ err = drm_addbufs_sg(dev, request);
+ else
+ err = drm_addbufs_pci(dev, request);
+
+ return err;
+}
+
+int drm_infobufs(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ drm_device_dma_t *dma = dev->dma;
+ struct drm_buf_info *request = data;
+ int i;
+ int count;
+ int retcode = 0;
+
+ DRM_SPINLOCK(&dev->dma_lock);
+ ++dev->buf_use; /* Can't allocate more after this call */
+ DRM_SPINUNLOCK(&dev->dma_lock);
+
+ for (i = 0, count = 0; i < DRM_MAX_ORDER + 1; i++) {
+ if (dma->bufs[i].buf_count)
+ ++count;
+ }
+
+ DRM_DEBUG("count = %d\n", count);
+
+ if (request->count >= count) {
+ for (i = 0, count = 0; i < DRM_MAX_ORDER + 1; i++) {
+ if (dma->bufs[i].buf_count) {
+ struct drm_buf_desc from;
+
+ from.count = dma->bufs[i].buf_count;
+ from.size = dma->bufs[i].buf_size;
+ from.low_mark = dma->bufs[i].freelist.low_mark;
+ from.high_mark = dma->bufs[i].freelist.high_mark;
+
+ if (DRM_COPY_TO_USER(&request->list[count], &from,
+ sizeof(struct drm_buf_desc)) != 0) {
+ retcode = EFAULT;
+ break;
+ }
+
+ DRM_DEBUG("%d %d %d %d %d\n",
+ i, dma->bufs[i].buf_count,
+ dma->bufs[i].buf_size,
+ dma->bufs[i].freelist.low_mark,
+ dma->bufs[i].freelist.high_mark);
+ ++count;
+ }
+ }
+ }
+ request->count = count;
+
+ return retcode;
+}
+
+int drm_markbufs(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ drm_device_dma_t *dma = dev->dma;
+ struct drm_buf_desc *request = data;
+ int order;
+
+ DRM_DEBUG("%d, %d, %d\n",
+ request->size, request->low_mark, request->high_mark);
+
+
+ order = drm_order(request->size);
+ if (order < DRM_MIN_ORDER || order > DRM_MAX_ORDER ||
+ request->low_mark < 0 || request->high_mark < 0) {
+ return EINVAL;
+ }
+
+ DRM_SPINLOCK(&dev->dma_lock);
+ if (request->low_mark > dma->bufs[order].buf_count ||
+ request->high_mark > dma->bufs[order].buf_count) {
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ return EINVAL;
+ }
+
+ dma->bufs[order].freelist.low_mark = request->low_mark;
+ dma->bufs[order].freelist.high_mark = request->high_mark;
+ DRM_SPINUNLOCK(&dev->dma_lock);
+
+ return 0;
+}
+
+int drm_freebufs(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ drm_device_dma_t *dma = dev->dma;
+ struct drm_buf_free *request = data;
+ int i;
+ int idx;
+ drm_buf_t *buf;
+ int retcode = 0;
+
+ DRM_DEBUG("%d\n", request->count);
+
+ DRM_SPINLOCK(&dev->dma_lock);
+ for (i = 0; i < request->count; i++) {
+ if (DRM_COPY_FROM_USER(&idx, &request->list[i], sizeof(idx))) {
+ retcode = EFAULT;
+ break;
+ }
+ if (idx < 0 || idx >= dma->buf_count) {
+ DRM_ERROR("Index %d (of %d max)\n",
+ idx, dma->buf_count - 1);
+ retcode = EINVAL;
+ break;
+ }
+ buf = dma->buflist[idx];
+ if (buf->file_priv != file_priv) {
+ DRM_ERROR("Process %d freeing buffer not owned\n",
+ DRM_CURRENTPID);
+ retcode = EINVAL;
+ break;
+ }
+ drm_free_buffer(dev, buf);
+ }
+ DRM_SPINUNLOCK(&dev->dma_lock);
+
+ return retcode;
+}
+
+int drm_mapbufs(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ drm_device_dma_t *dma = dev->dma;
+ int retcode = 0;
+ const int zero = 0;
+ vm_offset_t address;
+ struct vmspace *vms;
+ vm_ooffset_t foff;
+ vm_size_t size;
+ vm_offset_t vaddr;
+ struct drm_buf_map *request = data;
+ int i;
+
+ vms = DRM_CURPROC->td_proc->p_vmspace;
+
+ DRM_SPINLOCK(&dev->dma_lock);
+ dev->buf_use++; /* Can't allocate more after this call */
+ DRM_SPINUNLOCK(&dev->dma_lock);
+
+ if (request->count < dma->buf_count)
+ goto done;
+
+ if ((drm_core_has_AGP(dev) && (dma->flags & _DRM_DMA_USE_AGP)) ||
+ (drm_core_check_feature(dev, DRIVER_SG) &&
+ (dma->flags & _DRM_DMA_USE_SG))) {
+ drm_local_map_t *map = dev->agp_buffer_map;
+
+ if (map == NULL) {
+ retcode = EINVAL;
+ goto done;
+ }
+ size = round_page(map->size);
+ foff = (unsigned long)map->handle;
+ } else {
+ size = round_page(dma->byte_count),
+ foff = 0;
+ }
+
+ vaddr = round_page((vm_offset_t)vms->vm_daddr + MAXDSIZ);
+#if __FreeBSD_version >= 600023
+ retcode = vm_mmap(&vms->vm_map, &vaddr, size, PROT_READ | PROT_WRITE,
+ VM_PROT_ALL, MAP_SHARED | MAP_NOSYNC, OBJT_DEVICE,
+ dev->devnode, foff);
+#else
+ retcode = vm_mmap(&vms->vm_map, &vaddr, size, PROT_READ | PROT_WRITE,
+ VM_PROT_ALL, MAP_SHARED | MAP_NOSYNC,
+ SLIST_FIRST(&dev->devnode->si_hlist), foff);
+#endif
+ if (retcode)
+ goto done;
+
+ request->virtual = (void *)vaddr;
+
+ for (i = 0; i < dma->buf_count; i++) {
+ if (DRM_COPY_TO_USER(&request->list[i].idx,
+ &dma->buflist[i]->idx, sizeof(request->list[0].idx))) {
+ retcode = EFAULT;
+ goto done;
+ }
+ if (DRM_COPY_TO_USER(&request->list[i].total,
+ &dma->buflist[i]->total, sizeof(request->list[0].total))) {
+ retcode = EFAULT;
+ goto done;
+ }
+ if (DRM_COPY_TO_USER(&request->list[i].used, &zero,
+ sizeof(zero))) {
+ retcode = EFAULT;
+ goto done;
+ }
+ address = vaddr + dma->buflist[i]->offset; /* *** */
+ if (DRM_COPY_TO_USER(&request->list[i].address, &address,
+ sizeof(address))) {
+ retcode = EFAULT;
+ goto done;
+ }
+ }
+
+ done:
+ request->count = dma->buf_count;
+
+ DRM_DEBUG("%d buffers, retcode = %d\n", request->count, retcode);
+
+ return retcode;
+}
+
+/*
+ * Compute order. Can be made faster.
+ */
+int drm_order(unsigned long size)
+{
+ int order;
+
+ if (size == 0)
+ return 0;
+
+ order = flsl(size) - 1;
+ if (size & ~(1ul << order))
+ ++order;
+
+ return order;
+}
diff --git a/sys/dev/drm2/drm_context.c b/sys/dev/drm2/drm_context.c
new file mode 100644
index 000000000000..c844a39dff2c
--- /dev/null
+++ b/sys/dev/drm2/drm_context.c
@@ -0,0 +1,312 @@
+/*-
+ * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_context.c
+ * Implementation of the context management ioctls.
+ */
+
+#include <dev/drm2/drmP.h>
+
+/* ================================================================
+ * Context bitmap support
+ */
+
+void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle)
+{
+ if (ctx_handle < 0 || ctx_handle >= DRM_MAX_CTXBITMAP ||
+ dev->ctx_bitmap == NULL) {
+ DRM_ERROR("Attempt to free invalid context handle: %d\n",
+ ctx_handle);
+ return;
+ }
+
+ DRM_LOCK(dev);
+ clear_bit(ctx_handle, dev->ctx_bitmap);
+ dev->context_sareas[ctx_handle] = NULL;
+ DRM_UNLOCK(dev);
+ return;
+}
+
+int drm_ctxbitmap_next(struct drm_device *dev)
+{
+ int bit;
+
+ if (dev->ctx_bitmap == NULL)
+ return -1;
+
+ DRM_LOCK(dev);
+ bit = find_first_zero_bit(dev->ctx_bitmap, DRM_MAX_CTXBITMAP);
+ if (bit >= DRM_MAX_CTXBITMAP) {
+ DRM_UNLOCK(dev);
+ return -1;
+ }
+
+ set_bit(bit, dev->ctx_bitmap);
+ DRM_DEBUG("bit : %d\n", bit);
+ if ((bit+1) > dev->max_context) {
+ drm_local_map_t **ctx_sareas;
+ int max_ctx = (bit+1);
+
+ ctx_sareas = realloc(dev->context_sareas,
+ max_ctx * sizeof(*dev->context_sareas),
+ DRM_MEM_SAREA, M_NOWAIT);
+ if (ctx_sareas == NULL) {
+ clear_bit(bit, dev->ctx_bitmap);
+ DRM_DEBUG("failed to allocate bit : %d\n", bit);
+ DRM_UNLOCK(dev);
+ return -1;
+ }
+ dev->max_context = max_ctx;
+ dev->context_sareas = ctx_sareas;
+ dev->context_sareas[bit] = NULL;
+ }
+ DRM_UNLOCK(dev);
+ return bit;
+}
+
+int drm_ctxbitmap_init(struct drm_device *dev)
+{
+ int i;
+ int temp;
+
+ DRM_LOCK(dev);
+ dev->ctx_bitmap = malloc(PAGE_SIZE, DRM_MEM_CTXBITMAP,
+ M_NOWAIT | M_ZERO);
+ if (dev->ctx_bitmap == NULL) {
+ DRM_UNLOCK(dev);
+ return ENOMEM;
+ }
+ dev->context_sareas = NULL;
+ dev->max_context = -1;
+ DRM_UNLOCK(dev);
+
+ for (i = 0; i < DRM_RESERVED_CONTEXTS; i++) {
+ temp = drm_ctxbitmap_next(dev);
+ DRM_DEBUG("drm_ctxbitmap_init : %d\n", temp);
+ }
+
+ return 0;
+}
+
+void drm_ctxbitmap_cleanup(struct drm_device *dev)
+{
+ DRM_LOCK(dev);
+ if (dev->context_sareas != NULL)
+ free(dev->context_sareas, DRM_MEM_SAREA);
+ free(dev->ctx_bitmap, DRM_MEM_CTXBITMAP);
+ DRM_UNLOCK(dev);
+}
+
+/* ================================================================
+ * Per Context SAREA Support
+ */
+
+int drm_getsareactx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_ctx_priv_map *request = data;
+ drm_local_map_t *map;
+
+ DRM_LOCK(dev);
+ if (dev->max_context < 0 ||
+ request->ctx_id >= (unsigned) dev->max_context) {
+ DRM_UNLOCK(dev);
+ return EINVAL;
+ }
+
+ map = dev->context_sareas[request->ctx_id];
+ DRM_UNLOCK(dev);
+
+ request->handle = (void *)map->handle;
+
+ return 0;
+}
+
+int drm_setsareactx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_ctx_priv_map *request = data;
+ drm_local_map_t *map = NULL;
+
+ DRM_LOCK(dev);
+ TAILQ_FOREACH(map, &dev->maplist, link) {
+ if (map->handle == request->handle) {
+ if (dev->max_context < 0)
+ goto bad;
+ if (request->ctx_id >= (unsigned) dev->max_context)
+ goto bad;
+ dev->context_sareas[request->ctx_id] = map;
+ DRM_UNLOCK(dev);
+ return 0;
+ }
+ }
+
+bad:
+ DRM_UNLOCK(dev);
+ return EINVAL;
+}
+
+/* ================================================================
+ * The actual DRM context handling routines
+ */
+
+int drm_context_switch(struct drm_device *dev, int old, int new)
+{
+ if (test_and_set_bit(0, &dev->context_flag)) {
+ DRM_ERROR("Reentering -- FIXME\n");
+ return EBUSY;
+ }
+
+ DRM_DEBUG("Context switch from %d to %d\n", old, new);
+
+ if (new == dev->last_context) {
+ clear_bit(0, &dev->context_flag);
+ return 0;
+ }
+
+ return 0;
+}
+
+int drm_context_switch_complete(struct drm_device *dev, int new)
+{
+ dev->last_context = new; /* PRE/POST: This is the _only_ writer. */
+
+ if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
+ DRM_ERROR("Lock isn't held after context switch\n");
+ }
+
+ /* If a context switch is ever initiated
+ when the kernel holds the lock, release
+ that lock here. */
+ clear_bit(0, &dev->context_flag);
+
+ return 0;
+}
+
+int drm_resctx(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_ctx_res *res = data;
+ struct drm_ctx ctx;
+ int i;
+
+ if (res->count >= DRM_RESERVED_CONTEXTS) {
+ bzero(&ctx, sizeof(ctx));
+ for (i = 0; i < DRM_RESERVED_CONTEXTS; i++) {
+ ctx.handle = i;
+ if (DRM_COPY_TO_USER(&res->contexts[i],
+ &ctx, sizeof(ctx)))
+ return EFAULT;
+ }
+ }
+ res->count = DRM_RESERVED_CONTEXTS;
+
+ return 0;
+}
+
+int drm_addctx(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_ctx *ctx = data;
+
+ ctx->handle = drm_ctxbitmap_next(dev);
+ if (ctx->handle == DRM_KERNEL_CONTEXT) {
+ /* Skip kernel's context and get a new one. */
+ ctx->handle = drm_ctxbitmap_next(dev);
+ }
+ DRM_DEBUG("%d\n", ctx->handle);
+ if (ctx->handle == -1) {
+ DRM_DEBUG("Not enough free contexts.\n");
+ /* Should this return -EBUSY instead? */
+ return ENOMEM;
+ }
+
+ if (dev->driver->context_ctor && ctx->handle != DRM_KERNEL_CONTEXT) {
+ DRM_LOCK(dev);
+ dev->driver->context_ctor(dev, ctx->handle);
+ DRM_UNLOCK(dev);
+ }
+
+ return 0;
+}
+
+int drm_modctx(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ /* This does nothing */
+ return 0;
+}
+
+int drm_getctx(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_ctx *ctx = data;
+
+ /* This is 0, because we don't handle any context flags */
+ ctx->flags = 0;
+
+ return 0;
+}
+
+int drm_switchctx(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_ctx *ctx = data;
+
+ DRM_DEBUG("%d\n", ctx->handle);
+ return drm_context_switch(dev, dev->last_context, ctx->handle);
+}
+
+int drm_newctx(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_ctx *ctx = data;
+
+ DRM_DEBUG("%d\n", ctx->handle);
+ drm_context_switch_complete(dev, ctx->handle);
+
+ return 0;
+}
+
+int drm_rmctx(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_ctx *ctx = data;
+
+ DRM_DEBUG("%d\n", ctx->handle);
+ if (ctx->handle != DRM_KERNEL_CONTEXT) {
+ if (dev->driver->context_dtor) {
+ DRM_LOCK(dev);
+ dev->driver->context_dtor(dev, ctx->handle);
+ DRM_UNLOCK(dev);
+ }
+
+ drm_ctxbitmap_free(dev, ctx->handle);
+ }
+
+ return 0;
+}
diff --git a/sys/dev/drm2/drm_crtc.c b/sys/dev/drm2/drm_crtc.c
new file mode 100644
index 000000000000..f6e462e71939
--- /dev/null
+++ b/sys/dev/drm2/drm_crtc.c
@@ -0,0 +1,3413 @@
+/*
+ * Copyright (c) 2006-2008 Intel Corporation
+ * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
+ * Copyright (c) 2008 Red Hat Inc.
+ *
+ * DRM core CRTC related functions
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Authors:
+ * Keith Packard
+ * Eric Anholt <eric@anholt.net>
+ * Dave Airlie <airlied@linux.ie>
+ * Jesse Barnes <jesse.barnes@intel.com>
+ */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/drm_fourcc.h>
+#include <sys/limits.h>
+
+/* Avoid boilerplate. I'm tired of typing. */
+#define DRM_ENUM_NAME_FN(fnname, list) \
+ char *fnname(int val) \
+ { \
+ int i; \
+ for (i = 0; i < DRM_ARRAY_SIZE(list); i++) { \
+ if (list[i].type == val) \
+ return list[i].name; \
+ } \
+ return "(unknown)"; \
+ }
+
+/*
+ * Global properties
+ */
+static struct drm_prop_enum_list drm_dpms_enum_list[] =
+{ { DRM_MODE_DPMS_ON, "On" },
+ { DRM_MODE_DPMS_STANDBY, "Standby" },
+ { DRM_MODE_DPMS_SUSPEND, "Suspend" },
+ { DRM_MODE_DPMS_OFF, "Off" }
+};
+
+DRM_ENUM_NAME_FN(drm_get_dpms_name, drm_dpms_enum_list)
+
+/*
+ * Optional properties
+ */
+static struct drm_prop_enum_list drm_scaling_mode_enum_list[] =
+{
+ { DRM_MODE_SCALE_NONE, "None" },
+ { DRM_MODE_SCALE_FULLSCREEN, "Full" },
+ { DRM_MODE_SCALE_CENTER, "Center" },
+ { DRM_MODE_SCALE_ASPECT, "Full aspect" },
+};
+
+static struct drm_prop_enum_list drm_dithering_mode_enum_list[] =
+{
+ { DRM_MODE_DITHERING_OFF, "Off" },
+ { DRM_MODE_DITHERING_ON, "On" },
+ { DRM_MODE_DITHERING_AUTO, "Automatic" },
+};
+
+/*
+ * Non-global properties, but "required" for certain connectors.
+ */
+static struct drm_prop_enum_list drm_dvi_i_select_enum_list[] =
+{
+ { DRM_MODE_SUBCONNECTOR_Automatic, "Automatic" }, /* DVI-I and TV-out */
+ { DRM_MODE_SUBCONNECTOR_DVID, "DVI-D" }, /* DVI-I */
+ { DRM_MODE_SUBCONNECTOR_DVIA, "DVI-A" }, /* DVI-I */
+};
+
+DRM_ENUM_NAME_FN(drm_get_dvi_i_select_name, drm_dvi_i_select_enum_list)
+
+static struct drm_prop_enum_list drm_dvi_i_subconnector_enum_list[] =
+{
+ { DRM_MODE_SUBCONNECTOR_Unknown, "Unknown" }, /* DVI-I and TV-out */
+ { DRM_MODE_SUBCONNECTOR_DVID, "DVI-D" }, /* DVI-I */
+ { DRM_MODE_SUBCONNECTOR_DVIA, "DVI-A" }, /* DVI-I */
+};
+
+DRM_ENUM_NAME_FN(drm_get_dvi_i_subconnector_name,
+ drm_dvi_i_subconnector_enum_list)
+
+static struct drm_prop_enum_list drm_tv_select_enum_list[] =
+{
+ { DRM_MODE_SUBCONNECTOR_Automatic, "Automatic" }, /* DVI-I and TV-out */
+ { DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */
+ { DRM_MODE_SUBCONNECTOR_SVIDEO, "SVIDEO" }, /* TV-out */
+ { DRM_MODE_SUBCONNECTOR_Component, "Component" }, /* TV-out */
+ { DRM_MODE_SUBCONNECTOR_SCART, "SCART" }, /* TV-out */
+};
+
+DRM_ENUM_NAME_FN(drm_get_tv_select_name, drm_tv_select_enum_list)
+
+static struct drm_prop_enum_list drm_tv_subconnector_enum_list[] =
+{
+ { DRM_MODE_SUBCONNECTOR_Unknown, "Unknown" }, /* DVI-I and TV-out */
+ { DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */
+ { DRM_MODE_SUBCONNECTOR_SVIDEO, "SVIDEO" }, /* TV-out */
+ { DRM_MODE_SUBCONNECTOR_Component, "Component" }, /* TV-out */
+ { DRM_MODE_SUBCONNECTOR_SCART, "SCART" }, /* TV-out */
+};
+
+DRM_ENUM_NAME_FN(drm_get_tv_subconnector_name,
+ drm_tv_subconnector_enum_list)
+
+static struct drm_prop_enum_list drm_dirty_info_enum_list[] = {
+ { DRM_MODE_DIRTY_OFF, "Off" },
+ { DRM_MODE_DIRTY_ON, "On" },
+ { DRM_MODE_DIRTY_ANNOTATE, "Annotate" },
+};
+
+DRM_ENUM_NAME_FN(drm_get_dirty_info_name,
+ drm_dirty_info_enum_list)
+
+struct drm_conn_prop_enum_list {
+ int type;
+ char *name;
+ int count;
+};
+
+/*
+ * Connector and encoder types.
+ */
+static struct drm_conn_prop_enum_list drm_connector_enum_list[] =
+{ { DRM_MODE_CONNECTOR_Unknown, "Unknown", 0 },
+ { DRM_MODE_CONNECTOR_VGA, "VGA", 0 },
+ { DRM_MODE_CONNECTOR_DVII, "DVI-I", 0 },
+ { DRM_MODE_CONNECTOR_DVID, "DVI-D", 0 },
+ { DRM_MODE_CONNECTOR_DVIA, "DVI-A", 0 },
+ { DRM_MODE_CONNECTOR_Composite, "Composite", 0 },
+ { DRM_MODE_CONNECTOR_SVIDEO, "SVIDEO", 0 },
+ { DRM_MODE_CONNECTOR_LVDS, "LVDS", 0 },
+ { DRM_MODE_CONNECTOR_Component, "Component", 0 },
+ { DRM_MODE_CONNECTOR_9PinDIN, "DIN", 0 },
+ { DRM_MODE_CONNECTOR_DisplayPort, "DP", 0 },
+ { DRM_MODE_CONNECTOR_HDMIA, "HDMI-A", 0 },
+ { DRM_MODE_CONNECTOR_HDMIB, "HDMI-B", 0 },
+ { DRM_MODE_CONNECTOR_TV, "TV", 0 },
+ { DRM_MODE_CONNECTOR_eDP, "eDP", 0 },
+};
+
+static struct drm_prop_enum_list drm_encoder_enum_list[] =
+{ { DRM_MODE_ENCODER_NONE, "None" },
+ { DRM_MODE_ENCODER_DAC, "DAC" },
+ { DRM_MODE_ENCODER_TMDS, "TMDS" },
+ { DRM_MODE_ENCODER_LVDS, "LVDS" },
+ { DRM_MODE_ENCODER_TVDAC, "TV" },
+};
+
+char *drm_get_encoder_name(struct drm_encoder *encoder)
+{
+ static char buf[32];
+
+ snprintf(buf, 32, "%s-%d",
+ drm_encoder_enum_list[encoder->encoder_type].name,
+ encoder->base.id);
+ return buf;
+}
+
+char *drm_get_connector_name(struct drm_connector *connector)
+{
+ static char buf[32];
+
+ snprintf(buf, 32, "%s-%d",
+ drm_connector_enum_list[connector->connector_type].name,
+ connector->connector_type_id);
+ return buf;
+}
+
+char *drm_get_connector_status_name(enum drm_connector_status status)
+{
+ if (status == connector_status_connected)
+ return "connected";
+ else if (status == connector_status_disconnected)
+ return "disconnected";
+ else
+ return "unknown";
+}
+
+/**
+ * drm_mode_object_get - allocate a new identifier
+ * @dev: DRM device
+ * @ptr: object pointer, used to generate unique ID
+ * @type: object type
+ *
+ * LOCKING:
+ *
+ * Create a unique identifier based on @ptr in @dev's identifier space. Used
+ * for tracking modes, CRTCs and connectors.
+ *
+ * RETURNS:
+ * New unique (relative to other objects in @dev) integer identifier for the
+ * object.
+ */
+static int drm_mode_object_get(struct drm_device *dev,
+ struct drm_mode_object *obj, uint32_t obj_type)
+{
+ int new_id;
+ int ret;
+
+ new_id = 0;
+ ret = drm_gem_name_create(&dev->mode_config.crtc_names, obj, &new_id);
+ if (ret != 0)
+ return (ret);
+
+ obj->id = new_id;
+ obj->type = obj_type;
+ return 0;
+}
+
+/**
+ * drm_mode_object_put - free an identifer
+ * @dev: DRM device
+ * @id: ID to free
+ *
+ * LOCKING:
+ * Caller must hold DRM mode_config lock.
+ *
+ * Free @id from @dev's unique identifier pool.
+ */
+static void drm_mode_object_put(struct drm_device *dev,
+ struct drm_mode_object *object)
+{
+
+ drm_gem_names_remove(&dev->mode_config.crtc_names, object->id);
+}
+
+struct drm_mode_object *drm_mode_object_find(struct drm_device *dev,
+ uint32_t id, uint32_t type)
+{
+ struct drm_mode_object *obj;
+
+ obj = drm_gem_name_ref(&dev->mode_config.crtc_names, id, NULL);
+ if (!obj || (obj->type != type) || (obj->id != id))
+ obj = NULL;
+
+ return obj;
+}
+
+/**
+ * drm_framebuffer_init - initialize a framebuffer
+ * @dev: DRM device
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Allocates an ID for the framebuffer's parent mode object, sets its mode
+ * functions & device file and adds it to the master fd list.
+ *
+ * RETURNS:
+ * Zero on success, error code on failure.
+ */
+int drm_framebuffer_init(struct drm_device *dev, struct drm_framebuffer *fb,
+ const struct drm_framebuffer_funcs *funcs)
+{
+ int ret;
+
+ DRM_MODE_CONFIG_ASSERT_LOCKED(dev);
+
+ ret = drm_mode_object_get(dev, &fb->base, DRM_MODE_OBJECT_FB);
+ if (ret)
+ return ret;
+
+ fb->dev = dev;
+ fb->funcs = funcs;
+ dev->mode_config.num_fb++;
+ list_add(&fb->head, &dev->mode_config.fb_list);
+
+ return 0;
+}
+
+/**
+ * drm_framebuffer_cleanup - remove a framebuffer object
+ * @fb: framebuffer to remove
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Scans all the CRTCs in @dev's mode_config. If they're using @fb, removes
+ * it, setting it to NULL.
+ */
+void drm_framebuffer_cleanup(struct drm_framebuffer *fb)
+{
+ struct drm_device *dev = fb->dev;
+ struct drm_crtc *crtc;
+ struct drm_plane *plane;
+ struct drm_mode_set set;
+ int ret;
+
+ DRM_MODE_CONFIG_ASSERT_LOCKED(dev);
+
+ /* remove from any CRTC */
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ if (crtc->fb == fb) {
+ /* should turn off the crtc */
+ memset(&set, 0, sizeof(struct drm_mode_set));
+ set.crtc = crtc;
+ set.fb = NULL;
+ ret = crtc->funcs->set_config(&set);
+ if (ret)
+ DRM_ERROR("failed to reset crtc %p when fb was deleted\n", crtc);
+ }
+ }
+
+ list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
+ if (plane->fb == fb) {
+ /* should turn off the crtc */
+ ret = plane->funcs->disable_plane(plane);
+ if (ret)
+ DRM_ERROR("failed to disable plane with busy fb\n");
+ /* disconnect the plane from the fb and crtc: */
+ plane->fb = NULL;
+ plane->crtc = NULL;
+ }
+ }
+
+ drm_mode_object_put(dev, &fb->base);
+ list_del(&fb->head);
+ dev->mode_config.num_fb--;
+}
+
+/**
+ * drm_crtc_init - Initialise a new CRTC object
+ * @dev: DRM device
+ * @crtc: CRTC object to init
+ * @funcs: callbacks for the new CRTC
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Inits a new object created as base part of an driver crtc object.
+ *
+ * RETURNS:
+ * Zero on success, error code on failure.
+ */
+int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
+ const struct drm_crtc_funcs *funcs)
+{
+ int ret;
+
+ crtc->dev = dev;
+ crtc->funcs = funcs;
+
+ sx_xlock(&dev->mode_config.mutex);
+ ret = drm_mode_object_get(dev, &crtc->base, DRM_MODE_OBJECT_CRTC);
+ if (ret)
+ goto out;
+
+ list_add_tail(&crtc->head, &dev->mode_config.crtc_list);
+ dev->mode_config.num_crtc++;
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+
+ return ret;
+}
+
+/**
+ * drm_crtc_cleanup - Cleans up the core crtc usage.
+ * @crtc: CRTC to cleanup
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Cleanup @crtc. Removes from drm modesetting space
+ * does NOT free object, caller does that.
+ */
+void drm_crtc_cleanup(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+
+ DRM_MODE_CONFIG_ASSERT_LOCKED(dev);
+
+ if (crtc->gamma_store) {
+ free(crtc->gamma_store, DRM_MEM_KMS);
+ crtc->gamma_store = NULL;
+ }
+
+ drm_mode_object_put(dev, &crtc->base);
+ list_del(&crtc->head);
+ dev->mode_config.num_crtc--;
+}
+
+/**
+ * drm_mode_probed_add - add a mode to a connector's probed mode list
+ * @connector: connector the new mode
+ * @mode: mode data
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Add @mode to @connector's mode list for later use.
+ */
+void drm_mode_probed_add(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+
+ DRM_MODE_CONFIG_ASSERT_LOCKED(connector->dev);
+
+ list_add(&mode->head, &connector->probed_modes);
+}
+
+/**
+ * drm_mode_remove - remove and free a mode
+ * @connector: connector list to modify
+ * @mode: mode to remove
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Remove @mode from @connector's mode list, then free it.
+ */
+void drm_mode_remove(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+
+ DRM_MODE_CONFIG_ASSERT_LOCKED(connector->dev);
+
+ list_del(&mode->head);
+ drm_mode_destroy(connector->dev, mode);
+}
+
+/**
+ * drm_connector_init - Init a preallocated connector
+ * @dev: DRM device
+ * @connector: the connector to init
+ * @funcs: callbacks for this connector
+ * @name: user visible name of the connector
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Initialises a preallocated connector. Connectors should be
+ * subclassed as part of driver connector objects.
+ *
+ * RETURNS:
+ * Zero on success, error code on failure.
+ */
+int drm_connector_init(struct drm_device *dev,
+ struct drm_connector *connector,
+ const struct drm_connector_funcs *funcs,
+ int connector_type)
+{
+ int ret;
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ ret = drm_mode_object_get(dev, &connector->base, DRM_MODE_OBJECT_CONNECTOR);
+ if (ret)
+ goto out;
+
+ connector->dev = dev;
+ connector->funcs = funcs;
+ connector->connector_type = connector_type;
+ connector->connector_type_id =
+ ++drm_connector_enum_list[connector_type].count; /* TODO */
+ INIT_LIST_HEAD(&connector->user_modes);
+ INIT_LIST_HEAD(&connector->probed_modes);
+ INIT_LIST_HEAD(&connector->modes);
+ connector->edid_blob_ptr = NULL;
+
+ list_add_tail(&connector->head, &dev->mode_config.connector_list);
+ dev->mode_config.num_connector++;
+
+ drm_connector_attach_property(connector,
+ dev->mode_config.edid_property, 0);
+
+ drm_connector_attach_property(connector,
+ dev->mode_config.dpms_property, 0);
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+
+ return ret;
+}
+
+/**
+ * drm_connector_cleanup - cleans up an initialised connector
+ * @connector: connector to cleanup
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Cleans up the connector but doesn't free the object.
+ */
+void drm_connector_cleanup(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+ struct drm_display_mode *mode, *t;
+
+ list_for_each_entry_safe(mode, t, &connector->probed_modes, head)
+ drm_mode_remove(connector, mode);
+
+ list_for_each_entry_safe(mode, t, &connector->modes, head)
+ drm_mode_remove(connector, mode);
+
+ list_for_each_entry_safe(mode, t, &connector->user_modes, head)
+ drm_mode_remove(connector, mode);
+
+ sx_xlock(&dev->mode_config.mutex);
+ drm_mode_object_put(dev, &connector->base);
+ list_del(&connector->head);
+ dev->mode_config.num_connector--;
+ sx_xunlock(&dev->mode_config.mutex);
+}
+
+int drm_encoder_init(struct drm_device *dev,
+ struct drm_encoder *encoder,
+ const struct drm_encoder_funcs *funcs,
+ int encoder_type)
+{
+ int ret;
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ ret = drm_mode_object_get(dev, &encoder->base, DRM_MODE_OBJECT_ENCODER);
+ if (ret)
+ goto out;
+
+ encoder->dev = dev;
+ encoder->encoder_type = encoder_type;
+ encoder->funcs = funcs;
+
+ list_add_tail(&encoder->head, &dev->mode_config.encoder_list);
+ dev->mode_config.num_encoder++;
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+
+ return ret;
+}
+
+void drm_encoder_cleanup(struct drm_encoder *encoder)
+{
+ struct drm_device *dev = encoder->dev;
+
+ sx_xlock(&dev->mode_config.mutex);
+ drm_mode_object_put(dev, &encoder->base);
+ list_del(&encoder->head);
+ dev->mode_config.num_encoder--;
+ sx_xunlock(&dev->mode_config.mutex);
+}
+
+int drm_plane_init(struct drm_device *dev, struct drm_plane *plane,
+ unsigned long possible_crtcs,
+ const struct drm_plane_funcs *funcs,
+ const uint32_t *formats, uint32_t format_count,
+ bool priv)
+{
+ int ret;
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ ret = drm_mode_object_get(dev, &plane->base, DRM_MODE_OBJECT_PLANE);
+ if (ret)
+ goto out;
+
+ plane->dev = dev;
+ plane->funcs = funcs;
+ plane->format_types = malloc(sizeof(uint32_t) * format_count,
+ DRM_MEM_KMS, M_WAITOK);
+
+ memcpy(plane->format_types, formats, format_count * sizeof(uint32_t));
+ plane->format_count = format_count;
+ plane->possible_crtcs = possible_crtcs;
+
+ /* private planes are not exposed to userspace, but depending on
+ * display hardware, might be convenient to allow sharing programming
+ * for the scanout engine with the crtc implementation.
+ */
+ if (!priv) {
+ list_add_tail(&plane->head, &dev->mode_config.plane_list);
+ dev->mode_config.num_plane++;
+ } else {
+ INIT_LIST_HEAD(&plane->head);
+ }
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+
+ return ret;
+}
+
+void drm_plane_cleanup(struct drm_plane *plane)
+{
+ struct drm_device *dev = plane->dev;
+
+ sx_xlock(&dev->mode_config.mutex);
+ free(plane->format_types, DRM_MEM_KMS);
+ drm_mode_object_put(dev, &plane->base);
+ /* if not added to a list, it must be a private plane */
+ if (!list_empty(&plane->head)) {
+ list_del(&plane->head);
+ dev->mode_config.num_plane--;
+ }
+ sx_xunlock(&dev->mode_config.mutex);
+}
+
+/**
+ * drm_mode_create - create a new display mode
+ * @dev: DRM device
+ *
+ * LOCKING:
+ * Caller must hold DRM mode_config lock.
+ *
+ * Create a new drm_display_mode, give it an ID, and return it.
+ *
+ * RETURNS:
+ * Pointer to new mode on success, NULL on error.
+ */
+struct drm_display_mode *drm_mode_create(struct drm_device *dev)
+{
+ struct drm_display_mode *nmode;
+
+ nmode = malloc(sizeof(struct drm_display_mode), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ if (drm_mode_object_get(dev, &nmode->base, DRM_MODE_OBJECT_MODE)) {
+ free(nmode, DRM_MEM_KMS);
+ return (NULL);
+ }
+ return nmode;
+}
+
+/**
+ * drm_mode_destroy - remove a mode
+ * @dev: DRM device
+ * @mode: mode to remove
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Free @mode's unique identifier, then free it.
+ */
+void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode)
+{
+ if (!mode)
+ return;
+
+ drm_mode_object_put(dev, &mode->base);
+
+ free(mode, DRM_MEM_KMS);
+}
+
+static int drm_mode_create_standard_connector_properties(struct drm_device *dev)
+{
+ struct drm_property *edid;
+ struct drm_property *dpms;
+
+ /*
+ * Standard properties (apply to all connectors)
+ */
+ edid = drm_property_create(dev, DRM_MODE_PROP_BLOB |
+ DRM_MODE_PROP_IMMUTABLE,
+ "EDID", 0);
+ dev->mode_config.edid_property = edid;
+
+ dpms = drm_property_create_enum(dev, 0,
+ "DPMS", drm_dpms_enum_list,
+ DRM_ARRAY_SIZE(drm_dpms_enum_list));
+ dev->mode_config.dpms_property = dpms;
+
+ return 0;
+}
+
+/**
+ * drm_mode_create_dvi_i_properties - create DVI-I specific connector properties
+ * @dev: DRM device
+ *
+ * Called by a driver the first time a DVI-I connector is made.
+ */
+int drm_mode_create_dvi_i_properties(struct drm_device *dev)
+{
+ struct drm_property *dvi_i_selector;
+ struct drm_property *dvi_i_subconnector;
+
+ if (dev->mode_config.dvi_i_select_subconnector_property)
+ return 0;
+
+ dvi_i_selector =
+ drm_property_create_enum(dev, 0,
+ "select subconnector",
+ drm_dvi_i_select_enum_list,
+ DRM_ARRAY_SIZE(drm_dvi_i_select_enum_list));
+ dev->mode_config.dvi_i_select_subconnector_property = dvi_i_selector;
+
+ dvi_i_subconnector = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE,
+ "subconnector",
+ drm_dvi_i_subconnector_enum_list,
+ DRM_ARRAY_SIZE(drm_dvi_i_subconnector_enum_list));
+ dev->mode_config.dvi_i_subconnector_property = dvi_i_subconnector;
+
+ return 0;
+}
+
+/**
+ * drm_create_tv_properties - create TV specific connector properties
+ * @dev: DRM device
+ * @num_modes: number of different TV formats (modes) supported
+ * @modes: array of pointers to strings containing name of each format
+ *
+ * Called by a driver's TV initialization routine, this function creates
+ * the TV specific connector properties for a given device. Caller is
+ * responsible for allocating a list of format names and passing them to
+ * this routine.
+ */
+int drm_mode_create_tv_properties(struct drm_device *dev, int num_modes,
+ char *modes[])
+{
+ struct drm_property *tv_selector;
+ struct drm_property *tv_subconnector;
+ int i;
+
+ if (dev->mode_config.tv_select_subconnector_property)
+ return 0;
+
+ /*
+ * Basic connector properties
+ */
+ tv_selector = drm_property_create_enum(dev, 0,
+ "select subconnector",
+ drm_tv_select_enum_list,
+ DRM_ARRAY_SIZE(drm_tv_select_enum_list));
+ dev->mode_config.tv_select_subconnector_property = tv_selector;
+
+ tv_subconnector =
+ drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE,
+ "subconnector",
+ drm_tv_subconnector_enum_list,
+ DRM_ARRAY_SIZE(drm_tv_subconnector_enum_list));
+ dev->mode_config.tv_subconnector_property = tv_subconnector;
+
+ /*
+ * Other, TV specific properties: margins & TV modes.
+ */
+ dev->mode_config.tv_left_margin_property =
+ drm_property_create_range(dev, 0, "left margin", 0, 100);
+
+ dev->mode_config.tv_right_margin_property =
+ drm_property_create_range(dev, 0, "right margin", 0, 100);
+
+ dev->mode_config.tv_top_margin_property =
+ drm_property_create_range(dev, 0, "top margin", 0, 100);
+
+ dev->mode_config.tv_bottom_margin_property =
+ drm_property_create_range(dev, 0, "bottom margin", 0, 100);
+
+ dev->mode_config.tv_mode_property =
+ drm_property_create(dev, DRM_MODE_PROP_ENUM,
+ "mode", num_modes);
+ for (i = 0; i < num_modes; i++)
+ drm_property_add_enum(dev->mode_config.tv_mode_property, i,
+ i, modes[i]);
+
+ dev->mode_config.tv_brightness_property =
+ drm_property_create_range(dev, 0, "brightness", 0, 100);
+
+ dev->mode_config.tv_contrast_property =
+ drm_property_create_range(dev, 0, "contrast", 0, 100);
+
+ dev->mode_config.tv_flicker_reduction_property =
+ drm_property_create_range(dev, 0, "flicker reduction", 0, 100);
+
+ dev->mode_config.tv_overscan_property =
+ drm_property_create_range(dev, 0, "overscan", 0, 100);
+
+ dev->mode_config.tv_saturation_property =
+ drm_property_create_range(dev, 0, "saturation", 0, 100);
+
+ dev->mode_config.tv_hue_property =
+ drm_property_create_range(dev, 0, "hue", 0, 100);
+
+ return 0;
+}
+
+/**
+ * drm_mode_create_scaling_mode_property - create scaling mode property
+ * @dev: DRM device
+ *
+ * Called by a driver the first time it's needed, must be attached to desired
+ * connectors.
+ */
+int drm_mode_create_scaling_mode_property(struct drm_device *dev)
+{
+ struct drm_property *scaling_mode;
+
+ if (dev->mode_config.scaling_mode_property)
+ return 0;
+
+ scaling_mode =
+ drm_property_create_enum(dev, 0, "scaling mode",
+ drm_scaling_mode_enum_list,
+ DRM_ARRAY_SIZE(drm_scaling_mode_enum_list));
+
+ dev->mode_config.scaling_mode_property = scaling_mode;
+
+ return 0;
+}
+
+/**
+ * drm_mode_create_dithering_property - create dithering property
+ * @dev: DRM device
+ *
+ * Called by a driver the first time it's needed, must be attached to desired
+ * connectors.
+ */
+int drm_mode_create_dithering_property(struct drm_device *dev)
+{
+ struct drm_property *dithering_mode;
+
+ if (dev->mode_config.dithering_mode_property)
+ return 0;
+
+ dithering_mode =
+ drm_property_create_enum(dev, 0, "dithering",
+ drm_dithering_mode_enum_list,
+ DRM_ARRAY_SIZE(drm_dithering_mode_enum_list));
+ dev->mode_config.dithering_mode_property = dithering_mode;
+
+ return 0;
+}
+
+/**
+ * drm_mode_create_dirty_property - create dirty property
+ * @dev: DRM device
+ *
+ * Called by a driver the first time it's needed, must be attached to desired
+ * connectors.
+ */
+int drm_mode_create_dirty_info_property(struct drm_device *dev)
+{
+ struct drm_property *dirty_info;
+
+ if (dev->mode_config.dirty_info_property)
+ return 0;
+
+ dirty_info =
+ drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE,
+ "dirty",
+ drm_dirty_info_enum_list,
+ DRM_ARRAY_SIZE(drm_dirty_info_enum_list));
+ dev->mode_config.dirty_info_property = dirty_info;
+
+ return 0;
+}
+
+/**
+ * drm_mode_config_init - initialize DRM mode_configuration structure
+ * @dev: DRM device
+ *
+ * LOCKING:
+ * None, should happen single threaded at init time.
+ *
+ * Initialize @dev's mode_config structure, used for tracking the graphics
+ * configuration of @dev.
+ */
+void drm_mode_config_init(struct drm_device *dev)
+{
+ sx_init(&dev->mode_config.mutex, "kmslk");
+ INIT_LIST_HEAD(&dev->mode_config.fb_list);
+ INIT_LIST_HEAD(&dev->mode_config.crtc_list);
+ INIT_LIST_HEAD(&dev->mode_config.connector_list);
+ INIT_LIST_HEAD(&dev->mode_config.encoder_list);
+ INIT_LIST_HEAD(&dev->mode_config.property_list);
+ INIT_LIST_HEAD(&dev->mode_config.property_blob_list);
+ INIT_LIST_HEAD(&dev->mode_config.plane_list);
+ drm_gem_names_init(&dev->mode_config.crtc_names);
+
+ sx_xlock(&dev->mode_config.mutex);
+ drm_mode_create_standard_connector_properties(dev);
+ sx_xunlock(&dev->mode_config.mutex);
+
+ /* Just to be sure */
+ dev->mode_config.num_fb = 0;
+ dev->mode_config.num_connector = 0;
+ dev->mode_config.num_crtc = 0;
+ dev->mode_config.num_encoder = 0;
+}
+
+static int
+drm_mode_group_init(struct drm_device *dev, struct drm_mode_group *group)
+{
+ uint32_t total_objects = 0;
+
+ total_objects += dev->mode_config.num_crtc;
+ total_objects += dev->mode_config.num_connector;
+ total_objects += dev->mode_config.num_encoder;
+
+ group->id_list = malloc(total_objects * sizeof(uint32_t),
+ DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ group->num_crtcs = 0;
+ group->num_connectors = 0;
+ group->num_encoders = 0;
+ return 0;
+}
+
+int drm_mode_group_init_legacy_group(struct drm_device *dev,
+ struct drm_mode_group *group)
+{
+ struct drm_crtc *crtc;
+ struct drm_encoder *encoder;
+ struct drm_connector *connector;
+ int ret;
+
+ if ((ret = drm_mode_group_init(dev, group)))
+ return ret;
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
+ group->id_list[group->num_crtcs++] = crtc->base.id;
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head)
+ group->id_list[group->num_crtcs + group->num_encoders++] =
+ encoder->base.id;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head)
+ group->id_list[group->num_crtcs + group->num_encoders +
+ group->num_connectors++] = connector->base.id;
+
+ return 0;
+}
+
+/**
+ * drm_mode_config_cleanup - free up DRM mode_config info
+ * @dev: DRM device
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Free up all the connectors and CRTCs associated with this DRM device, then
+ * free up the framebuffers and associated buffer objects.
+ *
+ * FIXME: cleanup any dangling user buffer objects too
+ */
+void drm_mode_config_cleanup(struct drm_device *dev)
+{
+ struct drm_connector *connector, *ot;
+ struct drm_crtc *crtc, *ct;
+ struct drm_encoder *encoder, *enct;
+ struct drm_framebuffer *fb, *fbt;
+ struct drm_property *property, *pt;
+ struct drm_plane *plane, *plt;
+
+ list_for_each_entry_safe(encoder, enct, &dev->mode_config.encoder_list,
+ head) {
+ encoder->funcs->destroy(encoder);
+ }
+
+ list_for_each_entry_safe(connector, ot,
+ &dev->mode_config.connector_list, head) {
+ connector->funcs->destroy(connector);
+ }
+
+ list_for_each_entry_safe(property, pt, &dev->mode_config.property_list,
+ head) {
+ drm_property_destroy(dev, property);
+ }
+
+ list_for_each_entry_safe(fb, fbt, &dev->mode_config.fb_list, head) {
+ fb->funcs->destroy(fb);
+ }
+
+ list_for_each_entry_safe(crtc, ct, &dev->mode_config.crtc_list, head) {
+ crtc->funcs->destroy(crtc);
+ }
+
+ list_for_each_entry_safe(plane, plt, &dev->mode_config.plane_list,
+ head) {
+ plane->funcs->destroy(plane);
+ }
+ drm_gem_names_fini(&dev->mode_config.crtc_names);
+}
+
+/**
+ * drm_crtc_convert_to_umode - convert a drm_display_mode into a modeinfo
+ * @out: drm_mode_modeinfo struct to return to the user
+ * @in: drm_display_mode to use
+ *
+ * LOCKING:
+ * None.
+ *
+ * Convert a drm_display_mode into a drm_mode_modeinfo structure to return to
+ * the user.
+ */
+static void drm_crtc_convert_to_umode(struct drm_mode_modeinfo *out,
+ const struct drm_display_mode *in)
+{
+ if (in->hdisplay > USHRT_MAX || in->hsync_start > USHRT_MAX ||
+ in->hsync_end > USHRT_MAX || in->htotal > USHRT_MAX ||
+ in->hskew > USHRT_MAX || in->vdisplay > USHRT_MAX ||
+ in->vsync_start > USHRT_MAX || in->vsync_end > USHRT_MAX ||
+ in->vtotal > USHRT_MAX || in->vscan > USHRT_MAX)
+ printf("timing values too large for mode info\n");
+
+ out->clock = in->clock;
+ out->hdisplay = in->hdisplay;
+ out->hsync_start = in->hsync_start;
+ out->hsync_end = in->hsync_end;
+ out->htotal = in->htotal;
+ out->hskew = in->hskew;
+ out->vdisplay = in->vdisplay;
+ out->vsync_start = in->vsync_start;
+ out->vsync_end = in->vsync_end;
+ out->vtotal = in->vtotal;
+ out->vscan = in->vscan;
+ out->vrefresh = in->vrefresh;
+ out->flags = in->flags;
+ out->type = in->type;
+ strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
+ out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
+}
+
+/**
+ * drm_crtc_convert_to_umode - convert a modeinfo into a drm_display_mode
+ * @out: drm_display_mode to return to the user
+ * @in: drm_mode_modeinfo to use
+ *
+ * LOCKING:
+ * None.
+ *
+ * Convert a drm_mode_modeinfo into a drm_display_mode structure to return to
+ * the caller.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+static int drm_crtc_convert_umode(struct drm_display_mode *out,
+ const struct drm_mode_modeinfo *in)
+{
+ if (in->clock > INT_MAX || in->vrefresh > INT_MAX)
+ return ERANGE;
+
+ out->clock = in->clock;
+ out->hdisplay = in->hdisplay;
+ out->hsync_start = in->hsync_start;
+ out->hsync_end = in->hsync_end;
+ out->htotal = in->htotal;
+ out->hskew = in->hskew;
+ out->vdisplay = in->vdisplay;
+ out->vsync_start = in->vsync_start;
+ out->vsync_end = in->vsync_end;
+ out->vtotal = in->vtotal;
+ out->vscan = in->vscan;
+ out->vrefresh = in->vrefresh;
+ out->flags = in->flags;
+ out->type = in->type;
+ strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
+ out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
+
+ return 0;
+}
+
+/**
+ * drm_mode_getresources - get graphics configuration
+ * @inode: inode from the ioctl
+ * @filp: file * from the ioctl
+ * @cmd: cmd from ioctl
+ * @arg: arg from ioctl
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Construct a set of configuration description structures and return
+ * them to the user, including CRTC, connector and framebuffer configuration.
+ *
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+int drm_mode_getresources(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_mode_card_res *card_res = data;
+ struct list_head *lh;
+ struct drm_framebuffer *fb;
+ struct drm_connector *connector;
+ struct drm_crtc *crtc;
+ struct drm_encoder *encoder;
+ int ret = 0;
+ int connector_count = 0;
+ int crtc_count = 0;
+ int fb_count = 0;
+ int encoder_count = 0;
+ int copied = 0, i;
+ uint32_t __user *fb_id;
+ uint32_t __user *crtc_id;
+ uint32_t __user *connector_id;
+ uint32_t __user *encoder_id;
+ struct drm_mode_group *mode_group;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ /*
+ * For the non-control nodes we need to limit the list of resources
+ * by IDs in the group list for this node
+ */
+ list_for_each(lh, &file_priv->fbs)
+ fb_count++;
+
+#if 1
+ mode_group = NULL; /* XXXKIB */
+ if (1 || file_priv->master) {
+#else
+ mode_group = &file_priv->masterp->minor->mode_group;
+ if (file_priv->masterp->minor->type == DRM_MINOR_CONTROL) {
+#endif
+
+ list_for_each(lh, &dev->mode_config.crtc_list)
+ crtc_count++;
+
+ list_for_each(lh, &dev->mode_config.connector_list)
+ connector_count++;
+
+ list_for_each(lh, &dev->mode_config.encoder_list)
+ encoder_count++;
+ } else {
+
+ crtc_count = mode_group->num_crtcs;
+ connector_count = mode_group->num_connectors;
+ encoder_count = mode_group->num_encoders;
+ }
+
+ card_res->max_height = dev->mode_config.max_height;
+ card_res->min_height = dev->mode_config.min_height;
+ card_res->max_width = dev->mode_config.max_width;
+ card_res->min_width = dev->mode_config.min_width;
+
+ /* handle this in 4 parts */
+ /* FBs */
+ if (card_res->count_fbs >= fb_count) {
+ copied = 0;
+ fb_id = (uint32_t *)(uintptr_t)card_res->fb_id_ptr;
+ list_for_each_entry(fb, &file_priv->fbs, filp_head) {
+ if (copyout(&fb->base.id, fb_id + copied,
+ sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ }
+ card_res->count_fbs = fb_count;
+
+ /* CRTCs */
+ if (card_res->count_crtcs >= crtc_count) {
+ copied = 0;
+ crtc_id = (uint32_t *)(uintptr_t)card_res->crtc_id_ptr;
+#if 1
+ if (1 || file_priv->master) {
+#else
+ if (file_priv->masterp->minor->type == DRM_MINOR_CONTROL) {
+#endif
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list,
+ head) {
+ DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id);
+ if (copyout(&crtc->base.id, crtc_id +
+ copied, sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ } else {
+ for (i = 0; i < mode_group->num_crtcs; i++) {
+ if (copyout(&mode_group->id_list[i],
+ crtc_id + copied, sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ }
+ }
+ card_res->count_crtcs = crtc_count;
+
+ /* Encoders */
+ if (card_res->count_encoders >= encoder_count) {
+ copied = 0;
+ encoder_id = (uint32_t *)(uintptr_t)card_res->encoder_id_ptr;
+#if 1
+ if (file_priv->master) {
+#else
+ if (file_priv->masterp->minor->type == DRM_MINOR_CONTROL) {
+#endif
+ list_for_each_entry(encoder,
+ &dev->mode_config.encoder_list,
+ head) {
+ DRM_DEBUG_KMS("[ENCODER:%d:%s]\n", encoder->base.id,
+ drm_get_encoder_name(encoder));
+ if (copyout(&encoder->base.id, encoder_id +
+ copied, sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ } else {
+ for (i = mode_group->num_crtcs;
+ i < mode_group->num_crtcs + mode_group->num_encoders;
+ i++) {
+ if (copyout(&mode_group->id_list[i],
+ encoder_id + copied, sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+
+ }
+ }
+ card_res->count_encoders = encoder_count;
+
+ /* Connectors */
+ if (card_res->count_connectors >= connector_count) {
+ copied = 0;
+ connector_id = (uint32_t *)(uintptr_t)card_res->connector_id_ptr;
+#if 1
+ if (file_priv->master) {
+#else
+ if (file_priv->masterp->minor->type == DRM_MINOR_CONTROL) {
+#endif
+ list_for_each_entry(connector,
+ &dev->mode_config.connector_list,
+ head) {
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
+ connector->base.id,
+ drm_get_connector_name(connector));
+ if (copyout(&connector->base.id,
+ connector_id + copied, sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ } else {
+ int start = mode_group->num_crtcs +
+ mode_group->num_encoders;
+ for (i = start; i < start + mode_group->num_connectors; i++) {
+ if (copyout(&mode_group->id_list[i],
+ connector_id + copied, sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ }
+ }
+ card_res->count_connectors = connector_count;
+
+ DRM_DEBUG_KMS("CRTC[%d] CONNECTORS[%d] ENCODERS[%d]\n", card_res->count_crtcs,
+ card_res->count_connectors, card_res->count_encoders);
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+/**
+ * drm_mode_getcrtc - get CRTC configuration
+ * @inode: inode from the ioctl
+ * @filp: file * from the ioctl
+ * @cmd: cmd from ioctl
+ * @arg: arg from ioctl
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Construct a CRTC configuration structure to return to the user.
+ *
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+int drm_mode_getcrtc(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_crtc *crtc_resp = data;
+ struct drm_crtc *crtc;
+ struct drm_mode_object *obj;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ obj = drm_mode_object_find(dev, crtc_resp->crtc_id,
+ DRM_MODE_OBJECT_CRTC);
+ if (!obj) {
+ ret = (EINVAL);
+ goto out;
+ }
+ crtc = obj_to_crtc(obj);
+
+ crtc_resp->x = crtc->x;
+ crtc_resp->y = crtc->y;
+ crtc_resp->gamma_size = crtc->gamma_size;
+ if (crtc->fb)
+ crtc_resp->fb_id = crtc->fb->base.id;
+ else
+ crtc_resp->fb_id = 0;
+
+ if (crtc->enabled) {
+
+ drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
+ crtc_resp->mode_valid = 1;
+
+ } else {
+ crtc_resp->mode_valid = 0;
+ }
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+/**
+ * drm_mode_getconnector - get connector configuration
+ * @inode: inode from the ioctl
+ * @filp: file * from the ioctl
+ * @cmd: cmd from ioctl
+ * @arg: arg from ioctl
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Construct a connector configuration structure to return to the user.
+ *
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+int drm_mode_getconnector(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_mode_get_connector *out_resp = data;
+ struct drm_mode_object *obj;
+ struct drm_connector *connector;
+ struct drm_display_mode *mode;
+ int mode_count = 0;
+ int props_count = 0;
+ int encoders_count = 0;
+ int ret = 0;
+ int copied = 0;
+ int i;
+ struct drm_mode_modeinfo u_mode;
+ struct drm_mode_modeinfo __user *mode_ptr;
+ uint32_t *prop_ptr;
+ uint64_t *prop_values;
+ uint32_t *encoder_ptr;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo));
+
+ DRM_DEBUG_KMS("[CONNECTOR:%d:?]\n", out_resp->connector_id);
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ obj = drm_mode_object_find(dev, out_resp->connector_id,
+ DRM_MODE_OBJECT_CONNECTOR);
+ if (!obj) {
+ ret = EINVAL;
+ goto out;
+ }
+ connector = obj_to_connector(obj);
+
+ for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
+ if (connector->property_ids[i] != 0) {
+ props_count++;
+ }
+ }
+
+ for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
+ if (connector->encoder_ids[i] != 0) {
+ encoders_count++;
+ }
+ }
+
+ if (out_resp->count_modes == 0) {
+ connector->funcs->fill_modes(connector,
+ dev->mode_config.max_width,
+ dev->mode_config.max_height);
+ }
+
+ /* delayed so we get modes regardless of pre-fill_modes state */
+ list_for_each_entry(mode, &connector->modes, head)
+ mode_count++;
+
+ out_resp->connector_id = connector->base.id;
+ out_resp->connector_type = connector->connector_type;
+ out_resp->connector_type_id = connector->connector_type_id;
+ out_resp->mm_width = connector->display_info.width_mm;
+ out_resp->mm_height = connector->display_info.height_mm;
+ out_resp->subpixel = connector->display_info.subpixel_order;
+ out_resp->connection = connector->status;
+ if (connector->encoder)
+ out_resp->encoder_id = connector->encoder->base.id;
+ else
+ out_resp->encoder_id = 0;
+
+ /*
+ * This ioctl is called twice, once to determine how much space is
+ * needed, and the 2nd time to fill it.
+ */
+ if ((out_resp->count_modes >= mode_count) && mode_count) {
+ copied = 0;
+ mode_ptr = (struct drm_mode_modeinfo *)(uintptr_t)out_resp->modes_ptr;
+ list_for_each_entry(mode, &connector->modes, head) {
+ drm_crtc_convert_to_umode(&u_mode, mode);
+ if (copyout(&u_mode, mode_ptr + copied,
+ sizeof(u_mode))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ }
+ out_resp->count_modes = mode_count;
+
+ if ((out_resp->count_props >= props_count) && props_count) {
+ copied = 0;
+ prop_ptr = (uint32_t *)(uintptr_t)(out_resp->props_ptr);
+ prop_values = (uint64_t *)(uintptr_t)(out_resp->prop_values_ptr);
+ for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
+ if (connector->property_ids[i] != 0) {
+ if (copyout(&connector->property_ids[i],
+ prop_ptr + copied, sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+
+ if (copyout(&connector->property_values[i],
+ prop_values + copied, sizeof(uint64_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ }
+ }
+ out_resp->count_props = props_count;
+
+ if ((out_resp->count_encoders >= encoders_count) && encoders_count) {
+ copied = 0;
+ encoder_ptr = (uint32_t *)(uintptr_t)(out_resp->encoders_ptr);
+ for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
+ if (connector->encoder_ids[i] != 0) {
+ if (copyout(&connector->encoder_ids[i],
+ encoder_ptr + copied, sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ }
+ }
+ out_resp->count_encoders = encoders_count;
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+int drm_mode_getencoder(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_mode_get_encoder *enc_resp = data;
+ struct drm_mode_object *obj;
+ struct drm_encoder *encoder;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, enc_resp->encoder_id,
+ DRM_MODE_OBJECT_ENCODER);
+ if (!obj) {
+ ret = EINVAL;
+ goto out;
+ }
+ encoder = obj_to_encoder(obj);
+
+ if (encoder->crtc)
+ enc_resp->crtc_id = encoder->crtc->base.id;
+ else
+ enc_resp->crtc_id = 0;
+ enc_resp->encoder_type = encoder->encoder_type;
+ enc_resp->encoder_id = encoder->base.id;
+ enc_resp->possible_crtcs = encoder->possible_crtcs;
+ enc_resp->possible_clones = encoder->possible_clones;
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+/**
+ * drm_mode_getplane_res - get plane info
+ * @dev: DRM device
+ * @data: ioctl data
+ * @file_priv: DRM file info
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Return an plane count and set of IDs.
+ */
+int drm_mode_getplane_res(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_mode_get_plane_res *plane_resp = data;
+ struct drm_mode_config *config;
+ struct drm_plane *plane;
+ uint32_t *plane_ptr;
+ int copied = 0, ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+ config = &dev->mode_config;
+
+ /*
+ * This ioctl is called twice, once to determine how much space is
+ * needed, and the 2nd time to fill it.
+ */
+ if (config->num_plane &&
+ (plane_resp->count_planes >= config->num_plane)) {
+ plane_ptr = (uint32_t *)(unsigned long)plane_resp->plane_id_ptr;
+
+ list_for_each_entry(plane, &config->plane_list, head) {
+ if (copyout(&plane->base.id, plane_ptr + copied,
+ sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+ copied++;
+ }
+ }
+ plane_resp->count_planes = config->num_plane;
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+/**
+ * drm_mode_getplane - get plane info
+ * @dev: DRM device
+ * @data: ioctl data
+ * @file_priv: DRM file info
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Return plane info, including formats supported, gamma size, any
+ * current fb, etc.
+ */
+int drm_mode_getplane(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_mode_get_plane *plane_resp = data;
+ struct drm_mode_object *obj;
+ struct drm_plane *plane;
+ uint32_t *format_ptr;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, plane_resp->plane_id,
+ DRM_MODE_OBJECT_PLANE);
+ if (!obj) {
+ ret = ENOENT;
+ goto out;
+ }
+ plane = obj_to_plane(obj);
+
+ if (plane->crtc)
+ plane_resp->crtc_id = plane->crtc->base.id;
+ else
+ plane_resp->crtc_id = 0;
+
+ if (plane->fb)
+ plane_resp->fb_id = plane->fb->base.id;
+ else
+ plane_resp->fb_id = 0;
+
+ plane_resp->plane_id = plane->base.id;
+ plane_resp->possible_crtcs = plane->possible_crtcs;
+ plane_resp->gamma_size = plane->gamma_size;
+
+ /*
+ * This ioctl is called twice, once to determine how much space is
+ * needed, and the 2nd time to fill it.
+ */
+ if (plane->format_count &&
+ (plane_resp->count_format_types >= plane->format_count)) {
+ format_ptr = (uint32_t *)(unsigned long)plane_resp->format_type_ptr;
+ if (copyout(format_ptr,
+ plane->format_types,
+ sizeof(uint32_t) * plane->format_count)) {
+ ret = EFAULT;
+ goto out;
+ }
+ }
+ plane_resp->count_format_types = plane->format_count;
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+/**
+ * drm_mode_setplane - set up or tear down an plane
+ * @dev: DRM device
+ * @data: ioctl data*
+ * @file_prive: DRM file info
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Set plane info, including placement, fb, scaling, and other factors.
+ * Or pass a NULL fb to disable.
+ */
+int drm_mode_setplane(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_mode_set_plane *plane_req = data;
+ struct drm_mode_object *obj;
+ struct drm_plane *plane;
+ struct drm_crtc *crtc;
+ struct drm_framebuffer *fb;
+ int ret = 0;
+ unsigned int fb_width, fb_height;
+ int i;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ /*
+ * First, find the plane, crtc, and fb objects. If not available,
+ * we don't bother to call the driver.
+ */
+ obj = drm_mode_object_find(dev, plane_req->plane_id,
+ DRM_MODE_OBJECT_PLANE);
+ if (!obj) {
+ DRM_DEBUG_KMS("Unknown plane ID %d\n",
+ plane_req->plane_id);
+ ret = ENOENT;
+ goto out;
+ }
+ plane = obj_to_plane(obj);
+
+ /* No fb means shut it down */
+ if (!plane_req->fb_id) {
+ plane->funcs->disable_plane(plane);
+ plane->crtc = NULL;
+ plane->fb = NULL;
+ goto out;
+ }
+
+ obj = drm_mode_object_find(dev, plane_req->crtc_id,
+ DRM_MODE_OBJECT_CRTC);
+ if (!obj) {
+ DRM_DEBUG_KMS("Unknown crtc ID %d\n",
+ plane_req->crtc_id);
+ ret = ENOENT;
+ goto out;
+ }
+ crtc = obj_to_crtc(obj);
+
+ obj = drm_mode_object_find(dev, plane_req->fb_id,
+ DRM_MODE_OBJECT_FB);
+ if (!obj) {
+ DRM_DEBUG_KMS("Unknown framebuffer ID %d\n",
+ plane_req->fb_id);
+ ret = ENOENT;
+ goto out;
+ }
+ fb = obj_to_fb(obj);
+
+ /* Check whether this plane supports the fb pixel format. */
+ for (i = 0; i < plane->format_count; i++)
+ if (fb->pixel_format == plane->format_types[i])
+ break;
+ if (i == plane->format_count) {
+ DRM_DEBUG_KMS("Invalid pixel format 0x%08x\n", fb->pixel_format);
+ ret = EINVAL;
+ goto out;
+ }
+
+ fb_width = fb->width << 16;
+ fb_height = fb->height << 16;
+
+ /* Make sure source coordinates are inside the fb. */
+ if (plane_req->src_w > fb_width ||
+ plane_req->src_x > fb_width - plane_req->src_w ||
+ plane_req->src_h > fb_height ||
+ plane_req->src_y > fb_height - plane_req->src_h) {
+ DRM_DEBUG_KMS("Invalid source coordinates "
+ "%u.%06ux%u.%06u+%u.%06u+%u.%06u\n",
+ plane_req->src_w >> 16,
+ ((plane_req->src_w & 0xffff) * 15625) >> 10,
+ plane_req->src_h >> 16,
+ ((plane_req->src_h & 0xffff) * 15625) >> 10,
+ plane_req->src_x >> 16,
+ ((plane_req->src_x & 0xffff) * 15625) >> 10,
+ plane_req->src_y >> 16,
+ ((plane_req->src_y & 0xffff) * 15625) >> 10);
+ ret = ENOSPC;
+ goto out;
+ }
+
+ /* Give drivers some help against integer overflows */
+ if (plane_req->crtc_w > INT_MAX ||
+ plane_req->crtc_x > INT_MAX - (int32_t) plane_req->crtc_w ||
+ plane_req->crtc_h > INT_MAX ||
+ plane_req->crtc_y > INT_MAX - (int32_t) plane_req->crtc_h) {
+ DRM_DEBUG_KMS("Invalid CRTC coordinates %ux%u+%d+%d\n",
+ plane_req->crtc_w, plane_req->crtc_h,
+ plane_req->crtc_x, plane_req->crtc_y);
+ ret = ERANGE;
+ goto out;
+ }
+
+ ret = -plane->funcs->update_plane(plane, crtc, fb,
+ plane_req->crtc_x, plane_req->crtc_y,
+ plane_req->crtc_w, plane_req->crtc_h,
+ plane_req->src_x, plane_req->src_y,
+ plane_req->src_w, plane_req->src_h);
+ if (!ret) {
+ plane->crtc = crtc;
+ plane->fb = fb;
+ }
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+
+ return ret;
+}
+
+/**
+ * drm_mode_setcrtc - set CRTC configuration
+ * @inode: inode from the ioctl
+ * @filp: file * from the ioctl
+ * @cmd: cmd from ioctl
+ * @arg: arg from ioctl
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Build a new CRTC configuration based on user request.
+ *
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+int drm_mode_setcrtc(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_mode_config *config = &dev->mode_config;
+ struct drm_mode_crtc *crtc_req = data;
+ struct drm_mode_object *obj;
+ struct drm_crtc *crtc;
+ struct drm_connector **connector_set = NULL, *connector;
+ struct drm_framebuffer *fb = NULL;
+ struct drm_display_mode *mode = NULL;
+ struct drm_mode_set set;
+ uint32_t *set_connectors_ptr;
+ int ret = 0;
+ int i;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ /* For some reason crtc x/y offsets are signed internally. */
+ if (crtc_req->x > INT_MAX || crtc_req->y > INT_MAX)
+ return (ERANGE);
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, crtc_req->crtc_id,
+ DRM_MODE_OBJECT_CRTC);
+ if (!obj) {
+ DRM_DEBUG_KMS("Unknown CRTC ID %d\n", crtc_req->crtc_id);
+ ret = EINVAL;
+ goto out;
+ }
+ crtc = obj_to_crtc(obj);
+ DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id);
+
+ if (crtc_req->mode_valid) {
+ /* If we have a mode we need a framebuffer. */
+ /* If we pass -1, set the mode with the currently bound fb */
+ if (crtc_req->fb_id == -1) {
+ if (!crtc->fb) {
+ DRM_DEBUG_KMS("CRTC doesn't have current FB\n");
+ ret = -EINVAL;
+ goto out;
+ }
+ fb = crtc->fb;
+ } else {
+ obj = drm_mode_object_find(dev, crtc_req->fb_id,
+ DRM_MODE_OBJECT_FB);
+ if (!obj) {
+ DRM_DEBUG_KMS("Unknown FB ID%d\n",
+ crtc_req->fb_id);
+ ret = EINVAL;
+ goto out;
+ }
+ fb = obj_to_fb(obj);
+ }
+
+ mode = drm_mode_create(dev);
+ if (!mode) {
+ ret = ENOMEM;
+ goto out;
+ }
+
+ ret = drm_crtc_convert_umode(mode, &crtc_req->mode);
+ if (ret) {
+ DRM_DEBUG_KMS("Invalid mode\n");
+ goto out;
+ }
+
+ drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
+
+ if (mode->hdisplay > fb->width ||
+ mode->vdisplay > fb->height ||
+ crtc_req->x > fb->width - mode->hdisplay ||
+ crtc_req->y > fb->height - mode->vdisplay) {
+ DRM_DEBUG_KMS("Invalid CRTC viewport %ux%u+%u+%u for fb size %ux%u.\n",
+ mode->hdisplay, mode->vdisplay,
+ crtc_req->x, crtc_req->y,
+ fb->width, fb->height);
+ ret = ENOSPC;
+ goto out;
+ }
+ }
+
+ if (crtc_req->count_connectors == 0 && mode) {
+ DRM_DEBUG_KMS("Count connectors is 0 but mode set\n");
+ ret = EINVAL;
+ goto out;
+ }
+
+ if (crtc_req->count_connectors > 0 && (!mode || !fb)) {
+ DRM_DEBUG_KMS("Count connectors is %d but no mode or fb set\n",
+ crtc_req->count_connectors);
+ ret = EINVAL;
+ goto out;
+ }
+
+ if (crtc_req->count_connectors > 0) {
+ u32 out_id;
+
+ /* Avoid unbounded kernel memory allocation */
+ if (crtc_req->count_connectors > config->num_connector) {
+ ret = EINVAL;
+ goto out;
+ }
+
+ connector_set = malloc(crtc_req->count_connectors *
+ sizeof(struct drm_connector *), DRM_MEM_KMS, M_WAITOK);
+
+ for (i = 0; i < crtc_req->count_connectors; i++) {
+ set_connectors_ptr = (uint32_t *)(uintptr_t)crtc_req->set_connectors_ptr;
+ if (copyin(&set_connectors_ptr[i], &out_id, sizeof(uint32_t))) {
+ ret = EFAULT;
+ goto out;
+ }
+
+ obj = drm_mode_object_find(dev, out_id,
+ DRM_MODE_OBJECT_CONNECTOR);
+ if (!obj) {
+ DRM_DEBUG_KMS("Connector id %d unknown\n",
+ out_id);
+ ret = EINVAL;
+ goto out;
+ }
+ connector = obj_to_connector(obj);
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
+ connector->base.id,
+ drm_get_connector_name(connector));
+
+ connector_set[i] = connector;
+ }
+ }
+
+ set.crtc = crtc;
+ set.x = crtc_req->x;
+ set.y = crtc_req->y;
+ set.mode = mode;
+ set.connectors = connector_set;
+ set.num_connectors = crtc_req->count_connectors;
+ set.fb = fb;
+ ret = crtc->funcs->set_config(&set);
+
+out:
+ free(connector_set, DRM_MEM_KMS);
+ drm_mode_destroy(dev, mode);
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+int drm_mode_cursor_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_cursor *req = data;
+ struct drm_mode_object *obj;
+ struct drm_crtc *crtc;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ if (!req->flags)
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, req->crtc_id, DRM_MODE_OBJECT_CRTC);
+ if (!obj) {
+ DRM_DEBUG_KMS("Unknown CRTC ID %d\n", req->crtc_id);
+ ret = EINVAL;
+ goto out;
+ }
+ crtc = obj_to_crtc(obj);
+
+ if (req->flags & DRM_MODE_CURSOR_BO) {
+ if (!crtc->funcs->cursor_set) {
+ ret = ENXIO;
+ goto out;
+ }
+ /* Turns off the cursor if handle is 0 */
+ ret = -crtc->funcs->cursor_set(crtc, file_priv, req->handle,
+ req->width, req->height);
+ }
+
+ if (req->flags & DRM_MODE_CURSOR_MOVE) {
+ if (crtc->funcs->cursor_move) {
+ ret = crtc->funcs->cursor_move(crtc, req->x, req->y);
+ } else {
+ ret = EFAULT;
+ goto out;
+ }
+ }
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+/* Original addfb only supported RGB formats, so figure out which one */
+uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth)
+{
+ uint32_t fmt;
+
+ switch (bpp) {
+ case 8:
+ fmt = DRM_FORMAT_RGB332;
+ break;
+ case 16:
+ if (depth == 15)
+ fmt = DRM_FORMAT_XRGB1555;
+ else
+ fmt = DRM_FORMAT_RGB565;
+ break;
+ case 24:
+ fmt = DRM_FORMAT_RGB888;
+ break;
+ case 32:
+ if (depth == 24)
+ fmt = DRM_FORMAT_XRGB8888;
+ else if (depth == 30)
+ fmt = DRM_FORMAT_XRGB2101010;
+ else
+ fmt = DRM_FORMAT_ARGB8888;
+ break;
+ default:
+ DRM_ERROR("bad bpp, assuming RGB24 pixel format\n");
+ fmt = DRM_FORMAT_XRGB8888;
+ break;
+ }
+
+ return fmt;
+}
+
+/**
+ * drm_mode_addfb - add an FB to the graphics configuration
+ * @inode: inode from the ioctl
+ * @filp: file * from the ioctl
+ * @cmd: cmd from ioctl
+ * @arg: arg from ioctl
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Add a new FB to the specified CRTC, given a user request.
+ *
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+int drm_mode_addfb(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_fb_cmd *or = data;
+ struct drm_mode_fb_cmd2 r = {};
+ struct drm_mode_config *config = &dev->mode_config;
+ struct drm_framebuffer *fb;
+ int ret = 0;
+
+ /* Use new struct with format internally */
+ r.fb_id = or->fb_id;
+ r.width = or->width;
+ r.height = or->height;
+ r.pitches[0] = or->pitch;
+ r.pixel_format = drm_mode_legacy_fb_format(or->bpp, or->depth);
+ r.handles[0] = or->handle;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ if ((config->min_width > r.width) || (r.width > config->max_width))
+ return (EINVAL);
+ if ((config->min_height > r.height) || (r.height > config->max_height))
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ ret = -dev->mode_config.funcs->fb_create(dev, file_priv, &r, &fb);
+ if (ret != 0) {
+ DRM_ERROR("could not create framebuffer, error %d\n", ret);
+ goto out;
+ }
+
+ or->fb_id = fb->base.id;
+ list_add(&fb->filp_head, &file_priv->fbs);
+ DRM_DEBUG_KMS("[FB:%d]\n", fb->base.id);
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+static int format_check(struct drm_mode_fb_cmd2 *r)
+{
+ uint32_t format = r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN;
+
+ switch (format) {
+ case DRM_FORMAT_C8:
+ case DRM_FORMAT_RGB332:
+ case DRM_FORMAT_BGR233:
+ case DRM_FORMAT_XRGB4444:
+ case DRM_FORMAT_XBGR4444:
+ case DRM_FORMAT_RGBX4444:
+ case DRM_FORMAT_BGRX4444:
+ case DRM_FORMAT_ARGB4444:
+ case DRM_FORMAT_ABGR4444:
+ case DRM_FORMAT_RGBA4444:
+ case DRM_FORMAT_BGRA4444:
+ case DRM_FORMAT_XRGB1555:
+ case DRM_FORMAT_XBGR1555:
+ case DRM_FORMAT_RGBX5551:
+ case DRM_FORMAT_BGRX5551:
+ case DRM_FORMAT_ARGB1555:
+ case DRM_FORMAT_ABGR1555:
+ case DRM_FORMAT_RGBA5551:
+ case DRM_FORMAT_BGRA5551:
+ case DRM_FORMAT_RGB565:
+ case DRM_FORMAT_BGR565:
+ case DRM_FORMAT_RGB888:
+ case DRM_FORMAT_BGR888:
+ case DRM_FORMAT_XRGB8888:
+ case DRM_FORMAT_XBGR8888:
+ case DRM_FORMAT_RGBX8888:
+ case DRM_FORMAT_BGRX8888:
+ case DRM_FORMAT_ARGB8888:
+ case DRM_FORMAT_ABGR8888:
+ case DRM_FORMAT_RGBA8888:
+ case DRM_FORMAT_BGRA8888:
+ case DRM_FORMAT_XRGB2101010:
+ case DRM_FORMAT_XBGR2101010:
+ case DRM_FORMAT_RGBX1010102:
+ case DRM_FORMAT_BGRX1010102:
+ case DRM_FORMAT_ARGB2101010:
+ case DRM_FORMAT_ABGR2101010:
+ case DRM_FORMAT_RGBA1010102:
+ case DRM_FORMAT_BGRA1010102:
+ case DRM_FORMAT_YUYV:
+ case DRM_FORMAT_YVYU:
+ case DRM_FORMAT_UYVY:
+ case DRM_FORMAT_VYUY:
+ case DRM_FORMAT_AYUV:
+ case DRM_FORMAT_NV12:
+ case DRM_FORMAT_NV21:
+ case DRM_FORMAT_NV16:
+ case DRM_FORMAT_NV61:
+ case DRM_FORMAT_YUV410:
+ case DRM_FORMAT_YVU410:
+ case DRM_FORMAT_YUV411:
+ case DRM_FORMAT_YVU411:
+ case DRM_FORMAT_YUV420:
+ case DRM_FORMAT_YVU420:
+ case DRM_FORMAT_YUV422:
+ case DRM_FORMAT_YVU422:
+ case DRM_FORMAT_YUV444:
+ case DRM_FORMAT_YVU444:
+ return 0;
+ default:
+ return (EINVAL);
+ }
+}
+
+/**
+ * drm_mode_addfb2 - add an FB to the graphics configuration
+ * @inode: inode from the ioctl
+ * @filp: file * from the ioctl
+ * @cmd: cmd from ioctl
+ * @arg: arg from ioctl
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Add a new FB to the specified CRTC, given a user request with format.
+ *
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+int drm_mode_addfb2(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_fb_cmd2 *r = data;
+ struct drm_mode_config *config = &dev->mode_config;
+ struct drm_framebuffer *fb;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ if ((config->min_width > r->width) || (r->width > config->max_width)) {
+ DRM_ERROR("bad framebuffer width %d, should be >= %d && <= %d\n",
+ r->width, config->min_width, config->max_width);
+ return (EINVAL);
+ }
+ if ((config->min_height > r->height) || (r->height > config->max_height)) {
+ DRM_ERROR("bad framebuffer height %d, should be >= %d && <= %d\n",
+ r->height, config->min_height, config->max_height);
+ return (EINVAL);
+ }
+
+ ret = format_check(r);
+ if (ret) {
+ DRM_ERROR("bad framebuffer format 0x%08x\n", r->pixel_format);
+ return ret;
+ }
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ /* TODO check buffer is sufficiently large */
+ /* TODO setup destructor callback */
+
+ ret = -dev->mode_config.funcs->fb_create(dev, file_priv, r, &fb);
+ if (ret != 0) {
+ DRM_ERROR("could not create framebuffer, error %d\n", ret);
+ goto out;
+ }
+
+ r->fb_id = fb->base.id;
+ list_add(&fb->filp_head, &file_priv->fbs);
+ DRM_DEBUG_KMS("[FB:%d]\n", fb->base.id);
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return (ret);
+}
+
+/**
+ * drm_mode_rmfb - remove an FB from the configuration
+ * @inode: inode from the ioctl
+ * @filp: file * from the ioctl
+ * @cmd: cmd from ioctl
+ * @arg: arg from ioctl
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Remove the FB specified by the user.
+ *
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+int drm_mode_rmfb(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_object *obj;
+ struct drm_framebuffer *fb = NULL;
+ struct drm_framebuffer *fbl = NULL;
+ uint32_t *id = data;
+ int ret = 0;
+ int found = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, *id, DRM_MODE_OBJECT_FB);
+ /* TODO check that we really get a framebuffer back. */
+ if (!obj) {
+ ret = EINVAL;
+ goto out;
+ }
+ fb = obj_to_fb(obj);
+
+ list_for_each_entry(fbl, &file_priv->fbs, filp_head)
+ if (fb == fbl)
+ found = 1;
+
+ if (!found) {
+ ret = EINVAL;
+ goto out;
+ }
+
+ /* TODO release all crtc connected to the framebuffer */
+ /* TODO unhock the destructor from the buffer object */
+
+ list_del(&fb->filp_head);
+ fb->funcs->destroy(fb);
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+/**
+ * drm_mode_getfb - get FB info
+ * @inode: inode from the ioctl
+ * @filp: file * from the ioctl
+ * @cmd: cmd from ioctl
+ * @arg: arg from ioctl
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Lookup the FB given its ID and return info about it.
+ *
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+int drm_mode_getfb(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_fb_cmd *r = data;
+ struct drm_mode_object *obj;
+ struct drm_framebuffer *fb;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, r->fb_id, DRM_MODE_OBJECT_FB);
+ if (!obj) {
+ ret = EINVAL;
+ goto out;
+ }
+ fb = obj_to_fb(obj);
+
+ r->height = fb->height;
+ r->width = fb->width;
+ r->depth = fb->depth;
+ r->bpp = fb->bits_per_pixel;
+ r->pitch = fb->pitches[0];
+ fb->funcs->create_handle(fb, file_priv, &r->handle);
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_clip_rect __user *clips_ptr;
+ struct drm_clip_rect *clips = NULL;
+ struct drm_mode_fb_dirty_cmd *r = data;
+ struct drm_mode_object *obj;
+ struct drm_framebuffer *fb;
+ unsigned flags;
+ int num_clips;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, r->fb_id, DRM_MODE_OBJECT_FB);
+ if (!obj) {
+ ret = EINVAL;
+ goto out_err1;
+ }
+ fb = obj_to_fb(obj);
+
+ num_clips = r->num_clips;
+ clips_ptr = (struct drm_clip_rect *)(unsigned long)r->clips_ptr;
+
+ if (!num_clips != !clips_ptr) {
+ ret = EINVAL;
+ goto out_err1;
+ }
+
+ flags = DRM_MODE_FB_DIRTY_FLAGS & r->flags;
+
+ /* If userspace annotates copy, clips must come in pairs */
+ if (flags & DRM_MODE_FB_DIRTY_ANNOTATE_COPY && (num_clips % 2)) {
+ ret = EINVAL;
+ goto out_err1;
+ }
+
+ if (num_clips && clips_ptr) {
+ if (num_clips < 0 || num_clips > DRM_MODE_FB_DIRTY_MAX_CLIPS) {
+ ret = EINVAL;
+ goto out_err1;
+ }
+ clips = malloc(num_clips * sizeof(*clips), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ ret = copyin(clips_ptr, clips, num_clips * sizeof(*clips));
+ if (ret)
+ goto out_err2;
+ }
+
+ if (fb->funcs->dirty) {
+ ret = -fb->funcs->dirty(fb, file_priv, flags, r->color,
+ clips, num_clips);
+ } else {
+ ret = ENOSYS;
+ goto out_err2;
+ }
+
+out_err2:
+ free(clips, DRM_MEM_KMS);
+out_err1:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+
+/**
+ * drm_fb_release - remove and free the FBs on this file
+ * @filp: file * from the ioctl
+ *
+ * LOCKING:
+ * Takes mode config lock.
+ *
+ * Destroy all the FBs associated with @filp.
+ *
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+void drm_fb_release(struct drm_file *priv)
+{
+#if 1
+ struct drm_device *dev = priv->dev;
+#else
+ struct drm_device *dev = priv->minor->dev;
+#endif
+ struct drm_framebuffer *fb, *tfb;
+
+ sx_xlock(&dev->mode_config.mutex);
+ list_for_each_entry_safe(fb, tfb, &priv->fbs, filp_head) {
+ list_del(&fb->filp_head);
+ fb->funcs->destroy(fb);
+ }
+ sx_xunlock(&dev->mode_config.mutex);
+}
+
+/**
+ * drm_mode_attachmode - add a mode to the user mode list
+ * @dev: DRM device
+ * @connector: connector to add the mode to
+ * @mode: mode to add
+ *
+ * Add @mode to @connector's user mode list.
+ */
+static void drm_mode_attachmode(struct drm_device *dev,
+ struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ list_add_tail(&mode->head, &connector->user_modes);
+}
+
+int drm_mode_attachmode_crtc(struct drm_device *dev, struct drm_crtc *crtc,
+ const struct drm_display_mode *mode)
+{
+ struct drm_connector *connector;
+ int ret = 0;
+ struct drm_display_mode *dup_mode, *next;
+ DRM_LIST_HEAD(list);
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ if (!connector->encoder)
+ continue;
+ if (connector->encoder->crtc == crtc) {
+ dup_mode = drm_mode_duplicate(dev, mode);
+ if (!dup_mode) {
+ ret = ENOMEM;
+ goto out;
+ }
+ list_add_tail(&dup_mode->head, &list);
+ }
+ }
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ if (!connector->encoder)
+ continue;
+ if (connector->encoder->crtc == crtc)
+ list_move_tail(list.next, &connector->user_modes);
+ }
+
+ MPASS(!list_empty(&list));
+
+ out:
+ list_for_each_entry_safe(dup_mode, next, &list, head)
+ drm_mode_destroy(dev, dup_mode);
+
+ return ret;
+}
+
+static int drm_mode_detachmode(struct drm_device *dev,
+ struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ int found = 0;
+ int ret = 0;
+ struct drm_display_mode *match_mode, *t;
+
+ list_for_each_entry_safe(match_mode, t, &connector->user_modes, head) {
+ if (drm_mode_equal(match_mode, mode)) {
+ list_del(&match_mode->head);
+ drm_mode_destroy(dev, match_mode);
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found)
+ ret = -EINVAL;
+
+ return ret;
+}
+
+int drm_mode_detachmode_crtc(struct drm_device *dev, struct drm_display_mode *mode)
+{
+ struct drm_connector *connector;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ drm_mode_detachmode(dev, connector, mode);
+ }
+ return 0;
+}
+
+/**
+ * drm_fb_attachmode - Attach a user mode to an connector
+ * @inode: inode from the ioctl
+ * @filp: file * from the ioctl
+ * @cmd: cmd from ioctl
+ * @arg: arg from ioctl
+ *
+ * This attaches a user specified mode to an connector.
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+int drm_mode_attachmode_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_mode_cmd *mode_cmd = data;
+ struct drm_connector *connector;
+ struct drm_display_mode *mode;
+ struct drm_mode_object *obj;
+ struct drm_mode_modeinfo *umode = &mode_cmd->mode;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return -EINVAL;
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ obj = drm_mode_object_find(dev, mode_cmd->connector_id, DRM_MODE_OBJECT_CONNECTOR);
+ if (!obj) {
+ ret = -EINVAL;
+ goto out;
+ }
+ connector = obj_to_connector(obj);
+
+ mode = drm_mode_create(dev);
+ if (!mode) {
+ ret = -ENOMEM;
+ goto out;
+ }
+
+ ret = drm_crtc_convert_umode(mode, umode);
+ if (ret) {
+ DRM_DEBUG_KMS("Invalid mode\n");
+ drm_mode_destroy(dev, mode);
+ goto out;
+ }
+
+ drm_mode_attachmode(dev, connector, mode);
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+
+/**
+ * drm_fb_detachmode - Detach a user specified mode from an connector
+ * @inode: inode from the ioctl
+ * @filp: file * from the ioctl
+ * @cmd: cmd from ioctl
+ * @arg: arg from ioctl
+ *
+ * Called by the user via ioctl.
+ *
+ * RETURNS:
+ * Zero on success, errno on failure.
+ */
+int drm_mode_detachmode_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_object *obj;
+ struct drm_mode_mode_cmd *mode_cmd = data;
+ struct drm_connector *connector;
+ struct drm_display_mode mode;
+ struct drm_mode_modeinfo *umode = &mode_cmd->mode;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return -EINVAL;
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ obj = drm_mode_object_find(dev, mode_cmd->connector_id, DRM_MODE_OBJECT_CONNECTOR);
+ if (!obj) {
+ ret = -EINVAL;
+ goto out;
+ }
+ connector = obj_to_connector(obj);
+
+ ret = drm_crtc_convert_umode(&mode, umode);
+ if (ret) {
+ DRM_DEBUG_KMS("Invalid mode\n");
+ goto out;
+ }
+
+ ret = drm_mode_detachmode(dev, connector, &mode);
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+struct drm_property *drm_property_create(struct drm_device *dev, int flags,
+ const char *name, int num_values)
+{
+ struct drm_property *property = NULL;
+ int ret;
+
+ property = malloc(sizeof(struct drm_property), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ if (num_values) {
+ property->values = malloc(sizeof(uint64_t)*num_values, DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+ }
+
+ ret = drm_mode_object_get(dev, &property->base, DRM_MODE_OBJECT_PROPERTY);
+ if (ret)
+ goto fail;
+ property->flags = flags;
+ property->num_values = num_values;
+ INIT_LIST_HEAD(&property->enum_blob_list);
+
+ if (name) {
+ strncpy(property->name, name, DRM_PROP_NAME_LEN);
+ property->name[DRM_PROP_NAME_LEN-1] = '\0';
+ }
+
+ list_add_tail(&property->head, &dev->mode_config.property_list);
+ return property;
+
+fail:
+ free(property->values, DRM_MEM_KMS);
+ free(property, DRM_MEM_KMS);
+ return (NULL);
+}
+
+struct drm_property *drm_property_create_enum(struct drm_device *dev, int flags,
+ const char *name,
+ const struct drm_prop_enum_list *props,
+ int num_values)
+{
+ struct drm_property *property;
+ int i, ret;
+
+ flags |= DRM_MODE_PROP_ENUM;
+
+ property = drm_property_create(dev, flags, name, num_values);
+ if (!property)
+ return NULL;
+
+ for (i = 0; i < num_values; i++) {
+ ret = drm_property_add_enum(property, i,
+ props[i].type,
+ props[i].name);
+ if (ret) {
+ drm_property_destroy(dev, property);
+ return NULL;
+ }
+ }
+
+ return property;
+}
+
+struct drm_property *drm_property_create_range(struct drm_device *dev, int flags,
+ const char *name,
+ uint64_t min, uint64_t max)
+{
+ struct drm_property *property;
+
+ flags |= DRM_MODE_PROP_RANGE;
+
+ property = drm_property_create(dev, flags, name, 2);
+ if (!property)
+ return NULL;
+
+ property->values[0] = min;
+ property->values[1] = max;
+
+ return property;
+}
+
+int drm_property_add_enum(struct drm_property *property, int index,
+ uint64_t value, const char *name)
+{
+ struct drm_property_enum *prop_enum;
+
+ if (!(property->flags & DRM_MODE_PROP_ENUM))
+ return -EINVAL;
+
+ if (!list_empty(&property->enum_blob_list)) {
+ list_for_each_entry(prop_enum, &property->enum_blob_list, head) {
+ if (prop_enum->value == value) {
+ strncpy(prop_enum->name, name, DRM_PROP_NAME_LEN);
+ prop_enum->name[DRM_PROP_NAME_LEN-1] = '\0';
+ return 0;
+ }
+ }
+ }
+
+ prop_enum = malloc(sizeof(struct drm_property_enum), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ strncpy(prop_enum->name, name, DRM_PROP_NAME_LEN);
+ prop_enum->name[DRM_PROP_NAME_LEN-1] = '\0';
+ prop_enum->value = value;
+
+ property->values[index] = value;
+ list_add_tail(&prop_enum->head, &property->enum_blob_list);
+ return 0;
+}
+
+void drm_property_destroy(struct drm_device *dev, struct drm_property *property)
+{
+ struct drm_property_enum *prop_enum, *pt;
+
+ list_for_each_entry_safe(prop_enum, pt, &property->enum_blob_list, head) {
+ list_del(&prop_enum->head);
+ free(prop_enum, DRM_MEM_KMS);
+ }
+
+ if (property->num_values)
+ free(property->values, DRM_MEM_KMS);
+ drm_mode_object_put(dev, &property->base);
+ list_del(&property->head);
+ free(property, DRM_MEM_KMS);
+}
+
+int drm_connector_attach_property(struct drm_connector *connector,
+ struct drm_property *property, uint64_t init_val)
+{
+ int i;
+
+ for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
+ if (connector->property_ids[i] == 0) {
+ connector->property_ids[i] = property->base.id;
+ connector->property_values[i] = init_val;
+ break;
+ }
+ }
+
+ if (i == DRM_CONNECTOR_MAX_PROPERTY)
+ return -EINVAL;
+ return 0;
+}
+
+int drm_connector_property_set_value(struct drm_connector *connector,
+ struct drm_property *property, uint64_t value)
+{
+ int i;
+
+ for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
+ if (connector->property_ids[i] == property->base.id) {
+ connector->property_values[i] = value;
+ break;
+ }
+ }
+
+ if (i == DRM_CONNECTOR_MAX_PROPERTY)
+ return -EINVAL;
+ return 0;
+}
+
+int drm_connector_property_get_value(struct drm_connector *connector,
+ struct drm_property *property, uint64_t *val)
+{
+ int i;
+
+ for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
+ if (connector->property_ids[i] == property->base.id) {
+ *val = connector->property_values[i];
+ break;
+ }
+ }
+
+ if (i == DRM_CONNECTOR_MAX_PROPERTY)
+ return -EINVAL;
+ return 0;
+}
+
+int drm_mode_getproperty_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_object *obj;
+ struct drm_mode_get_property *out_resp = data;
+ struct drm_property *property;
+ int enum_count = 0;
+ int blob_count = 0;
+ int value_count = 0;
+ int ret = 0, i;
+ int copied;
+ struct drm_property_enum *prop_enum;
+ struct drm_mode_property_enum __user *enum_ptr;
+ struct drm_property_blob *prop_blob;
+ uint32_t *blob_id_ptr;
+ uint64_t *values_ptr;
+ uint32_t *blob_length_ptr;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return -EINVAL;
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, out_resp->prop_id, DRM_MODE_OBJECT_PROPERTY);
+ if (!obj) {
+ ret = -EINVAL;
+ goto done;
+ }
+ property = obj_to_property(obj);
+
+ if (property->flags & DRM_MODE_PROP_ENUM) {
+ list_for_each_entry(prop_enum, &property->enum_blob_list, head)
+ enum_count++;
+ } else if (property->flags & DRM_MODE_PROP_BLOB) {
+ list_for_each_entry(prop_blob, &property->enum_blob_list, head)
+ blob_count++;
+ }
+
+ value_count = property->num_values;
+
+ strncpy(out_resp->name, property->name, DRM_PROP_NAME_LEN);
+ out_resp->name[DRM_PROP_NAME_LEN-1] = 0;
+ out_resp->flags = property->flags;
+
+ if ((out_resp->count_values >= value_count) && value_count) {
+ values_ptr = (uint64_t *)(uintptr_t)out_resp->values_ptr;
+ for (i = 0; i < value_count; i++) {
+ if (copyout(&property->values[i], values_ptr + i, sizeof(uint64_t))) {
+ ret = -EFAULT;
+ goto done;
+ }
+ }
+ }
+ out_resp->count_values = value_count;
+
+ if (property->flags & DRM_MODE_PROP_ENUM) {
+ if ((out_resp->count_enum_blobs >= enum_count) && enum_count) {
+ copied = 0;
+ enum_ptr = (struct drm_mode_property_enum *)(uintptr_t)out_resp->enum_blob_ptr;
+ list_for_each_entry(prop_enum, &property->enum_blob_list, head) {
+
+ if (copyout(&prop_enum->value, &enum_ptr[copied].value, sizeof(uint64_t))) {
+ ret = -EFAULT;
+ goto done;
+ }
+
+ if (copyout(&prop_enum->name,
+ &enum_ptr[copied].name,DRM_PROP_NAME_LEN)) {
+ ret = -EFAULT;
+ goto done;
+ }
+ copied++;
+ }
+ }
+ out_resp->count_enum_blobs = enum_count;
+ }
+
+ if (property->flags & DRM_MODE_PROP_BLOB) {
+ if ((out_resp->count_enum_blobs >= blob_count) && blob_count) {
+ copied = 0;
+ blob_id_ptr = (uint32_t *)(uintptr_t)out_resp->enum_blob_ptr;
+ blob_length_ptr = (uint32_t *)(uintptr_t)out_resp->values_ptr;
+
+ list_for_each_entry(prop_blob, &property->enum_blob_list, head) {
+ if (copyout(&prop_blob->base.id,
+ blob_id_ptr + copied, sizeof(uint32_t))) {
+ ret = -EFAULT;
+ goto done;
+ }
+
+ if (copyout(&prop_blob->length,
+ blob_length_ptr + copied, sizeof(uint32_t))) {
+ ret = -EFAULT;
+ goto done;
+ }
+
+ copied++;
+ }
+ }
+ out_resp->count_enum_blobs = blob_count;
+ }
+done:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+static struct drm_property_blob *drm_property_create_blob(struct drm_device *dev, int length,
+ void *data)
+{
+ struct drm_property_blob *blob;
+ int ret;
+
+ if (!length || !data)
+ return NULL;
+
+ blob = malloc(sizeof(struct drm_property_blob) + length, DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ ret = drm_mode_object_get(dev, &blob->base, DRM_MODE_OBJECT_BLOB);
+ if (ret) {
+ free(blob, DRM_MEM_KMS);
+ return (NULL);
+ }
+
+ blob->length = length;
+
+ memcpy(blob->data, data, length);
+
+ list_add_tail(&blob->head, &dev->mode_config.property_blob_list);
+ return blob;
+}
+
+static void drm_property_destroy_blob(struct drm_device *dev,
+ struct drm_property_blob *blob)
+{
+ drm_mode_object_put(dev, &blob->base);
+ list_del(&blob->head);
+ free(blob, DRM_MEM_KMS);
+}
+
+int drm_mode_getblob_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_object *obj;
+ struct drm_mode_get_blob *out_resp = data;
+ struct drm_property_blob *blob;
+ int ret = 0;
+ void *blob_ptr;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return -EINVAL;
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, out_resp->blob_id, DRM_MODE_OBJECT_BLOB);
+ if (!obj) {
+ ret = -EINVAL;
+ goto done;
+ }
+ blob = obj_to_blob(obj);
+
+ if (out_resp->length == blob->length) {
+ blob_ptr = (void *)(unsigned long)out_resp->data;
+ if (copyout(blob->data, blob_ptr, blob->length)){
+ ret = -EFAULT;
+ goto done;
+ }
+ }
+ out_resp->length = blob->length;
+
+done:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+int drm_mode_connector_update_edid_property(struct drm_connector *connector,
+ struct edid *edid)
+{
+ struct drm_device *dev = connector->dev;
+ int ret = 0, size;
+
+ if (connector->edid_blob_ptr)
+ drm_property_destroy_blob(dev, connector->edid_blob_ptr);
+
+ /* Delete edid, when there is none. */
+ if (!edid) {
+ connector->edid_blob_ptr = NULL;
+ ret = drm_connector_property_set_value(connector, dev->mode_config.edid_property, 0);
+ return ret;
+ }
+
+ size = EDID_LENGTH * (1 + edid->extensions);
+ connector->edid_blob_ptr = drm_property_create_blob(connector->dev,
+ size, edid);
+
+ ret = drm_connector_property_set_value(connector,
+ dev->mode_config.edid_property,
+ connector->edid_blob_ptr->base.id);
+
+ return ret;
+}
+
+int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_connector_set_property *out_resp = data;
+ struct drm_mode_object *obj;
+ struct drm_property *property;
+ struct drm_connector *connector;
+ int ret = -EINVAL;
+ int i;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return -EINVAL;
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ obj = drm_mode_object_find(dev, out_resp->connector_id, DRM_MODE_OBJECT_CONNECTOR);
+ if (!obj) {
+ goto out;
+ }
+ connector = obj_to_connector(obj);
+
+ for (i = 0; i < DRM_CONNECTOR_MAX_PROPERTY; i++) {
+ if (connector->property_ids[i] == out_resp->prop_id)
+ break;
+ }
+
+ if (i == DRM_CONNECTOR_MAX_PROPERTY) {
+ goto out;
+ }
+
+ obj = drm_mode_object_find(dev, out_resp->prop_id, DRM_MODE_OBJECT_PROPERTY);
+ if (!obj) {
+ goto out;
+ }
+ property = obj_to_property(obj);
+
+ if (property->flags & DRM_MODE_PROP_IMMUTABLE)
+ goto out;
+
+ if (property->flags & DRM_MODE_PROP_RANGE) {
+ if (out_resp->value < property->values[0])
+ goto out;
+
+ if (out_resp->value > property->values[1])
+ goto out;
+ } else {
+ int found = 0;
+ for (i = 0; i < property->num_values; i++) {
+ if (property->values[i] == out_resp->value) {
+ found = 1;
+ break;
+ }
+ }
+ if (!found) {
+ goto out;
+ }
+ }
+
+ /* Do DPMS ourselves */
+ if (property == connector->dev->mode_config.dpms_property) {
+ if (connector->funcs->dpms)
+ (*connector->funcs->dpms)(connector, (int) out_resp->value);
+ ret = 0;
+ } else if (connector->funcs->set_property)
+ ret = connector->funcs->set_property(connector, property, out_resp->value);
+
+ /* store the property value if successful */
+ if (!ret)
+ drm_connector_property_set_value(connector, property, out_resp->value);
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+int drm_mode_connector_attach_encoder(struct drm_connector *connector,
+ struct drm_encoder *encoder)
+{
+ int i;
+
+ for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
+ if (connector->encoder_ids[i] == 0) {
+ connector->encoder_ids[i] = encoder->base.id;
+ return 0;
+ }
+ }
+ return -ENOMEM;
+}
+
+void drm_mode_connector_detach_encoder(struct drm_connector *connector,
+ struct drm_encoder *encoder)
+{
+ int i;
+ for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
+ if (connector->encoder_ids[i] == encoder->base.id) {
+ connector->encoder_ids[i] = 0;
+ if (connector->encoder == encoder)
+ connector->encoder = NULL;
+ break;
+ }
+ }
+}
+
+int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
+ int gamma_size)
+{
+ crtc->gamma_size = gamma_size;
+
+ crtc->gamma_store = malloc(gamma_size * sizeof(uint16_t) * 3,
+ DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ return 0;
+}
+
+int drm_mode_gamma_set_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_crtc_lut *crtc_lut = data;
+ struct drm_mode_object *obj;
+ struct drm_crtc *crtc;
+ void *r_base, *g_base, *b_base;
+ int size;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return -EINVAL;
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, crtc_lut->crtc_id, DRM_MODE_OBJECT_CRTC);
+ if (!obj) {
+ ret = -EINVAL;
+ goto out;
+ }
+ crtc = obj_to_crtc(obj);
+
+ /* memcpy into gamma store */
+ if (crtc_lut->gamma_size != crtc->gamma_size) {
+ ret = -EINVAL;
+ goto out;
+ }
+
+ size = crtc_lut->gamma_size * (sizeof(uint16_t));
+ r_base = crtc->gamma_store;
+ if (copyin((void *)(uintptr_t)crtc_lut->red, r_base, size)) {
+ ret = -EFAULT;
+ goto out;
+ }
+
+ g_base = (char *)r_base + size;
+ if (copyin((void *)(uintptr_t)crtc_lut->green, g_base, size)) {
+ ret = -EFAULT;
+ goto out;
+ }
+
+ b_base = (char *)g_base + size;
+ if (copyin((void *)(uintptr_t)crtc_lut->blue, b_base, size)) {
+ ret = -EFAULT;
+ goto out;
+ }
+
+ crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+
+}
+
+int drm_mode_gamma_get_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_crtc_lut *crtc_lut = data;
+ struct drm_mode_object *obj;
+ struct drm_crtc *crtc;
+ void *r_base, *g_base, *b_base;
+ int size;
+ int ret = 0;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return -EINVAL;
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, crtc_lut->crtc_id, DRM_MODE_OBJECT_CRTC);
+ if (!obj) {
+ ret = -EINVAL;
+ goto out;
+ }
+ crtc = obj_to_crtc(obj);
+
+ /* memcpy into gamma store */
+ if (crtc_lut->gamma_size != crtc->gamma_size) {
+ ret = -EINVAL;
+ goto out;
+ }
+
+ size = crtc_lut->gamma_size * (sizeof(uint16_t));
+ r_base = crtc->gamma_store;
+ if (copyout(r_base, (void *)(uintptr_t)crtc_lut->red, size)) {
+ ret = -EFAULT;
+ goto out;
+ }
+
+ g_base = (char *)r_base + size;
+ if (copyout(g_base, (void *)(uintptr_t)crtc_lut->green, size)) {
+ ret = -EFAULT;
+ goto out;
+ }
+
+ b_base = (char *)g_base + size;
+ if (copyout(b_base, (void *)(uintptr_t)crtc_lut->blue, size)) {
+ ret = -EFAULT;
+ goto out;
+ }
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+static void
+drm_kms_free(void *arg)
+{
+
+ free(arg, DRM_MEM_KMS);
+}
+
+int drm_mode_page_flip_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_mode_crtc_page_flip *page_flip = data;
+ struct drm_mode_object *obj;
+ struct drm_crtc *crtc;
+ struct drm_framebuffer *fb;
+ struct drm_pending_vblank_event *e = NULL;
+ int ret = EINVAL;
+
+ if (page_flip->flags & ~DRM_MODE_PAGE_FLIP_FLAGS ||
+ page_flip->reserved != 0)
+ return (EINVAL);
+
+ sx_xlock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, page_flip->crtc_id, DRM_MODE_OBJECT_CRTC);
+ if (!obj)
+ goto out;
+ crtc = obj_to_crtc(obj);
+
+ if (crtc->fb == NULL) {
+ /* The framebuffer is currently unbound, presumably
+ * due to a hotplug event, that userspace has not
+ * yet discovered.
+ */
+ ret = EBUSY;
+ goto out;
+ }
+
+ if (crtc->funcs->page_flip == NULL)
+ goto out;
+
+ obj = drm_mode_object_find(dev, page_flip->fb_id, DRM_MODE_OBJECT_FB);
+ if (!obj)
+ goto out;
+ fb = obj_to_fb(obj);
+
+ if (crtc->mode.hdisplay > fb->width ||
+ crtc->mode.vdisplay > fb->height ||
+ crtc->x > fb->width - crtc->mode.hdisplay ||
+ crtc->y > fb->height - crtc->mode.vdisplay) {
+ DRM_DEBUG_KMS("Invalid fb size %ux%u for CRTC viewport %ux%u+%d+%d.\n",
+ fb->width, fb->height,
+ crtc->mode.hdisplay, crtc->mode.vdisplay,
+ crtc->x, crtc->y);
+ ret = ENOSPC;
+ goto out;
+ }
+
+ if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) {
+ ret = ENOMEM;
+ mtx_lock(&dev->event_lock);
+ if (file_priv->event_space < sizeof e->event) {
+ mtx_unlock(&dev->event_lock);
+ goto out;
+ }
+ file_priv->event_space -= sizeof e->event;
+ mtx_unlock(&dev->event_lock);
+
+ e = malloc(sizeof *e, DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ e->event.base.type = DRM_EVENT_FLIP_COMPLETE;
+ e->event.base.length = sizeof e->event;
+ e->event.user_data = page_flip->user_data;
+ e->base.event = &e->event.base;
+ e->base.file_priv = file_priv;
+ e->base.destroy =
+ (void (*) (struct drm_pending_event *))drm_kms_free;
+ }
+
+ ret = -crtc->funcs->page_flip(crtc, fb, e);
+ if (ret != 0) {
+ if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) {
+ mtx_lock(&dev->event_lock);
+ file_priv->event_space += sizeof e->event;
+ mtx_unlock(&dev->event_lock);
+ free(e, DRM_MEM_KMS);
+ }
+ }
+
+out:
+ sx_xunlock(&dev->mode_config.mutex);
+ CTR3(KTR_DRM, "page_flip_ioctl %d %d %d", curproc->p_pid,
+ page_flip->crtc_id, ret);
+ return (ret);
+}
+
+void drm_mode_config_reset(struct drm_device *dev)
+{
+ struct drm_crtc *crtc;
+ struct drm_encoder *encoder;
+ struct drm_connector *connector;
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
+ if (crtc->funcs->reset)
+ crtc->funcs->reset(crtc);
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head)
+ if (encoder->funcs->reset)
+ encoder->funcs->reset(encoder);
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head)
+ if (connector->funcs->reset)
+ connector->funcs->reset(connector);
+}
+
+int drm_mode_create_dumb_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_create_dumb *args = data;
+
+ if (!dev->driver->dumb_create)
+ return -ENOTSUP;
+ return dev->driver->dumb_create(file_priv, dev, args);
+}
+
+int drm_mode_mmap_dumb_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_map_dumb *args = data;
+
+ /* call driver ioctl to get mmap offset */
+ if (!dev->driver->dumb_map_offset)
+ return -ENOTSUP;
+
+ return dev->driver->dumb_map_offset(file_priv, dev, args->handle, &args->offset);
+}
+
+int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+{
+ struct drm_mode_destroy_dumb *args = data;
+
+ if (!dev->driver->dumb_destroy)
+ return -ENOTSUP;
+
+ return dev->driver->dumb_destroy(file_priv, dev, args->handle);
+}
+
+/*
+ * Just need to support RGB formats here for compat with code that doesn't
+ * use pixel formats directly yet.
+ */
+void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
+ int *bpp)
+{
+ switch (format) {
+ case DRM_FORMAT_RGB332:
+ case DRM_FORMAT_BGR233:
+ *depth = 8;
+ *bpp = 8;
+ break;
+ case DRM_FORMAT_XRGB1555:
+ case DRM_FORMAT_XBGR1555:
+ case DRM_FORMAT_RGBX5551:
+ case DRM_FORMAT_BGRX5551:
+ case DRM_FORMAT_ARGB1555:
+ case DRM_FORMAT_ABGR1555:
+ case DRM_FORMAT_RGBA5551:
+ case DRM_FORMAT_BGRA5551:
+ *depth = 15;
+ *bpp = 16;
+ break;
+ case DRM_FORMAT_RGB565:
+ case DRM_FORMAT_BGR565:
+ *depth = 16;
+ *bpp = 16;
+ break;
+ case DRM_FORMAT_RGB888:
+ case DRM_FORMAT_BGR888:
+ *depth = 24;
+ *bpp = 24;
+ break;
+ case DRM_FORMAT_XRGB8888:
+ case DRM_FORMAT_XBGR8888:
+ case DRM_FORMAT_RGBX8888:
+ case DRM_FORMAT_BGRX8888:
+ *depth = 24;
+ *bpp = 32;
+ break;
+ case DRM_FORMAT_XRGB2101010:
+ case DRM_FORMAT_XBGR2101010:
+ case DRM_FORMAT_RGBX1010102:
+ case DRM_FORMAT_BGRX1010102:
+ case DRM_FORMAT_ARGB2101010:
+ case DRM_FORMAT_ABGR2101010:
+ case DRM_FORMAT_RGBA1010102:
+ case DRM_FORMAT_BGRA1010102:
+ *depth = 30;
+ *bpp = 32;
+ break;
+ case DRM_FORMAT_ARGB8888:
+ case DRM_FORMAT_ABGR8888:
+ case DRM_FORMAT_RGBA8888:
+ case DRM_FORMAT_BGRA8888:
+ *depth = 32;
+ *bpp = 32;
+ break;
+ default:
+ DRM_DEBUG_KMS("unsupported pixel format\n");
+ *depth = 0;
+ *bpp = 0;
+ break;
+ }
+}
diff --git a/sys/dev/drm2/drm_crtc.h b/sys/dev/drm2/drm_crtc.h
new file mode 100644
index 000000000000..a69c5378f57b
--- /dev/null
+++ b/sys/dev/drm2/drm_crtc.h
@@ -0,0 +1,935 @@
+/*
+ * Copyright © 2006 Keith Packard
+ * Copyright © 2007-2008 Dave Airlie
+ * Copyright © 2007-2008 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ *
+ * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 __DRM_CRTC_H__
+#define __DRM_CRTC_H__
+
+#include <dev/drm2/drm_gem_names.h>
+#include <dev/drm2/drm_fourcc.h>
+
+struct drm_device;
+struct drm_mode_set;
+struct drm_framebuffer;
+struct i2c_adapter;
+
+#define DRM_MODE_OBJECT_CRTC 0xcccccccc
+#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
+#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0
+#define DRM_MODE_OBJECT_MODE 0xdededede
+#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0
+#define DRM_MODE_OBJECT_FB 0xfbfbfbfb
+#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
+#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
+
+struct drm_mode_object {
+ uint32_t id;
+ uint32_t type;
+};
+
+/*
+ * Note on terminology: here, for brevity and convenience, we refer to connector
+ * control chips as 'CRTCs'. They can control any type of connector, VGA, LVDS,
+ * DVI, etc. And 'screen' refers to the whole of the visible display, which
+ * may span multiple monitors (and therefore multiple CRTC and connector
+ * structures).
+ */
+
+enum drm_mode_status {
+ MODE_OK = 0, /* Mode OK */
+ MODE_HSYNC, /* hsync out of range */
+ MODE_VSYNC, /* vsync out of range */
+ MODE_H_ILLEGAL, /* mode has illegal horizontal timings */
+ MODE_V_ILLEGAL, /* mode has illegal horizontal timings */
+ MODE_BAD_WIDTH, /* requires an unsupported linepitch */
+ MODE_NOMODE, /* no mode with a maching name */
+ MODE_NO_INTERLACE, /* interlaced mode not supported */
+ MODE_NO_DBLESCAN, /* doublescan mode not supported */
+ MODE_NO_VSCAN, /* multiscan mode not supported */
+ MODE_MEM, /* insufficient video memory */
+ MODE_VIRTUAL_X, /* mode width too large for specified virtual size */
+ MODE_VIRTUAL_Y, /* mode height too large for specified virtual size */
+ MODE_MEM_VIRT, /* insufficient video memory given virtual size */
+ MODE_NOCLOCK, /* no fixed clock available */
+ MODE_CLOCK_HIGH, /* clock required is too high */
+ MODE_CLOCK_LOW, /* clock required is too low */
+ MODE_CLOCK_RANGE, /* clock/mode isn't in a ClockRange */
+ MODE_BAD_HVALUE, /* horizontal timing was out of range */
+ MODE_BAD_VVALUE, /* vertical timing was out of range */
+ MODE_BAD_VSCAN, /* VScan value out of range */
+ MODE_HSYNC_NARROW, /* horizontal sync too narrow */
+ MODE_HSYNC_WIDE, /* horizontal sync too wide */
+ MODE_HBLANK_NARROW, /* horizontal blanking too narrow */
+ MODE_HBLANK_WIDE, /* horizontal blanking too wide */
+ MODE_VSYNC_NARROW, /* vertical sync too narrow */
+ MODE_VSYNC_WIDE, /* vertical sync too wide */
+ MODE_VBLANK_NARROW, /* vertical blanking too narrow */
+ MODE_VBLANK_WIDE, /* vertical blanking too wide */
+ MODE_PANEL, /* exceeds panel dimensions */
+ MODE_INTERLACE_WIDTH, /* width too large for interlaced mode */
+ MODE_ONE_WIDTH, /* only one width is supported */
+ MODE_ONE_HEIGHT, /* only one height is supported */
+ MODE_ONE_SIZE, /* only one resolution is supported */
+ MODE_NO_REDUCED, /* monitor doesn't accept reduced blanking */
+ MODE_UNVERIFIED = -3, /* mode needs to reverified */
+ MODE_BAD = -2, /* unspecified reason */
+ MODE_ERROR = -1 /* error condition */
+};
+
+#define DRM_MODE_TYPE_CLOCK_CRTC_C (DRM_MODE_TYPE_CLOCK_C | \
+ DRM_MODE_TYPE_CRTC_C)
+
+#define DRM_MODE(nm, t, c, hd, hss, hse, ht, hsk, vd, vss, vse, vt, vs, f) \
+ .name = nm, .status = 0, .type = (t), .clock = (c), \
+ .hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), \
+ .htotal = (ht), .hskew = (hsk), .vdisplay = (vd), \
+ .vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), \
+ .vscan = (vs), .flags = (f), .vrefresh = 0
+
+#define CRTC_INTERLACE_HALVE_V 0x1 /* halve V values for interlacing */
+
+struct drm_display_mode {
+ /* Header */
+ struct list_head head;
+ struct drm_mode_object base;
+
+ char name[DRM_DISPLAY_MODE_LEN];
+
+ int connector_count;
+ enum drm_mode_status status;
+ int type;
+
+ /* Proposed mode values */
+ int clock; /* in kHz */
+ int hdisplay;
+ int hsync_start;
+ int hsync_end;
+ int htotal;
+ int hskew;
+ int vdisplay;
+ int vsync_start;
+ int vsync_end;
+ int vtotal;
+ int vscan;
+ unsigned int flags;
+
+ /* Addressable image size (may be 0 for projectors, etc.) */
+ int width_mm;
+ int height_mm;
+
+ /* Actual mode we give to hw */
+ int clock_index;
+ int synth_clock;
+ int crtc_hdisplay;
+ int crtc_hblank_start;
+ int crtc_hblank_end;
+ int crtc_hsync_start;
+ int crtc_hsync_end;
+ int crtc_htotal;
+ int crtc_hskew;
+ int crtc_vdisplay;
+ int crtc_vblank_start;
+ int crtc_vblank_end;
+ int crtc_vsync_start;
+ int crtc_vsync_end;
+ int crtc_vtotal;
+ int crtc_hadjusted;
+ int crtc_vadjusted;
+
+ /* Driver private mode info */
+ int private_size;
+ int *private;
+ int private_flags;
+
+ int vrefresh; /* in Hz */
+ int hsync; /* in kHz */
+};
+
+enum drm_connector_status {
+ connector_status_connected = 1,
+ connector_status_disconnected = 2,
+ connector_status_unknown = 3,
+};
+
+enum subpixel_order {
+ SubPixelUnknown = 0,
+ SubPixelHorizontalRGB,
+ SubPixelHorizontalBGR,
+ SubPixelVerticalRGB,
+ SubPixelVerticalBGR,
+ SubPixelNone,
+};
+
+#define DRM_COLOR_FORMAT_RGB444 (1<<0)
+#define DRM_COLOR_FORMAT_YCRCB444 (1<<1)
+#define DRM_COLOR_FORMAT_YCRCB422 (1<<2)
+/*
+ * Describes a given display (e.g. CRT or flat panel) and its limitations.
+ */
+struct drm_display_info {
+ char name[DRM_DISPLAY_INFO_LEN];
+
+ /* Physical size */
+ unsigned int width_mm;
+ unsigned int height_mm;
+
+ /* Clock limits FIXME: storage format */
+ unsigned int min_vfreq, max_vfreq;
+ unsigned int min_hfreq, max_hfreq;
+ unsigned int pixel_clock;
+ unsigned int bpc;
+
+ enum subpixel_order subpixel_order;
+ u32 color_formats;
+
+ u8 cea_rev;
+
+ char *raw_edid; /* if any */
+};
+
+struct drm_framebuffer_funcs {
+ void (*destroy)(struct drm_framebuffer *framebuffer);
+ int (*create_handle)(struct drm_framebuffer *fb,
+ struct drm_file *file_priv,
+ unsigned int *handle);
+ /**
+ * Optinal callback for the dirty fb ioctl.
+ *
+ * Userspace can notify the driver via this callback
+ * that a area of the framebuffer has changed and should
+ * be flushed to the display hardware.
+ *
+ * See documentation in drm_mode.h for the struct
+ * drm_mode_fb_dirty_cmd for more information as all
+ * the semantics and arguments have a one to one mapping
+ * on this function.
+ */
+ int (*dirty)(struct drm_framebuffer *framebuffer,
+ struct drm_file *file_priv, unsigned flags,
+ unsigned color, struct drm_clip_rect *clips,
+ unsigned num_clips);
+};
+
+struct drm_framebuffer {
+ struct drm_device *dev;
+ struct list_head head;
+ struct drm_mode_object base;
+ const struct drm_framebuffer_funcs *funcs;
+ unsigned int pitches[4];
+ unsigned int offsets[4];
+ unsigned int width;
+ unsigned int height;
+ /* depth can be 15 or 16 */
+ unsigned int depth;
+ int bits_per_pixel;
+ int flags;
+ uint32_t pixel_format; /* fourcc format */
+ struct list_head filp_head;
+ /* if you are using the helper */
+ void *helper_private;
+};
+
+struct drm_property_blob {
+ struct drm_mode_object base;
+ struct list_head head;
+ unsigned int length;
+ unsigned char data[];
+};
+
+struct drm_property_enum {
+ uint64_t value;
+ struct list_head head;
+ char name[DRM_PROP_NAME_LEN];
+};
+
+struct drm_property {
+ struct list_head head;
+ struct drm_mode_object base;
+ uint32_t flags;
+ char name[DRM_PROP_NAME_LEN];
+ uint32_t num_values;
+ uint64_t *values;
+
+ struct list_head enum_blob_list;
+};
+
+struct drm_crtc;
+struct drm_connector;
+struct drm_encoder;
+struct drm_pending_vblank_event;
+struct drm_plane;
+
+/**
+ * drm_crtc_funcs - control CRTCs for a given device
+ * @reset: reset CRTC after state has been invalidate (e.g. resume)
+ * @dpms: control display power levels
+ * @save: save CRTC state
+ * @resore: restore CRTC state
+ * @lock: lock the CRTC
+ * @unlock: unlock the CRTC
+ * @shadow_allocate: allocate shadow pixmap
+ * @shadow_create: create shadow pixmap for rotation support
+ * @shadow_destroy: free shadow pixmap
+ * @mode_fixup: fixup proposed mode
+ * @mode_set: set the desired mode on the CRTC
+ * @gamma_set: specify color ramp for CRTC
+ * @destroy: deinit and free object.
+ *
+ * The drm_crtc_funcs structure is the central CRTC management structure
+ * in the DRM. Each CRTC controls one or more connectors (note that the name
+ * CRTC is simply historical, a CRTC may control LVDS, VGA, DVI, TV out, etc.
+ * connectors, not just CRTs).
+ *
+ * Each driver is responsible for filling out this structure at startup time,
+ * in addition to providing other modesetting features, like i2c and DDC
+ * bus accessors.
+ */
+struct drm_crtc_funcs {
+ /* Save CRTC state */
+ void (*save)(struct drm_crtc *crtc); /* suspend? */
+ /* Restore CRTC state */
+ void (*restore)(struct drm_crtc *crtc); /* resume? */
+ /* Reset CRTC state */
+ void (*reset)(struct drm_crtc *crtc);
+
+ /* cursor controls */
+ int (*cursor_set)(struct drm_crtc *crtc, struct drm_file *file_priv,
+ uint32_t handle, uint32_t width, uint32_t height);
+ int (*cursor_move)(struct drm_crtc *crtc, int x, int y);
+
+ /* Set gamma on the CRTC */
+ void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
+ uint32_t start, uint32_t size);
+ /* Object destroy routine */
+ void (*destroy)(struct drm_crtc *crtc);
+
+ int (*set_config)(struct drm_mode_set *set);
+
+ /*
+ * Flip to the given framebuffer. This implements the page
+ * flip ioctl descibed in drm_mode.h, specifically, the
+ * implementation must return immediately and block all
+ * rendering to the current fb until the flip has completed.
+ * If userspace set the event flag in the ioctl, the event
+ * argument will point to an event to send back when the flip
+ * completes, otherwise it will be NULL.
+ */
+ int (*page_flip)(struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
+ struct drm_pending_vblank_event *event);
+};
+
+/**
+ * drm_crtc - central CRTC control structure
+ * @enabled: is this CRTC enabled?
+ * @x: x position on screen
+ * @y: y position on screen
+ * @funcs: CRTC control functions
+ *
+ * Each CRTC may have one or more connectors associated with it. This structure
+ * allows the CRTC to be controlled.
+ */
+struct drm_crtc {
+ struct drm_device *dev;
+ struct list_head head;
+
+ struct drm_mode_object base;
+
+ /* framebuffer the connector is currently bound to */
+ struct drm_framebuffer *fb;
+
+ bool enabled;
+
+ /* Requested mode from modesetting. */
+ struct drm_display_mode mode;
+
+ /* Programmed mode in hw, after adjustments for encoders,
+ * crtc, panel scaling etc. Needed for timestamping etc.
+ */
+ struct drm_display_mode hwmode;
+
+ int x, y;
+ const struct drm_crtc_funcs *funcs;
+
+ /* CRTC gamma size for reporting to userspace */
+ uint32_t gamma_size;
+ uint16_t *gamma_store;
+
+ /* Constants needed for precise vblank and swap timestamping. */
+ int64_t framedur_ns, linedur_ns, pixeldur_ns;
+
+ /* if you are using the helper */
+ void *helper_private;
+};
+
+
+/**
+ * drm_connector_funcs - control connectors on a given device
+ * @dpms: set power state (see drm_crtc_funcs above)
+ * @save: save connector state
+ * @restore: restore connector state
+ * @reset: reset connector after state has been invalidate (e.g. resume)
+ * @mode_valid: is this mode valid on the given connector?
+ * @mode_fixup: try to fixup proposed mode for this connector
+ * @mode_set: set this mode
+ * @detect: is this connector active?
+ * @get_modes: get mode list for this connector
+ * @set_property: property for this connector may need update
+ * @destroy: make object go away
+ * @force: notify the driver the connector is forced on
+ *
+ * Each CRTC may have one or more connectors attached to it. The functions
+ * below allow the core DRM code to control connectors, enumerate available modes,
+ * etc.
+ */
+struct drm_connector_funcs {
+ void (*dpms)(struct drm_connector *connector, int mode);
+ void (*save)(struct drm_connector *connector);
+ void (*restore)(struct drm_connector *connector);
+ void (*reset)(struct drm_connector *connector);
+
+ /* Check to see if anything is attached to the connector.
+ * @force is set to false whilst polling, true when checking the
+ * connector due to user request. @force can be used by the driver
+ * to avoid expensive, destructive operations during automated
+ * probing.
+ */
+ enum drm_connector_status (*detect)(struct drm_connector *connector,
+ bool force);
+ int (*fill_modes)(struct drm_connector *connector, uint32_t max_width, uint32_t max_height);
+ int (*set_property)(struct drm_connector *connector, struct drm_property *property,
+ uint64_t val);
+ void (*destroy)(struct drm_connector *connector);
+ void (*force)(struct drm_connector *connector);
+};
+
+struct drm_encoder_funcs {
+ void (*reset)(struct drm_encoder *encoder);
+ void (*destroy)(struct drm_encoder *encoder);
+};
+
+#define DRM_CONNECTOR_MAX_UMODES 16
+#define DRM_CONNECTOR_MAX_PROPERTY 16
+#define DRM_CONNECTOR_LEN 32
+#define DRM_CONNECTOR_MAX_ENCODER 2
+
+/**
+ * drm_encoder - central DRM encoder structure
+ */
+struct drm_encoder {
+ struct drm_device *dev;
+ struct list_head head;
+
+ struct drm_mode_object base;
+ int encoder_type;
+ uint32_t possible_crtcs;
+ uint32_t possible_clones;
+
+ struct drm_crtc *crtc;
+ const struct drm_encoder_funcs *funcs;
+ void *helper_private;
+};
+
+enum drm_connector_force {
+ DRM_FORCE_UNSPECIFIED,
+ DRM_FORCE_OFF,
+ DRM_FORCE_ON, /* force on analog part normally */
+ DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */
+};
+
+/* should we poll this connector for connects and disconnects */
+/* hot plug detectable */
+#define DRM_CONNECTOR_POLL_HPD (1 << 0)
+/* poll for connections */
+#define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
+/* can cleanly poll for disconnections without flickering the screen */
+/* DACs should rarely do this without a lot of testing */
+#define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
+
+#define MAX_ELD_BYTES 128
+
+/**
+ * drm_connector - central DRM connector control structure
+ * @crtc: CRTC this connector is currently connected to, NULL if none
+ * @interlace_allowed: can this connector handle interlaced modes?
+ * @doublescan_allowed: can this connector handle doublescan?
+ * @available_modes: modes available on this connector (from get_modes() + user)
+ * @initial_x: initial x position for this connector
+ * @initial_y: initial y position for this connector
+ * @status: connector connected?
+ * @funcs: connector control functions
+ *
+ * Each connector may be connected to one or more CRTCs, or may be clonable by
+ * another connector if they can share a CRTC. Each connector also has a specific
+ * position in the broader display (referred to as a 'screen' though it could
+ * span multiple monitors).
+ */
+struct drm_connector {
+ struct drm_device *dev;
+ /* struct device kdev; XXXKIB */
+ struct device_attribute *attr;
+ struct list_head head;
+
+ struct drm_mode_object base;
+
+ int connector_type;
+ int connector_type_id;
+ bool interlace_allowed;
+ bool doublescan_allowed;
+ struct list_head modes; /* list of modes on this connector */
+
+ int initial_x, initial_y;
+ enum drm_connector_status status;
+
+ /* these are modes added by probing with DDC or the BIOS */
+ struct list_head probed_modes;
+
+ struct drm_display_info display_info;
+ const struct drm_connector_funcs *funcs;
+
+ struct list_head user_modes;
+ struct drm_property_blob *edid_blob_ptr;
+ u32 property_ids[DRM_CONNECTOR_MAX_PROPERTY];
+ uint64_t property_values[DRM_CONNECTOR_MAX_PROPERTY];
+
+ uint8_t polled; /* DRM_CONNECTOR_POLL_* */
+
+ /* requested DPMS state */
+ int dpms;
+
+ void *helper_private;
+
+ /* forced on connector */
+ enum drm_connector_force force;
+ uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER];
+ uint32_t force_encoder_id;
+ struct drm_encoder *encoder; /* currently active encoder */
+
+ /* EDID bits */
+ uint8_t eld[MAX_ELD_BYTES];
+ bool dvi_dual;
+ int max_tmds_clock; /* in MHz */
+ bool latency_present[2];
+ int video_latency[2]; /* [0]: progressive, [1]: interlaced */
+ int audio_latency[2];
+
+ int null_edid_counter; /* needed to workaround some HW bugs where we get all 0s */
+};
+
+/**
+ * drm_plane_funcs - driver plane control functions
+ * @update_plane: update the plane configuration
+ * @disable_plane: shut down the plane
+ * @destroy: clean up plane resources
+ */
+struct drm_plane_funcs {
+ int (*update_plane)(struct drm_plane *plane,
+ struct drm_crtc *crtc, struct drm_framebuffer *fb,
+ int crtc_x, int crtc_y,
+ unsigned int crtc_w, unsigned int crtc_h,
+ uint32_t src_x, uint32_t src_y,
+ uint32_t src_w, uint32_t src_h);
+ int (*disable_plane)(struct drm_plane *plane);
+ void (*destroy)(struct drm_plane *plane);
+};
+
+/**
+ * drm_plane - central DRM plane control structure
+ * @dev: DRM device this plane belongs to
+ * @head: for list management
+ * @base: base mode object
+ * @possible_crtcs: pipes this plane can be bound to
+ * @format_types: array of formats supported by this plane
+ * @format_count: number of formats supported
+ * @crtc: currently bound CRTC
+ * @fb: currently bound fb
+ * @gamma_size: size of gamma table
+ * @gamma_store: gamma correction table
+ * @enabled: enabled flag
+ * @funcs: helper functions
+ * @helper_private: storage for drver layer
+ */
+struct drm_plane {
+ struct drm_device *dev;
+ struct list_head head;
+
+ struct drm_mode_object base;
+
+ uint32_t possible_crtcs;
+ uint32_t *format_types;
+ uint32_t format_count;
+
+ struct drm_crtc *crtc;
+ struct drm_framebuffer *fb;
+
+ /* CRTC gamma size for reporting to userspace */
+ uint32_t gamma_size;
+ uint16_t *gamma_store;
+
+ bool enabled;
+
+ const struct drm_plane_funcs *funcs;
+ void *helper_private;
+};
+
+/**
+ * struct drm_mode_set
+ *
+ * Represents a single crtc the connectors that it drives with what mode
+ * and from which framebuffer it scans out from.
+ *
+ * This is used to set modes.
+ */
+struct drm_mode_set {
+ struct list_head head;
+
+ struct drm_framebuffer *fb;
+ struct drm_crtc *crtc;
+ struct drm_display_mode *mode;
+
+ uint32_t x;
+ uint32_t y;
+
+ struct drm_connector **connectors;
+ size_t num_connectors;
+};
+
+/**
+ * struct drm_mode_config_funcs - configure CRTCs for a given screen layout
+ */
+struct drm_mode_config_funcs {
+ int (*fb_create)(struct drm_device *dev,
+ struct drm_file *file_priv, struct drm_mode_fb_cmd2 *mode_cmd,
+ struct drm_framebuffer **res);
+ void (*output_poll_changed)(struct drm_device *dev);
+};
+
+struct drm_mode_group {
+ uint32_t num_crtcs;
+ uint32_t num_encoders;
+ uint32_t num_connectors;
+
+ /* list of object IDs for this group */
+ uint32_t *id_list;
+};
+
+/**
+ * drm_mode_config - Mode configuration control structure
+ *
+ */
+struct drm_mode_config {
+ struct sx mutex; /* protects configuration (mode lists etc.) */
+ struct drm_gem_names crtc_names; /* use this idr for all IDs, fb, crtc, connector, modes */
+ /* this is limited to one for now */
+ int num_fb;
+ struct list_head fb_list;
+ int num_connector;
+ struct list_head connector_list;
+ int num_encoder;
+ struct list_head encoder_list;
+ int num_plane;
+ struct list_head plane_list;
+
+ int num_crtc;
+ struct list_head crtc_list;
+
+ struct list_head property_list;
+
+ int min_width, min_height;
+ int max_width, max_height;
+ struct drm_mode_config_funcs *funcs;
+ resource_size_t fb_base;
+
+ /* output poll support */
+ bool poll_enabled;
+ struct timeout_task output_poll_task;
+
+ /* pointers to standard properties */
+ struct list_head property_blob_list;
+ struct drm_property *edid_property;
+ struct drm_property *dpms_property;
+
+ /* DVI-I properties */
+ struct drm_property *dvi_i_subconnector_property;
+ struct drm_property *dvi_i_select_subconnector_property;
+
+ /* TV properties */
+ struct drm_property *tv_subconnector_property;
+ struct drm_property *tv_select_subconnector_property;
+ struct drm_property *tv_mode_property;
+ struct drm_property *tv_left_margin_property;
+ struct drm_property *tv_right_margin_property;
+ struct drm_property *tv_top_margin_property;
+ struct drm_property *tv_bottom_margin_property;
+ struct drm_property *tv_brightness_property;
+ struct drm_property *tv_contrast_property;
+ struct drm_property *tv_flicker_reduction_property;
+ struct drm_property *tv_overscan_property;
+ struct drm_property *tv_saturation_property;
+ struct drm_property *tv_hue_property;
+
+ /* Optional properties */
+ struct drm_property *scaling_mode_property;
+ struct drm_property *dithering_mode_property;
+ struct drm_property *dirty_info_property;
+
+ /* dumb ioctl parameters */
+ uint32_t preferred_depth, prefer_shadow;
+};
+
+#define obj_to_crtc(x) container_of(x, struct drm_crtc, base)
+#define obj_to_connector(x) container_of(x, struct drm_connector, base)
+#define obj_to_encoder(x) container_of(x, struct drm_encoder, base)
+#define obj_to_mode(x) container_of(x, struct drm_display_mode, base)
+#define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
+#define obj_to_property(x) container_of(x, struct drm_property, base)
+#define obj_to_blob(x) container_of(x, struct drm_property_blob, base)
+#define obj_to_plane(x) container_of(x, struct drm_plane, base)
+
+struct drm_prop_enum_list {
+ int type;
+ char *name;
+};
+
+#if defined(MODE_SETTING_LOCKING_IS_NOT_BROKEN)
+#define DRM_MODE_CONFIG_ASSERT_LOCKED(dev) \
+ sx_assert(&dev->mode_config.mutex, SA_XLOCKED)
+#else
+#define DRM_MODE_CONFIG_ASSERT_LOCKED(dev)
+#endif
+
+extern char *drm_get_dirty_info_name(int val);
+extern char *drm_get_connector_status_name(enum drm_connector_status status);
+
+extern int drm_crtc_init(struct drm_device *dev,
+ struct drm_crtc *crtc,
+ const struct drm_crtc_funcs *funcs);
+extern void drm_crtc_cleanup(struct drm_crtc *crtc);
+
+extern int drm_connector_init(struct drm_device *dev,
+ struct drm_connector *connector,
+ const struct drm_connector_funcs *funcs,
+ int connector_type);
+
+extern void drm_connector_cleanup(struct drm_connector *connector);
+
+extern int drm_encoder_init(struct drm_device *dev,
+ struct drm_encoder *encoder,
+ const struct drm_encoder_funcs *funcs,
+ int encoder_type);
+
+extern int drm_plane_init(struct drm_device *dev,
+ struct drm_plane *plane,
+ unsigned long possible_crtcs,
+ const struct drm_plane_funcs *funcs,
+ const uint32_t *formats, uint32_t format_count,
+ bool priv);
+extern void drm_plane_cleanup(struct drm_plane *plane);
+
+extern void drm_encoder_cleanup(struct drm_encoder *encoder);
+
+extern char *drm_get_connector_name(struct drm_connector *connector);
+extern char *drm_get_dpms_name(int val);
+extern char *drm_get_dvi_i_subconnector_name(int val);
+extern char *drm_get_dvi_i_select_name(int val);
+extern char *drm_get_tv_subconnector_name(int val);
+extern char *drm_get_tv_select_name(int val);
+extern void drm_fb_release(struct drm_file *file_priv);
+extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group);
+extern struct edid *drm_get_edid(struct drm_connector *connector,
+ device_t adapter);
+extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid);
+extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode);
+extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode);
+extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
+ const struct drm_display_mode *mode);
+extern void drm_mode_debug_printmodeline(struct drm_display_mode *mode);
+extern void drm_mode_config_init(struct drm_device *dev);
+extern void drm_mode_config_reset(struct drm_device *dev);
+extern void drm_mode_config_cleanup(struct drm_device *dev);
+extern void drm_mode_set_name(struct drm_display_mode *mode);
+extern bool drm_mode_equal(struct drm_display_mode *mode1, struct drm_display_mode *mode2);
+extern int drm_mode_width(struct drm_display_mode *mode);
+extern int drm_mode_height(struct drm_display_mode *mode);
+
+/* for us by fb module */
+extern int drm_mode_attachmode_crtc(struct drm_device *dev,
+ struct drm_crtc *crtc,
+ const struct drm_display_mode *mode);
+extern int drm_mode_detachmode_crtc(struct drm_device *dev, struct drm_display_mode *mode);
+
+extern struct drm_display_mode *drm_mode_create(struct drm_device *dev);
+extern void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode);
+extern void drm_mode_list_concat(struct list_head *head,
+ struct list_head *new);
+extern void drm_mode_validate_size(struct drm_device *dev,
+ struct list_head *mode_list,
+ int maxX, int maxY, int maxPitch);
+extern void drm_mode_validate_clocks(struct drm_device *dev,
+ struct list_head *mode_list,
+ int *min, int *max, int n_ranges);
+extern void drm_mode_prune_invalid(struct drm_device *dev,
+ struct list_head *mode_list, bool verbose);
+extern void drm_mode_sort(struct list_head *mode_list);
+extern int drm_mode_hsync(const struct drm_display_mode *mode);
+extern int drm_mode_vrefresh(const struct drm_display_mode *mode);
+extern void drm_mode_set_crtcinfo(struct drm_display_mode *p,
+ int adjust_flags);
+extern void drm_mode_connector_list_update(struct drm_connector *connector);
+extern int drm_mode_connector_update_edid_property(struct drm_connector *connector,
+ struct edid *edid);
+extern int drm_connector_property_set_value(struct drm_connector *connector,
+ struct drm_property *property,
+ uint64_t value);
+extern int drm_connector_property_get_value(struct drm_connector *connector,
+ struct drm_property *property,
+ uint64_t *value);
+extern struct drm_display_mode *drm_crtc_mode_create(struct drm_device *dev);
+extern void drm_framebuffer_set_object(struct drm_device *dev,
+ unsigned long handle);
+extern int drm_framebuffer_init(struct drm_device *dev,
+ struct drm_framebuffer *fb,
+ const struct drm_framebuffer_funcs *funcs);
+extern void drm_framebuffer_cleanup(struct drm_framebuffer *fb);
+extern int drmfb_probe(struct drm_device *dev, struct drm_crtc *crtc);
+extern int drmfb_remove(struct drm_device *dev, struct drm_framebuffer *fb);
+extern void drm_crtc_probe_connector_modes(struct drm_device *dev, int maxX, int maxY);
+extern bool drm_crtc_in_use(struct drm_crtc *crtc);
+
+extern int drm_connector_attach_property(struct drm_connector *connector,
+ struct drm_property *property, uint64_t init_val);
+extern struct drm_property *drm_property_create(struct drm_device *dev, int flags,
+ const char *name, int num_values);
+extern struct drm_property *drm_property_create_enum(struct drm_device *dev, int flags,
+ const char *name,
+ const struct drm_prop_enum_list *props,
+ int num_values);
+struct drm_property *drm_property_create_range(struct drm_device *dev, int flags,
+ const char *name,
+ uint64_t min, uint64_t max);
+extern void drm_property_destroy(struct drm_device *dev, struct drm_property *property);
+extern int drm_property_add_enum(struct drm_property *property, int index,
+ uint64_t value, const char *name);
+extern int drm_mode_create_dvi_i_properties(struct drm_device *dev);
+extern int drm_mode_create_tv_properties(struct drm_device *dev, int num_formats,
+ char *formats[]);
+extern int drm_mode_create_scaling_mode_property(struct drm_device *dev);
+extern int drm_mode_create_dithering_property(struct drm_device *dev);
+extern int drm_mode_create_dirty_info_property(struct drm_device *dev);
+extern char *drm_get_encoder_name(struct drm_encoder *encoder);
+
+extern int drm_mode_connector_attach_encoder(struct drm_connector *connector,
+ struct drm_encoder *encoder);
+extern void drm_mode_connector_detach_encoder(struct drm_connector *connector,
+ struct drm_encoder *encoder);
+extern int drm_mode_crtc_set_gamma_size(struct drm_crtc *crtc,
+ int gamma_size);
+extern struct drm_mode_object *drm_mode_object_find(struct drm_device *dev,
+ uint32_t id, uint32_t type);
+/* IOCTLs */
+extern int drm_mode_getresources(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_getplane_res(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+extern int drm_mode_getcrtc(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_getconnector(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_setcrtc(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_getplane(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_setplane(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_cursor_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_addfb(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_addfb2(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth);
+extern int drm_mode_rmfb(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_getfb(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_addmode_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_rmmode_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_attachmode_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_detachmode_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+
+extern int drm_mode_getproperty_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_getblob_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_hotplug_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_replacefb(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_getencoder(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern bool drm_detect_hdmi_monitor(struct edid *edid);
+extern bool drm_detect_monitor_audio(struct edid *edid);
+extern int drm_mode_page_flip_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev,
+ int hdisplay, int vdisplay, int vrefresh,
+ bool reduced, bool interlaced, bool margins);
+extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev,
+ int hdisplay, int vdisplay, int vrefresh,
+ bool interlaced, int margins);
+extern struct drm_display_mode *drm_gtf_mode_complex(struct drm_device *dev,
+ int hdisplay, int vdisplay, int vrefresh,
+ bool interlaced, int margins, int GTF_M,
+ int GTF_2C, int GTF_K, int GTF_2J);
+extern int drm_add_modes_noedid(struct drm_connector *connector,
+ int hdisplay, int vdisplay);
+
+extern int drm_edid_header_is_valid(const u8 *raw_edid);
+extern bool drm_edid_is_valid(struct edid *edid);
+struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev,
+ int hsize, int vsize, int fresh);
+
+extern int drm_mode_create_dumb_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_mmap_dumb_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+extern int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+
+extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
+ int *bpp);
+#endif /* __DRM_CRTC_H__ */
diff --git a/sys/dev/drm2/drm_crtc_helper.c b/sys/dev/drm2/drm_crtc_helper.c
new file mode 100644
index 000000000000..b798a57bae10
--- /dev/null
+++ b/sys/dev/drm2/drm_crtc_helper.c
@@ -0,0 +1,1043 @@
+/*
+ * Copyright (c) 2006-2008 Intel Corporation
+ * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
+ *
+ * DRM core CRTC related functions
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Authors:
+ * Keith Packard
+ * Eric Anholt <eric@anholt.net>
+ * Dave Airlie <airlied@linux.ie>
+ * Jesse Barnes <jesse.barnes@intel.com>
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_fourcc.h>
+#include <dev/drm2/drm_crtc_helper.h>
+#include <dev/drm2/drm_fb_helper.h>
+
+bool
+drm_fetch_cmdline_mode_from_kenv(struct drm_connector *connector,
+ struct drm_cmdline_mode *cmdline_mode)
+{
+ char *tun_var_name, *tun_mode;
+ static const char tun_prefix[] = "drm_mode.";
+ bool res;
+
+ res = false;
+ tun_var_name = malloc(sizeof(tun_prefix) +
+ strlen(drm_get_connector_name(connector)), M_TEMP, M_WAITOK);
+ strcpy(tun_var_name, tun_prefix);
+ strcat(tun_var_name, drm_get_connector_name(connector));
+ tun_mode = getenv(tun_var_name);
+ if (tun_mode != NULL) {
+ res = drm_mode_parse_command_line_for_connector(tun_mode,
+ connector, cmdline_mode);
+ freeenv(tun_mode);
+ }
+ free(tun_var_name, M_TEMP);
+ return (res);
+}
+
+static bool drm_kms_helper_poll = true;
+
+static void drm_mode_validate_flag(struct drm_connector *connector,
+ int flags)
+{
+ struct drm_display_mode *mode, *t;
+
+ if (flags == (DRM_MODE_FLAG_DBLSCAN | DRM_MODE_FLAG_INTERLACE))
+ return;
+
+ list_for_each_entry_safe(mode, t, &connector->modes, head) {
+ if ((mode->flags & DRM_MODE_FLAG_INTERLACE) &&
+ !(flags & DRM_MODE_FLAG_INTERLACE))
+ mode->status = MODE_NO_INTERLACE;
+ if ((mode->flags & DRM_MODE_FLAG_DBLSCAN) &&
+ !(flags & DRM_MODE_FLAG_DBLSCAN))
+ mode->status = MODE_NO_DBLESCAN;
+ }
+
+ return;
+}
+
+/**
+ * drm_helper_probe_single_connector_modes - get complete set of display modes
+ * @dev: DRM device
+ * @maxX: max width for modes
+ * @maxY: max height for modes
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Based on @dev's mode_config layout, scan all the connectors and try to detect
+ * modes on them. Modes will first be added to the connector's probed_modes
+ * list, then culled (based on validity and the @maxX, @maxY parameters) and
+ * put into the normal modes list.
+ *
+ * Intended to be used either at bootup time or when major configuration
+ * changes have occurred.
+ *
+ * FIXME: take into account monitor limits
+ *
+ * RETURNS:
+ * Number of modes found on @connector.
+ */
+int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
+ uint32_t maxX, uint32_t maxY)
+{
+ struct drm_device *dev = connector->dev;
+ struct drm_display_mode *mode, *t;
+ struct drm_connector_helper_funcs *connector_funcs =
+ connector->helper_private;
+ struct drm_cmdline_mode cmdline_mode;
+ int count = 0;
+ int mode_flags = 0;
+
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", connector->base.id,
+ drm_get_connector_name(connector));
+ /* set all modes to the unverified state */
+ list_for_each_entry_safe(mode, t, &connector->modes, head)
+ mode->status = MODE_UNVERIFIED;
+
+ if (connector->force) {
+ if (connector->force == DRM_FORCE_ON)
+ connector->status = connector_status_connected;
+ else
+ connector->status = connector_status_disconnected;
+ if (connector->funcs->force)
+ connector->funcs->force(connector);
+ } else {
+ connector->status = connector->funcs->detect(connector, true);
+ drm_kms_helper_poll_enable(dev);
+ }
+
+ if (connector->status == connector_status_disconnected) {
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] disconnected\n",
+ connector->base.id, drm_get_connector_name(connector));
+ drm_mode_connector_update_edid_property(connector, NULL);
+ goto prune;
+ }
+
+ count = (*connector_funcs->get_modes)(connector);
+ if (count == 0 && drm_fetch_cmdline_mode_from_kenv(connector,
+ &cmdline_mode)) {
+ mode = drm_mode_create_from_cmdline_mode(dev,
+ &cmdline_mode);
+ if (mode != NULL) {
+ DRM_DEBUG_KMS(
+ "[CONNECTOR:%d:%s] found manual override ",
+ connector->base.id,
+ drm_get_connector_name(connector));
+ drm_mode_debug_printmodeline(mode);
+ drm_mode_probed_add(connector, mode);
+ count++;
+ } else {
+ DRM_ERROR(
+ "[CONNECTOR:%d:%s] manual override mode: parse error\n",
+ connector->base.id,
+ drm_get_connector_name(connector));
+ }
+ }
+ if (count == 0 && connector->status == connector_status_connected)
+ count = drm_add_modes_noedid(connector, 1024, 768);
+ if (count == 0)
+ goto prune;
+
+ drm_mode_connector_list_update(connector);
+
+ if (maxX && maxY)
+ drm_mode_validate_size(dev, &connector->modes, maxX,
+ maxY, 0);
+
+ if (connector->interlace_allowed)
+ mode_flags |= DRM_MODE_FLAG_INTERLACE;
+ if (connector->doublescan_allowed)
+ mode_flags |= DRM_MODE_FLAG_DBLSCAN;
+ drm_mode_validate_flag(connector, mode_flags);
+
+ list_for_each_entry_safe(mode, t, &connector->modes, head) {
+ if (mode->status == MODE_OK)
+ mode->status = connector_funcs->mode_valid(connector,
+ mode);
+ }
+
+prune:
+ drm_mode_prune_invalid(dev, &connector->modes, true);
+
+ if (list_empty(&connector->modes))
+ return 0;
+
+ drm_mode_sort(&connector->modes);
+
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] probed modes :\n", connector->base.id,
+ drm_get_connector_name(connector));
+ list_for_each_entry_safe(mode, t, &connector->modes, head) {
+ mode->vrefresh = drm_mode_vrefresh(mode);
+
+ drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
+ drm_mode_debug_printmodeline(mode);
+ }
+
+ return count;
+}
+
+/**
+ * drm_helper_encoder_in_use - check if a given encoder is in use
+ * @encoder: encoder to check
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Walk @encoders's DRM device's mode_config and see if it's in use.
+ *
+ * RETURNS:
+ * True if @encoder is part of the mode_config, false otherwise.
+ */
+bool drm_helper_encoder_in_use(struct drm_encoder *encoder)
+{
+ struct drm_connector *connector;
+ struct drm_device *dev = encoder->dev;
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head)
+ if (connector->encoder == encoder)
+ return true;
+ return false;
+}
+
+/**
+ * drm_helper_crtc_in_use - check if a given CRTC is in a mode_config
+ * @crtc: CRTC to check
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Walk @crtc's DRM device's mode_config and see if it's in use.
+ *
+ * RETURNS:
+ * True if @crtc is part of the mode_config, false otherwise.
+ */
+bool drm_helper_crtc_in_use(struct drm_crtc *crtc)
+{
+ struct drm_encoder *encoder;
+ struct drm_device *dev = crtc->dev;
+ /* FIXME: Locking around list access? */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head)
+ if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder))
+ return true;
+ return false;
+}
+
+static void
+drm_encoder_disable(struct drm_encoder *encoder)
+{
+ struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
+
+ if (encoder_funcs->disable)
+ (*encoder_funcs->disable)(encoder);
+ else
+ (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF);
+}
+
+/**
+ * drm_helper_disable_unused_functions - disable unused objects
+ * @dev: DRM device
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * If an connector or CRTC isn't part of @dev's mode_config, it can be disabled
+ * by calling its dpms function, which should power it off.
+ */
+void drm_helper_disable_unused_functions(struct drm_device *dev)
+{
+ struct drm_encoder *encoder;
+ struct drm_connector *connector;
+ struct drm_crtc *crtc;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ if (!connector->encoder)
+ continue;
+ if (connector->status == connector_status_disconnected)
+ connector->encoder = NULL;
+ }
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ if (!drm_helper_encoder_in_use(encoder)) {
+ drm_encoder_disable(encoder);
+ /* disconnector encoder from any connector */
+ encoder->crtc = NULL;
+ }
+ }
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+ crtc->enabled = drm_helper_crtc_in_use(crtc);
+ if (!crtc->enabled) {
+ if (crtc_funcs->disable)
+ (*crtc_funcs->disable)(crtc);
+ else
+ (*crtc_funcs->dpms)(crtc, DRM_MODE_DPMS_OFF);
+ crtc->fb = NULL;
+ }
+ }
+}
+
+/**
+ * drm_encoder_crtc_ok - can a given crtc drive a given encoder?
+ * @encoder: encoder to test
+ * @crtc: crtc to test
+ *
+ * Return false if @encoder can't be driven by @crtc, true otherwise.
+ */
+static bool drm_encoder_crtc_ok(struct drm_encoder *encoder,
+ struct drm_crtc *crtc)
+{
+ struct drm_device *dev;
+ struct drm_crtc *tmp;
+ int crtc_mask = 1;
+
+ if (crtc == NULL)
+ printf("checking null crtc?\n");
+
+ dev = crtc->dev;
+
+ list_for_each_entry(tmp, &dev->mode_config.crtc_list, head) {
+ if (tmp == crtc)
+ break;
+ crtc_mask <<= 1;
+ }
+
+ if (encoder->possible_crtcs & crtc_mask)
+ return true;
+ return false;
+}
+
+/*
+ * Check the CRTC we're going to map each output to vs. its current
+ * CRTC. If they don't match, we have to disable the output and the CRTC
+ * since the driver will have to re-route things.
+ */
+static void
+drm_crtc_prepare_encoders(struct drm_device *dev)
+{
+ struct drm_encoder_helper_funcs *encoder_funcs;
+ struct drm_encoder *encoder;
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ encoder_funcs = encoder->helper_private;
+ /* Disable unused encoders */
+ if (encoder->crtc == NULL)
+ drm_encoder_disable(encoder);
+ /* Disable encoders whose CRTC is about to change */
+ if (encoder_funcs->get_crtc &&
+ encoder->crtc != (*encoder_funcs->get_crtc)(encoder))
+ drm_encoder_disable(encoder);
+ }
+}
+
+/**
+ * drm_crtc_set_mode - set a mode
+ * @crtc: CRTC to program
+ * @mode: mode to use
+ * @x: width of mode
+ * @y: height of mode
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Try to set @mode on @crtc. Give @crtc and its associated connectors a chance
+ * to fixup or reject the mode prior to trying to set it.
+ *
+ * RETURNS:
+ * True if the mode was set successfully, or false otherwise.
+ */
+bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ int x, int y,
+ struct drm_framebuffer *old_fb)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_display_mode *adjusted_mode, saved_mode, saved_hwmode;
+ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+ struct drm_encoder_helper_funcs *encoder_funcs;
+ int saved_x, saved_y;
+ struct drm_encoder *encoder;
+ bool ret = true;
+
+ crtc->enabled = drm_helper_crtc_in_use(crtc);
+ if (!crtc->enabled)
+ return true;
+
+ adjusted_mode = drm_mode_duplicate(dev, mode);
+ if (!adjusted_mode)
+ return false;
+
+ saved_hwmode = crtc->hwmode;
+ saved_mode = crtc->mode;
+ saved_x = crtc->x;
+ saved_y = crtc->y;
+
+ /* Update crtc values up front so the driver can rely on them for mode
+ * setting.
+ */
+ crtc->mode = *mode;
+ crtc->x = x;
+ crtc->y = y;
+
+ /* Pass our mode to the connectors and the CRTC to give them a chance to
+ * adjust it according to limitations or connector properties, and also
+ * a chance to reject the mode entirely.
+ */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+
+ if (encoder->crtc != crtc)
+ continue;
+ encoder_funcs = encoder->helper_private;
+ if (!(ret = encoder_funcs->mode_fixup(encoder, mode,
+ adjusted_mode))) {
+ goto done;
+ }
+ }
+
+ if (!(ret = crtc_funcs->mode_fixup(crtc, mode, adjusted_mode))) {
+ goto done;
+ }
+ DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id);
+
+ /* Prepare the encoders and CRTCs before setting the mode. */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+
+ if (encoder->crtc != crtc)
+ continue;
+ encoder_funcs = encoder->helper_private;
+ /* Disable the encoders as the first thing we do. */
+ encoder_funcs->prepare(encoder);
+ }
+
+ drm_crtc_prepare_encoders(dev);
+
+ crtc_funcs->prepare(crtc);
+
+ /* Set up the DPLL and any encoders state that needs to adjust or depend
+ * on the DPLL.
+ */
+ ret = !crtc_funcs->mode_set(crtc, mode, adjusted_mode, x, y, old_fb);
+ if (!ret)
+ goto done;
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+
+ if (encoder->crtc != crtc)
+ continue;
+
+ DRM_DEBUG_KMS("[ENCODER:%d:%s] set [MODE:%d:%s]\n",
+ encoder->base.id, drm_get_encoder_name(encoder),
+ mode->base.id, mode->name);
+ encoder_funcs = encoder->helper_private;
+ encoder_funcs->mode_set(encoder, mode, adjusted_mode);
+ }
+
+ /* Now enable the clocks, plane, pipe, and connectors that we set up. */
+ crtc_funcs->commit(crtc);
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+
+ if (encoder->crtc != crtc)
+ continue;
+
+ encoder_funcs = encoder->helper_private;
+ encoder_funcs->commit(encoder);
+
+ }
+
+ /* Store real post-adjustment hardware mode. */
+ crtc->hwmode = *adjusted_mode;
+
+ /* Calculate and store various constants which
+ * are later needed by vblank and swap-completion
+ * timestamping. They are derived from true hwmode.
+ */
+ drm_calc_timestamping_constants(crtc);
+
+ /* FIXME: add subpixel order */
+done:
+ drm_mode_destroy(dev, adjusted_mode);
+ if (!ret) {
+ crtc->hwmode = saved_hwmode;
+ crtc->mode = saved_mode;
+ crtc->x = saved_x;
+ crtc->y = saved_y;
+ }
+
+ return ret;
+}
+
+static int
+drm_crtc_helper_disable(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_connector *connector;
+ struct drm_encoder *encoder;
+
+ /* Decouple all encoders and their attached connectors from this crtc */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ if (encoder->crtc != crtc)
+ continue;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ if (connector->encoder != encoder)
+ continue;
+
+ connector->encoder = NULL;
+ }
+ }
+
+ drm_helper_disable_unused_functions(dev);
+ return 0;
+}
+
+/**
+ * drm_crtc_helper_set_config - set a new config from userspace
+ * @crtc: CRTC to setup
+ * @crtc_info: user provided configuration
+ * @new_mode: new mode to set
+ * @connector_set: set of connectors for the new config
+ * @fb: new framebuffer
+ *
+ * LOCKING:
+ * Caller must hold mode config lock.
+ *
+ * Setup a new configuration, provided by the user in @crtc_info, and enable
+ * it.
+ *
+ * RETURNS:
+ * Zero. (FIXME)
+ */
+int drm_crtc_helper_set_config(struct drm_mode_set *set)
+{
+ struct drm_device *dev;
+ struct drm_crtc *save_crtcs, *new_crtc, *crtc;
+ struct drm_encoder *save_encoders, *new_encoder, *encoder;
+ struct drm_framebuffer *old_fb = NULL;
+ bool mode_changed = false; /* if true do a full mode set */
+ bool fb_changed = false; /* if true and !mode_changed just do a flip */
+ struct drm_connector *save_connectors, *connector;
+ int count = 0, ro, fail = 0;
+ struct drm_crtc_helper_funcs *crtc_funcs;
+ struct drm_mode_set save_set;
+ int ret = 0;
+ int i;
+
+ DRM_DEBUG_KMS("\n");
+
+ if (!set)
+ return -EINVAL;
+
+ if (!set->crtc)
+ return -EINVAL;
+
+ if (!set->crtc->helper_private)
+ return -EINVAL;
+
+ crtc_funcs = set->crtc->helper_private;
+
+ if (!set->mode)
+ set->fb = NULL;
+
+ if (set->fb) {
+ DRM_DEBUG_KMS("[CRTC:%d] [FB:%d] #connectors=%d (x y) (%i %i)\n",
+ set->crtc->base.id, set->fb->base.id,
+ (int)set->num_connectors, set->x, set->y);
+ } else {
+ DRM_DEBUG_KMS("[CRTC:%d] [NOFB]\n", set->crtc->base.id);
+ return drm_crtc_helper_disable(set->crtc);
+ }
+
+ dev = set->crtc->dev;
+
+ /* Allocate space for the backup of all (non-pointer) crtc, encoder and
+ * connector data. */
+ save_crtcs = malloc(dev->mode_config.num_crtc * sizeof(struct drm_crtc),
+ DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ save_encoders = malloc(dev->mode_config.num_encoder *
+ sizeof(struct drm_encoder), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ save_connectors = malloc(dev->mode_config.num_connector *
+ sizeof(struct drm_connector), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ /* Copy data. Note that driver private data is not affected.
+ * Should anything bad happen only the expected state is
+ * restored, not the drivers personal bookkeeping.
+ */
+ count = 0;
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ save_crtcs[count++] = *crtc;
+ }
+
+ count = 0;
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ save_encoders[count++] = *encoder;
+ }
+
+ count = 0;
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ save_connectors[count++] = *connector;
+ }
+
+ save_set.crtc = set->crtc;
+ save_set.mode = &set->crtc->mode;
+ save_set.x = set->crtc->x;
+ save_set.y = set->crtc->y;
+ save_set.fb = set->crtc->fb;
+
+ /* We should be able to check here if the fb has the same properties
+ * and then just flip_or_move it */
+ if (set->crtc->fb != set->fb) {
+ /* If we have no fb then treat it as a full mode set */
+ if (set->crtc->fb == NULL) {
+ DRM_DEBUG_KMS("crtc has no fb, full mode set\n");
+ mode_changed = true;
+ } else if (set->fb == NULL) {
+ mode_changed = true;
+ } else
+ fb_changed = true;
+ }
+
+ if (set->x != set->crtc->x || set->y != set->crtc->y)
+ fb_changed = true;
+
+ if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) {
+ DRM_DEBUG_KMS("modes are different, full mode set\n");
+ drm_mode_debug_printmodeline(&set->crtc->mode);
+ drm_mode_debug_printmodeline(set->mode);
+ mode_changed = true;
+ }
+
+ /* a) traverse passed in connector list and get encoders for them */
+ count = 0;
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ struct drm_connector_helper_funcs *connector_funcs =
+ connector->helper_private;
+ new_encoder = connector->encoder;
+ for (ro = 0; ro < set->num_connectors; ro++) {
+ if (set->connectors[ro] == connector) {
+ new_encoder = connector_funcs->best_encoder(connector);
+ /* if we can't get an encoder for a connector
+ we are setting now - then fail */
+ if (new_encoder == NULL)
+ /* don't break so fail path works correct */
+ fail = 1;
+ break;
+ }
+ }
+
+ if (new_encoder != connector->encoder) {
+ DRM_DEBUG_KMS("encoder changed, full mode switch\n");
+ mode_changed = true;
+ /* If the encoder is reused for another connector, then
+ * the appropriate crtc will be set later.
+ */
+ if (connector->encoder)
+ connector->encoder->crtc = NULL;
+ connector->encoder = new_encoder;
+ }
+ }
+
+ if (fail) {
+ ret = -EINVAL;
+ goto fail;
+ }
+
+ count = 0;
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ if (!connector->encoder)
+ continue;
+
+ if (connector->encoder->crtc == set->crtc)
+ new_crtc = NULL;
+ else
+ new_crtc = connector->encoder->crtc;
+
+ for (ro = 0; ro < set->num_connectors; ro++) {
+ if (set->connectors[ro] == connector)
+ new_crtc = set->crtc;
+ }
+
+ /* Make sure the new CRTC will work with the encoder */
+ if (new_crtc &&
+ !drm_encoder_crtc_ok(connector->encoder, new_crtc)) {
+ ret = -EINVAL;
+ goto fail;
+ }
+ if (new_crtc != connector->encoder->crtc) {
+ DRM_DEBUG_KMS("crtc changed, full mode switch\n");
+ mode_changed = true;
+ connector->encoder->crtc = new_crtc;
+ }
+ if (new_crtc) {
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] to [CRTC:%d]\n",
+ connector->base.id, drm_get_connector_name(connector),
+ new_crtc->base.id);
+ } else {
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] to [NOCRTC]\n",
+ connector->base.id, drm_get_connector_name(connector));
+ }
+ }
+
+ /* mode_set_base is not a required function */
+ if (fb_changed && !crtc_funcs->mode_set_base)
+ mode_changed = true;
+
+ if (mode_changed) {
+ set->crtc->enabled = drm_helper_crtc_in_use(set->crtc);
+ if (set->crtc->enabled) {
+ DRM_DEBUG_KMS("attempting to set mode from"
+ " userspace\n");
+ drm_mode_debug_printmodeline(set->mode);
+ old_fb = set->crtc->fb;
+ set->crtc->fb = set->fb;
+ if (!drm_crtc_helper_set_mode(set->crtc, set->mode,
+ set->x, set->y,
+ old_fb)) {
+ DRM_ERROR("failed to set mode on [CRTC:%d]\n",
+ set->crtc->base.id);
+ set->crtc->fb = old_fb;
+ ret = -EINVAL;
+ goto fail;
+ }
+ DRM_DEBUG_KMS("Setting connector DPMS state to on\n");
+ for (i = 0; i < set->num_connectors; i++) {
+ DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id,
+ drm_get_connector_name(set->connectors[i]));
+ set->connectors[i]->dpms = DRM_MODE_DPMS_ON;
+ }
+ }
+ drm_helper_disable_unused_functions(dev);
+ } else if (fb_changed) {
+ set->crtc->x = set->x;
+ set->crtc->y = set->y;
+
+ old_fb = set->crtc->fb;
+ if (set->crtc->fb != set->fb)
+ set->crtc->fb = set->fb;
+ ret = crtc_funcs->mode_set_base(set->crtc,
+ set->x, set->y, old_fb);
+ if (ret != 0) {
+ set->crtc->fb = old_fb;
+ goto fail;
+ }
+ }
+
+ free(save_connectors, DRM_MEM_KMS);
+ free(save_encoders, DRM_MEM_KMS);
+ free(save_crtcs, DRM_MEM_KMS);
+ return 0;
+
+fail:
+ /* Restore all previous data. */
+ count = 0;
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ *crtc = save_crtcs[count++];
+ }
+
+ count = 0;
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ *encoder = save_encoders[count++];
+ }
+
+ count = 0;
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ *connector = save_connectors[count++];
+ }
+
+ /* Try to restore the config */
+ if (mode_changed &&
+ !drm_crtc_helper_set_mode(save_set.crtc, save_set.mode, save_set.x,
+ save_set.y, save_set.fb))
+ DRM_ERROR("failed to restore config after modeset failure\n");
+
+ free(save_connectors, DRM_MEM_KMS);
+ free(save_encoders, DRM_MEM_KMS);
+ free(save_crtcs, DRM_MEM_KMS);
+ return ret;
+}
+
+static int drm_helper_choose_encoder_dpms(struct drm_encoder *encoder)
+{
+ int dpms = DRM_MODE_DPMS_OFF;
+ struct drm_connector *connector;
+ struct drm_device *dev = encoder->dev;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head)
+ if (connector->encoder == encoder)
+ if (connector->dpms < dpms)
+ dpms = connector->dpms;
+ return dpms;
+}
+
+static int drm_helper_choose_crtc_dpms(struct drm_crtc *crtc)
+{
+ int dpms = DRM_MODE_DPMS_OFF;
+ struct drm_connector *connector;
+ struct drm_device *dev = crtc->dev;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head)
+ if (connector->encoder && connector->encoder->crtc == crtc)
+ if (connector->dpms < dpms)
+ dpms = connector->dpms;
+ return dpms;
+}
+
+/**
+ * drm_helper_connector_dpms
+ * @connector affected connector
+ * @mode DPMS mode
+ *
+ * Calls the low-level connector DPMS function, then
+ * calls appropriate encoder and crtc DPMS functions as well
+ */
+void drm_helper_connector_dpms(struct drm_connector *connector, int mode)
+{
+ struct drm_encoder *encoder = connector->encoder;
+ struct drm_crtc *crtc = encoder ? encoder->crtc : NULL;
+ int old_dpms;
+
+ if (mode == connector->dpms)
+ return;
+
+ old_dpms = connector->dpms;
+ connector->dpms = mode;
+
+ /* from off to on, do crtc then encoder */
+ if (mode < old_dpms) {
+ if (crtc) {
+ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+ if (crtc_funcs->dpms)
+ (*crtc_funcs->dpms) (crtc,
+ drm_helper_choose_crtc_dpms(crtc));
+ }
+ if (encoder) {
+ struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
+ if (encoder_funcs->dpms)
+ (*encoder_funcs->dpms) (encoder,
+ drm_helper_choose_encoder_dpms(encoder));
+ }
+ }
+
+ /* from on to off, do encoder then crtc */
+ if (mode > old_dpms) {
+ if (encoder) {
+ struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
+ if (encoder_funcs->dpms)
+ (*encoder_funcs->dpms) (encoder,
+ drm_helper_choose_encoder_dpms(encoder));
+ }
+ if (crtc) {
+ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+ if (crtc_funcs->dpms)
+ (*crtc_funcs->dpms) (crtc,
+ drm_helper_choose_crtc_dpms(crtc));
+ }
+ }
+
+ return;
+}
+
+int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
+ struct drm_mode_fb_cmd2 *mode_cmd)
+{
+ int i;
+
+ fb->width = mode_cmd->width;
+ fb->height = mode_cmd->height;
+ for (i = 0; i < 4; i++) {
+ fb->pitches[i] = mode_cmd->pitches[i];
+ fb->offsets[i] = mode_cmd->offsets[i];
+ }
+ drm_fb_get_bpp_depth(mode_cmd->pixel_format, &fb->depth,
+ &fb->bits_per_pixel);
+ fb->pixel_format = mode_cmd->pixel_format;
+
+ return 0;
+}
+
+int drm_helper_resume_force_mode(struct drm_device *dev)
+{
+ struct drm_crtc *crtc;
+ struct drm_encoder *encoder;
+ struct drm_encoder_helper_funcs *encoder_funcs;
+ struct drm_crtc_helper_funcs *crtc_funcs;
+ int ret;
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+
+ if (!crtc->enabled)
+ continue;
+
+ ret = drm_crtc_helper_set_mode(crtc, &crtc->mode,
+ crtc->x, crtc->y, crtc->fb);
+
+ if (!ret)
+ DRM_ERROR("failed to set mode on crtc %p\n", crtc);
+
+ /* Turn off outputs that were already powered off */
+ if (drm_helper_choose_crtc_dpms(crtc)) {
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+
+ if(encoder->crtc != crtc)
+ continue;
+
+ encoder_funcs = encoder->helper_private;
+ if (encoder_funcs->dpms)
+ (*encoder_funcs->dpms) (encoder,
+ drm_helper_choose_encoder_dpms(encoder));
+ }
+
+ crtc_funcs = crtc->helper_private;
+ if (crtc_funcs->dpms)
+ (*crtc_funcs->dpms) (crtc,
+ drm_helper_choose_crtc_dpms(crtc));
+ }
+ }
+ /* disable the unused connectors while restoring the modesetting */
+ drm_helper_disable_unused_functions(dev);
+ return 0;
+}
+
+#define DRM_OUTPUT_POLL_PERIOD (10 * hz)
+static void output_poll_execute(void *ctx, int pending)
+{
+ struct drm_device *dev;
+ struct drm_connector *connector;
+ enum drm_connector_status old_status;
+ bool repoll = false, changed = false;
+
+ if (!drm_kms_helper_poll)
+ return;
+
+ dev = ctx;
+
+ sx_xlock(&dev->mode_config.mutex);
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+
+ /* if this is HPD or polled don't check it -
+ TV out for instance */
+ if (!connector->polled)
+ continue;
+
+ else if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT |
+ DRM_CONNECTOR_POLL_DISCONNECT))
+ repoll = true;
+
+ old_status = connector->status;
+ /* if we are connected and don't want to poll for disconnect
+ skip it */
+ if (old_status == connector_status_connected &&
+ !(connector->polled & DRM_CONNECTOR_POLL_DISCONNECT) &&
+ !(connector->polled & DRM_CONNECTOR_POLL_HPD))
+ continue;
+
+ connector->status = connector->funcs->detect(connector, false);
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] status updated from %d to %d\n",
+ connector->base.id,
+ drm_get_connector_name(connector),
+ old_status, connector->status);
+ if (old_status != connector->status)
+ changed = true;
+ }
+
+ sx_xunlock(&dev->mode_config.mutex);
+
+ if (changed) {
+#if 0
+ /* send a uevent + call fbdev */
+ drm_sysfs_hotplug_event(dev);
+#endif
+ if (dev->mode_config.funcs->output_poll_changed)
+ dev->mode_config.funcs->output_poll_changed(dev);
+ }
+
+ if (repoll) {
+ taskqueue_enqueue_timeout(taskqueue_thread,
+ &dev->mode_config.output_poll_task,
+ DRM_OUTPUT_POLL_PERIOD);
+ }
+}
+
+void drm_kms_helper_poll_disable(struct drm_device *dev)
+{
+ if (!dev->mode_config.poll_enabled)
+ return;
+ taskqueue_cancel_timeout(taskqueue_thread,
+ &dev->mode_config.output_poll_task, NULL);
+}
+
+void drm_kms_helper_poll_enable(struct drm_device *dev)
+{
+ bool poll = false;
+ struct drm_connector *connector;
+
+ if (!dev->mode_config.poll_enabled || !drm_kms_helper_poll)
+ return;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ if (connector->polled)
+ poll = true;
+ }
+
+ if (poll) {
+ taskqueue_enqueue_timeout(taskqueue_thread,
+ &dev->mode_config.output_poll_task, DRM_OUTPUT_POLL_PERIOD);
+ }
+}
+
+void drm_kms_helper_poll_init(struct drm_device *dev)
+{
+
+ TIMEOUT_TASK_INIT(taskqueue_thread, &dev->mode_config.output_poll_task,
+ 0, output_poll_execute, dev);
+ dev->mode_config.poll_enabled = true;
+
+ drm_kms_helper_poll_enable(dev);
+}
+
+void drm_kms_helper_poll_fini(struct drm_device *dev)
+{
+ drm_kms_helper_poll_disable(dev);
+}
+
+void drm_helper_hpd_irq_event(struct drm_device *dev)
+{
+ if (!dev->mode_config.poll_enabled)
+ return;
+
+ /* kill timer and schedule immediate execution, this doesn't block */
+ taskqueue_cancel_timeout(taskqueue_thread,
+ &dev->mode_config.output_poll_task, NULL);
+ if (drm_kms_helper_poll)
+ taskqueue_enqueue_timeout(taskqueue_thread,
+ &dev->mode_config.output_poll_task, 0);
+}
diff --git a/sys/dev/drm2/drm_crtc_helper.h b/sys/dev/drm2/drm_crtc_helper.h
new file mode 100644
index 000000000000..76542632fa35
--- /dev/null
+++ b/sys/dev/drm2/drm_crtc_helper.h
@@ -0,0 +1,146 @@
+/*
+ * Copyright © 2006 Keith Packard
+ * Copyright © 2007-2008 Dave Airlie
+ * Copyright © 2007-2008 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ *
+ * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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$
+ */
+
+/*
+ * The DRM mode setting helper functions are common code for drivers to use if
+ * they wish. Drivers are not forced to use this code in their
+ * implementations but it would be useful if they code they do use at least
+ * provides a consistent interface and operation to userspace
+ */
+
+#ifndef __DRM_CRTC_HELPER_H__
+#define __DRM_CRTC_HELPER_H__
+
+enum mode_set_atomic {
+ LEAVE_ATOMIC_MODE_SET,
+ ENTER_ATOMIC_MODE_SET,
+};
+
+struct drm_crtc_helper_funcs {
+ /*
+ * Control power levels on the CRTC. If the mode passed in is
+ * unsupported, the provider must use the next lowest power level.
+ */
+ void (*dpms)(struct drm_crtc *crtc, int mode);
+ void (*prepare)(struct drm_crtc *crtc);
+ void (*commit)(struct drm_crtc *crtc);
+
+ /* Provider can fixup or change mode timings before modeset occurs */
+ bool (*mode_fixup)(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+ /* Actually set the mode */
+ int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode, int x, int y,
+ struct drm_framebuffer *old_fb);
+
+ /* Move the crtc on the current fb to the given position *optional* */
+ int (*mode_set_base)(struct drm_crtc *crtc, int x, int y,
+ struct drm_framebuffer *old_fb);
+ int (*mode_set_base_atomic)(struct drm_crtc *crtc,
+ struct drm_framebuffer *fb, int x, int y,
+ enum mode_set_atomic);
+
+ /* reload the current crtc LUT */
+ void (*load_lut)(struct drm_crtc *crtc);
+
+ /* disable crtc when not in use - more explicit than dpms off */
+ void (*disable)(struct drm_crtc *crtc);
+};
+
+struct drm_encoder_helper_funcs {
+ void (*dpms)(struct drm_encoder *encoder, int mode);
+ void (*save)(struct drm_encoder *encoder);
+ void (*restore)(struct drm_encoder *encoder);
+
+ bool (*mode_fixup)(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+ void (*prepare)(struct drm_encoder *encoder);
+ void (*commit)(struct drm_encoder *encoder);
+ void (*mode_set)(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+ struct drm_crtc *(*get_crtc)(struct drm_encoder *encoder);
+ /* detect for DAC style encoders */
+ enum drm_connector_status (*detect)(struct drm_encoder *encoder,
+ struct drm_connector *connector);
+ /* disable encoder when not in use - more explicit than dpms off */
+ void (*disable)(struct drm_encoder *encoder);
+};
+
+struct drm_connector_helper_funcs {
+ int (*get_modes)(struct drm_connector *connector);
+ int (*mode_valid)(struct drm_connector *connector,
+ struct drm_display_mode *mode);
+ struct drm_encoder *(*best_encoder)(struct drm_connector *connector);
+};
+
+extern int drm_helper_probe_single_connector_modes(struct drm_connector *connector, uint32_t maxX, uint32_t maxY);
+extern void drm_helper_disable_unused_functions(struct drm_device *dev);
+extern int drm_crtc_helper_set_config(struct drm_mode_set *set);
+extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ int x, int y,
+ struct drm_framebuffer *old_fb);
+extern bool drm_helper_crtc_in_use(struct drm_crtc *crtc);
+extern bool drm_helper_encoder_in_use(struct drm_encoder *encoder);
+
+extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode);
+
+extern int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
+ struct drm_mode_fb_cmd2 *mode_cmd);
+
+static inline void drm_crtc_helper_add(struct drm_crtc *crtc,
+ const struct drm_crtc_helper_funcs *funcs)
+{
+ crtc->helper_private = __DECONST(void *, funcs);
+}
+
+static inline void drm_encoder_helper_add(struct drm_encoder *encoder,
+ const struct drm_encoder_helper_funcs *funcs)
+{
+ encoder->helper_private = __DECONST(void *, funcs);
+}
+
+static inline void drm_connector_helper_add(struct drm_connector *connector,
+ const struct drm_connector_helper_funcs *funcs)
+{
+ connector->helper_private = __DECONST(void *, funcs);
+}
+
+extern int drm_helper_resume_force_mode(struct drm_device *dev);
+extern void drm_kms_helper_poll_init(struct drm_device *dev);
+extern void drm_kms_helper_poll_fini(struct drm_device *dev);
+extern void drm_helper_hpd_irq_event(struct drm_device *dev);
+
+extern void drm_kms_helper_poll_disable(struct drm_device *dev);
+extern void drm_kms_helper_poll_enable(struct drm_device *dev);
+
+extern bool drm_fetch_cmdline_mode_from_kenv(struct drm_connector *connector,
+ struct drm_cmdline_mode *cmdline_mode);
+#endif
diff --git a/sys/dev/drm2/drm_dma.c b/sys/dev/drm2/drm_dma.c
new file mode 100644
index 000000000000..c0a1c809bf96
--- /dev/null
+++ b/sys/dev/drm2/drm_dma.c
@@ -0,0 +1,139 @@
+/*-
+ * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_dma.c
+ * Support code for DMA buffer management.
+ *
+ * The implementation used to be significantly more complicated, but the
+ * complexity has been moved into the drivers as different buffer management
+ * schemes evolved.
+ */
+
+#include <dev/drm2/drmP.h>
+
+int drm_dma_setup(struct drm_device *dev)
+{
+
+ dev->dma = malloc(sizeof(*dev->dma), DRM_MEM_DRIVER, M_NOWAIT | M_ZERO);
+ if (dev->dma == NULL)
+ return ENOMEM;
+
+ DRM_SPININIT(&dev->dma_lock, "drmdma");
+
+ return 0;
+}
+
+void drm_dma_takedown(struct drm_device *dev)
+{
+ drm_device_dma_t *dma = dev->dma;
+ int i, j;
+
+ if (dma == NULL)
+ return;
+
+ /* Clear dma buffers */
+ for (i = 0; i <= DRM_MAX_ORDER; i++) {
+ if (dma->bufs[i].seg_count) {
+ DRM_DEBUG("order %d: buf_count = %d,"
+ " seg_count = %d\n", i, dma->bufs[i].buf_count,
+ dma->bufs[i].seg_count);
+ for (j = 0; j < dma->bufs[i].seg_count; j++) {
+ drm_pci_free(dev, dma->bufs[i].seglist[j]);
+ }
+ free(dma->bufs[i].seglist, DRM_MEM_SEGS);
+ }
+
+ if (dma->bufs[i].buf_count) {
+ for (j = 0; j < dma->bufs[i].buf_count; j++) {
+ free(dma->bufs[i].buflist[j].dev_private,
+ DRM_MEM_BUFS);
+ }
+ free(dma->bufs[i].buflist, DRM_MEM_BUFS);
+ }
+ }
+
+ free(dma->buflist, DRM_MEM_BUFS);
+ free(dma->pagelist, DRM_MEM_PAGES);
+ free(dev->dma, DRM_MEM_DRIVER);
+ dev->dma = NULL;
+ DRM_SPINUNINIT(&dev->dma_lock);
+}
+
+
+void drm_free_buffer(struct drm_device *dev, drm_buf_t *buf)
+{
+ if (!buf)
+ return;
+
+ buf->pending = 0;
+ buf->file_priv= NULL;
+ buf->used = 0;
+}
+
+void drm_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv)
+{
+ drm_device_dma_t *dma = dev->dma;
+ int i;
+
+ if (!dma)
+ return;
+
+ for (i = 0; i < dma->buf_count; i++) {
+ if (dma->buflist[i]->file_priv == file_priv) {
+ switch (dma->buflist[i]->list) {
+ case DRM_LIST_NONE:
+ drm_free_buffer(dev, dma->buflist[i]);
+ break;
+ case DRM_LIST_WAIT:
+ dma->buflist[i]->list = DRM_LIST_RECLAIM;
+ break;
+ default:
+ /* Buffer already on hardware. */
+ break;
+ }
+ }
+ }
+}
+
+/* Call into the driver-specific DMA handler */
+int drm_dma(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+
+ if (dev->driver->dma_ioctl) {
+ /* shared code returns -errno */
+ return -dev->driver->dma_ioctl(dev, data, file_priv);
+ } else {
+ DRM_DEBUG("DMA ioctl on driver with no dma handler\n");
+ return EINVAL;
+ }
+}
diff --git a/sys/dev/drm2/drm_dp_helper.h b/sys/dev/drm2/drm_dp_helper.h
new file mode 100644
index 000000000000..4eea73beec85
--- /dev/null
+++ b/sys/dev/drm2/drm_dp_helper.h
@@ -0,0 +1,250 @@
+/*
+ * Copyright © 2008 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _DRM_DP_HELPER_H_
+#define _DRM_DP_HELPER_H_
+
+/* From the VESA DisplayPort spec */
+
+#define AUX_NATIVE_WRITE 0x8
+#define AUX_NATIVE_READ 0x9
+#define AUX_I2C_WRITE 0x0
+#define AUX_I2C_READ 0x1
+#define AUX_I2C_STATUS 0x2
+#define AUX_I2C_MOT 0x4
+
+#define AUX_NATIVE_REPLY_ACK (0x0 << 4)
+#define AUX_NATIVE_REPLY_NACK (0x1 << 4)
+#define AUX_NATIVE_REPLY_DEFER (0x2 << 4)
+#define AUX_NATIVE_REPLY_MASK (0x3 << 4)
+
+#define AUX_I2C_REPLY_ACK (0x0 << 6)
+#define AUX_I2C_REPLY_NACK (0x1 << 6)
+#define AUX_I2C_REPLY_DEFER (0x2 << 6)
+#define AUX_I2C_REPLY_MASK (0x3 << 6)
+
+/* AUX CH addresses */
+/* DPCD */
+#define DP_DPCD_REV 0x000
+
+#define DP_MAX_LINK_RATE 0x001
+
+#define DP_MAX_LANE_COUNT 0x002
+# define DP_MAX_LANE_COUNT_MASK 0x1f
+# define DP_TPS3_SUPPORTED (1 << 6)
+# define DP_ENHANCED_FRAME_CAP (1 << 7)
+
+#define DP_MAX_DOWNSPREAD 0x003
+# define DP_NO_AUX_HANDSHAKE_LINK_TRAINING (1 << 6)
+
+#define DP_NORP 0x004
+
+#define DP_DOWNSTREAMPORT_PRESENT 0x005
+# define DP_DWN_STRM_PORT_PRESENT (1 << 0)
+# define DP_DWN_STRM_PORT_TYPE_MASK 0x06
+/* 00b = DisplayPort */
+/* 01b = Analog */
+/* 10b = TMDS or HDMI */
+/* 11b = Other */
+# define DP_FORMAT_CONVERSION (1 << 3)
+
+#define DP_MAIN_LINK_CHANNEL_CODING 0x006
+
+#define DP_TRAINING_AUX_RD_INTERVAL 0x00e
+
+#define DP_PSR_SUPPORT 0x070
+# define DP_PSR_IS_SUPPORTED 1
+#define DP_PSR_CAPS 0x071
+# define DP_PSR_NO_TRAIN_ON_EXIT 1
+# define DP_PSR_SETUP_TIME_330 (0 << 1)
+# define DP_PSR_SETUP_TIME_275 (1 << 1)
+# define DP_PSR_SETUP_TIME_220 (2 << 1)
+# define DP_PSR_SETUP_TIME_165 (3 << 1)
+# define DP_PSR_SETUP_TIME_110 (4 << 1)
+# define DP_PSR_SETUP_TIME_55 (5 << 1)
+# define DP_PSR_SETUP_TIME_0 (6 << 1)
+# define DP_PSR_SETUP_TIME_MASK (7 << 1)
+# define DP_PSR_SETUP_TIME_SHIFT 1
+
+/* link configuration */
+#define DP_LINK_BW_SET 0x100
+# define DP_LINK_BW_1_62 0x06
+# define DP_LINK_BW_2_7 0x0a
+# define DP_LINK_BW_5_4 0x14
+
+#define DP_LANE_COUNT_SET 0x101
+# define DP_LANE_COUNT_MASK 0x0f
+# define DP_LANE_COUNT_ENHANCED_FRAME_EN (1 << 7)
+
+#define DP_TRAINING_PATTERN_SET 0x102
+# define DP_TRAINING_PATTERN_DISABLE 0
+# define DP_TRAINING_PATTERN_1 1
+# define DP_TRAINING_PATTERN_2 2
+# define DP_TRAINING_PATTERN_3 3
+# define DP_TRAINING_PATTERN_MASK 0x3
+
+# define DP_LINK_QUAL_PATTERN_DISABLE (0 << 2)
+# define DP_LINK_QUAL_PATTERN_D10_2 (1 << 2)
+# define DP_LINK_QUAL_PATTERN_ERROR_RATE (2 << 2)
+# define DP_LINK_QUAL_PATTERN_PRBS7 (3 << 2)
+# define DP_LINK_QUAL_PATTERN_MASK (3 << 2)
+
+# define DP_RECOVERED_CLOCK_OUT_EN (1 << 4)
+# define DP_LINK_SCRAMBLING_DISABLE (1 << 5)
+
+# define DP_SYMBOL_ERROR_COUNT_BOTH (0 << 6)
+# define DP_SYMBOL_ERROR_COUNT_DISPARITY (1 << 6)
+# define DP_SYMBOL_ERROR_COUNT_SYMBOL (2 << 6)
+# define DP_SYMBOL_ERROR_COUNT_MASK (3 << 6)
+
+#define DP_TRAINING_LANE0_SET 0x103
+#define DP_TRAINING_LANE1_SET 0x104
+#define DP_TRAINING_LANE2_SET 0x105
+#define DP_TRAINING_LANE3_SET 0x106
+
+# define DP_TRAIN_VOLTAGE_SWING_MASK 0x3
+# define DP_TRAIN_VOLTAGE_SWING_SHIFT 0
+# define DP_TRAIN_MAX_SWING_REACHED (1 << 2)
+# define DP_TRAIN_VOLTAGE_SWING_400 (0 << 0)
+# define DP_TRAIN_VOLTAGE_SWING_600 (1 << 0)
+# define DP_TRAIN_VOLTAGE_SWING_800 (2 << 0)
+# define DP_TRAIN_VOLTAGE_SWING_1200 (3 << 0)
+
+# define DP_TRAIN_PRE_EMPHASIS_MASK (3 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_0 (0 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_3_5 (1 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_6 (2 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_9_5 (3 << 3)
+
+# define DP_TRAIN_PRE_EMPHASIS_SHIFT 3
+# define DP_TRAIN_MAX_PRE_EMPHASIS_REACHED (1 << 5)
+
+#define DP_DOWNSPREAD_CTRL 0x107
+# define DP_SPREAD_AMP_0_5 (1 << 4)
+
+#define DP_MAIN_LINK_CHANNEL_CODING_SET 0x108
+# define DP_SET_ANSI_8B10B (1 << 0)
+
+#define DP_PSR_EN_CFG 0x170
+# define DP_PSR_ENABLE (1 << 0)
+# define DP_PSR_MAIN_LINK_ACTIVE (1 << 1)
+# define DP_PSR_CRC_VERIFICATION (1 << 2)
+# define DP_PSR_FRAME_CAPTURE (1 << 3)
+
+#define DP_DEVICE_SERVICE_IRQ_VECTOR 0x201
+# define DP_REMOTE_CONTROL_COMMAND_PENDING (1 << 0)
+# define DP_AUTOMATED_TEST_REQUEST (1 << 1)
+# define DP_CP_IRQ (1 << 2)
+# define DP_SINK_SPECIFIC_IRQ (1 << 6)
+
+#define DP_LANE0_1_STATUS 0x202
+#define DP_LANE2_3_STATUS 0x203
+# define DP_LANE_CR_DONE (1 << 0)
+# define DP_LANE_CHANNEL_EQ_DONE (1 << 1)
+# define DP_LANE_SYMBOL_LOCKED (1 << 2)
+
+#define DP_CHANNEL_EQ_BITS (DP_LANE_CR_DONE | \
+ DP_LANE_CHANNEL_EQ_DONE | \
+ DP_LANE_SYMBOL_LOCKED)
+
+#define DP_LANE_ALIGN_STATUS_UPDATED 0x204
+
+#define DP_INTERLANE_ALIGN_DONE (1 << 0)
+#define DP_DOWNSTREAM_PORT_STATUS_CHANGED (1 << 6)
+#define DP_LINK_STATUS_UPDATED (1 << 7)
+
+#define DP_SINK_STATUS 0x205
+
+#define DP_RECEIVE_PORT_0_STATUS (1 << 0)
+#define DP_RECEIVE_PORT_1_STATUS (1 << 1)
+
+#define DP_ADJUST_REQUEST_LANE0_1 0x206
+#define DP_ADJUST_REQUEST_LANE2_3 0x207
+# define DP_ADJUST_VOLTAGE_SWING_LANE0_MASK 0x03
+# define DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT 0
+# define DP_ADJUST_PRE_EMPHASIS_LANE0_MASK 0x0c
+# define DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT 2
+# define DP_ADJUST_VOLTAGE_SWING_LANE1_MASK 0x30
+# define DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT 4
+# define DP_ADJUST_PRE_EMPHASIS_LANE1_MASK 0xc0
+# define DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT 6
+
+#define DP_TEST_REQUEST 0x218
+# define DP_TEST_LINK_TRAINING (1 << 0)
+# define DP_TEST_LINK_PATTERN (1 << 1)
+# define DP_TEST_LINK_EDID_READ (1 << 2)
+# define DP_TEST_LINK_PHY_TEST_PATTERN (1 << 3) /* DPCD >= 1.1 */
+
+#define DP_TEST_LINK_RATE 0x219
+# define DP_LINK_RATE_162 (0x6)
+# define DP_LINK_RATE_27 (0xa)
+
+#define DP_TEST_LANE_COUNT 0x220
+
+#define DP_TEST_PATTERN 0x221
+
+#define DP_TEST_RESPONSE 0x260
+# define DP_TEST_ACK (1 << 0)
+# define DP_TEST_NAK (1 << 1)
+# define DP_TEST_EDID_CHECKSUM_WRITE (1 << 2)
+
+#define DP_SET_POWER 0x600
+# define DP_SET_POWER_D0 0x1
+# define DP_SET_POWER_D3 0x2
+
+#define DP_PSR_ERROR_STATUS 0x2006
+# define DP_PSR_LINK_CRC_ERROR (1 << 0)
+# define DP_PSR_RFB_STORAGE_ERROR (1 << 1)
+
+#define DP_PSR_ESI 0x2007
+# define DP_PSR_CAPS_CHANGE (1 << 0)
+
+#define DP_PSR_STATUS 0x2008
+# define DP_PSR_SINK_INACTIVE 0
+# define DP_PSR_SINK_ACTIVE_SRC_SYNCED 1
+# define DP_PSR_SINK_ACTIVE_RFB 2
+# define DP_PSR_SINK_ACTIVE_SINK_SYNCED 3
+# define DP_PSR_SINK_ACTIVE_RESYNC 4
+# define DP_PSR_SINK_INTERNAL_ERROR 7
+# define DP_PSR_SINK_STATE_MASK 0x07
+
+#define MODE_I2C_START 1
+#define MODE_I2C_WRITE 2
+#define MODE_I2C_READ 4
+#define MODE_I2C_STOP 8
+
+struct iic_dp_aux_data {
+ bool running;
+ u16 address;
+ void *priv;
+ int (*aux_ch)(device_t adapter, int mode, uint8_t write_byte,
+ uint8_t *read_byte);
+ device_t port;
+};
+
+int iic_dp_aux_add_bus(device_t dev, const char *name,
+ int (*ch)(device_t idev, int mode, uint8_t write_byte, uint8_t *read_byte),
+ void *priv, device_t *bus, device_t *adapter);
+
+#endif /* _DRM_DP_HELPER_H_ */
diff --git a/sys/dev/drm2/drm_dp_iic_helper.c b/sys/dev/drm2/drm_dp_iic_helper.c
new file mode 100644
index 000000000000..6d54170e7226
--- /dev/null
+++ b/sys/dev/drm2/drm_dp_iic_helper.c
@@ -0,0 +1,292 @@
+/*
+ * Copyright © 2009 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/types.h>
+#include <sys/kobj.h>
+#include <sys/bus.h>
+#include <dev/iicbus/iic.h>
+#include "iicbus_if.h"
+#include <dev/iicbus/iiconf.h>
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_dp_helper.h>
+
+static int
+iic_dp_aux_transaction(device_t idev, int mode, uint8_t write_byte,
+ uint8_t *read_byte)
+{
+ struct iic_dp_aux_data *aux_data;
+ int ret;
+
+ aux_data = device_get_softc(idev);
+ ret = (*aux_data->aux_ch)(idev, mode, write_byte, read_byte);
+ return (ret);
+}
+
+/*
+ * I2C over AUX CH
+ */
+
+/*
+ * Send the address. If the I2C link is running, this 'restarts'
+ * the connection with the new address, this is used for doing
+ * a write followed by a read (as needed for DDC)
+ */
+static int
+iic_dp_aux_address(device_t idev, u16 address, bool reading)
+{
+ struct iic_dp_aux_data *aux_data;
+ int mode, ret;
+
+ aux_data = device_get_softc(idev);
+ mode = MODE_I2C_START;
+ if (reading)
+ mode |= MODE_I2C_READ;
+ else
+ mode |= MODE_I2C_WRITE;
+ aux_data->address = address;
+ aux_data->running = true;
+ ret = iic_dp_aux_transaction(idev, mode, 0, NULL);
+ return (ret);
+}
+
+/*
+ * Stop the I2C transaction. This closes out the link, sending
+ * a bare address packet with the MOT bit turned off
+ */
+static void
+iic_dp_aux_stop(device_t idev, bool reading)
+{
+ struct iic_dp_aux_data *aux_data;
+ int mode;
+
+ aux_data = device_get_softc(idev);
+ mode = MODE_I2C_STOP;
+ if (reading)
+ mode |= MODE_I2C_READ;
+ else
+ mode |= MODE_I2C_WRITE;
+ if (aux_data->running) {
+ (void)iic_dp_aux_transaction(idev, mode, 0, NULL);
+ aux_data->running = false;
+ }
+}
+
+/*
+ * Write a single byte to the current I2C address, the
+ * the I2C link must be running or this returns -EIO
+ */
+static int
+iic_dp_aux_put_byte(device_t idev, u8 byte)
+{
+ struct iic_dp_aux_data *aux_data;
+ int ret;
+
+ aux_data = device_get_softc(idev);
+
+ if (!aux_data->running)
+ return (EIO);
+
+ ret = iic_dp_aux_transaction(idev, MODE_I2C_WRITE, byte, NULL);
+ return (ret);
+}
+
+/*
+ * Read a single byte from the current I2C address, the
+ * I2C link must be running or this returns -EIO
+ */
+static int
+iic_dp_aux_get_byte(device_t idev, u8 *byte_ret)
+{
+ struct iic_dp_aux_data *aux_data;
+ int ret;
+
+ aux_data = device_get_softc(idev);
+
+ if (!aux_data->running)
+ return (EIO);
+
+ ret = iic_dp_aux_transaction(idev, MODE_I2C_READ, 0, byte_ret);
+ return (ret);
+}
+
+static int
+iic_dp_aux_xfer(device_t idev, struct iic_msg *msgs, uint32_t num)
+{
+ u8 *buf;
+ int b, m, ret;
+ u16 len;
+ bool reading;
+
+ ret = 0;
+ reading = false;
+
+ for (m = 0; m < num; m++) {
+ len = msgs[m].len;
+ buf = msgs[m].buf;
+ reading = (msgs[m].flags & IIC_M_RD) != 0;
+ ret = iic_dp_aux_address(idev, msgs[m].slave, reading);
+ if (ret != 0)
+ break;
+ if (reading) {
+ for (b = 0; b < len; b++) {
+ ret = iic_dp_aux_get_byte(idev, &buf[b]);
+ if (ret != 0)
+ break;
+ }
+ } else {
+ for (b = 0; b < len; b++) {
+ ret = iic_dp_aux_put_byte(idev, buf[b]);
+ if (ret != 0)
+ break;
+ }
+ }
+ if (ret != 0)
+ break;
+ }
+ iic_dp_aux_stop(idev, reading);
+ DRM_DEBUG_KMS("dp_aux_xfer return %d\n", ret);
+ return (ret);
+}
+
+static void
+iic_dp_aux_reset_bus(device_t idev)
+{
+
+ (void)iic_dp_aux_address(idev, 0, false);
+ (void)iic_dp_aux_stop(idev, false);
+}
+
+static int
+iic_dp_aux_reset(device_t idev, u_char speed, u_char addr, u_char *oldaddr)
+{
+
+ iic_dp_aux_reset_bus(idev);
+ return (0);
+}
+
+static int
+iic_dp_aux_prepare_bus(device_t idev)
+{
+
+ /* adapter->retries = 3; */
+ iic_dp_aux_reset_bus(idev);
+ return (0);
+}
+
+static int
+iic_dp_aux_probe(device_t idev)
+{
+
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+iic_dp_aux_attach(device_t idev)
+{
+ struct iic_dp_aux_data *aux_data;
+
+ aux_data = device_get_softc(idev);
+ aux_data->port = device_add_child(idev, "iicbus", -1);
+ if (aux_data->port == NULL)
+ return (ENXIO);
+ device_quiet(aux_data->port);
+ bus_generic_attach(idev);
+ return (0);
+}
+
+static int
+iic_dp_aux_detach(device_t idev)
+{
+ struct iic_dp_aux_data *aux_data;
+ device_t port;
+
+ aux_data = device_get_softc(idev);
+
+ port = aux_data->port;
+ bus_generic_detach(idev);
+ if (port != NULL)
+ device_delete_child(idev, port);
+
+ return (0);
+}
+
+int
+iic_dp_aux_add_bus(device_t dev, const char *name,
+ int (*ch)(device_t idev, int mode, uint8_t write_byte, uint8_t *read_byte),
+ void *priv, device_t *bus, device_t *adapter)
+{
+ device_t ibus;
+ struct iic_dp_aux_data *data;
+ int idx, error;
+ static int dp_bus_counter;
+
+ mtx_lock(&Giant);
+
+ idx = atomic_fetchadd_int(&dp_bus_counter, 1);
+ ibus = device_add_child(dev, "drm_iic_dp_aux", idx);
+ if (ibus == NULL) {
+ mtx_unlock(&Giant);
+ DRM_ERROR("drm_iic_dp_aux bus %d creation error\n", idx);
+ return (-ENXIO);
+ }
+ device_quiet(ibus);
+ error = device_probe_and_attach(ibus);
+ if (error != 0) {
+ device_delete_child(dev, ibus);
+ mtx_unlock(&Giant);
+ DRM_ERROR("drm_iic_dp_aux bus %d attach failed, %d\n",
+ idx, error);
+ return (-error);
+ }
+ data = device_get_softc(ibus);
+ data->running = false;
+ data->address = 0;
+ data->aux_ch = ch;
+ data->priv = priv;
+ error = iic_dp_aux_prepare_bus(ibus);
+ if (error == 0) {
+ *bus = ibus;
+ *adapter = data->port;
+ }
+ mtx_unlock(&Giant);
+ return (error);
+}
+
+static device_method_t drm_iic_dp_aux_methods[] = {
+ DEVMETHOD(device_probe, iic_dp_aux_probe),
+ DEVMETHOD(device_attach, iic_dp_aux_attach),
+ DEVMETHOD(device_detach, iic_dp_aux_detach),
+ DEVMETHOD(iicbus_reset, iic_dp_aux_reset),
+ DEVMETHOD(iicbus_transfer, iic_dp_aux_xfer),
+ DEVMETHOD_END
+};
+static driver_t drm_iic_dp_aux_driver = {
+ "drm_iic_dp_aux",
+ drm_iic_dp_aux_methods,
+ sizeof(struct iic_dp_aux_data)
+};
+static devclass_t drm_iic_dp_aux_devclass;
+DRIVER_MODULE_ORDERED(drm_iic_dp_aux, drmn, drm_iic_dp_aux_driver,
+ drm_iic_dp_aux_devclass, 0, 0, SI_ORDER_SECOND);
diff --git a/sys/dev/drm2/drm_drawable.c b/sys/dev/drm2/drm_drawable.c
new file mode 100644
index 000000000000..e8c4e02eaf4b
--- /dev/null
+++ b/sys/dev/drm2/drm_drawable.c
@@ -0,0 +1,173 @@
+/*-
+ * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_drawable.c
+ * This file implements ioctls to store information along with DRM drawables,
+ * such as the current set of cliprects for vblank-synced buffer swaps.
+ */
+
+#include <dev/drm2/drmP.h>
+
+struct bsd_drm_drawable_info {
+ struct drm_drawable_info info;
+ int handle;
+ RB_ENTRY(bsd_drm_drawable_info) tree;
+};
+
+static int
+drm_drawable_compare(struct bsd_drm_drawable_info *a,
+ struct bsd_drm_drawable_info *b)
+{
+ if (a->handle > b->handle)
+ return 1;
+ if (a->handle < b->handle)
+ return -1;
+ return 0;
+}
+
+RB_GENERATE_STATIC(drawable_tree, bsd_drm_drawable_info, tree,
+ drm_drawable_compare);
+
+struct drm_drawable_info *
+drm_get_drawable_info(struct drm_device *dev, int handle)
+{
+ struct bsd_drm_drawable_info find, *result;
+
+ find.handle = handle;
+ result = RB_FIND(drawable_tree, &dev->drw_head, &find);
+
+ return &result->info;
+}
+
+int drm_adddraw(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_draw *draw = data;
+ struct bsd_drm_drawable_info *info;
+
+ info = malloc(sizeof(struct bsd_drm_drawable_info), DRM_MEM_DRAWABLE,
+ M_NOWAIT | M_ZERO);
+ if (info == NULL)
+ return ENOMEM;
+
+ info->handle = alloc_unr(dev->drw_unrhdr);
+ DRM_SPINLOCK(&dev->drw_lock);
+ RB_INSERT(drawable_tree, &dev->drw_head, info);
+ draw->handle = info->handle;
+ DRM_SPINUNLOCK(&dev->drw_lock);
+
+ DRM_DEBUG("%d\n", draw->handle);
+
+ return 0;
+}
+
+int drm_rmdraw(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_draw *draw = (struct drm_draw *)data;
+ struct drm_drawable_info *info;
+
+ DRM_SPINLOCK(&dev->drw_lock);
+ info = drm_get_drawable_info(dev, draw->handle);
+ if (info != NULL) {
+ RB_REMOVE(drawable_tree, &dev->drw_head,
+ (struct bsd_drm_drawable_info *)info);
+ DRM_SPINUNLOCK(&dev->drw_lock);
+ free_unr(dev->drw_unrhdr, draw->handle);
+ free(info->rects, DRM_MEM_DRAWABLE);
+ free(info, DRM_MEM_DRAWABLE);
+ return 0;
+ } else {
+ DRM_SPINUNLOCK(&dev->drw_lock);
+ return EINVAL;
+ }
+}
+
+int drm_update_draw(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_drawable_info *info;
+ struct drm_update_draw *update = (struct drm_update_draw *)data;
+ int ret;
+
+ info = drm_get_drawable_info(dev, update->handle);
+ if (info == NULL)
+ return EINVAL;
+
+ switch (update->type) {
+ case DRM_DRAWABLE_CLIPRECTS:
+ DRM_SPINLOCK(&dev->drw_lock);
+ if (update->num != info->num_rects) {
+ free(info->rects, DRM_MEM_DRAWABLE);
+ info->rects = NULL;
+ info->num_rects = 0;
+ }
+ if (update->num == 0) {
+ DRM_SPINUNLOCK(&dev->drw_lock);
+ return 0;
+ }
+ if (info->rects == NULL) {
+ info->rects = malloc(sizeof(*info->rects) *
+ update->num, DRM_MEM_DRAWABLE, M_NOWAIT);
+ if (info->rects == NULL) {
+ DRM_SPINUNLOCK(&dev->drw_lock);
+ return ENOMEM;
+ }
+ info->num_rects = update->num;
+ }
+ /* For some reason the pointer arg is unsigned long long. */
+ ret = copyin((void *)(intptr_t)update->data, info->rects,
+ sizeof(*info->rects) * info->num_rects);
+ DRM_SPINUNLOCK(&dev->drw_lock);
+ return ret;
+ default:
+ return EINVAL;
+ }
+}
+
+void drm_drawable_free_all(struct drm_device *dev)
+{
+ struct bsd_drm_drawable_info *info, *next;
+
+ DRM_SPINLOCK(&dev->drw_lock);
+ for (info = RB_MIN(drawable_tree, &dev->drw_head);
+ info != NULL ; info = next) {
+ next = RB_NEXT(drawable_tree, &dev->drw_head, info);
+ RB_REMOVE(drawable_tree, &dev->drw_head,
+ (struct bsd_drm_drawable_info *)info);
+ DRM_SPINUNLOCK(&dev->drw_lock);
+ free_unr(dev->drw_unrhdr, info->handle);
+ free(info->info.rects, DRM_MEM_DRAWABLE);
+ free(info, DRM_MEM_DRAWABLE);
+ DRM_SPINLOCK(&dev->drw_lock);
+ }
+ DRM_SPINUNLOCK(&dev->drw_lock);
+}
diff --git a/sys/dev/drm2/drm_drv.c b/sys/dev/drm2/drm_drv.c
new file mode 100644
index 000000000000..42ff1944bcd6
--- /dev/null
+++ b/sys/dev/drm2/drm_drv.c
@@ -0,0 +1,980 @@
+/*-
+ * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_drv.c
+ * The catch-all file for DRM device support, including module setup/teardown,
+ * open/close, and ioctl dispatch.
+ */
+
+
+#include <sys/limits.h>
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_sarea.h>
+#include <dev/drm2/drm_mode.h>
+
+#ifdef DRM_DEBUG_DEFAULT_ON
+int drm_debug_flag = 1;
+#else
+int drm_debug_flag = 2;
+#endif
+int drm_notyet_flag = 0;
+
+unsigned int drm_vblank_offdelay = 5000; /* Default to 5000 msecs. */
+unsigned int drm_timestamp_precision = 20; /* Default to 20 usecs. */
+
+static int drm_load(struct drm_device *dev);
+static void drm_unload(struct drm_device *dev);
+static drm_pci_id_list_t *drm_find_description(int vendor, int device,
+ drm_pci_id_list_t *idlist);
+
+static int
+drm_modevent(module_t mod, int type, void *data)
+{
+
+ switch (type) {
+ case MOD_LOAD:
+ TUNABLE_INT_FETCH("drm.debug", &drm_debug_flag);
+ TUNABLE_INT_FETCH("drm.notyet", &drm_notyet_flag);
+ break;
+ }
+ return (0);
+}
+
+static moduledata_t drm_mod = {
+ "drmn",
+ drm_modevent,
+ 0
+};
+DECLARE_MODULE(drmn, drm_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST);
+MODULE_VERSION(drmn, 1);
+MODULE_DEPEND(drmn, agp, 1, 1, 1);
+MODULE_DEPEND(drmn, pci, 1, 1, 1);
+MODULE_DEPEND(drmn, mem, 1, 1, 1);
+MODULE_DEPEND(drmn, iicbus, 1, 1, 1);
+
+static drm_ioctl_desc_t drm_ioctls[256] = {
+ DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, 0),
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, 0),
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, 0),
+ DRM_IOCTL_DEF(DRM_IOCTL_IRQ_BUSID, drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_MAP, drm_getmap, 0),
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, 0),
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, 0),
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_CAP, drm_getcap, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_SET_VERSION, drm_setversion, DRM_MASTER|DRM_ROOT_ONLY),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_SET_UNIQUE, drm_setunique, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_BLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_UNBLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_AUTH_MAGIC, drm_authmagic, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_ADD_MAP, drm_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_RM_MAP, drm_rmmap_ioctl, DRM_AUTH),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_SET_SAREA_CTX, drm_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_SAREA_CTX, drm_getsareactx, DRM_AUTH),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_SET_MASTER, drm_setmaster_ioctl, DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_DROP_MASTER, drm_dropmaster_ioctl, DRM_ROOT_ONLY),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_ADD_CTX, drm_addctx, DRM_AUTH|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_RM_CTX, drm_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_MOD_CTX, drm_modctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_CTX, drm_getctx, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_IOCTL_SWITCH_CTX, drm_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_NEW_CTX, drm_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_RES_CTX, drm_resctx, DRM_AUTH),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_ADD_DRAW, drm_adddraw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_RM_DRAW, drm_rmdraw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_LOCK, drm_lock, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_IOCTL_UNLOCK, drm_unlock, DRM_AUTH),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_FINISH, drm_noop, DRM_AUTH),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_ADD_BUFS, drm_addbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_MARK_BUFS, drm_markbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_INFO_BUFS, drm_infobufs, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_IOCTL_MAP_BUFS, drm_mapbufs, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_IOCTL_FREE_BUFS, drm_freebufs, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_IOCTL_DMA, drm_dma, DRM_AUTH),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_CONTROL, drm_control, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_AGP_ACQUIRE, drm_agp_acquire_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_AGP_RELEASE, drm_agp_release_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_AGP_ENABLE, drm_agp_enable_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_AGP_INFO, drm_agp_info_ioctl, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_IOCTL_AGP_ALLOC, drm_agp_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_AGP_FREE, drm_agp_free_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_AGP_BIND, drm_agp_bind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_AGP_UNBIND, drm_agp_unbind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_SG_ALLOC, drm_sg_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_SG_FREE, drm_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK, drm_wait_vblank, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODESET_CTL, drm_modeset_ctl, 0),
+ DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW, drm_update_draw, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH|DRM_UNLOCKED),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANERESOURCES, drm_mode_getplane_res, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCRTC, drm_mode_getcrtc, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETCRTC, drm_mode_setcrtc, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANE, drm_mode_getplane, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPLANE, drm_mode_setplane, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR, drm_mode_cursor_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETGAMMA, drm_mode_gamma_get_ioctl, DRM_MASTER|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETGAMMA, drm_mode_gamma_set_ioctl, DRM_MASTER|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETENCODER, drm_mode_getencoder, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCONNECTOR, drm_mode_getconnector, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATTACHMODE, drm_mode_attachmode_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_DETACHMODE, drm_mode_detachmode_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPERTY, drm_mode_getproperty_ioctl, DRM_MASTER | DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPROPERTY, drm_mode_connector_property_set_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPBLOB, drm_mode_getblob_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB2, drm_mode_addfb2, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+};
+
+static struct cdevsw drm_cdevsw = {
+ .d_version = D_VERSION,
+ .d_open = drm_open,
+ .d_read = drm_read,
+ .d_ioctl = drm_ioctl,
+ .d_poll = drm_poll,
+ .d_mmap = drm_mmap,
+ .d_mmap_single = drm_gem_mmap_single,
+ .d_name = "drm",
+ .d_flags = D_TRACKCLOSE
+};
+
+static int drm_msi = 1; /* Enable by default. */
+TUNABLE_INT("hw.drm.msi", &drm_msi);
+SYSCTL_NODE(_hw, OID_AUTO, drm, CTLFLAG_RW, NULL, "DRM device");
+SYSCTL_INT(_hw_drm, OID_AUTO, msi, CTLFLAG_RDTUN, &drm_msi, 1,
+ "Enable MSI interrupts for drm devices");
+
+static struct drm_msi_blacklist_entry drm_msi_blacklist[] = {
+ {0x8086, 0x2772}, /* Intel i945G */ \
+ {0x8086, 0x27A2}, /* Intel i945GM */ \
+ {0x8086, 0x27AE}, /* Intel i945GME */ \
+ {0, 0}
+};
+
+static int drm_msi_is_blacklisted(int vendor, int device)
+{
+ int i = 0;
+
+ for (i = 0; drm_msi_blacklist[i].vendor != 0; i++) {
+ if ((drm_msi_blacklist[i].vendor == vendor) &&
+ (drm_msi_blacklist[i].device == device)) {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+int drm_probe(device_t kdev, drm_pci_id_list_t *idlist)
+{
+ drm_pci_id_list_t *id_entry;
+ int vendor, device;
+
+ vendor = pci_get_vendor(kdev);
+ device = pci_get_device(kdev);
+
+ if (pci_get_class(kdev) != PCIC_DISPLAY
+ || pci_get_subclass(kdev) != PCIS_DISPLAY_VGA)
+ return ENXIO;
+
+ id_entry = drm_find_description(vendor, device, idlist);
+ if (id_entry != NULL) {
+ if (!device_get_desc(kdev)) {
+ DRM_DEBUG("desc : %s\n", device_get_desc(kdev));
+ device_set_desc(kdev, id_entry->name);
+ }
+ return 0;
+ }
+
+ return ENXIO;
+}
+
+int drm_attach(device_t kdev, drm_pci_id_list_t *idlist)
+{
+ struct drm_device *dev;
+ drm_pci_id_list_t *id_entry;
+ int error, msicount;
+
+ dev = device_get_softc(kdev);
+
+ dev->device = kdev;
+
+ dev->pci_domain = pci_get_domain(dev->device);
+ dev->pci_bus = pci_get_bus(dev->device);
+ dev->pci_slot = pci_get_slot(dev->device);
+ dev->pci_func = pci_get_function(dev->device);
+
+ dev->pci_vendor = pci_get_vendor(dev->device);
+ dev->pci_device = pci_get_device(dev->device);
+
+ if (drm_core_check_feature(dev, DRIVER_HAVE_IRQ)) {
+ if (drm_msi &&
+ !drm_msi_is_blacklisted(dev->pci_vendor, dev->pci_device)) {
+ msicount = pci_msi_count(dev->device);
+ DRM_DEBUG("MSI count = %d\n", msicount);
+ if (msicount > 1)
+ msicount = 1;
+
+ if (pci_alloc_msi(dev->device, &msicount) == 0) {
+ DRM_INFO("MSI enabled %d message(s)\n",
+ msicount);
+ dev->msi_enabled = 1;
+ dev->irqrid = 1;
+ }
+ }
+
+ dev->irqr = bus_alloc_resource_any(dev->device, SYS_RES_IRQ,
+ &dev->irqrid, RF_SHAREABLE);
+ if (!dev->irqr) {
+ return (ENOENT);
+ }
+
+ dev->irq = (int) rman_get_start(dev->irqr);
+ }
+
+ mtx_init(&dev->dev_lock, "drmdev", NULL, MTX_DEF);
+ mtx_init(&dev->irq_lock, "drmirq", NULL, MTX_DEF);
+ mtx_init(&dev->vbl_lock, "drmvbl", NULL, MTX_DEF);
+ mtx_init(&dev->drw_lock, "drmdrw", NULL, MTX_DEF);
+ mtx_init(&dev->event_lock, "drmev", NULL, MTX_DEF);
+ sx_init(&dev->dev_struct_lock, "drmslk");
+
+ id_entry = drm_find_description(dev->pci_vendor,
+ dev->pci_device, idlist);
+ dev->id_entry = id_entry;
+
+ error = drm_load(dev);
+ if (error == 0)
+ error = drm_create_cdevs(kdev);
+ return (error);
+}
+
+int
+drm_create_cdevs(device_t kdev)
+{
+ struct drm_device *dev;
+ int error, unit;
+
+ unit = device_get_unit(kdev);
+ dev = device_get_softc(kdev);
+
+ error = make_dev_p(MAKEDEV_WAITOK | MAKEDEV_CHECKNAME, &dev->devnode,
+ &drm_cdevsw, 0, DRM_DEV_UID, DRM_DEV_GID,
+ DRM_DEV_MODE, "dri/card%d", unit);
+ if (error == 0)
+ dev->devnode->si_drv1 = dev;
+ return (error);
+}
+
+int drm_detach(device_t kdev)
+{
+ struct drm_device *dev;
+
+ dev = device_get_softc(kdev);
+ drm_unload(dev);
+ if (dev->irqr) {
+ bus_release_resource(dev->device, SYS_RES_IRQ, dev->irqrid,
+ dev->irqr);
+ if (dev->msi_enabled) {
+ pci_release_msi(dev->device);
+ DRM_INFO("MSI released\n");
+ }
+ }
+ return (0);
+}
+
+#ifndef DRM_DEV_NAME
+#define DRM_DEV_NAME "drm"
+#endif
+
+devclass_t drm_devclass;
+
+drm_pci_id_list_t *drm_find_description(int vendor, int device,
+ drm_pci_id_list_t *idlist)
+{
+ int i = 0;
+
+ for (i = 0; idlist[i].vendor != 0; i++) {
+ if ((idlist[i].vendor == vendor) &&
+ ((idlist[i].device == device) ||
+ (idlist[i].device == 0))) {
+ return &idlist[i];
+ }
+ }
+ return NULL;
+}
+
+static int drm_firstopen(struct drm_device *dev)
+{
+ drm_local_map_t *map;
+ int i;
+
+ DRM_LOCK_ASSERT(dev);
+
+ /* prebuild the SAREA */
+ i = drm_addmap(dev, 0, SAREA_MAX, _DRM_SHM,
+ _DRM_CONTAINS_LOCK, &map);
+ if (i != 0)
+ return i;
+
+ if (dev->driver->firstopen)
+ dev->driver->firstopen(dev);
+
+ dev->buf_use = 0;
+
+ if (drm_core_check_feature(dev, DRIVER_HAVE_DMA)) {
+ i = drm_dma_setup(dev);
+ if (i != 0)
+ return i;
+ }
+
+ for (i = 0; i < DRM_HASH_SIZE; i++) {
+ dev->magiclist[i].head = NULL;
+ dev->magiclist[i].tail = NULL;
+ }
+
+ dev->lock.lock_queue = 0;
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ dev->irq_enabled = 0;
+ dev->context_flag = 0;
+ dev->last_context = 0;
+ dev->if_version = 0;
+
+ dev->buf_sigio = NULL;
+
+ DRM_DEBUG("\n");
+
+ return 0;
+}
+
+static int drm_lastclose(struct drm_device *dev)
+{
+ drm_magic_entry_t *pt, *next;
+ drm_local_map_t *map, *mapsave;
+ int i;
+
+ DRM_LOCK_ASSERT(dev);
+
+ DRM_DEBUG("\n");
+
+ if (dev->driver->lastclose != NULL)
+ dev->driver->lastclose(dev);
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET) && dev->irq_enabled)
+ drm_irq_uninstall(dev);
+
+ if (dev->unique) {
+ free(dev->unique, DRM_MEM_DRIVER);
+ dev->unique = NULL;
+ dev->unique_len = 0;
+ }
+ /* Clear pid list */
+ for (i = 0; i < DRM_HASH_SIZE; i++) {
+ for (pt = dev->magiclist[i].head; pt; pt = next) {
+ next = pt->next;
+ free(pt, DRM_MEM_MAGIC);
+ }
+ dev->magiclist[i].head = dev->magiclist[i].tail = NULL;
+ }
+
+ DRM_UNLOCK(dev);
+ drm_drawable_free_all(dev);
+ DRM_LOCK(dev);
+
+ /* Clear AGP information */
+ if (dev->agp) {
+ drm_agp_mem_t *entry;
+ drm_agp_mem_t *nexte;
+
+ /* Remove AGP resources, but leave dev->agp intact until
+ * drm_unload is called.
+ */
+ for (entry = dev->agp->memory; entry; entry = nexte) {
+ nexte = entry->next;
+ if (entry->bound)
+ drm_agp_unbind_memory(entry->handle);
+ drm_agp_free_memory(entry->handle);
+ free(entry, DRM_MEM_AGPLISTS);
+ }
+ dev->agp->memory = NULL;
+
+ if (dev->agp->acquired)
+ drm_agp_release(dev);
+
+ dev->agp->acquired = 0;
+ dev->agp->enabled = 0;
+ }
+ if (dev->sg != NULL) {
+ drm_sg_cleanup(dev->sg);
+ dev->sg = NULL;
+ }
+
+ TAILQ_FOREACH_SAFE(map, &dev->maplist, link, mapsave) {
+ if (!(map->flags & _DRM_DRIVER))
+ drm_rmmap(dev, map);
+ }
+
+ drm_dma_takedown(dev);
+ if (dev->lock.hw_lock) {
+ dev->lock.hw_lock = NULL; /* SHM removed */
+ dev->lock.file_priv = NULL;
+ DRM_WAKEUP_INT((void *)&dev->lock.lock_queue);
+ }
+
+ return 0;
+}
+
+static int drm_load(struct drm_device *dev)
+{
+ int i, retcode;
+
+ DRM_DEBUG("\n");
+
+ TAILQ_INIT(&dev->maplist);
+ dev->map_unrhdr = new_unrhdr(1, ((1 << DRM_MAP_HANDLE_BITS) - 1), NULL);
+ if (dev->map_unrhdr == NULL) {
+ DRM_ERROR("Couldn't allocate map number allocator\n");
+ return EINVAL;
+ }
+
+
+ drm_mem_init();
+ drm_sysctl_init(dev);
+ TAILQ_INIT(&dev->files);
+
+ dev->counters = 6;
+ dev->types[0] = _DRM_STAT_LOCK;
+ dev->types[1] = _DRM_STAT_OPENS;
+ dev->types[2] = _DRM_STAT_CLOSES;
+ dev->types[3] = _DRM_STAT_IOCTLS;
+ dev->types[4] = _DRM_STAT_LOCKS;
+ dev->types[5] = _DRM_STAT_UNLOCKS;
+
+ for (i = 0; i < DRM_ARRAY_SIZE(dev->counts); i++)
+ atomic_set(&dev->counts[i], 0);
+
+ INIT_LIST_HEAD(&dev->vblank_event_list);
+
+ if (drm_core_has_AGP(dev)) {
+ if (drm_device_is_agp(dev))
+ dev->agp = drm_agp_init();
+ if (drm_core_check_feature(dev, DRIVER_REQUIRE_AGP) &&
+ dev->agp == NULL) {
+ DRM_ERROR("Card isn't AGP, or couldn't initialize "
+ "AGP.\n");
+ retcode = ENOMEM;
+ goto error;
+ }
+ if (dev->agp != NULL && dev->agp->info.ai_aperture_base != 0) {
+ if (drm_mtrr_add(dev->agp->info.ai_aperture_base,
+ dev->agp->info.ai_aperture_size, DRM_MTRR_WC) == 0)
+ dev->agp->mtrr = 1;
+ }
+ }
+
+ retcode = drm_ctxbitmap_init(dev);
+ if (retcode != 0) {
+ DRM_ERROR("Cannot allocate memory for context bitmap.\n");
+ goto error;
+ }
+
+ dev->drw_unrhdr = new_unrhdr(1, INT_MAX, NULL);
+ if (dev->drw_unrhdr == NULL) {
+ DRM_ERROR("Couldn't allocate drawable number allocator\n");
+ retcode = ENOMEM;
+ goto error;
+ }
+
+ if (dev->driver->driver_features & DRIVER_GEM) {
+ retcode = drm_gem_init(dev);
+ if (retcode != 0) {
+ DRM_ERROR("Cannot initialize graphics execution "
+ "manager (GEM)\n");
+ goto error1;
+ }
+ }
+
+ if (dev->driver->load != NULL) {
+ DRM_LOCK(dev);
+ /* Shared code returns -errno. */
+ retcode = -dev->driver->load(dev,
+ dev->id_entry->driver_private);
+ if (pci_enable_busmaster(dev->device))
+ DRM_ERROR("Request to enable bus-master failed.\n");
+ DRM_UNLOCK(dev);
+ if (retcode != 0)
+ goto error;
+ }
+
+ DRM_INFO("Initialized %s %d.%d.%d %s\n",
+ dev->driver->name,
+ dev->driver->major,
+ dev->driver->minor,
+ dev->driver->patchlevel,
+ dev->driver->date);
+
+ return 0;
+
+error1:
+ delete_unrhdr(dev->drw_unrhdr);
+error:
+ drm_sysctl_cleanup(dev);
+ DRM_LOCK(dev);
+ drm_lastclose(dev);
+ DRM_UNLOCK(dev);
+ if (dev->devnode != NULL)
+ destroy_dev(dev->devnode);
+
+ mtx_destroy(&dev->drw_lock);
+ mtx_destroy(&dev->vbl_lock);
+ mtx_destroy(&dev->irq_lock);
+ mtx_destroy(&dev->dev_lock);
+ mtx_destroy(&dev->event_lock);
+ sx_destroy(&dev->dev_struct_lock);
+
+ return retcode;
+}
+
+static void drm_unload(struct drm_device *dev)
+{
+ int i;
+
+ DRM_DEBUG("\n");
+
+ drm_sysctl_cleanup(dev);
+ if (dev->devnode != NULL)
+ destroy_dev(dev->devnode);
+
+ drm_ctxbitmap_cleanup(dev);
+
+ if (dev->driver->driver_features & DRIVER_GEM)
+ drm_gem_destroy(dev);
+
+ if (dev->agp && dev->agp->mtrr) {
+ int __unused retcode;
+
+ retcode = drm_mtrr_del(0, dev->agp->info.ai_aperture_base,
+ dev->agp->info.ai_aperture_size, DRM_MTRR_WC);
+ DRM_DEBUG("mtrr_del = %d", retcode);
+ }
+
+ drm_vblank_cleanup(dev);
+
+ DRM_LOCK(dev);
+ drm_lastclose(dev);
+ DRM_UNLOCK(dev);
+
+ /* Clean up PCI resources allocated by drm_bufs.c. We're not really
+ * worried about resource consumption while the DRM is inactive (between
+ * lastclose and firstopen or unload) because these aren't actually
+ * taking up KVA, just keeping the PCI resource allocated.
+ */
+ for (i = 0; i < DRM_MAX_PCI_RESOURCE; i++) {
+ if (dev->pcir[i] == NULL)
+ continue;
+ bus_release_resource(dev->device, SYS_RES_MEMORY,
+ dev->pcirid[i], dev->pcir[i]);
+ dev->pcir[i] = NULL;
+ }
+
+ if (dev->agp) {
+ free(dev->agp, DRM_MEM_AGPLISTS);
+ dev->agp = NULL;
+ }
+
+ if (dev->driver->unload != NULL) {
+ DRM_LOCK(dev);
+ dev->driver->unload(dev);
+ DRM_UNLOCK(dev);
+ }
+
+ delete_unrhdr(dev->drw_unrhdr);
+ delete_unrhdr(dev->map_unrhdr);
+
+ drm_mem_uninit();
+
+ if (pci_disable_busmaster(dev->device))
+ DRM_ERROR("Request to disable bus-master failed.\n");
+
+ mtx_destroy(&dev->drw_lock);
+ mtx_destroy(&dev->vbl_lock);
+ mtx_destroy(&dev->irq_lock);
+ mtx_destroy(&dev->dev_lock);
+ mtx_destroy(&dev->event_lock);
+ sx_destroy(&dev->dev_struct_lock);
+}
+
+int drm_version(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_version *version = data;
+ int len;
+
+#define DRM_COPY( name, value ) \
+ len = strlen( value ); \
+ if ( len > name##_len ) len = name##_len; \
+ name##_len = strlen( value ); \
+ if ( len && name ) { \
+ if ( DRM_COPY_TO_USER( name, value, len ) ) \
+ return EFAULT; \
+ }
+
+ version->version_major = dev->driver->major;
+ version->version_minor = dev->driver->minor;
+ version->version_patchlevel = dev->driver->patchlevel;
+
+ DRM_COPY(version->name, dev->driver->name);
+ DRM_COPY(version->date, dev->driver->date);
+ DRM_COPY(version->desc, dev->driver->desc);
+
+ return 0;
+}
+
+int
+drm_open(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p)
+{
+ struct drm_device *dev;
+ int retcode;
+
+ dev = kdev->si_drv1;
+ if (dev == NULL)
+ return (ENXIO);
+
+ DRM_DEBUG("open_count = %d\n", dev->open_count);
+
+ retcode = drm_open_helper(kdev, flags, fmt, p, dev);
+
+ if (retcode == 0) {
+ atomic_inc(&dev->counts[_DRM_STAT_OPENS]);
+ DRM_LOCK(dev);
+ mtx_lock(&Giant);
+ device_busy(dev->device);
+ mtx_unlock(&Giant);
+ if (!dev->open_count++)
+ retcode = drm_firstopen(dev);
+ DRM_UNLOCK(dev);
+ }
+
+ return (retcode);
+}
+
+void drm_close(void *data)
+{
+ struct drm_file *file_priv = data;
+ struct drm_device *dev = file_priv->dev;
+ int retcode = 0;
+
+ DRM_DEBUG("open_count = %d\n", dev->open_count);
+
+ DRM_LOCK(dev);
+
+ if (dev->driver->preclose != NULL)
+ dev->driver->preclose(dev, file_priv);
+
+ /* ========================================================
+ * Begin inline drm_release
+ */
+
+ DRM_DEBUG("pid = %d, device = 0x%lx, open_count = %d\n",
+ DRM_CURRENTPID, (long)dev->device, dev->open_count);
+
+ if (dev->driver->driver_features & DRIVER_GEM)
+ drm_gem_release(dev, file_priv);
+
+ if (dev->lock.hw_lock && _DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)
+ && dev->lock.file_priv == file_priv) {
+ DRM_DEBUG("Process %d dead, freeing lock for context %d\n",
+ DRM_CURRENTPID,
+ _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
+ if (dev->driver->reclaim_buffers_locked != NULL)
+ dev->driver->reclaim_buffers_locked(dev, file_priv);
+
+ drm_lock_free(&dev->lock,
+ _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
+
+ /* FIXME: may require heavy-handed reset of
+ hardware at this point, possibly
+ processed via a callback to the X
+ server. */
+ } else if (dev->driver->reclaim_buffers_locked != NULL &&
+ dev->lock.hw_lock != NULL) {
+ /* The lock is required to reclaim buffers */
+ for (;;) {
+ if (!dev->lock.hw_lock) {
+ /* Device has been unregistered */
+ retcode = EINTR;
+ break;
+ }
+ if (drm_lock_take(&dev->lock, DRM_KERNEL_CONTEXT)) {
+ dev->lock.file_priv = file_priv;
+ dev->lock.lock_time = jiffies;
+ atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
+ break; /* Got lock */
+ }
+ /* Contention */
+ retcode = DRM_LOCK_SLEEP(dev, &dev->lock.lock_queue,
+ PCATCH, "drmlk2", 0);
+ if (retcode)
+ break;
+ }
+ if (retcode == 0) {
+ dev->driver->reclaim_buffers_locked(dev, file_priv);
+ drm_lock_free(&dev->lock, DRM_KERNEL_CONTEXT);
+ }
+ }
+
+ if (drm_core_check_feature(dev, DRIVER_HAVE_DMA) &&
+ !dev->driver->reclaim_buffers_locked)
+ drm_reclaim_buffers(dev, file_priv);
+
+ funsetown(&dev->buf_sigio);
+ seldrain(&file_priv->event_poll);
+
+ if (dev->driver->postclose != NULL)
+ dev->driver->postclose(dev, file_priv);
+ TAILQ_REMOVE(&dev->files, file_priv, link);
+ free(file_priv, DRM_MEM_FILES);
+
+ /* ========================================================
+ * End inline drm_release
+ */
+
+ atomic_inc(&dev->counts[_DRM_STAT_CLOSES]);
+ mtx_lock(&Giant);
+ device_unbusy(dev->device);
+ mtx_unlock(&Giant);
+ if (--dev->open_count == 0) {
+ retcode = drm_lastclose(dev);
+ }
+
+ DRM_UNLOCK(dev);
+}
+
+/* drm_ioctl is called whenever a process performs an ioctl on /dev/drm.
+ */
+int drm_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int flags,
+ DRM_STRUCTPROC *p)
+{
+ struct drm_device *dev = drm_get_device_from_kdev(kdev);
+ int retcode = 0;
+ drm_ioctl_desc_t *ioctl;
+ int (*func)(struct drm_device *dev, void *data, struct drm_file *file_priv);
+ int nr = DRM_IOCTL_NR(cmd);
+ int is_driver_ioctl = 0;
+ struct drm_file *file_priv;
+
+ retcode = devfs_get_cdevpriv((void **)&file_priv);
+ if (retcode != 0) {
+ DRM_ERROR("can't find authenticator\n");
+ return EINVAL;
+ }
+
+ atomic_inc(&dev->counts[_DRM_STAT_IOCTLS]);
+ ++file_priv->ioctl_count;
+
+ DRM_DEBUG("pid=%d, cmd=0x%02lx, nr=0x%02x, dev 0x%lx, auth=%d\n",
+ DRM_CURRENTPID, cmd, nr, (long)dev->device,
+ file_priv->authenticated);
+
+ switch (cmd) {
+ case FIONBIO:
+ case FIOASYNC:
+ return 0;
+
+ case FIOSETOWN:
+ return fsetown(*(int *)data, &dev->buf_sigio);
+
+ case FIOGETOWN:
+ *(int *) data = fgetown(&dev->buf_sigio);
+ return 0;
+ }
+
+ if (IOCGROUP(cmd) != DRM_IOCTL_BASE) {
+ DRM_DEBUG("Bad ioctl group 0x%x\n", (int)IOCGROUP(cmd));
+ return EINVAL;
+ }
+
+ ioctl = &drm_ioctls[nr];
+ /* It's not a core DRM ioctl, try driver-specific. */
+ if (ioctl->func == NULL && nr >= DRM_COMMAND_BASE) {
+ /* The array entries begin at DRM_COMMAND_BASE ioctl nr */
+ nr -= DRM_COMMAND_BASE;
+ if (nr > dev->driver->max_ioctl) {
+ DRM_DEBUG("Bad driver ioctl number, 0x%x (of 0x%x)\n",
+ nr, dev->driver->max_ioctl);
+ return EINVAL;
+ }
+ ioctl = &dev->driver->ioctls[nr];
+ is_driver_ioctl = 1;
+ }
+ func = ioctl->func;
+
+ if (func == NULL) {
+ DRM_DEBUG("no function\n");
+ return EINVAL;
+ }
+
+ if (((ioctl->flags & DRM_ROOT_ONLY) && !DRM_SUSER(p)) ||
+ ((ioctl->flags & DRM_AUTH) && !file_priv->authenticated) ||
+ ((ioctl->flags & DRM_MASTER) && !file_priv->master))
+ return EACCES;
+
+ if (is_driver_ioctl) {
+ if ((ioctl->flags & DRM_UNLOCKED) == 0)
+ DRM_LOCK(dev);
+ /* shared code returns -errno */
+ retcode = -func(dev, data, file_priv);
+ if ((ioctl->flags & DRM_UNLOCKED) == 0)
+ DRM_UNLOCK(dev);
+ } else {
+ retcode = func(dev, data, file_priv);
+ }
+
+ if (retcode != 0)
+ DRM_DEBUG(" returning %d\n", retcode);
+ if (retcode != 0 &&
+ (drm_debug_flag & DRM_DEBUGBITS_FAILED_IOCTL) != 0) {
+ printf(
+"pid %d, cmd 0x%02lx, nr 0x%02x/%1d, dev 0x%lx, auth %d, res %d\n",
+ DRM_CURRENTPID, cmd, nr, is_driver_ioctl, (long)dev->device,
+ file_priv->authenticated, retcode);
+ }
+
+ return retcode;
+}
+
+drm_local_map_t *drm_getsarea(struct drm_device *dev)
+{
+ drm_local_map_t *map;
+
+ DRM_LOCK_ASSERT(dev);
+ TAILQ_FOREACH(map, &dev->maplist, link) {
+ if (map->type == _DRM_SHM && (map->flags & _DRM_CONTAINS_LOCK))
+ return map;
+ }
+
+ return NULL;
+}
+
+int
+drm_add_busid_modesetting(struct drm_device *dev, struct sysctl_ctx_list *ctx,
+ struct sysctl_oid *top)
+{
+ struct sysctl_oid *oid;
+
+ snprintf(dev->busid_str, sizeof(dev->busid_str),
+ "pci:%04x:%02x:%02x.%d", dev->pci_domain, dev->pci_bus,
+ dev->pci_slot, dev->pci_func);
+ oid = SYSCTL_ADD_STRING(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "busid",
+ CTLFLAG_RD, dev->busid_str, 0, NULL);
+ if (oid == NULL)
+ return (ENOMEM);
+ dev->modesetting = (dev->driver->driver_features & DRIVER_MODESET) != 0;
+ oid = SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(top), OID_AUTO,
+ "modesetting", CTLFLAG_RD, &dev->modesetting, 0, NULL);
+ if (oid == NULL)
+ return (ENOMEM);
+
+ return (0);
+}
+
+#if DRM_LINUX
+
+#include <sys/sysproto.h>
+
+MODULE_DEPEND(DRIVER_NAME, linux, 1, 1, 1);
+
+#define LINUX_IOCTL_DRM_MIN 0x6400
+#define LINUX_IOCTL_DRM_MAX 0x64ff
+
+static linux_ioctl_function_t drm_linux_ioctl;
+static struct linux_ioctl_handler drm_handler = {drm_linux_ioctl,
+ LINUX_IOCTL_DRM_MIN, LINUX_IOCTL_DRM_MAX};
+
+SYSINIT(drm_register, SI_SUB_KLD, SI_ORDER_MIDDLE,
+ linux_ioctl_register_handler, &drm_handler);
+SYSUNINIT(drm_unregister, SI_SUB_KLD, SI_ORDER_MIDDLE,
+ linux_ioctl_unregister_handler, &drm_handler);
+
+/* The bits for in/out are switched on Linux */
+#define LINUX_IOC_IN IOC_OUT
+#define LINUX_IOC_OUT IOC_IN
+
+static int
+drm_linux_ioctl(DRM_STRUCTPROC *p, struct linux_ioctl_args* args)
+{
+ int error;
+ int cmd = args->cmd;
+
+ args->cmd &= ~(LINUX_IOC_IN | LINUX_IOC_OUT);
+ if (cmd & LINUX_IOC_IN)
+ args->cmd |= IOC_IN;
+ if (cmd & LINUX_IOC_OUT)
+ args->cmd |= IOC_OUT;
+
+ error = ioctl(p, (struct ioctl_args *)args);
+
+ return error;
+}
+#endif /* DRM_LINUX */
+
+bool
+dmi_check_system(const struct dmi_system_id *sysid)
+{
+
+ /* XXXKIB */
+ return (false);
+}
+
diff --git a/sys/dev/drm2/drm_edid.c b/sys/dev/drm2/drm_edid.c
new file mode 100644
index 000000000000..edd33b005deb
--- /dev/null
+++ b/sys/dev/drm2/drm_edid.c
@@ -0,0 +1,1781 @@
+/*
+ * Copyright (c) 2006 Luc Verhaegen (quirks list)
+ * Copyright (c) 2007-2008 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ * Copyright 2010 Red Hat, Inc.
+ *
+ * DDC probing routines (drm_ddc_read & drm_do_probe_ddc_edid) originally from
+ * FB layer.
+ * Copyright (C) 2006 Dennis Munsie <dmunsie@cecropia.com>
+ *
+ * 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, sub license,
+ * 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT. 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/drm_edid_modes.h>
+#include <dev/iicbus/iic.h>
+#include <dev/iicbus/iiconf.h>
+#include "iicbus_if.h"
+
+#define version_greater(edid, maj, min) \
+ (((edid)->version > (maj)) || \
+ ((edid)->version == (maj) && (edid)->revision > (min)))
+
+#define EDID_EST_TIMINGS 16
+#define EDID_STD_TIMINGS 8
+#define EDID_DETAILED_TIMINGS 4
+
+/*
+ * EDID blocks out in the wild have a variety of bugs, try to collect
+ * them here (note that userspace may work around broken monitors first,
+ * but fixes should make their way here so that the kernel "just works"
+ * on as many displays as possible).
+ */
+
+/* First detailed mode wrong, use largest 60Hz mode */
+#define EDID_QUIRK_PREFER_LARGE_60 (1 << 0)
+/* Reported 135MHz pixel clock is too high, needs adjustment */
+#define EDID_QUIRK_135_CLOCK_TOO_HIGH (1 << 1)
+/* Prefer the largest mode at 75 Hz */
+#define EDID_QUIRK_PREFER_LARGE_75 (1 << 2)
+/* Detail timing is in cm not mm */
+#define EDID_QUIRK_DETAILED_IN_CM (1 << 3)
+/* Detailed timing descriptors have bogus size values, so just take the
+ * maximum size and use that.
+ */
+#define EDID_QUIRK_DETAILED_USE_MAXIMUM_SIZE (1 << 4)
+/* Monitor forgot to set the first detailed is preferred bit. */
+#define EDID_QUIRK_FIRST_DETAILED_PREFERRED (1 << 5)
+/* use +hsync +vsync for detailed mode */
+#define EDID_QUIRK_DETAILED_SYNC_PP (1 << 6)
+
+struct detailed_mode_closure {
+ struct drm_connector *connector;
+ struct edid *edid;
+ bool preferred;
+ u32 quirks;
+ int modes;
+};
+
+#define LEVEL_DMT 0
+#define LEVEL_GTF 1
+#define LEVEL_GTF2 2
+#define LEVEL_CVT 3
+
+static struct edid_quirk {
+ char *vendor;
+ int product_id;
+ u32 quirks;
+} edid_quirk_list[] = {
+ /* Acer AL1706 */
+ { "ACR", 44358, EDID_QUIRK_PREFER_LARGE_60 },
+ /* Acer F51 */
+ { "API", 0x7602, EDID_QUIRK_PREFER_LARGE_60 },
+ /* Unknown Acer */
+ { "ACR", 2423, EDID_QUIRK_FIRST_DETAILED_PREFERRED },
+
+ /* Belinea 10 15 55 */
+ { "MAX", 1516, EDID_QUIRK_PREFER_LARGE_60 },
+ { "MAX", 0x77e, EDID_QUIRK_PREFER_LARGE_60 },
+
+ /* Envision Peripherals, Inc. EN-7100e */
+ { "EPI", 59264, EDID_QUIRK_135_CLOCK_TOO_HIGH },
+ /* Envision EN2028 */
+ { "EPI", 8232, EDID_QUIRK_PREFER_LARGE_60 },
+
+ /* Funai Electronics PM36B */
+ { "FCM", 13600, EDID_QUIRK_PREFER_LARGE_75 |
+ EDID_QUIRK_DETAILED_IN_CM },
+
+ /* LG Philips LCD LP154W01-A5 */
+ { "LPL", 0, EDID_QUIRK_DETAILED_USE_MAXIMUM_SIZE },
+ { "LPL", 0x2a00, EDID_QUIRK_DETAILED_USE_MAXIMUM_SIZE },
+
+ /* Philips 107p5 CRT */
+ { "PHL", 57364, EDID_QUIRK_FIRST_DETAILED_PREFERRED },
+
+ /* Proview AY765C */
+ { "PTS", 765, EDID_QUIRK_FIRST_DETAILED_PREFERRED },
+
+ /* Samsung SyncMaster 205BW. Note: irony */
+ { "SAM", 541, EDID_QUIRK_DETAILED_SYNC_PP },
+ /* Samsung SyncMaster 22[5-6]BW */
+ { "SAM", 596, EDID_QUIRK_PREFER_LARGE_60 },
+ { "SAM", 638, EDID_QUIRK_PREFER_LARGE_60 },
+};
+
+/*** DDC fetch and block validation ***/
+
+static const u8 edid_header[] = {
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
+};
+
+ /*
+ * Sanity check the header of the base EDID block. Return 8 if the header
+ * is perfect, down to 0 if it's totally wrong.
+ */
+int drm_edid_header_is_valid(const u8 *raw_edid)
+{
+ int i, score = 0;
+
+ for (i = 0; i < sizeof(edid_header); i++)
+ if (raw_edid[i] == edid_header[i])
+ score++;
+
+ return score;
+}
+
+/*
+ * Sanity check the EDID block (base or extension). Return 0 if the block
+ * doesn't check out, or 1 if it's valid.
+ */
+static bool
+drm_edid_block_valid(u8 *raw_edid)
+{
+ int i;
+ u8 csum = 0;
+ struct edid *edid = (struct edid *)raw_edid;
+
+ if (raw_edid[0] == 0x00) {
+ int score = drm_edid_header_is_valid(raw_edid);
+ if (score == 8) ;
+ else if (score >= 6) {
+ DRM_DEBUG("Fixing EDID header, your hardware may be failing\n");
+ memcpy(raw_edid, edid_header, sizeof(edid_header));
+ } else {
+ goto bad;
+ }
+ }
+
+ for (i = 0; i < EDID_LENGTH; i++)
+ csum += raw_edid[i];
+ if (csum) {
+ DRM_ERROR("EDID checksum is invalid, remainder is %d\n", csum);
+
+ /* allow CEA to slide through, switches mangle this */
+ if (raw_edid[0] != 0x02)
+ goto bad;
+ }
+
+ /* per-block-type checks */
+ switch (raw_edid[0]) {
+ case 0: /* base */
+ if (edid->version != 1) {
+ DRM_ERROR("EDID has major version %d, instead of 1\n", edid->version);
+ goto bad;
+ }
+
+ if (edid->revision > 4)
+ DRM_DEBUG("EDID minor > 4, assuming backward compatibility\n");
+ break;
+
+ default:
+ break;
+ }
+
+ return 1;
+
+bad:
+ if (raw_edid) {
+ DRM_DEBUG_KMS("Raw EDID:\n");
+ if ((drm_debug_flag & DRM_DEBUGBITS_KMS) != 0) {
+ for (i = 0; i < EDID_LENGTH; ) {
+ printf("%02x", raw_edid[i]);
+ i++;
+ if (i % 16 == 0 || i == EDID_LENGTH)
+ printf("\n");
+ else if (i % 8 == 0)
+ printf(" ");
+ else
+ printf(" ");
+ }
+ }
+ }
+ return 0;
+}
+
+/**
+ * drm_edid_is_valid - sanity check EDID data
+ * @edid: EDID data
+ *
+ * Sanity-check an entire EDID record (including extensions)
+ */
+bool drm_edid_is_valid(struct edid *edid)
+{
+ int i;
+ u8 *raw = (u8 *)edid;
+
+ if (!edid)
+ return false;
+
+ for (i = 0; i <= edid->extensions; i++)
+ if (!drm_edid_block_valid(raw + i * EDID_LENGTH))
+ return false;
+
+ return true;
+}
+
+#define DDC_ADDR 0x50
+#define DDC_SEGMENT_ADDR 0x30
+/**
+ * Get EDID information via I2C.
+ *
+ * \param adapter : i2c device adaptor
+ * \param buf : EDID data buffer to be filled
+ * \param len : EDID data buffer length
+ * \return 0 on success or -1 on failure.
+ *
+ * Try to fetch EDID information by calling i2c driver function.
+ */
+static int
+drm_do_probe_ddc_edid(device_t adapter, unsigned char *buf,
+ int block, int len)
+{
+ unsigned char start = block * EDID_LENGTH;
+ int ret, retries = 5;
+
+ /* The core i2c driver will automatically retry the transfer if the
+ * adapter reports EAGAIN. However, we find that bit-banging transfers
+ * are susceptible to errors under a heavily loaded machine and
+ * generate spurious NAKs and timeouts. Retrying the transfer
+ * of the individual block a few times seems to overcome this.
+ */
+ do {
+ struct iic_msg msgs[] = {
+ {
+ .slave = DDC_ADDR,
+ .flags = IIC_M_WR,
+ .len = 1,
+ .buf = &start,
+ }, {
+ .slave = DDC_ADDR,
+ .flags = IIC_M_RD,
+ .len = len,
+ .buf = buf,
+ }
+ };
+ ret = iicbus_transfer(adapter, msgs, 2);
+ if (ret != 0)
+ DRM_DEBUG_KMS("iicbus_transfer countdown %d error %d\n",
+ retries, ret);
+ } while (ret != 0 && --retries);
+
+ return (ret == 0 ? 0 : -1);
+}
+
+static bool drm_edid_is_zero(u8 *in_edid, int length)
+{
+ int i;
+ u32 *raw_edid = (u32 *)in_edid;
+
+ for (i = 0; i < length / 4; i++)
+ if (*(raw_edid + i) != 0)
+ return false;
+ return true;
+}
+
+static u8 *
+drm_do_get_edid(struct drm_connector *connector, device_t adapter)
+{
+ int i, j = 0, valid_extensions = 0;
+ u8 *block, *new;
+
+ block = malloc(EDID_LENGTH, DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ /* base block fetch */
+ for (i = 0; i < 4; i++) {
+ if (drm_do_probe_ddc_edid(adapter, block, 0, EDID_LENGTH))
+ goto out;
+ if (drm_edid_block_valid(block))
+ break;
+ if (i == 0 && drm_edid_is_zero(block, EDID_LENGTH)) {
+ connector->null_edid_counter++;
+ goto carp;
+ }
+ }
+ if (i == 4)
+ goto carp;
+
+ /* if there's no extensions, we're done */
+ if (block[0x7e] == 0)
+ return block;
+
+ new = reallocf(block, (block[0x7e] + 1) * EDID_LENGTH, DRM_MEM_KMS,
+ M_WAITOK);
+ block = new;
+
+ for (j = 1; j <= block[0x7e]; j++) {
+ for (i = 0; i < 4; i++) {
+ if (drm_do_probe_ddc_edid(adapter,
+ block + (valid_extensions + 1) * EDID_LENGTH,
+ j, EDID_LENGTH))
+ goto out;
+ if (drm_edid_block_valid(block + (valid_extensions + 1) * EDID_LENGTH)) {
+ valid_extensions++;
+ break;
+ }
+ }
+ if (i == 4)
+ DRM_DEBUG_KMS("%s: Ignoring invalid EDID block %d.\n",
+ drm_get_connector_name(connector), j);
+ }
+
+ if (valid_extensions != block[0x7e]) {
+ block[EDID_LENGTH-1] += block[0x7e] - valid_extensions;
+ block[0x7e] = valid_extensions;
+ new = reallocf(block, (valid_extensions + 1) * EDID_LENGTH,
+ DRM_MEM_KMS, M_WAITOK);
+ block = new;
+ }
+
+ DRM_DEBUG_KMS("got EDID from %s\n", drm_get_connector_name(connector));
+ return block;
+
+carp:
+ DRM_ERROR("%s: EDID block %d invalid.\n",
+ drm_get_connector_name(connector), j);
+
+out:
+ free(block, DRM_MEM_KMS);
+ return NULL;
+}
+
+/**
+ * Probe DDC presence.
+ *
+ * \param adapter : i2c device adaptor
+ * \return 1 on success
+ */
+static bool
+drm_probe_ddc(device_t adapter)
+{
+ unsigned char out;
+
+ return (drm_do_probe_ddc_edid(adapter, &out, 0, 1) == 0);
+}
+
+/**
+ * drm_get_edid - get EDID data, if available
+ * @connector: connector we're probing
+ * @adapter: i2c adapter to use for DDC
+ *
+ * Poke the given i2c channel to grab EDID data if possible. If found,
+ * attach it to the connector.
+ *
+ * Return edid data or NULL if we couldn't find any.
+ */
+struct edid *drm_get_edid(struct drm_connector *connector,
+ device_t adapter)
+{
+ struct edid *edid = NULL;
+
+ if (drm_probe_ddc(adapter))
+ edid = (struct edid *)drm_do_get_edid(connector, adapter);
+
+ connector->display_info.raw_edid = (char *)edid;
+
+ return edid;
+
+}
+
+/*** EDID parsing ***/
+
+/**
+ * edid_vendor - match a string against EDID's obfuscated vendor field
+ * @edid: EDID to match
+ * @vendor: vendor string
+ *
+ * Returns true if @vendor is in @edid, false otherwise
+ */
+static bool edid_vendor(struct edid *edid, char *vendor)
+{
+ char edid_vendor[3];
+
+ edid_vendor[0] = ((edid->mfg_id[0] & 0x7c) >> 2) + '@';
+ edid_vendor[1] = (((edid->mfg_id[0] & 0x3) << 3) |
+ ((edid->mfg_id[1] & 0xe0) >> 5)) + '@';
+ edid_vendor[2] = (edid->mfg_id[1] & 0x1f) + '@';
+
+ return !strncmp(edid_vendor, vendor, 3);
+}
+
+/**
+ * edid_get_quirks - return quirk flags for a given EDID
+ * @edid: EDID to process
+ *
+ * This tells subsequent routines what fixes they need to apply.
+ */
+static u32 edid_get_quirks(struct edid *edid)
+{
+ struct edid_quirk *quirk;
+ int i;
+
+ for (i = 0; i < DRM_ARRAY_SIZE(edid_quirk_list); i++) {
+ quirk = &edid_quirk_list[i];
+
+ if (edid_vendor(edid, quirk->vendor) &&
+ (EDID_PRODUCT_ID(edid) == quirk->product_id))
+ return quirk->quirks;
+ }
+
+ return 0;
+}
+
+#define MODE_SIZE(m) ((m)->hdisplay * (m)->vdisplay)
+#define MODE_REFRESH_DIFF(m,r) (abs((m)->vrefresh - target_refresh))
+
+/**
+ * edid_fixup_preferred - set preferred modes based on quirk list
+ * @connector: has mode list to fix up
+ * @quirks: quirks list
+ *
+ * Walk the mode list for @connector, clearing the preferred status
+ * on existing modes and setting it anew for the right mode ala @quirks.
+ */
+static void edid_fixup_preferred(struct drm_connector *connector,
+ u32 quirks)
+{
+ struct drm_display_mode *t, *cur_mode, *preferred_mode;
+ int target_refresh = 0;
+
+ if (list_empty(&connector->probed_modes))
+ return;
+
+ if (quirks & EDID_QUIRK_PREFER_LARGE_60)
+ target_refresh = 60;
+ if (quirks & EDID_QUIRK_PREFER_LARGE_75)
+ target_refresh = 75;
+
+ preferred_mode = list_first_entry(&connector->probed_modes,
+ struct drm_display_mode, head);
+
+ list_for_each_entry_safe(cur_mode, t, &connector->probed_modes, head) {
+ cur_mode->type &= ~DRM_MODE_TYPE_PREFERRED;
+
+ if (cur_mode == preferred_mode)
+ continue;
+
+ /* Largest mode is preferred */
+ if (MODE_SIZE(cur_mode) > MODE_SIZE(preferred_mode))
+ preferred_mode = cur_mode;
+
+ /* At a given size, try to get closest to target refresh */
+ if ((MODE_SIZE(cur_mode) == MODE_SIZE(preferred_mode)) &&
+ MODE_REFRESH_DIFF(cur_mode, target_refresh) <
+ MODE_REFRESH_DIFF(preferred_mode, target_refresh)) {
+ preferred_mode = cur_mode;
+ }
+ }
+
+ preferred_mode->type |= DRM_MODE_TYPE_PREFERRED;
+}
+
+struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev,
+ int hsize, int vsize, int fresh)
+{
+ struct drm_display_mode *mode = NULL;
+ int i;
+
+ for (i = 0; i < drm_num_dmt_modes; i++) {
+ struct drm_display_mode *ptr = &drm_dmt_modes[i];
+ if (hsize == ptr->hdisplay &&
+ vsize == ptr->vdisplay &&
+ fresh == drm_mode_vrefresh(ptr)) {
+ /* get the expected default mode */
+ mode = drm_mode_duplicate(dev, ptr);
+ break;
+ }
+ }
+ return mode;
+}
+
+typedef void detailed_cb(struct detailed_timing *timing, void *closure);
+
+static void
+cea_for_each_detailed_block(u8 *ext, detailed_cb *cb, void *closure)
+{
+ int i, n = 0;
+ u8 rev = ext[0x01], d = ext[0x02];
+ u8 *det_base = ext + d;
+
+ switch (rev) {
+ case 0:
+ /* can't happen */
+ return;
+ case 1:
+ /* have to infer how many blocks we have, check pixel clock */
+ for (i = 0; i < 6; i++)
+ if (det_base[18*i] || det_base[18*i+1])
+ n++;
+ break;
+ default:
+ /* explicit count */
+ n = min(ext[0x03] & 0x0f, 6);
+ break;
+ }
+
+ for (i = 0; i < n; i++)
+ cb((struct detailed_timing *)(det_base + 18 * i), closure);
+}
+
+static void
+vtb_for_each_detailed_block(u8 *ext, detailed_cb *cb, void *closure)
+{
+ unsigned int i, n = min((int)ext[0x02], 6);
+ u8 *det_base = ext + 5;
+
+ if (ext[0x01] != 1)
+ return; /* unknown version */
+
+ for (i = 0; i < n; i++)
+ cb((struct detailed_timing *)(det_base + 18 * i), closure);
+}
+
+static void
+drm_for_each_detailed_block(u8 *raw_edid, detailed_cb *cb, void *closure)
+{
+ int i;
+ struct edid *edid = (struct edid *)raw_edid;
+
+ if (edid == NULL)
+ return;
+
+ for (i = 0; i < EDID_DETAILED_TIMINGS; i++)
+ cb(&(edid->detailed_timings[i]), closure);
+
+ for (i = 1; i <= raw_edid[0x7e]; i++) {
+ u8 *ext = raw_edid + (i * EDID_LENGTH);
+ switch (*ext) {
+ case CEA_EXT:
+ cea_for_each_detailed_block(ext, cb, closure);
+ break;
+ case VTB_EXT:
+ vtb_for_each_detailed_block(ext, cb, closure);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+static void
+is_rb(struct detailed_timing *t, void *data)
+{
+ u8 *r = (u8 *)t;
+ if (r[3] == EDID_DETAIL_MONITOR_RANGE)
+ if (r[15] & 0x10)
+ *(bool *)data = true;
+}
+
+/* EDID 1.4 defines this explicitly. For EDID 1.3, we guess, badly. */
+static bool
+drm_monitor_supports_rb(struct edid *edid)
+{
+ if (edid->revision >= 4) {
+ bool ret;
+ drm_for_each_detailed_block((u8 *)edid, is_rb, &ret);
+ return ret;
+ }
+
+ return ((edid->input & DRM_EDID_INPUT_DIGITAL) != 0);
+}
+
+static void
+find_gtf2(struct detailed_timing *t, void *data)
+{
+ u8 *r = (u8 *)t;
+ if (r[3] == EDID_DETAIL_MONITOR_RANGE && r[10] == 0x02)
+ *(u8 **)data = r;
+}
+
+/* Secondary GTF curve kicks in above some break frequency */
+static int
+drm_gtf2_hbreak(struct edid *edid)
+{
+ u8 *r = NULL;
+ drm_for_each_detailed_block((u8 *)edid, find_gtf2, &r);
+ return r ? (r[12] * 2) : 0;
+}
+
+static int
+drm_gtf2_2c(struct edid *edid)
+{
+ u8 *r = NULL;
+ drm_for_each_detailed_block((u8 *)edid, find_gtf2, &r);
+ return r ? r[13] : 0;
+}
+
+static int
+drm_gtf2_m(struct edid *edid)
+{
+ u8 *r = NULL;
+ drm_for_each_detailed_block((u8 *)edid, find_gtf2, &r);
+ return r ? (r[15] << 8) + r[14] : 0;
+}
+
+static int
+drm_gtf2_k(struct edid *edid)
+{
+ u8 *r = NULL;
+ drm_for_each_detailed_block((u8 *)edid, find_gtf2, &r);
+ return r ? r[16] : 0;
+}
+
+static int
+drm_gtf2_2j(struct edid *edid)
+{
+ u8 *r = NULL;
+ drm_for_each_detailed_block((u8 *)edid, find_gtf2, &r);
+ return r ? r[17] : 0;
+}
+
+/**
+ * standard_timing_level - get std. timing level(CVT/GTF/DMT)
+ * @edid: EDID block to scan
+ */
+static int standard_timing_level(struct edid *edid)
+{
+ if (edid->revision >= 2) {
+ if (edid->revision >= 4 && (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF))
+ return LEVEL_CVT;
+ if (drm_gtf2_hbreak(edid))
+ return LEVEL_GTF2;
+ return LEVEL_GTF;
+ }
+ return LEVEL_DMT;
+}
+
+/*
+ * 0 is reserved. The spec says 0x01 fill for unused timings. Some old
+ * monitors fill with ascii space (0x20) instead.
+ */
+static int
+bad_std_timing(u8 a, u8 b)
+{
+ return (a == 0x00 && b == 0x00) ||
+ (a == 0x01 && b == 0x01) ||
+ (a == 0x20 && b == 0x20);
+}
+
+/**
+ * drm_mode_std - convert standard mode info (width, height, refresh) into mode
+ * @t: standard timing params
+ * @timing_level: standard timing level
+ *
+ * Take the standard timing params (in this case width, aspect, and refresh)
+ * and convert them into a real mode using CVT/GTF/DMT.
+ */
+static struct drm_display_mode *
+drm_mode_std(struct drm_connector *connector, struct edid *edid,
+ struct std_timing *t, int revision)
+{
+ struct drm_device *dev = connector->dev;
+ struct drm_display_mode *m, *mode = NULL;
+ int hsize, vsize;
+ int vrefresh_rate;
+ unsigned aspect_ratio = (t->vfreq_aspect & EDID_TIMING_ASPECT_MASK)
+ >> EDID_TIMING_ASPECT_SHIFT;
+ unsigned vfreq = (t->vfreq_aspect & EDID_TIMING_VFREQ_MASK)
+ >> EDID_TIMING_VFREQ_SHIFT;
+ int timing_level = standard_timing_level(edid);
+
+ if (bad_std_timing(t->hsize, t->vfreq_aspect))
+ return NULL;
+
+ /* According to the EDID spec, the hdisplay = hsize * 8 + 248 */
+ hsize = t->hsize * 8 + 248;
+ /* vrefresh_rate = vfreq + 60 */
+ vrefresh_rate = vfreq + 60;
+ /* the vdisplay is calculated based on the aspect ratio */
+ if (aspect_ratio == 0) {
+ if (revision < 3)
+ vsize = hsize;
+ else
+ vsize = (hsize * 10) / 16;
+ } else if (aspect_ratio == 1)
+ vsize = (hsize * 3) / 4;
+ else if (aspect_ratio == 2)
+ vsize = (hsize * 4) / 5;
+ else
+ vsize = (hsize * 9) / 16;
+
+ /* HDTV hack, part 1 */
+ if (vrefresh_rate == 60 &&
+ ((hsize == 1360 && vsize == 765) ||
+ (hsize == 1368 && vsize == 769))) {
+ hsize = 1366;
+ vsize = 768;
+ }
+
+ /*
+ * If this connector already has a mode for this size and refresh
+ * rate (because it came from detailed or CVT info), use that
+ * instead. This way we don't have to guess at interlace or
+ * reduced blanking.
+ */
+ list_for_each_entry(m, &connector->probed_modes, head)
+ if (m->hdisplay == hsize && m->vdisplay == vsize &&
+ drm_mode_vrefresh(m) == vrefresh_rate)
+ return NULL;
+
+ /* HDTV hack, part 2 */
+ if (hsize == 1366 && vsize == 768 && vrefresh_rate == 60) {
+ mode = drm_cvt_mode(dev, 1366, 768, vrefresh_rate, 0, 0,
+ false);
+ mode->hdisplay = 1366;
+ mode->hsync_start = mode->hsync_start - 1;
+ mode->hsync_end = mode->hsync_end - 1;
+ return mode;
+ }
+
+ /* check whether it can be found in default mode table */
+ mode = drm_mode_find_dmt(dev, hsize, vsize, vrefresh_rate);
+ if (mode)
+ return mode;
+
+ switch (timing_level) {
+ case LEVEL_DMT:
+ break;
+ case LEVEL_GTF:
+ mode = drm_gtf_mode(dev, hsize, vsize, vrefresh_rate, 0, 0);
+ break;
+ case LEVEL_GTF2:
+ /*
+ * This is potentially wrong if there's ever a monitor with
+ * more than one ranges section, each claiming a different
+ * secondary GTF curve. Please don't do that.
+ */
+ mode = drm_gtf_mode(dev, hsize, vsize, vrefresh_rate, 0, 0);
+ if (drm_mode_hsync(mode) > drm_gtf2_hbreak(edid)) {
+ free(mode, DRM_MEM_KMS);
+ mode = drm_gtf_mode_complex(dev, hsize, vsize,
+ vrefresh_rate, 0, 0,
+ drm_gtf2_m(edid),
+ drm_gtf2_2c(edid),
+ drm_gtf2_k(edid),
+ drm_gtf2_2j(edid));
+ }
+ break;
+ case LEVEL_CVT:
+ mode = drm_cvt_mode(dev, hsize, vsize, vrefresh_rate, 0, 0,
+ false);
+ break;
+ }
+ return mode;
+}
+
+/*
+ * EDID is delightfully ambiguous about how interlaced modes are to be
+ * encoded. Our internal representation is of frame height, but some
+ * HDTV detailed timings are encoded as field height.
+ *
+ * The format list here is from CEA, in frame size. Technically we
+ * should be checking refresh rate too. Whatever.
+ */
+static void
+drm_mode_do_interlace_quirk(struct drm_display_mode *mode,
+ struct detailed_pixel_timing *pt)
+{
+ int i;
+ static const struct {
+ int w, h;
+ } cea_interlaced[] = {
+ { 1920, 1080 },
+ { 720, 480 },
+ { 1440, 480 },
+ { 2880, 480 },
+ { 720, 576 },
+ { 1440, 576 },
+ { 2880, 576 },
+ };
+
+ if (!(pt->misc & DRM_EDID_PT_INTERLACED))
+ return;
+
+ for (i = 0; i < DRM_ARRAY_SIZE(cea_interlaced); i++) {
+ if ((mode->hdisplay == cea_interlaced[i].w) &&
+ (mode->vdisplay == cea_interlaced[i].h / 2)) {
+ mode->vdisplay *= 2;
+ mode->vsync_start *= 2;
+ mode->vsync_end *= 2;
+ mode->vtotal *= 2;
+ mode->vtotal |= 1;
+ }
+ }
+
+ mode->flags |= DRM_MODE_FLAG_INTERLACE;
+}
+
+/**
+ * drm_mode_detailed - create a new mode from an EDID detailed timing section
+ * @dev: DRM device (needed to create new mode)
+ * @edid: EDID block
+ * @timing: EDID detailed timing info
+ * @quirks: quirks to apply
+ *
+ * An EDID detailed timing block contains enough info for us to create and
+ * return a new struct drm_display_mode.
+ */
+static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
+ struct edid *edid,
+ struct detailed_timing *timing,
+ u32 quirks)
+{
+ struct drm_display_mode *mode;
+ struct detailed_pixel_timing *pt = &timing->data.pixel_data;
+ unsigned hactive = (pt->hactive_hblank_hi & 0xf0) << 4 | pt->hactive_lo;
+ unsigned vactive = (pt->vactive_vblank_hi & 0xf0) << 4 | pt->vactive_lo;
+ unsigned hblank = (pt->hactive_hblank_hi & 0xf) << 8 | pt->hblank_lo;
+ unsigned vblank = (pt->vactive_vblank_hi & 0xf) << 8 | pt->vblank_lo;
+ unsigned hsync_offset = (pt->hsync_vsync_offset_pulse_width_hi & 0xc0) << 2 | pt->hsync_offset_lo;
+ unsigned hsync_pulse_width = (pt->hsync_vsync_offset_pulse_width_hi & 0x30) << 4 | pt->hsync_pulse_width_lo;
+ unsigned vsync_offset = (pt->hsync_vsync_offset_pulse_width_hi & 0xc) >> 2 | pt->vsync_offset_pulse_width_lo >> 4;
+ unsigned vsync_pulse_width = (pt->hsync_vsync_offset_pulse_width_hi & 0x3) << 4 | (pt->vsync_offset_pulse_width_lo & 0xf);
+
+ /* ignore tiny modes */
+ if (hactive < 64 || vactive < 64)
+ return NULL;
+
+ if (pt->misc & DRM_EDID_PT_STEREO) {
+ printf("stereo mode not supported\n");
+ return NULL;
+ }
+ if (!(pt->misc & DRM_EDID_PT_SEPARATE_SYNC)) {
+ printf("composite sync not supported\n");
+ }
+
+ /* it is incorrect if hsync/vsync width is zero */
+ if (!hsync_pulse_width || !vsync_pulse_width) {
+ DRM_DEBUG_KMS("Incorrect Detailed timing. "
+ "Wrong Hsync/Vsync pulse width\n");
+ return NULL;
+ }
+ mode = drm_mode_create(dev);
+ if (!mode)
+ return NULL;
+
+ mode->type = DRM_MODE_TYPE_DRIVER;
+
+ if (quirks & EDID_QUIRK_135_CLOCK_TOO_HIGH)
+ timing->pixel_clock = htole16(1088);
+
+ mode->clock = le16toh(timing->pixel_clock) * 10;
+
+ mode->hdisplay = hactive;
+ mode->hsync_start = mode->hdisplay + hsync_offset;
+ mode->hsync_end = mode->hsync_start + hsync_pulse_width;
+ mode->htotal = mode->hdisplay + hblank;
+
+ mode->vdisplay = vactive;
+ mode->vsync_start = mode->vdisplay + vsync_offset;
+ mode->vsync_end = mode->vsync_start + vsync_pulse_width;
+ mode->vtotal = mode->vdisplay + vblank;
+
+ /* Some EDIDs have bogus h/vtotal values */
+ if (mode->hsync_end > mode->htotal)
+ mode->htotal = mode->hsync_end + 1;
+ if (mode->vsync_end > mode->vtotal)
+ mode->vtotal = mode->vsync_end + 1;
+
+ drm_mode_do_interlace_quirk(mode, pt);
+
+ drm_mode_set_name(mode);
+
+ if (quirks & EDID_QUIRK_DETAILED_SYNC_PP) {
+ pt->misc |= DRM_EDID_PT_HSYNC_POSITIVE | DRM_EDID_PT_VSYNC_POSITIVE;
+ }
+
+ mode->flags |= (pt->misc & DRM_EDID_PT_HSYNC_POSITIVE) ?
+ DRM_MODE_FLAG_PHSYNC : DRM_MODE_FLAG_NHSYNC;
+ mode->flags |= (pt->misc & DRM_EDID_PT_VSYNC_POSITIVE) ?
+ DRM_MODE_FLAG_PVSYNC : DRM_MODE_FLAG_NVSYNC;
+
+ mode->width_mm = pt->width_mm_lo | (pt->width_height_mm_hi & 0xf0) << 4;
+ mode->height_mm = pt->height_mm_lo | (pt->width_height_mm_hi & 0xf) << 8;
+
+ if (quirks & EDID_QUIRK_DETAILED_IN_CM) {
+ mode->width_mm *= 10;
+ mode->height_mm *= 10;
+ }
+
+ if (quirks & EDID_QUIRK_DETAILED_USE_MAXIMUM_SIZE) {
+ mode->width_mm = edid->width_cm * 10;
+ mode->height_mm = edid->height_cm * 10;
+ }
+
+ return mode;
+}
+
+static bool
+mode_is_rb(const struct drm_display_mode *mode)
+{
+ return (mode->htotal - mode->hdisplay == 160) &&
+ (mode->hsync_end - mode->hdisplay == 80) &&
+ (mode->hsync_end - mode->hsync_start == 32) &&
+ (mode->vsync_start - mode->vdisplay == 3);
+}
+
+static bool
+mode_in_hsync_range(struct drm_display_mode *mode,
+ struct edid *edid, u8 *t)
+{
+ int hsync, hmin, hmax;
+
+ hmin = t[7];
+ if (edid->revision >= 4)
+ hmin += ((t[4] & 0x04) ? 255 : 0);
+ hmax = t[8];
+ if (edid->revision >= 4)
+ hmax += ((t[4] & 0x08) ? 255 : 0);
+ hsync = drm_mode_hsync(mode);
+
+ return (hsync <= hmax && hsync >= hmin);
+}
+
+static bool
+mode_in_vsync_range(struct drm_display_mode *mode,
+ struct edid *edid, u8 *t)
+{
+ int vsync, vmin, vmax;
+
+ vmin = t[5];
+ if (edid->revision >= 4)
+ vmin += ((t[4] & 0x01) ? 255 : 0);
+ vmax = t[6];
+ if (edid->revision >= 4)
+ vmax += ((t[4] & 0x02) ? 255 : 0);
+ vsync = drm_mode_vrefresh(mode);
+
+ return (vsync <= vmax && vsync >= vmin);
+}
+
+static u32
+range_pixel_clock(struct edid *edid, u8 *t)
+{
+ /* unspecified */
+ if (t[9] == 0 || t[9] == 255)
+ return 0;
+
+ /* 1.4 with CVT support gives us real precision, yay */
+ if (edid->revision >= 4 && t[10] == 0x04)
+ return (t[9] * 10000) - ((t[12] >> 2) * 250);
+
+ /* 1.3 is pathetic, so fuzz up a bit */
+ return t[9] * 10000 + 5001;
+}
+
+static bool
+mode_in_range(struct drm_display_mode *mode, struct edid *edid,
+ struct detailed_timing *timing)
+{
+ u32 max_clock;
+ u8 *t = (u8 *)timing;
+
+ if (!mode_in_hsync_range(mode, edid, t))
+ return false;
+
+ if (!mode_in_vsync_range(mode, edid, t))
+ return false;
+
+ if ((max_clock = range_pixel_clock(edid, t)))
+ if (mode->clock > max_clock)
+ return false;
+
+ /* 1.4 max horizontal check */
+ if (edid->revision >= 4 && t[10] == 0x04)
+ if (t[13] && mode->hdisplay > 8 * (t[13] + (256 * (t[12]&0x3))))
+ return false;
+
+ if (mode_is_rb(mode) && !drm_monitor_supports_rb(edid))
+ return false;
+
+ return true;
+}
+
+/*
+ * XXX If drm_dmt_modes ever regrows the CVT-R modes (and it will) this will
+ * need to account for them.
+ */
+static int
+drm_gtf_modes_for_range(struct drm_connector *connector, struct edid *edid,
+ struct detailed_timing *timing)
+{
+ int i, modes = 0;
+ struct drm_display_mode *newmode;
+ struct drm_device *dev = connector->dev;
+
+ for (i = 0; i < drm_num_dmt_modes; i++) {
+ if (mode_in_range(drm_dmt_modes + i, edid, timing)) {
+ newmode = drm_mode_duplicate(dev, &drm_dmt_modes[i]);
+ if (newmode) {
+ drm_mode_probed_add(connector, newmode);
+ modes++;
+ }
+ }
+ }
+
+ return modes;
+}
+
+static void
+do_inferred_modes(struct detailed_timing *timing, void *c)
+{
+ struct detailed_mode_closure *closure = c;
+ struct detailed_non_pixel *data = &timing->data.other_data;
+ int gtf = (closure->edid->features & DRM_EDID_FEATURE_DEFAULT_GTF);
+
+ if (gtf && data->type == EDID_DETAIL_MONITOR_RANGE)
+ closure->modes += drm_gtf_modes_for_range(closure->connector,
+ closure->edid,
+ timing);
+}
+
+static int
+add_inferred_modes(struct drm_connector *connector, struct edid *edid)
+{
+ struct detailed_mode_closure closure = {
+ connector, edid, 0, 0, 0
+ };
+
+ if (version_greater(edid, 1, 0))
+ drm_for_each_detailed_block((u8 *)edid, do_inferred_modes,
+ &closure);
+
+ return closure.modes;
+}
+
+static int
+drm_est3_modes(struct drm_connector *connector, struct detailed_timing *timing)
+{
+ int i, j, m, modes = 0;
+ struct drm_display_mode *mode;
+ u8 *est = ((u8 *)timing) + 5;
+
+ for (i = 0; i < 6; i++) {
+ for (j = 7; j > 0; j--) {
+ m = (i * 8) + (7 - j);
+ if (m >= DRM_ARRAY_SIZE(est3_modes))
+ break;
+ if (est[i] & (1 << j)) {
+ mode = drm_mode_find_dmt(connector->dev,
+ est3_modes[m].w,
+ est3_modes[m].h,
+ est3_modes[m].r
+ /*, est3_modes[m].rb */);
+ if (mode) {
+ drm_mode_probed_add(connector, mode);
+ modes++;
+ }
+ }
+ }
+ }
+
+ return modes;
+}
+
+static void
+do_established_modes(struct detailed_timing *timing, void *c)
+{
+ struct detailed_mode_closure *closure = c;
+ struct detailed_non_pixel *data = &timing->data.other_data;
+
+ if (data->type == EDID_DETAIL_EST_TIMINGS)
+ closure->modes += drm_est3_modes(closure->connector, timing);
+}
+
+/**
+ * add_established_modes - get est. modes from EDID and add them
+ * @edid: EDID block to scan
+ *
+ * Each EDID block contains a bitmap of the supported "established modes" list
+ * (defined above). Tease them out and add them to the global modes list.
+ */
+static int
+add_established_modes(struct drm_connector *connector, struct edid *edid)
+{
+ struct drm_device *dev = connector->dev;
+ unsigned long est_bits = edid->established_timings.t1 |
+ (edid->established_timings.t2 << 8) |
+ ((edid->established_timings.mfg_rsvd & 0x80) << 9);
+ int i, modes = 0;
+ struct detailed_mode_closure closure = {
+ connector, edid, 0, 0, 0
+ };
+
+ for (i = 0; i <= EDID_EST_TIMINGS; i++) {
+ if (est_bits & (1<<i)) {
+ struct drm_display_mode *newmode;
+ newmode = drm_mode_duplicate(dev, &edid_est_modes[i]);
+ if (newmode) {
+ drm_mode_probed_add(connector, newmode);
+ modes++;
+ }
+ }
+ }
+
+ if (version_greater(edid, 1, 0))
+ drm_for_each_detailed_block((u8 *)edid,
+ do_established_modes, &closure);
+
+ return modes + closure.modes;
+}
+
+static void
+do_standard_modes(struct detailed_timing *timing, void *c)
+{
+ struct detailed_mode_closure *closure = c;
+ struct detailed_non_pixel *data = &timing->data.other_data;
+ struct drm_connector *connector = closure->connector;
+ struct edid *edid = closure->edid;
+
+ if (data->type == EDID_DETAIL_STD_MODES) {
+ int i;
+ for (i = 0; i < 6; i++) {
+ struct std_timing *std;
+ struct drm_display_mode *newmode;
+
+ std = &data->data.timings[i];
+ newmode = drm_mode_std(connector, edid, std,
+ edid->revision);
+ if (newmode) {
+ drm_mode_probed_add(connector, newmode);
+ closure->modes++;
+ }
+ }
+ }
+}
+
+/**
+ * add_standard_modes - get std. modes from EDID and add them
+ * @edid: EDID block to scan
+ *
+ * Standard modes can be calculated using the appropriate standard (DMT,
+ * GTF or CVT. Grab them from @edid and add them to the list.
+ */
+static int
+add_standard_modes(struct drm_connector *connector, struct edid *edid)
+{
+ int i, modes = 0;
+ struct detailed_mode_closure closure = {
+ connector, edid, 0, 0, 0
+ };
+
+ for (i = 0; i < EDID_STD_TIMINGS; i++) {
+ struct drm_display_mode *newmode;
+
+ newmode = drm_mode_std(connector, edid,
+ &edid->standard_timings[i],
+ edid->revision);
+ if (newmode) {
+ drm_mode_probed_add(connector, newmode);
+ modes++;
+ }
+ }
+
+ if (version_greater(edid, 1, 0))
+ drm_for_each_detailed_block((u8 *)edid, do_standard_modes,
+ &closure);
+
+ /* XXX should also look for standard codes in VTB blocks */
+
+ return modes + closure.modes;
+}
+
+static int drm_cvt_modes(struct drm_connector *connector,
+ struct detailed_timing *timing)
+{
+ int i, j, modes = 0;
+ struct drm_display_mode *newmode;
+ struct drm_device *dev = connector->dev;
+ struct cvt_timing *cvt;
+ const int rates[] = { 60, 85, 75, 60, 50 };
+ const u8 empty[3] = { 0, 0, 0 };
+
+ for (i = 0; i < 4; i++) {
+ int width = 0, height;
+ cvt = &(timing->data.other_data.data.cvt[i]);
+
+ if (!memcmp(cvt->code, empty, 3))
+ continue;
+
+ height = (cvt->code[0] + ((cvt->code[1] & 0xf0) << 4) + 1) * 2;
+ switch (cvt->code[1] & 0x0c) {
+ case 0x00:
+ width = height * 4 / 3;
+ break;
+ case 0x04:
+ width = height * 16 / 9;
+ break;
+ case 0x08:
+ width = height * 16 / 10;
+ break;
+ case 0x0c:
+ width = height * 15 / 9;
+ break;
+ }
+
+ for (j = 1; j < 5; j++) {
+ if (cvt->code[2] & (1 << j)) {
+ newmode = drm_cvt_mode(dev, width, height,
+ rates[j], j == 0,
+ false, false);
+ if (newmode) {
+ drm_mode_probed_add(connector, newmode);
+ modes++;
+ }
+ }
+ }
+ }
+
+ return modes;
+}
+
+static void
+do_cvt_mode(struct detailed_timing *timing, void *c)
+{
+ struct detailed_mode_closure *closure = c;
+ struct detailed_non_pixel *data = &timing->data.other_data;
+
+ if (data->type == EDID_DETAIL_CVT_3BYTE)
+ closure->modes += drm_cvt_modes(closure->connector, timing);
+}
+
+static int
+add_cvt_modes(struct drm_connector *connector, struct edid *edid)
+{
+ struct detailed_mode_closure closure = {
+ connector, edid, 0, 0, 0
+ };
+
+ if (version_greater(edid, 1, 2))
+ drm_for_each_detailed_block((u8 *)edid, do_cvt_mode, &closure);
+
+ /* XXX should also look for CVT codes in VTB blocks */
+
+ return closure.modes;
+}
+
+static void
+do_detailed_mode(struct detailed_timing *timing, void *c)
+{
+ struct detailed_mode_closure *closure = c;
+ struct drm_display_mode *newmode;
+
+ if (timing->pixel_clock) {
+ newmode = drm_mode_detailed(closure->connector->dev,
+ closure->edid, timing,
+ closure->quirks);
+ if (!newmode)
+ return;
+
+ if (closure->preferred)
+ newmode->type |= DRM_MODE_TYPE_PREFERRED;
+
+ drm_mode_probed_add(closure->connector, newmode);
+ closure->modes++;
+ closure->preferred = 0;
+ }
+}
+
+/*
+ * add_detailed_modes - Add modes from detailed timings
+ * @connector: attached connector
+ * @edid: EDID block to scan
+ * @quirks: quirks to apply
+ */
+static int
+add_detailed_modes(struct drm_connector *connector, struct edid *edid,
+ u32 quirks)
+{
+ struct detailed_mode_closure closure = {
+ connector,
+ edid,
+ 1,
+ quirks,
+ 0
+ };
+
+ if (closure.preferred && !version_greater(edid, 1, 3))
+ closure.preferred =
+ (edid->features & DRM_EDID_FEATURE_PREFERRED_TIMING);
+
+ drm_for_each_detailed_block((u8 *)edid, do_detailed_mode, &closure);
+
+ return closure.modes;
+}
+
+#define HDMI_IDENTIFIER 0x000C03
+#define AUDIO_BLOCK 0x01
+#define VENDOR_BLOCK 0x03
+#define SPEAKER_BLOCK 0x04
+#define EDID_BASIC_AUDIO (1 << 6)
+
+/**
+ * Search EDID for CEA extension block.
+ */
+u8 *drm_find_cea_extension(struct edid *edid)
+{
+ u8 *edid_ext = NULL;
+ int i;
+
+ /* No EDID or EDID extensions */
+ if (edid == NULL || edid->extensions == 0)
+ return NULL;
+
+ /* Find CEA extension */
+ for (i = 0; i < edid->extensions; i++) {
+ edid_ext = (u8 *)edid + EDID_LENGTH * (i + 1);
+ if (edid_ext[0] == CEA_EXT)
+ break;
+ }
+
+ if (i == edid->extensions)
+ return NULL;
+
+ return edid_ext;
+}
+
+static void
+parse_hdmi_vsdb(struct drm_connector *connector, uint8_t *db)
+{
+ connector->eld[5] |= (db[6] >> 7) << 1; /* Supports_AI */
+
+ connector->dvi_dual = db[6] & 1;
+ connector->max_tmds_clock = db[7] * 5;
+
+ connector->latency_present[0] = db[8] >> 7;
+ connector->latency_present[1] = (db[8] >> 6) & 1;
+ connector->video_latency[0] = db[9];
+ connector->audio_latency[0] = db[10];
+ connector->video_latency[1] = db[11];
+ connector->audio_latency[1] = db[12];
+
+ DRM_DEBUG_KMS("HDMI: DVI dual %d, "
+ "max TMDS clock %d, "
+ "latency present %d %d, "
+ "video latency %d %d, "
+ "audio latency %d %d\n",
+ connector->dvi_dual,
+ connector->max_tmds_clock,
+ (int) connector->latency_present[0],
+ (int) connector->latency_present[1],
+ connector->video_latency[0],
+ connector->video_latency[1],
+ connector->audio_latency[0],
+ connector->audio_latency[1]);
+}
+
+static void
+monitor_name(struct detailed_timing *t, void *data)
+{
+ if (t->data.other_data.type == EDID_DETAIL_MONITOR_NAME)
+ *(u8 **)data = t->data.other_data.data.str.str;
+}
+
+/**
+ * drm_edid_to_eld - build ELD from EDID
+ * @connector: connector corresponding to the HDMI/DP sink
+ * @edid: EDID to parse
+ *
+ * Fill the ELD (EDID-Like Data) buffer for passing to the audio driver.
+ * Some ELD fields are left to the graphics driver caller:
+ * - Conn_Type
+ * - HDCP
+ * - Port_ID
+ */
+void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid)
+{
+ uint8_t *eld = connector->eld;
+ u8 *cea;
+ u8 *name;
+ u8 *db;
+ int sad_count = 0;
+ int mnl;
+ int dbl;
+
+ memset(eld, 0, sizeof(connector->eld));
+
+ cea = drm_find_cea_extension(edid);
+ if (!cea) {
+ DRM_DEBUG_KMS("ELD: no CEA Extension found\n");
+ return;
+ }
+
+ name = NULL;
+ drm_for_each_detailed_block((u8 *)edid, monitor_name, &name);
+ for (mnl = 0; name && mnl < 13; mnl++) {
+ if (name[mnl] == 0x0a)
+ break;
+ eld[20 + mnl] = name[mnl];
+ }
+ eld[4] = (cea[1] << 5) | mnl;
+ DRM_DEBUG_KMS("ELD monitor %s\n", eld + 20);
+
+ eld[0] = 2 << 3; /* ELD version: 2 */
+
+ eld[16] = edid->mfg_id[0];
+ eld[17] = edid->mfg_id[1];
+ eld[18] = edid->prod_code[0];
+ eld[19] = edid->prod_code[1];
+
+ for (db = cea + 4; db < cea + cea[2]; db += dbl + 1) {
+ dbl = db[0] & 0x1f;
+
+ switch ((db[0] & 0xe0) >> 5) {
+ case AUDIO_BLOCK: /* Audio Data Block, contains SADs */
+ sad_count = dbl / 3;
+ memcpy(eld + 20 + mnl, &db[1], dbl);
+ break;
+ case SPEAKER_BLOCK: /* Speaker Allocation Data Block */
+ eld[7] = db[1];
+ break;
+ case VENDOR_BLOCK:
+ /* HDMI Vendor-Specific Data Block */
+ if (db[1] == 0x03 && db[2] == 0x0c && db[3] == 0)
+ parse_hdmi_vsdb(connector, db);
+ break;
+ default:
+ break;
+ }
+ }
+ eld[5] |= sad_count << 4;
+ eld[2] = (20 + mnl + sad_count * 3 + 3) / 4;
+
+ DRM_DEBUG_KMS("ELD size %d, SAD count %d\n", (int)eld[2], sad_count);
+}
+
+/**
+ * drm_av_sync_delay - HDMI/DP sink audio-video sync delay in millisecond
+ * @connector: connector associated with the HDMI/DP sink
+ * @mode: the display mode
+ */
+int drm_av_sync_delay(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ int i = !!(mode->flags & DRM_MODE_FLAG_INTERLACE);
+ int a, v;
+
+ if (!connector->latency_present[0])
+ return 0;
+ if (!connector->latency_present[1])
+ i = 0;
+
+ a = connector->audio_latency[i];
+ v = connector->video_latency[i];
+
+ /*
+ * HDMI/DP sink doesn't support audio or video?
+ */
+ if (a == 255 || v == 255)
+ return 0;
+
+ /*
+ * Convert raw EDID values to millisecond.
+ * Treat unknown latency as 0ms.
+ */
+ if (a)
+ a = min(2 * (a - 1), 500);
+ if (v)
+ v = min(2 * (v - 1), 500);
+
+ return max(v - a, 0);
+}
+
+/**
+ * drm_select_eld - select one ELD from multiple HDMI/DP sinks
+ * @encoder: the encoder just changed display mode
+ * @mode: the adjusted display mode
+ *
+ * It's possible for one encoder to be associated with multiple HDMI/DP sinks.
+ * The policy is now hard coded to simply use the first HDMI/DP sink's ELD.
+ */
+struct drm_connector *drm_select_eld(struct drm_encoder *encoder,
+ struct drm_display_mode *mode)
+{
+ struct drm_connector *connector;
+ struct drm_device *dev = encoder->dev;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head)
+ if (connector->encoder == encoder && connector->eld[0])
+ return connector;
+
+ return NULL;
+}
+
+/**
+ * drm_detect_hdmi_monitor - detect whether monitor is hdmi.
+ * @edid: monitor EDID information
+ *
+ * Parse the CEA extension according to CEA-861-B.
+ * Return true if HDMI, false if not or unknown.
+ */
+bool drm_detect_hdmi_monitor(struct edid *edid)
+{
+ u8 *edid_ext;
+ int i, hdmi_id;
+ int start_offset, end_offset;
+ bool is_hdmi = false;
+
+ edid_ext = drm_find_cea_extension(edid);
+ if (!edid_ext)
+ goto end;
+
+ /* Data block offset in CEA extension block */
+ start_offset = 4;
+ end_offset = edid_ext[2];
+
+ /*
+ * Because HDMI identifier is in Vendor Specific Block,
+ * search it from all data blocks of CEA extension.
+ */
+ for (i = start_offset; i < end_offset;
+ /* Increased by data block len */
+ i += ((edid_ext[i] & 0x1f) + 1)) {
+ /* Find vendor specific block */
+ if ((edid_ext[i] >> 5) == VENDOR_BLOCK) {
+ hdmi_id = edid_ext[i + 1] | (edid_ext[i + 2] << 8) |
+ edid_ext[i + 3] << 16;
+ /* Find HDMI identifier */
+ if (hdmi_id == HDMI_IDENTIFIER)
+ is_hdmi = true;
+ break;
+ }
+ }
+
+end:
+ return is_hdmi;
+}
+
+/**
+ * drm_detect_monitor_audio - check monitor audio capability
+ *
+ * Monitor should have CEA extension block.
+ * If monitor has 'basic audio', but no CEA audio blocks, it's 'basic
+ * audio' only. If there is any audio extension block and supported
+ * audio format, assume at least 'basic audio' support, even if 'basic
+ * audio' is not defined in EDID.
+ *
+ */
+bool drm_detect_monitor_audio(struct edid *edid)
+{
+ u8 *edid_ext;
+ int i, j;
+ bool has_audio = false;
+ int start_offset, end_offset;
+
+ edid_ext = drm_find_cea_extension(edid);
+ if (!edid_ext)
+ goto end;
+
+ has_audio = ((edid_ext[3] & EDID_BASIC_AUDIO) != 0);
+
+ if (has_audio) {
+ DRM_DEBUG_KMS("Monitor has basic audio support\n");
+ goto end;
+ }
+
+ /* Data block offset in CEA extension block */
+ start_offset = 4;
+ end_offset = edid_ext[2];
+
+ for (i = start_offset; i < end_offset;
+ i += ((edid_ext[i] & 0x1f) + 1)) {
+ if ((edid_ext[i] >> 5) == AUDIO_BLOCK) {
+ has_audio = true;
+ for (j = 1; j < (edid_ext[i] & 0x1f); j += 3)
+ DRM_DEBUG_KMS("CEA audio format %d\n",
+ (edid_ext[i + j] >> 3) & 0xf);
+ goto end;
+ }
+ }
+end:
+ return has_audio;
+}
+
+/**
+ * drm_add_display_info - pull display info out if present
+ * @edid: EDID data
+ * @info: display info (attached to connector)
+ *
+ * Grab any available display info and stuff it into the drm_display_info
+ * structure that's part of the connector. Useful for tracking bpp and
+ * color spaces.
+ */
+static void drm_add_display_info(struct edid *edid,
+ struct drm_display_info *info)
+{
+ u8 *edid_ext;
+
+ info->width_mm = edid->width_cm * 10;
+ info->height_mm = edid->height_cm * 10;
+
+ /* driver figures it out in this case */
+ info->bpc = 0;
+ info->color_formats = 0;
+
+ /* Only defined for 1.4 with digital displays */
+ if (edid->revision < 4)
+ return;
+
+ if (!(edid->input & DRM_EDID_INPUT_DIGITAL))
+ return;
+
+ switch (edid->input & DRM_EDID_DIGITAL_DEPTH_MASK) {
+ case DRM_EDID_DIGITAL_DEPTH_6:
+ info->bpc = 6;
+ break;
+ case DRM_EDID_DIGITAL_DEPTH_8:
+ info->bpc = 8;
+ break;
+ case DRM_EDID_DIGITAL_DEPTH_10:
+ info->bpc = 10;
+ break;
+ case DRM_EDID_DIGITAL_DEPTH_12:
+ info->bpc = 12;
+ break;
+ case DRM_EDID_DIGITAL_DEPTH_14:
+ info->bpc = 14;
+ break;
+ case DRM_EDID_DIGITAL_DEPTH_16:
+ info->bpc = 16;
+ break;
+ case DRM_EDID_DIGITAL_DEPTH_UNDEF:
+ default:
+ info->bpc = 0;
+ break;
+ }
+
+ info->color_formats = DRM_COLOR_FORMAT_RGB444;
+ if (info->color_formats & DRM_EDID_FEATURE_RGB_YCRCB444)
+ info->color_formats = DRM_COLOR_FORMAT_YCRCB444;
+ if (info->color_formats & DRM_EDID_FEATURE_RGB_YCRCB422)
+ info->color_formats = DRM_COLOR_FORMAT_YCRCB422;
+
+ /* Get data from CEA blocks if present */
+ edid_ext = drm_find_cea_extension(edid);
+ if (!edid_ext)
+ return;
+
+ info->cea_rev = edid_ext[1];
+}
+
+/**
+ * drm_add_edid_modes - add modes from EDID data, if available
+ * @connector: connector we're probing
+ * @edid: edid data
+ *
+ * Add the specified modes to the connector's mode list.
+ *
+ * Return number of modes added or 0 if we couldn't find any.
+ */
+int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
+{
+ int num_modes = 0;
+ u32 quirks;
+
+ if (edid == NULL) {
+ return 0;
+ }
+ if (!drm_edid_is_valid(edid)) {
+ device_printf(connector->dev->device, "%s: EDID invalid.\n",
+ drm_get_connector_name(connector));
+ return 0;
+ }
+
+ quirks = edid_get_quirks(edid);
+
+ /*
+ * EDID spec says modes should be preferred in this order:
+ * - preferred detailed mode
+ * - other detailed modes from base block
+ * - detailed modes from extension blocks
+ * - CVT 3-byte code modes
+ * - standard timing codes
+ * - established timing codes
+ * - modes inferred from GTF or CVT range information
+ *
+ * We get this pretty much right.
+ *
+ * XXX order for additional mode types in extension blocks?
+ */
+ num_modes += add_detailed_modes(connector, edid, quirks);
+ num_modes += add_cvt_modes(connector, edid);
+ num_modes += add_standard_modes(connector, edid);
+ num_modes += add_established_modes(connector, edid);
+ num_modes += add_inferred_modes(connector, edid);
+
+ if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
+ edid_fixup_preferred(connector, quirks);
+
+ drm_add_display_info(edid, &connector->display_info);
+
+ return num_modes;
+}
+
+/**
+ * drm_add_modes_noedid - add modes for the connectors without EDID
+ * @connector: connector we're probing
+ * @hdisplay: the horizontal display limit
+ * @vdisplay: the vertical display limit
+ *
+ * Add the specified modes to the connector's mode list. Only when the
+ * hdisplay/vdisplay is not beyond the given limit, it will be added.
+ *
+ * Return number of modes added or 0 if we couldn't find any.
+ */
+int drm_add_modes_noedid(struct drm_connector *connector,
+ int hdisplay, int vdisplay)
+{
+ int i, count, num_modes = 0;
+ struct drm_display_mode *mode;
+ struct drm_device *dev = connector->dev;
+
+ count = sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode);
+ if (hdisplay < 0)
+ hdisplay = 0;
+ if (vdisplay < 0)
+ vdisplay = 0;
+
+ for (i = 0; i < count; i++) {
+ struct drm_display_mode *ptr = &drm_dmt_modes[i];
+ if (hdisplay && vdisplay) {
+ /*
+ * Only when two are valid, they will be used to check
+ * whether the mode should be added to the mode list of
+ * the connector.
+ */
+ if (ptr->hdisplay > hdisplay ||
+ ptr->vdisplay > vdisplay)
+ continue;
+ }
+ if (drm_mode_vrefresh(ptr) > 61)
+ continue;
+ mode = drm_mode_duplicate(dev, ptr);
+ if (mode) {
+ drm_mode_probed_add(connector, mode);
+ num_modes++;
+ }
+ }
+ return num_modes;
+}
diff --git a/sys/dev/drm2/drm_edid.h b/sys/dev/drm2/drm_edid.h
new file mode 100644
index 000000000000..e0c147054385
--- /dev/null
+++ b/sys/dev/drm2/drm_edid.h
@@ -0,0 +1,244 @@
+/*
+ * Copyright © 2007-2008 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ *
+ * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 __DRM_EDID_H__
+#define __DRM_EDID_H__
+
+#include <sys/types.h>
+#include <dev/drm2/drmP.h>
+
+#define EDID_LENGTH 128
+#define DDC_ADDR 0x50
+
+#define CEA_EXT 0x02
+#define VTB_EXT 0x10
+#define DI_EXT 0x40
+#define LS_EXT 0x50
+#define MI_EXT 0x60
+
+struct est_timings {
+ u8 t1;
+ u8 t2;
+ u8 mfg_rsvd;
+} __attribute__((packed));
+
+/* 00=16:10, 01=4:3, 10=5:4, 11=16:9 */
+#define EDID_TIMING_ASPECT_SHIFT 6
+#define EDID_TIMING_ASPECT_MASK (0x3 << EDID_TIMING_ASPECT_SHIFT)
+
+/* need to add 60 */
+#define EDID_TIMING_VFREQ_SHIFT 0
+#define EDID_TIMING_VFREQ_MASK (0x3f << EDID_TIMING_VFREQ_SHIFT)
+
+struct std_timing {
+ u8 hsize; /* need to multiply by 8 then add 248 */
+ u8 vfreq_aspect;
+} __attribute__((packed));
+
+#define DRM_EDID_PT_HSYNC_POSITIVE (1 << 1)
+#define DRM_EDID_PT_VSYNC_POSITIVE (1 << 2)
+#define DRM_EDID_PT_SEPARATE_SYNC (3 << 3)
+#define DRM_EDID_PT_STEREO (1 << 5)
+#define DRM_EDID_PT_INTERLACED (1 << 7)
+
+/* If detailed data is pixel timing */
+struct detailed_pixel_timing {
+ u8 hactive_lo;
+ u8 hblank_lo;
+ u8 hactive_hblank_hi;
+ u8 vactive_lo;
+ u8 vblank_lo;
+ u8 vactive_vblank_hi;
+ u8 hsync_offset_lo;
+ u8 hsync_pulse_width_lo;
+ u8 vsync_offset_pulse_width_lo;
+ u8 hsync_vsync_offset_pulse_width_hi;
+ u8 width_mm_lo;
+ u8 height_mm_lo;
+ u8 width_height_mm_hi;
+ u8 hborder;
+ u8 vborder;
+ u8 misc;
+} __attribute__((packed));
+
+/* If it's not pixel timing, it'll be one of the below */
+struct detailed_data_string {
+ u8 str[13];
+} __attribute__((packed));
+
+struct detailed_data_monitor_range {
+ u8 min_vfreq;
+ u8 max_vfreq;
+ u8 min_hfreq_khz;
+ u8 max_hfreq_khz;
+ u8 pixel_clock_mhz; /* need to multiply by 10 */
+ u16 sec_gtf_toggle; /* A000=use above, 20=use below */
+ u8 hfreq_start_khz; /* need to multiply by 2 */
+ u8 c; /* need to divide by 2 */
+ u16 m;
+ u8 k;
+ u8 j; /* need to divide by 2 */
+} __attribute__((packed));
+
+struct detailed_data_wpindex {
+ u8 white_yx_lo; /* Lower 2 bits each */
+ u8 white_x_hi;
+ u8 white_y_hi;
+ u8 gamma; /* need to divide by 100 then add 1 */
+} __attribute__((packed));
+
+struct detailed_data_color_point {
+ u8 windex1;
+ u8 wpindex1[3];
+ u8 windex2;
+ u8 wpindex2[3];
+} __attribute__((packed));
+
+struct cvt_timing {
+ u8 code[3];
+} __attribute__((packed));
+
+struct detailed_non_pixel {
+ u8 pad1;
+ u8 type; /* ff=serial, fe=string, fd=monitor range, fc=monitor name
+ fb=color point data, fa=standard timing data,
+ f9=undefined, f8=mfg. reserved */
+ u8 pad2;
+ union {
+ struct detailed_data_string str;
+ struct detailed_data_monitor_range range;
+ struct detailed_data_wpindex color;
+ struct std_timing timings[6];
+ struct cvt_timing cvt[4];
+ } data;
+} __attribute__((packed));
+
+#define EDID_DETAIL_EST_TIMINGS 0xf7
+#define EDID_DETAIL_CVT_3BYTE 0xf8
+#define EDID_DETAIL_COLOR_MGMT_DATA 0xf9
+#define EDID_DETAIL_STD_MODES 0xfa
+#define EDID_DETAIL_MONITOR_CPDATA 0xfb
+#define EDID_DETAIL_MONITOR_NAME 0xfc
+#define EDID_DETAIL_MONITOR_RANGE 0xfd
+#define EDID_DETAIL_MONITOR_STRING 0xfe
+#define EDID_DETAIL_MONITOR_SERIAL 0xff
+
+struct detailed_timing {
+ u16 pixel_clock; /* need to multiply by 10 KHz */
+ union {
+ struct detailed_pixel_timing pixel_data;
+ struct detailed_non_pixel other_data;
+ } data;
+} __attribute__((packed));
+
+#define DRM_EDID_INPUT_SERRATION_VSYNC (1 << 0)
+#define DRM_EDID_INPUT_SYNC_ON_GREEN (1 << 1)
+#define DRM_EDID_INPUT_COMPOSITE_SYNC (1 << 2)
+#define DRM_EDID_INPUT_SEPARATE_SYNCS (1 << 3)
+#define DRM_EDID_INPUT_BLANK_TO_BLACK (1 << 4)
+#define DRM_EDID_INPUT_VIDEO_LEVEL (3 << 5)
+#define DRM_EDID_INPUT_DIGITAL (1 << 7)
+#define DRM_EDID_DIGITAL_DEPTH_MASK (7 << 4)
+#define DRM_EDID_DIGITAL_DEPTH_UNDEF (0 << 4)
+#define DRM_EDID_DIGITAL_DEPTH_6 (1 << 4)
+#define DRM_EDID_DIGITAL_DEPTH_8 (2 << 4)
+#define DRM_EDID_DIGITAL_DEPTH_10 (3 << 4)
+#define DRM_EDID_DIGITAL_DEPTH_12 (4 << 4)
+#define DRM_EDID_DIGITAL_DEPTH_14 (5 << 4)
+#define DRM_EDID_DIGITAL_DEPTH_16 (6 << 4)
+#define DRM_EDID_DIGITAL_DEPTH_RSVD (7 << 4)
+#define DRM_EDID_DIGITAL_TYPE_UNDEF (0)
+#define DRM_EDID_DIGITAL_TYPE_DVI (1)
+#define DRM_EDID_DIGITAL_TYPE_HDMI_A (2)
+#define DRM_EDID_DIGITAL_TYPE_HDMI_B (3)
+#define DRM_EDID_DIGITAL_TYPE_MDDI (4)
+#define DRM_EDID_DIGITAL_TYPE_DP (5)
+
+#define DRM_EDID_FEATURE_DEFAULT_GTF (1 << 0)
+#define DRM_EDID_FEATURE_PREFERRED_TIMING (1 << 1)
+#define DRM_EDID_FEATURE_STANDARD_COLOR (1 << 2)
+#define DRM_EDID_FEATURE_DISPLAY_TYPE (3 << 3) /* 00=mono, 01=rgb, 10=non-rgb, 11=unknown */
+/* If digital */
+#define DRM_EDID_FEATURE_COLOR_MASK (3 << 3)
+#define DRM_EDID_FEATURE_RGB (0 << 3)
+#define DRM_EDID_FEATURE_RGB_YCRCB444 (1 << 3)
+#define DRM_EDID_FEATURE_RGB_YCRCB422 (2 << 3)
+#define DRM_EDID_FEATURE_RGB_YCRCB (3 << 3) /* both 4:4:4 and 4:2:2 */
+
+#define DRM_EDID_FEATURE_PM_ACTIVE_OFF (1 << 5)
+#define DRM_EDID_FEATURE_PM_SUSPEND (1 << 6)
+#define DRM_EDID_FEATURE_PM_STANDBY (1 << 7)
+
+struct edid {
+ u8 header[8];
+ /* Vendor & product info */
+ u8 mfg_id[2];
+ u8 prod_code[2];
+ u32 serial; /* FIXME: byte order */
+ u8 mfg_week;
+ u8 mfg_year;
+ /* EDID version */
+ u8 version;
+ u8 revision;
+ /* Display info: */
+ u8 input;
+ u8 width_cm;
+ u8 height_cm;
+ u8 gamma;
+ u8 features;
+ /* Color characteristics */
+ u8 red_green_lo;
+ u8 black_white_lo;
+ u8 red_x;
+ u8 red_y;
+ u8 green_x;
+ u8 green_y;
+ u8 blue_x;
+ u8 blue_y;
+ u8 white_x;
+ u8 white_y;
+ /* Est. timings and mfg rsvd timings*/
+ struct est_timings established_timings;
+ /* Standard timings 1-8*/
+ struct std_timing standard_timings[8];
+ /* Detailing timings 1-4 */
+ struct detailed_timing detailed_timings[4];
+ /* Number of 128 byte ext. blocks */
+ u8 extensions;
+ /* Checksum */
+ u8 checksum;
+} __attribute__((packed));
+
+#define EDID_PRODUCT_ID(e) ((e)->prod_code[0] | ((e)->prod_code[1] << 8))
+
+struct drm_encoder;
+struct drm_connector;
+struct drm_display_mode;
+void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid);
+int drm_av_sync_delay(struct drm_connector *connector,
+ struct drm_display_mode *mode);
+struct drm_connector *drm_select_eld(struct drm_encoder *encoder,
+ struct drm_display_mode *mode);
+
+#endif /* __DRM_EDID_H__ */
diff --git a/sys/dev/drm2/drm_edid_modes.h b/sys/dev/drm2/drm_edid_modes.h
new file mode 100644
index 000000000000..beded269bf4d
--- /dev/null
+++ b/sys/dev/drm2/drm_edid_modes.h
@@ -0,0 +1,381 @@
+/*
+ * Copyright (c) 2007-2008 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ * Copyright 2010 Red Hat, Inc.
+ *
+ * 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, sub license,
+ * 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT. 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$
+ */
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_edid.h>
+
+/*
+ * Autogenerated from the DMT spec.
+ * This table is copied from xfree86/modes/xf86EdidModes.c.
+ * But the mode with Reduced blank feature is deleted.
+ */
+static struct drm_display_mode drm_dmt_modes[] = {
+ /* 640x350@85Hz */
+ { DRM_MODE("640x350", DRM_MODE_TYPE_DRIVER, 31500, 640, 672,
+ 736, 832, 0, 350, 382, 385, 445, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 640x400@85Hz */
+ { DRM_MODE("640x400", DRM_MODE_TYPE_DRIVER, 31500, 640, 672,
+ 736, 832, 0, 400, 401, 404, 445, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 720x400@85Hz */
+ { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 756,
+ 828, 936, 0, 400, 401, 404, 446, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 640x480@60Hz */
+ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
+ 752, 800, 0, 480, 489, 492, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 640x480@72Hz */
+ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664,
+ 704, 832, 0, 480, 489, 492, 520, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 640x480@75Hz */
+ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 656,
+ 720, 840, 0, 480, 481, 484, 500, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 640x480@85Hz */
+ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 36000, 640, 696,
+ 752, 832, 0, 480, 481, 484, 509, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 800x600@56Hz */
+ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 36000, 800, 824,
+ 896, 1024, 0, 600, 601, 603, 625, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 800x600@60Hz */
+ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840,
+ 968, 1056, 0, 600, 601, 605, 628, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 800x600@72Hz */
+ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 50000, 800, 856,
+ 976, 1040, 0, 600, 637, 643, 666, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 800x600@75Hz */
+ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 49500, 800, 816,
+ 896, 1056, 0, 600, 601, 604, 625, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 800x600@85Hz */
+ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 56250, 800, 832,
+ 896, 1048, 0, 600, 601, 604, 631, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 848x480@60Hz */
+ { DRM_MODE("848x480", DRM_MODE_TYPE_DRIVER, 33750, 848, 864,
+ 976, 1088, 0, 480, 486, 494, 517, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1024x768@43Hz, interlace */
+ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 44900, 1024, 1032,
+ 1208, 1264, 0, 768, 768, 772, 817, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
+ DRM_MODE_FLAG_INTERLACE) },
+ /* 1024x768@60Hz */
+ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048,
+ 1184, 1344, 0, 768, 771, 777, 806, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1024x768@70Hz */
+ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048,
+ 1184, 1328, 0, 768, 771, 777, 806, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1024x768@75Hz */
+ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78750, 1024, 1040,
+ 1136, 1312, 0, 768, 769, 772, 800, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1024x768@85Hz */
+ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 94500, 1024, 1072,
+ 1168, 1376, 0, 768, 769, 772, 808, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1152x864@75Hz */
+ { DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216,
+ 1344, 1600, 0, 864, 865, 868, 900, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x768@60Hz */
+ { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 79500, 1280, 1344,
+ 1472, 1664, 0, 768, 771, 778, 798, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x768@75Hz */
+ { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 102250, 1280, 1360,
+ 1488, 1696, 0, 768, 771, 778, 805, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1280x768@85Hz */
+ { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 117500, 1280, 1360,
+ 1496, 1712, 0, 768, 771, 778, 809, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x800@60Hz */
+ { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 83500, 1280, 1352,
+ 1480, 1680, 0, 800, 803, 809, 831, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
+ /* 1280x800@75Hz */
+ { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 106500, 1280, 1360,
+ 1488, 1696, 0, 800, 803, 809, 838, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x800@85Hz */
+ { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 122500, 1280, 1360,
+ 1496, 1712, 0, 800, 803, 809, 843, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x960@60Hz */
+ { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1376,
+ 1488, 1800, 0, 960, 961, 964, 1000, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x960@85Hz */
+ { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1344,
+ 1504, 1728, 0, 960, 961, 964, 1011, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x1024@60Hz */
+ { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1328,
+ 1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x1024@75Hz */
+ { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296,
+ 1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1280x1024@85Hz */
+ { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 157500, 1280, 1344,
+ 1504, 1728, 0, 1024, 1025, 1028, 1072, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1360x768@60Hz */
+ { DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 85500, 1360, 1424,
+ 1536, 1792, 0, 768, 771, 777, 795, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1440x1050@60Hz */
+ { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 121750, 1400, 1488,
+ 1632, 1864, 0, 1050, 1053, 1057, 1089, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1440x1050@75Hz */
+ { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 156000, 1400, 1504,
+ 1648, 1896, 0, 1050, 1053, 1057, 1099, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1440x1050@85Hz */
+ { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 179500, 1400, 1504,
+ 1656, 1912, 0, 1050, 1053, 1057, 1105, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1440x900@60Hz */
+ { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 106500, 1440, 1520,
+ 1672, 1904, 0, 900, 903, 909, 934, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1440x900@75Hz */
+ { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 136750, 1440, 1536,
+ 1688, 1936, 0, 900, 903, 909, 942, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1440x900@85Hz */
+ { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 157000, 1440, 1544,
+ 1696, 1952, 0, 900, 903, 909, 948, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1600x1200@60Hz */
+ { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 162000, 1600, 1664,
+ 1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1600x1200@65Hz */
+ { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 175500, 1600, 1664,
+ 1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1600x1200@70Hz */
+ { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 189000, 1600, 1664,
+ 1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1600x1200@75Hz */
+ { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 202500, 1600, 1664,
+ 1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1600x1200@85Hz */
+ { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 229500, 1600, 1664,
+ 1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1680x1050@60Hz */
+ { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 146250, 1680, 1784,
+ 1960, 2240, 0, 1050, 1053, 1059, 1089, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1680x1050@75Hz */
+ { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 187000, 1680, 1800,
+ 1976, 2272, 0, 1050, 1053, 1059, 1099, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1680x1050@85Hz */
+ { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 214750, 1680, 1808,
+ 1984, 2288, 0, 1050, 1053, 1059, 1105, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1792x1344@60Hz */
+ { DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 204750, 1792, 1920,
+ 2120, 2448, 0, 1344, 1345, 1348, 1394, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1729x1344@75Hz */
+ { DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 261000, 1792, 1888,
+ 2104, 2456, 0, 1344, 1345, 1348, 1417, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1853x1392@60Hz */
+ { DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 218250, 1856, 1952,
+ 2176, 2528, 0, 1392, 1393, 1396, 1439, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1856x1392@75Hz */
+ { DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 288000, 1856, 1984,
+ 2208, 2560, 0, 1392, 1395, 1399, 1500, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1200@60Hz */
+ { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 193250, 1920, 2056,
+ 2256, 2592, 0, 1200, 1203, 1209, 1245, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1200@75Hz */
+ { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 245250, 1920, 2056,
+ 2264, 2608, 0, 1200, 1203, 1209, 1255, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1200@85Hz */
+ { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 281250, 1920, 2064,
+ 2272, 2624, 0, 1200, 1203, 1209, 1262, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1440@60Hz */
+ { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 234000, 1920, 2048,
+ 2256, 2600, 0, 1440, 1441, 1444, 1500, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 1920x1440@75Hz */
+ { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2064,
+ 2288, 2640, 0, 1440, 1441, 1444, 1500, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 2560x1600@60Hz */
+ { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 348500, 2560, 2752,
+ 3032, 3504, 0, 1600, 1603, 1609, 1658, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 2560x1600@75HZ */
+ { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 443250, 2560, 2768,
+ 3048, 3536, 0, 1600, 1603, 1609, 1672, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ /* 2560x1600@85HZ */
+ { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 505250, 2560, 2768,
+ 3048, 3536, 0, 1600, 1603, 1609, 1682, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
+};
+static const int drm_num_dmt_modes =
+ sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode);
+
+static struct drm_display_mode edid_est_modes[] = {
+ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840,
+ 968, 1056, 0, 600, 601, 605, 628, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@60Hz */
+ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 36000, 800, 824,
+ 896, 1024, 0, 600, 601, 603, 625, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@56Hz */
+ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 656,
+ 720, 840, 0, 480, 481, 484, 500, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@75Hz */
+ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664,
+ 704, 832, 0, 480, 489, 491, 520, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@72Hz */
+ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 30240, 640, 704,
+ 768, 864, 0, 480, 483, 486, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@67Hz */
+ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25200, 640, 656,
+ 752, 800, 0, 480, 490, 492, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@60Hz */
+ { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 738,
+ 846, 900, 0, 400, 421, 423, 449, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 720x400@88Hz */
+ { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 28320, 720, 738,
+ 846, 900, 0, 400, 412, 414, 449, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 720x400@70Hz */
+ { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296,
+ 1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1280x1024@75Hz */
+ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78800, 1024, 1040,
+ 1136, 1312, 0, 768, 769, 772, 800, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1024x768@75Hz */
+ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048,
+ 1184, 1328, 0, 768, 771, 777, 806, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 1024x768@70Hz */
+ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048,
+ 1184, 1344, 0, 768, 771, 777, 806, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 1024x768@60Hz */
+ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER,44900, 1024, 1032,
+ 1208, 1264, 0, 768, 768, 776, 817, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_INTERLACE) }, /* 1024x768@43Hz */
+ { DRM_MODE("832x624", DRM_MODE_TYPE_DRIVER, 57284, 832, 864,
+ 928, 1152, 0, 624, 625, 628, 667, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 832x624@75Hz */
+ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 49500, 800, 816,
+ 896, 1056, 0, 600, 601, 604, 625, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@75Hz */
+ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 50000, 800, 856,
+ 976, 1040, 0, 600, 637, 643, 666, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 800x600@72Hz */
+ { DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216,
+ 1344, 1600, 0, 864, 865, 868, 900, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1152x864@75Hz */
+};
+
+static const struct {
+ short w;
+ short h;
+ short r;
+ short rb;
+} est3_modes[] = {
+ /* byte 6 */
+ { 640, 350, 85, 0 },
+ { 640, 400, 85, 0 },
+ { 720, 400, 85, 0 },
+ { 640, 480, 85, 0 },
+ { 848, 480, 60, 0 },
+ { 800, 600, 85, 0 },
+ { 1024, 768, 85, 0 },
+ { 1152, 864, 75, 0 },
+ /* byte 7 */
+ { 1280, 768, 60, 1 },
+ { 1280, 768, 60, 0 },
+ { 1280, 768, 75, 0 },
+ { 1280, 768, 85, 0 },
+ { 1280, 960, 60, 0 },
+ { 1280, 960, 85, 0 },
+ { 1280, 1024, 60, 0 },
+ { 1280, 1024, 85, 0 },
+ /* byte 8 */
+ { 1360, 768, 60, 0 },
+ { 1440, 900, 60, 1 },
+ { 1440, 900, 60, 0 },
+ { 1440, 900, 75, 0 },
+ { 1440, 900, 85, 0 },
+ { 1400, 1050, 60, 1 },
+ { 1400, 1050, 60, 0 },
+ { 1400, 1050, 75, 0 },
+ /* byte 9 */
+ { 1400, 1050, 85, 0 },
+ { 1680, 1050, 60, 1 },
+ { 1680, 1050, 60, 0 },
+ { 1680, 1050, 75, 0 },
+ { 1680, 1050, 85, 0 },
+ { 1600, 1200, 60, 0 },
+ { 1600, 1200, 65, 0 },
+ { 1600, 1200, 70, 0 },
+ /* byte 10 */
+ { 1600, 1200, 75, 0 },
+ { 1600, 1200, 85, 0 },
+ { 1792, 1344, 60, 0 },
+ { 1792, 1344, 85, 0 },
+ { 1856, 1392, 60, 0 },
+ { 1856, 1392, 75, 0 },
+ { 1920, 1200, 60, 1 },
+ { 1920, 1200, 60, 0 },
+ /* byte 11 */
+ { 1920, 1200, 75, 0 },
+ { 1920, 1200, 85, 0 },
+ { 1920, 1440, 60, 0 },
+ { 1920, 1440, 75, 0 },
+};
+static const int num_est3_modes = sizeof(est3_modes) / sizeof(est3_modes[0]);
diff --git a/sys/dev/drm2/drm_fb_helper.c b/sys/dev/drm2/drm_fb_helper.c
new file mode 100644
index 000000000000..2f24ec4a4047
--- /dev/null
+++ b/sys/dev/drm2/drm_fb_helper.c
@@ -0,0 +1,1568 @@
+/*
+ * Copyright (c) 2006-2009 Red Hat Inc.
+ * Copyright (c) 2006-2008 Intel Corporation
+ * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
+ *
+ * DRM framebuffer helper functions
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Authors:
+ * Dave Airlie <airlied@linux.ie>
+ * Jesse Barnes <jesse.barnes@intel.com>
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_fb_helper.h>
+#include <dev/drm2/drm_crtc_helper.h>
+
+static DRM_LIST_HEAD(kernel_fb_helper_list);
+
+/* simple single crtc case helper function */
+int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper)
+{
+ struct drm_device *dev = fb_helper->dev;
+ struct drm_connector *connector;
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ struct drm_fb_helper_connector *fb_helper_connector;
+
+ fb_helper_connector = malloc(
+ sizeof(struct drm_fb_helper_connector), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ fb_helper_connector->connector = connector;
+ fb_helper->connector_info[fb_helper->connector_count++] = fb_helper_connector;
+ }
+ return 0;
+}
+
+const char *fb_mode_option;
+
+/**
+ * drm_fb_helper_connector_parse_command_line - parse command line for connector
+ * @connector - connector to parse line for
+ * @mode_option - per connector mode option
+ *
+ * This parses the connector specific then generic command lines for
+ * modes and options to configure the connector.
+ *
+ * This uses the same parameters as the fb modedb.c, except for extra
+ * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
+ *
+ * enable/enable Digital/disable bit at the end
+ */
+static bool drm_fb_helper_connector_parse_command_line(struct drm_fb_helper_connector *fb_helper_conn,
+ const char *mode_option)
+{
+ const char *name;
+ unsigned int namelen;
+ int res_specified = 0, bpp_specified = 0, refresh_specified = 0;
+ unsigned int xres = 0, yres = 0, bpp = 32, refresh = 0;
+ int yres_specified = 0, cvt = 0, rb = 0, interlace = 0, margins = 0;
+ int i;
+ enum drm_connector_force force = DRM_FORCE_UNSPECIFIED;
+ struct drm_fb_helper_cmdline_mode *cmdline_mode;
+ struct drm_connector *connector;
+
+ if (!fb_helper_conn)
+ return false;
+ connector = fb_helper_conn->connector;
+
+ cmdline_mode = &fb_helper_conn->cmdline_mode;
+ if (!mode_option)
+ mode_option = fb_mode_option;
+
+ if (!mode_option) {
+ cmdline_mode->specified = false;
+ return false;
+ }
+
+ name = mode_option;
+ namelen = strlen(name);
+ for (i = namelen-1; i >= 0; i--) {
+ switch (name[i]) {
+ case '@':
+ namelen = i;
+ if (!refresh_specified && !bpp_specified &&
+ !yres_specified) {
+ refresh = strtol(&name[i+1], NULL, 10);
+ refresh_specified = 1;
+ if (cvt || rb)
+ cvt = 0;
+ } else
+ goto done;
+ break;
+ case '-':
+ namelen = i;
+ if (!bpp_specified && !yres_specified) {
+ bpp = strtol(&name[i+1], NULL, 10);
+ bpp_specified = 1;
+ if (cvt || rb)
+ cvt = 0;
+ } else
+ goto done;
+ break;
+ case 'x':
+ if (!yres_specified) {
+ yres = strtol(&name[i+1], NULL, 10);
+ yres_specified = 1;
+ } else
+ goto done;
+ case '0' ... '9':
+ break;
+ case 'M':
+ if (!yres_specified)
+ cvt = 1;
+ break;
+ case 'R':
+ if (cvt)
+ rb = 1;
+ break;
+ case 'm':
+ if (!cvt)
+ margins = 1;
+ break;
+ case 'i':
+ if (!cvt)
+ interlace = 1;
+ break;
+ case 'e':
+ force = DRM_FORCE_ON;
+ break;
+ case 'D':
+ if ((connector->connector_type != DRM_MODE_CONNECTOR_DVII) &&
+ (connector->connector_type != DRM_MODE_CONNECTOR_HDMIB))
+ force = DRM_FORCE_ON;
+ else
+ force = DRM_FORCE_ON_DIGITAL;
+ break;
+ case 'd':
+ force = DRM_FORCE_OFF;
+ break;
+ default:
+ goto done;
+ }
+ }
+ if (i < 0 && yres_specified) {
+ xres = strtol(name, NULL, 10);
+ res_specified = 1;
+ }
+done:
+
+ DRM_DEBUG_KMS("cmdline mode for connector %s %dx%d@%dHz%s%s%s\n",
+ drm_get_connector_name(connector), xres, yres,
+ (refresh) ? refresh : 60, (rb) ? " reduced blanking" :
+ "", (margins) ? " with margins" : "", (interlace) ?
+ " interlaced" : "");
+
+ if (force) {
+ const char *s;
+ switch (force) {
+ case DRM_FORCE_OFF: s = "OFF"; break;
+ case DRM_FORCE_ON_DIGITAL: s = "ON - dig"; break;
+ default:
+ case DRM_FORCE_ON: s = "ON"; break;
+ }
+
+ DRM_INFO("forcing %s connector %s\n",
+ drm_get_connector_name(connector), s);
+ connector->force = force;
+ }
+
+ if (res_specified) {
+ cmdline_mode->specified = true;
+ cmdline_mode->xres = xres;
+ cmdline_mode->yres = yres;
+ }
+
+ if (refresh_specified) {
+ cmdline_mode->refresh_specified = true;
+ cmdline_mode->refresh = refresh;
+ }
+
+ if (bpp_specified) {
+ cmdline_mode->bpp_specified = true;
+ cmdline_mode->bpp = bpp;
+ }
+ cmdline_mode->rb = rb ? true : false;
+ cmdline_mode->cvt = cvt ? true : false;
+ cmdline_mode->interlace = interlace ? true : false;
+
+ return true;
+}
+
+static int
+fb_get_options(const char *connector_name, char **option)
+{
+
+ return (1);
+}
+
+static int drm_fb_helper_parse_command_line(struct drm_fb_helper *fb_helper)
+{
+ struct drm_fb_helper_connector *fb_helper_conn;
+ int i;
+
+ for (i = 0; i < fb_helper->connector_count; i++) {
+ char *option = NULL;
+
+ fb_helper_conn = fb_helper->connector_info[i];
+
+ /* do something on return - turn off connector maybe */
+ if (fb_get_options(drm_get_connector_name(fb_helper_conn->connector), &option))
+ continue;
+
+ drm_fb_helper_connector_parse_command_line(fb_helper_conn, option);
+ }
+ return 0;
+}
+
+#if 0
+static void drm_fb_helper_save_lut_atomic(struct drm_crtc *crtc, struct drm_fb_helper *helper)
+{
+ uint16_t *r_base, *g_base, *b_base;
+ int i;
+
+ r_base = crtc->gamma_store;
+ g_base = r_base + crtc->gamma_size;
+ b_base = g_base + crtc->gamma_size;
+
+ for (i = 0; i < crtc->gamma_size; i++)
+ helper->funcs->gamma_get(crtc, &r_base[i], &g_base[i], &b_base[i], i);
+}
+
+static void drm_fb_helper_restore_lut_atomic(struct drm_crtc *crtc)
+{
+ uint16_t *r_base, *g_base, *b_base;
+
+ r_base = crtc->gamma_store;
+ g_base = r_base + crtc->gamma_size;
+ b_base = g_base + crtc->gamma_size;
+
+ crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
+}
+#endif
+
+#if 0
+int drm_fb_helper_debug_enter(struct fb_info *info)
+{
+ struct drm_fb_helper *helper = info->par;
+ struct drm_crtc_helper_funcs *funcs;
+ int i;
+
+ if (list_empty(&kernel_fb_helper_list))
+ return false;
+
+ list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) {
+ for (i = 0; i < helper->crtc_count; i++) {
+ struct drm_mode_set *mode_set =
+ &helper->crtc_info[i].mode_set;
+
+ if (!mode_set->crtc->enabled)
+ continue;
+
+ funcs = mode_set->crtc->helper_private;
+ drm_fb_helper_save_lut_atomic(mode_set->crtc, helper);
+ funcs->mode_set_base_atomic(mode_set->crtc,
+ mode_set->fb,
+ mode_set->x,
+ mode_set->y,
+ ENTER_ATOMIC_MODE_SET);
+ }
+ }
+
+ return 0;
+}
+#endif
+
+#if 0
+/* Find the real fb for a given fb helper CRTC */
+static struct drm_framebuffer *drm_mode_config_fb(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_crtc *c;
+
+ list_for_each_entry(c, &dev->mode_config.crtc_list, head) {
+ if (crtc->base.id == c->base.id)
+ return c->fb;
+ }
+
+ return NULL;
+}
+#endif
+
+#if 0
+int drm_fb_helper_debug_leave(struct fb_info *info)
+{
+ struct drm_fb_helper *helper = info->par;
+ struct drm_crtc *crtc;
+ struct drm_crtc_helper_funcs *funcs;
+ struct drm_framebuffer *fb;
+ int i;
+
+ for (i = 0; i < helper->crtc_count; i++) {
+ struct drm_mode_set *mode_set = &helper->crtc_info[i].mode_set;
+ crtc = mode_set->crtc;
+ funcs = crtc->helper_private;
+ fb = drm_mode_config_fb(crtc);
+
+ if (!crtc->enabled)
+ continue;
+
+ if (!fb) {
+ DRM_ERROR("no fb to restore??\n");
+ continue;
+ }
+
+ drm_fb_helper_restore_lut_atomic(mode_set->crtc);
+ funcs->mode_set_base_atomic(mode_set->crtc, fb, crtc->x,
+ crtc->y, LEAVE_ATOMIC_MODE_SET);
+ }
+
+ return 0;
+}
+#endif
+
+bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper)
+{
+ bool error = false;
+ int i, ret;
+ for (i = 0; i < fb_helper->crtc_count; i++) {
+ struct drm_mode_set *mode_set = &fb_helper->crtc_info[i].mode_set;
+ ret = drm_crtc_helper_set_config(mode_set);
+ if (ret)
+ error = true;
+ }
+ return error;
+}
+
+#if 0
+bool drm_fb_helper_force_kernel_mode(void)
+{
+ bool ret, error = false;
+ struct drm_fb_helper *helper;
+
+ if (list_empty(&kernel_fb_helper_list))
+ return false;
+
+ list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) {
+ if (helper->dev->switch_power_state == DRM_SWITCH_POWER_OFF)
+ continue;
+
+ ret = drm_fb_helper_restore_fbdev_mode(helper);
+ if (ret)
+ error = true;
+ }
+ return error;
+}
+#endif
+
+#if 0
+int drm_fb_helper_panic(struct notifier_block *n, unsigned long ununsed,
+ void *panic_str)
+{
+ printf("panic occurred, switching back to text console\n");
+ return drm_fb_helper_force_kernel_mode();
+ return 0;
+}
+
+static struct notifier_block paniced = {
+ .notifier_call = drm_fb_helper_panic,
+};
+
+/**
+ * drm_fb_helper_restore - restore the framebuffer console (kernel) config
+ *
+ * Restore's the kernel's fbcon mode, used for lastclose & panic paths.
+ */
+void drm_fb_helper_restore(void)
+{
+ bool ret;
+ ret = drm_fb_helper_force_kernel_mode();
+ if (ret == true)
+ DRM_ERROR("Failed to restore crtc configuration\n");
+}
+
+#ifdef CONFIG_MAGIC_SYSRQ
+static void drm_fb_helper_restore_work_fn(struct work_struct *ignored)
+{
+ drm_fb_helper_restore();
+}
+static DECLARE_WORK(drm_fb_helper_restore_work, drm_fb_helper_restore_work_fn);
+
+static void drm_fb_helper_sysrq(int dummy1)
+{
+ schedule_work(&drm_fb_helper_restore_work);
+}
+
+static struct sysrq_key_op sysrq_drm_fb_helper_restore_op = {
+ .handler = drm_fb_helper_sysrq,
+ .help_msg = "force-fb(V)",
+ .action_msg = "Restore framebuffer console",
+};
+#else
+static struct sysrq_key_op sysrq_drm_fb_helper_restore_op = { };
+#endif
+#endif
+
+#if 0
+static void drm_fb_helper_on(struct fb_info *info)
+{
+ struct drm_fb_helper *fb_helper = info->par;
+ struct drm_device *dev = fb_helper->dev;
+ struct drm_crtc *crtc;
+ struct drm_crtc_helper_funcs *crtc_funcs;
+ struct drm_connector *connector;
+ struct drm_encoder *encoder;
+ int i, j;
+
+ /*
+ * For each CRTC in this fb, turn the crtc on then,
+ * find all associated encoders and turn them on.
+ */
+ sx_xlock(&dev->mode_config.mutex);
+ for (i = 0; i < fb_helper->crtc_count; i++) {
+ crtc = fb_helper->crtc_info[i].mode_set.crtc;
+ crtc_funcs = crtc->helper_private;
+
+ if (!crtc->enabled)
+ continue;
+
+ crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
+
+ /* Walk the connectors & encoders on this fb turning them on */
+ for (j = 0; j < fb_helper->connector_count; j++) {
+ connector = fb_helper->connector_info[j]->connector;
+ connector->dpms = DRM_MODE_DPMS_ON;
+ drm_connector_property_set_value(connector,
+ dev->mode_config.dpms_property,
+ DRM_MODE_DPMS_ON);
+ }
+ /* Found a CRTC on this fb, now find encoders */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ if (encoder->crtc == crtc) {
+ struct drm_encoder_helper_funcs *encoder_funcs;
+
+ encoder_funcs = encoder->helper_private;
+ encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
+ }
+ }
+ }
+ sx_xunlock(&dev->mode_config.mutex);
+}
+#endif
+
+#if 0
+static void drm_fb_helper_off(struct fb_info *info, int dpms_mode)
+{
+ struct drm_fb_helper *fb_helper = info->par;
+ struct drm_device *dev = fb_helper->dev;
+ struct drm_crtc *crtc;
+ struct drm_crtc_helper_funcs *crtc_funcs;
+ struct drm_connector *connector;
+ struct drm_encoder *encoder;
+ int i, j;
+
+ /*
+ * For each CRTC in this fb, find all associated encoders
+ * and turn them off, then turn off the CRTC.
+ */
+ sx_xlock(&dev->mode_config.mutex);
+ for (i = 0; i < fb_helper->crtc_count; i++) {
+ crtc = fb_helper->crtc_info[i].mode_set.crtc;
+ crtc_funcs = crtc->helper_private;
+
+ if (!crtc->enabled)
+ continue;
+
+ /* Walk the connectors on this fb and mark them off */
+ for (j = 0; j < fb_helper->connector_count; j++) {
+ connector = fb_helper->connector_info[j]->connector;
+ connector->dpms = dpms_mode;
+ drm_connector_property_set_value(connector,
+ dev->mode_config.dpms_property,
+ dpms_mode);
+ }
+ /* Found a CRTC on this fb, now find encoders */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ if (encoder->crtc == crtc) {
+ struct drm_encoder_helper_funcs *encoder_funcs;
+
+ encoder_funcs = encoder->helper_private;
+ encoder_funcs->dpms(encoder, dpms_mode);
+ }
+ }
+ crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
+ }
+ sx_xunlock(&dev->mode_config.mutex);
+}
+#endif
+
+#if 0
+int drm_fb_helper_blank(int blank, struct fb_info *info)
+{
+ switch (blank) {
+ /* Display: On; HSync: On, VSync: On */
+ case FB_BLANK_UNBLANK:
+ drm_fb_helper_on(info);
+ break;
+ /* Display: Off; HSync: On, VSync: On */
+ case FB_BLANK_NORMAL:
+ drm_fb_helper_off(info, DRM_MODE_DPMS_STANDBY);
+ break;
+ /* Display: Off; HSync: Off, VSync: On */
+ case FB_BLANK_HSYNC_SUSPEND:
+ drm_fb_helper_off(info, DRM_MODE_DPMS_STANDBY);
+ break;
+ /* Display: Off; HSync: On, VSync: Off */
+ case FB_BLANK_VSYNC_SUSPEND:
+ drm_fb_helper_off(info, DRM_MODE_DPMS_SUSPEND);
+ break;
+ /* Display: Off; HSync: Off, VSync: Off */
+ case FB_BLANK_POWERDOWN:
+ drm_fb_helper_off(info, DRM_MODE_DPMS_OFF);
+ break;
+ }
+ return 0;
+}
+#endif
+
+static void drm_fb_helper_crtc_free(struct drm_fb_helper *helper)
+{
+ int i;
+
+ for (i = 0; i < helper->connector_count; i++)
+ free(helper->connector_info[i], DRM_MEM_KMS);
+ free(helper->connector_info, DRM_MEM_KMS);
+ for (i = 0; i < helper->crtc_count; i++)
+ free(helper->crtc_info[i].mode_set.connectors, DRM_MEM_KMS);
+ free(helper->crtc_info, DRM_MEM_KMS);
+}
+
+int drm_fb_helper_init(struct drm_device *dev,
+ struct drm_fb_helper *fb_helper,
+ int crtc_count, int max_conn_count)
+{
+ struct drm_crtc *crtc;
+ int i;
+
+ fb_helper->dev = dev;
+
+ INIT_LIST_HEAD(&fb_helper->kernel_fb_list);
+
+ fb_helper->crtc_info = malloc(crtc_count *
+ sizeof(struct drm_fb_helper_crtc), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ fb_helper->crtc_count = crtc_count;
+ fb_helper->connector_info = malloc(dev->mode_config.num_connector *
+ sizeof(struct drm_fb_helper_connector *), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+ fb_helper->connector_count = 0;
+
+ for (i = 0; i < crtc_count; i++) {
+ fb_helper->crtc_info[i].mode_set.connectors =
+ malloc(max_conn_count * sizeof(struct drm_connector *),
+ DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ fb_helper->crtc_info[i].mode_set.num_connectors = 0;
+ }
+
+ i = 0;
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ fb_helper->crtc_info[i].crtc_id = crtc->base.id;
+ fb_helper->crtc_info[i].mode_set.crtc = crtc;
+ i++;
+ }
+ fb_helper->conn_limit = max_conn_count;
+ return 0;
+}
+
+void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
+{
+ if (!list_empty(&fb_helper->kernel_fb_list)) {
+ list_del(&fb_helper->kernel_fb_list);
+ if (list_empty(&kernel_fb_helper_list)) {
+#if 0
+ printk(KERN_INFO "drm: unregistered panic notifier\n");
+ atomic_notifier_chain_unregister(&panic_notifier_list,
+ &paniced);
+ unregister_sysrq_key('v', &sysrq_drm_fb_helper_restore_op);
+#endif
+ }
+ }
+
+ drm_fb_helper_crtc_free(fb_helper);
+
+}
+
+#if 0
+static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green,
+ u16 blue, u16 regno, struct fb_info *info)
+{
+ struct drm_fb_helper *fb_helper = info->par;
+ struct drm_framebuffer *fb = fb_helper->fb;
+ int pindex;
+
+ if (info->fix.visual == FB_VISUAL_trueCOLOR) {
+ u32 *palette;
+ u32 value;
+ /* place color in psuedopalette */
+ if (regno > 16)
+ return -EINVAL;
+ palette = (u32 *)info->pseudo_palette;
+ red >>= (16 - info->var.red.length);
+ green >>= (16 - info->var.green.length);
+ blue >>= (16 - info->var.blue.length);
+ value = (red << info->var.red.offset) |
+ (green << info->var.green.offset) |
+ (blue << info->var.blue.offset);
+ if (info->var.transp.length > 0) {
+ u32 mask = (1 << info->var.transp.length) - 1;
+ mask <<= info->var.transp.offset;
+ value |= mask;
+ }
+ palette[regno] = value;
+ return 0;
+ }
+
+ pindex = regno;
+
+ if (fb->bits_per_pixel == 16) {
+ pindex = regno << 3;
+
+ if (fb->depth == 16 && regno > 63)
+ return -EINVAL;
+ if (fb->depth == 15 && regno > 31)
+ return -EINVAL;
+
+ if (fb->depth == 16) {
+ u16 r, g, b;
+ int i;
+ if (regno < 32) {
+ for (i = 0; i < 8; i++)
+ fb_helper->funcs->gamma_set(crtc, red,
+ green, blue, pindex + i);
+ }
+
+ fb_helper->funcs->gamma_get(crtc, &r,
+ &g, &b,
+ pindex >> 1);
+
+ for (i = 0; i < 4; i++)
+ fb_helper->funcs->gamma_set(crtc, r,
+ green, b,
+ (pindex >> 1) + i);
+ }
+ }
+
+ if (fb->depth != 16)
+ fb_helper->funcs->gamma_set(crtc, red, green, blue, pindex);
+ return 0;
+}
+#endif
+
+#if 0
+int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info)
+{
+ struct drm_fb_helper *fb_helper = info->par;
+ struct drm_crtc_helper_funcs *crtc_funcs;
+ u16 *red, *green, *blue, *transp;
+ struct drm_crtc *crtc;
+ int i, j, rc = 0;
+ int start;
+
+ for (i = 0; i < fb_helper->crtc_count; i++) {
+ crtc = fb_helper->crtc_info[i].mode_set.crtc;
+ crtc_funcs = crtc->helper_private;
+
+ red = cmap->red;
+ green = cmap->green;
+ blue = cmap->blue;
+ transp = cmap->transp;
+ start = cmap->start;
+
+ for (j = 0; j < cmap->len; j++) {
+ u16 hred, hgreen, hblue, htransp = 0xffff;
+
+ hred = *red++;
+ hgreen = *green++;
+ hblue = *blue++;
+
+ if (transp)
+ htransp = *transp++;
+
+ rc = setcolreg(crtc, hred, hgreen, hblue, start++, info);
+ if (rc)
+ return rc;
+ }
+ crtc_funcs->load_lut(crtc);
+ }
+ return rc;
+}
+#endif
+
+#if 0
+int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
+ struct fb_info *info)
+{
+ struct drm_fb_helper *fb_helper = info->par;
+ struct drm_framebuffer *fb = fb_helper->fb;
+ int depth;
+
+ if (var->pixclock != 0 || in_dbg_master())
+ return -EINVAL;
+
+ /* Need to resize the fb object !!! */
+ if (var->bits_per_pixel > fb->bits_per_pixel ||
+ var->xres > fb->width || var->yres > fb->height ||
+ var->xres_virtual > fb->width || var->yres_virtual > fb->height) {
+ DRM_DEBUG("fb userspace requested width/height/bpp is greater than current fb "
+ "request %dx%d-%d (virtual %dx%d) > %dx%d-%d\n",
+ var->xres, var->yres, var->bits_per_pixel,
+ var->xres_virtual, var->yres_virtual,
+ fb->width, fb->height, fb->bits_per_pixel);
+ return -EINVAL;
+ }
+
+ switch (var->bits_per_pixel) {
+ case 16:
+ depth = (var->green.length == 6) ? 16 : 15;
+ break;
+ case 32:
+ depth = (var->transp.length > 0) ? 32 : 24;
+ break;
+ default:
+ depth = var->bits_per_pixel;
+ break;
+ }
+
+ switch (depth) {
+ case 8:
+ var->red.offset = 0;
+ var->green.offset = 0;
+ var->blue.offset = 0;
+ var->red.length = 8;
+ var->green.length = 8;
+ var->blue.length = 8;
+ var->transp.length = 0;
+ var->transp.offset = 0;
+ break;
+ case 15:
+ var->red.offset = 10;
+ var->green.offset = 5;
+ var->blue.offset = 0;
+ var->red.length = 5;
+ var->green.length = 5;
+ var->blue.length = 5;
+ var->transp.length = 1;
+ var->transp.offset = 15;
+ break;
+ case 16:
+ var->red.offset = 11;
+ var->green.offset = 5;
+ var->blue.offset = 0;
+ var->red.length = 5;
+ var->green.length = 6;
+ var->blue.length = 5;
+ var->transp.length = 0;
+ var->transp.offset = 0;
+ break;
+ case 24:
+ var->red.offset = 16;
+ var->green.offset = 8;
+ var->blue.offset = 0;
+ var->red.length = 8;
+ var->green.length = 8;
+ var->blue.length = 8;
+ var->transp.length = 0;
+ var->transp.offset = 0;
+ break;
+ case 32:
+ var->red.offset = 16;
+ var->green.offset = 8;
+ var->blue.offset = 0;
+ var->red.length = 8;
+ var->green.length = 8;
+ var->blue.length = 8;
+ var->transp.length = 8;
+ var->transp.offset = 24;
+ break;
+ default:
+ return -EINVAL;
+ }
+ return 0;
+}
+#endif
+
+#if 0
+/* this will let fbcon do the mode init */
+int drm_fb_helper_set_par(struct fb_info *info)
+{
+ struct drm_fb_helper *fb_helper = info->par;
+ struct drm_device *dev = fb_helper->dev;
+ struct fb_var_screeninfo *var = &info->var;
+ struct drm_crtc *crtc;
+ int ret;
+ int i;
+
+ if (var->pixclock != 0) {
+ DRM_ERROR("PIXEL CLOCK SET\n");
+ return -EINVAL;
+ }
+
+ mutex_lock(&dev->mode_config.mutex);
+ for (i = 0; i < fb_helper->crtc_count; i++) {
+ crtc = fb_helper->crtc_info[i].mode_set.crtc;
+ ret = crtc->funcs->set_config(&fb_helper->crtc_info[i].mode_set);
+ if (ret) {
+ mutex_unlock(&dev->mode_config.mutex);
+ return ret;
+ }
+ }
+ mutex_unlock(&dev->mode_config.mutex);
+
+ if (fb_helper->delayed_hotplug) {
+ fb_helper->delayed_hotplug = false;
+ drm_fb_helper_hotplug_event(fb_helper);
+ }
+ return 0;
+}
+#endif
+
+#if 0
+int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
+ struct fb_info *info)
+{
+ struct drm_fb_helper *fb_helper = info->par;
+ struct drm_device *dev = fb_helper->dev;
+ struct drm_mode_set *modeset;
+ struct drm_crtc *crtc;
+ int ret = 0;
+ int i;
+
+ mutex_lock(&dev->mode_config.mutex);
+ for (i = 0; i < fb_helper->crtc_count; i++) {
+ crtc = fb_helper->crtc_info[i].mode_set.crtc;
+
+ modeset = &fb_helper->crtc_info[i].mode_set;
+
+ modeset->x = var->xoffset;
+ modeset->y = var->yoffset;
+
+ if (modeset->num_connectors) {
+ ret = crtc->funcs->set_config(modeset);
+ if (!ret) {
+ info->var.xoffset = var->xoffset;
+ info->var.yoffset = var->yoffset;
+ }
+ }
+ }
+ mutex_unlock(&dev->mode_config.mutex);
+ return ret;
+}
+#endif
+
+int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
+ int preferred_bpp)
+{
+ int new_fb = 0;
+ int crtc_count = 0;
+ int i;
+#if 0
+ struct fb_info *info;
+#endif
+ struct drm_fb_helper_surface_size sizes;
+ int gamma_size = 0;
+
+ memset(&sizes, 0, sizeof(struct drm_fb_helper_surface_size));
+ sizes.surface_depth = 24;
+ sizes.surface_bpp = 32;
+ sizes.fb_width = (unsigned)-1;
+ sizes.fb_height = (unsigned)-1;
+
+ /* if driver picks 8 or 16 by default use that
+ for both depth/bpp */
+ if (preferred_bpp != sizes.surface_bpp) {
+ sizes.surface_depth = sizes.surface_bpp = preferred_bpp;
+ }
+ /* first up get a count of crtcs now in use and new min/maxes width/heights */
+ for (i = 0; i < fb_helper->connector_count; i++) {
+ struct drm_fb_helper_connector *fb_helper_conn = fb_helper->connector_info[i];
+ struct drm_fb_helper_cmdline_mode *cmdline_mode;
+
+ cmdline_mode = &fb_helper_conn->cmdline_mode;
+
+ if (cmdline_mode->bpp_specified) {
+ switch (cmdline_mode->bpp) {
+ case 8:
+ sizes.surface_depth = sizes.surface_bpp = 8;
+ break;
+ case 15:
+ sizes.surface_depth = 15;
+ sizes.surface_bpp = 16;
+ break;
+ case 16:
+ sizes.surface_depth = sizes.surface_bpp = 16;
+ break;
+ case 24:
+ sizes.surface_depth = sizes.surface_bpp = 24;
+ break;
+ case 32:
+ sizes.surface_depth = 24;
+ sizes.surface_bpp = 32;
+ break;
+ }
+ break;
+ }
+ }
+
+ crtc_count = 0;
+ for (i = 0; i < fb_helper->crtc_count; i++) {
+ struct drm_display_mode *desired_mode;
+ desired_mode = fb_helper->crtc_info[i].desired_mode;
+
+ if (desired_mode) {
+ if (gamma_size == 0)
+ gamma_size = fb_helper->crtc_info[i].mode_set.crtc->gamma_size;
+ if (desired_mode->hdisplay < sizes.fb_width)
+ sizes.fb_width = desired_mode->hdisplay;
+ if (desired_mode->vdisplay < sizes.fb_height)
+ sizes.fb_height = desired_mode->vdisplay;
+ if (desired_mode->hdisplay > sizes.surface_width)
+ sizes.surface_width = desired_mode->hdisplay;
+ if (desired_mode->vdisplay > sizes.surface_height)
+ sizes.surface_height = desired_mode->vdisplay;
+ crtc_count++;
+ }
+ }
+
+ if (crtc_count == 0 || sizes.fb_width == -1 || sizes.fb_height == -1) {
+ /* hmm everyone went away - assume VGA cable just fell out
+ and will come back later. */
+ DRM_INFO("Cannot find any crtc or sizes - going 1024x768\n");
+ sizes.fb_width = sizes.surface_width = 1024;
+ sizes.fb_height = sizes.surface_height = 768;
+ }
+
+ /* push down into drivers */
+ new_fb = (*fb_helper->funcs->fb_probe)(fb_helper, &sizes);
+ if (new_fb < 0)
+ return new_fb;
+
+#if 0
+ info = fb_helper->fbdev;
+#endif
+
+ /* set the fb pointer */
+ for (i = 0; i < fb_helper->crtc_count; i++) {
+ fb_helper->crtc_info[i].mode_set.fb = fb_helper->fb;
+ }
+
+#if 0
+ if (new_fb) {
+ info->var.pixclock = 0;
+ if (register_framebuffer(info) < 0) {
+ return -EINVAL;
+ }
+
+ printf("fb%d: %s frame buffer device\n", info->node,
+ info->fix.id);
+
+ } else {
+ drm_fb_helper_set_par(info);
+ }
+
+ /* Switch back to kernel console on panic */
+ /* multi card linked list maybe */
+ if (list_empty(&kernel_fb_helper_list)) {
+ printf("drm: registered panic notifier\n");
+ atomic_notifier_chain_register(&panic_notifier_list,
+ &paniced);
+ }
+ if (new_fb)
+ list_add(&fb_helper->kernel_fb_list, &kernel_fb_helper_list);
+#endif
+
+ return 0;
+}
+
+#if 0
+void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
+ uint32_t depth)
+{
+ info->fix.type = FB_TYPE_PACKED_PIXELS;
+ info->fix.visual = depth == 8 ? FB_VISUAL_PSEUDOCOLOR :
+ FB_VISUAL_trueCOLOR;
+ info->fix.mmio_start = 0;
+ info->fix.mmio_len = 0;
+ info->fix.type_aux = 0;
+ info->fix.xpanstep = 1; /* doing it in hw */
+ info->fix.ypanstep = 1; /* doing it in hw */
+ info->fix.ywrapstep = 0;
+ info->fix.accel = FB_ACCEL_NONE;
+ info->fix.type_aux = 0;
+
+ info->fix.line_length = pitch;
+ return;
+}
+
+void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
+ uint32_t fb_width, uint32_t fb_height)
+{
+ struct drm_framebuffer *fb = fb_helper->fb;
+ info->pseudo_palette = fb_helper->pseudo_palette;
+ info->var.xres_virtual = fb->width;
+ info->var.yres_virtual = fb->height;
+ info->var.bits_per_pixel = fb->bits_per_pixel;
+ info->var.accel_flags = FB_ACCELF_TEXT;
+ info->var.xoffset = 0;
+ info->var.yoffset = 0;
+ info->var.activate = FB_ACTIVATE_NOW;
+ info->var.height = -1;
+ info->var.width = -1;
+
+ switch (fb->depth) {
+ case 8:
+ info->var.red.offset = 0;
+ info->var.green.offset = 0;
+ info->var.blue.offset = 0;
+ info->var.red.length = 8; /* 8bit DAC */
+ info->var.green.length = 8;
+ info->var.blue.length = 8;
+ info->var.transp.offset = 0;
+ info->var.transp.length = 0;
+ break;
+ case 15:
+ info->var.red.offset = 10;
+ info->var.green.offset = 5;
+ info->var.blue.offset = 0;
+ info->var.red.length = 5;
+ info->var.green.length = 5;
+ info->var.blue.length = 5;
+ info->var.transp.offset = 15;
+ info->var.transp.length = 1;
+ break;
+ case 16:
+ info->var.red.offset = 11;
+ info->var.green.offset = 5;
+ info->var.blue.offset = 0;
+ info->var.red.length = 5;
+ info->var.green.length = 6;
+ info->var.blue.length = 5;
+ info->var.transp.offset = 0;
+ break;
+ case 24:
+ info->var.red.offset = 16;
+ info->var.green.offset = 8;
+ info->var.blue.offset = 0;
+ info->var.red.length = 8;
+ info->var.green.length = 8;
+ info->var.blue.length = 8;
+ info->var.transp.offset = 0;
+ info->var.transp.length = 0;
+ break;
+ case 32:
+ info->var.red.offset = 16;
+ info->var.green.offset = 8;
+ info->var.blue.offset = 0;
+ info->var.red.length = 8;
+ info->var.green.length = 8;
+ info->var.blue.length = 8;
+ info->var.transp.offset = 24;
+ info->var.transp.length = 8;
+ break;
+ default:
+ break;
+ }
+
+ info->var.xres = fb_width;
+ info->var.yres = fb_height;
+}
+#endif
+
+static int drm_fb_helper_probe_connector_modes(struct drm_fb_helper *fb_helper,
+ uint32_t maxX,
+ uint32_t maxY)
+{
+ struct drm_connector *connector;
+ int count = 0;
+ int i;
+
+ for (i = 0; i < fb_helper->connector_count; i++) {
+ connector = fb_helper->connector_info[i]->connector;
+ count += connector->funcs->fill_modes(connector, maxX, maxY);
+ }
+
+ return count;
+}
+
+static struct drm_display_mode *drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector, int width, int height)
+{
+ struct drm_display_mode *mode;
+
+ list_for_each_entry(mode, &fb_connector->connector->modes, head) {
+ if (drm_mode_width(mode) > width ||
+ drm_mode_height(mode) > height)
+ continue;
+ if (mode->type & DRM_MODE_TYPE_PREFERRED)
+ return mode;
+ }
+ return NULL;
+}
+
+static bool drm_has_cmdline_mode(struct drm_fb_helper_connector *fb_connector)
+{
+ struct drm_fb_helper_cmdline_mode *cmdline_mode;
+ cmdline_mode = &fb_connector->cmdline_mode;
+ return cmdline_mode->specified;
+}
+
+static struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn,
+ int width, int height)
+{
+ struct drm_cmdline_mode *cmdline_mode;
+ struct drm_display_mode *mode = NULL;
+
+ cmdline_mode = &fb_helper_conn->cmdline_mode1;
+ if (cmdline_mode->specified == false &&
+ !drm_fetch_cmdline_mode_from_kenv(fb_helper_conn->connector,
+ cmdline_mode))
+ return (NULL);
+
+ /* attempt to find a matching mode in the list of modes
+ * we have gotten so far, if not add a CVT mode that conforms
+ */
+ if (cmdline_mode->rb || cmdline_mode->margins)
+ goto create_mode;
+
+ list_for_each_entry(mode, &fb_helper_conn->connector->modes, head) {
+ /* check width/height */
+ if (mode->hdisplay != cmdline_mode->xres ||
+ mode->vdisplay != cmdline_mode->yres)
+ continue;
+
+ if (cmdline_mode->refresh_specified) {
+ if (mode->vrefresh != cmdline_mode->refresh)
+ continue;
+ }
+
+ if (cmdline_mode->interlace) {
+ if (!(mode->flags & DRM_MODE_FLAG_INTERLACE))
+ continue;
+ }
+ return mode;
+ }
+
+create_mode:
+ if (cmdline_mode->cvt)
+ mode = drm_cvt_mode(fb_helper_conn->connector->dev,
+ cmdline_mode->xres, cmdline_mode->yres,
+ cmdline_mode->refresh_specified ? cmdline_mode->refresh : 60,
+ cmdline_mode->rb, cmdline_mode->interlace,
+ cmdline_mode->margins);
+ else
+ mode = drm_gtf_mode(fb_helper_conn->connector->dev,
+ cmdline_mode->xres, cmdline_mode->yres,
+ cmdline_mode->refresh_specified ? cmdline_mode->refresh : 60,
+ cmdline_mode->interlace,
+ cmdline_mode->margins);
+ drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
+ list_add(&mode->head, &fb_helper_conn->connector->modes);
+ return mode;
+}
+
+static bool drm_connector_enabled(struct drm_connector *connector, bool strict)
+{
+ bool enable;
+
+ if (strict) {
+ enable = connector->status == connector_status_connected;
+ } else {
+ enable = connector->status != connector_status_disconnected;
+ }
+ return enable;
+}
+
+static void drm_enable_connectors(struct drm_fb_helper *fb_helper,
+ bool *enabled)
+{
+ bool any_enabled = false;
+ struct drm_connector *connector;
+ int i = 0;
+
+ for (i = 0; i < fb_helper->connector_count; i++) {
+ connector = fb_helper->connector_info[i]->connector;
+ enabled[i] = drm_connector_enabled(connector, true);
+ DRM_DEBUG_KMS("connector %d enabled? %s\n", connector->base.id,
+ enabled[i] ? "yes" : "no");
+ any_enabled |= enabled[i];
+ }
+
+ if (any_enabled)
+ return;
+
+ for (i = 0; i < fb_helper->connector_count; i++) {
+ connector = fb_helper->connector_info[i]->connector;
+ enabled[i] = drm_connector_enabled(connector, false);
+ }
+}
+
+static bool drm_target_cloned(struct drm_fb_helper *fb_helper,
+ struct drm_display_mode **modes,
+ bool *enabled, int width, int height)
+{
+ int count, i, j;
+ bool can_clone = false;
+ struct drm_fb_helper_connector *fb_helper_conn;
+ struct drm_display_mode *dmt_mode, *mode;
+
+ /* only contemplate cloning in the single crtc case */
+ if (fb_helper->crtc_count > 1)
+ return false;
+
+ count = 0;
+ for (i = 0; i < fb_helper->connector_count; i++) {
+ if (enabled[i])
+ count++;
+ }
+
+ /* only contemplate cloning if more than one connector is enabled */
+ if (count <= 1)
+ return false;
+
+ /* check the command line or if nothing common pick 1024x768 */
+ can_clone = true;
+ for (i = 0; i < fb_helper->connector_count; i++) {
+ if (!enabled[i])
+ continue;
+ fb_helper_conn = fb_helper->connector_info[i];
+ modes[i] = drm_pick_cmdline_mode(fb_helper_conn, width, height);
+ if (!modes[i]) {
+ can_clone = false;
+ break;
+ }
+ for (j = 0; j < i; j++) {
+ if (!enabled[j])
+ continue;
+ if (!drm_mode_equal(modes[j], modes[i]))
+ can_clone = false;
+ }
+ }
+
+ if (can_clone) {
+ DRM_DEBUG_KMS("can clone using command line\n");
+ return true;
+ }
+
+ /* try and find a 1024x768 mode on each connector */
+ can_clone = true;
+ dmt_mode = drm_mode_find_dmt(fb_helper->dev, 1024, 768, 60);
+
+ for (i = 0; i < fb_helper->connector_count; i++) {
+
+ if (!enabled[i])
+ continue;
+
+ fb_helper_conn = fb_helper->connector_info[i];
+ list_for_each_entry(mode, &fb_helper_conn->connector->modes, head) {
+ if (drm_mode_equal(mode, dmt_mode))
+ modes[i] = mode;
+ }
+ if (!modes[i])
+ can_clone = false;
+ }
+
+ if (can_clone) {
+ DRM_DEBUG_KMS("can clone using 1024x768\n");
+ return true;
+ }
+ DRM_INFO("kms: can't enable cloning when we probably wanted to.\n");
+ return false;
+}
+
+static bool drm_target_preferred(struct drm_fb_helper *fb_helper,
+ struct drm_display_mode **modes,
+ bool *enabled, int width, int height)
+{
+ struct drm_fb_helper_connector *fb_helper_conn;
+ int i;
+
+ for (i = 0; i < fb_helper->connector_count; i++) {
+ fb_helper_conn = fb_helper->connector_info[i];
+
+ if (enabled[i] == false)
+ continue;
+
+ DRM_DEBUG_KMS("looking for cmdline mode on connector %d\n",
+ fb_helper_conn->connector->base.id);
+
+ /* got for command line mode first */
+ modes[i] = drm_pick_cmdline_mode(fb_helper_conn, width, height);
+ if (!modes[i]) {
+ DRM_DEBUG_KMS("looking for preferred mode on connector %d\n",
+ fb_helper_conn->connector->base.id);
+ modes[i] = drm_has_preferred_mode(fb_helper_conn, width, height);
+ }
+ /* No preferred modes, pick one off the list */
+ if (!modes[i] && !list_empty(&fb_helper_conn->connector->modes)) {
+ list_for_each_entry(modes[i], &fb_helper_conn->connector->modes, head)
+ break;
+ }
+ DRM_DEBUG_KMS("found mode %s\n", modes[i] ? modes[i]->name :
+ "none");
+ }
+ return true;
+}
+
+static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
+ struct drm_fb_helper_crtc **best_crtcs,
+ struct drm_display_mode **modes,
+ int n, int width, int height)
+{
+ int c, o;
+ struct drm_device *dev = fb_helper->dev;
+ struct drm_connector *connector;
+ struct drm_connector_helper_funcs *connector_funcs;
+ struct drm_encoder *encoder;
+ struct drm_fb_helper_crtc *best_crtc;
+ int my_score, best_score, score;
+ struct drm_fb_helper_crtc **crtcs, *crtc;
+ struct drm_fb_helper_connector *fb_helper_conn;
+
+ if (n == fb_helper->connector_count)
+ return 0;
+
+ fb_helper_conn = fb_helper->connector_info[n];
+ connector = fb_helper_conn->connector;
+
+ best_crtcs[n] = NULL;
+ best_crtc = NULL;
+ best_score = drm_pick_crtcs(fb_helper, best_crtcs, modes, n+1, width, height);
+ if (modes[n] == NULL)
+ return best_score;
+
+ crtcs = malloc(dev->mode_config.num_connector *
+ sizeof(struct drm_fb_helper_crtc *), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ my_score = 1;
+ if (connector->status == connector_status_connected)
+ my_score++;
+ if (drm_has_cmdline_mode(fb_helper_conn))
+ my_score++;
+ if (drm_has_preferred_mode(fb_helper_conn, width, height))
+ my_score++;
+
+ connector_funcs = connector->helper_private;
+ encoder = connector_funcs->best_encoder(connector);
+ if (!encoder)
+ goto out;
+
+ /* select a crtc for this connector and then attempt to configure
+ remaining connectors */
+ for (c = 0; c < fb_helper->crtc_count; c++) {
+ crtc = &fb_helper->crtc_info[c];
+
+ if ((encoder->possible_crtcs & (1 << c)) == 0) {
+ continue;
+ }
+
+ for (o = 0; o < n; o++)
+ if (best_crtcs[o] == crtc)
+ break;
+
+ if (o < n) {
+ /* ignore cloning unless only a single crtc */
+ if (fb_helper->crtc_count > 1)
+ continue;
+
+ if (!drm_mode_equal(modes[o], modes[n]))
+ continue;
+ }
+
+ crtcs[n] = crtc;
+ memcpy(crtcs, best_crtcs, n * sizeof(struct drm_fb_helper_crtc *));
+ score = my_score + drm_pick_crtcs(fb_helper, crtcs, modes, n + 1,
+ width, height);
+ if (score > best_score) {
+ best_crtc = crtc;
+ best_score = score;
+ memcpy(best_crtcs, crtcs,
+ dev->mode_config.num_connector *
+ sizeof(struct drm_fb_helper_crtc *));
+ }
+ }
+out:
+ free(crtcs, DRM_MEM_KMS);
+ return best_score;
+}
+
+static void drm_setup_crtcs(struct drm_fb_helper *fb_helper)
+{
+ struct drm_device *dev = fb_helper->dev;
+ struct drm_fb_helper_crtc **crtcs;
+ struct drm_display_mode **modes;
+ struct drm_encoder *encoder;
+ struct drm_mode_set *modeset;
+ bool *enabled;
+ int width, height;
+ int i, ret;
+
+ DRM_DEBUG_KMS("\n");
+
+ width = dev->mode_config.max_width;
+ height = dev->mode_config.max_height;
+
+ /* clean out all the encoder/crtc combos */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ encoder->crtc = NULL;
+ }
+
+ crtcs = malloc(dev->mode_config.num_connector *
+ sizeof(struct drm_fb_helper_crtc *), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+ modes = malloc(dev->mode_config.num_connector *
+ sizeof(struct drm_display_mode *), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+ enabled = malloc(dev->mode_config.num_connector *
+ sizeof(bool), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ drm_enable_connectors(fb_helper, enabled);
+
+ ret = drm_target_cloned(fb_helper, modes, enabled, width, height);
+ if (!ret) {
+ ret = drm_target_preferred(fb_helper, modes, enabled, width, height);
+ if (!ret)
+ DRM_ERROR("Unable to find initial modes\n");
+ }
+
+ DRM_DEBUG_KMS("picking CRTCs for %dx%d config\n", width, height);
+
+ drm_pick_crtcs(fb_helper, crtcs, modes, 0, width, height);
+
+ /* need to set the modesets up here for use later */
+ /* fill out the connector<->crtc mappings into the modesets */
+ for (i = 0; i < fb_helper->crtc_count; i++) {
+ modeset = &fb_helper->crtc_info[i].mode_set;
+ modeset->num_connectors = 0;
+ }
+
+ for (i = 0; i < fb_helper->connector_count; i++) {
+ struct drm_display_mode *mode = modes[i];
+ struct drm_fb_helper_crtc *fb_crtc = crtcs[i];
+ modeset = &fb_crtc->mode_set;
+
+ if (mode && fb_crtc) {
+ DRM_DEBUG_KMS("desired mode %s set on crtc %d\n",
+ mode->name, fb_crtc->mode_set.crtc->base.id);
+ fb_crtc->desired_mode = mode;
+ if (modeset->mode)
+ drm_mode_destroy(dev, modeset->mode);
+ modeset->mode = drm_mode_duplicate(dev,
+ fb_crtc->desired_mode);
+ modeset->connectors[modeset->num_connectors++] = fb_helper->connector_info[i]->connector;
+ }
+ }
+
+ free(crtcs, DRM_MEM_KMS);
+ free(modes, DRM_MEM_KMS);
+ free(enabled, DRM_MEM_KMS);
+}
+
+/**
+ * drm_helper_initial_config - setup a sane initial connector configuration
+ * @dev: DRM device
+ *
+ * LOCKING:
+ * Called at init time, must take mode config lock.
+ *
+ * Scan the CRTCs and connectors and try to put together an initial setup.
+ * At the moment, this is a cloned configuration across all heads with
+ * a new framebuffer object as the backing store.
+ *
+ * RETURNS:
+ * Zero if everything went ok, nonzero otherwise.
+ */
+bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel)
+{
+ struct drm_device *dev = fb_helper->dev;
+ int count = 0;
+
+ /* disable all the possible outputs/crtcs before entering KMS mode */
+ drm_helper_disable_unused_functions(fb_helper->dev);
+
+ drm_fb_helper_parse_command_line(fb_helper);
+
+ count = drm_fb_helper_probe_connector_modes(fb_helper,
+ dev->mode_config.max_width,
+ dev->mode_config.max_height);
+ /*
+ * we shouldn't end up with no modes here.
+ */
+ if (count == 0) {
+ printf("No connectors reported connected with modes\n");
+ }
+ drm_setup_crtcs(fb_helper);
+
+ return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
+}
+
+int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
+{
+ struct drm_device *dev = fb_helper->dev;
+ int count = 0;
+ u32 max_width, max_height, bpp_sel;
+ bool bound = false, crtcs_bound = false;
+ struct drm_crtc *crtc;
+
+ if (!fb_helper->fb)
+ return 0;
+
+ sx_xlock(&dev->mode_config.mutex);
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ if (crtc->fb)
+ crtcs_bound = true;
+ if (crtc->fb == fb_helper->fb)
+ bound = true;
+ }
+
+ if (!bound && crtcs_bound) {
+ fb_helper->delayed_hotplug = true;
+ sx_xunlock(&dev->mode_config.mutex);
+ return 0;
+ }
+ DRM_DEBUG_KMS("\n");
+
+ max_width = fb_helper->fb->width;
+ max_height = fb_helper->fb->height;
+ bpp_sel = fb_helper->fb->bits_per_pixel;
+
+ count = drm_fb_helper_probe_connector_modes(fb_helper, max_width,
+ max_height);
+ drm_setup_crtcs(fb_helper);
+ sx_xunlock(&dev->mode_config.mutex);
+
+ return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
+}
+
diff --git a/sys/dev/drm2/drm_fb_helper.h b/sys/dev/drm2/drm_fb_helper.h
new file mode 100644
index 000000000000..4b5ef85c2e85
--- /dev/null
+++ b/sys/dev/drm2/drm_fb_helper.h
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2006-2009 Red Hat Inc.
+ * Copyright (c) 2006-2008 Intel Corporation
+ * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
+ *
+ * DRM framebuffer helper functions
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. The copyright holders make no representations
+ * about the suitability of this software for any purpose. It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * Authors:
+ * Dave Airlie <airlied@linux.ie>
+ * Jesse Barnes <jesse.barnes@intel.com>
+ *
+ * $FreeBSD$
+ */
+#ifndef DRM_FB_HELPER_H
+#define DRM_FB_HELPER_H
+
+struct drm_fb_helper;
+
+struct drm_fb_helper_crtc {
+ uint32_t crtc_id;
+ struct drm_mode_set mode_set;
+ struct drm_display_mode *desired_mode;
+};
+
+/* mode specified on the command line */
+struct drm_fb_helper_cmdline_mode {
+ bool specified;
+ bool refresh_specified;
+ bool bpp_specified;
+ int xres, yres;
+ int bpp;
+ int refresh;
+ bool rb;
+ bool interlace;
+ bool cvt;
+ bool margins;
+};
+
+struct drm_fb_helper_surface_size {
+ u32 fb_width;
+ u32 fb_height;
+ u32 surface_width;
+ u32 surface_height;
+ u32 surface_bpp;
+ u32 surface_depth;
+};
+
+struct drm_fb_helper_funcs {
+ void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green,
+ u16 blue, int regno);
+ void (*gamma_get)(struct drm_crtc *crtc, u16 *red, u16 *green,
+ u16 *blue, int regno);
+
+ int (*fb_probe)(struct drm_fb_helper *helper,
+ struct drm_fb_helper_surface_size *sizes);
+};
+
+struct drm_fb_helper_connector {
+ struct drm_fb_helper_cmdline_mode cmdline_mode;
+ struct drm_cmdline_mode cmdline_mode1;
+ struct drm_connector *connector;
+};
+
+struct drm_fb_helper {
+ struct drm_framebuffer *fb;
+ struct drm_framebuffer *saved_fb;
+ struct drm_device *dev;
+ struct drm_display_mode *mode;
+ int crtc_count;
+ struct drm_fb_helper_crtc *crtc_info;
+ int connector_count;
+ struct drm_fb_helper_connector **connector_info;
+ struct drm_fb_helper_funcs *funcs;
+ int conn_limit;
+ struct fb_info *fbdev;
+ u32 pseudo_palette[17];
+ struct list_head kernel_fb_list;
+
+ /* we got a hotplug but fbdev wasn't running the console
+ delay until next set_par */
+ bool delayed_hotplug;
+};
+
+struct fb_var_screeninfo;
+struct fb_cmap;
+
+int drm_fb_helper_single_fb_probe(struct drm_fb_helper *helper,
+ int preferred_bpp);
+
+int drm_fb_helper_init(struct drm_device *dev,
+ struct drm_fb_helper *helper, int crtc_count,
+ int max_conn);
+void drm_fb_helper_fini(struct drm_fb_helper *helper);
+int drm_fb_helper_blank(int blank, struct fb_info *info);
+int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
+ struct fb_info *info);
+int drm_fb_helper_set_par(struct fb_info *info);
+int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
+ struct fb_info *info);
+int drm_fb_helper_setcolreg(unsigned regno,
+ unsigned red,
+ unsigned green,
+ unsigned blue,
+ unsigned transp,
+ struct fb_info *info);
+
+bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper);
+void drm_fb_helper_restore(void);
+void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,
+ uint32_t fb_width, uint32_t fb_height);
+void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
+ uint32_t depth);
+
+int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info);
+
+int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper);
+bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel);
+int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper);
+int drm_fb_helper_debug_enter(struct fb_info *info);
+int drm_fb_helper_debug_leave(struct fb_info *info);
+bool drm_fb_helper_force_kernel_mode(void);
+
+#endif
diff --git a/sys/dev/drm2/drm_fops.c b/sys/dev/drm2/drm_fops.c
new file mode 100644
index 000000000000..00717837041e
--- /dev/null
+++ b/sys/dev/drm2/drm_fops.c
@@ -0,0 +1,202 @@
+/*-
+ * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Daryll Strauss <daryll@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_fops.c
+ * Support code for dealing with the file privates associated with each
+ * open of the DRM device.
+ */
+
+#include <dev/drm2/drmP.h>
+
+/* drm_open_helper is called whenever a process opens /dev/drm. */
+int drm_open_helper(struct cdev *kdev, int flags, int fmt, DRM_STRUCTPROC *p,
+ struct drm_device *dev)
+{
+ struct drm_file *priv;
+ int retcode;
+
+ if (flags & O_EXCL)
+ return EBUSY; /* No exclusive opens */
+ dev->flags = flags;
+
+ DRM_DEBUG("pid = %d, device = %s\n", DRM_CURRENTPID, devtoname(kdev));
+
+ priv = malloc(sizeof(*priv), DRM_MEM_FILES, M_NOWAIT | M_ZERO);
+ if (priv == NULL) {
+ return ENOMEM;
+ }
+
+ retcode = devfs_set_cdevpriv(priv, drm_close);
+ if (retcode != 0) {
+ free(priv, DRM_MEM_FILES);
+ return retcode;
+ }
+
+ DRM_LOCK(dev);
+ priv->dev = dev;
+ priv->uid = p->td_ucred->cr_svuid;
+ priv->pid = p->td_proc->p_pid;
+ priv->ioctl_count = 0;
+
+ /* for compatibility root is always authenticated */
+ priv->authenticated = DRM_SUSER(p);
+
+ INIT_LIST_HEAD(&priv->fbs);
+ INIT_LIST_HEAD(&priv->event_list);
+ priv->event_space = 4096; /* set aside 4k for event buffer */
+
+ if (dev->driver->driver_features & DRIVER_GEM)
+ drm_gem_open(dev, priv);
+
+ if (dev->driver->open) {
+ /* shared code returns -errno */
+ retcode = -dev->driver->open(dev, priv);
+ if (retcode != 0) {
+ devfs_clear_cdevpriv();
+ free(priv, DRM_MEM_FILES);
+ DRM_UNLOCK(dev);
+ return retcode;
+ }
+ }
+
+ /* first opener automatically becomes master */
+ priv->master = TAILQ_EMPTY(&dev->files);
+
+ TAILQ_INSERT_TAIL(&dev->files, priv, link);
+ DRM_UNLOCK(dev);
+ kdev->si_drv1 = dev;
+ return 0;
+}
+
+static bool
+drm_dequeue_event(struct drm_device *dev, struct drm_file *file_priv,
+ struct uio *uio, struct drm_pending_event **out)
+{
+ struct drm_pending_event *e;
+
+ if (list_empty(&file_priv->event_list))
+ return (false);
+ e = list_first_entry(&file_priv->event_list,
+ struct drm_pending_event, link);
+ if (e->event->length > uio->uio_resid)
+ return (false);
+
+ file_priv->event_space += e->event->length;
+ list_del(&e->link);
+ *out = e;
+ return (true);
+}
+
+int
+drm_read(struct cdev *kdev, struct uio *uio, int ioflag)
+{
+ struct drm_file *file_priv;
+ struct drm_device *dev;
+ struct drm_pending_event *e;
+ int error;
+
+ error = devfs_get_cdevpriv((void **)&file_priv);
+ if (error != 0) {
+ DRM_ERROR("can't find authenticator\n");
+ return (EINVAL);
+ }
+ dev = drm_get_device_from_kdev(kdev);
+ mtx_lock(&dev->event_lock);
+ while (list_empty(&file_priv->event_list)) {
+ if ((ioflag & O_NONBLOCK) != 0) {
+ error = EAGAIN;
+ goto out;
+ }
+ error = msleep(&file_priv->event_space, &dev->event_lock,
+ PCATCH, "drmrea", 0);
+ if (error != 0)
+ goto out;
+ }
+ while (drm_dequeue_event(dev, file_priv, uio, &e)) {
+ mtx_unlock(&dev->event_lock);
+ error = uiomove(e->event, e->event->length, uio);
+ CTR3(KTR_DRM, "drm_event_dequeued %d %d %d", curproc->p_pid,
+ e->event->type, e->event->length);
+ e->destroy(e);
+ if (error != 0)
+ return (error);
+ mtx_lock(&dev->event_lock);
+ }
+out:
+ mtx_unlock(&dev->event_lock);
+ return (error);
+}
+
+void
+drm_event_wakeup(struct drm_pending_event *e)
+{
+ struct drm_file *file_priv;
+ struct drm_device *dev;
+
+ file_priv = e->file_priv;
+ dev = file_priv->dev;
+ mtx_assert(&dev->event_lock, MA_OWNED);
+
+ wakeup(&file_priv->event_space);
+ selwakeup(&file_priv->event_poll);
+}
+
+int
+drm_poll(struct cdev *kdev, int events, struct thread *td)
+{
+ struct drm_file *file_priv;
+ struct drm_device *dev;
+ int error, revents;
+
+ error = devfs_get_cdevpriv((void **)&file_priv);
+ if (error != 0) {
+ DRM_ERROR("can't find authenticator\n");
+ return (EINVAL);
+ }
+ dev = drm_get_device_from_kdev(kdev);
+
+ revents = 0;
+ mtx_lock(&dev->event_lock);
+ if ((events & (POLLIN | POLLRDNORM)) != 0) {
+ if (list_empty(&file_priv->event_list)) {
+ CTR0(KTR_DRM, "drm_poll empty list");
+ selrecord(td, &file_priv->event_poll);
+ } else {
+ revents |= events & (POLLIN | POLLRDNORM);
+ CTR1(KTR_DRM, "drm_poll revents %x", revents);
+ }
+ }
+ mtx_unlock(&dev->event_lock);
+ return (revents);
+}
diff --git a/sys/dev/drm2/drm_fourcc.h b/sys/dev/drm2/drm_fourcc.h
new file mode 100644
index 000000000000..0e871df25d5d
--- /dev/null
+++ b/sys/dev/drm2/drm_fourcc.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2011 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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 DRM_FOURCC_H
+#define DRM_FOURCC_H
+
+#include <sys/types.h>
+
+#define fourcc_code(a, b, c, d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \
+ ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24))
+
+#define DRM_FORMAT_BIG_ENDIAN (1<<31) /* format is big endian instead of little endian */
+
+/* color index */
+#define DRM_FORMAT_C8 fourcc_code('C', '8', ' ', ' ') /* [7:0] C */
+
+/* 8 bpp RGB */
+#define DRM_FORMAT_RGB332 fourcc_code('R', 'G', 'B', '8') /* [7:0] R:G:B 3:3:2 */
+#define DRM_FORMAT_BGR233 fourcc_code('B', 'G', 'R', '8') /* [7:0] B:G:R 2:3:3 */
+
+/* 16 bpp RGB */
+#define DRM_FORMAT_XRGB4444 fourcc_code('X', 'R', '1', '2') /* [15:0] x:R:G:B 4:4:4:4 little endian */
+#define DRM_FORMAT_XBGR4444 fourcc_code('X', 'B', '1', '2') /* [15:0] x:B:G:R 4:4:4:4 little endian */
+#define DRM_FORMAT_RGBX4444 fourcc_code('R', 'X', '1', '2') /* [15:0] R:G:B:x 4:4:4:4 little endian */
+#define DRM_FORMAT_BGRX4444 fourcc_code('B', 'X', '1', '2') /* [15:0] B:G:R:x 4:4:4:4 little endian */
+
+#define DRM_FORMAT_ARGB4444 fourcc_code('A', 'R', '1', '2') /* [15:0] A:R:G:B 4:4:4:4 little endian */
+#define DRM_FORMAT_ABGR4444 fourcc_code('A', 'B', '1', '2') /* [15:0] A:B:G:R 4:4:4:4 little endian */
+#define DRM_FORMAT_RGBA4444 fourcc_code('R', 'A', '1', '2') /* [15:0] R:G:B:A 4:4:4:4 little endian */
+#define DRM_FORMAT_BGRA4444 fourcc_code('B', 'A', '1', '2') /* [15:0] B:G:R:A 4:4:4:4 little endian */
+
+#define DRM_FORMAT_XRGB1555 fourcc_code('X', 'R', '1', '5') /* [15:0] x:R:G:B 1:5:5:5 little endian */
+#define DRM_FORMAT_XBGR1555 fourcc_code('X', 'B', '1', '5') /* [15:0] x:B:G:R 1:5:5:5 little endian */
+#define DRM_FORMAT_RGBX5551 fourcc_code('R', 'X', '1', '5') /* [15:0] R:G:B:x 5:5:5:1 little endian */
+#define DRM_FORMAT_BGRX5551 fourcc_code('B', 'X', '1', '5') /* [15:0] B:G:R:x 5:5:5:1 little endian */
+
+#define DRM_FORMAT_ARGB1555 fourcc_code('A', 'R', '1', '5') /* [15:0] A:R:G:B 1:5:5:5 little endian */
+#define DRM_FORMAT_ABGR1555 fourcc_code('A', 'B', '1', '5') /* [15:0] A:B:G:R 1:5:5:5 little endian */
+#define DRM_FORMAT_RGBA5551 fourcc_code('R', 'A', '1', '5') /* [15:0] R:G:B:A 5:5:5:1 little endian */
+#define DRM_FORMAT_BGRA5551 fourcc_code('B', 'A', '1', '5') /* [15:0] B:G:R:A 5:5:5:1 little endian */
+
+#define DRM_FORMAT_RGB565 fourcc_code('R', 'G', '1', '6') /* [15:0] R:G:B 5:6:5 little endian */
+#define DRM_FORMAT_BGR565 fourcc_code('B', 'G', '1', '6') /* [15:0] B:G:R 5:6:5 little endian */
+
+/* 24 bpp RGB */
+#define DRM_FORMAT_RGB888 fourcc_code('R', 'G', '2', '4') /* [23:0] R:G:B little endian */
+#define DRM_FORMAT_BGR888 fourcc_code('B', 'G', '2', '4') /* [23:0] B:G:R little endian */
+
+/* 32 bpp RGB */
+#define DRM_FORMAT_XRGB8888 fourcc_code('X', 'R', '2', '4') /* [31:0] x:R:G:B 8:8:8:8 little endian */
+#define DRM_FORMAT_XBGR8888 fourcc_code('X', 'B', '2', '4') /* [31:0] x:B:G:R 8:8:8:8 little endian */
+#define DRM_FORMAT_RGBX8888 fourcc_code('R', 'X', '2', '4') /* [31:0] R:G:B:x 8:8:8:8 little endian */
+#define DRM_FORMAT_BGRX8888 fourcc_code('B', 'X', '2', '4') /* [31:0] B:G:R:x 8:8:8:8 little endian */
+
+#define DRM_FORMAT_ARGB8888 fourcc_code('A', 'R', '2', '4') /* [31:0] A:R:G:B 8:8:8:8 little endian */
+#define DRM_FORMAT_ABGR8888 fourcc_code('A', 'B', '2', '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */
+#define DRM_FORMAT_RGBA8888 fourcc_code('R', 'A', '2', '4') /* [31:0] R:G:B:A 8:8:8:8 little endian */
+#define DRM_FORMAT_BGRA8888 fourcc_code('B', 'A', '2', '4') /* [31:0] B:G:R:A 8:8:8:8 little endian */
+
+#define DRM_FORMAT_XRGB2101010 fourcc_code('X', 'R', '3', '0') /* [31:0] x:R:G:B 2:10:10:10 little endian */
+#define DRM_FORMAT_XBGR2101010 fourcc_code('X', 'B', '3', '0') /* [31:0] x:B:G:R 2:10:10:10 little endian */
+#define DRM_FORMAT_RGBX1010102 fourcc_code('R', 'X', '3', '0') /* [31:0] R:G:B:x 10:10:10:2 little endian */
+#define DRM_FORMAT_BGRX1010102 fourcc_code('B', 'X', '3', '0') /* [31:0] B:G:R:x 10:10:10:2 little endian */
+
+#define DRM_FORMAT_ARGB2101010 fourcc_code('A', 'R', '3', '0') /* [31:0] A:R:G:B 2:10:10:10 little endian */
+#define DRM_FORMAT_ABGR2101010 fourcc_code('A', 'B', '3', '0') /* [31:0] A:B:G:R 2:10:10:10 little endian */
+#define DRM_FORMAT_RGBA1010102 fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */
+#define DRM_FORMAT_BGRA1010102 fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */
+
+/* packed YCbCr */
+#define DRM_FORMAT_YUYV fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */
+#define DRM_FORMAT_YVYU fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */
+#define DRM_FORMAT_UYVY fourcc_code('U', 'Y', 'V', 'Y') /* [31:0] Y1:Cr0:Y0:Cb0 8:8:8:8 little endian */
+#define DRM_FORMAT_VYUY fourcc_code('V', 'Y', 'U', 'Y') /* [31:0] Y1:Cb0:Y0:Cr0 8:8:8:8 little endian */
+
+#define DRM_FORMAT_AYUV fourcc_code('A', 'Y', 'U', 'V') /* [31:0] A:Y:Cb:Cr 8:8:8:8 little endian */
+
+/*
+ * 2 plane YCbCr
+ * index 0 = Y plane, [7:0] Y
+ * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian
+ * or
+ * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian
+ */
+#define DRM_FORMAT_NV12 fourcc_code('N', 'V', '1', '2') /* 2x2 subsampled Cr:Cb plane */
+#define DRM_FORMAT_NV21 fourcc_code('N', 'V', '2', '1') /* 2x2 subsampled Cb:Cr plane */
+#define DRM_FORMAT_NV16 fourcc_code('N', 'V', '1', '6') /* 2x1 subsampled Cr:Cb plane */
+#define DRM_FORMAT_NV61 fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */
+
+/* 2 non contiguous plane YCbCr */
+#define DRM_FORMAT_NV12M fourcc_code('N', 'M', '1', '2') /* 2x2 subsampled Cr:Cb plane */
+#define DRM_FORMAT_NV12MT fourcc_code('T', 'M', '1', '2') /* 2x2 subsampled Cr:Cb plane 64x32 macroblocks */
+
+/*
+ * 3 plane YCbCr
+ * index 0: Y plane, [7:0] Y
+ * index 1: Cb plane, [7:0] Cb
+ * index 2: Cr plane, [7:0] Cr
+ * or
+ * index 1: Cr plane, [7:0] Cr
+ * index 2: Cb plane, [7:0] Cb
+ */
+#define DRM_FORMAT_YUV410 fourcc_code('Y', 'U', 'V', '9') /* 4x4 subsampled Cb (1) and Cr (2) planes */
+#define DRM_FORMAT_YVU410 fourcc_code('Y', 'V', 'U', '9') /* 4x4 subsampled Cr (1) and Cb (2) planes */
+#define DRM_FORMAT_YUV411 fourcc_code('Y', 'U', '1', '1') /* 4x1 subsampled Cb (1) and Cr (2) planes */
+#define DRM_FORMAT_YVU411 fourcc_code('Y', 'V', '1', '1') /* 4x1 subsampled Cr (1) and Cb (2) planes */
+#define DRM_FORMAT_YUV420 fourcc_code('Y', 'U', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */
+#define DRM_FORMAT_YVU420 fourcc_code('Y', 'V', '1', '2') /* 2x2 subsampled Cr (1) and Cb (2) planes */
+#define DRM_FORMAT_YUV422 fourcc_code('Y', 'U', '1', '6') /* 2x1 subsampled Cb (1) and Cr (2) planes */
+#define DRM_FORMAT_YVU422 fourcc_code('Y', 'V', '1', '6') /* 2x1 subsampled Cr (1) and Cb (2) planes */
+#define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */
+#define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */
+
+/* 3 non contiguous plane YCbCr */
+#define DRM_FORMAT_YUV420M fourcc_code('Y', 'M', '1', '2') /* 2x2 subsampled Cb (1) and Cr (2) planes */
+
+#endif /* DRM_FOURCC_H */
diff --git a/sys/dev/drm2/drm_gem.c b/sys/dev/drm2/drm_gem.c
new file mode 100644
index 000000000000..3401de88ee57
--- /dev/null
+++ b/sys/dev/drm2/drm_gem.c
@@ -0,0 +1,487 @@
+/*-
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Konstantin Belousov 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 "opt_vm.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/limits.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+
+#include <vm/vm.h>
+#include <vm/vm_page.h>
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_sarea.h>
+
+/*
+ * We make up offsets for buffer objects so we can recognize them at
+ * mmap time.
+ */
+
+/* pgoff in mmap is an unsigned long, so we need to make sure that
+ * the faked up offset will fit
+ */
+
+#if ULONG_MAX == UINT64_MAX
+#define DRM_FILE_PAGE_OFFSET_START ((0xFFFFFFFFUL >> PAGE_SHIFT) + 1)
+#define DRM_FILE_PAGE_OFFSET_SIZE ((0xFFFFFFFFUL >> PAGE_SHIFT) * 16)
+#else
+#define DRM_FILE_PAGE_OFFSET_START ((0xFFFFFFFUL >> PAGE_SHIFT) + 1)
+#define DRM_FILE_PAGE_OFFSET_SIZE ((0xFFFFFFFUL >> PAGE_SHIFT) * 16)
+#endif
+
+int
+drm_gem_init(struct drm_device *dev)
+{
+ struct drm_gem_mm *mm;
+
+ drm_gem_names_init(&dev->object_names);
+ mm = malloc(sizeof(*mm), DRM_MEM_DRIVER, M_WAITOK);
+ dev->mm_private = mm;
+ if (drm_ht_create(&mm->offset_hash, 19) != 0) {
+ free(mm, DRM_MEM_DRIVER);
+ return (ENOMEM);
+ }
+ mm->idxunr = new_unrhdr(0, DRM_GEM_MAX_IDX, NULL);
+ return (0);
+}
+
+void
+drm_gem_destroy(struct drm_device *dev)
+{
+ struct drm_gem_mm *mm;
+
+ mm = dev->mm_private;
+ dev->mm_private = NULL;
+ drm_ht_remove(&mm->offset_hash);
+ delete_unrhdr(mm->idxunr);
+ free(mm, DRM_MEM_DRIVER);
+ drm_gem_names_fini(&dev->object_names);
+}
+
+int
+drm_gem_object_init(struct drm_device *dev, struct drm_gem_object *obj,
+ size_t size)
+{
+
+ KASSERT((size & (PAGE_SIZE - 1)) == 0,
+ ("Bad size %ju", (uintmax_t)size));
+
+ obj->dev = dev;
+ obj->vm_obj = vm_pager_allocate(OBJT_DEFAULT, NULL, size,
+ VM_PROT_READ | VM_PROT_WRITE, 0, curthread->td_ucred);
+
+ obj->refcount = 1;
+ obj->handle_count = 0;
+ obj->size = size;
+
+ return (0);
+}
+
+int
+drm_gem_private_object_init(struct drm_device *dev, struct drm_gem_object *obj,
+ size_t size)
+{
+
+ MPASS((size & (PAGE_SIZE - 1)) == 0);
+
+ obj->dev = dev;
+ obj->vm_obj = NULL;
+
+ obj->refcount = 1;
+ atomic_set(&obj->handle_count, 0);
+ obj->size = size;
+
+ return (0);
+}
+
+
+struct drm_gem_object *
+drm_gem_object_alloc(struct drm_device *dev, size_t size)
+{
+ struct drm_gem_object *obj;
+
+ obj = malloc(sizeof(*obj), DRM_MEM_DRIVER, M_WAITOK | M_ZERO);
+ if (drm_gem_object_init(dev, obj, size) != 0)
+ goto free;
+
+ if (dev->driver->gem_init_object != NULL &&
+ dev->driver->gem_init_object(obj) != 0)
+ goto dealloc;
+ return (obj);
+dealloc:
+ vm_object_deallocate(obj->vm_obj);
+free:
+ free(obj, DRM_MEM_DRIVER);
+ return (NULL);
+}
+
+void
+drm_gem_object_free(struct drm_gem_object *obj)
+{
+ struct drm_device *dev;
+
+ dev = obj->dev;
+ DRM_LOCK_ASSERT(dev);
+ if (dev->driver->gem_free_object != NULL)
+ dev->driver->gem_free_object(obj);
+}
+
+void
+drm_gem_object_reference(struct drm_gem_object *obj)
+{
+
+ KASSERT(obj->refcount > 0, ("Dandling obj %p", obj));
+ refcount_acquire(&obj->refcount);
+}
+
+void
+drm_gem_object_unreference(struct drm_gem_object *obj)
+{
+
+ if (obj == NULL)
+ return;
+ if (refcount_release(&obj->refcount))
+ drm_gem_object_free(obj);
+}
+
+void
+drm_gem_object_unreference_unlocked(struct drm_gem_object *obj)
+{
+ struct drm_device *dev;
+
+ if (obj == NULL)
+ return;
+ dev = obj->dev;
+ DRM_LOCK(dev);
+ drm_gem_object_unreference(obj);
+ DRM_UNLOCK(dev);
+}
+
+void
+drm_gem_object_handle_reference(struct drm_gem_object *obj)
+{
+
+ drm_gem_object_reference(obj);
+ atomic_add_rel_int(&obj->handle_count, 1);
+}
+
+void
+drm_gem_object_handle_free(struct drm_gem_object *obj)
+{
+ struct drm_device *dev;
+ struct drm_gem_object *obj1;
+
+ dev = obj->dev;
+ if (obj->name != 0) {
+ obj1 = drm_gem_names_remove(&dev->object_names, obj->name);
+ obj->name = 0;
+ drm_gem_object_unreference(obj1);
+ }
+}
+
+void
+drm_gem_object_handle_unreference(struct drm_gem_object *obj)
+{
+
+ if (obj == NULL ||
+ atomic_load_acq_int(&obj->handle_count) == 0)
+ return;
+
+ if (atomic_fetchadd_int(&obj->handle_count, -1) == 1)
+ drm_gem_object_handle_free(obj);
+ drm_gem_object_unreference(obj);
+}
+
+void
+drm_gem_object_handle_unreference_unlocked(struct drm_gem_object *obj)
+{
+
+ if (obj == NULL ||
+ atomic_load_acq_int(&obj->handle_count) == 0)
+ return;
+
+ if (atomic_fetchadd_int(&obj->handle_count, -1) == 1)
+ drm_gem_object_handle_free(obj);
+ drm_gem_object_unreference_unlocked(obj);
+}
+
+int
+drm_gem_handle_create(struct drm_file *file_priv, struct drm_gem_object *obj,
+ uint32_t *handle)
+{
+ int error;
+
+ error = drm_gem_name_create(&file_priv->object_names, obj, handle);
+ if (error != 0)
+ return (error);
+ drm_gem_object_handle_reference(obj);
+ return (0);
+}
+
+int
+drm_gem_handle_delete(struct drm_file *file_priv, uint32_t handle)
+{
+ struct drm_gem_object *obj;
+
+ obj = drm_gem_names_remove(&file_priv->object_names, handle);
+ if (obj == NULL)
+ return (EINVAL);
+ drm_gem_object_handle_unreference_unlocked(obj);
+ return (0);
+}
+
+void
+drm_gem_object_release(struct drm_gem_object *obj)
+{
+
+ /*
+ * obj->vm_obj can be NULL for private gem objects.
+ */
+ vm_object_deallocate(obj->vm_obj);
+}
+
+int
+drm_gem_open_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_gem_open *args;
+ struct drm_gem_object *obj;
+ int ret;
+ uint32_t handle;
+
+ if (!drm_core_check_feature(dev, DRIVER_GEM))
+ return (ENODEV);
+ args = data;
+
+ obj = drm_gem_name_ref(&dev->object_names, args->name,
+ (void (*)(void *))drm_gem_object_reference);
+ if (obj == NULL)
+ return (ENOENT);
+ handle = 0;
+ ret = drm_gem_handle_create(file_priv, obj, &handle);
+ drm_gem_object_unreference_unlocked(obj);
+ if (ret != 0)
+ return (ret);
+
+ args->handle = handle;
+ args->size = obj->size;
+
+ return (0);
+}
+
+void
+drm_gem_open(struct drm_device *dev, struct drm_file *file_priv)
+{
+
+ drm_gem_names_init(&file_priv->object_names);
+}
+
+static int
+drm_gem_object_release_handle(uint32_t name, void *ptr, void *arg)
+{
+ struct drm_gem_object *obj;
+
+ obj = ptr;
+ drm_gem_object_handle_unreference(obj);
+ return (0);
+}
+
+void
+drm_gem_release(struct drm_device *dev, struct drm_file *file_priv)
+{
+
+ drm_gem_names_foreach(&file_priv->object_names,
+ drm_gem_object_release_handle, NULL);
+ drm_gem_names_fini(&file_priv->object_names);
+}
+
+int
+drm_gem_close_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_gem_close *args;
+
+ if (!drm_core_check_feature(dev, DRIVER_GEM))
+ return (ENODEV);
+ args = data;
+
+ return (drm_gem_handle_delete(file_priv, args->handle));
+}
+
+int
+drm_gem_flink_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_gem_flink *args;
+ struct drm_gem_object *obj;
+ int error;
+
+ if (!drm_core_check_feature(dev, DRIVER_GEM))
+ return (ENODEV);
+ args = data;
+
+ obj = drm_gem_name_ref(&file_priv->object_names, args->handle,
+ (void (*)(void *))drm_gem_object_reference);
+ if (obj == NULL)
+ return (ENOENT);
+ error = drm_gem_name_create(&dev->object_names, obj, &obj->name);
+ if (error != 0) {
+ if (error == EALREADY)
+ error = 0;
+ drm_gem_object_unreference_unlocked(obj);
+ }
+ if (error == 0)
+ args->name = obj->name;
+ return (error);
+}
+
+struct drm_gem_object *
+drm_gem_object_lookup(struct drm_device *dev, struct drm_file *file_priv,
+ uint32_t handle)
+{
+ struct drm_gem_object *obj;
+
+ obj = drm_gem_name_ref(&file_priv->object_names, handle,
+ (void (*)(void *))drm_gem_object_reference);
+ return (obj);
+}
+
+static struct drm_gem_object *
+drm_gem_object_from_offset(struct drm_device *dev, vm_ooffset_t offset)
+{
+ struct drm_gem_object *obj;
+ struct drm_gem_mm *mm;
+ struct drm_hash_item *map_list;
+
+ if ((offset & DRM_GEM_MAPPING_MASK) != DRM_GEM_MAPPING_KEY)
+ return (NULL);
+ offset &= ~DRM_GEM_MAPPING_KEY;
+ mm = dev->mm_private;
+ if (drm_ht_find_item(&mm->offset_hash, DRM_GEM_MAPPING_IDX(offset),
+ &map_list) != 0) {
+ DRM_DEBUG("drm_gem_object_from_offset: offset 0x%jx obj not found\n",
+ (uintmax_t)offset);
+ return (NULL);
+ }
+ obj = member2struct(drm_gem_object, map_list, map_list);
+ return (obj);
+}
+
+int
+drm_gem_create_mmap_offset(struct drm_gem_object *obj)
+{
+ struct drm_device *dev;
+ struct drm_gem_mm *mm;
+ int ret;
+
+ if (obj->on_map)
+ return (0);
+ dev = obj->dev;
+ mm = dev->mm_private;
+ ret = 0;
+
+ obj->map_list.key = alloc_unr(mm->idxunr);
+ ret = drm_ht_insert_item(&mm->offset_hash, &obj->map_list);
+ if (ret != 0) {
+ DRM_ERROR("failed to add to map hash\n");
+ free_unr(mm->idxunr, obj->map_list.key);
+ return (ret);
+ }
+ obj->on_map = true;
+ return (0);
+}
+
+void
+drm_gem_free_mmap_offset(struct drm_gem_object *obj)
+{
+ struct drm_hash_item *list;
+ struct drm_gem_mm *mm;
+
+ if (!obj->on_map)
+ return;
+ mm = obj->dev->mm_private;
+ list = &obj->map_list;
+
+ drm_ht_remove_item(&mm->offset_hash, list);
+ free_unr(mm->idxunr, list->key);
+ obj->on_map = false;
+}
+
+int
+drm_gem_mmap_single(struct cdev *kdev, vm_ooffset_t *offset, vm_size_t size,
+ struct vm_object **obj_res, int nprot)
+{
+ struct drm_device *dev;
+ struct drm_gem_object *gem_obj;
+ struct vm_object *vm_obj;
+
+ dev = drm_get_device_from_kdev(kdev);
+ if ((dev->driver->driver_features & DRIVER_GEM) == 0)
+ return (ENODEV);
+ DRM_LOCK(dev);
+ gem_obj = drm_gem_object_from_offset(dev, *offset);
+ if (gem_obj == NULL) {
+ DRM_UNLOCK(dev);
+ return (ENODEV);
+ }
+ drm_gem_object_reference(gem_obj);
+ DRM_UNLOCK(dev);
+ vm_obj = cdev_pager_allocate(gem_obj, OBJT_MGTDEVICE,
+ dev->driver->gem_pager_ops, size, nprot,
+ DRM_GEM_MAPPING_MAPOFF(*offset), curthread->td_ucred);
+ if (vm_obj == NULL) {
+ drm_gem_object_unreference_unlocked(gem_obj);
+ return (EINVAL);
+ }
+ *offset = DRM_GEM_MAPPING_MAPOFF(*offset);
+ *obj_res = vm_obj;
+ return (0);
+}
+
+void
+drm_gem_pager_dtr(void *handle)
+{
+ struct drm_gem_object *obj;
+ struct drm_device *dev;
+
+ obj = handle;
+ dev = obj->dev;
+
+ DRM_LOCK(dev);
+ drm_gem_free_mmap_offset(obj);
+ drm_gem_object_unreference(obj);
+ DRM_UNLOCK(dev);
+}
diff --git a/sys/dev/drm2/drm_gem_names.c b/sys/dev/drm2/drm_gem_names.c
new file mode 100644
index 000000000000..2577d132206f
--- /dev/null
+++ b/sys/dev/drm2/drm_gem_names.c
@@ -0,0 +1,211 @@
+/*-
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Konstantin Belousov 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 <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/limits.h>
+#include <sys/malloc.h>
+
+#include <dev/drm2/drm_gem_names.h>
+
+MALLOC_DEFINE(M_GEM_NAMES, "gem_name", "Hash headers for the gem names");
+
+static void drm_gem_names_delete_name(struct drm_gem_names *names,
+ struct drm_gem_name *np);
+
+void
+drm_gem_names_init(struct drm_gem_names *names)
+{
+
+ names->unr = new_unrhdr(1, INT_MAX, NULL); /* XXXKIB */
+ names->names_hash = hashinit(1000 /* XXXKIB */, M_GEM_NAMES,
+ &names->hash_mask);
+ mtx_init(&names->lock, "drmnames", NULL, MTX_DEF);
+}
+
+void
+drm_gem_names_fini(struct drm_gem_names *names)
+{
+ struct drm_gem_name *np;
+ int i;
+
+ mtx_lock(&names->lock);
+ for (i = 0; i <= names->hash_mask; i++) {
+ while ((np = LIST_FIRST(&names->names_hash[i])) != NULL) {
+ drm_gem_names_delete_name(names, np);
+ mtx_lock(&names->lock);
+ }
+ }
+ mtx_unlock(&names->lock);
+ mtx_destroy(&names->lock);
+ hashdestroy(names->names_hash, M_GEM_NAMES, names->hash_mask);
+ delete_unrhdr(names->unr);
+}
+
+static struct drm_gem_names_head *
+gem_name_hash_index(struct drm_gem_names *names, int name)
+{
+
+ return (&names->names_hash[name & names->hash_mask]);
+}
+
+void *
+drm_gem_name_ref(struct drm_gem_names *names, uint32_t name,
+ void (*ref)(void *))
+{
+ struct drm_gem_name *n;
+
+ mtx_lock(&names->lock);
+ LIST_FOREACH(n, gem_name_hash_index(names, name), link) {
+ if (n->name == name) {
+ if (ref != NULL)
+ ref(n->ptr);
+ mtx_unlock(&names->lock);
+ return (n->ptr);
+ }
+ }
+ mtx_unlock(&names->lock);
+ return (NULL);
+}
+
+struct drm_gem_ptr_match_arg {
+ uint32_t res;
+ void *ptr;
+};
+
+static int
+drm_gem_ptr_match(uint32_t name, void *ptr, void *arg)
+{
+ struct drm_gem_ptr_match_arg *a;
+
+ a = arg;
+ if (ptr == a->ptr) {
+ a->res = name;
+ return (1);
+ } else
+ return (0);
+}
+
+uint32_t
+drm_gem_find_name(struct drm_gem_names *names, void *ptr)
+{
+ struct drm_gem_ptr_match_arg arg;
+
+ arg.res = 0;
+ arg.ptr = ptr;
+ drm_gem_names_foreach(names, drm_gem_ptr_match, &arg);
+ return (arg.res);
+}
+
+int
+drm_gem_name_create(struct drm_gem_names *names, void *p, uint32_t *name)
+{
+ struct drm_gem_name *np;
+
+ np = malloc(sizeof(struct drm_gem_name), M_GEM_NAMES, M_WAITOK);
+ mtx_lock(&names->lock);
+ if (*name != 0) {
+ mtx_unlock(&names->lock);
+ return (EALREADY);
+ }
+ np->name = alloc_unr(names->unr);
+ if (np->name == -1) {
+ mtx_unlock(&names->lock);
+ free(np, M_GEM_NAMES);
+ return (ENOMEM);
+ }
+ *name = np->name;
+ np->ptr = p;
+ LIST_INSERT_HEAD(gem_name_hash_index(names, np->name), np, link);
+ mtx_unlock(&names->lock);
+ return (0);
+}
+
+static void
+drm_gem_names_delete_name(struct drm_gem_names *names, struct drm_gem_name *np)
+{
+
+ mtx_assert(&names->lock, MA_OWNED);
+ LIST_REMOVE(np, link);
+ mtx_unlock(&names->lock);
+ free_unr(names->unr, np->name);
+ free(np, M_GEM_NAMES);
+}
+
+void *
+drm_gem_names_remove(struct drm_gem_names *names, uint32_t name)
+{
+ struct drm_gem_name *n;
+ void *res;
+
+ mtx_lock(&names->lock);
+ LIST_FOREACH(n, gem_name_hash_index(names, name), link) {
+ if (n->name == name) {
+ res = n->ptr;
+ drm_gem_names_delete_name(names, n);
+ return (res);
+ }
+ }
+ mtx_unlock(&names->lock);
+ return (NULL);
+}
+
+void
+drm_gem_names_foreach(struct drm_gem_names *names,
+ int (*f)(uint32_t, void *, void *), void *arg)
+{
+ struct drm_gem_name *np;
+ struct drm_gem_name marker;
+ int i, fres;
+
+ bzero(&marker, sizeof(marker));
+ marker.name = -1;
+ mtx_lock(&names->lock);
+ for (i = 0; i <= names->hash_mask; i++) {
+ for (np = LIST_FIRST(&names->names_hash[i]); np != NULL; ) {
+ if (np->name == -1) {
+ np = LIST_NEXT(np, link);
+ continue;
+ }
+ LIST_INSERT_AFTER(np, &marker, link);
+ mtx_unlock(&names->lock);
+ fres = f(np->name, np->ptr, arg);
+ mtx_lock(&names->lock);
+ np = LIST_NEXT(&marker, link);
+ LIST_REMOVE(&marker, link);
+ if (fres)
+ break;
+ }
+ }
+ mtx_unlock(&names->lock);
+}
diff --git a/sys/dev/drm2/drm_gem_names.h b/sys/dev/drm2/drm_gem_names.h
new file mode 100644
index 000000000000..0fe4edd99212
--- /dev/null
+++ b/sys/dev/drm2/drm_gem_names.h
@@ -0,0 +1,64 @@
+/*-
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Konstantin Belousov 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.
+ *
+ * $FreeBSD$
+ *
+ */
+
+#ifndef DRM_GEM_NAMES_H
+#define DRM_GEM_NAMES_H
+
+#include <sys/types.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/queue.h>
+
+struct drm_gem_name {
+ uint32_t name;
+ void *ptr;
+ LIST_ENTRY(drm_gem_name) link;
+};
+
+struct drm_gem_names {
+ struct mtx lock;
+ LIST_HEAD(drm_gem_names_head, drm_gem_name) *names_hash;
+ u_long hash_mask;
+ struct unrhdr *unr;
+};
+
+void drm_gem_names_init(struct drm_gem_names *names);
+void drm_gem_names_fini(struct drm_gem_names *names);
+uint32_t drm_gem_find_name(struct drm_gem_names *names, void *ptr);
+void *drm_gem_name_ref(struct drm_gem_names *names, uint32_t name,
+ void (*ref)(void *));
+int drm_gem_name_create(struct drm_gem_names *names, void *obj, uint32_t *name);
+void drm_gem_names_foreach(struct drm_gem_names *names,
+ int (*f)(uint32_t, void *, void *), void *arg);
+void *drm_gem_names_remove(struct drm_gem_names *names, uint32_t name);
+
+#endif
diff --git a/sys/dev/drm2/drm_hashtab.c b/sys/dev/drm2/drm_hashtab.c
new file mode 100644
index 000000000000..8536fb89a86a
--- /dev/null
+++ b/sys/dev/drm2/drm_hashtab.c
@@ -0,0 +1,181 @@
+/**************************************************************************
+ *
+ * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND. USA.
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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.
+ *
+ *
+ **************************************************************************/
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Simple open hash tab implementation.
+ *
+ * Authors:
+ * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ */
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_hashtab.h>
+
+#include <sys/hash.h>
+
+int drm_ht_create(struct drm_open_hash *ht, unsigned int order)
+{
+ ht->size = 1 << order;
+ ht->order = order;
+ ht->table = NULL;
+ ht->table = hashinit_flags(ht->size, DRM_MEM_HASHTAB, &ht->mask,
+ HASH_NOWAIT);
+ if (!ht->table) {
+ DRM_ERROR("Out of memory for hash table\n");
+ return -ENOMEM;
+ }
+ return 0;
+}
+
+void drm_ht_verbose_list(struct drm_open_hash *ht, unsigned long key)
+{
+ struct drm_hash_item *entry;
+ struct drm_hash_item_list *h_list;
+ unsigned int hashed_key;
+ int count = 0;
+
+ hashed_key = hash32_buf(&key, sizeof(key), ht->order);
+ DRM_DEBUG("Key is 0x%08lx, Hashed key is 0x%08x\n", key, hashed_key);
+ h_list = &ht->table[hashed_key & ht->mask];
+ LIST_FOREACH(entry, h_list, head)
+ DRM_DEBUG("count %d, key: 0x%08lx\n", count++, entry->key);
+}
+
+static struct drm_hash_item *
+drm_ht_find_key(struct drm_open_hash *ht, unsigned long key)
+{
+ struct drm_hash_item *entry;
+ struct drm_hash_item_list *h_list;
+ unsigned int hashed_key;
+
+ hashed_key = hash32_buf(&key, sizeof(key), ht->order);
+ h_list = &ht->table[hashed_key & ht->mask];
+ LIST_FOREACH(entry, h_list, head) {
+ if (entry->key == key)
+ return entry;
+ if (entry->key > key)
+ break;
+ }
+ return NULL;
+}
+
+
+int drm_ht_insert_item(struct drm_open_hash *ht, struct drm_hash_item *item)
+{
+ struct drm_hash_item *entry, *parent;
+ struct drm_hash_item_list *h_list;
+ unsigned int hashed_key;
+ unsigned long key = item->key;
+
+ hashed_key = hash32_buf(&key, sizeof(key), ht->order);
+ h_list = &ht->table[hashed_key & ht->mask];
+ parent = NULL;
+ LIST_FOREACH(entry, h_list, head) {
+ if (entry->key == key)
+ return -EINVAL;
+ if (entry->key > key)
+ break;
+ parent = entry;
+ }
+ if (parent) {
+ LIST_INSERT_AFTER(parent, item, head);
+ } else {
+ LIST_INSERT_HEAD(h_list, item, head);
+ }
+ return 0;
+}
+
+/*
+ * Just insert an item and return any "bits" bit key that hasn't been
+ * used before.
+ */
+int drm_ht_just_insert_please(struct drm_open_hash *ht, struct drm_hash_item *item,
+ unsigned long seed, int bits, int shift,
+ unsigned long add)
+{
+ int ret;
+ unsigned long mask = (1 << bits) - 1;
+ unsigned long first, unshifted_key = 0;
+
+ unshifted_key = hash32_buf(&seed, sizeof(seed), unshifted_key);
+ first = unshifted_key;
+ do {
+ item->key = (unshifted_key << shift) + add;
+ ret = drm_ht_insert_item(ht, item);
+ if (ret)
+ unshifted_key = (unshifted_key + 1) & mask;
+ } while(ret && (unshifted_key != first));
+
+ if (ret) {
+ DRM_ERROR("Available key bit space exhausted\n");
+ return -EINVAL;
+ }
+ return 0;
+}
+
+int drm_ht_find_item(struct drm_open_hash *ht, unsigned long key,
+ struct drm_hash_item **item)
+{
+ struct drm_hash_item *entry;
+
+ entry = drm_ht_find_key(ht, key);
+ if (!entry)
+ return -EINVAL;
+
+ *item = entry;
+ return 0;
+}
+
+int drm_ht_remove_key(struct drm_open_hash *ht, unsigned long key)
+{
+ struct drm_hash_item *entry;
+
+ entry = drm_ht_find_key(ht, key);
+ if (entry) {
+ LIST_REMOVE(entry, head);
+ return 0;
+ }
+ return -EINVAL;
+}
+
+int drm_ht_remove_item(struct drm_open_hash *ht, struct drm_hash_item *item)
+{
+ LIST_REMOVE(item, head);
+ return 0;
+}
+
+void drm_ht_remove(struct drm_open_hash *ht)
+{
+ if (ht->table) {
+ hashdestroy(ht->table, DRM_MEM_HASHTAB, ht->mask);
+ ht->table = NULL;
+ }
+}
diff --git a/sys/dev/drm2/drm_hashtab.h b/sys/dev/drm2/drm_hashtab.h
new file mode 100644
index 000000000000..fc200b5223e8
--- /dev/null
+++ b/sys/dev/drm2/drm_hashtab.h
@@ -0,0 +1,68 @@
+/**************************************************************************
+ *
+ * Copyright 2006 Tungsten Graphics, Inc., Bismack, ND. USA.
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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.
+ *
+ *
+ **************************************************************************/
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Simple open hash tab implementation.
+ *
+ * Authors:
+ * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ */
+
+#ifndef DRM_HASHTAB_H
+#define DRM_HASHTAB_H
+
+#define drm_hash_entry(_ptr, _type, _member) container_of(_ptr, _type, _member)
+
+struct drm_hash_item {
+ LIST_ENTRY(drm_hash_item) head;
+ unsigned long key;
+};
+
+struct drm_open_hash {
+ LIST_HEAD(drm_hash_item_list, drm_hash_item) *table;
+ unsigned int size;
+ unsigned int order;
+ unsigned long mask;
+};
+
+extern int drm_ht_create(struct drm_open_hash *ht, unsigned int order);
+extern int drm_ht_insert_item(struct drm_open_hash *ht, struct drm_hash_item *item);
+extern int drm_ht_just_insert_please(struct drm_open_hash *ht, struct drm_hash_item *item,
+ unsigned long seed, int bits, int shift,
+ unsigned long add);
+extern int drm_ht_find_item(struct drm_open_hash *ht, unsigned long key, struct drm_hash_item **item);
+
+extern void drm_ht_verbose_list(struct drm_open_hash *ht, unsigned long key);
+extern int drm_ht_remove_key(struct drm_open_hash *ht, unsigned long key);
+extern int drm_ht_remove_item(struct drm_open_hash *ht, struct drm_hash_item *item);
+extern void drm_ht_remove(struct drm_open_hash *ht);
+
+#endif
diff --git a/sys/dev/drm2/drm_internal.h b/sys/dev/drm2/drm_internal.h
new file mode 100644
index 000000000000..0ed1b6f78ee7
--- /dev/null
+++ b/sys/dev/drm2/drm_internal.h
@@ -0,0 +1,43 @@
+/*-
+ * Copyright 2007 Red Hat, Inc
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/* This header file holds function prototypes and data types that are
+ * internal to the drm (not exported to user space) but shared across
+ * drivers and platforms */
+
+#ifndef __DRM_INTERNAL_H__
+#define __DRM_INTERNAL_H__
+
+/**
+ * Drawable information.
+ */
+struct drm_drawable_info {
+ unsigned int num_rects;
+ struct drm_clip_rect *rects;
+};
+
+#endif
diff --git a/sys/dev/drm2/drm_ioctl.c b/sys/dev/drm2/drm_ioctl.c
new file mode 100644
index 000000000000..b2c7affc593c
--- /dev/null
+++ b/sys/dev/drm2/drm_ioctl.c
@@ -0,0 +1,320 @@
+/*-
+ * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_ioctl.c
+ * Varios minor DRM ioctls not applicable to other files, such as versioning
+ * information and reporting DRM information to userland.
+ */
+
+#include <dev/drm2/drmP.h>
+
+/*
+ * Beginning in revision 1.1 of the DRM interface, getunique will return
+ * a unique in the form pci:oooo:bb:dd.f (o=domain, b=bus, d=device, f=function)
+ * before setunique has been called. The format for the bus-specific part of
+ * the unique is not defined for any other bus.
+ */
+int drm_getunique(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_unique *u = data;
+
+ if (u->unique_len >= dev->unique_len) {
+ if (DRM_COPY_TO_USER(u->unique, dev->unique, dev->unique_len))
+ return EFAULT;
+ }
+ u->unique_len = dev->unique_len;
+
+ return 0;
+}
+
+/* Deprecated in DRM version 1.1, and will return EBUSY when setversion has
+ * requested version 1.1 or greater.
+ */
+int drm_setunique(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_unique *u = data;
+ int domain, bus, slot, func, ret;
+ char *busid;
+
+ /* Check and copy in the submitted Bus ID */
+ if (!u->unique_len || u->unique_len > 1024)
+ return EINVAL;
+
+ busid = malloc(u->unique_len + 1, DRM_MEM_DRIVER, M_WAITOK);
+ if (busid == NULL)
+ return ENOMEM;
+
+ if (DRM_COPY_FROM_USER(busid, u->unique, u->unique_len)) {
+ free(busid, DRM_MEM_DRIVER);
+ return EFAULT;
+ }
+ busid[u->unique_len] = '\0';
+
+ /* Return error if the busid submitted doesn't match the device's actual
+ * busid.
+ */
+ ret = sscanf(busid, "PCI:%d:%d:%d", &bus, &slot, &func);
+ if (ret != 3) {
+ free(busid, DRM_MEM_DRIVER);
+ return EINVAL;
+ }
+ domain = bus >> 8;
+ bus &= 0xff;
+
+ if ((domain != dev->pci_domain) ||
+ (bus != dev->pci_bus) ||
+ (slot != dev->pci_slot) ||
+ (func != dev->pci_func)) {
+ free(busid, DRM_MEM_DRIVER);
+ return EINVAL;
+ }
+
+ /* Actually set the device's busid now. */
+ DRM_LOCK(dev);
+ if (dev->unique_len || dev->unique) {
+ DRM_UNLOCK(dev);
+ return EBUSY;
+ }
+
+ dev->unique_len = u->unique_len;
+ dev->unique = busid;
+ DRM_UNLOCK(dev);
+
+ return 0;
+}
+
+
+static int
+drm_set_busid(struct drm_device *dev)
+{
+
+ DRM_LOCK(dev);
+
+ if (dev->unique != NULL) {
+ DRM_UNLOCK(dev);
+ return EBUSY;
+ }
+
+ dev->unique_len = 20;
+ dev->unique = malloc(dev->unique_len + 1, DRM_MEM_DRIVER, M_NOWAIT);
+ if (dev->unique == NULL) {
+ DRM_UNLOCK(dev);
+ return ENOMEM;
+ }
+
+ snprintf(dev->unique, dev->unique_len, "pci:%04x:%02x:%02x.%1x",
+ dev->pci_domain, dev->pci_bus, dev->pci_slot, dev->pci_func);
+
+ DRM_UNLOCK(dev);
+
+ return 0;
+}
+
+int drm_getmap(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_map *map = data;
+ drm_local_map_t *mapinlist;
+ int idx;
+ int i = 0;
+
+ idx = map->offset;
+
+ DRM_LOCK(dev);
+ if (idx < 0) {
+ DRM_UNLOCK(dev);
+ return EINVAL;
+ }
+
+ TAILQ_FOREACH(mapinlist, &dev->maplist, link) {
+ if (i == idx) {
+ map->offset = mapinlist->offset;
+ map->size = mapinlist->size;
+ map->type = mapinlist->type;
+ map->flags = mapinlist->flags;
+ map->handle = mapinlist->handle;
+ map->mtrr = mapinlist->mtrr;
+ break;
+ }
+ i++;
+ }
+
+ DRM_UNLOCK(dev);
+
+ if (mapinlist == NULL)
+ return EINVAL;
+
+ return 0;
+}
+
+int drm_getclient(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_client *client = data;
+ struct drm_file *pt;
+ int idx;
+ int i = 0;
+
+ idx = client->idx;
+ DRM_LOCK(dev);
+ TAILQ_FOREACH(pt, &dev->files, link) {
+ if (i == idx) {
+ client->auth = pt->authenticated;
+ client->pid = pt->pid;
+ client->uid = pt->uid;
+ client->magic = pt->magic;
+ client->iocs = pt->ioctl_count;
+ DRM_UNLOCK(dev);
+ return 0;
+ }
+ i++;
+ }
+ DRM_UNLOCK(dev);
+
+ return EINVAL;
+}
+
+int drm_getstats(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_stats *stats = data;
+ int i;
+
+ memset(stats, 0, sizeof(struct drm_stats));
+
+ DRM_LOCK(dev);
+
+ for (i = 0; i < dev->counters; i++) {
+ if (dev->types[i] == _DRM_STAT_LOCK)
+ stats->data[i].value =
+ (dev->lock.hw_lock ? dev->lock.hw_lock->lock : 0);
+ else
+ stats->data[i].value = atomic_read(&dev->counts[i]);
+ stats->data[i].type = dev->types[i];
+ }
+
+ stats->count = dev->counters;
+
+ DRM_UNLOCK(dev);
+
+ return 0;
+}
+
+int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_get_cap *req = data;
+
+ req->value = 0;
+ switch (req->capability) {
+ case DRM_CAP_DUMB_BUFFER:
+ if (dev->driver->dumb_create)
+ req->value = 1;
+ break;
+ case DRM_CAP_VBLANK_HIGH_CRTC:
+ req->value = 1;
+ break;
+ case DRM_CAP_DUMB_PREFERRED_DEPTH:
+ req->value = dev->mode_config.preferred_depth;
+ break;
+ case DRM_CAP_DUMB_PREFER_SHADOW:
+ req->value = dev->mode_config.prefer_shadow;
+ break;
+ default:
+ return EINVAL;
+ }
+ return 0;
+}
+
+
+#define DRM_IF_MAJOR 1
+#define DRM_IF_MINOR 2
+
+int drm_setversion(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_set_version *sv = data;
+ struct drm_set_version ver;
+ int if_version;
+
+ /* Save the incoming data, and set the response before continuing
+ * any further.
+ */
+ ver = *sv;
+ sv->drm_di_major = DRM_IF_MAJOR;
+ sv->drm_di_minor = DRM_IF_MINOR;
+ sv->drm_dd_major = dev->driver->major;
+ sv->drm_dd_minor = dev->driver->minor;
+
+ DRM_DEBUG("ver.drm_di_major %d ver.drm_di_minor %d "
+ "ver.drm_dd_major %d ver.drm_dd_minor %d\n",
+ ver.drm_di_major, ver.drm_di_minor, ver.drm_dd_major,
+ ver.drm_dd_minor);
+ DRM_DEBUG("sv->drm_di_major %d sv->drm_di_minor %d "
+ "sv->drm_dd_major %d sv->drm_dd_minor %d\n",
+ sv->drm_di_major, sv->drm_di_minor, sv->drm_dd_major,
+ sv->drm_dd_minor);
+
+ if (ver.drm_di_major != -1) {
+ if (ver.drm_di_major != DRM_IF_MAJOR ||
+ ver.drm_di_minor < 0 || ver.drm_di_minor > DRM_IF_MINOR) {
+ return EINVAL;
+ }
+ if_version = DRM_IF_VERSION(ver.drm_di_major,
+ ver.drm_dd_minor);
+ dev->if_version = DRM_MAX(if_version, dev->if_version);
+ if (ver.drm_di_minor >= 1) {
+ /*
+ * Version 1.1 includes tying of DRM to specific device
+ */
+ drm_set_busid(dev);
+ }
+ }
+
+ if (ver.drm_dd_major != -1) {
+ if (ver.drm_dd_major != dev->driver->major ||
+ ver.drm_dd_minor < 0 ||
+ ver.drm_dd_minor > dev->driver->minor)
+ {
+ return EINVAL;
+ }
+ }
+
+ return 0;
+}
+
+
+int drm_noop(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ DRM_DEBUG("\n");
+ return 0;
+}
diff --git a/sys/dev/drm2/drm_irq.c b/sys/dev/drm2/drm_irq.c
new file mode 100644
index 000000000000..0324e8cff1a0
--- /dev/null
+++ b/sys/dev/drm2/drm_irq.c
@@ -0,0 +1,1253 @@
+/*-
+ * Copyright 2003 Eric Anholt
+ * 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 (including the next
+ * paragraph) 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
+ * ERIC ANHOLT 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.
+ *
+ * Authors:
+ * Eric Anholt <anholt@FreeBSD.org>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_irq.c
+ * Support code for handling setup/teardown of interrupt handlers and
+ * handing interrupt handlers off to the drivers.
+ */
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+
+MALLOC_DEFINE(DRM_MEM_VBLANK, "drm_vblank", "DRM VBLANK Handling Data");
+
+/* Access macro for slots in vblank timestamp ringbuffer. */
+#define vblanktimestamp(dev, crtc, count) ( \
+ (dev)->_vblank_time[(crtc) * DRM_VBLANKTIME_RBSIZE + \
+ ((count) % DRM_VBLANKTIME_RBSIZE)])
+
+/* Retry timestamp calculation up to 3 times to satisfy
+ * drm_timestamp_precision before giving up.
+ */
+#define DRM_TIMESTAMP_MAXRETRIES 3
+
+/* Threshold in nanoseconds for detection of redundant
+ * vblank irq in drm_handle_vblank(). 1 msec should be ok.
+ */
+#define DRM_REDUNDANT_VBLIRQ_THRESH_NS 1000000
+
+int drm_irq_by_busid(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_irq_busid *irq = data;
+
+ if ((irq->busnum >> 8) != dev->pci_domain ||
+ (irq->busnum & 0xff) != dev->pci_bus ||
+ irq->devnum != dev->pci_slot ||
+ irq->funcnum != dev->pci_func)
+ return EINVAL;
+
+ irq->irq = dev->irq;
+
+ DRM_DEBUG("%d:%d:%d => IRQ %d\n",
+ irq->busnum, irq->devnum, irq->funcnum, irq->irq);
+
+ return 0;
+}
+
+static void
+drm_irq_handler_wrap(void *arg)
+{
+ struct drm_device *dev = arg;
+
+ mtx_lock(&dev->irq_lock);
+ dev->driver->irq_handler(arg);
+ mtx_unlock(&dev->irq_lock);
+}
+
+int
+drm_irq_install(struct drm_device *dev)
+{
+ int retcode;
+
+ if (dev->irq == 0 || dev->dev_private == NULL)
+ return (EINVAL);
+
+ DRM_DEBUG("irq=%d\n", dev->irq);
+
+ DRM_LOCK(dev);
+ if (dev->irq_enabled) {
+ DRM_UNLOCK(dev);
+ return EBUSY;
+ }
+ dev->irq_enabled = 1;
+
+ dev->context_flag = 0;
+
+ /* Before installing handler */
+ if (dev->driver->irq_preinstall)
+ dev->driver->irq_preinstall(dev);
+ DRM_UNLOCK(dev);
+
+ /* Install handler */
+ retcode = bus_setup_intr(dev->device, dev->irqr,
+ INTR_TYPE_TTY | INTR_MPSAFE, NULL,
+ (dev->driver->driver_features & DRIVER_LOCKLESS_IRQ) != 0 ?
+ drm_irq_handler_wrap : dev->driver->irq_handler,
+ dev, &dev->irqh);
+ if (retcode != 0)
+ goto err;
+
+ /* After installing handler */
+ DRM_LOCK(dev);
+ if (dev->driver->irq_postinstall)
+ dev->driver->irq_postinstall(dev);
+ DRM_UNLOCK(dev);
+
+ return (0);
+err:
+ device_printf(dev->device, "Error setting interrupt: %d\n", retcode);
+ dev->irq_enabled = 0;
+
+ return (retcode);
+}
+
+int drm_irq_uninstall(struct drm_device *dev)
+{
+ int i;
+
+ if (!dev->irq_enabled)
+ return EINVAL;
+
+ dev->irq_enabled = 0;
+
+ /*
+ * Wake up any waiters so they don't hang.
+ */
+ if (dev->num_crtcs) {
+ mtx_lock(&dev->vbl_lock);
+ for (i = 0; i < dev->num_crtcs; i++) {
+ wakeup(&dev->_vblank_count[i]);
+ dev->vblank_enabled[i] = 0;
+ dev->last_vblank[i] =
+ dev->driver->get_vblank_counter(dev, i);
+ }
+ mtx_unlock(&dev->vbl_lock);
+ }
+
+ DRM_DEBUG("irq=%d\n", dev->irq);
+
+ if (dev->driver->irq_uninstall)
+ dev->driver->irq_uninstall(dev);
+
+ DRM_UNLOCK(dev);
+ bus_teardown_intr(dev->device, dev->irqr, dev->irqh);
+ DRM_LOCK(dev);
+
+ return 0;
+}
+
+int drm_control(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_control *ctl = data;
+ int err;
+
+ switch (ctl->func) {
+ case DRM_INST_HANDLER:
+ /* Handle drivers whose DRM used to require IRQ setup but the
+ * no longer does.
+ */
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
+ return 0;
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ return 0;
+ if (dev->if_version < DRM_IF_VERSION(1, 2) &&
+ ctl->irq != dev->irq)
+ return EINVAL;
+ return drm_irq_install(dev);
+ case DRM_UNINST_HANDLER:
+ if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
+ return 0;
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ return 0;
+ DRM_LOCK(dev);
+ err = drm_irq_uninstall(dev);
+ DRM_UNLOCK(dev);
+ return err;
+ default:
+ return EINVAL;
+ }
+}
+
+#define NSEC_PER_USEC 1000L
+#define NSEC_PER_SEC 1000000000L
+
+int64_t
+timeval_to_ns(const struct timeval *tv)
+{
+ return ((int64_t)tv->tv_sec * NSEC_PER_SEC) +
+ tv->tv_usec * NSEC_PER_USEC;
+}
+
+struct timeval
+ns_to_timeval(const int64_t nsec)
+{
+ struct timeval tv;
+ uint32_t 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);
+}
+
+/*
+ * Clear vblank timestamp buffer for a crtc.
+ */
+static void clear_vblank_timestamps(struct drm_device *dev, int crtc)
+{
+ memset(&dev->_vblank_time[crtc * DRM_VBLANKTIME_RBSIZE], 0,
+ DRM_VBLANKTIME_RBSIZE * sizeof(struct timeval));
+}
+
+static int64_t
+abs64(int64_t x)
+{
+
+ return (x < 0 ? -x : x);
+}
+
+/*
+ * Disable vblank irq's on crtc, make sure that last vblank count
+ * of hardware and corresponding consistent software vblank counter
+ * are preserved, even if there are any spurious vblank irq's after
+ * disable.
+ */
+static void vblank_disable_and_save(struct drm_device *dev, int crtc)
+{
+ u32 vblcount;
+ int64_t diff_ns;
+ int vblrc;
+ struct timeval tvblank;
+
+ /* Prevent vblank irq processing while disabling vblank irqs,
+ * so no updates of timestamps or count can happen after we've
+ * disabled. Needed to prevent races in case of delayed irq's.
+ */
+ mtx_lock(&dev->vblank_time_lock);
+
+ dev->driver->disable_vblank(dev, crtc);
+ dev->vblank_enabled[crtc] = 0;
+
+ /* No further vblank irq's will be processed after
+ * this point. Get current hardware vblank count and
+ * vblank timestamp, repeat until they are consistent.
+ *
+ * FIXME: There is still a race condition here and in
+ * drm_update_vblank_count() which can cause off-by-one
+ * reinitialization of software vblank counter. If gpu
+ * vblank counter doesn't increment exactly at the leading
+ * edge of a vblank interval, then we can lose 1 count if
+ * we happen to execute between start of vblank and the
+ * delayed gpu counter increment.
+ */
+ do {
+ dev->last_vblank[crtc] = dev->driver->get_vblank_counter(dev, crtc);
+ vblrc = drm_get_last_vbltimestamp(dev, crtc, &tvblank, 0);
+ } while (dev->last_vblank[crtc] != dev->driver->get_vblank_counter(dev, crtc));
+
+ /* Compute time difference to stored timestamp of last vblank
+ * as updated by last invocation of drm_handle_vblank() in vblank irq.
+ */
+ vblcount = atomic_read(&dev->_vblank_count[crtc]);
+ diff_ns = timeval_to_ns(&tvblank) -
+ timeval_to_ns(&vblanktimestamp(dev, crtc, vblcount));
+
+ /* If there is at least 1 msec difference between the last stored
+ * timestamp and tvblank, then we are currently executing our
+ * disable inside a new vblank interval, the tvblank timestamp
+ * corresponds to this new vblank interval and the irq handler
+ * for this vblank didn't run yet and won't run due to our disable.
+ * Therefore we need to do the job of drm_handle_vblank() and
+ * increment the vblank counter by one to account for this vblank.
+ *
+ * Skip this step if there isn't any high precision timestamp
+ * available. In that case we can't account for this and just
+ * hope for the best.
+ */
+ if ((vblrc > 0) && (abs64(diff_ns) > 1000000)) {
+ atomic_inc(&dev->_vblank_count[crtc]);
+ }
+
+ /* Invalidate all timestamps while vblank irq's are off. */
+ clear_vblank_timestamps(dev, crtc);
+
+ mtx_unlock(&dev->vblank_time_lock);
+}
+
+static void vblank_disable_fn(void * arg)
+{
+ struct drm_device *dev = (struct drm_device *)arg;
+ int i;
+
+ if (!dev->vblank_disable_allowed)
+ return;
+
+ for (i = 0; i < dev->num_crtcs; i++) {
+ mtx_lock(&dev->vbl_lock);
+ if (atomic_read(&dev->vblank_refcount[i]) == 0 &&
+ dev->vblank_enabled[i]) {
+ DRM_DEBUG("disabling vblank on crtc %d\n", i);
+ vblank_disable_and_save(dev, i);
+ }
+ mtx_unlock(&dev->vbl_lock);
+ }
+}
+
+void drm_vblank_cleanup(struct drm_device *dev)
+{
+ /* Bail if the driver didn't call drm_vblank_init() */
+ if (dev->num_crtcs == 0)
+ return;
+
+ callout_stop(&dev->vblank_disable_callout);
+
+ vblank_disable_fn(dev);
+
+ free(dev->_vblank_count, DRM_MEM_VBLANK);
+ free(dev->vblank_refcount, DRM_MEM_VBLANK);
+ free(dev->vblank_enabled, DRM_MEM_VBLANK);
+ free(dev->last_vblank, DRM_MEM_VBLANK);
+ free(dev->last_vblank_wait, DRM_MEM_VBLANK);
+ free(dev->vblank_inmodeset, DRM_MEM_VBLANK);
+ free(dev->_vblank_time, DRM_MEM_VBLANK);
+
+ dev->num_crtcs = 0;
+}
+
+int drm_vblank_init(struct drm_device *dev, int num_crtcs)
+{
+ int i;
+
+ callout_init(&dev->vblank_disable_callout, CALLOUT_MPSAFE);
+#if 0
+ mtx_init(&dev->vbl_lock, "drmvbl", NULL, MTX_DEF);
+#endif
+ mtx_init(&dev->vblank_time_lock, "drmvtl", NULL, MTX_DEF);
+
+ dev->num_crtcs = num_crtcs;
+
+ dev->_vblank_count = malloc(sizeof(atomic_t) * num_crtcs,
+ DRM_MEM_VBLANK, M_WAITOK);
+ dev->vblank_refcount = malloc(sizeof(atomic_t) * num_crtcs,
+ DRM_MEM_VBLANK, M_WAITOK);
+ dev->vblank_enabled = malloc(num_crtcs * sizeof(int),
+ DRM_MEM_VBLANK, M_WAITOK | M_ZERO);
+ dev->last_vblank = malloc(num_crtcs * sizeof(u32),
+ DRM_MEM_VBLANK, M_WAITOK | M_ZERO);
+ dev->last_vblank_wait = malloc(num_crtcs * sizeof(u32),
+ DRM_MEM_VBLANK, M_WAITOK | M_ZERO);
+ dev->vblank_inmodeset = malloc(num_crtcs * sizeof(int),
+ DRM_MEM_VBLANK, M_WAITOK | M_ZERO);
+ dev->_vblank_time = malloc(num_crtcs * DRM_VBLANKTIME_RBSIZE *
+ sizeof(struct timeval), DRM_MEM_VBLANK, M_WAITOK | M_ZERO);
+ DRM_INFO("Supports vblank timestamp caching Rev 1 (10.10.2010).\n");
+
+ /* Driver specific high-precision vblank timestamping supported? */
+ if (dev->driver->get_vblank_timestamp)
+ DRM_INFO("Driver supports precise vblank timestamp query.\n");
+ else
+ DRM_INFO("No driver support for vblank timestamp query.\n");
+
+ /* Zero per-crtc vblank stuff */
+ for (i = 0; i < num_crtcs; i++) {
+ atomic_set(&dev->_vblank_count[i], 0);
+ atomic_set(&dev->vblank_refcount[i], 0);
+ }
+
+ dev->vblank_disable_allowed = 0;
+ return 0;
+}
+
+void
+drm_calc_timestamping_constants(struct drm_crtc *crtc)
+{
+ int64_t linedur_ns = 0, pixeldur_ns = 0, framedur_ns = 0;
+ uint64_t dotclock;
+
+ /* Dot clock in Hz: */
+ dotclock = (uint64_t) crtc->hwmode.clock * 1000;
+
+ /* Fields of interlaced scanout modes are only halve a frame duration.
+ * Double the dotclock to get halve the frame-/line-/pixelduration.
+ */
+ if (crtc->hwmode.flags & DRM_MODE_FLAG_INTERLACE)
+ dotclock *= 2;
+
+ /* Valid dotclock? */
+ if (dotclock > 0) {
+ /* Convert scanline length in pixels and video dot clock to
+ * line duration, frame duration and pixel duration in
+ * nanoseconds:
+ */
+ pixeldur_ns = (int64_t)1000000000 / dotclock;
+ linedur_ns = ((uint64_t)crtc->hwmode.crtc_htotal *
+ 1000000000) / dotclock;
+ framedur_ns = (int64_t)crtc->hwmode.crtc_vtotal * linedur_ns;
+ } else
+ DRM_ERROR("crtc %d: Can't calculate constants, dotclock = 0!\n",
+ crtc->base.id);
+
+ crtc->pixeldur_ns = pixeldur_ns;
+ crtc->linedur_ns = linedur_ns;
+ crtc->framedur_ns = framedur_ns;
+
+ DRM_DEBUG("crtc %d: hwmode: htotal %d, vtotal %d, vdisplay %d\n",
+ crtc->base.id, crtc->hwmode.crtc_htotal,
+ crtc->hwmode.crtc_vtotal, crtc->hwmode.crtc_vdisplay);
+ DRM_DEBUG("crtc %d: clock %d kHz framedur %d linedur %d, pixeldur %d\n",
+ crtc->base.id, (int) dotclock/1000, (int) framedur_ns,
+ (int) linedur_ns, (int) pixeldur_ns);
+}
+
+/**
+ * drm_calc_vbltimestamp_from_scanoutpos - helper routine for kms
+ * drivers. Implements calculation of exact vblank timestamps from
+ * given drm_display_mode timings and current video scanout position
+ * of a crtc. This can be called from within get_vblank_timestamp()
+ * implementation of a kms driver to implement the actual timestamping.
+ *
+ * Should return timestamps conforming to the OML_sync_control OpenML
+ * extension specification. The timestamp corresponds to the end of
+ * the vblank interval, aka start of scanout of topmost-leftmost display
+ * pixel in the following video frame.
+ *
+ * Requires support for optional dev->driver->get_scanout_position()
+ * in kms driver, plus a bit of setup code to provide a drm_display_mode
+ * that corresponds to the true scanout timing.
+ *
+ * The current implementation only handles standard video modes. It
+ * returns as no operation if a doublescan or interlaced video mode is
+ * active. Higher level code is expected to handle this.
+ *
+ * @dev: DRM device.
+ * @crtc: Which crtc's vblank timestamp to retrieve.
+ * @max_error: Desired maximum allowable error in timestamps (nanosecs).
+ * On return contains true maximum error of timestamp.
+ * @vblank_time: Pointer to struct timeval which should receive the timestamp.
+ * @flags: Flags to pass to driver:
+ * 0 = Default.
+ * DRM_CALLED_FROM_VBLIRQ = If function is called from vbl irq handler.
+ * @refcrtc: drm_crtc* of crtc which defines scanout timing.
+ *
+ * Returns negative value on error, failure or if not supported in current
+ * video mode:
+ *
+ * -EINVAL - Invalid crtc.
+ * -EAGAIN - Temporary unavailable, e.g., called before initial modeset.
+ * -ENOTSUPP - Function not supported in current display mode.
+ * -EIO - Failed, e.g., due to failed scanout position query.
+ *
+ * Returns or'ed positive status flags on success:
+ *
+ * DRM_VBLANKTIME_SCANOUTPOS_METHOD - Signal this method used for timestamping.
+ * DRM_VBLANKTIME_INVBL - Timestamp taken while scanout was in vblank interval.
+ *
+ */
+int
+drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, int crtc,
+ int *max_error, struct timeval *vblank_time, unsigned flags,
+ struct drm_crtc *refcrtc)
+{
+ struct timeval stime, raw_time;
+ struct drm_display_mode *mode;
+ int vbl_status, vtotal, vdisplay;
+ int vpos, hpos, i;
+ int64_t framedur_ns, linedur_ns, pixeldur_ns, delta_ns, duration_ns;
+ bool invbl;
+
+ if (crtc < 0 || crtc >= dev->num_crtcs) {
+ DRM_ERROR("Invalid crtc %d\n", crtc);
+ return -EINVAL;
+ }
+
+ /* Scanout position query not supported? Should not happen. */
+ if (!dev->driver->get_scanout_position) {
+ DRM_ERROR("Called from driver w/o get_scanout_position()!?\n");
+ return -EIO;
+ }
+
+ mode = &refcrtc->hwmode;
+ vtotal = mode->crtc_vtotal;
+ vdisplay = mode->crtc_vdisplay;
+
+ /* Durations of frames, lines, pixels in nanoseconds. */
+ framedur_ns = refcrtc->framedur_ns;
+ linedur_ns = refcrtc->linedur_ns;
+ pixeldur_ns = refcrtc->pixeldur_ns;
+
+ /* If mode timing undefined, just return as no-op:
+ * Happens during initial modesetting of a crtc.
+ */
+ if (vtotal <= 0 || vdisplay <= 0 || framedur_ns == 0) {
+ DRM_DEBUG("crtc %d: Noop due to uninitialized mode.\n", crtc);
+ return -EAGAIN;
+ }
+
+ /* Get current scanout position with system timestamp.
+ * Repeat query up to DRM_TIMESTAMP_MAXRETRIES times
+ * if single query takes longer than max_error nanoseconds.
+ *
+ * This guarantees a tight bound on maximum error if
+ * code gets preempted or delayed for some reason.
+ */
+ for (i = 0; i < DRM_TIMESTAMP_MAXRETRIES; i++) {
+ /* Disable preemption to make it very likely to
+ * succeed in the first iteration.
+ */
+ critical_enter();
+
+ /* Get system timestamp before query. */
+ getmicrouptime(&stime);
+
+ /* Get vertical and horizontal scanout pos. vpos, hpos. */
+ vbl_status = dev->driver->get_scanout_position(dev, crtc, &vpos, &hpos);
+
+ /* Get system timestamp after query. */
+ getmicrouptime(&raw_time);
+
+ critical_exit();
+
+ /* Return as no-op if scanout query unsupported or failed. */
+ if (!(vbl_status & DRM_SCANOUTPOS_VALID)) {
+ DRM_DEBUG("crtc %d : scanoutpos query failed [%d].\n",
+ crtc, vbl_status);
+ return -EIO;
+ }
+
+ duration_ns = timeval_to_ns(&raw_time) - timeval_to_ns(&stime);
+
+ /* Accept result with < max_error nsecs timing uncertainty. */
+ if (duration_ns <= (int64_t) *max_error)
+ break;
+ }
+
+ /* Noisy system timing? */
+ if (i == DRM_TIMESTAMP_MAXRETRIES) {
+ DRM_DEBUG("crtc %d: Noisy timestamp %d us > %d us [%d reps].\n",
+ crtc, (int) duration_ns/1000, *max_error/1000, i);
+ }
+
+ /* Return upper bound of timestamp precision error. */
+ *max_error = (int) duration_ns;
+
+ /* Check if in vblank area:
+ * vpos is >=0 in video scanout area, but negative
+ * within vblank area, counting down the number of lines until
+ * start of scanout.
+ */
+ invbl = vbl_status & DRM_SCANOUTPOS_INVBL;
+
+ /* Convert scanout position into elapsed time at raw_time query
+ * since start of scanout at first display scanline. delta_ns
+ * can be negative if start of scanout hasn't happened yet.
+ */
+ delta_ns = (int64_t)vpos * linedur_ns + (int64_t)hpos * pixeldur_ns;
+
+ /* Is vpos outside nominal vblank area, but less than
+ * 1/100 of a frame height away from start of vblank?
+ * If so, assume this isn't a massively delayed vblank
+ * interrupt, but a vblank interrupt that fired a few
+ * microseconds before true start of vblank. Compensate
+ * by adding a full frame duration to the final timestamp.
+ * Happens, e.g., on ATI R500, R600.
+ *
+ * We only do this if DRM_CALLED_FROM_VBLIRQ.
+ */
+ if ((flags & DRM_CALLED_FROM_VBLIRQ) && !invbl &&
+ ((vdisplay - vpos) < vtotal / 100)) {
+ delta_ns = delta_ns - framedur_ns;
+
+ /* Signal this correction as "applied". */
+ vbl_status |= 0x8;
+ }
+
+ /* Subtract time delta from raw timestamp to get final
+ * vblank_time timestamp for end of vblank.
+ */
+ *vblank_time = ns_to_timeval(timeval_to_ns(&raw_time) - delta_ns);
+
+ DRM_DEBUG("crtc %d : v %d p(%d,%d)@ %jd.%jd -> %jd.%jd [e %d us, %d rep]\n",
+ crtc, (int)vbl_status, hpos, vpos, (uintmax_t)raw_time.tv_sec,
+ (uintmax_t)raw_time.tv_usec, (uintmax_t)vblank_time->tv_sec,
+ (uintmax_t)vblank_time->tv_usec, (int)duration_ns/1000, i);
+
+ vbl_status = DRM_VBLANKTIME_SCANOUTPOS_METHOD;
+ if (invbl)
+ vbl_status |= DRM_VBLANKTIME_INVBL;
+
+ return vbl_status;
+}
+
+/**
+ * drm_get_last_vbltimestamp - retrieve raw timestamp for the most recent
+ * vblank interval.
+ *
+ * @dev: DRM device
+ * @crtc: which crtc's vblank timestamp to retrieve
+ * @tvblank: Pointer to target struct timeval which should receive the timestamp
+ * @flags: Flags to pass to driver:
+ * 0 = Default.
+ * DRM_CALLED_FROM_VBLIRQ = If function is called from vbl irq handler.
+ *
+ * Fetches the system timestamp corresponding to the time of the most recent
+ * vblank interval on specified crtc. May call into kms-driver to
+ * compute the timestamp with a high-precision GPU specific method.
+ *
+ * Returns zero if timestamp originates from uncorrected do_gettimeofday()
+ * call, i.e., it isn't very precisely locked to the true vblank.
+ *
+ * Returns non-zero if timestamp is considered to be very precise.
+ */
+u32 drm_get_last_vbltimestamp(struct drm_device *dev, int crtc,
+ struct timeval *tvblank, unsigned flags)
+{
+ int ret = 0;
+
+ /* Define requested maximum error on timestamps (nanoseconds). */
+ int max_error = (int) drm_timestamp_precision * 1000;
+
+ /* Query driver if possible and precision timestamping enabled. */
+ if (dev->driver->get_vblank_timestamp && (max_error > 0)) {
+ ret = dev->driver->get_vblank_timestamp(dev, crtc, &max_error,
+ tvblank, flags);
+ if (ret > 0)
+ return (u32) ret;
+ }
+
+ /* GPU high precision timestamp query unsupported or failed.
+ * Return gettimeofday timestamp as best estimate.
+ */
+ microtime(tvblank);
+
+ return 0;
+}
+
+/**
+ * drm_vblank_count - retrieve "cooked" vblank counter value
+ * @dev: DRM device
+ * @crtc: which counter to retrieve
+ *
+ * Fetches the "cooked" vblank count value that represents the number of
+ * vblank events since the system was booted, including lost events due to
+ * modesetting activity.
+ */
+u32 drm_vblank_count(struct drm_device *dev, int crtc)
+{
+ return atomic_read(&dev->_vblank_count[crtc]);
+}
+
+/**
+ * drm_vblank_count_and_time - retrieve "cooked" vblank counter value
+ * and the system timestamp corresponding to that vblank counter value.
+ *
+ * @dev: DRM device
+ * @crtc: which counter to retrieve
+ * @vblanktime: Pointer to struct timeval to receive the vblank timestamp.
+ *
+ * Fetches the "cooked" vblank count value that represents the number of
+ * vblank events since the system was booted, including lost events due to
+ * modesetting activity. Returns corresponding system timestamp of the time
+ * of the vblank interval that corresponds to the current value vblank counter
+ * value.
+ */
+u32 drm_vblank_count_and_time(struct drm_device *dev, int crtc,
+ struct timeval *vblanktime)
+{
+ u32 cur_vblank;
+
+ /* Read timestamp from slot of _vblank_time ringbuffer
+ * that corresponds to current vblank count. Retry if
+ * count has incremented during readout. This works like
+ * a seqlock.
+ */
+ do {
+ cur_vblank = atomic_read(&dev->_vblank_count[crtc]);
+ *vblanktime = vblanktimestamp(dev, crtc, cur_vblank);
+ rmb();
+ } while (cur_vblank != atomic_read(&dev->_vblank_count[crtc]));
+
+ return cur_vblank;
+}
+
+/**
+ * drm_update_vblank_count - update the master vblank counter
+ * @dev: DRM device
+ * @crtc: counter to update
+ *
+ * Call back into the driver to update the appropriate vblank counter
+ * (specified by @crtc). Deal with wraparound, if it occurred, and
+ * update the last read value so we can deal with wraparound on the next
+ * call if necessary.
+ *
+ * Only necessary when going from off->on, to account for frames we
+ * didn't get an interrupt for.
+ *
+ * Note: caller must hold dev->vbl_lock since this reads & writes
+ * device vblank fields.
+ */
+static void drm_update_vblank_count(struct drm_device *dev, int crtc)
+{
+ u32 cur_vblank, diff, tslot, rc;
+ struct timeval t_vblank;
+
+ /*
+ * Interrupts were disabled prior to this call, so deal with counter
+ * wrap if needed.
+ * NOTE! It's possible we lost a full dev->max_vblank_count events
+ * here if the register is small or we had vblank interrupts off for
+ * a long time.
+ *
+ * We repeat the hardware vblank counter & timestamp query until
+ * we get consistent results. This to prevent races between gpu
+ * updating its hardware counter while we are retrieving the
+ * corresponding vblank timestamp.
+ */
+ do {
+ cur_vblank = dev->driver->get_vblank_counter(dev, crtc);
+ rc = drm_get_last_vbltimestamp(dev, crtc, &t_vblank, 0);
+ } while (cur_vblank != dev->driver->get_vblank_counter(dev, crtc));
+
+ /* Deal with counter wrap */
+ diff = cur_vblank - dev->last_vblank[crtc];
+ if (cur_vblank < dev->last_vblank[crtc]) {
+ diff += dev->max_vblank_count;
+
+ DRM_DEBUG("last_vblank[%d]=0x%x, cur_vblank=0x%x => diff=0x%x\n",
+ crtc, dev->last_vblank[crtc], cur_vblank, diff);
+ }
+
+ DRM_DEBUG("enabling vblank interrupts on crtc %d, missed %d\n",
+ crtc, diff);
+
+ /* Reinitialize corresponding vblank timestamp if high-precision query
+ * available. Skip this step if query unsupported or failed. Will
+ * reinitialize delayed at next vblank interrupt in that case.
+ */
+ if (rc) {
+ tslot = atomic_read(&dev->_vblank_count[crtc]) + diff;
+ vblanktimestamp(dev, crtc, tslot) = t_vblank;
+ }
+
+ atomic_add(diff, &dev->_vblank_count[crtc]);
+}
+
+/**
+ * drm_vblank_get - get a reference count on vblank events
+ * @dev: DRM device
+ * @crtc: which CRTC to own
+ *
+ * Acquire a reference count on vblank events to avoid having them disabled
+ * while in use.
+ *
+ * RETURNS
+ * Zero on success, nonzero on failure.
+ */
+int drm_vblank_get(struct drm_device *dev, int crtc)
+{
+ int ret = 0;
+
+ mtx_lock(&dev->vbl_lock);
+ /* Going from 0->1 means we have to enable interrupts again */
+ if (atomic_fetchadd_int(&dev->vblank_refcount[crtc], 1) == 0) {
+ mtx_lock(&dev->vblank_time_lock);
+ if (!dev->vblank_enabled[crtc]) {
+ /* Enable vblank irqs under vblank_time_lock protection.
+ * All vblank count & timestamp updates are held off
+ * until we are done reinitializing master counter and
+ * timestamps. Filtercode in drm_handle_vblank() will
+ * prevent double-accounting of same vblank interval.
+ */
+ ret = -dev->driver->enable_vblank(dev, crtc);
+ DRM_DEBUG("enabling vblank on crtc %d, ret: %d\n",
+ crtc, ret);
+ if (ret)
+ atomic_dec(&dev->vblank_refcount[crtc]);
+ else {
+ dev->vblank_enabled[crtc] = 1;
+ drm_update_vblank_count(dev, crtc);
+ }
+ }
+ mtx_unlock(&dev->vblank_time_lock);
+ } else {
+ if (!dev->vblank_enabled[crtc]) {
+ atomic_dec(&dev->vblank_refcount[crtc]);
+ ret = EINVAL;
+ }
+ }
+ mtx_unlock(&dev->vbl_lock);
+
+ return ret;
+}
+
+/**
+ * drm_vblank_put - give up ownership of vblank events
+ * @dev: DRM device
+ * @crtc: which counter to give up
+ *
+ * Release ownership of a given vblank counter, turning off interrupts
+ * if possible. Disable interrupts after drm_vblank_offdelay milliseconds.
+ */
+void drm_vblank_put(struct drm_device *dev, int crtc)
+{
+ KASSERT(atomic_read(&dev->vblank_refcount[crtc]) != 0,
+ ("Too many drm_vblank_put for crtc %d", crtc));
+
+ /* Last user schedules interrupt disable */
+ if (atomic_fetchadd_int(&dev->vblank_refcount[crtc], -1) == 1 &&
+ (drm_vblank_offdelay > 0))
+ callout_reset(&dev->vblank_disable_callout,
+ (drm_vblank_offdelay * DRM_HZ) / 1000,
+ vblank_disable_fn, dev);
+}
+
+void drm_vblank_off(struct drm_device *dev, int crtc)
+{
+ struct drm_pending_vblank_event *e, *t;
+ struct timeval now;
+ unsigned int seq;
+
+ mtx_lock(&dev->vbl_lock);
+ vblank_disable_and_save(dev, crtc);
+ mtx_lock(&dev->event_lock);
+ wakeup(&dev->_vblank_count[crtc]);
+
+ /* Send any queued vblank events, lest the natives grow disquiet */
+ seq = drm_vblank_count_and_time(dev, crtc, &now);
+ list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
+ if (e->pipe != crtc)
+ continue;
+ DRM_DEBUG("Sending premature vblank event on disable: \
+ wanted %d, current %d\n",
+ e->event.sequence, seq);
+
+ e->event.sequence = seq;
+ e->event.tv_sec = now.tv_sec;
+ e->event.tv_usec = now.tv_usec;
+ drm_vblank_put(dev, e->pipe);
+ list_move_tail(&e->base.link, &e->base.file_priv->event_list);
+ drm_event_wakeup(&e->base);
+ CTR3(KTR_DRM, "vblank_event_delivered %d %d %d",
+ e->base.pid, e->pipe, e->event.sequence);
+ }
+
+ mtx_unlock(&dev->event_lock);
+ mtx_unlock(&dev->vbl_lock);
+}
+
+/**
+ * drm_vblank_pre_modeset - account for vblanks across mode sets
+ * @dev: DRM device
+ * @crtc: CRTC in question
+ * @post: post or pre mode set?
+ *
+ * Account for vblank events across mode setting events, which will likely
+ * reset the hardware frame counter.
+ */
+void drm_vblank_pre_modeset(struct drm_device *dev, int crtc)
+{
+ /* vblank is not initialized (IRQ not installed ?) */
+ if (!dev->num_crtcs)
+ return;
+ /*
+ * To avoid all the problems that might happen if interrupts
+ * were enabled/disabled around or between these calls, we just
+ * have the kernel take a reference on the CRTC (just once though
+ * to avoid corrupting the count if multiple, mismatch calls occur),
+ * so that interrupts remain enabled in the interim.
+ */
+ if (!dev->vblank_inmodeset[crtc]) {
+ dev->vblank_inmodeset[crtc] = 0x1;
+ if (drm_vblank_get(dev, crtc) == 0)
+ dev->vblank_inmodeset[crtc] |= 0x2;
+ }
+}
+
+void drm_vblank_post_modeset(struct drm_device *dev, int crtc)
+{
+
+ if (dev->vblank_inmodeset[crtc]) {
+ mtx_lock(&dev->vbl_lock);
+ dev->vblank_disable_allowed = 1;
+ mtx_unlock(&dev->vbl_lock);
+
+ if (dev->vblank_inmodeset[crtc] & 0x2)
+ drm_vblank_put(dev, crtc);
+
+ dev->vblank_inmodeset[crtc] = 0;
+ }
+}
+
+/**
+ * drm_modeset_ctl - handle vblank event counter changes across mode switch
+ * @DRM_IOCTL_ARGS: standard ioctl arguments
+ *
+ * Applications should call the %_DRM_PRE_MODESET and %_DRM_POST_MODESET
+ * ioctls around modesetting so that any lost vblank events are accounted for.
+ *
+ * Generally the counter will reset across mode sets. If interrupts are
+ * enabled around this call, we don't have to do anything since the counter
+ * will have already been incremented.
+ */
+int drm_modeset_ctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_modeset_ctl *modeset = data;
+ int ret = 0;
+ unsigned int crtc;
+
+ /* If drm_vblank_init() hasn't been called yet, just no-op */
+ if (!dev->num_crtcs)
+ goto out;
+
+ crtc = modeset->crtc;
+ if (crtc >= dev->num_crtcs) {
+ ret = -EINVAL;
+ goto out;
+ }
+
+ switch (modeset->cmd) {
+ case _DRM_PRE_MODESET:
+ drm_vblank_pre_modeset(dev, crtc);
+ break;
+ case _DRM_POST_MODESET:
+ drm_vblank_post_modeset(dev, crtc);
+ break;
+ default:
+ ret = -EINVAL;
+ break;
+ }
+
+out:
+ return ret;
+}
+
+static void
+drm_vblank_event_destroy(struct drm_pending_event *e)
+{
+
+ free(e, DRM_MEM_VBLANK);
+}
+
+static int drm_queue_vblank_event(struct drm_device *dev, int pipe,
+ union drm_wait_vblank *vblwait,
+ struct drm_file *file_priv)
+{
+ struct drm_pending_vblank_event *e;
+ struct timeval now;
+ unsigned int seq;
+ int ret;
+
+ e = malloc(sizeof *e, DRM_MEM_VBLANK, M_WAITOK | M_ZERO);
+
+ e->pipe = pipe;
+ e->base.pid = curproc->p_pid;
+ e->event.base.type = DRM_EVENT_VBLANK;
+ e->event.base.length = sizeof e->event;
+ e->event.user_data = vblwait->request.signal;
+ e->base.event = &e->event.base;
+ e->base.file_priv = file_priv;
+ e->base.destroy = drm_vblank_event_destroy;
+
+ mtx_lock(&dev->event_lock);
+
+ if (file_priv->event_space < sizeof e->event) {
+ ret = EBUSY;
+ goto err_unlock;
+ }
+
+ file_priv->event_space -= sizeof e->event;
+ seq = drm_vblank_count_and_time(dev, pipe, &now);
+
+ if ((vblwait->request.type & _DRM_VBLANK_NEXTONMISS) &&
+ (seq - vblwait->request.sequence) <= (1 << 23)) {
+ vblwait->request.sequence = seq + 1;
+ vblwait->reply.sequence = vblwait->request.sequence;
+ }
+
+ DRM_DEBUG("event on vblank count %d, current %d, crtc %d\n",
+ vblwait->request.sequence, seq, pipe);
+
+ CTR4(KTR_DRM, "vblank_event_queued %d %d rt %x %d", curproc->p_pid, pipe,
+ vblwait->request.type, vblwait->request.sequence);
+
+ e->event.sequence = vblwait->request.sequence;
+ if ((seq - vblwait->request.sequence) <= (1 << 23)) {
+ e->event.sequence = seq;
+ e->event.tv_sec = now.tv_sec;
+ e->event.tv_usec = now.tv_usec;
+ drm_vblank_put(dev, pipe);
+ list_add_tail(&e->base.link, &e->base.file_priv->event_list);
+ drm_event_wakeup(&e->base);
+ vblwait->reply.sequence = seq;
+ CTR3(KTR_DRM, "vblank_event_wakeup p1 %d %d %d", curproc->p_pid,
+ pipe, vblwait->request.sequence);
+ } else {
+ /* drm_handle_vblank_events will call drm_vblank_put */
+ list_add_tail(&e->base.link, &dev->vblank_event_list);
+ vblwait->reply.sequence = vblwait->request.sequence;
+ }
+
+ mtx_unlock(&dev->event_lock);
+
+ return 0;
+
+err_unlock:
+ mtx_unlock(&dev->event_lock);
+ free(e, DRM_MEM_VBLANK);
+ drm_vblank_put(dev, pipe);
+ return ret;
+}
+
+/**
+ * Wait for VBLANK.
+ *
+ * \param inode device inode.
+ * \param file_priv DRM file private.
+ * \param cmd command.
+ * \param data user argument, pointing to a drm_wait_vblank structure.
+ * \return zero on success or a negative number on failure.
+ *
+ * This function enables the vblank interrupt on the pipe requested, then
+ * sleeps waiting for the requested sequence number to occur, and drops
+ * the vblank interrupt refcount afterwards. (vblank irq disable follows that
+ * after a timeout with no further vblank waits scheduled).
+ */
+int drm_wait_vblank(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ union drm_wait_vblank *vblwait = data;
+ int ret = 0;
+ unsigned int flags, seq, crtc, high_crtc;
+
+ if (/*(!drm_dev_to_irq(dev)) || */(!dev->irq_enabled))
+ return (EINVAL);
+
+ if (vblwait->request.type & _DRM_VBLANK_SIGNAL)
+ return (EINVAL);
+
+ if (vblwait->request.type &
+ ~(_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK |
+ _DRM_VBLANK_HIGH_CRTC_MASK)) {
+ DRM_ERROR("Unsupported type value 0x%x, supported mask 0x%x\n",
+ vblwait->request.type,
+ (_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK |
+ _DRM_VBLANK_HIGH_CRTC_MASK));
+ return (EINVAL);
+ }
+
+ flags = vblwait->request.type & _DRM_VBLANK_FLAGS_MASK;
+ high_crtc = (vblwait->request.type & _DRM_VBLANK_HIGH_CRTC_MASK);
+ if (high_crtc)
+ crtc = high_crtc >> _DRM_VBLANK_HIGH_CRTC_SHIFT;
+ else
+ crtc = flags & _DRM_VBLANK_SECONDARY ? 1 : 0;
+ if (crtc >= dev->num_crtcs)
+ return (EINVAL);
+
+ ret = drm_vblank_get(dev, crtc);
+ if (ret) {
+ DRM_DEBUG("failed to acquire vblank counter, %d\n", ret);
+ return (ret);
+ }
+ seq = drm_vblank_count(dev, crtc);
+
+ switch (vblwait->request.type & _DRM_VBLANK_TYPES_MASK) {
+ case _DRM_VBLANK_RELATIVE:
+ vblwait->request.sequence += seq;
+ vblwait->request.type &= ~_DRM_VBLANK_RELATIVE;
+ case _DRM_VBLANK_ABSOLUTE:
+ break;
+ default:
+ ret = (EINVAL);
+ goto done;
+ }
+
+ if (flags & _DRM_VBLANK_EVENT) {
+ /* must hold on to the vblank ref until the event fires
+ * drm_vblank_put will be called asynchronously
+ */
+ return drm_queue_vblank_event(dev, crtc, vblwait, file_priv);
+ }
+
+ if ((flags & _DRM_VBLANK_NEXTONMISS) &&
+ (seq - vblwait->request.sequence) <= (1<<23)) {
+ vblwait->request.sequence = seq + 1;
+ }
+
+ dev->last_vblank_wait[crtc] = vblwait->request.sequence;
+ mtx_lock(&dev->vblank_time_lock);
+ while (((drm_vblank_count(dev, crtc) - vblwait->request.sequence) >
+ (1 << 23)) && dev->irq_enabled) {
+ /*
+ * The wakeups from the drm_irq_uninstall() and
+ * drm_vblank_off() may be lost there since vbl_lock
+ * is not held. Then, the timeout will wake us; the 3
+ * seconds delay should not be a problem for
+ * application when crtc is disabled or irq
+ * uninstalled anyway.
+ */
+ ret = msleep(&dev->_vblank_count[crtc], &dev->vblank_time_lock,
+ PCATCH, "drmvbl", 3 * hz);
+ if (ret != 0)
+ break;
+ }
+ mtx_unlock(&dev->vblank_time_lock);
+ if (ret != EINTR) {
+ struct timeval now;
+ long reply_seq;
+
+ reply_seq = drm_vblank_count_and_time(dev, crtc, &now);
+ CTR5(KTR_DRM, "wait_vblank %d %d rt %x success %d %d",
+ curproc->p_pid, crtc, vblwait->request.type,
+ vblwait->request.sequence, reply_seq);
+ vblwait->reply.sequence = reply_seq;
+ vblwait->reply.tval_sec = now.tv_sec;
+ vblwait->reply.tval_usec = now.tv_usec;
+ } else {
+ CTR5(KTR_DRM, "wait_vblank %d %d rt %x error %d %d",
+ curproc->p_pid, crtc, vblwait->request.type, ret,
+ vblwait->request.sequence);
+ }
+
+done:
+ drm_vblank_put(dev, crtc);
+ return ret;
+}
+
+void drm_handle_vblank_events(struct drm_device *dev, int crtc)
+{
+ struct drm_pending_vblank_event *e, *t;
+ struct timeval now;
+ unsigned int seq;
+
+ seq = drm_vblank_count_and_time(dev, crtc, &now);
+ CTR2(KTR_DRM, "drm_handle_vblank_events %d %d", seq, crtc);
+
+ mtx_lock(&dev->event_lock);
+
+ list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
+ if (e->pipe != crtc)
+ continue;
+ if ((seq - e->event.sequence) > (1<<23))
+ continue;
+
+ e->event.sequence = seq;
+ e->event.tv_sec = now.tv_sec;
+ e->event.tv_usec = now.tv_usec;
+ drm_vblank_put(dev, e->pipe);
+ list_move_tail(&e->base.link, &e->base.file_priv->event_list);
+ drm_event_wakeup(&e->base);
+ CTR3(KTR_DRM, "vblank_event_wakeup p2 %d %d %d", e->base.pid,
+ e->pipe, e->event.sequence);
+ }
+
+ mtx_unlock(&dev->event_lock);
+}
+
+/**
+ * drm_handle_vblank - handle a vblank event
+ * @dev: DRM device
+ * @crtc: where this event occurred
+ *
+ * Drivers should call this routine in their vblank interrupt handlers to
+ * update the vblank counter and send any signals that may be pending.
+ */
+bool drm_handle_vblank(struct drm_device *dev, int crtc)
+{
+ u32 vblcount;
+ int64_t diff_ns;
+ struct timeval tvblank;
+
+ if (!dev->num_crtcs)
+ return false;
+
+ /* Need timestamp lock to prevent concurrent execution with
+ * vblank enable/disable, as this would cause inconsistent
+ * or corrupted timestamps and vblank counts.
+ */
+ mtx_lock(&dev->vblank_time_lock);
+
+ /* Vblank irq handling disabled. Nothing to do. */
+ if (!dev->vblank_enabled[crtc]) {
+ mtx_unlock(&dev->vblank_time_lock);
+ return false;
+ }
+
+ /* Fetch corresponding timestamp for this vblank interval from
+ * driver and store it in proper slot of timestamp ringbuffer.
+ */
+
+ /* Get current timestamp and count. */
+ vblcount = atomic_read(&dev->_vblank_count[crtc]);
+ drm_get_last_vbltimestamp(dev, crtc, &tvblank, DRM_CALLED_FROM_VBLIRQ);
+
+ /* Compute time difference to timestamp of last vblank */
+ diff_ns = timeval_to_ns(&tvblank) -
+ timeval_to_ns(&vblanktimestamp(dev, crtc, vblcount));
+
+ /* Update vblank timestamp and count if at least
+ * DRM_REDUNDANT_VBLIRQ_THRESH_NS nanoseconds
+ * difference between last stored timestamp and current
+ * timestamp. A smaller difference means basically
+ * identical timestamps. Happens if this vblank has
+ * been already processed and this is a redundant call,
+ * e.g., due to spurious vblank interrupts. We need to
+ * ignore those for accounting.
+ */
+ if (abs64(diff_ns) > DRM_REDUNDANT_VBLIRQ_THRESH_NS) {
+ /* Store new timestamp in ringbuffer. */
+ vblanktimestamp(dev, crtc, vblcount + 1) = tvblank;
+
+ /* Increment cooked vblank count. This also atomically commits
+ * the timestamp computed above.
+ */
+ atomic_inc(&dev->_vblank_count[crtc]);
+ } else {
+ DRM_DEBUG("crtc %d: Redundant vblirq ignored. diff_ns = %d\n",
+ crtc, (int) diff_ns);
+ }
+
+ wakeup(&dev->_vblank_count[crtc]);
+ drm_handle_vblank_events(dev, crtc);
+
+ mtx_unlock(&dev->vblank_time_lock);
+ return true;
+}
diff --git a/sys/dev/drm2/drm_linux_list.h b/sys/dev/drm2/drm_linux_list.h
new file mode 100644
index 000000000000..3b23a30de64d
--- /dev/null
+++ b/sys/dev/drm2/drm_linux_list.h
@@ -0,0 +1,177 @@
+/* drm_linux_list.h -- linux list functions for the BSDs.
+ * Created: Mon Apr 7 14:30:16 1999 by anholt@FreeBSD.org
+ */
+/*-
+ * Copyright 2003 Eric Anholt
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Eric Anholt <anholt@FreeBSD.org>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#ifndef _DRM_LINUX_LIST_H_
+#define _DRM_LINUX_LIST_H_
+
+struct list_head {
+ struct list_head *next, *prev;
+};
+
+#define list_entry(ptr, type, member) container_of(ptr,type,member)
+#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
+
+static __inline__ void
+INIT_LIST_HEAD(struct list_head *head) {
+ (head)->next = head;
+ (head)->prev = head;
+}
+
+#define LIST_HEAD_INIT(name) { &(name), &(name) }
+
+#define DRM_LIST_HEAD(name) \
+ struct list_head name = LIST_HEAD_INIT(name)
+
+static __inline__ int
+list_empty(const struct list_head *head) {
+ return (head)->next == head;
+}
+
+static __inline__ void
+list_add(struct list_head *new, struct list_head *head) {
+ (head)->next->prev = new;
+ (new)->next = (head)->next;
+ (new)->prev = head;
+ (head)->next = new;
+}
+
+static __inline__ void
+list_add_tail(struct list_head *entry, struct list_head *head) {
+ (entry)->prev = (head)->prev;
+ (entry)->next = head;
+ (head)->prev->next = entry;
+ (head)->prev = entry;
+}
+
+static __inline__ void
+list_del(struct list_head *entry) {
+ (entry)->next->prev = (entry)->prev;
+ (entry)->prev->next = (entry)->next;
+}
+
+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_move(struct list_head *list, struct list_head *head)
+{
+ list_del(list);
+ list_add(list, head);
+}
+
+static inline void list_move_tail(struct list_head *list,
+ struct list_head *head)
+{
+ list_del(list);
+ list_add_tail(list, head);
+}
+
+static __inline__ void
+list_del_init(struct list_head *entry) {
+ (entry)->next->prev = (entry)->prev;
+ (entry)->prev->next = (entry)->next;
+ INIT_LIST_HEAD(entry);
+}
+
+#define list_for_each(entry, head) \
+ for (entry = (head)->next; entry != head; entry = (entry)->next)
+
+#define list_for_each_prev(entry, head) \
+ for (entry = (head)->prev; entry != (head); \
+ entry = entry->prev)
+
+#define list_for_each_safe(entry, temp, head) \
+ for (entry = (head)->next, temp = (entry)->next; \
+ entry != head; \
+ entry = temp, temp = entry->next)
+
+#define list_for_each_entry(pos, head, member) \
+ for (pos = list_entry((head)->next, __typeof(*pos), member); \
+ &pos->member != (head); \
+ pos = list_entry(pos->member.next, __typeof(*pos), member))
+
+#define list_for_each_entry_continue_reverse(pos, head, member) \
+ for (pos = list_entry(pos->member.prev, __typeof(*pos), member); \
+ &pos->member != (head); \
+ pos = list_entry(pos->member.prev, __typeof(*pos), member))
+
+/**
+ * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
+ * @pos: the type * to use as a loop cursor.
+ * @n: another type * to use as temporary storage
+ * @head: the head for your list.
+ * @member: the name of the list_struct within the struct.
+ */
+#define list_for_each_entry_safe(pos, n, head, member) \
+ for (pos = list_entry((head)->next, __typeof(*pos), member), \
+ 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_first_entry(ptr, type, member) \
+ list_entry((ptr)->next, type, member)
+
+
+static inline void
+__list_splice(const struct list_head *list, struct list_head *prev,
+ struct list_head *next)
+{
+ struct list_head *first = list->next;
+ struct list_head *last = list->prev;
+
+ first->prev = prev;
+ prev->next = first;
+
+ last->next = next;
+ next->prev = last;
+}
+
+static inline void
+list_splice(const struct list_head *list, struct list_head *head)
+{
+ if (list_empty(list))
+ return;
+
+ __list_splice(list, head, head->next);
+}
+
+void drm_list_sort(void *priv, struct list_head *head, int (*cmp)(void *priv,
+ struct list_head *a, struct list_head *b));
+
+#endif /* _DRM_LINUX_LIST_H_ */
diff --git a/sys/dev/drm2/drm_linux_list_sort.c b/sys/dev/drm2/drm_linux_list_sort.c
new file mode 100644
index 000000000000..973ce4a4be92
--- /dev/null
+++ b/sys/dev/drm2/drm_linux_list_sort.c
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Konstantin Belousov 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 <dev/drm2/drmP.h>
+__FBSDID("$FreeBSD$");
+
+struct drm_list_sort_thunk {
+ int (*cmp)(void *, struct list_head *, struct list_head *);
+ void *priv;
+};
+
+static int
+drm_le_cmp(void *priv, const void *d1, const void *d2)
+{
+ struct list_head *le1, *le2;
+ struct drm_list_sort_thunk *thunk;
+
+ thunk = priv;
+ le1 = __DECONST(struct list_head *, d1);
+ le2 = __DECONST(struct list_head *, d2);
+ return ((thunk->cmp)(thunk->priv, le1, le2));
+}
+
+/*
+ * Punt and use array sort.
+ */
+void
+drm_list_sort(void *priv, struct list_head *head, int (*cmp)(void *priv,
+ struct list_head *a, struct list_head *b))
+{
+ struct drm_list_sort_thunk thunk;
+ struct list_head **ar, *le;
+ int count, i;
+
+ count = 0;
+ list_for_each(le, head)
+ count++;
+ ar = malloc(sizeof(struct list_head *) * count, M_TEMP, M_WAITOK);
+ i = 0;
+ list_for_each(le, head)
+ ar[i++] = le;
+ thunk.cmp = cmp;
+ thunk.priv = priv;
+ qsort_r(ar, count, sizeof(struct list_head *), &thunk, drm_le_cmp);
+ INIT_LIST_HEAD(head);
+ for (i = 0; i < count; i++)
+ list_add_tail(ar[i], head);
+ free(ar, M_TEMP);
+}
diff --git a/sys/dev/drm2/drm_lock.c b/sys/dev/drm2/drm_lock.c
new file mode 100644
index 000000000000..8ae230510d16
--- /dev/null
+++ b/sys/dev/drm2/drm_lock.c
@@ -0,0 +1,199 @@
+/*-
+ * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_lock.c
+ * Implementation of the ioctls and other support code for dealing with the
+ * hardware lock.
+ *
+ * The DRM hardware lock is a shared structure between the kernel and userland.
+ *
+ * On uncontended access where the new context was the last context, the
+ * client may take the lock without dropping down into the kernel, using atomic
+ * compare-and-set.
+ *
+ * If the client finds during compare-and-set that it was not the last owner
+ * of the lock, it calls the DRM lock ioctl, which may sleep waiting for the
+ * lock, and may have side-effects of kernel-managed context switching.
+ *
+ * When the client releases the lock, if the lock is marked as being contended
+ * by another client, then the DRM unlock ioctl is called so that the
+ * contending client may be woken up.
+ */
+
+#include <dev/drm2/drmP.h>
+
+int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_lock *lock = data;
+ int ret = 0;
+
+ if (lock->context == DRM_KERNEL_CONTEXT) {
+ DRM_ERROR("Process %d using kernel context %d\n",
+ DRM_CURRENTPID, lock->context);
+ return EINVAL;
+ }
+
+ DRM_DEBUG("%d (pid %d) requests lock (0x%08x), flags = 0x%08x\n",
+ lock->context, DRM_CURRENTPID, dev->lock.hw_lock->lock,
+ lock->flags);
+
+ if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE) &&
+ lock->context < 0)
+ return EINVAL;
+
+ DRM_LOCK(dev);
+ for (;;) {
+ if (drm_lock_take(&dev->lock, lock->context)) {
+ dev->lock.file_priv = file_priv;
+ dev->lock.lock_time = jiffies;
+ atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
+ break; /* Got lock */
+ }
+
+ /* Contention */
+ ret = DRM_LOCK_SLEEP(dev, &dev->lock.lock_queue,
+ PCATCH, "drmlk2", 0);
+ if (ret != 0)
+ break;
+ }
+ DRM_UNLOCK(dev);
+
+ if (ret == ERESTART)
+ DRM_DEBUG("restarting syscall\n");
+ else
+ DRM_DEBUG("%d %s\n", lock->context,
+ ret ? "interrupted" : "has lock");
+
+ if (ret != 0)
+ return ret;
+
+ /* XXX: Add signal blocking here */
+
+ if (dev->driver->dma_quiescent != NULL &&
+ (lock->flags & _DRM_LOCK_QUIESCENT))
+ dev->driver->dma_quiescent(dev);
+
+ return 0;
+}
+
+int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_lock *lock = data;
+
+ DRM_DEBUG("%d (pid %d) requests unlock (0x%08x), flags = 0x%08x\n",
+ lock->context, DRM_CURRENTPID, dev->lock.hw_lock->lock,
+ lock->flags);
+
+ if (lock->context == DRM_KERNEL_CONTEXT) {
+ DRM_ERROR("Process %d using kernel context %d\n",
+ DRM_CURRENTPID, lock->context);
+ return EINVAL;
+ }
+
+ atomic_inc(&dev->counts[_DRM_STAT_UNLOCKS]);
+
+ DRM_LOCK(dev);
+ drm_lock_transfer(&dev->lock, DRM_KERNEL_CONTEXT);
+
+ if (drm_lock_free(&dev->lock, DRM_KERNEL_CONTEXT)) {
+ DRM_ERROR("\n");
+ }
+ DRM_UNLOCK(dev);
+
+ return 0;
+}
+
+int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context)
+{
+ volatile unsigned int *lock = &lock_data->hw_lock->lock;
+ unsigned int old, new;
+
+ do {
+ old = *lock;
+ if (old & _DRM_LOCK_HELD)
+ new = old | _DRM_LOCK_CONT;
+ else
+ new = context | _DRM_LOCK_HELD;
+ } while (!atomic_cmpset_int(lock, old, new));
+
+ if (_DRM_LOCKING_CONTEXT(old) == context) {
+ if (old & _DRM_LOCK_HELD) {
+ if (context != DRM_KERNEL_CONTEXT) {
+ DRM_ERROR("%d holds heavyweight lock\n",
+ context);
+ }
+ return 0;
+ }
+ }
+ if (new == (context | _DRM_LOCK_HELD)) {
+ /* Have lock */
+ return 1;
+ }
+ return 0;
+}
+
+/* This takes a lock forcibly and hands it to context. Should ONLY be used
+ inside *_unlock to give lock to kernel before calling *_dma_schedule. */
+int drm_lock_transfer(struct drm_lock_data *lock_data, unsigned int context)
+{
+ volatile unsigned int *lock = &lock_data->hw_lock->lock;
+ unsigned int old, new;
+
+ lock_data->file_priv = NULL;
+ do {
+ old = *lock;
+ new = context | _DRM_LOCK_HELD;
+ } while (!atomic_cmpset_int(lock, old, new));
+
+ return 1;
+}
+
+int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context)
+{
+ volatile unsigned int *lock = &lock_data->hw_lock->lock;
+ unsigned int old, new;
+
+ lock_data->file_priv = NULL;
+ do {
+ old = *lock;
+ new = 0;
+ } while (!atomic_cmpset_int(lock, old, new));
+
+ if (_DRM_LOCK_IS_HELD(old) && _DRM_LOCKING_CONTEXT(old) != context) {
+ DRM_ERROR("%d freed heavyweight lock held by %d\n",
+ context, _DRM_LOCKING_CONTEXT(old));
+ return 1;
+ }
+ DRM_WAKEUP_INT((void *)&lock_data->lock_queue);
+ return 0;
+}
diff --git a/sys/dev/drm2/drm_memory.c b/sys/dev/drm2/drm_memory.c
new file mode 100644
index 000000000000..fa48197388cc
--- /dev/null
+++ b/sys/dev/drm2/drm_memory.c
@@ -0,0 +1,127 @@
+/*-
+ *Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * Portions of this software were developed by Konstantin Belousov
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@valinux.com>
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_memory.c
+ * Wrappers for kernel memory allocation routines, and MTRR management support.
+ *
+ * This file previously implemented a memory consumption tracking system using
+ * the "area" argument for various different types of allocations, but that
+ * has been stripped out for now.
+ */
+
+#include <dev/drm2/drmP.h>
+
+MALLOC_DEFINE(DRM_MEM_DMA, "drm_dma", "DRM DMA Data Structures");
+MALLOC_DEFINE(DRM_MEM_SAREA, "drm_sarea", "DRM SAREA Data Structures");
+MALLOC_DEFINE(DRM_MEM_DRIVER, "drm_driver", "DRM DRIVER Data Structures");
+MALLOC_DEFINE(DRM_MEM_MAGIC, "drm_magic", "DRM MAGIC Data Structures");
+MALLOC_DEFINE(DRM_MEM_IOCTLS, "drm_ioctls", "DRM IOCTL Data Structures");
+MALLOC_DEFINE(DRM_MEM_MAPS, "drm_maps", "DRM MAP Data Structures");
+MALLOC_DEFINE(DRM_MEM_BUFS, "drm_bufs", "DRM BUFFER Data Structures");
+MALLOC_DEFINE(DRM_MEM_SEGS, "drm_segs", "DRM SEGMENTS Data Structures");
+MALLOC_DEFINE(DRM_MEM_PAGES, "drm_pages", "DRM PAGES Data Structures");
+MALLOC_DEFINE(DRM_MEM_FILES, "drm_files", "DRM FILE Data Structures");
+MALLOC_DEFINE(DRM_MEM_QUEUES, "drm_queues", "DRM QUEUE Data Structures");
+MALLOC_DEFINE(DRM_MEM_CMDS, "drm_cmds", "DRM COMMAND Data Structures");
+MALLOC_DEFINE(DRM_MEM_MAPPINGS, "drm_mapping", "DRM MAPPING Data Structures");
+MALLOC_DEFINE(DRM_MEM_BUFLISTS, "drm_buflists", "DRM BUFLISTS Data Structures");
+MALLOC_DEFINE(DRM_MEM_AGPLISTS, "drm_agplists", "DRM AGPLISTS Data Structures");
+MALLOC_DEFINE(DRM_MEM_CTXBITMAP, "drm_ctxbitmap",
+ "DRM CTXBITMAP Data Structures");
+MALLOC_DEFINE(DRM_MEM_SGLISTS, "drm_sglists", "DRM SGLISTS Data Structures");
+MALLOC_DEFINE(DRM_MEM_DRAWABLE, "drm_drawable", "DRM DRAWABLE Data Structures");
+MALLOC_DEFINE(DRM_MEM_MM, "drm_sman", "DRM MEMORY MANAGER Data Structures");
+MALLOC_DEFINE(DRM_MEM_HASHTAB, "drm_hashtab", "DRM HASHTABLE Data Structures");
+MALLOC_DEFINE(DRM_MEM_KMS, "drm_kms", "DRM KMS Data Structures");
+
+void drm_mem_init(void)
+{
+}
+
+void drm_mem_uninit(void)
+{
+}
+
+void *drm_ioremap_wc(struct drm_device *dev, drm_local_map_t *map)
+{
+ return pmap_mapdev_attr(map->offset, map->size, VM_MEMATTR_WRITE_COMBINING);
+}
+
+void *drm_ioremap(struct drm_device *dev, drm_local_map_t *map)
+{
+ return pmap_mapdev(map->offset, map->size);
+}
+
+void drm_ioremapfree(drm_local_map_t *map)
+{
+ pmap_unmapdev((vm_offset_t) map->virtual, map->size);
+}
+
+int
+drm_mtrr_add(unsigned long offset, size_t size, int flags)
+{
+ int act;
+ struct mem_range_desc mrdesc;
+
+ mrdesc.mr_base = offset;
+ mrdesc.mr_len = size;
+ mrdesc.mr_flags = flags;
+ act = MEMRANGE_SET_UPDATE;
+ strlcpy(mrdesc.mr_owner, "drm", sizeof(mrdesc.mr_owner));
+ return mem_range_attr_set(&mrdesc, &act);
+}
+
+int
+drm_mtrr_del(int __unused handle, unsigned long offset, size_t size, int flags)
+{
+ int act;
+ struct mem_range_desc mrdesc;
+
+ mrdesc.mr_base = offset;
+ mrdesc.mr_len = size;
+ mrdesc.mr_flags = flags;
+ act = MEMRANGE_SET_REMOVE;
+ strlcpy(mrdesc.mr_owner, "drm", sizeof(mrdesc.mr_owner));
+ return mem_range_attr_set(&mrdesc, &act);
+}
+
+void
+drm_clflush_pages(vm_page_t *pages, unsigned long num_pages)
+{
+
+ pmap_invalidate_cache_pages(pages, num_pages);
+}
diff --git a/sys/dev/drm2/drm_mm.c b/sys/dev/drm2/drm_mm.c
new file mode 100644
index 000000000000..cb35fc0d3df2
--- /dev/null
+++ b/sys/dev/drm2/drm_mm.c
@@ -0,0 +1,563 @@
+/**************************************************************************
+ *
+ * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND., USA.
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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.
+ *
+ *
+ **************************************************************************/
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Generic simple memory manager implementation. Intended to be used as a base
+ * class implementation for more advanced memory managers.
+ *
+ * Note that the algorithm used is quite simple and there might be substantial
+ * performance gains if a smarter free list is implemented. Currently it is just an
+ * unordered stack of free regions. This could easily be improved if an RB-tree
+ * is used instead. At least if we expect heavy fragmentation.
+ *
+ * Aligned allocations can also see improvement.
+ *
+ * Authors:
+ * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ */
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_mm.h>
+
+#define MM_UNUSED_TARGET 4
+
+static struct drm_mm_node *drm_mm_kmalloc(struct drm_mm *mm, int atomic)
+{
+ struct drm_mm_node *child;
+
+ child = malloc(sizeof(*child), DRM_MEM_MM, M_ZERO |
+ (atomic ? M_NOWAIT : M_WAITOK));
+
+ if (unlikely(child == NULL)) {
+ mtx_lock(&mm->unused_lock);
+ if (list_empty(&mm->unused_nodes))
+ child = NULL;
+ else {
+ child =
+ list_entry(mm->unused_nodes.next,
+ struct drm_mm_node, node_list);
+ list_del(&child->node_list);
+ --mm->num_unused;
+ }
+ mtx_unlock(&mm->unused_lock);
+ }
+ return child;
+}
+
+int drm_mm_pre_get(struct drm_mm *mm)
+{
+ struct drm_mm_node *node;
+
+ mtx_lock(&mm->unused_lock);
+ while (mm->num_unused < MM_UNUSED_TARGET) {
+ mtx_unlock(&mm->unused_lock);
+ node = malloc(sizeof(*node), DRM_MEM_MM, M_WAITOK);
+ mtx_lock(&mm->unused_lock);
+
+ if (unlikely(node == NULL)) {
+ int ret = (mm->num_unused < 2) ? -ENOMEM : 0;
+ mtx_unlock(&mm->unused_lock);
+ return ret;
+ }
+ ++mm->num_unused;
+ list_add_tail(&node->node_list, &mm->unused_nodes);
+ }
+ mtx_unlock(&mm->unused_lock);
+ return 0;
+}
+
+static inline unsigned long drm_mm_hole_node_start(struct drm_mm_node *hole_node)
+{
+ return hole_node->start + hole_node->size;
+}
+
+static inline unsigned long drm_mm_hole_node_end(struct drm_mm_node *hole_node)
+{
+ struct drm_mm_node *next_node =
+ list_entry(hole_node->node_list.next, struct drm_mm_node,
+ node_list);
+
+ return next_node->start;
+}
+
+static void drm_mm_insert_helper(struct drm_mm_node *hole_node,
+ struct drm_mm_node *node,
+ unsigned long size, unsigned alignment)
+{
+ struct drm_mm *mm = hole_node->mm;
+ unsigned long tmp = 0, wasted = 0;
+ unsigned long hole_start = drm_mm_hole_node_start(hole_node);
+ unsigned long hole_end = drm_mm_hole_node_end(hole_node);
+
+ KASSERT(hole_node->hole_follows && !node->allocated, ("hole_node"));
+
+ if (alignment)
+ tmp = hole_start % alignment;
+
+ if (!tmp) {
+ hole_node->hole_follows = 0;
+ list_del_init(&hole_node->hole_stack);
+ } else
+ wasted = alignment - tmp;
+
+ node->start = hole_start + wasted;
+ node->size = size;
+ node->mm = mm;
+ node->allocated = 1;
+
+ INIT_LIST_HEAD(&node->hole_stack);
+ list_add(&node->node_list, &hole_node->node_list);
+
+ KASSERT(node->start + node->size <= hole_end, ("hole pos"));
+
+ if (node->start + node->size < hole_end) {
+ list_add(&node->hole_stack, &mm->hole_stack);
+ node->hole_follows = 1;
+ } else {
+ node->hole_follows = 0;
+ }
+}
+
+struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *hole_node,
+ unsigned long size,
+ unsigned alignment,
+ int atomic)
+{
+ struct drm_mm_node *node;
+
+ node = drm_mm_kmalloc(hole_node->mm, atomic);
+ if (unlikely(node == NULL))
+ return NULL;
+
+ drm_mm_insert_helper(hole_node, node, size, alignment);
+
+ return node;
+}
+
+int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node,
+ unsigned long size, unsigned alignment)
+{
+ struct drm_mm_node *hole_node;
+
+ hole_node = drm_mm_search_free(mm, size, alignment, 0);
+ if (!hole_node)
+ return -ENOSPC;
+
+ drm_mm_insert_helper(hole_node, node, size, alignment);
+
+ return 0;
+}
+
+static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
+ struct drm_mm_node *node,
+ unsigned long size, unsigned alignment,
+ unsigned long start, unsigned long end)
+{
+ struct drm_mm *mm = hole_node->mm;
+ unsigned long tmp = 0, wasted = 0;
+ unsigned long hole_start = drm_mm_hole_node_start(hole_node);
+ unsigned long hole_end = drm_mm_hole_node_end(hole_node);
+
+ KASSERT(hole_node->hole_follows && !node->allocated, ("hole_node"));
+
+ if (hole_start < start)
+ wasted += start - hole_start;
+ if (alignment)
+ tmp = (hole_start + wasted) % alignment;
+
+ if (tmp)
+ wasted += alignment - tmp;
+
+ if (!wasted) {
+ hole_node->hole_follows = 0;
+ list_del_init(&hole_node->hole_stack);
+ }
+
+ node->start = hole_start + wasted;
+ node->size = size;
+ node->mm = mm;
+ node->allocated = 1;
+
+ INIT_LIST_HEAD(&node->hole_stack);
+ list_add(&node->node_list, &hole_node->node_list);
+
+ KASSERT(node->start + node->size <= hole_end, ("hole_end"));
+ KASSERT(node->start + node->size <= end, ("end"));
+
+ if (node->start + node->size < hole_end) {
+ list_add(&node->hole_stack, &mm->hole_stack);
+ node->hole_follows = 1;
+ } else {
+ node->hole_follows = 0;
+ }
+}
+
+struct drm_mm_node *drm_mm_get_block_range_generic(struct drm_mm_node *hole_node,
+ unsigned long size,
+ unsigned alignment,
+ unsigned long start,
+ unsigned long end,
+ int atomic)
+{
+ struct drm_mm_node *node;
+
+ node = drm_mm_kmalloc(hole_node->mm, atomic);
+ if (unlikely(node == NULL))
+ return NULL;
+
+ drm_mm_insert_helper_range(hole_node, node, size, alignment,
+ start, end);
+
+ return node;
+}
+
+int drm_mm_insert_node_in_range(struct drm_mm *mm, struct drm_mm_node *node,
+ unsigned long size, unsigned alignment,
+ unsigned long start, unsigned long end)
+{
+ struct drm_mm_node *hole_node;
+
+ hole_node = drm_mm_search_free_in_range(mm, size, alignment,
+ start, end, 0);
+ if (!hole_node)
+ return -ENOSPC;
+
+ drm_mm_insert_helper_range(hole_node, node, size, alignment,
+ start, end);
+
+ return 0;
+}
+
+void drm_mm_remove_node(struct drm_mm_node *node)
+{
+ struct drm_mm *mm = node->mm;
+ struct drm_mm_node *prev_node;
+
+ KASSERT(!node->scanned_block && !node->scanned_prev_free
+ && !node->scanned_next_free, ("node"));
+
+ prev_node =
+ list_entry(node->node_list.prev, struct drm_mm_node, node_list);
+
+ if (node->hole_follows) {
+ KASSERT(drm_mm_hole_node_start(node)
+ != drm_mm_hole_node_end(node), ("hole_follows"));
+ list_del(&node->hole_stack);
+ } else
+ KASSERT(drm_mm_hole_node_start(node)
+ == drm_mm_hole_node_end(node), ("!hole_follows"));
+
+ if (!prev_node->hole_follows) {
+ prev_node->hole_follows = 1;
+ list_add(&prev_node->hole_stack, &mm->hole_stack);
+ } else
+ list_move(&prev_node->hole_stack, &mm->hole_stack);
+
+ list_del(&node->node_list);
+ node->allocated = 0;
+}
+
+/*
+ * Put a block. Merge with the previous and / or next block if they are free.
+ * Otherwise add to the free stack.
+ */
+
+void drm_mm_put_block(struct drm_mm_node *node)
+{
+ struct drm_mm *mm = node->mm;
+
+ drm_mm_remove_node(node);
+
+ mtx_lock(&mm->unused_lock);
+ if (mm->num_unused < MM_UNUSED_TARGET) {
+ list_add(&node->node_list, &mm->unused_nodes);
+ ++mm->num_unused;
+ } else
+ free(node, DRM_MEM_MM);
+ mtx_unlock(&mm->unused_lock);
+}
+
+static int check_free_hole(unsigned long start, unsigned long end,
+ unsigned long size, unsigned alignment)
+{
+ unsigned wasted = 0;
+
+ if (end - start < size)
+ return 0;
+
+ if (alignment) {
+ unsigned tmp = start % alignment;
+ if (tmp)
+ wasted = alignment - tmp;
+ }
+
+ if (end >= start + size + wasted) {
+ return 1;
+ }
+
+ return 0;
+}
+
+
+struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm,
+ unsigned long size,
+ unsigned alignment, int best_match)
+{
+ struct drm_mm_node *entry;
+ struct drm_mm_node *best;
+ unsigned long best_size;
+
+ best = NULL;
+ best_size = ~0UL;
+
+ list_for_each_entry(entry, &mm->hole_stack, hole_stack) {
+ KASSERT(entry->hole_follows, ("hole_follows"));
+ if (!check_free_hole(drm_mm_hole_node_start(entry),
+ drm_mm_hole_node_end(entry),
+ size, alignment))
+ continue;
+
+ if (!best_match)
+ return entry;
+
+ if (entry->size < best_size) {
+ best = entry;
+ best_size = entry->size;
+ }
+ }
+
+ return best;
+}
+
+struct drm_mm_node *drm_mm_search_free_in_range(const struct drm_mm *mm,
+ unsigned long size,
+ unsigned alignment,
+ unsigned long start,
+ unsigned long end,
+ int best_match)
+{
+ struct drm_mm_node *entry;
+ struct drm_mm_node *best;
+ unsigned long best_size;
+
+ KASSERT(!mm->scanned_blocks, ("scanned"));
+
+ best = NULL;
+ best_size = ~0UL;
+
+ list_for_each_entry(entry, &mm->hole_stack, hole_stack) {
+ unsigned long adj_start = drm_mm_hole_node_start(entry) < start ?
+ start : drm_mm_hole_node_start(entry);
+ unsigned long adj_end = drm_mm_hole_node_end(entry) > end ?
+ end : drm_mm_hole_node_end(entry);
+
+ KASSERT(entry->hole_follows, ("hole_follows"));
+ if (!check_free_hole(adj_start, adj_end, size, alignment))
+ continue;
+
+ if (!best_match)
+ return entry;
+
+ if (entry->size < best_size) {
+ best = entry;
+ best_size = entry->size;
+ }
+ }
+
+ return best;
+}
+
+void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new)
+{
+ list_replace(&old->node_list, &new->node_list);
+ list_replace(&old->hole_stack, &new->hole_stack);
+ new->hole_follows = old->hole_follows;
+ new->mm = old->mm;
+ new->start = old->start;
+ new->size = old->size;
+
+ old->allocated = 0;
+ new->allocated = 1;
+}
+
+void drm_mm_init_scan(struct drm_mm *mm, unsigned long size,
+ unsigned alignment)
+{
+ mm->scan_alignment = alignment;
+ mm->scan_size = size;
+ mm->scanned_blocks = 0;
+ mm->scan_hit_start = 0;
+ mm->scan_hit_size = 0;
+ mm->scan_check_range = 0;
+ mm->prev_scanned_node = NULL;
+}
+
+void drm_mm_init_scan_with_range(struct drm_mm *mm, unsigned long size,
+ unsigned alignment,
+ unsigned long start,
+ unsigned long end)
+{
+ mm->scan_alignment = alignment;
+ mm->scan_size = size;
+ mm->scanned_blocks = 0;
+ mm->scan_hit_start = 0;
+ mm->scan_hit_size = 0;
+ mm->scan_start = start;
+ mm->scan_end = end;
+ mm->scan_check_range = 1;
+ mm->prev_scanned_node = NULL;
+}
+
+int drm_mm_scan_add_block(struct drm_mm_node *node)
+{
+ struct drm_mm *mm = node->mm;
+ struct drm_mm_node *prev_node;
+ unsigned long hole_start, hole_end;
+ unsigned long adj_start;
+ unsigned long adj_end;
+
+ mm->scanned_blocks++;
+
+ KASSERT(!node->scanned_block, ("node->scanned_block"));
+ node->scanned_block = 1;
+
+ prev_node = list_entry(node->node_list.prev, struct drm_mm_node,
+ node_list);
+
+ node->scanned_preceeds_hole = prev_node->hole_follows;
+ prev_node->hole_follows = 1;
+ list_del(&node->node_list);
+ node->node_list.prev = &prev_node->node_list;
+ node->node_list.next = &mm->prev_scanned_node->node_list;
+ mm->prev_scanned_node = node;
+
+ hole_start = drm_mm_hole_node_start(prev_node);
+ hole_end = drm_mm_hole_node_end(prev_node);
+ if (mm->scan_check_range) {
+ adj_start = hole_start < mm->scan_start ?
+ mm->scan_start : hole_start;
+ adj_end = hole_end > mm->scan_end ?
+ mm->scan_end : hole_end;
+ } else {
+ adj_start = hole_start;
+ adj_end = hole_end;
+ }
+
+ if (check_free_hole(adj_start , adj_end,
+ mm->scan_size, mm->scan_alignment)) {
+ mm->scan_hit_start = hole_start;
+ mm->scan_hit_size = hole_end;
+
+ return 1;
+ }
+
+ return 0;
+}
+
+int drm_mm_scan_remove_block(struct drm_mm_node *node)
+{
+ struct drm_mm *mm = node->mm;
+ struct drm_mm_node *prev_node;
+
+ mm->scanned_blocks--;
+
+ KASSERT(node->scanned_block, ("scanned_block"));
+ node->scanned_block = 0;
+
+ prev_node = list_entry(node->node_list.prev, struct drm_mm_node,
+ node_list);
+
+ prev_node->hole_follows = node->scanned_preceeds_hole;
+ INIT_LIST_HEAD(&node->node_list);
+ list_add(&node->node_list, &prev_node->node_list);
+
+ /* Only need to check for containement because start&size for the
+ * complete resulting free block (not just the desired part) is
+ * stored. */
+ if (node->start >= mm->scan_hit_start &&
+ node->start + node->size
+ <= mm->scan_hit_start + mm->scan_hit_size) {
+ return 1;
+ }
+
+ return 0;
+}
+
+int drm_mm_clean(struct drm_mm * mm)
+{
+ struct list_head *head = &mm->head_node.node_list;
+
+ return (head->next->next == head);
+}
+
+int drm_mm_init(struct drm_mm * mm, unsigned long start, unsigned long size)
+{
+ INIT_LIST_HEAD(&mm->hole_stack);
+ INIT_LIST_HEAD(&mm->unused_nodes);
+ mm->num_unused = 0;
+ mm->scanned_blocks = 0;
+ mtx_init(&mm->unused_lock, "drm_unused", NULL, MTX_DEF);
+
+ INIT_LIST_HEAD(&mm->head_node.node_list);
+ INIT_LIST_HEAD(&mm->head_node.hole_stack);
+ mm->head_node.hole_follows = 1;
+ mm->head_node.scanned_block = 0;
+ mm->head_node.scanned_prev_free = 0;
+ mm->head_node.scanned_next_free = 0;
+ mm->head_node.mm = mm;
+ mm->head_node.start = start + size;
+ mm->head_node.size = start - mm->head_node.start;
+ list_add_tail(&mm->head_node.hole_stack, &mm->hole_stack);
+
+ return 0;
+}
+
+void drm_mm_takedown(struct drm_mm * mm)
+{
+ struct drm_mm_node *entry, *next;
+
+ if (!list_empty(&mm->head_node.node_list)) {
+ DRM_ERROR("Memory manager not clean. Delaying takedown\n");
+ return;
+ }
+
+ mtx_lock(&mm->unused_lock);
+ list_for_each_entry_safe(entry, next, &mm->unused_nodes, node_list) {
+ list_del(&entry->node_list);
+ free(entry, DRM_MEM_MM);
+ --mm->num_unused;
+ }
+ mtx_unlock(&mm->unused_lock);
+
+ mtx_destroy(&mm->unused_lock);
+
+ KASSERT(mm->num_unused == 0, ("num_unused != 0"));
+}
diff --git a/sys/dev/drm2/drm_mm.h b/sys/dev/drm2/drm_mm.h
new file mode 100644
index 000000000000..7b173af897b6
--- /dev/null
+++ b/sys/dev/drm2/drm_mm.h
@@ -0,0 +1,185 @@
+/**************************************************************************
+ *
+ * Copyright 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX. USA.
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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.
+ *
+ *
+ **************************************************************************/
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Authors:
+ * Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
+ */
+
+#ifndef _DRM_MM_H_
+#define _DRM_MM_H_
+
+#include <dev/drm2/drm_linux_list.h>
+
+struct drm_mm_node {
+ struct list_head node_list;
+ struct list_head hole_stack;
+ unsigned hole_follows : 1;
+ unsigned scanned_block : 1;
+ unsigned scanned_prev_free : 1;
+ unsigned scanned_next_free : 1;
+ unsigned scanned_preceeds_hole : 1;
+ unsigned allocated : 1;
+ unsigned long start;
+ unsigned long size;
+ struct drm_mm *mm;
+ void *private;
+};
+
+struct drm_mm {
+ struct list_head hole_stack;
+ struct drm_mm_node head_node;
+ struct list_head unused_nodes;
+ int num_unused;
+ struct mtx unused_lock;
+ unsigned int scan_check_range : 1;
+ unsigned scan_alignment;
+ unsigned long scan_size;
+ unsigned long scan_hit_start;
+ unsigned scan_hit_size;
+ unsigned scanned_blocks;
+ unsigned long scan_start;
+ unsigned long scan_end;
+ struct drm_mm_node *prev_scanned_node;
+};
+
+static inline bool drm_mm_node_allocated(struct drm_mm_node *node)
+{
+ return node->allocated;
+}
+
+static inline bool drm_mm_initialized(struct drm_mm *mm)
+{
+ return (mm->hole_stack.next != NULL);
+}
+#define drm_mm_for_each_node(entry, mm) list_for_each_entry(entry, \
+ &(mm)->head_node.node_list, \
+ node_list)
+#define drm_mm_for_each_scanned_node_reverse(entry, n, mm) \
+ for (entry = (mm)->prev_scanned_node, \
+ next = entry ? list_entry(entry->node_list.next, \
+ struct drm_mm_node, node_list) : NULL; \
+ entry != NULL; entry = next, \
+ next = entry ? list_entry(entry->node_list.next, \
+ struct drm_mm_node, node_list) : NULL)
+
+/*
+ * Basic range manager support (drm_mm.c)
+ */
+extern struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *node,
+ unsigned long size,
+ unsigned alignment,
+ int atomic);
+extern struct drm_mm_node *drm_mm_get_block_range_generic(
+ struct drm_mm_node *node,
+ unsigned long size,
+ unsigned alignment,
+ unsigned long start,
+ unsigned long end,
+ int atomic);
+static inline struct drm_mm_node *drm_mm_get_block(struct drm_mm_node *parent,
+ unsigned long size,
+ unsigned alignment)
+{
+ return drm_mm_get_block_generic(parent, size, alignment, 0);
+}
+static inline struct drm_mm_node *drm_mm_get_block_atomic(struct drm_mm_node *parent,
+ unsigned long size,
+ unsigned alignment)
+{
+ return drm_mm_get_block_generic(parent, size, alignment, 1);
+}
+static inline struct drm_mm_node *drm_mm_get_block_range(
+ struct drm_mm_node *parent,
+ unsigned long size,
+ unsigned alignment,
+ unsigned long start,
+ unsigned long end)
+{
+ return drm_mm_get_block_range_generic(parent, size, alignment,
+ start, end, 0);
+}
+static inline struct drm_mm_node *drm_mm_get_block_atomic_range(
+ struct drm_mm_node *parent,
+ unsigned long size,
+ unsigned alignment,
+ unsigned long start,
+ unsigned long end)
+{
+ return drm_mm_get_block_range_generic(parent, size, alignment,
+ start, end, 1);
+}
+extern int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node,
+ unsigned long size, unsigned alignment);
+extern int drm_mm_insert_node_in_range(struct drm_mm *mm,
+ struct drm_mm_node *node,
+ unsigned long size, unsigned alignment,
+ unsigned long start, unsigned long end);
+extern void drm_mm_put_block(struct drm_mm_node *cur);
+extern void drm_mm_remove_node(struct drm_mm_node *node);
+extern void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new);
+extern struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm,
+ unsigned long size,
+ unsigned alignment,
+ int best_match);
+extern struct drm_mm_node *drm_mm_search_free_in_range(
+ const struct drm_mm *mm,
+ unsigned long size,
+ unsigned alignment,
+ unsigned long start,
+ unsigned long end,
+ int best_match);
+extern int drm_mm_init(struct drm_mm *mm, unsigned long start,
+ unsigned long size);
+extern void drm_mm_takedown(struct drm_mm *mm);
+extern int drm_mm_clean(struct drm_mm *mm);
+extern unsigned long drm_mm_tail_space(struct drm_mm *mm);
+extern int drm_mm_remove_space_from_tail(struct drm_mm *mm,
+ unsigned long size);
+extern int drm_mm_add_space_to_tail(struct drm_mm *mm,
+ unsigned long size, int atomic);
+extern int drm_mm_pre_get(struct drm_mm *mm);
+
+static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block)
+{
+ return block->mm;
+}
+
+void drm_mm_init_scan(struct drm_mm *mm, unsigned long size,
+ unsigned alignment);
+void drm_mm_init_scan_with_range(struct drm_mm *mm, unsigned long size,
+ unsigned alignment,
+ unsigned long start,
+ unsigned long end);
+int drm_mm_scan_add_block(struct drm_mm_node *node);
+int drm_mm_scan_remove_block(struct drm_mm_node *node);
+
+#endif
diff --git a/sys/dev/drm2/drm_mode.h b/sys/dev/drm2/drm_mode.h
new file mode 100644
index 000000000000..bc2824011d19
--- /dev/null
+++ b/sys/dev/drm2/drm_mode.h
@@ -0,0 +1,444 @@
+/*
+ * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
+ * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com>
+ * Copyright (c) 2008 Red Hat Inc.
+ * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
+ * Copyright (c) 2007-2008 Intel Corporation
+ *
+ * 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 _DRM_MODE_H
+#define _DRM_MODE_H
+
+#define DRM_DISPLAY_INFO_LEN 32
+#define DRM_CONNECTOR_NAME_LEN 32
+#define DRM_DISPLAY_MODE_LEN 32
+#define DRM_PROP_NAME_LEN 32
+
+#define DRM_MODE_TYPE_BUILTIN (1<<0)
+#define DRM_MODE_TYPE_CLOCK_C ((1<<1) | DRM_MODE_TYPE_BUILTIN)
+#define DRM_MODE_TYPE_CRTC_C ((1<<2) | DRM_MODE_TYPE_BUILTIN)
+#define DRM_MODE_TYPE_PREFERRED (1<<3)
+#define DRM_MODE_TYPE_DEFAULT (1<<4)
+#define DRM_MODE_TYPE_USERDEF (1<<5)
+#define DRM_MODE_TYPE_DRIVER (1<<6)
+
+/* Video mode flags */
+/* bit compatible with the xorg definitions. */
+#define DRM_MODE_FLAG_PHSYNC (1<<0)
+#define DRM_MODE_FLAG_NHSYNC (1<<1)
+#define DRM_MODE_FLAG_PVSYNC (1<<2)
+#define DRM_MODE_FLAG_NVSYNC (1<<3)
+#define DRM_MODE_FLAG_INTERLACE (1<<4)
+#define DRM_MODE_FLAG_DBLSCAN (1<<5)
+#define DRM_MODE_FLAG_CSYNC (1<<6)
+#define DRM_MODE_FLAG_PCSYNC (1<<7)
+#define DRM_MODE_FLAG_NCSYNC (1<<8)
+#define DRM_MODE_FLAG_HSKEW (1<<9) /* hskew provided */
+#define DRM_MODE_FLAG_BCAST (1<<10)
+#define DRM_MODE_FLAG_PIXMUX (1<<11)
+#define DRM_MODE_FLAG_DBLCLK (1<<12)
+#define DRM_MODE_FLAG_CLKDIV2 (1<<13)
+
+/* DPMS flags */
+/* bit compatible with the xorg definitions. */
+#define DRM_MODE_DPMS_ON 0
+#define DRM_MODE_DPMS_STANDBY 1
+#define DRM_MODE_DPMS_SUSPEND 2
+#define DRM_MODE_DPMS_OFF 3
+
+/* Scaling mode options */
+#define DRM_MODE_SCALE_NONE 0 /* Unmodified timing (display or
+ software can still scale) */
+#define DRM_MODE_SCALE_FULLSCREEN 1 /* Full screen, ignore aspect */
+#define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */
+#define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */
+
+/* Dithering mode options */
+#define DRM_MODE_DITHERING_OFF 0
+#define DRM_MODE_DITHERING_ON 1
+#define DRM_MODE_DITHERING_AUTO 2
+
+/* Dirty info options */
+#define DRM_MODE_DIRTY_OFF 0
+#define DRM_MODE_DIRTY_ON 1
+#define DRM_MODE_DIRTY_ANNOTATE 2
+
+struct drm_mode_modeinfo {
+ uint32_t clock;
+ uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew;
+ uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan;
+
+ uint32_t vrefresh;
+
+ uint32_t flags;
+ uint32_t type;
+ char name[DRM_DISPLAY_MODE_LEN];
+};
+
+struct drm_mode_card_res {
+ uint64_t fb_id_ptr;
+ uint64_t crtc_id_ptr;
+ uint64_t connector_id_ptr;
+ uint64_t encoder_id_ptr;
+ uint32_t count_fbs;
+ uint32_t count_crtcs;
+ uint32_t count_connectors;
+ uint32_t count_encoders;
+ uint32_t min_width, max_width;
+ uint32_t min_height, max_height;
+};
+
+struct drm_mode_crtc {
+ uint64_t set_connectors_ptr;
+ uint32_t count_connectors;
+
+ uint32_t crtc_id; /**< Id */
+ uint32_t fb_id; /**< Id of framebuffer */
+
+ uint32_t x, y; /**< Position on the frameuffer */
+
+ uint32_t gamma_size;
+ uint32_t mode_valid;
+ struct drm_mode_modeinfo mode;
+};
+
+#define DRM_MODE_PRESENT_TOP_FIELD (1<<0)
+#define DRM_MODE_PRESENT_BOTTOM_FIELD (1<<1)
+
+/* Planes blend with or override other bits on the CRTC */
+struct drm_mode_set_plane {
+ uint32_t plane_id;
+ uint32_t crtc_id;
+ uint32_t fb_id; /* fb object contains surface format type */
+ uint32_t flags; /* see above flags */
+
+ /* Signed dest location allows it to be partially off screen */
+ int32_t crtc_x, crtc_y;
+ uint32_t crtc_w, crtc_h;
+
+ /* Source values are 16.16 fixed point */
+ uint32_t src_x, src_y;
+ uint32_t src_h, src_w;
+};
+
+struct drm_mode_get_plane {
+ uint32_t plane_id;
+
+ uint32_t crtc_id;
+ uint32_t fb_id;
+
+ uint32_t possible_crtcs;
+ uint32_t gamma_size;
+
+ uint32_t count_format_types;
+ uint64_t format_type_ptr;
+};
+
+struct drm_mode_get_plane_res {
+ uint64_t plane_id_ptr;
+ uint32_t count_planes;
+};
+
+#define DRM_MODE_ENCODER_NONE 0
+#define DRM_MODE_ENCODER_DAC 1
+#define DRM_MODE_ENCODER_TMDS 2
+#define DRM_MODE_ENCODER_LVDS 3
+#define DRM_MODE_ENCODER_TVDAC 4
+
+struct drm_mode_get_encoder {
+ uint32_t encoder_id;
+ uint32_t encoder_type;
+
+ uint32_t crtc_id; /**< Id of crtc */
+
+ uint32_t possible_crtcs;
+ uint32_t possible_clones;
+};
+
+/* This is for connectors with multiple signal types. */
+/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
+#define DRM_MODE_SUBCONNECTOR_Automatic 0
+#define DRM_MODE_SUBCONNECTOR_Unknown 0
+#define DRM_MODE_SUBCONNECTOR_DVID 3
+#define DRM_MODE_SUBCONNECTOR_DVIA 4
+#define DRM_MODE_SUBCONNECTOR_Composite 5
+#define DRM_MODE_SUBCONNECTOR_SVIDEO 6
+#define DRM_MODE_SUBCONNECTOR_Component 8
+#define DRM_MODE_SUBCONNECTOR_SCART 9
+
+#define DRM_MODE_CONNECTOR_Unknown 0
+#define DRM_MODE_CONNECTOR_VGA 1
+#define DRM_MODE_CONNECTOR_DVII 2
+#define DRM_MODE_CONNECTOR_DVID 3
+#define DRM_MODE_CONNECTOR_DVIA 4
+#define DRM_MODE_CONNECTOR_Composite 5
+#define DRM_MODE_CONNECTOR_SVIDEO 6
+#define DRM_MODE_CONNECTOR_LVDS 7
+#define DRM_MODE_CONNECTOR_Component 8
+#define DRM_MODE_CONNECTOR_9PinDIN 9
+#define DRM_MODE_CONNECTOR_DisplayPort 10
+#define DRM_MODE_CONNECTOR_HDMIA 11
+#define DRM_MODE_CONNECTOR_HDMIB 12
+#define DRM_MODE_CONNECTOR_TV 13
+#define DRM_MODE_CONNECTOR_eDP 14
+
+struct drm_mode_get_connector {
+
+ uint64_t encoders_ptr;
+ uint64_t modes_ptr;
+ uint64_t props_ptr;
+ uint64_t prop_values_ptr;
+
+ uint32_t count_modes;
+ uint32_t count_props;
+ uint32_t count_encoders;
+
+ uint32_t encoder_id; /**< Current Encoder */
+ uint32_t connector_id; /**< Id */
+ uint32_t connector_type;
+ uint32_t connector_type_id;
+
+ uint32_t connection;
+ uint32_t mm_width, mm_height; /**< HxW in millimeters */
+ uint32_t subpixel;
+};
+
+#define DRM_MODE_PROP_PENDING (1<<0)
+#define DRM_MODE_PROP_RANGE (1<<1)
+#define DRM_MODE_PROP_IMMUTABLE (1<<2)
+#define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */
+#define DRM_MODE_PROP_BLOB (1<<4)
+
+struct drm_mode_property_enum {
+ uint64_t value;
+ char name[DRM_PROP_NAME_LEN];
+};
+
+struct drm_mode_get_property {
+ uint64_t values_ptr; /* values and blob lengths */
+ uint64_t enum_blob_ptr; /* enum and blob id ptrs */
+
+ uint32_t prop_id;
+ uint32_t flags;
+ char name[DRM_PROP_NAME_LEN];
+
+ uint32_t count_values;
+ uint32_t count_enum_blobs;
+};
+
+struct drm_mode_connector_set_property {
+ uint64_t value;
+ uint32_t prop_id;
+ uint32_t connector_id;
+};
+
+struct drm_mode_get_blob {
+ uint32_t blob_id;
+ uint32_t length;
+ uint64_t data;
+};
+
+struct drm_mode_fb_cmd {
+ uint32_t fb_id;
+ uint32_t width, height;
+ uint32_t pitch;
+ uint32_t bpp;
+ uint32_t depth;
+ /* driver specific handle */
+ uint32_t handle;
+};
+
+#define DRM_MODE_FB_INTERLACED (1<<0 /* for interlaced framebuffers */
+
+struct drm_mode_fb_cmd2 {
+ uint32_t fb_id;
+ uint32_t width, height;
+ uint32_t pixel_format; /* fourcc code from drm_fourcc.h */
+ uint32_t flags; /* see above flags */
+
+ /*
+ * In case of planar formats, this ioctl allows up to 4
+ * buffer objects with offets and pitches per plane.
+ * The pitch and offset order is dictated by the fourcc,
+ * e.g. NV12 (http://fourcc.org/yuv.php#NV12) is described as:
+ *
+ * YUV 4:2:0 image with a plane of 8 bit Y samples
+ * followed by an interleaved U/V plane containing
+ * 8 bit 2x2 subsampled colour difference samples.
+ *
+ * So it would consist of Y as offset[0] and UV as
+ * offeset[1]. Note that offset[0] will generally
+ * be 0.
+ */
+ uint32_t handles[4];
+ uint32_t pitches[4]; /* pitch for each plane */
+ uint32_t offsets[4]; /* offset of each plane */
+};
+
+#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
+#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
+#define DRM_MODE_FB_DIRTY_FLAGS 0x03
+
+#define DRM_MODE_FB_DIRTY_MAX_CLIPS 256
+
+/*
+ * Mark a region of a framebuffer as dirty.
+ *
+ * Some hardware does not automatically update display contents
+ * as a hardware or software draw to a framebuffer. This ioctl
+ * allows userspace to tell the kernel and the hardware what
+ * regions of the framebuffer have changed.
+ *
+ * The kernel or hardware is free to update more then just the
+ * region specified by the clip rects. The kernel or hardware
+ * may also delay and/or coalesce several calls to dirty into a
+ * single update.
+ *
+ * Userspace may annotate the updates, the annotates are a
+ * promise made by the caller that the change is either a copy
+ * of pixels or a fill of a single color in the region specified.
+ *
+ * If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
+ * the number of updated regions are half of num_clips given,
+ * where the clip rects are paired in src and dst. The width and
+ * height of each one of the pairs must match.
+ *
+ * If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
+ * promises that the region specified of the clip rects is filled
+ * completely with a single color as given in the color argument.
+ */
+
+struct drm_mode_fb_dirty_cmd {
+ uint32_t fb_id;
+ uint32_t flags;
+ uint32_t color;
+ uint32_t num_clips;
+ uint64_t clips_ptr;
+};
+
+struct drm_mode_mode_cmd {
+ uint32_t connector_id;
+ struct drm_mode_modeinfo mode;
+};
+
+#define DRM_MODE_CURSOR_BO (1<<0)
+#define DRM_MODE_CURSOR_MOVE (1<<1)
+
+/*
+ * depending on the value in flags diffrent members are used.
+ *
+ * CURSOR_BO uses
+ * crtc
+ * width
+ * height
+ * handle - if 0 turns the cursor of
+ *
+ * CURSOR_MOVE uses
+ * crtc
+ * x
+ * y
+ */
+struct drm_mode_cursor {
+ uint32_t flags;
+ uint32_t crtc_id;
+ int32_t x;
+ int32_t y;
+ uint32_t width;
+ uint32_t height;
+ /* driver specific handle */
+ uint32_t handle;
+};
+
+struct drm_mode_crtc_lut {
+ uint32_t crtc_id;
+ uint32_t gamma_size;
+
+ /* pointers to arrays */
+ uint64_t red;
+ uint64_t green;
+ uint64_t blue;
+};
+
+#define DRM_MODE_PAGE_FLIP_EVENT 0x01
+#define DRM_MODE_PAGE_FLIP_FLAGS DRM_MODE_PAGE_FLIP_EVENT
+
+/*
+ * Request a page flip on the specified crtc.
+ *
+ * This ioctl will ask KMS to schedule a page flip for the specified
+ * crtc. Once any pending rendering targeting the specified fb (as of
+ * ioctl time) has completed, the crtc will be reprogrammed to display
+ * that fb after the next vertical refresh. The ioctl returns
+ * immediately, but subsequent rendering to the current fb will block
+ * in the execbuffer ioctl until the page flip happens. If a page
+ * flip is already pending as the ioctl is called, EBUSY will be
+ * returned.
+ *
+ * The ioctl supports one flag, DRM_MODE_PAGE_FLIP_EVENT, which will
+ * request that drm sends back a vblank event (see drm.h: struct
+ * drm_event_vblank) when the page flip is done. The user_data field
+ * passed in with this ioctl will be returned as the user_data field
+ * in the vblank event struct.
+ *
+ * The reserved field must be zero until we figure out something
+ * clever to use it for.
+ */
+
+struct drm_mode_crtc_page_flip {
+ uint32_t crtc_id;
+ uint32_t fb_id;
+ uint32_t flags;
+ uint32_t reserved;
+ uint64_t user_data;
+};
+
+/* create a dumb scanout buffer */
+struct drm_mode_create_dumb {
+ uint32_t height;
+ uint32_t width;
+ uint32_t bpp;
+ uint32_t flags;
+ /* handle, pitch, size will be returned */
+ uint32_t handle;
+ uint32_t pitch;
+ uint64_t size;
+};
+
+/* set up for mmap of a dumb scanout buffer */
+struct drm_mode_map_dumb {
+ /** Handle for the object being mapped. */
+ uint32_t handle;
+ uint32_t pad;
+ /**
+ * Fake offset to use for subsequent mmap call
+ *
+ * This is a fixed-size type for 32/64 compatibility.
+ */
+ uint64_t offset;
+};
+
+struct drm_mode_destroy_dumb {
+ uint32_t handle;
+};
+
+#endif
diff --git a/sys/dev/drm2/drm_modes.c b/sys/dev/drm2/drm_modes.c
new file mode 100644
index 000000000000..a2dbbdd58a5b
--- /dev/null
+++ b/sys/dev/drm2/drm_modes.c
@@ -0,0 +1,1147 @@
+/*
+ * Copyright © 1997-2003 by The XFree86 Project, Inc.
+ * Copyright © 2007 Dave Airlie
+ * Copyright © 2007-2008 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ * Copyright 2005-2006 Luc Verhaegen
+ * Copyright (c) 2001, Andy Ritger aritger@nvidia.com
+ *
+ * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 the copyright holder(s)
+ * and author(s) shall not be used in advertising or otherwise to promote
+ * the sale, use or other dealings in this Software without prior written
+ * authorization from the copyright holder(s) and author(s).
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_crtc.h>
+
+#define KHZ2PICOS(a) (1000000000UL/(a))
+
+/**
+ * drm_mode_debug_printmodeline - debug print a mode
+ * @dev: DRM device
+ * @mode: mode to print
+ *
+ * LOCKING:
+ * None.
+ *
+ * Describe @mode using DRM_DEBUG.
+ */
+void drm_mode_debug_printmodeline(struct drm_display_mode *mode)
+{
+ DRM_DEBUG_KMS("Modeline %d:\"%s\" %d %d %d %d %d %d %d %d %d %d "
+ "0x%x 0x%x\n",
+ mode->base.id, mode->name, mode->vrefresh, mode->clock,
+ mode->hdisplay, mode->hsync_start,
+ mode->hsync_end, mode->htotal,
+ mode->vdisplay, mode->vsync_start,
+ mode->vsync_end, mode->vtotal, mode->type, mode->flags);
+}
+
+/**
+ * drm_cvt_mode -create a modeline based on CVT algorithm
+ * @dev: DRM device
+ * @hdisplay: hdisplay size
+ * @vdisplay: vdisplay size
+ * @vrefresh : vrefresh rate
+ * @reduced : Whether the GTF calculation is simplified
+ * @interlaced:Whether the interlace is supported
+ *
+ * LOCKING:
+ * none.
+ *
+ * return the modeline based on CVT algorithm
+ *
+ * This function is called to generate the modeline based on CVT algorithm
+ * according to the hdisplay, vdisplay, vrefresh.
+ * It is based from the VESA(TM) Coordinated Video Timing Generator by
+ * Graham Loveridge April 9, 2003 available at
+ * http://www.elo.utfsm.cl/~elo212/docs/CVTd6r1.xls
+ *
+ * And it is copied from xf86CVTmode in xserver/hw/xfree86/modes/xf86cvt.c.
+ * What I have done is to translate it by using integer calculation.
+ */
+#define HV_FACTOR 1000
+struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay,
+ int vdisplay, int vrefresh,
+ bool reduced, bool interlaced, bool margins)
+{
+ /* 1) top/bottom margin size (% of height) - default: 1.8, */
+#define CVT_MARGIN_PERCENTAGE 18
+ /* 2) character cell horizontal granularity (pixels) - default 8 */
+#define CVT_H_GRANULARITY 8
+ /* 3) Minimum vertical porch (lines) - default 3 */
+#define CVT_MIN_V_PORCH 3
+ /* 4) Minimum number of vertical back porch lines - default 6 */
+#define CVT_MIN_V_BPORCH 6
+ /* Pixel Clock step (kHz) */
+#define CVT_CLOCK_STEP 250
+ struct drm_display_mode *drm_mode;
+ unsigned int vfieldrate, hperiod;
+ int hdisplay_rnd, hmargin, vdisplay_rnd, vmargin, vsync;
+ int interlace;
+
+ /* allocate the drm_display_mode structure. If failure, we will
+ * return directly
+ */
+ drm_mode = drm_mode_create(dev);
+ if (!drm_mode)
+ return NULL;
+
+ /* the CVT default refresh rate is 60Hz */
+ if (!vrefresh)
+ vrefresh = 60;
+
+ /* the required field fresh rate */
+ if (interlaced)
+ vfieldrate = vrefresh * 2;
+ else
+ vfieldrate = vrefresh;
+
+ /* horizontal pixels */
+ hdisplay_rnd = hdisplay - (hdisplay % CVT_H_GRANULARITY);
+
+ /* determine the left&right borders */
+ hmargin = 0;
+ if (margins) {
+ hmargin = hdisplay_rnd * CVT_MARGIN_PERCENTAGE / 1000;
+ hmargin -= hmargin % CVT_H_GRANULARITY;
+ }
+ /* find the total active pixels */
+ drm_mode->hdisplay = hdisplay_rnd + 2 * hmargin;
+
+ /* find the number of lines per field */
+ if (interlaced)
+ vdisplay_rnd = vdisplay / 2;
+ else
+ vdisplay_rnd = vdisplay;
+
+ /* find the top & bottom borders */
+ vmargin = 0;
+ if (margins)
+ vmargin = vdisplay_rnd * CVT_MARGIN_PERCENTAGE / 1000;
+
+ drm_mode->vdisplay = vdisplay + 2 * vmargin;
+
+ /* Interlaced */
+ if (interlaced)
+ interlace = 1;
+ else
+ interlace = 0;
+
+ /* Determine VSync Width from aspect ratio */
+ if (!(vdisplay % 3) && ((vdisplay * 4 / 3) == hdisplay))
+ vsync = 4;
+ else if (!(vdisplay % 9) && ((vdisplay * 16 / 9) == hdisplay))
+ vsync = 5;
+ else if (!(vdisplay % 10) && ((vdisplay * 16 / 10) == hdisplay))
+ vsync = 6;
+ else if (!(vdisplay % 4) && ((vdisplay * 5 / 4) == hdisplay))
+ vsync = 7;
+ else if (!(vdisplay % 9) && ((vdisplay * 15 / 9) == hdisplay))
+ vsync = 7;
+ else /* custom */
+ vsync = 10;
+
+ if (!reduced) {
+ /* simplify the GTF calculation */
+ /* 4) Minimum time of vertical sync + back porch interval (µs)
+ * default 550.0
+ */
+ int tmp1, tmp2;
+#define CVT_MIN_VSYNC_BP 550
+ /* 3) Nominal HSync width (% of line period) - default 8 */
+#define CVT_HSYNC_PERCENTAGE 8
+ unsigned int hblank_percentage;
+ int vsyncandback_porch, vback_porch, hblank;
+
+ /* estimated the horizontal period */
+ tmp1 = HV_FACTOR * 1000000 -
+ CVT_MIN_VSYNC_BP * HV_FACTOR * vfieldrate;
+ tmp2 = (vdisplay_rnd + 2 * vmargin + CVT_MIN_V_PORCH) * 2 +
+ interlace;
+ hperiod = tmp1 * 2 / (tmp2 * vfieldrate);
+
+ tmp1 = CVT_MIN_VSYNC_BP * HV_FACTOR / hperiod + 1;
+ /* 9. Find number of lines in sync + backporch */
+ if (tmp1 < (vsync + CVT_MIN_V_PORCH))
+ vsyncandback_porch = vsync + CVT_MIN_V_PORCH;
+ else
+ vsyncandback_porch = tmp1;
+ /* 10. Find number of lines in back porch */
+ vback_porch = vsyncandback_porch - vsync;
+ drm_mode->vtotal = vdisplay_rnd + 2 * vmargin +
+ vsyncandback_porch + CVT_MIN_V_PORCH;
+ /* 5) Definition of Horizontal blanking time limitation */
+ /* Gradient (%/kHz) - default 600 */
+#define CVT_M_FACTOR 600
+ /* Offset (%) - default 40 */
+#define CVT_C_FACTOR 40
+ /* Blanking time scaling factor - default 128 */
+#define CVT_K_FACTOR 128
+ /* Scaling factor weighting - default 20 */
+#define CVT_J_FACTOR 20
+#define CVT_M_PRIME (CVT_M_FACTOR * CVT_K_FACTOR / 256)
+#define CVT_C_PRIME ((CVT_C_FACTOR - CVT_J_FACTOR) * CVT_K_FACTOR / 256 + \
+ CVT_J_FACTOR)
+ /* 12. Find ideal blanking duty cycle from formula */
+ hblank_percentage = CVT_C_PRIME * HV_FACTOR - CVT_M_PRIME *
+ hperiod / 1000;
+ /* 13. Blanking time */
+ if (hblank_percentage < 20 * HV_FACTOR)
+ hblank_percentage = 20 * HV_FACTOR;
+ hblank = drm_mode->hdisplay * hblank_percentage /
+ (100 * HV_FACTOR - hblank_percentage);
+ hblank -= hblank % (2 * CVT_H_GRANULARITY);
+ /* 14. find the total pixes per line */
+ drm_mode->htotal = drm_mode->hdisplay + hblank;
+ drm_mode->hsync_end = drm_mode->hdisplay + hblank / 2;
+ drm_mode->hsync_start = drm_mode->hsync_end -
+ (drm_mode->htotal * CVT_HSYNC_PERCENTAGE) / 100;
+ drm_mode->hsync_start += CVT_H_GRANULARITY -
+ drm_mode->hsync_start % CVT_H_GRANULARITY;
+ /* fill the Vsync values */
+ drm_mode->vsync_start = drm_mode->vdisplay + CVT_MIN_V_PORCH;
+ drm_mode->vsync_end = drm_mode->vsync_start + vsync;
+ } else {
+ /* Reduced blanking */
+ /* Minimum vertical blanking interval time (µs)- default 460 */
+#define CVT_RB_MIN_VBLANK 460
+ /* Fixed number of clocks for horizontal sync */
+#define CVT_RB_H_SYNC 32
+ /* Fixed number of clocks for horizontal blanking */
+#define CVT_RB_H_BLANK 160
+ /* Fixed number of lines for vertical front porch - default 3*/
+#define CVT_RB_VFPORCH 3
+ int vbilines;
+ int tmp1, tmp2;
+ /* 8. Estimate Horizontal period. */
+ tmp1 = HV_FACTOR * 1000000 -
+ CVT_RB_MIN_VBLANK * HV_FACTOR * vfieldrate;
+ tmp2 = vdisplay_rnd + 2 * vmargin;
+ hperiod = tmp1 / (tmp2 * vfieldrate);
+ /* 9. Find number of lines in vertical blanking */
+ vbilines = CVT_RB_MIN_VBLANK * HV_FACTOR / hperiod + 1;
+ /* 10. Check if vertical blanking is sufficient */
+ if (vbilines < (CVT_RB_VFPORCH + vsync + CVT_MIN_V_BPORCH))
+ vbilines = CVT_RB_VFPORCH + vsync + CVT_MIN_V_BPORCH;
+ /* 11. Find total number of lines in vertical field */
+ drm_mode->vtotal = vdisplay_rnd + 2 * vmargin + vbilines;
+ /* 12. Find total number of pixels in a line */
+ drm_mode->htotal = drm_mode->hdisplay + CVT_RB_H_BLANK;
+ /* Fill in HSync values */
+ drm_mode->hsync_end = drm_mode->hdisplay + CVT_RB_H_BLANK / 2;
+ drm_mode->hsync_start = drm_mode->hsync_end - CVT_RB_H_SYNC;
+ /* Fill in VSync values */
+ drm_mode->vsync_start = drm_mode->vdisplay + CVT_RB_VFPORCH;
+ drm_mode->vsync_end = drm_mode->vsync_start + vsync;
+ }
+ /* 15/13. Find pixel clock frequency (kHz for xf86) */
+ drm_mode->clock = drm_mode->htotal * HV_FACTOR * 1000 / hperiod;
+ drm_mode->clock -= drm_mode->clock % CVT_CLOCK_STEP;
+ /* 18/16. Find actual vertical frame frequency */
+ /* ignore - just set the mode flag for interlaced */
+ if (interlaced) {
+ drm_mode->vtotal *= 2;
+ drm_mode->flags |= DRM_MODE_FLAG_INTERLACE;
+ }
+ /* Fill the mode line name */
+ drm_mode_set_name(drm_mode);
+ if (reduced)
+ drm_mode->flags |= (DRM_MODE_FLAG_PHSYNC |
+ DRM_MODE_FLAG_NVSYNC);
+ else
+ drm_mode->flags |= (DRM_MODE_FLAG_PVSYNC |
+ DRM_MODE_FLAG_NHSYNC);
+
+ return drm_mode;
+}
+
+/**
+ * drm_gtf_mode_complex - create the modeline based on full GTF algorithm
+ *
+ * @dev :drm device
+ * @hdisplay :hdisplay size
+ * @vdisplay :vdisplay size
+ * @vrefresh :vrefresh rate.
+ * @interlaced :whether the interlace is supported
+ * @margins :desired margin size
+ * @GTF_[MCKJ] :extended GTF formula parameters
+ *
+ * LOCKING.
+ * none.
+ *
+ * return the modeline based on full GTF algorithm.
+ *
+ * GTF feature blocks specify C and J in multiples of 0.5, so we pass them
+ * in here multiplied by two. For a C of 40, pass in 80.
+ */
+struct drm_display_mode *
+drm_gtf_mode_complex(struct drm_device *dev, int hdisplay, int vdisplay,
+ int vrefresh, bool interlaced, int margins,
+ int GTF_M, int GTF_2C, int GTF_K, int GTF_2J)
+{ /* 1) top/bottom margin size (% of height) - default: 1.8, */
+#define GTF_MARGIN_PERCENTAGE 18
+ /* 2) character cell horizontal granularity (pixels) - default 8 */
+#define GTF_CELL_GRAN 8
+ /* 3) Minimum vertical porch (lines) - default 3 */
+#define GTF_MIN_V_PORCH 1
+ /* width of vsync in lines */
+#define V_SYNC_RQD 3
+ /* width of hsync as % of total line */
+#define H_SYNC_PERCENT 8
+ /* min time of vsync + back porch (microsec) */
+#define MIN_VSYNC_PLUS_BP 550
+ /* C' and M' are part of the Blanking Duty Cycle computation */
+#define GTF_C_PRIME ((((GTF_2C - GTF_2J) * GTF_K / 256) + GTF_2J) / 2)
+#define GTF_M_PRIME (GTF_K * GTF_M / 256)
+ struct drm_display_mode *drm_mode;
+ unsigned int hdisplay_rnd, vdisplay_rnd, vfieldrate_rqd;
+ int top_margin, bottom_margin;
+ int interlace;
+ unsigned int hfreq_est;
+ int vsync_plus_bp, vback_porch;
+ unsigned int vtotal_lines, vfieldrate_est, hperiod;
+ unsigned int vfield_rate, vframe_rate;
+ int left_margin, right_margin;
+ unsigned int total_active_pixels, ideal_duty_cycle;
+ unsigned int hblank, total_pixels, pixel_freq;
+ int hsync, hfront_porch, vodd_front_porch_lines;
+ unsigned int tmp1, tmp2;
+
+ drm_mode = drm_mode_create(dev);
+ if (!drm_mode)
+ return NULL;
+
+ /* 1. In order to give correct results, the number of horizontal
+ * pixels requested is first processed to ensure that it is divisible
+ * by the character size, by rounding it to the nearest character
+ * cell boundary:
+ */
+ hdisplay_rnd = (hdisplay + GTF_CELL_GRAN / 2) / GTF_CELL_GRAN;
+ hdisplay_rnd = hdisplay_rnd * GTF_CELL_GRAN;
+
+ /* 2. If interlace is requested, the number of vertical lines assumed
+ * by the calculation must be halved, as the computation calculates
+ * the number of vertical lines per field.
+ */
+ if (interlaced)
+ vdisplay_rnd = vdisplay / 2;
+ else
+ vdisplay_rnd = vdisplay;
+
+ /* 3. Find the frame rate required: */
+ if (interlaced)
+ vfieldrate_rqd = vrefresh * 2;
+ else
+ vfieldrate_rqd = vrefresh;
+
+ /* 4. Find number of lines in Top margin: */
+ top_margin = 0;
+ if (margins)
+ top_margin = (vdisplay_rnd * GTF_MARGIN_PERCENTAGE + 500) /
+ 1000;
+ /* 5. Find number of lines in bottom margin: */
+ bottom_margin = top_margin;
+
+ /* 6. If interlace is required, then set variable interlace: */
+ if (interlaced)
+ interlace = 1;
+ else
+ interlace = 0;
+
+ /* 7. Estimate the Horizontal frequency */
+ {
+ tmp1 = (1000000 - MIN_VSYNC_PLUS_BP * vfieldrate_rqd) / 500;
+ tmp2 = (vdisplay_rnd + 2 * top_margin + GTF_MIN_V_PORCH) *
+ 2 + interlace;
+ hfreq_est = (tmp2 * 1000 * vfieldrate_rqd) / tmp1;
+ }
+
+ /* 8. Find the number of lines in V sync + back porch */
+ /* [V SYNC+BP] = RINT(([MIN VSYNC+BP] * hfreq_est / 1000000)) */
+ vsync_plus_bp = MIN_VSYNC_PLUS_BP * hfreq_est / 1000;
+ vsync_plus_bp = (vsync_plus_bp + 500) / 1000;
+ /* 9. Find the number of lines in V back porch alone: */
+ vback_porch = vsync_plus_bp - V_SYNC_RQD;
+ /* 10. Find the total number of lines in Vertical field period: */
+ vtotal_lines = vdisplay_rnd + top_margin + bottom_margin +
+ vsync_plus_bp + GTF_MIN_V_PORCH;
+ /* 11. Estimate the Vertical field frequency: */
+ vfieldrate_est = hfreq_est / vtotal_lines;
+ /* 12. Find the actual horizontal period: */
+ hperiod = 1000000 / (vfieldrate_rqd * vtotal_lines);
+
+ /* 13. Find the actual Vertical field frequency: */
+ vfield_rate = hfreq_est / vtotal_lines;
+ /* 14. Find the Vertical frame frequency: */
+ if (interlaced)
+ vframe_rate = vfield_rate / 2;
+ else
+ vframe_rate = vfield_rate;
+ /* 15. Find number of pixels in left margin: */
+ if (margins)
+ left_margin = (hdisplay_rnd * GTF_MARGIN_PERCENTAGE + 500) /
+ 1000;
+ else
+ left_margin = 0;
+
+ /* 16.Find number of pixels in right margin: */
+ right_margin = left_margin;
+ /* 17.Find total number of active pixels in image and left and right */
+ total_active_pixels = hdisplay_rnd + left_margin + right_margin;
+ /* 18.Find the ideal blanking duty cycle from blanking duty cycle */
+ ideal_duty_cycle = GTF_C_PRIME * 1000 -
+ (GTF_M_PRIME * 1000000 / hfreq_est);
+ /* 19.Find the number of pixels in the blanking time to the nearest
+ * double character cell: */
+ hblank = total_active_pixels * ideal_duty_cycle /
+ (100000 - ideal_duty_cycle);
+ hblank = (hblank + GTF_CELL_GRAN) / (2 * GTF_CELL_GRAN);
+ hblank = hblank * 2 * GTF_CELL_GRAN;
+ /* 20.Find total number of pixels: */
+ total_pixels = total_active_pixels + hblank;
+ /* 21.Find pixel clock frequency: */
+ pixel_freq = total_pixels * hfreq_est / 1000;
+ /* Stage 1 computations are now complete; I should really pass
+ * the results to another function and do the Stage 2 computations,
+ * but I only need a few more values so I'll just append the
+ * computations here for now */
+ /* 17. Find the number of pixels in the horizontal sync period: */
+ hsync = H_SYNC_PERCENT * total_pixels / 100;
+ hsync = (hsync + GTF_CELL_GRAN / 2) / GTF_CELL_GRAN;
+ hsync = hsync * GTF_CELL_GRAN;
+ /* 18. Find the number of pixels in horizontal front porch period */
+ hfront_porch = hblank / 2 - hsync;
+ /* 36. Find the number of lines in the odd front porch period: */
+ vodd_front_porch_lines = GTF_MIN_V_PORCH ;
+
+ /* finally, pack the results in the mode struct */
+ drm_mode->hdisplay = hdisplay_rnd;
+ drm_mode->hsync_start = hdisplay_rnd + hfront_porch;
+ drm_mode->hsync_end = drm_mode->hsync_start + hsync;
+ drm_mode->htotal = total_pixels;
+ drm_mode->vdisplay = vdisplay_rnd;
+ drm_mode->vsync_start = vdisplay_rnd + vodd_front_porch_lines;
+ drm_mode->vsync_end = drm_mode->vsync_start + V_SYNC_RQD;
+ drm_mode->vtotal = vtotal_lines;
+
+ drm_mode->clock = pixel_freq;
+
+ if (interlaced) {
+ drm_mode->vtotal *= 2;
+ drm_mode->flags |= DRM_MODE_FLAG_INTERLACE;
+ }
+
+ drm_mode_set_name(drm_mode);
+ if (GTF_M == 600 && GTF_2C == 80 && GTF_K == 128 && GTF_2J == 40)
+ drm_mode->flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC;
+ else
+ drm_mode->flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC;
+
+ return drm_mode;
+}
+
+/**
+ * drm_gtf_mode - create the modeline based on GTF algorithm
+ *
+ * @dev :drm device
+ * @hdisplay :hdisplay size
+ * @vdisplay :vdisplay size
+ * @vrefresh :vrefresh rate.
+ * @interlaced :whether the interlace is supported
+ * @margins :whether the margin is supported
+ *
+ * LOCKING.
+ * none.
+ *
+ * return the modeline based on GTF algorithm
+ *
+ * This function is to create the modeline based on the GTF algorithm.
+ * Generalized Timing Formula is derived from:
+ * GTF Spreadsheet by Andy Morrish (1/5/97)
+ * available at http://www.vesa.org
+ *
+ * And it is copied from the file of xserver/hw/xfree86/modes/xf86gtf.c.
+ * What I have done is to translate it by using integer calculation.
+ * I also refer to the function of fb_get_mode in the file of
+ * drivers/video/fbmon.c
+ *
+ * Standard GTF parameters:
+ * M = 600
+ * C = 40
+ * K = 128
+ * J = 20
+ */
+struct drm_display_mode *
+drm_gtf_mode(struct drm_device *dev, int hdisplay, int vdisplay, int vrefresh,
+ bool lace, int margins)
+{
+ return drm_gtf_mode_complex(dev, hdisplay, vdisplay, vrefresh, lace,
+ margins, 600, 40 * 2, 128, 20 * 2);
+}
+
+/**
+ * drm_mode_set_name - set the name on a mode
+ * @mode: name will be set in this mode
+ *
+ * LOCKING:
+ * None.
+ *
+ * Set the name of @mode to a standard format.
+ */
+void drm_mode_set_name(struct drm_display_mode *mode)
+{
+ bool interlaced = !!(mode->flags & DRM_MODE_FLAG_INTERLACE);
+
+ snprintf(mode->name, DRM_DISPLAY_MODE_LEN, "%dx%d%s",
+ mode->hdisplay, mode->vdisplay,
+ interlaced ? "i" : "");
+}
+
+/**
+ * drm_mode_list_concat - move modes from one list to another
+ * @head: source list
+ * @new: dst list
+ *
+ * LOCKING:
+ * Caller must ensure both lists are locked.
+ *
+ * Move all the modes from @head to @new.
+ */
+void drm_mode_list_concat(struct list_head *head, struct list_head *new)
+{
+
+ struct list_head *entry, *tmp;
+
+ list_for_each_safe(entry, tmp, head) {
+ list_move_tail(entry, new);
+ }
+}
+
+/**
+ * drm_mode_width - get the width of a mode
+ * @mode: mode
+ *
+ * LOCKING:
+ * None.
+ *
+ * Return @mode's width (hdisplay) value.
+ *
+ * FIXME: is this needed?
+ *
+ * RETURNS:
+ * @mode->hdisplay
+ */
+int drm_mode_width(struct drm_display_mode *mode)
+{
+ return mode->hdisplay;
+
+}
+
+/**
+ * drm_mode_height - get the height of a mode
+ * @mode: mode
+ *
+ * LOCKING:
+ * None.
+ *
+ * Return @mode's height (vdisplay) value.
+ *
+ * FIXME: is this needed?
+ *
+ * RETURNS:
+ * @mode->vdisplay
+ */
+int drm_mode_height(struct drm_display_mode *mode)
+{
+ return mode->vdisplay;
+}
+
+/** drm_mode_hsync - get the hsync of a mode
+ * @mode: mode
+ *
+ * LOCKING:
+ * None.
+ *
+ * Return @modes's hsync rate in kHz, rounded to the nearest int.
+ */
+int drm_mode_hsync(const struct drm_display_mode *mode)
+{
+ unsigned int calc_val;
+
+ if (mode->hsync)
+ return mode->hsync;
+
+ if (mode->htotal < 0)
+ return 0;
+
+ calc_val = (mode->clock * 1000) / mode->htotal; /* hsync in Hz */
+ calc_val += 500; /* round to 1000Hz */
+ calc_val /= 1000; /* truncate to kHz */
+
+ return calc_val;
+}
+
+/**
+ * drm_mode_vrefresh - get the vrefresh of a mode
+ * @mode: mode
+ *
+ * LOCKING:
+ * None.
+ *
+ * Return @mode's vrefresh rate in Hz or calculate it if necessary.
+ *
+ * FIXME: why is this needed? shouldn't vrefresh be set already?
+ *
+ * RETURNS:
+ * Vertical refresh rate. It will be the result of actual value plus 0.5.
+ * If it is 70.288, it will return 70Hz.
+ * If it is 59.6, it will return 60Hz.
+ */
+int drm_mode_vrefresh(const struct drm_display_mode *mode)
+{
+ int refresh = 0;
+ unsigned int calc_val;
+
+ if (mode->vrefresh > 0)
+ refresh = mode->vrefresh;
+ else if (mode->htotal > 0 && mode->vtotal > 0) {
+ int vtotal;
+ vtotal = mode->vtotal;
+ /* work out vrefresh the value will be x1000 */
+ calc_val = (mode->clock * 1000);
+ calc_val /= mode->htotal;
+ refresh = (calc_val + vtotal / 2) / vtotal;
+
+ if (mode->flags & DRM_MODE_FLAG_INTERLACE)
+ refresh *= 2;
+ if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
+ refresh /= 2;
+ if (mode->vscan > 1)
+ refresh /= mode->vscan;
+ }
+ return refresh;
+}
+
+/**
+ * drm_mode_set_crtcinfo - set CRTC modesetting parameters
+ * @p: mode
+ * @adjust_flags: unused? (FIXME)
+ *
+ * LOCKING:
+ * None.
+ *
+ * Setup the CRTC modesetting parameters for @p, adjusting if necessary.
+ */
+void drm_mode_set_crtcinfo(struct drm_display_mode *p, int adjust_flags)
+{
+ if ((p == NULL) || ((p->type & DRM_MODE_TYPE_CRTC_C) == DRM_MODE_TYPE_BUILTIN))
+ return;
+
+ p->crtc_hdisplay = p->hdisplay;
+ p->crtc_hsync_start = p->hsync_start;
+ p->crtc_hsync_end = p->hsync_end;
+ p->crtc_htotal = p->htotal;
+ p->crtc_hskew = p->hskew;
+ p->crtc_vdisplay = p->vdisplay;
+ p->crtc_vsync_start = p->vsync_start;
+ p->crtc_vsync_end = p->vsync_end;
+ p->crtc_vtotal = p->vtotal;
+
+ if (p->flags & DRM_MODE_FLAG_INTERLACE) {
+ if (adjust_flags & CRTC_INTERLACE_HALVE_V) {
+ p->crtc_vdisplay /= 2;
+ p->crtc_vsync_start /= 2;
+ p->crtc_vsync_end /= 2;
+ p->crtc_vtotal /= 2;
+ }
+
+ p->crtc_vtotal |= 1;
+ }
+
+ if (p->flags & DRM_MODE_FLAG_DBLSCAN) {
+ p->crtc_vdisplay *= 2;
+ p->crtc_vsync_start *= 2;
+ p->crtc_vsync_end *= 2;
+ p->crtc_vtotal *= 2;
+ }
+
+ if (p->vscan > 1) {
+ p->crtc_vdisplay *= p->vscan;
+ p->crtc_vsync_start *= p->vscan;
+ p->crtc_vsync_end *= p->vscan;
+ p->crtc_vtotal *= p->vscan;
+ }
+
+ p->crtc_vblank_start = min(p->crtc_vsync_start, p->crtc_vdisplay);
+ p->crtc_vblank_end = max(p->crtc_vsync_end, p->crtc_vtotal);
+ p->crtc_hblank_start = min(p->crtc_hsync_start, p->crtc_hdisplay);
+ p->crtc_hblank_end = max(p->crtc_hsync_end, p->crtc_htotal);
+
+ p->crtc_hadjusted = false;
+ p->crtc_vadjusted = false;
+}
+
+
+/**
+ * drm_mode_duplicate - allocate and duplicate an existing mode
+ * @m: mode to duplicate
+ *
+ * LOCKING:
+ * None.
+ *
+ * Just allocate a new mode, copy the existing mode into it, and return
+ * a pointer to it. Used to create new instances of established modes.
+ */
+struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
+ const struct drm_display_mode *mode)
+{
+ struct drm_display_mode *nmode;
+ int new_id;
+
+ nmode = drm_mode_create(dev);
+ if (!nmode)
+ return NULL;
+
+ new_id = nmode->base.id;
+ *nmode = *mode;
+ nmode->base.id = new_id;
+ INIT_LIST_HEAD(&nmode->head);
+ return nmode;
+}
+
+/**
+ * drm_mode_equal - test modes for equality
+ * @mode1: first mode
+ * @mode2: second mode
+ *
+ * LOCKING:
+ * None.
+ *
+ * Check to see if @mode1 and @mode2 are equivalent.
+ *
+ * RETURNS:
+ * true if the modes are equal, false otherwise.
+ */
+bool drm_mode_equal(struct drm_display_mode *mode1, struct drm_display_mode *mode2)
+{
+ /* do clock check convert to PICOS so fb modes get matched
+ * the same */
+ if (mode1->clock && mode2->clock) {
+ if (KHZ2PICOS(mode1->clock) != KHZ2PICOS(mode2->clock))
+ return false;
+ } else if (mode1->clock != mode2->clock)
+ return false;
+
+ if (mode1->hdisplay == mode2->hdisplay &&
+ mode1->hsync_start == mode2->hsync_start &&
+ mode1->hsync_end == mode2->hsync_end &&
+ mode1->htotal == mode2->htotal &&
+ mode1->hskew == mode2->hskew &&
+ mode1->vdisplay == mode2->vdisplay &&
+ mode1->vsync_start == mode2->vsync_start &&
+ mode1->vsync_end == mode2->vsync_end &&
+ mode1->vtotal == mode2->vtotal &&
+ mode1->vscan == mode2->vscan &&
+ mode1->flags == mode2->flags)
+ return true;
+
+ return false;
+}
+
+/**
+ * drm_mode_validate_size - make sure modes adhere to size constraints
+ * @dev: DRM device
+ * @mode_list: list of modes to check
+ * @maxX: maximum width
+ * @maxY: maximum height
+ * @maxPitch: max pitch
+ *
+ * LOCKING:
+ * Caller must hold a lock protecting @mode_list.
+ *
+ * The DRM device (@dev) has size and pitch limits. Here we validate the
+ * modes we probed for @dev against those limits and set their status as
+ * necessary.
+ */
+void drm_mode_validate_size(struct drm_device *dev,
+ struct list_head *mode_list,
+ int maxX, int maxY, int maxPitch)
+{
+ struct drm_display_mode *mode;
+
+ list_for_each_entry(mode, mode_list, head) {
+ if (maxPitch > 0 && mode->hdisplay > maxPitch)
+ mode->status = MODE_BAD_WIDTH;
+
+ if (maxX > 0 && mode->hdisplay > maxX)
+ mode->status = MODE_VIRTUAL_X;
+
+ if (maxY > 0 && mode->vdisplay > maxY)
+ mode->status = MODE_VIRTUAL_Y;
+ }
+}
+
+/**
+ * drm_mode_validate_clocks - validate modes against clock limits
+ * @dev: DRM device
+ * @mode_list: list of modes to check
+ * @min: minimum clock rate array
+ * @max: maximum clock rate array
+ * @n_ranges: number of clock ranges (size of arrays)
+ *
+ * LOCKING:
+ * Caller must hold a lock protecting @mode_list.
+ *
+ * Some code may need to check a mode list against the clock limits of the
+ * device in question. This function walks the mode list, testing to make
+ * sure each mode falls within a given range (defined by @min and @max
+ * arrays) and sets @mode->status as needed.
+ */
+void drm_mode_validate_clocks(struct drm_device *dev,
+ struct list_head *mode_list,
+ int *min, int *max, int n_ranges)
+{
+ struct drm_display_mode *mode;
+ int i;
+
+ list_for_each_entry(mode, mode_list, head) {
+ bool good = false;
+ for (i = 0; i < n_ranges; i++) {
+ if (mode->clock >= min[i] && mode->clock <= max[i]) {
+ good = true;
+ break;
+ }
+ }
+ if (!good)
+ mode->status = MODE_CLOCK_RANGE;
+ }
+}
+
+/**
+ * drm_mode_prune_invalid - remove invalid modes from mode list
+ * @dev: DRM device
+ * @mode_list: list of modes to check
+ * @verbose: be verbose about it
+ *
+ * LOCKING:
+ * Caller must hold a lock protecting @mode_list.
+ *
+ * Once mode list generation is complete, a caller can use this routine to
+ * remove invalid modes from a mode list. If any of the modes have a
+ * status other than %MODE_OK, they are removed from @mode_list and freed.
+ */
+void drm_mode_prune_invalid(struct drm_device *dev,
+ struct list_head *mode_list, bool verbose)
+{
+ struct drm_display_mode *mode, *t;
+
+ list_for_each_entry_safe(mode, t, mode_list, head) {
+ if (mode->status != MODE_OK) {
+ list_del(&mode->head);
+ if (verbose) {
+ drm_mode_debug_printmodeline(mode);
+ DRM_DEBUG_KMS("Not using %s mode %d\n",
+ mode->name, mode->status);
+ }
+ drm_mode_destroy(dev, mode);
+ }
+ }
+}
+
+/**
+ * drm_mode_compare - compare modes for favorability
+ * @priv: unused
+ * @lh_a: list_head for first mode
+ * @lh_b: list_head for second mode
+ *
+ * LOCKING:
+ * None.
+ *
+ * Compare two modes, given by @lh_a and @lh_b, returning a value indicating
+ * which is better.
+ *
+ * RETURNS:
+ * Negative if @lh_a is better than @lh_b, zero if they're equivalent, or
+ * positive if @lh_b is better than @lh_a.
+ */
+static int drm_mode_compare(void *priv, struct list_head *lh_a, struct list_head *lh_b)
+{
+ struct drm_display_mode *a = list_entry(lh_a, struct drm_display_mode, head);
+ struct drm_display_mode *b = list_entry(lh_b, struct drm_display_mode, head);
+ int diff;
+
+ diff = ((b->type & DRM_MODE_TYPE_PREFERRED) != 0) -
+ ((a->type & DRM_MODE_TYPE_PREFERRED) != 0);
+ if (diff)
+ return diff;
+ diff = b->hdisplay * b->vdisplay - a->hdisplay * a->vdisplay;
+ if (diff)
+ return diff;
+ diff = b->clock - a->clock;
+ return diff;
+}
+
+/**
+ * drm_mode_sort - sort mode list
+ * @mode_list: list to sort
+ *
+ * LOCKING:
+ * Caller must hold a lock protecting @mode_list.
+ *
+ * Sort @mode_list by favorability, putting good modes first.
+ */
+void drm_mode_sort(struct list_head *mode_list)
+{
+ drm_list_sort(NULL, mode_list, drm_mode_compare);
+}
+
+/**
+ * drm_mode_connector_list_update - update the mode list for the connector
+ * @connector: the connector to update
+ *
+ * LOCKING:
+ * Caller must hold a lock protecting @mode_list.
+ *
+ * This moves the modes from the @connector probed_modes list
+ * to the actual mode list. It compares the probed mode against the current
+ * list and only adds different modes. All modes unverified after this point
+ * will be removed by the prune invalid modes.
+ */
+void drm_mode_connector_list_update(struct drm_connector *connector)
+{
+ struct drm_display_mode *mode;
+ struct drm_display_mode *pmode, *pt;
+ int found_it;
+
+ list_for_each_entry_safe(pmode, pt, &connector->probed_modes,
+ head) {
+ found_it = 0;
+ /* go through current modes checking for the new probed mode */
+ list_for_each_entry(mode, &connector->modes, head) {
+ if (drm_mode_equal(pmode, mode)) {
+ found_it = 1;
+ /* if equal delete the probed mode */
+ mode->status = pmode->status;
+ /* Merge type bits together */
+ mode->type |= pmode->type;
+ list_del(&pmode->head);
+ drm_mode_destroy(connector->dev, pmode);
+ break;
+ }
+ }
+
+ if (!found_it) {
+ list_move_tail(&pmode->head, &connector->modes);
+ }
+ }
+}
+
+/**
+ * drm_mode_parse_command_line_for_connector - parse command line for connector
+ * @mode_option - per connector mode option
+ * @connector - connector to parse line for
+ *
+ * This parses the connector specific then generic command lines for
+ * modes and options to configure the connector.
+ *
+ * This uses the same parameters as the fb modedb.c, except for extra
+ * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
+ *
+ * enable/enable Digital/disable bit at the end
+ */
+bool drm_mode_parse_command_line_for_connector(const char *mode_option,
+ struct drm_connector *connector,
+ struct drm_cmdline_mode *mode)
+{
+ const char *name;
+ unsigned int namelen;
+ bool res_specified = false, bpp_specified = false, refresh_specified = false;
+ unsigned int xres = 0, yres = 0, bpp = 32, refresh = 0;
+ bool yres_specified = false, cvt = false, rb = false;
+ bool interlace = false, margins = false, was_digit = false;
+ int i;
+ enum drm_connector_force force = DRM_FORCE_UNSPECIFIED;
+
+#ifdef XXX_CONFIG_FB
+ if (!mode_option)
+ mode_option = fb_mode_option;
+#endif
+
+ if (!mode_option) {
+ mode->specified = false;
+ return false;
+ }
+
+ name = mode_option;
+ namelen = strlen(name);
+ for (i = namelen-1; i >= 0; i--) {
+ switch (name[i]) {
+ case '@':
+ if (!refresh_specified && !bpp_specified &&
+ !yres_specified && !cvt && !rb && was_digit) {
+ refresh = strtol(&name[i+1], NULL, 10);
+ refresh_specified = true;
+ was_digit = false;
+ } else
+ goto done;
+ break;
+ case '-':
+ if (!bpp_specified && !yres_specified && !cvt &&
+ !rb && was_digit) {
+ bpp = strtol(&name[i+1], NULL, 10);
+ bpp_specified = true;
+ was_digit = false;
+ } else
+ goto done;
+ break;
+ case 'x':
+ if (!yres_specified && was_digit) {
+ yres = strtol(&name[i+1], NULL, 10);
+ yres_specified = true;
+ was_digit = false;
+ } else
+ goto done;
+ case '0' ... '9':
+ was_digit = true;
+ break;
+ case 'M':
+ if (yres_specified || cvt || was_digit)
+ goto done;
+ cvt = true;
+ break;
+ case 'R':
+ if (yres_specified || cvt || rb || was_digit)
+ goto done;
+ rb = true;
+ break;
+ case 'm':
+ if (cvt || yres_specified || was_digit)
+ goto done;
+ margins = true;
+ break;
+ case 'i':
+ if (cvt || yres_specified || was_digit)
+ goto done;
+ interlace = true;
+ break;
+ case 'e':
+ if (yres_specified || bpp_specified || refresh_specified ||
+ was_digit || (force != DRM_FORCE_UNSPECIFIED))
+ goto done;
+
+ force = DRM_FORCE_ON;
+ break;
+ case 'D':
+ if (yres_specified || bpp_specified || refresh_specified ||
+ was_digit || (force != DRM_FORCE_UNSPECIFIED))
+ goto done;
+
+ if ((connector->connector_type != DRM_MODE_CONNECTOR_DVII) &&
+ (connector->connector_type != DRM_MODE_CONNECTOR_HDMIB))
+ force = DRM_FORCE_ON;
+ else
+ force = DRM_FORCE_ON_DIGITAL;
+ break;
+ case 'd':
+ if (yres_specified || bpp_specified || refresh_specified ||
+ was_digit || (force != DRM_FORCE_UNSPECIFIED))
+ goto done;
+
+ force = DRM_FORCE_OFF;
+ break;
+ default:
+ goto done;
+ }
+ }
+
+ if (i < 0 && yres_specified) {
+ char *ch;
+ xres = strtol(name, &ch, 10);
+ if ((ch != NULL) && (*ch == 'x'))
+ res_specified = true;
+ else
+ i = ch - name;
+ } else if (!yres_specified && was_digit) {
+ /* catch mode that begins with digits but has no 'x' */
+ i = 0;
+ }
+done:
+ if (i >= 0) {
+ printf("parse error at position %i in video mode '%s'\n",
+ i, name);
+ mode->specified = false;
+ return false;
+ }
+
+ if (res_specified) {
+ mode->specified = true;
+ mode->xres = xres;
+ mode->yres = yres;
+ }
+
+ if (refresh_specified) {
+ mode->refresh_specified = true;
+ mode->refresh = refresh;
+ }
+
+ if (bpp_specified) {
+ mode->bpp_specified = true;
+ mode->bpp = bpp;
+ }
+ mode->rb = rb;
+ mode->cvt = cvt;
+ mode->interlace = interlace;
+ mode->margins = margins;
+ mode->force = force;
+
+ return true;
+}
+
+struct drm_display_mode *
+drm_mode_create_from_cmdline_mode(struct drm_device *dev,
+ struct drm_cmdline_mode *cmd)
+{
+ struct drm_display_mode *mode;
+
+ if (cmd->cvt)
+ mode = drm_cvt_mode(dev,
+ cmd->xres, cmd->yres,
+ cmd->refresh_specified ? cmd->refresh : 60,
+ cmd->rb, cmd->interlace,
+ cmd->margins);
+ else
+ mode = drm_gtf_mode(dev,
+ cmd->xres, cmd->yres,
+ cmd->refresh_specified ? cmd->refresh : 60,
+ cmd->interlace,
+ cmd->margins);
+ if (!mode)
+ return NULL;
+
+ drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
+ return mode;
+}
diff --git a/sys/dev/drm2/drm_pci.c b/sys/dev/drm2/drm_pci.c
new file mode 100644
index 000000000000..3d7a3cc7feb3
--- /dev/null
+++ b/sys/dev/drm2/drm_pci.c
@@ -0,0 +1,125 @@
+/*-
+ * Copyright 2003 Eric Anholt.
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHOR 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/**
+ * \file drm_pci.h
+ * \brief PCI consistent, DMA-accessible memory allocation.
+ *
+ * \author Eric Anholt <anholt@FreeBSD.org>
+ */
+
+#include <dev/drm2/drmP.h>
+
+/**********************************************************************/
+/** \name PCI memory */
+/*@{*/
+
+static void
+drm_pci_busdma_callback(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
+{
+ drm_dma_handle_t *dmah = arg;
+
+ if (error != 0)
+ return;
+
+ KASSERT(nsegs == 1, ("drm_pci_busdma_callback: bad dma segment count"));
+ dmah->busaddr = segs[0].ds_addr;
+}
+
+/**
+ * \brief Allocate a physically contiguous DMA-accessible consistent
+ * memory block.
+ */
+drm_dma_handle_t *
+drm_pci_alloc(struct drm_device *dev, size_t size,
+ size_t align, dma_addr_t maxaddr)
+{
+ drm_dma_handle_t *dmah;
+ int ret;
+
+ /* Need power-of-two alignment, so fail the allocation if it isn't. */
+ if ((align & (align - 1)) != 0) {
+ DRM_ERROR("drm_pci_alloc with non-power-of-two alignment %d\n",
+ (int)align);
+ return NULL;
+ }
+
+ dmah = malloc(sizeof(drm_dma_handle_t), DRM_MEM_DMA, M_ZERO | M_NOWAIT);
+ if (dmah == NULL)
+ return NULL;
+
+ /* Make sure we aren't holding mutexes here */
+ mtx_assert(&dev->dma_lock, MA_NOTOWNED);
+ if (mtx_owned(&dev->dma_lock))
+ DRM_ERROR("called while holding dma_lock\n");
+
+ ret = bus_dma_tag_create(NULL, align, 0, /* tag, align, boundary */
+ maxaddr, BUS_SPACE_MAXADDR, /* lowaddr, highaddr */
+ NULL, NULL, /* filtfunc, filtfuncargs */
+ size, 1, size, /* maxsize, nsegs, maxsegsize */
+ 0, NULL, NULL, /* flags, lockfunc, lockfuncargs */
+ &dmah->tag);
+ if (ret != 0) {
+ free(dmah, DRM_MEM_DMA);
+ return NULL;
+ }
+
+ ret = bus_dmamem_alloc(dmah->tag, &dmah->vaddr,
+ BUS_DMA_WAITOK | BUS_DMA_ZERO | BUS_DMA_NOCACHE, &dmah->map);
+ if (ret != 0) {
+ bus_dma_tag_destroy(dmah->tag);
+ free(dmah, DRM_MEM_DMA);
+ return NULL;
+ }
+
+ ret = bus_dmamap_load(dmah->tag, dmah->map, dmah->vaddr, size,
+ drm_pci_busdma_callback, dmah, BUS_DMA_NOWAIT);
+ if (ret != 0) {
+ bus_dmamem_free(dmah->tag, dmah->vaddr, dmah->map);
+ bus_dma_tag_destroy(dmah->tag);
+ free(dmah, DRM_MEM_DMA);
+ return NULL;
+ }
+
+ return dmah;
+}
+
+/**
+ * \brief Free a DMA-accessible consistent memory block.
+ */
+void
+drm_pci_free(struct drm_device *dev, drm_dma_handle_t *dmah)
+{
+ if (dmah == NULL)
+ return;
+
+ bus_dmamem_free(dmah->tag, dmah->vaddr, dmah->map);
+ bus_dma_tag_destroy(dmah->tag);
+
+ free(dmah, DRM_MEM_DMA);
+}
+
+/*@}*/
diff --git a/sys/dev/drm2/drm_pciids.h b/sys/dev/drm2/drm_pciids.h
new file mode 100644
index 000000000000..fbabb6312323
--- /dev/null
+++ b/sys/dev/drm2/drm_pciids.h
@@ -0,0 +1,764 @@
+/*
+ * $FreeBSD$
+ */
+/*
+ This file is auto-generated from the drm_pciids.txt in the DRM CVS
+ Please contact dri-devel@lists.sf.net to add new cards to this list
+*/
+#define radeon_PCI_IDS \
+ {0x1002, 0x3150, CHIP_RV380|RADEON_IS_MOBILITY, "ATI Radeon Mobility X600 M24"}, \
+ {0x1002, 0x3152, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Radeon Mobility X300 M24"}, \
+ {0x1002, 0x3154, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI FireGL M24 GL"}, \
+ {0x1002, 0x3E50, CHIP_RV380|RADEON_NEW_MEMMAP, "ATI Radeon RV380 X600"}, \
+ {0x1002, 0x3E54, CHIP_RV380|RADEON_NEW_MEMMAP, "ATI FireGL V3200 RV380"}, \
+ {0x1002, 0x4136, CHIP_RS100|RADEON_IS_IGP, "ATI Radeon RS100 IGP 320"}, \
+ {0x1002, 0x4137, CHIP_RS200|RADEON_IS_IGP, "ATI Radeon RS200 IGP 340"}, \
+ {0x1002, 0x4144, CHIP_R300, "ATI Radeon AD 9500"}, \
+ {0x1002, 0x4145, CHIP_R300, "ATI Radeon AE 9700 Pro"}, \
+ {0x1002, 0x4146, CHIP_R300, "ATI Radeon AF R300 9600TX"}, \
+ {0x1002, 0x4147, CHIP_R300, "ATI FireGL AG Z1"}, \
+ {0x1002, 0x4148, CHIP_R350, "ATI Radeon AH 9800 SE"}, \
+ {0x1002, 0x4149, CHIP_R350, "ATI Radeon AI 9800"}, \
+ {0x1002, 0x414A, CHIP_R350, "ATI Radeon AJ 9800"}, \
+ {0x1002, 0x414B, CHIP_R350, "ATI FireGL AK X2"}, \
+ {0x1002, 0x4150, CHIP_RV350, "ATI Radeon AP 9600"}, \
+ {0x1002, 0x4151, CHIP_RV350, "ATI Radeon AQ 9600 SE"}, \
+ {0x1002, 0x4152, CHIP_RV350, "ATI Radeon AR 9600 XT"}, \
+ {0x1002, 0x4153, CHIP_RV350, "ATI Radeon AS 9550"}, \
+ {0x1002, 0x4154, CHIP_RV350, "ATI FireGL AT T2"}, \
+ {0x1002, 0x4155, CHIP_RV350, "ATI Radeon 9650"}, \
+ {0x1002, 0x4156, CHIP_RV350, "ATI FireGL AV RV360 T2"}, \
+ {0x1002, 0x4237, CHIP_RS200|RADEON_IS_IGP, "ATI Radeon RS250 IGP"}, \
+ {0x1002, 0x4242, CHIP_R200, "ATI Radeon BB R200 AIW 8500DV"}, \
+ {0x1002, 0x4243, CHIP_R200, "ATI Radeon BC R200"}, \
+ {0x1002, 0x4336, CHIP_RS100|RADEON_IS_IGP|RADEON_IS_MOBILITY, "ATI Radeon RS100 Mobility U1"}, \
+ {0x1002, 0x4337, CHIP_RS200|RADEON_IS_IGP|RADEON_IS_MOBILITY, "ATI Radeon RS200 Mobility IGP 340M"}, \
+ {0x1002, 0x4437, CHIP_RS200|RADEON_IS_IGP|RADEON_IS_MOBILITY, "ATI Radeon RS250 Mobility IGP"}, \
+ {0x1002, 0x4966, CHIP_RV250, "ATI Radeon If RV250 9000"}, \
+ {0x1002, 0x4967, CHIP_RV250, "ATI Radeon Ig RV250 9000"}, \
+ {0x1002, 0x4A48, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon JH R420 X800"}, \
+ {0x1002, 0x4A49, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon JI R420 X800 Pro"}, \
+ {0x1002, 0x4A4A, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon JJ R420 X800 SE"}, \
+ {0x1002, 0x4A4B, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon JK R420 X800 XT"}, \
+ {0x1002, 0x4A4C, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon JL R420 X800"}, \
+ {0x1002, 0x4A4D, CHIP_R420|RADEON_NEW_MEMMAP, "ATI FireGL JM X3-256"}, \
+ {0x1002, 0x4A4E, CHIP_R420|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Radeon JN R420 Mobility M18"}, \
+ {0x1002, 0x4A4F, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon JO R420 X800 SE"}, \
+ {0x1002, 0x4A50, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon JP R420 X800 XT PE"}, \
+ {0x1002, 0x4A54, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon JT R420 AIW X800 VE"}, \
+ {0x1002, 0x4B49, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon R481 X850 XT"}, \
+ {0x1002, 0x4B4A, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon R481 X850 SE"}, \
+ {0x1002, 0x4B4B, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon R481 X850 Pro"}, \
+ {0x1002, 0x4B4C, CHIP_R420|RADEON_NEW_MEMMAP, "ATI Radeon R481 X850 XT PE"}, \
+ {0x1002, 0x4C57, CHIP_RV200|RADEON_IS_MOBILITY, "ATI Radeon LW RV200 Mobility 7500 M7"}, \
+ {0x1002, 0x4C58, CHIP_RV200|RADEON_IS_MOBILITY, "ATI Radeon LX RV200 Mobility FireGL 7800 M7"}, \
+ {0x1002, 0x4C59, CHIP_RV100|RADEON_IS_MOBILITY, "ATI Radeon LY RV100 Mobility M6"}, \
+ {0x1002, 0x4C5A, CHIP_RV100|RADEON_IS_MOBILITY, "ATI Radeon LZ RV100 Mobility M6"}, \
+ {0x1002, 0x4C64, CHIP_RV250|RADEON_IS_MOBILITY, "ATI Radeon Ld RV250 Mobility 9000 M9"}, \
+ {0x1002, 0x4C66, CHIP_RV250, "ATI Radeon Lf RV250 Mobility 9000 M9 / FireMV 2400 PCI"}, \
+ {0x1002, 0x4C67, CHIP_RV250|RADEON_IS_MOBILITY, "ATI Radeon Lg RV250 Mobility 9000 M9"}, \
+ {0x1002, 0x4E44, CHIP_R300, "ATI Radeon ND R300 9700 Pro"}, \
+ {0x1002, 0x4E45, CHIP_R300, "ATI Radeon NE R300 9500 Pro / 9700"}, \
+ {0x1002, 0x4E46, CHIP_R300, "ATI Radeon NF R300 9600TX"}, \
+ {0x1002, 0x4E47, CHIP_R300, "ATI Radeon NG R300 FireGL X1"}, \
+ {0x1002, 0x4E48, CHIP_R350, "ATI Radeon NH R350 9800 Pro"}, \
+ {0x1002, 0x4E49, CHIP_R350, "ATI Radeon NI R350 9800"}, \
+ {0x1002, 0x4E4A, CHIP_R350, "ATI Radeon NJ R360 9800 XT"}, \
+ {0x1002, 0x4E4B, CHIP_R350, "ATI FireGL NK X2"}, \
+ {0x1002, 0x4E50, CHIP_RV350|RADEON_IS_MOBILITY, "ATI Radeon RV350 Mobility 9600 M10 NP"}, \
+ {0x1002, 0x4E51, CHIP_RV350|RADEON_IS_MOBILITY, "ATI Radeon RV350 Mobility 9600 M10 NQ"}, \
+ {0x1002, 0x4E52, CHIP_RV350|RADEON_IS_MOBILITY, "ATI Radeon RV350 Mobility 9600 M11 NR"}, \
+ {0x1002, 0x4E53, CHIP_RV350|RADEON_IS_MOBILITY, "ATI Radeon RV350 Mobility 9600 M10 NS"}, \
+ {0x1002, 0x4E54, CHIP_RV350|RADEON_IS_MOBILITY, "ATI FireGL T2/T2e"}, \
+ {0x1002, 0x4E56, CHIP_RV350|RADEON_IS_MOBILITY, "ATI Radeon Mobility 9550"}, \
+ {0x1002, 0x5144, CHIP_R100|RADEON_SINGLE_CRTC, "ATI Radeon QD R100"}, \
+ {0x1002, 0x5145, CHIP_R100|RADEON_SINGLE_CRTC, "ATI Radeon QE R100"}, \
+ {0x1002, 0x5146, CHIP_R100|RADEON_SINGLE_CRTC, "ATI Radeon QF R100"}, \
+ {0x1002, 0x5147, CHIP_R100|RADEON_SINGLE_CRTC, "ATI Radeon QG R100"}, \
+ {0x1002, 0x5148, CHIP_R200, "ATI Radeon QH R200 8500"}, \
+ {0x1002, 0x514C, CHIP_R200, "ATI Radeon QL R200 8500 LE"}, \
+ {0x1002, 0x514D, CHIP_R200, "ATI Radeon QM R200 9100"}, \
+ {0x1002, 0x5157, CHIP_RV200, "ATI Radeon QW RV200 7500"}, \
+ {0x1002, 0x5158, CHIP_RV200, "ATI Radeon QX RV200 7500"}, \
+ {0x1002, 0x5159, CHIP_RV100, "ATI Radeon QY RV100 7000/VE"}, \
+ {0x1002, 0x515A, CHIP_RV100, "ATI Radeon QZ RV100 7000/VE"}, \
+ {0x1002, 0x515E, CHIP_RV100, "ATI ES1000 RN50"}, \
+ {0x1002, 0x5460, CHIP_RV380|RADEON_IS_MOBILITY, "ATI Radeon Mobility X300 M22"}, \
+ {0x1002, 0x5462, CHIP_RV380|RADEON_IS_MOBILITY, "ATI Radeon Mobility X600 SE M24C"}, \
+ {0x1002, 0x5464, CHIP_RV380|RADEON_IS_MOBILITY, "ATI FireGL M22 GL 5464"}, \
+ {0x1002, 0x5548, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R423 X800"}, \
+ {0x1002, 0x5549, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R423 X800 Pro"}, \
+ {0x1002, 0x554A, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R423 X800 XT PE"}, \
+ {0x1002, 0x554B, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R423 X800 SE"}, \
+ {0x1002, 0x554C, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R430 X800 XTP"}, \
+ {0x1002, 0x554D, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R430 X800 XL"}, \
+ {0x1002, 0x554E, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R430 X800 SE"}, \
+ {0x1002, 0x554F, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R430 X800"}, \
+ {0x1002, 0x5550, CHIP_R423|RADEON_NEW_MEMMAP, "ATI FireGL V7100 R423"}, \
+ {0x1002, 0x5551, CHIP_R423|RADEON_NEW_MEMMAP, "ATI FireGL V5100 R423 UQ"}, \
+ {0x1002, 0x5552, CHIP_R423|RADEON_NEW_MEMMAP, "ATI FireGL unknown R423 UR"}, \
+ {0x1002, 0x5554, CHIP_R423|RADEON_NEW_MEMMAP, "ATI FireGL unknown R423 UT"}, \
+ {0x1002, 0x564A, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility FireGL V5000 M26"}, \
+ {0x1002, 0x564B, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility FireGL V5000 M26"}, \
+ {0x1002, 0x564F, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Radeon Mobility X700 XL M26"}, \
+ {0x1002, 0x5652, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Radeon Mobility X700 M26"}, \
+ {0x1002, 0x5653, CHIP_RV410|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Radeon Mobility X700 M26"}, \
+ {0x1002, 0x5657, CHIP_RV410|RADEON_NEW_MEMMAP, "ATI Radeon X550XTX"}, \
+ {0x1002, 0x5834, CHIP_RS300|RADEON_IS_IGP, "ATI Radeon RS300 9100 IGP"}, \
+ {0x1002, 0x5835, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY, "ATI Radeon RS300 Mobility IGP"}, \
+ {0x1002, 0x5954, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_IGPGART, "ATI RS480 XPRESS 200G"}, \
+ {0x1002, 0x5955, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART, "ATI Radeon XPRESS 200M 5955"}, \
+ {0x1002, 0x5974, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART, "ATI Radeon RS482 XPRESS 200"}, \
+ {0x1002, 0x5975, CHIP_RS480|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART, "ATI Radeon RS485 XPRESS 1100 IGP"}, \
+ {0x1002, 0x5960, CHIP_RV280, "ATI Radeon RV280 9250"}, \
+ {0x1002, 0x5961, CHIP_RV280, "ATI Radeon RV280 9200"}, \
+ {0x1002, 0x5962, CHIP_RV280, "ATI Radeon RV280 9200"}, \
+ {0x1002, 0x5964, CHIP_RV280, "ATI Radeon RV280 9200 SE"}, \
+ {0x1002, 0x5965, CHIP_RV280, "ATI FireMV 2200 PCI"}, \
+ {0x1002, 0x5969, CHIP_RV100, "ATI ES1000 RN50"}, \
+ {0x1002, 0x5a41, CHIP_RS400|RADEON_IS_IGP|RADEON_IS_IGPGART, "ATI Radeon XPRESS 200 5A41 (PCIE)"}, \
+ {0x1002, 0x5a42, CHIP_RS400|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART, "ATI Radeon XPRESS 200M 5A42 (PCIE)"}, \
+ {0x1002, 0x5a61, CHIP_RS400|RADEON_IS_IGP|RADEON_IS_IGPGART, "ATI Radeon RC410 XPRESS 200"}, \
+ {0x1002, 0x5a62, CHIP_RS400|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_IS_IGPGART, "ATI Radeon RC410 XPRESS 200M"}, \
+ {0x1002, 0x5b60, CHIP_RV380|RADEON_NEW_MEMMAP, "ATI Radeon RV370 X300 SE"}, \
+ {0x1002, 0x5b62, CHIP_RV380|RADEON_NEW_MEMMAP, "ATI Radeon RV370 X600 Pro"}, \
+ {0x1002, 0x5b63, CHIP_RV380|RADEON_NEW_MEMMAP, "ATI Radeon RV370 X550"}, \
+ {0x1002, 0x5b64, CHIP_RV380|RADEON_NEW_MEMMAP, "ATI FireGL V3100 (RV370) 5B64"}, \
+ {0x1002, 0x5b65, CHIP_RV380|RADEON_NEW_MEMMAP, "ATI FireMV 2200 PCIE (RV370) 5B65"}, \
+ {0x1002, 0x5c61, CHIP_RV280|RADEON_IS_MOBILITY, "ATI Radeon RV280 Mobility"}, \
+ {0x1002, 0x5c63, CHIP_RV280|RADEON_IS_MOBILITY, "ATI Radeon RV280 Mobility"}, \
+ {0x1002, 0x5d48, CHIP_R423|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X800 XT M28"}, \
+ {0x1002, 0x5d49, CHIP_R423|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility FireGL V5100 M28"}, \
+ {0x1002, 0x5d4a, CHIP_R423|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X800 M28"}, \
+ {0x1002, 0x5d4c, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R480 X850"}, \
+ {0x1002, 0x5d4d, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R480 X850 XT PE"}, \
+ {0x1002, 0x5d4e, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R480 X850 SE"}, \
+ {0x1002, 0x5d4f, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R480 X850 Pro"}, \
+ {0x1002, 0x5d50, CHIP_R423|RADEON_NEW_MEMMAP, "ATI unknown Radeon / FireGL R480"}, \
+ {0x1002, 0x5d52, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R480 X850 XT"}, \
+ {0x1002, 0x5d57, CHIP_R423|RADEON_NEW_MEMMAP, "ATI Radeon R423 X800 XT"}, \
+ {0x1002, 0x5e48, CHIP_RV410|RADEON_NEW_MEMMAP, "ATI FireGL V5000 RV410"}, \
+ {0x1002, 0x5e4a, CHIP_RV410|RADEON_NEW_MEMMAP, "ATI Radeon RV410 X700 XT"}, \
+ {0x1002, 0x5e4b, CHIP_RV410|RADEON_NEW_MEMMAP, "ATI Radeon RV410 X700 Pro"}, \
+ {0x1002, 0x5e4c, CHIP_RV410|RADEON_NEW_MEMMAP, "ATI Radeon RV410 X700 SE"}, \
+ {0x1002, 0x5e4d, CHIP_RV410|RADEON_NEW_MEMMAP, "ATI Radeon RV410 X700"}, \
+ {0x1002, 0x5e4f, CHIP_RV410|RADEON_NEW_MEMMAP, "ATI Radeon RV410 X700 SE"}, \
+ {0x1002, 0x7100, CHIP_R520|RADEON_NEW_MEMMAP, "ATI Radeon X1800"}, \
+ {0x1002, 0x7101, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1800 XT"}, \
+ {0x1002, 0x7102, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1800"}, \
+ {0x1002, 0x7103, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility FireGL V7200"}, \
+ {0x1002, 0x7104, CHIP_R520|RADEON_NEW_MEMMAP, "ATI FireGL V7200"}, \
+ {0x1002, 0x7105, CHIP_R520|RADEON_NEW_MEMMAP, "ATI FireGL V5300"}, \
+ {0x1002, 0x7106, CHIP_R520|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility FireGL V7100"}, \
+ {0x1002, 0x7108, CHIP_R520|RADEON_NEW_MEMMAP, "ATI Radeon X1800"}, \
+ {0x1002, 0x7109, CHIP_R520|RADEON_NEW_MEMMAP, "ATI Radeon X1800"}, \
+ {0x1002, 0x710A, CHIP_R520|RADEON_NEW_MEMMAP, "ATI Radeon X1800"}, \
+ {0x1002, 0x710B, CHIP_R520|RADEON_NEW_MEMMAP, "ATI Radeon X1800"}, \
+ {0x1002, 0x710C, CHIP_R520|RADEON_NEW_MEMMAP, "ATI Radeon X1800"}, \
+ {0x1002, 0x710E, CHIP_R520|RADEON_NEW_MEMMAP, "ATI FireGL V7300"}, \
+ {0x1002, 0x710F, CHIP_R520|RADEON_NEW_MEMMAP, "ATI FireGL V7350"}, \
+ {0x1002, 0x7140, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1600"}, \
+ {0x1002, 0x7141, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI RV505"}, \
+ {0x1002, 0x7142, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1300/X1550"}, \
+ {0x1002, 0x7143, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1550"}, \
+ {0x1002, 0x7144, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI M54-GL"}, \
+ {0x1002, 0x7145, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1400"}, \
+ {0x1002, 0x7146, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1300/X1550"}, \
+ {0x1002, 0x7147, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1550 64-bit"}, \
+ {0x1002, 0x7149, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1300"}, \
+ {0x1002, 0x714A, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1300"}, \
+ {0x1002, 0x714B, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1300"}, \
+ {0x1002, 0x714C, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1300"}, \
+ {0x1002, 0x714D, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1300"}, \
+ {0x1002, 0x714E, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1300"}, \
+ {0x1002, 0x714F, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI RV505"}, \
+ {0x1002, 0x7151, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI RV505"}, \
+ {0x1002, 0x7152, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI FireGL V3300"}, \
+ {0x1002, 0x7153, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI FireGL V3350"}, \
+ {0x1002, 0x715E, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1300"}, \
+ {0x1002, 0x715F, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1550 64-bit"}, \
+ {0x1002, 0x7180, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1300/X1550"}, \
+ {0x1002, 0x7181, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1600"}, \
+ {0x1002, 0x7183, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1300/X1550"}, \
+ {0x1002, 0x7186, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1450"}, \
+ {0x1002, 0x7187, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1300/X1550"}, \
+ {0x1002, 0x7188, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X2300"}, \
+ {0x1002, 0x718A, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X2300"}, \
+ {0x1002, 0x718B, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1350"}, \
+ {0x1002, 0x718C, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1350"}, \
+ {0x1002, 0x718D, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1450"}, \
+ {0x1002, 0x718F, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1300"}, \
+ {0x1002, 0x7193, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1550"}, \
+ {0x1002, 0x7196, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1350"}, \
+ {0x1002, 0x719B, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI FireMV 2250"}, \
+ {0x1002, 0x719F, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X1550 64-bit"}, \
+ {0x1002, 0x71C0, CHIP_RV530|RADEON_NEW_MEMMAP, "ATI Radeon X1600"}, \
+ {0x1002, 0x71C1, CHIP_RV530|RADEON_NEW_MEMMAP, "ATI Radeon X1650"}, \
+ {0x1002, 0x71C2, CHIP_RV530|RADEON_NEW_MEMMAP, "ATI Radeon X1600"}, \
+ {0x1002, 0x71C3, CHIP_RV530|RADEON_NEW_MEMMAP, "ATI Radeon X1600"}, \
+ {0x1002, 0x71C4, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility FireGL V5200"}, \
+ {0x1002, 0x71C5, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1600"}, \
+ {0x1002, 0x71C6, CHIP_RV530|RADEON_NEW_MEMMAP, "ATI Radeon X1650"}, \
+ {0x1002, 0x71C7, CHIP_RV530|RADEON_NEW_MEMMAP, "ATI Radeon X1650"}, \
+ {0x1002, 0x71CD, CHIP_RV530|RADEON_NEW_MEMMAP, "ATI Radeon X1600"}, \
+ {0x1002, 0x71CE, CHIP_RV530|RADEON_NEW_MEMMAP, "ATI Radeon X1300 XT/X1600 Pro"}, \
+ {0x1002, 0x71D2, CHIP_RV530|RADEON_NEW_MEMMAP, "ATI FireGL V3400"}, \
+ {0x1002, 0x71D4, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility FireGL V5250"}, \
+ {0x1002, 0x71D5, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1700"}, \
+ {0x1002, 0x71D6, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1700 XT"}, \
+ {0x1002, 0x71DA, CHIP_RV530|RADEON_NEW_MEMMAP, "ATI FireGL V5200"}, \
+ {0x1002, 0x71DE, CHIP_RV530|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1700"}, \
+ {0x1002, 0x7200, CHIP_RV515|RADEON_NEW_MEMMAP, "ATI Radeon X2300HD"}, \
+ {0x1002, 0x7210, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 2300"}, \
+ {0x1002, 0x7211, CHIP_RV515|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 2300"}, \
+ {0x1002, 0x7240, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1950"}, \
+ {0x1002, 0x7243, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x7244, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1950"}, \
+ {0x1002, 0x7245, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x7246, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x7247, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x7248, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x7249, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x724A, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x724B, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x724C, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x724D, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x724E, CHIP_R580|RADEON_NEW_MEMMAP, "ATI AMD Stream Processor"}, \
+ {0x1002, 0x724F, CHIP_R580|RADEON_NEW_MEMMAP, "ATI Radeon X1900"}, \
+ {0x1002, 0x7280, CHIP_RV570|RADEON_NEW_MEMMAP, "ATI Radeon X1950"}, \
+ {0x1002, 0x7281, CHIP_RV560|RADEON_NEW_MEMMAP, "ATI RV560"}, \
+ {0x1002, 0x7283, CHIP_RV560|RADEON_NEW_MEMMAP, "ATI RV560"}, \
+ {0x1002, 0x7284, CHIP_R580|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon X1900"}, \
+ {0x1002, 0x7287, CHIP_RV560|RADEON_NEW_MEMMAP, "ATI RV560"}, \
+ {0x1002, 0x7288, CHIP_RV570|RADEON_NEW_MEMMAP, "ATI Radeon X1950 GT"}, \
+ {0x1002, 0x7289, CHIP_RV570|RADEON_NEW_MEMMAP, "ATI RV570"}, \
+ {0x1002, 0x728B, CHIP_RV570|RADEON_NEW_MEMMAP, "ATI RV570"}, \
+ {0x1002, 0x728C, CHIP_RV570|RADEON_NEW_MEMMAP, "ATI ATI FireGL V7400"}, \
+ {0x1002, 0x7290, CHIP_RV560|RADEON_NEW_MEMMAP, "ATI RV560"}, \
+ {0x1002, 0x7291, CHIP_RV560|RADEON_NEW_MEMMAP, "ATI Radeon X1650"}, \
+ {0x1002, 0x7293, CHIP_RV560|RADEON_NEW_MEMMAP, "ATI Radeon X1650"}, \
+ {0x1002, 0x7297, CHIP_RV560|RADEON_NEW_MEMMAP, "ATI RV560"}, \
+ {0x1002, 0x7834, CHIP_RS300|RADEON_IS_IGP|RADEON_NEW_MEMMAP, "ATI Radeon RS350 9000/9100 IGP"}, \
+ {0x1002, 0x7835, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Radeon RS350 Mobility IGP"}, \
+ {0x1002, 0x793f, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP, "ATI Radeon X1200"}, \
+ {0x1002, 0x7941, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP, "ATI Radeon X1200"}, \
+ {0x1002, 0x7942, CHIP_RS600|RADEON_IS_IGP|RADEON_NEW_MEMMAP, "ATI Radeon X1200"}, \
+ {0x1002, 0x791e, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART, "ATI Radeon RS690 X1250 IGP"}, \
+ {0x1002, 0x791f, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART, "ATI Radeon RS690 X1270 IGP"}, \
+ {0x1002, 0x796c, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART, "ATI Radeon RS740 HD2100 IGP"}, \
+ {0x1002, 0x796d, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART, "ATI Radeon RS740 HD2100 IGP"}, \
+ {0x1002, 0x796e, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART, "ATI Radeon RS740 HD2100 IGP"}, \
+ {0x1002, 0x796f, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART, "ATI Radeon RS740 HD2100 IGP"}, \
+ {0x1002, 0x9400, CHIP_R600|RADEON_NEW_MEMMAP, "ATI Radeon HD 2900 XT"}, \
+ {0x1002, 0x9401, CHIP_R600|RADEON_NEW_MEMMAP, "ATI Radeon HD 2900 XT"}, \
+ {0x1002, 0x9402, CHIP_R600|RADEON_NEW_MEMMAP, "ATI Radeon HD 2900 XT"}, \
+ {0x1002, 0x9403, CHIP_R600|RADEON_NEW_MEMMAP, "ATI Radeon HD 2900 Pro"}, \
+ {0x1002, 0x9405, CHIP_R600|RADEON_NEW_MEMMAP, "ATI Radeon HD 2900 GT"}, \
+ {0x1002, 0x940A, CHIP_R600|RADEON_NEW_MEMMAP, "ATI FireGL V8650"}, \
+ {0x1002, 0x940B, CHIP_R600|RADEON_NEW_MEMMAP, "ATI FireGL V8600"}, \
+ {0x1002, 0x940F, CHIP_R600|RADEON_NEW_MEMMAP, "ATI FireGL V7600"}, \
+ {0x1002, 0x94A0, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 4830"}, \
+ {0x1002, 0x94A1, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 4850"}, \
+ {0x1002, 0x94A3, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI FirePro M7740"}, \
+ {0x1002, 0x94B1, CHIP_RV740|RADEON_NEW_MEMMAP, "ATI RV740"}, \
+ {0x1002, 0x94B3, CHIP_RV740|RADEON_NEW_MEMMAP, "ATI Radeon HD 4770"}, \
+ {0x1002, 0x94B4, CHIP_RV740|RADEON_NEW_MEMMAP, "ATI Radeon HD 4700 Series"}, \
+ {0x1002, 0x94B5, CHIP_RV740|RADEON_NEW_MEMMAP, "ATI Radeon HD 4770"}, \
+ {0x1002, 0x94B9, CHIP_RV740|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI FirePro M5750"}, \
+ {0x1002, 0x94C0, CHIP_RV610|RADEON_NEW_MEMMAP, "RV610"}, \
+ {0x1002, 0x94C1, CHIP_RV610|RADEON_NEW_MEMMAP, "Radeon HD 2400 XT"}, \
+ {0x1002, 0x94C3, CHIP_RV610|RADEON_NEW_MEMMAP, "Radeon HD 2400 Pro"}, \
+ {0x1002, 0x94C4, CHIP_RV610|RADEON_NEW_MEMMAP, "Radeon HD 2400 PRO AGP"}, \
+ {0x1002, 0x94C5, CHIP_RV610|RADEON_NEW_MEMMAP, "FireGL V4000"}, \
+ {0x1002, 0x94C6, CHIP_RV610|RADEON_NEW_MEMMAP, "RV610"}, \
+ {0x1002, 0x94C7, CHIP_RV610|RADEON_NEW_MEMMAP, "ATI Radeon HD 2350"}, \
+ {0x1002, 0x94C8, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 2400 XT"}, \
+ {0x1002, 0x94C9, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 2400"}, \
+ {0x1002, 0x94CB, CHIP_RV610|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI RADEON E2400"}, \
+ {0x1002, 0x94CC, CHIP_RV610|RADEON_NEW_MEMMAP, "ATI RV610"}, \
+ {0x1002, 0x94CD, CHIP_RV610|RADEON_NEW_MEMMAP, "ATI FireMV 2260"}, \
+ {0x1002, 0x9500, CHIP_RV670|RADEON_NEW_MEMMAP, "ATI RV670"}, \
+ {0x1002, 0x9501, CHIP_RV670|RADEON_NEW_MEMMAP, "ATI Radeon HD3870"}, \
+ {0x1002, 0x9504, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 3850"}, \
+ {0x1002, 0x9505, CHIP_RV670|RADEON_NEW_MEMMAP, "ATI Radeon HD3850"}, \
+ {0x1002, 0x9506, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 3850 X2"}, \
+ {0x1002, 0x9507, CHIP_RV670|RADEON_NEW_MEMMAP, "ATI RV670"}, \
+ {0x1002, 0x9508, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 3870"}, \
+ {0x1002, 0x9509, CHIP_RV670|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 3870 X2"}, \
+ {0x1002, 0x950F, CHIP_RV670|RADEON_NEW_MEMMAP, "ATI Radeon HD3870 X2"}, \
+ {0x1002, 0x9511, CHIP_RV670|RADEON_NEW_MEMMAP, "ATI FireGL V7700"}, \
+ {0x1002, 0x9515, CHIP_RV670|RADEON_NEW_MEMMAP, "ATI Radeon HD3850"}, \
+ {0x1002, 0x9517, CHIP_RV670|RADEON_NEW_MEMMAP, "ATI Radeon HD3690"}, \
+ {0x1002, 0x9519, CHIP_RV670|RADEON_NEW_MEMMAP, "AMD Firestream 9170"}, \
+ {0x1002, 0x9580, CHIP_RV630|RADEON_NEW_MEMMAP, "ATI RV630"}, \
+ {0x1002, 0x9581, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 2600"}, \
+ {0x1002, 0x9583, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 2600 XT"}, \
+ {0x1002, 0x9586, CHIP_RV630|RADEON_NEW_MEMMAP, "ATI Radeon HD 2600 XT AGP"}, \
+ {0x1002, 0x9587, CHIP_RV630|RADEON_NEW_MEMMAP, "ATI Radeon HD 2600 Pro AGP"}, \
+ {0x1002, 0x9588, CHIP_RV630|RADEON_NEW_MEMMAP, "ATI Radeon HD 2600 XT"}, \
+ {0x1002, 0x9589, CHIP_RV630|RADEON_NEW_MEMMAP, "ATI Radeon HD 2600 Pro"}, \
+ {0x1002, 0x958A, CHIP_RV630|RADEON_NEW_MEMMAP, "ATI Gemini RV630"}, \
+ {0x1002, 0x958B, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Gemini Mobility Radeon HD 2600 XT"}, \
+ {0x1002, 0x958C, CHIP_RV630|RADEON_NEW_MEMMAP, "ATI FireGL V5600"}, \
+ {0x1002, 0x958D, CHIP_RV630|RADEON_NEW_MEMMAP, "ATI FireGL V3600"}, \
+ {0x1002, 0x958E, CHIP_RV630|RADEON_NEW_MEMMAP, "ATI Radeon HD 2600 LE"}, \
+ {0x1002, 0x958F, CHIP_RV630|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility FireGL Graphics Processor"}, \
+ {0x1002, 0x95C0, CHIP_RV620|RADEON_NEW_MEMMAP, "ATI Radeon HD 3470"}, \
+ {0x1002, 0x95C5, CHIP_RV620|RADEON_NEW_MEMMAP, "ATI Radeon HD 3450"}, \
+ {0x1002, 0x95C6, CHIP_RV620|RADEON_NEW_MEMMAP, "ATI Radeon HD 3450"}, \
+ {0x1002, 0x95C7, CHIP_RV620|RADEON_NEW_MEMMAP, "ATI Radeon HD 3430"}, \
+ {0x1002, 0x95C9, CHIP_RV620|RADEON_NEW_MEMMAP, "ATI Radeon HD 3450"}, \
+ {0x1002, 0x95C2, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 3430"}, \
+ {0x1002, 0x95C4, CHIP_RV620|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 3400 Series"}, \
+ {0x1002, 0x95CC, CHIP_RV620|RADEON_NEW_MEMMAP, "ATI FirePro V3700"}, \
+ {0x1002, 0x95CD, CHIP_RV620|RADEON_NEW_MEMMAP, "ATI FireMV 2450"}, \
+ {0x1002, 0x95CE, CHIP_RV620|RADEON_NEW_MEMMAP, "ATI FireMV 2260"}, \
+ {0x1002, 0x95CF, CHIP_RV620|RADEON_NEW_MEMMAP, "ATI FireMV 2260"}, \
+ {0x1002, 0x9590, CHIP_RV635|RADEON_NEW_MEMMAP, "ATI ATI Radeon HD 3600 Series"}, \
+ {0x1002, 0x9596, CHIP_RV635|RADEON_NEW_MEMMAP, "ATI ATI Radeon HD 3650 AGP"}, \
+ {0x1002, 0x9597, CHIP_RV635|RADEON_NEW_MEMMAP, "ATI ATI Radeon HD 3600 PRO"}, \
+ {0x1002, 0x9598, CHIP_RV635|RADEON_NEW_MEMMAP, "ATI ATI Radeon HD 3600 XT"}, \
+ {0x1002, 0x9599, CHIP_RV635|RADEON_NEW_MEMMAP, "ATI ATI Radeon HD 3600 PRO"}, \
+ {0x1002, 0x9591, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 3650"}, \
+ {0x1002, 0x9593, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 3670"}, \
+ {0x1002, 0x9595, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility FireGL V5700"}, \
+ {0x1002, 0x959B, CHIP_RV635|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility FireGL V5725"}, \
+ {0x1002, 0x9610, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Radeon HD 3200 Graphics"}, \
+ {0x1002, 0x9611, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Radeon 3100 Graphics"}, \
+ {0x1002, 0x9612, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Radeon HD 3200 Graphics"}, \
+ {0x1002, 0x9613, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Radeon 3100 Graphics"}, \
+ {0x1002, 0x9614, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Radeon 3300 Graphics"}, \
+ {0x1002, 0x9615, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Radeon 3200 Graphics"}, \
+ {0x1002, 0x9616, CHIP_RS780|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Radeon 3000 Graphics"}, \
+ {0x1002, 0x9710, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Radeon HD 4200"}, \
+ {0x1002, 0x9711, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Radeon 4100"}, \
+ {0x1002, 0x9712, CHIP_RS880|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Mobility Radeon HD 4200"}, \
+ {0x1002, 0x9713, CHIP_RS880|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Mobility Radeon 4100"}, \
+ {0x1002, 0x9714, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI RS880"}, \
+ {0x1002, 0x9715, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP, "ATI Radeon HD 4250"}, \
+ {0x1002, 0x9440, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI Radeon 4800 Series"}, \
+ {0x1002, 0x9441, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI Radeon 4870 X2"}, \
+ {0x1002, 0x9442, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI Radeon 4800 Series"}, \
+ {0x1002, 0x9443, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI Radeon 4850 X2"}, \
+ {0x1002, 0x944C, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI Radeon 4800 Series"}, \
+ {0x1002, 0x9450, CHIP_RV770|RADEON_NEW_MEMMAP, "AMD FireStream 9270"}, \
+ {0x1002, 0x9452, CHIP_RV770|RADEON_NEW_MEMMAP, "AMD FireStream 9250"}, \
+ {0x1002, 0x9444, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI FirePro V8750 (FireGL)"}, \
+ {0x1002, 0x9446, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI FirePro V7760 (FireGL)"}, \
+ {0x1002, 0x9456, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI FirePro V8700 (FireGL)"}, \
+ {0x1002, 0x944E, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI FirePro RV770"}, \
+ {0x1002, 0x944A, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 4850"}, \
+ {0x1002, 0x944B, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 4850 X2"}, \
+ {0x1002, 0x945A, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 4870"}, \
+ {0x1002, 0x945B, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon M98"}, \
+ {0x1002, 0x9460, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI Radeon 4800 Series"}, \
+ {0x1002, 0x9462, CHIP_RV770|RADEON_NEW_MEMMAP, "ATI Radeon 4800 Series"}, \
+ {0x1002, 0x946A, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI FirePro M7750"}, \
+ {0x1002, 0x946B, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI M98"}, \
+ {0x1002, 0x947A, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI M98"}, \
+ {0x1002, 0x947B, CHIP_RV770|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI M98"}, \
+ {0x1002, 0x9487, CHIP_RV730|RADEON_NEW_MEMMAP, "ATI Radeon RV730 (AGP)"}, \
+ {0x1002, 0x948F, CHIP_RV730|RADEON_NEW_MEMMAP, "ATI Radeon RV730 (AGP)"}, \
+ {0x1002, 0x9490, CHIP_RV730|RADEON_NEW_MEMMAP, "ATI Radeon HD 4670"}, \
+ {0x1002, 0x9495, CHIP_RV730|RADEON_NEW_MEMMAP, "ATI Radeon HD 4600 Series"}, \
+ {0x1002, 0x9498, CHIP_RV730|RADEON_NEW_MEMMAP, "ATI Radeon HD 4650"}, \
+ {0x1002, 0x9480, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 4650"}, \
+ {0x1002, 0x9488, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon HD 4670"}, \
+ {0x1002, 0x9489, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI FirePro M5750"}, \
+ {0x1002, 0x9491, CHIP_RV730|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI RADEON E4600"}, \
+ {0x1002, 0x949C, CHIP_RV730|RADEON_NEW_MEMMAP, "ATI FirePro V7750 (FireGL)"}, \
+ {0x1002, 0x949E, CHIP_RV730|RADEON_NEW_MEMMAP, "ATI FirePro V5700 (FireGL)"}, \
+ {0x1002, 0x949F, CHIP_RV730|RADEON_NEW_MEMMAP, "ATI FirePro V3750 (FireGL)"}, \
+ {0x1002, 0x9540, CHIP_RV710|RADEON_NEW_MEMMAP, "ATI Radeon HD 4550"}, \
+ {0x1002, 0x9541, CHIP_RV710|RADEON_NEW_MEMMAP, "ATI Radeon RV710"}, \
+ {0x1002, 0x9542, CHIP_RV710|RADEON_NEW_MEMMAP, "ATI Radeon RV710"}, \
+ {0x1002, 0x954E, CHIP_RV710|RADEON_NEW_MEMMAP, "ATI Radeon RV710"}, \
+ {0x1002, 0x954F, CHIP_RV710|RADEON_NEW_MEMMAP, "ATI Radeon HD 4350"}, \
+ {0x1002, 0x9552, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon 4300 Series"}, \
+ {0x1002, 0x9553, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon 4500 Series"}, \
+ {0x1002, 0x9555, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI Mobility Radeon 4500 Series"}, \
+ {0x1002, 0x9557, CHIP_RV710|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP, "ATI FirePro RG220"}, \
+ {0, 0, 0, NULL}
+
+#define r128_PCI_IDS \
+ {0x1002, 0x4c45, 0, "ATI Rage 128 Mobility LE (PCI)"}, \
+ {0x1002, 0x4c46, 0, "ATI Rage 128 Mobility LF (AGP)"}, \
+ {0x1002, 0x4d46, 0, "ATI Rage 128 Mobility MF (AGP)"}, \
+ {0x1002, 0x4d4c, 0, "ATI Rage 128 Mobility ML (AGP)"}, \
+ {0x1002, 0x5041, 0, "ATI Rage 128 Pro PA (PCI)"}, \
+ {0x1002, 0x5042, 0, "ATI Rage 128 Pro PB (AGP)"}, \
+ {0x1002, 0x5043, 0, "ATI Rage 128 Pro PC (AGP)"}, \
+ {0x1002, 0x5044, 0, "ATI Rage 128 Pro PD (PCI)"}, \
+ {0x1002, 0x5045, 0, "ATI Rage 128 Pro PE (AGP)"}, \
+ {0x1002, 0x5046, 0, "ATI Rage 128 Pro PF (AGP)"}, \
+ {0x1002, 0x5047, 0, "ATI Rage 128 Pro PG (PCI)"}, \
+ {0x1002, 0x5048, 0, "ATI Rage 128 Pro PH (AGP)"}, \
+ {0x1002, 0x5049, 0, "ATI Rage 128 Pro PI (AGP)"}, \
+ {0x1002, 0x504A, 0, "ATI Rage 128 Pro PJ (PCI)"}, \
+ {0x1002, 0x504B, 0, "ATI Rage 128 Pro PK (AGP)"}, \
+ {0x1002, 0x504C, 0, "ATI Rage 128 Pro PL (AGP)"}, \
+ {0x1002, 0x504D, 0, "ATI Rage 128 Pro PM (PCI)"}, \
+ {0x1002, 0x504E, 0, "ATI Rage 128 Pro PN (AGP)"}, \
+ {0x1002, 0x504F, 0, "ATI Rage 128 Pro PO (AGP)"}, \
+ {0x1002, 0x5050, 0, "ATI Rage 128 Pro PP (PCI)"}, \
+ {0x1002, 0x5051, 0, "ATI Rage 128 Pro PQ (AGP)"}, \
+ {0x1002, 0x5052, 0, "ATI Rage 128 Pro PR (PCI)"}, \
+ {0x1002, 0x5053, 0, "ATI Rage 128 Pro PS (PCI)"}, \
+ {0x1002, 0x5054, 0, "ATI Rage 128 Pro PT (AGP)"}, \
+ {0x1002, 0x5055, 0, "ATI Rage 128 Pro PU (AGP)"}, \
+ {0x1002, 0x5056, 0, "ATI Rage 128 Pro PV (PCI)"}, \
+ {0x1002, 0x5057, 0, "ATI Rage 128 Pro PW (AGP)"}, \
+ {0x1002, 0x5058, 0, "ATI Rage 128 Pro PX (AGP)"}, \
+ {0x1002, 0x5245, 0, "ATI Rage 128 RE (PCI)"}, \
+ {0x1002, 0x5246, 0, "ATI Rage 128 RF (AGP)"}, \
+ {0x1002, 0x5247, 0, "ATI Rage 128 RG (AGP)"}, \
+ {0x1002, 0x524b, 0, "ATI Rage 128 RK (PCI)"}, \
+ {0x1002, 0x524c, 0, "ATI Rage 128 RL (AGP)"}, \
+ {0x1002, 0x534d, 0, "ATI Rage 128 SM (AGP)"}, \
+ {0x1002, 0x5446, 0, "ATI Rage 128 Pro Ultra TF (AGP)"}, \
+ {0x1002, 0x544C, 0, "ATI Rage 128 Pro Ultra TL (AGP)"}, \
+ {0x1002, 0x5452, 0, "ATI Rage 128 Pro Ultra TR (AGP)"}, \
+ {0, 0, 0, NULL}
+
+#define mga_PCI_IDS \
+ {0x102b, 0x0520, MGA_CARD_TYPE_G200, "Matrox G200 (PCI)"}, \
+ {0x102b, 0x0521, MGA_CARD_TYPE_G200, "Matrox G200 (AGP)"}, \
+ {0x102b, 0x0525, MGA_CARD_TYPE_G400, "Matrox G400/G450 (AGP)"}, \
+ {0x102b, 0x2527, MGA_CARD_TYPE_G550, "Matrox G550 (AGP)"}, \
+ {0, 0, 0, NULL}
+
+#define mach64_PCI_IDS \
+ {0x1002, 0x4749, 0, "3D Rage Pro"}, \
+ {0x1002, 0x4750, 0, "3D Rage Pro 215GP"}, \
+ {0x1002, 0x4751, 0, "3D Rage Pro 215GQ"}, \
+ {0x1002, 0x4742, 0, "3D Rage Pro AGP 1X/2X"}, \
+ {0x1002, 0x4744, 0, "3D Rage Pro AGP 1X"}, \
+ {0x1002, 0x4c49, 0, "3D Rage LT Pro"}, \
+ {0x1002, 0x4c50, 0, "3D Rage LT Pro"}, \
+ {0x1002, 0x4c51, 0, "3D Rage LT Pro"}, \
+ {0x1002, 0x4c42, 0, "3D Rage LT Pro AGP-133"}, \
+ {0x1002, 0x4c44, 0, "3D Rage LT Pro AGP-66"}, \
+ {0x1002, 0x474c, 0, "Rage XC"}, \
+ {0x1002, 0x474f, 0, "Rage XL"}, \
+ {0x1002, 0x4752, 0, "Rage XL"}, \
+ {0x1002, 0x4753, 0, "Rage XC"}, \
+ {0x1002, 0x474d, 0, "Rage XL AGP 2X"}, \
+ {0x1002, 0x474e, 0, "Rage XC AGP"}, \
+ {0x1002, 0x4c52, 0, "Rage Mobility P/M"}, \
+ {0x1002, 0x4c53, 0, "Rage Mobility L"}, \
+ {0x1002, 0x4c4d, 0, "Rage Mobility P/M AGP 2X"}, \
+ {0x1002, 0x4c4e, 0, "Rage Mobility L AGP 2X"}, \
+ {0, 0, 0, NULL}
+
+#define sis_PCI_IDS \
+ {0x1039, 0x0300, 0, "SiS 300/305"}, \
+ {0x1039, 0x5300, 0, "SiS 540"}, \
+ {0x1039, 0x6300, 0, "SiS 630"}, \
+ {0x1039, 0x6330, SIS_CHIP_315, "SiS 661"}, \
+ {0x1039, 0x7300, 0, "SiS 730"}, \
+ {0x18CA, 0x0040, SIS_CHIP_315, "Volari V3XT/V5/V8"}, \
+ {0x18CA, 0x0042, SIS_CHIP_315, "Volari Unknown"}, \
+ {0, 0, 0, NULL}
+
+#define tdfx_PCI_IDS \
+ {0x121a, 0x0003, 0, "3dfx Voodoo Banshee"}, \
+ {0x121a, 0x0004, 0, "3dfx Voodoo3 2000"}, \
+ {0x121a, 0x0005, 0, "3dfx Voodoo3 3000"}, \
+ {0x121a, 0x0007, 0, "3dfx Voodoo4 4500"}, \
+ {0x121a, 0x0009, 0, "3dfx Voodoo5 5500"}, \
+ {0x121a, 0x000b, 0, "3dfx Voodoo4 4200"}, \
+ {0, 0, 0, NULL}
+
+#define viadrv_PCI_IDS \
+ {0x1106, 0x3022, 0, "VIA CLE266 3022"}, \
+ {0x1106, 0x3118, VIA_PRO_GROUP_A, "VIA CN400 / PM8X0"}, \
+ {0x1106, 0x3122, 0, "VIA CLE266"}, \
+ {0x1106, 0x7205, 0, "VIA KM400"}, \
+ {0x1106, 0x3108, 0, "VIA K8M800"}, \
+ {0x1106, 0x3344, 0, "VIA CN700 / VM800 / P4M800Pro"}, \
+ {0x1106, 0x3343, 0, "VIA P4M890"}, \
+ {0x1106, 0x3230, VIA_DX9_0, "VIA K8M890"}, \
+ {0x1106, 0x3157, VIA_PRO_GROUP_A, "VIA CX700"}, \
+ {0x1106, 0x3371, VIA_DX9_0, "VIA P4M900 / VN896"}, \
+ {0, 0, 0, NULL}
+
+#define i810_PCI_IDS \
+ {0x8086, 0x7121, 0, "Intel i810 GMCH"}, \
+ {0x8086, 0x7123, 0, "Intel i810-DC100 GMCH"}, \
+ {0x8086, 0x7125, 0, "Intel i810E GMCH"}, \
+ {0x8086, 0x1132, 0, "Intel i815 GMCH"}, \
+ {0, 0, 0, NULL}
+
+#define i830_PCI_IDS \
+ {0x8086, 0x3577, 0, "Intel i830M GMCH"}, \
+ {0x8086, 0x2562, 0, "Intel i845G GMCH"}, \
+ {0x8086, 0x3582, 0, "Intel i852GM/i855GM GMCH"}, \
+ {0x8086, 0x2572, 0, "Intel i865G GMCH"}, \
+ {0, 0, 0, NULL}
+
+#define gamma_PCI_IDS \
+ {0x3d3d, 0x0008, 0, "3DLabs GLINT Gamma G1"}, \
+ {0, 0, 0, NULL}
+
+#define savage_PCI_IDS \
+ {0x5333, 0x8a20, S3_SAVAGE3D, "Savage 3D"}, \
+ {0x5333, 0x8a21, S3_SAVAGE3D, "Savage 3D/MV"}, \
+ {0x5333, 0x8a22, S3_SAVAGE4, "Savage4"}, \
+ {0x5333, 0x8a23, S3_SAVAGE4, "Savage4"}, \
+ {0x5333, 0x8c10, S3_SAVAGE_MX, "Savage/MX-MV"}, \
+ {0x5333, 0x8c11, S3_SAVAGE_MX, "Savage/MX"}, \
+ {0x5333, 0x8c12, S3_SAVAGE_MX, "Savage/IX-MV"}, \
+ {0x5333, 0x8c13, S3_SAVAGE_MX, "Savage/IX"}, \
+ {0x5333, 0x8c22, S3_SUPERSAVAGE, "SuperSavage MX/128"}, \
+ {0x5333, 0x8c24, S3_SUPERSAVAGE, "SuperSavage MX/64"}, \
+ {0x5333, 0x8c26, S3_SUPERSAVAGE, "SuperSavage MX/64C"}, \
+ {0x5333, 0x8c2a, S3_SUPERSAVAGE, "SuperSavage IX/128 SDR"}, \
+ {0x5333, 0x8c2b, S3_SUPERSAVAGE, "SuperSavage IX/128 DDR"}, \
+ {0x5333, 0x8c2c, S3_SUPERSAVAGE, "SuperSavage IX/64 SDR"}, \
+ {0x5333, 0x8c2d, S3_SUPERSAVAGE, "SuperSavage IX/64 DDR"}, \
+ {0x5333, 0x8c2e, S3_SUPERSAVAGE, "SuperSavage IX/C SDR"}, \
+ {0x5333, 0x8c2f, S3_SUPERSAVAGE, "SuperSavage IX/C DDR"}, \
+ {0x5333, 0x8a25, S3_PROSAVAGE, "ProSavage PM133"}, \
+ {0x5333, 0x8a26, S3_PROSAVAGE, "ProSavage KM133"}, \
+ {0x5333, 0x8d01, S3_TWISTER, "ProSavage Twister PN133"}, \
+ {0x5333, 0x8d02, S3_TWISTER, "ProSavage Twister KN133"}, \
+ {0x5333, 0x8d03, S3_PROSAVAGEDDR, "ProSavage DDR"}, \
+ {0x5333, 0x8d04, S3_PROSAVAGEDDR, "ProSavage DDR-K"}, \
+ {0, 0, 0, NULL}
+
+#define ffb_PCI_IDS \
+ {0, 0, 0, NULL}
+
+#define i915_PCI_IDS \
+ {0x8086, 0x3577, CHIP_I8XX, "Intel i830M GMCH"}, \
+ {0x8086, 0x2562, CHIP_I8XX, "Intel i845G GMCH"}, \
+ {0x8086, 0x3582, CHIP_I8XX, "Intel i852GM/i855GM GMCH"}, \
+ {0x8086, 0x358e, CHIP_I8XX, "Intel i852GM/i855GM GMCH"}, \
+ {0x8086, 0x2572, CHIP_I8XX, "Intel i865G GMCH"}, \
+ {0x8086, 0x2582, CHIP_I9XX|CHIP_I915, "Intel i915G"}, \
+ {0x8086, 0x258a, CHIP_I9XX|CHIP_I915, "Intel E7221 (i915)"}, \
+ {0x8086, 0x2592, CHIP_I9XX|CHIP_I915, "Intel i915GM"}, \
+ {0x8086, 0x2772, CHIP_I9XX|CHIP_I915, "Intel i945G"}, \
+ {0x8086, 0x27A2, CHIP_I9XX|CHIP_I915, "Intel i945GM"}, \
+ {0x8086, 0x27AE, CHIP_I9XX|CHIP_I915, "Intel i945GME"}, \
+ {0x8086, 0x2972, CHIP_I9XX|CHIP_I965, "Intel i946GZ"}, \
+ {0x8086, 0x2982, CHIP_I9XX|CHIP_I965, "Intel i965G"}, \
+ {0x8086, 0x2992, CHIP_I9XX|CHIP_I965, "Intel i965Q"}, \
+ {0x8086, 0x29A2, CHIP_I9XX|CHIP_I965, "Intel i965G"}, \
+ {0x8086, 0x29B2, CHIP_I9XX|CHIP_I915, "Intel Q35"}, \
+ {0x8086, 0x29C2, CHIP_I9XX|CHIP_I915, "Intel G33"}, \
+ {0x8086, 0x29D2, CHIP_I9XX|CHIP_I915, "Intel Q33"}, \
+ {0x8086, 0x2A02, CHIP_I9XX|CHIP_I965, "Intel i965GM"}, \
+ {0x8086, 0x2A12, CHIP_I9XX|CHIP_I965, "Intel i965GME/GLE"}, \
+ {0x8086, 0x2A42, CHIP_I9XX|CHIP_I965, "Mobile Intel® GM45 Express Chipset"}, \
+ {0x8086, 0x2E02, CHIP_I9XX|CHIP_I965, "Intel Eaglelake"}, \
+ {0x8086, 0x2E12, CHIP_I9XX|CHIP_I965, "Intel Q45/Q43"}, \
+ {0x8086, 0x2E22, CHIP_I9XX|CHIP_I965, "Intel G45/G43"}, \
+ {0x8086, 0x2E32, CHIP_I9XX|CHIP_I965, "Intel G41"}, \
+ {0x8086, 0x2e42, CHIP_I9XX|CHIP_I915, "Intel G43 ?"}, \
+ {0x8086, 0x2e92, CHIP_I9XX|CHIP_I915, "Intel G43 ?"}, \
+ {0x8086, 0x0042, CHIP_I9XX|CHIP_I915, "Intel IronLake"}, \
+ {0x8086, 0x0046, CHIP_I9XX|CHIP_I915, "Intel IronLake"}, \
+ {0x8086, 0x0102, CHIP_I9XX|CHIP_I915, "Intel SandyBridge"}, \
+ {0x8086, 0x0112, CHIP_I9XX|CHIP_I915, "Intel SandyBridge"}, \
+ {0x8086, 0x0122, CHIP_I9XX|CHIP_I915, "Intel SandyBridge"}, \
+ {0x8086, 0x0106, CHIP_I9XX|CHIP_I915, "Intel SandyBridge (M)"}, \
+ {0x8086, 0x0116, CHIP_I9XX|CHIP_I915, "Intel SandyBridge (M)"}, \
+ {0x8086, 0x0126, CHIP_I9XX|CHIP_I915, "Intel SandyBridge (M)"}, \
+ {0x8086, 0x010A, CHIP_I9XX|CHIP_I915, "Intel SandyBridge (M)"}, \
+ {0x8086, 0xA001, CHIP_I9XX|CHIP_I965, "Intel Pineview"}, \
+ {0x8086, 0xA011, CHIP_I9XX|CHIP_I965, "Intel Pineview (M)"}, \
+ {0, 0, 0, NULL}
+
+#define imagine_PCI_IDS \
+ {0x105d, 0x2309, IMAGINE_128, "Imagine 128"}, \
+ {0x105d, 0x2339, IMAGINE_128_2, "Imagine 128-II"}, \
+ {0x105d, 0x493d, IMAGINE_T2R, "Ticket to Ride"}, \
+ {0x105d, 0x5348, IMAGINE_REV4, "Revolution IV"}, \
+ {0, 0, 0, NULL}
+
+#define nv_PCI_IDS \
+ {0x10DE, 0x0020, NV04, "NVidia RIVA TNT"}, \
+ {0x10DE, 0x0028, NV04, "NVidia RIVA TNT2"}, \
+ {0x10DE, 0x002A, NV04, "NVidia Unknown TNT2"}, \
+ {0x10DE, 0x002C, NV04, "NVidia Vanta"}, \
+ {0x10DE, 0x0029, NV04, "NVidia RIVA TNT2 Ultra"}, \
+ {0x10DE, 0x002D, NV04, "NVidia RIVA TNT2 Model 64"}, \
+ {0x10DE, 0x00A0, NV04, "NVidia Aladdin TNT2"}, \
+ {0x10DE, 0x0100, NV10, "NVidia GeForce 256"}, \
+ {0x10DE, 0x0101, NV10, "NVidia GeForce DDR"}, \
+ {0x10DE, 0x0103, NV10, "NVidia Quadro"}, \
+ {0x10DE, 0x0110, NV10, "NVidia GeForce2 MX/MX 400"}, \
+ {0x10DE, 0x0111, NV10, "NVidia GeForce2 MX 100/200"}, \
+ {0x10DE, 0x0112, NV10, "NVidia GeForce2 Go"}, \
+ {0x10DE, 0x0113, NV10, "NVidia Quadro2 MXR/EX/Go"}, \
+ {0x10DE, 0x0150, NV10, "NVidia GeForce2 GTS"}, \
+ {0x10DE, 0x0151, NV10, "NVidia GeForce2 Ti"}, \
+ {0x10DE, 0x0152, NV10, "NVidia GeForce2 Ultra"}, \
+ {0x10DE, 0x0153, NV10, "NVidia Quadro2 Pro"}, \
+ {0x10DE, 0x0170, NV10, "NVidia GeForce4 MX 460"}, \
+ {0x10DE, 0x0171, NV10, "NVidia GeForce4 MX 440"}, \
+ {0x10DE, 0x0172, NV10, "NVidia GeForce4 MX 420"}, \
+ {0x10DE, 0x0173, NV10, "NVidia GeForce4 MX 440-SE"}, \
+ {0x10DE, 0x0174, NV10, "NVidia GeForce4 440 Go"}, \
+ {0x10DE, 0x0175, NV10, "NVidia GeForce4 420 Go"}, \
+ {0x10DE, 0x0176, NV10, "NVidia GeForce4 420 Go 32M"}, \
+ {0x10DE, 0x0177, NV10, "NVidia GeForce4 460 Go"}, \
+ {0x10DE, 0x0178, NV10, "NVidia Quadro4 550 XGL"}, \
+ {0x10DE, 0x0179, NV10, "NVidia GeForce4"}, \
+ {0x10DE, 0x017A, NV10, "NVidia Quadro4 NVS"}, \
+ {0x10DE, 0x017C, NV10, "NVidia Quadro4 500 GoGL"}, \
+ {0x10DE, 0x017D, NV10, "NVidia GeForce4 410 Go 16M"}, \
+ {0x10DE, 0x0181, NV10, "NVidia GeForce4 MX 440 with AGP8X"}, \
+ {0x10DE, 0x0182, NV10, "NVidia GeForce4 MX 440SE with AGP8X"}, \
+ {0x10DE, 0x0183, NV10, "NVidia GeForce4 MX 420 with AGP8X"}, \
+ {0x10DE, 0x0185, NV10, "NVidia GeForce4 MX 4000"}, \
+ {0x10DE, 0x0186, NV10, "NVidia GeForce4 448 Go"}, \
+ {0x10DE, 0x0187, NV10, "NVidia GeForce4 488 Go"}, \
+ {0x10DE, 0x0188, NV10, "NVidia Quadro4 580 XGL"}, \
+ {0x10DE, 0x0189, NV10, "NVidia GeForce4 MX with AGP8X (Mac)"}, \
+ {0x10DE, 0x018A, NV10, "NVidia Quadro4 280 NVS"}, \
+ {0x10DE, 0x018B, NV10, "NVidia Quadro4 380 XGL"}, \
+ {0x10DE, 0x018C, NV10, "NVidia Quadro NVS 50 PCI"}, \
+ {0x10DE, 0x018D, NV10, "NVidia GeForce4 448 Go"}, \
+ {0x10DE, 0x01A0, NV10, "NVidia GeForce2 Integrated GPU"}, \
+ {0x10DE, 0x01F0, NV10, "NVidia GeForce4 MX Integrated GPU"}, \
+ {0x10DE, 0x0200, NV20, "NVidia GeForce3"}, \
+ {0x10DE, 0x0201, NV20, "NVidia GeForce3 Ti 200"}, \
+ {0x10DE, 0x0202, NV20, "NVidia GeForce3 Ti 500"}, \
+ {0x10DE, 0x0203, NV20, "NVidia Quadro DCC"}, \
+ {0x10DE, 0x0250, NV20, "NVidia GeForce4 Ti 4600"}, \
+ {0x10DE, 0x0251, NV20, "NVidia GeForce4 Ti 4400"}, \
+ {0x10DE, 0x0252, NV20, "NVidia 0x0252"}, \
+ {0x10DE, 0x0253, NV20, "NVidia GeForce4 Ti 4200"}, \
+ {0x10DE, 0x0258, NV20, "NVidia Quadro4 900 XGL"}, \
+ {0x10DE, 0x0259, NV20, "NVidia Quadro4 750 XGL"}, \
+ {0x10DE, 0x025B, NV20, "NVidia Quadro4 700 XGL"}, \
+ {0x10DE, 0x0280, NV20, "NVidia GeForce4 Ti 4800"}, \
+ {0x10DE, 0x0281, NV20, "NVidia GeForce4 Ti 4200 with AGP8X"}, \
+ {0x10DE, 0x0282, NV20, "NVidia GeForce4 Ti 4800 SE"}, \
+ {0x10DE, 0x0286, NV20, "NVidia GeForce4 4200 Go"}, \
+ {0x10DE, 0x028C, NV20, "NVidia Quadro4 700 GoGL"}, \
+ {0x10DE, 0x0288, NV20, "NVidia Quadro4 980 XGL"}, \
+ {0x10DE, 0x0289, NV20, "NVidia Quadro4 780 XGL"}, \
+ {0x10DE, 0x0301, NV30, "NVidia GeForce FX 5800 Ultra"}, \
+ {0x10DE, 0x0302, NV30, "NVidia GeForce FX 5800"}, \
+ {0x10DE, 0x0308, NV30, "NVidia Quadro FX 2000"}, \
+ {0x10DE, 0x0309, NV30, "NVidia Quadro FX 1000"}, \
+ {0x10DE, 0x0311, NV30, "NVidia GeForce FX 5600 Ultra"}, \
+ {0x10DE, 0x0312, NV30, "NVidia GeForce FX 5600"}, \
+ {0x10DE, 0x0313, NV30, "NVidia 0x0313"}, \
+ {0x10DE, 0x0314, NV30, "NVidia GeForce FX 5600SE"}, \
+ {0x10DE, 0x0316, NV30, "NVidia 0x0316"}, \
+ {0x10DE, 0x0317, NV30, "NVidia 0x0317"}, \
+ {0x10DE, 0x031A, NV30, "NVidia GeForce FX Go5600"}, \
+ {0x10DE, 0x031B, NV30, "NVidia GeForce FX Go5650"}, \
+ {0x10DE, 0x031C, NV30, "NVidia Quadro FX Go700"}, \
+ {0x10DE, 0x031D, NV30, "NVidia 0x031D"}, \
+ {0x10DE, 0x031E, NV30, "NVidia 0x031E"}, \
+ {0x10DE, 0x031F, NV30, "NVidia 0x031F"}, \
+ {0x10DE, 0x0320, NV30, "NVidia GeForce FX 5200"}, \
+ {0x10DE, 0x0321, NV30, "NVidia GeForce FX 5200 Ultra"}, \
+ {0x10DE, 0x0322, NV30, "NVidia GeForce FX 5200"}, \
+ {0x10DE, 0x0323, NV30, "NVidia GeForce FX 5200SE"}, \
+ {0x10DE, 0x0324, NV30, "NVidia GeForce FX Go5200"}, \
+ {0x10DE, 0x0325, NV30, "NVidia GeForce FX Go5250"}, \
+ {0x10DE, 0x0326, NV30, "NVidia GeForce FX 5500"}, \
+ {0x10DE, 0x0327, NV30, "NVidia GeForce FX 5100"}, \
+ {0x10DE, 0x0328, NV30, "NVidia GeForce FX Go5200 32M/64M"}, \
+ {0x10DE, 0x0329, NV30, "NVidia GeForce FX 5200 (Mac)"}, \
+ {0x10DE, 0x032A, NV30, "NVidia Quadro NVS 280 PCI"}, \
+ {0x10DE, 0x032B, NV30, "NVidia Quadro FX 500/600 PCI"}, \
+ {0x10DE, 0x032C, NV30, "NVidia GeForce FX Go53xx Series"}, \
+ {0x10DE, 0x032D, NV30, "NVidia GeForce FX Go5100"}, \
+ {0x10DE, 0x032F, NV30, "NVidia 0x032F"}, \
+ {0x10DE, 0x0330, NV30, "NVidia GeForce FX 5900 Ultra"}, \
+ {0x10DE, 0x0331, NV30, "NVidia GeForce FX 5900"}, \
+ {0x10DE, 0x0332, NV30, "NVidia GeForce FX 5900XT"}, \
+ {0x10DE, 0x0333, NV30, "NVidia GeForce FX 5950 Ultra"}, \
+ {0x10DE, 0x033F, NV30, "NVidia Quadro FX 700"}, \
+ {0x10DE, 0x0334, NV30, "NVidia GeForce FX 5900ZT"}, \
+ {0x10DE, 0x0338, NV30, "NVidia Quadro FX 3000"}, \
+ {0x10DE, 0x0341, NV30, "NVidia GeForce FX 5700 Ultra"}, \
+ {0x10DE, 0x0342, NV30, "NVidia GeForce FX 5700"}, \
+ {0x10DE, 0x0343, NV30, "NVidia GeForce FX 5700LE"}, \
+ {0x10DE, 0x0344, NV30, "NVidia GeForce FX 5700VE"}, \
+ {0x10DE, 0x0345, NV30, "NVidia 0x0345"}, \
+ {0x10DE, 0x0347, NV30, "NVidia GeForce FX Go5700"}, \
+ {0x10DE, 0x0348, NV30, "NVidia GeForce FX Go5700"}, \
+ {0x10DE, 0x0349, NV30, "NVidia 0x0349"}, \
+ {0x10DE, 0x034B, NV30, "NVidia 0x034B"}, \
+ {0x10DE, 0x034C, NV30, "NVidia Quadro FX Go1000"}, \
+ {0x10DE, 0x034E, NV30, "NVidia Quadro FX 1100"}, \
+ {0x10DE, 0x034F, NV30, "NVidia 0x034F"}, \
+ {0x10DE, 0x0040, NV40, "NVidia GeForce 6800 Ultra"}, \
+ {0x10DE, 0x0041, NV40, "NVidia GeForce 6800"}, \
+ {0x10DE, 0x0042, NV40, "NVidia GeForce 6800 LE"}, \
+ {0x10DE, 0x0043, NV40, "NVidia 0x0043"}, \
+ {0x10DE, 0x0045, NV40, "NVidia GeForce 6800 GT"}, \
+ {0x10DE, 0x0046, NV40, "NVidia GeForce 6800 GT"}, \
+ {0x10DE, 0x0049, NV40, "NVidia 0x0049"}, \
+ {0x10DE, 0x004E, NV40, "NVidia Quadro FX 4000"}, \
+ {0x10DE, 0x00C0, NV40, "NVidia 0x00C0"}, \
+ {0x10DE, 0x00C1, NV40, "NVidia GeForce 6800"}, \
+ {0x10DE, 0x00C2, NV40, "NVidia GeForce 6800 LE"}, \
+ {0x10DE, 0x00C8, NV40, "NVidia GeForce Go 6800"}, \
+ {0x10DE, 0x00C9, NV40, "NVidia GeForce Go 6800 Ultra"}, \
+ {0x10DE, 0x00CC, NV40, "NVidia Quadro FX Go1400"}, \
+ {0x10DE, 0x00CD, NV40, "NVidia Quadro FX 3450/4000 SDI"}, \
+ {0x10DE, 0x00CE, NV40, "NVidia Quadro FX 1400"}, \
+ {0x10de, 0x00f0, NV40, "Nvidia GeForce 6600 GT"}, \
+ {0x10de, 0x00f1, NV40, "Nvidia GeForce 6600 GT"}, \
+ {0x10DE, 0x0140, NV40, "NVidia GeForce 6600 GT"}, \
+ {0x10DE, 0x0141, NV40, "NVidia GeForce 6600"}, \
+ {0x10DE, 0x0142, NV40, "NVidia GeForce 6600 LE"}, \
+ {0x10DE, 0x0143, NV40, "NVidia 0x0143"}, \
+ {0x10DE, 0x0144, NV40, "NVidia GeForce Go 6600"}, \
+ {0x10DE, 0x0145, NV40, "NVidia GeForce 6610 XL"}, \
+ {0x10DE, 0x0146, NV40, "NVidia GeForce Go 6600 TE/6200 TE"}, \
+ {0x10DE, 0x0147, NV40, "NVidia GeForce 6700 XL"}, \
+ {0x10DE, 0x0148, NV40, "NVidia GeForce Go 6600"}, \
+ {0x10DE, 0x0149, NV40, "NVidia GeForce Go 6600 GT"}, \
+ {0x10DE, 0x014B, NV40, "NVidia 0x014B"}, \
+ {0x10DE, 0x014C, NV40, "NVidia 0x014C"}, \
+ {0x10DE, 0x014D, NV40, "NVidia 0x014D"}, \
+ {0x10DE, 0x014E, NV40, "NVidia Quadro FX 540"}, \
+ {0x10DE, 0x014F, NV40, "NVidia GeForce 6200"}, \
+ {0x10DE, 0x0160, NV40, "NVidia 0x0160"}, \
+ {0x10DE, 0x0161, NV40, "NVidia GeForce 6200 TurboCache(TM)"}, \
+ {0x10DE, 0x0162, NV40, "NVidia GeForce 6200SE TurboCache(TM)"}, \
+ {0x10DE, 0x0163, NV40, "NVidia 0x0163"}, \
+ {0x10DE, 0x0164, NV40, "NVidia GeForce Go 6200"}, \
+ {0x10DE, 0x0165, NV40, "NVidia Quadro NVS 285"}, \
+ {0x10DE, 0x0166, NV40, "NVidia GeForce Go 6400"}, \
+ {0x10DE, 0x0167, NV40, "NVidia GeForce Go 6200"}, \
+ {0x10DE, 0x0168, NV40, "NVidia GeForce Go 6400"}, \
+ {0x10DE, 0x0169, NV40, "NVidia 0x0169"}, \
+ {0x10DE, 0x016B, NV40, "NVidia 0x016B"}, \
+ {0x10DE, 0x016C, NV40, "NVidia 0x016C"}, \
+ {0x10DE, 0x016D, NV40, "NVidia 0x016D"}, \
+ {0x10DE, 0x016E, NV40, "NVidia 0x016E"}, \
+ {0x10DE, 0x0210, NV40, "NVidia 0x0210"}, \
+ {0x10DE, 0x0211, NV40, "NVidia GeForce 6800"}, \
+ {0x10DE, 0x0212, NV40, "NVidia GeForce 6800 LE"}, \
+ {0x10DE, 0x0215, NV40, "NVidia GeForce 6800 GT"}, \
+ {0x10DE, 0x0220, NV40, "NVidia 0x0220"}, \
+ {0x10DE, 0x0221, NV40, "NVidia GeForce 6200"}, \
+ {0x10DE, 0x0222, NV40, "NVidia 0x0222"}, \
+ {0x10DE, 0x0228, NV40, "NVidia 0x0228"}, \
+ {0x10DE, 0x0090, NV40, "NVidia 0x0090"}, \
+ {0x10DE, 0x0091, NV40, "NVidia GeForce 7800 GTX"}, \
+ {0x10DE, 0x0092, NV40, "NVidia 0x0092"}, \
+ {0x10DE, 0x0093, NV40, "NVidia 0x0093"}, \
+ {0x10DE, 0x0094, NV40, "NVidia 0x0094"}, \
+ {0x10DE, 0x0098, NV40, "NVidia 0x0098"}, \
+ {0x10DE, 0x0099, NV40, "NVidia GeForce Go 7800 GTX"}, \
+ {0x10DE, 0x009C, NV40, "NVidia 0x009C"}, \
+ {0x10DE, 0x009D, NV40, "NVidia Quadro FX 4500"}, \
+ {0x10DE, 0x009E, NV40, "NVidia 0x009E"}, \
+ {0, 0, 0, NULL}
+
+#define xgi_PCI_IDS \
+ {0x18ca, 0x2200, 0, "XP5"}, \
+ {0x18ca, 0x0047, 0, "XP10 / XG47"}, \
+ {0, 0, 0, NULL}
diff --git a/sys/dev/drm2/drm_sarea.h b/sys/dev/drm2/drm_sarea.h
new file mode 100644
index 000000000000..9f37fcba6eda
--- /dev/null
+++ b/sys/dev/drm2/drm_sarea.h
@@ -0,0 +1,87 @@
+/**
+ * \file drm_sarea.h
+ * \brief SAREA definitions
+ *
+ * \author Michel D�zer <michel@daenzer.net>
+ */
+
+/*-
+ * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * 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 (including the next
+ * paragraph) 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
+ * TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#ifndef _DRM_SAREA_H_
+#define _DRM_SAREA_H_
+
+#include <dev/drm2/drm.h>
+
+/* SAREA area needs to be at least a page */
+#if defined(__alpha__)
+#define SAREA_MAX 0x2000
+#elif defined(__ia64__)
+#define SAREA_MAX 0x10000 /* 64kB */
+#else
+/* Intel 830M driver needs at least 8k SAREA */
+#define SAREA_MAX 0x2000UL
+#endif
+
+/** Maximum number of drawables in the SAREA */
+#define SAREA_MAX_DRAWABLES 256
+
+#define SAREA_DRAWABLE_CLAIMED_ENTRY 0x80000000
+
+/** SAREA drawable */
+struct drm_sarea_drawable {
+ unsigned int stamp;
+ unsigned int flags;
+};
+
+/** SAREA frame */
+struct drm_sarea_frame {
+ unsigned int x;
+ unsigned int y;
+ unsigned int width;
+ unsigned int height;
+ unsigned int fullscreen;
+};
+
+/** SAREA */
+struct drm_sarea {
+ /** first thing is always the DRM locking structure */
+ struct drm_hw_lock lock;
+ /** \todo Use readers/writer lock for drm_sarea::drawable_lock */
+ struct drm_hw_lock drawable_lock;
+ struct drm_sarea_drawable drawableTable[SAREA_MAX_DRAWABLES]; /**< drawables */
+ struct drm_sarea_frame frame; /**< frame */
+ drm_context_t dummy_context;
+};
+
+#ifndef __KERNEL__
+typedef struct drm_sarea_drawable drm_sarea_drawable_t;
+typedef struct drm_sarea_frame drm_sarea_frame_t;
+typedef struct drm_sarea drm_sarea_t;
+#endif
+
+#endif /* _DRM_SAREA_H_ */
diff --git a/sys/dev/drm2/drm_scatter.c b/sys/dev/drm2/drm_scatter.c
new file mode 100644
index 000000000000..ecf231f27c7d
--- /dev/null
+++ b/sys/dev/drm2/drm_scatter.c
@@ -0,0 +1,129 @@
+/*-
+ * Copyright (c) 2009 Robert C. Noland III <rnoland@FreeBSD.org>
+ * 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 (including the next
+ * paragraph) 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
+ * PRECISION INSIGHT AND/OR ITS SUPPLIERS 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_scatter.c
+ * Allocation of memory for scatter-gather mappings by the graphics chip.
+ * The memory allocated here is then made into an aperture in the card
+ * by mapping the pages into the GART.
+ */
+
+#include <dev/drm2/drmP.h>
+
+int
+drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather *request)
+{
+ struct drm_sg_mem *entry;
+ vm_size_t size;
+ vm_pindex_t pindex;
+
+ if (dev->sg)
+ return EINVAL;
+
+ DRM_DEBUG("request size=%ld\n", request->size);
+
+ entry = malloc(sizeof(*entry), DRM_MEM_DRIVER, M_WAITOK | M_ZERO);
+
+ size = round_page(request->size);
+ entry->pages = OFF_TO_IDX(size);
+ entry->busaddr = malloc(entry->pages * sizeof(*entry->busaddr),
+ DRM_MEM_SGLISTS, M_WAITOK | M_ZERO);
+
+ entry->vaddr = kmem_alloc_attr(kernel_map, size, M_WAITOK | M_ZERO,
+ 0, BUS_SPACE_MAXADDR_32BIT, VM_MEMATTR_WRITE_COMBINING);
+ if (entry->vaddr == 0) {
+ drm_sg_cleanup(entry);
+ return (ENOMEM);
+ }
+
+ for(pindex = 0; pindex < entry->pages; pindex++) {
+ entry->busaddr[pindex] =
+ vtophys(entry->vaddr + IDX_TO_OFF(pindex));
+ }
+
+ DRM_LOCK(dev);
+ if (dev->sg) {
+ DRM_UNLOCK(dev);
+ drm_sg_cleanup(entry);
+ return (EINVAL);
+ }
+ dev->sg = entry;
+ DRM_UNLOCK(dev);
+
+ request->handle = entry->vaddr;
+
+ DRM_DEBUG("allocated %ju pages @ 0x%08zx, contents=%08lx\n",
+ entry->pages, entry->vaddr, *(unsigned long *)entry->vaddr);
+
+ return (0);
+}
+
+int
+drm_sg_alloc_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_scatter_gather *request = data;
+
+ DRM_DEBUG("\n");
+
+ return (drm_sg_alloc(dev, request));
+}
+
+void
+drm_sg_cleanup(struct drm_sg_mem *entry)
+{
+ if (entry == NULL)
+ return;
+
+ if (entry->vaddr != 0)
+ kmem_free(kernel_map, entry->vaddr, IDX_TO_OFF(entry->pages));
+
+ free(entry->busaddr, DRM_MEM_SGLISTS);
+ free(entry, DRM_MEM_DRIVER);
+
+ return;
+}
+
+int
+drm_sg_free(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ struct drm_scatter_gather *request = data;
+ struct drm_sg_mem *entry;
+
+ DRM_LOCK(dev);
+ entry = dev->sg;
+ dev->sg = NULL;
+ DRM_UNLOCK(dev);
+
+ if (!entry || entry->vaddr != request->handle)
+ return (EINVAL);
+
+ DRM_DEBUG("free 0x%zx\n", entry->vaddr);
+
+ drm_sg_cleanup(entry);
+
+ return (0);
+}
diff --git a/sys/dev/drm2/drm_sman.c b/sys/dev/drm2/drm_sman.c
new file mode 100644
index 000000000000..1c1e4af32259
--- /dev/null
+++ b/sys/dev/drm2/drm_sman.c
@@ -0,0 +1,352 @@
+/**************************************************************************
+ *
+ * Copyright 2006 Tungsten Graphics, Inc., Bismarck., ND., USA.
+ * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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.
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ *
+ **************************************************************************/
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Simple memory manager interface that keeps track on allocate regions on a
+ * per "owner" basis. All regions associated with an "owner" can be released
+ * with a simple call. Typically if the "owner" exists. The owner is any
+ * "unsigned long" identifier. Can typically be a pointer to a file private
+ * struct or a context identifier.
+ *
+ * Authors:
+ * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ */
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm_sman.h>
+
+struct drm_owner_item {
+ struct drm_hash_item owner_hash;
+ struct list_head sman_list;
+ struct list_head mem_blocks;
+};
+
+void drm_sman_takedown(struct drm_sman * sman)
+{
+ drm_ht_remove(&sman->user_hash_tab);
+ drm_ht_remove(&sman->owner_hash_tab);
+ if (sman->mm)
+ drm_free(sman->mm, sman->num_managers * sizeof(*sman->mm),
+ DRM_MEM_MM);
+}
+
+int
+drm_sman_init(struct drm_sman * sman, unsigned int num_managers,
+ unsigned int user_order, unsigned int owner_order)
+{
+ int ret = 0;
+
+ sman->mm = (struct drm_sman_mm *) drm_calloc(num_managers,
+ sizeof(*sman->mm), DRM_MEM_MM);
+ if (!sman->mm) {
+ ret = -ENOMEM;
+ goto out;
+ }
+ sman->num_managers = num_managers;
+ INIT_LIST_HEAD(&sman->owner_items);
+ ret = drm_ht_create(&sman->owner_hash_tab, owner_order);
+ if (ret)
+ goto out1;
+ ret = drm_ht_create(&sman->user_hash_tab, user_order);
+ if (!ret)
+ goto out;
+
+ drm_ht_remove(&sman->owner_hash_tab);
+out1:
+ drm_free(sman->mm, num_managers * sizeof(*sman->mm), DRM_MEM_MM);
+out:
+ return ret;
+}
+
+static void *drm_sman_mm_allocate(void *private, unsigned long size,
+ unsigned alignment)
+{
+ struct drm_mm *mm = (struct drm_mm *) private;
+ struct drm_mm_node *tmp;
+
+ tmp = drm_mm_search_free(mm, size, alignment, 1);
+ if (!tmp) {
+ return NULL;
+ }
+ /* This could be non-atomic, but we are called from a locked path */
+ tmp = drm_mm_get_block_atomic(tmp, size, alignment);
+ return tmp;
+}
+
+static void drm_sman_mm_free(void *private, void *ref)
+{
+ struct drm_mm_node *node = (struct drm_mm_node *) ref;
+
+ drm_mm_put_block(node);
+}
+
+static void drm_sman_mm_destroy(void *private)
+{
+ struct drm_mm *mm = (struct drm_mm *) private;
+ drm_mm_takedown(mm);
+ drm_free(mm, sizeof(*mm), DRM_MEM_MM);
+}
+
+static unsigned long drm_sman_mm_offset(void *private, void *ref)
+{
+ struct drm_mm_node *node = (struct drm_mm_node *) ref;
+ return node->start;
+}
+
+int
+drm_sman_set_range(struct drm_sman * sman, unsigned int manager,
+ unsigned long start, unsigned long size)
+{
+ struct drm_sman_mm *sman_mm;
+ struct drm_mm *mm;
+ int ret;
+
+ KASSERT(manager < sman->num_managers, ("Invalid manager"));
+
+ sman_mm = &sman->mm[manager];
+ mm = malloc(sizeof(*mm), DRM_MEM_MM, M_NOWAIT | M_ZERO);
+ if (!mm) {
+ return -ENOMEM;
+ }
+ sman_mm->private = mm;
+ ret = drm_mm_init(mm, start, size);
+
+ if (ret) {
+ drm_free(mm, sizeof(*mm), DRM_MEM_MM);
+ return ret;
+ }
+
+ sman_mm->allocate = drm_sman_mm_allocate;
+ sman_mm->free = drm_sman_mm_free;
+ sman_mm->destroy = drm_sman_mm_destroy;
+ sman_mm->offset = drm_sman_mm_offset;
+
+ return 0;
+}
+
+int
+drm_sman_set_manager(struct drm_sman * sman, unsigned int manager,
+ struct drm_sman_mm * allocator)
+{
+ KASSERT(manager < sman->num_managers, ("Invalid manager"));
+ sman->mm[manager] = *allocator;
+
+ return 0;
+}
+
+static struct drm_owner_item *drm_sman_get_owner_item(struct drm_sman * sman,
+ unsigned long owner)
+{
+ int ret;
+ struct drm_hash_item *owner_hash_item;
+ struct drm_owner_item *owner_item;
+
+ ret = drm_ht_find_item(&sman->owner_hash_tab, owner, &owner_hash_item);
+ if (!ret) {
+ return drm_hash_entry(owner_hash_item, struct drm_owner_item,
+ owner_hash);
+ }
+
+ owner_item = malloc(sizeof(*owner_item), DRM_MEM_MM, M_NOWAIT | M_ZERO);
+ if (!owner_item)
+ goto out;
+
+ INIT_LIST_HEAD(&owner_item->mem_blocks);
+ owner_item->owner_hash.key = owner;
+ DRM_DEBUG("owner_item = %p, mem_blocks = %p\n", owner_item, &owner_item->mem_blocks);
+ if (drm_ht_insert_item(&sman->owner_hash_tab, &owner_item->owner_hash))
+ goto out1;
+
+ list_add_tail(&owner_item->sman_list, &sman->owner_items);
+ return owner_item;
+
+out1:
+ drm_free(owner_item, sizeof(*owner_item), DRM_MEM_MM);
+out:
+ return NULL;
+}
+
+struct drm_memblock_item *drm_sman_alloc(struct drm_sman *sman, unsigned int manager,
+ unsigned long size, unsigned alignment,
+ unsigned long owner)
+{
+ void *tmp;
+ struct drm_sman_mm *sman_mm;
+ struct drm_owner_item *owner_item;
+ struct drm_memblock_item *memblock;
+
+ KASSERT(manager < sman->num_managers, ("Invalid manager"));
+
+ sman_mm = &sman->mm[manager];
+ tmp = sman_mm->allocate(sman_mm->private, size, alignment);
+ if (!tmp) {
+ return NULL;
+ }
+
+ memblock = malloc(sizeof(*memblock), DRM_MEM_MM, M_NOWAIT | M_ZERO);
+ DRM_DEBUG("allocated mem_block %p\n", memblock);
+ if (!memblock)
+ goto out;
+
+ memblock->mm_info = tmp;
+ memblock->mm = sman_mm;
+ memblock->sman = sman;
+ INIT_LIST_HEAD(&memblock->owner_list);
+
+ if (drm_ht_just_insert_please
+ (&sman->user_hash_tab, &memblock->user_hash,
+ (unsigned long)memblock, 32, 0, 0))
+ goto out1;
+
+ owner_item = drm_sman_get_owner_item(sman, owner);
+ if (!owner_item)
+ goto out2;
+
+ DRM_DEBUG("owner_item = %p, mem_blocks = %p\n", owner_item, &owner_item->mem_blocks);
+ DRM_DEBUG("owner_list.prev = %p, mem_blocks.prev = %p\n", memblock->owner_list.prev, owner_item->mem_blocks.prev);
+ DRM_DEBUG("owner_list.next = %p, mem_blocks.next = %p\n", memblock->owner_list.next, owner_item->mem_blocks.next);
+ list_add_tail(&memblock->owner_list, &owner_item->mem_blocks);
+
+ DRM_DEBUG("Complete\n");
+ return memblock;
+
+out2:
+ drm_ht_remove_item(&sman->user_hash_tab, &memblock->user_hash);
+out1:
+ drm_free(memblock, sizeof(*memblock), DRM_MEM_MM);
+out:
+ sman_mm->free(sman_mm->private, tmp);
+
+ return NULL;
+}
+
+static void drm_sman_free(struct drm_memblock_item *item)
+{
+ struct drm_sman *sman = item->sman;
+
+ list_del(&item->owner_list);
+ drm_ht_remove_item(&sman->user_hash_tab, &item->user_hash);
+ item->mm->free(item->mm->private, item->mm_info);
+ drm_free(item, sizeof(*item), DRM_MEM_MM);
+}
+
+int drm_sman_free_key(struct drm_sman *sman, unsigned int key)
+{
+ struct drm_hash_item *hash_item;
+ struct drm_memblock_item *memblock_item;
+
+ if (drm_ht_find_item(&sman->user_hash_tab, key, &hash_item))
+ return -EINVAL;
+
+ memblock_item = drm_hash_entry(hash_item, struct drm_memblock_item,
+ user_hash);
+ drm_sman_free(memblock_item);
+ return 0;
+}
+
+static void drm_sman_remove_owner(struct drm_sman *sman,
+ struct drm_owner_item *owner_item)
+{
+ list_del(&owner_item->sman_list);
+ drm_ht_remove_item(&sman->owner_hash_tab, &owner_item->owner_hash);
+ drm_free(owner_item, sizeof(*owner_item), DRM_MEM_MM);
+}
+
+int drm_sman_owner_clean(struct drm_sman *sman, unsigned long owner)
+{
+
+ struct drm_hash_item *hash_item;
+ struct drm_owner_item *owner_item;
+
+ if (drm_ht_find_item(&sman->owner_hash_tab, owner, &hash_item)) {
+ return -1;
+ }
+
+ owner_item = drm_hash_entry(hash_item, struct drm_owner_item, owner_hash);
+ DRM_DEBUG("cleaning owner_item %p\n", owner_item);
+ if (owner_item->mem_blocks.next == &owner_item->mem_blocks) {
+ drm_sman_remove_owner(sman, owner_item);
+ return -1;
+ }
+
+ return 0;
+}
+
+static void drm_sman_do_owner_cleanup(struct drm_sman *sman,
+ struct drm_owner_item *owner_item)
+{
+ struct drm_memblock_item *entry, *next;
+
+ list_for_each_entry_safe(entry, next, &owner_item->mem_blocks,
+ owner_list) {
+ DRM_DEBUG("freeing mem_block %p\n", entry);
+ drm_sman_free(entry);
+ }
+ drm_sman_remove_owner(sman, owner_item);
+}
+
+void drm_sman_owner_cleanup(struct drm_sman *sman, unsigned long owner)
+{
+
+ struct drm_hash_item *hash_item;
+ struct drm_owner_item *owner_item;
+
+ if (drm_ht_find_item(&sman->owner_hash_tab, owner, &hash_item)) {
+
+ return;
+ }
+
+ owner_item = drm_hash_entry(hash_item, struct drm_owner_item, owner_hash);
+ drm_sman_do_owner_cleanup(sman, owner_item);
+}
+
+void drm_sman_cleanup(struct drm_sman *sman)
+{
+ struct drm_owner_item *entry, *next;
+ unsigned int i;
+ struct drm_sman_mm *sman_mm;
+
+ DRM_DEBUG("sman = %p, owner_items = %p\n",
+ sman, &sman->owner_items);
+ list_for_each_entry_safe(entry, next, &sman->owner_items, sman_list) {
+ DRM_DEBUG("cleaning owner_item = %p\n", entry);
+ drm_sman_do_owner_cleanup(sman, entry);
+ }
+ if (sman->mm) {
+ for (i = 0; i < sman->num_managers; ++i) {
+ sman_mm = &sman->mm[i];
+ if (sman_mm->private) {
+ sman_mm->destroy(sman_mm->private);
+ sman_mm->private = NULL;
+ }
+ }
+ }
+}
diff --git a/sys/dev/drm2/drm_sman.h b/sys/dev/drm2/drm_sman.h
new file mode 100644
index 000000000000..3b1693fb0ba8
--- /dev/null
+++ b/sys/dev/drm2/drm_sman.h
@@ -0,0 +1,181 @@
+/**************************************************************************
+ *
+ * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND., USA.
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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.
+ *
+ *
+ **************************************************************************/
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Simple memory MANager interface that keeps track on allocate regions on a
+ * per "owner" basis. All regions associated with an "owner" can be released
+ * with a simple call. Typically if the "owner" exists. The owner is any
+ * "unsigned long" identifier. Can typically be a pointer to a file private
+ * struct or a context identifier.
+ *
+ * Authors:
+ * Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ */
+
+#ifndef DRM_SMAN_H
+#define DRM_SMAN_H
+
+#include <dev/drm2/drm_hashtab.h>
+#include <dev/drm2/drm_linux_list.h>
+#include <dev/drm2/drm_mm.h>
+
+/*
+ * A class that is an abstration of a simple memory allocator.
+ * The sman implementation provides a default such allocator
+ * using the drm_mm.c implementation. But the user can replace it.
+ * See the SiS implementation, which may use the SiS FB kernel module
+ * for memory management.
+ */
+
+struct drm_sman_mm {
+ /* private info. If allocated, needs to be destroyed by the destroy
+ function */
+ void *private;
+
+ /* Allocate a memory block with given size and alignment.
+ Return an opaque reference to the memory block */
+
+ void *(*allocate) (void *private, unsigned long size,
+ unsigned alignment);
+
+ /* Free a memory block. "ref" is the opaque reference that we got from
+ the "alloc" function */
+
+ void (*free) (void *private, void *ref);
+
+ /* Free all resources associated with this allocator */
+
+ void (*destroy) (void *private);
+
+ /* Return a memory offset from the opaque reference returned from the
+ "alloc" function */
+
+ unsigned long (*offset) (void *private, void *ref);
+};
+
+struct drm_memblock_item {
+ struct list_head owner_list;
+ struct drm_hash_item user_hash;
+ void *mm_info;
+ struct drm_sman_mm *mm;
+ struct drm_sman *sman;
+};
+
+struct drm_sman {
+ struct drm_sman_mm *mm;
+ int num_managers;
+ struct drm_open_hash owner_hash_tab;
+ struct drm_open_hash user_hash_tab;
+ struct list_head owner_items;
+};
+
+/*
+ * Take down a memory manager. This function should only be called after a
+ * successful init and after a call to drm_sman_cleanup.
+ */
+
+extern void drm_sman_takedown(struct drm_sman * sman);
+
+/*
+ * Allocate structures for a manager.
+ * num_managers are the number of memory pools to manage. (VRAM, AGP, ....)
+ * user_order is the log2 of the number of buckets in the user hash table.
+ * set this to approximately log2 of the max number of memory regions
+ * that will be allocated for _all_ pools together.
+ * owner_order is the log2 of the number of buckets in the owner hash table.
+ * set this to approximately log2 of
+ * the number of client file connections that will
+ * be using the manager.
+ *
+ */
+
+extern int drm_sman_init(struct drm_sman * sman, unsigned int num_managers,
+ unsigned int user_order, unsigned int owner_order);
+
+/*
+ * Initialize a drm_mm.c allocator. Should be called only once for each
+ * manager unless a customized allogator is used.
+ */
+
+extern int drm_sman_set_range(struct drm_sman * sman, unsigned int manager,
+ unsigned long start, unsigned long size);
+
+/*
+ * Initialize a customized allocator for one of the managers.
+ * (See the SiS module). The object pointed to by "allocator" is copied,
+ * so it can be destroyed after this call.
+ */
+
+extern int drm_sman_set_manager(struct drm_sman * sman, unsigned int mananger,
+ struct drm_sman_mm * allocator);
+
+/*
+ * Allocate a memory block. Aligment is not implemented yet.
+ */
+
+extern struct drm_memblock_item *drm_sman_alloc(struct drm_sman * sman,
+ unsigned int manager,
+ unsigned long size,
+ unsigned alignment,
+ unsigned long owner);
+/*
+ * Free a memory block identified by its user hash key.
+ */
+
+extern int drm_sman_free_key(struct drm_sman * sman, unsigned int key);
+
+/*
+ * returns 1 iff there are no stale memory blocks associated with this owner.
+ * Typically called to determine if we need to idle the hardware and call
+ * drm_sman_owner_cleanup. If there are no stale memory blocks, it removes all
+ * resources associated with owner.
+ */
+
+extern int drm_sman_owner_clean(struct drm_sman * sman, unsigned long owner);
+
+/*
+ * Frees all stale memory blocks associated with this owner. Note that this
+ * requires that the hardware is finished with all blocks, so the graphics engine
+ * should be idled before this call is made. This function also frees
+ * any resources associated with "owner" and should be called when owner
+ * is not going to be referenced anymore.
+ */
+
+extern void drm_sman_owner_cleanup(struct drm_sman * sman, unsigned long owner);
+
+/*
+ * Frees all stale memory blocks associated with the memory manager.
+ * See idling above.
+ */
+
+extern void drm_sman_cleanup(struct drm_sman * sman);
+
+#endif
diff --git a/sys/dev/drm2/drm_stub.c b/sys/dev/drm2/drm_stub.c
new file mode 100644
index 000000000000..2c87dec79153
--- /dev/null
+++ b/sys/dev/drm2/drm_stub.c
@@ -0,0 +1,60 @@
+/**
+ * \file drm_stub.h
+ * Stub support
+ *
+ * \author Rickard E. (Rik) Faith <faith@valinux.com>
+ */
+
+/*
+ * Created: Fri Jan 19 10:48:35 2001 by faith@acm.org
+ *
+ * Copyright 2001 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * PRECISION INSIGHT AND/OR ITS SUPPLIERS 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "drmP.h"
+
+int
+drm_setmaster_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+
+ DRM_DEBUG("setmaster\n");
+
+ if (file_priv->master != 0)
+ return (0);
+ return (-EPERM);
+}
+
+int
+drm_dropmaster_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+
+ DRM_DEBUG("dropmaster\n");
+ if (file_priv->master != 0)
+ return (-EINVAL);
+ return (0);
+}
diff --git a/sys/dev/drm2/drm_sysctl.c b/sys/dev/drm2/drm_sysctl.c
new file mode 100644
index 000000000000..33048c78a5d7
--- /dev/null
+++ b/sys/dev/drm2/drm_sysctl.c
@@ -0,0 +1,364 @@
+/*-
+ * Copyright 2003 Eric Anholt
+ * 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 (including the next
+ * paragraph) 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
+ * ERIC ANHOLT 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_sysctl.c
+ * Implementation of various sysctls for controlling DRM behavior and reporting
+ * debug information.
+ */
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+
+#include <sys/sysctl.h>
+
+static int drm_name_info DRM_SYSCTL_HANDLER_ARGS;
+static int drm_vm_info DRM_SYSCTL_HANDLER_ARGS;
+static int drm_clients_info DRM_SYSCTL_HANDLER_ARGS;
+static int drm_bufs_info DRM_SYSCTL_HANDLER_ARGS;
+static int drm_vblank_info DRM_SYSCTL_HANDLER_ARGS;
+
+struct drm_sysctl_list {
+ const char *name;
+ int (*f) DRM_SYSCTL_HANDLER_ARGS;
+} drm_sysctl_list[] = {
+ {"name", drm_name_info},
+ {"vm", drm_vm_info},
+ {"clients", drm_clients_info},
+ {"bufs", drm_bufs_info},
+ {"vblank", drm_vblank_info},
+};
+#define DRM_SYSCTL_ENTRIES (sizeof(drm_sysctl_list)/sizeof(drm_sysctl_list[0]))
+
+struct drm_sysctl_info {
+ struct sysctl_ctx_list ctx;
+ char name[2];
+};
+
+int drm_sysctl_init(struct drm_device *dev)
+{
+ struct drm_sysctl_info *info;
+ struct sysctl_oid *oid;
+ struct sysctl_oid *top, *drioid;
+ int i;
+
+ info = malloc(sizeof *info, DRM_MEM_DRIVER, M_WAITOK | M_ZERO);
+ dev->sysctl = info;
+
+ /* Add the sysctl node for DRI if it doesn't already exist */
+ drioid = SYSCTL_ADD_NODE(&info->ctx, &sysctl__hw_children, OID_AUTO,
+ "dri", CTLFLAG_RW, NULL, "DRI Graphics");
+ if (!drioid)
+ return 1;
+
+ /* Find the next free slot under hw.dri */
+ i = 0;
+ SLIST_FOREACH(oid, SYSCTL_CHILDREN(drioid), oid_link) {
+ if (i <= oid->oid_arg2)
+ i = oid->oid_arg2 + 1;
+ }
+ if (i > 9)
+ return (1);
+
+ dev->sysctl_node_idx = i;
+ /* Add the hw.dri.x for our device */
+ info->name[0] = '0' + i;
+ info->name[1] = 0;
+ top = SYSCTL_ADD_NODE(&info->ctx, SYSCTL_CHILDREN(drioid),
+ OID_AUTO, info->name, CTLFLAG_RW, NULL, NULL);
+ if (!top)
+ return 1;
+
+ for (i = 0; i < DRM_SYSCTL_ENTRIES; i++) {
+ oid = SYSCTL_ADD_OID(&info->ctx,
+ SYSCTL_CHILDREN(top),
+ OID_AUTO,
+ drm_sysctl_list[i].name,
+ CTLTYPE_STRING | CTLFLAG_RD,
+ dev,
+ 0,
+ drm_sysctl_list[i].f,
+ "A",
+ NULL);
+ if (!oid)
+ return 1;
+ }
+ SYSCTL_ADD_INT(&info->ctx, SYSCTL_CHILDREN(drioid), OID_AUTO, "debug",
+ CTLFLAG_RW, &drm_debug_flag, sizeof(drm_debug_flag),
+ "Enable debugging output");
+ SYSCTL_ADD_INT(&info->ctx, SYSCTL_CHILDREN(drioid), OID_AUTO, "notyet",
+ CTLFLAG_RW, &drm_notyet_flag, sizeof(drm_debug_flag),
+ "Enable notyet reminders");
+
+ if (dev->driver->sysctl_init != NULL)
+ dev->driver->sysctl_init(dev, &info->ctx, top);
+
+ SYSCTL_ADD_INT(&info->ctx, SYSCTL_CHILDREN(drioid), OID_AUTO,
+ "vblank_offdelay", CTLFLAG_RW, &drm_vblank_offdelay,
+ sizeof(drm_vblank_offdelay),
+ "");
+ SYSCTL_ADD_INT(&info->ctx, SYSCTL_CHILDREN(drioid), OID_AUTO,
+ "timestamp_precision", CTLFLAG_RW, &drm_timestamp_precision,
+ sizeof(drm_timestamp_precision),
+ "");
+
+ return (0);
+}
+
+int drm_sysctl_cleanup(struct drm_device *dev)
+{
+ int error;
+
+ error = sysctl_ctx_free(&dev->sysctl->ctx);
+ free(dev->sysctl, DRM_MEM_DRIVER);
+ dev->sysctl = NULL;
+ if (dev->driver->sysctl_cleanup != NULL)
+ dev->driver->sysctl_cleanup(dev);
+
+ return (error);
+}
+
+#define DRM_SYSCTL_PRINT(fmt, arg...) \
+do { \
+ snprintf(buf, sizeof(buf), fmt, ##arg); \
+ retcode = SYSCTL_OUT(req, buf, strlen(buf)); \
+ if (retcode) \
+ goto done; \
+} while (0)
+
+static int drm_name_info DRM_SYSCTL_HANDLER_ARGS
+{
+ struct drm_device *dev = arg1;
+ char buf[128];
+ int retcode;
+ int hasunique = 0;
+
+ DRM_SYSCTL_PRINT("%s 0x%x", dev->driver->name, dev2udev(dev->devnode));
+
+ DRM_LOCK(dev);
+ if (dev->unique) {
+ snprintf(buf, sizeof(buf), " %s", dev->unique);
+ hasunique = 1;
+ }
+ DRM_UNLOCK(dev);
+
+ if (hasunique)
+ SYSCTL_OUT(req, buf, strlen(buf));
+
+ SYSCTL_OUT(req, "", 1);
+
+done:
+ return retcode;
+}
+
+static int drm_vm_info DRM_SYSCTL_HANDLER_ARGS
+{
+ struct drm_device *dev = arg1;
+ drm_local_map_t *map, *tempmaps;
+ const char *types[] = { "FB", "REG", "SHM", "AGP", "SG" };
+ const char *type, *yesno;
+ int i, mapcount;
+ char buf[128];
+ int retcode;
+
+ /* We can't hold the lock while doing SYSCTL_OUTs, so allocate a
+ * temporary copy of all the map entries and then SYSCTL_OUT that.
+ */
+ DRM_LOCK(dev);
+
+ mapcount = 0;
+ TAILQ_FOREACH(map, &dev->maplist, link)
+ mapcount++;
+
+ tempmaps = malloc(sizeof(drm_local_map_t) * mapcount, DRM_MEM_DRIVER,
+ M_NOWAIT);
+ if (tempmaps == NULL) {
+ DRM_UNLOCK(dev);
+ return ENOMEM;
+ }
+
+ i = 0;
+ TAILQ_FOREACH(map, &dev->maplist, link)
+ tempmaps[i++] = *map;
+
+ DRM_UNLOCK(dev);
+
+ DRM_SYSCTL_PRINT("\nslot offset size "
+ "type flags address handle mtrr\n");
+
+ for (i = 0; i < mapcount; i++) {
+ map = &tempmaps[i];
+
+ if (map->type < 0 || map->type > 4)
+ type = "??";
+ else
+ type = types[map->type];
+
+ if (!map->mtrr)
+ yesno = "no";
+ else
+ yesno = "yes";
+
+ DRM_SYSCTL_PRINT(
+ "%4d 0x%016lx 0x%08lx %4.4s 0x%02x 0x%016lx %6d %s\n",
+ i, map->offset, map->size, type, map->flags,
+ (unsigned long)map->virtual,
+ (unsigned int)((unsigned long)map->handle >>
+ DRM_MAP_HANDLE_SHIFT), yesno);
+ }
+ SYSCTL_OUT(req, "", 1);
+
+done:
+ free(tempmaps, DRM_MEM_DRIVER);
+ return retcode;
+}
+
+static int drm_bufs_info DRM_SYSCTL_HANDLER_ARGS
+{
+ struct drm_device *dev = arg1;
+ drm_device_dma_t *dma = dev->dma;
+ drm_device_dma_t tempdma;
+ int *templists;
+ int i;
+ char buf[128];
+ int retcode;
+
+ /* We can't hold the locks around DRM_SYSCTL_PRINT, so make a temporary
+ * copy of the whole structure and the relevant data from buflist.
+ */
+ DRM_LOCK(dev);
+ if (dma == NULL) {
+ DRM_UNLOCK(dev);
+ return 0;
+ }
+ DRM_SPINLOCK(&dev->dma_lock);
+ tempdma = *dma;
+ templists = malloc(sizeof(int) * dma->buf_count, DRM_MEM_DRIVER,
+ M_NOWAIT);
+ for (i = 0; i < dma->buf_count; i++)
+ templists[i] = dma->buflist[i]->list;
+ dma = &tempdma;
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ DRM_UNLOCK(dev);
+
+ DRM_SYSCTL_PRINT("\n o size count free segs pages kB\n");
+ for (i = 0; i <= DRM_MAX_ORDER; i++) {
+ if (dma->bufs[i].buf_count)
+ DRM_SYSCTL_PRINT("%2d %8d %5d %5d %5d %5d %5d\n",
+ i,
+ dma->bufs[i].buf_size,
+ dma->bufs[i].buf_count,
+ atomic_read(&dma->bufs[i]
+ .freelist.count),
+ dma->bufs[i].seg_count,
+ dma->bufs[i].seg_count
+ *(1 << dma->bufs[i].page_order),
+ (dma->bufs[i].seg_count
+ * (1 << dma->bufs[i].page_order))
+ * (int)PAGE_SIZE / 1024);
+ }
+ DRM_SYSCTL_PRINT("\n");
+ for (i = 0; i < dma->buf_count; i++) {
+ if (i && !(i%32)) DRM_SYSCTL_PRINT("\n");
+ DRM_SYSCTL_PRINT(" %d", templists[i]);
+ }
+ DRM_SYSCTL_PRINT("\n");
+
+ SYSCTL_OUT(req, "", 1);
+done:
+ free(templists, DRM_MEM_DRIVER);
+ return retcode;
+}
+
+static int drm_clients_info DRM_SYSCTL_HANDLER_ARGS
+{
+ struct drm_device *dev = arg1;
+ struct drm_file *priv, *tempprivs;
+ char buf[128];
+ int retcode;
+ int privcount, i;
+
+ DRM_LOCK(dev);
+
+ privcount = 0;
+ TAILQ_FOREACH(priv, &dev->files, link)
+ privcount++;
+
+ tempprivs = malloc(sizeof(struct drm_file) * privcount, DRM_MEM_DRIVER,
+ M_NOWAIT);
+ if (tempprivs == NULL) {
+ DRM_UNLOCK(dev);
+ return ENOMEM;
+ }
+ i = 0;
+ TAILQ_FOREACH(priv, &dev->files, link)
+ tempprivs[i++] = *priv;
+
+ DRM_UNLOCK(dev);
+
+ DRM_SYSCTL_PRINT(
+ "\na dev pid uid magic ioctls\n");
+ for (i = 0; i < privcount; i++) {
+ priv = &tempprivs[i];
+ DRM_SYSCTL_PRINT("%c %-12s %5d %5d %10u %10lu\n",
+ priv->authenticated ? 'y' : 'n',
+ devtoname(priv->dev->devnode),
+ priv->pid,
+ priv->uid,
+ priv->magic,
+ priv->ioctl_count);
+ }
+
+ SYSCTL_OUT(req, "", 1);
+done:
+ free(tempprivs, DRM_MEM_DRIVER);
+ return retcode;
+}
+
+static int drm_vblank_info DRM_SYSCTL_HANDLER_ARGS
+{
+ struct drm_device *dev = arg1;
+ char buf[128];
+ int retcode;
+ int i;
+
+ DRM_SYSCTL_PRINT("\ncrtc ref count last enabled inmodeset\n");
+ DRM_LOCK(dev);
+ if (dev->_vblank_count == NULL)
+ goto done;
+ for (i = 0 ; i < dev->num_crtcs ; i++) {
+ DRM_SYSCTL_PRINT(" %02d %02d %08d %08d %02d %02d\n",
+ i, dev->vblank_refcount[i],
+ dev->_vblank_count[i],
+ dev->last_vblank[i],
+ dev->vblank_enabled[i],
+ dev->vblank_inmodeset[i]);
+ }
+done:
+ DRM_UNLOCK(dev);
+
+ SYSCTL_OUT(req, "", -1);
+ return retcode;
+}
diff --git a/sys/dev/drm2/drm_vm.c b/sys/dev/drm2/drm_vm.c
new file mode 100644
index 000000000000..a70fe7b504f8
--- /dev/null
+++ b/sys/dev/drm2/drm_vm.c
@@ -0,0 +1,134 @@
+/*-
+ * Copyright 2003 Eric Anholt
+ * 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 (including the next
+ * paragraph) 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
+ * ERIC ANHOLT 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/** @file drm_vm.c
+ * Support code for mmaping of DRM maps.
+ */
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+
+int
+drm_mmap(struct cdev *kdev, vm_ooffset_t offset, vm_paddr_t *paddr,
+ int prot, vm_memattr_t *memattr)
+{
+ struct drm_device *dev = drm_get_device_from_kdev(kdev);
+ struct drm_file *file_priv = NULL;
+ drm_local_map_t *map;
+ enum drm_map_type type;
+ vm_paddr_t phys;
+ int error;
+
+ /* d_mmap gets called twice, we can only reference file_priv during
+ * the first call. We need to assume that if error is EBADF the
+ * call was succesful and the client is authenticated.
+ */
+ error = devfs_get_cdevpriv((void **)&file_priv);
+ if (error == ENOENT) {
+ DRM_ERROR("Could not find authenticator!\n");
+ return EINVAL;
+ }
+
+ if (file_priv && !file_priv->authenticated)
+ return EACCES;
+
+ DRM_DEBUG("called with offset %016jx\n", offset);
+ if (dev->dma && offset < ptoa(dev->dma->page_count)) {
+ drm_device_dma_t *dma = dev->dma;
+
+ DRM_SPINLOCK(&dev->dma_lock);
+
+ if (dma->pagelist != NULL) {
+ unsigned long page = offset >> PAGE_SHIFT;
+ unsigned long phys = dma->pagelist[page];
+
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ *paddr = phys;
+ return 0;
+ } else {
+ DRM_SPINUNLOCK(&dev->dma_lock);
+ return -1;
+ }
+ }
+
+ /* A sequential search of a linked list is
+ fine here because: 1) there will only be
+ about 5-10 entries in the list and, 2) a
+ DRI client only has to do this mapping
+ once, so it doesn't have to be optimized
+ for performance, even if the list was a
+ bit longer.
+ */
+ DRM_LOCK(dev);
+ TAILQ_FOREACH(map, &dev->maplist, link) {
+ if (offset >> DRM_MAP_HANDLE_SHIFT ==
+ (unsigned long)map->handle >> DRM_MAP_HANDLE_SHIFT)
+ break;
+ }
+
+ if (map == NULL) {
+ DRM_DEBUG("Can't find map, request offset = %016jx\n", offset);
+ TAILQ_FOREACH(map, &dev->maplist, link) {
+ DRM_DEBUG("map offset = %016lx, handle = %016lx\n",
+ map->offset, (unsigned long)map->handle);
+ }
+ DRM_UNLOCK(dev);
+ return -1;
+ }
+ if (((map->flags & _DRM_RESTRICTED) && !DRM_SUSER(DRM_CURPROC))) {
+ DRM_UNLOCK(dev);
+ DRM_DEBUG("restricted map\n");
+ return -1;
+ }
+ type = map->type;
+ DRM_UNLOCK(dev);
+
+ offset = offset & ((1ULL << DRM_MAP_HANDLE_SHIFT) - 1);
+
+ switch (type) {
+ case _DRM_FRAME_BUFFER:
+ case _DRM_AGP:
+ *memattr = VM_MEMATTR_WRITE_COMBINING;
+ /* FALLTHROUGH */
+ case _DRM_REGISTERS:
+ phys = map->offset + offset;
+ break;
+ case _DRM_SCATTER_GATHER:
+ *memattr = VM_MEMATTR_WRITE_COMBINING;
+ /* FALLTHROUGH */
+ case _DRM_CONSISTENT:
+ case _DRM_SHM:
+ phys = vtophys((char *)map->virtual + offset);
+ break;
+ default:
+ DRM_ERROR("bad map type %d\n", type);
+ return -1; /* This should never happen. */
+ }
+
+ *paddr = phys;
+ return 0;
+}
+
diff --git a/sys/dev/drm2/i915/i915_debug.c b/sys/dev/drm2/i915/i915_debug.c
new file mode 100644
index 000000000000..384ed4ae8436
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_debug.c
@@ -0,0 +1,1683 @@
+/*
+ * Copyright © 2008 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ * Keith Packard <keithp@keithp.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/i915/intel_ringbuffer.h>
+
+#include <sys/sysctl.h>
+
+enum {
+ ACTIVE_LIST,
+ FLUSHING_LIST,
+ INACTIVE_LIST,
+ PINNED_LIST,
+ DEFERRED_FREE_LIST,
+};
+
+static const char *
+yesno(int v)
+{
+ return (v ? "yes" : "no");
+}
+
+static int
+i915_capabilities(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ const struct intel_device_info *info = INTEL_INFO(dev);
+
+ sbuf_printf(m, "gen: %d\n", info->gen);
+ if (HAS_PCH_SPLIT(dev))
+ sbuf_printf(m, "pch: %d\n", INTEL_PCH_TYPE(dev));
+#define B(x) sbuf_printf(m, #x ": %s\n", yesno(info->x))
+ B(is_mobile);
+ B(is_i85x);
+ B(is_i915g);
+ B(is_i945gm);
+ B(is_g33);
+ B(need_gfx_hws);
+ B(is_g4x);
+ B(is_pineview);
+ B(has_fbc);
+ B(has_pipe_cxsr);
+ B(has_hotplug);
+ B(cursor_needs_physical);
+ B(has_overlay);
+ B(overlay_needs_physical);
+ B(supports_tv);
+ B(has_bsd_ring);
+ B(has_blt_ring);
+ B(has_llc);
+#undef B
+
+ return (0);
+}
+
+static const char *
+get_pin_flag(struct drm_i915_gem_object *obj)
+{
+ if (obj->user_pin_count > 0)
+ return "P";
+ else if (obj->pin_count > 0)
+ return "p";
+ else
+ return " ";
+}
+
+static const char *
+get_tiling_flag(struct drm_i915_gem_object *obj)
+{
+ switch (obj->tiling_mode) {
+ default:
+ case I915_TILING_NONE: return (" ");
+ case I915_TILING_X: return ("X");
+ case I915_TILING_Y: return ("Y");
+ }
+}
+
+static const char *
+cache_level_str(int type)
+{
+ switch (type) {
+ case I915_CACHE_NONE: return " uncached";
+ case I915_CACHE_LLC: return " snooped (LLC)";
+ case I915_CACHE_LLC_MLC: return " snooped (LLC+MLC)";
+ default: return ("");
+ }
+}
+
+static void
+describe_obj(struct sbuf *m, struct drm_i915_gem_object *obj)
+{
+
+ sbuf_printf(m, "%p: %s%s %8zdKiB %04x %04x %d %d%s%s%s",
+ &obj->base,
+ get_pin_flag(obj),
+ get_tiling_flag(obj),
+ obj->base.size / 1024,
+ obj->base.read_domains,
+ obj->base.write_domain,
+ obj->last_rendering_seqno,
+ obj->last_fenced_seqno,
+ cache_level_str(obj->cache_level),
+ obj->dirty ? " dirty" : "",
+ obj->madv == I915_MADV_DONTNEED ? " purgeable" : "");
+ if (obj->base.name)
+ sbuf_printf(m, " (name: %d)", obj->base.name);
+ if (obj->fence_reg != I915_FENCE_REG_NONE)
+ sbuf_printf(m, " (fence: %d)", obj->fence_reg);
+ if (obj->gtt_space != NULL)
+ sbuf_printf(m, " (gtt offset: %08x, size: %08x)",
+ obj->gtt_offset, (unsigned int)obj->gtt_space->size);
+ if (obj->pin_mappable || obj->fault_mappable) {
+ char s[3], *t = s;
+ if (obj->pin_mappable)
+ *t++ = 'p';
+ if (obj->fault_mappable)
+ *t++ = 'f';
+ *t = '\0';
+ sbuf_printf(m, " (%s mappable)", s);
+ }
+ if (obj->ring != NULL)
+ sbuf_printf(m, " (%s)", obj->ring->name);
+}
+
+static int
+i915_gem_object_list_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ uintptr_t list = (uintptr_t)data;
+ struct list_head *head;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj;
+ size_t total_obj_size, total_gtt_size;
+ int count;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+
+ switch (list) {
+ case ACTIVE_LIST:
+ sbuf_printf(m, "Active:\n");
+ head = &dev_priv->mm.active_list;
+ break;
+ case INACTIVE_LIST:
+ sbuf_printf(m, "Inactive:\n");
+ head = &dev_priv->mm.inactive_list;
+ break;
+ case PINNED_LIST:
+ sbuf_printf(m, "Pinned:\n");
+ head = &dev_priv->mm.pinned_list;
+ break;
+ case FLUSHING_LIST:
+ sbuf_printf(m, "Flushing:\n");
+ head = &dev_priv->mm.flushing_list;
+ break;
+ case DEFERRED_FREE_LIST:
+ sbuf_printf(m, "Deferred free:\n");
+ head = &dev_priv->mm.deferred_free_list;
+ break;
+ default:
+ DRM_UNLOCK(dev);
+ return (EINVAL);
+ }
+
+ total_obj_size = total_gtt_size = count = 0;
+ list_for_each_entry(obj, head, mm_list) {
+ sbuf_printf(m, " ");
+ describe_obj(m, obj);
+ sbuf_printf(m, "\n");
+ total_obj_size += obj->base.size;
+ total_gtt_size += obj->gtt_space->size;
+ count++;
+ }
+ DRM_UNLOCK(dev);
+
+ sbuf_printf(m, "Total %d objects, %zu bytes, %zu GTT size\n",
+ count, total_obj_size, total_gtt_size);
+ return (0);
+}
+
+#define count_objects(list, member) do { \
+ list_for_each_entry(obj, list, member) { \
+ size += obj->gtt_space->size; \
+ ++count; \
+ if (obj->map_and_fenceable) { \
+ mappable_size += obj->gtt_space->size; \
+ ++mappable_count; \
+ } \
+ } \
+} while (0)
+
+static int
+i915_gem_object_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 count, mappable_count;
+ size_t size, mappable_size;
+ struct drm_i915_gem_object *obj;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ sbuf_printf(m, "%u objects, %zu bytes\n",
+ dev_priv->mm.object_count,
+ dev_priv->mm.object_memory);
+
+ size = count = mappable_size = mappable_count = 0;
+ count_objects(&dev_priv->mm.gtt_list, gtt_list);
+ sbuf_printf(m, "%u [%u] objects, %zu [%zu] bytes in gtt\n",
+ count, mappable_count, size, mappable_size);
+
+ size = count = mappable_size = mappable_count = 0;
+ count_objects(&dev_priv->mm.active_list, mm_list);
+ count_objects(&dev_priv->mm.flushing_list, mm_list);
+ sbuf_printf(m, " %u [%u] active objects, %zu [%zu] bytes\n",
+ count, mappable_count, size, mappable_size);
+
+ size = count = mappable_size = mappable_count = 0;
+ count_objects(&dev_priv->mm.pinned_list, mm_list);
+ sbuf_printf(m, " %u [%u] pinned objects, %zu [%zu] bytes\n",
+ count, mappable_count, size, mappable_size);
+
+ size = count = mappable_size = mappable_count = 0;
+ count_objects(&dev_priv->mm.inactive_list, mm_list);
+ sbuf_printf(m, " %u [%u] inactive objects, %zu [%zu] bytes\n",
+ count, mappable_count, size, mappable_size);
+
+ size = count = mappable_size = mappable_count = 0;
+ count_objects(&dev_priv->mm.deferred_free_list, mm_list);
+ sbuf_printf(m, " %u [%u] freed objects, %zu [%zu] bytes\n",
+ count, mappable_count, size, mappable_size);
+
+ size = count = mappable_size = mappable_count = 0;
+ list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) {
+ if (obj->fault_mappable) {
+ size += obj->gtt_space->size;
+ ++count;
+ }
+ if (obj->pin_mappable) {
+ mappable_size += obj->gtt_space->size;
+ ++mappable_count;
+ }
+ }
+ sbuf_printf(m, "%u pinned mappable objects, %zu bytes\n",
+ mappable_count, mappable_size);
+ sbuf_printf(m, "%u fault mappable objects, %zu bytes\n",
+ count, size);
+
+ sbuf_printf(m, "%zu [%zu] gtt total\n",
+ dev_priv->mm.gtt_total, dev_priv->mm.mappable_gtt_total);
+ DRM_UNLOCK(dev);
+
+ return (0);
+}
+
+static int
+i915_gem_gtt_info(struct drm_device *dev, struct sbuf *m, void* data)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj;
+ size_t total_obj_size, total_gtt_size;
+ int count;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+
+ total_obj_size = total_gtt_size = count = 0;
+ list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) {
+ sbuf_printf(m, " ");
+ describe_obj(m, obj);
+ sbuf_printf(m, "\n");
+ total_obj_size += obj->base.size;
+ total_gtt_size += obj->gtt_space->size;
+ count++;
+ }
+
+ DRM_UNLOCK(dev);
+
+ sbuf_printf(m, "Total %d objects, %zu bytes, %zu GTT size\n",
+ count, total_obj_size, total_gtt_size);
+
+ return (0);
+}
+
+static int
+i915_gem_pageflip_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ struct intel_crtc *crtc;
+ struct drm_i915_gem_object *obj;
+ struct intel_unpin_work *work;
+ char pipe;
+ char plane;
+
+ if ((dev->driver->driver_features & DRIVER_MODESET) == 0)
+ return (0);
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, base.head) {
+ pipe = pipe_name(crtc->pipe);
+ plane = plane_name(crtc->plane);
+
+ mtx_lock(&dev->event_lock);
+ work = crtc->unpin_work;
+ if (work == NULL) {
+ sbuf_printf(m, "No flip due on pipe %c (plane %c)\n",
+ pipe, plane);
+ } else {
+ if (!work->pending) {
+ sbuf_printf(m, "Flip queued on pipe %c (plane %c)\n",
+ pipe, plane);
+ } else {
+ sbuf_printf(m, "Flip pending (waiting for vsync) on pipe %c (plane %c)\n",
+ pipe, plane);
+ }
+ if (work->enable_stall_check)
+ sbuf_printf(m, "Stall check enabled, ");
+ else
+ sbuf_printf(m, "Stall check waiting for page flip ioctl, ");
+ sbuf_printf(m, "%d prepares\n", work->pending);
+
+ if (work->old_fb_obj) {
+ obj = work->old_fb_obj;
+ if (obj)
+ sbuf_printf(m, "Old framebuffer gtt_offset 0x%08x\n", obj->gtt_offset);
+ }
+ if (work->pending_flip_obj) {
+ obj = work->pending_flip_obj;
+ if (obj)
+ sbuf_printf(m, "New framebuffer gtt_offset 0x%08x\n", obj->gtt_offset);
+ }
+ }
+ mtx_unlock(&dev->event_lock);
+ }
+
+ return (0);
+}
+
+static int
+i915_gem_request_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_gem_request *gem_request;
+ int count;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+
+ count = 0;
+ if (!list_empty(&dev_priv->rings[RCS].request_list)) {
+ sbuf_printf(m, "Render requests:\n");
+ list_for_each_entry(gem_request,
+ &dev_priv->rings[RCS].request_list,
+ list) {
+ sbuf_printf(m, " %d @ %d\n",
+ gem_request->seqno,
+ (int) (jiffies - gem_request->emitted_jiffies));
+ }
+ count++;
+ }
+ if (!list_empty(&dev_priv->rings[VCS].request_list)) {
+ sbuf_printf(m, "BSD requests:\n");
+ list_for_each_entry(gem_request,
+ &dev_priv->rings[VCS].request_list,
+ list) {
+ sbuf_printf(m, " %d @ %d\n",
+ gem_request->seqno,
+ (int) (jiffies - gem_request->emitted_jiffies));
+ }
+ count++;
+ }
+ if (!list_empty(&dev_priv->rings[BCS].request_list)) {
+ sbuf_printf(m, "BLT requests:\n");
+ list_for_each_entry(gem_request,
+ &dev_priv->rings[BCS].request_list,
+ list) {
+ sbuf_printf(m, " %d @ %d\n",
+ gem_request->seqno,
+ (int) (jiffies - gem_request->emitted_jiffies));
+ }
+ count++;
+ }
+ DRM_UNLOCK(dev);
+
+ if (count == 0)
+ sbuf_printf(m, "No requests\n");
+
+ return 0;
+}
+
+static void
+i915_ring_seqno_info(struct sbuf *m, struct intel_ring_buffer *ring)
+{
+ if (ring->get_seqno) {
+ sbuf_printf(m, "Current sequence (%s): %d\n",
+ ring->name, ring->get_seqno(ring));
+ sbuf_printf(m, "Waiter sequence (%s): %d\n",
+ ring->name, ring->waiting_seqno);
+ sbuf_printf(m, "IRQ sequence (%s): %d\n",
+ ring->name, ring->irq_seqno);
+ }
+}
+
+static int
+i915_gem_seqno_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int i;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ for (i = 0; i < I915_NUM_RINGS; i++)
+ i915_ring_seqno_info(m, &dev_priv->rings[i]);
+ DRM_UNLOCK(dev);
+ return (0);
+}
+
+
+static int
+i915_interrupt_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int i, pipe;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+
+ if (!HAS_PCH_SPLIT(dev)) {
+ sbuf_printf(m, "Interrupt enable: %08x\n",
+ I915_READ(IER));
+ sbuf_printf(m, "Interrupt identity: %08x\n",
+ I915_READ(IIR));
+ sbuf_printf(m, "Interrupt mask: %08x\n",
+ I915_READ(IMR));
+ for_each_pipe(pipe)
+ sbuf_printf(m, "Pipe %c stat: %08x\n",
+ pipe_name(pipe),
+ I915_READ(PIPESTAT(pipe)));
+ } else {
+ sbuf_printf(m, "North Display Interrupt enable: %08x\n",
+ I915_READ(DEIER));
+ sbuf_printf(m, "North Display Interrupt identity: %08x\n",
+ I915_READ(DEIIR));
+ sbuf_printf(m, "North Display Interrupt mask: %08x\n",
+ I915_READ(DEIMR));
+ sbuf_printf(m, "South Display Interrupt enable: %08x\n",
+ I915_READ(SDEIER));
+ sbuf_printf(m, "South Display Interrupt identity: %08x\n",
+ I915_READ(SDEIIR));
+ sbuf_printf(m, "South Display Interrupt mask: %08x\n",
+ I915_READ(SDEIMR));
+ sbuf_printf(m, "Graphics Interrupt enable: %08x\n",
+ I915_READ(GTIER));
+ sbuf_printf(m, "Graphics Interrupt identity: %08x\n",
+ I915_READ(GTIIR));
+ sbuf_printf(m, "Graphics Interrupt mask: %08x\n",
+ I915_READ(GTIMR));
+ }
+ sbuf_printf(m, "Interrupts received: %d\n",
+ atomic_read(&dev_priv->irq_received));
+ for (i = 0; i < I915_NUM_RINGS; i++) {
+ if (IS_GEN6(dev) || IS_GEN7(dev)) {
+ sbuf_printf(m, "Graphics Interrupt mask (%s): %08x\n",
+ dev_priv->rings[i].name,
+ I915_READ_IMR(&dev_priv->rings[i]));
+ }
+ i915_ring_seqno_info(m, &dev_priv->rings[i]);
+ }
+ DRM_UNLOCK(dev);
+
+ return (0);
+}
+
+static int
+i915_gem_fence_regs_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int i;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+
+ sbuf_printf(m, "Reserved fences = %d\n", dev_priv->fence_reg_start);
+ sbuf_printf(m, "Total fences = %d\n", dev_priv->num_fence_regs);
+ for (i = 0; i < dev_priv->num_fence_regs; i++) {
+ struct drm_i915_gem_object *obj = dev_priv->fence_regs[i].obj;
+
+ sbuf_printf(m, "Fenced object[%2d] = ", i);
+ if (obj == NULL)
+ sbuf_printf(m, "unused");
+ else
+ describe_obj(m, obj);
+ sbuf_printf(m, "\n");
+ }
+
+ DRM_UNLOCK(dev);
+ return (0);
+}
+
+static int
+i915_hws_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring;
+ const volatile u32 *hws;
+ int i;
+
+ ring = &dev_priv->rings[(uintptr_t)data];
+ hws = (volatile u32 *)ring->status_page.page_addr;
+ if (hws == NULL)
+ return (0);
+
+ for (i = 0; i < 4096 / sizeof(u32) / 4; i += 4) {
+ sbuf_printf(m, "0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ i * 4,
+ hws[i], hws[i + 1], hws[i + 2], hws[i + 3]);
+ }
+ return (0);
+}
+
+static int
+i915_ringbuffer_data(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ ring = &dev_priv->rings[(uintptr_t)data];
+ if (!ring->obj) {
+ sbuf_printf(m, "No ringbuffer setup\n");
+ } else {
+ u8 *virt = ring->virtual_start;
+ uint32_t off;
+
+ for (off = 0; off < ring->size; off += 4) {
+ uint32_t *ptr = (uint32_t *)(virt + off);
+ sbuf_printf(m, "%08x : %08x\n", off, *ptr);
+ }
+ }
+ DRM_UNLOCK(dev);
+ return (0);
+}
+
+static int
+i915_ringbuffer_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring;
+
+ ring = &dev_priv->rings[(uintptr_t)data];
+ if (ring->size == 0)
+ return (0);
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+
+ sbuf_printf(m, "Ring %s:\n", ring->name);
+ sbuf_printf(m, " Head : %08x\n", I915_READ_HEAD(ring) & HEAD_ADDR);
+ sbuf_printf(m, " Tail : %08x\n", I915_READ_TAIL(ring) & TAIL_ADDR);
+ sbuf_printf(m, " Size : %08x\n", ring->size);
+ sbuf_printf(m, " Active : %08x\n", intel_ring_get_active_head(ring));
+ sbuf_printf(m, " NOPID : %08x\n", I915_READ_NOPID(ring));
+ if (IS_GEN6(dev) || IS_GEN7(dev)) {
+ sbuf_printf(m, " Sync 0 : %08x\n", I915_READ_SYNC_0(ring));
+ sbuf_printf(m, " Sync 1 : %08x\n", I915_READ_SYNC_1(ring));
+ }
+ sbuf_printf(m, " Control : %08x\n", I915_READ_CTL(ring));
+ sbuf_printf(m, " Start : %08x\n", I915_READ_START(ring));
+
+ DRM_UNLOCK(dev);
+
+ return (0);
+}
+
+static const char *
+ring_str(int ring)
+{
+ switch (ring) {
+ case RCS: return (" render");
+ case VCS: return (" bsd");
+ case BCS: return (" blt");
+ default: return ("");
+ }
+}
+
+static const char *
+pin_flag(int pinned)
+{
+ if (pinned > 0)
+ return (" P");
+ else if (pinned < 0)
+ return (" p");
+ else
+ return ("");
+}
+
+static const char *tiling_flag(int tiling)
+{
+ switch (tiling) {
+ default:
+ case I915_TILING_NONE: return "";
+ case I915_TILING_X: return " X";
+ case I915_TILING_Y: return " Y";
+ }
+}
+
+static const char *dirty_flag(int dirty)
+{
+ return dirty ? " dirty" : "";
+}
+
+static const char *purgeable_flag(int purgeable)
+{
+ return purgeable ? " purgeable" : "";
+}
+
+static void print_error_buffers(struct sbuf *m, const char *name,
+ struct drm_i915_error_buffer *err, int count)
+{
+
+ sbuf_printf(m, "%s [%d]:\n", name, count);
+
+ while (count--) {
+ sbuf_printf(m, " %08x %8u %04x %04x %08x%s%s%s%s%s%s%s",
+ err->gtt_offset,
+ err->size,
+ err->read_domains,
+ err->write_domain,
+ err->seqno,
+ pin_flag(err->pinned),
+ tiling_flag(err->tiling),
+ dirty_flag(err->dirty),
+ purgeable_flag(err->purgeable),
+ err->ring != -1 ? " " : "",
+ ring_str(err->ring),
+ cache_level_str(err->cache_level));
+
+ if (err->name)
+ sbuf_printf(m, " (name: %d)", err->name);
+ if (err->fence_reg != I915_FENCE_REG_NONE)
+ sbuf_printf(m, " (fence: %d)", err->fence_reg);
+
+ sbuf_printf(m, "\n");
+ err++;
+ }
+}
+
+static void
+i915_ring_error_state(struct sbuf *m, struct drm_device *dev,
+ struct drm_i915_error_state *error, unsigned ring)
+{
+
+ sbuf_printf(m, "%s command stream:\n", ring_str(ring));
+ sbuf_printf(m, " HEAD: 0x%08x\n", error->head[ring]);
+ sbuf_printf(m, " TAIL: 0x%08x\n", error->tail[ring]);
+ sbuf_printf(m, " ACTHD: 0x%08x\n", error->acthd[ring]);
+ sbuf_printf(m, " IPEIR: 0x%08x\n", error->ipeir[ring]);
+ sbuf_printf(m, " IPEHR: 0x%08x\n", error->ipehr[ring]);
+ sbuf_printf(m, " INSTDONE: 0x%08x\n", error->instdone[ring]);
+ if (ring == RCS && INTEL_INFO(dev)->gen >= 4) {
+ sbuf_printf(m, " INSTDONE1: 0x%08x\n", error->instdone1);
+ sbuf_printf(m, " BBADDR: 0x%08jx\n", (uintmax_t)error->bbaddr);
+ }
+ if (INTEL_INFO(dev)->gen >= 4)
+ sbuf_printf(m, " INSTPS: 0x%08x\n", error->instps[ring]);
+ sbuf_printf(m, " INSTPM: 0x%08x\n", error->instpm[ring]);
+ if (INTEL_INFO(dev)->gen >= 6) {
+ sbuf_printf(m, " FADDR: 0x%08x\n", error->faddr[ring]);
+ sbuf_printf(m, " FAULT_REG: 0x%08x\n", error->fault_reg[ring]);
+ sbuf_printf(m, " SYNC_0: 0x%08x\n",
+ error->semaphore_mboxes[ring][0]);
+ sbuf_printf(m, " SYNC_1: 0x%08x\n",
+ error->semaphore_mboxes[ring][1]);
+ }
+ sbuf_printf(m, " seqno: 0x%08x\n", error->seqno[ring]);
+ sbuf_printf(m, " ring->head: 0x%08x\n", error->cpu_ring_head[ring]);
+ sbuf_printf(m, " ring->tail: 0x%08x\n", error->cpu_ring_tail[ring]);
+}
+
+static int i915_error_state(struct drm_device *dev, struct sbuf *m,
+ void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_error_state *error;
+ int i, j, page, offset, elt;
+
+ mtx_lock(&dev_priv->error_lock);
+ if (!dev_priv->first_error) {
+ sbuf_printf(m, "no error state collected\n");
+ goto out;
+ }
+
+ error = dev_priv->first_error;
+
+ sbuf_printf(m, "Time: %jd s %jd us\n", (intmax_t)error->time.tv_sec,
+ (intmax_t)error->time.tv_usec);
+ sbuf_printf(m, "PCI ID: 0x%04x\n", dev->pci_device);
+ sbuf_printf(m, "EIR: 0x%08x\n", error->eir);
+ sbuf_printf(m, "PGTBL_ER: 0x%08x\n", error->pgtbl_er);
+
+ for (i = 0; i < dev_priv->num_fence_regs; i++)
+ sbuf_printf(m, " fence[%d] = %08jx\n", i,
+ (uintmax_t)error->fence[i]);
+
+ if (INTEL_INFO(dev)->gen >= 6) {
+ sbuf_printf(m, "ERROR: 0x%08x\n", error->error);
+ sbuf_printf(m, "DONE_REG: 0x%08x\n", error->done_reg);
+ }
+
+ i915_ring_error_state(m, dev, error, RCS);
+ if (HAS_BLT(dev))
+ i915_ring_error_state(m, dev, error, BCS);
+ if (HAS_BSD(dev))
+ i915_ring_error_state(m, dev, error, VCS);
+
+ if (error->active_bo)
+ print_error_buffers(m, "Active",
+ error->active_bo,
+ error->active_bo_count);
+
+ if (error->pinned_bo)
+ print_error_buffers(m, "Pinned",
+ error->pinned_bo,
+ error->pinned_bo_count);
+
+ for (i = 0; i < DRM_ARRAY_SIZE(error->ring); i++) {
+ struct drm_i915_error_object *obj;
+
+ if ((obj = error->ring[i].batchbuffer)) {
+ sbuf_printf(m, "%s --- gtt_offset = 0x%08x\n",
+ dev_priv->rings[i].name,
+ obj->gtt_offset);
+ offset = 0;
+ for (page = 0; page < obj->page_count; page++) {
+ for (elt = 0; elt < PAGE_SIZE/4; elt++) {
+ sbuf_printf(m, "%08x : %08x\n",
+ offset, obj->pages[page][elt]);
+ offset += 4;
+ }
+ }
+ }
+
+ if (error->ring[i].num_requests) {
+ sbuf_printf(m, "%s --- %d requests\n",
+ dev_priv->rings[i].name,
+ error->ring[i].num_requests);
+ for (j = 0; j < error->ring[i].num_requests; j++) {
+ sbuf_printf(m, " seqno 0x%08x, emitted %ld, tail 0x%08x\n",
+ error->ring[i].requests[j].seqno,
+ error->ring[i].requests[j].jiffies,
+ error->ring[i].requests[j].tail);
+ }
+ }
+
+ if ((obj = error->ring[i].ringbuffer)) {
+ sbuf_printf(m, "%s --- ringbuffer = 0x%08x\n",
+ dev_priv->rings[i].name,
+ obj->gtt_offset);
+ offset = 0;
+ for (page = 0; page < obj->page_count; page++) {
+ for (elt = 0; elt < PAGE_SIZE/4; elt++) {
+ sbuf_printf(m, "%08x : %08x\n",
+ offset,
+ obj->pages[page][elt]);
+ offset += 4;
+ }
+ }
+ }
+ }
+
+ if (error->overlay)
+ intel_overlay_print_error_state(m, error->overlay);
+
+ if (error->display)
+ intel_display_print_error_state(m, dev, error->display);
+
+out:
+ mtx_unlock(&dev_priv->error_lock);
+
+ return (0);
+}
+
+static int
+i915_rstdby_delays(struct drm_device *dev, struct sbuf *m, void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u16 crstanddelay;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ crstanddelay = I915_READ16(CRSTANDVID);
+ DRM_UNLOCK(dev);
+
+ sbuf_printf(m, "w/ctx: %d, w/o ctx: %d\n",
+ (crstanddelay >> 8) & 0x3f, (crstanddelay & 0x3f));
+
+ return 0;
+}
+
+static int
+i915_cur_delayinfo(struct drm_device *dev, struct sbuf *m, void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (IS_GEN5(dev)) {
+ u16 rgvswctl = I915_READ16(MEMSWCTL);
+ u16 rgvstat = I915_READ16(MEMSTAT_ILK);
+
+ sbuf_printf(m, "Requested P-state: %d\n", (rgvswctl >> 8) & 0xf);
+ sbuf_printf(m, "Requested VID: %d\n", rgvswctl & 0x3f);
+ sbuf_printf(m, "Current VID: %d\n", (rgvstat & MEMSTAT_VID_MASK) >>
+ MEMSTAT_VID_SHIFT);
+ sbuf_printf(m, "Current P-state: %d\n",
+ (rgvstat & MEMSTAT_PSTATE_MASK) >> MEMSTAT_PSTATE_SHIFT);
+ } else if (IS_GEN6(dev)) {
+ u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
+ u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS);
+ u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
+ u32 rpstat;
+ u32 rpupei, rpcurup, rpprevup;
+ u32 rpdownei, rpcurdown, rpprevdown;
+ int max_freq;
+
+ /* RPSTAT1 is in the GT power well */
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ gen6_gt_force_wake_get(dev_priv);
+
+ rpstat = I915_READ(GEN6_RPSTAT1);
+ rpupei = I915_READ(GEN6_RP_CUR_UP_EI);
+ rpcurup = I915_READ(GEN6_RP_CUR_UP);
+ rpprevup = I915_READ(GEN6_RP_PREV_UP);
+ rpdownei = I915_READ(GEN6_RP_CUR_DOWN_EI);
+ rpcurdown = I915_READ(GEN6_RP_CUR_DOWN);
+ rpprevdown = I915_READ(GEN6_RP_PREV_DOWN);
+
+ gen6_gt_force_wake_put(dev_priv);
+ DRM_UNLOCK(dev);
+
+ sbuf_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status);
+ sbuf_printf(m, "RPSTAT1: 0x%08x\n", rpstat);
+ sbuf_printf(m, "Render p-state ratio: %d\n",
+ (gt_perf_status & 0xff00) >> 8);
+ sbuf_printf(m, "Render p-state VID: %d\n",
+ gt_perf_status & 0xff);
+ sbuf_printf(m, "Render p-state limit: %d\n",
+ rp_state_limits & 0xff);
+ sbuf_printf(m, "CAGF: %dMHz\n", ((rpstat & GEN6_CAGF_MASK) >>
+ GEN6_CAGF_SHIFT) * 50);
+ sbuf_printf(m, "RP CUR UP EI: %dus\n", rpupei &
+ GEN6_CURICONT_MASK);
+ sbuf_printf(m, "RP CUR UP: %dus\n", rpcurup &
+ GEN6_CURBSYTAVG_MASK);
+ sbuf_printf(m, "RP PREV UP: %dus\n", rpprevup &
+ GEN6_CURBSYTAVG_MASK);
+ sbuf_printf(m, "RP CUR DOWN EI: %dus\n", rpdownei &
+ GEN6_CURIAVG_MASK);
+ sbuf_printf(m, "RP CUR DOWN: %dus\n", rpcurdown &
+ GEN6_CURBSYTAVG_MASK);
+ sbuf_printf(m, "RP PREV DOWN: %dus\n", rpprevdown &
+ GEN6_CURBSYTAVG_MASK);
+
+ max_freq = (rp_state_cap & 0xff0000) >> 16;
+ sbuf_printf(m, "Lowest (RPN) frequency: %dMHz\n",
+ max_freq * 50);
+
+ max_freq = (rp_state_cap & 0xff00) >> 8;
+ sbuf_printf(m, "Nominal (RP1) frequency: %dMHz\n",
+ max_freq * 50);
+
+ max_freq = rp_state_cap & 0xff;
+ sbuf_printf(m, "Max non-overclocked (RP0) frequency: %dMHz\n",
+ max_freq * 50);
+ } else {
+ sbuf_printf(m, "no P-state info available\n");
+ }
+
+ return 0;
+}
+
+static int
+i915_delayfreq_table(struct drm_device *dev, struct sbuf *m, void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 delayfreq;
+ int i;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ for (i = 0; i < 16; i++) {
+ delayfreq = I915_READ(PXVFREQ_BASE + i * 4);
+ sbuf_printf(m, "P%02dVIDFREQ: 0x%08x (VID: %d)\n", i, delayfreq,
+ (delayfreq & PXVFREQ_PX_MASK) >> PXVFREQ_PX_SHIFT);
+ }
+ DRM_UNLOCK(dev);
+ return (0);
+}
+
+static inline int
+MAP_TO_MV(int map)
+{
+ return 1250 - (map * 25);
+}
+
+static int
+i915_inttoext_table(struct drm_device *dev, struct sbuf *m, void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 inttoext;
+ int i;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ for (i = 1; i <= 32; i++) {
+ inttoext = I915_READ(INTTOEXT_BASE_ILK + i * 4);
+ sbuf_printf(m, "INTTOEXT%02d: 0x%08x\n", i, inttoext);
+ }
+ DRM_UNLOCK(dev);
+
+ return (0);
+}
+
+static int
+ironlake_drpc_info(struct drm_device *dev, struct sbuf *m)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 rgvmodectl;
+ u32 rstdbyctl;
+ u16 crstandvid;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ rgvmodectl = I915_READ(MEMMODECTL);
+ rstdbyctl = I915_READ(RSTDBYCTL);
+ crstandvid = I915_READ16(CRSTANDVID);
+ DRM_UNLOCK(dev);
+
+ sbuf_printf(m, "HD boost: %s\n", (rgvmodectl & MEMMODE_BOOST_EN) ?
+ "yes" : "no");
+ sbuf_printf(m, "Boost freq: %d\n",
+ (rgvmodectl & MEMMODE_BOOST_FREQ_MASK) >>
+ MEMMODE_BOOST_FREQ_SHIFT);
+ sbuf_printf(m, "HW control enabled: %s\n",
+ rgvmodectl & MEMMODE_HWIDLE_EN ? "yes" : "no");
+ sbuf_printf(m, "SW control enabled: %s\n",
+ rgvmodectl & MEMMODE_SWMODE_EN ? "yes" : "no");
+ sbuf_printf(m, "Gated voltage change: %s\n",
+ rgvmodectl & MEMMODE_RCLK_GATE ? "yes" : "no");
+ sbuf_printf(m, "Starting frequency: P%d\n",
+ (rgvmodectl & MEMMODE_FSTART_MASK) >> MEMMODE_FSTART_SHIFT);
+ sbuf_printf(m, "Max P-state: P%d\n",
+ (rgvmodectl & MEMMODE_FMAX_MASK) >> MEMMODE_FMAX_SHIFT);
+ sbuf_printf(m, "Min P-state: P%d\n", (rgvmodectl & MEMMODE_FMIN_MASK));
+ sbuf_printf(m, "RS1 VID: %d\n", (crstandvid & 0x3f));
+ sbuf_printf(m, "RS2 VID: %d\n", ((crstandvid >> 8) & 0x3f));
+ sbuf_printf(m, "Render standby enabled: %s\n",
+ (rstdbyctl & RCX_SW_EXIT) ? "no" : "yes");
+ sbuf_printf(m, "Current RS state: ");
+ switch (rstdbyctl & RSX_STATUS_MASK) {
+ case RSX_STATUS_ON:
+ sbuf_printf(m, "on\n");
+ break;
+ case RSX_STATUS_RC1:
+ sbuf_printf(m, "RC1\n");
+ break;
+ case RSX_STATUS_RC1E:
+ sbuf_printf(m, "RC1E\n");
+ break;
+ case RSX_STATUS_RS1:
+ sbuf_printf(m, "RS1\n");
+ break;
+ case RSX_STATUS_RS2:
+ sbuf_printf(m, "RS2 (RC6)\n");
+ break;
+ case RSX_STATUS_RS3:
+ sbuf_printf(m, "RC3 (RC6+)\n");
+ break;
+ default:
+ sbuf_printf(m, "unknown\n");
+ break;
+ }
+
+ return 0;
+}
+
+static int
+gen6_drpc_info(struct drm_device *dev, struct sbuf *m)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 rpmodectl1, gt_core_status, rcctl1;
+ unsigned forcewake_count;
+ int count=0;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+
+ mtx_lock(&dev_priv->gt_lock);
+ forcewake_count = dev_priv->forcewake_count;
+ mtx_unlock(&dev_priv->gt_lock);
+
+ if (forcewake_count) {
+ sbuf_printf(m, "RC information inaccurate because userspace "
+ "holds a reference \n");
+ } else {
+ /* NB: we cannot use forcewake, else we read the wrong values */
+ while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK) & 1))
+ DRM_UDELAY(10);
+ sbuf_printf(m, "RC information accurate: %s\n", yesno(count < 51));
+ }
+
+ gt_core_status = DRM_READ32(dev_priv->mmio_map, GEN6_GT_CORE_STATUS);
+ trace_i915_reg_rw(false, GEN6_GT_CORE_STATUS, gt_core_status, 4);
+
+ rpmodectl1 = I915_READ(GEN6_RP_CONTROL);
+ rcctl1 = I915_READ(GEN6_RC_CONTROL);
+ DRM_UNLOCK(dev);
+
+ sbuf_printf(m, "Video Turbo Mode: %s\n",
+ yesno(rpmodectl1 & GEN6_RP_MEDIA_TURBO));
+ sbuf_printf(m, "HW control enabled: %s\n",
+ yesno(rpmodectl1 & GEN6_RP_ENABLE));
+ sbuf_printf(m, "SW control enabled: %s\n",
+ yesno((rpmodectl1 & GEN6_RP_MEDIA_MODE_MASK) ==
+ GEN6_RP_MEDIA_SW_MODE));
+ sbuf_printf(m, "RC1e Enabled: %s\n",
+ yesno(rcctl1 & GEN6_RC_CTL_RC1e_ENABLE));
+ sbuf_printf(m, "RC6 Enabled: %s\n",
+ yesno(rcctl1 & GEN6_RC_CTL_RC6_ENABLE));
+ sbuf_printf(m, "Deep RC6 Enabled: %s\n",
+ yesno(rcctl1 & GEN6_RC_CTL_RC6p_ENABLE));
+ sbuf_printf(m, "Deepest RC6 Enabled: %s\n",
+ yesno(rcctl1 & GEN6_RC_CTL_RC6pp_ENABLE));
+ sbuf_printf(m, "Current RC state: ");
+ switch (gt_core_status & GEN6_RCn_MASK) {
+ case GEN6_RC0:
+ if (gt_core_status & GEN6_CORE_CPD_STATE_MASK)
+ sbuf_printf(m, "Core Power Down\n");
+ else
+ sbuf_printf(m, "on\n");
+ break;
+ case GEN6_RC3:
+ sbuf_printf(m, "RC3\n");
+ break;
+ case GEN6_RC6:
+ sbuf_printf(m, "RC6\n");
+ break;
+ case GEN6_RC7:
+ sbuf_printf(m, "RC7\n");
+ break;
+ default:
+ sbuf_printf(m, "Unknown\n");
+ break;
+ }
+
+ sbuf_printf(m, "Core Power Down: %s\n",
+ yesno(gt_core_status & GEN6_CORE_CPD_STATE_MASK));
+ return 0;
+}
+
+static int i915_drpc_info(struct drm_device *dev, struct sbuf *m, void *unused)
+{
+
+ if (IS_GEN6(dev) || IS_GEN7(dev))
+ return (gen6_drpc_info(dev, m));
+ else
+ return (ironlake_drpc_info(dev, m));
+}
+static int
+i915_fbc_status(struct drm_device *dev, struct sbuf *m, void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (!I915_HAS_FBC(dev)) {
+ sbuf_printf(m, "FBC unsupported on this chipset");
+ return 0;
+ }
+
+ if (intel_fbc_enabled(dev)) {
+ sbuf_printf(m, "FBC enabled");
+ } else {
+ sbuf_printf(m, "FBC disabled: ");
+ switch (dev_priv->no_fbc_reason) {
+ case FBC_NO_OUTPUT:
+ sbuf_printf(m, "no outputs");
+ break;
+ case FBC_STOLEN_TOO_SMALL:
+ sbuf_printf(m, "not enough stolen memory");
+ break;
+ case FBC_UNSUPPORTED_MODE:
+ sbuf_printf(m, "mode not supported");
+ break;
+ case FBC_MODE_TOO_LARGE:
+ sbuf_printf(m, "mode too large");
+ break;
+ case FBC_BAD_PLANE:
+ sbuf_printf(m, "FBC unsupported on plane");
+ break;
+ case FBC_NOT_TILED:
+ sbuf_printf(m, "scanout buffer not tiled");
+ break;
+ case FBC_MULTIPLE_PIPES:
+ sbuf_printf(m, "multiple pipes are enabled");
+ break;
+ default:
+ sbuf_printf(m, "unknown reason");
+ }
+ }
+ return 0;
+}
+
+static int
+i915_sr_status(struct drm_device *dev, struct sbuf *m, void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ bool sr_enabled = false;
+
+ if (HAS_PCH_SPLIT(dev))
+ sr_enabled = I915_READ(WM1_LP_ILK) & WM1_LP_SR_EN;
+ else if (IS_CRESTLINE(dev) || IS_I945G(dev) || IS_I945GM(dev))
+ sr_enabled = I915_READ(FW_BLC_SELF) & FW_BLC_SELF_EN;
+ else if (IS_I915GM(dev))
+ sr_enabled = I915_READ(INSTPM) & INSTPM_SELF_EN;
+ else if (IS_PINEVIEW(dev))
+ sr_enabled = I915_READ(DSPFW3) & PINEVIEW_SELF_REFRESH_EN;
+
+ sbuf_printf(m, "self-refresh: %s",
+ sr_enabled ? "enabled" : "disabled");
+
+ return (0);
+}
+
+static int i915_ring_freq_table(struct drm_device *dev, struct sbuf *m,
+ void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int gpu_freq, ia_freq;
+
+ if (!(IS_GEN6(dev) || IS_GEN7(dev))) {
+ sbuf_printf(m, "unsupported on this chipset");
+ return (0);
+ }
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+
+ sbuf_printf(m, "GPU freq (MHz)\tEffective CPU freq (MHz)\n");
+
+ for (gpu_freq = dev_priv->min_delay; gpu_freq <= dev_priv->max_delay;
+ gpu_freq++) {
+ I915_WRITE(GEN6_PCODE_DATA, gpu_freq);
+ I915_WRITE(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY |
+ GEN6_PCODE_READ_MIN_FREQ_TABLE);
+ if (_intel_wait_for(dev,
+ (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
+ 10, 1, "915frq")) {
+ DRM_ERROR("pcode read of freq table timed out\n");
+ continue;
+ }
+ ia_freq = I915_READ(GEN6_PCODE_DATA);
+ sbuf_printf(m, "%d\t\t%d\n", gpu_freq * 50, ia_freq * 100);
+ }
+
+ DRM_UNLOCK(dev);
+
+ return (0);
+}
+
+static int
+i915_emon_status(struct drm_device *dev, struct sbuf *m, void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ unsigned long temp, chipset, gfx;
+
+ if (!IS_GEN5(dev)) {
+ sbuf_printf(m, "Not supported\n");
+ return (0);
+ }
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ temp = i915_mch_val(dev_priv);
+ chipset = i915_chipset_val(dev_priv);
+ gfx = i915_gfx_val(dev_priv);
+ DRM_UNLOCK(dev);
+
+ sbuf_printf(m, "GMCH temp: %ld\n", temp);
+ sbuf_printf(m, "Chipset power: %ld\n", chipset);
+ sbuf_printf(m, "GFX power: %ld\n", gfx);
+ sbuf_printf(m, "Total power: %ld\n", chipset + gfx);
+
+ return (0);
+}
+
+static int
+i915_gfxec(struct drm_device *dev, struct sbuf *m, void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ sbuf_printf(m, "GFXEC: %ld\n", (unsigned long)I915_READ(0x112f4));
+ DRM_UNLOCK(dev);
+
+ return (0);
+}
+
+#if 0
+static int
+i915_opregion(struct drm_device *dev, struct sbuf *m, void *unused)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_opregion *opregion = &dev_priv->opregion;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+ if (opregion->header)
+ seq_write(m, opregion->header, OPREGION_SIZE);
+ DRM_UNLOCK(dev);
+
+ return 0;
+}
+#endif
+
+static int
+i915_gem_framebuffer_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_fbdev *ifbdev;
+ struct intel_framebuffer *fb;
+
+ if (sx_xlock_sig(&dev->dev_struct_lock))
+ return (EINTR);
+
+ ifbdev = dev_priv->fbdev;
+ if (ifbdev == NULL) {
+ DRM_UNLOCK(dev);
+ return (0);
+ }
+ fb = to_intel_framebuffer(ifbdev->helper.fb);
+
+ sbuf_printf(m, "fbcon size: %d x %d, depth %d, %d bpp, obj ",
+ fb->base.width,
+ fb->base.height,
+ fb->base.depth,
+ fb->base.bits_per_pixel);
+ describe_obj(m, fb->obj);
+ sbuf_printf(m, "\n");
+
+ list_for_each_entry(fb, &dev->mode_config.fb_list, base.head) {
+ if (&fb->base == ifbdev->helper.fb)
+ continue;
+
+ sbuf_printf(m, "user size: %d x %d, depth %d, %d bpp, obj ",
+ fb->base.width,
+ fb->base.height,
+ fb->base.depth,
+ fb->base.bits_per_pixel);
+ describe_obj(m, fb->obj);
+ sbuf_printf(m, "\n");
+ }
+
+ DRM_UNLOCK(dev);
+
+ return (0);
+}
+
+static int
+i915_context_status(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ drm_i915_private_t *dev_priv;
+ int ret;
+
+ if ((dev->driver->driver_features & DRIVER_MODESET) == 0)
+ return (0);
+
+ dev_priv = dev->dev_private;
+ ret = sx_xlock_sig(&dev->mode_config.mutex);
+ if (ret != 0)
+ return (EINTR);
+
+ if (dev_priv->pwrctx != NULL) {
+ sbuf_printf(m, "power context ");
+ describe_obj(m, dev_priv->pwrctx);
+ sbuf_printf(m, "\n");
+ }
+
+ if (dev_priv->renderctx != NULL) {
+ sbuf_printf(m, "render context ");
+ describe_obj(m, dev_priv->renderctx);
+ sbuf_printf(m, "\n");
+ }
+
+ sx_xunlock(&dev->mode_config.mutex);
+
+ return (0);
+}
+
+static int
+i915_gen6_forcewake_count_info(struct drm_device *dev, struct sbuf *m,
+ void *data)
+{
+ struct drm_i915_private *dev_priv;
+ unsigned forcewake_count;
+
+ dev_priv = dev->dev_private;
+ mtx_lock(&dev_priv->gt_lock);
+ forcewake_count = dev_priv->forcewake_count;
+ mtx_unlock(&dev_priv->gt_lock);
+
+ sbuf_printf(m, "forcewake count = %u\n", forcewake_count);
+
+ return (0);
+}
+
+static const char *
+swizzle_string(unsigned swizzle)
+{
+
+ switch(swizzle) {
+ case I915_BIT_6_SWIZZLE_NONE:
+ return "none";
+ case I915_BIT_6_SWIZZLE_9:
+ return "bit9";
+ case I915_BIT_6_SWIZZLE_9_10:
+ return "bit9/bit10";
+ case I915_BIT_6_SWIZZLE_9_11:
+ return "bit9/bit11";
+ case I915_BIT_6_SWIZZLE_9_10_11:
+ return "bit9/bit10/bit11";
+ case I915_BIT_6_SWIZZLE_9_17:
+ return "bit9/bit17";
+ case I915_BIT_6_SWIZZLE_9_10_17:
+ return "bit9/bit10/bit17";
+ case I915_BIT_6_SWIZZLE_UNKNOWN:
+ return "unknown";
+ }
+
+ return "bug";
+}
+
+static int
+i915_swizzle_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ struct drm_i915_private *dev_priv;
+ int ret;
+
+ dev_priv = dev->dev_private;
+ ret = sx_xlock_sig(&dev->dev_struct_lock);
+ if (ret != 0)
+ return (EINTR);
+
+ sbuf_printf(m, "bit6 swizzle for X-tiling = %s\n",
+ swizzle_string(dev_priv->mm.bit_6_swizzle_x));
+ sbuf_printf(m, "bit6 swizzle for Y-tiling = %s\n",
+ swizzle_string(dev_priv->mm.bit_6_swizzle_y));
+
+ if (IS_GEN3(dev) || IS_GEN4(dev)) {
+ sbuf_printf(m, "DDC = 0x%08x\n",
+ I915_READ(DCC));
+ sbuf_printf(m, "C0DRB3 = 0x%04x\n",
+ I915_READ16(C0DRB3));
+ sbuf_printf(m, "C1DRB3 = 0x%04x\n",
+ I915_READ16(C1DRB3));
+ } else if (IS_GEN6(dev) || IS_GEN7(dev)) {
+ sbuf_printf(m, "MAD_DIMM_C0 = 0x%08x\n",
+ I915_READ(MAD_DIMM_C0));
+ sbuf_printf(m, "MAD_DIMM_C1 = 0x%08x\n",
+ I915_READ(MAD_DIMM_C1));
+ sbuf_printf(m, "MAD_DIMM_C2 = 0x%08x\n",
+ I915_READ(MAD_DIMM_C2));
+ sbuf_printf(m, "TILECTL = 0x%08x\n",
+ I915_READ(TILECTL));
+ sbuf_printf(m, "ARB_MODE = 0x%08x\n",
+ I915_READ(ARB_MODE));
+ sbuf_printf(m, "DISP_ARB_CTL = 0x%08x\n",
+ I915_READ(DISP_ARB_CTL));
+ }
+ DRM_UNLOCK(dev);
+
+ return (0);
+}
+
+static int
+i915_ppgtt_info(struct drm_device *dev, struct sbuf *m, void *data)
+{
+ struct drm_i915_private *dev_priv;
+ struct intel_ring_buffer *ring;
+ int i, ret;
+
+ dev_priv = dev->dev_private;
+
+ ret = sx_xlock_sig(&dev->dev_struct_lock);
+ if (ret != 0)
+ return (EINTR);
+ if (INTEL_INFO(dev)->gen == 6)
+ sbuf_printf(m, "GFX_MODE: 0x%08x\n", I915_READ(GFX_MODE));
+
+ for (i = 0; i < I915_NUM_RINGS; i++) {
+ ring = &dev_priv->rings[i];
+
+ sbuf_printf(m, "%s\n", ring->name);
+ if (INTEL_INFO(dev)->gen == 7)
+ sbuf_printf(m, "GFX_MODE: 0x%08x\n", I915_READ(RING_MODE_GEN7(ring)));
+ sbuf_printf(m, "PP_DIR_BASE: 0x%08x\n", I915_READ(RING_PP_DIR_BASE(ring)));
+ sbuf_printf(m, "PP_DIR_BASE_READ: 0x%08x\n", I915_READ(RING_PP_DIR_BASE_READ(ring)));
+ sbuf_printf(m, "PP_DIR_DCLV: 0x%08x\n", I915_READ(RING_PP_DIR_DCLV(ring)));
+ }
+ if (dev_priv->mm.aliasing_ppgtt) {
+ struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
+
+ sbuf_printf(m, "aliasing PPGTT:\n");
+ sbuf_printf(m, "pd gtt offset: 0x%08x\n", ppgtt->pd_offset);
+ }
+ sbuf_printf(m, "ECOCHK: 0x%08x\n", I915_READ(GAM_ECOCHK));
+ DRM_UNLOCK(dev);
+
+ return (0);
+}
+
+static int
+i915_debug_set_wedged(SYSCTL_HANDLER_ARGS)
+{
+ struct drm_device *dev;
+ drm_i915_private_t *dev_priv;
+ int error, wedged;
+
+ dev = arg1;
+ dev_priv = dev->dev_private;
+ if (dev_priv == NULL)
+ return (EBUSY);
+ wedged = dev_priv->mm.wedged;
+ error = sysctl_handle_int(oidp, &wedged, 0, req);
+ if (error || !req->newptr)
+ return (error);
+ DRM_INFO("Manually setting wedged to %d\n", wedged);
+ i915_handle_error(dev, wedged);
+ return (error);
+}
+
+static int
+i915_max_freq(SYSCTL_HANDLER_ARGS)
+{
+ struct drm_device *dev;
+ drm_i915_private_t *dev_priv;
+ int error, max_freq;
+
+ dev = arg1;
+ dev_priv = dev->dev_private;
+ if (dev_priv == NULL)
+ return (EBUSY);
+ max_freq = dev_priv->max_delay * 50;
+ error = sysctl_handle_int(oidp, &max_freq, 0, req);
+ if (error || !req->newptr)
+ return (error);
+ DRM_DEBUG("Manually setting max freq to %d\n", max_freq);
+ /*
+ * Turbo will still be enabled, but won't go above the set value.
+ */
+ dev_priv->max_delay = max_freq / 50;
+ gen6_set_rps(dev, max_freq / 50);
+ return (error);
+}
+
+static int
+i915_cache_sharing(SYSCTL_HANDLER_ARGS)
+{
+ struct drm_device *dev;
+ drm_i915_private_t *dev_priv;
+ int error, snpcr, cache_sharing;
+
+ dev = arg1;
+ dev_priv = dev->dev_private;
+ if (dev_priv == NULL)
+ return (EBUSY);
+ DRM_LOCK(dev);
+ snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
+ DRM_UNLOCK(dev);
+ cache_sharing = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT;
+ error = sysctl_handle_int(oidp, &cache_sharing, 0, req);
+ if (error || !req->newptr)
+ return (error);
+ if (cache_sharing < 0 || cache_sharing > 3)
+ return (EINVAL);
+ DRM_DEBUG("Manually setting uncore sharing to %d\n", cache_sharing);
+
+ DRM_LOCK(dev);
+ /* Update the cache sharing policy here as well */
+ snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
+ snpcr &= ~GEN6_MBC_SNPCR_MASK;
+ snpcr |= (cache_sharing << GEN6_MBC_SNPCR_SHIFT);
+ I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
+ DRM_UNLOCK(dev);
+ return (0);
+}
+
+static struct i915_info_sysctl_list {
+ const char *name;
+ int (*ptr)(struct drm_device *dev, struct sbuf *m, void *data);
+ int flags;
+ void *data;
+} i915_info_sysctl_list[] = {
+ {"i915_capabilities", i915_capabilities, 0},
+ {"i915_gem_objects", i915_gem_object_info, 0},
+ {"i915_gem_gtt", i915_gem_gtt_info, 0},
+ {"i915_gem_active", i915_gem_object_list_info, 0, (void *)ACTIVE_LIST},
+ {"i915_gem_flushing", i915_gem_object_list_info, 0,
+ (void *)FLUSHING_LIST},
+ {"i915_gem_inactive", i915_gem_object_list_info, 0,
+ (void *)INACTIVE_LIST},
+ {"i915_gem_pinned", i915_gem_object_list_info, 0,
+ (void *)PINNED_LIST},
+ {"i915_gem_deferred_free", i915_gem_object_list_info, 0,
+ (void *)DEFERRED_FREE_LIST},
+ {"i915_gem_pageflip", i915_gem_pageflip_info, 0},
+ {"i915_gem_request", i915_gem_request_info, 0},
+ {"i915_gem_seqno", i915_gem_seqno_info, 0},
+ {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0},
+ {"i915_gem_interrupt", i915_interrupt_info, 0},
+ {"i915_gem_hws", i915_hws_info, 0, (void *)RCS},
+ {"i915_gem_hws_blt", i915_hws_info, 0, (void *)BCS},
+ {"i915_gem_hws_bsd", i915_hws_info, 0, (void *)VCS},
+ {"i915_ringbuffer_data", i915_ringbuffer_data, 0, (void *)RCS},
+ {"i915_ringbuffer_info", i915_ringbuffer_info, 0, (void *)RCS},
+ {"i915_bsd_ringbuffer_data", i915_ringbuffer_data, 0, (void *)VCS},
+ {"i915_bsd_ringbuffer_info", i915_ringbuffer_info, 0, (void *)VCS},
+ {"i915_blt_ringbuffer_data", i915_ringbuffer_data, 0, (void *)BCS},
+ {"i915_blt_ringbuffer_info", i915_ringbuffer_info, 0, (void *)BCS},
+ {"i915_error_state", i915_error_state, 0},
+ {"i915_rstdby_delays", i915_rstdby_delays, 0},
+ {"i915_cur_delayinfo", i915_cur_delayinfo, 0},
+ {"i915_delayfreq_table", i915_delayfreq_table, 0},
+ {"i915_inttoext_table", i915_inttoext_table, 0},
+ {"i915_drpc_info", i915_drpc_info, 0},
+ {"i915_emon_status", i915_emon_status, 0},
+ {"i915_ring_freq_table", i915_ring_freq_table, 0},
+ {"i915_gfxec", i915_gfxec, 0},
+ {"i915_fbc_status", i915_fbc_status, 0},
+ {"i915_sr_status", i915_sr_status, 0},
+#if 0
+ {"i915_opregion", i915_opregion, 0},
+#endif
+ {"i915_gem_framebuffer", i915_gem_framebuffer_info, 0},
+ {"i915_context_status", i915_context_status, 0},
+ {"i915_gen6_forcewake_count_info", i915_gen6_forcewake_count_info, 0},
+ {"i915_swizzle_info", i915_swizzle_info, 0},
+ {"i915_ppgtt_info", i915_ppgtt_info, 0},
+};
+
+struct i915_info_sysctl_thunk {
+ struct drm_device *dev;
+ int idx;
+ void *arg;
+};
+
+static int
+i915_info_sysctl_handler(SYSCTL_HANDLER_ARGS)
+{
+ struct sbuf m;
+ struct i915_info_sysctl_thunk *thunk;
+ struct drm_device *dev;
+ drm_i915_private_t *dev_priv;
+ int error;
+
+ thunk = arg1;
+ dev = thunk->dev;
+ dev_priv = dev->dev_private;
+ if (dev_priv == NULL)
+ return (EBUSY);
+ error = sysctl_wire_old_buffer(req, 0);
+ if (error != 0)
+ return (error);
+ sbuf_new_for_sysctl(&m, NULL, 128, req);
+ error = i915_info_sysctl_list[thunk->idx].ptr(dev, &m,
+ thunk->arg);
+ if (error == 0)
+ error = sbuf_finish(&m);
+ sbuf_delete(&m);
+ return (error);
+}
+
+extern int i915_gem_sync_exec_requests;
+extern int i915_fix_mi_batchbuffer_end;
+extern int i915_intr_pf;
+extern long i915_gem_wired_pages_cnt;
+
+int
+i915_sysctl_init(struct drm_device *dev, struct sysctl_ctx_list *ctx,
+ struct sysctl_oid *top)
+{
+ struct sysctl_oid *oid, *info;
+ struct i915_info_sysctl_thunk *thunks;
+ int i, error;
+
+ thunks = malloc(sizeof(*thunks) * DRM_ARRAY_SIZE(i915_info_sysctl_list),
+ DRM_MEM_DRIVER, M_WAITOK | M_ZERO);
+ for (i = 0; i < DRM_ARRAY_SIZE(i915_info_sysctl_list); i++) {
+ thunks[i].dev = dev;
+ thunks[i].idx = i;
+ thunks[i].arg = i915_info_sysctl_list[i].data;
+ }
+ dev->sysctl_private = thunks;
+ info = SYSCTL_ADD_NODE(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "info",
+ CTLFLAG_RW, NULL, NULL);
+ if (info == NULL)
+ return (ENOMEM);
+ for (i = 0; i < DRM_ARRAY_SIZE(i915_info_sysctl_list); i++) {
+ oid = SYSCTL_ADD_OID(ctx, SYSCTL_CHILDREN(info), OID_AUTO,
+ i915_info_sysctl_list[i].name, CTLTYPE_STRING | CTLFLAG_RD,
+ &thunks[i], 0, i915_info_sysctl_handler, "A", NULL);
+ if (oid == NULL)
+ return (ENOMEM);
+ }
+ oid = SYSCTL_ADD_LONG(ctx, SYSCTL_CHILDREN(info), OID_AUTO,
+ "i915_gem_wired_pages", CTLFLAG_RD, &i915_gem_wired_pages_cnt,
+ NULL);
+ oid = SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "wedged",
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, 0,
+ i915_debug_set_wedged, "I", NULL);
+ if (oid == NULL)
+ return (ENOMEM);
+ oid = SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "max_freq",
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, 0, i915_max_freq,
+ "I", NULL);
+ if (oid == NULL)
+ return (ENOMEM);
+ oid = SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(top), OID_AUTO,
+ "cache_sharing", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev,
+ 0, i915_cache_sharing, "I", NULL);
+ if (oid == NULL)
+ return (ENOMEM);
+ oid = SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "sync_exec",
+ CTLFLAG_RW, &i915_gem_sync_exec_requests, 0, NULL);
+ if (oid == NULL)
+ return (ENOMEM);
+ oid = SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "fix_mi",
+ CTLFLAG_RW, &i915_fix_mi_batchbuffer_end, 0, NULL);
+ if (oid == NULL)
+ return (ENOMEM);
+ oid = SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(top), OID_AUTO, "intr_pf",
+ CTLFLAG_RW, &i915_intr_pf, 0, NULL);
+ if (oid == NULL)
+ return (ENOMEM);
+
+ error = drm_add_busid_modesetting(dev, ctx, top);
+ if (error != 0)
+ return (error);
+
+ return (0);
+}
+
+void
+i915_sysctl_cleanup(struct drm_device *dev)
+{
+
+ free(dev->sysctl_private, DRM_MEM_DRIVER);
+}
diff --git a/sys/dev/drm2/i915/i915_dma.c b/sys/dev/drm2/i915/i915_dma.c
new file mode 100644
index 000000000000..f78553e2a9fa
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_dma.c
@@ -0,0 +1,2075 @@
+/* i915_dma.c -- DMA support for the I915 -*- linux-c -*-
+ */
+/*-
+ * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/i915/intel_ringbuffer.h>
+
+static struct drm_i915_private *i915_mch_dev;
+/*
+ * Lock protecting IPS related data structures
+ * - i915_mch_dev
+ * - dev_priv->max_delay
+ * - dev_priv->min_delay
+ * - dev_priv->fmax
+ * - dev_priv->gpu_busy
+ */
+static struct mtx mchdev_lock;
+MTX_SYSINIT(mchdev, &mchdev_lock, "mchdev", MTX_DEF);
+
+static void i915_pineview_get_mem_freq(struct drm_device *dev);
+static void i915_ironlake_get_mem_freq(struct drm_device *dev);
+static int i915_driver_unload_int(struct drm_device *dev, bool locked);
+
+static void i915_write_hws_pga(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 addr;
+
+ addr = dev_priv->status_page_dmah->busaddr;
+ if (INTEL_INFO(dev)->gen >= 4)
+ addr |= (dev_priv->status_page_dmah->busaddr >> 28) & 0xf0;
+ I915_WRITE(HWS_PGA, addr);
+}
+
+/**
+ * Sets up the hardware status page for devices that need a physical address
+ * in the register.
+ */
+static int i915_init_phys_hws(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring = LP_RING(dev_priv);
+
+ /*
+ * Program Hardware Status Page
+ * XXXKIB Keep 4GB limit for allocation for now. This method
+ * of allocation is used on <= 965 hardware, that has several
+ * erratas regarding the use of physical memory > 4 GB.
+ */
+ DRM_UNLOCK(dev);
+ dev_priv->status_page_dmah =
+ drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, 0xffffffff);
+ DRM_LOCK(dev);
+ if (!dev_priv->status_page_dmah) {
+ DRM_ERROR("Can not allocate hardware status page\n");
+ return -ENOMEM;
+ }
+ ring->status_page.page_addr = dev_priv->hw_status_page =
+ dev_priv->status_page_dmah->vaddr;
+ dev_priv->dma_status_page = dev_priv->status_page_dmah->busaddr;
+
+ memset(dev_priv->hw_status_page, 0, PAGE_SIZE);
+
+ i915_write_hws_pga(dev);
+ DRM_DEBUG("Enabled hardware status page, phys %jx\n",
+ (uintmax_t)dev_priv->dma_status_page);
+ return 0;
+}
+
+/**
+ * Frees the hardware status page, whether it's a physical address or a virtual
+ * address set up by the X Server.
+ */
+static void i915_free_hws(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring = LP_RING(dev_priv);
+
+ if (dev_priv->status_page_dmah) {
+ drm_pci_free(dev, dev_priv->status_page_dmah);
+ dev_priv->status_page_dmah = NULL;
+ }
+
+ if (dev_priv->status_gfx_addr) {
+ dev_priv->status_gfx_addr = 0;
+ ring->status_page.gfx_addr = 0;
+ drm_core_ioremapfree(&dev_priv->hws_map, dev);
+ }
+
+ /* Need to rewrite hardware status page */
+ I915_WRITE(HWS_PGA, 0x1ffff000);
+}
+
+void i915_kernel_lost_context(struct drm_device * dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring = LP_RING(dev_priv);
+
+ /*
+ * We should never lose context on the ring with modesetting
+ * as we don't expose it to userspace
+ */
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ return;
+
+ ring->head = I915_READ_HEAD(ring) & HEAD_ADDR;
+ ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
+ ring->space = ring->head - (ring->tail + 8);
+ if (ring->space < 0)
+ ring->space += ring->size;
+
+#if 1
+ KIB_NOTYET();
+#else
+ if (!dev->primary->master)
+ return;
+#endif
+
+ if (ring->head == ring->tail && dev_priv->sarea_priv)
+ dev_priv->sarea_priv->perf_boxes |= I915_BOX_RING_EMPTY;
+}
+
+static int i915_dma_cleanup(struct drm_device * dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int i;
+
+
+ /* Make sure interrupts are disabled here because the uninstall ioctl
+ * may not have been called from userspace and after dev_private
+ * is freed, it's too late.
+ */
+ if (dev->irq_enabled)
+ drm_irq_uninstall(dev);
+
+ for (i = 0; i < I915_NUM_RINGS; i++)
+ intel_cleanup_ring_buffer(&dev_priv->rings[i]);
+
+ /* Clear the HWS virtual address at teardown */
+ if (I915_NEED_GFX_HWS(dev))
+ i915_free_hws(dev);
+
+ return 0;
+}
+
+static int i915_initialize(struct drm_device * dev, drm_i915_init_t * init)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int ret;
+
+ dev_priv->sarea = drm_getsarea(dev);
+ if (!dev_priv->sarea) {
+ DRM_ERROR("can not find sarea!\n");
+ i915_dma_cleanup(dev);
+ return -EINVAL;
+ }
+
+ dev_priv->sarea_priv = (drm_i915_sarea_t *)
+ ((u8 *) dev_priv->sarea->virtual + init->sarea_priv_offset);
+
+ if (init->ring_size != 0) {
+ if (LP_RING(dev_priv)->obj != NULL) {
+ i915_dma_cleanup(dev);
+ DRM_ERROR("Client tried to initialize ringbuffer in "
+ "GEM mode\n");
+ return -EINVAL;
+ }
+
+ ret = intel_render_ring_init_dri(dev,
+ init->ring_start,
+ init->ring_size);
+ if (ret) {
+ i915_dma_cleanup(dev);
+ return ret;
+ }
+ }
+
+ dev_priv->cpp = init->cpp;
+ dev_priv->back_offset = init->back_offset;
+ dev_priv->front_offset = init->front_offset;
+ dev_priv->current_page = 0;
+ dev_priv->sarea_priv->pf_current_page = 0;
+
+ /* Allow hardware batchbuffers unless told otherwise.
+ */
+ dev_priv->allow_batchbuffer = 1;
+
+ return 0;
+}
+
+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");
+
+ if (ring->map.handle == NULL) {
+ DRM_ERROR("can not ioremap virtual address for"
+ " ring buffer\n");
+ return -ENOMEM;
+ }
+
+ /* Program Hardware Status Page */
+ if (!ring->status_page.page_addr) {
+ DRM_ERROR("Can not find hardware status page\n");
+ return -EINVAL;
+ }
+ DRM_DEBUG("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");
+
+ return 0;
+}
+
+static int i915_dma_init(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_i915_init_t *init = data;
+ int retcode = 0;
+
+ switch (init->func) {
+ case I915_INIT_DMA:
+ retcode = i915_initialize(dev, init);
+ break;
+ case I915_CLEANUP_DMA:
+ retcode = i915_dma_cleanup(dev);
+ break;
+ case I915_RESUME_DMA:
+ retcode = i915_dma_resume(dev);
+ break;
+ default:
+ retcode = -EINVAL;
+ break;
+ }
+
+ return retcode;
+}
+
+/* Implement basically the same security restrictions as hardware does
+ * for MI_BATCH_NON_SECURE. These can be made stricter at any time.
+ *
+ * Most of the calculations below involve calculating the size of a
+ * particular instruction. It's important to get the size right as
+ * that tells us where the next instruction to check is. Any illegal
+ * instruction detected will be given a size of zero, which is a
+ * signal to abort the rest of the buffer.
+ */
+static int do_validate_cmd(int cmd)
+{
+ switch (((cmd >> 29) & 0x7)) {
+ case 0x0:
+ switch ((cmd >> 23) & 0x3f) {
+ case 0x0:
+ return 1; /* MI_NOOP */
+ case 0x4:
+ return 1; /* MI_FLUSH */
+ default:
+ return 0; /* disallow everything else */
+ }
+ break;
+ case 0x1:
+ return 0; /* reserved */
+ case 0x2:
+ return (cmd & 0xff) + 2; /* 2d commands */
+ case 0x3:
+ if (((cmd >> 24) & 0x1f) <= 0x18)
+ return 1;
+
+ switch ((cmd >> 24) & 0x1f) {
+ case 0x1c:
+ return 1;
+ case 0x1d:
+ switch ((cmd >> 16) & 0xff) {
+ case 0x3:
+ return (cmd & 0x1f) + 2;
+ case 0x4:
+ return (cmd & 0xf) + 2;
+ default:
+ return (cmd & 0xffff) + 2;
+ }
+ case 0x1e:
+ if (cmd & (1 << 23))
+ return (cmd & 0xffff) + 1;
+ else
+ return 1;
+ case 0x1f:
+ if ((cmd & (1 << 23)) == 0) /* inline vertices */
+ return (cmd & 0x1ffff) + 2;
+ else if (cmd & (1 << 17)) /* indirect random */
+ if ((cmd & 0xffff) == 0)
+ return 0; /* unknown length, too hard */
+ else
+ return (((cmd & 0xffff) + 1) / 2) + 1;
+ else
+ return 2; /* indirect sequential */
+ default:
+ return 0;
+ }
+ default:
+ return 0;
+ }
+
+ return 0;
+}
+
+static int validate_cmd(int cmd)
+{
+ int ret = do_validate_cmd(cmd);
+
+/* printk("validate_cmd( %x ): %d\n", cmd, ret); */
+
+ return ret;
+}
+
+static int i915_emit_cmds(struct drm_device *dev, int __user *buffer,
+ int dwords)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int i;
+
+ if ((dwords+1) * sizeof(int) >= LP_RING(dev_priv)->size - 8)
+ return -EINVAL;
+
+ BEGIN_LP_RING((dwords+1)&~1);
+
+ for (i = 0; i < dwords;) {
+ int cmd, sz;
+
+ if (DRM_COPY_FROM_USER_UNCHECKED(&cmd, &buffer[i], sizeof(cmd)))
+ return -EINVAL;
+
+ if ((sz = validate_cmd(cmd)) == 0 || i + sz > dwords)
+ return -EINVAL;
+
+ OUT_RING(cmd);
+
+ while (++i, --sz) {
+ if (DRM_COPY_FROM_USER_UNCHECKED(&cmd, &buffer[i],
+ sizeof(cmd))) {
+ return -EINVAL;
+ }
+ OUT_RING(cmd);
+ }
+ }
+
+ if (dwords & 1)
+ OUT_RING(0);
+
+ ADVANCE_LP_RING();
+
+ return 0;
+}
+
+int i915_emit_box(struct drm_device * dev,
+ struct drm_clip_rect *boxes,
+ int i, int DR1, int DR4)
+{
+ struct drm_clip_rect box;
+
+ if (DRM_COPY_FROM_USER_UNCHECKED(&box, &boxes[i], sizeof(box))) {
+ return -EFAULT;
+ }
+
+ return (i915_emit_box_p(dev, &box, DR1, DR4));
+}
+
+int
+i915_emit_box_p(struct drm_device *dev, struct drm_clip_rect *box,
+ int DR1, int DR4)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int ret;
+
+ if (box->y2 <= box->y1 || box->x2 <= box->x1 || box->y2 <= 0 ||
+ box->x2 <= 0) {
+ DRM_ERROR("Bad box %d,%d..%d,%d\n",
+ box->x1, box->y1, box->x2, box->y2);
+ return -EINVAL;
+ }
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ ret = BEGIN_LP_RING(4);
+ if (ret != 0)
+ return (ret);
+
+ OUT_RING(GFX_OP_DRAWRECT_INFO_I965);
+ OUT_RING((box->x1 & 0xffff) | (box->y1 << 16));
+ OUT_RING(((box->x2 - 1) & 0xffff) | ((box->y2 - 1) << 16));
+ OUT_RING(DR4);
+ } else {
+ ret = BEGIN_LP_RING(6);
+ if (ret != 0)
+ return (ret);
+
+ OUT_RING(GFX_OP_DRAWRECT_INFO);
+ OUT_RING(DR1);
+ OUT_RING((box->x1 & 0xffff) | (box->y1 << 16));
+ OUT_RING(((box->x2 - 1) & 0xffff) | ((box->y2 - 1) << 16));
+ OUT_RING(DR4);
+ OUT_RING(0);
+ }
+ ADVANCE_LP_RING();
+
+ return 0;
+}
+
+/* XXX: Emitting the counter should really be moved to part of the IRQ
+ * emit. For now, do it in both places:
+ */
+
+static void i915_emit_breadcrumb(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (++dev_priv->counter > 0x7FFFFFFFUL)
+ dev_priv->counter = 0;
+ if (dev_priv->sarea_priv)
+ dev_priv->sarea_priv->last_enqueue = dev_priv->counter;
+
+ if (BEGIN_LP_RING(4) == 0) {
+ OUT_RING(MI_STORE_DWORD_INDEX);
+ OUT_RING(I915_BREADCRUMB_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
+ OUT_RING(dev_priv->counter);
+ OUT_RING(0);
+ ADVANCE_LP_RING();
+ }
+}
+
+static int i915_dispatch_cmdbuffer(struct drm_device * dev,
+ drm_i915_cmdbuffer_t * cmd, struct drm_clip_rect *cliprects, void *cmdbuf)
+{
+ int nbox = cmd->num_cliprects;
+ int i = 0, count, ret;
+
+ if (cmd->sz & 0x3) {
+ DRM_ERROR("alignment\n");
+ return -EINVAL;
+ }
+
+ i915_kernel_lost_context(dev);
+
+ count = nbox ? nbox : 1;
+
+ for (i = 0; i < count; i++) {
+ if (i < nbox) {
+ ret = i915_emit_box_p(dev, &cmd->cliprects[i],
+ cmd->DR1, cmd->DR4);
+ if (ret)
+ return ret;
+ }
+
+ ret = i915_emit_cmds(dev, cmdbuf, cmd->sz / 4);
+ if (ret)
+ return ret;
+ }
+
+ i915_emit_breadcrumb(dev);
+ return 0;
+}
+
+static int
+i915_dispatch_batchbuffer(struct drm_device * dev,
+ drm_i915_batchbuffer_t * batch, struct drm_clip_rect *cliprects)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int nbox = batch->num_cliprects;
+ int i, count, ret;
+
+ if ((batch->start | batch->used) & 0x7) {
+ DRM_ERROR("alignment\n");
+ return -EINVAL;
+ }
+
+ i915_kernel_lost_context(dev);
+
+ count = nbox ? nbox : 1;
+
+ for (i = 0; i < count; i++) {
+ if (i < nbox) {
+ int ret = i915_emit_box_p(dev, &cliprects[i],
+ batch->DR1, batch->DR4);
+ if (ret)
+ return ret;
+ }
+
+ if (!IS_I830(dev) && !IS_845G(dev)) {
+ ret = BEGIN_LP_RING(2);
+ if (ret != 0)
+ return (ret);
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ OUT_RING(MI_BATCH_BUFFER_START | (2 << 6) |
+ MI_BATCH_NON_SECURE_I965);
+ OUT_RING(batch->start);
+ } else {
+ OUT_RING(MI_BATCH_BUFFER_START | (2 << 6));
+ OUT_RING(batch->start | MI_BATCH_NON_SECURE);
+ }
+ } else {
+ ret = BEGIN_LP_RING(4);
+ if (ret != 0)
+ return (ret);
+
+ OUT_RING(MI_BATCH_BUFFER);
+ OUT_RING(batch->start | MI_BATCH_NON_SECURE);
+ OUT_RING(batch->start + batch->used - 4);
+ OUT_RING(0);
+ }
+ ADVANCE_LP_RING();
+ }
+
+ i915_emit_breadcrumb(dev);
+
+ return 0;
+}
+
+static int i915_dispatch_flip(struct drm_device * dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int ret;
+
+ if (!dev_priv->sarea_priv)
+ return -EINVAL;
+
+ DRM_DEBUG("%s: page=%d pfCurrentPage=%d\n",
+ __func__,
+ dev_priv->current_page,
+ dev_priv->sarea_priv->pf_current_page);
+
+ i915_kernel_lost_context(dev);
+
+ ret = BEGIN_LP_RING(10);
+ if (ret)
+ return ret;
+ OUT_RING(MI_FLUSH | MI_READ_FLUSH);
+ OUT_RING(0);
+
+ OUT_RING(CMD_OP_DISPLAYBUFFER_INFO | ASYNC_FLIP);
+ OUT_RING(0);
+ if (dev_priv->current_page == 0) {
+ OUT_RING(dev_priv->back_offset);
+ dev_priv->current_page = 1;
+ } else {
+ OUT_RING(dev_priv->front_offset);
+ dev_priv->current_page = 0;
+ }
+ OUT_RING(0);
+
+ OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_PLANE_A_FLIP);
+ OUT_RING(0);
+
+ ADVANCE_LP_RING();
+
+ if (++dev_priv->counter > 0x7FFFFFFFUL)
+ dev_priv->counter = 0;
+ if (dev_priv->sarea_priv)
+ dev_priv->sarea_priv->last_enqueue = dev_priv->counter;
+
+ if (BEGIN_LP_RING(4) == 0) {
+ OUT_RING(MI_STORE_DWORD_INDEX);
+ OUT_RING(I915_BREADCRUMB_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
+ OUT_RING(dev_priv->counter);
+ OUT_RING(0);
+ ADVANCE_LP_RING();
+ }
+
+ dev_priv->sarea_priv->pf_current_page = dev_priv->current_page;
+ return 0;
+}
+
+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));
+}
+
+static int
+i915_flush_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+{
+ int ret;
+
+ RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
+
+ DRM_LOCK(dev);
+ ret = i915_quiescent(dev);
+ DRM_UNLOCK(dev);
+
+ return (ret);
+}
+
+static int i915_batchbuffer(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ drm_i915_sarea_t *sarea_priv;
+ drm_i915_batchbuffer_t *batch = data;
+ struct drm_clip_rect *cliprects;
+ size_t cliplen;
+ int ret;
+
+ if (!dev_priv->allow_batchbuffer) {
+ DRM_ERROR("Batchbuffer ioctl disabled\n");
+ return -EINVAL;
+ }
+ DRM_UNLOCK(dev);
+
+ DRM_DEBUG("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);
+
+ ret = -copyin(batch->cliprects, cliprects,
+ batch->num_cliprects * sizeof(struct drm_clip_rect));
+ if (ret != 0) {
+ DRM_LOCK(dev);
+ goto fail_free;
+ }
+ } else
+ cliprects = NULL;
+
+ DRM_LOCK(dev);
+ RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
+ ret = i915_dispatch_batchbuffer(dev, batch, cliprects);
+
+ sarea_priv = (drm_i915_sarea_t *)dev_priv->sarea_priv;
+ if (sarea_priv)
+ sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
+
+fail_free:
+ free(cliprects, DRM_MEM_DMA);
+ return ret;
+}
+
+static int i915_cmdbuffer(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ drm_i915_sarea_t *sarea_priv;
+ drm_i915_cmdbuffer_t *cmdbuf = data;
+ struct drm_clip_rect *cliprects = NULL;
+ void *batch_data;
+ int ret;
+
+ 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;
+
+ DRM_UNLOCK(dev);
+
+ batch_data = malloc(cmdbuf->sz, DRM_MEM_DMA, M_WAITOK);
+
+ ret = -copyin(cmdbuf->buf, batch_data, cmdbuf->sz);
+ if (ret != 0) {
+ DRM_LOCK(dev);
+ goto fail_batch_free;
+ }
+
+ if (cmdbuf->num_cliprects) {
+ cliprects = malloc(cmdbuf->num_cliprects *
+ 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) {
+ DRM_LOCK(dev);
+ goto fail_clip_free;
+ }
+ }
+
+ DRM_LOCK(dev);
+ RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
+ ret = i915_dispatch_cmdbuffer(dev, cmdbuf, cliprects, batch_data);
+ if (ret) {
+ DRM_ERROR("i915_dispatch_cmdbuffer failed\n");
+ goto fail_clip_free;
+ }
+
+ sarea_priv = (drm_i915_sarea_t *)dev_priv->sarea_priv;
+ if (sarea_priv)
+ sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
+
+fail_clip_free:
+ free(cliprects, DRM_MEM_DMA);
+fail_batch_free:
+ free(batch_data, DRM_MEM_DMA);
+ return ret;
+}
+
+static int i915_flip_bufs(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ int ret;
+
+ DRM_DEBUG("%s\n", __func__);
+
+ RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
+
+ ret = i915_dispatch_flip(dev);
+
+ return ret;
+}
+
+static int i915_getparam(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ drm_i915_getparam_t *param = data;
+ int value;
+
+ if (!dev_priv) {
+ DRM_ERROR("called with no initialization\n");
+ return -EINVAL;
+ }
+
+ switch (param->param) {
+ case I915_PARAM_IRQ_ACTIVE:
+ value = dev->irq_enabled ? 1 : 0;
+ break;
+ case I915_PARAM_ALLOW_BATCHBUFFER:
+ value = dev_priv->allow_batchbuffer ? 1 : 0;
+ break;
+ case I915_PARAM_LAST_DISPATCH:
+ value = READ_BREADCRUMB(dev_priv);
+ break;
+ case I915_PARAM_CHIPSET_ID:
+ value = dev->pci_device;
+ break;
+ case I915_PARAM_HAS_GEM:
+ value = 1;
+ break;
+ case I915_PARAM_NUM_FENCES_AVAIL:
+ value = dev_priv->num_fence_regs - dev_priv->fence_reg_start;
+ break;
+ case I915_PARAM_HAS_OVERLAY:
+ value = dev_priv->overlay ? 1 : 0;
+ break;
+ case I915_PARAM_HAS_PAGEFLIPPING:
+ value = 1;
+ break;
+ case I915_PARAM_HAS_EXECBUF2:
+ value = 1;
+ break;
+ case I915_PARAM_HAS_BSD:
+ value = HAS_BSD(dev);
+ break;
+ case I915_PARAM_HAS_BLT:
+ value = HAS_BLT(dev);
+ break;
+ case I915_PARAM_HAS_RELAXED_FENCING:
+ value = 1;
+ break;
+ case I915_PARAM_HAS_COHERENT_RINGS:
+ value = 1;
+ break;
+ case I915_PARAM_HAS_EXEC_CONSTANTS:
+ value = INTEL_INFO(dev)->gen >= 4;
+ break;
+ case I915_PARAM_HAS_RELAXED_DELTA:
+ value = 1;
+ break;
+ case I915_PARAM_HAS_GEN7_SOL_RESET:
+ value = 1;
+ break;
+ case I915_PARAM_HAS_LLC:
+ value = HAS_LLC(dev);
+ break;
+ default:
+ DRM_DEBUG_DRIVER("Unknown parameter %d\n",
+ param->param);
+ return -EINVAL;
+ }
+
+ if (DRM_COPY_TO_USER(param->value, &value, sizeof(int))) {
+ DRM_ERROR("DRM_COPY_TO_USER failed\n");
+ return -EFAULT;
+ }
+
+ return 0;
+}
+
+static int i915_setparam(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ drm_i915_setparam_t *param = data;
+
+ if (!dev_priv) {
+ DRM_ERROR("called with no initialization\n");
+ return -EINVAL;
+ }
+
+ switch (param->param) {
+ case I915_SETPARAM_USE_MI_BATCHBUFFER_START:
+ break;
+ case I915_SETPARAM_TEX_LRU_LOG_GRANULARITY:
+ dev_priv->tex_lru_log_granularity = param->value;
+ break;
+ case I915_SETPARAM_ALLOW_BATCHBUFFER:
+ dev_priv->allow_batchbuffer = param->value;
+ break;
+ case I915_SETPARAM_NUM_USED_FENCES:
+ if (param->value > dev_priv->num_fence_regs ||
+ param->value < 0)
+ return -EINVAL;
+ /* Userspace can use first N regs */
+ dev_priv->fence_reg_start = param->value;
+ break;
+ default:
+ DRM_DEBUG("unknown parameter %d\n", param->param);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int i915_set_status_page(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ 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);
+
+ if (!I915_NEED_GFX_HWS(dev))
+ return -EINVAL;
+
+ if (!dev_priv) {
+ DRM_ERROR("called with no initialization\n");
+ 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;
+ }
+
+ ring->status_page.gfx_addr = dev_priv->status_gfx_addr =
+ hws->addr & (0x1ffff<<12);
+
+ dev_priv->hws_map.offset = dev->agp->base + hws->addr;
+ dev_priv->hws_map.size = 4*1024;
+ dev_priv->hws_map.type = 0;
+ dev_priv->hws_map.flags = 0;
+ dev_priv->hws_map.mtrr = 0;
+
+ drm_core_ioremap_wc(&dev_priv->hws_map, dev);
+ if (dev_priv->hws_map.virtual == NULL) {
+ i915_dma_cleanup(dev);
+ ring->status_page.gfx_addr = dev_priv->status_gfx_addr = 0;
+ DRM_ERROR("can not ioremap virtual address for"
+ " G33 hw status page\n");
+ return -ENOMEM;
+ }
+ ring->status_page.page_addr = dev_priv->hw_status_page =
+ dev_priv->hws_map.virtual;
+
+ memset(dev_priv->hw_status_page, 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 bool
+intel_enable_ppgtt(struct drm_device *dev)
+{
+ if (i915_enable_ppgtt >= 0)
+ return i915_enable_ppgtt;
+
+ /* Disable ppgtt on SNB if VT-d is on. */
+ if (INTEL_INFO(dev)->gen == 6 && intel_iommu_enabled)
+ return false;
+
+ return true;
+}
+
+static int
+i915_load_gem_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ unsigned long prealloc_size, gtt_size, mappable_size;
+ int ret;
+
+ prealloc_size = dev_priv->mm.gtt.stolen_size;
+ gtt_size = dev_priv->mm.gtt.gtt_total_entries << PAGE_SHIFT;
+ mappable_size = dev_priv->mm.gtt.gtt_mappable_entries << PAGE_SHIFT;
+
+ /* Basic memrange allocator for stolen space */
+ drm_mm_init(&dev_priv->mm.stolen, 0, prealloc_size);
+
+ DRM_LOCK(dev);
+ if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
+ /* PPGTT pdes are stolen from global gtt ptes, so shrink the
+ * aperture accordingly when using aliasing ppgtt. */
+ gtt_size -= I915_PPGTT_PD_ENTRIES*PAGE_SIZE;
+ /* For paranoia keep the guard page in between. */
+ gtt_size -= PAGE_SIZE;
+
+ i915_gem_do_init(dev, 0, mappable_size, gtt_size);
+
+ ret = i915_gem_init_aliasing_ppgtt(dev);
+ if (ret) {
+ DRM_UNLOCK(dev);
+ return ret;
+ }
+ } else {
+ /* Let GEM Manage all of the aperture.
+ *
+ * However, leave one page at the end still bound to the scratch
+ * page. There are a number of places where the hardware
+ * apparently prefetches past the end of the object, and we've
+ * seen multiple hangs with the GPU head pointer stuck in a
+ * batchbuffer bound at the last page of the aperture. One page
+ * should be enough to keep any prefetching inside of the
+ * aperture.
+ */
+ i915_gem_do_init(dev, 0, mappable_size, gtt_size - PAGE_SIZE);
+ }
+
+ ret = i915_gem_init_hw(dev);
+ DRM_UNLOCK(dev);
+ if (ret != 0) {
+ i915_gem_cleanup_aliasing_ppgtt(dev);
+ return (ret);
+ }
+
+#if 0
+ /* Try to set up FBC with a reasonable compressed buffer size */
+ if (I915_HAS_FBC(dev) && i915_powersave) {
+ int cfb_size;
+
+ /* Leave 1M for line length buffer & misc. */
+
+ /* Try to get a 32M buffer... */
+ if (prealloc_size > (36*1024*1024))
+ cfb_size = 32*1024*1024;
+ else /* fall back to 7/8 of the stolen space */
+ cfb_size = prealloc_size * 7 / 8;
+ i915_setup_compression(dev, cfb_size);
+ }
+#endif
+
+ /* Allow hardware batchbuffers unless told otherwise. */
+ dev_priv->allow_batchbuffer = 1;
+ 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
+
+ /* IIR "flip pending" bit means done if this bit is set */
+ if (IS_GEN3(dev) && (I915_READ(ECOSKPD) & ECO_FLIP_DONE))
+ dev_priv->flip_pending_is_done = true;
+
+ intel_modeset_init(dev);
+
+ ret = i915_load_gem_init(dev);
+ if (ret != 0)
+ goto cleanup_gem;
+
+ 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);
+ return (ret);
+}
+
+static int
+i915_get_bridge_dev(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+
+ dev_priv = dev->dev_private;
+
+ dev_priv->bridge_dev = intel_gtt_get_bridge_device();
+ if (dev_priv->bridge_dev == NULL) {
+ DRM_ERROR("bridge device not found\n");
+ return (-1);
+ }
+ return (0);
+}
+
+#define MCHBAR_I915 0x44
+#define MCHBAR_I965 0x48
+#define MCHBAR_SIZE (4*4096)
+
+#define DEVEN_REG 0x54
+#define DEVEN_MCHBAR_EN (1 << 28)
+
+/* Allocate space for the MCH regs if needed, return nonzero on error */
+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;
+ 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;
+
+ /* If ACPI doesn't have it, assume we need to allocate it ourselves */
+#ifdef XXX_CONFIG_PNP
+ if (mchbar_addr &&
+ pnp_range_reserved(mchbar_addr, mchbar_addr + MCHBAR_SIZE))
+ return 0;
+#endif
+
+ /* Get some space for it */
+ vga = device_get_parent(dev->device);
+ dev_priv->mch_res_rid = 0x100;
+ dev_priv->mch_res = BUS_ALLOC_RESOURCE(device_get_parent(vga),
+ dev->device, 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);
+ }
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ temp = rman_get_start(dev_priv->mch_res);
+ temp >>= 32;
+ pci_write_config(dev_priv->bridge_dev, reg + 4, temp, 4);
+ }
+ pci_write_config(dev_priv->bridge_dev, reg,
+ rman_get_start(dev_priv->mch_res) & UINT32_MAX, 4);
+ return (0);
+}
+
+static void
+intel_setup_mchbar(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv;
+ int mchbar_reg;
+ 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)) {
+ temp = pci_read_config(dev_priv->bridge_dev, DEVEN_REG, 4);
+ enabled = (temp & DEVEN_MCHBAR_EN) != 0;
+ } else {
+ temp = pci_read_config(dev_priv->bridge_dev, mchbar_reg, 4);
+ enabled = temp & 1;
+ }
+
+ /* If it's already enabled, don't have to do anything */
+ if (enabled) {
+ DRM_DEBUG("mchbar already enabled\n");
+ return;
+ }
+
+ if (intel_alloc_mchbar_resource(dev))
+ return;
+
+ dev_priv->mchbar_need_disable = true;
+
+ /* Space is allocated or reserved, so enable it. */
+ if (IS_I915G(dev) || IS_I915GM(dev)) {
+ pci_write_config(dev_priv->bridge_dev, DEVEN_REG,
+ temp | DEVEN_MCHBAR_EN, 4);
+ } else {
+ temp = pci_read_config(dev_priv->bridge_dev, mchbar_reg, 4);
+ pci_write_config(dev_priv->bridge_dev, mchbar_reg, temp | 1, 4);
+ }
+}
+
+static void
+intel_teardown_mchbar(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv;
+ device_t vga;
+ int mchbar_reg;
+ 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,
+ DEVEN_REG, 4);
+ temp &= ~DEVEN_MCHBAR_EN;
+ pci_write_config(dev_priv->bridge_dev, DEVEN_REG,
+ temp, 4);
+ } else {
+ temp = pci_read_config(dev_priv->bridge_dev,
+ mchbar_reg, 4);
+ temp &= ~1;
+ pci_write_config(dev_priv->bridge_dev, mchbar_reg,
+ temp, 4);
+ }
+ }
+
+ if (dev_priv->mch_res != NULL) {
+ vga = device_get_parent(dev->device);
+ BUS_DEACTIVATE_RESOURCE(device_get_parent(vga), dev->device,
+ SYS_RES_MEMORY, dev_priv->mch_res_rid, dev_priv->mch_res);
+ BUS_RELEASE_RESOURCE(device_get_parent(vga), dev->device,
+ SYS_RES_MEMORY, dev_priv->mch_res_rid, dev_priv->mch_res);
+ dev_priv->mch_res = NULL;
+ }
+}
+
+int
+i915_driver_load(struct drm_device *dev, unsigned long flags)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ unsigned long base, size;
+ int mmio_bar, ret;
+
+ ret = 0;
+
+ /* i915 has 4 more counters */
+ dev->counters += 4;
+ dev->types[6] = _DRM_STAT_IRQ;
+ dev->types[7] = _DRM_STAT_PRIMARY;
+ dev->types[8] = _DRM_STAT_SECONDARY;
+ dev->types[9] = _DRM_STAT_DMA;
+
+ dev_priv = malloc(sizeof(drm_i915_private_t), DRM_MEM_DRIVER,
+ M_ZERO | M_WAITOK);
+ if (dev_priv == NULL)
+ return -ENOMEM;
+
+ dev->dev_private = (void *)dev_priv;
+ dev_priv->dev = dev;
+ dev_priv->info = i915_get_device_id(dev->pci_device);
+
+ if (i915_get_bridge_dev(dev)) {
+ free(dev_priv, DRM_MEM_DRIVER);
+ return (-EIO);
+ }
+ dev_priv->mm.gtt = intel_gtt_get();
+
+ /* Add register map (needed for suspend/resume) */
+ mmio_bar = IS_GEN2(dev) ? 1 : 0;
+ 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);
+
+ dev_priv->tq = taskqueue_create("915", M_WAITOK,
+ taskqueue_thread_enqueue, &dev_priv->tq);
+ taskqueue_start_threads(&dev_priv->tq, 1, PWAIT, "i915 taskq");
+ mtx_init(&dev_priv->gt_lock, "915gt", NULL, MTX_DEF);
+ mtx_init(&dev_priv->error_lock, "915err", NULL, MTX_DEF);
+ mtx_init(&dev_priv->error_completion_lock, "915cmp", NULL, MTX_DEF);
+ mtx_init(&dev_priv->rps_lock, "915rps", NULL, MTX_DEF);
+
+ dev_priv->has_gem = 1;
+ intel_irq_init(dev);
+
+ intel_setup_mchbar(dev);
+ intel_setup_gmbus(dev);
+ intel_opregion_setup(dev);
+
+ intel_setup_bios(dev);
+
+ i915_gem_load(dev);
+
+ /* Init HWS */
+ if (!I915_NEED_GFX_HWS(dev)) {
+ ret = i915_init_phys_hws(dev);
+ if (ret != 0) {
+ drm_rmmap(dev, dev_priv->mmio_map);
+ drm_free(dev_priv, sizeof(struct drm_i915_private),
+ DRM_MEM_DRIVER);
+ return ret;
+ }
+ }
+
+ if (IS_PINEVIEW(dev))
+ i915_pineview_get_mem_freq(dev);
+ else if (IS_GEN5(dev))
+ i915_ironlake_get_mem_freq(dev);
+
+ mtx_init(&dev_priv->irq_lock, "userirq", NULL, MTX_DEF);
+
+ if (IS_IVYBRIDGE(dev))
+ dev_priv->num_pipe = 3;
+ else if (IS_MOBILE(dev) || !IS_GEN2(dev))
+ dev_priv->num_pipe = 2;
+ else
+ dev_priv->num_pipe = 1;
+
+ ret = drm_vblank_init(dev, dev_priv->num_pipe);
+ if (ret)
+ goto out_gem_unload;
+
+ /* Start out suspended */
+ dev_priv->mm.suspended = 1;
+
+ intel_detect_pch(dev);
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ DRM_UNLOCK(dev);
+ ret = i915_load_modeset_init(dev);
+ DRM_LOCK(dev);
+ if (ret < 0) {
+ DRM_ERROR("failed to init modeset\n");
+ goto out_gem_unload;
+ }
+ }
+
+ intel_opregion_init(dev);
+
+ callout_init(&dev_priv->hangcheck_timer, 1);
+ callout_reset(&dev_priv->hangcheck_timer, DRM_I915_HANGCHECK_PERIOD,
+ i915_hangcheck_elapsed, dev);
+
+ if (IS_GEN5(dev)) {
+ mtx_lock(&mchdev_lock);
+ i915_mch_dev = dev_priv;
+ dev_priv->mchdev_lock = &mchdev_lock;
+ mtx_unlock(&mchdev_lock);
+ }
+
+ return (0);
+
+out_gem_unload:
+ /* XXXKIB */
+ (void) i915_driver_unload_int(dev, true);
+ return (ret);
+}
+
+static int
+i915_driver_unload_int(struct drm_device *dev, bool locked)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int ret;
+
+ if (!locked)
+ DRM_LOCK(dev);
+ ret = i915_gpu_idle(dev, true);
+ if (ret)
+ DRM_ERROR("failed to idle hardware: %d\n", ret);
+ if (!locked)
+ DRM_UNLOCK(dev);
+
+ i915_free_hws(dev);
+
+ intel_teardown_mchbar(dev);
+
+ if (locked)
+ DRM_UNLOCK(dev);
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ intel_fbdev_fini(dev);
+ intel_modeset_cleanup(dev);
+ }
+
+ /* Free error state after interrupts are fully disabled. */
+ callout_stop(&dev_priv->hangcheck_timer);
+ callout_drain(&dev_priv->hangcheck_timer);
+
+ i915_destroy_error_state(dev);
+
+ intel_opregion_fini(dev);
+
+ if (locked)
+ DRM_LOCK(dev);
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ if (!locked)
+ DRM_LOCK(dev);
+ i915_gem_free_all_phys_object(dev);
+ i915_gem_cleanup_ringbuffer(dev);
+ if (!locked)
+ DRM_UNLOCK(dev);
+ i915_gem_cleanup_aliasing_ppgtt(dev);
+#if 1
+ KIB_NOTYET();
+#else
+ if (I915_HAS_FBC(dev) && i915_powersave)
+ i915_cleanup_compression(dev);
+#endif
+ drm_mm_takedown(&dev_priv->mm.stolen);
+
+ intel_cleanup_overlay(dev);
+
+ if (!I915_NEED_GFX_HWS(dev))
+ i915_free_hws(dev);
+ }
+
+ i915_gem_unload(dev);
+
+ mtx_destroy(&dev_priv->irq_lock);
+
+ if (dev_priv->tq != NULL)
+ taskqueue_free(dev_priv->tq);
+
+ bus_generic_detach(dev->device);
+ drm_rmmap(dev, dev_priv->mmio_map);
+ intel_teardown_gmbus(dev);
+
+ mtx_destroy(&dev_priv->error_lock);
+ mtx_destroy(&dev_priv->error_completion_lock);
+ mtx_destroy(&dev_priv->rps_lock);
+ drm_free(dev->dev_private, sizeof(drm_i915_private_t),
+ DRM_MEM_DRIVER);
+
+ return (0);
+}
+
+int
+i915_driver_unload(struct drm_device *dev)
+{
+
+ return (i915_driver_unload_int(dev, true));
+}
+
+int
+i915_driver_open(struct drm_device *dev, struct drm_file *file_priv)
+{
+ struct drm_i915_file_private *i915_file_priv;
+
+ i915_file_priv = malloc(sizeof(*i915_file_priv), DRM_MEM_FILES,
+ M_WAITOK | M_ZERO);
+
+ mtx_init(&i915_file_priv->mm.lck, "915fp", NULL, MTX_DEF);
+ INIT_LIST_HEAD(&i915_file_priv->mm.request_list);
+ file_priv->driver_priv = i915_file_priv;
+
+ return (0);
+}
+
+void
+i915_driver_lastclose(struct drm_device * dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (!dev_priv || drm_core_check_feature(dev, DRIVER_MODESET)) {
+#if 1
+ KIB_NOTYET();
+#else
+ drm_fb_helper_restore();
+ vga_switcheroo_process_delayed_switch();
+#endif
+ return;
+ }
+ i915_gem_lastclose(dev);
+ i915_dma_cleanup(dev);
+}
+
+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)
+{
+ struct drm_i915_file_private *i915_file_priv = file_priv->driver_priv;
+
+ mtx_destroy(&i915_file_priv->mm.lck);
+ drm_free(i915_file_priv, sizeof(*i915_file_priv), DRM_MEM_FILES);
+}
+
+struct drm_ioctl_desc i915_ioctls[] = {
+ DRM_IOCTL_DEF(DRM_I915_INIT, i915_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_I915_FLUSH, i915_flush_ioctl, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_FLIP, i915_flip_bufs, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_BATCHBUFFER, i915_batchbuffer, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_IRQ_EMIT, i915_irq_emit, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_IRQ_WAIT, i915_irq_wait, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_GETPARAM, i915_getparam, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_SETPARAM, i915_setparam, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_I915_ALLOC, drm_noop, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_FREE, drm_noop, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_INIT_HEAP, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_I915_CMDBUFFER, i915_cmdbuffer, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_DESTROY_HEAP, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
+ DRM_IOCTL_DEF(DRM_I915_SET_VBLANK_PIPE, i915_vblank_pipe_set, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY ),
+ DRM_IOCTL_DEF(DRM_I915_GET_VBLANK_PIPE, i915_vblank_pipe_get, DRM_AUTH ),
+ DRM_IOCTL_DEF(DRM_I915_VBLANK_SWAP, i915_vblank_swap, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_I915_GEM_INIT, i915_gem_init_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_I915_GEM_EXECBUFFER, i915_gem_execbuffer, DRM_AUTH | DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_EXECBUFFER2, i915_gem_execbuffer2, DRM_AUTH | DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_PIN, i915_gem_pin_ioctl, DRM_AUTH|DRM_ROOT_ONLY|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_UNPIN, i915_gem_unpin_ioctl, DRM_AUTH|DRM_ROOT_ONLY|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_BUSY, i915_gem_busy_ioctl, DRM_AUTH|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_THROTTLE, i915_gem_throttle_ioctl, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_I915_GEM_ENTERVT, i915_gem_entervt_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_I915_GEM_LEAVEVT, i915_gem_leavevt_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_I915_GEM_CREATE, i915_gem_create_ioctl, 0),
+ DRM_IOCTL_DEF(DRM_I915_GEM_PREAD, i915_gem_pread_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_PWRITE, i915_gem_pwrite_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_MMAP, i915_gem_mmap_ioctl, 0),
+ DRM_IOCTL_DEF(DRM_I915_GEM_MMAP_GTT, i915_gem_mmap_gtt_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_SET_DOMAIN, i915_gem_set_domain_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_SW_FINISH, i915_gem_sw_finish_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_SET_TILING, i915_gem_set_tiling, 0),
+ DRM_IOCTL_DEF(DRM_I915_GEM_GET_TILING, i915_gem_get_tiling, 0),
+ DRM_IOCTL_DEF(DRM_I915_GEM_GET_APERTURE, i915_gem_get_aperture_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GET_PIPE_FROM_CRTC_ID, intel_get_pipe_from_crtc_id, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GEM_MADVISE, i915_gem_madvise_ioctl, DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_OVERLAY_PUT_IMAGE, intel_overlay_put_image, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_OVERLAY_ATTRS, intel_overlay_attrs, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_SET_SPRITE_COLORKEY, intel_sprite_set_colorkey, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_IOCTL_DEF(DRM_I915_GET_SPRITE_COLORKEY, intel_sprite_get_colorkey, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+};
+
+struct drm_driver_info i915_driver_info = {
+ .driver_features = DRIVER_USE_AGP | DRIVER_REQUIRE_AGP |
+ DRIVER_USE_MTRR | DRIVER_HAVE_IRQ | DRIVER_LOCKLESS_IRQ |
+ DRIVER_GEM /*| DRIVER_MODESET*/,
+
+ .buf_priv_size = sizeof(drm_i915_private_t),
+ .load = i915_driver_load,
+ .open = i915_driver_open,
+ .unload = i915_driver_unload,
+ .preclose = i915_driver_preclose,
+ .lastclose = i915_driver_lastclose,
+ .postclose = i915_driver_postclose,
+ .device_is_agp = i915_driver_device_is_agp,
+ .gem_init_object = i915_gem_init_object,
+ .gem_free_object = i915_gem_free_object,
+ .gem_pager_ops = &i915_gem_pager_ops,
+ .dumb_create = i915_gem_dumb_create,
+ .dumb_map_offset = i915_gem_mmap_gtt,
+ .dumb_destroy = i915_gem_dumb_destroy,
+ .sysctl_init = i915_sysctl_init,
+ .sysctl_cleanup = i915_sysctl_cleanup,
+
+ .ioctls = i915_ioctls,
+ .max_ioctl = DRM_ARRAY_SIZE(i915_ioctls),
+
+ .name = DRIVER_NAME,
+ .desc = DRIVER_DESC,
+ .date = DRIVER_DATE,
+ .major = DRIVER_MAJOR,
+ .minor = DRIVER_MINOR,
+ .patchlevel = DRIVER_PATCHLEVEL,
+};
+
+/**
+ * Determine if the device really is AGP or not.
+ *
+ * All Intel graphics chipsets are treated as AGP, even if they are really
+ * built-in.
+ *
+ * \param dev The device to be tested.
+ *
+ * \returns
+ * A value of 1 is always retured to indictate every i9x5 is AGP.
+ */
+int i915_driver_device_is_agp(struct drm_device * dev)
+{
+ return 1;
+}
+
+static void i915_pineview_get_mem_freq(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 tmp;
+
+ tmp = I915_READ(CLKCFG);
+
+ switch (tmp & CLKCFG_FSB_MASK) {
+ case CLKCFG_FSB_533:
+ dev_priv->fsb_freq = 533; /* 133*4 */
+ break;
+ case CLKCFG_FSB_800:
+ dev_priv->fsb_freq = 800; /* 200*4 */
+ break;
+ case CLKCFG_FSB_667:
+ dev_priv->fsb_freq = 667; /* 167*4 */
+ break;
+ case CLKCFG_FSB_400:
+ dev_priv->fsb_freq = 400; /* 100*4 */
+ break;
+ }
+
+ switch (tmp & CLKCFG_MEM_MASK) {
+ case CLKCFG_MEM_533:
+ dev_priv->mem_freq = 533;
+ break;
+ case CLKCFG_MEM_667:
+ dev_priv->mem_freq = 667;
+ break;
+ case CLKCFG_MEM_800:
+ dev_priv->mem_freq = 800;
+ break;
+ }
+
+ /* detect pineview DDR3 setting */
+ tmp = I915_READ(CSHRDDR3CTL);
+ dev_priv->is_ddr3 = (tmp & CSHRDDR3CTL_DDR3) ? 1 : 0;
+}
+
+static void i915_ironlake_get_mem_freq(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u16 ddrpll, csipll;
+
+ ddrpll = I915_READ16(DDRMPLL1);
+ csipll = I915_READ16(CSIPLL0);
+
+ switch (ddrpll & 0xff) {
+ case 0xc:
+ dev_priv->mem_freq = 800;
+ break;
+ case 0x10:
+ dev_priv->mem_freq = 1066;
+ break;
+ case 0x14:
+ dev_priv->mem_freq = 1333;
+ break;
+ case 0x18:
+ dev_priv->mem_freq = 1600;
+ break;
+ default:
+ DRM_DEBUG("unknown memory frequency 0x%02x\n",
+ ddrpll & 0xff);
+ dev_priv->mem_freq = 0;
+ break;
+ }
+
+ dev_priv->r_t = dev_priv->mem_freq;
+
+ switch (csipll & 0x3ff) {
+ case 0x00c:
+ dev_priv->fsb_freq = 3200;
+ break;
+ case 0x00e:
+ dev_priv->fsb_freq = 3733;
+ break;
+ case 0x010:
+ dev_priv->fsb_freq = 4266;
+ break;
+ case 0x012:
+ dev_priv->fsb_freq = 4800;
+ break;
+ case 0x014:
+ dev_priv->fsb_freq = 5333;
+ break;
+ case 0x016:
+ dev_priv->fsb_freq = 5866;
+ break;
+ case 0x018:
+ dev_priv->fsb_freq = 6400;
+ break;
+ default:
+ DRM_DEBUG("unknown fsb frequency 0x%04x\n",
+ csipll & 0x3ff);
+ dev_priv->fsb_freq = 0;
+ break;
+ }
+
+ if (dev_priv->fsb_freq == 3200) {
+ dev_priv->c_m = 0;
+ } else if (dev_priv->fsb_freq > 3200 && dev_priv->fsb_freq <= 4800) {
+ dev_priv->c_m = 1;
+ } else {
+ dev_priv->c_m = 2;
+ }
+}
+
+static const struct cparams {
+ u16 i;
+ u16 t;
+ u16 m;
+ u16 c;
+} cparams[] = {
+ { 1, 1333, 301, 28664 },
+ { 1, 1066, 294, 24460 },
+ { 1, 800, 294, 25192 },
+ { 0, 1333, 276, 27605 },
+ { 0, 1066, 276, 27605 },
+ { 0, 800, 231, 23784 },
+};
+
+unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
+{
+ u64 total_count, diff, ret;
+ u32 count1, count2, count3, m = 0, c = 0;
+ unsigned long now = jiffies_to_msecs(jiffies), diff1;
+ int i;
+
+ diff1 = now - dev_priv->last_time1;
+ /*
+ * sysctl(8) reads the value of sysctl twice in rapid
+ * succession. There is high chance that it happens in the
+ * same timer tick. Use the cached value to not divide by
+ * zero and give the hw a chance to gather more samples.
+ */
+ if (diff1 <= 10)
+ return (dev_priv->chipset_power);
+
+ count1 = I915_READ(DMIEC);
+ count2 = I915_READ(DDREC);
+ count3 = I915_READ(CSIEC);
+
+ total_count = count1 + count2 + count3;
+
+ /* FIXME: handle per-counter overflow */
+ if (total_count < dev_priv->last_count1) {
+ diff = ~0UL - dev_priv->last_count1;
+ diff += total_count;
+ } else {
+ diff = total_count - dev_priv->last_count1;
+ }
+
+ for (i = 0; i < DRM_ARRAY_SIZE(cparams); i++) {
+ if (cparams[i].i == dev_priv->c_m &&
+ cparams[i].t == dev_priv->r_t) {
+ m = cparams[i].m;
+ c = cparams[i].c;
+ break;
+ }
+ }
+
+ diff = diff / diff1;
+ ret = ((m * diff) + c);
+ ret = ret / 10;
+
+ dev_priv->last_count1 = total_count;
+ dev_priv->last_time1 = now;
+
+ dev_priv->chipset_power = ret;
+ return (ret);
+}
+
+unsigned long i915_mch_val(struct drm_i915_private *dev_priv)
+{
+ unsigned long m, x, b;
+ u32 tsfs;
+
+ tsfs = I915_READ(TSFS);
+
+ m = ((tsfs & TSFS_SLOPE_MASK) >> TSFS_SLOPE_SHIFT);
+ x = I915_READ8(I915_TR1);
+
+ b = tsfs & TSFS_INTR_MASK;
+
+ return ((m * x) / 127) - b;
+}
+
+static u16 pvid_to_extvid(struct drm_i915_private *dev_priv, u8 pxvid)
+{
+ static const struct v_table {
+ u16 vd; /* in .1 mil */
+ u16 vm; /* in .1 mil */
+ } v_table[] = {
+ { 0, 0, },
+ { 375, 0, },
+ { 500, 0, },
+ { 625, 0, },
+ { 750, 0, },
+ { 875, 0, },
+ { 1000, 0, },
+ { 1125, 0, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4125, 3000, },
+ { 4250, 3125, },
+ { 4375, 3250, },
+ { 4500, 3375, },
+ { 4625, 3500, },
+ { 4750, 3625, },
+ { 4875, 3750, },
+ { 5000, 3875, },
+ { 5125, 4000, },
+ { 5250, 4125, },
+ { 5375, 4250, },
+ { 5500, 4375, },
+ { 5625, 4500, },
+ { 5750, 4625, },
+ { 5875, 4750, },
+ { 6000, 4875, },
+ { 6125, 5000, },
+ { 6250, 5125, },
+ { 6375, 5250, },
+ { 6500, 5375, },
+ { 6625, 5500, },
+ { 6750, 5625, },
+ { 6875, 5750, },
+ { 7000, 5875, },
+ { 7125, 6000, },
+ { 7250, 6125, },
+ { 7375, 6250, },
+ { 7500, 6375, },
+ { 7625, 6500, },
+ { 7750, 6625, },
+ { 7875, 6750, },
+ { 8000, 6875, },
+ { 8125, 7000, },
+ { 8250, 7125, },
+ { 8375, 7250, },
+ { 8500, 7375, },
+ { 8625, 7500, },
+ { 8750, 7625, },
+ { 8875, 7750, },
+ { 9000, 7875, },
+ { 9125, 8000, },
+ { 9250, 8125, },
+ { 9375, 8250, },
+ { 9500, 8375, },
+ { 9625, 8500, },
+ { 9750, 8625, },
+ { 9875, 8750, },
+ { 10000, 8875, },
+ { 10125, 9000, },
+ { 10250, 9125, },
+ { 10375, 9250, },
+ { 10500, 9375, },
+ { 10625, 9500, },
+ { 10750, 9625, },
+ { 10875, 9750, },
+ { 11000, 9875, },
+ { 11125, 10000, },
+ { 11250, 10125, },
+ { 11375, 10250, },
+ { 11500, 10375, },
+ { 11625, 10500, },
+ { 11750, 10625, },
+ { 11875, 10750, },
+ { 12000, 10875, },
+ { 12125, 11000, },
+ { 12250, 11125, },
+ { 12375, 11250, },
+ { 12500, 11375, },
+ { 12625, 11500, },
+ { 12750, 11625, },
+ { 12875, 11750, },
+ { 13000, 11875, },
+ { 13125, 12000, },
+ { 13250, 12125, },
+ { 13375, 12250, },
+ { 13500, 12375, },
+ { 13625, 12500, },
+ { 13750, 12625, },
+ { 13875, 12750, },
+ { 14000, 12875, },
+ { 14125, 13000, },
+ { 14250, 13125, },
+ { 14375, 13250, },
+ { 14500, 13375, },
+ { 14625, 13500, },
+ { 14750, 13625, },
+ { 14875, 13750, },
+ { 15000, 13875, },
+ { 15125, 14000, },
+ { 15250, 14125, },
+ { 15375, 14250, },
+ { 15500, 14375, },
+ { 15625, 14500, },
+ { 15750, 14625, },
+ { 15875, 14750, },
+ { 16000, 14875, },
+ { 16125, 15000, },
+ };
+ if (dev_priv->info->is_mobile)
+ return v_table[pxvid].vm;
+ else
+ return v_table[pxvid].vd;
+}
+
+void i915_update_gfx_val(struct drm_i915_private *dev_priv)
+{
+ struct timespec now, diff1;
+ u64 diff;
+ unsigned long diffms;
+ u32 count;
+
+ if (dev_priv->info->gen != 5)
+ return;
+
+ nanotime(&now);
+ diff1 = now;
+ timespecsub(&diff1, &dev_priv->last_time2);
+
+ /* Don't divide by 0 */
+ diffms = diff1.tv_sec * 1000 + diff1.tv_nsec / 1000000;
+ if (!diffms)
+ return;
+
+ count = I915_READ(GFXEC);
+
+ if (count < dev_priv->last_count2) {
+ diff = ~0UL - dev_priv->last_count2;
+ diff += count;
+ } else {
+ diff = count - dev_priv->last_count2;
+ }
+
+ dev_priv->last_count2 = count;
+ dev_priv->last_time2 = now;
+
+ /* More magic constants... */
+ diff = diff * 1181;
+ diff = diff / (diffms * 10);
+ dev_priv->gfx_power = diff;
+}
+
+unsigned long i915_gfx_val(struct drm_i915_private *dev_priv)
+{
+ unsigned long t, corr, state1, corr2, state2;
+ u32 pxvid, ext_v;
+
+ pxvid = I915_READ(PXVFREQ_BASE + (dev_priv->cur_delay * 4));
+ pxvid = (pxvid >> 24) & 0x7f;
+ ext_v = pvid_to_extvid(dev_priv, pxvid);
+
+ state1 = ext_v;
+
+ t = i915_mch_val(dev_priv);
+
+ /* Revel in the empirically derived constants */
+
+ /* Correction factor in 1/100000 units */
+ if (t > 80)
+ corr = ((t * 2349) + 135940);
+ else if (t >= 50)
+ corr = ((t * 964) + 29317);
+ else /* < 50 */
+ corr = ((t * 301) + 1004);
+
+ corr = corr * ((150142 * state1) / 10000 - 78642);
+ corr /= 100000;
+ corr2 = (corr * dev_priv->corr);
+
+ state2 = (corr2 * state1) / 10000;
+ state2 /= 100; /* convert to mW */
+
+ i915_update_gfx_val(dev_priv);
+
+ return dev_priv->gfx_power + state2;
+}
+
+/**
+ * i915_read_mch_val - return value for IPS use
+ *
+ * Calculate and return a value for the IPS driver to use when deciding whether
+ * we have thermal and power headroom to increase CPU or GPU power budget.
+ */
+unsigned long i915_read_mch_val(void)
+{
+ struct drm_i915_private *dev_priv;
+ unsigned long chipset_val, graphics_val, ret = 0;
+
+ mtx_lock(&mchdev_lock);
+ if (!i915_mch_dev)
+ goto out_unlock;
+ dev_priv = i915_mch_dev;
+
+ chipset_val = i915_chipset_val(dev_priv);
+ graphics_val = i915_gfx_val(dev_priv);
+
+ ret = chipset_val + graphics_val;
+
+out_unlock:
+ mtx_unlock(&mchdev_lock);
+
+ return ret;
+}
+
+/**
+ * i915_gpu_raise - raise GPU frequency limit
+ *
+ * Raise the limit; IPS indicates we have thermal headroom.
+ */
+bool i915_gpu_raise(void)
+{
+ struct drm_i915_private *dev_priv;
+ bool ret = true;
+
+ mtx_lock(&mchdev_lock);
+ if (!i915_mch_dev) {
+ ret = false;
+ goto out_unlock;
+ }
+ dev_priv = i915_mch_dev;
+
+ if (dev_priv->max_delay > dev_priv->fmax)
+ dev_priv->max_delay--;
+
+out_unlock:
+ mtx_unlock(&mchdev_lock);
+
+ return ret;
+}
+
+/**
+ * i915_gpu_lower - lower GPU frequency limit
+ *
+ * IPS indicates we're close to a thermal limit, so throttle back the GPU
+ * frequency maximum.
+ */
+bool i915_gpu_lower(void)
+{
+ struct drm_i915_private *dev_priv;
+ bool ret = true;
+
+ mtx_lock(&mchdev_lock);
+ if (!i915_mch_dev) {
+ ret = false;
+ goto out_unlock;
+ }
+ dev_priv = i915_mch_dev;
+
+ if (dev_priv->max_delay < dev_priv->min_delay)
+ dev_priv->max_delay++;
+
+out_unlock:
+ mtx_unlock(&mchdev_lock);
+
+ return ret;
+}
+
+/**
+ * i915_gpu_busy - indicate GPU business to IPS
+ *
+ * Tell the IPS driver whether or not the GPU is busy.
+ */
+bool i915_gpu_busy(void)
+{
+ struct drm_i915_private *dev_priv;
+ bool ret = false;
+
+ mtx_lock(&mchdev_lock);
+ if (!i915_mch_dev)
+ goto out_unlock;
+ dev_priv = i915_mch_dev;
+
+ ret = dev_priv->busy;
+
+out_unlock:
+ mtx_unlock(&mchdev_lock);
+
+ return ret;
+}
+
+/**
+ * i915_gpu_turbo_disable - disable graphics turbo
+ *
+ * Disable graphics turbo by resetting the max frequency and setting the
+ * current frequency to the default.
+ */
+bool i915_gpu_turbo_disable(void)
+{
+ struct drm_i915_private *dev_priv;
+ bool ret = true;
+
+ mtx_lock(&mchdev_lock);
+ if (!i915_mch_dev) {
+ ret = false;
+ goto out_unlock;
+ }
+ dev_priv = i915_mch_dev;
+
+ dev_priv->max_delay = dev_priv->fstart;
+
+ if (!ironlake_set_drps(dev_priv->dev, dev_priv->fstart))
+ ret = false;
+
+out_unlock:
+ mtx_unlock(&mchdev_lock);
+
+ return ret;
+}
diff --git a/sys/dev/drm2/i915/i915_drm.h b/sys/dev/drm2/i915/i915_drm.h
new file mode 100644
index 000000000000..d4b0ae8386d9
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_drm.h
@@ -0,0 +1,971 @@
+/*-
+ * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#ifndef _I915_DRM_H_
+#define _I915_DRM_H_
+
+/* Please note that modifications to all structs defined here are
+ * subject to backwards-compatibility constraints.
+ */
+
+#include <dev/drm2/drm.h>
+
+/* Each region is a minimum of 16k, and there are at most 255 of them.
+ */
+#define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use
+ * of chars for next/prev indices */
+#define I915_LOG_MIN_TEX_REGION_SIZE 14
+
+typedef struct _drm_i915_init {
+ enum {
+ I915_INIT_DMA = 0x01,
+ I915_CLEANUP_DMA = 0x02,
+ I915_RESUME_DMA = 0x03,
+
+ /* Since this struct isn't versioned, just used a new
+ * 'func' code to indicate the presence of dri2 sarea
+ * info. */
+ I915_INIT_DMA2 = 0x04
+ } func;
+ unsigned int mmio_offset;
+ int sarea_priv_offset;
+ unsigned int ring_start;
+ unsigned int ring_end;
+ unsigned int ring_size;
+ unsigned int front_offset;
+ unsigned int back_offset;
+ unsigned int depth_offset;
+ unsigned int w;
+ unsigned int h;
+ unsigned int pitch;
+ unsigned int pitch_bits;
+ unsigned int back_pitch;
+ unsigned int depth_pitch;
+ unsigned int cpp;
+ unsigned int chipset;
+ unsigned int sarea_handle;
+} drm_i915_init_t;
+
+typedef struct drm_i915_sarea {
+ struct drm_tex_region texList[I915_NR_TEX_REGIONS + 1];
+ int last_upload; /* last time texture was uploaded */
+ int last_enqueue; /* last time a buffer was enqueued */
+ int last_dispatch; /* age of the most recently dispatched buffer */
+ int ctxOwner; /* last context to upload state */
+ int texAge;
+ int pf_enabled; /* is pageflipping allowed? */
+ int pf_active;
+ int pf_current_page; /* which buffer is being displayed? */
+ int perf_boxes; /* performance boxes to be displayed */
+ int width, height; /* screen size in pixels */
+
+ drm_handle_t front_handle;
+ int front_offset;
+ int front_size;
+
+ drm_handle_t back_handle;
+ int back_offset;
+ int back_size;
+
+ drm_handle_t depth_handle;
+ int depth_offset;
+ int depth_size;
+
+ drm_handle_t tex_handle;
+ int tex_offset;
+ int tex_size;
+ int log_tex_granularity;
+ int pitch;
+ int rotation; /* 0, 90, 180 or 270 */
+ int rotated_offset;
+ int rotated_size;
+ int rotated_pitch;
+ int virtualX, virtualY;
+
+ unsigned int front_tiled;
+ unsigned int back_tiled;
+ unsigned int depth_tiled;
+ unsigned int rotated_tiled;
+ unsigned int rotated2_tiled;
+
+ int planeA_x;
+ int planeA_y;
+ int planeA_w;
+ int planeA_h;
+ int planeB_x;
+ int planeB_y;
+ int planeB_w;
+ int planeB_h;
+
+ /* Triple buffering */
+ drm_handle_t third_handle;
+ int third_offset;
+ int third_size;
+ unsigned int third_tiled;
+
+ /* buffer object handles for the static buffers. May change
+ * over the lifetime of the client, though it doesn't in our current
+ * implementation.
+ */
+ unsigned int front_bo_handle;
+ unsigned int back_bo_handle;
+ unsigned int third_bo_handle;
+ unsigned int depth_bo_handle;
+} drm_i915_sarea_t;
+
+/* Driver specific fence types and classes.
+ */
+
+/* The only fence class we support */
+#define DRM_I915_FENCE_CLASS_ACCEL 0
+/* Fence type that guarantees read-write flush */
+#define DRM_I915_FENCE_TYPE_RW 2
+/* MI_FLUSH programmed just before the fence */
+#define DRM_I915_FENCE_FLAG_FLUSHED 0x01000000
+
+/* Flags for perf_boxes
+ */
+#define I915_BOX_RING_EMPTY 0x1
+#define I915_BOX_FLIP 0x2
+#define I915_BOX_WAIT 0x4
+#define I915_BOX_TEXTURE_LOAD 0x8
+#define I915_BOX_LOST_CONTEXT 0x10
+
+/* I915 specific ioctls
+ * The device specific ioctl range is 0x40 to 0x79.
+ */
+#define DRM_I915_INIT 0x00
+#define DRM_I915_FLUSH 0x01
+#define DRM_I915_FLIP 0x02
+#define DRM_I915_BATCHBUFFER 0x03
+#define DRM_I915_IRQ_EMIT 0x04
+#define DRM_I915_IRQ_WAIT 0x05
+#define DRM_I915_GETPARAM 0x06
+#define DRM_I915_SETPARAM 0x07
+#define DRM_I915_ALLOC 0x08
+#define DRM_I915_FREE 0x09
+#define DRM_I915_INIT_HEAP 0x0a
+#define DRM_I915_CMDBUFFER 0x0b
+#define DRM_I915_DESTROY_HEAP 0x0c
+#define DRM_I915_SET_VBLANK_PIPE 0x0d
+#define DRM_I915_GET_VBLANK_PIPE 0x0e
+#define DRM_I915_VBLANK_SWAP 0x0f
+#define DRM_I915_MMIO 0x10
+#define DRM_I915_HWS_ADDR 0x11
+#define DRM_I915_EXECBUFFER 0x12
+#define DRM_I915_GEM_INIT 0x13
+#define DRM_I915_GEM_EXECBUFFER 0x14
+#define DRM_I915_GEM_PIN 0x15
+#define DRM_I915_GEM_UNPIN 0x16
+#define DRM_I915_GEM_BUSY 0x17
+#define DRM_I915_GEM_THROTTLE 0x18
+#define DRM_I915_GEM_ENTERVT 0x19
+#define DRM_I915_GEM_LEAVEVT 0x1a
+#define DRM_I915_GEM_CREATE 0x1b
+#define DRM_I915_GEM_PREAD 0x1c
+#define DRM_I915_GEM_PWRITE 0x1d
+#define DRM_I915_GEM_MMAP 0x1e
+#define DRM_I915_GEM_SET_DOMAIN 0x1f
+#define DRM_I915_GEM_SW_FINISH 0x20
+#define DRM_I915_GEM_SET_TILING 0x21
+#define DRM_I915_GEM_GET_TILING 0x22
+#define DRM_I915_GEM_GET_APERTURE 0x23
+#define DRM_I915_GEM_MMAP_GTT 0x24
+#define DRM_I915_GET_PIPE_FROM_CRTC_ID 0x25
+#define DRM_I915_GEM_MADVISE 0x26
+#define DRM_I915_OVERLAY_PUT_IMAGE 0x27
+#define DRM_I915_OVERLAY_ATTRS 0x28
+#define DRM_I915_GEM_EXECBUFFER2 0x29
+#define DRM_I915_GET_SPRITE_COLORKEY 0x2a
+#define DRM_I915_SET_SPRITE_COLORKEY 0x2b
+
+#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
+#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
+#define DRM_IOCTL_I915_FLIP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FLIP, drm_i915_flip_t)
+#define DRM_IOCTL_I915_BATCHBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_BATCHBUFFER, drm_i915_batchbuffer_t)
+#define DRM_IOCTL_I915_IRQ_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_IRQ_EMIT, drm_i915_irq_emit_t)
+#define DRM_IOCTL_I915_IRQ_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_IRQ_WAIT, drm_i915_irq_wait_t)
+#define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t)
+#define DRM_IOCTL_I915_SETPARAM DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SETPARAM, drm_i915_setparam_t)
+#define DRM_IOCTL_I915_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_ALLOC, drm_i915_mem_alloc_t)
+#define DRM_IOCTL_I915_FREE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_FREE, drm_i915_mem_free_t)
+#define DRM_IOCTL_I915_INIT_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT_HEAP, drm_i915_mem_init_heap_t)
+#define DRM_IOCTL_I915_CMDBUFFER DRM_IOW( DRM_COMMAND_BASE + DRM_I915_CMDBUFFER, drm_i915_cmdbuffer_t)
+#define DRM_IOCTL_I915_DESTROY_HEAP DRM_IOW( DRM_COMMAND_BASE + DRM_I915_DESTROY_HEAP, drm_i915_mem_destroy_heap_t)
+#define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
+#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
+#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t)
+#define DRM_IOCTL_I915_MMIO DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_MMIO, drm_i915_mmio)
+#define DRM_IOCTL_I915_EXECBUFFER DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_EXECBUFFER, struct drm_i915_execbuffer)
+#define DRM_IOCTL_I915_GEM_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_INIT, struct drm_i915_gem_init)
+#define DRM_IOCTL_I915_GEM_EXECBUFFER DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER, struct drm_i915_gem_execbuffer)
+#define DRM_IOCTL_I915_GEM_EXECBUFFER2 DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_EXECBUFFER2, struct drm_i915_gem_execbuffer2)
+#define DRM_IOCTL_I915_GEM_PIN DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_PIN, struct drm_i915_gem_pin)
+#define DRM_IOCTL_I915_GEM_UNPIN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_GEM_UNPIN, struct drm_i915_gem_unpin)
+#define DRM_IOCTL_I915_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_BUSY, struct drm_i915_gem_busy)
+#define DRM_IOCTL_I915_GEM_THROTTLE DRM_IO ( DRM_COMMAND_BASE + DRM_I915_GEM_THROTTLE)
+#define DRM_IOCTL_I915_GEM_ENTERVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT)
+#define DRM_IOCTL_I915_GEM_LEAVEVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT)
+#define DRM_IOCTL_I915_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create)
+#define DRM_IOCTL_I915_GEM_PREAD DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread)
+#define DRM_IOCTL_I915_GEM_PWRITE DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite)
+#define DRM_IOCTL_I915_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap)
+#define DRM_IOCTL_I915_GEM_MMAP_GTT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP_GTT, struct drm_i915_gem_mmap_gtt)
+#define DRM_IOCTL_I915_GEM_SET_DOMAIN DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SET_DOMAIN, struct drm_i915_gem_set_domain)
+#define DRM_IOCTL_I915_GEM_SW_FINISH DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish)
+#define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling)
+#define DRM_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling)
+#define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture)
+#define DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GET_PIPE_FROM_CRTC_ID, struct drm_i915_get_pipe_from_crtc_id)
+#define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MADVISE, struct drm_i915_gem_madvise)
+#define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_IOCTL_I915_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image)
+#define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_OVERLAY_ATTRS, struct drm_intel_overlay_attrs)
+#define DRM_IOCTL_I915_SET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey)
+#define DRM_IOCTL_I915_GET_SPRITE_COLORKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_SET_SPRITE_COLORKEY, struct drm_intel_sprite_colorkey)
+
+/* Asynchronous page flipping:
+ */
+typedef struct drm_i915_flip {
+ /*
+ * This is really talking about planes, and we could rename it
+ * except for the fact that some of the duplicated i915_drm.h files
+ * out there check for HAVE_I915_FLIP and so might pick up this
+ * version.
+ */
+ int pipes;
+} drm_i915_flip_t;
+
+/* Allow drivers to submit batchbuffers directly to hardware, relying
+ * on the security mechanisms provided by hardware.
+ */
+typedef struct drm_i915_batchbuffer {
+ int start; /* agp offset */
+ int used; /* nr bytes in use */
+ int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */
+ int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */
+ int num_cliprects; /* mulitpass with multiple cliprects? */
+ struct drm_clip_rect __user *cliprects; /* pointer to userspace cliprects */
+} drm_i915_batchbuffer_t;
+
+/* As above, but pass a pointer to userspace buffer which can be
+ * validated by the kernel prior to sending to hardware.
+ */
+typedef struct _drm_i915_cmdbuffer {
+ char __user *buf; /* pointer to userspace command buffer */
+ int sz; /* nr bytes in buf */
+ int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */
+ int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */
+ int num_cliprects; /* mulitpass with multiple cliprects? */
+ struct drm_clip_rect __user *cliprects; /* pointer to userspace cliprects */
+} drm_i915_cmdbuffer_t;
+
+/* Userspace can request & wait on irq's:
+ */
+typedef struct drm_i915_irq_emit {
+ int __user *irq_seq;
+} drm_i915_irq_emit_t;
+
+typedef struct drm_i915_irq_wait {
+ int irq_seq;
+} drm_i915_irq_wait_t;
+
+/* Ioctl to query kernel params:
+ */
+#define I915_PARAM_IRQ_ACTIVE 1
+#define I915_PARAM_ALLOW_BATCHBUFFER 2
+#define I915_PARAM_LAST_DISPATCH 3
+#define I915_PARAM_CHIPSET_ID 4
+#define I915_PARAM_HAS_GEM 5
+#define I915_PARAM_NUM_FENCES_AVAIL 6
+#define I915_PARAM_HAS_OVERLAY 7
+#define I915_PARAM_HAS_PAGEFLIPPING 8
+#define I915_PARAM_HAS_EXECBUF2 9
+#define I915_PARAM_HAS_BSD 10
+#define I915_PARAM_HAS_BLT 11
+#define I915_PARAM_HAS_RELAXED_FENCING 12
+#define I915_PARAM_HAS_COHERENT_RINGS 13
+#define I915_PARAM_HAS_EXEC_CONSTANTS 14
+#define I915_PARAM_HAS_RELAXED_DELTA 15
+#define I915_PARAM_HAS_GEN7_SOL_RESET 16
+#define I915_PARAM_HAS_LLC 17
+
+typedef struct drm_i915_getparam {
+ int param;
+ int __user *value;
+} drm_i915_getparam_t;
+
+/* Ioctl to set kernel params:
+ */
+#define I915_SETPARAM_USE_MI_BATCHBUFFER_START 1
+#define I915_SETPARAM_TEX_LRU_LOG_GRANULARITY 2
+#define I915_SETPARAM_ALLOW_BATCHBUFFER 3
+#define I915_SETPARAM_NUM_USED_FENCES 4
+
+typedef struct drm_i915_setparam {
+ int param;
+ int value;
+} drm_i915_setparam_t;
+
+/* A memory manager for regions of shared memory:
+ */
+#define I915_MEM_REGION_AGP 1
+
+typedef struct drm_i915_mem_alloc {
+ int region;
+ int alignment;
+ int size;
+ int __user *region_offset; /* offset from start of fb or agp */
+} drm_i915_mem_alloc_t;
+
+typedef struct drm_i915_mem_free {
+ int region;
+ int region_offset;
+} drm_i915_mem_free_t;
+
+typedef struct drm_i915_mem_init_heap {
+ int region;
+ int size;
+ int start;
+} drm_i915_mem_init_heap_t;
+
+/* Allow memory manager to be torn down and re-initialized (eg on
+ * rotate):
+ */
+typedef struct drm_i915_mem_destroy_heap {
+ int region;
+} drm_i915_mem_destroy_heap_t;
+
+/* Allow X server to configure which pipes to monitor for vblank signals
+ */
+#define DRM_I915_VBLANK_PIPE_A 1
+#define DRM_I915_VBLANK_PIPE_B 2
+
+typedef struct drm_i915_vblank_pipe {
+ int pipe;
+} drm_i915_vblank_pipe_t;
+
+/* Schedule buffer swap at given vertical blank:
+ */
+typedef struct drm_i915_vblank_swap {
+ drm_drawable_t drawable;
+ enum drm_vblank_seq_type seqtype;
+ unsigned int sequence;
+} drm_i915_vblank_swap_t;
+
+#define I915_MMIO_READ 0
+#define I915_MMIO_WRITE 1
+
+#define I915_MMIO_MAY_READ 0x1
+#define I915_MMIO_MAY_WRITE 0x2
+
+#define MMIO_REGS_IA_PRIMATIVES_COUNT 0
+#define MMIO_REGS_IA_VERTICES_COUNT 1
+#define MMIO_REGS_VS_INVOCATION_COUNT 2
+#define MMIO_REGS_GS_PRIMITIVES_COUNT 3
+#define MMIO_REGS_GS_INVOCATION_COUNT 4
+#define MMIO_REGS_CL_PRIMITIVES_COUNT 5
+#define MMIO_REGS_CL_INVOCATION_COUNT 6
+#define MMIO_REGS_PS_INVOCATION_COUNT 7
+#define MMIO_REGS_PS_DEPTH_COUNT 8
+
+typedef struct drm_i915_mmio_entry {
+ unsigned int flag;
+ unsigned int offset;
+ unsigned int size;
+} drm_i915_mmio_entry_t;
+
+typedef struct drm_i915_mmio {
+ unsigned int read_write:1;
+ unsigned int reg:31;
+ void __user *data;
+} drm_i915_mmio_t;
+
+typedef struct drm_i915_hws_addr {
+ uint64_t addr;
+} drm_i915_hws_addr_t;
+
+/*
+ * Relocation header is 4 uint32_ts
+ * 0 - 32 bit reloc count
+ * 1 - 32-bit relocation type
+ * 2-3 - 64-bit user buffer handle ptr for another list of relocs.
+ */
+#define I915_RELOC_HEADER 4
+
+/*
+ * type 0 relocation has 4-uint32_t stride
+ * 0 - offset into buffer
+ * 1 - delta to add in
+ * 2 - buffer handle
+ * 3 - reserved (for optimisations later).
+ */
+/*
+ * type 1 relocation has 4-uint32_t stride.
+ * Hangs off the first item in the op list.
+ * Performed after all valiations are done.
+ * Try to group relocs into the same relocatee together for
+ * performance reasons.
+ * 0 - offset into buffer
+ * 1 - delta to add in
+ * 2 - buffer index in op list.
+ * 3 - relocatee index in op list.
+ */
+#define I915_RELOC_TYPE_0 0
+#define I915_RELOC0_STRIDE 4
+#define I915_RELOC_TYPE_1 1
+#define I915_RELOC1_STRIDE 4
+
+
+struct drm_i915_op_arg {
+ uint64_t next;
+ uint64_t reloc_ptr;
+ int handled;
+ unsigned int pad64;
+ union {
+ struct drm_bo_op_req req;
+ struct drm_bo_arg_rep rep;
+ } d;
+
+};
+
+struct drm_i915_execbuffer {
+ uint64_t ops_list;
+ uint32_t num_buffers;
+ struct drm_i915_batchbuffer batch;
+ drm_context_t context; /* for lockless use in the future */
+ struct drm_fence_arg fence_arg;
+};
+
+struct drm_i915_gem_init {
+ /**
+ * Beginning offset in the GTT to be managed by the DRM memory
+ * manager.
+ */
+ uint64_t gtt_start;
+ /**
+ * Ending offset in the GTT to be managed by the DRM memory
+ * manager.
+ */
+ uint64_t gtt_end;
+};
+
+struct drm_i915_gem_create {
+ /**
+ * Requested size for the object.
+ *
+ * The (page-aligned) allocated size for the object will be returned.
+ */
+ uint64_t size;
+ /**
+ * Returned handle for the object.
+ *
+ * Object handles are nonzero.
+ */
+ uint32_t handle;
+ uint32_t pad;
+};
+
+struct drm_i915_gem_pread {
+ /** Handle for the object being read. */
+ uint32_t handle;
+ uint32_t pad;
+ /** Offset into the object to read from */
+ uint64_t offset;
+ /** Length of data to read */
+ uint64_t size;
+ /** Pointer to write the data into. */
+ uint64_t data_ptr; /* void *, but pointers are not 32/64 compatible */
+};
+
+struct drm_i915_gem_pwrite {
+ /** Handle for the object being written to. */
+ uint32_t handle;
+ uint32_t pad;
+ /** Offset into the object to write to */
+ uint64_t offset;
+ /** Length of data to write */
+ uint64_t size;
+ /** Pointer to read the data from. */
+ uint64_t data_ptr; /* void *, but pointers are not 32/64 compatible */
+};
+
+struct drm_i915_gem_mmap {
+ /** Handle for the object being mapped. */
+ uint32_t handle;
+ uint32_t pad;
+ /** Offset in the object to map. */
+ uint64_t offset;
+ /**
+ * Length of data to map.
+ *
+ * The value will be page-aligned.
+ */
+ uint64_t size;
+ /** Returned pointer the data was mapped at */
+ uint64_t addr_ptr; /* void *, but pointers are not 32/64 compatible */
+};
+
+struct drm_i915_gem_mmap_gtt {
+ /** Handle for the object being mapped. */
+ uint32_t handle;
+ uint32_t pad;
+ /**
+ * Fake offset to use for subsequent mmap call
+ *
+ * This is a fixed-size type for 32/64 compatibility.
+ */
+ uint64_t offset;
+};
+
+struct drm_i915_gem_set_domain {
+ /** Handle for the object */
+ uint32_t handle;
+
+ /** New read domains */
+ uint32_t read_domains;
+
+ /** New write domain */
+ uint32_t write_domain;
+};
+
+struct drm_i915_gem_sw_finish {
+ /** Handle for the object */
+ uint32_t handle;
+};
+
+struct drm_i915_gem_relocation_entry {
+ /**
+ * Handle of the buffer being pointed to by this relocation entry.
+ *
+ * It's appealing to make this be an index into the mm_validate_entry
+ * list to refer to the buffer, but this allows the driver to create
+ * a relocation list for state buffers and not re-write it per
+ * exec using the buffer.
+ */
+ uint32_t target_handle;
+
+ /**
+ * Value to be added to the offset of the target buffer to make up
+ * the relocation entry.
+ */
+ uint32_t delta;
+
+ /** Offset in the buffer the relocation entry will be written into */
+ uint64_t offset;
+
+ /**
+ * Offset value of the target buffer that the relocation entry was last
+ * written as.
+ *
+ * If the buffer has the same offset as last time, we can skip syncing
+ * and writing the relocation. This value is written back out by
+ * the execbuffer ioctl when the relocation is written.
+ */
+ uint64_t presumed_offset;
+
+ /**
+ * Target memory domains read by this operation.
+ */
+ uint32_t read_domains;
+
+ /**
+ * Target memory domains written by this operation.
+ *
+ * Note that only one domain may be written by the whole
+ * execbuffer operation, so that where there are conflicts,
+ * the application will get -EINVAL back.
+ */
+ uint32_t write_domain;
+};
+
+/** @{
+ * Intel memory domains
+ *
+ * Most of these just align with the various caches in
+ * the system and are used to flush and invalidate as
+ * objects end up cached in different domains.
+ */
+/** CPU cache */
+#define I915_GEM_DOMAIN_CPU 0x00000001
+/** Render cache, used by 2D and 3D drawing */
+#define I915_GEM_DOMAIN_RENDER 0x00000002
+/** Sampler cache, used by texture engine */
+#define I915_GEM_DOMAIN_SAMPLER 0x00000004
+/** Command queue, used to load batch buffers */
+#define I915_GEM_DOMAIN_COMMAND 0x00000008
+/** Instruction cache, used by shader programs */
+#define I915_GEM_DOMAIN_INSTRUCTION 0x00000010
+/** Vertex address cache */
+#define I915_GEM_DOMAIN_VERTEX 0x00000020
+/** GTT domain - aperture and scanout */
+#define I915_GEM_DOMAIN_GTT 0x00000040
+/** @} */
+
+struct drm_i915_gem_exec_object {
+ /**
+ * User's handle for a buffer to be bound into the GTT for this
+ * operation.
+ */
+ uint32_t handle;
+
+ /** Number of relocations to be performed on this buffer */
+ uint32_t relocation_count;
+ /**
+ * Pointer to array of struct drm_i915_gem_relocation_entry containing
+ * the relocations to be performed in this buffer.
+ */
+ uint64_t relocs_ptr;
+
+ /** Required alignment in graphics aperture */
+ uint64_t alignment;
+
+ /**
+ * Returned value of the updated offset of the object, for future
+ * presumed_offset writes.
+ */
+ uint64_t offset;
+};
+
+struct drm_i915_gem_execbuffer {
+ /**
+ * List of buffers to be validated with their relocations to be
+ * performend on them.
+ *
+ * This is a pointer to an array of struct drm_i915_gem_validate_entry.
+ *
+ * These buffers must be listed in an order such that all relocations
+ * a buffer is performing refer to buffers that have already appeared
+ * in the validate list.
+ */
+ uint64_t buffers_ptr;
+ uint32_t buffer_count;
+
+ /** Offset in the batchbuffer to start execution from. */
+ uint32_t batch_start_offset;
+ /** Bytes used in batchbuffer from batch_start_offset */
+ uint32_t batch_len;
+ uint32_t DR1;
+ uint32_t DR4;
+ uint32_t num_cliprects;
+ uint64_t cliprects_ptr; /* struct drm_clip_rect *cliprects */
+};
+
+struct drm_i915_gem_exec_object2 {
+ /**
+ * User's handle for a buffer to be bound into the GTT for this
+ * operation.
+ */
+ uint32_t handle;
+
+ /** Number of relocations to be performed on this buffer */
+ uint32_t relocation_count;
+ /**
+ * Pointer to array of struct drm_i915_gem_relocation_entry containing
+ * the relocations to be performed in this buffer.
+ */
+ uint64_t relocs_ptr;
+
+ /** Required alignment in graphics aperture */
+ uint64_t alignment;
+
+ /**
+ * Returned value of the updated offset of the object, for future
+ * presumed_offset writes.
+ */
+ uint64_t offset;
+
+#define EXEC_OBJECT_NEEDS_FENCE (1<<0)
+ uint64_t flags;
+ uint64_t rsvd1;
+ uint64_t rsvd2;
+};
+
+struct drm_i915_gem_execbuffer2 {
+ /**
+ * List of gem_exec_object2 structs
+ */
+ uint64_t buffers_ptr;
+ uint32_t buffer_count;
+
+ /** Offset in the batchbuffer to start execution from. */
+ uint32_t batch_start_offset;
+ /** Bytes used in batchbuffer from batch_start_offset */
+ uint32_t batch_len;
+ uint32_t DR1;
+ uint32_t DR4;
+ uint32_t num_cliprects;
+ /** This is a struct drm_clip_rect *cliprects */
+ uint64_t cliprects_ptr;
+#define I915_EXEC_RING_MASK (7<<0)
+#define I915_EXEC_DEFAULT (0<<0)
+#define I915_EXEC_RENDER (1<<0)
+#define I915_EXEC_BSD (2<<0)
+#define I915_EXEC_BLT (3<<0)
+
+/* Used for switching the constants addressing mode on gen4+ RENDER ring.
+ * Gen6+ only supports relative addressing to dynamic state (default) and
+ * absolute addressing.
+ *
+ * These flags are ignored for the BSD and BLT rings.
+ */
+#define I915_EXEC_CONSTANTS_MASK (3<<6)
+#define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) /* default */
+#define I915_EXEC_CONSTANTS_ABSOLUTE (1<<6)
+#define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) /* gen4/5 only */
+ uint64_t flags;
+ uint64_t rsvd1;
+ uint64_t rsvd2;
+};
+
+/** Resets the SO write offset registers for transform feedback on gen7. */
+#define I915_EXEC_GEN7_SOL_RESET (1<<8)
+
+struct drm_i915_gem_pin {
+ /** Handle of the buffer to be pinned. */
+ uint32_t handle;
+ uint32_t pad;
+
+ /** alignment required within the aperture */
+ uint64_t alignment;
+
+ /** Returned GTT offset of the buffer. */
+ uint64_t offset;
+};
+
+struct drm_i915_gem_unpin {
+ /** Handle of the buffer to be unpinned. */
+ uint32_t handle;
+ uint32_t pad;
+};
+
+struct drm_i915_gem_busy {
+ /** Handle of the buffer to check for busy */
+ uint32_t handle;
+
+ /** Return busy status (1 if busy, 0 if idle) */
+ uint32_t busy;
+};
+
+#define I915_TILING_NONE 0
+#define I915_TILING_X 1
+#define I915_TILING_Y 2
+
+#define I915_BIT_6_SWIZZLE_NONE 0
+#define I915_BIT_6_SWIZZLE_9 1
+#define I915_BIT_6_SWIZZLE_9_10 2
+#define I915_BIT_6_SWIZZLE_9_11 3
+#define I915_BIT_6_SWIZZLE_9_10_11 4
+/* Not seen by userland */
+#define I915_BIT_6_SWIZZLE_UNKNOWN 5
+/* Seen by userland. */
+#define I915_BIT_6_SWIZZLE_9_17 6
+#define I915_BIT_6_SWIZZLE_9_10_17 7
+
+struct drm_i915_gem_set_tiling {
+ /** Handle of the buffer to have its tiling state updated */
+ uint32_t handle;
+
+ /**
+ * Tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
+ * I915_TILING_Y).
+ *
+ * This value is to be set on request, and will be updated by the
+ * kernel on successful return with the actual chosen tiling layout.
+ *
+ * The tiling mode may be demoted to I915_TILING_NONE when the system
+ * has bit 6 swizzling that can't be managed correctly by GEM.
+ *
+ * Buffer contents become undefined when changing tiling_mode.
+ */
+ uint32_t tiling_mode;
+
+ /**
+ * Stride in bytes for the object when in I915_TILING_X or
+ * I915_TILING_Y.
+ */
+ uint32_t stride;
+
+ /**
+ * Returned address bit 6 swizzling required for CPU access through
+ * mmap mapping.
+ */
+ uint32_t swizzle_mode;
+};
+
+struct drm_i915_gem_get_tiling {
+ /** Handle of the buffer to get tiling state for. */
+ uint32_t handle;
+
+ /**
+ * Current tiling mode for the object (I915_TILING_NONE, I915_TILING_X,
+ * I915_TILING_Y).
+ */
+ uint32_t tiling_mode;
+
+ /**
+ * Returned address bit 6 swizzling required for CPU access through
+ * mmap mapping.
+ */
+ uint32_t swizzle_mode;
+};
+
+struct drm_i915_gem_get_aperture {
+ /** Total size of the aperture used by i915_gem_execbuffer, in bytes */
+ uint64_t aper_size;
+
+ /**
+ * Available space in the aperture used by i915_gem_execbuffer, in
+ * bytes
+ */
+ uint64_t aper_available_size;
+};
+
+struct drm_i915_get_pipe_from_crtc_id {
+ /** ID of CRTC being requested **/
+ uint32_t crtc_id;
+
+ /** pipe of requested CRTC **/
+ uint32_t pipe;
+};
+
+#define I915_MADV_WILLNEED 0
+#define I915_MADV_DONTNEED 1
+#define I915_MADV_PURGED_INTERNAL 2 /* internal state */
+
+struct drm_i915_gem_madvise {
+ /** Handle of the buffer to change the backing store advice */
+ uint32_t handle;
+
+ /* Advice: either the buffer will be needed again in the near future,
+ * or wont be and could be discarded under memory pressure.
+ */
+ uint32_t madv;
+
+ /** Whether the backing store still exists. */
+ uint32_t retained;
+};
+
+#define I915_OVERLAY_TYPE_MASK 0xff
+#define I915_OVERLAY_YUV_PLANAR 0x01
+#define I915_OVERLAY_YUV_PACKED 0x02
+#define I915_OVERLAY_RGB 0x03
+
+#define I915_OVERLAY_DEPTH_MASK 0xff00
+#define I915_OVERLAY_RGB24 0x1000
+#define I915_OVERLAY_RGB16 0x2000
+#define I915_OVERLAY_RGB15 0x3000
+#define I915_OVERLAY_YUV422 0x0100
+#define I915_OVERLAY_YUV411 0x0200
+#define I915_OVERLAY_YUV420 0x0300
+#define I915_OVERLAY_YUV410 0x0400
+
+#define I915_OVERLAY_SWAP_MASK 0xff0000
+#define I915_OVERLAY_NO_SWAP 0x000000
+#define I915_OVERLAY_UV_SWAP 0x010000
+#define I915_OVERLAY_Y_SWAP 0x020000
+#define I915_OVERLAY_Y_AND_UV_SWAP 0x030000
+
+#define I915_OVERLAY_FLAGS_MASK 0xff000000
+#define I915_OVERLAY_ENABLE 0x01000000
+
+struct drm_intel_overlay_put_image {
+ /* various flags and src format description */
+ uint32_t flags;
+ /* source picture description */
+ uint32_t bo_handle;
+ /* stride values and offsets are in bytes, buffer relative */
+ uint16_t stride_Y; /* stride for packed formats */
+ uint16_t stride_UV;
+ uint32_t offset_Y; /* offset for packet formats */
+ uint32_t offset_U;
+ uint32_t offset_V;
+ /* in pixels */
+ uint16_t src_width;
+ uint16_t src_height;
+ /* to compensate the scaling factors for partially covered surfaces */
+ uint16_t src_scan_width;
+ uint16_t src_scan_height;
+ /* output crtc description */
+ uint32_t crtc_id;
+ uint16_t dst_x;
+ uint16_t dst_y;
+ uint16_t dst_width;
+ uint16_t dst_height;
+};
+
+/* flags */
+#define I915_OVERLAY_UPDATE_ATTRS (1<<0)
+#define I915_OVERLAY_UPDATE_GAMMA (1<<1)
+struct drm_intel_overlay_attrs {
+ uint32_t flags;
+ uint32_t color_key;
+ int32_t brightness;
+ uint32_t contrast;
+ uint32_t saturation;
+ uint32_t gamma0;
+ uint32_t gamma1;
+ uint32_t gamma2;
+ uint32_t gamma3;
+ uint32_t gamma4;
+ uint32_t gamma5;
+};
+
+/*
+ * Intel sprite handling
+ *
+ * Color keying works with a min/mask/max tuple. Both source and destination
+ * color keying is allowed.
+ *
+ * Source keying:
+ * Sprite pixels within the min & max values, masked against the color channels
+ * specified in the mask field, will be transparent. All other pixels will
+ * be displayed on top of the primary plane. For RGB surfaces, only the min
+ * and mask fields will be used; ranged compares are not allowed.
+ *
+ * Destination keying:
+ * Primary plane pixels that match the min value, masked against the color
+ * channels specified in the mask field, will be replaced by corresponding
+ * pixels from the sprite plane.
+ *
+ * Note that source & destination keying are exclusive; only one can be
+ * active on a given plane.
+ */
+
+#define I915_SET_COLORKEY_NONE (1<<0) /* disable color key matching */
+#define I915_SET_COLORKEY_DESTINATION (1<<1)
+#define I915_SET_COLORKEY_SOURCE (1<<2)
+struct drm_intel_sprite_colorkey {
+ uint32_t plane_id;
+ uint32_t min_value;
+ uint32_t channel_mask;
+ uint32_t max_value;
+ uint32_t flags;
+};
+
+#endif /* _I915_DRM_H_ */
diff --git a/sys/dev/drm2/i915/i915_drv.c b/sys/dev/drm2/i915/i915_drv.c
new file mode 100644
index 000000000000..79ab6d55eca2
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_drv.c
@@ -0,0 +1,821 @@
+/* i915_drv.c -- Intel i915 driver -*- linux-c -*-
+ * Created: Wed Feb 14 17:10:04 2001 by gareth@valinux.com
+ */
+/*-
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * 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 (including the next
+ * paragraph) 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
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS 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.
+ *
+ * Authors:
+ * Gareth Hughes <gareth@valinux.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_mm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/drm_pciids.h>
+#include <dev/drm2/i915/intel_drv.h>
+
+/* drv_PCI_IDs comes from drm_pciids.h, generated from drm_pciids.txt. */
+static drm_pci_id_list_t i915_pciidlist[] = {
+ i915_PCI_IDS
+};
+
+static const struct intel_device_info intel_i830_info = {
+ .gen = 2, .is_mobile = 1, .cursor_needs_physical = 1,
+ .has_overlay = 1, .overlay_needs_physical = 1,
+};
+
+static const struct intel_device_info intel_845g_info = {
+ .gen = 2,
+ .has_overlay = 1, .overlay_needs_physical = 1,
+};
+
+static const struct intel_device_info intel_i85x_info = {
+ .gen = 2, .is_i85x = 1, .is_mobile = 1,
+ .cursor_needs_physical = 1,
+ .has_overlay = 1, .overlay_needs_physical = 1,
+};
+
+static const struct intel_device_info intel_i865g_info = {
+ .gen = 2,
+ .has_overlay = 1, .overlay_needs_physical = 1,
+};
+
+static const struct intel_device_info intel_i915g_info = {
+ .gen = 3, .is_i915g = 1, .cursor_needs_physical = 1,
+ .has_overlay = 1, .overlay_needs_physical = 1,
+};
+static const struct intel_device_info intel_i915gm_info = {
+ .gen = 3, .is_mobile = 1,
+ .cursor_needs_physical = 1,
+ .has_overlay = 1, .overlay_needs_physical = 1,
+ .supports_tv = 1,
+};
+static const struct intel_device_info intel_i945g_info = {
+ .gen = 3, .has_hotplug = 1, .cursor_needs_physical = 1,
+ .has_overlay = 1, .overlay_needs_physical = 1,
+};
+static const struct intel_device_info intel_i945gm_info = {
+ .gen = 3, .is_i945gm = 1, .is_mobile = 1,
+ .has_hotplug = 1, .cursor_needs_physical = 1,
+ .has_overlay = 1, .overlay_needs_physical = 1,
+ .supports_tv = 1,
+};
+
+static const struct intel_device_info intel_i965g_info = {
+ .gen = 4, .is_broadwater = 1,
+ .has_hotplug = 1,
+ .has_overlay = 1,
+};
+
+static const struct intel_device_info intel_i965gm_info = {
+ .gen = 4, .is_crestline = 1,
+ .is_mobile = 1, .has_fbc = 1, .has_hotplug = 1,
+ .has_overlay = 1,
+ .supports_tv = 1,
+};
+
+static const struct intel_device_info intel_g33_info = {
+ .gen = 3, .is_g33 = 1,
+ .need_gfx_hws = 1, .has_hotplug = 1,
+ .has_overlay = 1,
+};
+
+static const struct intel_device_info intel_g45_info = {
+ .gen = 4, .is_g4x = 1, .need_gfx_hws = 1,
+ .has_pipe_cxsr = 1, .has_hotplug = 1,
+ .has_bsd_ring = 1,
+};
+
+static const struct intel_device_info intel_gm45_info = {
+ .gen = 4, .is_g4x = 1,
+ .is_mobile = 1, .need_gfx_hws = 1, .has_fbc = 1,
+ .has_pipe_cxsr = 1, .has_hotplug = 1,
+ .supports_tv = 1,
+ .has_bsd_ring = 1,
+};
+
+static const struct intel_device_info intel_pineview_info = {
+ .gen = 3, .is_g33 = 1, .is_pineview = 1, .is_mobile = 1,
+ .need_gfx_hws = 1, .has_hotplug = 1,
+ .has_overlay = 1,
+};
+
+static const struct intel_device_info intel_ironlake_d_info = {
+ .gen = 5,
+ .need_gfx_hws = 1, .has_hotplug = 1,
+ .has_bsd_ring = 1,
+};
+
+static const struct intel_device_info intel_ironlake_m_info = {
+ .gen = 5, .is_mobile = 1,
+ .need_gfx_hws = 1, .has_hotplug = 1,
+ .has_fbc = 0, /* disabled due to buggy hardware */
+ .has_bsd_ring = 1,
+};
+
+static const struct intel_device_info intel_sandybridge_d_info = {
+ .gen = 6,
+ .need_gfx_hws = 1, .has_hotplug = 1,
+ .has_bsd_ring = 1,
+ .has_blt_ring = 1,
+ .has_llc = 1,
+};
+
+static const struct intel_device_info intel_sandybridge_m_info = {
+ .gen = 6, .is_mobile = 1,
+ .need_gfx_hws = 1, .has_hotplug = 1,
+ .has_fbc = 1,
+ .has_bsd_ring = 1,
+ .has_blt_ring = 1,
+ .has_llc = 1,
+};
+
+static const struct intel_device_info intel_ivybridge_d_info = {
+ .is_ivybridge = 1, .gen = 7,
+ .need_gfx_hws = 1, .has_hotplug = 1,
+ .has_bsd_ring = 1,
+ .has_blt_ring = 1,
+ .has_llc = 1,
+};
+
+static const struct intel_device_info intel_ivybridge_m_info = {
+ .is_ivybridge = 1, .gen = 7, .is_mobile = 1,
+ .need_gfx_hws = 1, .has_hotplug = 1,
+ .has_fbc = 0, /* FBC is not enabled on Ivybridge mobile yet */
+ .has_bsd_ring = 1,
+ .has_blt_ring = 1,
+ .has_llc = 1,
+};
+
+#define INTEL_VGA_DEVICE(id, info_) { \
+ .device = id, \
+ .info = info_, \
+}
+
+static const struct intel_gfx_device_id {
+ int device;
+ const struct intel_device_info *info;
+} pciidlist[] = { /* aka */
+ INTEL_VGA_DEVICE(0x3577, &intel_i830_info),
+ INTEL_VGA_DEVICE(0x2562, &intel_845g_info),
+ INTEL_VGA_DEVICE(0x3582, &intel_i85x_info),
+ INTEL_VGA_DEVICE(0x358e, &intel_i85x_info),
+ INTEL_VGA_DEVICE(0x2572, &intel_i865g_info),
+ INTEL_VGA_DEVICE(0x2582, &intel_i915g_info),
+ INTEL_VGA_DEVICE(0x258a, &intel_i915g_info),
+ INTEL_VGA_DEVICE(0x2592, &intel_i915gm_info),
+ INTEL_VGA_DEVICE(0x2772, &intel_i945g_info),
+ INTEL_VGA_DEVICE(0x27a2, &intel_i945gm_info),
+ INTEL_VGA_DEVICE(0x27ae, &intel_i945gm_info),
+ INTEL_VGA_DEVICE(0x2972, &intel_i965g_info),
+ INTEL_VGA_DEVICE(0x2982, &intel_i965g_info),
+ INTEL_VGA_DEVICE(0x2992, &intel_i965g_info),
+ INTEL_VGA_DEVICE(0x29a2, &intel_i965g_info),
+ INTEL_VGA_DEVICE(0x29b2, &intel_g33_info),
+ INTEL_VGA_DEVICE(0x29c2, &intel_g33_info),
+ INTEL_VGA_DEVICE(0x29d2, &intel_g33_info),
+ INTEL_VGA_DEVICE(0x2a02, &intel_i965gm_info),
+ INTEL_VGA_DEVICE(0x2a12, &intel_i965gm_info),
+ INTEL_VGA_DEVICE(0x2a42, &intel_gm45_info),
+ INTEL_VGA_DEVICE(0x2e02, &intel_g45_info),
+ INTEL_VGA_DEVICE(0x2e12, &intel_g45_info),
+ INTEL_VGA_DEVICE(0x2e22, &intel_g45_info),
+ INTEL_VGA_DEVICE(0x2e32, &intel_g45_info),
+ INTEL_VGA_DEVICE(0x2e42, &intel_g45_info),
+ INTEL_VGA_DEVICE(0x2e92, &intel_g45_info),
+ INTEL_VGA_DEVICE(0xa001, &intel_pineview_info),
+ INTEL_VGA_DEVICE(0xa011, &intel_pineview_info),
+ INTEL_VGA_DEVICE(0x0042, &intel_ironlake_d_info),
+ INTEL_VGA_DEVICE(0x0046, &intel_ironlake_m_info),
+ INTEL_VGA_DEVICE(0x0102, &intel_sandybridge_d_info),
+ INTEL_VGA_DEVICE(0x0112, &intel_sandybridge_d_info),
+ INTEL_VGA_DEVICE(0x0122, &intel_sandybridge_d_info),
+ INTEL_VGA_DEVICE(0x0106, &intel_sandybridge_m_info),
+ INTEL_VGA_DEVICE(0x0116, &intel_sandybridge_m_info),
+ INTEL_VGA_DEVICE(0x0126, &intel_sandybridge_m_info),
+ INTEL_VGA_DEVICE(0x010A, &intel_sandybridge_d_info),
+ INTEL_VGA_DEVICE(0x0156, &intel_ivybridge_m_info), /* GT1 mobile */
+ INTEL_VGA_DEVICE(0x0166, &intel_ivybridge_m_info), /* GT2 mobile */
+ INTEL_VGA_DEVICE(0x0152, &intel_ivybridge_d_info), /* GT1 desktop */
+ INTEL_VGA_DEVICE(0x0162, &intel_ivybridge_d_info), /* GT2 desktop */
+ INTEL_VGA_DEVICE(0x015a, &intel_ivybridge_d_info), /* GT1 server */
+ INTEL_VGA_DEVICE(0x016a, &intel_ivybridge_d_info), /* GT2 server */
+ {0, 0}
+};
+
+static int i915_drm_freeze(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+ int error;
+
+ dev_priv = dev->dev_private;
+ drm_kms_helper_poll_disable(dev);
+
+#if 0
+ pci_save_state(dev->pdev);
+#endif
+
+ DRM_LOCK(dev);
+ /* If KMS is active, we do the leavevt stuff here */
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ error = -i915_gem_idle(dev);
+ if (error) {
+ DRM_UNLOCK(dev);
+ device_printf(dev->device,
+ "GEM idle failed, resume might fail\n");
+ return (error);
+ }
+ drm_irq_uninstall(dev);
+ }
+
+ i915_save_state(dev);
+
+ intel_opregion_fini(dev);
+
+ /* Modeset on resume, not lid events */
+ dev_priv->modeset_on_lid = 0;
+ DRM_UNLOCK(dev);
+
+ return 0;
+}
+
+static int
+i915_suspend(device_t kdev)
+{
+ struct drm_device *dev;
+ int error;
+
+ dev = device_get_softc(kdev);
+ if (dev == NULL || dev->dev_private == NULL) {
+ DRM_ERROR("DRM not initialized, aborting suspend.\n");
+ return -ENODEV;
+ }
+
+ DRM_DEBUG_KMS("starting suspend\n");
+ error = i915_drm_freeze(dev);
+ if (error)
+ return (error);
+
+ error = bus_generic_suspend(kdev);
+ DRM_DEBUG_KMS("finished suspend %d\n", error);
+ return (error);
+}
+
+static int i915_drm_thaw(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int error = 0;
+
+ DRM_LOCK(dev);
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ i915_gem_restore_gtt_mappings(dev);
+ }
+
+ i915_restore_state(dev);
+ intel_opregion_setup(dev);
+
+ /* KMS EnterVT equivalent */
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ dev_priv->mm.suspended = 0;
+
+ error = i915_gem_init_hw(dev);
+
+ if (HAS_PCH_SPLIT(dev))
+ ironlake_init_pch_refclk(dev);
+
+ DRM_UNLOCK(dev);
+ sx_xlock(&dev->mode_config.mutex);
+ drm_mode_config_reset(dev);
+ sx_xunlock(&dev->mode_config.mutex);
+ drm_irq_install(dev);
+
+ sx_xlock(&dev->mode_config.mutex);
+ /* Resume the modeset for every activated CRTC */
+ drm_helper_resume_force_mode(dev);
+ sx_xunlock(&dev->mode_config.mutex);
+
+ if (IS_IRONLAKE_M(dev))
+ ironlake_enable_rc6(dev);
+ DRM_LOCK(dev);
+ }
+
+ intel_opregion_init(dev);
+
+ dev_priv->modeset_on_lid = 0;
+
+ DRM_UNLOCK(dev);
+
+ return error;
+}
+
+static int
+i915_resume(device_t kdev)
+{
+ struct drm_device *dev;
+ int ret;
+
+ dev = device_get_softc(kdev);
+ DRM_DEBUG_KMS("starting resume\n");
+#if 0
+ if (pci_enable_device(dev->pdev))
+ return -EIO;
+
+ pci_set_master(dev->pdev);
+#endif
+
+ ret = -i915_drm_thaw(dev);
+ if (ret != 0)
+ return (ret);
+
+ drm_kms_helper_poll_enable(dev);
+ ret = bus_generic_resume(kdev);
+ DRM_DEBUG_KMS("finished resume %d\n", ret);
+ return (ret);
+}
+
+static int
+i915_probe(device_t kdev)
+{
+
+ return drm_probe(kdev, i915_pciidlist);
+}
+
+int i915_modeset;
+
+static int
+i915_attach(device_t kdev)
+{
+ struct drm_device *dev;
+
+ dev = device_get_softc(kdev);
+ if (i915_modeset == 1)
+ i915_driver_info.driver_features |= DRIVER_MODESET;
+ dev->driver = &i915_driver_info;
+ return (drm_attach(kdev, i915_pciidlist));
+}
+
+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;
+ 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_detach),
+ 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 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_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_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);
+
+#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
+
+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;
+ DRM_DEBUG_KMS("Found Ibex Peak PCH\n");
+ } else if (id == INTEL_PCH_CPT_DEVICE_ID_TYPE) {
+ dev_priv->pch_type = PCH_CPT;
+ 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;
+ DRM_DEBUG_KMS("Found PatherPoint PCH\n");
+ } else
+ DRM_DEBUG_KMS("No PCH detected\n");
+ } else
+ DRM_DEBUG_KMS("No Intel PCI-ISA bridge found\n");
+}
+
+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(10000);
+
+ I915_WRITE_NOTRACE(FORCEWAKE, 1);
+ POSTING_READ(FORCEWAKE);
+
+ count = 0;
+ while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK) & 1) == 0)
+ DELAY(10000);
+}
+
+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(10000);
+
+ I915_WRITE_NOTRACE(FORCEWAKE_MT, (1<<16) | 1);
+ POSTING_READ(FORCEWAKE_MT);
+
+ count = 0;
+ while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_MT_ACK) & 1) == 0)
+ DELAY(10000);
+}
+
+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, (1<<16) | 0);
+ /* 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(10000);
+ 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);
+}
+
+static int
+i8xx_do_reset(struct drm_device *dev, u8 flags)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int onems;
+
+ if (IS_I85X(dev))
+ return -ENODEV;
+
+ onems = hz / 1000;
+ if (onems == 0)
+ onems = 1;
+
+ I915_WRITE(D_STATE, I915_READ(D_STATE) | DSTATE_GFX_RESET_I830);
+ POSTING_READ(D_STATE);
+
+ if (IS_I830(dev) || IS_845G(dev)) {
+ I915_WRITE(DEBUG_RESET_I830,
+ DEBUG_RESET_DISPLAY |
+ DEBUG_RESET_RENDER |
+ DEBUG_RESET_FULL);
+ POSTING_READ(DEBUG_RESET_I830);
+ pause("i8xxrst1", onems);
+
+ I915_WRITE(DEBUG_RESET_I830, 0);
+ POSTING_READ(DEBUG_RESET_I830);
+ }
+
+ pause("i8xxrst2", onems);
+
+ I915_WRITE(D_STATE, I915_READ(D_STATE) & ~DSTATE_GFX_RESET_I830);
+ POSTING_READ(D_STATE);
+
+ return 0;
+}
+
+static int
+i965_reset_complete(struct drm_device *dev)
+{
+ u8 gdrst;
+
+ gdrst = pci_read_config(dev->device, I965_GDRST, 1);
+ return (gdrst & 0x1);
+}
+
+static int
+i965_do_reset(struct drm_device *dev, u8 flags)
+{
+ u8 gdrst;
+
+ /*
+ * Set the domains we want to reset (GRDOM/bits 2 and 3) as
+ * well as the reset bit (GR/bit 0). Setting the GR bit
+ * triggers the reset; when done, the hardware will clear it.
+ */
+ gdrst = pci_read_config(dev->device, I965_GDRST, 1);
+ pci_write_config(dev->device, I965_GDRST, gdrst | flags | 0x1, 1);
+
+ return (_intel_wait_for(dev, i965_reset_complete(dev), 500, 1,
+ "915rst"));
+}
+
+static int
+ironlake_do_reset(struct drm_device *dev, u8 flags)
+{
+ struct drm_i915_private *dev_priv;
+ u32 gdrst;
+
+ dev_priv = dev->dev_private;
+ gdrst = I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR);
+ I915_WRITE(MCHBAR_MIRROR_BASE + ILK_GDSR, gdrst | flags | 0x1);
+ return (_intel_wait_for(dev,
+ (I915_READ(MCHBAR_MIRROR_BASE + ILK_GDSR) & 0x1) != 0,
+ 500, 1, "915rst"));
+}
+
+static int
+gen6_do_reset(struct drm_device *dev, u8 flags)
+{
+ struct drm_i915_private *dev_priv;
+ int ret;
+
+ dev_priv = dev->dev_private;
+
+ /* Hold gt_lock across reset to prevent any register access
+ * with forcewake not set correctly
+ */
+ mtx_lock(&dev_priv->gt_lock);
+
+ /* Reset the chip */
+
+ /* GEN6_GDRST is not in the gt power well, no need to check
+ * for fifo space for the write or forcewake the chip for
+ * the read
+ */
+ I915_WRITE_NOTRACE(GEN6_GDRST, GEN6_GRDOM_FULL);
+
+ /* Spin waiting for the device to ack the reset request */
+ ret = _intel_wait_for(dev,
+ (I915_READ(GEN6_GDRST) & GEN6_GRDOM_FULL) == 0,
+ 500, 1, "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);
+ else
+ dev_priv->display.force_wake_put(dev_priv);
+
+ /* Restore fifo count */
+ dev_priv->gt_fifo_count = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
+
+ mtx_unlock(&dev_priv->gt_lock);
+ return (ret);
+}
+
+int
+i915_reset(struct drm_device *dev, u8 flags)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ /*
+ * We really should only reset the display subsystem if we actually
+ * need to
+ */
+ bool need_display = true;
+ int ret;
+
+ if (!i915_try_reset)
+ return (0);
+
+ if (!sx_try_xlock(&dev->dev_struct_lock))
+ return (-EBUSY);
+
+ i915_gem_reset(dev);
+
+ ret = -ENODEV;
+ if (time_second - dev_priv->last_gpu_reset < 5) {
+ DRM_ERROR("GPU hanging too fast, declaring wedged!\n");
+ } else {
+ switch (INTEL_INFO(dev)->gen) {
+ case 7:
+ case 6:
+ ret = gen6_do_reset(dev, flags);
+ break;
+ case 5:
+ ret = ironlake_do_reset(dev, flags);
+ break;
+ case 4:
+ ret = i965_do_reset(dev, flags);
+ break;
+ case 2:
+ ret = i8xx_do_reset(dev, flags);
+ break;
+ }
+ }
+ dev_priv->last_gpu_reset = time_second;
+ if (ret) {
+ DRM_ERROR("Failed to reset chip.\n");
+ DRM_UNLOCK(dev);
+ return (ret);
+ }
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET) ||
+ !dev_priv->mm.suspended) {
+ dev_priv->mm.suspended = 0;
+
+ i915_gem_init_swizzling(dev);
+
+ dev_priv->rings[RCS].init(&dev_priv->rings[RCS]);
+ if (HAS_BSD(dev))
+ dev_priv->rings[VCS].init(&dev_priv->rings[VCS]);
+ if (HAS_BLT(dev))
+ dev_priv->rings[BCS].init(&dev_priv->rings[BCS]);
+
+ i915_gem_init_ppgtt(dev);
+
+ drm_irq_uninstall(dev);
+ drm_mode_config_reset(dev);
+ DRM_UNLOCK(dev);
+ drm_irq_install(dev);
+ DRM_LOCK(dev);
+ }
+ DRM_UNLOCK(dev);
+
+ if (need_display) {
+ sx_xlock(&dev->mode_config.mutex);
+ drm_helper_resume_force_mode(dev);
+ sx_xunlock(&dev->mode_config.mutex);
+ }
+
+ return (0);
+}
+
+#define __i915_read(x, y) \
+u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
+ u##x val = 0; \
+ if (NEEDS_FORCE_WAKE((dev_priv), (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); \
+ 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); \
+ } \
+ trace_i915_reg_rw(false, reg, val, sizeof(val)); \
+ return val; \
+}
+
+__i915_read(8, 8)
+__i915_read(16, 16)
+__i915_read(32, 32)
+__i915_read(64, 64)
+#undef __i915_read
+
+#define __i915_write(x, y) \
+void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \
+ u32 __fifo_ret = 0; \
+ trace_i915_reg_rw(true, reg, val, sizeof(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); \
+ if (__predict_false(__fifo_ret)) { \
+ gen6_gt_check_fifodbg(dev_priv); \
+ } \
+}
+__i915_write(8, 8)
+__i915_write(16, 16)
+__i915_write(32, 32)
+__i915_write(64, 64)
+#undef __i915_write
diff --git a/sys/dev/drm2/i915/i915_drv.h b/sys/dev/drm2/i915/i915_drv.h
new file mode 100644
index 000000000000..bf1f99281eb2
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_drv.h
@@ -0,0 +1,1481 @@
+/* i915_drv.h -- Private header for the I915 driver -*- linux-c -*-
+ */
+/*
+ *
+ * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#ifndef _I915_DRV_H_
+#define _I915_DRV_H_
+
+#include <dev/agp/agp_i810.h>
+#include <dev/drm2/drm_mm.h>
+#include <dev/drm2/i915/i915_reg.h>
+#include <dev/drm2/i915/intel_ringbuffer.h>
+#include <dev/drm2/i915/intel_bios.h>
+
+/* General customization:
+ */
+
+#define DRIVER_AUTHOR "Tungsten Graphics, Inc."
+
+#define DRIVER_NAME "i915"
+#define DRIVER_DESC "Intel Graphics"
+#define DRIVER_DATE "20080730"
+
+MALLOC_DECLARE(DRM_I915_GEM);
+
+enum pipe {
+ PIPE_A = 0,
+ PIPE_B,
+ PIPE_C,
+ I915_MAX_PIPES
+};
+#define pipe_name(p) ((p) + 'A')
+#define I915_NUM_PIPE 2
+
+enum plane {
+ PLANE_A = 0,
+ PLANE_B,
+ PLANE_C,
+};
+#define plane_name(p) ((p) + 'A')
+
+#define I915_GEM_GPU_DOMAINS (~(I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT))
+
+#define for_each_pipe(p) for ((p) = 0; (p) < dev_priv->num_pipe; (p)++)
+
+/* Interface history:
+ *
+ * 1.1: Original.
+ * 1.2: Add Power Management
+ * 1.3: Add vblank support
+ * 1.4: Fix cmdbuffer path, add heap destroy
+ * 1.5: Add vblank pipe configuration
+ * 1.6: - New ioctl for scheduling buffer swaps on vertical blank
+ * - Support vertical blank on secondary display pipe
+ */
+#define DRIVER_MAJOR 1
+#define DRIVER_MINOR 6
+#define DRIVER_PATCHLEVEL 0
+
+#define WATCH_COHERENCY 0
+#define WATCH_BUF 0
+#define WATCH_EXEC 0
+#define WATCH_LRU 0
+#define WATCH_RELOC 0
+#define WATCH_INACTIVE 0
+#define WATCH_PWRITE 0
+
+#define I915_GEM_PHYS_CURSOR_0 1
+#define I915_GEM_PHYS_CURSOR_1 2
+#define I915_GEM_PHYS_OVERLAY_REGS 3
+#define I915_MAX_PHYS_OBJECT (I915_GEM_PHYS_OVERLAY_REGS)
+
+struct drm_i915_gem_phys_object {
+ int id;
+ drm_dma_handle_t *handle;
+ struct drm_i915_gem_object *cur_obj;
+};
+
+struct drm_i915_private;
+
+struct drm_i915_display_funcs {
+ void (*dpms)(struct drm_crtc *crtc, int mode);
+ bool (*fbc_enabled)(struct drm_device *dev);
+ void (*enable_fbc)(struct drm_crtc *crtc, unsigned long interval);
+ void (*disable_fbc)(struct drm_device *dev);
+ int (*get_display_clock_speed)(struct drm_device *dev);
+ int (*get_fifo_size)(struct drm_device *dev, int plane);
+ void (*update_wm)(struct drm_device *dev);
+ void (*update_sprite_wm)(struct drm_device *dev, int pipe,
+ uint32_t sprite_width, int pixel_size);
+ int (*crtc_mode_set)(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode,
+ int x, int y,
+ struct drm_framebuffer *old_fb);
+ void (*write_eld)(struct drm_connector *connector,
+ struct drm_crtc *crtc);
+ void (*fdi_link_train)(struct drm_crtc *crtc);
+ void (*init_clock_gating)(struct drm_device *dev);
+ void (*init_pch_clock_gating)(struct drm_device *dev);
+ int (*queue_flip)(struct drm_device *dev, struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
+ struct drm_i915_gem_object *obj);
+ void (*force_wake_get)(struct drm_i915_private *dev_priv);
+ void (*force_wake_put)(struct drm_i915_private *dev_priv);
+ int (*update_plane)(struct drm_crtc *crtc, struct drm_framebuffer *fb,
+ int x, int y);
+ /* clock updates for mode set */
+ /* cursor updates */
+ /* render clock increase/decrease */
+ /* display clock increase/decrease */
+ /* pll clock increase/decrease */
+};
+
+struct intel_device_info {
+ u8 gen;
+ u8 is_mobile:1;
+ u8 is_i85x:1;
+ u8 is_i915g:1;
+ u8 is_i945gm:1;
+ u8 is_g33:1;
+ u8 need_gfx_hws:1;
+ u8 is_g4x:1;
+ u8 is_pineview:1;
+ u8 is_broadwater:1;
+ u8 is_crestline:1;
+ u8 is_ivybridge:1;
+ u8 has_fbc:1;
+ u8 has_pipe_cxsr:1;
+ u8 has_hotplug:1;
+ u8 cursor_needs_physical:1;
+ u8 has_overlay:1;
+ u8 overlay_needs_physical:1;
+ u8 supports_tv:1;
+ u8 has_bsd_ring:1;
+ u8 has_blt_ring:1;
+ u8 has_llc:1;
+};
+
+#define I915_PPGTT_PD_ENTRIES 512
+#define I915_PPGTT_PT_ENTRIES 1024
+struct i915_hw_ppgtt {
+ unsigned num_pd_entries;
+ vm_page_t *pt_pages;
+ uint32_t pd_offset;
+ vm_paddr_t *pt_dma_addr;
+ vm_paddr_t scratch_page_dma_addr;
+};
+
+enum no_fbc_reason {
+ FBC_NO_OUTPUT, /* no outputs enabled to compress */
+ FBC_STOLEN_TOO_SMALL, /* not enough space to hold compressed buffers */
+ FBC_UNSUPPORTED_MODE, /* interlace or doublescanned mode */
+ FBC_MODE_TOO_LARGE, /* mode too large for compression */
+ FBC_BAD_PLANE, /* fbc not supported on plane */
+ FBC_NOT_TILED, /* buffer not tiled */
+ FBC_MULTIPLE_PIPES, /* more than one pipe active */
+ FBC_MODULE_PARAM,
+};
+
+struct mem_block {
+ struct mem_block *next;
+ struct mem_block *prev;
+ int start;
+ int size;
+ struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */
+};
+
+struct opregion_header;
+struct opregion_acpi;
+struct opregion_swsci;
+struct opregion_asle;
+
+struct intel_opregion {
+ struct opregion_header *header;
+ struct opregion_acpi *acpi;
+ struct opregion_swsci *swsci;
+ struct opregion_asle *asle;
+ void *vbt;
+ u32 *lid_state;
+};
+#define OPREGION_SIZE (8*1024)
+
+#define I915_FENCE_REG_NONE -1
+#define I915_MAX_NUM_FENCES 16
+/* 16 fences + sign bit for FENCE_REG_NONE */
+#define I915_MAX_NUM_FENCE_BITS 5
+
+struct drm_i915_fence_reg {
+ struct list_head lru_list;
+ struct drm_i915_gem_object *obj;
+ uint32_t setup_seqno;
+ int pin_count;
+};
+
+struct sdvo_device_mapping {
+ u8 initialized;
+ u8 dvo_port;
+ u8 slave_addr;
+ u8 dvo_wiring;
+ u8 i2c_pin;
+ u8 ddc_pin;
+};
+
+enum intel_pch {
+ PCH_IBX, /* Ibexpeak PCH */
+ PCH_CPT, /* Cougarpoint PCH */
+};
+
+#define QUIRK_PIPEA_FORCE (1<<0)
+#define QUIRK_LVDS_SSC_DISABLE (1<<1)
+
+struct intel_fbdev;
+struct intel_fbc_work;
+
+typedef struct drm_i915_private {
+ struct drm_device *dev;
+
+ device_t *gmbus_bridge;
+ device_t *bbbus_bridge;
+ device_t *gmbus;
+ device_t *bbbus;
+ /** gmbus_sx protects against concurrent usage of the single hw gmbus
+ * controller on different i2c buses. */
+ struct sx gmbus_sx;
+
+ int has_gem;
+ int relative_constants_mode;
+
+ drm_local_map_t *sarea;
+ drm_local_map_t *mmio_map;
+
+ /** gt_fifo_count and the subsequent register write are synchronized
+ * with dev->struct_mutex. */
+ unsigned gt_fifo_count;
+ /** forcewake_count is protected by gt_lock */
+ unsigned forcewake_count;
+ /** gt_lock is also taken in irq contexts. */
+ struct mtx gt_lock;
+
+ drm_i915_sarea_t *sarea_priv;
+ /* drm_i915_ring_buffer_t ring; */
+ struct intel_ring_buffer rings[I915_NUM_RINGS];
+ uint32_t next_seqno;
+
+ drm_dma_handle_t *status_page_dmah;
+ void *hw_status_page;
+ dma_addr_t dma_status_page;
+ uint32_t counter;
+ unsigned int status_gfx_addr;
+ drm_local_map_t hws_map;
+ struct drm_gem_object *hws_obj;
+
+ struct drm_i915_gem_object *pwrctx;
+ struct drm_i915_gem_object *renderctx;
+
+ unsigned int cpp;
+ int back_offset;
+ int front_offset;
+ int current_page;
+ int page_flipping;
+
+ atomic_t irq_received;
+ u32 trace_irq_seqno;
+
+ /** Cached value of IER to avoid reads in updating the bitfield */
+ u32 pipestat[2];
+ u32 irq_mask;
+ u32 gt_irq_mask;
+ u32 pch_irq_mask;
+ struct mtx irq_lock;
+
+ u32 hotplug_supported_mask;
+
+ int tex_lru_log_granularity;
+ int allow_batchbuffer;
+ unsigned int sr01, adpa, ppcr, dvob, dvoc, lvds;
+ int vblank_pipe;
+ int num_pipe;
+
+ /* For hangcheck timer */
+#define DRM_I915_HANGCHECK_PERIOD ((1500 /* in ms */ * hz) / 1000)
+ int hangcheck_count;
+ uint32_t last_acthd;
+ uint32_t last_acthd_bsd;
+ uint32_t last_acthd_blt;
+ uint32_t last_instdone;
+ uint32_t last_instdone1;
+
+ struct intel_opregion opregion;
+
+
+ /* overlay */
+ struct intel_overlay *overlay;
+ bool sprite_scaling_enabled;
+
+ /* LVDS info */
+ int backlight_level; /* restore backlight to this value */
+ bool backlight_enabled;
+ struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */
+ struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */
+
+ /* Feature bits from the VBIOS */
+ unsigned int int_tv_support:1;
+ unsigned int lvds_dither:1;
+ unsigned int lvds_vbt:1;
+ unsigned int int_crt_support:1;
+ unsigned int lvds_use_ssc:1;
+ unsigned int display_clock_mode:1;
+ int lvds_ssc_freq;
+ struct {
+ int rate;
+ int lanes;
+ int preemphasis;
+ int vswing;
+
+ bool initialized;
+ bool support;
+ int bpp;
+ struct edp_power_seq pps;
+ } edp;
+ bool no_aux_handshake;
+
+ int crt_ddc_pin;
+ struct drm_i915_fence_reg fence_regs[I915_MAX_NUM_FENCES]; /* assume 965 */
+ int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */
+ int num_fence_regs; /* 8 on pre-965, 16 otherwise */
+
+ /* PCH chipset type */
+ enum intel_pch pch_type;
+
+ /* Display functions */
+ struct drm_i915_display_funcs display;
+
+ unsigned long quirks;
+
+ /* Register state */
+ bool modeset_on_lid;
+ u8 saveLBB;
+ u32 saveDSPACNTR;
+ u32 saveDSPBCNTR;
+ u32 saveDSPARB;
+ u32 saveHWS;
+ u32 savePIPEACONF;
+ u32 savePIPEBCONF;
+ u32 savePIPEASRC;
+ u32 savePIPEBSRC;
+ u32 saveFPA0;
+ u32 saveFPA1;
+ u32 saveDPLL_A;
+ u32 saveDPLL_A_MD;
+ u32 saveHTOTAL_A;
+ u32 saveHBLANK_A;
+ u32 saveHSYNC_A;
+ u32 saveVTOTAL_A;
+ u32 saveVBLANK_A;
+ u32 saveVSYNC_A;
+ u32 saveBCLRPAT_A;
+ u32 saveTRANSACONF;
+ u32 saveTRANS_HTOTAL_A;
+ u32 saveTRANS_HBLANK_A;
+ u32 saveTRANS_HSYNC_A;
+ u32 saveTRANS_VTOTAL_A;
+ u32 saveTRANS_VBLANK_A;
+ u32 saveTRANS_VSYNC_A;
+ u32 savePIPEASTAT;
+ u32 saveDSPASTRIDE;
+ u32 saveDSPASIZE;
+ u32 saveDSPAPOS;
+ u32 saveDSPAADDR;
+ u32 saveDSPASURF;
+ u32 saveDSPATILEOFF;
+ u32 savePFIT_PGM_RATIOS;
+ u32 saveBLC_HIST_CTL;
+ u32 saveBLC_PWM_CTL;
+ u32 saveBLC_PWM_CTL2;
+ u32 saveBLC_CPU_PWM_CTL;
+ u32 saveBLC_CPU_PWM_CTL2;
+ u32 saveFPB0;
+ u32 saveFPB1;
+ u32 saveDPLL_B;
+ u32 saveDPLL_B_MD;
+ u32 saveHTOTAL_B;
+ u32 saveHBLANK_B;
+ u32 saveHSYNC_B;
+ u32 saveVTOTAL_B;
+ u32 saveVBLANK_B;
+ u32 saveVSYNC_B;
+ u32 saveBCLRPAT_B;
+ u32 saveTRANSBCONF;
+ u32 saveTRANS_HTOTAL_B;
+ u32 saveTRANS_HBLANK_B;
+ u32 saveTRANS_HSYNC_B;
+ u32 saveTRANS_VTOTAL_B;
+ u32 saveTRANS_VBLANK_B;
+ u32 saveTRANS_VSYNC_B;
+ u32 savePIPEBSTAT;
+ u32 saveDSPBSTRIDE;
+ u32 saveDSPBSIZE;
+ u32 saveDSPBPOS;
+ u32 saveDSPBADDR;
+ u32 saveDSPBSURF;
+ u32 saveDSPBTILEOFF;
+ u32 saveVGA0;
+ u32 saveVGA1;
+ u32 saveVGA_PD;
+ u32 saveVGACNTRL;
+ u32 saveADPA;
+ u32 saveLVDS;
+ u32 savePP_ON_DELAYS;
+ u32 savePP_OFF_DELAYS;
+ u32 saveDVOA;
+ u32 saveDVOB;
+ u32 saveDVOC;
+ u32 savePP_ON;
+ u32 savePP_OFF;
+ u32 savePP_CONTROL;
+ u32 savePP_DIVISOR;
+ u32 savePFIT_CONTROL;
+ u32 save_palette_a[256];
+ u32 save_palette_b[256];
+ u32 saveDPFC_CB_BASE;
+ u32 saveFBC_CFB_BASE;
+ u32 saveFBC_LL_BASE;
+ u32 saveFBC_CONTROL;
+ u32 saveFBC_CONTROL2;
+ u32 saveIER;
+ u32 saveIIR;
+ u32 saveIMR;
+ u32 saveDEIER;
+ u32 saveDEIMR;
+ u32 saveGTIER;
+ u32 saveGTIMR;
+ u32 saveFDI_RXA_IMR;
+ u32 saveFDI_RXB_IMR;
+ u32 saveCACHE_MODE_0;
+ u32 saveMI_ARB_STATE;
+ u32 saveSWF0[16];
+ u32 saveSWF1[16];
+ u32 saveSWF2[3];
+ u8 saveMSR;
+ u8 saveSR[8];
+ u8 saveGR[25];
+ u8 saveAR_INDEX;
+ u8 saveAR[21];
+ u8 saveDACMASK;
+ u8 saveCR[37];
+ uint64_t saveFENCE[I915_MAX_NUM_FENCES];
+ u32 saveCURACNTR;
+ u32 saveCURAPOS;
+ u32 saveCURABASE;
+ u32 saveCURBCNTR;
+ u32 saveCURBPOS;
+ u32 saveCURBBASE;
+ u32 saveCURSIZE;
+ u32 saveDP_B;
+ u32 saveDP_C;
+ u32 saveDP_D;
+ u32 savePIPEA_GMCH_DATA_M;
+ u32 savePIPEB_GMCH_DATA_M;
+ u32 savePIPEA_GMCH_DATA_N;
+ u32 savePIPEB_GMCH_DATA_N;
+ u32 savePIPEA_DP_LINK_M;
+ u32 savePIPEB_DP_LINK_M;
+ u32 savePIPEA_DP_LINK_N;
+ u32 savePIPEB_DP_LINK_N;
+ u32 saveFDI_RXA_CTL;
+ u32 saveFDI_TXA_CTL;
+ u32 saveFDI_RXB_CTL;
+ u32 saveFDI_TXB_CTL;
+ u32 savePFA_CTL_1;
+ u32 savePFB_CTL_1;
+ u32 savePFA_WIN_SZ;
+ u32 savePFB_WIN_SZ;
+ u32 savePFA_WIN_POS;
+ u32 savePFB_WIN_POS;
+ u32 savePCH_DREF_CONTROL;
+ u32 saveDISP_ARB_CTL;
+ u32 savePIPEA_DATA_M1;
+ u32 savePIPEA_DATA_N1;
+ u32 savePIPEA_LINK_M1;
+ u32 savePIPEA_LINK_N1;
+ u32 savePIPEB_DATA_M1;
+ u32 savePIPEB_DATA_N1;
+ u32 savePIPEB_LINK_M1;
+ u32 savePIPEB_LINK_N1;
+ u32 saveMCHBAR_RENDER_STANDBY;
+ u32 savePCH_PORT_HOTPLUG;
+
+ struct {
+ /** Memory allocator for GTT stolen memory */
+ struct drm_mm stolen;
+ /** Memory allocator for GTT */
+ struct drm_mm gtt_space;
+ /** List of all objects in gtt_space. Used to restore gtt
+ * mappings on resume */
+ struct list_head gtt_list;
+
+ /** Usable portion of the GTT for GEM */
+ unsigned long gtt_start;
+ unsigned long gtt_mappable_end;
+ unsigned long gtt_end;
+
+ /** PPGTT used for aliasing the PPGTT with the GTT */
+ struct i915_hw_ppgtt *aliasing_ppgtt;
+
+ /**
+ * List of objects currently involved in rendering from the
+ * ringbuffer.
+ *
+ * Includes buffers having the contents of their GPU caches
+ * flushed, not necessarily primitives. last_rendering_seqno
+ * represents when the rendering involved will be completed.
+ *
+ * A reference is held on the buffer while on this list.
+ */
+ struct list_head active_list;
+
+ /**
+ * List of objects which are not in the ringbuffer but which
+ * still have a write_domain which needs to be flushed before
+ * unbinding.
+ *
+ * A reference is held on the buffer while on this list.
+ */
+ struct list_head flushing_list;
+
+ /**
+ * LRU list of objects which are not in the ringbuffer and
+ * are ready to unbind, but are still in the GTT.
+ *
+ * last_rendering_seqno is 0 while an object is in this list.
+ *
+ * A reference is not held on the buffer while on this list,
+ * as merely being GTT-bound shouldn't prevent its being
+ * freed, and we'll pull it off the list in the free path.
+ */
+ struct list_head inactive_list;
+
+ /**
+ * LRU list of objects which are not in the ringbuffer but
+ * are still pinned in the GTT.
+ */
+ struct list_head pinned_list;
+
+ /** LRU list of objects with fence regs on them. */
+ struct list_head fence_list;
+
+ /**
+ * List of objects currently pending being freed.
+ *
+ * These objects are no longer in use, but due to a signal
+ * we were prevented from freeing them at the appointed time.
+ */
+ struct list_head deferred_free_list;
+
+ /**
+ * We leave the user IRQ off as much as possible,
+ * but this means that requests will finish and never
+ * be retired once the system goes idle. Set a timer to
+ * fire periodically while the ring is running. When it
+ * fires, go retire requests.
+ */
+ struct timeout_task retire_task;
+
+ /**
+ * Are we in a non-interruptible section of code like
+ * modesetting?
+ */
+ bool interruptible;
+
+ uint32_t next_gem_seqno;
+
+ /**
+ * Waiting sequence number, if any
+ */
+ uint32_t waiting_gem_seqno;
+
+ /**
+ * Last seq seen at irq time
+ */
+ uint32_t irq_gem_seqno;
+
+ /**
+ * Flag if the X Server, and thus DRM, is not currently in
+ * control of the device.
+ *
+ * This is set between LeaveVT and EnterVT. It needs to be
+ * replaced with a semaphore. It also needs to be
+ * transitioned away from for kernel modesetting.
+ */
+ int suspended;
+
+ /**
+ * Flag if the hardware appears to be wedged.
+ *
+ * This is set when attempts to idle the device timeout.
+ * It prevents command submission from occuring and makes
+ * every pending request fail
+ */
+ int wedged;
+
+ /** Bit 6 swizzling required for X tiling */
+ uint32_t bit_6_swizzle_x;
+ /** Bit 6 swizzling required for Y tiling */
+ uint32_t bit_6_swizzle_y;
+
+ /* storage for physical objects */
+ struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT];
+
+ /* accounting, useful for userland debugging */
+ size_t gtt_total;
+ size_t mappable_gtt_total;
+ size_t object_memory;
+ u32 object_count;
+
+ struct intel_gtt gtt;
+ eventhandler_tag i915_lowmem;
+ } mm;
+
+ const struct intel_device_info *info;
+
+ struct sdvo_device_mapping sdvo_mappings[2];
+ /* indicate whether the LVDS_BORDER should be enabled or not */
+ unsigned int lvds_border_bits;
+ /* Panel fitter placement and size for Ironlake+ */
+ u32 pch_pf_pos, pch_pf_size;
+
+ struct drm_crtc *plane_to_crtc_mapping[3];
+ struct drm_crtc *pipe_to_crtc_mapping[3];
+ /* wait_queue_head_t pending_flip_queue; XXXKIB */
+ bool flip_pending_is_done;
+
+ /* Reclocking support */
+ bool render_reclock_avail;
+ bool lvds_downclock_avail;
+ /* indicates the reduced downclock for LVDS*/
+ int lvds_downclock;
+ struct task idle_task;
+ struct callout idle_callout;
+ bool busy;
+ u16 orig_clock;
+ int child_dev_num;
+ struct child_device_config *child_dev;
+ struct drm_connector *int_lvds_connector;
+ struct drm_connector *int_edp_connector;
+
+ device_t bridge_dev;
+ bool mchbar_need_disable;
+ int mch_res_rid;
+ struct resource *mch_res;
+
+ struct mtx rps_lock;
+ u32 pm_iir;
+ struct task rps_task;
+
+ u8 cur_delay;
+ u8 min_delay;
+ u8 max_delay;
+ u8 fmax;
+ u8 fstart;
+
+ u64 last_count1;
+ unsigned long last_time1;
+ unsigned long chipset_power;
+ u64 last_count2;
+ struct timespec last_time2;
+ unsigned long gfx_power;
+ int c_m;
+ int r_t;
+ u8 corr;
+ struct mtx *mchdev_lock;
+
+ enum no_fbc_reason no_fbc_reason;
+
+ unsigned long cfb_size;
+ unsigned int cfb_fb;
+ int cfb_plane;
+ int cfb_y;
+ struct intel_fbc_work *fbc_work;
+
+ unsigned int fsb_freq, mem_freq, is_ddr3;
+
+ struct taskqueue *tq;
+ struct task error_task;
+ struct task hotplug_task;
+ int error_completion;
+ struct mtx error_completion_lock;
+ struct drm_i915_error_state *first_error;
+ struct mtx error_lock;
+ struct callout hangcheck_timer;
+
+ unsigned long last_gpu_reset;
+
+ struct intel_fbdev *fbdev;
+
+ struct drm_property *broadcast_rgb_property;
+ struct drm_property *force_audio_property;
+} drm_i915_private_t;
+
+enum hdmi_force_audio {
+ HDMI_AUDIO_OFF_DVI = -2, /* no aux data for HDMI-DVI converter */
+ HDMI_AUDIO_OFF, /* force turn off HDMI audio */
+ HDMI_AUDIO_AUTO, /* trust EDID */
+ HDMI_AUDIO_ON, /* force turn on HDMI audio */
+};
+
+enum i915_cache_level {
+ I915_CACHE_NONE,
+ I915_CACHE_LLC,
+ I915_CACHE_LLC_MLC, /* gen6+ */
+};
+
+enum intel_chip_family {
+ CHIP_I8XX = 0x01,
+ CHIP_I9XX = 0x02,
+ CHIP_I915 = 0x04,
+ CHIP_I965 = 0x08,
+};
+
+/** driver private structure attached to each drm_gem_object */
+struct drm_i915_gem_object {
+ struct drm_gem_object base;
+
+ /** Current space allocated to this object in the GTT, if any. */
+ struct drm_mm_node *gtt_space;
+ struct list_head gtt_list;
+ /** This object's place on the active/flushing/inactive lists */
+ struct list_head ring_list;
+ struct list_head mm_list;
+ /** This object's place on GPU write list */
+ struct list_head gpu_write_list;
+ /** This object's place in the batchbuffer or on the eviction list */
+ struct list_head exec_list;
+
+ /**
+ * This is set if the object is on the active or flushing lists
+ * (has pending rendering), and is not set if it's on inactive (ready
+ * to be unbound).
+ */
+ unsigned int active:1;
+
+ /**
+ * This is set if the object has been written to since last bound
+ * to the GTT
+ */
+ unsigned int dirty:1;
+
+ /**
+ * This is set if the object has been written to since the last
+ * GPU flush.
+ */
+ unsigned int pending_gpu_write:1;
+
+ /**
+ * Fence register bits (if any) for this object. Will be set
+ * as needed when mapped into the GTT.
+ * Protected by dev->struct_mutex.
+ */
+ signed int fence_reg:I915_MAX_NUM_FENCE_BITS;
+
+ /**
+ * Advice: are the backing pages purgeable?
+ */
+ unsigned int madv:2;
+
+ /**
+ * Current tiling mode for the object.
+ */
+ unsigned int tiling_mode:2;
+ unsigned int tiling_changed:1;
+
+ /** How many users have pinned this object in GTT space. The following
+ * users can each hold at most one reference: pwrite/pread, pin_ioctl
+ * (via user_pin_count), execbuffer (objects are not allowed multiple
+ * times for the same batchbuffer), and the framebuffer code. When
+ * switching/pageflipping, the framebuffer code has at most two buffers
+ * pinned per crtc.
+ *
+ * In the worst case this is 1 + 1 + 1 + 2*2 = 7. That would fit into 3
+ * bits with absolutely no headroom. So use 4 bits. */
+ unsigned int pin_count:4;
+#define DRM_I915_GEM_OBJECT_MAX_PIN_COUNT 0xf
+
+ /**
+ * Is the object at the current location in the gtt mappable and
+ * fenceable? Used to avoid costly recalculations.
+ */
+ unsigned int map_and_fenceable:1;
+
+ /**
+ * Whether the current gtt mapping needs to be mappable (and isn't just
+ * mappable by accident). Track pin and fault separate for a more
+ * accurate mappable working set.
+ */
+ unsigned int fault_mappable:1;
+ unsigned int pin_mappable:1;
+
+ /*
+ * Is the GPU currently using a fence to access this buffer,
+ */
+ unsigned int pending_fenced_gpu_access:1;
+ unsigned int fenced_gpu_access:1;
+
+ unsigned int cache_level:2;
+
+ unsigned int has_aliasing_ppgtt_mapping:1;
+
+ vm_page_t *pages;
+
+ /**
+ * DMAR support
+ */
+ struct sglist *sg_list;
+
+ /**
+ * Used for performing relocations during execbuffer insertion.
+ */
+ LIST_ENTRY(drm_i915_gem_object) exec_node;
+ unsigned long exec_handle;
+ struct drm_i915_gem_exec_object2 *exec_entry;
+
+ /**
+ * Current offset of the object in GTT space.
+ *
+ * This is the same as gtt_space->start
+ */
+ uint32_t gtt_offset;
+
+ /** Breadcrumb of last rendering to the buffer. */
+ uint32_t last_rendering_seqno;
+ struct intel_ring_buffer *ring;
+
+ /** Breadcrumb of last fenced GPU access to the buffer. */
+ uint32_t last_fenced_seqno;
+ struct intel_ring_buffer *last_fenced_ring;
+
+ /** Current tiling stride for the object, if it's tiled. */
+ uint32_t stride;
+
+ /** Record of address bit 17 of each page at last unbind. */
+ unsigned long *bit_17;
+
+ /**
+ * If present, while GEM_DOMAIN_CPU is in the read domain this array
+ * flags which individual pages are valid.
+ */
+ uint8_t *page_cpu_valid;
+
+ /** User space pin count and filp owning the pin */
+ uint32_t user_pin_count;
+ struct drm_file *pin_filp;
+
+ /** for phy allocated objects */
+ struct drm_i915_gem_phys_object *phys_obj;
+
+ /**
+ * Number of crtcs where this object is currently the fb, but
+ * will be page flipped away on the next vblank. When it
+ * reaches 0, dev_priv->pending_flip_queue will be woken up.
+ */
+ int pending_flip;
+};
+
+#define to_intel_bo(x) member2struct(drm_i915_gem_object, base, (x))
+
+/**
+ * Request queue structure.
+ *
+ * The request queue allows us to note sequence numbers that have been emitted
+ * and may be associated with active buffers to be retired.
+ *
+ * By keeping this list, we can avoid having to do questionable
+ * sequence-number comparisons on buffer last_rendering_seqnos, and associate
+ * an emission time with seqnos for tracking how far ahead of the GPU we are.
+ */
+struct drm_i915_gem_request {
+ /** On Which ring this request was generated */
+ struct intel_ring_buffer *ring;
+
+ /** GEM sequence number associated with this request. */
+ uint32_t seqno;
+
+ /** Postion in the ringbuffer of the end of the request */
+ u32 tail;
+
+ /** Time at which this request was emitted, in jiffies. */
+ unsigned long emitted_jiffies;
+
+ /** global list entry for this request */
+ struct list_head list;
+
+ struct drm_i915_file_private *file_priv;
+ /** file_priv list entry for this request */
+ struct list_head client_list;
+};
+
+struct drm_i915_file_private {
+ struct {
+ struct list_head request_list;
+ struct mtx lck;
+ } mm;
+};
+
+struct drm_i915_error_state {
+ u32 eir;
+ u32 pgtbl_er;
+ u32 pipestat[I915_MAX_PIPES];
+ u32 tail[I915_NUM_RINGS];
+ u32 head[I915_NUM_RINGS];
+ u32 ipeir[I915_NUM_RINGS];
+ u32 ipehr[I915_NUM_RINGS];
+ u32 instdone[I915_NUM_RINGS];
+ u32 acthd[I915_NUM_RINGS];
+ u32 semaphore_mboxes[I915_NUM_RINGS][I915_NUM_RINGS - 1];
+ /* our own tracking of ring head and tail */
+ u32 cpu_ring_head[I915_NUM_RINGS];
+ u32 cpu_ring_tail[I915_NUM_RINGS];
+ u32 error; /* gen6+ */
+ u32 instpm[I915_NUM_RINGS];
+ u32 instps[I915_NUM_RINGS];
+ u32 instdone1;
+ u32 seqno[I915_NUM_RINGS];
+ u64 bbaddr;
+ u32 fault_reg[I915_NUM_RINGS];
+ u32 done_reg;
+ u32 faddr[I915_NUM_RINGS];
+ u64 fence[I915_MAX_NUM_FENCES];
+ struct timeval time;
+ struct drm_i915_error_ring {
+ struct drm_i915_error_object {
+ int page_count;
+ u32 gtt_offset;
+ u32 *pages[0];
+ } *ringbuffer, *batchbuffer;
+ struct drm_i915_error_request {
+ long jiffies;
+ u32 seqno;
+ u32 tail;
+ } *requests;
+ int num_requests;
+ } ring[I915_NUM_RINGS];
+ struct drm_i915_error_buffer {
+ u32 size;
+ u32 name;
+ u32 seqno;
+ u32 gtt_offset;
+ u32 read_domains;
+ u32 write_domain;
+ s32 fence_reg:I915_MAX_NUM_FENCE_BITS;
+ s32 pinned:2;
+ u32 tiling:2;
+ u32 dirty:1;
+ u32 purgeable:1;
+ s32 ring:4;
+ u32 cache_level:2;
+ } *active_bo, *pinned_bo;
+ u32 active_bo_count, pinned_bo_count;
+ struct intel_overlay_error_state *overlay;
+ struct intel_display_error_state *display;
+};
+
+/**
+ * RC6 is a special power stage which allows the GPU to enter an very
+ * low-voltage mode when idle, using down to 0V while at this stage. This
+ * stage is entered automatically when the GPU is idle when RC6 support is
+ * enabled, and as soon as new workload arises GPU wakes up automatically as well.
+ *
+ * There are different RC6 modes available in Intel GPU, which differentiate
+ * among each other with the latency required to enter and leave RC6 and
+ * voltage consumed by the GPU in different states.
+ *
+ * The combination of the following flags define which states GPU is allowed
+ * to enter, while RC6 is the normal RC6 state, RC6p is the deep RC6, and
+ * RC6pp is deepest RC6. Their support by hardware varies according to the
+ * GPU, BIOS, chipset and platform. RC6 is usually the safest one and the one
+ * which brings the most power savings; deeper states save more power, but
+ * require higher latency to switch to and wake up.
+ */
+#define INTEL_RC6_ENABLE (1<<0)
+#define INTEL_RC6p_ENABLE (1<<1)
+#define INTEL_RC6pp_ENABLE (1<<2)
+
+extern int intel_iommu_enabled;
+extern struct drm_ioctl_desc i915_ioctls[];
+extern struct drm_driver_info i915_driver_info;
+extern struct cdev_pager_ops i915_gem_pager_ops;
+extern unsigned int i915_fbpercrtc;
+extern int i915_panel_ignore_lid;
+extern unsigned int i915_powersave;
+extern int i915_semaphores;
+extern unsigned int i915_lvds_downclock;
+extern int i915_panel_use_ssc;
+extern int i915_vbt_sdvo_panel_type;
+extern int i915_enable_rc6;
+extern int i915_enable_fbc;
+extern int i915_enable_ppgtt;
+extern int i915_enable_hangcheck;
+
+const struct intel_device_info *i915_get_device_id(int device);
+
+int i915_reset(struct drm_device *dev, u8 flags);
+
+/* i915_debug.c */
+int i915_sysctl_init(struct drm_device *dev, struct sysctl_ctx_list *ctx,
+ struct sysctl_oid *top);
+void i915_sysctl_cleanup(struct drm_device *dev);
+
+ /* i915_dma.c */
+extern void i915_kernel_lost_context(struct drm_device * dev);
+extern int i915_driver_load(struct drm_device *, unsigned long flags);
+extern int i915_driver_unload(struct drm_device *);
+extern int i915_driver_open(struct drm_device *dev, struct drm_file *file_priv);
+extern void i915_driver_lastclose(struct drm_device * dev);
+extern void i915_driver_preclose(struct drm_device *dev,
+ struct drm_file *file_priv);
+extern void i915_driver_postclose(struct drm_device *dev,
+ struct drm_file *file_priv);
+extern int i915_driver_device_is_agp(struct drm_device * dev);
+extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,
+ unsigned long arg);
+extern int i915_emit_box(struct drm_device *dev,
+ struct drm_clip_rect __user *boxes,
+ int i, int DR1, int DR4);
+int i915_emit_box_p(struct drm_device *dev, struct drm_clip_rect *box,
+ int DR1, int DR4);
+
+unsigned long i915_chipset_val(struct drm_i915_private *dev_priv);
+unsigned long i915_mch_val(struct drm_i915_private *dev_priv);
+void i915_update_gfx_val(struct drm_i915_private *dev_priv);
+unsigned long i915_gfx_val(struct drm_i915_private *dev_priv);
+unsigned long i915_read_mch_val(void);
+bool i915_gpu_raise(void);
+bool i915_gpu_lower(void);
+bool i915_gpu_busy(void);
+bool i915_gpu_turbo_disable(void);
+
+/* i915_irq.c */
+extern int i915_irq_emit(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+extern int i915_irq_wait(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+extern void intel_irq_init(struct drm_device *dev);
+
+extern int i915_vblank_pipe_set(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+extern int i915_vblank_pipe_get(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+extern int i915_vblank_swap(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+void intel_enable_asle(struct drm_device *dev);
+void i915_hangcheck_elapsed(void *context);
+void i915_handle_error(struct drm_device *dev, bool wedged);
+
+void i915_enable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask);
+void i915_disable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask);
+
+void i915_destroy_error_state(struct drm_device *dev);
+
+/* i915_gem.c */
+int i915_gem_create(struct drm_file *file, struct drm_device *dev, uint64_t size,
+ uint32_t *handle_p);
+int i915_gem_init_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_create_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_pread_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_execbuffer(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_execbuffer2(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_pin_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_unpin_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_busy_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_leavevt_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_set_tiling(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_get_tiling(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+int i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+void i915_gem_load(struct drm_device *dev);
+void i915_gem_unload(struct drm_device *dev);
+int i915_gem_init_object(struct drm_gem_object *obj);
+void i915_gem_free_object(struct drm_gem_object *obj);
+int i915_gem_object_pin(struct drm_i915_gem_object *obj, uint32_t alignment,
+ bool map_and_fenceable);
+void i915_gem_object_unpin(struct drm_i915_gem_object *obj);
+int i915_gem_object_unbind(struct drm_i915_gem_object *obj);
+void i915_gem_lastclose(struct drm_device *dev);
+uint32_t i915_get_gem_seqno(struct drm_device *dev);
+
+static inline void
+i915_gem_object_pin_fence(struct drm_i915_gem_object *obj)
+{
+ if (obj->fence_reg != I915_FENCE_REG_NONE) {
+ struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
+ dev_priv->fence_regs[obj->fence_reg].pin_count++;
+ }
+}
+
+static inline void
+i915_gem_object_unpin_fence(struct drm_i915_gem_object *obj)
+{
+ if (obj->fence_reg != I915_FENCE_REG_NONE) {
+ struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
+ dev_priv->fence_regs[obj->fence_reg].pin_count--;
+ }
+}
+
+void i915_gem_retire_requests(struct drm_device *dev);
+void i915_gem_retire_requests_ring(struct intel_ring_buffer *ring);
+void i915_gem_clflush_object(struct drm_i915_gem_object *obj);
+struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
+ size_t size);
+int i915_gem_do_init(struct drm_device *dev, unsigned long start,
+ unsigned long mappable_end, unsigned long end);
+uint32_t i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev,
+ uint32_t size, int tiling_mode);
+int i915_mutex_lock_interruptible(struct drm_device *dev);
+int i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj,
+ bool write);
+int i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
+ u32 alignment, struct intel_ring_buffer *pipelined);
+int i915_gem_object_finish_gpu(struct drm_i915_gem_object *obj);
+int i915_gem_flush_ring(struct intel_ring_buffer *ring,
+ uint32_t invalidate_domains, uint32_t flush_domains);
+void i915_gem_release_mmap(struct drm_i915_gem_object *obj);
+int i915_gem_object_wait_rendering(struct drm_i915_gem_object *obj);
+int i915_gem_object_put_fence(struct drm_i915_gem_object *obj);
+int i915_gem_idle(struct drm_device *dev);
+int i915_gem_init_hw(struct drm_device *dev);
+void i915_gem_init_swizzling(struct drm_device *dev);
+void i915_gem_init_ppgtt(struct drm_device *dev);
+void i915_gem_cleanup_ringbuffer(struct drm_device *dev);
+int i915_gpu_idle(struct drm_device *dev, bool do_retire);
+void i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *ring, uint32_t seqno);
+int i915_add_request(struct intel_ring_buffer *ring, struct drm_file *file,
+ struct drm_i915_gem_request *request);
+int i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *pipelined);
+void i915_gem_reset(struct drm_device *dev);
+int i915_wait_request(struct intel_ring_buffer *ring, uint32_t seqno,
+ bool do_retire);
+int i915_gem_mmap(struct drm_device *dev, uint64_t offset, int prot);
+int i915_gem_fault(struct drm_device *dev, uint64_t offset, int prot,
+ uint64_t *phys);
+void i915_gem_release(struct drm_device *dev, struct drm_file *file);
+int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
+ enum i915_cache_level cache_level);
+
+void i915_gem_free_all_phys_object(struct drm_device *dev);
+void i915_gem_detach_phys_object(struct drm_device *dev,
+ struct drm_i915_gem_object *obj);
+int i915_gem_attach_phys_object(struct drm_device *dev,
+ struct drm_i915_gem_object *obj, int id, int align);
+
+int i915_gem_dumb_create(struct drm_file *file_priv, struct drm_device *dev,
+ struct drm_mode_create_dumb *args);
+int i915_gem_mmap_gtt(struct drm_file *file_priv, struct drm_device *dev,
+ uint32_t handle, uint64_t *offset);
+int i915_gem_dumb_destroy(struct drm_file *file_priv, struct drm_device *dev,
+ uint32_t handle);
+
+/* i915_gem_tiling.c */
+void i915_gem_detect_bit_6_swizzle(struct drm_device *dev);
+void i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj);
+void i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj);
+
+/* i915_gem_evict.c */
+int i915_gem_evict_something(struct drm_device *dev, int min_size,
+ unsigned alignment, bool mappable);
+int i915_gem_evict_everything(struct drm_device *dev, bool purgeable_only);
+int i915_gem_evict_inactive(struct drm_device *dev, bool purgeable_only);
+
+/* i915_suspend.c */
+extern int i915_save_state(struct drm_device *dev);
+extern int i915_restore_state(struct drm_device *dev);
+
+/* intel_iic.c */
+extern int intel_setup_gmbus(struct drm_device *dev);
+extern void intel_teardown_gmbus(struct drm_device *dev);
+extern void intel_gmbus_set_speed(device_t idev, int speed);
+extern void intel_gmbus_force_bit(device_t idev, bool force_bit);
+extern void intel_iic_reset(struct drm_device *dev);
+
+/* intel_opregion.c */
+int intel_opregion_setup(struct drm_device *dev);
+extern int intel_opregion_init(struct drm_device *dev);
+extern void intel_opregion_fini(struct drm_device *dev);
+extern void opregion_asle_intr(struct drm_device *dev);
+extern void opregion_enable_asle(struct drm_device *dev);
+
+/* i915_gem_gtt.c */
+int i915_gem_init_aliasing_ppgtt(struct drm_device *dev);
+void i915_gem_cleanup_aliasing_ppgtt(struct drm_device *dev);
+void i915_ppgtt_bind_object(struct i915_hw_ppgtt *ppgtt,
+ struct drm_i915_gem_object *obj, enum i915_cache_level cache_level);
+void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt,
+ struct drm_i915_gem_object *obj);
+
+void i915_gem_restore_gtt_mappings(struct drm_device *dev);
+int i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj);
+void i915_gem_gtt_unbind_object(struct drm_i915_gem_object *obj);
+void i915_gem_gtt_rebind_object(struct drm_i915_gem_object *obj,
+ enum i915_cache_level cache_level);
+
+/* modesetting */
+extern void intel_modeset_init(struct drm_device *dev);
+extern void intel_modeset_gem_init(struct drm_device *dev);
+extern void intel_modeset_cleanup(struct drm_device *dev);
+extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state);
+extern bool intel_fbc_enabled(struct drm_device *dev);
+extern void intel_disable_fbc(struct drm_device *dev);
+extern bool ironlake_set_drps(struct drm_device *dev, u8 val);
+extern void ironlake_init_pch_refclk(struct drm_device *dev);
+extern void ironlake_enable_rc6(struct drm_device *dev);
+extern void gen6_set_rps(struct drm_device *dev, u8 val);
+extern void intel_detect_pch(struct drm_device *dev);
+extern int intel_trans_dp_port_sel(struct drm_crtc *crtc);
+
+extern void __gen6_gt_force_wake_get(struct drm_i915_private *dev_priv);
+extern void __gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv);
+extern void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv);
+extern void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv);
+
+extern struct intel_overlay_error_state *intel_overlay_capture_error_state(
+ struct drm_device *dev);
+extern void intel_overlay_print_error_state(struct sbuf *m,
+ struct intel_overlay_error_state *error);
+extern struct intel_display_error_state *intel_display_capture_error_state(
+ struct drm_device *dev);
+extern void intel_display_print_error_state(struct sbuf *m,
+ struct drm_device *dev, struct intel_display_error_state *error);
+
+static inline void
+trace_i915_reg_rw(boolean_t rw, int reg, uint64_t val, int sz)
+{
+
+ CTR4(KTR_DRM_REG, "[%x/%d] %c %x", reg, sz, rw ? "w" : "r", val);
+}
+
+/* On SNB platform, before reading ring registers forcewake bit
+ * must be set to prevent GT core from power down and stale values being
+ * returned.
+ */
+void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv);
+void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv);
+int __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv);
+
+/* 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))
+
+#define __i915_read(x, y) \
+ u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg);
+
+__i915_read(8, 8)
+__i915_read(16, 16)
+__i915_read(32, 32)
+__i915_read(64, 64)
+#undef __i915_read
+
+#define __i915_write(x, y) \
+ void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val);
+
+__i915_write(8, 8)
+__i915_write(16, 16)
+__i915_write(32, 32)
+__i915_write(64, 64)
+#undef __i915_write
+
+#define I915_READ8(reg) i915_read8(dev_priv, (reg))
+#define I915_WRITE8(reg, val) i915_write8(dev_priv, (reg), (val))
+
+#define I915_READ16(reg) i915_read16(dev_priv, (reg))
+#define I915_WRITE16(reg, val) i915_write16(dev_priv, (reg), (val))
+#define I915_READ16_NOTRACE(reg) DRM_READ16(dev_priv->mmio_map, (reg))
+#define I915_WRITE16_NOTRACE(reg, val) DRM_WRITE16(dev_priv->mmio_map, (reg), (val))
+
+#define I915_READ(reg) i915_read32(dev_priv, (reg))
+#define I915_WRITE(reg, val) i915_write32(dev_priv, (reg), (val))
+#define I915_READ_NOTRACE(reg) DRM_READ32(dev_priv->mmio_map, (reg))
+#define I915_WRITE_NOTRACE(reg, val) DRM_WRITE32(dev_priv->mmio_map, (reg), (val))
+
+#define I915_WRITE64(reg, val) i915_write64(dev_priv, (reg), (val))
+#define I915_READ64(reg) i915_read64(dev_priv, (reg))
+
+#define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg)
+#define POSTING_READ16(reg) (void)I915_READ16_NOTRACE(reg)
+
+#define I915_VERBOSE 0
+
+#define LP_RING(d) (&((struct drm_i915_private *)(d))->rings[RCS])
+
+#define BEGIN_LP_RING(n) \
+ intel_ring_begin(LP_RING(dev_priv), (n))
+
+#define OUT_RING(x) \
+ intel_ring_emit(LP_RING(dev_priv), x)
+
+#define ADVANCE_LP_RING() \
+ intel_ring_advance(LP_RING(dev_priv))
+
+#define RING_LOCK_TEST_WITH_RETURN(dev, file) do { \
+ if (LP_RING(dev->dev_private)->obj == NULL) \
+ LOCK_TEST_WITH_RETURN(dev, file); \
+} while (0)
+
+/**
+ * Reads a dword out of the status page, which is written to from the command
+ * queue by automatic updates, MI_REPORT_HEAD, MI_STORE_DATA_INDEX, or
+ * MI_STORE_DATA_IMM.
+ *
+ * The following dwords have a reserved meaning:
+ * 0x00: ISR copy, updated when an ISR bit not set in the HWSTAM changes.
+ * 0x04: ring 0 head pointer
+ * 0x05: ring 1 head pointer (915-class)
+ * 0x06: ring 2 head pointer (915-class)
+ * 0x10-0x1b: Context status DWords (GM45)
+ * 0x1f: Last written status offset. (GM45)
+ *
+ * The area from dword 0x20 to 0x3ff is available for driver usage.
+ */
+#define READ_HWSP(dev_priv, reg) (((volatile u32*)(dev_priv->hw_status_page))[reg])
+#define READ_BREADCRUMB(dev_priv) READ_HWSP(dev_priv, I915_BREADCRUMB_INDEX)
+#define I915_GEM_HWS_INDEX 0x20
+#define I915_BREADCRUMB_INDEX 0x21
+
+#define INTEL_INFO(dev) (((struct drm_i915_private *) (dev)->dev_private)->info)
+
+#define IS_I830(dev) ((dev)->pci_device == 0x3577)
+#define IS_845G(dev) ((dev)->pci_device == 0x2562)
+#define IS_I85X(dev) (INTEL_INFO(dev)->is_i85x)
+#define IS_I865G(dev) ((dev)->pci_device == 0x2572)
+#define IS_I915G(dev) (INTEL_INFO(dev)->is_i915g)
+#define IS_I915GM(dev) ((dev)->pci_device == 0x2592)
+#define IS_I945G(dev) ((dev)->pci_device == 0x2772)
+#define IS_I945GM(dev) (INTEL_INFO(dev)->is_i945gm)
+#define IS_BROADWATER(dev) (INTEL_INFO(dev)->is_broadwater)
+#define IS_CRESTLINE(dev) (INTEL_INFO(dev)->is_crestline)
+#define IS_GM45(dev) ((dev)->pci_device == 0x2A42)
+#define IS_G4X(dev) (INTEL_INFO(dev)->is_g4x)
+#define IS_PINEVIEW_G(dev) ((dev)->pci_device == 0xa001)
+#define IS_PINEVIEW_M(dev) ((dev)->pci_device == 0xa011)
+#define IS_PINEVIEW(dev) (INTEL_INFO(dev)->is_pineview)
+#define IS_G33(dev) (INTEL_INFO(dev)->is_g33)
+#define IS_IRONLAKE_D(dev) ((dev)->pci_device == 0x0042)
+#define IS_IRONLAKE_M(dev) ((dev)->pci_device == 0x0046)
+#define IS_IVYBRIDGE(dev) (INTEL_INFO(dev)->is_ivybridge)
+#define IS_MOBILE(dev) (INTEL_INFO(dev)->is_mobile)
+
+/* XXXKIB LEGACY */
+#define IS_I965G(dev) ((dev)->pci_device == 0x2972 || \
+ (dev)->pci_device == 0x2982 || \
+ (dev)->pci_device == 0x2992 || \
+ (dev)->pci_device == 0x29A2 || \
+ (dev)->pci_device == 0x2A02 || \
+ (dev)->pci_device == 0x2A12 || \
+ (dev)->pci_device == 0x2A42 || \
+ (dev)->pci_device == 0x2E02 || \
+ (dev)->pci_device == 0x2E12 || \
+ (dev)->pci_device == 0x2E22 || \
+ (dev)->pci_device == 0x2E32)
+
+#define IS_I965GM(dev) ((dev)->pci_device == 0x2A02)
+
+#define IS_IGDG(dev) ((dev)->pci_device == 0xa001)
+#define IS_IGDGM(dev) ((dev)->pci_device == 0xa011)
+#define IS_IGD(dev) (IS_IGDG(dev) || IS_IGDGM(dev))
+
+#define IS_I9XX(dev) (IS_I915G(dev) || IS_I915GM(dev) || IS_I945G(dev) || \
+ IS_I945GM(dev) || IS_I965G(dev) || IS_G33(dev))
+/* XXXKIB LEGACY END */
+
+#define IS_GEN2(dev) (INTEL_INFO(dev)->gen == 2)
+#define IS_GEN3(dev) (INTEL_INFO(dev)->gen == 3)
+#define IS_GEN4(dev) (INTEL_INFO(dev)->gen == 4)
+#define IS_GEN5(dev) (INTEL_INFO(dev)->gen == 5)
+#define IS_GEN6(dev) (INTEL_INFO(dev)->gen == 6)
+#define IS_GEN7(dev) (INTEL_INFO(dev)->gen == 7)
+
+#define HAS_BSD(dev) (INTEL_INFO(dev)->has_bsd_ring)
+#define HAS_BLT(dev) (INTEL_INFO(dev)->has_blt_ring)
+#define HAS_LLC(dev) (INTEL_INFO(dev)->has_llc)
+#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws)
+
+#define HAS_ALIASING_PPGTT(dev) (INTEL_INFO(dev)->gen >=6)
+
+#define HAS_OVERLAY(dev) (INTEL_INFO(dev)->has_overlay)
+#define OVERLAY_NEEDS_PHYSICAL(dev) (INTEL_INFO(dev)->overlay_needs_physical)
+
+/* With the 945 and later, Y tiling got adjusted so that it was 32 128-byte
+ * rows, which changed the alignment requirements and fence programming.
+ */
+#define HAS_128_BYTE_Y_TILING(dev) (!IS_GEN2(dev) && !(IS_I915G(dev) || \
+ IS_I915GM(dev)))
+#define SUPPORTS_DIGITAL_OUTPUTS(dev) (!IS_GEN2(dev) && !IS_PINEVIEW(dev))
+#define SUPPORTS_INTEGRATED_HDMI(dev) (IS_G4X(dev) || IS_GEN5(dev))
+#define SUPPORTS_INTEGRATED_DP(dev) (IS_G4X(dev) || IS_GEN5(dev))
+#define SUPPORTS_EDP(dev) (IS_IRONLAKE_M(dev))
+#define SUPPORTS_TV(dev) (INTEL_INFO(dev)->supports_tv)
+#define I915_HAS_HOTPLUG(dev) (INTEL_INFO(dev)->has_hotplug)
+/* dsparb controlled by hw only */
+#define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IRONLAKE(dev))
+
+#define HAS_FW_BLC(dev) (INTEL_INFO(dev)->gen > 2)
+#define HAS_PIPE_CXSR(dev) (INTEL_INFO(dev)->has_pipe_cxsr)
+#define I915_HAS_FBC(dev) (INTEL_INFO(dev)->has_fbc)
+
+#define HAS_PCH_SPLIT(dev) (IS_GEN5(dev) || IS_GEN6(dev) || IS_IVYBRIDGE(dev))
+#define HAS_PIPE_CONTROL(dev) (INTEL_INFO(dev)->gen >= 5)
+
+#define INTEL_PCH_TYPE(dev) (((struct drm_i915_private *)(dev)->dev_private)->pch_type)
+#define HAS_PCH_CPT(dev) (INTEL_PCH_TYPE(dev) == PCH_CPT)
+#define HAS_PCH_IBX(dev) (INTEL_PCH_TYPE(dev) == PCH_IBX)
+
+#define PRIMARY_RINGBUFFER_SIZE (128*1024)
+
+static inline bool
+i915_seqno_passed(uint32_t seq1, uint32_t seq2)
+{
+
+ return ((int32_t)(seq1 - seq2) >= 0);
+}
+
+u32 i915_gem_next_request_seqno(struct intel_ring_buffer *ring);
+
+#endif
diff --git a/sys/dev/drm2/i915/i915_gem.c b/sys/dev/drm2/i915/i915_gem.c
new file mode 100644
index 000000000000..ca531fb82f5b
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_gem.c
@@ -0,0 +1,3760 @@
+/*-
+ * Copyright © 2008 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ *
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Konstantin Belousov 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 <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/i915/intel_ringbuffer.h>
+#include <sys/resourcevar.h>
+#include <sys/sched.h>
+#include <sys/sf_buf.h>
+
+static void i915_gem_object_flush_cpu_write_domain(
+ struct drm_i915_gem_object *obj);
+static uint32_t i915_gem_get_gtt_size(struct drm_device *dev, uint32_t size,
+ int tiling_mode);
+static uint32_t i915_gem_get_gtt_alignment(struct drm_device *dev,
+ uint32_t size, int tiling_mode);
+static int i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
+ unsigned alignment, bool map_and_fenceable);
+static int i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj,
+ int flags);
+static void i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj);
+static int i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj,
+ bool write);
+static void i915_gem_object_set_to_full_cpu_read_domain(
+ struct drm_i915_gem_object *obj);
+static int i915_gem_object_set_cpu_read_domain_range(
+ struct drm_i915_gem_object *obj, uint64_t offset, uint64_t size);
+static void i915_gem_object_finish_gtt(struct drm_i915_gem_object *obj);
+static void i915_gem_object_truncate(struct drm_i915_gem_object *obj);
+static int i915_gem_object_is_purgeable(struct drm_i915_gem_object *obj);
+static bool i915_gem_object_is_inactive(struct drm_i915_gem_object *obj);
+static int i915_gem_object_needs_bit17_swizzle(struct drm_i915_gem_object *obj);
+static vm_page_t i915_gem_wire_page(vm_object_t object, vm_pindex_t pindex);
+static void i915_gem_process_flushing_list(struct intel_ring_buffer *ring,
+ uint32_t flush_domains);
+static void i915_gem_clear_fence_reg(struct drm_device *dev,
+ struct drm_i915_fence_reg *reg);
+static void i915_gem_reset_fences(struct drm_device *dev);
+static void i915_gem_retire_task_handler(void *arg, int pending);
+static int i915_gem_phys_pwrite(struct drm_device *dev,
+ struct drm_i915_gem_object *obj, uint64_t data_ptr, uint64_t offset,
+ uint64_t size, struct drm_file *file_priv);
+static void i915_gem_lowmem(void *arg);
+
+MALLOC_DEFINE(DRM_I915_GEM, "i915gem", "Allocations from i915 gem");
+long i915_gem_wired_pages_cnt;
+
+static void
+i915_gem_info_add_obj(struct drm_i915_private *dev_priv, size_t size)
+{
+
+ dev_priv->mm.object_count++;
+ dev_priv->mm.object_memory += size;
+}
+
+static void
+i915_gem_info_remove_obj(struct drm_i915_private *dev_priv, size_t size)
+{
+
+ dev_priv->mm.object_count--;
+ dev_priv->mm.object_memory -= size;
+}
+
+static int
+i915_gem_wait_for_error(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+ int ret;
+
+ dev_priv = dev->dev_private;
+ if (!atomic_load_acq_int(&dev_priv->mm.wedged))
+ return (0);
+
+ mtx_lock(&dev_priv->error_completion_lock);
+ while (dev_priv->error_completion == 0) {
+ ret = -msleep(&dev_priv->error_completion,
+ &dev_priv->error_completion_lock, PCATCH, "915wco", 0);
+ if (ret != 0) {
+ mtx_unlock(&dev_priv->error_completion_lock);
+ return (ret);
+ }
+ }
+ mtx_unlock(&dev_priv->error_completion_lock);
+
+ if (atomic_read(&dev_priv->mm.wedged)) {
+ mtx_lock(&dev_priv->error_completion_lock);
+ dev_priv->error_completion++;
+ mtx_unlock(&dev_priv->error_completion_lock);
+ }
+ return (0);
+}
+
+int
+i915_mutex_lock_interruptible(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+ int ret;
+
+ dev_priv = dev->dev_private;
+ ret = i915_gem_wait_for_error(dev);
+ if (ret != 0)
+ return (ret);
+
+ /*
+ * interruptible shall it be. might indeed be if dev_lock is
+ * changed to sx
+ */
+ ret = sx_xlock_sig(&dev->dev_struct_lock);
+ if (ret != 0)
+ return (-ret);
+
+ return (0);
+}
+
+
+static void
+i915_gem_free_object_tail(struct drm_i915_gem_object *obj)
+{
+ struct drm_device *dev;
+ drm_i915_private_t *dev_priv;
+ int ret;
+
+ dev = obj->base.dev;
+ dev_priv = dev->dev_private;
+
+ ret = i915_gem_object_unbind(obj);
+ if (ret == -ERESTART) {
+ list_move(&obj->mm_list, &dev_priv->mm.deferred_free_list);
+ return;
+ }
+
+ CTR1(KTR_DRM, "object_destroy_tail %p", obj);
+ drm_gem_free_mmap_offset(&obj->base);
+ drm_gem_object_release(&obj->base);
+ i915_gem_info_remove_obj(dev_priv, obj->base.size);
+
+ free(obj->page_cpu_valid, DRM_I915_GEM);
+ free(obj->bit_17, DRM_I915_GEM);
+ free(obj, DRM_I915_GEM);
+}
+
+void
+i915_gem_free_object(struct drm_gem_object *gem_obj)
+{
+ struct drm_i915_gem_object *obj;
+ struct drm_device *dev;
+
+ obj = to_intel_bo(gem_obj);
+ dev = obj->base.dev;
+
+ while (obj->pin_count > 0)
+ i915_gem_object_unpin(obj);
+
+ if (obj->phys_obj != NULL)
+ i915_gem_detach_phys_object(dev, obj);
+
+ i915_gem_free_object_tail(obj);
+}
+
+static void
+init_ring_lists(struct intel_ring_buffer *ring)
+{
+
+ INIT_LIST_HEAD(&ring->active_list);
+ INIT_LIST_HEAD(&ring->request_list);
+ INIT_LIST_HEAD(&ring->gpu_write_list);
+}
+
+void
+i915_gem_load(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv;
+ int i;
+
+ dev_priv = dev->dev_private;
+
+ INIT_LIST_HEAD(&dev_priv->mm.active_list);
+ INIT_LIST_HEAD(&dev_priv->mm.flushing_list);
+ INIT_LIST_HEAD(&dev_priv->mm.inactive_list);
+ INIT_LIST_HEAD(&dev_priv->mm.pinned_list);
+ INIT_LIST_HEAD(&dev_priv->mm.fence_list);
+ INIT_LIST_HEAD(&dev_priv->mm.deferred_free_list);
+ INIT_LIST_HEAD(&dev_priv->mm.gtt_list);
+ for (i = 0; i < I915_NUM_RINGS; i++)
+ init_ring_lists(&dev_priv->rings[i]);
+ for (i = 0; i < I915_MAX_NUM_FENCES; i++)
+ INIT_LIST_HEAD(&dev_priv->fence_regs[i].lru_list);
+ TIMEOUT_TASK_INIT(dev_priv->tq, &dev_priv->mm.retire_task, 0,
+ i915_gem_retire_task_handler, dev_priv);
+ dev_priv->error_completion = 0;
+
+ /* On GEN3 we really need to make sure the ARB C3 LP bit is set */
+ if (IS_GEN3(dev)) {
+ u32 tmp = I915_READ(MI_ARB_STATE);
+ if (!(tmp & MI_ARB_C3_LP_WRITE_ENABLE)) {
+ /*
+ * arb state is a masked write, so set bit +
+ * bit in mask.
+ */
+ tmp = MI_ARB_C3_LP_WRITE_ENABLE |
+ (MI_ARB_C3_LP_WRITE_ENABLE << MI_ARB_MASK_SHIFT);
+ I915_WRITE(MI_ARB_STATE, tmp);
+ }
+ }
+
+ dev_priv->relative_constants_mode = I915_EXEC_CONSTANTS_REL_GENERAL;
+
+ /* Old X drivers will take 0-2 for front, back, depth buffers */
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ dev_priv->fence_reg_start = 3;
+
+ if (INTEL_INFO(dev)->gen >= 4 || IS_I945G(dev) || IS_I945GM(dev) ||
+ IS_G33(dev))
+ dev_priv->num_fence_regs = 16;
+ else
+ dev_priv->num_fence_regs = 8;
+
+ /* Initialize fence registers to zero */
+ for (i = 0; i < dev_priv->num_fence_regs; i++) {
+ i915_gem_clear_fence_reg(dev, &dev_priv->fence_regs[i]);
+ }
+ i915_gem_detect_bit_6_swizzle(dev);
+ dev_priv->mm.interruptible = true;
+
+ dev_priv->mm.i915_lowmem = EVENTHANDLER_REGISTER(vm_lowmem,
+ i915_gem_lowmem, dev, EVENTHANDLER_PRI_ANY);
+}
+
+int
+i915_gem_do_init(struct drm_device *dev, unsigned long start,
+ unsigned long mappable_end, unsigned long end)
+{
+ drm_i915_private_t *dev_priv;
+ unsigned long mappable;
+ int error;
+
+ dev_priv = dev->dev_private;
+ mappable = min(end, mappable_end) - start;
+
+ drm_mm_init(&dev_priv->mm.gtt_space, start, end - start);
+
+ dev_priv->mm.gtt_start = start;
+ dev_priv->mm.gtt_mappable_end = mappable_end;
+ dev_priv->mm.gtt_end = end;
+ dev_priv->mm.gtt_total = end - start;
+ dev_priv->mm.mappable_gtt_total = mappable;
+
+ /* Take over this portion of the GTT */
+ intel_gtt_clear_range(start / PAGE_SIZE, (end-start) / PAGE_SIZE);
+ device_printf(dev->device,
+ "taking over the fictitious range 0x%lx-0x%lx\n",
+ dev->agp->base + start, dev->agp->base + start + mappable);
+ error = -vm_phys_fictitious_reg_range(dev->agp->base + start,
+ dev->agp->base + start + mappable, VM_MEMATTR_WRITE_COMBINING);
+ return (error);
+}
+
+int
+i915_gem_init_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_init *args;
+ drm_i915_private_t *dev_priv;
+
+ dev_priv = dev->dev_private;
+ args = data;
+
+ if (args->gtt_start >= args->gtt_end ||
+ (args->gtt_end | args->gtt_start) & (PAGE_SIZE - 1))
+ return (-EINVAL);
+
+ if (mtx_initialized(&dev_priv->mm.gtt_space.unused_lock))
+ return (-EBUSY);
+ /*
+ * XXXKIB. The second-time initialization should be guarded
+ * against.
+ */
+ return (i915_gem_do_init(dev, args->gtt_start, args->gtt_end,
+ args->gtt_end));
+}
+
+int
+i915_gem_idle(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv;
+ int ret;
+
+ dev_priv = dev->dev_private;
+ if (dev_priv->mm.suspended)
+ return (0);
+
+ ret = i915_gpu_idle(dev, true);
+ if (ret != 0)
+ return (ret);
+
+ /* Under UMS, be paranoid and evict. */
+ if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
+ ret = i915_gem_evict_inactive(dev, false);
+ if (ret != 0)
+ return ret;
+ }
+
+ i915_gem_reset_fences(dev);
+
+ /* Hack! Don't let anybody do execbuf while we don't control the chip.
+ * We need to replace this with a semaphore, or something.
+ * And not confound mm.suspended!
+ */
+ dev_priv->mm.suspended = 1;
+ callout_stop(&dev_priv->hangcheck_timer);
+
+ i915_kernel_lost_context(dev);
+ i915_gem_cleanup_ringbuffer(dev);
+
+ /* Cancel the retire work handler, which should be idle now. */
+ taskqueue_cancel_timeout(dev_priv->tq, &dev_priv->mm.retire_task, NULL);
+ return (ret);
+}
+
+void
+i915_gem_init_swizzling(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv;
+
+ dev_priv = dev->dev_private;
+
+ if (INTEL_INFO(dev)->gen < 5 ||
+ dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_NONE)
+ return;
+
+ I915_WRITE(DISP_ARB_CTL, I915_READ(DISP_ARB_CTL) |
+ DISP_TILE_SURFACE_SWIZZLING);
+
+ if (IS_GEN5(dev))
+ return;
+
+ I915_WRITE(TILECTL, I915_READ(TILECTL) | TILECTL_SWZCTL);
+ if (IS_GEN6(dev))
+ I915_WRITE(ARB_MODE, ARB_MODE_ENABLE(ARB_MODE_SWIZZLE_SNB));
+ else
+ I915_WRITE(ARB_MODE, ARB_MODE_ENABLE(ARB_MODE_SWIZZLE_IVB));
+}
+
+void
+i915_gem_init_ppgtt(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv;
+ struct i915_hw_ppgtt *ppgtt;
+ uint32_t pd_offset, pd_entry;
+ vm_paddr_t pt_addr;
+ struct intel_ring_buffer *ring;
+ u_int first_pd_entry_in_global_pt, i;
+
+ dev_priv = dev->dev_private;
+ ppgtt = dev_priv->mm.aliasing_ppgtt;
+ if (ppgtt == NULL)
+ return;
+
+ first_pd_entry_in_global_pt = 512 * 1024 - I915_PPGTT_PD_ENTRIES;
+ for (i = 0; i < ppgtt->num_pd_entries; i++) {
+ pt_addr = VM_PAGE_TO_PHYS(ppgtt->pt_pages[i]);
+ pd_entry = GEN6_PDE_ADDR_ENCODE(pt_addr);
+ pd_entry |= GEN6_PDE_VALID;
+ intel_gtt_write(first_pd_entry_in_global_pt + i, pd_entry);
+ }
+ intel_gtt_read_pte(first_pd_entry_in_global_pt);
+
+ pd_offset = ppgtt->pd_offset;
+ pd_offset /= 64; /* in cachelines, */
+ pd_offset <<= 16;
+
+ if (INTEL_INFO(dev)->gen == 6) {
+ uint32_t ecochk = I915_READ(GAM_ECOCHK);
+ I915_WRITE(GAM_ECOCHK, ecochk | ECOCHK_SNB_BIT |
+ ECOCHK_PPGTT_CACHE64B);
+ I915_WRITE(GFX_MODE, GFX_MODE_ENABLE(GFX_PPGTT_ENABLE));
+ } else if (INTEL_INFO(dev)->gen >= 7) {
+ I915_WRITE(GAM_ECOCHK, ECOCHK_PPGTT_CACHE64B);
+ /* GFX_MODE is per-ring on gen7+ */
+ }
+
+ for (i = 0; i < I915_NUM_RINGS; i++) {
+ ring = &dev_priv->rings[i];
+
+ if (INTEL_INFO(dev)->gen >= 7)
+ I915_WRITE(RING_MODE_GEN7(ring),
+ GFX_MODE_ENABLE(GFX_PPGTT_ENABLE));
+
+ I915_WRITE(RING_PP_DIR_DCLV(ring), PP_DIR_DCLV_2G);
+ I915_WRITE(RING_PP_DIR_BASE(ring), pd_offset);
+ }
+}
+
+int
+i915_gem_init_hw(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv;
+ int ret;
+
+ dev_priv = dev->dev_private;
+
+ i915_gem_init_swizzling(dev);
+
+ ret = intel_init_render_ring_buffer(dev);
+ if (ret != 0)
+ return (ret);
+
+ if (HAS_BSD(dev)) {
+ ret = intel_init_bsd_ring_buffer(dev);
+ if (ret != 0)
+ goto cleanup_render_ring;
+ }
+
+ if (HAS_BLT(dev)) {
+ ret = intel_init_blt_ring_buffer(dev);
+ if (ret != 0)
+ goto cleanup_bsd_ring;
+ }
+
+ dev_priv->next_seqno = 1;
+ i915_gem_init_ppgtt(dev);
+ return (0);
+
+cleanup_bsd_ring:
+ intel_cleanup_ring_buffer(&dev_priv->rings[VCS]);
+cleanup_render_ring:
+ intel_cleanup_ring_buffer(&dev_priv->rings[RCS]);
+ return (ret);
+}
+
+int
+i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_private *dev_priv;
+ struct drm_i915_gem_get_aperture *args;
+ struct drm_i915_gem_object *obj;
+ size_t pinned;
+
+ dev_priv = dev->dev_private;
+ args = data;
+
+ if (!(dev->driver->driver_features & DRIVER_GEM))
+ return (-ENODEV);
+
+ pinned = 0;
+ DRM_LOCK(dev);
+ list_for_each_entry(obj, &dev_priv->mm.pinned_list, mm_list)
+ pinned += obj->gtt_space->size;
+ DRM_UNLOCK(dev);
+
+ args->aper_size = dev_priv->mm.gtt_total;
+ args->aper_available_size = args->aper_size - pinned;
+
+ return (0);
+}
+
+int
+i915_gem_object_pin(struct drm_i915_gem_object *obj, uint32_t alignment,
+ bool map_and_fenceable)
+{
+ struct drm_device *dev;
+ struct drm_i915_private *dev_priv;
+ int ret;
+
+ dev = obj->base.dev;
+ dev_priv = dev->dev_private;
+
+ KASSERT(obj->pin_count != DRM_I915_GEM_OBJECT_MAX_PIN_COUNT,
+ ("Max pin count"));
+
+ if (obj->gtt_space != NULL) {
+ if ((alignment && obj->gtt_offset & (alignment - 1)) ||
+ (map_and_fenceable && !obj->map_and_fenceable)) {
+ DRM_DEBUG("bo is already pinned with incorrect alignment:"
+ " offset=%x, req.alignment=%x, req.map_and_fenceable=%d,"
+ " obj->map_and_fenceable=%d\n",
+ obj->gtt_offset, alignment,
+ map_and_fenceable,
+ obj->map_and_fenceable);
+ ret = i915_gem_object_unbind(obj);
+ if (ret != 0)
+ return (ret);
+ }
+ }
+
+ if (obj->gtt_space == NULL) {
+ ret = i915_gem_object_bind_to_gtt(obj, alignment,
+ map_and_fenceable);
+ if (ret)
+ return (ret);
+ }
+
+ if (obj->pin_count++ == 0 && !obj->active)
+ list_move_tail(&obj->mm_list, &dev_priv->mm.pinned_list);
+ obj->pin_mappable |= map_and_fenceable;
+
+#if 1
+ KIB_NOTYET();
+#else
+ WARN_ON(i915_verify_lists(dev));
+#endif
+ return (0);
+}
+
+void
+i915_gem_object_unpin(struct drm_i915_gem_object *obj)
+{
+ struct drm_device *dev;
+ drm_i915_private_t *dev_priv;
+
+ dev = obj->base.dev;
+ dev_priv = dev->dev_private;
+
+#if 1
+ KIB_NOTYET();
+#else
+ WARN_ON(i915_verify_lists(dev));
+#endif
+
+ KASSERT(obj->pin_count != 0, ("zero pin count"));
+ KASSERT(obj->gtt_space != NULL, ("No gtt mapping"));
+
+ if (--obj->pin_count == 0) {
+ if (!obj->active)
+ list_move_tail(&obj->mm_list,
+ &dev_priv->mm.inactive_list);
+ obj->pin_mappable = false;
+ }
+#if 1
+ KIB_NOTYET();
+#else
+ WARN_ON(i915_verify_lists(dev));
+#endif
+}
+
+int
+i915_gem_pin_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_pin *args;
+ struct drm_i915_gem_object *obj;
+ struct drm_gem_object *gobj;
+ int ret;
+
+ args = data;
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret != 0)
+ return ret;
+
+ gobj = drm_gem_object_lookup(dev, file, args->handle);
+ if (gobj == NULL) {
+ ret = -ENOENT;
+ goto unlock;
+ }
+ obj = to_intel_bo(gobj);
+
+ if (obj->madv != I915_MADV_WILLNEED) {
+ DRM_ERROR("Attempting to pin a purgeable buffer\n");
+ ret = -EINVAL;
+ goto out;
+ }
+
+ if (obj->pin_filp != NULL && obj->pin_filp != file) {
+ DRM_ERROR("Already pinned in i915_gem_pin_ioctl(): %d\n",
+ args->handle);
+ ret = -EINVAL;
+ goto out;
+ }
+
+ obj->user_pin_count++;
+ obj->pin_filp = file;
+ if (obj->user_pin_count == 1) {
+ ret = i915_gem_object_pin(obj, args->alignment, true);
+ if (ret != 0)
+ goto out;
+ }
+
+ /* XXX - flush the CPU caches for pinned objects
+ * as the X server doesn't manage domains yet
+ */
+ i915_gem_object_flush_cpu_write_domain(obj);
+ args->offset = obj->gtt_offset;
+out:
+ drm_gem_object_unreference(&obj->base);
+unlock:
+ DRM_UNLOCK(dev);
+ return (ret);
+}
+
+int
+i915_gem_unpin_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_pin *args;
+ struct drm_i915_gem_object *obj;
+ int ret;
+
+ args = data;
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret != 0)
+ return (ret);
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
+ if (&obj->base == NULL) {
+ ret = -ENOENT;
+ goto unlock;
+ }
+
+ if (obj->pin_filp != file) {
+ DRM_ERROR("Not pinned by caller in i915_gem_pin_ioctl(): %d\n",
+ args->handle);
+ ret = -EINVAL;
+ goto out;
+ }
+ obj->user_pin_count--;
+ if (obj->user_pin_count == 0) {
+ obj->pin_filp = NULL;
+ i915_gem_object_unpin(obj);
+ }
+
+out:
+ drm_gem_object_unreference(&obj->base);
+unlock:
+ DRM_UNLOCK(dev);
+ return (ret);
+}
+
+int
+i915_gem_busy_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_busy *args;
+ struct drm_i915_gem_object *obj;
+ struct drm_i915_gem_request *request;
+ int ret;
+
+ args = data;
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret != 0)
+ return ret;
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
+ if (&obj->base == NULL) {
+ ret = -ENOENT;
+ goto unlock;
+ }
+
+ args->busy = obj->active;
+ if (args->busy) {
+ if (obj->base.write_domain & I915_GEM_GPU_DOMAINS) {
+ ret = i915_gem_flush_ring(obj->ring,
+ 0, obj->base.write_domain);
+ } else if (obj->ring->outstanding_lazy_request ==
+ obj->last_rendering_seqno) {
+ request = malloc(sizeof(*request), DRM_I915_GEM,
+ M_WAITOK | M_ZERO);
+ ret = i915_add_request(obj->ring, NULL, request);
+ if (ret != 0)
+ free(request, DRM_I915_GEM);
+ }
+
+ i915_gem_retire_requests_ring(obj->ring);
+ args->busy = obj->active;
+ }
+
+ drm_gem_object_unreference(&obj->base);
+unlock:
+ DRM_UNLOCK(dev);
+ return (ret);
+}
+
+static int
+i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
+{
+ struct drm_i915_private *dev_priv;
+ struct drm_i915_file_private *file_priv;
+ unsigned long recent_enough;
+ struct drm_i915_gem_request *request;
+ struct intel_ring_buffer *ring;
+ u32 seqno;
+ int ret;
+
+ dev_priv = dev->dev_private;
+ if (atomic_read(&dev_priv->mm.wedged))
+ return (-EIO);
+
+ file_priv = file->driver_priv;
+ recent_enough = ticks - (20 * hz / 1000);
+ ring = NULL;
+ seqno = 0;
+
+ mtx_lock(&file_priv->mm.lck);
+ list_for_each_entry(request, &file_priv->mm.request_list, client_list) {
+ if (time_after_eq(request->emitted_jiffies, recent_enough))
+ break;
+ ring = request->ring;
+ seqno = request->seqno;
+ }
+ mtx_unlock(&file_priv->mm.lck);
+ if (seqno == 0)
+ return (0);
+
+ ret = 0;
+ mtx_lock(&ring->irq_lock);
+ if (!i915_seqno_passed(ring->get_seqno(ring), seqno)) {
+ if (ring->irq_get(ring)) {
+ while (ret == 0 &&
+ !(i915_seqno_passed(ring->get_seqno(ring), seqno) ||
+ atomic_read(&dev_priv->mm.wedged)))
+ ret = -msleep(ring, &ring->irq_lock, PCATCH,
+ "915thr", 0);
+ ring->irq_put(ring);
+ if (ret == 0 && atomic_read(&dev_priv->mm.wedged))
+ ret = -EIO;
+ } else if (_intel_wait_for(dev,
+ i915_seqno_passed(ring->get_seqno(ring), seqno) ||
+ atomic_read(&dev_priv->mm.wedged), 3000, 0, "915rtr")) {
+ ret = -EBUSY;
+ }
+ }
+ mtx_unlock(&ring->irq_lock);
+
+ if (ret == 0)
+ taskqueue_enqueue_timeout(dev_priv->tq,
+ &dev_priv->mm.retire_task, 0);
+
+ return (ret);
+}
+
+int
+i915_gem_throttle_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+
+ return (i915_gem_ring_throttle(dev, file_priv));
+}
+
+int
+i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_i915_gem_madvise *args;
+ struct drm_i915_gem_object *obj;
+ int ret;
+
+ args = data;
+ switch (args->madv) {
+ case I915_MADV_DONTNEED:
+ case I915_MADV_WILLNEED:
+ break;
+ default:
+ return (-EINVAL);
+ }
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret != 0)
+ return (ret);
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file_priv, args->handle));
+ if (&obj->base == NULL) {
+ ret = -ENOENT;
+ goto unlock;
+ }
+
+ if (obj->pin_count != 0) {
+ ret = -EINVAL;
+ goto out;
+ }
+
+ if (obj->madv != I915_MADV_PURGED_INTERNAL)
+ obj->madv = args->madv;
+ if (i915_gem_object_is_purgeable(obj) && obj->gtt_space == NULL)
+ i915_gem_object_truncate(obj);
+ args->retained = obj->madv != I915_MADV_PURGED_INTERNAL;
+
+out:
+ drm_gem_object_unreference(&obj->base);
+unlock:
+ DRM_UNLOCK(dev);
+ return (ret);
+}
+
+void
+i915_gem_cleanup_ringbuffer(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv;
+ int i;
+
+ dev_priv = dev->dev_private;
+ for (i = 0; i < I915_NUM_RINGS; i++)
+ intel_cleanup_ring_buffer(&dev_priv->rings[i]);
+}
+
+int
+i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_i915_private_t *dev_priv;
+ int ret, i;
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ return (0);
+ dev_priv = dev->dev_private;
+ if (atomic_load_acq_int(&dev_priv->mm.wedged) != 0) {
+ DRM_ERROR("Reenabling wedged hardware, good luck\n");
+ atomic_store_rel_int(&dev_priv->mm.wedged, 0);
+ }
+
+ dev_priv->mm.suspended = 0;
+
+ ret = i915_gem_init_hw(dev);
+ if (ret != 0) {
+ return (ret);
+ }
+
+ KASSERT(list_empty(&dev_priv->mm.active_list), ("active list"));
+ KASSERT(list_empty(&dev_priv->mm.flushing_list), ("flushing list"));
+ KASSERT(list_empty(&dev_priv->mm.inactive_list), ("inactive list"));
+ for (i = 0; i < I915_NUM_RINGS; i++) {
+ KASSERT(list_empty(&dev_priv->rings[i].active_list),
+ ("ring %d active list", i));
+ KASSERT(list_empty(&dev_priv->rings[i].request_list),
+ ("ring %d request list", i));
+ }
+
+ DRM_UNLOCK(dev);
+ ret = drm_irq_install(dev);
+ DRM_LOCK(dev);
+ if (ret)
+ goto cleanup_ringbuffer;
+
+ return (0);
+
+cleanup_ringbuffer:
+ i915_gem_cleanup_ringbuffer(dev);
+ dev_priv->mm.suspended = 1;
+
+ return (ret);
+}
+
+int
+i915_gem_leavevt_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ return 0;
+
+ drm_irq_uninstall(dev);
+ return (i915_gem_idle(dev));
+}
+
+int
+i915_gem_create(struct drm_file *file, struct drm_device *dev, uint64_t size,
+ uint32_t *handle_p)
+{
+ struct drm_i915_gem_object *obj;
+ uint32_t handle;
+ int ret;
+
+ size = roundup(size, PAGE_SIZE);
+ if (size == 0)
+ return (-EINVAL);
+
+ obj = i915_gem_alloc_object(dev, size);
+ if (obj == NULL)
+ return (-ENOMEM);
+
+ handle = 0;
+ ret = drm_gem_handle_create(file, &obj->base, &handle);
+ if (ret != 0) {
+ drm_gem_object_release(&obj->base);
+ i915_gem_info_remove_obj(dev->dev_private, obj->base.size);
+ free(obj, DRM_I915_GEM);
+ return (-ret);
+ }
+
+ /* drop reference from allocate - handle holds it now */
+ drm_gem_object_unreference(&obj->base);
+ CTR2(KTR_DRM, "object_create %p %x", obj, size);
+ *handle_p = handle;
+ return (0);
+}
+
+int
+i915_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
+ struct drm_mode_create_dumb *args)
+{
+
+ /* have to work out size/pitch and return them */
+ args->pitch = roundup2(args->width * ((args->bpp + 7) / 8), 64);
+ args->size = args->pitch * args->height;
+ return (i915_gem_create(file, dev, args->size, &args->handle));
+}
+
+int
+i915_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev,
+ uint32_t handle)
+{
+
+ return (drm_gem_handle_delete(file, handle));
+}
+
+int
+i915_gem_create_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_create *args = data;
+
+ return (i915_gem_create(file, dev, args->size, &args->handle));
+}
+
+static int
+i915_gem_swap_io(struct drm_device *dev, struct drm_i915_gem_object *obj,
+ uint64_t data_ptr, uint64_t size, uint64_t offset, enum uio_rw rw,
+ struct drm_file *file)
+{
+ vm_object_t vm_obj;
+ vm_page_t m;
+ struct sf_buf *sf;
+ vm_offset_t mkva;
+ vm_pindex_t obj_pi;
+ int cnt, do_bit17_swizzling, length, obj_po, ret, swizzled_po;
+
+ if (obj->gtt_offset != 0 && rw == UIO_READ)
+ do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
+ else
+ do_bit17_swizzling = 0;
+
+ obj->dirty = 1;
+ vm_obj = obj->base.vm_obj;
+ ret = 0;
+
+ VM_OBJECT_LOCK(vm_obj);
+ vm_object_pip_add(vm_obj, 1);
+ while (size > 0) {
+ obj_pi = OFF_TO_IDX(offset);
+ obj_po = offset & PAGE_MASK;
+
+ m = i915_gem_wire_page(vm_obj, obj_pi);
+ VM_OBJECT_UNLOCK(vm_obj);
+
+ sched_pin();
+ sf = sf_buf_alloc(m, SFB_CPUPRIVATE);
+ mkva = sf_buf_kva(sf);
+ length = min(size, PAGE_SIZE - obj_po);
+ while (length > 0) {
+ if (do_bit17_swizzling &&
+ (VM_PAGE_TO_PHYS(m) & (1 << 17)) != 0) {
+ cnt = roundup2(obj_po + 1, 64);
+ cnt = min(cnt - obj_po, length);
+ swizzled_po = obj_po ^ 64;
+ } else {
+ cnt = length;
+ swizzled_po = obj_po;
+ }
+ if (rw == UIO_READ)
+ ret = -copyout_nofault(
+ (char *)mkva + swizzled_po,
+ (void *)(uintptr_t)data_ptr, cnt);
+ else
+ ret = -copyin_nofault(
+ (void *)(uintptr_t)data_ptr,
+ (char *)mkva + swizzled_po, cnt);
+ if (ret != 0)
+ break;
+ data_ptr += cnt;
+ size -= cnt;
+ length -= cnt;
+ offset += cnt;
+ obj_po += cnt;
+ }
+ sf_buf_free(sf);
+ sched_unpin();
+ VM_OBJECT_LOCK(vm_obj);
+ if (rw == UIO_WRITE)
+ vm_page_dirty(m);
+ vm_page_reference(m);
+ vm_page_lock(m);
+ vm_page_unwire(m, 1);
+ vm_page_unlock(m);
+ atomic_add_long(&i915_gem_wired_pages_cnt, -1);
+
+ if (ret != 0)
+ break;
+ }
+ vm_object_pip_wakeup(vm_obj);
+ VM_OBJECT_UNLOCK(vm_obj);
+
+ return (ret);
+}
+
+static int
+i915_gem_gtt_write(struct drm_device *dev, struct drm_i915_gem_object *obj,
+ uint64_t data_ptr, uint64_t size, uint64_t offset, struct drm_file *file)
+{
+ vm_offset_t mkva;
+ vm_pindex_t obj_pi;
+ int obj_po, ret;
+
+ obj_pi = OFF_TO_IDX(offset);
+ obj_po = offset & PAGE_MASK;
+
+ mkva = (vm_offset_t)pmap_mapdev_attr(dev->agp->base + obj->gtt_offset +
+ IDX_TO_OFF(obj_pi), size, PAT_WRITE_COMBINING);
+ ret = -copyin_nofault((void *)(uintptr_t)data_ptr, (char *)mkva +
+ obj_po, size);
+ pmap_unmapdev(mkva, PAGE_SIZE);
+ return (ret);
+}
+
+static int
+i915_gem_obj_io(struct drm_device *dev, uint32_t handle, uint64_t data_ptr,
+ uint64_t size, uint64_t offset, enum uio_rw rw, struct drm_file *file)
+{
+ struct drm_i915_gem_object *obj;
+ vm_page_t *ma;
+ vm_offset_t start, end;
+ int npages, ret;
+
+ if (size == 0)
+ return (0);
+ start = trunc_page(data_ptr);
+ end = round_page(data_ptr + size);
+ npages = howmany(end - start, PAGE_SIZE);
+ ma = malloc(npages * sizeof(vm_page_t), DRM_I915_GEM, M_WAITOK |
+ M_ZERO);
+ npages = vm_fault_quick_hold_pages(&curproc->p_vmspace->vm_map,
+ (vm_offset_t)data_ptr, size,
+ (rw == UIO_READ ? VM_PROT_WRITE : 0 ) | VM_PROT_READ, ma, npages);
+ if (npages == -1) {
+ ret = -EFAULT;
+ goto free_ma;
+ }
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret != 0)
+ goto unlocked;
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, handle));
+ if (&obj->base == NULL) {
+ ret = -ENOENT;
+ goto unlock;
+ }
+ if (offset > obj->base.size || size > obj->base.size - offset) {
+ ret = -EINVAL;
+ goto out;
+ }
+
+ if (rw == UIO_READ) {
+ CTR3(KTR_DRM, "object_pread %p %jx %jx", obj, offset, size);
+ ret = i915_gem_object_set_cpu_read_domain_range(obj,
+ offset, size);
+ if (ret != 0)
+ goto out;
+ ret = i915_gem_swap_io(dev, obj, data_ptr, size, offset,
+ UIO_READ, file);
+ } else {
+ if (obj->phys_obj) {
+ CTR3(KTR_DRM, "object_phys_write %p %jx %jx", obj,
+ offset, size);
+ ret = i915_gem_phys_pwrite(dev, obj, data_ptr, offset,
+ size, file);
+ } else if (obj->gtt_space &&
+ obj->base.write_domain != I915_GEM_DOMAIN_CPU) {
+ CTR3(KTR_DRM, "object_gtt_write %p %jx %jx", obj,
+ offset, size);
+ ret = i915_gem_object_pin(obj, 0, true);
+ if (ret != 0)
+ goto out;
+ ret = i915_gem_object_set_to_gtt_domain(obj, true);
+ if (ret != 0)
+ goto out_unpin;
+ ret = i915_gem_object_put_fence(obj);
+ if (ret != 0)
+ goto out_unpin;
+ ret = i915_gem_gtt_write(dev, obj, data_ptr, size,
+ offset, file);
+out_unpin:
+ i915_gem_object_unpin(obj);
+ } else {
+ CTR3(KTR_DRM, "object_pwrite %p %jx %jx", obj,
+ offset, size);
+ ret = i915_gem_object_set_to_cpu_domain(obj, true);
+ if (ret != 0)
+ goto out;
+ ret = i915_gem_swap_io(dev, obj, data_ptr, size, offset,
+ UIO_WRITE, file);
+ }
+ }
+out:
+ drm_gem_object_unreference(&obj->base);
+unlock:
+ DRM_UNLOCK(dev);
+unlocked:
+ vm_page_unhold_pages(ma, npages);
+free_ma:
+ free(ma, DRM_I915_GEM);
+ return (ret);
+}
+
+int
+i915_gem_pread_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
+{
+ struct drm_i915_gem_pread *args;
+
+ args = data;
+ return (i915_gem_obj_io(dev, args->handle, args->data_ptr, args->size,
+ args->offset, UIO_READ, file));
+}
+
+int
+i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
+{
+ struct drm_i915_gem_pwrite *args;
+
+ args = data;
+ return (i915_gem_obj_io(dev, args->handle, args->data_ptr, args->size,
+ args->offset, UIO_WRITE, file));
+}
+
+int
+i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_set_domain *args;
+ struct drm_i915_gem_object *obj;
+ uint32_t read_domains;
+ uint32_t write_domain;
+ int ret;
+
+ if ((dev->driver->driver_features & DRIVER_GEM) == 0)
+ return (-ENODEV);
+
+ args = data;
+ read_domains = args->read_domains;
+ write_domain = args->write_domain;
+
+ if ((write_domain & I915_GEM_GPU_DOMAINS) != 0 ||
+ (read_domains & I915_GEM_GPU_DOMAINS) != 0 ||
+ (write_domain != 0 && read_domains != write_domain))
+ return (-EINVAL);
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret != 0)
+ return (ret);
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
+ if (&obj->base == NULL) {
+ ret = -ENOENT;
+ goto unlock;
+ }
+
+ if ((read_domains & I915_GEM_DOMAIN_GTT) != 0) {
+ ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0);
+ if (ret == -EINVAL)
+ ret = 0;
+ } else
+ ret = i915_gem_object_set_to_cpu_domain(obj, write_domain != 0);
+
+ drm_gem_object_unreference(&obj->base);
+unlock:
+ DRM_UNLOCK(dev);
+ return (ret);
+}
+
+int
+i915_gem_sw_finish_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_sw_finish *args;
+ struct drm_i915_gem_object *obj;
+ int ret;
+
+ args = data;
+ ret = 0;
+ if ((dev->driver->driver_features & DRIVER_GEM) == 0)
+ return (ENODEV);
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret != 0)
+ return (ret);
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
+ if (&obj->base == NULL) {
+ ret = -ENOENT;
+ goto unlock;
+ }
+ if (obj->pin_count != 0)
+ i915_gem_object_flush_cpu_write_domain(obj);
+ drm_gem_object_unreference(&obj->base);
+unlock:
+ DRM_UNLOCK(dev);
+ return (ret);
+}
+
+int
+i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_mmap *args;
+ struct drm_gem_object *obj;
+ struct proc *p;
+ vm_map_t map;
+ vm_offset_t addr;
+ vm_size_t size;
+ int error, rv;
+
+ args = data;
+
+ if ((dev->driver->driver_features & DRIVER_GEM) == 0)
+ return (-ENODEV);
+
+ obj = drm_gem_object_lookup(dev, file, args->handle);
+ if (obj == NULL)
+ return (-ENOENT);
+ error = 0;
+ if (args->size == 0)
+ goto out;
+ p = curproc;
+ map = &p->p_vmspace->vm_map;
+ size = round_page(args->size);
+ PROC_LOCK(p);
+ if (map->size + size > lim_cur(p, RLIMIT_VMEM)) {
+ PROC_UNLOCK(p);
+ error = ENOMEM;
+ goto out;
+ }
+ PROC_UNLOCK(p);
+
+ addr = 0;
+ vm_object_reference(obj->vm_obj);
+ DRM_UNLOCK(dev);
+ rv = vm_map_find(map, obj->vm_obj, args->offset, &addr, args->size,
+ VMFS_ANY_SPACE, VM_PROT_READ | VM_PROT_WRITE,
+ VM_PROT_READ | VM_PROT_WRITE, MAP_SHARED);
+ if (rv != KERN_SUCCESS) {
+ vm_object_deallocate(obj->vm_obj);
+ error = -vm_mmap_to_errno(rv);
+ } else {
+ args->addr_ptr = (uint64_t)addr;
+ }
+ DRM_LOCK(dev);
+out:
+ drm_gem_object_unreference(obj);
+ return (error);
+}
+
+static int
+i915_gem_pager_ctor(void *handle, vm_ooffset_t size, vm_prot_t prot,
+ vm_ooffset_t foff, struct ucred *cred, u_short *color)
+{
+
+ *color = 0; /* XXXKIB */
+ return (0);
+}
+
+int i915_intr_pf;
+
+static int
+i915_gem_pager_fault(vm_object_t vm_obj, vm_ooffset_t offset, int prot,
+ vm_page_t *mres)
+{
+ struct drm_gem_object *gem_obj;
+ struct drm_i915_gem_object *obj;
+ struct drm_device *dev;
+ drm_i915_private_t *dev_priv;
+ vm_page_t m, oldm;
+ int cause, ret;
+ bool write;
+
+ gem_obj = vm_obj->handle;
+ obj = to_intel_bo(gem_obj);
+ dev = obj->base.dev;
+ dev_priv = dev->dev_private;
+#if 0
+ write = (prot & VM_PROT_WRITE) != 0;
+#else
+ write = true;
+#endif
+ vm_object_pip_add(vm_obj, 1);
+
+ /*
+ * Remove the placeholder page inserted by vm_fault() from the
+ * object before dropping the object lock. If
+ * i915_gem_release_mmap() is active in parallel on this gem
+ * object, then it owns the drm device sx and might find the
+ * placeholder already. Then, since the page is busy,
+ * i915_gem_release_mmap() sleeps waiting for the busy state
+ * of the page cleared. We will be not able to acquire drm
+ * device lock until i915_gem_release_mmap() is able to make a
+ * progress.
+ */
+ if (*mres != NULL) {
+ oldm = *mres;
+ vm_page_lock(oldm);
+ vm_page_remove(oldm);
+ vm_page_unlock(oldm);
+ *mres = NULL;
+ } else
+ oldm = NULL;
+retry:
+ VM_OBJECT_UNLOCK(vm_obj);
+unlocked_vmobj:
+ cause = ret = 0;
+ m = NULL;
+
+
+ if (i915_intr_pf) {
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret != 0) {
+ cause = 10;
+ goto out;
+ }
+ } else
+ DRM_LOCK(dev);
+
+ /* Now bind it into the GTT if needed */
+ if (!obj->map_and_fenceable) {
+ ret = i915_gem_object_unbind(obj);
+ if (ret != 0) {
+ cause = 20;
+ goto unlock;
+ }
+ }
+ if (!obj->gtt_space) {
+ ret = i915_gem_object_bind_to_gtt(obj, 0, true);
+ if (ret != 0) {
+ cause = 30;
+ goto unlock;
+ }
+
+ ret = i915_gem_object_set_to_gtt_domain(obj, write);
+ if (ret != 0) {
+ cause = 40;
+ goto unlock;
+ }
+ }
+
+ if (obj->tiling_mode == I915_TILING_NONE)
+ ret = i915_gem_object_put_fence(obj);
+ else
+ ret = i915_gem_object_get_fence(obj, NULL);
+ if (ret != 0) {
+ cause = 50;
+ goto unlock;
+ }
+
+ if (i915_gem_object_is_inactive(obj))
+ list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
+
+ obj->fault_mappable = true;
+ VM_OBJECT_LOCK(vm_obj);
+ m = vm_phys_fictitious_to_vm_page(dev->agp->base + obj->gtt_offset +
+ offset);
+ if (m == NULL) {
+ cause = 60;
+ ret = -EFAULT;
+ goto unlock;
+ }
+ KASSERT((m->flags & PG_FICTITIOUS) != 0,
+ ("not fictitious %p", m));
+ KASSERT(m->wire_count == 1, ("wire_count not 1 %p", m));
+
+ if ((m->flags & VPO_BUSY) != 0) {
+ DRM_UNLOCK(dev);
+ vm_page_sleep(m, "915pbs");
+ goto retry;
+ }
+ m->valid = VM_PAGE_BITS_ALL;
+ *mres = m;
+ vm_page_lock(m);
+ vm_page_insert(m, vm_obj, OFF_TO_IDX(offset));
+ vm_page_unlock(m);
+ vm_page_busy(m);
+
+ CTR4(KTR_DRM, "fault %p %jx %x phys %x", gem_obj, offset, prot,
+ m->phys_addr);
+ DRM_UNLOCK(dev);
+ if (oldm != NULL) {
+ vm_page_lock(oldm);
+ vm_page_free(oldm);
+ vm_page_unlock(oldm);
+ }
+ vm_object_pip_wakeup(vm_obj);
+ return (VM_PAGER_OK);
+
+unlock:
+ DRM_UNLOCK(dev);
+out:
+ KASSERT(ret != 0, ("i915_gem_pager_fault: wrong return"));
+ CTR5(KTR_DRM, "fault_fail %p %jx %x err %d %d", gem_obj, offset, prot,
+ -ret, cause);
+ if (ret == -EAGAIN || ret == -EIO || ret == -EINTR) {
+ kern_yield(PRI_USER);
+ goto unlocked_vmobj;
+ }
+ VM_OBJECT_LOCK(vm_obj);
+ vm_object_pip_wakeup(vm_obj);
+ return (VM_PAGER_ERROR);
+}
+
+static void
+i915_gem_pager_dtor(void *handle)
+{
+ struct drm_gem_object *obj;
+ struct drm_device *dev;
+
+ obj = handle;
+ dev = obj->dev;
+
+ DRM_LOCK(dev);
+ drm_gem_free_mmap_offset(obj);
+ i915_gem_release_mmap(to_intel_bo(obj));
+ drm_gem_object_unreference(obj);
+ DRM_UNLOCK(dev);
+}
+
+struct cdev_pager_ops i915_gem_pager_ops = {
+ .cdev_pg_fault = i915_gem_pager_fault,
+ .cdev_pg_ctor = i915_gem_pager_ctor,
+ .cdev_pg_dtor = i915_gem_pager_dtor
+};
+
+int
+i915_gem_mmap_gtt(struct drm_file *file, struct drm_device *dev,
+ uint32_t handle, uint64_t *offset)
+{
+ struct drm_i915_private *dev_priv;
+ struct drm_i915_gem_object *obj;
+ int ret;
+
+ if (!(dev->driver->driver_features & DRIVER_GEM))
+ return (-ENODEV);
+
+ dev_priv = dev->dev_private;
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret != 0)
+ return (ret);
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, handle));
+ if (&obj->base == NULL) {
+ ret = -ENOENT;
+ goto unlock;
+ }
+
+ if (obj->base.size > dev_priv->mm.gtt_mappable_end) {
+ ret = -E2BIG;
+ goto out;
+ }
+
+ if (obj->madv != I915_MADV_WILLNEED) {
+ DRM_ERROR("Attempting to mmap a purgeable buffer\n");
+ ret = -EINVAL;
+ goto out;
+ }
+
+ ret = drm_gem_create_mmap_offset(&obj->base);
+ if (ret != 0)
+ goto out;
+
+ *offset = DRM_GEM_MAPPING_OFF(obj->base.map_list.key) |
+ DRM_GEM_MAPPING_KEY;
+out:
+ drm_gem_object_unreference(&obj->base);
+unlock:
+ DRM_UNLOCK(dev);
+ return (ret);
+}
+
+int
+i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_private *dev_priv;
+ struct drm_i915_gem_mmap_gtt *args;
+
+ dev_priv = dev->dev_private;
+ args = data;
+
+ return (i915_gem_mmap_gtt(file, dev, args->handle, &args->offset));
+}
+
+struct drm_i915_gem_object *
+i915_gem_alloc_object(struct drm_device *dev, size_t size)
+{
+ struct drm_i915_private *dev_priv;
+ struct drm_i915_gem_object *obj;
+
+ dev_priv = dev->dev_private;
+
+ obj = malloc(sizeof(*obj), DRM_I915_GEM, M_WAITOK | M_ZERO);
+
+ if (drm_gem_object_init(dev, &obj->base, size) != 0) {
+ free(obj, DRM_I915_GEM);
+ return (NULL);
+ }
+
+ obj->base.write_domain = I915_GEM_DOMAIN_CPU;
+ obj->base.read_domains = I915_GEM_DOMAIN_CPU;
+
+ if (HAS_LLC(dev))
+ obj->cache_level = I915_CACHE_LLC;
+ else
+ obj->cache_level = I915_CACHE_NONE;
+ obj->base.driver_private = NULL;
+ obj->fence_reg = I915_FENCE_REG_NONE;
+ INIT_LIST_HEAD(&obj->mm_list);
+ INIT_LIST_HEAD(&obj->gtt_list);
+ INIT_LIST_HEAD(&obj->ring_list);
+ INIT_LIST_HEAD(&obj->exec_list);
+ INIT_LIST_HEAD(&obj->gpu_write_list);
+ obj->madv = I915_MADV_WILLNEED;
+ /* Avoid an unnecessary call to unbind on the first bind. */
+ obj->map_and_fenceable = true;
+
+ i915_gem_info_add_obj(dev_priv, size);
+
+ return (obj);
+}
+
+void
+i915_gem_clflush_object(struct drm_i915_gem_object *obj)
+{
+
+ /* If we don't have a page list set up, then we're not pinned
+ * to GPU, and we can ignore the cache flush because it'll happen
+ * again at bind time.
+ */
+ if (obj->pages == NULL)
+ return;
+
+ /* If the GPU is snooping the contents of the CPU cache,
+ * we do not need to manually clear the CPU cache lines. However,
+ * the caches are only snooped when the render cache is
+ * flushed/invalidated. As we always have to emit invalidations
+ * and flushes when moving into and out of the RENDER domain, correct
+ * snooping behaviour occurs naturally as the result of our domain
+ * tracking.
+ */
+ if (obj->cache_level != I915_CACHE_NONE)
+ return;
+
+ CTR1(KTR_DRM, "object_clflush %p", obj);
+ drm_clflush_pages(obj->pages, obj->base.size / PAGE_SIZE);
+}
+
+static void
+i915_gem_object_flush_cpu_write_domain(struct drm_i915_gem_object *obj)
+{
+ uint32_t old_write_domain;
+
+ if (obj->base.write_domain != I915_GEM_DOMAIN_CPU)
+ return;
+
+ i915_gem_clflush_object(obj);
+ intel_gtt_chipset_flush();
+ old_write_domain = obj->base.write_domain;
+ obj->base.write_domain = 0;
+
+ CTR3(KTR_DRM, "object_change_domain flush_cpu_write %p %x %x", obj,
+ obj->base.read_domains, old_write_domain);
+}
+
+static int
+i915_gem_object_flush_gpu_write_domain(struct drm_i915_gem_object *obj)
+{
+
+ if ((obj->base.write_domain & I915_GEM_GPU_DOMAINS) == 0)
+ return (0);
+ return (i915_gem_flush_ring(obj->ring, 0, obj->base.write_domain));
+}
+
+static void
+i915_gem_object_flush_gtt_write_domain(struct drm_i915_gem_object *obj)
+{
+ uint32_t old_write_domain;
+
+ if (obj->base.write_domain != I915_GEM_DOMAIN_GTT)
+ return;
+
+ wmb();
+
+ old_write_domain = obj->base.write_domain;
+ obj->base.write_domain = 0;
+
+ CTR3(KTR_DRM, "object_change_domain flush gtt_write %p %x %x", obj,
+ obj->base.read_domains, old_write_domain);
+}
+
+int
+i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
+{
+ uint32_t old_write_domain, old_read_domains;
+ int ret;
+
+ if (obj->gtt_space == NULL)
+ return (-EINVAL);
+
+ if (obj->base.write_domain == I915_GEM_DOMAIN_GTT)
+ return 0;
+
+ ret = i915_gem_object_flush_gpu_write_domain(obj);
+ if (ret != 0)
+ return (ret);
+
+ if (obj->pending_gpu_write || write) {
+ ret = i915_gem_object_wait_rendering(obj);
+ if (ret != 0)
+ return (ret);
+ }
+
+ i915_gem_object_flush_cpu_write_domain(obj);
+
+ old_write_domain = obj->base.write_domain;
+ old_read_domains = obj->base.read_domains;
+
+ KASSERT((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) == 0,
+ ("In GTT write domain"));
+ obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
+ if (write) {
+ obj->base.read_domains = I915_GEM_DOMAIN_GTT;
+ obj->base.write_domain = I915_GEM_DOMAIN_GTT;
+ obj->dirty = 1;
+ }
+
+ CTR3(KTR_DRM, "object_change_domain set_to_gtt %p %x %x", obj,
+ old_read_domains, old_write_domain);
+ return (0);
+}
+
+int
+i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
+ enum i915_cache_level cache_level)
+{
+ struct drm_device *dev;
+ drm_i915_private_t *dev_priv;
+ int ret;
+
+ if (obj->cache_level == cache_level)
+ return 0;
+
+ if (obj->pin_count) {
+ DRM_DEBUG("can not change the cache level of pinned objects\n");
+ return (-EBUSY);
+ }
+
+ dev = obj->base.dev;
+ dev_priv = dev->dev_private;
+ if (obj->gtt_space) {
+ ret = i915_gem_object_finish_gpu(obj);
+ if (ret != 0)
+ return (ret);
+
+ i915_gem_object_finish_gtt(obj);
+
+ /* Before SandyBridge, you could not use tiling or fence
+ * registers with snooped memory, so relinquish any fences
+ * currently pointing to our region in the aperture.
+ */
+ if (INTEL_INFO(obj->base.dev)->gen < 6) {
+ ret = i915_gem_object_put_fence(obj);
+ if (ret != 0)
+ return (ret);
+ }
+
+ i915_gem_gtt_rebind_object(obj, cache_level);
+ if (obj->has_aliasing_ppgtt_mapping)
+ i915_ppgtt_bind_object(dev_priv->mm.aliasing_ppgtt,
+ obj, cache_level);
+ }
+
+ if (cache_level == I915_CACHE_NONE) {
+ u32 old_read_domains, old_write_domain;
+
+ /* If we're coming from LLC cached, then we haven't
+ * actually been tracking whether the data is in the
+ * CPU cache or not, since we only allow one bit set
+ * in obj->write_domain and have been skipping the clflushes.
+ * Just set it to the CPU cache for now.
+ */
+ KASSERT((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) == 0,
+ ("obj %p in CPU write domain", obj));
+ KASSERT((obj->base.read_domains & ~I915_GEM_DOMAIN_CPU) == 0,
+ ("obj %p in CPU read domain", obj));
+
+ old_read_domains = obj->base.read_domains;
+ old_write_domain = obj->base.write_domain;
+
+ obj->base.read_domains = I915_GEM_DOMAIN_CPU;
+ obj->base.write_domain = I915_GEM_DOMAIN_CPU;
+
+ CTR3(KTR_DRM, "object_change_domain set_cache_level %p %x %x",
+ obj, old_read_domains, old_write_domain);
+ }
+
+ obj->cache_level = cache_level;
+ return (0);
+}
+
+int
+i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
+ u32 alignment, struct intel_ring_buffer *pipelined)
+{
+ u32 old_read_domains, old_write_domain;
+ int ret;
+
+ ret = i915_gem_object_flush_gpu_write_domain(obj);
+ if (ret != 0)
+ return (ret);
+
+ if (pipelined != obj->ring) {
+ ret = i915_gem_object_wait_rendering(obj);
+ if (ret == -ERESTART || ret == -EINTR)
+ return (ret);
+ }
+
+ ret = i915_gem_object_set_cache_level(obj, I915_CACHE_NONE);
+ if (ret != 0)
+ return (ret);
+
+ ret = i915_gem_object_pin(obj, alignment, true);
+ if (ret != 0)
+ return (ret);
+
+ i915_gem_object_flush_cpu_write_domain(obj);
+
+ old_write_domain = obj->base.write_domain;
+ old_read_domains = obj->base.read_domains;
+
+ KASSERT((obj->base.write_domain & ~I915_GEM_DOMAIN_GTT) == 0,
+ ("obj %p in GTT write domain", obj));
+ obj->base.read_domains |= I915_GEM_DOMAIN_GTT;
+
+ CTR3(KTR_DRM, "object_change_domain pin_to_display_plan %p %x %x",
+ obj, old_read_domains, obj->base.write_domain);
+ return (0);
+}
+
+int
+i915_gem_object_finish_gpu(struct drm_i915_gem_object *obj)
+{
+ int ret;
+
+ if ((obj->base.read_domains & I915_GEM_GPU_DOMAINS) == 0)
+ return (0);
+
+ if (obj->base.write_domain & I915_GEM_GPU_DOMAINS) {
+ ret = i915_gem_flush_ring(obj->ring, 0, obj->base.write_domain);
+ if (ret != 0)
+ return (ret);
+ }
+
+ ret = i915_gem_object_wait_rendering(obj);
+ if (ret != 0)
+ return (ret);
+
+ obj->base.read_domains &= ~I915_GEM_GPU_DOMAINS;
+
+ return (0);
+}
+
+static int
+i915_gem_object_set_to_cpu_domain(struct drm_i915_gem_object *obj, bool write)
+{
+ uint32_t old_write_domain, old_read_domains;
+ int ret;
+
+ if (obj->base.write_domain == I915_GEM_DOMAIN_CPU)
+ return 0;
+
+ ret = i915_gem_object_flush_gpu_write_domain(obj);
+ if (ret != 0)
+ return (ret);
+
+ ret = i915_gem_object_wait_rendering(obj);
+ if (ret != 0)
+ return (ret);
+
+ i915_gem_object_flush_gtt_write_domain(obj);
+ i915_gem_object_set_to_full_cpu_read_domain(obj);
+
+ old_write_domain = obj->base.write_domain;
+ old_read_domains = obj->base.read_domains;
+
+ if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0) {
+ i915_gem_clflush_object(obj);
+ obj->base.read_domains |= I915_GEM_DOMAIN_CPU;
+ }
+
+ KASSERT((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) == 0,
+ ("In cpu write domain"));
+
+ if (write) {
+ obj->base.read_domains = I915_GEM_DOMAIN_CPU;
+ obj->base.write_domain = I915_GEM_DOMAIN_CPU;
+ }
+
+ CTR3(KTR_DRM, "object_change_domain set_to_cpu %p %x %x", obj,
+ old_read_domains, old_write_domain);
+ return (0);
+}
+
+static void
+i915_gem_object_set_to_full_cpu_read_domain(struct drm_i915_gem_object *obj)
+{
+ int i;
+
+ if (obj->page_cpu_valid == NULL)
+ return;
+
+ if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) != 0) {
+ for (i = 0; i <= (obj->base.size - 1) / PAGE_SIZE; i++) {
+ if (obj->page_cpu_valid[i] != 0)
+ continue;
+ drm_clflush_pages(obj->pages + i, 1);
+ }
+ }
+
+ free(obj->page_cpu_valid, DRM_I915_GEM);
+ obj->page_cpu_valid = NULL;
+}
+
+static int
+i915_gem_object_set_cpu_read_domain_range(struct drm_i915_gem_object *obj,
+ uint64_t offset, uint64_t size)
+{
+ uint32_t old_read_domains;
+ int i, ret;
+
+ if (offset == 0 && size == obj->base.size)
+ return (i915_gem_object_set_to_cpu_domain(obj, 0));
+
+ ret = i915_gem_object_flush_gpu_write_domain(obj);
+ if (ret != 0)
+ return (ret);
+ ret = i915_gem_object_wait_rendering(obj);
+ if (ret != 0)
+ return (ret);
+
+ i915_gem_object_flush_gtt_write_domain(obj);
+
+ if (obj->page_cpu_valid == NULL &&
+ (obj->base.read_domains & I915_GEM_DOMAIN_CPU) != 0)
+ return (0);
+
+ if (obj->page_cpu_valid == NULL) {
+ obj->page_cpu_valid = malloc(obj->base.size / PAGE_SIZE,
+ DRM_I915_GEM, M_WAITOK | M_ZERO);
+ } else if ((obj->base.read_domains & I915_GEM_DOMAIN_CPU) == 0)
+ memset(obj->page_cpu_valid, 0, obj->base.size / PAGE_SIZE);
+
+ for (i = offset / PAGE_SIZE; i <= (offset + size - 1) / PAGE_SIZE;
+ i++) {
+ if (obj->page_cpu_valid[i])
+ continue;
+ drm_clflush_pages(obj->pages + i, 1);
+ obj->page_cpu_valid[i] = 1;
+ }
+
+ KASSERT((obj->base.write_domain & ~I915_GEM_DOMAIN_CPU) == 0,
+ ("In gpu write domain"));
+
+ old_read_domains = obj->base.read_domains;
+ obj->base.read_domains |= I915_GEM_DOMAIN_CPU;
+
+ CTR3(KTR_DRM, "object_change_domain set_cpu_read %p %x %x", obj,
+ old_read_domains, obj->base.write_domain);
+ return (0);
+}
+
+static uint32_t
+i915_gem_get_gtt_size(struct drm_device *dev, uint32_t size, int tiling_mode)
+{
+ uint32_t gtt_size;
+
+ if (INTEL_INFO(dev)->gen >= 4 ||
+ tiling_mode == I915_TILING_NONE)
+ return (size);
+
+ /* Previous chips need a power-of-two fence region when tiling */
+ if (INTEL_INFO(dev)->gen == 3)
+ gtt_size = 1024*1024;
+ else
+ gtt_size = 512*1024;
+
+ while (gtt_size < size)
+ gtt_size <<= 1;
+
+ return (gtt_size);
+}
+
+/**
+ * i915_gem_get_gtt_alignment - return required GTT alignment for an object
+ * @obj: object to check
+ *
+ * Return the required GTT alignment for an object, taking into account
+ * potential fence register mapping.
+ */
+static uint32_t
+i915_gem_get_gtt_alignment(struct drm_device *dev, uint32_t size,
+ int tiling_mode)
+{
+
+ /*
+ * Minimum alignment is 4k (GTT page size), but might be greater
+ * if a fence register is needed for the object.
+ */
+ if (INTEL_INFO(dev)->gen >= 4 ||
+ tiling_mode == I915_TILING_NONE)
+ return (4096);
+
+ /*
+ * Previous chips need to be aligned to the size of the smallest
+ * fence register that can contain the object.
+ */
+ return (i915_gem_get_gtt_size(dev, size, tiling_mode));
+}
+
+uint32_t
+i915_gem_get_unfenced_gtt_alignment(struct drm_device *dev, uint32_t size,
+ int tiling_mode)
+{
+
+ if (tiling_mode == I915_TILING_NONE)
+ return (4096);
+
+ /*
+ * Minimum alignment is 4k (GTT page size) for sane hw.
+ */
+ if (INTEL_INFO(dev)->gen >= 4 || IS_G33(dev))
+ return (4096);
+
+ /*
+ * Previous hardware however needs to be aligned to a power-of-two
+ * tile height. The simplest method for determining this is to reuse
+ * the power-of-tile object size.
+ */
+ return (i915_gem_get_gtt_size(dev, size, tiling_mode));
+}
+
+static int
+i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
+ unsigned alignment, bool map_and_fenceable)
+{
+ struct drm_device *dev;
+ struct drm_i915_private *dev_priv;
+ struct drm_mm_node *free_space;
+ uint32_t size, fence_size, fence_alignment, unfenced_alignment;
+ bool mappable, fenceable;
+ int ret;
+
+ dev = obj->base.dev;
+ dev_priv = dev->dev_private;
+
+ if (obj->madv != I915_MADV_WILLNEED) {
+ DRM_ERROR("Attempting to bind a purgeable object\n");
+ return (-EINVAL);
+ }
+
+ fence_size = i915_gem_get_gtt_size(dev, obj->base.size,
+ obj->tiling_mode);
+ fence_alignment = i915_gem_get_gtt_alignment(dev, obj->base.size,
+ obj->tiling_mode);
+ unfenced_alignment = i915_gem_get_unfenced_gtt_alignment(dev,
+ obj->base.size, obj->tiling_mode);
+ if (alignment == 0)
+ alignment = map_and_fenceable ? fence_alignment :
+ unfenced_alignment;
+ if (map_and_fenceable && (alignment & (fence_alignment - 1)) != 0) {
+ DRM_ERROR("Invalid object alignment requested %u\n", alignment);
+ return (-EINVAL);
+ }
+
+ size = map_and_fenceable ? fence_size : obj->base.size;
+
+ /* If the object is bigger than the entire aperture, reject it early
+ * before evicting everything in a vain attempt to find space.
+ */
+ if (obj->base.size > (map_and_fenceable ?
+ dev_priv->mm.gtt_mappable_end : dev_priv->mm.gtt_total)) {
+ DRM_ERROR(
+"Attempting to bind an object larger than the aperture\n");
+ return (-E2BIG);
+ }
+
+ search_free:
+ if (map_and_fenceable)
+ free_space = drm_mm_search_free_in_range(
+ &dev_priv->mm.gtt_space, size, alignment, 0,
+ dev_priv->mm.gtt_mappable_end, 0);
+ else
+ free_space = drm_mm_search_free(&dev_priv->mm.gtt_space,
+ size, alignment, 0);
+ if (free_space != NULL) {
+ if (map_and_fenceable)
+ obj->gtt_space = drm_mm_get_block_range_generic(
+ free_space, size, alignment, 0,
+ dev_priv->mm.gtt_mappable_end, 1);
+ else
+ obj->gtt_space = drm_mm_get_block_generic(free_space,
+ size, alignment, 1);
+ }
+ if (obj->gtt_space == NULL) {
+ ret = i915_gem_evict_something(dev, size, alignment,
+ map_and_fenceable);
+ if (ret != 0)
+ return (ret);
+ goto search_free;
+ }
+ ret = i915_gem_object_get_pages_gtt(obj, 0);
+ if (ret != 0) {
+ drm_mm_put_block(obj->gtt_space);
+ obj->gtt_space = NULL;
+ /*
+ * i915_gem_object_get_pages_gtt() cannot return
+ * ENOMEM, since we use vm_page_grab(VM_ALLOC_RETRY)
+ * (which does not support operation without a flag
+ * anyway).
+ */
+ return (ret);
+ }
+
+ ret = i915_gem_gtt_bind_object(obj);
+ if (ret != 0) {
+ i915_gem_object_put_pages_gtt(obj);
+ drm_mm_put_block(obj->gtt_space);
+ obj->gtt_space = NULL;
+ if (i915_gem_evict_everything(dev, false))
+ return (ret);
+ goto search_free;
+ }
+
+ list_add_tail(&obj->gtt_list, &dev_priv->mm.gtt_list);
+ list_add_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
+
+ KASSERT((obj->base.read_domains & I915_GEM_GPU_DOMAINS) == 0,
+ ("Object in gpu read domain"));
+ KASSERT((obj->base.write_domain & I915_GEM_GPU_DOMAINS) == 0,
+ ("Object in gpu write domain"));
+
+ obj->gtt_offset = obj->gtt_space->start;
+
+ fenceable =
+ obj->gtt_space->size == fence_size &&
+ (obj->gtt_space->start & (fence_alignment - 1)) == 0;
+
+ mappable =
+ obj->gtt_offset + obj->base.size <= dev_priv->mm.gtt_mappable_end;
+ obj->map_and_fenceable = mappable && fenceable;
+
+ CTR4(KTR_DRM, "object_bind %p %x %x %d", obj, obj->gtt_offset,
+ obj->base.size, map_and_fenceable);
+ return (0);
+}
+
+static void
+i915_gem_object_finish_gtt(struct drm_i915_gem_object *obj)
+{
+ u32 old_write_domain, old_read_domains;
+
+ /* Act a barrier for all accesses through the GTT */
+ mb();
+
+ /* Force a pagefault for domain tracking on next user access */
+ i915_gem_release_mmap(obj);
+
+ if ((obj->base.read_domains & I915_GEM_DOMAIN_GTT) == 0)
+ return;
+
+ old_read_domains = obj->base.read_domains;
+ old_write_domain = obj->base.write_domain;
+
+ obj->base.read_domains &= ~I915_GEM_DOMAIN_GTT;
+ obj->base.write_domain &= ~I915_GEM_DOMAIN_GTT;
+
+ CTR3(KTR_DRM, "object_change_domain finish gtt %p %x %x",
+ obj, old_read_domains, old_write_domain);
+}
+
+int
+i915_gem_object_unbind(struct drm_i915_gem_object *obj)
+{
+ drm_i915_private_t *dev_priv;
+ int ret;
+
+ dev_priv = obj->base.dev->dev_private;
+ ret = 0;
+ if (obj->gtt_space == NULL)
+ return (0);
+ if (obj->pin_count != 0) {
+ DRM_ERROR("Attempting to unbind pinned buffer\n");
+ return (-EINVAL);
+ }
+
+ ret = i915_gem_object_finish_gpu(obj);
+ if (ret == -ERESTART || ret == -EINTR)
+ return (ret);
+
+ i915_gem_object_finish_gtt(obj);
+
+ if (ret == 0)
+ ret = i915_gem_object_set_to_cpu_domain(obj, 1);
+ if (ret == -ERESTART || ret == -EINTR)
+ return (ret);
+ if (ret != 0) {
+ i915_gem_clflush_object(obj);
+ obj->base.read_domains = obj->base.write_domain =
+ I915_GEM_DOMAIN_CPU;
+ }
+
+ ret = i915_gem_object_put_fence(obj);
+ if (ret == -ERESTART)
+ return (ret);
+
+ i915_gem_gtt_unbind_object(obj);
+ if (obj->has_aliasing_ppgtt_mapping) {
+ i915_ppgtt_unbind_object(dev_priv->mm.aliasing_ppgtt, obj);
+ obj->has_aliasing_ppgtt_mapping = 0;
+ }
+ i915_gem_object_put_pages_gtt(obj);
+
+ list_del_init(&obj->gtt_list);
+ list_del_init(&obj->mm_list);
+ obj->map_and_fenceable = true;
+
+ drm_mm_put_block(obj->gtt_space);
+ obj->gtt_space = NULL;
+ obj->gtt_offset = 0;
+
+ if (i915_gem_object_is_purgeable(obj))
+ i915_gem_object_truncate(obj);
+ CTR1(KTR_DRM, "object_unbind %p", obj);
+
+ return (ret);
+}
+
+static int
+i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj,
+ int flags)
+{
+ struct drm_device *dev;
+ vm_object_t vm_obj;
+ vm_page_t m;
+ int page_count, i, j;
+
+ dev = obj->base.dev;
+ KASSERT(obj->pages == NULL, ("Obj already has pages"));
+ page_count = obj->base.size / PAGE_SIZE;
+ obj->pages = malloc(page_count * sizeof(vm_page_t), DRM_I915_GEM,
+ M_WAITOK);
+ vm_obj = obj->base.vm_obj;
+ VM_OBJECT_LOCK(vm_obj);
+ for (i = 0; i < page_count; i++) {
+ if ((obj->pages[i] = i915_gem_wire_page(vm_obj, i)) == NULL)
+ goto failed;
+ }
+ VM_OBJECT_UNLOCK(vm_obj);
+ if (i915_gem_object_needs_bit17_swizzle(obj))
+ i915_gem_object_do_bit_17_swizzle(obj);
+ return (0);
+
+failed:
+ for (j = 0; j < i; j++) {
+ m = obj->pages[j];
+ vm_page_lock(m);
+ vm_page_unwire(m, 0);
+ vm_page_unlock(m);
+ atomic_add_long(&i915_gem_wired_pages_cnt, -1);
+ }
+ VM_OBJECT_UNLOCK(vm_obj);
+ free(obj->pages, DRM_I915_GEM);
+ obj->pages = NULL;
+ return (-EIO);
+}
+
+#define GEM_PARANOID_CHECK_GTT 0
+#if GEM_PARANOID_CHECK_GTT
+static void
+i915_gem_assert_pages_not_mapped(struct drm_device *dev, vm_page_t *ma,
+ int page_count)
+{
+ struct drm_i915_private *dev_priv;
+ vm_paddr_t pa;
+ unsigned long start, end;
+ u_int i;
+ int j;
+
+ dev_priv = dev->dev_private;
+ start = OFF_TO_IDX(dev_priv->mm.gtt_start);
+ end = OFF_TO_IDX(dev_priv->mm.gtt_end);
+ for (i = start; i < end; i++) {
+ pa = intel_gtt_read_pte_paddr(i);
+ for (j = 0; j < page_count; j++) {
+ if (pa == VM_PAGE_TO_PHYS(ma[j])) {
+ panic("Page %p in GTT pte index %d pte %x",
+ ma[i], i, intel_gtt_read_pte(i));
+ }
+ }
+ }
+}
+#endif
+
+static void
+i915_gem_object_put_pages_gtt(struct drm_i915_gem_object *obj)
+{
+ vm_page_t m;
+ int page_count, i;
+
+ KASSERT(obj->madv != I915_MADV_PURGED_INTERNAL, ("Purged object"));
+
+ if (obj->tiling_mode != I915_TILING_NONE)
+ i915_gem_object_save_bit_17_swizzle(obj);
+ if (obj->madv == I915_MADV_DONTNEED)
+ obj->dirty = 0;
+ page_count = obj->base.size / PAGE_SIZE;
+ VM_OBJECT_LOCK(obj->base.vm_obj);
+#if GEM_PARANOID_CHECK_GTT
+ i915_gem_assert_pages_not_mapped(obj->base.dev, obj->pages, page_count);
+#endif
+ for (i = 0; i < page_count; i++) {
+ m = obj->pages[i];
+ if (obj->dirty)
+ vm_page_dirty(m);
+ if (obj->madv == I915_MADV_WILLNEED)
+ vm_page_reference(m);
+ vm_page_lock(m);
+ vm_page_unwire(obj->pages[i], 1);
+ vm_page_unlock(m);
+ atomic_add_long(&i915_gem_wired_pages_cnt, -1);
+ }
+ VM_OBJECT_UNLOCK(obj->base.vm_obj);
+ obj->dirty = 0;
+ free(obj->pages, DRM_I915_GEM);
+ obj->pages = NULL;
+}
+
+void
+i915_gem_release_mmap(struct drm_i915_gem_object *obj)
+{
+ vm_object_t devobj;
+ vm_page_t m;
+ int i, page_count;
+
+ if (!obj->fault_mappable)
+ return;
+
+ CTR3(KTR_DRM, "release_mmap %p %x %x", obj, obj->gtt_offset,
+ OFF_TO_IDX(obj->base.size));
+ devobj = cdev_pager_lookup(obj);
+ if (devobj != NULL) {
+ page_count = OFF_TO_IDX(obj->base.size);
+
+ VM_OBJECT_LOCK(devobj);
+retry:
+ for (i = 0; i < page_count; i++) {
+ m = vm_page_lookup(devobj, i);
+ if (m == NULL)
+ continue;
+ if (vm_page_sleep_if_busy(m, true, "915unm"))
+ goto retry;
+ cdev_pager_free_page(devobj, m);
+ }
+ VM_OBJECT_UNLOCK(devobj);
+ vm_object_deallocate(devobj);
+ }
+
+ obj->fault_mappable = false;
+}
+
+int
+i915_gem_object_wait_rendering(struct drm_i915_gem_object *obj)
+{
+ int ret;
+
+ KASSERT((obj->base.write_domain & I915_GEM_GPU_DOMAINS) == 0,
+ ("In GPU write domain"));
+
+ CTR5(KTR_DRM, "object_wait_rendering %p %s %x %d %d", obj,
+ obj->ring != NULL ? obj->ring->name : "none", obj->gtt_offset,
+ obj->active, obj->last_rendering_seqno);
+ if (obj->active) {
+ ret = i915_wait_request(obj->ring, obj->last_rendering_seqno,
+ true);
+ if (ret != 0)
+ return (ret);
+ }
+ return (0);
+}
+
+void
+i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *ring, uint32_t seqno)
+{
+ struct drm_device *dev = obj->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_fence_reg *reg;
+
+ obj->ring = ring;
+ KASSERT(ring != NULL, ("NULL ring"));
+
+ /* Add a reference if we're newly entering the active list. */
+ if (!obj->active) {
+ drm_gem_object_reference(&obj->base);
+ obj->active = 1;
+ }
+
+ /* Move from whatever list we were on to the tail of execution. */
+ list_move_tail(&obj->mm_list, &dev_priv->mm.active_list);
+ list_move_tail(&obj->ring_list, &ring->active_list);
+
+ obj->last_rendering_seqno = seqno;
+ if (obj->fenced_gpu_access) {
+ obj->last_fenced_seqno = seqno;
+ obj->last_fenced_ring = ring;
+
+ /* Bump MRU to take account of the delayed flush */
+ if (obj->fence_reg != I915_FENCE_REG_NONE) {
+ reg = &dev_priv->fence_regs[obj->fence_reg];
+ list_move_tail(&reg->lru_list,
+ &dev_priv->mm.fence_list);
+ }
+ }
+}
+
+static void
+i915_gem_object_move_off_active(struct drm_i915_gem_object *obj)
+{
+ list_del_init(&obj->ring_list);
+ obj->last_rendering_seqno = 0;
+ obj->last_fenced_seqno = 0;
+}
+
+static void
+i915_gem_object_move_to_flushing(struct drm_i915_gem_object *obj)
+{
+ struct drm_device *dev = obj->base.dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ KASSERT(obj->active, ("Object not active"));
+ list_move_tail(&obj->mm_list, &dev_priv->mm.flushing_list);
+
+ i915_gem_object_move_off_active(obj);
+}
+
+static void
+i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
+{
+ struct drm_device *dev = obj->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (obj->pin_count != 0)
+ list_move_tail(&obj->mm_list, &dev_priv->mm.pinned_list);
+ else
+ list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
+
+ KASSERT(list_empty(&obj->gpu_write_list), ("On gpu_write_list"));
+ KASSERT(obj->active, ("Object not active"));
+ obj->ring = NULL;
+ obj->last_fenced_ring = NULL;
+
+ i915_gem_object_move_off_active(obj);
+ obj->fenced_gpu_access = false;
+
+ obj->active = 0;
+ obj->pending_gpu_write = false;
+ drm_gem_object_unreference(&obj->base);
+
+#if 1
+ KIB_NOTYET();
+#else
+ WARN_ON(i915_verify_lists(dev));
+#endif
+}
+
+static void
+i915_gem_object_truncate(struct drm_i915_gem_object *obj)
+{
+ vm_object_t vm_obj;
+
+ vm_obj = obj->base.vm_obj;
+ VM_OBJECT_LOCK(vm_obj);
+ vm_object_page_remove(vm_obj, 0, 0, false);
+ VM_OBJECT_UNLOCK(vm_obj);
+ obj->madv = I915_MADV_PURGED_INTERNAL;
+}
+
+static inline int
+i915_gem_object_is_purgeable(struct drm_i915_gem_object *obj)
+{
+
+ return (obj->madv == I915_MADV_DONTNEED);
+}
+
+static void
+i915_gem_process_flushing_list(struct intel_ring_buffer *ring,
+ uint32_t flush_domains)
+{
+ struct drm_i915_gem_object *obj, *next;
+ uint32_t old_write_domain;
+
+ list_for_each_entry_safe(obj, next, &ring->gpu_write_list,
+ gpu_write_list) {
+ if (obj->base.write_domain & flush_domains) {
+ old_write_domain = obj->base.write_domain;
+ obj->base.write_domain = 0;
+ list_del_init(&obj->gpu_write_list);
+ i915_gem_object_move_to_active(obj, ring,
+ i915_gem_next_request_seqno(ring));
+
+ CTR3(KTR_DRM, "object_change_domain process_flush %p %x %x",
+ obj, obj->base.read_domains, old_write_domain);
+ }
+ }
+}
+
+static int
+i915_gem_object_needs_bit17_swizzle(struct drm_i915_gem_object *obj)
+{
+ drm_i915_private_t *dev_priv;
+
+ dev_priv = obj->base.dev->dev_private;
+ return (dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_9_10_17 &&
+ obj->tiling_mode != I915_TILING_NONE);
+}
+
+static vm_page_t
+i915_gem_wire_page(vm_object_t object, vm_pindex_t pindex)
+{
+ vm_page_t m;
+ int rv;
+
+ VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
+ m = vm_page_grab(object, pindex, VM_ALLOC_NORMAL | VM_ALLOC_RETRY);
+ if (m->valid != VM_PAGE_BITS_ALL) {
+ if (vm_pager_has_page(object, pindex, NULL, NULL)) {
+ rv = vm_pager_get_pages(object, &m, 1, 0);
+ m = vm_page_lookup(object, pindex);
+ if (m == NULL)
+ return (NULL);
+ if (rv != VM_PAGER_OK) {
+ vm_page_lock(m);
+ vm_page_free(m);
+ vm_page_unlock(m);
+ return (NULL);
+ }
+ } else {
+ pmap_zero_page(m);
+ m->valid = VM_PAGE_BITS_ALL;
+ m->dirty = 0;
+ }
+ }
+ vm_page_lock(m);
+ vm_page_wire(m);
+ vm_page_unlock(m);
+ vm_page_wakeup(m);
+ atomic_add_long(&i915_gem_wired_pages_cnt, 1);
+ return (m);
+}
+
+int
+i915_gem_flush_ring(struct intel_ring_buffer *ring, uint32_t invalidate_domains,
+ uint32_t flush_domains)
+{
+ int ret;
+
+ if (((invalidate_domains | flush_domains) & I915_GEM_GPU_DOMAINS) == 0)
+ return 0;
+
+ CTR3(KTR_DRM, "ring_flush %s %x %x", ring->name, invalidate_domains,
+ flush_domains);
+ ret = ring->flush(ring, invalidate_domains, flush_domains);
+ if (ret)
+ return ret;
+
+ if (flush_domains & I915_GEM_GPU_DOMAINS)
+ i915_gem_process_flushing_list(ring, flush_domains);
+ return 0;
+}
+
+static int
+i915_ring_idle(struct intel_ring_buffer *ring, bool do_retire)
+{
+ int ret;
+
+ if (list_empty(&ring->gpu_write_list) && list_empty(&ring->active_list))
+ return 0;
+
+ if (!list_empty(&ring->gpu_write_list)) {
+ ret = i915_gem_flush_ring(ring, I915_GEM_GPU_DOMAINS,
+ I915_GEM_GPU_DOMAINS);
+ if (ret != 0)
+ return ret;
+ }
+
+ return (i915_wait_request(ring, i915_gem_next_request_seqno(ring),
+ do_retire));
+}
+
+int
+i915_gpu_idle(struct drm_device *dev, bool do_retire)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int ret, i;
+
+ /* Flush everything onto the inactive list. */
+ for (i = 0; i < I915_NUM_RINGS; i++) {
+ ret = i915_ring_idle(&dev_priv->rings[i], do_retire);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+int
+i915_wait_request(struct intel_ring_buffer *ring, uint32_t seqno, bool do_retire)
+{
+ drm_i915_private_t *dev_priv;
+ struct drm_i915_gem_request *request;
+ uint32_t ier;
+ int flags, ret;
+ bool recovery_complete;
+
+ KASSERT(seqno != 0, ("Zero seqno"));
+
+ dev_priv = ring->dev->dev_private;
+ ret = 0;
+
+ if (atomic_load_acq_int(&dev_priv->mm.wedged) != 0) {
+ /* Give the error handler a chance to run. */
+ mtx_lock(&dev_priv->error_completion_lock);
+ recovery_complete = (&dev_priv->error_completion) > 0;
+ mtx_unlock(&dev_priv->error_completion_lock);
+ return (recovery_complete ? -EIO : -EAGAIN);
+ }
+
+ if (seqno == ring->outstanding_lazy_request) {
+ request = malloc(sizeof(*request), DRM_I915_GEM,
+ M_WAITOK | M_ZERO);
+ if (request == NULL)
+ return (-ENOMEM);
+
+ ret = i915_add_request(ring, NULL, request);
+ if (ret != 0) {
+ free(request, DRM_I915_GEM);
+ return (ret);
+ }
+
+ seqno = request->seqno;
+ }
+
+ if (!i915_seqno_passed(ring->get_seqno(ring), seqno)) {
+ if (HAS_PCH_SPLIT(ring->dev))
+ ier = I915_READ(DEIER) | I915_READ(GTIER);
+ else
+ ier = I915_READ(IER);
+ if (!ier) {
+ DRM_ERROR("something (likely vbetool) disabled "
+ "interrupts, re-enabling\n");
+ ring->dev->driver->irq_preinstall(ring->dev);
+ ring->dev->driver->irq_postinstall(ring->dev);
+ }
+
+ CTR2(KTR_DRM, "request_wait_begin %s %d", ring->name, seqno);
+
+ ring->waiting_seqno = seqno;
+ mtx_lock(&ring->irq_lock);
+ if (ring->irq_get(ring)) {
+ flags = dev_priv->mm.interruptible ? PCATCH : 0;
+ while (!i915_seqno_passed(ring->get_seqno(ring), seqno)
+ && !atomic_load_acq_int(&dev_priv->mm.wedged) &&
+ ret == 0) {
+ ret = -msleep(ring, &ring->irq_lock, flags,
+ "915gwr", 0);
+ }
+ ring->irq_put(ring);
+ mtx_unlock(&ring->irq_lock);
+ } else {
+ mtx_unlock(&ring->irq_lock);
+ if (_intel_wait_for(ring->dev,
+ i915_seqno_passed(ring->get_seqno(ring), seqno) ||
+ atomic_load_acq_int(&dev_priv->mm.wedged), 3000,
+ 0, "i915wrq") != 0)
+ ret = -EBUSY;
+ }
+ ring->waiting_seqno = 0;
+
+ CTR3(KTR_DRM, "request_wait_end %s %d %d", ring->name, seqno,
+ ret);
+ }
+ if (atomic_load_acq_int(&dev_priv->mm.wedged))
+ ret = -EAGAIN;
+
+ /* Directly dispatch request retiring. While we have the work queue
+ * to handle this, the waiter on a request often wants an associated
+ * buffer to have made it to the inactive list, and we would need
+ * a separate wait queue to handle that.
+ */
+ if (ret == 0 && do_retire)
+ i915_gem_retire_requests_ring(ring);
+
+ return (ret);
+}
+
+static u32
+i915_gem_get_seqno(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 seqno = dev_priv->next_seqno;
+
+ /* reserve 0 for non-seqno */
+ if (++dev_priv->next_seqno == 0)
+ dev_priv->next_seqno = 1;
+
+ return seqno;
+}
+
+u32
+i915_gem_next_request_seqno(struct intel_ring_buffer *ring)
+{
+ if (ring->outstanding_lazy_request == 0)
+ ring->outstanding_lazy_request = i915_gem_get_seqno(ring->dev);
+
+ return ring->outstanding_lazy_request;
+}
+
+int
+i915_add_request(struct intel_ring_buffer *ring, struct drm_file *file,
+ struct drm_i915_gem_request *request)
+{
+ drm_i915_private_t *dev_priv;
+ struct drm_i915_file_private *file_priv;
+ uint32_t seqno;
+ u32 request_ring_position;
+ int was_empty;
+ int ret;
+
+ KASSERT(request != NULL, ("NULL request in add"));
+ DRM_LOCK_ASSERT(ring->dev);
+ dev_priv = ring->dev->dev_private;
+
+ seqno = i915_gem_next_request_seqno(ring);
+ request_ring_position = intel_ring_get_tail(ring);
+
+ ret = ring->add_request(ring, &seqno);
+ if (ret != 0)
+ return ret;
+
+ CTR2(KTR_DRM, "request_add %s %d", ring->name, seqno);
+
+ request->seqno = seqno;
+ request->ring = ring;
+ request->tail = request_ring_position;
+ request->emitted_jiffies = ticks;
+ was_empty = list_empty(&ring->request_list);
+ list_add_tail(&request->list, &ring->request_list);
+
+ if (file != NULL) {
+ file_priv = file->driver_priv;
+
+ mtx_lock(&file_priv->mm.lck);
+ request->file_priv = file_priv;
+ list_add_tail(&request->client_list,
+ &file_priv->mm.request_list);
+ mtx_unlock(&file_priv->mm.lck);
+ }
+
+ ring->outstanding_lazy_request = 0;
+
+ if (!dev_priv->mm.suspended) {
+ if (i915_enable_hangcheck) {
+ callout_schedule(&dev_priv->hangcheck_timer,
+ DRM_I915_HANGCHECK_PERIOD);
+ }
+ if (was_empty)
+ taskqueue_enqueue_timeout(dev_priv->tq,
+ &dev_priv->mm.retire_task, hz);
+ }
+ return (0);
+}
+
+static inline void
+i915_gem_request_remove_from_client(struct drm_i915_gem_request *request)
+{
+ struct drm_i915_file_private *file_priv = request->file_priv;
+
+ if (!file_priv)
+ return;
+
+ DRM_LOCK_ASSERT(request->ring->dev);
+
+ mtx_lock(&file_priv->mm.lck);
+ if (request->file_priv != NULL) {
+ list_del(&request->client_list);
+ request->file_priv = NULL;
+ }
+ mtx_unlock(&file_priv->mm.lck);
+}
+
+void
+i915_gem_release(struct drm_device *dev, struct drm_file *file)
+{
+ struct drm_i915_file_private *file_priv;
+ struct drm_i915_gem_request *request;
+
+ file_priv = file->driver_priv;
+
+ /* Clean up our request list when the client is going away, so that
+ * later retire_requests won't dereference our soon-to-be-gone
+ * file_priv.
+ */
+ mtx_lock(&file_priv->mm.lck);
+ while (!list_empty(&file_priv->mm.request_list)) {
+ request = list_first_entry(&file_priv->mm.request_list,
+ struct drm_i915_gem_request,
+ client_list);
+ list_del(&request->client_list);
+ request->file_priv = NULL;
+ }
+ mtx_unlock(&file_priv->mm.lck);
+}
+
+static void
+i915_gem_reset_ring_lists(struct drm_i915_private *dev_priv,
+ struct intel_ring_buffer *ring)
+{
+
+ if (ring->dev != NULL)
+ DRM_LOCK_ASSERT(ring->dev);
+
+ while (!list_empty(&ring->request_list)) {
+ struct drm_i915_gem_request *request;
+
+ request = list_first_entry(&ring->request_list,
+ struct drm_i915_gem_request, list);
+
+ list_del(&request->list);
+ i915_gem_request_remove_from_client(request);
+ free(request, DRM_I915_GEM);
+ }
+
+ while (!list_empty(&ring->active_list)) {
+ struct drm_i915_gem_object *obj;
+
+ obj = list_first_entry(&ring->active_list,
+ struct drm_i915_gem_object, ring_list);
+
+ obj->base.write_domain = 0;
+ list_del_init(&obj->gpu_write_list);
+ i915_gem_object_move_to_inactive(obj);
+ }
+}
+
+static void
+i915_gem_reset_fences(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i;
+
+ for (i = 0; i < dev_priv->num_fence_regs; i++) {
+ struct drm_i915_fence_reg *reg = &dev_priv->fence_regs[i];
+ struct drm_i915_gem_object *obj = reg->obj;
+
+ if (!obj)
+ continue;
+
+ if (obj->tiling_mode)
+ i915_gem_release_mmap(obj);
+
+ reg->obj->fence_reg = I915_FENCE_REG_NONE;
+ reg->obj->fenced_gpu_access = false;
+ reg->obj->last_fenced_seqno = 0;
+ reg->obj->last_fenced_ring = NULL;
+ i915_gem_clear_fence_reg(dev, reg);
+ }
+}
+
+void
+i915_gem_reset(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj;
+ int i;
+
+ for (i = 0; i < I915_NUM_RINGS; i++)
+ i915_gem_reset_ring_lists(dev_priv, &dev_priv->rings[i]);
+
+ /* Remove anything from the flushing lists. The GPU cache is likely
+ * to be lost on reset along with the data, so simply move the
+ * lost bo to the inactive list.
+ */
+ while (!list_empty(&dev_priv->mm.flushing_list)) {
+ obj = list_first_entry(&dev_priv->mm.flushing_list,
+ struct drm_i915_gem_object,
+ mm_list);
+
+ obj->base.write_domain = 0;
+ list_del_init(&obj->gpu_write_list);
+ i915_gem_object_move_to_inactive(obj);
+ }
+
+ /* Move everything out of the GPU domains to ensure we do any
+ * necessary invalidation upon reuse.
+ */
+ list_for_each_entry(obj, &dev_priv->mm.inactive_list, mm_list) {
+ obj->base.read_domains &= ~I915_GEM_GPU_DOMAINS;
+ }
+
+ /* The fence registers are invalidated so clear them out */
+ i915_gem_reset_fences(dev);
+}
+
+/**
+ * This function clears the request list as sequence numbers are passed.
+ */
+void
+i915_gem_retire_requests_ring(struct intel_ring_buffer *ring)
+{
+ uint32_t seqno;
+ int i;
+
+ if (list_empty(&ring->request_list))
+ return;
+
+ seqno = ring->get_seqno(ring);
+ CTR2(KTR_DRM, "retire_request_ring %s %d", ring->name, seqno);
+
+ for (i = 0; i < DRM_ARRAY_SIZE(ring->sync_seqno); i++)
+ if (seqno >= ring->sync_seqno[i])
+ ring->sync_seqno[i] = 0;
+
+ while (!list_empty(&ring->request_list)) {
+ struct drm_i915_gem_request *request;
+
+ request = list_first_entry(&ring->request_list,
+ struct drm_i915_gem_request,
+ list);
+
+ if (!i915_seqno_passed(seqno, request->seqno))
+ break;
+
+ CTR2(KTR_DRM, "retire_request_seqno_passed %s %d",
+ ring->name, seqno);
+ ring->last_retired_head = request->tail;
+
+ list_del(&request->list);
+ i915_gem_request_remove_from_client(request);
+ free(request, DRM_I915_GEM);
+ }
+
+ /* Move any buffers on the active list that are no longer referenced
+ * by the ringbuffer to the flushing/inactive lists as appropriate.
+ */
+ while (!list_empty(&ring->active_list)) {
+ struct drm_i915_gem_object *obj;
+
+ obj = list_first_entry(&ring->active_list,
+ struct drm_i915_gem_object,
+ ring_list);
+
+ if (!i915_seqno_passed(seqno, obj->last_rendering_seqno))
+ break;
+
+ if (obj->base.write_domain != 0)
+ i915_gem_object_move_to_flushing(obj);
+ else
+ i915_gem_object_move_to_inactive(obj);
+ }
+
+ if (ring->trace_irq_seqno &&
+ i915_seqno_passed(seqno, ring->trace_irq_seqno)) {
+ mtx_lock(&ring->irq_lock);
+ ring->irq_put(ring);
+ mtx_unlock(&ring->irq_lock);
+ ring->trace_irq_seqno = 0;
+ }
+}
+
+void
+i915_gem_retire_requests(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj, *next;
+ int i;
+
+ if (!list_empty(&dev_priv->mm.deferred_free_list)) {
+ list_for_each_entry_safe(obj, next,
+ &dev_priv->mm.deferred_free_list, mm_list)
+ i915_gem_free_object_tail(obj);
+ }
+
+ for (i = 0; i < I915_NUM_RINGS; i++)
+ i915_gem_retire_requests_ring(&dev_priv->rings[i]);
+}
+
+static int
+sandybridge_write_fence_reg(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *pipelined)
+{
+ struct drm_device *dev = obj->base.dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 size = obj->gtt_space->size;
+ int regnum = obj->fence_reg;
+ uint64_t val;
+
+ val = (uint64_t)((obj->gtt_offset + size - 4096) &
+ 0xfffff000) << 32;
+ val |= obj->gtt_offset & 0xfffff000;
+ val |= (uint64_t)((obj->stride / 128) - 1) <<
+ SANDYBRIDGE_FENCE_PITCH_SHIFT;
+
+ if (obj->tiling_mode == I915_TILING_Y)
+ val |= 1 << I965_FENCE_TILING_Y_SHIFT;
+ val |= I965_FENCE_REG_VALID;
+
+ if (pipelined) {
+ int ret = intel_ring_begin(pipelined, 6);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(pipelined, MI_NOOP);
+ intel_ring_emit(pipelined, MI_LOAD_REGISTER_IMM(2));
+ intel_ring_emit(pipelined, FENCE_REG_SANDYBRIDGE_0 + regnum*8);
+ intel_ring_emit(pipelined, (u32)val);
+ intel_ring_emit(pipelined, FENCE_REG_SANDYBRIDGE_0 + regnum*8 + 4);
+ intel_ring_emit(pipelined, (u32)(val >> 32));
+ intel_ring_advance(pipelined);
+ } else
+ I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 + regnum * 8, val);
+
+ return 0;
+}
+
+static int
+i965_write_fence_reg(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *pipelined)
+{
+ struct drm_device *dev = obj->base.dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 size = obj->gtt_space->size;
+ int regnum = obj->fence_reg;
+ uint64_t val;
+
+ val = (uint64_t)((obj->gtt_offset + size - 4096) &
+ 0xfffff000) << 32;
+ val |= obj->gtt_offset & 0xfffff000;
+ val |= ((obj->stride / 128) - 1) << I965_FENCE_PITCH_SHIFT;
+ if (obj->tiling_mode == I915_TILING_Y)
+ val |= 1 << I965_FENCE_TILING_Y_SHIFT;
+ val |= I965_FENCE_REG_VALID;
+
+ if (pipelined) {
+ int ret = intel_ring_begin(pipelined, 6);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(pipelined, MI_NOOP);
+ intel_ring_emit(pipelined, MI_LOAD_REGISTER_IMM(2));
+ intel_ring_emit(pipelined, FENCE_REG_965_0 + regnum*8);
+ intel_ring_emit(pipelined, (u32)val);
+ intel_ring_emit(pipelined, FENCE_REG_965_0 + regnum*8 + 4);
+ intel_ring_emit(pipelined, (u32)(val >> 32));
+ intel_ring_advance(pipelined);
+ } else
+ I915_WRITE64(FENCE_REG_965_0 + regnum * 8, val);
+
+ return 0;
+}
+
+static int
+i915_write_fence_reg(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *pipelined)
+{
+ struct drm_device *dev = obj->base.dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 size = obj->gtt_space->size;
+ u32 fence_reg, val, pitch_val;
+ int tile_width;
+
+ if ((obj->gtt_offset & ~I915_FENCE_START_MASK) ||
+ (size & -size) != size || (obj->gtt_offset & (size - 1))) {
+ printf(
+"object 0x%08x [fenceable? %d] not 1M or pot-size (0x%08x) aligned\n",
+ obj->gtt_offset, obj->map_and_fenceable, size);
+ return -EINVAL;
+ }
+
+ if (obj->tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev))
+ tile_width = 128;
+ else
+ tile_width = 512;
+
+ /* Note: pitch better be a power of two tile widths */
+ pitch_val = obj->stride / tile_width;
+ pitch_val = ffs(pitch_val) - 1;
+
+ val = obj->gtt_offset;
+ if (obj->tiling_mode == I915_TILING_Y)
+ val |= 1 << I830_FENCE_TILING_Y_SHIFT;
+ val |= I915_FENCE_SIZE_BITS(size);
+ val |= pitch_val << I830_FENCE_PITCH_SHIFT;
+ val |= I830_FENCE_REG_VALID;
+
+ fence_reg = obj->fence_reg;
+ if (fence_reg < 8)
+ fence_reg = FENCE_REG_830_0 + fence_reg * 4;
+ else
+ fence_reg = FENCE_REG_945_8 + (fence_reg - 8) * 4;
+
+ if (pipelined) {
+ int ret = intel_ring_begin(pipelined, 4);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(pipelined, MI_NOOP);
+ intel_ring_emit(pipelined, MI_LOAD_REGISTER_IMM(1));
+ intel_ring_emit(pipelined, fence_reg);
+ intel_ring_emit(pipelined, val);
+ intel_ring_advance(pipelined);
+ } else
+ I915_WRITE(fence_reg, val);
+
+ return 0;
+}
+
+static int
+i830_write_fence_reg(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *pipelined)
+{
+ struct drm_device *dev = obj->base.dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 size = obj->gtt_space->size;
+ int regnum = obj->fence_reg;
+ uint32_t val;
+ uint32_t pitch_val;
+
+ if ((obj->gtt_offset & ~I830_FENCE_START_MASK) ||
+ (size & -size) != size || (obj->gtt_offset & (size - 1))) {
+ printf(
+"object 0x%08x not 512K or pot-size 0x%08x aligned\n",
+ obj->gtt_offset, size);
+ return -EINVAL;
+ }
+
+ pitch_val = obj->stride / 128;
+ pitch_val = ffs(pitch_val) - 1;
+
+ val = obj->gtt_offset;
+ if (obj->tiling_mode == I915_TILING_Y)
+ val |= 1 << I830_FENCE_TILING_Y_SHIFT;
+ val |= I830_FENCE_SIZE_BITS(size);
+ val |= pitch_val << I830_FENCE_PITCH_SHIFT;
+ val |= I830_FENCE_REG_VALID;
+
+ if (pipelined) {
+ int ret = intel_ring_begin(pipelined, 4);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(pipelined, MI_NOOP);
+ intel_ring_emit(pipelined, MI_LOAD_REGISTER_IMM(1));
+ intel_ring_emit(pipelined, FENCE_REG_830_0 + regnum*4);
+ intel_ring_emit(pipelined, val);
+ intel_ring_advance(pipelined);
+ } else
+ I915_WRITE(FENCE_REG_830_0 + regnum * 4, val);
+
+ return 0;
+}
+
+static bool ring_passed_seqno(struct intel_ring_buffer *ring, u32 seqno)
+{
+ return i915_seqno_passed(ring->get_seqno(ring), seqno);
+}
+
+static int
+i915_gem_object_flush_fence(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *pipelined)
+{
+ int ret;
+
+ if (obj->fenced_gpu_access) {
+ if (obj->base.write_domain & I915_GEM_GPU_DOMAINS) {
+ ret = i915_gem_flush_ring(obj->last_fenced_ring, 0,
+ obj->base.write_domain);
+ if (ret)
+ return ret;
+ }
+
+ obj->fenced_gpu_access = false;
+ }
+
+ if (obj->last_fenced_seqno && pipelined != obj->last_fenced_ring) {
+ if (!ring_passed_seqno(obj->last_fenced_ring,
+ obj->last_fenced_seqno)) {
+ ret = i915_wait_request(obj->last_fenced_ring,
+ obj->last_fenced_seqno,
+ true);
+ if (ret)
+ return ret;
+ }
+
+ obj->last_fenced_seqno = 0;
+ obj->last_fenced_ring = NULL;
+ }
+
+ /* Ensure that all CPU reads are completed before installing a fence
+ * and all writes before removing the fence.
+ */
+ if (obj->base.read_domains & I915_GEM_DOMAIN_GTT)
+ mb();
+
+ return 0;
+}
+
+int
+i915_gem_object_put_fence(struct drm_i915_gem_object *obj)
+{
+ int ret;
+
+ if (obj->tiling_mode)
+ i915_gem_release_mmap(obj);
+
+ ret = i915_gem_object_flush_fence(obj, NULL);
+ if (ret)
+ return ret;
+
+ if (obj->fence_reg != I915_FENCE_REG_NONE) {
+ struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
+
+ if (dev_priv->fence_regs[obj->fence_reg].pin_count != 0)
+ printf("%s: pin_count %d\n", __func__,
+ dev_priv->fence_regs[obj->fence_reg].pin_count);
+ i915_gem_clear_fence_reg(obj->base.dev,
+ &dev_priv->fence_regs[obj->fence_reg]);
+
+ obj->fence_reg = I915_FENCE_REG_NONE;
+ }
+
+ return 0;
+}
+
+static struct drm_i915_fence_reg *
+i915_find_fence_reg(struct drm_device *dev, struct intel_ring_buffer *pipelined)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_fence_reg *reg, *first, *avail;
+ int i;
+
+ /* First try to find a free reg */
+ avail = NULL;
+ for (i = dev_priv->fence_reg_start; i < dev_priv->num_fence_regs; i++) {
+ reg = &dev_priv->fence_regs[i];
+ if (!reg->obj)
+ return reg;
+
+ if (!reg->pin_count)
+ avail = reg;
+ }
+
+ if (avail == NULL)
+ return NULL;
+
+ /* None available, try to steal one or wait for a user to finish */
+ avail = first = NULL;
+ list_for_each_entry(reg, &dev_priv->mm.fence_list, lru_list) {
+ if (reg->pin_count)
+ continue;
+
+ if (first == NULL)
+ first = reg;
+
+ if (!pipelined ||
+ !reg->obj->last_fenced_ring ||
+ reg->obj->last_fenced_ring == pipelined) {
+ avail = reg;
+ break;
+ }
+ }
+
+ if (avail == NULL)
+ avail = first;
+
+ return avail;
+}
+
+int
+i915_gem_object_get_fence(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *pipelined)
+{
+ struct drm_device *dev = obj->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_fence_reg *reg;
+ int ret;
+
+ pipelined = NULL;
+ ret = 0;
+
+ if (obj->fence_reg != I915_FENCE_REG_NONE) {
+ reg = &dev_priv->fence_regs[obj->fence_reg];
+ list_move_tail(&reg->lru_list, &dev_priv->mm.fence_list);
+
+ if (obj->tiling_changed) {
+ ret = i915_gem_object_flush_fence(obj, pipelined);
+ if (ret)
+ return ret;
+
+ if (!obj->fenced_gpu_access && !obj->last_fenced_seqno)
+ pipelined = NULL;
+
+ if (pipelined) {
+ reg->setup_seqno =
+ i915_gem_next_request_seqno(pipelined);
+ obj->last_fenced_seqno = reg->setup_seqno;
+ obj->last_fenced_ring = pipelined;
+ }
+
+ goto update;
+ }
+
+ if (!pipelined) {
+ if (reg->setup_seqno) {
+ if (!ring_passed_seqno(obj->last_fenced_ring,
+ reg->setup_seqno)) {
+ ret = i915_wait_request(
+ obj->last_fenced_ring,
+ reg->setup_seqno,
+ true);
+ if (ret)
+ return ret;
+ }
+
+ reg->setup_seqno = 0;
+ }
+ } else if (obj->last_fenced_ring &&
+ obj->last_fenced_ring != pipelined) {
+ ret = i915_gem_object_flush_fence(obj, pipelined);
+ if (ret)
+ return ret;
+ }
+
+ if (!obj->fenced_gpu_access && !obj->last_fenced_seqno)
+ pipelined = NULL;
+ KASSERT(pipelined || reg->setup_seqno == 0, ("!pipelined"));
+
+ if (obj->tiling_changed) {
+ if (pipelined) {
+ reg->setup_seqno =
+ i915_gem_next_request_seqno(pipelined);
+ obj->last_fenced_seqno = reg->setup_seqno;
+ obj->last_fenced_ring = pipelined;
+ }
+ goto update;
+ }
+
+ return 0;
+ }
+
+ reg = i915_find_fence_reg(dev, pipelined);
+ if (reg == NULL)
+ return -EDEADLK;
+
+ ret = i915_gem_object_flush_fence(obj, pipelined);
+ if (ret)
+ return ret;
+
+ if (reg->obj) {
+ struct drm_i915_gem_object *old = reg->obj;
+
+ drm_gem_object_reference(&old->base);
+
+ if (old->tiling_mode)
+ i915_gem_release_mmap(old);
+
+ ret = i915_gem_object_flush_fence(old, pipelined);
+ if (ret) {
+ drm_gem_object_unreference(&old->base);
+ return ret;
+ }
+
+ if (old->last_fenced_seqno == 0 && obj->last_fenced_seqno == 0)
+ pipelined = NULL;
+
+ old->fence_reg = I915_FENCE_REG_NONE;
+ old->last_fenced_ring = pipelined;
+ old->last_fenced_seqno =
+ pipelined ? i915_gem_next_request_seqno(pipelined) : 0;
+
+ drm_gem_object_unreference(&old->base);
+ } else if (obj->last_fenced_seqno == 0)
+ pipelined = NULL;
+
+ reg->obj = obj;
+ list_move_tail(&reg->lru_list, &dev_priv->mm.fence_list);
+ obj->fence_reg = reg - dev_priv->fence_regs;
+ obj->last_fenced_ring = pipelined;
+
+ reg->setup_seqno =
+ pipelined ? i915_gem_next_request_seqno(pipelined) : 0;
+ obj->last_fenced_seqno = reg->setup_seqno;
+
+update:
+ obj->tiling_changed = false;
+ switch (INTEL_INFO(dev)->gen) {
+ case 7:
+ case 6:
+ ret = sandybridge_write_fence_reg(obj, pipelined);
+ break;
+ case 5:
+ case 4:
+ ret = i965_write_fence_reg(obj, pipelined);
+ break;
+ case 3:
+ ret = i915_write_fence_reg(obj, pipelined);
+ break;
+ case 2:
+ ret = i830_write_fence_reg(obj, pipelined);
+ break;
+ }
+
+ return ret;
+}
+
+static void
+i915_gem_clear_fence_reg(struct drm_device *dev, struct drm_i915_fence_reg *reg)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ uint32_t fence_reg = reg - dev_priv->fence_regs;
+
+ switch (INTEL_INFO(dev)->gen) {
+ case 7:
+ case 6:
+ I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 + fence_reg*8, 0);
+ break;
+ case 5:
+ case 4:
+ I915_WRITE64(FENCE_REG_965_0 + fence_reg*8, 0);
+ break;
+ case 3:
+ if (fence_reg >= 8)
+ fence_reg = FENCE_REG_945_8 + (fence_reg - 8) * 4;
+ else
+ case 2:
+ fence_reg = FENCE_REG_830_0 + fence_reg * 4;
+
+ I915_WRITE(fence_reg, 0);
+ break;
+ }
+
+ list_del_init(&reg->lru_list);
+ reg->obj = NULL;
+ reg->setup_seqno = 0;
+ reg->pin_count = 0;
+}
+
+int
+i915_gem_init_object(struct drm_gem_object *obj)
+{
+
+ printf("i915_gem_init_object called\n");
+ return (0);
+}
+
+static bool
+i915_gem_object_is_inactive(struct drm_i915_gem_object *obj)
+{
+
+ return (obj->gtt_space && !obj->active && obj->pin_count == 0);
+}
+
+static void
+i915_gem_retire_task_handler(void *arg, int pending)
+{
+ drm_i915_private_t *dev_priv;
+ struct drm_device *dev;
+ bool idle;
+ int i;
+
+ dev_priv = arg;
+ dev = dev_priv->dev;
+
+ /* Come back later if the device is busy... */
+ if (!sx_try_xlock(&dev->dev_struct_lock)) {
+ taskqueue_enqueue_timeout(dev_priv->tq,
+ &dev_priv->mm.retire_task, hz);
+ return;
+ }
+
+ CTR0(KTR_DRM, "retire_task");
+
+ i915_gem_retire_requests(dev);
+
+ /* Send a periodic flush down the ring so we don't hold onto GEM
+ * objects indefinitely.
+ */
+ idle = true;
+ for (i = 0; i < I915_NUM_RINGS; i++) {
+ struct intel_ring_buffer *ring = &dev_priv->rings[i];
+
+ if (!list_empty(&ring->gpu_write_list)) {
+ struct drm_i915_gem_request *request;
+ int ret;
+
+ ret = i915_gem_flush_ring(ring,
+ 0, I915_GEM_GPU_DOMAINS);
+ request = malloc(sizeof(*request), DRM_I915_GEM,
+ M_WAITOK | M_ZERO);
+ if (ret || request == NULL ||
+ i915_add_request(ring, NULL, request))
+ free(request, DRM_I915_GEM);
+ }
+
+ idle &= list_empty(&ring->request_list);
+ }
+
+ if (!dev_priv->mm.suspended && !idle)
+ taskqueue_enqueue_timeout(dev_priv->tq,
+ &dev_priv->mm.retire_task, hz);
+
+ DRM_UNLOCK(dev);
+}
+
+void
+i915_gem_lastclose(struct drm_device *dev)
+{
+ int ret;
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ return;
+
+ ret = i915_gem_idle(dev);
+ if (ret != 0)
+ DRM_ERROR("failed to idle hardware: %d\n", ret);
+}
+
+static int
+i915_gem_init_phys_object(struct drm_device *dev, int id, int size, int align)
+{
+ drm_i915_private_t *dev_priv;
+ struct drm_i915_gem_phys_object *phys_obj;
+ int ret;
+
+ dev_priv = dev->dev_private;
+ if (dev_priv->mm.phys_objs[id - 1] != NULL || size == 0)
+ return (0);
+
+ phys_obj = malloc(sizeof(struct drm_i915_gem_phys_object), DRM_I915_GEM,
+ M_WAITOK | M_ZERO);
+
+ phys_obj->id = id;
+
+ phys_obj->handle = drm_pci_alloc(dev, size, align, ~0);
+ if (phys_obj->handle == NULL) {
+ ret = -ENOMEM;
+ goto free_obj;
+ }
+ pmap_change_attr((vm_offset_t)phys_obj->handle->vaddr,
+ size / PAGE_SIZE, PAT_WRITE_COMBINING);
+
+ dev_priv->mm.phys_objs[id - 1] = phys_obj;
+
+ return (0);
+
+free_obj:
+ free(phys_obj, DRM_I915_GEM);
+ return (ret);
+}
+
+static void
+i915_gem_free_phys_object(struct drm_device *dev, int id)
+{
+ drm_i915_private_t *dev_priv;
+ struct drm_i915_gem_phys_object *phys_obj;
+
+ dev_priv = dev->dev_private;
+ if (dev_priv->mm.phys_objs[id - 1] == NULL)
+ return;
+
+ phys_obj = dev_priv->mm.phys_objs[id - 1];
+ if (phys_obj->cur_obj != NULL)
+ i915_gem_detach_phys_object(dev, phys_obj->cur_obj);
+
+ drm_pci_free(dev, phys_obj->handle);
+ free(phys_obj, DRM_I915_GEM);
+ dev_priv->mm.phys_objs[id - 1] = NULL;
+}
+
+void
+i915_gem_free_all_phys_object(struct drm_device *dev)
+{
+ int i;
+
+ for (i = I915_GEM_PHYS_CURSOR_0; i <= I915_MAX_PHYS_OBJECT; i++)
+ i915_gem_free_phys_object(dev, i);
+}
+
+void
+i915_gem_detach_phys_object(struct drm_device *dev,
+ struct drm_i915_gem_object *obj)
+{
+ vm_page_t m;
+ struct sf_buf *sf;
+ char *vaddr, *dst;
+ int i, page_count;
+
+ if (obj->phys_obj == NULL)
+ return;
+ vaddr = obj->phys_obj->handle->vaddr;
+
+ page_count = obj->base.size / PAGE_SIZE;
+ VM_OBJECT_LOCK(obj->base.vm_obj);
+ for (i = 0; i < page_count; i++) {
+ m = i915_gem_wire_page(obj->base.vm_obj, i);
+ if (m == NULL)
+ continue; /* XXX */
+
+ VM_OBJECT_UNLOCK(obj->base.vm_obj);
+ sf = sf_buf_alloc(m, 0);
+ if (sf != NULL) {
+ dst = (char *)sf_buf_kva(sf);
+ memcpy(dst, vaddr + IDX_TO_OFF(i), PAGE_SIZE);
+ sf_buf_free(sf);
+ }
+ drm_clflush_pages(&m, 1);
+
+ VM_OBJECT_LOCK(obj->base.vm_obj);
+ vm_page_reference(m);
+ vm_page_lock(m);
+ vm_page_dirty(m);
+ vm_page_unwire(m, 0);
+ vm_page_unlock(m);
+ atomic_add_long(&i915_gem_wired_pages_cnt, -1);
+ }
+ VM_OBJECT_UNLOCK(obj->base.vm_obj);
+ intel_gtt_chipset_flush();
+
+ obj->phys_obj->cur_obj = NULL;
+ obj->phys_obj = NULL;
+}
+
+int
+i915_gem_attach_phys_object(struct drm_device *dev,
+ struct drm_i915_gem_object *obj, int id, int align)
+{
+ drm_i915_private_t *dev_priv;
+ vm_page_t m;
+ struct sf_buf *sf;
+ char *dst, *src;
+ int i, page_count, ret;
+
+ if (id > I915_MAX_PHYS_OBJECT)
+ return (-EINVAL);
+
+ if (obj->phys_obj != NULL) {
+ if (obj->phys_obj->id == id)
+ return (0);
+ i915_gem_detach_phys_object(dev, obj);
+ }
+
+ dev_priv = dev->dev_private;
+ if (dev_priv->mm.phys_objs[id - 1] == NULL) {
+ ret = i915_gem_init_phys_object(dev, id, obj->base.size, align);
+ if (ret != 0) {
+ DRM_ERROR("failed to init phys object %d size: %zu\n",
+ id, obj->base.size);
+ return (ret);
+ }
+ }
+
+ /* bind to the object */
+ obj->phys_obj = dev_priv->mm.phys_objs[id - 1];
+ obj->phys_obj->cur_obj = obj;
+
+ page_count = obj->base.size / PAGE_SIZE;
+
+ VM_OBJECT_LOCK(obj->base.vm_obj);
+ ret = 0;
+ for (i = 0; i < page_count; i++) {
+ m = i915_gem_wire_page(obj->base.vm_obj, i);
+ if (m == NULL) {
+ ret = -EIO;
+ break;
+ }
+ VM_OBJECT_UNLOCK(obj->base.vm_obj);
+ sf = sf_buf_alloc(m, 0);
+ src = (char *)sf_buf_kva(sf);
+ dst = (char *)obj->phys_obj->handle->vaddr + IDX_TO_OFF(i);
+ memcpy(dst, src, PAGE_SIZE);
+ sf_buf_free(sf);
+
+ VM_OBJECT_LOCK(obj->base.vm_obj);
+
+ vm_page_reference(m);
+ vm_page_lock(m);
+ vm_page_unwire(m, 0);
+ vm_page_unlock(m);
+ atomic_add_long(&i915_gem_wired_pages_cnt, -1);
+ }
+ VM_OBJECT_UNLOCK(obj->base.vm_obj);
+
+ return (0);
+}
+
+static int
+i915_gem_phys_pwrite(struct drm_device *dev, struct drm_i915_gem_object *obj,
+ uint64_t data_ptr, uint64_t offset, uint64_t size,
+ struct drm_file *file_priv)
+{
+ char *user_data, *vaddr;
+ int ret;
+
+ vaddr = (char *)obj->phys_obj->handle->vaddr + offset;
+ user_data = (char *)(uintptr_t)data_ptr;
+
+ if (copyin_nofault(user_data, vaddr, size) != 0) {
+ /* The physical object once assigned is fixed for the lifetime
+ * of the obj, so we can safely drop the lock and continue
+ * to access vaddr.
+ */
+ DRM_UNLOCK(dev);
+ ret = -copyin(user_data, vaddr, size);
+ DRM_LOCK(dev);
+ if (ret != 0)
+ return (ret);
+ }
+
+ intel_gtt_chipset_flush();
+ return (0);
+}
+
+static int
+i915_gpu_is_active(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv;
+
+ dev_priv = dev->dev_private;
+ return (!list_empty(&dev_priv->mm.flushing_list) ||
+ !list_empty(&dev_priv->mm.active_list));
+}
+
+static void
+i915_gem_lowmem(void *arg)
+{
+ struct drm_device *dev;
+ struct drm_i915_private *dev_priv;
+ struct drm_i915_gem_object *obj, *next;
+ int cnt, cnt_fail, cnt_total;
+
+ dev = arg;
+ dev_priv = dev->dev_private;
+
+ if (!sx_try_xlock(&dev->dev_struct_lock))
+ return;
+
+ CTR0(KTR_DRM, "gem_lowmem");
+
+rescan:
+ /* first scan for clean buffers */
+ i915_gem_retire_requests(dev);
+
+ cnt_total = cnt_fail = cnt = 0;
+
+ list_for_each_entry_safe(obj, next, &dev_priv->mm.inactive_list,
+ mm_list) {
+ if (i915_gem_object_is_purgeable(obj)) {
+ if (i915_gem_object_unbind(obj) != 0)
+ cnt_total++;
+ } else
+ cnt_total++;
+ }
+
+ /* second pass, evict/count anything still on the inactive list */
+ list_for_each_entry_safe(obj, next, &dev_priv->mm.inactive_list,
+ mm_list) {
+ if (i915_gem_object_unbind(obj) == 0)
+ cnt++;
+ else
+ cnt_fail++;
+ }
+
+ if (cnt_fail > cnt_total / 100 && i915_gpu_is_active(dev)) {
+ /*
+ * We are desperate for pages, so as a last resort, wait
+ * for the GPU to finish and discard whatever we can.
+ * This has a dramatic impact to reduce the number of
+ * OOM-killer events whilst running the GPU aggressively.
+ */
+ if (i915_gpu_idle(dev, true) == 0)
+ goto rescan;
+ }
+ DRM_UNLOCK(dev);
+}
+
+void
+i915_gem_unload(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+
+ dev_priv = dev->dev_private;
+ EVENTHANDLER_DEREGISTER(vm_lowmem, dev_priv->mm.i915_lowmem);
+}
diff --git a/sys/dev/drm2/i915/i915_gem_evict.c b/sys/dev/drm2/i915/i915_gem_evict.c
new file mode 100644
index 000000000000..0d8ac80d4d7a
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_gem_evict.c
@@ -0,0 +1,213 @@
+/*
+ * Copyright © 2008-2010 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ * Chris Wilson <chris@chris-wilson.co.uuk>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+
+static bool
+mark_free(struct drm_i915_gem_object *obj, struct list_head *unwind)
+{
+ list_add(&obj->exec_list, unwind);
+ return drm_mm_scan_add_block(obj->gtt_space);
+}
+
+int
+i915_gem_evict_something(struct drm_device *dev, int min_size,
+ unsigned alignment, bool mappable)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct list_head eviction_list, unwind_list;
+ struct drm_i915_gem_object *obj;
+ int ret = 0;
+
+ CTR4(KTR_DRM, "evict_something %p %d %u %d", dev, min_size,
+ alignment, mappable);
+
+ /*
+ * The goal is to evict objects and amalgamate space in LRU order.
+ * The oldest idle objects reside on the inactive list, which is in
+ * retirement order. The next objects to retire are those on the (per
+ * ring) active list that do not have an outstanding flush. Once the
+ * hardware reports completion (the seqno is updated after the
+ * batchbuffer has been finished) the clean buffer objects would
+ * be retired to the inactive list. Any dirty objects would be added
+ * to the tail of the flushing list. So after processing the clean
+ * active objects we need to emit a MI_FLUSH to retire the flushing
+ * list, hence the retirement order of the flushing list is in
+ * advance of the dirty objects on the active lists.
+ *
+ * The retirement sequence is thus:
+ * 1. Inactive objects (already retired)
+ * 2. Clean active objects
+ * 3. Flushing list
+ * 4. Dirty active objects.
+ *
+ * On each list, the oldest objects lie at the HEAD with the freshest
+ * object on the TAIL.
+ */
+
+ INIT_LIST_HEAD(&unwind_list);
+ if (mappable)
+ drm_mm_init_scan_with_range(&dev_priv->mm.gtt_space, min_size,
+ alignment, 0,
+ dev_priv->mm.gtt_mappable_end);
+ else
+ drm_mm_init_scan(&dev_priv->mm.gtt_space, min_size, alignment);
+
+ /* First see if there is a large enough contiguous idle region... */
+ list_for_each_entry(obj, &dev_priv->mm.inactive_list, mm_list) {
+ if (mark_free(obj, &unwind_list))
+ goto found;
+ }
+
+ /* Now merge in the soon-to-be-expired objects... */
+ list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
+ /* Does the object require an outstanding flush? */
+ if (obj->base.write_domain || obj->pin_count)
+ continue;
+
+ if (mark_free(obj, &unwind_list))
+ goto found;
+ }
+
+ /* Finally add anything with a pending flush (in order of retirement) */
+ list_for_each_entry(obj, &dev_priv->mm.flushing_list, mm_list) {
+ if (obj->pin_count)
+ continue;
+
+ if (mark_free(obj, &unwind_list))
+ goto found;
+ }
+ list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
+ if (!obj->base.write_domain || obj->pin_count)
+ continue;
+
+ if (mark_free(obj, &unwind_list))
+ goto found;
+ }
+
+ /* Nothing found, clean up and bail out! */
+ while (!list_empty(&unwind_list)) {
+ obj = list_first_entry(&unwind_list,
+ struct drm_i915_gem_object,
+ exec_list);
+
+ ret = drm_mm_scan_remove_block(obj->gtt_space);
+ KASSERT(ret == 0, ("drm_mm_scan_remove_block failed %d", ret));
+
+ list_del_init(&obj->exec_list);
+ }
+
+ /* We expect the caller to unpin, evict all and try again, or give up.
+ * So calling i915_gem_evict_everything() is unnecessary.
+ */
+ return -ENOSPC;
+
+found:
+ /* drm_mm doesn't allow any other other operations while
+ * scanning, therefore store to be evicted objects on a
+ * temporary list. */
+ INIT_LIST_HEAD(&eviction_list);
+ while (!list_empty(&unwind_list)) {
+ obj = list_first_entry(&unwind_list,
+ struct drm_i915_gem_object,
+ exec_list);
+ if (drm_mm_scan_remove_block(obj->gtt_space)) {
+ list_move(&obj->exec_list, &eviction_list);
+ drm_gem_object_reference(&obj->base);
+ continue;
+ }
+ list_del_init(&obj->exec_list);
+ }
+
+ /* Unbinding will emit any required flushes */
+ while (!list_empty(&eviction_list)) {
+ obj = list_first_entry(&eviction_list,
+ struct drm_i915_gem_object,
+ exec_list);
+ if (ret == 0)
+ ret = i915_gem_object_unbind(obj);
+
+ list_del_init(&obj->exec_list);
+ drm_gem_object_unreference(&obj->base);
+ }
+
+ return ret;
+}
+
+int
+i915_gem_evict_everything(struct drm_device *dev, bool purgeable_only)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int ret;
+ bool lists_empty;
+
+ lists_empty = (list_empty(&dev_priv->mm.inactive_list) &&
+ list_empty(&dev_priv->mm.flushing_list) &&
+ list_empty(&dev_priv->mm.active_list));
+ if (lists_empty)
+ return -ENOSPC;
+
+ CTR2(KTR_DRM, "evict_everything %p %d", dev, purgeable_only);
+
+ /* Flush everything (on to the inactive lists) and evict */
+ ret = i915_gpu_idle(dev, true);
+ if (ret)
+ return ret;
+
+ KASSERT(list_empty(&dev_priv->mm.flushing_list),
+ ("flush list not empty"));
+
+ return i915_gem_evict_inactive(dev, purgeable_only);
+}
+
+/** Unbinds all inactive objects. */
+int
+i915_gem_evict_inactive(struct drm_device *dev, bool purgeable_only)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj, *next;
+
+ CTR2(KTR_DRM, "evict_inactive %p %d", dev, purgeable_only);
+
+ list_for_each_entry_safe(obj, next,
+ &dev_priv->mm.inactive_list, mm_list) {
+ if (!purgeable_only || obj->madv != I915_MADV_WILLNEED) {
+ int ret = i915_gem_object_unbind(obj);
+ if (ret)
+ return ret;
+ }
+ }
+
+ return 0;
+}
diff --git a/sys/dev/drm2/i915/i915_gem_execbuffer.c b/sys/dev/drm2/i915/i915_gem_execbuffer.c
new file mode 100644
index 000000000000..dbd5c4e09f65
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_gem_execbuffer.c
@@ -0,0 +1,1528 @@
+/*
+ * Copyright © 2008,2010 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ * Chris Wilson <chris@chris-wilson.co.uk>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <sys/limits.h>
+#include <sys/sf_buf.h>
+
+struct change_domains {
+ uint32_t invalidate_domains;
+ uint32_t flush_domains;
+ uint32_t flush_rings;
+ uint32_t flips;
+};
+
+/*
+ * Set the next domain for the specified object. This
+ * may not actually perform the necessary flushing/invaliding though,
+ * as that may want to be batched with other set_domain operations
+ *
+ * This is (we hope) the only really tricky part of gem. The goal
+ * is fairly simple -- track which caches hold bits of the object
+ * and make sure they remain coherent. A few concrete examples may
+ * help to explain how it works. For shorthand, we use the notation
+ * (read_domains, write_domain), e.g. (CPU, CPU) to indicate the
+ * a pair of read and write domain masks.
+ *
+ * Case 1: the batch buffer
+ *
+ * 1. Allocated
+ * 2. Written by CPU
+ * 3. Mapped to GTT
+ * 4. Read by GPU
+ * 5. Unmapped from GTT
+ * 6. Freed
+ *
+ * Let's take these a step at a time
+ *
+ * 1. Allocated
+ * Pages allocated from the kernel may still have
+ * cache contents, so we set them to (CPU, CPU) always.
+ * 2. Written by CPU (using pwrite)
+ * The pwrite function calls set_domain (CPU, CPU) and
+ * this function does nothing (as nothing changes)
+ * 3. Mapped by GTT
+ * This function asserts that the object is not
+ * currently in any GPU-based read or write domains
+ * 4. Read by GPU
+ * i915_gem_execbuffer calls set_domain (COMMAND, 0).
+ * As write_domain is zero, this function adds in the
+ * current read domains (CPU+COMMAND, 0).
+ * flush_domains is set to CPU.
+ * invalidate_domains is set to COMMAND
+ * clflush is run to get data out of the CPU caches
+ * then i915_dev_set_domain calls i915_gem_flush to
+ * emit an MI_FLUSH and drm_agp_chipset_flush
+ * 5. Unmapped from GTT
+ * i915_gem_object_unbind calls set_domain (CPU, CPU)
+ * flush_domains and invalidate_domains end up both zero
+ * so no flushing/invalidating happens
+ * 6. Freed
+ * yay, done
+ *
+ * Case 2: The shared render buffer
+ *
+ * 1. Allocated
+ * 2. Mapped to GTT
+ * 3. Read/written by GPU
+ * 4. set_domain to (CPU,CPU)
+ * 5. Read/written by CPU
+ * 6. Read/written by GPU
+ *
+ * 1. Allocated
+ * Same as last example, (CPU, CPU)
+ * 2. Mapped to GTT
+ * Nothing changes (assertions find that it is not in the GPU)
+ * 3. Read/written by GPU
+ * execbuffer calls set_domain (RENDER, RENDER)
+ * flush_domains gets CPU
+ * invalidate_domains gets GPU
+ * clflush (obj)
+ * MI_FLUSH and drm_agp_chipset_flush
+ * 4. set_domain (CPU, CPU)
+ * flush_domains gets GPU
+ * invalidate_domains gets CPU
+ * wait_rendering (obj) to make sure all drawing is complete.
+ * This will include an MI_FLUSH to get the data from GPU
+ * to memory
+ * clflush (obj) to invalidate the CPU cache
+ * Another MI_FLUSH in i915_gem_flush (eliminate this somehow?)
+ * 5. Read/written by CPU
+ * cache lines are loaded and dirtied
+ * 6. Read written by GPU
+ * Same as last GPU access
+ *
+ * Case 3: The constant buffer
+ *
+ * 1. Allocated
+ * 2. Written by CPU
+ * 3. Read by GPU
+ * 4. Updated (written) by CPU again
+ * 5. Read by GPU
+ *
+ * 1. Allocated
+ * (CPU, CPU)
+ * 2. Written by CPU
+ * (CPU, CPU)
+ * 3. Read by GPU
+ * (CPU+RENDER, 0)
+ * flush_domains = CPU
+ * invalidate_domains = RENDER
+ * clflush (obj)
+ * MI_FLUSH
+ * drm_agp_chipset_flush
+ * 4. Updated (written) by CPU again
+ * (CPU, CPU)
+ * flush_domains = 0 (no previous write domain)
+ * invalidate_domains = 0 (no new read domains)
+ * 5. Read by GPU
+ * (CPU+RENDER, 0)
+ * flush_domains = CPU
+ * invalidate_domains = RENDER
+ * clflush (obj)
+ * MI_FLUSH
+ * drm_agp_chipset_flush
+ */
+static void
+i915_gem_object_set_to_gpu_domain(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *ring,
+ struct change_domains *cd)
+{
+ uint32_t invalidate_domains = 0, flush_domains = 0;
+
+ /*
+ * If the object isn't moving to a new write domain,
+ * let the object stay in multiple read domains
+ */
+ if (obj->base.pending_write_domain == 0)
+ obj->base.pending_read_domains |= obj->base.read_domains;
+
+ /*
+ * Flush the current write domain if
+ * the new read domains don't match. Invalidate
+ * any read domains which differ from the old
+ * write domain
+ */
+ if (obj->base.write_domain &&
+ (((obj->base.write_domain != obj->base.pending_read_domains ||
+ obj->ring != ring)) ||
+ (obj->fenced_gpu_access && !obj->pending_fenced_gpu_access))) {
+ flush_domains |= obj->base.write_domain;
+ invalidate_domains |=
+ obj->base.pending_read_domains & ~obj->base.write_domain;
+ }
+ /*
+ * Invalidate any read caches which may have
+ * stale data. That is, any new read domains.
+ */
+ invalidate_domains |= obj->base.pending_read_domains & ~obj->base.read_domains;
+ if ((flush_domains | invalidate_domains) & I915_GEM_DOMAIN_CPU)
+ i915_gem_clflush_object(obj);
+
+ if (obj->base.pending_write_domain)
+ cd->flips |= atomic_read(&obj->pending_flip);
+
+ /* The actual obj->write_domain will be updated with
+ * pending_write_domain after we emit the accumulated flush for all
+ * of our domain changes in execbuffers (which clears objects'
+ * write_domains). So if we have a current write domain that we
+ * aren't changing, set pending_write_domain to that.
+ */
+ if (flush_domains == 0 && obj->base.pending_write_domain == 0)
+ obj->base.pending_write_domain = obj->base.write_domain;
+
+ cd->invalidate_domains |= invalidate_domains;
+ cd->flush_domains |= flush_domains;
+ if (flush_domains & I915_GEM_GPU_DOMAINS)
+ cd->flush_rings |= intel_ring_flag(obj->ring);
+ if (invalidate_domains & I915_GEM_GPU_DOMAINS)
+ cd->flush_rings |= intel_ring_flag(ring);
+}
+
+struct eb_objects {
+ u_long hashmask;
+ LIST_HEAD(, drm_i915_gem_object) *buckets;
+};
+
+static struct eb_objects *
+eb_create(int size)
+{
+ struct eb_objects *eb;
+
+ eb = malloc(sizeof(*eb), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ eb->buckets = hashinit(size, DRM_I915_GEM, &eb->hashmask);
+ return (eb);
+}
+
+static void
+eb_reset(struct eb_objects *eb)
+{
+ int i;
+
+ for (i = 0; i <= eb->hashmask; i++)
+ LIST_INIT(&eb->buckets[i]);
+}
+
+static void
+eb_add_object(struct eb_objects *eb, struct drm_i915_gem_object *obj)
+{
+
+ LIST_INSERT_HEAD(&eb->buckets[obj->exec_handle & eb->hashmask],
+ obj, exec_node);
+}
+
+static struct drm_i915_gem_object *
+eb_get_object(struct eb_objects *eb, unsigned long handle)
+{
+ struct drm_i915_gem_object *obj;
+
+ LIST_FOREACH(obj, &eb->buckets[handle & eb->hashmask], exec_node) {
+ if (obj->exec_handle == handle)
+ return (obj);
+ }
+ return (NULL);
+}
+
+static void
+eb_destroy(struct eb_objects *eb)
+{
+
+ free(eb->buckets, DRM_I915_GEM);
+ free(eb, DRM_I915_GEM);
+}
+
+static int
+i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
+ struct eb_objects *eb,
+ struct drm_i915_gem_relocation_entry *reloc)
+{
+ struct drm_device *dev = obj->base.dev;
+ struct drm_gem_object *target_obj;
+ uint32_t target_offset;
+ int ret = -EINVAL;
+
+ /* we've already hold a reference to all valid objects */
+ target_obj = &eb_get_object(eb, reloc->target_handle)->base;
+ if (unlikely(target_obj == NULL))
+ return -ENOENT;
+
+ target_offset = to_intel_bo(target_obj)->gtt_offset;
+
+#if WATCH_RELOC
+ DRM_INFO("%s: obj %p offset %08x target %d "
+ "read %08x write %08x gtt %08x "
+ "presumed %08x delta %08x\n",
+ __func__,
+ obj,
+ (int) reloc->offset,
+ (int) reloc->target_handle,
+ (int) reloc->read_domains,
+ (int) reloc->write_domain,
+ (int) target_offset,
+ (int) reloc->presumed_offset,
+ reloc->delta);
+#endif
+
+ /* The target buffer should have appeared before us in the
+ * exec_object list, so it should have a GTT space bound by now.
+ */
+ if (unlikely(target_offset == 0)) {
+ DRM_DEBUG("No GTT space found for object %d\n",
+ reloc->target_handle);
+ return ret;
+ }
+
+ /* Validate that the target is in a valid r/w GPU domain */
+ if (unlikely(reloc->write_domain & (reloc->write_domain - 1))) {
+ DRM_DEBUG("reloc with multiple write domains: "
+ "obj %p target %d offset %d "
+ "read %08x write %08x",
+ obj, reloc->target_handle,
+ (int) reloc->offset,
+ reloc->read_domains,
+ reloc->write_domain);
+ return ret;
+ }
+ if (unlikely((reloc->write_domain | reloc->read_domains)
+ & ~I915_GEM_GPU_DOMAINS)) {
+ DRM_DEBUG("reloc with read/write non-GPU domains: "
+ "obj %p target %d offset %d "
+ "read %08x write %08x",
+ obj, reloc->target_handle,
+ (int) reloc->offset,
+ reloc->read_domains,
+ reloc->write_domain);
+ return ret;
+ }
+ if (unlikely(reloc->write_domain && target_obj->pending_write_domain &&
+ reloc->write_domain != target_obj->pending_write_domain)) {
+ DRM_DEBUG("Write domain conflict: "
+ "obj %p target %d offset %d "
+ "new %08x old %08x\n",
+ obj, reloc->target_handle,
+ (int) reloc->offset,
+ reloc->write_domain,
+ target_obj->pending_write_domain);
+ return ret;
+ }
+
+ target_obj->pending_read_domains |= reloc->read_domains;
+ target_obj->pending_write_domain |= reloc->write_domain;
+
+ /* If the relocation already has the right value in it, no
+ * more work needs to be done.
+ */
+ if (target_offset == reloc->presumed_offset)
+ return 0;
+
+ /* Check that the relocation address is valid... */
+ if (unlikely(reloc->offset > obj->base.size - 4)) {
+ DRM_DEBUG("Relocation beyond object bounds: "
+ "obj %p target %d offset %d size %d.\n",
+ obj, reloc->target_handle,
+ (int) reloc->offset,
+ (int) obj->base.size);
+ return ret;
+ }
+ if (unlikely(reloc->offset & 3)) {
+ DRM_DEBUG("Relocation not 4-byte aligned: "
+ "obj %p target %d offset %d.\n",
+ obj, reloc->target_handle,
+ (int) reloc->offset);
+ return ret;
+ }
+
+ reloc->delta += target_offset;
+ if (obj->base.write_domain == I915_GEM_DOMAIN_CPU) {
+ uint32_t page_offset = reloc->offset & PAGE_MASK;
+ char *vaddr;
+ struct sf_buf *sf;
+
+ sf = sf_buf_alloc(obj->pages[OFF_TO_IDX(reloc->offset)],
+ SFB_NOWAIT);
+ if (sf == NULL)
+ return (-ENOMEM);
+ vaddr = (void *)sf_buf_kva(sf);
+ *(uint32_t *)(vaddr + page_offset) = reloc->delta;
+ sf_buf_free(sf);
+ } else {
+ uint32_t *reloc_entry;
+ char *reloc_page;
+
+ /* We can't wait for rendering with pagefaults disabled */
+ if (obj->active && (curthread->td_pflags & TDP_NOFAULTING) != 0)
+ return (-EFAULT);
+ ret = i915_gem_object_set_to_gtt_domain(obj, 1);
+ if (ret)
+ return ret;
+
+ /*
+ * Map the page containing the relocation we're going
+ * to perform.
+ */
+ reloc->offset += obj->gtt_offset;
+ reloc_page = pmap_mapdev_attr(dev->agp->base + (reloc->offset &
+ ~PAGE_MASK), PAGE_SIZE, PAT_WRITE_COMBINING);
+ reloc_entry = (uint32_t *)(reloc_page + (reloc->offset &
+ PAGE_MASK));
+ *(volatile uint32_t *)reloc_entry = reloc->delta;
+ pmap_unmapdev((vm_offset_t)reloc_page, PAGE_SIZE);
+ }
+
+ /* and update the user's relocation entry */
+ reloc->presumed_offset = target_offset;
+
+ return 0;
+}
+
+static int
+i915_gem_execbuffer_relocate_object(struct drm_i915_gem_object *obj,
+ struct eb_objects *eb)
+{
+ struct drm_i915_gem_relocation_entry *user_relocs;
+ struct drm_i915_gem_exec_object2 *entry = obj->exec_entry;
+ struct drm_i915_gem_relocation_entry reloc;
+ int i, ret;
+
+ user_relocs = (void *)(uintptr_t)entry->relocs_ptr;
+ for (i = 0; i < entry->relocation_count; i++) {
+ ret = -copyin_nofault(user_relocs + i, &reloc, sizeof(reloc));
+ if (ret != 0)
+ return (ret);
+
+ ret = i915_gem_execbuffer_relocate_entry(obj, eb, &reloc);
+ if (ret != 0)
+ return (ret);
+
+ ret = -copyout_nofault(&reloc.presumed_offset,
+ &user_relocs[i].presumed_offset,
+ sizeof(reloc.presumed_offset));
+ if (ret != 0)
+ return (ret);
+ }
+
+ return (0);
+}
+
+static int
+i915_gem_execbuffer_relocate_object_slow(struct drm_i915_gem_object *obj,
+ struct eb_objects *eb, struct drm_i915_gem_relocation_entry *relocs)
+{
+ const struct drm_i915_gem_exec_object2 *entry = obj->exec_entry;
+ int i, ret;
+
+ for (i = 0; i < entry->relocation_count; i++) {
+ ret = i915_gem_execbuffer_relocate_entry(obj, eb, &relocs[i]);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+static int
+i915_gem_execbuffer_relocate(struct drm_device *dev,
+ struct eb_objects *eb,
+ struct list_head *objects)
+{
+ struct drm_i915_gem_object *obj;
+ int ret, pflags;
+
+ /* Try to move as many of the relocation targets off the active list
+ * to avoid unnecessary fallbacks to the slow path, as we cannot wait
+ * for the retirement with pagefaults disabled.
+ */
+ 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.
+ */
+
+ list_for_each_entry(obj, objects, exec_list) {
+ ret = i915_gem_execbuffer_relocate_object(obj, eb);
+ if (ret != 0)
+ break;
+ }
+ vm_fault_enable_pagefaults(pflags);
+ return (ret);
+}
+
+#define __EXEC_OBJECT_HAS_FENCE (1<<31)
+
+static int
+pin_and_fence_object(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *ring)
+{
+ struct drm_i915_gem_exec_object2 *entry = obj->exec_entry;
+ bool has_fenced_gpu_access = INTEL_INFO(ring->dev)->gen < 4;
+ bool need_fence, need_mappable;
+ int ret;
+
+ need_fence =
+ has_fenced_gpu_access &&
+ entry->flags & EXEC_OBJECT_NEEDS_FENCE &&
+ obj->tiling_mode != I915_TILING_NONE;
+ need_mappable =
+ entry->relocation_count ? true : need_fence;
+
+ ret = i915_gem_object_pin(obj, entry->alignment, need_mappable);
+ if (ret)
+ return ret;
+
+ if (has_fenced_gpu_access) {
+ if (entry->flags & EXEC_OBJECT_NEEDS_FENCE) {
+ if (obj->tiling_mode) {
+ ret = i915_gem_object_get_fence(obj, ring);
+ if (ret)
+ goto err_unpin;
+
+ entry->flags |= __EXEC_OBJECT_HAS_FENCE;
+ i915_gem_object_pin_fence(obj);
+ } else {
+ ret = i915_gem_object_put_fence(obj);
+ if (ret)
+ goto err_unpin;
+ }
+ obj->pending_fenced_gpu_access = true;
+ }
+ }
+
+ entry->offset = obj->gtt_offset;
+ return 0;
+
+err_unpin:
+ i915_gem_object_unpin(obj);
+ return ret;
+}
+
+static int
+i915_gem_execbuffer_reserve(struct intel_ring_buffer *ring,
+ struct drm_file *file,
+ struct list_head *objects)
+{
+ drm_i915_private_t *dev_priv;
+ struct drm_i915_gem_object *obj;
+ int ret, retry;
+ bool has_fenced_gpu_access = INTEL_INFO(ring->dev)->gen < 4;
+ struct list_head ordered_objects;
+
+ dev_priv = ring->dev->dev_private;
+ INIT_LIST_HEAD(&ordered_objects);
+ while (!list_empty(objects)) {
+ struct drm_i915_gem_exec_object2 *entry;
+ bool need_fence, need_mappable;
+
+ obj = list_first_entry(objects,
+ struct drm_i915_gem_object,
+ exec_list);
+ entry = obj->exec_entry;
+
+ need_fence =
+ has_fenced_gpu_access &&
+ entry->flags & EXEC_OBJECT_NEEDS_FENCE &&
+ obj->tiling_mode != I915_TILING_NONE;
+ need_mappable =
+ entry->relocation_count ? true : need_fence;
+
+ if (need_mappable)
+ list_move(&obj->exec_list, &ordered_objects);
+ else
+ list_move_tail(&obj->exec_list, &ordered_objects);
+
+ obj->base.pending_read_domains = 0;
+ obj->base.pending_write_domain = 0;
+ }
+ list_splice(&ordered_objects, objects);
+
+ /* Attempt to pin all of the buffers into the GTT.
+ * This is done in 3 phases:
+ *
+ * 1a. Unbind all objects that do not match the GTT constraints for
+ * the execbuffer (fenceable, mappable, alignment etc).
+ * 1b. Increment pin count for already bound objects and obtain
+ * a fence register if required.
+ * 2. Bind new objects.
+ * 3. Decrement pin count.
+ *
+ * This avoid unnecessary unbinding of later objects in order to makr
+ * room for the earlier objects *unless* we need to defragment.
+ */
+ retry = 0;
+ do {
+ ret = 0;
+
+ /* Unbind any ill-fitting objects or pin. */
+ list_for_each_entry(obj, objects, exec_list) {
+ struct drm_i915_gem_exec_object2 *entry = obj->exec_entry;
+ bool need_fence, need_mappable;
+
+ if (!obj->gtt_space)
+ continue;
+
+ need_fence =
+ has_fenced_gpu_access &&
+ entry->flags & EXEC_OBJECT_NEEDS_FENCE &&
+ obj->tiling_mode != I915_TILING_NONE;
+ need_mappable =
+ entry->relocation_count ? true : need_fence;
+
+ if ((entry->alignment && obj->gtt_offset & (entry->alignment - 1)) ||
+ (need_mappable && !obj->map_and_fenceable))
+ ret = i915_gem_object_unbind(obj);
+ else
+ ret = pin_and_fence_object(obj, ring);
+ if (ret)
+ goto err;
+ }
+
+ /* Bind fresh objects */
+ list_for_each_entry(obj, objects, exec_list) {
+ if (obj->gtt_space)
+ continue;
+
+ ret = pin_and_fence_object(obj, ring);
+ if (ret) {
+ int ret_ignore;
+
+ /* This can potentially raise a harmless
+ * -EINVAL if we failed to bind in the above
+ * call. It cannot raise -EINTR since we know
+ * that the bo is freshly bound and so will
+ * not need to be flushed or waited upon.
+ */
+ ret_ignore = i915_gem_object_unbind(obj);
+ (void)ret_ignore;
+ if (obj->gtt_space != NULL)
+ printf("%s: gtt_space\n", __func__);
+ break;
+ }
+ }
+
+ /* Decrement pin count for bound objects */
+ list_for_each_entry(obj, objects, exec_list) {
+ struct drm_i915_gem_exec_object2 *entry;
+
+ if (!obj->gtt_space)
+ continue;
+
+ entry = obj->exec_entry;
+ if (entry->flags & __EXEC_OBJECT_HAS_FENCE) {
+ i915_gem_object_unpin_fence(obj);
+ entry->flags &= ~__EXEC_OBJECT_HAS_FENCE;
+ }
+
+ i915_gem_object_unpin(obj);
+
+ /* ... and ensure ppgtt mapping exist if needed. */
+ if (dev_priv->mm.aliasing_ppgtt && !obj->has_aliasing_ppgtt_mapping) {
+ i915_ppgtt_bind_object(dev_priv->mm.aliasing_ppgtt,
+ obj, obj->cache_level);
+
+ obj->has_aliasing_ppgtt_mapping = 1;
+ }
+ }
+
+ if (ret != -ENOSPC || retry > 1)
+ return ret;
+
+ /* First attempt, just clear anything that is purgeable.
+ * Second attempt, clear the entire GTT.
+ */
+ ret = i915_gem_evict_everything(ring->dev, retry == 0);
+ if (ret)
+ return ret;
+
+ retry++;
+ } while (1);
+
+err:
+ list_for_each_entry_continue_reverse(obj, objects, exec_list) {
+ struct drm_i915_gem_exec_object2 *entry;
+
+ if (!obj->gtt_space)
+ continue;
+
+ entry = obj->exec_entry;
+ if (entry->flags & __EXEC_OBJECT_HAS_FENCE) {
+ i915_gem_object_unpin_fence(obj);
+ entry->flags &= ~__EXEC_OBJECT_HAS_FENCE;
+ }
+
+ i915_gem_object_unpin(obj);
+ }
+
+ return ret;
+}
+
+static int
+i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
+ struct drm_file *file, struct intel_ring_buffer *ring,
+ struct list_head *objects, struct eb_objects *eb,
+ struct drm_i915_gem_exec_object2 *exec, int count)
+{
+ struct drm_i915_gem_relocation_entry *reloc;
+ struct drm_i915_gem_object *obj;
+ int *reloc_offset;
+ int i, total, ret;
+
+ /* We may process another execbuffer during the unlock... */
+ while (!list_empty(objects)) {
+ obj = list_first_entry(objects,
+ struct drm_i915_gem_object,
+ exec_list);
+ list_del_init(&obj->exec_list);
+ drm_gem_object_unreference(&obj->base);
+ }
+
+ DRM_UNLOCK(dev);
+
+ total = 0;
+ for (i = 0; i < count; i++)
+ total += exec[i].relocation_count;
+
+ reloc_offset = malloc(count * sizeof(*reloc_offset), DRM_I915_GEM,
+ M_WAITOK | M_ZERO);
+ reloc = malloc(total * sizeof(*reloc), DRM_I915_GEM, M_WAITOK | M_ZERO);
+
+ total = 0;
+ for (i = 0; i < count; i++) {
+ struct drm_i915_gem_relocation_entry *user_relocs;
+
+ user_relocs = (void *)(uintptr_t)exec[i].relocs_ptr;
+ ret = -copyin(user_relocs, reloc + total,
+ exec[i].relocation_count * sizeof(*reloc));
+ if (ret != 0) {
+ DRM_LOCK(dev);
+ goto err;
+ }
+
+ reloc_offset[i] = total;
+ total += exec[i].relocation_count;
+ }
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret) {
+ DRM_LOCK(dev);
+ goto err;
+ }
+
+ /* reacquire the objects */
+ eb_reset(eb);
+ for (i = 0; i < count; i++) {
+ struct drm_i915_gem_object *obj;
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file,
+ exec[i].handle));
+ if (&obj->base == NULL) {
+ DRM_DEBUG("Invalid object handle %d at index %d\n",
+ exec[i].handle, i);
+ ret = -ENOENT;
+ goto err;
+ }
+
+ list_add_tail(&obj->exec_list, objects);
+ obj->exec_handle = exec[i].handle;
+ obj->exec_entry = &exec[i];
+ eb_add_object(eb, obj);
+ }
+
+ ret = i915_gem_execbuffer_reserve(ring, file, objects);
+ if (ret)
+ goto err;
+
+ list_for_each_entry(obj, objects, exec_list) {
+ int offset = obj->exec_entry - exec;
+ ret = i915_gem_execbuffer_relocate_object_slow(obj, eb,
+ reloc + reloc_offset[offset]);
+ if (ret)
+ goto err;
+ }
+
+ /* Leave the user relocations as are, this is the painfully slow path,
+ * and we want to avoid the complication of dropping the lock whilst
+ * having buffers reserved in the aperture and so causing spurious
+ * ENOSPC for random operations.
+ */
+
+err:
+ free(reloc, DRM_I915_GEM);
+ free(reloc_offset, DRM_I915_GEM);
+ return ret;
+}
+
+static int
+i915_gem_execbuffer_flush(struct drm_device *dev,
+ uint32_t invalidate_domains,
+ uint32_t flush_domains,
+ uint32_t flush_rings)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int i, ret;
+
+ if (flush_domains & I915_GEM_DOMAIN_CPU)
+ intel_gtt_chipset_flush();
+
+ if (flush_domains & I915_GEM_DOMAIN_GTT)
+ wmb();
+
+ if ((flush_domains | invalidate_domains) & I915_GEM_GPU_DOMAINS) {
+ for (i = 0; i < I915_NUM_RINGS; i++)
+ if (flush_rings & (1 << i)) {
+ ret = i915_gem_flush_ring(&dev_priv->rings[i],
+ invalidate_domains, flush_domains);
+ if (ret)
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static bool
+intel_enable_semaphores(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)
+ return !intel_iommu_enabled;
+
+ return 1;
+}
+
+static int
+i915_gem_execbuffer_sync_rings(struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *to)
+{
+ struct intel_ring_buffer *from = obj->ring;
+ u32 seqno;
+ int ret, idx;
+
+ if (from == NULL || to == from)
+ return 0;
+
+ /* XXX gpu semaphores are implicated in various hard hangs on SNB */
+ if (!intel_enable_semaphores(obj->base.dev))
+ return i915_gem_object_wait_rendering(obj);
+
+ idx = intel_ring_sync_index(from, to);
+
+ seqno = obj->last_rendering_seqno;
+ if (seqno <= from->sync_seqno[idx])
+ return 0;
+
+ if (seqno == from->outstanding_lazy_request) {
+ struct drm_i915_gem_request *request;
+
+ request = malloc(sizeof(*request), DRM_I915_GEM,
+ M_WAITOK | M_ZERO);
+ ret = i915_add_request(from, NULL, request);
+ if (ret) {
+ free(request, DRM_I915_GEM);
+ return ret;
+ }
+
+ seqno = request->seqno;
+ }
+
+ from->sync_seqno[idx] = seqno;
+
+ return to->sync_to(to, from, seqno - 1);
+}
+
+static int
+i915_gem_execbuffer_wait_for_flips(struct intel_ring_buffer *ring, u32 flips)
+{
+ u32 plane, flip_mask;
+ int ret;
+
+ /* Check for any pending flips. As we only maintain a flip queue depth
+ * of 1, we can simply insert a WAIT for the next display flip prior
+ * to executing the batch and avoid stalling the CPU.
+ */
+
+ for (plane = 0; flips >> plane; plane++) {
+ if (((flips >> plane) & 1) == 0)
+ continue;
+
+ if (plane)
+ flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
+ else
+ flip_mask = MI_WAIT_FOR_PLANE_A_FLIP;
+
+ ret = intel_ring_begin(ring, 2);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, MI_WAIT_FOR_EVENT | flip_mask);
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_advance(ring);
+ }
+
+ return 0;
+}
+
+static int
+i915_gem_execbuffer_move_to_gpu(struct intel_ring_buffer *ring,
+ struct list_head *objects)
+{
+ struct drm_i915_gem_object *obj;
+ struct change_domains cd;
+ int ret;
+
+ memset(&cd, 0, sizeof(cd));
+ list_for_each_entry(obj, objects, exec_list)
+ i915_gem_object_set_to_gpu_domain(obj, ring, &cd);
+
+ if (cd.invalidate_domains | cd.flush_domains) {
+#if WATCH_EXEC
+ DRM_INFO("%s: invalidate_domains %08x flush_domains %08x\n",
+ __func__,
+ cd.invalidate_domains,
+ cd.flush_domains);
+#endif
+ ret = i915_gem_execbuffer_flush(ring->dev,
+ cd.invalidate_domains,
+ cd.flush_domains,
+ cd.flush_rings);
+ if (ret)
+ return ret;
+ }
+
+ if (cd.flips) {
+ ret = i915_gem_execbuffer_wait_for_flips(ring, cd.flips);
+ if (ret)
+ return ret;
+ }
+
+ list_for_each_entry(obj, objects, exec_list) {
+ ret = i915_gem_execbuffer_sync_rings(obj, ring);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+static bool
+i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
+{
+ return ((exec->batch_start_offset | exec->batch_len) & 0x7) == 0;
+}
+
+static int
+validate_exec_list(struct drm_i915_gem_exec_object2 *exec, int count,
+ vm_page_t ***map)
+{
+ 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);
+ for (i = 0; i < count; i++) {
+ /* First check for malicious input causing overflow */
+ if (exec[i].relocation_count >
+ INT_MAX / sizeof(struct drm_i915_gem_relocation_entry))
+ return -EINVAL;
+
+ length = exec[i].relocation_count *
+ 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
+ * conservative and request a page slot for each
+ * partial page. Thus +2.
+ */
+ 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) {
+ free(ma, DRM_I915_GEM);
+ (*map)[i] = NULL;
+ return (-EFAULT);
+ }
+ }
+
+ return 0;
+}
+
+static void
+i915_gem_execbuffer_move_to_active(struct list_head *objects,
+ struct intel_ring_buffer *ring,
+ u32 seqno)
+{
+ struct drm_i915_gem_object *obj;
+ uint32_t old_read, old_write;
+
+ list_for_each_entry(obj, objects, exec_list) {
+ old_read = obj->base.read_domains;
+ old_write = obj->base.write_domain;
+
+ obj->base.read_domains = obj->base.pending_read_domains;
+ obj->base.write_domain = obj->base.pending_write_domain;
+ obj->fenced_gpu_access = obj->pending_fenced_gpu_access;
+
+ i915_gem_object_move_to_active(obj, ring, seqno);
+ if (obj->base.write_domain) {
+ obj->dirty = 1;
+ obj->pending_gpu_write = true;
+ list_move_tail(&obj->gpu_write_list,
+ &ring->gpu_write_list);
+ intel_mark_busy(ring->dev, obj);
+ }
+ CTR3(KTR_DRM, "object_change_domain move_to_active %p %x %x",
+ obj, old_read, old_write);
+ }
+}
+
+int i915_gem_sync_exec_requests;
+
+static void
+i915_gem_execbuffer_retire_commands(struct drm_device *dev,
+ struct drm_file *file,
+ struct intel_ring_buffer *ring)
+{
+ struct drm_i915_gem_request *request;
+ u32 invalidate;
+
+ /*
+ * Ensure that the commands in the batch buffer are
+ * finished before the interrupt fires.
+ *
+ * The sampler always gets flushed on i965 (sigh).
+ */
+ invalidate = I915_GEM_DOMAIN_COMMAND;
+ if (INTEL_INFO(dev)->gen >= 4)
+ invalidate |= I915_GEM_DOMAIN_SAMPLER;
+ if (ring->flush(ring, invalidate, 0)) {
+ i915_gem_next_request_seqno(ring);
+ return;
+ }
+
+ /* Add a breadcrumb for the completion of the batch buffer */
+ request = malloc(sizeof(*request), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ if (request == NULL || i915_add_request(ring, file, request)) {
+ i915_gem_next_request_seqno(ring);
+ free(request, DRM_I915_GEM);
+ } else if (i915_gem_sync_exec_requests)
+ i915_wait_request(ring, request->seqno, true);
+}
+
+static void
+i915_gem_fix_mi_batchbuffer_end(struct drm_i915_gem_object *batch_obj,
+ uint32_t batch_start_offset, uint32_t batch_len)
+{
+ 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)
+ po_r -= 4;
+ mkva = pmap_mapdev_attr(trunc_page(po_r), 2 * PAGE_SIZE,
+ PAT_WRITE_COMBINING);
+ po_r &= PAGE_MASK;
+ cmd = *(uint32_t *)(mkva + po_r);
+
+ if (cmd != MI_BATCH_BUFFER_END) {
+ /*
+ * batch_len != 0 due to the check at the start of
+ * i915_gem_do_execbuffer
+ */
+ if (batch_obj->base.size > batch_start_offset + batch_len) {
+ po_w = po_r + 4;
+/* DRM_DEBUG("batchbuffer does not end by MI_BATCH_BUFFER_END !\n"); */
+ } else {
+ po_w = po_r;
+DRM_DEBUG("batchbuffer does not end by MI_BATCH_BUFFER_END, overwriting last bo cmd !\n");
+ }
+ *(uint32_t *)(mkva + po_w) = MI_BATCH_BUFFER_END;
+ }
+
+ pmap_unmapdev((vm_offset_t)mkva, 2 * PAGE_SIZE);
+}
+
+int i915_fix_mi_batchbuffer_end = 0;
+
+ static int
+i915_reset_gen7_sol_offsets(struct drm_device *dev,
+ struct intel_ring_buffer *ring)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int ret, i;
+
+ if (!IS_GEN7(dev) || ring != &dev_priv->rings[RCS])
+ return 0;
+
+ ret = intel_ring_begin(ring, 4 * 3);
+ if (ret)
+ return ret;
+
+ for (i = 0; i < 4; i++) {
+ intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
+ intel_ring_emit(ring, GEN7_SO_WRITE_OFFSET(i));
+ intel_ring_emit(ring, 0);
+ }
+
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+static int
+i915_gem_do_execbuffer(struct drm_device *dev, void *data,
+ struct drm_file *file,
+ struct drm_i915_gem_execbuffer2 *args,
+ struct drm_i915_gem_exec_object2 *exec)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct list_head objects;
+ struct eb_objects *eb;
+ struct drm_i915_gem_object *batch_obj;
+ struct drm_clip_rect *cliprects = NULL;
+ struct intel_ring_buffer *ring;
+ vm_page_t **relocs_ma;
+ u32 exec_start, exec_len;
+ u32 seqno;
+ u32 mask;
+ int ret, mode, i;
+
+ if (!i915_gem_check_execbuffer(args)) {
+ DRM_DEBUG("execbuf with invalid offset/length\n");
+ return -EINVAL;
+ }
+
+ 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;
+
+ switch (args->flags & I915_EXEC_RING_MASK) {
+ case I915_EXEC_DEFAULT:
+ case I915_EXEC_RENDER:
+ ring = &dev_priv->rings[RCS];
+ break;
+ case I915_EXEC_BSD:
+ if (!HAS_BSD(dev)) {
+ DRM_DEBUG("execbuf with invalid ring (BSD)\n");
+ return -EINVAL;
+ }
+ ring = &dev_priv->rings[VCS];
+ break;
+ case I915_EXEC_BLT:
+ if (!HAS_BLT(dev)) {
+ DRM_DEBUG("execbuf with invalid ring (BLT)\n");
+ return -EINVAL;
+ }
+ ring = &dev_priv->rings[BCS];
+ break;
+ default:
+ DRM_DEBUG("execbuf with unknown ring: %d\n",
+ (int)(args->flags & I915_EXEC_RING_MASK));
+ ret = -EINVAL;
+ goto pre_struct_lock_err;
+ }
+
+ mode = args->flags & I915_EXEC_CONSTANTS_MASK;
+ mask = I915_EXEC_CONSTANTS_MASK;
+ switch (mode) {
+ case I915_EXEC_CONSTANTS_REL_GENERAL:
+ case I915_EXEC_CONSTANTS_ABSOLUTE:
+ case I915_EXEC_CONSTANTS_REL_SURFACE:
+ if (ring == &dev_priv->rings[RCS] &&
+ mode != dev_priv->relative_constants_mode) {
+ if (INTEL_INFO(dev)->gen < 4) {
+ ret = -EINVAL;
+ goto pre_struct_lock_err;
+ }
+
+ if (INTEL_INFO(dev)->gen > 5 &&
+ mode == I915_EXEC_CONSTANTS_REL_SURFACE) {
+ ret = -EINVAL;
+ goto pre_struct_lock_err;
+ }
+
+ /* The HW changed the meaning on this bit on gen6 */
+ if (INTEL_INFO(dev)->gen >= 6)
+ mask &= ~I915_EXEC_CONSTANTS_REL_SURFACE;
+ }
+ break;
+ default:
+ DRM_DEBUG("execbuf with unknown constants: %d\n", mode);
+ ret = -EINVAL;
+ goto pre_struct_lock_err;
+ }
+
+ if (args->buffer_count < 1) {
+ DRM_DEBUG("execbuf with %d buffers\n", args->buffer_count);
+ ret = -EINVAL;
+ goto pre_struct_lock_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;
+ }
+
+ 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;
+ }
+ cliprects = malloc( sizeof(*cliprects) * args->num_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;
+ }
+
+ ret = i915_mutex_lock_interruptible(dev);
+ if (ret)
+ goto pre_struct_lock_err;
+
+ if (dev_priv->mm.suspended) {
+ ret = -EBUSY;
+ goto struct_lock_err;
+ }
+
+ eb = eb_create(args->buffer_count);
+ if (eb == NULL) {
+ ret = -ENOMEM;
+ goto struct_lock_err;
+ }
+
+ /* Look up object handles */
+ INIT_LIST_HEAD(&objects);
+ for (i = 0; i < args->buffer_count; i++) {
+ struct drm_i915_gem_object *obj;
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file,
+ exec[i].handle));
+ if (&obj->base == NULL) {
+ DRM_DEBUG("Invalid object handle %d at index %d\n",
+ exec[i].handle, i);
+ /* prevent error path from reading uninitialized data */
+ ret = -ENOENT;
+ goto err;
+ }
+
+ if (!list_empty(&obj->exec_list)) {
+ DRM_DEBUG("Object %p [handle %d, index %d] appears more than once in object list\n",
+ obj, exec[i].handle, i);
+ ret = -EINVAL;
+ goto err;
+ }
+
+ list_add_tail(&obj->exec_list, &objects);
+ obj->exec_handle = exec[i].handle;
+ obj->exec_entry = &exec[i];
+ eb_add_object(eb, obj);
+ }
+
+ /* take note of the batch buffer before we might reorder the lists */
+ batch_obj = list_entry(objects.prev,
+ struct drm_i915_gem_object,
+ exec_list);
+
+ /* Move the objects en-masse into the GTT, evicting if necessary. */
+ ret = i915_gem_execbuffer_reserve(ring, file, &objects);
+ if (ret)
+ goto err;
+
+ /* The objects are in their final locations, apply the relocations. */
+ ret = i915_gem_execbuffer_relocate(dev, eb, &objects);
+ if (ret) {
+ if (ret == -EFAULT) {
+ ret = i915_gem_execbuffer_relocate_slow(dev, file, ring,
+ &objects, eb, exec, args->buffer_count);
+ DRM_LOCK_ASSERT(dev);
+ }
+ if (ret)
+ goto err;
+ }
+
+ /* Set the pending read domains for the batch buffer to COMMAND */
+ if (batch_obj->base.pending_write_domain) {
+ DRM_DEBUG("Attempting to use self-modifying batch buffer\n");
+ ret = -EINVAL;
+ goto err;
+ }
+ batch_obj->base.pending_read_domains |= I915_GEM_DOMAIN_COMMAND;
+
+ ret = i915_gem_execbuffer_move_to_gpu(ring, &objects);
+ if (ret)
+ goto err;
+
+ seqno = i915_gem_next_request_seqno(ring);
+ for (i = 0; i < I915_NUM_RINGS - 1; i++) {
+ if (seqno < ring->sync_seqno[i]) {
+ /* The GPU can not handle its semaphore value wrapping,
+ * so every billion or so execbuffers, we need to stall
+ * the GPU in order to reset the counters.
+ */
+ ret = i915_gpu_idle(dev, true);
+ if (ret)
+ goto err;
+
+ KASSERT(ring->sync_seqno[i] == 0, ("Non-zero sync_seqno"));
+ }
+ }
+
+ if (ring == &dev_priv->rings[RCS] &&
+ mode != dev_priv->relative_constants_mode) {
+ ret = intel_ring_begin(ring, 4);
+ if (ret)
+ goto err;
+
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
+ intel_ring_emit(ring, INSTPM);
+ intel_ring_emit(ring, mask << 16 | mode);
+ intel_ring_advance(ring);
+
+ dev_priv->relative_constants_mode = mode;
+ }
+
+ if (args->flags & I915_EXEC_GEN7_SOL_RESET) {
+ ret = i915_reset_gen7_sol_offsets(dev, ring);
+ if (ret)
+ goto err;
+ }
+
+ exec_start = batch_obj->gtt_offset + args->batch_start_offset;
+ exec_len = args->batch_len;
+
+ if (i915_fix_mi_batchbuffer_end) {
+ i915_gem_fix_mi_batchbuffer_end(batch_obj,
+ 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_p(dev, &cliprects[i],
+ args->DR1, args->DR4);
+ if (ret)
+ goto err;
+
+ ret = ring->dispatch_execbuffer(ring, exec_start,
+ exec_len);
+ if (ret)
+ goto err;
+ }
+ } else {
+ ret = ring->dispatch_execbuffer(ring, exec_start, exec_len);
+ if (ret)
+ goto err;
+ }
+
+ i915_gem_execbuffer_move_to_active(&objects, ring, seqno);
+ i915_gem_execbuffer_retire_commands(dev, file, ring);
+
+err:
+ eb_destroy(eb);
+ while (!list_empty(&objects)) {
+ struct drm_i915_gem_object *obj;
+
+ obj = list_first_entry(&objects, struct drm_i915_gem_object,
+ exec_list);
+ list_del_init(&obj->exec_list);
+ drm_gem_object_unreference(&obj->base);
+ }
+struct_lock_err:
+ DRM_UNLOCK(dev);
+
+pre_struct_lock_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));
+ free(relocs_ma[i], DRM_I915_GEM);
+ }
+ }
+ free(relocs_ma, DRM_I915_GEM);
+ free(cliprects, DRM_I915_GEM);
+ return ret;
+}
+
+/*
+ * Legacy execbuffer just creates an exec2 list from the original exec object
+ * list array and passes it to the real function.
+ */
+int
+i915_gem_execbuffer(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_execbuffer *args = data;
+ struct drm_i915_gem_execbuffer2 exec2;
+ struct drm_i915_gem_exec_object *exec_list = NULL;
+ struct drm_i915_gem_exec_object2 *exec2_list = NULL;
+ int ret, i;
+
+ DRM_DEBUG("buffers_ptr %d buffer_count %d len %08x\n",
+ (int) args->buffers_ptr, args->buffer_count, args->batch_len);
+
+ if (args->buffer_count < 1) {
+ DRM_DEBUG("execbuf with %d buffers\n", args->buffer_count);
+ return -EINVAL;
+ }
+
+ /* Copy in the exec list from userland */
+ /* XXXKIB user-controlled malloc size */
+ exec_list = malloc(sizeof(*exec_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, exec_list,
+ sizeof(*exec_list) * args->buffer_count);
+ if (ret != 0) {
+ DRM_DEBUG("copy %d exec entries failed %d\n",
+ args->buffer_count, ret);
+ free(exec_list, DRM_I915_GEM);
+ free(exec2_list, DRM_I915_GEM);
+ return (ret);
+ }
+
+ for (i = 0; i < args->buffer_count; i++) {
+ exec2_list[i].handle = exec_list[i].handle;
+ exec2_list[i].relocation_count = exec_list[i].relocation_count;
+ exec2_list[i].relocs_ptr = exec_list[i].relocs_ptr;
+ exec2_list[i].alignment = exec_list[i].alignment;
+ exec2_list[i].offset = exec_list[i].offset;
+ if (INTEL_INFO(dev)->gen < 4)
+ exec2_list[i].flags = EXEC_OBJECT_NEEDS_FENCE;
+ else
+ exec2_list[i].flags = 0;
+ }
+
+ exec2.buffers_ptr = args->buffers_ptr;
+ exec2.buffer_count = args->buffer_count;
+ exec2.batch_start_offset = args->batch_start_offset;
+ exec2.batch_len = args->batch_len;
+ exec2.DR1 = args->DR1;
+ exec2.DR4 = args->DR4;
+ exec2.num_cliprects = args->num_cliprects;
+ exec2.cliprects_ptr = args->cliprects_ptr;
+ exec2.flags = I915_EXEC_RENDER;
+
+ ret = i915_gem_do_execbuffer(dev, data, file, &exec2, exec2_list);
+ if (!ret) {
+ /* Copy the new buffer offsets back to the user's exec list. */
+ for (i = 0; i < args->buffer_count; i++)
+ exec_list[i].offset = exec2_list[i].offset;
+ /* ... and back out to userspace */
+ ret = -copyout(exec_list, (void *)(uintptr_t)args->buffers_ptr,
+ sizeof(*exec_list) * args->buffer_count);
+ if (ret != 0) {
+ DRM_DEBUG("failed to copy %d exec entries "
+ "back to user (%d)\n",
+ args->buffer_count, ret);
+ }
+ }
+
+ free(exec_list, DRM_I915_GEM);
+ free(exec2_list, DRM_I915_GEM);
+ return ret;
+}
+
+int
+i915_gem_execbuffer2(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_execbuffer2 *args = data;
+ struct drm_i915_gem_exec_object2 *exec2_list = NULL;
+ int ret;
+
+ DRM_DEBUG("buffers_ptr %jx buffer_count %d len %08x\n",
+ (uintmax_t)args->buffers_ptr, args->buffer_count, args->batch_len);
+
+ if (args->buffer_count < 1 ||
+ args->buffer_count > UINT_MAX / sizeof(*exec2_list)) {
+ DRM_DEBUG("execbuf2 with %d buffers\n", args->buffer_count);
+ return -EINVAL;
+ }
+
+ /* XXXKIB user-controllable malloc size */
+ 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) {
+ DRM_DEBUG("copy %d exec entries failed %d\n",
+ args->buffer_count, ret);
+ free(exec2_list, DRM_I915_GEM);
+ return (ret);
+ }
+
+ ret = i915_gem_do_execbuffer(dev, data, file, args, exec2_list);
+ if (!ret) {
+ /* Copy the new buffer offsets back to the user's exec list. */
+ ret = -copyout(exec2_list, (void *)(uintptr_t)args->buffers_ptr,
+ sizeof(*exec2_list) * args->buffer_count);
+ if (ret) {
+ DRM_DEBUG("failed to copy %d exec entries "
+ "back to user (%d)\n",
+ args->buffer_count, ret);
+ }
+ }
+
+ free(exec2_list, DRM_I915_GEM);
+ return ret;
+}
diff --git a/sys/dev/drm2/i915/i915_gem_gtt.c b/sys/dev/drm2/i915/i915_gem_gtt.c
new file mode 100644
index 000000000000..90899dede225
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_gem_gtt.c
@@ -0,0 +1,329 @@
+/*
+ * Copyright © 2010 Daniel Vetter
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <sys/sched.h>
+#include <sys/sf_buf.h>
+
+/* PPGTT support for Sandybdrige/Gen6 and later */
+static void
+i915_ppgtt_clear_range(struct i915_hw_ppgtt *ppgtt,
+ unsigned first_entry, unsigned num_entries)
+{
+ uint32_t *pt_vaddr;
+ uint32_t scratch_pte;
+ struct sf_buf *sf;
+ unsigned act_pd, first_pte, last_pte, i;
+
+ act_pd = first_entry / I915_PPGTT_PT_ENTRIES;
+ first_pte = first_entry % I915_PPGTT_PT_ENTRIES;
+
+ scratch_pte = GEN6_PTE_ADDR_ENCODE(ppgtt->scratch_page_dma_addr);
+ scratch_pte |= GEN6_PTE_VALID | GEN6_PTE_CACHE_LLC;
+
+ while (num_entries) {
+ last_pte = first_pte + num_entries;
+ if (last_pte > I915_PPGTT_PT_ENTRIES)
+ last_pte = I915_PPGTT_PT_ENTRIES;
+
+ sched_pin();
+ sf = sf_buf_alloc(ppgtt->pt_pages[act_pd], SFB_CPUPRIVATE);
+ pt_vaddr = (uint32_t *)(uintptr_t)sf_buf_kva(sf);
+
+ for (i = first_pte; i < last_pte; i++)
+ pt_vaddr[i] = scratch_pte;
+
+ sf_buf_free(sf);
+ sched_unpin();
+
+ num_entries -= last_pte - first_pte;
+ first_pte = 0;
+ act_pd++;
+ }
+
+}
+
+int
+i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+ struct i915_hw_ppgtt *ppgtt;
+ u_int first_pd_entry_in_global_pt, i;
+
+ dev_priv = dev->dev_private;
+
+ /*
+ * ppgtt PDEs reside in the global gtt pagetable, which has 512*1024
+ * entries. For aliasing ppgtt support we just steal them at the end for
+ * now.
+ */
+ first_pd_entry_in_global_pt = 512 * 1024 - I915_PPGTT_PD_ENTRIES;
+
+ ppgtt = malloc(sizeof(*ppgtt), DRM_I915_GEM, M_WAITOK | M_ZERO);
+
+ ppgtt->num_pd_entries = I915_PPGTT_PD_ENTRIES;
+ ppgtt->pt_pages = malloc(sizeof(vm_page_t) * ppgtt->num_pd_entries,
+ DRM_I915_GEM, M_WAITOK | M_ZERO);
+
+ for (i = 0; i < ppgtt->num_pd_entries; i++) {
+ ppgtt->pt_pages[i] = vm_page_alloc(NULL, 0,
+ VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED |
+ VM_ALLOC_ZERO);
+ if (ppgtt->pt_pages[i] == NULL) {
+ dev_priv->mm.aliasing_ppgtt = ppgtt;
+ i915_gem_cleanup_aliasing_ppgtt(dev);
+ return (-ENOMEM);
+ }
+ }
+
+ ppgtt->scratch_page_dma_addr = dev_priv->mm.gtt.scratch_page_dma;
+
+ i915_ppgtt_clear_range(ppgtt, 0, ppgtt->num_pd_entries *
+ I915_PPGTT_PT_ENTRIES);
+ ppgtt->pd_offset = (first_pd_entry_in_global_pt) * sizeof(uint32_t);
+ dev_priv->mm.aliasing_ppgtt = ppgtt;
+ return (0);
+}
+
+static void
+i915_ppgtt_insert_pages(struct i915_hw_ppgtt *ppgtt, unsigned first_entry,
+ unsigned num_entries, vm_page_t *pages, uint32_t pte_flags)
+{
+ uint32_t *pt_vaddr, pte;
+ struct sf_buf *sf;
+ unsigned act_pd, first_pte;
+ unsigned last_pte, i;
+ vm_paddr_t page_addr;
+
+ act_pd = first_entry / I915_PPGTT_PT_ENTRIES;
+ first_pte = first_entry % I915_PPGTT_PT_ENTRIES;
+
+ while (num_entries) {
+ last_pte = first_pte + num_entries;
+ if (last_pte > I915_PPGTT_PT_ENTRIES)
+ last_pte = I915_PPGTT_PT_ENTRIES;
+
+ sched_pin();
+ sf = sf_buf_alloc(ppgtt->pt_pages[act_pd], SFB_CPUPRIVATE);
+ pt_vaddr = (uint32_t *)(uintptr_t)sf_buf_kva(sf);
+
+ for (i = first_pte; i < last_pte; i++) {
+ page_addr = VM_PAGE_TO_PHYS(*pages);
+ pte = GEN6_PTE_ADDR_ENCODE(page_addr);
+ pt_vaddr[i] = pte | pte_flags;
+
+ pages++;
+ }
+
+ sf_buf_free(sf);
+ sched_unpin();
+
+ num_entries -= last_pte - first_pte;
+ first_pte = 0;
+ act_pd++;
+ }
+}
+
+void
+i915_ppgtt_bind_object(struct i915_hw_ppgtt *ppgtt,
+ struct drm_i915_gem_object *obj, enum i915_cache_level cache_level)
+{
+ struct drm_device *dev;
+ struct drm_i915_private *dev_priv;
+ uint32_t pte_flags;
+
+ dev = obj->base.dev;
+ dev_priv = dev->dev_private;
+ pte_flags = GEN6_PTE_VALID;
+
+ switch (cache_level) {
+ case I915_CACHE_LLC_MLC:
+ pte_flags |= GEN6_PTE_CACHE_LLC_MLC;
+ break;
+ case I915_CACHE_LLC:
+ pte_flags |= GEN6_PTE_CACHE_LLC;
+ break;
+ case I915_CACHE_NONE:
+ pte_flags |= GEN6_PTE_UNCACHED;
+ break;
+ default:
+ panic("cache mode");
+ }
+
+ i915_ppgtt_insert_pages(ppgtt, obj->gtt_space->start >> PAGE_SHIFT,
+ obj->base.size >> PAGE_SHIFT, obj->pages, pte_flags);
+}
+
+void i915_ppgtt_unbind_object(struct i915_hw_ppgtt *ppgtt,
+ struct drm_i915_gem_object *obj)
+{
+ i915_ppgtt_clear_range(ppgtt, obj->gtt_space->start >> PAGE_SHIFT,
+ obj->base.size >> PAGE_SHIFT);
+}
+
+void
+i915_gem_cleanup_aliasing_ppgtt(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+ struct i915_hw_ppgtt *ppgtt;
+ vm_page_t m;
+ int i;
+
+ dev_priv = dev->dev_private;
+ ppgtt = dev_priv->mm.aliasing_ppgtt;
+ if (ppgtt == NULL)
+ return;
+ dev_priv->mm.aliasing_ppgtt = NULL;
+
+ for (i = 0; i < ppgtt->num_pd_entries; i++) {
+ m = ppgtt->pt_pages[i];
+ if (m != NULL) {
+ vm_page_unwire(m, 0);
+ vm_page_free(m);
+ }
+ }
+ free(ppgtt->pt_pages, DRM_I915_GEM);
+ free(ppgtt, DRM_I915_GEM);
+}
+
+
+static unsigned int
+cache_level_to_agp_type(struct drm_device *dev, enum i915_cache_level
+ cache_level)
+{
+
+ switch (cache_level) {
+ case I915_CACHE_LLC_MLC:
+ if (INTEL_INFO(dev)->gen >= 6)
+ return (AGP_USER_CACHED_MEMORY_LLC_MLC);
+ /*
+ * Older chipsets do not have this extra level of CPU
+ * cacheing, so fallthrough and request the PTE simply
+ * as cached.
+ */
+ case I915_CACHE_LLC:
+ return (AGP_USER_CACHED_MEMORY);
+
+ default:
+ case I915_CACHE_NONE:
+ return (AGP_USER_MEMORY);
+ }
+}
+
+static bool
+do_idling(struct drm_i915_private *dev_priv)
+{
+ bool ret = dev_priv->mm.interruptible;
+
+ if (dev_priv->mm.gtt.do_idle_maps) {
+ dev_priv->mm.interruptible = false;
+ if (i915_gpu_idle(dev_priv->dev, false)) {
+ DRM_ERROR("Couldn't idle GPU\n");
+ /* Wait a bit, in hopes it avoids the hang */
+ DELAY(10);
+ }
+ }
+
+ return ret;
+}
+
+static void
+undo_idling(struct drm_i915_private *dev_priv, bool interruptible)
+{
+
+ if (dev_priv->mm.gtt.do_idle_maps)
+ dev_priv->mm.interruptible = interruptible;
+}
+
+void
+i915_gem_restore_gtt_mappings(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+ struct drm_i915_gem_object *obj;
+
+ dev_priv = dev->dev_private;
+
+ /* First fill our portion of the GTT with scratch pages */
+ intel_gtt_clear_range(dev_priv->mm.gtt_start / PAGE_SIZE,
+ (dev_priv->mm.gtt_end - dev_priv->mm.gtt_start) / PAGE_SIZE);
+
+ list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) {
+ i915_gem_clflush_object(obj);
+ i915_gem_gtt_rebind_object(obj, obj->cache_level);
+ }
+
+ intel_gtt_chipset_flush();
+}
+
+int
+i915_gem_gtt_bind_object(struct drm_i915_gem_object *obj)
+{
+ unsigned int agp_type;
+
+ agp_type = cache_level_to_agp_type(obj->base.dev, obj->cache_level);
+ intel_gtt_insert_pages(obj->gtt_space->start >> PAGE_SHIFT,
+ obj->base.size >> PAGE_SHIFT, obj->pages, agp_type);
+ return (0);
+}
+
+void
+i915_gem_gtt_rebind_object(struct drm_i915_gem_object *obj,
+ enum i915_cache_level cache_level)
+{
+ struct drm_device *dev;
+ struct drm_i915_private *dev_priv;
+ unsigned int agp_type;
+
+ dev = obj->base.dev;
+ dev_priv = dev->dev_private;
+ agp_type = cache_level_to_agp_type(dev, cache_level);
+
+ intel_gtt_insert_pages(obj->gtt_space->start >> PAGE_SHIFT,
+ obj->base.size >> PAGE_SHIFT, obj->pages, agp_type);
+}
+
+void
+i915_gem_gtt_unbind_object(struct drm_i915_gem_object *obj)
+{
+ struct drm_device *dev = obj->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ bool interruptible;
+
+ dev = obj->base.dev;
+ dev_priv = dev->dev_private;
+
+ interruptible = do_idling(dev_priv);
+
+ intel_gtt_clear_range(obj->gtt_space->start >> PAGE_SHIFT,
+ obj->base.size >> PAGE_SHIFT);
+
+ undo_idling(dev_priv, interruptible);
+}
diff --git a/sys/dev/drm2/i915/i915_gem_tiling.c b/sys/dev/drm2/i915/i915_gem_tiling.c
new file mode 100644
index 000000000000..b3d98c8768d8
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_gem_tiling.c
@@ -0,0 +1,495 @@
+/*
+ * Copyright © 2008 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+
+#include <sys/sf_buf.h>
+
+/** @file i915_gem_tiling.c
+ *
+ * Support for managing tiling state of buffer objects.
+ *
+ * The idea behind tiling is to increase cache hit rates by rearranging
+ * pixel data so that a group of pixel accesses are in the same cacheline.
+ * Performance improvement from doing this on the back/depth buffer are on
+ * the order of 30%.
+ *
+ * Intel architectures make this somewhat more complicated, though, by
+ * adjustments made to addressing of data when the memory is in interleaved
+ * mode (matched pairs of DIMMS) to improve memory bandwidth.
+ * For interleaved memory, the CPU sends every sequential 64 bytes
+ * to an alternate memory channel so it can get the bandwidth from both.
+ *
+ * The GPU also rearranges its accesses for increased bandwidth to interleaved
+ * memory, and it matches what the CPU does for non-tiled. However, when tiled
+ * it does it a little differently, since one walks addresses not just in the
+ * X direction but also Y. So, along with alternating channels when bit
+ * 6 of the address flips, it also alternates when other bits flip -- Bits 9
+ * (every 512 bytes, an X tile scanline) and 10 (every two X tile scanlines)
+ * are common to both the 915 and 965-class hardware.
+ *
+ * The CPU also sometimes XORs in higher bits as well, to improve
+ * bandwidth doing strided access like we do so frequently in graphics. This
+ * is called "Channel XOR Randomization" in the MCH documentation. The result
+ * is that the CPU is XORing in either bit 11 or bit 17 to bit 6 of its address
+ * decode.
+ *
+ * All of this bit 6 XORing has an effect on our memory management,
+ * as we need to make sure that the 3d driver can correctly address object
+ * contents.
+ *
+ * If we don't have interleaved memory, all tiling is safe and no swizzling is
+ * required.
+ *
+ * When bit 17 is XORed in, we simply refuse to tile at all. Bit
+ * 17 is not just a page offset, so as we page an objet out and back in,
+ * individual pages in it will have different bit 17 addresses, resulting in
+ * each 64 bytes being swapped with its neighbor!
+ *
+ * Otherwise, if interleaved, we have to tell the 3d driver what the address
+ * swizzling it needs to do is, since it's writing with the CPU to the pages
+ * (bit 6 and potentially bit 11 XORed in), and the GPU is reading from the
+ * pages (bit 6, 9, and 10 XORed in), resulting in a cumulative bit swizzling
+ * required by the CPU of XORing in bit 6, 9, 10, and potentially 11, in order
+ * to match what the GPU expects.
+ */
+
+/**
+ * Detects bit 6 swizzling of address lookup between IGD access and CPU
+ * access through main memory.
+ */
+void
+i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ uint32_t swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
+ uint32_t swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
+
+ if (INTEL_INFO(dev)->gen >= 6) {
+ uint32_t dimm_c0, dimm_c1;
+ dimm_c0 = I915_READ(MAD_DIMM_C0);
+ dimm_c1 = I915_READ(MAD_DIMM_C1);
+ dimm_c0 &= MAD_DIMM_A_SIZE_MASK | MAD_DIMM_B_SIZE_MASK;
+ dimm_c1 &= MAD_DIMM_A_SIZE_MASK | MAD_DIMM_B_SIZE_MASK;
+ /* Enable swizzling when the channels are populated with
+ * identically sized dimms. We don't need to check the 3rd
+ * channel because no cpu with gpu attached ships in that
+ * configuration. Also, swizzling only makes sense for 2
+ * channels anyway. */
+ if (dimm_c0 == dimm_c1) {
+ swizzle_x = I915_BIT_6_SWIZZLE_9_10;
+ swizzle_y = I915_BIT_6_SWIZZLE_9;
+ } else {
+ swizzle_x = I915_BIT_6_SWIZZLE_NONE;
+ swizzle_y = I915_BIT_6_SWIZZLE_NONE;
+ }
+ } else if (IS_GEN5(dev)) {
+ /* On Ironlake whatever DRAM config, GPU always do
+ * same swizzling setup.
+ */
+ swizzle_x = I915_BIT_6_SWIZZLE_9_10;
+ swizzle_y = I915_BIT_6_SWIZZLE_9;
+ } else if (IS_GEN2(dev)) {
+ /* As far as we know, the 865 doesn't have these bit 6
+ * swizzling issues.
+ */
+ swizzle_x = I915_BIT_6_SWIZZLE_NONE;
+ swizzle_y = I915_BIT_6_SWIZZLE_NONE;
+ } else if (IS_MOBILE(dev) || (IS_GEN3(dev) && !IS_G33(dev))) {
+ uint32_t dcc;
+
+ /* On 9xx chipsets, channel interleave by the CPU is
+ * determined by DCC. For single-channel, neither the CPU
+ * nor the GPU do swizzling. For dual channel interleaved,
+ * the GPU's interleave is bit 9 and 10 for X tiled, and bit
+ * 9 for Y tiled. The CPU's interleave is independent, and
+ * can be based on either bit 11 (haven't seen this yet) or
+ * bit 17 (common).
+ */
+ dcc = I915_READ(DCC);
+ switch (dcc & DCC_ADDRESSING_MODE_MASK) {
+ case DCC_ADDRESSING_MODE_SINGLE_CHANNEL:
+ case DCC_ADDRESSING_MODE_DUAL_CHANNEL_ASYMMETRIC:
+ swizzle_x = I915_BIT_6_SWIZZLE_NONE;
+ swizzle_y = I915_BIT_6_SWIZZLE_NONE;
+ break;
+ case DCC_ADDRESSING_MODE_DUAL_CHANNEL_INTERLEAVED:
+ if (dcc & DCC_CHANNEL_XOR_DISABLE) {
+ /* This is the base swizzling by the GPU for
+ * tiled buffers.
+ */
+ swizzle_x = I915_BIT_6_SWIZZLE_9_10;
+ swizzle_y = I915_BIT_6_SWIZZLE_9;
+ } else if ((dcc & DCC_CHANNEL_XOR_BIT_17) == 0) {
+ /* Bit 11 swizzling by the CPU in addition. */
+ swizzle_x = I915_BIT_6_SWIZZLE_9_10_11;
+ swizzle_y = I915_BIT_6_SWIZZLE_9_11;
+ } else {
+ /* Bit 17 swizzling by the CPU in addition. */
+ swizzle_x = I915_BIT_6_SWIZZLE_9_10_17;
+ swizzle_y = I915_BIT_6_SWIZZLE_9_17;
+ }
+ break;
+ }
+ if (dcc == 0xffffffff) {
+ DRM_ERROR("Couldn't read from MCHBAR. "
+ "Disabling tiling.\n");
+ swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
+ swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
+ }
+ } else {
+ /* The 965, G33, and newer, have a very flexible memory
+ * configuration. It will enable dual-channel mode
+ * (interleaving) on as much memory as it can, and the GPU
+ * will additionally sometimes enable different bit 6
+ * swizzling for tiled objects from the CPU.
+ *
+ * Here's what I found on the G965:
+ * slot fill memory size swizzling
+ * 0A 0B 1A 1B 1-ch 2-ch
+ * 512 0 0 0 512 0 O
+ * 512 0 512 0 16 1008 X
+ * 512 0 0 512 16 1008 X
+ * 0 512 0 512 16 1008 X
+ * 1024 1024 1024 0 2048 1024 O
+ *
+ * We could probably detect this based on either the DRB
+ * matching, which was the case for the swizzling required in
+ * the table above, or from the 1-ch value being less than
+ * the minimum size of a rank.
+ */
+ if (I915_READ16(C0DRB3) != I915_READ16(C1DRB3)) {
+ swizzle_x = I915_BIT_6_SWIZZLE_NONE;
+ swizzle_y = I915_BIT_6_SWIZZLE_NONE;
+ } else {
+ swizzle_x = I915_BIT_6_SWIZZLE_9_10;
+ swizzle_y = I915_BIT_6_SWIZZLE_9;
+ }
+ }
+
+ dev_priv->mm.bit_6_swizzle_x = swizzle_x;
+ dev_priv->mm.bit_6_swizzle_y = swizzle_y;
+}
+
+/* Check pitch constriants for all chips & tiling formats */
+static bool
+i915_tiling_ok(struct drm_device *dev, int stride, int size, int tiling_mode)
+{
+ int tile_width;
+
+ /* Linear is always fine */
+ if (tiling_mode == I915_TILING_NONE)
+ return (true);
+
+ if (IS_GEN2(dev) ||
+ (tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev)))
+ tile_width = 128;
+ else
+ tile_width = 512;
+
+ /* check maximum stride & object size */
+ if (INTEL_INFO(dev)->gen >= 4) {
+ /* i965 stores the end address of the gtt mapping in the fence
+ * reg, so dont bother to check the size */
+ if (stride / 128 > I965_FENCE_MAX_PITCH_VAL)
+ return (false);
+ } else {
+ if (stride > 8192)
+ return (false);
+
+ if (IS_GEN3(dev)) {
+ if (size > I830_FENCE_MAX_SIZE_VAL << 20)
+ return (false);
+ } else {
+ if (size > I830_FENCE_MAX_SIZE_VAL << 19)
+ return (false);
+ }
+ }
+
+ /* 965+ just needs multiples of tile width */
+ if (INTEL_INFO(dev)->gen >= 4) {
+ if (stride & (tile_width - 1))
+ return (false);
+ return (true);
+ }
+
+ /* Pre-965 needs power of two tile widths */
+ if (stride < tile_width)
+ return (false);
+
+ if (stride & (stride - 1))
+ return (false);
+
+ return (true);
+}
+
+/* Is the current GTT allocation valid for the change in tiling? */
+static bool
+i915_gem_object_fence_ok(struct drm_i915_gem_object *obj, int tiling_mode)
+{
+ u32 size;
+
+ if (tiling_mode == I915_TILING_NONE)
+ return (true);
+
+ if (INTEL_INFO(obj->base.dev)->gen >= 4)
+ return (true);
+
+ if (INTEL_INFO(obj->base.dev)->gen == 3) {
+ if (obj->gtt_offset & ~I915_FENCE_START_MASK)
+ return (false);
+ } else {
+ if (obj->gtt_offset & ~I830_FENCE_START_MASK)
+ return (false);
+ }
+
+ /*
+ * Previous chips need to be aligned to the size of the smallest
+ * fence register that can contain the object.
+ */
+ if (INTEL_INFO(obj->base.dev)->gen == 3)
+ size = 1024*1024;
+ else
+ size = 512*1024;
+
+ while (size < obj->base.size)
+ size <<= 1;
+
+ if (obj->gtt_space->size != size)
+ return (false);
+
+ if (obj->gtt_offset & (size - 1))
+ return (false);
+
+ return (true);
+}
+
+/**
+ * Sets the tiling mode of an object, returning the required swizzling of
+ * bit 6 of addresses in the object.
+ */
+int
+i915_gem_set_tiling(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_set_tiling *args = data;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj;
+ int ret;
+
+ ret = 0;
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
+ if (&obj->base == NULL)
+ return -ENOENT;
+
+ if (!i915_tiling_ok(dev,
+ args->stride, obj->base.size, args->tiling_mode)) {
+ drm_gem_object_unreference(&obj->base);
+ return -EINVAL;
+ }
+
+ if (obj->pin_count) {
+ drm_gem_object_unreference(&obj->base);
+ return -EBUSY;
+ }
+
+ if (args->tiling_mode == I915_TILING_NONE) {
+ args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE;
+ args->stride = 0;
+ } else {
+ if (args->tiling_mode == I915_TILING_X)
+ args->swizzle_mode = dev_priv->mm.bit_6_swizzle_x;
+ else
+ args->swizzle_mode = dev_priv->mm.bit_6_swizzle_y;
+
+ /* Hide bit 17 swizzling from the user. This prevents old Mesa
+ * from aborting the application on sw fallbacks to bit 17,
+ * and we use the pread/pwrite bit17 paths to swizzle for it.
+ * If there was a user that was relying on the swizzle
+ * information for drm_intel_bo_map()ed reads/writes this would
+ * break it, but we don't have any of those.
+ */
+ if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_17)
+ args->swizzle_mode = I915_BIT_6_SWIZZLE_9;
+ if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_10_17)
+ args->swizzle_mode = I915_BIT_6_SWIZZLE_9_10;
+
+ /* If we can't handle the swizzling, make it untiled. */
+ if (args->swizzle_mode == I915_BIT_6_SWIZZLE_UNKNOWN) {
+ args->tiling_mode = I915_TILING_NONE;
+ args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE;
+ args->stride = 0;
+ }
+ }
+
+ if (args->tiling_mode != obj->tiling_mode ||
+ args->stride != obj->stride) {
+ /* We need to rebind the object if its current allocation
+ * no longer meets the alignment restrictions for its new
+ * tiling mode. Otherwise we can just leave it alone, but
+ * need to ensure that any fence register is cleared.
+ */
+ i915_gem_release_mmap(obj);
+
+ obj->map_and_fenceable = obj->gtt_space == NULL ||
+ (obj->gtt_offset + obj->base.size <=
+ dev_priv->mm.gtt_mappable_end &&
+ i915_gem_object_fence_ok(obj, args->tiling_mode));
+
+ /* Rebind if we need a change of alignment */
+ if (!obj->map_and_fenceable) {
+ uint32_t unfenced_alignment =
+ i915_gem_get_unfenced_gtt_alignment(dev,
+ obj->base.size, args->tiling_mode);
+ if (obj->gtt_offset & (unfenced_alignment - 1))
+ ret = i915_gem_object_unbind(obj);
+ }
+ if (ret == 0) {
+ obj->tiling_changed = true;
+ obj->tiling_mode = args->tiling_mode;
+ obj->stride = args->stride;
+ }
+ }
+ /* we have to maintain this existing ABI... */
+ args->stride = obj->stride;
+ args->tiling_mode = obj->tiling_mode;
+ drm_gem_object_unreference(&obj->base);
+
+ return (ret);
+}
+
+/**
+ * Returns the current tiling mode and required bit 6 swizzling for the object.
+ */
+int
+i915_gem_get_tiling(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ struct drm_i915_gem_get_tiling *args = data;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj;
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, args->handle));
+ if (&obj->base == NULL)
+ return -ENOENT;
+
+ args->tiling_mode = obj->tiling_mode;
+ switch (obj->tiling_mode) {
+ case I915_TILING_X:
+ args->swizzle_mode = dev_priv->mm.bit_6_swizzle_x;
+ break;
+ case I915_TILING_Y:
+ args->swizzle_mode = dev_priv->mm.bit_6_swizzle_y;
+ break;
+ case I915_TILING_NONE:
+ args->swizzle_mode = I915_BIT_6_SWIZZLE_NONE;
+ break;
+ default:
+ DRM_ERROR("unknown tiling mode\n");
+ }
+
+ /* Hide bit 17 from the user -- see comment in i915_gem_set_tiling */
+ if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_17)
+ args->swizzle_mode = I915_BIT_6_SWIZZLE_9;
+ if (args->swizzle_mode == I915_BIT_6_SWIZZLE_9_10_17)
+ args->swizzle_mode = I915_BIT_6_SWIZZLE_9_10;
+
+ drm_gem_object_unreference(&obj->base);
+
+ return 0;
+}
+
+/**
+ * Swap every 64 bytes of this page around, to account for it having a new
+ * bit 17 of its physical address and therefore being interpreted differently
+ * by the GPU.
+ */
+static void
+i915_gem_swizzle_page(vm_page_t m)
+{
+ char temp[64];
+ char *vaddr;
+ struct sf_buf *sf;
+ int i;
+
+ /* XXXKIB sleep */
+ sf = sf_buf_alloc(m, SFB_DEFAULT);
+ vaddr = (char *)sf_buf_kva(sf);
+
+ for (i = 0; i < PAGE_SIZE; i += 128) {
+ memcpy(temp, &vaddr[i], 64);
+ memcpy(&vaddr[i], &vaddr[i + 64], 64);
+ memcpy(&vaddr[i + 64], temp, 64);
+ }
+
+ sf_buf_free(sf);
+}
+
+void
+i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj)
+{
+ int page_count = obj->base.size >> PAGE_SHIFT;
+ int i;
+
+ if (obj->bit_17 == NULL)
+ return;
+
+ for (i = 0; i < page_count; i++) {
+ char new_bit_17 = VM_PAGE_TO_PHYS(obj->pages[i]) >> 17;
+ if ((new_bit_17 & 0x1) !=
+ (test_bit(i, obj->bit_17) != 0)) {
+ i915_gem_swizzle_page(obj->pages[i]);
+ vm_page_dirty(obj->pages[i]);
+ }
+ }
+}
+
+void
+i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj)
+{
+ int page_count = obj->base.size >> PAGE_SHIFT;
+ int i;
+
+ if (obj->bit_17 == NULL) {
+ obj->bit_17 = malloc(BITS_TO_LONGS(page_count) *
+ sizeof(long), DRM_I915_GEM, M_WAITOK);
+ }
+
+ /* XXXKIB: review locking, atomics might be not needed there */
+ for (i = 0; i < page_count; i++) {
+ if (VM_PAGE_TO_PHYS(obj->pages[i]) & (1 << 17))
+ set_bit(i, obj->bit_17);
+ else
+ clear_bit(i, obj->bit_17);
+ }
+}
diff --git a/sys/dev/drm2/i915/i915_irq.c b/sys/dev/drm2/i915/i915_irq.c
new file mode 100644
index 000000000000..52233ea12293
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_irq.c
@@ -0,0 +1,2278 @@
+/* i915_irq.c -- IRQ support for the I915 -*- linux-c -*-
+ */
+/*-
+ * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <sys/sched.h>
+#include <sys/sf_buf.h>
+
+static void i915_capture_error_state(struct drm_device *dev);
+static u32 ring_last_seqno(struct intel_ring_buffer *ring);
+
+/**
+ * Interrupts that are always left unmasked.
+ *
+ * Since pipe events are edge-triggered from the PIPESTAT register to IIR,
+ * we leave them always unmasked in IMR and then control enabling them through
+ * PIPESTAT alone.
+ */
+#define I915_INTERRUPT_ENABLE_FIX \
+ (I915_ASLE_INTERRUPT | \
+ I915_DISPLAY_PIPE_A_EVENT_INTERRUPT | \
+ I915_DISPLAY_PIPE_B_EVENT_INTERRUPT | \
+ I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | \
+ I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT | \
+ I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
+
+/** Interrupts that we mask and unmask at runtime. */
+#define I915_INTERRUPT_ENABLE_VAR (I915_USER_INTERRUPT | I915_BSD_USER_INTERRUPT)
+
+#define I915_PIPE_VBLANK_STATUS (PIPE_START_VBLANK_INTERRUPT_STATUS |\
+ PIPE_VBLANK_INTERRUPT_STATUS)
+
+#define I915_PIPE_VBLANK_ENABLE (PIPE_START_VBLANK_INTERRUPT_ENABLE |\
+ PIPE_VBLANK_INTERRUPT_ENABLE)
+
+#define DRM_I915_VBLANK_PIPE_ALL (DRM_I915_VBLANK_PIPE_A | \
+ DRM_I915_VBLANK_PIPE_B)
+
+/* For display hotplug interrupt */
+static void
+ironlake_enable_display_irq(drm_i915_private_t *dev_priv, u32 mask)
+{
+ if ((dev_priv->irq_mask & mask) != 0) {
+ dev_priv->irq_mask &= ~mask;
+ I915_WRITE(DEIMR, dev_priv->irq_mask);
+ POSTING_READ(DEIMR);
+ }
+}
+
+static inline void
+ironlake_disable_display_irq(drm_i915_private_t *dev_priv, u32 mask)
+{
+ if ((dev_priv->irq_mask & mask) != mask) {
+ dev_priv->irq_mask |= mask;
+ I915_WRITE(DEIMR, dev_priv->irq_mask);
+ POSTING_READ(DEIMR);
+ }
+}
+
+void
+i915_enable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask)
+{
+ if ((dev_priv->pipestat[pipe] & mask) != mask) {
+ u32 reg = PIPESTAT(pipe);
+
+ dev_priv->pipestat[pipe] |= mask;
+ /* Enable the interrupt, clear any pending status */
+ I915_WRITE(reg, dev_priv->pipestat[pipe] | (mask >> 16));
+ POSTING_READ(reg);
+ }
+}
+
+void
+i915_disable_pipestat(drm_i915_private_t *dev_priv, int pipe, u32 mask)
+{
+ if ((dev_priv->pipestat[pipe] & mask) != 0) {
+ u32 reg = PIPESTAT(pipe);
+
+ dev_priv->pipestat[pipe] &= ~mask;
+ I915_WRITE(reg, dev_priv->pipestat[pipe]);
+ POSTING_READ(reg);
+ }
+}
+
+/**
+ * intel_enable_asle - enable ASLE interrupt for OpRegion
+ */
+void intel_enable_asle(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ mtx_lock(&dev_priv->irq_lock);
+
+ if (HAS_PCH_SPLIT(dev))
+ ironlake_enable_display_irq(dev_priv, DE_GSE);
+ else {
+ i915_enable_pipestat(dev_priv, 1,
+ PIPE_LEGACY_BLC_EVENT_ENABLE);
+ if (INTEL_INFO(dev)->gen >= 4)
+ i915_enable_pipestat(dev_priv, 0,
+ PIPE_LEGACY_BLC_EVENT_ENABLE);
+ }
+
+ mtx_unlock(&dev_priv->irq_lock);
+}
+
+/**
+ * i915_pipe_enabled - check if a pipe is enabled
+ * @dev: DRM device
+ * @pipe: pipe to check
+ *
+ * Reading certain registers when the pipe is disabled can hang the chip.
+ * Use this routine to make sure the PLL is running and the pipe is active
+ * before reading such registers if unsure.
+ */
+static int
+i915_pipe_enabled(struct drm_device *dev, int pipe)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ return I915_READ(PIPECONF(pipe)) & PIPECONF_ENABLE;
+}
+
+/* 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)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ unsigned long high_frame;
+ unsigned long low_frame;
+ u32 high1, high2, low;
+
+ if (!i915_pipe_enabled(dev, pipe)) {
+ DRM_DEBUG("trying to get vblank count for disabled "
+ "pipe %c\n", pipe_name(pipe));
+ return 0;
+ }
+
+ high_frame = PIPEFRAME(pipe);
+ low_frame = PIPEFRAMEPIXEL(pipe);
+
+ /*
+ * High & low register fields aren't synchronized, so make sure
+ * we get a low value that's stable across two reads of the high
+ * register.
+ */
+ do {
+ high1 = I915_READ(high_frame) & PIPE_FRAME_HIGH_MASK;
+ low = I915_READ(low_frame) & PIPE_FRAME_LOW_MASK;
+ high2 = I915_READ(high_frame) & PIPE_FRAME_HIGH_MASK;
+ } while (high1 != high2);
+
+ high1 >>= PIPE_FRAME_HIGH_SHIFT;
+ low >>= PIPE_FRAME_LOW_SHIFT;
+ return (high1 << 8) | low;
+}
+
+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 "
+ "pipe %c\n", pipe_name(pipe));
+ return 0;
+ }
+
+ return I915_READ(reg);
+}
+
+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;
+ int vbl_start, vbl_end, htotal, vtotal;
+ bool in_vbl = true;
+ int ret = 0;
+
+ if (!i915_pipe_enabled(dev, pipe)) {
+ DRM_DEBUG("i915: trying to get scanoutpos for disabled "
+ "pipe %c\n", pipe_name(pipe));
+ return 0;
+ }
+
+ /* Get vtotal. */
+ vtotal = 1 + ((I915_READ(VTOTAL(pipe)) >> 16) & 0x1fff);
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ /* No obvious pixelcount register. Only query vertical
+ * scanout position from Display scan line register.
+ */
+ position = I915_READ(PIPEDSL(pipe));
+
+ /* Decode into vertical scanout position. Don't have
+ * horizontal scanout position.
+ */
+ *vpos = position & 0x1fff;
+ *hpos = 0;
+ } else {
+ /* Have access to pixelcount since start of frame.
+ * We can split this into vertical and horizontal
+ * scanout position.
+ */
+ position = (I915_READ(PIPEFRAMEPIXEL(pipe)) & PIPE_PIXEL_MASK) >> PIPE_PIXEL_SHIFT;
+
+ htotal = 1 + ((I915_READ(HTOTAL(pipe)) >> 16) & 0x1fff);
+ *vpos = position / htotal;
+ *hpos = position - (*vpos * htotal);
+ }
+
+ /* Query vblank area. */
+ vbl = I915_READ(VBLANK(pipe));
+
+ /* Test position against vblank region. */
+ vbl_start = vbl & 0x1fff;
+ vbl_end = (vbl >> 16) & 0x1fff;
+
+ if ((*vpos < vbl_start) || (*vpos > vbl_end))
+ in_vbl = false;
+
+ /* Inside "upper part" of vblank area? Apply corrective offset: */
+ if (in_vbl && (*vpos >= vbl_start))
+ *vpos = *vpos - vtotal;
+
+ /* Readouts valid? */
+ if (vbl > 0)
+ ret |= DRM_SCANOUTPOS_VALID | DRM_SCANOUTPOS_ACCURATE;
+
+ /* In vblank? */
+ if (in_vbl)
+ ret |= DRM_SCANOUTPOS_INVBL;
+
+ return ret;
+}
+
+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;
+
+ if (pipe < 0 || pipe >= dev_priv->num_pipe) {
+ DRM_ERROR("Invalid crtc %d\n", pipe);
+ return -EINVAL;
+ }
+
+ /* Get drm_crtc to timestamp: */
+ crtc = intel_get_crtc_for_pipe(dev, pipe);
+ if (crtc == NULL) {
+ DRM_ERROR("Invalid crtc %d\n", pipe);
+ return -EINVAL;
+ }
+
+ if (!crtc->enabled) {
+#if 0
+ DRM_DEBUG("crtc %d is disabled\n", pipe);
+#endif
+ return -EBUSY;
+ }
+
+ /* Helper routine in DRM core does all the work: */
+ return drm_calc_vbltimestamp_from_scanoutpos(dev, pipe, max_error,
+ vblank_time, flags,
+ crtc);
+}
+
+/*
+ * Handle hotplug events outside the interrupt handler proper.
+ */
+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 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");
+
+ list_for_each_entry(encoder, &mode_config->encoder_list, base.head)
+ if (encoder->hot_plug)
+ encoder->hot_plug(encoder);
+
+ sx_xunlock(&mode_config->mutex);
+
+ /* Just fire off a uevent and let userspace tell us what to do */
+#if 0
+ drm_helper_hpd_irq_event(dev);
+#endif
+}
+
+static void i915_handle_rps_change(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 busy_up, busy_down, max_avg, min_avg;
+ u8 new_delay = dev_priv->cur_delay;
+
+ I915_WRITE16(MEMINTRSTS, MEMINT_EVAL_CHG);
+ busy_up = I915_READ(RCPREVBSYTUPAVG);
+ busy_down = I915_READ(RCPREVBSYTDNAVG);
+ max_avg = I915_READ(RCBMAXAVG);
+ min_avg = I915_READ(RCBMINAVG);
+
+ /* Handle RCS change request from hw */
+ if (busy_up > max_avg) {
+ if (dev_priv->cur_delay != dev_priv->max_delay)
+ new_delay = dev_priv->cur_delay - 1;
+ if (new_delay < dev_priv->max_delay)
+ new_delay = dev_priv->max_delay;
+ } else if (busy_down < min_avg) {
+ if (dev_priv->cur_delay != dev_priv->min_delay)
+ new_delay = dev_priv->cur_delay + 1;
+ if (new_delay > dev_priv->min_delay)
+ new_delay = dev_priv->min_delay;
+ }
+
+ if (ironlake_set_drps(dev, new_delay))
+ dev_priv->cur_delay = new_delay;
+
+ return;
+}
+
+static void notify_ring(struct drm_device *dev,
+ struct intel_ring_buffer *ring)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 seqno;
+
+ if (ring->obj == NULL)
+ return;
+
+ seqno = ring->get_seqno(ring);
+ CTR2(KTR_DRM, "request_complete %s %d", ring->name, seqno);
+
+ mtx_lock(&ring->irq_lock);
+ ring->irq_seqno = seqno;
+ wakeup(ring);
+ mtx_unlock(&ring->irq_lock);
+
+ if (i915_enable_hangcheck) {
+ dev_priv->hangcheck_count = 0;
+ callout_schedule(&dev_priv->hangcheck_timer,
+ DRM_I915_HANGCHECK_PERIOD);
+ }
+}
+
+static void
+gen6_pm_rps_work_func(void *arg, int pending)
+{
+ struct drm_device *dev;
+ drm_i915_private_t *dev_priv;
+ u8 new_delay;
+ u32 pm_iir, pm_imr;
+
+ dev_priv = (drm_i915_private_t *)arg;
+ dev = dev_priv->dev;
+ new_delay = dev_priv->cur_delay;
+
+ mtx_lock(&dev_priv->rps_lock);
+ pm_iir = dev_priv->pm_iir;
+ dev_priv->pm_iir = 0;
+ pm_imr = I915_READ(GEN6_PMIMR);
+ I915_WRITE(GEN6_PMIMR, 0);
+ mtx_unlock(&dev_priv->rps_lock);
+
+ if (!pm_iir)
+ return;
+
+ DRM_LOCK(dev);
+ if (pm_iir & GEN6_PM_RP_UP_THRESHOLD) {
+ if (dev_priv->cur_delay != dev_priv->max_delay)
+ new_delay = dev_priv->cur_delay + 1;
+ if (new_delay > dev_priv->max_delay)
+ new_delay = dev_priv->max_delay;
+ } else if (pm_iir & (GEN6_PM_RP_DOWN_THRESHOLD | GEN6_PM_RP_DOWN_TIMEOUT)) {
+ gen6_gt_force_wake_get(dev_priv);
+ if (dev_priv->cur_delay != dev_priv->min_delay)
+ new_delay = dev_priv->cur_delay - 1;
+ if (new_delay < dev_priv->min_delay) {
+ new_delay = dev_priv->min_delay;
+ I915_WRITE(GEN6_RP_INTERRUPT_LIMITS,
+ I915_READ(GEN6_RP_INTERRUPT_LIMITS) |
+ ((new_delay << 16) & 0x3f0000));
+ } else {
+ /* Make sure we continue to get down interrupts
+ * until we hit the minimum frequency */
+ I915_WRITE(GEN6_RP_INTERRUPT_LIMITS,
+ I915_READ(GEN6_RP_INTERRUPT_LIMITS) & ~0x3f0000);
+ }
+ gen6_gt_force_wake_put(dev_priv);
+ }
+
+ gen6_set_rps(dev, new_delay);
+ dev_priv->cur_delay = new_delay;
+
+ /*
+ * rps_lock not held here because clearing is non-destructive. There is
+ * an *extremely* unlikely race with gen6_rps_enable() that is prevented
+ * by holding struct_mutex for the duration of the write.
+ */
+ DRM_UNLOCK(dev);
+}
+
+static void pch_irq_handler(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ u32 pch_iir;
+ int pipe;
+
+ pch_iir = I915_READ(SDEIIR);
+
+ if (pch_iir & SDE_AUDIO_POWER_MASK)
+ DRM_DEBUG("i915: 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");
+
+ if (pch_iir & SDE_AUDIO_HDCP_MASK)
+ DRM_DEBUG("i915: PCH HDCP audio interrupt\n");
+
+ if (pch_iir & SDE_AUDIO_TRANS_MASK)
+ DRM_DEBUG("i915: PCH transcoder audio interrupt\n");
+
+ if (pch_iir & SDE_POISON)
+ DRM_ERROR("i915: PCH poison interrupt\n");
+
+ if (pch_iir & SDE_FDI_MASK)
+ for_each_pipe(pipe)
+ DRM_DEBUG(" 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");
+
+ if (pch_iir & (SDE_TRANSB_CRC_ERR | SDE_TRANSA_CRC_ERR))
+ DRM_DEBUG("i915: PCH transcoder CRC error interrupt\n");
+
+ if (pch_iir & SDE_TRANSB_FIFO_UNDER)
+ DRM_DEBUG("i915: PCH transcoder B underrun interrupt\n");
+ if (pch_iir & SDE_TRANSA_FIFO_UNDER)
+ DRM_DEBUG("PCH transcoder A underrun interrupt\n");
+}
+
+static void
+ivybridge_irq_handler(void *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;
+#if 0
+ struct drm_i915_master_private *master_priv;
+#endif
+
+ atomic_inc(&dev_priv->irq_received);
+
+ /* disable master interrupt before clearing iir */
+ de_ier = I915_READ(DEIER);
+ I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
+ POSTING_READ(DEIER);
+
+ de_iir = I915_READ(DEIIR);
+ gt_iir = I915_READ(GTIIR);
+ pch_iir = I915_READ(SDEIIR);
+ pm_iir = I915_READ(GEN6_PMIIR);
+
+ CTR4(KTR_DRM, "ivybridge_irq de %x gt %x pch %x pm %x", de_iir,
+ gt_iir, pch_iir, pm_iir);
+
+ if (de_iir == 0 && gt_iir == 0 && pch_iir == 0 && pm_iir == 0)
+ goto done;
+
+#if 0
+ if (dev->primary->master) {
+ master_priv = dev->primary->master->driver_priv;
+ if (master_priv->sarea_priv)
+ master_priv->sarea_priv->last_dispatch =
+ READ_BREADCRUMB(dev_priv);
+ }
+#else
+ if (dev_priv->sarea_priv)
+ dev_priv->sarea_priv->last_dispatch =
+ READ_BREADCRUMB(dev_priv);
+#endif
+
+ if (gt_iir & (GT_USER_INTERRUPT | GT_PIPE_NOTIFY))
+ notify_ring(dev, &dev_priv->rings[RCS]);
+ if (gt_iir & GT_GEN6_BSD_USER_INTERRUPT)
+ notify_ring(dev, &dev_priv->rings[VCS]);
+ if (gt_iir & GT_BLT_USER_INTERRUPT)
+ notify_ring(dev, &dev_priv->rings[BCS]);
+
+ if (de_iir & DE_GSE_IVB) {
+#if 1
+ KIB_NOTYET();
+#else
+ intel_opregion_gse_intr(dev);
+#endif
+ }
+
+ if (de_iir & DE_PLANEA_FLIP_DONE_IVB) {
+ intel_prepare_page_flip(dev, 0);
+ intel_finish_page_flip_plane(dev, 0);
+ }
+
+ if (de_iir & DE_PLANEB_FLIP_DONE_IVB) {
+ intel_prepare_page_flip(dev, 1);
+ intel_finish_page_flip_plane(dev, 1);
+ }
+
+ if (de_iir & DE_PIPEA_VBLANK_IVB)
+ drm_handle_vblank(dev, 0);
+
+ if (de_iir & DE_PIPEB_VBLANK_IVB)
+ drm_handle_vblank(dev, 1);
+
+ /* check event from PCH */
+ if (de_iir & DE_PCH_EVENT_IVB) {
+ if (pch_iir & SDE_HOTPLUG_MASK_CPT)
+ taskqueue_enqueue(dev_priv->tq, &dev_priv->hotplug_task);
+ pch_irq_handler(dev);
+ }
+
+ if (pm_iir & GEN6_PM_DEFERRED_EVENTS) {
+ mtx_lock(&dev_priv->rps_lock);
+ if ((dev_priv->pm_iir & pm_iir) != 0)
+ printf("Missed a PM interrupt\n");
+ dev_priv->pm_iir |= pm_iir;
+ I915_WRITE(GEN6_PMIMR, dev_priv->pm_iir);
+ POSTING_READ(GEN6_PMIMR);
+ mtx_unlock(&dev_priv->rps_lock);
+ taskqueue_enqueue(dev_priv->tq, &dev_priv->rps_task);
+ }
+
+ /* should clear PCH hotplug event before clear CPU irq */
+ I915_WRITE(SDEIIR, pch_iir);
+ I915_WRITE(GTIIR, gt_iir);
+ I915_WRITE(DEIIR, de_iir);
+ I915_WRITE(GEN6_PMIIR, pm_iir);
+
+done:
+ I915_WRITE(DEIER, de_ier);
+ POSTING_READ(DEIER);
+}
+
+static void
+ironlake_irq_handler(void *arg)
+{
+ struct drm_device *dev = 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;
+#if 0
+ struct drm_i915_master_private *master_priv;
+#endif
+ u32 bsd_usr_interrupt = GT_BSD_USER_INTERRUPT;
+
+ atomic_inc(&dev_priv->irq_received);
+
+ if (IS_GEN6(dev))
+ bsd_usr_interrupt = GT_GEN6_BSD_USER_INTERRUPT;
+
+ /* disable master interrupt before clearing iir */
+ de_ier = I915_READ(DEIER);
+ I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
+ POSTING_READ(DEIER);
+
+ de_iir = I915_READ(DEIIR);
+ gt_iir = I915_READ(GTIIR);
+ pch_iir = I915_READ(SDEIIR);
+ pm_iir = I915_READ(GEN6_PMIIR);
+
+ CTR4(KTR_DRM, "ironlake_irq de %x gt %x pch %x pm %x", de_iir,
+ gt_iir, pch_iir, pm_iir);
+
+ if (de_iir == 0 && gt_iir == 0 && pch_iir == 0 &&
+ (!IS_GEN6(dev) || pm_iir == 0))
+ goto done;
+
+ if (HAS_PCH_CPT(dev))
+ hotplug_mask = SDE_HOTPLUG_MASK_CPT;
+ else
+ hotplug_mask = SDE_HOTPLUG_MASK;
+
+#if 0
+ if (dev->primary->master) {
+ master_priv = dev->primary->master->driver_priv;
+ if (master_priv->sarea_priv)
+ master_priv->sarea_priv->last_dispatch =
+ READ_BREADCRUMB(dev_priv);
+ }
+#else
+ if (dev_priv->sarea_priv)
+ dev_priv->sarea_priv->last_dispatch =
+ READ_BREADCRUMB(dev_priv);
+#endif
+
+ if (gt_iir & (GT_USER_INTERRUPT | GT_PIPE_NOTIFY))
+ notify_ring(dev, &dev_priv->rings[RCS]);
+ if (gt_iir & bsd_usr_interrupt)
+ notify_ring(dev, &dev_priv->rings[VCS]);
+ if (gt_iir & GT_BLT_USER_INTERRUPT)
+ notify_ring(dev, &dev_priv->rings[BCS]);
+
+ if (de_iir & DE_GSE) {
+#if 1
+ KIB_NOTYET();
+#else
+ intel_opregion_gse_intr(dev);
+#endif
+ }
+
+ if (de_iir & DE_PLANEA_FLIP_DONE) {
+ intel_prepare_page_flip(dev, 0);
+ intel_finish_page_flip_plane(dev, 0);
+ }
+
+ if (de_iir & DE_PLANEB_FLIP_DONE) {
+ intel_prepare_page_flip(dev, 1);
+ intel_finish_page_flip_plane(dev, 1);
+ }
+
+ if (de_iir & DE_PIPEA_VBLANK)
+ drm_handle_vblank(dev, 0);
+
+ if (de_iir & DE_PIPEB_VBLANK)
+ drm_handle_vblank(dev, 1);
+
+ /* check event from PCH */
+ if (de_iir & DE_PCH_EVENT) {
+ if (pch_iir & hotplug_mask)
+ taskqueue_enqueue(dev_priv->tq,
+ &dev_priv->hotplug_task);
+ pch_irq_handler(dev);
+ }
+
+ if (de_iir & DE_PCU_EVENT) {
+ I915_WRITE16(MEMINTRSTS, I915_READ(MEMINTRSTS));
+ i915_handle_rps_change(dev);
+ }
+
+ if (pm_iir & GEN6_PM_DEFERRED_EVENTS) {
+ mtx_lock(&dev_priv->rps_lock);
+ if ((dev_priv->pm_iir & pm_iir) != 0)
+ printf("Missed a PM interrupt\n");
+ dev_priv->pm_iir |= pm_iir;
+ I915_WRITE(GEN6_PMIMR, dev_priv->pm_iir);
+ POSTING_READ(GEN6_PMIMR);
+ mtx_unlock(&dev_priv->rps_lock);
+ taskqueue_enqueue(dev_priv->tq, &dev_priv->rps_task);
+ }
+
+ /* should clear PCH hotplug event before clear CPU irq */
+ I915_WRITE(SDEIIR, pch_iir);
+ I915_WRITE(GTIIR, gt_iir);
+ I915_WRITE(DEIIR, de_iir);
+ I915_WRITE(GEN6_PMIIR, pm_iir);
+
+done:
+ I915_WRITE(DEIER, de_ier);
+ POSTING_READ(DEIER);
+}
+
+/**
+ * i915_error_work_func - do process context error handling work
+ * @work: work struct
+ *
+ * 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)
+{
+ drm_i915_private_t *dev_priv = context;
+ struct drm_device *dev = dev_priv->dev;
+
+ /* 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");
+ /* kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_event); */
+ if (!i915_reset(dev, GRDOM_RENDER)) {
+ atomic_store_rel_int(&dev_priv->mm.wedged, 0);
+ /* kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_done_event); */
+ }
+ mtx_lock(&dev_priv->error_completion_lock);
+ dev_priv->error_completion++;
+ wakeup(&dev_priv->error_completion);
+ mtx_unlock(&dev_priv->error_completion_lock);
+ }
+}
+
+static void i915_report_and_clear_eir(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 eir = I915_READ(EIR);
+ int pipe;
+
+ if (!eir)
+ return;
+
+ printf("i915: render error detected, EIR: 0x%08x\n", eir);
+
+ if (IS_G4X(dev)) {
+ if (eir & (GM45_ERROR_MEM_PRIV | GM45_ERROR_CP_PRIV)) {
+ u32 ipeir = I915_READ(IPEIR_I965);
+
+ printf(" IPEIR: 0x%08x\n",
+ I915_READ(IPEIR_I965));
+ printf(" IPEHR: 0x%08x\n",
+ I915_READ(IPEHR_I965));
+ printf(" INSTDONE: 0x%08x\n",
+ I915_READ(INSTDONE_I965));
+ printf(" INSTPS: 0x%08x\n",
+ I915_READ(INSTPS));
+ printf(" INSTDONE1: 0x%08x\n",
+ I915_READ(INSTDONE1));
+ printf(" ACTHD: 0x%08x\n",
+ I915_READ(ACTHD_I965));
+ I915_WRITE(IPEIR_I965, ipeir);
+ POSTING_READ(IPEIR_I965);
+ }
+ if (eir & GM45_ERROR_PAGE_TABLE) {
+ u32 pgtbl_err = I915_READ(PGTBL_ER);
+ printf("page table error\n");
+ printf(" PGTBL_ER: 0x%08x\n",
+ pgtbl_err);
+ I915_WRITE(PGTBL_ER, pgtbl_err);
+ POSTING_READ(PGTBL_ER);
+ }
+ }
+
+ if (!IS_GEN2(dev)) {
+ if (eir & I915_ERROR_PAGE_TABLE) {
+ u32 pgtbl_err = I915_READ(PGTBL_ER);
+ printf("page table error\n");
+ printf(" PGTBL_ER: 0x%08x\n",
+ pgtbl_err);
+ I915_WRITE(PGTBL_ER, pgtbl_err);
+ POSTING_READ(PGTBL_ER);
+ }
+ }
+
+ if (eir & I915_ERROR_MEMORY_REFRESH) {
+ printf("memory refresh error:\n");
+ for_each_pipe(pipe)
+ printf("pipe %c stat: 0x%08x\n",
+ pipe_name(pipe), I915_READ(PIPESTAT(pipe)));
+ /* pipestat has already been acked */
+ }
+ if (eir & I915_ERROR_INSTRUCTION) {
+ printf("instruction error\n");
+ printf(" INSTPM: 0x%08x\n",
+ I915_READ(INSTPM));
+ if (INTEL_INFO(dev)->gen < 4) {
+ u32 ipeir = I915_READ(IPEIR);
+
+ printf(" IPEIR: 0x%08x\n",
+ I915_READ(IPEIR));
+ printf(" IPEHR: 0x%08x\n",
+ I915_READ(IPEHR));
+ printf(" INSTDONE: 0x%08x\n",
+ I915_READ(INSTDONE));
+ printf(" ACTHD: 0x%08x\n",
+ I915_READ(ACTHD));
+ I915_WRITE(IPEIR, ipeir);
+ POSTING_READ(IPEIR);
+ } else {
+ u32 ipeir = I915_READ(IPEIR_I965);
+
+ printf(" IPEIR: 0x%08x\n",
+ I915_READ(IPEIR_I965));
+ printf(" IPEHR: 0x%08x\n",
+ I915_READ(IPEHR_I965));
+ printf(" INSTDONE: 0x%08x\n",
+ I915_READ(INSTDONE_I965));
+ printf(" INSTPS: 0x%08x\n",
+ I915_READ(INSTPS));
+ printf(" INSTDONE1: 0x%08x\n",
+ I915_READ(INSTDONE1));
+ printf(" ACTHD: 0x%08x\n",
+ I915_READ(ACTHD_I965));
+ I915_WRITE(IPEIR_I965, ipeir);
+ POSTING_READ(IPEIR_I965);
+ }
+ }
+
+ I915_WRITE(EIR, eir);
+ POSTING_READ(EIR);
+ eir = I915_READ(EIR);
+ if (eir) {
+ /*
+ * some errors might have become stuck,
+ * mask them.
+ */
+ DRM_ERROR("EIR stuck: 0x%08x, masking\n", eir);
+ I915_WRITE(EMR, I915_READ(EMR) | eir);
+ I915_WRITE(IIR, I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT);
+ }
+}
+
+/**
+ * i915_handle_error - handle an error interrupt
+ * @dev: drm device
+ *
+ * Do some basic checking of regsiter state at error interrupt time and
+ * dump it to the syslog. Also call i915_capture_error_state() to make
+ * sure we get a record and make it available in debugfs. Fire a uevent
+ * so userspace knows something bad happened (should trigger collection
+ * of a ring dump etc.).
+ */
+void i915_handle_error(struct drm_device *dev, bool wedged)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ i915_capture_error_state(dev);
+ i915_report_and_clear_eir(dev);
+
+ if (wedged) {
+ mtx_lock(&dev_priv->error_completion_lock);
+ dev_priv->error_completion = 0;
+ dev_priv->mm.wedged = 1;
+ /* unlock acts as rel barrier for store to wedged */
+ mtx_unlock(&dev_priv->error_completion_lock);
+
+ /*
+ * Wakeup waiting processes so they don't hang
+ */
+ mtx_lock(&dev_priv->rings[RCS].irq_lock);
+ wakeup(&dev_priv->rings[RCS]);
+ mtx_unlock(&dev_priv->rings[RCS].irq_lock);
+ if (HAS_BSD(dev)) {
+ mtx_lock(&dev_priv->rings[VCS].irq_lock);
+ wakeup(&dev_priv->rings[VCS]);
+ mtx_unlock(&dev_priv->rings[VCS].irq_lock);
+ }
+ if (HAS_BLT(dev)) {
+ mtx_lock(&dev_priv->rings[BCS].irq_lock);
+ wakeup(&dev_priv->rings[BCS]);
+ mtx_unlock(&dev_priv->rings[BCS].irq_lock);
+ }
+ }
+
+ taskqueue_enqueue(dev_priv->tq, &dev_priv->error_task);
+}
+
+static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct drm_i915_gem_object *obj;
+ struct intel_unpin_work *work;
+ bool stall_detected;
+
+ /* Ignore early vblank irqs */
+ if (intel_crtc == NULL)
+ return;
+
+ mtx_lock(&dev->event_lock);
+ work = intel_crtc->unpin_work;
+
+ 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;
+ }
+
+ /* Potential stall - if we see that the flip has happened, assume a missed interrupt */
+ obj = work->pending_flip_obj;
+ if (INTEL_INFO(dev)->gen >= 4) {
+ int dspsurf = DSPSURF(intel_crtc->plane);
+ stall_detected = I915_READ(dspsurf) == obj->gtt_offset;
+ } else {
+ int dspaddr = DSPADDR(intel_crtc->plane);
+ stall_detected = I915_READ(dspaddr) == (obj->gtt_offset +
+ crtc->y * crtc->fb->pitches[0] +
+ crtc->x * crtc->fb->bits_per_pixel/8);
+ }
+
+ mtx_unlock(&dev->event_lock);
+
+ if (stall_detected) {
+ DRM_DEBUG("Pageflip stall detected\n");
+ intel_prepare_page_flip(dev, intel_crtc->plane);
+ }
+}
+
+static void
+i915_driver_irq_handler(void *arg)
+{
+ struct drm_device *dev = (struct drm_device *)arg;
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *)dev->dev_private;
+#if 0
+ struct drm_i915_master_private *master_priv;
+#endif
+ u32 iir, new_iir;
+ u32 pipe_stats[I915_MAX_PIPES];
+ u32 vblank_status;
+ int vblank = 0;
+ int irq_received;
+ int pipe;
+ bool blc_event = false;
+
+ atomic_inc(&dev_priv->irq_received);
+
+ iir = I915_READ(IIR);
+
+ CTR1(KTR_DRM, "driver_irq_handler %x", iir);
+
+ if (INTEL_INFO(dev)->gen >= 4)
+ vblank_status = PIPE_START_VBLANK_INTERRUPT_STATUS;
+ else
+ vblank_status = PIPE_VBLANK_INTERRUPT_STATUS;
+
+ for (;;) {
+ irq_received = iir != 0;
+
+ /* Can't rely on pipestat interrupt bit in iir as it might
+ * have been cleared after the pipestat interrupt was received.
+ * It doesn't set the bit in iir again, but it still produces
+ * interrupts (for non-MSI).
+ */
+ mtx_lock(&dev_priv->irq_lock);
+ if (iir & I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT)
+ i915_handle_error(dev, false);
+
+ for_each_pipe(pipe) {
+ int reg = PIPESTAT(pipe);
+ pipe_stats[pipe] = I915_READ(reg);
+
+ /*
+ * Clear the PIPE*STAT regs before the IIR
+ */
+ if (pipe_stats[pipe] & 0x8000ffff) {
+ if (pipe_stats[pipe] & PIPE_FIFO_UNDERRUN_STATUS)
+ DRM_DEBUG("pipe %c underrun\n",
+ pipe_name(pipe));
+ I915_WRITE(reg, pipe_stats[pipe]);
+ irq_received = 1;
+ }
+ }
+ mtx_unlock(&dev_priv->irq_lock);
+
+ if (!irq_received)
+ break;
+
+ /* Consume port. Then clear IIR or we'll miss events */
+ if ((I915_HAS_HOTPLUG(dev)) &&
+ (iir & I915_DISPLAY_PORT_INTERRUPT)) {
+ u32 hotplug_status = I915_READ(PORT_HOTPLUG_STAT);
+
+ DRM_DEBUG("i915: hotplug event received, stat 0x%08x\n",
+ hotplug_status);
+ if (hotplug_status & dev_priv->hotplug_supported_mask)
+ taskqueue_enqueue(dev_priv->tq,
+ &dev_priv->hotplug_task);
+
+ I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
+ I915_READ(PORT_HOTPLUG_STAT);
+ }
+
+ I915_WRITE(IIR, iir);
+ new_iir = I915_READ(IIR); /* Flush posted writes */
+
+#if 0
+ if (dev->primary->master) {
+ master_priv = dev->primary->master->driver_priv;
+ if (master_priv->sarea_priv)
+ master_priv->sarea_priv->last_dispatch =
+ READ_BREADCRUMB(dev_priv);
+ }
+#else
+ if (dev_priv->sarea_priv)
+ dev_priv->sarea_priv->last_dispatch =
+ READ_BREADCRUMB(dev_priv);
+#endif
+
+ if (iir & I915_USER_INTERRUPT)
+ notify_ring(dev, &dev_priv->rings[RCS]);
+ if (iir & I915_BSD_USER_INTERRUPT)
+ notify_ring(dev, &dev_priv->rings[VCS]);
+
+ if (iir & I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT) {
+ intel_prepare_page_flip(dev, 0);
+ if (dev_priv->flip_pending_is_done)
+ intel_finish_page_flip_plane(dev, 0);
+ }
+
+ if (iir & I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT) {
+ intel_prepare_page_flip(dev, 1);
+ if (dev_priv->flip_pending_is_done)
+ intel_finish_page_flip_plane(dev, 1);
+ }
+
+ for_each_pipe(pipe) {
+ if (pipe_stats[pipe] & vblank_status &&
+ drm_handle_vblank(dev, pipe)) {
+ vblank++;
+ if (!dev_priv->flip_pending_is_done) {
+ i915_pageflip_stall_check(dev, pipe);
+ intel_finish_page_flip(dev, pipe);
+ }
+ }
+
+ if (pipe_stats[pipe] & PIPE_LEGACY_BLC_EVENT_STATUS)
+ blc_event = true;
+ }
+
+
+ if (blc_event || (iir & I915_ASLE_INTERRUPT)) {
+#if 1
+ KIB_NOTYET();
+#else
+ intel_opregion_asle_intr(dev);
+#endif
+ }
+
+ /* With MSI, interrupts are only generated when iir
+ * transitions from zero to nonzero. If another bit got
+ * set while we were handling the existing iir bits, then
+ * we would never get another interrupt.
+ *
+ * This is fine on non-MSI as well, as if we hit this path
+ * we avoid exiting the interrupt handler only to generate
+ * another one.
+ *
+ * Note that for MSI this could cause a stray interrupt report
+ * if an interrupt landed in the time between writing IIR and
+ * the posting read. This should be rare enough to never
+ * trigger the 99% of 100,000 interrupts test for disabling
+ * stray interrupts.
+ */
+ iir = new_iir;
+ }
+}
+
+static int i915_emit_irq(struct drm_device * dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+#if 0
+ struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
+#endif
+
+ i915_kernel_lost_context(dev);
+
+ DRM_DEBUG("i915: emit_irq\n");
+
+ dev_priv->counter++;
+ if (dev_priv->counter > 0x7FFFFFFFUL)
+ dev_priv->counter = 1;
+#if 0
+ if (master_priv->sarea_priv)
+ master_priv->sarea_priv->last_enqueue = dev_priv->counter;
+#else
+ if (dev_priv->sarea_priv)
+ dev_priv->sarea_priv->last_enqueue = dev_priv->counter;
+#endif
+
+ if (BEGIN_LP_RING(4) == 0) {
+ OUT_RING(MI_STORE_DWORD_INDEX);
+ OUT_RING(I915_BREADCRUMB_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
+ OUT_RING(dev_priv->counter);
+ OUT_RING(MI_USER_INTERRUPT);
+ ADVANCE_LP_RING();
+ }
+
+ return dev_priv->counter;
+}
+
+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;
+#if 0
+ struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
+#endif
+ int ret;
+ struct intel_ring_buffer *ring = LP_RING(dev_priv);
+
+ DRM_DEBUG("irq_nr=%d breadcrumb=%d\n", irq_nr,
+ READ_BREADCRUMB(dev_priv));
+
+#if 0
+ if (READ_BREADCRUMB(dev_priv) >= irq_nr) {
+ if (master_priv->sarea_priv)
+ master_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
+ return 0;
+ }
+
+ if (master_priv->sarea_priv)
+ master_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
+#else
+ if (READ_BREADCRUMB(dev_priv) >= irq_nr) {
+ if (dev_priv->sarea_priv) {
+ dev_priv->sarea_priv->last_dispatch =
+ READ_BREADCRUMB(dev_priv);
+ }
+ return 0;
+ }
+
+ if (dev_priv->sarea_priv)
+ dev_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
+#endif
+
+ ret = 0;
+ mtx_lock(&ring->irq_lock);
+ if (ring->irq_get(ring)) {
+ DRM_UNLOCK(dev);
+ while (ret == 0 && READ_BREADCRUMB(dev_priv) < irq_nr) {
+ ret = -msleep(ring, &ring->irq_lock, PCATCH,
+ "915wtq", 3 * hz);
+ }
+ ring->irq_put(ring);
+ mtx_unlock(&ring->irq_lock);
+ DRM_LOCK(dev);
+ } else {
+ mtx_unlock(&ring->irq_lock);
+ if (_intel_wait_for(dev, READ_BREADCRUMB(dev_priv) >= irq_nr,
+ 3000, 1, "915wir"))
+ ret = -EBUSY;
+ }
+
+ if (ret == -EBUSY) {
+ DRM_ERROR("EBUSY -- rec: %d emitted: %d\n",
+ READ_BREADCRUMB(dev_priv), (int)dev_priv->counter);
+ }
+
+ return ret;
+}
+
+/* Needs the lock as it touches the ring.
+ */
+int i915_irq_emit(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ drm_i915_irq_emit_t *emit = data;
+ int result;
+
+ if (!dev_priv || !LP_RING(dev_priv)->virtual_start) {
+ DRM_ERROR("called with no initialization\n");
+ return -EINVAL;
+ }
+
+ RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
+
+ DRM_LOCK(dev);
+ result = i915_emit_irq(dev);
+ DRM_UNLOCK(dev);
+
+ if (DRM_COPY_TO_USER(emit->irq_seq, &result, sizeof(int))) {
+ DRM_ERROR("copy_to_user\n");
+ return -EFAULT;
+ }
+
+ return 0;
+}
+
+/* Doesn't need the hardware lock.
+ */
+int i915_irq_wait(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ drm_i915_irq_wait_t *irqwait = data;
+
+ if (!dev_priv) {
+ DRM_ERROR("called with no initialization\n");
+ return -EINVAL;
+ }
+
+ return i915_wait_irq(dev, irqwait->irq_seq);
+}
+
+/* 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)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+
+ if (!i915_pipe_enabled(dev, pipe))
+ return -EINVAL;
+
+ mtx_lock(&dev_priv->irq_lock);
+ if (INTEL_INFO(dev)->gen >= 4)
+ i915_enable_pipestat(dev_priv, pipe,
+ PIPE_START_VBLANK_INTERRUPT_ENABLE);
+ else
+ i915_enable_pipestat(dev_priv, pipe,
+ PIPE_VBLANK_INTERRUPT_ENABLE);
+
+ /* maintain vblank delivery even in deep C-states */
+ if (dev_priv->info->gen == 3)
+ I915_WRITE(INSTPM, INSTPM_AGPBUSY_DIS << 16);
+ mtx_unlock(&dev_priv->irq_lock);
+ CTR1(KTR_DRM, "i915_enable_vblank %d", pipe);
+
+ return 0;
+}
+
+static int
+ironlake_enable_vblank(struct drm_device *dev, int pipe)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+
+ if (!i915_pipe_enabled(dev, pipe))
+ return -EINVAL;
+
+ mtx_lock(&dev_priv->irq_lock);
+ ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
+ 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)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+
+ if (!i915_pipe_enabled(dev, pipe))
+ return -EINVAL;
+
+ mtx_lock(&dev_priv->irq_lock);
+ ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
+ DE_PIPEA_VBLANK_IVB : DE_PIPEB_VBLANK_IVB);
+ mtx_unlock(&dev_priv->irq_lock);
+ CTR1(KTR_DRM, "ivybridge_enable_vblank %d", pipe);
+
+ return 0;
+}
+
+
+/* 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)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+
+ mtx_lock(&dev_priv->irq_lock);
+ if (dev_priv->info->gen == 3)
+ I915_WRITE(INSTPM,
+ INSTPM_AGPBUSY_DIS << 16 | INSTPM_AGPBUSY_DIS);
+
+ i915_disable_pipestat(dev_priv, pipe,
+ 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)
+{
+ 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);
+ 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)
+{
+ 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_IVB : DE_PIPEB_VBLANK_IVB);
+ mtx_unlock(&dev_priv->irq_lock);
+ CTR1(KTR_DRM, "ivybridge_disable_vblank %d", pipe);
+}
+
+/* Set the vblank monitor pipe
+ */
+int i915_vblank_pipe_set(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (!dev_priv) {
+ DRM_ERROR("called with no initialization\n");
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+int i915_vblank_pipe_get(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ drm_i915_vblank_pipe_t *pipe = data;
+
+ if (!dev_priv) {
+ DRM_ERROR("called with no initialization\n");
+ return -EINVAL;
+ }
+
+ pipe->pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B;
+
+ return 0;
+}
+
+/**
+ * Schedule buffer swap at given vertical blank.
+ */
+int i915_vblank_swap(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ /* The delayed swap mechanism was fundamentally racy, and has been
+ * removed. The model was that the client requested a delayed flip/swap
+ * from the kernel, then waited for vblank before continuing to perform
+ * rendering. The problem was that the kernel might wake the client
+ * up before it dispatched the vblank swap (since the lock has to be
+ * held while touching the ringbuffer), in which case the client would
+ * clear and start the next frame before the swap occurred, and
+ * flicker would occur in addition to likely missing the vblank.
+ *
+ * In the absence of this ioctl, userland falls back to a correct path
+ * of waiting for a vblank, then dispatching the swap on its own.
+ * Context switching to userland and back is plenty fast enough for
+ * meeting the requirements of vblank swapping.
+ */
+ return -EINVAL;
+}
+
+static u32
+ring_last_seqno(struct intel_ring_buffer *ring)
+{
+
+ if (list_empty(&ring->request_list))
+ return (0);
+ else
+ return (list_entry(ring->request_list.prev,
+ struct drm_i915_gem_request, list)->seqno);
+}
+
+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))) {
+ /* Issue a wake-up to catch stuck h/w. */
+ if (ring->waiting_seqno) {
+ DRM_ERROR(
+"Hangcheck timer elapsed... %s idle [waiting on %d, at %d], missed IRQ?\n",
+ ring->name,
+ ring->waiting_seqno,
+ ring->get_seqno(ring));
+ wakeup(ring);
+ *err = true;
+ }
+ return true;
+ }
+ return false;
+}
+
+static bool kick_ring(struct intel_ring_buffer *ring)
+{
+ struct drm_device *dev = ring->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 tmp = I915_READ_CTL(ring);
+ if (tmp & RING_WAIT) {
+ DRM_ERROR("Kicking stuck wait on %s\n",
+ ring->name);
+ I915_WRITE_CTL(ring, tmp);
+ return true;
+ }
+ return false;
+}
+
+/**
+ * This is called when the chip hasn't reported back with completed
+ * batchbuffers in a long time. The first time this is called we simply record
+ * 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)
+{
+ struct drm_device *dev = (struct drm_device *)context;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ uint32_t acthd, instdone, instdone1, acthd_bsd, acthd_blt;
+ bool err = false;
+
+ if (!i915_enable_hangcheck)
+ return;
+
+ /* If all work is done then ACTHD clearly hasn't advanced. */
+ if (i915_hangcheck_ring_idle(&dev_priv->rings[RCS], &err) &&
+ i915_hangcheck_ring_idle(&dev_priv->rings[VCS], &err) &&
+ i915_hangcheck_ring_idle(&dev_priv->rings[BCS], &err)) {
+ dev_priv->hangcheck_count = 0;
+ if (err)
+ goto repeat;
+ return;
+ }
+
+ if (INTEL_INFO(dev)->gen < 4) {
+ instdone = I915_READ(INSTDONE);
+ instdone1 = 0;
+ } else {
+ instdone = I915_READ(INSTDONE_I965);
+ instdone1 = I915_READ(INSTDONE1);
+ }
+ acthd = intel_ring_get_active_head(&dev_priv->rings[RCS]);
+ acthd_bsd = HAS_BSD(dev) ?
+ intel_ring_get_active_head(&dev_priv->rings[VCS]) : 0;
+ acthd_blt = HAS_BLT(dev) ?
+ intel_ring_get_active_head(&dev_priv->rings[BCS]) : 0;
+
+ if (dev_priv->last_acthd == acthd &&
+ dev_priv->last_acthd_bsd == acthd_bsd &&
+ dev_priv->last_acthd_blt == acthd_blt &&
+ dev_priv->last_instdone == instdone &&
+ dev_priv->last_instdone1 == instdone1) {
+ if (dev_priv->hangcheck_count++ > 1) {
+ DRM_ERROR("Hangcheck timer elapsed... GPU hung\n");
+ i915_handle_error(dev, true);
+
+ if (!IS_GEN2(dev)) {
+ /* Is the chip hanging on a WAIT_FOR_EVENT?
+ * If so we can simply poke the RB_WAIT bit
+ * and break the hang. This should work on
+ * all but the second generation chipsets.
+ */
+ if (kick_ring(&dev_priv->rings[RCS]))
+ goto repeat;
+
+ if (HAS_BSD(dev) &&
+ kick_ring(&dev_priv->rings[VCS]))
+ goto repeat;
+
+ if (HAS_BLT(dev) &&
+ kick_ring(&dev_priv->rings[BCS]))
+ goto repeat;
+ }
+
+ return;
+ }
+ } else {
+ dev_priv->hangcheck_count = 0;
+
+ dev_priv->last_acthd = acthd;
+ dev_priv->last_acthd_bsd = acthd_bsd;
+ dev_priv->last_acthd_blt = acthd_blt;
+ dev_priv->last_instdone = instdone;
+ dev_priv->last_instdone1 = instdone1;
+ }
+
+repeat:
+ /* Reset timer case chip hangs without another request being added */
+ callout_schedule(&dev_priv->hangcheck_timer, DRM_I915_HANGCHECK_PERIOD);
+}
+
+/* drm_dma.h hooks
+*/
+static void
+ironlake_irq_preinstall(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+
+ atomic_set(&dev_priv->irq_received, 0);
+
+ TASK_INIT(&dev_priv->hotplug_task, 0, i915_hotplug_work_func,
+ 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,
+ dev->dev_private);
+
+ I915_WRITE(HWSTAM, 0xeffe);
+
+ /* XXX hotplug from PCH */
+
+ I915_WRITE(DEIMR, 0xffffffff);
+ I915_WRITE(DEIER, 0x0);
+ POSTING_READ(DEIER);
+
+ /* and GT */
+ I915_WRITE(GTIMR, 0xffffffff);
+ I915_WRITE(GTIER, 0x0);
+ POSTING_READ(GTIER);
+
+ /* south display irq */
+ I915_WRITE(SDEIMR, 0xffffffff);
+ I915_WRITE(SDEIER, 0x0);
+ POSTING_READ(SDEIER);
+}
+
+/*
+ * Enable digital hotplug on the PCH, and configure the DP short pulse
+ * duration to 2ms (which is the minimum in the Display Port spec)
+ *
+ * This register is the same on all known PCH chips.
+ */
+
+static void ironlake_enable_pch_hotplug(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ u32 hotplug;
+
+ hotplug = I915_READ(PCH_PORT_HOTPLUG);
+ hotplug &= ~(PORTD_PULSE_DURATION_MASK|PORTC_PULSE_DURATION_MASK|PORTB_PULSE_DURATION_MASK);
+ hotplug |= PORTD_HOTPLUG_ENABLE | PORTD_PULSE_DURATION_2ms;
+ hotplug |= PORTC_HOTPLUG_ENABLE | PORTC_PULSE_DURATION_2ms;
+ hotplug |= PORTB_HOTPLUG_ENABLE | PORTB_PULSE_DURATION_2ms;
+ I915_WRITE(PCH_PORT_HOTPLUG, hotplug);
+}
+
+static int ironlake_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 */
+ u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE | DE_PCH_EVENT |
+ DE_PLANEA_FLIP_DONE | DE_PLANEB_FLIP_DONE;
+ u32 render_irqs;
+ u32 hotplug_mask;
+
+ dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B;
+ dev_priv->irq_mask = ~display_mask;
+
+ /* should always can generate irq */
+ I915_WRITE(DEIIR, I915_READ(DEIIR));
+ I915_WRITE(DEIMR, dev_priv->irq_mask);
+ I915_WRITE(DEIER, display_mask | DE_PIPEA_VBLANK | DE_PIPEB_VBLANK);
+ POSTING_READ(DEIER);
+
+ dev_priv->gt_irq_mask = ~0;
+
+ I915_WRITE(GTIIR, I915_READ(GTIIR));
+ I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
+
+ if (IS_GEN6(dev))
+ render_irqs =
+ GT_USER_INTERRUPT |
+ GT_GEN6_BSD_USER_INTERRUPT |
+ GT_BLT_USER_INTERRUPT;
+ else
+ render_irqs =
+ GT_USER_INTERRUPT |
+ GT_PIPE_NOTIFY |
+ GT_BSD_USER_INTERRUPT;
+ I915_WRITE(GTIER, render_irqs);
+ POSTING_READ(GTIER);
+
+ if (HAS_PCH_CPT(dev)) {
+ hotplug_mask = (SDE_CRT_HOTPLUG_CPT |
+ SDE_PORTB_HOTPLUG_CPT |
+ SDE_PORTC_HOTPLUG_CPT |
+ SDE_PORTD_HOTPLUG_CPT);
+ } else {
+ hotplug_mask = (SDE_CRT_HOTPLUG |
+ SDE_PORTB_HOTPLUG |
+ SDE_PORTC_HOTPLUG |
+ SDE_PORTD_HOTPLUG |
+ SDE_AUX_MASK);
+ }
+
+ dev_priv->pch_irq_mask = ~hotplug_mask;
+
+ I915_WRITE(SDEIIR, I915_READ(SDEIIR));
+ I915_WRITE(SDEIMR, dev_priv->pch_irq_mask);
+ I915_WRITE(SDEIER, hotplug_mask);
+ POSTING_READ(SDEIER);
+
+ ironlake_enable_pch_hotplug(dev);
+
+ if (IS_IRONLAKE_M(dev)) {
+ /* Clear & enable PCU event interrupts */
+ I915_WRITE(DEIIR, DE_PCU_EVENT);
+ I915_WRITE(DEIER, I915_READ(DEIER) | DE_PCU_EVENT);
+ ironlake_enable_display_irq(dev_priv, DE_PCU_EVENT);
+ }
+
+ return 0;
+}
+
+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 */
+ u32 display_mask = DE_MASTER_IRQ_CONTROL | DE_GSE_IVB |
+ DE_PCH_EVENT_IVB | DE_PLANEA_FLIP_DONE_IVB |
+ DE_PLANEB_FLIP_DONE_IVB;
+ u32 render_irqs;
+ u32 hotplug_mask;
+
+ dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B;
+ dev_priv->irq_mask = ~display_mask;
+
+ /* should always can generate irq */
+ I915_WRITE(DEIIR, I915_READ(DEIIR));
+ I915_WRITE(DEIMR, dev_priv->irq_mask);
+ I915_WRITE(DEIER, display_mask | DE_PIPEA_VBLANK_IVB |
+ DE_PIPEB_VBLANK_IVB);
+ POSTING_READ(DEIER);
+
+ dev_priv->gt_irq_mask = ~0;
+
+ I915_WRITE(GTIIR, I915_READ(GTIIR));
+ I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
+
+ render_irqs = GT_USER_INTERRUPT | GT_GEN6_BSD_USER_INTERRUPT |
+ GT_BLT_USER_INTERRUPT;
+ I915_WRITE(GTIER, render_irqs);
+ POSTING_READ(GTIER);
+
+ hotplug_mask = (SDE_CRT_HOTPLUG_CPT |
+ SDE_PORTB_HOTPLUG_CPT |
+ SDE_PORTC_HOTPLUG_CPT |
+ SDE_PORTD_HOTPLUG_CPT);
+ dev_priv->pch_irq_mask = ~hotplug_mask;
+
+ I915_WRITE(SDEIIR, I915_READ(SDEIIR));
+ I915_WRITE(SDEIMR, dev_priv->pch_irq_mask);
+ I915_WRITE(SDEIER, hotplug_mask);
+ POSTING_READ(SDEIER);
+
+ ironlake_enable_pch_hotplug(dev);
+
+ return 0;
+}
+
+static void
+i915_driver_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);
+
+ TASK_INIT(&dev_priv->hotplug_task, 0, i915_hotplug_work_func,
+ 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,
+ dev->dev_private);
+
+ if (I915_HAS_HOTPLUG(dev)) {
+ I915_WRITE(PORT_HOTPLUG_EN, 0);
+ I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
+ }
+
+ I915_WRITE(HWSTAM, 0xeffe);
+ for_each_pipe(pipe)
+ I915_WRITE(PIPESTAT(pipe), 0);
+ I915_WRITE(IMR, 0xffffffff);
+ I915_WRITE(IER, 0x0);
+ POSTING_READ(IER);
+}
+
+/*
+ * Must be called after intel_modeset_init or hotplug interrupts won't be
+ * enabled correctly.
+ */
+static int
+i915_driver_irq_postinstall(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ u32 enable_mask = I915_INTERRUPT_ENABLE_FIX | I915_INTERRUPT_ENABLE_VAR;
+ u32 error_mask;
+
+ dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B;
+
+ /* Unmask the interrupts that we always want on. */
+ dev_priv->irq_mask = ~I915_INTERRUPT_ENABLE_FIX;
+
+ dev_priv->pipestat[0] = 0;
+ dev_priv->pipestat[1] = 0;
+
+ if (I915_HAS_HOTPLUG(dev)) {
+ /* Enable in IER... */
+ enable_mask |= I915_DISPLAY_PORT_INTERRUPT;
+ /* and unmask in IMR */
+ dev_priv->irq_mask &= ~I915_DISPLAY_PORT_INTERRUPT;
+ }
+
+ /*
+ * Enable some error detection, note the instruction error mask
+ * bit is reserved, so we leave it masked.
+ */
+ if (IS_G4X(dev)) {
+ error_mask = ~(GM45_ERROR_PAGE_TABLE |
+ GM45_ERROR_MEM_PRIV |
+ GM45_ERROR_CP_PRIV |
+ I915_ERROR_MEMORY_REFRESH);
+ } else {
+ error_mask = ~(I915_ERROR_PAGE_TABLE |
+ I915_ERROR_MEMORY_REFRESH);
+ }
+ I915_WRITE(EMR, error_mask);
+
+ I915_WRITE(IMR, dev_priv->irq_mask);
+ I915_WRITE(IER, enable_mask);
+ POSTING_READ(IER);
+
+ if (I915_HAS_HOTPLUG(dev)) {
+ u32 hotplug_en = I915_READ(PORT_HOTPLUG_EN);
+
+ /* Note HDMI and DP share bits */
+ if (dev_priv->hotplug_supported_mask & HDMIB_HOTPLUG_INT_STATUS)
+ hotplug_en |= HDMIB_HOTPLUG_INT_EN;
+ if (dev_priv->hotplug_supported_mask & HDMIC_HOTPLUG_INT_STATUS)
+ hotplug_en |= HDMIC_HOTPLUG_INT_EN;
+ if (dev_priv->hotplug_supported_mask & HDMID_HOTPLUG_INT_STATUS)
+ hotplug_en |= HDMID_HOTPLUG_INT_EN;
+ if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS)
+ hotplug_en |= SDVOC_HOTPLUG_INT_EN;
+ if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS)
+ hotplug_en |= SDVOB_HOTPLUG_INT_EN;
+ if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
+ hotplug_en |= CRT_HOTPLUG_INT_EN;
+
+ /* Programming the CRT detection parameters tends
+ to generate a spurious hotplug event about three
+ seconds later. So just do it once.
+ */
+ if (IS_G4X(dev))
+ hotplug_en |= CRT_HOTPLUG_ACTIVATION_PERIOD_64;
+ hotplug_en |= CRT_HOTPLUG_VOLTAGE_COMPARE_50;
+ }
+
+ /* Ignore TV since it's buggy */
+
+ I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
+ }
+
+#if 1
+ KIB_NOTYET();
+#else
+ intel_opregion_enable_asle(dev);
+#endif
+
+ return 0;
+}
+
+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)
+ return;
+
+ dev_priv->vblank_pipe = 0;
+
+ I915_WRITE(HWSTAM, 0xffffffff);
+
+ I915_WRITE(DEIMR, 0xffffffff);
+ I915_WRITE(DEIER, 0x0);
+ I915_WRITE(DEIIR, I915_READ(DEIIR));
+
+ I915_WRITE(GTIMR, 0xffffffff);
+ I915_WRITE(GTIER, 0x0);
+ I915_WRITE(GTIIR, I915_READ(GTIIR));
+
+ I915_WRITE(SDEIMR, 0xffffffff);
+ I915_WRITE(SDEIER, 0x0);
+ I915_WRITE(SDEIIR, I915_READ(SDEIIR));
+
+ taskqueue_drain(dev_priv->tq, &dev_priv->hotplug_task);
+ taskqueue_drain(dev_priv->tq, &dev_priv->error_task);
+ taskqueue_drain(dev_priv->tq, &dev_priv->rps_task);
+}
+
+static void i915_driver_irq_uninstall(struct drm_device * dev)
+{
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ int pipe;
+
+ if (!dev_priv)
+ return;
+
+ dev_priv->vblank_pipe = 0;
+
+ if (I915_HAS_HOTPLUG(dev)) {
+ I915_WRITE(PORT_HOTPLUG_EN, 0);
+ I915_WRITE(PORT_HOTPLUG_STAT, I915_READ(PORT_HOTPLUG_STAT));
+ }
+
+ I915_WRITE(HWSTAM, 0xffffffff);
+ for_each_pipe(pipe)
+ I915_WRITE(PIPESTAT(pipe), 0);
+ I915_WRITE(IMR, 0xffffffff);
+ I915_WRITE(IER, 0x0);
+
+ for_each_pipe(pipe)
+ I915_WRITE(PIPESTAT(pipe),
+ I915_READ(PIPESTAT(pipe)) & 0x8000ffff);
+ I915_WRITE(IIR, I915_READ(IIR));
+
+ taskqueue_drain(dev_priv->tq, &dev_priv->hotplug_task);
+ taskqueue_drain(dev_priv->tq, &dev_priv->error_task);
+ taskqueue_drain(dev_priv->tq, &dev_priv->rps_task);
+}
+
+void
+intel_irq_init(struct drm_device *dev)
+{
+
+ dev->driver->get_vblank_counter = i915_get_vblank_counter;
+ dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
+ if (IS_G4X(dev) || IS_GEN5(dev) || IS_GEN6(dev) || IS_IVYBRIDGE(dev)) {
+ dev->max_vblank_count = 0xffffffff; /* full 32 bit counter */
+ dev->driver->get_vblank_counter = gm45_get_vblank_counter;
+ }
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ dev->driver->get_vblank_timestamp = i915_get_vblank_timestamp;
+ else
+ dev->driver->get_vblank_timestamp = NULL;
+ dev->driver->get_scanout_position = i915_get_crtc_scanoutpos;
+
+ if (IS_IVYBRIDGE(dev)) {
+ /* Share pre & uninstall handlers with ILK/SNB */
+ dev->driver->irq_handler = ivybridge_irq_handler;
+ dev->driver->irq_preinstall = ironlake_irq_preinstall;
+ dev->driver->irq_postinstall = ivybridge_irq_postinstall;
+ dev->driver->irq_uninstall = ironlake_irq_uninstall;
+ dev->driver->enable_vblank = ivybridge_enable_vblank;
+ dev->driver->disable_vblank = ivybridge_disable_vblank;
+ } else if (HAS_PCH_SPLIT(dev)) {
+ dev->driver->irq_handler = ironlake_irq_handler;
+ dev->driver->irq_preinstall = ironlake_irq_preinstall;
+ dev->driver->irq_postinstall = ironlake_irq_postinstall;
+ dev->driver->irq_uninstall = ironlake_irq_uninstall;
+ dev->driver->enable_vblank = ironlake_enable_vblank;
+ dev->driver->disable_vblank = ironlake_disable_vblank;
+ } else {
+ dev->driver->irq_preinstall = i915_driver_irq_preinstall;
+ dev->driver->irq_postinstall = i915_driver_irq_postinstall;
+ dev->driver->irq_uninstall = i915_driver_irq_uninstall;
+ dev->driver->irq_handler = i915_driver_irq_handler;
+ dev->driver->enable_vblank = i915_enable_vblank;
+ 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) {
+ /* 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);
+}
+
+static void
+i915_error_state_free(struct drm_device *dev,
+ struct drm_i915_error_state *error)
+{
+ int i;
+
+ for (i = 0; i < DRM_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 u32
+capture_bo_list(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) {
+ 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;
+
+ if (++i == count)
+ break;
+
+ err++;
+ }
+
+ 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->faddr[ring->id] = I915_READ(RING_DMA_FADD(ring->mmio_base));
+ 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->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->ipeir[ring->id] = I915_READ(IPEIR);
+ error->ipehr[ring->id] = I915_READ(IPEHR);
+ error->instdone[ring->id] = I915_READ(INSTDONE);
+ }
+
+ 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 drm_i915_gem_request *request;
+ int i, count;
+
+ for (i = 0; i < I915_NUM_RINGS; i++) {
+ struct intel_ring_buffer *ring = &dev_priv->rings[i];
+
+ if (ring->obj == NULL)
+ continue;
+
+ 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);
+
+ error->eir = I915_READ(EIR);
+ error->pgtbl_er = I915_READ(PGTBL_ER);
+ 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.pinned_list, mm_list)
+ 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_bo_list(error->active_bo,
+ error->active_bo_count, &dev_priv->mm.active_list);
+
+ if (error->pinned_bo)
+ error->pinned_bo_count = capture_bo_list(error->pinned_bo,
+ error->pinned_bo_count, &dev_priv->mm.pinned_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(dev, 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)
+ i915_error_state_free(dev, error);
+}
diff --git a/sys/dev/drm2/i915/i915_reg.h b/sys/dev/drm2/i915/i915_reg.h
new file mode 100644
index 000000000000..754e535f78fc
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_reg.h
@@ -0,0 +1,3876 @@
+/* Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#ifndef _I915_REG_H_
+#define _I915_REG_H_
+
+#define _PIPE(pipe, a, b) ((a) + (pipe)*((b)-(a)))
+
+/*
+ * The Bridge device's PCI config space has information about the
+ * fb aperture size and the amount of pre-reserved memory.
+ * This is all handled in the intel-gtt.ko module. i915.ko only
+ * cares about the vga bit for the vga rbiter.
+ */
+#define INTEL_GMCH_CTRL 0x52
+#define INTEL_GMCH_VGA_DISABLE (1 << 1)
+
+/* PCI config space */
+
+#define HPLLCC 0xc0 /* 855 only */
+#define GC_CLOCK_CONTROL_MASK (0xf << 0)
+#define GC_CLOCK_133_200 (0 << 0)
+#define GC_CLOCK_100_200 (1 << 0)
+#define GC_CLOCK_100_133 (2 << 0)
+#define GC_CLOCK_166_250 (3 << 0)
+#define GCFGC2 0xda
+#define GCFGC 0xf0 /* 915+ only */
+#define GC_LOW_FREQUENCY_ENABLE (1 << 7)
+#define GC_DISPLAY_CLOCK_190_200_MHZ (0 << 4)
+#define GC_DISPLAY_CLOCK_333_MHZ (4 << 4)
+#define GC_DISPLAY_CLOCK_MASK (7 << 4)
+#define GM45_GC_RENDER_CLOCK_MASK (0xf << 0)
+#define GM45_GC_RENDER_CLOCK_266_MHZ (8 << 0)
+#define GM45_GC_RENDER_CLOCK_320_MHZ (9 << 0)
+#define GM45_GC_RENDER_CLOCK_400_MHZ (0xb << 0)
+#define GM45_GC_RENDER_CLOCK_533_MHZ (0xc << 0)
+#define I965_GC_RENDER_CLOCK_MASK (0xf << 0)
+#define I965_GC_RENDER_CLOCK_267_MHZ (2 << 0)
+#define I965_GC_RENDER_CLOCK_333_MHZ (3 << 0)
+#define I965_GC_RENDER_CLOCK_444_MHZ (4 << 0)
+#define I965_GC_RENDER_CLOCK_533_MHZ (5 << 0)
+#define I945_GC_RENDER_CLOCK_MASK (7 << 0)
+#define I945_GC_RENDER_CLOCK_166_MHZ (0 << 0)
+#define I945_GC_RENDER_CLOCK_200_MHZ (1 << 0)
+#define I945_GC_RENDER_CLOCK_250_MHZ (3 << 0)
+#define I945_GC_RENDER_CLOCK_400_MHZ (5 << 0)
+#define I915_GC_RENDER_CLOCK_MASK (7 << 0)
+#define I915_GC_RENDER_CLOCK_166_MHZ (0 << 0)
+#define I915_GC_RENDER_CLOCK_200_MHZ (1 << 0)
+#define I915_GC_RENDER_CLOCK_333_MHZ (4 << 0)
+#define LBB 0xf4
+
+/* Graphics reset regs */
+#define I965_GDRST 0xc0 /* PCI config register */
+#define ILK_GDSR 0x2ca4 /* MCHBAR offset */
+#define GRDOM_FULL (0<<2)
+#define GRDOM_RENDER (1<<2)
+#define GRDOM_MEDIA (3<<2)
+
+#define GEN6_MBCUNIT_SNPCR 0x900c /* for LLC config */
+#define GEN6_MBC_SNPCR_SHIFT 21
+#define GEN6_MBC_SNPCR_MASK (3<<21)
+#define GEN6_MBC_SNPCR_MAX (0<<21)
+#define GEN6_MBC_SNPCR_MED (1<<21)
+#define GEN6_MBC_SNPCR_LOW (2<<21)
+#define GEN6_MBC_SNPCR_MIN (3<<21) /* only 1/16th of the cache is shared */
+
+#define GEN6_MBCTL 0x0907c
+#define GEN6_MBCTL_ENABLE_BOOT_FETCH (1 << 4)
+#define GEN6_MBCTL_CTX_FETCH_NEEDED (1 << 3)
+#define GEN6_MBCTL_BME_UPDATE_ENABLE (1 << 2)
+#define GEN6_MBCTL_MAE_UPDATE_ENABLE (1 << 1)
+#define GEN6_MBCTL_BOOT_FETCH_MECH (1 << 0)
+
+#define GEN6_GDRST 0x941c
+#define GEN6_GRDOM_FULL (1 << 0)
+#define GEN6_GRDOM_RENDER (1 << 1)
+#define GEN6_GRDOM_MEDIA (1 << 2)
+#define GEN6_GRDOM_BLT (1 << 3)
+
+/* PPGTT stuff */
+#define GEN6_GTT_ADDR_ENCODE(addr) ((addr) | (((addr) >> 28) & 0xff0))
+
+#define GEN6_PDE_VALID (1 << 0)
+#define GEN6_PDE_LARGE_PAGE (2 << 0) /* use 32kb pages */
+/* gen6+ has bit 11-4 for physical addr bit 39-32 */
+#define GEN6_PDE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
+
+#define GEN6_PTE_VALID (1 << 0)
+#define GEN6_PTE_UNCACHED (1 << 1)
+#define GEN6_PTE_CACHE_LLC (2 << 1)
+#define GEN6_PTE_CACHE_LLC_MLC (3 << 1)
+#define GEN6_PTE_CACHE_BITS (3 << 1)
+#define GEN6_PTE_GFDT (1 << 3)
+#define GEN6_PTE_ADDR_ENCODE(addr) GEN6_GTT_ADDR_ENCODE(addr)
+
+#define RING_PP_DIR_BASE(ring) ((ring)->mmio_base+0x228)
+#define RING_PP_DIR_BASE_READ(ring) ((ring)->mmio_base+0x518)
+#define RING_PP_DIR_DCLV(ring) ((ring)->mmio_base+0x220)
+#define PP_DIR_DCLV_2G 0xffffffff
+
+#define GAM_ECOCHK 0x4090
+#define ECOCHK_SNB_BIT (1<<10)
+#define ECOCHK_PPGTT_CACHE64B (0x3<<3)
+#define ECOCHK_PPGTT_CACHE4B (0x0<<3)
+
+/* VGA stuff */
+
+#define VGA_ST01_MDA 0x3ba
+#define VGA_ST01_CGA 0x3da
+
+#define VGA_MSR_WRITE 0x3c2
+#define VGA_MSR_READ 0x3cc
+#define VGA_MSR_MEM_EN (1<<1)
+#define VGA_MSR_CGA_MODE (1<<0)
+
+#define VGA_SR_INDEX 0x3c4
+#define VGA_SR_DATA 0x3c5
+
+#define VGA_AR_INDEX 0x3c0
+#define VGA_AR_VID_EN (1<<5)
+#define VGA_AR_DATA_WRITE 0x3c0
+#define VGA_AR_DATA_READ 0x3c1
+
+#define VGA_GR_INDEX 0x3ce
+#define VGA_GR_DATA 0x3cf
+/* GR05 */
+#define VGA_GR_MEM_READ_MODE_SHIFT 3
+#define VGA_GR_MEM_READ_MODE_PLANE 1
+/* GR06 */
+#define VGA_GR_MEM_MODE_MASK 0xc
+#define VGA_GR_MEM_MODE_SHIFT 2
+#define VGA_GR_MEM_A0000_AFFFF 0
+#define VGA_GR_MEM_A0000_BFFFF 1
+#define VGA_GR_MEM_B0000_B7FFF 2
+#define VGA_GR_MEM_B0000_BFFFF 3
+
+#define VGA_DACMASK 0x3c6
+#define VGA_DACRX 0x3c7
+#define VGA_DACWX 0x3c8
+#define VGA_DACDATA 0x3c9
+
+#define VGA_CR_INDEX_MDA 0x3b4
+#define VGA_CR_DATA_MDA 0x3b5
+#define VGA_CR_INDEX_CGA 0x3d4
+#define VGA_CR_DATA_CGA 0x3d5
+
+/*
+ * Memory interface instructions used by the kernel
+ */
+#define MI_INSTR(opcode, flags) (((opcode) << 23) | (flags))
+
+#define MI_NOOP MI_INSTR(0, 0)
+#define MI_USER_INTERRUPT MI_INSTR(0x02, 0)
+#define MI_WAIT_FOR_EVENT MI_INSTR(0x03, 0)
+#define MI_WAIT_FOR_OVERLAY_FLIP (1<<16)
+#define MI_WAIT_FOR_PLANE_B_FLIP (1<<6)
+#define MI_WAIT_FOR_PLANE_A_FLIP (1<<2)
+#define MI_WAIT_FOR_PLANE_A_SCANLINES (1<<1)
+#define MI_FLUSH MI_INSTR(0x04, 0)
+#define MI_READ_FLUSH (1 << 0)
+#define MI_EXE_FLUSH (1 << 1)
+#define MI_NO_WRITE_FLUSH (1 << 2)
+#define MI_SCENE_COUNT (1 << 3) /* just increment scene count */
+#define MI_END_SCENE (1 << 4) /* flush binner and incr scene count */
+#define MI_INVALIDATE_ISP (1 << 5) /* invalidate indirect state pointers */
+#define MI_BATCH_BUFFER_END MI_INSTR(0x0a, 0)
+#define MI_SUSPEND_FLUSH MI_INSTR(0x0b, 0)
+#define MI_SUSPEND_FLUSH_EN (1<<0)
+#define MI_REPORT_HEAD MI_INSTR(0x07, 0)
+#define MI_OVERLAY_FLIP MI_INSTR(0x11, 0)
+#define MI_OVERLAY_CONTINUE (0x0<<21)
+#define MI_OVERLAY_ON (0x1<<21)
+#define MI_OVERLAY_OFF (0x2<<21)
+#define MI_LOAD_SCAN_LINES_INCL MI_INSTR(0x12, 0)
+#define MI_DISPLAY_FLIP MI_INSTR(0x14, 2)
+#define MI_DISPLAY_FLIP_I915 MI_INSTR(0x14, 1)
+#define MI_DISPLAY_FLIP_PLANE(n) ((n) << 20)
+#define MI_SET_CONTEXT MI_INSTR(0x18, 0)
+#define MI_MM_SPACE_GTT (1<<8)
+#define MI_MM_SPACE_PHYSICAL (0<<8)
+#define MI_SAVE_EXT_STATE_EN (1<<3)
+#define MI_RESTORE_EXT_STATE_EN (1<<2)
+#define MI_FORCE_RESTORE (1<<1)
+#define MI_RESTORE_INHIBIT (1<<0)
+#define MI_STORE_DWORD_IMM MI_INSTR(0x20, 1)
+#define MI_MEM_VIRTUAL (1 << 22) /* 965+ only */
+#define MI_STORE_DWORD_INDEX MI_INSTR(0x21, 1)
+#define MI_STORE_DWORD_INDEX_SHIFT 2
+/* Official intel docs are somewhat sloppy concerning MI_LOAD_REGISTER_IMM:
+ * - Always issue a MI_NOOP _before_ the MI_LOAD_REGISTER_IMM - otherwise hw
+ * simply ignores the register load under certain conditions.
+ * - One can actually load arbitrary many arbitrary registers: Simply issue x
+ * address/value pairs. Don't overdue it, though, x <= 2^4 must hold!
+ */
+#define MI_LOAD_REGISTER_IMM(x) MI_INSTR(0x22, 2*x-1)
+#define MI_FLUSH_DW MI_INSTR(0x26, 1) /* for GEN6 */
+#define MI_INVALIDATE_TLB (1<<18)
+#define MI_INVALIDATE_BSD (1<<7)
+#define MI_BATCH_BUFFER MI_INSTR(0x30, 1)
+#define MI_BATCH_NON_SECURE (1)
+#define MI_BATCH_NON_SECURE_I965 (1<<8)
+#define MI_BATCH_BUFFER_START MI_INSTR(0x31, 0)
+#define MI_SEMAPHORE_MBOX MI_INSTR(0x16, 1) /* gen6+ */
+#define MI_SEMAPHORE_GLOBAL_GTT (1<<22)
+#define MI_SEMAPHORE_UPDATE (1<<21)
+#define MI_SEMAPHORE_COMPARE (1<<20)
+#define MI_SEMAPHORE_REGISTER (1<<18)
+#define MI_SEMAPHORE_SYNC_RV (2<<16)
+#define MI_SEMAPHORE_SYNC_RB (0<<16)
+#define MI_SEMAPHORE_SYNC_VR (0<<16)
+#define MI_SEMAPHORE_SYNC_VB (2<<16)
+#define MI_SEMAPHORE_SYNC_BR (2<<16)
+#define MI_SEMAPHORE_SYNC_BV (0<<16)
+#define MI_SEMAPHORE_SYNC_INVALID (1<<0)
+/*
+ * 3D instructions used by the kernel
+ */
+#define GFX_INSTR(opcode, flags) ((0x3 << 29) | ((opcode) << 24) | (flags))
+
+#define GFX_OP_RASTER_RULES ((0x3<<29)|(0x7<<24))
+#define GFX_OP_SCISSOR ((0x3<<29)|(0x1c<<24)|(0x10<<19))
+#define SC_UPDATE_SCISSOR (0x1<<1)
+#define SC_ENABLE_MASK (0x1<<0)
+#define SC_ENABLE (0x1<<0)
+#define GFX_OP_LOAD_INDIRECT ((0x3<<29)|(0x1d<<24)|(0x7<<16))
+#define GFX_OP_SCISSOR_INFO ((0x3<<29)|(0x1d<<24)|(0x81<<16)|(0x1))
+#define SCI_YMIN_MASK (0xffff<<16)
+#define SCI_XMIN_MASK (0xffff<<0)
+#define SCI_YMAX_MASK (0xffff<<16)
+#define SCI_XMAX_MASK (0xffff<<0)
+#define GFX_OP_SCISSOR_ENABLE ((0x3<<29)|(0x1c<<24)|(0x10<<19))
+#define GFX_OP_SCISSOR_RECT ((0x3<<29)|(0x1d<<24)|(0x81<<16)|1)
+#define GFX_OP_COLOR_FACTOR ((0x3<<29)|(0x1d<<24)|(0x1<<16)|0x0)
+#define GFX_OP_STIPPLE ((0x3<<29)|(0x1d<<24)|(0x83<<16))
+#define GFX_OP_MAP_INFO ((0x3<<29)|(0x1d<<24)|0x4)
+#define GFX_OP_DESTBUFFER_VARS ((0x3<<29)|(0x1d<<24)|(0x85<<16)|0x0)
+#define GFX_OP_DESTBUFFER_INFO ((0x3<<29)|(0x1d<<24)|(0x8e<<16)|1)
+#define GFX_OP_DRAWRECT_INFO ((0x3<<29)|(0x1d<<24)|(0x80<<16)|(0x3))
+#define GFX_OP_DRAWRECT_INFO_I965 ((0x7900<<16)|0x2)
+#define SRC_COPY_BLT_CMD ((2<<29)|(0x43<<22)|4)
+#define XY_SRC_COPY_BLT_CMD ((2<<29)|(0x53<<22)|6)
+#define XY_MONO_SRC_COPY_IMM_BLT ((2<<29)|(0x71<<22)|5)
+#define XY_SRC_COPY_BLT_WRITE_ALPHA (1<<21)
+#define XY_SRC_COPY_BLT_WRITE_RGB (1<<20)
+#define BLT_DEPTH_8 (0<<24)
+#define BLT_DEPTH_16_565 (1<<24)
+#define BLT_DEPTH_16_1555 (2<<24)
+#define BLT_DEPTH_32 (3<<24)
+#define BLT_ROP_GXCOPY (0xcc<<16)
+#define XY_SRC_COPY_BLT_SRC_TILED (1<<15) /* 965+ only */
+#define XY_SRC_COPY_BLT_DST_TILED (1<<11) /* 965+ only */
+#define CMD_OP_DISPLAYBUFFER_INFO ((0x0<<29)|(0x14<<23)|2)
+#define ASYNC_FLIP (1<<22)
+#define DISPLAY_PLANE_A (0<<20)
+#define DISPLAY_PLANE_B (1<<20)
+#define GFX_OP_PIPE_CONTROL(len) ((0x3<<29)|(0x3<<27)|(0x2<<24)|(len-2))
+#define PIPE_CONTROL_CS_STALL (1<<20)
+#define PIPE_CONTROL_QW_WRITE (1<<14)
+#define PIPE_CONTROL_DEPTH_STALL (1<<13)
+#define PIPE_CONTROL_WRITE_FLUSH (1<<12)
+#define PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH (1<<12) /* gen6+ */
+#define PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE (1<<11) /* MBZ on Ironlake */
+#define PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE (1<<10) /* GM45+ only */
+#define PIPE_CONTROL_INDIRECT_STATE_DISABLE (1<<9)
+#define PIPE_CONTROL_NOTIFY (1<<8)
+#define PIPE_CONTROL_VF_CACHE_INVALIDATE (1<<4)
+#define PIPE_CONTROL_CONST_CACHE_INVALIDATE (1<<3)
+#define PIPE_CONTROL_STATE_CACHE_INVALIDATE (1<<2)
+#define PIPE_CONTROL_STALL_AT_SCOREBOARD (1<<1)
+#define PIPE_CONTROL_DEPTH_CACHE_FLUSH (1<<0)
+#define PIPE_CONTROL_GLOBAL_GTT (1<<2) /* in addr dword */
+
+
+/*
+ * Reset registers
+ */
+#define DEBUG_RESET_I830 0x6070
+#define DEBUG_RESET_FULL (1<<7)
+#define DEBUG_RESET_RENDER (1<<8)
+#define DEBUG_RESET_DISPLAY (1<<9)
+
+
+/*
+ * Fence registers
+ */
+#define FENCE_REG_830_0 0x2000
+#define FENCE_REG_945_8 0x3000
+#define I830_FENCE_START_MASK 0x07f80000
+#define I830_FENCE_TILING_Y_SHIFT 12
+#define I830_FENCE_SIZE_BITS(size) ((ffs((size) >> 19) - 1) << 8)
+#define I830_FENCE_PITCH_SHIFT 4
+#define I830_FENCE_REG_VALID (1<<0)
+#define I915_FENCE_MAX_PITCH_VAL 4
+#define I830_FENCE_MAX_PITCH_VAL 6
+#define I830_FENCE_MAX_SIZE_VAL (1<<8)
+
+#define I915_FENCE_START_MASK 0x0ff00000
+#define I915_FENCE_SIZE_BITS(size) ((ffs((size) >> 20) - 1) << 8)
+
+#define FENCE_REG_965_0 0x03000
+#define I965_FENCE_PITCH_SHIFT 2
+#define I965_FENCE_TILING_Y_SHIFT 1
+#define I965_FENCE_REG_VALID (1<<0)
+#define I965_FENCE_MAX_PITCH_VAL 0x0400
+
+#define FENCE_REG_SANDYBRIDGE_0 0x100000
+#define SANDYBRIDGE_FENCE_PITCH_SHIFT 32
+
+/* control register for cpu gtt access */
+#define TILECTL 0x101000
+#define TILECTL_SWZCTL (1 << 0)
+#define TILECTL_TLB_PREFETCH_DIS (1 << 2)
+#define TILECTL_BACKSNOOP_DIS (1 << 3)
+
+/*
+ * Instruction and interrupt control regs
+ */
+#define PGTBL_ER 0x02024
+#define RENDER_RING_BASE 0x02000
+#define BSD_RING_BASE 0x04000
+#define GEN6_BSD_RING_BASE 0x12000
+#define BLT_RING_BASE 0x22000
+#define RING_TAIL(base) ((base)+0x30)
+#define RING_HEAD(base) ((base)+0x34)
+#define RING_START(base) ((base)+0x38)
+#define RING_CTL(base) ((base)+0x3c)
+#define RING_SYNC_0(base) ((base)+0x40)
+#define RING_SYNC_1(base) ((base)+0x44)
+#define GEN6_RVSYNC (RING_SYNC_0(RENDER_RING_BASE))
+#define GEN6_RBSYNC (RING_SYNC_1(RENDER_RING_BASE))
+#define GEN6_VRSYNC (RING_SYNC_1(GEN6_BSD_RING_BASE))
+#define GEN6_VBSYNC (RING_SYNC_0(GEN6_BSD_RING_BASE))
+#define GEN6_BRSYNC (RING_SYNC_0(BLT_RING_BASE))
+#define GEN6_BVSYNC (RING_SYNC_1(BLT_RING_BASE))
+#define RING_MAX_IDLE(base) ((base)+0x54)
+#define RING_HWS_PGA(base) ((base)+0x80)
+#define RING_HWS_PGA_GEN6(base) ((base)+0x2080)
+#define ARB_MODE 0x04030
+#define ARB_MODE_SWIZZLE_SNB (1<<4)
+#define ARB_MODE_SWIZZLE_IVB (1<<5)
+#define ARB_MODE_ENABLE(x) GFX_MODE_ENABLE(x)
+#define ARB_MODE_DISABLE(x) GFX_MODE_DISABLE(x)
+#define RENDER_HWS_PGA_GEN7 (0x04080)
+#define RING_FAULT_REG(ring) (0x4094 + 0x100*(ring)->id)
+#define DONE_REG 0x40b0
+#define BSD_HWS_PGA_GEN7 (0x04180)
+#define BLT_HWS_PGA_GEN7 (0x04280)
+#define RING_ACTHD(base) ((base)+0x74)
+#define RING_NOPID(base) ((base)+0x94)
+#define RING_IMR(base) ((base)+0xa8)
+#define TAIL_ADDR 0x001FFFF8
+#define HEAD_WRAP_COUNT 0xFFE00000
+#define HEAD_WRAP_ONE 0x00200000
+#define HEAD_ADDR 0x001FFFFC
+#define RING_NR_PAGES 0x001FF000
+#define RING_REPORT_MASK 0x00000006
+#define RING_REPORT_64K 0x00000002
+#define RING_REPORT_128K 0x00000004
+#define RING_NO_REPORT 0x00000000
+#define RING_VALID_MASK 0x00000001
+#define RING_VALID 0x00000001
+#define RING_INVALID 0x00000000
+#define RING_WAIT_I8XX (1<<0) /* gen2, PRBx_HEAD */
+#define RING_WAIT (1<<11) /* gen3+, PRBx_CTL */
+#define RING_WAIT_SEMAPHORE (1<<10) /* gen6+ */
+#if 0
+#define PRB0_TAIL 0x02030
+#define PRB0_HEAD 0x02034
+#define PRB0_START 0x02038
+#define PRB0_CTL 0x0203c
+#define PRB1_TAIL 0x02040 /* 915+ only */
+#define PRB1_HEAD 0x02044 /* 915+ only */
+#define PRB1_START 0x02048 /* 915+ only */
+#define PRB1_CTL 0x0204c /* 915+ only */
+#endif
+#define IPEIR_I965 0x02064
+#define IPEHR_I965 0x02068
+#define INSTDONE_I965 0x0206c
+#define RING_IPEIR(base) ((base)+0x64)
+#define RING_IPEHR(base) ((base)+0x68)
+#define RING_INSTDONE(base) ((base)+0x6c)
+#define RING_INSTPS(base) ((base)+0x70)
+#define RING_DMA_FADD(base) ((base)+0x78)
+#define RING_INSTPM(base) ((base)+0xc0)
+#define INSTPS 0x02070 /* 965+ only */
+#define INSTDONE1 0x0207c /* 965+ only */
+#define ACTHD_I965 0x02074
+#define HWS_PGA 0x02080
+#define HWS_ADDRESS_MASK 0xfffff000
+#define HWS_START_ADDRESS_SHIFT 4
+#define PWRCTXA 0x2088 /* 965GM+ only */
+#define PWRCTX_EN (1<<0)
+#define IPEIR 0x02088
+#define IPEHR 0x0208c
+#define INSTDONE 0x02090
+#define NOPID 0x02094
+#define HWSTAM 0x02098
+
+#define ERROR_GEN6 0x040a0
+
+/* GM45+ chicken bits -- debug workaround bits that may be required
+ * for various sorts of correct behavior. The top 16 bits of each are
+ * the enables for writing to the corresponding low bit.
+ */
+#define _3D_CHICKEN 0x02084
+#define _3D_CHICKEN2 0x0208c
+/* Disables pipelining of read flushes past the SF-WIZ interface.
+ * Required on all Ironlake steppings according to the B-Spec, but the
+ * particular danger of not doing so is not specified.
+ */
+# define _3D_CHICKEN2_WM_READ_PIPELINED (1 << 14)
+#define _3D_CHICKEN3 0x02090
+
+#define MI_MODE 0x0209c
+# define VS_TIMER_DISPATCH (1 << 6)
+# define MI_FLUSH_ENABLE (1 << 12)
+
+#define GFX_MODE 0x02520
+#define GFX_MODE_GEN7 0x0229c
+#define RING_MODE_GEN7(ring) ((ring)->mmio_base+0x29c)
+#define GFX_RUN_LIST_ENABLE (1<<15)
+#define GFX_TLB_INVALIDATE_ALWAYS (1<<13)
+#define GFX_SURFACE_FAULT_ENABLE (1<<12)
+#define GFX_REPLAY_MODE (1<<11)
+#define GFX_PSMI_GRANULARITY (1<<10)
+#define GFX_PPGTT_ENABLE (1<<9)
+
+#define GFX_MODE_ENABLE(bit) (((bit) << 16) | (bit))
+#define GFX_MODE_DISABLE(bit) (((bit) << 16) | (0))
+
+#define SCPD0 0x0209c /* 915+ only */
+#define IER 0x020a0
+#define IIR 0x020a4
+#define IMR 0x020a8
+#define ISR 0x020ac
+#define I915_PIPE_CONTROL_NOTIFY_INTERRUPT (1<<18)
+#define I915_DISPLAY_PORT_INTERRUPT (1<<17)
+#define I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT (1<<15)
+#define I915_GMCH_THERMAL_SENSOR_EVENT_INTERRUPT (1<<14) /* p-state */
+#define I915_HWB_OOM_INTERRUPT (1<<13)
+#define I915_SYNC_STATUS_INTERRUPT (1<<12)
+#define I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT (1<<11)
+#define I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT (1<<10)
+#define I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT (1<<9)
+#define I915_DISPLAY_PLANE_C_FLIP_PENDING_INTERRUPT (1<<8)
+#define I915_DISPLAY_PIPE_A_VBLANK_INTERRUPT (1<<7)
+#define I915_DISPLAY_PIPE_A_EVENT_INTERRUPT (1<<6)
+#define I915_DISPLAY_PIPE_B_VBLANK_INTERRUPT (1<<5)
+#define I915_DISPLAY_PIPE_B_EVENT_INTERRUPT (1<<4)
+#define I915_DEBUG_INTERRUPT (1<<2)
+#define I915_USER_INTERRUPT (1<<1)
+#define I915_ASLE_INTERRUPT (1<<0)
+#define I915_BSD_USER_INTERRUPT (1<<25)
+#define EIR 0x020b0
+#define EMR 0x020b4
+#define ESR 0x020b8
+#define GM45_ERROR_PAGE_TABLE (1<<5)
+#define GM45_ERROR_MEM_PRIV (1<<4)
+#define I915_ERROR_PAGE_TABLE (1<<4)
+#define GM45_ERROR_CP_PRIV (1<<3)
+#define I915_ERROR_MEMORY_REFRESH (1<<1)
+#define I915_ERROR_INSTRUCTION (1<<0)
+#define INSTPM 0x020c0
+#define INSTPM_SELF_EN (1<<12) /* 915GM only */
+#define INSTPM_AGPBUSY_DIS (1<<11) /* gen3: when disabled, pending interrupts
+ will not assert AGPBUSY# and will only
+ be delivered when out of C3. */
+#define INSTPM_FORCE_ORDERING (1<<7) /* GEN6+ */
+#define ACTHD 0x020c8
+#define FW_BLC 0x020d8
+#define FW_BLC2 0x020dc
+#define FW_BLC_SELF 0x020e0 /* 915+ only */
+#define FW_BLC_SELF_EN_MASK (1<<31)
+#define FW_BLC_SELF_FIFO_MASK (1<<16) /* 945 only */
+#define FW_BLC_SELF_EN (1<<15) /* 945 only */
+#define MM_BURST_LENGTH 0x00700000
+#define MM_FIFO_WATERMARK 0x0001F000
+#define LM_BURST_LENGTH 0x00000700
+#define LM_FIFO_WATERMARK 0x0000001F
+#define MI_ARB_STATE 0x020e4 /* 915+ only */
+#define MI_ARB_MASK_SHIFT 16 /* shift for enable bits */
+
+/* Make render/texture TLB fetches lower priorty than associated data
+ * fetches. This is not turned on by default
+ */
+#define MI_ARB_RENDER_TLB_LOW_PRIORITY (1 << 15)
+
+/* Isoch request wait on GTT enable (Display A/B/C streams).
+ * Make isoch requests stall on the TLB update. May cause
+ * display underruns (test mode only)
+ */
+#define MI_ARB_ISOCH_WAIT_GTT (1 << 14)
+
+/* Block grant count for isoch requests when block count is
+ * set to a finite value.
+ */
+#define MI_ARB_BLOCK_GRANT_MASK (3 << 12)
+#define MI_ARB_BLOCK_GRANT_8 (0 << 12) /* for 3 display planes */
+#define MI_ARB_BLOCK_GRANT_4 (1 << 12) /* for 2 display planes */
+#define MI_ARB_BLOCK_GRANT_2 (2 << 12) /* for 1 display plane */
+#define MI_ARB_BLOCK_GRANT_0 (3 << 12) /* don't use */
+
+/* Enable render writes to complete in C2/C3/C4 power states.
+ * If this isn't enabled, render writes are prevented in low
+ * power states. That seems bad to me.
+ */
+#define MI_ARB_C3_LP_WRITE_ENABLE (1 << 11)
+
+/* This acknowledges an async flip immediately instead
+ * of waiting for 2TLB fetches.
+ */
+#define MI_ARB_ASYNC_FLIP_ACK_IMMEDIATE (1 << 10)
+
+/* Enables non-sequential data reads through arbiter
+ */
+#define MI_ARB_DUAL_DATA_PHASE_DISABLE (1 << 9)
+
+/* Disable FSB snooping of cacheable write cycles from binner/render
+ * command stream
+ */
+#define MI_ARB_CACHE_SNOOP_DISABLE (1 << 8)
+
+/* Arbiter time slice for non-isoch streams */
+#define MI_ARB_TIME_SLICE_MASK (7 << 5)
+#define MI_ARB_TIME_SLICE_1 (0 << 5)
+#define MI_ARB_TIME_SLICE_2 (1 << 5)
+#define MI_ARB_TIME_SLICE_4 (2 << 5)
+#define MI_ARB_TIME_SLICE_6 (3 << 5)
+#define MI_ARB_TIME_SLICE_8 (4 << 5)
+#define MI_ARB_TIME_SLICE_10 (5 << 5)
+#define MI_ARB_TIME_SLICE_14 (6 << 5)
+#define MI_ARB_TIME_SLICE_16 (7 << 5)
+
+/* Low priority grace period page size */
+#define MI_ARB_LOW_PRIORITY_GRACE_4KB (0 << 4) /* default */
+#define MI_ARB_LOW_PRIORITY_GRACE_8KB (1 << 4)
+
+/* Disable display A/B trickle feed */
+#define MI_ARB_DISPLAY_TRICKLE_FEED_DISABLE (1 << 2)
+
+/* Set display plane priority */
+#define MI_ARB_DISPLAY_PRIORITY_A_B (0 << 0) /* display A > display B */
+#define MI_ARB_DISPLAY_PRIORITY_B_A (1 << 0) /* display B > display A */
+
+#define CACHE_MODE_0 0x02120 /* 915+ only */
+#define CM0_MASK_SHIFT 16
+#define CM0_IZ_OPT_DISABLE (1<<6)
+#define CM0_ZR_OPT_DISABLE (1<<5)
+#define CM0_STC_EVICT_DISABLE_LRA_SNB (1<<5)
+#define CM0_DEPTH_EVICT_DISABLE (1<<4)
+#define CM0_COLOR_EVICT_DISABLE (1<<3)
+#define CM0_DEPTH_WRITE_DISABLE (1<<1)
+#define CM0_RC_OP_FLUSH_DISABLE (1<<0)
+#define BB_ADDR 0x02140 /* 8 bytes */
+#define GFX_FLSH_CNTL 0x02170 /* 915+ only */
+#define ECOSKPD 0x021d0
+#define ECO_GATING_CX_ONLY (1<<3)
+#define ECO_FLIP_DONE (1<<0)
+
+/* GEN6 interrupt control */
+#define GEN6_RENDER_HWSTAM 0x2098
+#define GEN6_RENDER_IMR 0x20a8
+#define GEN6_RENDER_CONTEXT_SWITCH_INTERRUPT (1 << 8)
+#define GEN6_RENDER_PPGTT_PAGE_FAULT (1 << 7)
+#define GEN6_RENDER_TIMEOUT_COUNTER_EXPIRED (1 << 6)
+#define GEN6_RENDER_L3_PARITY_ERROR (1 << 5)
+#define GEN6_RENDER_PIPE_CONTROL_NOTIFY_INTERRUPT (1 << 4)
+#define GEN6_RENDER_COMMAND_PARSER_MASTER_ERROR (1 << 3)
+#define GEN6_RENDER_SYNC_STATUS (1 << 2)
+#define GEN6_RENDER_DEBUG_INTERRUPT (1 << 1)
+#define GEN6_RENDER_USER_INTERRUPT (1 << 0)
+
+#define GEN6_BLITTER_HWSTAM 0x22098
+#define GEN6_BLITTER_IMR 0x220a8
+#define GEN6_BLITTER_MI_FLUSH_DW_NOTIFY_INTERRUPT (1 << 26)
+#define GEN6_BLITTER_COMMAND_PARSER_MASTER_ERROR (1 << 25)
+#define GEN6_BLITTER_SYNC_STATUS (1 << 24)
+#define GEN6_BLITTER_USER_INTERRUPT (1 << 22)
+
+#define GEN6_BLITTER_ECOSKPD 0x221d0
+#define GEN6_BLITTER_LOCK_SHIFT 16
+#define GEN6_BLITTER_FBC_NOTIFY (1<<3)
+
+#define GEN6_BSD_SLEEP_PSMI_CONTROL 0x12050
+#define GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_MODIFY_MASK (1 << 16)
+#define GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_DISABLE (1 << 0)
+#define GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_ENABLE 0
+#define GEN6_BSD_SLEEP_PSMI_CONTROL_IDLE_INDICATOR (1 << 3)
+
+#define GEN6_BSD_HWSTAM 0x12098
+#define GEN6_BSD_IMR 0x120a8
+#define GEN6_BSD_USER_INTERRUPT (1 << 12)
+
+#define GEN6_BSD_RNCID 0x12198
+
+/*
+ * Framebuffer compression (915+ only)
+ */
+
+#define FBC_CFB_BASE 0x03200 /* 4k page aligned */
+#define FBC_LL_BASE 0x03204 /* 4k page aligned */
+#define FBC_CONTROL 0x03208
+#define FBC_CTL_EN (1<<31)
+#define FBC_CTL_PERIODIC (1<<30)
+#define FBC_CTL_INTERVAL_SHIFT (16)
+#define FBC_CTL_UNCOMPRESSIBLE (1<<14)
+#define FBC_CTL_C3_IDLE (1<<13)
+#define FBC_CTL_STRIDE_SHIFT (5)
+#define FBC_CTL_FENCENO (1<<0)
+#define FBC_COMMAND 0x0320c
+#define FBC_CMD_COMPRESS (1<<0)
+#define FBC_STATUS 0x03210
+#define FBC_STAT_COMPRESSING (1<<31)
+#define FBC_STAT_COMPRESSED (1<<30)
+#define FBC_STAT_MODIFIED (1<<29)
+#define FBC_STAT_CURRENT_LINE (1<<0)
+#define FBC_CONTROL2 0x03214
+#define FBC_CTL_FENCE_DBL (0<<4)
+#define FBC_CTL_IDLE_IMM (0<<2)
+#define FBC_CTL_IDLE_FULL (1<<2)
+#define FBC_CTL_IDLE_LINE (2<<2)
+#define FBC_CTL_IDLE_DEBUG (3<<2)
+#define FBC_CTL_CPU_FENCE (1<<1)
+#define FBC_CTL_PLANEA (0<<0)
+#define FBC_CTL_PLANEB (1<<0)
+#define FBC_FENCE_OFF 0x0321b
+#define FBC_TAG 0x03300
+
+#define FBC_LL_SIZE (1536)
+
+/* Framebuffer compression for GM45+ */
+#define DPFC_CB_BASE 0x3200
+#define DPFC_CONTROL 0x3208
+#define DPFC_CTL_EN (1<<31)
+#define DPFC_CTL_PLANEA (0<<30)
+#define DPFC_CTL_PLANEB (1<<30)
+#define DPFC_CTL_FENCE_EN (1<<29)
+#define DPFC_CTL_PERSISTENT_MODE (1<<25)
+#define DPFC_SR_EN (1<<10)
+#define DPFC_CTL_LIMIT_1X (0<<6)
+#define DPFC_CTL_LIMIT_2X (1<<6)
+#define DPFC_CTL_LIMIT_4X (2<<6)
+#define DPFC_RECOMP_CTL 0x320c
+#define DPFC_RECOMP_STALL_EN (1<<27)
+#define DPFC_RECOMP_STALL_WM_SHIFT (16)
+#define DPFC_RECOMP_STALL_WM_MASK (0x07ff0000)
+#define DPFC_RECOMP_TIMER_COUNT_SHIFT (0)
+#define DPFC_RECOMP_TIMER_COUNT_MASK (0x0000003f)
+#define DPFC_STATUS 0x3210
+#define DPFC_INVAL_SEG_SHIFT (16)
+#define DPFC_INVAL_SEG_MASK (0x07ff0000)
+#define DPFC_COMP_SEG_SHIFT (0)
+#define DPFC_COMP_SEG_MASK (0x000003ff)
+#define DPFC_STATUS2 0x3214
+#define DPFC_FENCE_YOFF 0x3218
+#define DPFC_CHICKEN 0x3224
+#define DPFC_HT_MODIFY (1<<31)
+
+/* Framebuffer compression for Ironlake */
+#define ILK_DPFC_CB_BASE 0x43200
+#define ILK_DPFC_CONTROL 0x43208
+/* The bit 28-8 is reserved */
+#define DPFC_RESERVED (0x1FFFFF00)
+#define ILK_DPFC_RECOMP_CTL 0x4320c
+#define ILK_DPFC_STATUS 0x43210
+#define ILK_DPFC_FENCE_YOFF 0x43218
+#define ILK_DPFC_CHICKEN 0x43224
+#define ILK_FBC_RT_BASE 0x2128
+#define ILK_FBC_RT_VALID (1<<0)
+
+#define ILK_DISPLAY_CHICKEN1 0x42000
+#define ILK_FBCQ_DIS (1<<22)
+#define ILK_PABSTRETCH_DIS (1<<21)
+
+
+/*
+ * Framebuffer compression for Sandybridge
+ *
+ * The following two registers are of type GTTMMADR
+ */
+#define SNB_DPFC_CTL_SA 0x100100
+#define SNB_CPU_FENCE_ENABLE (1<<29)
+#define DPFC_CPU_FENCE_OFFSET 0x100104
+
+
+/*
+ * GPIO regs
+ */
+#define GPIOA 0x5010
+#define GPIOB 0x5014
+#define GPIOC 0x5018
+#define GPIOD 0x501c
+#define GPIOE 0x5020
+#define GPIOF 0x5024
+#define GPIOG 0x5028
+#define GPIOH 0x502c
+# define GPIO_CLOCK_DIR_MASK (1 << 0)
+# define GPIO_CLOCK_DIR_IN (0 << 1)
+# define GPIO_CLOCK_DIR_OUT (1 << 1)
+# define GPIO_CLOCK_VAL_MASK (1 << 2)
+# define GPIO_CLOCK_VAL_OUT (1 << 3)
+# define GPIO_CLOCK_VAL_IN (1 << 4)
+# define GPIO_CLOCK_PULLUP_DISABLE (1 << 5)
+# define GPIO_DATA_DIR_MASK (1 << 8)
+# define GPIO_DATA_DIR_IN (0 << 9)
+# define GPIO_DATA_DIR_OUT (1 << 9)
+# define GPIO_DATA_VAL_MASK (1 << 10)
+# define GPIO_DATA_VAL_OUT (1 << 11)
+# define GPIO_DATA_VAL_IN (1 << 12)
+# define GPIO_DATA_PULLUP_DISABLE (1 << 13)
+
+#define GMBUS0 0x5100 /* clock/port select */
+#define GMBUS_RATE_100KHZ (0<<8)
+#define GMBUS_RATE_50KHZ (1<<8)
+#define GMBUS_RATE_400KHZ (2<<8) /* reserved on Pineview */
+#define GMBUS_RATE_1MHZ (3<<8) /* reserved on Pineview */
+#define GMBUS_HOLD_EXT (1<<7) /* 300ns hold time, rsvd on Pineview */
+#define GMBUS_PORT_DISABLED 0
+#define GMBUS_PORT_SSC 1
+#define GMBUS_PORT_VGADDC 2
+#define GMBUS_PORT_PANEL 3
+#define GMBUS_PORT_DPC 4 /* HDMIC */
+#define GMBUS_PORT_DPB 5 /* SDVO, HDMIB */
+ /* 6 reserved */
+#define GMBUS_PORT_DPD 7 /* HDMID */
+#define GMBUS_NUM_PORTS 8
+#define GMBUS1 0x5104 /* command/status */
+#define GMBUS_SW_CLR_INT (1<<31)
+#define GMBUS_SW_RDY (1<<30)
+#define GMBUS_ENT (1<<29) /* enable timeout */
+#define GMBUS_CYCLE_NONE (0<<25)
+#define GMBUS_CYCLE_WAIT (1<<25)
+#define GMBUS_CYCLE_INDEX (2<<25)
+#define GMBUS_CYCLE_STOP (4<<25)
+#define GMBUS_BYTE_COUNT_SHIFT 16
+#define GMBUS_SLAVE_INDEX_SHIFT 8
+#define GMBUS_SLAVE_ADDR_SHIFT 1
+#define GMBUS_SLAVE_READ (1<<0)
+#define GMBUS_SLAVE_WRITE (0<<0)
+#define GMBUS2 0x5108 /* status */
+#define GMBUS_INUSE (1<<15)
+#define GMBUS_HW_WAIT_PHASE (1<<14)
+#define GMBUS_STALL_TIMEOUT (1<<13)
+#define GMBUS_INT (1<<12)
+#define GMBUS_HW_RDY (1<<11)
+#define GMBUS_SATOER (1<<10)
+#define GMBUS_ACTIVE (1<<9)
+#define GMBUS3 0x510c /* data buffer bytes 3-0 */
+#define GMBUS4 0x5110 /* interrupt mask (Pineview+) */
+#define GMBUS_SLAVE_TIMEOUT_EN (1<<4)
+#define GMBUS_NAK_EN (1<<3)
+#define GMBUS_IDLE_EN (1<<2)
+#define GMBUS_HW_WAIT_EN (1<<1)
+#define GMBUS_HW_RDY_EN (1<<0)
+#define GMBUS5 0x5120 /* byte index */
+#define GMBUS_2BYTE_INDEX_EN (1<<31)
+
+/*
+ * Clock control & power management
+ */
+
+#define VGA0 0x6000
+#define VGA1 0x6004
+#define VGA_PD 0x6010
+#define VGA0_PD_P2_DIV_4 (1 << 7)
+#define VGA0_PD_P1_DIV_2 (1 << 5)
+#define VGA0_PD_P1_SHIFT 0
+#define VGA0_PD_P1_MASK (0x1f << 0)
+#define VGA1_PD_P2_DIV_4 (1 << 15)
+#define VGA1_PD_P1_DIV_2 (1 << 13)
+#define VGA1_PD_P1_SHIFT 8
+#define VGA1_PD_P1_MASK (0x1f << 8)
+#define _DPLL_A 0x06014
+#define _DPLL_B 0x06018
+#define DPLL(pipe) _PIPE(pipe, _DPLL_A, _DPLL_B)
+#define DPLL_VCO_ENABLE (1 << 31)
+#define DPLL_DVO_HIGH_SPEED (1 << 30)
+#define DPLL_SYNCLOCK_ENABLE (1 << 29)
+#define DPLL_VGA_MODE_DIS (1 << 28)
+#define DPLLB_MODE_DAC_SERIAL (1 << 26) /* i915 */
+#define DPLLB_MODE_LVDS (2 << 26) /* i915 */
+#define DPLL_MODE_MASK (3 << 26)
+#define DPLL_DAC_SERIAL_P2_CLOCK_DIV_10 (0 << 24) /* i915 */
+#define DPLL_DAC_SERIAL_P2_CLOCK_DIV_5 (1 << 24) /* i915 */
+#define DPLLB_LVDS_P2_CLOCK_DIV_14 (0 << 24) /* i915 */
+#define DPLLB_LVDS_P2_CLOCK_DIV_7 (1 << 24) /* i915 */
+#define DPLL_P2_CLOCK_DIV_MASK 0x03000000 /* i915 */
+#define DPLL_FPA01_P1_POST_DIV_MASK 0x00ff0000 /* i915 */
+#define DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW 0x00ff8000 /* Pineview */
+
+#define SRX_INDEX 0x3c4
+#define SRX_DATA 0x3c5
+#define SR01 1
+#define SR01_SCREEN_OFF (1<<5)
+
+#define PPCR 0x61204
+#define PPCR_ON (1<<0)
+
+#define DVOB 0x61140
+#define DVOB_ON (1<<31)
+#define DVOC 0x61160
+#define DVOC_ON (1<<31)
+#define LVDS 0x61180
+#define LVDS_ON (1<<31)
+
+/* Scratch pad debug 0 reg:
+ */
+#define DPLL_FPA01_P1_POST_DIV_MASK_I830 0x001f0000
+/*
+ * The i830 generation, in LVDS mode, defines P1 as the bit number set within
+ * this field (only one bit may be set).
+ */
+#define DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS 0x003f0000
+#define DPLL_FPA01_P1_POST_DIV_SHIFT 16
+#define DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW 15
+/* i830, required in DVO non-gang */
+#define PLL_P2_DIVIDE_BY_4 (1 << 23)
+#define PLL_P1_DIVIDE_BY_TWO (1 << 21) /* i830 */
+#define PLL_REF_INPUT_DREFCLK (0 << 13)
+#define PLL_REF_INPUT_TVCLKINA (1 << 13) /* i830 */
+#define PLL_REF_INPUT_TVCLKINBC (2 << 13) /* SDVO TVCLKIN */
+#define PLLB_REF_INPUT_SPREADSPECTRUMIN (3 << 13)
+#define PLL_REF_INPUT_MASK (3 << 13)
+#define PLL_LOAD_PULSE_PHASE_SHIFT 9
+/* Ironlake */
+# define PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT 9
+# define PLL_REF_SDVO_HDMI_MULTIPLIER_MASK (7 << 9)
+# define PLL_REF_SDVO_HDMI_MULTIPLIER(x) (((x)-1) << 9)
+# define DPLL_FPA1_P1_POST_DIV_SHIFT 0
+# define DPLL_FPA1_P1_POST_DIV_MASK 0xff
+
+/*
+ * Parallel to Serial Load Pulse phase selection.
+ * Selects the phase for the 10X DPLL clock for the PCIe
+ * digital display port. The range is 4 to 13; 10 or more
+ * is just a flip delay. The default is 6
+ */
+#define PLL_LOAD_PULSE_PHASE_MASK (0xf << PLL_LOAD_PULSE_PHASE_SHIFT)
+#define DISPLAY_RATE_SELECT_FPA1 (1 << 8)
+/*
+ * SDVO multiplier for 945G/GM. Not used on 965.
+ */
+#define SDVO_MULTIPLIER_MASK 0x000000ff
+#define SDVO_MULTIPLIER_SHIFT_HIRES 4
+#define SDVO_MULTIPLIER_SHIFT_VGA 0
+#define _DPLL_A_MD 0x0601c /* 965+ only */
+/*
+ * UDI pixel divider, controlling how many pixels are stuffed into a packet.
+ *
+ * Value is pixels minus 1. Must be set to 1 pixel for SDVO.
+ */
+#define DPLL_MD_UDI_DIVIDER_MASK 0x3f000000
+#define DPLL_MD_UDI_DIVIDER_SHIFT 24
+/* UDI pixel divider for VGA, same as DPLL_MD_UDI_DIVIDER_MASK. */
+#define DPLL_MD_VGA_UDI_DIVIDER_MASK 0x003f0000
+#define DPLL_MD_VGA_UDI_DIVIDER_SHIFT 16
+/*
+ * SDVO/UDI pixel multiplier.
+ *
+ * SDVO requires that the bus clock rate be between 1 and 2 Ghz, and the bus
+ * clock rate is 10 times the DPLL clock. At low resolution/refresh rate
+ * modes, the bus rate would be below the limits, so SDVO allows for stuffing
+ * dummy bytes in the datastream at an increased clock rate, with both sides of
+ * the link knowing how many bytes are fill.
+ *
+ * So, for a mode with a dotclock of 65Mhz, we would want to double the clock
+ * rate to 130Mhz to get a bus rate of 1.30Ghz. The DPLL clock rate would be
+ * set to 130Mhz, and the SDVO multiplier set to 2x in this register and
+ * through an SDVO command.
+ *
+ * This register field has values of multiplication factor minus 1, with
+ * a maximum multiplier of 5 for SDVO.
+ */
+#define DPLL_MD_UDI_MULTIPLIER_MASK 0x00003f00
+#define DPLL_MD_UDI_MULTIPLIER_SHIFT 8
+/*
+ * SDVO/UDI pixel multiplier for VGA, same as DPLL_MD_UDI_MULTIPLIER_MASK.
+ * This best be set to the default value (3) or the CRT won't work. No,
+ * I don't entirely understand what this does...
+ */
+#define DPLL_MD_VGA_UDI_MULTIPLIER_MASK 0x0000003f
+#define DPLL_MD_VGA_UDI_MULTIPLIER_SHIFT 0
+#define _DPLL_B_MD 0x06020 /* 965+ only */
+#define DPLL_MD(pipe) _PIPE(pipe, _DPLL_A_MD, _DPLL_B_MD)
+#define _FPA0 0x06040
+#define _FPA1 0x06044
+#define _FPB0 0x06048
+#define _FPB1 0x0604c
+#define FP0(pipe) _PIPE(pipe, _FPA0, _FPB0)
+#define FP1(pipe) _PIPE(pipe, _FPA1, _FPB1)
+#define FP_N_DIV_MASK 0x003f0000
+#define FP_N_PINEVIEW_DIV_MASK 0x00ff0000
+#define FP_N_DIV_SHIFT 16
+#define FP_M1_DIV_MASK 0x00003f00
+#define FP_M1_DIV_SHIFT 8
+#define FP_M2_DIV_MASK 0x0000003f
+#define FP_M2_PINEVIEW_DIV_MASK 0x000000ff
+#define FP_M2_DIV_SHIFT 0
+#define DPLL_TEST 0x606c
+#define DPLLB_TEST_SDVO_DIV_1 (0 << 22)
+#define DPLLB_TEST_SDVO_DIV_2 (1 << 22)
+#define DPLLB_TEST_SDVO_DIV_4 (2 << 22)
+#define DPLLB_TEST_SDVO_DIV_MASK (3 << 22)
+#define DPLLB_TEST_N_BYPASS (1 << 19)
+#define DPLLB_TEST_M_BYPASS (1 << 18)
+#define DPLLB_INPUT_BUFFER_ENABLE (1 << 16)
+#define DPLLA_TEST_N_BYPASS (1 << 3)
+#define DPLLA_TEST_M_BYPASS (1 << 2)
+#define DPLLA_INPUT_BUFFER_ENABLE (1 << 0)
+#define D_STATE 0x6104
+#define DSTATE_GFX_RESET_I830 (1<<6)
+#define DSTATE_PLL_D3_OFF (1<<3)
+#define DSTATE_GFX_CLOCK_GATING (1<<1)
+#define DSTATE_DOT_CLOCK_GATING (1<<0)
+#define DSPCLK_GATE_D 0x6200
+# define DPUNIT_B_CLOCK_GATE_DISABLE (1 << 30) /* 965 */
+# define VSUNIT_CLOCK_GATE_DISABLE (1 << 29) /* 965 */
+# define VRHUNIT_CLOCK_GATE_DISABLE (1 << 28) /* 965 */
+# define VRDUNIT_CLOCK_GATE_DISABLE (1 << 27) /* 965 */
+# define AUDUNIT_CLOCK_GATE_DISABLE (1 << 26) /* 965 */
+# define DPUNIT_A_CLOCK_GATE_DISABLE (1 << 25) /* 965 */
+# define DPCUNIT_CLOCK_GATE_DISABLE (1 << 24) /* 965 */
+# define TVRUNIT_CLOCK_GATE_DISABLE (1 << 23) /* 915-945 */
+# define TVCUNIT_CLOCK_GATE_DISABLE (1 << 22) /* 915-945 */
+# define TVFUNIT_CLOCK_GATE_DISABLE (1 << 21) /* 915-945 */
+# define TVEUNIT_CLOCK_GATE_DISABLE (1 << 20) /* 915-945 */
+# define DVSUNIT_CLOCK_GATE_DISABLE (1 << 19) /* 915-945 */
+# define DSSUNIT_CLOCK_GATE_DISABLE (1 << 18) /* 915-945 */
+# define DDBUNIT_CLOCK_GATE_DISABLE (1 << 17) /* 915-945 */
+# define DPRUNIT_CLOCK_GATE_DISABLE (1 << 16) /* 915-945 */
+# define DPFUNIT_CLOCK_GATE_DISABLE (1 << 15) /* 915-945 */
+# define DPBMUNIT_CLOCK_GATE_DISABLE (1 << 14) /* 915-945 */
+# define DPLSUNIT_CLOCK_GATE_DISABLE (1 << 13) /* 915-945 */
+# define DPLUNIT_CLOCK_GATE_DISABLE (1 << 12) /* 915-945 */
+# define DPOUNIT_CLOCK_GATE_DISABLE (1 << 11)
+# define DPBUNIT_CLOCK_GATE_DISABLE (1 << 10)
+# define DCUNIT_CLOCK_GATE_DISABLE (1 << 9)
+# define DPUNIT_CLOCK_GATE_DISABLE (1 << 8)
+# define VRUNIT_CLOCK_GATE_DISABLE (1 << 7) /* 915+: reserved */
+# define OVHUNIT_CLOCK_GATE_DISABLE (1 << 6) /* 830-865 */
+# define DPIOUNIT_CLOCK_GATE_DISABLE (1 << 6) /* 915-945 */
+# define OVFUNIT_CLOCK_GATE_DISABLE (1 << 5)
+# define OVBUNIT_CLOCK_GATE_DISABLE (1 << 4)
+/**
+ * This bit must be set on the 830 to prevent hangs when turning off the
+ * overlay scaler.
+ */
+# define OVRUNIT_CLOCK_GATE_DISABLE (1 << 3)
+# define OVCUNIT_CLOCK_GATE_DISABLE (1 << 2)
+# define OVUUNIT_CLOCK_GATE_DISABLE (1 << 1)
+# define ZVUNIT_CLOCK_GATE_DISABLE (1 << 0) /* 830 */
+# define OVLUNIT_CLOCK_GATE_DISABLE (1 << 0) /* 845,865 */
+
+#define RENCLK_GATE_D1 0x6204
+# define BLITTER_CLOCK_GATE_DISABLE (1 << 13) /* 945GM only */
+# define MPEG_CLOCK_GATE_DISABLE (1 << 12) /* 945GM only */
+# define PC_FE_CLOCK_GATE_DISABLE (1 << 11)
+# define PC_BE_CLOCK_GATE_DISABLE (1 << 10)
+# define WINDOWER_CLOCK_GATE_DISABLE (1 << 9)
+# define INTERPOLATOR_CLOCK_GATE_DISABLE (1 << 8)
+# define COLOR_CALCULATOR_CLOCK_GATE_DISABLE (1 << 7)
+# define MOTION_COMP_CLOCK_GATE_DISABLE (1 << 6)
+# define MAG_CLOCK_GATE_DISABLE (1 << 5)
+/** This bit must be unset on 855,865 */
+# define MECI_CLOCK_GATE_DISABLE (1 << 4)
+# define DCMP_CLOCK_GATE_DISABLE (1 << 3)
+# define MEC_CLOCK_GATE_DISABLE (1 << 2)
+# define MECO_CLOCK_GATE_DISABLE (1 << 1)
+/** This bit must be set on 855,865. */
+# define SV_CLOCK_GATE_DISABLE (1 << 0)
+# define I915_MPEG_CLOCK_GATE_DISABLE (1 << 16)
+# define I915_VLD_IP_PR_CLOCK_GATE_DISABLE (1 << 15)
+# define I915_MOTION_COMP_CLOCK_GATE_DISABLE (1 << 14)
+# define I915_BD_BF_CLOCK_GATE_DISABLE (1 << 13)
+# define I915_SF_SE_CLOCK_GATE_DISABLE (1 << 12)
+# define I915_WM_CLOCK_GATE_DISABLE (1 << 11)
+# define I915_IZ_CLOCK_GATE_DISABLE (1 << 10)
+# define I915_PI_CLOCK_GATE_DISABLE (1 << 9)
+# define I915_DI_CLOCK_GATE_DISABLE (1 << 8)
+# define I915_SH_SV_CLOCK_GATE_DISABLE (1 << 7)
+# define I915_PL_DG_QC_FT_CLOCK_GATE_DISABLE (1 << 6)
+# define I915_SC_CLOCK_GATE_DISABLE (1 << 5)
+# define I915_FL_CLOCK_GATE_DISABLE (1 << 4)
+# define I915_DM_CLOCK_GATE_DISABLE (1 << 3)
+# define I915_PS_CLOCK_GATE_DISABLE (1 << 2)
+# define I915_CC_CLOCK_GATE_DISABLE (1 << 1)
+# define I915_BY_CLOCK_GATE_DISABLE (1 << 0)
+
+# define I965_RCZ_CLOCK_GATE_DISABLE (1 << 30)
+/** This bit must always be set on 965G/965GM */
+# define I965_RCC_CLOCK_GATE_DISABLE (1 << 29)
+# define I965_RCPB_CLOCK_GATE_DISABLE (1 << 28)
+# define I965_DAP_CLOCK_GATE_DISABLE (1 << 27)
+# define I965_ROC_CLOCK_GATE_DISABLE (1 << 26)
+# define I965_GW_CLOCK_GATE_DISABLE (1 << 25)
+# define I965_TD_CLOCK_GATE_DISABLE (1 << 24)
+/** This bit must always be set on 965G */
+# define I965_ISC_CLOCK_GATE_DISABLE (1 << 23)
+# define I965_IC_CLOCK_GATE_DISABLE (1 << 22)
+# define I965_EU_CLOCK_GATE_DISABLE (1 << 21)
+# define I965_IF_CLOCK_GATE_DISABLE (1 << 20)
+# define I965_TC_CLOCK_GATE_DISABLE (1 << 19)
+# define I965_SO_CLOCK_GATE_DISABLE (1 << 17)
+# define I965_FBC_CLOCK_GATE_DISABLE (1 << 16)
+# define I965_MARI_CLOCK_GATE_DISABLE (1 << 15)
+# define I965_MASF_CLOCK_GATE_DISABLE (1 << 14)
+# define I965_MAWB_CLOCK_GATE_DISABLE (1 << 13)
+# define I965_EM_CLOCK_GATE_DISABLE (1 << 12)
+# define I965_UC_CLOCK_GATE_DISABLE (1 << 11)
+# define I965_SI_CLOCK_GATE_DISABLE (1 << 6)
+# define I965_MT_CLOCK_GATE_DISABLE (1 << 5)
+# define I965_PL_CLOCK_GATE_DISABLE (1 << 4)
+# define I965_DG_CLOCK_GATE_DISABLE (1 << 3)
+# define I965_QC_CLOCK_GATE_DISABLE (1 << 2)
+# define I965_FT_CLOCK_GATE_DISABLE (1 << 1)
+# define I965_DM_CLOCK_GATE_DISABLE (1 << 0)
+
+#define RENCLK_GATE_D2 0x6208
+#define VF_UNIT_CLOCK_GATE_DISABLE (1 << 9)
+#define GS_UNIT_CLOCK_GATE_DISABLE (1 << 7)
+#define CL_UNIT_CLOCK_GATE_DISABLE (1 << 6)
+#define RAMCLK_GATE_D 0x6210 /* CRL only */
+#define DEUC 0x6214 /* CRL only */
+
+/*
+ * Palette regs
+ */
+
+#define _PALETTE_A 0x0a000
+#define _PALETTE_B 0x0a800
+#define PALETTE(pipe) _PIPE(pipe, _PALETTE_A, _PALETTE_B)
+
+/* MCH MMIO space */
+
+/*
+ * MCHBAR mirror.
+ *
+ * This mirrors the MCHBAR MMIO space whose location is determined by
+ * device 0 function 0's pci config register 0x44 or 0x48 and matches it in
+ * every way. It is not accessible from the CP register read instructions.
+ *
+ */
+#define MCHBAR_MIRROR_BASE 0x10000
+
+#define MCHBAR_MIRROR_BASE_SNB 0x140000
+
+/** 915-945 and GM965 MCH register controlling DRAM channel access */
+#define DCC 0x10200
+#define DCC_ADDRESSING_MODE_SINGLE_CHANNEL (0 << 0)
+#define DCC_ADDRESSING_MODE_DUAL_CHANNEL_ASYMMETRIC (1 << 0)
+#define DCC_ADDRESSING_MODE_DUAL_CHANNEL_INTERLEAVED (2 << 0)
+#define DCC_ADDRESSING_MODE_MASK (3 << 0)
+#define DCC_CHANNEL_XOR_DISABLE (1 << 10)
+#define DCC_CHANNEL_XOR_BIT_17 (1 << 9)
+
+/** Pineview MCH register contains DDR3 setting */
+#define CSHRDDR3CTL 0x101a8
+#define CSHRDDR3CTL_DDR3 (1 << 2)
+
+/** 965 MCH register controlling DRAM channel configuration */
+#define C0DRB3 0x10206
+#define C1DRB3 0x10606
+
+/** snb MCH registers for reading the DRAM channel configuration */
+#define MAD_DIMM_C0 (MCHBAR_MIRROR_BASE_SNB + 0x5004)
+#define MAD_DIMM_C1 (MCHBAR_MIRROR_BASE_SNB + 0x5008)
+#define MAD_DIMM_C2 (MCHBAR_MIRROR_BASE_SNB + 0x500C)
+#define MAD_DIMM_ECC_MASK (0x3 << 24)
+#define MAD_DIMM_ECC_OFF (0x0 << 24)
+#define MAD_DIMM_ECC_IO_ON_LOGIC_OFF (0x1 << 24)
+#define MAD_DIMM_ECC_IO_OFF_LOGIC_ON (0x2 << 24)
+#define MAD_DIMM_ECC_ON (0x3 << 24)
+#define MAD_DIMM_ENH_INTERLEAVE (0x1 << 22)
+#define MAD_DIMM_RANK_INTERLEAVE (0x1 << 21)
+#define MAD_DIMM_B_WIDTH_X16 (0x1 << 20) /* X8 chips if unset */
+#define MAD_DIMM_A_WIDTH_X16 (0x1 << 19) /* X8 chips if unset */
+#define MAD_DIMM_B_DUAL_RANK (0x1 << 18)
+#define MAD_DIMM_A_DUAL_RANK (0x1 << 17)
+#define MAD_DIMM_A_SELECT (0x1 << 16)
+/* DIMM sizes are in multiples of 256mb. */
+#define MAD_DIMM_B_SIZE_SHIFT 8
+#define MAD_DIMM_B_SIZE_MASK (0xff << MAD_DIMM_B_SIZE_SHIFT)
+#define MAD_DIMM_A_SIZE_SHIFT 0
+#define MAD_DIMM_A_SIZE_MASK (0xff << MAD_DIMM_A_SIZE_SHIFT)
+
+
+/* Clocking configuration register */
+#define CLKCFG 0x10c00
+#define CLKCFG_FSB_400 (5 << 0) /* hrawclk 100 */
+#define CLKCFG_FSB_533 (1 << 0) /* hrawclk 133 */
+#define CLKCFG_FSB_667 (3 << 0) /* hrawclk 166 */
+#define CLKCFG_FSB_800 (2 << 0) /* hrawclk 200 */
+#define CLKCFG_FSB_1067 (6 << 0) /* hrawclk 266 */
+#define CLKCFG_FSB_1333 (7 << 0) /* hrawclk 333 */
+/* Note, below two are guess */
+#define CLKCFG_FSB_1600 (4 << 0) /* hrawclk 400 */
+#define CLKCFG_FSB_1600_ALT (0 << 0) /* hrawclk 400 */
+#define CLKCFG_FSB_MASK (7 << 0)
+#define CLKCFG_MEM_533 (1 << 4)
+#define CLKCFG_MEM_667 (2 << 4)
+#define CLKCFG_MEM_800 (3 << 4)
+#define CLKCFG_MEM_MASK (7 << 4)
+
+#define TSC1 0x11001
+#define TSE (1<<0)
+#define I915_TR1 0x11006
+#define TSFS 0x11020
+#define TSFS_SLOPE_MASK 0x0000ff00
+#define TSFS_SLOPE_SHIFT 8
+#define TSFS_INTR_MASK 0x000000ff
+
+#define CRSTANDVID 0x11100
+#define PXVFREQ_BASE 0x11110 /* P[0-15]VIDFREQ (0x1114c) (Ironlake) */
+#define PXVFREQ_PX_MASK 0x7f000000
+#define PXVFREQ_PX_SHIFT 24
+#define VIDFREQ_BASE 0x11110
+#define VIDFREQ1 0x11110 /* VIDFREQ1-4 (0x1111c) (Cantiga) */
+#define VIDFREQ2 0x11114
+#define VIDFREQ3 0x11118
+#define VIDFREQ4 0x1111c
+#define VIDFREQ_P0_MASK 0x1f000000
+#define VIDFREQ_P0_SHIFT 24
+#define VIDFREQ_P0_CSCLK_MASK 0x00f00000
+#define VIDFREQ_P0_CSCLK_SHIFT 20
+#define VIDFREQ_P0_CRCLK_MASK 0x000f0000
+#define VIDFREQ_P0_CRCLK_SHIFT 16
+#define VIDFREQ_P1_MASK 0x00001f00
+#define VIDFREQ_P1_SHIFT 8
+#define VIDFREQ_P1_CSCLK_MASK 0x000000f0
+#define VIDFREQ_P1_CSCLK_SHIFT 4
+#define VIDFREQ_P1_CRCLK_MASK 0x0000000f
+#define INTTOEXT_BASE_ILK 0x11300
+#define INTTOEXT_BASE 0x11120 /* INTTOEXT1-8 (0x1113c) */
+#define INTTOEXT_MAP3_SHIFT 24
+#define INTTOEXT_MAP3_MASK (0x1f << INTTOEXT_MAP3_SHIFT)
+#define INTTOEXT_MAP2_SHIFT 16
+#define INTTOEXT_MAP2_MASK (0x1f << INTTOEXT_MAP2_SHIFT)
+#define INTTOEXT_MAP1_SHIFT 8
+#define INTTOEXT_MAP1_MASK (0x1f << INTTOEXT_MAP1_SHIFT)
+#define INTTOEXT_MAP0_SHIFT 0
+#define INTTOEXT_MAP0_MASK (0x1f << INTTOEXT_MAP0_SHIFT)
+#define MEMSWCTL 0x11170 /* Ironlake only */
+#define MEMCTL_CMD_MASK 0xe000
+#define MEMCTL_CMD_SHIFT 13
+#define MEMCTL_CMD_RCLK_OFF 0
+#define MEMCTL_CMD_RCLK_ON 1
+#define MEMCTL_CMD_CHFREQ 2
+#define MEMCTL_CMD_CHVID 3
+#define MEMCTL_CMD_VMMOFF 4
+#define MEMCTL_CMD_VMMON 5
+#define MEMCTL_CMD_STS (1<<12) /* write 1 triggers command, clears
+ when command complete */
+#define MEMCTL_FREQ_MASK 0x0f00 /* jitter, from 0-15 */
+#define MEMCTL_FREQ_SHIFT 8
+#define MEMCTL_SFCAVM (1<<7)
+#define MEMCTL_TGT_VID_MASK 0x007f
+#define MEMIHYST 0x1117c
+#define MEMINTREN 0x11180 /* 16 bits */
+#define MEMINT_RSEXIT_EN (1<<8)
+#define MEMINT_CX_SUPR_EN (1<<7)
+#define MEMINT_CONT_BUSY_EN (1<<6)
+#define MEMINT_AVG_BUSY_EN (1<<5)
+#define MEMINT_EVAL_CHG_EN (1<<4)
+#define MEMINT_MON_IDLE_EN (1<<3)
+#define MEMINT_UP_EVAL_EN (1<<2)
+#define MEMINT_DOWN_EVAL_EN (1<<1)
+#define MEMINT_SW_CMD_EN (1<<0)
+#define MEMINTRSTR 0x11182 /* 16 bits */
+#define MEM_RSEXIT_MASK 0xc000
+#define MEM_RSEXIT_SHIFT 14
+#define MEM_CONT_BUSY_MASK 0x3000
+#define MEM_CONT_BUSY_SHIFT 12
+#define MEM_AVG_BUSY_MASK 0x0c00
+#define MEM_AVG_BUSY_SHIFT 10
+#define MEM_EVAL_CHG_MASK 0x0300
+#define MEM_EVAL_BUSY_SHIFT 8
+#define MEM_MON_IDLE_MASK 0x00c0
+#define MEM_MON_IDLE_SHIFT 6
+#define MEM_UP_EVAL_MASK 0x0030
+#define MEM_UP_EVAL_SHIFT 4
+#define MEM_DOWN_EVAL_MASK 0x000c
+#define MEM_DOWN_EVAL_SHIFT 2
+#define MEM_SW_CMD_MASK 0x0003
+#define MEM_INT_STEER_GFX 0
+#define MEM_INT_STEER_CMR 1
+#define MEM_INT_STEER_SMI 2
+#define MEM_INT_STEER_SCI 3
+#define MEMINTRSTS 0x11184
+#define MEMINT_RSEXIT (1<<7)
+#define MEMINT_CONT_BUSY (1<<6)
+#define MEMINT_AVG_BUSY (1<<5)
+#define MEMINT_EVAL_CHG (1<<4)
+#define MEMINT_MON_IDLE (1<<3)
+#define MEMINT_UP_EVAL (1<<2)
+#define MEMINT_DOWN_EVAL (1<<1)
+#define MEMINT_SW_CMD (1<<0)
+#define MEMMODECTL 0x11190
+#define MEMMODE_BOOST_EN (1<<31)
+#define MEMMODE_BOOST_FREQ_MASK 0x0f000000 /* jitter for boost, 0-15 */
+#define MEMMODE_BOOST_FREQ_SHIFT 24
+#define MEMMODE_IDLE_MODE_MASK 0x00030000
+#define MEMMODE_IDLE_MODE_SHIFT 16
+#define MEMMODE_IDLE_MODE_EVAL 0
+#define MEMMODE_IDLE_MODE_CONT 1
+#define MEMMODE_HWIDLE_EN (1<<15)
+#define MEMMODE_SWMODE_EN (1<<14)
+#define MEMMODE_RCLK_GATE (1<<13)
+#define MEMMODE_HW_UPDATE (1<<12)
+#define MEMMODE_FSTART_MASK 0x00000f00 /* starting jitter, 0-15 */
+#define MEMMODE_FSTART_SHIFT 8
+#define MEMMODE_FMAX_MASK 0x000000f0 /* max jitter, 0-15 */
+#define MEMMODE_FMAX_SHIFT 4
+#define MEMMODE_FMIN_MASK 0x0000000f /* min jitter, 0-15 */
+#define RCBMAXAVG 0x1119c
+#define MEMSWCTL2 0x1119e /* Cantiga only */
+#define SWMEMCMD_RENDER_OFF (0 << 13)
+#define SWMEMCMD_RENDER_ON (1 << 13)
+#define SWMEMCMD_SWFREQ (2 << 13)
+#define SWMEMCMD_TARVID (3 << 13)
+#define SWMEMCMD_VRM_OFF (4 << 13)
+#define SWMEMCMD_VRM_ON (5 << 13)
+#define CMDSTS (1<<12)
+#define SFCAVM (1<<11)
+#define SWFREQ_MASK 0x0380 /* P0-7 */
+#define SWFREQ_SHIFT 7
+#define TARVID_MASK 0x001f
+#define MEMSTAT_CTG 0x111a0
+#define RCBMINAVG 0x111a0
+#define RCUPEI 0x111b0
+#define RCDNEI 0x111b4
+#define RSTDBYCTL 0x111b8
+#define RS1EN (1<<31)
+#define RS2EN (1<<30)
+#define RS3EN (1<<29)
+#define D3RS3EN (1<<28) /* Display D3 imlies RS3 */
+#define SWPROMORSX (1<<27) /* RSx promotion timers ignored */
+#define RCWAKERW (1<<26) /* Resetwarn from PCH causes wakeup */
+#define DPRSLPVREN (1<<25) /* Fast voltage ramp enable */
+#define GFXTGHYST (1<<24) /* Hysteresis to allow trunk gating */
+#define RCX_SW_EXIT (1<<23) /* Leave RSx and prevent re-entry */
+#define RSX_STATUS_MASK (7<<20)
+#define RSX_STATUS_ON (0<<20)
+#define RSX_STATUS_RC1 (1<<20)
+#define RSX_STATUS_RC1E (2<<20)
+#define RSX_STATUS_RS1 (3<<20)
+#define RSX_STATUS_RS2 (4<<20) /* aka rc6 */
+#define RSX_STATUS_RSVD (5<<20) /* deep rc6 unsupported on ilk */
+#define RSX_STATUS_RS3 (6<<20) /* rs3 unsupported on ilk */
+#define RSX_STATUS_RSVD2 (7<<20)
+#define UWRCRSXE (1<<19) /* wake counter limit prevents rsx */
+#define RSCRP (1<<18) /* rs requests control on rs1/2 reqs */
+#define JRSC (1<<17) /* rsx coupled to cpu c-state */
+#define RS2INC0 (1<<16) /* allow rs2 in cpu c0 */
+#define RS1CONTSAV_MASK (3<<14)
+#define RS1CONTSAV_NO_RS1 (0<<14) /* rs1 doesn't save/restore context */
+#define RS1CONTSAV_RSVD (1<<14)
+#define RS1CONTSAV_SAVE_RS1 (2<<14) /* rs1 saves context */
+#define RS1CONTSAV_FULL_RS1 (3<<14) /* rs1 saves and restores context */
+#define NORMSLEXLAT_MASK (3<<12)
+#define SLOW_RS123 (0<<12)
+#define SLOW_RS23 (1<<12)
+#define SLOW_RS3 (2<<12)
+#define NORMAL_RS123 (3<<12)
+#define RCMODE_TIMEOUT (1<<11) /* 0 is eval interval method */
+#define IMPROMOEN (1<<10) /* promo is immediate or delayed until next idle interval (only for timeout method above) */
+#define RCENTSYNC (1<<9) /* rs coupled to cpu c-state (3/6/7) */
+#define STATELOCK (1<<7) /* locked to rs_cstate if 0 */
+#define RS_CSTATE_MASK (3<<4)
+#define RS_CSTATE_C367_RS1 (0<<4)
+#define RS_CSTATE_C36_RS1_C7_RS2 (1<<4)
+#define RS_CSTATE_RSVD (2<<4)
+#define RS_CSTATE_C367_RS2 (3<<4)
+#define REDSAVES (1<<3) /* no context save if was idle during rs0 */
+#define REDRESTORES (1<<2) /* no restore if was idle during rs0 */
+#define VIDCTL 0x111c0
+#define VIDSTS 0x111c8
+#define VIDSTART 0x111cc /* 8 bits */
+#define MEMSTAT_ILK 0x111f8
+#define MEMSTAT_VID_MASK 0x7f00
+#define MEMSTAT_VID_SHIFT 8
+#define MEMSTAT_PSTATE_MASK 0x00f8
+#define MEMSTAT_PSTATE_SHIFT 3
+#define MEMSTAT_MON_ACTV (1<<2)
+#define MEMSTAT_SRC_CTL_MASK 0x0003
+#define MEMSTAT_SRC_CTL_CORE 0
+#define MEMSTAT_SRC_CTL_TRB 1
+#define MEMSTAT_SRC_CTL_THM 2
+#define MEMSTAT_SRC_CTL_STDBY 3
+#define RCPREVBSYTUPAVG 0x113b8
+#define RCPREVBSYTDNAVG 0x113bc
+#define PMMISC 0x11214
+#define MCPPCE_EN (1<<0) /* enable PM_MSG from PCH->MPC */
+#define SDEW 0x1124c
+#define CSIEW0 0x11250
+#define CSIEW1 0x11254
+#define CSIEW2 0x11258
+#define PEW 0x1125c
+#define DEW 0x11270
+#define MCHAFE 0x112c0
+#define CSIEC 0x112e0
+#define DMIEC 0x112e4
+#define DDREC 0x112e8
+#define PEG0EC 0x112ec
+#define PEG1EC 0x112f0
+#define GFXEC 0x112f4
+#define RPPREVBSYTUPAVG 0x113b8
+#define RPPREVBSYTDNAVG 0x113bc
+#define ECR 0x11600
+#define ECR_GPFE (1<<31)
+#define ECR_IMONE (1<<30)
+#define ECR_CAP_MASK 0x0000001f /* Event range, 0-31 */
+#define OGW0 0x11608
+#define OGW1 0x1160c
+#define EG0 0x11610
+#define EG1 0x11614
+#define EG2 0x11618
+#define EG3 0x1161c
+#define EG4 0x11620
+#define EG5 0x11624
+#define EG6 0x11628
+#define EG7 0x1162c
+#define PXW 0x11664
+#define PXWL 0x11680
+#define LCFUSE02 0x116c0
+#define LCFUSE_HIV_MASK 0x000000ff
+#define CSIPLL0 0x12c10
+#define DDRMPLL1 0X12c20
+#define PEG_BAND_GAP_DATA 0x14d68
+
+#define GEN6_GT_PERF_STATUS 0x145948
+#define GEN6_RP_STATE_LIMITS 0x145994
+#define GEN6_RP_STATE_CAP 0x145998
+
+/*
+ * Logical Context regs
+ */
+#define CCID 0x2180
+#define CCID_EN (1<<0)
+/*
+ * Overlay regs
+ */
+
+#define OVADD 0x30000
+#define DOVSTA 0x30008
+#define OC_BUF (0x3<<20)
+#define OGAMC5 0x30010
+#define OGAMC4 0x30014
+#define OGAMC3 0x30018
+#define OGAMC2 0x3001c
+#define OGAMC1 0x30020
+#define OGAMC0 0x30024
+
+/*
+ * Display engine regs
+ */
+
+/* Pipe A timing regs */
+#define _HTOTAL_A 0x60000
+#define _HBLANK_A 0x60004
+#define _HSYNC_A 0x60008
+#define _VTOTAL_A 0x6000c
+#define _VBLANK_A 0x60010
+#define _VSYNC_A 0x60014
+#define _PIPEASRC 0x6001c
+#define _BCLRPAT_A 0x60020
+#define _VSYNCSHIFT_A 0x60028
+
+/* Pipe B timing regs */
+#define _HTOTAL_B 0x61000
+#define _HBLANK_B 0x61004
+#define _HSYNC_B 0x61008
+#define _VTOTAL_B 0x6100c
+#define _VBLANK_B 0x61010
+#define _VSYNC_B 0x61014
+#define _PIPEBSRC 0x6101c
+#define _BCLRPAT_B 0x61020
+#define _VSYNCSHIFT_B 0x61028
+
+
+#define HTOTAL(pipe) _PIPE(pipe, _HTOTAL_A, _HTOTAL_B)
+#define HBLANK(pipe) _PIPE(pipe, _HBLANK_A, _HBLANK_B)
+#define HSYNC(pipe) _PIPE(pipe, _HSYNC_A, _HSYNC_B)
+#define VTOTAL(pipe) _PIPE(pipe, _VTOTAL_A, _VTOTAL_B)
+#define VBLANK(pipe) _PIPE(pipe, _VBLANK_A, _VBLANK_B)
+#define VSYNC(pipe) _PIPE(pipe, _VSYNC_A, _VSYNC_B)
+#define BCLRPAT(pipe) _PIPE(pipe, _BCLRPAT_A, _BCLRPAT_B)
+#define VSYNCSHIFT(pipe) _PIPE(pipe, _VSYNCSHIFT_A, _VSYNCSHIFT_B)
+
+/* VGA port control */
+#define ADPA 0x61100
+#define ADPA_DAC_ENABLE (1<<31)
+#define ADPA_DAC_DISABLE 0
+#define ADPA_PIPE_SELECT_MASK (1<<30)
+#define ADPA_PIPE_A_SELECT 0
+#define ADPA_PIPE_B_SELECT (1<<30)
+#define ADPA_PIPE_SELECT(pipe) ((pipe) << 30)
+#define ADPA_USE_VGA_HVPOLARITY (1<<15)
+#define ADPA_SETS_HVPOLARITY 0
+#define ADPA_VSYNC_CNTL_DISABLE (1<<11)
+#define ADPA_VSYNC_CNTL_ENABLE 0
+#define ADPA_HSYNC_CNTL_DISABLE (1<<10)
+#define ADPA_HSYNC_CNTL_ENABLE 0
+#define ADPA_VSYNC_ACTIVE_HIGH (1<<4)
+#define ADPA_VSYNC_ACTIVE_LOW 0
+#define ADPA_HSYNC_ACTIVE_HIGH (1<<3)
+#define ADPA_HSYNC_ACTIVE_LOW 0
+#define ADPA_DPMS_MASK (~(3<<10))
+#define ADPA_DPMS_ON (0<<10)
+#define ADPA_DPMS_SUSPEND (1<<10)
+#define ADPA_DPMS_STANDBY (2<<10)
+#define ADPA_DPMS_OFF (3<<10)
+
+
+/* Hotplug control (945+ only) */
+#define PORT_HOTPLUG_EN 0x61110
+#define HDMIB_HOTPLUG_INT_EN (1 << 29)
+#define DPB_HOTPLUG_INT_EN (1 << 29)
+#define HDMIC_HOTPLUG_INT_EN (1 << 28)
+#define DPC_HOTPLUG_INT_EN (1 << 28)
+#define HDMID_HOTPLUG_INT_EN (1 << 27)
+#define DPD_HOTPLUG_INT_EN (1 << 27)
+#define SDVOB_HOTPLUG_INT_EN (1 << 26)
+#define SDVOC_HOTPLUG_INT_EN (1 << 25)
+#define TV_HOTPLUG_INT_EN (1 << 18)
+#define CRT_HOTPLUG_INT_EN (1 << 9)
+#define CRT_HOTPLUG_FORCE_DETECT (1 << 3)
+#define CRT_HOTPLUG_ACTIVATION_PERIOD_32 (0 << 8)
+/* must use period 64 on GM45 according to docs */
+#define CRT_HOTPLUG_ACTIVATION_PERIOD_64 (1 << 8)
+#define CRT_HOTPLUG_DAC_ON_TIME_2M (0 << 7)
+#define CRT_HOTPLUG_DAC_ON_TIME_4M (1 << 7)
+#define CRT_HOTPLUG_VOLTAGE_COMPARE_40 (0 << 5)
+#define CRT_HOTPLUG_VOLTAGE_COMPARE_50 (1 << 5)
+#define CRT_HOTPLUG_VOLTAGE_COMPARE_60 (2 << 5)
+#define CRT_HOTPLUG_VOLTAGE_COMPARE_70 (3 << 5)
+#define CRT_HOTPLUG_VOLTAGE_COMPARE_MASK (3 << 5)
+#define CRT_HOTPLUG_DETECT_DELAY_1G (0 << 4)
+#define CRT_HOTPLUG_DETECT_DELAY_2G (1 << 4)
+#define CRT_HOTPLUG_DETECT_VOLTAGE_325MV (0 << 2)
+#define CRT_HOTPLUG_DETECT_VOLTAGE_475MV (1 << 2)
+
+#define PORT_HOTPLUG_STAT 0x61114
+#define HDMIB_HOTPLUG_INT_STATUS (1 << 29)
+#define DPB_HOTPLUG_INT_STATUS (1 << 29)
+#define HDMIC_HOTPLUG_INT_STATUS (1 << 28)
+#define DPC_HOTPLUG_INT_STATUS (1 << 28)
+#define HDMID_HOTPLUG_INT_STATUS (1 << 27)
+#define DPD_HOTPLUG_INT_STATUS (1 << 27)
+#define CRT_HOTPLUG_INT_STATUS (1 << 11)
+#define TV_HOTPLUG_INT_STATUS (1 << 10)
+#define CRT_HOTPLUG_MONITOR_MASK (3 << 8)
+#define CRT_HOTPLUG_MONITOR_COLOR (3 << 8)
+#define CRT_HOTPLUG_MONITOR_MONO (2 << 8)
+#define CRT_HOTPLUG_MONITOR_NONE (0 << 8)
+#define SDVOC_HOTPLUG_INT_STATUS (1 << 7)
+#define SDVOB_HOTPLUG_INT_STATUS (1 << 6)
+
+/* SDVO port control */
+#define SDVOB 0x61140
+#define SDVOC 0x61160
+#define SDVO_ENABLE (1 << 31)
+#define SDVO_PIPE_B_SELECT (1 << 30)
+#define SDVO_STALL_SELECT (1 << 29)
+#define SDVO_INTERRUPT_ENABLE (1 << 26)
+/**
+ * 915G/GM SDVO pixel multiplier.
+ *
+ * Programmed value is multiplier - 1, up to 5x.
+ *
+ * \sa DPLL_MD_UDI_MULTIPLIER_MASK
+ */
+#define SDVO_PORT_MULTIPLY_MASK (7 << 23)
+#define SDVO_PORT_MULTIPLY_SHIFT 23
+#define SDVO_PHASE_SELECT_MASK (15 << 19)
+#define SDVO_PHASE_SELECT_DEFAULT (6 << 19)
+#define SDVO_CLOCK_OUTPUT_INVERT (1 << 18)
+#define SDVOC_GANG_MODE (1 << 16)
+#define SDVO_ENCODING_SDVO (0x0 << 10)
+#define SDVO_ENCODING_HDMI (0x2 << 10)
+/** Requird for HDMI operation */
+#define SDVO_NULL_PACKETS_DURING_VSYNC (1 << 9)
+#define SDVO_COLOR_RANGE_16_235 (1 << 8)
+#define SDVO_BORDER_ENABLE (1 << 7)
+#define SDVO_AUDIO_ENABLE (1 << 6)
+/** New with 965, default is to be set */
+#define SDVO_VSYNC_ACTIVE_HIGH (1 << 4)
+/** New with 965, default is to be set */
+#define SDVO_HSYNC_ACTIVE_HIGH (1 << 3)
+#define SDVOB_PCIE_CONCURRENCY (1 << 3)
+#define SDVO_DETECTED (1 << 2)
+/* Bits to be preserved when writing */
+#define SDVOB_PRESERVE_MASK ((1 << 17) | (1 << 16) | (1 << 14) | (1 << 26))
+#define SDVOC_PRESERVE_MASK ((1 << 17) | (1 << 26))
+
+/* DVO port control */
+#define DVOA 0x61120
+#define DVOB 0x61140
+#define DVOC 0x61160
+#define DVO_ENABLE (1 << 31)
+#define DVO_PIPE_B_SELECT (1 << 30)
+#define DVO_PIPE_STALL_UNUSED (0 << 28)
+#define DVO_PIPE_STALL (1 << 28)
+#define DVO_PIPE_STALL_TV (2 << 28)
+#define DVO_PIPE_STALL_MASK (3 << 28)
+#define DVO_USE_VGA_SYNC (1 << 15)
+#define DVO_DATA_ORDER_I740 (0 << 14)
+#define DVO_DATA_ORDER_FP (1 << 14)
+#define DVO_VSYNC_DISABLE (1 << 11)
+#define DVO_HSYNC_DISABLE (1 << 10)
+#define DVO_VSYNC_TRISTATE (1 << 9)
+#define DVO_HSYNC_TRISTATE (1 << 8)
+#define DVO_BORDER_ENABLE (1 << 7)
+#define DVO_DATA_ORDER_GBRG (1 << 6)
+#define DVO_DATA_ORDER_RGGB (0 << 6)
+#define DVO_DATA_ORDER_GBRG_ERRATA (0 << 6)
+#define DVO_DATA_ORDER_RGGB_ERRATA (1 << 6)
+#define DVO_VSYNC_ACTIVE_HIGH (1 << 4)
+#define DVO_HSYNC_ACTIVE_HIGH (1 << 3)
+#define DVO_BLANK_ACTIVE_HIGH (1 << 2)
+#define DVO_OUTPUT_CSTATE_PIXELS (1 << 1) /* SDG only */
+#define DVO_OUTPUT_SOURCE_SIZE_PIXELS (1 << 0) /* SDG only */
+#define DVO_PRESERVE_MASK (0x7<<24)
+#define DVOA_SRCDIM 0x61124
+#define DVOB_SRCDIM 0x61144
+#define DVOC_SRCDIM 0x61164
+#define DVO_SRCDIM_HORIZONTAL_SHIFT 12
+#define DVO_SRCDIM_VERTICAL_SHIFT 0
+
+/* LVDS port control */
+#define LVDS 0x61180
+/*
+ * Enables the LVDS port. This bit must be set before DPLLs are enabled, as
+ * the DPLL semantics change when the LVDS is assigned to that pipe.
+ */
+#define LVDS_PORT_EN (1 << 31)
+/* Selects pipe B for LVDS data. Must be set on pre-965. */
+#define LVDS_PIPEB_SELECT (1 << 30)
+#define LVDS_PIPE_MASK (1 << 30)
+#define LVDS_PIPE(pipe) ((pipe) << 30)
+/* LVDS dithering flag on 965/g4x platform */
+#define LVDS_ENABLE_DITHER (1 << 25)
+/* LVDS sync polarity flags. Set to invert (i.e. negative) */
+#define LVDS_VSYNC_POLARITY (1 << 21)
+#define LVDS_HSYNC_POLARITY (1 << 20)
+
+/* Enable border for unscaled (or aspect-scaled) display */
+#define LVDS_BORDER_ENABLE (1 << 15)
+/*
+ * Enables the A0-A2 data pairs and CLKA, containing 18 bits of color data per
+ * pixel.
+ */
+#define LVDS_A0A2_CLKA_POWER_MASK (3 << 8)
+#define LVDS_A0A2_CLKA_POWER_DOWN (0 << 8)
+#define LVDS_A0A2_CLKA_POWER_UP (3 << 8)
+/*
+ * Controls the A3 data pair, which contains the additional LSBs for 24 bit
+ * mode. Only enabled if LVDS_A0A2_CLKA_POWER_UP also indicates it should be
+ * on.
+ */
+#define LVDS_A3_POWER_MASK (3 << 6)
+#define LVDS_A3_POWER_DOWN (0 << 6)
+#define LVDS_A3_POWER_UP (3 << 6)
+/*
+ * Controls the CLKB pair. This should only be set when LVDS_B0B3_POWER_UP
+ * is set.
+ */
+#define LVDS_CLKB_POWER_MASK (3 << 4)
+#define LVDS_CLKB_POWER_DOWN (0 << 4)
+#define LVDS_CLKB_POWER_UP (3 << 4)
+/*
+ * Controls the B0-B3 data pairs. This must be set to match the DPLL p2
+ * setting for whether we are in dual-channel mode. The B3 pair will
+ * additionally only be powered up when LVDS_A3_POWER_UP is set.
+ */
+#define LVDS_B0B3_POWER_MASK (3 << 2)
+#define LVDS_B0B3_POWER_DOWN (0 << 2)
+#define LVDS_B0B3_POWER_UP (3 << 2)
+
+/* Video Data Island Packet control */
+#define VIDEO_DIP_DATA 0x61178
+#define VIDEO_DIP_CTL 0x61170
+#define VIDEO_DIP_ENABLE (1 << 31)
+#define VIDEO_DIP_PORT_B (1 << 29)
+#define VIDEO_DIP_PORT_C (2 << 29)
+#define VIDEO_DIP_ENABLE_AVI (1 << 21)
+#define VIDEO_DIP_ENABLE_VENDOR (2 << 21)
+#define VIDEO_DIP_ENABLE_SPD (8 << 21)
+#define VIDEO_DIP_SELECT_MASK (3 << 19)
+#define VIDEO_DIP_SELECT_AVI (0 << 19)
+#define VIDEO_DIP_SELECT_VENDOR (1 << 19)
+#define VIDEO_DIP_SELECT_SPD (3 << 19)
+#define VIDEO_DIP_FREQ_ONCE (0 << 16)
+#define VIDEO_DIP_FREQ_VSYNC (1 << 16)
+#define VIDEO_DIP_FREQ_2VSYNC (2 << 16)
+
+/* Panel power sequencing */
+#define PP_STATUS 0x61200
+#define PP_ON (1 << 31)
+/*
+ * Indicates that all dependencies of the panel are on:
+ *
+ * - PLL enabled
+ * - pipe enabled
+ * - LVDS/DVOB/DVOC on
+ */
+#define PP_READY (1 << 30)
+#define PP_SEQUENCE_NONE (0 << 28)
+#define PP_SEQUENCE_POWER_UP (1 << 28)
+#define PP_SEQUENCE_POWER_DOWN (2 << 28)
+#define PP_SEQUENCE_MASK (3 << 28)
+#define PP_SEQUENCE_SHIFT 28
+#define PP_CYCLE_DELAY_ACTIVE (1 << 27)
+#define PP_SEQUENCE_STATE_MASK 0x0000000f
+#define PP_SEQUENCE_STATE_OFF_IDLE (0x0 << 0)
+#define PP_SEQUENCE_STATE_OFF_S0_1 (0x1 << 0)
+#define PP_SEQUENCE_STATE_OFF_S0_2 (0x2 << 0)
+#define PP_SEQUENCE_STATE_OFF_S0_3 (0x3 << 0)
+#define PP_SEQUENCE_STATE_ON_IDLE (0x8 << 0)
+#define PP_SEQUENCE_STATE_ON_S1_0 (0x9 << 0)
+#define PP_SEQUENCE_STATE_ON_S1_2 (0xa << 0)
+#define PP_SEQUENCE_STATE_ON_S1_3 (0xb << 0)
+#define PP_SEQUENCE_STATE_RESET (0xf << 0)
+#define PP_CONTROL 0x61204
+#define POWER_TARGET_ON (1 << 0)
+#define PP_ON_DELAYS 0x61208
+#define PP_OFF_DELAYS 0x6120c
+#define PP_DIVISOR 0x61210
+
+/* Panel fitting */
+#define PFIT_CONTROL 0x61230
+#define PFIT_ENABLE (1 << 31)
+#define PFIT_PIPE_MASK (3 << 29)
+#define PFIT_PIPE_SHIFT 29
+#define VERT_INTERP_DISABLE (0 << 10)
+#define VERT_INTERP_BILINEAR (1 << 10)
+#define VERT_INTERP_MASK (3 << 10)
+#define VERT_AUTO_SCALE (1 << 9)
+#define HORIZ_INTERP_DISABLE (0 << 6)
+#define HORIZ_INTERP_BILINEAR (1 << 6)
+#define HORIZ_INTERP_MASK (3 << 6)
+#define HORIZ_AUTO_SCALE (1 << 5)
+#define PANEL_8TO6_DITHER_ENABLE (1 << 3)
+#define PFIT_FILTER_FUZZY (0 << 24)
+#define PFIT_SCALING_AUTO (0 << 26)
+#define PFIT_SCALING_PROGRAMMED (1 << 26)
+#define PFIT_SCALING_PILLAR (2 << 26)
+#define PFIT_SCALING_LETTER (3 << 26)
+#define PFIT_PGM_RATIOS 0x61234
+#define PFIT_VERT_SCALE_MASK 0xfff00000
+#define PFIT_HORIZ_SCALE_MASK 0x0000fff0
+/* Pre-965 */
+#define PFIT_VERT_SCALE_SHIFT 20
+#define PFIT_VERT_SCALE_MASK 0xfff00000
+#define PFIT_HORIZ_SCALE_SHIFT 4
+#define PFIT_HORIZ_SCALE_MASK 0x0000fff0
+/* 965+ */
+#define PFIT_VERT_SCALE_SHIFT_965 16
+#define PFIT_VERT_SCALE_MASK_965 0x1fff0000
+#define PFIT_HORIZ_SCALE_SHIFT_965 0
+#define PFIT_HORIZ_SCALE_MASK_965 0x00001fff
+
+#define PFIT_AUTO_RATIOS 0x61238
+
+/* Backlight control */
+#define BLC_PWM_CTL 0x61254
+#define BACKLIGHT_MODULATION_FREQ_SHIFT (17)
+#define BLC_PWM_CTL2 0x61250 /* 965+ only */
+#define BLM_COMBINATION_MODE (1 << 30)
+/*
+ * This is the most significant 15 bits of the number of backlight cycles in a
+ * complete cycle of the modulated backlight control.
+ *
+ * The actual value is this field multiplied by two.
+ */
+#define BACKLIGHT_MODULATION_FREQ_MASK (0x7fff << 17)
+#define BLM_LEGACY_MODE (1 << 16)
+/*
+ * This is the number of cycles out of the backlight modulation cycle for which
+ * the backlight is on.
+ *
+ * This field must be no greater than the number of cycles in the complete
+ * backlight modulation cycle.
+ */
+#define BACKLIGHT_DUTY_CYCLE_SHIFT (0)
+#define BACKLIGHT_DUTY_CYCLE_MASK (0xffff)
+
+#define BLC_HIST_CTL 0x61260
+
+/* TV port control */
+#define TV_CTL 0x68000
+/** Enables the TV encoder */
+# define TV_ENC_ENABLE (1 << 31)
+/** Sources the TV encoder input from pipe B instead of A. */
+# define TV_ENC_PIPEB_SELECT (1 << 30)
+/** Outputs composite video (DAC A only) */
+# define TV_ENC_OUTPUT_COMPOSITE (0 << 28)
+/** Outputs SVideo video (DAC B/C) */
+# define TV_ENC_OUTPUT_SVIDEO (1 << 28)
+/** Outputs Component video (DAC A/B/C) */
+# define TV_ENC_OUTPUT_COMPONENT (2 << 28)
+/** Outputs Composite and SVideo (DAC A/B/C) */
+# define TV_ENC_OUTPUT_SVIDEO_COMPOSITE (3 << 28)
+# define TV_TRILEVEL_SYNC (1 << 21)
+/** Enables slow sync generation (945GM only) */
+# define TV_SLOW_SYNC (1 << 20)
+/** Selects 4x oversampling for 480i and 576p */
+# define TV_OVERSAMPLE_4X (0 << 18)
+/** Selects 2x oversampling for 720p and 1080i */
+# define TV_OVERSAMPLE_2X (1 << 18)
+/** Selects no oversampling for 1080p */
+# define TV_OVERSAMPLE_NONE (2 << 18)
+/** Selects 8x oversampling */
+# define TV_OVERSAMPLE_8X (3 << 18)
+/** Selects progressive mode rather than interlaced */
+# define TV_PROGRESSIVE (1 << 17)
+/** Sets the colorburst to PAL mode. Required for non-M PAL modes. */
+# define TV_PAL_BURST (1 << 16)
+/** Field for setting delay of Y compared to C */
+# define TV_YC_SKEW_MASK (7 << 12)
+/** Enables a fix for 480p/576p standard definition modes on the 915GM only */
+# define TV_ENC_SDP_FIX (1 << 11)
+/**
+ * Enables a fix for the 915GM only.
+ *
+ * Not sure what it does.
+ */
+# define TV_ENC_C0_FIX (1 << 10)
+/** Bits that must be preserved by software */
+# define TV_CTL_SAVE ((1 << 11) | (3 << 9) | (7 << 6) | 0xf)
+# define TV_FUSE_STATE_MASK (3 << 4)
+/** Read-only state that reports all features enabled */
+# define TV_FUSE_STATE_ENABLED (0 << 4)
+/** Read-only state that reports that Macrovision is disabled in hardware*/
+# define TV_FUSE_STATE_NO_MACROVISION (1 << 4)
+/** Read-only state that reports that TV-out is disabled in hardware. */
+# define TV_FUSE_STATE_DISABLED (2 << 4)
+/** Normal operation */
+# define TV_TEST_MODE_NORMAL (0 << 0)
+/** Encoder test pattern 1 - combo pattern */
+# define TV_TEST_MODE_PATTERN_1 (1 << 0)
+/** Encoder test pattern 2 - full screen vertical 75% color bars */
+# define TV_TEST_MODE_PATTERN_2 (2 << 0)
+/** Encoder test pattern 3 - full screen horizontal 75% color bars */
+# define TV_TEST_MODE_PATTERN_3 (3 << 0)
+/** Encoder test pattern 4 - random noise */
+# define TV_TEST_MODE_PATTERN_4 (4 << 0)
+/** Encoder test pattern 5 - linear color ramps */
+# define TV_TEST_MODE_PATTERN_5 (5 << 0)
+/**
+ * This test mode forces the DACs to 50% of full output.
+ *
+ * This is used for load detection in combination with TVDAC_SENSE_MASK
+ */
+# define TV_TEST_MODE_MONITOR_DETECT (7 << 0)
+# define TV_TEST_MODE_MASK (7 << 0)
+
+#define TV_DAC 0x68004
+# define TV_DAC_SAVE 0x00ffff00
+/**
+ * Reports that DAC state change logic has reported change (RO).
+ *
+ * This gets cleared when TV_DAC_STATE_EN is cleared
+*/
+# define TVDAC_STATE_CHG (1 << 31)
+# define TVDAC_SENSE_MASK (7 << 28)
+/** Reports that DAC A voltage is above the detect threshold */
+# define TVDAC_A_SENSE (1 << 30)
+/** Reports that DAC B voltage is above the detect threshold */
+# define TVDAC_B_SENSE (1 << 29)
+/** Reports that DAC C voltage is above the detect threshold */
+# define TVDAC_C_SENSE (1 << 28)
+/**
+ * Enables DAC state detection logic, for load-based TV detection.
+ *
+ * The PLL of the chosen pipe (in TV_CTL) must be running, and the encoder set
+ * to off, for load detection to work.
+ */
+# define TVDAC_STATE_CHG_EN (1 << 27)
+/** Sets the DAC A sense value to high */
+# define TVDAC_A_SENSE_CTL (1 << 26)
+/** Sets the DAC B sense value to high */
+# define TVDAC_B_SENSE_CTL (1 << 25)
+/** Sets the DAC C sense value to high */
+# define TVDAC_C_SENSE_CTL (1 << 24)
+/** Overrides the ENC_ENABLE and DAC voltage levels */
+# define DAC_CTL_OVERRIDE (1 << 7)
+/** Sets the slew rate. Must be preserved in software */
+# define ENC_TVDAC_SLEW_FAST (1 << 6)
+# define DAC_A_1_3_V (0 << 4)
+# define DAC_A_1_1_V (1 << 4)
+# define DAC_A_0_7_V (2 << 4)
+# define DAC_A_MASK (3 << 4)
+# define DAC_B_1_3_V (0 << 2)
+# define DAC_B_1_1_V (1 << 2)
+# define DAC_B_0_7_V (2 << 2)
+# define DAC_B_MASK (3 << 2)
+# define DAC_C_1_3_V (0 << 0)
+# define DAC_C_1_1_V (1 << 0)
+# define DAC_C_0_7_V (2 << 0)
+# define DAC_C_MASK (3 << 0)
+
+/**
+ * CSC coefficients are stored in a floating point format with 9 bits of
+ * mantissa and 2 or 3 bits of exponent. The exponent is represented as 2**-n,
+ * where 2-bit exponents are unsigned n, and 3-bit exponents are signed n with
+ * -1 (0x3) being the only legal negative value.
+ */
+#define TV_CSC_Y 0x68010
+# define TV_RY_MASK 0x07ff0000
+# define TV_RY_SHIFT 16
+# define TV_GY_MASK 0x00000fff
+# define TV_GY_SHIFT 0
+
+#define TV_CSC_Y2 0x68014
+# define TV_BY_MASK 0x07ff0000
+# define TV_BY_SHIFT 16
+/**
+ * Y attenuation for component video.
+ *
+ * Stored in 1.9 fixed point.
+ */
+# define TV_AY_MASK 0x000003ff
+# define TV_AY_SHIFT 0
+
+#define TV_CSC_U 0x68018
+# define TV_RU_MASK 0x07ff0000
+# define TV_RU_SHIFT 16
+# define TV_GU_MASK 0x000007ff
+# define TV_GU_SHIFT 0
+
+#define TV_CSC_U2 0x6801c
+# define TV_BU_MASK 0x07ff0000
+# define TV_BU_SHIFT 16
+/**
+ * U attenuation for component video.
+ *
+ * Stored in 1.9 fixed point.
+ */
+# define TV_AU_MASK 0x000003ff
+# define TV_AU_SHIFT 0
+
+#define TV_CSC_V 0x68020
+# define TV_RV_MASK 0x0fff0000
+# define TV_RV_SHIFT 16
+# define TV_GV_MASK 0x000007ff
+# define TV_GV_SHIFT 0
+
+#define TV_CSC_V2 0x68024
+# define TV_BV_MASK 0x07ff0000
+# define TV_BV_SHIFT 16
+/**
+ * V attenuation for component video.
+ *
+ * Stored in 1.9 fixed point.
+ */
+# define TV_AV_MASK 0x000007ff
+# define TV_AV_SHIFT 0
+
+#define TV_CLR_KNOBS 0x68028
+/** 2s-complement brightness adjustment */
+# define TV_BRIGHTNESS_MASK 0xff000000
+# define TV_BRIGHTNESS_SHIFT 24
+/** Contrast adjustment, as a 2.6 unsigned floating point number */
+# define TV_CONTRAST_MASK 0x00ff0000
+# define TV_CONTRAST_SHIFT 16
+/** Saturation adjustment, as a 2.6 unsigned floating point number */
+# define TV_SATURATION_MASK 0x0000ff00
+# define TV_SATURATION_SHIFT 8
+/** Hue adjustment, as an integer phase angle in degrees */
+# define TV_HUE_MASK 0x000000ff
+# define TV_HUE_SHIFT 0
+
+#define TV_CLR_LEVEL 0x6802c
+/** Controls the DAC level for black */
+# define TV_BLACK_LEVEL_MASK 0x01ff0000
+# define TV_BLACK_LEVEL_SHIFT 16
+/** Controls the DAC level for blanking */
+# define TV_BLANK_LEVEL_MASK 0x000001ff
+# define TV_BLANK_LEVEL_SHIFT 0
+
+#define TV_H_CTL_1 0x68030
+/** Number of pixels in the hsync. */
+# define TV_HSYNC_END_MASK 0x1fff0000
+# define TV_HSYNC_END_SHIFT 16
+/** Total number of pixels minus one in the line (display and blanking). */
+# define TV_HTOTAL_MASK 0x00001fff
+# define TV_HTOTAL_SHIFT 0
+
+#define TV_H_CTL_2 0x68034
+/** Enables the colorburst (needed for non-component color) */
+# define TV_BURST_ENA (1 << 31)
+/** Offset of the colorburst from the start of hsync, in pixels minus one. */
+# define TV_HBURST_START_SHIFT 16
+# define TV_HBURST_START_MASK 0x1fff0000
+/** Length of the colorburst */
+# define TV_HBURST_LEN_SHIFT 0
+# define TV_HBURST_LEN_MASK 0x0001fff
+
+#define TV_H_CTL_3 0x68038
+/** End of hblank, measured in pixels minus one from start of hsync */
+# define TV_HBLANK_END_SHIFT 16
+# define TV_HBLANK_END_MASK 0x1fff0000
+/** Start of hblank, measured in pixels minus one from start of hsync */
+# define TV_HBLANK_START_SHIFT 0
+# define TV_HBLANK_START_MASK 0x0001fff
+
+#define TV_V_CTL_1 0x6803c
+/** XXX */
+# define TV_NBR_END_SHIFT 16
+# define TV_NBR_END_MASK 0x07ff0000
+/** XXX */
+# define TV_VI_END_F1_SHIFT 8
+# define TV_VI_END_F1_MASK 0x00003f00
+/** XXX */
+# define TV_VI_END_F2_SHIFT 0
+# define TV_VI_END_F2_MASK 0x0000003f
+
+#define TV_V_CTL_2 0x68040
+/** Length of vsync, in half lines */
+# define TV_VSYNC_LEN_MASK 0x07ff0000
+# define TV_VSYNC_LEN_SHIFT 16
+/** Offset of the start of vsync in field 1, measured in one less than the
+ * number of half lines.
+ */
+# define TV_VSYNC_START_F1_MASK 0x00007f00
+# define TV_VSYNC_START_F1_SHIFT 8
+/**
+ * Offset of the start of vsync in field 2, measured in one less than the
+ * number of half lines.
+ */
+# define TV_VSYNC_START_F2_MASK 0x0000007f
+# define TV_VSYNC_START_F2_SHIFT 0
+
+#define TV_V_CTL_3 0x68044
+/** Enables generation of the equalization signal */
+# define TV_EQUAL_ENA (1 << 31)
+/** Length of vsync, in half lines */
+# define TV_VEQ_LEN_MASK 0x007f0000
+# define TV_VEQ_LEN_SHIFT 16
+/** Offset of the start of equalization in field 1, measured in one less than
+ * the number of half lines.
+ */
+# define TV_VEQ_START_F1_MASK 0x0007f00
+# define TV_VEQ_START_F1_SHIFT 8
+/**
+ * Offset of the start of equalization in field 2, measured in one less than
+ * the number of half lines.
+ */
+# define TV_VEQ_START_F2_MASK 0x000007f
+# define TV_VEQ_START_F2_SHIFT 0
+
+#define TV_V_CTL_4 0x68048
+/**
+ * Offset to start of vertical colorburst, measured in one less than the
+ * number of lines from vertical start.
+ */
+# define TV_VBURST_START_F1_MASK 0x003f0000
+# define TV_VBURST_START_F1_SHIFT 16
+/**
+ * Offset to the end of vertical colorburst, measured in one less than the
+ * number of lines from the start of NBR.
+ */
+# define TV_VBURST_END_F1_MASK 0x000000ff
+# define TV_VBURST_END_F1_SHIFT 0
+
+#define TV_V_CTL_5 0x6804c
+/**
+ * Offset to start of vertical colorburst, measured in one less than the
+ * number of lines from vertical start.
+ */
+# define TV_VBURST_START_F2_MASK 0x003f0000
+# define TV_VBURST_START_F2_SHIFT 16
+/**
+ * Offset to the end of vertical colorburst, measured in one less than the
+ * number of lines from the start of NBR.
+ */
+# define TV_VBURST_END_F2_MASK 0x000000ff
+# define TV_VBURST_END_F2_SHIFT 0
+
+#define TV_V_CTL_6 0x68050
+/**
+ * Offset to start of vertical colorburst, measured in one less than the
+ * number of lines from vertical start.
+ */
+# define TV_VBURST_START_F3_MASK 0x003f0000
+# define TV_VBURST_START_F3_SHIFT 16
+/**
+ * Offset to the end of vertical colorburst, measured in one less than the
+ * number of lines from the start of NBR.
+ */
+# define TV_VBURST_END_F3_MASK 0x000000ff
+# define TV_VBURST_END_F3_SHIFT 0
+
+#define TV_V_CTL_7 0x68054
+/**
+ * Offset to start of vertical colorburst, measured in one less than the
+ * number of lines from vertical start.
+ */
+# define TV_VBURST_START_F4_MASK 0x003f0000
+# define TV_VBURST_START_F4_SHIFT 16
+/**
+ * Offset to the end of vertical colorburst, measured in one less than the
+ * number of lines from the start of NBR.
+ */
+# define TV_VBURST_END_F4_MASK 0x000000ff
+# define TV_VBURST_END_F4_SHIFT 0
+
+#define TV_SC_CTL_1 0x68060
+/** Turns on the first subcarrier phase generation DDA */
+# define TV_SC_DDA1_EN (1 << 31)
+/** Turns on the first subcarrier phase generation DDA */
+# define TV_SC_DDA2_EN (1 << 30)
+/** Turns on the first subcarrier phase generation DDA */
+# define TV_SC_DDA3_EN (1 << 29)
+/** Sets the subcarrier DDA to reset frequency every other field */
+# define TV_SC_RESET_EVERY_2 (0 << 24)
+/** Sets the subcarrier DDA to reset frequency every fourth field */
+# define TV_SC_RESET_EVERY_4 (1 << 24)
+/** Sets the subcarrier DDA to reset frequency every eighth field */
+# define TV_SC_RESET_EVERY_8 (2 << 24)
+/** Sets the subcarrier DDA to never reset the frequency */
+# define TV_SC_RESET_NEVER (3 << 24)
+/** Sets the peak amplitude of the colorburst.*/
+# define TV_BURST_LEVEL_MASK 0x00ff0000
+# define TV_BURST_LEVEL_SHIFT 16
+/** Sets the increment of the first subcarrier phase generation DDA */
+# define TV_SCDDA1_INC_MASK 0x00000fff
+# define TV_SCDDA1_INC_SHIFT 0
+
+#define TV_SC_CTL_2 0x68064
+/** Sets the rollover for the second subcarrier phase generation DDA */
+# define TV_SCDDA2_SIZE_MASK 0x7fff0000
+# define TV_SCDDA2_SIZE_SHIFT 16
+/** Sets the increent of the second subcarrier phase generation DDA */
+# define TV_SCDDA2_INC_MASK 0x00007fff
+# define TV_SCDDA2_INC_SHIFT 0
+
+#define TV_SC_CTL_3 0x68068
+/** Sets the rollover for the third subcarrier phase generation DDA */
+# define TV_SCDDA3_SIZE_MASK 0x7fff0000
+# define TV_SCDDA3_SIZE_SHIFT 16
+/** Sets the increent of the third subcarrier phase generation DDA */
+# define TV_SCDDA3_INC_MASK 0x00007fff
+# define TV_SCDDA3_INC_SHIFT 0
+
+#define TV_WIN_POS 0x68070
+/** X coordinate of the display from the start of horizontal active */
+# define TV_XPOS_MASK 0x1fff0000
+# define TV_XPOS_SHIFT 16
+/** Y coordinate of the display from the start of vertical active (NBR) */
+# define TV_YPOS_MASK 0x00000fff
+# define TV_YPOS_SHIFT 0
+
+#define TV_WIN_SIZE 0x68074
+/** Horizontal size of the display window, measured in pixels*/
+# define TV_XSIZE_MASK 0x1fff0000
+# define TV_XSIZE_SHIFT 16
+/**
+ * Vertical size of the display window, measured in pixels.
+ *
+ * Must be even for interlaced modes.
+ */
+# define TV_YSIZE_MASK 0x00000fff
+# define TV_YSIZE_SHIFT 0
+
+#define TV_FILTER_CTL_1 0x68080
+/**
+ * Enables automatic scaling calculation.
+ *
+ * If set, the rest of the registers are ignored, and the calculated values can
+ * be read back from the register.
+ */
+# define TV_AUTO_SCALE (1 << 31)
+/**
+ * Disables the vertical filter.
+ *
+ * This is required on modes more than 1024 pixels wide */
+# define TV_V_FILTER_BYPASS (1 << 29)
+/** Enables adaptive vertical filtering */
+# define TV_VADAPT (1 << 28)
+# define TV_VADAPT_MODE_MASK (3 << 26)
+/** Selects the least adaptive vertical filtering mode */
+# define TV_VADAPT_MODE_LEAST (0 << 26)
+/** Selects the moderately adaptive vertical filtering mode */
+# define TV_VADAPT_MODE_MODERATE (1 << 26)
+/** Selects the most adaptive vertical filtering mode */
+# define TV_VADAPT_MODE_MOST (3 << 26)
+/**
+ * Sets the horizontal scaling factor.
+ *
+ * This should be the fractional part of the horizontal scaling factor divided
+ * by the oversampling rate. TV_HSCALE should be less than 1, and set to:
+ *
+ * (src width - 1) / ((oversample * dest width) - 1)
+ */
+# define TV_HSCALE_FRAC_MASK 0x00003fff
+# define TV_HSCALE_FRAC_SHIFT 0
+
+#define TV_FILTER_CTL_2 0x68084
+/**
+ * Sets the integer part of the 3.15 fixed-point vertical scaling factor.
+ *
+ * TV_VSCALE should be (src height - 1) / ((interlace * dest height) - 1)
+ */
+# define TV_VSCALE_INT_MASK 0x00038000
+# define TV_VSCALE_INT_SHIFT 15
+/**
+ * Sets the fractional part of the 3.15 fixed-point vertical scaling factor.
+ *
+ * \sa TV_VSCALE_INT_MASK
+ */
+# define TV_VSCALE_FRAC_MASK 0x00007fff
+# define TV_VSCALE_FRAC_SHIFT 0
+
+#define TV_FILTER_CTL_3 0x68088
+/**
+ * Sets the integer part of the 3.15 fixed-point vertical scaling factor.
+ *
+ * TV_VSCALE should be (src height - 1) / (1/4 * (dest height - 1))
+ *
+ * For progressive modes, TV_VSCALE_IP_INT should be set to zeroes.
+ */
+# define TV_VSCALE_IP_INT_MASK 0x00038000
+# define TV_VSCALE_IP_INT_SHIFT 15
+/**
+ * Sets the fractional part of the 3.15 fixed-point vertical scaling factor.
+ *
+ * For progressive modes, TV_VSCALE_IP_INT should be set to zeroes.
+ *
+ * \sa TV_VSCALE_IP_INT_MASK
+ */
+# define TV_VSCALE_IP_FRAC_MASK 0x00007fff
+# define TV_VSCALE_IP_FRAC_SHIFT 0
+
+#define TV_CC_CONTROL 0x68090
+# define TV_CC_ENABLE (1 << 31)
+/**
+ * Specifies which field to send the CC data in.
+ *
+ * CC data is usually sent in field 0.
+ */
+# define TV_CC_FID_MASK (1 << 27)
+# define TV_CC_FID_SHIFT 27
+/** Sets the horizontal position of the CC data. Usually 135. */
+# define TV_CC_HOFF_MASK 0x03ff0000
+# define TV_CC_HOFF_SHIFT 16
+/** Sets the vertical position of the CC data. Usually 21 */
+# define TV_CC_LINE_MASK 0x0000003f
+# define TV_CC_LINE_SHIFT 0
+
+#define TV_CC_DATA 0x68094
+# define TV_CC_RDY (1 << 31)
+/** Second word of CC data to be transmitted. */
+# define TV_CC_DATA_2_MASK 0x007f0000
+# define TV_CC_DATA_2_SHIFT 16
+/** First word of CC data to be transmitted. */
+# define TV_CC_DATA_1_MASK 0x0000007f
+# define TV_CC_DATA_1_SHIFT 0
+
+#define TV_H_LUMA_0 0x68100
+#define TV_H_LUMA_59 0x681ec
+#define TV_H_CHROMA_0 0x68200
+#define TV_H_CHROMA_59 0x682ec
+#define TV_V_LUMA_0 0x68300
+#define TV_V_LUMA_42 0x683a8
+#define TV_V_CHROMA_0 0x68400
+#define TV_V_CHROMA_42 0x684a8
+
+/* Display Port */
+#define DP_A 0x64000 /* eDP */
+#define DP_B 0x64100
+#define DP_C 0x64200
+#define DP_D 0x64300
+
+#define DP_PORT_EN (1 << 31)
+#define DP_PIPEB_SELECT (1 << 30)
+#define DP_PIPE_MASK (1 << 30)
+
+/* Link training mode - select a suitable mode for each stage */
+#define DP_LINK_TRAIN_PAT_1 (0 << 28)
+#define DP_LINK_TRAIN_PAT_2 (1 << 28)
+#define DP_LINK_TRAIN_PAT_IDLE (2 << 28)
+#define DP_LINK_TRAIN_OFF (3 << 28)
+#define DP_LINK_TRAIN_MASK (3 << 28)
+#define DP_LINK_TRAIN_SHIFT 28
+
+/* CPT Link training mode */
+#define DP_LINK_TRAIN_PAT_1_CPT (0 << 8)
+#define DP_LINK_TRAIN_PAT_2_CPT (1 << 8)
+#define DP_LINK_TRAIN_PAT_IDLE_CPT (2 << 8)
+#define DP_LINK_TRAIN_OFF_CPT (3 << 8)
+#define DP_LINK_TRAIN_MASK_CPT (7 << 8)
+#define DP_LINK_TRAIN_SHIFT_CPT 8
+
+/* Signal voltages. These are mostly controlled by the other end */
+#define DP_VOLTAGE_0_4 (0 << 25)
+#define DP_VOLTAGE_0_6 (1 << 25)
+#define DP_VOLTAGE_0_8 (2 << 25)
+#define DP_VOLTAGE_1_2 (3 << 25)
+#define DP_VOLTAGE_MASK (7 << 25)
+#define DP_VOLTAGE_SHIFT 25
+
+/* Signal pre-emphasis levels, like voltages, the other end tells us what
+ * they want
+ */
+#define DP_PRE_EMPHASIS_0 (0 << 22)
+#define DP_PRE_EMPHASIS_3_5 (1 << 22)
+#define DP_PRE_EMPHASIS_6 (2 << 22)
+#define DP_PRE_EMPHASIS_9_5 (3 << 22)
+#define DP_PRE_EMPHASIS_MASK (7 << 22)
+#define DP_PRE_EMPHASIS_SHIFT 22
+
+/* How many wires to use. I guess 3 was too hard */
+#define DP_PORT_WIDTH_1 (0 << 19)
+#define DP_PORT_WIDTH_2 (1 << 19)
+#define DP_PORT_WIDTH_4 (3 << 19)
+#define DP_PORT_WIDTH_MASK (7 << 19)
+
+/* Mystic DPCD version 1.1 special mode */
+#define DP_ENHANCED_FRAMING (1 << 18)
+
+/* eDP */
+#define DP_PLL_FREQ_270MHZ (0 << 16)
+#define DP_PLL_FREQ_160MHZ (1 << 16)
+#define DP_PLL_FREQ_MASK (3 << 16)
+
+/** locked once port is enabled */
+#define DP_PORT_REVERSAL (1 << 15)
+
+/* eDP */
+#define DP_PLL_ENABLE (1 << 14)
+
+/** sends the clock on lane 15 of the PEG for debug */
+#define DP_CLOCK_OUTPUT_ENABLE (1 << 13)
+
+#define DP_SCRAMBLING_DISABLE (1 << 12)
+#define DP_SCRAMBLING_DISABLE_IRONLAKE (1 << 7)
+
+/** limit RGB values to avoid confusing TVs */
+#define DP_COLOR_RANGE_16_235 (1 << 8)
+
+/** Turn on the audio link */
+#define DP_AUDIO_OUTPUT_ENABLE (1 << 6)
+
+/** vs and hs sync polarity */
+#define DP_SYNC_VS_HIGH (1 << 4)
+#define DP_SYNC_HS_HIGH (1 << 3)
+
+/** A fantasy */
+#define DP_DETECTED (1 << 2)
+
+/** The aux channel provides a way to talk to the
+ * signal sink for DDC etc. Max packet size supported
+ * is 20 bytes in each direction, hence the 5 fixed
+ * data registers
+ */
+#define DPA_AUX_CH_CTL 0x64010
+#define DPA_AUX_CH_DATA1 0x64014
+#define DPA_AUX_CH_DATA2 0x64018
+#define DPA_AUX_CH_DATA3 0x6401c
+#define DPA_AUX_CH_DATA4 0x64020
+#define DPA_AUX_CH_DATA5 0x64024
+
+#define DPB_AUX_CH_CTL 0x64110
+#define DPB_AUX_CH_DATA1 0x64114
+#define DPB_AUX_CH_DATA2 0x64118
+#define DPB_AUX_CH_DATA3 0x6411c
+#define DPB_AUX_CH_DATA4 0x64120
+#define DPB_AUX_CH_DATA5 0x64124
+
+#define DPC_AUX_CH_CTL 0x64210
+#define DPC_AUX_CH_DATA1 0x64214
+#define DPC_AUX_CH_DATA2 0x64218
+#define DPC_AUX_CH_DATA3 0x6421c
+#define DPC_AUX_CH_DATA4 0x64220
+#define DPC_AUX_CH_DATA5 0x64224
+
+#define DPD_AUX_CH_CTL 0x64310
+#define DPD_AUX_CH_DATA1 0x64314
+#define DPD_AUX_CH_DATA2 0x64318
+#define DPD_AUX_CH_DATA3 0x6431c
+#define DPD_AUX_CH_DATA4 0x64320
+#define DPD_AUX_CH_DATA5 0x64324
+
+#define DP_AUX_CH_CTL_SEND_BUSY (1 << 31)
+#define DP_AUX_CH_CTL_DONE (1 << 30)
+#define DP_AUX_CH_CTL_INTERRUPT (1 << 29)
+#define DP_AUX_CH_CTL_TIME_OUT_ERROR (1 << 28)
+#define DP_AUX_CH_CTL_TIME_OUT_400us (0 << 26)
+#define DP_AUX_CH_CTL_TIME_OUT_600us (1 << 26)
+#define DP_AUX_CH_CTL_TIME_OUT_800us (2 << 26)
+#define DP_AUX_CH_CTL_TIME_OUT_1600us (3 << 26)
+#define DP_AUX_CH_CTL_TIME_OUT_MASK (3 << 26)
+#define DP_AUX_CH_CTL_RECEIVE_ERROR (1 << 25)
+#define DP_AUX_CH_CTL_MESSAGE_SIZE_MASK (0x1f << 20)
+#define DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT 20
+#define DP_AUX_CH_CTL_PRECHARGE_2US_MASK (0xf << 16)
+#define DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT 16
+#define DP_AUX_CH_CTL_AUX_AKSV_SELECT (1 << 15)
+#define DP_AUX_CH_CTL_MANCHESTER_TEST (1 << 14)
+#define DP_AUX_CH_CTL_SYNC_TEST (1 << 13)
+#define DP_AUX_CH_CTL_DEGLITCH_TEST (1 << 12)
+#define DP_AUX_CH_CTL_PRECHARGE_TEST (1 << 11)
+#define DP_AUX_CH_CTL_BIT_CLOCK_2X_MASK (0x7ff)
+#define DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT 0
+
+/*
+ * Computing GMCH M and N values for the Display Port link
+ *
+ * GMCH M/N = dot clock * bytes per pixel / ls_clk * # of lanes
+ *
+ * ls_clk (we assume) is the DP link clock (1.62 or 2.7 GHz)
+ *
+ * The GMCH value is used internally
+ *
+ * bytes_per_pixel is the number of bytes coming out of the plane,
+ * which is after the LUTs, so we want the bytes for our color format.
+ * For our current usage, this is always 3, one byte for R, G and B.
+ */
+#define _PIPEA_GMCH_DATA_M 0x70050
+#define _PIPEB_GMCH_DATA_M 0x71050
+
+/* Transfer unit size for display port - 1, default is 0x3f (for TU size 64) */
+#define PIPE_GMCH_DATA_M_TU_SIZE_MASK (0x3f << 25)
+#define PIPE_GMCH_DATA_M_TU_SIZE_SHIFT 25
+
+#define PIPE_GMCH_DATA_M_MASK (0xffffff)
+
+#define _PIPEA_GMCH_DATA_N 0x70054
+#define _PIPEB_GMCH_DATA_N 0x71054
+#define PIPE_GMCH_DATA_N_MASK (0xffffff)
+
+/*
+ * Computing Link M and N values for the Display Port link
+ *
+ * Link M / N = pixel_clock / ls_clk
+ *
+ * (the DP spec calls pixel_clock the 'strm_clk')
+ *
+ * The Link value is transmitted in the Main Stream
+ * Attributes and VB-ID.
+ */
+
+#define _PIPEA_DP_LINK_M 0x70060
+#define _PIPEB_DP_LINK_M 0x71060
+#define PIPEA_DP_LINK_M_MASK (0xffffff)
+
+#define _PIPEA_DP_LINK_N 0x70064
+#define _PIPEB_DP_LINK_N 0x71064
+#define PIPEA_DP_LINK_N_MASK (0xffffff)
+
+#define PIPE_GMCH_DATA_M(pipe) _PIPE(pipe, _PIPEA_GMCH_DATA_M, _PIPEB_GMCH_DATA_M)
+#define PIPE_GMCH_DATA_N(pipe) _PIPE(pipe, _PIPEA_GMCH_DATA_N, _PIPEB_GMCH_DATA_N)
+#define PIPE_DP_LINK_M(pipe) _PIPE(pipe, _PIPEA_DP_LINK_M, _PIPEB_DP_LINK_M)
+#define PIPE_DP_LINK_N(pipe) _PIPE(pipe, _PIPEA_DP_LINK_N, _PIPEB_DP_LINK_N)
+
+/* Display & cursor control */
+
+/* Pipe A */
+#define _PIPEADSL 0x70000
+#define DSL_LINEMASK 0x00000fff
+#define _PIPEACONF 0x70008
+#define PIPECONF_ENABLE (1<<31)
+#define PIPECONF_DISABLE 0
+#define PIPECONF_DOUBLE_WIDE (1<<30)
+#define I965_PIPECONF_ACTIVE (1<<30)
+#define PIPECONF_FRAME_START_DELAY_MASK (3<<27)
+#define PIPECONF_SINGLE_WIDE 0
+#define PIPECONF_PIPE_UNLOCKED 0
+#define PIPECONF_PIPE_LOCKED (1<<25)
+#define PIPECONF_PALETTE 0
+#define PIPECONF_GAMMA (1<<24)
+#define PIPECONF_FORCE_BORDER (1<<25)
+#define PIPECONF_INTERLACE_MASK (7 << 21)
+/* Note that pre-gen3 does not support interlaced display directly. Panel
+ * fitting must be disabled on pre-ilk for interlaced. */
+#define PIPECONF_PROGRESSIVE (0 << 21)
+#define PIPECONF_INTERLACE_W_SYNC_SHIFT_PANEL (4 << 21) /* gen4 only */
+#define PIPECONF_INTERLACE_W_SYNC_SHIFT (5 << 21) /* gen4 only */
+#define PIPECONF_INTERLACE_W_FIELD_INDICATION (6 << 21)
+#define PIPECONF_INTERLACE_FIELD_0_ONLY (7 << 21) /* gen3 only */
+/* Ironlake and later have a complete new set of values for interlaced. PFIT
+ * means panel fitter required, PF means progressive fetch, DBL means power
+ * saving pixel doubling. */
+#define PIPECONF_PFIT_PF_INTERLACED_ILK (1 << 21)
+#define PIPECONF_INTERLACED_ILK (3 << 21)
+#define PIPECONF_INTERLACED_DBL_ILK (4 << 21) /* ilk/snb only */
+#define PIPECONF_PFIT_PF_INTERLACED_DBL_ILK (5 << 21) /* ilk/snb only */
+#define PIPECONF_CXSR_DOWNCLOCK (1<<16)
+#define PIPECONF_BPP_MASK (0x000000e0)
+#define PIPECONF_BPP_8 (0<<5)
+#define PIPECONF_BPP_10 (1<<5)
+#define PIPECONF_BPP_6 (2<<5)
+#define PIPECONF_BPP_12 (3<<5)
+#define PIPECONF_DITHER_EN (1<<4)
+#define PIPECONF_DITHER_TYPE_MASK (0x0000000c)
+#define PIPECONF_DITHER_TYPE_SP (0<<2)
+#define PIPECONF_DITHER_TYPE_ST1 (1<<2)
+#define PIPECONF_DITHER_TYPE_ST2 (2<<2)
+#define PIPECONF_DITHER_TYPE_TEMP (3<<2)
+#define _PIPEASTAT 0x70024
+#define PIPE_FIFO_UNDERRUN_STATUS (1UL<<31)
+#define PIPE_CRC_ERROR_ENABLE (1UL<<29)
+#define PIPE_CRC_DONE_ENABLE (1UL<<28)
+#define PIPE_GMBUS_EVENT_ENABLE (1UL<<27)
+#define PIPE_HOTPLUG_INTERRUPT_ENABLE (1UL<<26)
+#define PIPE_VSYNC_INTERRUPT_ENABLE (1UL<<25)
+#define PIPE_DISPLAY_LINE_COMPARE_ENABLE (1UL<<24)
+#define PIPE_DPST_EVENT_ENABLE (1UL<<23)
+#define PIPE_LEGACY_BLC_EVENT_ENABLE (1UL<<22)
+#define PIPE_ODD_FIELD_INTERRUPT_ENABLE (1UL<<21)
+#define PIPE_EVEN_FIELD_INTERRUPT_ENABLE (1UL<<20)
+#define PIPE_HOTPLUG_TV_INTERRUPT_ENABLE (1UL<<18) /* pre-965 */
+#define PIPE_START_VBLANK_INTERRUPT_ENABLE (1UL<<18) /* 965 or later */
+#define PIPE_VBLANK_INTERRUPT_ENABLE (1UL<<17)
+#define PIPE_OVERLAY_UPDATED_ENABLE (1UL<<16)
+#define PIPE_CRC_ERROR_INTERRUPT_STATUS (1UL<<13)
+#define PIPE_CRC_DONE_INTERRUPT_STATUS (1UL<<12)
+#define PIPE_GMBUS_INTERRUPT_STATUS (1UL<<11)
+#define PIPE_HOTPLUG_INTERRUPT_STATUS (1UL<<10)
+#define PIPE_VSYNC_INTERRUPT_STATUS (1UL<<9)
+#define PIPE_DISPLAY_LINE_COMPARE_STATUS (1UL<<8)
+#define PIPE_DPST_EVENT_STATUS (1UL<<7)
+#define PIPE_LEGACY_BLC_EVENT_STATUS (1UL<<6)
+#define PIPE_ODD_FIELD_INTERRUPT_STATUS (1UL<<5)
+#define PIPE_EVEN_FIELD_INTERRUPT_STATUS (1UL<<4)
+#define PIPE_HOTPLUG_TV_INTERRUPT_STATUS (1UL<<2) /* pre-965 */
+#define PIPE_START_VBLANK_INTERRUPT_STATUS (1UL<<2) /* 965 or later */
+#define PIPE_VBLANK_INTERRUPT_STATUS (1UL<<1)
+#define PIPE_OVERLAY_UPDATED_STATUS (1UL<<0)
+#define PIPE_BPC_MASK (7 << 5) /* Ironlake */
+#define PIPE_8BPC (0 << 5)
+#define PIPE_10BPC (1 << 5)
+#define PIPE_6BPC (2 << 5)
+#define PIPE_12BPC (3 << 5)
+
+#define PIPESRC(pipe) _PIPE(pipe, _PIPEASRC, _PIPEBSRC)
+#define PIPECONF(pipe) _PIPE(pipe, _PIPEACONF, _PIPEBCONF)
+#define PIPEDSL(pipe) _PIPE(pipe, _PIPEADSL, _PIPEBDSL)
+#define PIPEFRAME(pipe) _PIPE(pipe, _PIPEAFRAMEHIGH, _PIPEBFRAMEHIGH)
+#define PIPEFRAMEPIXEL(pipe) _PIPE(pipe, _PIPEAFRAMEPIXEL, _PIPEBFRAMEPIXEL)
+#define PIPESTAT(pipe) _PIPE(pipe, _PIPEASTAT, _PIPEBSTAT)
+
+#define DSPARB 0x70030
+#define DSPARB_CSTART_MASK (0x7f << 7)
+#define DSPARB_CSTART_SHIFT 7
+#define DSPARB_BSTART_MASK (0x7f)
+#define DSPARB_BSTART_SHIFT 0
+#define DSPARB_BEND_SHIFT 9 /* on 855 */
+#define DSPARB_AEND_SHIFT 0
+
+#define DSPFW1 0x70034
+#define DSPFW_SR_SHIFT 23
+#define DSPFW_SR_MASK (0x1ff<<23)
+#define DSPFW_CURSORB_SHIFT 16
+#define DSPFW_CURSORB_MASK (0x3f<<16)
+#define DSPFW_PLANEB_SHIFT 8
+#define DSPFW_PLANEB_MASK (0x7f<<8)
+#define DSPFW_PLANEA_MASK (0x7f)
+#define DSPFW2 0x70038
+#define DSPFW_CURSORA_MASK 0x00003f00
+#define DSPFW_CURSORA_SHIFT 8
+#define DSPFW_PLANEC_MASK (0x7f)
+#define DSPFW3 0x7003c
+#define DSPFW_HPLL_SR_EN (1<<31)
+#define DSPFW_CURSOR_SR_SHIFT 24
+#define PINEVIEW_SELF_REFRESH_EN (1<<30)
+#define DSPFW_CURSOR_SR_MASK (0x3f<<24)
+#define DSPFW_HPLL_CURSOR_SHIFT 16
+#define DSPFW_HPLL_CURSOR_MASK (0x3f<<16)
+#define DSPFW_HPLL_SR_MASK (0x1ff)
+
+/* FIFO watermark sizes etc */
+#define G4X_FIFO_LINE_SIZE 64
+#define I915_FIFO_LINE_SIZE 64
+#define I830_FIFO_LINE_SIZE 32
+
+#define G4X_FIFO_SIZE 127
+#define I965_FIFO_SIZE 512
+#define I945_FIFO_SIZE 127
+#define I915_FIFO_SIZE 95
+#define I855GM_FIFO_SIZE 127 /* In cachelines */
+#define I830_FIFO_SIZE 95
+
+#define G4X_MAX_WM 0x3f
+#define I915_MAX_WM 0x3f
+
+#define PINEVIEW_DISPLAY_FIFO 512 /* in 64byte unit */
+#define PINEVIEW_FIFO_LINE_SIZE 64
+#define PINEVIEW_MAX_WM 0x1ff
+#define PINEVIEW_DFT_WM 0x3f
+#define PINEVIEW_DFT_HPLLOFF_WM 0
+#define PINEVIEW_GUARD_WM 10
+#define PINEVIEW_CURSOR_FIFO 64
+#define PINEVIEW_CURSOR_MAX_WM 0x3f
+#define PINEVIEW_CURSOR_DFT_WM 0
+#define PINEVIEW_CURSOR_GUARD_WM 5
+
+#define I965_CURSOR_FIFO 64
+#define I965_CURSOR_MAX_WM 32
+#define I965_CURSOR_DFT_WM 8
+
+/* define the Watermark register on Ironlake */
+#define WM0_PIPEA_ILK 0x45100
+#define WM0_PIPE_PLANE_MASK (0x7f<<16)
+#define WM0_PIPE_PLANE_SHIFT 16
+#define WM0_PIPE_SPRITE_MASK (0x3f<<8)
+#define WM0_PIPE_SPRITE_SHIFT 8
+#define WM0_PIPE_CURSOR_MASK (0x1f)
+
+#define WM0_PIPEB_ILK 0x45104
+#define WM0_PIPEC_IVB 0x45200
+#define WM1_LP_ILK 0x45108
+#define WM1_LP_SR_EN (1<<31)
+#define WM1_LP_LATENCY_SHIFT 24
+#define WM1_LP_LATENCY_MASK (0x7f<<24)
+#define WM1_LP_FBC_MASK (0xf<<20)
+#define WM1_LP_FBC_SHIFT 20
+#define WM1_LP_SR_MASK (0x1ff<<8)
+#define WM1_LP_SR_SHIFT 8
+#define WM1_LP_CURSOR_MASK (0x3f)
+#define WM2_LP_ILK 0x4510c
+#define WM2_LP_EN (1<<31)
+#define WM3_LP_ILK 0x45110
+#define WM3_LP_EN (1<<31)
+#define WM1S_LP_ILK 0x45120
+#define WM2S_LP_IVB 0x45124
+#define WM3S_LP_IVB 0x45128
+#define WM1S_LP_EN (1<<31)
+
+/* Memory latency timer register */
+#define MLTR_ILK 0x11222
+#define MLTR_WM1_SHIFT 0
+#define MLTR_WM2_SHIFT 8
+/* the unit of memory self-refresh latency time is 0.5us */
+#define ILK_SRLT_MASK 0x3f
+#define ILK_LATENCY(shift) (I915_READ(MLTR_ILK) >> (shift) & ILK_SRLT_MASK)
+#define ILK_READ_WM1_LATENCY() ILK_LATENCY(MLTR_WM1_SHIFT)
+#define ILK_READ_WM2_LATENCY() ILK_LATENCY(MLTR_WM2_SHIFT)
+
+/* define the fifo size on Ironlake */
+#define ILK_DISPLAY_FIFO 128
+#define ILK_DISPLAY_MAXWM 64
+#define ILK_DISPLAY_DFTWM 8
+#define ILK_CURSOR_FIFO 32
+#define ILK_CURSOR_MAXWM 16
+#define ILK_CURSOR_DFTWM 8
+
+#define ILK_DISPLAY_SR_FIFO 512
+#define ILK_DISPLAY_MAX_SRWM 0x1ff
+#define ILK_DISPLAY_DFT_SRWM 0x3f
+#define ILK_CURSOR_SR_FIFO 64
+#define ILK_CURSOR_MAX_SRWM 0x3f
+#define ILK_CURSOR_DFT_SRWM 8
+
+#define ILK_FIFO_LINE_SIZE 64
+
+/* define the WM info on Sandybridge */
+#define SNB_DISPLAY_FIFO 128
+#define SNB_DISPLAY_MAXWM 0x7f /* bit 16:22 */
+#define SNB_DISPLAY_DFTWM 8
+#define SNB_CURSOR_FIFO 32
+#define SNB_CURSOR_MAXWM 0x1f /* bit 4:0 */
+#define SNB_CURSOR_DFTWM 8
+
+#define SNB_DISPLAY_SR_FIFO 512
+#define SNB_DISPLAY_MAX_SRWM 0x1ff /* bit 16:8 */
+#define SNB_DISPLAY_DFT_SRWM 0x3f
+#define SNB_CURSOR_SR_FIFO 64
+#define SNB_CURSOR_MAX_SRWM 0x3f /* bit 5:0 */
+#define SNB_CURSOR_DFT_SRWM 8
+
+#define SNB_FBC_MAX_SRWM 0xf /* bit 23:20 */
+
+#define SNB_FIFO_LINE_SIZE 64
+
+
+/* the address where we get all kinds of latency value */
+#define SSKPD 0x5d10
+#define SSKPD_WM_MASK 0x3f
+#define SSKPD_WM0_SHIFT 0
+#define SSKPD_WM1_SHIFT 8
+#define SSKPD_WM2_SHIFT 16
+#define SSKPD_WM3_SHIFT 24
+
+#define SNB_LATENCY(shift) (I915_READ(MCHBAR_MIRROR_BASE_SNB + SSKPD) >> (shift) & SSKPD_WM_MASK)
+#define SNB_READ_WM0_LATENCY() SNB_LATENCY(SSKPD_WM0_SHIFT)
+#define SNB_READ_WM1_LATENCY() SNB_LATENCY(SSKPD_WM1_SHIFT)
+#define SNB_READ_WM2_LATENCY() SNB_LATENCY(SSKPD_WM2_SHIFT)
+#define SNB_READ_WM3_LATENCY() SNB_LATENCY(SSKPD_WM3_SHIFT)
+
+/*
+ * The two pipe frame counter registers are not synchronized, so
+ * reading a stable value is somewhat tricky. The following code
+ * should work:
+ *
+ * do {
+ * high1 = ((INREG(PIPEAFRAMEHIGH) & PIPE_FRAME_HIGH_MASK) >>
+ * PIPE_FRAME_HIGH_SHIFT;
+ * low1 = ((INREG(PIPEAFRAMEPIXEL) & PIPE_FRAME_LOW_MASK) >>
+ * PIPE_FRAME_LOW_SHIFT);
+ * high2 = ((INREG(PIPEAFRAMEHIGH) & PIPE_FRAME_HIGH_MASK) >>
+ * PIPE_FRAME_HIGH_SHIFT);
+ * } while (high1 != high2);
+ * frame = (high1 << 8) | low1;
+ */
+#define _PIPEAFRAMEHIGH 0x70040
+#define PIPE_FRAME_HIGH_MASK 0x0000ffff
+#define PIPE_FRAME_HIGH_SHIFT 0
+#define _PIPEAFRAMEPIXEL 0x70044
+#define PIPE_FRAME_LOW_MASK 0xff000000
+#define PIPE_FRAME_LOW_SHIFT 24
+#define PIPE_PIXEL_MASK 0x00ffffff
+#define PIPE_PIXEL_SHIFT 0
+/* GM45+ just has to be different */
+#define _PIPEA_FRMCOUNT_GM45 0x70040
+#define _PIPEA_FLIPCOUNT_GM45 0x70044
+#define PIPE_FRMCOUNT_GM45(pipe) _PIPE(pipe, _PIPEA_FRMCOUNT_GM45, _PIPEB_FRMCOUNT_GM45)
+
+/* Cursor A & B regs */
+#define _CURACNTR 0x70080
+/* Old style CUR*CNTR flags (desktop 8xx) */
+#define CURSOR_ENABLE 0x80000000
+#define CURSOR_GAMMA_ENABLE 0x40000000
+#define CURSOR_STRIDE_MASK 0x30000000
+#define CURSOR_FORMAT_SHIFT 24
+#define CURSOR_FORMAT_MASK (0x07 << CURSOR_FORMAT_SHIFT)
+#define CURSOR_FORMAT_2C (0x00 << CURSOR_FORMAT_SHIFT)
+#define CURSOR_FORMAT_3C (0x01 << CURSOR_FORMAT_SHIFT)
+#define CURSOR_FORMAT_4C (0x02 << CURSOR_FORMAT_SHIFT)
+#define CURSOR_FORMAT_ARGB (0x04 << CURSOR_FORMAT_SHIFT)
+#define CURSOR_FORMAT_XRGB (0x05 << CURSOR_FORMAT_SHIFT)
+/* New style CUR*CNTR flags */
+#define CURSOR_MODE 0x27
+#define CURSOR_MODE_DISABLE 0x00
+#define CURSOR_MODE_64_32B_AX 0x07
+#define CURSOR_MODE_64_ARGB_AX ((1 << 5) | CURSOR_MODE_64_32B_AX)
+#define MCURSOR_PIPE_SELECT (1 << 28)
+#define MCURSOR_PIPE_A 0x00
+#define MCURSOR_PIPE_B (1 << 28)
+#define MCURSOR_GAMMA_ENABLE (1 << 26)
+#define _CURABASE 0x70084
+#define _CURAPOS 0x70088
+#define CURSOR_POS_MASK 0x007FF
+#define CURSOR_POS_SIGN 0x8000
+#define CURSOR_X_SHIFT 0
+#define CURSOR_Y_SHIFT 16
+#define CURSIZE 0x700a0
+#define _CURBCNTR 0x700c0
+#define _CURBBASE 0x700c4
+#define _CURBPOS 0x700c8
+
+#define _CURBCNTR_IVB 0x71080
+#define _CURBBASE_IVB 0x71084
+#define _CURBPOS_IVB 0x71088
+
+#define CURCNTR(pipe) _PIPE(pipe, _CURACNTR, _CURBCNTR)
+#define CURBASE(pipe) _PIPE(pipe, _CURABASE, _CURBBASE)
+#define CURPOS(pipe) _PIPE(pipe, _CURAPOS, _CURBPOS)
+
+#define CURCNTR_IVB(pipe) _PIPE(pipe, _CURACNTR, _CURBCNTR_IVB)
+#define CURBASE_IVB(pipe) _PIPE(pipe, _CURABASE, _CURBBASE_IVB)
+#define CURPOS_IVB(pipe) _PIPE(pipe, _CURAPOS, _CURBPOS_IVB)
+
+/* Display A control */
+#define _DSPACNTR 0x70180
+#define DISPLAY_PLANE_ENABLE (1<<31)
+#define DISPLAY_PLANE_DISABLE 0
+#define DISPPLANE_GAMMA_ENABLE (1<<30)
+#define DISPPLANE_GAMMA_DISABLE 0
+#define DISPPLANE_PIXFORMAT_MASK (0xf<<26)
+#define DISPPLANE_8BPP (0x2<<26)
+#define DISPPLANE_15_16BPP (0x4<<26)
+#define DISPPLANE_16BPP (0x5<<26)
+#define DISPPLANE_32BPP_NO_ALPHA (0x6<<26)
+#define DISPPLANE_32BPP (0x7<<26)
+#define DISPPLANE_32BPP_30BIT_NO_ALPHA (0xa<<26)
+#define DISPPLANE_STEREO_ENABLE (1<<25)
+#define DISPPLANE_STEREO_DISABLE 0
+#define DISPPLANE_SEL_PIPE_SHIFT 24
+#define DISPPLANE_SEL_PIPE_MASK (3<<DISPPLANE_SEL_PIPE_SHIFT)
+#define DISPPLANE_SEL_PIPE_A 0
+#define DISPPLANE_SEL_PIPE_B (1<<DISPPLANE_SEL_PIPE_SHIFT)
+#define DISPPLANE_SRC_KEY_ENABLE (1<<22)
+#define DISPPLANE_SRC_KEY_DISABLE 0
+#define DISPPLANE_LINE_DOUBLE (1<<20)
+#define DISPPLANE_NO_LINE_DOUBLE 0
+#define DISPPLANE_STEREO_POLARITY_FIRST 0
+#define DISPPLANE_STEREO_POLARITY_SECOND (1<<18)
+#define DISPPLANE_TRICKLE_FEED_DISABLE (1<<14) /* Ironlake */
+#define DISPPLANE_TILED (1<<10)
+#define _DSPAADDR 0x70184
+#define _DSPASTRIDE 0x70188
+#define _DSPAPOS 0x7018C /* reserved */
+#define _DSPASIZE 0x70190
+#define _DSPASURF 0x7019C /* 965+ only */
+#define _DSPATILEOFF 0x701A4 /* 965+ only */
+
+#define DSPCNTR(plane) _PIPE(plane, _DSPACNTR, _DSPBCNTR)
+#define DSPADDR(plane) _PIPE(plane, _DSPAADDR, _DSPBADDR)
+#define DSPSTRIDE(plane) _PIPE(plane, _DSPASTRIDE, _DSPBSTRIDE)
+#define DSPPOS(plane) _PIPE(plane, _DSPAPOS, _DSPBPOS)
+#define DSPSIZE(plane) _PIPE(plane, _DSPASIZE, _DSPBSIZE)
+#define DSPSURF(plane) _PIPE(plane, _DSPASURF, _DSPBSURF)
+#define DSPTILEOFF(plane) _PIPE(plane, _DSPATILEOFF, _DSPBTILEOFF)
+
+/* VBIOS flags */
+#define SWF00 0x71410
+#define SWF01 0x71414
+#define SWF02 0x71418
+#define SWF03 0x7141c
+#define SWF04 0x71420
+#define SWF05 0x71424
+#define SWF06 0x71428
+#define SWF10 0x70410
+#define SWF11 0x70414
+#define SWF14 0x71420
+#define SWF30 0x72414
+#define SWF31 0x72418
+#define SWF32 0x7241c
+
+/* Pipe B */
+#define _PIPEBDSL 0x71000
+#define _PIPEBCONF 0x71008
+#define _PIPEBSTAT 0x71024
+#define _PIPEBFRAMEHIGH 0x71040
+#define _PIPEBFRAMEPIXEL 0x71044
+#define _PIPEB_FRMCOUNT_GM45 0x71040
+#define _PIPEB_FLIPCOUNT_GM45 0x71044
+
+
+/* Display B control */
+#define _DSPBCNTR 0x71180
+#define DISPPLANE_ALPHA_TRANS_ENABLE (1<<15)
+#define DISPPLANE_ALPHA_TRANS_DISABLE 0
+#define DISPPLANE_SPRITE_ABOVE_DISPLAY 0
+#define DISPPLANE_SPRITE_ABOVE_OVERLAY (1)
+#define _DSPBADDR 0x71184
+#define _DSPBSTRIDE 0x71188
+#define _DSPBPOS 0x7118C
+#define _DSPBSIZE 0x71190
+#define _DSPBSURF 0x7119C
+#define _DSPBTILEOFF 0x711A4
+
+/* Sprite A control */
+#define _DVSACNTR 0x72180
+#define DVS_ENABLE (1<<31)
+#define DVS_GAMMA_ENABLE (1<<30)
+#define DVS_PIXFORMAT_MASK (3<<25)
+#define DVS_FORMAT_YUV422 (0<<25)
+#define DVS_FORMAT_RGBX101010 (1<<25)
+#define DVS_FORMAT_RGBX888 (2<<25)
+#define DVS_FORMAT_RGBX161616 (3<<25)
+#define DVS_SOURCE_KEY (1<<22)
+#define DVS_RGB_ORDER_XBGR (1<<20)
+#define DVS_YUV_BYTE_ORDER_MASK (3<<16)
+#define DVS_YUV_ORDER_YUYV (0<<16)
+#define DVS_YUV_ORDER_UYVY (1<<16)
+#define DVS_YUV_ORDER_YVYU (2<<16)
+#define DVS_YUV_ORDER_VYUY (3<<16)
+#define DVS_DEST_KEY (1<<2)
+#define DVS_TRICKLE_FEED_DISABLE (1<<14)
+#define DVS_TILED (1<<10)
+#define _DVSALINOFF 0x72184
+#define _DVSASTRIDE 0x72188
+#define _DVSAPOS 0x7218c
+#define _DVSASIZE 0x72190
+#define _DVSAKEYVAL 0x72194
+#define _DVSAKEYMSK 0x72198
+#define _DVSASURF 0x7219c
+#define _DVSAKEYMAXVAL 0x721a0
+#define _DVSATILEOFF 0x721a4
+#define _DVSASURFLIVE 0x721ac
+#define _DVSASCALE 0x72204
+#define DVS_SCALE_ENABLE (1<<31)
+#define DVS_FILTER_MASK (3<<29)
+#define DVS_FILTER_MEDIUM (0<<29)
+#define DVS_FILTER_ENHANCING (1<<29)
+#define DVS_FILTER_SOFTENING (2<<29)
+#define DVS_VERTICAL_OFFSET_HALF (1<<28) /* must be enabled below */
+#define DVS_VERTICAL_OFFSET_ENABLE (1<<27)
+#define _DVSAGAMC 0x72300
+
+#define _DVSBCNTR 0x73180
+#define _DVSBLINOFF 0x73184
+#define _DVSBSTRIDE 0x73188
+#define _DVSBPOS 0x7318c
+#define _DVSBSIZE 0x73190
+#define _DVSBKEYVAL 0x73194
+#define _DVSBKEYMSK 0x73198
+#define _DVSBSURF 0x7319c
+#define _DVSBKEYMAXVAL 0x731a0
+#define _DVSBTILEOFF 0x731a4
+#define _DVSBSURFLIVE 0x731ac
+#define _DVSBSCALE 0x73204
+#define _DVSBGAMC 0x73300
+
+#define DVSCNTR(pipe) _PIPE(pipe, _DVSACNTR, _DVSBCNTR)
+#define DVSLINOFF(pipe) _PIPE(pipe, _DVSALINOFF, _DVSBLINOFF)
+#define DVSSTRIDE(pipe) _PIPE(pipe, _DVSASTRIDE, _DVSBSTRIDE)
+#define DVSPOS(pipe) _PIPE(pipe, _DVSAPOS, _DVSBPOS)
+#define DVSSURF(pipe) _PIPE(pipe, _DVSASURF, _DVSBSURF)
+#define DVSKEYMAX(pipe) _PIPE(pipe, _DVSAKEYMAXVAL, _DVSBKEYMAXVAL)
+#define DVSSIZE(pipe) _PIPE(pipe, _DVSASIZE, _DVSBSIZE)
+#define DVSSCALE(pipe) _PIPE(pipe, _DVSASCALE, _DVSBSCALE)
+#define DVSTILEOFF(pipe) _PIPE(pipe, _DVSATILEOFF, _DVSBTILEOFF)
+#define DVSKEYVAL(pipe) _PIPE(pipe, _DVSAKEYVAL, _DVSBKEYVAL)
+#define DVSKEYMSK(pipe) _PIPE(pipe, _DVSAKEYMSK, _DVSBKEYMSK)
+
+#define _SPRA_CTL 0x70280
+#define SPRITE_ENABLE (1<<31)
+#define SPRITE_GAMMA_ENABLE (1<<30)
+#define SPRITE_PIXFORMAT_MASK (7<<25)
+#define SPRITE_FORMAT_YUV422 (0<<25)
+#define SPRITE_FORMAT_RGBX101010 (1<<25)
+#define SPRITE_FORMAT_RGBX888 (2<<25)
+#define SPRITE_FORMAT_RGBX161616 (3<<25)
+#define SPRITE_FORMAT_YUV444 (4<<25)
+#define SPRITE_FORMAT_XR_BGR101010 (5<<25) /* Extended range */
+#define SPRITE_CSC_ENABLE (1<<24)
+#define SPRITE_SOURCE_KEY (1<<22)
+#define SPRITE_RGB_ORDER_RGBX (1<<20) /* only for 888 and 161616 */
+#define SPRITE_YUV_TO_RGB_CSC_DISABLE (1<<19)
+#define SPRITE_YUV_CSC_FORMAT_BT709 (1<<18) /* 0 is BT601 */
+#define SPRITE_YUV_BYTE_ORDER_MASK (3<<16)
+#define SPRITE_YUV_ORDER_YUYV (0<<16)
+#define SPRITE_YUV_ORDER_UYVY (1<<16)
+#define SPRITE_YUV_ORDER_YVYU (2<<16)
+#define SPRITE_YUV_ORDER_VYUY (3<<16)
+#define SPRITE_TRICKLE_FEED_DISABLE (1<<14)
+#define SPRITE_INT_GAMMA_ENABLE (1<<13)
+#define SPRITE_TILED (1<<10)
+#define SPRITE_DEST_KEY (1<<2)
+#define _SPRA_LINOFF 0x70284
+#define _SPRA_STRIDE 0x70288
+#define _SPRA_POS 0x7028c
+#define _SPRA_SIZE 0x70290
+#define _SPRA_KEYVAL 0x70294
+#define _SPRA_KEYMSK 0x70298
+#define _SPRA_SURF 0x7029c
+#define _SPRA_KEYMAX 0x702a0
+#define _SPRA_TILEOFF 0x702a4
+#define _SPRA_SCALE 0x70304
+#define SPRITE_SCALE_ENABLE (1<<31)
+#define SPRITE_FILTER_MASK (3<<29)
+#define SPRITE_FILTER_MEDIUM (0<<29)
+#define SPRITE_FILTER_ENHANCING (1<<29)
+#define SPRITE_FILTER_SOFTENING (2<<29)
+#define SPRITE_VERTICAL_OFFSET_HALF (1<<28) /* must be enabled below */
+#define SPRITE_VERTICAL_OFFSET_ENABLE (1<<27)
+#define _SPRA_GAMC 0x70400
+
+#define _SPRB_CTL 0x71280
+#define _SPRB_LINOFF 0x71284
+#define _SPRB_STRIDE 0x71288
+#define _SPRB_POS 0x7128c
+#define _SPRB_SIZE 0x71290
+#define _SPRB_KEYVAL 0x71294
+#define _SPRB_KEYMSK 0x71298
+#define _SPRB_SURF 0x7129c
+#define _SPRB_KEYMAX 0x712a0
+#define _SPRB_TILEOFF 0x712a4
+#define _SPRB_SCALE 0x71304
+#define _SPRB_GAMC 0x71400
+
+#define SPRCTL(pipe) _PIPE(pipe, _SPRA_CTL, _SPRB_CTL)
+#define SPRLINOFF(pipe) _PIPE(pipe, _SPRA_LINOFF, _SPRB_LINOFF)
+#define SPRSTRIDE(pipe) _PIPE(pipe, _SPRA_STRIDE, _SPRB_STRIDE)
+#define SPRPOS(pipe) _PIPE(pipe, _SPRA_POS, _SPRB_POS)
+#define SPRSIZE(pipe) _PIPE(pipe, _SPRA_SIZE, _SPRB_SIZE)
+#define SPRKEYVAL(pipe) _PIPE(pipe, _SPRA_KEYVAL, _SPRB_KEYVAL)
+#define SPRKEYMSK(pipe) _PIPE(pipe, _SPRA_KEYMSK, _SPRB_KEYMSK)
+#define SPRSURF(pipe) _PIPE(pipe, _SPRA_SURF, _SPRB_SURF)
+#define SPRKEYMAX(pipe) _PIPE(pipe, _SPRA_KEYMAX, _SPRB_KEYMAX)
+#define SPRTILEOFF(pipe) _PIPE(pipe, _SPRA_TILEOFF, _SPRB_TILEOFF)
+#define SPRSCALE(pipe) _PIPE(pipe, _SPRA_SCALE, _SPRB_SCALE)
+#define SPRGAMC(pipe) _PIPE(pipe, _SPRA_GAMC, _SPRB_GAMC)
+
+/* VBIOS regs */
+#define VGACNTRL 0x71400
+# define VGA_DISP_DISABLE (1 << 31)
+# define VGA_2X_MODE (1 << 30)
+# define VGA_PIPE_B_SELECT (1 << 29)
+
+/* Ironlake */
+
+#define CPU_VGACNTRL 0x41000
+
+#define DIGITAL_PORT_HOTPLUG_CNTRL 0x44030
+#define DIGITAL_PORTA_HOTPLUG_ENABLE (1 << 4)
+#define DIGITAL_PORTA_SHORT_PULSE_2MS (0 << 2)
+#define DIGITAL_PORTA_SHORT_PULSE_4_5MS (1 << 2)
+#define DIGITAL_PORTA_SHORT_PULSE_6MS (2 << 2)
+#define DIGITAL_PORTA_SHORT_PULSE_100MS (3 << 2)
+#define DIGITAL_PORTA_NO_DETECT (0 << 0)
+#define DIGITAL_PORTA_LONG_PULSE_DETECT_MASK (1 << 1)
+#define DIGITAL_PORTA_SHORT_PULSE_DETECT_MASK (1 << 0)
+
+/* refresh rate hardware control */
+#define RR_HW_CTL 0x45300
+#define RR_HW_LOW_POWER_FRAMES_MASK 0xff
+#define RR_HW_HIGH_POWER_FRAMES_MASK 0xff00
+
+#define FDI_PLL_BIOS_0 0x46000
+#define FDI_PLL_FB_CLOCK_MASK 0xff
+#define FDI_PLL_BIOS_1 0x46004
+#define FDI_PLL_BIOS_2 0x46008
+#define DISPLAY_PORT_PLL_BIOS_0 0x4600c
+#define DISPLAY_PORT_PLL_BIOS_1 0x46010
+#define DISPLAY_PORT_PLL_BIOS_2 0x46014
+
+#define PCH_DSPCLK_GATE_D 0x42020
+# define DPFCUNIT_CLOCK_GATE_DISABLE (1 << 9)
+# define DPFCRUNIT_CLOCK_GATE_DISABLE (1 << 8)
+# define DPFDUNIT_CLOCK_GATE_DISABLE (1 << 7)
+# define DPARBUNIT_CLOCK_GATE_DISABLE (1 << 5)
+
+#define PCH_3DCGDIS0 0x46020
+# define MARIUNIT_CLOCK_GATE_DISABLE (1 << 18)
+# define SVSMUNIT_CLOCK_GATE_DISABLE (1 << 1)
+
+#define PCH_3DCGDIS1 0x46024
+# define VFMUNIT_CLOCK_GATE_DISABLE (1 << 11)
+
+#define FDI_PLL_FREQ_CTL 0x46030
+#define FDI_PLL_FREQ_CHANGE_REQUEST (1<<24)
+#define FDI_PLL_FREQ_LOCK_LIMIT_MASK 0xfff00
+#define FDI_PLL_FREQ_DISABLE_COUNT_LIMIT_MASK 0xff
+
+
+#define _PIPEA_DATA_M1 0x60030
+#define TU_SIZE(x) (((x)-1) << 25) /* default size 64 */
+#define TU_SIZE_MASK 0x7e000000
+#define PIPE_DATA_M1_OFFSET 0
+#define _PIPEA_DATA_N1 0x60034
+#define PIPE_DATA_N1_OFFSET 0
+
+#define _PIPEA_DATA_M2 0x60038
+#define PIPE_DATA_M2_OFFSET 0
+#define _PIPEA_DATA_N2 0x6003c
+#define PIPE_DATA_N2_OFFSET 0
+
+#define _PIPEA_LINK_M1 0x60040
+#define PIPE_LINK_M1_OFFSET 0
+#define _PIPEA_LINK_N1 0x60044
+#define PIPE_LINK_N1_OFFSET 0
+
+#define _PIPEA_LINK_M2 0x60048
+#define PIPE_LINK_M2_OFFSET 0
+#define _PIPEA_LINK_N2 0x6004c
+#define PIPE_LINK_N2_OFFSET 0
+
+/* PIPEB timing regs are same start from 0x61000 */
+
+#define _PIPEB_DATA_M1 0x61030
+#define _PIPEB_DATA_N1 0x61034
+
+#define _PIPEB_DATA_M2 0x61038
+#define _PIPEB_DATA_N2 0x6103c
+
+#define _PIPEB_LINK_M1 0x61040
+#define _PIPEB_LINK_N1 0x61044
+
+#define _PIPEB_LINK_M2 0x61048
+#define _PIPEB_LINK_N2 0x6104c
+
+#define PIPE_DATA_M1(pipe) _PIPE(pipe, _PIPEA_DATA_M1, _PIPEB_DATA_M1)
+#define PIPE_DATA_N1(pipe) _PIPE(pipe, _PIPEA_DATA_N1, _PIPEB_DATA_N1)
+#define PIPE_DATA_M2(pipe) _PIPE(pipe, _PIPEA_DATA_M2, _PIPEB_DATA_M2)
+#define PIPE_DATA_N2(pipe) _PIPE(pipe, _PIPEA_DATA_N2, _PIPEB_DATA_N2)
+#define PIPE_LINK_M1(pipe) _PIPE(pipe, _PIPEA_LINK_M1, _PIPEB_LINK_M1)
+#define PIPE_LINK_N1(pipe) _PIPE(pipe, _PIPEA_LINK_N1, _PIPEB_LINK_N1)
+#define PIPE_LINK_M2(pipe) _PIPE(pipe, _PIPEA_LINK_M2, _PIPEB_LINK_M2)
+#define PIPE_LINK_N2(pipe) _PIPE(pipe, _PIPEA_LINK_N2, _PIPEB_LINK_N2)
+
+/* CPU panel fitter */
+/* IVB+ has 3 fitters, 0 is 7x5 capable, the other two only 3x3 */
+#define _PFA_CTL_1 0x68080
+#define _PFB_CTL_1 0x68880
+#define PF_ENABLE (1<<31)
+#define PF_FILTER_MASK (3<<23)
+#define PF_FILTER_PROGRAMMED (0<<23)
+#define PF_FILTER_MED_3x3 (1<<23)
+#define PF_FILTER_EDGE_ENHANCE (2<<23)
+#define PF_FILTER_EDGE_SOFTEN (3<<23)
+#define _PFA_WIN_SZ 0x68074
+#define _PFB_WIN_SZ 0x68874
+#define _PFA_WIN_POS 0x68070
+#define _PFB_WIN_POS 0x68870
+#define _PFA_VSCALE 0x68084
+#define _PFB_VSCALE 0x68884
+#define _PFA_HSCALE 0x68090
+#define _PFB_HSCALE 0x68890
+
+#define PF_CTL(pipe) _PIPE(pipe, _PFA_CTL_1, _PFB_CTL_1)
+#define PF_WIN_SZ(pipe) _PIPE(pipe, _PFA_WIN_SZ, _PFB_WIN_SZ)
+#define PF_WIN_POS(pipe) _PIPE(pipe, _PFA_WIN_POS, _PFB_WIN_POS)
+#define PF_VSCALE(pipe) _PIPE(pipe, _PFA_VSCALE, _PFB_VSCALE)
+#define PF_HSCALE(pipe) _PIPE(pipe, _PFA_HSCALE, _PFB_HSCALE)
+
+/* legacy palette */
+#define _LGC_PALETTE_A 0x4a000
+#define _LGC_PALETTE_B 0x4a800
+#define LGC_PALETTE(pipe) _PIPE(pipe, _LGC_PALETTE_A, _LGC_PALETTE_B)
+
+/* interrupts */
+#define DE_MASTER_IRQ_CONTROL (1 << 31)
+#define DE_SPRITEB_FLIP_DONE (1 << 29)
+#define DE_SPRITEA_FLIP_DONE (1 << 28)
+#define DE_PLANEB_FLIP_DONE (1 << 27)
+#define DE_PLANEA_FLIP_DONE (1 << 26)
+#define DE_PCU_EVENT (1 << 25)
+#define DE_GTT_FAULT (1 << 24)
+#define DE_POISON (1 << 23)
+#define DE_PERFORM_COUNTER (1 << 22)
+#define DE_PCH_EVENT (1 << 21)
+#define DE_AUX_CHANNEL_A (1 << 20)
+#define DE_DP_A_HOTPLUG (1 << 19)
+#define DE_GSE (1 << 18)
+#define DE_PIPEB_VBLANK (1 << 15)
+#define DE_PIPEB_EVEN_FIELD (1 << 14)
+#define DE_PIPEB_ODD_FIELD (1 << 13)
+#define DE_PIPEB_LINE_COMPARE (1 << 12)
+#define DE_PIPEB_VSYNC (1 << 11)
+#define DE_PIPEB_FIFO_UNDERRUN (1 << 8)
+#define DE_PIPEA_VBLANK (1 << 7)
+#define DE_PIPEA_EVEN_FIELD (1 << 6)
+#define DE_PIPEA_ODD_FIELD (1 << 5)
+#define DE_PIPEA_LINE_COMPARE (1 << 4)
+#define DE_PIPEA_VSYNC (1 << 3)
+#define DE_PIPEA_FIFO_UNDERRUN (1 << 0)
+
+/* More Ivybridge lolz */
+#define DE_ERR_DEBUG_IVB (1<<30)
+#define DE_GSE_IVB (1<<29)
+#define DE_PCH_EVENT_IVB (1<<28)
+#define DE_DP_A_HOTPLUG_IVB (1<<27)
+#define DE_AUX_CHANNEL_A_IVB (1<<26)
+#define DE_SPRITEB_FLIP_DONE_IVB (1<<9)
+#define DE_SPRITEA_FLIP_DONE_IVB (1<<4)
+#define DE_PLANEB_FLIP_DONE_IVB (1<<8)
+#define DE_PLANEA_FLIP_DONE_IVB (1<<3)
+#define DE_PIPEB_VBLANK_IVB (1<<5)
+#define DE_PIPEA_VBLANK_IVB (1<<0)
+
+#define DEISR 0x44000
+#define DEIMR 0x44004
+#define DEIIR 0x44008
+#define DEIER 0x4400c
+
+/* GT interrupt */
+#define GT_PIPE_NOTIFY (1 << 4)
+#define GT_RENDER_CS_ERROR (1 << 3)
+#define GT_SYNC_STATUS (1 << 2)
+#define GT_USER_INTERRUPT (1 << 0)
+#define GT_BSD_USER_INTERRUPT (1 << 5)
+#define GT_GEN6_BSD_USER_INTERRUPT (1 << 12)
+#define GT_BLT_USER_INTERRUPT (1 << 22)
+
+#define GTISR 0x44010
+#define GTIMR 0x44014
+#define GTIIR 0x44018
+#define GTIER 0x4401c
+
+#define ILK_DISPLAY_CHICKEN2 0x42004
+/* Required on all Ironlake and Sandybridge according to the B-Spec. */
+#define ILK_ELPIN_409_SELECT (1 << 25)
+#define ILK_DPARB_GATE (1<<22)
+#define ILK_VSDPFD_FULL (1<<21)
+#define ILK_DISPLAY_CHICKEN_FUSES 0x42014
+#define ILK_INTERNAL_GRAPHICS_DISABLE (1<<31)
+#define ILK_INTERNAL_DISPLAY_DISABLE (1<<30)
+#define ILK_DISPLAY_DEBUG_DISABLE (1<<29)
+#define ILK_HDCP_DISABLE (1<<25)
+#define ILK_eDP_A_DISABLE (1<<24)
+#define ILK_DESKTOP (1<<23)
+#define ILK_DSPCLK_GATE 0x42020
+#define IVB_VRHUNIT_CLK_GATE (1<<28)
+#define ILK_DPARB_CLK_GATE (1<<5)
+#define ILK_DPFD_CLK_GATE (1<<7)
+
+/* According to spec this bit 7/8/9 of 0x42020 should be set to enable FBC */
+#define ILK_CLK_FBC (1<<7)
+#define ILK_DPFC_DIS1 (1<<8)
+#define ILK_DPFC_DIS2 (1<<9)
+
+#define IVB_CHICKEN3 0x4200c
+# define CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE (1 << 5)
+# define CHICKEN3_DGMG_DONE_FIX_DISABLE (1 << 2)
+
+#define DISP_ARB_CTL 0x45000
+#define DISP_TILE_SURFACE_SWIZZLING (1<<13)
+#define DISP_FBC_WM_DIS (1<<15)
+
+/* GEN7 chicken */
+#define GEN7_COMMON_SLICE_CHICKEN1 0x7010
+# define GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC ((1<<10) | (1<<26))
+
+#define GEN7_L3CNTLREG1 0xB01C
+#define GEN7_WA_FOR_GEN7_L3_CONTROL 0x3C4FFF8C
+
+#define GEN7_L3_CHICKEN_MODE_REGISTER 0xB030
+#define GEN7_WA_L3_CHICKEN_MODE 0x20000000
+
+/* WaCatErrorRejectionIssue */
+#define GEN7_SQ_CHICKEN_MBCUNIT_CONFIG 0x9030
+#define GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB (1<<11)
+
+/* PCH */
+
+/* south display engine interrupt */
+#define SDE_AUDIO_POWER_D (1 << 27)
+#define SDE_AUDIO_POWER_C (1 << 26)
+#define SDE_AUDIO_POWER_B (1 << 25)
+#define SDE_AUDIO_POWER_SHIFT (25)
+#define SDE_AUDIO_POWER_MASK (7 << SDE_AUDIO_POWER_SHIFT)
+#define SDE_GMBUS (1 << 24)
+#define SDE_AUDIO_HDCP_TRANSB (1 << 23)
+#define SDE_AUDIO_HDCP_TRANSA (1 << 22)
+#define SDE_AUDIO_HDCP_MASK (3 << 22)
+#define SDE_AUDIO_TRANSB (1 << 21)
+#define SDE_AUDIO_TRANSA (1 << 20)
+#define SDE_AUDIO_TRANS_MASK (3 << 20)
+#define SDE_POISON (1 << 19)
+/* 18 reserved */
+#define SDE_FDI_RXB (1 << 17)
+#define SDE_FDI_RXA (1 << 16)
+#define SDE_FDI_MASK (3 << 16)
+#define SDE_AUXD (1 << 15)
+#define SDE_AUXC (1 << 14)
+#define SDE_AUXB (1 << 13)
+#define SDE_AUX_MASK (7 << 13)
+/* 12 reserved */
+#define SDE_CRT_HOTPLUG (1 << 11)
+#define SDE_PORTD_HOTPLUG (1 << 10)
+#define SDE_PORTC_HOTPLUG (1 << 9)
+#define SDE_PORTB_HOTPLUG (1 << 8)
+#define SDE_SDVOB_HOTPLUG (1 << 6)
+#define SDE_HOTPLUG_MASK (0xf << 8)
+#define SDE_TRANSB_CRC_DONE (1 << 5)
+#define SDE_TRANSB_CRC_ERR (1 << 4)
+#define SDE_TRANSB_FIFO_UNDER (1 << 3)
+#define SDE_TRANSA_CRC_DONE (1 << 2)
+#define SDE_TRANSA_CRC_ERR (1 << 1)
+#define SDE_TRANSA_FIFO_UNDER (1 << 0)
+#define SDE_TRANS_MASK (0x3f)
+/* CPT */
+#define SDE_CRT_HOTPLUG_CPT (1 << 19)
+#define SDE_PORTD_HOTPLUG_CPT (1 << 23)
+#define SDE_PORTC_HOTPLUG_CPT (1 << 22)
+#define SDE_PORTB_HOTPLUG_CPT (1 << 21)
+#define SDE_HOTPLUG_MASK_CPT (SDE_CRT_HOTPLUG_CPT | \
+ SDE_PORTD_HOTPLUG_CPT | \
+ SDE_PORTC_HOTPLUG_CPT | \
+ SDE_PORTB_HOTPLUG_CPT)
+
+#define SDEISR 0xc4000
+#define SDEIMR 0xc4004
+#define SDEIIR 0xc4008
+#define SDEIER 0xc400c
+
+/* digital port hotplug */
+#define PCH_PORT_HOTPLUG 0xc4030 /* SHOTPLUG_CTL */
+#define PORTD_HOTPLUG_ENABLE (1 << 20)
+#define PORTD_PULSE_DURATION_2ms (0)
+#define PORTD_PULSE_DURATION_4_5ms (1 << 18)
+#define PORTD_PULSE_DURATION_6ms (2 << 18)
+#define PORTD_PULSE_DURATION_100ms (3 << 18)
+#define PORTD_PULSE_DURATION_MASK (3 << 18)
+#define PORTD_HOTPLUG_NO_DETECT (0)
+#define PORTD_HOTPLUG_SHORT_DETECT (1 << 16)
+#define PORTD_HOTPLUG_LONG_DETECT (1 << 17)
+#define PORTC_HOTPLUG_ENABLE (1 << 12)
+#define PORTC_PULSE_DURATION_2ms (0)
+#define PORTC_PULSE_DURATION_4_5ms (1 << 10)
+#define PORTC_PULSE_DURATION_6ms (2 << 10)
+#define PORTC_PULSE_DURATION_100ms (3 << 10)
+#define PORTC_PULSE_DURATION_MASK (3 << 10)
+#define PORTC_HOTPLUG_NO_DETECT (0)
+#define PORTC_HOTPLUG_SHORT_DETECT (1 << 8)
+#define PORTC_HOTPLUG_LONG_DETECT (1 << 9)
+#define PORTB_HOTPLUG_ENABLE (1 << 4)
+#define PORTB_PULSE_DURATION_2ms (0)
+#define PORTB_PULSE_DURATION_4_5ms (1 << 2)
+#define PORTB_PULSE_DURATION_6ms (2 << 2)
+#define PORTB_PULSE_DURATION_100ms (3 << 2)
+#define PORTB_PULSE_DURATION_MASK (3 << 2)
+#define PORTB_HOTPLUG_NO_DETECT (0)
+#define PORTB_HOTPLUG_SHORT_DETECT (1 << 0)
+#define PORTB_HOTPLUG_LONG_DETECT (1 << 1)
+
+#define PCH_GPIOA 0xc5010
+#define PCH_GPIOB 0xc5014
+#define PCH_GPIOC 0xc5018
+#define PCH_GPIOD 0xc501c
+#define PCH_GPIOE 0xc5020
+#define PCH_GPIOF 0xc5024
+
+#define PCH_GMBUS0 0xc5100
+#define PCH_GMBUS1 0xc5104
+#define PCH_GMBUS2 0xc5108
+#define PCH_GMBUS3 0xc510c
+#define PCH_GMBUS4 0xc5110
+#define PCH_GMBUS5 0xc5120
+
+#define _PCH_DPLL_A 0xc6014
+#define _PCH_DPLL_B 0xc6018
+#define PCH_DPLL(pipe) (pipe == 0 ? _PCH_DPLL_A : _PCH_DPLL_B)
+
+#define _PCH_FPA0 0xc6040
+#define FP_CB_TUNE (0x3<<22)
+#define _PCH_FPA1 0xc6044
+#define _PCH_FPB0 0xc6048
+#define _PCH_FPB1 0xc604c
+#define PCH_FP0(pipe) (pipe == 0 ? _PCH_FPA0 : _PCH_FPB0)
+#define PCH_FP1(pipe) (pipe == 0 ? _PCH_FPA1 : _PCH_FPB1)
+
+#define PCH_DPLL_TEST 0xc606c
+
+#define PCH_DREF_CONTROL 0xC6200
+#define DREF_CONTROL_MASK 0x7fc3
+#define DREF_CPU_SOURCE_OUTPUT_DISABLE (0<<13)
+#define DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD (2<<13)
+#define DREF_CPU_SOURCE_OUTPUT_NONSPREAD (3<<13)
+#define DREF_CPU_SOURCE_OUTPUT_MASK (3<<13)
+#define DREF_SSC_SOURCE_DISABLE (0<<11)
+#define DREF_SSC_SOURCE_ENABLE (2<<11)
+#define DREF_SSC_SOURCE_MASK (3<<11)
+#define DREF_NONSPREAD_SOURCE_DISABLE (0<<9)
+#define DREF_NONSPREAD_CK505_ENABLE (1<<9)
+#define DREF_NONSPREAD_SOURCE_ENABLE (2<<9)
+#define DREF_NONSPREAD_SOURCE_MASK (3<<9)
+#define DREF_SUPERSPREAD_SOURCE_DISABLE (0<<7)
+#define DREF_SUPERSPREAD_SOURCE_ENABLE (2<<7)
+#define DREF_SUPERSPREAD_SOURCE_MASK (3<<7)
+#define DREF_SSC4_DOWNSPREAD (0<<6)
+#define DREF_SSC4_CENTERSPREAD (1<<6)
+#define DREF_SSC1_DISABLE (0<<1)
+#define DREF_SSC1_ENABLE (1<<1)
+#define DREF_SSC4_DISABLE (0)
+#define DREF_SSC4_ENABLE (1)
+
+#define PCH_RAWCLK_FREQ 0xc6204
+#define FDL_TP1_TIMER_SHIFT 12
+#define FDL_TP1_TIMER_MASK (3<<12)
+#define FDL_TP2_TIMER_SHIFT 10
+#define FDL_TP2_TIMER_MASK (3<<10)
+#define RAWCLK_FREQ_MASK 0x3ff
+
+#define PCH_DPLL_TMR_CFG 0xc6208
+
+#define PCH_SSC4_PARMS 0xc6210
+#define PCH_SSC4_AUX_PARMS 0xc6214
+
+#define PCH_DPLL_SEL 0xc7000
+#define TRANSA_DPLL_ENABLE (1<<3)
+#define TRANSA_DPLLB_SEL (1<<0)
+#define TRANSA_DPLLA_SEL 0
+#define TRANSB_DPLL_ENABLE (1<<7)
+#define TRANSB_DPLLB_SEL (1<<4)
+#define TRANSB_DPLLA_SEL (0)
+#define TRANSC_DPLL_ENABLE (1<<11)
+#define TRANSC_DPLLB_SEL (1<<8)
+#define TRANSC_DPLLA_SEL (0)
+
+/* transcoder */
+
+#define _TRANS_HTOTAL_A 0xe0000
+#define TRANS_HTOTAL_SHIFT 16
+#define TRANS_HACTIVE_SHIFT 0
+#define _TRANS_HBLANK_A 0xe0004
+#define TRANS_HBLANK_END_SHIFT 16
+#define TRANS_HBLANK_START_SHIFT 0
+#define _TRANS_HSYNC_A 0xe0008
+#define TRANS_HSYNC_END_SHIFT 16
+#define TRANS_HSYNC_START_SHIFT 0
+#define _TRANS_VTOTAL_A 0xe000c
+#define TRANS_VTOTAL_SHIFT 16
+#define TRANS_VACTIVE_SHIFT 0
+#define _TRANS_VBLANK_A 0xe0010
+#define TRANS_VBLANK_END_SHIFT 16
+#define TRANS_VBLANK_START_SHIFT 0
+#define _TRANS_VSYNC_A 0xe0014
+#define TRANS_VSYNC_END_SHIFT 16
+#define TRANS_VSYNC_START_SHIFT 0
+#define _TRANS_VSYNCSHIFT_A 0xe0028
+
+#define _TRANSA_DATA_M1 0xe0030
+#define _TRANSA_DATA_N1 0xe0034
+#define _TRANSA_DATA_M2 0xe0038
+#define _TRANSA_DATA_N2 0xe003c
+#define _TRANSA_DP_LINK_M1 0xe0040
+#define _TRANSA_DP_LINK_N1 0xe0044
+#define _TRANSA_DP_LINK_M2 0xe0048
+#define _TRANSA_DP_LINK_N2 0xe004c
+
+/* Per-transcoder DIP controls */
+
+#define _VIDEO_DIP_CTL_A 0xe0200
+#define _VIDEO_DIP_DATA_A 0xe0208
+#define _VIDEO_DIP_GCP_A 0xe0210
+
+#define _VIDEO_DIP_CTL_B 0xe1200
+#define _VIDEO_DIP_DATA_B 0xe1208
+#define _VIDEO_DIP_GCP_B 0xe1210
+
+#define TVIDEO_DIP_CTL(pipe) _PIPE(pipe, _VIDEO_DIP_CTL_A, _VIDEO_DIP_CTL_B)
+#define TVIDEO_DIP_DATA(pipe) _PIPE(pipe, _VIDEO_DIP_DATA_A, _VIDEO_DIP_DATA_B)
+#define TVIDEO_DIP_GCP(pipe) _PIPE(pipe, _VIDEO_DIP_GCP_A, _VIDEO_DIP_GCP_B)
+
+#define _TRANS_HTOTAL_B 0xe1000
+#define _TRANS_HBLANK_B 0xe1004
+#define _TRANS_HSYNC_B 0xe1008
+#define _TRANS_VTOTAL_B 0xe100c
+#define _TRANS_VBLANK_B 0xe1010
+#define _TRANS_VSYNC_B 0xe1014
+#define _TRANS_VSYNCSHIFT_B 0xe1028
+
+#define TRANS_HTOTAL(pipe) _PIPE(pipe, _TRANS_HTOTAL_A, _TRANS_HTOTAL_B)
+#define TRANS_HBLANK(pipe) _PIPE(pipe, _TRANS_HBLANK_A, _TRANS_HBLANK_B)
+#define TRANS_HSYNC(pipe) _PIPE(pipe, _TRANS_HSYNC_A, _TRANS_HSYNC_B)
+#define TRANS_VTOTAL(pipe) _PIPE(pipe, _TRANS_VTOTAL_A, _TRANS_VTOTAL_B)
+#define TRANS_VBLANK(pipe) _PIPE(pipe, _TRANS_VBLANK_A, _TRANS_VBLANK_B)
+#define TRANS_VSYNC(pipe) _PIPE(pipe, _TRANS_VSYNC_A, _TRANS_VSYNC_B)
+#define TRANS_VSYNCSHIFT(pipe) _PIPE(pipe, _TRANS_VSYNCSHIFT_A, \
+ _TRANS_VSYNCSHIFT_B)
+
+#define _TRANSB_DATA_M1 0xe1030
+#define _TRANSB_DATA_N1 0xe1034
+#define _TRANSB_DATA_M2 0xe1038
+#define _TRANSB_DATA_N2 0xe103c
+#define _TRANSB_DP_LINK_M1 0xe1040
+#define _TRANSB_DP_LINK_N1 0xe1044
+#define _TRANSB_DP_LINK_M2 0xe1048
+#define _TRANSB_DP_LINK_N2 0xe104c
+
+#define TRANSDATA_M1(pipe) _PIPE(pipe, _TRANSA_DATA_M1, _TRANSB_DATA_M1)
+#define TRANSDATA_N1(pipe) _PIPE(pipe, _TRANSA_DATA_N1, _TRANSB_DATA_N1)
+#define TRANSDATA_M2(pipe) _PIPE(pipe, _TRANSA_DATA_M2, _TRANSB_DATA_M2)
+#define TRANSDATA_N2(pipe) _PIPE(pipe, _TRANSA_DATA_N2, _TRANSB_DATA_N2)
+#define TRANSDPLINK_M1(pipe) _PIPE(pipe, _TRANSA_DP_LINK_M1, _TRANSB_DP_LINK_M1)
+#define TRANSDPLINK_N1(pipe) _PIPE(pipe, _TRANSA_DP_LINK_N1, _TRANSB_DP_LINK_N1)
+#define TRANSDPLINK_M2(pipe) _PIPE(pipe, _TRANSA_DP_LINK_M2, _TRANSB_DP_LINK_M2)
+#define TRANSDPLINK_N2(pipe) _PIPE(pipe, _TRANSA_DP_LINK_N2, _TRANSB_DP_LINK_N2)
+
+#define _TRANSACONF 0xf0008
+#define _TRANSBCONF 0xf1008
+#define TRANSCONF(plane) _PIPE(plane, _TRANSACONF, _TRANSBCONF)
+#define TRANS_DISABLE (0<<31)
+#define TRANS_ENABLE (1<<31)
+#define TRANS_STATE_MASK (1<<30)
+#define TRANS_STATE_DISABLE (0<<30)
+#define TRANS_STATE_ENABLE (1<<30)
+#define TRANS_FSYNC_DELAY_HB1 (0<<27)
+#define TRANS_FSYNC_DELAY_HB2 (1<<27)
+#define TRANS_FSYNC_DELAY_HB3 (2<<27)
+#define TRANS_FSYNC_DELAY_HB4 (3<<27)
+#define TRANS_DP_AUDIO_ONLY (1<<26)
+#define TRANS_DP_VIDEO_AUDIO (0<<26)
+#define TRANS_INTERLACE_MASK (7<<21)
+#define TRANS_PROGRESSIVE (0<<21)
+#define TRANS_INTERLACED (3<<21)
+#define TRANS_LEGACY_INTERLACED_ILK (2<<21)
+#define TRANS_8BPC (0<<5)
+#define TRANS_10BPC (1<<5)
+#define TRANS_6BPC (2<<5)
+#define TRANS_12BPC (3<<5)
+
+#define _TRANSA_CHICKEN2 0xf0064
+#define _TRANSB_CHICKEN2 0xf1064
+#define TRANS_CHICKEN2(pipe) _PIPE(pipe, _TRANSA_CHICKEN2, _TRANSB_CHICKEN2)
+#define TRANS_AUTOTRAIN_GEN_STALL_DIS (1<<31)
+
+#define SOUTH_CHICKEN1 0xc2000
+#define FDIA_PHASE_SYNC_SHIFT_OVR 19
+#define FDIA_PHASE_SYNC_SHIFT_EN 18
+#define FDI_PHASE_SYNC_OVR(pipe) (1<<(FDIA_PHASE_SYNC_SHIFT_OVR - ((pipe) * 2)))
+#define FDI_PHASE_SYNC_EN(pipe) (1<<(FDIA_PHASE_SYNC_SHIFT_EN - ((pipe) * 2)))
+#define SOUTH_CHICKEN2 0xc2004
+#define DPLS_EDP_PPS_FIX_DIS (1<<0)
+
+#define _FDI_RXA_CHICKEN 0xc200c
+#define _FDI_RXB_CHICKEN 0xc2010
+#define FDI_RX_PHASE_SYNC_POINTER_OVR (1<<1)
+#define FDI_RX_PHASE_SYNC_POINTER_EN (1<<0)
+#define FDI_RX_CHICKEN(pipe) _PIPE(pipe, _FDI_RXA_CHICKEN, _FDI_RXB_CHICKEN)
+
+#define SOUTH_DSPCLK_GATE_D 0xc2020
+#define PCH_DPLSUNIT_CLOCK_GATE_DISABLE (1<<29)
+
+/* CPU: FDI_TX */
+#define _FDI_TXA_CTL 0x60100
+#define _FDI_TXB_CTL 0x61100
+#define FDI_TX_CTL(pipe) _PIPE(pipe, _FDI_TXA_CTL, _FDI_TXB_CTL)
+#define FDI_TX_DISABLE (0<<31)
+#define FDI_TX_ENABLE (1<<31)
+#define FDI_LINK_TRAIN_PATTERN_1 (0<<28)
+#define FDI_LINK_TRAIN_PATTERN_2 (1<<28)
+#define FDI_LINK_TRAIN_PATTERN_IDLE (2<<28)
+#define FDI_LINK_TRAIN_NONE (3<<28)
+#define FDI_LINK_TRAIN_VOLTAGE_0_4V (0<<25)
+#define FDI_LINK_TRAIN_VOLTAGE_0_6V (1<<25)
+#define FDI_LINK_TRAIN_VOLTAGE_0_8V (2<<25)
+#define FDI_LINK_TRAIN_VOLTAGE_1_2V (3<<25)
+#define FDI_LINK_TRAIN_PRE_EMPHASIS_NONE (0<<22)
+#define FDI_LINK_TRAIN_PRE_EMPHASIS_1_5X (1<<22)
+#define FDI_LINK_TRAIN_PRE_EMPHASIS_2X (2<<22)
+#define FDI_LINK_TRAIN_PRE_EMPHASIS_3X (3<<22)
+/* ILK always use 400mV 0dB for voltage swing and pre-emphasis level.
+ SNB has different settings. */
+/* SNB A-stepping */
+#define FDI_LINK_TRAIN_400MV_0DB_SNB_A (0x38<<22)
+#define FDI_LINK_TRAIN_400MV_6DB_SNB_A (0x02<<22)
+#define FDI_LINK_TRAIN_600MV_3_5DB_SNB_A (0x01<<22)
+#define FDI_LINK_TRAIN_800MV_0DB_SNB_A (0x0<<22)
+/* SNB B-stepping */
+#define FDI_LINK_TRAIN_400MV_0DB_SNB_B (0x0<<22)
+#define FDI_LINK_TRAIN_400MV_6DB_SNB_B (0x3a<<22)
+#define FDI_LINK_TRAIN_600MV_3_5DB_SNB_B (0x39<<22)
+#define FDI_LINK_TRAIN_800MV_0DB_SNB_B (0x38<<22)
+#define FDI_LINK_TRAIN_VOL_EMP_MASK (0x3f<<22)
+#define FDI_DP_PORT_WIDTH_X1 (0<<19)
+#define FDI_DP_PORT_WIDTH_X2 (1<<19)
+#define FDI_DP_PORT_WIDTH_X3 (2<<19)
+#define FDI_DP_PORT_WIDTH_X4 (3<<19)
+#define FDI_TX_ENHANCE_FRAME_ENABLE (1<<18)
+/* Ironlake: hardwired to 1 */
+#define FDI_TX_PLL_ENABLE (1<<14)
+
+/* Ivybridge has different bits for lolz */
+#define FDI_LINK_TRAIN_PATTERN_1_IVB (0<<8)
+#define FDI_LINK_TRAIN_PATTERN_2_IVB (1<<8)
+#define FDI_LINK_TRAIN_PATTERN_IDLE_IVB (2<<8)
+#define FDI_LINK_TRAIN_NONE_IVB (3<<8)
+
+/* both Tx and Rx */
+#define FDI_COMPOSITE_SYNC (1<<11)
+#define FDI_LINK_TRAIN_AUTO (1<<10)
+#define FDI_SCRAMBLING_ENABLE (0<<7)
+#define FDI_SCRAMBLING_DISABLE (1<<7)
+/* FDI_RX, FDI_X is hard-wired to Transcoder_X */
+#define _FDI_RXA_CTL 0xf000c
+#define _FDI_RXB_CTL 0xf100c
+#define FDI_RX_CTL(pipe) _PIPE(pipe, _FDI_RXA_CTL, _FDI_RXB_CTL)
+#define FDI_RX_ENABLE (1<<31)
+/* train, dp width same as FDI_TX */
+#define FDI_FS_ERRC_ENABLE (1<<27)
+#define FDI_FE_ERRC_ENABLE (1<<26)
+#define FDI_DP_PORT_WIDTH_X8 (7<<19)
+#define FDI_8BPC (0<<16)
+#define FDI_10BPC (1<<16)
+#define FDI_6BPC (2<<16)
+#define FDI_12BPC (3<<16)
+#define FDI_LINK_REVERSE_OVERWRITE (1<<15)
+#define FDI_DMI_LINK_REVERSE_MASK (1<<14)
+#define FDI_RX_PLL_ENABLE (1<<13)
+#define FDI_FS_ERR_CORRECT_ENABLE (1<<11)
+#define FDI_FE_ERR_CORRECT_ENABLE (1<<10)
+#define FDI_FS_ERR_REPORT_ENABLE (1<<9)
+#define FDI_FE_ERR_REPORT_ENABLE (1<<8)
+#define FDI_RX_ENHANCE_FRAME_ENABLE (1<<6)
+#define FDI_PCDCLK (1<<4)
+/* CPT */
+#define FDI_AUTO_TRAINING (1<<10)
+#define FDI_LINK_TRAIN_PATTERN_1_CPT (0<<8)
+#define FDI_LINK_TRAIN_PATTERN_2_CPT (1<<8)
+#define FDI_LINK_TRAIN_PATTERN_IDLE_CPT (2<<8)
+#define FDI_LINK_TRAIN_NORMAL_CPT (3<<8)
+#define FDI_LINK_TRAIN_PATTERN_MASK_CPT (3<<8)
+
+#define _FDI_RXA_MISC 0xf0010
+#define _FDI_RXB_MISC 0xf1010
+#define _FDI_RXA_TUSIZE1 0xf0030
+#define _FDI_RXA_TUSIZE2 0xf0038
+#define _FDI_RXB_TUSIZE1 0xf1030
+#define _FDI_RXB_TUSIZE2 0xf1038
+#define FDI_RX_MISC(pipe) _PIPE(pipe, _FDI_RXA_MISC, _FDI_RXB_MISC)
+#define FDI_RX_TUSIZE1(pipe) _PIPE(pipe, _FDI_RXA_TUSIZE1, _FDI_RXB_TUSIZE1)
+#define FDI_RX_TUSIZE2(pipe) _PIPE(pipe, _FDI_RXA_TUSIZE2, _FDI_RXB_TUSIZE2)
+
+/* FDI_RX interrupt register format */
+#define FDI_RX_INTER_LANE_ALIGN (1<<10)
+#define FDI_RX_SYMBOL_LOCK (1<<9) /* train 2 */
+#define FDI_RX_BIT_LOCK (1<<8) /* train 1 */
+#define FDI_RX_TRAIN_PATTERN_2_FAIL (1<<7)
+#define FDI_RX_FS_CODE_ERR (1<<6)
+#define FDI_RX_FE_CODE_ERR (1<<5)
+#define FDI_RX_SYMBOL_ERR_RATE_ABOVE (1<<4)
+#define FDI_RX_HDCP_LINK_FAIL (1<<3)
+#define FDI_RX_PIXEL_FIFO_OVERFLOW (1<<2)
+#define FDI_RX_CROSS_CLOCK_OVERFLOW (1<<1)
+#define FDI_RX_SYMBOL_QUEUE_OVERFLOW (1<<0)
+
+#define _FDI_RXA_IIR 0xf0014
+#define _FDI_RXA_IMR 0xf0018
+#define _FDI_RXB_IIR 0xf1014
+#define _FDI_RXB_IMR 0xf1018
+#define FDI_RX_IIR(pipe) _PIPE(pipe, _FDI_RXA_IIR, _FDI_RXB_IIR)
+#define FDI_RX_IMR(pipe) _PIPE(pipe, _FDI_RXA_IMR, _FDI_RXB_IMR)
+
+#define FDI_PLL_CTL_1 0xfe000
+#define FDI_PLL_CTL_2 0xfe004
+
+/* CRT */
+#define PCH_ADPA 0xe1100
+#define ADPA_TRANS_SELECT_MASK (1<<30)
+#define ADPA_TRANS_A_SELECT 0
+#define ADPA_TRANS_B_SELECT (1<<30)
+#define ADPA_CRT_HOTPLUG_MASK 0x03ff0000 /* bit 25-16 */
+#define ADPA_CRT_HOTPLUG_MONITOR_NONE (0<<24)
+#define ADPA_CRT_HOTPLUG_MONITOR_MASK (3<<24)
+#define ADPA_CRT_HOTPLUG_MONITOR_COLOR (3<<24)
+#define ADPA_CRT_HOTPLUG_MONITOR_MONO (2<<24)
+#define ADPA_CRT_HOTPLUG_ENABLE (1<<23)
+#define ADPA_CRT_HOTPLUG_PERIOD_64 (0<<22)
+#define ADPA_CRT_HOTPLUG_PERIOD_128 (1<<22)
+#define ADPA_CRT_HOTPLUG_WARMUP_5MS (0<<21)
+#define ADPA_CRT_HOTPLUG_WARMUP_10MS (1<<21)
+#define ADPA_CRT_HOTPLUG_SAMPLE_2S (0<<20)
+#define ADPA_CRT_HOTPLUG_SAMPLE_4S (1<<20)
+#define ADPA_CRT_HOTPLUG_VOLTAGE_40 (0<<18)
+#define ADPA_CRT_HOTPLUG_VOLTAGE_50 (1<<18)
+#define ADPA_CRT_HOTPLUG_VOLTAGE_60 (2<<18)
+#define ADPA_CRT_HOTPLUG_VOLTAGE_70 (3<<18)
+#define ADPA_CRT_HOTPLUG_VOLREF_325MV (0<<17)
+#define ADPA_CRT_HOTPLUG_VOLREF_475MV (1<<17)
+#define ADPA_CRT_HOTPLUG_FORCE_TRIGGER (1<<16)
+
+/* or SDVOB */
+#define HDMIB 0xe1140
+#define PORT_ENABLE (1 << 31)
+#define TRANSCODER(pipe) ((pipe) << 30)
+#define TRANSCODER_CPT(pipe) ((pipe) << 29)
+#define TRANSCODER_MASK (1 << 30)
+#define TRANSCODER_MASK_CPT (3 << 29)
+#define COLOR_FORMAT_8bpc (0)
+#define COLOR_FORMAT_12bpc (3 << 26)
+#define SDVOB_HOTPLUG_ENABLE (1 << 23)
+#define SDVO_ENCODING (0)
+#define TMDS_ENCODING (2 << 10)
+#define NULL_PACKET_VSYNC_ENABLE (1 << 9)
+/* CPT */
+#define HDMI_MODE_SELECT (1 << 9)
+#define DVI_MODE_SELECT (0)
+#define SDVOB_BORDER_ENABLE (1 << 7)
+#define AUDIO_ENABLE (1 << 6)
+#define VSYNC_ACTIVE_HIGH (1 << 4)
+#define HSYNC_ACTIVE_HIGH (1 << 3)
+#define PORT_DETECTED (1 << 2)
+
+/* PCH SDVOB multiplex with HDMIB */
+#define PCH_SDVOB HDMIB
+
+#define HDMIC 0xe1150
+#define HDMID 0xe1160
+
+#define PCH_LVDS 0xe1180
+#define LVDS_DETECTED (1 << 1)
+
+#define BLC_PWM_CPU_CTL2 0x48250
+#define PWM_ENABLE (1 << 31)
+#define PWM_PIPE_A (0 << 29)
+#define PWM_PIPE_B (1 << 29)
+#define BLC_PWM_CPU_CTL 0x48254
+
+#define BLC_PWM_PCH_CTL1 0xc8250
+#define PWM_PCH_ENABLE (1 << 31)
+#define PWM_POLARITY_ACTIVE_LOW (1 << 29)
+#define PWM_POLARITY_ACTIVE_HIGH (0 << 29)
+#define PWM_POLARITY_ACTIVE_LOW2 (1 << 28)
+#define PWM_POLARITY_ACTIVE_HIGH2 (0 << 28)
+
+#define BLC_PWM_PCH_CTL2 0xc8254
+
+#define PCH_PP_STATUS 0xc7200
+#define PCH_PP_CONTROL 0xc7204
+#define PANEL_UNLOCK_REGS (0xabcd << 16)
+#define PANEL_UNLOCK_MASK (0xffff << 16)
+#define EDP_FORCE_VDD (1 << 3)
+#define EDP_BLC_ENABLE (1 << 2)
+#define PANEL_POWER_RESET (1 << 1)
+#define PANEL_POWER_OFF (0 << 0)
+#define PANEL_POWER_ON (1 << 0)
+#define PCH_PP_ON_DELAYS 0xc7208
+#define PANEL_PORT_SELECT_MASK (3 << 30)
+#define PANEL_PORT_SELECT_LVDS (0 << 30)
+#define PANEL_PORT_SELECT_DPA (1 << 30)
+#define EDP_PANEL (1 << 30)
+#define PANEL_PORT_SELECT_DPC (2 << 30)
+#define PANEL_PORT_SELECT_DPD (3 << 30)
+#define PANEL_POWER_UP_DELAY_MASK (0x1fff0000)
+#define PANEL_POWER_UP_DELAY_SHIFT 16
+#define PANEL_LIGHT_ON_DELAY_MASK (0x1fff)
+#define PANEL_LIGHT_ON_DELAY_SHIFT 0
+
+#define PCH_PP_OFF_DELAYS 0xc720c
+#define PANEL_POWER_DOWN_DELAY_MASK (0x1fff0000)
+#define PANEL_POWER_DOWN_DELAY_SHIFT 16
+#define PANEL_LIGHT_OFF_DELAY_MASK (0x1fff)
+#define PANEL_LIGHT_OFF_DELAY_SHIFT 0
+
+#define PCH_PP_DIVISOR 0xc7210
+#define PP_REFERENCE_DIVIDER_MASK (0xffffff00)
+#define PP_REFERENCE_DIVIDER_SHIFT 8
+#define PANEL_POWER_CYCLE_DELAY_MASK (0x1f)
+#define PANEL_POWER_CYCLE_DELAY_SHIFT 0
+
+#define PCH_DP_B 0xe4100
+#define PCH_DPB_AUX_CH_CTL 0xe4110
+#define PCH_DPB_AUX_CH_DATA1 0xe4114
+#define PCH_DPB_AUX_CH_DATA2 0xe4118
+#define PCH_DPB_AUX_CH_DATA3 0xe411c
+#define PCH_DPB_AUX_CH_DATA4 0xe4120
+#define PCH_DPB_AUX_CH_DATA5 0xe4124
+
+#define PCH_DP_C 0xe4200
+#define PCH_DPC_AUX_CH_CTL 0xe4210
+#define PCH_DPC_AUX_CH_DATA1 0xe4214
+#define PCH_DPC_AUX_CH_DATA2 0xe4218
+#define PCH_DPC_AUX_CH_DATA3 0xe421c
+#define PCH_DPC_AUX_CH_DATA4 0xe4220
+#define PCH_DPC_AUX_CH_DATA5 0xe4224
+
+#define PCH_DP_D 0xe4300
+#define PCH_DPD_AUX_CH_CTL 0xe4310
+#define PCH_DPD_AUX_CH_DATA1 0xe4314
+#define PCH_DPD_AUX_CH_DATA2 0xe4318
+#define PCH_DPD_AUX_CH_DATA3 0xe431c
+#define PCH_DPD_AUX_CH_DATA4 0xe4320
+#define PCH_DPD_AUX_CH_DATA5 0xe4324
+
+/* CPT */
+#define PORT_TRANS_A_SEL_CPT 0
+#define PORT_TRANS_B_SEL_CPT (1<<29)
+#define PORT_TRANS_C_SEL_CPT (2<<29)
+#define PORT_TRANS_SEL_MASK (3<<29)
+#define PORT_TRANS_SEL_CPT(pipe) ((pipe) << 29)
+
+#define TRANS_DP_CTL_A 0xe0300
+#define TRANS_DP_CTL_B 0xe1300
+#define TRANS_DP_CTL_C 0xe2300
+#define TRANS_DP_CTL(pipe) (TRANS_DP_CTL_A + (pipe) * 0x01000)
+#define TRANS_DP_OUTPUT_ENABLE (1<<31)
+#define TRANS_DP_PORT_SEL_B (0<<29)
+#define TRANS_DP_PORT_SEL_C (1<<29)
+#define TRANS_DP_PORT_SEL_D (2<<29)
+#define TRANS_DP_PORT_SEL_NONE (3<<29)
+#define TRANS_DP_PORT_SEL_MASK (3<<29)
+#define TRANS_DP_AUDIO_ONLY (1<<26)
+#define TRANS_DP_ENH_FRAMING (1<<18)
+#define TRANS_DP_8BPC (0<<9)
+#define TRANS_DP_10BPC (1<<9)
+#define TRANS_DP_6BPC (2<<9)
+#define TRANS_DP_12BPC (3<<9)
+#define TRANS_DP_BPC_MASK (3<<9)
+#define TRANS_DP_VSYNC_ACTIVE_HIGH (1<<4)
+#define TRANS_DP_VSYNC_ACTIVE_LOW 0
+#define TRANS_DP_HSYNC_ACTIVE_HIGH (1<<3)
+#define TRANS_DP_HSYNC_ACTIVE_LOW 0
+#define TRANS_DP_SYNC_MASK (3<<3)
+
+/* SNB eDP training params */
+/* SNB A-stepping */
+#define EDP_LINK_TRAIN_400MV_0DB_SNB_A (0x38<<22)
+#define EDP_LINK_TRAIN_400MV_6DB_SNB_A (0x02<<22)
+#define EDP_LINK_TRAIN_600MV_3_5DB_SNB_A (0x01<<22)
+#define EDP_LINK_TRAIN_800MV_0DB_SNB_A (0x0<<22)
+/* SNB B-stepping */
+#define EDP_LINK_TRAIN_400_600MV_0DB_SNB_B (0x0<<22)
+#define EDP_LINK_TRAIN_400MV_3_5DB_SNB_B (0x1<<22)
+#define EDP_LINK_TRAIN_400_600MV_6DB_SNB_B (0x3a<<22)
+#define EDP_LINK_TRAIN_600_800MV_3_5DB_SNB_B (0x39<<22)
+#define EDP_LINK_TRAIN_800_1200MV_0DB_SNB_B (0x38<<22)
+#define EDP_LINK_TRAIN_VOL_EMP_MASK_SNB (0x3f<<22)
+
+/* IVB */
+#define EDP_LINK_TRAIN_400MV_0DB_IVB (0x24 <<22)
+#define EDP_LINK_TRAIN_400MV_3_5DB_IVB (0x2a <<22)
+#define EDP_LINK_TRAIN_400MV_6DB_IVB (0x2f <<22)
+#define EDP_LINK_TRAIN_600MV_0DB_IVB (0x30 <<22)
+#define EDP_LINK_TRAIN_600MV_3_5DB_IVB (0x36 <<22)
+#define EDP_LINK_TRAIN_800MV_0DB_IVB (0x38 <<22)
+#define EDP_LINK_TRAIN_800MV_3_5DB_IVB (0x33 <<22)
+
+/* legacy values */
+#define EDP_LINK_TRAIN_500MV_0DB_IVB (0x00 <<22)
+#define EDP_LINK_TRAIN_1000MV_0DB_IVB (0x20 <<22)
+#define EDP_LINK_TRAIN_500MV_3_5DB_IVB (0x02 <<22)
+#define EDP_LINK_TRAIN_1000MV_3_5DB_IVB (0x22 <<22)
+#define EDP_LINK_TRAIN_1000MV_6DB_IVB (0x23 <<22)
+
+#define EDP_LINK_TRAIN_VOL_EMP_MASK_IVB (0x3f<<22)
+
+#define FORCEWAKE 0xA18C
+#define FORCEWAKE_ACK 0x130090
+#define FORCEWAKE_MT 0xa188 /* multi-threaded */
+#define FORCEWAKE_MT_ACK 0x130040
+#define ECOBUS 0xa180
+#define FORCEWAKE_MT_ENABLE (1<<5)
+
+#define GTFIFODBG 0x120000
+#define GT_FIFO_CPU_ERROR_MASK 7
+#define GT_FIFO_OVFERR (1<<2)
+#define GT_FIFO_IAWRERR (1<<1)
+#define GT_FIFO_IARDERR (1<<0)
+
+#define GT_FIFO_FREE_ENTRIES 0x120008
+#define GT_FIFO_NUM_RESERVED_ENTRIES 20
+
+#define GEN6_UCGCTL1 0x9400
+# define GEN6_BLBUNIT_CLOCK_GATE_DISABLE (1 << 5)
+
+#define GEN6_UCGCTL2 0x9404
+# define GEN6_RCZUNIT_CLOCK_GATE_DISABLE (1 << 13)
+# define GEN6_RCPBUNIT_CLOCK_GATE_DISABLE (1 << 12)
+# define GEN6_RCCUNIT_CLOCK_GATE_DISABLE (1 << 11)
+
+#define GEN6_RPNSWREQ 0xA008
+#define GEN6_TURBO_DISABLE (1<<31)
+#define GEN6_FREQUENCY(x) ((x)<<25)
+#define GEN6_OFFSET(x) ((x)<<19)
+#define GEN6_AGGRESSIVE_TURBO (0<<15)
+#define GEN6_RC_VIDEO_FREQ 0xA00C
+#define GEN6_RC_CONTROL 0xA090
+#define GEN6_RC_CTL_RC6pp_ENABLE (1<<16)
+#define GEN6_RC_CTL_RC6p_ENABLE (1<<17)
+#define GEN6_RC_CTL_RC6_ENABLE (1<<18)
+#define GEN6_RC_CTL_RC1e_ENABLE (1<<20)
+#define GEN6_RC_CTL_RC7_ENABLE (1<<22)
+#define GEN6_RC_CTL_EI_MODE(x) ((x)<<27)
+#define GEN6_RC_CTL_HW_ENABLE (1<<31)
+#define GEN6_RP_DOWN_TIMEOUT 0xA010
+#define GEN6_RP_INTERRUPT_LIMITS 0xA014
+#define GEN6_RPSTAT1 0xA01C
+#define GEN6_CAGF_SHIFT 8
+#define GEN6_CAGF_MASK (0x7f << GEN6_CAGF_SHIFT)
+#define GEN6_RP_CONTROL 0xA024
+#define GEN6_RP_MEDIA_TURBO (1<<11)
+#define GEN6_RP_MEDIA_MODE_MASK (3<<9)
+#define GEN6_RP_MEDIA_HW_TURBO_MODE (3<<9)
+#define GEN6_RP_MEDIA_HW_NORMAL_MODE (2<<9)
+#define GEN6_RP_MEDIA_HW_MODE (1<<9)
+#define GEN6_RP_MEDIA_SW_MODE (0<<9)
+#define GEN6_RP_MEDIA_IS_GFX (1<<8)
+#define GEN6_RP_ENABLE (1<<7)
+#define GEN6_RP_UP_IDLE_MIN (0x1<<3)
+#define GEN6_RP_UP_BUSY_AVG (0x2<<3)
+#define GEN6_RP_UP_BUSY_CONT (0x4<<3)
+#define GEN6_RP_DOWN_IDLE_CONT (0x1<<0)
+#define GEN6_RP_UP_THRESHOLD 0xA02C
+#define GEN6_RP_DOWN_THRESHOLD 0xA030
+#define GEN6_RP_CUR_UP_EI 0xA050
+#define GEN6_CURICONT_MASK 0xffffff
+#define GEN6_RP_CUR_UP 0xA054
+#define GEN6_CURBSYTAVG_MASK 0xffffff
+#define GEN6_RP_PREV_UP 0xA058
+#define GEN6_RP_CUR_DOWN_EI 0xA05C
+#define GEN6_CURIAVG_MASK 0xffffff
+#define GEN6_RP_CUR_DOWN 0xA060
+#define GEN6_RP_PREV_DOWN 0xA064
+#define GEN6_RP_UP_EI 0xA068
+#define GEN6_RP_DOWN_EI 0xA06C
+#define GEN6_RP_IDLE_HYSTERSIS 0xA070
+#define GEN6_RC_STATE 0xA094
+#define GEN6_RC1_WAKE_RATE_LIMIT 0xA098
+#define GEN6_RC6_WAKE_RATE_LIMIT 0xA09C
+#define GEN6_RC6pp_WAKE_RATE_LIMIT 0xA0A0
+#define GEN6_RC_EVALUATION_INTERVAL 0xA0A8
+#define GEN6_RC_IDLE_HYSTERSIS 0xA0AC
+#define GEN6_RC_SLEEP 0xA0B0
+#define GEN6_RC1e_THRESHOLD 0xA0B4
+#define GEN6_RC6_THRESHOLD 0xA0B8
+#define GEN6_RC6p_THRESHOLD 0xA0BC
+#define GEN6_RC6pp_THRESHOLD 0xA0C0
+#define GEN6_PMINTRMSK 0xA168
+
+#define GEN6_PMISR 0x44020
+#define GEN6_PMIMR 0x44024 /* rps_lock */
+#define GEN6_PMIIR 0x44028
+#define GEN6_PMIER 0x4402C
+#define GEN6_PM_MBOX_EVENT (1<<25)
+#define GEN6_PM_THERMAL_EVENT (1<<24)
+#define GEN6_PM_RP_DOWN_TIMEOUT (1<<6)
+#define GEN6_PM_RP_UP_THRESHOLD (1<<5)
+#define GEN6_PM_RP_DOWN_THRESHOLD (1<<4)
+#define GEN6_PM_RP_UP_EI_EXPIRED (1<<2)
+#define GEN6_PM_RP_DOWN_EI_EXPIRED (1<<1)
+#define GEN6_PM_DEFERRED_EVENTS (GEN6_PM_RP_UP_THRESHOLD | \
+ GEN6_PM_RP_DOWN_THRESHOLD | \
+ GEN6_PM_RP_DOWN_TIMEOUT)
+
+#define GEN6_PCODE_MAILBOX 0x138124
+#define GEN6_PCODE_READY (1<<31)
+#define GEN6_READ_OC_PARAMS 0xc
+#define GEN6_PCODE_WRITE_MIN_FREQ_TABLE 0x8
+#define GEN6_PCODE_READ_MIN_FREQ_TABLE 0x9
+#define GEN6_PCODE_DATA 0x138128
+#define GEN6_PCODE_FREQ_IA_RATIO_SHIFT 8
+
+#define GEN6_GT_CORE_STATUS 0x138060
+#define GEN6_CORE_CPD_STATE_MASK (7<<4)
+#define GEN6_RCn_MASK 7
+#define GEN6_RC0 0
+#define GEN6_RC3 2
+#define GEN6_RC6 3
+#define GEN6_RC7 4
+
+#define G4X_AUD_VID_DID 0x62020
+#define INTEL_AUDIO_DEVCL 0x808629FB
+#define INTEL_AUDIO_DEVBLC 0x80862801
+#define INTEL_AUDIO_DEVCTG 0x80862802
+
+#define G4X_AUD_CNTL_ST 0x620B4
+#define G4X_ELDV_DEVCL_DEVBLC (1 << 13)
+#define G4X_ELDV_DEVCTG (1 << 14)
+#define G4X_ELD_ADDR (0xf << 5)
+#define G4X_ELD_ACK (1 << 4)
+#define G4X_HDMIW_HDMIEDID 0x6210C
+
+#define IBX_HDMIW_HDMIEDID_A 0xE2050
+#define IBX_AUD_CNTL_ST_A 0xE20B4
+#define IBX_ELD_BUFFER_SIZE (0x1f << 10)
+#define IBX_ELD_ADDRESS (0x1f << 5)
+#define IBX_ELD_ACK (1 << 4)
+#define IBX_AUD_CNTL_ST2 0xE20C0
+#define IBX_ELD_VALIDB (1 << 0)
+#define IBX_CP_READYB (1 << 1)
+
+#define CPT_HDMIW_HDMIEDID_A 0xE5050
+#define CPT_AUD_CNTL_ST_A 0xE50B4
+#define CPT_AUD_CNTRL_ST2 0xE50C0
+
+/* These are the 4 32-bit write offset registers for each stream
+ * output buffer. It determines the offset from the
+ * 3DSTATE_SO_BUFFERs that the next streamed vertex output goes to.
+ */
+#define GEN7_SO_WRITE_OFFSET(n) (0x5280 + (n) * 4)
+
+#define IBX_AUD_CONFIG_A 0xe2000
+#define CPT_AUD_CONFIG_A 0xe5000
+#define AUD_CONFIG_N_VALUE_INDEX (1 << 29)
+#define AUD_CONFIG_N_PROG_ENABLE (1 << 28)
+#define AUD_CONFIG_UPPER_N_SHIFT 20
+#define AUD_CONFIG_UPPER_N_VALUE (0xff << 20)
+#define AUD_CONFIG_LOWER_N_SHIFT 4
+#define AUD_CONFIG_LOWER_N_VALUE (0xfff << 4)
+#define AUD_CONFIG_PIXEL_CLOCK_HDMI_SHIFT 16
+#define AUD_CONFIG_PIXEL_CLOCK_HDMI (0xf << 16)
+#define AUD_CONFIG_DISABLE_NCTS (1 << 3)
+
+#endif /* _I915_REG_H_ */
diff --git a/sys/dev/drm2/i915/i915_suspend.c b/sys/dev/drm2/i915/i915_suspend.c
new file mode 100644
index 000000000000..1e219a1612ac
--- /dev/null
+++ b/sys/dev/drm2/i915/i915_suspend.c
@@ -0,0 +1,909 @@
+/*
+ *
+ * Copyright 2008 (c) Intel Corporation
+ * Jesse Barnes <jbarnes@virtuousgeek.org>
+ *
+ * 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, sub license, 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 (including the
+ * next paragraph) 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 NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/intel_drv.h>
+
+static bool i915_pipe_enabled(struct drm_device *dev, enum pipe pipe)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 dpll_reg;
+
+ /* On IVB, 3rd pipe shares PLL with another one */
+ if (pipe > 1)
+ return false;
+
+ if (HAS_PCH_SPLIT(dev))
+ dpll_reg = PCH_DPLL(pipe);
+ else
+ dpll_reg = (pipe == PIPE_A) ? _DPLL_A : _DPLL_B;
+
+ return (I915_READ(dpll_reg) & DPLL_VCO_ENABLE);
+}
+
+static void i915_save_palette(struct drm_device *dev, enum pipe pipe)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ unsigned long reg = (pipe == PIPE_A ? _PALETTE_A : _PALETTE_B);
+ u32 *array;
+ int i;
+
+ if (!i915_pipe_enabled(dev, pipe))
+ return;
+
+ if (HAS_PCH_SPLIT(dev))
+ reg = (pipe == PIPE_A) ? _LGC_PALETTE_A : _LGC_PALETTE_B;
+
+ if (pipe == PIPE_A)
+ array = dev_priv->save_palette_a;
+ else
+ array = dev_priv->save_palette_b;
+
+ for (i = 0; i < 256; i++)
+ array[i] = I915_READ(reg + (i << 2));
+}
+
+static void i915_restore_palette(struct drm_device *dev, enum pipe pipe)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ unsigned long reg = (pipe == PIPE_A ? _PALETTE_A : _PALETTE_B);
+ u32 *array;
+ int i;
+
+ if (!i915_pipe_enabled(dev, pipe))
+ return;
+
+ if (HAS_PCH_SPLIT(dev))
+ reg = (pipe == PIPE_A) ? _LGC_PALETTE_A : _LGC_PALETTE_B;
+
+ if (pipe == PIPE_A)
+ array = dev_priv->save_palette_a;
+ else
+ array = dev_priv->save_palette_b;
+
+ for (i = 0; i < 256; i++)
+ I915_WRITE(reg + (i << 2), array[i]);
+}
+
+static u8 i915_read_indexed(struct drm_device *dev, u16 index_port, u16 data_port, u8 reg)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ I915_WRITE8(index_port, reg);
+ return I915_READ8(data_port);
+}
+
+static u8 i915_read_ar(struct drm_device *dev, u16 st01, u8 reg, u16 palette_enable)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ I915_READ8(st01);
+ I915_WRITE8(VGA_AR_INDEX, palette_enable | reg);
+ return I915_READ8(VGA_AR_DATA_READ);
+}
+
+static void i915_write_ar(struct drm_device *dev, u16 st01, u8 reg, u8 val, u16 palette_enable)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ I915_READ8(st01);
+ I915_WRITE8(VGA_AR_INDEX, palette_enable | reg);
+ I915_WRITE8(VGA_AR_DATA_WRITE, val);
+}
+
+static void i915_write_indexed(struct drm_device *dev, u16 index_port, u16 data_port, u8 reg, u8 val)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ I915_WRITE8(index_port, reg);
+ I915_WRITE8(data_port, val);
+}
+
+static void i915_save_vga(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i;
+ u16 cr_index, cr_data, st01;
+
+ /* VGA color palette registers */
+ dev_priv->saveDACMASK = I915_READ8(VGA_DACMASK);
+
+ /* MSR bits */
+ dev_priv->saveMSR = I915_READ8(VGA_MSR_READ);
+ if (dev_priv->saveMSR & VGA_MSR_CGA_MODE) {
+ cr_index = VGA_CR_INDEX_CGA;
+ cr_data = VGA_CR_DATA_CGA;
+ st01 = VGA_ST01_CGA;
+ } else {
+ cr_index = VGA_CR_INDEX_MDA;
+ cr_data = VGA_CR_DATA_MDA;
+ st01 = VGA_ST01_MDA;
+ }
+
+ /* CRT controller regs */
+ i915_write_indexed(dev, cr_index, cr_data, 0x11,
+ i915_read_indexed(dev, cr_index, cr_data, 0x11) &
+ (~0x80));
+ for (i = 0; i <= 0x24; i++)
+ dev_priv->saveCR[i] =
+ i915_read_indexed(dev, cr_index, cr_data, i);
+ /* Make sure we don't turn off CR group 0 writes */
+ dev_priv->saveCR[0x11] &= ~0x80;
+
+ /* Attribute controller registers */
+ I915_READ8(st01);
+ dev_priv->saveAR_INDEX = I915_READ8(VGA_AR_INDEX);
+ for (i = 0; i <= 0x14; i++)
+ dev_priv->saveAR[i] = i915_read_ar(dev, st01, i, 0);
+ I915_READ8(st01);
+ I915_WRITE8(VGA_AR_INDEX, dev_priv->saveAR_INDEX);
+ I915_READ8(st01);
+
+ /* Graphics controller registers */
+ for (i = 0; i < 9; i++)
+ dev_priv->saveGR[i] =
+ i915_read_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, i);
+
+ dev_priv->saveGR[0x10] =
+ i915_read_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x10);
+ dev_priv->saveGR[0x11] =
+ i915_read_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x11);
+ dev_priv->saveGR[0x18] =
+ i915_read_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x18);
+
+ /* Sequencer registers */
+ for (i = 0; i < 8; i++)
+ dev_priv->saveSR[i] =
+ i915_read_indexed(dev, VGA_SR_INDEX, VGA_SR_DATA, i);
+}
+
+static void i915_restore_vga(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i;
+ u16 cr_index, cr_data, st01;
+
+ /* MSR bits */
+ I915_WRITE8(VGA_MSR_WRITE, dev_priv->saveMSR);
+ if (dev_priv->saveMSR & VGA_MSR_CGA_MODE) {
+ cr_index = VGA_CR_INDEX_CGA;
+ cr_data = VGA_CR_DATA_CGA;
+ st01 = VGA_ST01_CGA;
+ } else {
+ cr_index = VGA_CR_INDEX_MDA;
+ cr_data = VGA_CR_DATA_MDA;
+ st01 = VGA_ST01_MDA;
+ }
+
+ /* Sequencer registers, don't write SR07 */
+ for (i = 0; i < 7; i++)
+ i915_write_indexed(dev, VGA_SR_INDEX, VGA_SR_DATA, i,
+ dev_priv->saveSR[i]);
+
+ /* CRT controller regs */
+ /* Enable CR group 0 writes */
+ i915_write_indexed(dev, cr_index, cr_data, 0x11, dev_priv->saveCR[0x11]);
+ for (i = 0; i <= 0x24; i++)
+ i915_write_indexed(dev, cr_index, cr_data, i, dev_priv->saveCR[i]);
+
+ /* Graphics controller regs */
+ for (i = 0; i < 9; i++)
+ i915_write_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, i,
+ dev_priv->saveGR[i]);
+
+ i915_write_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x10,
+ dev_priv->saveGR[0x10]);
+ i915_write_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x11,
+ dev_priv->saveGR[0x11]);
+ i915_write_indexed(dev, VGA_GR_INDEX, VGA_GR_DATA, 0x18,
+ dev_priv->saveGR[0x18]);
+
+ /* Attribute controller registers */
+ I915_READ8(st01); /* switch back to index mode */
+ for (i = 0; i <= 0x14; i++)
+ i915_write_ar(dev, st01, i, dev_priv->saveAR[i], 0);
+ I915_READ8(st01); /* switch back to index mode */
+ I915_WRITE8(VGA_AR_INDEX, dev_priv->saveAR_INDEX | 0x20);
+ I915_READ8(st01);
+
+ /* VGA color palette registers */
+ I915_WRITE8(VGA_DACMASK, dev_priv->saveDACMASK);
+}
+
+static void i915_save_modeset_reg(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i;
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ return;
+
+ /* Cursor state */
+ dev_priv->saveCURACNTR = I915_READ(_CURACNTR);
+ dev_priv->saveCURAPOS = I915_READ(_CURAPOS);
+ dev_priv->saveCURABASE = I915_READ(_CURABASE);
+ dev_priv->saveCURBCNTR = I915_READ(_CURBCNTR);
+ dev_priv->saveCURBPOS = I915_READ(_CURBPOS);
+ dev_priv->saveCURBBASE = I915_READ(_CURBBASE);
+ if (IS_GEN2(dev))
+ dev_priv->saveCURSIZE = I915_READ(CURSIZE);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->savePCH_DREF_CONTROL = I915_READ(PCH_DREF_CONTROL);
+ dev_priv->saveDISP_ARB_CTL = I915_READ(DISP_ARB_CTL);
+ }
+
+ /* Pipe & plane A info */
+ dev_priv->savePIPEACONF = I915_READ(_PIPEACONF);
+ dev_priv->savePIPEASRC = I915_READ(_PIPEASRC);
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->saveFPA0 = I915_READ(_PCH_FPA0);
+ dev_priv->saveFPA1 = I915_READ(_PCH_FPA1);
+ dev_priv->saveDPLL_A = I915_READ(_PCH_DPLL_A);
+ } else {
+ dev_priv->saveFPA0 = I915_READ(_FPA0);
+ dev_priv->saveFPA1 = I915_READ(_FPA1);
+ dev_priv->saveDPLL_A = I915_READ(_DPLL_A);
+ }
+ if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev))
+ dev_priv->saveDPLL_A_MD = I915_READ(_DPLL_A_MD);
+ dev_priv->saveHTOTAL_A = I915_READ(_HTOTAL_A);
+ dev_priv->saveHBLANK_A = I915_READ(_HBLANK_A);
+ dev_priv->saveHSYNC_A = I915_READ(_HSYNC_A);
+ dev_priv->saveVTOTAL_A = I915_READ(_VTOTAL_A);
+ dev_priv->saveVBLANK_A = I915_READ(_VBLANK_A);
+ dev_priv->saveVSYNC_A = I915_READ(_VSYNC_A);
+ if (!HAS_PCH_SPLIT(dev))
+ dev_priv->saveBCLRPAT_A = I915_READ(_BCLRPAT_A);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->savePIPEA_DATA_M1 = I915_READ(_PIPEA_DATA_M1);
+ dev_priv->savePIPEA_DATA_N1 = I915_READ(_PIPEA_DATA_N1);
+ dev_priv->savePIPEA_LINK_M1 = I915_READ(_PIPEA_LINK_M1);
+ dev_priv->savePIPEA_LINK_N1 = I915_READ(_PIPEA_LINK_N1);
+
+ dev_priv->saveFDI_TXA_CTL = I915_READ(_FDI_TXA_CTL);
+ dev_priv->saveFDI_RXA_CTL = I915_READ(_FDI_RXA_CTL);
+
+ dev_priv->savePFA_CTL_1 = I915_READ(_PFA_CTL_1);
+ dev_priv->savePFA_WIN_SZ = I915_READ(_PFA_WIN_SZ);
+ dev_priv->savePFA_WIN_POS = I915_READ(_PFA_WIN_POS);
+
+ dev_priv->saveTRANSACONF = I915_READ(_TRANSACONF);
+ dev_priv->saveTRANS_HTOTAL_A = I915_READ(_TRANS_HTOTAL_A);
+ dev_priv->saveTRANS_HBLANK_A = I915_READ(_TRANS_HBLANK_A);
+ dev_priv->saveTRANS_HSYNC_A = I915_READ(_TRANS_HSYNC_A);
+ dev_priv->saveTRANS_VTOTAL_A = I915_READ(_TRANS_VTOTAL_A);
+ dev_priv->saveTRANS_VBLANK_A = I915_READ(_TRANS_VBLANK_A);
+ dev_priv->saveTRANS_VSYNC_A = I915_READ(_TRANS_VSYNC_A);
+ }
+
+ dev_priv->saveDSPACNTR = I915_READ(_DSPACNTR);
+ dev_priv->saveDSPASTRIDE = I915_READ(_DSPASTRIDE);
+ dev_priv->saveDSPASIZE = I915_READ(_DSPASIZE);
+ dev_priv->saveDSPAPOS = I915_READ(_DSPAPOS);
+ dev_priv->saveDSPAADDR = I915_READ(_DSPAADDR);
+ if (INTEL_INFO(dev)->gen >= 4) {
+ dev_priv->saveDSPASURF = I915_READ(_DSPASURF);
+ dev_priv->saveDSPATILEOFF = I915_READ(_DSPATILEOFF);
+ }
+ i915_save_palette(dev, PIPE_A);
+ dev_priv->savePIPEASTAT = I915_READ(_PIPEASTAT);
+
+ /* Pipe & plane B info */
+ dev_priv->savePIPEBCONF = I915_READ(_PIPEBCONF);
+ dev_priv->savePIPEBSRC = I915_READ(_PIPEBSRC);
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->saveFPB0 = I915_READ(_PCH_FPB0);
+ dev_priv->saveFPB1 = I915_READ(_PCH_FPB1);
+ dev_priv->saveDPLL_B = I915_READ(_PCH_DPLL_B);
+ } else {
+ dev_priv->saveFPB0 = I915_READ(_FPB0);
+ dev_priv->saveFPB1 = I915_READ(_FPB1);
+ dev_priv->saveDPLL_B = I915_READ(_DPLL_B);
+ }
+ if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev))
+ dev_priv->saveDPLL_B_MD = I915_READ(_DPLL_B_MD);
+ dev_priv->saveHTOTAL_B = I915_READ(_HTOTAL_B);
+ dev_priv->saveHBLANK_B = I915_READ(_HBLANK_B);
+ dev_priv->saveHSYNC_B = I915_READ(_HSYNC_B);
+ dev_priv->saveVTOTAL_B = I915_READ(_VTOTAL_B);
+ dev_priv->saveVBLANK_B = I915_READ(_VBLANK_B);
+ dev_priv->saveVSYNC_B = I915_READ(_VSYNC_B);
+ if (!HAS_PCH_SPLIT(dev))
+ dev_priv->saveBCLRPAT_B = I915_READ(_BCLRPAT_B);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->savePIPEB_DATA_M1 = I915_READ(_PIPEB_DATA_M1);
+ dev_priv->savePIPEB_DATA_N1 = I915_READ(_PIPEB_DATA_N1);
+ dev_priv->savePIPEB_LINK_M1 = I915_READ(_PIPEB_LINK_M1);
+ dev_priv->savePIPEB_LINK_N1 = I915_READ(_PIPEB_LINK_N1);
+
+ dev_priv->saveFDI_TXB_CTL = I915_READ(_FDI_TXB_CTL);
+ dev_priv->saveFDI_RXB_CTL = I915_READ(_FDI_RXB_CTL);
+
+ dev_priv->savePFB_CTL_1 = I915_READ(_PFB_CTL_1);
+ dev_priv->savePFB_WIN_SZ = I915_READ(_PFB_WIN_SZ);
+ dev_priv->savePFB_WIN_POS = I915_READ(_PFB_WIN_POS);
+
+ dev_priv->saveTRANSBCONF = I915_READ(_TRANSBCONF);
+ dev_priv->saveTRANS_HTOTAL_B = I915_READ(_TRANS_HTOTAL_B);
+ dev_priv->saveTRANS_HBLANK_B = I915_READ(_TRANS_HBLANK_B);
+ dev_priv->saveTRANS_HSYNC_B = I915_READ(_TRANS_HSYNC_B);
+ dev_priv->saveTRANS_VTOTAL_B = I915_READ(_TRANS_VTOTAL_B);
+ dev_priv->saveTRANS_VBLANK_B = I915_READ(_TRANS_VBLANK_B);
+ dev_priv->saveTRANS_VSYNC_B = I915_READ(_TRANS_VSYNC_B);
+ }
+
+ dev_priv->saveDSPBCNTR = I915_READ(_DSPBCNTR);
+ dev_priv->saveDSPBSTRIDE = I915_READ(_DSPBSTRIDE);
+ dev_priv->saveDSPBSIZE = I915_READ(_DSPBSIZE);
+ dev_priv->saveDSPBPOS = I915_READ(_DSPBPOS);
+ dev_priv->saveDSPBADDR = I915_READ(_DSPBADDR);
+ if (INTEL_INFO(dev)->gen >= 4) {
+ dev_priv->saveDSPBSURF = I915_READ(_DSPBSURF);
+ dev_priv->saveDSPBTILEOFF = I915_READ(_DSPBTILEOFF);
+ }
+ i915_save_palette(dev, PIPE_B);
+ dev_priv->savePIPEBSTAT = I915_READ(_PIPEBSTAT);
+
+ /* Fences */
+ switch (INTEL_INFO(dev)->gen) {
+ case 7:
+ case 6:
+ for (i = 0; i < 16; i++)
+ dev_priv->saveFENCE[i] = I915_READ64(FENCE_REG_SANDYBRIDGE_0 + (i * 8));
+ break;
+ case 5:
+ case 4:
+ for (i = 0; i < 16; i++)
+ dev_priv->saveFENCE[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++)
+ dev_priv->saveFENCE[i+8] = I915_READ(FENCE_REG_945_8 + (i * 4));
+ case 2:
+ for (i = 0; i < 8; i++)
+ dev_priv->saveFENCE[i] = I915_READ(FENCE_REG_830_0 + (i * 4));
+ break;
+ }
+
+ return;
+}
+
+static void i915_restore_modeset_reg(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int dpll_a_reg, fpa0_reg, fpa1_reg;
+ int dpll_b_reg, fpb0_reg, fpb1_reg;
+ int i;
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ return;
+
+ /* Fences */
+ switch (INTEL_INFO(dev)->gen) {
+ case 7:
+ case 6:
+ for (i = 0; i < 16; i++)
+ I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 + (i * 8), dev_priv->saveFENCE[i]);
+ break;
+ case 5:
+ case 4:
+ for (i = 0; i < 16; i++)
+ I915_WRITE64(FENCE_REG_965_0 + (i * 8), dev_priv->saveFENCE[i]);
+ break;
+ case 3:
+ case 2:
+ if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
+ for (i = 0; i < 8; i++)
+ I915_WRITE(FENCE_REG_945_8 + (i * 4), dev_priv->saveFENCE[i+8]);
+ for (i = 0; i < 8; i++)
+ I915_WRITE(FENCE_REG_830_0 + (i * 4), dev_priv->saveFENCE[i]);
+ break;
+ }
+
+
+ if (HAS_PCH_SPLIT(dev)) {
+ dpll_a_reg = _PCH_DPLL_A;
+ dpll_b_reg = _PCH_DPLL_B;
+ fpa0_reg = _PCH_FPA0;
+ fpb0_reg = _PCH_FPB0;
+ fpa1_reg = _PCH_FPA1;
+ fpb1_reg = _PCH_FPB1;
+ } else {
+ dpll_a_reg = _DPLL_A;
+ dpll_b_reg = _DPLL_B;
+ fpa0_reg = _FPA0;
+ fpb0_reg = _FPB0;
+ fpa1_reg = _FPA1;
+ fpb1_reg = _FPB1;
+ }
+
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(PCH_DREF_CONTROL, dev_priv->savePCH_DREF_CONTROL);
+ I915_WRITE(DISP_ARB_CTL, dev_priv->saveDISP_ARB_CTL);
+ }
+
+ /* Pipe & plane A info */
+ /* Prime the clock */
+ if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) {
+ I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A &
+ ~DPLL_VCO_ENABLE);
+ POSTING_READ(dpll_a_reg);
+ DRM_UDELAY(150);
+ }
+ I915_WRITE(fpa0_reg, dev_priv->saveFPA0);
+ I915_WRITE(fpa1_reg, dev_priv->saveFPA1);
+ /* Actually enable it */
+ I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A);
+ POSTING_READ(dpll_a_reg);
+ DRM_UDELAY(150);
+ if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(_DPLL_A_MD, dev_priv->saveDPLL_A_MD);
+ POSTING_READ(_DPLL_A_MD);
+ }
+ DRM_UDELAY(150);
+
+ /* Restore mode */
+ I915_WRITE(_HTOTAL_A, dev_priv->saveHTOTAL_A);
+ I915_WRITE(_HBLANK_A, dev_priv->saveHBLANK_A);
+ I915_WRITE(_HSYNC_A, dev_priv->saveHSYNC_A);
+ I915_WRITE(_VTOTAL_A, dev_priv->saveVTOTAL_A);
+ I915_WRITE(_VBLANK_A, dev_priv->saveVBLANK_A);
+ I915_WRITE(_VSYNC_A, dev_priv->saveVSYNC_A);
+ if (!HAS_PCH_SPLIT(dev))
+ I915_WRITE(_BCLRPAT_A, dev_priv->saveBCLRPAT_A);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(_PIPEA_DATA_M1, dev_priv->savePIPEA_DATA_M1);
+ I915_WRITE(_PIPEA_DATA_N1, dev_priv->savePIPEA_DATA_N1);
+ I915_WRITE(_PIPEA_LINK_M1, dev_priv->savePIPEA_LINK_M1);
+ I915_WRITE(_PIPEA_LINK_N1, dev_priv->savePIPEA_LINK_N1);
+
+ I915_WRITE(_FDI_RXA_CTL, dev_priv->saveFDI_RXA_CTL);
+ I915_WRITE(_FDI_TXA_CTL, dev_priv->saveFDI_TXA_CTL);
+
+ I915_WRITE(_PFA_CTL_1, dev_priv->savePFA_CTL_1);
+ I915_WRITE(_PFA_WIN_SZ, dev_priv->savePFA_WIN_SZ);
+ I915_WRITE(_PFA_WIN_POS, dev_priv->savePFA_WIN_POS);
+
+ I915_WRITE(_TRANSACONF, dev_priv->saveTRANSACONF);
+ I915_WRITE(_TRANS_HTOTAL_A, dev_priv->saveTRANS_HTOTAL_A);
+ I915_WRITE(_TRANS_HBLANK_A, dev_priv->saveTRANS_HBLANK_A);
+ I915_WRITE(_TRANS_HSYNC_A, dev_priv->saveTRANS_HSYNC_A);
+ I915_WRITE(_TRANS_VTOTAL_A, dev_priv->saveTRANS_VTOTAL_A);
+ I915_WRITE(_TRANS_VBLANK_A, dev_priv->saveTRANS_VBLANK_A);
+ I915_WRITE(_TRANS_VSYNC_A, dev_priv->saveTRANS_VSYNC_A);
+ }
+
+ /* Restore plane info */
+ I915_WRITE(_DSPASIZE, dev_priv->saveDSPASIZE);
+ I915_WRITE(_DSPAPOS, dev_priv->saveDSPAPOS);
+ I915_WRITE(_PIPEASRC, dev_priv->savePIPEASRC);
+ I915_WRITE(_DSPAADDR, dev_priv->saveDSPAADDR);
+ I915_WRITE(_DSPASTRIDE, dev_priv->saveDSPASTRIDE);
+ if (INTEL_INFO(dev)->gen >= 4) {
+ I915_WRITE(_DSPASURF, dev_priv->saveDSPASURF);
+ I915_WRITE(_DSPATILEOFF, dev_priv->saveDSPATILEOFF);
+ }
+
+ I915_WRITE(_PIPEACONF, dev_priv->savePIPEACONF);
+
+ i915_restore_palette(dev, PIPE_A);
+ /* Enable the plane */
+ I915_WRITE(_DSPACNTR, dev_priv->saveDSPACNTR);
+ I915_WRITE(_DSPAADDR, I915_READ(_DSPAADDR));
+
+ /* Pipe & plane B info */
+ if (dev_priv->saveDPLL_B & DPLL_VCO_ENABLE) {
+ I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B &
+ ~DPLL_VCO_ENABLE);
+ POSTING_READ(dpll_b_reg);
+ DRM_UDELAY(150);
+ }
+ I915_WRITE(fpb0_reg, dev_priv->saveFPB0);
+ I915_WRITE(fpb1_reg, dev_priv->saveFPB1);
+ /* Actually enable it */
+ I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B);
+ POSTING_READ(dpll_b_reg);
+ DRM_UDELAY(150);
+ if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(_DPLL_B_MD, dev_priv->saveDPLL_B_MD);
+ POSTING_READ(_DPLL_B_MD);
+ }
+ DRM_UDELAY(150);
+
+ /* Restore mode */
+ I915_WRITE(_HTOTAL_B, dev_priv->saveHTOTAL_B);
+ I915_WRITE(_HBLANK_B, dev_priv->saveHBLANK_B);
+ I915_WRITE(_HSYNC_B, dev_priv->saveHSYNC_B);
+ I915_WRITE(_VTOTAL_B, dev_priv->saveVTOTAL_B);
+ I915_WRITE(_VBLANK_B, dev_priv->saveVBLANK_B);
+ I915_WRITE(_VSYNC_B, dev_priv->saveVSYNC_B);
+ if (!HAS_PCH_SPLIT(dev))
+ I915_WRITE(_BCLRPAT_B, dev_priv->saveBCLRPAT_B);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(_PIPEB_DATA_M1, dev_priv->savePIPEB_DATA_M1);
+ I915_WRITE(_PIPEB_DATA_N1, dev_priv->savePIPEB_DATA_N1);
+ I915_WRITE(_PIPEB_LINK_M1, dev_priv->savePIPEB_LINK_M1);
+ I915_WRITE(_PIPEB_LINK_N1, dev_priv->savePIPEB_LINK_N1);
+
+ I915_WRITE(_FDI_RXB_CTL, dev_priv->saveFDI_RXB_CTL);
+ I915_WRITE(_FDI_TXB_CTL, dev_priv->saveFDI_TXB_CTL);
+
+ I915_WRITE(_PFB_CTL_1, dev_priv->savePFB_CTL_1);
+ I915_WRITE(_PFB_WIN_SZ, dev_priv->savePFB_WIN_SZ);
+ I915_WRITE(_PFB_WIN_POS, dev_priv->savePFB_WIN_POS);
+
+ I915_WRITE(_TRANSBCONF, dev_priv->saveTRANSBCONF);
+ I915_WRITE(_TRANS_HTOTAL_B, dev_priv->saveTRANS_HTOTAL_B);
+ I915_WRITE(_TRANS_HBLANK_B, dev_priv->saveTRANS_HBLANK_B);
+ I915_WRITE(_TRANS_HSYNC_B, dev_priv->saveTRANS_HSYNC_B);
+ I915_WRITE(_TRANS_VTOTAL_B, dev_priv->saveTRANS_VTOTAL_B);
+ I915_WRITE(_TRANS_VBLANK_B, dev_priv->saveTRANS_VBLANK_B);
+ I915_WRITE(_TRANS_VSYNC_B, dev_priv->saveTRANS_VSYNC_B);
+ }
+
+ /* Restore plane info */
+ I915_WRITE(_DSPBSIZE, dev_priv->saveDSPBSIZE);
+ I915_WRITE(_DSPBPOS, dev_priv->saveDSPBPOS);
+ I915_WRITE(_PIPEBSRC, dev_priv->savePIPEBSRC);
+ I915_WRITE(_DSPBADDR, dev_priv->saveDSPBADDR);
+ I915_WRITE(_DSPBSTRIDE, dev_priv->saveDSPBSTRIDE);
+ if (INTEL_INFO(dev)->gen >= 4) {
+ I915_WRITE(_DSPBSURF, dev_priv->saveDSPBSURF);
+ I915_WRITE(_DSPBTILEOFF, dev_priv->saveDSPBTILEOFF);
+ }
+
+ I915_WRITE(_PIPEBCONF, dev_priv->savePIPEBCONF);
+
+ i915_restore_palette(dev, PIPE_B);
+ /* Enable the plane */
+ I915_WRITE(_DSPBCNTR, dev_priv->saveDSPBCNTR);
+ I915_WRITE(_DSPBADDR, I915_READ(_DSPBADDR));
+
+ /* Cursor state */
+ I915_WRITE(_CURAPOS, dev_priv->saveCURAPOS);
+ I915_WRITE(_CURACNTR, dev_priv->saveCURACNTR);
+ I915_WRITE(_CURABASE, dev_priv->saveCURABASE);
+ I915_WRITE(_CURBPOS, dev_priv->saveCURBPOS);
+ I915_WRITE(_CURBCNTR, dev_priv->saveCURBCNTR);
+ I915_WRITE(_CURBBASE, dev_priv->saveCURBBASE);
+ if (IS_GEN2(dev))
+ I915_WRITE(CURSIZE, dev_priv->saveCURSIZE);
+
+ return;
+}
+
+static void i915_save_display(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ /* Display arbitration control */
+ dev_priv->saveDSPARB = I915_READ(DSPARB);
+
+ /* This is only meaningful in non-KMS mode */
+ /* Don't save them in KMS mode */
+ i915_save_modeset_reg(dev);
+
+ /* CRT state */
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->saveADPA = I915_READ(PCH_ADPA);
+ } else {
+ dev_priv->saveADPA = I915_READ(ADPA);
+ }
+
+ /* LVDS state */
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->savePP_CONTROL = I915_READ(PCH_PP_CONTROL);
+ dev_priv->saveBLC_PWM_CTL = I915_READ(BLC_PWM_PCH_CTL1);
+ dev_priv->saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_PCH_CTL2);
+ dev_priv->saveBLC_CPU_PWM_CTL = I915_READ(BLC_PWM_CPU_CTL);
+ dev_priv->saveBLC_CPU_PWM_CTL2 = I915_READ(BLC_PWM_CPU_CTL2);
+ dev_priv->saveLVDS = I915_READ(PCH_LVDS);
+ } else {
+ dev_priv->savePP_CONTROL = I915_READ(PP_CONTROL);
+ dev_priv->savePFIT_PGM_RATIOS = I915_READ(PFIT_PGM_RATIOS);
+ dev_priv->saveBLC_PWM_CTL = I915_READ(BLC_PWM_CTL);
+ dev_priv->saveBLC_HIST_CTL = I915_READ(BLC_HIST_CTL);
+ if (INTEL_INFO(dev)->gen >= 4)
+ dev_priv->saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2);
+ if (IS_MOBILE(dev) && !IS_I830(dev))
+ dev_priv->saveLVDS = I915_READ(LVDS);
+ }
+
+ if (!IS_I830(dev) && !IS_845G(dev) && !HAS_PCH_SPLIT(dev))
+ dev_priv->savePFIT_CONTROL = I915_READ(PFIT_CONTROL);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->savePP_ON_DELAYS = I915_READ(PCH_PP_ON_DELAYS);
+ dev_priv->savePP_OFF_DELAYS = I915_READ(PCH_PP_OFF_DELAYS);
+ dev_priv->savePP_DIVISOR = I915_READ(PCH_PP_DIVISOR);
+ } else {
+ dev_priv->savePP_ON_DELAYS = I915_READ(PP_ON_DELAYS);
+ dev_priv->savePP_OFF_DELAYS = I915_READ(PP_OFF_DELAYS);
+ dev_priv->savePP_DIVISOR = I915_READ(PP_DIVISOR);
+ }
+
+ /* Display Port state */
+ if (SUPPORTS_INTEGRATED_DP(dev)) {
+ dev_priv->saveDP_B = I915_READ(DP_B);
+ dev_priv->saveDP_C = I915_READ(DP_C);
+ dev_priv->saveDP_D = I915_READ(DP_D);
+ dev_priv->savePIPEA_GMCH_DATA_M = I915_READ(_PIPEA_GMCH_DATA_M);
+ dev_priv->savePIPEB_GMCH_DATA_M = I915_READ(_PIPEB_GMCH_DATA_M);
+ dev_priv->savePIPEA_GMCH_DATA_N = I915_READ(_PIPEA_GMCH_DATA_N);
+ dev_priv->savePIPEB_GMCH_DATA_N = I915_READ(_PIPEB_GMCH_DATA_N);
+ dev_priv->savePIPEA_DP_LINK_M = I915_READ(_PIPEA_DP_LINK_M);
+ dev_priv->savePIPEB_DP_LINK_M = I915_READ(_PIPEB_DP_LINK_M);
+ dev_priv->savePIPEA_DP_LINK_N = I915_READ(_PIPEA_DP_LINK_N);
+ dev_priv->savePIPEB_DP_LINK_N = I915_READ(_PIPEB_DP_LINK_N);
+ }
+ /* FIXME: save TV & SDVO state */
+
+ /* Only save FBC state on the platform that supports FBC */
+ if (I915_HAS_FBC(dev)) {
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->saveDPFC_CB_BASE = I915_READ(ILK_DPFC_CB_BASE);
+ } else if (IS_GM45(dev)) {
+ dev_priv->saveDPFC_CB_BASE = I915_READ(DPFC_CB_BASE);
+ } else {
+ dev_priv->saveFBC_CFB_BASE = I915_READ(FBC_CFB_BASE);
+ dev_priv->saveFBC_LL_BASE = I915_READ(FBC_LL_BASE);
+ dev_priv->saveFBC_CONTROL2 = I915_READ(FBC_CONTROL2);
+ dev_priv->saveFBC_CONTROL = I915_READ(FBC_CONTROL);
+ }
+ }
+
+ /* VGA state */
+ dev_priv->saveVGA0 = I915_READ(VGA0);
+ dev_priv->saveVGA1 = I915_READ(VGA1);
+ dev_priv->saveVGA_PD = I915_READ(VGA_PD);
+ if (HAS_PCH_SPLIT(dev))
+ dev_priv->saveVGACNTRL = I915_READ(CPU_VGACNTRL);
+ else
+ dev_priv->saveVGACNTRL = I915_READ(VGACNTRL);
+
+ i915_save_vga(dev);
+}
+
+static void i915_restore_display(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ /* Display arbitration */
+ I915_WRITE(DSPARB, dev_priv->saveDSPARB);
+
+ /* Display port ratios (must be done before clock is set) */
+ if (SUPPORTS_INTEGRATED_DP(dev)) {
+ I915_WRITE(_PIPEA_GMCH_DATA_M, dev_priv->savePIPEA_GMCH_DATA_M);
+ I915_WRITE(_PIPEB_GMCH_DATA_M, dev_priv->savePIPEB_GMCH_DATA_M);
+ I915_WRITE(_PIPEA_GMCH_DATA_N, dev_priv->savePIPEA_GMCH_DATA_N);
+ I915_WRITE(_PIPEB_GMCH_DATA_N, dev_priv->savePIPEB_GMCH_DATA_N);
+ I915_WRITE(_PIPEA_DP_LINK_M, dev_priv->savePIPEA_DP_LINK_M);
+ I915_WRITE(_PIPEB_DP_LINK_M, dev_priv->savePIPEB_DP_LINK_M);
+ I915_WRITE(_PIPEA_DP_LINK_N, dev_priv->savePIPEA_DP_LINK_N);
+ I915_WRITE(_PIPEB_DP_LINK_N, dev_priv->savePIPEB_DP_LINK_N);
+ }
+
+ /* This is only meaningful in non-KMS mode */
+ /* Don't restore them in KMS mode */
+ i915_restore_modeset_reg(dev);
+
+ /* CRT state */
+ if (HAS_PCH_SPLIT(dev))
+ I915_WRITE(PCH_ADPA, dev_priv->saveADPA);
+ else
+ I915_WRITE(ADPA, dev_priv->saveADPA);
+
+ /* LVDS state */
+ if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev))
+ I915_WRITE(BLC_PWM_CTL2, dev_priv->saveBLC_PWM_CTL2);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(PCH_LVDS, dev_priv->saveLVDS);
+ } else if (IS_MOBILE(dev) && !IS_I830(dev))
+ I915_WRITE(LVDS, dev_priv->saveLVDS);
+
+ if (!IS_I830(dev) && !IS_845G(dev) && !HAS_PCH_SPLIT(dev))
+ I915_WRITE(PFIT_CONTROL, dev_priv->savePFIT_CONTROL);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(BLC_PWM_PCH_CTL1, dev_priv->saveBLC_PWM_CTL);
+ I915_WRITE(BLC_PWM_PCH_CTL2, dev_priv->saveBLC_PWM_CTL2);
+ I915_WRITE(BLC_PWM_CPU_CTL, dev_priv->saveBLC_CPU_PWM_CTL);
+ I915_WRITE(BLC_PWM_CPU_CTL2, dev_priv->saveBLC_CPU_PWM_CTL2);
+ I915_WRITE(PCH_PP_ON_DELAYS, dev_priv->savePP_ON_DELAYS);
+ I915_WRITE(PCH_PP_OFF_DELAYS, dev_priv->savePP_OFF_DELAYS);
+ I915_WRITE(PCH_PP_DIVISOR, dev_priv->savePP_DIVISOR);
+ I915_WRITE(PCH_PP_CONTROL, dev_priv->savePP_CONTROL);
+ I915_WRITE(RSTDBYCTL,
+ dev_priv->saveMCHBAR_RENDER_STANDBY);
+ } else {
+ I915_WRITE(PFIT_PGM_RATIOS, dev_priv->savePFIT_PGM_RATIOS);
+ I915_WRITE(BLC_PWM_CTL, dev_priv->saveBLC_PWM_CTL);
+ I915_WRITE(BLC_HIST_CTL, dev_priv->saveBLC_HIST_CTL);
+ I915_WRITE(PP_ON_DELAYS, dev_priv->savePP_ON_DELAYS);
+ I915_WRITE(PP_OFF_DELAYS, dev_priv->savePP_OFF_DELAYS);
+ I915_WRITE(PP_DIVISOR, dev_priv->savePP_DIVISOR);
+ I915_WRITE(PP_CONTROL, dev_priv->savePP_CONTROL);
+ }
+
+ /* Display Port state */
+ if (SUPPORTS_INTEGRATED_DP(dev)) {
+ I915_WRITE(DP_B, dev_priv->saveDP_B);
+ I915_WRITE(DP_C, dev_priv->saveDP_C);
+ I915_WRITE(DP_D, dev_priv->saveDP_D);
+ }
+ /* FIXME: restore TV & SDVO state */
+
+ /* only restore FBC info on the platform that supports FBC*/
+ intel_disable_fbc(dev);
+ if (I915_HAS_FBC(dev)) {
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(ILK_DPFC_CB_BASE, dev_priv->saveDPFC_CB_BASE);
+ } else if (IS_GM45(dev)) {
+ I915_WRITE(DPFC_CB_BASE, dev_priv->saveDPFC_CB_BASE);
+ } else {
+ I915_WRITE(FBC_CFB_BASE, dev_priv->saveFBC_CFB_BASE);
+ I915_WRITE(FBC_LL_BASE, dev_priv->saveFBC_LL_BASE);
+ I915_WRITE(FBC_CONTROL2, dev_priv->saveFBC_CONTROL2);
+ I915_WRITE(FBC_CONTROL, dev_priv->saveFBC_CONTROL);
+ }
+ }
+ /* VGA state */
+ if (HAS_PCH_SPLIT(dev))
+ I915_WRITE(CPU_VGACNTRL, dev_priv->saveVGACNTRL);
+ else
+ I915_WRITE(VGACNTRL, dev_priv->saveVGACNTRL);
+
+ I915_WRITE(VGA0, dev_priv->saveVGA0);
+ I915_WRITE(VGA1, dev_priv->saveVGA1);
+ I915_WRITE(VGA_PD, dev_priv->saveVGA_PD);
+ POSTING_READ(VGA_PD);
+ DRM_UDELAY(150);
+
+ i915_restore_vga(dev);
+}
+
+int i915_save_state(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i;
+
+ dev_priv->saveLBB = pci_read_config(dev->device, LBB, 1);
+
+ /* Hardware status page */
+ dev_priv->saveHWS = I915_READ(HWS_PGA);
+
+ i915_save_display(dev);
+
+ /* Interrupt state */
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->saveDEIER = I915_READ(DEIER);
+ dev_priv->saveDEIMR = I915_READ(DEIMR);
+ dev_priv->saveGTIER = I915_READ(GTIER);
+ dev_priv->saveGTIMR = I915_READ(GTIMR);
+ dev_priv->saveFDI_RXA_IMR = I915_READ(_FDI_RXA_IMR);
+ dev_priv->saveFDI_RXB_IMR = I915_READ(_FDI_RXB_IMR);
+ dev_priv->saveMCHBAR_RENDER_STANDBY =
+ I915_READ(RSTDBYCTL);
+ dev_priv->savePCH_PORT_HOTPLUG = I915_READ(PCH_PORT_HOTPLUG);
+ } else {
+ dev_priv->saveIER = I915_READ(IER);
+ dev_priv->saveIMR = I915_READ(IMR);
+ }
+
+ if (IS_IRONLAKE_M(dev))
+ ironlake_disable_drps(dev);
+ if (INTEL_INFO(dev)->gen >= 6)
+ gen6_disable_rps(dev);
+
+ /* Cache mode state */
+ dev_priv->saveCACHE_MODE_0 = I915_READ(CACHE_MODE_0);
+
+ /* Memory Arbitration state */
+ dev_priv->saveMI_ARB_STATE = I915_READ(MI_ARB_STATE);
+
+ /* Scratch space */
+ for (i = 0; i < 16; i++) {
+ dev_priv->saveSWF0[i] = I915_READ(SWF00 + (i << 2));
+ dev_priv->saveSWF1[i] = I915_READ(SWF10 + (i << 2));
+ }
+ for (i = 0; i < 3; i++)
+ dev_priv->saveSWF2[i] = I915_READ(SWF30 + (i << 2));
+
+ return 0;
+}
+
+int i915_restore_state(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i;
+
+ pci_write_config(dev->device, LBB, dev_priv->saveLBB, 1);
+
+
+ /* Hardware status page */
+ I915_WRITE(HWS_PGA, dev_priv->saveHWS);
+
+ i915_restore_display(dev);
+
+ /* Interrupt state */
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(DEIER, dev_priv->saveDEIER);
+ I915_WRITE(DEIMR, dev_priv->saveDEIMR);
+ I915_WRITE(GTIER, dev_priv->saveGTIER);
+ I915_WRITE(GTIMR, dev_priv->saveGTIMR);
+ I915_WRITE(_FDI_RXA_IMR, dev_priv->saveFDI_RXA_IMR);
+ I915_WRITE(_FDI_RXB_IMR, dev_priv->saveFDI_RXB_IMR);
+ I915_WRITE(PCH_PORT_HOTPLUG, dev_priv->savePCH_PORT_HOTPLUG);
+ } else {
+ I915_WRITE(IER, dev_priv->saveIER);
+ I915_WRITE(IMR, dev_priv->saveIMR);
+ }
+ DRM_UNLOCK(dev);
+
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ intel_init_clock_gating(dev);
+
+ if (IS_IRONLAKE_M(dev)) {
+ ironlake_enable_drps(dev);
+ intel_init_emon(dev);
+ }
+
+ if (INTEL_INFO(dev)->gen >= 6) {
+ gen6_enable_rps(dev_priv);
+ gen6_update_ring_freq(dev_priv);
+ }
+
+ DRM_LOCK(dev);
+
+ /* Cache mode state */
+ I915_WRITE(CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000);
+
+ /* Memory arbitration state */
+ I915_WRITE(MI_ARB_STATE, dev_priv->saveMI_ARB_STATE | 0xffff0000);
+
+ for (i = 0; i < 16; i++) {
+ I915_WRITE(SWF00 + (i << 2), dev_priv->saveSWF0[i]);
+ I915_WRITE(SWF10 + (i << 2), dev_priv->saveSWF1[i]);
+ }
+ for (i = 0; i < 3; i++)
+ I915_WRITE(SWF30 + (i << 2), dev_priv->saveSWF2[i]);
+
+ intel_iic_reset(dev);
+
+ return 0;
+}
diff --git a/sys/dev/drm2/i915/intel_bios.c b/sys/dev/drm2/i915/intel_bios.c
new file mode 100644
index 000000000000..8bf38a5722c1
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_bios.c
@@ -0,0 +1,737 @@
+/*
+ * Copyright © 2006 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ *
+ * $FreeBSD$
+ */
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_dp_helper.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_bios.h>
+
+#define SLAVE_ADDR1 0x70
+#define SLAVE_ADDR2 0x72
+
+static int panel_type;
+
+static void *
+find_section(struct bdb_header *bdb, int section_id)
+{
+ u8 *base = (u8 *)bdb;
+ int index = 0;
+ u16 total, current_size;
+ u8 current_id;
+
+ /* skip to first section */
+ index += bdb->header_size;
+ total = bdb->bdb_size;
+
+ /* walk the sections looking for section_id */
+ while (index < total) {
+ current_id = *(base + index);
+ index++;
+ current_size = *((u16 *)(base + index));
+ index += 2;
+ if (current_id == section_id)
+ return base + index;
+ index += current_size;
+ }
+
+ return NULL;
+}
+
+static u16
+get_blocksize(void *p)
+{
+ u16 *block_ptr, block_size;
+
+ block_ptr = (u16 *)((char *)p - 2);
+ block_size = *block_ptr;
+ return block_size;
+}
+
+static void
+fill_detail_timing_data(struct drm_display_mode *panel_fixed_mode,
+ const struct lvds_dvo_timing *dvo_timing)
+{
+ panel_fixed_mode->hdisplay = (dvo_timing->hactive_hi << 8) |
+ dvo_timing->hactive_lo;
+ panel_fixed_mode->hsync_start = panel_fixed_mode->hdisplay +
+ ((dvo_timing->hsync_off_hi << 8) | dvo_timing->hsync_off_lo);
+ panel_fixed_mode->hsync_end = panel_fixed_mode->hsync_start +
+ dvo_timing->hsync_pulse_width;
+ panel_fixed_mode->htotal = panel_fixed_mode->hdisplay +
+ ((dvo_timing->hblank_hi << 8) | dvo_timing->hblank_lo);
+
+ panel_fixed_mode->vdisplay = (dvo_timing->vactive_hi << 8) |
+ dvo_timing->vactive_lo;
+ panel_fixed_mode->vsync_start = panel_fixed_mode->vdisplay +
+ dvo_timing->vsync_off;
+ panel_fixed_mode->vsync_end = panel_fixed_mode->vsync_start +
+ dvo_timing->vsync_pulse_width;
+ panel_fixed_mode->vtotal = panel_fixed_mode->vdisplay +
+ ((dvo_timing->vblank_hi << 8) | dvo_timing->vblank_lo);
+ panel_fixed_mode->clock = dvo_timing->clock * 10;
+ panel_fixed_mode->type = DRM_MODE_TYPE_PREFERRED;
+
+ if (dvo_timing->hsync_positive)
+ panel_fixed_mode->flags |= DRM_MODE_FLAG_PHSYNC;
+ else
+ panel_fixed_mode->flags |= DRM_MODE_FLAG_NHSYNC;
+
+ if (dvo_timing->vsync_positive)
+ panel_fixed_mode->flags |= DRM_MODE_FLAG_PVSYNC;
+ else
+ panel_fixed_mode->flags |= DRM_MODE_FLAG_NVSYNC;
+
+ /* Some VBTs have bogus h/vtotal values */
+ if (panel_fixed_mode->hsync_end > panel_fixed_mode->htotal)
+ panel_fixed_mode->htotal = panel_fixed_mode->hsync_end + 1;
+ if (panel_fixed_mode->vsync_end > panel_fixed_mode->vtotal)
+ panel_fixed_mode->vtotal = panel_fixed_mode->vsync_end + 1;
+
+ drm_mode_set_name(panel_fixed_mode);
+}
+
+static bool
+lvds_dvo_timing_equal_size(const struct lvds_dvo_timing *a,
+ const struct lvds_dvo_timing *b)
+{
+ if (a->hactive_hi != b->hactive_hi ||
+ a->hactive_lo != b->hactive_lo)
+ return false;
+
+ if (a->hsync_off_hi != b->hsync_off_hi ||
+ a->hsync_off_lo != b->hsync_off_lo)
+ return false;
+
+ if (a->hsync_pulse_width != b->hsync_pulse_width)
+ return false;
+
+ if (a->hblank_hi != b->hblank_hi ||
+ a->hblank_lo != b->hblank_lo)
+ return false;
+
+ if (a->vactive_hi != b->vactive_hi ||
+ a->vactive_lo != b->vactive_lo)
+ return false;
+
+ if (a->vsync_off != b->vsync_off)
+ return false;
+
+ if (a->vsync_pulse_width != b->vsync_pulse_width)
+ return false;
+
+ if (a->vblank_hi != b->vblank_hi ||
+ a->vblank_lo != b->vblank_lo)
+ return false;
+
+ return true;
+}
+
+static const struct lvds_dvo_timing *
+get_lvds_dvo_timing(const struct bdb_lvds_lfp_data *lvds_lfp_data,
+ const struct bdb_lvds_lfp_data_ptrs *lvds_lfp_data_ptrs,
+ int index)
+{
+ /*
+ * the size of fp_timing varies on the different platform.
+ * So calculate the DVO timing relative offset in LVDS data
+ * entry to get the DVO timing entry
+ */
+
+ int lfp_data_size =
+ lvds_lfp_data_ptrs->ptr[1].dvo_timing_offset -
+ lvds_lfp_data_ptrs->ptr[0].dvo_timing_offset;
+ int dvo_timing_offset =
+ lvds_lfp_data_ptrs->ptr[0].dvo_timing_offset -
+ lvds_lfp_data_ptrs->ptr[0].fp_timing_offset;
+ const char *entry = (const char *)lvds_lfp_data->data +
+ lfp_data_size * index;
+
+ return (const struct lvds_dvo_timing *)(entry + dvo_timing_offset);
+}
+
+/* Try to find integrated panel data */
+static void
+parse_lfp_panel_data(struct drm_i915_private *dev_priv,
+ struct bdb_header *bdb)
+{
+ const struct bdb_lvds_options *lvds_options;
+ const struct bdb_lvds_lfp_data *lvds_lfp_data;
+ const struct bdb_lvds_lfp_data_ptrs *lvds_lfp_data_ptrs;
+ const struct lvds_dvo_timing *panel_dvo_timing;
+ struct drm_display_mode *panel_fixed_mode;
+ int i, downclock;
+
+ lvds_options = find_section(bdb, BDB_LVDS_OPTIONS);
+ if (!lvds_options)
+ return;
+
+ dev_priv->lvds_dither = lvds_options->pixel_dither;
+ if (lvds_options->panel_type == 0xff)
+ return;
+
+ panel_type = lvds_options->panel_type;
+
+ lvds_lfp_data = find_section(bdb, BDB_LVDS_LFP_DATA);
+ if (!lvds_lfp_data)
+ return;
+
+ lvds_lfp_data_ptrs = find_section(bdb, BDB_LVDS_LFP_DATA_PTRS);
+ if (!lvds_lfp_data_ptrs)
+ return;
+
+ dev_priv->lvds_vbt = 1;
+
+ panel_dvo_timing = get_lvds_dvo_timing(lvds_lfp_data,
+ lvds_lfp_data_ptrs,
+ lvds_options->panel_type);
+
+ panel_fixed_mode = malloc(sizeof(*panel_fixed_mode), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ fill_detail_timing_data(panel_fixed_mode, panel_dvo_timing);
+
+ dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode;
+
+ DRM_DEBUG_KMS("Found panel mode in BIOS VBT tables:\n");
+ drm_mode_debug_printmodeline(panel_fixed_mode);
+
+ /*
+ * Iterate over the LVDS panel timing info to find the lowest clock
+ * for the native resolution.
+ */
+ downclock = panel_dvo_timing->clock;
+ for (i = 0; i < 16; i++) {
+ const struct lvds_dvo_timing *dvo_timing;
+
+ dvo_timing = get_lvds_dvo_timing(lvds_lfp_data,
+ lvds_lfp_data_ptrs,
+ i);
+ if (lvds_dvo_timing_equal_size(dvo_timing, panel_dvo_timing) &&
+ dvo_timing->clock < downclock)
+ downclock = dvo_timing->clock;
+ }
+
+ if (downclock < panel_dvo_timing->clock && i915_lvds_downclock) {
+ dev_priv->lvds_downclock_avail = 1;
+ dev_priv->lvds_downclock = downclock * 10;
+ DRM_DEBUG("LVDS downclock is found in VBT. "
+ "Normal Clock %dKHz, downclock %dKHz\n",
+ panel_fixed_mode->clock, 10 * downclock);
+ }
+}
+
+/* Try to find sdvo panel data */
+static void
+parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
+ struct bdb_header *bdb)
+{
+ struct lvds_dvo_timing *dvo_timing;
+ struct drm_display_mode *panel_fixed_mode;
+ int index;
+
+ index = i915_vbt_sdvo_panel_type;
+ if (index == -1) {
+ struct bdb_sdvo_lvds_options *sdvo_lvds_options;
+
+ sdvo_lvds_options = find_section(bdb, BDB_SDVO_LVDS_OPTIONS);
+ if (!sdvo_lvds_options)
+ return;
+
+ index = sdvo_lvds_options->panel_type;
+ }
+
+ dvo_timing = find_section(bdb, BDB_SDVO_PANEL_DTDS);
+ if (!dvo_timing)
+ return;
+
+ panel_fixed_mode = malloc(sizeof(*panel_fixed_mode), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ fill_detail_timing_data(panel_fixed_mode, dvo_timing + index);
+
+ dev_priv->sdvo_lvds_vbt_mode = panel_fixed_mode;
+
+ DRM_DEBUG_KMS("Found SDVO panel mode in BIOS VBT tables:\n");
+ drm_mode_debug_printmodeline(panel_fixed_mode);
+}
+
+static int intel_bios_ssc_frequency(struct drm_device *dev,
+ bool alternate)
+{
+ switch (INTEL_INFO(dev)->gen) {
+ case 2:
+ return alternate ? 66 : 48;
+ case 3:
+ case 4:
+ return alternate ? 100 : 96;
+ default:
+ return alternate ? 100 : 120;
+ }
+}
+
+static void
+parse_general_features(struct drm_i915_private *dev_priv,
+ struct bdb_header *bdb)
+{
+ struct drm_device *dev = dev_priv->dev;
+ struct bdb_general_features *general;
+
+ general = find_section(bdb, BDB_GENERAL_FEATURES);
+ if (general) {
+ dev_priv->int_tv_support = general->int_tv_support;
+ dev_priv->int_crt_support = general->int_crt_support;
+ dev_priv->lvds_use_ssc = general->enable_ssc;
+ dev_priv->lvds_ssc_freq =
+ intel_bios_ssc_frequency(dev, general->ssc_freq);
+ dev_priv->display_clock_mode = general->display_clock_mode;
+ DRM_DEBUG_KMS("BDB_GENERAL_FEATURES int_tv_support %d int_crt_support %d lvds_use_ssc %d lvds_ssc_freq %d display_clock_mode %d\n",
+ dev_priv->int_tv_support,
+ dev_priv->int_crt_support,
+ dev_priv->lvds_use_ssc,
+ dev_priv->lvds_ssc_freq,
+ dev_priv->display_clock_mode);
+ }
+}
+
+static void
+parse_general_definitions(struct drm_i915_private *dev_priv,
+ struct bdb_header *bdb)
+{
+ struct bdb_general_definitions *general;
+
+ general = find_section(bdb, BDB_GENERAL_DEFINITIONS);
+ if (general) {
+ u16 block_size = get_blocksize(general);
+ if (block_size >= sizeof(*general)) {
+ int bus_pin = general->crt_ddc_gmbus_pin;
+ DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin);
+ if (bus_pin >= 1 && bus_pin <= 6)
+ dev_priv->crt_ddc_pin = bus_pin;
+ } else {
+ DRM_DEBUG_KMS("BDB_GD too small (%d). Invalid.\n",
+ block_size);
+ }
+ }
+}
+
+static void
+parse_sdvo_device_mapping(struct drm_i915_private *dev_priv,
+ struct bdb_header *bdb)
+{
+ struct sdvo_device_mapping *p_mapping;
+ struct bdb_general_definitions *p_defs;
+ struct child_device_config *p_child;
+ int i, child_device_num, count;
+ u16 block_size;
+
+ p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
+ if (!p_defs) {
+ DRM_DEBUG_KMS("No general definition block is found, unable to construct sdvo mapping.\n");
+ return;
+ }
+ /* judge whether the size of child device meets the requirements.
+ * If the child device size obtained from general definition block
+ * is different with sizeof(struct child_device_config), skip the
+ * parsing of sdvo device info
+ */
+ if (p_defs->child_dev_size != sizeof(*p_child)) {
+ /* different child dev size . Ignore it */
+ DRM_DEBUG_KMS("different child size is found. Invalid.\n");
+ return;
+ }
+ /* get the block size of general definitions */
+ block_size = get_blocksize(p_defs);
+ /* get the number of child device */
+ child_device_num = (block_size - sizeof(*p_defs)) /
+ sizeof(*p_child);
+ count = 0;
+ for (i = 0; i < child_device_num; i++) {
+ p_child = &(p_defs->devices[i]);
+ if (!p_child->device_type) {
+ /* skip the device block if device type is invalid */
+ continue;
+ }
+ if (p_child->slave_addr != SLAVE_ADDR1 &&
+ p_child->slave_addr != SLAVE_ADDR2) {
+ /*
+ * If the slave address is neither 0x70 nor 0x72,
+ * it is not a SDVO device. Skip it.
+ */
+ continue;
+ }
+ if (p_child->dvo_port != DEVICE_PORT_DVOB &&
+ p_child->dvo_port != DEVICE_PORT_DVOC) {
+ /* skip the incorrect SDVO port */
+ DRM_DEBUG_KMS("Incorrect SDVO port. Skip it\n");
+ continue;
+ }
+ DRM_DEBUG_KMS("the SDVO device with slave addr %2x is found on"
+ " %s port\n",
+ p_child->slave_addr,
+ (p_child->dvo_port == DEVICE_PORT_DVOB) ?
+ "SDVOB" : "SDVOC");
+ p_mapping = &(dev_priv->sdvo_mappings[p_child->dvo_port - 1]);
+ if (!p_mapping->initialized) {
+ p_mapping->dvo_port = p_child->dvo_port;
+ p_mapping->slave_addr = p_child->slave_addr;
+ p_mapping->dvo_wiring = p_child->dvo_wiring;
+ p_mapping->ddc_pin = p_child->ddc_pin;
+ p_mapping->i2c_pin = p_child->i2c_pin;
+ p_mapping->initialized = 1;
+ DRM_DEBUG_KMS("SDVO device: dvo=%x, addr=%x, wiring=%d, ddc_pin=%d, i2c_pin=%d\n",
+ p_mapping->dvo_port,
+ p_mapping->slave_addr,
+ p_mapping->dvo_wiring,
+ p_mapping->ddc_pin,
+ p_mapping->i2c_pin);
+ } else {
+ DRM_DEBUG_KMS("Maybe one SDVO port is shared by "
+ "two SDVO device.\n");
+ }
+ if (p_child->slave2_addr) {
+ /* Maybe this is a SDVO device with multiple inputs */
+ /* And the mapping info is not added */
+ DRM_DEBUG_KMS("there exists the slave2_addr. Maybe this"
+ " is a SDVO device with multiple inputs.\n");
+ }
+ count++;
+ }
+
+ if (!count) {
+ /* No SDVO device info is found */
+ DRM_DEBUG_KMS("No SDVO device info is found in VBT\n");
+ }
+ return;
+}
+
+static void
+parse_driver_features(struct drm_i915_private *dev_priv,
+ struct bdb_header *bdb)
+{
+ struct drm_device *dev = dev_priv->dev;
+ struct bdb_driver_features *driver;
+
+ driver = find_section(bdb, BDB_DRIVER_FEATURES);
+ if (!driver)
+ return;
+
+ if (SUPPORTS_EDP(dev) &&
+ driver->lvds_config == BDB_DRIVER_FEATURE_EDP)
+ dev_priv->edp.support = 1;
+
+ if (driver->dual_frequency)
+ dev_priv->render_reclock_avail = true;
+}
+
+static void
+parse_edp(struct drm_i915_private *dev_priv, struct bdb_header *bdb)
+{
+ struct bdb_edp *edp;
+ struct edp_power_seq *edp_pps;
+ struct edp_link_params *edp_link_params;
+
+ edp = find_section(bdb, BDB_EDP);
+ if (!edp) {
+ if (SUPPORTS_EDP(dev_priv->dev) && dev_priv->edp.support) {
+ DRM_DEBUG_KMS("No eDP BDB found but eDP panel "
+ "supported, assume %dbpp panel color "
+ "depth.\n",
+ dev_priv->edp.bpp);
+ }
+ return;
+ }
+
+ switch ((edp->color_depth >> (panel_type * 2)) & 3) {
+ case EDP_18BPP:
+ dev_priv->edp.bpp = 18;
+ break;
+ case EDP_24BPP:
+ dev_priv->edp.bpp = 24;
+ break;
+ case EDP_30BPP:
+ dev_priv->edp.bpp = 30;
+ break;
+ }
+
+ /* Get the eDP sequencing and link info */
+ edp_pps = &edp->power_seqs[panel_type];
+ edp_link_params = &edp->link_params[panel_type];
+
+ dev_priv->edp.pps = *edp_pps;
+
+ dev_priv->edp.rate = edp_link_params->rate ? DP_LINK_BW_2_7 :
+ DP_LINK_BW_1_62;
+ switch (edp_link_params->lanes) {
+ case 0:
+ dev_priv->edp.lanes = 1;
+ break;
+ case 1:
+ dev_priv->edp.lanes = 2;
+ break;
+ case 3:
+ default:
+ dev_priv->edp.lanes = 4;
+ break;
+ }
+ switch (edp_link_params->preemphasis) {
+ case 0:
+ dev_priv->edp.preemphasis = DP_TRAIN_PRE_EMPHASIS_0;
+ break;
+ case 1:
+ dev_priv->edp.preemphasis = DP_TRAIN_PRE_EMPHASIS_3_5;
+ break;
+ case 2:
+ dev_priv->edp.preemphasis = DP_TRAIN_PRE_EMPHASIS_6;
+ break;
+ case 3:
+ dev_priv->edp.preemphasis = DP_TRAIN_PRE_EMPHASIS_9_5;
+ break;
+ }
+ switch (edp_link_params->vswing) {
+ case 0:
+ dev_priv->edp.vswing = DP_TRAIN_VOLTAGE_SWING_400;
+ break;
+ case 1:
+ dev_priv->edp.vswing = DP_TRAIN_VOLTAGE_SWING_600;
+ break;
+ case 2:
+ dev_priv->edp.vswing = DP_TRAIN_VOLTAGE_SWING_800;
+ break;
+ case 3:
+ dev_priv->edp.vswing = DP_TRAIN_VOLTAGE_SWING_1200;
+ break;
+ }
+}
+
+static void
+parse_device_mapping(struct drm_i915_private *dev_priv,
+ struct bdb_header *bdb)
+{
+ struct bdb_general_definitions *p_defs;
+ struct child_device_config *p_child, *child_dev_ptr;
+ int i, child_device_num, count;
+ u16 block_size;
+
+ p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
+ if (!p_defs) {
+ DRM_DEBUG_KMS("No general definition block is found, no devices defined.\n");
+ return;
+ }
+ /* judge whether the size of child device meets the requirements.
+ * If the child device size obtained from general definition block
+ * is different with sizeof(struct child_device_config), skip the
+ * parsing of sdvo device info
+ */
+ if (p_defs->child_dev_size != sizeof(*p_child)) {
+ /* different child dev size . Ignore it */
+ DRM_DEBUG_KMS("different child size is found. Invalid.\n");
+ return;
+ }
+ /* get the block size of general definitions */
+ block_size = get_blocksize(p_defs);
+ /* get the number of child device */
+ child_device_num = (block_size - sizeof(*p_defs)) /
+ sizeof(*p_child);
+ count = 0;
+ /* get the number of child device that is present */
+ for (i = 0; i < child_device_num; i++) {
+ p_child = &(p_defs->devices[i]);
+ if (!p_child->device_type) {
+ /* skip the device block if device type is invalid */
+ continue;
+ }
+ count++;
+ }
+ if (!count) {
+ DRM_DEBUG_KMS("no child dev is parsed from VBT\n");
+ return;
+ }
+ dev_priv->child_dev = malloc(sizeof(*p_child) * count, DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ dev_priv->child_dev_num = count;
+ count = 0;
+ for (i = 0; i < child_device_num; i++) {
+ p_child = &(p_defs->devices[i]);
+ if (!p_child->device_type) {
+ /* skip the device block if device type is invalid */
+ continue;
+ }
+ child_dev_ptr = dev_priv->child_dev + count;
+ count++;
+ memcpy((void *)child_dev_ptr, (void *)p_child,
+ sizeof(*p_child));
+ }
+ return;
+}
+
+static void
+init_vbt_defaults(struct drm_i915_private *dev_priv)
+{
+ struct drm_device *dev = dev_priv->dev;
+
+ dev_priv->crt_ddc_pin = GMBUS_PORT_VGADDC;
+
+ /* LFP panel data */
+ dev_priv->lvds_dither = 1;
+ dev_priv->lvds_vbt = 0;
+
+ /* SDVO panel data */
+ dev_priv->sdvo_lvds_vbt_mode = NULL;
+
+ /* general features */
+ dev_priv->int_tv_support = 1;
+ dev_priv->int_crt_support = 1;
+
+ /* Default to using SSC */
+ dev_priv->lvds_use_ssc = 1;
+ dev_priv->lvds_ssc_freq = intel_bios_ssc_frequency(dev, 1);
+ DRM_DEBUG_KMS("Set default to SSC at %dMHz\n", dev_priv->lvds_ssc_freq);
+
+ /* eDP data */
+ dev_priv->edp.bpp = 18;
+}
+
+static int intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
+{
+ DRM_DEBUG_KMS("Falling back to manually reading VBT from "
+ "VBIOS ROM for %s\n",
+ id->ident);
+ return 1;
+}
+
+static const struct dmi_system_id intel_no_opregion_vbt[] = {
+ {
+ .callback = intel_no_opregion_vbt_callback,
+ .ident = "ThinkCentre A57",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "97027RG"),
+ },
+ },
+ { }
+};
+
+/**
+ * intel_parse_bios - find VBT and initialize settings from the BIOS
+ * @dev: DRM device
+ *
+ * Loads the Video BIOS and checks that the VBT exists. Sets scratch registers
+ * to appropriate values.
+ *
+ * Returns 0 on success, nonzero on failure.
+ */
+bool
+intel_parse_bios(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct bdb_header *bdb = NULL;
+ u8 *bios;
+
+ init_vbt_defaults(dev_priv);
+
+ /* XXX Should this validation be moved to intel_opregion.c? */
+ if (!dmi_check_system(intel_no_opregion_vbt) && dev_priv->opregion.vbt) {
+ struct vbt_header *vbt = dev_priv->opregion.vbt;
+ if (memcmp(vbt->signature, "$VBT", 4) == 0) {
+ DRM_DEBUG_KMS("Using VBT from OpRegion: %20s\n",
+ vbt->signature);
+ bdb = (struct bdb_header *)((char *)vbt + vbt->bdb_offset);
+ } else
+ dev_priv->opregion.vbt = NULL;
+ }
+ bios = NULL;
+
+#if 1
+ if (bdb == NULL) {
+ KIB_NOTYET();
+ return (-1);
+ }
+#else
+ if (bdb == NULL) {
+ struct vbt_header *vbt = NULL;
+ size_t size;
+ int i;
+
+ bios = pci_map_rom(pdev, &size);
+ if (!bios)
+ return -1;
+
+ /* Scour memory looking for the VBT signature */
+ for (i = 0; i + 4 < size; i++) {
+ if (!memcmp(bios + i, "$VBT", 4)) {
+ vbt = (struct vbt_header *)(bios + i);
+ break;
+ }
+ }
+
+ if (!vbt) {
+ DRM_DEBUG_DRIVER("VBT signature missing\n");
+ pci_unmap_rom(pdev, bios);
+ return -1;
+ }
+
+ bdb = (struct bdb_header *)(bios + i + vbt->bdb_offset);
+ }
+#endif
+
+ /* Grab useful general definitions */
+ parse_general_features(dev_priv, bdb);
+ parse_general_definitions(dev_priv, bdb);
+ parse_lfp_panel_data(dev_priv, bdb);
+ parse_sdvo_panel_data(dev_priv, bdb);
+ parse_sdvo_device_mapping(dev_priv, bdb);
+ parse_device_mapping(dev_priv, bdb);
+ parse_driver_features(dev_priv, bdb);
+ parse_edp(dev_priv, bdb);
+
+#if 0
+ if (bios)
+ pci_unmap_rom(pdev, bios);
+#endif
+
+ return 0;
+}
+
+/* Ensure that vital registers have been initialised, even if the BIOS
+ * is absent or just failing to do its job.
+ */
+void intel_setup_bios(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ /* Set the Panel Power On/Off timings if uninitialized. */
+ if ((I915_READ(PP_ON_DELAYS) == 0) && (I915_READ(PP_OFF_DELAYS) == 0)) {
+ /* Set T2 to 40ms and T5 to 200ms */
+ I915_WRITE(PP_ON_DELAYS, 0x019007d0);
+
+ /* Set T3 to 35ms and Tx to 200ms */
+ I915_WRITE(PP_OFF_DELAYS, 0x015e07d0);
+ }
+}
diff --git a/sys/dev/drm2/i915/intel_bios.h b/sys/dev/drm2/i915/intel_bios.h
new file mode 100644
index 000000000000..186409c5e833
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_bios.h
@@ -0,0 +1,620 @@
+/*
+ * Copyright © 2006 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _I830_BIOS_H_
+#define _I830_BIOS_H_
+
+#include <dev/drm2/drmP.h>
+
+struct vbt_header {
+ u8 signature[20]; /**< Always starts with 'VBT$' */
+ u16 version; /**< decimal */
+ u16 header_size; /**< in bytes */
+ u16 vbt_size; /**< in bytes */
+ u8 vbt_checksum;
+ u8 reserved0;
+ u32 bdb_offset; /**< from beginning of VBT */
+ u32 aim_offset[4]; /**< from beginning of VBT */
+} __attribute__((packed));
+
+struct bdb_header {
+ u8 signature[16]; /**< Always 'BIOS_DATA_BLOCK' */
+ u16 version; /**< decimal */
+ u16 header_size; /**< in bytes */
+ u16 bdb_size; /**< in bytes */
+};
+
+/* strictly speaking, this is a "skip" block, but it has interesting info */
+struct vbios_data {
+ u8 type; /* 0 == desktop, 1 == mobile */
+ u8 relstage;
+ u8 chipset;
+ u8 lvds_present:1;
+ u8 tv_present:1;
+ u8 rsvd2:6; /* finish byte */
+ u8 rsvd3[4];
+ u8 signon[155];
+ u8 copyright[61];
+ u16 code_segment;
+ u8 dos_boot_mode;
+ u8 bandwidth_percent;
+ u8 rsvd4; /* popup memory size */
+ u8 resize_pci_bios;
+ u8 rsvd5; /* is crt already on ddc2 */
+} __attribute__((packed));
+
+/*
+ * There are several types of BIOS data blocks (BDBs), each block has
+ * an ID and size in the first 3 bytes (ID in first, size in next 2).
+ * Known types are listed below.
+ */
+#define BDB_GENERAL_FEATURES 1
+#define BDB_GENERAL_DEFINITIONS 2
+#define BDB_OLD_TOGGLE_LIST 3
+#define BDB_MODE_SUPPORT_LIST 4
+#define BDB_GENERIC_MODE_TABLE 5
+#define BDB_EXT_MMIO_REGS 6
+#define BDB_SWF_IO 7
+#define BDB_SWF_MMIO 8
+#define BDB_DOT_CLOCK_TABLE 9
+#define BDB_MODE_REMOVAL_TABLE 10
+#define BDB_CHILD_DEVICE_TABLE 11
+#define BDB_DRIVER_FEATURES 12
+#define BDB_DRIVER_PERSISTENCE 13
+#define BDB_EXT_TABLE_PTRS 14
+#define BDB_DOT_CLOCK_OVERRIDE 15
+#define BDB_DISPLAY_SELECT 16
+/* 17 rsvd */
+#define BDB_DRIVER_ROTATION 18
+#define BDB_DISPLAY_REMOVE 19
+#define BDB_OEM_CUSTOM 20
+#define BDB_EFP_LIST 21 /* workarounds for VGA hsync/vsync */
+#define BDB_SDVO_LVDS_OPTIONS 22
+#define BDB_SDVO_PANEL_DTDS 23
+#define BDB_SDVO_LVDS_PNP_IDS 24
+#define BDB_SDVO_LVDS_POWER_SEQ 25
+#define BDB_TV_OPTIONS 26
+#define BDB_EDP 27
+#define BDB_LVDS_OPTIONS 40
+#define BDB_LVDS_LFP_DATA_PTRS 41
+#define BDB_LVDS_LFP_DATA 42
+#define BDB_LVDS_BACKLIGHT 43
+#define BDB_LVDS_POWER 44
+#define BDB_SKIP 254 /* VBIOS private block, ignore */
+
+struct bdb_general_features {
+ /* bits 1 */
+ u8 panel_fitting:2;
+ u8 flexaim:1;
+ u8 msg_enable:1;
+ u8 clear_screen:3;
+ u8 color_flip:1;
+
+ /* bits 2 */
+ u8 download_ext_vbt:1;
+ u8 enable_ssc:1;
+ u8 ssc_freq:1;
+ u8 enable_lfp_on_override:1;
+ u8 disable_ssc_ddt:1;
+ u8 rsvd7:1;
+ u8 display_clock_mode:1;
+ u8 rsvd8:1; /* finish byte */
+
+ /* bits 3 */
+ u8 disable_smooth_vision:1;
+ u8 single_dvi:1;
+ u8 rsvd9:6; /* finish byte */
+
+ /* bits 4 */
+ u8 legacy_monitor_detect;
+
+ /* bits 5 */
+ u8 int_crt_support:1;
+ u8 int_tv_support:1;
+ u8 int_efp_support:1;
+ u8 dp_ssc_enb:1; /* PCH attached eDP supports SSC */
+ u8 dp_ssc_freq:1; /* SSC freq for PCH attached eDP */
+ u8 rsvd11:3; /* finish byte */
+} __attribute__((packed));
+
+/* pre-915 */
+#define GPIO_PIN_DVI_LVDS 0x03 /* "DVI/LVDS DDC GPIO pins" */
+#define GPIO_PIN_ADD_I2C 0x05 /* "ADDCARD I2C GPIO pins" */
+#define GPIO_PIN_ADD_DDC 0x04 /* "ADDCARD DDC GPIO pins" */
+#define GPIO_PIN_ADD_DDC_I2C 0x06 /* "ADDCARD DDC/I2C GPIO pins" */
+
+/* Pre 915 */
+#define DEVICE_TYPE_NONE 0x00
+#define DEVICE_TYPE_CRT 0x01
+#define DEVICE_TYPE_TV 0x09
+#define DEVICE_TYPE_EFP 0x12
+#define DEVICE_TYPE_LFP 0x22
+/* On 915+ */
+#define DEVICE_TYPE_CRT_DPMS 0x6001
+#define DEVICE_TYPE_CRT_DPMS_HOTPLUG 0x4001
+#define DEVICE_TYPE_TV_COMPOSITE 0x0209
+#define DEVICE_TYPE_TV_MACROVISION 0x0289
+#define DEVICE_TYPE_TV_RF_COMPOSITE 0x020c
+#define DEVICE_TYPE_TV_SVIDEO_COMPOSITE 0x0609
+#define DEVICE_TYPE_TV_SCART 0x0209
+#define DEVICE_TYPE_TV_CODEC_HOTPLUG_PWR 0x6009
+#define DEVICE_TYPE_EFP_HOTPLUG_PWR 0x6012
+#define DEVICE_TYPE_EFP_DVI_HOTPLUG_PWR 0x6052
+#define DEVICE_TYPE_EFP_DVI_I 0x6053
+#define DEVICE_TYPE_EFP_DVI_D_DUAL 0x6152
+#define DEVICE_TYPE_EFP_DVI_D_HDCP 0x60d2
+#define DEVICE_TYPE_OPENLDI_HOTPLUG_PWR 0x6062
+#define DEVICE_TYPE_OPENLDI_DUALPIX 0x6162
+#define DEVICE_TYPE_LFP_PANELLINK 0x5012
+#define DEVICE_TYPE_LFP_CMOS_PWR 0x5042
+#define DEVICE_TYPE_LFP_LVDS_PWR 0x5062
+#define DEVICE_TYPE_LFP_LVDS_DUAL 0x5162
+#define DEVICE_TYPE_LFP_LVDS_DUAL_HDCP 0x51e2
+
+#define DEVICE_CFG_NONE 0x00
+#define DEVICE_CFG_12BIT_DVOB 0x01
+#define DEVICE_CFG_12BIT_DVOC 0x02
+#define DEVICE_CFG_24BIT_DVOBC 0x09
+#define DEVICE_CFG_24BIT_DVOCB 0x0a
+#define DEVICE_CFG_DUAL_DVOB 0x11
+#define DEVICE_CFG_DUAL_DVOC 0x12
+#define DEVICE_CFG_DUAL_DVOBC 0x13
+#define DEVICE_CFG_DUAL_LINK_DVOBC 0x19
+#define DEVICE_CFG_DUAL_LINK_DVOCB 0x1a
+
+#define DEVICE_WIRE_NONE 0x00
+#define DEVICE_WIRE_DVOB 0x01
+#define DEVICE_WIRE_DVOC 0x02
+#define DEVICE_WIRE_DVOBC 0x03
+#define DEVICE_WIRE_DVOBB 0x05
+#define DEVICE_WIRE_DVOCC 0x06
+#define DEVICE_WIRE_DVOB_MASTER 0x0d
+#define DEVICE_WIRE_DVOC_MASTER 0x0e
+
+#define DEVICE_PORT_DVOA 0x00 /* none on 845+ */
+#define DEVICE_PORT_DVOB 0x01
+#define DEVICE_PORT_DVOC 0x02
+
+struct child_device_config {
+ u16 handle;
+ u16 device_type;
+ u8 device_id[10]; /* ascii string */
+ u16 addin_offset;
+ u8 dvo_port; /* See Device_PORT_* above */
+ u8 i2c_pin;
+ u8 slave_addr;
+ u8 ddc_pin;
+ u16 edid_ptr;
+ u8 dvo_cfg; /* See DEVICE_CFG_* above */
+ u8 dvo2_port;
+ u8 i2c2_pin;
+ u8 slave2_addr;
+ u8 ddc2_pin;
+ u8 capabilities;
+ u8 dvo_wiring;/* See DEVICE_WIRE_* above */
+ u8 dvo2_wiring;
+ u16 extended_type;
+ u8 dvo_function;
+} __attribute__((packed));
+
+struct bdb_general_definitions {
+ /* DDC GPIO */
+ u8 crt_ddc_gmbus_pin;
+
+ /* DPMS bits */
+ u8 dpms_acpi:1;
+ u8 skip_boot_crt_detect:1;
+ u8 dpms_aim:1;
+ u8 rsvd1:5; /* finish byte */
+
+ /* boot device bits */
+ u8 boot_display[2];
+ u8 child_dev_size;
+
+ /*
+ * Device info:
+ * If TV is present, it'll be at devices[0].
+ * LVDS will be next, either devices[0] or [1], if present.
+ * On some platforms the number of device is 6. But could be as few as
+ * 4 if both TV and LVDS are missing.
+ * And the device num is related with the size of general definition
+ * block. It is obtained by using the following formula:
+ * number = (block_size - sizeof(bdb_general_definitions))/
+ * sizeof(child_device_config);
+ */
+ struct child_device_config devices[0];
+} __attribute__((packed));
+
+struct bdb_lvds_options {
+ u8 panel_type;
+ u8 rsvd1;
+ /* LVDS capabilities, stored in a dword */
+ u8 pfit_mode:2;
+ u8 pfit_text_mode_enhanced:1;
+ u8 pfit_gfx_mode_enhanced:1;
+ u8 pfit_ratio_auto:1;
+ u8 pixel_dither:1;
+ u8 lvds_edid:1;
+ u8 rsvd2:1;
+ u8 rsvd4;
+} __attribute__((packed));
+
+/* LFP pointer table contains entries to the struct below */
+struct bdb_lvds_lfp_data_ptr {
+ u16 fp_timing_offset; /* offsets are from start of bdb */
+ u8 fp_table_size;
+ u16 dvo_timing_offset;
+ u8 dvo_table_size;
+ u16 panel_pnp_id_offset;
+ u8 pnp_table_size;
+} __attribute__((packed));
+
+struct bdb_lvds_lfp_data_ptrs {
+ u8 lvds_entries; /* followed by one or more lvds_data_ptr structs */
+ struct bdb_lvds_lfp_data_ptr ptr[16];
+} __attribute__((packed));
+
+/* LFP data has 3 blocks per entry */
+struct lvds_fp_timing {
+ u16 x_res;
+ u16 y_res;
+ u32 lvds_reg;
+ u32 lvds_reg_val;
+ u32 pp_on_reg;
+ u32 pp_on_reg_val;
+ u32 pp_off_reg;
+ u32 pp_off_reg_val;
+ u32 pp_cycle_reg;
+ u32 pp_cycle_reg_val;
+ u32 pfit_reg;
+ u32 pfit_reg_val;
+ u16 terminator;
+} __attribute__((packed));
+
+struct lvds_dvo_timing {
+ u16 clock; /**< In 10khz */
+ u8 hactive_lo;
+ u8 hblank_lo;
+ u8 hblank_hi:4;
+ u8 hactive_hi:4;
+ u8 vactive_lo;
+ u8 vblank_lo;
+ u8 vblank_hi:4;
+ u8 vactive_hi:4;
+ u8 hsync_off_lo;
+ u8 hsync_pulse_width;
+ u8 vsync_pulse_width:4;
+ u8 vsync_off:4;
+ u8 rsvd0:6;
+ u8 hsync_off_hi:2;
+ u8 h_image;
+ u8 v_image;
+ u8 max_hv;
+ u8 h_border;
+ u8 v_border;
+ u8 rsvd1:3;
+ u8 digital:2;
+ u8 vsync_positive:1;
+ u8 hsync_positive:1;
+ u8 rsvd2:1;
+} __attribute__((packed));
+
+struct lvds_pnp_id {
+ u16 mfg_name;
+ u16 product_code;
+ u32 serial;
+ u8 mfg_week;
+ u8 mfg_year;
+} __attribute__((packed));
+
+struct bdb_lvds_lfp_data_entry {
+ struct lvds_fp_timing fp_timing;
+ struct lvds_dvo_timing dvo_timing;
+ struct lvds_pnp_id pnp_id;
+} __attribute__((packed));
+
+struct bdb_lvds_lfp_data {
+ struct bdb_lvds_lfp_data_entry data[16];
+} __attribute__((packed));
+
+struct aimdb_header {
+ char signature[16];
+ char oem_device[20];
+ u16 aimdb_version;
+ u16 aimdb_header_size;
+ u16 aimdb_size;
+} __attribute__((packed));
+
+struct aimdb_block {
+ u8 aimdb_id;
+ u16 aimdb_size;
+} __attribute__((packed));
+
+struct vch_panel_data {
+ u16 fp_timing_offset;
+ u8 fp_timing_size;
+ u16 dvo_timing_offset;
+ u8 dvo_timing_size;
+ u16 text_fitting_offset;
+ u8 text_fitting_size;
+ u16 graphics_fitting_offset;
+ u8 graphics_fitting_size;
+} __attribute__((packed));
+
+struct vch_bdb_22 {
+ struct aimdb_block aimdb_block;
+ struct vch_panel_data panels[16];
+} __attribute__((packed));
+
+struct bdb_sdvo_lvds_options {
+ u8 panel_backlight;
+ u8 h40_set_panel_type;
+ u8 panel_type;
+ u8 ssc_clk_freq;
+ u16 als_low_trip;
+ u16 als_high_trip;
+ u8 sclalarcoeff_tab_row_num;
+ u8 sclalarcoeff_tab_row_size;
+ u8 coefficient[8];
+ u8 panel_misc_bits_1;
+ u8 panel_misc_bits_2;
+ u8 panel_misc_bits_3;
+ u8 panel_misc_bits_4;
+} __attribute__((packed));
+
+
+#define BDB_DRIVER_FEATURE_NO_LVDS 0
+#define BDB_DRIVER_FEATURE_INT_LVDS 1
+#define BDB_DRIVER_FEATURE_SDVO_LVDS 2
+#define BDB_DRIVER_FEATURE_EDP 3
+
+struct bdb_driver_features {
+ u8 boot_dev_algorithm:1;
+ u8 block_display_switch:1;
+ u8 allow_display_switch:1;
+ u8 hotplug_dvo:1;
+ u8 dual_view_zoom:1;
+ u8 int15h_hook:1;
+ u8 sprite_in_clone:1;
+ u8 primary_lfp_id:1;
+
+ u16 boot_mode_x;
+ u16 boot_mode_y;
+ u8 boot_mode_bpp;
+ u8 boot_mode_refresh;
+
+ u16 enable_lfp_primary:1;
+ u16 selective_mode_pruning:1;
+ u16 dual_frequency:1;
+ u16 render_clock_freq:1; /* 0: high freq; 1: low freq */
+ u16 nt_clone_support:1;
+ u16 power_scheme_ui:1; /* 0: CUI; 1: 3rd party */
+ u16 sprite_display_assign:1; /* 0: secondary; 1: primary */
+ u16 cui_aspect_scaling:1;
+ u16 preserve_aspect_ratio:1;
+ u16 sdvo_device_power_down:1;
+ u16 crt_hotplug:1;
+ u16 lvds_config:2;
+ u16 tv_hotplug:1;
+ u16 hdmi_config:2;
+
+ u8 static_display:1;
+ u8 reserved2:7;
+ u16 legacy_crt_max_x;
+ u16 legacy_crt_max_y;
+ u8 legacy_crt_max_refresh;
+
+ u8 hdmi_termination;
+ u8 custom_vbt_version;
+} __attribute__((packed));
+
+#define EDP_18BPP 0
+#define EDP_24BPP 1
+#define EDP_30BPP 2
+#define EDP_RATE_1_62 0
+#define EDP_RATE_2_7 1
+#define EDP_LANE_1 0
+#define EDP_LANE_2 1
+#define EDP_LANE_4 3
+#define EDP_PREEMPHASIS_NONE 0
+#define EDP_PREEMPHASIS_3_5dB 1
+#define EDP_PREEMPHASIS_6dB 2
+#define EDP_PREEMPHASIS_9_5dB 3
+#define EDP_VSWING_0_4V 0
+#define EDP_VSWING_0_6V 1
+#define EDP_VSWING_0_8V 2
+#define EDP_VSWING_1_2V 3
+
+struct edp_power_seq {
+ u16 t1_t3;
+ u16 t8;
+ u16 t9;
+ u16 t10;
+ u16 t11_t12;
+} __attribute__ ((packed));
+
+struct edp_link_params {
+ u8 rate:4;
+ u8 lanes:4;
+ u8 preemphasis:4;
+ u8 vswing:4;
+} __attribute__ ((packed));
+
+struct bdb_edp {
+ struct edp_power_seq power_seqs[16];
+ u32 color_depth;
+ struct edp_link_params link_params[16];
+ u32 sdrrs_msa_timing_delay;
+
+ /* ith bit indicates enabled/disabled for (i+1)th panel */
+ u16 edp_s3d_feature;
+ u16 edp_t3_optimization;
+} __attribute__ ((packed));
+
+void intel_setup_bios(struct drm_device *dev);
+bool intel_parse_bios(struct drm_device *dev);
+
+/*
+ * Driver<->VBIOS interaction occurs through scratch bits in
+ * GR18 & SWF*.
+ */
+
+/* GR18 bits are set on display switch and hotkey events */
+#define GR18_DRIVER_SWITCH_EN (1<<7) /* 0: VBIOS control, 1: driver control */
+#define GR18_HOTKEY_MASK 0x78 /* See also SWF4 15:0 */
+#define GR18_HK_NONE (0x0<<3)
+#define GR18_HK_LFP_STRETCH (0x1<<3)
+#define GR18_HK_TOGGLE_DISP (0x2<<3)
+#define GR18_HK_DISP_SWITCH (0x4<<3) /* see SWF14 15:0 for what to enable */
+#define GR18_HK_POPUP_DISABLED (0x6<<3)
+#define GR18_HK_POPUP_ENABLED (0x7<<3)
+#define GR18_HK_PFIT (0x8<<3)
+#define GR18_HK_APM_CHANGE (0xa<<3)
+#define GR18_HK_MULTIPLE (0xc<<3)
+#define GR18_USER_INT_EN (1<<2)
+#define GR18_A0000_FLUSH_EN (1<<1)
+#define GR18_SMM_EN (1<<0)
+
+/* Set by driver, cleared by VBIOS */
+#define SWF00_YRES_SHIFT 16
+#define SWF00_XRES_SHIFT 0
+#define SWF00_RES_MASK 0xffff
+
+/* Set by VBIOS at boot time and driver at runtime */
+#define SWF01_TV2_FORMAT_SHIFT 8
+#define SWF01_TV1_FORMAT_SHIFT 0
+#define SWF01_TV_FORMAT_MASK 0xffff
+
+#define SWF10_VBIOS_BLC_I2C_EN (1<<29)
+#define SWF10_GTT_OVERRIDE_EN (1<<28)
+#define SWF10_LFP_DPMS_OVR (1<<27) /* override DPMS on display switch */
+#define SWF10_ACTIVE_TOGGLE_LIST_MASK (7<<24)
+#define SWF10_OLD_TOGGLE 0x0
+#define SWF10_TOGGLE_LIST_1 0x1
+#define SWF10_TOGGLE_LIST_2 0x2
+#define SWF10_TOGGLE_LIST_3 0x3
+#define SWF10_TOGGLE_LIST_4 0x4
+#define SWF10_PANNING_EN (1<<23)
+#define SWF10_DRIVER_LOADED (1<<22)
+#define SWF10_EXTENDED_DESKTOP (1<<21)
+#define SWF10_EXCLUSIVE_MODE (1<<20)
+#define SWF10_OVERLAY_EN (1<<19)
+#define SWF10_PLANEB_HOLDOFF (1<<18)
+#define SWF10_PLANEA_HOLDOFF (1<<17)
+#define SWF10_VGA_HOLDOFF (1<<16)
+#define SWF10_ACTIVE_DISP_MASK 0xffff
+#define SWF10_PIPEB_LFP2 (1<<15)
+#define SWF10_PIPEB_EFP2 (1<<14)
+#define SWF10_PIPEB_TV2 (1<<13)
+#define SWF10_PIPEB_CRT2 (1<<12)
+#define SWF10_PIPEB_LFP (1<<11)
+#define SWF10_PIPEB_EFP (1<<10)
+#define SWF10_PIPEB_TV (1<<9)
+#define SWF10_PIPEB_CRT (1<<8)
+#define SWF10_PIPEA_LFP2 (1<<7)
+#define SWF10_PIPEA_EFP2 (1<<6)
+#define SWF10_PIPEA_TV2 (1<<5)
+#define SWF10_PIPEA_CRT2 (1<<4)
+#define SWF10_PIPEA_LFP (1<<3)
+#define SWF10_PIPEA_EFP (1<<2)
+#define SWF10_PIPEA_TV (1<<1)
+#define SWF10_PIPEA_CRT (1<<0)
+
+#define SWF11_MEMORY_SIZE_SHIFT 16
+#define SWF11_SV_TEST_EN (1<<15)
+#define SWF11_IS_AGP (1<<14)
+#define SWF11_DISPLAY_HOLDOFF (1<<13)
+#define SWF11_DPMS_REDUCED (1<<12)
+#define SWF11_IS_VBE_MODE (1<<11)
+#define SWF11_PIPEB_ACCESS (1<<10) /* 0 here means pipe a */
+#define SWF11_DPMS_MASK 0x07
+#define SWF11_DPMS_OFF (1<<2)
+#define SWF11_DPMS_SUSPEND (1<<1)
+#define SWF11_DPMS_STANDBY (1<<0)
+#define SWF11_DPMS_ON 0
+
+#define SWF14_GFX_PFIT_EN (1<<31)
+#define SWF14_TEXT_PFIT_EN (1<<30)
+#define SWF14_LID_STATUS_CLOSED (1<<29) /* 0 here means open */
+#define SWF14_POPUP_EN (1<<28)
+#define SWF14_DISPLAY_HOLDOFF (1<<27)
+#define SWF14_DISP_DETECT_EN (1<<26)
+#define SWF14_DOCKING_STATUS_DOCKED (1<<25) /* 0 here means undocked */
+#define SWF14_DRIVER_STATUS (1<<24)
+#define SWF14_OS_TYPE_WIN9X (1<<23)
+#define SWF14_OS_TYPE_WINNT (1<<22)
+/* 21:19 rsvd */
+#define SWF14_PM_TYPE_MASK 0x00070000
+#define SWF14_PM_ACPI_VIDEO (0x4 << 16)
+#define SWF14_PM_ACPI (0x3 << 16)
+#define SWF14_PM_APM_12 (0x2 << 16)
+#define SWF14_PM_APM_11 (0x1 << 16)
+#define SWF14_HK_REQUEST_MASK 0x0000ffff /* see GR18 6:3 for event type */
+ /* if GR18 indicates a display switch */
+#define SWF14_DS_PIPEB_LFP2_EN (1<<15)
+#define SWF14_DS_PIPEB_EFP2_EN (1<<14)
+#define SWF14_DS_PIPEB_TV2_EN (1<<13)
+#define SWF14_DS_PIPEB_CRT2_EN (1<<12)
+#define SWF14_DS_PIPEB_LFP_EN (1<<11)
+#define SWF14_DS_PIPEB_EFP_EN (1<<10)
+#define SWF14_DS_PIPEB_TV_EN (1<<9)
+#define SWF14_DS_PIPEB_CRT_EN (1<<8)
+#define SWF14_DS_PIPEA_LFP2_EN (1<<7)
+#define SWF14_DS_PIPEA_EFP2_EN (1<<6)
+#define SWF14_DS_PIPEA_TV2_EN (1<<5)
+#define SWF14_DS_PIPEA_CRT2_EN (1<<4)
+#define SWF14_DS_PIPEA_LFP_EN (1<<3)
+#define SWF14_DS_PIPEA_EFP_EN (1<<2)
+#define SWF14_DS_PIPEA_TV_EN (1<<1)
+#define SWF14_DS_PIPEA_CRT_EN (1<<0)
+ /* if GR18 indicates a panel fitting request */
+#define SWF14_PFIT_EN (1<<0) /* 0 means disable */
+ /* if GR18 indicates an APM change request */
+#define SWF14_APM_HIBERNATE 0x4
+#define SWF14_APM_SUSPEND 0x3
+#define SWF14_APM_STANDBY 0x1
+#define SWF14_APM_RESTORE 0x0
+
+/* Add the device class for LFP, TV, HDMI */
+#define DEVICE_TYPE_INT_LFP 0x1022
+#define DEVICE_TYPE_INT_TV 0x1009
+#define DEVICE_TYPE_HDMI 0x60D2
+#define DEVICE_TYPE_DP 0x68C6
+#define DEVICE_TYPE_eDP 0x78C6
+
+/* define the DVO port for HDMI output type */
+#define DVO_B 1
+#define DVO_C 2
+#define DVO_D 3
+
+/* define the PORT for DP output type */
+#define PORT_IDPB 7
+#define PORT_IDPC 8
+#define PORT_IDPD 9
+
+#endif /* _I830_BIOS_H_ */
diff --git a/sys/dev/drm2/i915/intel_crt.c b/sys/dev/drm2/i915/intel_crt.c
new file mode 100644
index 000000000000..9072553285a5
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_crt.c
@@ -0,0 +1,624 @@
+/*
+ * Copyright © 2006-2007 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_crtc_helper.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+
+/* Here's the desired hotplug mode */
+#define ADPA_HOTPLUG_BITS (ADPA_CRT_HOTPLUG_PERIOD_128 | \
+ ADPA_CRT_HOTPLUG_WARMUP_10MS | \
+ ADPA_CRT_HOTPLUG_SAMPLE_4S | \
+ ADPA_CRT_HOTPLUG_VOLTAGE_50 | \
+ ADPA_CRT_HOTPLUG_VOLREF_325MV | \
+ ADPA_CRT_HOTPLUG_ENABLE)
+
+struct intel_crt {
+ struct intel_encoder base;
+ bool force_hotplug_required;
+};
+
+static struct intel_crt *intel_attached_crt(struct drm_connector *connector)
+{
+ return container_of(intel_attached_encoder(connector),
+ struct intel_crt, base);
+}
+
+static void intel_crt_dpms(struct drm_encoder *encoder, int mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 temp, reg;
+
+ if (HAS_PCH_SPLIT(dev))
+ reg = PCH_ADPA;
+ else
+ reg = ADPA;
+
+ temp = I915_READ(reg);
+ temp &= ~(ADPA_HSYNC_CNTL_DISABLE | ADPA_VSYNC_CNTL_DISABLE);
+ temp &= ~ADPA_DAC_ENABLE;
+
+ switch (mode) {
+ case DRM_MODE_DPMS_ON:
+ temp |= ADPA_DAC_ENABLE;
+ break;
+ case DRM_MODE_DPMS_STANDBY:
+ temp |= ADPA_DAC_ENABLE | ADPA_HSYNC_CNTL_DISABLE;
+ break;
+ case DRM_MODE_DPMS_SUSPEND:
+ temp |= ADPA_DAC_ENABLE | ADPA_VSYNC_CNTL_DISABLE;
+ break;
+ case DRM_MODE_DPMS_OFF:
+ temp |= ADPA_HSYNC_CNTL_DISABLE | ADPA_VSYNC_CNTL_DISABLE;
+ break;
+ }
+
+ I915_WRITE(reg, temp);
+}
+
+static int intel_crt_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ struct drm_device *dev = connector->dev;
+
+ int max_clock = 0;
+ if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
+ return MODE_NO_DBLESCAN;
+
+ if (mode->clock < 25000)
+ return MODE_CLOCK_LOW;
+
+ if (IS_GEN2(dev))
+ max_clock = 350000;
+ else
+ max_clock = 400000;
+ if (mode->clock > max_clock)
+ return MODE_CLOCK_HIGH;
+
+ return MODE_OK;
+}
+
+static bool intel_crt_mode_fixup(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ return true;
+}
+
+static void intel_crt_mode_set(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+
+ struct drm_device *dev = encoder->dev;
+ struct drm_crtc *crtc = encoder->crtc;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int dpll_md_reg;
+ u32 adpa, dpll_md;
+ u32 adpa_reg;
+
+ dpll_md_reg = DPLL_MD(intel_crtc->pipe);
+
+ if (HAS_PCH_SPLIT(dev))
+ adpa_reg = PCH_ADPA;
+ else
+ adpa_reg = ADPA;
+
+ /*
+ * Disable separate mode multiplier used when cloning SDVO to CRT
+ * XXX this needs to be adjusted when we really are cloning
+ */
+ if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) {
+ dpll_md = I915_READ(dpll_md_reg);
+ I915_WRITE(dpll_md_reg,
+ dpll_md & ~DPLL_MD_UDI_MULTIPLIER_MASK);
+ }
+
+ adpa = ADPA_HOTPLUG_BITS;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
+ adpa |= ADPA_HSYNC_ACTIVE_HIGH;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
+ adpa |= ADPA_VSYNC_ACTIVE_HIGH;
+
+ /* For CPT allow 3 pipe config, for others just use A or B */
+ if (HAS_PCH_CPT(dev))
+ adpa |= PORT_TRANS_SEL_CPT(intel_crtc->pipe);
+ else if (intel_crtc->pipe == 0)
+ adpa |= ADPA_PIPE_A_SELECT;
+ else
+ adpa |= ADPA_PIPE_B_SELECT;
+
+ if (!HAS_PCH_SPLIT(dev))
+ I915_WRITE(BCLRPAT(intel_crtc->pipe), 0);
+
+ I915_WRITE(adpa_reg, adpa);
+}
+
+static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+ struct intel_crt *crt = intel_attached_crt(connector);
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 adpa;
+ bool ret;
+
+ /* The first time through, trigger an explicit detection cycle */
+ if (crt->force_hotplug_required) {
+ bool turn_off_dac = HAS_PCH_SPLIT(dev);
+ u32 save_adpa;
+
+ crt->force_hotplug_required = 0;
+
+ save_adpa = adpa = I915_READ(PCH_ADPA);
+ DRM_DEBUG_KMS("trigger hotplug detect cycle: adpa=0x%x\n", adpa);
+
+ adpa |= ADPA_CRT_HOTPLUG_FORCE_TRIGGER;
+ if (turn_off_dac)
+ adpa &= ~ADPA_DAC_ENABLE;
+
+ I915_WRITE(PCH_ADPA, adpa);
+
+ if (_intel_wait_for(dev,
+ (I915_READ(PCH_ADPA) & ADPA_CRT_HOTPLUG_FORCE_TRIGGER) == 0,
+ 1000, 1, "915crt"))
+ DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER\n");
+
+ if (turn_off_dac) {
+ I915_WRITE(PCH_ADPA, save_adpa);
+ POSTING_READ(PCH_ADPA);
+ }
+ }
+
+ /* Check the status to see if both blue and green are on now */
+ adpa = I915_READ(PCH_ADPA);
+ if ((adpa & ADPA_CRT_HOTPLUG_MONITOR_MASK) != 0)
+ ret = true;
+ else
+ ret = false;
+ DRM_DEBUG_KMS("ironlake hotplug adpa=0x%x, result %d\n", adpa, ret);
+
+ return ret;
+}
+
+/**
+ * Uses CRT_HOTPLUG_EN and CRT_HOTPLUG_STAT to detect CRT presence.
+ *
+ * Not for i915G/i915GM
+ *
+ * \return true if CRT is connected.
+ * \return false if CRT is disconnected.
+ */
+static bool intel_crt_detect_hotplug(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 hotplug_en, orig, stat;
+ bool ret = false;
+ int i, tries = 0;
+
+ if (HAS_PCH_SPLIT(dev))
+ return intel_ironlake_crt_detect_hotplug(connector);
+
+ /*
+ * On 4 series desktop, CRT detect sequence need to be done twice
+ * to get a reliable result.
+ */
+
+ if (IS_G4X(dev) && !IS_GM45(dev))
+ tries = 2;
+ else
+ tries = 1;
+ hotplug_en = orig = I915_READ(PORT_HOTPLUG_EN);
+ hotplug_en |= CRT_HOTPLUG_FORCE_DETECT;
+
+ for (i = 0; i < tries ; i++) {
+ /* turn on the FORCE_DETECT */
+ I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
+ /* wait for FORCE_DETECT to go off */
+ if (_intel_wait_for(dev,
+ (I915_READ(PORT_HOTPLUG_EN) & CRT_HOTPLUG_FORCE_DETECT) == 0,
+ 1000, 1, "915cr2"))
+ DRM_DEBUG_KMS("timed out waiting for FORCE_DETECT to go off");
+ }
+
+ stat = I915_READ(PORT_HOTPLUG_STAT);
+ if ((stat & CRT_HOTPLUG_MONITOR_MASK) != CRT_HOTPLUG_MONITOR_NONE)
+ ret = true;
+
+ /* clear the interrupt we just generated, if any */
+ I915_WRITE(PORT_HOTPLUG_STAT, CRT_HOTPLUG_INT_STATUS);
+
+ /* and put the bits back */
+ I915_WRITE(PORT_HOTPLUG_EN, orig);
+
+ return ret;
+}
+
+static bool intel_crt_detect_ddc(struct drm_connector *connector)
+{
+ struct intel_crt *crt = intel_attached_crt(connector);
+ struct drm_i915_private *dev_priv = crt->base.base.dev->dev_private;
+
+ /* CRT should always be at 0, but check anyway */
+ if (crt->base.type != INTEL_OUTPUT_ANALOG)
+ return false;
+
+ if (intel_ddc_probe(&crt->base, dev_priv->crt_ddc_pin)) {
+ struct edid *edid;
+ bool is_digital = false;
+
+ edid = drm_get_edid(connector,
+ dev_priv->gmbus[dev_priv->crt_ddc_pin]);
+ /*
+ * This may be a DVI-I connector with a shared DDC
+ * link between analog and digital outputs, so we
+ * have to check the EDID input spec of the attached device.
+ *
+ * On the other hand, what should we do if it is a broken EDID?
+ */
+ if (edid != NULL) {
+ is_digital = edid->input & DRM_EDID_INPUT_DIGITAL;
+ connector->display_info.raw_edid = NULL;
+ free(edid, DRM_MEM_KMS);
+ }
+
+ if (!is_digital) {
+ DRM_DEBUG_KMS("CRT detected via DDC:0x50 [EDID]\n");
+ return true;
+ } else {
+ DRM_DEBUG_KMS("CRT not detected via DDC:0x50 [EDID reports a digital panel]\n");
+ }
+ }
+
+ return false;
+}
+
+static enum drm_connector_status
+intel_crt_load_detect(struct intel_crt *crt)
+{
+ struct drm_device *dev = crt->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t pipe = to_intel_crtc(crt->base.base.crtc)->pipe;
+ uint32_t save_bclrpat;
+ uint32_t save_vtotal;
+ uint32_t vtotal, vactive;
+ uint32_t vsample;
+ uint32_t vblank, vblank_start, vblank_end;
+ uint32_t dsl;
+ uint32_t bclrpat_reg;
+ uint32_t vtotal_reg;
+ uint32_t vblank_reg;
+ uint32_t vsync_reg;
+ uint32_t pipeconf_reg;
+ uint32_t pipe_dsl_reg;
+ uint8_t st00;
+ enum drm_connector_status status;
+
+ DRM_DEBUG_KMS("starting load-detect on CRT\n");
+
+ bclrpat_reg = BCLRPAT(pipe);
+ vtotal_reg = VTOTAL(pipe);
+ vblank_reg = VBLANK(pipe);
+ vsync_reg = VSYNC(pipe);
+ pipeconf_reg = PIPECONF(pipe);
+ pipe_dsl_reg = PIPEDSL(pipe);
+
+ save_bclrpat = I915_READ(bclrpat_reg);
+ save_vtotal = I915_READ(vtotal_reg);
+ vblank = I915_READ(vblank_reg);
+
+ vtotal = ((save_vtotal >> 16) & 0xfff) + 1;
+ vactive = (save_vtotal & 0x7ff) + 1;
+
+ vblank_start = (vblank & 0xfff) + 1;
+ vblank_end = ((vblank >> 16) & 0xfff) + 1;
+
+ /* Set the border color to purple. */
+ I915_WRITE(bclrpat_reg, 0x500050);
+
+ if (!IS_GEN2(dev)) {
+ uint32_t pipeconf = I915_READ(pipeconf_reg);
+ I915_WRITE(pipeconf_reg, pipeconf | PIPECONF_FORCE_BORDER);
+ POSTING_READ(pipeconf_reg);
+ /* Wait for next Vblank to substitue
+ * border color for Color info */
+ intel_wait_for_vblank(dev, pipe);
+ st00 = I915_READ8(VGA_MSR_WRITE);
+ status = ((st00 & (1 << 4)) != 0) ?
+ connector_status_connected :
+ connector_status_disconnected;
+
+ I915_WRITE(pipeconf_reg, pipeconf);
+ } else {
+ bool restore_vblank = false;
+ int count, detect;
+
+ /*
+ * If there isn't any border, add some.
+ * Yes, this will flicker
+ */
+ if (vblank_start <= vactive && vblank_end >= vtotal) {
+ uint32_t vsync = I915_READ(vsync_reg);
+ uint32_t vsync_start = (vsync & 0xffff) + 1;
+
+ vblank_start = vsync_start;
+ I915_WRITE(vblank_reg,
+ (vblank_start - 1) |
+ ((vblank_end - 1) << 16));
+ restore_vblank = true;
+ }
+ /* sample in the vertical border, selecting the larger one */
+ if (vblank_start - vactive >= vtotal - vblank_end)
+ vsample = (vblank_start + vactive) >> 1;
+ else
+ vsample = (vtotal + vblank_end) >> 1;
+
+ /*
+ * Wait for the border to be displayed
+ */
+ while (I915_READ(pipe_dsl_reg) >= vactive)
+ ;
+ while ((dsl = I915_READ(pipe_dsl_reg)) <= vsample)
+ ;
+ /*
+ * Watch ST00 for an entire scanline
+ */
+ detect = 0;
+ count = 0;
+ do {
+ count++;
+ /* Read the ST00 VGA status register */
+ st00 = I915_READ8(VGA_MSR_WRITE);
+ if (st00 & (1 << 4))
+ detect++;
+ } while ((I915_READ(pipe_dsl_reg) == dsl));
+
+ /* restore vblank if necessary */
+ if (restore_vblank)
+ I915_WRITE(vblank_reg, vblank);
+ /*
+ * If more than 3/4 of the scanline detected a monitor,
+ * then it is assumed to be present. This works even on i830,
+ * where there isn't any way to force the border color across
+ * the screen
+ */
+ status = detect * 4 > count * 3 ?
+ connector_status_connected :
+ connector_status_disconnected;
+ }
+
+ /* Restore previous settings */
+ I915_WRITE(bclrpat_reg, save_bclrpat);
+
+ return status;
+}
+
+static enum drm_connector_status
+intel_crt_detect(struct drm_connector *connector, bool force)
+{
+ struct drm_device *dev = connector->dev;
+ struct intel_crt *crt = intel_attached_crt(connector);
+ enum drm_connector_status status;
+ struct intel_load_detect_pipe tmp;
+
+ if (I915_HAS_HOTPLUG(dev)) {
+ if (intel_crt_detect_hotplug(connector)) {
+ DRM_DEBUG_KMS("CRT detected via hotplug\n");
+ return connector_status_connected;
+ } else {
+ DRM_DEBUG_KMS("CRT not detected via hotplug\n");
+ return connector_status_disconnected;
+ }
+ }
+
+ if (intel_crt_detect_ddc(connector))
+ return connector_status_connected;
+
+ if (!force)
+ return connector->status;
+
+ /* for pre-945g platforms use load detect */
+ if (intel_get_load_detect_pipe(&crt->base, connector, NULL,
+ &tmp)) {
+ if (intel_crt_detect_ddc(connector))
+ status = connector_status_connected;
+ else
+ status = intel_crt_load_detect(crt);
+ intel_release_load_detect_pipe(&crt->base, connector,
+ &tmp);
+ } else
+ status = connector_status_unknown;
+
+ return status;
+}
+
+static void intel_crt_destroy(struct drm_connector *connector)
+{
+
+#if 0
+ drm_sysfs_connector_remove(connector);
+#endif
+ drm_connector_cleanup(connector);
+ free(connector, DRM_MEM_KMS);
+}
+
+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;
+
+ ret = intel_ddc_get_modes(connector,
+ dev_priv->gmbus[dev_priv->crt_ddc_pin]);
+ if (ret || !IS_G4X(dev))
+ return ret;
+
+ /* Try to probe digital port for output in DVI-I -> VGA mode. */
+ return (intel_ddc_get_modes(connector,
+ dev_priv->gmbus[GMBUS_PORT_DPB]));
+}
+
+static int intel_crt_set_property(struct drm_connector *connector,
+ struct drm_property *property,
+ uint64_t value)
+{
+ return 0;
+}
+
+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))
+ crt->force_hotplug_required = 1;
+}
+
+/*
+ * Routines for controlling stuff on the analog port
+ */
+
+static const struct drm_encoder_helper_funcs intel_crt_helper_funcs = {
+ .dpms = intel_crt_dpms,
+ .mode_fixup = intel_crt_mode_fixup,
+ .prepare = intel_encoder_prepare,
+ .commit = intel_encoder_commit,
+ .mode_set = intel_crt_mode_set,
+};
+
+static const struct drm_connector_funcs intel_crt_connector_funcs = {
+ .reset = intel_crt_reset,
+ .dpms = drm_helper_connector_dpms,
+ .detect = intel_crt_detect,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+ .destroy = intel_crt_destroy,
+ .set_property = intel_crt_set_property,
+};
+
+static const struct drm_connector_helper_funcs intel_crt_connector_helper_funcs = {
+ .mode_valid = intel_crt_mode_valid,
+ .get_modes = intel_crt_get_modes,
+ .best_encoder = intel_best_encoder,
+};
+
+static const struct drm_encoder_funcs intel_crt_enc_funcs = {
+ .destroy = intel_encoder_destroy,
+};
+
+static int intel_no_crt_dmi_callback(const struct dmi_system_id *id)
+{
+ DRM_DEBUG_KMS("Skipping CRT initialization for %s\n", id->ident);
+ return 1;
+}
+
+static const struct dmi_system_id intel_no_crt[] = {
+ {
+ .callback = intel_no_crt_dmi_callback,
+ .ident = "ACER ZGB",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "ACER"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "ZGB"),
+ },
+ },
+ { }
+};
+
+void intel_crt_init(struct drm_device *dev)
+{
+ struct drm_connector *connector;
+ struct intel_crt *crt;
+ struct intel_connector *intel_connector;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ /* Skip machines without VGA that falsely report hotplug events */
+ if (dmi_check_system(intel_no_crt))
+ 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);
+
+ connector = &intel_connector->base;
+ drm_connector_init(dev, &intel_connector->base,
+ &intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA);
+
+ drm_encoder_init(dev, &crt->base.base, &intel_crt_enc_funcs,
+ DRM_MODE_ENCODER_DAC);
+
+ intel_connector_attach_encoder(intel_connector, &crt->base);
+
+ crt->base.type = INTEL_OUTPUT_ANALOG;
+ crt->base.clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT |
+ 1 << INTEL_ANALOG_CLONE_BIT |
+ 1 << INTEL_SDVO_LVDS_CLONE_BIT);
+ crt->base.crtc_mask = (1 << 0) | (1 << 1);
+ if (IS_GEN2(dev))
+ connector->interlace_allowed = 0;
+ else
+ connector->interlace_allowed = 1;
+ connector->doublescan_allowed = 0;
+
+ drm_encoder_helper_add(&crt->base.base, &intel_crt_helper_funcs);
+ drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);
+
+#if 0
+ drm_sysfs_connector_add(connector);
+#endif
+
+ if (I915_HAS_HOTPLUG(dev))
+ connector->polled = DRM_CONNECTOR_POLL_HPD;
+ else
+ connector->polled = DRM_CONNECTOR_POLL_CONNECT;
+
+ /*
+ * Configure the automatic hotplug detection stuff
+ */
+ crt->force_hotplug_required = 0;
+ if (HAS_PCH_SPLIT(dev)) {
+ u32 adpa;
+
+ adpa = I915_READ(PCH_ADPA);
+ adpa &= ~ADPA_CRT_HOTPLUG_MASK;
+ adpa |= ADPA_HOTPLUG_BITS;
+ I915_WRITE(PCH_ADPA, adpa);
+ POSTING_READ(PCH_ADPA);
+
+ DRM_DEBUG_KMS("pch crt adpa set to 0x%x\n", adpa);
+ crt->force_hotplug_required = 1;
+ }
+
+ dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS;
+}
diff --git a/sys/dev/drm2/i915/intel_display.c b/sys/dev/drm2/i915/intel_display.c
new file mode 100644
index 000000000000..21f8f5355667
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_display.c
@@ -0,0 +1,9532 @@
+/*
+ * Copyright © 2006-2007 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/drm_dp_helper.h>
+#include <dev/drm2/drm_crtc_helper.h>
+#include <sys/kdb.h>
+#include <sys/limits.h>
+
+#define HAS_eDP (intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP))
+
+bool intel_pipe_has_type(struct drm_crtc *crtc, int type);
+static void intel_update_watermarks(struct drm_device *dev);
+static void intel_increase_pllclock(struct drm_crtc *crtc);
+static void intel_crtc_update_cursor(struct drm_crtc *crtc, bool on);
+
+typedef struct {
+ /* given values */
+ int n;
+ int m1, m2;
+ int p1, p2;
+ /* derived values */
+ int dot;
+ int vco;
+ int m;
+ int p;
+} intel_clock_t;
+
+typedef struct {
+ int min, max;
+} intel_range_t;
+
+typedef struct {
+ int dot_limit;
+ int p2_slow, p2_fast;
+} intel_p2_t;
+
+#define INTEL_P2_NUM 2
+typedef struct intel_limit intel_limit_t;
+struct intel_limit {
+ intel_range_t dot, vco, n, m, m1, m2, p, p1;
+ intel_p2_t p2;
+ bool (* find_pll)(const intel_limit_t *, struct drm_crtc *,
+ int, int, intel_clock_t *, intel_clock_t *);
+};
+
+/* FDI */
+#define IRONLAKE_FDI_FREQ 2700000 /* in kHz for mode->clock */
+
+static bool
+intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *match_clock,
+ intel_clock_t *best_clock);
+static bool
+intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *match_clock,
+ intel_clock_t *best_clock);
+
+static bool
+intel_find_pll_g4x_dp(const intel_limit_t *, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *match_clock,
+ intel_clock_t *best_clock);
+static bool
+intel_find_pll_ironlake_dp(const intel_limit_t *, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *match_clock,
+ intel_clock_t *best_clock);
+
+static inline u32 /* units of 100MHz */
+intel_fdi_link_freq(struct drm_device *dev)
+{
+ if (IS_GEN5(dev)) {
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ return (I915_READ(FDI_PLL_BIOS_0) & FDI_PLL_FB_CLOCK_MASK) + 2;
+ } else
+ return 27;
+}
+
+static const intel_limit_t intel_limits_i8xx_dvo = {
+ .dot = { .min = 25000, .max = 350000 },
+ .vco = { .min = 930000, .max = 1400000 },
+ .n = { .min = 3, .max = 16 },
+ .m = { .min = 96, .max = 140 },
+ .m1 = { .min = 18, .max = 26 },
+ .m2 = { .min = 6, .max = 16 },
+ .p = { .min = 4, .max = 128 },
+ .p1 = { .min = 2, .max = 33 },
+ .p2 = { .dot_limit = 165000,
+ .p2_slow = 4, .p2_fast = 2 },
+ .find_pll = intel_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_i8xx_lvds = {
+ .dot = { .min = 25000, .max = 350000 },
+ .vco = { .min = 930000, .max = 1400000 },
+ .n = { .min = 3, .max = 16 },
+ .m = { .min = 96, .max = 140 },
+ .m1 = { .min = 18, .max = 26 },
+ .m2 = { .min = 6, .max = 16 },
+ .p = { .min = 4, .max = 128 },
+ .p1 = { .min = 1, .max = 6 },
+ .p2 = { .dot_limit = 165000,
+ .p2_slow = 14, .p2_fast = 7 },
+ .find_pll = intel_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_i9xx_sdvo = {
+ .dot = { .min = 20000, .max = 400000 },
+ .vco = { .min = 1400000, .max = 2800000 },
+ .n = { .min = 1, .max = 6 },
+ .m = { .min = 70, .max = 120 },
+ .m1 = { .min = 10, .max = 22 },
+ .m2 = { .min = 5, .max = 9 },
+ .p = { .min = 5, .max = 80 },
+ .p1 = { .min = 1, .max = 8 },
+ .p2 = { .dot_limit = 200000,
+ .p2_slow = 10, .p2_fast = 5 },
+ .find_pll = intel_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_i9xx_lvds = {
+ .dot = { .min = 20000, .max = 400000 },
+ .vco = { .min = 1400000, .max = 2800000 },
+ .n = { .min = 1, .max = 6 },
+ .m = { .min = 70, .max = 120 },
+ .m1 = { .min = 10, .max = 22 },
+ .m2 = { .min = 5, .max = 9 },
+ .p = { .min = 7, .max = 98 },
+ .p1 = { .min = 1, .max = 8 },
+ .p2 = { .dot_limit = 112000,
+ .p2_slow = 14, .p2_fast = 7 },
+ .find_pll = intel_find_best_PLL,
+};
+
+
+static const intel_limit_t intel_limits_g4x_sdvo = {
+ .dot = { .min = 25000, .max = 270000 },
+ .vco = { .min = 1750000, .max = 3500000},
+ .n = { .min = 1, .max = 4 },
+ .m = { .min = 104, .max = 138 },
+ .m1 = { .min = 17, .max = 23 },
+ .m2 = { .min = 5, .max = 11 },
+ .p = { .min = 10, .max = 30 },
+ .p1 = { .min = 1, .max = 3},
+ .p2 = { .dot_limit = 270000,
+ .p2_slow = 10,
+ .p2_fast = 10
+ },
+ .find_pll = intel_g4x_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_g4x_hdmi = {
+ .dot = { .min = 22000, .max = 400000 },
+ .vco = { .min = 1750000, .max = 3500000},
+ .n = { .min = 1, .max = 4 },
+ .m = { .min = 104, .max = 138 },
+ .m1 = { .min = 16, .max = 23 },
+ .m2 = { .min = 5, .max = 11 },
+ .p = { .min = 5, .max = 80 },
+ .p1 = { .min = 1, .max = 8},
+ .p2 = { .dot_limit = 165000,
+ .p2_slow = 10, .p2_fast = 5 },
+ .find_pll = intel_g4x_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_g4x_single_channel_lvds = {
+ .dot = { .min = 20000, .max = 115000 },
+ .vco = { .min = 1750000, .max = 3500000 },
+ .n = { .min = 1, .max = 3 },
+ .m = { .min = 104, .max = 138 },
+ .m1 = { .min = 17, .max = 23 },
+ .m2 = { .min = 5, .max = 11 },
+ .p = { .min = 28, .max = 112 },
+ .p1 = { .min = 2, .max = 8 },
+ .p2 = { .dot_limit = 0,
+ .p2_slow = 14, .p2_fast = 14
+ },
+ .find_pll = intel_g4x_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_g4x_dual_channel_lvds = {
+ .dot = { .min = 80000, .max = 224000 },
+ .vco = { .min = 1750000, .max = 3500000 },
+ .n = { .min = 1, .max = 3 },
+ .m = { .min = 104, .max = 138 },
+ .m1 = { .min = 17, .max = 23 },
+ .m2 = { .min = 5, .max = 11 },
+ .p = { .min = 14, .max = 42 },
+ .p1 = { .min = 2, .max = 6 },
+ .p2 = { .dot_limit = 0,
+ .p2_slow = 7, .p2_fast = 7
+ },
+ .find_pll = intel_g4x_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_g4x_display_port = {
+ .dot = { .min = 161670, .max = 227000 },
+ .vco = { .min = 1750000, .max = 3500000},
+ .n = { .min = 1, .max = 2 },
+ .m = { .min = 97, .max = 108 },
+ .m1 = { .min = 0x10, .max = 0x12 },
+ .m2 = { .min = 0x05, .max = 0x06 },
+ .p = { .min = 10, .max = 20 },
+ .p1 = { .min = 1, .max = 2},
+ .p2 = { .dot_limit = 0,
+ .p2_slow = 10, .p2_fast = 10 },
+ .find_pll = intel_find_pll_g4x_dp,
+};
+
+static const intel_limit_t intel_limits_pineview_sdvo = {
+ .dot = { .min = 20000, .max = 400000},
+ .vco = { .min = 1700000, .max = 3500000 },
+ /* Pineview's Ncounter is a ring counter */
+ .n = { .min = 3, .max = 6 },
+ .m = { .min = 2, .max = 256 },
+ /* Pineview only has one combined m divider, which we treat as m2. */
+ .m1 = { .min = 0, .max = 0 },
+ .m2 = { .min = 0, .max = 254 },
+ .p = { .min = 5, .max = 80 },
+ .p1 = { .min = 1, .max = 8 },
+ .p2 = { .dot_limit = 200000,
+ .p2_slow = 10, .p2_fast = 5 },
+ .find_pll = intel_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_pineview_lvds = {
+ .dot = { .min = 20000, .max = 400000 },
+ .vco = { .min = 1700000, .max = 3500000 },
+ .n = { .min = 3, .max = 6 },
+ .m = { .min = 2, .max = 256 },
+ .m1 = { .min = 0, .max = 0 },
+ .m2 = { .min = 0, .max = 254 },
+ .p = { .min = 7, .max = 112 },
+ .p1 = { .min = 1, .max = 8 },
+ .p2 = { .dot_limit = 112000,
+ .p2_slow = 14, .p2_fast = 14 },
+ .find_pll = intel_find_best_PLL,
+};
+
+/* Ironlake / Sandybridge
+ *
+ * We calculate clock using (register_value + 2) for N/M1/M2, so here
+ * the range value for them is (actual_value - 2).
+ */
+static const intel_limit_t intel_limits_ironlake_dac = {
+ .dot = { .min = 25000, .max = 350000 },
+ .vco = { .min = 1760000, .max = 3510000 },
+ .n = { .min = 1, .max = 5 },
+ .m = { .min = 79, .max = 127 },
+ .m1 = { .min = 12, .max = 22 },
+ .m2 = { .min = 5, .max = 9 },
+ .p = { .min = 5, .max = 80 },
+ .p1 = { .min = 1, .max = 8 },
+ .p2 = { .dot_limit = 225000,
+ .p2_slow = 10, .p2_fast = 5 },
+ .find_pll = intel_g4x_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_ironlake_single_lvds = {
+ .dot = { .min = 25000, .max = 350000 },
+ .vco = { .min = 1760000, .max = 3510000 },
+ .n = { .min = 1, .max = 3 },
+ .m = { .min = 79, .max = 118 },
+ .m1 = { .min = 12, .max = 22 },
+ .m2 = { .min = 5, .max = 9 },
+ .p = { .min = 28, .max = 112 },
+ .p1 = { .min = 2, .max = 8 },
+ .p2 = { .dot_limit = 225000,
+ .p2_slow = 14, .p2_fast = 14 },
+ .find_pll = intel_g4x_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_ironlake_dual_lvds = {
+ .dot = { .min = 25000, .max = 350000 },
+ .vco = { .min = 1760000, .max = 3510000 },
+ .n = { .min = 1, .max = 3 },
+ .m = { .min = 79, .max = 127 },
+ .m1 = { .min = 12, .max = 22 },
+ .m2 = { .min = 5, .max = 9 },
+ .p = { .min = 14, .max = 56 },
+ .p1 = { .min = 2, .max = 8 },
+ .p2 = { .dot_limit = 225000,
+ .p2_slow = 7, .p2_fast = 7 },
+ .find_pll = intel_g4x_find_best_PLL,
+};
+
+/* LVDS 100mhz refclk limits. */
+static const intel_limit_t intel_limits_ironlake_single_lvds_100m = {
+ .dot = { .min = 25000, .max = 350000 },
+ .vco = { .min = 1760000, .max = 3510000 },
+ .n = { .min = 1, .max = 2 },
+ .m = { .min = 79, .max = 126 },
+ .m1 = { .min = 12, .max = 22 },
+ .m2 = { .min = 5, .max = 9 },
+ .p = { .min = 28, .max = 112 },
+ .p1 = { .min = 2, .max = 8 },
+ .p2 = { .dot_limit = 225000,
+ .p2_slow = 14, .p2_fast = 14 },
+ .find_pll = intel_g4x_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_ironlake_dual_lvds_100m = {
+ .dot = { .min = 25000, .max = 350000 },
+ .vco = { .min = 1760000, .max = 3510000 },
+ .n = { .min = 1, .max = 3 },
+ .m = { .min = 79, .max = 126 },
+ .m1 = { .min = 12, .max = 22 },
+ .m2 = { .min = 5, .max = 9 },
+ .p = { .min = 14, .max = 42 },
+ .p1 = { .min = 2, .max = 6 },
+ .p2 = { .dot_limit = 225000,
+ .p2_slow = 7, .p2_fast = 7 },
+ .find_pll = intel_g4x_find_best_PLL,
+};
+
+static const intel_limit_t intel_limits_ironlake_display_port = {
+ .dot = { .min = 25000, .max = 350000 },
+ .vco = { .min = 1760000, .max = 3510000},
+ .n = { .min = 1, .max = 2 },
+ .m = { .min = 81, .max = 90 },
+ .m1 = { .min = 12, .max = 22 },
+ .m2 = { .min = 5, .max = 9 },
+ .p = { .min = 10, .max = 20 },
+ .p1 = { .min = 1, .max = 2},
+ .p2 = { .dot_limit = 0,
+ .p2_slow = 10, .p2_fast = 10 },
+ .find_pll = intel_find_pll_ironlake_dp,
+};
+
+static const intel_limit_t *intel_ironlake_limit(struct drm_crtc *crtc,
+ int refclk)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ const intel_limit_t *limit;
+
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
+ if ((I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) ==
+ LVDS_CLKB_POWER_UP) {
+ /* LVDS dual channel */
+ if (refclk == 100000)
+ limit = &intel_limits_ironlake_dual_lvds_100m;
+ else
+ limit = &intel_limits_ironlake_dual_lvds;
+ } else {
+ if (refclk == 100000)
+ limit = &intel_limits_ironlake_single_lvds_100m;
+ else
+ limit = &intel_limits_ironlake_single_lvds;
+ }
+ } else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||
+ HAS_eDP)
+ limit = &intel_limits_ironlake_display_port;
+ else
+ limit = &intel_limits_ironlake_dac;
+
+ return limit;
+}
+
+static const intel_limit_t *intel_g4x_limit(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ const intel_limit_t *limit;
+
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
+ if ((I915_READ(LVDS) & LVDS_CLKB_POWER_MASK) ==
+ LVDS_CLKB_POWER_UP)
+ /* LVDS with dual channel */
+ limit = &intel_limits_g4x_dual_channel_lvds;
+ else
+ /* LVDS with dual channel */
+ limit = &intel_limits_g4x_single_channel_lvds;
+ } else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_HDMI) ||
+ intel_pipe_has_type(crtc, INTEL_OUTPUT_ANALOG)) {
+ limit = &intel_limits_g4x_hdmi;
+ } else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_SDVO)) {
+ limit = &intel_limits_g4x_sdvo;
+ } else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)) {
+ limit = &intel_limits_g4x_display_port;
+ } else /* The option is for other outputs */
+ limit = &intel_limits_i9xx_sdvo;
+
+ return limit;
+}
+
+static const intel_limit_t *intel_limit(struct drm_crtc *crtc, int refclk)
+{
+ struct drm_device *dev = crtc->dev;
+ const intel_limit_t *limit;
+
+ if (HAS_PCH_SPLIT(dev))
+ limit = intel_ironlake_limit(crtc, refclk);
+ else if (IS_G4X(dev)) {
+ limit = intel_g4x_limit(crtc);
+ } else if (IS_PINEVIEW(dev)) {
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
+ limit = &intel_limits_pineview_lvds;
+ else
+ limit = &intel_limits_pineview_sdvo;
+ } else if (!IS_GEN2(dev)) {
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
+ limit = &intel_limits_i9xx_lvds;
+ else
+ limit = &intel_limits_i9xx_sdvo;
+ } else {
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS))
+ limit = &intel_limits_i8xx_lvds;
+ else
+ limit = &intel_limits_i8xx_dvo;
+ }
+ return limit;
+}
+
+/* m1 is reserved as 0 in Pineview, n is a ring counter */
+static void pineview_clock(int refclk, intel_clock_t *clock)
+{
+ clock->m = clock->m2 + 2;
+ clock->p = clock->p1 * clock->p2;
+ clock->vco = refclk * clock->m / clock->n;
+ clock->dot = clock->vco / clock->p;
+}
+
+static void intel_clock(struct drm_device *dev, int refclk, intel_clock_t *clock)
+{
+ if (IS_PINEVIEW(dev)) {
+ pineview_clock(refclk, clock);
+ return;
+ }
+ clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2);
+ clock->p = clock->p1 * clock->p2;
+ clock->vco = refclk * clock->m / (clock->n + 2);
+ clock->dot = clock->vco / clock->p;
+}
+
+/**
+ * Returns whether any output on the specified pipe is of the specified type
+ */
+bool intel_pipe_has_type(struct drm_crtc *crtc, int type)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_mode_config *mode_config = &dev->mode_config;
+ struct intel_encoder *encoder;
+
+ list_for_each_entry(encoder, &mode_config->encoder_list, base.head)
+ if (encoder->base.crtc == crtc && encoder->type == type)
+ return true;
+
+ return false;
+}
+
+#define INTELPllInvalid(s) do { /* DRM_DEBUG(s); */ return false; } while (0)
+/**
+ * Returns whether the given set of divisors are valid for a given refclk with
+ * the given connectors.
+ */
+
+static bool intel_PLL_is_valid(struct drm_device *dev,
+ const intel_limit_t *limit,
+ const intel_clock_t *clock)
+{
+ if (clock->p1 < limit->p1.min || limit->p1.max < clock->p1)
+ INTELPllInvalid("p1 out of range\n");
+ if (clock->p < limit->p.min || limit->p.max < clock->p)
+ INTELPllInvalid("p out of range\n");
+ if (clock->m2 < limit->m2.min || limit->m2.max < clock->m2)
+ INTELPllInvalid("m2 out of range\n");
+ if (clock->m1 < limit->m1.min || limit->m1.max < clock->m1)
+ INTELPllInvalid("m1 out of range\n");
+ if (clock->m1 <= clock->m2 && !IS_PINEVIEW(dev))
+ INTELPllInvalid("m1 <= m2\n");
+ if (clock->m < limit->m.min || limit->m.max < clock->m)
+ INTELPllInvalid("m out of range\n");
+ if (clock->n < limit->n.min || limit->n.max < clock->n)
+ INTELPllInvalid("n out of range\n");
+ if (clock->vco < limit->vco.min || limit->vco.max < clock->vco)
+ INTELPllInvalid("vco out of range\n");
+ /* XXX: We may need to be checking "Dot clock" depending on the multiplier,
+ * connector, etc., rather than just a single range.
+ */
+ if (clock->dot < limit->dot.min || limit->dot.max < clock->dot)
+ INTELPllInvalid("dot out of range\n");
+
+ return true;
+}
+
+static bool
+intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *match_clock,
+ intel_clock_t *best_clock)
+
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ intel_clock_t clock;
+ int err = target;
+
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) &&
+ (I915_READ(LVDS)) != 0) {
+ /*
+ * For LVDS, if the panel is on, just rely on its current
+ * settings for dual-channel. We haven't figured out how to
+ * reliably set up different single/dual channel state, if we
+ * even can.
+ */
+ if ((I915_READ(LVDS) & LVDS_CLKB_POWER_MASK) ==
+ LVDS_CLKB_POWER_UP)
+ clock.p2 = limit->p2.p2_fast;
+ else
+ clock.p2 = limit->p2.p2_slow;
+ } else {
+ if (target < limit->p2.dot_limit)
+ clock.p2 = limit->p2.p2_slow;
+ else
+ clock.p2 = limit->p2.p2_fast;
+ }
+
+ memset(best_clock, 0, sizeof(*best_clock));
+
+ for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max;
+ clock.m1++) {
+ for (clock.m2 = limit->m2.min;
+ clock.m2 <= limit->m2.max; clock.m2++) {
+ /* m1 is always 0 in Pineview */
+ if (clock.m2 >= clock.m1 && !IS_PINEVIEW(dev))
+ break;
+ for (clock.n = limit->n.min;
+ clock.n <= limit->n.max; clock.n++) {
+ for (clock.p1 = limit->p1.min;
+ clock.p1 <= limit->p1.max; clock.p1++) {
+ int this_err;
+
+ intel_clock(dev, refclk, &clock);
+ if (!intel_PLL_is_valid(dev, limit,
+ &clock))
+ continue;
+ if (match_clock &&
+ clock.p != match_clock->p)
+ continue;
+
+ this_err = abs(clock.dot - target);
+ if (this_err < err) {
+ *best_clock = clock;
+ err = this_err;
+ }
+ }
+ }
+ }
+ }
+
+ return (err != target);
+}
+
+static bool
+intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *match_clock,
+ intel_clock_t *best_clock)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ intel_clock_t clock;
+ int max_n;
+ bool found;
+ /* approximately equals target * 0.00585 */
+ int err_most = (target >> 8) + (target >> 9);
+ found = false;
+
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
+ int lvds_reg;
+
+ if (HAS_PCH_SPLIT(dev))
+ lvds_reg = PCH_LVDS;
+ else
+ lvds_reg = LVDS;
+ if ((I915_READ(lvds_reg) & LVDS_CLKB_POWER_MASK) ==
+ LVDS_CLKB_POWER_UP)
+ clock.p2 = limit->p2.p2_fast;
+ else
+ clock.p2 = limit->p2.p2_slow;
+ } else {
+ if (target < limit->p2.dot_limit)
+ clock.p2 = limit->p2.p2_slow;
+ else
+ clock.p2 = limit->p2.p2_fast;
+ }
+
+ memset(best_clock, 0, sizeof(*best_clock));
+ max_n = limit->n.max;
+ /* based on hardware requirement, prefer smaller n to precision */
+ for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
+ /* based on hardware requirement, prefere larger m1,m2 */
+ for (clock.m1 = limit->m1.max;
+ clock.m1 >= limit->m1.min; clock.m1--) {
+ for (clock.m2 = limit->m2.max;
+ clock.m2 >= limit->m2.min; clock.m2--) {
+ for (clock.p1 = limit->p1.max;
+ clock.p1 >= limit->p1.min; clock.p1--) {
+ int this_err;
+
+ intel_clock(dev, refclk, &clock);
+ if (!intel_PLL_is_valid(dev, limit,
+ &clock))
+ continue;
+ if (match_clock &&
+ clock.p != match_clock->p)
+ continue;
+
+ this_err = abs(clock.dot - target);
+ if (this_err < err_most) {
+ *best_clock = clock;
+ err_most = this_err;
+ max_n = clock.n;
+ found = true;
+ }
+ }
+ }
+ }
+ }
+ return found;
+}
+
+static bool
+intel_find_pll_ironlake_dp(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *match_clock,
+ intel_clock_t *best_clock)
+{
+ struct drm_device *dev = crtc->dev;
+ intel_clock_t clock;
+
+ if (target < 200000) {
+ clock.n = 1;
+ clock.p1 = 2;
+ clock.p2 = 10;
+ clock.m1 = 12;
+ clock.m2 = 9;
+ } else {
+ clock.n = 2;
+ clock.p1 = 1;
+ clock.p2 = 10;
+ clock.m1 = 14;
+ clock.m2 = 8;
+ }
+ intel_clock(dev, refclk, &clock);
+ memcpy(best_clock, &clock, sizeof(intel_clock_t));
+ return true;
+}
+
+/* DisplayPort has only two frequencies, 162MHz and 270MHz */
+static bool
+intel_find_pll_g4x_dp(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *match_clock,
+ intel_clock_t *best_clock)
+{
+ intel_clock_t clock;
+ if (target < 200000) {
+ clock.p1 = 2;
+ clock.p2 = 10;
+ clock.n = 2;
+ clock.m1 = 23;
+ clock.m2 = 8;
+ } else {
+ clock.p1 = 1;
+ clock.p2 = 10;
+ clock.n = 1;
+ clock.m1 = 14;
+ clock.m2 = 2;
+ }
+ clock.m = 5 * (clock.m1 + 2) + (clock.m2 + 2);
+ clock.p = (clock.p1 * clock.p2);
+ clock.dot = 96000 * clock.m / (clock.n + 2) / clock.p;
+ clock.vco = 0;
+ memcpy(best_clock, &clock, sizeof(intel_clock_t));
+ return true;
+}
+
+/**
+ * intel_wait_for_vblank - wait for vblank on a given pipe
+ * @dev: drm device
+ * @pipe: pipe to wait for
+ *
+ * Wait for vblank to occur on a given pipe. Needed for various bits of
+ * mode setting code.
+ */
+void intel_wait_for_vblank(struct drm_device *dev, int pipe)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int pipestat_reg = PIPESTAT(pipe);
+
+ /* Clear existing vblank status. Note this will clear any other
+ * sticky status fields as well.
+ *
+ * This races with i915_driver_irq_handler() with the result
+ * that either function could miss a vblank event. Here it is not
+ * fatal, as we will either wait upon the next vblank interrupt or
+ * timeout. Generally speaking intel_wait_for_vblank() is only
+ * called during modeset at which time the GPU should be idle and
+ * should *not* be performing page flips and thus not waiting on
+ * vblanks...
+ * Currently, the result of us stealing a vblank from the irq
+ * handler is that a single frame will be skipped during swapbuffers.
+ */
+ I915_WRITE(pipestat_reg,
+ I915_READ(pipestat_reg) | PIPE_VBLANK_INTERRUPT_STATUS);
+
+ /* Wait for vblank interrupt bit to set */
+ if (_intel_wait_for(dev,
+ I915_READ(pipestat_reg) & PIPE_VBLANK_INTERRUPT_STATUS,
+ 50, 1, "915vbl"))
+ DRM_DEBUG_KMS("vblank wait timed out\n");
+}
+
+/*
+ * intel_wait_for_pipe_off - wait for pipe to turn off
+ * @dev: drm device
+ * @pipe: pipe to wait for
+ *
+ * After disabling a pipe, we can't wait for vblank in the usual way,
+ * spinning on the vblank interrupt status bit, since we won't actually
+ * see an interrupt when the pipe is disabled.
+ *
+ * On Gen4 and above:
+ * wait for the pipe register state bit to turn off
+ *
+ * Otherwise:
+ * wait for the display line value to settle (it usually
+ * ends up stopping at the start of the next frame).
+ *
+ */
+void intel_wait_for_pipe_off(struct drm_device *dev, int pipe)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ int reg = PIPECONF(pipe);
+
+ /* Wait for the Pipe State to go off */
+ if (_intel_wait_for(dev,
+ (I915_READ(reg) & I965_PIPECONF_ACTIVE) == 0, 100,
+ 1, "915pip"))
+ DRM_DEBUG_KMS("pipe_off wait timed out\n");
+ } else {
+ u32 last_line;
+ int reg = PIPEDSL(pipe);
+ unsigned long timeout = jiffies + msecs_to_jiffies(100);
+
+ /* Wait for the display line to settle */
+ do {
+ last_line = I915_READ(reg) & DSL_LINEMASK;
+ DELAY(5000);
+ } while (((I915_READ(reg) & DSL_LINEMASK) != last_line) &&
+ time_after(timeout, jiffies));
+ if (time_after(jiffies, timeout))
+ DRM_DEBUG_KMS("pipe_off wait timed out\n");
+ }
+}
+
+static const char *state_string(bool enabled)
+{
+ return enabled ? "on" : "off";
+}
+
+/* Only for pre-ILK configs */
+static void assert_pll(struct drm_i915_private *dev_priv,
+ enum pipe pipe, bool state)
+{
+ int reg;
+ u32 val;
+ bool cur_state;
+
+ reg = DPLL(pipe);
+ val = I915_READ(reg);
+ cur_state = !!(val & DPLL_VCO_ENABLE);
+ if (cur_state != state)
+ printf("PLL state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
+}
+#define assert_pll_enabled(d, p) assert_pll(d, p, true)
+#define assert_pll_disabled(d, p) assert_pll(d, p, false)
+
+/* For ILK+ */
+static void assert_pch_pll(struct drm_i915_private *dev_priv,
+ enum pipe pipe, bool state)
+{
+ int reg;
+ u32 val;
+ bool cur_state;
+
+ if (HAS_PCH_CPT(dev_priv->dev)) {
+ u32 pch_dpll;
+
+ pch_dpll = I915_READ(PCH_DPLL_SEL);
+
+ /* Make sure the selected PLL is enabled to the transcoder */
+ KASSERT(((pch_dpll >> (4 * pipe)) & 8) != 0,
+ ("transcoder %d PLL not enabled\n", pipe));
+
+ /* Convert the transcoder pipe number to a pll pipe number */
+ pipe = (pch_dpll >> (4 * pipe)) & 1;
+ }
+
+ reg = PCH_DPLL(pipe);
+ val = I915_READ(reg);
+ cur_state = !!(val & DPLL_VCO_ENABLE);
+ if (cur_state != state)
+ printf("PCH PLL state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
+}
+#define assert_pch_pll_enabled(d, p) assert_pch_pll(d, p, true)
+#define assert_pch_pll_disabled(d, p) assert_pch_pll(d, p, false)
+
+static void assert_fdi_tx(struct drm_i915_private *dev_priv,
+ enum pipe pipe, bool state)
+{
+ int reg;
+ u32 val;
+ bool cur_state;
+
+ reg = FDI_TX_CTL(pipe);
+ val = I915_READ(reg);
+ cur_state = !!(val & FDI_TX_ENABLE);
+ if (cur_state != state)
+ printf("FDI TX state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
+}
+#define assert_fdi_tx_enabled(d, p) assert_fdi_tx(d, p, true)
+#define assert_fdi_tx_disabled(d, p) assert_fdi_tx(d, p, false)
+
+static void assert_fdi_rx(struct drm_i915_private *dev_priv,
+ enum pipe pipe, bool state)
+{
+ int reg;
+ u32 val;
+ bool cur_state;
+
+ reg = FDI_RX_CTL(pipe);
+ val = I915_READ(reg);
+ cur_state = !!(val & FDI_RX_ENABLE);
+ if (cur_state != state)
+ printf("FDI RX state assertion failure (expected %s, current %s)\n",
+ state_string(state), state_string(cur_state));
+}
+#define assert_fdi_rx_enabled(d, p) assert_fdi_rx(d, p, true)
+#define assert_fdi_rx_disabled(d, p) assert_fdi_rx(d, p, false)
+
+static void assert_fdi_tx_pll_enabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int reg;
+ u32 val;
+
+ /* ILK FDI PLL is always enabled */
+ if (dev_priv->info->gen == 5)
+ return;
+
+ reg = FDI_TX_CTL(pipe);
+ val = I915_READ(reg);
+ if (!(val & FDI_TX_PLL_ENABLE))
+ printf("FDI TX PLL assertion failure, should be active but is disabled\n");
+}
+
+static void assert_fdi_rx_pll_enabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int reg;
+ u32 val;
+
+ reg = FDI_RX_CTL(pipe);
+ val = I915_READ(reg);
+ if (!(val & FDI_RX_PLL_ENABLE))
+ printf("FDI RX PLL assertion failure, should be active but is disabled\n");
+}
+
+static void assert_panel_unlocked(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int pp_reg, lvds_reg;
+ u32 val;
+ enum pipe panel_pipe = PIPE_A;
+ bool locked = true;
+
+ if (HAS_PCH_SPLIT(dev_priv->dev)) {
+ pp_reg = PCH_PP_CONTROL;
+ lvds_reg = PCH_LVDS;
+ } else {
+ pp_reg = PP_CONTROL;
+ lvds_reg = LVDS;
+ }
+
+ val = I915_READ(pp_reg);
+ if (!(val & PANEL_POWER_ON) ||
+ ((val & PANEL_UNLOCK_REGS) == PANEL_UNLOCK_REGS))
+ locked = false;
+
+ if (I915_READ(lvds_reg) & LVDS_PIPEB_SELECT)
+ panel_pipe = PIPE_B;
+
+ if (panel_pipe == pipe && locked)
+ printf("panel assertion failure, pipe %c regs locked\n",
+ pipe_name(pipe));
+}
+
+void assert_pipe(struct drm_i915_private *dev_priv,
+ enum pipe pipe, bool state)
+{
+ int reg;
+ u32 val;
+ bool cur_state;
+
+ /* if we need the pipe A quirk it must be always on */
+ if (pipe == PIPE_A && dev_priv->quirks & QUIRK_PIPEA_FORCE)
+ state = true;
+
+ reg = PIPECONF(pipe);
+ val = I915_READ(reg);
+ cur_state = !!(val & PIPECONF_ENABLE);
+ if (cur_state != state)
+ printf("pipe %c assertion failure (expected %s, current %s)\n",
+ pipe_name(pipe), state_string(state), state_string(cur_state));
+}
+
+static void assert_plane(struct drm_i915_private *dev_priv,
+ enum plane plane, bool state)
+{
+ int reg;
+ u32 val;
+ bool cur_state;
+
+ reg = DSPCNTR(plane);
+ val = I915_READ(reg);
+ cur_state = !!(val & DISPLAY_PLANE_ENABLE);
+ if (cur_state != state)
+ printf("plane %c assertion failure, (expected %s, current %s)\n",
+ plane_name(plane), state_string(state), state_string(cur_state));
+}
+
+#define assert_plane_enabled(d, p) assert_plane(d, p, true)
+#define assert_plane_disabled(d, p) assert_plane(d, p, false)
+
+static void assert_planes_disabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int reg, i;
+ u32 val;
+ int cur_pipe;
+
+ /* Planes are fixed to pipes on ILK+ */
+ if (HAS_PCH_SPLIT(dev_priv->dev)) {
+ reg = DSPCNTR(pipe);
+ val = I915_READ(reg);
+ if ((val & DISPLAY_PLANE_ENABLE) != 0)
+ printf("plane %c assertion failure, should be disabled but not\n",
+ plane_name(pipe));
+ return;
+ }
+
+ /* Need to check both planes against the pipe */
+ for (i = 0; i < 2; i++) {
+ reg = DSPCNTR(i);
+ val = I915_READ(reg);
+ cur_pipe = (val & DISPPLANE_SEL_PIPE_MASK) >>
+ DISPPLANE_SEL_PIPE_SHIFT;
+ if ((val & DISPLAY_PLANE_ENABLE) && pipe == cur_pipe)
+ printf("plane %c assertion failure, should be off on pipe %c but is still active\n",
+ plane_name(i), pipe_name(pipe));
+ }
+}
+
+static void assert_pch_refclk_enabled(struct drm_i915_private *dev_priv)
+{
+ u32 val;
+ bool enabled;
+
+ val = I915_READ(PCH_DREF_CONTROL);
+ enabled = !!(val & (DREF_SSC_SOURCE_MASK | DREF_NONSPREAD_SOURCE_MASK |
+ DREF_SUPERSPREAD_SOURCE_MASK));
+ if (!enabled)
+ printf("PCH refclk assertion failure, should be active but is disabled\n");
+}
+
+static void assert_transcoder_disabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int reg;
+ u32 val;
+ bool enabled;
+
+ reg = TRANSCONF(pipe);
+ val = I915_READ(reg);
+ enabled = !!(val & TRANS_ENABLE);
+ if (enabled)
+ printf("transcoder assertion failed, should be off on pipe %c but is still active\n",
+ pipe_name(pipe));
+}
+
+static bool hdmi_pipe_enabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe, u32 val)
+{
+ if ((val & PORT_ENABLE) == 0)
+ return false;
+
+ if (HAS_PCH_CPT(dev_priv->dev)) {
+ if ((val & PORT_TRANS_SEL_MASK) != PORT_TRANS_SEL_CPT(pipe))
+ return false;
+ } else {
+ if ((val & TRANSCODER_MASK) != TRANSCODER(pipe))
+ return false;
+ }
+ return true;
+}
+
+static bool lvds_pipe_enabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe, u32 val)
+{
+ if ((val & LVDS_PORT_EN) == 0)
+ return false;
+
+ if (HAS_PCH_CPT(dev_priv->dev)) {
+ if ((val & PORT_TRANS_SEL_MASK) != PORT_TRANS_SEL_CPT(pipe))
+ return false;
+ } else {
+ if ((val & LVDS_PIPE_MASK) != LVDS_PIPE(pipe))
+ return false;
+ }
+ return true;
+}
+
+static bool adpa_pipe_enabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe, u32 val)
+{
+ if ((val & ADPA_DAC_ENABLE) == 0)
+ return false;
+ if (HAS_PCH_CPT(dev_priv->dev)) {
+ if ((val & PORT_TRANS_SEL_MASK) != PORT_TRANS_SEL_CPT(pipe))
+ return false;
+ } else {
+ if ((val & ADPA_PIPE_SELECT_MASK) != ADPA_PIPE_SELECT(pipe))
+ return false;
+ }
+ 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)
+{
+ u32 val = I915_READ(reg);
+ if (dp_pipe_enabled(dev_priv, pipe, port_sel, val))
+ printf("PCH DP (0x%08x) enabled on transcoder %c, should be disabled\n",
+ reg, pipe_name(pipe));
+}
+
+static void assert_pch_hdmi_disabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe, int reg)
+{
+ u32 val = I915_READ(reg);
+ if (hdmi_pipe_enabled(dev_priv, val, pipe))
+ printf("PCH HDMI (0x%08x) enabled on transcoder %c, should be disabled\n",
+ reg, pipe_name(pipe));
+}
+
+static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int reg;
+ u32 val;
+
+ assert_pch_dp_disabled(dev_priv, pipe, PCH_DP_B, TRANS_DP_PORT_SEL_B);
+ assert_pch_dp_disabled(dev_priv, pipe, PCH_DP_C, TRANS_DP_PORT_SEL_C);
+ assert_pch_dp_disabled(dev_priv, pipe, PCH_DP_D, TRANS_DP_PORT_SEL_D);
+
+ reg = PCH_ADPA;
+ val = I915_READ(reg);
+ if (adpa_pipe_enabled(dev_priv, val, pipe))
+ printf("PCH VGA enabled on transcoder %c, should be disabled\n",
+ pipe_name(pipe));
+
+ reg = PCH_LVDS;
+ val = I915_READ(reg);
+ if (lvds_pipe_enabled(dev_priv, val, pipe))
+ printf("PCH LVDS enabled on transcoder %c, should be disabled\n",
+ pipe_name(pipe));
+
+ assert_pch_hdmi_disabled(dev_priv, pipe, HDMIB);
+ assert_pch_hdmi_disabled(dev_priv, pipe, HDMIC);
+ assert_pch_hdmi_disabled(dev_priv, pipe, HDMID);
+}
+
+/**
+ * intel_enable_pll - enable a PLL
+ * @dev_priv: i915 private structure
+ * @pipe: pipe PLL to enable
+ *
+ * Enable @pipe's PLL so we can start pumping pixels from a plane. Check to
+ * make sure the PLL reg is writable first though, since the panel write
+ * protect mechanism may be enabled.
+ *
+ * Note! This is for pre-ILK only.
+ */
+static void intel_enable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
+{
+ int reg;
+ u32 val;
+
+ /* No really, not for ILK+ */
+ KASSERT(dev_priv->info->gen < 5, ("Wrong device gen"));
+
+ /* PLL is protected by panel, make sure we can write it */
+ if (IS_MOBILE(dev_priv->dev) && !IS_I830(dev_priv->dev))
+ assert_panel_unlocked(dev_priv, pipe);
+
+ reg = DPLL(pipe);
+ val = I915_READ(reg);
+ val |= DPLL_VCO_ENABLE;
+
+ /* We do this three times for luck */
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ DELAY(150); /* wait for warmup */
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ DELAY(150); /* wait for warmup */
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ DELAY(150); /* wait for warmup */
+}
+
+/**
+ * intel_disable_pll - disable a PLL
+ * @dev_priv: i915 private structure
+ * @pipe: pipe PLL to disable
+ *
+ * Disable the PLL for @pipe, making sure the pipe is off first.
+ *
+ * Note! This is for pre-ILK only.
+ */
+static void intel_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
+{
+ int reg;
+ u32 val;
+
+ /* Don't disable pipe A or pipe A PLLs if needed */
+ if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE))
+ return;
+
+ /* Make sure the pipe isn't still relying on us */
+ assert_pipe_disabled(dev_priv, pipe);
+
+ reg = DPLL(pipe);
+ val = I915_READ(reg);
+ val &= ~DPLL_VCO_ENABLE;
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+}
+
+/**
+ * intel_enable_pch_pll - enable PCH PLL
+ * @dev_priv: i915 private structure
+ * @pipe: pipe PLL to enable
+ *
+ * The PCH PLL needs to be enabled before the PCH transcoder, since it
+ * drives the transcoder clock.
+ */
+static void intel_enable_pch_pll(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int reg;
+ u32 val;
+
+ if (pipe > 1)
+ return;
+
+ /* PCH only available on ILK+ */
+ KASSERT(dev_priv->info->gen >= 5, ("Wrong device gen"));
+
+ /* PCH refclock must be enabled first */
+ assert_pch_refclk_enabled(dev_priv);
+
+ reg = PCH_DPLL(pipe);
+ val = I915_READ(reg);
+ val |= DPLL_VCO_ENABLE;
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ DELAY(200);
+}
+
+static void intel_disable_pch_pll(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int reg;
+ u32 val, pll_mask = TRANSC_DPLL_ENABLE | TRANSC_DPLLB_SEL,
+ pll_sel = TRANSC_DPLL_ENABLE;
+
+ if (pipe > 1)
+ return;
+
+ /* PCH only available on ILK+ */
+ KASSERT(dev_priv->info->gen >= 5, ("Wrong device gen"));
+
+ /* Make sure transcoder isn't still depending on us */
+ assert_transcoder_disabled(dev_priv, pipe);
+
+ if (pipe == 0)
+ pll_sel |= TRANSC_DPLLA_SEL;
+ else if (pipe == 1)
+ pll_sel |= TRANSC_DPLLB_SEL;
+
+
+ if ((I915_READ(PCH_DPLL_SEL) & pll_mask) == pll_sel)
+ return;
+
+ reg = PCH_DPLL(pipe);
+ val = I915_READ(reg);
+ val &= ~DPLL_VCO_ENABLE;
+ I915_WRITE(reg, val);
+ POSTING_READ(reg);
+ DELAY(200);
+}
+
+static void intel_enable_transcoder(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int reg;
+ u32 val, pipeconf_val;
+ struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
+
+ /* PCH only available on ILK+ */
+ KASSERT(dev_priv->info->gen >= 5, ("Wrong device gen"));
+
+ /* Make sure PCH DPLL is enabled */
+ assert_pch_pll_enabled(dev_priv, pipe);
+
+ /* FDI must be feeding us bits for PCH ports */
+ assert_fdi_tx_enabled(dev_priv, pipe);
+ assert_fdi_rx_enabled(dev_priv, pipe);
+
+
+ reg = TRANSCONF(pipe);
+ val = I915_READ(reg);
+ pipeconf_val = I915_READ(PIPECONF(pipe));
+
+ if (HAS_PCH_IBX(dev_priv->dev)) {
+ /*
+ * make the BPC in transcoder be consistent with
+ * that in pipeconf reg.
+ */
+ val &= ~PIPE_BPC_MASK;
+ val |= pipeconf_val & PIPE_BPC_MASK;
+ }
+
+ val &= ~TRANS_INTERLACE_MASK;
+ if ((pipeconf_val & PIPECONF_INTERLACE_MASK) == PIPECONF_INTERLACED_ILK)
+ if (HAS_PCH_IBX(dev_priv->dev) &&
+ intel_pipe_has_type(crtc, INTEL_OUTPUT_SDVO))
+ val |= TRANS_LEGACY_INTERLACED_ILK;
+ else
+ val |= TRANS_INTERLACED;
+ else
+ val |= TRANS_PROGRESSIVE;
+
+ I915_WRITE(reg, val | TRANS_ENABLE);
+ if (_intel_wait_for(dev_priv->dev, I915_READ(reg) & TRANS_STATE_ENABLE,
+ 100, 1, "915trc"))
+ DRM_ERROR("failed to enable transcoder %d\n", pipe);
+}
+
+static void intel_disable_transcoder(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int reg;
+ u32 val;
+
+ /* FDI relies on the transcoder */
+ assert_fdi_tx_disabled(dev_priv, pipe);
+ assert_fdi_rx_disabled(dev_priv, pipe);
+
+ /* Ports must be off as well */
+ assert_pch_ports_disabled(dev_priv, pipe);
+
+ reg = TRANSCONF(pipe);
+ val = I915_READ(reg);
+ val &= ~TRANS_ENABLE;
+ I915_WRITE(reg, val);
+ /* wait for PCH transcoder off, transcoder state */
+ if (_intel_wait_for(dev_priv->dev,
+ (I915_READ(reg) & TRANS_STATE_ENABLE) == 0, 50,
+ 1, "915trd"))
+ DRM_ERROR("failed to disable transcoder %d\n", pipe);
+}
+
+/**
+ * intel_enable_pipe - enable a pipe, asserting requirements
+ * @dev_priv: i915 private structure
+ * @pipe: pipe to enable
+ * @pch_port: on ILK+, is this pipe driving a PCH port or not
+ *
+ * Enable @pipe, making sure that various hardware specific requirements
+ * are met, if applicable, e.g. PLL enabled, LVDS pairs enabled, etc.
+ *
+ * @pipe should be %PIPE_A or %PIPE_B.
+ *
+ * Will wait until the pipe is actually running (i.e. first vblank) before
+ * returning.
+ */
+static void intel_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe,
+ bool pch_port)
+{
+ int reg;
+ u32 val;
+
+ /*
+ * A pipe without a PLL won't actually be able to drive bits from
+ * a plane. On ILK+ the pipe PLLs are integrated, so we don't
+ * need the check.
+ */
+ if (!HAS_PCH_SPLIT(dev_priv->dev))
+ assert_pll_enabled(dev_priv, pipe);
+ else {
+ if (pch_port) {
+ /* if driving the PCH, we need FDI enabled */
+ assert_fdi_rx_pll_enabled(dev_priv, pipe);
+ assert_fdi_tx_pll_enabled(dev_priv, pipe);
+ }
+ /* FIXME: assert CPU port conditions for SNB+ */
+ }
+
+ reg = PIPECONF(pipe);
+ val = I915_READ(reg);
+ if (val & PIPECONF_ENABLE)
+ return;
+
+ I915_WRITE(reg, val | PIPECONF_ENABLE);
+ intel_wait_for_vblank(dev_priv->dev, pipe);
+}
+
+/**
+ * intel_disable_pipe - disable a pipe, asserting requirements
+ * @dev_priv: i915 private structure
+ * @pipe: pipe to disable
+ *
+ * Disable @pipe, making sure that various hardware specific requirements
+ * are met, if applicable, e.g. plane disabled, panel fitter off, etc.
+ *
+ * @pipe should be %PIPE_A or %PIPE_B.
+ *
+ * Will wait until the pipe has shut down before returning.
+ */
+static void intel_disable_pipe(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ int reg;
+ u32 val;
+
+ /*
+ * Make sure planes won't keep trying to pump pixels to us,
+ * or we might hang the display.
+ */
+ assert_planes_disabled(dev_priv, pipe);
+
+ /* Don't disable pipe A or pipe A PLLs if needed */
+ if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE))
+ return;
+
+ reg = PIPECONF(pipe);
+ val = I915_READ(reg);
+ if ((val & PIPECONF_ENABLE) == 0)
+ return;
+
+ I915_WRITE(reg, val & ~PIPECONF_ENABLE);
+ intel_wait_for_pipe_off(dev_priv->dev, pipe);
+}
+
+/*
+ * Plane regs are double buffered, going from enabled->disabled needs a
+ * trigger in order to latch. The display address reg provides this.
+ */
+static void intel_flush_display_plane(struct drm_i915_private *dev_priv,
+ enum plane plane)
+{
+ I915_WRITE(DSPADDR(plane), I915_READ(DSPADDR(plane)));
+ I915_WRITE(DSPSURF(plane), I915_READ(DSPSURF(plane)));
+}
+
+/**
+ * intel_enable_plane - enable a display plane on a given pipe
+ * @dev_priv: i915 private structure
+ * @plane: plane to enable
+ * @pipe: pipe being fed
+ *
+ * Enable @plane on @pipe, making sure that @pipe is running first.
+ */
+static void intel_enable_plane(struct drm_i915_private *dev_priv,
+ enum plane plane, enum pipe pipe)
+{
+ int reg;
+ u32 val;
+
+ /* If the pipe isn't enabled, we can't pump pixels and may hang */
+ assert_pipe_enabled(dev_priv, pipe);
+
+ reg = DSPCNTR(plane);
+ val = I915_READ(reg);
+ if (val & DISPLAY_PLANE_ENABLE)
+ return;
+
+ I915_WRITE(reg, val | DISPLAY_PLANE_ENABLE);
+ intel_flush_display_plane(dev_priv, plane);
+ intel_wait_for_vblank(dev_priv->dev, pipe);
+}
+
+/**
+ * intel_disable_plane - disable a display plane
+ * @dev_priv: i915 private structure
+ * @plane: plane to disable
+ * @pipe: pipe consuming the data
+ *
+ * Disable @plane; should be an independent operation.
+ */
+static void intel_disable_plane(struct drm_i915_private *dev_priv,
+ enum plane plane, enum pipe pipe)
+{
+ int reg;
+ u32 val;
+
+ reg = DSPCNTR(plane);
+ val = I915_READ(reg);
+ if ((val & DISPLAY_PLANE_ENABLE) == 0)
+ return;
+
+ I915_WRITE(reg, val & ~DISPLAY_PLANE_ENABLE);
+ intel_flush_display_plane(dev_priv, plane);
+ intel_wait_for_vblank(dev_priv->dev, pipe);
+}
+
+static void disable_pch_dp(struct drm_i915_private *dev_priv,
+ enum pipe pipe, int reg, u32 port_sel)
+{
+ u32 val = I915_READ(reg);
+ if (dp_pipe_enabled(dev_priv, pipe, port_sel, val)) {
+ DRM_DEBUG_KMS("Disabling pch dp %x on pipe %d\n", reg, pipe);
+ I915_WRITE(reg, val & ~DP_PORT_EN);
+ }
+}
+
+static void disable_pch_hdmi(struct drm_i915_private *dev_priv,
+ enum pipe pipe, int reg)
+{
+ u32 val = I915_READ(reg);
+ if (hdmi_pipe_enabled(dev_priv, val, pipe)) {
+ DRM_DEBUG_KMS("Disabling pch HDMI %x on pipe %d\n",
+ reg, pipe);
+ I915_WRITE(reg, val & ~PORT_ENABLE);
+ }
+}
+
+/* Disable any ports connected to this transcoder */
+static void intel_disable_pch_ports(struct drm_i915_private *dev_priv,
+ enum pipe pipe)
+{
+ u32 reg, val;
+
+ val = I915_READ(PCH_PP_CONTROL);
+ I915_WRITE(PCH_PP_CONTROL, val | PANEL_UNLOCK_REGS);
+
+ disable_pch_dp(dev_priv, pipe, PCH_DP_B, TRANS_DP_PORT_SEL_B);
+ disable_pch_dp(dev_priv, pipe, PCH_DP_C, TRANS_DP_PORT_SEL_C);
+ disable_pch_dp(dev_priv, pipe, PCH_DP_D, TRANS_DP_PORT_SEL_D);
+
+ reg = PCH_ADPA;
+ val = I915_READ(reg);
+ if (adpa_pipe_enabled(dev_priv, val, pipe))
+ I915_WRITE(reg, val & ~ADPA_DAC_ENABLE);
+
+ reg = PCH_LVDS;
+ val = I915_READ(reg);
+ if (lvds_pipe_enabled(dev_priv, val, pipe)) {
+ DRM_DEBUG_KMS("disable lvds on pipe %d val 0x%08x\n", pipe, val);
+ I915_WRITE(reg, val & ~LVDS_PORT_EN);
+ POSTING_READ(reg);
+ DELAY(100);
+ }
+
+ disable_pch_hdmi(dev_priv, pipe, HDMIB);
+ disable_pch_hdmi(dev_priv, pipe, HDMIC);
+ disable_pch_hdmi(dev_priv, pipe, HDMID);
+}
+
+static void i8xx_disable_fbc(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 fbc_ctl;
+
+ /* Disable compression */
+ fbc_ctl = I915_READ(FBC_CONTROL);
+ if ((fbc_ctl & FBC_CTL_EN) == 0)
+ return;
+
+ fbc_ctl &= ~FBC_CTL_EN;
+ I915_WRITE(FBC_CONTROL, fbc_ctl);
+
+ /* Wait for compressing bit to clear */
+ if (_intel_wait_for(dev,
+ (I915_READ(FBC_STATUS) & FBC_STAT_COMPRESSING) == 0, 10,
+ 1, "915fbd")) {
+ DRM_DEBUG_KMS("FBC idle timed out\n");
+ return;
+ }
+
+ DRM_DEBUG_KMS("disabled FBC\n");
+}
+
+static void i8xx_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_framebuffer *fb = crtc->fb;
+ struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
+ struct drm_i915_gem_object *obj = intel_fb->obj;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int cfb_pitch;
+ int plane, i;
+ u32 fbc_ctl, fbc_ctl2;
+
+ cfb_pitch = dev_priv->cfb_size / FBC_LL_SIZE;
+ if (fb->pitches[0] < cfb_pitch)
+ cfb_pitch = fb->pitches[0];
+
+ /* FBC_CTL wants 64B units */
+ cfb_pitch = (cfb_pitch / 64) - 1;
+ plane = intel_crtc->plane == 0 ? FBC_CTL_PLANEA : FBC_CTL_PLANEB;
+
+ /* Clear old tags */
+ for (i = 0; i < (FBC_LL_SIZE / 32) + 1; i++)
+ I915_WRITE(FBC_TAG + (i * 4), 0);
+
+ /* Set it up... */
+ fbc_ctl2 = FBC_CTL_FENCE_DBL | FBC_CTL_IDLE_IMM | FBC_CTL_CPU_FENCE;
+ fbc_ctl2 |= plane;
+ I915_WRITE(FBC_CONTROL2, fbc_ctl2);
+ I915_WRITE(FBC_FENCE_OFF, crtc->y);
+
+ /* enable it... */
+ fbc_ctl = FBC_CTL_EN | FBC_CTL_PERIODIC;
+ if (IS_I945GM(dev))
+ fbc_ctl |= FBC_CTL_C3_IDLE; /* 945 needs special SR handling */
+ fbc_ctl |= (cfb_pitch & 0xff) << FBC_CTL_STRIDE_SHIFT;
+ fbc_ctl |= (interval & 0x2fff) << FBC_CTL_INTERVAL_SHIFT;
+ fbc_ctl |= obj->fence_reg;
+ I915_WRITE(FBC_CONTROL, fbc_ctl);
+
+ DRM_DEBUG_KMS("enabled FBC, pitch %d, yoff %d, plane %d, ",
+ cfb_pitch, crtc->y, intel_crtc->plane);
+}
+
+static bool i8xx_fbc_enabled(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ return I915_READ(FBC_CONTROL) & FBC_CTL_EN;
+}
+
+static void g4x_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_framebuffer *fb = crtc->fb;
+ struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
+ struct drm_i915_gem_object *obj = intel_fb->obj;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int plane = intel_crtc->plane == 0 ? DPFC_CTL_PLANEA : DPFC_CTL_PLANEB;
+ unsigned long stall_watermark = 200;
+ u32 dpfc_ctl;
+
+ dpfc_ctl = plane | DPFC_SR_EN | DPFC_CTL_LIMIT_1X;
+ dpfc_ctl |= DPFC_CTL_FENCE_EN | obj->fence_reg;
+ I915_WRITE(DPFC_CHICKEN, DPFC_HT_MODIFY);
+
+ I915_WRITE(DPFC_RECOMP_CTL, DPFC_RECOMP_STALL_EN |
+ (stall_watermark << DPFC_RECOMP_STALL_WM_SHIFT) |
+ (interval << DPFC_RECOMP_TIMER_COUNT_SHIFT));
+ I915_WRITE(DPFC_FENCE_YOFF, crtc->y);
+
+ /* enable it... */
+ I915_WRITE(DPFC_CONTROL, I915_READ(DPFC_CONTROL) | DPFC_CTL_EN);
+
+ DRM_DEBUG_KMS("enabled fbc on plane %d\n", intel_crtc->plane);
+}
+
+static void g4x_disable_fbc(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 dpfc_ctl;
+
+ /* Disable compression */
+ dpfc_ctl = I915_READ(DPFC_CONTROL);
+ if (dpfc_ctl & DPFC_CTL_EN) {
+ dpfc_ctl &= ~DPFC_CTL_EN;
+ I915_WRITE(DPFC_CONTROL, dpfc_ctl);
+
+ DRM_DEBUG_KMS("disabled FBC\n");
+ }
+}
+
+static bool g4x_fbc_enabled(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ return I915_READ(DPFC_CONTROL) & DPFC_CTL_EN;
+}
+
+static void sandybridge_blit_fbc_update(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 blt_ecoskpd;
+
+ /* Make sure blitter notifies FBC of writes */
+ gen6_gt_force_wake_get(dev_priv);
+ blt_ecoskpd = I915_READ(GEN6_BLITTER_ECOSKPD);
+ blt_ecoskpd |= GEN6_BLITTER_FBC_NOTIFY <<
+ GEN6_BLITTER_LOCK_SHIFT;
+ I915_WRITE(GEN6_BLITTER_ECOSKPD, blt_ecoskpd);
+ blt_ecoskpd |= GEN6_BLITTER_FBC_NOTIFY;
+ I915_WRITE(GEN6_BLITTER_ECOSKPD, blt_ecoskpd);
+ blt_ecoskpd &= ~(GEN6_BLITTER_FBC_NOTIFY <<
+ GEN6_BLITTER_LOCK_SHIFT);
+ I915_WRITE(GEN6_BLITTER_ECOSKPD, blt_ecoskpd);
+ POSTING_READ(GEN6_BLITTER_ECOSKPD);
+ gen6_gt_force_wake_put(dev_priv);
+}
+
+static void ironlake_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_framebuffer *fb = crtc->fb;
+ struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
+ struct drm_i915_gem_object *obj = intel_fb->obj;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int plane = intel_crtc->plane == 0 ? DPFC_CTL_PLANEA : DPFC_CTL_PLANEB;
+ unsigned long stall_watermark = 200;
+ u32 dpfc_ctl;
+
+ dpfc_ctl = I915_READ(ILK_DPFC_CONTROL);
+ dpfc_ctl &= DPFC_RESERVED;
+ dpfc_ctl |= (plane | DPFC_CTL_LIMIT_1X);
+ /* Set persistent mode for front-buffer rendering, ala X. */
+ dpfc_ctl |= DPFC_CTL_PERSISTENT_MODE;
+ dpfc_ctl |= (DPFC_CTL_FENCE_EN | obj->fence_reg);
+ I915_WRITE(ILK_DPFC_CHICKEN, DPFC_HT_MODIFY);
+
+ I915_WRITE(ILK_DPFC_RECOMP_CTL, DPFC_RECOMP_STALL_EN |
+ (stall_watermark << DPFC_RECOMP_STALL_WM_SHIFT) |
+ (interval << DPFC_RECOMP_TIMER_COUNT_SHIFT));
+ I915_WRITE(ILK_DPFC_FENCE_YOFF, crtc->y);
+ I915_WRITE(ILK_FBC_RT_BASE, obj->gtt_offset | ILK_FBC_RT_VALID);
+ /* enable it... */
+ I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);
+
+ if (IS_GEN6(dev)) {
+ I915_WRITE(SNB_DPFC_CTL_SA,
+ SNB_CPU_FENCE_ENABLE | obj->fence_reg);
+ I915_WRITE(DPFC_CPU_FENCE_OFFSET, crtc->y);
+ sandybridge_blit_fbc_update(dev);
+ }
+
+ DRM_DEBUG_KMS("enabled fbc on plane %d\n", intel_crtc->plane);
+}
+
+static void ironlake_disable_fbc(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 dpfc_ctl;
+
+ /* Disable compression */
+ dpfc_ctl = I915_READ(ILK_DPFC_CONTROL);
+ if (dpfc_ctl & DPFC_CTL_EN) {
+ dpfc_ctl &= ~DPFC_CTL_EN;
+ I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl);
+
+ DRM_DEBUG_KMS("disabled FBC\n");
+ }
+}
+
+static bool ironlake_fbc_enabled(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ return I915_READ(ILK_DPFC_CONTROL) & DPFC_CTL_EN;
+}
+
+bool intel_fbc_enabled(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (!dev_priv->display.fbc_enabled)
+ return false;
+
+ return dev_priv->display.fbc_enabled(dev);
+}
+
+static void intel_fbc_work_fn(void *arg, int pending)
+{
+ struct intel_fbc_work *work = arg;
+ struct drm_device *dev = work->crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ DRM_LOCK(dev);
+ if (work == dev_priv->fbc_work) {
+ /* Double check that we haven't switched fb without cancelling
+ * the prior work.
+ */
+ if (work->crtc->fb == work->fb) {
+ dev_priv->display.enable_fbc(work->crtc,
+ work->interval);
+
+ dev_priv->cfb_plane = to_intel_crtc(work->crtc)->plane;
+ dev_priv->cfb_fb = work->crtc->fb->base.id;
+ dev_priv->cfb_y = work->crtc->y;
+ }
+
+ dev_priv->fbc_work = NULL;
+ }
+ DRM_UNLOCK(dev);
+
+ free(work, DRM_MEM_KMS);
+}
+
+static void intel_cancel_fbc_work(struct drm_i915_private *dev_priv)
+{
+ u_int pending;
+
+ if (dev_priv->fbc_work == NULL)
+ return;
+
+ DRM_DEBUG_KMS("cancelling pending FBC enable\n");
+
+ /* Synchronisation is provided by struct_mutex and checking of
+ * dev_priv->fbc_work, so we can perform the cancellation
+ * entirely asynchronously.
+ */
+ if (taskqueue_cancel_timeout(dev_priv->tq, &dev_priv->fbc_work->task,
+ &pending) == 0)
+ /* tasklet was killed before being run, clean up */
+ free(dev_priv->fbc_work, DRM_MEM_KMS);
+
+ /* Mark the work as no longer wanted so that if it does
+ * wake-up (because the work was already running and waiting
+ * for our mutex), it will discover that is no longer
+ * necessary to run.
+ */
+ dev_priv->fbc_work = NULL;
+}
+
+static void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval)
+{
+ struct intel_fbc_work *work;
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (!dev_priv->display.enable_fbc)
+ return;
+
+ intel_cancel_fbc_work(dev_priv);
+
+ work = malloc(sizeof(*work), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ work->crtc = crtc;
+ work->fb = crtc->fb;
+ work->interval = interval;
+ TIMEOUT_TASK_INIT(dev_priv->tq, &work->task, 0, intel_fbc_work_fn,
+ work);
+
+ dev_priv->fbc_work = work;
+
+ DRM_DEBUG_KMS("scheduling delayed FBC enable\n");
+
+ /* Delay the actual enabling to let pageflipping cease and the
+ * display to settle before starting the compression. Note that
+ * this delay also serves a second purpose: it allows for a
+ * vblank to pass after disabling the FBC before we attempt
+ * to modify the control registers.
+ *
+ * A more complicated solution would involve tracking vblanks
+ * following the termination of the page-flipping sequence
+ * and indeed performing the enable as a co-routine and not
+ * waiting synchronously upon the vblank.
+ */
+ taskqueue_enqueue_timeout(dev_priv->tq, &work->task,
+ msecs_to_jiffies(50));
+}
+
+void intel_disable_fbc(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ intel_cancel_fbc_work(dev_priv);
+
+ if (!dev_priv->display.disable_fbc)
+ return;
+
+ dev_priv->display.disable_fbc(dev);
+ dev_priv->cfb_plane = -1;
+}
+
+/**
+ * intel_update_fbc - enable/disable FBC as needed
+ * @dev: the drm_device
+ *
+ * Set up the framebuffer compression hardware at mode set time. We
+ * enable it if possible:
+ * - plane A only (on pre-965)
+ * - no pixel mulitply/line duplication
+ * - no alpha buffer discard
+ * - no dual wide
+ * - framebuffer <= 2048 in width, 1536 in height
+ *
+ * We can't assume that any compression will take place (worst case),
+ * so the compressed buffer has to be the same size as the uncompressed
+ * one. It also must reside (along with the line length buffer) in
+ * stolen memory.
+ *
+ * We need to enable/disable FBC on a global basis.
+ */
+static void intel_update_fbc(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = NULL, *tmp_crtc;
+ struct intel_crtc *intel_crtc;
+ struct drm_framebuffer *fb;
+ struct intel_framebuffer *intel_fb;
+ struct drm_i915_gem_object *obj;
+ int enable_fbc;
+
+ DRM_DEBUG_KMS("\n");
+
+ if (!i915_powersave)
+ return;
+
+ if (!I915_HAS_FBC(dev))
+ return;
+
+ /*
+ * If FBC is already on, we just have to verify that we can
+ * keep it that way...
+ * Need to disable if:
+ * - more than one pipe is active
+ * - changing FBC params (stride, fence, mode)
+ * - new fb is too large to fit in compressed buffer
+ * - going to an unsupported config (interlace, pixel multiply, etc.)
+ */
+ list_for_each_entry(tmp_crtc, &dev->mode_config.crtc_list, head) {
+ if (tmp_crtc->enabled && tmp_crtc->fb) {
+ if (crtc) {
+ DRM_DEBUG_KMS("more than one pipe active, disabling compression\n");
+ dev_priv->no_fbc_reason = FBC_MULTIPLE_PIPES;
+ goto out_disable;
+ }
+ crtc = tmp_crtc;
+ }
+ }
+
+ if (!crtc || crtc->fb == NULL) {
+ DRM_DEBUG_KMS("no output, disabling\n");
+ dev_priv->no_fbc_reason = FBC_NO_OUTPUT;
+ goto out_disable;
+ }
+
+ intel_crtc = to_intel_crtc(crtc);
+ fb = crtc->fb;
+ intel_fb = to_intel_framebuffer(fb);
+ obj = intel_fb->obj;
+
+ enable_fbc = i915_enable_fbc;
+ if (enable_fbc < 0) {
+ DRM_DEBUG_KMS("fbc set to per-chip default\n");
+ enable_fbc = 1;
+ if (INTEL_INFO(dev)->gen <= 6)
+ enable_fbc = 0;
+ }
+ if (!enable_fbc) {
+ DRM_DEBUG_KMS("fbc disabled per module param\n");
+ dev_priv->no_fbc_reason = FBC_MODULE_PARAM;
+ goto out_disable;
+ }
+ if (intel_fb->obj->base.size > dev_priv->cfb_size) {
+ DRM_DEBUG_KMS("framebuffer too large, disabling "
+ "compression\n");
+ dev_priv->no_fbc_reason = FBC_STOLEN_TOO_SMALL;
+ goto out_disable;
+ }
+ if ((crtc->mode.flags & DRM_MODE_FLAG_INTERLACE) ||
+ (crtc->mode.flags & DRM_MODE_FLAG_DBLSCAN)) {
+ DRM_DEBUG_KMS("mode incompatible with compression, "
+ "disabling\n");
+ dev_priv->no_fbc_reason = FBC_UNSUPPORTED_MODE;
+ goto out_disable;
+ }
+ if ((crtc->mode.hdisplay > 2048) ||
+ (crtc->mode.vdisplay > 1536)) {
+ DRM_DEBUG_KMS("mode too large for compression, disabling\n");
+ dev_priv->no_fbc_reason = FBC_MODE_TOO_LARGE;
+ goto out_disable;
+ }
+ if ((IS_I915GM(dev) || IS_I945GM(dev)) && intel_crtc->plane != 0) {
+ DRM_DEBUG_KMS("plane not 0, disabling compression\n");
+ dev_priv->no_fbc_reason = FBC_BAD_PLANE;
+ goto out_disable;
+ }
+ if (obj->tiling_mode != I915_TILING_X ||
+ obj->fence_reg == I915_FENCE_REG_NONE) {
+ DRM_DEBUG_KMS("framebuffer not tiled or fenced, disabling compression\n");
+ dev_priv->no_fbc_reason = FBC_NOT_TILED;
+ goto out_disable;
+ }
+
+ /* If the kernel debugger is active, always disable compression */
+ if (kdb_active)
+ goto out_disable;
+
+ /* If the scanout has not changed, don't modify the FBC settings.
+ * Note that we make the fundamental assumption that the fb->obj
+ * cannot be unpinned (and have its GTT offset and fence revoked)
+ * without first being decoupled from the scanout and FBC disabled.
+ */
+ if (dev_priv->cfb_plane == intel_crtc->plane &&
+ dev_priv->cfb_fb == fb->base.id &&
+ dev_priv->cfb_y == crtc->y)
+ return;
+
+ if (intel_fbc_enabled(dev)) {
+ /* We update FBC along two paths, after changing fb/crtc
+ * configuration (modeswitching) and after page-flipping
+ * finishes. For the latter, we know that not only did
+ * we disable the FBC at the start of the page-flip
+ * sequence, but also more than one vblank has passed.
+ *
+ * For the former case of modeswitching, it is possible
+ * to switch between two FBC valid configurations
+ * instantaneously so we do need to disable the FBC
+ * before we can modify its control registers. We also
+ * have to wait for the next vblank for that to take
+ * effect. However, since we delay enabling FBC we can
+ * assume that a vblank has passed since disabling and
+ * that we can safely alter the registers in the deferred
+ * callback.
+ *
+ * In the scenario that we go from a valid to invalid
+ * and then back to valid FBC configuration we have
+ * no strict enforcement that a vblank occurred since
+ * disabling the FBC. However, along all current pipe
+ * disabling paths we do need to wait for a vblank at
+ * some point. And we wait before enabling FBC anyway.
+ */
+ DRM_DEBUG_KMS("disabling active FBC for update\n");
+ intel_disable_fbc(dev);
+ }
+
+ intel_enable_fbc(crtc, 500);
+ return;
+
+out_disable:
+ /* Multiple disables should be harmless */
+ if (intel_fbc_enabled(dev)) {
+ DRM_DEBUG_KMS("unsupported config, disabling FBC\n");
+ intel_disable_fbc(dev);
+ }
+}
+
+int
+intel_pin_and_fence_fb_obj(struct drm_device *dev,
+ struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *pipelined)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 alignment;
+ int ret;
+
+ alignment = 0; /* shut gcc */
+ switch (obj->tiling_mode) {
+ case I915_TILING_NONE:
+ if (IS_BROADWATER(dev) || IS_CRESTLINE(dev))
+ alignment = 128 * 1024;
+ else if (INTEL_INFO(dev)->gen >= 4)
+ alignment = 4 * 1024;
+ else
+ alignment = 64 * 1024;
+ break;
+ case I915_TILING_X:
+ /* pin() will align the object as required by fence */
+ alignment = 0;
+ break;
+ case I915_TILING_Y:
+ /* FIXME: Is this true? */
+ DRM_ERROR("Y tiled not allowed for scan out buffers\n");
+ return -EINVAL;
+ default:
+ KASSERT(0, ("Wrong tiling for fb obj"));
+ }
+
+ dev_priv->mm.interruptible = false;
+ ret = i915_gem_object_pin_to_display_plane(obj, alignment, pipelined);
+ if (ret)
+ goto err_interruptible;
+
+ /* Install a fence for tiled scan-out. Pre-i965 always needs a
+ * fence, whereas 965+ only requires a fence if using
+ * framebuffer compression. For simplicity, we always install
+ * a fence as the cost is not that onerous.
+ */
+ if (obj->tiling_mode != I915_TILING_NONE) {
+ ret = i915_gem_object_get_fence(obj, pipelined);
+ if (ret)
+ goto err_unpin;
+
+ i915_gem_object_pin_fence(obj);
+ }
+
+ dev_priv->mm.interruptible = true;
+ return 0;
+
+err_unpin:
+ i915_gem_object_unpin(obj);
+err_interruptible:
+ dev_priv->mm.interruptible = true;
+ return ret;
+}
+
+void intel_unpin_fb_obj(struct drm_i915_gem_object *obj)
+{
+ i915_gem_object_unpin_fence(obj);
+ i915_gem_object_unpin(obj);
+}
+
+static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
+ int x, int y)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_framebuffer *intel_fb;
+ struct drm_i915_gem_object *obj;
+ int plane = intel_crtc->plane;
+ unsigned long Start, Offset;
+ u32 dspcntr;
+ u32 reg;
+
+ switch (plane) {
+ case 0:
+ case 1:
+ break;
+ default:
+ DRM_ERROR("Can't update plane %d in SAREA\n", plane);
+ return -EINVAL;
+ }
+
+ intel_fb = to_intel_framebuffer(fb);
+ obj = intel_fb->obj;
+
+ reg = DSPCNTR(plane);
+ dspcntr = I915_READ(reg);
+ /* Mask out pixel format bits in case we change it */
+ dspcntr &= ~DISPPLANE_PIXFORMAT_MASK;
+ switch (fb->bits_per_pixel) {
+ case 8:
+ dspcntr |= DISPPLANE_8BPP;
+ break;
+ case 16:
+ if (fb->depth == 15)
+ dspcntr |= DISPPLANE_15_16BPP;
+ else
+ dspcntr |= DISPPLANE_16BPP;
+ break;
+ case 24:
+ case 32:
+ dspcntr |= DISPPLANE_32BPP_NO_ALPHA;
+ break;
+ default:
+ DRM_ERROR("Unknown color depth %d\n", fb->bits_per_pixel);
+ return -EINVAL;
+ }
+ if (INTEL_INFO(dev)->gen >= 4) {
+ if (obj->tiling_mode != I915_TILING_NONE)
+ dspcntr |= DISPPLANE_TILED;
+ else
+ dspcntr &= ~DISPPLANE_TILED;
+ }
+
+ I915_WRITE(reg, dspcntr);
+
+ Start = obj->gtt_offset;
+ Offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
+
+ DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
+ Start, Offset, x, y, fb->pitches[0]);
+ I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
+ if (INTEL_INFO(dev)->gen >= 4) {
+ I915_WRITE(DSPSURF(plane), Start);
+ I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
+ I915_WRITE(DSPADDR(plane), Offset);
+ } else
+ I915_WRITE(DSPADDR(plane), Start + Offset);
+ POSTING_READ(reg);
+
+ return (0);
+}
+
+static int ironlake_update_plane(struct drm_crtc *crtc,
+ struct drm_framebuffer *fb, int x, int y)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_framebuffer *intel_fb;
+ struct drm_i915_gem_object *obj;
+ int plane = intel_crtc->plane;
+ unsigned long Start, Offset;
+ u32 dspcntr;
+ u32 reg;
+
+ switch (plane) {
+ case 0:
+ case 1:
+ case 2:
+ break;
+ default:
+ DRM_ERROR("Can't update plane %d in SAREA\n", plane);
+ return -EINVAL;
+ }
+
+ intel_fb = to_intel_framebuffer(fb);
+ obj = intel_fb->obj;
+
+ reg = DSPCNTR(plane);
+ dspcntr = I915_READ(reg);
+ /* Mask out pixel format bits in case we change it */
+ dspcntr &= ~DISPPLANE_PIXFORMAT_MASK;
+ switch (fb->bits_per_pixel) {
+ case 8:
+ dspcntr |= DISPPLANE_8BPP;
+ break;
+ case 16:
+ if (fb->depth != 16) {
+ DRM_ERROR("bpp 16, depth %d\n", fb->depth);
+ return -EINVAL;
+ }
+
+ dspcntr |= DISPPLANE_16BPP;
+ break;
+ case 24:
+ case 32:
+ if (fb->depth == 24)
+ dspcntr |= DISPPLANE_32BPP_NO_ALPHA;
+ else if (fb->depth == 30)
+ dspcntr |= DISPPLANE_32BPP_30BIT_NO_ALPHA;
+ else {
+ DRM_ERROR("bpp %d depth %d\n", fb->bits_per_pixel,
+ fb->depth);
+ return -EINVAL;
+ }
+ break;
+ default:
+ DRM_ERROR("Unknown color depth %d\n", fb->bits_per_pixel);
+ return -EINVAL;
+ }
+
+ if (obj->tiling_mode != I915_TILING_NONE)
+ dspcntr |= DISPPLANE_TILED;
+ else
+ dspcntr &= ~DISPPLANE_TILED;
+
+ /* must disable */
+ dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE;
+
+ I915_WRITE(reg, dspcntr);
+
+ Start = obj->gtt_offset;
+ Offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
+
+ DRM_DEBUG_KMS("Writing base %08lX %08lX %d %d %d\n",
+ Start, Offset, x, y, fb->pitches[0]);
+ I915_WRITE(DSPSTRIDE(plane), fb->pitches[0]);
+ I915_WRITE(DSPSURF(plane), Start);
+ I915_WRITE(DSPTILEOFF(plane), (y << 16) | x);
+ I915_WRITE(DSPADDR(plane), Offset);
+ POSTING_READ(reg);
+
+ return 0;
+}
+
+/* Assume fb object is pinned & idle & fenced and just update base pointers */
+static int
+intel_pipe_set_base_atomic(struct drm_crtc *crtc, struct drm_framebuffer *fb,
+ int x, int y, enum mode_set_atomic state)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int ret;
+
+ ret = dev_priv->display.update_plane(crtc, fb, x, y);
+ if (ret)
+ return ret;
+
+ intel_update_fbc(dev);
+ intel_increase_pllclock(crtc);
+
+ return 0;
+}
+
+static int
+intel_finish_fb(struct drm_framebuffer *old_fb)
+{
+ struct drm_i915_gem_object *obj = to_intel_framebuffer(old_fb)->obj;
+ struct drm_device *dev = obj->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ bool was_interruptible = dev_priv->mm.interruptible;
+ int ret;
+
+ mtx_lock(&dev->event_lock);
+ while (!atomic_read(&dev_priv->mm.wedged) &&
+ atomic_read(&obj->pending_flip) != 0) {
+ msleep(&obj->pending_flip, &dev->event_lock,
+ 0, "915flp", 0);
+ }
+ 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
+ * current scanout is retired before unpinning the old
+ * framebuffer.
+ *
+ * This should only fail upon a hung GPU, in which case we
+ * can safely continue.
+ */
+ dev_priv->mm.interruptible = false;
+ ret = i915_gem_object_finish_gpu(obj);
+ dev_priv->mm.interruptible = was_interruptible;
+ return ret;
+}
+
+static int
+intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
+ struct drm_framebuffer *old_fb)
+{
+ struct drm_device *dev = crtc->dev;
+#if 0
+ struct drm_i915_master_private *master_priv;
+#else
+ drm_i915_private_t *dev_priv = dev->dev_private;
+#endif
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int ret;
+
+ /* no fb bound */
+ if (!crtc->fb) {
+ DRM_ERROR("No FB bound\n");
+ return 0;
+ }
+
+ switch (intel_crtc->plane) {
+ case 0:
+ case 1:
+ break;
+ case 2:
+ if (IS_IVYBRIDGE(dev))
+ break;
+ /* fall through otherwise */
+ default:
+ DRM_ERROR("no plane for crtc\n");
+ return -EINVAL;
+ }
+
+ DRM_LOCK(dev);
+ ret = intel_pin_and_fence_fb_obj(dev,
+ to_intel_framebuffer(crtc->fb)->obj,
+ NULL);
+ if (ret != 0) {
+ DRM_UNLOCK(dev);
+ DRM_ERROR("pin & fence failed\n");
+ return ret;
+ }
+
+ if (old_fb)
+ intel_finish_fb(old_fb);
+
+ ret = intel_pipe_set_base_atomic(crtc, crtc->fb, x, y,
+ LEAVE_ATOMIC_MODE_SET);
+ if (ret) {
+ intel_unpin_fb_obj(to_intel_framebuffer(crtc->fb)->obj);
+ DRM_UNLOCK(dev);
+ DRM_ERROR("failed to update base address\n");
+ return ret;
+ }
+
+ if (old_fb) {
+ intel_wait_for_vblank(dev, intel_crtc->pipe);
+ intel_unpin_fb_obj(to_intel_framebuffer(old_fb)->obj);
+ }
+
+ DRM_UNLOCK(dev);
+
+#if 0
+ if (!dev->primary->master)
+ return 0;
+
+ master_priv = dev->primary->master->driver_priv;
+ if (!master_priv->sarea_priv)
+ return 0;
+
+ if (intel_crtc->pipe) {
+ master_priv->sarea_priv->pipeB_x = x;
+ master_priv->sarea_priv->pipeB_y = y;
+ } else {
+ master_priv->sarea_priv->pipeA_x = x;
+ master_priv->sarea_priv->pipeA_y = y;
+ }
+#else
+
+ if (!dev_priv->sarea_priv)
+ return 0;
+
+ if (intel_crtc->pipe) {
+ dev_priv->sarea_priv->planeB_x = x;
+ dev_priv->sarea_priv->planeB_y = y;
+ } else {
+ dev_priv->sarea_priv->planeA_x = x;
+ dev_priv->sarea_priv->planeA_y = y;
+ }
+#endif
+
+ return 0;
+}
+
+static void ironlake_set_pll_edp(struct drm_crtc *crtc, int clock)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 dpa_ctl;
+
+ DRM_DEBUG_KMS("eDP PLL enable for clock %d\n", clock);
+ dpa_ctl = I915_READ(DP_A);
+ dpa_ctl &= ~DP_PLL_FREQ_MASK;
+
+ if (clock < 200000) {
+ u32 temp;
+ dpa_ctl |= DP_PLL_FREQ_160MHZ;
+ /* workaround for 160Mhz:
+ 1) program 0x4600c bits 15:0 = 0x8124
+ 2) program 0x46010 bit 0 = 1
+ 3) program 0x46034 bit 24 = 1
+ 4) program 0x64000 bit 14 = 1
+ */
+ temp = I915_READ(0x4600c);
+ temp &= 0xffff0000;
+ I915_WRITE(0x4600c, temp | 0x8124);
+
+ temp = I915_READ(0x46010);
+ I915_WRITE(0x46010, temp | 1);
+
+ temp = I915_READ(0x46034);
+ I915_WRITE(0x46034, temp | (1 << 24));
+ } else {
+ dpa_ctl |= DP_PLL_FREQ_270MHZ;
+ }
+ I915_WRITE(DP_A, dpa_ctl);
+
+ POSTING_READ(DP_A);
+ DELAY(500);
+}
+
+static void intel_fdi_normal_train(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ u32 reg, temp;
+
+ /* enable normal train */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ if (IS_IVYBRIDGE(dev)) {
+ temp &= ~FDI_LINK_TRAIN_NONE_IVB;
+ temp |= FDI_LINK_TRAIN_NONE_IVB | FDI_TX_ENHANCE_FRAME_ENABLE;
+ } else {
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_NONE | FDI_TX_ENHANCE_FRAME_ENABLE;
+ }
+ I915_WRITE(reg, temp);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ if (HAS_PCH_CPT(dev)) {
+ temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
+ temp |= FDI_LINK_TRAIN_NORMAL_CPT;
+ } else {
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_NONE;
+ }
+ I915_WRITE(reg, temp | FDI_RX_ENHANCE_FRAME_ENABLE);
+
+ /* wait one idle pattern time */
+ POSTING_READ(reg);
+ DELAY(1000);
+
+ /* IVB wants error correction enabled */
+ if (IS_IVYBRIDGE(dev))
+ I915_WRITE(reg, I915_READ(reg) | FDI_FS_ERRC_ENABLE |
+ FDI_FE_ERRC_ENABLE);
+}
+
+static void cpt_phase_pointer_enable(struct drm_device *dev, int pipe)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 flags = I915_READ(SOUTH_CHICKEN1);
+
+ flags |= FDI_PHASE_SYNC_OVR(pipe);
+ I915_WRITE(SOUTH_CHICKEN1, flags); /* once to unlock... */
+ flags |= FDI_PHASE_SYNC_EN(pipe);
+ I915_WRITE(SOUTH_CHICKEN1, flags); /* then again to enable */
+ POSTING_READ(SOUTH_CHICKEN1);
+}
+
+/* The FDI link training functions for ILK/Ibexpeak. */
+static void ironlake_fdi_link_train(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+ u32 reg, temp, tries;
+
+ /* FDI needs bits from pipe & plane first */
+ assert_pipe_enabled(dev_priv, pipe);
+ assert_plane_enabled(dev_priv, plane);
+
+ /* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit
+ for train result */
+ reg = FDI_RX_IMR(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_RX_SYMBOL_LOCK;
+ temp &= ~FDI_RX_BIT_LOCK;
+ I915_WRITE(reg, temp);
+ I915_READ(reg);
+ DELAY(150);
+
+ /* enable CPU FDI TX and PCH FDI RX */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~(7 << 19);
+ temp |= (intel_crtc->fdi_lanes - 1) << 19;
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_PATTERN_1;
+ I915_WRITE(reg, temp | FDI_TX_ENABLE);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_PATTERN_1;
+ I915_WRITE(reg, temp | FDI_RX_ENABLE);
+
+ POSTING_READ(reg);
+ DELAY(150);
+
+ /* Ironlake workaround, enable clock pointer after FDI enable*/
+ if (HAS_PCH_IBX(dev)) {
+ I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR);
+ I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR |
+ FDI_RX_PHASE_SYNC_POINTER_EN);
+ }
+
+ reg = FDI_RX_IIR(pipe);
+ for (tries = 0; tries < 5; tries++) {
+ temp = I915_READ(reg);
+ DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
+
+ if ((temp & FDI_RX_BIT_LOCK)) {
+ DRM_DEBUG_KMS("FDI train 1 done.\n");
+ I915_WRITE(reg, temp | FDI_RX_BIT_LOCK);
+ break;
+ }
+ }
+ if (tries == 5)
+ DRM_ERROR("FDI train 1 fail!\n");
+
+ /* Train 2 */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_PATTERN_2;
+ I915_WRITE(reg, temp);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_PATTERN_2;
+ I915_WRITE(reg, temp);
+
+ POSTING_READ(reg);
+ DELAY(150);
+
+ reg = FDI_RX_IIR(pipe);
+ for (tries = 0; tries < 5; tries++) {
+ temp = I915_READ(reg);
+ DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
+
+ if (temp & FDI_RX_SYMBOL_LOCK) {
+ I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK);
+ DRM_DEBUG_KMS("FDI train 2 done.\n");
+ break;
+ }
+ }
+ if (tries == 5)
+ DRM_ERROR("FDI train 2 fail!\n");
+
+ DRM_DEBUG_KMS("FDI train done\n");
+
+}
+
+static const int snb_b_fdi_train_param[] = {
+ FDI_LINK_TRAIN_400MV_0DB_SNB_B,
+ FDI_LINK_TRAIN_400MV_6DB_SNB_B,
+ FDI_LINK_TRAIN_600MV_3_5DB_SNB_B,
+ FDI_LINK_TRAIN_800MV_0DB_SNB_B,
+};
+
+/* The FDI link training functions for SNB/Cougarpoint. */
+static void gen6_fdi_link_train(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ u32 reg, temp, i;
+
+ /* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit
+ for train result */
+ reg = FDI_RX_IMR(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_RX_SYMBOL_LOCK;
+ temp &= ~FDI_RX_BIT_LOCK;
+ I915_WRITE(reg, temp);
+
+ POSTING_READ(reg);
+ DELAY(150);
+
+ /* enable CPU FDI TX and PCH FDI RX */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~(7 << 19);
+ temp |= (intel_crtc->fdi_lanes - 1) << 19;
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_PATTERN_1;
+ temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
+ /* SNB-B */
+ temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B;
+ I915_WRITE(reg, temp | FDI_TX_ENABLE);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ if (HAS_PCH_CPT(dev)) {
+ temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
+ temp |= FDI_LINK_TRAIN_PATTERN_1_CPT;
+ } else {
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_PATTERN_1;
+ }
+ I915_WRITE(reg, temp | FDI_RX_ENABLE);
+
+ POSTING_READ(reg);
+ DELAY(150);
+
+ if (HAS_PCH_CPT(dev))
+ cpt_phase_pointer_enable(dev, pipe);
+
+ for (i = 0; i < 4; i++) {
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
+ temp |= snb_b_fdi_train_param[i];
+ I915_WRITE(reg, temp);
+
+ POSTING_READ(reg);
+ DELAY(500);
+
+ reg = FDI_RX_IIR(pipe);
+ temp = I915_READ(reg);
+ DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
+
+ if (temp & FDI_RX_BIT_LOCK) {
+ I915_WRITE(reg, temp | FDI_RX_BIT_LOCK);
+ DRM_DEBUG_KMS("FDI train 1 done.\n");
+ break;
+ }
+ }
+ if (i == 4)
+ DRM_ERROR("FDI train 1 fail!\n");
+
+ /* Train 2 */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_PATTERN_2;
+ if (IS_GEN6(dev)) {
+ temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
+ /* SNB-B */
+ temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B;
+ }
+ I915_WRITE(reg, temp);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ if (HAS_PCH_CPT(dev)) {
+ temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
+ temp |= FDI_LINK_TRAIN_PATTERN_2_CPT;
+ } else {
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_PATTERN_2;
+ }
+ I915_WRITE(reg, temp);
+
+ POSTING_READ(reg);
+ DELAY(150);
+
+ for (i = 0; i < 4; i++) {
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
+ temp |= snb_b_fdi_train_param[i];
+ I915_WRITE(reg, temp);
+
+ POSTING_READ(reg);
+ DELAY(500);
+
+ reg = FDI_RX_IIR(pipe);
+ temp = I915_READ(reg);
+ DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
+
+ if (temp & FDI_RX_SYMBOL_LOCK) {
+ I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK);
+ DRM_DEBUG_KMS("FDI train 2 done.\n");
+ break;
+ }
+ }
+ if (i == 4)
+ DRM_ERROR("FDI train 2 fail!\n");
+
+ DRM_DEBUG_KMS("FDI train done.\n");
+}
+
+/* Manual link training for Ivy Bridge A0 parts */
+static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ u32 reg, temp, i;
+
+ /* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit
+ for train result */
+ reg = FDI_RX_IMR(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_RX_SYMBOL_LOCK;
+ temp &= ~FDI_RX_BIT_LOCK;
+ I915_WRITE(reg, temp);
+
+ POSTING_READ(reg);
+ DELAY(150);
+
+ /* enable CPU FDI TX and PCH FDI RX */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~(7 << 19);
+ temp |= (intel_crtc->fdi_lanes - 1) << 19;
+ temp &= ~(FDI_LINK_TRAIN_AUTO | FDI_LINK_TRAIN_NONE_IVB);
+ temp |= FDI_LINK_TRAIN_PATTERN_1_IVB;
+ temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
+ temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B;
+ temp |= FDI_COMPOSITE_SYNC;
+ I915_WRITE(reg, temp | FDI_TX_ENABLE);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_AUTO;
+ temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
+ temp |= FDI_LINK_TRAIN_PATTERN_1_CPT;
+ temp |= FDI_COMPOSITE_SYNC;
+ I915_WRITE(reg, temp | FDI_RX_ENABLE);
+
+ POSTING_READ(reg);
+ DELAY(150);
+
+ for (i = 0; i < 4; i++) {
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
+ temp |= snb_b_fdi_train_param[i];
+ I915_WRITE(reg, temp);
+
+ POSTING_READ(reg);
+ DELAY(500);
+
+ reg = FDI_RX_IIR(pipe);
+ temp = I915_READ(reg);
+ DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
+
+ if (temp & FDI_RX_BIT_LOCK ||
+ (I915_READ(reg) & FDI_RX_BIT_LOCK)) {
+ I915_WRITE(reg, temp | FDI_RX_BIT_LOCK);
+ DRM_DEBUG_KMS("FDI train 1 done.\n");
+ break;
+ }
+ }
+ if (i == 4)
+ DRM_ERROR("FDI train 1 fail!\n");
+
+ /* Train 2 */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_NONE_IVB;
+ temp |= FDI_LINK_TRAIN_PATTERN_2_IVB;
+ temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
+ temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B;
+ I915_WRITE(reg, temp);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
+ temp |= FDI_LINK_TRAIN_PATTERN_2_CPT;
+ I915_WRITE(reg, temp);
+
+ POSTING_READ(reg);
+ DELAY(150);
+
+ for (i = 0; i < 4; i++ ) {
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
+ temp |= snb_b_fdi_train_param[i];
+ I915_WRITE(reg, temp);
+
+ POSTING_READ(reg);
+ DELAY(500);
+
+ reg = FDI_RX_IIR(pipe);
+ temp = I915_READ(reg);
+ DRM_DEBUG_KMS("FDI_RX_IIR 0x%x\n", temp);
+
+ if (temp & FDI_RX_SYMBOL_LOCK) {
+ I915_WRITE(reg, temp | FDI_RX_SYMBOL_LOCK);
+ DRM_DEBUG_KMS("FDI train 2 done.\n");
+ break;
+ }
+ }
+ if (i == 4)
+ DRM_ERROR("FDI train 2 fail!\n");
+
+ DRM_DEBUG_KMS("FDI train done.\n");
+}
+
+static void ironlake_fdi_pll_enable(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ u32 reg, temp;
+
+ /* Write the TU size bits so error detection works */
+ I915_WRITE(FDI_RX_TUSIZE1(pipe),
+ I915_READ(PIPE_DATA_M1(pipe)) & TU_SIZE_MASK);
+
+ /* enable PCH FDI RX PLL, wait warmup plus DMI latency */
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~((0x7 << 19) | (0x7 << 16));
+ temp |= (intel_crtc->fdi_lanes - 1) << 19;
+ temp |= (I915_READ(PIPECONF(pipe)) & PIPE_BPC_MASK) << 11;
+ I915_WRITE(reg, temp | FDI_RX_PLL_ENABLE);
+
+ POSTING_READ(reg);
+ DELAY(200);
+
+ /* Switch from Rawclk to PCDclk */
+ temp = I915_READ(reg);
+ I915_WRITE(reg, temp | FDI_PCDCLK);
+
+ POSTING_READ(reg);
+ DELAY(200);
+
+ /* Enable CPU FDI TX PLL, always on for Ironlake */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ if ((temp & FDI_TX_PLL_ENABLE) == 0) {
+ I915_WRITE(reg, temp | FDI_TX_PLL_ENABLE);
+
+ POSTING_READ(reg);
+ DELAY(100);
+ }
+}
+
+static void cpt_phase_pointer_disable(struct drm_device *dev, int pipe)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 flags = I915_READ(SOUTH_CHICKEN1);
+
+ flags &= ~(FDI_PHASE_SYNC_EN(pipe));
+ I915_WRITE(SOUTH_CHICKEN1, flags); /* once to disable... */
+ flags &= ~(FDI_PHASE_SYNC_OVR(pipe));
+ I915_WRITE(SOUTH_CHICKEN1, flags); /* then again to lock */
+ POSTING_READ(SOUTH_CHICKEN1);
+}
+
+static void ironlake_fdi_disable(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ u32 reg, temp;
+
+ /* disable CPU FDI tx and PCH FDI rx */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ I915_WRITE(reg, temp & ~FDI_TX_ENABLE);
+ POSTING_READ(reg);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~(0x7 << 16);
+ temp |= (I915_READ(PIPECONF(pipe)) & PIPE_BPC_MASK) << 11;
+ I915_WRITE(reg, temp & ~FDI_RX_ENABLE);
+
+ POSTING_READ(reg);
+ DELAY(100);
+
+ /* Ironlake workaround, disable clock pointer after downing FDI */
+ if (HAS_PCH_IBX(dev)) {
+ I915_WRITE(FDI_RX_CHICKEN(pipe), FDI_RX_PHASE_SYNC_POINTER_OVR);
+ I915_WRITE(FDI_RX_CHICKEN(pipe),
+ I915_READ(FDI_RX_CHICKEN(pipe) &
+ ~FDI_RX_PHASE_SYNC_POINTER_EN));
+ } else if (HAS_PCH_CPT(dev)) {
+ cpt_phase_pointer_disable(dev, pipe);
+ }
+
+ /* still set train pattern 1 */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_PATTERN_1;
+ I915_WRITE(reg, temp);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ if (HAS_PCH_CPT(dev)) {
+ temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
+ temp |= FDI_LINK_TRAIN_PATTERN_1_CPT;
+ } else {
+ temp &= ~FDI_LINK_TRAIN_NONE;
+ temp |= FDI_LINK_TRAIN_PATTERN_1;
+ }
+ /* BPC in FDI rx is consistent with that in PIPECONF */
+ temp &= ~(0x07 << 16);
+ temp |= (I915_READ(PIPECONF(pipe)) & PIPE_BPC_MASK) << 11;
+ I915_WRITE(reg, temp);
+
+ POSTING_READ(reg);
+ DELAY(100);
+}
+
+/*
+ * When we disable a pipe, we need to clear any pending scanline wait events
+ * to avoid hanging the ring, which we assume we are waiting on.
+ */
+static void intel_clear_scanline_wait(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring;
+ u32 tmp;
+
+ if (IS_GEN2(dev))
+ /* Can't break the hang on i8xx */
+ return;
+
+ ring = LP_RING(dev_priv);
+ tmp = I915_READ_CTL(ring);
+ if (tmp & RING_WAIT)
+ I915_WRITE_CTL(ring, tmp);
+}
+
+static void intel_crtc_wait_for_pending_flips(struct drm_crtc *crtc)
+{
+ struct drm_i915_gem_object *obj;
+ struct drm_i915_private *dev_priv;
+ struct drm_device *dev;
+
+ if (crtc->fb == NULL)
+ return;
+
+ obj = to_intel_framebuffer(crtc->fb)->obj;
+ dev = crtc->dev;
+ dev_priv = dev->dev_private;
+ mtx_lock(&dev->event_lock);
+ while (atomic_read(&obj->pending_flip) != 0)
+ msleep(&obj->pending_flip, &dev->event_lock, 0, "915wfl", 0);
+ mtx_unlock(&dev->event_lock);
+}
+
+static bool intel_crtc_driving_pch(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_mode_config *mode_config = &dev->mode_config;
+ struct intel_encoder *encoder;
+
+ /*
+ * If there's a non-PCH eDP on this crtc, it must be DP_A, and that
+ * must be driven by its own crtc; no sharing is possible.
+ */
+ list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
+ if (encoder->base.crtc != crtc)
+ continue;
+
+ switch (encoder->type) {
+ case INTEL_OUTPUT_EDP:
+ if (!intel_encoder_is_pch_edp(&encoder->base))
+ return false;
+ continue;
+ }
+ }
+
+ return true;
+}
+
+/*
+ * Enable PCH resources required for PCH ports:
+ * - PCH PLLs
+ * - FDI training & RX/TX
+ * - update transcoder timings
+ * - DP transcoding bits
+ * - transcoder
+ */
+static void ironlake_pch_enable(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ u32 reg, temp, transc_sel;
+
+ /* For PCH output, training FDI link */
+ dev_priv->display.fdi_link_train(crtc);
+
+ intel_enable_pch_pll(dev_priv, pipe);
+
+ if (HAS_PCH_CPT(dev)) {
+ transc_sel = intel_crtc->use_pll_a ? TRANSC_DPLLA_SEL :
+ TRANSC_DPLLB_SEL;
+
+ /* Be sure PCH DPLL SEL is set */
+ temp = I915_READ(PCH_DPLL_SEL);
+ if (pipe == 0) {
+ temp &= ~(TRANSA_DPLLB_SEL);
+ temp |= (TRANSA_DPLL_ENABLE | TRANSA_DPLLA_SEL);
+ } else if (pipe == 1) {
+ temp &= ~(TRANSB_DPLLB_SEL);
+ temp |= (TRANSB_DPLL_ENABLE | TRANSB_DPLLB_SEL);
+ } else if (pipe == 2) {
+ temp &= ~(TRANSC_DPLLB_SEL);
+ temp |= (TRANSC_DPLL_ENABLE | transc_sel);
+ }
+ I915_WRITE(PCH_DPLL_SEL, temp);
+ }
+
+ /* set transcoder timing, panel must allow it */
+ assert_panel_unlocked(dev_priv, pipe);
+ I915_WRITE(TRANS_HTOTAL(pipe), I915_READ(HTOTAL(pipe)));
+ I915_WRITE(TRANS_HBLANK(pipe), I915_READ(HBLANK(pipe)));
+ I915_WRITE(TRANS_HSYNC(pipe), I915_READ(HSYNC(pipe)));
+
+ I915_WRITE(TRANS_VTOTAL(pipe), I915_READ(VTOTAL(pipe)));
+ I915_WRITE(TRANS_VBLANK(pipe), I915_READ(VBLANK(pipe)));
+ I915_WRITE(TRANS_VSYNC(pipe), I915_READ(VSYNC(pipe)));
+ I915_WRITE(TRANS_VSYNCSHIFT(pipe), I915_READ(VSYNCSHIFT(pipe)));
+
+ intel_fdi_normal_train(crtc);
+
+ /* For PCH DP, enable TRANS_DP_CTL */
+ if (HAS_PCH_CPT(dev) &&
+ (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) ||
+ intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP))) {
+ u32 bpc = (I915_READ(PIPECONF(pipe)) & PIPE_BPC_MASK) >> 5;
+ reg = TRANS_DP_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~(TRANS_DP_PORT_SEL_MASK |
+ TRANS_DP_SYNC_MASK |
+ TRANS_DP_BPC_MASK);
+ temp |= (TRANS_DP_OUTPUT_ENABLE |
+ TRANS_DP_ENH_FRAMING);
+ temp |= bpc << 9; /* same format but at 11:9 */
+
+ if (crtc->mode.flags & DRM_MODE_FLAG_PHSYNC)
+ temp |= TRANS_DP_HSYNC_ACTIVE_HIGH;
+ if (crtc->mode.flags & DRM_MODE_FLAG_PVSYNC)
+ temp |= TRANS_DP_VSYNC_ACTIVE_HIGH;
+
+ switch (intel_trans_dp_port_sel(crtc)) {
+ case PCH_DP_B:
+ temp |= TRANS_DP_PORT_SEL_B;
+ break;
+ case PCH_DP_C:
+ temp |= TRANS_DP_PORT_SEL_C;
+ break;
+ case PCH_DP_D:
+ temp |= TRANS_DP_PORT_SEL_D;
+ break;
+ default:
+ DRM_DEBUG_KMS("Wrong PCH DP port return. Guess port B\n");
+ temp |= TRANS_DP_PORT_SEL_B;
+ break;
+ }
+
+ I915_WRITE(reg, temp);
+ }
+
+ intel_enable_transcoder(dev_priv, pipe);
+}
+
+void intel_cpt_verify_modeset(struct drm_device *dev, int pipe)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int dslreg = PIPEDSL(pipe), tc2reg = TRANS_CHICKEN2(pipe);
+ u32 temp;
+
+ temp = I915_READ(dslreg);
+ DELAY(500);
+ if (_intel_wait_for(dev, I915_READ(dslreg) != temp, 5, 1, "915cp1")) {
+ /* Without this, mode sets may fail silently on FDI */
+ I915_WRITE(tc2reg, TRANS_AUTOTRAIN_GEN_STALL_DIS);
+ DELAY(250);
+ I915_WRITE(tc2reg, 0);
+ if (_intel_wait_for(dev, I915_READ(dslreg) != temp, 5, 1,
+ "915cp2"))
+ DRM_ERROR("mode set failed: pipe %d stuck\n", pipe);
+ }
+}
+
+static void ironlake_crtc_enable(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+ u32 temp;
+ bool is_pch_port;
+
+ if (intel_crtc->active)
+ return;
+
+ intel_crtc->active = true;
+ intel_update_watermarks(dev);
+
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
+ temp = I915_READ(PCH_LVDS);
+ if ((temp & LVDS_PORT_EN) == 0)
+ I915_WRITE(PCH_LVDS, temp | LVDS_PORT_EN);
+ }
+
+ is_pch_port = intel_crtc_driving_pch(crtc);
+
+ if (is_pch_port)
+ ironlake_fdi_pll_enable(crtc);
+ else
+ ironlake_fdi_disable(crtc);
+
+ /* Enable panel fitting for LVDS */
+ if (dev_priv->pch_pf_size &&
+ (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) || HAS_eDP)) {
+ /* Force use of hard-coded filter coefficients
+ * as some pre-programmed values are broken,
+ * e.g. x201.
+ */
+ I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3);
+ I915_WRITE(PF_WIN_POS(pipe), dev_priv->pch_pf_pos);
+ I915_WRITE(PF_WIN_SZ(pipe), dev_priv->pch_pf_size);
+ }
+
+ intel_enable_pipe(dev_priv, pipe, is_pch_port);
+ intel_enable_plane(dev_priv, plane, pipe);
+
+ if (is_pch_port)
+ ironlake_pch_enable(crtc);
+
+ intel_crtc_load_lut(crtc);
+
+ DRM_LOCK(dev);
+ intel_update_fbc(dev);
+ DRM_UNLOCK(dev);
+
+ intel_crtc_update_cursor(crtc, true);
+}
+
+static void ironlake_crtc_disable(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+ u32 reg, temp;
+
+ if (!intel_crtc->active)
+ return;
+
+ intel_crtc_wait_for_pending_flips(crtc);
+ drm_vblank_off(dev, pipe);
+ intel_crtc_update_cursor(crtc, false);
+
+ intel_disable_plane(dev_priv, plane, pipe);
+
+ if (dev_priv->cfb_plane == plane)
+ intel_disable_fbc(dev);
+
+ intel_disable_pipe(dev_priv, pipe);
+
+ /* Disable PF */
+ I915_WRITE(PF_CTL(pipe), 0);
+ I915_WRITE(PF_WIN_SZ(pipe), 0);
+
+ ironlake_fdi_disable(crtc);
+
+ /* This is a horrible layering violation; we should be doing this in
+ * the connector/encoder ->prepare instead, but we don't always have
+ * enough information there about the config to know whether it will
+ * actually be necessary or just cause undesired flicker.
+ */
+ intel_disable_pch_ports(dev_priv, pipe);
+
+ intel_disable_transcoder(dev_priv, pipe);
+
+ if (HAS_PCH_CPT(dev)) {
+ /* disable TRANS_DP_CTL */
+ reg = TRANS_DP_CTL(pipe);
+ temp = I915_READ(reg);
+ temp &= ~(TRANS_DP_OUTPUT_ENABLE | TRANS_DP_PORT_SEL_MASK);
+ temp |= TRANS_DP_PORT_SEL_NONE;
+ I915_WRITE(reg, temp);
+
+ /* disable DPLL_SEL */
+ temp = I915_READ(PCH_DPLL_SEL);
+ switch (pipe) {
+ case 0:
+ temp &= ~(TRANSA_DPLL_ENABLE | TRANSA_DPLLB_SEL);
+ break;
+ case 1:
+ temp &= ~(TRANSB_DPLL_ENABLE | TRANSB_DPLLB_SEL);
+ break;
+ case 2:
+ /* C shares PLL A or B */
+ temp &= ~(TRANSC_DPLL_ENABLE | TRANSC_DPLLB_SEL);
+ break;
+ default:
+ KASSERT(1, ("Wrong pipe %d", pipe)); /* wtf */
+ }
+ I915_WRITE(PCH_DPLL_SEL, temp);
+ }
+
+ /* disable PCH DPLL */
+ if (!intel_crtc->no_pll)
+ intel_disable_pch_pll(dev_priv, pipe);
+
+ /* Switch from PCDclk to Rawclk */
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ I915_WRITE(reg, temp & ~FDI_PCDCLK);
+
+ /* Disable CPU FDI TX PLL */
+ reg = FDI_TX_CTL(pipe);
+ temp = I915_READ(reg);
+ I915_WRITE(reg, temp & ~FDI_TX_PLL_ENABLE);
+
+ POSTING_READ(reg);
+ DELAY(100);
+
+ reg = FDI_RX_CTL(pipe);
+ temp = I915_READ(reg);
+ I915_WRITE(reg, temp & ~FDI_RX_PLL_ENABLE);
+
+ /* Wait for the clocks to turn off. */
+ POSTING_READ(reg);
+ DELAY(100);
+
+ intel_crtc->active = false;
+ intel_update_watermarks(dev);
+
+ DRM_LOCK(dev);
+ intel_update_fbc(dev);
+ intel_clear_scanline_wait(dev);
+ DRM_UNLOCK(dev);
+}
+
+static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode)
+{
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+
+ /* XXX: When our outputs are all unaware of DPMS modes other than off
+ * and on, we should map those modes to DRM_MODE_DPMS_OFF in the CRTC.
+ */
+ switch (mode) {
+ case DRM_MODE_DPMS_ON:
+ case DRM_MODE_DPMS_STANDBY:
+ case DRM_MODE_DPMS_SUSPEND:
+ DRM_DEBUG_KMS("crtc %d/%d dpms on\n", pipe, plane);
+ ironlake_crtc_enable(crtc);
+ break;
+
+ case DRM_MODE_DPMS_OFF:
+ DRM_DEBUG_KMS("crtc %d/%d dpms off\n", pipe, plane);
+ ironlake_crtc_disable(crtc);
+ break;
+ }
+}
+
+static void intel_crtc_dpms_overlay(struct intel_crtc *intel_crtc, bool enable)
+{
+ if (!enable && intel_crtc->overlay) {
+ struct drm_device *dev = intel_crtc->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ DRM_LOCK(dev);
+ dev_priv->mm.interruptible = false;
+ (void) intel_overlay_switch_off(intel_crtc->overlay);
+ dev_priv->mm.interruptible = true;
+ DRM_UNLOCK(dev);
+ }
+
+ /* Let userspace switch the overlay on again. In most cases userspace
+ * has to recompute where to put it anyway.
+ */
+}
+
+static void i9xx_crtc_enable(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+
+ if (intel_crtc->active)
+ return;
+
+ intel_crtc->active = true;
+ intel_update_watermarks(dev);
+
+ intel_enable_pll(dev_priv, pipe);
+ intel_enable_pipe(dev_priv, pipe, false);
+ intel_enable_plane(dev_priv, plane, pipe);
+
+ intel_crtc_load_lut(crtc);
+ intel_update_fbc(dev);
+
+ /* Give the overlay scaler a chance to enable if it's on this pipe */
+ intel_crtc_dpms_overlay(intel_crtc, true);
+ intel_crtc_update_cursor(crtc, true);
+}
+
+static void i9xx_crtc_disable(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+
+ if (!intel_crtc->active)
+ return;
+
+ /* Give the overlay scaler a chance to disable if it's on this pipe */
+ intel_crtc_wait_for_pending_flips(crtc);
+ drm_vblank_off(dev, pipe);
+ intel_crtc_dpms_overlay(intel_crtc, false);
+ intel_crtc_update_cursor(crtc, false);
+
+ if (dev_priv->cfb_plane == plane)
+ intel_disable_fbc(dev);
+
+ intel_disable_plane(dev_priv, plane, pipe);
+ intel_disable_pipe(dev_priv, pipe);
+ intel_disable_pll(dev_priv, pipe);
+
+ intel_crtc->active = false;
+ intel_update_fbc(dev);
+ intel_update_watermarks(dev);
+ intel_clear_scanline_wait(dev);
+}
+
+static void i9xx_crtc_dpms(struct drm_crtc *crtc, int mode)
+{
+ /* XXX: When our outputs are all unaware of DPMS modes other than off
+ * and on, we should map those modes to DRM_MODE_DPMS_OFF in the CRTC.
+ */
+ switch (mode) {
+ case DRM_MODE_DPMS_ON:
+ case DRM_MODE_DPMS_STANDBY:
+ case DRM_MODE_DPMS_SUSPEND:
+ i9xx_crtc_enable(crtc);
+ break;
+ case DRM_MODE_DPMS_OFF:
+ i9xx_crtc_disable(crtc);
+ break;
+ }
+}
+
+/**
+ * Sets the power management mode of the pipe and plane.
+ */
+static void intel_crtc_dpms(struct drm_crtc *crtc, int mode)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+#if 0
+ struct drm_i915_master_private *master_priv;
+#endif
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ bool enabled;
+
+ if (intel_crtc->dpms_mode == mode)
+ return;
+
+ intel_crtc->dpms_mode = mode;
+
+ dev_priv->display.dpms(crtc, mode);
+
+#if 0
+ if (!dev->primary->master)
+ return;
+
+ master_priv = dev->primary->master->driver_priv;
+ if (!master_priv->sarea_priv)
+ return;
+#else
+ if (!dev_priv->sarea_priv)
+ return;
+#endif
+
+ enabled = crtc->enabled && mode != DRM_MODE_DPMS_OFF;
+
+ switch (pipe) {
+ case 0:
+#if 0
+ master_priv->sarea_priv->pipeA_w = enabled ? crtc->mode.hdisplay : 0;
+ master_priv->sarea_priv->pipeA_h = enabled ? crtc->mode.vdisplay : 0;
+#else
+ dev_priv->sarea_priv->planeA_w = enabled ? crtc->mode.hdisplay : 0;
+ dev_priv->sarea_priv->planeA_h = enabled ? crtc->mode.vdisplay : 0;
+#endif
+ break;
+ case 1:
+#if 0
+ master_priv->sarea_priv->pipeB_w = enabled ? crtc->mode.hdisplay : 0;
+ master_priv->sarea_priv->pipeB_h = enabled ? crtc->mode.vdisplay : 0;
+#else
+ dev_priv->sarea_priv->planeB_w = enabled ? crtc->mode.hdisplay : 0;
+ dev_priv->sarea_priv->planeB_h = enabled ? crtc->mode.vdisplay : 0;
+#endif
+ break;
+ default:
+ DRM_ERROR("Can't update pipe %c in SAREA\n", pipe_name(pipe));
+ break;
+ }
+}
+
+static void intel_crtc_disable(struct drm_crtc *crtc)
+{
+ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+ struct drm_device *dev = crtc->dev;
+
+ /* Flush any pending WAITs before we disable the pipe. Note that
+ * we need to drop the struct_mutex in order to acquire it again
+ * during the lowlevel dpms routines around a couple of the
+ * operations. It does not look trivial nor desirable to move
+ * that locking higher. So instead we leave a window for the
+ * submission of further commands on the fb before we can actually
+ * disable it. This race with userspace exists anyway, and we can
+ * only rely on the pipe being disabled by userspace after it
+ * receives the hotplug notification and has flushed any pending
+ * batches.
+ */
+ if (crtc->fb) {
+ DRM_LOCK(dev);
+ intel_finish_fb(crtc->fb);
+ DRM_UNLOCK(dev);
+ }
+
+ crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
+ assert_plane_disabled(dev->dev_private, to_intel_crtc(crtc)->plane);
+ assert_pipe_disabled(dev->dev_private, to_intel_crtc(crtc)->pipe);
+
+ if (crtc->fb) {
+ DRM_LOCK(dev);
+ intel_unpin_fb_obj(to_intel_framebuffer(crtc->fb)->obj);
+ DRM_UNLOCK(dev);
+ }
+}
+
+/* Prepare for a mode set.
+ *
+ * Note we could be a lot smarter here. We need to figure out which outputs
+ * will be enabled, which disabled (in short, how the config will changes)
+ * and perform the minimum necessary steps to accomplish that, e.g. updating
+ * watermarks, FBC configuration, making sure PLLs are programmed correctly,
+ * panel fitting is in the proper state, etc.
+ */
+static void i9xx_crtc_prepare(struct drm_crtc *crtc)
+{
+ i9xx_crtc_disable(crtc);
+}
+
+static void i9xx_crtc_commit(struct drm_crtc *crtc)
+{
+ i9xx_crtc_enable(crtc);
+}
+
+static void ironlake_crtc_prepare(struct drm_crtc *crtc)
+{
+ ironlake_crtc_disable(crtc);
+}
+
+static void ironlake_crtc_commit(struct drm_crtc *crtc)
+{
+ ironlake_crtc_enable(crtc);
+}
+
+void intel_encoder_prepare(struct drm_encoder *encoder)
+{
+ struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
+ /* lvds has its own version of prepare see intel_lvds_prepare */
+ encoder_funcs->dpms(encoder, DRM_MODE_DPMS_OFF);
+}
+
+void intel_encoder_commit(struct drm_encoder *encoder)
+{
+ struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
+ struct drm_device *dev = encoder->dev;
+ struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
+ struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
+
+ /* lvds has its own version of commit see intel_lvds_commit */
+ encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
+
+ if (HAS_PCH_CPT(dev))
+ intel_cpt_verify_modeset(dev, intel_crtc->pipe);
+}
+
+void intel_encoder_destroy(struct drm_encoder *encoder)
+{
+ struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
+
+ drm_encoder_cleanup(encoder);
+ free(intel_encoder, DRM_MEM_KMS);
+}
+
+static bool intel_crtc_mode_fixup(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = crtc->dev;
+
+ if (HAS_PCH_SPLIT(dev)) {
+ /* FDI link clock is fixed at 2.7G */
+ if (mode->clock * 3 > IRONLAKE_FDI_FREQ * 4)
+ return false;
+ }
+
+ /* All interlaced capable intel hw wants timings in frames. Note though
+ * that intel_lvds_mode_fixup does some funny tricks with the crtc
+ * timings, so we need to be careful not to clobber these.*/
+ if (!(adjusted_mode->private_flags & INTEL_MODE_CRTC_TIMINGS_SET))
+ drm_mode_set_crtcinfo(adjusted_mode, 0);
+
+ return true;
+}
+
+static int i945_get_display_clock_speed(struct drm_device *dev)
+{
+ return 400000;
+}
+
+static int i915_get_display_clock_speed(struct drm_device *dev)
+{
+ return 333000;
+}
+
+static int i9xx_misc_get_display_clock_speed(struct drm_device *dev)
+{
+ return 200000;
+}
+
+static int i915gm_get_display_clock_speed(struct drm_device *dev)
+{
+ u16 gcfgc = 0;
+
+ gcfgc = pci_read_config(dev->device, GCFGC, 2);
+
+ if (gcfgc & GC_LOW_FREQUENCY_ENABLE)
+ return 133000;
+ else {
+ switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
+ case GC_DISPLAY_CLOCK_333_MHZ:
+ return 333000;
+ default:
+ case GC_DISPLAY_CLOCK_190_200_MHZ:
+ return 190000;
+ }
+ }
+}
+
+static int i865_get_display_clock_speed(struct drm_device *dev)
+{
+ return 266000;
+}
+
+static int i855_get_display_clock_speed(struct drm_device *dev)
+{
+ u16 hpllcc = 0;
+ /* Assume that the hardware is in the high speed state. This
+ * should be the default.
+ */
+ switch (hpllcc & GC_CLOCK_CONTROL_MASK) {
+ case GC_CLOCK_133_200:
+ case GC_CLOCK_100_200:
+ return 200000;
+ case GC_CLOCK_166_250:
+ return 250000;
+ case GC_CLOCK_100_133:
+ return 133000;
+ }
+
+ /* Shouldn't happen */
+ return 0;
+}
+
+static int i830_get_display_clock_speed(struct drm_device *dev)
+{
+ return 133000;
+}
+
+struct fdi_m_n {
+ u32 tu;
+ u32 gmch_m;
+ u32 gmch_n;
+ u32 link_m;
+ u32 link_n;
+};
+
+static void
+fdi_reduce_ratio(u32 *num, u32 *den)
+{
+ while (*num > 0xffffff || *den > 0xffffff) {
+ *num >>= 1;
+ *den >>= 1;
+ }
+}
+
+static void
+ironlake_compute_m_n(int bits_per_pixel, int nlanes, int pixel_clock,
+ int link_clock, struct fdi_m_n *m_n)
+{
+ m_n->tu = 64; /* default size */
+
+ /* BUG_ON(pixel_clock > INT_MAX / 36); */
+ m_n->gmch_m = bits_per_pixel * pixel_clock;
+ m_n->gmch_n = link_clock * nlanes * 8;
+ fdi_reduce_ratio(&m_n->gmch_m, &m_n->gmch_n);
+
+ m_n->link_m = pixel_clock;
+ m_n->link_n = link_clock;
+ fdi_reduce_ratio(&m_n->link_m, &m_n->link_n);
+}
+
+
+struct intel_watermark_params {
+ unsigned long fifo_size;
+ unsigned long max_wm;
+ unsigned long default_wm;
+ unsigned long guard_size;
+ unsigned long cacheline_size;
+};
+
+/* Pineview has different values for various configs */
+static const struct intel_watermark_params pineview_display_wm = {
+ PINEVIEW_DISPLAY_FIFO,
+ PINEVIEW_MAX_WM,
+ PINEVIEW_DFT_WM,
+ PINEVIEW_GUARD_WM,
+ PINEVIEW_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params pineview_display_hplloff_wm = {
+ PINEVIEW_DISPLAY_FIFO,
+ PINEVIEW_MAX_WM,
+ PINEVIEW_DFT_HPLLOFF_WM,
+ PINEVIEW_GUARD_WM,
+ PINEVIEW_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params pineview_cursor_wm = {
+ PINEVIEW_CURSOR_FIFO,
+ PINEVIEW_CURSOR_MAX_WM,
+ PINEVIEW_CURSOR_DFT_WM,
+ PINEVIEW_CURSOR_GUARD_WM,
+ PINEVIEW_FIFO_LINE_SIZE,
+};
+static const struct intel_watermark_params pineview_cursor_hplloff_wm = {
+ PINEVIEW_CURSOR_FIFO,
+ PINEVIEW_CURSOR_MAX_WM,
+ PINEVIEW_CURSOR_DFT_WM,
+ PINEVIEW_CURSOR_GUARD_WM,
+ PINEVIEW_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params g4x_wm_info = {
+ G4X_FIFO_SIZE,
+ G4X_MAX_WM,
+ G4X_MAX_WM,
+ 2,
+ G4X_FIFO_LINE_SIZE,
+};
+static const struct intel_watermark_params g4x_cursor_wm_info = {
+ I965_CURSOR_FIFO,
+ I965_CURSOR_MAX_WM,
+ I965_CURSOR_DFT_WM,
+ 2,
+ G4X_FIFO_LINE_SIZE,
+};
+static const struct intel_watermark_params i965_cursor_wm_info = {
+ I965_CURSOR_FIFO,
+ I965_CURSOR_MAX_WM,
+ I965_CURSOR_DFT_WM,
+ 2,
+ I915_FIFO_LINE_SIZE,
+};
+static const struct intel_watermark_params i945_wm_info = {
+ I945_FIFO_SIZE,
+ I915_MAX_WM,
+ 1,
+ 2,
+ I915_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params i915_wm_info = {
+ I915_FIFO_SIZE,
+ I915_MAX_WM,
+ 1,
+ 2,
+ I915_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params i855_wm_info = {
+ I855GM_FIFO_SIZE,
+ I915_MAX_WM,
+ 1,
+ 2,
+ I830_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params i830_wm_info = {
+ I830_FIFO_SIZE,
+ I915_MAX_WM,
+ 1,
+ 2,
+ I830_FIFO_LINE_SIZE
+};
+
+static const struct intel_watermark_params ironlake_display_wm_info = {
+ ILK_DISPLAY_FIFO,
+ ILK_DISPLAY_MAXWM,
+ ILK_DISPLAY_DFTWM,
+ 2,
+ ILK_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params ironlake_cursor_wm_info = {
+ ILK_CURSOR_FIFO,
+ ILK_CURSOR_MAXWM,
+ ILK_CURSOR_DFTWM,
+ 2,
+ ILK_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params ironlake_display_srwm_info = {
+ ILK_DISPLAY_SR_FIFO,
+ ILK_DISPLAY_MAX_SRWM,
+ ILK_DISPLAY_DFT_SRWM,
+ 2,
+ ILK_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params ironlake_cursor_srwm_info = {
+ ILK_CURSOR_SR_FIFO,
+ ILK_CURSOR_MAX_SRWM,
+ ILK_CURSOR_DFT_SRWM,
+ 2,
+ ILK_FIFO_LINE_SIZE
+};
+
+static const struct intel_watermark_params sandybridge_display_wm_info = {
+ SNB_DISPLAY_FIFO,
+ SNB_DISPLAY_MAXWM,
+ SNB_DISPLAY_DFTWM,
+ 2,
+ SNB_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params sandybridge_cursor_wm_info = {
+ SNB_CURSOR_FIFO,
+ SNB_CURSOR_MAXWM,
+ SNB_CURSOR_DFTWM,
+ 2,
+ SNB_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params sandybridge_display_srwm_info = {
+ SNB_DISPLAY_SR_FIFO,
+ SNB_DISPLAY_MAX_SRWM,
+ SNB_DISPLAY_DFT_SRWM,
+ 2,
+ SNB_FIFO_LINE_SIZE
+};
+static const struct intel_watermark_params sandybridge_cursor_srwm_info = {
+ SNB_CURSOR_SR_FIFO,
+ SNB_CURSOR_MAX_SRWM,
+ SNB_CURSOR_DFT_SRWM,
+ 2,
+ SNB_FIFO_LINE_SIZE
+};
+
+
+/**
+ * intel_calculate_wm - calculate watermark level
+ * @clock_in_khz: pixel clock
+ * @wm: chip FIFO params
+ * @pixel_size: display pixel size
+ * @latency_ns: memory latency for the platform
+ *
+ * Calculate the watermark level (the level at which the display plane will
+ * start fetching from memory again). Each chip has a different display
+ * FIFO size and allocation, so the caller needs to figure that out and pass
+ * in the correct intel_watermark_params structure.
+ *
+ * As the pixel clock runs, the FIFO will be drained at a rate that depends
+ * on the pixel size. When it reaches the watermark level, it'll start
+ * fetching FIFO line sized based chunks from memory until the FIFO fills
+ * past the watermark point. If the FIFO drains completely, a FIFO underrun
+ * will occur, and a display engine hang could result.
+ */
+static unsigned long intel_calculate_wm(unsigned long clock_in_khz,
+ const struct intel_watermark_params *wm,
+ int fifo_size,
+ int pixel_size,
+ unsigned long latency_ns)
+{
+ long entries_required, wm_size;
+
+ /*
+ * Note: we need to make sure we don't overflow for various clock &
+ * latency values.
+ * clocks go from a few thousand to several hundred thousand.
+ * latency is usually a few thousand
+ */
+ entries_required = ((clock_in_khz / 1000) * pixel_size * latency_ns) /
+ 1000;
+ entries_required = howmany(entries_required, wm->cacheline_size);
+
+ DRM_DEBUG_KMS("FIFO entries required for mode: %ld\n", entries_required);
+
+ wm_size = fifo_size - (entries_required + wm->guard_size);
+
+ DRM_DEBUG_KMS("FIFO watermark level: %ld\n", wm_size);
+
+ /* Don't promote wm_size to unsigned... */
+ if (wm_size > (long)wm->max_wm)
+ wm_size = wm->max_wm;
+ if (wm_size <= 0)
+ wm_size = wm->default_wm;
+ return wm_size;
+}
+
+struct cxsr_latency {
+ int is_desktop;
+ int is_ddr3;
+ unsigned long fsb_freq;
+ unsigned long mem_freq;
+ unsigned long display_sr;
+ unsigned long display_hpll_disable;
+ unsigned long cursor_sr;
+ unsigned long cursor_hpll_disable;
+};
+
+static const struct cxsr_latency cxsr_latency_table[] = {
+ {1, 0, 800, 400, 3382, 33382, 3983, 33983}, /* DDR2-400 SC */
+ {1, 0, 800, 667, 3354, 33354, 3807, 33807}, /* DDR2-667 SC */
+ {1, 0, 800, 800, 3347, 33347, 3763, 33763}, /* DDR2-800 SC */
+ {1, 1, 800, 667, 6420, 36420, 6873, 36873}, /* DDR3-667 SC */
+ {1, 1, 800, 800, 5902, 35902, 6318, 36318}, /* DDR3-800 SC */
+
+ {1, 0, 667, 400, 3400, 33400, 4021, 34021}, /* DDR2-400 SC */
+ {1, 0, 667, 667, 3372, 33372, 3845, 33845}, /* DDR2-667 SC */
+ {1, 0, 667, 800, 3386, 33386, 3822, 33822}, /* DDR2-800 SC */
+ {1, 1, 667, 667, 6438, 36438, 6911, 36911}, /* DDR3-667 SC */
+ {1, 1, 667, 800, 5941, 35941, 6377, 36377}, /* DDR3-800 SC */
+
+ {1, 0, 400, 400, 3472, 33472, 4173, 34173}, /* DDR2-400 SC */
+ {1, 0, 400, 667, 3443, 33443, 3996, 33996}, /* DDR2-667 SC */
+ {1, 0, 400, 800, 3430, 33430, 3946, 33946}, /* DDR2-800 SC */
+ {1, 1, 400, 667, 6509, 36509, 7062, 37062}, /* DDR3-667 SC */
+ {1, 1, 400, 800, 5985, 35985, 6501, 36501}, /* DDR3-800 SC */
+
+ {0, 0, 800, 400, 3438, 33438, 4065, 34065}, /* DDR2-400 SC */
+ {0, 0, 800, 667, 3410, 33410, 3889, 33889}, /* DDR2-667 SC */
+ {0, 0, 800, 800, 3403, 33403, 3845, 33845}, /* DDR2-800 SC */
+ {0, 1, 800, 667, 6476, 36476, 6955, 36955}, /* DDR3-667 SC */
+ {0, 1, 800, 800, 5958, 35958, 6400, 36400}, /* DDR3-800 SC */
+
+ {0, 0, 667, 400, 3456, 33456, 4103, 34106}, /* DDR2-400 SC */
+ {0, 0, 667, 667, 3428, 33428, 3927, 33927}, /* DDR2-667 SC */
+ {0, 0, 667, 800, 3443, 33443, 3905, 33905}, /* DDR2-800 SC */
+ {0, 1, 667, 667, 6494, 36494, 6993, 36993}, /* DDR3-667 SC */
+ {0, 1, 667, 800, 5998, 35998, 6460, 36460}, /* DDR3-800 SC */
+
+ {0, 0, 400, 400, 3528, 33528, 4255, 34255}, /* DDR2-400 SC */
+ {0, 0, 400, 667, 3500, 33500, 4079, 34079}, /* DDR2-667 SC */
+ {0, 0, 400, 800, 3487, 33487, 4029, 34029}, /* DDR2-800 SC */
+ {0, 1, 400, 667, 6566, 36566, 7145, 37145}, /* DDR3-667 SC */
+ {0, 1, 400, 800, 6042, 36042, 6584, 36584}, /* DDR3-800 SC */
+};
+
+static const struct cxsr_latency *intel_get_cxsr_latency(int is_desktop,
+ int is_ddr3,
+ int fsb,
+ int mem)
+{
+ const struct cxsr_latency *latency;
+ int i;
+
+ if (fsb == 0 || mem == 0)
+ return NULL;
+
+ for (i = 0; i < DRM_ARRAY_SIZE(cxsr_latency_table); i++) {
+ latency = &cxsr_latency_table[i];
+ if (is_desktop == latency->is_desktop &&
+ is_ddr3 == latency->is_ddr3 &&
+ fsb == latency->fsb_freq && mem == latency->mem_freq)
+ return latency;
+ }
+
+ DRM_DEBUG_KMS("Unknown FSB/MEM found, disable CxSR\n");
+
+ return NULL;
+}
+
+static void pineview_disable_cxsr(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ /* deactivate cxsr */
+ I915_WRITE(DSPFW3, I915_READ(DSPFW3) & ~PINEVIEW_SELF_REFRESH_EN);
+}
+
+/*
+ * Latency for FIFO fetches is dependent on several factors:
+ * - memory configuration (speed, channels)
+ * - chipset
+ * - current MCH state
+ * It can be fairly high in some situations, so here we assume a fairly
+ * pessimal value. It's a tradeoff between extra memory fetches (if we
+ * set this value too high, the FIFO will fetch frequently to stay full)
+ * and power consumption (set it too low to save power and we might see
+ * FIFO underruns and display "flicker").
+ *
+ * A value of 5us seems to be a good balance; safe for very low end
+ * platforms but not overly aggressive on lower latency configs.
+ */
+static const int latency_ns = 5000;
+
+static int i9xx_get_fifo_size(struct drm_device *dev, int plane)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t dsparb = I915_READ(DSPARB);
+ int size;
+
+ size = dsparb & 0x7f;
+ if (plane)
+ size = ((dsparb >> DSPARB_CSTART_SHIFT) & 0x7f) - size;
+
+ DRM_DEBUG_KMS("FIFO size - (0x%08x) %s: %d\n", dsparb,
+ plane ? "B" : "A", size);
+
+ return size;
+}
+
+static int i85x_get_fifo_size(struct drm_device *dev, int plane)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t dsparb = I915_READ(DSPARB);
+ int size;
+
+ size = dsparb & 0x1ff;
+ if (plane)
+ size = ((dsparb >> DSPARB_BEND_SHIFT) & 0x1ff) - size;
+ size >>= 1; /* Convert to cachelines */
+
+ DRM_DEBUG_KMS("FIFO size - (0x%08x) %s: %d\n", dsparb,
+ plane ? "B" : "A", size);
+
+ return size;
+}
+
+static int i845_get_fifo_size(struct drm_device *dev, int plane)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t dsparb = I915_READ(DSPARB);
+ int size;
+
+ size = dsparb & 0x7f;
+ size >>= 2; /* Convert to cachelines */
+
+ DRM_DEBUG_KMS("FIFO size - (0x%08x) %s: %d\n", dsparb,
+ plane ? "B" : "A",
+ size);
+
+ return size;
+}
+
+static int i830_get_fifo_size(struct drm_device *dev, int plane)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t dsparb = I915_READ(DSPARB);
+ int size;
+
+ size = dsparb & 0x7f;
+ size >>= 1; /* Convert to cachelines */
+
+ DRM_DEBUG_KMS("FIFO size - (0x%08x) %s: %d\n", dsparb,
+ plane ? "B" : "A", size);
+
+ return size;
+}
+
+static struct drm_crtc *single_enabled_crtc(struct drm_device *dev)
+{
+ struct drm_crtc *crtc, *enabled = NULL;
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ if (crtc->enabled && crtc->fb) {
+ if (enabled)
+ return NULL;
+ enabled = crtc;
+ }
+ }
+
+ return enabled;
+}
+
+static void pineview_update_wm(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc;
+ const struct cxsr_latency *latency;
+ u32 reg;
+ unsigned long wm;
+
+ latency = intel_get_cxsr_latency(IS_PINEVIEW_G(dev), dev_priv->is_ddr3,
+ dev_priv->fsb_freq, dev_priv->mem_freq);
+ if (!latency) {
+ DRM_DEBUG_KMS("Unknown FSB/MEM found, disable CxSR\n");
+ pineview_disable_cxsr(dev);
+ return;
+ }
+
+ crtc = single_enabled_crtc(dev);
+ if (crtc) {
+ int clock = crtc->mode.clock;
+ int pixel_size = crtc->fb->bits_per_pixel / 8;
+
+ /* Display SR */
+ wm = intel_calculate_wm(clock, &pineview_display_wm,
+ pineview_display_wm.fifo_size,
+ pixel_size, latency->display_sr);
+ reg = I915_READ(DSPFW1);
+ reg &= ~DSPFW_SR_MASK;
+ reg |= wm << DSPFW_SR_SHIFT;
+ I915_WRITE(DSPFW1, reg);
+ DRM_DEBUG_KMS("DSPFW1 register is %x\n", reg);
+
+ /* cursor SR */
+ wm = intel_calculate_wm(clock, &pineview_cursor_wm,
+ pineview_display_wm.fifo_size,
+ pixel_size, latency->cursor_sr);
+ reg = I915_READ(DSPFW3);
+ reg &= ~DSPFW_CURSOR_SR_MASK;
+ reg |= (wm & 0x3f) << DSPFW_CURSOR_SR_SHIFT;
+ I915_WRITE(DSPFW3, reg);
+
+ /* Display HPLL off SR */
+ wm = intel_calculate_wm(clock, &pineview_display_hplloff_wm,
+ pineview_display_hplloff_wm.fifo_size,
+ pixel_size, latency->display_hpll_disable);
+ reg = I915_READ(DSPFW3);
+ reg &= ~DSPFW_HPLL_SR_MASK;
+ reg |= wm & DSPFW_HPLL_SR_MASK;
+ I915_WRITE(DSPFW3, reg);
+
+ /* cursor HPLL off SR */
+ wm = intel_calculate_wm(clock, &pineview_cursor_hplloff_wm,
+ pineview_display_hplloff_wm.fifo_size,
+ pixel_size, latency->cursor_hpll_disable);
+ reg = I915_READ(DSPFW3);
+ reg &= ~DSPFW_HPLL_CURSOR_MASK;
+ reg |= (wm & 0x3f) << DSPFW_HPLL_CURSOR_SHIFT;
+ I915_WRITE(DSPFW3, reg);
+ DRM_DEBUG_KMS("DSPFW3 register is %x\n", reg);
+
+ /* activate cxsr */
+ I915_WRITE(DSPFW3,
+ I915_READ(DSPFW3) | PINEVIEW_SELF_REFRESH_EN);
+ DRM_DEBUG_KMS("Self-refresh is enabled\n");
+ } else {
+ pineview_disable_cxsr(dev);
+ DRM_DEBUG_KMS("Self-refresh is disabled\n");
+ }
+}
+
+static bool g4x_compute_wm0(struct drm_device *dev,
+ int plane,
+ const struct intel_watermark_params *display,
+ int display_latency_ns,
+ const struct intel_watermark_params *cursor,
+ int cursor_latency_ns,
+ int *plane_wm,
+ int *cursor_wm)
+{
+ struct drm_crtc *crtc;
+ int htotal, hdisplay, clock, pixel_size;
+ int line_time_us, line_count;
+ int entries, tlb_miss;
+
+ crtc = intel_get_crtc_for_plane(dev, plane);
+ if (crtc->fb == NULL || !crtc->enabled) {
+ *cursor_wm = cursor->guard_size;
+ *plane_wm = display->guard_size;
+ return false;
+ }
+
+ htotal = crtc->mode.htotal;
+ hdisplay = crtc->mode.hdisplay;
+ clock = crtc->mode.clock;
+ pixel_size = crtc->fb->bits_per_pixel / 8;
+
+ /* Use the small buffer method to calculate plane watermark */
+ entries = ((clock * pixel_size / 1000) * display_latency_ns) / 1000;
+ tlb_miss = display->fifo_size*display->cacheline_size - hdisplay * 8;
+ if (tlb_miss > 0)
+ entries += tlb_miss;
+ entries = howmany(entries, display->cacheline_size);
+ *plane_wm = entries + display->guard_size;
+ if (*plane_wm > (int)display->max_wm)
+ *plane_wm = display->max_wm;
+
+ /* Use the large buffer method to calculate cursor watermark */
+ line_time_us = ((htotal * 1000) / clock);
+ line_count = (cursor_latency_ns / line_time_us + 1000) / 1000;
+ entries = line_count * 64 * pixel_size;
+ tlb_miss = cursor->fifo_size*cursor->cacheline_size - hdisplay * 8;
+ if (tlb_miss > 0)
+ entries += tlb_miss;
+ entries = howmany(entries, cursor->cacheline_size);
+ *cursor_wm = entries + cursor->guard_size;
+ if (*cursor_wm > (int)cursor->max_wm)
+ *cursor_wm = (int)cursor->max_wm;
+
+ return true;
+}
+
+/*
+ * Check the wm result.
+ *
+ * If any calculated watermark values is larger than the maximum value that
+ * can be programmed into the associated watermark register, that watermark
+ * must be disabled.
+ */
+static bool g4x_check_srwm(struct drm_device *dev,
+ int display_wm, int cursor_wm,
+ const struct intel_watermark_params *display,
+ const struct intel_watermark_params *cursor)
+{
+ DRM_DEBUG_KMS("SR watermark: display plane %d, cursor %d\n",
+ display_wm, cursor_wm);
+
+ if (display_wm > display->max_wm) {
+ DRM_DEBUG_KMS("display watermark is too large(%d/%ld), disabling\n",
+ display_wm, display->max_wm);
+ return false;
+ }
+
+ if (cursor_wm > cursor->max_wm) {
+ DRM_DEBUG_KMS("cursor watermark is too large(%d/%ld), disabling\n",
+ cursor_wm, cursor->max_wm);
+ return false;
+ }
+
+ if (!(display_wm || cursor_wm)) {
+ DRM_DEBUG_KMS("SR latency is 0, disabling\n");
+ return false;
+ }
+
+ return true;
+}
+
+static bool g4x_compute_srwm(struct drm_device *dev,
+ int plane,
+ int latency_ns,
+ const struct intel_watermark_params *display,
+ const struct intel_watermark_params *cursor,
+ int *display_wm, int *cursor_wm)
+{
+ struct drm_crtc *crtc;
+ int hdisplay, htotal, pixel_size, clock;
+ unsigned long line_time_us;
+ int line_count, line_size;
+ int small, large;
+ int entries;
+
+ if (!latency_ns) {
+ *display_wm = *cursor_wm = 0;
+ return false;
+ }
+
+ crtc = intel_get_crtc_for_plane(dev, plane);
+ hdisplay = crtc->mode.hdisplay;
+ htotal = crtc->mode.htotal;
+ clock = crtc->mode.clock;
+ pixel_size = crtc->fb->bits_per_pixel / 8;
+
+ line_time_us = (htotal * 1000) / clock;
+ line_count = (latency_ns / line_time_us + 1000) / 1000;
+ line_size = hdisplay * pixel_size;
+
+ /* Use the minimum of the small and large buffer method for primary */
+ small = ((clock * pixel_size / 1000) * latency_ns) / 1000;
+ large = line_count * line_size;
+
+ entries = howmany(min(small, large), display->cacheline_size);
+ *display_wm = entries + display->guard_size;
+
+ /* calculate the self-refresh watermark for display cursor */
+ entries = line_count * pixel_size * 64;
+ entries = howmany(entries, cursor->cacheline_size);
+ *cursor_wm = entries + cursor->guard_size;
+
+ return g4x_check_srwm(dev,
+ *display_wm, *cursor_wm,
+ display, cursor);
+}
+
+#define single_plane_enabled(mask) ((mask) != 0 && powerof2(mask))
+
+static void g4x_update_wm(struct drm_device *dev)
+{
+ static const int sr_latency_ns = 12000;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int planea_wm, planeb_wm, cursora_wm, cursorb_wm;
+ int plane_sr, cursor_sr;
+ unsigned int enabled = 0;
+
+ if (g4x_compute_wm0(dev, 0,
+ &g4x_wm_info, latency_ns,
+ &g4x_cursor_wm_info, latency_ns,
+ &planea_wm, &cursora_wm))
+ enabled |= 1;
+
+ if (g4x_compute_wm0(dev, 1,
+ &g4x_wm_info, latency_ns,
+ &g4x_cursor_wm_info, latency_ns,
+ &planeb_wm, &cursorb_wm))
+ enabled |= 2;
+
+ plane_sr = cursor_sr = 0;
+ if (single_plane_enabled(enabled) &&
+ g4x_compute_srwm(dev, ffs(enabled) - 1,
+ sr_latency_ns,
+ &g4x_wm_info,
+ &g4x_cursor_wm_info,
+ &plane_sr, &cursor_sr))
+ I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN);
+ else
+ I915_WRITE(FW_BLC_SELF,
+ I915_READ(FW_BLC_SELF) & ~FW_BLC_SELF_EN);
+
+ DRM_DEBUG_KMS("Setting FIFO watermarks - A: plane=%d, cursor=%d, B: plane=%d, cursor=%d, SR: plane=%d, cursor=%d\n",
+ planea_wm, cursora_wm,
+ planeb_wm, cursorb_wm,
+ plane_sr, cursor_sr);
+
+ I915_WRITE(DSPFW1,
+ (plane_sr << DSPFW_SR_SHIFT) |
+ (cursorb_wm << DSPFW_CURSORB_SHIFT) |
+ (planeb_wm << DSPFW_PLANEB_SHIFT) |
+ planea_wm);
+ I915_WRITE(DSPFW2,
+ (I915_READ(DSPFW2) & DSPFW_CURSORA_MASK) |
+ (cursora_wm << DSPFW_CURSORA_SHIFT));
+ /* HPLL off in SR has some issues on G4x... disable it */
+ I915_WRITE(DSPFW3,
+ (I915_READ(DSPFW3) & ~DSPFW_HPLL_SR_EN) |
+ (cursor_sr << DSPFW_CURSOR_SR_SHIFT));
+}
+
+static void i965_update_wm(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc;
+ int srwm = 1;
+ int cursor_sr = 16;
+
+ /* Calc sr entries for one plane configs */
+ crtc = single_enabled_crtc(dev);
+ if (crtc) {
+ /* self-refresh has much higher latency */
+ static const int sr_latency_ns = 12000;
+ int clock = crtc->mode.clock;
+ int htotal = crtc->mode.htotal;
+ int hdisplay = crtc->mode.hdisplay;
+ int pixel_size = crtc->fb->bits_per_pixel / 8;
+ unsigned long line_time_us;
+ int entries;
+
+ line_time_us = ((htotal * 1000) / clock);
+
+ /* Use ns/us then divide to preserve precision */
+ entries = (((sr_latency_ns / line_time_us) + 1000) / 1000) *
+ pixel_size * hdisplay;
+ entries = howmany(entries, I915_FIFO_LINE_SIZE);
+ srwm = I965_FIFO_SIZE - entries;
+ if (srwm < 0)
+ srwm = 1;
+ srwm &= 0x1ff;
+ DRM_DEBUG_KMS("self-refresh entries: %d, wm: %d\n",
+ entries, srwm);
+
+ entries = (((sr_latency_ns / line_time_us) + 1000) / 1000) *
+ pixel_size * 64;
+ entries = howmany(entries, i965_cursor_wm_info.cacheline_size);
+ cursor_sr = i965_cursor_wm_info.fifo_size -
+ (entries + i965_cursor_wm_info.guard_size);
+
+ if (cursor_sr > i965_cursor_wm_info.max_wm)
+ cursor_sr = i965_cursor_wm_info.max_wm;
+
+ DRM_DEBUG_KMS("self-refresh watermark: display plane %d "
+ "cursor %d\n", srwm, cursor_sr);
+
+ if (IS_CRESTLINE(dev))
+ I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN);
+ } else {
+ /* Turn off self refresh if both pipes are enabled */
+ if (IS_CRESTLINE(dev))
+ I915_WRITE(FW_BLC_SELF, I915_READ(FW_BLC_SELF)
+ & ~FW_BLC_SELF_EN);
+ }
+
+ DRM_DEBUG_KMS("Setting FIFO watermarks - A: 8, B: 8, C: 8, SR %d\n",
+ srwm);
+
+ /* 965 has limitations... */
+ I915_WRITE(DSPFW1, (srwm << DSPFW_SR_SHIFT) |
+ (8 << 16) | (8 << 8) | (8 << 0));
+ I915_WRITE(DSPFW2, (8 << 8) | (8 << 0));
+ /* update cursor SR watermark */
+ I915_WRITE(DSPFW3, (cursor_sr << DSPFW_CURSOR_SR_SHIFT));
+}
+
+static void i9xx_update_wm(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ const struct intel_watermark_params *wm_info;
+ uint32_t fwater_lo;
+ uint32_t fwater_hi;
+ int cwm, srwm = 1;
+ int fifo_size;
+ int planea_wm, planeb_wm;
+ struct drm_crtc *crtc, *enabled = NULL;
+
+ if (IS_I945GM(dev))
+ wm_info = &i945_wm_info;
+ else if (!IS_GEN2(dev))
+ wm_info = &i915_wm_info;
+ else
+ wm_info = &i855_wm_info;
+
+ fifo_size = dev_priv->display.get_fifo_size(dev, 0);
+ crtc = intel_get_crtc_for_plane(dev, 0);
+ if (crtc->enabled && crtc->fb) {
+ planea_wm = intel_calculate_wm(crtc->mode.clock,
+ wm_info, fifo_size,
+ crtc->fb->bits_per_pixel / 8,
+ latency_ns);
+ enabled = crtc;
+ } else
+ planea_wm = fifo_size - wm_info->guard_size;
+
+ fifo_size = dev_priv->display.get_fifo_size(dev, 1);
+ crtc = intel_get_crtc_for_plane(dev, 1);
+ if (crtc->enabled && crtc->fb) {
+ planeb_wm = intel_calculate_wm(crtc->mode.clock,
+ wm_info, fifo_size,
+ crtc->fb->bits_per_pixel / 8,
+ latency_ns);
+ if (enabled == NULL)
+ enabled = crtc;
+ else
+ enabled = NULL;
+ } else
+ planeb_wm = fifo_size - wm_info->guard_size;
+
+ DRM_DEBUG_KMS("FIFO watermarks - A: %d, B: %d\n", planea_wm, planeb_wm);
+
+ /*
+ * Overlay gets an aggressive default since video jitter is bad.
+ */
+ cwm = 2;
+
+ /* Play safe and disable self-refresh before adjusting watermarks. */
+ if (IS_I945G(dev) || IS_I945GM(dev))
+ I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN_MASK | 0);
+ else if (IS_I915GM(dev))
+ I915_WRITE(INSTPM, I915_READ(INSTPM) & ~INSTPM_SELF_EN);
+
+ /* Calc sr entries for one plane configs */
+ if (HAS_FW_BLC(dev) && enabled) {
+ /* self-refresh has much higher latency */
+ static const int sr_latency_ns = 6000;
+ int clock = enabled->mode.clock;
+ int htotal = enabled->mode.htotal;
+ int hdisplay = enabled->mode.hdisplay;
+ int pixel_size = enabled->fb->bits_per_pixel / 8;
+ unsigned long line_time_us;
+ int entries;
+
+ line_time_us = (htotal * 1000) / clock;
+
+ /* Use ns/us then divide to preserve precision */
+ entries = (((sr_latency_ns / line_time_us) + 1000) / 1000) *
+ pixel_size * hdisplay;
+ entries = howmany(entries, wm_info->cacheline_size);
+ DRM_DEBUG_KMS("self-refresh entries: %d\n", entries);
+ srwm = wm_info->fifo_size - entries;
+ if (srwm < 0)
+ srwm = 1;
+
+ if (IS_I945G(dev) || IS_I945GM(dev))
+ I915_WRITE(FW_BLC_SELF,
+ FW_BLC_SELF_FIFO_MASK | (srwm & 0xff));
+ else if (IS_I915GM(dev))
+ I915_WRITE(FW_BLC_SELF, srwm & 0x3f);
+ }
+
+ DRM_DEBUG_KMS("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n",
+ planea_wm, planeb_wm, cwm, srwm);
+
+ fwater_lo = ((planeb_wm & 0x3f) << 16) | (planea_wm & 0x3f);
+ fwater_hi = (cwm & 0x1f);
+
+ /* Set request length to 8 cachelines per fetch */
+ fwater_lo = fwater_lo | (1 << 24) | (1 << 8);
+ fwater_hi = fwater_hi | (1 << 8);
+
+ I915_WRITE(FW_BLC, fwater_lo);
+ I915_WRITE(FW_BLC2, fwater_hi);
+
+ if (HAS_FW_BLC(dev)) {
+ if (enabled) {
+ if (IS_I945G(dev) || IS_I945GM(dev))
+ I915_WRITE(FW_BLC_SELF,
+ FW_BLC_SELF_EN_MASK | FW_BLC_SELF_EN);
+ else if (IS_I915GM(dev))
+ I915_WRITE(INSTPM, I915_READ(INSTPM) | INSTPM_SELF_EN);
+ DRM_DEBUG_KMS("memory self refresh enabled\n");
+ } else
+ DRM_DEBUG_KMS("memory self refresh disabled\n");
+ }
+}
+
+static void i830_update_wm(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc;
+ uint32_t fwater_lo;
+ int planea_wm;
+
+ crtc = single_enabled_crtc(dev);
+ if (crtc == NULL)
+ return;
+
+ planea_wm = intel_calculate_wm(crtc->mode.clock, &i830_wm_info,
+ dev_priv->display.get_fifo_size(dev, 0),
+ crtc->fb->bits_per_pixel / 8,
+ latency_ns);
+ fwater_lo = I915_READ(FW_BLC) & ~0xfff;
+ fwater_lo |= (3<<8) | planea_wm;
+
+ DRM_DEBUG_KMS("Setting FIFO watermarks - A: %d\n", planea_wm);
+
+ I915_WRITE(FW_BLC, fwater_lo);
+}
+
+#define ILK_LP0_PLANE_LATENCY 700
+#define ILK_LP0_CURSOR_LATENCY 1300
+
+/*
+ * Check the wm result.
+ *
+ * If any calculated watermark values is larger than the maximum value that
+ * can be programmed into the associated watermark register, that watermark
+ * must be disabled.
+ */
+static bool ironlake_check_srwm(struct drm_device *dev, int level,
+ int fbc_wm, int display_wm, int cursor_wm,
+ const struct intel_watermark_params *display,
+ const struct intel_watermark_params *cursor)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ DRM_DEBUG_KMS("watermark %d: display plane %d, fbc lines %d,"
+ " cursor %d\n", level, display_wm, fbc_wm, cursor_wm);
+
+ if (fbc_wm > SNB_FBC_MAX_SRWM) {
+ DRM_DEBUG_KMS("fbc watermark(%d) is too large(%d), disabling wm%d+\n",
+ fbc_wm, SNB_FBC_MAX_SRWM, level);
+
+ /* fbc has it's own way to disable FBC WM */
+ I915_WRITE(DISP_ARB_CTL,
+ I915_READ(DISP_ARB_CTL) | DISP_FBC_WM_DIS);
+ return false;
+ }
+
+ if (display_wm > display->max_wm) {
+ DRM_DEBUG_KMS("display watermark(%d) is too large(%d), disabling wm%d+\n",
+ display_wm, SNB_DISPLAY_MAX_SRWM, level);
+ return false;
+ }
+
+ if (cursor_wm > cursor->max_wm) {
+ DRM_DEBUG_KMS("cursor watermark(%d) is too large(%d), disabling wm%d+\n",
+ cursor_wm, SNB_CURSOR_MAX_SRWM, level);
+ return false;
+ }
+
+ if (!(fbc_wm || display_wm || cursor_wm)) {
+ DRM_DEBUG_KMS("latency %d is 0, disabling wm%d+\n", level, level);
+ return false;
+ }
+
+ return true;
+}
+
+/*
+ * Compute watermark values of WM[1-3],
+ */
+static bool ironlake_compute_srwm(struct drm_device *dev, int level, int plane,
+ int latency_ns,
+ const struct intel_watermark_params *display,
+ const struct intel_watermark_params *cursor,
+ int *fbc_wm, int *display_wm, int *cursor_wm)
+{
+ struct drm_crtc *crtc;
+ unsigned long line_time_us;
+ int hdisplay, htotal, pixel_size, clock;
+ int line_count, line_size;
+ int small, large;
+ int entries;
+
+ if (!latency_ns) {
+ *fbc_wm = *display_wm = *cursor_wm = 0;
+ return false;
+ }
+
+ crtc = intel_get_crtc_for_plane(dev, plane);
+ hdisplay = crtc->mode.hdisplay;
+ htotal = crtc->mode.htotal;
+ clock = crtc->mode.clock;
+ pixel_size = crtc->fb->bits_per_pixel / 8;
+
+ line_time_us = (htotal * 1000) / clock;
+ line_count = (latency_ns / line_time_us + 1000) / 1000;
+ line_size = hdisplay * pixel_size;
+
+ /* Use the minimum of the small and large buffer method for primary */
+ small = ((clock * pixel_size / 1000) * latency_ns) / 1000;
+ large = line_count * line_size;
+
+ entries = howmany(min(small, large), display->cacheline_size);
+ *display_wm = entries + display->guard_size;
+
+ /*
+ * Spec says:
+ * FBC WM = ((Final Primary WM * 64) / number of bytes per line) + 2
+ */
+ *fbc_wm = howmany(*display_wm * 64, line_size) + 2;
+
+ /* calculate the self-refresh watermark for display cursor */
+ entries = line_count * pixel_size * 64;
+ entries = howmany(entries, cursor->cacheline_size);
+ *cursor_wm = entries + cursor->guard_size;
+
+ return ironlake_check_srwm(dev, level,
+ *fbc_wm, *display_wm, *cursor_wm,
+ display, cursor);
+}
+
+static void ironlake_update_wm(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int fbc_wm, plane_wm, cursor_wm;
+ unsigned int enabled;
+
+ enabled = 0;
+ if (g4x_compute_wm0(dev, 0,
+ &ironlake_display_wm_info,
+ ILK_LP0_PLANE_LATENCY,
+ &ironlake_cursor_wm_info,
+ ILK_LP0_CURSOR_LATENCY,
+ &plane_wm, &cursor_wm)) {
+ I915_WRITE(WM0_PIPEA_ILK,
+ (plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm);
+ DRM_DEBUG_KMS("FIFO watermarks For pipe A -"
+ " plane %d, " "cursor: %d\n",
+ plane_wm, cursor_wm);
+ enabled |= 1;
+ }
+
+ if (g4x_compute_wm0(dev, 1,
+ &ironlake_display_wm_info,
+ ILK_LP0_PLANE_LATENCY,
+ &ironlake_cursor_wm_info,
+ ILK_LP0_CURSOR_LATENCY,
+ &plane_wm, &cursor_wm)) {
+ I915_WRITE(WM0_PIPEB_ILK,
+ (plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm);
+ DRM_DEBUG_KMS("FIFO watermarks For pipe B -"
+ " plane %d, cursor: %d\n",
+ plane_wm, cursor_wm);
+ enabled |= 2;
+ }
+
+ /*
+ * Calculate and update the self-refresh watermark only when one
+ * display plane is used.
+ */
+ I915_WRITE(WM3_LP_ILK, 0);
+ I915_WRITE(WM2_LP_ILK, 0);
+ I915_WRITE(WM1_LP_ILK, 0);
+
+ if (!single_plane_enabled(enabled))
+ return;
+ enabled = ffs(enabled) - 1;
+
+ /* WM1 */
+ if (!ironlake_compute_srwm(dev, 1, enabled,
+ ILK_READ_WM1_LATENCY() * 500,
+ &ironlake_display_srwm_info,
+ &ironlake_cursor_srwm_info,
+ &fbc_wm, &plane_wm, &cursor_wm))
+ return;
+
+ I915_WRITE(WM1_LP_ILK,
+ WM1_LP_SR_EN |
+ (ILK_READ_WM1_LATENCY() << WM1_LP_LATENCY_SHIFT) |
+ (fbc_wm << WM1_LP_FBC_SHIFT) |
+ (plane_wm << WM1_LP_SR_SHIFT) |
+ cursor_wm);
+
+ /* WM2 */
+ if (!ironlake_compute_srwm(dev, 2, enabled,
+ ILK_READ_WM2_LATENCY() * 500,
+ &ironlake_display_srwm_info,
+ &ironlake_cursor_srwm_info,
+ &fbc_wm, &plane_wm, &cursor_wm))
+ return;
+
+ I915_WRITE(WM2_LP_ILK,
+ WM2_LP_EN |
+ (ILK_READ_WM2_LATENCY() << WM1_LP_LATENCY_SHIFT) |
+ (fbc_wm << WM1_LP_FBC_SHIFT) |
+ (plane_wm << WM1_LP_SR_SHIFT) |
+ cursor_wm);
+
+ /*
+ * WM3 is unsupported on ILK, probably because we don't have latency
+ * data for that power state
+ */
+}
+
+void sandybridge_update_wm(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int latency = SNB_READ_WM0_LATENCY() * 100; /* In unit 0.1us */
+ u32 val;
+ int fbc_wm, plane_wm, cursor_wm;
+ unsigned int enabled;
+
+ enabled = 0;
+ if (g4x_compute_wm0(dev, 0,
+ &sandybridge_display_wm_info, latency,
+ &sandybridge_cursor_wm_info, latency,
+ &plane_wm, &cursor_wm)) {
+ val = I915_READ(WM0_PIPEA_ILK);
+ val &= ~(WM0_PIPE_PLANE_MASK | WM0_PIPE_CURSOR_MASK);
+ I915_WRITE(WM0_PIPEA_ILK, val |
+ ((plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm));
+ DRM_DEBUG_KMS("FIFO watermarks For pipe A -"
+ " plane %d, " "cursor: %d\n",
+ plane_wm, cursor_wm);
+ enabled |= 1;
+ }
+
+ if (g4x_compute_wm0(dev, 1,
+ &sandybridge_display_wm_info, latency,
+ &sandybridge_cursor_wm_info, latency,
+ &plane_wm, &cursor_wm)) {
+ val = I915_READ(WM0_PIPEB_ILK);
+ val &= ~(WM0_PIPE_PLANE_MASK | WM0_PIPE_CURSOR_MASK);
+ I915_WRITE(WM0_PIPEB_ILK, val |
+ ((plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm));
+ DRM_DEBUG_KMS("FIFO watermarks For pipe B -"
+ " plane %d, cursor: %d\n",
+ plane_wm, cursor_wm);
+ enabled |= 2;
+ }
+
+ /* IVB has 3 pipes */
+ if (IS_IVYBRIDGE(dev) &&
+ g4x_compute_wm0(dev, 2,
+ &sandybridge_display_wm_info, latency,
+ &sandybridge_cursor_wm_info, latency,
+ &plane_wm, &cursor_wm)) {
+ val = I915_READ(WM0_PIPEC_IVB);
+ val &= ~(WM0_PIPE_PLANE_MASK | WM0_PIPE_CURSOR_MASK);
+ I915_WRITE(WM0_PIPEC_IVB, val |
+ ((plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm));
+ DRM_DEBUG_KMS("FIFO watermarks For pipe C -"
+ " plane %d, cursor: %d\n",
+ plane_wm, cursor_wm);
+ enabled |= 3;
+ }
+
+ /*
+ * Calculate and update the self-refresh watermark only when one
+ * display plane is used.
+ *
+ * SNB support 3 levels of watermark.
+ *
+ * WM1/WM2/WM2 watermarks have to be enabled in the ascending order,
+ * and disabled in the descending order
+ *
+ */
+ I915_WRITE(WM3_LP_ILK, 0);
+ I915_WRITE(WM2_LP_ILK, 0);
+ I915_WRITE(WM1_LP_ILK, 0);
+
+ if (!single_plane_enabled(enabled) ||
+ dev_priv->sprite_scaling_enabled)
+ return;
+ enabled = ffs(enabled) - 1;
+
+ /* WM1 */
+ if (!ironlake_compute_srwm(dev, 1, enabled,
+ SNB_READ_WM1_LATENCY() * 500,
+ &sandybridge_display_srwm_info,
+ &sandybridge_cursor_srwm_info,
+ &fbc_wm, &plane_wm, &cursor_wm))
+ return;
+
+ I915_WRITE(WM1_LP_ILK,
+ WM1_LP_SR_EN |
+ (SNB_READ_WM1_LATENCY() << WM1_LP_LATENCY_SHIFT) |
+ (fbc_wm << WM1_LP_FBC_SHIFT) |
+ (plane_wm << WM1_LP_SR_SHIFT) |
+ cursor_wm);
+
+ /* WM2 */
+ if (!ironlake_compute_srwm(dev, 2, enabled,
+ SNB_READ_WM2_LATENCY() * 500,
+ &sandybridge_display_srwm_info,
+ &sandybridge_cursor_srwm_info,
+ &fbc_wm, &plane_wm, &cursor_wm))
+ return;
+
+ I915_WRITE(WM2_LP_ILK,
+ WM2_LP_EN |
+ (SNB_READ_WM2_LATENCY() << WM1_LP_LATENCY_SHIFT) |
+ (fbc_wm << WM1_LP_FBC_SHIFT) |
+ (plane_wm << WM1_LP_SR_SHIFT) |
+ cursor_wm);
+
+ /* WM3 */
+ if (!ironlake_compute_srwm(dev, 3, enabled,
+ SNB_READ_WM3_LATENCY() * 500,
+ &sandybridge_display_srwm_info,
+ &sandybridge_cursor_srwm_info,
+ &fbc_wm, &plane_wm, &cursor_wm))
+ return;
+
+ I915_WRITE(WM3_LP_ILK,
+ WM3_LP_EN |
+ (SNB_READ_WM3_LATENCY() << WM1_LP_LATENCY_SHIFT) |
+ (fbc_wm << WM1_LP_FBC_SHIFT) |
+ (plane_wm << WM1_LP_SR_SHIFT) |
+ cursor_wm);
+}
+
+static bool
+sandybridge_compute_sprite_wm(struct drm_device *dev, int plane,
+ uint32_t sprite_width, int pixel_size,
+ const struct intel_watermark_params *display,
+ int display_latency_ns, int *sprite_wm)
+{
+ struct drm_crtc *crtc;
+ int clock;
+ int entries, tlb_miss;
+
+ crtc = intel_get_crtc_for_plane(dev, plane);
+ if (crtc->fb == NULL || !crtc->enabled) {
+ *sprite_wm = display->guard_size;
+ return false;
+ }
+
+ clock = crtc->mode.clock;
+
+ /* Use the small buffer method to calculate the sprite watermark */
+ entries = ((clock * pixel_size / 1000) * display_latency_ns) / 1000;
+ tlb_miss = display->fifo_size*display->cacheline_size -
+ sprite_width * 8;
+ if (tlb_miss > 0)
+ entries += tlb_miss;
+ entries = howmany(entries, display->cacheline_size);
+ *sprite_wm = entries + display->guard_size;
+ if (*sprite_wm > (int)display->max_wm)
+ *sprite_wm = display->max_wm;
+
+ return true;
+}
+
+static bool
+sandybridge_compute_sprite_srwm(struct drm_device *dev, int plane,
+ uint32_t sprite_width, int pixel_size,
+ const struct intel_watermark_params *display,
+ int latency_ns, int *sprite_wm)
+{
+ struct drm_crtc *crtc;
+ unsigned long line_time_us;
+ int clock;
+ int line_count, line_size;
+ int small, large;
+ int entries;
+
+ if (!latency_ns) {
+ *sprite_wm = 0;
+ return false;
+ }
+
+ crtc = intel_get_crtc_for_plane(dev, plane);
+ clock = crtc->mode.clock;
+ if (!clock) {
+ *sprite_wm = 0;
+ return false;
+ }
+
+ line_time_us = (sprite_width * 1000) / clock;
+ if (!line_time_us) {
+ *sprite_wm = 0;
+ return false;
+ }
+
+ line_count = (latency_ns / line_time_us + 1000) / 1000;
+ line_size = sprite_width * pixel_size;
+
+ /* Use the minimum of the small and large buffer method for primary */
+ small = ((clock * pixel_size / 1000) * latency_ns) / 1000;
+ large = line_count * line_size;
+
+ entries = howmany(min(small, large), display->cacheline_size);
+ *sprite_wm = entries + display->guard_size;
+
+ return *sprite_wm > 0x3ff ? false : true;
+}
+
+static void sandybridge_update_sprite_wm(struct drm_device *dev, int pipe,
+ uint32_t sprite_width, int pixel_size)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int latency = SNB_READ_WM0_LATENCY() * 100; /* In unit 0.1us */
+ u32 val;
+ int sprite_wm, reg;
+ int ret;
+
+ switch (pipe) {
+ case 0:
+ reg = WM0_PIPEA_ILK;
+ break;
+ case 1:
+ reg = WM0_PIPEB_ILK;
+ break;
+ case 2:
+ reg = WM0_PIPEC_IVB;
+ break;
+ default:
+ return; /* bad pipe */
+ }
+
+ ret = sandybridge_compute_sprite_wm(dev, pipe, sprite_width, pixel_size,
+ &sandybridge_display_wm_info,
+ latency, &sprite_wm);
+ if (!ret) {
+ DRM_DEBUG_KMS("failed to compute sprite wm for pipe %d\n",
+ pipe);
+ return;
+ }
+
+ val = I915_READ(reg);
+ val &= ~WM0_PIPE_SPRITE_MASK;
+ I915_WRITE(reg, val | (sprite_wm << WM0_PIPE_SPRITE_SHIFT));
+ DRM_DEBUG_KMS("sprite watermarks For pipe %d - %d\n", pipe, sprite_wm);
+
+
+ ret = sandybridge_compute_sprite_srwm(dev, pipe, sprite_width,
+ pixel_size,
+ &sandybridge_display_srwm_info,
+ SNB_READ_WM1_LATENCY() * 500,
+ &sprite_wm);
+ if (!ret) {
+ DRM_DEBUG_KMS("failed to compute sprite lp1 wm on pipe %d\n",
+ pipe);
+ return;
+ }
+ I915_WRITE(WM1S_LP_ILK, sprite_wm);
+
+ /* Only IVB has two more LP watermarks for sprite */
+ if (!IS_IVYBRIDGE(dev))
+ return;
+
+ ret = sandybridge_compute_sprite_srwm(dev, pipe, sprite_width,
+ pixel_size,
+ &sandybridge_display_srwm_info,
+ SNB_READ_WM2_LATENCY() * 500,
+ &sprite_wm);
+ if (!ret) {
+ DRM_DEBUG_KMS("failed to compute sprite lp2 wm on pipe %d\n",
+ pipe);
+ return;
+ }
+ I915_WRITE(WM2S_LP_IVB, sprite_wm);
+
+ ret = sandybridge_compute_sprite_srwm(dev, pipe, sprite_width,
+ pixel_size,
+ &sandybridge_display_srwm_info,
+ SNB_READ_WM3_LATENCY() * 500,
+ &sprite_wm);
+ if (!ret) {
+ DRM_DEBUG_KMS("failed to compute sprite lp3 wm on pipe %d\n",
+ pipe);
+ return;
+ }
+ I915_WRITE(WM3S_LP_IVB, sprite_wm);
+}
+
+/**
+ * intel_update_watermarks - update FIFO watermark values based on current modes
+ *
+ * Calculate watermark values for the various WM regs based on current mode
+ * and plane configuration.
+ *
+ * There are several cases to deal with here:
+ * - normal (i.e. non-self-refresh)
+ * - self-refresh (SR) mode
+ * - lines are large relative to FIFO size (buffer can hold up to 2)
+ * - lines are small relative to FIFO size (buffer can hold more than 2
+ * lines), so need to account for TLB latency
+ *
+ * The normal calculation is:
+ * watermark = dotclock * bytes per pixel * latency
+ * where latency is platform & configuration dependent (we assume pessimal
+ * values here).
+ *
+ * The SR calculation is:
+ * watermark = (trunc(latency/line time)+1) * surface width *
+ * bytes per pixel
+ * where
+ * line time = htotal / dotclock
+ * surface width = hdisplay for normal plane and 64 for cursor
+ * and latency is assumed to be high, as above.
+ *
+ * The final value programmed to the register should always be rounded up,
+ * and include an extra 2 entries to account for clock crossings.
+ *
+ * We don't use the sprite, so we can ignore that. And on Crestline we have
+ * to set the non-SR watermarks to 8.
+ */
+static void intel_update_watermarks(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (dev_priv->display.update_wm)
+ dev_priv->display.update_wm(dev);
+}
+
+void intel_update_sprite_watermarks(struct drm_device *dev, int pipe,
+ uint32_t sprite_width, int pixel_size)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (dev_priv->display.update_sprite_wm)
+ dev_priv->display.update_sprite_wm(dev, pipe, sprite_width,
+ pixel_size);
+}
+
+static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
+{
+ if (i915_panel_use_ssc >= 0)
+ return i915_panel_use_ssc != 0;
+ return dev_priv->lvds_use_ssc
+ && !(dev_priv->quirks & QUIRK_LVDS_SSC_DISABLE);
+}
+
+/**
+ * intel_choose_pipe_bpp_dither - figure out what color depth the pipe should send
+ * @crtc: CRTC structure
+ * @mode: requested mode
+ *
+ * A pipe may be connected to one or more outputs. Based on the depth of the
+ * attached framebuffer, choose a good color depth to use on the pipe.
+ *
+ * If possible, match the pipe depth to the fb depth. In some cases, this
+ * isn't ideal, because the connected output supports a lesser or restricted
+ * set of depths. Resolve that here:
+ * LVDS typically supports only 6bpc, so clamp down in that case
+ * HDMI supports only 8bpc or 12bpc, so clamp to 8bpc with dither for 10bpc
+ * Displays may support a restricted set as well, check EDID and clamp as
+ * appropriate.
+ * DP may want to dither down to 6bpc to fit larger modes
+ *
+ * RETURNS:
+ * Dithering requirement (i.e. false if display bpc and pipe bpc match,
+ * true if they don't match).
+ */
+static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc,
+ unsigned int *pipe_bpp,
+ struct drm_display_mode *mode)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_encoder *encoder;
+ struct drm_connector *connector;
+ unsigned int display_bpc = UINT_MAX, bpc;
+
+ /* Walk the encoders & connectors on this crtc, get min bpc */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
+
+ if (encoder->crtc != crtc)
+ continue;
+
+ if (intel_encoder->type == INTEL_OUTPUT_LVDS) {
+ unsigned int lvds_bpc;
+
+ if ((I915_READ(PCH_LVDS) & LVDS_A3_POWER_MASK) ==
+ LVDS_A3_POWER_UP)
+ lvds_bpc = 8;
+ else
+ lvds_bpc = 6;
+
+ if (lvds_bpc < display_bpc) {
+ DRM_DEBUG_KMS("clamping display bpc (was %d) to LVDS (%d)\n", display_bpc, lvds_bpc);
+ display_bpc = lvds_bpc;
+ }
+ continue;
+ }
+
+ if (intel_encoder->type == INTEL_OUTPUT_EDP) {
+ /* Use VBT settings if we have an eDP panel */
+ unsigned int edp_bpc = dev_priv->edp.bpp / 3;
+
+ if (edp_bpc < display_bpc) {
+ DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n", display_bpc, edp_bpc);
+ display_bpc = edp_bpc;
+ }
+ continue;
+ }
+
+ /* Not one of the known troublemakers, check the EDID */
+ list_for_each_entry(connector, &dev->mode_config.connector_list,
+ head) {
+ if (connector->encoder != encoder)
+ continue;
+
+ /* Don't use an invalid EDID bpc value */
+ if (connector->display_info.bpc &&
+ connector->display_info.bpc < display_bpc) {
+ DRM_DEBUG_KMS("clamping display bpc (was %d) to EDID reported max of %d\n", display_bpc, connector->display_info.bpc);
+ display_bpc = connector->display_info.bpc;
+ }
+ }
+
+ /*
+ * HDMI is either 12 or 8, so if the display lets 10bpc sneak
+ * through, clamp it down. (Note: >12bpc will be caught below.)
+ */
+ if (intel_encoder->type == INTEL_OUTPUT_HDMI) {
+ if (display_bpc > 8 && display_bpc < 12) {
+ DRM_DEBUG_KMS("forcing bpc to 12 for HDMI\n");
+ display_bpc = 12;
+ } else {
+ DRM_DEBUG_KMS("forcing bpc to 8 for HDMI\n");
+ display_bpc = 8;
+ }
+ }
+ }
+
+ if (mode->private_flags & INTEL_MODE_DP_FORCE_6BPC) {
+ DRM_DEBUG_KMS("Dithering DP to 6bpc\n");
+ display_bpc = 6;
+ }
+
+ /*
+ * We could just drive the pipe at the highest bpc all the time and
+ * enable dithering as needed, but that costs bandwidth. So choose
+ * the minimum value that expresses the full color range of the fb but
+ * also stays within the max display bpc discovered above.
+ */
+
+ switch (crtc->fb->depth) {
+ case 8:
+ bpc = 8; /* since we go through a colormap */
+ break;
+ case 15:
+ case 16:
+ bpc = 6; /* min is 18bpp */
+ break;
+ case 24:
+ bpc = 8;
+ break;
+ case 30:
+ bpc = 10;
+ break;
+ case 48:
+ bpc = 12;
+ break;
+ default:
+ DRM_DEBUG("unsupported depth, assuming 24 bits\n");
+ bpc = min((unsigned int)8, display_bpc);
+ break;
+ }
+
+ display_bpc = min(display_bpc, bpc);
+
+ DRM_DEBUG_KMS("setting pipe bpc to %d (max display bpc %d)\n",
+ bpc, display_bpc);
+
+ *pipe_bpp = display_bpc * 3;
+
+ return display_bpc != bpc;
+}
+
+static int i9xx_get_refclk(struct drm_crtc *crtc, int num_connectors)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int refclk;
+
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) &&
+ intel_panel_use_ssc(dev_priv) && num_connectors < 2) {
+ refclk = dev_priv->lvds_ssc_freq * 1000;
+ DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n",
+ refclk / 1000);
+ } else if (!IS_GEN2(dev)) {
+ refclk = 96000;
+ } else {
+ refclk = 48000;
+ }
+
+ return refclk;
+}
+
+static void i9xx_adjust_sdvo_tv_clock(struct drm_display_mode *adjusted_mode,
+ intel_clock_t *clock)
+{
+ /* SDVO TV has fixed PLL values depend on its clock range,
+ this mirrors vbios setting. */
+ if (adjusted_mode->clock >= 100000
+ && adjusted_mode->clock < 140500) {
+ clock->p1 = 2;
+ clock->p2 = 10;
+ clock->n = 3;
+ clock->m1 = 16;
+ clock->m2 = 8;
+ } else if (adjusted_mode->clock >= 140500
+ && adjusted_mode->clock <= 200000) {
+ clock->p1 = 1;
+ clock->p2 = 10;
+ clock->n = 6;
+ clock->m1 = 12;
+ clock->m2 = 8;
+ }
+}
+
+static void i9xx_update_pll_dividers(struct drm_crtc *crtc,
+ intel_clock_t *clock,
+ intel_clock_t *reduced_clock)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ u32 fp, fp2 = 0;
+
+ if (IS_PINEVIEW(dev)) {
+ fp = (1 << clock->n) << 16 | clock->m1 << 8 | clock->m2;
+ if (reduced_clock)
+ fp2 = (1 << reduced_clock->n) << 16 |
+ reduced_clock->m1 << 8 | reduced_clock->m2;
+ } else {
+ fp = clock->n << 16 | clock->m1 << 8 | clock->m2;
+ if (reduced_clock)
+ fp2 = reduced_clock->n << 16 | reduced_clock->m1 << 8 |
+ reduced_clock->m2;
+ }
+
+ I915_WRITE(FP0(pipe), fp);
+
+ intel_crtc->lowfreq_avail = false;
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) &&
+ reduced_clock && i915_powersave) {
+ I915_WRITE(FP1(pipe), fp2);
+ intel_crtc->lowfreq_avail = true;
+ } else {
+ I915_WRITE(FP1(pipe), fp);
+ }
+}
+
+static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode,
+ int x, int y,
+ struct drm_framebuffer *old_fb)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+ int refclk, num_connectors = 0;
+ intel_clock_t clock, reduced_clock;
+ u32 dpll, dspcntr, pipeconf, vsyncshift;
+ bool ok, has_reduced_clock = false, is_sdvo = false, is_dvo = false;
+ bool is_crt = false, is_lvds = false, is_tv = false, is_dp = false;
+ struct drm_mode_config *mode_config = &dev->mode_config;
+ struct intel_encoder *encoder;
+ const intel_limit_t *limit;
+ int ret;
+ u32 temp;
+ u32 lvds_sync = 0;
+
+ list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
+ if (encoder->base.crtc != crtc)
+ continue;
+
+ switch (encoder->type) {
+ case INTEL_OUTPUT_LVDS:
+ is_lvds = true;
+ break;
+ case INTEL_OUTPUT_SDVO:
+ case INTEL_OUTPUT_HDMI:
+ is_sdvo = true;
+ if (encoder->needs_tv_clock)
+ is_tv = true;
+ break;
+ case INTEL_OUTPUT_DVO:
+ is_dvo = true;
+ break;
+ case INTEL_OUTPUT_TVOUT:
+ is_tv = true;
+ break;
+ case INTEL_OUTPUT_ANALOG:
+ is_crt = true;
+ break;
+ case INTEL_OUTPUT_DISPLAYPORT:
+ is_dp = true;
+ break;
+ }
+
+ num_connectors++;
+ }
+
+ refclk = i9xx_get_refclk(crtc, num_connectors);
+
+ /*
+ * Returns a set of divisors for the desired target clock with the given
+ * refclk, or false. The returned values represent the clock equation:
+ * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2.
+ */
+ limit = intel_limit(crtc, refclk);
+ ok = limit->find_pll(limit, crtc, adjusted_mode->clock, refclk, NULL,
+ &clock);
+ if (!ok) {
+ DRM_ERROR("Couldn't find PLL settings for mode!\n");
+ return -EINVAL;
+ }
+
+ /* Ensure that the cursor is valid for the new mode before changing... */
+ intel_crtc_update_cursor(crtc, true);
+
+ if (is_lvds && dev_priv->lvds_downclock_avail) {
+ /*
+ * Ensure we match the reduced clock's P to the target clock.
+ * If the clocks don't match, we can't switch the display clock
+ * by using the FP0/FP1. In such case we will disable the LVDS
+ * downclock feature.
+ */
+ has_reduced_clock = limit->find_pll(limit, crtc,
+ dev_priv->lvds_downclock,
+ refclk,
+ &clock,
+ &reduced_clock);
+ }
+
+ if (is_sdvo && is_tv)
+ i9xx_adjust_sdvo_tv_clock(adjusted_mode, &clock);
+
+ i9xx_update_pll_dividers(crtc, &clock, has_reduced_clock ?
+ &reduced_clock : NULL);
+
+ dpll = DPLL_VGA_MODE_DIS;
+
+ if (!IS_GEN2(dev)) {
+ if (is_lvds)
+ dpll |= DPLLB_MODE_LVDS;
+ else
+ dpll |= DPLLB_MODE_DAC_SERIAL;
+ if (is_sdvo) {
+ int pixel_multiplier = intel_mode_get_pixel_multiplier(adjusted_mode);
+ if (pixel_multiplier > 1) {
+ if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
+ dpll |= (pixel_multiplier - 1) << SDVO_MULTIPLIER_SHIFT_HIRES;
+ }
+ dpll |= DPLL_DVO_HIGH_SPEED;
+ }
+ if (is_dp)
+ dpll |= DPLL_DVO_HIGH_SPEED;
+
+ /* compute bitmask from p1 value */
+ if (IS_PINEVIEW(dev))
+ dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW;
+ else {
+ dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
+ if (IS_G4X(dev) && has_reduced_clock)
+ dpll |= (1 << (reduced_clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
+ }
+ switch (clock.p2) {
+ case 5:
+ dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_5;
+ break;
+ case 7:
+ dpll |= DPLLB_LVDS_P2_CLOCK_DIV_7;
+ break;
+ case 10:
+ dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_10;
+ break;
+ case 14:
+ dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14;
+ break;
+ }
+ if (INTEL_INFO(dev)->gen >= 4)
+ dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT);
+ } else {
+ if (is_lvds) {
+ dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
+ } else {
+ if (clock.p1 == 2)
+ dpll |= PLL_P1_DIVIDE_BY_TWO;
+ else
+ dpll |= (clock.p1 - 2) << DPLL_FPA01_P1_POST_DIV_SHIFT;
+ if (clock.p2 == 4)
+ dpll |= PLL_P2_DIVIDE_BY_4;
+ }
+ }
+
+ if (is_sdvo && is_tv)
+ dpll |= PLL_REF_INPUT_TVCLKINBC;
+ else if (is_tv)
+ /* XXX: just matching BIOS for now */
+ /* dpll |= PLL_REF_INPUT_TVCLKINBC; */
+ dpll |= 3;
+ else if (is_lvds && intel_panel_use_ssc(dev_priv) && num_connectors < 2)
+ dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;
+ else
+ dpll |= PLL_REF_INPUT_DREFCLK;
+
+ /* setup pipeconf */
+ pipeconf = I915_READ(PIPECONF(pipe));
+
+ /* Set up the display plane register */
+ dspcntr = DISPPLANE_GAMMA_ENABLE;
+
+ if (pipe == 0)
+ dspcntr &= ~DISPPLANE_SEL_PIPE_MASK;
+ else
+ dspcntr |= DISPPLANE_SEL_PIPE_B;
+
+ if (pipe == 0 && INTEL_INFO(dev)->gen < 4) {
+ /* Enable pixel doubling when the dot clock is > 90% of the (display)
+ * core speed.
+ *
+ * XXX: No double-wide on 915GM pipe B. Is that the only reason for the
+ * pipe == 0 check?
+ */
+ if (mode->clock >
+ dev_priv->display.get_display_clock_speed(dev) * 9 / 10)
+ pipeconf |= PIPECONF_DOUBLE_WIDE;
+ else
+ pipeconf &= ~PIPECONF_DOUBLE_WIDE;
+ }
+
+ /* default to 8bpc */
+ pipeconf &= ~(PIPECONF_BPP_MASK | PIPECONF_DITHER_EN);
+ if (is_dp) {
+ if (mode->private_flags & INTEL_MODE_DP_FORCE_6BPC) {
+ pipeconf |= PIPECONF_BPP_6 |
+ PIPECONF_DITHER_EN |
+ PIPECONF_DITHER_TYPE_SP;
+ }
+ }
+
+ dpll |= DPLL_VCO_ENABLE;
+
+ DRM_DEBUG_KMS("Mode for pipe %c:\n", pipe == 0 ? 'A' : 'B');
+ drm_mode_debug_printmodeline(mode);
+
+ I915_WRITE(DPLL(pipe), dpll & ~DPLL_VCO_ENABLE);
+
+ POSTING_READ(DPLL(pipe));
+ DELAY(150);
+
+ /* The LVDS pin pair needs to be on before the DPLLs are enabled.
+ * This is an exception to the general rule that mode_set doesn't turn
+ * things on.
+ */
+ if (is_lvds) {
+ temp = I915_READ(LVDS);
+ temp |= LVDS_PORT_EN | LVDS_A0A2_CLKA_POWER_UP;
+ if (pipe == 1) {
+ temp |= LVDS_PIPEB_SELECT;
+ } else {
+ temp &= ~LVDS_PIPEB_SELECT;
+ }
+ /* set the corresponsding LVDS_BORDER bit */
+ temp |= dev_priv->lvds_border_bits;
+ /* Set the B0-B3 data pairs corresponding to whether we're going to
+ * set the DPLLs for dual-channel mode or not.
+ */
+ if (clock.p2 == 7)
+ temp |= LVDS_B0B3_POWER_UP | LVDS_CLKB_POWER_UP;
+ else
+ temp &= ~(LVDS_B0B3_POWER_UP | LVDS_CLKB_POWER_UP);
+
+ /* It would be nice to set 24 vs 18-bit mode (LVDS_A3_POWER_UP)
+ * appropriately here, but we need to look more thoroughly into how
+ * panels behave in the two modes.
+ */
+ /* set the dithering flag on LVDS as needed */
+ if (INTEL_INFO(dev)->gen >= 4) {
+ if (dev_priv->lvds_dither)
+ temp |= LVDS_ENABLE_DITHER;
+ else
+ temp &= ~LVDS_ENABLE_DITHER;
+ }
+ if (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC)
+ lvds_sync |= LVDS_HSYNC_POLARITY;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC)
+ lvds_sync |= LVDS_VSYNC_POLARITY;
+ if ((temp & (LVDS_HSYNC_POLARITY | LVDS_VSYNC_POLARITY))
+ != lvds_sync) {
+ char flags[2] = "-+";
+ DRM_INFO("Changing LVDS panel from "
+ "(%chsync, %cvsync) to (%chsync, %cvsync)\n",
+ flags[!(temp & LVDS_HSYNC_POLARITY)],
+ flags[!(temp & LVDS_VSYNC_POLARITY)],
+ flags[!(lvds_sync & LVDS_HSYNC_POLARITY)],
+ flags[!(lvds_sync & LVDS_VSYNC_POLARITY)]);
+ temp &= ~(LVDS_HSYNC_POLARITY | LVDS_VSYNC_POLARITY);
+ temp |= lvds_sync;
+ }
+ I915_WRITE(LVDS, temp);
+ }
+
+ if (is_dp) {
+ intel_dp_set_m_n(crtc, mode, adjusted_mode);
+ }
+
+ I915_WRITE(DPLL(pipe), dpll);
+
+ /* Wait for the clocks to stabilize. */
+ POSTING_READ(DPLL(pipe));
+ DELAY(150);
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ temp = 0;
+ if (is_sdvo) {
+ temp = intel_mode_get_pixel_multiplier(adjusted_mode);
+ if (temp > 1)
+ temp = (temp - 1) << DPLL_MD_UDI_MULTIPLIER_SHIFT;
+ else
+ temp = 0;
+ }
+ I915_WRITE(DPLL_MD(pipe), temp);
+ } else {
+ /* The pixel multiplier can only be updated once the
+ * DPLL is enabled and the clocks are stable.
+ *
+ * So write it again.
+ */
+ I915_WRITE(DPLL(pipe), dpll);
+ }
+
+ if (HAS_PIPE_CXSR(dev)) {
+ if (intel_crtc->lowfreq_avail) {
+ DRM_DEBUG_KMS("enabling CxSR downclocking\n");
+ pipeconf |= PIPECONF_CXSR_DOWNCLOCK;
+ } else {
+ DRM_DEBUG_KMS("disabling CxSR downclocking\n");
+ pipeconf &= ~PIPECONF_CXSR_DOWNCLOCK;
+ }
+ }
+
+ pipeconf &= ~PIPECONF_INTERLACE_MASK;
+ if (!IS_GEN2(dev) &&
+ adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
+ pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION;
+ /* the chip adds 2 halflines automatically */
+ adjusted_mode->crtc_vtotal -= 1;
+ adjusted_mode->crtc_vblank_end -= 1;
+ vsyncshift = adjusted_mode->crtc_hsync_start
+ - adjusted_mode->crtc_htotal/2;
+ } else {
+ pipeconf |= PIPECONF_PROGRESSIVE;
+ vsyncshift = 0;
+ }
+
+ if (!IS_GEN3(dev))
+ I915_WRITE(VSYNCSHIFT(pipe), vsyncshift);
+
+ I915_WRITE(HTOTAL(pipe),
+ (adjusted_mode->crtc_hdisplay - 1) |
+ ((adjusted_mode->crtc_htotal - 1) << 16));
+ I915_WRITE(HBLANK(pipe),
+ (adjusted_mode->crtc_hblank_start - 1) |
+ ((adjusted_mode->crtc_hblank_end - 1) << 16));
+ I915_WRITE(HSYNC(pipe),
+ (adjusted_mode->crtc_hsync_start - 1) |
+ ((adjusted_mode->crtc_hsync_end - 1) << 16));
+
+ I915_WRITE(VTOTAL(pipe),
+ (adjusted_mode->crtc_vdisplay - 1) |
+ ((adjusted_mode->crtc_vtotal - 1) << 16));
+ I915_WRITE(VBLANK(pipe),
+ (adjusted_mode->crtc_vblank_start - 1) |
+ ((adjusted_mode->crtc_vblank_end - 1) << 16));
+ I915_WRITE(VSYNC(pipe),
+ (adjusted_mode->crtc_vsync_start - 1) |
+ ((adjusted_mode->crtc_vsync_end - 1) << 16));
+
+ /* pipesrc and dspsize control the size that is scaled from,
+ * which should always be the user's requested size.
+ */
+ I915_WRITE(DSPSIZE(plane),
+ ((mode->vdisplay - 1) << 16) |
+ (mode->hdisplay - 1));
+ I915_WRITE(DSPPOS(plane), 0);
+ I915_WRITE(PIPESRC(pipe),
+ ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1));
+
+ I915_WRITE(PIPECONF(pipe), pipeconf);
+ POSTING_READ(PIPECONF(pipe));
+ intel_enable_pipe(dev_priv, pipe, false);
+
+ intel_wait_for_vblank(dev, pipe);
+
+ I915_WRITE(DSPCNTR(plane), dspcntr);
+ POSTING_READ(DSPCNTR(plane));
+ intel_enable_plane(dev_priv, plane, pipe);
+
+ ret = intel_pipe_set_base(crtc, x, y, old_fb);
+
+ intel_update_watermarks(dev);
+
+ return ret;
+}
+
+/*
+ * Initialize reference clocks when the driver loads
+ */
+void ironlake_init_pch_refclk(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_mode_config *mode_config = &dev->mode_config;
+ struct intel_encoder *encoder;
+ u32 temp;
+ bool has_lvds = false;
+ bool has_cpu_edp = false;
+ bool has_pch_edp = false;
+ bool has_panel = false;
+ bool has_ck505 = false;
+ bool can_ssc = false;
+
+ /* We need to take the global config into account */
+ list_for_each_entry(encoder, &mode_config->encoder_list,
+ base.head) {
+ switch (encoder->type) {
+ case INTEL_OUTPUT_LVDS:
+ has_panel = true;
+ has_lvds = true;
+ break;
+ case INTEL_OUTPUT_EDP:
+ has_panel = true;
+ if (intel_encoder_is_pch_edp(&encoder->base))
+ has_pch_edp = true;
+ else
+ has_cpu_edp = true;
+ break;
+ }
+ }
+
+ if (HAS_PCH_IBX(dev)) {
+ has_ck505 = dev_priv->display_clock_mode;
+ can_ssc = has_ck505;
+ } else {
+ has_ck505 = false;
+ can_ssc = true;
+ }
+
+ DRM_DEBUG_KMS("has_panel %d has_lvds %d has_pch_edp %d has_cpu_edp %d has_ck505 %d\n",
+ has_panel, has_lvds, has_pch_edp, has_cpu_edp,
+ has_ck505);
+
+ /* Ironlake: try to setup display ref clock before DPLL
+ * enabling. This is only under driver's control after
+ * PCH B stepping, previous chipset stepping should be
+ * ignoring this setting.
+ */
+ temp = I915_READ(PCH_DREF_CONTROL);
+ /* Always enable nonspread source */
+ temp &= ~DREF_NONSPREAD_SOURCE_MASK;
+
+ if (has_ck505)
+ temp |= DREF_NONSPREAD_CK505_ENABLE;
+ else
+ temp |= DREF_NONSPREAD_SOURCE_ENABLE;
+
+ if (has_panel) {
+ temp &= ~DREF_SSC_SOURCE_MASK;
+ temp |= DREF_SSC_SOURCE_ENABLE;
+
+ /* SSC must be turned on before enabling the CPU output */
+ if (intel_panel_use_ssc(dev_priv) && can_ssc) {
+ DRM_DEBUG_KMS("Using SSC on panel\n");
+ temp |= DREF_SSC1_ENABLE;
+ } else
+ temp &= ~DREF_SSC1_ENABLE;
+
+ /* Get SSC going before enabling the outputs */
+ I915_WRITE(PCH_DREF_CONTROL, temp);
+ POSTING_READ(PCH_DREF_CONTROL);
+ DELAY(200);
+
+ temp &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
+
+ /* Enable CPU source on CPU attached eDP */
+ if (has_cpu_edp) {
+ if (intel_panel_use_ssc(dev_priv) && can_ssc) {
+ DRM_DEBUG_KMS("Using SSC on eDP\n");
+ temp |= DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD;
+ }
+ else
+ temp |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD;
+ } else
+ temp |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
+
+ I915_WRITE(PCH_DREF_CONTROL, temp);
+ POSTING_READ(PCH_DREF_CONTROL);
+ DELAY(200);
+ } else {
+ DRM_DEBUG_KMS("Disabling SSC entirely\n");
+
+ temp &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
+
+ /* Turn off CPU output */
+ temp |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
+
+ I915_WRITE(PCH_DREF_CONTROL, temp);
+ POSTING_READ(PCH_DREF_CONTROL);
+ DELAY(200);
+
+ /* Turn off the SSC source */
+ temp &= ~DREF_SSC_SOURCE_MASK;
+ temp |= DREF_SSC_SOURCE_DISABLE;
+
+ /* Turn off SSC1 */
+ temp &= ~ DREF_SSC1_ENABLE;
+
+ I915_WRITE(PCH_DREF_CONTROL, temp);
+ POSTING_READ(PCH_DREF_CONTROL);
+ DELAY(200);
+ }
+}
+
+static int ironlake_get_refclk(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_encoder *encoder;
+ struct drm_mode_config *mode_config = &dev->mode_config;
+ struct intel_encoder *edp_encoder = NULL;
+ int num_connectors = 0;
+ bool is_lvds = false;
+
+ list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
+ if (encoder->base.crtc != crtc)
+ continue;
+
+ switch (encoder->type) {
+ case INTEL_OUTPUT_LVDS:
+ is_lvds = true;
+ break;
+ case INTEL_OUTPUT_EDP:
+ edp_encoder = encoder;
+ break;
+ }
+ num_connectors++;
+ }
+
+ if (is_lvds && intel_panel_use_ssc(dev_priv) && num_connectors < 2) {
+ DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n",
+ dev_priv->lvds_ssc_freq);
+ return dev_priv->lvds_ssc_freq * 1000;
+ }
+
+ return 120000;
+}
+
+static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode,
+ int x, int y,
+ struct drm_framebuffer *old_fb)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int plane = intel_crtc->plane;
+ int refclk, num_connectors = 0;
+ intel_clock_t clock, reduced_clock;
+ u32 dpll, fp = 0, fp2 = 0, dspcntr, pipeconf;
+ bool ok, has_reduced_clock = false, is_sdvo = false;
+ bool is_crt = false, is_lvds = false, is_tv = false, is_dp = false;
+ struct intel_encoder *has_edp_encoder = NULL;
+ struct drm_mode_config *mode_config = &dev->mode_config;
+ struct intel_encoder *encoder;
+ const intel_limit_t *limit;
+ int ret;
+ struct fdi_m_n m_n = {0};
+ u32 temp;
+ u32 lvds_sync = 0;
+ int target_clock, pixel_multiplier, lane, link_bw, factor;
+ unsigned int pipe_bpp;
+ bool dither;
+
+ list_for_each_entry(encoder, &mode_config->encoder_list, base.head) {
+ if (encoder->base.crtc != crtc)
+ continue;
+
+ switch (encoder->type) {
+ case INTEL_OUTPUT_LVDS:
+ is_lvds = true;
+ break;
+ case INTEL_OUTPUT_SDVO:
+ case INTEL_OUTPUT_HDMI:
+ is_sdvo = true;
+ if (encoder->needs_tv_clock)
+ is_tv = true;
+ break;
+ case INTEL_OUTPUT_TVOUT:
+ is_tv = true;
+ break;
+ case INTEL_OUTPUT_ANALOG:
+ is_crt = true;
+ break;
+ case INTEL_OUTPUT_DISPLAYPORT:
+ is_dp = true;
+ break;
+ case INTEL_OUTPUT_EDP:
+ has_edp_encoder = encoder;
+ break;
+ }
+
+ num_connectors++;
+ }
+
+ refclk = ironlake_get_refclk(crtc);
+
+ /*
+ * Returns a set of divisors for the desired target clock with the given
+ * refclk, or false. The returned values represent the clock equation:
+ * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2.
+ */
+ limit = intel_limit(crtc, refclk);
+ ok = limit->find_pll(limit, crtc, adjusted_mode->clock, refclk, NULL,
+ &clock);
+ if (!ok) {
+ DRM_ERROR("Couldn't find PLL settings for mode!\n");
+ return -EINVAL;
+ }
+
+ /* Ensure that the cursor is valid for the new mode before changing... */
+ intel_crtc_update_cursor(crtc, true);
+
+ if (is_lvds && dev_priv->lvds_downclock_avail) {
+ /*
+ * Ensure we match the reduced clock's P to the target clock.
+ * If the clocks don't match, we can't switch the display clock
+ * by using the FP0/FP1. In such case we will disable the LVDS
+ * downclock feature.
+ */
+ has_reduced_clock = limit->find_pll(limit, crtc,
+ dev_priv->lvds_downclock,
+ refclk,
+ &clock,
+ &reduced_clock);
+ }
+ /* SDVO TV has fixed PLL values depend on its clock range,
+ this mirrors vbios setting. */
+ if (is_sdvo && is_tv) {
+ if (adjusted_mode->clock >= 100000
+ && adjusted_mode->clock < 140500) {
+ clock.p1 = 2;
+ clock.p2 = 10;
+ clock.n = 3;
+ clock.m1 = 16;
+ clock.m2 = 8;
+ } else if (adjusted_mode->clock >= 140500
+ && adjusted_mode->clock <= 200000) {
+ clock.p1 = 1;
+ clock.p2 = 10;
+ clock.n = 6;
+ clock.m1 = 12;
+ clock.m2 = 8;
+ }
+ }
+
+ /* FDI link */
+ pixel_multiplier = intel_mode_get_pixel_multiplier(adjusted_mode);
+ lane = 0;
+ /* CPU eDP doesn't require FDI link, so just set DP M/N
+ according to current link config */
+ if (has_edp_encoder &&
+ !intel_encoder_is_pch_edp(&has_edp_encoder->base)) {
+ target_clock = mode->clock;
+ intel_edp_link_config(has_edp_encoder,
+ &lane, &link_bw);
+ } else {
+ /* [e]DP over FDI requires target mode clock
+ instead of link clock */
+ if (is_dp || intel_encoder_is_pch_edp(&has_edp_encoder->base))
+ target_clock = mode->clock;
+ else
+ target_clock = adjusted_mode->clock;
+
+ /* FDI is a binary signal running at ~2.7GHz, encoding
+ * each output octet as 10 bits. The actual frequency
+ * is stored as a divider into a 100MHz clock, and the
+ * mode pixel clock is stored in units of 1KHz.
+ * Hence the bw of each lane in terms of the mode signal
+ * is:
+ */
+ link_bw = intel_fdi_link_freq(dev) * MHz(100)/KHz(1)/10;
+ }
+
+ /* determine panel color depth */
+ temp = I915_READ(PIPECONF(pipe));
+ temp &= ~PIPE_BPC_MASK;
+ dither = intel_choose_pipe_bpp_dither(crtc, &pipe_bpp, mode);
+ switch (pipe_bpp) {
+ case 18:
+ temp |= PIPE_6BPC;
+ break;
+ case 24:
+ temp |= PIPE_8BPC;
+ break;
+ case 30:
+ temp |= PIPE_10BPC;
+ break;
+ case 36:
+ temp |= PIPE_12BPC;
+ break;
+ default:
+ printf("intel_choose_pipe_bpp returned invalid value %d\n",
+ pipe_bpp);
+ temp |= PIPE_8BPC;
+ pipe_bpp = 24;
+ break;
+ }
+
+ intel_crtc->bpp = pipe_bpp;
+ I915_WRITE(PIPECONF(pipe), temp);
+
+ if (!lane) {
+ /*
+ * Account for spread spectrum to avoid
+ * oversubscribing the link. Max center spread
+ * is 2.5%; use 5% for safety's sake.
+ */
+ u32 bps = target_clock * intel_crtc->bpp * 21 / 20;
+ lane = bps / (link_bw * 8) + 1;
+ }
+
+ intel_crtc->fdi_lanes = lane;
+
+ if (pixel_multiplier > 1)
+ link_bw *= pixel_multiplier;
+ ironlake_compute_m_n(intel_crtc->bpp, lane, target_clock, link_bw,
+ &m_n);
+
+ fp = clock.n << 16 | clock.m1 << 8 | clock.m2;
+ if (has_reduced_clock)
+ fp2 = reduced_clock.n << 16 | reduced_clock.m1 << 8 |
+ reduced_clock.m2;
+
+ /* Enable autotuning of the PLL clock (if permissible) */
+ factor = 21;
+ if (is_lvds) {
+ if ((intel_panel_use_ssc(dev_priv) &&
+ dev_priv->lvds_ssc_freq == 100) ||
+ (I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP)
+ factor = 25;
+ } else if (is_sdvo && is_tv)
+ factor = 20;
+
+ if (clock.m < factor * clock.n)
+ fp |= FP_CB_TUNE;
+
+ dpll = 0;
+
+ if (is_lvds)
+ dpll |= DPLLB_MODE_LVDS;
+ else
+ dpll |= DPLLB_MODE_DAC_SERIAL;
+ if (is_sdvo) {
+ int pixel_multiplier = intel_mode_get_pixel_multiplier(adjusted_mode);
+ if (pixel_multiplier > 1) {
+ dpll |= (pixel_multiplier - 1) << PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT;
+ }
+ dpll |= DPLL_DVO_HIGH_SPEED;
+ }
+ if (is_dp || intel_encoder_is_pch_edp(&has_edp_encoder->base))
+ dpll |= DPLL_DVO_HIGH_SPEED;
+
+ /* compute bitmask from p1 value */
+ dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
+ /* also FPA1 */
+ dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
+
+ switch (clock.p2) {
+ case 5:
+ dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_5;
+ break;
+ case 7:
+ dpll |= DPLLB_LVDS_P2_CLOCK_DIV_7;
+ break;
+ case 10:
+ dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_10;
+ break;
+ case 14:
+ dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14;
+ break;
+ }
+
+ if (is_sdvo && is_tv)
+ dpll |= PLL_REF_INPUT_TVCLKINBC;
+ else if (is_tv)
+ /* XXX: just matching BIOS for now */
+ /* dpll |= PLL_REF_INPUT_TVCLKINBC; */
+ dpll |= 3;
+ else if (is_lvds && intel_panel_use_ssc(dev_priv) && num_connectors < 2)
+ dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;
+ else
+ dpll |= PLL_REF_INPUT_DREFCLK;
+
+ /* setup pipeconf */
+ pipeconf = I915_READ(PIPECONF(pipe));
+
+ /* Set up the display plane register */
+ dspcntr = DISPPLANE_GAMMA_ENABLE;
+
+ DRM_DEBUG_KMS("Mode for pipe %d:\n", pipe);
+ drm_mode_debug_printmodeline(mode);
+
+ /* PCH eDP needs FDI, but CPU eDP does not */
+ if (!intel_crtc->no_pll) {
+ if (!has_edp_encoder ||
+ intel_encoder_is_pch_edp(&has_edp_encoder->base)) {
+ I915_WRITE(PCH_FP0(pipe), fp);
+ I915_WRITE(PCH_DPLL(pipe), dpll & ~DPLL_VCO_ENABLE);
+
+ POSTING_READ(PCH_DPLL(pipe));
+ DELAY(150);
+ }
+ } else {
+ if (dpll == (I915_READ(PCH_DPLL(0)) & 0x7fffffff) &&
+ fp == I915_READ(PCH_FP0(0))) {
+ intel_crtc->use_pll_a = true;
+ DRM_DEBUG_KMS("using pipe a dpll\n");
+ } else if (dpll == (I915_READ(PCH_DPLL(1)) & 0x7fffffff) &&
+ fp == I915_READ(PCH_FP0(1))) {
+ intel_crtc->use_pll_a = false;
+ DRM_DEBUG_KMS("using pipe b dpll\n");
+ } else {
+ DRM_DEBUG_KMS("no matching PLL configuration for pipe 2\n");
+ return -EINVAL;
+ }
+ }
+
+ /* The LVDS pin pair needs to be on before the DPLLs are enabled.
+ * This is an exception to the general rule that mode_set doesn't turn
+ * things on.
+ */
+ if (is_lvds) {
+ temp = I915_READ(PCH_LVDS);
+ temp |= LVDS_PORT_EN | LVDS_A0A2_CLKA_POWER_UP;
+ if (HAS_PCH_CPT(dev)) {
+ temp &= ~PORT_TRANS_SEL_MASK;
+ temp |= PORT_TRANS_SEL_CPT(pipe);
+ } else {
+ if (pipe == 1)
+ temp |= LVDS_PIPEB_SELECT;
+ else
+ temp &= ~LVDS_PIPEB_SELECT;
+ }
+
+ /* set the corresponsding LVDS_BORDER bit */
+ temp |= dev_priv->lvds_border_bits;
+ /* Set the B0-B3 data pairs corresponding to whether we're going to
+ * set the DPLLs for dual-channel mode or not.
+ */
+ if (clock.p2 == 7)
+ temp |= LVDS_B0B3_POWER_UP | LVDS_CLKB_POWER_UP;
+ else
+ temp &= ~(LVDS_B0B3_POWER_UP | LVDS_CLKB_POWER_UP);
+
+ /* It would be nice to set 24 vs 18-bit mode (LVDS_A3_POWER_UP)
+ * appropriately here, but we need to look more thoroughly into how
+ * panels behave in the two modes.
+ */
+ if (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC)
+ lvds_sync |= LVDS_HSYNC_POLARITY;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC)
+ lvds_sync |= LVDS_VSYNC_POLARITY;
+ if ((temp & (LVDS_HSYNC_POLARITY | LVDS_VSYNC_POLARITY))
+ != lvds_sync) {
+ char flags[2] = "-+";
+ DRM_INFO("Changing LVDS panel from "
+ "(%chsync, %cvsync) to (%chsync, %cvsync)\n",
+ flags[!(temp & LVDS_HSYNC_POLARITY)],
+ flags[!(temp & LVDS_VSYNC_POLARITY)],
+ flags[!(lvds_sync & LVDS_HSYNC_POLARITY)],
+ flags[!(lvds_sync & LVDS_VSYNC_POLARITY)]);
+ temp &= ~(LVDS_HSYNC_POLARITY | LVDS_VSYNC_POLARITY);
+ temp |= lvds_sync;
+ }
+ I915_WRITE(PCH_LVDS, temp);
+ }
+
+ pipeconf &= ~PIPECONF_DITHER_EN;
+ pipeconf &= ~PIPECONF_DITHER_TYPE_MASK;
+ if ((is_lvds && dev_priv->lvds_dither) || dither) {
+ pipeconf |= PIPECONF_DITHER_EN;
+ pipeconf |= PIPECONF_DITHER_TYPE_SP;
+ }
+ if (is_dp || intel_encoder_is_pch_edp(&has_edp_encoder->base)) {
+ intel_dp_set_m_n(crtc, mode, adjusted_mode);
+ } else {
+ /* For non-DP output, clear any trans DP clock recovery setting.*/
+ I915_WRITE(TRANSDATA_M1(pipe), 0);
+ I915_WRITE(TRANSDATA_N1(pipe), 0);
+ I915_WRITE(TRANSDPLINK_M1(pipe), 0);
+ I915_WRITE(TRANSDPLINK_N1(pipe), 0);
+ }
+
+ if (!intel_crtc->no_pll &&
+ (!has_edp_encoder ||
+ intel_encoder_is_pch_edp(&has_edp_encoder->base))) {
+ I915_WRITE(PCH_DPLL(pipe), dpll);
+
+ /* Wait for the clocks to stabilize. */
+ POSTING_READ(PCH_DPLL(pipe));
+ DELAY(150);
+
+ /* The pixel multiplier can only be updated once the
+ * DPLL is enabled and the clocks are stable.
+ *
+ * So write it again.
+ */
+ I915_WRITE(PCH_DPLL(pipe), dpll);
+ }
+
+ intel_crtc->lowfreq_avail = false;
+ if (!intel_crtc->no_pll) {
+ if (is_lvds && has_reduced_clock && i915_powersave) {
+ I915_WRITE(PCH_FP1(pipe), fp2);
+ intel_crtc->lowfreq_avail = true;
+ if (HAS_PIPE_CXSR(dev)) {
+ DRM_DEBUG_KMS("enabling CxSR downclocking\n");
+ pipeconf |= PIPECONF_CXSR_DOWNCLOCK;
+ }
+ } else {
+ I915_WRITE(PCH_FP1(pipe), fp);
+ if (HAS_PIPE_CXSR(dev)) {
+ DRM_DEBUG_KMS("disabling CxSR downclocking\n");
+ pipeconf &= ~PIPECONF_CXSR_DOWNCLOCK;
+ }
+ }
+ }
+
+ pipeconf &= ~PIPECONF_INTERLACE_MASK;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
+ pipeconf |= PIPECONF_INTERLACED_ILK;
+ /* the chip adds 2 halflines automatically */
+ adjusted_mode->crtc_vtotal -= 1;
+ adjusted_mode->crtc_vblank_end -= 1;
+ I915_WRITE(VSYNCSHIFT(pipe),
+ adjusted_mode->crtc_hsync_start
+ - adjusted_mode->crtc_htotal/2);
+ } else {
+ pipeconf |= PIPECONF_PROGRESSIVE;
+ I915_WRITE(VSYNCSHIFT(pipe), 0);
+ }
+
+ I915_WRITE(HTOTAL(pipe),
+ (adjusted_mode->crtc_hdisplay - 1) |
+ ((adjusted_mode->crtc_htotal - 1) << 16));
+ I915_WRITE(HBLANK(pipe),
+ (adjusted_mode->crtc_hblank_start - 1) |
+ ((adjusted_mode->crtc_hblank_end - 1) << 16));
+ I915_WRITE(HSYNC(pipe),
+ (adjusted_mode->crtc_hsync_start - 1) |
+ ((adjusted_mode->crtc_hsync_end - 1) << 16));
+
+ I915_WRITE(VTOTAL(pipe),
+ (adjusted_mode->crtc_vdisplay - 1) |
+ ((adjusted_mode->crtc_vtotal - 1) << 16));
+ I915_WRITE(VBLANK(pipe),
+ (adjusted_mode->crtc_vblank_start - 1) |
+ ((adjusted_mode->crtc_vblank_end - 1) << 16));
+ I915_WRITE(VSYNC(pipe),
+ (adjusted_mode->crtc_vsync_start - 1) |
+ ((adjusted_mode->crtc_vsync_end - 1) << 16));
+
+ /* pipesrc controls the size that is scaled from, which should
+ * always be the user's requested size.
+ */
+ I915_WRITE(PIPESRC(pipe),
+ ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1));
+
+ I915_WRITE(PIPE_DATA_M1(pipe), TU_SIZE(m_n.tu) | m_n.gmch_m);
+ I915_WRITE(PIPE_DATA_N1(pipe), m_n.gmch_n);
+ I915_WRITE(PIPE_LINK_M1(pipe), m_n.link_m);
+ I915_WRITE(PIPE_LINK_N1(pipe), m_n.link_n);
+
+ if (has_edp_encoder &&
+ !intel_encoder_is_pch_edp(&has_edp_encoder->base)) {
+ ironlake_set_pll_edp(crtc, adjusted_mode->clock);
+ }
+
+ I915_WRITE(PIPECONF(pipe), pipeconf);
+ POSTING_READ(PIPECONF(pipe));
+
+ intel_wait_for_vblank(dev, pipe);
+
+ I915_WRITE(DSPCNTR(plane), dspcntr);
+ POSTING_READ(DSPCNTR(plane));
+
+ ret = intel_pipe_set_base(crtc, x, y, old_fb);
+
+ intel_update_watermarks(dev);
+
+ return ret;
+}
+
+static int intel_crtc_mode_set(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode,
+ int x, int y,
+ struct drm_framebuffer *old_fb)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int ret;
+
+ drm_vblank_pre_modeset(dev, pipe);
+
+ ret = dev_priv->display.crtc_mode_set(crtc, mode, adjusted_mode,
+ x, y, old_fb);
+ drm_vblank_post_modeset(dev, pipe);
+
+ if (ret)
+ intel_crtc->dpms_mode = DRM_MODE_DPMS_OFF;
+ else
+ intel_crtc->dpms_mode = DRM_MODE_DPMS_ON;
+
+ return ret;
+}
+
+static bool intel_eld_uptodate(struct drm_connector *connector,
+ int reg_eldv, uint32_t bits_eldv,
+ int reg_elda, uint32_t bits_elda,
+ int reg_edid)
+{
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+ uint8_t *eld = connector->eld;
+ uint32_t i;
+
+ i = I915_READ(reg_eldv);
+ i &= bits_eldv;
+
+ if (!eld[0])
+ return !i;
+
+ if (!i)
+ return false;
+
+ i = I915_READ(reg_elda);
+ i &= ~bits_elda;
+ I915_WRITE(reg_elda, i);
+
+ for (i = 0; i < eld[2]; i++)
+ if (I915_READ(reg_edid) != *((uint32_t *)eld + i))
+ return false;
+
+ return true;
+}
+
+static void g4x_write_eld(struct drm_connector *connector,
+ struct drm_crtc *crtc)
+{
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+ uint8_t *eld = connector->eld;
+ uint32_t eldv;
+ uint32_t len;
+ uint32_t i;
+
+ i = I915_READ(G4X_AUD_VID_DID);
+
+ if (i == INTEL_AUDIO_DEVBLC || i == INTEL_AUDIO_DEVCL)
+ eldv = G4X_ELDV_DEVCL_DEVBLC;
+ else
+ eldv = G4X_ELDV_DEVCTG;
+
+ if (intel_eld_uptodate(connector,
+ G4X_AUD_CNTL_ST, eldv,
+ G4X_AUD_CNTL_ST, G4X_ELD_ADDR,
+ G4X_HDMIW_HDMIEDID))
+ return;
+
+ i = I915_READ(G4X_AUD_CNTL_ST);
+ i &= ~(eldv | G4X_ELD_ADDR);
+ len = (i >> 9) & 0x1f; /* ELD buffer size */
+ I915_WRITE(G4X_AUD_CNTL_ST, i);
+
+ if (!eld[0])
+ return;
+
+ if (eld[2] < (uint8_t)len)
+ len = eld[2];
+ DRM_DEBUG_KMS("ELD size %d\n", len);
+ for (i = 0; i < len; i++)
+ I915_WRITE(G4X_HDMIW_HDMIEDID, *((uint32_t *)eld + i));
+
+ i = I915_READ(G4X_AUD_CNTL_ST);
+ i |= eldv;
+ I915_WRITE(G4X_AUD_CNTL_ST, i);
+}
+
+static void ironlake_write_eld(struct drm_connector *connector,
+ struct drm_crtc *crtc)
+{
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+ uint8_t *eld = connector->eld;
+ uint32_t eldv;
+ uint32_t i;
+ int len;
+ int hdmiw_hdmiedid;
+ int aud_config;
+ int aud_cntl_st;
+ int aud_cntrl_st2;
+
+ if (HAS_PCH_IBX(connector->dev)) {
+ hdmiw_hdmiedid = IBX_HDMIW_HDMIEDID_A;
+ aud_config = IBX_AUD_CONFIG_A;
+ aud_cntl_st = IBX_AUD_CNTL_ST_A;
+ aud_cntrl_st2 = IBX_AUD_CNTL_ST2;
+ } else {
+ hdmiw_hdmiedid = CPT_HDMIW_HDMIEDID_A;
+ aud_config = CPT_AUD_CONFIG_A;
+ aud_cntl_st = CPT_AUD_CNTL_ST_A;
+ aud_cntrl_st2 = CPT_AUD_CNTRL_ST2;
+ }
+
+ i = to_intel_crtc(crtc)->pipe;
+ hdmiw_hdmiedid += i * 0x100;
+ aud_cntl_st += i * 0x100;
+ aud_config += i * 0x100;
+
+ DRM_DEBUG_KMS("ELD on pipe %c\n", pipe_name(i));
+
+ i = I915_READ(aud_cntl_st);
+ i = (i >> 29) & 0x3; /* DIP_Port_Select, 0x1 = PortB */
+ if (!i) {
+ DRM_DEBUG_KMS("Audio directed to unknown port\n");
+ /* operate blindly on all ports */
+ eldv = IBX_ELD_VALIDB;
+ eldv |= IBX_ELD_VALIDB << 4;
+ eldv |= IBX_ELD_VALIDB << 8;
+ } else {
+ DRM_DEBUG_KMS("ELD on port %c\n", 'A' + i);
+ eldv = IBX_ELD_VALIDB << ((i - 1) * 4);
+ }
+
+ if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)) {
+ DRM_DEBUG_DRIVER("ELD: DisplayPort detected\n");
+ eld[5] |= (1 << 2); /* Conn_Type, 0x1 = DisplayPort */
+ I915_WRITE(aud_config, AUD_CONFIG_N_VALUE_INDEX); /* 0x1 = DP */
+ } else
+ I915_WRITE(aud_config, 0);
+
+ if (intel_eld_uptodate(connector,
+ aud_cntrl_st2, eldv,
+ aud_cntl_st, IBX_ELD_ADDRESS,
+ hdmiw_hdmiedid))
+ return;
+
+ i = I915_READ(aud_cntrl_st2);
+ i &= ~eldv;
+ I915_WRITE(aud_cntrl_st2, i);
+
+ if (!eld[0])
+ return;
+
+ i = I915_READ(aud_cntl_st);
+ i &= ~IBX_ELD_ADDRESS;
+ I915_WRITE(aud_cntl_st, i);
+
+ /* 84 bytes of hw ELD buffer */
+ len = 21;
+ if (eld[2] < (uint8_t)len)
+ len = eld[2];
+ DRM_DEBUG_KMS("ELD size %d\n", len);
+ for (i = 0; i < len; i++)
+ I915_WRITE(hdmiw_hdmiedid, *((uint32_t *)eld + i));
+
+ i = I915_READ(aud_cntrl_st2);
+ i |= eldv;
+ I915_WRITE(aud_cntrl_st2, i);
+}
+
+void intel_write_eld(struct drm_encoder *encoder,
+ struct drm_display_mode *mode)
+{
+ struct drm_crtc *crtc = encoder->crtc;
+ struct drm_connector *connector;
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ connector = drm_select_eld(encoder, mode);
+ if (!connector)
+ return;
+
+ DRM_DEBUG_KMS("ELD on [CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
+ connector->base.id,
+ drm_get_connector_name(connector),
+ connector->encoder->base.id,
+ drm_get_encoder_name(connector->encoder));
+
+ connector->eld[6] = drm_av_sync_delay(connector, mode) / 2;
+
+ if (dev_priv->display.write_eld)
+ dev_priv->display.write_eld(connector, crtc);
+}
+
+/** Loads the palette/gamma unit for the CRTC with the prepared values */
+void intel_crtc_load_lut(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int palreg = PALETTE(intel_crtc->pipe);
+ int i;
+
+ /* The clocks have to be on to load the palette. */
+ if (!crtc->enabled || !intel_crtc->active)
+ return;
+
+ /* use legacy palette for Ironlake */
+ if (HAS_PCH_SPLIT(dev))
+ palreg = LGC_PALETTE(intel_crtc->pipe);
+
+ for (i = 0; i < 256; i++) {
+ I915_WRITE(palreg + 4 * i,
+ (intel_crtc->lut_r[i] << 16) |
+ (intel_crtc->lut_g[i] << 8) |
+ intel_crtc->lut_b[i]);
+ }
+}
+
+static void i845_update_cursor(struct drm_crtc *crtc, u32 base)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ bool visible = base != 0;
+ u32 cntl;
+
+ if (intel_crtc->cursor_visible == visible)
+ return;
+
+ cntl = I915_READ(_CURACNTR);
+ if (visible) {
+ /* On these chipsets we can only modify the base whilst
+ * the cursor is disabled.
+ */
+ I915_WRITE(_CURABASE, base);
+
+ cntl &= ~(CURSOR_FORMAT_MASK);
+ /* XXX width must be 64, stride 256 => 0x00 << 28 */
+ cntl |= CURSOR_ENABLE |
+ CURSOR_GAMMA_ENABLE |
+ CURSOR_FORMAT_ARGB;
+ } else
+ cntl &= ~(CURSOR_ENABLE | CURSOR_GAMMA_ENABLE);
+ I915_WRITE(_CURACNTR, cntl);
+
+ intel_crtc->cursor_visible = visible;
+}
+
+static void i9xx_update_cursor(struct drm_crtc *crtc, u32 base)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ bool visible = base != 0;
+
+ if (intel_crtc->cursor_visible != visible) {
+ uint32_t cntl = I915_READ(CURCNTR(pipe));
+ if (base) {
+ cntl &= ~(CURSOR_MODE | MCURSOR_PIPE_SELECT);
+ cntl |= CURSOR_MODE_64_ARGB_AX | MCURSOR_GAMMA_ENABLE;
+ cntl |= pipe << 28; /* Connect to correct pipe */
+ } else {
+ cntl &= ~(CURSOR_MODE | MCURSOR_GAMMA_ENABLE);
+ cntl |= CURSOR_MODE_DISABLE;
+ }
+ I915_WRITE(CURCNTR(pipe), cntl);
+
+ intel_crtc->cursor_visible = visible;
+ }
+ /* and commit changes on next vblank */
+ I915_WRITE(CURBASE(pipe), base);
+}
+
+static void ivb_update_cursor(struct drm_crtc *crtc, u32 base)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ bool visible = base != 0;
+
+ if (intel_crtc->cursor_visible != visible) {
+ uint32_t cntl = I915_READ(CURCNTR_IVB(pipe));
+ if (base) {
+ cntl &= ~CURSOR_MODE;
+ cntl |= CURSOR_MODE_64_ARGB_AX | MCURSOR_GAMMA_ENABLE;
+ } else {
+ cntl &= ~(CURSOR_MODE | MCURSOR_GAMMA_ENABLE);
+ cntl |= CURSOR_MODE_DISABLE;
+ }
+ I915_WRITE(CURCNTR_IVB(pipe), cntl);
+
+ intel_crtc->cursor_visible = visible;
+ }
+ /* and commit changes on next vblank */
+ I915_WRITE(CURBASE_IVB(pipe), base);
+}
+
+/* If no-part of the cursor is visible on the framebuffer, then the GPU may hang... */
+static void intel_crtc_update_cursor(struct drm_crtc *crtc,
+ bool on)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int x = intel_crtc->cursor_x;
+ int y = intel_crtc->cursor_y;
+ u32 base, pos;
+ bool visible;
+
+ pos = 0;
+
+ if (on && crtc->enabled && crtc->fb) {
+ base = intel_crtc->cursor_addr;
+ if (x > (int) crtc->fb->width)
+ base = 0;
+
+ if (y > (int) crtc->fb->height)
+ base = 0;
+ } else
+ base = 0;
+
+ if (x < 0) {
+ if (x + intel_crtc->cursor_width < 0)
+ base = 0;
+
+ pos |= CURSOR_POS_SIGN << CURSOR_X_SHIFT;
+ x = -x;
+ }
+ pos |= x << CURSOR_X_SHIFT;
+
+ if (y < 0) {
+ if (y + intel_crtc->cursor_height < 0)
+ base = 0;
+
+ pos |= CURSOR_POS_SIGN << CURSOR_Y_SHIFT;
+ y = -y;
+ }
+ pos |= y << CURSOR_Y_SHIFT;
+
+ visible = base != 0;
+ if (!visible && !intel_crtc->cursor_visible)
+ return;
+
+ if (IS_IVYBRIDGE(dev)) {
+ I915_WRITE(CURPOS_IVB(pipe), pos);
+ ivb_update_cursor(crtc, base);
+ } else {
+ I915_WRITE(CURPOS(pipe), pos);
+ if (IS_845G(dev) || IS_I865G(dev))
+ i845_update_cursor(crtc, base);
+ else
+ i9xx_update_cursor(crtc, base);
+ }
+
+ if (visible)
+ intel_mark_busy(dev, to_intel_framebuffer(crtc->fb)->obj);
+}
+
+static int intel_crtc_cursor_set(struct drm_crtc *crtc,
+ struct drm_file *file,
+ uint32_t handle,
+ uint32_t width, uint32_t height)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct drm_i915_gem_object *obj;
+ uint32_t addr;
+ int ret;
+
+ DRM_DEBUG_KMS("\n");
+
+ /* if we want to turn off the cursor ignore width and height */
+ if (!handle) {
+ DRM_DEBUG_KMS("cursor off\n");
+ addr = 0;
+ obj = NULL;
+ DRM_LOCK(dev);
+ goto finish;
+ }
+
+ /* Currently we only support 64x64 cursors */
+ if (width != 64 || height != 64) {
+ DRM_ERROR("we currently only support 64x64 cursors\n");
+ return -EINVAL;
+ }
+
+ obj = to_intel_bo(drm_gem_object_lookup(dev, file, handle));
+ if (&obj->base == NULL)
+ return -ENOENT;
+
+ if (obj->base.size < width * height * 4) {
+ DRM_ERROR("buffer is to small\n");
+ ret = -ENOMEM;
+ goto fail;
+ }
+
+ /* we only need to pin inside GTT if cursor is non-phy */
+ DRM_LOCK(dev);
+ if (!dev_priv->info->cursor_needs_physical) {
+ if (obj->tiling_mode) {
+ DRM_ERROR("cursor cannot be tiled\n");
+ ret = -EINVAL;
+ goto fail_locked;
+ }
+
+ ret = i915_gem_object_pin_to_display_plane(obj, 0, NULL);
+ if (ret) {
+ DRM_ERROR("failed to move cursor bo into the GTT\n");
+ goto fail_locked;
+ }
+
+ ret = i915_gem_object_put_fence(obj);
+ if (ret) {
+ DRM_ERROR("failed to release fence for cursor\n");
+ goto fail_unpin;
+ }
+
+ addr = obj->gtt_offset;
+ } else {
+ int align = IS_I830(dev) ? 16 * 1024 : 256;
+ ret = i915_gem_attach_phys_object(dev, obj,
+ (intel_crtc->pipe == 0) ? I915_GEM_PHYS_CURSOR_0 : I915_GEM_PHYS_CURSOR_1,
+ align);
+ if (ret) {
+ DRM_ERROR("failed to attach phys object\n");
+ goto fail_locked;
+ }
+ addr = obj->phys_obj->handle->busaddr;
+ }
+
+ if (IS_GEN2(dev))
+ I915_WRITE(CURSIZE, (height << 12) | width);
+
+ finish:
+ if (intel_crtc->cursor_bo) {
+ if (dev_priv->info->cursor_needs_physical) {
+ if (intel_crtc->cursor_bo != obj)
+ i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo);
+ } else
+ i915_gem_object_unpin(intel_crtc->cursor_bo);
+ drm_gem_object_unreference(&intel_crtc->cursor_bo->base);
+ }
+
+ DRM_UNLOCK(dev);
+
+ intel_crtc->cursor_addr = addr;
+ intel_crtc->cursor_bo = obj;
+ intel_crtc->cursor_width = width;
+ intel_crtc->cursor_height = height;
+
+ intel_crtc_update_cursor(crtc, true);
+
+ return 0;
+fail_unpin:
+ i915_gem_object_unpin(obj);
+fail_locked:
+ DRM_UNLOCK(dev);
+fail:
+ drm_gem_object_unreference_unlocked(&obj->base);
+ return ret;
+}
+
+static int intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
+{
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+ intel_crtc->cursor_x = x;
+ intel_crtc->cursor_y = y;
+
+ intel_crtc_update_cursor(crtc, true);
+
+ return 0;
+}
+
+/** Sets the color ramps on behalf of RandR */
+void intel_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
+ u16 blue, int regno)
+{
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+ intel_crtc->lut_r[regno] = red >> 8;
+ intel_crtc->lut_g[regno] = green >> 8;
+ intel_crtc->lut_b[regno] = blue >> 8;
+}
+
+void intel_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
+ u16 *blue, int regno)
+{
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+ *red = intel_crtc->lut_r[regno] << 8;
+ *green = intel_crtc->lut_g[regno] << 8;
+ *blue = intel_crtc->lut_b[regno] << 8;
+}
+
+static void intel_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+ u16 *blue, uint32_t start, uint32_t size)
+{
+ int end = (start + size > 256) ? 256 : start + size, i;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+ for (i = start; i < end; i++) {
+ intel_crtc->lut_r[i] = red[i] >> 8;
+ intel_crtc->lut_g[i] = green[i] >> 8;
+ intel_crtc->lut_b[i] = blue[i] >> 8;
+ }
+
+ intel_crtc_load_lut(crtc);
+}
+
+/**
+ * Get a pipe with a simple mode set on it for doing load-based monitor
+ * detection.
+ *
+ * It will be up to the load-detect code to adjust the pipe as appropriate for
+ * its requirements. The pipe will be connected to no other encoders.
+ *
+ * Currently this code will only succeed if there is a pipe with no encoders
+ * configured for it. In the future, it could choose to temporarily disable
+ * some outputs to free up a pipe for its use.
+ *
+ * \return crtc, or NULL if no pipes are available.
+ */
+
+/* VESA 640x480x72Hz mode to set on the pipe */
+static struct drm_display_mode load_detect_mode = {
+ DRM_MODE("640x480", DRM_MODE_TYPE_DEFAULT, 31500, 640, 664,
+ 704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
+};
+
+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 intel_framebuffer *intel_fb;
+ int ret;
+
+ intel_fb = malloc(sizeof(*intel_fb), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ ret = intel_framebuffer_init(dev, intel_fb, mode_cmd, obj);
+ if (ret) {
+ drm_gem_object_unreference_unlocked(&obj->base);
+ free(intel_fb, DRM_MEM_KMS);
+ return (ret);
+ }
+
+ *res = &intel_fb->base;
+ return (0);
+}
+
+static u32
+intel_framebuffer_pitch_for_width(int width, int bpp)
+{
+ u32 pitch = howmany(width * bpp, 8);
+ return roundup2(pitch, 64);
+}
+
+static u32
+intel_framebuffer_size_for_mode(struct drm_display_mode *mode, int bpp)
+{
+ u32 pitch = intel_framebuffer_pitch_for_width(mode->hdisplay, bpp);
+ return roundup2(pitch * mode->vdisplay, PAGE_SIZE);
+}
+
+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_i915_gem_object *obj;
+ struct drm_mode_fb_cmd2 mode_cmd;
+
+ obj = i915_gem_alloc_object(dev,
+ intel_framebuffer_size_for_mode(mode, bpp));
+ if (obj == NULL)
+ return (-ENOMEM);
+
+ mode_cmd.width = mode->hdisplay;
+ mode_cmd.height = mode->vdisplay;
+ mode_cmd.pitches[0] = intel_framebuffer_pitch_for_width(mode_cmd.width,
+ bpp);
+ mode_cmd.pixel_format = drm_mode_legacy_fb_format(bpp, depth);
+
+ 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_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj;
+ struct drm_framebuffer *fb;
+
+ if (dev_priv->fbdev == NULL) {
+ *res = NULL;
+ return (0);
+ }
+
+ obj = dev_priv->fbdev->ifb.obj;
+ if (obj == NULL) {
+ *res = NULL;
+ 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);
+ }
+
+ if (obj->base.size < mode->vdisplay * fb->pitches[0]) {
+ *res = NULL;
+ return (0);
+ }
+
+ *res = fb;
+ return (0);
+}
+
+bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
+ struct drm_connector *connector,
+ struct drm_display_mode *mode,
+ struct intel_load_detect_pipe *old)
+{
+ struct intel_crtc *intel_crtc;
+ struct drm_crtc *possible_crtc;
+ struct drm_encoder *encoder = &intel_encoder->base;
+ struct drm_crtc *crtc = NULL;
+ struct drm_device *dev = encoder->dev;
+ struct drm_framebuffer *old_fb;
+ int i = -1, r;
+
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
+ connector->base.id, drm_get_connector_name(connector),
+ encoder->base.id, drm_get_encoder_name(encoder));
+
+ /*
+ * Algorithm gets a little messy:
+ *
+ * - if the connector already has an assigned crtc, use it (but make
+ * sure it's on first)
+ *
+ * - try to find the first unused crtc that can drive this connector,
+ * and use that if we find one
+ */
+
+ /* See if we already have a CRTC for this connector */
+ if (encoder->crtc) {
+ crtc = encoder->crtc;
+
+ intel_crtc = to_intel_crtc(crtc);
+ old->dpms_mode = intel_crtc->dpms_mode;
+ old->load_detect_temp = false;
+
+ /* Make sure the crtc and connector are running */
+ if (intel_crtc->dpms_mode != DRM_MODE_DPMS_ON) {
+ struct drm_encoder_helper_funcs *encoder_funcs;
+ struct drm_crtc_helper_funcs *crtc_funcs;
+
+ crtc_funcs = crtc->helper_private;
+ crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
+
+ encoder_funcs = encoder->helper_private;
+ encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
+ }
+
+ return true;
+ }
+
+ /* Find an unused one (if possible) */
+ list_for_each_entry(possible_crtc, &dev->mode_config.crtc_list, head) {
+ i++;
+ if (!(encoder->possible_crtcs & (1 << i)))
+ continue;
+ if (!possible_crtc->enabled) {
+ crtc = possible_crtc;
+ break;
+ }
+ }
+
+ /*
+ * If we didn't find an unused CRTC, don't use any.
+ */
+ if (!crtc) {
+ DRM_DEBUG_KMS("no pipe available for load-detect\n");
+ return false;
+ }
+
+ encoder->crtc = crtc;
+ connector->encoder = encoder;
+
+ intel_crtc = to_intel_crtc(crtc);
+ old->dpms_mode = intel_crtc->dpms_mode;
+ old->load_detect_temp = true;
+ old->release_fb = NULL;
+
+ if (!mode)
+ mode = &load_detect_mode;
+
+ old_fb = crtc->fb;
+
+ /* We need a framebuffer large enough to accommodate all accesses
+ * that the plane may generate whilst we perform load detection.
+ * We can not rely on the fbcon either being present (we get called
+ * during its initialisation to detect all boot displays, or it may
+ * not even exist) or that it is large enough to satisfy the
+ * requested mode.
+ */
+ r = 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,
+ &crtc->fb);
+ old->release_fb = crtc->fb;
+ } else
+ DRM_DEBUG_KMS("reusing fbdev for load-detection framebuffer\n");
+ if (r != 0) {
+ DRM_DEBUG_KMS("failed to allocate framebuffer for load-detection\n");
+ crtc->fb = old_fb;
+ return false;
+ }
+
+ if (!drm_crtc_helper_set_mode(crtc, mode, 0, 0, old_fb)) {
+ DRM_DEBUG_KMS("failed to set mode on load-detect pipe\n");
+ if (old->release_fb)
+ old->release_fb->funcs->destroy(old->release_fb);
+ crtc->fb = old_fb;
+ return false;
+ }
+
+ /* let the connector get through one full cycle before testing */
+ intel_wait_for_vblank(dev, intel_crtc->pipe);
+
+ return true;
+}
+
+void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
+ struct drm_connector *connector,
+ struct intel_load_detect_pipe *old)
+{
+ struct drm_encoder *encoder = &intel_encoder->base;
+ struct drm_device *dev = encoder->dev;
+ struct drm_crtc *crtc = encoder->crtc;
+ struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
+ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
+ connector->base.id, drm_get_connector_name(connector),
+ encoder->base.id, drm_get_encoder_name(encoder));
+
+ if (old->load_detect_temp) {
+ connector->encoder = NULL;
+ drm_helper_disable_unused_functions(dev);
+
+ if (old->release_fb)
+ old->release_fb->funcs->destroy(old->release_fb);
+
+ return;
+ }
+
+ /* Switch crtc and encoder back off if necessary */
+ if (old->dpms_mode != DRM_MODE_DPMS_ON) {
+ encoder_funcs->dpms(encoder, old->dpms_mode);
+ crtc_funcs->dpms(crtc, old->dpms_mode);
+ }
+}
+
+/* Returns the clock of the currently programmed mode of the given pipe. */
+static int intel_crtc_clock_get(struct drm_device *dev, struct drm_crtc *crtc)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ u32 dpll = I915_READ(DPLL(pipe));
+ u32 fp;
+ intel_clock_t clock;
+
+ if ((dpll & DISPLAY_RATE_SELECT_FPA1) == 0)
+ fp = I915_READ(FP0(pipe));
+ else
+ fp = I915_READ(FP1(pipe));
+
+ clock.m1 = (fp & FP_M1_DIV_MASK) >> FP_M1_DIV_SHIFT;
+ if (IS_PINEVIEW(dev)) {
+ clock.n = ffs((fp & FP_N_PINEVIEW_DIV_MASK) >> FP_N_DIV_SHIFT) - 1;
+ clock.m2 = (fp & FP_M2_PINEVIEW_DIV_MASK) >> FP_M2_DIV_SHIFT;
+ } else {
+ clock.n = (fp & FP_N_DIV_MASK) >> FP_N_DIV_SHIFT;
+ clock.m2 = (fp & FP_M2_DIV_MASK) >> FP_M2_DIV_SHIFT;
+ }
+
+ if (!IS_GEN2(dev)) {
+ if (IS_PINEVIEW(dev))
+ clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW) >>
+ DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW);
+ else
+ clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK) >>
+ DPLL_FPA01_P1_POST_DIV_SHIFT);
+
+ switch (dpll & DPLL_MODE_MASK) {
+ case DPLLB_MODE_DAC_SERIAL:
+ clock.p2 = dpll & DPLL_DAC_SERIAL_P2_CLOCK_DIV_5 ?
+ 5 : 10;
+ break;
+ case DPLLB_MODE_LVDS:
+ clock.p2 = dpll & DPLLB_LVDS_P2_CLOCK_DIV_7 ?
+ 7 : 14;
+ break;
+ default:
+ DRM_DEBUG_KMS("Unknown DPLL mode %08x in programmed "
+ "mode\n", (int)(dpll & DPLL_MODE_MASK));
+ return 0;
+ }
+
+ /* XXX: Handle the 100Mhz refclk */
+ intel_clock(dev, 96000, &clock);
+ } else {
+ bool is_lvds = (pipe == 1) && (I915_READ(LVDS) & LVDS_PORT_EN);
+
+ if (is_lvds) {
+ clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS) >>
+ DPLL_FPA01_P1_POST_DIV_SHIFT);
+ clock.p2 = 14;
+
+ if ((dpll & PLL_REF_INPUT_MASK) ==
+ PLLB_REF_INPUT_SPREADSPECTRUMIN) {
+ /* XXX: might not be 66MHz */
+ intel_clock(dev, 66000, &clock);
+ } else
+ intel_clock(dev, 48000, &clock);
+ } else {
+ if (dpll & PLL_P1_DIVIDE_BY_TWO)
+ clock.p1 = 2;
+ else {
+ clock.p1 = ((dpll & DPLL_FPA01_P1_POST_DIV_MASK_I830) >>
+ DPLL_FPA01_P1_POST_DIV_SHIFT) + 2;
+ }
+ if (dpll & PLL_P2_DIVIDE_BY_4)
+ clock.p2 = 4;
+ else
+ clock.p2 = 2;
+
+ intel_clock(dev, 48000, &clock);
+ }
+ }
+
+ /* XXX: It would be nice to validate the clocks, but we can't reuse
+ * i830PllIsValid() because it relies on the xf86_config connector
+ * configuration being accurate, which it isn't necessarily.
+ */
+
+ return clock.dot;
+}
+
+/** Returns the currently programmed mode of the given pipe. */
+struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
+ struct drm_crtc *crtc)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ struct drm_display_mode *mode;
+ int htot = I915_READ(HTOTAL(pipe));
+ int hsync = I915_READ(HSYNC(pipe));
+ int vtot = I915_READ(VTOTAL(pipe));
+ int vsync = I915_READ(VSYNC(pipe));
+
+ mode = malloc(sizeof(*mode), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ mode->clock = intel_crtc_clock_get(dev, crtc);
+ mode->hdisplay = (htot & 0xffff) + 1;
+ mode->htotal = ((htot & 0xffff0000) >> 16) + 1;
+ mode->hsync_start = (hsync & 0xffff) + 1;
+ mode->hsync_end = ((hsync & 0xffff0000) >> 16) + 1;
+ mode->vdisplay = (vtot & 0xffff) + 1;
+ mode->vtotal = ((vtot & 0xffff0000) >> 16) + 1;
+ mode->vsync_start = (vsync & 0xffff) + 1;
+ mode->vsync_end = ((vsync & 0xffff0000) >> 16) + 1;
+
+ drm_mode_set_name(mode);
+ drm_mode_set_crtcinfo(mode, 0);
+
+ return mode;
+}
+
+#define GPU_IDLE_TIMEOUT (500 /* ms */ * 1000 / hz)
+
+/* When this timer fires, we've been idle for awhile */
+static void intel_gpu_idle_timer(void *arg)
+{
+ struct drm_device *dev = arg;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (!list_empty(&dev_priv->mm.active_list)) {
+ /* Still processing requests, so just re-arm the timer. */
+ callout_schedule(&dev_priv->idle_callout, GPU_IDLE_TIMEOUT);
+ return;
+ }
+
+ dev_priv->busy = false;
+ taskqueue_enqueue(dev_priv->tq, &dev_priv->idle_task);
+}
+
+#define CRTC_IDLE_TIMEOUT (1000 /* ms */ * 1000 / hz)
+
+static void intel_crtc_idle_timer(void *arg)
+{
+ struct intel_crtc *intel_crtc = arg;
+ struct drm_crtc *crtc = &intel_crtc->base;
+ drm_i915_private_t *dev_priv = crtc->dev->dev_private;
+ struct intel_framebuffer *intel_fb;
+
+ intel_fb = to_intel_framebuffer(crtc->fb);
+ if (intel_fb && intel_fb->obj->active) {
+ /* The framebuffer is still being accessed by the GPU. */
+ callout_schedule(&intel_crtc->idle_callout, CRTC_IDLE_TIMEOUT);
+ return;
+ }
+
+ intel_crtc->busy = false;
+ taskqueue_enqueue(dev_priv->tq, &dev_priv->idle_task);
+}
+
+static void intel_increase_pllclock(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int pipe = intel_crtc->pipe;
+ int dpll_reg = DPLL(pipe);
+ int dpll;
+
+ if (HAS_PCH_SPLIT(dev))
+ return;
+
+ if (!dev_priv->lvds_downclock_avail)
+ return;
+
+ dpll = I915_READ(dpll_reg);
+ if (!HAS_PIPE_CXSR(dev) && (dpll & DISPLAY_RATE_SELECT_FPA1)) {
+ DRM_DEBUG_DRIVER("upclocking LVDS\n");
+
+ assert_panel_unlocked(dev_priv, pipe);
+
+ dpll &= ~DISPLAY_RATE_SELECT_FPA1;
+ I915_WRITE(dpll_reg, dpll);
+ intel_wait_for_vblank(dev, pipe);
+
+ dpll = I915_READ(dpll_reg);
+ if (dpll & DISPLAY_RATE_SELECT_FPA1)
+ DRM_DEBUG_DRIVER("failed to upclock LVDS!\n");
+ }
+
+ /* Schedule downclock */
+ callout_reset(&intel_crtc->idle_callout, CRTC_IDLE_TIMEOUT,
+ intel_crtc_idle_timer, intel_crtc);
+}
+
+static void intel_decrease_pllclock(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+ if (HAS_PCH_SPLIT(dev))
+ return;
+
+ if (!dev_priv->lvds_downclock_avail)
+ return;
+
+ /*
+ * Since this is called by a timer, we should never get here in
+ * the manual case.
+ */
+ if (!HAS_PIPE_CXSR(dev) && intel_crtc->lowfreq_avail) {
+ int pipe = intel_crtc->pipe;
+ int dpll_reg = DPLL(pipe);
+ u32 dpll;
+
+ DRM_DEBUG_DRIVER("downclocking LVDS\n");
+
+ assert_panel_unlocked(dev_priv, pipe);
+
+ dpll = I915_READ(dpll_reg);
+ dpll |= DISPLAY_RATE_SELECT_FPA1;
+ I915_WRITE(dpll_reg, dpll);
+ intel_wait_for_vblank(dev, pipe);
+ dpll = I915_READ(dpll_reg);
+ if (!(dpll & DISPLAY_RATE_SELECT_FPA1))
+ DRM_DEBUG_DRIVER("failed to downclock LVDS!\n");
+ }
+}
+
+/**
+ * intel_idle_update - adjust clocks for idleness
+ * @work: work struct
+ *
+ * Either the GPU or display (or both) went idle. Check the busy status
+ * here and adjust the CRTC and GPU clocks as necessary.
+ */
+static void intel_idle_update(void *arg, int pending)
+{
+ drm_i915_private_t *dev_priv = arg;
+ struct drm_device *dev = dev_priv->dev;
+ struct drm_crtc *crtc;
+ struct intel_crtc *intel_crtc;
+
+ if (!i915_powersave)
+ return;
+
+ DRM_LOCK(dev);
+
+ i915_update_gfx_val(dev_priv);
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ /* Skip inactive CRTCs */
+ if (!crtc->fb)
+ continue;
+
+ intel_crtc = to_intel_crtc(crtc);
+ if (!intel_crtc->busy)
+ intel_decrease_pllclock(crtc);
+ }
+
+ DRM_UNLOCK(dev);
+}
+
+/**
+ * intel_mark_busy - mark the GPU and possibly the display busy
+ * @dev: drm device
+ * @obj: object we're operating on
+ *
+ * Callers can use this function to indicate that the GPU is busy processing
+ * commands. If @obj matches one of the CRTC objects (i.e. it's a scanout
+ * buffer), we'll also mark the display as busy, so we know to increase its
+ * clock frequency.
+ */
+void intel_mark_busy(struct drm_device *dev, struct drm_i915_gem_object *obj)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = NULL;
+ struct intel_framebuffer *intel_fb;
+ struct intel_crtc *intel_crtc;
+
+ if (!drm_core_check_feature(dev, DRIVER_MODESET))
+ return;
+
+ if (!dev_priv->busy)
+ dev_priv->busy = true;
+ else
+ callout_reset(&dev_priv->idle_callout, GPU_IDLE_TIMEOUT,
+ intel_gpu_idle_timer, dev);
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ if (!crtc->fb)
+ continue;
+
+ intel_crtc = to_intel_crtc(crtc);
+ intel_fb = to_intel_framebuffer(crtc->fb);
+ if (intel_fb->obj == obj) {
+ if (!intel_crtc->busy) {
+ /* Non-busy -> busy, upclock */
+ intel_increase_pllclock(crtc);
+ intel_crtc->busy = true;
+ } else {
+ /* Busy -> busy, put off timer */
+ callout_reset(&intel_crtc->idle_callout,
+ CRTC_IDLE_TIMEOUT, intel_crtc_idle_timer,
+ intel_crtc);
+ }
+ }
+ }
+}
+
+static void intel_crtc_destroy(struct drm_crtc *crtc)
+{
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_unpin_work *work;
+
+ mtx_lock(&dev->event_lock);
+ work = intel_crtc->unpin_work;
+ intel_crtc->unpin_work = NULL;
+ mtx_unlock(&dev->event_lock);
+
+ if (work) {
+ taskqueue_cancel(dev_priv->tq, &work->task, NULL);
+ taskqueue_drain(dev_priv->tq, &work->task);
+ free(work, DRM_MEM_KMS);
+ }
+
+ drm_crtc_cleanup(crtc);
+
+ free(intel_crtc, DRM_MEM_KMS);
+}
+
+static void intel_unpin_work_fn(void *arg, int pending)
+{
+ struct intel_unpin_work *work = arg;
+ struct drm_device *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);
+ DRM_UNLOCK(dev);
+ free(work, DRM_MEM_KMS);
+}
+
+static void do_intel_finish_page_flip(struct drm_device *dev,
+ struct drm_crtc *crtc)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_unpin_work *work;
+ struct drm_i915_gem_object *obj;
+ struct drm_pending_vblank_event *e;
+ struct timeval tnow, tvbl;
+
+ /* Ignore early vblank irqs */
+ if (intel_crtc == NULL)
+ return;
+
+ microtime(&tnow);
+
+ mtx_lock(&dev->event_lock);
+ work = intel_crtc->unpin_work;
+ if (work == NULL || !work->pending) {
+ mtx_unlock(&dev->event_lock);
+ return;
+ }
+
+ intel_crtc->unpin_work = NULL;
+
+ if (work->event) {
+ e = work->event;
+ e->event.sequence = drm_vblank_count_and_time(dev, intel_crtc->pipe, &tvbl);
+
+ /* Called before vblank count and timestamps have
+ * been updated for the vblank interval of flip
+ * completion? Need to increment vblank count and
+ * add one videorefresh duration to returned timestamp
+ * to account for this. We assume this happened if we
+ * get called over 0.9 frame durations after the last
+ * timestamped vblank.
+ *
+ * This calculation can not be used with vrefresh rates
+ * below 5Hz (10Hz to be on the safe side) without
+ * promoting to 64 integers.
+ */
+ if (10 * (timeval_to_ns(&tnow) - timeval_to_ns(&tvbl)) >
+ 9 * crtc->framedur_ns) {
+ e->event.sequence++;
+ tvbl = ns_to_timeval(timeval_to_ns(&tvbl) +
+ crtc->framedur_ns);
+ }
+
+ e->event.tv_sec = tvbl.tv_sec;
+ e->event.tv_usec = tvbl.tv_usec;
+
+ list_add_tail(&e->base.link,
+ &e->base.file_priv->event_list);
+ drm_event_wakeup(&e->base);
+ }
+
+ drm_vblank_put(dev, intel_crtc->pipe);
+
+ obj = work->old_fb_obj;
+
+ atomic_clear_int(&obj->pending_flip, 1 << intel_crtc->plane);
+ if (atomic_read(&obj->pending_flip) == 0)
+ wakeup(&obj->pending_flip);
+ mtx_unlock(&dev->event_lock);
+
+ taskqueue_enqueue(dev_priv->tq, &work->task);
+
+ CTR2(KTR_DRM, "i915_flip_complete %d %p", intel_crtc->plane,
+ work->pending_flip_obj);
+}
+
+void intel_finish_page_flip(struct drm_device *dev, int pipe)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe];
+
+ do_intel_finish_page_flip(dev, crtc);
+}
+
+void intel_finish_page_flip_plane(struct drm_device *dev, int plane)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = dev_priv->plane_to_crtc_mapping[plane];
+
+ do_intel_finish_page_flip(dev, crtc);
+}
+
+void intel_prepare_page_flip(struct drm_device *dev, int plane)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc =
+ to_intel_crtc(dev_priv->plane_to_crtc_mapping[plane]);
+
+ mtx_lock(&dev->event_lock);
+ if (intel_crtc->unpin_work) {
+ if ((++intel_crtc->unpin_work->pending) > 1)
+ DRM_ERROR("Prepared flip multiple times\n");
+ } else {
+ DRM_DEBUG("preparing flip with no unpin work?\n");
+ }
+ mtx_unlock(&dev->event_lock);
+}
+
+static int intel_gen2_queue_flip(struct drm_device *dev,
+ struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
+ struct drm_i915_gem_object *obj)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ unsigned long offset;
+ u32 flip_mask;
+ int ret;
+
+ ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
+ if (ret)
+ goto out;
+
+ /* Offset into the new buffer for cases of shared fbs between CRTCs */
+ offset = crtc->y * fb->pitches[0] + crtc->x * fb->bits_per_pixel/8;
+
+ ret = BEGIN_LP_RING(6);
+ if (ret)
+ goto out;
+
+ /* Can't queue multiple flips, so wait for the previous
+ * one to finish before executing the next.
+ */
+ if (intel_crtc->plane)
+ flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
+ else
+ flip_mask = MI_WAIT_FOR_PLANE_A_FLIP;
+ OUT_RING(MI_WAIT_FOR_EVENT | flip_mask);
+ OUT_RING(MI_NOOP);
+ OUT_RING(MI_DISPLAY_FLIP |
+ MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
+ OUT_RING(fb->pitches[0]);
+ OUT_RING(obj->gtt_offset + offset);
+ OUT_RING(0); /* aux display base address, unused */
+ ADVANCE_LP_RING();
+out:
+ return ret;
+}
+
+static int intel_gen3_queue_flip(struct drm_device *dev,
+ struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
+ struct drm_i915_gem_object *obj)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ unsigned long offset;
+ u32 flip_mask;
+ int ret;
+
+ ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
+ if (ret)
+ goto out;
+
+ /* Offset into the new buffer for cases of shared fbs between CRTCs */
+ offset = crtc->y * fb->pitches[0] + crtc->x * fb->bits_per_pixel/8;
+
+ ret = BEGIN_LP_RING(6);
+ if (ret)
+ goto out;
+
+ if (intel_crtc->plane)
+ flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
+ else
+ flip_mask = MI_WAIT_FOR_PLANE_A_FLIP;
+ OUT_RING(MI_WAIT_FOR_EVENT | flip_mask);
+ OUT_RING(MI_NOOP);
+ OUT_RING(MI_DISPLAY_FLIP_I915 |
+ MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
+ OUT_RING(fb->pitches[0]);
+ OUT_RING(obj->gtt_offset + offset);
+ OUT_RING(MI_NOOP);
+
+ ADVANCE_LP_RING();
+out:
+ return ret;
+}
+
+static int intel_gen4_queue_flip(struct drm_device *dev,
+ struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
+ struct drm_i915_gem_object *obj)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ uint32_t pf, pipesrc;
+ int ret;
+
+ ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
+ if (ret)
+ goto out;
+
+ ret = BEGIN_LP_RING(4);
+ if (ret)
+ goto out;
+
+ /* i965+ uses the linear or tiled offsets from the
+ * Display Registers (which do not change across a page-flip)
+ * so we need only reprogram the base address.
+ */
+ OUT_RING(MI_DISPLAY_FLIP |
+ MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
+ OUT_RING(fb->pitches[0]);
+ OUT_RING(obj->gtt_offset | obj->tiling_mode);
+
+ /* XXX Enabling the panel-fitter across page-flip is so far
+ * untested on non-native modes, so ignore it for now.
+ * pf = I915_READ(pipe == 0 ? PFA_CTL_1 : PFB_CTL_1) & PF_ENABLE;
+ */
+ pf = 0;
+ pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
+ OUT_RING(pf | pipesrc);
+ ADVANCE_LP_RING();
+out:
+ return ret;
+}
+
+static int intel_gen6_queue_flip(struct drm_device *dev,
+ struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
+ struct drm_i915_gem_object *obj)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ uint32_t pf, pipesrc;
+ int ret;
+
+ ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
+ if (ret)
+ goto out;
+
+ ret = BEGIN_LP_RING(4);
+ if (ret)
+ goto out;
+
+ OUT_RING(MI_DISPLAY_FLIP |
+ MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
+ OUT_RING(fb->pitches[0] | obj->tiling_mode);
+ OUT_RING(obj->gtt_offset);
+
+ /* Contrary to the suggestions in the documentation,
+ * "Enable Panel Fitter" does not seem to be required when page
+ * flipping with a non-native mode, and worse causes a normal
+ * modeset to fail.
+ * pf = I915_READ(PF_CTL(intel_crtc->pipe)) & PF_ENABLE;
+ */
+ pf = 0;
+ pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
+ OUT_RING(pf | pipesrc);
+ ADVANCE_LP_RING();
+out:
+ return ret;
+}
+
+/*
+ * On gen7 we currently use the blit ring because (in early silicon at least)
+ * the render ring doesn't give us interrpts for page flip completion, which
+ * means clients will hang after the first flip is queued. Fortunately the
+ * blit ring generates interrupts properly, so use it instead.
+ */
+static int intel_gen7_queue_flip(struct drm_device *dev,
+ struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
+ struct drm_i915_gem_object *obj)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_ring_buffer *ring = &dev_priv->rings[BCS];
+ int ret;
+
+ ret = intel_pin_and_fence_fb_obj(dev, obj, ring);
+ if (ret)
+ goto out;
+
+ ret = intel_ring_begin(ring, 4);
+ if (ret)
+ goto out;
+
+ intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | (intel_crtc->plane << 19));
+ intel_ring_emit(ring, (fb->pitches[0] | obj->tiling_mode));
+ intel_ring_emit(ring, (obj->gtt_offset));
+ intel_ring_emit(ring, (MI_NOOP));
+ intel_ring_advance(ring);
+out:
+ return ret;
+}
+
+static int intel_default_queue_flip(struct drm_device *dev,
+ struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
+ struct drm_i915_gem_object *obj)
+{
+ return -ENODEV;
+}
+
+static int intel_crtc_page_flip(struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
+ struct drm_pending_vblank_event *event)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_framebuffer *intel_fb;
+ struct drm_i915_gem_object *obj;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_unpin_work *work;
+ int ret;
+
+ work = malloc(sizeof *work, DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ work->event = event;
+ work->dev = crtc->dev;
+ intel_fb = to_intel_framebuffer(crtc->fb);
+ work->old_fb_obj = intel_fb->obj;
+ TASK_INIT(&work->task, 0, intel_unpin_work_fn, work);
+
+ ret = drm_vblank_get(dev, intel_crtc->pipe);
+ if (ret)
+ goto free_work;
+
+ /* We borrow the event spin lock for protecting unpin_work */
+ mtx_lock(&dev->event_lock);
+ if (intel_crtc->unpin_work) {
+ mtx_unlock(&dev->event_lock);
+ free(work, DRM_MEM_KMS);
+ drm_vblank_put(dev, intel_crtc->pipe);
+
+ DRM_DEBUG("flip queue: crtc already busy\n");
+ return -EBUSY;
+ }
+ intel_crtc->unpin_work = work;
+ mtx_unlock(&dev->event_lock);
+
+ intel_fb = to_intel_framebuffer(fb);
+ obj = intel_fb->obj;
+
+ DRM_LOCK(dev);
+
+ /* Reference the objects for the scheduled work. */
+ drm_gem_object_reference(&work->old_fb_obj->base);
+ drm_gem_object_reference(&obj->base);
+
+ crtc->fb = fb;
+
+ work->pending_flip_obj = obj;
+
+ work->enable_stall_check = true;
+
+ /* Block clients from rendering to the new back buffer until
+ * the flip occurs and the object is no longer visible.
+ */
+ atomic_set_int(&work->old_fb_obj->pending_flip, 1 << intel_crtc->plane);
+
+ ret = dev_priv->display.queue_flip(dev, crtc, fb, obj);
+ if (ret)
+ goto cleanup_pending;
+ intel_disable_fbc(dev);
+ DRM_UNLOCK(dev);
+
+ CTR2(KTR_DRM, "i915_flip_request %d %p", intel_crtc->plane, obj);
+
+ return 0;
+
+cleanup_pending:
+ atomic_sub(1 << intel_crtc->plane, &work->old_fb_obj->pending_flip);
+ drm_gem_object_unreference(&work->old_fb_obj->base);
+ drm_gem_object_unreference(&obj->base);
+ DRM_UNLOCK(dev);
+
+ mtx_lock(&dev->event_lock);
+ intel_crtc->unpin_work = NULL;
+ mtx_unlock(&dev->event_lock);
+
+ drm_vblank_put(dev, intel_crtc->pipe);
+free_work:
+ free(work, DRM_MEM_KMS);
+
+ return ret;
+}
+
+static void intel_sanitize_modesetting(struct drm_device *dev,
+ int pipe, int plane)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 reg, val;
+
+ /* Clear any frame start delays used for debugging left by the BIOS */
+ for_each_pipe(pipe) {
+ reg = PIPECONF(pipe);
+ I915_WRITE(reg, I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK);
+ }
+
+ if (HAS_PCH_SPLIT(dev))
+ return;
+
+ /* Who knows what state these registers were left in by the BIOS or
+ * grub?
+ *
+ * If we leave the registers in a conflicting state (e.g. with the
+ * display plane reading from the other pipe than the one we intend
+ * to use) then when we attempt to teardown the active mode, we will
+ * not disable the pipes and planes in the correct order -- leaving
+ * a plane reading from a disabled pipe and possibly leading to
+ * undefined behaviour.
+ */
+
+ reg = DSPCNTR(plane);
+ val = I915_READ(reg);
+
+ if ((val & DISPLAY_PLANE_ENABLE) == 0)
+ return;
+ if (!!(val & DISPPLANE_SEL_PIPE_MASK) == pipe)
+ return;
+
+ /* This display plane is active and attached to the other CPU pipe. */
+ pipe = !pipe;
+
+ /* Disable the plane and wait for it to stop reading from the pipe. */
+ intel_disable_plane(dev_priv, plane, pipe);
+ intel_disable_pipe(dev_priv, pipe);
+}
+
+static void intel_crtc_reset(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+ /* Reset flags back to the 'unknown' status so that they
+ * will be correctly set on the initial modeset.
+ */
+ intel_crtc->dpms_mode = -1;
+
+ /* We need to fix up any BIOS configuration that conflicts with
+ * our expectations.
+ */
+ intel_sanitize_modesetting(dev, intel_crtc->pipe, intel_crtc->plane);
+}
+
+static struct drm_crtc_helper_funcs intel_helper_funcs = {
+ .dpms = intel_crtc_dpms,
+ .mode_fixup = intel_crtc_mode_fixup,
+ .mode_set = intel_crtc_mode_set,
+ .mode_set_base = intel_pipe_set_base,
+ .mode_set_base_atomic = intel_pipe_set_base_atomic,
+ .load_lut = intel_crtc_load_lut,
+ .disable = intel_crtc_disable,
+};
+
+static const struct drm_crtc_funcs intel_crtc_funcs = {
+ .reset = intel_crtc_reset,
+ .cursor_set = intel_crtc_cursor_set,
+ .cursor_move = intel_crtc_cursor_move,
+ .gamma_set = intel_crtc_gamma_set,
+ .set_config = drm_crtc_helper_set_config,
+ .destroy = intel_crtc_destroy,
+ .page_flip = intel_crtc_page_flip,
+};
+
+static void intel_crtc_init(struct drm_device *dev, int pipe)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc;
+ int i;
+
+ intel_crtc = malloc(sizeof(struct intel_crtc) +
+ (INTELFB_CONN_LIMIT * sizeof(struct drm_connector *)),
+ DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ drm_crtc_init(dev, &intel_crtc->base, &intel_crtc_funcs);
+
+ drm_mode_crtc_set_gamma_size(&intel_crtc->base, 256);
+ for (i = 0; i < 256; i++) {
+ intel_crtc->lut_r[i] = i;
+ intel_crtc->lut_g[i] = i;
+ intel_crtc->lut_b[i] = i;
+ }
+
+ /* Swap pipes & planes for FBC on pre-965 */
+ intel_crtc->pipe = pipe;
+ intel_crtc->plane = pipe;
+ if (IS_MOBILE(dev) && IS_GEN3(dev)) {
+ DRM_DEBUG_KMS("swapping pipes & planes for FBC\n");
+ intel_crtc->plane = !pipe;
+ }
+
+ KASSERT(pipe < DRM_ARRAY_SIZE(dev_priv->plane_to_crtc_mapping) &&
+ dev_priv->plane_to_crtc_mapping[intel_crtc->plane] == NULL,
+ ("plane_to_crtc is already initialized"));
+ dev_priv->plane_to_crtc_mapping[intel_crtc->plane] = &intel_crtc->base;
+ dev_priv->pipe_to_crtc_mapping[intel_crtc->pipe] = &intel_crtc->base;
+
+ intel_crtc_reset(&intel_crtc->base);
+ intel_crtc->active = true; /* force the pipe off on setup_init_config */
+ intel_crtc->bpp = 24; /* default for pre-Ironlake */
+
+ if (HAS_PCH_SPLIT(dev)) {
+ if (pipe == 2 && IS_IVYBRIDGE(dev))
+ intel_crtc->no_pll = true;
+ intel_helper_funcs.prepare = ironlake_crtc_prepare;
+ intel_helper_funcs.commit = ironlake_crtc_commit;
+ } else {
+ intel_helper_funcs.prepare = i9xx_crtc_prepare;
+ intel_helper_funcs.commit = i9xx_crtc_commit;
+ }
+
+ drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs);
+
+ intel_crtc->busy = false;
+
+ callout_init(&intel_crtc->idle_callout, CALLOUT_MPSAFE);
+}
+
+int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
+ struct drm_file *file)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_get_pipe_from_crtc_id *pipe_from_crtc_id = data;
+ struct drm_mode_object *drmmode_obj;
+ struct intel_crtc *crtc;
+
+ if (!dev_priv) {
+ DRM_ERROR("called with no initialization\n");
+ return -EINVAL;
+ }
+
+ drmmode_obj = drm_mode_object_find(dev, pipe_from_crtc_id->crtc_id,
+ DRM_MODE_OBJECT_CRTC);
+
+ if (!drmmode_obj) {
+ DRM_ERROR("no such CRTC id\n");
+ return -EINVAL;
+ }
+
+ crtc = to_intel_crtc(obj_to_crtc(drmmode_obj));
+ pipe_from_crtc_id->pipe = crtc->pipe;
+
+ return 0;
+}
+
+static int intel_encoder_clones(struct drm_device *dev, int type_mask)
+{
+ struct intel_encoder *encoder;
+ int index_mask = 0;
+ int entry = 0;
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
+ if (type_mask & encoder->clone_mask)
+ index_mask |= (1 << entry);
+ entry++;
+ }
+
+ return index_mask;
+}
+
+static bool has_edp_a(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (!IS_MOBILE(dev))
+ return false;
+
+ if ((I915_READ(DP_A) & DP_DETECTED) == 0)
+ return false;
+
+ if (IS_GEN5(dev) &&
+ (I915_READ(ILK_DISPLAY_CHICKEN_FUSES) & ILK_eDP_A_DISABLE))
+ return false;
+
+ return true;
+}
+
+static void intel_setup_outputs(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_encoder *encoder;
+ bool dpd_is_edp = false;
+ bool has_lvds;
+
+ has_lvds = intel_lvds_init(dev);
+ if (!has_lvds && !HAS_PCH_SPLIT(dev)) {
+ /* disable the panel fitter on everything but LVDS */
+ I915_WRITE(PFIT_CONTROL, 0);
+ }
+
+ if (HAS_PCH_SPLIT(dev)) {
+ dpd_is_edp = intel_dpd_is_edp(dev);
+
+ if (has_edp_a(dev))
+ intel_dp_init(dev, DP_A);
+
+ if (dpd_is_edp && (I915_READ(PCH_DP_D) & DP_DETECTED))
+ intel_dp_init(dev, PCH_DP_D);
+ }
+
+ intel_crt_init(dev);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ int found;
+
+ DRM_DEBUG_KMS(
+"HDMIB %d PCH_DP_B %d HDMIC %d HDMID %d PCH_DP_C %d PCH_DP_D %d LVDS %d\n",
+ (I915_READ(HDMIB) & PORT_DETECTED) != 0,
+ (I915_READ(PCH_DP_B) & DP_DETECTED) != 0,
+ (I915_READ(HDMIC) & PORT_DETECTED) != 0,
+ (I915_READ(HDMID) & PORT_DETECTED) != 0,
+ (I915_READ(PCH_DP_C) & DP_DETECTED) != 0,
+ (I915_READ(PCH_DP_D) & DP_DETECTED) != 0,
+ (I915_READ(PCH_LVDS) & LVDS_DETECTED) != 0);
+
+ if (I915_READ(HDMIB) & PORT_DETECTED) {
+ /* PCH SDVOB multiplex with HDMIB */
+ found = intel_sdvo_init(dev, PCH_SDVOB);
+ if (!found)
+ intel_hdmi_init(dev, HDMIB);
+ if (!found && (I915_READ(PCH_DP_B) & DP_DETECTED))
+ intel_dp_init(dev, PCH_DP_B);
+ }
+
+ if (I915_READ(HDMIC) & PORT_DETECTED)
+ intel_hdmi_init(dev, HDMIC);
+
+ if (I915_READ(HDMID) & PORT_DETECTED)
+ intel_hdmi_init(dev, HDMID);
+
+ if (I915_READ(PCH_DP_C) & DP_DETECTED)
+ intel_dp_init(dev, PCH_DP_C);
+
+ if (!dpd_is_edp && (I915_READ(PCH_DP_D) & DP_DETECTED))
+ intel_dp_init(dev, PCH_DP_D);
+
+ } else if (SUPPORTS_DIGITAL_OUTPUTS(dev)) {
+ bool found = false;
+
+ if (I915_READ(SDVOB) & SDVO_DETECTED) {
+ DRM_DEBUG_KMS("probing SDVOB\n");
+ found = intel_sdvo_init(dev, SDVOB);
+ if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) {
+ DRM_DEBUG_KMS("probing HDMI on SDVOB\n");
+ intel_hdmi_init(dev, SDVOB);
+ }
+
+ if (!found && SUPPORTS_INTEGRATED_DP(dev)) {
+ DRM_DEBUG_KMS("probing DP_B\n");
+ intel_dp_init(dev, DP_B);
+ }
+ }
+
+ /* Before G4X SDVOC doesn't have its own detect register */
+
+ if (I915_READ(SDVOB) & SDVO_DETECTED) {
+ DRM_DEBUG_KMS("probing SDVOC\n");
+ found = intel_sdvo_init(dev, SDVOC);
+ }
+
+ if (!found && (I915_READ(SDVOC) & SDVO_DETECTED)) {
+
+ if (SUPPORTS_INTEGRATED_HDMI(dev)) {
+ DRM_DEBUG_KMS("probing HDMI on SDVOC\n");
+ intel_hdmi_init(dev, SDVOC);
+ }
+ if (SUPPORTS_INTEGRATED_DP(dev)) {
+ DRM_DEBUG_KMS("probing DP_C\n");
+ intel_dp_init(dev, DP_C);
+ }
+ }
+
+ if (SUPPORTS_INTEGRATED_DP(dev) &&
+ (I915_READ(DP_D) & DP_DETECTED)) {
+ DRM_DEBUG_KMS("probing DP_D\n");
+ intel_dp_init(dev, DP_D);
+ }
+ } else if (IS_GEN2(dev)) {
+#if 1
+ KIB_NOTYET();
+#else
+ intel_dvo_init(dev);
+#endif
+ }
+
+ if (SUPPORTS_TV(dev))
+ intel_tv_init(dev);
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
+ encoder->base.possible_crtcs = encoder->crtc_mask;
+ encoder->base.possible_clones =
+ intel_encoder_clones(dev, encoder->clone_mask);
+ }
+
+ /* disable all the possible outputs/crtcs before entering KMS mode */
+ drm_helper_disable_unused_functions(dev);
+
+ if (HAS_PCH_SPLIT(dev))
+ ironlake_init_pch_refclk(dev);
+}
+
+static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
+{
+ struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
+
+ drm_framebuffer_cleanup(fb);
+ drm_gem_object_unreference_unlocked(&intel_fb->obj->base);
+
+ free(intel_fb, DRM_MEM_KMS);
+}
+
+static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb,
+ struct drm_file *file,
+ unsigned int *handle)
+{
+ struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
+ struct drm_i915_gem_object *obj = intel_fb->obj;
+
+ return drm_gem_handle_create(file, &obj->base, handle);
+}
+
+static const struct drm_framebuffer_funcs intel_fb_funcs = {
+ .destroy = intel_user_framebuffer_destroy,
+ .create_handle = intel_user_framebuffer_create_handle,
+};
+
+int intel_framebuffer_init(struct drm_device *dev,
+ struct intel_framebuffer *intel_fb,
+ struct drm_mode_fb_cmd2 *mode_cmd,
+ struct drm_i915_gem_object *obj)
+{
+ int ret;
+
+ if (obj->tiling_mode == I915_TILING_Y)
+ return -EINVAL;
+
+ if (mode_cmd->pitches[0] & 63)
+ return -EINVAL;
+
+ switch (mode_cmd->pixel_format) {
+ case DRM_FORMAT_RGB332:
+ case DRM_FORMAT_RGB565:
+ case DRM_FORMAT_XRGB8888:
+ case DRM_FORMAT_XBGR8888:
+ case DRM_FORMAT_ARGB8888:
+ case DRM_FORMAT_XRGB2101010:
+ case DRM_FORMAT_ARGB2101010:
+ /* RGB formats are common across chipsets */
+ break;
+ case DRM_FORMAT_YUYV:
+ case DRM_FORMAT_UYVY:
+ case DRM_FORMAT_YVYU:
+ case DRM_FORMAT_VYUY:
+ break;
+ default:
+ DRM_DEBUG_KMS("unsupported pixel format %u\n",
+ mode_cmd->pixel_format);
+ return -EINVAL;
+ }
+
+ ret = drm_framebuffer_init(dev, &intel_fb->base, &intel_fb_funcs);
+ if (ret) {
+ DRM_ERROR("framebuffer init failed %d\n", ret);
+ return ret;
+ }
+
+ drm_helper_mode_fill_fb_struct(&intel_fb->base, mode_cmd);
+ intel_fb->obj = obj;
+ return 0;
+}
+
+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_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 (intel_framebuffer_create(dev, mode_cmd, obj, res));
+}
+
+static const struct drm_mode_config_funcs intel_mode_funcs = {
+ .fb_create = intel_user_framebuffer_create,
+ .output_poll_changed = intel_fb_output_poll_changed,
+};
+
+static struct drm_i915_gem_object *
+intel_alloc_context_page(struct drm_device *dev)
+{
+ struct drm_i915_gem_object *ctx;
+ int ret;
+
+ DRM_LOCK_ASSERT(dev);
+
+ ctx = i915_gem_alloc_object(dev, 4096);
+ if (!ctx) {
+ DRM_DEBUG("failed to alloc power context, RC6 disabled\n");
+ return NULL;
+ }
+
+ ret = i915_gem_object_pin(ctx, 4096, true);
+ if (ret) {
+ DRM_ERROR("failed to pin power context: %d\n", ret);
+ goto err_unref;
+ }
+
+ ret = i915_gem_object_set_to_gtt_domain(ctx, 1);
+ if (ret) {
+ DRM_ERROR("failed to set-domain on power context: %d\n", ret);
+ goto err_unpin;
+ }
+
+ return ctx;
+
+err_unpin:
+ i915_gem_object_unpin(ctx);
+err_unref:
+ drm_gem_object_unreference(&ctx->base);
+ DRM_UNLOCK(dev);
+ return NULL;
+}
+
+bool ironlake_set_drps(struct drm_device *dev, u8 val)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u16 rgvswctl;
+
+ rgvswctl = I915_READ16(MEMSWCTL);
+ if (rgvswctl & MEMCTL_CMD_STS) {
+ DRM_DEBUG("gpu busy, RCS change rejected\n");
+ return false; /* still busy with another command */
+ }
+
+ rgvswctl = (MEMCTL_CMD_CHFREQ << MEMCTL_CMD_SHIFT) |
+ (val << MEMCTL_FREQ_SHIFT) | MEMCTL_SFCAVM;
+ I915_WRITE16(MEMSWCTL, rgvswctl);
+ POSTING_READ16(MEMSWCTL);
+
+ rgvswctl |= MEMCTL_CMD_STS;
+ I915_WRITE16(MEMSWCTL, rgvswctl);
+
+ return true;
+}
+
+void ironlake_enable_drps(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 rgvmodectl = I915_READ(MEMMODECTL);
+ u8 fmax, fmin, fstart, vstart;
+
+ /* Enable temp reporting */
+ I915_WRITE16(PMMISC, I915_READ(PMMISC) | MCPPCE_EN);
+ I915_WRITE16(TSC1, I915_READ(TSC1) | TSE);
+
+ /* 100ms RC evaluation intervals */
+ I915_WRITE(RCUPEI, 100000);
+ I915_WRITE(RCDNEI, 100000);
+
+ /* Set max/min thresholds to 90ms and 80ms respectively */
+ I915_WRITE(RCBMAXAVG, 90000);
+ I915_WRITE(RCBMINAVG, 80000);
+
+ I915_WRITE(MEMIHYST, 1);
+
+ /* Set up min, max, and cur for interrupt handling */
+ fmax = (rgvmodectl & MEMMODE_FMAX_MASK) >> MEMMODE_FMAX_SHIFT;
+ fmin = (rgvmodectl & MEMMODE_FMIN_MASK);
+ fstart = (rgvmodectl & MEMMODE_FSTART_MASK) >>
+ MEMMODE_FSTART_SHIFT;
+
+ vstart = (I915_READ(PXVFREQ_BASE + (fstart * 4)) & PXVFREQ_PX_MASK) >>
+ PXVFREQ_PX_SHIFT;
+
+ dev_priv->fmax = fmax; /* IPS callback will increase this */
+ dev_priv->fstart = fstart;
+
+ dev_priv->max_delay = fstart;
+ dev_priv->min_delay = fmin;
+ dev_priv->cur_delay = fstart;
+
+ DRM_DEBUG("fmax: %d, fmin: %d, fstart: %d\n",
+ fmax, fmin, fstart);
+
+ I915_WRITE(MEMINTREN, MEMINT_CX_SUPR_EN | MEMINT_EVAL_CHG_EN);
+
+ /*
+ * Interrupts will be enabled in ironlake_irq_postinstall
+ */
+
+ I915_WRITE(VIDSTART, vstart);
+ POSTING_READ(VIDSTART);
+
+ rgvmodectl |= MEMMODE_SWMODE_EN;
+ I915_WRITE(MEMMODECTL, rgvmodectl);
+
+ if (_intel_wait_for(dev,
+ (I915_READ(MEMSWCTL) & MEMCTL_CMD_STS) == 0, 10,
+ 1, "915per"))
+ DRM_ERROR("stuck trying to change perf mode\n");
+ pause("915dsp", 1);
+
+ ironlake_set_drps(dev, fstart);
+
+ dev_priv->last_count1 = I915_READ(0x112e4) + I915_READ(0x112e8) +
+ I915_READ(0x112e0);
+ dev_priv->last_time1 = jiffies_to_msecs(jiffies);
+ dev_priv->last_count2 = I915_READ(0x112f4);
+ nanotime(&dev_priv->last_time2);
+}
+
+void ironlake_disable_drps(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u16 rgvswctl = I915_READ16(MEMSWCTL);
+
+ /* Ack interrupts, disable EFC interrupt */
+ I915_WRITE(MEMINTREN, I915_READ(MEMINTREN) & ~MEMINT_EVAL_CHG_EN);
+ I915_WRITE(MEMINTRSTS, MEMINT_EVAL_CHG);
+ I915_WRITE(DEIER, I915_READ(DEIER) & ~DE_PCU_EVENT);
+ I915_WRITE(DEIIR, DE_PCU_EVENT);
+ I915_WRITE(DEIMR, I915_READ(DEIMR) | DE_PCU_EVENT);
+
+ /* Go back to the starting frequency */
+ ironlake_set_drps(dev, dev_priv->fstart);
+ pause("915dsp", 1);
+ rgvswctl |= MEMCTL_CMD_STS;
+ I915_WRITE(MEMSWCTL, rgvswctl);
+ pause("915dsp", 1);
+
+}
+
+void gen6_set_rps(struct drm_device *dev, u8 val)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 swreq;
+
+ swreq = (val & 0x3ff) << 25;
+ I915_WRITE(GEN6_RPNSWREQ, swreq);
+}
+
+void gen6_disable_rps(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ I915_WRITE(GEN6_RPNSWREQ, 1 << 31);
+ I915_WRITE(GEN6_PMINTRMSK, 0xffffffff);
+ I915_WRITE(GEN6_PMIER, 0);
+ /* Complete PM interrupt masking here doesn't race with the rps work
+ * item again unmasking PM interrupts because that is using a different
+ * register (PMIMR) to mask PM interrupts. The only risk is in leaving
+ * stale bits in PMIIR and PMIMR which gen6_enable_rps will clean up. */
+
+ mtx_lock(&dev_priv->rps_lock);
+ dev_priv->pm_iir = 0;
+ mtx_unlock(&dev_priv->rps_lock);
+
+ I915_WRITE(GEN6_PMIIR, I915_READ(GEN6_PMIIR));
+}
+
+static unsigned long intel_pxfreq(u32 vidfreq)
+{
+ unsigned long freq;
+ int div = (vidfreq & 0x3f0000) >> 16;
+ int post = (vidfreq & 0x3000) >> 12;
+ int pre = (vidfreq & 0x7);
+
+ if (!pre)
+ return 0;
+
+ freq = ((div * 133333) / ((1<<post) * pre));
+
+ return freq;
+}
+
+void intel_init_emon(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 lcfuse;
+ u8 pxw[16];
+ int i;
+
+ /* Disable to program */
+ I915_WRITE(ECR, 0);
+ POSTING_READ(ECR);
+
+ /* Program energy weights for various events */
+ I915_WRITE(SDEW, 0x15040d00);
+ I915_WRITE(CSIEW0, 0x007f0000);
+ I915_WRITE(CSIEW1, 0x1e220004);
+ I915_WRITE(CSIEW2, 0x04000004);
+
+ for (i = 0; i < 5; i++)
+ I915_WRITE(PEW + (i * 4), 0);
+ for (i = 0; i < 3; i++)
+ I915_WRITE(DEW + (i * 4), 0);
+
+ /* Program P-state weights to account for frequency power adjustment */
+ for (i = 0; i < 16; i++) {
+ u32 pxvidfreq = I915_READ(PXVFREQ_BASE + (i * 4));
+ unsigned long freq = intel_pxfreq(pxvidfreq);
+ unsigned long vid = (pxvidfreq & PXVFREQ_PX_MASK) >>
+ PXVFREQ_PX_SHIFT;
+ unsigned long val;
+
+ val = vid * vid;
+ val *= (freq / 1000);
+ val *= 255;
+ val /= (127*127*900);
+ if (val > 0xff)
+ DRM_ERROR("bad pxval: %ld\n", val);
+ pxw[i] = val;
+ }
+ /* Render standby states get 0 weight */
+ pxw[14] = 0;
+ pxw[15] = 0;
+
+ for (i = 0; i < 4; i++) {
+ u32 val = (pxw[i*4] << 24) | (pxw[(i*4)+1] << 16) |
+ (pxw[(i*4)+2] << 8) | (pxw[(i*4)+3]);
+ I915_WRITE(PXW + (i * 4), val);
+ }
+
+ /* Adjust magic regs to magic values (more experimental results) */
+ I915_WRITE(OGW0, 0);
+ I915_WRITE(OGW1, 0);
+ I915_WRITE(EG0, 0x00007f00);
+ I915_WRITE(EG1, 0x0000000e);
+ I915_WRITE(EG2, 0x000e0000);
+ I915_WRITE(EG3, 0x68000300);
+ I915_WRITE(EG4, 0x42000000);
+ I915_WRITE(EG5, 0x00140031);
+ I915_WRITE(EG6, 0);
+ I915_WRITE(EG7, 0);
+
+ for (i = 0; i < 8; i++)
+ I915_WRITE(PXWL + (i * 4), 0);
+
+ /* Enable PMON + select events */
+ I915_WRITE(ECR, 0x80000019);
+
+ lcfuse = I915_READ(LCFUSE02);
+
+ dev_priv->corr = (lcfuse & LCFUSE_HIV_MASK);
+}
+
+static int intel_enable_rc6(struct drm_device *dev)
+{
+ /*
+ * Respect the kernel parameter if it is set
+ */
+ if (i915_enable_rc6 >= 0)
+ return i915_enable_rc6;
+
+ /*
+ * Disable RC6 on Ironlake
+ */
+ if (INTEL_INFO(dev)->gen == 5)
+ return 0;
+
+ /*
+ * Enable rc6 on Sandybridge if DMA remapping is disabled
+ */
+ if (INTEL_INFO(dev)->gen == 6) {
+ DRM_DEBUG_DRIVER(
+ "Sandybridge: intel_iommu_enabled %s -- RC6 %sabled\n",
+ intel_iommu_enabled ? "true" : "false",
+ !intel_iommu_enabled ? "en" : "dis");
+ return (intel_iommu_enabled ? 0 : INTEL_RC6_ENABLE);
+ }
+ DRM_DEBUG_DRIVER("RC6 and deep RC6 enabled\n");
+ return (INTEL_RC6_ENABLE | INTEL_RC6p_ENABLE);
+}
+
+void gen6_enable_rps(struct drm_i915_private *dev_priv)
+{
+ struct drm_device *dev = dev_priv->dev;
+ u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
+ u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
+ u32 pcu_mbox, rc6_mask = 0;
+ u32 gtfifodbg;
+ int cur_freq, min_freq, max_freq;
+ int rc6_mode;
+ int i;
+
+ /* Here begins a magic sequence of register writes to enable
+ * auto-downclocking.
+ *
+ * Perhaps there might be some value in exposing these to
+ * userspace...
+ */
+ I915_WRITE(GEN6_RC_STATE, 0);
+ DRM_LOCK(dev);
+
+ /* Clear the DBG now so we don't confuse earlier errors */
+ if ((gtfifodbg = I915_READ(GTFIFODBG))) {
+ DRM_ERROR("GT fifo had a previous error %x\n", gtfifodbg);
+ I915_WRITE(GTFIFODBG, gtfifodbg);
+ }
+
+ gen6_gt_force_wake_get(dev_priv);
+
+ /* disable the counters and set deterministic thresholds */
+ I915_WRITE(GEN6_RC_CONTROL, 0);
+
+ I915_WRITE(GEN6_RC1_WAKE_RATE_LIMIT, 1000 << 16);
+ I915_WRITE(GEN6_RC6_WAKE_RATE_LIMIT, 40 << 16 | 30);
+ I915_WRITE(GEN6_RC6pp_WAKE_RATE_LIMIT, 30);
+ I915_WRITE(GEN6_RC_EVALUATION_INTERVAL, 125000);
+ I915_WRITE(GEN6_RC_IDLE_HYSTERSIS, 25);
+
+ for (i = 0; i < I915_NUM_RINGS; i++)
+ I915_WRITE(RING_MAX_IDLE(dev_priv->rings[i].mmio_base), 10);
+
+ I915_WRITE(GEN6_RC_SLEEP, 0);
+ I915_WRITE(GEN6_RC1e_THRESHOLD, 1000);
+ I915_WRITE(GEN6_RC6_THRESHOLD, 50000);
+ I915_WRITE(GEN6_RC6p_THRESHOLD, 100000);
+ I915_WRITE(GEN6_RC6pp_THRESHOLD, 64000); /* unused */
+
+ rc6_mode = intel_enable_rc6(dev_priv->dev);
+ if (rc6_mode & INTEL_RC6_ENABLE)
+ rc6_mask |= GEN6_RC_CTL_RC6_ENABLE;
+
+ if (rc6_mode & INTEL_RC6p_ENABLE)
+ rc6_mask |= GEN6_RC_CTL_RC6p_ENABLE;
+
+ if (rc6_mode & INTEL_RC6pp_ENABLE)
+ rc6_mask |= GEN6_RC_CTL_RC6pp_ENABLE;
+
+ DRM_INFO("Enabling RC6 states: RC6 %s, RC6p %s, RC6pp %s\n",
+ (rc6_mode & INTEL_RC6_ENABLE) ? "on" : "off",
+ (rc6_mode & INTEL_RC6p_ENABLE) ? "on" : "off",
+ (rc6_mode & INTEL_RC6pp_ENABLE) ? "on" : "off");
+
+ I915_WRITE(GEN6_RC_CONTROL,
+ rc6_mask |
+ GEN6_RC_CTL_EI_MODE(1) |
+ GEN6_RC_CTL_HW_ENABLE);
+
+ I915_WRITE(GEN6_RPNSWREQ,
+ GEN6_FREQUENCY(10) |
+ GEN6_OFFSET(0) |
+ GEN6_AGGRESSIVE_TURBO);
+ I915_WRITE(GEN6_RC_VIDEO_FREQ,
+ GEN6_FREQUENCY(12));
+
+ I915_WRITE(GEN6_RP_DOWN_TIMEOUT, 1000000);
+ I915_WRITE(GEN6_RP_INTERRUPT_LIMITS,
+ 18 << 24 |
+ 6 << 16);
+ I915_WRITE(GEN6_RP_UP_THRESHOLD, 10000);
+ I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 1000000);
+ I915_WRITE(GEN6_RP_UP_EI, 100000);
+ I915_WRITE(GEN6_RP_DOWN_EI, 5000000);
+ I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10);
+ I915_WRITE(GEN6_RP_CONTROL,
+ GEN6_RP_MEDIA_TURBO |
+ GEN6_RP_MEDIA_HW_MODE |
+ GEN6_RP_MEDIA_IS_GFX |
+ GEN6_RP_ENABLE |
+ GEN6_RP_UP_BUSY_AVG |
+ GEN6_RP_DOWN_IDLE_CONT);
+
+ if (_intel_wait_for(dev,
+ (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0, 500,
+ 1, "915pr1"))
+ DRM_ERROR("timeout waiting for pcode mailbox to become idle\n");
+
+ I915_WRITE(GEN6_PCODE_DATA, 0);
+ I915_WRITE(GEN6_PCODE_MAILBOX,
+ GEN6_PCODE_READY |
+ GEN6_PCODE_WRITE_MIN_FREQ_TABLE);
+ if (_intel_wait_for(dev,
+ (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0, 500,
+ 1, "915pr2"))
+ DRM_ERROR("timeout waiting for pcode mailbox to finish\n");
+
+ min_freq = (rp_state_cap & 0xff0000) >> 16;
+ max_freq = rp_state_cap & 0xff;
+ cur_freq = (gt_perf_status & 0xff00) >> 8;
+
+ /* Check for overclock support */
+ if (_intel_wait_for(dev,
+ (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0, 500,
+ 1, "915pr3"))
+ DRM_ERROR("timeout waiting for pcode mailbox to become idle\n");
+ I915_WRITE(GEN6_PCODE_MAILBOX, GEN6_READ_OC_PARAMS);
+ pcu_mbox = I915_READ(GEN6_PCODE_DATA);
+ if (_intel_wait_for(dev,
+ (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0, 500,
+ 1, "915pr4"))
+ DRM_ERROR("timeout waiting for pcode mailbox to finish\n");
+ if (pcu_mbox & (1<<31)) { /* OC supported */
+ max_freq = pcu_mbox & 0xff;
+ DRM_DEBUG("overclocking supported, adjusting frequency max to %dMHz\n", pcu_mbox * 50);
+ }
+
+ /* In units of 100MHz */
+ dev_priv->max_delay = max_freq;
+ dev_priv->min_delay = min_freq;
+ dev_priv->cur_delay = cur_freq;
+
+ /* requires MSI enabled */
+ I915_WRITE(GEN6_PMIER,
+ GEN6_PM_MBOX_EVENT |
+ GEN6_PM_THERMAL_EVENT |
+ GEN6_PM_RP_DOWN_TIMEOUT |
+ GEN6_PM_RP_UP_THRESHOLD |
+ GEN6_PM_RP_DOWN_THRESHOLD |
+ GEN6_PM_RP_UP_EI_EXPIRED |
+ GEN6_PM_RP_DOWN_EI_EXPIRED);
+ mtx_lock(&dev_priv->rps_lock);
+ if (dev_priv->pm_iir != 0)
+ printf("pm_iir %x\n", dev_priv->pm_iir);
+ I915_WRITE(GEN6_PMIMR, 0);
+ mtx_unlock(&dev_priv->rps_lock);
+ /* enable all PM interrupts */
+ I915_WRITE(GEN6_PMINTRMSK, 0);
+
+ gen6_gt_force_wake_put(dev_priv);
+ DRM_UNLOCK(dev);
+}
+
+void gen6_update_ring_freq(struct drm_i915_private *dev_priv)
+{
+ struct drm_device *dev;
+ int min_freq = 15;
+ int gpu_freq, ia_freq, max_ia_freq;
+ int scaling_factor = 180;
+ uint64_t tsc_freq;
+
+ dev = dev_priv->dev;
+#if 0
+ max_ia_freq = cpufreq_quick_get_max(0);
+ /*
+ * Default to measured freq if none found, PCU will ensure we don't go
+ * over
+ */
+ if (!max_ia_freq)
+ max_ia_freq = tsc_freq;
+
+ /* Convert from Hz to MHz */
+ max_ia_freq /= 1000;
+#else
+ tsc_freq = atomic_load_acq_64(&tsc_freq);
+ max_ia_freq = tsc_freq / 1000 / 1000;
+#endif
+
+ DRM_LOCK(dev);
+
+ /*
+ * For each potential GPU frequency, load a ring frequency we'd like
+ * to use for memory access. We do this by specifying the IA frequency
+ * the PCU should use as a reference to determine the ring frequency.
+ */
+ for (gpu_freq = dev_priv->max_delay; gpu_freq >= dev_priv->min_delay;
+ gpu_freq--) {
+ int diff = dev_priv->max_delay - gpu_freq;
+ int d;
+
+ /*
+ * For GPU frequencies less than 750MHz, just use the lowest
+ * ring freq.
+ */
+ if (gpu_freq < min_freq)
+ ia_freq = 800;
+ else
+ ia_freq = max_ia_freq - ((diff * scaling_factor) / 2);
+ d = 100;
+ ia_freq = (ia_freq + d / 2) / d;
+
+ I915_WRITE(GEN6_PCODE_DATA,
+ (ia_freq << GEN6_PCODE_FREQ_IA_RATIO_SHIFT) |
+ gpu_freq);
+ I915_WRITE(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY |
+ GEN6_PCODE_WRITE_MIN_FREQ_TABLE);
+ if (_intel_wait_for(dev,
+ (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
+ 10, 1, "915frq")) {
+ DRM_ERROR("pcode write of freq table timed out\n");
+ continue;
+ }
+ }
+
+ DRM_UNLOCK(dev);
+}
+
+static void ironlake_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t dspclk_gate = VRHUNIT_CLOCK_GATE_DISABLE;
+
+ /* Required for FBC */
+ dspclk_gate |= DPFCUNIT_CLOCK_GATE_DISABLE |
+ DPFCRUNIT_CLOCK_GATE_DISABLE |
+ DPFDUNIT_CLOCK_GATE_DISABLE;
+ /* Required for CxSR */
+ dspclk_gate |= DPARBUNIT_CLOCK_GATE_DISABLE;
+
+ I915_WRITE(PCH_3DCGDIS0,
+ MARIUNIT_CLOCK_GATE_DISABLE |
+ SVSMUNIT_CLOCK_GATE_DISABLE);
+ I915_WRITE(PCH_3DCGDIS1,
+ VFMUNIT_CLOCK_GATE_DISABLE);
+
+ I915_WRITE(PCH_DSPCLK_GATE_D, dspclk_gate);
+
+ /*
+ * According to the spec the following bits should be set in
+ * order to enable memory self-refresh
+ * The bit 22/21 of 0x42004
+ * The bit 5 of 0x42020
+ * The bit 15 of 0x45000
+ */
+ I915_WRITE(ILK_DISPLAY_CHICKEN2,
+ (I915_READ(ILK_DISPLAY_CHICKEN2) |
+ ILK_DPARB_GATE | ILK_VSDPFD_FULL));
+ I915_WRITE(ILK_DSPCLK_GATE,
+ (I915_READ(ILK_DSPCLK_GATE) |
+ ILK_DPARB_CLK_GATE));
+ I915_WRITE(DISP_ARB_CTL,
+ (I915_READ(DISP_ARB_CTL) |
+ DISP_FBC_WM_DIS));
+ I915_WRITE(WM3_LP_ILK, 0);
+ I915_WRITE(WM2_LP_ILK, 0);
+ I915_WRITE(WM1_LP_ILK, 0);
+
+ /*
+ * Based on the document from hardware guys the following bits
+ * should be set unconditionally in order to enable FBC.
+ * The bit 22 of 0x42000
+ * The bit 22 of 0x42004
+ * The bit 7,8,9 of 0x42020.
+ */
+ if (IS_IRONLAKE_M(dev)) {
+ I915_WRITE(ILK_DISPLAY_CHICKEN1,
+ I915_READ(ILK_DISPLAY_CHICKEN1) |
+ ILK_FBCQ_DIS);
+ I915_WRITE(ILK_DISPLAY_CHICKEN2,
+ I915_READ(ILK_DISPLAY_CHICKEN2) |
+ ILK_DPARB_GATE);
+ I915_WRITE(ILK_DSPCLK_GATE,
+ I915_READ(ILK_DSPCLK_GATE) |
+ ILK_DPFC_DIS1 |
+ ILK_DPFC_DIS2 |
+ ILK_CLK_FBC);
+ }
+
+ I915_WRITE(ILK_DISPLAY_CHICKEN2,
+ I915_READ(ILK_DISPLAY_CHICKEN2) |
+ ILK_ELPIN_409_SELECT);
+ I915_WRITE(_3D_CHICKEN2,
+ _3D_CHICKEN2_WM_READ_PIPELINED << 16 |
+ _3D_CHICKEN2_WM_READ_PIPELINED);
+}
+
+static void gen6_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int pipe;
+ uint32_t dspclk_gate = VRHUNIT_CLOCK_GATE_DISABLE;
+
+ I915_WRITE(PCH_DSPCLK_GATE_D, dspclk_gate);
+
+ I915_WRITE(ILK_DISPLAY_CHICKEN2,
+ I915_READ(ILK_DISPLAY_CHICKEN2) |
+ ILK_ELPIN_409_SELECT);
+
+ I915_WRITE(WM3_LP_ILK, 0);
+ I915_WRITE(WM2_LP_ILK, 0);
+ I915_WRITE(WM1_LP_ILK, 0);
+
+ I915_WRITE(GEN6_UCGCTL1,
+ I915_READ(GEN6_UCGCTL1) |
+ GEN6_BLBUNIT_CLOCK_GATE_DISABLE);
+
+ /* According to the BSpec vol1g, bit 12 (RCPBUNIT) clock
+ * gating disable must be set. Failure to set it results in
+ * flickering pixels due to Z write ordering failures after
+ * some amount of runtime in the Mesa "fire" demo, and Unigine
+ * Sanctuary and Tropics, and apparently anything else with
+ * alpha test or pixel discard.
+ *
+ * According to the spec, bit 11 (RCCUNIT) must also be set,
+ * but we didn't debug actual testcases to find it out.
+ */
+ I915_WRITE(GEN6_UCGCTL2,
+ GEN6_RCPBUNIT_CLOCK_GATE_DISABLE |
+ GEN6_RCCUNIT_CLOCK_GATE_DISABLE);
+
+ /*
+ * According to the spec the following bits should be
+ * set in order to enable memory self-refresh and fbc:
+ * The bit21 and bit22 of 0x42000
+ * The bit21 and bit22 of 0x42004
+ * The bit5 and bit7 of 0x42020
+ * The bit14 of 0x70180
+ * The bit14 of 0x71180
+ */
+ I915_WRITE(ILK_DISPLAY_CHICKEN1,
+ I915_READ(ILK_DISPLAY_CHICKEN1) |
+ ILK_FBCQ_DIS | ILK_PABSTRETCH_DIS);
+ I915_WRITE(ILK_DISPLAY_CHICKEN2,
+ I915_READ(ILK_DISPLAY_CHICKEN2) |
+ ILK_DPARB_GATE | ILK_VSDPFD_FULL);
+ I915_WRITE(ILK_DSPCLK_GATE,
+ I915_READ(ILK_DSPCLK_GATE) |
+ ILK_DPARB_CLK_GATE |
+ ILK_DPFD_CLK_GATE);
+
+ for_each_pipe(pipe) {
+ I915_WRITE(DSPCNTR(pipe),
+ I915_READ(DSPCNTR(pipe)) |
+ DISPPLANE_TRICKLE_FEED_DISABLE);
+ intel_flush_display_plane(dev_priv, pipe);
+ }
+}
+
+static void ivybridge_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int pipe;
+ uint32_t dspclk_gate = VRHUNIT_CLOCK_GATE_DISABLE;
+
+ I915_WRITE(PCH_DSPCLK_GATE_D, dspclk_gate);
+
+ I915_WRITE(WM3_LP_ILK, 0);
+ I915_WRITE(WM2_LP_ILK, 0);
+ I915_WRITE(WM1_LP_ILK, 0);
+
+ /* According to the spec, bit 13 (RCZUNIT) must be set on IVB.
+ * This implements the WaDisableRCZUnitClockGating workaround.
+ */
+ I915_WRITE(GEN6_UCGCTL2, GEN6_RCZUNIT_CLOCK_GATE_DISABLE);
+
+ I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE);
+
+ I915_WRITE(IVB_CHICKEN3,
+ CHICKEN3_DGMG_REQ_OUT_FIX_DISABLE |
+ CHICKEN3_DGMG_DONE_FIX_DISABLE);
+
+ /* Apply the WaDisableRHWOOptimizationForRenderHang workaround. */
+ I915_WRITE(GEN7_COMMON_SLICE_CHICKEN1,
+ GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC);
+
+ /* WaApplyL3ControlAndL3ChickenMode requires those two on Ivy Bridge */
+ I915_WRITE(GEN7_L3CNTLREG1,
+ GEN7_WA_FOR_GEN7_L3_CONTROL);
+ I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER,
+ GEN7_WA_L3_CHICKEN_MODE);
+
+ /* This is required by WaCatErrorRejectionIssue */
+ I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
+ I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
+ GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
+
+ for_each_pipe(pipe) {
+ I915_WRITE(DSPCNTR(pipe),
+ I915_READ(DSPCNTR(pipe)) |
+ DISPPLANE_TRICKLE_FEED_DISABLE);
+ intel_flush_display_plane(dev_priv, pipe);
+ }
+}
+
+static void g4x_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t dspclk_gate;
+
+ I915_WRITE(RENCLK_GATE_D1, 0);
+ I915_WRITE(RENCLK_GATE_D2, VF_UNIT_CLOCK_GATE_DISABLE |
+ GS_UNIT_CLOCK_GATE_DISABLE |
+ CL_UNIT_CLOCK_GATE_DISABLE);
+ I915_WRITE(RAMCLK_GATE_D, 0);
+ dspclk_gate = VRHUNIT_CLOCK_GATE_DISABLE |
+ OVRUNIT_CLOCK_GATE_DISABLE |
+ OVCUNIT_CLOCK_GATE_DISABLE;
+ if (IS_GM45(dev))
+ dspclk_gate |= DSSUNIT_CLOCK_GATE_DISABLE;
+ I915_WRITE(DSPCLK_GATE_D, dspclk_gate);
+}
+
+static void crestline_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ I915_WRITE(RENCLK_GATE_D1, I965_RCC_CLOCK_GATE_DISABLE);
+ I915_WRITE(RENCLK_GATE_D2, 0);
+ I915_WRITE(DSPCLK_GATE_D, 0);
+ I915_WRITE(RAMCLK_GATE_D, 0);
+ I915_WRITE16(DEUC, 0);
+}
+
+static void broadwater_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ I915_WRITE(RENCLK_GATE_D1, I965_RCZ_CLOCK_GATE_DISABLE |
+ I965_RCC_CLOCK_GATE_DISABLE |
+ I965_RCPB_CLOCK_GATE_DISABLE |
+ I965_ISC_CLOCK_GATE_DISABLE |
+ I965_FBC_CLOCK_GATE_DISABLE);
+ I915_WRITE(RENCLK_GATE_D2, 0);
+}
+
+static void gen3_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 dstate = I915_READ(D_STATE);
+
+ dstate |= DSTATE_PLL_D3_OFF | DSTATE_GFX_CLOCK_GATING |
+ DSTATE_DOT_CLOCK_GATING;
+ I915_WRITE(D_STATE, dstate);
+}
+
+static void i85x_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ I915_WRITE(RENCLK_GATE_D1, SV_CLOCK_GATE_DISABLE);
+}
+
+static void i830_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ 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);
+}
+
+static void ironlake_teardown_rc6(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (dev_priv->renderctx) {
+ i915_gem_object_unpin(dev_priv->renderctx);
+ drm_gem_object_unreference(&dev_priv->renderctx->base);
+ dev_priv->renderctx = NULL;
+ }
+
+ if (dev_priv->pwrctx) {
+ i915_gem_object_unpin(dev_priv->pwrctx);
+ drm_gem_object_unreference(&dev_priv->pwrctx->base);
+ dev_priv->pwrctx = NULL;
+ }
+}
+
+static void ironlake_disable_rc6(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (I915_READ(PWRCTXA)) {
+ /* Wake the GPU, prevent RC6, then restore RSTDBYCTL */
+ I915_WRITE(RSTDBYCTL, I915_READ(RSTDBYCTL) | RCX_SW_EXIT);
+ (void)_intel_wait_for(dev,
+ ((I915_READ(RSTDBYCTL) & RSX_STATUS_MASK) == RSX_STATUS_ON),
+ 50, 1, "915pro");
+
+ I915_WRITE(PWRCTXA, 0);
+ POSTING_READ(PWRCTXA);
+
+ I915_WRITE(RSTDBYCTL, I915_READ(RSTDBYCTL) & ~RCX_SW_EXIT);
+ POSTING_READ(RSTDBYCTL);
+ }
+
+ ironlake_teardown_rc6(dev);
+}
+
+static int ironlake_setup_rc6(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (dev_priv->renderctx == NULL)
+ dev_priv->renderctx = intel_alloc_context_page(dev);
+ if (!dev_priv->renderctx)
+ return -ENOMEM;
+
+ if (dev_priv->pwrctx == NULL)
+ dev_priv->pwrctx = intel_alloc_context_page(dev);
+ if (!dev_priv->pwrctx) {
+ ironlake_teardown_rc6(dev);
+ return -ENOMEM;
+ }
+
+ return 0;
+}
+
+void ironlake_enable_rc6(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int ret;
+
+ /* rc6 disabled by default due to repeated reports of hanging during
+ * boot and resume.
+ */
+ if (!intel_enable_rc6(dev))
+ return;
+
+ DRM_LOCK(dev);
+ ret = ironlake_setup_rc6(dev);
+ if (ret) {
+ DRM_UNLOCK(dev);
+ return;
+ }
+
+ /*
+ * GPU can automatically power down the render unit if given a page
+ * to save state.
+ */
+ ret = BEGIN_LP_RING(6);
+ if (ret) {
+ ironlake_teardown_rc6(dev);
+ DRM_UNLOCK(dev);
+ return;
+ }
+
+ OUT_RING(MI_SUSPEND_FLUSH | MI_SUSPEND_FLUSH_EN);
+ OUT_RING(MI_SET_CONTEXT);
+ OUT_RING(dev_priv->renderctx->gtt_offset |
+ MI_MM_SPACE_GTT |
+ MI_SAVE_EXT_STATE_EN |
+ MI_RESTORE_EXT_STATE_EN |
+ MI_RESTORE_INHIBIT);
+ OUT_RING(MI_SUSPEND_FLUSH);
+ OUT_RING(MI_NOOP);
+ OUT_RING(MI_FLUSH);
+ ADVANCE_LP_RING();
+
+ /*
+ * Wait for the command parser to advance past MI_SET_CONTEXT. The HW
+ * does an implicit flush, combined with MI_FLUSH above, it should be
+ * safe to assume that renderctx is valid
+ */
+ ret = intel_wait_ring_idle(LP_RING(dev_priv));
+ if (ret) {
+ DRM_ERROR("failed to enable ironlake power power savings\n");
+ ironlake_teardown_rc6(dev);
+ DRM_UNLOCK(dev);
+ return;
+ }
+
+ I915_WRITE(PWRCTXA, dev_priv->pwrctx->gtt_offset | PWRCTX_EN);
+ I915_WRITE(RSTDBYCTL, I915_READ(RSTDBYCTL) & ~RCX_SW_EXIT);
+ DRM_UNLOCK(dev);
+}
+
+void intel_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ dev_priv->display.init_clock_gating(dev);
+
+ if (dev_priv->display.init_pch_clock_gating)
+ dev_priv->display.init_pch_clock_gating(dev);
+}
+
+/* Set up chip specific display functions */
+static void intel_init_display(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ /* We always want a DPMS function */
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->display.dpms = ironlake_crtc_dpms;
+ dev_priv->display.crtc_mode_set = ironlake_crtc_mode_set;
+ dev_priv->display.update_plane = ironlake_update_plane;
+ } else {
+ dev_priv->display.dpms = i9xx_crtc_dpms;
+ dev_priv->display.crtc_mode_set = i9xx_crtc_mode_set;
+ dev_priv->display.update_plane = i9xx_update_plane;
+ }
+
+ if (I915_HAS_FBC(dev)) {
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->display.fbc_enabled = ironlake_fbc_enabled;
+ dev_priv->display.enable_fbc = ironlake_enable_fbc;
+ dev_priv->display.disable_fbc = ironlake_disable_fbc;
+ } else if (IS_GM45(dev)) {
+ dev_priv->display.fbc_enabled = g4x_fbc_enabled;
+ dev_priv->display.enable_fbc = g4x_enable_fbc;
+ dev_priv->display.disable_fbc = g4x_disable_fbc;
+ } else if (IS_CRESTLINE(dev)) {
+ dev_priv->display.fbc_enabled = i8xx_fbc_enabled;
+ dev_priv->display.enable_fbc = i8xx_enable_fbc;
+ dev_priv->display.disable_fbc = i8xx_disable_fbc;
+ }
+ /* 855GM needs testing */
+ }
+
+ /* Returns the core display clock speed */
+ if (IS_I945G(dev) || (IS_G33(dev) && !IS_PINEVIEW_M(dev)))
+ dev_priv->display.get_display_clock_speed =
+ i945_get_display_clock_speed;
+ else if (IS_I915G(dev))
+ dev_priv->display.get_display_clock_speed =
+ i915_get_display_clock_speed;
+ else if (IS_I945GM(dev) || IS_845G(dev) || IS_PINEVIEW_M(dev))
+ dev_priv->display.get_display_clock_speed =
+ i9xx_misc_get_display_clock_speed;
+ else if (IS_I915GM(dev))
+ dev_priv->display.get_display_clock_speed =
+ i915gm_get_display_clock_speed;
+ else if (IS_I865G(dev))
+ dev_priv->display.get_display_clock_speed =
+ i865_get_display_clock_speed;
+ else if (IS_I85X(dev))
+ dev_priv->display.get_display_clock_speed =
+ i855_get_display_clock_speed;
+ else /* 852, 830 */
+ dev_priv->display.get_display_clock_speed =
+ i830_get_display_clock_speed;
+
+ /* For FIFO watermark updates */
+ if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->display.force_wake_get = __gen6_gt_force_wake_get;
+ dev_priv->display.force_wake_put = __gen6_gt_force_wake_put;
+
+ /* IVB configs may use multi-threaded forcewake */
+ if (IS_IVYBRIDGE(dev)) {
+ u32 ecobus;
+
+ /* A small trick here - if the bios hasn't configured MT forcewake,
+ * and if the device is in RC6, then force_wake_mt_get will not wake
+ * the device and the ECOBUS read will return zero. Which will be
+ * (correctly) interpreted by the test below as MT forcewake being
+ * disabled.
+ */
+ DRM_LOCK(dev);
+ __gen6_gt_force_wake_mt_get(dev_priv);
+ ecobus = I915_READ_NOTRACE(ECOBUS);
+ __gen6_gt_force_wake_mt_put(dev_priv);
+ DRM_UNLOCK(dev);
+
+ if (ecobus & FORCEWAKE_MT_ENABLE) {
+ DRM_DEBUG_KMS("Using MT version of forcewake\n");
+ dev_priv->display.force_wake_get =
+ __gen6_gt_force_wake_mt_get;
+ dev_priv->display.force_wake_put =
+ __gen6_gt_force_wake_mt_put;
+ }
+ }
+
+ if (HAS_PCH_IBX(dev))
+ dev_priv->display.init_pch_clock_gating = ibx_init_clock_gating;
+ else if (HAS_PCH_CPT(dev))
+ dev_priv->display.init_pch_clock_gating = cpt_init_clock_gating;
+
+ if (IS_GEN5(dev)) {
+ if (I915_READ(MLTR_ILK) & ILK_SRLT_MASK)
+ dev_priv->display.update_wm = ironlake_update_wm;
+ else {
+ DRM_DEBUG_KMS("Failed to get proper latency. "
+ "Disable CxSR\n");
+ dev_priv->display.update_wm = NULL;
+ }
+ dev_priv->display.fdi_link_train = ironlake_fdi_link_train;
+ dev_priv->display.init_clock_gating = ironlake_init_clock_gating;
+ dev_priv->display.write_eld = ironlake_write_eld;
+ } else if (IS_GEN6(dev)) {
+ if (SNB_READ_WM0_LATENCY()) {
+ dev_priv->display.update_wm = sandybridge_update_wm;
+ dev_priv->display.update_sprite_wm = sandybridge_update_sprite_wm;
+ } else {
+ DRM_DEBUG_KMS("Failed to read display plane latency. "
+ "Disable CxSR\n");
+ dev_priv->display.update_wm = NULL;
+ }
+ dev_priv->display.fdi_link_train = gen6_fdi_link_train;
+ dev_priv->display.init_clock_gating = gen6_init_clock_gating;
+ dev_priv->display.write_eld = ironlake_write_eld;
+ } else if (IS_IVYBRIDGE(dev)) {
+ /* FIXME: detect B0+ stepping and use auto training */
+ dev_priv->display.fdi_link_train = ivb_manual_fdi_link_train;
+ if (SNB_READ_WM0_LATENCY()) {
+ dev_priv->display.update_wm = sandybridge_update_wm;
+ dev_priv->display.update_sprite_wm = sandybridge_update_sprite_wm;
+ } else {
+ DRM_DEBUG_KMS("Failed to read display plane latency. "
+ "Disable CxSR\n");
+ dev_priv->display.update_wm = NULL;
+ }
+ dev_priv->display.init_clock_gating = ivybridge_init_clock_gating;
+ dev_priv->display.write_eld = ironlake_write_eld;
+ } else
+ dev_priv->display.update_wm = NULL;
+ } else if (IS_PINEVIEW(dev)) {
+ if (!intel_get_cxsr_latency(IS_PINEVIEW_G(dev),
+ dev_priv->is_ddr3,
+ dev_priv->fsb_freq,
+ dev_priv->mem_freq)) {
+ DRM_INFO("failed to find known CxSR latency "
+ "(found ddr%s fsb freq %d, mem freq %d), "
+ "disabling CxSR\n",
+ (dev_priv->is_ddr3 == 1) ? "3" : "2",
+ dev_priv->fsb_freq, dev_priv->mem_freq);
+ /* Disable CxSR and never update its watermark again */
+ pineview_disable_cxsr(dev);
+ dev_priv->display.update_wm = NULL;
+ } else
+ dev_priv->display.update_wm = pineview_update_wm;
+ dev_priv->display.init_clock_gating = gen3_init_clock_gating;
+ } else if (IS_G4X(dev)) {
+ dev_priv->display.write_eld = g4x_write_eld;
+ dev_priv->display.update_wm = g4x_update_wm;
+ dev_priv->display.init_clock_gating = g4x_init_clock_gating;
+ } else if (IS_GEN4(dev)) {
+ dev_priv->display.update_wm = i965_update_wm;
+ if (IS_CRESTLINE(dev))
+ dev_priv->display.init_clock_gating = crestline_init_clock_gating;
+ else if (IS_BROADWATER(dev))
+ dev_priv->display.init_clock_gating = broadwater_init_clock_gating;
+ } else if (IS_GEN3(dev)) {
+ dev_priv->display.update_wm = i9xx_update_wm;
+ dev_priv->display.get_fifo_size = i9xx_get_fifo_size;
+ dev_priv->display.init_clock_gating = gen3_init_clock_gating;
+ } else if (IS_I865G(dev)) {
+ dev_priv->display.update_wm = i830_update_wm;
+ dev_priv->display.init_clock_gating = i85x_init_clock_gating;
+ dev_priv->display.get_fifo_size = i830_get_fifo_size;
+ } else if (IS_I85X(dev)) {
+ dev_priv->display.update_wm = i9xx_update_wm;
+ dev_priv->display.get_fifo_size = i85x_get_fifo_size;
+ dev_priv->display.init_clock_gating = i85x_init_clock_gating;
+ } else {
+ dev_priv->display.update_wm = i830_update_wm;
+ dev_priv->display.init_clock_gating = i830_init_clock_gating;
+ if (IS_845G(dev))
+ dev_priv->display.get_fifo_size = i845_get_fifo_size;
+ else
+ dev_priv->display.get_fifo_size = i830_get_fifo_size;
+ }
+
+ /* Default just returns -ENODEV to indicate unsupported */
+ dev_priv->display.queue_flip = intel_default_queue_flip;
+
+ switch (INTEL_INFO(dev)->gen) {
+ case 2:
+ dev_priv->display.queue_flip = intel_gen2_queue_flip;
+ break;
+
+ case 3:
+ dev_priv->display.queue_flip = intel_gen3_queue_flip;
+ break;
+
+ case 4:
+ case 5:
+ dev_priv->display.queue_flip = intel_gen4_queue_flip;
+ break;
+
+ case 6:
+ dev_priv->display.queue_flip = intel_gen6_queue_flip;
+ break;
+ case 7:
+ dev_priv->display.queue_flip = intel_gen7_queue_flip;
+ break;
+ }
+}
+
+/*
+ * Some BIOSes insist on assuming the GPU's pipe A is enabled at suspend,
+ * resume, or other times. This quirk makes sure that's the case for
+ * affected systems.
+ */
+static void quirk_pipea_force(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ dev_priv->quirks |= QUIRK_PIPEA_FORCE;
+ DRM_DEBUG("applying pipe a force quirk\n");
+}
+
+/*
+ * Some machines (Lenovo U160) do not work with SSC on LVDS for some reason
+ */
+static void quirk_ssc_force_disable(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ dev_priv->quirks |= QUIRK_LVDS_SSC_DISABLE;
+}
+
+struct intel_quirk {
+ int device;
+ int subsystem_vendor;
+ int subsystem_device;
+ void (*hook)(struct drm_device *dev);
+};
+
+#define PCI_ANY_ID (~0u)
+
+struct intel_quirk intel_quirks[] = {
+ /* HP Mini needs pipe A force quirk (LP: #322104) */
+ { 0x27ae, 0x103c, 0x361a, quirk_pipea_force },
+
+ /* Thinkpad R31 needs pipe A force quirk */
+ { 0x3577, 0x1014, 0x0505, quirk_pipea_force },
+ /* Toshiba Protege R-205, S-209 needs pipe A force quirk */
+ { 0x2592, 0x1179, 0x0001, quirk_pipea_force },
+
+ /* ThinkPad X30 needs pipe A force quirk (LP: #304614) */
+ { 0x3577, 0x1014, 0x0513, quirk_pipea_force },
+ /* ThinkPad X40 needs pipe A force quirk */
+
+ /* ThinkPad T60 needs pipe A force quirk (bug #16494) */
+ { 0x2782, 0x17aa, 0x201a, quirk_pipea_force },
+
+ /* 855 & before need to leave pipe A & dpll A up */
+ { 0x3582, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force },
+ { 0x2562, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force },
+
+ /* Lenovo U160 cannot use SSC on LVDS */
+ { 0x0046, 0x17aa, 0x3920, quirk_ssc_force_disable },
+
+ /* Sony Vaio Y cannot use SSC on LVDS */
+ { 0x0046, 0x104d, 0x9076, quirk_ssc_force_disable },
+};
+
+static void intel_init_quirks(struct drm_device *dev)
+{
+ struct intel_quirk *q;
+ device_t d;
+ int i;
+
+ d = dev->device;
+ for (i = 0; i < DRM_ARRAY_SIZE(intel_quirks); i++) {
+ q = &intel_quirks[i];
+ if (pci_get_device(d) == q->device &&
+ (pci_get_subvendor(d) == q->subsystem_vendor ||
+ q->subsystem_vendor == PCI_ANY_ID) &&
+ (pci_get_subdevice(d) == q->subsystem_device ||
+ q->subsystem_device == PCI_ANY_ID))
+ q->hook(dev);
+ }
+}
+
+/* Disable the VGA plane that we never use */
+static void i915_disable_vga(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u8 sr1;
+ u32 vga_reg;
+
+ if (HAS_PCH_SPLIT(dev))
+ vga_reg = CPU_VGACNTRL;
+ else
+ vga_reg = VGACNTRL;
+
+#if 0
+ vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
+#endif
+ outb(VGA_SR_INDEX, 1);
+ sr1 = inb(VGA_SR_DATA);
+ outb(VGA_SR_DATA, sr1 | 1 << 5);
+#if 0
+ vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
+#endif
+ DELAY(300);
+
+ I915_WRITE(vga_reg, VGA_DISP_DISABLE);
+ POSTING_READ(vga_reg);
+}
+
+void intel_modeset_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i, ret;
+
+ drm_mode_config_init(dev);
+
+ dev->mode_config.min_width = 0;
+ dev->mode_config.min_height = 0;
+
+ dev->mode_config.preferred_depth = 24;
+ dev->mode_config.prefer_shadow = 1;
+
+ dev->mode_config.funcs = __DECONST(struct drm_mode_config_funcs *,
+ &intel_mode_funcs);
+
+ intel_init_quirks(dev);
+
+ intel_init_display(dev);
+
+ if (IS_GEN2(dev)) {
+ dev->mode_config.max_width = 2048;
+ dev->mode_config.max_height = 2048;
+ } else if (IS_GEN3(dev)) {
+ dev->mode_config.max_width = 4096;
+ dev->mode_config.max_height = 4096;
+ } else {
+ dev->mode_config.max_width = 8192;
+ dev->mode_config.max_height = 8192;
+ }
+ dev->mode_config.fb_base = dev->agp->base;
+
+ DRM_DEBUG_KMS("%d display pipe%s available.\n",
+ dev_priv->num_pipe, dev_priv->num_pipe > 1 ? "s" : "");
+
+ for (i = 0; i < dev_priv->num_pipe; i++) {
+ intel_crtc_init(dev, i);
+ ret = intel_plane_init(dev, i);
+ if (ret)
+ DRM_DEBUG_KMS("plane %d init failed: %d\n", i, ret);
+ }
+
+ /* Just disable it once at startup */
+ i915_disable_vga(dev);
+ intel_setup_outputs(dev);
+
+ intel_init_clock_gating(dev);
+
+ if (IS_IRONLAKE_M(dev)) {
+ ironlake_enable_drps(dev);
+ intel_init_emon(dev);
+ }
+
+ if (IS_GEN6(dev)) {
+ gen6_enable_rps(dev_priv);
+ gen6_update_ring_freq(dev_priv);
+ }
+
+ TASK_INIT(&dev_priv->idle_task, 0, intel_idle_update, dev_priv);
+ callout_init(&dev_priv->idle_callout, CALLOUT_MPSAFE);
+}
+
+void intel_modeset_gem_init(struct drm_device *dev)
+{
+ if (IS_IRONLAKE_M(dev))
+ ironlake_enable_rc6(dev);
+
+ intel_setup_overlay(dev);
+}
+
+void intel_modeset_cleanup(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc;
+ struct intel_crtc *intel_crtc;
+
+ drm_kms_helper_poll_fini(dev);
+ DRM_LOCK(dev);
+
+#if 0
+ intel_unregister_dsm_handler();
+#endif
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ /* Skip inactive CRTCs */
+ if (!crtc->fb)
+ continue;
+
+ intel_crtc = to_intel_crtc(crtc);
+ intel_increase_pllclock(crtc);
+ }
+
+ intel_disable_fbc(dev);
+
+ if (IS_IRONLAKE_M(dev))
+ ironlake_disable_drps(dev);
+ if (IS_GEN6(dev))
+ gen6_disable_rps(dev);
+
+ if (IS_IRONLAKE_M(dev))
+ ironlake_disable_rc6(dev);
+
+ /* Disable the irq before mode object teardown, for the irq might
+ * enqueue unpin/hotplug work. */
+ drm_irq_uninstall(dev);
+ DRM_UNLOCK(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))
+ taskqueue_drain(dev_priv->tq, &dev_priv->rps_task);
+
+ /* Shut off idle work before the crtcs get freed. */
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ intel_crtc = to_intel_crtc(crtc);
+ callout_drain(&intel_crtc->idle_callout);
+ }
+ callout_drain(&dev_priv->idle_callout);
+ if (taskqueue_cancel(dev_priv->tq, &dev_priv->idle_task, NULL))
+ taskqueue_drain(dev_priv->tq, &dev_priv->idle_task);
+
+ drm_mode_config_cleanup(dev);
+}
+
+/*
+ * Return which encoder is currently attached for connector.
+ */
+struct drm_encoder *intel_best_encoder(struct drm_connector *connector)
+{
+ return &intel_attached_encoder(connector)->base;
+}
+
+void intel_connector_attach_encoder(struct intel_connector *connector,
+ struct intel_encoder *encoder)
+{
+ connector->encoder = encoder;
+ drm_mode_connector_attach_encoder(&connector->base,
+ &encoder->base);
+}
+
+/*
+ * set vga decode state - true == enable VGA decode
+ */
+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)
+ gmch_ctrl &= ~INTEL_GMCH_VGA_DISABLE;
+ else
+ gmch_ctrl |= INTEL_GMCH_VGA_DISABLE;
+ pci_write_config(bridge_dev, INTEL_GMCH_CTRL, gmch_ctrl, 2);
+ return (0);
+}
+
+struct intel_display_error_state {
+ struct intel_cursor_error_state {
+ u32 control;
+ u32 position;
+ u32 base;
+ u32 size;
+ } cursor[2];
+
+ struct intel_pipe_error_state {
+ u32 conf;
+ u32 source;
+
+ u32 htotal;
+ u32 hblank;
+ u32 hsync;
+ u32 vtotal;
+ u32 vblank;
+ u32 vsync;
+ } pipe[2];
+
+ struct intel_plane_error_state {
+ u32 control;
+ u32 stride;
+ u32 size;
+ u32 pos;
+ u32 addr;
+ u32 surface;
+ u32 tile_offset;
+ } plane[2];
+};
+
+struct intel_display_error_state *
+intel_display_capture_error_state(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_display_error_state *error;
+ int i;
+
+ error = malloc(sizeof(*error), DRM_MEM_KMS, M_NOWAIT);
+ if (error == NULL)
+ return NULL;
+
+ for (i = 0; i < 2; i++) {
+ error->cursor[i].control = I915_READ(CURCNTR(i));
+ error->cursor[i].position = I915_READ(CURPOS(i));
+ error->cursor[i].base = I915_READ(CURBASE(i));
+
+ error->plane[i].control = I915_READ(DSPCNTR(i));
+ error->plane[i].stride = I915_READ(DSPSTRIDE(i));
+ error->plane[i].size = I915_READ(DSPSIZE(i));
+ error->plane[i].pos = I915_READ(DSPPOS(i));
+ error->plane[i].addr = I915_READ(DSPADDR(i));
+ if (INTEL_INFO(dev)->gen >= 4) {
+ error->plane[i].surface = I915_READ(DSPSURF(i));
+ error->plane[i].tile_offset = I915_READ(DSPTILEOFF(i));
+ }
+
+ error->pipe[i].conf = I915_READ(PIPECONF(i));
+ error->pipe[i].source = I915_READ(PIPESRC(i));
+ error->pipe[i].htotal = I915_READ(HTOTAL(i));
+ error->pipe[i].hblank = I915_READ(HBLANK(i));
+ error->pipe[i].hsync = I915_READ(HSYNC(i));
+ error->pipe[i].vtotal = I915_READ(VTOTAL(i));
+ error->pipe[i].vblank = I915_READ(VBLANK(i));
+ error->pipe[i].vsync = I915_READ(VSYNC(i));
+ }
+
+ return error;
+}
+
+void
+intel_display_print_error_state(struct sbuf *m,
+ struct drm_device *dev,
+ struct intel_display_error_state *error)
+{
+ int i;
+
+ for (i = 0; i < 2; i++) {
+ sbuf_printf(m, "Pipe [%d]:\n", i);
+ sbuf_printf(m, " CONF: %08x\n", error->pipe[i].conf);
+ sbuf_printf(m, " SRC: %08x\n", error->pipe[i].source);
+ sbuf_printf(m, " HTOTAL: %08x\n", error->pipe[i].htotal);
+ sbuf_printf(m, " HBLANK: %08x\n", error->pipe[i].hblank);
+ sbuf_printf(m, " HSYNC: %08x\n", error->pipe[i].hsync);
+ sbuf_printf(m, " VTOTAL: %08x\n", error->pipe[i].vtotal);
+ sbuf_printf(m, " VBLANK: %08x\n", error->pipe[i].vblank);
+ sbuf_printf(m, " VSYNC: %08x\n", error->pipe[i].vsync);
+
+ sbuf_printf(m, "Plane [%d]:\n", i);
+ sbuf_printf(m, " CNTR: %08x\n", error->plane[i].control);
+ sbuf_printf(m, " STRIDE: %08x\n", error->plane[i].stride);
+ sbuf_printf(m, " SIZE: %08x\n", error->plane[i].size);
+ sbuf_printf(m, " POS: %08x\n", error->plane[i].pos);
+ sbuf_printf(m, " ADDR: %08x\n", error->plane[i].addr);
+ if (INTEL_INFO(dev)->gen >= 4) {
+ sbuf_printf(m, " SURF: %08x\n", error->plane[i].surface);
+ sbuf_printf(m, " TILEOFF: %08x\n", error->plane[i].tile_offset);
+ }
+
+ sbuf_printf(m, "Cursor [%d]:\n", i);
+ sbuf_printf(m, " CNTR: %08x\n", error->cursor[i].control);
+ sbuf_printf(m, " POS: %08x\n", error->cursor[i].position);
+ sbuf_printf(m, " BASE: %08x\n", error->cursor[i].base);
+ }
+}
diff --git a/sys/dev/drm2/i915/intel_dp.c b/sys/dev/drm2/i915/intel_dp.c
new file mode 100644
index 000000000000..4820e4548f36
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_dp.c
@@ -0,0 +1,2562 @@
+/*
+ * Copyright © 2008 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Keith Packard <keithp@keithp.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_crtc_helper.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/drm_dp_helper.h>
+
+#define DP_RECEIVER_CAP_SIZE 0xf
+#define DP_LINK_STATUS_SIZE 6
+#define DP_LINK_CHECK_TIMEOUT (10 * 1000)
+
+#define DP_LINK_CONFIGURATION_SIZE 9
+
+/* XXXKIB what is the right code for the FreeBSD ? */
+#define EREMOTEIO ENXIO
+
+struct intel_dp {
+ struct intel_encoder base;
+ uint32_t output_reg;
+ uint32_t DP;
+ uint8_t link_configuration[DP_LINK_CONFIGURATION_SIZE];
+ bool has_audio;
+ enum hdmi_force_audio force_audio;
+ uint32_t color_range;
+ int dpms_mode;
+ uint8_t link_bw;
+ uint8_t lane_count;
+ uint8_t dpcd[DP_RECEIVER_CAP_SIZE];
+ device_t dp_iic_bus;
+ device_t adapter;
+ bool is_pch_edp;
+ uint8_t train_set[4];
+ int panel_power_up_delay;
+ int panel_power_down_delay;
+ int panel_power_cycle_delay;
+ int backlight_on_delay;
+ int backlight_off_delay;
+ struct drm_display_mode *panel_fixed_mode; /* for eDP */
+ struct timeout_task panel_vdd_task;
+ bool want_panel_vdd;
+};
+
+/**
+ * is_edp - is the given port attached to an eDP panel (either CPU or PCH)
+ * @intel_dp: DP struct
+ *
+ * If a CPU or PCH DP output is attached to an eDP panel, this function
+ * will return true, and false otherwise.
+ */
+static bool is_edp(struct intel_dp *intel_dp)
+{
+ return intel_dp->base.type == INTEL_OUTPUT_EDP;
+}
+
+/**
+ * is_pch_edp - is the port on the PCH and attached to an eDP panel?
+ * @intel_dp: DP struct
+ *
+ * Returns true if the given DP struct corresponds to a PCH DP port attached
+ * to an eDP panel, false otherwise. Helpful for determining whether we
+ * may need FDI resources for a given DP output or not.
+ */
+static bool is_pch_edp(struct intel_dp *intel_dp)
+{
+ return intel_dp->is_pch_edp;
+}
+
+/**
+ * is_cpu_edp - is the port on the CPU and attached to an eDP panel?
+ * @intel_dp: DP struct
+ *
+ * Returns true if the given DP struct corresponds to a CPU eDP port.
+ */
+static bool is_cpu_edp(struct intel_dp *intel_dp)
+{
+ return is_edp(intel_dp) && !is_pch_edp(intel_dp);
+}
+
+static struct intel_dp *enc_to_intel_dp(struct drm_encoder *encoder)
+{
+ return container_of(encoder, struct intel_dp, base.base);
+}
+
+static struct intel_dp *intel_attached_dp(struct drm_connector *connector)
+{
+ return container_of(intel_attached_encoder(connector),
+ struct intel_dp, base);
+}
+
+/**
+ * intel_encoder_is_pch_edp - is the given encoder a PCH attached eDP?
+ * @encoder: DRM encoder
+ *
+ * Return true if @encoder corresponds to a PCH attached eDP panel. Needed
+ * by intel_display.c.
+ */
+bool intel_encoder_is_pch_edp(struct drm_encoder *encoder)
+{
+ struct intel_dp *intel_dp;
+
+ if (!encoder)
+ return false;
+
+ intel_dp = enc_to_intel_dp(encoder);
+
+ return is_pch_edp(intel_dp);
+}
+
+static void intel_dp_start_link_train(struct intel_dp *intel_dp);
+static void intel_dp_complete_link_train(struct intel_dp *intel_dp);
+static void intel_dp_link_down(struct intel_dp *intel_dp);
+
+void
+intel_edp_link_config(struct intel_encoder *intel_encoder,
+ int *lane_num, int *link_bw)
+{
+ struct intel_dp *intel_dp = container_of(intel_encoder, struct intel_dp, base);
+
+ *lane_num = intel_dp->lane_count;
+ if (intel_dp->link_bw == DP_LINK_BW_1_62)
+ *link_bw = 162000;
+ else if (intel_dp->link_bw == DP_LINK_BW_2_7)
+ *link_bw = 270000;
+}
+
+static int
+intel_dp_max_lane_count(struct intel_dp *intel_dp)
+{
+ int max_lane_count = intel_dp->dpcd[DP_MAX_LANE_COUNT] & 0x1f;
+ switch (max_lane_count) {
+ case 1: case 2: case 4:
+ break;
+ default:
+ max_lane_count = 4;
+ }
+ return max_lane_count;
+}
+
+static int
+intel_dp_max_link_bw(struct intel_dp *intel_dp)
+{
+ int max_link_bw = intel_dp->dpcd[DP_MAX_LINK_RATE];
+
+ switch (max_link_bw) {
+ case DP_LINK_BW_1_62:
+ case DP_LINK_BW_2_7:
+ break;
+ default:
+ max_link_bw = DP_LINK_BW_1_62;
+ break;
+ }
+ return max_link_bw;
+}
+
+static int
+intel_dp_link_clock(uint8_t link_bw)
+{
+ if (link_bw == DP_LINK_BW_2_7)
+ return 270000;
+ else
+ return 162000;
+}
+
+/*
+ * The units on the numbers in the next two are... bizarre. Examples will
+ * make it clearer; this one parallels an example in the eDP spec.
+ *
+ * intel_dp_max_data_rate for one lane of 2.7GHz evaluates as:
+ *
+ * 270000 * 1 * 8 / 10 == 216000
+ *
+ * The actual data capacity of that configuration is 2.16Gbit/s, so the
+ * units are decakilobits. ->clock in a drm_display_mode is in kilohertz -
+ * or equivalently, kilopixels per second - so for 1680x1050R it'd be
+ * 119000. At 18bpp that's 2142000 kilobits per second.
+ *
+ * Thus the strange-looking division by 10 in intel_dp_link_required, to
+ * get the result in decakilobits instead of kilobits.
+ */
+
+static int
+intel_dp_link_required(int pixel_clock, int bpp)
+{
+ return (pixel_clock * bpp + 9) / 10;
+}
+
+static int
+intel_dp_max_data_rate(int max_link_clock, int max_lanes)
+{
+ return (max_link_clock * max_lanes * 8) / 10;
+}
+
+static bool
+intel_dp_adjust_dithering(struct intel_dp *intel_dp,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_dp));
+ int max_lanes = intel_dp_max_lane_count(intel_dp);
+ int max_rate, mode_rate;
+
+ mode_rate = intel_dp_link_required(mode->clock, 24);
+ max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes);
+
+ if (mode_rate > max_rate) {
+ mode_rate = intel_dp_link_required(mode->clock, 18);
+ if (mode_rate > max_rate)
+ return false;
+
+ if (adjusted_mode)
+ adjusted_mode->private_flags
+ |= INTEL_MODE_DP_FORCE_6BPC;
+
+ return true;
+ }
+
+ return true;
+}
+
+static int
+intel_dp_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ struct intel_dp *intel_dp = intel_attached_dp(connector);
+
+ if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) {
+ if (mode->hdisplay > intel_dp->panel_fixed_mode->hdisplay)
+ return MODE_PANEL;
+
+ if (mode->vdisplay > intel_dp->panel_fixed_mode->vdisplay)
+ return MODE_PANEL;
+ }
+
+ if (!intel_dp_adjust_dithering(intel_dp, mode, NULL))
+ return MODE_CLOCK_HIGH;
+
+ if (mode->clock < 10000)
+ return MODE_CLOCK_LOW;
+
+ return MODE_OK;
+}
+
+static uint32_t
+pack_aux(uint8_t *src, int src_bytes)
+{
+ int i;
+ uint32_t v = 0;
+
+ if (src_bytes > 4)
+ src_bytes = 4;
+ for (i = 0; i < src_bytes; i++)
+ v |= ((uint32_t) src[i]) << ((3-i) * 8);
+ return v;
+}
+
+static void
+unpack_aux(uint32_t src, uint8_t *dst, int dst_bytes)
+{
+ int i;
+ if (dst_bytes > 4)
+ dst_bytes = 4;
+ for (i = 0; i < dst_bytes; i++)
+ dst[i] = src >> ((3-i) * 8);
+}
+
+/* hrawclock is 1/4 the FSB frequency */
+static int
+intel_hrawclk(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t clkcfg;
+
+ clkcfg = I915_READ(CLKCFG);
+ switch (clkcfg & CLKCFG_FSB_MASK) {
+ case CLKCFG_FSB_400:
+ return 100;
+ case CLKCFG_FSB_533:
+ return 133;
+ case CLKCFG_FSB_667:
+ return 166;
+ case CLKCFG_FSB_800:
+ return 200;
+ case CLKCFG_FSB_1067:
+ return 266;
+ case CLKCFG_FSB_1333:
+ return 333;
+ /* these two are just a guess; one of them might be right */
+ case CLKCFG_FSB_1600:
+ case CLKCFG_FSB_1600_ALT:
+ return 400;
+ default:
+ return 133;
+ }
+}
+
+static bool ironlake_edp_have_panel_power(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ return (I915_READ(PCH_PP_STATUS) & PP_ON) != 0;
+}
+
+static bool ironlake_edp_have_panel_vdd(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ return (I915_READ(PCH_PP_CONTROL) & EDP_FORCE_VDD) != 0;
+}
+
+static void
+intel_dp_check_edp(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (!is_edp(intel_dp))
+ return;
+ if (!ironlake_edp_have_panel_power(intel_dp) && !ironlake_edp_have_panel_vdd(intel_dp)) {
+ printf("eDP powered off while attempting aux channel communication.\n");
+ DRM_DEBUG_KMS("Status 0x%08x Control 0x%08x\n",
+ I915_READ(PCH_PP_STATUS),
+ I915_READ(PCH_PP_CONTROL));
+ }
+}
+
+static int
+intel_dp_aux_ch(struct intel_dp *intel_dp,
+ uint8_t *send, int send_bytes,
+ uint8_t *recv, int recv_size)
+{
+ uint32_t output_reg = intel_dp->output_reg;
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t ch_ctl = output_reg + 0x10;
+ uint32_t ch_data = ch_ctl + 4;
+ int i;
+ int recv_bytes;
+ uint32_t status;
+ uint32_t aux_clock_divider;
+ int try, precharge = 5;
+
+ intel_dp_check_edp(intel_dp);
+ /* The clock divider is based off the hrawclk,
+ * and would like to run at 2MHz. So, take the
+ * hrawclk value and divide by 2 and use that
+ *
+ * Note that PCH attached eDP panels should use a 125MHz input
+ * clock divider.
+ */
+ if (is_cpu_edp(intel_dp)) {
+ if (IS_GEN6(dev) || IS_GEN7(dev))
+ aux_clock_divider = 200; /* SNB & IVB eDP input clock at 400Mhz */
+ else
+ aux_clock_divider = 225; /* eDP input clock at 450Mhz */
+ } else if (HAS_PCH_SPLIT(dev))
+ aux_clock_divider = 63; /* IRL input clock fixed at 125Mhz */
+ else
+ aux_clock_divider = intel_hrawclk(dev) / 2;
+
+ /* Try to wait for any previous AUX channel activity */
+ for (try = 0; try < 3; try++) {
+ status = I915_READ(ch_ctl);
+ if ((status & DP_AUX_CH_CTL_SEND_BUSY) == 0)
+ break;
+ drm_msleep(1, "915ach");
+ }
+
+ if (try == 3) {
+ printf("dp_aux_ch not started status 0x%08x\n",
+ I915_READ(ch_ctl));
+ return -EBUSY;
+ }
+
+ /* Must try at least 3 times according to DP spec */
+ for (try = 0; try < 5; try++) {
+ /* Load the send data into the aux channel data registers */
+ for (i = 0; i < send_bytes; i += 4)
+ I915_WRITE(ch_data + i,
+ pack_aux(send + i, send_bytes - i));
+
+ /* Send the command and wait for it to complete */
+ I915_WRITE(ch_ctl,
+ DP_AUX_CH_CTL_SEND_BUSY |
+ DP_AUX_CH_CTL_TIME_OUT_400us |
+ (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
+ (precharge << DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT) |
+ (aux_clock_divider << DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT) |
+ DP_AUX_CH_CTL_DONE |
+ DP_AUX_CH_CTL_TIME_OUT_ERROR |
+ DP_AUX_CH_CTL_RECEIVE_ERROR);
+ for (;;) {
+ status = I915_READ(ch_ctl);
+ if ((status & DP_AUX_CH_CTL_SEND_BUSY) == 0)
+ break;
+ DELAY(100);
+ }
+
+ /* Clear done status and any errors */
+ I915_WRITE(ch_ctl,
+ status |
+ DP_AUX_CH_CTL_DONE |
+ DP_AUX_CH_CTL_TIME_OUT_ERROR |
+ DP_AUX_CH_CTL_RECEIVE_ERROR);
+
+ if (status & (DP_AUX_CH_CTL_TIME_OUT_ERROR |
+ DP_AUX_CH_CTL_RECEIVE_ERROR))
+ continue;
+ if (status & DP_AUX_CH_CTL_DONE)
+ break;
+ }
+
+ if ((status & DP_AUX_CH_CTL_DONE) == 0) {
+ DRM_ERROR("dp_aux_ch not done status 0x%08x\n", status);
+ return -EBUSY;
+ }
+
+ /* Check for timeout or receive error.
+ * Timeouts occur when the sink is not connected
+ */
+ if (status & DP_AUX_CH_CTL_RECEIVE_ERROR) {
+ DRM_ERROR("dp_aux_ch receive error status 0x%08x\n", status);
+ return -EIO;
+ }
+
+ /* Timeouts occur when the device isn't connected, so they're
+ * "normal" -- don't fill the kernel log with these */
+ if (status & DP_AUX_CH_CTL_TIME_OUT_ERROR) {
+ DRM_DEBUG_KMS("dp_aux_ch timeout status 0x%08x\n", status);
+ return -ETIMEDOUT;
+ }
+
+ /* Unload any bytes sent back from the other side */
+ recv_bytes = ((status & DP_AUX_CH_CTL_MESSAGE_SIZE_MASK) >>
+ DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT);
+ if (recv_bytes > recv_size)
+ recv_bytes = recv_size;
+
+ for (i = 0; i < recv_bytes; i += 4)
+ unpack_aux(I915_READ(ch_data + i),
+ recv + i, recv_bytes - i);
+
+ return recv_bytes;
+}
+
+/* Write data to the aux channel in native mode */
+static int
+intel_dp_aux_native_write(struct intel_dp *intel_dp,
+ uint16_t address, uint8_t *send, int send_bytes)
+{
+ int ret;
+ uint8_t msg[20];
+ int msg_bytes;
+ uint8_t ack;
+
+ intel_dp_check_edp(intel_dp);
+ if (send_bytes > 16)
+ return -1;
+ msg[0] = AUX_NATIVE_WRITE << 4;
+ msg[1] = address >> 8;
+ msg[2] = address & 0xff;
+ msg[3] = send_bytes - 1;
+ memcpy(&msg[4], send, send_bytes);
+ msg_bytes = send_bytes + 4;
+ for (;;) {
+ ret = intel_dp_aux_ch(intel_dp, msg, msg_bytes, &ack, 1);
+ if (ret < 0)
+ return ret;
+ if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_ACK)
+ break;
+ else if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_DEFER)
+ DELAY(100);
+ else
+ return -EIO;
+ }
+ return send_bytes;
+}
+
+/* Write a single byte to the aux channel in native mode */
+static int
+intel_dp_aux_native_write_1(struct intel_dp *intel_dp,
+ uint16_t address, uint8_t byte)
+{
+ return intel_dp_aux_native_write(intel_dp, address, &byte, 1);
+}
+
+/* read bytes from a native aux channel */
+static int
+intel_dp_aux_native_read(struct intel_dp *intel_dp,
+ uint16_t address, uint8_t *recv, int recv_bytes)
+{
+ uint8_t msg[4];
+ int msg_bytes;
+ uint8_t reply[20];
+ int reply_bytes;
+ uint8_t ack;
+ int ret;
+
+ intel_dp_check_edp(intel_dp);
+ msg[0] = AUX_NATIVE_READ << 4;
+ msg[1] = address >> 8;
+ msg[2] = address & 0xff;
+ msg[3] = recv_bytes - 1;
+
+ msg_bytes = 4;
+ reply_bytes = recv_bytes + 1;
+
+ for (;;) {
+ ret = intel_dp_aux_ch(intel_dp, msg, msg_bytes,
+ reply, reply_bytes);
+ if (ret == 0)
+ return -EPROTO;
+ if (ret < 0)
+ return ret;
+ ack = reply[0];
+ if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_ACK) {
+ memcpy(recv, reply + 1, ret - 1);
+ return ret - 1;
+ }
+ else if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_DEFER)
+ DELAY(100);
+ else
+ return -EIO;
+ }
+}
+
+static int
+intel_dp_i2c_aux_ch(device_t idev, int mode, uint8_t write_byte,
+ uint8_t *read_byte)
+{
+ struct iic_dp_aux_data *data;
+ struct intel_dp *intel_dp;
+ uint16_t address;
+ uint8_t msg[5];
+ uint8_t reply[2];
+ unsigned retry;
+ int msg_bytes;
+ int reply_bytes;
+ int ret;
+
+ data = device_get_softc(idev);
+ intel_dp = data->priv;
+ address = data->address;
+
+ intel_dp_check_edp(intel_dp);
+ /* Set up the command byte */
+ if (mode & MODE_I2C_READ)
+ msg[0] = AUX_I2C_READ << 4;
+ else
+ msg[0] = AUX_I2C_WRITE << 4;
+
+ if (!(mode & MODE_I2C_STOP))
+ msg[0] |= AUX_I2C_MOT << 4;
+
+ msg[1] = address >> 8;
+ msg[2] = address;
+
+ switch (mode) {
+ case MODE_I2C_WRITE:
+ msg[3] = 0;
+ msg[4] = write_byte;
+ msg_bytes = 5;
+ reply_bytes = 1;
+ break;
+ case MODE_I2C_READ:
+ msg[3] = 0;
+ msg_bytes = 4;
+ reply_bytes = 2;
+ break;
+ default:
+ msg_bytes = 3;
+ reply_bytes = 1;
+ break;
+ }
+
+ for (retry = 0; retry < 5; retry++) {
+ ret = intel_dp_aux_ch(intel_dp,
+ msg, msg_bytes,
+ reply, reply_bytes);
+ if (ret < 0) {
+ DRM_DEBUG_KMS("aux_ch failed %d\n", ret);
+ return (-ret);
+ }
+
+ switch (reply[0] & AUX_NATIVE_REPLY_MASK) {
+ case AUX_NATIVE_REPLY_ACK:
+ /* I2C-over-AUX Reply field is only valid
+ * when paired with AUX ACK.
+ */
+ break;
+ case AUX_NATIVE_REPLY_NACK:
+ DRM_DEBUG_KMS("aux_ch native nack\n");
+ return (EREMOTEIO);
+ case AUX_NATIVE_REPLY_DEFER:
+ DELAY(100);
+ continue;
+ default:
+ DRM_ERROR("aux_ch invalid native reply 0x%02x\n",
+ reply[0]);
+ return (EREMOTEIO);
+ }
+
+ switch (reply[0] & AUX_I2C_REPLY_MASK) {
+ case AUX_I2C_REPLY_ACK:
+ if (mode == MODE_I2C_READ) {
+ *read_byte = reply[1];
+ }
+ return (0/*reply_bytes - 1*/);
+ case AUX_I2C_REPLY_NACK:
+ DRM_DEBUG_KMS("aux_i2c nack\n");
+ return (EREMOTEIO);
+ case AUX_I2C_REPLY_DEFER:
+ DRM_DEBUG_KMS("aux_i2c defer\n");
+ DELAY(100);
+ break;
+ default:
+ DRM_ERROR("aux_i2c invalid reply 0x%02x\n", reply[0]);
+ return (EREMOTEIO);
+ }
+ }
+
+ DRM_ERROR("too many retries, giving up\n");
+ return (EREMOTEIO);
+}
+
+static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp);
+static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync);
+
+static int
+intel_dp_i2c_init(struct intel_dp *intel_dp,
+ struct intel_connector *intel_connector, const char *name)
+{
+ int ret;
+
+ DRM_DEBUG_KMS("i2c_init %s\n", name);
+
+ ironlake_edp_panel_vdd_on(intel_dp);
+ ret = iic_dp_aux_add_bus(intel_connector->base.dev->device, name,
+ intel_dp_i2c_aux_ch, intel_dp, &intel_dp->dp_iic_bus,
+ &intel_dp->adapter);
+ ironlake_edp_panel_vdd_off(intel_dp, false);
+ return (ret);
+}
+
+static bool
+intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ int lane_count, clock;
+ int max_lane_count = intel_dp_max_lane_count(intel_dp);
+ int max_clock = intel_dp_max_link_bw(intel_dp) == DP_LINK_BW_2_7 ? 1 : 0;
+ int bpp;
+ static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 };
+
+ if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) {
+ intel_fixed_panel_mode(intel_dp->panel_fixed_mode, adjusted_mode);
+ intel_pch_panel_fitting(dev, DRM_MODE_SCALE_FULLSCREEN,
+ mode, adjusted_mode);
+ /*
+ * the mode->clock is used to calculate the Data&Link M/N
+ * of the pipe. For the eDP the fixed clock should be used.
+ */
+ mode->clock = intel_dp->panel_fixed_mode->clock;
+ }
+
+ if (!intel_dp_adjust_dithering(intel_dp, mode, adjusted_mode))
+ return false;
+
+ bpp = adjusted_mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 24;
+
+ for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {
+ for (clock = 0; clock <= max_clock; clock++) {
+ int link_avail = intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count);
+
+ if (intel_dp_link_required(mode->clock, bpp)
+ <= link_avail) {
+ intel_dp->link_bw = bws[clock];
+ intel_dp->lane_count = lane_count;
+ adjusted_mode->clock = intel_dp_link_clock(intel_dp->link_bw);
+ DRM_DEBUG_KMS("Display port link bw %02x lane "
+ "count %d clock %d\n",
+ intel_dp->link_bw, intel_dp->lane_count,
+ adjusted_mode->clock);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+struct intel_dp_m_n {
+ uint32_t tu;
+ uint32_t gmch_m;
+ uint32_t gmch_n;
+ uint32_t link_m;
+ uint32_t link_n;
+};
+
+static void
+intel_reduce_ratio(uint32_t *num, uint32_t *den)
+{
+ while (*num > 0xffffff || *den > 0xffffff) {
+ *num >>= 1;
+ *den >>= 1;
+ }
+}
+
+static void
+intel_dp_compute_m_n(int bpp,
+ int nlanes,
+ int pixel_clock,
+ int link_clock,
+ struct intel_dp_m_n *m_n)
+{
+ m_n->tu = 64;
+ m_n->gmch_m = (pixel_clock * bpp) >> 3;
+ m_n->gmch_n = link_clock * nlanes;
+ intel_reduce_ratio(&m_n->gmch_m, &m_n->gmch_n);
+ m_n->link_m = pixel_clock;
+ m_n->link_n = link_clock;
+ intel_reduce_ratio(&m_n->link_m, &m_n->link_n);
+}
+
+void
+intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_mode_config *mode_config = &dev->mode_config;
+ struct drm_encoder *encoder;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int lane_count = 4;
+ struct intel_dp_m_n m_n;
+ int pipe = intel_crtc->pipe;
+
+ /*
+ * Find the lane count in the intel_encoder private
+ */
+ list_for_each_entry(encoder, &mode_config->encoder_list, head) {
+ struct intel_dp *intel_dp;
+
+ if (encoder->crtc != crtc)
+ continue;
+
+ intel_dp = enc_to_intel_dp(encoder);
+ if (intel_dp->base.type == INTEL_OUTPUT_DISPLAYPORT ||
+ intel_dp->base.type == INTEL_OUTPUT_EDP)
+ {
+ lane_count = intel_dp->lane_count;
+ break;
+ }
+ }
+
+ /*
+ * Compute the GMCH and Link ratios. The '3' here is
+ * the number of bytes_per_pixel post-LUT, which we always
+ * set up for 8-bits of R/G/B, or 3 bytes total.
+ */
+ intel_dp_compute_m_n(intel_crtc->bpp, lane_count,
+ mode->clock, adjusted_mode->clock, &m_n);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(TRANSDATA_M1(pipe),
+ ((m_n.tu - 1) << PIPE_GMCH_DATA_M_TU_SIZE_SHIFT) |
+ m_n.gmch_m);
+ I915_WRITE(TRANSDATA_N1(pipe), m_n.gmch_n);
+ I915_WRITE(TRANSDPLINK_M1(pipe), m_n.link_m);
+ I915_WRITE(TRANSDPLINK_N1(pipe), m_n.link_n);
+ } else {
+ I915_WRITE(PIPE_GMCH_DATA_M(pipe),
+ ((m_n.tu - 1) << PIPE_GMCH_DATA_M_TU_SIZE_SHIFT) |
+ m_n.gmch_m);
+ I915_WRITE(PIPE_GMCH_DATA_N(pipe), m_n.gmch_n);
+ I915_WRITE(PIPE_DP_LINK_M(pipe), m_n.link_m);
+ I915_WRITE(PIPE_DP_LINK_N(pipe), m_n.link_n);
+ }
+}
+
+static void ironlake_edp_pll_on(struct drm_encoder *encoder);
+static void ironlake_edp_pll_off(struct drm_encoder *encoder);
+
+static void
+intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ struct drm_crtc *crtc = intel_dp->base.base.crtc;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+ /* Turn on the eDP PLL if needed */
+ if (is_edp(intel_dp)) {
+ if (!is_pch_edp(intel_dp))
+ ironlake_edp_pll_on(encoder);
+ else
+ ironlake_edp_pll_off(encoder);
+ }
+
+ /*
+ * There are four kinds of DP registers:
+ *
+ * IBX PCH
+ * SNB CPU
+ * IVB CPU
+ * CPT PCH
+ *
+ * IBX PCH and CPU are the same for almost everything,
+ * except that the CPU DP PLL is configured in this
+ * register
+ *
+ * CPT PCH is quite different, having many bits moved
+ * to the TRANS_DP_CTL register instead. That
+ * configuration happens (oddly) in ironlake_pch_enable
+ */
+
+ /* Preserve the BIOS-computed detected bit. This is
+ * supposed to be read-only.
+ */
+ intel_dp->DP = I915_READ(intel_dp->output_reg) & DP_DETECTED;
+ intel_dp->DP |= DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
+
+ /* Handle DP bits in common between all three register formats */
+
+ intel_dp->DP |= DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
+
+ switch (intel_dp->lane_count) {
+ case 1:
+ intel_dp->DP |= DP_PORT_WIDTH_1;
+ break;
+ case 2:
+ intel_dp->DP |= DP_PORT_WIDTH_2;
+ break;
+ case 4:
+ intel_dp->DP |= DP_PORT_WIDTH_4;
+ break;
+ }
+ if (intel_dp->has_audio) {
+ DRM_DEBUG_KMS("Enabling DP audio on pipe %c\n",
+ pipe_name(intel_crtc->pipe));
+ intel_dp->DP |= DP_AUDIO_OUTPUT_ENABLE;
+ intel_write_eld(encoder, adjusted_mode);
+ }
+ memset(intel_dp->link_configuration, 0, DP_LINK_CONFIGURATION_SIZE);
+ intel_dp->link_configuration[0] = intel_dp->link_bw;
+ intel_dp->link_configuration[1] = intel_dp->lane_count;
+ /*
+ * Check for DPCD version > 1.1 and enhanced framing support
+ */
+ if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
+ (intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_ENHANCED_FRAME_CAP)) {
+ intel_dp->link_configuration[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
+ }
+
+ /* Split out the IBX/CPU vs CPT settings */
+
+ if (is_cpu_edp(intel_dp) && IS_GEN7(dev)) {
+ if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
+ intel_dp->DP |= DP_SYNC_HS_HIGH;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
+ intel_dp->DP |= DP_SYNC_VS_HIGH;
+ intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
+
+ if (intel_dp->link_configuration[1] & DP_LANE_COUNT_ENHANCED_FRAME_EN)
+ intel_dp->DP |= DP_ENHANCED_FRAMING;
+
+ intel_dp->DP |= intel_crtc->pipe << 29;
+
+ /* don't miss out required setting for eDP */
+ intel_dp->DP |= DP_PLL_ENABLE;
+ if (adjusted_mode->clock < 200000)
+ intel_dp->DP |= DP_PLL_FREQ_160MHZ;
+ else
+ intel_dp->DP |= DP_PLL_FREQ_270MHZ;
+ } else if (!HAS_PCH_CPT(dev) || is_cpu_edp(intel_dp)) {
+ intel_dp->DP |= intel_dp->color_range;
+
+ if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
+ intel_dp->DP |= DP_SYNC_HS_HIGH;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
+ intel_dp->DP |= DP_SYNC_VS_HIGH;
+ intel_dp->DP |= DP_LINK_TRAIN_OFF;
+
+ if (intel_dp->link_configuration[1] & DP_LANE_COUNT_ENHANCED_FRAME_EN)
+ intel_dp->DP |= DP_ENHANCED_FRAMING;
+
+ if (intel_crtc->pipe == 1)
+ intel_dp->DP |= DP_PIPEB_SELECT;
+
+ if (is_cpu_edp(intel_dp)) {
+ /* don't miss out required setting for eDP */
+ intel_dp->DP |= DP_PLL_ENABLE;
+ if (adjusted_mode->clock < 200000)
+ intel_dp->DP |= DP_PLL_FREQ_160MHZ;
+ else
+ intel_dp->DP |= DP_PLL_FREQ_270MHZ;
+ }
+ } else {
+ intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
+ }
+}
+
+#define IDLE_ON_MASK (PP_ON | 0 | PP_SEQUENCE_MASK | 0 | PP_SEQUENCE_STATE_MASK)
+#define IDLE_ON_VALUE (PP_ON | 0 | PP_SEQUENCE_NONE | 0 | PP_SEQUENCE_STATE_ON_IDLE)
+
+#define IDLE_OFF_MASK (PP_ON | 0 | PP_SEQUENCE_MASK | 0 | PP_SEQUENCE_STATE_MASK)
+#define IDLE_OFF_VALUE (0 | 0 | PP_SEQUENCE_NONE | 0 | PP_SEQUENCE_STATE_OFF_IDLE)
+
+#define IDLE_CYCLE_MASK (PP_ON | 0 | PP_SEQUENCE_MASK | PP_CYCLE_DELAY_ACTIVE | PP_SEQUENCE_STATE_MASK)
+#define IDLE_CYCLE_VALUE (0 | 0 | PP_SEQUENCE_NONE | 0 | PP_SEQUENCE_STATE_OFF_IDLE)
+
+static void ironlake_wait_panel_status(struct intel_dp *intel_dp,
+ u32 mask,
+ u32 value)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ DRM_DEBUG_KMS("mask %08x value %08x status %08x control %08x\n",
+ mask, value,
+ I915_READ(PCH_PP_STATUS),
+ I915_READ(PCH_PP_CONTROL));
+
+ if (_intel_wait_for(dev,
+ (I915_READ(PCH_PP_STATUS) & mask) == value, 5000, 10, "915iwp")) {
+ DRM_ERROR("Panel status timeout: status %08x control %08x\n",
+ I915_READ(PCH_PP_STATUS),
+ I915_READ(PCH_PP_CONTROL));
+ }
+}
+
+static void ironlake_wait_panel_on(struct intel_dp *intel_dp)
+{
+ DRM_DEBUG_KMS("Wait for panel power on\n");
+ ironlake_wait_panel_status(intel_dp, IDLE_ON_MASK, IDLE_ON_VALUE);
+}
+
+static void ironlake_wait_panel_off(struct intel_dp *intel_dp)
+{
+ DRM_DEBUG_KMS("Wait for panel power off time\n");
+ ironlake_wait_panel_status(intel_dp, IDLE_OFF_MASK, IDLE_OFF_VALUE);
+}
+
+static void ironlake_wait_panel_power_cycle(struct intel_dp *intel_dp)
+{
+ DRM_DEBUG_KMS("Wait for panel power cycle\n");
+ ironlake_wait_panel_status(intel_dp, IDLE_CYCLE_MASK, IDLE_CYCLE_VALUE);
+}
+
+
+/* Read the current pp_control value, unlocking the register if it
+ * is locked
+ */
+
+static u32 ironlake_get_pp_control(struct drm_i915_private *dev_priv)
+{
+ u32 control = I915_READ(PCH_PP_CONTROL);
+
+ control &= ~PANEL_UNLOCK_MASK;
+ control |= PANEL_UNLOCK_REGS;
+ return control;
+}
+
+static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 pp;
+
+ if (!is_edp(intel_dp))
+ return;
+ DRM_DEBUG_KMS("Turn eDP VDD on\n");
+
+ if (intel_dp->want_panel_vdd)
+ printf("eDP VDD already requested on\n");
+
+ intel_dp->want_panel_vdd = true;
+
+ if (ironlake_edp_have_panel_vdd(intel_dp)) {
+ DRM_DEBUG_KMS("eDP VDD already on\n");
+ return;
+ }
+
+ if (!ironlake_edp_have_panel_power(intel_dp))
+ ironlake_wait_panel_power_cycle(intel_dp);
+
+ pp = ironlake_get_pp_control(dev_priv);
+ pp |= EDP_FORCE_VDD;
+ I915_WRITE(PCH_PP_CONTROL, pp);
+ POSTING_READ(PCH_PP_CONTROL);
+ DRM_DEBUG_KMS("PCH_PP_STATUS: 0x%08x PCH_PP_CONTROL: 0x%08x\n",
+ I915_READ(PCH_PP_STATUS), I915_READ(PCH_PP_CONTROL));
+
+ /*
+ * If the panel wasn't on, delay before accessing aux channel
+ */
+ if (!ironlake_edp_have_panel_power(intel_dp)) {
+ DRM_DEBUG_KMS("eDP was not running\n");
+ drm_msleep(intel_dp->panel_power_up_delay, "915edpon");
+ }
+}
+
+static void ironlake_panel_vdd_off_sync(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 pp;
+
+ if (!intel_dp->want_panel_vdd && ironlake_edp_have_panel_vdd(intel_dp)) {
+ pp = ironlake_get_pp_control(dev_priv);
+ pp &= ~EDP_FORCE_VDD;
+ I915_WRITE(PCH_PP_CONTROL, pp);
+ POSTING_READ(PCH_PP_CONTROL);
+
+ /* Make sure sequencer is idle before allowing subsequent activity */
+ DRM_DEBUG_KMS("PCH_PP_STATUS: 0x%08x PCH_PP_CONTROL: 0x%08x\n",
+ I915_READ(PCH_PP_STATUS), I915_READ(PCH_PP_CONTROL));
+
+ drm_msleep(intel_dp->panel_power_down_delay, "915vddo");
+ }
+}
+
+static void ironlake_panel_vdd_work(void *arg, int pending __unused)
+{
+ struct intel_dp *intel_dp = arg;
+ struct drm_device *dev = intel_dp->base.base.dev;
+
+ sx_xlock(&dev->mode_config.mutex);
+ ironlake_panel_vdd_off_sync(intel_dp);
+ sx_xunlock(&dev->mode_config.mutex);
+}
+
+static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
+{
+ if (!is_edp(intel_dp))
+ return;
+
+ DRM_DEBUG_KMS("Turn eDP VDD off %d\n", intel_dp->want_panel_vdd);
+ if (!intel_dp->want_panel_vdd)
+ printf("eDP VDD not forced on\n");
+
+ intel_dp->want_panel_vdd = false;
+
+ if (sync) {
+ ironlake_panel_vdd_off_sync(intel_dp);
+ } else {
+ /*
+ * Queue the timer to fire a long
+ * time from now (relative to the power down delay)
+ * to keep the panel power up across a sequence of operations
+ */
+ struct drm_i915_private *dev_priv = intel_dp->base.base.dev->dev_private;
+ taskqueue_enqueue_timeout(dev_priv->tq,
+ &intel_dp->panel_vdd_task,
+ msecs_to_jiffies(intel_dp->panel_power_cycle_delay * 5));
+ }
+}
+
+static void ironlake_edp_panel_on(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 pp;
+
+ if (!is_edp(intel_dp))
+ return;
+
+ DRM_DEBUG_KMS("Turn eDP power on\n");
+
+ if (ironlake_edp_have_panel_power(intel_dp)) {
+ DRM_DEBUG_KMS("eDP power already on\n");
+ return;
+ }
+
+ ironlake_wait_panel_power_cycle(intel_dp);
+
+ pp = ironlake_get_pp_control(dev_priv);
+ if (IS_GEN5(dev)) {
+ /* ILK workaround: disable reset around power sequence */
+ pp &= ~PANEL_POWER_RESET;
+ I915_WRITE(PCH_PP_CONTROL, pp);
+ POSTING_READ(PCH_PP_CONTROL);
+ }
+
+ pp |= POWER_TARGET_ON;
+ if (!IS_GEN5(dev))
+ pp |= PANEL_POWER_RESET;
+
+ I915_WRITE(PCH_PP_CONTROL, pp);
+ POSTING_READ(PCH_PP_CONTROL);
+
+ ironlake_wait_panel_on(intel_dp);
+
+ if (IS_GEN5(dev)) {
+ pp |= PANEL_POWER_RESET; /* restore panel reset bit */
+ I915_WRITE(PCH_PP_CONTROL, pp);
+ POSTING_READ(PCH_PP_CONTROL);
+ }
+}
+
+static void ironlake_edp_panel_off(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 pp;
+
+ if (!is_edp(intel_dp))
+ return;
+
+ DRM_DEBUG_KMS("Turn eDP power off\n");
+
+ if (intel_dp->want_panel_vdd)
+ printf("Cannot turn power off while VDD is on\n");
+
+ pp = ironlake_get_pp_control(dev_priv);
+ pp &= ~(POWER_TARGET_ON | EDP_FORCE_VDD | PANEL_POWER_RESET | EDP_BLC_ENABLE);
+ I915_WRITE(PCH_PP_CONTROL, pp);
+ POSTING_READ(PCH_PP_CONTROL);
+
+ ironlake_wait_panel_off(intel_dp);
+}
+
+static void ironlake_edp_backlight_on(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 pp;
+
+ if (!is_edp(intel_dp))
+ return;
+
+ DRM_DEBUG_KMS("\n");
+ /*
+ * If we enable the backlight right away following a panel power
+ * on, we may see slight flicker as the panel syncs with the eDP
+ * link. So delay a bit to make sure the image is solid before
+ * allowing it to appear.
+ */
+ drm_msleep(intel_dp->backlight_on_delay, "915ebo");
+ pp = ironlake_get_pp_control(dev_priv);
+ pp |= EDP_BLC_ENABLE;
+ I915_WRITE(PCH_PP_CONTROL, pp);
+ POSTING_READ(PCH_PP_CONTROL);
+}
+
+static void ironlake_edp_backlight_off(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 pp;
+
+ if (!is_edp(intel_dp))
+ return;
+
+ DRM_DEBUG_KMS("\n");
+ pp = ironlake_get_pp_control(dev_priv);
+ pp &= ~EDP_BLC_ENABLE;
+ I915_WRITE(PCH_PP_CONTROL, pp);
+ POSTING_READ(PCH_PP_CONTROL);
+ drm_msleep(intel_dp->backlight_off_delay, "915bo1");
+}
+
+static void ironlake_edp_pll_on(struct drm_encoder *encoder)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 dpa_ctl;
+
+ DRM_DEBUG_KMS("\n");
+ dpa_ctl = I915_READ(DP_A);
+ dpa_ctl |= DP_PLL_ENABLE;
+ I915_WRITE(DP_A, dpa_ctl);
+ POSTING_READ(DP_A);
+ DELAY(200);
+}
+
+static void ironlake_edp_pll_off(struct drm_encoder *encoder)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 dpa_ctl;
+
+ dpa_ctl = I915_READ(DP_A);
+ dpa_ctl &= ~DP_PLL_ENABLE;
+ I915_WRITE(DP_A, dpa_ctl);
+ POSTING_READ(DP_A);
+ DELAY(200);
+}
+
+/* If the sink supports it, try to set the power state appropriately */
+static void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode)
+{
+ int ret, i;
+
+ /* Should have a valid DPCD by this point */
+ if (intel_dp->dpcd[DP_DPCD_REV] < 0x11)
+ return;
+
+ if (mode != DRM_MODE_DPMS_ON) {
+ ret = intel_dp_aux_native_write_1(intel_dp, DP_SET_POWER,
+ DP_SET_POWER_D3);
+ if (ret != 1)
+ DRM_DEBUG("failed to write sink power state\n");
+ } else {
+ /*
+ * When turning on, we need to retry for 1ms to give the sink
+ * time to wake up.
+ */
+ for (i = 0; i < 3; i++) {
+ ret = intel_dp_aux_native_write_1(intel_dp,
+ DP_SET_POWER,
+ DP_SET_POWER_D0);
+ if (ret == 1)
+ break;
+ drm_msleep(1, "915dps");
+ }
+ }
+}
+
+static void intel_dp_prepare(struct drm_encoder *encoder)
+{
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+
+ ironlake_edp_backlight_off(intel_dp);
+ ironlake_edp_panel_off(intel_dp);
+
+ /* Wake up the sink first */
+ ironlake_edp_panel_vdd_on(intel_dp);
+ intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
+ intel_dp_link_down(intel_dp);
+ ironlake_edp_panel_vdd_off(intel_dp, false);
+
+ /* Make sure the panel is off before trying to
+ * change the mode
+ */
+}
+
+static void intel_dp_commit(struct drm_encoder *encoder)
+{
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ struct drm_device *dev = encoder->dev;
+ struct intel_crtc *intel_crtc = to_intel_crtc(intel_dp->base.base.crtc);
+
+ ironlake_edp_panel_vdd_on(intel_dp);
+ intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
+ intel_dp_start_link_train(intel_dp);
+ ironlake_edp_panel_on(intel_dp);
+ ironlake_edp_panel_vdd_off(intel_dp, true);
+ intel_dp_complete_link_train(intel_dp);
+ ironlake_edp_backlight_on(intel_dp);
+
+ intel_dp->dpms_mode = DRM_MODE_DPMS_ON;
+
+ if (HAS_PCH_CPT(dev))
+ intel_cpt_verify_modeset(dev, intel_crtc->pipe);
+}
+
+static void
+intel_dp_dpms(struct drm_encoder *encoder, int mode)
+{
+ struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t dp_reg = I915_READ(intel_dp->output_reg);
+
+ if (mode != DRM_MODE_DPMS_ON) {
+ ironlake_edp_backlight_off(intel_dp);
+ ironlake_edp_panel_off(intel_dp);
+
+ ironlake_edp_panel_vdd_on(intel_dp);
+ intel_dp_sink_dpms(intel_dp, mode);
+ intel_dp_link_down(intel_dp);
+ ironlake_edp_panel_vdd_off(intel_dp, false);
+
+ if (is_cpu_edp(intel_dp))
+ ironlake_edp_pll_off(encoder);
+ } else {
+ if (is_cpu_edp(intel_dp))
+ ironlake_edp_pll_on(encoder);
+
+ ironlake_edp_panel_vdd_on(intel_dp);
+ intel_dp_sink_dpms(intel_dp, mode);
+ if (!(dp_reg & DP_PORT_EN)) {
+ intel_dp_start_link_train(intel_dp);
+ ironlake_edp_panel_on(intel_dp);
+ ironlake_edp_panel_vdd_off(intel_dp, true);
+ intel_dp_complete_link_train(intel_dp);
+ } else
+ ironlake_edp_panel_vdd_off(intel_dp, false);
+ ironlake_edp_backlight_on(intel_dp);
+ }
+ intel_dp->dpms_mode = mode;
+}
+/*
+ * Native read with retry for link status and receiver capability reads for
+ * cases where the sink may still be asleep.
+ */
+static bool
+intel_dp_aux_native_read_retry(struct intel_dp *intel_dp, uint16_t address,
+ uint8_t *recv, int recv_bytes)
+{
+ int ret, i;
+
+ /*
+ * Sinks are *supposed* to come up within 1ms from an off state,
+ * but we're also supposed to retry 3 times per the spec.
+ */
+ for (i = 0; i < 3; i++) {
+ ret = intel_dp_aux_native_read(intel_dp, address, recv,
+ recv_bytes);
+ if (ret == recv_bytes)
+ return true;
+ drm_msleep(1, "915dpl");
+ }
+
+ return false;
+}
+
+/*
+ * Fetch AUX CH registers 0x202 - 0x207 which contain
+ * link status information
+ */
+static bool
+intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE])
+{
+ return intel_dp_aux_native_read_retry(intel_dp,
+ DP_LANE0_1_STATUS,
+ link_status,
+ DP_LINK_STATUS_SIZE);
+}
+
+static uint8_t
+intel_dp_link_status(uint8_t link_status[DP_LINK_STATUS_SIZE],
+ int r)
+{
+ return link_status[r - DP_LANE0_1_STATUS];
+}
+
+static uint8_t
+intel_get_adjust_request_voltage(uint8_t adjust_request[2],
+ int lane)
+{
+ int s = ((lane & 1) ?
+ DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT :
+ DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT);
+ uint8_t l = adjust_request[lane>>1];
+
+ return ((l >> s) & 3) << DP_TRAIN_VOLTAGE_SWING_SHIFT;
+}
+
+static uint8_t
+intel_get_adjust_request_pre_emphasis(uint8_t adjust_request[2],
+ int lane)
+{
+ int s = ((lane & 1) ?
+ DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT :
+ DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT);
+ uint8_t l = adjust_request[lane>>1];
+
+ return ((l >> s) & 3) << DP_TRAIN_PRE_EMPHASIS_SHIFT;
+}
+
+
+#if 0
+static char *voltage_names[] = {
+ "0.4V", "0.6V", "0.8V", "1.2V"
+};
+static char *pre_emph_names[] = {
+ "0dB", "3.5dB", "6dB", "9.5dB"
+};
+static char *link_train_names[] = {
+ "pattern 1", "pattern 2", "idle", "off"
+};
+#endif
+
+/*
+ * These are source-specific values; current Intel hardware supports
+ * a maximum voltage of 800mV and a maximum pre-emphasis of 6dB
+ */
+
+static uint8_t
+intel_dp_voltage_max(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+
+ if (IS_GEN7(dev) && is_cpu_edp(intel_dp))
+ return DP_TRAIN_VOLTAGE_SWING_800;
+ else if (HAS_PCH_CPT(dev) && !is_cpu_edp(intel_dp))
+ return DP_TRAIN_VOLTAGE_SWING_1200;
+ else
+ return DP_TRAIN_VOLTAGE_SWING_800;
+}
+
+static uint8_t
+intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+
+ if (IS_GEN7(dev) && is_cpu_edp(intel_dp)) {
+ switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
+ case DP_TRAIN_VOLTAGE_SWING_400:
+ return DP_TRAIN_PRE_EMPHASIS_6;
+ case DP_TRAIN_VOLTAGE_SWING_600:
+ case DP_TRAIN_VOLTAGE_SWING_800:
+ return DP_TRAIN_PRE_EMPHASIS_3_5;
+ default:
+ return DP_TRAIN_PRE_EMPHASIS_0;
+ }
+ } else {
+ switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
+ case DP_TRAIN_VOLTAGE_SWING_400:
+ return DP_TRAIN_PRE_EMPHASIS_6;
+ case DP_TRAIN_VOLTAGE_SWING_600:
+ return DP_TRAIN_PRE_EMPHASIS_6;
+ case DP_TRAIN_VOLTAGE_SWING_800:
+ return DP_TRAIN_PRE_EMPHASIS_3_5;
+ case DP_TRAIN_VOLTAGE_SWING_1200:
+ default:
+ return DP_TRAIN_PRE_EMPHASIS_0;
+ }
+ }
+}
+
+static void
+intel_get_adjust_train(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE])
+{
+ uint8_t v = 0;
+ uint8_t p = 0;
+ int lane;
+ uint8_t *adjust_request = link_status + (DP_ADJUST_REQUEST_LANE0_1 - DP_LANE0_1_STATUS);
+ uint8_t voltage_max;
+ uint8_t preemph_max;
+
+ for (lane = 0; lane < intel_dp->lane_count; lane++) {
+ uint8_t this_v = intel_get_adjust_request_voltage(adjust_request, lane);
+ uint8_t this_p = intel_get_adjust_request_pre_emphasis(adjust_request, lane);
+
+ if (this_v > v)
+ v = this_v;
+ if (this_p > p)
+ p = this_p;
+ }
+
+ voltage_max = intel_dp_voltage_max(intel_dp);
+ if (v >= voltage_max)
+ v = voltage_max | DP_TRAIN_MAX_SWING_REACHED;
+
+ preemph_max = intel_dp_pre_emphasis_max(intel_dp, v);
+ if (p >= preemph_max)
+ p = preemph_max | DP_TRAIN_MAX_PRE_EMPHASIS_REACHED;
+
+ for (lane = 0; lane < 4; lane++)
+ intel_dp->train_set[lane] = v | p;
+}
+
+static uint32_t
+intel_dp_signal_levels(uint8_t train_set)
+{
+ uint32_t signal_levels = 0;
+
+ switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
+ case DP_TRAIN_VOLTAGE_SWING_400:
+ default:
+ signal_levels |= DP_VOLTAGE_0_4;
+ break;
+ case DP_TRAIN_VOLTAGE_SWING_600:
+ signal_levels |= DP_VOLTAGE_0_6;
+ break;
+ case DP_TRAIN_VOLTAGE_SWING_800:
+ signal_levels |= DP_VOLTAGE_0_8;
+ break;
+ case DP_TRAIN_VOLTAGE_SWING_1200:
+ signal_levels |= DP_VOLTAGE_1_2;
+ break;
+ }
+ switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) {
+ case DP_TRAIN_PRE_EMPHASIS_0:
+ default:
+ signal_levels |= DP_PRE_EMPHASIS_0;
+ break;
+ case DP_TRAIN_PRE_EMPHASIS_3_5:
+ signal_levels |= DP_PRE_EMPHASIS_3_5;
+ break;
+ case DP_TRAIN_PRE_EMPHASIS_6:
+ signal_levels |= DP_PRE_EMPHASIS_6;
+ break;
+ case DP_TRAIN_PRE_EMPHASIS_9_5:
+ signal_levels |= DP_PRE_EMPHASIS_9_5;
+ break;
+ }
+ return signal_levels;
+}
+
+/* Gen6's DP voltage swing and pre-emphasis control */
+static uint32_t
+intel_gen6_edp_signal_levels(uint8_t train_set)
+{
+ int signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
+ DP_TRAIN_PRE_EMPHASIS_MASK);
+ switch (signal_levels) {
+ case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_0:
+ case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_0:
+ return EDP_LINK_TRAIN_400_600MV_0DB_SNB_B;
+ case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_3_5:
+ return EDP_LINK_TRAIN_400MV_3_5DB_SNB_B;
+ case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_6:
+ case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_6:
+ return EDP_LINK_TRAIN_400_600MV_6DB_SNB_B;
+ case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_3_5:
+ case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_3_5:
+ return EDP_LINK_TRAIN_600_800MV_3_5DB_SNB_B;
+ case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_0:
+ case DP_TRAIN_VOLTAGE_SWING_1200 | DP_TRAIN_PRE_EMPHASIS_0:
+ return EDP_LINK_TRAIN_800_1200MV_0DB_SNB_B;
+ default:
+ DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level:"
+ "0x%x\n", signal_levels);
+ return EDP_LINK_TRAIN_400_600MV_0DB_SNB_B;
+ }
+}
+
+/* Gen7's DP voltage swing and pre-emphasis control */
+static uint32_t
+intel_gen7_edp_signal_levels(uint8_t train_set)
+{
+ int signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
+ DP_TRAIN_PRE_EMPHASIS_MASK);
+ switch (signal_levels) {
+ case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_0:
+ return EDP_LINK_TRAIN_400MV_0DB_IVB;
+ case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_3_5:
+ return EDP_LINK_TRAIN_400MV_3_5DB_IVB;
+ case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_6:
+ return EDP_LINK_TRAIN_400MV_6DB_IVB;
+
+ case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_0:
+ return EDP_LINK_TRAIN_600MV_0DB_IVB;
+ case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_3_5:
+ return EDP_LINK_TRAIN_600MV_3_5DB_IVB;
+
+ case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_0:
+ return EDP_LINK_TRAIN_800MV_0DB_IVB;
+ case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_3_5:
+ return EDP_LINK_TRAIN_800MV_3_5DB_IVB;
+
+ default:
+ DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level:"
+ "0x%x\n", signal_levels);
+ return EDP_LINK_TRAIN_500MV_0DB_IVB;
+ }
+}
+
+static uint8_t
+intel_get_lane_status(uint8_t link_status[DP_LINK_STATUS_SIZE],
+ int lane)
+{
+ int s = (lane & 1) * 4;
+ uint8_t l = link_status[lane>>1];
+
+ return (l >> s) & 0xf;
+}
+
+/* Check for clock recovery is done on all channels */
+static bool
+intel_clock_recovery_ok(uint8_t link_status[DP_LINK_STATUS_SIZE], int lane_count)
+{
+ int lane;
+ uint8_t lane_status;
+
+ for (lane = 0; lane < lane_count; lane++) {
+ lane_status = intel_get_lane_status(link_status, lane);
+ if ((lane_status & DP_LANE_CR_DONE) == 0)
+ return false;
+ }
+ return true;
+}
+
+/* Check to see if channel eq is done on all channels */
+#define CHANNEL_EQ_BITS (DP_LANE_CR_DONE|\
+ DP_LANE_CHANNEL_EQ_DONE|\
+ DP_LANE_SYMBOL_LOCKED)
+static bool
+intel_channel_eq_ok(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE])
+{
+ uint8_t lane_align;
+ uint8_t lane_status;
+ int lane;
+
+ lane_align = intel_dp_link_status(link_status,
+ DP_LANE_ALIGN_STATUS_UPDATED);
+ if ((lane_align & DP_INTERLANE_ALIGN_DONE) == 0)
+ return false;
+ for (lane = 0; lane < intel_dp->lane_count; lane++) {
+ lane_status = intel_get_lane_status(link_status, lane);
+ if ((lane_status & CHANNEL_EQ_BITS) != CHANNEL_EQ_BITS)
+ return false;
+ }
+ return true;
+}
+
+static bool
+intel_dp_set_link_train(struct intel_dp *intel_dp,
+ uint32_t dp_reg_value,
+ uint8_t dp_train_pat)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int ret;
+
+ I915_WRITE(intel_dp->output_reg, dp_reg_value);
+ POSTING_READ(intel_dp->output_reg);
+
+ intel_dp_aux_native_write_1(intel_dp,
+ DP_TRAINING_PATTERN_SET,
+ dp_train_pat);
+
+ ret = intel_dp_aux_native_write(intel_dp,
+ DP_TRAINING_LANE0_SET,
+ intel_dp->train_set,
+ intel_dp->lane_count);
+ if (ret != intel_dp->lane_count)
+ return false;
+
+ return true;
+}
+
+/* Enable corresponding port and start training pattern 1 */
+static void
+intel_dp_start_link_train(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(intel_dp->base.base.crtc);
+ int i;
+ uint8_t voltage;
+ bool clock_recovery = false;
+ int voltage_tries, loop_tries;
+ u32 reg;
+ uint32_t DP = intel_dp->DP;
+
+ /* Enable output, wait for it to become active */
+ I915_WRITE(intel_dp->output_reg, intel_dp->DP);
+ POSTING_READ(intel_dp->output_reg);
+ intel_wait_for_vblank(dev, intel_crtc->pipe);
+
+ /* Write the link configuration data */
+ intel_dp_aux_native_write(intel_dp, DP_LINK_BW_SET,
+ intel_dp->link_configuration,
+ DP_LINK_CONFIGURATION_SIZE);
+
+ DP |= DP_PORT_EN;
+
+ if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
+ DP &= ~DP_LINK_TRAIN_MASK_CPT;
+ else
+ DP &= ~DP_LINK_TRAIN_MASK;
+ memset(intel_dp->train_set, 0, 4);
+ voltage = 0xff;
+ voltage_tries = 0;
+ loop_tries = 0;
+ clock_recovery = false;
+ for (;;) {
+ /* Use intel_dp->train_set[0] to set the voltage and pre emphasis values */
+ uint8_t link_status[DP_LINK_STATUS_SIZE];
+ uint32_t signal_levels;
+
+
+ if (IS_GEN7(dev) && is_cpu_edp(intel_dp)) {
+ signal_levels = intel_gen7_edp_signal_levels(intel_dp->train_set[0]);
+ DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_IVB) | signal_levels;
+ } else if (IS_GEN6(dev) && is_cpu_edp(intel_dp)) {
+ signal_levels = intel_gen6_edp_signal_levels(intel_dp->train_set[0]);
+ DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_SNB) | signal_levels;
+ } else {
+ signal_levels = intel_dp_signal_levels(intel_dp->train_set[0]);
+ DRM_DEBUG_KMS("training pattern 1 signal levels %08x\n", signal_levels);
+ DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;
+ }
+
+ if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
+ reg = DP | DP_LINK_TRAIN_PAT_1_CPT;
+ else
+ reg = DP | DP_LINK_TRAIN_PAT_1;
+
+ if (!intel_dp_set_link_train(intel_dp, reg,
+ DP_TRAINING_PATTERN_1))
+ break;
+ /* Set training pattern 1 */
+
+ DELAY(100);
+ if (!intel_dp_get_link_status(intel_dp, link_status)) {
+ DRM_ERROR("failed to get link status\n");
+ break;
+ }
+
+ if (intel_clock_recovery_ok(link_status, intel_dp->lane_count)) {
+ DRM_DEBUG_KMS("clock recovery OK\n");
+ clock_recovery = true;
+ break;
+ }
+
+ /* Check to see if we've tried the max voltage */
+ for (i = 0; i < intel_dp->lane_count; i++)
+ if ((intel_dp->train_set[i] & DP_TRAIN_MAX_SWING_REACHED) == 0)
+ break;
+ if (i == intel_dp->lane_count) {
+ ++loop_tries;
+ if (loop_tries == 5) {
+ DRM_DEBUG_KMS("too many full retries, give up\n");
+ break;
+ }
+ memset(intel_dp->train_set, 0, 4);
+ voltage_tries = 0;
+ continue;
+ }
+
+ /* Check to see if we've tried the same voltage 5 times */
+ if ((intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK) == voltage) {
+ ++voltage_tries;
+ if (voltage_tries == 5) {
+ DRM_DEBUG_KMS("too many voltage retries, give up\n");
+ break;
+ }
+ } else
+ voltage_tries = 0;
+ voltage = intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK;
+
+ /* Compute new intel_dp->train_set as requested by target */
+ intel_get_adjust_train(intel_dp, link_status);
+ }
+
+ intel_dp->DP = DP;
+}
+
+static void
+intel_dp_complete_link_train(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ bool channel_eq = false;
+ int tries, cr_tries;
+ u32 reg;
+ uint32_t DP = intel_dp->DP;
+
+ /* channel equalization */
+ tries = 0;
+ cr_tries = 0;
+ channel_eq = false;
+ for (;;) {
+ /* Use intel_dp->train_set[0] to set the voltage and pre emphasis values */
+ uint32_t signal_levels;
+ uint8_t link_status[DP_LINK_STATUS_SIZE];
+
+ if (cr_tries > 5) {
+ DRM_ERROR("failed to train DP, aborting\n");
+ intel_dp_link_down(intel_dp);
+ break;
+ }
+
+ if (IS_GEN7(dev) && is_cpu_edp(intel_dp)) {
+ signal_levels = intel_gen7_edp_signal_levels(intel_dp->train_set[0]);
+ DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_IVB) | signal_levels;
+ } else if (IS_GEN6(dev) && is_cpu_edp(intel_dp)) {
+ signal_levels = intel_gen6_edp_signal_levels(intel_dp->train_set[0]);
+ DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_SNB) | signal_levels;
+ } else {
+ signal_levels = intel_dp_signal_levels(intel_dp->train_set[0]);
+ DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;
+ }
+
+ if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
+ reg = DP | DP_LINK_TRAIN_PAT_2_CPT;
+ else
+ reg = DP | DP_LINK_TRAIN_PAT_2;
+
+ /* channel eq pattern */
+ if (!intel_dp_set_link_train(intel_dp, reg,
+ DP_TRAINING_PATTERN_2))
+ break;
+
+ DELAY(400);
+ if (!intel_dp_get_link_status(intel_dp, link_status))
+ break;
+
+ /* Make sure clock is still ok */
+ if (!intel_clock_recovery_ok(link_status, intel_dp->lane_count)) {
+ intel_dp_start_link_train(intel_dp);
+ cr_tries++;
+ continue;
+ }
+
+ if (intel_channel_eq_ok(intel_dp, link_status)) {
+ channel_eq = true;
+ break;
+ }
+
+ /* Try 5 times, then try clock recovery if that fails */
+ if (tries > 5) {
+ intel_dp_link_down(intel_dp);
+ intel_dp_start_link_train(intel_dp);
+ tries = 0;
+ cr_tries++;
+ continue;
+ }
+
+ /* Compute new intel_dp->train_set as requested by target */
+ intel_get_adjust_train(intel_dp, link_status);
+ ++tries;
+ }
+
+ if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
+ reg = DP | DP_LINK_TRAIN_OFF_CPT;
+ else
+ reg = DP | DP_LINK_TRAIN_OFF;
+
+ I915_WRITE(intel_dp->output_reg, reg);
+ POSTING_READ(intel_dp->output_reg);
+ intel_dp_aux_native_write_1(intel_dp,
+ DP_TRAINING_PATTERN_SET, DP_TRAINING_PATTERN_DISABLE);
+}
+
+static void
+intel_dp_link_down(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t DP = intel_dp->DP;
+
+ if ((I915_READ(intel_dp->output_reg) & DP_PORT_EN) == 0)
+ return;
+
+ DRM_DEBUG_KMS("\n");
+
+ if (is_edp(intel_dp)) {
+ DP &= ~DP_PLL_ENABLE;
+ I915_WRITE(intel_dp->output_reg, DP);
+ POSTING_READ(intel_dp->output_reg);
+ DELAY(100);
+ }
+
+ if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp))) {
+ DP &= ~DP_LINK_TRAIN_MASK_CPT;
+ I915_WRITE(intel_dp->output_reg, DP | DP_LINK_TRAIN_PAT_IDLE_CPT);
+ } else {
+ DP &= ~DP_LINK_TRAIN_MASK;
+ I915_WRITE(intel_dp->output_reg, DP | DP_LINK_TRAIN_PAT_IDLE);
+ }
+ POSTING_READ(intel_dp->output_reg);
+
+ drm_msleep(17, "915dlo");
+
+ if (is_edp(intel_dp)) {
+ if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
+ DP |= DP_LINK_TRAIN_OFF_CPT;
+ else
+ DP |= DP_LINK_TRAIN_OFF;
+ }
+
+
+ if (!HAS_PCH_CPT(dev) &&
+ I915_READ(intel_dp->output_reg) & DP_PIPEB_SELECT) {
+ struct drm_crtc *crtc = intel_dp->base.base.crtc;
+
+ /* Hardware workaround: leaving our transcoder select
+ * set to transcoder B while it's off will prevent the
+ * corresponding HDMI output on transcoder A.
+ *
+ * Combine this with another hardware workaround:
+ * transcoder select bit can only be cleared while the
+ * port is enabled.
+ */
+ DP &= ~DP_PIPEB_SELECT;
+ I915_WRITE(intel_dp->output_reg, DP);
+
+ /* Changes to enable or select take place the vblank
+ * after being written.
+ */
+ if (crtc == NULL) {
+ /* We can arrive here never having been attached
+ * to a CRTC, for instance, due to inheriting
+ * random state from the BIOS.
+ *
+ * If the pipe is not running, play safe and
+ * wait for the clocks to stabilise before
+ * continuing.
+ */
+ POSTING_READ(intel_dp->output_reg);
+ drm_msleep(50, "915dla");
+ } else
+ intel_wait_for_vblank(dev, to_intel_crtc(crtc)->pipe);
+ }
+
+ DP &= ~DP_AUDIO_OUTPUT_ENABLE;
+ I915_WRITE(intel_dp->output_reg, DP & ~DP_PORT_EN);
+ POSTING_READ(intel_dp->output_reg);
+ drm_msleep(intel_dp->panel_power_down_delay, "915ldo");
+}
+
+static bool
+intel_dp_get_dpcd(struct intel_dp *intel_dp)
+{
+ if (intel_dp_aux_native_read_retry(intel_dp, 0x000, intel_dp->dpcd,
+ sizeof(intel_dp->dpcd)) &&
+ (intel_dp->dpcd[DP_DPCD_REV] != 0)) {
+ return true;
+ }
+
+ return false;
+}
+
+static bool
+intel_dp_get_sink_irq(struct intel_dp *intel_dp, u8 *sink_irq_vector)
+{
+ int ret;
+
+ ret = intel_dp_aux_native_read_retry(intel_dp,
+ DP_DEVICE_SERVICE_IRQ_VECTOR,
+ sink_irq_vector, 1);
+ if (!ret)
+ return false;
+
+ return true;
+}
+
+static void
+intel_dp_handle_test_request(struct intel_dp *intel_dp)
+{
+ /* NAK by default */
+ intel_dp_aux_native_write_1(intel_dp, DP_TEST_RESPONSE, DP_TEST_ACK);
+}
+
+/*
+ * According to DP spec
+ * 5.1.2:
+ * 1. Read DPCD
+ * 2. Configure link according to Receiver Capabilities
+ * 3. Use Link Training from 2.5.3.3 and 3.5.1.3
+ * 4. Check link status on receipt of hot-plug interrupt
+ */
+
+static void
+intel_dp_check_link_status(struct intel_dp *intel_dp)
+{
+ u8 sink_irq_vector;
+ u8 link_status[DP_LINK_STATUS_SIZE];
+
+ if (intel_dp->dpms_mode != DRM_MODE_DPMS_ON)
+ return;
+
+ if (!intel_dp->base.base.crtc)
+ return;
+
+ /* Try to read receiver status if the link appears to be up */
+ if (!intel_dp_get_link_status(intel_dp, link_status)) {
+ intel_dp_link_down(intel_dp);
+ return;
+ }
+
+ /* Now read the DPCD to see if it's actually running */
+ if (!intel_dp_get_dpcd(intel_dp)) {
+ intel_dp_link_down(intel_dp);
+ return;
+ }
+
+ /* Try to read the source of the interrupt */
+ if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
+ intel_dp_get_sink_irq(intel_dp, &sink_irq_vector)) {
+ /* Clear interrupt source */
+ intel_dp_aux_native_write_1(intel_dp,
+ DP_DEVICE_SERVICE_IRQ_VECTOR,
+ sink_irq_vector);
+
+ if (sink_irq_vector & DP_AUTOMATED_TEST_REQUEST)
+ intel_dp_handle_test_request(intel_dp);
+ if (sink_irq_vector & (DP_CP_IRQ | DP_SINK_SPECIFIC_IRQ))
+ DRM_DEBUG_KMS("CP or sink specific irq unhandled\n");
+ }
+
+ if (!intel_channel_eq_ok(intel_dp, link_status)) {
+ DRM_DEBUG_KMS("%s: channel EQ not ok, retraining\n",
+ drm_get_encoder_name(&intel_dp->base.base));
+ intel_dp_start_link_train(intel_dp);
+ intel_dp_complete_link_train(intel_dp);
+ }
+}
+
+static enum drm_connector_status
+intel_dp_detect_dpcd(struct intel_dp *intel_dp)
+{
+ if (intel_dp_get_dpcd(intel_dp))
+ return connector_status_connected;
+ return connector_status_disconnected;
+}
+
+static enum drm_connector_status
+ironlake_dp_detect(struct intel_dp *intel_dp)
+{
+ enum drm_connector_status status;
+
+ /* Can't disconnect eDP, but you can close the lid... */
+ if (is_edp(intel_dp)) {
+ status = intel_panel_detect(intel_dp->base.base.dev);
+ if (status == connector_status_unknown)
+ status = connector_status_connected;
+ return status;
+ }
+
+ return intel_dp_detect_dpcd(intel_dp);
+}
+
+static enum drm_connector_status
+g4x_dp_detect(struct intel_dp *intel_dp)
+{
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ uint32_t temp, bit;
+
+ switch (intel_dp->output_reg) {
+ case DP_B:
+ bit = DPB_HOTPLUG_INT_STATUS;
+ break;
+ case DP_C:
+ bit = DPC_HOTPLUG_INT_STATUS;
+ break;
+ case DP_D:
+ bit = DPD_HOTPLUG_INT_STATUS;
+ break;
+ default:
+ return connector_status_unknown;
+ }
+
+ temp = I915_READ(PORT_HOTPLUG_STAT);
+
+ if ((temp & bit) == 0)
+ return connector_status_disconnected;
+
+ return intel_dp_detect_dpcd(intel_dp);
+}
+
+static struct edid *
+intel_dp_get_edid(struct drm_connector *connector, device_t adapter)
+{
+ struct intel_dp *intel_dp = intel_attached_dp(connector);
+ struct edid *edid;
+
+ ironlake_edp_panel_vdd_on(intel_dp);
+ edid = drm_get_edid(connector, adapter);
+ ironlake_edp_panel_vdd_off(intel_dp, false);
+ return edid;
+}
+
+static int
+intel_dp_get_edid_modes(struct drm_connector *connector, device_t adapter)
+{
+ struct intel_dp *intel_dp = intel_attached_dp(connector);
+ int ret;
+
+ ironlake_edp_panel_vdd_on(intel_dp);
+ ret = intel_ddc_get_modes(connector, adapter);
+ ironlake_edp_panel_vdd_off(intel_dp, false);
+ return ret;
+}
+
+
+/**
+ * Uses CRT_HOTPLUG_EN and CRT_HOTPLUG_STAT to detect DP connection.
+ *
+ * \return true if DP port is connected.
+ * \return false if DP port is disconnected.
+ */
+static enum drm_connector_status
+intel_dp_detect(struct drm_connector *connector, bool force)
+{
+ struct intel_dp *intel_dp = intel_attached_dp(connector);
+ struct drm_device *dev = intel_dp->base.base.dev;
+ enum drm_connector_status status;
+ struct edid *edid = NULL;
+
+ intel_dp->has_audio = false;
+
+ if (HAS_PCH_SPLIT(dev))
+ status = ironlake_dp_detect(intel_dp);
+ else
+ status = g4x_dp_detect(intel_dp);
+ if (status != connector_status_connected)
+ return status;
+
+ if (intel_dp->force_audio != HDMI_AUDIO_AUTO) {
+ intel_dp->has_audio = (intel_dp->force_audio == HDMI_AUDIO_ON);
+ } else {
+ edid = intel_dp_get_edid(connector, intel_dp->adapter);
+ if (edid) {
+ intel_dp->has_audio = drm_detect_monitor_audio(edid);
+ connector->display_info.raw_edid = NULL;
+ free(edid, DRM_MEM_KMS);
+ }
+ }
+
+ return connector_status_connected;
+}
+
+static int intel_dp_get_modes(struct drm_connector *connector)
+{
+ struct intel_dp *intel_dp = intel_attached_dp(connector);
+ struct drm_device *dev = intel_dp->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int ret;
+
+ /* We should parse the EDID data and find out if it has an audio sink
+ */
+
+ ret = intel_dp_get_edid_modes(connector, intel_dp->adapter);
+ if (ret) {
+ if (is_edp(intel_dp) && !intel_dp->panel_fixed_mode) {
+ struct drm_display_mode *newmode;
+ list_for_each_entry(newmode, &connector->probed_modes,
+ head) {
+ if ((newmode->type & DRM_MODE_TYPE_PREFERRED)) {
+ intel_dp->panel_fixed_mode =
+ drm_mode_duplicate(dev, newmode);
+ break;
+ }
+ }
+ }
+ return ret;
+ }
+
+ /* if eDP has no EDID, try to use fixed panel mode from VBT */
+ if (is_edp(intel_dp)) {
+ /* initialize panel mode from VBT if available for eDP */
+ if (intel_dp->panel_fixed_mode == NULL && dev_priv->lfp_lvds_vbt_mode != NULL) {
+ intel_dp->panel_fixed_mode =
+ drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
+ if (intel_dp->panel_fixed_mode) {
+ intel_dp->panel_fixed_mode->type |=
+ DRM_MODE_TYPE_PREFERRED;
+ }
+ }
+ if (intel_dp->panel_fixed_mode) {
+ struct drm_display_mode *mode;
+ mode = drm_mode_duplicate(dev, intel_dp->panel_fixed_mode);
+ drm_mode_probed_add(connector, mode);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static bool
+intel_dp_detect_audio(struct drm_connector *connector)
+{
+ struct intel_dp *intel_dp = intel_attached_dp(connector);
+ struct edid *edid;
+ bool has_audio = false;
+
+ edid = intel_dp_get_edid(connector, intel_dp->adapter);
+ if (edid) {
+ has_audio = drm_detect_monitor_audio(edid);
+
+ connector->display_info.raw_edid = NULL;
+ free(edid, DRM_MEM_KMS);
+ }
+
+ return has_audio;
+}
+
+static int
+intel_dp_set_property(struct drm_connector *connector,
+ struct drm_property *property,
+ uint64_t val)
+{
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+ struct intel_dp *intel_dp = intel_attached_dp(connector);
+ int ret;
+
+ ret = drm_connector_property_set_value(connector, property, val);
+ if (ret)
+ return ret;
+
+ if (property == dev_priv->force_audio_property) {
+ int i = val;
+ bool has_audio;
+
+ if (i == intel_dp->force_audio)
+ return 0;
+
+ intel_dp->force_audio = i;
+
+ if (i == HDMI_AUDIO_AUTO)
+ has_audio = intel_dp_detect_audio(connector);
+ else
+ has_audio = (i == HDMI_AUDIO_ON);
+
+ if (has_audio == intel_dp->has_audio)
+ return 0;
+
+ intel_dp->has_audio = has_audio;
+ goto done;
+ }
+
+ if (property == dev_priv->broadcast_rgb_property) {
+ if (val == !!intel_dp->color_range)
+ return 0;
+
+ intel_dp->color_range = val ? DP_COLOR_RANGE_16_235 : 0;
+ goto done;
+ }
+
+ return -EINVAL;
+
+done:
+ if (intel_dp->base.base.crtc) {
+ struct drm_crtc *crtc = intel_dp->base.base.crtc;
+ drm_crtc_helper_set_mode(crtc, &crtc->mode,
+ crtc->x, crtc->y,
+ crtc->fb);
+ }
+
+ return 0;
+}
+
+static void
+intel_dp_destroy(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+
+ if (intel_dpd_is_edp(dev))
+ intel_panel_destroy_backlight(dev);
+
+#if 0
+ drm_sysfs_connector_remove(connector);
+#endif
+ drm_connector_cleanup(connector);
+ free(connector, DRM_MEM_KMS);
+}
+
+static void intel_dp_encoder_destroy(struct drm_encoder *encoder)
+{
+ struct drm_device *dev;
+ struct intel_dp *intel_dp;
+
+ intel_dp = enc_to_intel_dp(encoder);
+ dev = encoder->dev;
+
+ if (intel_dp->dp_iic_bus != NULL) {
+ if (intel_dp->adapter != NULL) {
+ device_delete_child(intel_dp->dp_iic_bus,
+ intel_dp->adapter);
+ }
+ device_delete_child(dev->device, intel_dp->dp_iic_bus);
+ }
+ drm_encoder_cleanup(encoder);
+ if (is_edp(intel_dp)) {
+ struct drm_i915_private *dev_priv = intel_dp->base.base.dev->dev_private;
+
+ taskqueue_cancel_timeout(dev_priv->tq,
+ &intel_dp->panel_vdd_task, NULL);
+ taskqueue_drain_timeout(dev_priv->tq,
+ &intel_dp->panel_vdd_task);
+ ironlake_panel_vdd_off_sync(intel_dp);
+ }
+ free(intel_dp, DRM_MEM_KMS);
+}
+
+static const struct drm_encoder_helper_funcs intel_dp_helper_funcs = {
+ .dpms = intel_dp_dpms,
+ .mode_fixup = intel_dp_mode_fixup,
+ .prepare = intel_dp_prepare,
+ .mode_set = intel_dp_mode_set,
+ .commit = intel_dp_commit,
+};
+
+static const struct drm_connector_funcs intel_dp_connector_funcs = {
+ .dpms = drm_helper_connector_dpms,
+ .detect = intel_dp_detect,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+ .set_property = intel_dp_set_property,
+ .destroy = intel_dp_destroy,
+};
+
+static const struct drm_connector_helper_funcs intel_dp_connector_helper_funcs = {
+ .get_modes = intel_dp_get_modes,
+ .mode_valid = intel_dp_mode_valid,
+ .best_encoder = intel_best_encoder,
+};
+
+static const struct drm_encoder_funcs intel_dp_enc_funcs = {
+ .destroy = intel_dp_encoder_destroy,
+};
+
+static void
+intel_dp_hot_plug(struct intel_encoder *intel_encoder)
+{
+ struct intel_dp *intel_dp = container_of(intel_encoder, struct intel_dp, base);
+
+ intel_dp_check_link_status(intel_dp);
+}
+
+/* Return which DP Port should be selected for Transcoder DP control */
+int
+intel_trans_dp_port_sel(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_mode_config *mode_config = &dev->mode_config;
+ struct drm_encoder *encoder;
+
+ list_for_each_entry(encoder, &mode_config->encoder_list, head) {
+ struct intel_dp *intel_dp;
+
+ if (encoder->crtc != crtc)
+ continue;
+
+ intel_dp = enc_to_intel_dp(encoder);
+ if (intel_dp->base.type == INTEL_OUTPUT_DISPLAYPORT ||
+ intel_dp->base.type == INTEL_OUTPUT_EDP)
+ return intel_dp->output_reg;
+ }
+
+ return -1;
+}
+
+/* check the VBT to see whether the eDP is on DP-D port */
+bool intel_dpd_is_edp(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct child_device_config *p_child;
+ int i;
+
+ if (!dev_priv->child_dev_num)
+ return false;
+
+ for (i = 0; i < dev_priv->child_dev_num; i++) {
+ p_child = dev_priv->child_dev + i;
+
+ if (p_child->dvo_port == PORT_IDPD &&
+ p_child->device_type == DEVICE_TYPE_eDP)
+ return true;
+ }
+ return false;
+}
+
+static void
+intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connector)
+{
+ intel_attach_force_audio_property(connector);
+ intel_attach_broadcast_rgb_property(connector);
+}
+
+void
+intel_dp_init(struct drm_device *dev, int output_reg)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_connector *connector;
+ struct intel_dp *intel_dp;
+ struct intel_encoder *intel_encoder;
+ struct intel_connector *intel_connector;
+ const char *name = NULL;
+ int type;
+
+ intel_dp = malloc(sizeof(struct intel_dp), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ intel_dp->output_reg = output_reg;
+ intel_dp->dpms_mode = -1;
+
+ intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+ intel_encoder = &intel_dp->base;
+
+ if (HAS_PCH_SPLIT(dev) && output_reg == PCH_DP_D)
+ if (intel_dpd_is_edp(dev))
+ intel_dp->is_pch_edp = true;
+
+ if (output_reg == DP_A || is_pch_edp(intel_dp)) {
+ type = DRM_MODE_CONNECTOR_eDP;
+ intel_encoder->type = INTEL_OUTPUT_EDP;
+ } else {
+ type = DRM_MODE_CONNECTOR_DisplayPort;
+ intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
+ }
+
+ connector = &intel_connector->base;
+ drm_connector_init(dev, connector, &intel_dp_connector_funcs, type);
+ drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs);
+
+ connector->polled = DRM_CONNECTOR_POLL_HPD;
+
+ if (output_reg == DP_B || output_reg == PCH_DP_B)
+ intel_encoder->clone_mask = (1 << INTEL_DP_B_CLONE_BIT);
+ else if (output_reg == DP_C || output_reg == PCH_DP_C)
+ intel_encoder->clone_mask = (1 << INTEL_DP_C_CLONE_BIT);
+ else if (output_reg == DP_D || output_reg == PCH_DP_D)
+ intel_encoder->clone_mask = (1 << INTEL_DP_D_CLONE_BIT);
+
+ if (is_edp(intel_dp)) {
+ intel_encoder->clone_mask = (1 << INTEL_EDP_CLONE_BIT);
+ TIMEOUT_TASK_INIT(dev_priv->tq, &intel_dp->panel_vdd_task, 0,
+ ironlake_panel_vdd_work, intel_dp);
+ }
+
+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
+ connector->interlace_allowed = true;
+ connector->doublescan_allowed = 0;
+
+ drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs,
+ DRM_MODE_ENCODER_TMDS);
+ drm_encoder_helper_add(&intel_encoder->base, &intel_dp_helper_funcs);
+
+ intel_connector_attach_encoder(intel_connector, intel_encoder);
+#if 0
+ drm_sysfs_connector_add(connector);
+#endif
+
+ /* Set up the DDC bus. */
+ switch (output_reg) {
+ case DP_A:
+ name = "DPDDC-A";
+ break;
+ case DP_B:
+ case PCH_DP_B:
+ dev_priv->hotplug_supported_mask |=
+ HDMIB_HOTPLUG_INT_STATUS;
+ name = "DPDDC-B";
+ break;
+ case DP_C:
+ case PCH_DP_C:
+ dev_priv->hotplug_supported_mask |=
+ HDMIC_HOTPLUG_INT_STATUS;
+ name = "DPDDC-C";
+ break;
+ case DP_D:
+ case PCH_DP_D:
+ dev_priv->hotplug_supported_mask |=
+ HDMID_HOTPLUG_INT_STATUS;
+ name = "DPDDC-D";
+ break;
+ }
+
+ /* Cache some DPCD data in the eDP case */
+ if (is_edp(intel_dp)) {
+ bool ret;
+ struct edp_power_seq cur, vbt;
+ u32 pp_on, pp_off, pp_div;
+
+ pp_on = I915_READ(PCH_PP_ON_DELAYS);
+ pp_off = I915_READ(PCH_PP_OFF_DELAYS);
+ pp_div = I915_READ(PCH_PP_DIVISOR);
+
+ /* Pull timing values out of registers */
+ cur.t1_t3 = (pp_on & PANEL_POWER_UP_DELAY_MASK) >>
+ PANEL_POWER_UP_DELAY_SHIFT;
+
+ cur.t8 = (pp_on & PANEL_LIGHT_ON_DELAY_MASK) >>
+ PANEL_LIGHT_ON_DELAY_SHIFT;
+
+ cur.t9 = (pp_off & PANEL_LIGHT_OFF_DELAY_MASK) >>
+ PANEL_LIGHT_OFF_DELAY_SHIFT;
+
+ cur.t10 = (pp_off & PANEL_POWER_DOWN_DELAY_MASK) >>
+ PANEL_POWER_DOWN_DELAY_SHIFT;
+
+ cur.t11_t12 = ((pp_div & PANEL_POWER_CYCLE_DELAY_MASK) >>
+ PANEL_POWER_CYCLE_DELAY_SHIFT) * 1000;
+
+ DRM_DEBUG_KMS("cur t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
+ cur.t1_t3, cur.t8, cur.t9, cur.t10, cur.t11_t12);
+
+ vbt = dev_priv->edp.pps;
+
+ DRM_DEBUG_KMS("vbt t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
+ vbt.t1_t3, vbt.t8, vbt.t9, vbt.t10, vbt.t11_t12);
+
+#define get_delay(field) ((max(cur.field, vbt.field) + 9) / 10)
+
+ intel_dp->panel_power_up_delay = get_delay(t1_t3);
+ intel_dp->backlight_on_delay = get_delay(t8);
+ intel_dp->backlight_off_delay = get_delay(t9);
+ intel_dp->panel_power_down_delay = get_delay(t10);
+ intel_dp->panel_power_cycle_delay = get_delay(t11_t12);
+
+ DRM_DEBUG_KMS("panel power up delay %d, power down delay %d, power cycle delay %d\n",
+ intel_dp->panel_power_up_delay, intel_dp->panel_power_down_delay,
+ intel_dp->panel_power_cycle_delay);
+
+ DRM_DEBUG_KMS("backlight on delay %d, off delay %d\n",
+ intel_dp->backlight_on_delay, intel_dp->backlight_off_delay);
+
+ ironlake_edp_panel_vdd_on(intel_dp);
+ ret = intel_dp_get_dpcd(intel_dp);
+ ironlake_edp_panel_vdd_off(intel_dp, false);
+
+ if (ret) {
+ if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11)
+ dev_priv->no_aux_handshake =
+ intel_dp->dpcd[DP_MAX_DOWNSPREAD] &
+ DP_NO_AUX_HANDSHAKE_LINK_TRAINING;
+ } else {
+ /* if this fails, presume the device is a ghost */
+ DRM_INFO("failed to retrieve link info, disabling eDP\n");
+ intel_dp_encoder_destroy(&intel_dp->base.base);
+ intel_dp_destroy(&intel_connector->base);
+ return;
+ }
+ }
+
+ intel_dp_i2c_init(intel_dp, intel_connector, name);
+
+ intel_encoder->hot_plug = intel_dp_hot_plug;
+
+ if (is_edp(intel_dp)) {
+ dev_priv->int_edp_connector = connector;
+ intel_panel_setup_backlight(dev);
+ }
+
+ intel_dp_add_properties(intel_dp, connector);
+
+ /* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written
+ * 0xd. Failure to do so will result in spurious interrupts being
+ * generated on the port when a cable is not attached.
+ */
+ if (IS_G4X(dev) && !IS_GM45(dev)) {
+ u32 temp = I915_READ(PEG_BAND_GAP_DATA);
+ I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd);
+ }
+}
diff --git a/sys/dev/drm2/i915/intel_drv.h b/sys/dev/drm2/i915/intel_drv.h
new file mode 100644
index 000000000000..803966278c7b
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_drv.h
@@ -0,0 +1,428 @@
+/*
+ * Copyright (c) 2006 Dave Airlie <airlied@linux.ie>
+ * Copyright (c) 2007-2008 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ *
+ * 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 (including the next
+ * paragraph) 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 DRM_INTEL_DRV_H
+#define DRM_INTEL_DRV_H
+
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_crtc_helper.h>
+#include <dev/drm2/drm_fb_helper.h>
+
+#define _intel_wait_for(DEV, COND, MS, W, WMSG) \
+({ \
+ int end, ret; \
+ \
+ end = ticks + (MS) * hz / 1000; \
+ ret = 0; \
+ \
+ while (!(COND)) { \
+ if (time_after(ticks, end)) { \
+ ret = -ETIMEDOUT; \
+ break; \
+ } \
+ if (W) \
+ pause((WMSG), 1); \
+ else \
+ DELAY(1000); \
+ } \
+ \
+ ret; \
+})
+
+#define KHz(x) (1000*x)
+#define MHz(x) KHz(1000*x)
+
+/* store information about an Ixxx DVO */
+/* The i830->i865 use multiple DVOs with multiple i2cs */
+/* the i915, i945 have a single sDVO i2c bus - which is different */
+#define MAX_OUTPUTS 6
+/* maximum connectors per crtcs in the mode set */
+#define INTELFB_CONN_LIMIT 4
+
+#define INTEL_I2C_BUS_DVO 1
+#define INTEL_I2C_BUS_SDVO 2
+
+/* these are outputs from the chip - integrated only
+ external chips are via DVO or SDVO output */
+#define INTEL_OUTPUT_UNUSED 0
+#define INTEL_OUTPUT_ANALOG 1
+#define INTEL_OUTPUT_DVO 2
+#define INTEL_OUTPUT_SDVO 3
+#define INTEL_OUTPUT_LVDS 4
+#define INTEL_OUTPUT_TVOUT 5
+#define INTEL_OUTPUT_HDMI 6
+#define INTEL_OUTPUT_DISPLAYPORT 7
+#define INTEL_OUTPUT_EDP 8
+
+/* Intel Pipe Clone Bit */
+#define INTEL_HDMIB_CLONE_BIT 1
+#define INTEL_HDMIC_CLONE_BIT 2
+#define INTEL_HDMID_CLONE_BIT 3
+#define INTEL_HDMIE_CLONE_BIT 4
+#define INTEL_HDMIF_CLONE_BIT 5
+#define INTEL_SDVO_NON_TV_CLONE_BIT 6
+#define INTEL_SDVO_TV_CLONE_BIT 7
+#define INTEL_SDVO_LVDS_CLONE_BIT 8
+#define INTEL_ANALOG_CLONE_BIT 9
+#define INTEL_TV_CLONE_BIT 10
+#define INTEL_DP_B_CLONE_BIT 11
+#define INTEL_DP_C_CLONE_BIT 12
+#define INTEL_DP_D_CLONE_BIT 13
+#define INTEL_LVDS_CLONE_BIT 14
+#define INTEL_DVO_TMDS_CLONE_BIT 15
+#define INTEL_DVO_LVDS_CLONE_BIT 16
+#define INTEL_EDP_CLONE_BIT 17
+
+#define INTEL_DVO_CHIP_NONE 0
+#define INTEL_DVO_CHIP_LVDS 1
+#define INTEL_DVO_CHIP_TMDS 2
+#define INTEL_DVO_CHIP_TVOUT 4
+
+/* drm_display_mode->private_flags */
+#define INTEL_MODE_PIXEL_MULTIPLIER_SHIFT (0x0)
+#define INTEL_MODE_PIXEL_MULTIPLIER_MASK (0xf << INTEL_MODE_PIXEL_MULTIPLIER_SHIFT)
+#define INTEL_MODE_DP_FORCE_6BPC (0x10)
+/* This flag must be set by the encoder's mode_fixup if it changes the crtc
+ * timings in the mode to prevent the crtc fixup from overwriting them.
+ * Currently only lvds needs that. */
+#define INTEL_MODE_CRTC_TIMINGS_SET (0x20)
+
+static inline void
+intel_mode_set_pixel_multiplier(struct drm_display_mode *mode,
+ int multiplier)
+{
+ mode->clock *= multiplier;
+ mode->private_flags |= multiplier;
+}
+
+static inline int
+intel_mode_get_pixel_multiplier(const struct drm_display_mode *mode)
+{
+ return (mode->private_flags & INTEL_MODE_PIXEL_MULTIPLIER_MASK) >> INTEL_MODE_PIXEL_MULTIPLIER_SHIFT;
+}
+
+struct intel_framebuffer {
+ struct drm_framebuffer base;
+ struct drm_i915_gem_object *obj;
+};
+
+struct intel_fbdev {
+ struct drm_fb_helper helper;
+ struct intel_framebuffer ifb;
+ struct list_head fbdev_list;
+ struct drm_display_mode *our_mode;
+};
+
+struct intel_encoder {
+ struct drm_encoder base;
+ int type;
+ bool needs_tv_clock;
+ void (*hot_plug)(struct intel_encoder *);
+ int crtc_mask;
+ int clone_mask;
+};
+
+struct intel_connector {
+ struct drm_connector base;
+ struct intel_encoder *encoder;
+};
+
+struct intel_crtc {
+ struct drm_crtc base;
+ enum pipe pipe;
+ enum plane plane;
+ u8 lut_r[256], lut_g[256], lut_b[256];
+ int dpms_mode;
+ bool active; /* is the crtc on? independent of the dpms mode */
+ bool busy; /* is scanout buffer being updated frequently? */
+ struct callout idle_callout;
+ bool lowfreq_avail;
+ struct intel_overlay *overlay;
+ struct intel_unpin_work *unpin_work;
+ int fdi_lanes;
+
+ struct drm_i915_gem_object *cursor_bo;
+ uint32_t cursor_addr;
+ int16_t cursor_x, cursor_y;
+ int16_t cursor_width, cursor_height;
+ bool cursor_visible;
+ unsigned int bpp;
+
+ bool no_pll; /* tertiary pipe for IVB */
+ bool use_pll_a;
+};
+
+struct intel_plane {
+ struct drm_plane base;
+ enum pipe pipe;
+ struct drm_i915_gem_object *obj;
+ bool primary_disabled;
+ int max_downscale;
+ u32 lut_r[1024], lut_g[1024], lut_b[1024];
+ void (*update_plane)(struct drm_plane *plane,
+ struct drm_framebuffer *fb,
+ struct drm_i915_gem_object *obj,
+ int crtc_x, int crtc_y,
+ unsigned int crtc_w, unsigned int crtc_h,
+ uint32_t x, uint32_t y,
+ uint32_t src_w, uint32_t src_h);
+ void (*disable_plane)(struct drm_plane *plane);
+ int (*update_colorkey)(struct drm_plane *plane,
+ struct drm_intel_sprite_colorkey *key);
+ void (*get_colorkey)(struct drm_plane *plane,
+ struct drm_intel_sprite_colorkey *key);
+};
+
+#define to_intel_crtc(x) container_of(x, struct intel_crtc, base)
+#define to_intel_connector(x) container_of(x, struct intel_connector, base)
+#define to_intel_encoder(x) container_of(x, struct intel_encoder, base)
+#define to_intel_framebuffer(x) container_of(x, struct intel_framebuffer, base)
+#define to_intel_plane(x) container_of(x, struct intel_plane, base)
+
+#define DIP_HEADER_SIZE 5
+
+#define DIP_TYPE_AVI 0x82
+#define DIP_VERSION_AVI 0x2
+#define DIP_LEN_AVI 13
+
+#define DIP_TYPE_SPD 0x83
+#define DIP_VERSION_SPD 0x1
+#define DIP_LEN_SPD 25
+#define DIP_SPD_UNKNOWN 0
+#define DIP_SPD_DSTB 0x1
+#define DIP_SPD_DVDP 0x2
+#define DIP_SPD_DVHS 0x3
+#define DIP_SPD_HDDVR 0x4
+#define DIP_SPD_DVC 0x5
+#define DIP_SPD_DSC 0x6
+#define DIP_SPD_VCD 0x7
+#define DIP_SPD_GAME 0x8
+#define DIP_SPD_PC 0x9
+#define DIP_SPD_BD 0xa
+#define DIP_SPD_SCD 0xb
+
+struct dip_infoframe {
+ uint8_t type; /* HB0 */
+ uint8_t ver; /* HB1 */
+ uint8_t len; /* HB2 - body len, not including checksum */
+ uint8_t ecc; /* Header ECC */
+ uint8_t checksum; /* PB0 */
+ union {
+ struct {
+ /* PB1 - Y 6:5, A 4:4, B 3:2, S 1:0 */
+ uint8_t Y_A_B_S;
+ /* PB2 - C 7:6, M 5:4, R 3:0 */
+ uint8_t C_M_R;
+ /* PB3 - ITC 7:7, EC 6:4, Q 3:2, SC 1:0 */
+ uint8_t ITC_EC_Q_SC;
+ /* PB4 - VIC 6:0 */
+ uint8_t VIC;
+ /* PB5 - PR 3:0 */
+ uint8_t PR;
+ /* PB6 to PB13 */
+ uint16_t top_bar_end;
+ uint16_t bottom_bar_start;
+ uint16_t left_bar_end;
+ uint16_t right_bar_start;
+ } avi;
+ struct {
+ uint8_t vn[8];
+ uint8_t pd[16];
+ uint8_t sdi;
+ } spd;
+ uint8_t payload[27];
+ } __attribute__ ((packed)) body;
+} __attribute__((packed));
+
+static inline struct drm_crtc *
+intel_get_crtc_for_pipe(struct drm_device *dev, int pipe)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ return dev_priv->pipe_to_crtc_mapping[pipe];
+}
+
+static inline struct drm_crtc *
+intel_get_crtc_for_plane(struct drm_device *dev, int plane)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ return dev_priv->plane_to_crtc_mapping[plane];
+}
+
+struct intel_unpin_work {
+ struct task task;
+ struct drm_device *dev;
+ struct drm_i915_gem_object *old_fb_obj;
+ struct drm_i915_gem_object *pending_flip_obj;
+ struct drm_pending_vblank_event *event;
+ int pending;
+ bool enable_stall_check;
+};
+
+struct intel_fbc_work {
+ struct timeout_task task;
+ struct drm_crtc *crtc;
+ struct drm_framebuffer *fb;
+ int interval;
+};
+
+int intel_ddc_get_modes(struct drm_connector *c, device_t adapter);
+extern bool intel_ddc_probe(struct intel_encoder *intel_encoder, int ddc_bus);
+
+extern void intel_attach_force_audio_property(struct drm_connector *connector);
+extern void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
+
+extern void intel_crt_init(struct drm_device *dev);
+extern void intel_hdmi_init(struct drm_device *dev, int sdvox_reg);
+void intel_dip_infoframe_csum(struct dip_infoframe *avi_if);
+extern bool intel_sdvo_init(struct drm_device *dev, int output_device);
+extern void intel_dvo_init(struct drm_device *dev);
+extern void intel_tv_init(struct drm_device *dev);
+extern void intel_mark_busy(struct drm_device *dev,
+ struct drm_i915_gem_object *obj);
+extern bool intel_lvds_init(struct drm_device *dev);
+extern void intel_dp_init(struct drm_device *dev, int dp_reg);
+void
+intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+extern bool intel_dpd_is_edp(struct drm_device *dev);
+extern void intel_edp_link_config(struct intel_encoder *, int *, int *);
+extern bool intel_encoder_is_pch_edp(struct drm_encoder *encoder);
+extern int intel_plane_init(struct drm_device *dev, enum pipe pipe);
+
+/* intel_panel.c */
+extern void intel_fixed_panel_mode(struct drm_display_mode *fixed_mode,
+ struct drm_display_mode *adjusted_mode);
+extern void intel_pch_panel_fitting(struct drm_device *dev,
+ int fitting_mode,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+extern u32 intel_panel_get_max_backlight(struct drm_device *dev);
+extern u32 intel_panel_get_backlight(struct drm_device *dev);
+extern void intel_panel_set_backlight(struct drm_device *dev, u32 level);
+extern int intel_panel_setup_backlight(struct drm_device *dev);
+extern void intel_panel_enable_backlight(struct drm_device *dev);
+extern void intel_panel_disable_backlight(struct drm_device *dev);
+extern void intel_panel_destroy_backlight(struct drm_device *dev);
+extern enum drm_connector_status intel_panel_detect(struct drm_device *dev);
+
+extern void intel_crtc_load_lut(struct drm_crtc *crtc);
+extern void intel_encoder_prepare(struct drm_encoder *encoder);
+extern void intel_encoder_commit(struct drm_encoder *encoder);
+extern void intel_encoder_destroy(struct drm_encoder *encoder);
+
+static inline struct intel_encoder *intel_attached_encoder(struct drm_connector *connector)
+{
+ return to_intel_connector(connector)->encoder;
+}
+
+extern void intel_connector_attach_encoder(struct intel_connector *connector,
+ struct intel_encoder *encoder);
+extern struct drm_encoder *intel_best_encoder(struct drm_connector *connector);
+
+extern struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
+ struct drm_crtc *crtc);
+int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+extern void intel_wait_for_vblank(struct drm_device *dev, int pipe);
+extern void intel_wait_for_pipe_off(struct drm_device *dev, int pipe);
+
+struct intel_load_detect_pipe {
+ struct drm_framebuffer *release_fb;
+ bool load_detect_temp;
+ int dpms_mode;
+};
+extern bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
+ struct drm_connector *connector,
+ struct drm_display_mode *mode,
+ struct intel_load_detect_pipe *old);
+extern void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
+ struct drm_connector *connector,
+ struct intel_load_detect_pipe *old);
+
+extern void intelfb_restore(void);
+extern void intel_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
+ u16 blue, int regno);
+extern void intel_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
+ u16 *blue, int regno);
+extern void intel_enable_clock_gating(struct drm_device *dev);
+extern void ironlake_enable_drps(struct drm_device *dev);
+extern void ironlake_disable_drps(struct drm_device *dev);
+extern void gen6_enable_rps(struct drm_i915_private *dev_priv);
+extern void gen6_update_ring_freq(struct drm_i915_private *dev_priv);
+extern void gen6_disable_rps(struct drm_device *dev);
+extern void intel_init_emon(struct drm_device *dev);
+
+extern int intel_pin_and_fence_fb_obj(struct drm_device *dev,
+ struct drm_i915_gem_object *obj,
+ struct intel_ring_buffer *pipelined);
+extern void intel_unpin_fb_obj(struct drm_i915_gem_object *obj);
+
+extern int intel_framebuffer_init(struct drm_device *dev,
+ struct intel_framebuffer *ifb,
+ struct drm_mode_fb_cmd2 *mode_cmd,
+ struct drm_i915_gem_object *obj);
+extern int intel_fbdev_init(struct drm_device *dev);
+extern void intel_fbdev_fini(struct drm_device *dev);
+
+extern void intel_prepare_page_flip(struct drm_device *dev, int plane);
+extern void intel_finish_page_flip(struct drm_device *dev, int pipe);
+extern void intel_finish_page_flip_plane(struct drm_device *dev, int plane);
+
+extern void intel_setup_overlay(struct drm_device *dev);
+extern void intel_cleanup_overlay(struct drm_device *dev);
+extern int intel_overlay_switch_off(struct intel_overlay *overlay);
+extern int intel_overlay_put_image(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+extern int intel_overlay_attrs(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+extern void intel_fb_output_poll_changed(struct drm_device *dev);
+extern void intel_fb_restore_mode(struct drm_device *dev);
+
+extern void assert_pipe(struct drm_i915_private *dev_priv, enum pipe pipe,
+ bool state);
+#define assert_pipe_enabled(d, p) assert_pipe(d, p, true)
+#define assert_pipe_disabled(d, p) assert_pipe(d, p, false)
+
+extern void intel_init_clock_gating(struct drm_device *dev);
+extern void intel_write_eld(struct drm_encoder *encoder,
+ struct drm_display_mode *mode);
+extern void intel_cpt_verify_modeset(struct drm_device *dev, int pipe);
+
+/* For use by IVB LP watermark workaround in intel_sprite.c */
+extern void sandybridge_update_wm(struct drm_device *dev);
+extern void intel_update_sprite_watermarks(struct drm_device *dev, int pipe,
+ uint32_t sprite_width,
+ int pixel_size);
+extern int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+extern int intel_sprite_get_colorkey(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+
+#endif
diff --git a/sys/dev/drm2/i915/intel_fb.c b/sys/dev/drm2/i915/intel_fb.c
new file mode 100644
index 000000000000..3cb3b787c609
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_fb.c
@@ -0,0 +1,270 @@
+/*
+ * Copyright © 2007 David Airlie
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * David Airlie
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_fb_helper.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+
+static int intelfb_create(struct intel_fbdev *ifbdev,
+ struct drm_fb_helper_surface_size *sizes)
+{
+ struct drm_device *dev = ifbdev->helper.dev;
+#if 0
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct fb_info *info;
+#endif
+ struct drm_framebuffer *fb;
+ struct drm_mode_fb_cmd2 mode_cmd;
+ struct drm_i915_gem_object *obj;
+ int size, ret;
+
+ /* we don't do packed 24bpp */
+ if (sizes->surface_bpp == 24)
+ sizes->surface_bpp = 32;
+
+ mode_cmd.width = sizes->surface_width;
+ mode_cmd.height = sizes->surface_height;
+
+ mode_cmd.pitches[0] = roundup2(mode_cmd.width * ((sizes->surface_bpp + 7) /
+ 8), 64);
+ mode_cmd.pixel_format = drm_mode_legacy_fb_format(sizes->surface_bpp,
+ sizes->surface_depth);
+
+ size = mode_cmd.pitches[0] * mode_cmd.height;
+ size = roundup2(size, PAGE_SIZE);
+ obj = i915_gem_alloc_object(dev, size);
+ if (!obj) {
+ DRM_ERROR("failed to allocate framebuffer\n");
+ ret = -ENOMEM;
+ goto out;
+ }
+
+ DRM_LOCK(dev);
+
+ /* Flush everything out, we'll be doing GTT only from now on */
+ ret = intel_pin_and_fence_fb_obj(dev, obj, false);
+ if (ret) {
+ DRM_ERROR("failed to pin fb: %d\n", ret);
+ goto out_unref;
+ }
+
+#if 0
+ info = framebuffer_alloc(0, device);
+ if (!info) {
+ ret = -ENOMEM;
+ goto out_unpin;
+ }
+
+ info->par = ifbdev;
+#endif
+
+ ret = intel_framebuffer_init(dev, &ifbdev->ifb, &mode_cmd, obj);
+ if (ret)
+ goto out_unpin;
+
+ fb = &ifbdev->ifb.base;
+
+ ifbdev->helper.fb = fb;
+#if 0
+ ifbdev->helper.fbdev = info;
+
+ strcpy(info->fix.id, "inteldrmfb");
+
+ info->flags = FBINFO_DEFAULT | FBINFO_CAN_FORCE_OUTPUT;
+ info->fbops = &intelfb_ops;
+
+ ret = fb_alloc_cmap(&info->cmap, 256, 0);
+ if (ret) {
+ ret = -ENOMEM;
+ goto out_unpin;
+ }
+ /* setup aperture base/size for vesafb takeover */
+ info->apertures = alloc_apertures(1);
+ if (!info->apertures) {
+ ret = -ENOMEM;
+ goto out_unpin;
+ }
+ info->apertures->ranges[0].base = dev->mode_config.fb_base;
+ info->apertures->ranges[0].size =
+ dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
+
+ info->fix.smem_start = dev->mode_config.fb_base + obj->gtt_offset;
+ info->fix.smem_len = size;
+
+ info->screen_base = ioremap_wc(dev->agp->base + obj->gtt_offset, size);
+ if (!info->screen_base) {
+ ret = -ENOSPC;
+ goto out_unpin;
+ }
+ info->screen_size = size;
+
+// memset(info->screen_base, 0, size);
+
+ drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth);
+ drm_fb_helper_fill_var(info, &ifbdev->helper, sizes->fb_width, sizes->fb_height);
+
+ /* Use default scratch pixmap (info->pixmap.flags = FB_PIXMAP_SYSTEM) */
+#endif
+
+ DRM_DEBUG_KMS("allocated %dx%d fb: 0x%08x, bo %p\n",
+ fb->width, fb->height,
+ obj->gtt_offset, obj);
+
+ DRM_UNLOCK(dev);
+#if 1
+ KIB_NOTYET();
+#else
+ vga_switcheroo_client_fb_set(dev->pdev, info);
+#endif
+ return 0;
+
+out_unpin:
+ i915_gem_object_unpin(obj);
+out_unref:
+ drm_gem_object_unreference(&obj->base);
+ DRM_UNLOCK(dev);
+out:
+ return ret;
+}
+
+static int intel_fb_find_or_create_single(struct drm_fb_helper *helper,
+ struct drm_fb_helper_surface_size *sizes)
+{
+ struct intel_fbdev *ifbdev = (struct intel_fbdev *)helper;
+ int new_fb = 0;
+ int ret;
+
+ if (!helper->fb) {
+ ret = intelfb_create(ifbdev, sizes);
+ if (ret)
+ return ret;
+ new_fb = 1;
+ }
+ return new_fb;
+}
+
+static struct drm_fb_helper_funcs intel_fb_helper_funcs = {
+ .gamma_set = intel_crtc_fb_gamma_set,
+ .gamma_get = intel_crtc_fb_gamma_get,
+ .fb_probe = intel_fb_find_or_create_single,
+};
+
+static void intel_fbdev_destroy(struct drm_device *dev,
+ struct intel_fbdev *ifbdev)
+{
+#if 0
+ struct fb_info *info;
+#endif
+ struct intel_framebuffer *ifb = &ifbdev->ifb;
+
+#if 0
+ if (ifbdev->helper.fbdev) {
+ info = ifbdev->helper.fbdev;
+ unregister_framebuffer(info);
+ iounmap(info->screen_base);
+ if (info->cmap.len)
+ fb_dealloc_cmap(&info->cmap);
+ framebuffer_release(info);
+ }
+#endif
+
+ drm_fb_helper_fini(&ifbdev->helper);
+
+ drm_framebuffer_cleanup(&ifb->base);
+ if (ifb->obj) {
+ drm_gem_object_unreference_unlocked(&ifb->obj->base);
+ ifb->obj = NULL;
+ }
+}
+
+int intel_fbdev_init(struct drm_device *dev)
+{
+ struct intel_fbdev *ifbdev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int ret;
+
+ ifbdev = malloc(sizeof(struct intel_fbdev), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ dev_priv->fbdev = ifbdev;
+ ifbdev->helper.funcs = &intel_fb_helper_funcs;
+
+ ret = drm_fb_helper_init(dev, &ifbdev->helper,
+ dev_priv->num_pipe,
+ INTELFB_CONN_LIMIT);
+ if (ret) {
+ free(ifbdev, DRM_MEM_KMS);
+ return ret;
+ }
+
+ drm_fb_helper_single_add_all_connectors(&ifbdev->helper);
+ drm_fb_helper_initial_config(&ifbdev->helper, 32);
+ return 0;
+}
+
+void intel_fbdev_fini(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ if (!dev_priv->fbdev)
+ return;
+
+ intel_fbdev_destroy(dev, dev_priv->fbdev);
+ free(dev_priv->fbdev, DRM_MEM_KMS);
+ dev_priv->fbdev = NULL;
+}
+
+void intel_fb_output_poll_changed(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper);
+}
+
+void intel_fb_restore_mode(struct drm_device *dev)
+{
+ int ret;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_mode_config *config = &dev->mode_config;
+ struct drm_plane *plane;
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ ret = drm_fb_helper_restore_fbdev_mode(&dev_priv->fbdev->helper);
+ if (ret)
+ DRM_DEBUG("failed to restore crtc mode\n");
+
+ /* Be sure to shut off any planes that may be active */
+ list_for_each_entry(plane, &config->plane_list, head)
+ plane->funcs->disable_plane(plane);
+
+ sx_xunlock(&dev->mode_config.mutex);
+}
diff --git a/sys/dev/drm2/i915/intel_hdmi.c b/sys/dev/drm2/i915/intel_hdmi.c
new file mode 100644
index 000000000000..ccb9dced597a
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_hdmi.c
@@ -0,0 +1,576 @@
+/*
+ * Copyright 2006 Dave Airlie <airlied@linux.ie>
+ * Copyright © 2006-2009 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ * Jesse Barnes <jesse.barnes@intel.com>
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+
+struct intel_hdmi {
+ struct intel_encoder base;
+ u32 sdvox_reg;
+ int ddc_bus;
+ uint32_t color_range;
+ bool has_hdmi_sink;
+ bool has_audio;
+ enum hdmi_force_audio force_audio;
+ void (*write_infoframe)(struct drm_encoder *encoder,
+ struct dip_infoframe *frame);
+};
+
+static struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder)
+{
+ return container_of(encoder, struct intel_hdmi, base.base);
+}
+
+static struct intel_hdmi *intel_attached_hdmi(struct drm_connector *connector)
+{
+ return container_of(intel_attached_encoder(connector),
+ struct intel_hdmi, base);
+}
+
+void intel_dip_infoframe_csum(struct dip_infoframe *frame)
+{
+ uint8_t *data = (uint8_t *)frame;
+ uint8_t sum = 0;
+ unsigned i;
+
+ frame->checksum = 0;
+ frame->ecc = 0;
+
+ for (i = 0; i < frame->len + DIP_HEADER_SIZE; i++)
+ sum += data[i];
+
+ frame->checksum = 0x100 - sum;
+}
+
+static u32 intel_infoframe_index(struct dip_infoframe *frame)
+{
+ u32 flags = 0;
+
+ switch (frame->type) {
+ case DIP_TYPE_AVI:
+ flags |= VIDEO_DIP_SELECT_AVI;
+ break;
+ case DIP_TYPE_SPD:
+ flags |= VIDEO_DIP_SELECT_SPD;
+ break;
+ default:
+ DRM_DEBUG("unknown info frame type %d\n", frame->type);
+ break;
+ }
+
+ return flags;
+}
+
+static u32 intel_infoframe_flags(struct dip_infoframe *frame)
+{
+ u32 flags = 0;
+
+ switch (frame->type) {
+ case DIP_TYPE_AVI:
+ flags |= VIDEO_DIP_ENABLE_AVI | VIDEO_DIP_FREQ_VSYNC;
+ break;
+ case DIP_TYPE_SPD:
+ flags |= VIDEO_DIP_ENABLE_SPD | VIDEO_DIP_FREQ_VSYNC;
+ break;
+ default:
+ DRM_DEBUG("unknown info frame type %d\n", frame->type);
+ break;
+ }
+
+ return flags;
+}
+
+static void i9xx_write_infoframe(struct drm_encoder *encoder,
+ struct dip_infoframe *frame)
+{
+ uint32_t *data = (uint32_t *)frame;
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+ u32 port, flags, val = I915_READ(VIDEO_DIP_CTL);
+ unsigned i, len = DIP_HEADER_SIZE + frame->len;
+
+
+ /* XXX first guess at handling video port, is this corrent? */
+ if (intel_hdmi->sdvox_reg == SDVOB)
+ port = VIDEO_DIP_PORT_B;
+ else if (intel_hdmi->sdvox_reg == SDVOC)
+ port = VIDEO_DIP_PORT_C;
+ else
+ return;
+
+ flags = intel_infoframe_index(frame);
+
+ val &= ~VIDEO_DIP_SELECT_MASK;
+
+ I915_WRITE(VIDEO_DIP_CTL, VIDEO_DIP_ENABLE | val | port | flags);
+
+ for (i = 0; i < len; i += 4) {
+ I915_WRITE(VIDEO_DIP_DATA, *data);
+ data++;
+ }
+
+ flags |= intel_infoframe_flags(frame);
+
+ I915_WRITE(VIDEO_DIP_CTL, VIDEO_DIP_ENABLE | val | port | flags);
+}
+
+static void ironlake_write_infoframe(struct drm_encoder *encoder,
+ struct dip_infoframe *frame)
+{
+ uint32_t *data = (uint32_t *)frame;
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = encoder->crtc;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int reg = TVIDEO_DIP_CTL(intel_crtc->pipe);
+ unsigned i, len = DIP_HEADER_SIZE + frame->len;
+ u32 flags, val = I915_READ(reg);
+
+ intel_wait_for_vblank(dev, intel_crtc->pipe);
+
+ flags = intel_infoframe_index(frame);
+
+ val &= ~(VIDEO_DIP_SELECT_MASK | 0xf); /* clear DIP data offset */
+
+ I915_WRITE(reg, VIDEO_DIP_ENABLE | val | flags);
+
+ for (i = 0; i < len; i += 4) {
+ I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), *data);
+ data++;
+ }
+
+ flags |= intel_infoframe_flags(frame);
+
+ I915_WRITE(reg, VIDEO_DIP_ENABLE | val | flags);
+}
+
+static void intel_set_infoframe(struct drm_encoder *encoder,
+ struct dip_infoframe *frame)
+{
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+
+ if (!intel_hdmi->has_hdmi_sink)
+ return;
+
+ intel_dip_infoframe_csum(frame);
+ intel_hdmi->write_infoframe(encoder, frame);
+}
+
+static void intel_hdmi_set_avi_infoframe(struct drm_encoder *encoder)
+{
+ struct dip_infoframe avi_if = {
+ .type = DIP_TYPE_AVI,
+ .ver = DIP_VERSION_AVI,
+ .len = DIP_LEN_AVI,
+ };
+
+ intel_set_infoframe(encoder, &avi_if);
+}
+
+static void intel_hdmi_set_spd_infoframe(struct drm_encoder *encoder)
+{
+ struct dip_infoframe spd_if;
+
+ memset(&spd_if, 0, sizeof(spd_if));
+ spd_if.type = DIP_TYPE_SPD;
+ spd_if.ver = DIP_VERSION_SPD;
+ spd_if.len = DIP_LEN_SPD;
+ strcpy(spd_if.body.spd.vn, "Intel");
+ strcpy(spd_if.body.spd.pd, "Integrated gfx");
+ spd_if.body.spd.sdi = DIP_SPD_PC;
+
+ intel_set_infoframe(encoder, &spd_if);
+}
+
+static void intel_hdmi_mode_set(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = encoder->crtc;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+ u32 sdvox;
+
+ sdvox = SDVO_ENCODING_HDMI | SDVO_BORDER_ENABLE;
+ if (!HAS_PCH_SPLIT(dev))
+ sdvox |= intel_hdmi->color_range;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
+ sdvox |= SDVO_VSYNC_ACTIVE_HIGH;
+ if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
+ sdvox |= SDVO_HSYNC_ACTIVE_HIGH;
+
+ if (intel_crtc->bpp > 24)
+ sdvox |= COLOR_FORMAT_12bpc;
+ else
+ sdvox |= COLOR_FORMAT_8bpc;
+
+ /* Required on CPT */
+ if (intel_hdmi->has_hdmi_sink && HAS_PCH_CPT(dev))
+ sdvox |= HDMI_MODE_SELECT;
+
+ if (intel_hdmi->has_audio) {
+ DRM_DEBUG_KMS("Enabling HDMI audio on pipe %c\n",
+ pipe_name(intel_crtc->pipe));
+ sdvox |= SDVO_AUDIO_ENABLE;
+ sdvox |= SDVO_NULL_PACKETS_DURING_VSYNC;
+ intel_write_eld(encoder, adjusted_mode);
+ }
+
+ if (HAS_PCH_CPT(dev))
+ sdvox |= PORT_TRANS_SEL_CPT(intel_crtc->pipe);
+ else if (intel_crtc->pipe == 1)
+ sdvox |= SDVO_PIPE_B_SELECT;
+
+ I915_WRITE(intel_hdmi->sdvox_reg, sdvox);
+ POSTING_READ(intel_hdmi->sdvox_reg);
+
+ intel_hdmi_set_avi_infoframe(encoder);
+ intel_hdmi_set_spd_infoframe(encoder);
+}
+
+static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+ u32 temp;
+ u32 enable_bits = SDVO_ENABLE;
+
+ if (intel_hdmi->has_audio)
+ enable_bits |= SDVO_AUDIO_ENABLE;
+
+ temp = I915_READ(intel_hdmi->sdvox_reg);
+
+ /* HW workaround, need to toggle enable bit off and on for 12bpc, but
+ * we do this anyway which shows more stable in testing.
+ */
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(intel_hdmi->sdvox_reg, temp & ~SDVO_ENABLE);
+ POSTING_READ(intel_hdmi->sdvox_reg);
+ }
+
+ if (mode != DRM_MODE_DPMS_ON) {
+ temp &= ~enable_bits;
+ } else {
+ temp |= enable_bits;
+ }
+
+ I915_WRITE(intel_hdmi->sdvox_reg, temp);
+ POSTING_READ(intel_hdmi->sdvox_reg);
+
+ /* HW workaround, need to write this twice for issue that may result
+ * in first write getting masked.
+ */
+ if (HAS_PCH_SPLIT(dev)) {
+ I915_WRITE(intel_hdmi->sdvox_reg, temp);
+ POSTING_READ(intel_hdmi->sdvox_reg);
+ }
+}
+
+static int intel_hdmi_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ if (mode->clock > 165000)
+ return MODE_CLOCK_HIGH;
+ if (mode->clock < 20000)
+ return MODE_CLOCK_LOW;
+
+ if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
+ return MODE_NO_DBLESCAN;
+
+ return MODE_OK;
+}
+
+static bool intel_hdmi_mode_fixup(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ return true;
+}
+
+static enum drm_connector_status
+intel_hdmi_detect(struct drm_connector *connector, bool force)
+{
+ struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+ struct edid *edid;
+ enum drm_connector_status status = connector_status_disconnected;
+
+ intel_hdmi->has_hdmi_sink = false;
+ intel_hdmi->has_audio = false;
+ edid = drm_get_edid(connector, dev_priv->gmbus[intel_hdmi->ddc_bus]);
+
+ if (edid) {
+ if (edid->input & DRM_EDID_INPUT_DIGITAL) {
+ status = connector_status_connected;
+ if (intel_hdmi->force_audio != HDMI_AUDIO_OFF_DVI)
+ intel_hdmi->has_hdmi_sink =
+ drm_detect_hdmi_monitor(edid);
+ intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
+ }
+ connector->display_info.raw_edid = NULL;
+ free(edid, DRM_MEM_KMS);
+ } else {
+ DRM_DEBUG_KMS("[CONNECTOR:%d:%s] got no edid, ddc port %d\n",
+ connector->base.id, drm_get_connector_name(connector),
+ intel_hdmi->ddc_bus);
+ }
+
+ if (status == connector_status_connected) {
+ if (intel_hdmi->force_audio != HDMI_AUDIO_AUTO)
+ intel_hdmi->has_audio =
+ (intel_hdmi->force_audio == HDMI_AUDIO_ON);
+ }
+
+ return status;
+}
+
+static int intel_hdmi_get_modes(struct drm_connector *connector)
+{
+ struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+
+ /* We should parse the EDID data and find out if it's an HDMI sink so
+ * we can send audio to it.
+ */
+
+ return intel_ddc_get_modes(connector,
+ dev_priv->gmbus[intel_hdmi->ddc_bus]);
+}
+
+static bool
+intel_hdmi_detect_audio(struct drm_connector *connector)
+{
+ struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+ struct edid *edid;
+ bool has_audio = false;
+
+ edid = drm_get_edid(connector, dev_priv->gmbus[intel_hdmi->ddc_bus]);
+ if (edid) {
+ if (edid->input & DRM_EDID_INPUT_DIGITAL)
+ has_audio = drm_detect_monitor_audio(edid);
+
+ connector->display_info.raw_edid = NULL;
+ free(edid, DRM_MEM_KMS);
+ }
+
+ return has_audio;
+}
+
+static int
+intel_hdmi_set_property(struct drm_connector *connector,
+ struct drm_property *property,
+ uint64_t val)
+{
+ struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+ int ret;
+
+ ret = drm_connector_property_set_value(connector, property, val);
+ if (ret)
+ return ret;
+
+ if (property == dev_priv->force_audio_property) {
+ enum hdmi_force_audio i = val;
+ bool has_audio;
+
+ if (i == intel_hdmi->force_audio)
+ return 0;
+
+ intel_hdmi->force_audio = i;
+
+ if (i == HDMI_AUDIO_AUTO)
+ has_audio = intel_hdmi_detect_audio(connector);
+ else
+ has_audio = (i == HDMI_AUDIO_ON);
+
+ if (i == HDMI_AUDIO_OFF_DVI)
+ intel_hdmi->has_hdmi_sink = 0;
+
+ intel_hdmi->has_audio = has_audio;
+ goto done;
+ }
+
+ if (property == dev_priv->broadcast_rgb_property) {
+ if (val == !!intel_hdmi->color_range)
+ return 0;
+
+ intel_hdmi->color_range = val ? SDVO_COLOR_RANGE_16_235 : 0;
+ goto done;
+ }
+
+ return -EINVAL;
+
+done:
+ if (intel_hdmi->base.base.crtc) {
+ struct drm_crtc *crtc = intel_hdmi->base.base.crtc;
+ drm_crtc_helper_set_mode(crtc, &crtc->mode,
+ crtc->x, crtc->y,
+ crtc->fb);
+ }
+
+ return 0;
+}
+
+static void intel_hdmi_destroy(struct drm_connector *connector)
+{
+#if 0
+ drm_sysfs_connector_remove(connector);
+#endif
+ drm_connector_cleanup(connector);
+ free(connector, DRM_MEM_KMS);
+}
+
+static const struct drm_encoder_helper_funcs intel_hdmi_helper_funcs = {
+ .dpms = intel_hdmi_dpms,
+ .mode_fixup = intel_hdmi_mode_fixup,
+ .prepare = intel_encoder_prepare,
+ .mode_set = intel_hdmi_mode_set,
+ .commit = intel_encoder_commit,
+};
+
+static const struct drm_connector_funcs intel_hdmi_connector_funcs = {
+ .dpms = drm_helper_connector_dpms,
+ .detect = intel_hdmi_detect,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+ .set_property = intel_hdmi_set_property,
+ .destroy = intel_hdmi_destroy,
+};
+
+static const struct drm_connector_helper_funcs intel_hdmi_connector_helper_funcs = {
+ .get_modes = intel_hdmi_get_modes,
+ .mode_valid = intel_hdmi_mode_valid,
+ .best_encoder = intel_best_encoder,
+};
+
+static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
+ .destroy = intel_encoder_destroy,
+};
+
+static void
+intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *connector)
+{
+ intel_attach_force_audio_property(connector);
+ intel_attach_broadcast_rgb_property(connector);
+}
+
+void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_connector *connector;
+ struct intel_encoder *intel_encoder;
+ struct intel_connector *intel_connector;
+ struct intel_hdmi *intel_hdmi;
+ int i;
+
+ intel_hdmi = malloc(sizeof(struct intel_hdmi), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+ intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ intel_encoder = &intel_hdmi->base;
+ drm_encoder_init(dev, &intel_encoder->base, &intel_hdmi_enc_funcs,
+ DRM_MODE_ENCODER_TMDS);
+
+ connector = &intel_connector->base;
+ drm_connector_init(dev, connector, &intel_hdmi_connector_funcs,
+ DRM_MODE_CONNECTOR_HDMIA);
+ drm_connector_helper_add(connector, &intel_hdmi_connector_helper_funcs);
+
+ intel_encoder->type = INTEL_OUTPUT_HDMI;
+
+ connector->polled = DRM_CONNECTOR_POLL_HPD;
+ connector->interlace_allowed = 1;
+ connector->doublescan_allowed = 0;
+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
+
+ /* Set up the DDC bus. */
+ if (sdvox_reg == SDVOB) {
+ intel_encoder->clone_mask = (1 << INTEL_HDMIB_CLONE_BIT);
+ intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
+ dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
+ } else if (sdvox_reg == SDVOC) {
+ intel_encoder->clone_mask = (1 << INTEL_HDMIC_CLONE_BIT);
+ intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
+ dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
+ } else if (sdvox_reg == HDMIB) {
+ intel_encoder->clone_mask = (1 << INTEL_HDMID_CLONE_BIT);
+ intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
+ dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
+ } else if (sdvox_reg == HDMIC) {
+ intel_encoder->clone_mask = (1 << INTEL_HDMIE_CLONE_BIT);
+ intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
+ dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
+ } else if (sdvox_reg == HDMID) {
+ intel_encoder->clone_mask = (1 << INTEL_HDMIF_CLONE_BIT);
+ intel_hdmi->ddc_bus = GMBUS_PORT_DPD;
+ dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS;
+ }
+
+
+ intel_hdmi->sdvox_reg = sdvox_reg;
+
+ if (!HAS_PCH_SPLIT(dev)) {
+ intel_hdmi->write_infoframe = i9xx_write_infoframe;
+ I915_WRITE(VIDEO_DIP_CTL, 0);
+ } else {
+ intel_hdmi->write_infoframe = ironlake_write_infoframe;
+ for_each_pipe(i)
+ I915_WRITE(TVIDEO_DIP_CTL(i), 0);
+ }
+
+ drm_encoder_helper_add(&intel_encoder->base, &intel_hdmi_helper_funcs);
+
+ intel_hdmi_add_properties(intel_hdmi, connector);
+
+ intel_connector_attach_encoder(intel_connector, intel_encoder);
+#if 0
+ drm_sysfs_connector_add(connector);
+#endif
+
+ /* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written
+ * 0xd. Failure to do so will result in spurious interrupts being
+ * generated on the port when a cable is not attached.
+ */
+ if (IS_G4X(dev) && !IS_GM45(dev)) {
+ u32 temp = I915_READ(PEG_BAND_GAP_DATA);
+ I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd);
+ }
+}
diff --git a/sys/dev/drm2/i915/intel_iic.c b/sys/dev/drm2/i915/intel_iic.c
new file mode 100644
index 000000000000..40e6eca927a1
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_iic.c
@@ -0,0 +1,716 @@
+/*
+ * Copyright (c) 2006 Dave Airlie <airlied@linux.ie>
+ * Copyright © 2006-2008,2010 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ * Chris Wilson <chris@chris-wilson.co.uk>
+ *
+ * Copyright (c) 2011 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Konstantin Belousov 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 <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/iicbus/iic.h>
+#include <dev/iicbus/iiconf.h>
+#include <dev/iicbus/iicbus.h>
+#include "iicbus_if.h"
+#include "iicbb_if.h"
+
+static int intel_iic_quirk_xfer(device_t idev, struct iic_msg *msgs, int nmsgs);
+static void intel_teardown_gmbus_m(struct drm_device *dev, int m);
+
+/* Intel GPIO access functions */
+
+#define I2C_RISEFALL_TIME 10
+
+struct intel_iic_softc {
+ struct drm_device *drm_dev;
+ device_t iic_dev;
+ bool force_bit_dev;
+ char name[32];
+ uint32_t reg;
+ uint32_t reg0;
+};
+
+static void
+intel_iic_quirk_set(struct drm_i915_private *dev_priv, bool enable)
+{
+ u32 val;
+
+ /* When using bit bashing for I2C, this bit needs to be set to 1 */
+ if (!IS_PINEVIEW(dev_priv->dev))
+ return;
+
+ val = I915_READ(DSPCLK_GATE_D);
+ if (enable)
+ val |= DPCUNIT_CLOCK_GATE_DISABLE;
+ else
+ val &= ~DPCUNIT_CLOCK_GATE_DISABLE;
+ I915_WRITE(DSPCLK_GATE_D, val);
+}
+
+static u32
+intel_iic_get_reserved(device_t idev)
+{
+ struct intel_iic_softc *sc;
+ struct drm_device *dev;
+ struct drm_i915_private *dev_priv;
+ u32 reserved;
+
+ sc = device_get_softc(idev);
+ dev = sc->drm_dev;
+ dev_priv = dev->dev_private;
+
+ if (!IS_I830(dev) && !IS_845G(dev)) {
+ reserved = I915_READ_NOTRACE(sc->reg) &
+ (GPIO_DATA_PULLUP_DISABLE | GPIO_CLOCK_PULLUP_DISABLE);
+ } else {
+ reserved = 0;
+ }
+
+ return (reserved);
+}
+
+void
+intel_iic_reset(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+
+ dev_priv = dev->dev_private;
+ if (HAS_PCH_SPLIT(dev))
+ I915_WRITE(PCH_GMBUS0, 0);
+ else
+ I915_WRITE(GMBUS0, 0);
+}
+
+static int
+intel_iicbus_reset(device_t idev, u_char speed, u_char addr, u_char *oldaddr)
+{
+ struct intel_iic_softc *sc;
+ struct drm_device *dev;
+
+ sc = device_get_softc(idev);
+ dev = sc->drm_dev;
+
+ intel_iic_reset(dev);
+ return (0);
+}
+
+static void
+intel_iicbb_setsda(device_t idev, int val)
+{
+ struct intel_iic_softc *sc;
+ struct drm_i915_private *dev_priv;
+ u32 reserved;
+ u32 data_bits;
+
+ sc = device_get_softc(idev);
+ dev_priv = sc->drm_dev->dev_private;
+
+ reserved = intel_iic_get_reserved(idev);
+ if (val)
+ data_bits = GPIO_DATA_DIR_IN | GPIO_DATA_DIR_MASK;
+ else
+ data_bits = GPIO_DATA_DIR_OUT | GPIO_DATA_DIR_MASK |
+ GPIO_DATA_VAL_MASK;
+
+ I915_WRITE_NOTRACE(sc->reg, reserved | data_bits);
+ POSTING_READ(sc->reg);
+}
+
+static void
+intel_iicbb_setscl(device_t idev, int val)
+{
+ struct intel_iic_softc *sc;
+ struct drm_i915_private *dev_priv;
+ u32 clock_bits, reserved;
+
+ sc = device_get_softc(idev);
+ dev_priv = sc->drm_dev->dev_private;
+
+ reserved = intel_iic_get_reserved(idev);
+ if (val)
+ clock_bits = GPIO_CLOCK_DIR_IN | GPIO_CLOCK_DIR_MASK;
+ else
+ clock_bits = GPIO_CLOCK_DIR_OUT | GPIO_CLOCK_DIR_MASK |
+ GPIO_CLOCK_VAL_MASK;
+
+ I915_WRITE_NOTRACE(sc->reg, reserved | clock_bits);
+ POSTING_READ(sc->reg);
+}
+
+static int
+intel_iicbb_getsda(device_t idev)
+{
+ struct intel_iic_softc *sc;
+ struct drm_i915_private *dev_priv;
+ u32 reserved;
+
+ sc = device_get_softc(idev);
+ dev_priv = sc->drm_dev->dev_private;
+
+ reserved = intel_iic_get_reserved(idev);
+
+ I915_WRITE_NOTRACE(sc->reg, reserved | GPIO_DATA_DIR_MASK);
+ I915_WRITE_NOTRACE(sc->reg, reserved);
+ return ((I915_READ_NOTRACE(sc->reg) & GPIO_DATA_VAL_IN) != 0);
+}
+
+static int
+intel_iicbb_getscl(device_t idev)
+{
+ struct intel_iic_softc *sc;
+ struct drm_i915_private *dev_priv;
+ u32 reserved;
+
+ sc = device_get_softc(idev);
+ dev_priv = sc->drm_dev->dev_private;
+
+ reserved = intel_iic_get_reserved(idev);
+
+ I915_WRITE_NOTRACE(sc->reg, reserved | GPIO_CLOCK_DIR_MASK);
+ I915_WRITE_NOTRACE(sc->reg, reserved);
+ return ((I915_READ_NOTRACE(sc->reg) & GPIO_CLOCK_VAL_IN) != 0);
+}
+
+static int
+intel_gmbus_transfer(device_t idev, struct iic_msg *msgs, uint32_t nmsgs)
+{
+ struct intel_iic_softc *sc;
+ struct drm_i915_private *dev_priv;
+ u8 *buf;
+ int error, i, reg_offset, unit;
+ u32 val, loop;
+ u16 len;
+
+ sc = device_get_softc(idev);
+ dev_priv = sc->drm_dev->dev_private;
+ unit = device_get_unit(idev);
+
+ sx_xlock(&dev_priv->gmbus_sx);
+ if (sc->force_bit_dev) {
+ error = intel_iic_quirk_xfer(dev_priv->bbbus[unit], msgs, nmsgs);
+ goto out;
+ }
+
+ reg_offset = HAS_PCH_SPLIT(dev_priv->dev) ? PCH_GMBUS0 - GMBUS0 : 0;
+
+ I915_WRITE(GMBUS0 + reg_offset, sc->reg0);
+
+ for (i = 0; i < nmsgs; i++) {
+ len = msgs[i].len;
+ buf = msgs[i].buf;
+
+ if ((msgs[i].flags & IIC_M_RD) != 0) {
+ I915_WRITE(GMBUS1 + reg_offset, GMBUS_CYCLE_WAIT |
+ (i + 1 == nmsgs ? GMBUS_CYCLE_STOP : 0) |
+ (len << GMBUS_BYTE_COUNT_SHIFT) |
+ (msgs[i].slave << GMBUS_SLAVE_ADDR_SHIFT) |
+ GMBUS_SLAVE_READ | GMBUS_SW_RDY);
+ POSTING_READ(GMBUS2 + reg_offset);
+ do {
+ loop = 0;
+
+ if (_intel_wait_for(sc->drm_dev,
+ (I915_READ(GMBUS2 + reg_offset) &
+ (GMBUS_SATOER | GMBUS_HW_RDY)) != 0,
+ 50, 1, "915gbr"))
+ goto timeout;
+ if ((I915_READ(GMBUS2 + reg_offset) &
+ GMBUS_SATOER) != 0)
+ goto clear_err;
+
+ val = I915_READ(GMBUS3 + reg_offset);
+ do {
+ *buf++ = val & 0xff;
+ val >>= 8;
+ } while (--len != 0 && ++loop < 4);
+ } while (len != 0);
+ } else {
+ val = loop = 0;
+ do {
+ val |= *buf++ << (8 * loop);
+ } while (--len != 0 && ++loop < 4);
+
+ I915_WRITE(GMBUS3 + reg_offset, val);
+ I915_WRITE(GMBUS1 + reg_offset, GMBUS_CYCLE_WAIT |
+ (i + 1 == nmsgs ? GMBUS_CYCLE_STOP : 0) |
+ (msgs[i].len << GMBUS_BYTE_COUNT_SHIFT) |
+ (msgs[i].slave << GMBUS_SLAVE_ADDR_SHIFT) |
+ GMBUS_SLAVE_WRITE | GMBUS_SW_RDY);
+ POSTING_READ(GMBUS2+reg_offset);
+
+ while (len != 0) {
+ if (_intel_wait_for(sc->drm_dev,
+ (I915_READ(GMBUS2 + reg_offset) &
+ (GMBUS_SATOER | GMBUS_HW_RDY)) != 0,
+ 50, 1, "915gbw"))
+ goto timeout;
+ if (I915_READ(GMBUS2 + reg_offset) & GMBUS_SATOER)
+ goto clear_err;
+
+ val = loop = 0;
+ do {
+ val |= *buf++ << (8 * loop);
+ } while (--len != 0 && ++loop < 4);
+
+ I915_WRITE(GMBUS3 + reg_offset, val);
+ POSTING_READ(GMBUS2 + reg_offset);
+ }
+ }
+
+ if (i + 1 < nmsgs && _intel_wait_for(sc->drm_dev,
+ (I915_READ(GMBUS2 + reg_offset) & (GMBUS_SATOER |
+ GMBUS_HW_WAIT_PHASE)) != 0,
+ 50, 1, "915gbh"))
+ goto timeout;
+ if ((I915_READ(GMBUS2 + reg_offset) & GMBUS_SATOER) != 0)
+ goto clear_err;
+ }
+
+ error = 0;
+done:
+ /* Mark the GMBUS interface as disabled after waiting for idle.
+ * We will re-enable it at the start of the next xfer,
+ * till then let it sleep.
+ */
+ if (_intel_wait_for(dev,
+ (I915_READ(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0,
+ 10, 1, "915gbu"))
+ DRM_INFO("GMBUS timed out waiting for idle\n");
+ I915_WRITE(GMBUS0 + reg_offset, 0);
+out:
+ sx_xunlock(&dev_priv->gmbus_sx);
+ return (error);
+
+clear_err:
+ /* Toggle the Software Clear Interrupt bit. This has the effect
+ * of resetting the GMBUS controller and so clearing the
+ * BUS_ERROR raised by the slave's NAK.
+ */
+ I915_WRITE(GMBUS1 + reg_offset, GMBUS_SW_CLR_INT);
+ I915_WRITE(GMBUS1 + reg_offset, 0);
+ error = EIO;
+ goto done;
+
+timeout:
+ DRM_INFO("GMBUS timed out, falling back to bit banging on pin %d [%s]\n",
+ sc->reg0 & 0xff, sc->name);
+ I915_WRITE(GMBUS0 + reg_offset, 0);
+
+ /*
+ * Hardware may not support GMBUS over these pins?
+ * Try GPIO bitbanging instead.
+ */
+ sc->force_bit_dev = true;
+
+ error = intel_iic_quirk_xfer(dev_priv->bbbus[unit], msgs, nmsgs);
+ goto out;
+}
+
+void
+intel_gmbus_set_speed(device_t idev, int speed)
+{
+ struct intel_iic_softc *sc;
+
+ sc = device_get_softc(device_get_parent(idev));
+
+ sc->reg0 = (sc->reg0 & ~(0x3 << 8)) | speed;
+}
+
+void
+intel_gmbus_force_bit(device_t idev, bool force_bit)
+{
+ struct intel_iic_softc *sc;
+
+ sc = device_get_softc(device_get_parent(idev));
+ sc->force_bit_dev = force_bit;
+}
+
+static int
+intel_iic_quirk_xfer(device_t idev, struct iic_msg *msgs, int nmsgs)
+{
+ device_t bridge_dev;
+ struct intel_iic_softc *sc;
+ struct drm_i915_private *dev_priv;
+ int ret;
+ int i;
+
+ bridge_dev = device_get_parent(device_get_parent(idev));
+ sc = device_get_softc(bridge_dev);
+ dev_priv = sc->drm_dev->dev_private;
+
+ intel_iic_reset(sc->drm_dev);
+ intel_iic_quirk_set(dev_priv, true);
+ IICBB_SETSDA(bridge_dev, 1);
+ IICBB_SETSCL(bridge_dev, 1);
+ DELAY(I2C_RISEFALL_TIME);
+
+ /* convert slave addresses to format expected by iicbb */
+ for (i = 0; i < nmsgs; i++) {
+ msgs[i].slave <<= 1;
+ /* force use of repeated start instead of default stop+start */
+ if (i != (nmsgs - 1))
+ msgs[i].flags |= IIC_M_NOSTOP;
+ }
+ ret = iicbus_transfer(idev, msgs, nmsgs);
+ /* restore the addresses */
+ for (i = 0; i < nmsgs; i++)
+ msgs[i].slave >>= 1;
+ IICBB_SETSDA(bridge_dev, 1);
+ IICBB_SETSCL(bridge_dev, 1);
+ intel_iic_quirk_set(dev_priv, false);
+
+ return (ret);
+}
+
+static const char *gpio_names[GMBUS_NUM_PORTS] = {
+ "disabled",
+ "ssc",
+ "vga",
+ "panel",
+ "dpc",
+ "dpb",
+ "reserved",
+ "dpd",
+};
+
+static int
+intel_gmbus_probe(device_t dev)
+{
+
+ return (BUS_PROBE_SPECIFIC);
+}
+
+static int
+intel_gmbus_attach(device_t idev)
+{
+ struct drm_i915_private *dev_priv;
+ struct intel_iic_softc *sc;
+ int pin;
+
+ sc = device_get_softc(idev);
+ sc->drm_dev = device_get_softc(device_get_parent(idev));
+ dev_priv = sc->drm_dev->dev_private;
+ pin = device_get_unit(idev);
+
+ snprintf(sc->name, sizeof(sc->name), "gmbus bus %s", gpio_names[pin]);
+ device_set_desc(idev, sc->name);
+
+ /* By default use a conservative clock rate */
+ sc->reg0 = pin | GMBUS_RATE_100KHZ;
+
+ /* XXX force bit banging until GMBUS is fully debugged */
+ if (IS_GEN2(sc->drm_dev)) {
+ sc->force_bit_dev = true;
+ }
+
+ /* add bus interface device */
+ sc->iic_dev = device_add_child(idev, "iicbus", -1);
+ if (sc->iic_dev == NULL)
+ return (ENXIO);
+ device_quiet(sc->iic_dev);
+ bus_generic_attach(idev);
+
+ return (0);
+}
+
+static int
+intel_gmbus_detach(device_t idev)
+{
+ struct intel_iic_softc *sc;
+ struct drm_i915_private *dev_priv;
+ device_t child;
+ int u;
+
+ sc = device_get_softc(idev);
+ u = device_get_unit(idev);
+ dev_priv = sc->drm_dev->dev_private;
+
+ child = sc->iic_dev;
+ bus_generic_detach(idev);
+ if (child != NULL)
+ device_delete_child(idev, child);
+
+ return (0);
+}
+
+static int
+intel_iicbb_probe(device_t dev)
+{
+
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+intel_iicbb_attach(device_t idev)
+{
+ static const int map_pin_to_reg[] = {
+ 0,
+ GPIOB,
+ GPIOA,
+ GPIOC,
+ GPIOD,
+ GPIOE,
+ 0,
+ GPIOF
+ };
+
+ struct intel_iic_softc *sc;
+ struct drm_i915_private *dev_priv;
+ int pin;
+
+ sc = device_get_softc(idev);
+ sc->drm_dev = device_get_softc(device_get_parent(idev));
+ dev_priv = sc->drm_dev->dev_private;
+ pin = device_get_unit(idev);
+
+ snprintf(sc->name, sizeof(sc->name), "i915 iicbb %s", gpio_names[pin]);
+ device_set_desc(idev, sc->name);
+
+ sc->reg0 = pin | GMBUS_RATE_100KHZ;
+ sc->reg = map_pin_to_reg[pin];
+ if (HAS_PCH_SPLIT(dev_priv->dev))
+ sc->reg += PCH_GPIOA - GPIOA;
+
+ /* add generic bit-banging code */
+ sc->iic_dev = device_add_child(idev, "iicbb", -1);
+ if (sc->iic_dev == NULL)
+ return (ENXIO);
+ device_quiet(sc->iic_dev);
+ bus_generic_attach(idev);
+
+ return (0);
+}
+
+static int
+intel_iicbb_detach(device_t idev)
+{
+ struct intel_iic_softc *sc;
+ device_t child;
+
+ sc = device_get_softc(idev);
+ child = sc->iic_dev;
+ bus_generic_detach(idev);
+ if (child)
+ device_delete_child(idev, child);
+ return (0);
+}
+
+static device_method_t intel_gmbus_methods[] = {
+ DEVMETHOD(device_probe, intel_gmbus_probe),
+ DEVMETHOD(device_attach, intel_gmbus_attach),
+ DEVMETHOD(device_detach, intel_gmbus_detach),
+ DEVMETHOD(iicbus_reset, intel_iicbus_reset),
+ DEVMETHOD(iicbus_transfer, intel_gmbus_transfer),
+ DEVMETHOD_END
+};
+static driver_t intel_gmbus_driver = {
+ "intel_gmbus",
+ intel_gmbus_methods,
+ sizeof(struct intel_iic_softc)
+};
+static devclass_t intel_gmbus_devclass;
+DRIVER_MODULE_ORDERED(intel_gmbus, drmn, intel_gmbus_driver,
+ intel_gmbus_devclass, 0, 0, SI_ORDER_FIRST);
+DRIVER_MODULE(iicbus, intel_gmbus, iicbus_driver, iicbus_devclass, 0, 0);
+
+static device_method_t intel_iicbb_methods[] = {
+ DEVMETHOD(device_probe, intel_iicbb_probe),
+ DEVMETHOD(device_attach, intel_iicbb_attach),
+ DEVMETHOD(device_detach, intel_iicbb_detach),
+
+ DEVMETHOD(bus_add_child, bus_generic_add_child),
+ DEVMETHOD(bus_print_child, bus_generic_print_child),
+
+ DEVMETHOD(iicbb_callback, iicbus_null_callback),
+ DEVMETHOD(iicbb_reset, intel_iicbus_reset),
+ DEVMETHOD(iicbb_setsda, intel_iicbb_setsda),
+ DEVMETHOD(iicbb_setscl, intel_iicbb_setscl),
+ DEVMETHOD(iicbb_getsda, intel_iicbb_getsda),
+ DEVMETHOD(iicbb_getscl, intel_iicbb_getscl),
+ DEVMETHOD_END
+};
+static driver_t intel_iicbb_driver = {
+ "intel_iicbb",
+ intel_iicbb_methods,
+ sizeof(struct intel_iic_softc)
+};
+static devclass_t intel_iicbb_devclass;
+DRIVER_MODULE_ORDERED(intel_iicbb, drmn, intel_iicbb_driver,
+ intel_iicbb_devclass, 0, 0, SI_ORDER_FIRST);
+DRIVER_MODULE(iicbb, intel_iicbb, iicbb_driver, iicbb_devclass, 0, 0);
+
+int
+intel_setup_gmbus(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+ device_t iic_dev;
+ int i, ret;
+
+ dev_priv = dev->dev_private;
+ sx_init(&dev_priv->gmbus_sx, "gmbus");
+ dev_priv->gmbus_bridge = malloc(sizeof(device_t) * GMBUS_NUM_PORTS,
+ DRM_MEM_DRIVER, M_WAITOK | M_ZERO);
+ dev_priv->bbbus_bridge = malloc(sizeof(device_t) * GMBUS_NUM_PORTS,
+ DRM_MEM_DRIVER, M_WAITOK | M_ZERO);
+ dev_priv->gmbus = malloc(sizeof(device_t) * GMBUS_NUM_PORTS,
+ DRM_MEM_DRIVER, M_WAITOK | M_ZERO);
+ dev_priv->bbbus = malloc(sizeof(device_t) * GMBUS_NUM_PORTS,
+ DRM_MEM_DRIVER, M_WAITOK | M_ZERO);
+
+ /*
+ * The Giant there is recursed, most likely. Normally, the
+ * intel_setup_gmbus() is called from the attach method of the
+ * driver.
+ */
+ mtx_lock(&Giant);
+ for (i = 0; i < GMBUS_NUM_PORTS; i++) {
+ /*
+ * Initialized bbbus_bridge before gmbus_bridge, since
+ * gmbus may decide to force quirk transfer in the
+ * attachment code.
+ */
+ dev_priv->bbbus_bridge[i] = device_add_child(dev->device,
+ "intel_iicbb", i);
+ if (dev_priv->bbbus_bridge[i] == NULL) {
+ DRM_ERROR("bbbus bridge %d creation failed\n", i);
+ ret = ENXIO;
+ goto err;
+ }
+ device_quiet(dev_priv->bbbus_bridge[i]);
+ ret = device_probe_and_attach(dev_priv->bbbus_bridge[i]);
+ if (ret != 0) {
+ DRM_ERROR("bbbus bridge %d attach failed, %d\n", i,
+ ret);
+ goto err;
+ }
+
+ iic_dev = device_find_child(dev_priv->bbbus_bridge[i], "iicbb",
+ -1);
+ if (iic_dev == NULL) {
+ DRM_ERROR("bbbus bridge doesn't have iicbb child\n");
+ goto err;
+ }
+ iic_dev = device_find_child(iic_dev, "iicbus", -1);
+ if (iic_dev == NULL) {
+ DRM_ERROR(
+ "bbbus bridge doesn't have iicbus grandchild\n");
+ goto err;
+ }
+
+ dev_priv->bbbus[i] = iic_dev;
+
+ dev_priv->gmbus_bridge[i] = device_add_child(dev->device,
+ "intel_gmbus", i);
+ if (dev_priv->gmbus_bridge[i] == NULL) {
+ DRM_ERROR("gmbus bridge %d creation failed\n", i);
+ ret = ENXIO;
+ goto err;
+ }
+ device_quiet(dev_priv->gmbus_bridge[i]);
+ ret = device_probe_and_attach(dev_priv->gmbus_bridge[i]);
+ if (ret != 0) {
+ DRM_ERROR("gmbus bridge %d attach failed, %d\n", i,
+ ret);
+ ret = ENXIO;
+ goto err;
+ }
+
+ iic_dev = device_find_child(dev_priv->gmbus_bridge[i],
+ "iicbus", -1);
+ if (iic_dev == NULL) {
+ DRM_ERROR("gmbus bridge doesn't have iicbus child\n");
+ goto err;
+ }
+ dev_priv->gmbus[i] = iic_dev;
+
+ intel_iic_reset(dev);
+ }
+
+ mtx_unlock(&Giant);
+ return (0);
+
+err:
+ intel_teardown_gmbus_m(dev, i);
+ mtx_unlock(&Giant);
+ return (ret);
+}
+
+static void
+intel_teardown_gmbus_m(struct drm_device *dev, int m)
+{
+ struct drm_i915_private *dev_priv;
+
+ dev_priv = dev->dev_private;
+
+ free(dev_priv->gmbus, DRM_MEM_DRIVER);
+ dev_priv->gmbus = NULL;
+ free(dev_priv->bbbus, DRM_MEM_DRIVER);
+ dev_priv->bbbus = NULL;
+ free(dev_priv->gmbus_bridge, DRM_MEM_DRIVER);
+ dev_priv->gmbus_bridge = NULL;
+ free(dev_priv->bbbus_bridge, DRM_MEM_DRIVER);
+ dev_priv->bbbus_bridge = NULL;
+ sx_destroy(&dev_priv->gmbus_sx);
+}
+
+void
+intel_teardown_gmbus(struct drm_device *dev)
+{
+
+ mtx_lock(&Giant);
+ intel_teardown_gmbus_m(dev, GMBUS_NUM_PORTS);
+ mtx_unlock(&Giant);
+}
diff --git a/sys/dev/drm2/i915/intel_lvds.c b/sys/dev/drm2/i915/intel_lvds.c
new file mode 100644
index 000000000000..4e29b91d6a02
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_lvds.c
@@ -0,0 +1,1125 @@
+/*
+ * Copyright © 2006-2007 Intel Corporation
+ * Copyright (c) 2006 Dave Airlie <airlied@linux.ie>
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ * Dave Airlie <airlied@linux.ie>
+ * Jesse Barnes <jesse.barnes@intel.com>
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+
+/* Private structure for the integrated LVDS support */
+struct intel_lvds {
+ struct intel_encoder base;
+
+ struct edid *edid;
+
+ int fitting_mode;
+ u32 pfit_control;
+ u32 pfit_pgm_ratios;
+ bool pfit_dirty;
+
+ struct drm_display_mode *fixed_mode;
+};
+
+static struct intel_lvds *to_intel_lvds(struct drm_encoder *encoder)
+{
+ return container_of(encoder, struct intel_lvds, base.base);
+}
+
+static struct intel_lvds *intel_attached_lvds(struct drm_connector *connector)
+{
+ return container_of(intel_attached_encoder(connector),
+ struct intel_lvds, base);
+}
+
+/**
+ * Sets the power state for the panel.
+ */
+static void intel_lvds_enable(struct intel_lvds *intel_lvds)
+{
+ struct drm_device *dev = intel_lvds->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 ctl_reg, lvds_reg, stat_reg;
+
+ if (HAS_PCH_SPLIT(dev)) {
+ ctl_reg = PCH_PP_CONTROL;
+ lvds_reg = PCH_LVDS;
+ stat_reg = PCH_PP_STATUS;
+ } else {
+ ctl_reg = PP_CONTROL;
+ lvds_reg = LVDS;
+ stat_reg = PP_STATUS;
+ }
+
+ I915_WRITE(lvds_reg, I915_READ(lvds_reg) | LVDS_PORT_EN);
+
+ if (intel_lvds->pfit_dirty) {
+ /*
+ * Enable automatic panel scaling so that non-native modes
+ * fill the screen. The panel fitter should only be
+ * adjusted whilst the pipe is disabled, according to
+ * register description and PRM.
+ */
+ DRM_DEBUG_KMS("applying panel-fitter: %x, %x\n",
+ intel_lvds->pfit_control,
+ intel_lvds->pfit_pgm_ratios);
+
+ I915_WRITE(PFIT_PGM_RATIOS, intel_lvds->pfit_pgm_ratios);
+ I915_WRITE(PFIT_CONTROL, intel_lvds->pfit_control);
+ intel_lvds->pfit_dirty = false;
+ }
+
+ I915_WRITE(ctl_reg, I915_READ(ctl_reg) | POWER_TARGET_ON);
+ POSTING_READ(lvds_reg);
+ if (_intel_wait_for(dev,
+ (I915_READ(stat_reg) & PP_ON) == 0, 1000,
+ 1, "915lvds"))
+ DRM_ERROR("timed out waiting for panel to power off\n");
+
+ intel_panel_enable_backlight(dev);
+}
+
+static void intel_lvds_disable(struct intel_lvds *intel_lvds)
+{
+ struct drm_device *dev = intel_lvds->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 ctl_reg, lvds_reg, stat_reg;
+
+ if (HAS_PCH_SPLIT(dev)) {
+ ctl_reg = PCH_PP_CONTROL;
+ lvds_reg = PCH_LVDS;
+ stat_reg = PCH_PP_STATUS;
+ } else {
+ ctl_reg = PP_CONTROL;
+ lvds_reg = LVDS;
+ stat_reg = PP_STATUS;
+ }
+
+ intel_panel_disable_backlight(dev);
+
+ I915_WRITE(ctl_reg, I915_READ(ctl_reg) & ~POWER_TARGET_ON);
+ if (_intel_wait_for(dev,
+ (I915_READ(stat_reg) & PP_ON) == 0, 1000,
+ 1, "915lvo"))
+ DRM_ERROR("timed out waiting for panel to power off\n");
+
+ if (intel_lvds->pfit_control) {
+ I915_WRITE(PFIT_CONTROL, 0);
+ intel_lvds->pfit_dirty = true;
+ }
+
+ I915_WRITE(lvds_reg, I915_READ(lvds_reg) & ~LVDS_PORT_EN);
+ POSTING_READ(lvds_reg);
+}
+
+static void intel_lvds_dpms(struct drm_encoder *encoder, int mode)
+{
+ struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
+
+ if (mode == DRM_MODE_DPMS_ON)
+ intel_lvds_enable(intel_lvds);
+ else
+ intel_lvds_disable(intel_lvds);
+
+ /* XXX: We never power down the LVDS pairs. */
+}
+
+static int intel_lvds_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ struct intel_lvds *intel_lvds = intel_attached_lvds(connector);
+ struct drm_display_mode *fixed_mode = intel_lvds->fixed_mode;
+
+ if (mode->hdisplay > fixed_mode->hdisplay)
+ return MODE_PANEL;
+ if (mode->vdisplay > fixed_mode->vdisplay)
+ return MODE_PANEL;
+
+ return MODE_OK;
+}
+
+static void
+centre_horizontally(struct drm_display_mode *mode,
+ int width)
+{
+ u32 border, sync_pos, blank_width, sync_width;
+
+ /* keep the hsync and hblank widths constant */
+ sync_width = mode->crtc_hsync_end - mode->crtc_hsync_start;
+ blank_width = mode->crtc_hblank_end - mode->crtc_hblank_start;
+ sync_pos = (blank_width - sync_width + 1) / 2;
+
+ border = (mode->hdisplay - width + 1) / 2;
+ border += border & 1; /* make the border even */
+
+ mode->crtc_hdisplay = width;
+ mode->crtc_hblank_start = width + border;
+ mode->crtc_hblank_end = mode->crtc_hblank_start + blank_width;
+
+ mode->crtc_hsync_start = mode->crtc_hblank_start + sync_pos;
+ mode->crtc_hsync_end = mode->crtc_hsync_start + sync_width;
+
+ mode->private_flags |= INTEL_MODE_CRTC_TIMINGS_SET;
+}
+
+static void
+centre_vertically(struct drm_display_mode *mode,
+ int height)
+{
+ u32 border, sync_pos, blank_width, sync_width;
+
+ /* keep the vsync and vblank widths constant */
+ sync_width = mode->crtc_vsync_end - mode->crtc_vsync_start;
+ blank_width = mode->crtc_vblank_end - mode->crtc_vblank_start;
+ sync_pos = (blank_width - sync_width + 1) / 2;
+
+ border = (mode->vdisplay - height + 1) / 2;
+
+ mode->crtc_vdisplay = height;
+ mode->crtc_vblank_start = height + border;
+ mode->crtc_vblank_end = mode->crtc_vblank_start + blank_width;
+
+ mode->crtc_vsync_start = mode->crtc_vblank_start + sync_pos;
+ mode->crtc_vsync_end = mode->crtc_vsync_start + sync_width;
+
+ mode->private_flags |= INTEL_MODE_CRTC_TIMINGS_SET;
+}
+
+static inline u32 panel_fitter_scaling(u32 source, u32 target)
+{
+ /*
+ * Floating point operation is not supported. So the FACTOR
+ * is defined, which can avoid the floating point computation
+ * when calculating the panel ratio.
+ */
+#define ACCURACY 12
+#define FACTOR (1 << ACCURACY)
+ u32 ratio = source * FACTOR / target;
+ return (FACTOR * ratio + FACTOR/2) / FACTOR;
+}
+
+static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
+ struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
+ struct drm_encoder *tmp_encoder;
+ u32 pfit_control = 0, pfit_pgm_ratios = 0, border = 0;
+ int pipe;
+
+ /* Should never happen!! */
+ if (INTEL_INFO(dev)->gen < 4 && intel_crtc->pipe == 0) {
+ DRM_ERROR("Can't support LVDS on pipe A\n");
+ return false;
+ }
+
+ /* Should never happen!! */
+ list_for_each_entry(tmp_encoder, &dev->mode_config.encoder_list, head) {
+ if (tmp_encoder != encoder && tmp_encoder->crtc == encoder->crtc) {
+ DRM_ERROR("Can't enable LVDS and another "
+ "encoder on the same pipe\n");
+ return false;
+ }
+ }
+
+ /*
+ * We have timings from the BIOS for the panel, put them in
+ * to the adjusted mode. The CRTC will be set up for this mode,
+ * with the panel scaling set up to source from the H/VDisplay
+ * of the original mode.
+ */
+ intel_fixed_panel_mode(intel_lvds->fixed_mode, adjusted_mode);
+
+ if (HAS_PCH_SPLIT(dev)) {
+ intel_pch_panel_fitting(dev, intel_lvds->fitting_mode,
+ mode, adjusted_mode);
+ return true;
+ }
+
+ /* Native modes don't need fitting */
+ if (adjusted_mode->hdisplay == mode->hdisplay &&
+ adjusted_mode->vdisplay == mode->vdisplay)
+ goto out;
+
+ /* 965+ wants fuzzy fitting */
+ if (INTEL_INFO(dev)->gen >= 4)
+ pfit_control |= ((intel_crtc->pipe << PFIT_PIPE_SHIFT) |
+ PFIT_FILTER_FUZZY);
+
+ /*
+ * Enable automatic panel scaling for non-native modes so that they fill
+ * the screen. Should be enabled before the pipe is enabled, according
+ * to register description and PRM.
+ * Change the value here to see the borders for debugging
+ */
+ for_each_pipe(pipe)
+ I915_WRITE(BCLRPAT(pipe), 0);
+
+ drm_mode_set_crtcinfo(adjusted_mode, 0);
+
+ switch (intel_lvds->fitting_mode) {
+ case DRM_MODE_SCALE_CENTER:
+ /*
+ * For centered modes, we have to calculate border widths &
+ * heights and modify the values programmed into the CRTC.
+ */
+ centre_horizontally(adjusted_mode, mode->hdisplay);
+ centre_vertically(adjusted_mode, mode->vdisplay);
+ border = LVDS_BORDER_ENABLE;
+ break;
+
+ case DRM_MODE_SCALE_ASPECT:
+ /* Scale but preserve the aspect ratio */
+ if (INTEL_INFO(dev)->gen >= 4) {
+ u32 scaled_width = adjusted_mode->hdisplay * mode->vdisplay;
+ u32 scaled_height = mode->hdisplay * adjusted_mode->vdisplay;
+
+ /* 965+ is easy, it does everything in hw */
+ if (scaled_width > scaled_height)
+ pfit_control |= PFIT_ENABLE | PFIT_SCALING_PILLAR;
+ else if (scaled_width < scaled_height)
+ pfit_control |= PFIT_ENABLE | PFIT_SCALING_LETTER;
+ else if (adjusted_mode->hdisplay != mode->hdisplay)
+ pfit_control |= PFIT_ENABLE | PFIT_SCALING_AUTO;
+ } else {
+ u32 scaled_width = adjusted_mode->hdisplay * mode->vdisplay;
+ u32 scaled_height = mode->hdisplay * adjusted_mode->vdisplay;
+ /*
+ * For earlier chips we have to calculate the scaling
+ * ratio by hand and program it into the
+ * PFIT_PGM_RATIO register
+ */
+ if (scaled_width > scaled_height) { /* pillar */
+ centre_horizontally(adjusted_mode, scaled_height / mode->vdisplay);
+
+ border = LVDS_BORDER_ENABLE;
+ if (mode->vdisplay != adjusted_mode->vdisplay) {
+ u32 bits = panel_fitter_scaling(mode->vdisplay, adjusted_mode->vdisplay);
+ pfit_pgm_ratios |= (bits << PFIT_HORIZ_SCALE_SHIFT |
+ bits << PFIT_VERT_SCALE_SHIFT);
+ pfit_control |= (PFIT_ENABLE |
+ VERT_INTERP_BILINEAR |
+ HORIZ_INTERP_BILINEAR);
+ }
+ } else if (scaled_width < scaled_height) { /* letter */
+ centre_vertically(adjusted_mode, scaled_width / mode->hdisplay);
+
+ border = LVDS_BORDER_ENABLE;
+ if (mode->hdisplay != adjusted_mode->hdisplay) {
+ u32 bits = panel_fitter_scaling(mode->hdisplay, adjusted_mode->hdisplay);
+ pfit_pgm_ratios |= (bits << PFIT_HORIZ_SCALE_SHIFT |
+ bits << PFIT_VERT_SCALE_SHIFT);
+ pfit_control |= (PFIT_ENABLE |
+ VERT_INTERP_BILINEAR |
+ HORIZ_INTERP_BILINEAR);
+ }
+ } else
+ /* Aspects match, Let hw scale both directions */
+ pfit_control |= (PFIT_ENABLE |
+ VERT_AUTO_SCALE | HORIZ_AUTO_SCALE |
+ VERT_INTERP_BILINEAR |
+ HORIZ_INTERP_BILINEAR);
+ }
+ break;
+
+ case DRM_MODE_SCALE_FULLSCREEN:
+ /*
+ * Full scaling, even if it changes the aspect ratio.
+ * Fortunately this is all done for us in hw.
+ */
+ if (mode->vdisplay != adjusted_mode->vdisplay ||
+ mode->hdisplay != adjusted_mode->hdisplay) {
+ pfit_control |= PFIT_ENABLE;
+ if (INTEL_INFO(dev)->gen >= 4)
+ pfit_control |= PFIT_SCALING_AUTO;
+ else
+ pfit_control |= (VERT_AUTO_SCALE |
+ VERT_INTERP_BILINEAR |
+ HORIZ_AUTO_SCALE |
+ HORIZ_INTERP_BILINEAR);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+out:
+ /* If not enabling scaling, be consistent and always use 0. */
+ if ((pfit_control & PFIT_ENABLE) == 0) {
+ pfit_control = 0;
+ pfit_pgm_ratios = 0;
+ }
+
+ /* Make sure pre-965 set dither correctly */
+ if (INTEL_INFO(dev)->gen < 4 && dev_priv->lvds_dither)
+ pfit_control |= PANEL_8TO6_DITHER_ENABLE;
+
+ if (pfit_control != intel_lvds->pfit_control ||
+ pfit_pgm_ratios != intel_lvds->pfit_pgm_ratios) {
+ intel_lvds->pfit_control = pfit_control;
+ intel_lvds->pfit_pgm_ratios = pfit_pgm_ratios;
+ intel_lvds->pfit_dirty = true;
+ }
+ dev_priv->lvds_border_bits = border;
+
+ /*
+ * XXX: It would be nice to support lower refresh rates on the
+ * panels to reduce power consumption, and perhaps match the
+ * user's requested refresh rate.
+ */
+
+ return true;
+}
+
+static void intel_lvds_prepare(struct drm_encoder *encoder)
+{
+ struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
+
+ /*
+ * Prior to Ironlake, we must disable the pipe if we want to adjust
+ * the panel fitter. However at all other times we can just reset
+ * the registers regardless.
+ */
+ if (!HAS_PCH_SPLIT(encoder->dev) && intel_lvds->pfit_dirty)
+ intel_lvds_disable(intel_lvds);
+}
+
+static void intel_lvds_commit(struct drm_encoder *encoder)
+{
+ struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
+
+ /* Always do a full power on as we do not know what state
+ * we were left in.
+ */
+ intel_lvds_enable(intel_lvds);
+}
+
+static void intel_lvds_mode_set(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ /*
+ * The LVDS pin pair will already have been turned on in the
+ * intel_crtc_mode_set since it has a large impact on the DPLL
+ * settings.
+ */
+}
+
+/**
+ * Detect the LVDS connection.
+ *
+ * Since LVDS doesn't have hotlug, we use the lid as a proxy. Open means
+ * connected and closed means disconnected. We also send hotplug events as
+ * needed, using lid status notification from the input layer.
+ */
+static enum drm_connector_status
+intel_lvds_detect(struct drm_connector *connector, bool force)
+{
+ struct drm_device *dev = connector->dev;
+ enum drm_connector_status status;
+
+ status = intel_panel_detect(dev);
+ if (status != connector_status_unknown)
+ return status;
+
+ return connector_status_connected;
+}
+
+/**
+ * Return the list of DDC modes if available, or the BIOS fixed mode otherwise.
+ */
+static int intel_lvds_get_modes(struct drm_connector *connector)
+{
+ struct intel_lvds *intel_lvds = intel_attached_lvds(connector);
+ struct drm_device *dev = connector->dev;
+ struct drm_display_mode *mode;
+
+ if (intel_lvds->edid)
+ return drm_add_edid_modes(connector, intel_lvds->edid);
+
+ mode = drm_mode_duplicate(dev, intel_lvds->fixed_mode);
+ if (mode == NULL)
+ return 0;
+
+ drm_mode_probed_add(connector, mode);
+ return 1;
+}
+
+static int intel_no_modeset_on_lid_dmi_callback(const struct dmi_system_id *id)
+{
+ DRM_DEBUG_KMS("Skipping forced modeset for %s\n", id->ident);
+ return 1;
+}
+
+/* The GPU hangs up on these systems if modeset is performed on LID open */
+static const struct dmi_system_id intel_no_modeset_on_lid[] = {
+ {
+ .callback = intel_no_modeset_on_lid_dmi_callback,
+ .ident = "Toshiba Tecra A11",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "TECRA A11"),
+ },
+ },
+
+ { } /* terminating entry */
+};
+
+#ifdef NOTYET
+/*
+ * Lid events. Note the use of 'modeset_on_lid':
+ * - we set it on lid close, and reset it on open
+ * - we use it as a "only once" bit (ie we ignore
+ * duplicate events where it was already properly
+ * set/reset)
+ * - the suspend/resume paths will also set it to
+ * zero, since they restore the mode ("lid open").
+ */
+static int intel_lid_notify(struct notifier_block *nb, unsigned long val,
+ void *unused)
+{
+ struct drm_i915_private *dev_priv =
+ container_of(nb, struct drm_i915_private, lid_notifier);
+ struct drm_device *dev = dev_priv->dev;
+ struct drm_connector *connector = dev_priv->int_lvds_connector;
+
+ if (dev->switch_power_state != DRM_SWITCH_POWER_ON)
+ return NOTIFY_OK;
+
+ /*
+ * check and update the status of LVDS connector after receiving
+ * the LID nofication event.
+ */
+ if (connector)
+ connector->status = connector->funcs->detect(connector,
+ false);
+
+ /* Don't force modeset on machines where it causes a GPU lockup */
+ if (dmi_check_system(intel_no_modeset_on_lid))
+ return NOTIFY_OK;
+ if (!acpi_lid_open()) {
+ dev_priv->modeset_on_lid = 1;
+ return NOTIFY_OK;
+ }
+
+ if (!dev_priv->modeset_on_lid)
+ return NOTIFY_OK;
+
+ dev_priv->modeset_on_lid = 0;
+
+ mutex_lock(&dev->mode_config.mutex);
+ drm_helper_resume_force_mode(dev);
+ mutex_unlock(&dev->mode_config.mutex);
+
+ return NOTIFY_OK;
+}
+#endif
+
+/**
+ * intel_lvds_destroy - unregister and free LVDS structures
+ * @connector: connector to free
+ *
+ * Unregister the DDC bus for this connector then free the driver private
+ * structure.
+ */
+static void intel_lvds_destroy(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+#if 0
+ struct drm_i915_private *dev_priv = dev->dev_private;
+#endif
+
+ intel_panel_destroy_backlight(dev);
+
+#if 0
+ if (dev_priv->lid_notifier.notifier_call)
+ acpi_lid_notifier_unregister(&dev_priv->lid_notifier);
+#endif
+#if 0
+ drm_sysfs_connector_remove(connector);
+#endif
+ drm_connector_cleanup(connector);
+ free(connector, DRM_MEM_KMS);
+}
+
+static int intel_lvds_set_property(struct drm_connector *connector,
+ struct drm_property *property,
+ uint64_t value)
+{
+ struct intel_lvds *intel_lvds = intel_attached_lvds(connector);
+ struct drm_device *dev = connector->dev;
+
+ if (property == dev->mode_config.scaling_mode_property) {
+ struct drm_crtc *crtc = intel_lvds->base.base.crtc;
+
+ if (value == DRM_MODE_SCALE_NONE) {
+ DRM_DEBUG_KMS("no scaling not supported\n");
+ return -EINVAL;
+ }
+
+ if (intel_lvds->fitting_mode == value) {
+ /* the LVDS scaling property is not changed */
+ return 0;
+ }
+ intel_lvds->fitting_mode = value;
+ if (crtc && crtc->enabled) {
+ /*
+ * If the CRTC is enabled, the display will be changed
+ * according to the new panel fitting mode.
+ */
+ drm_crtc_helper_set_mode(crtc, &crtc->mode,
+ crtc->x, crtc->y, crtc->fb);
+ }
+ }
+
+ return 0;
+}
+
+static const struct drm_encoder_helper_funcs intel_lvds_helper_funcs = {
+ .dpms = intel_lvds_dpms,
+ .mode_fixup = intel_lvds_mode_fixup,
+ .prepare = intel_lvds_prepare,
+ .mode_set = intel_lvds_mode_set,
+ .commit = intel_lvds_commit,
+};
+
+static const struct drm_connector_helper_funcs intel_lvds_connector_helper_funcs = {
+ .get_modes = intel_lvds_get_modes,
+ .mode_valid = intel_lvds_mode_valid,
+ .best_encoder = intel_best_encoder,
+};
+
+static const struct drm_connector_funcs intel_lvds_connector_funcs = {
+ .dpms = drm_helper_connector_dpms,
+ .detect = intel_lvds_detect,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+ .set_property = intel_lvds_set_property,
+ .destroy = intel_lvds_destroy,
+};
+
+static const struct drm_encoder_funcs intel_lvds_enc_funcs = {
+ .destroy = intel_encoder_destroy,
+};
+
+static int intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
+{
+ DRM_DEBUG_KMS("Skipping LVDS initialization for %s\n", id->ident);
+ return 1;
+}
+
+/* These systems claim to have LVDS, but really don't */
+static const struct dmi_system_id intel_no_lvds[] = {
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Apple Mac Mini (Core series)",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Macmini1,1"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Apple Mac Mini (Core 2 series)",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Apple"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Macmini2,1"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "MSI IM-945GSE-A",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "MSI"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "A9830IMS"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Dell Studio Hybrid",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Studio Hybrid 140g"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Dell OptiPlex FX170",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex FX170"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "AOpen Mini PC",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "AOpen"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "i965GMx-IF"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "AOpen Mini PC MP915",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "AOpen"),
+ DMI_MATCH(DMI_BOARD_NAME, "i915GMx-F"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "AOpen i915GMm-HFS",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "AOpen"),
+ DMI_MATCH(DMI_BOARD_NAME, "i915GMm-HFS"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "AOpen i45GMx-I",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "AOpen"),
+ DMI_MATCH(DMI_BOARD_NAME, "i45GMx-I"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Aopen i945GTt-VFA",
+ .matches = {
+ DMI_MATCH(DMI_PRODUCT_VERSION, "AO00001JW"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Clientron U800",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Clientron"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "U800"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Clientron E830",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Clientron"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "E830"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Asus EeeBox PC EB1007",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer INC."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "EB1007"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Asus AT5NM10T-I",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
+ DMI_MATCH(DMI_BOARD_NAME, "AT5NM10T-I"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Hewlett-Packard t5745",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "hp t5745"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "Hewlett-Packard st5747",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "hp st5747"),
+ },
+ },
+ {
+ .callback = intel_no_lvds_dmi_callback,
+ .ident = "MSI Wind Box DC500",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
+ DMI_MATCH(DMI_BOARD_NAME, "MS-7469"),
+ },
+ },
+
+ { } /* terminating entry */
+};
+
+/**
+ * intel_find_lvds_downclock - find the reduced downclock for LVDS in EDID
+ * @dev: drm device
+ * @connector: LVDS connector
+ *
+ * Find the reduced downclock for LVDS in EDID.
+ */
+static void intel_find_lvds_downclock(struct drm_device *dev,
+ struct drm_display_mode *fixed_mode,
+ struct drm_connector *connector)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_display_mode *scan;
+ int temp_downclock;
+
+ temp_downclock = fixed_mode->clock;
+ list_for_each_entry(scan, &connector->probed_modes, head) {
+ /*
+ * If one mode has the same resolution with the fixed_panel
+ * mode while they have the different refresh rate, it means
+ * that the reduced downclock is found for the LVDS. In such
+ * case we can set the different FPx0/1 to dynamically select
+ * between low and high frequency.
+ */
+ if (scan->hdisplay == fixed_mode->hdisplay &&
+ scan->hsync_start == fixed_mode->hsync_start &&
+ scan->hsync_end == fixed_mode->hsync_end &&
+ scan->htotal == fixed_mode->htotal &&
+ scan->vdisplay == fixed_mode->vdisplay &&
+ scan->vsync_start == fixed_mode->vsync_start &&
+ scan->vsync_end == fixed_mode->vsync_end &&
+ scan->vtotal == fixed_mode->vtotal) {
+ if (scan->clock < temp_downclock) {
+ /*
+ * The downclock is already found. But we
+ * expect to find the lower downclock.
+ */
+ temp_downclock = scan->clock;
+ }
+ }
+ }
+ if (temp_downclock < fixed_mode->clock && i915_lvds_downclock) {
+ /* We found the downclock for LVDS. */
+ dev_priv->lvds_downclock_avail = 1;
+ dev_priv->lvds_downclock = temp_downclock;
+ DRM_DEBUG_KMS("LVDS downclock is found in EDID. "
+ "Normal clock %dKhz, downclock %dKhz\n",
+ fixed_mode->clock, temp_downclock);
+ }
+}
+
+/*
+ * Enumerate the child dev array parsed from VBT to check whether
+ * the LVDS is present.
+ * If it is present, return 1.
+ * If it is not present, return false.
+ * If no child dev is parsed from VBT, it assumes that the LVDS is present.
+ */
+static bool lvds_is_present_in_vbt(struct drm_device *dev,
+ u8 *i2c_pin)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i;
+
+ if (!dev_priv->child_dev_num)
+ return true;
+
+ for (i = 0; i < dev_priv->child_dev_num; i++) {
+ struct child_device_config *child = dev_priv->child_dev + i;
+
+ /* If the device type is not LFP, continue.
+ * We have to check both the new identifiers as well as the
+ * old for compatibility with some BIOSes.
+ */
+ if (child->device_type != DEVICE_TYPE_INT_LFP &&
+ child->device_type != DEVICE_TYPE_LFP)
+ continue;
+
+ if (child->i2c_pin)
+ *i2c_pin = child->i2c_pin;
+
+ /* However, we cannot trust the BIOS writers to populate
+ * the VBT correctly. Since LVDS requires additional
+ * information from AIM blocks, a non-zero addin offset is
+ * a good indicator that the LVDS is actually present.
+ */
+ if (child->addin_offset)
+ return true;
+
+ /* But even then some BIOS writers perform some black magic
+ * and instantiate the device without reference to any
+ * additional data. Trust that if the VBT was written into
+ * the OpRegion then they have validated the LVDS's existence.
+ */
+ if (dev_priv->opregion.vbt)
+ return true;
+ }
+
+ return false;
+}
+
+static bool intel_lvds_supported(struct drm_device *dev)
+{
+ /* With the introduction of the PCH we gained a dedicated
+ * LVDS presence pin, use it. */
+ if (HAS_PCH_SPLIT(dev))
+ return true;
+
+ /* Otherwise LVDS was only attached to mobile products,
+ * except for the inglorious 830gm */
+ return IS_MOBILE(dev) && !IS_I830(dev);
+}
+
+/**
+ * intel_lvds_init - setup LVDS connectors on this device
+ * @dev: drm device
+ *
+ * Create the connector, register the LVDS DDC bus, and try to figure out what
+ * modes we can display on the LVDS panel (if present).
+ */
+bool intel_lvds_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_lvds *intel_lvds;
+ struct intel_encoder *intel_encoder;
+ struct intel_connector *intel_connector;
+ struct drm_connector *connector;
+ struct drm_encoder *encoder;
+ struct drm_display_mode *scan; /* *modes, *bios_mode; */
+ struct drm_crtc *crtc;
+ u32 lvds;
+ int pipe;
+ u8 pin;
+
+ if (!intel_lvds_supported(dev))
+ return false;
+
+ /* Skip init on machines we know falsely report LVDS */
+ if (dmi_check_system(intel_no_lvds))
+ return false;
+
+ pin = GMBUS_PORT_PANEL;
+ if (!lvds_is_present_in_vbt(dev, &pin)) {
+ DRM_DEBUG_KMS("LVDS is not present in VBT\n");
+ return false;
+ }
+
+ if (HAS_PCH_SPLIT(dev)) {
+ if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0)
+ return false;
+ if (dev_priv->edp.support) {
+ DRM_DEBUG_KMS("disable LVDS for eDP support\n");
+ return false;
+ }
+ }
+
+ intel_lvds = malloc(sizeof(struct intel_lvds), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+ intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ if (!HAS_PCH_SPLIT(dev)) {
+ intel_lvds->pfit_control = I915_READ(PFIT_CONTROL);
+ }
+
+ intel_encoder = &intel_lvds->base;
+ encoder = &intel_encoder->base;
+ connector = &intel_connector->base;
+ drm_connector_init(dev, &intel_connector->base, &intel_lvds_connector_funcs,
+ DRM_MODE_CONNECTOR_LVDS);
+
+ drm_encoder_init(dev, &intel_encoder->base, &intel_lvds_enc_funcs,
+ DRM_MODE_ENCODER_LVDS);
+
+ intel_connector_attach_encoder(intel_connector, intel_encoder);
+ intel_encoder->type = INTEL_OUTPUT_LVDS;
+
+ intel_encoder->clone_mask = (1 << INTEL_LVDS_CLONE_BIT);
+ if (HAS_PCH_SPLIT(dev))
+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
+ else
+ intel_encoder->crtc_mask = (1 << 1);
+
+ drm_encoder_helper_add(encoder, &intel_lvds_helper_funcs);
+ drm_connector_helper_add(connector, &intel_lvds_connector_helper_funcs);
+ connector->display_info.subpixel_order = SubPixelHorizontalRGB;
+ connector->interlace_allowed = false;
+ connector->doublescan_allowed = false;
+
+ /* create the scaling mode property */
+ drm_mode_create_scaling_mode_property(dev);
+ /*
+ * the initial panel fitting mode will be FULL_SCREEN.
+ */
+
+ drm_connector_attach_property(&intel_connector->base,
+ dev->mode_config.scaling_mode_property,
+ DRM_MODE_SCALE_ASPECT);
+ intel_lvds->fitting_mode = DRM_MODE_SCALE_ASPECT;
+ /*
+ * LVDS discovery:
+ * 1) check for EDID on DDC
+ * 2) check for VBT data
+ * 3) check to see if LVDS is already on
+ * if none of the above, no panel
+ * 4) make sure lid is open
+ * if closed, act like it's not there for now
+ */
+
+ /*
+ * Attempt to get the fixed panel mode from DDC. Assume that the
+ * preferred mode is the right one.
+ */
+ intel_lvds->edid = drm_get_edid(connector, dev_priv->gmbus[pin]);
+ if (intel_lvds->edid) {
+ if (drm_add_edid_modes(connector,
+ intel_lvds->edid)) {
+ drm_mode_connector_update_edid_property(connector,
+ intel_lvds->edid);
+ } else {
+ free(intel_lvds->edid, DRM_MEM_KMS);
+ intel_lvds->edid = NULL;
+ }
+ }
+ if (!intel_lvds->edid) {
+ /* Didn't get an EDID, so
+ * Set wide sync ranges so we get all modes
+ * handed to valid_mode for checking
+ */
+ connector->display_info.min_vfreq = 0;
+ connector->display_info.max_vfreq = 200;
+ connector->display_info.min_hfreq = 0;
+ connector->display_info.max_hfreq = 200;
+ }
+
+ list_for_each_entry(scan, &connector->probed_modes, head) {
+ if (scan->type & DRM_MODE_TYPE_PREFERRED) {
+ intel_lvds->fixed_mode =
+ drm_mode_duplicate(dev, scan);
+ intel_find_lvds_downclock(dev,
+ intel_lvds->fixed_mode,
+ connector);
+ goto out;
+ }
+ }
+
+ /* Failed to get EDID, what about VBT? */
+ if (dev_priv->lfp_lvds_vbt_mode) {
+ intel_lvds->fixed_mode =
+ drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
+ if (intel_lvds->fixed_mode) {
+ intel_lvds->fixed_mode->type |=
+ DRM_MODE_TYPE_PREFERRED;
+ goto out;
+ }
+ }
+
+ /*
+ * If we didn't get EDID, try checking if the panel is already turned
+ * on. If so, assume that whatever is currently programmed is the
+ * correct mode.
+ */
+
+ /* Ironlake: FIXME if still fail, not try pipe mode now */
+ if (HAS_PCH_SPLIT(dev))
+ goto failed;
+
+ lvds = I915_READ(LVDS);
+ pipe = (lvds & LVDS_PIPEB_SELECT) ? 1 : 0;
+ crtc = intel_get_crtc_for_pipe(dev, pipe);
+
+ if (crtc && (lvds & LVDS_PORT_EN)) {
+ intel_lvds->fixed_mode = intel_crtc_mode_get(dev, crtc);
+ if (intel_lvds->fixed_mode) {
+ intel_lvds->fixed_mode->type |=
+ DRM_MODE_TYPE_PREFERRED;
+ goto out;
+ }
+ }
+
+ /* If we still don't have a mode after all that, give up. */
+ if (!intel_lvds->fixed_mode)
+ goto failed;
+
+out:
+ if (HAS_PCH_SPLIT(dev)) {
+ u32 pwm;
+
+ pipe = (I915_READ(PCH_LVDS) & LVDS_PIPEB_SELECT) ? 1 : 0;
+
+ /* make sure PWM is enabled and locked to the LVDS pipe */
+ pwm = I915_READ(BLC_PWM_CPU_CTL2);
+ if (pipe == 0 && (pwm & PWM_PIPE_B))
+ I915_WRITE(BLC_PWM_CPU_CTL2, pwm & ~PWM_ENABLE);
+ if (pipe)
+ pwm |= PWM_PIPE_B;
+ else
+ pwm &= ~PWM_PIPE_B;
+ I915_WRITE(BLC_PWM_CPU_CTL2, pwm | PWM_ENABLE);
+
+ pwm = I915_READ(BLC_PWM_PCH_CTL1);
+ pwm |= PWM_PCH_ENABLE;
+ I915_WRITE(BLC_PWM_PCH_CTL1, pwm);
+ /*
+ * Unlock registers and just
+ * leave them unlocked
+ */
+ I915_WRITE(PCH_PP_CONTROL,
+ I915_READ(PCH_PP_CONTROL) | PANEL_UNLOCK_REGS);
+ } else {
+ /*
+ * Unlock registers and just
+ * leave them unlocked
+ */
+ I915_WRITE(PP_CONTROL,
+ I915_READ(PP_CONTROL) | PANEL_UNLOCK_REGS);
+ }
+#ifdef NOTYET
+ dev_priv->lid_notifier.notifier_call = intel_lid_notify;
+ if (acpi_lid_notifier_register(&dev_priv->lid_notifier)) {
+ DRM_DEBUG_KMS("lid notifier registration failed\n");
+ dev_priv->lid_notifier.notifier_call = NULL;
+ }
+#endif
+ /* keep the LVDS connector */
+ dev_priv->int_lvds_connector = connector;
+#if 0
+ drm_sysfs_connector_add(connector);
+#endif
+ intel_panel_setup_backlight(dev);
+ return true;
+
+failed:
+ DRM_DEBUG_KMS("No LVDS modes found, disabling.\n");
+ drm_connector_cleanup(connector);
+ drm_encoder_cleanup(encoder);
+ free(intel_lvds, DRM_MEM_KMS);
+ free(intel_connector, DRM_MEM_KMS);
+ return false;
+}
diff --git a/sys/dev/drm2/i915/intel_modes.c b/sys/dev/drm2/i915/intel_modes.c
new file mode 100644
index 000000000000..8bf1d59091db
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_modes.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
+ * Copyright (c) 2007, 2010 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/iicbus/iiconf.h>
+
+/**
+ * intel_ddc_probe
+ *
+ */
+bool intel_ddc_probe(struct intel_encoder *intel_encoder, int ddc_bus)
+{
+ struct drm_i915_private *dev_priv = intel_encoder->base.dev->dev_private;
+ u8 out_buf[] = { 0x0, 0x0};
+ u8 buf[2];
+ struct iic_msg msgs[] = {
+ {
+ .slave = DDC_ADDR,
+ .flags = IIC_M_WR,
+ .len = 1,
+ .buf = out_buf,
+ },
+ {
+ .slave = DDC_ADDR,
+ .flags = IIC_M_RD,
+ .len = 1,
+ .buf = buf,
+ }
+ };
+
+ return (iicbus_transfer(dev_priv->gmbus[ddc_bus], msgs, 2)
+ == 0/* XXXKIB 2*/);
+}
+
+/**
+ * intel_ddc_get_modes - get modelist from monitor
+ * @connector: DRM connector device to use
+ * @adapter: i2c adapter
+ *
+ * Fetch the EDID information from @connector using the DDC bus.
+ */
+int
+intel_ddc_get_modes(struct drm_connector *connector, device_t adapter)
+{
+ struct edid *edid;
+ int ret = 0;
+
+ edid = drm_get_edid(connector, adapter);
+ if (edid) {
+ drm_mode_connector_update_edid_property(connector, edid);
+ ret = drm_add_edid_modes(connector, edid);
+ drm_edid_to_eld(connector, edid);
+ connector->display_info.raw_edid = NULL;
+ free(edid, DRM_MEM_KMS);
+ }
+
+ return ret;
+}
+
+static const struct drm_prop_enum_list force_audio_names[] = {
+ { HDMI_AUDIO_OFF_DVI, "force-dvi" },
+ { HDMI_AUDIO_OFF, "off" },
+ { HDMI_AUDIO_AUTO, "auto" },
+ { HDMI_AUDIO_ON, "on" },
+};
+
+void
+intel_attach_force_audio_property(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_property *prop;
+
+ prop = dev_priv->force_audio_property;
+ if (prop == NULL) {
+ prop = drm_property_create_enum(dev, 0,
+ "audio",
+ force_audio_names,
+ DRM_ARRAY_SIZE(force_audio_names));
+ if (prop == NULL)
+ return;
+
+ dev_priv->force_audio_property = prop;
+ }
+ drm_connector_attach_property(connector, prop, 0);
+}
+
+static const struct drm_prop_enum_list broadcast_rgb_names[] = {
+ { 0, "Full" },
+ { 1, "Limited 16:235" },
+};
+
+void
+intel_attach_broadcast_rgb_property(struct drm_connector *connector)
+{
+ struct drm_device *dev = connector->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_property *prop;
+
+ prop = dev_priv->broadcast_rgb_property;
+ if (prop == NULL) {
+ prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
+ "Broadcast RGB",
+ broadcast_rgb_names,
+ DRM_ARRAY_SIZE(broadcast_rgb_names));
+ if (prop == NULL)
+ return;
+
+ dev_priv->broadcast_rgb_property = prop;
+ }
+
+ drm_connector_attach_property(connector, prop, 0);
+}
diff --git a/sys/dev/drm2/i915/intel_opregion.c b/sys/dev/drm2/i915/intel_opregion.c
new file mode 100644
index 000000000000..8229c3086ce2
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_opregion.c
@@ -0,0 +1,550 @@
+/*
+ * Copyright 2008 Intel Corporation <hong.liu@intel.com>
+ * Copyright 2008 Red Hat <mjg@redhat.com>
+ *
+ * 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, sub license, 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 (including the
+ * next paragraph) 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
+ * NON-INFRINGEMENT. IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS 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.
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+
+#define PCI_ASLE 0xe4
+#define PCI_ASLS 0xfc
+
+#define OPREGION_HEADER_OFFSET 0
+#define OPREGION_ACPI_OFFSET 0x100
+#define ACPI_CLID 0x01ac /* current lid state indicator */
+#define ACPI_CDCK 0x01b0 /* current docking state indicator */
+#define OPREGION_SWSCI_OFFSET 0x200
+#define OPREGION_ASLE_OFFSET 0x300
+#define OPREGION_VBT_OFFSET 0x400
+
+#define OPREGION_SIGNATURE "IntelGraphicsMem"
+#define MBOX_ACPI (1<<0)
+#define MBOX_SWSCI (1<<1)
+#define MBOX_ASLE (1<<2)
+
+struct opregion_header {
+ u8 signature[16];
+ u32 size;
+ u32 opregion_ver;
+ u8 bios_ver[32];
+ u8 vbios_ver[16];
+ u8 driver_ver[16];
+ u32 mboxes;
+ u8 reserved[164];
+} __attribute__((packed));
+
+/* OpRegion mailbox #1: public ACPI methods */
+struct opregion_acpi {
+ u32 drdy; /* driver readiness */
+ u32 csts; /* notification status */
+ u32 cevt; /* current event */
+ u8 rsvd1[20];
+ u32 didl[8]; /* supported display devices ID list */
+ u32 cpdl[8]; /* currently presented display list */
+ u32 cadl[8]; /* currently active display list */
+ u32 nadl[8]; /* next active devices list */
+ u32 aslp; /* ASL sleep time-out */
+ u32 tidx; /* toggle table index */
+ u32 chpd; /* current hotplug enable indicator */
+ u32 clid; /* current lid state*/
+ u32 cdck; /* current docking state */
+ u32 sxsw; /* Sx state resume */
+ u32 evts; /* ASL supported events */
+ u32 cnot; /* current OS notification */
+ u32 nrdy; /* driver status */
+ u8 rsvd2[60];
+} __attribute__((packed));
+
+/* OpRegion mailbox #2: SWSCI */
+struct opregion_swsci {
+ u32 scic; /* SWSCI command|status|data */
+ u32 parm; /* command parameters */
+ u32 dslp; /* driver sleep time-out */
+ u8 rsvd[244];
+} __attribute__((packed));
+
+/* OpRegion mailbox #3: ASLE */
+struct opregion_asle {
+ u32 ardy; /* driver readiness */
+ u32 aslc; /* ASLE interrupt command */
+ u32 tche; /* technology enabled indicator */
+ u32 alsi; /* current ALS illuminance reading */
+ u32 bclp; /* backlight brightness to set */
+ u32 pfit; /* panel fitting state */
+ u32 cblv; /* current brightness level */
+ u16 bclm[20]; /* backlight level duty cycle mapping table */
+ u32 cpfm; /* current panel fitting mode */
+ u32 epfm; /* enabled panel fitting modes */
+ u8 plut[74]; /* panel LUT and identifier */
+ u32 pfmb; /* PWM freq and min brightness */
+ u8 rsvd[102];
+} __attribute__((packed));
+
+/* ASLE irq request bits */
+#define ASLE_SET_ALS_ILLUM (1 << 0)
+#define ASLE_SET_BACKLIGHT (1 << 1)
+#define ASLE_SET_PFIT (1 << 2)
+#define ASLE_SET_PWM_FREQ (1 << 3)
+#define ASLE_REQ_MSK 0xf
+
+/* response bits of ASLE irq request */
+#define ASLE_ALS_ILLUM_FAILED (1<<10)
+#define ASLE_BACKLIGHT_FAILED (1<<12)
+#define ASLE_PFIT_FAILED (1<<14)
+#define ASLE_PWM_FREQ_FAILED (1<<16)
+
+/* ASLE backlight brightness to set */
+#define ASLE_BCLP_VALID (1<<31)
+#define ASLE_BCLP_MSK (~(1<<31))
+
+/* ASLE panel fitting request */
+#define ASLE_PFIT_VALID (1<<31)
+#define ASLE_PFIT_CENTER (1<<0)
+#define ASLE_PFIT_STRETCH_TEXT (1<<1)
+#define ASLE_PFIT_STRETCH_GFX (1<<2)
+
+/* PWM frequency and minimum brightness */
+#define ASLE_PFMB_BRIGHTNESS_MASK (0xff)
+#define ASLE_PFMB_BRIGHTNESS_VALID (1<<8)
+#define ASLE_PFMB_PWM_MASK (0x7ffffe00)
+#define ASLE_PFMB_PWM_VALID (1<<31)
+
+#define ASLE_CBLV_VALID (1<<31)
+
+#define ACPI_OTHER_OUTPUT (0<<8)
+#define ACPI_VGA_OUTPUT (1<<8)
+#define ACPI_TV_OUTPUT (2<<8)
+#define ACPI_DIGITAL_OUTPUT (3<<8)
+#define ACPI_LVDS_OUTPUT (4<<8)
+
+#ifdef CONFIG_ACPI
+static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct opregion_asle *asle = dev_priv->opregion.asle;
+ u32 max;
+
+ if (!(bclp & ASLE_BCLP_VALID))
+ return ASLE_BACKLIGHT_FAILED;
+
+ bclp &= ASLE_BCLP_MSK;
+ if (bclp > 255)
+ return ASLE_BACKLIGHT_FAILED;
+
+ max = intel_panel_get_max_backlight(dev);
+ intel_panel_set_backlight(dev, bclp * max / 255);
+ asle->cblv = (bclp*0x64)/0xff | ASLE_CBLV_VALID;
+
+ return 0;
+}
+
+static u32 asle_set_als_illum(struct drm_device *dev, u32 alsi)
+{
+ /* alsi is the current ALS reading in lux. 0 indicates below sensor
+ range, 0xffff indicates above sensor range. 1-0xfffe are valid */
+ return 0;
+}
+
+static u32 asle_set_pwm_freq(struct drm_device *dev, u32 pfmb)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ if (pfmb & ASLE_PFMB_PWM_VALID) {
+ u32 blc_pwm_ctl = I915_READ(BLC_PWM_CTL);
+ u32 pwm = pfmb & ASLE_PFMB_PWM_MASK;
+ blc_pwm_ctl &= BACKLIGHT_DUTY_CYCLE_MASK;
+ pwm = pwm >> 9;
+ /* FIXME - what do we do with the PWM? */
+ }
+ return 0;
+}
+
+static u32 asle_set_pfit(struct drm_device *dev, u32 pfit)
+{
+ /* Panel fitting is currently controlled by the X code, so this is a
+ noop until modesetting support works fully */
+ if (!(pfit & ASLE_PFIT_VALID))
+ return ASLE_PFIT_FAILED;
+ return 0;
+}
+
+void intel_opregion_asle_intr(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct opregion_asle *asle = dev_priv->opregion.asle;
+ u32 asle_stat = 0;
+ u32 asle_req;
+
+ if (!asle)
+ return;
+
+ asle_req = asle->aslc & ASLE_REQ_MSK;
+
+ if (!asle_req) {
+ DRM_DEBUG("non asle set request??\n");
+ return;
+ }
+
+ if (asle_req & ASLE_SET_ALS_ILLUM)
+ asle_stat |= asle_set_als_illum(dev, asle->alsi);
+
+ if (asle_req & ASLE_SET_BACKLIGHT)
+ asle_stat |= asle_set_backlight(dev, asle->bclp);
+
+ if (asle_req & ASLE_SET_PFIT)
+ asle_stat |= asle_set_pfit(dev, asle->pfit);
+
+ if (asle_req & ASLE_SET_PWM_FREQ)
+ asle_stat |= asle_set_pwm_freq(dev, asle->pfmb);
+
+ asle->aslc = asle_stat;
+}
+
+void intel_opregion_gse_intr(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct opregion_asle *asle = dev_priv->opregion.asle;
+ u32 asle_stat = 0;
+ u32 asle_req;
+
+ if (!asle)
+ return;
+
+ asle_req = asle->aslc & ASLE_REQ_MSK;
+
+ if (!asle_req) {
+ DRM_DEBUG("non asle set request??\n");
+ return;
+ }
+
+ if (asle_req & ASLE_SET_ALS_ILLUM) {
+ DRM_DEBUG("Illum is not supported\n");
+ asle_stat |= ASLE_ALS_ILLUM_FAILED;
+ }
+
+ if (asle_req & ASLE_SET_BACKLIGHT)
+ asle_stat |= asle_set_backlight(dev, asle->bclp);
+
+ if (asle_req & ASLE_SET_PFIT) {
+ DRM_DEBUG("Pfit is not supported\n");
+ asle_stat |= ASLE_PFIT_FAILED;
+ }
+
+ if (asle_req & ASLE_SET_PWM_FREQ) {
+ DRM_DEBUG("PWM freq is not supported\n");
+ asle_stat |= ASLE_PWM_FREQ_FAILED;
+ }
+
+ asle->aslc = asle_stat;
+}
+#define ASLE_ALS_EN (1<<0)
+#define ASLE_BLC_EN (1<<1)
+#define ASLE_PFIT_EN (1<<2)
+#define ASLE_PFMB_EN (1<<3)
+
+void intel_opregion_enable_asle(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct opregion_asle *asle = dev_priv->opregion.asle;
+
+ if (asle) {
+ if (IS_MOBILE(dev))
+ intel_enable_asle(dev);
+
+ asle->tche = ASLE_ALS_EN | ASLE_BLC_EN | ASLE_PFIT_EN |
+ ASLE_PFMB_EN;
+ asle->ardy = 1;
+ }
+}
+
+#define ACPI_EV_DISPLAY_SWITCH (1<<0)
+#define ACPI_EV_LID (1<<1)
+#define ACPI_EV_DOCK (1<<2)
+
+static struct intel_opregion *system_opregion;
+
+static int intel_opregion_video_event(struct notifier_block *nb,
+ unsigned long val, void *data)
+{
+ /* The only video events relevant to opregion are 0x80. These indicate
+ either a docking event, lid switch or display switch request. In
+ Linux, these are handled by the dock, button and video drivers.
+ */
+ struct opregion_acpi *acpi;
+ struct acpi_bus_event *event = data;
+ int ret = NOTIFY_OK;
+
+ if (strcmp(event->device_class, ACPI_VIDEO_CLASS) != 0)
+ return NOTIFY_DONE;
+
+ if (!system_opregion)
+ return NOTIFY_DONE;
+
+ acpi = system_opregion->acpi;
+
+ if (event->type == 0x80 && !(acpi->cevt & 0x1))
+ ret = NOTIFY_BAD;
+
+ acpi->csts = 0;
+
+ return ret;
+}
+
+static struct notifier_block intel_opregion_notifier = {
+ .notifier_call = intel_opregion_video_event,
+};
+
+/*
+ * Initialise the DIDL field in opregion. This passes a list of devices to
+ * the firmware. Values are defined by section B.4.2 of the ACPI specification
+ * (version 3)
+ */
+
+static void intel_didl_outputs(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_opregion *opregion = &dev_priv->opregion;
+ struct drm_connector *connector;
+ acpi_handle handle;
+ struct acpi_device *acpi_dev, *acpi_cdev, *acpi_video_bus = NULL;
+ unsigned long long device_id;
+ acpi_status status;
+ int i = 0;
+
+ handle = DEVICE_ACPI_HANDLE(&dev->pdev->dev);
+ if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &acpi_dev)))
+ return;
+
+ if (acpi_is_video_device(acpi_dev))
+ acpi_video_bus = acpi_dev;
+ else {
+ list_for_each_entry(acpi_cdev, &acpi_dev->children, node) {
+ if (acpi_is_video_device(acpi_cdev)) {
+ acpi_video_bus = acpi_cdev;
+ break;
+ }
+ }
+ }
+
+ if (!acpi_video_bus) {
+ printk(KERN_WARNING "No ACPI video bus found\n");
+ return;
+ }
+
+ list_for_each_entry(acpi_cdev, &acpi_video_bus->children, node) {
+ if (i >= 8) {
+ dev_printk(KERN_ERR, &dev->pdev->dev,
+ "More than 8 outputs detected\n");
+ return;
+ }
+ status =
+ acpi_evaluate_integer(acpi_cdev->handle, "_ADR",
+ NULL, &device_id);
+ if (ACPI_SUCCESS(status)) {
+ if (!device_id)
+ goto blind_set;
+ opregion->acpi->didl[i] = (u32)(device_id & 0x0f0f);
+ i++;
+ }
+ }
+
+end:
+ /* If fewer than 8 outputs, the list must be null terminated */
+ if (i < 8)
+ opregion->acpi->didl[i] = 0;
+ return;
+
+blind_set:
+ i = 0;
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ int output_type = ACPI_OTHER_OUTPUT;
+ if (i >= 8) {
+ device_printf(dev->device,
+ "More than 8 outputs detected\n");
+ return;
+ }
+ switch (connector->connector_type) {
+ case DRM_MODE_CONNECTOR_VGA:
+ case DRM_MODE_CONNECTOR_DVIA:
+ output_type = ACPI_VGA_OUTPUT;
+ break;
+ case DRM_MODE_CONNECTOR_Composite:
+ case DRM_MODE_CONNECTOR_SVIDEO:
+ case DRM_MODE_CONNECTOR_Component:
+ case DRM_MODE_CONNECTOR_9PinDIN:
+ output_type = ACPI_TV_OUTPUT;
+ break;
+ case DRM_MODE_CONNECTOR_DVII:
+ case DRM_MODE_CONNECTOR_DVID:
+ case DRM_MODE_CONNECTOR_DisplayPort:
+ case DRM_MODE_CONNECTOR_HDMIA:
+ case DRM_MODE_CONNECTOR_HDMIB:
+ output_type = ACPI_DIGITAL_OUTPUT;
+ break;
+ case DRM_MODE_CONNECTOR_LVDS:
+ output_type = ACPI_LVDS_OUTPUT;
+ break;
+ }
+ opregion->acpi->didl[i] |= (1<<31) | output_type | i;
+ i++;
+ }
+ goto end;
+}
+
+void intel_opregion_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_opregion *opregion = &dev_priv->opregion;
+
+ if (!opregion->header)
+ return;
+
+ if (opregion->acpi) {
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ intel_didl_outputs(dev);
+
+ /* Notify BIOS we are ready to handle ACPI video ext notifs.
+ * Right now, all the events are handled by the ACPI video module.
+ * We don't actually need to do anything with them. */
+ opregion->acpi->csts = 0;
+ opregion->acpi->drdy = 1;
+
+ system_opregion = opregion;
+ register_acpi_notifier(&intel_opregion_notifier);
+ }
+
+ if (opregion->asle)
+ intel_opregion_enable_asle(dev);
+}
+
+void intel_opregion_fini(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_opregion *opregion = &dev_priv->opregion;
+
+ if (!opregion->header)
+ return;
+
+ if (opregion->acpi) {
+ opregion->acpi->drdy = 0;
+
+ system_opregion = NULL;
+ unregister_acpi_notifier(&intel_opregion_notifier);
+ }
+
+ /* just clear all opregion memory pointers now */
+ iounmap(opregion->header);
+ opregion->header = NULL;
+ opregion->acpi = NULL;
+ opregion->swsci = NULL;
+ opregion->asle = NULL;
+ opregion->vbt = NULL;
+}
+#else
+int
+intel_opregion_init(struct drm_device *dev)
+{
+
+ return (0);
+}
+
+void
+intel_opregion_fini(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv;
+ struct intel_opregion *opregion;
+
+ dev_priv = dev->dev_private;
+ opregion = &dev_priv->opregion;
+
+ if (opregion->header == NULL)
+ return;
+
+ pmap_unmapdev((vm_offset_t)opregion->header, OPREGION_SIZE);
+ opregion->header = NULL;
+ opregion->acpi = NULL;
+ opregion->swsci = NULL;
+ opregion->asle = NULL;
+ opregion->vbt = NULL;
+}
+#endif
+
+int intel_opregion_setup(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_opregion *opregion = &dev_priv->opregion;
+ char *base;
+ u32 asls, mboxes;
+ int err = 0;
+
+ asls = pci_read_config(dev->device, PCI_ASLS, 4);
+ DRM_DEBUG("graphic opregion physical addr: 0x%x\n", asls);
+ if (asls == 0) {
+ DRM_DEBUG("ACPI OpRegion not supported!\n");
+ return -ENOTSUP;
+ }
+
+ base = (void *)pmap_mapbios(asls, OPREGION_SIZE);
+ if (!base)
+ return -ENOMEM;
+
+ if (memcmp(base, OPREGION_SIGNATURE, 16)) {
+ DRM_DEBUG("opregion signature mismatch\n");
+ err = -EINVAL;
+ goto err_out;
+ }
+ opregion->header = (struct opregion_header *)base;
+ opregion->vbt = base + OPREGION_VBT_OFFSET;
+
+ opregion->lid_state = (u32 *)(base + ACPI_CLID);
+
+ mboxes = opregion->header->mboxes;
+ if (mboxes & MBOX_ACPI) {
+ DRM_DEBUG("Public ACPI methods supported\n");
+ opregion->acpi = (struct opregion_acpi *)(base +
+ OPREGION_ACPI_OFFSET);
+ }
+
+ if (mboxes & MBOX_SWSCI) {
+ DRM_DEBUG("SWSCI supported\n");
+ opregion->swsci = (struct opregion_swsci *)(base +
+ OPREGION_SWSCI_OFFSET);
+ }
+ if (mboxes & MBOX_ASLE) {
+ DRM_DEBUG("ASLE supported\n");
+ opregion->asle = (struct opregion_asle *)(base +
+ OPREGION_ASLE_OFFSET);
+ }
+
+ return 0;
+
+err_out:
+ pmap_unmapdev((vm_offset_t)base, OPREGION_SIZE);
+ return err;
+}
diff --git a/sys/dev/drm2/i915/intel_overlay.c b/sys/dev/drm2/i915/intel_overlay.c
new file mode 100644
index 000000000000..34f2c39224fd
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_overlay.c
@@ -0,0 +1,1582 @@
+/*
+ * Copyright © 2009
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Daniel Vetter <daniel@ffwll.ch>
+ *
+ * Derived from Xorg ddx, xf86-video-intel, src/i830_video.c
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/i915_reg.h>
+#include <dev/drm2/i915/intel_drv.h>
+
+/* Limits for overlay size. According to intel doc, the real limits are:
+ * Y width: 4095, UV width (planar): 2047, Y height: 2047,
+ * UV width (planar): * 1023. But the xorg thinks 2048 for height and width. Use
+ * the mininum of both. */
+#define IMAGE_MAX_WIDTH 2048
+#define IMAGE_MAX_HEIGHT 2046 /* 2 * 1023 */
+/* on 830 and 845 these large limits result in the card hanging */
+#define IMAGE_MAX_WIDTH_LEGACY 1024
+#define IMAGE_MAX_HEIGHT_LEGACY 1088
+
+/* overlay register definitions */
+/* OCMD register */
+#define OCMD_TILED_SURFACE (0x1<<19)
+#define OCMD_MIRROR_MASK (0x3<<17)
+#define OCMD_MIRROR_MODE (0x3<<17)
+#define OCMD_MIRROR_HORIZONTAL (0x1<<17)
+#define OCMD_MIRROR_VERTICAL (0x2<<17)
+#define OCMD_MIRROR_BOTH (0x3<<17)
+#define OCMD_BYTEORDER_MASK (0x3<<14) /* zero for YUYV or FOURCC YUY2 */
+#define OCMD_UV_SWAP (0x1<<14) /* YVYU */
+#define OCMD_Y_SWAP (0x2<<14) /* UYVY or FOURCC UYVY */
+#define OCMD_Y_AND_UV_SWAP (0x3<<14) /* VYUY */
+#define OCMD_SOURCE_FORMAT_MASK (0xf<<10)
+#define OCMD_RGB_888 (0x1<<10) /* not in i965 Intel docs */
+#define OCMD_RGB_555 (0x2<<10) /* not in i965 Intel docs */
+#define OCMD_RGB_565 (0x3<<10) /* not in i965 Intel docs */
+#define OCMD_YUV_422_PACKED (0x8<<10)
+#define OCMD_YUV_411_PACKED (0x9<<10) /* not in i965 Intel docs */
+#define OCMD_YUV_420_PLANAR (0xc<<10)
+#define OCMD_YUV_422_PLANAR (0xd<<10)
+#define OCMD_YUV_410_PLANAR (0xe<<10) /* also 411 */
+#define OCMD_TVSYNCFLIP_PARITY (0x1<<9)
+#define OCMD_TVSYNCFLIP_ENABLE (0x1<<7)
+#define OCMD_BUF_TYPE_MASK (0x1<<5)
+#define OCMD_BUF_TYPE_FRAME (0x0<<5)
+#define OCMD_BUF_TYPE_FIELD (0x1<<5)
+#define OCMD_TEST_MODE (0x1<<4)
+#define OCMD_BUFFER_SELECT (0x3<<2)
+#define OCMD_BUFFER0 (0x0<<2)
+#define OCMD_BUFFER1 (0x1<<2)
+#define OCMD_FIELD_SELECT (0x1<<2)
+#define OCMD_FIELD0 (0x0<<1)
+#define OCMD_FIELD1 (0x1<<1)
+#define OCMD_ENABLE (0x1<<0)
+
+/* OCONFIG register */
+#define OCONF_PIPE_MASK (0x1<<18)
+#define OCONF_PIPE_A (0x0<<18)
+#define OCONF_PIPE_B (0x1<<18)
+#define OCONF_GAMMA2_ENABLE (0x1<<16)
+#define OCONF_CSC_MODE_BT601 (0x0<<5)
+#define OCONF_CSC_MODE_BT709 (0x1<<5)
+#define OCONF_CSC_BYPASS (0x1<<4)
+#define OCONF_CC_OUT_8BIT (0x1<<3)
+#define OCONF_TEST_MODE (0x1<<2)
+#define OCONF_THREE_LINE_BUFFER (0x1<<0)
+#define OCONF_TWO_LINE_BUFFER (0x0<<0)
+
+/* DCLRKM (dst-key) register */
+#define DST_KEY_ENABLE (0x1<<31)
+#define CLK_RGB24_MASK 0x0
+#define CLK_RGB16_MASK 0x070307
+#define CLK_RGB15_MASK 0x070707
+#define CLK_RGB8I_MASK 0xffffff
+
+#define RGB16_TO_COLORKEY(c) \
+ (((c & 0xF800) << 8) | ((c & 0x07E0) << 5) | ((c & 0x001F) << 3))
+#define RGB15_TO_COLORKEY(c) \
+ (((c & 0x7c00) << 9) | ((c & 0x03E0) << 6) | ((c & 0x001F) << 3))
+
+/* overlay flip addr flag */
+#define OFC_UPDATE 0x1
+
+/* polyphase filter coefficients */
+#define N_HORIZ_Y_TAPS 5
+#define N_VERT_Y_TAPS 3
+#define N_HORIZ_UV_TAPS 3
+#define N_VERT_UV_TAPS 3
+#define N_PHASES 17
+#define MAX_TAPS 5
+
+/* memory bufferd overlay registers */
+struct overlay_registers {
+ u32 OBUF_0Y;
+ u32 OBUF_1Y;
+ u32 OBUF_0U;
+ u32 OBUF_0V;
+ u32 OBUF_1U;
+ u32 OBUF_1V;
+ u32 OSTRIDE;
+ u32 YRGB_VPH;
+ u32 UV_VPH;
+ u32 HORZ_PH;
+ u32 INIT_PHS;
+ u32 DWINPOS;
+ u32 DWINSZ;
+ u32 SWIDTH;
+ u32 SWIDTHSW;
+ u32 SHEIGHT;
+ u32 YRGBSCALE;
+ u32 UVSCALE;
+ u32 OCLRC0;
+ u32 OCLRC1;
+ u32 DCLRKV;
+ u32 DCLRKM;
+ u32 SCLRKVH;
+ u32 SCLRKVL;
+ u32 SCLRKEN;
+ u32 OCONFIG;
+ u32 OCMD;
+ u32 RESERVED1; /* 0x6C */
+ u32 OSTART_0Y;
+ u32 OSTART_1Y;
+ u32 OSTART_0U;
+ u32 OSTART_0V;
+ u32 OSTART_1U;
+ u32 OSTART_1V;
+ u32 OTILEOFF_0Y;
+ u32 OTILEOFF_1Y;
+ u32 OTILEOFF_0U;
+ u32 OTILEOFF_0V;
+ u32 OTILEOFF_1U;
+ u32 OTILEOFF_1V;
+ u32 FASTHSCALE; /* 0xA0 */
+ u32 UVSCALEV; /* 0xA4 */
+ u32 RESERVEDC[(0x200 - 0xA8) / 4]; /* 0xA8 - 0x1FC */
+ u16 Y_VCOEFS[N_VERT_Y_TAPS * N_PHASES]; /* 0x200 */
+ u16 RESERVEDD[0x100 / 2 - N_VERT_Y_TAPS * N_PHASES];
+ u16 Y_HCOEFS[N_HORIZ_Y_TAPS * N_PHASES]; /* 0x300 */
+ u16 RESERVEDE[0x200 / 2 - N_HORIZ_Y_TAPS * N_PHASES];
+ u16 UV_VCOEFS[N_VERT_UV_TAPS * N_PHASES]; /* 0x500 */
+ u16 RESERVEDF[0x100 / 2 - N_VERT_UV_TAPS * N_PHASES];
+ u16 UV_HCOEFS[N_HORIZ_UV_TAPS * N_PHASES]; /* 0x600 */
+ u16 RESERVEDG[0x100 / 2 - N_HORIZ_UV_TAPS * N_PHASES];
+};
+
+struct intel_overlay {
+ struct drm_device *dev;
+ struct intel_crtc *crtc;
+ struct drm_i915_gem_object *vid_bo;
+ struct drm_i915_gem_object *old_vid_bo;
+ int active;
+ int pfit_active;
+ u32 pfit_vscale_ratio; /* shifted-point number, (1<<12) == 1.0 */
+ u32 color_key;
+ u32 brightness, contrast, saturation;
+ u32 old_xscale, old_yscale;
+ /* register access */
+ u32 flip_addr;
+ struct drm_i915_gem_object *reg_bo;
+ /* flip handling */
+ uint32_t last_flip_req;
+ void (*flip_tail)(struct intel_overlay *);
+};
+
+static struct overlay_registers *
+intel_overlay_map_regs(struct intel_overlay *overlay)
+{
+ struct overlay_registers *regs;
+
+ if (OVERLAY_NEEDS_PHYSICAL(overlay->dev)) {
+ regs = overlay->reg_bo->phys_obj->handle->vaddr;
+ } else {
+ regs = pmap_mapdev_attr(overlay->dev->agp->base +
+ overlay->reg_bo->gtt_offset, PAGE_SIZE,
+ PAT_WRITE_COMBINING);
+ }
+ return (regs);
+}
+
+static void intel_overlay_unmap_regs(struct intel_overlay *overlay,
+ struct overlay_registers *regs)
+{
+ if (!OVERLAY_NEEDS_PHYSICAL(overlay->dev))
+ pmap_unmapdev((vm_offset_t)regs, PAGE_SIZE);
+}
+
+static int intel_overlay_do_wait_request(struct intel_overlay *overlay,
+ struct drm_i915_gem_request *request,
+ void (*tail)(struct intel_overlay *))
+{
+ struct drm_device *dev = overlay->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int ret;
+
+ KASSERT(!overlay->last_flip_req, ("Overlay already has flip req"));
+ ret = i915_add_request(LP_RING(dev_priv), NULL, request);
+ if (ret) {
+ free(request, DRM_I915_GEM);
+ return ret;
+ }
+ overlay->last_flip_req = request->seqno;
+ overlay->flip_tail = tail;
+ ret = i915_wait_request(LP_RING(dev_priv), overlay->last_flip_req,
+ true);
+ if (ret)
+ return ret;
+
+ overlay->last_flip_req = 0;
+ return 0;
+}
+
+/* Workaround for i830 bug where pipe a must be enable to change control regs */
+static int
+i830_activate_pipe_a(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_crtc *crtc;
+ struct drm_crtc_helper_funcs *crtc_funcs;
+ struct drm_display_mode vesa_640x480 = {
+ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
+ 752, 800, 0, 480, 489, 492, 525, 0,
+ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC)
+ }, *mode;
+
+ crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[0]);
+ if (crtc->dpms_mode == DRM_MODE_DPMS_ON)
+ return 0;
+
+ /* most i8xx have pipe a forced on, so don't trust dpms mode */
+ if (I915_READ(_PIPEACONF) & PIPECONF_ENABLE)
+ return 0;
+
+ crtc_funcs = crtc->base.helper_private;
+ if (crtc_funcs->dpms == NULL)
+ return 0;
+
+ DRM_DEBUG_DRIVER("Enabling pipe A in order to enable overlay\n");
+
+ mode = drm_mode_duplicate(dev, &vesa_640x480);
+ drm_mode_set_crtcinfo(mode, 0);
+ if (!drm_crtc_helper_set_mode(&crtc->base, mode,
+ crtc->base.x, crtc->base.y,
+ crtc->base.fb))
+ return 0;
+
+ crtc_funcs->dpms(&crtc->base, DRM_MODE_DPMS_ON);
+ return 1;
+}
+
+static void
+i830_deactivate_pipe_a(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[0];
+ struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+
+ crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
+}
+
+/* overlay needs to be disable in OCMD reg */
+static int intel_overlay_on(struct intel_overlay *overlay)
+{
+ struct drm_device *dev = overlay->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_gem_request *request;
+ int pipe_a_quirk = 0;
+ int ret;
+
+ KASSERT(!overlay->active, ("Overlay is active"));
+ overlay->active = 1;
+
+ if (IS_I830(dev)) {
+ pipe_a_quirk = i830_activate_pipe_a(dev);
+ if (pipe_a_quirk < 0)
+ return pipe_a_quirk;
+ }
+
+ request = malloc(sizeof(*request), DRM_I915_GEM, M_WAITOK | M_ZERO);
+
+ ret = BEGIN_LP_RING(4);
+ if (ret) {
+ free(request, DRM_I915_GEM);
+ goto out;
+ }
+
+ OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_ON);
+ OUT_RING(overlay->flip_addr | OFC_UPDATE);
+ OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
+ OUT_RING(MI_NOOP);
+ ADVANCE_LP_RING();
+
+ ret = intel_overlay_do_wait_request(overlay, request, NULL);
+out:
+ if (pipe_a_quirk)
+ i830_deactivate_pipe_a(dev);
+
+ return ret;
+}
+
+/* overlay needs to be enabled in OCMD reg */
+static int intel_overlay_continue(struct intel_overlay *overlay,
+ bool load_polyphase_filter)
+{
+ struct drm_device *dev = overlay->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_gem_request *request;
+ u32 flip_addr = overlay->flip_addr;
+ u32 tmp;
+ int ret;
+
+ KASSERT(overlay->active, ("Overlay not active"));
+
+ request = malloc(sizeof(*request), DRM_I915_GEM, M_WAITOK | M_ZERO);
+
+ if (load_polyphase_filter)
+ flip_addr |= OFC_UPDATE;
+
+ /* check for underruns */
+ tmp = I915_READ(DOVSTA);
+ if (tmp & (1 << 17))
+ DRM_DEBUG("overlay underrun, DOVSTA: %x\n", tmp);
+
+ ret = BEGIN_LP_RING(2);
+ if (ret) {
+ free(request, DRM_I915_GEM);
+ return ret;
+ }
+ OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE);
+ OUT_RING(flip_addr);
+ ADVANCE_LP_RING();
+
+ ret = i915_add_request(LP_RING(dev_priv), NULL, request);
+ if (ret) {
+ free(request, DRM_I915_GEM);
+ return ret;
+ }
+
+ overlay->last_flip_req = request->seqno;
+ return 0;
+}
+
+static void intel_overlay_release_old_vid_tail(struct intel_overlay *overlay)
+{
+ struct drm_i915_gem_object *obj = overlay->old_vid_bo;
+
+ i915_gem_object_unpin(obj);
+ drm_gem_object_unreference(&obj->base);
+
+ overlay->old_vid_bo = NULL;
+}
+
+static void intel_overlay_off_tail(struct intel_overlay *overlay)
+{
+ struct drm_i915_gem_object *obj = overlay->vid_bo;
+
+ /* never have the overlay hw on without showing a frame */
+ KASSERT(overlay->vid_bo != NULL, ("No vid_bo"));
+
+ i915_gem_object_unpin(obj);
+ drm_gem_object_unreference(&obj->base);
+ overlay->vid_bo = NULL;
+
+ overlay->crtc->overlay = NULL;
+ overlay->crtc = NULL;
+ overlay->active = 0;
+}
+
+/* overlay needs to be disabled in OCMD reg */
+static int intel_overlay_off(struct intel_overlay *overlay)
+{
+ struct drm_device *dev = overlay->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 flip_addr = overlay->flip_addr;
+ struct drm_i915_gem_request *request;
+ int ret;
+
+ KASSERT(overlay->active, ("Overlay is not active"));
+
+ request = malloc(sizeof(*request), DRM_I915_GEM, M_WAITOK | M_ZERO);
+
+ /* According to intel docs the overlay hw may hang (when switching
+ * off) without loading the filter coeffs. It is however unclear whether
+ * this applies to the disabling of the overlay or to the switching off
+ * of the hw. Do it in both cases */
+ flip_addr |= OFC_UPDATE;
+
+ ret = BEGIN_LP_RING(6);
+ if (ret) {
+ free(request, DRM_I915_GEM);
+ return ret;
+ }
+ /* wait for overlay to go idle */
+ OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE);
+ OUT_RING(flip_addr);
+ OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
+ /* turn overlay off */
+ OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_OFF);
+ OUT_RING(flip_addr);
+ OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
+ ADVANCE_LP_RING();
+
+ return intel_overlay_do_wait_request(overlay, request,
+ intel_overlay_off_tail);
+}
+
+/* recover from an interruption due to a signal
+ * We have to be careful not to repeat work forever an make forward progess. */
+static int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay)
+{
+ struct drm_device *dev = overlay->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int ret;
+
+ if (overlay->last_flip_req == 0)
+ return 0;
+
+ ret = i915_wait_request(LP_RING(dev_priv), overlay->last_flip_req,
+ true);
+ if (ret)
+ return ret;
+
+ if (overlay->flip_tail)
+ overlay->flip_tail(overlay);
+
+ overlay->last_flip_req = 0;
+ return 0;
+}
+
+/* Wait for pending overlay flip and release old frame.
+ * Needs to be called before the overlay register are changed
+ * via intel_overlay_(un)map_regs
+ */
+static int intel_overlay_release_old_vid(struct intel_overlay *overlay)
+{
+ struct drm_device *dev = overlay->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int ret;
+
+ /* Only wait if there is actually an old frame to release to
+ * guarantee forward progress.
+ */
+ if (!overlay->old_vid_bo)
+ return 0;
+
+ if (I915_READ(ISR) & I915_OVERLAY_PLANE_FLIP_PENDING_INTERRUPT) {
+ struct drm_i915_gem_request *request;
+
+ /* synchronous slowpath */
+ request = malloc(sizeof(*request), DRM_I915_GEM, M_WAITOK | M_ZERO);
+
+ ret = BEGIN_LP_RING(2);
+ if (ret) {
+ free(request, DRM_I915_GEM);
+ return ret;
+ }
+
+ OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
+ OUT_RING(MI_NOOP);
+ ADVANCE_LP_RING();
+
+ ret = intel_overlay_do_wait_request(overlay, request,
+ intel_overlay_release_old_vid_tail);
+ if (ret)
+ return ret;
+ }
+
+ intel_overlay_release_old_vid_tail(overlay);
+ return 0;
+}
+
+struct put_image_params {
+ int format;
+ short dst_x;
+ short dst_y;
+ short dst_w;
+ short dst_h;
+ short src_w;
+ short src_scan_h;
+ short src_scan_w;
+ short src_h;
+ short stride_Y;
+ short stride_UV;
+ int offset_Y;
+ int offset_U;
+ int offset_V;
+};
+
+static int packed_depth_bytes(u32 format)
+{
+ switch (format & I915_OVERLAY_DEPTH_MASK) {
+ case I915_OVERLAY_YUV422:
+ return 4;
+ case I915_OVERLAY_YUV411:
+ /* return 6; not implemented */
+ default:
+ return -EINVAL;
+ }
+}
+
+static int packed_width_bytes(u32 format, short width)
+{
+ switch (format & I915_OVERLAY_DEPTH_MASK) {
+ case I915_OVERLAY_YUV422:
+ return width << 1;
+ default:
+ return -EINVAL;
+ }
+}
+
+static int uv_hsubsampling(u32 format)
+{
+ switch (format & I915_OVERLAY_DEPTH_MASK) {
+ case I915_OVERLAY_YUV422:
+ case I915_OVERLAY_YUV420:
+ return 2;
+ case I915_OVERLAY_YUV411:
+ case I915_OVERLAY_YUV410:
+ return 4;
+ default:
+ return -EINVAL;
+ }
+}
+
+static int uv_vsubsampling(u32 format)
+{
+ switch (format & I915_OVERLAY_DEPTH_MASK) {
+ case I915_OVERLAY_YUV420:
+ case I915_OVERLAY_YUV410:
+ return 2;
+ case I915_OVERLAY_YUV422:
+ case I915_OVERLAY_YUV411:
+ return 1;
+ default:
+ return -EINVAL;
+ }
+}
+
+static u32 calc_swidthsw(struct drm_device *dev, u32 offset, u32 width)
+{
+ u32 mask, shift, ret;
+ if (IS_GEN2(dev)) {
+ mask = 0x1f;
+ shift = 5;
+ } else {
+ mask = 0x3f;
+ shift = 6;
+ }
+ ret = ((offset + width + mask) >> shift) - (offset >> shift);
+ if (!IS_GEN2(dev))
+ ret <<= 1;
+ ret -= 1;
+ return ret << 2;
+}
+
+static const u16 y_static_hcoeffs[N_HORIZ_Y_TAPS * N_PHASES] = {
+ 0x3000, 0xb4a0, 0x1930, 0x1920, 0xb4a0,
+ 0x3000, 0xb500, 0x19d0, 0x1880, 0xb440,
+ 0x3000, 0xb540, 0x1a88, 0x2f80, 0xb3e0,
+ 0x3000, 0xb580, 0x1b30, 0x2e20, 0xb380,
+ 0x3000, 0xb5c0, 0x1bd8, 0x2cc0, 0xb320,
+ 0x3020, 0xb5e0, 0x1c60, 0x2b80, 0xb2c0,
+ 0x3020, 0xb5e0, 0x1cf8, 0x2a20, 0xb260,
+ 0x3020, 0xb5e0, 0x1d80, 0x28e0, 0xb200,
+ 0x3020, 0xb5c0, 0x1e08, 0x3f40, 0xb1c0,
+ 0x3020, 0xb580, 0x1e78, 0x3ce0, 0xb160,
+ 0x3040, 0xb520, 0x1ed8, 0x3aa0, 0xb120,
+ 0x3040, 0xb4a0, 0x1f30, 0x3880, 0xb0e0,
+ 0x3040, 0xb400, 0x1f78, 0x3680, 0xb0a0,
+ 0x3020, 0xb340, 0x1fb8, 0x34a0, 0xb060,
+ 0x3020, 0xb240, 0x1fe0, 0x32e0, 0xb040,
+ 0x3020, 0xb140, 0x1ff8, 0x3160, 0xb020,
+ 0xb000, 0x3000, 0x0800, 0x3000, 0xb000
+};
+
+static const u16 uv_static_hcoeffs[N_HORIZ_UV_TAPS * N_PHASES] = {
+ 0x3000, 0x1800, 0x1800, 0xb000, 0x18d0, 0x2e60,
+ 0xb000, 0x1990, 0x2ce0, 0xb020, 0x1a68, 0x2b40,
+ 0xb040, 0x1b20, 0x29e0, 0xb060, 0x1bd8, 0x2880,
+ 0xb080, 0x1c88, 0x3e60, 0xb0a0, 0x1d28, 0x3c00,
+ 0xb0c0, 0x1db8, 0x39e0, 0xb0e0, 0x1e40, 0x37e0,
+ 0xb100, 0x1eb8, 0x3620, 0xb100, 0x1f18, 0x34a0,
+ 0xb100, 0x1f68, 0x3360, 0xb0e0, 0x1fa8, 0x3240,
+ 0xb0c0, 0x1fe0, 0x3140, 0xb060, 0x1ff0, 0x30a0,
+ 0x3000, 0x0800, 0x3000
+};
+
+static void update_polyphase_filter(struct overlay_registers *regs)
+{
+ memcpy(regs->Y_HCOEFS, y_static_hcoeffs, sizeof(y_static_hcoeffs));
+ memcpy(regs->UV_HCOEFS, uv_static_hcoeffs, sizeof(uv_static_hcoeffs));
+}
+
+static bool update_scaling_factors(struct intel_overlay *overlay,
+ struct overlay_registers *regs,
+ struct put_image_params *params)
+{
+ /* fixed point with a 12 bit shift */
+ u32 xscale, yscale, xscale_UV, yscale_UV;
+#define FP_SHIFT 12
+#define FRACT_MASK 0xfff
+ bool scale_changed = false;
+ int uv_hscale = uv_hsubsampling(params->format);
+ int uv_vscale = uv_vsubsampling(params->format);
+
+ if (params->dst_w > 1)
+ xscale = ((params->src_scan_w - 1) << FP_SHIFT)
+ /(params->dst_w);
+ else
+ xscale = 1 << FP_SHIFT;
+
+ if (params->dst_h > 1)
+ yscale = ((params->src_scan_h - 1) << FP_SHIFT)
+ /(params->dst_h);
+ else
+ yscale = 1 << FP_SHIFT;
+
+ /*if (params->format & I915_OVERLAY_YUV_PLANAR) {*/
+ xscale_UV = xscale/uv_hscale;
+ yscale_UV = yscale/uv_vscale;
+ /* make the Y scale to UV scale ratio an exact multiply */
+ xscale = xscale_UV * uv_hscale;
+ yscale = yscale_UV * uv_vscale;
+ /*} else {
+ xscale_UV = 0;
+ yscale_UV = 0;
+ }*/
+
+ if (xscale != overlay->old_xscale || yscale != overlay->old_yscale)
+ scale_changed = true;
+ overlay->old_xscale = xscale;
+ overlay->old_yscale = yscale;
+
+ regs->YRGBSCALE = (((yscale & FRACT_MASK) << 20) |
+ ((xscale >> FP_SHIFT) << 16) |
+ ((xscale & FRACT_MASK) << 3));
+
+ regs->UVSCALE = (((yscale_UV & FRACT_MASK) << 20) |
+ ((xscale_UV >> FP_SHIFT) << 16) |
+ ((xscale_UV & FRACT_MASK) << 3));
+
+ regs->UVSCALEV = ((((yscale >> FP_SHIFT) << 16) |
+ ((yscale_UV >> FP_SHIFT) << 0)));
+
+ if (scale_changed)
+ update_polyphase_filter(regs);
+
+ return scale_changed;
+}
+
+static void update_colorkey(struct intel_overlay *overlay,
+ struct overlay_registers *regs)
+{
+ u32 key = overlay->color_key;
+
+ switch (overlay->crtc->base.fb->bits_per_pixel) {
+ case 8:
+ regs->DCLRKV = 0;
+ regs->DCLRKM = CLK_RGB8I_MASK | DST_KEY_ENABLE;
+ break;
+
+ case 16:
+ if (overlay->crtc->base.fb->depth == 15) {
+ regs->DCLRKV = RGB15_TO_COLORKEY(key);
+ regs->DCLRKM = CLK_RGB15_MASK | DST_KEY_ENABLE;
+ } else {
+ regs->DCLRKV = RGB16_TO_COLORKEY(key);
+ regs->DCLRKM = CLK_RGB16_MASK | DST_KEY_ENABLE;
+ }
+ break;
+
+ case 24:
+ case 32:
+ regs->DCLRKV = key;
+ regs->DCLRKM = CLK_RGB24_MASK | DST_KEY_ENABLE;
+ break;
+ }
+}
+
+static u32 overlay_cmd_reg(struct put_image_params *params)
+{
+ u32 cmd = OCMD_ENABLE | OCMD_BUF_TYPE_FRAME | OCMD_BUFFER0;
+
+ if (params->format & I915_OVERLAY_YUV_PLANAR) {
+ switch (params->format & I915_OVERLAY_DEPTH_MASK) {
+ case I915_OVERLAY_YUV422:
+ cmd |= OCMD_YUV_422_PLANAR;
+ break;
+ case I915_OVERLAY_YUV420:
+ cmd |= OCMD_YUV_420_PLANAR;
+ break;
+ case I915_OVERLAY_YUV411:
+ case I915_OVERLAY_YUV410:
+ cmd |= OCMD_YUV_410_PLANAR;
+ break;
+ }
+ } else { /* YUV packed */
+ switch (params->format & I915_OVERLAY_DEPTH_MASK) {
+ case I915_OVERLAY_YUV422:
+ cmd |= OCMD_YUV_422_PACKED;
+ break;
+ case I915_OVERLAY_YUV411:
+ cmd |= OCMD_YUV_411_PACKED;
+ break;
+ }
+
+ switch (params->format & I915_OVERLAY_SWAP_MASK) {
+ case I915_OVERLAY_NO_SWAP:
+ break;
+ case I915_OVERLAY_UV_SWAP:
+ cmd |= OCMD_UV_SWAP;
+ break;
+ case I915_OVERLAY_Y_SWAP:
+ cmd |= OCMD_Y_SWAP;
+ break;
+ case I915_OVERLAY_Y_AND_UV_SWAP:
+ cmd |= OCMD_Y_AND_UV_SWAP;
+ break;
+ }
+ }
+
+ return cmd;
+}
+
+static u32
+max_u32(u32 a, u32 b)
+{
+
+ return (a > b ? a : b);
+}
+
+static int intel_overlay_do_put_image(struct intel_overlay *overlay,
+ struct drm_i915_gem_object *new_bo,
+ struct put_image_params *params)
+{
+ int ret, tmp_width;
+ struct overlay_registers *regs;
+ bool scale_changed = false;
+
+ KASSERT(overlay != NULL, ("No overlay ?"));
+ DRM_LOCK_ASSERT(overlay->dev);
+ DRM_MODE_CONFIG_ASSERT_LOCKED(overlay->dev);
+
+ ret = intel_overlay_release_old_vid(overlay);
+ if (ret != 0)
+ return ret;
+
+ ret = i915_gem_object_pin_to_display_plane(new_bo, 0, NULL);
+ if (ret != 0)
+ goto out_unpin;
+
+ ret = i915_gem_object_put_fence(new_bo);
+ if (ret)
+ goto out_unpin;
+
+ if (!overlay->active) {
+ regs = intel_overlay_map_regs(overlay);
+ if (!regs) {
+ ret = -ENOMEM;
+ goto out_unpin;
+ }
+ regs->OCONFIG = OCONF_CC_OUT_8BIT;
+ if (IS_GEN4(overlay->dev))
+ regs->OCONFIG |= OCONF_CSC_MODE_BT709;
+ regs->OCONFIG |= overlay->crtc->pipe == 0 ?
+ OCONF_PIPE_A : OCONF_PIPE_B;
+ intel_overlay_unmap_regs(overlay, regs);
+
+ ret = intel_overlay_on(overlay);
+ if (ret != 0)
+ goto out_unpin;
+ }
+
+ regs = intel_overlay_map_regs(overlay);
+ if (!regs) {
+ ret = -ENOMEM;
+ goto out_unpin;
+ }
+
+ regs->DWINPOS = (params->dst_y << 16) | params->dst_x;
+ regs->DWINSZ = (params->dst_h << 16) | params->dst_w;
+
+ if (params->format & I915_OVERLAY_YUV_PACKED)
+ tmp_width = packed_width_bytes(params->format, params->src_w);
+ else
+ tmp_width = params->src_w;
+
+ regs->SWIDTH = params->src_w;
+ regs->SWIDTHSW = calc_swidthsw(overlay->dev,
+ params->offset_Y, tmp_width);
+ regs->SHEIGHT = params->src_h;
+ regs->OBUF_0Y = new_bo->gtt_offset + params->offset_Y;
+ regs->OSTRIDE = params->stride_Y;
+
+ if (params->format & I915_OVERLAY_YUV_PLANAR) {
+ int uv_hscale = uv_hsubsampling(params->format);
+ int uv_vscale = uv_vsubsampling(params->format);
+ u32 tmp_U, tmp_V;
+ regs->SWIDTH |= (params->src_w/uv_hscale) << 16;
+ tmp_U = calc_swidthsw(overlay->dev, params->offset_U,
+ params->src_w/uv_hscale);
+ tmp_V = calc_swidthsw(overlay->dev, params->offset_V,
+ params->src_w/uv_hscale);
+ regs->SWIDTHSW |= max_u32(tmp_U, tmp_V) << 16;
+ regs->SHEIGHT |= (params->src_h/uv_vscale) << 16;
+ regs->OBUF_0U = new_bo->gtt_offset + params->offset_U;
+ regs->OBUF_0V = new_bo->gtt_offset + params->offset_V;
+ regs->OSTRIDE |= params->stride_UV << 16;
+ }
+
+ scale_changed = update_scaling_factors(overlay, regs, params);
+
+ update_colorkey(overlay, regs);
+
+ regs->OCMD = overlay_cmd_reg(params);
+
+ intel_overlay_unmap_regs(overlay, regs);
+
+ ret = intel_overlay_continue(overlay, scale_changed);
+ if (ret)
+ goto out_unpin;
+
+ overlay->old_vid_bo = overlay->vid_bo;
+ overlay->vid_bo = new_bo;
+
+ return 0;
+
+out_unpin:
+ i915_gem_object_unpin(new_bo);
+ return ret;
+}
+
+int intel_overlay_switch_off(struct intel_overlay *overlay)
+{
+ struct overlay_registers *regs;
+ int ret;
+
+ DRM_LOCK_ASSERT(overlay->dev);
+ DRM_MODE_CONFIG_ASSERT_LOCKED(overlay->dev);
+
+ ret = intel_overlay_recover_from_interrupt(overlay);
+ if (ret != 0)
+ return ret;
+
+ if (!overlay->active)
+ return 0;
+
+ ret = intel_overlay_release_old_vid(overlay);
+ if (ret != 0)
+ return ret;
+
+ regs = intel_overlay_map_regs(overlay);
+ regs->OCMD = 0;
+ intel_overlay_unmap_regs(overlay, regs);
+
+ ret = intel_overlay_off(overlay);
+ if (ret != 0)
+ return ret;
+
+ intel_overlay_off_tail(overlay);
+ return 0;
+}
+
+static int check_overlay_possible_on_crtc(struct intel_overlay *overlay,
+ struct intel_crtc *crtc)
+{
+ drm_i915_private_t *dev_priv = overlay->dev->dev_private;
+
+ if (!crtc->active)
+ return -EINVAL;
+
+ /* can't use the overlay with double wide pipe */
+ if (INTEL_INFO(overlay->dev)->gen < 4 &&
+ (I915_READ(PIPECONF(crtc->pipe)) & (PIPECONF_DOUBLE_WIDE | PIPECONF_ENABLE)) != PIPECONF_ENABLE)
+ return -EINVAL;
+
+ return 0;
+}
+
+static void update_pfit_vscale_ratio(struct intel_overlay *overlay)
+{
+ struct drm_device *dev = overlay->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ u32 pfit_control = I915_READ(PFIT_CONTROL);
+ u32 ratio;
+
+ /* XXX: This is not the same logic as in the xorg driver, but more in
+ * line with the intel documentation for the i965
+ */
+ if (INTEL_INFO(dev)->gen >= 4) {
+ /* on i965 use the PGM reg to read out the autoscaler values */
+ ratio = I915_READ(PFIT_PGM_RATIOS) >> PFIT_VERT_SCALE_SHIFT_965;
+ } else {
+ if (pfit_control & VERT_AUTO_SCALE)
+ ratio = I915_READ(PFIT_AUTO_RATIOS);
+ else
+ ratio = I915_READ(PFIT_PGM_RATIOS);
+ ratio >>= PFIT_VERT_SCALE_SHIFT;
+ }
+
+ overlay->pfit_vscale_ratio = ratio;
+}
+
+static int check_overlay_dst(struct intel_overlay *overlay,
+ struct drm_intel_overlay_put_image *rec)
+{
+ struct drm_display_mode *mode = &overlay->crtc->base.mode;
+
+ if (rec->dst_x < mode->hdisplay &&
+ rec->dst_x + rec->dst_width <= mode->hdisplay &&
+ rec->dst_y < mode->vdisplay &&
+ rec->dst_y + rec->dst_height <= mode->vdisplay)
+ return 0;
+ else
+ return -EINVAL;
+}
+
+static int check_overlay_scaling(struct put_image_params *rec)
+{
+ u32 tmp;
+
+ /* downscaling limit is 8.0 */
+ tmp = ((rec->src_scan_h << 16) / rec->dst_h) >> 16;
+ if (tmp > 7)
+ return -EINVAL;
+ tmp = ((rec->src_scan_w << 16) / rec->dst_w) >> 16;
+ if (tmp > 7)
+ return -EINVAL;
+
+ return 0;
+}
+
+static int check_overlay_src(struct drm_device *dev,
+ struct drm_intel_overlay_put_image *rec,
+ struct drm_i915_gem_object *new_bo)
+{
+ int uv_hscale = uv_hsubsampling(rec->flags);
+ int uv_vscale = uv_vsubsampling(rec->flags);
+ u32 stride_mask;
+ int depth;
+ u32 tmp;
+
+ /* check src dimensions */
+ if (IS_845G(dev) || IS_I830(dev)) {
+ if (rec->src_height > IMAGE_MAX_HEIGHT_LEGACY ||
+ rec->src_width > IMAGE_MAX_WIDTH_LEGACY)
+ return -EINVAL;
+ } else {
+ if (rec->src_height > IMAGE_MAX_HEIGHT ||
+ rec->src_width > IMAGE_MAX_WIDTH)
+ return -EINVAL;
+ }
+
+ /* better safe than sorry, use 4 as the maximal subsampling ratio */
+ if (rec->src_height < N_VERT_Y_TAPS*4 ||
+ rec->src_width < N_HORIZ_Y_TAPS*4)
+ return -EINVAL;
+
+ /* check alignment constraints */
+ switch (rec->flags & I915_OVERLAY_TYPE_MASK) {
+ case I915_OVERLAY_RGB:
+ /* not implemented */
+ return -EINVAL;
+
+ case I915_OVERLAY_YUV_PACKED:
+ if (uv_vscale != 1)
+ return -EINVAL;
+
+ depth = packed_depth_bytes(rec->flags);
+ if (depth < 0)
+ return depth;
+
+ /* ignore UV planes */
+ rec->stride_UV = 0;
+ rec->offset_U = 0;
+ rec->offset_V = 0;
+ /* check pixel alignment */
+ if (rec->offset_Y % depth)
+ return -EINVAL;
+ break;
+
+ case I915_OVERLAY_YUV_PLANAR:
+ if (uv_vscale < 0 || uv_hscale < 0)
+ return -EINVAL;
+ /* no offset restrictions for planar formats */
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ if (rec->src_width % uv_hscale)
+ return -EINVAL;
+
+ /* stride checking */
+ if (IS_I830(dev) || IS_845G(dev))
+ stride_mask = 255;
+ else
+ stride_mask = 63;
+
+ if (rec->stride_Y & stride_mask || rec->stride_UV & stride_mask)
+ return -EINVAL;
+ if (IS_GEN4(dev) && rec->stride_Y < 512)
+ return -EINVAL;
+
+ tmp = (rec->flags & I915_OVERLAY_TYPE_MASK) == I915_OVERLAY_YUV_PLANAR ?
+ 4096 : 8192;
+ if (rec->stride_Y > tmp || rec->stride_UV > 2*1024)
+ return -EINVAL;
+
+ /* check buffer dimensions */
+ switch (rec->flags & I915_OVERLAY_TYPE_MASK) {
+ case I915_OVERLAY_RGB:
+ case I915_OVERLAY_YUV_PACKED:
+ /* always 4 Y values per depth pixels */
+ if (packed_width_bytes(rec->flags, rec->src_width) > rec->stride_Y)
+ return -EINVAL;
+
+ tmp = rec->stride_Y*rec->src_height;
+ if (rec->offset_Y + tmp > new_bo->base.size)
+ return -EINVAL;
+ break;
+
+ case I915_OVERLAY_YUV_PLANAR:
+ if (rec->src_width > rec->stride_Y)
+ return -EINVAL;
+ if (rec->src_width/uv_hscale > rec->stride_UV)
+ return -EINVAL;
+
+ tmp = rec->stride_Y * rec->src_height;
+ if (rec->offset_Y + tmp > new_bo->base.size)
+ return -EINVAL;
+
+ tmp = rec->stride_UV * (rec->src_height / uv_vscale);
+ if (rec->offset_U + tmp > new_bo->base.size ||
+ rec->offset_V + tmp > new_bo->base.size)
+ return -EINVAL;
+ break;
+ }
+
+ return 0;
+}
+
+/**
+ * Return the pipe currently connected to the panel fitter,
+ * or -1 if the panel fitter is not present or not in use
+ */
+static int intel_panel_fitter_pipe(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 pfit_control;
+
+ /* i830 doesn't have a panel fitter */
+ if (IS_I830(dev))
+ return -1;
+
+ pfit_control = I915_READ(PFIT_CONTROL);
+
+ /* See if the panel fitter is in use */
+ if ((pfit_control & PFIT_ENABLE) == 0)
+ return -1;
+
+ /* 965 can place panel fitter on either pipe */
+ if (IS_GEN4(dev))
+ return (pfit_control >> 29) & 0x3;
+
+ /* older chips can only use pipe 1 */
+ return 1;
+}
+
+int intel_overlay_put_image(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_intel_overlay_put_image *put_image_rec = data;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_overlay *overlay;
+ struct drm_mode_object *drmmode_obj;
+ struct intel_crtc *crtc;
+ struct drm_i915_gem_object *new_bo;
+ struct put_image_params *params;
+ int ret;
+
+ if (!dev_priv) {
+ DRM_ERROR("called with no initialization\n");
+ return -EINVAL;
+ }
+
+ overlay = dev_priv->overlay;
+ if (!overlay) {
+ DRM_DEBUG("userspace bug: no overlay\n");
+ return -ENODEV;
+ }
+
+ if (!(put_image_rec->flags & I915_OVERLAY_ENABLE)) {
+ sx_xlock(&dev->mode_config.mutex);
+ DRM_LOCK(dev);
+
+ ret = intel_overlay_switch_off(overlay);
+
+ DRM_UNLOCK(dev);
+ sx_xunlock(&dev->mode_config.mutex);
+
+ return ret;
+ }
+
+ params = malloc(sizeof(struct put_image_params), DRM_I915_GEM,
+ M_WAITOK | M_ZERO);
+
+ drmmode_obj = drm_mode_object_find(dev, put_image_rec->crtc_id,
+ DRM_MODE_OBJECT_CRTC);
+ if (!drmmode_obj) {
+ ret = -ENOENT;
+ goto out_free;
+ }
+ crtc = to_intel_crtc(obj_to_crtc(drmmode_obj));
+
+ new_bo = to_intel_bo(drm_gem_object_lookup(dev, file_priv,
+ put_image_rec->bo_handle));
+ if (&new_bo->base == NULL) {
+ ret = -ENOENT;
+ goto out_free;
+ }
+
+ sx_xlock(&dev->mode_config.mutex);
+ DRM_LOCK(dev);
+
+ if (new_bo->tiling_mode) {
+ DRM_ERROR("buffer used for overlay image can not be tiled\n");
+ ret = -EINVAL;
+ goto out_unlock;
+ }
+
+ ret = intel_overlay_recover_from_interrupt(overlay);
+ if (ret != 0)
+ goto out_unlock;
+
+ if (overlay->crtc != crtc) {
+ struct drm_display_mode *mode = &crtc->base.mode;
+ ret = intel_overlay_switch_off(overlay);
+ if (ret != 0)
+ goto out_unlock;
+
+ ret = check_overlay_possible_on_crtc(overlay, crtc);
+ if (ret != 0)
+ goto out_unlock;
+
+ overlay->crtc = crtc;
+ crtc->overlay = overlay;
+
+ /* line too wide, i.e. one-line-mode */
+ if (mode->hdisplay > 1024 &&
+ intel_panel_fitter_pipe(dev) == crtc->pipe) {
+ overlay->pfit_active = 1;
+ update_pfit_vscale_ratio(overlay);
+ } else
+ overlay->pfit_active = 0;
+ }
+
+ ret = check_overlay_dst(overlay, put_image_rec);
+ if (ret != 0)
+ goto out_unlock;
+
+ if (overlay->pfit_active) {
+ params->dst_y = ((((u32)put_image_rec->dst_y) << 12) /
+ overlay->pfit_vscale_ratio);
+ /* shifting right rounds downwards, so add 1 */
+ params->dst_h = ((((u32)put_image_rec->dst_height) << 12) /
+ overlay->pfit_vscale_ratio) + 1;
+ } else {
+ params->dst_y = put_image_rec->dst_y;
+ params->dst_h = put_image_rec->dst_height;
+ }
+ params->dst_x = put_image_rec->dst_x;
+ params->dst_w = put_image_rec->dst_width;
+
+ params->src_w = put_image_rec->src_width;
+ params->src_h = put_image_rec->src_height;
+ params->src_scan_w = put_image_rec->src_scan_width;
+ params->src_scan_h = put_image_rec->src_scan_height;
+ if (params->src_scan_h > params->src_h ||
+ params->src_scan_w > params->src_w) {
+ ret = -EINVAL;
+ goto out_unlock;
+ }
+
+ ret = check_overlay_src(dev, put_image_rec, new_bo);
+ if (ret != 0)
+ goto out_unlock;
+ params->format = put_image_rec->flags & ~I915_OVERLAY_FLAGS_MASK;
+ params->stride_Y = put_image_rec->stride_Y;
+ params->stride_UV = put_image_rec->stride_UV;
+ params->offset_Y = put_image_rec->offset_Y;
+ params->offset_U = put_image_rec->offset_U;
+ params->offset_V = put_image_rec->offset_V;
+
+ /* Check scaling after src size to prevent a divide-by-zero. */
+ ret = check_overlay_scaling(params);
+ if (ret != 0)
+ goto out_unlock;
+
+ ret = intel_overlay_do_put_image(overlay, new_bo, params);
+ if (ret != 0)
+ goto out_unlock;
+
+ DRM_UNLOCK(dev);
+ sx_xunlock(&dev->mode_config.mutex);
+
+ free(params, DRM_I915_GEM);
+
+ return 0;
+
+out_unlock:
+ DRM_UNLOCK(dev);
+ sx_xunlock(&dev->mode_config.mutex);
+ drm_gem_object_unreference_unlocked(&new_bo->base);
+out_free:
+ free(params, DRM_I915_GEM);
+
+ return ret;
+}
+
+static void update_reg_attrs(struct intel_overlay *overlay,
+ struct overlay_registers *regs)
+{
+ regs->OCLRC0 = (overlay->contrast << 18) | (overlay->brightness & 0xff);
+ regs->OCLRC1 = overlay->saturation;
+}
+
+static bool check_gamma_bounds(u32 gamma1, u32 gamma2)
+{
+ int i;
+
+ if (gamma1 & 0xff000000 || gamma2 & 0xff000000)
+ return false;
+
+ for (i = 0; i < 3; i++) {
+ if (((gamma1 >> i*8) & 0xff) >= ((gamma2 >> i*8) & 0xff))
+ return false;
+ }
+
+ return true;
+}
+
+static bool check_gamma5_errata(u32 gamma5)
+{
+ int i;
+
+ for (i = 0; i < 3; i++) {
+ if (((gamma5 >> i*8) & 0xff) == 0x80)
+ return false;
+ }
+
+ return true;
+}
+
+static int check_gamma(struct drm_intel_overlay_attrs *attrs)
+{
+ if (!check_gamma_bounds(0, attrs->gamma0) ||
+ !check_gamma_bounds(attrs->gamma0, attrs->gamma1) ||
+ !check_gamma_bounds(attrs->gamma1, attrs->gamma2) ||
+ !check_gamma_bounds(attrs->gamma2, attrs->gamma3) ||
+ !check_gamma_bounds(attrs->gamma3, attrs->gamma4) ||
+ !check_gamma_bounds(attrs->gamma4, attrs->gamma5) ||
+ !check_gamma_bounds(attrs->gamma5, 0x00ffffff))
+ return -EINVAL;
+
+ if (!check_gamma5_errata(attrs->gamma5))
+ return -EINVAL;
+
+ return 0;
+}
+
+int intel_overlay_attrs(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_intel_overlay_attrs *attrs = data;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_overlay *overlay;
+ struct overlay_registers *regs;
+ int ret;
+
+ if (!dev_priv) {
+ DRM_ERROR("called with no initialization\n");
+ return -EINVAL;
+ }
+
+ overlay = dev_priv->overlay;
+ if (!overlay) {
+ DRM_DEBUG("userspace bug: no overlay\n");
+ return -ENODEV;
+ }
+
+ sx_xlock(&dev->mode_config.mutex);
+ DRM_LOCK(dev);
+
+ ret = -EINVAL;
+ if (!(attrs->flags & I915_OVERLAY_UPDATE_ATTRS)) {
+ attrs->color_key = overlay->color_key;
+ attrs->brightness = overlay->brightness;
+ attrs->contrast = overlay->contrast;
+ attrs->saturation = overlay->saturation;
+
+ if (!IS_GEN2(dev)) {
+ attrs->gamma0 = I915_READ(OGAMC0);
+ attrs->gamma1 = I915_READ(OGAMC1);
+ attrs->gamma2 = I915_READ(OGAMC2);
+ attrs->gamma3 = I915_READ(OGAMC3);
+ attrs->gamma4 = I915_READ(OGAMC4);
+ attrs->gamma5 = I915_READ(OGAMC5);
+ }
+ } else {
+ if (attrs->brightness < -128 || attrs->brightness > 127)
+ goto out_unlock;
+ if (attrs->contrast > 255)
+ goto out_unlock;
+ if (attrs->saturation > 1023)
+ goto out_unlock;
+
+ overlay->color_key = attrs->color_key;
+ overlay->brightness = attrs->brightness;
+ overlay->contrast = attrs->contrast;
+ overlay->saturation = attrs->saturation;
+
+ regs = intel_overlay_map_regs(overlay);
+ if (!regs) {
+ ret = -ENOMEM;
+ goto out_unlock;
+ }
+
+ update_reg_attrs(overlay, regs);
+
+ intel_overlay_unmap_regs(overlay, regs);
+
+ if (attrs->flags & I915_OVERLAY_UPDATE_GAMMA) {
+ if (IS_GEN2(dev))
+ goto out_unlock;
+
+ if (overlay->active) {
+ ret = -EBUSY;
+ goto out_unlock;
+ }
+
+ ret = check_gamma(attrs);
+ if (ret)
+ goto out_unlock;
+
+ I915_WRITE(OGAMC0, attrs->gamma0);
+ I915_WRITE(OGAMC1, attrs->gamma1);
+ I915_WRITE(OGAMC2, attrs->gamma2);
+ I915_WRITE(OGAMC3, attrs->gamma3);
+ I915_WRITE(OGAMC4, attrs->gamma4);
+ I915_WRITE(OGAMC5, attrs->gamma5);
+ }
+ }
+
+ ret = 0;
+out_unlock:
+ DRM_UNLOCK(dev);
+ sx_xunlock(&dev->mode_config.mutex);
+
+ return ret;
+}
+
+void intel_setup_overlay(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_overlay *overlay;
+ struct drm_i915_gem_object *reg_bo;
+ struct overlay_registers *regs;
+ int ret;
+
+ if (!HAS_OVERLAY(dev))
+ return;
+
+ overlay = malloc(sizeof(struct intel_overlay), DRM_I915_GEM,
+ M_WAITOK | M_ZERO);
+ DRM_LOCK(dev);
+ if (dev_priv->overlay != NULL)
+ goto out_free;
+ overlay->dev = dev;
+
+ reg_bo = i915_gem_alloc_object(dev, PAGE_SIZE);
+ if (!reg_bo)
+ goto out_free;
+ overlay->reg_bo = reg_bo;
+
+ if (OVERLAY_NEEDS_PHYSICAL(dev)) {
+ ret = i915_gem_attach_phys_object(dev, reg_bo,
+ I915_GEM_PHYS_OVERLAY_REGS,
+ PAGE_SIZE);
+ if (ret) {
+ DRM_ERROR("failed to attach phys overlay regs\n");
+ goto out_free_bo;
+ }
+ overlay->flip_addr = reg_bo->phys_obj->handle->busaddr;
+ } else {
+ ret = i915_gem_object_pin(reg_bo, PAGE_SIZE, true);
+ if (ret) {
+ DRM_ERROR("failed to pin overlay register bo\n");
+ goto out_free_bo;
+ }
+ overlay->flip_addr = reg_bo->gtt_offset;
+
+ ret = i915_gem_object_set_to_gtt_domain(reg_bo, true);
+ if (ret) {
+ DRM_ERROR("failed to move overlay register bo into the GTT\n");
+ goto out_unpin_bo;
+ }
+ }
+
+ /* init all values */
+ overlay->color_key = 0x0101fe;
+ overlay->brightness = -19;
+ overlay->contrast = 75;
+ overlay->saturation = 146;
+
+ regs = intel_overlay_map_regs(overlay);
+ if (!regs)
+ goto out_unpin_bo;
+
+ memset(regs, 0, sizeof(struct overlay_registers));
+ update_polyphase_filter(regs);
+ update_reg_attrs(overlay, regs);
+
+ intel_overlay_unmap_regs(overlay, regs);
+
+ dev_priv->overlay = overlay;
+ DRM_INFO("initialized overlay support\n");
+ DRM_UNLOCK(dev);
+ return;
+
+out_unpin_bo:
+ if (!OVERLAY_NEEDS_PHYSICAL(dev))
+ i915_gem_object_unpin(reg_bo);
+out_free_bo:
+ drm_gem_object_unreference(&reg_bo->base);
+out_free:
+ DRM_UNLOCK(dev);
+ free(overlay, DRM_I915_GEM);
+ return;
+}
+
+void intel_cleanup_overlay(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (!dev_priv->overlay)
+ return;
+
+ /* The bo's should be free'd by the generic code already.
+ * Furthermore modesetting teardown happens beforehand so the
+ * hardware should be off already */
+ KASSERT(!dev_priv->overlay->active, ("Overlay still active"));
+
+ drm_gem_object_unreference_unlocked(&dev_priv->overlay->reg_bo->base);
+ free(dev_priv->overlay, DRM_I915_GEM);
+}
+
+struct intel_overlay_error_state {
+ struct overlay_registers regs;
+ unsigned long base;
+ u32 dovsta;
+ u32 isr;
+};
+
+struct intel_overlay_error_state *
+intel_overlay_capture_error_state(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_overlay *overlay = dev_priv->overlay;
+ struct intel_overlay_error_state *error;
+ struct overlay_registers __iomem *regs;
+
+ if (!overlay || !overlay->active)
+ return NULL;
+
+ error = malloc(sizeof(*error), DRM_I915_GEM, M_NOWAIT);
+ if (error == NULL)
+ return NULL;
+
+ error->dovsta = I915_READ(DOVSTA);
+ error->isr = I915_READ(ISR);
+ if (OVERLAY_NEEDS_PHYSICAL(overlay->dev))
+ error->base = (long) overlay->reg_bo->phys_obj->handle->vaddr;
+ else
+ error->base = (long) overlay->reg_bo->gtt_offset;
+
+ regs = intel_overlay_map_regs(overlay);
+ if (!regs)
+ goto err;
+
+ memcpy(&error->regs, regs, sizeof(struct overlay_registers));
+ intel_overlay_unmap_regs(overlay, regs);
+
+ return (error);
+
+err:
+ free(error, DRM_I915_GEM);
+ return (NULL);
+}
+
+void
+intel_overlay_print_error_state(struct sbuf *m,
+ struct intel_overlay_error_state *error)
+{
+ sbuf_printf(m, "Overlay, status: 0x%08x, interrupt: 0x%08x\n",
+ error->dovsta, error->isr);
+ sbuf_printf(m, " Register file at 0x%08lx:\n",
+ error->base);
+
+#define P(x) sbuf_printf(m, " " #x ": 0x%08x\n", error->regs.x)
+ P(OBUF_0Y);
+ P(OBUF_1Y);
+ P(OBUF_0U);
+ P(OBUF_0V);
+ P(OBUF_1U);
+ P(OBUF_1V);
+ P(OSTRIDE);
+ P(YRGB_VPH);
+ P(UV_VPH);
+ P(HORZ_PH);
+ P(INIT_PHS);
+ P(DWINPOS);
+ P(DWINSZ);
+ P(SWIDTH);
+ P(SWIDTHSW);
+ P(SHEIGHT);
+ P(YRGBSCALE);
+ P(UVSCALE);
+ P(OCLRC0);
+ P(OCLRC1);
+ P(DCLRKV);
+ P(DCLRKM);
+ P(SCLRKVH);
+ P(SCLRKVL);
+ P(SCLRKEN);
+ P(OCONFIG);
+ P(OCMD);
+ P(OSTART_0Y);
+ P(OSTART_1Y);
+ P(OSTART_0U);
+ P(OSTART_0V);
+ P(OSTART_1U);
+ P(OSTART_1V);
+ P(OTILEOFF_0Y);
+ P(OTILEOFF_1Y);
+ P(OTILEOFF_0U);
+ P(OTILEOFF_0V);
+ P(OTILEOFF_1U);
+ P(OTILEOFF_1V);
+ P(FASTHSCALE);
+ P(UVSCALEV);
+#undef P
+}
diff --git a/sys/dev/drm2/i915/intel_panel.c b/sys/dev/drm2/i915/intel_panel.c
new file mode 100644
index 000000000000..815848b22081
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_panel.c
@@ -0,0 +1,327 @@
+/*
+ * Copyright © 2006-2010 Intel Corporation
+ * Copyright (c) 2006 Dave Airlie <airlied@linux.ie>
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ * Dave Airlie <airlied@linux.ie>
+ * Jesse Barnes <jesse.barnes@intel.com>
+ * Chris Wilson <chris@chris-wilson.co.uk>
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/intel_drv.h>
+
+#define PCI_LBPC 0xf4 /* legacy/combination backlight modes */
+
+void
+intel_fixed_panel_mode(struct drm_display_mode *fixed_mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ adjusted_mode->hdisplay = fixed_mode->hdisplay;
+ adjusted_mode->hsync_start = fixed_mode->hsync_start;
+ adjusted_mode->hsync_end = fixed_mode->hsync_end;
+ adjusted_mode->htotal = fixed_mode->htotal;
+
+ adjusted_mode->vdisplay = fixed_mode->vdisplay;
+ adjusted_mode->vsync_start = fixed_mode->vsync_start;
+ adjusted_mode->vsync_end = fixed_mode->vsync_end;
+ adjusted_mode->vtotal = fixed_mode->vtotal;
+
+ adjusted_mode->clock = fixed_mode->clock;
+}
+
+/* adjusted_mode has been preset to be the panel's fixed mode */
+void
+intel_pch_panel_fitting(struct drm_device *dev,
+ int fitting_mode,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int x, y, width, height;
+
+ x = y = width = height = 0;
+
+ /* Native modes don't need fitting */
+ if (adjusted_mode->hdisplay == mode->hdisplay &&
+ adjusted_mode->vdisplay == mode->vdisplay)
+ goto done;
+
+ switch (fitting_mode) {
+ case DRM_MODE_SCALE_CENTER:
+ width = mode->hdisplay;
+ height = mode->vdisplay;
+ x = (adjusted_mode->hdisplay - width + 1)/2;
+ y = (adjusted_mode->vdisplay - height + 1)/2;
+ break;
+
+ case DRM_MODE_SCALE_ASPECT:
+ /* Scale but preserve the aspect ratio */
+ {
+ u32 scaled_width = adjusted_mode->hdisplay * mode->vdisplay;
+ u32 scaled_height = mode->hdisplay * adjusted_mode->vdisplay;
+ if (scaled_width > scaled_height) { /* pillar */
+ width = scaled_height / mode->vdisplay;
+ if (width & 1)
+ width++;
+ x = (adjusted_mode->hdisplay - width + 1) / 2;
+ y = 0;
+ height = adjusted_mode->vdisplay;
+ } else if (scaled_width < scaled_height) { /* letter */
+ height = scaled_width / mode->hdisplay;
+ if (height & 1)
+ height++;
+ y = (adjusted_mode->vdisplay - height + 1) / 2;
+ x = 0;
+ width = adjusted_mode->hdisplay;
+ } else {
+ x = y = 0;
+ width = adjusted_mode->hdisplay;
+ height = adjusted_mode->vdisplay;
+ }
+ }
+ break;
+
+ default:
+ case DRM_MODE_SCALE_FULLSCREEN:
+ x = y = 0;
+ width = adjusted_mode->hdisplay;
+ height = adjusted_mode->vdisplay;
+ break;
+ }
+
+done:
+ dev_priv->pch_pf_pos = (x << 16) | y;
+ dev_priv->pch_pf_size = (width << 16) | height;
+}
+
+static int is_backlight_combination_mode(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (INTEL_INFO(dev)->gen >= 4)
+ return I915_READ(BLC_PWM_CTL2) & BLM_COMBINATION_MODE;
+
+ if (IS_GEN2(dev))
+ return I915_READ(BLC_PWM_CTL) & BLM_LEGACY_MODE;
+
+ return 0;
+}
+
+static u32 i915_read_blc_pwm_ctl(struct drm_i915_private *dev_priv)
+{
+ u32 val;
+
+ /* Restore the CTL value if it lost, e.g. GPU reset */
+
+ if (HAS_PCH_SPLIT(dev_priv->dev)) {
+ val = I915_READ(BLC_PWM_PCH_CTL2);
+ if (dev_priv->saveBLC_PWM_CTL2 == 0) {
+ dev_priv->saveBLC_PWM_CTL2 = val;
+ } else if (val == 0) {
+ I915_WRITE(BLC_PWM_PCH_CTL2,
+ dev_priv->saveBLC_PWM_CTL2);
+ val = dev_priv->saveBLC_PWM_CTL2;
+ }
+ } else {
+ val = I915_READ(BLC_PWM_CTL);
+ if (dev_priv->saveBLC_PWM_CTL == 0) {
+ dev_priv->saveBLC_PWM_CTL = val;
+ dev_priv->saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2);
+ } else if (val == 0) {
+ I915_WRITE(BLC_PWM_CTL,
+ dev_priv->saveBLC_PWM_CTL);
+ I915_WRITE(BLC_PWM_CTL2,
+ dev_priv->saveBLC_PWM_CTL2);
+ val = dev_priv->saveBLC_PWM_CTL;
+ }
+ }
+
+ return val;
+}
+
+u32 intel_panel_get_max_backlight(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 max;
+
+ max = i915_read_blc_pwm_ctl(dev_priv);
+ if (max == 0) {
+ /* XXX add code here to query mode clock or hardware clock
+ * and program max PWM appropriately.
+ */
+#if 0
+ printf("fixme: max PWM is zero.\n");
+#endif
+ return 1;
+ }
+
+ if (HAS_PCH_SPLIT(dev)) {
+ max >>= 16;
+ } else {
+ if (INTEL_INFO(dev)->gen < 4)
+ max >>= 17;
+ else
+ max >>= 16;
+
+ if (is_backlight_combination_mode(dev))
+ max *= 0xff;
+ }
+
+ DRM_DEBUG("max backlight PWM = %d\n", max);
+ return max;
+}
+
+u32 intel_panel_get_backlight(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 val;
+
+ if (HAS_PCH_SPLIT(dev)) {
+ val = I915_READ(BLC_PWM_CPU_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
+ } else {
+ val = I915_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
+ if (INTEL_INFO(dev)->gen < 4)
+ val >>= 1;
+
+ if (is_backlight_combination_mode(dev)) {
+ u8 lbpc;
+
+ lbpc = pci_read_config(dev->device, PCI_LBPC, 1);
+ val *= lbpc;
+ }
+ }
+
+ DRM_DEBUG("get backlight PWM = %d\n", val);
+ return val;
+}
+
+static void intel_pch_panel_set_backlight(struct drm_device *dev, u32 level)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 val = I915_READ(BLC_PWM_CPU_CTL) & ~BACKLIGHT_DUTY_CYCLE_MASK;
+ I915_WRITE(BLC_PWM_CPU_CTL, val | level);
+}
+
+static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 tmp;
+
+ DRM_DEBUG("set backlight PWM = %d\n", level);
+
+ if (HAS_PCH_SPLIT(dev))
+ return intel_pch_panel_set_backlight(dev, level);
+
+ if (is_backlight_combination_mode(dev)) {
+ u32 max = intel_panel_get_max_backlight(dev);
+ u8 lbpc;
+
+ lbpc = level * 0xfe / max + 1;
+ level /= lbpc;
+ pci_write_config(dev->device, PCI_LBPC, lbpc, 4);
+ }
+
+ tmp = I915_READ(BLC_PWM_CTL);
+ if (INTEL_INFO(dev)->gen < 4)
+ level <<= 1;
+ tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
+ I915_WRITE(BLC_PWM_CTL, tmp | level);
+}
+
+void intel_panel_set_backlight(struct drm_device *dev, u32 level)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ dev_priv->backlight_level = level;
+ if (dev_priv->backlight_enabled)
+ intel_panel_actually_set_backlight(dev, level);
+}
+
+void intel_panel_disable_backlight(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ dev_priv->backlight_enabled = false;
+ intel_panel_actually_set_backlight(dev, 0);
+}
+
+void intel_panel_enable_backlight(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (dev_priv->backlight_level == 0)
+ dev_priv->backlight_level = intel_panel_get_max_backlight(dev);
+
+ dev_priv->backlight_enabled = true;
+ intel_panel_actually_set_backlight(dev, dev_priv->backlight_level);
+}
+
+static void intel_panel_init_backlight(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ dev_priv->backlight_level = intel_panel_get_backlight(dev);
+ dev_priv->backlight_enabled = dev_priv->backlight_level != 0;
+}
+
+enum drm_connector_status
+intel_panel_detect(struct drm_device *dev)
+{
+#if 0
+ struct drm_i915_private *dev_priv = dev->dev_private;
+#endif
+
+ if (i915_panel_ignore_lid)
+ return i915_panel_ignore_lid > 0 ?
+ connector_status_connected :
+ connector_status_disconnected;
+
+ /* opregion lid state on HP 2540p is wrong at boot up,
+ * appears to be either the BIOS or Linux ACPI fault */
+#if 0
+ /* Assume that the BIOS does not lie through the OpRegion... */
+ if (dev_priv->opregion.lid_state)
+ return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
+ connector_status_connected :
+ connector_status_disconnected;
+#endif
+
+ return connector_status_unknown;
+}
+
+int intel_panel_setup_backlight(struct drm_device *dev)
+{
+ intel_panel_init_backlight(dev);
+ return 0;
+}
+
+void intel_panel_destroy_backlight(struct drm_device *dev)
+{
+ return;
+}
diff --git a/sys/dev/drm2/i915/intel_ringbuffer.c b/sys/dev/drm2/i915/intel_ringbuffer.c
new file mode 100644
index 000000000000..c0b752b2b795
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_ringbuffer.c
@@ -0,0 +1,1623 @@
+/*
+ * Copyright © 2008-2010 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ * Zou Nan hai <nanhai.zou@intel.com>
+ * Xiang Hai hao<haihao.xiang@intel.com>
+ *
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/i915/intel_ringbuffer.h>
+#include <sys/sched.h>
+#include <sys/sf_buf.h>
+
+/*
+ * 965+ support PIPE_CONTROL commands, which provide finer grained control
+ * over cache flushing.
+ */
+struct pipe_control {
+ struct drm_i915_gem_object *obj;
+ volatile u32 *cpu_page;
+ u32 gtt_offset;
+};
+
+void
+i915_trace_irq_get(struct intel_ring_buffer *ring, uint32_t seqno)
+{
+
+ if (ring->trace_irq_seqno == 0) {
+ mtx_lock(&ring->irq_lock);
+ if (ring->irq_get(ring))
+ ring->trace_irq_seqno = seqno;
+ mtx_unlock(&ring->irq_lock);
+ }
+}
+
+static inline int ring_space(struct intel_ring_buffer *ring)
+{
+ int space = (ring->head & HEAD_ADDR) - (ring->tail + 8);
+ if (space < 0)
+ space += ring->size;
+ return space;
+}
+
+static int
+render_ring_flush(struct intel_ring_buffer *ring,
+ uint32_t invalidate_domains,
+ uint32_t flush_domains)
+{
+ struct drm_device *dev = ring->dev;
+ uint32_t cmd;
+ int ret;
+
+ /*
+ * read/write caches:
+ *
+ * I915_GEM_DOMAIN_RENDER is always invalidated, but is
+ * only flushed if MI_NO_WRITE_FLUSH is unset. On 965, it is
+ * also flushed at 2d versus 3d pipeline switches.
+ *
+ * read-only caches:
+ *
+ * I915_GEM_DOMAIN_SAMPLER is flushed on pre-965 if
+ * MI_READ_FLUSH is set, and is always flushed on 965.
+ *
+ * I915_GEM_DOMAIN_COMMAND may not exist?
+ *
+ * I915_GEM_DOMAIN_INSTRUCTION, which exists on 965, is
+ * invalidated when MI_EXE_FLUSH is set.
+ *
+ * I915_GEM_DOMAIN_VERTEX, which exists on 965, is
+ * invalidated with every MI_FLUSH.
+ *
+ * TLBs:
+ *
+ * On 965, TLBs associated with I915_GEM_DOMAIN_COMMAND
+ * and I915_GEM_DOMAIN_CPU in are invalidated at PTE write and
+ * I915_GEM_DOMAIN_RENDER and I915_GEM_DOMAIN_SAMPLER
+ * are flushed at any MI_FLUSH.
+ */
+
+ cmd = MI_FLUSH | MI_NO_WRITE_FLUSH;
+ if ((invalidate_domains|flush_domains) &
+ I915_GEM_DOMAIN_RENDER)
+ cmd &= ~MI_NO_WRITE_FLUSH;
+ if (INTEL_INFO(dev)->gen < 4) {
+ /*
+ * On the 965, the sampler cache always gets flushed
+ * and this bit is reserved.
+ */
+ if (invalidate_domains & I915_GEM_DOMAIN_SAMPLER)
+ cmd |= MI_READ_FLUSH;
+ }
+ if (invalidate_domains & I915_GEM_DOMAIN_INSTRUCTION)
+ cmd |= MI_EXE_FLUSH;
+
+ if (invalidate_domains & I915_GEM_DOMAIN_COMMAND &&
+ (IS_G4X(dev) || IS_GEN5(dev)))
+ cmd |= MI_INVALIDATE_ISP;
+
+ ret = intel_ring_begin(ring, 2);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, cmd);
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+/**
+ * Emits a PIPE_CONTROL with a non-zero post-sync operation, for
+ * implementing two workarounds on gen6. From section 1.4.7.1
+ * "PIPE_CONTROL" of the Sandy Bridge PRM volume 2 part 1:
+ *
+ * [DevSNB-C+{W/A}] Before any depth stall flush (including those
+ * produced by non-pipelined state commands), software needs to first
+ * send a PIPE_CONTROL with no bits set except Post-Sync Operation !=
+ * 0.
+ *
+ * [Dev-SNB{W/A}]: Before a PIPE_CONTROL with Write Cache Flush Enable
+ * =1, a PIPE_CONTROL with any non-zero post-sync-op is required.
+ *
+ * And the workaround for these two requires this workaround first:
+ *
+ * [Dev-SNB{W/A}]: Pipe-control with CS-stall bit set must be sent
+ * BEFORE the pipe-control with a post-sync op and no write-cache
+ * flushes.
+ *
+ * And this last workaround is tricky because of the requirements on
+ * that bit. From section 1.4.7.2.3 "Stall" of the Sandy Bridge PRM
+ * volume 2 part 1:
+ *
+ * "1 of the following must also be set:
+ * - Render Target Cache Flush Enable ([12] of DW1)
+ * - Depth Cache Flush Enable ([0] of DW1)
+ * - Stall at Pixel Scoreboard ([1] of DW1)
+ * - Depth Stall ([13] of DW1)
+ * - Post-Sync Operation ([13] of DW1)
+ * - Notify Enable ([8] of DW1)"
+ *
+ * The cache flushes require the workaround flush that triggered this
+ * one, so we can't use it. Depth stall would trigger the same.
+ * Post-sync nonzero is what triggered this second workaround, so we
+ * can't use that one either. Notify enable is IRQs, which aren't
+ * really our business. That leaves only stall at scoreboard.
+ */
+static int
+intel_emit_post_sync_nonzero_flush(struct intel_ring_buffer *ring)
+{
+ struct pipe_control *pc = ring->private;
+ u32 scratch_addr = pc->gtt_offset + 128;
+ int ret;
+
+
+ ret = intel_ring_begin(ring, 6);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5));
+ intel_ring_emit(ring, PIPE_CONTROL_CS_STALL |
+ PIPE_CONTROL_STALL_AT_SCOREBOARD);
+ intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); /* address */
+ intel_ring_emit(ring, 0); /* low dword */
+ intel_ring_emit(ring, 0); /* high dword */
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_advance(ring);
+
+ ret = intel_ring_begin(ring, 6);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5));
+ intel_ring_emit(ring, PIPE_CONTROL_QW_WRITE);
+ intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); /* address */
+ intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+static int
+gen6_render_ring_flush(struct intel_ring_buffer *ring,
+ u32 invalidate_domains, u32 flush_domains)
+{
+ u32 flags = 0;
+ struct pipe_control *pc = ring->private;
+ u32 scratch_addr = pc->gtt_offset + 128;
+ int ret;
+
+ /* Force SNB workarounds for PIPE_CONTROL flushes */
+ intel_emit_post_sync_nonzero_flush(ring);
+
+ /* Just flush everything. Experiments have shown that reducing the
+ * number of bits based on the write domains has little performance
+ * impact.
+ */
+ flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
+ flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
+ flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
+ flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
+
+ ret = intel_ring_begin(ring, 6);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5));
+ intel_ring_emit(ring, flags);
+ intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT);
+ intel_ring_emit(ring, 0); /* lower dword */
+ intel_ring_emit(ring, 0); /* uppwer dword */
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+static void ring_write_tail(struct intel_ring_buffer *ring,
+ uint32_t value)
+{
+ drm_i915_private_t *dev_priv = ring->dev->dev_private;
+ I915_WRITE_TAIL(ring, value);
+}
+
+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 ?
+ RING_ACTHD(ring->mmio_base) : ACTHD;
+
+ return I915_READ(acthd_reg);
+}
+
+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;
+
+ /* Stop the ring if it's running. */
+ I915_WRITE_CTL(ring, 0);
+ I915_WRITE_HEAD(ring, 0);
+ ring->write_tail(ring, 0);
+
+ /* Initialize the ring. */
+ I915_WRITE_START(ring, obj->gtt_offset);
+ head = I915_READ_HEAD(ring) & HEAD_ADDR;
+
+ /* G45 ring initialization fails to reset head to zero */
+ if (head != 0) {
+ DRM_DEBUG("%s head not reset to zero "
+ "ctl %08x head %08x tail %08x start %08x\n",
+ ring->name,
+ I915_READ_CTL(ring),
+ I915_READ_HEAD(ring),
+ I915_READ_TAIL(ring),
+ I915_READ_START(ring));
+
+ I915_WRITE_HEAD(ring, 0);
+
+ if (I915_READ_HEAD(ring) & HEAD_ADDR) {
+ DRM_ERROR("failed to set %s head to zero "
+ "ctl %08x head %08x tail %08x start %08x\n",
+ ring->name,
+ I915_READ_CTL(ring),
+ I915_READ_HEAD(ring),
+ I915_READ_TAIL(ring),
+ I915_READ_START(ring));
+ }
+ }
+
+ I915_WRITE_CTL(ring,
+ ((ring->size - PAGE_SIZE) & RING_NR_PAGES)
+ | RING_VALID);
+
+ /* If the head is still not zero, the ring is dead */
+ if (_intel_wait_for(ring->dev,
+ (I915_READ_CTL(ring) & RING_VALID) != 0 &&
+ I915_READ_START(ring) == obj->gtt_offset &&
+ (I915_READ_HEAD(ring) & HEAD_ADDR) == 0,
+ 50, 1, "915rii")) {
+ DRM_ERROR("%s initialization failed "
+ "ctl %08x head %08x tail %08x start %08x\n",
+ ring->name,
+ I915_READ_CTL(ring),
+ I915_READ_HEAD(ring),
+ I915_READ_TAIL(ring),
+ I915_READ_START(ring));
+ return -EIO;
+ }
+
+ if (!drm_core_check_feature(ring->dev, DRIVER_MODESET))
+ i915_kernel_lost_context(ring->dev);
+ else {
+ ring->head = I915_READ_HEAD(ring);
+ ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
+ ring->space = ring_space(ring);
+ }
+
+ return 0;
+}
+
+static int
+init_pipe_control(struct intel_ring_buffer *ring)
+{
+ struct pipe_control *pc;
+ struct drm_i915_gem_object *obj;
+ int ret;
+
+ if (ring->private)
+ return 0;
+
+ pc = malloc(sizeof(*pc), DRM_I915_GEM, M_WAITOK);
+ if (!pc)
+ return -ENOMEM;
+
+ obj = i915_gem_alloc_object(ring->dev, 4096);
+ if (obj == NULL) {
+ DRM_ERROR("Failed to allocate seqno page\n");
+ ret = -ENOMEM;
+ goto err;
+ }
+
+ i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
+
+ ret = i915_gem_object_pin(obj, 4096, true);
+ if (ret)
+ goto err_unref;
+
+ pc->gtt_offset = obj->gtt_offset;
+ pc->cpu_page = (uint32_t *)kmem_alloc_nofault(kernel_map, PAGE_SIZE);
+ if (pc->cpu_page == NULL)
+ goto err_unpin;
+ pmap_qenter((uintptr_t)pc->cpu_page, &obj->pages[0], 1);
+ pmap_invalidate_range(kernel_pmap, (vm_offset_t)pc->cpu_page,
+ (vm_offset_t)pc->cpu_page + PAGE_SIZE);
+ pmap_invalidate_cache_range((vm_offset_t)pc->cpu_page,
+ (vm_offset_t)pc->cpu_page + PAGE_SIZE);
+
+ pc->obj = obj;
+ ring->private = pc;
+ return 0;
+
+err_unpin:
+ i915_gem_object_unpin(obj);
+err_unref:
+ drm_gem_object_unreference(&obj->base);
+err:
+ free(pc, DRM_I915_GEM);
+ return ret;
+}
+
+static void
+cleanup_pipe_control(struct intel_ring_buffer *ring)
+{
+ struct pipe_control *pc = ring->private;
+ struct drm_i915_gem_object *obj;
+
+ if (!ring->private)
+ return;
+
+ obj = pc->obj;
+ pmap_qremove((vm_offset_t)pc->cpu_page, 1);
+ pmap_invalidate_range(kernel_pmap, (vm_offset_t)pc->cpu_page,
+ (vm_offset_t)pc->cpu_page + PAGE_SIZE);
+ kmem_free(kernel_map, (uintptr_t)pc->cpu_page, PAGE_SIZE);
+ i915_gem_object_unpin(obj);
+ drm_gem_object_unreference(&obj->base);
+
+ free(pc, DRM_I915_GEM);
+ ring->private = NULL;
+}
+
+static int init_render_ring(struct intel_ring_buffer *ring)
+{
+ struct drm_device *dev = ring->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int ret = init_ring_common(ring);
+
+ if (INTEL_INFO(dev)->gen > 3) {
+ int mode = VS_TIMER_DISPATCH << 16 | VS_TIMER_DISPATCH;
+ I915_WRITE(MI_MODE, mode);
+ if (IS_GEN7(dev))
+ I915_WRITE(GFX_MODE_GEN7,
+ GFX_MODE_DISABLE(GFX_TLB_INVALIDATE_ALWAYS) |
+ GFX_MODE_ENABLE(GFX_REPLAY_MODE));
+ }
+
+ if (INTEL_INFO(dev)->gen >= 5) {
+ ret = init_pipe_control(ring);
+ if (ret)
+ 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
+ * policy. [...] This bit must be reset. LRA replacement
+ * policy is not supported."
+ */
+ I915_WRITE(CACHE_MODE_0,
+ CM0_STC_EVICT_DISABLE_LRA_SNB << CM0_MASK_SHIFT);
+ }
+
+ if (INTEL_INFO(dev)->gen >= 6) {
+ I915_WRITE(INSTPM,
+ INSTPM_FORCE_ORDERING << 16 | INSTPM_FORCE_ORDERING);
+ }
+
+ return ret;
+}
+
+static void render_ring_cleanup(struct intel_ring_buffer *ring)
+{
+ if (!ring->private)
+ return;
+
+ cleanup_pipe_control(ring);
+}
+
+static void
+update_mboxes(struct intel_ring_buffer *ring,
+ u32 seqno,
+ u32 mmio_offset)
+{
+ intel_ring_emit(ring, MI_SEMAPHORE_MBOX |
+ MI_SEMAPHORE_GLOBAL_GTT |
+ MI_SEMAPHORE_REGISTER |
+ MI_SEMAPHORE_UPDATE);
+ intel_ring_emit(ring, seqno);
+ intel_ring_emit(ring, mmio_offset);
+}
+
+/**
+ * gen6_add_request - Update the semaphore mailbox registers
+ *
+ * @ring - ring that is adding a request
+ * @seqno - return seqno stuck into the ring
+ *
+ * Update the mailbox registers in the *other* rings with the current seqno.
+ * This acts like a signal in the canonical semaphore.
+ */
+static int
+gen6_add_request(struct intel_ring_buffer *ring,
+ u32 *seqno)
+{
+ u32 mbox1_reg;
+ u32 mbox2_reg;
+ int ret;
+
+ ret = intel_ring_begin(ring, 10);
+ if (ret)
+ return ret;
+
+ mbox1_reg = ring->signal_mbox[0];
+ mbox2_reg = ring->signal_mbox[1];
+
+ *seqno = i915_gem_next_request_seqno(ring);
+
+ update_mboxes(ring, *seqno, mbox1_reg);
+ update_mboxes(ring, *seqno, mbox2_reg);
+ intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
+ intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
+ intel_ring_emit(ring, *seqno);
+ intel_ring_emit(ring, MI_USER_INTERRUPT);
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+/**
+ * intel_ring_sync - sync the waiter to the signaller on seqno
+ *
+ * @waiter - ring that is waiting
+ * @signaller - ring which has, or will signal
+ * @seqno - seqno which the waiter will block on
+ */
+static int
+intel_ring_sync(struct intel_ring_buffer *waiter,
+ struct intel_ring_buffer *signaller,
+ int ring,
+ u32 seqno)
+{
+ int ret;
+ u32 dw1 = MI_SEMAPHORE_MBOX |
+ MI_SEMAPHORE_COMPARE |
+ MI_SEMAPHORE_REGISTER;
+
+ ret = intel_ring_begin(waiter, 4);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(waiter, dw1 | signaller->semaphore_register[ring]);
+ intel_ring_emit(waiter, seqno);
+ intel_ring_emit(waiter, 0);
+ intel_ring_emit(waiter, MI_NOOP);
+ intel_ring_advance(waiter);
+
+ return 0;
+}
+
+int render_ring_sync_to(struct intel_ring_buffer *waiter,
+ struct intel_ring_buffer *signaller, u32 seqno);
+int gen6_bsd_ring_sync_to(struct intel_ring_buffer *waiter,
+ struct intel_ring_buffer *signaller, u32 seqno);
+int gen6_blt_ring_sync_to(struct intel_ring_buffer *waiter,
+ struct intel_ring_buffer *signaller, u32 seqno);
+
+/* VCS->RCS (RVSYNC) or BCS->RCS (RBSYNC) */
+int
+render_ring_sync_to(struct intel_ring_buffer *waiter,
+ struct intel_ring_buffer *signaller,
+ u32 seqno)
+{
+ KASSERT(signaller->semaphore_register[RCS] != MI_SEMAPHORE_SYNC_INVALID,
+ ("valid RCS semaphore"));
+ return intel_ring_sync(waiter,
+ signaller,
+ RCS,
+ seqno);
+}
+
+/* RCS->VCS (VRSYNC) or BCS->VCS (VBSYNC) */
+int
+gen6_bsd_ring_sync_to(struct intel_ring_buffer *waiter,
+ struct intel_ring_buffer *signaller,
+ u32 seqno)
+{
+ KASSERT(signaller->semaphore_register[VCS] != MI_SEMAPHORE_SYNC_INVALID,
+ ("Valid VCS semaphore"));
+ return intel_ring_sync(waiter,
+ signaller,
+ VCS,
+ seqno);
+}
+
+/* RCS->BCS (BRSYNC) or VCS->BCS (BVSYNC) */
+int
+gen6_blt_ring_sync_to(struct intel_ring_buffer *waiter,
+ struct intel_ring_buffer *signaller,
+ u32 seqno)
+{
+ KASSERT(signaller->semaphore_register[BCS] != MI_SEMAPHORE_SYNC_INVALID,
+ ("Valid BCS semaphore"));
+ return intel_ring_sync(waiter,
+ signaller,
+ BCS,
+ seqno);
+}
+
+#define PIPE_CONTROL_FLUSH(ring__, addr__) \
+do { \
+ intel_ring_emit(ring__, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE | \
+ PIPE_CONTROL_DEPTH_STALL); \
+ intel_ring_emit(ring__, (addr__) | PIPE_CONTROL_GLOBAL_GTT); \
+ intel_ring_emit(ring__, 0); \
+ intel_ring_emit(ring__, 0); \
+} while (0)
+
+static int
+pc_render_add_request(struct intel_ring_buffer *ring,
+ uint32_t *result)
+{
+ u32 seqno = i915_gem_next_request_seqno(ring);
+ struct pipe_control *pc = ring->private;
+ u32 scratch_addr = pc->gtt_offset + 128;
+ int ret;
+
+ /* For Ironlake, MI_USER_INTERRUPT was deprecated and apparently
+ * incoherent with writes to memory, i.e. completely fubar,
+ * so we need to use PIPE_NOTIFY instead.
+ *
+ * However, we also need to workaround the qword write
+ * incoherence by flushing the 6 PIPE_NOTIFY buffers out to
+ * memory before requesting an interrupt.
+ */
+ ret = intel_ring_begin(ring, 32);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
+ PIPE_CONTROL_WRITE_FLUSH |
+ PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE);
+ intel_ring_emit(ring, pc->gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
+ intel_ring_emit(ring, seqno);
+ intel_ring_emit(ring, 0);
+ PIPE_CONTROL_FLUSH(ring, scratch_addr);
+ scratch_addr += 128; /* write to separate cachelines */
+ PIPE_CONTROL_FLUSH(ring, scratch_addr);
+ scratch_addr += 128;
+ PIPE_CONTROL_FLUSH(ring, scratch_addr);
+ scratch_addr += 128;
+ PIPE_CONTROL_FLUSH(ring, scratch_addr);
+ scratch_addr += 128;
+ PIPE_CONTROL_FLUSH(ring, scratch_addr);
+ scratch_addr += 128;
+ PIPE_CONTROL_FLUSH(ring, scratch_addr);
+ intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
+ PIPE_CONTROL_WRITE_FLUSH |
+ PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
+ PIPE_CONTROL_NOTIFY);
+ intel_ring_emit(ring, pc->gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
+ intel_ring_emit(ring, seqno);
+ intel_ring_emit(ring, 0);
+ intel_ring_advance(ring);
+
+ *result = seqno;
+ return 0;
+}
+
+static int
+render_ring_add_request(struct intel_ring_buffer *ring,
+ uint32_t *result)
+{
+ u32 seqno = i915_gem_next_request_seqno(ring);
+ int ret;
+
+ ret = intel_ring_begin(ring, 4);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
+ intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
+ intel_ring_emit(ring, seqno);
+ intel_ring_emit(ring, MI_USER_INTERRUPT);
+ intel_ring_advance(ring);
+
+ *result = seqno;
+ return 0;
+}
+
+ static u32
+gen6_ring_get_seqno(struct intel_ring_buffer *ring)
+{
+ struct drm_device *dev = ring->dev;
+
+ /* Workaround to force correct ordering between irq and seqno writes on
+ * ivb (and maybe also on snb) by reading from a CS register (like
+ * ACTHD) before reading the status page. */
+ if (/* IS_GEN6(dev) || */IS_GEN7(dev))
+ intel_ring_get_active_head(ring);
+ return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
+}
+
+static uint32_t
+ring_get_seqno(struct intel_ring_buffer *ring)
+{
+ if (ring->status_page.page_addr == NULL)
+ return (-1);
+ return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
+}
+
+static uint32_t
+pc_render_get_seqno(struct intel_ring_buffer *ring)
+{
+ struct pipe_control *pc = ring->private;
+ if (pc != NULL)
+ return pc->cpu_page[0];
+ else
+ return (-1);
+}
+
+static void
+ironlake_enable_irq(drm_i915_private_t *dev_priv, uint32_t mask)
+{
+ dev_priv->gt_irq_mask &= ~mask;
+ I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
+ POSTING_READ(GTIMR);
+}
+
+static void
+ironlake_disable_irq(drm_i915_private_t *dev_priv, uint32_t mask)
+{
+ dev_priv->gt_irq_mask |= mask;
+ I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
+ POSTING_READ(GTIMR);
+}
+
+static void
+i915_enable_irq(drm_i915_private_t *dev_priv, uint32_t mask)
+{
+ dev_priv->irq_mask &= ~mask;
+ I915_WRITE(IMR, dev_priv->irq_mask);
+ POSTING_READ(IMR);
+}
+
+static void
+i915_disable_irq(drm_i915_private_t *dev_priv, uint32_t mask)
+{
+ dev_priv->irq_mask |= mask;
+ I915_WRITE(IMR, dev_priv->irq_mask);
+ POSTING_READ(IMR);
+}
+
+static bool
+render_ring_get_irq(struct intel_ring_buffer *ring)
+{
+ struct drm_device *dev = ring->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (!dev->irq_enabled)
+ return false;
+
+ mtx_assert(&ring->irq_lock, MA_OWNED);
+ if (ring->irq_refcount++ == 0) {
+ if (HAS_PCH_SPLIT(dev))
+ ironlake_enable_irq(dev_priv,
+ GT_PIPE_NOTIFY | GT_USER_INTERRUPT);
+ else
+ i915_enable_irq(dev_priv, I915_USER_INTERRUPT);
+ }
+
+ return true;
+}
+
+static void
+render_ring_put_irq(struct intel_ring_buffer *ring)
+{
+ struct drm_device *dev = ring->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ mtx_assert(&ring->irq_lock, MA_OWNED);
+ if (--ring->irq_refcount == 0) {
+ if (HAS_PCH_SPLIT(dev))
+ ironlake_disable_irq(dev_priv,
+ GT_USER_INTERRUPT |
+ GT_PIPE_NOTIFY);
+ else
+ i915_disable_irq(dev_priv, I915_USER_INTERRUPT);
+ }
+}
+
+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;
+
+ /* The ring status page addresses are no longer next to the rest of
+ * the ring registers as of gen7.
+ */
+ if (IS_GEN7(dev)) {
+ switch (ring->id) {
+ case RCS:
+ mmio = RENDER_HWS_PGA_GEN7;
+ break;
+ case BCS:
+ mmio = BLT_HWS_PGA_GEN7;
+ break;
+ case VCS:
+ mmio = BSD_HWS_PGA_GEN7;
+ break;
+ }
+ } else if (IS_GEN6(dev)) {
+ mmio = RING_HWS_PGA_GEN6(ring->mmio_base);
+ } else {
+ mmio = RING_HWS_PGA(ring->mmio_base);
+ }
+
+ I915_WRITE(mmio, (u32)ring->status_page.gfx_addr);
+ POSTING_READ(mmio);
+}
+
+static int
+bsd_ring_flush(struct intel_ring_buffer *ring,
+ uint32_t invalidate_domains,
+ uint32_t flush_domains)
+{
+ int ret;
+
+ ret = intel_ring_begin(ring, 2);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, MI_FLUSH);
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_advance(ring);
+ return 0;
+}
+
+static int
+ring_add_request(struct intel_ring_buffer *ring,
+ uint32_t *result)
+{
+ uint32_t seqno;
+ int ret;
+
+ ret = intel_ring_begin(ring, 4);
+ if (ret)
+ return ret;
+
+ seqno = i915_gem_next_request_seqno(ring);
+
+ intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
+ intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
+ intel_ring_emit(ring, seqno);
+ intel_ring_emit(ring, MI_USER_INTERRUPT);
+ intel_ring_advance(ring);
+
+ *result = seqno;
+ return 0;
+}
+
+static bool
+gen6_ring_get_irq(struct intel_ring_buffer *ring, uint32_t gflag, uint32_t rflag)
+{
+ struct drm_device *dev = ring->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (!dev->irq_enabled)
+ return false;
+
+ gen6_gt_force_wake_get(dev_priv);
+
+ mtx_assert(&ring->irq_lock, MA_OWNED);
+ if (ring->irq_refcount++ == 0) {
+ ring->irq_mask &= ~rflag;
+ I915_WRITE_IMR(ring, ring->irq_mask);
+ ironlake_enable_irq(dev_priv, gflag);
+ }
+
+ return true;
+}
+
+static void
+gen6_ring_put_irq(struct intel_ring_buffer *ring, uint32_t gflag, uint32_t rflag)
+{
+ struct drm_device *dev = ring->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ mtx_assert(&ring->irq_lock, MA_OWNED);
+ if (--ring->irq_refcount == 0) {
+ ring->irq_mask |= rflag;
+ I915_WRITE_IMR(ring, ring->irq_mask);
+ ironlake_disable_irq(dev_priv, gflag);
+ }
+
+ gen6_gt_force_wake_put(dev_priv);
+}
+
+static bool
+bsd_ring_get_irq(struct intel_ring_buffer *ring)
+{
+ struct drm_device *dev = ring->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (!dev->irq_enabled)
+ return false;
+
+ mtx_assert(&ring->irq_lock, MA_OWNED);
+ if (ring->irq_refcount++ == 0) {
+ if (IS_G4X(dev))
+ i915_enable_irq(dev_priv, I915_BSD_USER_INTERRUPT);
+ else
+ ironlake_enable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+ }
+
+ return true;
+}
+static void
+bsd_ring_put_irq(struct intel_ring_buffer *ring)
+{
+ struct drm_device *dev = ring->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ mtx_assert(&ring->irq_lock, MA_OWNED);
+ if (--ring->irq_refcount == 0) {
+ if (IS_G4X(dev))
+ i915_disable_irq(dev_priv, I915_BSD_USER_INTERRUPT);
+ else
+ ironlake_disable_irq(dev_priv, GT_BSD_USER_INTERRUPT);
+ }
+}
+
+static int
+ring_dispatch_execbuffer(struct intel_ring_buffer *ring, uint32_t offset,
+ uint32_t length)
+{
+ int ret;
+
+ ret = intel_ring_begin(ring, 2);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring,
+ MI_BATCH_BUFFER_START | (2 << 6) |
+ MI_BATCH_NON_SECURE_I965);
+ intel_ring_emit(ring, offset);
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+static int
+render_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
+ uint32_t offset, uint32_t len)
+{
+ struct drm_device *dev = ring->dev;
+ int ret;
+
+ if (IS_I830(dev) || IS_845G(dev)) {
+ ret = intel_ring_begin(ring, 4);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, MI_BATCH_BUFFER);
+ intel_ring_emit(ring, offset | MI_BATCH_NON_SECURE);
+ intel_ring_emit(ring, offset + len - 8);
+ intel_ring_emit(ring, 0);
+ } else {
+ ret = intel_ring_begin(ring, 2);
+ if (ret)
+ return ret;
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ intel_ring_emit(ring,
+ MI_BATCH_BUFFER_START | (2 << 6) |
+ MI_BATCH_NON_SECURE_I965);
+ intel_ring_emit(ring, offset);
+ } else {
+ intel_ring_emit(ring,
+ MI_BATCH_BUFFER_START | (2 << 6));
+ intel_ring_emit(ring, offset | MI_BATCH_NON_SECURE);
+ }
+ }
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+static void cleanup_status_page(struct intel_ring_buffer *ring)
+{
+ drm_i915_private_t *dev_priv = ring->dev->dev_private;
+ struct drm_i915_gem_object *obj;
+
+ obj = ring->status_page.obj;
+ if (obj == NULL)
+ return;
+
+ pmap_qremove((vm_offset_t)ring->status_page.page_addr, 1);
+ pmap_invalidate_range(kernel_pmap,
+ (vm_offset_t)ring->status_page.page_addr,
+ (vm_offset_t)ring->status_page.page_addr + PAGE_SIZE);
+ kmem_free(kernel_map, (vm_offset_t)ring->status_page.page_addr,
+ PAGE_SIZE);
+ i915_gem_object_unpin(obj);
+ drm_gem_object_unreference(&obj->base);
+ ring->status_page.obj = NULL;
+
+ memset(&dev_priv->hws_map, 0, sizeof(dev_priv->hws_map));
+}
+
+static int init_status_page(struct intel_ring_buffer *ring)
+{
+ struct drm_device *dev = ring->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj;
+ int ret;
+
+ obj = i915_gem_alloc_object(dev, 4096);
+ if (obj == NULL) {
+ DRM_ERROR("Failed to allocate status page\n");
+ ret = -ENOMEM;
+ goto err;
+ }
+
+ i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
+
+ ret = i915_gem_object_pin(obj, 4096, true);
+ if (ret != 0) {
+ goto err_unref;
+ }
+
+ ring->status_page.gfx_addr = obj->gtt_offset;
+ ring->status_page.page_addr = (void *)kmem_alloc_nofault(kernel_map,
+ PAGE_SIZE);
+ if (ring->status_page.page_addr == NULL) {
+ memset(&dev_priv->hws_map, 0, sizeof(dev_priv->hws_map));
+ goto err_unpin;
+ }
+ pmap_qenter((vm_offset_t)ring->status_page.page_addr, &obj->pages[0],
+ 1);
+ pmap_invalidate_range(kernel_pmap,
+ (vm_offset_t)ring->status_page.page_addr,
+ (vm_offset_t)ring->status_page.page_addr + PAGE_SIZE);
+ pmap_invalidate_cache_range((vm_offset_t)ring->status_page.page_addr,
+ (vm_offset_t)ring->status_page.page_addr + PAGE_SIZE);
+ ring->status_page.obj = obj;
+ 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",
+ ring->name, ring->status_page.gfx_addr);
+
+ return 0;
+
+err_unpin:
+ i915_gem_object_unpin(obj);
+err_unref:
+ drm_gem_object_unreference(&obj->base);
+err:
+ return ret;
+}
+
+static
+int intel_init_ring_buffer(struct drm_device *dev,
+ struct intel_ring_buffer *ring)
+{
+ struct drm_i915_gem_object *obj;
+ int ret;
+
+ ring->dev = dev;
+ INIT_LIST_HEAD(&ring->active_list);
+ INIT_LIST_HEAD(&ring->request_list);
+ INIT_LIST_HEAD(&ring->gpu_write_list);
+
+ mtx_init(&ring->irq_lock, "ringb", NULL, MTX_DEF);
+ ring->irq_mask = ~0;
+
+ if (I915_NEED_GFX_HWS(dev)) {
+ ret = init_status_page(ring);
+ if (ret)
+ return ret;
+ }
+
+ obj = i915_gem_alloc_object(dev, ring->size);
+ if (obj == NULL) {
+ DRM_ERROR("Failed to allocate ringbuffer\n");
+ ret = -ENOMEM;
+ goto err_hws;
+ }
+
+ ring->obj = obj;
+
+ ret = i915_gem_object_pin(obj, PAGE_SIZE, true);
+ if (ret)
+ goto err_unref;
+
+ ring->map.size = ring->size;
+ ring->map.offset = dev->agp->base + obj->gtt_offset;
+ ring->map.type = 0;
+ ring->map.flags = 0;
+ ring->map.mtrr = 0;
+
+ drm_core_ioremap_wc(&ring->map, dev);
+ if (ring->map.virtual == NULL) {
+ DRM_ERROR("Failed to map ringbuffer.\n");
+ ret = -EINVAL;
+ goto err_unpin;
+ }
+
+ ring->virtual_start = ring->map.virtual;
+ ret = ring->init(ring);
+ if (ret)
+ goto err_unmap;
+
+ /* Workaround an erratum on the i830 which causes a hang if
+ * the TAIL pointer points to within the last 2 cachelines
+ * of the buffer.
+ */
+ ring->effective_size = ring->size;
+ if (IS_I830(ring->dev) || IS_845G(ring->dev))
+ ring->effective_size -= 128;
+
+ return 0;
+
+err_unmap:
+ drm_core_ioremapfree(&ring->map, dev);
+err_unpin:
+ i915_gem_object_unpin(obj);
+err_unref:
+ drm_gem_object_unreference(&obj->base);
+ ring->obj = NULL;
+err_hws:
+ cleanup_status_page(ring);
+ return ret;
+}
+
+void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring)
+{
+ struct drm_i915_private *dev_priv;
+ int ret;
+
+ if (ring->obj == NULL)
+ return;
+
+ /* Disable the ring buffer. The ring must be idle at this point */
+ dev_priv = ring->dev->dev_private;
+ ret = intel_wait_ring_idle(ring);
+ I915_WRITE_CTL(ring, 0);
+
+ drm_core_ioremapfree(&ring->map, ring->dev);
+
+ i915_gem_object_unpin(ring->obj);
+ drm_gem_object_unreference(&ring->obj->base);
+ ring->obj = NULL;
+
+ if (ring->cleanup)
+ ring->cleanup(ring);
+
+ cleanup_status_page(ring);
+}
+
+static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring)
+{
+ unsigned int *virt;
+ int rem = ring->size - ring->tail;
+
+ if (ring->space < rem) {
+ int ret = intel_wait_ring_buffer(ring, rem);
+ if (ret)
+ return ret;
+ }
+
+ virt = (unsigned int *)((char *)ring->virtual_start + ring->tail);
+ rem /= 8;
+ while (rem--) {
+ *virt++ = MI_NOOP;
+ *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;
+ bool was_interruptible;
+ int ret;
+
+ /* XXX As we have not yet audited all the paths to check that
+ * they are ready for ERESTARTSYS from intel_ring_begin, do not
+ * allow us to be interruptible by a signal.
+ */
+ was_interruptible = dev_priv->mm.interruptible;
+ dev_priv->mm.interruptible = false;
+
+ ret = i915_wait_request(ring, seqno, true);
+
+ dev_priv->mm.interruptible = was_interruptible;
+
+ return ret;
+}
+
+static int intel_ring_wait_request(struct intel_ring_buffer *ring, int n)
+{
+ struct drm_i915_gem_request *request;
+ u32 seqno = 0;
+ int ret;
+
+ i915_gem_retire_requests_ring(ring);
+
+ if (ring->last_retired_head != -1) {
+ ring->head = ring->last_retired_head;
+ ring->last_retired_head = -1;
+ ring->space = ring_space(ring);
+ if (ring->space >= n)
+ return 0;
+ }
+
+ list_for_each_entry(request, &ring->request_list, list) {
+ int space;
+
+ if (request->tail == -1)
+ continue;
+
+ space = request->tail - (ring->tail + 8);
+ if (space < 0)
+ space += ring->size;
+ if (space >= n) {
+ seqno = request->seqno;
+ break;
+ }
+
+ /* Consume this request in case we need more space than
+ * is available and so need to prevent a race between
+ * updating last_retired_head and direct reads of
+ * I915_RING_HEAD. It also provides a nice sanity check.
+ */
+ request->tail = -1;
+ }
+
+ if (seqno == 0)
+ return -ENOSPC;
+
+ ret = intel_ring_wait_seqno(ring, seqno);
+ if (ret)
+ return ret;
+
+ if (ring->last_retired_head == -1)
+ return -ENOSPC;
+
+ ring->head = ring->last_retired_head;
+ ring->last_retired_head = -1;
+ ring->space = ring_space(ring);
+ if (ring->space < n)
+ return -ENOSPC;
+
+ return 0;
+}
+
+int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n)
+{
+ struct drm_device *dev = ring->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int end;
+ int ret;
+
+ ret = intel_ring_wait_request(ring, n);
+ if (ret != -ENOSPC)
+ return ret;
+
+ CTR1(KTR_DRM, "ring_wait_begin %s", ring->name);
+ if (drm_core_check_feature(dev, DRIVER_GEM))
+ /* With GEM the hangcheck timer should kick us out of the loop,
+ * leaving it early runs the risk of corrupting GEM state (due
+ * to running on almost untested codepaths). But on resume
+ * timers don't work yet, so prevent a complete hang in that
+ * case by choosing an insanely large timeout. */
+ end = ticks + hz * 60;
+ else
+ end = ticks + hz * 3;
+ do {
+ ring->head = I915_READ_HEAD(ring);
+ ring->space = ring_space(ring);
+ if (ring->space >= n) {
+ CTR1(KTR_DRM, "ring_wait_end %s", ring->name);
+ return 0;
+ }
+
+#if 0
+ if (dev->primary->master) {
+ struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
+ if (master_priv->sarea_priv)
+ master_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
+ }
+#else
+ if (dev_priv->sarea_priv)
+ dev_priv->sarea_priv->perf_boxes |= I915_BOX_WAIT;
+#endif
+
+ pause("915rng", 1);
+ if (atomic_load_acq_32(&dev_priv->mm.wedged) != 0) {
+ CTR1(KTR_DRM, "ring_wait_end %s wedged", ring->name);
+ return -EAGAIN;
+ }
+ } while (!time_after(ticks, end));
+ CTR1(KTR_DRM, "ring_wait_end %s busy", ring->name);
+ return -EBUSY;
+}
+
+int intel_ring_begin(struct intel_ring_buffer *ring,
+ int num_dwords)
+{
+ struct drm_i915_private *dev_priv = ring->dev->dev_private;
+ int n = 4*num_dwords;
+ int ret;
+
+ if (atomic_load_acq_int(&dev_priv->mm.wedged))
+ return -EIO;
+
+ if (ring->tail + n > ring->effective_size) {
+ ret = intel_wrap_ring_buffer(ring);
+ if (ret != 0)
+ return ret;
+ }
+
+ if (ring->space < n) {
+ ret = intel_wait_ring_buffer(ring, n);
+ if (ret != 0)
+ return ret;
+ }
+
+ ring->space -= n;
+ return 0;
+}
+
+void intel_ring_advance(struct intel_ring_buffer *ring)
+{
+ ring->tail &= ring->size - 1;
+ ring->write_tail(ring, ring->tail);
+}
+
+static const struct intel_ring_buffer render_ring = {
+ .name = "render ring",
+ .id = RCS,
+ .mmio_base = RENDER_RING_BASE,
+ .size = 32 * PAGE_SIZE,
+ .init = init_render_ring,
+ .write_tail = ring_write_tail,
+ .flush = render_ring_flush,
+ .add_request = render_ring_add_request,
+ .get_seqno = ring_get_seqno,
+ .irq_get = render_ring_get_irq,
+ .irq_put = render_ring_put_irq,
+ .dispatch_execbuffer = render_ring_dispatch_execbuffer,
+ .cleanup = render_ring_cleanup,
+ .sync_to = render_ring_sync_to,
+ .semaphore_register = {MI_SEMAPHORE_SYNC_INVALID,
+ MI_SEMAPHORE_SYNC_RV,
+ MI_SEMAPHORE_SYNC_RB},
+ .signal_mbox = {GEN6_VRSYNC, GEN6_BRSYNC},
+};
+
+/* ring buffer for bit-stream decoder */
+
+static const struct intel_ring_buffer bsd_ring = {
+ .name = "bsd ring",
+ .id = VCS,
+ .mmio_base = BSD_RING_BASE,
+ .size = 32 * PAGE_SIZE,
+ .init = init_ring_common,
+ .write_tail = ring_write_tail,
+ .flush = bsd_ring_flush,
+ .add_request = ring_add_request,
+ .get_seqno = ring_get_seqno,
+ .irq_get = bsd_ring_get_irq,
+ .irq_put = bsd_ring_put_irq,
+ .dispatch_execbuffer = ring_dispatch_execbuffer,
+};
+
+
+static void gen6_bsd_ring_write_tail(struct intel_ring_buffer *ring,
+ uint32_t value)
+{
+ drm_i915_private_t *dev_priv = ring->dev->dev_private;
+
+ /* Every tail move must follow the sequence below */
+ I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
+ GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_MODIFY_MASK |
+ GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_DISABLE);
+ I915_WRITE(GEN6_BSD_RNCID, 0x0);
+
+ if (_intel_wait_for(ring->dev,
+ (I915_READ(GEN6_BSD_SLEEP_PSMI_CONTROL) &
+ GEN6_BSD_SLEEP_PSMI_CONTROL_IDLE_INDICATOR) == 0, 50,
+ true, "915g6i") != 0)
+ DRM_ERROR("timed out waiting for IDLE Indicator\n");
+
+ I915_WRITE_TAIL(ring, value);
+ I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
+ GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_MODIFY_MASK |
+ GEN6_BSD_SLEEP_PSMI_CONTROL_RC_ILDL_MESSAGE_ENABLE);
+}
+
+static int gen6_ring_flush(struct intel_ring_buffer *ring,
+ uint32_t invalidate, uint32_t flush)
+{
+ uint32_t cmd;
+ int ret;
+
+ ret = intel_ring_begin(ring, 4);
+ if (ret)
+ return ret;
+
+ cmd = MI_FLUSH_DW;
+ if (invalidate & I915_GEM_GPU_DOMAINS)
+ cmd |= MI_INVALIDATE_TLB | MI_INVALIDATE_BSD;
+ intel_ring_emit(ring, cmd);
+ intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_advance(ring);
+ return 0;
+}
+
+static int
+gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
+ uint32_t offset, uint32_t len)
+{
+ int ret;
+
+ ret = intel_ring_begin(ring, 2);
+ if (ret)
+ return ret;
+
+ intel_ring_emit(ring, MI_BATCH_BUFFER_START | MI_BATCH_NON_SECURE_I965);
+ /* bit0-7 is the length on GEN6+ */
+ intel_ring_emit(ring, offset);
+ intel_ring_advance(ring);
+
+ return 0;
+}
+
+static bool
+gen6_render_ring_get_irq(struct intel_ring_buffer *ring)
+{
+ return gen6_ring_get_irq(ring,
+ GT_USER_INTERRUPT,
+ GEN6_RENDER_USER_INTERRUPT);
+}
+
+static void
+gen6_render_ring_put_irq(struct intel_ring_buffer *ring)
+{
+ return gen6_ring_put_irq(ring,
+ GT_USER_INTERRUPT,
+ GEN6_RENDER_USER_INTERRUPT);
+}
+
+static bool
+gen6_bsd_ring_get_irq(struct intel_ring_buffer *ring)
+{
+ return gen6_ring_get_irq(ring,
+ GT_GEN6_BSD_USER_INTERRUPT,
+ GEN6_BSD_USER_INTERRUPT);
+}
+
+static void
+gen6_bsd_ring_put_irq(struct intel_ring_buffer *ring)
+{
+ return gen6_ring_put_irq(ring,
+ GT_GEN6_BSD_USER_INTERRUPT,
+ GEN6_BSD_USER_INTERRUPT);
+}
+
+/* ring buffer for Video Codec for Gen6+ */
+static const struct intel_ring_buffer gen6_bsd_ring = {
+ .name = "gen6 bsd ring",
+ .id = VCS,
+ .mmio_base = GEN6_BSD_RING_BASE,
+ .size = 32 * PAGE_SIZE,
+ .init = init_ring_common,
+ .write_tail = gen6_bsd_ring_write_tail,
+ .flush = gen6_ring_flush,
+ .add_request = gen6_add_request,
+ .get_seqno = gen6_ring_get_seqno,
+ .irq_get = gen6_bsd_ring_get_irq,
+ .irq_put = gen6_bsd_ring_put_irq,
+ .dispatch_execbuffer = gen6_ring_dispatch_execbuffer,
+ .sync_to = gen6_bsd_ring_sync_to,
+ .semaphore_register = {MI_SEMAPHORE_SYNC_VR,
+ MI_SEMAPHORE_SYNC_INVALID,
+ MI_SEMAPHORE_SYNC_VB},
+ .signal_mbox = {GEN6_RVSYNC, GEN6_BVSYNC},
+};
+
+/* Blitter support (SandyBridge+) */
+
+static bool
+blt_ring_get_irq(struct intel_ring_buffer *ring)
+{
+ return gen6_ring_get_irq(ring,
+ GT_BLT_USER_INTERRUPT,
+ GEN6_BLITTER_USER_INTERRUPT);
+}
+
+static void
+blt_ring_put_irq(struct intel_ring_buffer *ring)
+{
+ gen6_ring_put_irq(ring,
+ GT_BLT_USER_INTERRUPT,
+ GEN6_BLITTER_USER_INTERRUPT);
+}
+
+static int blt_ring_flush(struct intel_ring_buffer *ring,
+ uint32_t invalidate, uint32_t flush)
+{
+ uint32_t cmd;
+ int ret;
+
+ ret = intel_ring_begin(ring, 4);
+ if (ret)
+ return ret;
+
+ cmd = MI_FLUSH_DW;
+ if (invalidate & I915_GEM_DOMAIN_RENDER)
+ cmd |= MI_INVALIDATE_TLB;
+ intel_ring_emit(ring, cmd);
+ intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, 0);
+ intel_ring_emit(ring, MI_NOOP);
+ intel_ring_advance(ring);
+ return 0;
+}
+
+static const struct intel_ring_buffer gen6_blt_ring = {
+ .name = "blt ring",
+ .id = BCS,
+ .mmio_base = BLT_RING_BASE,
+ .size = 32 * PAGE_SIZE,
+ .init = init_ring_common,
+ .write_tail = ring_write_tail,
+ .flush = blt_ring_flush,
+ .add_request = gen6_add_request,
+ .get_seqno = gen6_ring_get_seqno,
+ .irq_get = blt_ring_get_irq,
+ .irq_put = blt_ring_put_irq,
+ .dispatch_execbuffer = gen6_ring_dispatch_execbuffer,
+ .sync_to = gen6_blt_ring_sync_to,
+ .semaphore_register = {MI_SEMAPHORE_SYNC_BR,
+ MI_SEMAPHORE_SYNC_BV,
+ MI_SEMAPHORE_SYNC_INVALID},
+ .signal_mbox = {GEN6_RBSYNC, GEN6_VBSYNC},
+};
+
+int intel_init_render_ring_buffer(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+
+ *ring = render_ring;
+ if (INTEL_INFO(dev)->gen >= 6) {
+ ring->add_request = gen6_add_request;
+ ring->flush = gen6_render_ring_flush;
+ ring->irq_get = gen6_render_ring_get_irq;
+ ring->irq_put = gen6_render_ring_put_irq;
+ ring->get_seqno = gen6_ring_get_seqno;
+ } else if (IS_GEN5(dev)) {
+ ring->add_request = pc_render_add_request;
+ ring->get_seqno = pc_render_get_seqno;
+ }
+
+ if (!I915_NEED_GFX_HWS(dev)) {
+ ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
+ memset(ring->status_page.page_addr, 0, PAGE_SIZE);
+ }
+
+ return intel_init_ring_buffer(dev, ring);
+}
+
+int intel_render_ring_init_dri(struct drm_device *dev, uint64_t start,
+ uint32_t size)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring = &dev_priv->rings[RCS];
+
+ *ring = render_ring;
+ if (INTEL_INFO(dev)->gen >= 6) {
+ ring->add_request = gen6_add_request;
+ ring->irq_get = gen6_render_ring_get_irq;
+ ring->irq_put = gen6_render_ring_put_irq;
+ } else if (IS_GEN5(dev)) {
+ ring->add_request = pc_render_add_request;
+ ring->get_seqno = pc_render_get_seqno;
+ }
+
+ ring->dev = dev;
+ INIT_LIST_HEAD(&ring->active_list);
+ INIT_LIST_HEAD(&ring->request_list);
+ INIT_LIST_HEAD(&ring->gpu_write_list);
+
+ ring->size = size;
+ ring->effective_size = ring->size;
+ if (IS_I830(ring->dev))
+ ring->effective_size -= 128;
+
+ ring->map.offset = start;
+ ring->map.size = size;
+ ring->map.type = 0;
+ ring->map.flags = 0;
+ ring->map.mtrr = 0;
+
+ drm_core_ioremap_wc(&ring->map, dev);
+ if (ring->map.virtual == NULL) {
+ DRM_ERROR("can not ioremap virtual address for"
+ " ring buffer\n");
+ return -ENOMEM;
+ }
+
+ ring->virtual_start = (void *)ring->map.virtual;
+ return 0;
+}
+
+int intel_init_bsd_ring_buffer(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring = &dev_priv->rings[VCS];
+
+ if (IS_GEN6(dev) || IS_GEN7(dev))
+ *ring = gen6_bsd_ring;
+ else
+ *ring = bsd_ring;
+
+ return intel_init_ring_buffer(dev, ring);
+}
+
+int intel_init_blt_ring_buffer(struct drm_device *dev)
+{
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring = &dev_priv->rings[BCS];
+
+ *ring = gen6_blt_ring;
+
+ return intel_init_ring_buffer(dev, ring);
+}
diff --git a/sys/dev/drm2/i915/intel_ringbuffer.h b/sys/dev/drm2/i915/intel_ringbuffer.h
new file mode 100644
index 000000000000..c20777fc9869
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_ringbuffer.h
@@ -0,0 +1,203 @@
+/*
+ * $FreeBSD$
+ */
+
+#ifndef _INTEL_RINGBUFFER_H_
+#define _INTEL_RINGBUFFER_H_
+
+struct intel_hw_status_page {
+ uint32_t *page_addr;
+ unsigned int gfx_addr;
+ struct drm_i915_gem_object *obj;
+};
+
+#define I915_READ_TAIL(ring) I915_READ(RING_TAIL((ring)->mmio_base))
+#define I915_WRITE_TAIL(ring, val) I915_WRITE(RING_TAIL((ring)->mmio_base), val)
+
+#define I915_READ_START(ring) I915_READ(RING_START((ring)->mmio_base))
+#define I915_WRITE_START(ring, val) I915_WRITE(RING_START((ring)->mmio_base), val)
+
+#define I915_READ_HEAD(ring) I915_READ(RING_HEAD((ring)->mmio_base))
+#define I915_WRITE_HEAD(ring, val) I915_WRITE(RING_HEAD((ring)->mmio_base), val)
+
+#define I915_READ_CTL(ring) I915_READ(RING_CTL((ring)->mmio_base))
+#define I915_WRITE_CTL(ring, val) I915_WRITE(RING_CTL((ring)->mmio_base), val)
+
+#define I915_READ_IMR(ring) I915_READ(RING_IMR((ring)->mmio_base))
+#define I915_WRITE_IMR(ring, val) I915_WRITE(RING_IMR((ring)->mmio_base), val)
+
+#define I915_READ_NOPID(ring) I915_READ(RING_NOPID((ring)->mmio_base))
+#define I915_READ_SYNC_0(ring) I915_READ(RING_SYNC_0((ring)->mmio_base))
+#define I915_READ_SYNC_1(ring) I915_READ(RING_SYNC_1((ring)->mmio_base))
+
+struct intel_ring_buffer {
+ const char *name;
+ enum intel_ring_id {
+ RCS = 0x0,
+ VCS,
+ BCS,
+ } id;
+#define I915_NUM_RINGS 3
+ uint32_t mmio_base;
+ void *virtual_start;
+ struct drm_device *dev;
+ struct drm_i915_gem_object *obj;
+
+ uint32_t head;
+ uint32_t tail;
+ int space;
+ int size;
+ int effective_size;
+ struct intel_hw_status_page status_page;
+
+ /** We track the position of the requests in the ring buffer, and
+ * when each is retired we increment last_retired_head as the GPU
+ * must have finished processing the request and so we know we
+ * can advance the ringbuffer up to that position.
+ *
+ * last_retired_head is set to -1 after the value is consumed so
+ * we can detect new retirements.
+ */
+ u32 last_retired_head;
+
+ struct mtx irq_lock;
+ uint32_t irq_refcount;
+ uint32_t irq_mask;
+ uint32_t irq_seqno; /* last seq seem at irq time */
+ uint32_t trace_irq_seqno;
+ uint32_t waiting_seqno;
+ uint32_t sync_seqno[I915_NUM_RINGS-1];
+ bool (*irq_get)(struct intel_ring_buffer *ring);
+ void (*irq_put)(struct intel_ring_buffer *ring);
+
+ int (*init)(struct intel_ring_buffer *ring);
+
+ void (*write_tail)(struct intel_ring_buffer *ring,
+ uint32_t value);
+ int (*flush)(struct intel_ring_buffer *ring,
+ uint32_t invalidate_domains,
+ uint32_t 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);
+ void (*cleanup)(struct intel_ring_buffer *ring);
+ int (*sync_to)(struct intel_ring_buffer *ring,
+ struct intel_ring_buffer *to,
+ u32 seqno);
+
+ u32 semaphore_register[3]; /*our mbox written by others */
+ u32 signal_mbox[2]; /* mboxes this ring signals to */
+
+ /**
+ * List of objects currently involved in rendering from the
+ * ringbuffer.
+ *
+ * Includes buffers having the contents of their GPU caches
+ * flushed, not necessarily primitives. last_rendering_seqno
+ * represents when the rendering involved will be completed.
+ *
+ * A reference is held on the buffer while on this list.
+ */
+ struct list_head active_list;
+
+ /**
+ * List of breadcrumbs associated with GPU requests currently
+ * outstanding.
+ */
+ struct list_head request_list;
+
+ /**
+ * List of objects currently pending a GPU write flush.
+ *
+ * All elements on this list will belong to either the
+ * active_list or flushing_list, last_rendering_seqno can
+ * be used to differentiate between the two elements.
+ */
+ struct list_head gpu_write_list;
+
+ /**
+ * Do we have some not yet emitted requests outstanding?
+ */
+ uint32_t outstanding_lazy_request;
+
+ drm_local_map_t map;
+
+ void *private;
+};
+
+static inline unsigned
+intel_ring_flag(struct intel_ring_buffer *ring)
+{
+ return 1 << ring->id;
+}
+
+static inline uint32_t
+intel_ring_sync_index(struct intel_ring_buffer *ring,
+ struct intel_ring_buffer *other)
+{
+ int idx;
+
+ /*
+ * cs -> 0 = vcs, 1 = bcs
+ * vcs -> 0 = bcs, 1 = cs,
+ * bcs -> 0 = cs, 1 = vcs.
+ */
+
+ idx = (other - ring) - 1;
+ if (idx < 0)
+ idx += I915_NUM_RINGS;
+
+ return idx;
+}
+
+static inline uint32_t
+intel_read_status_page(struct intel_ring_buffer *ring, int reg)
+{
+
+ return (atomic_load_acq_32(ring->status_page.page_addr + reg));
+}
+
+void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring);
+
+int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n);
+static inline int intel_wait_ring_idle(struct intel_ring_buffer *ring)
+{
+
+ return (intel_wait_ring_buffer(ring, ring->size - 8));
+}
+
+int intel_ring_begin(struct intel_ring_buffer *ring, int n);
+
+static inline void intel_ring_emit(struct intel_ring_buffer *ring,
+ uint32_t data)
+{
+ *(volatile uint32_t *)((char *)ring->virtual_start +
+ ring->tail) = data;
+ ring->tail += 4;
+}
+
+void intel_ring_advance(struct intel_ring_buffer *ring);
+
+uint32_t intel_ring_get_seqno(struct intel_ring_buffer *ring);
+
+int intel_init_render_ring_buffer(struct drm_device *dev);
+int intel_init_bsd_ring_buffer(struct drm_device *dev);
+int intel_init_blt_ring_buffer(struct drm_device *dev);
+
+u32 intel_ring_get_active_head(struct intel_ring_buffer *ring);
+void intel_ring_setup_status_page(struct intel_ring_buffer *ring);
+
+static inline u32 intel_ring_get_tail(struct intel_ring_buffer *ring)
+{
+ return ring->tail;
+}
+
+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);
+
+#endif /* _INTEL_RINGBUFFER_H_ */
diff --git a/sys/dev/drm2/i915/intel_sdvo.c b/sys/dev/drm2/i915/intel_sdvo.c
new file mode 100644
index 000000000000..0800d384af25
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_sdvo.c
@@ -0,0 +1,2680 @@
+/*
+ * Copyright 2006 Dave Airlie <airlied@linux.ie>
+ * Copyright © 2006-2007 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_sdvo_regs.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/iicbus/iic.h>
+#include <dev/iicbus/iiconf.h>
+#include "iicbus_if.h"
+
+#define SDVO_TMDS_MASK (SDVO_OUTPUT_TMDS0 | SDVO_OUTPUT_TMDS1)
+#define SDVO_RGB_MASK (SDVO_OUTPUT_RGB0 | SDVO_OUTPUT_RGB1)
+#define SDVO_LVDS_MASK (SDVO_OUTPUT_LVDS0 | SDVO_OUTPUT_LVDS1)
+#define SDVO_TV_MASK (SDVO_OUTPUT_CVBS0 | SDVO_OUTPUT_SVID0)
+
+#define SDVO_OUTPUT_MASK (SDVO_TMDS_MASK | SDVO_RGB_MASK | SDVO_LVDS_MASK |\
+ SDVO_TV_MASK)
+
+#define IS_TV(c) (c->output_flag & SDVO_TV_MASK)
+#define IS_TMDS(c) (c->output_flag & SDVO_TMDS_MASK)
+#define IS_LVDS(c) (c->output_flag & SDVO_LVDS_MASK)
+#define IS_TV_OR_LVDS(c) (c->output_flag & (SDVO_TV_MASK | SDVO_LVDS_MASK))
+#define IS_DIGITAL(c) (c->output_flag & (SDVO_TMDS_MASK | SDVO_LVDS_MASK))
+
+
+static const char *tv_format_names[] = {
+ "NTSC_M" , "NTSC_J" , "NTSC_443",
+ "PAL_B" , "PAL_D" , "PAL_G" ,
+ "PAL_H" , "PAL_I" , "PAL_M" ,
+ "PAL_N" , "PAL_NC" , "PAL_60" ,
+ "SECAM_B" , "SECAM_D" , "SECAM_G" ,
+ "SECAM_K" , "SECAM_K1", "SECAM_L" ,
+ "SECAM_60"
+};
+
+#define TV_FORMAT_NUM (sizeof(tv_format_names) / sizeof(*tv_format_names))
+
+struct intel_sdvo {
+ struct intel_encoder base;
+
+ device_t i2c;
+ u8 slave_addr;
+
+ device_t ddc_iic_bus, ddc;
+
+ /* Register for the SDVO device: SDVOB or SDVOC */
+ int sdvo_reg;
+
+ /* Active outputs controlled by this SDVO output */
+ uint16_t controlled_output;
+
+ /*
+ * Capabilities of the SDVO device returned by
+ * i830_sdvo_get_capabilities()
+ */
+ struct intel_sdvo_caps caps;
+
+ /* Pixel clock limitations reported by the SDVO device, in kHz */
+ int pixel_clock_min, pixel_clock_max;
+
+ /*
+ * For multiple function SDVO device,
+ * this is for current attached outputs.
+ */
+ uint16_t attached_output;
+
+ /*
+ * Hotplug activation bits for this device
+ */
+ uint8_t hotplug_active[2];
+
+ /**
+ * This is used to select the color range of RBG outputs in HDMI mode.
+ * It is only valid when using TMDS encoding and 8 bit per color mode.
+ */
+ uint32_t color_range;
+
+ /**
+ * This is set if we're going to treat the device as TV-out.
+ *
+ * While we have these nice friendly flags for output types that ought
+ * to decide this for us, the S-Video output on our HDMI+S-Video card
+ * shows up as RGB1 (VGA).
+ */
+ bool is_tv;
+
+ /* This is for current tv format name */
+ int tv_format_index;
+
+ /**
+ * This is set if we treat the device as HDMI, instead of DVI.
+ */
+ bool is_hdmi;
+ bool has_hdmi_monitor;
+ bool has_hdmi_audio;
+
+ /**
+ * This is set if we detect output of sdvo device as LVDS and
+ * have a valid fixed mode to use with the panel.
+ */
+ bool is_lvds;
+
+ /**
+ * This is sdvo fixed pannel mode pointer
+ */
+ struct drm_display_mode *sdvo_lvds_fixed_mode;
+
+ /* DDC bus used by this SDVO encoder */
+ uint8_t ddc_bus;
+
+ /* Input timings for adjusted_mode */
+ struct intel_sdvo_dtd input_dtd;
+};
+
+struct intel_sdvo_connector {
+ struct intel_connector base;
+
+ /* Mark the type of connector */
+ uint16_t output_flag;
+
+ enum hdmi_force_audio force_audio;
+
+ /* This contains all current supported TV format */
+ u8 tv_format_supported[TV_FORMAT_NUM];
+ int format_supported_num;
+ struct drm_property *tv_format;
+
+ /* add the property for the SDVO-TV */
+ struct drm_property *left;
+ struct drm_property *right;
+ struct drm_property *top;
+ struct drm_property *bottom;
+ struct drm_property *hpos;
+ struct drm_property *vpos;
+ struct drm_property *contrast;
+ struct drm_property *saturation;
+ struct drm_property *hue;
+ struct drm_property *sharpness;
+ struct drm_property *flicker_filter;
+ struct drm_property *flicker_filter_adaptive;
+ struct drm_property *flicker_filter_2d;
+ struct drm_property *tv_chroma_filter;
+ struct drm_property *tv_luma_filter;
+ struct drm_property *dot_crawl;
+
+ /* add the property for the SDVO-TV/LVDS */
+ struct drm_property *brightness;
+
+ /* Add variable to record current setting for the above property */
+ u32 left_margin, right_margin, top_margin, bottom_margin;
+
+ /* this is to get the range of margin.*/
+ u32 max_hscan, max_vscan;
+ u32 max_hpos, cur_hpos;
+ u32 max_vpos, cur_vpos;
+ u32 cur_brightness, max_brightness;
+ u32 cur_contrast, max_contrast;
+ u32 cur_saturation, max_saturation;
+ u32 cur_hue, max_hue;
+ u32 cur_sharpness, max_sharpness;
+ u32 cur_flicker_filter, max_flicker_filter;
+ u32 cur_flicker_filter_adaptive, max_flicker_filter_adaptive;
+ u32 cur_flicker_filter_2d, max_flicker_filter_2d;
+ u32 cur_tv_chroma_filter, max_tv_chroma_filter;
+ u32 cur_tv_luma_filter, max_tv_luma_filter;
+ u32 cur_dot_crawl, max_dot_crawl;
+};
+
+static struct intel_sdvo *to_intel_sdvo(struct drm_encoder *encoder)
+{
+ return container_of(encoder, struct intel_sdvo, base.base);
+}
+
+static struct intel_sdvo *intel_attached_sdvo(struct drm_connector *connector)
+{
+ return container_of(intel_attached_encoder(connector),
+ struct intel_sdvo, base);
+}
+
+static struct intel_sdvo_connector *to_intel_sdvo_connector(struct drm_connector *connector)
+{
+ return container_of(to_intel_connector(connector), struct intel_sdvo_connector, base);
+}
+
+static bool
+intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, uint16_t flags);
+static bool
+intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
+ struct intel_sdvo_connector *intel_sdvo_connector,
+ int type);
+static bool
+intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo,
+ struct intel_sdvo_connector *intel_sdvo_connector);
+
+/**
+ * Writes the SDVOB or SDVOC with the given value, but always writes both
+ * SDVOB and SDVOC to work around apparent hardware issues (according to
+ * comments in the BIOS).
+ */
+static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val)
+{
+ struct drm_device *dev = intel_sdvo->base.base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 bval = val, cval = val;
+ int i;
+
+ if (intel_sdvo->sdvo_reg == PCH_SDVOB) {
+ I915_WRITE(intel_sdvo->sdvo_reg, val);
+ I915_READ(intel_sdvo->sdvo_reg);
+ return;
+ }
+
+ if (intel_sdvo->sdvo_reg == SDVOB) {
+ cval = I915_READ(SDVOC);
+ } else {
+ bval = I915_READ(SDVOB);
+ }
+ /*
+ * Write the registers twice for luck. Sometimes,
+ * writing them only once doesn't appear to 'stick'.
+ * The BIOS does this too. Yay, magic
+ */
+ for (i = 0; i < 2; i++)
+ {
+ I915_WRITE(SDVOB, bval);
+ I915_READ(SDVOB);
+ I915_WRITE(SDVOC, cval);
+ I915_READ(SDVOC);
+ }
+}
+
+static bool intel_sdvo_read_byte(struct intel_sdvo *intel_sdvo, u8 addr, u8 *ch)
+{
+ struct iic_msg msgs[] = {
+ {
+ .slave = intel_sdvo->slave_addr,
+ .flags = 0,
+ .len = 1,
+ .buf = &addr,
+ },
+ {
+ .slave = intel_sdvo->slave_addr,
+ .flags = IIC_M_RD,
+ .len = 1,
+ .buf = ch,
+ }
+ };
+ int ret;
+
+ if ((ret = iicbus_transfer(intel_sdvo->i2c, msgs, 2)) == 0)
+ return true;
+
+ DRM_DEBUG_KMS("i2c transfer returned %d\n", ret);
+ return false;
+}
+
+#define SDVO_CMD_NAME_ENTRY(cmd) {cmd, #cmd}
+/** Mapping of command numbers to names, for debug output */
+static const struct _sdvo_cmd_name {
+ u8 cmd;
+ const char *name;
+} sdvo_cmd_names[] = {
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_RESET),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_DEVICE_CAPS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_FIRMWARE_REV),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_TRAINED_INPUTS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_ACTIVE_OUTPUTS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_ACTIVE_OUTPUTS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_IN_OUT_MAP),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_IN_OUT_MAP),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_ATTACHED_DISPLAYS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HOT_PLUG_SUPPORT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_ACTIVE_HOT_PLUG),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_ACTIVE_HOT_PLUG),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_INTERRUPT_EVENT_SOURCE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_TARGET_INPUT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_TARGET_OUTPUT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_INPUT_TIMINGS_PART1),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_INPUT_TIMINGS_PART2),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_INPUT_TIMINGS_PART1),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_INPUT_TIMINGS_PART2),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_INPUT_TIMINGS_PART1),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_OUTPUT_TIMINGS_PART1),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_OUTPUT_TIMINGS_PART2),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_OUTPUT_TIMINGS_PART1),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_OUTPUT_TIMINGS_PART2),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_CREATE_PREFERRED_INPUT_TIMING),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_INPUT_PIXEL_CLOCK_RANGE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_OUTPUT_PIXEL_CLOCK_RANGE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPPORTED_CLOCK_RATE_MULTS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_CLOCK_RATE_MULT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_CLOCK_RATE_MULT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPPORTED_TV_FORMATS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_TV_FORMAT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_TV_FORMAT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPPORTED_POWER_STATES),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_POWER_STATE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_ENCODER_POWER_STATE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_DISPLAY_POWER_STATE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_CONTROL_BUS_SWITCH),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SDTV_RESOLUTION_SUPPORT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SCALED_HDTV_RESOLUTION_SUPPORT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPPORTED_ENHANCEMENTS),
+
+ /* Add the op code for SDVO enhancements */
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_HPOS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HPOS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HPOS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_VPOS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_VPOS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_VPOS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_SATURATION),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SATURATION),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_SATURATION),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_HUE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HUE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HUE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_CONTRAST),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_CONTRAST),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_CONTRAST),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_BRIGHTNESS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_BRIGHTNESS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_BRIGHTNESS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_OVERSCAN_H),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_OVERSCAN_H),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_OVERSCAN_H),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_OVERSCAN_V),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_OVERSCAN_V),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_OVERSCAN_V),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_FLICKER_FILTER),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_FLICKER_FILTER),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_FLICKER_FILTER),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_FLICKER_FILTER_ADAPTIVE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_FLICKER_FILTER_ADAPTIVE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_FLICKER_FILTER_ADAPTIVE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_FLICKER_FILTER_2D),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_FLICKER_FILTER_2D),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_FLICKER_FILTER_2D),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_SHARPNESS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SHARPNESS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_SHARPNESS),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_DOT_CRAWL),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_DOT_CRAWL),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_TV_CHROMA_FILTER),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_TV_CHROMA_FILTER),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_TV_CHROMA_FILTER),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_TV_LUMA_FILTER),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_TV_LUMA_FILTER),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_TV_LUMA_FILTER),
+
+ /* HDMI op code */
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPP_ENCODE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_ENCODE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_ENCODE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_PIXEL_REPLI),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_PIXEL_REPLI),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_COLORIMETRY_CAP),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_COLORIMETRY),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_COLORIMETRY),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_AUDIO_ENCRYPT_PREFER),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_AUDIO_STAT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_AUDIO_STAT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_INDEX),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HBUF_INDEX),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_INFO),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_AV_SPLIT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HBUF_AV_SPLIT),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_TXRATE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HBUF_TXRATE),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HBUF_DATA),
+ SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HBUF_DATA),
+};
+
+#define IS_SDVOB(reg) (reg == SDVOB || reg == PCH_SDVOB)
+#define SDVO_NAME(svdo) (IS_SDVOB((svdo)->sdvo_reg) ? "SDVOB" : "SDVOC")
+
+static void
+intel_sdvo_debug_write(struct intel_sdvo *intel_sdvo, u8 cmd,
+ const void *args, int args_len)
+{
+ int i;
+
+ if ((drm_debug_flag & DRM_DEBUGBITS_KMS) == 0)
+ return;
+ DRM_DEBUG_KMS("%s: W: %02X ", SDVO_NAME(intel_sdvo), cmd);
+ for (i = 0; i < args_len; i++)
+ printf("%02X ", ((const u8 *)args)[i]);
+ for (; i < 8; i++)
+ printf(" ");
+ for (i = 0; i < DRM_ARRAY_SIZE(sdvo_cmd_names); i++) {
+ if (cmd == sdvo_cmd_names[i].cmd) {
+ printf("(%s)", sdvo_cmd_names[i].name);
+ break;
+ }
+ }
+ if (i == DRM_ARRAY_SIZE(sdvo_cmd_names))
+ printf("(%02X)", cmd);
+ printf("\n");
+}
+
+static const char *cmd_status_names[] = {
+ "Power on",
+ "Success",
+ "Not supported",
+ "Invalid arg",
+ "Pending",
+ "Target not specified",
+ "Scaling not supported"
+};
+
+static bool
+intel_sdvo_write_cmd(struct intel_sdvo *intel_sdvo, u8 cmd, const void *args,
+ int args_len)
+{
+ u8 buf[args_len*2 + 2], status;
+ struct iic_msg msgs[args_len + 3];
+ int i, ret;
+
+ intel_sdvo_debug_write(intel_sdvo, cmd, args, args_len);
+
+ for (i = 0; i < args_len; i++) {
+ msgs[i].slave = intel_sdvo->slave_addr;
+ msgs[i].flags = 0;
+ msgs[i].len = 2;
+ msgs[i].buf = buf + 2 *i;
+ buf[2*i + 0] = SDVO_I2C_ARG_0 - i;
+ buf[2*i + 1] = ((const u8*)args)[i];
+ }
+ msgs[i].slave = intel_sdvo->slave_addr;
+ msgs[i].flags = 0;
+ msgs[i].len = 2;
+ msgs[i].buf = buf + 2*i;
+ buf[2*i + 0] = SDVO_I2C_OPCODE;
+ buf[2*i + 1] = cmd;
+
+ /* the following two are to read the response */
+ status = SDVO_I2C_CMD_STATUS;
+ msgs[i+1].slave = intel_sdvo->slave_addr;
+ msgs[i+1].flags = 0;
+ msgs[i+1].len = 1;
+ msgs[i+1].buf = &status;
+
+ msgs[i+2].slave = intel_sdvo->slave_addr;
+ msgs[i+2].flags = IIC_M_RD;
+ msgs[i+2].len = 1;
+ msgs[i+2].buf = &status;
+
+ ret = iicbus_transfer(intel_sdvo->i2c, msgs, i+3);
+ if (ret != 0) {
+ DRM_DEBUG_KMS("I2c transfer returned %d\n", ret);
+ return (false);
+ }
+#if 0
+ if (ret != i+3) {
+ /* failure in I2C transfer */
+ DRM_DEBUG_KMS("I2c transfer returned %d/%d\n", ret, i+3);
+ return false;
+ }
+#endif
+
+ return true;
+}
+
+static bool
+intel_sdvo_read_response(struct intel_sdvo *intel_sdvo, void *response,
+ int response_len)
+{
+ u8 retry = 5;
+ u8 status;
+ int i;
+
+ DRM_DEBUG_KMS("%s: R: ", SDVO_NAME(intel_sdvo));
+
+ /*
+ * The documentation states that all commands will be
+ * processed within 15µs, and that we need only poll
+ * the status byte a maximum of 3 times in order for the
+ * command to be complete.
+ *
+ * Check 5 times in case the hardware failed to read the docs.
+ */
+ if (!intel_sdvo_read_byte(intel_sdvo, SDVO_I2C_CMD_STATUS, &status))
+ goto log_fail;
+
+ while (status == SDVO_CMD_STATUS_PENDING && retry--) {
+ DELAY(15);
+ if (!intel_sdvo_read_byte(intel_sdvo,
+ SDVO_I2C_CMD_STATUS, &status))
+ goto log_fail;
+ }
+
+ if ((drm_debug_flag & DRM_DEBUGBITS_KMS) != 0) {
+ if (status <= SDVO_CMD_STATUS_SCALING_NOT_SUPP)
+ printf("(%s)", cmd_status_names[status]);
+ else
+ printf("(??? %d)", status);
+ }
+
+ if (status != SDVO_CMD_STATUS_SUCCESS)
+ goto log_fail;
+
+ /* Read the command response */
+ for (i = 0; i < response_len; i++) {
+ if (!intel_sdvo_read_byte(intel_sdvo,
+ SDVO_I2C_RETURN_0 + i,
+ &((u8 *)response)[i]))
+ goto log_fail;
+ if ((drm_debug_flag & DRM_DEBUGBITS_KMS) != 0)
+ printf(" %02X", ((u8 *)response)[i]);
+ }
+ if ((drm_debug_flag & DRM_DEBUGBITS_KMS) != 0)
+ printf("\n");
+ return (true);
+
+log_fail:
+ if ((drm_debug_flag & DRM_DEBUGBITS_KMS) != 0)
+ printf("... failed\n");
+ return (false);
+}
+
+static int intel_sdvo_get_pixel_multiplier(struct drm_display_mode *mode)
+{
+ if (mode->clock >= 100000)
+ return 1;
+ else if (mode->clock >= 50000)
+ return 2;
+ else
+ return 4;
+}
+
+static bool intel_sdvo_set_control_bus_switch(struct intel_sdvo *intel_sdvo,
+ u8 ddc_bus)
+{
+ /* This must be the immediately preceding write before the i2c xfer */
+ return intel_sdvo_write_cmd(intel_sdvo,
+ SDVO_CMD_SET_CONTROL_BUS_SWITCH,
+ &ddc_bus, 1);
+}
+
+static bool intel_sdvo_set_value(struct intel_sdvo *intel_sdvo, u8 cmd, const void *data, int len)
+{
+ if (!intel_sdvo_write_cmd(intel_sdvo, cmd, data, len))
+ return false;
+
+ return intel_sdvo_read_response(intel_sdvo, NULL, 0);
+}
+
+static bool
+intel_sdvo_get_value(struct intel_sdvo *intel_sdvo, u8 cmd, void *value, int len)
+{
+ if (!intel_sdvo_write_cmd(intel_sdvo, cmd, NULL, 0))
+ return false;
+
+ return intel_sdvo_read_response(intel_sdvo, value, len);
+}
+
+static bool intel_sdvo_set_target_input(struct intel_sdvo *intel_sdvo)
+{
+ struct intel_sdvo_set_target_input_args targets = {0};
+ return intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_TARGET_INPUT,
+ &targets, sizeof(targets));
+}
+
+/**
+ * Return whether each input is trained.
+ *
+ * This function is making an assumption about the layout of the response,
+ * which should be checked against the docs.
+ */
+static bool intel_sdvo_get_trained_inputs(struct intel_sdvo *intel_sdvo, bool *input_1, bool *input_2)
+{
+ struct intel_sdvo_get_trained_inputs_response response;
+
+ CTASSERT(sizeof(response) == 1);
+ if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_TRAINED_INPUTS,
+ &response, sizeof(response)))
+ return false;
+
+ *input_1 = response.input0_trained;
+ *input_2 = response.input1_trained;
+ return true;
+}
+
+static bool intel_sdvo_set_active_outputs(struct intel_sdvo *intel_sdvo,
+ u16 outputs)
+{
+ return intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_ACTIVE_OUTPUTS,
+ &outputs, sizeof(outputs));
+}
+
+static bool intel_sdvo_set_encoder_power_state(struct intel_sdvo *intel_sdvo,
+ int mode)
+{
+ u8 state = SDVO_ENCODER_STATE_ON;
+
+ switch (mode) {
+ case DRM_MODE_DPMS_ON:
+ state = SDVO_ENCODER_STATE_ON;
+ break;
+ case DRM_MODE_DPMS_STANDBY:
+ state = SDVO_ENCODER_STATE_STANDBY;
+ break;
+ case DRM_MODE_DPMS_SUSPEND:
+ state = SDVO_ENCODER_STATE_SUSPEND;
+ break;
+ case DRM_MODE_DPMS_OFF:
+ state = SDVO_ENCODER_STATE_OFF;
+ break;
+ }
+
+ return intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_ENCODER_POWER_STATE, &state, sizeof(state));
+}
+
+static bool intel_sdvo_get_input_pixel_clock_range(struct intel_sdvo *intel_sdvo,
+ int *clock_min,
+ int *clock_max)
+{
+ struct intel_sdvo_pixel_clock_range clocks;
+
+ CTASSERT(sizeof(clocks) == 4);
+ if (!intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_INPUT_PIXEL_CLOCK_RANGE,
+ &clocks, sizeof(clocks)))
+ return false;
+
+ /* Convert the values from units of 10 kHz to kHz. */
+ *clock_min = clocks.min * 10;
+ *clock_max = clocks.max * 10;
+ return true;
+}
+
+static bool intel_sdvo_set_target_output(struct intel_sdvo *intel_sdvo,
+ u16 outputs)
+{
+ return intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_TARGET_OUTPUT,
+ &outputs, sizeof(outputs));
+}
+
+static bool intel_sdvo_set_timing(struct intel_sdvo *intel_sdvo, u8 cmd,
+ struct intel_sdvo_dtd *dtd)
+{
+ return intel_sdvo_set_value(intel_sdvo, cmd, &dtd->part1, sizeof(dtd->part1)) &&
+ intel_sdvo_set_value(intel_sdvo, cmd + 1, &dtd->part2, sizeof(dtd->part2));
+}
+
+static bool intel_sdvo_set_input_timing(struct intel_sdvo *intel_sdvo,
+ struct intel_sdvo_dtd *dtd)
+{
+ return intel_sdvo_set_timing(intel_sdvo,
+ SDVO_CMD_SET_INPUT_TIMINGS_PART1, dtd);
+}
+
+static bool intel_sdvo_set_output_timing(struct intel_sdvo *intel_sdvo,
+ struct intel_sdvo_dtd *dtd)
+{
+ return intel_sdvo_set_timing(intel_sdvo,
+ SDVO_CMD_SET_OUTPUT_TIMINGS_PART1, dtd);
+}
+
+static bool
+intel_sdvo_create_preferred_input_timing(struct intel_sdvo *intel_sdvo,
+ uint16_t clock,
+ uint16_t width,
+ uint16_t height)
+{
+ struct intel_sdvo_preferred_input_timing_args args;
+
+ memset(&args, 0, sizeof(args));
+ args.clock = clock;
+ args.width = width;
+ args.height = height;
+ args.interlace = 0;
+
+ if (intel_sdvo->is_lvds &&
+ (intel_sdvo->sdvo_lvds_fixed_mode->hdisplay != width ||
+ intel_sdvo->sdvo_lvds_fixed_mode->vdisplay != height))
+ args.scaled = 1;
+
+ return intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_CREATE_PREFERRED_INPUT_TIMING,
+ &args, sizeof(args));
+}
+
+static bool intel_sdvo_get_preferred_input_timing(struct intel_sdvo *intel_sdvo,
+ struct intel_sdvo_dtd *dtd)
+{
+ CTASSERT(sizeof(dtd->part1) == 8);
+ CTASSERT(sizeof(dtd->part2) == 8);
+ return intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1,
+ &dtd->part1, sizeof(dtd->part1)) &&
+ intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2,
+ &dtd->part2, sizeof(dtd->part2));
+}
+
+static bool intel_sdvo_set_clock_rate_mult(struct intel_sdvo *intel_sdvo, u8 val)
+{
+ return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_CLOCK_RATE_MULT, &val, 1);
+}
+
+static void intel_sdvo_get_dtd_from_mode(struct intel_sdvo_dtd *dtd,
+ const struct drm_display_mode *mode)
+{
+ uint16_t width, height;
+ uint16_t h_blank_len, h_sync_len, v_blank_len, v_sync_len;
+ uint16_t h_sync_offset, v_sync_offset;
+ int mode_clock;
+
+ width = mode->crtc_hdisplay;
+ height = mode->crtc_vdisplay;
+
+ /* do some mode translations */
+ h_blank_len = mode->crtc_hblank_end - mode->crtc_hblank_start;
+ h_sync_len = mode->crtc_hsync_end - mode->crtc_hsync_start;
+
+ v_blank_len = mode->crtc_vblank_end - mode->crtc_vblank_start;
+ v_sync_len = mode->crtc_vsync_end - mode->crtc_vsync_start;
+
+ h_sync_offset = mode->crtc_hsync_start - mode->crtc_hblank_start;
+ v_sync_offset = mode->crtc_vsync_start - mode->crtc_vblank_start;
+
+ mode_clock = mode->clock;
+ mode_clock /= intel_mode_get_pixel_multiplier(mode) ?: 1;
+ mode_clock /= 10;
+ dtd->part1.clock = mode_clock;
+
+ dtd->part1.h_active = width & 0xff;
+ dtd->part1.h_blank = h_blank_len & 0xff;
+ dtd->part1.h_high = (((width >> 8) & 0xf) << 4) |
+ ((h_blank_len >> 8) & 0xf);
+ dtd->part1.v_active = height & 0xff;
+ dtd->part1.v_blank = v_blank_len & 0xff;
+ dtd->part1.v_high = (((height >> 8) & 0xf) << 4) |
+ ((v_blank_len >> 8) & 0xf);
+
+ dtd->part2.h_sync_off = h_sync_offset & 0xff;
+ dtd->part2.h_sync_width = h_sync_len & 0xff;
+ dtd->part2.v_sync_off_width = (v_sync_offset & 0xf) << 4 |
+ (v_sync_len & 0xf);
+ dtd->part2.sync_off_width_high = ((h_sync_offset & 0x300) >> 2) |
+ ((h_sync_len & 0x300) >> 4) | ((v_sync_offset & 0x30) >> 2) |
+ ((v_sync_len & 0x30) >> 4);
+
+ dtd->part2.dtd_flags = 0x18;
+ if (mode->flags & DRM_MODE_FLAG_PHSYNC)
+ dtd->part2.dtd_flags |= 0x2;
+ if (mode->flags & DRM_MODE_FLAG_PVSYNC)
+ dtd->part2.dtd_flags |= 0x4;
+
+ dtd->part2.sdvo_flags = 0;
+ dtd->part2.v_sync_off_high = v_sync_offset & 0xc0;
+ dtd->part2.reserved = 0;
+}
+
+static void intel_sdvo_get_mode_from_dtd(struct drm_display_mode * mode,
+ const struct intel_sdvo_dtd *dtd)
+{
+ mode->hdisplay = dtd->part1.h_active;
+ mode->hdisplay += ((dtd->part1.h_high >> 4) & 0x0f) << 8;
+ mode->hsync_start = mode->hdisplay + dtd->part2.h_sync_off;
+ mode->hsync_start += (dtd->part2.sync_off_width_high & 0xc0) << 2;
+ mode->hsync_end = mode->hsync_start + dtd->part2.h_sync_width;
+ mode->hsync_end += (dtd->part2.sync_off_width_high & 0x30) << 4;
+ mode->htotal = mode->hdisplay + dtd->part1.h_blank;
+ mode->htotal += (dtd->part1.h_high & 0xf) << 8;
+
+ mode->vdisplay = dtd->part1.v_active;
+ mode->vdisplay += ((dtd->part1.v_high >> 4) & 0x0f) << 8;
+ mode->vsync_start = mode->vdisplay;
+ mode->vsync_start += (dtd->part2.v_sync_off_width >> 4) & 0xf;
+ mode->vsync_start += (dtd->part2.sync_off_width_high & 0x0c) << 2;
+ mode->vsync_start += dtd->part2.v_sync_off_high & 0xc0;
+ mode->vsync_end = mode->vsync_start +
+ (dtd->part2.v_sync_off_width & 0xf);
+ mode->vsync_end += (dtd->part2.sync_off_width_high & 0x3) << 4;
+ mode->vtotal = mode->vdisplay + dtd->part1.v_blank;
+ mode->vtotal += (dtd->part1.v_high & 0xf) << 8;
+
+ mode->clock = dtd->part1.clock * 10;
+
+ mode->flags &= ~(DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC);
+ if (dtd->part2.dtd_flags & 0x2)
+ mode->flags |= DRM_MODE_FLAG_PHSYNC;
+ if (dtd->part2.dtd_flags & 0x4)
+ mode->flags |= DRM_MODE_FLAG_PVSYNC;
+}
+
+static bool intel_sdvo_check_supp_encode(struct intel_sdvo *intel_sdvo)
+{
+ struct intel_sdvo_encode encode;
+
+ CTASSERT(sizeof(encode) == 2);
+ return intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_SUPP_ENCODE,
+ &encode, sizeof(encode));
+}
+
+static bool intel_sdvo_set_encode(struct intel_sdvo *intel_sdvo,
+ uint8_t mode)
+{
+ return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_ENCODE, &mode, 1);
+}
+
+static bool intel_sdvo_set_colorimetry(struct intel_sdvo *intel_sdvo,
+ uint8_t mode)
+{
+ return intel_sdvo_set_value(intel_sdvo, SDVO_CMD_SET_COLORIMETRY, &mode, 1);
+}
+
+#if 0
+static void intel_sdvo_dump_hdmi_buf(struct intel_sdvo *intel_sdvo)
+{
+ int i, j;
+ uint8_t set_buf_index[2];
+ uint8_t av_split;
+ uint8_t buf_size;
+ uint8_t buf[48];
+ uint8_t *pos;
+
+ intel_sdvo_get_value(encoder, SDVO_CMD_GET_HBUF_AV_SPLIT, &av_split, 1);
+
+ for (i = 0; i <= av_split; i++) {
+ set_buf_index[0] = i; set_buf_index[1] = 0;
+ intel_sdvo_write_cmd(encoder, SDVO_CMD_SET_HBUF_INDEX,
+ set_buf_index, 2);
+ intel_sdvo_write_cmd(encoder, SDVO_CMD_GET_HBUF_INFO, NULL, 0);
+ intel_sdvo_read_response(encoder, &buf_size, 1);
+
+ pos = buf;
+ for (j = 0; j <= buf_size; j += 8) {
+ intel_sdvo_write_cmd(encoder, SDVO_CMD_GET_HBUF_DATA,
+ NULL, 0);
+ intel_sdvo_read_response(encoder, pos, 8);
+ pos += 8;
+ }
+ }
+}
+#endif
+
+static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo)
+{
+ struct dip_infoframe avi_if = {
+ .type = DIP_TYPE_AVI,
+ .ver = DIP_VERSION_AVI,
+ .len = DIP_LEN_AVI,
+ };
+ uint8_t tx_rate = SDVO_HBUF_TX_VSYNC;
+ uint8_t set_buf_index[2] = { 1, 0 };
+ uint64_t *data = (uint64_t *)&avi_if;
+ unsigned i;
+
+ intel_dip_infoframe_csum(&avi_if);
+
+ if (!intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_HBUF_INDEX,
+ set_buf_index, 2))
+ return false;
+
+ for (i = 0; i < sizeof(avi_if); i += 8) {
+ if (!intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_HBUF_DATA,
+ data, 8))
+ return false;
+ data++;
+ }
+
+ return intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_HBUF_TXRATE,
+ &tx_rate, 1);
+}
+
+static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo)
+{
+ struct intel_sdvo_tv_format format;
+ uint32_t format_map;
+
+ format_map = 1 << intel_sdvo->tv_format_index;
+ memset(&format, 0, sizeof(format));
+ memcpy(&format, &format_map, min(sizeof(format), sizeof(format_map)));
+
+ CTASSERT(sizeof(format) == 6);
+ return intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_TV_FORMAT,
+ &format, sizeof(format));
+}
+
+static bool
+intel_sdvo_set_output_timings_from_mode(struct intel_sdvo *intel_sdvo,
+ struct drm_display_mode *mode)
+{
+ struct intel_sdvo_dtd output_dtd;
+
+ if (!intel_sdvo_set_target_output(intel_sdvo,
+ intel_sdvo->attached_output))
+ return false;
+
+ intel_sdvo_get_dtd_from_mode(&output_dtd, mode);
+ if (!intel_sdvo_set_output_timing(intel_sdvo, &output_dtd))
+ return false;
+
+ return true;
+}
+
+static bool
+intel_sdvo_set_input_timings_for_mode(struct intel_sdvo *intel_sdvo,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ /* Reset the input timing to the screen. Assume always input 0. */
+ if (!intel_sdvo_set_target_input(intel_sdvo))
+ return false;
+
+ if (!intel_sdvo_create_preferred_input_timing(intel_sdvo,
+ mode->clock / 10,
+ mode->hdisplay,
+ mode->vdisplay))
+ return false;
+
+ if (!intel_sdvo_get_preferred_input_timing(intel_sdvo,
+ &intel_sdvo->input_dtd))
+ return false;
+
+ intel_sdvo_get_mode_from_dtd(adjusted_mode, &intel_sdvo->input_dtd);
+
+ return true;
+}
+
+static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct intel_sdvo *intel_sdvo = to_intel_sdvo(encoder);
+ int multiplier;
+
+ /* We need to construct preferred input timings based on our
+ * output timings. To do that, we have to set the output
+ * timings, even though this isn't really the right place in
+ * the sequence to do it. Oh well.
+ */
+ if (intel_sdvo->is_tv) {
+ if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo, mode))
+ return false;
+
+ (void) intel_sdvo_set_input_timings_for_mode(intel_sdvo,
+ mode,
+ adjusted_mode);
+ } else if (intel_sdvo->is_lvds) {
+ if (!intel_sdvo_set_output_timings_from_mode(intel_sdvo,
+ intel_sdvo->sdvo_lvds_fixed_mode))
+ return false;
+
+ (void) intel_sdvo_set_input_timings_for_mode(intel_sdvo,
+ mode,
+ adjusted_mode);
+ }
+
+ /* Make the CRTC code factor in the SDVO pixel multiplier. The
+ * SDVO device will factor out the multiplier during mode_set.
+ */
+ multiplier = intel_sdvo_get_pixel_multiplier(adjusted_mode);
+ intel_mode_set_pixel_multiplier(adjusted_mode, multiplier);
+
+ return true;
+}
+
+static void intel_sdvo_mode_set(struct drm_encoder *encoder,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = encoder->crtc;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_sdvo *intel_sdvo = to_intel_sdvo(encoder);
+ u32 sdvox;
+ struct intel_sdvo_in_out_map in_out;
+ struct intel_sdvo_dtd input_dtd, output_dtd;
+ int pixel_multiplier = intel_mode_get_pixel_multiplier(adjusted_mode);
+ int rate;
+
+ if (!mode)
+ return;
+
+ /* First, set the input mapping for the first input to our controlled
+ * output. This is only correct if we're a single-input device, in
+ * which case the first input is the output from the appropriate SDVO
+ * channel on the motherboard. In a two-input device, the first input
+ * will be SDVOB and the second SDVOC.
+ */
+ in_out.in0 = intel_sdvo->attached_output;
+ in_out.in1 = 0;
+
+ intel_sdvo_set_value(intel_sdvo,
+ SDVO_CMD_SET_IN_OUT_MAP,
+ &in_out, sizeof(in_out));
+
+ /* Set the output timings to the screen */
+ if (!intel_sdvo_set_target_output(intel_sdvo,
+ intel_sdvo->attached_output))
+ return;
+
+ /* lvds has a special fixed output timing. */
+ if (intel_sdvo->is_lvds)
+ intel_sdvo_get_dtd_from_mode(&output_dtd,
+ intel_sdvo->sdvo_lvds_fixed_mode);
+ else
+ intel_sdvo_get_dtd_from_mode(&output_dtd, mode);
+ (void) intel_sdvo_set_output_timing(intel_sdvo, &output_dtd);
+
+ /* Set the input timing to the screen. Assume always input 0. */
+ if (!intel_sdvo_set_target_input(intel_sdvo))
+ return;
+
+ if (intel_sdvo->has_hdmi_monitor) {
+ intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_HDMI);
+ intel_sdvo_set_colorimetry(intel_sdvo,
+ SDVO_COLORIMETRY_RGB256);
+ intel_sdvo_set_avi_infoframe(intel_sdvo);
+ } else
+ intel_sdvo_set_encode(intel_sdvo, SDVO_ENCODE_DVI);
+
+ if (intel_sdvo->is_tv &&
+ !intel_sdvo_set_tv_format(intel_sdvo))
+ return;
+
+ /* We have tried to get input timing in mode_fixup, and filled into
+ * adjusted_mode.
+ */
+ intel_sdvo_get_dtd_from_mode(&input_dtd, adjusted_mode);
+ (void) intel_sdvo_set_input_timing(intel_sdvo, &input_dtd);
+
+ switch (pixel_multiplier) {
+ default:
+ case 1: rate = SDVO_CLOCK_RATE_MULT_1X; break;
+ case 2: rate = SDVO_CLOCK_RATE_MULT_2X; break;
+ case 4: rate = SDVO_CLOCK_RATE_MULT_4X; break;
+ }
+ if (!intel_sdvo_set_clock_rate_mult(intel_sdvo, rate))
+ return;
+
+ /* Set the SDVO control regs. */
+ if (INTEL_INFO(dev)->gen >= 4) {
+ /* The real mode polarity is set by the SDVO commands, using
+ * struct intel_sdvo_dtd. */
+ sdvox = SDVO_VSYNC_ACTIVE_HIGH | SDVO_HSYNC_ACTIVE_HIGH;
+ if (intel_sdvo->is_hdmi)
+ sdvox |= intel_sdvo->color_range;
+ if (INTEL_INFO(dev)->gen < 5)
+ sdvox |= SDVO_BORDER_ENABLE;
+ } else {
+ sdvox = I915_READ(intel_sdvo->sdvo_reg);
+ switch (intel_sdvo->sdvo_reg) {
+ case SDVOB:
+ sdvox &= SDVOB_PRESERVE_MASK;
+ break;
+ case SDVOC:
+ sdvox &= SDVOC_PRESERVE_MASK;
+ break;
+ }
+ sdvox |= (9 << 19) | SDVO_BORDER_ENABLE;
+ }
+
+ if (INTEL_PCH_TYPE(dev) >= PCH_CPT)
+ sdvox |= TRANSCODER_CPT(intel_crtc->pipe);
+ else
+ sdvox |= TRANSCODER(intel_crtc->pipe);
+
+ if (intel_sdvo->has_hdmi_audio)
+ sdvox |= SDVO_AUDIO_ENABLE;
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ /* done in crtc_mode_set as the dpll_md reg must be written early */
+ } else if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) {
+ /* done in crtc_mode_set as it lives inside the dpll register */
+ } else {
+ sdvox |= (pixel_multiplier - 1) << SDVO_PORT_MULTIPLY_SHIFT;
+ }
+
+ if (input_dtd.part2.sdvo_flags & SDVO_NEED_TO_STALL &&
+ INTEL_INFO(dev)->gen < 5)
+ sdvox |= SDVO_STALL_SELECT;
+ intel_sdvo_write_sdvox(intel_sdvo, sdvox);
+}
+
+static void intel_sdvo_dpms(struct drm_encoder *encoder, int mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_sdvo *intel_sdvo = to_intel_sdvo(encoder);
+ struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
+ u32 temp;
+
+ if (mode != DRM_MODE_DPMS_ON) {
+ intel_sdvo_set_active_outputs(intel_sdvo, 0);
+ if (0)
+ intel_sdvo_set_encoder_power_state(intel_sdvo, mode);
+
+ if (mode == DRM_MODE_DPMS_OFF) {
+ temp = I915_READ(intel_sdvo->sdvo_reg);
+ if ((temp & SDVO_ENABLE) != 0) {
+ intel_sdvo_write_sdvox(intel_sdvo, temp & ~SDVO_ENABLE);
+ }
+ }
+ } else {
+ bool input1, input2;
+ int i;
+ u8 status;
+
+ temp = I915_READ(intel_sdvo->sdvo_reg);
+ if ((temp & SDVO_ENABLE) == 0)
+ intel_sdvo_write_sdvox(intel_sdvo, temp | SDVO_ENABLE);
+ for (i = 0; i < 2; i++)
+ intel_wait_for_vblank(dev, intel_crtc->pipe);
+
+ status = intel_sdvo_get_trained_inputs(intel_sdvo, &input1, &input2);
+ /* Warn if the device reported failure to sync.
+ * A lot of SDVO devices fail to notify of sync, but it's
+ * a given it the status is a success, we succeeded.
+ */
+ if (status == SDVO_CMD_STATUS_SUCCESS && !input1) {
+ DRM_DEBUG_KMS("First %s output reported failure to "
+ "sync\n", SDVO_NAME(intel_sdvo));
+ }
+
+ if (0)
+ intel_sdvo_set_encoder_power_state(intel_sdvo, mode);
+ intel_sdvo_set_active_outputs(intel_sdvo, intel_sdvo->attached_output);
+ }
+ return;
+}
+
+static int intel_sdvo_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
+
+ if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
+ return MODE_NO_DBLESCAN;
+
+ if (intel_sdvo->pixel_clock_min > mode->clock)
+ return MODE_CLOCK_LOW;
+
+ if (intel_sdvo->pixel_clock_max < mode->clock)
+ return MODE_CLOCK_HIGH;
+
+ if (intel_sdvo->is_lvds) {
+ if (mode->hdisplay > intel_sdvo->sdvo_lvds_fixed_mode->hdisplay)
+ return MODE_PANEL;
+
+ if (mode->vdisplay > intel_sdvo->sdvo_lvds_fixed_mode->vdisplay)
+ return MODE_PANEL;
+ }
+
+ return MODE_OK;
+}
+
+static bool intel_sdvo_get_capabilities(struct intel_sdvo *intel_sdvo, struct intel_sdvo_caps *caps)
+{
+ CTASSERT(sizeof(*caps) == 8);
+ if (!intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_DEVICE_CAPS,
+ caps, sizeof(*caps)))
+ return false;
+
+ DRM_DEBUG_KMS("SDVO capabilities:\n"
+ " vendor_id: %d\n"
+ " device_id: %d\n"
+ " device_rev_id: %d\n"
+ " sdvo_version_major: %d\n"
+ " sdvo_version_minor: %d\n"
+ " sdvo_inputs_mask: %d\n"
+ " smooth_scaling: %d\n"
+ " sharp_scaling: %d\n"
+ " up_scaling: %d\n"
+ " down_scaling: %d\n"
+ " stall_support: %d\n"
+ " output_flags: %d\n",
+ caps->vendor_id,
+ caps->device_id,
+ caps->device_rev_id,
+ caps->sdvo_version_major,
+ caps->sdvo_version_minor,
+ caps->sdvo_inputs_mask,
+ caps->smooth_scaling,
+ caps->sharp_scaling,
+ caps->up_scaling,
+ caps->down_scaling,
+ caps->stall_support,
+ caps->output_flags);
+
+ return true;
+}
+
+static int intel_sdvo_supports_hotplug(struct intel_sdvo *intel_sdvo)
+{
+ struct drm_device *dev = intel_sdvo->base.base.dev;
+ u8 response[2];
+
+ /* HW Erratum: SDVO Hotplug is broken on all i945G chips, there's noise
+ * on the line. */
+ if (IS_I945G(dev) || IS_I945GM(dev))
+ return false;
+
+ return intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT,
+ &response, 2) && response[0];
+}
+
+static void intel_sdvo_enable_hotplug(struct intel_encoder *encoder)
+{
+ struct intel_sdvo *intel_sdvo = to_intel_sdvo(&encoder->base);
+
+ intel_sdvo_write_cmd(intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG,
+ &intel_sdvo->hotplug_active, 2);
+}
+
+static bool
+intel_sdvo_multifunc_encoder(struct intel_sdvo *intel_sdvo)
+{
+ /* Is there more than one type of output? */
+ return bitcount16(intel_sdvo->caps.output_flags) > 1;
+}
+
+static struct edid *
+intel_sdvo_get_edid(struct drm_connector *connector)
+{
+ struct intel_sdvo *sdvo = intel_attached_sdvo(connector);
+ return drm_get_edid(connector, sdvo->ddc);
+}
+
+/* Mac mini hack -- use the same DDC as the analog connector */
+static struct edid *
+intel_sdvo_get_analog_edid(struct drm_connector *connector)
+{
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+
+ return drm_get_edid(connector,
+ dev_priv->gmbus[dev_priv->crt_ddc_pin]);
+}
+
+static enum drm_connector_status
+intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
+{
+ struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
+ enum drm_connector_status status;
+ struct edid *edid;
+
+ edid = intel_sdvo_get_edid(connector);
+
+ if (edid == NULL && intel_sdvo_multifunc_encoder(intel_sdvo)) {
+ u8 ddc, saved_ddc = intel_sdvo->ddc_bus;
+
+ /*
+ * Don't use the 1 as the argument of DDC bus switch to get
+ * the EDID. It is used for SDVO SPD ROM.
+ */
+ for (ddc = intel_sdvo->ddc_bus >> 1; ddc > 1; ddc >>= 1) {
+ intel_sdvo->ddc_bus = ddc;
+ edid = intel_sdvo_get_edid(connector);
+ if (edid)
+ break;
+ }
+ /*
+ * If we found the EDID on the other bus,
+ * assume that is the correct DDC bus.
+ */
+ if (edid == NULL)
+ intel_sdvo->ddc_bus = saved_ddc;
+ }
+
+ /*
+ * When there is no edid and no monitor is connected with VGA
+ * port, try to use the CRT ddc to read the EDID for DVI-connector.
+ */
+ if (edid == NULL)
+ edid = intel_sdvo_get_analog_edid(connector);
+
+ status = connector_status_unknown;
+ if (edid != NULL) {
+ /* DDC bus is shared, match EDID to connector type */
+ if (edid->input & DRM_EDID_INPUT_DIGITAL) {
+ status = connector_status_connected;
+ if (intel_sdvo->is_hdmi) {
+ intel_sdvo->has_hdmi_monitor = drm_detect_hdmi_monitor(edid);
+ intel_sdvo->has_hdmi_audio = drm_detect_monitor_audio(edid);
+ }
+ } else
+ status = connector_status_disconnected;
+ connector->display_info.raw_edid = NULL;
+ free(edid, DRM_MEM_KMS);
+ }
+
+ if (status == connector_status_connected) {
+ struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
+ if (intel_sdvo_connector->force_audio != HDMI_AUDIO_AUTO)
+ intel_sdvo->has_hdmi_audio = (intel_sdvo_connector->force_audio == HDMI_AUDIO_ON);
+ }
+
+ return status;
+}
+
+static bool
+intel_sdvo_connector_matches_edid(struct intel_sdvo_connector *sdvo,
+ struct edid *edid)
+{
+ bool monitor_is_digital = !!(edid->input & DRM_EDID_INPUT_DIGITAL);
+ bool connector_is_digital = !!IS_DIGITAL(sdvo);
+
+ DRM_DEBUG_KMS("connector_is_digital? %d, monitor_is_digital? %d\n",
+ connector_is_digital, monitor_is_digital);
+ return connector_is_digital == monitor_is_digital;
+}
+
+static enum drm_connector_status
+intel_sdvo_detect(struct drm_connector *connector, bool force)
+{
+ uint16_t response;
+ struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
+ struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
+ enum drm_connector_status ret;
+
+ if (!intel_sdvo_write_cmd(intel_sdvo,
+ SDVO_CMD_GET_ATTACHED_DISPLAYS, NULL, 0))
+ return connector_status_unknown;
+
+ /* add 30ms delay when the output type might be TV */
+ if (intel_sdvo->caps.output_flags &
+ (SDVO_OUTPUT_SVID0 | SDVO_OUTPUT_CVBS0))
+ drm_msleep(30, "915svo");
+
+ if (!intel_sdvo_read_response(intel_sdvo, &response, 2))
+ return connector_status_unknown;
+
+ DRM_DEBUG_KMS("SDVO response %d %d [%x]\n",
+ response & 0xff, response >> 8,
+ intel_sdvo_connector->output_flag);
+
+ if (response == 0)
+ return connector_status_disconnected;
+
+ intel_sdvo->attached_output = response;
+
+ intel_sdvo->has_hdmi_monitor = false;
+ intel_sdvo->has_hdmi_audio = false;
+
+ if ((intel_sdvo_connector->output_flag & response) == 0)
+ ret = connector_status_disconnected;
+ else if (IS_TMDS(intel_sdvo_connector))
+ ret = intel_sdvo_tmds_sink_detect(connector);
+ else {
+ struct edid *edid;
+
+ /* if we have an edid check it matches the connection */
+ edid = intel_sdvo_get_edid(connector);
+ if (edid == NULL)
+ edid = intel_sdvo_get_analog_edid(connector);
+ if (edid != NULL) {
+ if (intel_sdvo_connector_matches_edid(intel_sdvo_connector,
+ edid))
+ ret = connector_status_connected;
+ else
+ ret = connector_status_disconnected;
+
+ connector->display_info.raw_edid = NULL;
+ free(edid, DRM_MEM_KMS);
+ } else
+ ret = connector_status_connected;
+ }
+
+ /* May update encoder flag for like clock for SDVO TV, etc.*/
+ if (ret == connector_status_connected) {
+ intel_sdvo->is_tv = false;
+ intel_sdvo->is_lvds = false;
+ intel_sdvo->base.needs_tv_clock = false;
+
+ if (response & SDVO_TV_MASK) {
+ intel_sdvo->is_tv = true;
+ intel_sdvo->base.needs_tv_clock = true;
+ }
+ if (response & SDVO_LVDS_MASK)
+ intel_sdvo->is_lvds = intel_sdvo->sdvo_lvds_fixed_mode != NULL;
+ }
+
+ return ret;
+}
+
+static void intel_sdvo_get_ddc_modes(struct drm_connector *connector)
+{
+ struct edid *edid;
+
+ /* set the bus switch and get the modes */
+ edid = intel_sdvo_get_edid(connector);
+
+ /*
+ * Mac mini hack. On this device, the DVI-I connector shares one DDC
+ * link between analog and digital outputs. So, if the regular SDVO
+ * DDC fails, check to see if the analog output is disconnected, in
+ * which case we'll look there for the digital DDC data.
+ */
+ if (edid == NULL)
+ edid = intel_sdvo_get_analog_edid(connector);
+
+ if (edid != NULL) {
+ if (intel_sdvo_connector_matches_edid(to_intel_sdvo_connector(connector),
+ edid)) {
+ drm_mode_connector_update_edid_property(connector, edid);
+ drm_add_edid_modes(connector, edid);
+ }
+
+ connector->display_info.raw_edid = NULL;
+ free(edid, DRM_MEM_KMS);
+ }
+}
+
+/*
+ * Set of SDVO TV modes.
+ * Note! This is in reply order (see loop in get_tv_modes).
+ * XXX: all 60Hz refresh?
+ */
+static const struct drm_display_mode sdvo_tv_modes[] = {
+ { DRM_MODE("320x200", DRM_MODE_TYPE_DRIVER, 5815, 320, 321, 384,
+ 416, 0, 200, 201, 232, 233, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("320x240", DRM_MODE_TYPE_DRIVER, 6814, 320, 321, 384,
+ 416, 0, 240, 241, 272, 273, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("400x300", DRM_MODE_TYPE_DRIVER, 9910, 400, 401, 464,
+ 496, 0, 300, 301, 332, 333, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("640x350", DRM_MODE_TYPE_DRIVER, 16913, 640, 641, 704,
+ 736, 0, 350, 351, 382, 383, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("640x400", DRM_MODE_TYPE_DRIVER, 19121, 640, 641, 704,
+ 736, 0, 400, 401, 432, 433, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 22654, 640, 641, 704,
+ 736, 0, 480, 481, 512, 513, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("704x480", DRM_MODE_TYPE_DRIVER, 24624, 704, 705, 768,
+ 800, 0, 480, 481, 512, 513, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("704x576", DRM_MODE_TYPE_DRIVER, 29232, 704, 705, 768,
+ 800, 0, 576, 577, 608, 609, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("720x350", DRM_MODE_TYPE_DRIVER, 18751, 720, 721, 784,
+ 816, 0, 350, 351, 382, 383, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 21199, 720, 721, 784,
+ 816, 0, 400, 401, 432, 433, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 25116, 720, 721, 784,
+ 816, 0, 480, 481, 512, 513, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("720x540", DRM_MODE_TYPE_DRIVER, 28054, 720, 721, 784,
+ 816, 0, 540, 541, 572, 573, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 29816, 720, 721, 784,
+ 816, 0, 576, 577, 608, 609, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("768x576", DRM_MODE_TYPE_DRIVER, 31570, 768, 769, 832,
+ 864, 0, 576, 577, 608, 609, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 34030, 800, 801, 864,
+ 896, 0, 600, 601, 632, 633, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("832x624", DRM_MODE_TYPE_DRIVER, 36581, 832, 833, 896,
+ 928, 0, 624, 625, 656, 657, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("920x766", DRM_MODE_TYPE_DRIVER, 48707, 920, 921, 984,
+ 1016, 0, 766, 767, 798, 799, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 53827, 1024, 1025, 1088,
+ 1120, 0, 768, 769, 800, 801, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+ { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 87265, 1280, 1281, 1344,
+ 1376, 0, 1024, 1025, 1056, 1057, 0,
+ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+};
+
+static void intel_sdvo_get_tv_modes(struct drm_connector *connector)
+{
+ struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
+ struct intel_sdvo_sdtv_resolution_request tv_res;
+ uint32_t reply = 0, format_map = 0;
+ int i;
+
+ /* Read the list of supported input resolutions for the selected TV
+ * format.
+ */
+ format_map = 1 << intel_sdvo->tv_format_index;
+ memcpy(&tv_res, &format_map,
+ min(sizeof(format_map), sizeof(struct intel_sdvo_sdtv_resolution_request)));
+
+ if (!intel_sdvo_set_target_output(intel_sdvo, intel_sdvo->attached_output))
+ return;
+
+ CTASSERT(sizeof(tv_res) == 3);
+ if (!intel_sdvo_write_cmd(intel_sdvo,
+ SDVO_CMD_GET_SDTV_RESOLUTION_SUPPORT,
+ &tv_res, sizeof(tv_res)))
+ return;
+ if (!intel_sdvo_read_response(intel_sdvo, &reply, 3))
+ return;
+
+ for (i = 0; i < DRM_ARRAY_SIZE(sdvo_tv_modes); i++)
+ if (reply & (1 << i)) {
+ struct drm_display_mode *nmode;
+ nmode = drm_mode_duplicate(connector->dev,
+ &sdvo_tv_modes[i]);
+ if (nmode)
+ drm_mode_probed_add(connector, nmode);
+ }
+}
+
+static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)
+{
+ struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+ struct drm_display_mode *newmode;
+
+ /*
+ * Attempt to get the mode list from DDC.
+ * Assume that the preferred modes are
+ * arranged in priority order.
+ */
+ intel_ddc_get_modes(connector, intel_sdvo->i2c);
+ if (!list_empty(&connector->probed_modes))
+ goto end;
+
+ /* Fetch modes from VBT */
+ if (dev_priv->sdvo_lvds_vbt_mode != NULL) {
+ newmode = drm_mode_duplicate(connector->dev,
+ dev_priv->sdvo_lvds_vbt_mode);
+ if (newmode != NULL) {
+ /* Guarantee the mode is preferred */
+ newmode->type = (DRM_MODE_TYPE_PREFERRED |
+ DRM_MODE_TYPE_DRIVER);
+ drm_mode_probed_add(connector, newmode);
+ }
+ }
+
+end:
+ list_for_each_entry(newmode, &connector->probed_modes, head) {
+ if (newmode->type & DRM_MODE_TYPE_PREFERRED) {
+ intel_sdvo->sdvo_lvds_fixed_mode =
+ drm_mode_duplicate(connector->dev, newmode);
+
+ drm_mode_set_crtcinfo(intel_sdvo->sdvo_lvds_fixed_mode,
+ 0);
+
+ intel_sdvo->is_lvds = true;
+ break;
+ }
+ }
+
+}
+
+static int intel_sdvo_get_modes(struct drm_connector *connector)
+{
+ struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
+
+ if (IS_TV(intel_sdvo_connector))
+ intel_sdvo_get_tv_modes(connector);
+ else if (IS_LVDS(intel_sdvo_connector))
+ intel_sdvo_get_lvds_modes(connector);
+ else
+ intel_sdvo_get_ddc_modes(connector);
+
+ return !list_empty(&connector->probed_modes);
+}
+
+static void
+intel_sdvo_destroy_enhance_property(struct drm_connector *connector)
+{
+ struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
+ struct drm_device *dev = connector->dev;
+
+ if (intel_sdvo_connector->left)
+ drm_property_destroy(dev, intel_sdvo_connector->left);
+ if (intel_sdvo_connector->right)
+ drm_property_destroy(dev, intel_sdvo_connector->right);
+ if (intel_sdvo_connector->top)
+ drm_property_destroy(dev, intel_sdvo_connector->top);
+ if (intel_sdvo_connector->bottom)
+ drm_property_destroy(dev, intel_sdvo_connector->bottom);
+ if (intel_sdvo_connector->hpos)
+ drm_property_destroy(dev, intel_sdvo_connector->hpos);
+ if (intel_sdvo_connector->vpos)
+ drm_property_destroy(dev, intel_sdvo_connector->vpos);
+ if (intel_sdvo_connector->saturation)
+ drm_property_destroy(dev, intel_sdvo_connector->saturation);
+ if (intel_sdvo_connector->contrast)
+ drm_property_destroy(dev, intel_sdvo_connector->contrast);
+ if (intel_sdvo_connector->hue)
+ drm_property_destroy(dev, intel_sdvo_connector->hue);
+ if (intel_sdvo_connector->sharpness)
+ drm_property_destroy(dev, intel_sdvo_connector->sharpness);
+ if (intel_sdvo_connector->flicker_filter)
+ drm_property_destroy(dev, intel_sdvo_connector->flicker_filter);
+ if (intel_sdvo_connector->flicker_filter_2d)
+ drm_property_destroy(dev, intel_sdvo_connector->flicker_filter_2d);
+ if (intel_sdvo_connector->flicker_filter_adaptive)
+ drm_property_destroy(dev, intel_sdvo_connector->flicker_filter_adaptive);
+ if (intel_sdvo_connector->tv_luma_filter)
+ drm_property_destroy(dev, intel_sdvo_connector->tv_luma_filter);
+ if (intel_sdvo_connector->tv_chroma_filter)
+ drm_property_destroy(dev, intel_sdvo_connector->tv_chroma_filter);
+ if (intel_sdvo_connector->dot_crawl)
+ drm_property_destroy(dev, intel_sdvo_connector->dot_crawl);
+ if (intel_sdvo_connector->brightness)
+ drm_property_destroy(dev, intel_sdvo_connector->brightness);
+}
+
+static void intel_sdvo_destroy(struct drm_connector *connector)
+{
+ struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
+
+ if (intel_sdvo_connector->tv_format)
+ drm_property_destroy(connector->dev,
+ intel_sdvo_connector->tv_format);
+
+ intel_sdvo_destroy_enhance_property(connector);
+#if 0
+ drm_sysfs_connector_remove(connector);
+#endif
+ drm_connector_cleanup(connector);
+ free(connector, DRM_MEM_KMS);
+}
+
+static bool intel_sdvo_detect_hdmi_audio(struct drm_connector *connector)
+{
+ struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
+ struct edid *edid;
+ bool has_audio = false;
+
+ if (!intel_sdvo->is_hdmi)
+ return false;
+
+ edid = intel_sdvo_get_edid(connector);
+ if (edid != NULL && edid->input & DRM_EDID_INPUT_DIGITAL)
+ has_audio = drm_detect_monitor_audio(edid);
+
+ return has_audio;
+}
+
+static int
+intel_sdvo_set_property(struct drm_connector *connector,
+ struct drm_property *property,
+ uint64_t val)
+{
+ struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
+ struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
+ struct drm_i915_private *dev_priv = connector->dev->dev_private;
+ uint16_t temp_value;
+ uint8_t cmd;
+ int ret;
+
+ ret = drm_connector_property_set_value(connector, property, val);
+ if (ret)
+ return ret;
+
+ if (property == dev_priv->force_audio_property) {
+ int i = val;
+ bool has_audio;
+
+ if (i == intel_sdvo_connector->force_audio)
+ return 0;
+
+ intel_sdvo_connector->force_audio = i;
+
+ if (i == HDMI_AUDIO_AUTO)
+ has_audio = intel_sdvo_detect_hdmi_audio(connector);
+ else
+ has_audio = (i == HDMI_AUDIO_ON);
+
+ if (has_audio == intel_sdvo->has_hdmi_audio)
+ return 0;
+
+ intel_sdvo->has_hdmi_audio = has_audio;
+ goto done;
+ }
+
+ if (property == dev_priv->broadcast_rgb_property) {
+ if (val == !!intel_sdvo->color_range)
+ return 0;
+
+ intel_sdvo->color_range = val ? SDVO_COLOR_RANGE_16_235 : 0;
+ goto done;
+ }
+
+#define CHECK_PROPERTY(name, NAME) \
+ if (intel_sdvo_connector->name == property) { \
+ if (intel_sdvo_connector->cur_##name == temp_value) return 0; \
+ if (intel_sdvo_connector->max_##name < temp_value) return -EINVAL; \
+ cmd = SDVO_CMD_SET_##NAME; \
+ intel_sdvo_connector->cur_##name = temp_value; \
+ goto set_value; \
+ }
+
+ if (property == intel_sdvo_connector->tv_format) {
+ if (val >= TV_FORMAT_NUM)
+ return -EINVAL;
+
+ if (intel_sdvo->tv_format_index ==
+ intel_sdvo_connector->tv_format_supported[val])
+ return 0;
+
+ intel_sdvo->tv_format_index = intel_sdvo_connector->tv_format_supported[val];
+ goto done;
+ } else if (IS_TV_OR_LVDS(intel_sdvo_connector)) {
+ temp_value = val;
+ if (intel_sdvo_connector->left == property) {
+ drm_connector_property_set_value(connector,
+ intel_sdvo_connector->right, val);
+ if (intel_sdvo_connector->left_margin == temp_value)
+ return 0;
+
+ intel_sdvo_connector->left_margin = temp_value;
+ intel_sdvo_connector->right_margin = temp_value;
+ temp_value = intel_sdvo_connector->max_hscan -
+ intel_sdvo_connector->left_margin;
+ cmd = SDVO_CMD_SET_OVERSCAN_H;
+ goto set_value;
+ } else if (intel_sdvo_connector->right == property) {
+ drm_connector_property_set_value(connector,
+ intel_sdvo_connector->left, val);
+ if (intel_sdvo_connector->right_margin == temp_value)
+ return 0;
+
+ intel_sdvo_connector->left_margin = temp_value;
+ intel_sdvo_connector->right_margin = temp_value;
+ temp_value = intel_sdvo_connector->max_hscan -
+ intel_sdvo_connector->left_margin;
+ cmd = SDVO_CMD_SET_OVERSCAN_H;
+ goto set_value;
+ } else if (intel_sdvo_connector->top == property) {
+ drm_connector_property_set_value(connector,
+ intel_sdvo_connector->bottom, val);
+ if (intel_sdvo_connector->top_margin == temp_value)
+ return 0;
+
+ intel_sdvo_connector->top_margin = temp_value;
+ intel_sdvo_connector->bottom_margin = temp_value;
+ temp_value = intel_sdvo_connector->max_vscan -
+ intel_sdvo_connector->top_margin;
+ cmd = SDVO_CMD_SET_OVERSCAN_V;
+ goto set_value;
+ } else if (intel_sdvo_connector->bottom == property) {
+ drm_connector_property_set_value(connector,
+ intel_sdvo_connector->top, val);
+ if (intel_sdvo_connector->bottom_margin == temp_value)
+ return 0;
+
+ intel_sdvo_connector->top_margin = temp_value;
+ intel_sdvo_connector->bottom_margin = temp_value;
+ temp_value = intel_sdvo_connector->max_vscan -
+ intel_sdvo_connector->top_margin;
+ cmd = SDVO_CMD_SET_OVERSCAN_V;
+ goto set_value;
+ }
+ CHECK_PROPERTY(hpos, HPOS)
+ CHECK_PROPERTY(vpos, VPOS)
+ CHECK_PROPERTY(saturation, SATURATION)
+ CHECK_PROPERTY(contrast, CONTRAST)
+ CHECK_PROPERTY(hue, HUE)
+ CHECK_PROPERTY(brightness, BRIGHTNESS)
+ CHECK_PROPERTY(sharpness, SHARPNESS)
+ CHECK_PROPERTY(flicker_filter, FLICKER_FILTER)
+ CHECK_PROPERTY(flicker_filter_2d, FLICKER_FILTER_2D)
+ CHECK_PROPERTY(flicker_filter_adaptive, FLICKER_FILTER_ADAPTIVE)
+ CHECK_PROPERTY(tv_chroma_filter, TV_CHROMA_FILTER)
+ CHECK_PROPERTY(tv_luma_filter, TV_LUMA_FILTER)
+ CHECK_PROPERTY(dot_crawl, DOT_CRAWL)
+ }
+
+ return -EINVAL; /* unknown property */
+
+set_value:
+ if (!intel_sdvo_set_value(intel_sdvo, cmd, &temp_value, 2))
+ return -EIO;
+
+
+done:
+ if (intel_sdvo->base.base.crtc) {
+ struct drm_crtc *crtc = intel_sdvo->base.base.crtc;
+ drm_crtc_helper_set_mode(crtc, &crtc->mode, crtc->x,
+ crtc->y, crtc->fb);
+ }
+
+ return 0;
+#undef CHECK_PROPERTY
+}
+
+static const struct drm_encoder_helper_funcs intel_sdvo_helper_funcs = {
+ .dpms = intel_sdvo_dpms,
+ .mode_fixup = intel_sdvo_mode_fixup,
+ .prepare = intel_encoder_prepare,
+ .mode_set = intel_sdvo_mode_set,
+ .commit = intel_encoder_commit,
+};
+
+static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
+ .dpms = drm_helper_connector_dpms,
+ .detect = intel_sdvo_detect,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+ .set_property = intel_sdvo_set_property,
+ .destroy = intel_sdvo_destroy,
+};
+
+static const struct drm_connector_helper_funcs intel_sdvo_connector_helper_funcs = {
+ .get_modes = intel_sdvo_get_modes,
+ .mode_valid = intel_sdvo_mode_valid,
+ .best_encoder = intel_best_encoder,
+};
+
+static void intel_sdvo_enc_destroy(struct drm_encoder *encoder)
+{
+ struct intel_sdvo *intel_sdvo = to_intel_sdvo(encoder);
+
+ if (intel_sdvo->sdvo_lvds_fixed_mode != NULL)
+ drm_mode_destroy(encoder->dev,
+ intel_sdvo->sdvo_lvds_fixed_mode);
+
+ device_delete_child(intel_sdvo->base.base.dev->device,
+ intel_sdvo->ddc_iic_bus);
+ intel_encoder_destroy(encoder);
+}
+
+static const struct drm_encoder_funcs intel_sdvo_enc_funcs = {
+ .destroy = intel_sdvo_enc_destroy,
+};
+
+static void
+intel_sdvo_guess_ddc_bus(struct intel_sdvo *sdvo)
+{
+ uint16_t mask = 0;
+ unsigned int num_bits;
+
+ /* Make a mask of outputs less than or equal to our own priority in the
+ * list.
+ */
+ switch (sdvo->controlled_output) {
+ case SDVO_OUTPUT_LVDS1:
+ mask |= SDVO_OUTPUT_LVDS1;
+ case SDVO_OUTPUT_LVDS0:
+ mask |= SDVO_OUTPUT_LVDS0;
+ case SDVO_OUTPUT_TMDS1:
+ mask |= SDVO_OUTPUT_TMDS1;
+ case SDVO_OUTPUT_TMDS0:
+ mask |= SDVO_OUTPUT_TMDS0;
+ case SDVO_OUTPUT_RGB1:
+ mask |= SDVO_OUTPUT_RGB1;
+ case SDVO_OUTPUT_RGB0:
+ mask |= SDVO_OUTPUT_RGB0;
+ break;
+ }
+
+ /* Count bits to find what number we are in the priority list. */
+ mask &= sdvo->caps.output_flags;
+ num_bits = bitcount16(mask);
+ /* If more than 3 outputs, default to DDC bus 3 for now. */
+ if (num_bits > 3)
+ num_bits = 3;
+
+ /* Corresponds to SDVO_CONTROL_BUS_DDCx */
+ sdvo->ddc_bus = 1 << num_bits;
+}
+
+/**
+ * Choose the appropriate DDC bus for control bus switch command for this
+ * SDVO output based on the controlled output.
+ *
+ * DDC bus number assignment is in a priority order of RGB outputs, then TMDS
+ * outputs, then LVDS outputs.
+ */
+static void
+intel_sdvo_select_ddc_bus(struct drm_i915_private *dev_priv,
+ struct intel_sdvo *sdvo, u32 reg)
+{
+ struct sdvo_device_mapping *mapping;
+
+ if (IS_SDVOB(reg))
+ mapping = &(dev_priv->sdvo_mappings[0]);
+ else
+ mapping = &(dev_priv->sdvo_mappings[1]);
+
+ if (mapping->initialized)
+ sdvo->ddc_bus = 1 << ((mapping->ddc_pin & 0xf0) >> 4);
+ else
+ intel_sdvo_guess_ddc_bus(sdvo);
+}
+
+static void
+intel_sdvo_select_i2c_bus(struct drm_i915_private *dev_priv,
+ struct intel_sdvo *sdvo, u32 reg)
+{
+ struct sdvo_device_mapping *mapping;
+ u8 pin;
+
+ if (IS_SDVOB(reg))
+ mapping = &dev_priv->sdvo_mappings[0];
+ else
+ mapping = &dev_priv->sdvo_mappings[1];
+
+ pin = GMBUS_PORT_DPB;
+ if (mapping->initialized)
+ pin = mapping->i2c_pin;
+
+ if (pin < GMBUS_NUM_PORTS) {
+ sdvo->i2c = dev_priv->gmbus[pin];
+ intel_gmbus_set_speed(sdvo->i2c, GMBUS_RATE_1MHZ);
+ intel_gmbus_force_bit(sdvo->i2c, true);
+ } else {
+ sdvo->i2c = dev_priv->gmbus[GMBUS_PORT_DPB];
+ }
+}
+
+static bool
+intel_sdvo_is_hdmi_connector(struct intel_sdvo *intel_sdvo, int device)
+{
+ return intel_sdvo_check_supp_encode(intel_sdvo);
+}
+
+static u8
+intel_sdvo_get_slave_addr(struct drm_device *dev, int sdvo_reg)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct sdvo_device_mapping *my_mapping, *other_mapping;
+
+ if (IS_SDVOB(sdvo_reg)) {
+ my_mapping = &dev_priv->sdvo_mappings[0];
+ other_mapping = &dev_priv->sdvo_mappings[1];
+ } else {
+ my_mapping = &dev_priv->sdvo_mappings[1];
+ other_mapping = &dev_priv->sdvo_mappings[0];
+ }
+
+ /* If the BIOS described our SDVO device, take advantage of it. */
+ if (my_mapping->slave_addr)
+ return my_mapping->slave_addr;
+
+ /* If the BIOS only described a different SDVO device, use the
+ * address that it isn't using.
+ */
+ if (other_mapping->slave_addr) {
+ if (other_mapping->slave_addr == 0x70)
+ return 0x72;
+ else
+ return 0x70;
+ }
+
+ /* No SDVO device info is found for another DVO port,
+ * so use mapping assumption we had before BIOS parsing.
+ */
+ if (IS_SDVOB(sdvo_reg))
+ return 0x70;
+ else
+ return 0x72;
+}
+
+static void
+intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
+ struct intel_sdvo *encoder)
+{
+ drm_connector_init(encoder->base.base.dev,
+ &connector->base.base,
+ &intel_sdvo_connector_funcs,
+ connector->base.base.connector_type);
+
+ drm_connector_helper_add(&connector->base.base,
+ &intel_sdvo_connector_helper_funcs);
+
+ connector->base.base.interlace_allowed = 1;
+ connector->base.base.doublescan_allowed = 0;
+ connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB;
+
+ intel_connector_attach_encoder(&connector->base, &encoder->base);
+#if 0
+ drm_sysfs_connector_add(&connector->base.base);
+#endif
+}
+
+static void
+intel_sdvo_add_hdmi_properties(struct intel_sdvo_connector *connector)
+{
+ struct drm_device *dev = connector->base.base.dev;
+
+ intel_attach_force_audio_property(&connector->base.base);
+ if (INTEL_INFO(dev)->gen >= 4 && IS_MOBILE(dev))
+ intel_attach_broadcast_rgb_property(&connector->base.base);
+}
+
+static bool
+intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
+{
+ struct drm_encoder *encoder = &intel_sdvo->base.base;
+ struct drm_connector *connector;
+ struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
+ struct intel_connector *intel_connector;
+ struct intel_sdvo_connector *intel_sdvo_connector;
+
+ intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector),
+ DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ if (device == 0) {
+ intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS0;
+ intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS0;
+ } else if (device == 1) {
+ intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS1;
+ intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS1;
+ }
+
+ intel_connector = &intel_sdvo_connector->base;
+ connector = &intel_connector->base;
+ if (intel_sdvo_supports_hotplug(intel_sdvo) & (1 << device)) {
+ connector->polled = DRM_CONNECTOR_POLL_HPD;
+ intel_sdvo->hotplug_active[0] |= 1 << device;
+ /* Some SDVO devices have one-shot hotplug interrupts.
+ * Ensure that they get re-enabled when an interrupt happens.
+ */
+ intel_encoder->hot_plug = intel_sdvo_enable_hotplug;
+ intel_sdvo_enable_hotplug(intel_encoder);
+ }
+ else
+ connector->polled = DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT;
+ encoder->encoder_type = DRM_MODE_ENCODER_TMDS;
+ connector->connector_type = DRM_MODE_CONNECTOR_DVID;
+
+ if (intel_sdvo_is_hdmi_connector(intel_sdvo, device)) {
+ connector->connector_type = DRM_MODE_CONNECTOR_HDMIA;
+ intel_sdvo->is_hdmi = true;
+ }
+ intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
+ (1 << INTEL_ANALOG_CLONE_BIT));
+
+ intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
+ if (intel_sdvo->is_hdmi)
+ intel_sdvo_add_hdmi_properties(intel_sdvo_connector);
+
+ return true;
+}
+
+static bool
+intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
+{
+ struct drm_encoder *encoder = &intel_sdvo->base.base;
+ struct drm_connector *connector;
+ struct intel_connector *intel_connector;
+ struct intel_sdvo_connector *intel_sdvo_connector;
+
+ intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector),
+ DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ if (!intel_sdvo_connector)
+ return false;
+
+ intel_connector = &intel_sdvo_connector->base;
+ connector = &intel_connector->base;
+ encoder->encoder_type = DRM_MODE_ENCODER_TVDAC;
+ connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO;
+
+ intel_sdvo->controlled_output |= type;
+ intel_sdvo_connector->output_flag = type;
+
+ intel_sdvo->is_tv = true;
+ intel_sdvo->base.needs_tv_clock = true;
+ intel_sdvo->base.clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT;
+
+ intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
+
+ if (!intel_sdvo_tv_create_property(intel_sdvo, intel_sdvo_connector, type))
+ goto err;
+
+ if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
+ goto err;
+
+ return true;
+
+err:
+ intel_sdvo_destroy(connector);
+ return false;
+}
+
+static bool
+intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device)
+{
+ struct drm_encoder *encoder = &intel_sdvo->base.base;
+ struct drm_connector *connector;
+ struct intel_connector *intel_connector;
+ struct intel_sdvo_connector *intel_sdvo_connector;
+
+ intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector),
+ DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ intel_connector = &intel_sdvo_connector->base;
+ connector = &intel_connector->base;
+ connector->polled = DRM_CONNECTOR_POLL_CONNECT;
+ encoder->encoder_type = DRM_MODE_ENCODER_DAC;
+ connector->connector_type = DRM_MODE_CONNECTOR_VGA;
+
+ if (device == 0) {
+ intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB0;
+ intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB0;
+ } else if (device == 1) {
+ intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB1;
+ intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1;
+ }
+
+ intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
+ (1 << INTEL_ANALOG_CLONE_BIT));
+
+ intel_sdvo_connector_init(intel_sdvo_connector,
+ intel_sdvo);
+ return true;
+}
+
+static bool
+intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
+{
+ struct drm_encoder *encoder = &intel_sdvo->base.base;
+ struct drm_connector *connector;
+ struct intel_connector *intel_connector;
+ struct intel_sdvo_connector *intel_sdvo_connector;
+
+ intel_sdvo_connector = malloc(sizeof(struct intel_sdvo_connector),
+ DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
+ intel_connector = &intel_sdvo_connector->base;
+ connector = &intel_connector->base;
+ encoder->encoder_type = DRM_MODE_ENCODER_LVDS;
+ connector->connector_type = DRM_MODE_CONNECTOR_LVDS;
+
+ if (device == 0) {
+ intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS0;
+ intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS0;
+ } else if (device == 1) {
+ intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS1;
+ intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1;
+ }
+
+ intel_sdvo->base.clone_mask = ((1 << INTEL_ANALOG_CLONE_BIT) |
+ (1 << INTEL_SDVO_LVDS_CLONE_BIT));
+
+ intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
+ if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
+ goto err;
+
+ return true;
+
+err:
+ intel_sdvo_destroy(connector);
+ return false;
+}
+
+static bool
+intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, uint16_t flags)
+{
+ intel_sdvo->is_tv = false;
+ intel_sdvo->base.needs_tv_clock = false;
+ intel_sdvo->is_lvds = false;
+
+ /* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/
+
+ if (flags & SDVO_OUTPUT_TMDS0)
+ if (!intel_sdvo_dvi_init(intel_sdvo, 0))
+ return false;
+
+ if ((flags & SDVO_TMDS_MASK) == SDVO_TMDS_MASK)
+ if (!intel_sdvo_dvi_init(intel_sdvo, 1))
+ return false;
+
+ /* TV has no XXX1 function block */
+ if (flags & SDVO_OUTPUT_SVID0)
+ if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_SVID0))
+ return false;
+
+ if (flags & SDVO_OUTPUT_CVBS0)
+ if (!intel_sdvo_tv_init(intel_sdvo, SDVO_OUTPUT_CVBS0))
+ return false;
+
+ if (flags & SDVO_OUTPUT_RGB0)
+ if (!intel_sdvo_analog_init(intel_sdvo, 0))
+ return false;
+
+ if ((flags & SDVO_RGB_MASK) == SDVO_RGB_MASK)
+ if (!intel_sdvo_analog_init(intel_sdvo, 1))
+ return false;
+
+ if (flags & SDVO_OUTPUT_LVDS0)
+ if (!intel_sdvo_lvds_init(intel_sdvo, 0))
+ return false;
+
+ if ((flags & SDVO_LVDS_MASK) == SDVO_LVDS_MASK)
+ if (!intel_sdvo_lvds_init(intel_sdvo, 1))
+ return false;
+
+ if ((flags & SDVO_OUTPUT_MASK) == 0) {
+ unsigned char bytes[2];
+
+ intel_sdvo->controlled_output = 0;
+ memcpy(bytes, &intel_sdvo->caps.output_flags, 2);
+ DRM_DEBUG_KMS("%s: Unknown SDVO output type (0x%02x%02x)\n",
+ SDVO_NAME(intel_sdvo),
+ bytes[0], bytes[1]);
+ return false;
+ }
+ intel_sdvo->base.crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
+
+ return true;
+}
+
+static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo,
+ struct intel_sdvo_connector *intel_sdvo_connector,
+ int type)
+{
+ struct drm_device *dev = intel_sdvo->base.base.dev;
+ struct intel_sdvo_tv_format format;
+ uint32_t format_map, i;
+
+ if (!intel_sdvo_set_target_output(intel_sdvo, type))
+ return false;
+
+ CTASSERT(sizeof(format) == 6);
+ if (!intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_SUPPORTED_TV_FORMATS,
+ &format, sizeof(format)))
+ return false;
+
+ memcpy(&format_map, &format, min(sizeof(format_map), sizeof(format)));
+
+ if (format_map == 0)
+ return false;
+
+ intel_sdvo_connector->format_supported_num = 0;
+ for (i = 0 ; i < TV_FORMAT_NUM; i++)
+ if (format_map & (1 << i))
+ intel_sdvo_connector->tv_format_supported[intel_sdvo_connector->format_supported_num++] = i;
+
+
+ intel_sdvo_connector->tv_format =
+ drm_property_create(dev, DRM_MODE_PROP_ENUM,
+ "mode", intel_sdvo_connector->format_supported_num);
+ if (!intel_sdvo_connector->tv_format)
+ return false;
+
+ for (i = 0; i < intel_sdvo_connector->format_supported_num; i++)
+ drm_property_add_enum(
+ intel_sdvo_connector->tv_format, i,
+ i, tv_format_names[intel_sdvo_connector->tv_format_supported[i]]);
+
+ intel_sdvo->tv_format_index = intel_sdvo_connector->tv_format_supported[0];
+ drm_connector_attach_property(&intel_sdvo_connector->base.base,
+ intel_sdvo_connector->tv_format, 0);
+ return true;
+
+}
+
+#define ENHANCEMENT(name, NAME) do { \
+ if (enhancements.name) { \
+ if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_MAX_##NAME, &data_value, 4) || \
+ !intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_##NAME, &response, 2)) \
+ return false; \
+ intel_sdvo_connector->max_##name = data_value[0]; \
+ intel_sdvo_connector->cur_##name = response; \
+ intel_sdvo_connector->name = \
+ drm_property_create_range(dev, 0, #name, 0, data_value[0]); \
+ if (!intel_sdvo_connector->name) return false; \
+ drm_connector_attach_property(connector, \
+ intel_sdvo_connector->name, \
+ intel_sdvo_connector->cur_##name); \
+ DRM_DEBUG_KMS(#name ": max %d, default %d, current %d\n", \
+ data_value[0], data_value[1], response); \
+ } \
+} while (0)
+
+static bool
+intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo,
+ struct intel_sdvo_connector *intel_sdvo_connector,
+ struct intel_sdvo_enhancements_reply enhancements)
+{
+ struct drm_device *dev = intel_sdvo->base.base.dev;
+ struct drm_connector *connector = &intel_sdvo_connector->base.base;
+ uint16_t response, data_value[2];
+
+ /* when horizontal overscan is supported, Add the left/right property */
+ if (enhancements.overscan_h) {
+ if (!intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_MAX_OVERSCAN_H,
+ &data_value, 4))
+ return false;
+
+ if (!intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_OVERSCAN_H,
+ &response, 2))
+ return false;
+
+ intel_sdvo_connector->max_hscan = data_value[0];
+ intel_sdvo_connector->left_margin = data_value[0] - response;
+ intel_sdvo_connector->right_margin = intel_sdvo_connector->left_margin;
+ intel_sdvo_connector->left =
+ drm_property_create_range(dev, 0, "left_margin", 0, data_value[0]);
+ if (!intel_sdvo_connector->left)
+ return false;
+
+ drm_connector_attach_property(connector,
+ intel_sdvo_connector->left,
+ intel_sdvo_connector->left_margin);
+
+ intel_sdvo_connector->right =
+ drm_property_create_range(dev, 0, "right_margin", 0, data_value[0]);
+ if (!intel_sdvo_connector->right)
+ return false;
+
+ drm_connector_attach_property(connector,
+ intel_sdvo_connector->right,
+ intel_sdvo_connector->right_margin);
+ DRM_DEBUG_KMS("h_overscan: max %d, "
+ "default %d, current %d\n",
+ data_value[0], data_value[1], response);
+ }
+
+ if (enhancements.overscan_v) {
+ if (!intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_MAX_OVERSCAN_V,
+ &data_value, 4))
+ return false;
+
+ if (!intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_OVERSCAN_V,
+ &response, 2))
+ return false;
+
+ intel_sdvo_connector->max_vscan = data_value[0];
+ intel_sdvo_connector->top_margin = data_value[0] - response;
+ intel_sdvo_connector->bottom_margin = intel_sdvo_connector->top_margin;
+ intel_sdvo_connector->top =
+ drm_property_create_range(dev, 0,
+ "top_margin", 0, data_value[0]);
+ if (!intel_sdvo_connector->top)
+ return false;
+
+ drm_connector_attach_property(connector,
+ intel_sdvo_connector->top,
+ intel_sdvo_connector->top_margin);
+
+ intel_sdvo_connector->bottom =
+ drm_property_create_range(dev, 0,
+ "bottom_margin", 0, data_value[0]);
+ if (!intel_sdvo_connector->bottom)
+ return false;
+
+ drm_connector_attach_property(connector,
+ intel_sdvo_connector->bottom,
+ intel_sdvo_connector->bottom_margin);
+ DRM_DEBUG_KMS("v_overscan: max %d, "
+ "default %d, current %d\n",
+ data_value[0], data_value[1], response);
+ }
+
+ ENHANCEMENT(hpos, HPOS);
+ ENHANCEMENT(vpos, VPOS);
+ ENHANCEMENT(saturation, SATURATION);
+ ENHANCEMENT(contrast, CONTRAST);
+ ENHANCEMENT(hue, HUE);
+ ENHANCEMENT(sharpness, SHARPNESS);
+ ENHANCEMENT(brightness, BRIGHTNESS);
+ ENHANCEMENT(flicker_filter, FLICKER_FILTER);
+ ENHANCEMENT(flicker_filter_adaptive, FLICKER_FILTER_ADAPTIVE);
+ ENHANCEMENT(flicker_filter_2d, FLICKER_FILTER_2D);
+ ENHANCEMENT(tv_chroma_filter, TV_CHROMA_FILTER);
+ ENHANCEMENT(tv_luma_filter, TV_LUMA_FILTER);
+
+ if (enhancements.dot_crawl) {
+ if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_DOT_CRAWL, &response, 2))
+ return false;
+
+ intel_sdvo_connector->max_dot_crawl = 1;
+ intel_sdvo_connector->cur_dot_crawl = response & 0x1;
+ intel_sdvo_connector->dot_crawl =
+ drm_property_create_range(dev, 0, "dot_crawl", 0, 1);
+ if (!intel_sdvo_connector->dot_crawl)
+ return false;
+
+ drm_connector_attach_property(connector,
+ intel_sdvo_connector->dot_crawl,
+ intel_sdvo_connector->cur_dot_crawl);
+ DRM_DEBUG_KMS("dot crawl: current %d\n", response);
+ }
+
+ return true;
+}
+
+static bool
+intel_sdvo_create_enhance_property_lvds(struct intel_sdvo *intel_sdvo,
+ struct intel_sdvo_connector *intel_sdvo_connector,
+ struct intel_sdvo_enhancements_reply enhancements)
+{
+ struct drm_device *dev = intel_sdvo->base.base.dev;
+ struct drm_connector *connector = &intel_sdvo_connector->base.base;
+ uint16_t response, data_value[2];
+
+ ENHANCEMENT(brightness, BRIGHTNESS);
+
+ return true;
+}
+#undef ENHANCEMENT
+
+static bool intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo,
+ struct intel_sdvo_connector *intel_sdvo_connector)
+{
+ union {
+ struct intel_sdvo_enhancements_reply reply;
+ uint16_t response;
+ } enhancements;
+
+ CTASSERT(sizeof(enhancements) == 2);
+
+ enhancements.response = 0;
+ intel_sdvo_get_value(intel_sdvo,
+ SDVO_CMD_GET_SUPPORTED_ENHANCEMENTS,
+ &enhancements, sizeof(enhancements));
+ if (enhancements.response == 0) {
+ DRM_DEBUG_KMS("No enhancement is supported\n");
+ return true;
+ }
+
+ if (IS_TV(intel_sdvo_connector))
+ return intel_sdvo_create_enhance_property_tv(intel_sdvo, intel_sdvo_connector, enhancements.reply);
+ else if (IS_LVDS(intel_sdvo_connector))
+ return intel_sdvo_create_enhance_property_lvds(intel_sdvo, intel_sdvo_connector, enhancements.reply);
+ else
+ return true;
+}
+
+struct intel_sdvo_ddc_proxy_sc {
+ struct intel_sdvo *intel_sdvo;
+ device_t port;
+};
+
+static int
+intel_sdvo_ddc_proxy_probe(device_t idev)
+{
+
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+intel_sdvo_ddc_proxy_attach(device_t idev)
+{
+ struct intel_sdvo_ddc_proxy_sc *sc;
+
+ sc = device_get_softc(idev);
+ sc->port = device_add_child(idev, "iicbus", -1);
+ if (sc->port == NULL)
+ return (ENXIO);
+ device_quiet(sc->port);
+ bus_generic_attach(idev);
+ return (0);
+}
+
+static int
+intel_sdvo_ddc_proxy_detach(device_t idev)
+{
+ struct intel_sdvo_ddc_proxy_sc *sc;
+ device_t port;
+
+ sc = device_get_softc(idev);
+ port = sc->port;
+ bus_generic_detach(idev);
+ if (port != NULL)
+ device_delete_child(idev, port);
+ return (0);
+}
+
+static int
+intel_sdvo_ddc_proxy_reset(device_t idev, u_char speed, u_char addr,
+ u_char *oldaddr)
+{
+ struct intel_sdvo_ddc_proxy_sc *sc;
+ struct intel_sdvo *sdvo;
+
+ sc = device_get_softc(idev);
+ sdvo = sc->intel_sdvo;
+
+ return (IICBUS_RESET(device_get_parent(sdvo->i2c), speed, addr,
+ oldaddr));
+}
+
+static int
+intel_sdvo_ddc_proxy_transfer(device_t idev, struct iic_msg *msgs, uint32_t num)
+{
+ struct intel_sdvo_ddc_proxy_sc *sc;
+ struct intel_sdvo *sdvo;
+
+ sc = device_get_softc(idev);
+ sdvo = sc->intel_sdvo;
+
+ if (!intel_sdvo_set_control_bus_switch(sdvo, sdvo->ddc_bus))
+ return (EIO);
+
+ return (iicbus_transfer(sdvo->i2c, msgs, num));
+}
+
+static bool
+intel_sdvo_init_ddc_proxy(struct intel_sdvo *sdvo, struct drm_device *dev,
+ int sdvo_reg)
+{
+ struct intel_sdvo_ddc_proxy_sc *sc;
+ int ret;
+
+ sdvo->ddc_iic_bus = device_add_child(dev->device,
+ "intel_sdvo_ddc_proxy", sdvo_reg);
+ if (sdvo->ddc_iic_bus == NULL) {
+ DRM_ERROR("cannot create ddc proxy bus %d\n", sdvo_reg);
+ return (false);
+ }
+ device_quiet(sdvo->ddc_iic_bus);
+ ret = device_probe_and_attach(sdvo->ddc_iic_bus);
+ if (ret != 0) {
+ DRM_ERROR("cannot attach proxy bus %d error %d\n",
+ sdvo_reg, ret);
+ device_delete_child(dev->device, sdvo->ddc_iic_bus);
+ return (false);
+ }
+ sc = device_get_softc(sdvo->ddc_iic_bus);
+ sc->intel_sdvo = sdvo;
+
+ sdvo->ddc = sc->port;
+ return (true);
+}
+
+static device_method_t intel_sdvo_ddc_proxy_methods[] = {
+ DEVMETHOD(device_probe, intel_sdvo_ddc_proxy_probe),
+ DEVMETHOD(device_attach, intel_sdvo_ddc_proxy_attach),
+ DEVMETHOD(device_detach, intel_sdvo_ddc_proxy_detach),
+ DEVMETHOD(iicbus_reset, intel_sdvo_ddc_proxy_reset),
+ DEVMETHOD(iicbus_transfer, intel_sdvo_ddc_proxy_transfer),
+ DEVMETHOD_END
+};
+static driver_t intel_sdvo_ddc_proxy_driver = {
+ "intel_sdvo_ddc_proxy",
+ intel_sdvo_ddc_proxy_methods,
+ sizeof(struct intel_sdvo_ddc_proxy_sc)
+};
+static devclass_t intel_sdvo_devclass;
+DRIVER_MODULE_ORDERED(intel_sdvo_ddc_proxy, drmn, intel_sdvo_ddc_proxy_driver,
+ intel_sdvo_devclass, 0, 0, SI_ORDER_FIRST);
+
+
+bool intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_encoder *intel_encoder;
+ struct intel_sdvo *intel_sdvo;
+ int i;
+
+ intel_sdvo = malloc(sizeof(struct intel_sdvo), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ intel_sdvo->sdvo_reg = sdvo_reg;
+ intel_sdvo->slave_addr = intel_sdvo_get_slave_addr(dev, sdvo_reg) >> 1;
+ intel_sdvo_select_i2c_bus(dev_priv, intel_sdvo, sdvo_reg);
+ if (!intel_sdvo_init_ddc_proxy(intel_sdvo, dev, sdvo_reg)) {
+ free(intel_sdvo, DRM_MEM_KMS);
+ return false;
+ }
+
+ /* encoder type will be decided later */
+ intel_encoder = &intel_sdvo->base;
+ intel_encoder->type = INTEL_OUTPUT_SDVO;
+ drm_encoder_init(dev, &intel_encoder->base, &intel_sdvo_enc_funcs, 0);
+
+ /* Read the regs to test if we can talk to the device */
+ for (i = 0; i < 0x40; i++) {
+ u8 byte;
+
+ if (!intel_sdvo_read_byte(intel_sdvo, i, &byte)) {
+ DRM_DEBUG_KMS("No SDVO device found on SDVO%c\n",
+ IS_SDVOB(sdvo_reg) ? 'B' : 'C');
+ goto err;
+ }
+ }
+
+ if (IS_SDVOB(sdvo_reg))
+ dev_priv->hotplug_supported_mask |= SDVOB_HOTPLUG_INT_STATUS;
+ else
+ dev_priv->hotplug_supported_mask |= SDVOC_HOTPLUG_INT_STATUS;
+
+ drm_encoder_helper_add(&intel_encoder->base, &intel_sdvo_helper_funcs);
+
+ /* In default case sdvo lvds is false */
+ if (!intel_sdvo_get_capabilities(intel_sdvo, &intel_sdvo->caps))
+ goto err;
+
+ /* Set up hotplug command - note paranoia about contents of reply.
+ * We assume that the hardware is in a sane state, and only touch
+ * the bits we think we understand.
+ */
+ intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_ACTIVE_HOT_PLUG,
+ &intel_sdvo->hotplug_active, 2);
+ intel_sdvo->hotplug_active[0] &= ~0x3;
+
+ if (!intel_sdvo_output_setup(intel_sdvo,
+ intel_sdvo->caps.output_flags)) {
+ DRM_DEBUG_KMS("SDVO output failed to setup on SDVO%c\n",
+ IS_SDVOB(sdvo_reg) ? 'B' : 'C');
+ goto err;
+ }
+
+ intel_sdvo_select_ddc_bus(dev_priv, intel_sdvo, sdvo_reg);
+
+ /* Set the input timing to the screen. Assume always input 0. */
+ if (!intel_sdvo_set_target_input(intel_sdvo))
+ goto err;
+
+ if (!intel_sdvo_get_input_pixel_clock_range(intel_sdvo,
+ &intel_sdvo->pixel_clock_min,
+ &intel_sdvo->pixel_clock_max))
+ goto err;
+
+ DRM_DEBUG_KMS("%s device VID/DID: %02X:%02X.%02X, "
+ "clock range %dMHz - %dMHz, "
+ "input 1: %c, input 2: %c, "
+ "output 1: %c, output 2: %c\n",
+ SDVO_NAME(intel_sdvo),
+ intel_sdvo->caps.vendor_id, intel_sdvo->caps.device_id,
+ intel_sdvo->caps.device_rev_id,
+ intel_sdvo->pixel_clock_min / 1000,
+ intel_sdvo->pixel_clock_max / 1000,
+ (intel_sdvo->caps.sdvo_inputs_mask & 0x1) ? 'Y' : 'N',
+ (intel_sdvo->caps.sdvo_inputs_mask & 0x2) ? 'Y' : 'N',
+ /* check currently supported outputs */
+ intel_sdvo->caps.output_flags &
+ (SDVO_OUTPUT_TMDS0 | SDVO_OUTPUT_RGB0) ? 'Y' : 'N',
+ intel_sdvo->caps.output_flags &
+ (SDVO_OUTPUT_TMDS1 | SDVO_OUTPUT_RGB1) ? 'Y' : 'N');
+ return true;
+
+err:
+ drm_encoder_cleanup(&intel_encoder->base);
+ free(intel_sdvo, DRM_MEM_KMS);
+
+ return false;
+}
diff --git a/sys/dev/drm2/i915/intel_sdvo_regs.h b/sys/dev/drm2/i915/intel_sdvo_regs.h
new file mode 100644
index 000000000000..093719785dd0
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_sdvo_regs.h
@@ -0,0 +1,725 @@
+/*
+ * Copyright © 2006-2007 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ *
+ * $FreeBSD$
+ */
+
+/**
+ * @file SDVO command definitions and structures.
+ */
+
+#define SDVO_OUTPUT_FIRST (0)
+#define SDVO_OUTPUT_TMDS0 (1 << 0)
+#define SDVO_OUTPUT_RGB0 (1 << 1)
+#define SDVO_OUTPUT_CVBS0 (1 << 2)
+#define SDVO_OUTPUT_SVID0 (1 << 3)
+#define SDVO_OUTPUT_YPRPB0 (1 << 4)
+#define SDVO_OUTPUT_SCART0 (1 << 5)
+#define SDVO_OUTPUT_LVDS0 (1 << 6)
+#define SDVO_OUTPUT_TMDS1 (1 << 8)
+#define SDVO_OUTPUT_RGB1 (1 << 9)
+#define SDVO_OUTPUT_CVBS1 (1 << 10)
+#define SDVO_OUTPUT_SVID1 (1 << 11)
+#define SDVO_OUTPUT_YPRPB1 (1 << 12)
+#define SDVO_OUTPUT_SCART1 (1 << 13)
+#define SDVO_OUTPUT_LVDS1 (1 << 14)
+#define SDVO_OUTPUT_LAST (14)
+
+struct intel_sdvo_caps {
+ u8 vendor_id;
+ u8 device_id;
+ u8 device_rev_id;
+ u8 sdvo_version_major;
+ u8 sdvo_version_minor;
+ unsigned int sdvo_inputs_mask:2;
+ unsigned int smooth_scaling:1;
+ unsigned int sharp_scaling:1;
+ unsigned int up_scaling:1;
+ unsigned int down_scaling:1;
+ unsigned int stall_support:1;
+ unsigned int pad:1;
+ u16 output_flags;
+} __attribute__((packed));
+
+/** This matches the EDID DTD structure, more or less */
+struct intel_sdvo_dtd {
+ struct {
+ u16 clock; /**< pixel clock, in 10kHz units */
+ u8 h_active; /**< lower 8 bits (pixels) */
+ u8 h_blank; /**< lower 8 bits (pixels) */
+ u8 h_high; /**< upper 4 bits each h_active, h_blank */
+ u8 v_active; /**< lower 8 bits (lines) */
+ u8 v_blank; /**< lower 8 bits (lines) */
+ u8 v_high; /**< upper 4 bits each v_active, v_blank */
+ } part1;
+
+ struct {
+ u8 h_sync_off; /**< lower 8 bits, from hblank start */
+ u8 h_sync_width; /**< lower 8 bits (pixels) */
+ /** lower 4 bits each vsync offset, vsync width */
+ u8 v_sync_off_width;
+ /**
+ * 2 high bits of hsync offset, 2 high bits of hsync width,
+ * bits 4-5 of vsync offset, and 2 high bits of vsync width.
+ */
+ u8 sync_off_width_high;
+ u8 dtd_flags;
+ u8 sdvo_flags;
+ /** bits 6-7 of vsync offset at bits 6-7 */
+ u8 v_sync_off_high;
+ u8 reserved;
+ } part2;
+} __attribute__((packed));
+
+struct intel_sdvo_pixel_clock_range {
+ u16 min; /**< pixel clock, in 10kHz units */
+ u16 max; /**< pixel clock, in 10kHz units */
+} __attribute__((packed));
+
+struct intel_sdvo_preferred_input_timing_args {
+ u16 clock;
+ u16 width;
+ u16 height;
+ u8 interlace:1;
+ u8 scaled:1;
+ u8 pad:6;
+} __attribute__((packed));
+
+/* I2C registers for SDVO */
+#define SDVO_I2C_ARG_0 0x07
+#define SDVO_I2C_ARG_1 0x06
+#define SDVO_I2C_ARG_2 0x05
+#define SDVO_I2C_ARG_3 0x04
+#define SDVO_I2C_ARG_4 0x03
+#define SDVO_I2C_ARG_5 0x02
+#define SDVO_I2C_ARG_6 0x01
+#define SDVO_I2C_ARG_7 0x00
+#define SDVO_I2C_OPCODE 0x08
+#define SDVO_I2C_CMD_STATUS 0x09
+#define SDVO_I2C_RETURN_0 0x0a
+#define SDVO_I2C_RETURN_1 0x0b
+#define SDVO_I2C_RETURN_2 0x0c
+#define SDVO_I2C_RETURN_3 0x0d
+#define SDVO_I2C_RETURN_4 0x0e
+#define SDVO_I2C_RETURN_5 0x0f
+#define SDVO_I2C_RETURN_6 0x10
+#define SDVO_I2C_RETURN_7 0x11
+#define SDVO_I2C_VENDOR_BEGIN 0x20
+
+/* Status results */
+#define SDVO_CMD_STATUS_POWER_ON 0x0
+#define SDVO_CMD_STATUS_SUCCESS 0x1
+#define SDVO_CMD_STATUS_NOTSUPP 0x2
+#define SDVO_CMD_STATUS_INVALID_ARG 0x3
+#define SDVO_CMD_STATUS_PENDING 0x4
+#define SDVO_CMD_STATUS_TARGET_NOT_SPECIFIED 0x5
+#define SDVO_CMD_STATUS_SCALING_NOT_SUPP 0x6
+
+/* SDVO commands, argument/result registers */
+
+#define SDVO_CMD_RESET 0x01
+
+/** Returns a struct intel_sdvo_caps */
+#define SDVO_CMD_GET_DEVICE_CAPS 0x02
+
+#define SDVO_CMD_GET_FIRMWARE_REV 0x86
+# define SDVO_DEVICE_FIRMWARE_MINOR SDVO_I2C_RETURN_0
+# define SDVO_DEVICE_FIRMWARE_MAJOR SDVO_I2C_RETURN_1
+# define SDVO_DEVICE_FIRMWARE_PATCH SDVO_I2C_RETURN_2
+
+/**
+ * Reports which inputs are trained (managed to sync).
+ *
+ * Devices must have trained within 2 vsyncs of a mode change.
+ */
+#define SDVO_CMD_GET_TRAINED_INPUTS 0x03
+struct intel_sdvo_get_trained_inputs_response {
+ unsigned int input0_trained:1;
+ unsigned int input1_trained:1;
+ unsigned int pad:6;
+} __attribute__((packed));
+
+/** Returns a struct intel_sdvo_output_flags of active outputs. */
+#define SDVO_CMD_GET_ACTIVE_OUTPUTS 0x04
+
+/**
+ * Sets the current set of active outputs.
+ *
+ * Takes a struct intel_sdvo_output_flags. Must be preceded by a SET_IN_OUT_MAP
+ * on multi-output devices.
+ */
+#define SDVO_CMD_SET_ACTIVE_OUTPUTS 0x05
+
+/**
+ * Returns the current mapping of SDVO inputs to outputs on the device.
+ *
+ * Returns two struct intel_sdvo_output_flags structures.
+ */
+#define SDVO_CMD_GET_IN_OUT_MAP 0x06
+struct intel_sdvo_in_out_map {
+ u16 in0, in1;
+};
+
+/**
+ * Sets the current mapping of SDVO inputs to outputs on the device.
+ *
+ * Takes two struct i380_sdvo_output_flags structures.
+ */
+#define SDVO_CMD_SET_IN_OUT_MAP 0x07
+
+/**
+ * Returns a struct intel_sdvo_output_flags of attached displays.
+ */
+#define SDVO_CMD_GET_ATTACHED_DISPLAYS 0x0b
+
+/**
+ * Returns a struct intel_sdvo_ouptut_flags of displays supporting hot plugging.
+ */
+#define SDVO_CMD_GET_HOT_PLUG_SUPPORT 0x0c
+
+/**
+ * Takes a struct intel_sdvo_output_flags.
+ */
+#define SDVO_CMD_SET_ACTIVE_HOT_PLUG 0x0d
+
+/**
+ * Returns a struct intel_sdvo_output_flags of displays with hot plug
+ * interrupts enabled.
+ */
+#define SDVO_CMD_GET_ACTIVE_HOT_PLUG 0x0e
+
+#define SDVO_CMD_GET_INTERRUPT_EVENT_SOURCE 0x0f
+struct intel_sdvo_get_interrupt_event_source_response {
+ u16 interrupt_status;
+ unsigned int ambient_light_interrupt:1;
+ unsigned int hdmi_audio_encrypt_change:1;
+ unsigned int pad:6;
+} __attribute__((packed));
+
+/**
+ * Selects which input is affected by future input commands.
+ *
+ * Commands affected include SET_INPUT_TIMINGS_PART[12],
+ * GET_INPUT_TIMINGS_PART[12], GET_PREFERRED_INPUT_TIMINGS_PART[12],
+ * GET_INPUT_PIXEL_CLOCK_RANGE, and CREATE_PREFERRED_INPUT_TIMINGS.
+ */
+#define SDVO_CMD_SET_TARGET_INPUT 0x10
+struct intel_sdvo_set_target_input_args {
+ unsigned int target_1:1;
+ unsigned int pad:7;
+} __attribute__((packed));
+
+/**
+ * Takes a struct intel_sdvo_output_flags of which outputs are targeted by
+ * future output commands.
+ *
+ * Affected commands inclue SET_OUTPUT_TIMINGS_PART[12],
+ * GET_OUTPUT_TIMINGS_PART[12], and GET_OUTPUT_PIXEL_CLOCK_RANGE.
+ */
+#define SDVO_CMD_SET_TARGET_OUTPUT 0x11
+
+#define SDVO_CMD_GET_INPUT_TIMINGS_PART1 0x12
+#define SDVO_CMD_GET_INPUT_TIMINGS_PART2 0x13
+#define SDVO_CMD_SET_INPUT_TIMINGS_PART1 0x14
+#define SDVO_CMD_SET_INPUT_TIMINGS_PART2 0x15
+#define SDVO_CMD_SET_OUTPUT_TIMINGS_PART1 0x16
+#define SDVO_CMD_SET_OUTPUT_TIMINGS_PART2 0x17
+#define SDVO_CMD_GET_OUTPUT_TIMINGS_PART1 0x18
+#define SDVO_CMD_GET_OUTPUT_TIMINGS_PART2 0x19
+/* Part 1 */
+# define SDVO_DTD_CLOCK_LOW SDVO_I2C_ARG_0
+# define SDVO_DTD_CLOCK_HIGH SDVO_I2C_ARG_1
+# define SDVO_DTD_H_ACTIVE SDVO_I2C_ARG_2
+# define SDVO_DTD_H_BLANK SDVO_I2C_ARG_3
+# define SDVO_DTD_H_HIGH SDVO_I2C_ARG_4
+# define SDVO_DTD_V_ACTIVE SDVO_I2C_ARG_5
+# define SDVO_DTD_V_BLANK SDVO_I2C_ARG_6
+# define SDVO_DTD_V_HIGH SDVO_I2C_ARG_7
+/* Part 2 */
+# define SDVO_DTD_HSYNC_OFF SDVO_I2C_ARG_0
+# define SDVO_DTD_HSYNC_WIDTH SDVO_I2C_ARG_1
+# define SDVO_DTD_VSYNC_OFF_WIDTH SDVO_I2C_ARG_2
+# define SDVO_DTD_SYNC_OFF_WIDTH_HIGH SDVO_I2C_ARG_3
+# define SDVO_DTD_DTD_FLAGS SDVO_I2C_ARG_4
+# define SDVO_DTD_DTD_FLAG_INTERLACED (1 << 7)
+# define SDVO_DTD_DTD_FLAG_STEREO_MASK (3 << 5)
+# define SDVO_DTD_DTD_FLAG_INPUT_MASK (3 << 3)
+# define SDVO_DTD_DTD_FLAG_SYNC_MASK (3 << 1)
+# define SDVO_DTD_SDVO_FLAS SDVO_I2C_ARG_5
+# define SDVO_DTD_SDVO_FLAG_STALL (1 << 7)
+# define SDVO_DTD_SDVO_FLAG_CENTERED (0 << 6)
+# define SDVO_DTD_SDVO_FLAG_UPPER_LEFT (1 << 6)
+# define SDVO_DTD_SDVO_FLAG_SCALING_MASK (3 << 4)
+# define SDVO_DTD_SDVO_FLAG_SCALING_NONE (0 << 4)
+# define SDVO_DTD_SDVO_FLAG_SCALING_SHARP (1 << 4)
+# define SDVO_DTD_SDVO_FLAG_SCALING_SMOOTH (2 << 4)
+# define SDVO_DTD_VSYNC_OFF_HIGH SDVO_I2C_ARG_6
+
+/**
+ * Generates a DTD based on the given width, height, and flags.
+ *
+ * This will be supported by any device supporting scaling or interlaced
+ * modes.
+ */
+#define SDVO_CMD_CREATE_PREFERRED_INPUT_TIMING 0x1a
+# define SDVO_PREFERRED_INPUT_TIMING_CLOCK_LOW SDVO_I2C_ARG_0
+# define SDVO_PREFERRED_INPUT_TIMING_CLOCK_HIGH SDVO_I2C_ARG_1
+# define SDVO_PREFERRED_INPUT_TIMING_WIDTH_LOW SDVO_I2C_ARG_2
+# define SDVO_PREFERRED_INPUT_TIMING_WIDTH_HIGH SDVO_I2C_ARG_3
+# define SDVO_PREFERRED_INPUT_TIMING_HEIGHT_LOW SDVO_I2C_ARG_4
+# define SDVO_PREFERRED_INPUT_TIMING_HEIGHT_HIGH SDVO_I2C_ARG_5
+# define SDVO_PREFERRED_INPUT_TIMING_FLAGS SDVO_I2C_ARG_6
+# define SDVO_PREFERRED_INPUT_TIMING_FLAGS_INTERLACED (1 << 0)
+# define SDVO_PREFERRED_INPUT_TIMING_FLAGS_SCALED (1 << 1)
+
+#define SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1 0x1b
+#define SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2 0x1c
+
+/** Returns a struct intel_sdvo_pixel_clock_range */
+#define SDVO_CMD_GET_INPUT_PIXEL_CLOCK_RANGE 0x1d
+/** Returns a struct intel_sdvo_pixel_clock_range */
+#define SDVO_CMD_GET_OUTPUT_PIXEL_CLOCK_RANGE 0x1e
+
+/** Returns a byte bitfield containing SDVO_CLOCK_RATE_MULT_* flags */
+#define SDVO_CMD_GET_SUPPORTED_CLOCK_RATE_MULTS 0x1f
+
+/** Returns a byte containing a SDVO_CLOCK_RATE_MULT_* flag */
+#define SDVO_CMD_GET_CLOCK_RATE_MULT 0x20
+/** Takes a byte containing a SDVO_CLOCK_RATE_MULT_* flag */
+#define SDVO_CMD_SET_CLOCK_RATE_MULT 0x21
+# define SDVO_CLOCK_RATE_MULT_1X (1 << 0)
+# define SDVO_CLOCK_RATE_MULT_2X (1 << 1)
+# define SDVO_CLOCK_RATE_MULT_4X (1 << 3)
+
+#define SDVO_CMD_GET_SUPPORTED_TV_FORMATS 0x27
+/** 6 bytes of bit flags for TV formats shared by all TV format functions */
+struct intel_sdvo_tv_format {
+ unsigned int ntsc_m:1;
+ unsigned int ntsc_j:1;
+ unsigned int ntsc_443:1;
+ unsigned int pal_b:1;
+ unsigned int pal_d:1;
+ unsigned int pal_g:1;
+ unsigned int pal_h:1;
+ unsigned int pal_i:1;
+
+ unsigned int pal_m:1;
+ unsigned int pal_n:1;
+ unsigned int pal_nc:1;
+ unsigned int pal_60:1;
+ unsigned int secam_b:1;
+ unsigned int secam_d:1;
+ unsigned int secam_g:1;
+ unsigned int secam_k:1;
+
+ unsigned int secam_k1:1;
+ unsigned int secam_l:1;
+ unsigned int secam_60:1;
+ unsigned int hdtv_std_smpte_240m_1080i_59:1;
+ unsigned int hdtv_std_smpte_240m_1080i_60:1;
+ unsigned int hdtv_std_smpte_260m_1080i_59:1;
+ unsigned int hdtv_std_smpte_260m_1080i_60:1;
+ unsigned int hdtv_std_smpte_274m_1080i_50:1;
+
+ unsigned int hdtv_std_smpte_274m_1080i_59:1;
+ unsigned int hdtv_std_smpte_274m_1080i_60:1;
+ unsigned int hdtv_std_smpte_274m_1080p_23:1;
+ unsigned int hdtv_std_smpte_274m_1080p_24:1;
+ unsigned int hdtv_std_smpte_274m_1080p_25:1;
+ unsigned int hdtv_std_smpte_274m_1080p_29:1;
+ unsigned int hdtv_std_smpte_274m_1080p_30:1;
+ unsigned int hdtv_std_smpte_274m_1080p_50:1;
+
+ unsigned int hdtv_std_smpte_274m_1080p_59:1;
+ unsigned int hdtv_std_smpte_274m_1080p_60:1;
+ unsigned int hdtv_std_smpte_295m_1080i_50:1;
+ unsigned int hdtv_std_smpte_295m_1080p_50:1;
+ unsigned int hdtv_std_smpte_296m_720p_59:1;
+ unsigned int hdtv_std_smpte_296m_720p_60:1;
+ unsigned int hdtv_std_smpte_296m_720p_50:1;
+ unsigned int hdtv_std_smpte_293m_480p_59:1;
+
+ unsigned int hdtv_std_smpte_170m_480i_59:1;
+ unsigned int hdtv_std_iturbt601_576i_50:1;
+ unsigned int hdtv_std_iturbt601_576p_50:1;
+ unsigned int hdtv_std_eia_7702a_480i_60:1;
+ unsigned int hdtv_std_eia_7702a_480p_60:1;
+ unsigned int pad:3;
+} __attribute__((packed));
+
+#define SDVO_CMD_GET_TV_FORMAT 0x28
+
+#define SDVO_CMD_SET_TV_FORMAT 0x29
+
+/** Returns the resolutiosn that can be used with the given TV format */
+#define SDVO_CMD_GET_SDTV_RESOLUTION_SUPPORT 0x83
+struct intel_sdvo_sdtv_resolution_request {
+ unsigned int ntsc_m:1;
+ unsigned int ntsc_j:1;
+ unsigned int ntsc_443:1;
+ unsigned int pal_b:1;
+ unsigned int pal_d:1;
+ unsigned int pal_g:1;
+ unsigned int pal_h:1;
+ unsigned int pal_i:1;
+
+ unsigned int pal_m:1;
+ unsigned int pal_n:1;
+ unsigned int pal_nc:1;
+ unsigned int pal_60:1;
+ unsigned int secam_b:1;
+ unsigned int secam_d:1;
+ unsigned int secam_g:1;
+ unsigned int secam_k:1;
+
+ unsigned int secam_k1:1;
+ unsigned int secam_l:1;
+ unsigned int secam_60:1;
+ unsigned int pad:5;
+} __attribute__((packed));
+
+struct intel_sdvo_sdtv_resolution_reply {
+ unsigned int res_320x200:1;
+ unsigned int res_320x240:1;
+ unsigned int res_400x300:1;
+ unsigned int res_640x350:1;
+ unsigned int res_640x400:1;
+ unsigned int res_640x480:1;
+ unsigned int res_704x480:1;
+ unsigned int res_704x576:1;
+
+ unsigned int res_720x350:1;
+ unsigned int res_720x400:1;
+ unsigned int res_720x480:1;
+ unsigned int res_720x540:1;
+ unsigned int res_720x576:1;
+ unsigned int res_768x576:1;
+ unsigned int res_800x600:1;
+ unsigned int res_832x624:1;
+
+ unsigned int res_920x766:1;
+ unsigned int res_1024x768:1;
+ unsigned int res_1280x1024:1;
+ unsigned int pad:5;
+} __attribute__((packed));
+
+/* Get supported resolution with squire pixel aspect ratio that can be
+ scaled for the requested HDTV format */
+#define SDVO_CMD_GET_SCALED_HDTV_RESOLUTION_SUPPORT 0x85
+
+struct intel_sdvo_hdtv_resolution_request {
+ unsigned int hdtv_std_smpte_240m_1080i_59:1;
+ unsigned int hdtv_std_smpte_240m_1080i_60:1;
+ unsigned int hdtv_std_smpte_260m_1080i_59:1;
+ unsigned int hdtv_std_smpte_260m_1080i_60:1;
+ unsigned int hdtv_std_smpte_274m_1080i_50:1;
+ unsigned int hdtv_std_smpte_274m_1080i_59:1;
+ unsigned int hdtv_std_smpte_274m_1080i_60:1;
+ unsigned int hdtv_std_smpte_274m_1080p_23:1;
+
+ unsigned int hdtv_std_smpte_274m_1080p_24:1;
+ unsigned int hdtv_std_smpte_274m_1080p_25:1;
+ unsigned int hdtv_std_smpte_274m_1080p_29:1;
+ unsigned int hdtv_std_smpte_274m_1080p_30:1;
+ unsigned int hdtv_std_smpte_274m_1080p_50:1;
+ unsigned int hdtv_std_smpte_274m_1080p_59:1;
+ unsigned int hdtv_std_smpte_274m_1080p_60:1;
+ unsigned int hdtv_std_smpte_295m_1080i_50:1;
+
+ unsigned int hdtv_std_smpte_295m_1080p_50:1;
+ unsigned int hdtv_std_smpte_296m_720p_59:1;
+ unsigned int hdtv_std_smpte_296m_720p_60:1;
+ unsigned int hdtv_std_smpte_296m_720p_50:1;
+ unsigned int hdtv_std_smpte_293m_480p_59:1;
+ unsigned int hdtv_std_smpte_170m_480i_59:1;
+ unsigned int hdtv_std_iturbt601_576i_50:1;
+ unsigned int hdtv_std_iturbt601_576p_50:1;
+
+ unsigned int hdtv_std_eia_7702a_480i_60:1;
+ unsigned int hdtv_std_eia_7702a_480p_60:1;
+ unsigned int pad:6;
+} __attribute__((packed));
+
+struct intel_sdvo_hdtv_resolution_reply {
+ unsigned int res_640x480:1;
+ unsigned int res_800x600:1;
+ unsigned int res_1024x768:1;
+ unsigned int res_1280x960:1;
+ unsigned int res_1400x1050:1;
+ unsigned int res_1600x1200:1;
+ unsigned int res_1920x1440:1;
+ unsigned int res_2048x1536:1;
+
+ unsigned int res_2560x1920:1;
+ unsigned int res_3200x2400:1;
+ unsigned int res_3840x2880:1;
+ unsigned int pad1:5;
+
+ unsigned int res_848x480:1;
+ unsigned int res_1064x600:1;
+ unsigned int res_1280x720:1;
+ unsigned int res_1360x768:1;
+ unsigned int res_1704x960:1;
+ unsigned int res_1864x1050:1;
+ unsigned int res_1920x1080:1;
+ unsigned int res_2128x1200:1;
+
+ unsigned int res_2560x1400:1;
+ unsigned int res_2728x1536:1;
+ unsigned int res_3408x1920:1;
+ unsigned int res_4264x2400:1;
+ unsigned int res_5120x2880:1;
+ unsigned int pad2:3;
+
+ unsigned int res_768x480:1;
+ unsigned int res_960x600:1;
+ unsigned int res_1152x720:1;
+ unsigned int res_1124x768:1;
+ unsigned int res_1536x960:1;
+ unsigned int res_1680x1050:1;
+ unsigned int res_1728x1080:1;
+ unsigned int res_1920x1200:1;
+
+ unsigned int res_2304x1440:1;
+ unsigned int res_2456x1536:1;
+ unsigned int res_3072x1920:1;
+ unsigned int res_3840x2400:1;
+ unsigned int res_4608x2880:1;
+ unsigned int pad3:3;
+
+ unsigned int res_1280x1024:1;
+ unsigned int pad4:7;
+
+ unsigned int res_1280x768:1;
+ unsigned int pad5:7;
+} __attribute__((packed));
+
+/* Get supported power state returns info for encoder and monitor, rely on
+ last SetTargetInput and SetTargetOutput calls */
+#define SDVO_CMD_GET_SUPPORTED_POWER_STATES 0x2a
+/* Get power state returns info for encoder and monitor, rely on last
+ SetTargetInput and SetTargetOutput calls */
+#define SDVO_CMD_GET_POWER_STATE 0x2b
+#define SDVO_CMD_GET_ENCODER_POWER_STATE 0x2b
+#define SDVO_CMD_SET_ENCODER_POWER_STATE 0x2c
+# define SDVO_ENCODER_STATE_ON (1 << 0)
+# define SDVO_ENCODER_STATE_STANDBY (1 << 1)
+# define SDVO_ENCODER_STATE_SUSPEND (1 << 2)
+# define SDVO_ENCODER_STATE_OFF (1 << 3)
+# define SDVO_MONITOR_STATE_ON (1 << 4)
+# define SDVO_MONITOR_STATE_STANDBY (1 << 5)
+# define SDVO_MONITOR_STATE_SUSPEND (1 << 6)
+# define SDVO_MONITOR_STATE_OFF (1 << 7)
+
+#define SDVO_CMD_GET_MAX_PANEL_POWER_SEQUENCING 0x2d
+#define SDVO_CMD_GET_PANEL_POWER_SEQUENCING 0x2e
+#define SDVO_CMD_SET_PANEL_POWER_SEQUENCING 0x2f
+/**
+ * The panel power sequencing parameters are in units of milliseconds.
+ * The high fields are bits 8:9 of the 10-bit values.
+ */
+struct sdvo_panel_power_sequencing {
+ u8 t0;
+ u8 t1;
+ u8 t2;
+ u8 t3;
+ u8 t4;
+
+ unsigned int t0_high:2;
+ unsigned int t1_high:2;
+ unsigned int t2_high:2;
+ unsigned int t3_high:2;
+
+ unsigned int t4_high:2;
+ unsigned int pad:6;
+} __attribute__((packed));
+
+#define SDVO_CMD_GET_MAX_BACKLIGHT_LEVEL 0x30
+struct sdvo_max_backlight_reply {
+ u8 max_value;
+ u8 default_value;
+} __attribute__((packed));
+
+#define SDVO_CMD_GET_BACKLIGHT_LEVEL 0x31
+#define SDVO_CMD_SET_BACKLIGHT_LEVEL 0x32
+
+#define SDVO_CMD_GET_AMBIENT_LIGHT 0x33
+struct sdvo_get_ambient_light_reply {
+ u16 trip_low;
+ u16 trip_high;
+ u16 value;
+} __attribute__((packed));
+#define SDVO_CMD_SET_AMBIENT_LIGHT 0x34
+struct sdvo_set_ambient_light_reply {
+ u16 trip_low;
+ u16 trip_high;
+ unsigned int enable:1;
+ unsigned int pad:7;
+} __attribute__((packed));
+
+/* Set display power state */
+#define SDVO_CMD_SET_DISPLAY_POWER_STATE 0x7d
+# define SDVO_DISPLAY_STATE_ON (1 << 0)
+# define SDVO_DISPLAY_STATE_STANDBY (1 << 1)
+# define SDVO_DISPLAY_STATE_SUSPEND (1 << 2)
+# define SDVO_DISPLAY_STATE_OFF (1 << 3)
+
+#define SDVO_CMD_GET_SUPPORTED_ENHANCEMENTS 0x84
+struct intel_sdvo_enhancements_reply {
+ unsigned int flicker_filter:1;
+ unsigned int flicker_filter_adaptive:1;
+ unsigned int flicker_filter_2d:1;
+ unsigned int saturation:1;
+ unsigned int hue:1;
+ unsigned int brightness:1;
+ unsigned int contrast:1;
+ unsigned int overscan_h:1;
+
+ unsigned int overscan_v:1;
+ unsigned int hpos:1;
+ unsigned int vpos:1;
+ unsigned int sharpness:1;
+ unsigned int dot_crawl:1;
+ unsigned int dither:1;
+ unsigned int tv_chroma_filter:1;
+ unsigned int tv_luma_filter:1;
+} __attribute__((packed));
+
+/* Picture enhancement limits below are dependent on the current TV format,
+ * and thus need to be queried and set after it.
+ */
+#define SDVO_CMD_GET_MAX_FLICKER_FILTER 0x4d
+#define SDVO_CMD_GET_MAX_FLICKER_FILTER_ADAPTIVE 0x7b
+#define SDVO_CMD_GET_MAX_FLICKER_FILTER_2D 0x52
+#define SDVO_CMD_GET_MAX_SATURATION 0x55
+#define SDVO_CMD_GET_MAX_HUE 0x58
+#define SDVO_CMD_GET_MAX_BRIGHTNESS 0x5b
+#define SDVO_CMD_GET_MAX_CONTRAST 0x5e
+#define SDVO_CMD_GET_MAX_OVERSCAN_H 0x61
+#define SDVO_CMD_GET_MAX_OVERSCAN_V 0x64
+#define SDVO_CMD_GET_MAX_HPOS 0x67
+#define SDVO_CMD_GET_MAX_VPOS 0x6a
+#define SDVO_CMD_GET_MAX_SHARPNESS 0x6d
+#define SDVO_CMD_GET_MAX_TV_CHROMA_FILTER 0x74
+#define SDVO_CMD_GET_MAX_TV_LUMA_FILTER 0x77
+struct intel_sdvo_enhancement_limits_reply {
+ u16 max_value;
+ u16 default_value;
+} __attribute__((packed));
+
+#define SDVO_CMD_GET_LVDS_PANEL_INFORMATION 0x7f
+#define SDVO_CMD_SET_LVDS_PANEL_INFORMATION 0x80
+# define SDVO_LVDS_COLOR_DEPTH_18 (0 << 0)
+# define SDVO_LVDS_COLOR_DEPTH_24 (1 << 0)
+# define SDVO_LVDS_CONNECTOR_SPWG (0 << 2)
+# define SDVO_LVDS_CONNECTOR_OPENLDI (1 << 2)
+# define SDVO_LVDS_SINGLE_CHANNEL (0 << 4)
+# define SDVO_LVDS_DUAL_CHANNEL (1 << 4)
+
+#define SDVO_CMD_GET_FLICKER_FILTER 0x4e
+#define SDVO_CMD_SET_FLICKER_FILTER 0x4f
+#define SDVO_CMD_GET_FLICKER_FILTER_ADAPTIVE 0x50
+#define SDVO_CMD_SET_FLICKER_FILTER_ADAPTIVE 0x51
+#define SDVO_CMD_GET_FLICKER_FILTER_2D 0x53
+#define SDVO_CMD_SET_FLICKER_FILTER_2D 0x54
+#define SDVO_CMD_GET_SATURATION 0x56
+#define SDVO_CMD_SET_SATURATION 0x57
+#define SDVO_CMD_GET_HUE 0x59
+#define SDVO_CMD_SET_HUE 0x5a
+#define SDVO_CMD_GET_BRIGHTNESS 0x5c
+#define SDVO_CMD_SET_BRIGHTNESS 0x5d
+#define SDVO_CMD_GET_CONTRAST 0x5f
+#define SDVO_CMD_SET_CONTRAST 0x60
+#define SDVO_CMD_GET_OVERSCAN_H 0x62
+#define SDVO_CMD_SET_OVERSCAN_H 0x63
+#define SDVO_CMD_GET_OVERSCAN_V 0x65
+#define SDVO_CMD_SET_OVERSCAN_V 0x66
+#define SDVO_CMD_GET_HPOS 0x68
+#define SDVO_CMD_SET_HPOS 0x69
+#define SDVO_CMD_GET_VPOS 0x6b
+#define SDVO_CMD_SET_VPOS 0x6c
+#define SDVO_CMD_GET_SHARPNESS 0x6e
+#define SDVO_CMD_SET_SHARPNESS 0x6f
+#define SDVO_CMD_GET_TV_CHROMA_FILTER 0x75
+#define SDVO_CMD_SET_TV_CHROMA_FILTER 0x76
+#define SDVO_CMD_GET_TV_LUMA_FILTER 0x78
+#define SDVO_CMD_SET_TV_LUMA_FILTER 0x79
+struct intel_sdvo_enhancements_arg {
+ u16 value;
+} __attribute__((packed));
+
+#define SDVO_CMD_GET_DOT_CRAWL 0x70
+#define SDVO_CMD_SET_DOT_CRAWL 0x71
+# define SDVO_DOT_CRAWL_ON (1 << 0)
+# define SDVO_DOT_CRAWL_DEFAULT_ON (1 << 1)
+
+#define SDVO_CMD_GET_DITHER 0x72
+#define SDVO_CMD_SET_DITHER 0x73
+# define SDVO_DITHER_ON (1 << 0)
+# define SDVO_DITHER_DEFAULT_ON (1 << 1)
+
+#define SDVO_CMD_SET_CONTROL_BUS_SWITCH 0x7a
+# define SDVO_CONTROL_BUS_PROM (1 << 0)
+# define SDVO_CONTROL_BUS_DDC1 (1 << 1)
+# define SDVO_CONTROL_BUS_DDC2 (1 << 2)
+# define SDVO_CONTROL_BUS_DDC3 (1 << 3)
+
+/* HDMI op codes */
+#define SDVO_CMD_GET_SUPP_ENCODE 0x9d
+#define SDVO_CMD_GET_ENCODE 0x9e
+#define SDVO_CMD_SET_ENCODE 0x9f
+ #define SDVO_ENCODE_DVI 0x0
+ #define SDVO_ENCODE_HDMI 0x1
+#define SDVO_CMD_SET_PIXEL_REPLI 0x8b
+#define SDVO_CMD_GET_PIXEL_REPLI 0x8c
+#define SDVO_CMD_GET_COLORIMETRY_CAP 0x8d
+#define SDVO_CMD_SET_COLORIMETRY 0x8e
+ #define SDVO_COLORIMETRY_RGB256 0x0
+ #define SDVO_COLORIMETRY_RGB220 0x1
+ #define SDVO_COLORIMETRY_YCrCb422 0x3
+ #define SDVO_COLORIMETRY_YCrCb444 0x4
+#define SDVO_CMD_GET_COLORIMETRY 0x8f
+#define SDVO_CMD_GET_AUDIO_ENCRYPT_PREFER 0x90
+#define SDVO_CMD_SET_AUDIO_STAT 0x91
+#define SDVO_CMD_GET_AUDIO_STAT 0x92
+#define SDVO_CMD_SET_HBUF_INDEX 0x93
+#define SDVO_CMD_GET_HBUF_INDEX 0x94
+#define SDVO_CMD_GET_HBUF_INFO 0x95
+#define SDVO_CMD_SET_HBUF_AV_SPLIT 0x96
+#define SDVO_CMD_GET_HBUF_AV_SPLIT 0x97
+#define SDVO_CMD_SET_HBUF_DATA 0x98
+#define SDVO_CMD_GET_HBUF_DATA 0x99
+#define SDVO_CMD_SET_HBUF_TXRATE 0x9a
+#define SDVO_CMD_GET_HBUF_TXRATE 0x9b
+ #define SDVO_HBUF_TX_DISABLED (0 << 6)
+ #define SDVO_HBUF_TX_ONCE (2 << 6)
+ #define SDVO_HBUF_TX_VSYNC (3 << 6)
+#define SDVO_CMD_GET_AUDIO_TX_INFO 0x9c
+#define SDVO_NEED_TO_STALL (1 << 7)
+
+struct intel_sdvo_encode {
+ u8 dvi_rev;
+ u8 hdmi_rev;
+} __attribute__ ((packed));
diff --git a/sys/dev/drm2/i915/intel_sprite.c b/sys/dev/drm2/i915/intel_sprite.c
new file mode 100644
index 000000000000..0737a5c6cf18
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_sprite.c
@@ -0,0 +1,669 @@
+/*
+ * Copyright © 2011 Intel Corporation
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Jesse Barnes <jbarnes@virtuousgeek.org>
+ *
+ * New plane/sprite handling.
+ *
+ * The older chips had a separate interface for programming plane related
+ * registers; newer ones are much simpler and we can use the new DRM plane
+ * support.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+#include <dev/drm2/drm_fourcc.h>
+
+static void
+ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
+ struct drm_i915_gem_object *obj, int crtc_x, int crtc_y,
+ unsigned int crtc_w, unsigned int crtc_h,
+ uint32_t x, uint32_t y,
+ uint32_t src_w, uint32_t src_h)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_plane *intel_plane = to_intel_plane(plane);
+ int pipe = intel_plane->pipe;
+ u32 sprctl, sprscale = 0;
+ int pixel_size;
+
+ sprctl = I915_READ(SPRCTL(pipe));
+
+ /* Mask out pixel format bits in case we change it */
+ sprctl &= ~SPRITE_PIXFORMAT_MASK;
+ sprctl &= ~SPRITE_RGB_ORDER_RGBX;
+ sprctl &= ~SPRITE_YUV_BYTE_ORDER_MASK;
+
+ switch (fb->pixel_format) {
+ case DRM_FORMAT_XBGR8888:
+ sprctl |= SPRITE_FORMAT_RGBX888;
+ pixel_size = 4;
+ break;
+ case DRM_FORMAT_XRGB8888:
+ sprctl |= SPRITE_FORMAT_RGBX888 | SPRITE_RGB_ORDER_RGBX;
+ pixel_size = 4;
+ break;
+ case DRM_FORMAT_YUYV:
+ sprctl |= SPRITE_FORMAT_YUV422 | SPRITE_YUV_ORDER_YUYV;
+ pixel_size = 2;
+ break;
+ case DRM_FORMAT_YVYU:
+ sprctl |= SPRITE_FORMAT_YUV422 | SPRITE_YUV_ORDER_YVYU;
+ pixel_size = 2;
+ break;
+ case DRM_FORMAT_UYVY:
+ sprctl |= SPRITE_FORMAT_YUV422 | SPRITE_YUV_ORDER_UYVY;
+ pixel_size = 2;
+ break;
+ case DRM_FORMAT_VYUY:
+ sprctl |= SPRITE_FORMAT_YUV422 | SPRITE_YUV_ORDER_VYUY;
+ pixel_size = 2;
+ break;
+ default:
+ DRM_DEBUG_DRIVER("bad pixel format, assuming RGBX888\n");
+ sprctl |= DVS_FORMAT_RGBX888;
+ pixel_size = 4;
+ break;
+ }
+
+ if (obj->tiling_mode != I915_TILING_NONE)
+ sprctl |= SPRITE_TILED;
+
+ /* must disable */
+ sprctl |= SPRITE_TRICKLE_FEED_DISABLE;
+ sprctl |= SPRITE_ENABLE;
+
+ /* Sizes are 0 based */
+ src_w--;
+ src_h--;
+ crtc_w--;
+ crtc_h--;
+
+ intel_update_sprite_watermarks(dev, pipe, crtc_w, pixel_size);
+
+ /*
+ * IVB workaround: must disable low power watermarks for at least
+ * one frame before enabling scaling. LP watermarks can be re-enabled
+ * when scaling is disabled.
+ */
+ if (crtc_w != src_w || crtc_h != src_h) {
+ dev_priv->sprite_scaling_enabled = true;
+ sandybridge_update_wm(dev);
+ intel_wait_for_vblank(dev, pipe);
+ sprscale = SPRITE_SCALE_ENABLE | (src_w << 16) | src_h;
+ } else {
+ dev_priv->sprite_scaling_enabled = false;
+ /* potentially re-enable LP watermarks */
+ sandybridge_update_wm(dev);
+ }
+
+ I915_WRITE(SPRSTRIDE(pipe), fb->pitches[0]);
+ I915_WRITE(SPRPOS(pipe), (crtc_y << 16) | crtc_x);
+ if (obj->tiling_mode != I915_TILING_NONE) {
+ I915_WRITE(SPRTILEOFF(pipe), (y << 16) | x);
+ } else {
+ unsigned long offset;
+
+ offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
+ I915_WRITE(SPRLINOFF(pipe), offset);
+ }
+ I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w);
+ I915_WRITE(SPRSCALE(pipe), sprscale);
+ I915_WRITE(SPRCTL(pipe), sprctl);
+ I915_WRITE(SPRSURF(pipe), obj->gtt_offset);
+ POSTING_READ(SPRSURF(pipe));
+}
+
+static void
+ivb_disable_plane(struct drm_plane *plane)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_plane *intel_plane = to_intel_plane(plane);
+ int pipe = intel_plane->pipe;
+
+ I915_WRITE(SPRCTL(pipe), I915_READ(SPRCTL(pipe)) & ~SPRITE_ENABLE);
+ /* Can't leave the scaler enabled... */
+ I915_WRITE(SPRSCALE(pipe), 0);
+ /* Activate double buffered register update */
+ I915_WRITE(SPRSURF(pipe), 0);
+ POSTING_READ(SPRSURF(pipe));
+}
+
+static int
+ivb_update_colorkey(struct drm_plane *plane,
+ struct drm_intel_sprite_colorkey *key)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_plane *intel_plane;
+ u32 sprctl;
+ int ret = 0;
+
+ intel_plane = to_intel_plane(plane);
+
+ I915_WRITE(SPRKEYVAL(intel_plane->pipe), key->min_value);
+ I915_WRITE(SPRKEYMAX(intel_plane->pipe), key->max_value);
+ I915_WRITE(SPRKEYMSK(intel_plane->pipe), key->channel_mask);
+
+ sprctl = I915_READ(SPRCTL(intel_plane->pipe));
+ sprctl &= ~(SPRITE_SOURCE_KEY | SPRITE_DEST_KEY);
+ if (key->flags & I915_SET_COLORKEY_DESTINATION)
+ sprctl |= SPRITE_DEST_KEY;
+ else if (key->flags & I915_SET_COLORKEY_SOURCE)
+ sprctl |= SPRITE_SOURCE_KEY;
+ I915_WRITE(SPRCTL(intel_plane->pipe), sprctl);
+
+ POSTING_READ(SPRKEYMSK(intel_plane->pipe));
+
+ return ret;
+}
+
+static void
+ivb_get_colorkey(struct drm_plane *plane, struct drm_intel_sprite_colorkey *key)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_plane *intel_plane;
+ u32 sprctl;
+
+ intel_plane = to_intel_plane(plane);
+
+ key->min_value = I915_READ(SPRKEYVAL(intel_plane->pipe));
+ key->max_value = I915_READ(SPRKEYMAX(intel_plane->pipe));
+ key->channel_mask = I915_READ(SPRKEYMSK(intel_plane->pipe));
+ key->flags = 0;
+
+ sprctl = I915_READ(SPRCTL(intel_plane->pipe));
+
+ if (sprctl & SPRITE_DEST_KEY)
+ key->flags = I915_SET_COLORKEY_DESTINATION;
+ else if (sprctl & SPRITE_SOURCE_KEY)
+ key->flags = I915_SET_COLORKEY_SOURCE;
+ else
+ key->flags = I915_SET_COLORKEY_NONE;
+}
+
+static void
+snb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
+ struct drm_i915_gem_object *obj, int crtc_x, int crtc_y,
+ unsigned int crtc_w, unsigned int crtc_h,
+ uint32_t x, uint32_t y,
+ uint32_t src_w, uint32_t src_h)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_plane *intel_plane = to_intel_plane(plane);
+ int pipe = intel_plane->pipe, pixel_size;
+ u32 dvscntr, dvsscale = 0;
+
+ dvscntr = I915_READ(DVSCNTR(pipe));
+
+ /* Mask out pixel format bits in case we change it */
+ dvscntr &= ~DVS_PIXFORMAT_MASK;
+ dvscntr &= ~DVS_RGB_ORDER_XBGR;
+ dvscntr &= ~DVS_YUV_BYTE_ORDER_MASK;
+
+ switch (fb->pixel_format) {
+ case DRM_FORMAT_XBGR8888:
+ dvscntr |= DVS_FORMAT_RGBX888 | DVS_RGB_ORDER_XBGR;
+ pixel_size = 4;
+ break;
+ case DRM_FORMAT_XRGB8888:
+ dvscntr |= DVS_FORMAT_RGBX888;
+ pixel_size = 4;
+ break;
+ case DRM_FORMAT_YUYV:
+ dvscntr |= DVS_FORMAT_YUV422 | DVS_YUV_ORDER_YUYV;
+ pixel_size = 2;
+ break;
+ case DRM_FORMAT_YVYU:
+ dvscntr |= DVS_FORMAT_YUV422 | DVS_YUV_ORDER_YVYU;
+ pixel_size = 2;
+ break;
+ case DRM_FORMAT_UYVY:
+ dvscntr |= DVS_FORMAT_YUV422 | DVS_YUV_ORDER_UYVY;
+ pixel_size = 2;
+ break;
+ case DRM_FORMAT_VYUY:
+ dvscntr |= DVS_FORMAT_YUV422 | DVS_YUV_ORDER_VYUY;
+ pixel_size = 2;
+ break;
+ default:
+ DRM_DEBUG_DRIVER("bad pixel format, assuming RGBX888\n");
+ dvscntr |= DVS_FORMAT_RGBX888;
+ pixel_size = 4;
+ break;
+ }
+
+ if (obj->tiling_mode != I915_TILING_NONE)
+ dvscntr |= DVS_TILED;
+
+ /* must disable */
+ dvscntr |= DVS_TRICKLE_FEED_DISABLE;
+ dvscntr |= DVS_ENABLE;
+
+ /* Sizes are 0 based */
+ src_w--;
+ src_h--;
+ crtc_w--;
+ crtc_h--;
+
+ intel_update_sprite_watermarks(dev, pipe, crtc_w, pixel_size);
+
+ if (crtc_w != src_w || crtc_h != src_h)
+ dvsscale = DVS_SCALE_ENABLE | (src_w << 16) | src_h;
+
+ I915_WRITE(DVSSTRIDE(pipe), fb->pitches[0]);
+ I915_WRITE(DVSPOS(pipe), (crtc_y << 16) | crtc_x);
+ if (obj->tiling_mode != I915_TILING_NONE) {
+ I915_WRITE(DVSTILEOFF(pipe), (y << 16) | x);
+ } else {
+ unsigned long offset;
+
+ offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
+ I915_WRITE(DVSLINOFF(pipe), offset);
+ }
+ I915_WRITE(DVSSIZE(pipe), (crtc_h << 16) | crtc_w);
+ I915_WRITE(DVSSCALE(pipe), dvsscale);
+ I915_WRITE(DVSCNTR(pipe), dvscntr);
+ I915_WRITE(DVSSURF(pipe), obj->gtt_offset);
+ POSTING_READ(DVSSURF(pipe));
+}
+
+static void
+snb_disable_plane(struct drm_plane *plane)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_plane *intel_plane = to_intel_plane(plane);
+ int pipe = intel_plane->pipe;
+
+ I915_WRITE(DVSCNTR(pipe), I915_READ(DVSCNTR(pipe)) & ~DVS_ENABLE);
+ /* Disable the scaler */
+ I915_WRITE(DVSSCALE(pipe), 0);
+ /* Flush double buffered register updates */
+ I915_WRITE(DVSSURF(pipe), 0);
+ POSTING_READ(DVSSURF(pipe));
+}
+
+static void
+intel_enable_primary(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int reg = DSPCNTR(intel_crtc->plane);
+
+ I915_WRITE(reg, I915_READ(reg) | DISPLAY_PLANE_ENABLE);
+}
+
+static void
+intel_disable_primary(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ int reg = DSPCNTR(intel_crtc->plane);
+
+ I915_WRITE(reg, I915_READ(reg) & ~DISPLAY_PLANE_ENABLE);
+}
+
+static int
+snb_update_colorkey(struct drm_plane *plane,
+ struct drm_intel_sprite_colorkey *key)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_plane *intel_plane;
+ u32 dvscntr;
+ int ret = 0;
+
+ intel_plane = to_intel_plane(plane);
+
+ I915_WRITE(DVSKEYVAL(intel_plane->pipe), key->min_value);
+ I915_WRITE(DVSKEYMAX(intel_plane->pipe), key->max_value);
+ I915_WRITE(DVSKEYMSK(intel_plane->pipe), key->channel_mask);
+
+ dvscntr = I915_READ(DVSCNTR(intel_plane->pipe));
+ dvscntr &= ~(DVS_SOURCE_KEY | DVS_DEST_KEY);
+ if (key->flags & I915_SET_COLORKEY_DESTINATION)
+ dvscntr |= DVS_DEST_KEY;
+ else if (key->flags & I915_SET_COLORKEY_SOURCE)
+ dvscntr |= DVS_SOURCE_KEY;
+ I915_WRITE(DVSCNTR(intel_plane->pipe), dvscntr);
+
+ POSTING_READ(DVSKEYMSK(intel_plane->pipe));
+
+ return ret;
+}
+
+static void
+snb_get_colorkey(struct drm_plane *plane, struct drm_intel_sprite_colorkey *key)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_plane *intel_plane;
+ u32 dvscntr;
+
+ intel_plane = to_intel_plane(plane);
+
+ key->min_value = I915_READ(DVSKEYVAL(intel_plane->pipe));
+ key->max_value = I915_READ(DVSKEYMAX(intel_plane->pipe));
+ key->channel_mask = I915_READ(DVSKEYMSK(intel_plane->pipe));
+ key->flags = 0;
+
+ dvscntr = I915_READ(DVSCNTR(intel_plane->pipe));
+
+ if (dvscntr & DVS_DEST_KEY)
+ key->flags = I915_SET_COLORKEY_DESTINATION;
+ else if (dvscntr & DVS_SOURCE_KEY)
+ key->flags = I915_SET_COLORKEY_SOURCE;
+ else
+ key->flags = I915_SET_COLORKEY_NONE;
+}
+
+static int
+intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
+ struct drm_framebuffer *fb, int crtc_x, int crtc_y,
+ unsigned int crtc_w, unsigned int crtc_h,
+ uint32_t src_x, uint32_t src_y,
+ uint32_t src_w, uint32_t src_h)
+{
+ struct drm_device *dev = plane->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_plane *intel_plane = to_intel_plane(plane);
+ struct intel_framebuffer *intel_fb;
+ struct drm_i915_gem_object *obj, *old_obj;
+ int pipe = intel_plane->pipe;
+ int ret = 0;
+ int x = src_x >> 16, y = src_y >> 16;
+ int primary_w = crtc->mode.hdisplay, primary_h = crtc->mode.vdisplay;
+ bool disable_primary = false;
+
+ intel_fb = to_intel_framebuffer(fb);
+ obj = intel_fb->obj;
+
+ old_obj = intel_plane->obj;
+
+ src_w = src_w >> 16;
+ src_h = src_h >> 16;
+
+ /* Pipe must be running... */
+ if (!(I915_READ(PIPECONF(pipe)) & PIPECONF_ENABLE))
+ return -EINVAL;
+
+ if (crtc_x >= primary_w || crtc_y >= primary_h)
+ return -EINVAL;
+
+ /* Don't modify another pipe's plane */
+ if (intel_plane->pipe != intel_crtc->pipe)
+ return -EINVAL;
+
+ /*
+ * Clamp the width & height into the visible area. Note we don't
+ * try to scale the source if part of the visible region is offscreen.
+ * The caller must handle that by adjusting source offset and size.
+ */
+ if ((crtc_x < 0) && ((crtc_x + crtc_w) > 0)) {
+ crtc_w += crtc_x;
+ crtc_x = 0;
+ }
+ if ((crtc_x + crtc_w) <= 0) /* Nothing to display */
+ goto out;
+ if ((crtc_x + crtc_w) > primary_w)
+ crtc_w = primary_w - crtc_x;
+
+ if ((crtc_y < 0) && ((crtc_y + crtc_h) > 0)) {
+ crtc_h += crtc_y;
+ crtc_y = 0;
+ }
+ if ((crtc_y + crtc_h) <= 0) /* Nothing to display */
+ goto out;
+ if (crtc_y + crtc_h > primary_h)
+ crtc_h = primary_h - crtc_y;
+
+ if (!crtc_w || !crtc_h) /* Again, nothing to display */
+ goto out;
+
+ /*
+ * We can take a larger source and scale it down, but
+ * only so much... 16x is the max on SNB.
+ */
+ if (((src_w * src_h) / (crtc_w * crtc_h)) > intel_plane->max_downscale)
+ return -EINVAL;
+
+ /*
+ * If the sprite is completely covering the primary plane,
+ * we can disable the primary and save power.
+ */
+ if ((crtc_x == 0) && (crtc_y == 0) &&
+ (crtc_w == primary_w) && (crtc_h == primary_h))
+ disable_primary = true;
+
+ DRM_LOCK(dev);
+
+ ret = intel_pin_and_fence_fb_obj(dev, obj, NULL);
+ if (ret)
+ goto out_unlock;
+
+ intel_plane->obj = obj;
+
+ /*
+ * Be sure to re-enable the primary before the sprite is no longer
+ * covering it fully.
+ */
+ if (!disable_primary && intel_plane->primary_disabled) {
+ intel_enable_primary(crtc);
+ intel_plane->primary_disabled = false;
+ }
+
+ intel_plane->update_plane(plane, fb, obj, crtc_x, crtc_y,
+ crtc_w, crtc_h, x, y, src_w, src_h);
+
+ if (disable_primary) {
+ intel_disable_primary(crtc);
+ intel_plane->primary_disabled = true;
+ }
+
+ /* Unpin old obj after new one is active to avoid ugliness */
+ if (old_obj) {
+ /*
+ * It's fairly common to simply update the position of
+ * an existing object. In that case, we don't need to
+ * wait for vblank to avoid ugliness, we only need to
+ * do the pin & ref bookkeeping.
+ */
+ if (old_obj != obj) {
+ DRM_UNLOCK(dev);
+ intel_wait_for_vblank(dev, to_intel_crtc(crtc)->pipe);
+ DRM_LOCK(dev);
+ }
+ intel_unpin_fb_obj(old_obj);
+ }
+
+out_unlock:
+ DRM_UNLOCK(dev);
+out:
+ return ret;
+}
+
+static int
+intel_disable_plane(struct drm_plane *plane)
+{
+ struct drm_device *dev = plane->dev;
+ struct intel_plane *intel_plane = to_intel_plane(plane);
+ int ret = 0;
+
+ if (intel_plane->primary_disabled) {
+ intel_enable_primary(plane->crtc);
+ intel_plane->primary_disabled = false;
+ }
+
+ intel_plane->disable_plane(plane);
+
+ if (!intel_plane->obj)
+ goto out;
+
+ DRM_LOCK(dev);
+ intel_unpin_fb_obj(intel_plane->obj);
+ intel_plane->obj = NULL;
+ DRM_UNLOCK(dev);
+out:
+
+ return ret;
+}
+
+static void intel_destroy_plane(struct drm_plane *plane)
+{
+ struct intel_plane *intel_plane = to_intel_plane(plane);
+ intel_disable_plane(plane);
+ drm_plane_cleanup(plane);
+ free(intel_plane, DRM_MEM_KMS);
+}
+
+int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_intel_sprite_colorkey *set = data;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_mode_object *obj;
+ struct drm_plane *plane;
+ struct intel_plane *intel_plane;
+ int ret = 0;
+
+ if (!dev_priv)
+ return -EINVAL;
+
+ /* Make sure we don't try to enable both src & dest simultaneously */
+ if ((set->flags & (I915_SET_COLORKEY_DESTINATION | I915_SET_COLORKEY_SOURCE)) == (I915_SET_COLORKEY_DESTINATION | I915_SET_COLORKEY_SOURCE))
+ return -EINVAL;
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ obj = drm_mode_object_find(dev, set->plane_id, DRM_MODE_OBJECT_PLANE);
+ if (!obj) {
+ ret = -EINVAL;
+ goto out_unlock;
+ }
+
+ plane = obj_to_plane(obj);
+ intel_plane = to_intel_plane(plane);
+ ret = intel_plane->update_colorkey(plane, set);
+
+out_unlock:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+int intel_sprite_get_colorkey(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+{
+ struct drm_intel_sprite_colorkey *get = data;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_mode_object *obj;
+ struct drm_plane *plane;
+ struct intel_plane *intel_plane;
+ int ret = 0;
+
+ if (!dev_priv)
+ return -EINVAL;
+
+ sx_xlock(&dev->mode_config.mutex);
+
+ obj = drm_mode_object_find(dev, get->plane_id, DRM_MODE_OBJECT_PLANE);
+ if (!obj) {
+ ret = -EINVAL;
+ goto out_unlock;
+ }
+
+ plane = obj_to_plane(obj);
+ intel_plane = to_intel_plane(plane);
+ intel_plane->get_colorkey(plane, get);
+
+out_unlock:
+ sx_xunlock(&dev->mode_config.mutex);
+ return ret;
+}
+
+static const struct drm_plane_funcs intel_plane_funcs = {
+ .update_plane = intel_update_plane,
+ .disable_plane = intel_disable_plane,
+ .destroy = intel_destroy_plane,
+};
+
+static uint32_t snb_plane_formats[] = {
+ DRM_FORMAT_XBGR8888,
+ DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_YUYV,
+ DRM_FORMAT_YVYU,
+ DRM_FORMAT_UYVY,
+ DRM_FORMAT_VYUY,
+};
+
+int
+intel_plane_init(struct drm_device *dev, enum pipe pipe)
+{
+ struct intel_plane *intel_plane;
+ unsigned long possible_crtcs;
+ int ret;
+
+ if (!(IS_GEN6(dev) || IS_GEN7(dev)))
+ return -ENODEV;
+
+ intel_plane = malloc(sizeof(struct intel_plane), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ if (IS_GEN6(dev)) {
+ intel_plane->max_downscale = 16;
+ intel_plane->update_plane = snb_update_plane;
+ intel_plane->disable_plane = snb_disable_plane;
+ intel_plane->update_colorkey = snb_update_colorkey;
+ intel_plane->get_colorkey = snb_get_colorkey;
+ } else if (IS_GEN7(dev)) {
+ intel_plane->max_downscale = 2;
+ intel_plane->update_plane = ivb_update_plane;
+ intel_plane->disable_plane = ivb_disable_plane;
+ intel_plane->update_colorkey = ivb_update_colorkey;
+ intel_plane->get_colorkey = ivb_get_colorkey;
+ }
+
+ intel_plane->pipe = pipe;
+ possible_crtcs = (1 << pipe);
+ ret = drm_plane_init(dev, &intel_plane->base, possible_crtcs,
+ &intel_plane_funcs, snb_plane_formats,
+ DRM_ARRAY_SIZE(snb_plane_formats), false);
+ if (ret)
+ free(intel_plane, DRM_MEM_KMS);
+
+ return ret;
+}
+
diff --git a/sys/dev/drm2/i915/intel_tv.c b/sys/dev/drm2/i915/intel_tv.c
new file mode 100644
index 000000000000..93fcf0a3eec5
--- /dev/null
+++ b/sys/dev/drm2/i915/intel_tv.c
@@ -0,0 +1,1609 @@
+/*
+ * Copyright © 2006-2008 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
+ *
+ * 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 (including the next
+ * paragraph) 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.
+ *
+ * Authors:
+ * Eric Anholt <eric@anholt.net>
+ *
+ */
+
+/** @file
+ * Integrated TV-out support for the 915GM and 945GM.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/drm_crtc.h>
+#include <dev/drm2/drm_edid.h>
+#include <dev/drm2/i915/i915_drm.h>
+#include <dev/drm2/i915/i915_drv.h>
+#include <dev/drm2/i915/intel_drv.h>
+
+enum tv_margin {
+ TV_MARGIN_LEFT, TV_MARGIN_TOP,
+ TV_MARGIN_RIGHT, TV_MARGIN_BOTTOM
+};
+
+/** Private structure for the integrated TV support */
+struct intel_tv {
+ struct intel_encoder base;
+
+ int type;
+ const char *tv_format;
+ int margin[4];
+ u32 save_TV_H_CTL_1;
+ u32 save_TV_H_CTL_2;
+ u32 save_TV_H_CTL_3;
+ u32 save_TV_V_CTL_1;
+ u32 save_TV_V_CTL_2;
+ u32 save_TV_V_CTL_3;
+ u32 save_TV_V_CTL_4;
+ u32 save_TV_V_CTL_5;
+ u32 save_TV_V_CTL_6;
+ u32 save_TV_V_CTL_7;
+ u32 save_TV_SC_CTL_1, save_TV_SC_CTL_2, save_TV_SC_CTL_3;
+
+ u32 save_TV_CSC_Y;
+ u32 save_TV_CSC_Y2;
+ u32 save_TV_CSC_U;
+ u32 save_TV_CSC_U2;
+ u32 save_TV_CSC_V;
+ u32 save_TV_CSC_V2;
+ u32 save_TV_CLR_KNOBS;
+ u32 save_TV_CLR_LEVEL;
+ u32 save_TV_WIN_POS;
+ u32 save_TV_WIN_SIZE;
+ u32 save_TV_FILTER_CTL_1;
+ u32 save_TV_FILTER_CTL_2;
+ u32 save_TV_FILTER_CTL_3;
+
+ u32 save_TV_H_LUMA[60];
+ u32 save_TV_H_CHROMA[60];
+ u32 save_TV_V_LUMA[43];
+ u32 save_TV_V_CHROMA[43];
+
+ u32 save_TV_DAC;
+ u32 save_TV_CTL;
+};
+
+struct video_levels {
+ int blank, black, burst;
+};
+
+struct color_conversion {
+ u16 ry, gy, by, ay;
+ u16 ru, gu, bu, au;
+ u16 rv, gv, bv, av;
+};
+
+static const u32 filter_table[] = {
+ 0xB1403000, 0x2E203500, 0x35002E20, 0x3000B140,
+ 0x35A0B160, 0x2DC02E80, 0xB1403480, 0xB1603000,
+ 0x2EA03640, 0x34002D80, 0x3000B120, 0x36E0B160,
+ 0x2D202EF0, 0xB1203380, 0xB1603000, 0x2F303780,
+ 0x33002CC0, 0x3000B100, 0x3820B160, 0x2C802F50,
+ 0xB10032A0, 0xB1603000, 0x2F9038C0, 0x32202C20,
+ 0x3000B0E0, 0x3980B160, 0x2BC02FC0, 0xB0E031C0,
+ 0xB1603000, 0x2FF03A20, 0x31602B60, 0xB020B0C0,
+ 0x3AE0B160, 0x2B001810, 0xB0C03120, 0xB140B020,
+ 0x18283BA0, 0x30C02A80, 0xB020B0A0, 0x3C60B140,
+ 0x2A201838, 0xB0A03080, 0xB120B020, 0x18383D20,
+ 0x304029C0, 0xB040B080, 0x3DE0B100, 0x29601848,
+ 0xB0803000, 0xB100B040, 0x18483EC0, 0xB0402900,
+ 0xB040B060, 0x3F80B0C0, 0x28801858, 0xB060B080,
+ 0xB0A0B060, 0x18602820, 0xB0A02820, 0x0000B060,
+ 0xB1403000, 0x2E203500, 0x35002E20, 0x3000B140,
+ 0x35A0B160, 0x2DC02E80, 0xB1403480, 0xB1603000,
+ 0x2EA03640, 0x34002D80, 0x3000B120, 0x36E0B160,
+ 0x2D202EF0, 0xB1203380, 0xB1603000, 0x2F303780,
+ 0x33002CC0, 0x3000B100, 0x3820B160, 0x2C802F50,
+ 0xB10032A0, 0xB1603000, 0x2F9038C0, 0x32202C20,
+ 0x3000B0E0, 0x3980B160, 0x2BC02FC0, 0xB0E031C0,
+ 0xB1603000, 0x2FF03A20, 0x31602B60, 0xB020B0C0,
+ 0x3AE0B160, 0x2B001810, 0xB0C03120, 0xB140B020,
+ 0x18283BA0, 0x30C02A80, 0xB020B0A0, 0x3C60B140,
+ 0x2A201838, 0xB0A03080, 0xB120B020, 0x18383D20,
+ 0x304029C0, 0xB040B080, 0x3DE0B100, 0x29601848,
+ 0xB0803000, 0xB100B040, 0x18483EC0, 0xB0402900,
+ 0xB040B060, 0x3F80B0C0, 0x28801858, 0xB060B080,
+ 0xB0A0B060, 0x18602820, 0xB0A02820, 0x0000B060,
+ 0x36403000, 0x2D002CC0, 0x30003640, 0x2D0036C0,
+ 0x35C02CC0, 0x37403000, 0x2C802D40, 0x30003540,
+ 0x2D8037C0, 0x34C02C40, 0x38403000, 0x2BC02E00,
+ 0x30003440, 0x2E2038C0, 0x34002B80, 0x39803000,
+ 0x2B402E40, 0x30003380, 0x2E603A00, 0x33402B00,
+ 0x3A803040, 0x2A802EA0, 0x30403300, 0x2EC03B40,
+ 0x32802A40, 0x3C003040, 0x2A002EC0, 0x30803240,
+ 0x2EC03C80, 0x320029C0, 0x3D403080, 0x29402F00,
+ 0x308031C0, 0x2F203DC0, 0x31802900, 0x3E8030C0,
+ 0x28802F40, 0x30C03140, 0x2F203F40, 0x31402840,
+ 0x28003100, 0x28002F00, 0x00003100, 0x36403000,
+ 0x2D002CC0, 0x30003640, 0x2D0036C0,
+ 0x35C02CC0, 0x37403000, 0x2C802D40, 0x30003540,
+ 0x2D8037C0, 0x34C02C40, 0x38403000, 0x2BC02E00,
+ 0x30003440, 0x2E2038C0, 0x34002B80, 0x39803000,
+ 0x2B402E40, 0x30003380, 0x2E603A00, 0x33402B00,
+ 0x3A803040, 0x2A802EA0, 0x30403300, 0x2EC03B40,
+ 0x32802A40, 0x3C003040, 0x2A002EC0, 0x30803240,
+ 0x2EC03C80, 0x320029C0, 0x3D403080, 0x29402F00,
+ 0x308031C0, 0x2F203DC0, 0x31802900, 0x3E8030C0,
+ 0x28802F40, 0x30C03140, 0x2F203F40, 0x31402840,
+ 0x28003100, 0x28002F00, 0x00003100,
+};
+
+/*
+ * Color conversion values have 3 separate fixed point formats:
+ *
+ * 10 bit fields (ay, au)
+ * 1.9 fixed point (b.bbbbbbbbb)
+ * 11 bit fields (ry, by, ru, gu, gv)
+ * exp.mantissa (ee.mmmmmmmmm)
+ * ee = 00 = 10^-1 (0.mmmmmmmmm)
+ * ee = 01 = 10^-2 (0.0mmmmmmmmm)
+ * ee = 10 = 10^-3 (0.00mmmmmmmmm)
+ * ee = 11 = 10^-4 (0.000mmmmmmmmm)
+ * 12 bit fields (gy, rv, bu)
+ * exp.mantissa (eee.mmmmmmmmm)
+ * eee = 000 = 10^-1 (0.mmmmmmmmm)
+ * eee = 001 = 10^-2 (0.0mmmmmmmmm)
+ * eee = 010 = 10^-3 (0.00mmmmmmmmm)
+ * eee = 011 = 10^-4 (0.000mmmmmmmmm)
+ * eee = 100 = reserved
+ * eee = 101 = reserved
+ * eee = 110 = reserved
+ * eee = 111 = 10^0 (m.mmmmmmmm) (only usable for 1.0 representation)
+ *
+ * Saturation and contrast are 8 bits, with their own representation:
+ * 8 bit field (saturation, contrast)
+ * exp.mantissa (ee.mmmmmm)
+ * ee = 00 = 10^-1 (0.mmmmmm)
+ * ee = 01 = 10^0 (m.mmmmm)
+ * ee = 10 = 10^1 (mm.mmmm)
+ * ee = 11 = 10^2 (mmm.mmm)
+ *
+ * Simple conversion function:
+ *
+ * static u32
+ * float_to_csc_11(float f)
+ * {
+ * u32 exp;
+ * u32 mant;
+ * u32 ret;
+ *
+ * if (f < 0)
+ * f = -f;
+ *
+ * if (f >= 1) {
+ * exp = 0x7;
+ * mant = 1 << 8;
+ * } else {
+ * for (exp = 0; exp < 3 && f < 0.5; exp++)
+ * f *= 2.0;
+ * mant = (f * (1 << 9) + 0.5);
+ * if (mant >= (1 << 9))
+ * mant = (1 << 9) - 1;
+ * }
+ * ret = (exp << 9) | mant;
+ * return ret;
+ * }
+ */
+
+/*
+ * Behold, magic numbers! If we plant them they might grow a big
+ * s-video cable to the sky... or something.
+ *
+ * Pre-converted to appropriate hex value.
+ */
+
+/*
+ * PAL & NTSC values for composite & s-video connections
+ */
+static const struct color_conversion ntsc_m_csc_composite = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x0104,
+ .ru = 0x0733, .gu = 0x052d, .bu = 0x05c7, .au = 0x0200,
+ .rv = 0x0340, .gv = 0x030c, .bv = 0x06d0, .av = 0x0200,
+};
+
+static const struct video_levels ntsc_m_levels_composite = {
+ .blank = 225, .black = 267, .burst = 113,
+};
+
+static const struct color_conversion ntsc_m_csc_svideo = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x0133,
+ .ru = 0x076a, .gu = 0x0564, .bu = 0x030d, .au = 0x0200,
+ .rv = 0x037a, .gv = 0x033d, .bv = 0x06f6, .av = 0x0200,
+};
+
+static const struct video_levels ntsc_m_levels_svideo = {
+ .blank = 266, .black = 316, .burst = 133,
+};
+
+static const struct color_conversion ntsc_j_csc_composite = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x0119,
+ .ru = 0x074c, .gu = 0x0546, .bu = 0x05ec, .au = 0x0200,
+ .rv = 0x035a, .gv = 0x0322, .bv = 0x06e1, .av = 0x0200,
+};
+
+static const struct video_levels ntsc_j_levels_composite = {
+ .blank = 225, .black = 225, .burst = 113,
+};
+
+static const struct color_conversion ntsc_j_csc_svideo = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x014c,
+ .ru = 0x0788, .gu = 0x0581, .bu = 0x0322, .au = 0x0200,
+ .rv = 0x0399, .gv = 0x0356, .bv = 0x070a, .av = 0x0200,
+};
+
+static const struct video_levels ntsc_j_levels_svideo = {
+ .blank = 266, .black = 266, .burst = 133,
+};
+
+static const struct color_conversion pal_csc_composite = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x0113,
+ .ru = 0x0745, .gu = 0x053f, .bu = 0x05e1, .au = 0x0200,
+ .rv = 0x0353, .gv = 0x031c, .bv = 0x06dc, .av = 0x0200,
+};
+
+static const struct video_levels pal_levels_composite = {
+ .blank = 237, .black = 237, .burst = 118,
+};
+
+static const struct color_conversion pal_csc_svideo = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x0145,
+ .ru = 0x0780, .gu = 0x0579, .bu = 0x031c, .au = 0x0200,
+ .rv = 0x0390, .gv = 0x034f, .bv = 0x0705, .av = 0x0200,
+};
+
+static const struct video_levels pal_levels_svideo = {
+ .blank = 280, .black = 280, .burst = 139,
+};
+
+static const struct color_conversion pal_m_csc_composite = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x0104,
+ .ru = 0x0733, .gu = 0x052d, .bu = 0x05c7, .au = 0x0200,
+ .rv = 0x0340, .gv = 0x030c, .bv = 0x06d0, .av = 0x0200,
+};
+
+static const struct video_levels pal_m_levels_composite = {
+ .blank = 225, .black = 267, .burst = 113,
+};
+
+static const struct color_conversion pal_m_csc_svideo = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x0133,
+ .ru = 0x076a, .gu = 0x0564, .bu = 0x030d, .au = 0x0200,
+ .rv = 0x037a, .gv = 0x033d, .bv = 0x06f6, .av = 0x0200,
+};
+
+static const struct video_levels pal_m_levels_svideo = {
+ .blank = 266, .black = 316, .burst = 133,
+};
+
+static const struct color_conversion pal_n_csc_composite = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x0104,
+ .ru = 0x0733, .gu = 0x052d, .bu = 0x05c7, .au = 0x0200,
+ .rv = 0x0340, .gv = 0x030c, .bv = 0x06d0, .av = 0x0200,
+};
+
+static const struct video_levels pal_n_levels_composite = {
+ .blank = 225, .black = 267, .burst = 118,
+};
+
+static const struct color_conversion pal_n_csc_svideo = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x0133,
+ .ru = 0x076a, .gu = 0x0564, .bu = 0x030d, .au = 0x0200,
+ .rv = 0x037a, .gv = 0x033d, .bv = 0x06f6, .av = 0x0200,
+};
+
+static const struct video_levels pal_n_levels_svideo = {
+ .blank = 266, .black = 316, .burst = 139,
+};
+
+/*
+ * Component connections
+ */
+static const struct color_conversion sdtv_csc_yprpb = {
+ .ry = 0x0332, .gy = 0x012d, .by = 0x07d3, .ay = 0x0145,
+ .ru = 0x0559, .gu = 0x0353, .bu = 0x0100, .au = 0x0200,
+ .rv = 0x0100, .gv = 0x03ad, .bv = 0x074d, .av = 0x0200,
+};
+
+static const struct color_conversion sdtv_csc_rgb = {
+ .ry = 0x0000, .gy = 0x0f00, .by = 0x0000, .ay = 0x0166,
+ .ru = 0x0000, .gu = 0x0000, .bu = 0x0f00, .au = 0x0166,
+ .rv = 0x0f00, .gv = 0x0000, .bv = 0x0000, .av = 0x0166,
+};
+
+static const struct color_conversion hdtv_csc_yprpb = {
+ .ry = 0x05b3, .gy = 0x016e, .by = 0x0728, .ay = 0x0145,
+ .ru = 0x07d5, .gu = 0x038b, .bu = 0x0100, .au = 0x0200,
+ .rv = 0x0100, .gv = 0x03d1, .bv = 0x06bc, .av = 0x0200,
+};
+
+static const struct color_conversion hdtv_csc_rgb = {
+ .ry = 0x0000, .gy = 0x0f00, .by = 0x0000, .ay = 0x0166,
+ .ru = 0x0000, .gu = 0x0000, .bu = 0x0f00, .au = 0x0166,
+ .rv = 0x0f00, .gv = 0x0000, .bv = 0x0000, .av = 0x0166,
+};
+
+static const struct video_levels component_levels = {
+ .blank = 279, .black = 279, .burst = 0,
+};
+
+
+struct tv_mode {
+ const char *name;
+ int clock;
+ int refresh; /* in millihertz (for precision) */
+ u32 oversample;
+ int hsync_end, hblank_start, hblank_end, htotal;
+ bool progressive, trilevel_sync, component_only;
+ int vsync_start_f1, vsync_start_f2, vsync_len;
+ bool veq_ena;
+ int veq_start_f1, veq_start_f2, veq_len;
+ int vi_end_f1, vi_end_f2, nbr_end;
+ bool burst_ena;
+ int hburst_start, hburst_len;
+ int vburst_start_f1, vburst_end_f1;
+ int vburst_start_f2, vburst_end_f2;
+ int vburst_start_f3, vburst_end_f3;
+ int vburst_start_f4, vburst_end_f4;
+ /*
+ * subcarrier programming
+ */
+ int dda2_size, dda3_size, dda1_inc, dda2_inc, dda3_inc;
+ u32 sc_reset;
+ bool pal_burst;
+ /*
+ * blank/black levels
+ */
+ const struct video_levels *composite_levels, *svideo_levels;
+ const struct color_conversion *composite_color, *svideo_color;
+ const u32 *filter_table;
+ int max_srcw;
+};
+
+
+/*
+ * Sub carrier DDA
+ *
+ * I think this works as follows:
+ *
+ * subcarrier freq = pixel_clock * (dda1_inc + dda2_inc / dda2_size) / 4096
+ *
+ * Presumably, when dda3 is added in, it gets to adjust the dda2_inc value
+ *
+ * So,
+ * dda1_ideal = subcarrier/pixel * 4096
+ * dda1_inc = floor (dda1_ideal)
+ * dda2 = dda1_ideal - dda1_inc
+ *
+ * then pick a ratio for dda2 that gives the closest approximation. If
+ * you can't get close enough, you can play with dda3 as well. This
+ * seems likely to happen when dda2 is small as the jumps would be larger
+ *
+ * To invert this,
+ *
+ * pixel_clock = subcarrier * 4096 / (dda1_inc + dda2_inc / dda2_size)
+ *
+ * The constants below were all computed using a 107.520MHz clock
+ */
+
+/**
+ * Register programming values for TV modes.
+ *
+ * These values account for -1s required.
+ */
+
+static const struct tv_mode tv_modes[] = {
+ {
+ .name = "NTSC-M",
+ .clock = 108000,
+ .refresh = 59940,
+ .oversample = TV_OVERSAMPLE_8X,
+ .component_only = 0,
+ /* 525 Lines, 60 Fields, 15.734KHz line, Sub-Carrier 3.580MHz */
+
+ .hsync_end = 64, .hblank_end = 124,
+ .hblank_start = 836, .htotal = 857,
+
+ .progressive = false, .trilevel_sync = false,
+
+ .vsync_start_f1 = 6, .vsync_start_f2 = 7,
+ .vsync_len = 6,
+
+ .veq_ena = true, .veq_start_f1 = 0,
+ .veq_start_f2 = 1, .veq_len = 18,
+
+ .vi_end_f1 = 20, .vi_end_f2 = 21,
+ .nbr_end = 240,
+
+ .burst_ena = true,
+ .hburst_start = 72, .hburst_len = 34,
+ .vburst_start_f1 = 9, .vburst_end_f1 = 240,
+ .vburst_start_f2 = 10, .vburst_end_f2 = 240,
+ .vburst_start_f3 = 9, .vburst_end_f3 = 240,
+ .vburst_start_f4 = 10, .vburst_end_f4 = 240,
+
+ /* desired 3.5800000 actual 3.5800000 clock 107.52 */
+ .dda1_inc = 135,
+ .dda2_inc = 20800, .dda2_size = 27456,
+ .dda3_inc = 0, .dda3_size = 0,
+ .sc_reset = TV_SC_RESET_EVERY_4,
+ .pal_burst = false,
+
+ .composite_levels = &ntsc_m_levels_composite,
+ .composite_color = &ntsc_m_csc_composite,
+ .svideo_levels = &ntsc_m_levels_svideo,
+ .svideo_color = &ntsc_m_csc_svideo,
+
+ .filter_table = filter_table,
+ },
+ {
+ .name = "NTSC-443",
+ .clock = 108000,
+ .refresh = 59940,
+ .oversample = TV_OVERSAMPLE_8X,
+ .component_only = 0,
+ /* 525 Lines, 60 Fields, 15.734KHz line, Sub-Carrier 4.43MHz */
+ .hsync_end = 64, .hblank_end = 124,
+ .hblank_start = 836, .htotal = 857,
+
+ .progressive = false, .trilevel_sync = false,
+
+ .vsync_start_f1 = 6, .vsync_start_f2 = 7,
+ .vsync_len = 6,
+
+ .veq_ena = true, .veq_start_f1 = 0,
+ .veq_start_f2 = 1, .veq_len = 18,
+
+ .vi_end_f1 = 20, .vi_end_f2 = 21,
+ .nbr_end = 240,
+
+ .burst_ena = true,
+ .hburst_start = 72, .hburst_len = 34,
+ .vburst_start_f1 = 9, .vburst_end_f1 = 240,
+ .vburst_start_f2 = 10, .vburst_end_f2 = 240,
+ .vburst_start_f3 = 9, .vburst_end_f3 = 240,
+ .vburst_start_f4 = 10, .vburst_end_f4 = 240,
+
+ /* desired 4.4336180 actual 4.4336180 clock 107.52 */
+ .dda1_inc = 168,
+ .dda2_inc = 4093, .dda2_size = 27456,
+ .dda3_inc = 310, .dda3_size = 525,
+ .sc_reset = TV_SC_RESET_NEVER,
+ .pal_burst = false,
+
+ .composite_levels = &ntsc_m_levels_composite,
+ .composite_color = &ntsc_m_csc_composite,
+ .svideo_levels = &ntsc_m_levels_svideo,
+ .svideo_color = &ntsc_m_csc_svideo,
+
+ .filter_table = filter_table,
+ },
+ {
+ .name = "NTSC-J",
+ .clock = 108000,
+ .refresh = 59940,
+ .oversample = TV_OVERSAMPLE_8X,
+ .component_only = 0,
+
+ /* 525 Lines, 60 Fields, 15.734KHz line, Sub-Carrier 3.580MHz */
+ .hsync_end = 64, .hblank_end = 124,
+ .hblank_start = 836, .htotal = 857,
+
+ .progressive = false, .trilevel_sync = false,
+
+ .vsync_start_f1 = 6, .vsync_start_f2 = 7,
+ .vsync_len = 6,
+
+ .veq_ena = true, .veq_start_f1 = 0,
+ .veq_start_f2 = 1, .veq_len = 18,
+
+ .vi_end_f1 = 20, .vi_end_f2 = 21,
+ .nbr_end = 240,
+
+ .burst_ena = true,
+ .hburst_start = 72, .hburst_len = 34,
+ .vburst_start_f1 = 9, .vburst_end_f1 = 240,
+ .vburst_start_f2 = 10, .vburst_end_f2 = 240,
+ .vburst_start_f3 = 9, .vburst_end_f3 = 240,
+ .vburst_start_f4 = 10, .vburst_end_f4 = 240,
+
+ /* desired 3.5800000 actual 3.5800000 clock 107.52 */
+ .dda1_inc = 135,
+ .dda2_inc = 20800, .dda2_size = 27456,
+ .dda3_inc = 0, .dda3_size = 0,
+ .sc_reset = TV_SC_RESET_EVERY_4,
+ .pal_burst = false,
+
+ .composite_levels = &ntsc_j_levels_composite,
+ .composite_color = &ntsc_j_csc_composite,
+ .svideo_levels = &ntsc_j_levels_svideo,
+ .svideo_color = &ntsc_j_csc_svideo,
+
+ .filter_table = filter_table,
+ },
+ {
+ .name = "PAL-M",
+ .clock = 108000,
+ .refresh = 59940,
+ .oversample = TV_OVERSAMPLE_8X,
+ .component_only = 0,
+
+ /* 525 Lines, 60 Fields, 15.734KHz line, Sub-Carrier 3.580MHz */
+ .hsync_end = 64, .hblank_end = 124,
+ .hblank_start = 836, .htotal = 857,
+
+ .progressive = false, .trilevel_sync = false,
+
+ .vsync_start_f1 = 6, .vsync_start_f2 = 7,
+ .vsync_len = 6,
+
+ .veq_ena = true, .veq_start_f1 = 0,
+ .veq_start_f2 = 1, .veq_len = 18,
+
+ .vi_end_f1 = 20, .vi_end_f2 = 21,
+ .nbr_end = 240,
+
+ .burst_ena = true,
+ .hburst_start = 72, .hburst_len = 34,
+ .vburst_start_f1 = 9, .vburst_end_f1 = 240,
+ .vburst_start_f2 = 10, .vburst_end_f2 = 240,
+ .vburst_start_f3 = 9, .vburst_end_f3 = 240,
+ .vburst_start_f4 = 10, .vburst_end_f4 = 240,
+
+ /* desired 3.5800000 actual 3.5800000 clock 107.52 */
+ .dda1_inc = 135,
+ .dda2_inc = 16704, .dda2_size = 27456,
+ .dda3_inc = 0, .dda3_size = 0,
+ .sc_reset = TV_SC_RESET_EVERY_8,
+ .pal_burst = true,
+
+ .composite_levels = &pal_m_levels_composite,
+ .composite_color = &pal_m_csc_composite,
+ .svideo_levels = &pal_m_levels_svideo,
+ .svideo_color = &pal_m_csc_svideo,
+
+ .filter_table = filter_table,
+ },
+ {
+ /* 625 Lines, 50 Fields, 15.625KHz line, Sub-Carrier 4.434MHz */
+ .name = "PAL-N",
+ .clock = 108000,
+ .refresh = 50000,
+ .oversample = TV_OVERSAMPLE_8X,
+ .component_only = 0,
+
+ .hsync_end = 64, .hblank_end = 128,
+ .hblank_start = 844, .htotal = 863,
+
+ .progressive = false, .trilevel_sync = false,
+
+
+ .vsync_start_f1 = 6, .vsync_start_f2 = 7,
+ .vsync_len = 6,
+
+ .veq_ena = true, .veq_start_f1 = 0,
+ .veq_start_f2 = 1, .veq_len = 18,
+
+ .vi_end_f1 = 24, .vi_end_f2 = 25,
+ .nbr_end = 286,
+
+ .burst_ena = true,
+ .hburst_start = 73, .hburst_len = 34,
+ .vburst_start_f1 = 8, .vburst_end_f1 = 285,
+ .vburst_start_f2 = 8, .vburst_end_f2 = 286,
+ .vburst_start_f3 = 9, .vburst_end_f3 = 286,
+ .vburst_start_f4 = 9, .vburst_end_f4 = 285,
+
+
+ /* desired 4.4336180 actual 4.4336180 clock 107.52 */
+ .dda1_inc = 135,
+ .dda2_inc = 23578, .dda2_size = 27648,
+ .dda3_inc = 134, .dda3_size = 625,
+ .sc_reset = TV_SC_RESET_EVERY_8,
+ .pal_burst = true,
+
+ .composite_levels = &pal_n_levels_composite,
+ .composite_color = &pal_n_csc_composite,
+ .svideo_levels = &pal_n_levels_svideo,
+ .svideo_color = &pal_n_csc_svideo,
+
+ .filter_table = filter_table,
+ },
+ {
+ /* 625 Lines, 50 Fields, 15.625KHz line, Sub-Carrier 4.434MHz */
+ .name = "PAL",
+ .clock = 108000,
+ .refresh = 50000,
+ .oversample = TV_OVERSAMPLE_8X,
+ .component_only = 0,
+
+ .hsync_end = 64, .hblank_end = 142,
+ .hblank_start = 844, .htotal = 863,
+
+ .progressive = false, .trilevel_sync = false,
+
+ .vsync_start_f1 = 5, .vsync_start_f2 = 6,
+ .vsync_len = 5,
+
+ .veq_ena = true, .veq_start_f1 = 0,
+ .veq_start_f2 = 1, .veq_len = 15,
+
+ .vi_end_f1 = 24, .vi_end_f2 = 25,
+ .nbr_end = 286,
+
+ .burst_ena = true,
+ .hburst_start = 73, .hburst_len = 32,
+ .vburst_start_f1 = 8, .vburst_end_f1 = 285,
+ .vburst_start_f2 = 8, .vburst_end_f2 = 286,
+ .vburst_start_f3 = 9, .vburst_end_f3 = 286,
+ .vburst_start_f4 = 9, .vburst_end_f4 = 285,
+
+ /* desired 4.4336180 actual 4.4336180 clock 107.52 */
+ .dda1_inc = 168,
+ .dda2_inc = 4122, .dda2_size = 27648,
+ .dda3_inc = 67, .dda3_size = 625,
+ .sc_reset = TV_SC_RESET_EVERY_8,
+ .pal_burst = true,
+
+ .composite_levels = &pal_levels_composite,
+ .composite_color = &pal_csc_composite,
+ .svideo_levels = &pal_levels_svideo,
+ .svideo_color = &pal_csc_svideo,
+
+ .filter_table = filter_table,
+ },
+ {
+ .name = "720p@60Hz",
+ .clock = 148800,
+ .refresh = 60000,
+ .oversample = TV_OVERSAMPLE_2X,
+ .component_only = 1,
+
+ .hsync_end = 80, .hblank_end = 300,
+ .hblank_start = 1580, .htotal = 1649,
+
+ .progressive = true, .trilevel_sync = true,
+
+ .vsync_start_f1 = 10, .vsync_start_f2 = 10,
+ .vsync_len = 10,
+
+ .veq_ena = false,
+
+ .vi_end_f1 = 29, .vi_end_f2 = 29,
+ .nbr_end = 719,
+
+ .burst_ena = false,
+
+ .filter_table = filter_table,
+ },
+ {
+ .name = "720p@50Hz",
+ .clock = 148800,
+ .refresh = 50000,
+ .oversample = TV_OVERSAMPLE_2X,
+ .component_only = 1,
+
+ .hsync_end = 80, .hblank_end = 300,
+ .hblank_start = 1580, .htotal = 1979,
+
+ .progressive = true, .trilevel_sync = true,
+
+ .vsync_start_f1 = 10, .vsync_start_f2 = 10,
+ .vsync_len = 10,
+
+ .veq_ena = false,
+
+ .vi_end_f1 = 29, .vi_end_f2 = 29,
+ .nbr_end = 719,
+
+ .burst_ena = false,
+
+ .filter_table = filter_table,
+ .max_srcw = 800
+ },
+ {
+ .name = "1080i@50Hz",
+ .clock = 148800,
+ .refresh = 50000,
+ .oversample = TV_OVERSAMPLE_2X,
+ .component_only = 1,
+
+ .hsync_end = 88, .hblank_end = 235,
+ .hblank_start = 2155, .htotal = 2639,
+
+ .progressive = false, .trilevel_sync = true,
+
+ .vsync_start_f1 = 4, .vsync_start_f2 = 5,
+ .vsync_len = 10,
+
+ .veq_ena = true, .veq_start_f1 = 4,
+ .veq_start_f2 = 4, .veq_len = 10,
+
+
+ .vi_end_f1 = 21, .vi_end_f2 = 22,
+ .nbr_end = 539,
+
+ .burst_ena = false,
+
+ .filter_table = filter_table,
+ },
+ {
+ .name = "1080i@60Hz",
+ .clock = 148800,
+ .refresh = 60000,
+ .oversample = TV_OVERSAMPLE_2X,
+ .component_only = 1,
+
+ .hsync_end = 88, .hblank_end = 235,
+ .hblank_start = 2155, .htotal = 2199,
+
+ .progressive = false, .trilevel_sync = true,
+
+ .vsync_start_f1 = 4, .vsync_start_f2 = 5,
+ .vsync_len = 10,
+
+ .veq_ena = true, .veq_start_f1 = 4,
+ .veq_start_f2 = 4, .veq_len = 10,
+
+
+ .vi_end_f1 = 21, .vi_end_f2 = 22,
+ .nbr_end = 539,
+
+ .burst_ena = false,
+
+ .filter_table = filter_table,
+ },
+};
+
+static struct intel_tv *enc_to_intel_tv(struct drm_encoder *encoder)
+{
+ return container_of(encoder, struct intel_tv, base.base);
+}
+
+static struct intel_tv *intel_attached_tv(struct drm_connector *connector)
+{
+ return container_of(intel_attached_encoder(connector),
+ struct intel_tv,
+ base);
+}
+
+static void
+intel_tv_dpms(struct drm_encoder *encoder, int mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ switch (mode) {
+ case DRM_MODE_DPMS_ON:
+ I915_WRITE(TV_CTL, I915_READ(TV_CTL) | TV_ENC_ENABLE);
+ break;
+ case DRM_MODE_DPMS_STANDBY:
+ case DRM_MODE_DPMS_SUSPEND:
+ case DRM_MODE_DPMS_OFF:
+ I915_WRITE(TV_CTL, I915_READ(TV_CTL) & ~TV_ENC_ENABLE);
+ break;
+ }
+}
+
+static const struct tv_mode *
+intel_tv_mode_lookup(const char *tv_format)
+{
+ int i;
+
+ for (i = 0; i < sizeof(tv_modes) / sizeof(tv_modes[0]); i++) {
+ const struct tv_mode *tv_mode = &tv_modes[i];
+
+ if (!strcmp(tv_format, tv_mode->name))
+ return tv_mode;
+ }
+ return NULL;
+}
+
+static const struct tv_mode *
+intel_tv_mode_find(struct intel_tv *intel_tv)
+{
+ return intel_tv_mode_lookup(intel_tv->tv_format);
+}
+
+static enum drm_mode_status
+intel_tv_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ struct intel_tv *intel_tv = intel_attached_tv(connector);
+ const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv);
+
+ /* Ensure TV refresh is close to desired refresh */
+ if (tv_mode && abs(tv_mode->refresh - drm_mode_vrefresh(mode) * 1000)
+ < 1000)
+ return MODE_OK;
+
+ return MODE_CLOCK_RANGE;
+}
+
+
+static bool
+intel_tv_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_mode_config *drm_config = &dev->mode_config;
+ struct intel_tv *intel_tv = enc_to_intel_tv(encoder);
+ const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv);
+ struct drm_encoder *other_encoder;
+
+ if (!tv_mode)
+ return false;
+
+ /* FIXME: lock encoder list */
+ list_for_each_entry(other_encoder, &drm_config->encoder_list, head) {
+ if (other_encoder != encoder &&
+ other_encoder->crtc == encoder->crtc)
+ return false;
+ }
+
+ adjusted_mode->clock = tv_mode->clock;
+ return true;
+}
+
+static void
+intel_tv_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_crtc *crtc = encoder->crtc;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct intel_tv *intel_tv = enc_to_intel_tv(encoder);
+ const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv);
+ u32 tv_ctl;
+ u32 hctl1, hctl2, hctl3;
+ u32 vctl1, vctl2, vctl3, vctl4, vctl5, vctl6, vctl7;
+ u32 scctl1, scctl2, scctl3;
+ int i, j;
+ const struct video_levels *video_levels;
+ const struct color_conversion *color_conversion;
+ bool burst_ena;
+ int pipe = intel_crtc->pipe;
+
+ if (!tv_mode)
+ return; /* can't happen (mode_prepare prevents this) */
+
+ tv_ctl = I915_READ(TV_CTL);
+ tv_ctl &= TV_CTL_SAVE;
+
+ switch (intel_tv->type) {
+ default:
+ case DRM_MODE_CONNECTOR_Unknown:
+ case DRM_MODE_CONNECTOR_Composite:
+ tv_ctl |= TV_ENC_OUTPUT_COMPOSITE;
+ video_levels = tv_mode->composite_levels;
+ color_conversion = tv_mode->composite_color;
+ burst_ena = tv_mode->burst_ena;
+ break;
+ case DRM_MODE_CONNECTOR_Component:
+ tv_ctl |= TV_ENC_OUTPUT_COMPONENT;
+ video_levels = &component_levels;
+ if (tv_mode->burst_ena)
+ color_conversion = &sdtv_csc_yprpb;
+ else
+ color_conversion = &hdtv_csc_yprpb;
+ burst_ena = false;
+ break;
+ case DRM_MODE_CONNECTOR_SVIDEO:
+ tv_ctl |= TV_ENC_OUTPUT_SVIDEO;
+ video_levels = tv_mode->svideo_levels;
+ color_conversion = tv_mode->svideo_color;
+ burst_ena = tv_mode->burst_ena;
+ break;
+ }
+ hctl1 = (tv_mode->hsync_end << TV_HSYNC_END_SHIFT) |
+ (tv_mode->htotal << TV_HTOTAL_SHIFT);
+
+ hctl2 = (tv_mode->hburst_start << 16) |
+ (tv_mode->hburst_len << TV_HBURST_LEN_SHIFT);
+
+ if (burst_ena)
+ hctl2 |= TV_BURST_ENA;
+
+ hctl3 = (tv_mode->hblank_start << TV_HBLANK_START_SHIFT) |
+ (tv_mode->hblank_end << TV_HBLANK_END_SHIFT);
+
+ vctl1 = (tv_mode->nbr_end << TV_NBR_END_SHIFT) |
+ (tv_mode->vi_end_f1 << TV_VI_END_F1_SHIFT) |
+ (tv_mode->vi_end_f2 << TV_VI_END_F2_SHIFT);
+
+ vctl2 = (tv_mode->vsync_len << TV_VSYNC_LEN_SHIFT) |
+ (tv_mode->vsync_start_f1 << TV_VSYNC_START_F1_SHIFT) |
+ (tv_mode->vsync_start_f2 << TV_VSYNC_START_F2_SHIFT);
+
+ vctl3 = (tv_mode->veq_len << TV_VEQ_LEN_SHIFT) |
+ (tv_mode->veq_start_f1 << TV_VEQ_START_F1_SHIFT) |
+ (tv_mode->veq_start_f2 << TV_VEQ_START_F2_SHIFT);
+
+ if (tv_mode->veq_ena)
+ vctl3 |= TV_EQUAL_ENA;
+
+ vctl4 = (tv_mode->vburst_start_f1 << TV_VBURST_START_F1_SHIFT) |
+ (tv_mode->vburst_end_f1 << TV_VBURST_END_F1_SHIFT);
+
+ vctl5 = (tv_mode->vburst_start_f2 << TV_VBURST_START_F2_SHIFT) |
+ (tv_mode->vburst_end_f2 << TV_VBURST_END_F2_SHIFT);
+
+ vctl6 = (tv_mode->vburst_start_f3 << TV_VBURST_START_F3_SHIFT) |
+ (tv_mode->vburst_end_f3 << TV_VBURST_END_F3_SHIFT);
+
+ vctl7 = (tv_mode->vburst_start_f4 << TV_VBURST_START_F4_SHIFT) |
+ (tv_mode->vburst_end_f4 << TV_VBURST_END_F4_SHIFT);
+
+ if (intel_crtc->pipe == 1)
+ tv_ctl |= TV_ENC_PIPEB_SELECT;
+ tv_ctl |= tv_mode->oversample;
+
+ if (tv_mode->progressive)
+ tv_ctl |= TV_PROGRESSIVE;
+ if (tv_mode->trilevel_sync)
+ tv_ctl |= TV_TRILEVEL_SYNC;
+ if (tv_mode->pal_burst)
+ tv_ctl |= TV_PAL_BURST;
+
+ scctl1 = 0;
+ if (tv_mode->dda1_inc)
+ scctl1 |= TV_SC_DDA1_EN;
+ if (tv_mode->dda2_inc)
+ scctl1 |= TV_SC_DDA2_EN;
+ if (tv_mode->dda3_inc)
+ scctl1 |= TV_SC_DDA3_EN;
+ scctl1 |= tv_mode->sc_reset;
+ if (video_levels)
+ scctl1 |= video_levels->burst << TV_BURST_LEVEL_SHIFT;
+ scctl1 |= tv_mode->dda1_inc << TV_SCDDA1_INC_SHIFT;
+
+ scctl2 = tv_mode->dda2_size << TV_SCDDA2_SIZE_SHIFT |
+ tv_mode->dda2_inc << TV_SCDDA2_INC_SHIFT;
+
+ scctl3 = tv_mode->dda3_size << TV_SCDDA3_SIZE_SHIFT |
+ tv_mode->dda3_inc << TV_SCDDA3_INC_SHIFT;
+
+ /* Enable two fixes for the chips that need them. */
+ if (dev->pci_device < 0x2772)
+ tv_ctl |= TV_ENC_C0_FIX | TV_ENC_SDP_FIX;
+
+ I915_WRITE(TV_H_CTL_1, hctl1);
+ I915_WRITE(TV_H_CTL_2, hctl2);
+ I915_WRITE(TV_H_CTL_3, hctl3);
+ I915_WRITE(TV_V_CTL_1, vctl1);
+ I915_WRITE(TV_V_CTL_2, vctl2);
+ I915_WRITE(TV_V_CTL_3, vctl3);
+ I915_WRITE(TV_V_CTL_4, vctl4);
+ I915_WRITE(TV_V_CTL_5, vctl5);
+ I915_WRITE(TV_V_CTL_6, vctl6);
+ I915_WRITE(TV_V_CTL_7, vctl7);
+ I915_WRITE(TV_SC_CTL_1, scctl1);
+ I915_WRITE(TV_SC_CTL_2, scctl2);
+ I915_WRITE(TV_SC_CTL_3, scctl3);
+
+ if (color_conversion) {
+ I915_WRITE(TV_CSC_Y, (color_conversion->ry << 16) |
+ color_conversion->gy);
+ I915_WRITE(TV_CSC_Y2, (color_conversion->by << 16) |
+ color_conversion->ay);
+ I915_WRITE(TV_CSC_U, (color_conversion->ru << 16) |
+ color_conversion->gu);
+ I915_WRITE(TV_CSC_U2, (color_conversion->bu << 16) |
+ color_conversion->au);
+ I915_WRITE(TV_CSC_V, (color_conversion->rv << 16) |
+ color_conversion->gv);
+ I915_WRITE(TV_CSC_V2, (color_conversion->bv << 16) |
+ color_conversion->av);
+ }
+
+ if (INTEL_INFO(dev)->gen >= 4)
+ I915_WRITE(TV_CLR_KNOBS, 0x00404000);
+ else
+ I915_WRITE(TV_CLR_KNOBS, 0x00606000);
+
+ if (video_levels)
+ I915_WRITE(TV_CLR_LEVEL,
+ ((video_levels->black << TV_BLACK_LEVEL_SHIFT) |
+ (video_levels->blank << TV_BLANK_LEVEL_SHIFT)));
+ {
+ int pipeconf_reg = PIPECONF(pipe);
+ int dspcntr_reg = DSPCNTR(intel_crtc->plane);
+ int pipeconf = I915_READ(pipeconf_reg);
+ int dspcntr = I915_READ(dspcntr_reg);
+ int dspbase_reg = DSPADDR(intel_crtc->plane);
+ int xpos = 0x0, ypos = 0x0;
+ unsigned int xsize, ysize;
+ /* Pipe must be off here */
+ I915_WRITE(dspcntr_reg, dspcntr & ~DISPLAY_PLANE_ENABLE);
+ /* Flush the plane changes */
+ I915_WRITE(dspbase_reg, I915_READ(dspbase_reg));
+
+ /* Wait for vblank for the disable to take effect */
+ if (IS_GEN2(dev))
+ intel_wait_for_vblank(dev, intel_crtc->pipe);
+
+ I915_WRITE(pipeconf_reg, pipeconf & ~PIPECONF_ENABLE);
+ /* Wait for vblank for the disable to take effect. */
+ intel_wait_for_pipe_off(dev, intel_crtc->pipe);
+
+ /* Filter ctl must be set before TV_WIN_SIZE */
+ I915_WRITE(TV_FILTER_CTL_1, TV_AUTO_SCALE);
+ xsize = tv_mode->hblank_start - tv_mode->hblank_end;
+ if (tv_mode->progressive)
+ ysize = tv_mode->nbr_end + 1;
+ else
+ ysize = 2*tv_mode->nbr_end + 1;
+
+ xpos += intel_tv->margin[TV_MARGIN_LEFT];
+ ypos += intel_tv->margin[TV_MARGIN_TOP];
+ xsize -= (intel_tv->margin[TV_MARGIN_LEFT] +
+ intel_tv->margin[TV_MARGIN_RIGHT]);
+ ysize -= (intel_tv->margin[TV_MARGIN_TOP] +
+ intel_tv->margin[TV_MARGIN_BOTTOM]);
+ I915_WRITE(TV_WIN_POS, (xpos<<16)|ypos);
+ I915_WRITE(TV_WIN_SIZE, (xsize<<16)|ysize);
+
+ I915_WRITE(pipeconf_reg, pipeconf);
+ I915_WRITE(dspcntr_reg, dspcntr);
+ /* Flush the plane changes */
+ I915_WRITE(dspbase_reg, I915_READ(dspbase_reg));
+ }
+
+ j = 0;
+ for (i = 0; i < 60; i++)
+ I915_WRITE(TV_H_LUMA_0 + (i<<2), tv_mode->filter_table[j++]);
+ for (i = 0; i < 60; i++)
+ I915_WRITE(TV_H_CHROMA_0 + (i<<2), tv_mode->filter_table[j++]);
+ for (i = 0; i < 43; i++)
+ I915_WRITE(TV_V_LUMA_0 + (i<<2), tv_mode->filter_table[j++]);
+ for (i = 0; i < 43; i++)
+ I915_WRITE(TV_V_CHROMA_0 + (i<<2), tv_mode->filter_table[j++]);
+ I915_WRITE(TV_DAC, I915_READ(TV_DAC) & TV_DAC_SAVE);
+ I915_WRITE(TV_CTL, tv_ctl);
+}
+
+static const struct drm_display_mode reported_modes[] = {
+ {
+ .name = "NTSC 480i",
+ .clock = 107520,
+ .hdisplay = 1280,
+ .hsync_start = 1368,
+ .hsync_end = 1496,
+ .htotal = 1712,
+
+ .vdisplay = 1024,
+ .vsync_start = 1027,
+ .vsync_end = 1034,
+ .vtotal = 1104,
+ .type = DRM_MODE_TYPE_DRIVER,
+ },
+};
+
+/**
+ * Detects TV presence by checking for load.
+ *
+ * Requires that the current pipe's DPLL is active.
+
+ * \return true if TV is connected.
+ * \return false if TV is disconnected.
+ */
+static int
+intel_tv_detect_type(struct intel_tv *intel_tv,
+ struct drm_connector *connector)
+{
+ struct drm_encoder *encoder = &intel_tv->base.base;
+ struct drm_crtc *crtc = encoder->crtc;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+ struct drm_device *dev = encoder->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ u32 tv_ctl, save_tv_ctl;
+ u32 tv_dac, save_tv_dac;
+ int type;
+
+ /* Disable TV interrupts around load detect or we'll recurse */
+ if (connector->polled & DRM_CONNECTOR_POLL_HPD) {
+ mtx_lock(&dev_priv->irq_lock);
+ i915_disable_pipestat(dev_priv, 0,
+ PIPE_HOTPLUG_INTERRUPT_ENABLE |
+ PIPE_HOTPLUG_TV_INTERRUPT_ENABLE);
+ mtx_unlock(&dev_priv->irq_lock);
+ }
+
+ save_tv_dac = tv_dac = I915_READ(TV_DAC);
+ save_tv_ctl = tv_ctl = I915_READ(TV_CTL);
+
+ /* Poll for TV detection */
+ tv_ctl &= ~(TV_ENC_ENABLE | TV_TEST_MODE_MASK);
+ tv_ctl |= TV_TEST_MODE_MONITOR_DETECT;
+ if (intel_crtc->pipe == 1)
+ tv_ctl |= TV_ENC_PIPEB_SELECT;
+ else
+ tv_ctl &= ~TV_ENC_PIPEB_SELECT;
+
+ tv_dac &= ~(TVDAC_SENSE_MASK | DAC_A_MASK | DAC_B_MASK | DAC_C_MASK);
+ tv_dac |= (TVDAC_STATE_CHG_EN |
+ TVDAC_A_SENSE_CTL |
+ TVDAC_B_SENSE_CTL |
+ TVDAC_C_SENSE_CTL |
+ DAC_CTL_OVERRIDE |
+ DAC_A_0_7_V |
+ DAC_B_0_7_V |
+ DAC_C_0_7_V);
+
+ I915_WRITE(TV_CTL, tv_ctl);
+ I915_WRITE(TV_DAC, tv_dac);
+ POSTING_READ(TV_DAC);
+
+ intel_wait_for_vblank(intel_tv->base.base.dev,
+ to_intel_crtc(intel_tv->base.base.crtc)->pipe);
+
+ type = -1;
+ tv_dac = I915_READ(TV_DAC);
+ DRM_DEBUG_KMS("TV detected: %x, %x\n", tv_ctl, tv_dac);
+ /*
+ * A B C
+ * 0 1 1 Composite
+ * 1 0 X svideo
+ * 0 0 0 Component
+ */
+ if ((tv_dac & TVDAC_SENSE_MASK) == (TVDAC_B_SENSE | TVDAC_C_SENSE)) {
+ DRM_DEBUG_KMS("Detected Composite TV connection\n");
+ type = DRM_MODE_CONNECTOR_Composite;
+ } else if ((tv_dac & (TVDAC_A_SENSE|TVDAC_B_SENSE)) == TVDAC_A_SENSE) {
+ DRM_DEBUG_KMS("Detected S-Video TV connection\n");
+ type = DRM_MODE_CONNECTOR_SVIDEO;
+ } else if ((tv_dac & TVDAC_SENSE_MASK) == 0) {
+ DRM_DEBUG_KMS("Detected Component TV connection\n");
+ type = DRM_MODE_CONNECTOR_Component;
+ } else {
+ DRM_DEBUG_KMS("Unrecognised TV connection\n");
+ type = -1;
+ }
+
+ I915_WRITE(TV_DAC, save_tv_dac & ~TVDAC_STATE_CHG_EN);
+ I915_WRITE(TV_CTL, save_tv_ctl);
+
+ /* Restore interrupt config */
+ if (connector->polled & DRM_CONNECTOR_POLL_HPD) {
+ mtx_lock(&dev_priv->irq_lock);
+ i915_enable_pipestat(dev_priv, 0,
+ PIPE_HOTPLUG_INTERRUPT_ENABLE |
+ PIPE_HOTPLUG_TV_INTERRUPT_ENABLE);
+ mtx_unlock(&dev_priv->irq_lock);
+ }
+
+ return type;
+}
+
+/*
+ * Here we set accurate tv format according to connector type
+ * i.e Component TV should not be assigned by NTSC or PAL
+ */
+static void intel_tv_find_better_format(struct drm_connector *connector)
+{
+ struct intel_tv *intel_tv = intel_attached_tv(connector);
+ const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv);
+ int i;
+
+ if ((intel_tv->type == DRM_MODE_CONNECTOR_Component) ==
+ tv_mode->component_only)
+ return;
+
+
+ for (i = 0; i < sizeof(tv_modes) / sizeof(*tv_modes); i++) {
+ tv_mode = tv_modes + i;
+
+ if ((intel_tv->type == DRM_MODE_CONNECTOR_Component) ==
+ tv_mode->component_only)
+ break;
+ }
+
+ intel_tv->tv_format = tv_mode->name;
+ drm_connector_property_set_value(connector,
+ connector->dev->mode_config.tv_mode_property, i);
+}
+
+/**
+ * Detect the TV connection.
+ *
+ * Currently this always returns CONNECTOR_STATUS_UNKNOWN, as we need to be sure
+ * we have a pipe programmed in order to probe the TV.
+ */
+static enum drm_connector_status
+intel_tv_detect(struct drm_connector *connector, bool force)
+{
+ struct drm_display_mode mode;
+ struct intel_tv *intel_tv = intel_attached_tv(connector);
+ int type;
+
+ mode = reported_modes[0];
+ drm_mode_set_crtcinfo(&mode, 0);
+
+ if (intel_tv->base.base.crtc && intel_tv->base.base.crtc->enabled) {
+ type = intel_tv_detect_type(intel_tv, connector);
+ } else if (force) {
+ struct intel_load_detect_pipe tmp;
+
+ if (intel_get_load_detect_pipe(&intel_tv->base, connector,
+ &mode, &tmp)) {
+ type = intel_tv_detect_type(intel_tv, connector);
+ intel_release_load_detect_pipe(&intel_tv->base,
+ connector,
+ &tmp);
+ } else
+ return connector_status_unknown;
+ } else
+ return connector->status;
+
+ if (type < 0)
+ return connector_status_disconnected;
+
+ intel_tv->type = type;
+ intel_tv_find_better_format(connector);
+
+ return connector_status_connected;
+}
+
+static const struct input_res {
+ const char *name;
+ int w, h;
+} input_res_table[] = {
+ {"640x480", 640, 480},
+ {"800x600", 800, 600},
+ {"1024x768", 1024, 768},
+ {"1280x1024", 1280, 1024},
+ {"848x480", 848, 480},
+ {"1280x720", 1280, 720},
+ {"1920x1080", 1920, 1080},
+};
+
+/*
+ * Chose preferred mode according to line number of TV format
+ */
+static void
+intel_tv_chose_preferred_modes(struct drm_connector *connector,
+ struct drm_display_mode *mode_ptr)
+{
+ struct intel_tv *intel_tv = intel_attached_tv(connector);
+ const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv);
+
+ if (tv_mode->nbr_end < 480 && mode_ptr->vdisplay == 480)
+ mode_ptr->type |= DRM_MODE_TYPE_PREFERRED;
+ else if (tv_mode->nbr_end > 480) {
+ if (tv_mode->progressive == true && tv_mode->nbr_end < 720) {
+ if (mode_ptr->vdisplay == 720)
+ mode_ptr->type |= DRM_MODE_TYPE_PREFERRED;
+ } else if (mode_ptr->vdisplay == 1080)
+ mode_ptr->type |= DRM_MODE_TYPE_PREFERRED;
+ }
+}
+
+/**
+ * Stub get_modes function.
+ *
+ * This should probably return a set of fixed modes, unless we can figure out
+ * how to probe modes off of TV connections.
+ */
+
+static int
+intel_tv_get_modes(struct drm_connector *connector)
+{
+ struct drm_display_mode *mode_ptr;
+ struct intel_tv *intel_tv = intel_attached_tv(connector);
+ const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv);
+ int j, count = 0;
+ u64 tmp;
+
+ for (j = 0; j < DRM_ARRAY_SIZE(input_res_table);
+ j++) {
+ const struct input_res *input = &input_res_table[j];
+ unsigned int hactive_s = input->w;
+ unsigned int vactive_s = input->h;
+
+ if (tv_mode->max_srcw && input->w > tv_mode->max_srcw)
+ continue;
+
+ if (input->w > 1024 && (!tv_mode->progressive
+ && !tv_mode->component_only))
+ continue;
+
+ mode_ptr = drm_mode_create(connector->dev);
+ if (!mode_ptr)
+ continue;
+ strncpy(mode_ptr->name, input->name, DRM_DISPLAY_MODE_LEN);
+
+ mode_ptr->hdisplay = hactive_s;
+ mode_ptr->hsync_start = hactive_s + 1;
+ mode_ptr->hsync_end = hactive_s + 64;
+ if (mode_ptr->hsync_end <= mode_ptr->hsync_start)
+ mode_ptr->hsync_end = mode_ptr->hsync_start + 1;
+ mode_ptr->htotal = hactive_s + 96;
+
+ mode_ptr->vdisplay = vactive_s;
+ mode_ptr->vsync_start = vactive_s + 1;
+ mode_ptr->vsync_end = vactive_s + 32;
+ if (mode_ptr->vsync_end <= mode_ptr->vsync_start)
+ mode_ptr->vsync_end = mode_ptr->vsync_start + 1;
+ mode_ptr->vtotal = vactive_s + 33;
+
+ tmp = (u64) tv_mode->refresh * mode_ptr->vtotal;
+ tmp *= mode_ptr->htotal;
+ tmp = tmp / 1000000;
+ mode_ptr->clock = (int) tmp;
+
+ mode_ptr->type = DRM_MODE_TYPE_DRIVER;
+ intel_tv_chose_preferred_modes(connector, mode_ptr);
+ drm_mode_probed_add(connector, mode_ptr);
+ count++;
+ }
+
+ return count;
+}
+
+static void
+intel_tv_destroy(struct drm_connector *connector)
+{
+#if 0
+ drm_sysfs_connector_remove(connector);
+#endif
+ drm_connector_cleanup(connector);
+ free(connector, DRM_MEM_KMS);
+}
+
+
+static int
+intel_tv_set_property(struct drm_connector *connector, struct drm_property *property,
+ uint64_t val)
+{
+ struct drm_device *dev = connector->dev;
+ struct intel_tv *intel_tv = intel_attached_tv(connector);
+ struct drm_crtc *crtc = intel_tv->base.base.crtc;
+ int ret = 0;
+ bool changed = false;
+
+ ret = drm_connector_property_set_value(connector, property, val);
+ if (ret < 0)
+ goto out;
+
+ if (property == dev->mode_config.tv_left_margin_property &&
+ intel_tv->margin[TV_MARGIN_LEFT] != val) {
+ intel_tv->margin[TV_MARGIN_LEFT] = val;
+ changed = true;
+ } else if (property == dev->mode_config.tv_right_margin_property &&
+ intel_tv->margin[TV_MARGIN_RIGHT] != val) {
+ intel_tv->margin[TV_MARGIN_RIGHT] = val;
+ changed = true;
+ } else if (property == dev->mode_config.tv_top_margin_property &&
+ intel_tv->margin[TV_MARGIN_TOP] != val) {
+ intel_tv->margin[TV_MARGIN_TOP] = val;
+ changed = true;
+ } else if (property == dev->mode_config.tv_bottom_margin_property &&
+ intel_tv->margin[TV_MARGIN_BOTTOM] != val) {
+ intel_tv->margin[TV_MARGIN_BOTTOM] = val;
+ changed = true;
+ } else if (property == dev->mode_config.tv_mode_property) {
+ if (val >= DRM_ARRAY_SIZE(tv_modes)) {
+ ret = -EINVAL;
+ goto out;
+ }
+ if (!strcmp(intel_tv->tv_format, tv_modes[val].name))
+ goto out;
+
+ intel_tv->tv_format = tv_modes[val].name;
+ changed = true;
+ } else {
+ ret = -EINVAL;
+ goto out;
+ }
+
+ if (changed && crtc)
+ drm_crtc_helper_set_mode(crtc, &crtc->mode, crtc->x,
+ crtc->y, crtc->fb);
+out:
+ return ret;
+}
+
+static const struct drm_encoder_helper_funcs intel_tv_helper_funcs = {
+ .dpms = intel_tv_dpms,
+ .mode_fixup = intel_tv_mode_fixup,
+ .prepare = intel_encoder_prepare,
+ .mode_set = intel_tv_mode_set,
+ .commit = intel_encoder_commit,
+};
+
+static const struct drm_connector_funcs intel_tv_connector_funcs = {
+ .dpms = drm_helper_connector_dpms,
+ .detect = intel_tv_detect,
+ .destroy = intel_tv_destroy,
+ .set_property = intel_tv_set_property,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+};
+
+static const struct drm_connector_helper_funcs intel_tv_connector_helper_funcs = {
+ .mode_valid = intel_tv_mode_valid,
+ .get_modes = intel_tv_get_modes,
+ .best_encoder = intel_best_encoder,
+};
+
+static const struct drm_encoder_funcs intel_tv_enc_funcs = {
+ .destroy = intel_encoder_destroy,
+};
+
+/*
+ * Enumerate the child dev array parsed from VBT to check whether
+ * the integrated TV is present.
+ * If it is present, return 1.
+ * If it is not present, return false.
+ * If no child dev is parsed from VBT, it assumes that the TV is present.
+ */
+static int tv_is_present_in_vbt(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct child_device_config *p_child;
+ int i, ret;
+
+ if (!dev_priv->child_dev_num)
+ return 1;
+
+ ret = 0;
+ for (i = 0; i < dev_priv->child_dev_num; i++) {
+ p_child = dev_priv->child_dev + i;
+ /*
+ * If the device type is not TV, continue.
+ */
+ if (p_child->device_type != DEVICE_TYPE_INT_TV &&
+ p_child->device_type != DEVICE_TYPE_TV)
+ continue;
+ /* Only when the addin_offset is non-zero, it is regarded
+ * as present.
+ */
+ if (p_child->addin_offset) {
+ ret = 1;
+ break;
+ }
+ }
+ return ret;
+}
+
+void
+intel_tv_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_connector *connector;
+ struct intel_tv *intel_tv;
+ struct intel_encoder *intel_encoder;
+ struct intel_connector *intel_connector;
+ u32 tv_dac_on, tv_dac_off, save_tv_dac;
+ char *tv_format_names[DRM_ARRAY_SIZE(tv_modes)];
+ int i, initial_mode = 0;
+
+ if ((I915_READ(TV_CTL) & TV_FUSE_STATE_MASK) == TV_FUSE_STATE_DISABLED)
+ return;
+
+ if (!tv_is_present_in_vbt(dev)) {
+ DRM_DEBUG_KMS("Integrated TV is not present.\n");
+ return;
+ }
+ /* Even if we have an encoder we may not have a connector */
+ if (!dev_priv->int_tv_support)
+ return;
+
+ /*
+ * Sanity check the TV output by checking to see if the
+ * DAC register holds a value
+ */
+ save_tv_dac = I915_READ(TV_DAC);
+
+ I915_WRITE(TV_DAC, save_tv_dac | TVDAC_STATE_CHG_EN);
+ tv_dac_on = I915_READ(TV_DAC);
+
+ I915_WRITE(TV_DAC, save_tv_dac & ~TVDAC_STATE_CHG_EN);
+ tv_dac_off = I915_READ(TV_DAC);
+
+ I915_WRITE(TV_DAC, save_tv_dac);
+
+ /*
+ * If the register does not hold the state change enable
+ * bit, (either as a 0 or a 1), assume it doesn't really
+ * exist
+ */
+ if ((tv_dac_on & TVDAC_STATE_CHG_EN) == 0 ||
+ (tv_dac_off & TVDAC_STATE_CHG_EN) != 0)
+ return;
+
+ intel_tv = malloc(sizeof(struct intel_tv), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+ intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+
+ intel_encoder = &intel_tv->base;
+ connector = &intel_connector->base;
+
+ /* The documentation, for the older chipsets at least, recommend
+ * using a polling method rather than hotplug detection for TVs.
+ * This is because in order to perform the hotplug detection, the PLLs
+ * for the TV must be kept alive increasing power drain and starving
+ * bandwidth from other encoders. Notably for instance, it causes
+ * pipe underruns on Crestline when this encoder is supposedly idle.
+ *
+ * More recent chipsets favour HDMI rather than integrated S-Video.
+ */
+ connector->polled = DRM_CONNECTOR_POLL_CONNECT;
+
+ drm_connector_init(dev, connector, &intel_tv_connector_funcs,
+ DRM_MODE_CONNECTOR_SVIDEO);
+
+ drm_encoder_init(dev, &intel_encoder->base, &intel_tv_enc_funcs,
+ DRM_MODE_ENCODER_TVDAC);
+
+ intel_connector_attach_encoder(intel_connector, intel_encoder);
+ intel_encoder->type = INTEL_OUTPUT_TVOUT;
+ intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
+ intel_encoder->clone_mask = (1 << INTEL_TV_CLONE_BIT);
+ intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));
+ intel_encoder->base.possible_clones = (1 << INTEL_OUTPUT_TVOUT);
+ intel_tv->type = DRM_MODE_CONNECTOR_Unknown;
+
+ /* BIOS margin values */
+ intel_tv->margin[TV_MARGIN_LEFT] = 54;
+ intel_tv->margin[TV_MARGIN_TOP] = 36;
+ intel_tv->margin[TV_MARGIN_RIGHT] = 46;
+ intel_tv->margin[TV_MARGIN_BOTTOM] = 37;
+
+ intel_tv->tv_format = tv_modes[initial_mode].name;
+
+ drm_encoder_helper_add(&intel_encoder->base, &intel_tv_helper_funcs);
+ drm_connector_helper_add(connector, &intel_tv_connector_helper_funcs);
+ connector->interlace_allowed = false;
+ connector->doublescan_allowed = false;
+
+ /* Create TV properties then attach current values */
+ for (i = 0; i < DRM_ARRAY_SIZE(tv_modes); i++)
+ tv_format_names[i] = __DECONST(char *, tv_modes[i].name);
+ drm_mode_create_tv_properties(dev,
+ DRM_ARRAY_SIZE(tv_modes),
+ tv_format_names);
+
+ drm_connector_attach_property(connector, dev->mode_config.tv_mode_property,
+ initial_mode);
+ drm_connector_attach_property(connector,
+ dev->mode_config.tv_left_margin_property,
+ intel_tv->margin[TV_MARGIN_LEFT]);
+ drm_connector_attach_property(connector,
+ dev->mode_config.tv_top_margin_property,
+ intel_tv->margin[TV_MARGIN_TOP]);
+ drm_connector_attach_property(connector,
+ dev->mode_config.tv_right_margin_property,
+ intel_tv->margin[TV_MARGIN_RIGHT]);
+ drm_connector_attach_property(connector,
+ dev->mode_config.tv_bottom_margin_property,
+ intel_tv->margin[TV_MARGIN_BOTTOM]);
+#if 0
+ drm_sysfs_connector_add(connector);
+#endif
+}
diff --git a/sys/dev/esp/ncr53c9x.c b/sys/dev/esp/ncr53c9x.c
index 93ad3371e80f..0cc4387bf8ce 100644
--- a/sys/dev/esp/ncr53c9x.c
+++ b/sys/dev/esp/ncr53c9x.c
@@ -1504,7 +1504,7 @@ ncr53c9x_dequeue(struct ncr53c9x_softc *sc, struct ncr53c9x_ecb *ecb)
li = TINFO_LUN(ti, lun);
#ifdef DIAGNOSTIC
if (li == NULL || li->lun != lun)
- panic("%s: lun %qx for ecb %p does not exist", __func__,
+ panic("%s: lun %llx for ecb %p does not exist", __func__,
(long long)lun, ecb);
#endif
if (li->untagged == ecb) {
@@ -1515,7 +1515,7 @@ ncr53c9x_dequeue(struct ncr53c9x_softc *sc, struct ncr53c9x_ecb *ecb)
#ifdef DIAGNOSTIC
if (li->queued[ecb->tag[1]] != NULL &&
(li->queued[ecb->tag[1]] != ecb))
- panic("%s: slot %d for lun %qx has %p instead of ecb "
+ panic("%s: slot %d for lun %llx has %p instead of ecb "
"%p", __func__, ecb->tag[1], (long long)lun,
li->queued[ecb->tag[1]], ecb);
#endif
diff --git a/sys/dev/fdt/fdt_common.h b/sys/dev/fdt/fdt_common.h
index 0bedb91916a1..7947428eb171 100644
--- a/sys/dev/fdt/fdt_common.h
+++ b/sys/dev/fdt/fdt_common.h
@@ -32,6 +32,7 @@
#ifndef _FDT_COMMON_H_
#define _FDT_COMMON_H_
+#include <sys/slicer.h>
#include <contrib/libfdt/libfdt_env.h>
#include <dev/ofw/ofw_bus.h>
#include <machine/fdt.h>
diff --git a/sys/dev/fdt/fdt_pci.c b/sys/dev/fdt/fdt_pci.c
index 7f0ddd37e3ef..68cf89811f3e 100644
--- a/sys/dev/fdt/fdt_pci.c
+++ b/sys/dev/fdt/fdt_pci.c
@@ -100,6 +100,14 @@ fdt_pci_ranges_decode(phandle_t node, struct fdt_pci_range *io_space,
size_cells);
tuples = len / tuple_size;
+ /*
+ * Initialize the ranges so that we don't have to worry about
+ * having them all defined in the FDT. In particular, it is
+ * perfectly fine not to want I/O space on PCI busses.
+ */
+ bzero(io_space, sizeof(*io_space));
+ bzero(mem_space, sizeof(*mem_space));
+
rangesptr = &ranges[0];
offset_cells = 0;
for (i = 0; i < tuples; i++) {
diff --git a/sys/dev/fdt/fdt_slicer.c b/sys/dev/fdt/fdt_slicer.c
new file mode 100644
index 000000000000..d32d1595287c
--- /dev/null
+++ b/sys/dev/fdt/fdt_slicer.c
@@ -0,0 +1,115 @@
+/*-
+ * Copyright (c) 2012 Semihalf.
+ * 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/systm.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/slicer.h>
+
+#include <dev/fdt/fdt_common.h>
+
+#define DEBUG
+#undef DEBUG
+
+#ifdef DEBUG
+#define debugf(fmt, args...) do { printf("%s(): ", __func__); \
+ printf(fmt,##args); } while (0)
+#else
+#define debugf(fmt, args...)
+#endif
+
+int
+flash_fill_slices(device_t dev, struct flash_slice *slices, int *slices_num)
+{
+ char *slice_name;
+ phandle_t dt_node, dt_child;
+ u_long base, size;
+ int i;
+ ssize_t name_len;
+
+ /*
+ * We assume the caller provides buffer for FLASH_SLICES_MAX_NUM
+ * flash_slice structures.
+ */
+ if (slices == NULL) {
+ *slices_num = 0;
+ return (ENOMEM);
+ }
+
+ dt_node = ofw_bus_get_node(dev);
+ for (dt_child = OF_child(dt_node), i = 0; dt_child != 0;
+ dt_child = OF_peer(dt_child)) {
+
+ if (i == FLASH_SLICES_MAX_NUM) {
+ debugf("not enough buffer for slice i=%d\n", i);
+ break;
+ }
+
+ /*
+ * Retrieve start and size of the slice.
+ */
+ if (fdt_regsize(dt_child, &base, &size) != 0) {
+ debugf("error during processing reg property, i=%d\n",
+ i);
+ continue;
+ }
+
+ if (size == 0) {
+ debugf("slice i=%d with no size\n", i);
+ continue;
+ }
+
+ /*
+ * Retrieve label.
+ */
+ name_len = OF_getprop_alloc(dt_child, "label", sizeof(char),
+ (void **)&slice_name);
+ if (name_len <= 0) {
+ /* Use node name if no label defined */
+ name_len = OF_getprop_alloc(dt_child, "name", sizeof(char),
+ (void **)&slice_name);
+ if (name_len <= 0) {
+ debugf("slice i=%d with no name\n", i);
+ slice_name = NULL;
+ }
+ }
+
+ /*
+ * Fill slice entry data.
+ */
+ slices[i].base = base;
+ slices[i].size = size;
+ slices[i].label = slice_name;
+ i++;
+ }
+
+ *slices_num = i;
+ return (0);
+}
diff --git a/sys/dev/hwpmc/hwpmc_arm.c b/sys/dev/hwpmc/hwpmc_arm.c
index 86cfaf3cd93a..fc7616542185 100644
--- a/sys/dev/hwpmc/hwpmc_arm.c
+++ b/sys/dev/hwpmc/hwpmc_arm.c
@@ -38,38 +38,47 @@ __FBSDID("$FreeBSD$");
struct pmc_mdep *
pmc_md_initialize()
{
+#ifdef CPU_XSCALE_IXP425
if (cpu_class == CPU_CLASS_XSCALE)
return pmc_xscale_initialize();
else
+#endif
return NULL;
}
void
pmc_md_finalize(struct pmc_mdep *md)
{
+#ifdef CPU_XSCALE_IXP425
if (cpu_class == CPU_CLASS_XSCALE)
pmc_xscale_finalize(md);
else
KASSERT(0, ("[arm,%d] Unknown CPU Class 0x%x", __LINE__,
cpu_class));
+#endif
+}
+
+static int
+pmc_save_callchain(uintptr_t *cc, int maxsamples,
+ struct trapframe *tf)
+{
+
+ *cc = PMC_TRAPFRAME_TO_PC(tf);
+ return (1);
}
int
pmc_save_kernel_callchain(uintptr_t *cc, int maxsamples,
struct trapframe *tf)
{
- (void) cc;
- (void) maxsamples;
- (void) tf;
- return (0);
+
+ return pmc_save_callchain(cc, maxsamples, tf);
}
int
pmc_save_user_callchain(uintptr_t *cc, int maxsamples,
struct trapframe *tf)
{
- (void) cc;
- (void) maxsamples;
- (void) tf;
- return (0);
+
+ return pmc_save_callchain(cc, maxsamples, tf);
}
diff --git a/sys/dev/iicbus/ds1374.c b/sys/dev/iicbus/ds1374.c
index 2ee0c5775af5..917e1b48b9ad 100644
--- a/sys/dev/iicbus/ds1374.c
+++ b/sys/dev/iicbus/ds1374.c
@@ -39,12 +39,6 @@ __FBSDID("$FreeBSD$");
#include <sys/resource.h>
#include <sys/rman.h>
-#include <mips/include/bus.h>
-#include <mips/include/cpu.h>
-#include <mips/include/cpufunc.h>
-#include <mips/include/frame.h>
-#include <mips/include/resource.h>
-
#include <dev/iicbus/iiconf.h>
#include <dev/iicbus/iicbus.h>
diff --git a/sys/dev/isci/isci.h b/sys/dev/isci/isci.h
index d6ad93cef067..cdba7de1806b 100644
--- a/sys/dev/isci/isci.h
+++ b/sys/dev/isci/isci.h
@@ -30,6 +30,9 @@
* $FreeBSD$
*/
+#ifndef _ISCI_H
+#define _ISCI_H
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
@@ -86,7 +89,31 @@ struct ISCI_REMOTE_DEVICE {
BOOL is_resetting;
uint32_t frozen_lun_mask;
SCI_FAST_LIST_ELEMENT_T pending_device_reset_element;
+
+ /*
+ * This queue maintains CCBs that have been returned with
+ * SCI_IO_FAILURE_INVALID_STATE from the SCI layer. These CCBs
+ * need to be retried, but we cannot return CAM_REQUEUE_REQ because
+ * this status gets passed all the way back up to users of the pass(4)
+ * interface and breaks things like smartctl. So instead, we queue
+ * these CCBs internally.
+ */
TAILQ_HEAD(,ccb_hdr) queued_ccbs;
+
+ /*
+ * Marker denoting this remote device needs its first queued ccb to
+ * be retried.
+ */
+ BOOL release_queued_ccb;
+
+ /*
+ * Points to a CCB in the queue that is currently being processed by
+ * SCIL. This allows us to keep in flight CCBs in the queue so as to
+ * maintain ordering (i.e. in case we retry an I/O and then find out
+ * it needs to be retried again - it just keeps its same place in the
+ * queue.
+ */
+ union ccb * queued_ccb_in_progress;
};
struct ISCI_DOMAIN {
@@ -126,6 +153,7 @@ struct ISCI_CONTROLLER
BOOL has_been_scanned;
uint32_t initial_discovery_mask;
BOOL is_frozen;
+ BOOL release_queued_ccbs;
uint8_t *remote_device_memory;
struct ISCI_MEMORY cached_controller_memory;
struct ISCI_MEMORY uncached_controller_memory;
@@ -291,6 +319,8 @@ int isci_controller_attach_to_cam(struct ISCI_CONTROLLER *controller);
void isci_controller_start(void *controller);
+void isci_controller_release_queued_ccbs(struct ISCI_CONTROLLER *controller);
+
void isci_domain_construct(struct ISCI_DOMAIN *domain, uint32_t domain_index,
struct ISCI_CONTROLLER *controller);
@@ -301,3 +331,5 @@ void isci_log_message(uint32_t verbosity, char *log_message_prefix,
char *log_message, ...);
extern uint32_t g_isci_debug_level;
+
+#endif /* #ifndef _ISCI_H */
diff --git a/sys/dev/isci/isci_controller.c b/sys/dev/isci/isci_controller.c
index a4b7cfe9dae1..49785cbfd158 100644
--- a/sys/dev/isci/isci_controller.c
+++ b/sys/dev/isci/isci_controller.c
@@ -201,6 +201,7 @@ void isci_controller_construct(struct ISCI_CONTROLLER *controller,
controller->is_started = FALSE;
controller->is_frozen = FALSE;
+ controller->release_queued_ccbs = FALSE;
controller->sim = NULL;
controller->initial_discovery_mask = 0;
@@ -431,6 +432,8 @@ int isci_controller_allocate_memory(struct ISCI_CONTROLLER *controller)
sci_fast_list_element_init(remote_device,
&remote_device->pending_device_reset_element);
TAILQ_INIT(&remote_device->queued_ccbs);
+ remote_device->release_queued_ccb = FALSE;
+ remote_device->queued_ccb_in_progress = NULL;
/*
* For the first SCI_MAX_DOMAINS device objects, do not put
@@ -694,3 +697,47 @@ void isci_action(struct cam_sim *sim, union ccb *ccb)
}
}
+/*
+ * Unfortunately, SCIL doesn't cleanly handle retry conditions.
+ * CAM_REQUEUE_REQ works only when no one is using the pass(4) interface. So
+ * when SCIL denotes an I/O needs to be retried (typically because of mixing
+ * tagged/non-tagged ATA commands, or running out of NCQ slots), we queue
+ * these I/O internally. Once SCIL completes an I/O to this device, or we get
+ * a ready notification, we will retry the first I/O on the queue.
+ * Unfortunately, SCIL also doesn't cleanly handle starting the new I/O within
+ * the context of the completion handler, so we need to retry these I/O after
+ * the completion handler is done executing.
+ */
+void
+isci_controller_release_queued_ccbs(struct ISCI_CONTROLLER *controller)
+{
+ struct ISCI_REMOTE_DEVICE *dev;
+ struct ccb_hdr *ccb_h;
+ int dev_idx;
+
+ KASSERT(mtx_owned(&controller->lock), ("controller lock not owned"));
+
+ controller->release_queued_ccbs = FALSE;
+ for (dev_idx = 0;
+ dev_idx < SCI_MAX_REMOTE_DEVICES;
+ dev_idx++) {
+
+ dev = controller->remote_device[dev_idx];
+ if (dev != NULL &&
+ dev->release_queued_ccb == TRUE &&
+ dev->queued_ccb_in_progress == NULL) {
+ dev->release_queued_ccb = FALSE;
+ ccb_h = TAILQ_FIRST(&dev->queued_ccbs);
+
+ if (ccb_h == NULL)
+ continue;
+
+ isci_log_message(1, "ISCI", "release %p %x\n", ccb_h,
+ ((union ccb *)ccb_h)->csio.cdb_io.cdb_bytes[0]);
+
+ dev->queued_ccb_in_progress = (union ccb *)ccb_h;
+ isci_io_request_execute_scsi_io(
+ (union ccb *)ccb_h, controller);
+ }
+ }
+}
diff --git a/sys/dev/isci/isci_interrupt.c b/sys/dev/isci/isci_interrupt.c
index e020f831810e..52c64f7c92ef 100644
--- a/sys/dev/isci/isci_interrupt.c
+++ b/sys/dev/isci/isci_interrupt.c
@@ -177,6 +177,9 @@ isci_interrupt_legacy_handler(void *arg)
if (interrupt_handler(scic_controller_handle)) {
mtx_lock(&controller->lock);
completion_handler(scic_controller_handle);
+ if (controller->release_queued_ccbs == TRUE)
+ isci_controller_release_queued_ccbs(
+ controller);
mtx_unlock(&controller->lock);
}
}
@@ -204,6 +207,13 @@ isci_interrupt_msix_handler(void *arg)
if (interrupt_handler(scic_controller_handle)) {
mtx_lock(&controller->lock);
completion_handler(scic_controller_handle);
+ /*
+ * isci_controller_release_queued_ccb() is a relatively
+ * expensive routine, so we don't call it until the controller
+ * level flag is set to TRUE.
+ */
+ if (controller->release_queued_ccbs == TRUE)
+ isci_controller_release_queued_ccbs(controller);
mtx_unlock(&controller->lock);
}
}
diff --git a/sys/dev/isci/isci_io_request.c b/sys/dev/isci/isci_io_request.c
index 985a2e4b67a2..67ed1da6206b 100644
--- a/sys/dev/isci/isci_io_request.c
+++ b/sys/dev/isci/isci_io_request.c
@@ -223,7 +223,7 @@ isci_io_request_complete(SCI_CONTROLLER_HANDLE_T scif_controller,
(struct ISCI_REQUEST *)isci_request);
if (complete_ccb) {
- if (ccb->ccb_h.status != CAM_REQ_CMP) {
+ if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
/* ccb will be completed with some type of non-success
* status. So temporarily freeze the queue until the
* upper layers can act on the status. The
@@ -234,6 +234,26 @@ isci_io_request_complete(SCI_CONTROLLER_HANDLE_T scif_controller,
xpt_freeze_devq(ccb->ccb_h.path, 1);
}
+ if (ccb->ccb_h.status & CAM_SIM_QUEUED) {
+
+ KASSERT(ccb == isci_remote_device->queued_ccb_in_progress,
+ ("multiple internally queued ccbs in flight"));
+
+ TAILQ_REMOVE(&isci_remote_device->queued_ccbs,
+ &ccb->ccb_h, sim_links.tqe);
+ ccb->ccb_h.status &= ~CAM_SIM_QUEUED;
+
+ /*
+ * This CCB that was in the queue was completed, so
+ * set the in_progress pointer to NULL denoting that
+ * we can retry another CCB from the queue. We only
+ * allow one CCB at a time from the queue to be
+ * in progress so that we can effectively maintain
+ * ordering.
+ */
+ isci_remote_device->queued_ccb_in_progress = NULL;
+ }
+
if (isci_remote_device->frozen_lun_mask != 0) {
isci_remote_device_release_device_queue(isci_remote_device);
}
@@ -248,11 +268,30 @@ isci_io_request_complete(SCI_CONTROLLER_HANDLE_T scif_controller,
isci_remote_device_freeze_lun_queue(isci_remote_device,
ccb->ccb_h.target_lun);
- isci_log_message(1, "ISCI", "queue %p %x\n", ccb,
- ccb->csio.cdb_io.cdb_bytes[0]);
- ccb->ccb_h.status |= CAM_SIM_QUEUED;
- TAILQ_INSERT_TAIL(&isci_remote_device->queued_ccbs,
- &ccb->ccb_h, sim_links.tqe);
+ if (ccb->ccb_h.status & CAM_SIM_QUEUED) {
+
+ KASSERT(ccb == isci_remote_device->queued_ccb_in_progress,
+ ("multiple internally queued ccbs in flight"));
+
+ /*
+ * Do nothing, CCB is already on the device's queue.
+ * We leave it on the queue, to be retried again
+ * next time a CCB on this device completes, or we
+ * get a ready notification for this device.
+ */
+ isci_log_message(1, "ISCI", "already queued %p %x\n",
+ ccb, ccb->csio.cdb_io.cdb_bytes[0]);
+
+ isci_remote_device->queued_ccb_in_progress = NULL;
+
+ } else {
+ isci_log_message(1, "ISCI", "queue %p %x\n", ccb,
+ ccb->csio.cdb_io.cdb_bytes[0]);
+ ccb->ccb_h.status |= CAM_SIM_QUEUED;
+
+ TAILQ_INSERT_TAIL(&isci_remote_device->queued_ccbs,
+ &ccb->ccb_h, sim_links.tqe);
+ }
}
}
diff --git a/sys/dev/isci/isci_remote_device.c b/sys/dev/isci/isci_remote_device.c
index c9434f863261..31fcbfb75cbc 100644
--- a/sys/dev/isci/isci_remote_device.c
+++ b/sys/dev/isci/isci_remote_device.c
@@ -297,14 +297,18 @@ isci_remote_device_release_device_queue(
for (lun = 0; lun < ISCI_MAX_LUN; lun++)
isci_remote_device_release_lun_queue(device, lun);
} else {
- struct ccb_hdr *ccb_h;
-
- ccb_h = TAILQ_FIRST(&device->queued_ccbs);
- TAILQ_REMOVE(&device->queued_ccbs, ccb_h, sim_links.tqe);
- ccb_h->status &= ~CAM_SIM_QUEUED;
- isci_log_message(1, "ISCI", "release %p %x\n", ccb_h,
- ((union ccb*)ccb_h)->csio.cdb_io.cdb_bytes[0]);
- isci_io_request_execute_scsi_io((union ccb *)ccb_h,
- device->domain->controller);
+ /*
+ * We cannot unfreeze the devq, because there are still
+ * CCBs in our internal queue that need to be processed
+ * first. Mark this device, and the controller, so that
+ * the first CCB in this device's internal queue will be
+ * resubmitted after the current completion context
+ * unwinds.
+ */
+ device->release_queued_ccb = TRUE;
+ device->domain->controller->release_queued_ccbs = TRUE;
+
+ isci_log_message(1, "ISCI", "schedule %p for release\n",
+ device);
}
}
diff --git a/sys/dev/iwn/if_iwn.c b/sys/dev/iwn/if_iwn.c
index b4861733a860..02185d49db7b 100644
--- a/sys/dev/iwn/if_iwn.c
+++ b/sys/dev/iwn/if_iwn.c
@@ -92,6 +92,9 @@ static const struct iwn_ident iwn_ident_table[] = {
{ 0x8086, 0x0885, "Intel Centrino Wireless-N + WiMAX 6150" },
{ 0x8086, 0x0886, "Intel Centrino Wireless-N + WiMAX 6150" },
{ 0x8086, 0x0896, "Intel Centrino Wireless-N 130" },
+ { 0x8086, 0x0887, "Intel Centrino Wireless-N 130" },
+ { 0x8086, 0x08ae, "Intel Centrino Wireless-N 100" },
+ { 0x8086, 0x08af, "Intel Centrino Wireless-N 100" },
{ 0x8086, 0x4229, "Intel Wireless WiFi Link 4965" },
{ 0x8086, 0x422b, "Intel Centrino Ultimate-N 6300" },
{ 0x8086, 0x422c, "Intel Centrino Advanced-N 6200" },
@@ -2764,7 +2767,6 @@ iwn_ampdu_tx_done(struct iwn_softc *sc, int qid, int idx, int nframes,
struct mbuf *m;
struct iwn_node *wn;
struct ieee80211_node *ni;
- struct ieee80211vap *vap;
struct ieee80211_tx_ampdu *tap;
uint64_t bitmap;
uint32_t *status = stat;
@@ -2823,7 +2825,6 @@ iwn_ampdu_tx_done(struct iwn_softc *sc, int qid, int idx, int nframes,
bus_dmamap_unload(ring->data_dmat, data->map);
m = data->m, data->m = NULL;
ni = data->ni, data->ni = NULL;
- vap = ni->ni_vap;
if (m->m_flags & M_TXCB)
ieee80211_process_callback(ni, m, 1);
@@ -3311,6 +3312,11 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
if (m->m_flags & M_AMPDU_MPDU) {
struct ieee80211_tx_ampdu *tap = &ni->ni_tx_ampdu[ac];
+ if (!IEEE80211_AMPDU_RUNNING(tap)) {
+ m_freem(m);
+ return EINVAL;
+ }
+
ac = *(int *)tap->txa_private;
*(uint16_t *)wh->i_seq =
htole16(ni->ni_txseqs[tid] << IEEE80211_SEQ_SEQ_SHIFT);
diff --git a/sys/dev/ixgbe/ixgbe.c b/sys/dev/ixgbe/ixgbe.c
index 961e53eee13f..091c3058b7bc 100644
--- a/sys/dev/ixgbe/ixgbe.c
+++ b/sys/dev/ixgbe/ixgbe.c
@@ -162,7 +162,7 @@ static void ixgbe_dma_free(struct adapter *, struct ixgbe_dma_alloc *);
static void ixgbe_add_rx_process_limit(struct adapter *, const char *,
const char *, int *, int);
static bool ixgbe_tx_ctx_setup(struct tx_ring *, struct mbuf *);
-static bool ixgbe_tso_setup(struct tx_ring *, struct mbuf *, u32 *);
+static bool ixgbe_tso_setup(struct tx_ring *, struct mbuf *, u32 *, u32 *);
static void ixgbe_set_ivar(struct adapter *, u8, u8, s8);
static void ixgbe_configure_ivars(struct adapter *);
static u8 * ixgbe_mc_array_itr(struct ixgbe_hw *, u8 **, u32 *);
@@ -322,7 +322,7 @@ static int fdir_pballoc = 1;
* be a reference on how to implement netmap support in a driver.
* Additional comments are in ixgbe_netmap.h .
*
- * <dev/netma/ixgbe_netmap.h> contains functions for netmap support
+ * <dev/netmap/ixgbe_netmap.h> contains functions for netmap support
* that extend the standard driver.
*/
#include <dev/netmap/ixgbe_netmap.h>
@@ -997,6 +997,8 @@ ixgbe_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
ifp->if_capenable ^= IFCAP_HWCSUM;
if (mask & IFCAP_TSO4)
ifp->if_capenable ^= IFCAP_TSO4;
+ if (mask & IFCAP_TSO6)
+ ifp->if_capenable ^= IFCAP_TSO6;
if (mask & IFCAP_LRO)
ifp->if_capenable ^= IFCAP_LRO;
if (mask & IFCAP_VLAN_HWTAGGING)
@@ -1061,7 +1063,7 @@ ixgbe_init_locked(struct adapter *adapter)
/* Set the various hardware offload abilities */
ifp->if_hwassist = 0;
- if (ifp->if_capenable & IFCAP_TSO4)
+ if (ifp->if_capenable & IFCAP_TSO)
ifp->if_hwassist |= CSUM_TSO;
if (ifp->if_capenable & IFCAP_TXCSUM) {
ifp->if_hwassist |= (CSUM_TCP | CSUM_UDP);
@@ -1767,9 +1769,8 @@ ixgbe_xmit(struct tx_ring *txr, struct mbuf **m_headp)
** a packet.
*/
if (m_head->m_pkthdr.csum_flags & CSUM_TSO) {
- if (ixgbe_tso_setup(txr, m_head, &paylen)) {
+ if (ixgbe_tso_setup(txr, m_head, &paylen, &olinfo_status)) {
cmd_type_len |= IXGBE_ADVTXD_DCMD_TSE;
- olinfo_status |= IXGBE_TXD_POPTS_IXSM << 8;
olinfo_status |= IXGBE_TXD_POPTS_TXSM << 8;
olinfo_status |= paylen << IXGBE_ADVTXD_PAYLEN_SHIFT;
++adapter->tso_tx;
@@ -2562,7 +2563,7 @@ ixgbe_setup_interface(device_t dev, struct adapter *adapter)
*/
ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
- ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_TSO4 | IFCAP_VLAN_HWCSUM;
+ ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_TSO | IFCAP_VLAN_HWCSUM;
ifp->if_capabilities |= IFCAP_JUMBO_MTU;
ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING
| IFCAP_VLAN_HWTSO
@@ -3234,6 +3235,7 @@ ixgbe_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp)
case ETHERTYPE_IPV6:
ip6 = (struct ip6_hdr *)(mp->m_data + ehdrlen);
ip_hlen = sizeof(struct ip6_hdr);
+ /* XXX-BZ this will go badly in case of ext hdrs. */
ipproto = ip6->ip6_nxt;
type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_IPV6;
break;
@@ -3292,17 +3294,23 @@ ixgbe_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp)
*
**********************************************************************/
static bool
-ixgbe_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *paylen)
+ixgbe_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *paylen,
+ u32 *olinfo_status)
{
struct adapter *adapter = txr->adapter;
struct ixgbe_adv_tx_context_desc *TXD;
struct ixgbe_tx_buf *tx_buffer;
u32 vlan_macip_lens = 0, type_tucmd_mlhl = 0;
- u32 mss_l4len_idx = 0;
- u16 vtag = 0;
- int ctxd, ehdrlen, hdrlen, ip_hlen, tcp_hlen;
+ u32 mss_l4len_idx = 0, len;
+ u16 vtag = 0, eh_type;
+ int ctxd, ehdrlen, ip_hlen, tcp_hlen;
struct ether_vlan_header *eh;
+#ifdef INET6
+ struct ip6_hdr *ip6;
+#endif
+#ifdef INET
struct ip *ip;
+#endif
struct tcphdr *th;
@@ -3311,32 +3319,62 @@ ixgbe_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *paylen)
* Jump over vlan headers if already present
*/
eh = mtod(mp, struct ether_vlan_header *);
- if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN))
+ if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) {
ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
- else
+ eh_type = eh->evl_proto;
+ } else {
ehdrlen = ETHER_HDR_LEN;
+ eh_type = eh->evl_encap_proto;
+ }
/* Ensure we have at least the IP+TCP header in the first mbuf. */
- if (mp->m_len < ehdrlen + sizeof(struct ip) + sizeof(struct tcphdr))
- return FALSE;
+ len = ehdrlen + sizeof(struct tcphdr);
+ switch (ntohs(eh_type)) {
+#ifdef INET6
+ case ETHERTYPE_IPV6:
+ if (mp->m_len < len + sizeof(struct ip6_hdr))
+ return FALSE;
+ ip6 = (struct ip6_hdr *)(mp->m_data + ehdrlen);
+ /* XXX-BZ For now we do not pretend to support ext. hdrs. */
+ if (ip6->ip6_nxt != IPPROTO_TCP)
+ return FALSE;
+ ip_hlen = sizeof(struct ip6_hdr);
+ th = (struct tcphdr *)((caddr_t)ip6 + ip_hlen);
+ th->th_sum = in6_cksum_pseudo(ip6, 0, IPPROTO_TCP, 0);
+ type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_IPV6;
+ break;
+#endif
+#ifdef INET
+ case ETHERTYPE_IP:
+ if (mp->m_len < len + sizeof(struct ip))
+ return FALSE;
+ ip = (struct ip *)(mp->m_data + ehdrlen);
+ if (ip->ip_p != IPPROTO_TCP)
+ return FALSE;
+ ip->ip_sum = 0;
+ ip_hlen = ip->ip_hl << 2;
+ th = (struct tcphdr *)((caddr_t)ip + ip_hlen);
+ th->th_sum = in_pseudo(ip->ip_src.s_addr,
+ ip->ip_dst.s_addr, htons(IPPROTO_TCP));
+ type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_IPV4;
+ /* Tell transmit desc to also do IPv4 checksum. */
+ *olinfo_status |= IXGBE_TXD_POPTS_IXSM << 8;
+ break;
+#endif
+ default:
+ panic("%s: CSUM_TSO but no supported IP version (0x%04x)",
+ __func__, ntohs(eh_type));
+ break;
+ }
ctxd = txr->next_avail_desc;
tx_buffer = &txr->tx_buffers[ctxd];
TXD = (struct ixgbe_adv_tx_context_desc *) &txr->tx_base[ctxd];
- ip = (struct ip *)(mp->m_data + ehdrlen);
- if (ip->ip_p != IPPROTO_TCP)
- return FALSE; /* 0 */
- ip->ip_sum = 0;
- ip_hlen = ip->ip_hl << 2;
- th = (struct tcphdr *)((caddr_t)ip + ip_hlen);
- th->th_sum = in_pseudo(ip->ip_src.s_addr,
- ip->ip_dst.s_addr, htons(IPPROTO_TCP));
tcp_hlen = th->th_off << 2;
- hdrlen = ehdrlen + ip_hlen + tcp_hlen;
/* This is used in the transmit desc in encap */
- *paylen = mp->m_pkthdr.len - hdrlen;
+ *paylen = mp->m_pkthdr.len - ehdrlen - ip_hlen - tcp_hlen;
/* VLAN MACLEN IPLEN */
if (mp->m_flags & M_VLANTAG) {
@@ -3351,10 +3389,8 @@ ixgbe_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *paylen)
/* ADV DTYPE TUCMD */
type_tucmd_mlhl |= IXGBE_ADVTXD_DCMD_DEXT | IXGBE_ADVTXD_DTYP_CTXT;
type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_L4T_TCP;
- type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_IPV4;
TXD->type_tucmd_mlhl |= htole32(type_tucmd_mlhl);
-
/* MSS L4LEN IDX */
mss_l4len_idx |= (mp->m_pkthdr.tso_segsz << IXGBE_ADVTXD_MSS_SHIFT);
mss_l4len_idx |= (tcp_hlen << IXGBE_ADVTXD_L4LEN_SHIFT);
@@ -4295,15 +4331,17 @@ ixgbe_rx_input(struct rx_ring *rxr, struct ifnet *ifp, struct mbuf *m, u32 ptype
{
/*
- * ATM LRO is only for IPv4/TCP packets and TCP checksum of the packet
+ * ATM LRO is only for IP/TCP packets and TCP checksum of the packet
* should be computed by hardware. Also it should not have VLAN tag in
- * ethernet header.
+ * ethernet header. In case of IPv6 we do not yet support ext. hdrs.
*/
if (rxr->lro_enabled &&
(ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0 &&
(ptype & IXGBE_RXDADV_PKTTYPE_ETQF) == 0 &&
- (ptype & (IXGBE_RXDADV_PKTTYPE_IPV4 | IXGBE_RXDADV_PKTTYPE_TCP)) ==
- (IXGBE_RXDADV_PKTTYPE_IPV4 | IXGBE_RXDADV_PKTTYPE_TCP) &&
+ ((ptype & (IXGBE_RXDADV_PKTTYPE_IPV4 | IXGBE_RXDADV_PKTTYPE_TCP)) ==
+ (IXGBE_RXDADV_PKTTYPE_IPV4 | IXGBE_RXDADV_PKTTYPE_TCP) ||
+ (ptype & (IXGBE_RXDADV_PKTTYPE_IPV6 | IXGBE_RXDADV_PKTTYPE_TCP)) ==
+ (IXGBE_RXDADV_PKTTYPE_IPV6 | IXGBE_RXDADV_PKTTYPE_TCP)) &&
(m->m_pkthdr.csum_flags & (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) ==
(CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) {
/*
diff --git a/sys/dev/mfi/mfireg.h b/sys/dev/mfi/mfireg.h
index 5bed6c28d481..dab9cf7baa17 100644
--- a/sys/dev/mfi/mfireg.h
+++ b/sys/dev/mfi/mfireg.h
@@ -1377,8 +1377,13 @@ struct mfi_bbu_status {
#define MFI_BBU_STATE_PACK_MISSING (1 << 0)
#define MFI_BBU_STATE_VOLTAGE_LOW (1 << 1)
#define MFI_BBU_STATE_TEMPERATURE_HIGH (1 << 2)
-#define MFI_BBU_STATE_CHARGE_ACTIVE (1 << 0)
-#define MFI_BBU_STATE_DISCHARGE_ACTIVE (1 << 0)
+#define MFI_BBU_STATE_CHARGE_ACTIVE (1 << 3)
+#define MFI_BBU_STATE_DISCHARGE_ACTIVE (1 << 4)
+#define MFI_BBU_STATE_LEARN_CYC_REQ (1 << 5)
+#define MFI_BBU_STATE_LEARN_CYC_ACTIVE (1 << 6)
+#define MFI_BBU_STATE_LEARN_CYC_FAIL (1 << 7)
+#define MFI_BBU_STATE_LEARN_CYC_TIMEOUT (1 << 8)
+#define MFI_BBU_STATE_I2C_ERR_DETECT (1 << 9)
uint8_t pad[20];
union mfi_bbu_status_detail detail;
} __packed;
diff --git a/sys/dev/mii/ciphy.c b/sys/dev/mii/ciphy.c
index 87d0d814e918..e830f279e95e 100644
--- a/sys/dev/mii/ciphy.c
+++ b/sys/dev/mii/ciphy.c
@@ -91,8 +91,10 @@ static const struct mii_phydesc ciphys[] = {
MII_PHY_DESC(xxCICADA, CS8201B),
MII_PHY_DESC(xxCICADA, CS8204),
MII_PHY_DESC(xxCICADA, VSC8211),
+ MII_PHY_DESC(xxCICADA, VSC8221),
MII_PHY_DESC(xxCICADA, CS8244),
MII_PHY_DESC(xxVITESSE, VSC8601),
+ MII_PHY_DESC(xxVITESSE, VSC8641),
MII_PHY_END
};
@@ -368,8 +370,10 @@ ciphy_fixup(struct mii_softc *sc)
break;
case MII_MODEL_xxCICADA_VSC8211:
+ case MII_MODEL_xxCICADA_VSC8221:
case MII_MODEL_xxCICADA_CS8244:
case MII_MODEL_xxVITESSE_VSC8601:
+ case MII_MODEL_xxVITESSE_VSC8641:
break;
default:
device_printf(sc->mii_dev, "unknown CICADA PHY model %x\n",
diff --git a/sys/dev/mii/miidevs b/sys/dev/mii/miidevs
index 5629290c9615..55446147525d 100644
--- a/sys/dev/mii/miidevs
+++ b/sys/dev/mii/miidevs
@@ -52,7 +52,7 @@ oui AMD 0x00001a Advanced Micro Devices
oui BROADCOM 0x001018 Broadcom Corporation
oui BROADCOM2 0x000af7 Broadcom Corporation
oui BROADCOM3 0x001be9 Broadcom Corporation
-oui CICADA 0x0003F1 Cicada Semiconductor
+oui CICADA 0x0003f1 Cicada Semiconductor
oui DAVICOM 0x00606e Davicom Semiconductor
oui ENABLESEMI 0x0010dd Enable Semiconductor
oui ICPLUS 0x0090c3 IC Plus Corp.
@@ -71,6 +71,7 @@ oui SEEQ 0x00a07d Seeq Technology
oui SIS 0x00e006 Silicon Integrated Systems
oui TI 0x080028 Texas Instruments
oui TSC 0x00c039 TDK Semiconductor
+oui VITESSE 0x0001c1 Vitesse Semiconductor
oui XAQTI 0x00e0ae XaQti Corp.
/* Some Intel 82553's use an alternative OUI. */
@@ -190,6 +191,7 @@ model xxBROADCOM_ALT1 BCM5906 0x0004 BCM5906 10/100baseTX media interface
model xxCICADA CS8201 0x0001 Cicada CS8201 10/100/1000TX PHY
model xxCICADA CS8204 0x0004 Cicada CS8204 10/100/1000TX PHY
model xxCICADA VSC8211 0x000b Cicada VSC8211 10/100/1000TX PHY
+model xxCICADA VSC8221 0x0015 Cicada CS8201 10/100/1000TX PHY
model xxCICADA CS8201A 0x0020 Cicada CS8201 10/100/1000TX PHY
model xxCICADA CS8201B 0x0021 Cicada CS8201 10/100/1000TX PHY
model xxCICADA CS8244 0x002c Cicada CS8244 10/100/1000TX PHY
@@ -318,5 +320,8 @@ model TI TNETE2101 0x0003 TNETE2101 media interface
model xxTSC 78Q2120 0x0014 78Q2120 10/100 media interface
model xxTSC 78Q2121 0x0015 78Q2121 100BASE-TX media interface
+/* Vitesse Semiconductor */
+model xxVITESSE VSC8641 0x0003 Vitesse VSC8641 10/100/1000TX PHY
+
/* XaQti Corp. PHYs */
model xxXAQTI XMACII 0x0000 XaQti Corp. XMAC II gigabit interface
diff --git a/sys/dev/mmc/mmc.c b/sys/dev/mmc/mmc.c
index 5771a182234a..5d68592291a8 100644
--- a/sys/dev/mmc/mmc.c
+++ b/sys/dev/mmc/mmc.c
@@ -224,7 +224,7 @@ mmc_acquire_bus(device_t busdev, device_t dev)
sc = device_get_softc(busdev);
MMC_LOCK(sc);
if (sc->owner)
- panic("mmc: host bridge didn't seralize us.");
+ panic("mmc: host bridge didn't serialize us.");
sc->owner = dev;
MMC_UNLOCK(sc);
@@ -859,7 +859,7 @@ mmc_decode_csd_sd(uint32_t *raw_csd, struct mmc_csd *csd)
if (v == 0) {
m = mmc_get_bits(raw_csd, 128, 115, 4);
e = mmc_get_bits(raw_csd, 128, 112, 3);
- csd->tacc = exp[e] * mant[m] + 9 / 10;
+ csd->tacc = (exp[e] * mant[m] + 9) / 10;
csd->nsac = mmc_get_bits(raw_csd, 128, 104, 8) * 100;
m = mmc_get_bits(raw_csd, 128, 99, 4);
e = mmc_get_bits(raw_csd, 128, 96, 3);
@@ -887,7 +887,7 @@ mmc_decode_csd_sd(uint32_t *raw_csd, struct mmc_csd *csd)
} else if (v == 1) {
m = mmc_get_bits(raw_csd, 128, 115, 4);
e = mmc_get_bits(raw_csd, 128, 112, 3);
- csd->tacc = exp[e] * mant[m] + 9 / 10;
+ csd->tacc = (exp[e] * mant[m] + 9) / 10;
csd->nsac = mmc_get_bits(raw_csd, 128, 104, 8) * 100;
m = mmc_get_bits(raw_csd, 128, 99, 4);
e = mmc_get_bits(raw_csd, 128, 96, 3);
@@ -1002,7 +1002,7 @@ mmc_all_send_cid(struct mmc_softc *sc, uint32_t *rawcid)
}
static int
-mmc_send_csd(struct mmc_softc *sc, uint16_t rca, uint32_t *rawcid)
+mmc_send_csd(struct mmc_softc *sc, uint16_t rca, uint32_t *rawcsd)
{
struct mmc_command cmd;
int err;
@@ -1012,7 +1012,7 @@ mmc_send_csd(struct mmc_softc *sc, uint16_t rca, uint32_t *rawcid)
cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
cmd.data = NULL;
err = mmc_wait_for_cmd(sc, &cmd, 0);
- memcpy(rawcid, cmd.resp, 4 * sizeof(uint32_t));
+ memcpy(rawcsd, cmd.resp, 4 * sizeof(uint32_t));
return (err);
}
@@ -1121,6 +1121,35 @@ mmc_send_relative_addr(struct mmc_softc *sc, uint32_t *resp)
return (err);
}
+static int
+mmc_send_status(struct mmc_softc *sc, uint16_t rca, uint32_t *status)
+{
+ struct mmc_command cmd;
+ int err;
+
+ cmd.opcode = MMC_SEND_STATUS;
+ cmd.arg = rca << 16;
+ cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
+ cmd.data = NULL;
+ err = mmc_wait_for_cmd(sc, &cmd, 0);
+ *status = cmd.resp[0];
+ return (err);
+}
+
+static int
+mmc_set_blocklen(struct mmc_softc *sc, uint32_t len)
+{
+ struct mmc_command cmd;
+ int err;
+
+ cmd.opcode = MMC_SET_BLOCKLEN;
+ cmd.arg = len;
+ cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
+ cmd.data = NULL;
+ err = mmc_wait_for_cmd(sc, &cmd, 0);
+ return (err);
+}
+
static void
mmc_log_card(device_t dev, struct mmc_ivars *ivar, int newcard)
{
@@ -1144,8 +1173,7 @@ mmc_discover_cards(struct mmc_softc *sc)
struct mmc_ivars *ivar = NULL;
device_t *devlist;
int err, i, devcount, newcard;
- uint32_t raw_cid[4];
- uint32_t resp, sec_count;
+ uint32_t raw_cid[4], resp, sec_count, status;
device_t child;
uint16_t rca = 2;
u_char switch_res[64];
@@ -1194,6 +1222,12 @@ mmc_discover_cards(struct mmc_softc *sc)
ivar->rca = resp >> 16;
/* Get card CSD. */
mmc_send_csd(sc, ivar->rca, ivar->raw_csd);
+ if (bootverbose || mmc_debug)
+ device_printf(sc->dev,
+ "%sard detected (CSD %08x%08x%08x%08x)\n",
+ newcard ? "New c" : "C", ivar->raw_csd[0],
+ ivar->raw_csd[1], ivar->raw_csd[2],
+ ivar->raw_csd[3]);
mmc_decode_csd_sd(ivar->raw_csd, &ivar->csd);
ivar->sec_count = ivar->csd.capacity / MMC_SECTOR_SIZE;
if (ivar->csd.csd_structure > 0)
@@ -1201,6 +1235,19 @@ mmc_discover_cards(struct mmc_softc *sc)
ivar->tran_speed = ivar->csd.tran_speed;
ivar->erase_sector = ivar->csd.erase_sector *
ivar->csd.write_bl_len / MMC_SECTOR_SIZE;
+
+ err = mmc_send_status(sc, ivar->rca, &status);
+ if (err != MMC_ERR_NONE) {
+ device_printf(sc->dev,
+ "Error reading card status %d\n", err);
+ break;
+ }
+ if ((status & R1_CARD_IS_LOCKED) != 0) {
+ device_printf(sc->dev,
+ "Card is password protected, skipping.\n");
+ break;
+ }
+
/* Get card SCR. Card must be selected to fetch it. */
mmc_select_card(sc, ivar->rca);
mmc_app_send_scr(sc, ivar->rca, ivar->raw_scr);
@@ -1228,7 +1275,22 @@ mmc_discover_cards(struct mmc_softc *sc)
if ((mmcbr_get_caps(sc->dev) & MMC_CAP_4_BIT_DATA) &&
(ivar->scr.bus_widths & SD_SCR_BUS_WIDTH_4))
ivar->bus_width = bus_width_4;
+
+ /*
+ * Some cards that report maximum I/O block sizes
+ * greater than 512 require the block length to be
+ * set to 512, even though that is supposed to be
+ * the default. Example:
+ *
+ * Transcend 2GB SDSC card, CID:
+ * mid=0x1b oid=0x534d pnm="00000" prv=1.0 mdt=00.2000
+ */
+ if (ivar->csd.read_bl_len != MMC_SECTOR_SIZE ||
+ ivar->csd.write_bl_len != MMC_SECTOR_SIZE)
+ mmc_set_blocklen(sc, MMC_SECTOR_SIZE);
+
mmc_format_card_id_string(ivar);
+
if (bootverbose || mmc_debug)
mmc_log_card(sc->dev, ivar, newcard);
if (newcard) {
@@ -1243,11 +1305,31 @@ mmc_discover_cards(struct mmc_softc *sc)
mmc_set_relative_addr(sc, ivar->rca);
/* Get card CSD. */
mmc_send_csd(sc, ivar->rca, ivar->raw_csd);
+ if (bootverbose || mmc_debug)
+ device_printf(sc->dev,
+ "%sard detected (CSD %08x%08x%08x%08x)\n",
+ newcard ? "New c" : "C", ivar->raw_csd[0],
+ ivar->raw_csd[1], ivar->raw_csd[2],
+ ivar->raw_csd[3]);
+
mmc_decode_csd_mmc(ivar->raw_csd, &ivar->csd);
ivar->sec_count = ivar->csd.capacity / MMC_SECTOR_SIZE;
ivar->tran_speed = ivar->csd.tran_speed;
ivar->erase_sector = ivar->csd.erase_sector *
ivar->csd.write_bl_len / MMC_SECTOR_SIZE;
+
+ err = mmc_send_status(sc, ivar->rca, &status);
+ if (err != MMC_ERR_NONE) {
+ device_printf(sc->dev,
+ "Error reading card status %d\n", err);
+ break;
+ }
+ if ((status & R1_CARD_IS_LOCKED) != 0) {
+ device_printf(sc->dev,
+ "Card is password protected, skipping.\n");
+ break;
+ }
+
/* Only MMC >= 4.x cards support EXT_CSD. */
if (ivar->csd.spec_vers >= 4) {
/* Card must be selected to fetch EXT_CSD. */
@@ -1286,7 +1368,21 @@ mmc_discover_cards(struct mmc_softc *sc)
ivar->bus_width = bus_width_1;
ivar->timing = bus_timing_normal;
}
+
+ /*
+ * Some cards that report maximum I/O block sizes greater
+ * than 512 require the block length to be set to 512, even
+ * though that is supposed to be the default. Example:
+ *
+ * Transcend 2GB SDSC card, CID:
+ * mid=0x1b oid=0x534d pnm="00000" prv=1.0 mdt=00.2000
+ */
+ if (ivar->csd.read_bl_len != MMC_SECTOR_SIZE ||
+ ivar->csd.write_bl_len != MMC_SECTOR_SIZE)
+ mmc_set_blocklen(sc, MMC_SECTOR_SIZE);
+
mmc_format_card_id_string(ivar);
+
if (bootverbose || mmc_debug)
mmc_log_card(sc->dev, ivar, newcard);
if (newcard) {
@@ -1362,8 +1458,7 @@ mmc_go_discovery(struct mmc_softc *sc)
err = mmc_send_if_cond(sc, 1);
if ((bootverbose || mmc_debug) && err == 0)
device_printf(sc->dev, "SD 2.0 interface conditions: OK\n");
- if (mmc_send_app_op_cond(sc, err ? 0 : MMC_OCR_CCS, &ocr) !=
- MMC_ERR_NONE) {
+ if (mmc_send_app_op_cond(sc, 0, &ocr) != MMC_ERR_NONE) {
if (bootverbose || mmc_debug)
device_printf(sc->dev, "SD probe: failed\n");
/*
@@ -1535,7 +1630,6 @@ mmc_write_ivar(device_t bus, device_t child, int which, uintptr_t value)
return (EINVAL);
}
-
static void
mmc_delayed_attach(void *xsc)
{
diff --git a/sys/dev/mxge/eth_z8e.h b/sys/dev/mxge/eth_z8e.h
index ecd6bcfab672..b836212266f8 100644
--- a/sys/dev/mxge/eth_z8e.h
+++ b/sys/dev/mxge/eth_z8e.h
@@ -1,6 +1,6 @@
/*******************************************************************************
-Copyright (c) 2006-2011, Myricom Inc.
+Copyright (c) 2006-2012, Myricom Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -28,7495 +28,7547 @@ POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
***************************************************************************/
-static unsigned int eth_z8e_uncompressed_length = 375636 ;
-static unsigned int eth_z8e_length = 119802 ;
-static unsigned char eth_z8e[119802 + 1] =
- "\x78\x9c\xec\xbd\x7f\x78\x54\xd5\xb5\x3f\xbc\x32\x99\xc8\x24\x06"
- "\x26\x62\xc4\x29\xc5\x76\xb0\x41\xa3\x05\x89\x16\xdb\xd4\x42\x0d"
- "\x02\x1a\x2c\xbf\x14\x6c\xa3\xa2\x09\x1a\xe8\xa0\x11\x22\x44\x18"
- "\x20\x64\xc2\x80\x36\x41\x20\xa9\xa0\x46\x09\x09\xbd\xf2\x23\x56"
- "\xac\xd8\x02\x62\x45\x19\x24\xf6\x4b\x7b\x93\x0c\xed\x8b\xf7\x9b"
- "\xdb\x17\x6f\x47\x6e\x84\x94\x1b\x60\x4a\x06\x32\x26\x33\x67\xbf"
- "\x9f\xb5\xf7\x39\xc9\xcc\x30\x41\xb9\xf7\x3e\xcf\xfb\x4f\xf3\x3c"
- "\x93\x73\xce\x3e\x7b\xaf\xbd\xf6\xda\x6b\xad\xbd\xf6\xde\x6b\xaf"
- "\x43\x74\xe5\x7f\x3e\xb2\xf0\x25\x81\x4c\x07\x8a\x0f\xfd\x37\xca"
- "\xff\xf3\xef\x9f\x7f\xff\xfc\xfb\xe7\xdf\x3f\xff\xfe\xf9\xf7\xcf"
- "\xbf\xff\x7f\xff\xfc\x09\x34\xe6\xbc\xc9\x4c\x1f\x57\x13\x75\xb9"
- "\x2d\xc3\x7c\xa4\x15\xbd\xba\x51\x84\xf0\x2a\x01\xe3\xfc\x30\xbe"
- "\xf2\xef\x25\xa4\x99\xaa\xc9\x72\x63\x1a\xa5\x89\x57\x6d\xa6\x09"
- "\x5b\x88\x36\x0d\x11\x1d\x1b\x5f\x11\xfe\xc6\x52\xa2\xc3\xdb\xf0"
- "\xfc\x8a\x68\xdf\x38\x44\x04\x00\xa7\xc0\x47\xf9\x9b\x18\xce\x6a"
- "\x3c\xaf\x46\x3a\xd2\x4a\x7c\x54\xb0\x86\xd3\xaa\x50\xce\x48\xf7"
- "\xae\xb9\x48\x8d\xf6\x10\x55\x31\x1c\x7b\x98\x26\x0e\x97\x78\x6c"
- "\x45\xde\x54\xce\xbb\x6a\x08\xea\x4d\x27\x72\xbf\x22\x82\x11\x38"
- "\x58\xb8\x1e\xae\x5b\xcf\x7f\x34\xa6\x3e\x3f\xd2\xda\x8c\xfa\xfa"
- "\x81\x91\xc6\xe5\xb9\x0d\xf6\x6f\x51\xe2\x49\xba\xfa\x3a\x86\xc9"
- "\xb8\x09\x37\x59\xbc\xdd\x21\x3a\x49\xc9\x99\x9d\x6e\x4a\x3c\x0c"
- "\x6a\x6c\x78\x45\xa6\x27\x7a\x03\x21\xb2\x97\x51\x02\xde\x4d\xc5"
- "\xd5\x84\x72\x03\x99\x3e\x33\x6b\x29\x83\xeb\x06\x5c\xb3\x30\x79"
- "\x12\xea\x07\x13\x31\x8d\x02\x26\xba\x39\xe0\xa6\x84\x2e\x77\x32"
- "\xda\x6f\xc9\x94\xed\x47\xbd\x28\x6b\x3e\x49\x29\xff\x30\x21\x3f"
- "\xea\xf4\xdb\x97\x33\x0e\x29\x9f\x08\xb7\xc7\x64\xc0\xd1\xdc\x9e"
- "\xab\xeb\x5e\x22\xea\x74\x9b\x26\x07\x4c\x56\xa1\xc3\x39\x60\xc0"
- "\xe1\x7c\xa8\x2b\x95\xeb\xea\x74\x9b\x5f\x8a\xc8\xe3\x33\xf2\x00"
- "\x6f\xff\xe8\x00\x25\x32\xce\x27\x28\x25\x9b\xeb\xd3\xdb\x62\xe6"
- "\x3a\xbc\x4b\x42\xe4\x45\xdf\xa3\xee\x74\xb4\xd5\x7e\x38\x48\x04"
- "\x98\xd7\xd4\x97\x11\x31\x7c\xe0\x6f\x57\x30\x53\xc6\x18\x30\x19"
- "\x46\x6f\x5b\xdd\x9e\xc1\xf5\x12\x47\x6e\xab\x85\xf4\xbc\x05\x91"
- "\x38\x32\x5c\xb4\xe5\x7a\x6e\x4b\x23\x38\x4a\xcf\xb3\xa6\x97\x1e"
- "\xbd\xed\xbf\x3a\x27\x06\xb6\x4d\xc1\x4e\x00\xec\x04\x8f\x5e\xae"
- "\xb7\xfd\xbe\x98\xfc\x2a\x6f\x5a\x72\xc0\x24\x74\x3a\xa4\xb4\xf7"
- "\xe5\x4d\xde\x14\x99\x17\xf8\x98\x14\x6d\xc9\xe4\xa3\x94\x56\xb4"
- "\x33\x11\x79\xa6\xa0\x1f\xed\xfa\xfb\xeb\xf4\xf7\x36\xbc\xbb\x5b"
- "\xc1\xbb\x3a\x3b\x02\x5e\x1a\xc3\x8b\xe4\x2d\x25\x51\x66\xfc\x92"
- "\x60\x20\x5f\x85\xdf\x00\x8b\xc1\x6f\x8b\x6d\x42\x73\x7d\x03\x6d"
- "\x5a\xbb\x1d\xb4\x10\xe4\x75\x06\xc9\x3e\x94\x5c\x27\xe8\xea\xdd"
- "\x80\x4f\x1b\x96\x93\xc5\x55\x2c\x82\x5e\x67\x07\xb5\xf8\x3b\xc8"
- "\xe5\x87\x6c\x84\x2e\x50\xd9\x05\xf0\x62\xe8\x0c\x95\x3d\x4b\xb6"
- "\xc6\xd2\x2f\x28\x1e\x2f\x6b\x26\x41\xae\x61\x5c\xb6\x8d\x5a\x6a"
- "\xdb\xc8\x55\x1b\x5d\xd6\x75\x03\xd9\x9a\xf1\x8c\x3e\xb7\x32\x1e"
- "\x2c\x6f\xa1\x94\xed\xf6\xd2\xd7\xc8\xec\x1a\x4e\xa6\xe6\x42\x8f"
- "\x8e\x4b\xaa\x93\x71\x59\x73\x9a\x2c\x6f\xcc\x03\x1f\x9e\x66\x7c"
- "\xdf\xb6\xbf\xb3\x3c\x68\x3a\x6c\x9b\x42\x87\x6d\xc7\xa9\xd1\x36"
- "\x8e\x1a\x9d\x13\x69\xc3\x69\x4a\x3d\x1c\x1c\x4b\x8d\xe6\x7b\xa9"
- "\x31\x63\x22\x79\x3b\x70\x0f\xf9\x3d\x6c\x0b\x90\x7d\x09\xf3\x53"
- "\xaa\x63\xd3\x53\x64\xf1\x29\x98\xa0\x5d\x6a\xc9\xa1\x12\x22\xa6"
- "\x1d\x3f\xc7\x6b\xc7\xe2\x6f\x90\x0d\xf8\xb5\x03\x97\x1f\x02\x97"
- "\xb7\x33\x6c\x94\x05\x9c\x07\x78\x6b\x42\x64\x2e\xa5\xe4\x7e\xe4"
- "\x38\x5d\x03\xef\x41\x76\x3b\xea\xa0\x4f\x58\x7e\x3b\x57\xe4\x41"
- "\x27\xa4\x42\xfe\x53\xd7\xe8\x32\xd0\xe1\xfa\x15\x99\x3b\x97\xe6"
- "\x25\xd4\xbf\x22\xda\xba\xdc\x03\xc9\x78\x07\x59\x6c\xc3\xfb\xf6"
- "\xd1\xe9\x94\xe6\x0d\xe5\xd0\xc1\xee\x76\x96\xc7\x8e\x41\x01\x4a"
- "\x60\x78\x56\x27\x64\x67\x09\x25\x01\x9f\x3f\xd7\x23\xfd\x3b\xc8"
- "\x87\xf2\x39\x3e\x7a\xb9\x83\xcb\x8b\xeb\x1f\x0d\x68\xd7\x3f\x7a"
- "\x41\x7b\xf5\xd1\x4e\xf1\xea\xa3\xe7\xc3\xaf\x3e\xfa\x0f\xd7\x32"
- "\xb2\x84\xaf\x7f\xd4\xdf\x52\x2c\xfb\x20\xad\xa5\x18\x7d\x10\x26"
- "\xcb\xca\x33\x94\xf6\xf8\xb3\xe8\xfb\xd0\x67\xb4\x72\x3e\xd9\xb4"
- "\xe4\xb7\x5a\xbd\xa1\x4f\xe9\xf1\x52\x12\xb8\x6f\x8f\xd7\xbe\xce"
- "\x94\xb7\x0b\x0c\xd9\x42\xbd\xfb\x7d\xa6\x6d\x36\xae\xd7\x9f\xbc"
- "\xb7\x00\xbf\x42\xfc\x1c\xf8\x15\x89\x94\xb7\x8b\x40\x2b\xd7\xa0"
- "\x55\x09\x54\xd7\x4d\x34\x5a\xa3\x84\xd3\x34\xf0\x18\xf0\x4f\xeb"
- "\x87\x6e\xc3\xb4\xb5\x9e\xea\x9b\xcb\xa9\xac\xab\xcb\x41\xac\x0b"
- "\x59\xff\xb1\x3e\xec\x72\x0f\xb2\xa3\x9e\x3c\x29\xbf\xaf\x40\xc7"
- "\xa4\x78\xaa\x91\xde\x1e\x58\xe1\x48\xf0\xaf\x70\x98\x3a\x53\x3c"
- "\x1b\x91\x67\x22\xf2\x54\xeb\x34\x6c\x67\x58\x90\x2d\xff\xc0\x10"
- "\x25\x02\x66\xf1\x7b\x17\x5b\xcd\x5b\x5e\x11\xc7\x91\xaf\xa8\x17"
- "\x16\x60\x03\x0e\xe8\x3f\xa8\xdc\x48\x03\xad\xdb\xd6\x23\x1f\x97"
- "\xf7\x06\x73\x78\x4c\xf1\x79\x8b\xda\xc9\x1a\xa2\x14\xd1\xa3\xea"
- "\x43\x9e\x76\xd6\xe9\x03\x83\x74\x55\x97\x9b\x66\x30\x6c\x2e\xe7"
- "\xed\x68\x27\x94\xdb\x28\x5c\x0e\x13\xd2\xa7\x75\x09\x47\xc2\x1a"
- "\xa4\x1f\x46\x79\xbd\xee\x76\x03\x47\xae\x83\xfb\x5a\xe2\x09\x7e"
- "\x38\x5c\x14\xa4\x81\x35\x94\x88\x72\x33\x19\x1e\xc3\x02\x1f\xf8"
- "\xd0\xd6\x8d\x87\x8b\xfc\xa4\x89\x28\x98\x3e\x05\xcf\x9a\x1d\x05"
- "\x0f\xe9\x02\xf0\x98\xff\x1a\x51\x66\xe0\x56\x09\xef\xc1\xf7\x34"
- "\x86\x17\x24\xb3\x5d\xe2\xfb\x53\x86\xd1\xc5\xfa\x03\x30\x3d\x4b"
- "\xee\xa1\x0e\xb2\x6e\xf5\xbb\x1c\x89\x2d\x18\x37\xb9\xfc\x3b\x65"
- "\xed\x49\xa2\x33\x2f\x91\x79\x8e\xdf\x7b\x43\xe7\x39\xcf\x2a\xd1"
- "\xe9\x48\x1c\xd8\x01\x5d\x84\x3c\x28\xef\x64\x3c\x23\xfb\xf2\xc1"
- "\x49\x3f\x1d\x47\x3f\x9d\x38\x79\xe2\x38\x9a\x3a\x7e\xc2\x38\xca"
- "\xfa\xe1\xa8\xac\x31\xdf\xfb\xc1\xf7\xe4\xcd\xf7\x7e\x90\xfd\x3d"
- "\x9a\xf1\xb3\x07\xc7\xd1\x8c\x69\xe3\x68\x26\x7e\x33\x66\x4e\x7a"
- "\x70\xe2\xa4\x99\xe3\x28\xef\xde\xc9\x78\x9a\x30\xee\xf6\xac\xfb"
- "\x46\xcd\x98\x30\x79\x12\x3d\x30\xeb\x8e\xac\x3b\xee\xa0\xf1\x93"
- "\xa6\xdc\x9e\x95\xa5\x5f\x6f\xcf\xe2\x2c\x8f\x64\x4f\x9a\x39\x6a"
- "\xc6\xa2\x85\x25\x0b\x47\x4d\x9b\x3c\x81\x53\xa0\xdd\x22\x78\x28"
- "\x33\x7c\x51\x63\x5a\x07\xc4\xb9\x5c\xd2\xa0\x3b\xea\xc0\x03\xf8"
- "\x75\x78\xca\x4e\x40\x07\x5c\xf3\x5c\x1d\xf7\x9d\x1c\x03\xac\x07"
- "\x20\xf7\xe6\x2e\x77\x5a\x29\x68\x78\x94\x69\x68\xbf\x91\xf5\xc4"
- "\xf5\xef\xe3\xdd\x21\x7d\xac\x49\xc2\xfb\xda\xe8\xf7\xd7\x42\x07"
- "\x5b\xff\x4f\x8b\x9d\xc8\x8b\x1f\xe8\x1e\x80\x2e\x04\x7d\xfd\xd4"
- "\xe9\xca\x4b\x02\x7f\x27\xa0\x8e\x36\xc8\xe6\x51\x94\x6d\x8d\x90"
- "\xf9\x36\xf4\xcf\x51\x1e\x57\xce\x52\xda\xbb\x2d\x25\x39\xc4\xfd"
- "\xe4\x2d\xd1\x61\x5c\xe8\x85\x91\x22\x61\xa0\xef\x01\xe7\x98\x82"
- "\x73\x8d\x3d\x42\x3f\xf8\x18\xce\x06\xbc\xd3\x61\x5d\x68\x81\x9e"
- "\x80\x1e\xbf\x55\x73\x65\x92\x48\xd9\x9e\xa9\xf5\x64\xca\xb1\x12"
- "\xe5\xf2\x22\xf8\x3a\xd0\xe8\x44\xbe\x37\x72\x13\xc0\x07\x09\x18"
- "\x7f\xd1\x96\xb4\x42\xf0\x77\x20\xbc\x76\xef\xb3\xe2\x5c\x1e\xdb"
- "\x11\x57\x9d\xa4\xc1\x7f\x46\xfb\x9a\xb4\xb5\x7b\x8b\x45\x97\x4c"
- "\x63\xba\xed\x17\xfc\x9c\x82\x7c\x3d\xbd\x69\xef\x73\x1a\xf8\x20"
- "\x91\xe5\x55\x08\x99\x8e\x31\x73\xf0\x32\xe8\xb4\x56\xe4\x2d\xe6"
- "\xbc\xa3\x43\x34\x00\xba\xc6\x66\x77\x25\xd0\x09\x1a\x4c\x5a\xca"
- "\xde\x45\x11\xf5\x01\xce\x60\x1e\xa4\x98\x1f\xcd\x5d\xe7\x00\xa7"
- "\x53\xa6\xc3\x8e\x19\xfc\x18\xe0\x2f\x66\x5d\xa9\xf4\xf7\xf5\xff"
- "\xce\xf9\xf4\xb1\xb9\xef\x19\xb2\xae\xe0\x5c\xff\xef\x87\x41\x4b"
- "\xb6\x17\xd8\xfe\xeb\x72\x0f\x9e\xe5\xa3\x81\x7e\x35\x36\x5e\xdf"
- "\xca\x79\x35\xe0\x28\x52\x93\xb8\x2d\x25\x9e\xe5\x1d\x74\xb2\x98"
- "\xc7\xda\xc1\x69\x9a\xcb\x41\xd1\x38\x5d\xd3\xc4\xf8\xb3\xfe\x00"
- "\x2d\x3e\x05\x1f\x24\x03\xde\xb6\x68\x3e\x18\xec\x01\x9c\x67\x81"
- "\x5f\x2b\xda\xf4\xac\x8f\xae\x39\xa2\x75\x3a\x50\x2f\x99\x20\x57"
- "\xd0\xe7\x7d\x30\xf4\xf2\x6d\xd1\xe5\xaf\xa9\xe0\x72\xc8\x9f\xd4"
- "\xd5\x29\xf3\xaf\x63\x9a\xeb\x7c\x07\xbe\xbc\x36\x3d\x86\x2f\xb7"
- "\x00\x97\xff\x88\x78\x3f\x26\xe6\xfd\x2a\xbc\xff\x4f\xfd\x3d\xe4"
- "\xfe\xda\x59\x31\x7c\x5b\x8c\xf7\xa7\x80\x6f\x00\x72\x0d\xdb\xe2"
- "\x9a\x5c\xf0\x98\x3f\x22\xff\x9a\x98\xfc\x5b\x91\xff\xbf\x98\x6f"
- "\x78\xcc\xe1\xfc\xf5\xba\xec\x20\xbf\x05\xf9\xf7\xc4\xd4\x3f\x07"
- "\xf9\x03\x11\xf8\x1d\x8b\x7e\x9f\x5e\x8b\xf7\x5f\x32\xaf\xc3\x26"
- "\x4a\x42\x9e\x01\xac\x4b\x58\x8f\x1d\x2e\xe2\xfe\x4a\x37\xc7\xe4"
- "\xcf\x40\xbe\x54\x9d\x46\x26\x9d\x46\xb9\xdc\x8f\xa8\xe3\xb8\xc2"
- "\x21\x3d\x3b\xa6\x4c\x1e\xca\xa4\x83\x8e\xcf\x1a\x7c\x19\xa7\x4c"
- "\x51\x4c\x99\x75\xdc\x8f\x42\xd5\x63\xee\xea\xe9\x2b\xa3\xeb\xc8"
- "\x48\x18\xdc\xb6\xab\x01\x63\x77\x34\x8c\x21\xed\xa8\x77\xd8\x7a"
- "\xa5\x77\xae\x06\x0f\xdd\x81\xb4\x7f\x07\xcc\xe7\x58\x06\x20\xab"
- "\x01\xaf\x3f\x48\xc2\x95\x9b\xaa\x78\xf7\xba\x6b\x06\x85\x88\xef"
- "\x47\xf1\x3d\xc3\x16\x5d\x53\x74\x99\xbc\xee\x1a\x5c\x91\x9e\xce"
- "\xf6\x5b\x02\xeb\x60\xd1\xf5\x13\x4d\xc1\xbc\xee\x4e\x61\x22\x13"
- "\x9e\xc3\x7a\x1d\x7f\xc6\x73\x02\xf0\x5f\x84\x31\x87\xc4\x52\xe4"
- "\x5b\x4e\x13\x90\x7e\x48\xca\xaa\xca\x27\x9f\x55\x1d\xb9\xcc\xdf"
- "\x63\xf0\xfc\xbe\x5e\xfe\x5d\x86\x87\xfb\xdb\xf5\xfb\x84\x30\xc3"
- "\x3a\x67\xc8\xe0\x90\x37\x65\x39\xc8\xa1\x84\x8f\xf2\x62\xa9\x7c"
- "\xc7\x30\x5f\xc6\x75\x32\xae\xab\x70\x7d\x00\xd7\xc7\x5c\x5f\x92"
- "\xcd\x15\x96\xf2\xc8\xcf\x93\x71\x7d\x10\xd7\x3b\x71\x9d\x89\xeb"
- "\x70\x5c\xef\x41\x1b\xc2\x2c\x17\x18\x47\x79\x8e\x15\xc0\xb8\xaa"
- "\x78\x8b\xe7\x00\x5d\xb9\x4c\x83\x49\xc8\xd3\x2e\xe5\x55\xe9\x17"
- "\x8b\xea\xc7\xeb\x3a\x64\x5a\x8a\x4c\x1b\xa0\xf8\x41\xa5\x85\x0d"
- "\x3d\x74\xae\x2f\x4d\xd7\x4d\xba\x2c\xea\x69\x0a\xfe\x0c\xc0\xf7"
- "\x30\xae\x42\xc1\x4a\x52\x7d\xae\xc3\x57\xe5\xcc\x71\xea\x4c\x88"
- "\xac\x13\xd7\x4d\x2e\xa7\x10\xb8\x96\x73\x1f\xf9\x68\xc8\x6e\x21"
- "\xf9\x1e\x63\xac\x82\x37\x5b\xcf\x37\x86\x69\x2c\xcb\xcb\xf4\xf4"
- "\xa3\x11\xbc\x34\xb8\xcb\x3d\x24\x14\x23\x47\x59\xe0\xa5\xdb\x98"
- "\x67\x98\xee\xdc\xb6\x41\xc5\x72\x1c\x97\x6d\x91\xf0\xcf\x29\x9e"
- "\xac\xd3\xe7\xad\x4a\x7e\xaf\x9f\x18\xa3\x5f\x24\xcf\xc6\xc8\x7b"
- "\x07\xd3\x3c\xb1\x94\xe5\xe0\x7a\xcc\xff\xde\x19\x26\x6d\xc6\xb5"
- "\x7b\x97\xf0\xfb\x00\xfa\x98\xeb\x4d\x2c\xe6\x76\x5c\xbf\xc9\x78"
- "\x2f\xdf\x25\x1f\x4a\x63\xfe\x4e\x2c\x92\xef\x76\x63\x3c\xda\x6f"
- "\xbc\x33\xea\x49\x2c\x91\xef\x9a\xfa\xe0\x6e\xcf\xd5\xe1\x26\xc6"
- "\xb3\xf9\x44\xc5\xf6\xec\x51\x44\xa6\x5b\xcb\x29\xc9\x1b\x3a\x46"
- "\xd3\x43\x22\x3c\xaa\x9c\x92\xbd\xa1\x5d\x74\x0b\xd1\x35\xde\xd0"
- "\x71\xba\x95\x68\xb8\x37\xb4\x09\x36\xc8\x36\x7e\x7f\xf0\x66\x4a"
- "\x48\xc0\xd5\x75\x53\xb9\x29\xc1\x1b\x2a\xa1\x8c\x72\x33\xae\x45"
- "\x74\x6f\x92\xe8\xf2\x86\xa6\x20\x5f\x21\x4d\x0f\x8b\x73\x13\x93"
- "\xc4\xdf\xf2\xc3\x94\x36\xe5\x79\xe1\xf2\x86\x30\x1f\x08\x35\x21"
- "\x5d\x13\xd3\xc3\x5f\xe2\xd7\x25\xb4\x8a\xed\xb9\xd3\xc3\xe7\xc4"
- "\x84\xe7\x0f\xe2\xf9\x6f\x02\x7d\x24\xbc\xa1\xb1\xd4\x12\x08\x20"
- "\x9f\x4b\x88\xca\xed\xd9\x8f\x5f\x30\x51\x0f\x6c\x08\xad\x72\x7b"
- "\x2e\xda\x92\xd7\x83\x76\x60\x7c\xfd\x59\xcf\x0a\x5c\xd7\x6e\xff"
- "\xa9\x7c\xae\xd8\xee\x10\x96\xed\x79\xb7\x61\x72\xc5\x6d\xf0\x86"
- "\xda\x28\x1f\xd3\x83\xe9\xcb\xfc\x82\xf1\x1f\xb4\x8a\xe7\x56\x63"
- "\x09\x7d\x60\x9d\xbe\xcc\x25\xf0\xce\x22\x92\xb7\xe7\x79\x43\x1d"
- "\x84\x3a\x1c\x80\x37\x57\xc2\xab\xd8\x5e\x81\xbc\x7e\xce\x17\x09"
- "\x87\x61\x70\xde\xe9\x61\xb2\x22\x7f\x45\x4f\xf2\x76\x27\x7e\x35"
- "\xf8\x1d\x41\xd9\xbf\x0a\x77\xfa\x21\x81\xf1\x1e\xe5\xdb\xf1\x1c"
- "\x0c\x42\x86\x25\x2d\xc3\x34\x00\xf9\xdb\xc1\x2f\x13\xc1\x77\xc0"
- "\x77\x87\x4d\xe2\xbb\x76\xc7\xf5\x41\xd9\x8e\x1d\x43\x54\x3b\x76"
- "\x5c\xc7\xe9\x9d\xb0\x75\x70\x9f\xdd\xa9\xde\xfd\x00\xe5\x66\xc9"
- "\x72\x15\x3b\xb2\x85\x65\x47\x6e\x10\xf2\x05\xba\x96\x33\x1d\x41"
- "\xd7\x72\xa6\xa5\xa8\xdc\x91\xed\x75\xae\x23\x91\xbc\x23\xb7\x27"
- "\x79\x47\x1e\xca\x3f\xd5\x23\x6d\x90\x1d\xce\xa0\x82\xbd\x14\x70"
- "\x66\x83\x6f\x13\x01\xc3\x09\x58\x15\x3d\x6e\x3b\x4d\x5f\x26\x82"
- "\xd3\x43\xab\x42\xf9\xcb\x28\x71\x24\x95\x03\xdf\x0f\x41\xa3\x42"
- "\xb4\xb3\x11\xd7\x89\x78\x4f\xd7\xa2\xae\x83\x80\xeb\xe4\xfa\x50"
- "\x4f\x05\x60\x3e\x0f\x58\x85\x8c\xd3\x97\x6e\x4a\xc3\x73\xcd\x97"
- "\x0a\xbf\xfd\x5a\xc5\x8e\x56\xcd\xb2\xe3\x88\xc1\x43\xcc\x3f\x8a"
- "\x6e\x9b\x68\x5a\x40\x84\xbc\xa1\x2d\x04\x1e\x4b\x6b\x09\x1c\xe7"
- "\xf7\x98\xff\xec\x42\x3f\x33\x4f\x95\xe0\xba\x8d\x98\x7f\x5a\x8a"
- "\x9f\xe7\xbc\x07\x99\x87\xa6\x15\x07\x56\x8d\xa2\xe2\x04\x3c\xbb"
- "\xf2\x43\x16\x7a\xbc\xd8\x5c\x1e\xae\xd8\xd1\xd0\x52\xcc\xfd\x72"
- "\x0c\x65\xb8\x5c\x11\x59\x13\x30\x07\x48\x10\x21\xab\xd3\x6f\x1e"
- "\xe8\x70\x89\x96\xc0\x14\xe4\x2d\x26\x6e\x0f\xf3\x11\xe7\x9f\xda"
- "\x21\x7c\x61\xcb\xce\x3c\x6e\x9b\x18\x54\x4e\xcd\x1d\x77\x12\xcf"
- "\xc3\x9a\x3b\xb6\x31\x9f\x6a\xc2\xb2\x33\x13\x3c\xda\x33\xb5\xa3"
- "\x3c\xe9\xf1\x0b\x94\x80\xb4\x70\xb3\x63\x17\xde\x37\x22\x5f\x93"
- "\xe4\xdb\x69\x17\x42\xd6\x90\x65\x47\x4d\xa8\x62\x67\xf6\xb4\x0b"
- "\x3d\xa2\xd9\xb1\x89\x1e\xeb\x28\x07\xad\x76\xd1\xd4\x33\xa1\xc4"
- "\x96\xe2\x42\xe4\xe9\x42\xfa\x36\xc9\xff\x53\xcf\x74\x8a\x69\xb0"
- "\x66\xa6\x5d\xf8\x9b\x98\xea\x10\x07\xf3\x9d\x34\xe8\xea\x55\x42"
- "\x63\xb9\x68\x6a\xdb\x45\x57\x1f\xf7\x11\xcb\xc4\x94\x39\x9a\x98"
- "\x7a\xe6\x9c\x78\xfc\x59\xa6\xcd\x58\x6a\x76\x40\x7e\x9c\x9b\x98"
- "\xde\xfb\x9b\x1d\x07\x50\xff\x44\xc0\x75\x09\xaf\x73\x0b\xf2\x7a"
- "\xac\x8f\x9d\x49\xa3\xa6\xb6\x4d\x14\x4a\xde\x51\x13\xae\xdc\xd1"
- "\xa0\x25\xef\x38\xa2\x55\xee\x68\x15\xc9\x3b\x33\x43\x95\x3b\xb3"
- "\xc3\xc9\x3b\xc1\x03\x3b\x1b\xd0\x4f\xc9\xdc\xe7\xdd\x6e\xb2\xe3"
- "\x79\x47\x37\xf7\x7f\xc5\xce\xfd\x68\x6b\x2b\x6c\x5e\xa1\x78\x7f"
- "\xe7\x7e\x5e\x5b\x40\xd9\xd6\x9e\xe4\x9d\x47\x90\xaf\x55\xc9\xd7"
- "\xce\x76\xe6\x4b\xe4\x33\x21\xed\x14\xe6\x3d\x89\x78\x1f\xec\x49"
- "\x6e\xb0\xe0\x67\x13\x6b\x1b\x1c\x80\x7f\x8d\xe4\xa9\x8a\x06\x87"
- "\xf8\x71\x35\x6c\xe8\x0b\x80\xd3\x50\x31\x3d\x7c\xb7\x00\x0d\x21"
- "\x27\x0d\x0e\xad\xb2\xc1\x29\x52\x1a\x1a\x82\x92\xf7\x1b\x76\x32"
- "\xec\x9e\x15\x99\xbc\xe6\x60\xc6\x7b\xd8\x80\x6f\xde\x1a\x64\x5e"
- "\xb5\xbc\x99\xa9\x59\xde\xac\x10\x15\x6f\x66\xff\xe4\x79\xe1\x0f"
- "\x57\xbc\x99\xa7\x55\xbc\x99\x1b\xba\x0a\xb6\xb9\xf3\x00\xb1\x7e"
- "\x0a\x7d\x24\x40\x83\x4f\x40\x8f\x6d\xb2\xff\xbd\x4e\xc8\xc0\xb2"
- "\xa1\xe5\xcd\x1d\xe0\x85\xe2\xb7\xa5\x6e\x6a\x09\x1c\x93\x34\x15"
- "\xc9\x6f\x66\x32\x4f\x71\xff\x3e\x5e\x4c\xe5\xa2\xf2\xcd\x6c\xad"
- "\xf2\xcd\xdc\x70\x25\xe0\x26\xa3\x9e\x94\xb7\xfe\x14\x94\xf2\xfa"
- "\x16\xf8\xf5\x00\xca\x7c\x42\x8a\xc7\xdf\x3a\xd2\x9f\x8e\x64\x5d"
- "\xc5\xfa\x69\x7a\x28\xc8\x3c\x73\x8a\xf5\x9a\xd2\x53\x94\x6f\xe8"
- "\x29\xd6\x51\x3c\xdf\x61\x3d\xa5\xe9\x7a\x4a\xd3\xf5\x94\x7c\xb6"
- "\x40\xd7\x54\x6c\xcf\x63\x7d\x34\xdd\xa9\xf4\xcc\xf4\x70\x96\x00"
- "\x6f\xa4\x02\x46\x9e\xea\x0b\xe4\x59\xbb\x7d\xae\xcc\x2f\xe9\xb4"
- "\xbd\x42\x83\xbe\xc1\xaf\x46\x53\xfa\xa6\x55\xd7\x37\x26\x43\xdf"
- "\x84\x31\xae\x41\xa6\xb4\x78\xfa\x46\xd3\xf5\x4d\x58\x28\x7d\xa3"
- "\xe9\xfa\x86\xd3\xc3\xba\xbe\x09\xc7\xd1\x37\x90\x67\x6e\x6f\xa2"
- "\xae\x67\xca\x59\xcf\x70\x7b\xc1\x6b\xb9\x9a\xd2\x33\x0e\xcc\x75"
- "\x4c\xac\x67\xc2\x28\xa3\x19\x7a\xa6\x4b\x96\xaf\x60\x5d\xd3\xf3"
- "\x02\x41\x7f\xda\x89\x75\x8c\xd4\x27\xa1\xe1\x21\xd6\x27\xa0\xdf"
- "\xdd\xb1\xfa\x04\xf0\x6a\x70\x9f\xa6\xeb\xa9\x23\x98\xe9\x86\xa0"
- "\x4f\x1a\xa6\x3b\x03\xe8\xeb\xcf\x30\xf7\x87\xde\x76\x96\x94\x7b"
- "\x9d\x21\x82\x1e\x68\x15\x2d\xe5\x04\x1c\xc1\xbf\x61\xe8\x0a\x22"
- "\xc8\x65\x66\x08\x32\x0e\x1e\xcf\x6e\x29\xfe\x94\xc2\x90\xd5\xa9"
- "\x1d\x9d\xde\xc7\x03\x99\x69\x53\xcf\x08\x3f\xe8\xe3\x7b\xbc\xb8"
- "\x1c\xfa\x25\xd3\xdf\xdc\xf1\x21\x4d\x69\x13\xda\x94\x02\x9f\x1d"
- "\x32\x90\x3d\x75\xbe\xc7\xfa\xf8\xb3\x69\x90\x33\xe1\x81\x5e\xfc"
- "\x7f\xa6\x9e\x49\xb3\xce\x6e\xa3\x6f\x4d\x99\x23\xb4\x30\xe4\x0c"
- "\xed\x6d\x40\xbb\xf7\x03\xf7\x23\x90\xb9\x56\xc8\x59\x66\x28\x46"
- "\xce\x20\x33\x3b\x70\x6f\x57\xf4\xdb\xd9\x0a\x39\xdb\xaf\xc9\xf1"
- "\xac\x4d\xce\x31\x51\x4f\x2b\xaf\xc5\x41\xd6\xf6\x6b\x95\x4a\xd6"
- "\x34\x55\xae\x5d\x63\xfa\x99\x74\x59\x43\x5f\xe0\x7d\x10\xb2\x63"
- "\xc1\x2f\xbe\xac\x15\x47\xc8\xda\xb3\xba\xac\x25\x2b\x59\x43\x9f"
- "\x26\x86\x57\x28\x79\x63\xf8\x3c\x0f\xed\x95\xb7\x94\x37\x33\x71"
- "\x9f\xa0\x78\x47\xca\x1c\xc6\x95\x37\xf3\x20\x6f\xb9\x90\x37\xc0"
- "\x13\x7e\xd6\x9b\xe0\xcd\xff\xe0\xb1\x6e\x5a\xb1\xf8\x8f\xfc\xf0"
- "\xd0\x72\xc8\x53\x1e\x74\xd9\xdf\xa0\x47\xff\xe3\xf1\x00\x6d\x85"
- "\x3c\x65\x42\x8e\xb2\x21\x4f\xb9\x90\x2b\x96\xa7\x23\xe1\x15\x0c"
- "\xf3\xad\x23\xbd\x30\xe4\x58\x19\x2d\x4f\xfd\xad\x83\x76\xb9\xed"
- "\xa5\x3e\xfa\xa0\x98\xed\x15\xdc\x57\xf8\xe8\xc0\x44\xfd\x1e\xf6"
- "\xcf\x56\xb9\xb6\xc5\x32\x58\x5c\x46\xd7\x9d\xa6\xe1\xb9\xe0\x77"
- "\xc2\x7d\x2a\xee\xa7\x4c\xbf\xe5\x20\xec\x88\x8e\x76\xd4\xdb\xc5"
- "\x72\x28\xdc\x63\xd8\x3e\xcb\x01\x1f\x5a\x44\x57\x66\x2a\xec\x4b"
- "\x4d\xf4\xd8\x78\xad\xcd\x8a\xe7\x41\x68\x7f\x06\xae\x83\xb7\x5c"
- "\xa4\x74\xfc\x6c\x5b\xdc\x5a\x39\xdb\x4e\xb8\xcf\x12\x4b\x6d\x29"
- "\x1b\x96\xd0\x48\x6b\x80\x2c\xf5\x6e\x2d\xcf\xba\x2a\x8d\xd7\x9c"
- "\xd2\xf9\x5e\xb8\xb7\x8d\xad\xbf\x48\x66\x5e\x17\xd0\x92\x51\x9f"
- "\xd3\x2a\xc4\xe2\x4c\xaa\x5f\x04\xfd\xe0\x26\x5b\xbd\x5b\xec\x0e"
- "\x77\x49\x99\xcc\x36\x70\x61\xdc\x80\xe7\x0d\xc0\x73\xf6\x43\xcb"
- "\x72\xe8\x13\x27\xc5\x5d\xab\xed\x72\x0f\xef\x6d\x7f\x3f\xef\x6b"
- "\x0d\x9a\xf4\xf3\xfe\x80\x41\xa7\x7e\xd6\xf5\xcc\x3c\x46\x87\x97"
- "\x08\x7f\xd5\x53\xc4\xb4\xb0\xb9\x42\xe2\x3f\x41\xc7\xf2\xb2\x30"
- "\xdd\x30\x7d\xd9\xb7\x85\xb7\x43\x78\xbc\xce\x33\x54\x8f\xf7\x65"
- "\xa5\x42\xd3\x92\xf7\xfa\x44\xe5\xde\xe3\x9d\x4b\x44\x88\xd7\x72"
- "\xba\xdc\x37\xda\x7d\xf4\x23\x8f\xea\x8b\x1d\xfb\xe5\x1c\xd2\xb2"
- "\xf7\x38\x60\x5d\xc3\xb0\x9a\x51\x3e\x5c\xb9\xb7\x0d\xf9\x60\x6f"
- "\xfe\x51\xae\x77\x40\x8e\xf7\x17\x2f\xa7\x6f\x9e\xa6\x1b\x25\x8d"
- "\x45\xc5\xde\x00\xeb\x03\xa4\xa5\x21\x6d\x1d\xe0\x07\x91\xdf\xe9"
- "\xa3\xbd\x9b\x94\x1d\x7b\xe3\x3a\x23\x1f\xee\x0b\xf8\x3e\x8a\x7f"
- "\x12\xe4\x62\x3a\x60\xd9\xfb\x36\xab\x12\xf4\xe5\x75\xe3\x2f\x0d"
- "\xbf\x9c\xf8\xaf\xfb\xf4\xf9\xce\x6c\xd8\x5a\xe4\x5a\x49\xc3\xd0"
- "\x3f\xc0\xef\x3b\x09\x98\x47\x9c\x14\xee\x1b\x6b\xde\x58\x1e\xc4"
- "\x3c\xe1\x3b\xa9\x3e\x7a\xb1\xb1\x3f\x7a\x0a\xb6\x75\x2e\x8a\xf6"
- "\xaa\x25\xbd\xb4\xfc\x7c\xfa\x32\x4d\xf0\x3d\xeb\xa3\x7a\xa4\x33"
- "\xdd\x00\x67\x96\x41\xb3\xfe\xfb\x65\xaf\x5f\xcd\x39\xbf\xb3\x47"
- "\xb8\x05\x79\xbe\xc5\x7b\x4c\xdf\xd9\xab\xe8\xb0\xf3\x48\x27\xf4"
- "\x08\xaf\x13\x63\x6e\x16\x58\x6c\x13\xa0\xd7\x77\x1a\x7c\x34\x32"
- "\x4b\x5f\x87\x0a\x78\x43\x93\x58\xb7\xc4\x1d\xb7\x78\x4f\xac\x0f"
- "\x7e\xc6\xb1\x96\x61\xd0\x43\x52\x37\x1d\x9a\x55\xa6\xf0\x0e\x32"
- "\x5c\x4f\xd9\x79\x6a\xc3\xfb\xc5\x01\xd1\x2e\x2a\x0e\xe5\xf2\x3c"
- "\xc2\xb3\xa4\x9b\xd3\x3e\x05\x6f\x0b\xcf\x22\xc6\x29\xe3\x53\xcf"
- "\xb7\xba\xe9\xa4\x93\x12\xeb\x7b\xd7\x7f\x32\x3c\xbc\xde\xa3\xd6"
- "\xb9\x32\x72\x7c\x34\x2a\x68\xe0\xc5\x36\x06\xe8\xcb\xb4\xde\xcf"
- "\xb6\x06\xef\x3d\x2c\x2e\x15\x41\xb6\x39\x90\xb7\xc8\x68\x03\xb7"
- "\x4f\xb5\x2b\xa3\x3c\xb2\x5d\xbc\x47\x65\x2d\x55\x34\x58\xbc\x8c"
- "\x2c\x76\x45\x6b\x0b\xb7\x97\xdb\xc2\x6d\x96\x6d\x91\x3a\x16\x63"
- "\x44\xe8\x4e\xcc\xc7\x64\x7a\x2b\x60\x61\xfe\x33\x52\xe7\xa9\x8c"
- "\x9c\x58\x3e\xea\xed\x47\xcb\x8e\x0a\xcc\x41\xbf\xe5\xd2\xc4\x89"
- "\x93\x34\xe2\x61\xb5\x76\x36\xe2\x61\x8d\xed\xec\x20\xf3\xef\x07"
- "\xad\x3c\x26\x7b\x4b\x59\xdf\xca\xbc\xd7\x22\x6f\x1b\xf2\x4c\xd6"
- "\xf3\x4e\x56\x7b\x76\xf2\x3a\x80\xaf\x18\xc7\x9e\xf7\xd1\x88\x02"
- "\xbf\x1c\xef\x0f\xa5\x19\xcf\x98\xbb\x63\xfe\x37\xc2\x26\x2a\x3f"
- "\x68\x8d\x8f\xcb\x9b\x15\x3c\x9e\x85\x2f\x8a\x0e\xd4\x73\x3d\xf3"
- "\x94\x6b\x19\x7d\x03\x7c\xf9\x79\xd9\x4a\xba\x96\xf9\x49\x24\xef"
- "\x0d\x29\xba\x8f\xd8\x25\xdc\xb0\x3d\xa1\x51\x8b\x97\xd0\x37\x21"
- "\x47\x81\xd3\x34\xe2\x50\x7e\xa9\x1d\xb8\x12\x55\x9d\x25\x92\x3a"
- "\x28\x79\x6f\xd0\x1b\xfa\x82\xea\xcf\xf2\xda\xce\x08\x9f\xc1\x8b"
- "\xb8\xef\xb8\x9c\xbe\xc0\x38\x63\x51\x6b\x0f\x37\x3d\xcc\xfb\x0c"
- "\x27\xe8\xa6\x89\xdc\x5e\xb5\xc7\x79\xd3\x9d\xe2\xa2\x98\x2d\xd4"
- "\x98\x16\xf4\xd1\x4d\xc5\x18\x5b\x2c\xf2\xe7\xa6\x02\xf5\xbc\x33"
- "\x88\x7c\x19\xe2\xa2\x46\x9c\x8e\xb4\xb1\xc2\x9d\xc0\x32\x71\xa0"
- "\xcb\x7d\x93\xc3\x47\x3f\x6e\x55\x7d\x73\xd3\x18\x86\x15\x1f\x87"
- "\x9d\x41\xf4\x2d\x31\x6f\x02\xd6\x9f\xed\x65\xbc\x76\x79\xd3\x76"
- "\x29\x17\x80\x55\x6f\x52\x7a\x5b\x03\xae\x75\x6e\xcd\x01\x1d\xed"
- "\xd0\xd6\x7e\x94\x23\xef\xf5\x77\x42\x1f\x47\xe3\xc3\x3f\x34\xcb"
- "\x33\x94\x79\xfc\xe6\x91\x0a\xce\xa1\x5c\xcf\xd0\xd3\xfc\x3c\x8a"
- "\x9f\x03\x96\x83\x39\xde\x9a\x1c\xd4\x7f\x1a\xf5\xde\x3c\x52\xcd"
- "\xe7\x6f\x1e\xd5\x89\x3a\xba\xdc\x37\x8f\xf4\xd1\x68\xb3\xda\x73"
- "\x39\x98\xd3\xdf\x5e\x32\xcb\x0e\xcb\x9c\x92\xe9\xcc\x33\xcd\x5b"
- "\xa5\xfc\xb5\x77\x5a\x1a\x2c\xba\xde\xe0\x75\x9a\xd4\x13\x94\xd9"
- "\xd1\x6c\x93\xfc\x6d\x12\xa6\x9b\xd7\xfd\x46\xf3\x9b\x78\x5f\x4c"
- "\xa9\xaf\xcc\x8e\x4b\x7f\x37\x7b\xf0\x3b\x8a\xdf\x71\xfd\xb9\x1d"
- "\xbf\x10\xee\xa7\xe0\x77\x5c\xd2\x6e\x73\x61\x82\x0f\xef\x3a\x61"
- "\xb3\xf3\xb3\x8f\x6e\x3e\x22\x36\x67\x98\x60\x97\xc8\xfb\xfa\x6f"
- "\xf0\x3a\xc1\xcd\xd0\xb3\x37\x95\xaa\xbe\xc8\x94\x6b\x2a\x90\x47"
- "\xa6\xbb\x70\xd5\x88\x60\x63\x59\x80\xf1\xce\x68\xac\x09\x90\xfd"
- "\x26\x6e\x7f\x26\xdb\x0f\x22\x00\xfa\xf3\x75\x71\x8d\xf0\x1f\xae"
- "\x0d\x11\xef\xcf\x75\xb9\x33\x21\xff\xf3\xa7\xa8\x35\x87\x43\xc5"
- "\x0c\x4f\xe7\x09\x61\xb4\x5f\xe9\xb4\x83\x39\xdc\x97\x78\x7e\x0e"
- "\x6d\xb7\x9e\xa5\xcc\xbd\x22\xe5\xa3\x9c\xc3\x0e\xa2\x2d\xd0\x23"
- "\x18\x6b\xe4\x5e\x41\xbd\xf4\x0f\xc8\xc4\xf8\x7f\xd3\x71\x63\x3f"
- "\x69\x3d\xde\x6f\xc0\x3b\x8c\x3d\xfe\x66\x47\x90\x18\x56\x98\xdb"
- "\x87\xf2\x1f\x6a\x7e\x33\xc6\x6a\xf4\xf9\xc1\x9c\xb2\x62\xe8\x99"
- "\x5e\xbd\x95\x39\x7b\xe5\x19\x11\x34\xda\x77\x78\x2b\xcb\x42\x26"
- "\xf8\xff\x69\x47\xbf\xfc\xdf\x8b\xf3\xad\xc9\x87\x33\x54\x9f\x69"
- "\xa0\x4b\x74\x9f\xdd\x6a\x51\xfd\x75\xcb\xd8\xe8\xfe\xba\x15\xb6"
- "\xcd\x2d\x6b\xf0\xab\xc5\x6f\x97\x7a\x8e\xfc\xdd\x52\x1c\x71\x7f"
- "\x00\x3f\xe8\xce\x5b\x30\xfe\x8f\x08\xaa\x7e\xe0\x74\xb4\x83\x79"
- "\xe4\x1f\x64\xd1\x7a\xf2\x88\xf7\x6b\x39\x9d\xf9\x99\xd3\x35\xd8"
- "\x33\x3e\xba\xa5\x1a\xef\xd3\x58\x56\xab\x34\x8a\x7a\xef\x45\xed"
- "\x9e\xe5\xd0\xd5\x74\xcb\xe7\x0c\xcb\xba\xaa\xa2\x82\xf9\x14\x65"
- "\x36\x59\x43\x15\x15\xa8\xaf\xc3\xa0\x2b\xd2\x8e\xf1\x7b\xe6\xc9"
- "\x2e\xf7\xad\x66\xd0\xa5\x41\xee\xc7\x62\xbe\x17\xdf\xd6\xb8\x35"
- "\xb3\xd7\x26\xb3\x34\x38\x58\x1f\x75\xd0\x77\xc7\x40\x67\xa1\x6f"
- "\x3f\xca\x56\x63\xcd\x77\xef\xe4\x67\xe8\xca\xcf\x71\x9f\xd5\x0c"
- "\x9d\xd4\xbd\x76\x6f\x41\x8f\x89\x06\x74\x9b\x28\x27\xb4\xf6\x4c"
- "\x6a\x28\xe5\xed\x22\x6f\xfb\x1e\x6a\x09\xfd\x96\xec\x4f\x49\x18"
- "\xb7\x78\xc1\x03\xae\x65\x22\xfc\x4e\x77\x83\xd9\x1b\x3a\xe7\xc1"
- "\xd8\xfc\xed\xd3\xf4\x5d\x49\x8f\x17\x4f\x60\xd4\x7f\x5c\xc2\xd6"
- "\xe9\xd3\xd1\xbe\x61\x9e\x08\x6d\x38\x29\x02\xb0\xef\x52\xd6\x77"
- "\xd3\xc8\xd7\x97\x53\x56\x6d\x37\x65\xd4\x75\x53\xa6\x38\x95\x69"
- "\xaa\x85\xdd\xf6\xf8\x85\x34\x82\x4e\xc8\x1b\x54\x4c\x96\xba\xe5"
- "\x24\x79\x24\x5c\x09\xfb\x2d\x04\xfb\xed\x5c\x26\xeb\xc6\x5e\xfb"
- "\xad\x47\xda\xc5\xfb\x0a\x15\x1f\xed\x2b\x1c\xe8\xa0\x84\xd4\x02"
- "\x4a\x03\x7e\xae\xb3\x74\xeb\xfc\x54\x0c\x88\xdc\x66\x9f\xde\x5e"
- "\xd0\xbc\xd4\xea\xa0\x01\xb2\xad\xd0\xd7\xa2\xf2\xa3\xec\x7e\xc7"
- "\x61\x13\xf3\x54\x80\xe5\x86\xdb\xb0\x8a\xf7\x8c\xf7\x0c\x0d\x9a"
- "\x17\xd7\x8a\x20\xa7\x97\x0c\x17\xd0\x99\xdf\x75\x70\xdd\xbb\x91"
- "\xde\xe5\xfe\x6e\xb5\xcf\xf4\xab\x91\xfd\xf1\x28\xe6\x47\xba\x5e"
- "\x19\x79\x8d\x30\x95\x83\x47\x1b\x1a\x56\x86\x60\x7b\x9f\x65\x99"
- "\x1d\x99\x36\xbd\x48\x84\xec\x0b\x78\xff\x7e\x24\xb1\x6f\x01\xef"
- "\x29\xfe\x06\xb6\xcd\x57\xf9\x13\xf0\x78\xc1\x73\x05\x6b\x11\x60"
- "\xae\x6d\x68\x10\x98\x9f\x7f\x5d\x7f\x06\xb4\x33\x75\xe3\x10\xf6"
- "\xb3\x19\x39\xc5\x47\x53\xb6\x31\xee\xd2\x97\x06\xba\x13\xf6\xd6"
- "\xb5\xc0\xab\x22\x00\x3a\xe0\x3d\xc6\xff\xc9\x4e\x7d\xff\xd7\xcf"
- "\x7b\xaf\x48\xc3\xf8\x7f\xff\x01\x4e\x2b\x19\x4e\xb6\x12\xbb\x88"
- "\xbb\xf7\xcd\x36\x13\xef\x49\x03\xde\xf5\x28\xb3\xc7\x80\x83\x71"
- "\xea\xd7\x9d\xa6\x87\x1e\x42\xda\x11\x03\x0e\xf2\x5c\x87\xe7\xd6"
- "\xde\x3c\xaa\x4c\x7b\x44\x99\x87\x3a\x4d\xb7\xfe\x1a\x69\xa1\xe8"
- "\x32\xa3\x52\xa3\xcb\x8c\x1a\x16\x51\xa6\x5c\xd5\x33\x2a\x2b\xa6"
- "\x4c\x4e\x4c\x99\x19\x97\xe2\x36\xaa\x30\xa6\x4c\x49\x4c\x99\x35"
- "\x97\xe2\x36\xaa\x26\xa6\x4c\x43\x4c\x99\xfd\x11\xb4\x64\xbf\x9a"
- "\x2c\xa4\x35\xc5\x94\x39\x1e\x53\xa6\xc3\x78\xee\x87\xc6\xa9\x8b"
- "\xb7\x90\x0d\xbc\xc9\xbe\x5b\xfe\x8d\xe8\x9f\xce\x57\x9f\xee\x52"
- "\x65\x6f\xcb\xbc\xb4\x5d\xb7\x8d\x8d\xae\xef\xb6\x29\xd1\xf5\xdd"
- "\x36\xfb\xd2\x76\xdd\x56\x1c\x53\xa6\x3c\xa6\x4c\x75\x44\x99\xad"
- "\x7a\x3d\xdb\x62\xca\xec\x89\x29\xd3\x78\x29\x5f\xdd\xd6\x1a\x53"
- "\xa6\x3d\xa6\x4c\xf0\x2b\x68\xc1\xe3\xb8\xf2\x6b\x1b\xc2\xb6\xf2"
- "\x3d\xb0\x11\x46\xcf\x61\xdf\x08\xde\x07\x7d\xa3\x3b\x98\xc4\xfb"
- "\x73\x3c\x5e\x1d\x76\x06\x31\xb6\x8c\xc6\xfc\x67\x8c\xc7\x18\xb3"
- "\xd8\x6f\x84\x65\x5a\xd9\xd8\xa3\x33\xfb\xb3\x45\xa5\xef\x99\xee"
- "\xbf\xc6\x75\x1d\x1e\xc6\xe3\xd4\xe8\x4d\xbd\x36\xb1\xf2\x41\x23"
- "\x1d\xce\xdf\x8d\x7d\xd8\x7a\xe5\x8f\x92\xc0\x36\xf9\x61\xa7\x2c"
- "\x73\x24\xc2\x8e\xe6\xfa\x03\x7b\x96\x07\xcd\x31\x78\x34\x5c\x06"
- "\x8f\x54\xd8\x46\xd9\x2d\x18\xbd\x78\x7f\xbd\xb9\x16\x36\x10\xec"
- "\x7e\xc6\xed\x04\x65\x65\x49\x9b\x6c\x41\x37\xf1\xbd\xb7\xf4\x2e"
- "\xb9\xff\xae\x6c\xd2\x2c\x47\x23\xea\x67\xdb\xbd\xb1\xf8\x3c\xfb"
- "\x48\x61\xfc\x65\xdb\x2d\xeb\xe5\xc3\xa5\x7e\xe0\x95\x55\x60\xf8"
- "\xa9\xf8\x28\x6b\x93\xb4\x35\x2a\x0e\x65\xb1\x6f\x00\xfb\xd0\x1c"
- "\x0e\x64\x73\x1e\xf0\xff\xe8\x22\xa3\xbd\x18\xeb\xfd\xc8\x3b\xf6"
- "\x72\x34\x53\x7d\x98\x75\x20\x9a\x27\x93\xc0\x2b\x59\x47\xa3\xfb"
- "\x3d\xcb\x17\xdd\xef\x59\xfe\x68\x9e\x34\x81\x27\x6f\x37\x47\x97"
- "\xb9\x3d\x3d\xba\xcc\xed\x19\x11\x65\xaa\x55\x3d\xb7\x67\xc7\x94"
- "\xc9\x8d\x29\x93\x17\xf1\x8c\x36\xde\xee\xe8\x9d\xfb\x48\x1f\xa8"
- "\xdb\x9d\x11\xcf\xa6\x4d\x52\x7f\xde\xbe\xce\x48\xe3\xb5\xa3\xba"
- "\x57\x94\x0f\x8e\x0e\xaf\x21\x46\xde\x39\xff\x81\x18\x1c\x9a\x62"
- "\x70\xe8\x95\x7f\x7d\xef\xfe\xe3\x93\x74\xc7\x1e\x7d\xef\xbe\x03"
- "\x63\xf6\x74\x7e\x06\xac\x1a\xe4\x07\x1d\xee\x48\x8d\x86\x77\xc7"
- "\xb0\x68\x78\x77\x8c\x8c\x78\x4e\xc3\xf3\xd8\x88\x36\xa4\x25\xda"
- "\x28\x01\xfc\x02\xfb\xed\x8e\x59\x46\x3a\xcf\x29\x81\x6f\xbb\x4b"
- "\x8e\x35\x39\xec\x5b\x36\xf8\x04\xdd\x31\x9e\xe7\x9f\x3a\xcc\x48"
- "\xf9\x27\xd5\xae\x3b\x36\xc5\xe0\xb1\x2d\x06\x8f\x3d\x11\xed\x0a"
- "\x58\x57\xd1\x03\xd6\xd0\x83\x0f\xb3\xed\xc3\xfe\x94\xd2\xc7\x6b"
- "\x25\x6c\xb6\x0b\x94\xc6\xbe\x75\x27\x4b\x28\xd1\xeb\x6c\xc7\x5c"
- "\x6e\x5f\x41\xbf\xfc\x94\x72\x28\x47\xf9\x56\x91\xbd\xcb\xfd\xbd"
- "\x74\x83\x1f\xb5\xb5\x87\x72\xb4\xca\x0f\x33\x90\x06\xfd\x97\xb5"
- "\x55\xd9\xb9\x07\x8a\x85\x2b\xaf\x06\xf4\xc4\xbc\x68\xcc\x75\xfa"
- "\x3c\x62\x16\xfb\x88\xb1\x1f\x2b\xc6\xf8\x54\xb5\x0f\xff\xbd\xd9"
- "\x11\x7c\x1d\xb0\x2f\xbf\x5b\x9c\xa0\x31\xc3\xd9\x06\x60\x19\x65"
- "\x5f\xb3\xc3\x21\x3f\xf1\xdc\xdb\x1b\x3a\x2d\x6d\x37\xbc\xb7\xeb"
- "\x65\x6b\x22\xca\xfa\xf5\xb9\x71\x3b\xbf\x1b\x1d\x22\xf3\xe1\x80"
- "\x9f\x00\x27\x5d\xd9\x7b\x63\x86\x1f\x86\xbc\xa2\x4c\x93\x51\x86"
- "\xe7\xd1\x72\x8f\xb7\x84\xcc\xb7\x95\x92\xd9\xb3\xfc\x84\x84\x6d"
- "\xf8\x6d\xc0\x96\xee\xf0\x96\xb6\x93\x37\xd0\xca\x6b\x5d\x66\xe5"
- "\xa3\x33\xc6\x9e\x18\x24\x4b\x67\xe5\x21\x8c\x71\x63\xec\xe1\xca"
- "\x43\xd9\xc0\x0d\xe3\xd9\xf7\x26\xb2\xbe\x89\xa4\xdd\xa4\x49\x33"
- "\x1e\x9c\x3e\x75\xd4\xcf\x1e\x9c\x3c\x6b\xd2\x5d\xf6\x59\xf3\x9f"
- "\x99\x5b\x38\x6a\xe1\x73\x25\xf6\xa5\x8b\xe6\x97\xcc\x5f\xf0\x73"
- "\x7b\x96\x73\x84\xd3\x3e\xa7\x44\x5d\x33\x8b\xe6\x2c\x2e\x19\xc7"
- "\xb7\x23\xed\xc5\x8b\xe6\x2e\x91\xb7\xb7\xa4\x50\x34\x90\xf9\x25"
- "\x73\x17\xd9\x47\x14\x8e\xb4\xdf\x3b\x67\x7e\xd1\x73\x8b\xe6\xc6"
- "\x85\x75\x97\x7d\xd1\xdc\x45\x73\xe7\x14\xda\xc7\xd9\xb3\x18\x72"
- "\x24\xb8\x88\xfe\xcc\x32\xc6\x31\x1e\xbf\xaa\xdc\xe2\xa8\x3e\x9e"
- "\xf9\x14\xff\x8c\x09\x5c\x3a\x96\xdd\x69\x89\xe6\xb9\x3b\x6d\xd1"
- "\x3c\x77\x67\xe6\xa5\x63\xd9\x9d\x31\xe3\xdf\x9d\x31\xe3\xdf\x9d"
- "\xb3\x2f\x1d\xcb\xee\x8c\x19\xff\xee\x8c\x19\xff\xee\xec\x1d\xff"
- "\xc0\x4b\xbe\xd5\x52\x2f\xdc\x19\x33\xfe\xdd\x19\x33\xfe\xdd\xd9"
- "\x18\xf3\x7c\x2c\xe2\xf9\x5a\x3c\xb7\x45\x8e\x8f\x78\x0e\x18\xf2"
- "\xd9\xa7\x5f\xbe\x6f\x31\xf2\xb0\xae\x87\x6e\x6e\x53\x79\xbf\x6f"
- "\x8f\xc8\xdb\xae\xe7\x1d\xd3\x2b\x7f\xbc\xaf\x8d\x74\x35\x5f\xff"
- "\xfe\x6b\xac\xd3\xd9\x1f\x8f\xc7\x26\xc8\xc7\xb7\xcf\xd2\xf7\xaf"
- "\x61\x58\xcc\xc3\xec\x9f\x29\x5e\x7d\xb4\xab\x7e\x30\x59\xb8\x4c"
- "\xfd\x4b\xec\xd7\x3b\x66\x24\xfb\xea\x22\x8d\x7d\x97\xa1\x53\xbe"
- "\xcf\xf6\x6f\x48\x8d\x17\xdf\xf7\x49\x9b\x1f\x65\x74\xf8\x72\x5e"
- "\x03\x38\xec\x0b\x6c\xa9\x52\x63\x71\x1b\xee\x53\x99\xa7\x51\xde"
- "\x2c\x4c\x63\x9e\x65\x1f\x68\xa4\xa5\xe1\x97\x0e\x78\x3e\x03\xde"
- "\x9a\x21\xf1\x6d\xcb\x58\x3b\xb7\x77\x3e\x68\x22\x6b\x95\x5b\x6b"
- "\xf5\x6a\x6c\x5b\xff\x20\x5d\xad\x2d\xec\x2d\x17\xee\x83\x79\xf5"
- "\x48\x8f\x3f\x4f\xfa\x01\xe4\xe5\x07\x16\xb5\xde\xf2\x03\xf4\xff"
- "\xd4\x31\x6a\xed\x74\x6f\x39\xf4\x6d\x37\xe0\x5c\xc0\xb5\x07\xd7"
- "\x7f\x37\xe0\x7b\xe4\x7c\xfb\x07\x25\xc2\x9d\x30\x93\xe1\xc6\xa4"
- "\xaf\x83\x7e\xeb\xb6\x86\xca\xf3\xe2\xbc\x6b\x10\xee\xc4\x07\xe3"
- "\xa4\x7b\x60\x33\x74\x03\x8f\x00\xe3\x1b\x91\xde\x2a\xdc\x83\x66"
- "\x71\x7e\x1f\xd7\x87\x32\xfd\xd9\xda\x86\xff\xad\xf2\xe1\xcf\xce"
- "\x88\x69\xc7\x97\x27\x29\xfb\x57\xaa\x1d\xd9\xe1\xe8\xba\xb3\xc7"
- "\xc6\x6f\x47\xf6\x2c\xb4\xe3\xcb\xf8\xed\xc8\x2e\x96\xb4\x35\xa1"
- "\x2d\xa6\x4b\xde\xad\x43\x5b\xbe\x94\x74\x8f\x4e\xdf\xa6\xdb\x42"
- "\x01\xcc\xc3\xd2\xf0\x4e\x96\x9d\x59\xda\xd7\x6f\x7a\xbe\x26\x6b"
- "\x0d\xcd\x88\x53\x67\x9b\x70\x0f\x98\xe9\xa3\x1f\xca\x73\x0d\x11"
- "\xe9\x21\x85\x0b\xe8\x64\x62\x3a\xa1\x3d\x28\xd7\x5f\x7f\x1b\xf3"
- "\x12\xb5\x16\xf2\x43\xc8\x7f\x36\x19\x6b\x99\x8b\x4b\x85\xdf\xa0"
- "\x23\xde\x39\x62\xde\x05\x23\xde\xad\x89\x7a\xb7\xb2\x37\xbd\xd6"
- "\x48\xff\x7a\xfd\xf4\xc3\xa6\x98\x7e\x42\xff\xdc\xf5\x58\x74\xbb"
- "\x7f\x78\x5c\xb5\x0f\x7d\x74\x09\xad\x7f\x18\x44\x1f\xf5\xc4\xef"
- "\xa3\xbb\xd2\xe3\xf3\xda\x5d\x72\x1d\x4d\x0c\xa6\x38\xf0\xee\xca"
- "\x45\xdf\xf5\x48\x1e\xd4\xfb\xe9\xd2\xfe\xb9\xab\xc8\xe8\x9f\xaf"
- "\xd7\xc6\xbb\x76\xc7\xb4\x31\x7c\x92\x7e\x34\x4a\xb5\xf5\x47\x2b"
- "\x63\x60\x1f\x89\xcf\x8b\x77\xf9\xd0\xce\x70\x3f\xed\x0c\xf5\xcf"
- "\x8b\x3f\xb2\xa1\x3d\xe1\x4b\x79\xf1\x47\x59\xaa\x0c\xc5\x2b\x33"
- "\x45\xb8\xe3\xd5\xf3\xa3\x42\x57\x88\xed\xdc\x1f\xd5\xf2\xfa\x52"
- "\x44\x7a\x69\x34\xff\xa1\x0d\x5c\x8e\xe9\x17\x52\x7a\x96\xfb\xe1"
- "\xa4\x9d\x4c\x5f\xc5\x93\x5d\xee\x1f\x1d\x8f\xa1\xd5\xb9\x93\x34"
- "\xf6\xb1\x4e\x53\xc2\x36\x45\xaf\x71\xc3\x63\x70\x0a\xc6\xa7\xd7"
- "\xd8\x34\xd0\xeb\x5c\x7c\x7a\x8d\x1d\xd9\x3f\xbd\xc6\x72\xff\x9f"
- "\xbb\x94\x5e\x63\x0b\x22\xe9\x05\x5b\x57\xb6\xef\x3b\x36\xf0\x46"
- "\x4f\xbe\xa8\xe7\xb6\x86\x29\xcd\x0a\x5e\x51\x65\x3a\xb8\xcc\x26"
- "\x6b\x50\xf1\x09\x6c\x48\xcb\x59\x1a\x5b\x6a\xc8\xff\xa0\x1a\x1a"
- "\x20\x7a\x1e\x65\x3f\xa2\x04\x2e\xe7\x75\x9e\xf3\x78\x43\x59\xc4"
- "\xf3\x8f\x98\x7a\x5b\xe3\xeb\x82\xb1\x7e\xd0\xf4\xa5\x4b\xd3\xc7"
- "\x59\x94\x1f\xd9\xb8\x9c\x68\x1d\x31\xce\x1e\xdd\x47\x3f\xe2\xb5"
- "\x53\xab\xbe\xed\xf4\x95\xbf\xcb\xf7\xd9\xb8\xea\x4b\xfb\xec\xc7"
- "\xb7\xab\xfe\xfa\xf1\x35\x31\xf8\x35\xc4\xef\xaf\x71\x9e\xfe\xfb"
- "\x6b\xdc\xf1\xfe\xfb\x6b\x1c\xaf\x9f\x9e\xf3\xd1\x8f\xb3\xa2\xc7"
- "\x8d\x1f\xa7\x45\xb7\x17\xf5\xa2\x9c\x30\x5d\x75\x2d\x3f\x7f\xdd"
- "\x76\x1b\x3f\xd6\x71\xdc\x57\x7c\xae\x08\xf8\x0f\x67\x1c\xaf\x14"
- "\x46\xbf\xb0\x41\xc3\xea\xe5\xf1\xf7\x5b\x79\x8e\xdb\x52\x43\xc4"
- "\xfb\xc8\xf6\x6f\xb1\xed\x7e\x77\x92\x66\xa2\x56\xdc\x9b\x4e\x52"
- "\xce\x9f\x35\x93\xa9\x94\xf7\x3c\xa5\xdf\xba\x5c\x43\xb8\x7b\x58"
- "\x64\x5f\xf0\xde\x27\xcf\x4d\x37\xa8\xb9\xd3\xdf\x50\x7e\xbb\xea"
- "\x97\x9c\x77\xa3\xe9\x78\x77\x4e\xfc\x7e\xb9\x3b\x0f\xfd\xf2\xb7"
- "\xf8\xfd\x72\x77\x49\xff\xfd\x72\x77\x35\xfa\xe5\x6f\x97\xca\xd1"
- "\xdd\x0d\xba\x1c\xad\xe6\x32\xf6\x05\x3c\x1f\xcf\xf9\x06\xe7\xc1"
- "\x3d\x64\x24\x47\xd2\x64\x54\x87\x21\x47\xb2\xcc\x71\xc0\x92\xf5"
- "\xab\x3c\x77\xb7\xea\x30\x22\xe0\xe6\x90\xb5\x23\x9e\x9c\xe4\xd8"
- "\x38\xef\x6d\xc5\x64\x01\x0d\xf3\xb6\x30\x8c\x45\x44\xa8\xe7\x19"
- "\xce\xc7\xe9\xb7\x05\x22\xe5\x24\x27\xd7\xc8\xc7\xba\x4e\xcf\x9b"
- "\x23\xba\x1c\xc4\xf9\x62\x60\xeb\xed\x1f\x20\xc7\x11\xce\xcf\xf9"
- "\x62\xf2\xd4\x28\x79\xcc\x39\x1e\x2d\x8f\x39\xbb\xa3\xf9\x13\xf4"
- "\x47\x39\x0d\x7a\x0e\xf7\x66\xe0\xf0\xb5\xf9\xeb\xf2\xb2\x39\x7e"
- "\x64\x8c\x6c\x82\x07\xc6\x37\x2b\x1e\x18\xff\x76\x34\xae\xe3\x27"
- "\xc6\xe7\x81\xf1\xb3\xfb\xe7\x81\xf1\xce\xfe\x79\x60\xfc\x26\xe6"
- "\x01\x1f\x8d\x6f\x8a\x96\xcd\xf1\xbb\xa2\xdb\x8e\x7a\xa5\x6c\xd2"
- "\x35\x57\x22\x9b\xb0\x85\xae\xed\x4f\x0e\x59\xa6\xd8\x7f\xa4\xbe"
- "\xdb\xd8\xeb\xf8\x5a\x34\xb3\x40\xae\x80\xdf\x3d\x05\xbc\xa6\x04"
- "\x1d\x9f\xcd\x34\xac\x93\xe7\x31\xef\x29\x89\xa4\xe3\x06\x75\x06"
- "\xd2\x85\xbc\x5f\xf2\xbe\xb2\xa2\xe7\x84\x43\xd1\xed\xbf\x67\x53"
- "\x7c\x7a\xde\xb3\x0b\xf4\x74\xc5\xa7\xe7\x3d\x47\xfa\xa7\xe7\x3d"
- "\x6d\x7c\x46\xea\x52\x99\xba\x27\x64\x5f\x22\x6d\x14\x59\xe6\x2c"
- "\x4d\x78\xe8\xeb\x8d\x4f\x13\xc6\x44\x8f\x4f\x13\x86\x5d\xf9\xf8"
- "\x34\xc1\x19\x7f\x7c\x9a\x50\x1d\x7f\x7c\x9a\xd0\xa0\xe4\x61\x82"
- "\x2f\x5a\x1e\x26\x78\xa2\x79\x02\xb4\xfb\x5f\x1b\x9f\x26\x66\xc5"
- "\xc8\x40\xd5\x49\x9a\xf8\x2e\x6c\x0a\xdd\xde\x9c\xf4\x5c\x34\x8e"
- "\x13\xa7\xc4\xef\xb7\x89\x85\xe8\xb7\xaa\xf8\xfd\x36\xb1\xbc\xff"
- "\x7e\x9b\x58\x8b\x7e\xab\xba\xb4\xdf\x26\xee\xb9\x72\x9b\x62\x62"
- "\x7b\x74\x9f\x4d\x3c\x7a\xe5\x7d\x36\x69\x64\xfc\x3e\x9b\x34\x31"
- "\x7e\x9f\x4d\xd2\x7d\xd3\x27\x6d\x8a\xee\xb3\x49\x25\xd1\x7d\x06"
- "\xba\xfd\x0f\xfb\x0c\xfd\xb3\x46\xf9\x27\x4c\xba\x80\x79\xfb\x80"
- "\x2e\xf7\xa4\x0e\x1f\xdd\xbb\x47\xcd\xad\xef\x55\x63\x87\xea\xc3"
- "\x77\x90\xc7\x77\xe9\x38\x70\xaf\x45\x4f\xfb\xd9\xa5\xfd\x70\x6f"
- "\x06\x74\x74\x47\x63\xa9\xdc\xdb\x52\x7d\xc8\x34\x47\x3e\xcf\x72"
- "\xde\x9f\xba\x77\x22\x97\x45\x1f\x0b\x6f\x30\x44\xac\xd7\x91\x3f"
- "\xc0\x70\xf8\x6c\x68\x0c\xac\xe2\x2b\x19\xe3\x2f\xe3\x53\xb3\xc6"
- "\x53\x76\x07\xe0\xdd\xf7\xbc\xe2\xd5\x7b\x63\xed\xdf\x7a\xbc\x7b"
- "\x58\xf1\xe9\xe4\x11\x31\x38\x04\xe2\xf3\xe9\x7d\xa9\x68\x43\x7d"
- "\x7c\x3e\xbd\x2f\xb3\x7f\x3e\xbd\x0f\xfd\x4f\xf5\x11\x73\x9f\xc1"
- "\x8f\x87\x7c\x31\x73\x9f\xfb\x1c\xd6\x80\xe2\x1d\x69\x13\x55\xee"
- "\x5d\xd3\xe5\xbe\x2f\xd6\xfe\x43\xdf\xe4\x0e\xd4\x71\x4e\x8a\x29"
- "\xdf\x8f\xfd\x77\x1f\xdb\x7f\xef\xf4\x83\xf3\x65\xec\xbf\xfb\xd8"
- "\xfe\x7b\xe7\x52\xd9\xca\xd5\xed\xbf\x78\x73\xbc\xdc\x91\xf1\xfb"
- "\x3f\x37\xa6\xff\x29\xaf\x04\xf3\x61\x59\x3e\x3a\x5f\x51\x64\x3e"
- "\xf6\x4d\xe2\xbc\xcc\x23\x71\xf2\xd6\xc4\xc2\xec\x27\x9f\xe7\x12"
- "\xde\x63\x5f\xaa\xb8\xbc\x97\xab\x9f\x29\x99\x3c\x31\x5a\x1e\x27"
- "\x9b\xa3\xe5\xf1\xbe\x86\xe8\x72\x93\x33\xa2\xdf\xdf\x1b\xf8\xdf"
- "\xd3\xb1\x93\x37\xc5\xf0\xc0\xc1\x93\x74\xff\x35\x8a\x07\xee\x9f"
- "\x1f\x83\xc7\xae\xf8\x3c\x30\xb9\x11\xed\x3f\x18\x9f\x07\x26\xfb"
- "\xfa\xe7\x81\xc9\x21\xd0\xf2\x60\x24\xdf\xce\x2c\xcd\x19\x10\x9d"
- "\xe7\x7e\x7b\x7c\x9d\x77\x7f\x76\xfc\x35\x82\xfb\x67\x28\x1a\xdf"
- "\x5f\x11\x4d\xe3\xfb\x1d\xd1\x34\x44\x5b\xfe\xe7\x34\xec\x8d\x07"
- "\xd1\xe5\xbe\x3f\x56\xfe\xbd\x27\xe9\x27\xba\xfc\x4f\x79\x20\x06"
- "\xc7\x80\xc2\x25\xde\xba\xc8\x4f\x78\xfe\xeb\x8d\x4f\xcb\x9f\x8c"
- "\x8c\xdf\xe6\x9f\x4c\xc4\x18\xe4\xd5\x2e\x91\xa5\x9f\xcc\x46\xfa"
- "\x4c\x5e\x0f\xe5\xf5\x90\x3a\xa4\xcf\x0c\x91\x45\x8e\x57\xbd\xe3"
- "\xd2\x4f\xca\xd9\x17\x85\xe9\xcf\xfc\x6b\x1d\x46\x33\x78\x0c\x62"
- "\xbc\xf2\x4b\xa5\xdf\x82\x75\x0d\xf3\xfa\x8d\xcc\xeb\x3f\x91\xf6"
- "\x1f\xef\xb3\xb0\x1f\xa1\xd5\x49\x33\x38\x2e\x85\xc1\xef\x9c\x3f"
- "\x06\xf6\x71\x96\x0b\xce\x6f\xe4\x55\xeb\x66\xe5\x31\xba\x69\x8a"
- "\x39\x7e\x1f\x4f\x19\xd6\x3f\xef\x4c\xc9\x56\xfd\x3c\xa5\x28\xba"
- "\x9f\xa7\xcc\xd0\xdc\x83\x66\x71\x5b\xc1\x03\x57\x24\x27\x25\x76"
- "\xe1\xef\x57\xdf\xaf\x7e\xb4\xb5\xb8\x8c\xbe\x75\x9a\xa6\x1c\x93"
- "\xf5\x99\x44\xd0\xba\x2a\x81\x1a\xa5\x0e\x98\x7a\x8b\xc4\x13\x79"
- "\xf2\x43\x64\x12\xab\x9f\x6e\xe5\x77\xf5\x6e\x11\x44\xbe\xa3\xbc"
- "\x27\xc0\x67\xab\xc1\x0b\xd7\x9e\xa0\x29\x67\xa2\xca\x43\xf2\xbd"
- "\x0a\x46\x66\xbd\x94\xc7\xa9\x19\xc6\x9a\xee\x1a\x3c\xc7\x5f\xf7"
- "\x9d\x9a\x6b\xf8\x3e\x28\x9f\xb1\xa9\xfd\xee\x5f\x32\x4e\x7c\x56"
- "\x86\x71\xba\xbc\x1e\x98\x5a\x6b\xf0\xaf\xf2\xb5\x9c\xba\xab\xcf"
- "\x97\x6f\xea\x7e\xbc\x2b\xb8\xcc\xda\x60\x84\x1c\x4c\x6d\x8b\x84"
- "\xa3\x62\xa2\x4c\x0d\x1a\xfe\x78\x5d\xee\x69\xe6\xaf\x80\xa5\xe3"
- "\x33\x6d\x64\x34\x3e\xd3\xc6\xc2\x4e\x49\xd7\x61\xe4\x5e\x0e\x06"
- "\xf7\xb9\xe2\x59\xe6\x87\x69\x05\x97\x5b\xf3\x4b\xb4\xd1\x8c\x8d"
- "\x97\xf0\xd6\x34\x69\x2f\x31\x8c\xaf\xc0\xf1\x68\xd4\xdc\x42\xee"
- "\xdd\xf3\xde\xd6\xf4\x2d\x4a\xee\xa7\xc7\xac\x11\x4e\xeb\x90\xfe"
- "\x54\xba\xdc\x3f\x1e\x8a\x95\x83\xe9\xa9\xc6\x18\x1d\x93\x9e\x61"
- "\xc8\x3d\xe6\xb5\x0c\x37\x66\x9d\x75\xfa\x44\x25\x0b\xd3\x6b\xb5"
- "\xe4\xc8\xf9\xda\x74\x69\xff\x19\xeb\xa5\x78\x3f\x31\xa6\x5c\xcc"
- "\xfa\xdf\xb4\x0e\xd1\xff\x3a\x7d\x2a\xfa\x37\xc0\x7b\x5b\x2a\x56"
- "\xc3\xf4\xa6\x98\xf5\x0a\xff\x06\x79\xfe\xfe\xaf\x80\x3b\x43\xd7"
- "\x7b\x0f\x8c\x8f\xa9\xaf\xc3\x75\xe6\x72\xed\x9f\xd1\x4f\xfb\x67"
- "\xf4\xb5\x7f\x81\x84\x1b\xb3\x96\x38\x43\xb6\x3f\x7c\x89\xfe\x9b"
- "\xc1\x3e\xa4\x06\xdd\x60\x73\xcf\xd8\x6b\xd8\xea\xbc\x7e\xd0\xbf"
- "\xad\x3e\xa3\x6f\xfd\x4f\x95\xeb\x5b\xff\xf3\xc7\xb3\xd5\x7d\x24"
- "\xf7\x56\xa3\xeb\x6e\xb5\xd6\xc6\x6d\x4b\x3f\xeb\x7f\x0f\xe8\xeb"
- "\x7f\x0f\x14\x44\xeb\xb3\x07\xec\xd1\x7d\x38\x23\xa6\x0f\x1f\xc8"
- "\x89\xee\xc3\xe9\x1d\xff\xdd\x71\x0d\xcf\x94\x98\x98\x68\x4a\x4c"
- "\x30\x25\x24\xe2\x35\x9a\x48\x03\x12\xcd\x89\x49\xf8\x5d\xa5\x5f"
- "\x07\x98\x12\x4d\x66\xfc\x92\xf4\xeb\x55\x31\xcf\x03\xb8\x2c\x7e"
- "\x66\xfd\x9a\x14\xf3\x7c\xd5\x57\xbc\x1f\xa0\xd7\x6b\xd4\x6f\x8e"
- "\x79\x4e\xfa\x8a\xf7\x57\xfd\x0f\xcb\xd3\x25\xcf\xd1\x7e\x68\x93"
- "\x17\x2c\x99\x53\x34\xbf\x50\xee\x17\xcf\xb5\xcf\x79\xf2\xc9\xb9"
- "\x8b\x17\xdb\x4b\x16\xda\xef\x19\xff\xe0\x1d\x77\xd9\xd5\xb6\x73"
- "\xd1\xb8\x11\x85\x29\x34\x75\xe9\x22\x7e\x31\x75\xe6\xe4\x3c\xfb"
- "\x8c\x7b\xc6\x47\xbf\x34\xc0\xc8\xed\xe5\xcb\x41\x89\x90\xbf\x9c"
- "\xca\x21\x44\xeb\x5e\x91\xba\xa7\x8d\xfd\x7c\xd5\x9a\xc7\xcf\x0e"
- "\x35\xb1\xff\x68\xb7\x4b\x78\x6e\xe4\x3d\xfd\x99\x73\xb9\x11\xa3"
- "\xb6\x96\x53\xf1\x13\x7c\x7e\x65\xe6\x2a\xf1\x91\x9f\xec\xf7\x93"
- "\xe9\x04\xcd\xfe\x73\x63\x2e\xf2\xe2\xd9\xeb\x0b\x91\xdd\x45\x16"
- "\x94\x7f\x16\xef\x12\xc4\x8f\x35\xa4\x05\x74\x5f\xe8\x9f\xae\x92"
- "\x69\x1f\x95\x1b\xf9\xac\x27\x69\xd6\x08\xf1\x91\x90\xcf\x7c\x3e"
- "\x48\xe5\x9b\xf9\xa5\x30\x3d\xb8\x9f\x75\x43\xed\x60\x32\xf3\x5e"
- "\xe8\x6b\x83\xc9\xf2\xda\x10\x8e\x59\x32\xb3\xc3\xd8\x0b\xad\xc4"
- "\xb3\x8f\x66\x1f\xe5\xba\x39\xaf\x66\x7a\xf0\x04\xe7\xaf\x8b\xca"
- "\x3f\x6b\x58\xdf\x5e\xec\xcc\x0e\x13\xf2\x4d\xff\x9c\xac\xd6\xb0"
- "\xf8\x47\x30\xe5\xed\x82\xdb\x72\x29\xc1\x8b\xae\x68\x0a\x95\x93"
- "\xf2\xf9\x99\x35\x77\x59\x58\x84\xd8\x3f\x7d\x6a\x87\x4b\x54\x3d"
- "\x43\x66\xc8\x74\x82\x67\x11\xfb\x28\xcc\x9a\x52\x3f\x97\xcc\x68"
- "\xff\xb0\xd3\xf4\x50\xa9\x7d\x1a\x91\x6b\x2a\x99\xff\xe4\x64\x7f"
- "\xc3\xbd\xda\x86\xbf\x90\xf9\xad\xee\x72\x53\xb7\xb0\x51\x69\x89"
- "\x68\x17\x1c\xc7\x28\x20\x82\xec\xe3\xdf\x54\x10\xe6\x3c\x67\xbb"
- "\x5c\x36\x6a\x29\x09\xd0\xca\xe3\x22\x58\xf1\x17\x75\x36\xa0\xb9"
- "\x23\xc0\xfe\x8b\x96\x95\x53\x29\xf1\x64\x1e\x99\x9a\x1d\x35\xe4"
- "\x9d\x1d\xa0\xd2\xe3\xa2\xbd\xa9\xe0\x0b\x6a\x71\xec\xa6\xfc\x56"
- "\x32\x35\xb5\x7d\x46\x32\x16\xcf\xda\x33\xec\xf7\x68\x5b\x39\x9f"
- "\xd3\x2e\xd0\xf2\x95\x34\x70\xf9\xa7\x64\xf5\xb6\xb7\xa2\x9e\x33"
- "\xf4\xc8\x31\x4a\x00\x3c\xd3\x8a\xcf\xc8\xb6\xe2\x61\xf6\xf3\xcd"
- "\xa1\xda\x32\xb2\x09\x57\x66\x6a\xb7\x2b\x33\xad\x5b\x64\x0e\xee"
- "\x72\x65\xa6\xb7\x14\x23\x7f\xdb\x87\x34\xa8\x95\xd2\x3f\x3a\xdd"
- "\x6a\xaa\x39\x4f\xc3\xb8\x4d\x27\xd1\xb6\xda\xf3\xc8\xbf\xf6\xe3"
- "\x72\x0d\x65\x23\xcb\x84\x92\x3f\xae\xf1\xe6\x05\x49\x03\xac\x9a"
- "\x6e\x1a\x56\xdb\x4d\x36\xad\xf2\xe3\x72\x2e\xd7\x41\x3f\x5d\xe6"
- "\x6d\x22\x2a\x5d\x29\xc2\x3d\x6b\xf7\x16\x40\x27\x0e\x78\xe7\x89"
- "\xfd\x66\x6f\x53\x07\x35\x07\xba\xa9\x85\xfe\x4a\x5e\xe7\x29\xcf"
- "\x5b\x4f\xec\xe7\x35\xeb\x04\xcf\xf2\x36\xd4\xa5\x78\xc7\xd5\xcc"
- "\x67\x95\xcb\xa9\xaa\x8c\x52\x8b\x97\xd3\x80\xd3\x48\x57\x73\xfb"
- "\x06\x87\x37\x74\xca\xb3\x5c\xfa\xe3\xce\x3e\x5a\xd6\x4c\x89\x2d"
- "\x81\x1a\x6e\xbf\x29\x9c\x72\x86\xbc\x81\xa3\xe4\x2d\xfe\x9b\x47"
- "\xb3\x74\xb4\xaf\xd3\xc8\xf2\xf6\xc5\xa3\x26\xaf\xf9\x22\x79\xf3"
- "\x02\x74\x10\x75\x8b\xb5\x67\x52\xa1\xb7\x72\x5a\x02\x41\x3e\xef"
- "\x94\x25\x3a\x6d\x29\x55\x8b\x68\x64\xdd\x79\xca\xd8\x72\x9e\x32"
- "\x45\x57\xa6\x89\x7d\x6c\xf9\x6c\xea\x16\x5c\x53\xdb\xc8\x82\xb6"
- "\x2b\x7f\xec\x64\xdd\xd7\xb6\x27\x93\xea\xbb\xfb\x7c\x6d\xbb\x3b"
- "\xfb\x7c\x6d\xc1\x53\x7e\xf6\xb7\xf5\xd1\x43\x6b\xac\x4d\x34\x00"
- "\x72\xd2\xc0\xfc\x5d\x75\x96\xcc\xab\xcf\x12\xdd\x56\x6e\x22\xfb"
- "\x3c\x3e\x67\xf1\xb3\xb9\x5e\xf4\x0d\xdf\x9f\xa0\x9f\x0d\xc3\x35"
- "\x15\xbf\x04\xa4\xcb\xf8\x0d\x6d\x3a\x1f\x23\xcd\x84\xb4\x24\x5c"
- "\x13\x21\x2f\x61\x57\xad\xf0\xa3\xae\xfd\x9d\x26\x4a\x61\x7e\xd6"
- "\xfd\x7b\xf7\x77\xb9\x7f\x1a\xf0\xd1\x33\x1d\x06\x5f\x2b\x1d\x3f"
- "\xd3\x7f\xf0\xc4\x19\x8e\x97\xe5\x97\x78\xf5\x38\x12\x38\x76\x96"
- "\x9e\xce\x38\x3c\xc6\xf5\xa2\xfe\x1c\x5c\xad\xf8\x41\x4e\x7f\x7a"
- "\xcc\x28\xdb\xd9\xe3\x40\x9d\x3f\x7b\x08\xe9\xc2\x48\x47\xbb\xcd"
- "\xfc\xee\x77\x27\xce\x98\x54\x9e\x4c\x13\x60\x06\x75\xf8\x90\xfd"
- "\x99\x9b\x58\xc6\x3b\x4d\x56\x71\xb8\x60\x0c\xd5\xbe\x22\x9a\xb6"
- "\xbc\x22\x1a\x95\xec\xfd\xac\xc6\x47\x0b\x8d\xf8\x42\x8d\xeb\xf0"
- "\xee\x30\x46\x1d\xa6\x4b\x63\x21\xfb\x93\xfd\x0c\xf6\xdf\xd5\x07"
- "\x22\xdb\x20\xdc\x0f\xd4\xf0\x58\xfa\x9b\xb2\x23\x49\xd0\x01\x35"
- "\x2d\x6d\x1d\xf4\x56\x77\x7b\x92\xeb\x8f\x64\xf2\x86\x4e\xd0\xe8"
- "\x74\xb2\xb1\x3d\x58\xff\x8a\xf0\x6d\xe4\xf8\x7c\xaf\x88\x0e\xf0"
- "\xcb\x0d\xa7\x29\x2f\xe9\xbb\xe9\x94\xfe\xaf\x4e\xd2\xf5\x53\xde"
- "\x0d\x11\xfa\x69\x7b\xb3\x6f\x7f\x84\x6e\x9a\xfd\xd0\xa5\xba\xe9"
- "\xd1\x07\x94\x6e\x82\xec\x4b\x5d\x14\xf6\xe9\xe9\xe3\x62\xd2\x75"
- "\x3f\x91\x47\x87\xc7\xa4\x07\xf5\xf4\x81\x31\xe9\x7e\x95\xfe\xc8"
- "\x54\x43\xf7\xb5\x30\x1e\x4b\x59\xf7\x3d\x72\x3b\xeb\xbe\x96\x02"
- "\x5d\xf7\x49\xfd\xf3\xc8\x75\xe2\x5f\xa0\x8b\x96\xb0\xbe\x79\xf8"
- "\x0c\xe3\x2f\x3e\x22\x03\xf7\x64\xa4\xbd\xcd\x69\xd5\x7f\x25\x33"
- "\x7e\x86\xde\x13\xac\xf7\x58\xe7\xb1\xee\xdb\x3c\x44\xb4\x6e\x7e"
- "\x45\x1c\xab\x95\xb1\x7f\x1e\xee\xd5\x7f\x2f\x22\x6d\x1d\xd2\x5e"
- "\xc4\x7b\xd6\x83\x4c\x93\xe6\xbc\xfd\xc4\xfe\x27\xb0\xb5\x42\x9a"
- "\x29\x8b\x36\xa0\xbf\xf9\xbc\xe1\x1a\xd0\xd7\x9a\x40\xc5\xde\x12"
- "\x3e\xc3\x1a\x66\x9f\xb4\xb6\x96\x92\x36\x96\xbb\x21\xab\x21\x67"
- "\x5e\xe7\x17\x54\x16\x10\xa7\xf9\xdc\x1d\xe3\x90\xbf\xec\x7e\x8e"
- "\x97\x94\xd0\x88\xd9\x30\xfb\x85\xb3\xce\x06\x2e\xe6\x6a\xe0\xa4"
- "\xe2\xb3\x3c\xbc\xcd\x47\xdb\xca\x55\x5f\xcf\x3e\xca\x71\xd9\x4e"
- "\x50\x5e\x3b\xe6\x7b\x41\x6e\x9b\x35\x5c\x4e\x7c\x0e\x86\x63\x15"
- "\xf2\x75\xb3\x49\x73\x54\x1b\x67\x61\xdc\xd0\x0d\xc8\xe3\x6d\x0d"
- "\x12\xe3\xec\xa3\x87\xc7\x34\x97\xee\xe7\xf2\xad\x4c\x1b\xe1\x76"
- "\x19\x30\x12\x24\x0c\x93\x9c\x37\x3a\x90\x4f\xad\x9d\xa7\xec\x2d"
- "\x68\x9e\xed\x27\xd6\xfb\xde\x76\xc0\x28\x3d\xa1\x60\x00\x96\xc0"
- "\x18\x10\xf5\x4e\x87\x3f\x70\xa5\xf8\x07\xe0\x6f\xe3\xfe\xe2\x73"
- "\x91\xbc\xdf\x06\xba\xa4\xb2\xaf\xbc\xb2\x45\x1f\x1e\x55\xff\x57"
- "\x22\xfd\x6c\x27\xf8\xed\xe1\x91\x7c\x6e\x89\xcf\x73\x5e\xee\x2c"
- "\x27\x68\x94\x61\x9c\xe7\xd4\x96\xfe\xef\x9e\xe5\x04\x6c\x5b\x9d"
- "\x49\xec\x06\xfe\x23\xf9\x3c\x27\xf0\x5f\xc7\x7c\xa8\xb7\x29\xeb"
- "\xe5\x47\x24\xcd\x4b\x38\x0d\x73\xc7\x23\x46\xff\x73\x7b\xb9\x2d"
- "\x78\x97\xa7\x6c\x44\x81\xf9\xc7\xa3\x59\xfc\x1e\x69\x13\x39\xff"
- "\x68\xe8\x31\x2f\xc6\xb0\x77\x4e\x84\x4d\x55\xcb\xc9\xac\x74\xda"
- "\xec\xc9\x5c\x5e\xe9\xb4\xd9\xd4\xa7\xd3\x1e\xbd\xa0\x74\x9a\xa2"
- "\xb1\xd2\x69\x8f\xfe\x5d\xe9\xb4\x47\x3f\x97\xfb\x62\xd0\x69\xfc"
- "\x8e\xf5\x9a\xa1\xd3\xb6\x0c\x11\x47\x58\x77\x74\xb9\x1f\x3d\x6a"
- "\xe8\xb6\xf5\x48\x63\xdd\xc1\x38\x2a\x3d\xf5\x48\xa6\xf8\x7f\x33"
- "\x49\xf9\x1d\xf0\xbd\x83\xcf\x2f\xb4\xeb\xf7\x3c\x9e\x8c\x57\x3a"
- "\x6e\x76\x46\x9f\x8e\x7b\xb4\xa1\xaf\x2c\xeb\xb8\xd9\x3f\x54\x3a"
- "\x4e\xa5\xd7\x3f\xc2\x3a\xee\x91\x4c\xa6\x81\x0e\xdf\xc4\x6b\x78"
- "\x7a\x7e\xa6\x63\x56\xa4\x8e\x8b\x96\xaf\xd9\xa5\x86\x8e\x63\xdd"
- "\x86\xe7\x75\xd0\x69\x72\x0e\xc9\x72\xb6\x09\x34\x37\xe4\x8e\xfb"
- "\x80\xdb\xcc\xf1\xd7\x98\x6e\x13\xce\xd0\x00\xfd\xec\x90\xde\xee"
- "\xd9\x47\x0c\xdf\x47\xd0\xff\x68\x3c\x3b\xba\x2f\x46\x22\x7d\x9b"
- "\xcf\xce\x7b\xcb\x4f\x90\xb7\x46\x94\xb7\x84\x8e\x53\x7e\x09\x74"
- "\x45\xe2\xd3\x9f\x73\xdf\x62\xde\xf1\x23\xbe\xb2\xee\x39\x4d\x8f"
- "\x0d\xcc\x0f\xd0\x55\x98\xab\x7f\x5e\x65\xc2\x3b\x67\xd4\x3b\xb9"
- "\xc6\x70\xdb\x22\x8e\xaf\x07\x41\xe8\x67\xbe\x7f\x85\xf5\xad\xbc"
- "\x4c\x7d\xaf\xc9\xfa\x60\x53\x61\x0e\x74\xcd\x59\x7a\x4c\xce\x4b"
- "\x64\x7c\x9b\xd5\x71\x61\xfd\x51\x7f\x9f\xd4\xcf\xfb\xbf\x5f\xbe"
- "\xfc\xe3\xc9\x97\x2f\xff\xf8\x2d\xac\x8b\xd0\x3e\x6b\xd8\x1d\x0d"
- "\x67\x50\xc8\xc8\x77\x9a\xf3\x3d\xa0\xaf\xc5\x7c\xee\x1a\x2e\xe7"
- "\x68\x36\x03\x26\xf3\xdf\x06\xe4\x93\x31\x43\xa0\x2b\x27\x2e\x23"
- "\x8e\xd7\x12\x59\x76\x7d\x1f\x8d\x1f\xcf\xb9\xcc\xba\x5f\xaa\xb7"
- "\x86\x64\xcc\xd8\xc3\xb0\x49\x39\xa6\xd1\xa6\xde\xf5\x8f\xc7\xdb"
- "\xa0\x37\x7d\x11\x7e\xb1\x3c\x1f\xfb\x36\xc7\x35\x60\xfb\xb2\x4a"
- "\xcd\x37\xaf\x87\x7e\x1e\xcc\xe7\x61\xf8\x6c\x4c\x7e\x78\x86\xe9"
- "\xb0\x8c\x65\x96\x6f\x37\xca\xf6\xb7\xce\xc2\xf5\xea\x75\xb2\x8f"
- "\x69\x00\x65\x66\x19\x65\x18\x36\xfb\x29\x62\x5c\xfe\xb6\x3c\x53"
- "\x1a\xea\x60\x5d\x78\x3d\x6c\xd1\xc1\xaa\x9e\x02\xd2\xeb\xa9\xf0"
- "\xd1\x63\x33\x2e\x77\x36\xa3\xff\xf6\xe5\x37\x5e\x79\xfb\x48\x6f"
- "\x5f\x01\x7d\x45\xfb\x2e\x53\x6f\xc1\xd8\x2b\xaf\x37\xcd\xa8\xd7"
- "\x79\xe5\x74\x2d\xd8\xf5\xf5\xe9\x9a\xa5\xd3\xb5\xc0\xf7\x15\x74"
- "\x8d\x53\xcf\x9c\xf4\xaf\x5f\x8f\x5d\xaf\x67\x4e\x6e\xbc\x7a\x48"
- "\xfe\xf5\x7b\x6e\xca\x62\xc4\xda\xec\x84\xec\xa8\x58\x75\x73\xaa"
- "\x23\xe3\x17\x77\x4a\xb9\x9a\xb3\xad\x37\x5e\xb2\xda\x2b\x87\xae"
- "\x9e\x73\x28\x7f\x2b\x8f\xef\x42\xf3\xd1\x9c\x46\x8e\xe3\x3a\x71"
- "\xa5\x3a\x93\xad\x97\x69\xbd\x5c\xdc\x64\x8e\xd1\xc5\x31\xf9\xbc"
- "\x36\xb4\xbd\x86\x63\x97\x1c\x2a\x60\xff\x7b\xcc\xa9\xa0\xe3\x9f"
- "\xb8\x81\x63\x8e\xe1\x7e\x00\xee\x33\x95\x0e\x78\x22\x13\xf5\xf4"
- "\x7f\x76\x72\xed\xa1\xe2\x6d\x65\x59\x49\xfd\xf9\xd7\xa3\x3c\x6c"
- "\x8a\x67\xe5\xda\x94\x96\x72\x70\x06\xe6\x12\x7a\xbc\xbf\xc2\x2f"
- "\x64\x0c\x38\x57\x1e\x9f\x27\xc1\xb8\x58\x38\x50\x3f\x07\x00\x7a"
- "\x94\x83\xae\x4f\x6c\x35\xe8\x61\xa4\x23\x6d\x8f\x41\x0f\xd8\x37"
- "\xa9\xde\xad\x21\x3e\xa7\x13\x50\x67\xb2\x9f\xf8\x77\x51\x79\xc8"
- "\xa1\x60\x3f\xa9\xf6\x68\xb8\xbe\x9e\x3c\xb3\x9c\x37\x95\xf1\xbc"
- "\xe9\xc9\x03\xfe\xe4\x43\x0e\x03\x0f\xb1\xd8\x66\xe2\xb3\xdf\xa3"
- "\x31\x96\x6e\x50\x31\xf7\x12\xf8\x9c\x9c\x7c\xbf\x38\xd3\xa4\x68"
- "\xf2\xe4\x38\xd1\xc9\xb1\x63\x24\xec\x54\xe0\xd9\xc6\x70\x7d\xb8"
- "\xfa\x57\x64\x72\xdc\x0b\xbd\x3d\x4f\x8e\xd0\xd6\x1e\x9c\xa1\x75"
- "\xd9\x4c\x06\xbe\x75\xf2\x4c\xeb\x93\x68\x7f\x81\x8a\x13\x2b\xf1"
- "\xb1\x99\xd8\x9f\x5f\x4b\x39\x54\x2c\x56\xd8\x68\xcf\xa2\x76\x39"
- "\x6f\xe2\x3a\x47\xa3\x7e\xc1\xf3\x24\xd8\x26\x28\xb7\xb5\x97\x6e"
- "\x80\x2b\xba\x0c\xba\x3d\x39\x45\x8d\xcb\xaa\x8d\x81\x15\x36\xd3"
- "\x61\xbf\x3c\x6f\x47\x19\x76\xd7\x97\x2a\x16\xf6\x93\xc7\x0d\xda"
- "\xf5\xe2\x04\x7c\x38\x8f\xf2\x6f\x7a\x32\x64\xe0\x24\x65\x37\x85"
- "\xcf\xef\x3e\xe1\xe7\x73\x43\x8a\xfe\x87\x53\xbb\xdc\x85\xf6\x4b"
- "\xe9\x5f\x38\x26\x82\xfe\x89\xcc\x7b\x4c\x7f\x5e\xeb\x00\x5d\x1e"
- "\x03\x2d\x2d\xea\xbc\x03\xdb\x33\x85\x73\xf1\x9c\xca\x78\x6a\x95"
- "\x06\xcd\xf3\xcc\x6a\x9d\xac\xb0\x26\xa2\x1f\xd0\x5e\x1b\xdb\x6a"
- "\x09\x46\xfb\xb9\x0c\xd3\x80\xe3\x4a\x72\xdd\xc0\xe7\x6a\xd4\xbd"
- "\x3b\xb6\x4d\xab\xd5\x59\x12\x52\xbe\x25\x85\x47\x23\x62\x8b\xfb"
- "\x4b\xec\x22\xa8\xce\x25\x17\x3a\xf7\x94\xf9\xcd\xfd\xe9\x00\xe6"
- "\x41\x19\xa3\xd2\x24\xd7\x15\x60\x73\xcd\xfb\x44\x00\x37\xd5\xf7"
- "\xf3\xb6\xa8\xb4\xb9\x7f\xc7\x15\x3c\x36\x77\xbc\x40\xdd\x7e\x97"
- "\x8c\xb1\x82\xb6\xcd\xf3\x31\xcf\x19\x7c\xc6\xeb\x90\xca\x67\x7c"
- "\xee\x76\xd6\x29\x06\xcd\x81\x7f\x4a\x97\x7b\x6e\xb1\x81\xbf\x91"
- "\x9f\xfb\x8e\xf3\xf0\x9e\x4d\xa3\x3d\x28\x75\xad\x3a\x33\x34\xb7"
- "\xd6\x90\x61\xae\x83\xfb\x99\x75\x0d\xd3\x43\xd1\x62\xee\x81\x68"
- "\x58\x36\x93\x8a\x9b\xc9\x3c\x0f\x79\x5c\x1e\x4c\x42\x1e\x5f\x1f"
- "\x8c\xb9\xb3\xd5\xbb\x5e\x3c\xd9\xcf\x5f\xfa\xe2\xa9\xfe\x98\x37"
- "\x99\xdb\xd5\x87\x2f\xcb\xdf\xbc\xde\xfe\xe7\x77\x01\x97\x8d\x63"
- "\xf0\x4a\x1d\x53\x32\x9c\xf1\xf5\x73\x6c\x5b\xc9\xeb\x80\x5f\xcd"
- "\xb8\x73\x1e\xa3\xcf\xfa\x78\x71\x9e\x23\x12\x8e\x70\x49\x5c\x25"
- "\x1c\xa5\x3b\xfc\xbc\xb7\x6d\x57\xfb\x2d\xf3\x36\x45\xb4\x3b\xd5"
- "\xc0\xa7\x4f\x27\xcc\xdb\x13\xcb\x93\x5c\x37\xc7\xe2\xd3\x61\xb3"
- "\x2e\x49\x3b\x41\xf3\xb6\xea\x78\xd9\xb8\x1f\xfb\x1b\xdf\x38\xce"
- "\x25\xc7\x3e\xdd\xa8\x74\x08\xfa\xd9\x31\x7c\xa3\x3a\x47\x14\x50"
- "\xf1\x4f\x7f\x3e\x42\x98\x7e\xc5\xb4\xe2\xf5\x74\xbf\x8c\xd7\x21"
- "\xcf\x98\xff\x9c\xf7\xf8\xc5\xa0\xe2\x5f\xc9\x58\xb7\xba\x6f\xa0"
- "\xbf\xb1\x38\x24\x63\xf9\xb9\x4a\xf8\xcc\x6d\x88\xe7\x7a\xd2\xf7"
- "\xed\x70\x49\x88\x66\x06\x59\x26\x7e\x5e\xc2\x67\xe9\x55\x1c\xf1"
- "\x9f\x97\x1b\xe7\xe7\x39\x76\x26\xc7\x7d\x85\x1e\x4a\xec\x8b\xdb"
- "\xea\xc8\x63\x1b\x4b\xef\x5f\xda\x60\x12\x47\x95\xfc\xff\xfc\x8f"
- "\x7c\x5e\x5e\xed\x63\x9d\x80\x4e\x48\x3c\x75\x82\x7e\xfe\xb9\x5a"
- "\xf7\x31\x74\x94\xe3\x61\xde\xcb\xf2\xe9\x30\x50\x57\x07\xe4\x7b"
- "\xc6\xa5\xba\xe4\xe7\x7f\x34\xe6\x2e\x7c\xfe\x4e\xed\x8b\xf5\xc1"
- "\xf3\xd1\xcf\xe5\x5c\xb0\xaf\x0f\x3e\x06\x2c\x47\xf6\xa5\x7a\xc1"
- "\x31\xc5\x90\xbd\xe2\x1b\xf9\x0c\xf7\xcf\xd3\xb8\xfe\xfe\xc6\x0b"
- "\xe1\x7a\x98\xfb\xc9\x72\xd2\x1e\xbf\x6f\xe2\xef\xb3\x39\x76\x1b"
- "\x6d\x30\x68\xa2\xda\x30\x3f\xb9\x33\x65\xef\xba\xbe\xb6\xcf\x97"
- "\xb6\x6b\xc4\xfb\xf1\x11\xb4\xe1\xe7\x1c\x35\xae\xcd\x07\x7d\x0a"
- "\xf5\x58\xb5\x2a\x0d\xb2\xf3\xb4\x58\x91\x47\x0a\xc7\xf9\x64\xc8"
- "\x3a\xf2\x8e\xf4\xd1\x05\x9b\xda\xef\x9a\x8f\xf6\x3b\x2a\x54\x39"
- "\xc7\x31\xc6\x25\x6e\x3b\xa3\x71\xdc\xcf\xb6\x86\x8a\xa9\x30\xff"
- "\x7d\xc6\xd7\x7e\x13\xf7\xf1\xfc\xe7\xa5\x0e\xe7\xf8\x0a\x3d\x8e"
- "\xa4\x40\x4f\x26\x75\xf6\x38\xa0\x17\x32\x4d\xa8\x07\xfa\xbf\x33"
- "\xa0\xd7\xb9\xcb\xc0\x95\x71\x93\xf1\x39\xc5\xfc\xf8\xf4\xe5\x7a"
- "\x65\xcc\x27\xc7\x00\xfc\x2c\xf8\x5d\xf5\x75\xed\x12\xd8\xe9\xed"
- "\xfe\xca\x03\x69\xda\x12\x71\x84\xe3\x8b\x61\x2e\xd2\x5e\x05\xfe"
- "\x1d\xb4\xca\x03\xdb\xfc\x31\x53\xfe\x32\xca\xc1\x9c\x99\xc4\x45"
- "\x91\x5d\xa7\xe1\xba\x44\x8c\xe1\x38\xe3\x78\xce\xd2\x9f\x47\xf2"
- "\x73\xe7\x12\x31\xbb\xcb\xfd\x54\x81\xb1\x47\xa8\x62\xe3\x3c\x55"
- "\xdc\x1b\x4f\x28\xf1\x51\x3e\x4f\xc4\x71\xa7\x34\xcc\x85\xda\xb9"
- "\xde\x7c\x9e\xcf\xa2\x3e\xe4\xab\x81\xbd\xd1\xc6\xf9\xfc\x89\xb7"
- "\x0e\xc6\x2f\xb3\x9f\xbd\xd4\x76\xc6\xab\x33\xf9\x40\x9a\x81\xeb"
- "\xa0\x40\x8e\xe9\x6b\xe2\x16\x32\x70\x43\xfa\x91\x2a\x95\x1e\xe2"
- "\xf8\x87\xec\xeb\xd8\xe5\x7e\x7a\x98\x81\xab\x81\x03\xd7\xc7\xe7"
- "\x37\x45\xca\xde\x1a\x8e\x3d\xc3\xf5\x71\x3c\x55\xe4\xcd\x35\xf0"
- "\xfd\xba\xbc\x5c\x56\x2b\x04\x8f\x9f\xac\x7f\xed\x43\x89\x5a\x02"
- "\xac\x53\x9e\xae\x3d\x5c\x1b\xe0\xf5\xee\xd7\x51\xc7\x6b\x9d\xc2"
- "\x41\x5a\x8f\x23\x6e\x1f\x73\x19\xe4\x6f\x95\xfa\x61\xed\xde\xd7"
- "\x34\x91\x0b\x3d\x81\x72\x3d\xb9\xbc\xd6\x04\xb9\x2d\x32\x37\x96"
- "\xb6\xf3\x99\x4b\xe8\x9c\x22\x33\xf2\xd4\xb0\x9d\x85\xf9\x56\x50"
- "\x7e\xbf\x02\xba\xc9\xb3\x64\x0c\x60\x14\x25\x99\x9d\x64\x6e\x8c"
- "\x89\x53\xd5\x1f\x7f\x74\x5a\x0e\x56\x74\xae\x3d\x58\xd0\xe5\x2e"
- "\x82\xfd\xff\x4c\xbf\x7b\xbe\xab\x87\x80\x9e\xc8\x57\x3d\x94\xe7"
- "\x7b\x45\x8e\xcb\xe5\x35\xf6\xab\x59\x07\x8d\xb6\x51\xaa\x48\x3e"
- "\x58\xc1\xfa\xb6\x33\xe5\x60\x01\x8f\x25\x28\xdf\x60\x94\xe7\x71"
- "\x9d\xc7\x0e\xf4\x97\xad\xaa\x57\x1f\x16\x1d\x55\xf2\x5c\x74\xd4"
- "\x90\xd1\x78\xf5\x94\x6c\x13\x9a\x6b\x04\x99\xbc\x18\xb7\x6e\x0b"
- "\x52\x6a\xdd\xeb\x44\xd5\xcb\x45\x70\xe3\x72\xcc\x61\x86\xf2\xf7"
- "\x2e\x8a\x72\x59\x46\x99\xbf\x37\x80\x5f\x12\x81\xcb\xc6\x8b\xa8"
- "\xb3\x4c\xe5\xd3\xfd\xd6\x6d\xc8\x57\x82\x6b\xba\x30\x99\x68\x53"
- "\x19\x59\x36\x69\x64\xae\x2e\xa3\x61\x48\x83\xad\xfb\xcc\x2c\x43"
- "\x66\xe3\xe1\x50\x55\x47\xf4\x12\xea\x5d\x55\x26\x42\x1f\x63\x3c"
- "\x77\x6b\x22\xf8\x75\xe8\x8e\xf6\xef\x51\x6d\x7c\x66\x8f\x61\x13"
- "\xe2\xde\x13\xed\x77\xf0\xcc\x25\x67\xbc\x9f\x58\xb8\xb0\x24\x7f"
- "\xd1\x5c\xbe\x64\x8e\x78\xee\x96\x94\xc8\xb5\x10\x1e\xff\x54\x9c"
- "\x8a\x67\x5a\x79\xdd\x71\xe3\x60\x63\x1f\x7d\x81\xcd\x58\xfb\xd4"
- "\xfd\xf5\xef\xe6\x39\x1d\xcf\x7d\xf0\x6e\xcc\xa1\xd2\x95\x0c\x26"
- "\xe1\x73\x0b\x99\x62\xeb\x9b\x37\xa7\x64\x4e\xd1\x5d\xbc\x63\x96"
- "\x12\xa7\x9e\x05\xb9\x31\xf5\x94\xf7\xd6\xa3\xc6\x9f\x80\x89\xf3"
- "\xad\x4f\xdc\x2a\x92\xdb\x73\xd4\x59\xe9\x05\xdb\x8c\x35\xad\x7e"
- "\xfc\x1c\x5b\xc3\x6b\x3f\xf6\xb0\x3c\xb8\x56\x92\xe9\x77\xcb\x5b"
- "\x4d\x6c\x47\x96\xe1\x9e\xd7\x16\xe4\x1a\x99\x1e\x2f\xea\xa3\xf3"
- "\xad\x18\xdf\x17\x04\x45\xe5\x5e\xcc\x8f\x16\xf4\xbb\x66\x13\xe9"
- "\x23\xc2\x3e\x85\x6d\xb4\x30\xed\x72\x3e\x47\x9c\x9f\xdb\xc3\x3c"
- "\x1b\x53\xee\x79\xd5\x67\x0b\xc1\xff\x45\xf6\xde\xf3\xbc\x7a\x9e"
- "\xaa\x21\x46\x1c\xae\x85\xb3\xfb\xf5\x17\xa9\x38\x58\xad\x78\x7c"
- "\xe1\x27\x8d\x98\xaf\xa1\x9d\xbf\x38\x41\x0b\x0f\x99\x6d\xb0\x11"
- "\x86\xd2\x4e\xdc\x7f\xc2\x65\xf9\x5d\x14\x1f\xdd\x70\x66\xab\x19"
- "\xda\x05\x5a\x26\x41\xa8\x3f\x32\xeb\x37\x89\xf8\x99\x44\x82\xdc"
- "\x4d\x4d\x44\x0f\x0e\xb8\xca\x4c\xd6\x41\xa9\x96\x6f\x7f\x6b\x98"
- "\xed\xee\x1f\x8f\xcd\x76\x95\x95\x42\x2b\x87\x82\x56\x11\x19\x3f"
- "\xed\x54\xfb\x43\xb7\x94\x93\xf4\xa7\xa9\x3c\x15\xf7\x2c\xe5\x7a"
- "\xb7\x28\xe6\xb3\xeb\x5a\x8a\x48\x73\x3d\x47\xa6\x77\xba\x7d\x26"
- "\x8e\xd1\xcc\xf6\x33\x7f\xeb\xe2\x04\x15\x3f\x70\x10\x69\xa0\x97"
- "\x53\x54\x88\x34\x65\x77\x16\xff\x52\x5b\x2b\xd2\xfa\xe0\x9b\x89"
- "\xe1\xbb\x5e\x23\xd3\xb6\xb2\x76\x93\xd7\xfc\x63\xf2\xda\x03\x74"
- "\x10\xf7\x71\xfb\x0a\x75\xb2\x2d\xcb\x30\xea\xdd\x1a\xc7\xeb\x32"
- "\xe9\xe7\x4f\x4d\x67\xa9\xf8\x8f\xbb\xfb\x29\xc7\xe7\xbd\x3b\x53"
- "\x3e\xf8\xb7\x2e\xf7\xb3\x66\x1f\xdd\x33\x51\xb7\x65\x30\xe6\x3e"
- "\x8b\xf9\xff\x42\x19\xe7\x09\xef\x3f\xe5\xef\xc2\x20\x2d\xd3\xc8"
- "\x13\xdf\x9e\xe1\x35\x78\xe1\x61\x3e\x10\x17\xff\xde\xce\x67\x5b"
- "\xfa\xf1\x83\x19\xe0\x75\xde\xc1\x7b\x91\x49\x83\xa0\x7f\x5c\x17"
- "\x44\x4f\xd8\x4d\xe9\x10\x27\x53\xd8\x44\xdf\x0e\x5d\x14\x79\xcd"
- "\x1d\xe7\x65\x4c\x53\xd6\x35\xbf\x99\xf7\xb1\xc9\x1b\x3c\xe7\xf1"
- "\xae\xd1\xa8\x05\x76\xa5\xb7\xf6\x9c\x47\xc5\x3e\x0d\x53\x33\xfd"
- "\x95\x9a\x9d\xff\xb7\xdc\x5b\xfe\x57\xa4\x0b\x19\x0b\xbb\xe7\xa2"
- "\x98\xe5\x35\xff\x1b\xf1\x77\x8a\x78\x8c\x03\xdd\xed\x67\xe9\xd9"
- "\x7f\x7c\x04\x38\xef\xfc\x07\x60\xc9\x98\x69\xe3\xe8\x20\xee\xd1"
- "\xa6\xde\xf1\x2f\x6e\xac\x99\x04\xcf\x7a\xab\xf3\x31\x93\x86\xb1"
- "\x94\x63\xdb\x61\x0c\x1d\xc3\xed\xc2\x73\x16\x3f\xe3\x3a\x92\xaf"
- "\xd6\x55\x9e\x2d\xd6\xd0\x63\x3c\xb6\xe6\xf1\xb8\x89\xf4\x59\xf5"
- "\x17\xe5\x58\x3b\x43\x7f\x9e\xa2\x3f\xe7\xea\xcf\x13\xf5\xe7\x1c"
- "\xfd\x99\xd7\xe5\xf5\x31\x79\x51\x75\xaf\xbd\x60\x1a\x70\x14\xcf"
- "\x5b\x8d\xbe\x00\x3e\x03\xad\xce\x95\x72\x6c\xd7\xf1\x18\xa3\xe3"
- "\x95\xa5\x3f\x1b\xf8\xdc\x60\x0d\xad\xfc\x5f\xc2\x67\xb1\x3d\x1a"
- "\x9f\xc5\x59\x11\xf8\x90\xd5\x99\xf3\x75\xf0\x49\xb3\xf2\x77\x22"
- "\xfe\x07\xf8\x30\x2e\x9c\x86\xfa\x77\xc7\xe0\xe3\x31\xf0\x89\xcb"
- "\x6f\x4b\x44\x3b\xdb\x35\x8b\xbf\x21\xe3\x3a\x0f\x60\x9b\xa5\xbe"
- "\xdb\x88\x53\xb8\x38\x74\xb9\x38\x85\x90\x05\x8c\xdb\x25\x68\xff"
- "\xe2\x26\xdd\x7e\x3b\xa0\xec\xfc\x92\x31\x86\xef\x18\xda\xda\x50"
- "\xa5\xda\xba\x6b\x0d\xc7\xea\x5b\x46\xdf\x74\x39\x45\x3b\xe6\xdd"
- "\xff\xc9\x73\xc3\x48\xb8\x45\x25\x8b\x17\x3f\x73\x97\xbd\x68\xce"
- "\x82\xb9\xf6\x11\x85\xf6\xc5\x8e\xf9\xf3\x4a\xe6\x46\xfb\x53\xa4"
- "\xe9\xdf\xef\x91\xe7\x44\x78\x2e\x25\xe7\xd2\xe0\x7f\xa9\x27\xa5"
- "\x4f\x5e\xc9\x05\xe1\x2e\x29\x60\x9d\x5b\xf7\x92\xfa\xce\x13\xf0"
- "\x69\x34\xc6\x10\x63\xfe\xcb\x63\x08\xd2\x8f\x63\x9c\x9c\x1d\x91"
- "\xce\x79\xfd\x46\x1a\xc3\xd7\x75\xd3\x80\x13\x54\xf2\x4b\xae\x33"
- "\x2e\x0d\x2f\x8a\xad\xb0\x9b\xf8\x1b\x16\x26\xe8\x14\xc1\x71\xb7"
- "\xf8\xfc\x25\xca\x89\x93\xf4\x9c\x9c\x57\xcc\xc2\xb3\x9a\xb3\x09"
- "\xe0\xf8\xdc\x43\x28\xb3\x0d\x69\x66\xb6\x21\x30\x0f\x6c\xe7\x72"
- "\x48\x7f\x86\xe3\x60\x20\xdd\xa2\xc7\x13\xe3\xb4\x55\x1c\xa7\x02"
- "\x69\x69\x11\x69\x2f\x23\xcd\x86\x34\xbb\x0e\x6f\x3b\xd3\x19\xcf"
- "\x39\xfa\x3a\x19\xe7\x79\x5f\xaf\xb7\x3c\x12\x67\xfe\x86\xcb\x1d"
- "\xb7\x65\xd9\x67\xcd\xfc\xfe\xb8\x1f\x3f\xb9\x70\xc1\xbc\x14\x92"
- "\x64\xcf\xc4\x70\x9c\x75\x87\xf3\x96\xbb\xec\xc5\x73\xe7\x2e\xb2"
- "\x2f\x9d\xbb\xa0\xc4\x3e\x67\xe9\x9c\x65\x29\x34\x6f\xe1\xa2\x27"
- "\x39\xca\x02\x77\xcb\xe2\xfc\x27\xe7\xfd\x9c\x9d\x5e\x54\xee\x94"
- "\x28\x3b\x61\x16\xeb\x36\x3d\x2e\xc9\x91\x2a\xb6\x21\x93\x3d\x79"
- "\xb8\xe7\x78\x5d\x36\x5c\x1b\xf1\x3b\x80\xdf\x7e\xfc\x8e\xe1\x77"
- "\xf4\x34\xad\x58\x83\xeb\x9e\x2e\xf7\x92\x42\xc3\x5e\xe9\xe3\xa1"
- "\x25\x4e\x83\x87\x60\x5f\xec\x51\xe3\xdb\x92\x86\x96\x90\x94\x9f"
- "\x5e\x9e\xaa\xba\xd8\xc7\x53\x1c\x6f\xb4\x85\x7d\xba\x96\xe0\x7d"
- "\xb7\x5c\xab\xe4\x35\x93\x64\xa6\xdb\x49\x5a\xb6\xa5\xfe\x15\xd1"
- "\xc4\xb1\x72\x70\x6d\x04\xbf\x34\xa9\xf8\x34\x4b\x33\x90\x6f\x38"
- "\xea\x38\xa0\xea\xd0\x9f\x87\x88\x23\xfc\x0d\x97\x13\xfa\x33\xc3"
- "\x02\x8c\x3b\xf9\x9e\xaf\xfa\xde\xa9\x55\xff\xc6\x9b\xa9\xef\xdd"
- "\xd2\x66\xbd\x0e\x0f\x68\x51\x5e\xe7\x96\x73\x29\x39\x77\xe6\x35"
- "\x62\x6b\xc2\xdd\x02\xf8\x9c\xd3\x12\x1f\x6d\x95\xf1\x2f\xcb\xbb"
- "\xa1\x23\xbe\xf7\x3d\xaf\x53\xe6\x4f\xe0\x35\xe4\x69\xc5\x42\xe3"
- "\x38\xe4\x5a\xe2\xd3\xad\x5c\x4e\x58\x3c\x79\xda\x86\x81\x39\xca"
- "\x66\xe0\xb8\x83\x4b\x1b\x74\x98\x41\xa6\xed\x69\x5a\xf2\xb0\x9a"
- "\x87\xaf\x58\xa3\x6c\x89\xa5\x7b\x0c\x5f\x4b\xc8\x68\x26\x9e\x1b"
- "\x0d\x1d\xe0\xa3\xa5\xd5\xba\x5f\x9c\x47\x6f\x7f\x48\x7f\xde\xaf"
- "\xe3\x98\xc0\xb1\x50\x80\xff\x51\xee\x3b\xd8\x2b\xfb\x71\x7f\x0c"
- "\xf4\x69\x52\xf4\x71\xca\x38\x07\xb0\x9b\xf8\xfd\x31\xfe\xde\x0d"
- "\xde\x1d\x53\x71\x46\x96\x8e\xe1\x36\xf7\xf9\xce\xd6\xe6\x00\xd7"
- "\x3b\x79\x8f\x19\xb2\xb4\xdf\x7b\x91\xe5\x73\x69\x16\xe0\xed\x36"
- "\xf4\x0e\xeb\x99\xfc\x30\xe4\x54\xce\xa7\x9c\x45\x86\xbe\xe9\xe3"
- "\x03\x67\x79\x3c\x5d\x12\xaf\xdf\x15\xfd\x9d\x7f\x17\xee\xe7\x1a"
- "\x81\xd3\x6e\xd9\x07\x1c\x8f\xf5\x62\xef\xbc\xad\x47\xe9\x48\xe7"
- "\xb1\xde\x39\xa6\x8e\x07\xc7\x76\xf7\x31\x6e\xdd\x72\xdf\x5f\xd7"
- "\x1b\xce\x90\xa1\x37\x0c\x38\xd6\x04\xa1\x59\x9d\xf8\x57\xb1\xcf"
- "\xc9\x7b\x24\x3c\x5e\x4a\x7b\x04\x70\x06\x5d\x50\x67\xe0\xb4\xca"
- "\x7d\xe0\x5d\xe7\x1e\xfe\xe6\x9b\xb4\x69\xdd\xcf\xfd\xdf\x3e\x5d"
- "\xb4\x6c\x46\x24\x4c\x61\xd9\xe7\x64\xb8\xac\x8f\xd8\x26\xc9\x0f"
- "\x9b\x39\x0e\x8d\x53\x1f\x5f\xa0\x83\x97\x95\x1b\xb8\x82\x86\x47"
- "\x0c\x7c\xf5\x6f\x8e\x1d\x41\x3d\xbe\xe9\xe1\x1e\xf6\x05\x6f\x54"
- "\xfd\xb9\x42\xea\x1b\xbc\xdb\x85\xb2\x07\x7c\xf4\x5c\x9a\x2e\x43"
- "\x4d\x28\xbf\xeb\x70\xd9\x44\xe4\x59\xd6\xaa\xfb\x33\x1f\x45\xff"
- "\x1e\xeb\xe3\xfd\x25\xcd\x11\xeb\x3c\xc7\x54\x1f\xfe\xb8\xfc\x04"
- "\x2d\xb7\x45\xa4\xeb\x7d\x7b\x78\x06\xd2\x9b\xd5\x9a\xc9\x3e\x3d"
- "\xbe\xdf\x72\xe5\xbb\xaa\xe3\xc8\xba\x80\xcf\xeb\xb1\x8c\x4b\xda"
- "\xcb\x3e\x5e\x3e\xc3\x18\x2f\x00\x6b\x8f\xa4\xf9\x10\x71\x80\xe9"
- "\xa4\xe2\x7d\x3c\x77\x51\xd1\x69\xb9\x33\x8a\xf6\x3c\x6e\xa2\x1e"
- "\xa6\xd3\xa0\x55\x42\x1b\x14\x48\x10\xf9\xcb\xcc\xc4\xf2\xc2\x32"
- "\xce\x7b\x83\xe0\x0f\x69\x57\x29\xba\x2d\xdf\x6f\xd0\xcd\xe8\x3b"
- "\xa6\x93\x8f\x96\x67\x32\x6d\xa3\xdb\x38\xe0\xe8\x09\xa3\xed\xa0"
- "\x29\xc7\x34\xc5\x73\x93\x2e\x17\x4d\x9e\xa1\xec\x3b\xb2\xe4\xcf"
- "\x87\xcd\xdf\xa7\xc3\xce\x31\xa4\x68\xbb\xc2\xe6\xa3\x12\x67\xc4"
- "\xbc\xe4\x08\xd3\x97\x65\x05\x78\x96\xe8\xb1\xb7\x8e\x28\x3f\xa6"
- "\x25\x4d\xa2\x72\x5f\x89\x94\xe5\x25\x32\x46\x0a\xc7\xed\x3d\xca"
- "\x34\x62\xbd\xc8\xb2\xc4\x32\xc0\xf2\xa4\x68\xb4\xa2\x24\x82\x46"
- "\x8d\x4c\x1f\x9d\x4e\x7b\x62\x74\xf9\x5c\x7b\xd1\x38\xa5\x8b\xed"
- "\x99\x23\x0a\x47\xcb\x40\x37\xf6\x7b\x27\xdc\x65\x9f\x31\x6e\x84"
- "\xd3\x31\x72\x9a\xba\x4c\x98\x31\x85\xaf\x29\xd1\xf3\x3a\x3b\xea"
- "\x39\x1e\x3d\x37\x5c\xe5\x50\xfa\x63\x45\xc0\x97\x70\xb5\xfc\x86"
- "\x08\xc7\x9d\xad\x5a\x40\x14\x06\xde\x1b\x4e\xa3\x4f\x2d\xfb\xd2"
- "\x39\xce\xf1\x74\x27\x71\x5c\xf4\x2f\xeb\xf1\xae\x0e\xe9\x83\x8a"
- "\xf9\xfb\x08\x7f\x13\x5a\xf2\xbe\x74\x5e\xb3\x11\x95\x3b\x5a\xfd"
- "\xc9\xa7\xda\xf1\xdb\xed\x4f\xfe\xa0\x7d\xd2\x2d\x2e\xd1\xe5\x2e"
- "\x9d\x62\xb4\x8b\xd7\x76\x40\xa7\xf4\xe9\x4e\x11\x66\x1a\xe5\x3b"
- "\x39\x16\x39\x60\x27\xf2\xda\x4e\x29\xda\x5f\xbc\x5b\xcd\x5f\x4b"
- "\xc1\xff\x4b\x74\x7b\x86\x66\xe0\x19\xf6\xdf\xf7\xe5\x1a\x97\xe6"
- "\xb6\xc9\x18\xe6\xda\xea\x5b\x1f\xc4\x7c\x60\xb7\x01\x13\xb0\xae"
- "\xd2\xfd\x1e\x24\xbc\xaf\xeb\x57\xab\xad\x7d\x2f\xc3\x9a\xa0\xe2"
- "\x42\x42\xc6\xcb\xeb\x4d\x5a\x5e\xaf\x9f\x0c\xde\x0d\x5a\x95\xc6"
- "\x7e\x34\x79\xe0\xbd\x72\xce\x63\xbc\xab\x72\x6b\xbe\x2a\x93\x16"
- "\x44\x3f\xa6\x29\xfb\xb9\x83\xf5\x27\xe6\xae\x2b\xc7\x1a\xe3\x9a"
- "\x1c\x0f\x4d\x54\xae\xe6\x33\x2b\x1f\xe3\x72\xe7\xdd\x66\x82\xce"
- "\x6e\xba\x31\x5d\xce\x51\x82\x9a\x3b\x81\x94\x2f\xf3\xca\xdb\x0d"
- "\x1d\xcb\xfb\xa5\xd6\x55\xc2\xcf\x6b\xc4\xd6\x90\xf0\xcb\x58\xfb"
- "\x3c\x76\xd0\x69\xf2\x96\x76\x95\x7b\xe5\x37\x38\xf9\xbb\x22\x01"
- "\x7d\xdc\x08\xab\x71\x03\xf5\xfb\x13\x6f\x2d\xc0\xf8\x90\x70\x9a"
- "\x60\xeb\x02\x7f\xa6\x0d\xef\xb5\x68\xa0\x95\x97\xc7\x49\xa6\x4f"
- "\xca\xfe\x6d\xec\x03\xc3\x6d\xb5\x86\xd0\xe6\xc8\x76\x99\x34\xdf"
- "\x06\x37\xda\x65\x42\xbb\x9c\x67\x58\x66\x82\xec\x9b\x04\x79\x1b"
- "\x22\xe3\x59\xcb\xf9\x79\x99\x3d\xb2\x8d\xac\xff\x55\x1b\xca\xc6"
- "\xc7\x6b\xa3\x30\x71\x1b\x99\x06\x65\xd7\xe9\xf2\x26\xf1\x64\xfd"
- "\xd1\x41\x2b\x8f\x0d\x5a\xc5\x3e\x41\xfb\xd2\xa1\xdf\x26\x70\x1f"
- "\x62\xfc\xac\x66\x3c\xe3\xf5\x17\xc3\xd3\x61\xf9\xac\xab\xca\x0b"
- "\x80\xcb\xae\xf8\xf4\x2e\x6b\xbe\x3c\xbd\xcb\x7e\xc5\xe5\x19\x0f"
- "\xde\xdf\xb1\x86\x4c\xd0\xc1\xa7\x76\x63\xbe\x56\x11\xaf\xde\x41"
- "\xab\xb6\x32\x5e\x71\xdf\x09\x96\x17\x5d\x07\x81\x0f\x05\xe4\x44"
- "\xb0\x4e\xea\x72\xbb\x72\x0d\x7d\x64\x4d\xb0\x27\x4a\xfd\x60\x12"
- "\xd5\xf1\x60\x58\x57\x55\xf3\x3e\xd7\x04\xd4\x1f\xf7\xbd\xc6\xdf"
- "\xee\xa8\xd8\x47\xda\xea\xef\xde\x68\x4d\xa0\xbb\xfd\x89\xdf\x4d"
- "\xb1\x3a\x43\x19\x4c\x43\xc0\x74\x42\x8e\x1f\xe2\x79\xaa\x5a\x1b"
- "\x71\xc1\xfe\xff\xa5\x8c\xcf\xe4\x4f\xde\xa7\xef\x1b\xb9\x30\xfe"
- "\xd5\xd8\x8d\xb5\x79\x3c\xb7\xf9\xe8\xef\x0e\x25\x97\xdf\x7c\x5d"
- "\xac\xfd\x60\x8f\xe6\xb6\x0a\xfb\x72\x2b\xec\xc8\xf2\x95\x9a\xe0"
- "\xef\x39\x7c\xb0\xa7\x8f\x4f\x94\xbf\x94\xc1\x27\x5d\xee\xf2\x8c"
- "\xf8\x3c\x50\x3e\xe9\xf2\x3c\x50\xfe\x0d\x7e\xcf\x74\x57\x73\x95"
- "\xf2\x22\xc3\x4e\x11\xab\xbf\xf9\xba\xbd\x4c\xd6\x4f\xaa\x6e\xa6"
- "\x49\x0e\xe3\x3f\x05\x74\x29\x47\xde\x1a\x43\x0f\x30\xbf\x58\xc3"
- "\xfc\xad\x0b\x92\x3c\x8d\x77\x18\x57\x4a\x2c\x6a\x1d\xfc\x40\xb1"
- "\xfc\x7e\xa5\x7b\x45\xb5\xdf\xe5\xd8\xcc\xdf\x69\x0d\x24\xef\x2b"
- "\x45\x9e\x56\x1f\x35\xaa\xfd\x56\xcb\xbe\x12\xc0\x70\x6e\x52\xfe"
- "\xd0\x16\x19\x2f\x0a\x32\xcd\x31\xa2\x58\xae\x91\x96\x0e\xbc\x39"
- "\x5e\x14\xe6\x3b\xab\xd2\x7a\xc7\x25\x77\x0e\x74\x85\x90\xb6\x18"
- "\xc6\xa5\x61\x9d\xa0\xdd\xcb\x26\xad\xe1\xe2\x68\x1b\x71\x9b\x2f"
- "\xae\x1e\xda\xf0\x8b\xdb\xc8\xfc\x07\xdb\x13\x54\x7c\x07\xa5\xaf"
- "\xfa\xbe\x99\xfe\x2b\x9b\x4c\x4c\x07\x1f\xad\xb2\x2b\xda\xad\x2a"
- "\x30\xfa\xc7\x47\xae\x23\x52\x77\xae\x7e\xb4\x7d\x7a\x48\x7c\xa9"
- "\xd6\xb9\x57\x41\xff\x3d\x53\xa3\xde\xaf\x68\x8f\x5d\x03\x62\x7b"
- "\xde\x3e\x7f\xb1\xbd\x70\xe1\xd2\x05\xc3\x87\x47\xcd\x95\xcc\xea"
- "\xbb\xb8\xab\x36\xa9\xf1\x74\xd5\x11\x03\x6f\xb6\x4b\xf0\x8c\xf6"
- "\xaf\xb8\x24\x96\xfd\x94\x7c\xdd\xcd\x3d\x3f\x8b\xfa\xee\x6f\xa7"
- "\x29\xb7\x47\x3c\x7e\x8f\xa6\xdc\xf1\xbd\xfc\x07\xe7\xce\x29\x5c"
- "\x16\x91\x7a\x67\xe4\xba\x61\xd5\xeb\xa8\x3b\x71\xe8\x3d\xd0\x15"
- "\x09\xd3\x56\xf0\xd8\xe2\xfe\xb0\x2c\x24\x4e\x41\x5f\x67\x43\xc6"
- "\xf2\x9b\x4b\x42\xd4\x0c\x5d\x26\xbe\xc9\x3a\x7c\x80\x3a\xdb\x09"
- "\x7b\x0a\xbc\x65\x45\xdb\xfd\xb0\xeb\x2e\xf0\xfa\x0c\xca\x7d\xde"
- "\x52\xc3\x31\x9d\x3f\xd0\xfd\x1a\xdc\xb5\x48\xbf\x06\xd7\x4f\x70"
- "\xbd\x0a\xd7\x3f\xda\x17\x60\xde\xc3\xbe\xf4\x4b\xd8\x97\xde\xfd"
- "\xae\xf4\x07\x0a\x94\x13\xfb\x04\xe1\xfd\x2c\xb6\x41\x7c\xb4\xda"
- "\xcc\xeb\xe0\x9c\x17\x69\x5b\xec\x4f\x51\x16\x5f\x85\xdc\x1b\x74"
- "\xd7\x8a\xca\x0f\xfc\x62\x73\x1e\x7f\x6f\x2d\xe3\x24\xad\x4e\x48"
- "\x4c\xf8\x9c\x12\x6d\x96\xd4\x2e\xf7\x6a\x94\x5d\x30\x8b\xe9\xd4"
- "\xdf\xb7\x68\xe5\x37\x80\x63\xec\xc3\x3e\xdb\x70\x2d\x49\xfb\x56"
- "\xb7\xe7\xea\xe4\xb8\xb0\x7a\x56\x84\x4d\xc7\x7b\xd3\x29\xca\x3e"
- "\x11\x61\x65\x9f\xae\x2e\x31\xe4\x00\xf7\xe5\x06\x9f\x46\xc5\xd7"
- "\x5b\x50\x32\x77\xd1\xdc\x42\xfb\x88\xc5\x29\x14\x11\x5d\xcf\x31"
- "\x77\x81\x7d\xd1\xdc\x67\x9f\x9b\xbb\x58\x46\xc6\xe3\xb7\x51\x63"
- "\x3e\xf4\xfd\xef\x33\x8c\x73\x5f\xf6\xa1\x4c\xdf\xd5\x5f\x70\x4c"
- "\x36\xb1\xf6\xf7\xdb\xd8\x77\x47\xcd\x37\x44\x66\xf4\x7c\xe3\x79"
- "\x15\x77\xa2\xe2\x03\x9f\x9a\xeb\x3c\x2f\xbf\x63\x7d\x82\xd6\x54"
- "\xf7\xc5\x7f\x5f\x33\x1e\xb4\x34\xe9\x74\xbb\xd0\xe5\x5e\x93\x6d"
- "\xd0\xcd\x47\xcf\x7b\x74\x5b\xaa\x43\xea\x0f\x8c\xb1\xd0\x7f\x51"
- "\xe3\xab\xfa\x06\xed\x1a\x8e\xcb\x91\x28\xd7\x93\x93\x3f\x68\xe3"
- "\xba\x18\x26\xea\xf3\xa0\x7f\x7c\xd0\x9b\xac\xdf\x2a\x0c\x78\xa8"
- "\x33\x93\xeb\xd3\xe7\x41\xd7\x9f\xa6\xe7\xe5\x9a\xb3\x56\xf1\x41"
- "\x1b\xeb\x14\x8e\x21\xa2\x55\x02\x8e\xdc\xa3\x7d\xde\x23\xd7\x61"
- "\xf9\x1b\x04\x80\xc5\xeb\xc0\xd0\x73\x01\xfe\x5e\x31\xa7\xa9\xd8"
- "\x70\xab\xd7\xf1\xda\x33\xea\x3a\x0e\xfc\x83\x7d\x67\x1b\x9e\xf7"
- "\xb0\xdd\xc9\x70\x7d\xb4\xe6\x00\xc3\x53\xb1\xef\x9e\x1f\x06\xde"
- "\xc9\xe8\xb3\x9f\x9e\x2f\x88\x98\x97\x31\x3e\x12\xcf\x00\x70\x91"
- "\x71\x56\x95\xaf\xa9\x6c\x37\xeb\xcf\x4d\x7a\xdb\x8d\xf6\x00\x1e"
- "\xf4\xdf\xea\x34\xc3\x6f\xc2\xa7\xb7\x9b\xf1\x63\xdc\x23\x71\xd6"
- "\xf1\xad\x61\x7c\x51\x6e\x5b\x84\x6c\xf3\xba\x4c\x12\xd2\xf6\xf7"
- "\xf9\xb0\xaf\xa1\x58\xbd\xb1\x70\x81\xbd\x68\xfe\x82\xa7\xf3\x97"
- "\xce\x79\x7a\x6e\xfe\x73\xc5\x23\xed\xcf\x2d\x78\xa2\x68\xe1\x93"
- "\x4f\x33\xd7\x2c\x2e\x79\xee\xc9\xa7\xed\xac\x59\xf2\x27\x4e\x99"
- "\x92\x7f\xcf\x43\x33\x1f\x4e\xa1\x7b\xe6\x20\x0d\x33\xff\x29\x59"
- "\x23\xd5\xab\x07\x27\x4d\xf8\x69\xfe\x84\xe9\x0f\x4d\x9b\x25\x0f"
- "\xbd\xf4\xbe\x9f\xb8\x20\x7e\x86\x28\x3e\x4c\x03\x2f\x1d\x47\xff"
- "\x26\x9d\xa0\xca\xb1\x2a\x5e\xfa\x0b\x45\xd1\xf1\xd2\x5f\x00\xd2"
- "\x2f\x6c\xc5\xef\x00\xd1\x2f\xfc\xf8\x41\xbb\x57\x66\x29\xfe\x4a"
- "\x7e\xbc\xcb\xfd\x42\x4d\x1f\x7f\x55\xca\xb3\x94\xec\xa7\xa4\xd6"
- "\x67\x5f\x80\xfe\x5f\xbd\x3f\xf2\x5d\xdf\x7c\xf2\x85\xa3\xbd\xf3"
- "\xc9\x5e\x9d\xf2\x42\xef\xdc\x12\x69\xed\x98\x57\x26\xf3\xbc\x52"
- "\xad\x27\x55\x8e\x93\x3c\xd5\xaf\x7c\x5b\xc8\x98\x57\xb2\x6c\xcb"
- "\x3d\x29\x39\xff\xf8\x45\x76\xa4\x8c\xcb\x35\x7d\x5d\xc6\xb9\x9c"
- "\x5c\xbf\xb3\x88\x74\x5e\xd3\x86\x7d\x7c\x1c\xb6\x02\xc6\xaf\x2e"
- "\x21\x92\x45\xba\xc2\xe9\x17\x4e\x5e\xe3\x66\xbb\x59\xe7\xa7\x41"
- "\xa7\xe9\x17\x7b\x85\xfb\xf9\x26\x35\xa7\x7c\x3e\xcc\x7a\x5d\xac"
- "\x1e\x7a\x0f\xfb\x16\xf1\xdc\x09\x75\xee\xea\xe3\xd9\xca\xb1\xcc"
- "\x0b\x7d\x73\xd9\x5f\x44\xe9\xff\x4e\xf9\x5d\xc2\x5f\x1c\x37\xe2"
- "\x3d\x94\x0c\x27\x93\x79\x78\x35\x6d\x32\x09\xe8\x9b\x5f\xac\xe3"
- "\x3a\x98\x9e\x3e\x7a\xa1\x01\x79\xcd\x7d\xf4\xab\x48\xeb\xa5\x9f"
- "\xbe\xce\x62\xac\xb1\x28\xbc\x2b\xc7\xf5\x47\xab\xf8\x74\xaa\x28"
- "\xf8\x4a\x3a\xb9\x29\x89\x65\xd2\xa0\xd7\xa5\xb4\xaa\xd8\x76\x29"
- "\xad\x2a\x2e\xf4\xd1\xea\x85\x1b\x2e\xa5\x55\x45\x6b\xc4\xbe\x92"
- "\xbe\x8e\x52\x39\x8e\x69\xc6\x3c\x86\x76\xaf\x03\x9f\xd5\xf4\xd1"
- "\xaf\xd2\x72\x29\xfd\x2a\x87\xc5\xa7\x5f\x05\x9f\xaf\x8a\x84\x53"
- "\x17\x6f\xdc\x18\xb4\xca\xa4\x9f\x07\xab\xfc\x25\x7f\xeb\x9e\xf1"
- "\xd8\x68\xd2\x1c\x1b\xdd\xf8\xe1\xca\xf3\x88\x3e\x5b\x5c\x04\x75"
- "\xfa\x56\x37\x62\xce\xcb\xeb\x4a\x97\x19\x8b\x8e\x1b\x6b\x1e\xb8"
- "\x6f\xe5\xb9\x33\x7f\x13\x8a\xd3\x99\x9e\xfc\x8d\x31\xf0\x7b\xab"
- "\xb2\x4b\x2b\x7b\xbf\xff\xd1\x79\xd3\x83\x05\x89\xab\xc8\x7e\xb8"
- "\xf6\x0e\x4e\x0f\x82\x87\x72\x39\x9d\x7d\xb7\xfa\x83\x99\x1f\xce"
- "\xa1\xf8\x70\xd7\xf6\xf2\x7f\x7f\x67\xa2\x63\xf4\x91\x63\xce\x82"
- "\xc2\x85\xf3\xe6\x7d\xb5\x2a\x8a\xdc\x57\xab\x76\x6b\x15\x5d\xfc"
- "\xdd\xcd\xd5\x4f\x2d\x47\x9d\xb0\xff\x8b\xdb\xd5\xb8\xb9\x16\xfa"
- "\x6f\x7e\xa3\xb2\x25\x1f\x6d\x57\xe7\xc0\x5f\x4c\x8f\xd0\xcf\xe0"
- "\x91\x17\xed\xc2\xbd\x76\x76\x5f\x1f\xaf\xed\xb8\xb4\x8f\x5f\xa4"
- "\xf8\x7d\xfc\x62\x86\xb6\x84\xcf\xe1\xbc\x88\xf9\xcf\x22\x69\x6b"
- "\xf2\x33\xfb\x41\x60\xce\xdc\x8e\xf9\x72\xc7\xf4\x65\x9e\xbb\xf3"
- "\x97\x25\xc8\xbd\x62\xfe\xf6\x4a\xe8\xa2\x68\x63\x5f\x04\xde\x1f"
- "\xe3\x6f\xaf\xf0\x37\x97\xf8\xfb\x9f\x32\x0f\xee\xab\x4e\x92\x9c"
- "\x3b\xe2\xbd\xbd\xfe\xa4\xfc\x3e\x36\x6c\x85\x17\xcb\x0d\xdb\xda"
- "\x0a\x93\x91\xcf\xa7\x6f\x50\xfd\xd1\xca\x7d\xc1\xf5\xe5\x2f\xf3"
- "\xa8\x3a\x2e\xf2\x77\xd5\xc8\xaa\x6c\x88\x17\xf7\x5f\x76\xed\x3e"
- "\xf9\xd4\xd1\xfe\xbf\x49\x50\x3e\xa0\x77\xaf\x52\xff\x0e\x31\xcb"
- "\x3e\xfb\x8f\x76\xb9\xd7\xa5\xc5\xfa\x9f\x2a\xdf\xa1\x75\x99\x86"
- "\x4f\x56\x95\xf4\x81\x22\x2b\xeb\x4f\x9e\xe7\x9c\xa4\x75\x53\xea"
- "\xe5\x78\xb9\x6e\x4a\xe4\x1e\xa7\x7d\xf9\xaa\xab\xce\xd2\x8b\x17"
- "\x2e\xb3\x6f\x9a\xda\xe7\xfb\x5a\x3e\x00\xe5\xd7\xf5\xfa\x88\xb9"
- "\xcb\x07\xd4\x47\xe0\x86\x77\x0d\x11\xbe\x8a\x7e\x1e\x8f\x79\xfe"
- "\x58\xaf\xbe\xab\xea\x07\x0e\xcd\x48\xc3\x7c\x62\xbd\x8c\x47\xb8"
- "\x34\x44\xc3\x8a\x7f\xcc\xdf\xec\x59\x77\x41\x9f\x87\x76\xd8\xcb"
- "\x18\x9f\x75\x2f\x33\x5c\x1f\xf2\x09\xb9\x1f\xb0\x9e\x7a\x71\x8e"
- "\xa8\xcf\x80\xad\x68\xb2\x3e\xc3\xc0\xcb\x47\xeb\x64\xfc\x14\xfe"
- "\xce\x75\x64\x9b\x9c\xf3\xe6\xe7\x17\x3b\x96\xe5\xcf\x5f\x30\xbf"
- "\x24\x85\x9c\x73\x9e\x9b\x3f\x1a\x49\xf6\x27\x1d\xf3\x8b\xf3\xe7"
- "\xcb\x68\xc5\x32\x10\x72\xc9\xb2\x62\xde\xfb\xb8\x64\x0f\x3e\x4d"
- "\xda\xf2\xa6\xf5\x63\xd5\x78\xbf\x7e\x93\xc1\xa7\xf2\xdb\xdf\x22"
- "\x8f\xfa\x7c\xaf\xe4\x37\x83\x13\xd1\xce\x43\xcc\xc3\x2a\xbe\xcf"
- "\x86\x56\x65\x5f\xac\x6f\xba\xd4\x27\x6b\xbd\xcf\xf0\xc9\x02\x7f"
- "\xa7\xb1\xac\x47\xc0\x02\xff\x6f\xa0\x4b\xcb\x6c\x48\xef\xf5\xef"
- "\xd4\xbf\x3b\xce\x7d\x25\xe3\xdd\xbf\xc4\xfa\x76\xfd\xfd\x5e\xe7"
- "\x24\x8e\xd9\xab\xcb\xd5\x86\x89\x11\xf8\x4a\x5f\x5e\x86\xc5\xe7"
- "\xa4\x46\x07\x23\x7d\xd9\x36\x7c\x82\xb1\xd7\x66\xd4\x63\x5f\x61"
- "\x82\xbe\xdb\xf0\x5a\xc0\xe4\x49\x94\xfe\xc7\x28\x07\x58\xd5\x86"
- "\x1f\x8d\xaf\xb7\x5d\x1b\xb6\xc5\xe2\x08\xdc\x87\x23\xfd\x40\x9f"
- "\x9f\xe0\x86\x72\x86\x81\x34\x8c\xff\x55\x23\x23\xd3\x22\xfb\x69"
- "\xfc\xa4\x29\x30\xa0\x17\xcf\x45\x27\x4d\x98\x53\x54\xc4\x3a\x68"
- "\xce\xdc\xa2\xe7\x16\x2d\x5c\xac\x77\xdd\xf8\x79\x1c\x86\x5a\x66"
- "\xb9\x4b\x7f\x63\x5f\x30\x77\x6e\xa1\x4a\xd2\x3b\x32\x7a\xcf\x4a"
- "\xf9\x31\x54\x61\xfe\xbf\xce\xd1\x67\x2b\x56\x6d\x15\xa6\x0d\x6d"
- "\xf8\x9d\x93\xfa\x47\xf6\x6b\x55\x51\xf4\x1c\xad\xaa\xd4\x90\x7d"
- "\xd9\xcf\x2e\xf6\x39\xdb\xfb\x6c\xa7\x90\x7b\x3c\xe8\xd7\xea\x3f"
- "\xa3\x9d\x49\x3e\xaa\xe6\x33\x5f\x09\x11\x70\xf6\xf4\xd2\x7b\xf5"
- "\xa3\xad\xab\x95\xcf\x84\x99\xbf\x59\xcb\x31\x25\xf0\x1e\xf3\xff"
- "\x17\x8f\x2b\x3d\x59\xe5\xeb\xdd\x7b\x31\x25\x62\xbe\x59\x05\xde"
- "\x5f\x98\x75\xa9\x7c\x57\x5b\x2e\x95\x7b\xf6\xb5\xac\xb6\x1b\x34"
- "\x8e\xf8\x06\x3d\xf8\xaf\xfa\x43\x63\xcd\xb8\x5e\xff\x26\x02\xdf"
- "\x73\x59\x9e\x57\x88\x41\x03\xef\x66\xbf\x86\x13\x54\xbd\x4e\xf1"
- "\x54\xb5\x23\xc2\x37\x30\xed\x34\x55\x57\xa8\xbe\xad\x2e\x37\xe4"
- "\x0f\xed\x94\xb6\x1c\xc3\x50\xe3\x7a\x55\x92\xe2\xaf\xea\x6d\x06"
- "\x6d\x79\x0e\x8f\xe7\x3d\x7d\x76\x50\xd5\x2c\xe9\x2f\xa2\x62\x6a"
- "\xf4\x70\xfb\x01\x67\x8c\x01\x07\x79\xd1\x7e\x8b\xdf\xa0\x95\x91"
- "\x27\x92\x27\x26\xcc\x29\xc6\x04\x7b\xfe\xbc\x79\x73\x17\x2d\x36"
- "\xe2\x8c\x67\x2e\x2c\x2a\x54\x71\xc5\xef\x42\xf7\x2f\x85\x0c\x8f"
- "\xe3\xd0\xe4\x48\x55\xb7\x31\xf6\xee\x48\x5e\x13\x91\xfe\xa3\x72"
- "\xce\xf5\xf2\x87\x75\xfa\xfc\xeb\x04\xbd\x34\x43\xf9\x5f\xbd\x74"
- "\x8d\xb2\x6d\xaf\x7e\xa3\xcb\xfd\xcb\x12\xc3\xb6\xe5\xb5\xd6\x4e"
- "\xba\xb1\x86\xcf\xc8\xf1\x59\x82\x2d\xaf\x88\x36\x5e\x5b\x45\x9e"
- "\x1a\xe3\x5b\x74\x6c\x37\xad\x7f\x45\xc5\xd0\xf6\x2c\x60\x5f\x91"
- "\x97\x3f\xd3\x2a\xf7\xfa\x45\xca\x76\x3b\xec\xb3\x54\x96\x89\x81"
- "\x1d\xec\xc3\xcb\xb1\xaf\x7e\xd9\xc6\x76\x1d\xeb\x32\xfe\x5e\x43"
- "\x1b\xfd\x72\x0f\x74\x34\x74\xfa\xcb\x3e\x7f\xf2\x5e\xff\x9a\xe5"
- "\x64\xe1\x3a\xa0\xaf\x7d\x8d\x5b\x99\xb6\x2f\xd1\x21\xe8\x32\x5d"
- "\x67\xfb\xb8\x1e\x1f\xfd\xb2\x49\x5f\xf7\xd7\xbf\xad\xb4\x0f\x34"
- "\x7f\x09\xfa\x7f\x60\x8d\xe2\xd5\x1d\xaf\xde\x5c\x4e\x4e\xfe\x36"
- "\xa5\x8a\x5b\x75\xb0\x1a\xed\xa8\xe1\x6f\x40\xc2\x16\xc4\x7c\xe7"
- "\x97\x25\x68\x43\x8d\xee\x03\x0e\x5e\x79\xa9\x59\xf9\xf6\xff\xb2"
- "\x90\x69\x00\xb8\x69\x3a\xdc\x34\xc0\x45\xff\xdf\xa0\xc7\xcb\x7e"
- "\x69\x9d\x51\x07\xc6\x3f\x3f\xec\xe6\x56\xb6\x9d\x81\x37\x6c\xe8"
- "\xbd\x1d\x55\x72\x2f\xdd\x07\xbd\x6f\x15\xec\xbb\xd6\xf7\xbd\xbd"
- "\x97\x1a\x8d\xb1\x90\xeb\xd6\x71\xe7\xb3\xcb\x16\x5e\xe7\xd3\xeb"
- "\x4a\xe5\xb5\x00\x03\xa6\xa8\xdc\xdb\xae\x5d\x3c\xb3\x15\x30\x2d"
- "\x18\xd7\xfd\xfa\x77\xd6\x3a\xaa\xce\xb3\x9f\xa3\x0f\xe3\xf6\xb7"
- "\x45\x7e\x28\x8d\xf7\xa0\x06\x1a\xdf\xb1\xab\x3f\xcf\xf4\xda\x98"
- "\xd5\xb7\xb7\x84\xf2\xa0\x3f\xe4\xa1\xbc\x8d\x36\x4e\xe6\x7a\x59"
- "\x16\xb8\x2f\xbb\xd1\x37\xe8\x9f\x4c\x71\xf1\xcc\x6e\xfb\x02\x1a"
- "\x78\x92\x36\x3e\xc3\x7d\xc4\xfb\xc1\xec\x7f\x88\x34\x2b\xc7\xdd"
- "\x3f\x41\x1b\x1f\xe6\xfe\x61\x5c\x44\xc5\xf6\x60\xa8\x2b\xef\x3e"
- "\x3e\x73\xcd\x3a\x73\x65\x29\x6c\xee\x79\xac\x4b\x36\x7d\xc6\x73"
- "\x78\xfe\x5e\x12\xdf\xbb\x0a\x85\x26\xfb\x77\x39\xf7\xef\xa6\xcf"
- "\x56\xb6\x0b\xed\x4b\x37\x89\x23\x01\xa2\x2f\x4d\x14\x0a\x9a\x12"
- "\x18\x6f\x93\xeb\x0c\x9f\x0b\xdf\x4a\x5e\x67\x05\xfb\xb2\x59\x36"
- "\x2c\xa7\x34\x3e\x53\xcf\xdf\x02\x6a\x09\xd4\x52\x4b\x71\x2d\xfd"
- "\x29\xb4\x89\x3c\x4b\x38\x3e\xca\xcb\x6b\xfe\xd5\xb9\x89\xf7\xd8"
- "\x92\x71\x3f\xc9\xfe\x53\x59\xd7\xb0\x7f\x3d\xf6\x17\xfa\x57\xcf"
- "\x5f\xc8\xfe\x88\x7c\x1e\xd9\x94\xf7\x27\x6a\xca\xf9\x13\xb9\xda"
- "\x84\xc6\xf3\xba\xb2\x67\xb8\x8e\x0a\xc0\xda\xca\xe7\xcf\xd3\xb4"
- "\x4e\x5b\x0a\xda\x6f\xe6\xfd\x83\x96\x80\x9f\x3c\x0b\x7e\xcf\x38"
- "\xbe\x5d\x77\x9e\x2c\x9e\x05\x1f\xcb\x7b\x35\xdf\x3a\xb3\xd5\x5b"
- "\xd8\xca\x36\x65\x88\xcf\xde\xf3\x9e\x24\xe6\x18\x5a\x15\xe3\x18"
- "\x56\x78\x83\x5e\x66\xa3\x3c\x6c\x4e\xa3\xbc\x8c\x15\xb7\x85\xe9"
- "\x01\x9c\x9a\x67\x29\x9a\x34\x61\xa4\xd0\x71\xfe\xcc\x95\x17\x49"
- "\x9f\x8d\x4d\x4c\x1f\x8e\xd9\xaa\xa1\xbf\x80\x5b\x0e\x68\xa0\x19"
- "\x75\x00\x67\x8b\xbe\x86\x6b\xd9\x70\x9e\x52\x3d\x0b\xf8\x5b\x70"
- "\x2f\xdf\x6e\x9d\x61\xb6\x68\x17\xcf\xee\xae\xba\x40\x66\xee\x37"
- "\xde\xb7\xa9\x92\xef\x19\xe6\xcb\xe9\xdc\x67\xe0\xc9\x02\xfc\x0a"
- "\xf1\x73\x30\xdf\xe1\x5a\x84\xfe\xaa\x00\x0e\xbb\xd0\x57\x5b\xf9"
- "\xaa\x78\x71\x47\x0d\xc7\x25\xd1\xe7\x50\x7d\xe9\x90\xa3\x90\x90"
- "\xdf\x5b\x86\xcc\x6c\xda\xa5\x41\x8e\x78\x0d\xa7\xee\x25\x4a\xd5"
- "\xdc\xd5\xc1\x2d\xd0\x75\xb5\x2f\xc9\x73\xc9\x69\xbc\xae\xf9\xba"
- "\xfc\xb6\xc6\xcb\xbb\x0d\xdd\xb7\x76\x08\x9f\xdd\xdc\x74\xdc\xc4"
- "\xeb\x3e\x15\xfb\x2c\x3a\x9f\x5b\x90\x07\xfa\xff\x7a\x7d\x0c\x7d"
- "\x49\xce\x2f\x58\xf6\xfb\x9b\x4f\xc0\x96\x6d\x12\x9b\xf3\x88\xf7"
- "\x7f\x52\x57\x09\x7f\x6a\x9b\x55\xb4\x04\x9a\xe4\x99\xdd\x96\x40"
- "\x58\xee\xff\xe0\x7d\xc2\xb4\x80\xdf\x0a\xdb\xf7\x28\xd3\xce\x48"
- "\xe7\xbd\x23\x5e\x57\x9b\x16\x10\xfe\xe9\xcb\xac\xfc\x2d\xcc\x61"
- "\x72\xef\x40\x4f\x6f\xb1\x61\xde\xb0\xcc\x6f\x45\xdb\x43\xbd\xb0"
- "\x3a\xf3\x12\x59\xde\x90\x37\xbd\x37\x6f\x67\x9e\x99\xbf\xed\xcc"
- "\x75\x46\xa4\x25\x4d\x77\xa2\x2c\xf7\x95\x9e\xa6\x6c\xe6\x57\xf6"
- "\xf4\xce\x29\xf9\xfc\x42\x27\xc6\xcd\xc5\x79\x09\x5a\x67\x9e\x29"
- "\x0c\xd8\xe0\xfd\x34\xf9\x4d\xce\x90\x5f\xff\xc6\x55\x3b\xe4\xb7"
- "\x95\xc4\xfa\xc4\x2c\xe4\x33\x33\x5c\x8e\x05\xc1\xdf\x06\x11\x03"
- "\x93\xf6\xc7\xf7\xb9\xeb\x68\xf7\x94\x3d\x02\x7e\x7a\xf5\x00\xcb"
- "\x73\xd8\xf2\x5e\xba\xfd\x29\xb6\x61\x5e\x95\xbe\x01\x61\xc8\x58"
- "\x38\xf9\xbd\xf4\xd1\xed\x94\x50\x06\xbe\x55\x6b\x50\xaf\x3e\xe4"
- "\x85\x0c\xba\x34\x01\x3b\xf4\xd5\x5c\xe6\x1b\x6b\x07\xfb\xca\xbd"
- "\x67\x93\xfe\x69\x29\xed\x3e\x6f\xb0\x9d\x9a\xca\xff\x4a\x4d\x21"
- "\x6f\xf9\x81\xf3\x7e\xb3\xf2\x53\x33\x33\xdc\xf9\xfc\xce\x05\x5e"
- "\xcd\x0f\x6f\xa5\xfe\xf6\x06\x78\x7e\x8c\x31\xec\x6f\x6a\xae\xf8"
- "\xea\x01\x63\x5e\x7c\xf9\x36\xd4\xa4\x73\xfc\x0c\x21\x6c\xa4\xad"
- "\xfd\x83\x0f\xb8\xb8\x44\x57\x26\x8d\x5e\xce\x6b\x72\xaf\x76\x60"
- "\x8e\x92\xa3\xc3\x3d\xa7\xe0\x22\xff\x65\xe0\x32\xcf\x34\xd5\xc8"
- "\x7d\x29\xb4\xe9\x0f\x47\xc3\x80\x1d\x4e\xf9\x3f\x69\xd0\xf1\x2e"
- "\xd7\x97\xbc\x66\xfb\xda\xc3\xa8\xe7\x68\x4b\xe8\x28\x71\x1c\x9e"
- "\x3a\x0d\xe3\xe3\x39\x1b\xe9\x3e\x79\xae\xb3\x54\x33\x49\x13\x99"
- "\x69\x98\xaf\xf3\x7e\x8c\x8b\x75\x1c\xaf\x05\x94\x85\xe9\x2a\x2f"
- "\x46\x46\x8e\x1d\x01\x18\x53\x3f\xe1\xbd\x2f\xe8\x89\xb0\xb0\x99"
- "\x3e\xbc\x88\x91\x1e\xba\x53\xc6\x92\x58\xfd\xcd\xd7\x07\xad\xa2"
- "\xbb\x85\xc9\x2a\x7d\x3a\xb5\xca\x93\xed\xe8\xdb\x6c\xe5\x03\xb8"
- "\xcf\x16\xe1\xff\x97\x88\xba\xa4\xff\x9f\xb0\xec\x3d\x5e\x2b\xd7"
- "\x1d\xdf\x4b\xef\x72\xd7\x04\x7c\xf4\xaa\x5c\x7f\x5d\xc7\x67\x3c"
- "\xa4\x8e\x7d\x6d\x8e\x3f\xf9\xe3\xdd\x0c\x83\xcf\xb2\x6a\x4b\xc2"
- "\xbb\xab\xfe\x21\xed\x6b\x7e\x37\xbe\xa5\xa3\xcb\x23\x2a\x3e\xde"
- "\xcd\xe7\x18\x75\xd8\xd6\xb3\xf4\xda\x35\xa2\xf2\xe3\xdd\x3e\x7a"
- "\xad\x40\xf5\x8d\xbc\x1f\xc9\xef\x43\x3d\x99\xb0\xab\x6b\x1a\x6a"
- "\xbb\x79\x2f\xa0\x66\x96\x70\x7f\xdb\xd3\x69\xf9\x78\xf7\x4c\x1b"
- "\xdb\x54\xaf\x95\xf8\x12\xd4\x77\x7d\x8d\xb8\x18\xfd\xcd\x91\xc4"
- "\x66\x5b\x8a\x17\x40\x30\x9f\x4d\x3f\x4d\x9b\xbf\xe8\x76\x93\xa9"
- "\x07\xb6\x60\xb7\x89\xd2\x20\x5f\xa9\x1b\x86\x52\x16\xde\x0d\x3d"
- "\x4d\xaf\xfd\x31\x64\xa2\x74\xfc\xd2\xfc\xdf\x74\x24\x03\x6e\x0e"
- "\xaf\x91\x36\x9f\xe7\x35\xae\xd7\xe5\x39\xe5\xaa\xd7\x29\x43\x03"
- "\x3c\xde\xef\xa9\x1a\x4a\x19\xbc\x4e\x89\xb4\xcc\xfc\xb0\xda\xf7"
- "\x34\xd6\x22\x56\x0f\xa5\x91\xd1\xf5\xbe\xb6\x5b\xad\x63\x6e\x6e"
- "\x93\x73\x2b\x3f\x7d\x0b\x73\xab\x13\x80\xbb\x4d\xb8\x13\x85\xf8"
- "\xa6\xcd\xa4\x7c\x13\x5e\x5f\x6f\xad\x51\x7c\x27\xf7\xf9\xc0\x6f"
- "\xbc\x8f\xaa\xef\x29\x25\xc8\x78\x20\x29\x1f\x6c\xe3\xef\x50\x47"
- "\xac\x13\xa7\x49\x3c\xf4\x33\xfc\xe1\xd5\xb7\x72\x6c\x30\x79\x76"
- "\x3f\x7f\x8e\xda\x8f\xe2\xf3\xfd\x3e\x7a\x5d\xc6\x63\x5c\xf7\x3a"
- "\xa5\xbe\xf8\x3a\xa5\x35\xcf\x93\xed\x3a\xa0\x64\xd1\x4c\x8c\xaf"
- "\x56\xc1\x72\x06\x9e\x00\xde\x5c\x1f\xf3\x46\x4b\xe8\x9c\xc7\x55"
- "\x22\x34\xcf\x53\x6c\x8b\xbe\x1e\xf6\x2c\xda\x45\xd3\xdb\x42\xea"
- "\x2c\xea\x6c\xf2\xd7\x03\x5e\xfd\x50\x4a\x3b\x49\x9b\x93\xbd\x45"
- "\xc4\xfb\x15\x37\x7a\x16\xed\x01\xec\xcd\x37\xf0\x58\xb0\x1e\xf4"
- "\x51\x63\xc2\xe6\xa3\xde\x60\x2b\x35\x43\xbe\xa7\x15\x0b\x09\x07"
- "\x79\x1e\x92\xed\xdd\x6c\xb3\xe7\xab\x18\x0c\xb2\xad\xbd\xfb\x7c"
- "\x7a\x3b\xbc\xe7\x25\x3c\x87\x17\x5c\x62\xb4\xc9\xa0\xb5\xe2\xaf"
- "\xcd\xdb\x3d\x8b\xb6\x11\xf7\x0f\xe7\xc7\xf3\x26\x6f\x07\xf2\x9e"
- "\x89\xee\x17\xce\x83\x77\x9f\x00\xee\x0f\xfa\xf6\xaa\x79\x0f\xb5"
- "\x2f\x4f\xed\xeb\x7c\x1e\xed\x75\xcb\x66\xd0\x48\xad\xed\x6f\xbe"
- "\x9d\x71\x45\xdf\x65\x79\x4b\xfe\x1a\xdf\x27\x15\xb2\x0f\xbe\x5f"
- "\xd5\x22\xf7\xec\x6a\x87\x4f\x0b\x69\x42\xe9\xb3\xda\x63\x1a\xf4"
- "\x80\x0f\x57\xd6\x05\x52\x9f\xdc\xc6\x7e\x40\xb5\x9f\x5a\x13\x54"
- "\xff\x72\x5b\xd8\x5e\x89\xd7\xc7\x11\xfb\x89\xec\x97\xdb\xdb\xc7"
- "\xfc\x0d\x47\x8d\xf7\x84\xd9\xdf\xbe\xc7\x46\x8a\xff\x44\x35\xe0"
- "\x7e\xa2\xdb\x6e\x79\xfa\x58\x96\xd7\x99\xfc\x9e\x9d\xcf\x47\x1a"
- "\xbe\xc1\x90\xdf\x61\xf9\xca\x9f\xdb\xc6\x3a\xaa\xde\x24\x74\xde"
- "\xac\x3d\xa6\x97\x9d\xa5\x7c\x32\x6a\x37\xa1\xfc\xac\xb8\xed\x4d"
- "\x84\xde\x71\x43\x4d\xa3\x3d\x6c\x47\x0a\xe8\x2a\x8c\x07\x57\x79"
- "\x03\xdd\xfa\xf7\x33\xb7\x3c\x00\x9b\xfa\x2a\x3e\x1f\x65\xe0\x76"
- "\x65\x7b\x7f\x5b\x86\xa9\xb9\xcd\x96\xd9\xc6\xda\x92\xb0\x80\xc6"
- "\x6e\xab\xe0\xb3\x92\x7c\xde\x25\x90\xdc\x01\xfb\x56\xd8\x95\xdc"
- "\x6c\x59\x03\x3b\x55\xea\xdb\xfc\x20\x95\x73\xbb\x78\x6f\x17\xf3"
- "\xa6\xab\xb8\xcd\x80\x83\xf9\x4f\xf1\x58\x35\x9e\x2b\xd8\xfd\xae"
- "\xed\x18\x6d\x43\x9b\x64\xdb\xd0\x46\xd9\x36\xfd\xfb\x52\x27\xa9"
- "\x6e\xb8\x5c\x2f\xbf\xb2\xf6\xa8\xf8\x32\x15\x1d\x7e\xfe\x76\xee"
- "\x49\xaa\x7f\x5f\x9e\x81\x41\x9f\xa8\x7d\x90\xba\x12\x91\xf2\x62"
- "\xca\x95\xc1\xac\xcb\x51\x30\x85\xfd\x65\x8e\x45\xa9\x7f\xa3\x0e"
- "\xb0\x7f\x25\x2a\x85\x5d\x9e\x31\x44\x7d\xfc\x8d\xcf\x3e\x3d\x54"
- "\x9f\xc1\x7d\x75\xdb\x2e\xca\x51\x7c\x58\xff\x0d\x5e\x6b\x56\xf3"
- "\xbc\xba\x23\xd0\xbd\xeb\xd4\x9c\xca\xf0\x23\x4f\x90\x7e\xe4\x91"
- "\x3a\xf6\x0a\x71\x94\xfa\x4e\xa4\x9c\xac\xc6\xfd\x7e\x79\x56\x12"
- "\xf8\x2e\x0d\x19\xfa\xaf\x6e\x3f\xfb\x24\xf5\xfa\x03\x2c\x03\xaf"
- "\x94\xa9\x73\xe4\x5d\xee\xfa\x3c\xc3\x46\x91\xdf\x24\x73\x8b\x23"
- "\x9c\x6f\xfa\xb2\x73\xd2\x5f\xa0\x4a\xc6\x3c\x38\xad\x9f\xb3\xab"
- "\x7f\x46\x5f\xd7\xc8\x64\x1f\x7e\x94\xdd\xe4\xa3\x43\xf2\x4c\x20"
- "\xd3\x80\xeb\x96\xb8\xcb\xef\x82\xd5\xef\xee\xdb\xf7\xa9\x93\xdf"
- "\x4d\x57\x7e\xad\xf5\x47\x0c\x1e\x41\x7b\xaf\x52\xb1\x41\xeb\x6e"
- "\x3f\x3c\x92\x24\x0f\x74\x0a\x5b\xca\x77\x6a\x99\x27\xeb\xfd\x91"
- "\x74\x9a\x1e\xd2\x5c\x4a\x07\xd5\xb5\x0a\x29\xeb\x75\xad\x5f\x6d"
- "\x4f\x6c\x9d\x64\xd8\x22\x8a\xce\x69\xd0\x2f\x6f\xa4\x49\x5a\x57"
- "\xec\xc8\xe6\x18\x2d\x2b\xca\x38\xe6\xd4\xaf\x92\x38\xb6\x57\xa8"
- "\x62\x47\x5e\x98\xcf\x64\x62\x9c\xd5\x2a\x76\x38\x4e\x16\x93\x29"
- "\xbf\x98\xf7\xba\x3e\x2e\xe7\xf9\x95\x70\xc1\x16\x48\x81\x7d\x02"
- "\x39\x5f\x39\x9f\xac\x8f\x39\x00\xdb\x95\x99\xce\xb1\xb7\x38\xee"
- "\x16\xc7\xce\x0b\xbb\x32\x07\xe3\x7e\x08\xec\xb9\x34\x61\xd9\x91"
- "\xcb\xfe\x32\x61\xb7\x80\x3e\x3e\xce\xf1\xbf\x4c\x5e\x7f\x90\x56"
- "\x9e\x21\x0b\xc7\xf6\x0a\x55\x7e\x5c\xd3\x12\xf8\x4c\xce\x2d\x06"
- "\x15\xc3\x9e\xd6\xe4\xb9\x1c\x9b\x96\xfc\x71\x39\xc6\xf8\x35\xaa"
- "\xdd\xe7\x84\x6a\xb7\xc2\x9b\xf1\x57\x3a\xae\xc1\x51\x26\x71\xff"
- "\x97\x37\x43\x80\xaf\x55\xbc\x5d\x18\xae\x78\xbb\x40\x9d\xe5\x6c"
- "\xa2\xb2\x12\xd1\xee\x85\x6d\xcc\xfe\x9b\x7c\x5e\x97\xfd\x71\xb8"
- "\x8d\xdc\x3e\xae\xfb\x5f\xcf\x9f\x91\xb1\xca\x42\x78\x76\x15\xe9"
- "\x65\x3a\x50\xa6\xa3\x89\xba\x2b\xde\x96\x6d\x6f\x09\xa8\xb2\xf9"
- "\xf2\x9e\xcb\x47\xd0\x41\x6f\x73\x2f\x1d\xd0\x76\x6e\x1f\xb7\x3f"
- "\xc4\x34\x01\x0d\xf4\xb6\xda\x7a\xf4\x76\x72\x1b\xff\x84\x51\xe7"
- "\x75\xb4\x13\x6d\x95\xed\xec\x41\x3b\x8f\x38\x88\x82\x6b\xcf\xd0"
- "\x97\x29\x6f\x17\xf0\xfc\xd0\xf5\x67\xd8\xd1\xa5\xd5\x84\x79\xa0"
- "\xf9\xed\xb2\x6a\xd3\x5a\xd8\x26\x65\x7e\xcc\x07\xfd\xa2\x9d\xed"
- "\x7d\x6f\x31\x7e\xa1\x5a\xf9\xdd\x61\x69\x1f\xf3\x37\x62\x9f\x45"
- "\x9b\xb4\x2f\xa8\xac\x5d\xb4\xc3\x36\x0d\x7a\x43\xc8\xe3\x40\xfb"
- "\x31\x7f\x3c\xa9\xe3\xcf\x79\x57\xfe\x43\xb5\xcb\x5a\x44\xe9\x07"
- "\x1f\xa9\x30\x79\x5b\x2b\xc8\x68\xcb\xe3\xc8\x87\xf6\xd8\x00\x6b"
- "\xa0\xfc\x2e\x03\xda\xb9\x19\x78\x06\x23\xda\xd4\xdc\x11\x04\xcc"
- "\x4f\x29\x65\x06\x25\xbc\x7e\x16\xed\x38\x4b\xb6\xea\x32\xd8\x5f"
- "\x0f\xb2\xbd\xf8\xab\xcf\xaf\xce\xa3\x0c\x1f\x6d\x6d\x57\x7c\x27"
- "\xe3\x06\x5d\x77\x9a\xde\x48\xee\x8d\x0d\xc4\xf1\xd6\x92\x3f\xae"
- "\x65\x3e\x92\x31\x82\x78\xcc\xe8\x02\xcf\xb0\x2f\xcd\x52\xd4\xd1"
- "\x95\x39\x44\xe2\xe3\x1e\x43\x78\x4e\xc5\x33\x7f\x33\x2a\x9d\xd7"
- "\x04\x50\xae\x46\x80\x66\x0c\x1f\xf6\xdc\x1a\xbe\x32\x0d\xe3\x9e"
- "\x35\xf9\x0d\x65\x8b\x14\xd8\x98\x98\xfb\xee\x2e\xf3\x9b\x9e\xff"
- "\x0d\x8d\xbc\x32\x9d\xf2\x46\x76\x7f\xfa\x9b\xf7\x2d\x18\x1e\xda"
- "\x36\xf8\x34\x6d\xbb\x21\x5a\xc6\xec\x52\x97\x29\x3d\xf8\x46\x1b"
- "\xef\x15\x5c\x61\xbd\x52\xff\xb1\xcf\xd3\x15\x96\x6b\x37\xf0\xc0"
- "\xfd\xb6\xfe\x70\xbf\x72\x3a\x6c\xcb\xe9\x0f\xd6\xfa\x57\x64\xbc"
- "\x38\xd7\x86\x57\xd8\x1f\xb1\xa3\xfd\xb0\x8d\x63\x78\x63\xec\xdc"
- "\x16\xa0\xc5\x5b\xc8\xe2\x3a\xc3\x6b\x32\x53\xe9\x70\x6d\x16\xd5"
- "\x61\x4e\x2e\x3a\x33\x07\x6f\x3c\xcf\xbe\x0f\x4a\x87\xb0\x4d\xca"
- "\x67\x29\xc5\xe2\xcc\xb4\xaa\x57\x0c\x1b\x7e\x7b\x72\xe9\x05\x32"
- "\xa9\x6f\xa4\x6c\xb7\x4c\xb4\x8b\xd0\x26\x93\xe6\xa8\xe5\x98\x57"
- "\x29\xa7\xb2\x38\xe6\x95\x11\x47\x4a\xda\x3e\x4e\xc8\x5c\xa7\x2d"
- "\x65\xfd\x22\x1a\xc9\xb1\xef\xac\x7e\x65\xcb\xa9\xf1\x9a\x63\x54"
- "\x51\x9a\xbe\xdf\x9f\xa6\x62\x4b\xbd\x51\x5e\x7f\x1e\x75\xa9\xf7"
- "\xf3\xc3\x98\xc3\x48\xb8\x8b\x28\xa3\xf6\x3c\x65\xb2\x1d\x94\xff"
- "\x85\xb2\xd9\x78\x5e\x38\xb5\xc3\x2a\xc2\xff\x95\x49\x5b\x4e\xf7"
- "\xc5\xc6\xf3\x2f\xe6\x78\x7a\xc2\xd6\xdf\x5e\x49\xd5\x10\xe9\xf3"
- "\x23\xe3\xb1\xa8\x6f\xe8\x11\x6d\x7a\x89\xcc\xfc\xcd\x58\x5e\xcb"
- "\xe3\xb5\x61\x3e\xf7\xa3\xc6\x90\xed\xad\x46\xcc\xb0\x7e\xf7\x11"
- "\x2b\xd4\x7c\x47\xbb\x0a\xf3\x2f\x7f\x97\xc7\xb3\x84\xc7\x8c\x1d"
- "\x76\x3e\x6b\xd4\x37\xc7\xd9\x91\xc0\xef\x38\x8d\x7d\xe1\x73\x24"
- "\x2d\x77\xe4\xf2\xbc\x47\x9f\x33\x1e\xb4\xf7\xa6\x29\x1b\x86\xc7"
- "\x32\xc6\xa1\x5e\xad\x23\x0f\xea\x72\xef\x28\x34\xc6\x33\x1e\xd7"
- "\xd5\xf7\x6a\x77\x38\x7d\x09\x1f\x95\x5e\x06\xbf\x34\xfd\x7b\xcf"
- "\x1c\x1b\x21\x07\xf9\x1b\x8c\xf1\x4d\x7e\x8f\x64\xf5\xd0\x7b\x16"
- "\x2f\xa3\x61\x33\xbf\x61\x91\xb1\x37\xf8\xbb\xa3\x6a\xdc\xdd\x71"
- "\xb4\x6f\x3f\x2d\x47\xd2\x5b\x7e\x6b\x90\xe7\x18\x26\x8c\xc1\x2a"
- "\xfe\x5d\x87\x1a\x7f\x8d\x73\xee\x3b\xce\xf4\xd5\xb3\x33\xad\x77"
- "\x1c\x45\x1d\xec\xd7\xc1\xf0\x95\x6d\xb2\xa3\x91\xeb\xe0\xb9\x95"
- "\x1a\x5f\x77\x34\x5e\xc6\x16\xcb\x64\xfa\x6a\xfa\x7c\xd2\xdb\x71"
- "\x4a\xd1\xd7\x49\x89\xa3\x37\x91\xed\x60\x99\xcf\x3c\x48\xc5\x71"
- "\xb2\x9e\xa0\x9d\x73\xf8\x3d\xf3\xba\xe7\x36\x5e\x8b\xdb\xf9\xa1"
- "\x97\xc7\xed\x9e\xbc\xd4\x69\x3c\xd7\x97\xb6\xf8\xce\x5d\xa3\x50"
- "\x0e\x69\x83\x3f\x3a\x1b\x34\x57\x2d\xa7\x91\xfc\x4d\x4f\xa4\xcb"
- "\x75\x02\xff\xf5\x4f\x77\x7d\x27\x9d\x6c\xdf\xd9\xc4\xe7\x01\x76"
- "\x1e\xc3\xfc\x52\xfa\x47\xc8\xfa\x37\x24\xce\xe0\xd8\x7f\xef\x74"
- "\xfb\x92\x54\x5f\x35\x3c\x8b\xe7\xcc\x88\xe7\x81\xc6\x5a\xbe\x8f"
- "\x1a\x8a\xe5\xde\x25\xfb\x3c\x2f\xe0\xf1\xfa\xd4\xd1\x3e\x3f\xa1"
- "\x86\x67\x15\x2e\x0d\xcf\x1e\x2e\x26\x5e\xab\x3e\x56\x27\xe3\x78"
- "\x35\x4c\xf4\xd1\x8e\x35\xfa\x7a\xcc\x51\xc9\x57\x6c\xef\xbe\xc0"
- "\x73\xb0\x53\x9e\xf5\xc8\xc7\xe3\x44\xbe\x93\x72\x94\x0d\x7f\xaa"
- "\x5d\x03\xff\x44\xb4\xff\x33\x5e\xeb\x8b\xab\x13\x5f\x27\x92\x65"
- "\x2a\x4f\xd9\xa5\xcf\xd9\xfa\xa4\xdd\xb8\x5a\x44\x65\xfb\x51\x5c"
- "\x53\x91\xee\xc3\x95\xc7\xf0\x56\x5c\xd3\xc5\xfa\xc4\x6a\xe6\x4b"
- "\xcc\x61\x6d\x98\x27\xf0\x3e\xa8\xad\xbf\xb3\x8a\x4c\x1b\xef\x9a"
- "\x9f\x92\xf2\xa1\x7d\x73\x56\xb3\x1f\xf6\xd9\x16\xa2\xc5\x21\xd1"
- "\x6d\xff\x16\x9f\x09\x7a\x73\x96\x6b\x0b\xfb\xae\xbc\x99\x19\xed"
- "\xbb\xf2\x66\x2e\x7e\x15\xf8\x1d\x27\xfa\x75\x2a\xae\xb3\xfa\x7e"
- "\xbf\xce\xed\x72\xbf\x39\x0b\x74\x94\x36\xd6\x95\xe9\x44\x2e\x8f"
- "\x7e\xe0\x79\x51\xf2\x1f\x3c\xb2\xbd\x95\x82\xf0\x6c\x11\x03\x13"
- "\x73\xf4\xf6\xfa\xf1\x9c\x66\x77\x61\x5c\x4b\x06\x4d\x86\xa2\xcd"
- "\x03\x93\x76\x73\x7b\x19\xdf\xce\xe4\xf6\xa3\x91\xe7\x34\x19\x26"
- "\xb7\xdf\x9f\x8c\x72\xa0\xa5\xb8\xe9\xc1\x02\x83\x9e\x3a\x9d\x78"
- "\xdf\xc8\xd4\x09\x18\xca\x0e\x42\x7e\xc0\x30\xf2\xf7\xd2\x7e\x28"
- "\x7f\x5f\x03\x7d\x8a\x7c\x98\x13\x5b\x8c\x33\xa0\x5d\xee\x5f\xe7"
- "\x1c\x2a\x52\xfb\x07\x5c\x36\x10\x51\x96\x63\x5e\xc4\x2b\x8f\x3a"
- "\x65\x79\xc6\xf5\x24\xbd\xf9\x90\xaa\xf7\xd7\x63\xfa\x93\xa5\xb2"
- "\xe1\xb0\xef\x6a\x7d\x1c\x17\x83\xed\xa1\xb1\xde\x61\x01\xf2\xd6"
- "\x6a\x18\xf3\xdb\xa1\x8f\x84\xe7\x24\xfd\xfa\x42\x4b\xb0\xfd\x0a"
- "\xc7\xc3\x5f\x4b\x9f\x2c\xd1\x5d\x4e\xde\xd2\x3b\xe4\xb7\xac\xcf"
- "\xd2\xae\x11\x5e\xbf\x8c\x09\xcf\xf7\x32\xb6\x28\xfb\x69\xf0\xd8"
- "\x80\x39\x76\x6f\x4c\x45\x0d\x79\xeb\x38\x1d\x69\xde\x80\x5f\xc6"
- "\x5e\xec\xf3\x23\x3f\xd9\xaa\x64\xea\xad\xcf\x64\xfc\x05\xc6\x37"
- "\x74\x9f\x87\x71\xd6\x2a\x4e\xb6\x72\x1b\x5c\x98\xff\x79\x43\x5d"
- "\x1e\x96\x09\xfb\x12\x5e\x2b\x7c\xeb\x7d\xf0\x9d\xd0\x2a\x4f\xb6"
- "\x5e\x59\x1b\xde\x92\xe7\x81\x5c\x21\x71\xd6\x9f\x7c\xb2\x95\x6d"
- "\x92\xaa\xb2\x24\xcb\x84\x5a\xe1\xe9\x4c\x69\x87\x8e\x7d\xeb\xf8"
- "\x21\xa7\xea\x9b\x2b\x84\x7b\xdc\x68\x7b\x9d\xde\x76\xa4\xc9\xbd"
- "\xb9\xd1\x35\x2a\xd6\xa4\x8f\x76\xa5\xf7\xbb\x66\x85\x7e\x66\x7b"
- "\x80\x7d\x5c\x15\x2d\x76\x15\xf6\x8e\x0d\x57\x84\xc7\xae\xc2\xaf"
- "\x51\x47\x8f\x5e\xc7\x91\xff\x66\x1d\x47\x2e\x57\x07\x74\xc3\x0d"
- "\xa7\xe9\xed\x59\x57\x3e\x77\x7c\xdb\x2e\x79\xa5\xe2\x94\x5f\xe9"
- "\xcc\xdf\x7c\x12\xc6\xfc\x2d\x64\x11\x24\xbf\x3b\x65\xa2\x72\x8e"
- "\xbb\x19\xaa\xf8\x83\xa7\xd9\xd9\x4d\x9e\x25\x7f\xa1\x36\x7a\x5b"
- "\xc6\xba\x6b\x86\x9e\x11\xeb\x12\x73\x7a\xd6\xb6\xcf\xe8\x31\xed"
- "\xda\xc6\xf4\xde\x82\x7e\xd8\x1c\xc1\x67\x2d\x81\xbf\x90\xb7\x80"
- "\xd7\x57\x8f\xf2\xba\x76\x8e\x48\xc6\x5c\x05\xba\x01\x36\x7a\x58"
- "\xd2\x03\xf6\x8b\x9a\x6f\x75\xb4\xcb\xf9\x96\x5f\x9e\x4f\x1c\x28"
- "\xe3\x69\xba\x17\x06\x78\xed\x3b\xdc\x93\x67\xef\x72\xd3\x0c\x8e"
- "\xb3\xc9\xeb\xce\xc2\xb2\x37\x30\x3d\x94\x28\xe4\x7c\x0a\xb6\x3f"
- "\xc7\xd9\xf4\x06\x7c\x14\x86\x1d\x5d\x7b\x91\xd2\x6b\x61\x7b\x42"
- "\x67\xa7\xb1\x5e\xaf\xd7\x63\x6d\xae\xbf\xd8\x17\x6b\xb3\x8e\xd7"
- "\x7a\x5a\x71\x7f\x91\xcc\xe1\xca\x8e\xf6\xcd\x17\x29\x63\xcb\x12"
- "\xca\xdc\xcc\x6b\x79\x7f\x57\xb6\x0f\xdb\x15\x32\xee\xe6\xc2\x4c"
- "\x5e\xcf\xef\xb3\x7d\x96\x72\x5c\xe0\x5e\xbd\x65\x96\x6b\x20\x57"
- "\x44\xef\xdf\xc8\x71\x30\x54\x71\xca\x1e\x4a\x4d\xda\x0d\xda\x61"
- "\x2c\x7b\xbb\x11\xf4\xcb\x89\xd7\xb7\x86\x1f\xd6\xa6\x88\x58\xa9"
- "\x87\x32\x94\x7e\xf7\xd1\x3b\x96\xfe\x78\x22\xbc\x39\x8f\x46\x77"
- "\x50\x96\xf2\x69\x48\xc6\x98\xf8\x4e\x11\xef\x9f\x97\x3d\x43\xb6"
- "\xf0\xe6\xd9\x09\xae\x5f\x51\x22\x7f\xe7\x9c\x7f\x65\xff\x10\xed"
- "\xa3\x8b\x28\x8b\xf7\x1f\xd8\xef\xc1\xbe\x42\xe6\x1f\x97\x51\x4a"
- "\x59\x91\xb0\x73\x95\x63\xd4\x5d\xf6\xc9\x0b\x9e\x5c\xf8\x4c\xf1"
- "\x9c\x92\xf9\x4f\xcc\x2f\x9a\x5f\xb2\x4c\x86\x50\x18\x29\xff\xdd"
- "\x3b\xa2\x70\x96\xdc\x74\x8e\xb0\x2f\x32\xfa\xd6\xe3\xde\xb9\x10"
- "\xe2\xf5\x83\x2b\xa2\xd7\x3b\x52\xff\xd5\xc2\x96\xaa\x95\xbe\x3b"
- "\xbb\x2d\xbe\x84\x0f\xe5\x98\xb5\x0e\x69\xeb\x74\x1f\x9b\x93\x7a"
- "\x3e\x6d\x5d\x62\x35\xf8\x78\xec\x09\xfa\x6d\x88\xf7\x43\xd0\x57"
- "\x3e\x6f\xe9\x69\x9e\x4b\x8e\xe5\x35\xfe\x66\x5e\xcb\x58\xc4\xf9"
- "\x77\xaf\x64\x1f\x06\xf6\x87\x02\x1f\x6e\x3b\xa1\x3f\xeb\xdf\x4c"
- "\xdf\x1c\x5a\x68\xdb\x16\x3a\x67\xdb\x21\x44\xde\xeb\x62\xa1\x63"
- "\xb3\x38\xe7\x78\x3d\x22\xfe\xdb\x55\x28\xff\x4b\xc8\xc9\x0f\xf0"
- "\xbb\x5e\x54\xec\xa8\x80\xfc\x0d\x3b\x4d\xbb\xb7\x33\x0e\x53\x1d"
- "\xe2\x5c\x5f\x2c\x84\xdd\xef\xe3\xb9\x07\x3f\x4d\x54\xec\x6c\x88"
- "\xd8\x5f\xe3\x77\x9f\x71\xfe\xe2\x79\xec\x13\xb6\xfb\x0c\xe3\x25"
- "\xd6\xee\xdc\xe9\x77\x39\x12\x91\x3f\xac\xf0\x7c\x37\xd9\xbb\xa6"
- "\x85\xec\x4f\xc8\x7b\x8b\xe7\x29\xb6\xe7\xde\xfd\x95\x30\xb9\x04"
- "\xef\xc1\x79\xdb\x43\xa4\xce\xab\xbd\xe3\x64\x1f\x84\x3a\xd8\xdb"
- "\xb5\x83\x29\xad\x7a\x30\xa5\x76\xb9\xdf\x1d\xd3\xeb\x7f\x61\x51"
- "\xe3\x2d\x8f\x79\x1c\x3b\x1b\xfa\xa8\x8b\xc7\x4f\xc6\x83\x79\x18"
- "\x30\x0b\x78\x7f\x4e\x9d\x8f\x7a\xb7\x08\xb6\xa5\xed\xca\xf5\xf1"
- "\xbb\xf2\x7b\x2a\xa3\xd7\x51\x01\xaf\x69\xf3\xbe\x33\xc7\x96\x86"
- "\xbc\xb6\xab\xf9\xc6\x6f\x3f\x95\xfb\xea\xd0\x29\xbc\x5f\x52\x5f"
- "\x06\x3b\xc1\xb2\xb7\x83\xed\x9b\x90\x9b\xca\x79\x6f\x53\xbb\x78"
- "\x66\x37\xef\x47\xcb\xb3\x85\x32\x26\xfb\x9f\xa8\xfe\x02\x99\xdb"
- "\xe8\x5d\xfe\x56\x77\x5a\x1f\x5d\x7f\xfb\x43\x86\x21\xd6\x6e\xb7"
- "\x5b\x4b\x4d\x15\x0c\x43\xbb\x78\x36\xdb\x28\x07\xda\x0d\xe0\x72"
- "\xe0\x83\x1b\x64\x39\xce\x2b\x63\xa2\xa4\xcd\x86\xcd\x67\x97\x75"
- "\xaa\xe7\x19\x02\x72\x18\xba\x18\xde\x8d\xfb\x59\x4c\x27\x5c\xf3"
- "\xe4\xda\x2f\xe6\xeb\x32\x16\x8f\xe5\xe3\xdd\x5e\xdf\x29\x8f\xc4"
- "\x87\x7d\x71\x4b\xa0\xb3\xa4\x3d\xf8\xdb\x67\xeb\xbe\x20\x73\xf1"
- "\x53\xdc\x7f\xbf\x93\xeb\xfe\xe0\xa7\x06\x85\xdf\xef\x92\x3a\xd7"
- "\xbe\x5d\xd0\x69\x39\xe5\x0b\x98\x2c\x74\xd8\x16\x64\x5d\x59\x7d"
- "\xd8\xd6\x8d\xf1\xee\xb7\x4d\x3e\xd3\xb6\x6a\x65\x8b\xa8\x72\xbc"
- "\x4f\x0c\x3b\xb5\x3d\xd1\x96\xe6\xc2\xfb\x0e\xc3\xef\x02\x36\x69"
- "\xfb\x7a\xbc\x03\x6d\x1b\x99\x6e\x3e\xda\x9d\xd3\x52\xa4\xce\x66"
- "\xe0\xf9\x2a\x3e\x6f\x2f\x69\xbd\xfa\xe9\x76\xeb\x2a\x0f\x9f\xff"
- "\xcc\xb6\x86\x72\x4c\xbc\x0f\xcc\xe7\xfe\x39\x16\x02\x9f\xfd\xe7"
- "\xb5\x3c\xfd\x7d\x56\xcc\xfb\x91\xc6\xfb\x2e\xf7\xef\x0a\x8d\x33"
- "\xfb\x1c\x53\x89\x7d\x0c\xc2\xba\xaf\xa0\x8c\x35\x74\x5e\xed\xa3"
- "\xb2\xaf\x20\xaf\x23\xf2\x99\x47\xde\xeb\x44\xb9\xda\x5e\xdf\x4d"
- "\x79\xd6\xe7\x77\xbb\x0c\xdf\x28\xdc\xef\xef\xf5\xeb\x01\x2d\x3a"
- "\x2b\x4e\xb5\x06\x52\x13\xab\x03\x15\xa7\x6c\x78\x77\x0c\xfa\xb0"
- "\xdf\x58\x44\x72\xee\xc7\x31\x99\x9f\x23\x93\x96\xb2\x8f\xe7\x05"
- "\xa6\xc3\x01\xd2\xcf\x39\xef\xb9\x53\x3f\x13\x9f\x78\x96\x7e\xf7"
- "\x8f\xbe\x3d\xc7\xb0\xbe\x5e\xb6\x67\xb6\xb2\xd7\xf6\xcc\x96\xeb"
- "\x65\x6b\x4f\x79\xde\x58\x1e\x34\xed\x5e\xee\x33\xa9\xb3\x0f\x7b"
- "\x66\xf8\xe8\xc0\x1a\xc3\x6f\x05\xf9\xd2\xfa\x8b\xbd\x26\x2a\x3e"
- "\xe8\x50\x30\xf7\xca\xf5\xc4\xbe\xf9\xcf\x5e\xe9\x1b\xc4\xfb\x83"
- "\x1a\x8f\x95\x29\x7f\x38\x2a\x7d\x30\x8a\xcf\xf3\xba\xd9\x55\x6a"
- "\x2e\xb6\x57\xff\x96\x94\xf4\xf5\xbc\xf6\x74\xf4\xf3\x60\x7e\x56"
- "\x34\xdb\xe3\x33\xd6\xe0\x37\x98\x34\x8e\xcb\x2d\x5c\x5b\x45\xc0"
- "\x5b\x1c\x20\xd8\x61\x7e\x2f\xc6\x5e\xd4\x21\x8a\x17\x71\xdc\xfc"
- "\xbd\xd7\x31\xed\x95\x4c\xed\xad\x94\x38\xb9\xef\x16\x2e\xb6\x3f"
- "\xfd\xec\x03\x72\x9e\x90\xef\x1a\xe4\x1b\xdf\x58\xda\x01\x1d\xb8"
- "\xd7\xc7\x31\x0f\xdb\xf4\xba\xfd\xc9\x1f\x74\x7c\x27\x95\x0a\xba"
- "\xdc\x7b\x61\xff\xbf\x90\x73\xe5\x72\xbe\x77\xd6\xe5\x6c\x11\x35"
- "\x36\xe6\x50\x7f\xf3\x19\x9e\xaf\xde\x86\xfa\xa7\x0a\xc6\x7f\xdf"
- "\xf8\x90\x29\x48\x3d\xa6\x01\xe2\xbb\xe5\x4e\xe8\x81\x01\x22\xbc"
- "\x1c\xfd\xd5\x69\x83\xbd\xdb\x44\x2d\xa1\x46\xe9\x23\x02\x19\xb6"
- "\x96\x05\xc4\x79\x6f\x68\x8f\xf4\xef\x55\xe7\xe0\xf7\xfd\xd0\x1b"
- "\xfa\x90\x5a\x8a\xfd\xe4\x59\xf4\x17\x8c\x59\xfb\x46\x30\x5e\xb7"
- "\x15\x97\xd3\xa8\xb3\xfc\x7e\x6f\x9b\x1a\x27\xf7\xe5\xe8\xd7\x34"
- "\x8e\x8d\x19\x89\xd3\xbd\xcf\x2d\x78\xb2\x64\xfe\xc2\x05\xa3\xa6"
- "\xcc\x5d\x32\xb7\xc8\xfe\xa0\x72\xb9\x8b\x1a\xbf\x2c\x7d\xf1\xbf"
- "\xdf\x4b\xe5\x31\x85\x6d\x15\x8e\x03\x7e\xb9\x18\xe0\x46\xfc\x6f"
- "\xd8\x0d\x19\xbc\xbe\xf7\xbf\x19\x03\xdc\xb0\x45\x38\xfe\x77\xdf"
- "\x5a\xf7\x7b\x4d\xbd\x32\xa0\x1d\xec\xe2\x67\x3e\xfb\xa9\xb9\xf7"
- "\x4d\x61\x39\xaa\x93\xfe\x69\xef\x4d\x8c\x8c\x95\xc4\xbe\x78\xbc"
- "\x3e\x82\xf4\xd9\xc6\x39\x5b\xf0\x22\xc6\x8d\xf7\x8a\xfa\xce\xfd"
- "\xbc\xe7\x44\x7f\xab\x77\x16\x99\xb7\xc2\xd8\x13\xd6\xbf\xbb\x26"
- "\xf7\xb0\x35\x77\x4f\x8e\x5a\x87\x79\x6f\x7d\x9d\x36\xc0\xa2\xf6"
- "\x00\xde\xdb\x63\x9c\x29\x53\xb2\x79\x50\x97\xcd\xf7\x9a\x2e\xb7"
- "\x6f\xdf\x27\x1b\xfb\x2d\x7d\x72\xfd\x37\xbd\xec\x7e\xcb\x57\xed"
- "\xf9\xeb\xf6\xf0\x75\xa7\xe9\xf7\x37\xf0\xda\x0c\xee\xbf\x8d\xfb"
- "\x24\x39\xd6\x4a\xff\xfa\xf7\x3f\xd7\xef\x51\xc7\xfb\x7f\xd4\xef"
- "\xbf\x89\xfb\x77\xf5\xfb\xa1\xb8\x7f\x4d\xbf\x87\xcc\xbe\xbf\x4a"
- "\xbf\x4f\xc7\xfd\x7c\xfd\x1e\x3a\xff\xfd\x07\xf4\xfb\x21\xb8\xff"
- "\xa1\x7e\xff\x0d\xdc\x0f\xd7\xef\x21\x83\xef\x27\xeb\xfb\xa7\x16"
- "\xe0\x7e\xe1\xca\xed\xf3\xfd\x1e\xb5\x47\xf7\x3e\xc1\x16\xda\xa6"
- "\xc6\x8c\xde\xb4\x74\xf0\x74\xa1\x41\x5f\xa4\xef\xe7\x7a\x90\x3e"
- "\xd2\x47\xdb\xdb\x22\xd2\x1b\xf4\xfc\x13\x31\xde\xf8\x22\xd2\x6b"
- "\xf5\xf4\xd9\xb0\x41\x2d\x11\xe9\xd5\x7a\x7a\x09\xf4\xa2\x23\x22"
- "\x5d\x8f\xeb\xf0\xfe\x3a\x1f\x6d\xb5\x45\xa4\x3b\xf5\xf4\x6d\x86"
- "\xbf\x82\x9e\x5e\xa4\xa7\x1f\x40\xfa\x91\x88\xf4\x02\x3d\x1d\xfa"
- "\xff\xbd\xd6\x88\x74\xb5\xae\x20\xcf\xa2\x59\xc5\xe1\x52\x96\xad"
- "\xf7\x83\x3e\xda\xb2\x3f\x22\x4f\xae\x2a\xfb\xfb\x34\x1f\xd5\x46"
- "\xb6\x65\xac\x9e\x9e\xe9\xa3\xbf\x6f\x8d\x48\xcf\xea\x4f\x57\x25"
- "\xd4\x50\x41\x7f\x6b\x98\xfc\x9d\x2a\xe9\x27\x29\x6d\xcb\x0f\xe6"
- "\xf2\x39\x35\xeb\x16\x71\xc2\x5e\x26\xc4\x09\xfa\x60\x8a\xf2\x0f"
- "\xdc\x7b\x9c\xfd\xb5\xd4\x79\xbf\x0f\xc6\xc8\x33\x60\xec\x73\xce"
- "\x67\x00\x97\x73\xda\xef\x65\xec\x93\xd1\xce\x72\x15\x93\x53\xf9"
- "\x9f\x76\xc8\xb9\xbc\xbe\xcf\x89\x3c\x9f\xf3\xda\x26\xc3\xe1\xf5"
- "\x3e\x6f\x49\xb7\xf4\x89\xe4\xb9\x14\xa7\xf1\x9c\x56\x9e\x0b\x8b"
- "\x98\x53\x29\xbd\xff\xc1\x5c\x8d\xcf\xed\xbb\xd5\xbc\x9f\x65\x91"
- "\xf3\xb3\x6f\x4e\x64\x5e\x1f\x7d\x20\xe7\xa6\x89\xb6\x6b\xfe\xad"
- "\xcb\xfd\xc1\xc4\xbe\xb3\x4a\xbf\xaf\xd5\xd3\x3f\x45\xfa\xec\x88"
- "\xf4\x8a\xfe\x75\x3b\xf4\x9d\x65\xbb\xa3\xe7\xa2\x08\x84\x2e\x8a"
- "\xe0\x86\xff\x00\xde\xf3\xe4\xb9\x9b\x6f\x85\x2b\xb6\x3b\xf5\x18"
- "\x18\x9f\x87\x96\x08\x3f\x74\x36\x7f\x63\xe2\xea\x69\x01\x3f\x4d"
- "\x2b\xee\x12\xeb\x9f\x60\x3f\xbb\x0b\x32\x1e\x94\xab\x83\xe3\x6f"
- "\xb3\xef\x56\x80\xf7\x87\x52\x5b\x30\xc6\xd5\xcd\xe3\xf7\x9f\xd1"
- "\x54\x87\x9f\x9a\x1d\x61\xaa\x03\xec\x2d\x4f\x18\x7e\x93\x1f\xf4"
- "\xc6\xff\x61\x1c\xb8\x3e\x97\xfc\x56\xcc\x81\x51\x8c\x2b\x7f\x0b"
- "\x4f\xac\x4f\xf2\x88\x8f\xd9\x96\x3d\xe9\xb3\xae\x22\x3b\xc6\xf6"
- "\x6c\xdc\x1f\x95\x3f\x7e\x87\xf4\xfe\xda\xa4\x64\xf9\x80\xee\x8f"
- "\xb9\xbd\x5d\xe9\x8b\x03\x25\xe2\x5f\xf8\xdc\xd1\x01\x3e\xff\xb4"
- "\x1f\x76\x73\x5c\xff\xab\x95\x5b\xc8\xd4\xb3\x16\xb6\xc9\xd9\xfd"
- "\x26\xa5\x9f\x3e\x2c\xd4\x4c\x96\x55\xbc\xae\x28\xbf\x13\xb1\x76"
- "\x5f\xe6\xae\x05\x41\x53\xf3\xf2\x36\x5a\xf1\x0d\xb2\xcd\x0e\xb2"
- "\x2f\xf9\x81\x2f\x06\x95\x70\x2c\xae\x53\x1e\xd8\xa1\xa6\xdf\xe1"
- "\xfd\x47\x0b\xf6\x9b\x42\xd2\x5e\xf9\xb0\x50\xae\x45\x55\xec\x65"
- "\xbf\x33\xab\xb7\x35\xcc\x67\x8f\xa4\x9d\x0c\xfd\x6f\x09\x2f\x75"
- "\x0c\x0e\x2d\x76\x5c\xbd\x65\x11\xa5\x86\x17\x67\xa6\x6f\xbc\x48"
- "\xd9\xc6\xf8\x83\x39\x6c\x96\xe8\xb2\xa5\x54\x61\x4c\xe1\x39\xee"
- "\xa0\x84\x34\xb9\xe7\xc6\xf7\x9a\xe9\x8d\x8c\xba\x25\x97\xff\xe6"
- "\x4d\x18\x73\x5b\x8e\x3d\xcd\xb8\xc4\x6b\xeb\xba\xd7\x31\x5f\xd6"
- "\xcf\xc9\x96\x7d\x41\x43\x30\x6f\x31\x0d\xba\x20\x3c\xa7\x8b\xc8"
- "\xc4\xdf\x09\x29\x9b\x2b\xd7\x91\x92\x9a\x1d\x21\xf2\x3a\xff\x4a"
- "\x65\x8b\xb8\x8f\x3e\x7c\x9f\xed\x34\xf6\x9b\x44\xfe\xb4\xd3\xf4"
- "\xe1\x1f\xad\x41\x8c\x19\x41\xd8\xd2\x4f\xf1\x9c\xf0\xc3\xcf\x02"
- "\x32\xf6\xed\x47\x76\xf6\x1d\xf7\x2c\xba\x87\xd3\xbe\x74\x7d\x21"
- "\xbf\xf9\xeb\x53\xb2\xf5\xe1\x31\x7e\x76\xf1\xb9\xdd\x94\x0f\x32"
- "\x7e\xd3\x1d\x4c\x52\x6b\x15\x1f\x7e\xaa\x8f\x0f\xbb\xd5\xfc\xeb"
- "\xc3\x63\xfd\xf1\xae\x56\xf1\x66\x85\xf8\xff\xd8\xfb\x1e\xb8\x28"
- "\xab\xac\xff\x3b\xc3\xa0\x83\x0e\x30\x1a\xd5\x68\x68\x53\xd9\x36"
- "\xb6\x66\xd4\xda\xfe\xd8\x5e\xdb\xa8\x74\x5f\xb7\xb5\x90\x56\x5d"
- "\x7a\xb3\xc4\x02\x1b\xcb\x3f\x13\x21\xa2\x21\x20\xba\x38\x20\xff"
- "\xdc\xb5\x7d\xb1\x90\xd8\xf7\xd5\xfd\xe1\xae\x6d\xec\xfb\x33\x97"
- "\x36\x4c\x2c\xdd\xb0\x80\x41\xc3\xc2\xc2\x9c\x08\x71\x34\xb4\x11"
- "\x47\x19\x61\xe6\xb9\xbf\x73\xee\x7d\x1e\x66\x06\x18\x18\x46\xfc"
- "\xd3\xbe\xf2\xf9\x3c\x9f\xe1\xb9\xcf\x7d\xee\x73\xef\x39\xdf\x7b"
- "\xce\xb9\xff\xce\x41\xdf\xe8\xc5\x0e\xf2\xa4\x8d\x9a\xd9\x7a\x26"
- "\xfa\x2b\x48\x79\xb8\x8a\x5e\x28\x24\xfc\x8c\xdd\x07\x9b\x85\xec"
- "\xed\x46\xee\xaf\xf2\x83\x8d\x84\xef\x45\x02\x1d\xb9\xbd\x88\xcf"
- "\xe5\x6e\x2f\xe3\x73\x9b\xdb\x2b\xd6\x8e\xc5\xbd\xca\x1f\x14\x9d"
- "\x0b\xda\x5e\x0d\xbf\x8b\xcf\x8d\xd8\x53\xe4\x5d\x1f\xfd\xa9\x42"
- "\x3b\x9e\x84\xe1\x9c\x3a\xee\x3b\x7e\x8b\xef\x37\x86\x6f\xec\x29"
- "\xa6\xd9\xec\xd9\xad\xcd\x06\x12\xc0\xc7\x7b\x1f\x9c\xbc\xb7\x98"
- "\x68\xa1\xae\xc1\x54\xb9\x5d\xcf\xf6\x78\x19\xb7\xa7\x98\xda\x68"
- "\x15\xee\x2d\xe4\x6b\x1f\x7b\xca\x68\xd0\x76\x3d\xcf\xbf\xe7\x67"
- "\x75\x6d\xd0\x06\xe5\xf6\x48\x93\xfd\xb4\x68\x13\xee\x01\xec\x6f"
- "\x8f\xa4\xc6\xed\x33\xf8\xf9\xf7\x3d\xd9\x92\x5c\xe5\x18\xdd\xb3"
- "\x9a\xd3\xed\x4f\x15\x9c\x6e\x7b\xca\x44\x7d\x75\x2b\xfe\x0f\xba"
- "\x3b\x82\xaf\xd5\xef\x49\x92\x6c\x64\xb3\x98\x07\xdf\x81\xff\x63"
- "\xb9\xac\xdd\xb3\x09\xda\x2e\x9e\x61\xd8\xc3\xd6\x0b\xa1\x7d\xa0"
- "\xb3\x3e\xa8\xc7\x76\x79\x93\xad\x8c\x16\xa9\x24\x00\xea\x1c\x8b"
- "\x7b\x4a\xd1\x4e\x31\xd9\x1e\xae\xe2\xb1\x2c\xf7\xde\xc7\xce\x01"
- "\xc3\x77\x80\x3f\x72\x94\x9b\x78\x6e\x19\xcb\x73\xd5\xbf\xea\x46"
- "\xa9\x2e\xf8\x3d\x7c\x06\x6d\xc5\x7d\x75\x48\xab\x19\x98\x07\xf9"
- "\xda\x6a\xc0\x39\x8e\xf3\x40\x33\xdc\x2f\xb4\x37\x0a\x69\xc2\x69"
- "\xb6\xb7\x3b\xe6\x39\xa7\xd7\xde\x51\x9e\xf4\xe0\xf7\x82\x12\x64"
- "\x43\x22\xee\x1b\xd9\x1b\x25\xd2\x4f\x1c\x07\x54\xb1\x38\x9c\xfc"
- "\x59\xd5\x36\xb7\x77\xc7\x75\xe7\xe5\x71\x53\xe5\xb8\x06\x8b\x73"
- "\xf2\x1c\xaf\x55\xf5\x6e\xef\xd5\xcf\x3f\x8b\x36\xf2\xb6\x48\x8c"
- "\x73\x89\x34\xef\xc8\xac\x6a\x71\xd1\x9b\x97\xd3\xc7\x37\xc6\x4b"
- "\xdf\x30\x93\xaa\xad\x52\x3d\xe1\x7f\x51\x07\xef\xd5\xb9\x78\x52"
- "\x35\x43\x7a\xaf\x84\x9d\x25\xda\x63\xc3\x33\x90\x7d\xca\x41\x5c"
- "\xfb\x01\xaa\xd4\x39\x1e\xae\x62\x78\x24\x7b\x4b\x71\x4f\x2c\xd0"
- "\x35\x96\x63\x68\xef\x3a\xae\x0b\xf7\x96\x62\x99\xb8\xae\xc2\xfd"
- "\x9d\xee\x2d\x82\x72\xc5\x58\xdd\x7b\x77\x88\x75\x80\xf1\xdf\x07"
- "\x5b\x7b\x8e\xeb\x1e\x5d\x10\xcf\x0e\xfb\xde\xb3\xdc\xd0\xf3\x5c"
- "\x91\xd2\x75\xae\x73\xaf\xc5\x75\x2e\xb6\x52\xcd\xe9\xfd\xe1\x14"
- "\x18\xa7\xee\xcc\xe7\x7e\x71\x2b\xf2\x81\x67\xe9\xe7\xc9\x58\x8c"
- "\x0f\x93\x66\xa0\xa7\xea\x0c\x30\xb6\x56\xee\x9a\x46\x8d\xbb\x66"
- "\xa4\x9d\x27\x23\x70\xcf\x05\xca\x1b\x9c\xef\xa1\x41\x90\x9e\xbd"
- "\x6b\x86\xeb\xec\xdd\x3e\x33\x8c\x6d\xcb\xf2\x60\x2c\x9b\x7e\x9a"
- "\x8c\xe5\x7b\x28\x3e\x94\xe6\x7d\xde\x10\x8c\xbb\x66\xe2\xb9\xce"
- "\x3a\x18\x11\xd2\x74\xfd\x1b\x42\xf6\xae\x99\x50\xee\xbc\xf4\x25"
- "\x64\x34\xea\x37\xdc\xab\xcb\x31\xb3\x0f\x74\xca\xae\x79\xe8\x73"
- "\x4d\xa0\xb1\x32\xf8\x7e\xa9\xa0\x7c\xdf\x92\x27\x10\xb6\x47\x1c"
- "\x70\x26\x6f\x26\x1f\xee\x85\xef\x97\x62\xdc\x4a\x9c\xf3\x31\xd9"
- "\xed\xe8\x17\xa2\x14\x9e\x85\xc0\x33\x9c\xef\x11\xd0\xff\x1a\xfa"
- "\x73\x87\xf2\x35\x58\x3e\x7c\xab\x94\xd7\x9d\xf9\x45\x29\x6d\x26"
- "\x1f\xdd\x86\x79\x24\xbf\x6e\x42\x7a\x6c\x00\x3e\xc7\x73\xc2\x4e"
- "\x8c\x8b\x00\xd6\x39\x7f\xa7\xb1\xfb\x1d\xd1\x7e\x86\xbe\xbc\xef"
- "\x3d\x9a\xb3\xa7\x1c\xf2\x56\xe0\x9e\x54\x6e\xcb\xee\xdb\x29\xf6"
- "\x75\xb0\x8f\xf7\xbd\x2b\xfe\xaf\xea\xce\x9b\x1e\x4b\xd2\x2e\x12"
- "\x0d\x5b\x57\x5d\x11\x00\xb2\x77\x9f\x0a\x63\x2c\xb8\x95\xf9\x0d"
- "\x96\x97\x8b\xfe\xe2\x12\x88\x0a\xe4\xf2\x48\xa8\x37\xc6\x47\xf9"
- "\x06\xe7\x6a\x45\xda\x98\x81\x4f\xe5\x05\xdc\x27\xe0\xce\x3c\xc0"
- "\x7e\xda\x6a\xb0\x07\x56\x13\xd5\x6a\x27\x09\xc7\x76\x02\xdf\x2c"
- "\xb8\xaf\x1a\xc7\x6e\x48\x1b\x91\x87\x95\xd0\x96\x7d\xab\xf5\xb4"
- "\x65\x75\x1b\xb5\xd4\xea\x1b\x09\xe8\x99\xd1\x75\x86\x7a\xf4\x4d"
- "\xfe\x0d\xb6\x15\xe7\x28\x81\xa6\x60\x4f\xc2\x37\xb2\x77\xed\xc3"
- "\xb3\x32\x6c\x9e\x40\xbe\xb7\x42\x3a\x57\x54\xc2\xce\x1e\xed\x8b"
- "\xe8\x9e\xfb\x4a\xa6\xfb\xc4\xba\x54\x0b\xf8\x7f\x32\x3b\x9f\x38"
- "\x02\xc7\x3f\x38\xa7\x31\x7f\x65\x69\xf7\x19\x0d\x3e\x37\xb0\x6f"
- "\xb1\x9b\x5f\x2e\xf6\x2e\xce\x11\xe0\xbb\xd1\x0e\x7a\xbe\x40\xcc"
- "\x8b\xef\x46\xaf\x9c\x4f\xf1\x5d\x78\xa7\xb4\xfb\x1d\x8f\x33\x3e"
- "\x1f\x71\xbb\x02\x68\x8b\xff\x5b\x81\x96\xe2\x1e\x2a\x2d\x5f\xff"
- "\xde\xd7\x28\xad\x39\x9b\xc9\x87\x85\x88\xa7\xbe\xfd\x89\xef\x27"
- "\x9e\x3e\x92\xf6\xd7\xa3\xff\x26\x48\xd7\x48\xbe\x8c\xe0\xff\x09"
- "\x50\x16\xb7\xb3\xdd\x7c\x94\xe5\xbb\xf9\x3b\x4c\xb7\xd2\x6f\x11"
- "\x27\x20\x57\x02\x4e\x91\xfd\x06\x9a\xfd\xbe\x85\x9f\x93\xda\xbf"
- "\x17\xeb\xd9\x4c\xf6\xe3\xfc\x5a\x28\xf7\xa5\xb0\x7f\x8d\x28\x3f"
- "\x1a\xa3\x9d\x8e\x50\x33\x7c\x13\xcf\xfc\xb8\xdd\xa3\xef\x31\x35"
- "\xe4\xfb\x1b\xf7\x07\xb8\xdf\xd0\x23\x3f\x3e\xcf\xe8\x71\x1f\xd5"
- "\xe3\x5e\x6b\x83\x7e\xe3\x6d\x6d\x3d\x6f\x2c\x9b\x3f\x74\x84\xac"
- "\x21\x86\xf4\x93\x24\x00\xb0\x72\x1c\xeb\x56\x67\x69\xc3\x36\x85"
- "\xd2\xcc\x08\x82\x73\xa0\xcc\xb6\x04\x9d\xde\x3c\x01\xf2\x9c\x24"
- "\x37\xe1\xbe\x6f\x8c\x91\x02\xf9\x4f\x71\x3f\xe6\x1f\x3f\x3d\x6f"
- "\xf9\x08\x22\xbc\x18\x3b\x92\xca\x63\x8a\x70\x6d\xef\xed\x4e\x73"
- "\x20\xae\x73\xa5\x6d\x06\x4c\x3a\xc9\x4d\x80\xb1\x16\x8c\x47\x07"
- "\xef\xb4\xfd\x77\xa7\x25\xd0\xe4\xf8\x92\x18\x5e\x22\xf2\x53\xe4"
- "\xe3\x99\x8a\x54\xa2\x28\x68\x25\xe8\xbb\xdb\xf1\x91\x23\x92\x48"
- "\xbe\x10\x8a\x47\xf3\x73\xdc\xc5\x20\x5f\x5f\xd5\x50\x7b\x47\xe6"
- "\x3f\xcb\x60\xec\xb5\x49\x1a\x63\xe7\xf2\x38\x28\x0a\xf8\xfe\x8d"
- "\x72\xd1\xef\x03\xa7\xed\x3f\x8f\xf3\x73\x56\x61\x2f\xc2\x3b\x4d"
- "\x2e\xfb\xfb\x63\x1e\x6b\xdc\x58\xa9\xe2\xb2\xef\x63\xfd\x47\x60"
- "\xc1\xaf\xe3\x7b\x14\xc2\x3a\x32\x3f\x56\x76\xef\x51\x60\xf3\x56"
- "\x1f\xeb\x69\x76\xa5\x8a\xdb\xe6\x95\xaa\xf9\x4e\xa5\xd8\x07\x31"
- "\x7d\x5b\x24\xbe\x0b\xef\x85\xda\xd8\x1c\xd3\xc7\xd3\x5c\x58\xfb"
- "\x98\x9d\x33\x82\x36\xa9\xcc\xe4\x9f\x19\xd8\x2e\xa4\x09\xe4\x53"
- "\xc0\xfd\xba\x8f\xb6\x7a\xf1\x0b\xab\xdc\x66\x71\xb0\x39\x90\x13"
- "\x15\x80\xa7\xd3\xc0\x83\x1b\xd0\xf7\x93\x09\xbe\x53\x5b\xd2\x49"
- "\x6a\x35\xe7\x48\x1d\xfc\x8f\x7b\x91\xab\x5e\xfa\x96\xb4\x68\xfb"
- "\xd6\x37\xa0\xb3\xf4\x50\xe7\x14\x2c\x0b\x65\x01\xee\xdf\x32\xa5"
- "\x82\xfe\xb1\x42\x59\x2d\x84\x95\x51\x2b\x58\x48\x6d\x0a\x8c\xb3"
- "\x72\x03\xab\xea\x4a\xbe\x24\x75\x9a\xcf\xd8\x77\xd0\x26\xac\x4a"
- "\x3c\xd7\x5f\xd9\x46\x28\xbb\x48\x2c\xbb\x0d\xca\x0e\xf3\x5a\xb6"
- "\xb1\xd5\x3c\xc8\xb2\x7d\xaf\xb7\xb1\xb5\x7e\x30\x65\x83\xbd\xdb"
- "\x86\x71\x6e\xf0\x5c\x57\xda\x18\x12\xec\xbc\x80\x7e\x3f\x6f\xa5"
- "\x7c\x3f\xec\x81\x87\xd8\xd9\x2f\x5c\xab\xcd\x7e\xd7\xc2\xce\x80"
- "\x9d\x21\x6c\x4f\x23\x3f\xf7\x75\x9c\xe0\x7e\x88\x8e\xcc\x03\x3a"
- "\xd7\x58\xa9\x7b\x9d\x0a\x6c\xd5\x03\x33\xf9\xbe\xc7\x77\xc5\xb5"
- "\x87\x03\xe8\x37\xd2\xcb\x38\xef\xef\x61\x7c\xff\xec\x81\xdf\x4a"
- "\xf3\x2f\xe7\x82\xfe\x1e\x26\x96\xa5\xed\x39\xaf\x27\x05\xa4\x4d"
- "\x48\x49\x92\x62\xdb\x26\x89\xc7\x4f\x9f\x4a\x78\x21\x61\x51\x72"
- "\x42\xbc\x76\xf6\xf2\xc4\xa5\xf7\x2c\x5b\xb8\x50\xfb\x44\xc2\xab"
- "\xaf\x2e\x78\x31\x61\x04\x99\x9d\xb8\x60\xe9\xab\x8b\x70\xee\x4d"
- "\xab\x9d\xf6\x93\xf9\xfa\x65\x49\xf7\xfc\x7c\x5a\x44\x8f\xb9\x37"
- "\x3c\xab\xd8\x84\x36\x38\xe8\x8e\x9b\xd2\x9c\x64\x14\xfa\xf1\x09"
- "\x5d\x49\xab\x5e\x83\xf1\x1f\xe0\xef\x14\xea\x29\xd4\x0d\x38\x36"
- "\x40\x1f\x82\x20\xbf\x6b\xde\xfc\x03\xad\x6f\x25\x5f\x39\xc1\xae"
- "\x6c\x7c\x8b\xfb\xc3\x6b\x82\x31\xb9\x95\xc7\x5b\xfc\xea\x08\xfa"
- "\xba\xdb\x00\x69\xd6\xa0\x4a\x55\xc1\xd7\x44\x01\x7a\x0d\xc6\x25"
- "\x9f\x14\x51\xf9\x70\x9a\x7b\x13\xdd\x47\xbf\xd5\x10\xd1\x87\xb8"
- "\xdc\x64\xb6\xe3\x7a\xbe\x32\xda\x91\x4e\x51\x9e\xf2\xbe\xf5\xc9"
- "\x66\x4e\x97\xed\x46\xbe\xaf\xf8\xab\xf7\x70\x0c\xb3\x96\xc5\xc3"
- "\xfc\x04\xfa\xff\x6e\x83\x4b\x4e\x7f\xb6\x4f\xb4\x1d\x71\xbd\x7d"
- "\x45\x33\xdc\x73\x3f\x23\x9f\x34\x78\xee\xd5\xa8\x01\xbd\xfc\x85"
- "\x85\x5f\xf8\x4e\xa3\x92\x5f\xf8\xbf\xfb\xf5\x55\x31\xbf\x7a\xa6"
- "\x5f\xea\x25\x7d\xdf\xdf\xf7\x1b\x52\xfb\xbf\x7c\xf9\x3e\xfe\x5e"
- "\xcd\xf6\x5f\xca\xfb\x0d\xeb\xfa\xbb\x10\x6f\x80\xad\xa6\x0d\x5f"
- "\x13\x25\xe0\x73\x53\xde\xf3\x80\xe9\xa3\x44\x93\xea\xa0\x2d\xe9"
- "\xcf\x92\xf0\xb4\x93\x04\xe3\x11\x5a\x92\x52\x68\x4b\xda\x05\xb4"
- "\x49\x1b\xe6\x00\x7e\x2b\xf2\x9b\x89\x2a\xaf\x99\xa8\xeb\x92\x30"
- "\x56\x31\xfa\xfa\x02\x39\xd3\x06\x17\xdc\xd7\x24\xdb\xc9\xa7\xd6"
- "\xb3\xb8\xbf\xa9\xaa\x2e\x0e\xe4\x4e\x13\x21\x88\x5f\x55\x1c\x09"
- "\x2b\xbe\x89\x56\xd2\xcc\x65\xa0\xcf\x96\x61\x5c\xc2\x86\x77\x84"
- "\xa8\xc0\x77\x56\x55\x07\x6a\x9f\x47\x1d\x5f\xfb\xb4\x88\xcd\xfd"
- "\xfc\x4c\xd1\x67\xec\x3c\x03\xf4\x93\x06\x3e\xaf\xde\xf0\x08\xd7"
- "\xe7\x0d\xa3\xc4\xf9\x26\xf8\xff\x33\x66\x2b\x42\x3b\x2a\x30\x7e"
- "\x2b\x96\xf9\x57\xa1\x82\xc5\x6f\x7d\x67\x55\x54\x60\xea\x02\x22"
- "\xaf\x33\x9f\x22\x18\xdb\x09\x63\x81\x42\xbf\xdb\x01\xfd\xac\x7c"
- "\xcb\x4d\xb4\x10\xea\x97\x5b\x72\x13\x35\x42\x9d\xca\x3a\x32\x6b"
- "\x61\xbc\xfc\x71\xa5\xb8\xee\x52\x05\xfd\x62\x47\x1e\xe4\x89\x5e"
- "\x4e\x6e\xcd\x83\x7c\xf9\x90\x0f\xed\x64\x5e\xbf\x83\x79\x40\x83"
- "\x9d\xf0\xcd\x7a\xed\x73\x78\x6f\x62\x7b\x6f\xf0\xdb\xd0\x0e\x6d"
- "\x33\x31\x69\x40\xb7\x29\xf0\x1b\xd2\x77\x3b\x32\xeb\x40\xfe\x55"
- "\x27\xb1\xb5\x33\x48\xe7\xe5\xd4\xcd\xe6\xfd\x75\xd7\xe2\x02\x57"
- "\x7c\xdd\xc5\x79\xab\x40\xa7\x77\x32\x1f\x98\x9b\x70\xbe\x05\x6d"
- "\x0c\x66\x57\x38\x49\x28\x9f\x1f\x00\xdb\x42\x0f\x72\x00\xec\x09"
- "\xb6\x17\x1a\x6c\x09\xa8\xcb\x26\x8c\xf3\x88\xcf\x61\xdc\xb6\x13"
- "\xf4\x72\x39\xda\x01\xcf\x9d\x7f\x9c\xe0\x1c\x3b\xc6\x68\x7d\x75"
- "\x1e\xb5\xf3\x98\x39\x75\x3b\x25\x5b\x00\x65\x10\xea\x7f\xb0\x85"
- "\x15\x5d\xc0\x43\xc0\x40\x35\xd8\x16\xa3\x4e\x31\xcd\xc1\x68\x5f"
- "\xcd\x74\x7e\x32\xf3\xd9\x1c\xc0\x65\x74\x9d\x13\xda\xa7\x82\x6f"
- "\x00\xcd\x9a\xd8\x5c\x38\x97\x31\x26\x95\xa4\xc7\x71\xcc\x6b\x86"
- "\x32\x28\xc8\x32\xf1\x19\xb4\x7f\xbf\x14\xeb\x0e\xec\x8a\xba\x4a"
- "\x91\x66\x35\x7c\x0d\xd9\xc4\xc6\xfe\x36\xb0\x15\x44\xda\x54\xa3"
- "\x5d\x21\xbe\xdb\xbd\xff\x11\xc7\xe5\x02\xd8\x15\x48\x2f\xa4\x13"
- "\x94\x53\x2d\xca\xb1\x06\x6e\xbf\x1c\x5c\x2e\xae\x5b\x16\x02\xaf"
- "\xd7\xb9\xe8\x6f\x2a\x73\xa7\x3f\xbc\x2f\x8e\x1b\x0f\xde\xe6\xc6"
- "\x3b\x18\x1b\xd5\xdb\x71\x9e\x14\xea\x58\xc9\xe7\x78\x4c\xdf\xa0"
- "\xaf\x34\xf4\xcd\x0c\x34\xae\xcc\x45\x3f\xc0\x20\x9b\xd7\x7e\x4d"
- "\x70\xed\x1b\xec\xa7\xfa\x6f\xb8\x7d\x5a\x9f\x81\x18\x86\x7b\x36"
- "\x0f\xdf\x02\xf5\xc2\xf2\xe0\x3e\x06\x7e\xc1\x8e\xad\xff\xa5\x7b"
- "\x3c\x65\x57\x2c\xe5\xfa\x28\xd7\x79\x04\xd3\x62\x3e\x7e\x36\x2d"
- "\xc6\x39\x30\x96\xbf\x4b\x8f\x75\x6b\xc2\x7e\x29\xb5\x15\xe3\x2a"
- "\x43\x3a\xda\xfe\x4d\xc8\x37\x29\x1d\x7d\x08\x03\x9f\x54\xf0\xad"
- "\x23\x62\x9d\x76\xc2\xbd\x12\xee\x27\xb0\xf9\xfd\x2e\x76\xde\xbc"
- "\x29\x2f\xcd\xf5\x0e\xf6\x1b\xc0\x70\x28\xe4\x39\x08\xbf\x54\xca"
- "\xcb\x63\x2f\xd7\xc7\xfe\xbe\x13\xe7\xc0\xea\x0d\x52\xec\x65\x8c"
- "\xbb\x8c\x32\x23\xef\x39\x0f\xda\x23\x6d\x76\x00\xaf\x18\xee\x3e"
- "\x72\x54\x00\xbd\x0f\x82\xfd\xff\x8f\x58\xde\xae\xfa\x58\xb1\x7e"
- "\x55\xdc\x7f\xca\x81\x42\xe6\xef\x97\x8d\x87\x0e\x46\x75\x8f\x87"
- "\xba\x6d\xcb\xfa\x58\xc4\x24\x94\x55\x83\xfc\x47\x3b\x11\xf2\xe9"
- "\xbb\xb1\xc5\xce\xfb\xd6\x5b\xd0\xbe\x14\xeb\x8f\x78\x39\x20\xd2"
- "\xae\xd0\xbd\xdf\xb9\xf7\x73\x28\x03\xc6\xff\x1f\x77\x63\x40\xea"
- "\xd7\x1c\x07\x87\xc4\xd8\x4f\x27\x2a\xd0\x87\x2f\x94\x5b\x85\x36"
- "\x38\xd7\xab\x87\x76\x7e\xd4\xe4\xc0\x39\xf4\x06\xb8\x87\xfe\x7d"
- "\xa8\xf0\xdc\x88\x3d\x15\xeb\x98\xdc\x38\x04\xf4\xb9\x97\xc5\x2a"
- "\x41\xba\x48\xfd\xb5\xe0\x39\x1c\xfb\x45\xf0\x3e\x9b\x02\x68\xb0"
- "\xb7\x11\x71\xaf\x3f\xf4\xd9\xe3\xb8\x76\x7a\x0a\x30\xa4\xc4\xfe"
- "\x0b\xfc\xdd\x81\xfe\xa6\x81\x8e\xf5\xeb\xfe\xc0\xfa\xad\x0a\xfb"
- "\x6d\x17\xfa\x90\x80\xef\xec\x8b\x8b\x22\x1f\xa5\x54\xb1\x7e\x8c"
- "\xfe\x43\xde\x04\xda\x61\x9c\x63\xf8\x76\xaa\xb4\x47\x19\x31\x82"
- "\xfe\x42\x44\x9c\xec\xc3\xbe\x2c\xd2\x4e\x01\xf9\xb6\x4a\x7d\xcf"
- "\x8d\xff\x2c\x4f\x8f\xfe\x16\xca\xfb\xdb\xa1\x06\x89\xd6\x0e\xd6"
- "\x8f\xeb\x0d\x0e\xe8\xc7\xee\x34\x45\x7a\x22\x5d\x3b\x32\x3f\x83"
- "\xf6\x57\x6b\x24\x9a\xba\xe8\xf9\xd9\x2b\x22\xcf\xeb\xf9\x1c\xd3"
- "\x67\x53\xc4\xf9\xa7\x6e\x1a\x8a\xf8\x43\x3d\x50\xb1\x16\xdb\x0e"
- "\xba\x01\xbf\x8f\x18\x79\x53\x94\x59\xfb\xac\x88\x91\xcf\xa0\xff"
- "\xff\x5a\xe7\x92\x1d\xf5\x49\x6c\xcc\x02\x7c\xe2\xfc\xf9\x6c\x0b"
- "\xf3\xb7\xd1\x87\xec\x30\x93\x83\xf3\x5c\xf2\xe9\xb3\x1d\x12\x1d"
- "\x24\x4c\x4a\xfd\x1e\xca\xb8\xe8\x29\x7f\x3e\x3b\x0a\x65\x8c\x46"
- "\xf9\xe6\xb2\xa1\x3e\x6b\xf3\x94\x6f\x9f\x35\xa0\x7c\x43\x5c\x1b"
- "\x92\x71\x8e\x8d\xeb\x2b\x33\xa9\x4d\xf5\x94\x49\xb5\xaf\xf0\xbd"
- "\x01\xdc\xe6\x42\x6c\x19\x9e\xe3\xf9\x51\x87\x41\x7e\x36\x16\x17"
- "\x75\xde\x3e\xd4\x71\x90\xa6\x17\xe9\xd5\x04\xf9\xf7\xe1\xb9\x49"
- "\xf4\x95\x30\xb2\x89\x8f\xf5\x40\x4e\x57\xa2\xff\x6e\xc8\xa7\xab"
- "\x83\xaf\x75\x65\x71\xd9\x2d\xc9\x0a\xfa\x42\xec\xc8\x15\x16\x12"
- "\x64\xf8\x39\xfd\xb6\x95\x1c\xc6\xf3\xac\x76\xf4\x21\x09\x65\x6b"
- "\x5b\xc9\x17\x07\xe1\xbb\x61\xe2\xaf\x06\x7e\xdf\x83\xdf\x31\xf0"
- "\xfb\x47\xf8\xbd\x05\x7e\xb3\x21\xbf\x20\xe6\x8f\x80\xfb\x57\x20"
- "\xfd\x27\xe2\x2f\xd4\xf1\x30\xda\x9b\xb3\x44\xdb\x11\xd3\xa7\xe3"
- "\x3d\xfc\x3e\x20\xf2\xbc\x86\xf3\xfc\xf0\x3d\x50\x4e\x0a\xd4\xbf"
- "\xd1\xd4\xc4\xca\x32\xb4\x92\xcf\xcf\x63\xd9\x78\x8e\x19\xfe\xdf"
- "\xee\x66\x83\x42\x39\x87\x0f\xc3\xef\x14\xf8\xdd\x0c\xbf\x49\xf0"
- "\xbb\x44\xa4\x41\x3d\xca\x86\xf8\x14\x46\x73\xa3\x96\xdb\xbb\xb3"
- "\xa4\x3e\x8f\x7a\xd8\x25\x3b\xea\xaa\xe3\xe7\x71\x7e\x9b\xc9\x21"
- "\x86\x03\xc8\xfb\x08\xe6\x85\xdf\xc7\xc4\xdf\x28\xf1\x77\xba\xf8"
- "\xfb\xef\xe2\xef\x34\xf1\x77\x86\x99\x1c\x36\x88\x36\x06\xd0\xe5"
- "\xb0\x01\xdb\x0d\xb2\x7b\x02\xff\xc6\xe7\x85\x38\x46\x06\x39\xfe"
- "\x00\x94\x1f\xd0\x91\xf9\xb9\x42\x9a\x1f\xc5\x39\x9f\xae\xcc\x03"
- "\x7f\x79\x93\xad\x6b\x7f\x1e\xee\x92\x6d\xef\x37\xa9\x64\x51\x04"
- "\x6c\xa0\x1b\x8b\xe5\x54\xdc\x2b\xf4\x79\x92\x5c\x5c\x17\x16\x63"
- "\x03\x04\xa0\xbf\x3c\x36\x1e\x0a\xa2\x3a\xec\xab\x6c\xee\x18\x7d"
- "\xbb\x05\xbd\x6f\x86\xab\xcd\x1a\xf4\xbe\x55\x92\xdf\x38\xee\xe1"
- "\x63\xf5\xe1\x9f\xc1\xb7\x8c\xae\xb1\xfa\xe7\x91\x7c\x0d\xed\xe6"
- "\x57\x20\xbd\xd4\x95\x7e\x18\xcf\x03\x3c\x00\xf4\x6c\x84\xf6\x4c"
- "\x69\x26\x9f\xa3\x0f\xff\xfb\x5b\x78\x9b\x23\xa4\x36\x8b\xfc\x30"
- "\x48\xf4\x6d\x21\x87\x53\x40\x16\x26\x22\x86\x9b\xbb\xe5\xec\x61"
- "\x36\xaf\x2b\x62\x04\x78\x79\xf8\x3e\xe4\xa9\x5b\x1f\x74\x97\x41"
- "\x61\x1d\x99\x5f\xe8\x3c\x65\x8a\x49\x87\x32\x05\xb1\x01\xf2\x1b"
- "\x79\xad\xec\xd1\xff\x1a\xb0\xff\xf1\x7e\xf7\x45\xbc\xe7\xbb\x9f"
- "\x35\x38\x78\xbf\x6b\x04\x9c\x01\x3e\x1b\xd8\x3e\x2e\x33\xf9\x62"
- "\x9a\xd8\xa7\x1b\xa1\x4f\x3f\x00\xe9\xf5\xbc\xae\x3c\x5d\xfc\x16"
- "\xe0\xac\x01\xdb\x7d\x8b\x94\x2e\xb6\x17\xcb\x41\x9f\xff\x63\xa4"
- "\x74\xb1\x7c\xc0\x63\x43\x05\xf6\x13\x29\x5d\x6c\x13\xd8\x51\x5f"
- "\x38\x24\x79\x92\xcb\xf1\xb6\x4e\x7a\x0f\xf9\x86\xfe\xb1\xf8\x1c"
- "\xff\x17\x78\xb6\xa2\x14\xf5\xc3\xda\xe7\x88\x6a\x45\x11\x09\xe6"
- "\xfd\xf2\x0b\x8b\xa7\x8c\xfc\xf2\x00\xcd\x0c\x75\x50\xe5\xfb\x8d"
- "\xb5\x8e\x29\x92\xbd\x5a\xdc\x91\xd9\x18\x2f\xc5\xf9\x76\xc5\x19"
- "\x68\xdc\x5c\x5b\xda\x4d\x5f\xa8\x4b\xa3\x51\xaa\x8b\x9b\x7e\x66"
- "\x3c\xc0\xba\x61\x59\x6b\xc1\x5e\xb7\x81\x5c\xe0\x72\xbb\xb1\xc2"
- "\x4c\x46\x4a\xf6\x2e\xd3\x5b\xa1\x32\x62\xc8\x4f\x66\xeb\xa3\xa1"
- "\xa8\x1b\x71\x8f\x8f\x80\xf3\x58\x29\x4e\x52\x67\x80\xb1\x7c\xca"
- "\x71\x32\x7f\xe5\x08\xf4\xbd\x12\x0b\x75\x7d\x1b\xea\xb6\xd5\x89"
- "\x73\xff\x4b\x71\x9c\xfa\xe5\x02\x67\x32\xb5\x8b\x34\x83\x7e\xf4"
- "\xe5\x74\x91\xb6\x28\xbf\xb6\xa2\x4c\x5f\x9b\xc6\x63\x06\xe1\x5c"
- "\x0e\xf6\x8f\xdf\xa3\x1e\xd3\x50\xfb\xbe\x62\xec\x2b\x47\x66\x48"
- "\x36\x29\xd4\xb7\x94\xdb\x84\x87\xb6\x31\xdf\x44\xc6\xf7\x1b\xf9"
- "\x5c\xe0\x91\xc3\xbc\xed\x47\x2a\xf9\x3a\x37\xf3\x91\x89\xf7\x65"
- "\x01\x9a\x9b\xbe\xe0\xfb\xb2\x0e\xfc\x93\xef\x29\x39\x52\xd4\xbd"
- "\xa7\xc4\x65\x2b\x56\x71\xbf\x51\x47\x76\xba\xfa\xc4\x91\x75\xf8"
- "\x1e\xbc\x7f\x0a\xd2\x6b\x5c\xe9\x87\xb6\x72\x7b\xe0\xfd\xa6\x90"
- "\x35\x51\xb8\xb7\xec\x46\xf4\xb5\xcd\xbf\xf7\xe5\x24\xf6\x7d\x36"
- "\xe7\x01\x7d\x53\xec\xbf\x48\x67\xd4\xd9\xac\x0f\x43\xff\xc5\x7e"
- "\xdc\x95\xfd\xbe\x19\x2e\xde\x6f\xb9\x6e\xae\x62\xfd\x96\xf5\xd9"
- "\x2f\xa7\xba\xd5\xc3\xc6\xe6\xbd\x90\x9f\xaf\x69\x54\xf0\x2c\x16"
- "\xf4\x6a\xbd\xf8\x8c\xc7\x94\x38\xc5\x7c\xe4\x59\x71\x6d\x1b\xd7"
- "\x3a\xf1\x8c\x56\x28\xa0\x1b\x7d\x82\x48\x6b\xd5\x4f\xb4\xa5\x53"
- "\x27\xae\x3b\x5d\xa0\xb6\xc2\x6e\x5f\xff\x5f\x6e\x75\xf9\xf7\x39"
- "\xa2\x10\xdb\xd5\x08\xdf\x2a\xe6\x7b\xc1\x1a\xcf\x73\x9b\xaa\xd1"
- "\x86\x38\x35\x01\xf6\xe0\xb7\x88\xc7\x65\xfe\xd2\x2c\x61\x0f\xfa"
- "\x65\x7c\x2b\xf9\xea\x95\x4d\x37\xd1\x22\xe0\x69\x11\xf4\xa5\xc5"
- "\x70\xff\x2c\xfc\xc6\xf3\x5f\x99\x1a\x7f\xc5\x3e\x52\xd4\x91\xf9"
- "\x55\xb8\x14\x8f\x1e\x69\x63\x0b\x3a\x11\x81\x38\xcb\x07\x3a\x20"
- "\xd6\xd8\x3a\x32\xd4\x1b\xf1\x85\x38\x43\x8c\x85\xae\x79\x9c\xe1"
- "\x8c\xf9\x1f\x80\x74\xac\x2f\xe2\x0c\xca\xd2\x4b\x7e\x7e\xcd\xe4"
- "\x2b\x15\x5f\xcf\xf9\x2a\x55\xda\x73\x8b\x6b\x49\x49\xb7\x91\x1b"
- "\xa1\x5c\xed\x3e\x2d\xf3\xa5\x79\xcc\xe4\x98\x4e\x30\x2f\xae\xc3"
- "\x71\x39\x79\xf3\x3e\x78\xa7\xdc\x45\x73\x13\x8b\xcd\xfc\xd1\x3c"
- "\x36\x17\x79\x03\x3c\xab\x71\x1f\x67\x98\xc9\x27\x45\x38\xd6\xc0"
- "\xbd\x7d\x77\x84\x11\x5c\x07\x06\x39\xf6\x95\x55\xb2\x6b\xef\x0d"
- "\xc3\xf5\xfc\x4f\xa6\x41\xfd\x70\x0c\x5d\x0f\xff\x47\xc0\x58\xb2"
- "\xda\xcb\x9c\xf1\x14\x9c\xeb\x11\xe3\xf3\x34\xe1\x3c\x16\xc6\x33"
- "\x68\x25\xc7\x5e\xa9\x45\x5f\x20\xcb\x7a\xfb\x79\x4e\x4b\xa1\xe7"
- "\xd1\xd7\xb3\x36\x91\xdc\xd0\x4c\x8e\xcd\xc6\x79\xa3\xf4\xb3\x38"
- "\x47\xd3\x94\xe2\x39\x47\xd3\x54\x2d\x5e\x30\xd2\x3e\x1a\xe5\x76"
- "\xd5\x8b\xbf\x33\x07\xb8\x2c\x62\x5e\x68\xe9\xd7\xa2\x4e\xd1\x40"
- "\x3f\x69\xea\x9e\xff\x45\x5c\x62\xdf\xc6\x7d\x1c\x38\xe7\x24\x73"
- "\x10\xf4\x3d\x02\x7c\x82\x7a\xaf\xbd\xfb\xa9\xaa\x55\x88\xa3\xa3"
- "\xec\x1c\x14\xfa\x20\x1e\xdc\x5e\xa2\xa3\x8c\x9f\xdc\x1f\x68\x53"
- "\x3d\x7c\x3b\xac\xe0\x0c\x51\x18\x12\xc9\x38\x9c\xff\x0e\x75\xd2"
- "\x2a\x1c\xe3\x8a\x3e\x05\xeb\x4f\x91\xa3\x07\x93\x56\x13\x39\x3c"
- "\xbf\x15\xfe\xaf\x92\xec\x24\x78\x47\x1d\x60\x27\x61\x68\x1f\x3d"
- "\xb6\x9a\xdc\xda\x91\x79\xb4\x58\xe2\x15\xda\x10\x38\x0f\x27\xce"
- "\x25\x40\x5d\x9b\xd8\x1e\x67\xf4\x53\x6f\x66\x74\x63\x72\x18\xcb"
- "\x80\x31\xec\x51\x63\x80\x8d\xa8\xb9\xee\x39\x0a\xf8\x3f\x20\xda"
- "\x8c\x47\xb7\x02\xf6\x1b\xdc\xea\xf9\x0b\xb7\xff\xb3\xf0\xfd\x50"
- "\x1b\xda\x67\xde\xe8\xf3\xf5\x3d\x12\x7d\x70\xbf\x6a\x28\x8c\x13"
- "\x18\xbf\x1d\xb4\x0d\xea\x56\x63\x58\x45\x94\xa7\xc8\xb1\x71\x6f"
- "\xfd\x81\x9d\xb3\xab\xe6\xf3\xf3\xc7\x46\x49\xe3\x70\x5e\xef\xaf"
- "\x8f\x86\xae\x09\x20\x38\xaf\x8e\xfe\xce\xd8\x5e\xbf\xef\x35\x6c"
- "\x2e\xdd\xe4\x98\x4a\xaa\xd2\x1e\xc4\x3c\x92\x5d\xd5\x74\x2e\x5d"
- "\x43\x3e\xd2\x4c\x85\x7e\xfc\x75\x19\xf4\x15\xdb\xe0\xf7\x54\x7e"
- "\x5d\x26\xd2\xb7\x86\xef\x45\xf8\x7a\x25\xea\x12\x1c\xfb\x83\x1e"
- "\xd9\x87\x3a\xba\x23\xf3\x98\x42\xea\x37\xa0\x37\xf6\xc1\x3b\xa2"
- "\x3f\x6c\x5c\xff\xfd\x3a\x09\x7d\x40\xb0\x71\x03\xcf\xaf\xe2\x73"
- "\xfe\xc7\x22\xbb\x6d\x69\xc8\x87\xef\xf1\x3d\x6a\x5f\xcf\x9c\xef"
- "\x94\x01\x4d\xbf\x9e\x89\x6d\x13\xb1\x08\xfa\xea\x98\xde\xd5\x6f"
- "\x8f\x32\xd9\xfc\x51\x9b\x7b\xbf\x3c\x66\x74\x8d\x37\x9b\xa6\xde"
- "\xb3\x89\x68\xfb\xea\x87\x86\x10\xd4\x55\xc7\x2e\x16\x14\xd0\xd2"
- "\x42\xb9\xf0\xe8\xda\x7c\xa2\x92\xe5\x02\xd9\xb0\x9f\x25\xc7\xdd"
- "\xd8\x4a\xcc\x41\xa1\xaa\x9b\x67\x3d\x96\x34\x9c\xa6\x69\x88\x3c"
- "\xaf\x7d\xb8\xf2\x36\xfb\xcd\xa5\x34\xe0\xee\xa7\x9e\x48\xb2\x13"
- "\xed\x4b\x85\xe4\xc4\x62\x12\xf0\x98\x13\xbe\xad\x22\x06\x33\x69"
- "\x0e\xc3\x33\xa3\x1f\xa9\xd0\xfe\x68\x0e\xc3\x32\x53\x8b\x89\x32"
- "\xb5\x85\x5a\x72\x17\x06\x2a\x41\x1f\xa8\xdf\x04\x8c\x8d\x54\xdd"
- "\x5c\xda\x05\x65\xec\x8d\x63\xef\x95\x7b\xaf\x9b\xf9\xf5\xbe\xeb"
- "\x66\xb8\x09\xea\xb6\x6d\x70\x75\xfb\x76\xa7\xab\x6e\xdf\xee\xbc"
- "\xf4\xba\x7d\x73\x9f\x5b\xdd\xd4\xae\xba\xe9\xa1\x6e\xdf\x3c\x32"
- "\xb8\xba\x1d\x9f\xed\xaa\xdb\xf1\xd9\x3e\xd6\x6d\x47\x3f\x75\xab"
- "\xed\xbb\x6e\x29\x37\x43\xdd\x8e\x0e\xae\x6e\xad\x36\x57\xdd\x5a"
- "\x6d\x97\x52\x37\x1c\xcb\xa7\x85\xd3\xe3\xcc\x9f\x7c\x22\xf7\xd7"
- "\xda\x4a\xbe\x7d\x28\xad\x98\xdd\x8f\x6e\x25\xcd\x17\xc5\xfe\x6d"
- "\x4d\xb7\xd1\x6f\xb9\x9d\xd3\x9c\x30\xd9\x80\xfb\x5d\x9b\xe7\x01"
- "\x96\xc3\x38\xa6\xbf\x65\xfb\x1b\xd2\xad\x54\xdc\x6f\xda\xfc\xdb"
- "\x12\xb6\x1f\xa5\x2a\x4e\xbc\xaf\x3e\x37\xa2\x32\x0c\xf7\x82\x08"
- "\xd0\x9f\xe9\x88\x4a\x2d\xc6\xef\x7c\x27\xd1\x2a\xa7\x99\xe8\x3b"
- "\x0c\xfd\xfd\x29\x08\xcd\xa9\x8c\x78\x27\xd1\xce\x62\x87\xaf\x65"
- "\xe7\x7d\x9b\xab\xa4\x33\x6e\xd2\x37\xac\x41\x55\x71\x90\xde\x28"
- "\xc5\x81\xa5\x72\xb4\x67\x2a\x35\x58\x3e\xa4\x5b\xa5\xd8\xac\x80"
- "\xf7\x75\xa2\x6c\xb0\x85\xda\xfb\x93\x7b\xdf\xde\x29\xc9\xbd\xc7"
- "\x92\x48\x28\xc6\xa5\x2c\x48\x1b\x8e\x6b\x8e\x50\x56\xf3\x4e\xa4"
- "\x7b\xb4\x6d\x38\x0d\x4d\x25\x01\x78\xb6\x0f\xf7\xe8\x99\x34\x56"
- "\x32\x21\x95\x04\x46\xa7\x40\x99\x76\x12\x17\x9a\x02\xe5\x01\xad"
- "\xf9\xd8\xe0\x5b\x36\xc7\xb7\x09\xca\xc3\xf5\xef\x80\x24\xa2\x7a"
- "\x4c\x93\x4e\xd7\x6e\x26\x0a\x3c\x07\x88\xe7\xf9\xf8\x59\xbe\x61"
- "\xca\x8e\xcc\x6f\x4b\xa5\xf6\xf9\xc0\x9f\x10\xce\x9f\x96\xa3\x2e"
- "\xfe\xb4\x6c\xee\xcd\x9f\x96\x40\xce\x9f\x6f\x1d\x2e\xfe\x1c\x8f"
- "\xf2\xe4\x4f\xcb\x9d\x9e\xfc\x69\xd1\xfb\xc7\x9f\x96\x38\x17\x7f"
- "\xf8\x37\x38\x7f\x5a\x52\xfa\xe6\x4f\x4b\xa1\x8b\x3f\x2d\x13\x7c"
- "\xe3\x4f\xcb\x7e\xef\xfc\x69\x99\xdd\x0f\x7f\x86\xf5\xcd\x9f\xe3"
- "\x37\xfa\xce\x9f\xe3\x51\x83\xe0\x4f\x30\xe7\x4f\xeb\x6a\x17\x7f"
- "\x5a\x7f\xd6\x9b\x3f\xc7\xb7\x71\xfe\x1c\x2f\x76\xf1\xa7\xd5\xec"
- "\xc9\x9f\xe3\xfb\x3d\xf9\xd3\xaa\xf4\x8f\x3f\xad\xc4\xc5\x1f\xfe"
- "\x0d\xce\x9f\x56\x4d\xdf\xfc\x69\x8d\x70\xf1\xe7\xf8\x3e\xdf\xf8"
- "\xd3\x9a\xe0\x9d\x3f\xc7\x6d\x83\xe7\x4f\xeb\xbb\x3d\xf8\xa3\xf6"
- "\xce\x9f\x56\xf3\x20\xf8\x13\xca\xf9\x63\x19\xe7\xe2\xcf\x89\x23"
- "\xbd\xf9\x73\x62\x3a\xe7\xcf\x89\xa9\x2e\xfe\x58\x32\x3c\xf9\x73"
- "\x22\xc1\x93\x3f\x27\xca\xfc\xe3\xcf\x89\x52\x17\x7f\xf8\x37\x38"
- "\x7f\x4e\x54\xf4\xcd\x9f\x13\xf5\x2e\xfe\x9c\x88\xf7\x8d\x3f\x96"
- "\x40\xef\xfc\x39\xb1\xa9\x1f\xfe\x0c\xef\x9b\x3f\x96\x39\xbe\xf3"
- "\xc7\x92\xd1\x1f\x7f\x06\x67\xeb\x59\x36\xe1\x77\x87\xa0\x9c\x26"
- "\x6f\xe5\x20\xed\x70\xff\xa1\x90\x69\x69\x2a\x11\x86\x29\xf9\x19"
- "\x0d\xcb\x26\xed\x2a\xf2\x70\x33\x39\x39\xb1\x44\x08\x54\xd2\xcc"
- "\x32\x18\x27\xfd\xb9\x88\xae\x19\xa6\x10\xd6\x0c\x57\xe0\xd9\x6c"
- "\xef\xf1\xdb\x4f\x66\x07\x8c\x21\xe3\xf1\x1c\xdd\x5a\xb0\x97\xf1"
- "\xff\x8e\xcc\x93\x9b\xc0\x16\x8c\xea\xef\xfc\x16\xee\x75\xfa\x68"
- "\x1d\x8e\x6f\x4f\x56\x75\xfb\xc5\xc8\xa4\x29\xe8\x5f\xcc\x70\x3b"
- "\x9e\xb3\x38\x69\xd9\xc4\xfc\x55\xed\xda\x1a\x75\x3b\x3d\x86\x63"
- "\x8f\x56\x72\xea\x38\xcd\xde\xb5\x15\xf1\x00\xb6\xfa\x0d\xa7\xc8"
- "\xa9\x88\xee\xfd\x79\x34\xf6\x0d\x71\x8e\x70\x16\xcf\xdb\x36\x07"
- "\xf2\xce\xc2\x38\xa4\xaf\xa6\x61\x7c\xcd\xb6\x87\xc0\xf6\xfd\x11"
- "\x7e\x03\x7d\x27\xbd\x05\xbf\xb8\x4f\x86\xef\xcd\x3c\x35\x8b\xd9"
- "\xcb\x6b\x6f\x79\x83\xef\x85\x6b\xbb\x53\xc2\x1d\x7c\x67\x04\xdc"
- "\x07\x8b\xf6\x3c\xe6\x1f\x79\x8a\x7c\x77\xde\xed\xb9\x0a\xee\x8f"
- "\x40\xd9\xa3\xc4\xe7\xc1\x70\xbf\x1b\xed\x6c\xe6\xe7\x23\x3f\x43"
- "\xdc\x43\xfc\x5d\x29\xa4\xa9\xc5\x3c\xa3\x20\xcf\x6f\xd1\x76\x17"
- "\xcb\x18\x0d\xf7\x8b\x70\x0c\x2c\x3e\x0f\x83\xfb\x27\x70\xed\x40"
- "\x7c\x7e\x23\xdc\xdf\x07\xf7\x77\xf1\x33\x2f\x5d\x62\x1f\x3d\xe5"
- "\xf0\xef\xcc\xf8\x29\x16\x53\x13\x79\xc0\xc7\x02\xdf\xb9\xed\xff"
- "\x39\xd5\xd2\xe3\x59\x9c\xdb\xb3\x06\xe9\x19\xdf\xa3\xf6\x5d\xaa"
- "\xdb\xb3\x7d\x3d\x9e\x15\xb9\x3d\xdb\xd9\xa3\xcc\x9d\x6e\xcf\xb6"
- "\xf6\x78\xaf\xde\xed\x59\x61\x8f\x67\x6d\x6e\xcf\x32\xc4\x67\x01"
- "\x1d\x99\x6d\x0a\xd7\x1a\xde\x29\x83\x98\x2e\x87\xf4\x70\xb7\xf4"
- "\x38\x31\x1d\xbe\xdf\x36\xc5\x4c\xde\xb4\x8a\xe9\x8c\xf7\xbc\xfc"
- "\xb6\x99\x6e\xe5\x47\xf0\x39\x8e\xb6\xb8\xee\xbd\x73\x23\x2a\x0d"
- "\x42\x57\xec\x1b\xf0\x4c\x83\xb8\x72\xc7\xf6\xd2\x64\xed\xf3\xcb"
- "\x5f\xd4\x26\x26\x24\xe1\xf6\x95\x25\x8b\x92\xb4\x4b\x96\xc5\x27"
- "\x78\xf8\x59\x0f\x43\x9f\x83\x18\x53\x0d\x7d\xb7\xb0\xf8\x05\x7f"
- "\xa0\x96\xee\x98\x1f\x20\x57\xe1\x5b\x35\x66\x32\x9d\x7d\x6b\x13"
- "\xf7\x47\x5e\x8d\xbe\x5f\xb8\x9f\x17\xf2\x78\x33\x69\x3b\x28\xfa"
- "\x79\xa9\x82\xbc\x76\xef\x7e\x5e\xce\x34\x30\xff\x86\x90\x8f\xfb"
- "\x79\x39\xd3\x08\xfd\xfc\x31\x3a\x82\xc7\xf0\xe0\xb1\xcd\x4e\x4b"
- "\xb6\x89\x75\xfe\x45\xe6\x23\x30\x83\xcf\x65\xf4\xf4\xd7\xba\x6b"
- "\x1d\xbe\x27\xae\x97\xae\x73\x7b\x3f\x9e\x3f\x97\xf4\x83\xf8\x4d"
- "\xe3\x2e\x5c\x1f\x18\xd1\x0c\xf7\x6c\xfe\x9e\x3d\x3b\xcd\xe7\xf2"
- "\xb2\x77\xe5\x62\x9b\xb0\xdd\x9e\x6d\x93\xff\xa6\x99\x9c\x7e\xdb"
- "\xd5\xb6\xd3\x0d\x6e\xbe\xe0\xc4\x36\x9c\x76\xf0\x3e\xda\xab\xad"
- "\x6c\x7f\x22\x55\xee\xca\xc5\x6f\xa3\x3c\xe3\x67\x19\xe0\x3e\x7b"
- "\x97\x51\xaa\x8f\x5b\xfd\x72\x71\x5c\x0f\xf5\x3b\xc2\x69\x02\xf2"
- "\x03\x78\x2a\xb6\x61\x33\xcd\x6c\x4b\xe5\xb1\x0c\x40\x9f\x60\x4c"
- "\x16\xa6\xab\xce\xc4\x4b\x73\x99\xa8\xa3\xf8\x1c\xe6\x19\x97\xfd"
- "\x87\x3e\xba\xb2\x25\xfd\x75\xc6\xcd\xfe\xe3\xdf\x84\xb4\xad\xee"
- "\x18\x72\xfb\xde\x41\xfc\x1e\xe4\x9b\xc9\xcf\x03\xec\x32\x62\x7f"
- "\x87\x7b\x35\xee\xc5\xc4\x77\xb1\x8e\xde\xe2\xf0\x79\xf3\xa1\xe8"
- "\xa2\xe3\xf7\xe1\x12\x1d\x37\xb1\x33\xf2\xdf\x4f\x92\xe6\xeb\xc4"
- "\x18\x18\x55\x9b\xba\xe3\x52\x7f\x1f\xcb\x62\xbb\xe5\x06\x14\xdd"
- "\xab\x22\x71\x9c\xb6\xdf\x2f\x40\x19\x8f\x7d\x86\xcb\xfa\xef\xab"
- "\x44\x9e\x8b\xf1\x54\xbf\xcf\xc6\x74\xd7\xfe\xfb\xef\xcd\x52\x3e"
- "\x49\x2e\xf3\xf5\xaa\xef\xdf\x63\xf9\x78\xac\xe0\x28\xce\xf3\xbb"
- "\xd4\xcd\xe4\xfb\x1a\x31\xff\x49\x86\x45\xe6\xbf\xe7\x7b\x0b\xcd"
- "\xae\x8a\x82\xba\xc2\xf8\xa7\x4d\x8c\x59\xc1\xbf\x0b\xbf\x35\x58"
- "\x17\xa4\x11\x9e\x25\xa7\x79\x01\x45\xc0\x9f\xc8\xbe\xcf\x92\x3e"
- "\x23\x9e\xd7\x39\xcb\x6d\x08\x39\xb5\xe3\x1c\x2b\x6f\xeb\xd9\x04"
- "\xb7\xbd\xcf\x2a\x29\x0f\x97\xdd\xec\x19\xdb\x53\x6e\x48\xc6\xf9"
- "\x20\xf1\x59\x32\x9e\xaf\xed\xfe\x7f\x98\xdb\xff\x81\xf8\x3f\xdb"
- "\xd7\xbc\x8a\xe9\x56\x85\xeb\x1c\xff\xd9\x78\xb8\x57\xf5\xb8\x0f"
- "\xf3\xb8\x5f\xc9\xf7\x3d\x83\x6d\xd6\xc2\xf6\x90\x8b\xe9\x62\xd9"
- "\x41\xac\x3e\xc9\x34\x12\xb0\x51\x84\x67\xba\xc5\x7e\x58\x84\x67"
- "\xb6\x43\x1d\xcf\xb2\xf3\xda\xf0\x7c\x8a\xf8\x1b\x21\xfe\x4e\xe2"
- "\x71\x5a\xcf\x86\xbb\x62\xad\xe3\x1c\xcd\xd9\x49\xde\x62\xbf\xe3"
- "\x79\x70\xf1\x37\x42\xfc\x9d\x24\xc6\xaa\x9d\x07\xef\x75\x9f\xff"
- "\xee\x7b\x0f\xf2\xd9\x75\xd2\x59\x6e\xa7\x71\xd7\x54\xc1\xb8\x5b"
- "\x87\x71\x41\xd1\x4f\x58\x7a\x1b\xfa\x8a\xb1\x11\x13\xe9\x24\xa6"
- "\xa4\x8e\x0c\x8c\x0d\x5a\xc7\x63\x82\xe2\x19\x58\x19\xce\x9b\xa3"
- "\xed\x58\x67\x38\xcd\xe2\x82\xae\x68\x93\xe2\x9e\x9c\xb5\x38\xb3"
- "\x77\x4d\x15\xfb\xcb\x66\xbe\x47\xbf\x9d\xcd\x17\xb3\xb8\xd6\x6d"
- "\x6c\xdd\x4b\xd9\x4a\xda\x53\xa4\x3c\x9c\x76\xed\x6c\xee\xeb\xad"
- "\x4c\x29\xf6\x63\xbb\x56\x8a\x35\x6d\x26\xed\xa9\xe7\x83\x3e\x2c"
- "\x83\xb4\x29\x9e\x7b\xa6\xdb\x9f\xc0\x32\xb1\xee\x66\x72\xd6\x8a"
- "\x65\x43\x9e\xd8\xee\x3e\x0b\xe9\x2b\x1c\x64\x2c\xd4\xab\x55\x2a"
- "\x1f\x9e\x43\xff\xb7\x32\x5a\x62\x99\xe7\xb3\x2d\x8d\x90\x96\x6b"
- "\x96\x67\xef\xe0\x7b\xae\xdb\x41\xff\xfd\xdf\x69\xfd\xd9\x40\xd0"
- "\x17\x0c\xd0\x97\x52\x04\x63\x95\x9e\xf9\xf2\x0e\xaa\x32\xf0\x39"
- "\xc6\xf6\xe3\xb8\x3b\xbc\xe0\x02\x51\xe0\x1e\x08\x8e\xd9\x73\xdc"
- "\x07\x32\xa4\x81\xac\x2e\x83\x3e\xc2\xea\x31\x38\xbd\xdf\x6e\x63"
- "\x65\x8c\xe5\xbe\xcd\xf0\xec\x52\x47\xe6\xb9\xa8\xee\xf8\x09\xdd"
- "\xfd\xf8\xdc\x22\x5c\x7b\x80\xfe\xc1\xea\xd8\xb3\x0e\x58\x5f\x28"
- "\xab\xc5\xab\x8d\xa9\xac\xd2\xb3\xf5\x99\x9c\xca\x28\xbe\x47\xf5"
- "\xdc\xdf\x02\x34\xb7\x58\xe0\x5b\x3b\xba\xe3\x46\x40\x9e\x7c\xdc"
- "\x7b\x0f\xe5\x77\xb7\x33\x91\x7d\xa3\x81\xf7\xf5\x73\x16\x21\xbb"
- "\x4a\x5f\xd0\x49\x14\x62\xba\xa5\xce\x61\xc7\xd8\x03\x7d\xfa\xd9"
- "\x62\xb1\xf3\x70\x4f\x78\x4e\x95\x1e\xcf\x0d\xdd\x6b\x97\xea\x6c"
- "\xb3\xe0\x79\x15\xac\x33\xa7\xad\xed\xa8\x44\xc7\xbc\x76\x28\x3b"
- "\xed\x4b\xd2\x42\x6c\x09\xb8\x6f\x8e\xd1\x64\x95\xb4\x97\xd3\xc6"
- "\xc6\x7c\xec\xfb\x3c\x0f\x1b\xfb\xb3\x38\x46\x50\x7e\x09\x8b\xc5"
- "\x06\x6d\x00\x5e\x54\xa5\xe1\x99\x7f\x1b\x8b\x0b\xb0\x96\xf9\xea"
- "\x80\x76\xb3\x7d\xb2\xe7\xc5\x75\x12\xdb\x56\x49\x57\x98\xc5\xb4"
- "\x02\xfc\x76\x72\x27\x39\x43\x6c\xbf\xc5\x18\xeb\x40\x8f\x14\xf4"
- "\x4f\x57\x67\x83\x7e\x92\xd2\x89\x58\x48\xc1\xd8\x9d\x66\x62\x5b"
- "\xc7\xf5\x1b\xd2\xdc\xa6\xc7\xef\x23\x6d\x61\x6c\x66\x05\x9a\x5e"
- "\xe8\xc8\x3c\xdf\x1d\xff\x31\xff\x26\x1c\xef\xd8\xfa\xf5\xaf\xeb"
- "\x84\x3a\xd7\x15\x81\xee\x1c\xfb\x25\xd6\xef\x80\x30\xa2\x4a\x8f"
- "\x7b\xb2\xe1\xff\x25\xa2\x6c\x67\xbc\xe3\x38\x38\xff\xc7\x00\x4d"
- "\xf8\x6d\x75\x1c\x0b\xcc\x87\x1a\xa4\xcd\x10\xe9\xc7\xe2\x49\x14"
- "\x26\x73\x3a\x88\xf9\x1d\x7c\xbe\x38\xfc\x2e\xa8\x97\x5b\xfc\xbb"
- "\xf3\x4c\x77\xa3\xef\xfb\x12\x36\x26\x3c\xbf\xd3\xad\xce\x36\x76"
- "\xfe\xb5\x1d\xe7\xfa\xce\xcf\xc3\x6f\xe5\xa1\xff\x30\xc4\xc5\x29"
- "\x77\xfc\x9f\x7f\x08\xeb\x89\x7b\x7e\x9d\x41\x95\x51\xa0\x6f\xa7"
- "\x21\x9d\xe1\x9d\x24\xe8\x0b\xfa\x7e\x74\x21\x8b\xbb\xd7\x91\x79"
- "\x41\x27\xe9\x42\x18\x5f\x80\x5e\xe8\xb8\x8d\x8d\x3b\xc1\x9e\x36"
- "\x09\x68\xcf\x74\x68\x11\x37\xd0\xd7\x33\x44\x19\x9b\x01\xef\xcc"
- "\x93\xd6\xbc\x9c\x78\x6e\xe2\x0c\x5b\xef\xb5\x49\xf1\xe4\xb8\xbf"
- "\xbe\x0b\x19\xae\x73\x16\x17\x72\x7b\x9d\xb3\xc0\xb3\x3f\x7f\x60"
- "\x71\xc7\x76\xa0\x4e\xa9\x6d\x6b\x41\x1d\xc1\xde\xc7\xb3\x17\x69"
- "\x30\x26\xe7\xe7\x87\x5a\x70\x7e\x9e\xc5\x3c\xc1\xba\xf0\xd8\x13"
- "\xcd\xec\x7f\xc0\xad\x02\x7f\x39\x96\x2e\x58\xbb\x63\xa6\x03\xbf"
- "\x71\xad\xed\x23\xc5\x2f\x48\xd5\xed\xa8\xaf\x3b\x6e\xc3\xf8\xdf"
- "\x1d\x99\x1d\x61\x52\xec\x6f\x16\xeb\x9b\xb7\x27\xc9\xab\x5f\xc6"
- "\xc9\x24\x02\xfd\x05\xe0\xf9\x3a\x46\x03\x55\x40\x24\xfa\x7a\x46"
- "\xbf\x95\x55\xab\x30\x26\x4b\xc7\xc1\xdf\xdf\xc4\xce\x28\xdb\xaa"
- "\x26\xb7\xe3\x3e\xac\xb6\xd6\x54\xe6\x8f\x49\x19\x9d\xe2\xa0\xf8"
- "\x1e\xb3\x27\x82\x03\x22\xf1\x19\x8b\x75\x80\x65\xfa\xed\xb7\xb8"
- "\xa3\x58\xb4\x4d\xdb\x60\xec\x73\x33\xf0\x8a\xd9\xee\xf0\xff\x4d"
- "\xa7\x88\xfd\x22\x8f\x41\xcb\x7d\xef\x8b\xfb\xb1\x87\x71\x1f\x1b"
- "\x40\x33\xe6\xf3\xc0\xbe\x44\x7b\x37\xc6\x6b\xb6\xbf\xc2\xfc\x60"
- "\x1b\x77\x15\x8a\x34\x28\x2c\xe0\xf5\x0a\x9d\x9f\x22\x67\x75\xc4"
- "\xfa\x0d\xae\x6e\xf6\x48\x71\x1c\x31\xac\x23\xd3\x9e\x2a\xf9\xe6"
- "\xe0\xf6\x14\xf7\x8f\xcd\x79\x61\x3f\x29\xda\xcf\x9b\xc4\x6f\x6f"
- "\x1a\x82\x6f\xef\x14\xcb\xd4\x73\x1f\xe1\x1d\x71\x50\xae\xbe\x23"
- "\xf3\xa2\x42\x1a\xcf\x88\x67\x88\x26\xf1\x71\xd6\xc5\x70\xd7\x78"
- "\x86\xd3\xd0\xe3\xdc\xdd\xb2\x65\x49\xda\xf8\x45\xaf\x1a\x16\x24"
- "\xbd\xa0\xd7\x26\x24\x26\x2e\x4b\xd4\xa2\x93\x26\xf7\xfe\xc3\xe3"
- "\x18\x5d\x8c\x10\xe3\x13\x96\xb9\xe2\x13\x5e\x4c\x71\x8f\xe9\x69"
- "\x26\x17\x53\x87\x66\xee\xe2\x62\x91\xb7\x72\x0a\xe5\x42\x39\x5c"
- "\x15\x70\x55\xc1\x55\x8d\x73\x19\xf3\xed\x24\x0a\x74\x3d\xdb\x67"
- "\xe2\xf2\x39\x71\x71\x16\xee\x31\x6a\x26\x17\xcf\x97\x08\x0a\x1c"
- "\x07\x61\xdc\x70\xe6\x2b\xf4\x2d\x78\x1f\xae\x2a\xb8\xaa\xe1\x62"
- "\xef\x09\x1f\xb2\xf3\xf2\xe5\xee\xcf\xf8\xfe\x91\x35\x3b\x30\x0f"
- "\x5d\x83\x4b\xf6\x90\xef\x77\x3c\x5f\x8f\x3a\xc8\x69\x66\xbb\x94"
- "\x8f\xad\xed\x87\xac\x21\xda\x3e\xf2\x05\xd0\xcc\x93\x65\x62\x3e"
- "\xb6\xd7\x46\x6a\x0f\xc6\x1a\x80\xfc\x52\x3e\x05\xcd\xec\x98\x22"
- "\xe6\x63\xba\x42\xc8\x94\xf7\xf5\xdd\x40\x9a\x59\x11\x2e\xe6\x53"
- "\xbb\x97\xe7\x96\x67\x98\x90\x79\x6c\x2b\xe6\x11\xd6\x28\xc2\xb8"
- "\xed\x74\xb1\x08\xf2\xf7\xe9\xa3\x75\x70\x7c\xea\x8a\xea\xc9\x27"
- "\xc3\x0b\x8b\x12\x1e\x5c\xb4\x34\x19\x23\x4d\x25\x2d\x5b\x9e\x84"
- "\xbf\x4b\x17\xbc\xcc\x7e\x96\xcd\x5f\xf8\x02\xff\x27\x69\x71\x04"
- "\xfe\xb3\x18\xf0\x86\xbf\xf1\xcb\x0d\xf8\xf3\xc2\x32\xbc\x4d\xd1"
- "\x4f\x5a\xfe\x02\xfe\xf4\x3c\x07\xaa\xeb\xc8\xec\xb2\x00\x36\x1a"
- "\xb9\x9c\xed\x82\x31\xd2\xc9\x70\x66\xc7\xae\x31\x93\xfd\x3a\x07"
- "\x91\xe6\xb5\x3c\x7d\x8e\x38\x64\xe8\x73\x24\x74\x8d\xe1\x85\x50"
- "\xc7\xa2\x04\xd0\x19\x49\x1d\x99\x8e\x08\x33\x79\x89\x88\xb2\xb1"
- "\x94\xf9\x39\xcd\xec\xca\x10\xf7\x76\x2a\x04\xe3\xae\xd9\xe8\xbf"
- "\x1f\xee\x59\x9c\x6d\xb8\xcf\x80\xfb\x62\xb8\xc7\xf8\xda\x61\x70"
- "\x3f\x0f\xe7\xa4\xe0\x5e\x03\xf7\xe1\x82\x71\xbb\x1e\xcf\x18\xc3"
- "\xbd\x16\xee\x27\x40\xf9\x85\x52\xbf\xe8\xdb\x56\x76\x94\x4b\xb1"
- "\xbf\x79\x9c\x6f\x47\x55\x77\x9c\x6f\x8c\xe7\x94\xa6\x9e\xc7\xf4"
- "\x2f\xb3\x41\x1c\x2d\x01\x9a\x71\xc9\x90\xa7\x45\xd2\x97\x7c\xbe"
- "\xc3\x61\x93\xfc\xa7\xf0\xf9\x0c\xa7\xc2\x2d\x5e\x3a\xde\x87\x49"
- "\xf1\xd2\x71\xbe\x8b\xc5\x6b\x84\x5f\x9a\x89\xfe\x64\x69\x59\x9f"
- "\x73\x79\x2c\xce\xa7\x73\x25\xfa\xe6\xb5\xa6\xc7\xcb\xee\x28\xc1"
- "\x39\x34\xb8\xe7\xbe\x25\xe9\x19\xe2\x64\xf1\xa1\x24\xbf\x73\xee"
- "\xbe\x24\xfa\x3c\x0f\x75\x08\x6c\x06\x16\xef\x6a\xf1\xb2\x50\xc7"
- "\x82\x04\x6e\x07\x3a\x8f\x70\xf9\x55\x19\xcf\xed\x05\xe7\x3e\xfa"
- "\x14\x8f\x89\x62\x26\xc2\x0c\xee\x7b\x6a\xf1\x32\x0a\xef\x86\xa6"
- "\x2c\x48\x60\x69\x90\x6f\x2d\xd8\x6a\x62\xfd\xb6\x9b\xc2\xf1\x8c"
- "\xab\x20\xfa\xc8\x70\x96\x3d\x37\x2e\x03\xbf\xa3\x64\x76\xc8\x21"
- "\xa2\xc2\x78\x9b\x58\xb7\x12\x37\xbf\x78\x05\x90\x86\x7b\x48\xcf"
- "\x3d\x45\x54\xe8\x07\x58\xac\x4b\x19\x8f\x1f\x26\x44\x49\xbe\xa6"
- "\xcc\x90\xd6\xb3\x3d\x4f\xfd\x9a\xa1\xf2\xce\x17\x26\xcd\x9a\x0e"
- "\xff\x4d\x12\x43\x56\xbb\x63\x33\xfc\xdc\x88\x0f\x22\xcf\xfd\xe9"
- "\xa9\x17\x79\x5c\x52\x01\xc6\xff\x4e\x36\x16\x12\x70\x0c\xdc\x11"
- "\x5b\xc4\xf7\xa0\x0a\x07\xd0\xef\xae\x90\x89\xf6\x24\x9e\x9b\x16"
- "\xf0\x1c\x3b\xd8\x39\x95\xfa\xb7\x56\xa3\x8f\x67\x19\xd0\x58\x78"
- "\x1b\x9f\x89\x3e\xbc\xe4\xcc\xc7\x95\x93\x68\xd8\x19\x61\xb0\x51"
- "\xf0\x0c\x6a\xab\x4c\x56\x8b\x76\x07\xce\x27\x09\x99\xc2\x6c\xc4"
- "\x2d\xf0\x18\x7d\x88\xd8\xe8\x88\x5d\x51\x34\x68\xb7\x0a\x71\x8c"
- "\xb6\xae\x49\x8d\x34\xa3\xe8\x33\xe0\x31\xb8\x7e\xc3\x63\xcf\x3c"
- "\x63\x91\xca\x84\x7b\x15\xd8\x50\x49\xf0\xab\xee\xc8\xa4\x33\xdc"
- "\x62\xf2\x89\x67\xa2\xe9\x22\xf4\xfd\x86\x65\x33\xdb\x59\x26\x7b"
- "\x8f\xdb\x20\x34\xc9\x4c\xd4\x53\x78\x5f\xc4\x58\xa3\x39\x46\xf1"
- "\x7f\xb0\x7f\xee\xb7\xf6\x28\xe3\xb0\x34\x57\xca\x31\x0d\x3a\x4f"
- "\x4e\x1e\x83\xeb\x37\x90\xbf\xd2\x4c\x7e\xca\xf2\xaf\x95\xb3\x73"
- "\x92\xad\x01\x1a\x3c\xef\x4e\x1b\xa4\xf4\x40\x59\x14\xd0\x14\x63"
- "\xba\xf1\xbe\x7f\x6e\x44\xe5\x4c\xb8\xb7\x49\x73\x2c\x6c\xce\x25"
- "\x0b\xf7\x75\x75\xdf\xc7\xc2\x7d\x98\x74\x0f\xff\x6b\x25\x59\x81"
- "\x73\x12\xe7\xd2\x63\x37\xe3\xb8\xf3\x05\x0d\xd8\x85\x60\xdf\xc0"
- "\x73\xe0\x7f\xce\x0c\xfe\x6e\xab\xf5\x5c\x66\x9e\xc1\x36\x82\x46"
- "\xd8\x40\xfe\xc1\x33\xb0\xff\x16\x37\x89\xe5\xe8\xcd\xf2\x9c\x7a"
- "\xa9\x6d\x42\x66\x40\xa8\x90\xbd\x5b\xc7\xda\x28\x93\x6d\x85\xff"
- "\x27\x59\x83\x76\xe1\x3b\xc0\x7f\x47\x31\xcb\x97\x7c\xba\x34\xb7"
- "\x53\x3d\xdb\x04\x16\x7c\xd5\xc2\x4e\xa4\x1f\xdb\x93\x9d\xb7\x4a"
- "\x3d\x0b\xed\x4e\xf4\x03\xc2\x62\xa2\xa1\x7f\x4b\x07\x19\xc6\x62"
- "\x0a\x64\x9f\xb0\x30\x5f\xfa\x2b\x74\x2a\xc9\xb7\x25\x35\xbe\x6b"
- "\xa3\xf2\x65\x36\xf4\x77\xc9\x62\x87\x74\xe8\x42\x98\x8f\x4b\xd1"
- "\xb7\xe5\x96\x64\x12\x56\x2c\x70\xdf\x96\xcc\x47\xc8\x30\x18\xa7"
- "\x24\xf7\xed\xdf\x92\x66\xee\x98\x21\xf9\xb7\xa4\x17\x9c\x76\xf8"
- "\x7f\x02\xd0\x03\xe3\xbf\xeb\xd8\xbd\xcb\xdf\x94\xa2\x4f\x7f\x97"
- "\x72\x90\x7b\x72\xee\xef\x72\x50\xfa\x42\x26\x63\xf3\xb2\x1d\x59"
- "\x32\x90\x7f\xaf\xb1\xb8\x80\x6e\x69\xfb\xa0\x25\xa2\x7f\x03\xaa"
- "\x17\xd3\x1a\xcd\x24\xbb\x58\x1c\x97\x5a\x71\x8c\xbf\x89\xcd\x8d"
- "\x09\x6d\xb4\x4b\xbf\xb9\x2f\x99\xd3\x1e\x12\x58\xde\x8e\xfe\x29"
- "\xb2\xe4\x1a\xb3\x4c\xce\x7c\x73\xb3\xb1\xa4\x4c\xae\xe9\xd9\xaf"
- "\x9f\x7f\x61\x59\x7c\xc2\xfc\x97\x96\x18\xb4\x4f\xcd\x7e\x8c\x05"
- "\x4a\x9c\xa4\x5d\x94\x94\xc0\x54\x92\xf6\xa9\xe9\x8f\x46\x47\xcf"
- "\x9e\xff\xeb\xd9\x8f\xcc\x9e\xf3\xeb\x87\xf8\x89\xc5\xd9\x89\x2b"
- "\x31\xd8\x66\xd2\x32\x2d\xbe\xf4\xbc\x18\x4d\x7c\x55\x42\xe2\xb2"
- "\x9e\xf2\x20\x8c\xcd\x73\xc9\xd9\x9c\xae\x0d\xff\x67\x73\x69\x32"
- "\xf9\x4e\x69\x8e\x8b\xc9\x3e\x99\x7c\x1b\xd2\x96\xc5\x1a\xcf\x92"
- "\x4f\x42\xfb\x4a\x8c\xf3\x8e\x7a\x47\x81\x7d\x1a\xf5\x0f\xb4\xc5"
- "\xec\xee\x9b\x8b\xbf\x1b\xa0\x90\xe3\x7b\x62\x5f\x16\xd3\xc6\xd0"
- "\xb1\x63\xd3\x99\x7f\xad\xac\x80\x30\x69\xde\x1b\xd3\xa4\x3a\x34"
- "\x63\x9e\x2c\xf9\xb3\xdd\xf1\x84\xb3\x02\xa6\xba\xe2\x50\xb2\x3f"
- "\x0f\x1a\x11\x82\xe6\x4c\x20\xd8\x2a\xc3\xe0\x1a\x8e\xd7\x8c\x6e"
- "\xf9\x9e\x4c\x1b\x71\xcc\x16\x2a\x03\x1d\x9c\x12\xc0\xe3\x58\x65"
- "\x35\xb0\xd8\x0b\xd1\x4e\x47\xc0\x7c\xa7\x1c\x7e\x03\xe8\x7c\xa7"
- "\x82\x8d\x13\x69\x32\x6d\x60\x67\xed\x93\x69\x3d\xc6\x6b\x03\x1c"
- "\x1b\xa3\x1d\x69\xc6\x68\x27\x75\xcc\x07\xfb\x1d\x7e\x4f\xe0\x99"
- "\xf1\x68\xe7\x09\xca\x62\xd6\xe0\xd9\x7a\xee\x67\xb0\x1a\xf7\x50"
- "\x3e\x07\x18\x2e\x69\xe7\x31\x89\xa3\x57\x7e\x7f\x6c\xfe\x4a\x33"
- "\x8f\x49\x7c\x86\xc7\xf1\xe6\xb1\xce\x49\x1a\x94\x73\x60\xbe\x33"
- "\x40\x1b\xed\xec\xa2\xec\xdc\x6b\x96\x42\xdb\x5f\x9c\xe1\x3e\xe7"
- "\x2f\xb2\xbe\x98\x4a\xf3\xb2\xd6\xd1\xac\x2f\x55\x34\x6f\xbd\x82"
- "\x1a\x77\xe3\x7c\xa7\x8c\x66\x35\x35\xc1\x3d\xa4\x1f\xdb\x41\xf3"
- "\x8c\x0a\x9a\xd5\x9c\x0a\xbf\x70\x7f\x7c\x26\xcd\xcb\x86\xfb\xaa"
- "\x30\x78\x2f\x83\x66\xed\xc5\xf7\x08\xcd\xfa\x50\x01\xbf\x70\xff"
- "\xa1\x03\xf2\xc1\xfd\x47\x36\xf8\x85\xfb\x7d\x6d\xad\x32\x45\x0b"
- "\xbc\x03\x69\x96\x70\xfe\xad\xef\xc2\xd9\xb7\xb2\xce\x84\xf3\x6f"
- "\x9c\x0d\xe7\xdf\xb0\x85\xf3\x6f\x74\x84\xf3\x6f\xec\x87\xf7\xb2"
- "\x8c\x34\xeb\xe3\xd9\x90\x0f\xea\x5a\xbd\x0f\x7e\xe1\xfe\x93\x29"
- "\x90\x0f\xee\x3f\xdd\x0a\xbf\x70\x5f\x0b\x75\xc9\x86\xfb\xba\x75"
- "\x90\x3f\x97\x66\x99\xec\x90\x4f\x45\xb3\x0e\x2e\x86\x5f\xb8\x3f"
- "\x64\x86\x7c\x70\xdf\x00\xe5\x18\xe1\xfe\x70\x35\xe4\x87\xfb\x4e"
- "\xac\x4f\x21\xcd\xea\xc2\x72\x01\x9b\x4e\xcc\x0f\xf7\x14\xca\x33"
- "\xaa\x69\x0e\xa9\x84\xdf\x42\x9a\x23\x8f\x87\xfc\x70\xaf\x80\xb6"
- "\x66\x6d\xa2\x39\x81\x15\x90\x2f\x8c\xe6\x0c\x87\xf4\xf5\x70\x1f"
- "\xa4\x86\x7c\x70\x3f\x02\xf3\xc3\xbd\x4a\x0f\xf9\xe1\x3e\x04\x69"
- "\x54\x44\x73\xd4\x49\x90\x4f\x43\x73\x46\x37\xc0\x2f\xdc\xdf\x88"
- "\xf5\x87\xfb\x9b\x37\xc1\x2f\xdc\x8f\x01\x5a\x65\xc3\x7d\x38\xd4"
- "\x2f\xab\x98\xe6\x8c\xc7\xf2\xc3\x69\xce\x6d\x48\x1f\xb8\xbf\x23"
- "\x03\xf2\xc1\xfd\x9d\x40\x0f\x23\xdc\xeb\x66\x40\xfe\xf0\x3e\xf9"
- "\x99\xf3\x63\x2d\x5d\x33\x8c\xd0\x9c\x9f\x6c\xa2\x6b\x86\xc3\xef"
- "\x03\xd3\xe8\x9a\x40\x1d\xcd\x89\xdc\x0a\xe9\xf0\xfb\xd3\x70\xb8"
- "\x9f\x24\xde\xc3\xef\x4f\x6d\x70\x1f\x21\xde\xc3\xef\xff\xa9\x81"
- "\xfb\x29\xe2\x3d\xfc\x3e\x38\x1b\xee\x23\x69\xce\xbf\x4d\x82\x7b"
- "\xf8\x7d\xb0\x0a\xee\xa7\x8a\xf7\xf0\x3b\xd5\x0a\xbf\x0e\xeb\xb8"
- "\x98\x19\xd6\xe0\xb9\xc4\x1a\x9c\x63\x40\x5d\xee\xcc\xcf\xca\x10"
- "\x42\xd6\x63\x8c\xca\x61\xe9\xe7\xc9\xf0\x56\xd9\xf0\xcd\x28\x27"
- "\x4c\xa9\x66\x16\xdf\x4f\xf4\x5b\x39\xac\x59\x36\x0c\xe3\x45\x62"
- "\x8c\x06\x39\xb4\xbd\x92\x66\x06\xb6\x43\x9b\xa7\xd2\xcc\x91\xcd"
- "\xf0\x0b\xf7\xa3\x0e\x41\x9b\xe1\xfe\xa7\x39\xf0\x0b\xf7\xcf\x3c"
- "\x0a\x6d\x9f\xda\x91\x35\x5c\x65\x96\x29\xd8\xba\x2b\xfd\xd3\x53"
- "\x71\xa1\x8e\x74\x1a\xed\x00\x7d\xb0\x79\x63\x44\xa8\x23\x8e\xd0"
- "\xbc\x0d\xea\x50\x8c\xc3\xb1\x25\xc6\x48\x43\xe6\xb2\x3a\x61\xac"
- "\x1d\xda\x35\x41\xce\xbf\x3d\x92\x36\xcb\x86\xff\x0c\x63\x42\xd0"
- "\x90\xa5\xde\x9e\x3f\xcd\x9e\x8f\xdd\x18\xc5\x9f\xab\x89\xeb\xf9"
- "\x6f\xf0\xf9\xca\x50\xf4\xad\x3e\xfe\x91\x28\xb3\x6c\x78\x29\xe6"
- "\x31\xcb\x86\x41\x1d\x03\x88\xc9\x66\x11\xdb\x38\x1c\xf3\xfd\x11"
- "\xdf\xf3\x36\x6f\x23\xe4\x16\xe8\xf3\x40\x6e\xe1\x38\x16\xf4\x97"
- "\x5c\x9b\x36\xa1\xa2\x59\x16\x64\xd8\xc2\xe6\x27\x36\x2a\xb9\x3c"
- "\x53\x3e\xd0\x95\xb3\x7b\x9e\x76\x55\x28\x94\x17\xf4\x4a\xba\x9d"
- "\xda\xaa\xd2\x1e\x05\x59\xc8\xd2\x8b\xd8\x99\x1f\xfe\xff\x3a\xb6"
- "\x97\x93\xff\x6f\x60\xf3\xc6\x50\x16\xbe\xeb\x3e\x6e\x70\x66\x45"
- "\x38\x84\x90\x8d\x6a\xb6\x16\x2e\x53\xfe\x6c\xb7\x60\x96\x87\x26"
- "\x91\x40\xed\xaa\x3d\x50\xbe\x32\xc3\x63\x8c\xd9\x9d\x97\x3d\x4b"
- "\xf8\x00\xf2\xbe\x89\xf3\x41\x59\xca\xc2\xee\x98\xc8\xd0\x86\x0d"
- "\xa8\xbb\xe4\x24\x0a\xf5\x29\xb3\x59\x65\x41\x6a\x3c\x9d\xe4\x50"
- "\xe5\x58\x1d\xb9\x73\xac\xce\xdc\x8d\x4a\x9a\xbf\x51\x1d\xe2\x90"
- "\x71\x5f\xbe\xb2\xa0\xe9\xf7\xda\xd1\x46\xfc\x04\xdb\xe7\x14\x86"
- "\x3d\x18\x31\x39\x85\xc8\xab\x12\xbf\xc4\x77\x1f\xa2\x59\x0f\x17"
- "\x99\xda\x1a\x49\x55\x22\x2b\x6b\x2a\xcd\x7a\xdc\x22\x0c\x9b\x1e"
- "\x56\x82\xb6\x76\x0a\xce\x95\x1d\xc2\xf7\xf6\x02\x9d\x41\x0f\x04"
- "\x85\x4b\x75\x41\x1d\x90\x07\xb4\x43\x3b\x18\xfd\x57\xcc\x77\x3a"
- "\xd1\x1f\x9c\xd1\x0c\x74\xe0\x3a\x32\x08\xfd\x89\x11\xfe\xdd\xa0"
- "\x39\xc2\x88\xdd\x33\xea\xe6\xe1\xba\x9f\x1a\xfd\x6b\xd9\xd8\x99"
- "\x77\x8c\x56\x2c\xa0\xde\xe6\x79\xdd\x79\xb7\xe4\x05\xc3\xfc\x55"
- "\x86\x65\x89\x49\xf3\x97\x1b\x1e\xd4\xc2\xe0\x4f\xbb\x6c\xa1\x76"
- "\x49\xc2\x92\x65\x89\x2b\x7b\xf9\xf4\x81\x7a\xed\x04\x6c\x30\x99"
- "\x7c\x00\x6c\x70\x36\x07\x2f\x1b\xb9\x0e\x79\xbd\xf9\x0f\x3c\x66"
- "\x06\xe4\x01\xfd\xff\x12\x9b\x4b\x17\x8a\x36\xea\x68\x71\x8c\x31"
- "\x1b\xfd\x76\x2c\xc7\x98\x0c\x56\x62\x22\xed\x3c\x8e\x2e\x8b\x91"
- "\x07\x63\x82\xe4\xd5\xb4\x2a\xb9\x1d\x31\xae\xa4\x79\x39\x1a\xc0"
- "\x78\xfd\xc5\xbc\xb9\xfa\x66\xd9\x48\xfd\xc5\xbc\x1c\xa5\x14\xe3"
- "\xc8\x99\x9b\xa3\x17\x54\x05\x19\x18\xe3\xa8\x8b\x6a\x48\x2d\xd0"
- "\xb2\xd3\xb8\x7b\x0a\xc8\xf8\x88\x2d\x99\xb4\xc2\x09\x63\x24\xe6"
- "\x73\xe6\x4f\x4f\x45\x39\xa9\x4e\xe1\xcc\x24\x4a\xf8\x0d\xa1\x21"
- "\x85\xe5\x5d\xaa\x0d\x04\x9f\x63\x6c\x23\x67\x97\x8e\xa4\x35\x50"
- "\xe1\x3f\xf4\x80\x9b\x4c\x30\xb2\x31\x96\xab\xfe\x34\x81\xf4\x11"
- "\x42\x7e\x4e\x61\xeb\x0c\x22\xc7\xbc\x60\x9f\x91\x79\xf0\x7f\xea"
- "\x02\x12\x0c\xf9\x42\x53\x0f\x40\x7a\x87\x6e\x84\x23\x5d\xa7\xec"
- "\x4c\xd7\x8d\xe8\xa2\x3a\x95\xa9\xc5\x4e\xba\xee\x7c\x6a\xd6\x3d"
- "\x56\xa2\xd8\x0c\x76\xdc\x16\x01\xfa\x57\x71\x8c\xc1\xf9\x9a\x6e"
- "\x98\xe3\x35\x9d\xa2\xab\x4b\xa7\x74\xac\xd0\x29\x3a\x57\xe8\x86"
- "\x75\x75\xe8\x94\xa6\x78\x2b\xf9\xc4\xfa\x67\x52\xd7\x62\x61\xf3"
- "\xb4\x5d\xc1\x85\x95\x5d\xc1\x39\xc5\xaa\x16\x12\x36\xd9\x00\x76"
- "\x1c\xd8\xb7\x6f\x80\x6d\x0f\x98\x50\x39\xb6\x3d\x15\x45\xf3\x0a"
- "\xe3\x80\xbe\x4f\x4c\x9f\x48\xbf\x77\x66\xa9\xc3\xb4\x8f\x83\x2c"
- "\x5a\xa3\xd0\x40\x1a\xe0\x27\x1c\x74\x8b\x06\xe4\x9b\x02\x64\x20"
- "\xe8\x4a\xce\x07\xd0\x4b\x21\xd5\x38\x4f\x80\x79\x79\xbe\x1b\xc1"
- "\xa6\xc2\xdf\x51\x7a\x16\x73\x35\x2b\x28\x75\x0b\xb3\x21\x46\x66"
- "\x48\x36\xc4\x3e\x45\xdf\xbe\x41\x20\xcf\xd6\xee\x31\xb7\x00\xf2"
- "\x24\x2f\xcb\xe0\xd5\xaf\x2f\x7e\x3b\x3f\xab\xb4\x50\xe8\xf6\xd7"
- "\x0c\xf2\x70\x64\x2d\xf4\x9f\x0c\xf6\x2c\x77\x83\x3a\xed\x2c\x09"
- "\xc0\x67\xe5\x17\xec\x72\xbc\xd7\x26\xca\xa8\xc9\x66\x27\x85\xb8"
- "\x5e\x11\x1e\x63\x2c\xbf\x60\x95\x23\x5e\xea\x20\x0d\xde\x3d\x5e"
- "\x78\x41\x2c\xb7\x68\x63\x44\xfa\x2b\x84\xc5\x2d\xc1\xd8\x47\x88"
- "\xa3\xc2\x34\x18\x33\x62\x9c\xa6\xc4\x00\xe8\xc7\xaa\xdb\xe0\x7f"
- "\x25\xe6\xa3\xaa\x0d\x6a\x01\xca\x00\x2c\xa5\xd0\xe0\x1c\xbb\x90"
- "\x97\x93\x01\x98\x8a\xa2\xe3\x62\x2c\xc2\xe6\x8d\x9a\x8e\x2c\x55"
- "\x0a\xd0\xa3\x50\x9a\x83\xa8\x2b\x73\x10\xf4\xb7\x45\x1f\x75\x90"
- "\xfd\x49\xe7\xd1\x27\x6f\x80\x35\x68\x77\xa4\x35\xb8\x40\x6f\x0d"
- "\x2e\x8c\x13\xf2\x0a\xca\xe0\xda\x61\x48\x24\xaa\x53\xb2\xe0\xa9"
- "\xdd\xfe\x62\xcf\x5e\x23\xfe\x62\xc1\x2e\x63\xf6\x19\x60\x07\xed"
- "\x2d\x68\xaf\x05\xe3\x8f\xa0\x1d\x86\x32\xb7\x23\x2b\x58\x2f\xd9"
- "\x51\x28\x47\x9c\xd9\xbb\xa7\xc1\x15\x05\xe9\x19\x66\x99\x76\xab"
- "\x24\x63\x40\xaf\x68\x85\x9c\x5f\x64\x74\xe0\x99\xa8\x2e\xfd\xc3"
- "\x98\x17\xe8\x36\x0b\xbe\x15\xe0\xec\xd2\x4f\x85\xeb\x21\xb8\x7e"
- "\xee\xcc\xcb\xb1\xc2\xa5\x76\xe6\x15\x46\x39\xf3\xe6\x4e\x80\x4b"
- "\x07\xd7\x24\xb8\x22\xe0\x9a\x02\x57\x24\xcd\x9b\x3b\x15\x7e\xf1"
- "\xf9\x34\xb8\x66\xc0\x35\x13\xae\x59\x70\xcd\x76\x6e\xde\xa8\x15"
- "\x00\x9f\x70\xe1\x6f\xb8\x33\xaf\x20\xa5\x6f\x9f\x25\xad\x3c\xce"
- "\x42\xe0\x31\x1a\x8a\x71\x78\x53\xcf\xa3\x2f\x48\xcb\x7e\x9d\x6d"
- "\x70\xfe\xe6\x65\x21\x5e\xfd\x85\x62\xf9\xd0\xb7\xba\x06\x59\x9e"
- "\xf7\xb9\x13\xcd\x46\x9d\x23\x3c\xa6\x1e\x7d\x9f\x43\x7f\x96\xd5"
- "\xc5\xb5\x90\x68\x2b\x49\xaf\x69\xe9\x24\xe9\xf1\xd4\xc9\xc6\xd1"
- "\xa9\x78\x0e\x65\x99\x0d\x31\xec\xa4\xb1\xda\xae\xdc\x1c\x8d\x53"
- "\x55\x10\x45\x55\x05\x29\xcc\xbf\x24\xc8\x1e\x8c\x6b\xd6\x3d\x86"
- "\x44\x4c\xc1\x38\xb2\xb6\xed\x3c\x79\x2d\x9e\x0a\xb5\xc0\x4d\xf4"
- "\x21\x19\x2a\x23\x7f\x44\x7c\x49\xe3\xc8\x5f\x35\xd1\x0c\xc0\x4a"
- "\x90\x13\xe8\x26\xe0\xf8\x11\x70\x85\x63\x49\x09\x5b\xa0\xcb\xd4"
- "\x52\x2c\x28\x3a\x2c\x24\x0c\x9e\x29\x30\x56\x54\x31\x8c\x1f\x8b"
- "\x93\xc9\x84\x62\x78\xc6\xe2\x7a\x42\xbd\x9f\x34\x84\x52\xe1\x65"
- "\x1d\x29\x79\x89\x28\x83\x4f\xf3\x58\xb1\x4e\xa0\x7d\x77\xbc\x84"
- "\xdc\xb9\xfa\x27\x4e\x6b\xc9\x7e\xdd\x51\xd0\x49\xe5\x20\xbb\xe7"
- "\xea\xbb\x40\x6e\x03\x2d\x9d\x83\xa3\x65\x68\xcd\xe5\xa2\x65\x57"
- "\x78\x8c\x81\xd3\x33\x8e\x20\xcd\x7a\xd2\x13\x69\xbc\xaa\x05\xe8"
- "\x09\x74\x35\x35\x38\x49\x88\x8c\x2c\x90\xe8\xf9\x26\xd0\x13\x68"
- "\xaa\x41\x9a\x02\x3d\x18\x4d\xa9\x48\xd3\x12\x37\x9a\x82\x6c\x62"
- "\xbe\x38\x91\xa6\x02\xd0\xb4\xc4\x0b\x4d\xbb\xc7\xe2\x40\xd3\xb7"
- "\x7c\xa2\x69\xd9\x25\xd0\x74\x94\xd6\x1b\x4d\x1d\xa8\x2f\xf3\xe7"
- "\xc6\x51\x90\x77\x26\xc7\x27\xcc\xaf\x2c\xd8\x3a\x3b\xc0\x66\x2b"
- "\x13\x54\x39\x7a\xa0\x89\x0a\xd7\xf4\x31\x36\x19\xf3\x01\x57\x46"
- "\x2f\x3a\xf3\x0b\xab\x30\x0d\xe4\x96\xfe\x5e\xf4\xa3\x67\x30\x93"
- "\x12\x39\xad\xa8\xbb\x60\x03\xfd\x12\xf6\x74\x27\xda\x92\xf9\x85"
- "\x54\x80\xe1\x3f\xca\x90\xe7\x26\x12\x45\x27\xc8\x09\x43\x32\xb9"
- "\xb5\x10\x64\x5d\x27\xc8\xce\x53\xb2\x51\xb6\xe9\x06\x81\xc2\x95"
- "\x8e\xfe\x51\x85\xe0\x82\x32\x90\xd5\x8c\xbf\xc8\x33\x5c\x2b\xac"
- "\x7d\xee\x43\x28\x6f\xf4\xf1\x4f\xe3\x1c\x24\x5d\xdf\x9b\xbf\x42"
- "\x7a\xac\xd6\x99\x3b\x70\x3f\xc1\xf8\x88\xa9\x16\xe4\x6b\x39\x31"
- "\xb5\xb8\xfa\x89\xb0\x82\xcb\x60\xe4\x05\xf6\x0b\xec\x23\x05\x6e"
- "\xb2\x17\xe4\xba\x7a\x8b\x18\x2f\xc4\x09\xb2\x17\xf2\x2a\xd0\xaf"
- "\x2a\xc6\x11\xe9\xb3\x7f\xbc\x06\xfd\x63\x15\x8b\xe5\xa4\x01\x7a"
- "\x94\x77\x76\x70\x1e\x22\xcf\x4c\x8e\x6a\xc6\xbf\x42\x51\xd6\x73"
- "\xba\x17\xbc\x46\x69\x2c\x71\x42\xdd\x85\xfc\xc2\x72\xda\xa1\x1f"
- "\x81\xf3\x8a\x30\xd6\x8d\x08\x8d\x07\xbb\xe1\x7b\xd0\x05\x4b\x01"
- "\x5f\x67\xc8\x84\xb7\x96\x82\x2d\xd0\x81\x31\xd9\xa0\x3e\x2b\x79"
- "\x2c\x5b\x21\x2b\x24\x05\x9e\x31\x7f\xaf\x82\xe4\xef\xf5\x9c\x0e"
- "\xc7\xe8\xae\xb9\x9d\x65\x3a\xb9\xeb\x9b\x1f\x66\x38\x95\x6d\x16"
- "\x76\x36\x5e\x76\xc3\xdb\x7c\x2d\xba\x4c\x8f\x74\x6d\x93\xdd\x60"
- "\xe6\xf3\xb9\x6f\x2f\x36\xa4\x91\xe1\xa7\x64\x37\xbc\x0e\x76\x55"
- "\x9c\x01\xe3\x72\x4b\xcf\xd2\x63\x91\x0e\x53\x26\x67\x90\x0c\x67"
- "\xf6\x69\xa5\x29\xe5\x34\xfa\x4f\x1c\xa4\xec\xbd\x81\xf9\x8f\x74"
- "\x1a\x3f\x5c\x07\x74\x8a\x12\x72\x3e\xcc\x05\x99\x12\x41\x5f\x86"
- "\xb6\xbe\x04\x6d\x3d\x05\x74\x3d\x05\x6d\x5d\x21\xb6\x55\x8c\x53"
- "\x27\x00\xfd\xe1\x59\xdf\xba\x4f\x6a\xeb\xcb\xe8\x2b\x7d\x5b\xe4"
- "\xea\xd3\xe4\x06\x7a\x3b\xae\xcf\xb2\xb3\x8b\x1d\x26\xc7\x51\x82"
- "\xdf\x65\xba\x39\x77\x6e\xe4\x1c\xc0\x23\xd2\x1c\xec\x81\x52\x1a"
- "\x92\x53\x28\xf1\x01\xeb\x43\xbb\xf4\x23\x4a\x96\x42\x7d\x90\xf6"
- "\x67\xc8\x24\xec\xcf\x40\xfb\x09\x25\x48\x7f\xcf\x58\xd1\x61\x8c"
- "\x07\xc3\x80\x07\x4b\x45\x1e\x64\x8b\x3c\x00\x3b\x11\xf4\xb4\x12"
- "\xf4\xaf\xa6\x24\x93\xf3\x60\x70\x34\x0a\xab\x1f\xe2\xfe\xba\xcf"
- "\x7b\x7f\xd5\x04\x77\xf2\xb1\xa1\x0c\xfd\xce\xd2\x90\x8d\x01\x42"
- "\x17\xf4\xdb\x7c\xb1\xdf\x52\xfd\xcf\xa5\x3e\xdb\x2a\xbb\x71\xbb"
- "\x6f\x7d\xf6\xa6\xcd\xff\x4b\xfb\x6c\xd8\xe5\xed\xb3\x37\x2f\xf0"
- "\xec\xb3\x37\x6f\xf2\xec\xb3\x37\xff\xd2\xd5\x67\xc5\x67\x43\xd2"
- "\x67\x6f\x8e\xbb\x3a\x7d\xf6\xe6\xb8\x3e\xfa\xec\x56\x1f\xfa\xac"
- "\xc6\x4b\x9f\xd5\x5c\xbe\x3e\xab\x59\x77\xe5\x74\xec\x2d\xfb\x3b"
- "\xe5\x7d\xe8\xd8\xd7\xdc\x74\x6c\x30\xea\xd8\x31\xb1\x7d\xf5\xd7"
- "\xae\x62\xe8\xaf\x2a\xb1\xbf\xfe\xc7\x3f\xa0\xbc\xb1\x31\x9f\x34"
- "\x0d\xdc\x5f\x1d\xc5\x2e\xfb\xc9\x6b\x9f\xd5\x63\x9f\x2d\x23\x26"
- "\x33\xeb\xb3\x0b\xa4\x3e\x5b\x2c\x8e\x75\xfa\xe9\xb7\x61\xde\xfa"
- "\x2d\xc6\xee\xc2\xb8\x5d\xfd\xf6\x5b\xd1\x5e\xea\x1a\x87\xfd\xb6"
- "\xea\x1a\xd3\xb5\xb7\x8c\xf1\xec\xb7\xb7\xcc\xf4\xec\xb7\xb7\xc8"
- "\x5c\xfd\x56\x7c\x36\x24\xfd\xf6\x16\xcd\xd5\xe9\xb7\xb7\x68\x7e"
- "\x38\xba\x36\x7c\xea\x95\xd3\xb5\xb7\xae\x61\xfd\xd6\x9b\xae\x4d"
- "\x17\x75\x6d\x30\xea\xda\x71\x37\xfa\xd6\x77\xc7\x07\xff\x2f\xef"
- "\xbb\x97\x59\xe7\x8e\x3f\xec\xd9\x77\x6f\x55\x7a\xf6\xdd\xf1\xbb"
- "\x5d\x7d\x57\x7c\x36\x24\x7d\x77\x7c\xc3\xd5\xe9\xbb\xe3\x1b\x7e"
- "\x38\x3a\xf7\x56\xbb\xb7\xbe\xab\x1d\x4f\x32\x9a\x65\xda\x18\x53"
- "\x31\xdb\x43\x97\x61\x72\x3c\x48\xd8\xbe\x13\x99\x76\xa5\x49\x13"
- "\x49\x84\x9c\xdd\xe5\x18\x57\x05\xf7\xbf\xfc\xde\x6d\x7f\x09\x5f"
- "\x7f\xd5\x6e\x96\xf6\xc7\xbc\x25\xc6\x5e\xe9\x6f\x7f\x0c\x35\xee"
- "\x8e\x12\xdf\x6b\xe0\xd8\xd8\x3d\x4d\xba\x67\xbe\x60\x64\xda\x46"
- "\x9a\xbd\x7b\xaa\x35\x68\xf7\x54\x6f\x6b\x24\x21\x6b\x28\xc5\x3d"
- "\x21\xe7\xc6\xc7\x58\xcf\xe5\x10\x52\xc8\xd6\x1f\x6e\x53\xc3\xbb"
- "\x91\x6c\x3f\x43\x48\xa0\xf9\x5c\xe6\x2c\x02\x69\x13\xa4\x34\x16"
- "\x2f\x3b\x33\x80\x0a\xf0\x8c\xe6\xcf\xa9\xc1\xd8\x7a\xe8\xa7\x78"
- "\xf2\x05\xc4\xe2\x6d\x53\x40\x46\xb0\xfd\x1e\x6c\xcd\xfd\xe6\x5b"
- "\x6c\x25\xed\x44\x51\xb7\x8e\xed\x7b\xc3\x7d\x35\xa5\xf9\x88\xff"
- "\x80\xbb\x8b\xa8\x5c\x41\x84\x2d\x31\x8d\x34\xb8\xa0\x9c\xed\x03"
- "\x06\xac\x48\x7b\x6d\x30\x06\xa1\x30\x2e\x26\x45\xf2\x95\x4b\xa1"
- "\x7e\x1f\xa4\xe1\x39\xd1\x00\x5a\x92\x48\xd4\x70\xa9\x68\x5e\x41"
- "\x39\xd4\xab\x52\x9a\x3b\xf4\xba\xa7\x1b\x63\xfe\xde\xa2\x51\x88"
- "\xfb\x7a\xd0\x67\x00\xdb\x1f\x58\x20\x17\x8c\x4e\x48\xa7\x99\xe9"
- "\xd4\x94\xe2\x20\xa1\x40\x0b\x5c\x6f\xc7\x98\x60\x42\x49\x8c\x75"
- "\xed\x58\x42\xfe\xba\xca\x22\xc7\xbd\x17\xce\xff\xbc\xc5\x56\x95"
- "\x76\x3f\xae\xc7\x33\xff\xff\xad\xb2\xdb\xdf\x8b\x3e\xc9\xe3\xfb"
- "\xc2\xff\xfb\x71\xdd\xe1\x09\xb8\xc7\xf5\x6c\xe1\x9c\x46\x81\x79"
- "\x21\xfd\x95\xaa\xe4\x2f\x49\xa8\x81\x28\xf3\xa1\x6d\x62\xde\x28"
- "\xcc\x6b\x96\xdd\xce\xce\xba\xc1\xfd\x6c\x9c\x2b\x87\xf7\xd8\x3c"
- "\x29\x2d\x8e\x69\x64\xf2\x21\xb7\xa0\x1c\xda\xdf\xc8\xf6\x7d\x42"
- "\x3b\x0b\xa0\xcd\x90\x47\x85\xfb\x6d\xd8\x6f\x1a\x51\x6f\x82\x34"
- "\x2c\x07\x7e\x55\x6c\xcf\xaf\xec\xf6\x08\x2c\xdb\xeb\x59\x01\x55"
- "\x41\x39\x05\x6c\xf3\xb3\x33\xb2\x83\xcd\xb2\x3b\xe2\x43\x65\x94"
- "\xc2\x37\x53\xd6\xe2\x1c\x36\xee\xcf\xc6\x3d\xe7\xb2\x3b\x1e\x82"
- "\xf2\x15\x6f\xb1\x39\xdb\x3b\xc2\xcd\xb2\xdb\xaa\xbb\xf7\x0e\xb0"
- "\x75\x96\x3b\x92\xf0\x3b\xf8\x8e\x98\x9f\xed\x31\xc4\x3a\x6b\xd3"
- "\x02\x28\xdc\x3f\xcb\xf7\x70\x2b\x17\xc2\xfb\xae\xf8\x3f\xfc\x3d"
- "\xc0\xd2\x1d\x06\xe0\x19\xdb\x2f\x85\xf7\x5e\xf7\x14\x8b\x7c\xab"
- "\x05\x6b\xa2\x17\xef\x24\x8c\x00\x2e\x24\x8c\x60\x7d\xdf\x49\x33"
- "\xcb\x99\x3e\x92\xdd\xe1\xc4\x7c\xf9\xc0\x43\xe7\x9b\x1a\x05\x9b"
- "\x97\xee\x42\xbe\x34\xc3\xb3\x09\xef\x22\x5f\x0a\x40\x17\x88\x79"
- "\x1b\x5d\xf5\xc7\xfb\x09\x8c\x9f\x02\xf0\x82\xef\x59\x9a\x90\xcd"
- "\xe2\x2f\x81\xcc\xc0\xbd\xe6\xfb\x52\x08\xae\x7f\x36\x52\xc0\xc8"
- "\x5f\x13\xed\xf2\x92\x64\x9e\xfe\x41\xbb\x5d\x5e\x70\x8a\xb0\x75"
- "\xad\xbc\x97\x88\x02\xf4\x90\x02\xcb\xa4\xe1\x31\x29\xf7\x4a\x7c"
- "\x5c\x05\xbc\x4b\x06\xec\x02\xcd\x0b\x80\x7e\x25\x9d\x6c\x9d\x26"
- "\xa5\x44\x20\x2a\x01\xf2\x99\x65\x13\xf6\x41\x79\xea\x2d\x37\x51"
- "\x2b\xee\x89\x06\x1a\xae\xea\xc8\x9a\xd0\xed\xff\x0d\xeb\x84\x7b"
- "\x9a\xf3\x70\x9f\xbe\x6c\x42\x38\xc7\xd0\x1d\x6d\x52\x9b\xbd\xd1"
- "\x33\xef\xaf\x24\x3c\x6f\x32\x89\x14\x94\xad\x16\x1a\x70\x4b\x29"
- "\xce\x37\x3f\xd9\x86\x3e\xa7\x2c\x24\xfa\xb7\xc7\xa8\xc9\xea\x24"
- "\x42\x50\xab\x05\xd7\x20\x9c\x6b\xef\x1e\x1d\xbd\x12\xe8\x05\xfa"
- "\x3e\xdd\x4e\xd4\xa6\x34\x2b\x8f\x13\x48\xce\x12\xe7\xab\x20\xc3"
- "\x41\xae\x83\x4e\x55\xa4\x9f\x25\x63\x90\x5e\x42\x70\x8e\xa6\x55"
- "\x76\xe7\xf2\x39\x49\x24\x63\x70\x72\xf4\x4e\xb6\xff\x13\xed\x0b"
- "\x90\xf9\x72\xdc\x57\x67\xb2\x82\x7d\x92\x97\xa3\x19\x64\x39\x5e"
- "\xe3\x4a\x61\xbb\x05\x9c\x87\x16\xdb\x1c\x8d\x6d\xb6\xd9\x09\xce"
- "\xe5\x3f\xf9\x0a\xfa\x3a\x3e\x4f\x84\xec\x56\x0b\xb6\x19\x6c\x9d"
- "\xa2\xc1\xcf\xe9\xff\x48\xd1\xdf\xb7\x29\xd0\x5b\x58\x7b\x4b\xa9"
- "\xa0\x2a\x28\xc2\x6f\x63\x1d\xf0\x9c\xce\x93\xe7\x09\xa3\x3b\xd2"
- "\xdf\x64\x77\x12\x1a\xe4\x5e\x07\xc7\x60\xeb\xe0\xbd\xfd\x93\x49"
- "\x78\xee\x5f\x39\xdf\x9d\x6b\x45\x1a\xe8\x71\x0d\xac\xa0\x08\xe3"
- "\x63\x3c\x89\x75\xb0\x9e\x26\x4f\x9c\x26\x8c\xff\x26\x5d\x1b\x71"
- "\x06\xdc\x3d\x1a\xf7\x12\x20\xff\xd3\x1c\xc0\xff\x0b\x76\xf4\x6f"
- "\x64\x35\x65\x5c\x24\x68\xbf\x38\xce\xe9\xe4\xbd\xf9\x7f\xd7\xf2"
- "\x39\x29\x83\xe5\xff\x5d\x43\xc4\xff\xbb\xae\x81\xf6\xeb\xfc\x68"
- "\xbf\x6e\x88\xda\xaf\xbb\x06\xda\x3f\xd1\x8f\xf6\x4f\x1c\xa2\xf6"
- "\x4f\xf4\xda\xfe\xc7\xc6\x08\x94\xed\x31\x09\xc9\xca\x40\x1d\xc0"
- "\xf5\xd5\xdd\x4b\x70\x0f\x09\x3b\x97\x25\xde\x13\x7e\x4e\x4b\xd9"
- "\xe3\x5e\xd5\xe3\x5e\xdd\xe3\x3e\xac\xc7\xbd\xa6\xc7\x7d\xb8\x74"
- "\x0f\x7a\x24\xf0\x8c\x6c\xe2\x51\xb0\x4b\x33\xcc\xb2\xbb\x53\xc4"
- "\xe7\x13\xd0\xff\x17\xe8\xf4\x09\xfd\xc4\xaa\xbc\xe5\x94\xec\x6e"
- "\x76\x4e\x8e\xae\x1d\xab\xa3\xab\x32\x88\x90\x3b\x77\xda\x93\xab"
- "\x41\x76\x01\xff\x68\x97\x66\x18\xd8\x08\x37\xa3\x8f\x39\xdc\x73"
- "\xa0\x4d\xc4\xbd\x24\x77\x1f\xc4\xf6\x4d\x36\x54\x11\x21\xe0\x6e"
- "\xb6\x96\x2f\xe4\xcd\x9d\x66\x0d\xb8\x7b\x2c\xdd\xbc\x51\x9b\x2f"
- "\x17\x94\xf9\x99\x82\x76\xb5\x95\x5a\x67\x9e\x05\x39\x74\x1e\xfd"
- "\xbe\x03\x8f\x93\xa8\xb5\x2a\xf1\x34\xd4\xf7\xc7\x3f\xab\x4d\x85"
- "\xb2\xe1\x3b\xf0\x2d\x18\xc7\xcd\x9d\xc0\x63\xac\xcf\x9d\x56\x67"
- "\xab\x26\x18\x0f\x48\x2c\x33\x8a\x06\xcf\x9d\x80\x65\xf6\x69\x9f"
- "\xe6\x66\xed\x84\x6f\x3e\x38\x47\xa7\x20\x74\x8d\x22\x6c\x70\x3c"
- "\xfd\xf1\x3c\xaf\x76\x6f\xee\xfa\x29\xbc\x5c\xa5\x3f\xe5\xee\xec"
- "\xa7\x5c\xb1\xbe\x6a\x3f\xca\x9d\xa4\xf2\x5e\xae\x51\xac\xaf\xd6"
- "\x9f\x72\xe3\xfb\x29\x57\xac\x6f\x94\x3f\xe5\x56\x7a\x2f\x37\x5b"
- "\xac\x6f\x86\x1f\xe5\xde\x13\xe6\xbd\xdc\xac\x9d\xfe\x61\xe1\x1e"
- "\x7d\x7f\x58\xf0\x0f\x07\xf7\xf4\xd3\xfe\xf5\x3b\xfd\xc3\xc0\x64"
- "\x75\x7f\x18\xf0\x8f\xff\x93\xfb\xe5\xbf\x7f\xbc\x9f\x5c\xd1\x1f"
- "\xef\xfd\xe3\xfb\xbd\x5e\xf1\x8f\xb6\x3c\xf0\xde\x40\x43\x36\xaa"
- "\x85\xfc\xb9\x06\x21\x24\x2b\x71\xad\x10\x45\x1e\x03\x19\x16\x5a"
- "\x44\x46\x45\xb1\xf1\xf1\xbd\xa5\xab\x8b\x89\x1c\xc6\xbb\xf2\xb7"
- "\x57\x35\xca\x4d\x8e\x48\xd4\x39\xce\xad\xc9\x76\xd9\x1d\x90\xbe"
- "\x17\x10\x60\x03\xbb\x93\x97\x33\xd7\x90\x9f\x16\x45\x44\x9f\x17"
- "\x36\x3c\x67\x1c\x0d\x72\xcc\x54\x64\xc7\x3d\x2b\xa3\xe0\x3d\x07"
- "\xe0\x17\xca\xb0\x93\x77\x04\xab\x2c\x2a\x91\xe5\xb3\xb2\xf3\x75"
- "\xf9\x59\x89\x34\x5d\x87\xbe\x0f\xad\xad\xb2\x88\xa0\x00\x2b\x91"
- "\xa3\x8f\xa2\x8e\xac\x08\x85\x59\x16\x61\x13\xcf\x93\xb6\x31\x1f"
- "\x9d\x50\x5f\x3c\xab\x89\x79\xd1\x57\xe7\x64\x03\x91\xa3\xff\x74"
- "\xc8\x1b\x81\x7e\x3b\xfb\x3b\x97\xed\xcc\x2d\x98\x8d\xef\xd3\x5c"
- "\xd0\xa1\xa7\x89\x1c\xcf\x62\xc2\x38\xa0\x3e\x1f\xc6\x10\xd3\x27"
- "\xe2\x9c\x47\x3b\x49\x5b\x4d\x05\x9c\x7f\xa2\xaa\x1c\x25\xee\x8b"
- "\xe3\x7b\xbc\x23\x6a\x4a\xf8\x9e\x6f\x3b\x8b\x15\x0c\xf7\x6c\x1c"
- "\x83\xfb\x62\x54\x73\xec\x34\x3f\x38\xaa\xce\xd6\xce\xe2\xfd\x34"
- "\xcb\x22\x6a\xd1\x7f\xe2\x39\x55\xc1\x2c\x9b\xaa\x20\x16\xea\x55"
- "\x2d\xb5\x01\xbf\x2f\xa5\xe3\xb8\x0d\xf3\xc1\x73\x8b\x74\x4e\xdb"
- "\x4b\xec\xec\xd1\xd1\x1a\x6a\xed\xf6\x8b\x21\xbb\xff\x09\xa4\x3d"
- "\xd8\x0a\x33\x6c\xe9\xba\xf1\x7c\x1e\xe3\xbe\x24\x1c\x0f\x43\xbd"
- "\xa7\xf0\xb1\xe9\xdc\x29\xcc\x87\x2e\xe8\x80\x39\x3a\xf9\x20\xed"
- "\xd6\xfb\x98\xfe\xaf\x1a\x8f\x3a\xf2\xfe\x07\xa0\xfc\x7f\x6b\x96"
- "\xdd\x57\xc4\xc7\x62\x73\x67\xb0\xf3\x89\xb2\xfb\xa6\xc0\x37\x66"
- "\xd0\xdc\x39\x56\xcc\x07\xcf\x2b\xc4\xe7\xb3\xdc\x9e\xcf\xc2\x7d"
- "\x92\xe2\x73\x71\x2c\x37\x77\xb6\xdb\xf3\xd9\x86\xf1\x38\x37\x71"
- "\x3f\x9b\x8b\x01\x7d\x16\x81\xba\xad\xdb\xcf\x47\xf0\xdc\x08\x31"
- "\xdf\xb4\x36\xd9\xfd\x63\xce\x01\xb6\xe0\xf9\x4c\xb7\xf7\x67\x7e"
- "\x94\x12\x41\x1e\xdb\x82\x34\xbc\x7f\x92\x59\xbe\x41\xc7\xc7\xb3"
- "\xf7\x45\xb2\xb6\xab\xe6\xea\xdc\xcb\x83\x74\x3b\x94\xa9\xb3\x81"
- "\x1d\x05\xff\x6b\xf1\x9b\xee\xf4\x96\x4e\x49\x6a\xe3\x97\x2c\xd0"
- "\xbe\xb0\x6c\xf9\x52\x3c\xe5\x36\xc2\x63\x7f\xa3\x1a\xcf\x81\x0a"
- "\xb9\x1b\x22\x4d\x45\x78\x2e\x4d\xcd\xce\x73\x6f\x02\x3e\x3a\xf2"
- "\x0b\x0d\xce\x90\x42\xe2\xcc\xcf\xd1\xa6\x9f\x27\xf2\x34\x0d\xfd"
- "\xa6\x6a\xd5\xa3\xe4\x8c\xec\xfe\xfd\x2c\x16\xaa\x96\xf9\x8a\xb6"
- "\x55\xad\xfa\x10\xd3\xd8\x39\x75\x53\x1c\x4f\xfb\x7f\x69\xd5\xf2"
- "\x3d\x69\x8d\xf2\x9a\xb8\x76\xf2\x91\xc6\x4a\xf6\x69\xdb\x49\x31"
- "\xa6\x0b\xf5\x72\xdc\x37\x7a\x46\xf6\x93\x7b\xf0\x5b\x38\xc6\xc7"
- "\xff\xf9\x7c\xc5\xfd\x7f\xc3\xef\xa0\x8f\x0d\xa0\xcd\xbb\xf8\x3d"
- "\xb3\xec\xfe\x9d\x01\xc5\xb8\x07\x97\xa8\x20\xdf\x2b\x42\xde\x86"
- "\x48\xd6\xc7\xb3\xee\x8f\x77\xc8\x55\x7f\x16\xcf\xbd\x31\xdf\xff"
- "\x1d\x59\x3f\x99\xe7\x76\xc6\x53\x75\x4e\x4e\x1e\x86\x34\x83\x74"
- "\xb6\x00\x63\x8f\x79\x93\x19\x17\x61\x2c\x7b\xb1\x38\x26\x56\x50"
- "\x6d\x00\xfa\x6e\x88\xac\xae\x26\x38\x97\x22\xc3\x3d\xb0\x6d\xb2"
- "\x07\x66\xd1\xe0\x0d\xba\x34\xec\xa7\x40\x8b\xbf\xe0\x3e\xbe\x90"
- "\x42\xc3\x0e\xdc\xb7\x97\x5f\x48\xfe\x9c\x6c\x97\x7f\x52\x53\x41"
- "\xb4\x73\xd1\x1e\xfa\xc9\x37\xbf\x8a\xa7\x8e\xbb\x1b\xaa\x48\x4d"
- "\xcb\xff\x90\x4f\x9b\xaa\x89\x6a\x1e\x09\x48\x37\x53\x27\x1b\xef"
- "\x27\x11\x79\xb4\x99\x04\xa4\x9d\xc7\x7e\xea\x24\xe9\xcb\xe1\xd7"
- "\x5e\x0b\x36\xce\x32\xdb\xdb\x69\x96\x40\xed\x53\x84\x40\x7f\x62"
- "\xeb\xc6\xec\x9c\x8d\x95\x9d\x5b\x0e\xc6\x39\x6c\xb7\xf3\x35\xf6"
- "\xd5\xa7\x89\xb2\x56\x7f\x94\xa4\xc6\x51\xc1\xb9\x42\x37\x3a\x3a"
- "\x2e\x80\xb2\x33\x36\x29\x90\xd9\x00\x3c\x5d\xa1\x0b\x79\x23\x99"
- "\x84\xd5\x25\x99\x89\xc9\x52\x4d\xde\x4c\x24\x61\xb4\x43\x1f\x54"
- "\x53\xf3\x09\xa1\x39\x16\xf3\x3b\x69\x55\x81\xd2\x9e\xa9\xd0\x35"
- "\x32\x9c\xb3\x0c\xc9\xc5\xbd\x53\x17\x48\xc4\xfc\xe3\x19\x6c\x9e"
- "\x15\xe7\xb4\x1d\x1d\x3a\x6d\x57\x87\xee\xf6\xce\x0e\xdd\x78\x69"
- "\x2e\xfc\xd9\x45\x6a\xb2\x05\xcf\xe6\x64\xfd\x68\x26\xee\xd5\x43"
- "\xdb\xde\x11\xd4\x66\xc1\x79\x6f\xc4\x25\x7c\x3b\x5c\x78\x41\x47"
- "\xee\xb5\xb2\xb3\x3f\x38\x17\xaf\x2e\x79\x1e\xea\xdb\xd6\x4e\xdc"
- "\xf7\xff\x5c\x5c\xa1\x93\xe3\xde\x1f\x9a\xf5\x13\x63\xe7\x96\x98"
- "\x58\xdc\x03\x04\xba\x60\xca\xe0\xfb\xf6\x03\x6c\x6e\x02\xdb\x0f"
- "\xfc\x30\xec\x68\x47\xfe\x00\x9f\xda\xad\x72\xe4\x45\x6d\x3c\xf2"
- "\xa1\xde\x83\x0f\x8c\x6f\x89\x76\x39\xf2\x03\x79\x81\x3c\x71\xf1"
- "\xe3\x30\xe3\xc7\x0e\x81\xf3\xa3\x13\xf4\x80\xc4\x93\x8b\xe1\x31"
- "\xfa\xfe\xf8\x82\xfc\x40\xde\xd4\xb4\x1c\x25\x1e\x3c\xb1\x72\x9e"
- "\x00\x3d\x47\x4b\x7c\x41\x9e\x98\xda\xc0\xd6\x05\xbe\x3c\x7e\x98"
- "\x90\x5f\x4d\xa4\x42\xed\xcc\x43\xdd\xfc\x71\x78\xe3\xcf\x49\x17"
- "\x7f\x80\xf7\xbd\xf9\x73\x5a\x8d\x6b\x33\xc8\x9f\xfa\xc1\xf0\xa7"
- "\xa6\x85\xf3\xc7\x21\xf2\x67\xe2\x0c\x22\xb7\x77\xe8\xe4\x9b\x93"
- "\x49\xe4\xcc\xe3\x5a\xb2\x3f\xb6\x96\x00\xad\x35\x42\x5e\xc1\x0c"
- "\xff\xfa\x51\x64\x91\xef\xfd\xe8\xff\x4c\xbc\xde\x8f\x06\xdb\x8f"
- "\x7e\x5a\x7f\x69\xfd\x28\x32\xfe\x7a\x3f\xba\x52\xfd\x28\x32\xae"
- "\x67\x3f\xea\xd6\xd5\x89\x09\x4b\x16\x2c\x5a\x8a\xc7\xf7\x9e\x5f"
- "\x99\x94\xf0\x2a\xd7\xd8\x1e\x3a\x5b\xe3\x4c\x8b\x92\xa3\x4f\xb6"
- "\x9a\xa2\x7a\xf2\xce\xd8\x7a\xb9\xf3\x84\x46\x41\x73\x03\x22\x84"
- "\xdc\xc0\x0a\xf4\xad\x89\xfd\x6d\x13\xfa\xbd\x90\xfd\x7c\x5f\x5d"
- "\x38\x8f\x63\x89\xff\x33\x7b\x25\x3c\xc6\x82\x6b\x24\x6b\x57\x11"
- "\xc5\x5a\x3c\xc3\x6c\xc7\xb9\x08\xf6\xfc\x1e\xf4\x35\x48\xb7\xc4"
- "\x58\xd0\x6f\x8d\x4d\x35\xc7\xba\x0e\xca\xb2\x06\x6f\x88\x54\x68"
- "\xf1\x8c\xc3\x83\x95\xa0\x8f\x53\xbb\xfd\x10\xc9\x1e\xb2\xd2\x61"
- "\x0f\xaa\xb1\x9f\xe3\x79\xb3\x33\xb2\x07\xcf\x5e\xcc\x24\xe8\x6f"
- "\xc3\x3a\x67\x22\x7c\x67\x5c\x8c\x9e\xf9\x25\x80\x3e\xcf\x9f\x4f"
- "\x7d\x1d\xbf\xdf\xa5\xca\xd1\xa2\x9d\x78\x4e\x55\x68\x38\x97\x5b"
- "\x48\x3e\x49\x2d\x27\xda\xa7\xb0\xcf\xff\xdb\xb8\xc7\x8b\xa0\xcf"
- "\xcf\xaa\x22\xb5\x9a\x3f\x93\x4f\x63\x01\x6b\xb1\x03\xf5\x79\x37"
- "\x8c\x8d\xf7\xad\xcf\x4b\xd8\x42\x4c\x21\xb6\x10\x57\x23\x01\x57"
- "\x88\x35\x09\x5b\xbf\xbf\xc0\xb1\x15\xda\x44\xd4\x6f\xb4\x03\xbe"
- "\x1c\x1c\x5f\x78\x2e\xb8\x36\xe5\x90\xf7\xbe\x7f\xa1\x07\xb6\xe4"
- "\x22\xb6\x56\x00\xb6\x56\xb8\xb0\xf5\xcc\x51\x35\x79\x93\x61\xeb"
- "\x4e\x17\xb6\xb2\xdb\x2c\x12\xae\x10\x63\x88\x27\xe1\x45\x1d\xc1"
- "\xfe\x2e\x61\xac\x64\x21\x5f\xe3\x64\x7d\x5f\x0e\x7d\xbf\xc3\x4d"
- "\x87\x8e\xbb\x94\xbe\x3f\x95\xed\x7f\x42\x9e\x20\x7f\x90\x2f\xc8"
- "\x8b\x7f\x45\x3e\xa0\x4f\x58\xda\xd1\x17\x2f\x26\x34\x0e\xc4\x0b"
- "\xe4\x03\xf2\x83\xf1\x01\xf8\x21\xad\x37\xe3\xfa\x23\xf2\x04\x79"
- "\x31\x39\x95\xc8\x91\x2f\x25\xd0\xdf\xb1\x8f\x03\x6d\xe7\x21\x5f"
- "\x98\xdd\x9a\x19\xfc\xe2\x26\x3c\x33\x2b\xc6\xdb\xed\xc8\xfa\xb9"
- "\xba\xb7\xcd\xfa\xf3\x09\xdd\x7e\x20\x65\x0f\x56\xf3\x31\x46\x0e"
- "\xf7\xc1\x26\x7b\x78\xb9\xd8\x87\xeb\x71\xbc\xc7\xc6\x76\x4e\x18"
- "\xdb\xa9\x60\x6c\x97\x0b\x63\xbb\x14\x0b\xf7\x17\x20\xfb\xf9\x2b"
- "\x44\x3c\xbf\x4b\x83\x73\x94\x34\x6f\x8e\x1d\x69\xc6\xd6\x49\x83"
- "\x0b\x66\xe1\xba\x0e\xcd\x83\x71\xe3\x7f\xc9\x09\xdc\x03\x6e\x9c"
- "\x83\xc4\xcb\xcf\x0b\xc5\x75\xe0\xa9\x86\x55\xb8\x47\xe0\x61\xee"
- "\x57\x51\xf6\xe0\x4a\x4c\x67\x6b\x68\x72\xa1\xd4\xb9\xd6\x73\x0d"
- "\xcd\x7d\x8d\xf5\x9d\x34\xab\xb8\x7e\xf6\xf0\x23\x2c\x0f\x9e\xd3"
- "\x00\x39\xf6\x76\x5a\xbd\xdc\xb5\x86\x76\x08\x9f\xff\xd2\x73\x0d"
- "\xed\x61\x66\xef\x99\x65\x0f\x27\xe1\xbe\x11\xb8\x8f\xe0\xe9\x0f"
- "\xa6\xb8\xa7\xbb\xd6\xa8\x79\xba\x20\x67\x71\x46\x70\x8c\xdd\xc6"
- "\xc7\xd6\x0f\xe7\x4a\x63\x58\x2f\xf6\xcc\x20\xe4\xec\xb4\x28\x97"
- "\x9c\x9d\xc6\xe7\x9a\x35\x1b\x35\xb5\xbd\xe4\xec\x97\xf0\xfc\xb1"
- "\xed\x4f\xa2\x9c\xcd\xcd\xe1\x71\xe1\x65\x51\x63\x80\x26\x01\x18"
- "\x2f\x12\xd3\xf1\xbc\x0e\xca\xdc\x2d\x4c\x06\x6f\x54\xae\x63\xeb"
- "\xe4\x51\x91\x9e\xb2\xf7\xb1\xc5\x9e\xb2\x37\x6a\x49\xff\xb2\xf7"
- "\xd1\x51\xfd\xcb\xde\xa8\xcd\xd7\x65\xaf\xbf\xb2\x17\xec\xae\x4b"
- "\x92\xbd\x8f\x34\x5d\x97\xbd\x97\x4b\xf6\x3e\xd2\xe8\x26\x7b\x67"
- "\x7b\xca\xde\xc7\x72\x7b\xcb\xde\xc7\x4a\x5d\xb2\x37\x6a\x9a\xa7"
- "\xec\x9d\x76\xd6\x37\xd9\xfb\xd8\xe9\xcb\x2b\x7b\xa7\xa9\x3c\x65"
- "\xef\xb4\x26\x51\x37\x7c\x33\x78\xd9\x3b\x6d\x77\xff\xb2\x77\xda"
- "\x7e\x4f\xd9\x3b\xad\x88\xcb\xd8\x69\x56\x2e\x7b\xa7\xed\x10\x65"
- "\xb2\xd9\x3d\xdd\x25\x7b\x79\x7a\x6f\xd9\x3b\x5d\x39\x80\xec\xd5"
- "\x39\x05\x49\xf6\x36\x82\xec\x6d\x94\x0b\x2f\x7a\x93\xbd\x8f\x87"
- "\xd5\xa2\xec\x4d\x44\xd9\xfb\x78\x58\xff\xb2\xf7\x97\xab\x51\xc6"
- "\x32\xbf\x94\x7f\xa0\x2d\xcc\x2f\xe0\x1f\xa8\x05\xf1\xf8\x64\x2a"
- "\xa4\x43\x1a\xfa\x4f\xc4\x7c\x22\xef\x45\x19\x3d\x7d\x77\xb7\x8c"
- "\x86\x7c\xc2\x18\x97\x8c\x46\xf9\x8c\x72\x7a\xcb\x1f\xa8\xb9\xe4"
- "\x0f\xb4\x09\xda\xd6\x22\xc9\xea\x3c\x48\xc3\x38\x3f\xe8\xbb\x07"
- "\xf7\x0c\x02\x0d\x5a\xd6\xc2\xf7\x30\x7f\x47\xd6\x2f\x54\x9e\x32"
- "\xfd\x97\x51\x9e\x32\xfd\x17\x8f\xf4\x2f\xd3\xff\xfd\x78\xff\x32"
- "\xfd\x17\x4b\xae\xcb\xf4\xab\x25\xd3\xff\xbd\xfc\xba\x4c\x1f\x58"
- "\xa6\xf7\xc5\x8b\x9e\x32\xfd\x1e\x51\xa6\x6f\xe9\x96\xe9\xff\xbe"
- "\xc3\xbb\x4c\xff\x65\x5c\x6f\x99\xfe\xcb\x24\x97\x4c\xff\x85\xc6"
- "\x53\xa6\x3f\xbe\xdf\x37\x99\xfe\xcb\xbd\x97\x57\xa6\xff\xd2\xec"
- "\x29\xd3\x1f\x17\xf7\x87\x4d\x7f\xd6\x5d\xa6\x0b\x01\xbe\xc8\xf4"
- "\xc7\x37\x4a\x32\x1d\x65\xe6\xdb\x42\xa3\x9b\x4c\x47\xd9\xf6\xf8"
- "\xe6\xaa\xe4\x66\x37\x99\xfe\x38\x8f\x23\x2d\x7b\x7c\x9f\x93\xc9"
- "\xf4\xc7\x33\x78\xfa\xf4\x79\xee\xe9\x2e\x99\xce\xd3\x9d\xee\x32"
- "\xdd\x82\x32\xfd\xf1\xa6\x01\x64\x7a\x84\xef\x32\x7d\xd6\x54\x97"
- "\x4c\x9f\x35\x55\x92\xe9\x28\xc7\x51\xa6\xa3\x0c\x46\xb9\xce\x7c"
- "\x55\xb1\x7d\x0f\xd1\xdb\x42\xad\x44\x89\x3e\x72\x71\x0e\x03\x65"
- "\x31\xfa\xe3\x41\xd9\xce\xf2\x2c\xe5\x79\x40\x3e\xb7\x80\x4c\xb6"
- "\x80\x4c\xb6\xe4\x9d\x21\x0a\xc8\xd7\x98\x8f\x7b\xe8\xe0\x1e\x65"
- "\x77\x68\x1b\xe8\x01\x07\xd3\x03\x8d\xa8\x3f\x38\xbd\xa2\xb7\x79"
- "\xea\x82\x5f\x1d\xe8\xcb\x5e\x2f\x74\xd3\x05\x25\x37\xd1\x86\x8e"
- "\xac\x5f\xb5\x49\xf2\x3d\x1f\xee\x51\x07\x14\xb6\x33\x1d\x60\x06"
- "\x1d\xd0\xc2\x75\xc0\x4c\x75\x77\x1e\xa8\x03\xcb\xc3\xf5\x44\x23"
- "\xe4\x69\x12\xf3\x4c\xf1\xd4\x13\xd1\x7a\x4f\x3d\x31\x73\x11\xea"
- "\x09\xf4\xdb\xca\xe2\x9d\xe7\x6d\xd0\x39\xb7\xc4\xe8\x51\x67\xf0"
- "\xe7\x4f\x06\x77\xeb\x89\x9b\xdc\xf4\x44\x8a\xa4\x27\x66\xbe\x7e"
- "\xcd\xeb\x09\xc0\x72\x6d\xea\xbf\xa2\x9e\x78\xa2\xf1\x5a\xd0\x13"
- "\xc8\x83\x91\x6e\x73\xab\xde\xf8\x80\xfe\x11\x6a\x17\xff\x50\xf4"
- "\xc4\x13\x0d\xde\xf5\x44\xb4\xb1\xb7\x9e\x88\x2e\x76\xe9\x89\x99"
- "\x51\x9e\x7a\x62\xd6\x69\xdf\xf4\x44\xf4\xc9\x9e\x7a\x02\x69\x96"
- "\xcf\xf7\x04\xb4\xa1\x7e\x70\xe6\x15\xcc\x12\x50\x57\xf8\xa5\x27"
- "\x66\x29\x3d\xf5\xc4\xac\x46\x51\x26\xdd\x37\x78\x3d\x31\x8b\xf9"
- "\x47\xcc\x97\xf4\xc4\x85\x9e\x7a\x62\xd6\x5e\x4f\x3d\x31\x6b\x13"
- "\xd7\x07\xb3\xda\xb8\x9e\x98\x55\xc6\xd3\x7f\x15\xe1\x9e\xee\xd2"
- "\x13\x3c\xbd\xb7\x9e\x88\x51\x0c\xa0\x27\x54\x5d\xe1\x31\xfa\xae"
- "\xdc\xc2\x59\x8e\xad\x31\xd6\x49\xb1\x0f\x3b\x7b\xf6\x01\x8e\x7d"
- "\x27\xc1\xbe\xd0\xbd\xe6\xf3\x1c\x5f\x63\x10\xc4\x73\xb7\x9d\xe1"
- "\x31\xb1\xad\x8b\xa1\x1f\xb4\x79\xef\x07\xd0\x07\x94\x52\x1f\xa8"
- "\xd5\x1f\x27\xd0\x2f\xe4\xb8\x0e\xf4\x26\xe0\xdf\x64\x6b\x64\x72"
- "\x49\xd5\x12\x45\xd0\x5f\x61\x70\x1b\x51\x07\xcb\x64\xc3\x70\x8d"
- "\xc1\x09\x7d\x61\xfa\x44\x2a\xfc\xb8\x31\x8a\x04\xeb\x49\x08\xf6"
- "\x87\xbf\x8a\x6b\x0d\xe8\x33\x01\xd7\x18\x00\x87\x11\xf3\x0f\xba"
- "\xd6\x18\x3a\x7d\x58\x63\x30\xa5\x98\xd9\x1a\x03\x9e\x23\x12\xa0"
- "\x0f\xb0\xb3\x2d\xb8\xc6\x60\x67\xeb\x32\x6a\x76\x9e\x84\xad\x31"
- "\x34\x13\x5c\x5f\x90\x7c\xa2\xe0\xba\xc2\x8f\x63\x89\x1c\x7d\x2a"
- "\xbc\x09\xf8\xdf\xaf\xab\x25\xd8\x07\x06\x2f\x8f\x9e\xf2\xba\xff"
- "\x09\xf9\xe2\x00\x9a\x3a\x55\x85\xb3\xe8\x1b\x1b\xa3\xfe\xd2\x6c"
- "\x97\xa1\x3f\x48\x27\xf0\x48\x00\xb9\x43\x95\x3d\xe4\x4e\x97\x48"
- "\xef\x2e\x4e\x6f\xe0\x95\xf2\x39\x1b\xa1\x90\xce\xfd\x41\xda\xcd"
- "\x80\x35\xdd\xe8\x2d\xab\x90\xb6\x11\x64\x8b\xe8\x13\x52\x78\x4d"
- "\x1f\x24\x00\x3d\xf1\xfc\xc0\xdb\x17\xec\x81\x4e\x65\xab\x25\xb7"
- "\x93\x4c\x02\x19\x13\x8c\x32\x06\xf0\x39\xe2\xad\x4e\xa0\xed\x37"
- "\x9c\xb6\xe8\xd3\x0b\x7f\x1d\xaf\xe9\xb4\x50\xf6\xed\x5d\x5d\x40"
- "\x5f\x3b\xa7\xef\x73\xaf\xa8\x49\x89\xb4\xc6\x06\xfa\xb9\x0e\x78"
- "\x8a\x32\xe6\x49\x5b\x28\xc5\x78\x0f\xce\x2e\x5d\xb8\x70\x02\xe8"
- "\x6b\x83\x3e\xd5\xa5\x43\xfe\xab\x4b\x5a\x71\x4d\xf0\x4b\xbe\xc6"
- "\x16\x24\xfa\xaa\x78\x0d\xe4\xfd\x22\x2d\x31\x95\x81\xbc\x1d\x16"
- "\xa3\xe9\xda\x12\x13\x4b\x65\x20\xef\x53\x07\x4b\xdf\x5f\x57\x5f"
- "\x1d\xfa\x6a\x7f\x40\xf4\x7d\xaa\xdc\x7f\xfa\xce\xd1\x5d\x1d\xfa"
- "\xaa\x7f\x40\xf4\x9d\xad\xf6\x9f\xbe\x73\xbd\xee\x7f\x46\xfa\xa2"
- "\x7d\x2f\xd9\xf6\x92\x5d\x8f\xba\x85\xeb\xc6\xa7\x89\xcb\xa6\x7f"
- "\x9a\x48\x6b\x91\x40\x1b\x45\x9e\x38\x47\x63\x58\x48\x6e\x3d\x25"
- "\x8b\x5d\x2e\xad\x43\xa2\x4d\xcd\x78\xf5\x06\xf0\x6a\x29\x9e\x13"
- "\x11\xf9\x04\x7a\x60\xbe\x0d\x64\xf5\xb8\x18\xbd\x33\x0f\xf4\xc4"
- "\xb6\x18\xab\x17\x9e\xc9\x51\xc6\x07\x27\x11\xf5\x73\x06\xce\x3b"
- "\xe1\x35\xe0\x59\x27\xd8\x37\x76\x0b\xc1\x73\x9f\xa1\x16\x90\xab"
- "\x5d\xfa\xa0\x79\x60\x2f\x4b\x7c\xfb\x6b\xb2\x9d\xd9\x36\x7d\xf2"
- "\x6d\xb3\x27\xdf\xce\xf5\xc1\x37\xd7\xda\x3e\xd8\x99\x8c\x6f\x66"
- "\xc6\x37\x26\xd7\x5f\x03\xdb\x06\xf8\x27\xf1\x8d\xc9\x75\xe0\x1d"
- "\xe3\x5b\x5b\x33\x71\xba\xc9\x75\xb4\x6b\x90\x77\x35\x71\x60\x5f"
- "\x66\xcd\x31\x30\xbe\xa1\x9d\x19\x37\x58\xbe\xc5\xf6\xb0\x67\x9e"
- "\x7e\xdb\x37\x7b\x26\x76\x37\xda\x2c\xee\xf6\x0c\xde\x9f\x83\x31"
- "\xaf\x33\xb8\x60\xb6\xcd\x2f\x1b\x26\xb6\xc6\xd3\x86\x79\xba\x88"
- "\xd7\xe9\x37\x81\x83\xb7\x61\x9e\x66\xeb\x4d\x6f\xbf\xc1\xc7\x92"
- "\x9e\xf6\xcb\xd3\x6b\x3c\xed\x97\xa7\x67\x73\x3b\xe5\xe9\x1d\xe7"
- "\x32\xd1\x7e\x79\x5a\xcf\xd3\x7f\xa3\x70\x4f\x77\xd9\x2f\x3c\xfd"
- "\x1c\xfa\x06\xcb\x7a\xba\x62\x70\x36\xcb\xbd\x57\xd9\x66\x89\xe8"
- "\xc7\x66\x89\xf8\x17\xb3\x59\x9e\xe9\x2f\x86\xcc\x75\x9d\xca\x64"
- "\xfe\xd3\x35\xfe\xcb\xfc\x79\x5e\x63\x65\x5c\xd7\xa9\x12\x7d\x9f"
- "\x89\xf7\x9f\xbe\xcf\x7a\x8d\x7f\x3a\xb0\x4e\x8d\x9b\xed\xd2\xa9"
- "\x71\xb3\xbd\xeb\xd4\xf9\x07\xae\xeb\xd4\xbe\x74\xea\xbc\x7d\xfe"
- "\xeb\xd4\xf9\x9b\x3c\x75\xea\x02\x99\x6f\x3a\x35\x6e\xd4\xd0\xeb"
- "\xd4\x38\xad\xa7\x4e\x8d\x6b\xe3\x75\x7a\xee\xe9\xc1\xeb\xd4\xb8"
- "\x5a\xef\x3a\x35\xee\xb0\xa7\x4e\x8d\x2b\xe3\xba\x73\x01\xe1\x3a"
- "\x35\xae\x92\xa7\x3f\x17\xeb\x9e\xee\xd2\xa9\x3c\x9d\xeb\xd4\x05"
- "\xaa\xc1\xe9\xd4\x5b\xaf\xb2\x4e\xd5\xf6\xa3\x53\xb5\xff\x62\x3a"
- "\xf5\x79\xc3\x75\x99\x3f\x90\xcc\x5f\xa0\xf5\x5f\xe6\xbf\xe0\xd5"
- "\xff\xdd\xc0\x32\x7f\xe1\x0c\x97\xcc\x5f\x38\xc3\xbb\xcc\x4f\xd8"
- "\x7d\x5d\xe6\xf7\x25\xf3\x9f\xaf\xf0\x5f\xe6\x27\x18\x3d\x65\xfe"
- "\xc2\xf3\xbe\xc9\xfc\x85\x81\x43\x2f\xf3\x17\x86\x79\xca\xfc\x85"
- "\x66\x5e\xa7\xf8\x27\x06\x2f\xf3\x17\xee\xf5\x2e\xf3\x17\x1e\xf0"
- "\x94\xf9\x0b\x8b\xb9\x6c\x5f\x68\xe3\x32\x7f\x61\x39\x4f\x8f\x9f"
- "\xe9\x9e\xee\x92\xf9\x3c\x9d\xcb\xfc\x17\xc9\xe0\x64\x7e\xe8\x55"
- "\x96\xf9\xea\x7e\x64\xbe\xfa\x5f\x4c\xe6\xeb\xbd\x9e\xff\x1c\x58"
- "\x26\xbd\xd4\xe4\x92\x49\x2f\x35\x79\x97\x49\x2f\xc5\x5c\x97\x49"
- "\x7d\xc9\xa4\x17\xc3\xfc\x97\x49\x2f\x85\x7b\xca\xa4\x97\xb3\x7d"
- "\x93\x49\x2f\x6d\x1e\x7a\x99\xf4\x52\x99\xa7\x4c\x7a\x39\x89\xd7"
- "\x49\xff\xcd\xe0\x65\xd2\xcb\x73\xbc\xcb\xa4\x97\x9f\xf5\x94\x49"
- "\x2f\x8b\x6b\x50\x2f\x1b\xb9\x4c\x7a\x79\x1a\x4f\xd7\x9b\xdd\xd3"
- "\x5d\x32\x89\xa7\x73\x99\xf4\xf2\xa6\x81\x64\x12\x62\xbf\x56\xd3"
- "\x03\xfb\x2f\x4b\xd8\x5f\xd2\xf6\x69\xb1\x84\xfd\x25\x6d\x6c\xbf"
- "\x5b\x71\x8c\x65\x43\x32\x51\xe4\x62\x9c\x0b\xe8\xef\x86\xff\x40"
- "\xec\x2f\x59\x80\xfb\x16\x54\x4d\x20\xc3\x5a\x44\x99\x96\x02\x32"
- "\xad\x05\xee\xd1\x0f\xd4\xb8\x18\x0b\xca\x22\x5c\xff\xc7\x7b\x2e"
- "\xdb\xac\x81\x78\x5e\x72\x50\x67\x99\x5a\xc4\xb3\x4c\xf1\xbd\xcf"
- "\x32\x15\xbb\x9d\x99\xc1\xbe\x11\xbc\x46\x16\x82\xeb\xba\x20\xdf"
- "\x44\x39\x56\x1d\xe8\x50\x8a\x72\xec\x02\xc8\xb1\x0b\xae\x3e\x81"
- "\x72\xec\x1c\xc8\x31\xdb\x0a\xdd\x78\x94\x65\xbd\xcf\x31\xf1\x75"
- "\x5c\x26\xc7\xb2\x7b\xc8\xb1\x17\x7b\xc8\xb1\x85\x20\xc7\xe2\x40"
- "\x8e\x05\xb9\xfa\xc3\x1d\x4d\x44\x3e\x73\x01\xf4\x09\x90\x63\xbf"
- "\xbf\x80\x72\x6c\xbf\x9f\x72\x6c\xc9\x24\xcf\xfe\xb0\x74\xb3\x6f"
- "\xfd\x61\xc9\x76\x6f\xfd\xa1\x2b\xcf\xdf\xfe\xb0\xa4\xc2\xb3\x3f"
- "\x2c\x5d\x27\xf6\xd1\xa3\x83\xef\x0f\x4b\x13\xba\xfb\xc3\xcb\x3d"
- "\xfb\xc3\xd2\x25\x9e\xfd\x61\x69\x14\xc7\xfd\xd2\x22\xde\x1f\x96"
- "\xce\x16\xfb\x49\x93\x7b\xba\xab\x3f\xf0\x74\xde\x1f\x96\x6e\xbd"
- "\xbe\x3e\x7b\xad\xea\x68\x83\xf2\xfa\xfa\xec\x40\xe3\xb2\xa5\x15"
- "\xfe\x8f\xcb\x5e\xb9\x4a\xeb\xdf\x3f\xa4\xb9\x64\xc3\x2c\xff\xe9"
- "\x9b\x78\x95\xd6\xbf\x7f\x48\xf3\x0a\xaf\x5c\xc2\xfa\x77\x52\xbf"
- "\xeb\xdf\xfd\xdb\x31\xc9\x15\x35\xdd\x36\x7c\x72\x85\xb4\xe7\xb2"
- "\xb7\x0d\x9f\x7c\x8f\xe7\xf9\xa5\xa4\x23\x3d\xf7\x43\x0e\x64\xdb"
- "\x3b\xfe\x57\xd9\xf6\xaf\xaa\xfd\xb7\xed\x97\xdb\x3d\x6d\x99\x15"
- "\x09\xbe\xd9\x32\xc9\xcb\xbd\xd9\x32\x0e\xbf\x6d\xfb\xe4\x75\x9e"
- "\xb6\xcc\x8a\x59\x22\xff\xb7\x0d\xde\x96\x59\x71\x9f\x77\x5b\x66"
- "\xc5\xcf\x3c\x6d\x99\x15\x2a\x6e\xb3\xac\x88\xe7\xb6\xcc\x0a\x2d"
- "\x4f\x4f\xda\xea\x9e\xee\xb2\x65\x78\x3a\xb7\x65\x56\x18\xae\xaf"
- "\xdb\x5e\xab\xb6\x4c\x4a\xc3\x75\x5d\x3b\x90\x2e\x58\xb1\xce\x7f"
- "\x5d\xb0\x6a\xca\x75\x5d\x3b\x10\x7d\x57\x86\xfb\x4f\xdf\xd7\x36"
- "\xf9\xaf\x6b\xd3\x26\xb8\x74\x6d\xda\x04\xef\xba\x76\xf5\x66\x4f"
- "\x5d\x9b\x3a\xfd\xba\xae\xed\x4f\xd7\xae\x4a\xf5\x5f\xd7\xae\x8e"
- "\xf7\xd4\xb5\x69\x07\x7d\xd3\xb5\xab\xbf\x19\x7a\x5d\xbb\xda\xea"
- "\xa9\x6b\xd3\x2a\x45\xfe\x8f\x1a\xbc\xae\x4d\xdb\xe2\x5d\xd7\xa6"
- "\x6d\xf3\xd4\xb5\x69\xe2\x19\xfa\xb4\x7a\xae\x6b\xd3\x72\x79\x7a"
- "\xaa\xda\x3d\xdd\xa5\x6b\x79\x3a\xd7\xb5\x69\x03\x9d\xff\xb9\xbe"
- "\x9e\x7b\xd5\x74\x6d\x46\xd4\x75\x5d\x30\x90\x2e\x48\xb3\xfa\xaf"
- "\x0b\xd6\x94\xfa\xaf\x0b\xd6\x45\xb8\x74\xc1\xba\x08\xef\xba\x60"
- "\xed\x36\x4f\x5d\x90\x19\x73\x5d\x17\xf4\xa7\x0b\x32\x8c\xfe\xeb"
- "\x82\xb5\x06\x4f\x5d\xb0\xee\xa8\x6f\xba\x60\xed\xe9\xa1\xd7\x05"
- "\x6b\x1d\x9e\xba\x60\x5d\xb5\xc8\xff\x71\x83\xd7\x05\xeb\xb6\x7b"
- "\xd7\x05\xeb\xfe\xe6\xa9\x0b\xd6\xad\xe3\x32\x7f\x5d\x13\xd7\x05"
- "\xeb\x8a\x78\x7a\x66\xb8\x7b\xba\x4b\x17\xf0\x74\xae\x0b\xd6\x59"
- "\xae\xaf\xf3\x5e\xab\xba\x20\x6b\xa6\xff\xb2\xca\xd8\xe4\x92\x55"
- "\xc6\x26\xef\xb2\xca\x18\xe3\x29\xab\xb2\x9c\xd7\x65\x55\x7f\xb2"
- "\x6a\x9d\xc3\x7f\x59\x65\xec\xb1\xfe\x9b\xed\xe3\xfa\xaf\xd1\xeb"
- "\xfa\xaf\xff\xb2\xca\xd8\x63\xfd\x37\x5b\x5c\xff\xcd\x3a\x30\x78"
- "\x59\x95\x3d\xc7\xbb\xac\xca\xee\xb1\xfe\x9b\x2d\xae\xff\x66\x8b"
- "\xeb\xbf\xd9\xe2\xfa\x6f\x56\xb5\x7b\xba\x4b\x56\xf1\x74\x2e\xab"
- "\xb2\x2f\x71\xfd\x37\x57\xe1\x5a\xff\xcd\x65\x67\x06\x84\xa2\x8d"
- "\x9a\xde\xeb\xbf\x1b\x56\xe2\xfa\xaf\xab\x4f\xe4\xdc\xc8\xd6\x82"
- "\xb1\x5f\xd8\xb8\x5f\x91\x3e\xd7\x85\xc7\x6c\xd4\x5c\x5f\x17\x1e"
- "\x8a\x75\xe1\x0d\x3d\xfc\xf9\xe4\xfe\xcd\xb7\x7e\xb2\x61\xef\xd0"
- "\xaf\x0b\x6f\xa8\xf7\xec\x27\xb9\xc5\x62\xdf\xf5\x63\x5d\x38\x77"
- "\xb5\xf7\x7e\x92\xfb\x5b\xcf\x7e\x92\x2b\xee\xcb\xcd\x2d\xe7\xfd"
- "\x24\x77\xb1\xd8\x7f\x9a\xdc\xd3\x5d\xfd\x24\xdb\x6d\x5d\x38\xb7"
- "\xd2\x17\x9d\xee\x50\x15\xce\x46\x1d\x3d\xa9\xf1\x61\x67\x37\x9e"
- "\x93\x44\x3c\xf7\xa5\xd3\x9f\xe7\xb2\x1f\x71\xdc\xb5\x35\xc6\x36"
- "\xa0\x4e\x6f\x11\x75\x7a\x7c\x6f\x9d\x2e\xe9\x73\xc4\xf3\x9b\x3e"
- "\xad\x09\xf7\xc0\xf5\xa0\xf4\xf9\x5d\xf5\x97\x82\x6b\xc4\xb4\xa7"
- "\x3e\xf7\x17\xd7\xf9\x57\xe9\xfc\xcb\x0f\x69\x4d\x38\xb7\xde\xff"
- "\xb1\x5d\xc1\x55\x3a\xff\xf2\x43\x9a\xa7\xce\xbf\x84\xf3\x2f\x85"
- "\xfd\x9e\x7f\xb9\x3e\x37\x81\xf4\x2d\xd8\xe7\x3f\x7d\x7f\xe7\x35"
- "\xfe\xeb\xc0\xb6\xcd\xa6\x36\x97\xbd\xbf\xa9\x4d\xb2\x6d\x24\x7f"
- "\x69\x20\x33\x15\x79\x89\x70\x5d\x20\x64\x43\x22\xf3\xf5\xad\x34"
- "\xb5\x1c\x26\x86\x34\xb4\x77\x36\x2d\x88\x4e\x71\xb7\x77\x7e\x2f"
- "\x93\x6c\x9d\x68\xb4\x83\xc0\xae\x41\x9b\x46\xb2\xf1\xd1\x37\x4e"
- "\xbf\xfb\x41\xef\x8c\xb1\xe1\x98\xa0\x2b\xb8\x70\xf6\xbf\xfe\x78"
- "\x60\xe3\x04\xff\xc7\x03\x9b\x7a\xec\x7f\x7b\xdd\xc7\xfd\x6f\x9b"
- "\xbc\xee\x7f\xf3\x7f\x3c\xb0\xa9\xc7\xfe\xb7\xd7\xc5\xfd\x6f\xbf"
- "\x7b\x6f\xf0\x76\xce\xeb\xfd\xec\x7f\x7b\xbd\xc7\xfe\xb7\xd7\xc5"
- "\xfd\x6f\xaf\x8b\xfb\xdf\x5e\x17\xf7\xbf\xfd\xae\xc2\x3d\xdd\x65"
- "\xe7\xf0\x74\x6e\xe7\xbc\xee\xd3\xfe\x37\xb0\x73\x62\x2f\xc1\xce"
- "\xb1\xff\x70\xec\x1c\xdd\x35\x62\xe7\xfc\xa7\xd7\xf8\x87\x6e\x7a"
- "\x62\x76\x0f\x3d\x61\xfb\xdf\xa5\x27\x5e\xbf\x84\xbd\x6f\x45\xfd"
- "\xee\xff\x67\xf4\xcd\x75\xa3\x2f\xca\x68\x91\xb6\xce\x09\x31\x36"
- "\xbf\xe8\x0b\xb2\x79\x4b\xda\x0f\x85\xb6\xff\x39\xd3\x7f\xda\x6e"
- "\xae\xba\x6e\xe3\x0c\x44\xdf\xa2\x1d\xfe\xd3\xf7\x4d\xad\xff\x36"
- "\xce\x16\xeb\xa7\xdd\x36\xce\x16\x6b\x4f\x1b\x07\x6d\x9a\x27\xec"
- "\xdc\xd6\xd9\x00\x36\x4a\xce\x52\xb0\x77\x92\x09\x31\xb5\xec\x26"
- "\xb9\x60\xf3\xe4\x9c\x01\xbb\x67\x31\xd8\x3d\x8e\x6d\xa2\xdd\xb3"
- "\x25\xc1\xd3\xee\x79\xf3\x62\x9f\x76\x4f\xb0\xcb\xee\x71\x80\x4d"
- "\xd3\xb5\x2d\xc6\x56\x78\xc6\xcd\x06\x7a\xa9\xb7\x0d\xd4\x99\x07"
- "\x3a\xe7\xce\x18\x7b\x17\xd8\x41\xfd\xd9\x40\x8c\xf7\x3d\xec\xa0"
- "\x1f\x9e\x0d\xf4\x86\xd2\x7f\x1b\x68\x4b\x84\xa7\x0d\x54\xb2\xc5"
- "\x37\x1b\x68\xcb\xdb\x5e\xe7\x7a\xfc\xb6\x81\xb6\x54\x7a\xda\x40"
- "\x25\x46\x11\x17\x5b\x06\x6f\x03\x95\x2c\xf2\x6e\x03\x95\xbc\xe2"
- "\x69\x03\x95\x4c\xe3\xb6\x4e\x49\x31\xb7\x81\x4a\x62\x79\xfa\x9b"
- "\xc5\xee\xe9\x2e\x1b\x88\xa7\x73\x1b\xa8\xa4\xcc\xc7\xf5\x9b\xd9"
- "\x0e\xd0\xb1\x57\x7f\xdf\x5c\x7f\xeb\x37\x43\xb5\x6f\xee\xae\x6b"
- "\x64\xfd\xa6\xb4\xdf\xf8\x87\xd7\xf5\x74\x49\xa5\xff\x7a\xe4\x8f"
- "\x57\x69\xff\xff\x0f\x49\x4f\x97\xce\xf6\x9f\xbe\xff\xd5\xef\xfe"
- "\xff\xfe\xf5\xf4\xb6\x14\xd7\x5c\xc4\xb6\x94\xc1\xcd\x45\x6c\x3d"
- "\xed\xa9\x93\xff\x3b\xef\xfa\x5c\x84\xaf\x7a\xf8\x8f\xe5\xfe\xeb"
- "\xe1\xad\x15\x9e\x7a\xf8\x4f\x77\xfa\xa6\x87\xb7\x3d\x30\xf4\x73"
- "\x11\xdb\xa6\x79\xea\xe1\x3f\x49\x58\x98\x3e\x78\x3d\xbc\xed\xac"
- "\x77\x3d\xbc\xed\xa2\xa7\x1e\xde\x56\xc3\xf5\xed\x9f\x26\x70\x3d"
- "\xbc\xcd\xcc\xd3\xff\x7b\x9a\x7b\xba\x4b\x0f\xf3\x74\xae\x87\xff"
- "\x14\x31\xb8\x35\x97\x5b\xaf\xd1\x35\x17\xed\xbf\xd8\x9a\xcb\xff"
- "\x2d\xbc\xae\x27\x06\xd2\x13\x7f\x9a\xe6\xbf\x9e\x28\xb3\xfa\xaf"
- "\x27\xfe\x52\xea\xd2\x13\x7f\x29\x1d\x9c\x9e\xf8\xcb\x8d\x9e\x7a"
- "\x62\xfb\xbb\xd7\xf5\x84\xaf\x7a\xe2\xff\x36\xfa\xaf\x27\xfe\x6c"
- "\xf6\xd4\x13\x3b\x9e\xf0\x4d\x4f\xfc\xe5\xd9\xa1\xd7\x13\x7f\x59"
- "\xec\xa9\x27\x76\x44\x8a\x58\x58\x32\x78\x3d\xb1\x63\x8c\x77\x3d"
- "\xb1\xe3\x36\x4f\x3d\xf1\x17\x1b\xd7\x07\x3b\x66\x72\x3d\xb1\x43"
- "\x4c\xdf\xbe\xd8\x3d\xdd\xa5\x27\x78\x3a\xd7\x13\x3b\x62\xaf\xef"
- "\xb7\xbb\x56\xf7\xdb\xbd\x5d\xe9\xbf\x2c\x2b\x9f\xe9\x92\x65\xe5"
- "\x33\xbd\xef\xb7\x7b\x67\xaf\xe7\x7e\xbb\xbf\x2e\xb9\xbe\xdf\xae"
- "\x3f\x59\xb5\x63\xb1\xff\xb2\xea\x9d\x5c\x4f\x59\x55\x7e\xd1\x37"
- "\x59\x55\x1e\x34\xf4\xb2\xaa\x5c\xe3\x29\xab\xca\x5b\x44\xfe\xff"
- "\x6c\xf0\xb2\xaa\x7c\xbf\x77\x59\x55\x5e\xeb\x29\xab\xca\x4b\xb9"
- "\x4c\x2a\xb7\x73\x59\x55\xbe\x93\xa7\xff\x35\xd2\x3d\xdd\x25\xab"
- "\x78\x3a\x97\x55\x7f\xf3\xc9\xff\xbf\x6b\x7d\xcd\x2f\x9b\xf6\x0a"
- "\xac\xaf\x0d\x95\x4d\x7b\xad\xac\xaf\xfd\xcf\xf5\xf5\x9f\x7e\xed"
- "\xd9\xbf\x5d\x82\xdf\xff\xff\xd7\xef\xfa\x4f\xff\x3a\x60\x97\xd1"
- "\xa5\x03\x76\x19\xbd\xad\x4f\xe4\x00\x86\x72\xc1\x1e\xcd\x3e\x43"
- "\x14\x1b\x70\x7d\xa2\xa1\x96\xe4\xe1\xfa\xc4\x52\x69\x7d\x62\x8b"
- "\x68\xe3\xbe\xeb\xf4\xb4\x71\x77\x6e\xee\xcb\xc6\x45\xdb\xd6\x09"
- "\x76\xab\xa3\xe7\xba\xc4\x7f\xf4\xad\x3b\x3a\x83\x0b\x63\x2f\x6e"
- "\x8b\xb1\x0f\x46\x77\xbc\xb9\x8a\xeb\x8e\x37\x7e\x50\xba\xe3\x7f"
- "\x76\xf8\xaf\x3b\xde\xed\x11\xcf\xf7\xef\x0f\xf8\xa6\x3b\x76\x4d"
- "\x1f\x7a\xdd\xb1\x6b\xb6\xa7\xee\xf8\xbb\x56\xc4\xc3\x43\x83\xd7"
- "\x1d\x7f\x97\x79\xd7\x1d\x7f\x0f\xf2\xd4\x1d\xbb\xc4\xbd\xa6\x7f"
- "\x9f\xc2\x75\xc7\x2e\x2b\x4f\xdf\x39\xd5\x3d\xdd\xa5\x3b\x78\x3a"
- "\xd7\x1d\x7f\x8f\x1a\xdc\x7c\x48\xe8\x35\x3a\x1f\xa2\xfe\x17\x9b"
- "\x0f\xa9\xb8\x84\xf3\x6f\xef\xcf\xa8\xe9\xde\x3f\xff\xfe\x8c\x5e"
- "\xe3\xf5\x64\xb0\x75\xdb\xf9\x9a\x6b\xf7\x78\xdd\x7c\x54\x94\x65"
- "\xff\xd8\xed\x29\xcb\xde\x4b\xf0\x26\xcb\xfa\x5b\x57\xc5\xf1\xb9"
- "\x13\xe4\x9c\x63\x8b\x9f\xeb\xaa\xc9\x3f\x24\xf9\xf5\xf7\xd9\xfe"
- "\xcb\xaf\x7f\xf4\xf0\x7f\xfa\xbe\x8f\xfe\x4f\xdf\xf7\xea\xff\xd4"
- "\xe1\xf7\x1e\xfa\xf7\x7b\xf8\x3f\x7d\x5f\xf4\x7f\xfa\x9e\x1f\xe7"
- "\xe2\xde\xdf\xeb\x5d\x7e\xbd\xdf\xc3\xff\xe9\xfb\xe2\xfa\xe9\xfb"
- "\xa2\xff\xd3\xf7\x45\xff\xa7\xef\x85\xbb\xa7\xbb\xe4\xd7\x7b\x6e"
- "\xe7\xe2\x2a\xfb\xf5\x7f\x4a\x73\xe7\xc6\x16\xca\x85\x72\xb8\x2a"
- "\xa0\x8e\x63\x00\x03\x55\xf0\x7f\x35\xf0\x71\x14\xfc\xef\xd5\x67"
- "\xb0\x35\x78\x6e\xac\x90\x09\x75\x96\x13\x99\xc9\xfa\x7d\x55\xd5"
- "\x58\x07\x7c\xb7\x32\x83\xf3\x6a\x6e\x6c\xa8\x63\xf8\x0c\x81\xea"
- "\x09\xf0\x25\x96\xc5\x57\x83\xfc\x21\x80\x19\x6d\x32\x09\x39\x23"
- "\xab\x2c\x95\xf2\x41\x7d\x43\x9a\x65\x95\xcf\x62\x19\x50\xd7\x1d"
- "\x66\x59\xa5\xca\x6b\x5d\xa1\xac\xe8\xed\xe3\xc9\x6a\x07\x3d\x51"
- "\xb5\xb4\x9d\xb4\xc8\x2a\xcf\x87\xb6\x0d\x9f\x41\xd3\x63\x09\xda"
- "\x58\xe5\x63\xad\x0a\x2c\x13\x63\x2f\xc2\xb3\x46\x7c\xe6\x84\x3a"
- "\xa6\x2d\x21\xf2\xfc\xf6\xe1\x4a\x90\x05\x81\xe9\x36\x6a\x59\xe6"
- "\x80\x3a\xa7\x38\xc8\x9e\xf1\x8d\x8a\x77\xde\x80\x34\x27\xd1\x60"
- "\x7c\x3b\x2c\x03\x6c\x4c\xac\xcf\xc5\x12\xc8\xdf\x57\x1d\x7e\xfb"
- "\x57\x32\x29\x70\x22\x35\x0f\x0e\x37\xbb\xbd\x9e\x7f\x0b\x5d\x33"
- "\x9e\x54\xdd\x0d\xb4\xd3\x12\x79\x5f\xcf\x07\xf9\x9d\x9d\xfd\xc8"
- "\x44\x25\xc6\xc1\x4c\xdf\x4c\xe4\x05\xc2\x70\xe5\x47\xa9\x2c\x56"
- "\xa5\xb5\x23\xeb\x03\xad\x59\x36\xb1\x1a\x69\x8e\x31\xd3\x30\xf6"
- "\x2f\xe0\x86\x40\x7a\xe4\xde\x14\x42\x7a\xf2\x22\x31\x7e\xc9\x02"
- "\x6d\xd2\xa2\x25\x09\xcb\x96\x27\x69\xef\x8c\x1f\x41\x66\x2f\x5b"
- "\xa6\x5d\xb2\x60\xe9\x4a\xad\xfb\x93\x07\xb5\xf1\x8b\x5e\x5d\xf0"
- "\xfc\xe2\x84\x7b\x96\xbc\x60\x18\x01\x75\x22\x6e\xf5\x08\xc3\xba"
- "\x08\x59\x1f\x4c\x2b\xf9\x1d\x21\xbf\x1f\x4d\x14\x58\x2f\xf8\x5e"
- "\x99\x14\x1f\x0f\xe3\xc3\xc9\x21\x4f\x3a\xc8\xc0\x82\xb4\xe1\x90"
- "\x77\xf7\xce\xb7\xa0\x5e\x25\x50\x6f\xa8\x23\xd6\xb9\x41\xaa\xb3"
- "\x84\x89\x74\xc4\x44\x5a\x3b\x60\xf0\x83\xf3\xa1\xf6\xe1\xff\x4e"
- "\x69\x2c\xb6\xcf\x06\xfd\x44\xd6\x2a\xdb\x33\x1d\xf5\x12\xcd\x9b"
- "\x1b\xdb\x91\xb5\x47\x2d\x61\x0c\xdf\xa5\xf9\x73\xb5\x1d\xd8\x4f"
- "\xa8\xfe\xe7\xbc\x4f\xed\xb1\xcc\xd1\xc9\x08\x8f\xcf\xb7\x67\xaa"
- "\x2b\x3e\xdf\x1e\x0b\xd2\x16\xea\xd1\x06\xe9\xb3\xcd\xa4\xab\x1e"
- "\xd3\x31\x4e\x24\xc6\xd9\xc3\x3a\x43\xbb\x40\x2f\xd2\x2a\x9a\x29"
- "\x62\xdf\xb8\x2d\x52\x30\x7e\x58\x6e\x52\x5c\x20\xd1\x0e\xda\x45"
- "\xb3\xb7\x45\xd6\xd9\x6c\x24\x74\x8d\xe1\x05\x3a\xec\x83\x39\xa1"
- "\x8e\x45\x09\x18\x1f\x50\xc8\xfe\xb0\x9c\x66\x57\x26\xcd\x99\x48"
- "\xd4\x50\x76\xb9\x5b\x9c\x40\xc5\xe0\xf8\xbf\x87\xf1\x1f\xf9\x88"
- "\xf1\xff\x38\x1f\xab\xc8\xde\xa4\xde\x7c\xec\xc6\xdf\x76\x81\xec"
- "\x07\x2c\x50\x55\x56\x69\xb4\x93\xd3\x11\xfb\xee\xb9\x74\x3d\xb9"
- "\x97\xd1\xae\xaa\x42\xc8\xcf\xca\x10\x72\xb3\x2a\x68\x6e\xd6\x56"
- "\xa0\x59\x64\x7e\x32\xd1\xce\x77\xaa\x49\xde\x05\x12\x61\xcd\xcb"
- "\x2a\x0d\x96\x65\xc8\xc0\xb6\x90\x83\xde\x88\x00\x99\x11\x21\xf6"
- "\xf7\x48\xa4\xe3\xc7\x6d\x84\x3c\xf9\x2a\x21\x27\xa6\x92\x80\x12"
- "\x78\x6f\x70\xed\xa9\xe2\xfe\x9f\xb2\xaa\xa6\xbe\x05\xef\x62\x9c"
- "\xc7\x41\xbe\xbf\xcf\x6b\xbf\xeb\x6e\xf7\x7a\x6d\xdf\xed\xde\x5b"
- "\x2e\xe4\xaf\x87\xf1\xe6\xfa\x48\x9a\xbb\x7e\x42\xef\x76\xaf\xd7"
- "\xf2\x76\x07\xb6\x0f\x7d\xbb\xf7\xa6\xf2\x76\xef\x9d\xe2\x5f\xbb"
- "\xf7\x7a\x9d\xff\x73\x6b\xb7\x17\x7e\x7f\x58\x06\xed\x06\x7e\xaf"
- "\x07\x7e\xaf\xef\x83\xdf\xeb\x45\x7e\x8f\x6c\x1e\xfa\x76\x7f\x98"
- "\xc4\xdb\xfd\xe1\x24\xff\xda\xfd\xa1\x57\xf9\xe7\x6a\xb7\xd1\x0b"
- "\xbf\x3f\x2a\x15\xf2\x8d\xc0\x6f\x23\xf0\xdb\xd8\x07\xbf\x8d\x22"
- "\xbf\x47\x1d\x1a\xfa\x76\x7f\xc4\xe7\xff\xb3\x3e\x9a\xe0\x5f\xbb"
- "\x3f\xda\xe1\x43\xbb\xbd\xf0\x7b\x5f\x11\xb4\x1b\xf8\x6d\x04\x7e"
- "\x1b\xfb\xe0\xb7\x51\xe4\xf7\x4f\x73\x86\xbe\xdd\xfb\xb8\xff\x9b"
- "\xac\x7d\xe1\xfe\xb5\x7b\xdf\xd6\x81\xdb\x9d\xed\x85\xdf\xfb\x0b"
- "\x85\xfc\x6c\xe0\x77\x36\xf0\x3b\xbb\x0f\x7e\x67\x8b\xfc\x7e\xe6"
- "\xd1\xa1\x6f\xf7\xfe\x79\xbc\xdd\xfb\xc3\xfc\x6b\xf7\xfe\xe2\x81"
- "\xdb\x9d\x55\x06\x32\xbb\x17\xcf\x4d\x29\x91\x64\xf2\x05\x6c\xff"
- "\xc7\x84\x06\x67\x95\x8d\x5c\x93\x21\x73\xa8\xb2\x76\x8c\x6c\x22"
- "\x72\x18\xfb\xe9\x43\xcd\x24\x08\xda\xaa\xa7\xf9\x1b\xa2\xf0\x57"
- "\x80\x72\x1c\x20\xfb\x9d\xaa\xac\xad\x9d\xb9\x73\x23\x37\x2c\x24"
- "\xda\x74\x2b\x51\xd7\xa5\x99\x49\x9a\x81\x5a\xeb\xc8\x37\x24\xd8"
- "\x4c\xe4\x38\x8f\xf5\x69\x5b\x05\x59\x9a\x48\x69\xab\xec\x9f\x27"
- "\x71\xbc\x98\xdf\x4a\x22\xc0\x26\xce\xa0\xa0\x3f\x0a\x05\xa2\x85"
- "\xf2\x23\x90\x96\x50\xf6\xa3\xa1\xb3\x89\xec\x83\xe7\xed\x04\xe9"
- "\x89\xb4\x85\xb1\x65\x04\xa3\xab\x8d\x90\x5f\x3d\xc3\xe9\xfa\xe6"
- "\xc2\xc1\xd2\xf5\x9f\x3b\xb9\x5d\x99\x55\x65\x32\x77\x12\xb0\x2d"
- "\xd5\x78\xae\x19\xd2\x0d\x75\x86\x76\x18\x87\xfc\x33\x8c\xe6\x65"
- "\x95\x0b\xa0\xb3\x06\x57\xee\xc7\x5e\xf7\xbf\xb9\xc9\x53\x1d\xc8"
- "\xcc\x5e\x58\x73\xd1\xbb\xda\x40\x83\xd7\xeb\x38\xbd\xd7\x4f\x1a"
- "\xd9\x14\xd8\xde\x37\xbd\xd7\xeb\x1c\xa0\x73\x9c\xaa\xf5\x13\x7c"
- "\xa7\x77\xf5\xd3\x9e\xf4\x5e\x4f\xae\x0c\xbd\xab\xb9\x1f\xb1\xdc"
- "\xf5\x51\x9e\xf4\xfe\xd8\xcc\xe9\xfd\xf1\x3a\x9a\xb7\x3e\x42\x00"
- "\x5d\x39\xc8\x72\xbd\x9e\x7f\x74\xa3\x37\xe0\xbb\xb7\x0e\x73\xd1"
- "\xfb\x80\x19\xe8\x2d\xe2\x7b\x3d\xe0\x7b\x64\xb3\x17\x7a\x03\xbe"
- "\xd7\x03\xbe\xd7\x0f\x02\xdf\x07\x0e\xf4\xa0\xf7\x15\xc2\xf7\x01"
- "\x31\xfe\xd3\xfa\x1e\xf8\x3e\x30\x8b\xd3\xbb\xda\x06\xf4\x06\x7c"
- "\xaf\x1f\x24\xbe\x0f\xb4\xf9\xa0\x3f\x00\xdf\xbd\x75\xa7\x8b\xde"
- "\x9f\xce\xa2\xc1\x46\x11\xdf\x46\xc0\xf7\xa8\x43\x7d\xd3\xdb\x08"
- "\xf8\x36\x02\xbe\x8d\x83\xc0\xf7\xa7\x3f\xf3\xa4\xb7\xf1\x0a\xe1"
- "\xfb\x53\x05\xa7\xb7\xb1\x07\xbe\x3f\xa9\xe2\xf4\xfe\x24\x9e\xe6"
- "\x19\x01\xdf\xc6\xc1\x96\x3b\xcf\x07\x7a\x03\xbe\x7b\xeb\x6c\x17"
- "\xbd\x6b\xaa\x80\xde\x22\xbe\x8d\x80\xef\x9f\xe6\x78\xa1\x37\xe0"
- "\xdb\x08\xf8\x36\x0e\x02\xdf\x35\xdb\x7b\xd0\xfb\x0a\xe1\xbb\x26"
- "\x49\xa4\x77\x0f\x7c\xd7\x44\x70\x7a\x7f\xda\x00\xf4\x06\x7c\x1b"
- "\x07\x89\xef\x9a\x1a\x1f\xec\x04\xc0\x77\x6f\x5b\xc1\x45\xef\xba"
- "\x08\x1a\x9c\x2d\xe2\x3b\x1b\xf0\xfd\xcc\xa3\x7d\xd3\x3b\x1b\xf0"
- "\x9d\x0d\xf8\xce\x1e\x04\xbe\xeb\xc6\x78\xd2\x3b\xfb\x0a\xe1\xbb"
- "\xb6\x85\xd3\x3b\xbb\x07\xbe\x6b\x4b\x39\xbd\x6b\xa7\xd1\xbc\x6c"
- "\xc0\x77\xf6\x20\xcb\xad\xf3\x7a\xfe\xb7\x3f\xfb\xe4\xd5\x2d\x44"
- "\xe9\x49\x73\xd3\xd6\xcb\x67\xa3\x98\xf2\xae\x8e\x8d\x62\x8a\xed"
- "\xdb\x46\x31\x85\x71\x9a\xd7\x55\xf8\x67\xa3\x98\xca\xfd\xb1\x51"
- "\x7a\xd3\xfc\xa0\xe6\xf2\xd9\x29\x07\x65\x57\xc7\x4e\xa9\xaf\xe9"
- "\xdb\x4e\xa9\x37\x72\x9a\xd7\x4f\xf2\xcf\x4e\x39\x38\xc1\x1f\x3b"
- "\xa5\x37\xcd\x0f\xe5\x5e\x3e\x5b\xe5\xd0\xf2\xab\x63\xab\x1c\x8a"
- "\xea\xdb\x56\x39\xe8\xe0\x34\x3f\x58\xea\x9f\xad\x72\xa8\xc8\x1f"
- "\x5b\xa5\x37\xcd\x1b\xc8\xe5\xb3\x57\x3e\x3b\x79\x75\xec\x95\xcf"
- "\x76\xf6\x6d\xaf\x7c\x26\x8e\x7f\x3e\x0b\xf3\xcf\x5e\x69\xf0\x61"
- "\xfc\xd3\xdb\x5e\xe9\x4d\xf3\xc3\x49\x97\xcf\x66\x39\xfc\xec\xd5"
- "\xb1\x59\x0e\xeb\xfa\xb6\x59\x1a\x5a\x38\xcd\x1b\x8c\xfe\xd9\x2c"
- "\x87\x33\xfc\xb1\x59\x7a\xd3\xfc\x73\xcb\xe5\xb3\x5b\x3e\x3f\x78"
- "\x75\xec\x96\xcf\x8b\xfb\xb6\x5b\x3e\x8f\xe5\x34\x3f\xec\xf0\xcf"
- "\x6e\xf9\xdc\xe6\x8f\xdd\x82\xb4\x46\x9a\xa3\xad\xc2\x69\x7e\xa4"
- "\x82\x86\x64\x65\x74\x81\x3d\x12\x0c\x74\x0f\x6e\x23\xf2\x2d\x48"
- "\xf3\x46\x4e\x73\x67\xc8\x86\x28\xa0\x8f\x1e\x69\xc6\xda\xf1\x9d"
- "\x26\xc4\x99\x9b\xb5\x83\xca\x09\xb4\x45\x49\x5a\x65\x5f\xec\x77"
- "\x64\x92\x10\x6d\xda\x1a\xf8\xff\x08\xf3\x9f\xa9\x4d\xcb\x3a\x0a"
- "\x6d\x0c\xc0\x35\x0a\x47\xde\x1c\xb3\x33\x38\x27\x0e\x9e\x05\xd2"
- "\x71\x31\xe6\x2e\xb0\x25\xe8\xcb\x9a\x30\x53\x5b\x39\x31\x39\x3e"
- "\x21\x75\x8d\xff\x20\x42\xc8\x86\x47\xef\x75\x10\x1d\xfd\x4e\x17"
- "\x56\x93\x64\x26\xce\x17\x34\x2a\x53\x4a\x35\xe0\xe2\x7f\x48\xb4"
- "\x85\x5e\xa0\xdf\xea\x54\x5d\xc1\x05\xa5\xce\xe0\x0d\x5a\x67\x5e"
- "\xa1\xde\x11\x5c\x50\xf8\x76\xb2\x59\xae\xb2\x13\xdd\xe2\x16\x4a"
- "\xf3\x9f\x27\x8a\xfc\x66\xa2\x2c\x78\x9e\xa8\x0a\x9a\x89\xba\xa6"
- "\xa5\x91\xd4\x9e\xaa\x26\xb5\xed\x47\x48\xed\x05\xb8\x3a\xe1\x12"
- "\xe0\xca\x38\x42\x6a\x60\xf4\xf8\xc4\x69\x42\xd2\x5b\xa8\xf5\xc7"
- "\x4d\x24\xac\xc6\xd1\x48\x70\x1f\xef\x19\x59\xe3\x66\x55\x1c\x09"
- "\xa3\xdf\x6a\x08\x7d\x41\x23\x87\x67\x0a\x4c\x37\x39\xac\xa4\xa6"
- "\xc5\x8e\xcf\x53\xe0\xb9\x22\xbd\x05\xca\x17\xaa\xd1\x5f\x9c\xb5"
- "\x26\xe3\x00\xb4\x2f\xb0\x1e\xe8\x5c\x21\xd9\x64\xf9\x9d\x24\xa2"
- "\x00\xd8\x8c\x98\x89\xa6\x1c\x33\x6f\x75\x0e\x16\x33\x8d\xdc\xff"
- "\xd9\xcb\x9a\xd1\x40\xef\xb1\xc2\xcb\xb1\xea\x27\x8f\x1c\xa3\xb8"
- "\x4f\x0b\xd7\x67\xea\x6c\x9f\x10\xd3\x3a\x81\x44\xaf\x24\x64\xa6"
- "\x93\x10\xa4\x09\xae\x25\x3f\x69\x20\xa1\xb8\x7f\x4c\xf8\x4e\x37"
- "\xda\xd4\x62\x25\xab\x1d\x50\xd7\x33\xf6\xee\xba\xd6\xad\xab\x23"
- "\xf0\x6c\x6c\x9d\xde\x4c\x54\x06\xa2\x46\x3a\x83\x2d\x5a\xf6\xa4"
- "\x85\x04\x2d\xb5\x51\x8a\x34\x46\xda\x22\x9d\xb1\x3c\x89\xf6\xa6"
- "\x78\x2b\x49\xb7\x13\xb5\x29\x0d\x7e\x53\xa8\xd5\x44\xce\x12\xa8"
- "\xe3\x0e\x1a\x1c\x58\x0f\xf8\x98\x86\x98\x30\xcb\xbe\xa8\x04\x1c"
- "\x8c\xa6\x59\x5f\x18\x4a\xa0\xbd\xb8\x86\x3f\xb8\x36\x1f\xf1\x65"
- "\xfd\xa3\x97\x4d\xe8\xc2\xf3\x7a\x1d\xc7\x73\x93\x91\x86\xac\x27"
- "\x5d\x60\xeb\x71\x3c\x07\xb6\x0f\x8c\xe7\xf5\x93\x5c\x78\xfe\xf2"
- "\x75\x17\x9e\x9b\x56\x7a\xc7\xf3\x57\x87\x39\x9e\xd7\x47\x5d\x9b"
- "\x78\xfe\x6a\x51\xff\x78\xfe\x6a\x86\x77\x3c\xaf\x8f\x94\xec\xdd"
- "\xa1\xc1\xf3\x57\xa5\x57\x0e\xcf\xeb\x75\xfe\xe1\xf9\xab\x54\x4f"
- "\x3c\x7f\x99\xcb\xf1\xfc\x65\x94\x7f\x78\x6e\xf2\x1a\xff\xa0\x3f"
- "\x7b\xdb\x0d\xcf\xa2\x7c\x3e\x16\x0b\x78\x06\xf9\xbc\x5e\x94\xcf"
- "\x23\x9b\x7d\xc0\xb3\x9b\x7c\x3e\x9a\xe0\xc2\xf3\xb1\x5f\x7a\xc7"
- "\xf3\xd7\xdb\x44\x3c\x5f\xa3\xf2\xf9\xeb\x9f\xf5\x8f\xe7\xaf\x35"
- "\xfd\xe0\xb9\x42\x1a\x4b\x0c\x0d\x9e\xbf\x36\x5c\x41\x3c\xfb\x29"
- "\x9f\xbf\x9e\xe9\x89\xe7\xa3\xf3\x38\x9e\x8f\xaa\xfd\xc3\xf3\x31"
- "\xaf\xfb\x9f\xfb\x1b\xcb\xb8\xf0\x6c\x14\xe5\x73\xb3\x8e\x86\x18"
- "\x41\x3e\x1b\x45\xf9\x3c\xea\xd0\xc0\x78\x36\xba\xc9\x67\xf3\x03"
- "\x2e\x3c\x37\x8f\xf1\x8e\xe7\x6f\x96\x73\x3c\x1b\xaf\x51\xf9\xfc"
- "\x4d\x50\xff\x78\x36\x5b\xbc\xe3\xd9\x18\x29\x8d\xd3\x86\x06\xcf"
- "\xdf\x44\x5d\x39\x3c\x1b\xfd\x94\xcf\xdf\x84\x7b\xe2\xd9\x3c\x89"
- "\xe3\xf9\x98\xd9\x3f\x3c\x37\x7b\x8d\xff\xd3\xdf\x38\xd1\x0d\xcf"
- "\xa2\x7c\x6e\xb1\x03\x9e\x41\x3e\x1b\x45\xf9\xfc\xd3\x1c\x1f\xf0"
- "\xec\x26\x9f\xbf\x0d\x74\xe1\xb9\xe5\xa4\x77\x3c\xb7\x4c\x17\xf1"
- "\x7c\x8d\xca\xe7\x6f\x8f\xf4\x8f\xe7\x6f\x2b\xfa\xc1\x73\x85\x34"
- "\x06\x1e\x1a\x3c\xb7\xa8\xaf\x20\x9e\xfd\x94\xcf\xdf\xb6\x79\xe2"
- "\xb9\xd9\xc1\xf1\xdc\x5c\xee\x1f\x9e\x8f\x7b\xf5\xff\xd6\xdf\x18"
- "\xdc\x85\xe7\x6c\x51\x3e\x9f\xa8\xa6\x21\xd9\x20\x9f\xb3\x45\xf9"
- "\xfc\xcc\xa3\x03\xe3\x39\xdb\x4d\x3e\x1f\x3f\xec\xc2\xf3\x89\xf7"
- "\xbc\xe3\xf9\xc4\x8d\x1c\xcf\xd9\xd7\xa8\x7c\x6e\xdd\xde\x3f\x9e"
- "\x5b\x8d\xde\xf1\x9c\x1d\x29\xcd\x2f\x0c\x0d\x9e\x5b\xcd\x57\x0e"
- "\xcf\xd9\x7e\xca\xe7\xd6\x4a\x4f\x3c\x1f\xaf\xe1\x78\x3e\x9e\xe1"
- "\x1f\x9e\x4f\x78\x8d\x7f\x37\xb8\xf9\x8d\x53\xd5\x38\xbf\xd1\x89"
- "\xf3\x1b\xae\xbd\x7f\xfa\xd0\x7a\x8e\xe7\x2e\xc0\xf3\x9b\xee\x78"
- "\xfe\xaa\xe7\xfc\x86\x65\x9b\xd0\x8d\xe7\x53\xbd\xf0\x2c\x00\x9e"
- "\xbb\x18\x9e\x4f\x1e\x94\xe6\x37\x4c\x6d\xa5\x80\x93\x53\xc4\x34"
- "\x0b\xb0\x9c\x2f\x62\xf9\x2b\xc0\x32\xd0\x50\x00\x1a\xd7\x34\x35"
- "\x92\x68\x2b\xa7\x65\x27\xd0\x58\x70\xc7\x71\xa7\x45\x8e\xf8\x45"
- "\xdc\x4a\x18\xae\x5d\x0a\xd8\x4d\x3c\x48\x6a\x93\xe1\x5a\x05\x57"
- "\x1a\x5c\xe4\x20\xa9\xb1\x00\x76\x17\xb9\x63\xb7\x5e\xc4\xee\xc9"
- "\x84\xfe\xb1\x7b\x72\xda\x95\x9b\xcb\x38\xc9\xe7\xbf\xbe\x8a\x55"
- "\x47\xc7\x1c\xa3\xa6\x94\x46\x11\x9f\xa7\x48\xb4\x83\x84\xd2\x67"
- "\x74\xa3\x55\xb1\x44\xfd\x9a\x93\xc8\xf3\x9e\x27\xea\xbc\x2f\xa1"
- "\xdd\x52\xff\x6d\x26\xaa\x4f\xec\xff\x20\x35\xed\x8d\xa4\xe6\xc2"
- "\x01\x52\x23\xc0\x75\x0a\x2e\xa8\x6b\x74\x82\x7b\xbb\xad\x62\xbb"
- "\x4f\x3d\x0b\x65\x4d\xf0\xde\xee\x53\x53\x59\xbb\xe3\xa1\xdd\x9d"
- "\xae\x76\x9b\xa0\x1f\x00\x7f\xc6\x0a\xe2\x7c\x48\xb4\x95\x04\x2d"
- "\x73\x50\xda\x29\xe2\x1f\xf9\xf3\x49\x83\x9d\x44\x1b\x80\x67\x2f"
- "\x00\xfe\x5b\xca\x48\x7a\x2a\xe0\xbf\xd3\x8e\xb8\xb3\x9a\x32\x2e"
- "\x02\xfe\x4f\xa6\x50\xa0\x5f\x17\xe2\xff\x2b\xc4\xbf\xa5\x58\x60"
- "\xf8\xb7\xcc\xf2\x0f\xff\xa7\x7c\xc0\xbf\x2f\xf3\x21\xa7\xab\x71"
- "\x3e\xa4\x13\xe7\x43\x5c\x7b\x40\x07\xc0\xbf\xfb\x7c\xc8\x77\x6e"
- "\xf8\x3f\xdd\x0f\xfe\xdb\x0e\x4a\xf3\x21\x57\x1f\xff\x6d\x03\xe0"
- "\xbf\xad\x1f\xfc\x0f\xf5\xdc\x47\xdb\x15\xc4\xff\xe9\x01\xf0\x7f"
- "\xda\x07\xfc\xaf\xd7\xf9\x87\xff\xb6\x1e\xf8\xff\x4e\xc4\xff\x77"
- "\x7e\xe2\xff\xb4\x2f\xf8\xf7\x61\xfe\xc4\x8a\xf8\x07\xf9\xbf\x7e"
- "\xab\xdb\x5e\xe0\x81\xf0\xef\x26\xff\xcf\xb8\xe1\xdf\xda\x0f\xfe"
- "\xbf\x97\xf0\x7f\x0d\xc8\xff\xef\x07\xc0\xff\xf7\xfd\xe1\x7f\x88"
- "\xe7\x4a\xbe\xbf\x82\xf8\xb7\x0e\x80\x7f\xab\x2f\xf8\xf7\x53\xfe"
- "\x7f\xdf\x03\xff\x67\x44\xfc\x9f\xf1\x13\xff\x56\x1f\xf0\xef\xcb"
- "\x7c\xcb\xb9\x6a\x9c\x6f\xe9\xc4\xf9\x16\xd7\x9e\xf0\x01\xf0\xef"
- "\x3e\xdf\x72\xd6\x0d\xff\xe7\xfa\xc1\x7f\xfb\x41\x69\xbe\xe5\xea"
- "\xe3\xbf\x7d\x00\xfc\xb7\xf7\x83\xff\xa1\x9e\x5b\x69\xbf\x82\xf8"
- "\x3f\x37\x00\xfe\xcf\xf9\x80\x7f\xa3\x9f\xf2\xbf\xbd\x07\xfe\xcf"
- "\x8a\xf8\x3f\xeb\x27\xfe\xcf\xf9\x82\x7f\x1f\xe6\x67\x2e\x20\xfe"
- "\x41\xfe\x1b\xb7\xba\x9d\x0d\x18\x08\xff\x6e\xf2\xdf\xe6\x86\xff"
- "\x0b\xfd\xe0\xff\xbc\x84\xff\x6b\x40\xfe\x9f\x1f\x00\xff\xe7\xfb"
- "\xc3\xff\x10\xcf\xc5\x9c\xbf\x82\xf8\xbf\x30\x00\xfe\x2f\xf8\x82"
- "\x7f\x3f\xe5\xff\xf9\x1e\xf8\xb7\x89\xf8\xb7\xf9\x89\xff\x0b\x3e"
- "\xe0\xdf\x97\xf9\x9c\x8b\x6c\x3e\xa7\x13\xe7\x73\x5c\x67\x44\x06"
- "\xc0\xbf\xfb\x7c\x4e\x87\x1b\xfe\x2f\xf6\x83\x7f\xfb\x41\x69\x3e"
- "\xe7\xea\xe3\xdf\x3e\x00\xfe\xed\xfd\xe0\x7f\xa8\xe7\x6e\xec\x57"
- "\x10\xff\x17\x07\xc0\xff\x45\x1f\xf0\x9f\xed\xa7\xfc\xb7\xf7\xc0"
- "\x7f\x87\x88\xff\x0e\x3f\xf1\x7f\x71\x88\xe6\x7f\xba\x0c\x38\xff"
- "\x23\xa8\xb2\xb6\x76\x15\xc7\x98\x85\xdc\x82\xd2\x50\x99\x96\x38"
- "\x54\x39\x71\xa6\x24\x1b\x79\xf2\x3c\xf0\xc4\x70\x9e\x3c\x77\x5e"
- "\x8d\xf1\x02\x0b\x29\x8c\xff\x3d\xce\x88\xc2\xe5\xc8\x0d\xac\x2f"
- "\x58\x4a\x14\xce\x90\x0d\xec\x7c\x95\xa9\xd5\x4e\xb0\xcd\xab\x91"
- "\x06\xa7\x5c\x34\xc0\x39\x38\xfa\xbd\x4e\x5d\x92\x09\x79\x3a\xcd"
- "\xa4\x05\xf0\x52\xd3\x62\x06\xda\xaf\x62\xd8\x42\x5e\x40\x7d\xd4"
- "\x6f\x9d\x21\x0a\xc7\xb7\x9a\xb1\xc0\xe3\xb0\xe0\x15\x44\x16\xde"
- "\x42\x05\xe4\x25\xf2\x08\xf9\xaa\x5d\x85\xfb\x95\xba\x16\xd5\x01"
- "\xbe\x1d\xdf\xea\xc6\x96\x40\xbe\xa1\x9f\x97\xe9\x62\xeb\x1f\xf0"
- "\xab\xac\x69\x02\x5a\x66\x75\xfa\xc9\xa7\x2e\x5f\xce\xbf\xf8\x30"
- "\x4f\xe1\xd4\xe0\x3c\x85\xa0\x5a\x3f\xc1\x37\x3e\xad\xd7\x79\x9c"
- "\x69\x1d\x72\x3e\x39\x2a\x7c\xe3\x93\x73\x94\x27\x9f\x86\x7a\xfe"
- "\xc0\x21\xfa\x83\x71\x94\x73\x3e\x75\xd9\xfd\xe3\x93\xd3\xaf\xfd"
- "\xbf\xbd\xc7\xd3\x42\x15\x8e\xa7\x81\x4f\x3e\xf6\xa7\xf5\x65\x1e"
- "\x67\x70\x87\x9c\x4f\x42\x9c\x6f\x7c\x12\xde\xeb\xc1\xa7\x21\x1e"
- "\xe7\x0a\x62\x3c\x68\x21\x96\xf3\xc9\x59\xea\x1f\x9f\x04\x1f\xce"
- "\x7f\xf8\x30\xee\x93\x13\x3d\x8e\xfb\x04\x18\xf7\xf9\xc6\x27\xa3"
- "\xce\xe3\xcc\xf0\x50\xf3\x49\x4e\x94\x3e\xf1\x49\x4e\x16\x78\xf2"
- "\x69\x88\xc7\x63\x72\xc2\xe2\x7f\xc1\x2f\xe1\x7c\xa2\x33\xfc\xe2"
- "\x93\x9c\x24\x0d\xc9\xf8\x44\x2e\x57\xe3\xf8\x04\xf8\xe4\x63\x7f"
- "\x32\x96\x79\x9c\x71\x1e\x72\x3e\xc9\xca\x7d\xe3\x93\x3c\xa8\x07"
- "\x9f\x86\x76\xdc\x20\x97\x35\x70\x3e\xc9\xca\x18\x9f\x72\x88\xd5"
- "\x3f\x3e\xc9\xbd\xc6\xff\x1c\x94\x1d\x2d\x0f\xa8\x40\x3b\x5a\x00"
- "\x3b\xda\x37\x3e\x65\xeb\x3c\xce\x64\x0f\x39\x9f\x02\x62\x7d\xe3"
- "\x53\xc0\xdf\x3c\xf9\x34\xc4\xf6\xad\x3c\x20\x95\xf3\x29\x60\x16"
- "\xe7\x93\xbc\xc8\x3f\x3e\x05\xf8\xb0\xff\xb3\xef\x73\x58\xbd\x6c"
- "\x3e\x79\x60\xfc\x35\x65\xf3\xc9\x03\x15\xbe\xf1\x2a\xf0\xd9\xcb"
- "\x6a\xf3\xc9\x03\x75\x9c\x57\x0a\x07\xe7\x95\x62\x9a\x7f\xbc\x0a"
- "\x34\xf8\x7b\x7e\xab\x97\xdd\x27\x1f\xae\xbe\xa6\xec\x3e\xf9\x30"
- "\x1f\xe5\xdf\xf0\xa0\xcb\x6a\xf7\xc9\x87\x89\xf2\x6f\x98\x28\xff"
- "\x02\xfd\x94\x7f\xc3\x7d\x90\x7f\x7d\x9f\xfb\xea\x65\xfb\xc9\x95"
- "\x95\xd7\x94\xed\x27\x57\xce\xf3\x8d\x57\xca\x77\x2f\xab\xed\x27"
- "\x57\x66\x70\x5e\x29\x67\x73\x5e\x0d\x2f\xf6\x8f\x57\x4a\xaf\xf1"
- "\x5f\x06\x3a\x2f\xd6\xdb\xfe\x1b\x71\x8d\xd9\x7f\x23\x7c\xb4\xff"
- "\x46\x5c\x66\xfb\x6f\x84\x68\xff\x8d\xe0\xf6\x5f\x4e\x90\x9f\xf6"
- "\xdf\x08\xbf\xec\xbf\x1e\xbc\x12\xfb\x95\x2a\xec\xda\xb2\x01\x47"
- "\xee\xf4\x8d\x57\xaa\xe0\xcb\x6b\x03\x8e\x6c\xe4\xbc\x1a\xb9\x83"
- "\xf3\x6a\x84\xcd\x3f\x5e\xa9\xb4\xfe\x9e\x4f\xeb\x6d\x07\x06\x57"
- "\x5d\x5b\x76\x60\xb0\x6f\xe3\x5f\x79\xf0\x7b\x97\xd7\x0e\x0c\xe6"
- "\xe3\x5f\x79\x30\x1f\xff\xe6\xa8\xfc\x1b\xff\xca\x83\x7d\x18\xff"
- "\xfa\x30\xef\x27\x57\x6b\xd1\x06\x74\xe6\x66\x6d\x0d\x05\xfa\x87"
- "\xa6\x10\x79\x67\x38\xf0\x4b\x05\xfc\x5a\xa3\x25\x5d\xb9\xc0\x2f"
- "\xab\x83\x3c\xf9\xca\x31\x5a\xd7\xe6\x24\x9d\xc0\xab\x8b\x60\x07"
- "\x9a\xac\x16\x3c\xa3\xf7\x6f\xcd\xf2\xd0\xf7\x9e\x79\x45\x4d\x90"
- "\x5f\x48\x7f\xa7\x2a\xb0\x9e\x02\xbf\x18\xff\x54\x85\x7a\x47\xee"
- "\x06\xed\x13\xa7\x8f\xd1\x65\x66\x4a\x6b\xf5\x76\xa8\xd3\x1c\x73"
- "\xad\xbe\x91\x44\xb7\x90\x20\xed\x53\xc8\x97\xd0\x45\x98\x6e\xb2"
- "\x36\x12\xf4\xfb\xc9\xe6\xc0\x8f\xe9\xc2\x1c\x5f\xe8\x54\xe8\xbf"
- "\x09\xcf\x15\x4a\x3e\x9a\x4c\xa7\x8a\x18\xff\x7b\xce\xa9\x32\xfe"
- "\x7f\xa1\x53\xbf\x89\xe7\x13\x87\xdc\x16\x0c\x65\xf3\x7f\xc2\x31"
- "\xcd\x58\xa9\x8e\xcb\x16\x53\x0a\x75\x1c\x5d\x67\xb3\x12\xac\x67"
- "\x9d\xad\x8a\xa4\x27\x11\x75\x5d\xa7\x85\xa4\xd9\xa8\xb5\x2e\xe3"
- "\x24\x89\x3e\x8f\xeb\x02\x88\xa7\xd0\xbf\x71\x7e\x87\x34\x09\xc7"
- "\x74\x63\xa1\xbc\xb2\xba\x7a\x42\x42\xd7\x00\xad\x1d\x44\xce\xce"
- "\x6b\xe2\x98\x5f\x2e\xe8\x4d\x19\xcd\x04\x68\x57\x6a\x72\x7c\x89"
- "\xf4\xd4\xc3\xf3\xa9\xdd\xeb\x0d\x21\x1b\xfe\x0b\xd3\x90\xb6\xb8"
- "\xcf\xd4\x64\xb0\xb2\x3c\xd2\x73\xce\xbb\x0c\x62\x4a\xe9\x24\x75"
- "\x0e\x42\xe0\x7b\xc6\x4f\x63\x1b\x01\x5f\x21\x7e\xca\x6d\xf5\xa4"
- "\x21\x99\xaf\x94\x8f\xce\x40\xbb\xd5\x99\xbb\x7e\x02\xaf\x63\x60"
- "\xfb\xc0\xf8\x5a\xaf\x73\xe1\x6b\xf4\x98\x4b\xc3\xd7\xa8\x03\x43"
- "\x8b\xaf\xa1\xb6\x5f\x47\x6d\xba\x34\x7c\x8d\x1e\xc5\xf1\x35\x6a"
- "\x2a\xc7\xd7\x68\xa5\x0b\x5f\x81\xed\x97\x0f\x5f\x6a\x0b\xc7\x97"
- "\xba\xcc\x3f\x7c\x8d\xce\x1d\x92\x79\x56\x79\x98\x19\x6d\x6d\xc0"
- "\x97\x28\xbf\x46\x36\xfb\x80\x2f\x37\xf9\x15\xb6\xf2\xd2\xf0\x15"
- "\x36\x71\x88\xf1\x35\xc4\x36\xf7\x0d\xb6\x4b\xc3\x57\xd8\x2b\x1c"
- "\x5f\x37\x14\x73\x7c\x85\xe9\x5d\xf8\x1a\xd9\x7c\xf9\xf0\x75\xc3"
- "\x0c\x8e\xaf\x1b\x94\xfe\xe1\x2b\xcc\x2f\xff\x57\xbd\xc7\x07\x37"
- "\x47\xe1\xf8\xc0\x99\x6b\x14\xe5\xd7\xa8\x43\x03\xe3\xcb\xe8\x26"
- "\xbf\x6e\x3a\x72\x69\xf8\xba\x29\x7b\x68\xf1\x35\xd4\xe3\x84\x9b"
- "\x66\x5f\x1a\xbe\x6e\x3a\xc8\xf1\x75\xa3\x83\xe3\xeb\xa6\x6a\x17"
- "\xbe\x46\x1d\xba\x7c\xf8\xba\xb1\x8c\xe3\xeb\x46\xbd\x7f\xf8\xba"
- "\xd9\xbb\xff\xe7\x41\xcd\x6b\x8f\x29\xc5\x31\x0d\xe0\x4b\x94\x5f"
- "\x3f\xcd\xf1\x01\x5f\x6e\xf2\x6b\xcc\xcf\x2e\x0d\x5f\x9a\x93\x43"
- "\x8c\xaf\x21\x1e\xdb\x68\x76\x5e\x1a\xbe\xc6\xdc\xc7\xf1\xa5\x99"
- "\xc7\xf1\x35\x46\xe7\xc2\xd7\x4f\x73\x2e\x1f\xbe\x34\x4a\x8e\xaf"
- "\x9b\xab\xfd\xc3\xd7\x18\x1f\xfc\xbf\xfa\x32\x1f\x1f\x4e\x70\x1c"
- "\xe6\xcc\xcd\x16\xe5\xd7\x33\x8f\x0e\x8c\xaf\x6c\x37\xf9\x75\xcb"
- "\xe6\x4b\xc3\xd7\x2d\xbf\x1c\x5a\x7c\x0d\xf5\x78\xec\x96\xb0\x4b"
- "\xc3\xd7\x2d\x1b\x39\xbe\xc6\x56\x72\x7c\xdd\x62\x74\xe1\xeb\x99"
- "\x47\x2f\x1f\xbe\xc6\xea\x39\xbe\xc6\xea\xfc\xc3\x57\xb8\x0f\xfe"
- "\x7f\x7c\x5d\x47\x18\x1f\x7f\x69\x63\xc8\x71\xce\x4b\xc3\xd8\xb8"
- "\xb7\xaf\xed\x31\xe4\xb8\x94\x4b\xc3\xd8\xb8\xf3\x1c\x63\xe3\xb4"
- "\x1c\x63\xe3\xda\xae\xcc\x18\x32\xbc\x86\x63\x2c\x3c\xd7\x3f\x8c"
- "\x8d\x1f\xc2\xf5\x0f\x6d\xf5\xa5\x8d\x23\xb5\x0b\x2e\x0d\x63\xda"
- "\x51\xd7\xf6\x38\xf2\xd6\xa6\x4b\xc3\x98\xf6\x69\x8e\xb1\x5b\xd7"
- "\x71\x8c\x69\x67\x5d\x99\x71\xe4\xad\x11\x1c\x63\xe3\xfd\x5c\xb7"
- "\xd1\xfa\x75\xfe\xa5\xef\x75\x9b\x3b\x26\x5d\xda\x58\xf2\xf6\xfd"
- "\x97\x86\xb1\xdb\x97\x5f\xdb\x63\xc9\xdb\xa3\x2e\x0d\x63\xb7\xef"
- "\xe6\x18\xbb\xcd\xc2\x31\x76\xfb\xce\x2b\x33\x96\xbc\x6d\x13\xc7"
- "\xd8\x6d\xb3\xfd\xc3\xd8\x1d\x91\x43\xb7\xde\x74\x67\xe1\xa5\x8d"
- "\x27\xef\x9c\x78\x69\x18\x9b\x70\xe4\xda\x1e\x4f\x4e\xd8\x7a\x69"
- "\x18\xbb\xf3\x36\x8e\xb1\x09\x33\x39\xc6\xee\xd4\x5c\x99\xf1\xe4"
- "\x1d\x76\x8e\xb1\x3b\x2a\xfc\xc3\xd8\x9d\x3e\xf8\xff\xf7\x75\x9d"
- "\xec\x2e\xdb\xa5\x8d\x29\xef\xca\xbb\x34\x8c\xdd\xf5\xd0\xb5\x3d"
- "\xa6\xbc\x4b\x79\x69\x18\xbb\xeb\xb7\x1c\x63\x3f\x2a\xe7\x18\xbb"
- "\x2b\xf5\xca\x8c\x29\x7f\x34\x8f\x63\xec\x47\xe1\xfe\x61\x0c\xb7"
- "\xb5\x0c\xd5\xfa\xde\xdd\xb1\x97\x36\xae\x9c\x78\xf6\xd2\x30\x36"
- "\xf1\x8f\xd7\xf6\xb8\x72\xe2\xe2\x4b\xc3\xd8\xc4\x93\x1c\x63\x13"
- "\xc3\x38\xc6\x26\x9a\xaf\xcc\xb8\x52\x57\xc5\x31\xa6\xf3\xcf\x1f"
- "\x85\xfc\xee\x5e\xfe\xaf\x16\x2d\x4d\x5e\xb0\x78\x51\xbc\x76\xd1"
- "\xd2\xa4\xc4\x57\xb4\xaf\x2e\x5a\x95\xf0\xd0\x9d\xcb\x27\x69\x13"
- "\x53\xb4\x89\x8b\x96\xbe\x28\x26\xc4\x8f\x20\x4f\x25\x2c\x5e\x90"
- "\x82\x29\x90\xfb\xc5\xa5\x4b\x12\x96\x26\x69\x13\x13\x5e\x59\xbe"
- "\x28\x31\x01\xff\x7f\x55\xbb\x70\x59\x22\x24\xbc\x90\xb0\x28\x39"
- "\x41\xfb\xfc\xf2\x85\x0b\x13\x12\x5f\x1d\x41\x9e\x58\xbe\x38\x69"
- "\x91\x61\x71\x82\x76\xda\x13\x8f\xdc\x33\x7b\xfa\xaf\x67\x3f\xfc"
- "\x30\x06\x27\x73\x8b\x4d\x16\x4e\x73\x0b\xe3\x00\x73\x8a\x56\xf9"
- "\x4f\xa6\xd7\x69\x08\x8b\x67\x5b\xd0\x4e\xd4\x39\x89\x44\x91\xdd"
- "\x4e\x94\x79\xed\x44\xa5\x7d\x89\x44\xd1\xec\x7f\x56\xe5\xb7\x93"
- "\x30\x9a\x3f\xc7\x22\x64\x53\x42\xf3\x02\xa2\xac\x41\x27\xac\x90"
- "\xa6\x16\xb2\x4f\x68\xe1\x9d\x30\xa0\xad\x82\xe6\x05\x96\x37\xcb"
- "\x7f\xa2\xb0\x06\x59\xea\xd3\x4f\x12\x39\x1d\xf1\xe3\x4d\x7f\x15"
- "\xac\xf2\xbd\xb8\xd3\x01\xda\x4e\xe4\x93\x76\xc0\x55\x44\xe4\xf7"
- "\xcc\x80\x2b\x16\xae\x78\xb8\x72\xe1\xda\x04\x57\x19\x5c\x3b\xe1"
- "\xaa\x82\xab\x1a\xae\x7a\xb8\x1a\xe1\x32\x13\xf9\xe4\x79\x70\xa5"
- "\xc2\x05\x79\x27\x6f\xe5\xe5\x4c\x2e\x87\xab\x89\xc8\xef\x55\xc0"
- "\x15\x0e\x17\xe4\xbf\xd7\x4a\xe4\x11\x06\xb8\x94\x70\x85\xc1\x05"
- "\xe9\x11\x51\x70\xe1\xfb\x3b\xf9\xb3\xfb\x34\x70\xcd\x26\x50\xcf"
- "\x81\xaf\xfb\x92\xe0\x82\xef\xde\x57\x4a\xe4\xf7\x13\xb8\xa0\xbe"
- "\xf7\xef\xf4\x9e\xff\x7e\xc7\x00\x65\x86\x87\xae\xb9\xd5\xcc\x62"
- "\xe0\xc9\xef\x09\xa2\x99\x24\x80\x66\x5b\xea\x0d\x77\x13\xd9\x29"
- "\xf9\xa4\xc3\xa6\x75\x20\x67\x94\x94\xc7\x74\x84\x7b\xa4\x59\x47"
- "\xce\xa4\x06\x33\x31\x68\x30\xa6\xd9\xe0\xf0\x36\xa9\x81\xbf\x7f"
- "\x4f\x98\x59\x36\xb2\x82\xc5\x80\xcb\xa9\x34\xd0\xf4\xd8\x37\x59"
- "\xec\x37\xa0\x21\x9e\xcb\xa2\xc6\xf7\x2d\x54\xb9\x2b\x15\xfb\x7c"
- "\xd5\x2a\xac\xd7\xa4\xb7\x79\xff\x82\xe7\x50\x37\x6b\xf0\x1c\x8c"
- "\x73\xa9\xc0\x7b\x9a\x7d\xc2\xda\x19\x5c\x10\x85\xff\x5f\xdc\x12"
- "\x63\xa0\xb9\x05\xd8\xa7\xe4\x55\x69\xff\x45\x9a\xe1\xbd\xce\xe0"
- "\x8d\x4a\xed\x53\xa1\xb4\x99\x97\x2d\x37\xcb\xef\x89\x92\xca\xea"
- "\x0c\x9e\x63\xa5\x45\x1b\x23\x68\x1e\x60\x48\x2c\x0f\xb0\x63\xa5"
- "\xb9\x1b\xd4\x90\xaf\x18\xd3\x69\x71\x8c\x51\xfa\x1f\x7e\x8b\x68"
- "\x7e\x41\x19\xfe\x86\xae\x21\x36\x76\x9f\x19\x45\xf8\xaf\x9a\xa0"
- "\xac\x6b\x93\x4f\x7e\x04\xb8\x2e\xab\x7a\x0a\xeb\x3d\x59\x95\x5e"
- "\x4f\x05\x6d\x5a\x00\x7c\x7f\x72\x70\xf7\x77\xc7\x6c\xd4\x61\x8c"
- "\x54\x21\xe7\xee\xad\x18\x83\x0f\xdf\xc5\xba\xbd\x31\x9a\x28\xde"
- "\xfa\x1d\x51\x62\x1b\x3b\x72\x26\x47\x4a\x71\xe8\xf0\x1d\x39\xe4"
- "\x7f\x3c\x26\x9d\xba\x95\x1d\x48\x59\x7b\x26\x95\x71\x9a\x4e\xd6"
- "\x9b\x65\x41\xc5\x98\x5f\x7b\x3b\xa3\xe5\xdb\xe2\xf3\x1d\xc8\x4f"
- "\x2c\x5f\xc8\x2b\x8c\xc3\x7b\x8c\x73\x17\x0a\xc8\xd4\xa6\x4d\xa8"
- "\xe0\x34\x2a\xd0\x63\x39\x98\x5f\xc8\xcf\x81\xff\xef\x99\x29\x40"
- "\x7b\x9d\x99\x44\xa7\x5d\x4a\xa2\xa0\xee\x87\x9d\xd9\xbb\x23\xe0"
- "\x39\xf4\xbb\xdd\x53\x20\x7f\x06\xa3\x77\xde\x06\x68\xfb\xe4\x6a"
- "\x78\x36\xa5\x3b\xf6\x25\xa7\xb3\x4c\xc8\xde\x3d\x0d\xea\xe4\x30"
- "\xcb\xb4\x5b\xa5\x36\x30\x19\xe7\xca\x27\xf2\x74\xb2\xd5\x1a\xb4"
- "\x7b\x5a\x57\x32\xad\x2f\xf8\x92\x10\xf8\x26\xed\xbc\x40\x6b\x52"
- "\x67\x51\x7b\xfe\x5c\x42\x6a\xe2\x9a\x48\xfa\x02\x12\x3e\x72\x0d"
- "\xb5\x46\x3b\x49\xe8\xc8\xa6\x50\x5a\x3b\xab\x09\x64\xf4\x79\x92"
- "\x5a\x4f\x2d\x75\x86\x4a\x92\x7a\x9c\xa8\x56\x2f\x22\x61\xe9\xb3"
- "\xa8\x35\xad\x86\xda\x4d\x29\x4d\xa4\xce\x06\x97\xa1\x16\xf2\x1d"
- "\x86\xab\x92\xa4\xaf\x24\x8a\x27\x41\x9e\xa6\x9d\x27\xaa\x3a\xc3"
- "\x79\x48\x3b\x4d\x52\xe3\xa8\xa3\xb6\x06\xf3\xed\x27\xd1\x0e\x6b"
- "\xe8\xea\xd3\x44\x51\x32\x17\xcf\x96\x1d\x25\x6f\x41\x5d\x3a\x83"
- "\x03\x22\x2e\xe6\x05\x56\x9c\x4b\xa6\x8e\x8e\x9c\x7b\xab\xcd\xe4"
- "\xdf\xaa\x3c\xda\x82\x75\xc6\xb8\xa1\xd0\x5e\xcc\x23\xe4\xe5\x58"
- "\xe6\x3b\x10\xe7\xf7\x56\x82\x2c\x26\xd2\x73\x7c\x66\x0d\xce\x01"
- "\xfc\xdc\x6b\x89\x76\xd0\x0e\xcc\x8f\xed\x06\x1a\x45\x89\xed\x8f"
- "\x0a\x30\x10\x45\x47\x4e\xc4\x24\xb3\xec\x8e\x0c\x37\x1e\x22\x4f"
- "\x86\x49\xdf\x13\xf3\xcc\x32\xcb\x6e\x63\xb1\x17\x05\xf6\xec\x9e"
- "\x48\xcc\x0b\xe9\xc0\xff\xdb\xeb\x79\xfd\x22\x22\x30\x4d\x94\xa5"
- "\xd8\xaf\xa3\x04\xec\xd7\xc6\x5d\xb3\x9c\xc1\x05\x06\x2a\xa7\x76"
- "\x9a\x37\x57\x49\xcf\x69\x54\x4f\x3a\xa8\x1d\xea\x8d\x32\x56\x85"
- "\x71\x52\x79\xfe\xfb\x30\x56\xa3\x5a\x9b\x8c\xff\x47\x9c\xc4\xef"
- "\x08\x5b\x62\xe2\x50\xb6\x46\xd7\x63\xfe\xb9\x71\xf9\x89\x20\x7b"
- "\xf3\x0a\xe2\xb0\x1f\x0a\xc1\x1b\x34\x17\x37\x6f\x54\x63\xff\xa6"
- "\x80\x31\x9a\x3b\x57\xdd\x5d\x4e\x26\x09\x84\xfa\xfc\x7f\xf6\xde"
- "\x07\x2e\xca\x2a\x5d\x1c\x7f\xe6\x65\xd0\x81\xf8\x33\x1a\x15\x15"
- "\xd9\x68\x54\x54\xa8\x58\xd6\x5a\x8b\x39\x25\x1a\xb6\x2a\xa8\x64"
- "\x94\xa6\x58\x68\x63\xa2\x4e\x88\x8a\x86\x82\x93\x29\x10\x28\x95"
- "\x6b\x98\x08\xb4\xb1\xbf\xeb\xee\xcf\xdd\x75\xf7\xeb\xde\xeb\xde"
- "\x8f\x6d\x53\x50\x97\x2d\x65\xd8\xbd\xed\xe7\xeb\xde\x9f\xdd\x46"
- "\x42\x62\x5d\xd2\x31\xa6\x98\x60\x66\xce\xef\x79\xce\x79\x5f\xe6"
- "\x9d\x97\x19\x15\xb7\xfb\xbd\x77\xfb\x46\xbd\xce\xfb\x9e\xf3\x9c"
- "\xe7\x9c\xf3\xfc\x3b\xcf\x73\xde\xf3\x9e\x63\x67\x58\x9e\x55\x55"
- "\xca\xf8\x53\x7f\x26\x64\x33\xed\x18\xe9\x1d\xb6\x2b\x07\xd3\x23"
- "\x3b\xa4\x49\x99\xf4\x8d\x26\x3e\x57\xf1\xb3\x24\xa5\x49\x73\x84"
- "\xcc\xfc\x73\x76\xd0\xb3\x44\xf4\x43\x9d\x44\x3b\x20\xfc\x8b\x49"
- "\xab\x03\x7a\x21\xe4\x58\xe8\x77\x25\xb6\x69\xc2\x41\xbf\x2d\xc2"
- "\x8f\x70\xba\x0e\x41\x07\xa9\x3f\xea\xed\x29\x7d\x95\x93\x6a\x9d"
- "\x3a\xbd\x39\x88\x9f\x95\xbf\xb5\xd2\xb9\x95\xd8\x96\x08\xc4\xf9"
- "\x3e\xfe\x8e\xc4\xdf\x3f\x34\xb7\xd3\x58\xcb\xf1\x5e\x45\xf7\x6f"
- "\x5c\xcb\x5c\x19\xd8\x92\x5e\x89\xe8\x3e\xc9\xe9\x84\xa5\x7b\x08"
- "\x4f\x25\x9d\xdd\x89\x69\x04\x83\xe9\x1e\x27\xe4\x6d\x17\xf8\xc7"
- "\xd7\xb9\xc9\x66\x05\xe1\xbf\xfb\x26\x81\x5f\xe0\x25\x7c\x0a\xee"
- "\x03\x7b\x59\x8f\xc0\x7d\x77\xba\x82\xbb\x1a\xd3\x14\xfc\x19\xab"
- "\x95\x3a\xee\x5e\x8c\x75\xc4\xa8\xfb\xb0\x6f\x2f\x73\x13\x0e\xcc"
- "\x2b\x76\x82\x25\x9f\xf2\x2a\x30\x8d\xca\xaa\x64\x2a\xa2\x39\x1b"
- "\x71\x1c\xe7\x38\x1a\x9d\xb0\xa2\x47\x6d\x37\x90\x46\xb1\x8a\xad"
- "\x95\x71\xb5\x28\xb8\x02\x78\x14\x99\x7a\xd7\x22\xf3\x94\xf0\xc6"
- "\x10\x5e\x84\x77\x3b\xe1\xe9\xc9\xea\xbe\xcb\xb6\xb3\x18\x61\x74"
- "\x32\xfc\x9f\xc9\x2e\x29\xed\xa6\xb3\x3b\x59\xe5\x9d\xc7\x49\x37"
- "\xd0\x06\x02\xca\x24\xd6\x7b\x4f\xba\xc6\x06\xea\x09\xce\x5f\x79"
- "\x97\x8e\x9f\x5d\x7a\x2d\xeb\x46\x98\xbc\xa0\xf3\x3a\x25\x78\x10"
- "\xd3\x8a\x94\x73\x43\x77\x21\x8c\x53\xba\x2b\xec\xbe\x88\x5b\xc7"
- "\x82\xe4\xa8\x73\x92\x4f\x4a\x72\x95\xee\x48\x72\x83\xa3\xce\x0f"
- "\xfe\xfa\x79\x35\xe6\xad\xcc\x8e\x7e\xc8\x05\x3a\xef\x79\x78\xe3"
- "\xdc\x3d\xfc\xfc\x47\xd6\x8f\xbe\x5a\xc9\xdd\x40\x63\xdb\x39\xe9"
- "\xde\xb1\x0e\xd7\x97\x5c\xfe\xf1\x9e\x8f\x05\xaf\xa1\x6f\x47\xfe"
- "\x1d\xfa\xd4\x96\x1a\x49\xf8\x78\x7e\x84\xad\xa7\x74\xf2\xff\xd0"
- "\xf7\x6c\x50\xe5\xb1\xfa\x79\x99\x82\x76\x93\xff\x42\x74\xe4\xed"
- "\xf5\x3e\x62\xa7\x36\xfb\xeb\xe6\x65\x52\x1f\x4a\x8b\x99\xdf\xe1"
- "\xed\xb3\xd3\x79\xba\xa6\x0d\xe4\x9b\x4e\xfe\x6d\xd6\x01\x60\xa8"
- "\xbf\x99\xc3\xeb\xc3\x64\x5e\x27\xfa\xdf\xe7\x5c\x37\xcd\xcb\xa4"
- "\xf3\x93\x77\x6f\x8d\x34\x4c\xaf\x63\xf6\xde\x31\xf3\x6a\xfa\x2a"
- "\x27\x9f\x54\xce\xa7\x1d\x26\xde\x93\x4a\xdf\xeb\xe5\xbe\x63\x1a"
- "\x9f\xb3\x99\x58\xcb\xcf\xc7\xc6\xe7\x7b\x8d\xe1\xf8\x85\x36\xa4"
- "\x98\xca\x62\xdf\xcd\x0d\x0a\x9d\xbc\x2e\x3a\x1b\x7c\xd4\x59\xe9"
- "\xde\x9f\x66\x95\xd8\x81\xef\x85\x5f\x5d\x59\x3c\xbc\x76\xdd\xcb"
- "\xe7\xbf\xdb\xd0\xf7\xcf\xf2\xbe\xc3\x84\xed\xbb\xf7\xc4\x5c\x19"
- "\x1f\xe5\x29\xbc\xaa\x97\x7d\xf2\x2b\xa8\x23\xec\xfc\xa7\xaa\x5f"
- "\xc6\xa1\xfd\xba\x6f\xcb\x95\xf7\xeb\xbe\xcc\xa1\xfd\xba\xef\xa7"
- "\xdf\x6e\xbf\xee\x0b\xfb\xfe\x53\xd5\x2f\xd3\xd0\x7e\xfd\xe0\xb1"
- "\x2b\xef\xd7\x0f\x4c\x43\xfb\xf5\x83\x2d\xdf\x6e\xbf\x7e\xb0\xfd"
- "\x32\xfa\x95\x36\xb4\x5f\x53\xc6\xff\x1d\xfd\xf2\x0c\xed\xd7\x94"
- "\xc7\xbe\xdd\x7e\x4d\x09\x7b\xfe\x59\x58\x7b\xb8\x6b\xb7\x5d\xd8"
- "\xc3\xfb\x75\xc3\xb7\x87\x53\x8e\x0f\xb5\x87\x0f\x4c\x0a\xd8\xc3"
- "\x07\x6e\xba\x22\x7b\x88\x0e\xa2\xb0\x87\xf7\xff\x75\x88\x3d\xac"
- "\x5a\x08\xa1\xed\xe1\xfd\xef\x73\x7b\x58\xbd\x70\x98\x7d\xb8\xbf"
- "\x66\xd0\x1e\xc6\x2e\x84\x20\x7b\x18\xb7\xdb\xde\x57\x79\x7f\xf7"
- "\x95\xd9\xc3\xfb\xbb\x87\xda\xc3\xfb\x33\x83\xed\xe1\x03\xa6\x8b"
- "\xc8\xa1\x27\x94\x3d\xcc\xf2\x9e\x67\xb2\x6c\x78\x86\xd7\x9e\x07"
- "\x8a\x2f\x52\x57\xd9\x25\xea\x2a\x1b\x66\x5d\x9d\x61\xeb\x32\xfc"
- "\xb3\x15\xfd\x0c\xe3\x96\x37\x41\xea\xc2\x68\xb7\x2d\xe9\x24\x38"
- "\x8a\x3d\x30\xc1\x8a\x32\x61\x83\xf4\xb6\xba\x1e\x68\x4b\xea\x02"
- "\x16\xf5\xcf\x56\xf6\xff\xcc\x07\x73\x21\xc9\xe6\x0f\x0f\x38\x8a"
- "\x3c\xc3\xe4\xeb\x0f\x2d\x8a\x6c\xb6\x79\x51\x36\x37\x90\x3c\xa6"
- "\x9f\x70\xf4\x9c\x95\x65\x33\xfd\x77\x83\xfc\xb1\x09\xf9\x0c\x29"
- "\x9b\xa8\x13\xc1\xb2\x59\x69\x15\xb2\x99\xfe\xd2\x50\xd9\xac\xb4"
- "\x86\x96\xcd\xf4\x65\x42\x36\x2b\xad\xc3\xeb\x43\x7a\x6a\x40\x36"
- "\x2b\xad\x41\xb2\x79\xdb\x7c\xf4\xc7\xd2\xb7\x5f\x99\x6c\xa6\x6f"
- "\x57\xfa\x7e\x40\xee\x3b\xd2\xab\x33\x58\x36\xd3\xc3\x9e\x75\x4d"
- "\xe7\xaf\xa3\x3d\x8c\x39\x2b\x4d\xad\xf2\xa1\xdf\xea\x2f\xef\xe9"
- "\xce\xf2\xb1\x3e\x3a\x87\x9d\x49\x93\x81\x6d\x4c\x89\xe9\xc3\x98"
- "\xb2\xaf\xcf\x62\x60\xd1\xbf\xf5\xb3\x81\x44\xd2\xab\x78\xd6\x97"
- "\x12\x87\x34\x4b\xc6\xdf\xd1\x07\x36\x40\x02\x5e\x89\x07\x64\xba"
- "\xe2\x7d\x1a\xdb\x98\x18\xbd\x6b\x03\xa4\xc6\xbb\xc1\x80\x6d\xc8"
- "\x8d\xdf\x66\x04\x8c\xf9\x13\xe8\x9e\xd9\x9a\xd2\x1b\xbe\x06\x3d"
- "\xcd\x27\xfa\xa3\xb0\xbe\xe2\x78\xc6\xd6\xa5\x40\x43\x21\xb6\x47"
- "\x82\xc4\x06\x89\x1d\xf6\x6d\x4c\x91\x58\xdc\xee\x17\xd8\x0b\xb9"
- "\xbc\x4d\xfe\xe4\xf9\x66\x94\x21\x33\x2b\xb5\x50\xbd\x66\x3a\x0f"
- "\x98\xdd\x36\x3f\x83\xf5\x25\x46\x57\x7f\x0d\x74\x16\x76\x72\xfd"
- "\x06\x48\x61\x03\x29\x12\xd2\x20\x77\xc9\xf3\x46\xe2\x7b\x2e\x93"
- "\x9a\xe8\x5c\x74\x3d\xd6\xad\xf3\x55\x60\x5d\x5e\xac\xeb\x3c\xd6"
- "\x75\x0e\xeb\xb2\x61\x5d\x36\x51\xd7\xf0\x68\x3e\xd5\x73\xb1\x79"
- "\xdf\xac\x2d\x63\x68\x7f\xda\xcf\xe3\x8b\x47\x66\xd2\x1c\x70\xef"
- "\x0b\x96\x61\xca\xfb\x83\xb9\xe1\xf0\xef\xfe\x25\x24\x31\x43\x57"
- "\xf7\xdc\x97\x3e\x65\x59\x5e\x80\x97\x7e\x09\xa9\xa4\x73\x6d\x9e"
- "\x2f\x50\xcf\xba\xba\xdf\x4f\xe9\x19\x6e\x5d\x61\xbf\x7f\xad\xb4"
- "\xb1\x76\x7f\x0c\xc6\xa2\x31\xbb\xcb\x77\xdb\x58\xf1\x40\xd2\xbc"
- "\xbc\xfe\xa4\x79\x65\x4b\xbd\x46\x94\x2b\x56\x6c\x2a\x04\x53\x97"
- "\x34\x23\xea\xc3\x8f\x71\x8c\x78\x12\x0c\x1d\xd2\x0c\x73\xe9\x5f"
- "\x68\xfe\x6e\x5a\x4e\xf0\xfc\xdd\xb4\x62\x90\xcc\xdd\x20\x3d\xe4"
- "\x01\x69\x7a\x12\x20\x5c\xf0\x95\x31\x45\xe0\x32\xbf\x9f\xf5\xb3"
- "\x31\xb0\xd5\xcb\x3e\xc7\xf8\x34\x77\x17\xc6\xc0\x59\x77\xe8\x9c"
- "\xf6\x0d\x34\xaf\x65\x7e\x1b\x69\xfa\x37\x1c\x97\xe2\xf1\xbe\x02"
- "\x79\x07\xd6\x42\xb8\xfa\xac\x64\x2e\xf7\xe2\x7d\xbc\x7b\x64\xa6"
- "\xaf\x34\x17\xbc\x89\xaf\x18\x07\xaa\x76\xe7\xf9\x30\x8e\xf5\x1b"
- "\x7a\xba\x4b\xff\x0a\x49\x8e\x1e\x1f\xd4\xa1\xdc\x2d\xf5\x19\x48"
- "\x1f\x72\xed\x4f\x7f\x08\x5d\x45\x20\x95\x7e\x05\xb1\xac\x37\x25"
- "\x46\x91\xeb\x39\x3d\xf1\x9e\x2d\x3d\xcc\x4f\xf2\x4d\xf3\x0b\x98"
- "\x17\xb7\xf5\x2b\x1c\x6b\x5d\xdd\x50\x87\xb1\xb4\x6f\x9d\x65\xb4"
- "\xab\xd7\x72\xf5\x7e\x3f\x24\xc4\xb9\xc1\x58\xf7\x25\xca\xe0\x3a"
- "\x94\xbf\x2f\x51\xce\x5d\x42\xce\xe9\xfb\x9b\x7a\x92\xf1\x1d\x6f"
- "\x67\x34\x7c\x29\x64\x9c\xcb\x1d\xc9\xf8\x5a\x94\xbb\x35\x01\xb9"
- "\xf3\xf6\xa2\x8c\x57\x3e\x38\xa5\xce\xc6\x60\xcb\x4a\x90\x1a\xce"
- "\x8e\xa4\x3c\x5d\xe4\x1d\x92\xe9\xc3\x6c\x0f\x04\xe2\xb0\x19\x0f"
- "\xf5\xdf\x34\xaf\xcc\x34\x9f\x9d\xef\x90\xcc\x47\x30\xdd\x60\x5a"
- "\x78\xbb\x11\xe9\xfd\x90\x98\x9f\x99\x61\xa6\xd8\xdd\x89\xb4\x20"
- "\xba\x60\x1c\x7d\x7b\x87\x34\xad\x82\xe8\xb8\xf1\x20\x44\x58\x1f"
- "\x64\x9d\x48\xb3\x1a\xc6\xe7\x34\xa6\x95\xf3\x79\xea\x6d\x26\xf8"
- "\x88\xcf\x27\x8a\x32\x3e\xa4\x9b\x37\x66\xa1\x11\xf9\x5d\x6c\x7f"
- "\xae\x9f\xeb\x1c\xd1\xb1\xab\x00\xa4\xa5\x3d\x48\x2b\x1f\xd2\xaa"
- "\x8f\xdb\x82\x6c\x6e\x0b\xca\x7f\xeb\x29\x71\x32\x7f\x56\x7e\x04"
- "\xdb\xfa\x3c\xbd\xcf\xf0\xc1\x12\x2b\xb0\x2d\x5f\x20\xbd\xdc\x27"
- "\xc9\x6e\xc4\xf9\x37\x0a\xdb\x40\xf4\x8a\xed\x01\x23\xab\xec\x76"
- "\xfe\x72\x6b\x6b\xa4\x0f\xe5\x97\xec\x43\xfc\x36\x5d\x14\xea\x65"
- "\x5c\x15\xe9\x2f\xea\x73\xfc\x36\x6e\xaf\x72\xeb\x50\x6f\xbd\x1b"
- "\x53\xc6\x0d\x6c\x4c\x31\xe1\x35\x46\xb1\x21\x74\x8e\xd6\x01\xa2"
- "\x6d\xe5\x83\x8d\x64\x3f\x1c\x18\x3d\x7b\x91\xb6\x71\x34\xde\x6c"
- "\x4c\x49\xe2\x34\x7e\x36\x05\x26\x7a\x40\x87\x6d\x32\x62\x7b\xa1"
- "\x61\x05\x18\x4e\x58\x3a\xc0\x87\xba\xa1\xd0\x7d\xce\x4a\x13\x20"
- "\x5e\xe9\xfd\x94\x3f\x83\x4c\x33\x5d\x78\xb9\x9b\x7e\x4d\x40\xee"
- "\xa6\x5f\x43\xb4\x13\x72\x37\x3d\xe1\xbb\x28\x77\x1f\xe5\x72\xb9"
- "\x8b\x18\xb8\x89\xcb\x53\x8d\xc3\xfb\x1b\xa4\xd1\x74\x4a\x03\x92"
- "\x99\x3f\xfc\x9c\x64\x26\x23\xe5\x7f\xaa\xcc\x7c\xd3\x97\x62\xc2"
- "\xeb\xbf\x44\x66\x10\x2f\x97\x19\xa2\xd5\x47\xb9\xfd\xa0\xd0\x88"
- "\xeb\x6a\x79\x57\xb7\xa9\x14\xa6\xa1\xae\x9a\xe3\xb7\x8d\x81\x13"
- "\x9c\x4e\x33\xcc\xa6\x85\xcc\xdf\x21\x65\x2c\x2b\xfd\x23\x18\xfb"
- "\x6d\x8c\x39\xbc\xbf\x00\x7f\xcc\xcb\x89\x7c\x3e\xbb\x6a\x61\x1e"
- "\xbd\x1b\xa1\xf7\x22\x34\x47\x17\x6f\x05\x3d\xcd\x95\xfb\xaa\x6b"
- "\xf2\xe8\xfd\x08\x8b\x8d\x3c\xec\x43\xbd\xf6\x57\x7c\x60\xf7\x47"
- "\x31\xf4\x11\x32\x0e\x3a\xe1\x5d\x3e\xaf\xc8\xaa\x76\x93\xef\x82"
- "\x36\x33\x83\xaf\xf7\xa6\x77\x27\x98\xdf\xaa\xcc\xf9\x93\x4d\x90"
- "\xe7\xe5\xe4\x79\xbb\x19\xd4\xee\x68\x9a\xb7\x13\x36\x25\xe3\x77"
- "\xca\xbc\x9d\xf2\x4c\xf9\x4e\x29\xe3\x18\xcd\xf9\xa8\xca\x4d\x91"
- "\xe1\xe4\x72\xd3\xa6\x92\xad\x0f\x94\x13\xcf\x68\x57\xa6\x0c\x48"
- "\x60\x08\xe9\x63\xc4\xd4\xe4\xa1\xfe\xe8\xbb\xa4\x99\x53\xf1\x57"
- "\x42\xba\xfc\x05\x7f\x23\xf0\x97\x9f\xdb\x36\xbc\xf1\x6a\x06\xff"
- "\xfe\x15\xfb\x7f\x48\xb6\x8d\xeb\xb9\x4e\xde\x09\xb1\x67\xe5\xfb"
- "\xbe\xca\x19\xed\xca\xbb\x8b\x41\xf8\x00\x7f\x0a\xa8\x6e\xe4\x91"
- "\x5e\xbc\x4f\x11\xcf\x2a\x7c\xab\xf9\x33\xe8\x93\x30\x76\x31\xd1"
- "\x7b\x4f\x94\x5f\x5d\x1f\xb3\x3c\x28\xff\x4e\xe5\xef\x5f\x90\x47"
- "\xe4\xaf\xc9\xf6\xb7\x48\xd4\x3b\x33\x13\xe9\xa0\x57\xd7\x1b\x8a"
- "\x1e\x4e\x69\x66\xd8\x33\x6d\x86\x47\x8b\x99\x65\xe1\xf0\xcc\x48"
- "\xf1\xb1\x61\xe2\x0a\xfb\xfd\x23\x4b\x9a\x67\xce\x3a\xe8\xb3\xfb"
- "\x07\x72\xe3\xdf\x2f\xf9\x62\x98\xfe\xc5\x23\x61\xf7\x7f\xf2\xc5"
- "\xbc\x9c\xe6\xad\x9b\x47\xb2\x1f\xd3\x76\xd0\x0b\x3f\x3b\xdb\x2d"
- "\x65\xdd\x31\x06\x62\x3b\xc1\x48\xfe\xd3\x9c\x9e\x77\x18\xf9\x50"
- "\xbb\xce\x42\x72\xff\xf9\xdc\xf8\x01\xf4\x05\x5f\x3e\x0b\xe9\xfe"
- "\x67\x13\xa3\xab\x56\x80\xbe\x1f\xfd\xd5\xfe\x67\x2d\xf1\x1f\x9d"
- "\xea\x06\xd4\x13\x73\x9b\xdb\x09\xf5\x08\xcb\x3e\xcf\x8d\x9b\x95"
- "\xc7\x3c\xc7\xf3\x5e\x85\xac\x14\x9f\x7d\xeb\x69\x88\x45\x5b\x64"
- "\x74\x14\xff\x82\xbf\x53\x88\xdc\x24\x99\x1c\xde\x33\x50\xbd\x02"
- "\x6d\x18\xda\xac\xd2\x27\xd0\x56\x7b\xbf\x82\xfd\x6a\x5b\xfd\xdc"
- "\x4f\x02\xb6\xfa\x3c\xda\xea\x4a\xb4\xd5\xa5\x89\xd0\x66\xb5\x03"
- "\xda\x8e\x91\x73\xad\xf1\x9e\xad\x56\xb4\xd9\x9b\xd0\x66\x17\x9f"
- "\x01\x6e\xaf\x7b\xba\x01\x6d\x6d\xdc\x81\x35\x90\x30\xb0\x16\x6d"
- "\xf6\x79\xcb\xd5\xfb\xb6\x0a\x9b\xfd\xc6\x1a\xb4\xd9\x6b\xd1\x27"
- "\x5e\x83\x36\xbb\x27\x84\xcd\x3e\x17\xc6\x1f\x96\xed\x4f\xff\xda"
- "\x14\xe9\x0d\x89\xc1\x0b\x4f\x80\xb4\xef\x3f\x46\x0e\x53\x4e\x32"
- "\x0f\x86\xe3\x01\xd1\x9b\xe8\xef\x47\x3e\x9c\x40\x1e\x70\xbf\xd5"
- "\x33\x32\x73\x00\xc7\x34\x5f\xdc\x8e\xb2\x9f\x9f\x3d\x29\xc5\x15"
- "\x81\x71\xae\xf5\x1d\xd6\xbf\x2e\x17\xfd\xfe\xdc\x58\x6f\xd5\xcb"
- "\x69\x55\xe8\x53\xfb\xd0\xf7\x1e\xe8\x4b\x34\x20\x0d\x8c\xae\x8d"
- "\x96\x78\xa2\xa1\xff\x26\xe4\xe7\x88\xbb\x66\xa3\x0d\x9d\x7c\x60"
- "\x05\x4c\x19\xa8\xde\x71\x88\x55\xef\x68\xf4\x55\xef\x68\xc2\xb2"
- "\x71\x3f\x72\x12\x5f\xfe\x15\x30\xcd\xce\x76\x55\x94\xf9\x62\x5f"
- "\x4e\x73\xc5\xee\x38\x88\xcf\x47\x29\x7f\xeb\x32\x88\xcd\x4a\xf9"
- "\xc6\x2e\xf8\xf5\x53\x20\x3e\x09\x7e\x7d\x02\xd5\x18\xf7\xd1\x98"
- "\xcb\xc7\x57\x99\x67\x18\x2f\x70\x7f\x3f\xc0\x37\xcd\x18\x2b\xf3"
- "\xed\x44\x8f\x1d\x70\x3c\x19\x39\x38\xd6\x72\xbe\x7d\x02\xca\x38"
- "\x8b\xf4\x8e\x3b\x80\x63\xed\xc0\xb7\x35\xd6\xca\x71\x0c\x8d\xb5"
- "\x34\xce\x12\xdf\xde\x18\x36\xdf\x1e\xcd\xbb\x32\xbe\xed\x84\x2b"
- "\xe4\x5b\x53\x80\x6f\x3b\xe9\xbc\x67\x93\xaf\x7a\x67\x72\x30\xdf"
- "\x76\x9a\x03\x7c\xdb\x99\x82\xcf\x53\x02\x7c\xfb\x6a\x18\x7c\x8b"
- "\xfc\xf2\xbb\xcb\xb7\xd9\x89\x57\xc8\xb7\x2b\xd5\x37\xaf\x8a\x6f"
- "\xa8\x6f\x3b\x51\xdf\x76\x6a\xf4\x6d\xa7\x4a\xdf\x76\xa2\xbe\xed"
- "\x54\xe9\xdb\x17\xc3\xe0\xdb\x55\x1d\xdf\x5d\xbe\xcd\x69\xbf\x32"
- "\xbe\x95\x5f\xa1\xbe\xa5\xe6\x04\xf8\x56\x8e\xfa\x56\x8e\xfa\x56"
- "\xae\xd1\xb7\x72\x95\xbe\x95\xa3\xbe\x95\xab\xf4\xed\x93\x61\xf0"
- "\x6d\xd4\x9f\xbe\xbb\x7c\xcb\x2a\xbf\x42\xbe\x5d\xa1\xbe\xa5\x1e"
- "\x52\xf1\x0d\xf5\xad\x1c\xf5\xad\x5c\xa3\x6f\xe5\x2a\x7d\x2b\x47"
- "\x7d\x2b\x57\xe9\xdb\xdb\xc3\xe0\xdb\x7d\x95\xdf\x5d\xbe\xcd\x33"
- "\x5f\x19\xdf\x2a\xae\x50\xdf\xc6\xeb\x03\x7c\xab\x40\x7d\xab\x40"
- "\x7d\xab\xd0\xe8\x5b\x85\x4a\xdf\x2a\x50\xdf\x2a\x54\xfa\xb6\x65"
- "\x18\x7c\x5b\xf4\xf0\x77\x97\x6f\xf3\xc3\xce\x7f\x2a\x7c\x53\x78"
- "\x46\xfc\xe3\x7c\x63\xb9\xe0\x45\x7f\xf2\xff\x7d\x5a\xf0\x8d\xf8"
- "\xc5\x79\xd7\x9b\x1b\x5f\x2d\xf3\xcc\x2b\xf3\x8c\xe8\x47\x7c\x23"
- "\x3f\x92\xf3\x4d\xa7\x4f\x20\x1f\xd2\x8b\xbe\xa4\xe2\x47\x3e\x6a"
- "\x61\x9e\x13\x96\x9f\x0c\xfa\x91\x5e\xad\x1f\xb9\x52\xed\x47\xfe"
- "\x22\x88\x5f\x55\x5f\x23\xbf\x24\x99\x5f\x4f\x85\xf1\x23\x57\xbc"
- "\x17\x86\x5f\xed\x97\xe4\x17\xf2\x26\x61\xa0\x57\xf0\xeb\x0d\xd9"
- "\xff\xaf\x2b\xfc\x3b\xf9\xb5\x0e\xf9\x45\xfe\xff\x27\x20\xed\x5f"
- "\x32\x5c\x7e\xe5\x5c\xd2\xff\x0f\xcd\xaf\x72\x18\x1e\xbf\x52\x73"
- "\x02\xfc\x2a\x37\x79\x71\x4c\x53\xc6\xb3\x00\xbf\xc4\x78\xe6\xd5"
- "\x8e\x67\x2b\xd5\xe3\xd9\xe5\xf0\x4b\x33\x9e\x7d\xa7\xf8\xb5\x30"
- "\xec\xfc\xbf\x0f\x63\x71\x1f\xda\x39\x9a\xaf\x8c\xeb\xc6\x38\xd9"
- "\xcb\x3e\x9f\xeb\xc6\x38\xd9\x3b\x32\x73\xf7\x1a\x48\x1e\xd8\x88"
- "\x71\x32\xf2\xae\x6a\x0d\xa4\x57\xae\x01\xbd\x7f\x15\xc6\xca\x67"
- "\x31\x56\x46\xfb\xd4\xff\x37\x4b\xfc\xf1\x3c\x17\xf8\x31\x56\xa6"
- "\x79\x30\x6c\x6f\x32\xfb\x1b\xc6\xca\x9d\x68\xfb\x3a\xdf\x10\xb1"
- "\xf2\x19\x25\x56\xfe\x6d\x50\xac\xfc\xf2\x73\x72\xac\x2c\xd3\xbf"
- "\x4e\x4d\xfb\x27\x7f\x1e\x26\x56\x6e\xbd\x64\xac\x4c\x31\xf2\x7e"
- "\x8a\x97\xcf\x5b\x46\xef\x93\x6d\xdb\x1b\xe7\xfe\xce\x58\xf9\x3c"
- "\xc6\xca\x36\x41\xfb\x37\x86\x4d\xfb\xc7\xc3\xae\xff\x20\xdd\x20"
- "\x7d\x19\x1c\x8b\x90\xce\xca\x18\x34\x80\x63\x10\xcd\x67\xf4\x57"
- "\xed\xd8\x8e\xf2\xca\xf5\x83\x8f\x49\x1b\x13\x0d\xa4\x1b\xa4\x27"
- "\xa4\x1b\x7c\x2c\x42\x3b\x88\x63\xd1\xe2\xfa\xe7\x60\x4a\xc3\x73"
- "\x30\xd9\x1b\x1b\x1c\x23\x3f\x9a\x4f\xfc\x08\xd8\x36\xbf\xd6\xb6"
- "\x2d\x57\xdb\xb6\xdf\x0e\x1d\x8b\x2e\x65\xdb\x9e\x0b\xa7\x2b\xad"
- "\x97\xd4\x15\xd2\x11\x3e\x1e\xa1\xbe\xfc\x57\xe8\xca\x1b\xff\x39"
- "\x5c\x7e\x3d\x11\x76\xfd\xc7\xe5\xf1\x6b\xa7\xfe\xd2\xfc\xda\x09"
- "\xc8\xaf\xc3\x01\x7e\x05\xc7\xc6\x01\x7e\x89\xd8\xd8\xaf\x8d\x8d"
- "\x97\xab\x63\xe3\xcb\xe1\x97\x36\x36\xfe\x2e\xf1\x6b\x51\xd8\x75"
- "\x7e\x97\xc9\xaf\xcb\xd0\xaf\x9d\xa8\x5f\x13\xf4\x2a\x7e\x05\xc5"
- "\xc4\x2a\x7e\xa9\xf4\x4b\x15\x13\x2f\x57\xc7\xc4\x97\xc3\x2f\x6d"
- "\x4c\xfc\x5d\xe2\xd7\xe2\xb0\xeb\x3f\x2e\x8f\x5f\xe5\x97\xa1\x5f"
- "\xe5\xa8\x5f\x13\x72\x03\xfc\x0a\x8e\x85\x03\xfc\x2a\x57\xe9\x97"
- "\xca\x77\x58\xae\xf6\x1d\x2e\x87\x5f\xda\x58\xf8\xbb\xc4\xaf\x25"
- "\x7b\xfe\x4e\x7e\x5d\x86\x7e\x95\x93\x7e\x1d\x52\xf1\x2b\x28\x06"
- "\x56\xf1\x4b\xa5\x5f\xaa\x18\x78\xb9\x3a\x06\xbe\x1c\x7e\x69\x63"
- "\xe0\xef\x12\xbf\xf2\x32\xfe\x3e\x7e\x55\x5c\x86\x7e\x55\xa0\x7e"
- "\x4d\x84\x00\xbf\x82\x63\xdf\x00\xbf\x2a\x54\xfa\xa5\x8a\x7d\x97"
- "\xab\x63\xdf\xcb\xe1\x97\x36\xf6\xfd\x2e\xf1\x6b\x99\xfb\x62\xb1"
- "\x94\x3a\x86\xf2\x96\x06\xf8\x45\xbc\x19\xc0\xd8\x69\x20\x66\xc7"
- "\xf6\xf0\xf1\xd3\xf8\xc5\xe1\xe2\x5d\xda\x0f\xe6\xd1\x6e\xfa\x26"
- "\x44\xf8\x84\x4c\xe3\x13\x9e\xb0\xfc\x1c\x82\x63\xde\xb7\x87\xc4"
- "\x50\x03\xca\x1c\xc5\xb2\x70\x31\xef\xbf\x5e\x71\x0c\x45\x7c\xa2"
- "\x38\xca\xbb\x0e\xf9\x24\xfb\xf1\xfb\xff\xce\x39\x8a\x81\xde\x14"
- "\x69\x3f\xfa\xf1\x25\xcb\x30\x86\x7a\x7a\xb8\x7c\x7a\x26\xec\xf7"
- "\xdf\x34\x4f\x44\x31\x2f\xc5\x52\xf4\xde\xb1\xad\xb3\x1b\x2a\x37"
- "\x80\x91\xbf\x7b\xec\x0e\x7e\xf7\xb8\xbb\x0b\x63\xaa\xb5\xc8\xb7"
- "\x81\x5c\xd8\xd5\x05\xe9\x55\xcf\x89\x98\x4a\x89\xa7\xda\xdc\x1e"
- "\xfe\xee\xd1\xe1\x75\xc2\x2c\x27\xf3\x34\x20\x3c\xc5\x51\xc7\xf3"
- "\xde\x00\xd2\x95\xd2\xd3\x10\x4b\x3c\xc0\x18\x8c\xf3\x43\x1d\x43"
- "\xd5\xab\xdf\x37\xae\x08\x17\x43\x5d\xfa\x7d\x63\xdd\x39\x11\x3f"
- "\xf1\xf7\x8d\xff\x23\x62\xa8\xe5\x61\xdf\x7f\xcc\xf9\x99\x98\x6f"
- "\x20\xda\x3b\x52\xbc\x80\xf2\xf4\x79\x7c\x8f\x98\xd7\xf3\xee\xda"
- "\x51\x46\x31\x2d\xc5\xb3\x8e\xe2\x56\xa8\xdc\x0c\xc6\xfe\xbe\xdc"
- "\x78\x8c\x51\x63\xbd\x68\xeb\x5e\x3e\x2b\x68\xbf\xe5\x0b\x30\xba"
- "\x56\x59\xf8\x5a\x19\x8a\x65\x49\x57\xf8\x3b\xc7\xa7\x61\x72\x5d"
- "\x07\x4c\xe1\xfa\x81\x7a\xe1\xad\x7e\x39\xcd\x1f\xbb\xa3\x89\xf4"
- "\x64\xd6\x29\xe6\x21\x1e\x90\x7e\x7c\x74\x8a\x78\xf3\x0b\x28\xfd"
- "\x44\xf0\x86\xf3\x45\x0a\x7e\x17\x3c\x54\x37\xfe\x14\x86\x3f\x47"
- "\x2f\x8f\x3f\x6b\x83\xf9\x73\xe0\x4a\xdf\x07\x2b\xeb\x23\xd7\xa6"
- "\x48\x07\xe4\xf7\xc1\x6f\x3c\x39\x5c\xfe\xac\x38\x7a\x65\xfc\xd9"
- "\x09\x57\xc6\x9f\x9d\x26\xfe\x6e\x31\x88\x3f\x3b\xa7\x08\xfe\xec"
- "\x4c\xa6\x58\x29\xc0\x9f\xaf\x2e\x93\x3f\x9a\x18\xe9\x3b\xc5\x1f"
- "\x4b\xd8\xf9\x9f\x4b\xf0\xe7\x0a\xf5\x67\x67\x23\x7f\x87\x18\xcc"
- "\x1f\x59\x7f\x76\x36\x51\x6c\x14\xe0\xcf\x17\x97\xc9\x1f\x4d\x4c"
- "\xf4\x9d\xe2\xcf\xca\xb0\xf3\xdf\x17\xe7\x4f\xf9\x15\xea\x4f\xb9"
- "\x89\xbf\x2b\x0c\xe2\x4f\xb9\xac\x3f\xe5\xc9\x14\x0b\x05\xf8\xf3"
- "\xc9\x65\xf2\x47\x3b\x7f\xfa\x5d\xe2\xcf\xaa\xda\x2b\xe4\xcf\x15"
- "\xea\x4f\x79\x23\x7f\x27\x18\xcc\x1f\x59\x7f\xca\x9b\x28\xf6\x09"
- "\xf0\xe7\xed\xcb\xe4\x8f\x26\xe6\xf9\x4e\xf1\x67\x75\xd8\xfd\x9f"
- "\x2e\xce\x9f\x8a\x2b\xd4\x9f\x0a\x13\x7f\xf7\x17\xc4\x9f\x0a\x59"
- "\x7f\x2a\x92\x29\xd6\x09\xf0\x67\xcb\x65\xf2\x47\x13\xe3\x7c\xa7"
- "\xf8\xb3\xe6\xe4\xa5\xde\x17\x29\xbe\xb3\xfa\xbd\xec\x00\xfa\x6f"
- "\xe4\x3f\x93\xef\xdc\xe6\x3e\x0a\xde\xb5\x82\x37\x95\x5f\x83\xb1"
- "\x4a\xe6\x0d\x7f\x27\xbb\x4a\xbc\x93\xe5\x7e\xdb\x8e\xbb\x66\xb3"
- "\x6d\xfa\x04\xf2\xcb\xf8\x7b\x57\xfe\x6e\xe2\x7d\xca\x3b\x3a\xa0"
- "\xf2\xdf\x28\x46\x45\xdf\x1b\x28\x4e\x2d\x3d\x33\x0c\xbf\xed\xe9"
- "\x70\x7c\xb9\xf4\xbb\x89\x3a\xd5\x3a\x3e\x25\xf6\xfc\x56\xf9\x32"
- "\xec\xf7\xae\xd6\xb0\xfb\x3f\x5e\x9c\x2f\xe5\x30\x3c\xbe\xe0\x78"
- "\xb3\x23\x35\x47\xf0\xe5\x13\x0d\x5f\xca\xa7\x0c\xa8\xc6\x9d\xcb"
- "\xe7\x8b\x66\xbc\xf9\x4e\xf1\xa5\xd0\x10\x36\xd6\x44\xbb\x44\x3c"
- "\xa1\xf5\xdd\xbb\x9f\x86\xe4\xca\x0e\x48\x1f\xf8\x5b\x62\xf4\x5c"
- "\xb4\x73\x03\xab\x12\x0d\x6d\x68\xe3\xb6\xba\xd9\xe7\x71\xee\x91"
- "\x99\x1f\x7e\xec\x82\xb6\x3c\x27\xf4\x6f\xcc\x85\xea\xb3\xb4\x56"
- "\xfd\x28\x54\x14\x52\x2c\xff\x1b\xf8\xe8\xd4\x97\x30\xf7\x20\x1b"
- "\x70\xf4\x1c\x05\xfb\xe6\xdf\x00\x5b\x95\x12\xdd\x80\x30\x4b\x91"
- "\x86\xe7\xa4\x42\xfb\x37\x18\x8f\x4e\x2c\x06\xe3\xec\x1e\xe6\x69"
- "\xeb\xf9\x10\xf6\x63\x5d\xef\x17\x03\x10\x7d\x89\x27\xd5\xcf\x51"
- "\xfc\xf9\xb6\xe0\xc9\x3c\xc1\x93\x37\x54\xf1\xa7\x09\xf3\xbb\xac"
- "\xc8\x8f\x0b\x1a\x7e\x9c\xea\x06\xa4\xef\xc8\xb9\x6e\xe4\x87\x5b"
- "\xe1\xc7\x17\xb0\xf5\x79\xe2\x87\x73\x70\xbd\x6b\xbf\xcc\x8f\x3a"
- "\xb2\x5f\x56\x30\xee\x53\xe2\xcf\x73\x2a\x7e\x28\xdf\x64\xa9\xf9"
- "\xa1\xc4\xfe\x1b\x91\x1f\x1b\x02\xf1\xe7\x37\x18\x7f\xee\xc3\xf8"
- "\xb3\xf4\x8f\x20\xed\xdb\x3a\x5c\x7e\xac\x0b\x3b\xfe\x2b\xbc\xa0"
- "\xb1\x65\x20\x6e\x47\x19\xf1\xc1\x51\x7c\x18\x88\x27\x34\x9e\xf8"
- "\xfe\x96\x68\x28\x29\x42\xdd\x71\x8e\xcc\xec\x67\x18\xf3\x63\xbc"
- "\xef\x58\xfc\x1f\x40\x73\x06\x82\x07\x03\x03\x0e\xd7\x51\x20\xda"
- "\xdb\x37\xff\x07\xe7\xc3\x39\xa9\xc8\xbc\xc4\x0d\xd2\x04\x94\x43"
- "\x8c\xf7\x8d\x4b\xe9\xbb\x5c\xb4\x6d\xfb\x57\xc0\x94\xd9\x56\xe6"
- "\xa1\xd8\x94\x74\x88\xd6\x9e\x90\x5d\x6b\xb3\xbe\x07\x34\xaf\x33"
- "\x10\xfb\x72\xda\xfb\x45\x00\x64\xdf\x88\xee\x91\xeb\x03\x7c\xa2"
- "\xf5\x24\x9c\x57\x8f\x5d\xc6\x3a\x57\x35\xbf\x16\x3b\x2f\x6b\x7d"
- "\x72\xbf\x3c\x5f\x50\xa7\xcc\xa9\x5d\xe9\x7c\x81\x32\xa7\x76\x5e"
- "\xac\x27\x29\xfd\x33\xea\xcf\xb0\xf9\xb5\x3e\xf3\xf2\xf8\xb5\x13"
- "\x86\xcf\xaf\xbe\x10\xfc\x5a\xef\x1a\xca\xaf\x9d\x26\x15\xbf\x9a"
- "\x02\xfc\xda\x39\x45\xf0\x6b\x67\x72\x80\x5f\x3b\x53\x2e\xcd\xaf"
- "\x8b\xac\x6f\xfd\x87\xe7\xd7\x86\xb0\xf1\x8f\x86\x5f\x57\xa0\x5f"
- "\xe7\x43\xf0\x6b\x63\x63\x08\x7e\xa9\xf5\xcb\xab\xe2\x97\xac\x5f"
- "\x3b\x55\xfa\xb5\xf3\x32\xf4\xeb\x22\xeb\x5a\xff\xe1\xf9\x55\x1c"
- "\x76\xfd\x4f\x30\xbf\xca\xaf\x40\xbf\x3e\x0d\xc1\xaf\x4d\xd9\x43"
- "\xf9\x55\xae\xd2\x2f\xf4\x2d\x06\xf9\x55\x2e\xeb\x57\xb9\x4a\xbf"
- "\xca\x2f\x43\xbf\x2e\xb2\x9e\xf5\x1f\x9e\x5f\x9b\x2f\xba\xfe\x47"
- "\xc5\xaf\x2b\xd0\xaf\x77\x42\xf0\xeb\x05\x08\xc1\x2f\x95\x7e\xa5"
- "\x1e\x52\xf1\x4b\xd6\xaf\x72\x95\x7e\x95\x5f\x86\x7e\x5d\x64\x1d"
- "\xeb\x3f\x3c\xbf\x4a\xc2\xfa\x7f\xc1\xfc\xaa\xb8\x02\xfd\x2a\x0d"
- "\xc1\xaf\x92\xc3\x43\xf9\x55\xa1\xd2\xaf\xf1\xfa\x00\xbf\x2a\x64"
- "\xfd\xaa\x50\xe9\x57\xc5\x65\xe8\xd7\x45\xd6\xaf\xfe\xc3\xf3\x6b"
- "\x4b\xd8\xf9\x6f\x35\xbf\xfa\x77\x29\xfe\xe1\xc1\x60\x7e\xa1\xbf"
- "\x1e\xdf\x29\x62\x2b\x85\x5f\xe1\x7d\xc3\xad\x8b\x07\x79\x75\x26"
- "\xe0\x1b\x72\x3e\xc9\xef\x29\x88\x3f\xe4\x23\x92\x4f\xd8\x5f\x2d"
- "\x78\x44\xef\x00\x2f\xea\x17\x5e\xce\xf7\x4f\x57\xc0\x27\x25\xae"
- "\xfa\xd6\xf9\xf4\x97\x2b\xe1\x53\x69\xd8\xef\x9f\x82\xf9\xa4\x8c"
- "\x5b\x97\xcb\xa7\x50\x63\x56\x99\x7e\x28\x9f\xca\x4d\x01\x3e\x89"
- "\x71\x8a\xc6\x2e\x1a\xab\x82\xf9\x74\x91\xf1\xea\x72\xbe\xbf\xf8"
- "\x87\xe7\xd3\xb6\xf0\xf6\x4f\xe2\x67\x9b\x1f\xae\x91\xfc\x47\xf1"
- "\xb2\xe3\xd5\x8a\x69\x91\x98\xc6\xbf\xb5\xa9\x91\xf3\x7c\x95\x40"
- "\xdf\x69\xdb\xe3\x75\x79\xb4\x9f\x2e\xc1\x8c\x50\x60\xe2\xb7\x81"
- "\x19\xfb\x23\xe0\x24\x28\xc3\x74\x7b\xec\x36\xf3\x08\x84\x6f\x65"
- "\x95\x33\xcb\x30\x6d\x24\xc1\xb2\x6d\x7a\xfe\xde\x31\x5e\xc7\xf7"
- "\xbe\x91\xe1\x75\x40\xf0\x04\x8b\x70\x06\x19\x8e\x9f\x4d\xcd\x24"
- "\x09\x1a\x86\xb6\x2d\x4a\x86\x31\xf9\x6d\x60\x52\xb7\x31\x56\x67"
- "\xe6\xb8\x64\xb8\x68\x9f\xed\xd3\x26\x82\xf5\x6d\xd3\x27\xab\xe1"
- "\xd8\xc3\x40\x78\x15\xb8\xab\x64\x7c\x29\x41\xfd\x1d\x07\x10\xbb"
- "\xcd\xc4\xf1\xc5\xf6\x48\x20\xb7\x2f\x86\x45\xcf\xc8\xe1\xf0\x3a"
- "\x7d\x6a\x10\xfc\x08\x50\xf7\x23\x96\x8d\x48\xcb\x90\xe1\xd2\xfc"
- "\x12\xa4\x11\x2c\xa6\xeb\xd5\xb4\x96\x61\xe3\x14\x3a\x22\xaf\xf5"
- "\xea\xfe\xfa\xb0\xff\x07\x44\x1b\xe3\x7d\x3b\x26\xe6\xc8\x7d\x99"
- "\xa2\xae\x97\xe0\xb0\xdc\x24\x99\x27\x46\xec\x47\xfa\x20\xbe\xaa"
- "\x85\xb9\x0a\x5c\xa9\x0f\xae\x47\x1e\xd9\x1d\x16\x00\xb9\xdf\xa3"
- "\x58\xe5\x23\x09\x72\xdf\xcd\xc1\x74\xd4\x39\x15\x3a\x22\xff\x08"
- "\x76\x34\xc2\x64\x28\x78\x7d\x36\xfe\xcd\xbe\xe8\xb7\xcd\x7b\x35"
- "\xc9\xc5\x89\x6e\x20\x59\x26\xd8\xab\x65\x9c\x99\xa2\xcf\x46\x38"
- "\x30\xc8\x6b\x3d\xe5\xd9\x65\x38\x5e\xb7\x2f\x7a\x81\xd9\xa7\xd3"
- "\xcf\x1e\x0a\x6b\x50\xc3\x5e\x23\x60\x33\x5d\x08\x9b\x3d\x14\xd6"
- "\xa8\x86\xbd\x56\xc0\x3e\x7a\x10\x61\x73\x86\xc2\x7a\x47\xab\x60"
- "\xaf\x13\xb0\xb3\xf3\x10\x36\x77\x28\xac\x49\x0d\x9b\x28\x60\x73"
- "\xa8\x0d\x8b\x87\xc2\x9a\xd5\xb0\xd7\x0b\xd8\xb9\x89\x08\x9b\x37"
- "\x14\xb6\x4c\x0d\x7b\x83\x80\xcd\x6a\x47\xd8\x7c\x2d\x6c\x03\x97"
- "\x03\x18\x27\xcb\xc1\x8d\x02\x76\x5e\x39\xc2\x5a\x42\xf4\x2d\x82"
- "\xe3\x15\xb0\x49\x02\xf6\x91\x02\x84\x2d\x08\xc1\x0b\x35\xec\x4d"
- "\x02\xf6\xe9\x74\x84\xb5\x86\xe0\x85\x1a\x76\x8c\x80\xcd\x4d\x42"
- "\xd8\xa2\x10\xbc\x50\xc3\xde\x2c\x60\x9f\x38\x8e\xb0\xc5\x21\xe8"
- "\x1b\x80\x8d\x5e\x54\x82\x30\x25\x48\x93\xf6\x10\xb4\x55\xe3\x1c"
- "\x2b\x70\x3e\x95\x8a\xf0\x65\x21\x68\xab\x86\x1d\x27\x60\x97\x9c"
- "\x42\xd8\xed\x43\x61\x41\x77\x40\xd0\xf7\x6e\x99\xbe\xb7\x08\xf8"
- "\xbc\x2a\x84\x2f\x0f\x41\x5f\xca\xb7\xcb\xba\x96\x2c\x60\x17\x36"
- "\x22\x6c\x55\x08\xfa\xaa\x61\x6f\x15\xb0\x6b\x4d\x08\x5b\x13\x82"
- "\xbe\x6a\xd8\xdb\x04\xec\x72\x92\xc9\x3d\x21\xe8\xab\x86\xbd\x5d"
- "\xc0\x3e\x0b\x08\x5b\x1b\xa2\xbd\xe3\x54\xb0\x29\x02\xd6\x42\xed"
- "\xad\x0b\xc1\x0b\x35\xec\x1d\x02\xd6\x7a\x14\x61\x1b\x43\xf0\x43"
- "\x0d\x7b\xa7\x80\x7d\x8e\xf4\xb8\x29\x04\x3f\xd4\xb0\x77\xb1\xe8"
- "\x55\x4e\xd9\x2e\x1e\xd4\xc2\x22\xef\x85\x4d\xb4\x41\x2a\x8b\x5e"
- "\x5d\x86\xf7\x04\xc7\xf7\x45\x1c\xc4\x67\xf3\xde\x43\xf6\x46\xb6"
- "\x61\xe3\x59\xf4\x33\x9d\x32\xbe\xc3\x43\xea\xb6\xe9\xd5\xb0\x13"
- "\x58\xf4\x56\x90\x61\x8f\x0c\x85\x35\xa8\x61\x27\xb2\xe8\x75\x4a"
- "\x3b\x8f\x0e\x85\x35\x0e\xc2\xb2\xe8\xf5\x35\x08\x73\xac\x5e\xb6"
- "\x8d\xaa\x76\xde\xad\xc2\x37\x89\x45\x6f\x34\xcb\xf8\xec\x43\xf1"
- "\x99\xd4\xb0\x77\xb3\xe8\xd2\x83\x32\x6c\xcb\x50\x58\xb3\x1a\xf6"
- "\x1e\x16\x5d\xec\x92\x61\x5b\x87\xc2\x96\xa9\x61\x27\xb3\xe8\xcd"
- "\x8d\x32\xec\xf1\x21\xb4\x27\x3d\xb0\xa1\x2f\x20\x6c\xd2\xbd\x2c"
- "\xba\x24\x5b\x86\x0d\xf2\x03\x54\xe3\xf0\x7d\x82\xef\x85\xd9\xc8"
- "\x77\xfe\x4d\x06\xda\xfc\x93\xa1\x7c\x0c\xeb\x9d\x70\xd5\x59\xa9"
- "\xc2\x2b\xc6\x24\x65\x6f\xfa\x4a\xde\x37\x7f\xdd\xbc\xbc\x2c\x37"
- "\xf3\xaa\xd3\x76\x4b\xac\x7d\xa2\x1b\xf4\x7c\xbf\xe3\xd8\xdd\xe5"
- "\x4e\x4c\x77\xdd\x34\xaf\xac\xaf\xb2\xd2\xe0\xd4\xdd\xc9\xf7\x03"
- "\xc6\xfb\x04\x27\xac\xca\xa1\xfb\xdd\x36\xe6\xa1\x3d\x6f\x7d\xbb"
- "\x16\x9a\x1c\xfe\x1e\xda\xfb\xca\x83\x38\x3c\x5d\x56\x88\x30\x15"
- "\x02\xbd\x6b\xe9\x77\x14\xf7\x00\xe2\x7f\x82\xad\xb5\xa4\x63\x1b"
- "\xcc\x58\x5f\x7e\x07\x3e\xf3\x36\xa0\x0f\x84\x63\x65\xba\xbd\x90"
- "\xf6\x13\xaa\xac\x70\xc5\xd6\x98\xd9\x8b\x8b\xba\xad\x5b\xe1\xe6"
- "\xb3\x52\x25\xb7\x03\x7c\x6f\x91\xf3\x96\x07\xfd\xb1\x0b\xd3\x69"
- "\xcf\x11\x56\xfb\x8a\x49\xec\x47\x52\xf9\x3e\x6f\xb3\x8d\xb5\xb3"
- "\xa4\x79\xd9\xfe\xfe\xed\x65\x74\xf6\x81\x7d\xeb\x59\xe8\x50\xe5"
- "\xb9\xae\x7f\x85\xef\x55\x82\x7d\xca\x0e\xb9\x87\x87\x0d\xe2\x59"
- "\xf5\xc2\x5c\xec\x57\x0f\xfa\x6b\x99\x72\x1f\x3d\x4e\x5d\x44\xbe"
- "\xb8\x7f\x59\xef\xd4\x8d\x30\xca\xf7\x46\xa7\xce\xd4\x29\xdf\x27"
- "\x29\x7b\xa9\x84\xde\xdb\x65\x61\x2a\xf6\x2d\xc3\xbf\x3f\xd7\x40"
- "\xfe\x25\xed\xb3\xc6\x62\x17\xa6\x9a\xc6\xd0\x99\x16\x2f\x1f\xc1"
- "\x3a\x33\xc4\xfe\x98\x2f\x6f\xc2\xdf\x78\xf9\xd7\x25\xff\x32\x82"
- "\xe1\x7c\x4b\x9a\xd7\xce\xaa\x2a\x13\xa9\x6f\x5b\x7d\xcc\x8f\x78"
- "\x2d\xac\xdc\x5e\xe6\x28\xee\x06\xb1\xaf\xf4\xcb\x3f\xe5\xfb\xdc"
- "\x10\xed\x90\xbe\x2c\xca\x5e\xc6\xeb\xaa\xae\x31\xab\xdb\x95\x36"
- "\xe9\xee\x7b\x26\xdf\x7b\xdf\x0f\xa6\xdc\xbf\xec\xe9\x67\xf2\x97"
- "\xaf\x78\xd6\xb2\xf2\xb9\x55\x05\xab\xd7\xac\xb5\x3e\x5f\xb8\xae"
- "\x68\xfd\x86\x8d\xc5\x9b\x36\xd3\xa6\x2d\x83\xed\xdf\x9f\xa1\x73"
- "\x4b\x80\x75\x3c\x8c\x75\x54\xf1\xfd\x9d\x28\x4d\xd0\xbe\x4a\xaf"
- "\x37\x85\xf6\x6b\x1d\xe8\x69\xd2\x1e\xcb\x3d\x52\xd5\x32\xda\xef"
- "\x19\x79\xac\x73\xd4\x3d\x62\xa7\x3d\xf8\x3b\xa5\xaa\x9c\x36\xd7"
- "\x23\x76\x3a\x03\xa2\x39\xb1\x1b\x92\xc7\xd1\x3e\xfd\x55\x66\xca"
- "\x6f\xb8\x0d\xa0\x05\xcb\x86\xc2\x39\xce\x08\x89\xaf\x5d\xcb\x5c"
- "\x7b\xae\x65\x3d\x84\x7f\xcf\x5e\xd6\xed\x7a\xc1\x02\xbb\xf0\x19"
- "\xe5\xcc\xd8\x25\x55\x5f\xd3\x9c\xc4\xf7\x32\x4f\xaa\xdf\xcb\x3a"
- "\xb7\x5f\xcb\x3a\x5f\xdc\xcb\x7a\x1a\xae\x65\xce\xe4\x3d\x10\xd3"
- "\x57\x59\xd5\xea\x94\xaa\x4c\x5c\x66\x31\xdf\x1f\xfd\xb2\x7d\x37"
- "\xe6\x4d\xf4\x42\x44\x03\x3e\x63\x9a\xbb\xd9\x24\xda\xfd\xab\x2f"
- "\x3d\x91\xd8\xbf\x43\x6c\xa0\x40\xb7\x0b\xeb\x11\x3c\xaa\xbe\xbf"
- "\x05\x47\x51\xac\xcf\xe5\xf0\x74\x80\x53\xaa\x9e\xd2\xf0\x35\xaf"
- "\x2f\xde\x51\xdb\x03\x84\xef\x97\x85\x9e\xc8\x75\x37\x30\x2f\xc2"
- "\x26\xfa\x5f\x28\xd0\x61\x7d\x6e\xc4\xed\x56\xf7\x27\x65\xc5\xea"
- "\x22\xd3\x9a\xf5\x05\x05\x77\x44\x43\x0a\xff\x0d\x3a\x3f\xa2\x08"
- "\xf1\xc1\x6b\x7b\x59\x0b\xf6\xd3\x8e\xfd\x6d\x3d\x81\xde\x33\xca"
- "\x0b\x60\x9f\x6a\x10\x6f\x35\xa6\x1f\xc3\xfb\x63\xd8\xf6\x56\x71"
- "\xe6\x40\xfd\xef\x58\x65\x75\x06\xb6\xb3\x95\xf6\xa8\xa5\xbd\xa7"
- "\x7a\x37\xe6\xe8\xb0\xdf\x7b\x10\xae\xd5\x74\x03\xdc\xda\x25\xed"
- "\xba\x06\xdb\xd1\x84\xf7\x04\xff\x2e\xf1\x11\xe1\x5b\x44\xbf\xea"
- "\xf9\x3e\x43\x48\x2b\xfb\x81\x6b\x59\x55\x5f\x65\xb5\x8b\xf6\xa6"
- "\xe3\x7b\x76\xe3\x33\xd2\xa5\x15\x61\x6b\x7a\x4b\x73\x74\x18\x4b"
- "\xe9\x1a\x06\x71\x56\xdb\xa9\x4d\xd4\x0e\x8a\xe7\x3e\x42\xef\xc9"
- "\x3f\x90\x0b\xe3\x3d\xa0\xfb\xa8\x13\xa0\x6e\x2f\x6b\xc4\xab\x0e"
- "\xaf\xda\x0f\x31\xef\x0f\x78\xb5\x62\xfa\x71\xfc\xfd\x10\x7f\xff"
- "\xd0\xc9\xdf\xbf\x25\x52\xbb\xd7\x95\xb0\xee\x89\xb5\x70\x0b\xe1"
- "\x47\xd9\x7a\xbc\x43\xaa\x37\x52\xdb\x69\x1f\x48\x16\xbd\x6b\x7b"
- "\xf0\x7e\x79\xbb\x3d\x80\xf9\x20\xd5\xc4\x88\x5f\xf5\x55\x93\x83"
- "\x57\x91\x7c\x7f\x0c\x61\x3b\xe5\xfb\x76\xbc\x4e\x5d\xfa\xd2\xe2"
- "\x0b\x77\xbd\x92\x79\xf9\xb0\x97\x75\x6d\xbf\x3c\xb8\xd7\x00\xa4"
- "\x1f\xe7\xe2\x55\x13\x9c\xfe\x63\x8b\x48\x7b\x63\xb2\x78\x7e\xc3"
- "\x2c\xff\x16\x80\xb4\x1f\xe9\xb4\x1f\xf1\xef\x3f\x28\xd2\xf6\x1f"
- "\xc1\x91\xc6\x8b\xf7\x06\x4d\xfd\x84\xb3\x8e\xf8\x39\x40\xe7\x1f"
- "\x20\x2f\x9d\xd2\xae\x1c\xe2\xd1\x6e\x21\x5b\x3a\x3f\xe3\x69\xd9"
- "\x28\x5b\x75\x01\xf9\xa9\x99\x11\x2c\x3f\x35\x69\x1a\xf9\xa9\x21"
- "\x5b\x84\xfa\x52\xd7\x20\xe4\xe5\x58\xef\x0b\xf9\xf8\x5c\x33\x19"
- "\xf1\x1c\x33\x2d\xe1\x38\xb8\x3f\xb2\xfb\x2c\xc6\x7d\x16\xd0\x93"
- "\x7d\xe9\x91\x6a\x5e\x22\x99\xa5\xba\xe5\x7a\x45\x5b\xb0\x7d\x98"
- "\xd6\x48\xed\x5b\x8b\x78\xf1\xb9\x09\xe1\x1a\x1d\xf0\xa5\xd2\x36"
- "\x5e\xa6\xf2\x39\x94\x47\xb9\xbd\x84\x93\xca\xb1\x40\xbf\xb2\xa9"
- "\x8c\xa8\xfb\x95\xfb\x31\x9d\xe2\x44\x28\xbd\x00\x11\xb4\x56\x99"
- "\x64\x92\x7e\x1d\xde\x34\xd4\xa5\x4c\xf0\xf7\xe5\x02\x86\xfa\x69"
- "\xa8\x6f\x51\x1d\xd2\x2b\x49\x13\x4a\x20\x8d\xf0\x91\x4d\xc7\x7e"
- "\x38\x1b\x48\x17\x05\x2e\xf9\xfc\xdf\x5d\xd9\x1f\x5a\x81\xd7\x53"
- "\x4f\xed\xc1\x7c\x55\xbd\x7b\x28\x0e\xdc\xbd\x59\xf4\x15\xeb\x6a"
- "\xc2\xf2\x87\xa9\xef\x44\x4f\xcc\x3f\x8a\x78\x8a\x29\x8f\xef\xa5"
- "\x2d\xfa\xd3\x44\xfb\xad\x12\x3d\x08\x9e\xce\x34\x11\xfb\xef\x55"
- "\x1f\xe0\x74\xc3\xf2\xc4\x0f\x86\x75\x10\x8e\x52\x2f\xf3\x32\xb4"
- "\x47\x6f\x6d\xf6\xe0\xb8\xfe\xea\x85\x60\xfe\xbc\xd2\xae\xe6\x0f"
- "\x96\x3b\x8c\xe5\x5b\x18\xf6\x91\xec\x09\xd6\x19\x4f\xe7\x28\x60"
- "\x5a\x8d\xbf\x12\x71\x6c\xf0\xf0\xb9\x11\xc4\x73\x1a\xdb\x52\x43"
- "\x78\xb0\x3d\x2d\x02\xd7\xab\x49\xef\x96\x04\xf3\x5a\xc6\xd7\x44"
- "\x3c\xe7\xfa\xbc\x99\xf7\x09\x6d\xd7\xab\xbf\xae\x17\x79\x47\x11"
- "\xe6\x28\x1b\xc8\x04\xda\xbf\x54\x8c\x25\x3c\xef\x48\xe9\x37\x9c"
- "\xbf\x2d\xc2\xae\xbd\xfa\xc7\x75\x5b\x58\x77\xa0\xdd\xaf\x96\x2b"
- "\x7b\xc0\xca\xed\x3e\x42\xf5\xb1\x8d\x8b\xf9\xb8\x4a\x75\x50\x79"
- "\x19\x5f\x3e\xe1\x53\x68\x35\x01\xdb\x21\xe8\xf5\x4a\x2d\xa6\x37"
- "\x91\x2c\x72\xba\xa1\x1d\xed\x2d\x25\x59\x7c\xb5\x0a\xcb\x1f\xdb"
- "\x45\xcf\x1b\xf9\xb3\x89\xdb\xd8\xc1\xfc\x57\x3e\xa6\x7c\x07\xc6"
- "\xd9\xbb\x57\xa1\x2c\xf9\x01\x6e\x49\x80\x34\xb7\x8d\xf7\xed\x90"
- "\xfb\x85\x0c\x5d\x33\x7a\x58\xd4\x4e\xa4\xd1\xd1\xbe\xca\xd7\x26"
- "\xa3\xed\x2f\xa2\xb6\xa2\xbd\x3e\xc2\xde\xca\x05\x6a\x33\xda\x33"
- "\xb9\x7d\xaf\xfd\x54\xe6\xfd\x11\xea\x23\xd1\x73\x82\xb0\x7d\x98"
- "\xf7\xe3\x59\xd4\xf6\x40\xbf\x5f\x2b\x53\xd3\x98\xf7\x1b\xf9\x40"
- "\xfc\x22\xbe\xa8\x70\x92\xec\xd7\x20\x2e\x79\xaf\x36\x21\x1b\x44"
- "\xeb\x9a\x6b\xd9\x71\x82\x0f\xc0\xee\xe1\xfb\xdb\x6d\xc5\xba\x27"
- "\x5a\x81\xce\xb8\xd0\xd1\x3e\xbe\x88\xf7\x10\x9d\x57\x83\x38\x8e"
- "\x12\x4d\xb1\x2d\xb1\x24\x8f\xf8\x7c\x5c\x2e\x17\x83\xe3\x79\x2a"
- "\x5e\xe9\x01\xfd\xdf\xe3\x0b\x96\xaf\x3d\x5a\xfd\x27\x7e\xd7\xf8"
- "\x4b\x33\x81\xcb\x43\x21\x98\xce\x49\x7b\xf6\xc9\x63\x87\xcc\xeb"
- "\x3d\x5f\x34\xa3\xbe\xa8\x70\x14\x69\x78\x7d\x94\xcb\xe3\xc6\xd9"
- "\x74\xde\xaf\x0e\xcb\x1e\x95\xf1\xf0\x3e\x73\x79\xb2\x71\x19\x38"
- "\xce\x36\x62\x3f\x07\xe5\xe0\xb5\x76\x99\xcf\xc7\x35\x34\x51\x6c"
- "\x57\x12\x9d\xb7\x40\x36\x09\x7d\xcc\x07\xfb\x06\x02\x76\x89\x78"
- "\xef\xe7\xbc\xdf\x53\xdc\x20\xc6\x5b\xd9\x6e\xed\x11\xf9\xd7\x06"
- "\xc9\x30\xb5\xe5\x17\x5c\x7e\xa9\x2d\xa5\x8b\xa9\x2d\x47\x79\x3b"
- "\x4a\x4d\x70\x4e\xfa\x71\x32\xd5\x8f\x65\x0f\xcb\xfa\x2a\xe3\x7a"
- "\x6d\x3b\xe1\x7a\x11\x6d\x15\xb5\x09\xeb\x36\x72\xfb\x37\x93\xcb"
- "\xc1\x4b\x72\xdb\x5b\x3d\x36\x2a\x5b\x53\xfc\x8d\xc4\xcb\xa2\x1f"
- "\xb3\xbb\xc7\x23\xf6\x64\x8e\xc6\xf2\x07\x4d\x4f\x13\xfc\xbe\x4e"
- "\xb2\xd1\xa6\x27\xf9\xfd\x09\xd3\x42\x94\xd5\xb3\xa0\x47\x7c\x06"
- "\x92\x51\x45\x2e\x7a\xa4\x7d\x6f\x93\xbf\x8e\xb4\x3e\x84\x3e\xd2"
- "\x41\xa2\x37\xc9\x32\xfa\x48\x93\xfb\x2a\x7f\xdc\xa3\xc8\x2d\xd6"
- "\x53\x47\xb4\x17\xfc\xd9\x3b\x09\xe5\xf8\x68\x40\xb6\xf6\x4e\x92"
- "\xe9\x78\x10\xe9\x68\xc0\xfa\x7e\x2d\xf7\xeb\x20\xc2\xa3\x2f\xb6"
- "\xef\x4d\xb9\xed\xb5\x32\xfc\x1c\x85\x0f\xb2\xae\x1e\xdf\x45\xf6"
- "\x97\xf3\x60\x6f\xa7\x5c\xb6\x49\xae\xeb\x8c\x02\x4b\x3e\xa2\xd8"
- "\x6b\x7d\xef\x19\xb2\x83\x13\x91\xf7\xdc\xf6\xf1\xb3\x9c\x44\x1a"
- "\xe9\x8e\xa8\x63\x5f\x35\x97\x43\xf4\x7b\x02\x72\xb4\xf7\x98\xc6"
- "\x3e\x91\x2d\xae\x69\x43\x1c\x64\x4f\x49\x96\xc8\xa6\x52\xbc\x80"
- "\xf8\xf6\xc8\xfa\x23\xb7\xf9\xf5\x3b\x82\x65\x65\xdf\x26\x94\x95"
- "\xf1\x01\xdc\xaf\x27\x86\x1a\xe7\x1a\x84\x0d\xac\x13\x65\x5e\x5f"
- "\x29\xf7\xed\x90\xe8\x9b\xfc\x4c\x74\xdb\xca\xe9\x36\x5e\x45\x47"
- "\xa4\x5b\xed\x3e\x19\xfe\x28\xd9\xf2\x80\xbe\xbe\xfe\x67\x45\x97"
- "\x87\xda\x8b\xda\x0a\xd2\x07\x55\xbb\x0e\x6b\xec\xc5\xd1\xd0\xf6"
- "\xe2\xf5\x32\xb9\xbf\x8d\x1a\xdd\x68\x92\xfd\xdd\x03\x0a\x1f\xda"
- "\xdc\xfd\xf2\xbe\xe2\xd5\x07\xc8\x7e\x52\xdd\xea\x31\xa8\x5e\xd0"
- "\x55\xd6\xe5\xda\xf5\x43\xf9\x50\x9b\xa1\xd6\x67\xe2\x35\xd9\x04"
- "\xc2\x41\x3c\xe5\x7e\x25\xa6\x09\xbe\xd6\x92\xff\x5e\xa3\xb6\xd1"
- "\x08\xbb\xc7\xcf\x48\x5f\x6a\x33\x83\x75\xf1\xf5\x23\xb2\x2e\xca"
- "\x75\xef\xbb\x1e\x79\x94\xa6\xaa\xf7\x98\xa6\x5e\xe2\x4d\x0b\xd1"
- "\x41\xe6\x69\xa4\x32\xa6\x11\x3c\x96\x2d\xc6\x32\x2e\xcd\xf8\x58"
- "\x43\xed\xc3\xba\x2c\xdc\x66\xed\xe5\xb6\xa2\xb8\x4f\xb4\xc7\xdd"
- "\x20\x8f\x13\x98\x96\x26\xa7\xd9\xe5\xb1\x44\x91\x9b\xe5\xc1\x6d"
- "\xda\x97\x1d\xda\x3f\x7a\xdd\xa2\xf8\x47\x1c\x17\xb7\x45\xfb\x72"
- "\xe4\xfe\x51\xda\x78\x91\xf6\x7a\x12\xa5\xed\x12\x74\xd8\xc3\xf8"
- "\x78\xb5\xd7\x2e\x8f\x57\xa4\x5f\x12\x3e\xa7\x91\x8e\xd1\x33\xe2"
- "\x38\x48\xf8\x1d\x65\xfd\x14\x43\xd4\x3a\xa5\x1f\x1f\x27\x7b\x40"
- "\xf6\xc2\xb4\x42\xd8\x0d\xd3\x5c\xfe\xfb\x15\xd9\x1d\xf2\x43\x28"
- "\x1f\xe1\x8e\x91\x2d\xea\x92\xde\x88\x32\x3d\x8a\x7e\xc1\xdf\x0c"
- "\x88\x77\x5f\x8f\x28\xfb\xc6\x4d\xdc\x57\xf8\x5b\x66\x84\x92\xa6"
- "\x94\x43\xbb\x75\x82\xca\x51\x79\xc5\x7e\x91\xed\xf2\x92\x6d\xe2"
- "\xf5\xbd\xb1\x4c\x96\x71\x1e\x37\x28\x7e\xd1\x80\xa4\x82\xa5\xbd"
- "\x9d\xb9\x4d\x7b\xe3\x90\xb0\x67\x6f\x1c\xa0\xb2\x9c\x7f\x68\x2b"
- "\xb7\x7e\xc3\x4e\x37\x14\x82\xbe\xfe\x4b\xb2\x8b\xd5\x75\x72\x3b"
- "\x3d\xa2\x1f\x6f\xbc\xcb\xfb\x21\x6c\x6a\x8d\x68\x4b\x75\x5d\x7d"
- "\x3f\xcf\xfb\x84\xfa\x42\x79\xbb\x55\x79\x6c\x20\x85\xf2\xbe\xe1"
- "\xed\xd2\x94\xf3\x0f\x58\x86\xc0\x37\x88\x33\xb3\x0c\xf5\x7b\x15"
- "\xdb\xbb\xbf\x58\xb4\x73\xff\xbd\x8a\xdd\x45\xba\xb4\x90\xed\xe5"
- "\x79\x2b\x64\x98\xb9\xf2\x2f\xb7\xef\xfb\x97\x0b\xba\x26\x4a\x32"
- "\xbd\x8f\x8b\x7e\xec\xdf\xc4\xe3\xec\xbf\xe5\x22\x6d\xf7\x2f\x56"
- "\x68\xab\xbe\x27\xfd\xc1\xfa\x8d\xf4\xcc\xe5\xbe\x84\xc7\xb0\x75"
- "\x04\x43\x6d\x12\x63\xc4\x1b\x39\x5a\x9f\xba\x4b\x3a\x70\x81\xc6"
- "\x25\xe1\xab\x1e\xf8\xa3\x3c\xff\x02\xf6\xc2\x9f\xe0\xb8\x50\x97"
- "\xa4\xd8\x18\xd6\x97\x89\x31\x7f\x07\xc2\xd4\xf1\x73\x2d\x68\x3f"
- "\x60\x35\x0c\xd9\xa7\x5f\xf5\x3b\x65\x9c\xfb\x3d\x8a\xdd\x20\x5b"
- "\xd2\xe6\xee\x90\x7d\xba\xba\x83\xf5\xb2\x2d\x39\x27\xd5\xfd\x2c"
- "\xd8\x0f\xab\xfb\x59\xb0\xcd\x38\xf0\xb6\xd6\x66\xa0\xdf\xbc\xbd"
- "\xaf\xb2\xae\x24\xc8\x0f\xc0\xb4\x8b\xdb\x8e\xba\x6c\xd2\x51\x3a"
- "\x63\x81\xdb\x27\x3e\xa7\x74\x60\x94\xd2\x66\xb2\x9b\xbd\x2f\x28"
- "\xf3\x17\x07\x7e\x41\xbe\x9a\xa6\xbe\x9e\x20\xdb\x49\xf5\x29\xf8"
- "\xf4\x40\x7b\xf4\x23\x1d\x68\xbe\xa5\xee\x98\x6c\xe7\x1b\x83\x6c"
- "\xa5\x3c\x86\x91\x9d\x0c\x1e\xab\xaa\x0f\x04\x8f\x55\x07\xf6\x0d"
- "\xb5\x91\x07\x2c\x97\x3f\x56\x1d\x30\x93\xdd\x52\x6c\x64\xb0\x2d"
- "\x38\x50\x50\x1f\xe4\xcb\xd6\xb9\x15\x5f\x36\x60\x47\xeb\xb6\x93"
- "\x8d\xc2\xfa\x8f\xca\x75\x77\x3a\xa5\x97\xbb\x95\xba\x31\x3f\xa9"
- "\xcd\x84\xb2\x59\x59\x9d\x8d\x32\xd5\x2a\xfb\x80\x5c\x37\xfb\xf9"
- "\x3e\xe9\xfb\x8d\x28\x7f\xd1\x24\x67\xf6\x35\x5f\x42\x67\x60\xac"
- "\x68\xe9\x5d\xab\xd0\xb7\x7e\xbd\xda\x2f\x3c\xb0\x97\x95\xf7\x55"
- "\xd6\xcf\x56\xf7\xb1\x1a\xd3\x76\xcb\x73\x08\x9c\xb6\x1c\x57\xbd"
- "\xa9\x61\x6f\x70\xdf\x44\x3f\xea\x73\xa8\x1f\x14\x13\x61\xfd\x09"
- "\xe4\xf7\xa0\xcf\x87\xf7\x3f\xae\x6d\x18\x94\xf9\xdd\x3d\xdf\xd8"
- "\xd4\xfe\x55\xb5\x9b\x6c\xa5\x1c\x7b\xb6\xa2\xbf\x53\xa3\x9e\x8b"
- "\x99\x33\x3d\xdb\x64\x2d\x5c\xb9\xa6\x68\xc5\xdd\xa6\x95\x6b\x56"
- "\x16\xad\x5c\x56\xb0\x72\xf3\xb2\xa2\x95\x6b\xd7\xa4\xae\x5e\xf6"
- "\xec\xca\x67\x4c\x1b\x97\xad\x33\xa5\x15\xdf\x5a\x1c\x0d\x01\xd0"
- "\x07\x4c\xcb\xd6\xad\x5b\xbf\x7a\x79\xbe\x69\xcd\xca\x67\xc6\x17"
- "\x2e\x5f\xb7\xbc\xc8\xb4\xac\x70\xed\xfa\x35\xf9\xa6\x5b\xf3\x27"
- "\xdc\x9a\x76\x5f\x7e\xb4\x7a\x0e\x6d\x9c\x11\x7a\xfc\x5f\xff\xb5"
- "\x7b\xf7\xd7\x60\x88\xd7\x59\x0b\xe3\x8b\x57\xae\x11\x73\x76\x0d"
- "\x6f\x4f\xdc\x03\x56\x3a\x47\x91\xce\x0b\x63\x95\xf5\xed\xf8\xab"
- "\x27\x38\xec\xa7\x89\xce\x51\xc4\xb6\x27\xf5\x55\x36\x94\x39\xa5"
- "\xb7\x2c\xfc\x2c\x30\x4c\xc7\xbe\x25\xb1\xaf\xff\xd0\x8d\x3e\x9b"
- "\x95\xd6\x04\x37\x7c\x0d\x09\x35\x1b\x40\x8f\x57\x0c\x5e\x46\x3a"
- "\x67\x11\xcb\x1c\x71\x4a\x8d\xf2\x59\x7a\x8d\x39\xae\xa8\xdf\xa7"
- "\xb1\xf2\xdf\xa7\x09\xbe\x34\xce\x53\xe6\x79\xb3\x5e\x82\x2c\x92"
- "\xcf\x0e\xa9\x91\xbf\xd7\x7b\x11\x65\x99\xe6\x4b\x7b\x7f\xff\xb0"
- "\x19\xfd\xc1\x53\xf6\x1b\x78\xde\x3c\xb7\x04\x31\xd8\x2e\x7d\x73"
- "\x49\x1a\xbc\x86\x75\xad\x4b\x64\xac\xaf\xb2\x31\x51\x99\x4f\xc3"
- "\x3e\x18\xb1\x2f\x27\xe5\x7e\x0c\xf0\x7e\xec\x65\xc9\x7b\x46\x63"
- "\xfb\x5e\xa5\xf6\x34\x66\x28\x7d\xc0\x76\x9f\x74\x4a\x0d\x07\xb1"
- "\x9d\x46\x6a\x57\xa8\xb9\x3e\x9a\xef\xc2\x76\x56\xfb\x37\x20\xdd"
- "\xc6\x88\x33\x22\x76\xd7\x0b\xfd\xc3\xfe\xb4\x34\xe0\xfd\xae\x2f"
- "\x21\xa6\x9a\xce\xf0\xb3\xdd\xcc\x4e\xb8\xbd\xe0\xb0\x9c\x84\xf8"
- "\x4d\xcc\xc5\xfe\xf9\xaf\xdd\x72\x9f\x8e\x92\x6d\xf8\x5f\xcf\x9d"
- "\xd4\x53\x9f\x70\xac\x88\x69\xf8\x32\xec\xdc\xa2\xfe\xb5\x6b\x99"
- "\x9b\xed\x57\xfb\x5c\x6f\xf2\xb3\xbd\xc9\xdf\xea\xb5\xd1\x99\x70"
- "\x6f\x1a\xb0\xee\x3c\xd9\x37\x76\xb3\x81\xc5\x2a\x5f\xaa\x91\xe4"
- "\xcc\x1d\x06\xb7\x41\xc1\x4d\x67\x03\x52\x19\xc1\xff\x37\xab\xb1"
- "\x8c\x4b\x85\xdf\xa2\xc5\x4f\x38\xf1\xde\xa5\xd4\x23\xe2\xf0\x37"
- "\xc9\x27\x70\xa1\x2c\xbb\xc2\xd4\x97\xfc\xea\x5e\xf6\xb1\x03\xd3"
- "\x77\x7f\x03\x7a\x84\xc5\xd8\x95\xe3\x47\xfd\x68\x48\x25\xfc\x2f"
- "\x5e\x0b\xb0\x1d\x61\x7a\x2b\x1b\xf3\xdc\xfc\x9c\xbe\x37\x51\xff"
- "\xab\x73\xb5\xf3\xd8\xb2\x3c\x3f\xa0\x91\x67\xf3\xab\xe4\x13\xee"
- "\x41\xfc\x28\x43\xbb\xbf\xc2\x71\x18\x9f\x27\xec\x81\x14\xaa\x07"
- "\xef\xdb\x69\x3e\xa4\xaf\xf2\x27\x53\x94\xfa\x18\xca\xff\x2e\xbf"
- "\x98\x83\x91\x65\x2b\x95\xe6\xae\x4b\x8b\x19\x6b\x46\xfb\x4e\x6d"
- "\x24\x19\xc3\x32\x05\x8a\x4c\xa1\xac\x7f\xcc\xe5\x2a\x01\x52\x58"
- "\xe5\x9b\xae\x86\xd1\x08\x87\x72\x55\x8f\xf2\x44\x72\x85\xb0\xb5"
- "\x8a\x4c\xa1\xac\xb5\x13\x1c\xb6\x21\xfa\xf0\x66\xb3\x9e\x6c\x64"
- "\xa7\xf4\x56\x2c\xc9\x18\x7b\xfd\x47\x27\xd9\x75\x8b\x4e\x0a\x3e"
- "\xbd\x15\xeb\xf0\x08\x1e\x04\xe8\xfe\x13\xa7\x8a\xee\xed\x28\xc7"
- "\xd1\x44\x67\x31\x57\xfd\x56\x2c\xb6\xad\x9d\xfb\xe2\x5b\x90\x07"
- "\x7c\xac\xfa\xc9\x71\x2a\x2f\xd3\xf0\x78\x80\x86\x6f\xa5\x84\xa2"
- "\xa1\x86\x76\x7a\x71\x4e\xe0\x5b\x93\x49\x57\xb0\xcc\x62\xe5\xec"
- "\xbf\x50\xbc\xc4\x3a\xf4\xfa\x3d\x60\xa0\x3a\x5a\x12\x38\x7c\x95"
- "\x52\xc7\x6e\xa4\xb5\xab\xd4\x72\x51\x79\x6e\x69\x04\xa0\x39\x71"
- "\x2a\x9f\x9c\x40\xf4\x7d\xeb\x78\xa0\x3c\x73\x6b\xcb\xdf\xfa\x4c"
- "\x50\x5b\xf9\x85\x6d\x75\xbe\x26\xce\x75\xc5\xfa\x9b\x62\x2e\xd6"
- "\xde\x64\x93\x18\x27\xed\xe3\x48\xbe\x9b\x66\x38\x6a\x01\x28\x4d"
- "\x7e\x9e\xdc\x8b\x63\x8f\x76\x7e\x3f\xfc\xfb\x86\xa6\x97\x82\xdf"
- "\x37\x34\x15\x85\x7b\xdf\xa0\xa9\xf7\x5d\xaa\xd7\xdf\x90\xa3\x53"
- "\xd5\x7d\xc8\x1f\xa2\x6e\xa5\xfc\x84\x46\x75\x3c\xf3\xd3\x51\xd4"
- "\x86\x36\x3a\x9f\xfc\xc6\x1c\x1d\x43\x3c\x2d\x7c\x0c\xff\xa9\x51"
- "\xf8\x2f\xe4\x17\x35\xb9\x08\x46\xdb\x8f\xc1\x3f\x43\x02\xcd\xb1"
- "\xc3\x37\xfc\x21\x72\x26\xd0\x69\x80\x60\xb2\x28\xd9\x52\x10\x30"
- "\xb0\x10\x0f\x31\x00\x63\x39\x3c\xc3\x3f\x91\x24\x3f\xbb\xf8\x83"
- "\x7e\x10\x7e\x30\xff\xef\xf8\x8b\x12\xed\xe5\xf8\x3c\xa0\x93\xeb"
- "\x2b\x57\x41\x64\x5c\xa4\x34\x03\xa5\x48\xa8\xbf\xe7\xf1\x2a\xcb"
- "\x89\x44\x7c\x07\x39\x30\x63\x5e\x19\xbf\xf2\xcc\xd4\xcf\x94\x12"
- "\xfc\x8c\x7f\x11\x8b\x55\x15\xdc\x1c\x91\xcf\x97\x1e\x25\x3b\x07"
- "\x93\xa4\x46\xa3\xba\x4a\x23\x94\x45\xf2\x9b\x78\xfa\xc7\x83\xf8"
- "\x52\x30\x7f\x6c\xeb\x20\xc0\xd5\xee\x6d\x2a\xf0\x8f\x44\xf3\x6f"
- "\x49\xbc\x48\x1f\x87\xfb\x37\x46\x75\x7f\xb3\xf8\x19\x77\xf2\x5b"
- "\xc4\x7f\xf1\x3f\x53\x7b\x94\x72\x1b\x10\x8f\x5b\xf2\x42\x81\x06"
- "\xe8\x7f\x8b\x5d\x49\x52\x4b\x68\x20\xff\xf6\xf4\xe0\xe7\x14\x4f"
- "\xf0\xf3\x5d\x99\x7f\x7f\xc3\x51\x07\xe9\x9f\x52\x27\xfa\xec\x77"
- "\x26\x0c\x26\xc6\x6b\x54\x26\xbe\x46\xa3\x42\x81\x3f\xb9\x35\x11"
- "\xd8\x9e\x3a\x55\xb2\x3e\x34\xf4\x7f\xcd\xdf\x0d\xdb\x64\x85\xb8"
- "\xd9\x65\x1c\x92\x39\x4d\x93\x46\xcf\x23\x4c\x72\xda\xa4\x77\x87"
- "\xc0\xf3\x34\x93\xea\x59\x67\xc6\x7f\x1a\x01\x6e\x2d\xf8\x36\xda"
- "\xfa\xfd\xdf\xff\x85\x7f\x3a\xd2\x8f\xef\xff\xfe\x8b\xfe\x98\x18"
- "\xc5\xd1\x12\xf1\x1f\xfa\x8f\x0d\x1a\x4a\x26\x67\x30\x39\x81\xc9"
- "\x37\xdf\xca\x38\xfe\xfd\xdf\xf7\x7f\xdf\xff\x7d\xff\xf7\xfd\xdf"
- "\xf7\x7f\xdf\xff\x7d\x07\xfe\x74\x3c\x8e\x60\xf2\xdf\xe0\xfd\x60"
- "\x3e\x85\x41\x96\x3a\x26\xe9\x80\xa9\x32\xca\xee\x05\x9d\x01\x46"
- "\xe8\xbf\x3d\x2f\xcf\x34\xd8\xa0\xcb\x2c\x40\xdf\xdc\xd0\x1a\x81"
- "\x7b\xf0\xba\x51\x95\x3e\xee\xdb\x6a\xd1\xdf\xfd\xa7\x43\xe2\x45"
- "\x60\x5c\x18\x09\x23\x60\x24\x18\x20\x0a\xa2\xe1\x2a\x88\x81\x58"
- "\x88\xc3\x78\xd3\x08\xa3\x60\x34\x5c\x0d\x09\x70\x0d\x5c\x0b\xd7"
- "\x41\x22\x5c\x0f\x37\x60\x4f\x92\xe0\x26\x8c\xed\x6f\x46\x82\x8c"
- "\x0d\xdd\x97\x32\x30\x27\xe2\x3f\xf8\x7f\x36\x98\xf9\x73\xde\xf7"
- "\xe9\xff\x47\xd3\xed\x72\x7a\xbb\x9c\xee\xfc\x3e\xfd\xff\x68\xba"
- "\xe9\xbf\xf9\x77\xec\x7f\xeb\xaf\x0e\x4d\xb6\xb0\xda\xba\x90\xb6"
- "\x52\x9b\xaa\x93\xff\x06\x9f\xe1\x12\xe5\x87\xe0\x0b\x2e\xaf\xfd"
- "\x33\xe3\x35\x59\xdc\x96\x02\x88\x79\x5e\xa6\xfe\xf3\x86\x2b\xa9"
- "\xfc\x6d\xeb\xc4\xcb\x85\x17\x42\x6e\xc3\x11\xc6\x76\x15\x5e\xd7"
- "\x28\x78\x04\x0c\x7d\xe2\x7a\x0e\xf3\x3f\x6d\x02\x70\x9e\xc2\x0b"
- "\xab\x3d\x5d\x0c\xd0\x11\x03\x70\x66\x36\xc0\x67\x87\x00\xba\x7a"
- "\x02\x38\x7b\xcb\x02\xad\xbb\x60\x15\xf7\x26\xbc\xbe\x26\x44\xe0"
- "\xd4\x0d\x4e\xef\xd9\x67\xe4\x64\x9a\x26\x4d\x98\x3c\xe1\xde\x7b"
- "\x96\x99\xc6\x8f\x37\xdd\x9d\x36\x69\xd2\xc4\xb4\xfb\x26\x4e\xfa"
- "\x81\xe9\xee\xbb\x1f\x98\x94\xf6\x40\x5a\x9a\x69\xf5\xa6\xc2\x95"
- "\x93\xd2\x9e\x5d\x6e\x5a\xb1\xb2\x70\xf5\xc6\x65\x85\xcb\x2f\xd5"
- "\xa3\x2b\xfa\xa3\xe6\xdd\xe4\x07\xce\x81\x60\x6a\x4f\x03\xe9\x17"
- "\x79\x20\xfd\x7e\x0a\x0c\x65\x4f\x8a\x7c\x05\xff\xe9\x56\x1d\x04"
- "\x9d\xe5\x10\xe8\xf2\x13\x41\xb7\x24\x19\x74\x0b\xdb\x41\x57\x81"
- "\x69\x3b\xf6\x80\x6e\x5b\x37\xe8\x5e\x38\x05\xba\x22\xeb\xd0\xb4"
- "\x57\xb7\x8b\xb4\x5f\xea\x41\xf7\xb3\x29\xa0\x7b\xcb\x08\xba\xfd"
- "\x16\x91\x76\x14\x61\x8e\x18\xfe\x4b\xfa\x7e\xe5\x7f\x97\xeb\x2f"
- "\x0c\xf9\x73\x72\x99\xa2\x51\x7a\x20\x39\xc4\xa4\xe8\xf7\x7f\xdf"
- "\xff\x7d\xff\xf7\xfd\xdf\xf7\x7f\xdf\xff\x7d\xff\xf7\x3f\xfc\xcf"
- "\xa5\x83\xc9\x5f\x4a\x7a\x78\xaf\x06\xa0\xcf\x66\x48\x72\xea\xee"
- "\x9f\x4c\x6b\x48\x80\xbe\x95\x02\x03\x5f\x53\x2a\x2e\x3d\xfe\x44"
- "\xe2\xc0\x3f\x02\xaf\x91\x06\xf5\x5a\x14\x5a\x6b\xd4\x9c\x98\x06"
- "\x11\x89\x20\xd6\x45\xd9\x58\xbb\xf8\xd6\xf7\x6e\xe8\x01\x03\xff"
- "\x56\x9f\xbe\x0f\x45\xfc\xc5\x4e\xf8\x79\xa3\xb2\x8e\x4a\x81\xa3"
- "\x75\x54\xb4\xee\x0a\x61\x57\x13\x6c\x98\x75\x33\x46\xf6\x7a\xa2"
- "\x34\xfd\x00\x00\x7d\x67\xfa\xda\x5e\xe6\x6a\x29\x01\x68\x6e\x12"
- "\xdf\x9b\xd2\x9a\x1a\xc4\x7f\xd2\x09\xe5\x4d\x62\x1d\x15\x73\xbf"
- "\x88\xe9\x98\xd6\xe3\x84\x8a\x3d\x72\x9d\x3d\x4a\xba\x63\xfb\xd7"
- "\xd0\x62\xe2\xdf\xd3\xb8\x5a\x4c\x3e\xc8\x18\x4b\xfd\x8f\x4a\x44"
- "\xd8\xa4\x70\x6b\x68\x94\xf5\x62\x54\xb7\x0c\x9f\xa9\xa9\x0f\xfb"
- "\x18\xb5\x58\xa9\x2f\x0c\x8e\x18\x2a\xab\xe0\xc1\xb6\xf7\x60\x99"
- "\x1a\x05\x0f\xb6\x47\x69\xa3\x2b\x63\x0b\xaf\xe3\x50\xa8\x36\x99"
- "\xde\x4f\x8f\x5c\x7e\xdf\xc4\xce\xf4\x8f\x57\x24\x9b\xae\x99\x34"
- "\x63\x79\xf2\xed\x2c\x2d\x3e\xf5\xe5\xb4\xab\xcc\x51\xe6\xb8\x89"
- "\xf3\xd3\x24\xa3\x34\x4e\x4a\x1b\x6d\x94\x6e\x7b\x9a\xfe\x6d\x1f"
- "\x93\xc2\x7f\x4d\xfa\xf4\xed\xf9\xf7\x99\x46\x4e\xdb\xb9\x63\x83"
- "\xf9\x5f\xfe\x69\xa6\xf9\x91\x85\xeb\xee\x78\x2f\x4d\xba\xfa\x4f"
- "\x2f\xbf\x9d\xf2\x25\x41\x8c\x1d\x47\xff\x2e\x6e\x8e\x48\xb8\xc3"
- "\x46\x58\xda\xaf\x37\xbd\x47\x29\x77\xea\xd3\x8b\xf2\xef\x9d\xd8"
- "\x44\x35\x3e\xf6\xcc\x78\x1b\x95\x99\x39\x47\x94\x11\x10\x13\x8f"
- "\xa8\xf3\x26\xfc\x86\x4a\x9b\x78\x1b\x40\x2f\x70\x0d\xe2\xbe\x4e"
- "\xb4\x50\xa4\x8e\x3b\x91\x76\x93\x5c\xf7\x4f\xe8\xdf\x27\xdf\x9a"
- "\x20\x21\x86\xd1\xe3\x1f\xa6\xdc\x89\x7d\x69\x7d\xa6\x96\x74\xfd"
- "\xb3\xc9\x29\x23\x27\xfd\x13\xde\x25\x3f\x9b\x6c\x94\xf0\x7e\xa7"
- "\xb8\x27\x1a\xe4\xff\x40\x40\x18\xa5\x5b\x13\xd2\xf3\xf3\xef\xfb"
- "\xd4\x9d\x7f\x9f\x51\x32\x37\xe5\xa7\x9b\xaf\xad\x2a\xb8\x2b\x39"
- "\x3d\x39\xff\x5e\xa3\xc4\x7f\x1f\x30\xdf\x5a\xf9\xa4\x51\xba\xfd"
- "\xdd\xb4\x51\x46\xdd\xbf\x35\xea\xe0\x7d\x69\xc1\xa1\xf7\x23\xfe"
- "\xfc\xe7\x0f\xe0\xce\xd5\x1f\xe8\xee\x9c\xfd\x81\xa4\x1b\xf5\x41"
- "\xcc\x13\xf0\x6f\xc6\x91\xf0\x6f\x89\x78\x99\x1e\x81\x56\x5d\x69"
- "\x76\xab\xb4\x31\xaf\x35\xa2\xb4\xad\x55\xff\x38\xb4\x46\x2e\x1d"
- "\xd5\x3a\xe2\x91\x79\xad\x23\x1f\x3f\xdd\x6a\xb8\x1d\x5a\xa3\x00"
- "\x5a\xc7\x82\xd4\x3a\x0e\x12\x5a\xef\x1e\xb5\xa3\xf5\x91\x31\x92"
- "\xfd\xea\xde\x87\xec\x37\xe8\x67\xda\x93\x8d\x60\xbf\x35\x1a\xec"
- "\xb7\xc5\xc4\xd8\x6f\xc7\xeb\x0e\x68\xb4\xa7\xe1\x73\x3a\x24\xd9"
- "\x23\x37\x8f\x00\x10\x6d\xf9\xc0\x04\xf0\xc1\x58\x98\xf6\xc1\x38"
- "\xfc\xbd\x05\xaf\x64\xbc\x6e\xc5\xeb\x76\xbc\x30\x4e\xf9\x80\xf6"
- "\xd5\x81\x94\x11\xe9\xff\xfc\xee\xb2\x65\x93\x97\xdd\x9b\x33\x3d"
- "\x22\x62\x79\x32\x5c\x85\x54\xd3\xa7\x27\x8f\x8d\x9c\x12\xb9\x3c"
- "\xf9\x53\xb7\x19\xff\x35\x4a\x4f\xfd\x7b\xc4\x88\x89\x7d\x53\xfa"
- "\xf2\xfe\xe5\x53\x1f\x44\x23\xfd\x41\x2b\xc3\xbd\x36\xd0\xb9\xb1"
- "\x8d\x6e\x5b\xef\x43\x7d\xb6\x18\xa3\x13\xa2\x2c\x8a\x1c\x8b\xbc"
- "\xf7\x8c\x6e\x5b\x19\xca\x5f\x4c\x6a\xe8\xbc\x6d\x94\x97\x79\x91"
- "\x72\xf9\xa1\xf3\x48\xa6\x63\xca\x94\xbc\x5e\xa9\x39\x1b\x9f\x51"
- "\xfe\x0d\x53\x82\x61\xed\x11\x6e\x9b\x6e\x1b\xe6\x1d\x1a\x8a\xc7"
- "\x8e\x78\x32\x2a\x31\xaf\x35\x44\xde\xa3\x6e\xdb\x7c\xaa\xa3\x53"
- "\x53\x87\x5b\xa9\x83\xbe\xe3\xae\x47\xfd\x22\xbb\xe3\xb7\x45\x1d"
- "\xa5\xb2\x0e\x8f\x0b\x9a\xfc\xdd\x3a\x7d\xf1\x71\x20\x3c\x7d\xb6"
- "\xd8\x64\xa5\x3c\xc1\xd1\x3e\x04\xf4\xfd\x1d\x5f\xe7\x09\xb1\x8f"
- "\xd1\x3a\xcf\x5d\x88\xc3\xb4\x41\x77\x5d\x07\xc4\xf8\xa8\x8c\x13"
- "\x62\x2d\x6e\xe9\x43\xac\x3b\x36\x4f\xb1\x73\x98\x46\x6b\x73\x68"
- "\x3d\xb9\x1b\xfb\x5e\x86\x79\x25\x43\xdb\xfc\xe1\x68\x41\x97\xd8"
- "\x5a\x25\xef\x62\x6b\x07\x45\x19\xc6\xdc\xb6\x0f\xfd\x58\xe6\xf8"
- "\x50\x7c\xac\xcc\x6d\x93\x76\x60\x5e\x77\x88\xbc\x6d\xa2\xae\x38"
- "\x7d\x88\x3c\x1b\xe6\x49\x98\x67\x0a\x93\x17\x81\x79\xe9\xa1\xf2"
- "\x5a\xea\x38\xce\xdc\x41\x9a\xc7\xc5\x9a\xf1\xd9\xa2\xd0\xfc\xd2"
- "\xfd\x21\x7e\x4f\x42\xba\xc7\xd5\x69\xf1\x13\x6e\xb7\x74\x82\xf0"
- "\x1d\x1d\x5a\xf7\x71\x9d\xdb\x96\x89\xb2\x10\xf7\xf1\xd0\xbc\x8f"
- "\x6e\x44\x3a\x50\xbb\x5c\x21\xf2\x92\xb0\x3f\x68\xaf\xe3\x63\x42"
- "\xe0\x1c\x81\x79\x4e\xcc\x4b\xb9\x04\x3f\x8c\xdc\x86\xd3\x3e\x07"
- "\x63\x20\xb2\x0b\x46\x4f\xa5\xfe\x08\xb9\x80\x11\x5d\x30\xea\x44"
- "\xaf\x58\xf3\xee\x32\x6d\x86\x08\x7c\x7e\x93\xd9\xec\xd7\x60\x7e"
- "\x0f\xca\x93\xc1\xf1\xb5\x17\xba\x20\xbe\x0a\x61\x22\xe8\x1b\x55"
- "\x1a\x9f\x30\x3d\xc2\xe1\xf1\xd2\x77\x1a\x28\x67\xf1\xbf\xc6\x5f"
- "\x09\xcb\xf1\x6f\x12\x16\xd4\x41\x32\xb5\x91\xaf\x53\xb5\xd9\x75"
- "\xb4\xee\x93\xc6\x43\xb7\x04\xb7\xbb\xb9\xcc\xc6\xe3\xf8\x67\x68"
- "\x94\xd7\xe8\x52\x1b\xf4\x58\x76\x8b\x64\xe4\x6b\xbe\x5d\x88\x8b"
- "\xda\x30\xcf\x6f\xb3\x4b\x83\x78\x24\xfb\x55\xb4\x7e\xb7\xd7\x26"
- "\xcd\x72\x4b\xf1\x4c\xe0\x31\x9a\x14\x3c\x04\x87\x75\xf1\x75\xf0"
- "\xbd\x36\xfd\xab\x2a\x98\x0c\x75\x5d\x13\xdd\x10\x41\x6d\xee\x00"
- "\x63\x1d\xd5\x27\xf7\x91\xaf\xa9\x75\x6c\xf0\x82\x03\xfd\x8b\x2e"
- "\x30\x16\x63\x5f\x4d\xcd\x1e\xfa\x96\xd9\x3e\xaa\x61\x2b\x00\xd7"
- "\x0b\x09\x4c\x32\xce\x5a\x05\x27\xe1\x50\xf5\x75\xb4\xa8\x9f\xfa"
- "\x6a\x00\x19\xb6\x45\xdd\x46\xc2\x8b\xfd\xba\xae\x1e\xe1\x5a\xd0"
- "\x6b\x91\x61\xba\x15\x18\x15\x0f\xc6\xca\xed\x23\xfa\x10\xcf\x16"
- "\x2b\xfa\xd9\x67\x1b\x85\xe3\xff\x55\xdd\x42\x6f\x03\xe9\x72\x1b"
- "\x12\x45\x1b\x74\xd8\x06\x9d\x5d\xe0\x1f\x95\xa9\xe0\x77\x82\xd1"
- "\xa3\x6e\x73\x3d\x87\x35\x46\x09\x3d\xe5\xb0\x45\x01\xd8\xf8\x20"
- "\x58\xa4\x85\x24\x78\x00\x92\x13\x46\xe5\x23\x3d\x22\x10\xe6\x30"
- "\xf2\xdb\xa4\xc0\xc8\xfd\x4f\xc4\xbc\x69\x32\xbe\x16\x15\xbe\x22"
- "\xc2\x47\xeb\x5e\x85\xed\x1d\xe5\x0c\xd8\x3e\x68\xc5\x67\xd7\x50"
- "\xfb\x4a\xfa\x3a\xda\x80\x70\xc9\x94\x6e\x1d\x07\xc6\xb3\x30\xea"
- "\x4c\xaf\x14\xd1\x2d\x68\x31\x1a\xed\x5f\xec\xa0\x6f\x83\xcf\x93"
- "\x9d\x60\xf2\xc8\xf5\xe5\x13\x6d\x02\xf6\x96\xea\x1c\x9d\xa3\xd4"
- "\xa9\xe4\xab\x75\xc6\x1c\x35\x11\xfd\x13\xf3\xcf\xcd\x49\xe6\x31"
- "\x8a\xef\x32\xb5\x65\x45\xf2\x44\xf7\xd4\x16\xd3\xbd\x69\x3f\x5d"
- "\x9e\x9c\xca\xc7\xfe\xdb\x3b\xd2\xc6\xe1\xe8\xfe\x27\xfe\xef\xab"
- "\x94\x92\xcc\x53\x30\x9d\xee\xc7\xd1\xbd\xec\x2f\xe0\xdd\x63\x0b"
- "\x22\x46\xde\x5a\x48\x77\xc2\x73\x30\x5f\xbb\xe4\x99\x88\x0c\xf9"
- "\x3e\x4e\xe4\xdc\xc5\x7d\x8e\x94\x87\xe9\xfe\x36\x8e\x6b\x62\x13"
- "\xd5\x3c\xe1\xe5\xb4\x1f\x2e\xfc\x5f\x11\x1f\xec\x58\x65\x8e\xb9"
- "\xdd\x46\x30\xa9\x3f\x4a\xdb\x8f\x29\xcd\x94\x32\xee\x27\xbc\x05"
- "\xea\x52\x47\xa8\x94\x9c\x9f\x94\x3a\x23\xed\xc7\x8b\x16\xdc\xf2"
- "\xa7\xb4\xd1\x57\xbf\xb7\xb8\x99\xca\x5f\x3d\x3a\xa8\xa6\x71\x81"
- "\x56\x3d\xbd\xfb\x8e\x97\xee\xf9\xa9\xc0\xb2\x70\x41\xc4\x9f\xcc"
- "\x63\xd6\x16\x52\xea\x2d\xdc\x17\x23\x5f\x65\xe2\x57\x69\x91\x3b"
- "\x16\x7e\xfa\xaf\x0b\xdf\x6a\x7f\xf2\x0e\xec\xe9\xd5\xaf\xb6\x3f"
- "\xb9\xf0\xad\x4f\xff\x35\xe2\x45\x82\xbc\x33\x3f\x2d\xc1\x14\x39"
- "\x75\x7d\xcb\xbc\x3b\x78\xab\xae\xab\x4a\xac\xbd\xbe\xe9\x86\xc3"
- "\x37\x1e\x4b\x6a\xbd\xe9\xdf\xc7\xfc\xe7\xcd\x7f\x35\xb9\xc7\x32"
- "\xf4\x23\x1e\x4a\x1b\x3b\xe8\x47\x00\xfa\x11\x1d\xe8\x47\x94\xa2"
- "\x1f\xd1\xa6\xf6\x23\xfe\x10\xfd\x40\x89\xf0\x25\x04\xbc\xf0\x7f"
- "\x52\xff\x1d\xfd\x9f\x35\xe8\xff\xa4\x7e\x10\xf9\xd8\xe3\x1f\xc4"
- "\xe4\x08\xff\x67\x54\xfc\x08\xee\x03\x5d\x8f\xbf\xe8\x07\xfd\xdb"
- "\x58\xfc\x4d\xc1\xe7\x3b\x46\x8f\x0c\xf6\x89\xe6\xc7\xb5\x46\x2e"
- "\x46\x9f\x28\x1d\x7d\x22\xf3\xb2\x56\xc3\xac\x77\x5b\xa3\xa6\x98"
- "\x5b\xa3\x07\xfd\xa2\x99\xad\x19\x89\x13\x5b\x67\xe9\xa1\xf5\x51"
- "\x10\xbe\xd1\x76\x48\xfb\x83\x3e\x41\xf7\x51\x0c\xe8\x3f\x8a\x6b"
- "\x8c\xfe\x28\xde\x6e\xff\xc8\x88\xd7\x28\x68\xfc\x68\x34\x8c\x7c"
- "\xef\xa1\x46\x78\x6f\x7a\xa9\xf3\x03\x3d\xc4\x7d\x10\x05\x5f\x7d"
- "\x30\x0a\x7f\xf3\xf6\xc2\x07\x3b\x41\xff\x41\xb4\xfe\xab\x40\x7f"
- "\x13\xce\x7c\x30\xf6\xfd\xa9\x1f\x8c\x4b\xff\xfd\x07\xb7\x64\xcc"
- "\xff\x20\xf9\xfd\xf7\x3f\xb8\xd5\x39\x46\xed\x37\x51\x9f\x01\xee"
- "\xda\x4e\x1e\x2c\xd2\xfb\xde\x94\x11\x69\x23\x5e\x5a\xce\xfd\xc1"
- "\xfb\x64\xbf\xf0\x3e\xf3\x8c\x1d\x0b\x17\x3e\x13\x21\x99\xc7\x70"
- "\xef\x52\xf6\x34\x03\xde\x67\xb0\xcf\x39\xb5\x25\xe0\x73\x26\xbb"
- "\x03\x3e\xa7\x69\xc4\xd4\x0d\x41\xfe\xd9\x00\xa6\x7d\x9c\x9e\x6c"
- "\xba\x35\x8d\x7b\x66\xed\xd7\x6b\xbd\xb5\x09\xd5\x69\x53\x93\x0d"
- "\xf7\x9e\x44\x9f\x6d\x64\xf9\xce\x67\xfe\x89\x2e\xf4\xda\xbe\x31"
- "\x4a\x3b\x9e\x5b\x36\x25\xf7\xc5\x3b\x91\xe7\x57\x93\x17\x3c\x72"
- "\xe7\x4b\x47\x77\xee\xdc\x71\xf4\x83\x27\x17\xdc\xf1\x1b\x4c\x7b"
- "\x2f\xb9\x08\xe5\xe7\x7f\xe7\xff\xef\x89\x5f\xa5\x47\xee\x7c\xfc"
- "\xe8\x8e\xd7\x9f\x7d\xb6\x85\xe4\x85\x78\xab\x8c\x51\xbd\xb6\xd1"
- "\xe8\x93\xe8\xfe\xa5\xcf\x76\x0d\xfa\x3f\xd7\xb7\x6a\xc7\xb2\xef"
- "\xf5\xf2\x7b\xbd\xfc\x5e\x2f\xff\x3b\xf4\xf2\x5a\x10\x7a\x79\x7d"
- "\x55\x28\xbd\x9c\x35\x77\x66\xd6\x03\xa6\xf5\xcf\x98\xac\x85\x6b"
- "\x9f\x2d\x5c\xb6\xda\x54\xb0\x76\x59\xfe\xf2\xfc\x68\x18\xcc\x58"
- "\xf6\x4c\xd1\xca\x0d\xcb\x8a\x96\x0f\xf9\xa6\x31\x51\xf1\x49\x87"
- "\xfa\xd6\xd7\x7b\xc2\xfb\xd6\x37\x24\x84\x8e\x4b\x74\x38\xb6\xdf"
- "\x90\x16\x22\x6f\x9c\x9c\x37\x3b\x44\xde\xc3\x72\x9e\x25\x44\x0c"
- "\x18\x2b\x62\x8c\x1b\xb6\x87\xca\xc3\xf4\x3a\xc5\x27\xc1\x38\x4d"
- "\x6a\x19\xd7\x03\xe4\x93\x74\xc1\x0d\xef\x63\x9f\xba\x31\xff\x98"
- "\xe2\xcb\x38\xe1\x86\xed\x8a\x8f\x26\xc7\x21\x29\x6e\x9b\x19\xfb"
- "\x79\x83\x33\x44\x8c\x72\xa7\x5c\xaf\x37\xe0\x1b\xcd\x35\xf5\xd9"
- "\x6e\x8c\x19\xea\x1b\xb5\x83\x88\x21\x6f\x4c\xd1\xc0\x4e\x51\x60"
- "\xd1\x9f\xa4\xbd\x1e\x7a\xe8\x5b\xb4\x1e\xb8\xf1\x18\xb3\x5d\x5f"
- "\x4b\x3e\x25\xc5\x91\x84\x47\xc4\x92\x27\x79\x2c\x89\xb1\x62\x27"
- "\x96\x2d\x52\xc5\x93\x9d\xe8\x1b\x8f\xa4\x78\xb2\x0b\x6e\x7c\x93"
- "\x62\xca\x5d\x1c\xd7\x59\xc2\x35\x87\x70\x39\xe1\x46\x3b\xf7\xfb"
- "\x44\xd9\xc3\xaa\x79\x33\x8c\x6b\x6f\xe4\x7b\xef\x29\x7e\x21\xe6"
- "\xb7\x3b\xa5\x4f\xdc\x4a\x1f\xc8\x17\x94\xfb\x51\x26\xf8\x70\x63"
- "\x88\xf8\xa7\xfd\x55\x11\x07\x26\x0d\xc6\x3f\x84\xcf\x6f\xbb\xfe"
- "\xd7\xf5\x1c\x67\x52\xb2\x82\x53\x2d\x97\xcf\xac\x5d\xb3\x62\xe5"
- "\xb3\xeb\x0b\x97\x9b\xd6\xcd\x9e\x6d\x5a\xbd\x36\x7f\xf9\x84\x09"
- "\x13\xa2\x83\xe4\x2f\x46\xf8\xb4\x1f\x9a\x49\x0e\xc9\xaf\x95\xe5"
- "\xd0\x8c\x3e\xa7\xec\x37\x27\x95\x05\xc7\x17\x1f\x9a\x65\xff\xd6"
- "\x88\x30\x69\x32\x4c\x53\x10\x0c\xe2\x93\x7d\x64\xf2\x73\xe3\x64"
- "\x98\x56\x2d\x1e\xcc\xe3\x71\x11\x7d\x5f\xd7\x2b\xfa\xd7\xa3\xc1"
- "\xf3\x90\x1c\xef\xa0\xdc\x8f\x90\xe3\x84\x9b\x8c\x1a\x3c\x0f\x05"
- "\xe2\x0d\x9d\x02\x33\x59\x1d\x9b\xe0\x73\x86\xc2\x93\x80\x1f\xdf"
- "\xdc\x2d\x70\xeb\x8c\x01\xbf\xff\xa6\x02\x4d\x2c\x75\x6d\x00\x37"
- "\x18\x65\x98\x9a\xe0\x36\x36\x9f\x95\xfb\x6a\x50\xe1\x39\x12\x8c"
- "\xa7\xf9\x6f\x32\x9e\x08\x15\xcc\x49\x4d\x1b\xbb\x87\xb6\xd1\x1e"
- "\x27\x70\x37\x62\xfd\x4e\xb9\x6f\x63\x34\xfd\x47\x18\x8e\x3b\x01"
- "\x61\x92\x14\x98\xc9\xea\x58\x8a\xe2\x39\xfe\xcd\x25\x8c\x99\x4d"
- "\xf2\x84\xd7\x08\x6c\xf7\xe7\xaa\x98\x6e\xa4\x5c\x4e\xdb\xff\xd8"
- "\x5e\x8c\x17\x1a\x82\xe2\xb4\x31\x9a\xfe\x63\x6c\x38\x5a\xa1\x91"
- "\x5e\x81\xd1\xf6\xdf\x29\xda\x38\x6a\x54\xa0\xff\x63\x4e\x6a\xf0"
- "\x5c\x4b\x32\x45\xb8\x54\x75\x79\x35\x78\x3a\x64\x3a\xaa\x68\x7d"
- "\xb3\x49\xc3\x8f\xcf\xe4\xf6\xa8\x68\x7d\x73\x86\x06\xcf\x79\xca"
- "\x0f\xee\xd7\xcd\x16\x0d\x9e\xf3\x81\x7e\xa1\x1c\x0b\x98\x2a\x4d"
- "\x1c\x2b\x31\xdb\x7b\xb1\x1a\x3c\x87\x15\x98\xde\x11\x3b\x1a\x05"
- "\x6f\x6f\x6e\x51\x6c\x91\xe0\x6b\x52\x1a\xe1\xc6\xf4\x53\x6a\x5b"
- "\x80\xed\xea\x1e\x4a\x27\x13\x68\xe9\xa4\x6a\x97\x1c\x8b\x9b\x92"
- "\x35\xfd\x3b\x2b\xd3\x29\x5a\x85\x27\x53\xd3\xbf\xbf\xc9\x78\x22"
- "\x55\x30\x1a\xfe\x37\xf7\xc8\x78\xf4\x2a\x18\xad\xfc\x7f\x21\xe3"
- "\x51\xd7\x75\xe4\xd2\x74\x32\x05\xc9\x3f\xd1\x0a\xd3\x7a\x2e\x31"
- "\x07\x65\x10\xef\x0e\xc6\xe2\xf8\xf7\x56\x1d\xff\x26\x3a\xba\x77"
- "\x0f\xed\x1d\x85\x36\xda\xcc\xe7\x06\xfb\xc9\x4e\x8f\xa5\xbd\xa6"
- "\x5c\xa2\x0f\x90\x26\x6c\xf7\x58\xbe\x5f\x0a\x96\xcd\x76\x42\x5c"
- "\x91\xfa\x3d\x80\x13\xc6\x56\xc9\x79\xd8\xff\x6b\x4e\x2a\x79\x94"
- "\x2e\xe6\x17\xc7\xe2\xf8\x77\xbd\x55\x8c\x63\x63\x0b\x64\x58\xb4"
- "\xfb\x49\x99\xa1\xbe\x53\x0e\xf7\xfe\x65\x5d\x22\xf3\x97\x5e\x4f"
- "\xdf\x2d\x9f\x4e\xf4\xdb\x18\x38\x8a\x3d\x60\xba\x01\x4a\x3b\x60"
- "\x9c\x81\x62\xfc\x5d\x9b\xc1\x50\x6a\x65\x1e\xda\xe7\xb5\xcd\xd5"
- "\x03\xa5\x2e\xd6\x4d\xfb\xfa\x6f\xfd\x0a\x0c\x0e\x2f\x3f\x0f\x2d"
- "\xb1\xa5\xe4\x4c\xc8\x6f\x6f\xfd\x12\x83\xd2\x24\x2a\xdb\x09\x6d"
- "\x75\x9d\x50\x5a\x17\x5c\xb6\xf4\x26\x48\x3c\x41\x67\x04\xd8\x20"
- "\x9e\xda\x41\xef\x53\xbc\xd1\xa7\x13\x4b\xf6\x81\xbe\x14\xbd\xcb"
- "\x13\xf9\x76\xa5\x2d\xed\xd4\x96\xed\x67\xc1\xf0\xd6\x0a\xbb\xf4"
- "\xe2\x59\x6a\xef\x5f\x13\x7f\xb5\xd9\x23\x35\x27\xce\x86\xe6\xc4"
- "\x53\xd0\x92\x38\x15\x5a\x8a\x33\x60\xd7\x59\x88\x69\xf6\xa4\x43"
- "\x8b\x7e\x26\xb4\x24\x67\x80\xa3\x07\xef\x4d\x3e\x84\x71\xf3\x7d"
- "\x8e\xba\x60\x9c\x7d\xcf\x73\x60\x70\x0a\x9c\x48\xb3\x71\xc7\x95"
- "\x3d\x7b\xe8\x39\x54\x3f\xd6\x5d\x0f\x89\xd8\xbe\x6e\x6c\xcb\xfd"
- "\x1d\x70\x4b\x64\x72\x22\xd0\x39\xea\x23\x1d\xb5\x5e\xd0\x97\x40"
- "\x54\x18\xb9\x48\xe0\xfb\x7d\xa2\x1f\x55\xbf\x17\xc7\x7a\xfc\xed"
- "\x45\x99\xe8\xb3\xdd\x92\x8e\x75\x9f\x92\xe7\xbd\x7a\x4a\xdf\x44"
- "\x39\xdb\x98\x4b\xfb\x7f\xe0\x38\x7d\x4b\xae\x92\x47\xfb\x98\xd2"
- "\xfe\xa4\x13\x13\xc0\xe8\xf0\x9a\xe1\x9d\xfe\x6e\xfa\xc6\xbe\x87"
- "\xf6\x3d\x20\x7c\x38\xe6\x47\xd0\xfc\x13\xb6\xe7\x0e\x1c\xe3\x7b"
- "\x6e\x41\x38\x2c\x8f\xfc\x6f\xe7\x7b\xf7\xb2\xeb\x16\xb9\xfd\xd7"
- "\x2d\xfa\xca\xff\xfa\xa2\x5e\xf6\xfa\xa2\x2f\x7d\xaf\x2f\xba\x50"
- "\xba\x09\x0c\xbe\xeb\x16\xb9\xda\xac\x9c\x07\xc6\x36\xeb\x17\xf4"
- "\xbd\xbc\x81\xce\x0d\x5d\xf2\x3c\xf2\xde\xfb\x09\x6c\x59\x09\x89"
- "\xfe\xa8\xcf\xdb\x1d\xde\x3f\xc3\x92\x12\x60\x78\xef\x0c\xd5\xbf"
- "\xde\xe8\xbf\xe6\x2a\xf3\x69\x7d\xb6\x64\xa3\x53\x72\xf2\x3d\x74"
- "\x5d\x51\x17\x72\xf1\x5a\x8c\x57\x1e\x5e\xf9\x2c\xfa\xaf\xf9\x48"
- "\xab\xd2\xb8\x6d\x3a\xa0\x7d\x7a\x26\xfa\x41\x77\x16\x92\x53\xb1"
- "\xfd\xc6\x30\x74\x4b\xf2\x57\x32\xfb\xed\x65\xb0\xb5\xaf\xcf\x42"
- "\xfb\xa5\xba\x48\xbf\xc8\x1f\xc5\x7a\x8a\xb1\x9e\x6c\xae\x0b\x7b"
- "\x51\x8f\xa2\x99\x9d\x7c\x3a\xf7\x0b\x16\x9d\xeb\x05\x8b\xd4\x1b"
- "\xcd\x9a\x11\xa6\x0e\x61\xca\x65\x1a\x76\x13\x2e\xd4\x1b\x57\xac"
- "\x17\x22\x10\xa7\xf5\x5f\xbe\x3e\xa9\x3f\xb0\x97\x9d\x42\xb8\x96"
- "\x41\x5c\x88\x7b\x0f\xf7\x93\x92\x4f\x2a\x69\xe4\x27\x55\x23\x1c"
- "\x95\x77\x78\xcc\xf4\xce\xd0\xe9\x28\xe8\xa6\x7d\x2a\xa2\xd9\x80"
- "\xa8\x8f\x7c\x38\xd2\xd5\x58\x0f\x8c\xe8\xb3\x41\x36\xe1\xa6\x72"
- "\x74\x5e\x05\x96\x6b\x66\xa5\x16\xf4\x17\x61\x6e\x1f\xb3\xe8\x68"
- "\xcf\xda\x66\x2c\x2f\xea\xbe\xd5\xac\xb4\x91\xea\xe0\x7b\xd6\x52"
- "\x3b\x51\x1e\x9a\x0b\x3c\x10\x5b\x4b\xf3\xe4\xb0\x80\xf0\x11\x2e"
- "\x94\x03\x27\xf6\xb5\xb9\xb9\xc0\x05\x7e\x16\x84\xd3\x29\xe3\xab"
- "\x09\xc2\x87\xe9\x0c\xf1\x91\xfc\xb5\x60\x99\xd8\x46\x8e\x6f\xfe"
- "\xbf\xf8\x09\x9f\x07\xf4\x26\xde\xde\x85\x84\x83\xef\xbf\x8c\x38"
- "\xed\x1b\x1e\x46\xdf\xf1\x56\x8f\xab\xd4\x12\xc1\xbf\x8f\xc7\xf2"
- "\xbf\xda\xda\x1d\xc9\x7a\x73\x23\xe2\xf8\xb7\xf1\x0f\x03\xbd\x6b"
- "\x45\x98\xbf\xb0\x5e\x4b\x44\x6c\x0f\xfa\x7a\x08\x43\xfb\x65\x51"
- "\x3b\xd5\xbc\x9c\x3f\x63\xe1\x54\x58\x98\x31\x2b\x63\x2a\xcc\x79"
- "\x68\xfa\x54\x48\xbb\x7f\x7c\xda\xe4\x7b\x7e\x70\x0f\xbf\xb9\xe7"
- "\x07\x53\xee\x81\xec\xc7\xe7\x4f\x85\xec\xb9\x53\x61\x01\x5e\xd9"
- "\x0b\x66\xcc\xcf\x98\xb1\x60\x2a\xe4\xce\x9c\x85\x4f\xd3\xa7\x4e"
- "\x4a\x7b\x64\x7c\xf6\xf4\x59\x33\x60\x5e\xce\xdd\x69\x77\xdf\x0d"
- "\x0f\xcd\x98\x3d\x29\x2d\x4d\xfe\x9d\x94\x46\x20\x4f\x4e\x99\xb1"
- "\x60\x7c\x76\xe1\xda\xa2\xb5\xe3\xe7\xce\x9a\x4e\x29\x30\x63\xc6"
- "\xd4\xec\x20\x3f\x32\xc5\xf7\xb5\x8f\xe8\xed\x66\xe7\x33\x69\x9f"
- "\x62\xa8\x47\x39\xc0\xab\x87\xef\x7f\x04\xb7\xff\xb1\x9e\xf8\xc7"
- "\xc7\x82\xdb\x12\x68\x3c\xed\xb3\xdd\x46\xfc\xe7\xb1\x14\xed\x15"
- "\xdc\x05\x13\xa6\x62\xde\xf5\xb2\x3f\x12\x89\xf9\x9e\xe0\xfc\x3b"
- "\x16\x63\xfe\xcd\xb4\x9f\x8e\x03\x2f\xa4\xbd\x1b\xed\x21\xd2\xd8"
- "\x05\xbd\xa5\xb9\x91\x7c\x3f\x43\xe4\x3b\xed\x33\xd1\x67\xbb\x7d"
- "\xb2\x4a\xef\x3b\x69\x3f\x0a\x9a\x4f\x3e\x07\xb7\xc7\xb6\x15\x99"
- "\x69\xcf\x29\x70\x14\xc9\x38\xbe\x1a\xc4\x11\x2d\xef\x89\xe8\xac"
- "\xa7\xbd\x3e\x04\x9e\x12\x95\x8d\x70\x12\x9e\x5d\x98\x27\xe3\x9a"
- "\xd7\x86\xb6\x02\x6d\xf9\x38\x7f\x69\x0a\xb0\xe8\xd3\x26\xff\x40"
- "\x0a\x88\xf9\xd7\xdb\x8f\xa8\x64\xdb\xdd\x52\x8c\x70\x6f\x65\xea"
- "\x68\xdf\x05\xbe\x07\x03\xdc\x46\xba\xe4\xf6\x55\x5e\x58\xc9\xce"
- "\xf3\x7d\x0f\x47\x60\xff\xc6\x63\xff\x92\xfd\x95\x17\x2c\x7c\x0f"
- "\x51\x0e\x97\x92\xc0\xe8\x39\x1a\xe1\x06\x06\xd3\xae\xa1\xb4\x3e"
- "\x7a\xbf\x83\x3a\xcb\x18\x4f\x8f\xc0\xf4\x3f\xa3\x5d\x3b\x89\xb0"
- "\x16\x82\x9d\xe8\x85\x91\x7c\xbf\x93\x52\x1d\x74\x40\xca\x62\x7f"
- "\xf4\x85\xe7\x54\xf5\x11\x9e\xc5\x62\x1c\x43\x5e\x9c\x47\x3c\xbd"
- "\x3c\x5d\xc2\xf4\xdf\x21\xfe\x55\x64\x2f\x85\x0d\x9f\xf0\x14\xc0"
- "\xe0\x7b\x91\xc0\x33\xed\xe7\xbc\x55\x3c\x37\x23\x2d\xe9\x3d\x01"
- "\xbd\xe3\xef\xb3\xa5\xa0\xff\x93\x9c\x29\xc6\xca\x09\xbc\x0e\xda"
- "\x3f\x96\xc5\x3c\xec\x42\xbc\x05\xf6\xcd\x3d\xfc\x0c\x50\x27\xa4"
- "\x14\xf8\x4b\x2d\xa0\x69\x53\x0a\xb5\x9f\x6c\x08\xd2\x62\x3c\xca"
- "\x41\x54\x9f\xed\x0e\xd0\xc8\x41\x12\xe2\x59\x89\xed\x3b\x89\x7d"
- "\x5a\x89\x78\x92\xfd\xbd\x16\xac\x17\xe3\x45\x66\x41\x5f\x29\x80"
- "\x43\x2e\x6f\x0e\x2e\x7f\x7b\x27\x95\x43\xf8\xc8\xbe\x5e\x82\xbf"
- "\xbd\x9b\x68\x2e\xcb\x1d\xca\xe5\x1d\x56\x8d\x5c\x8e\xc5\xb6\xdc"
- "\xa7\xca\xaf\xd1\xe4\x47\x62\xfe\x0f\xe5\x7c\xd4\xfd\x3b\x0e\x6b"
- "\xda\x7b\x1c\xf3\xa7\x61\x7b\xdd\xa8\xdb\x11\x58\x5f\x53\xbd\xec"
- "\x9b\xc8\xf0\x4e\x0d\xbc\x17\xe1\xa7\x93\xdc\xd0\xb8\x43\xf0\x0d"
- "\xb2\xee\x20\xbc\xa1\xcf\x76\xa7\x31\x18\x7e\xfc\x19\x84\x9f\x1d"
- "\x68\xdf\x9d\x69\xc1\xf9\x77\x7a\x30\x7f\x1e\xc9\x3a\xfe\x3e\x45"
- "\xbe\x3e\xd9\x13\xb2\x65\xcd\x05\xc4\xaf\x3b\xf3\x34\xf0\x65\x08"
- "\x97\x2f\xd3\x48\x92\x69\xd4\x24\xc7\xee\xa7\xe4\x36\xec\xd1\x94"
- "\x39\x82\x65\x0a\x90\x8e\x2b\x15\xb9\x0c\x51\xa6\x55\x53\xa6\x9b"
- "\xf8\xc8\x44\x3d\xfa\xbe\x81\x40\x19\xd9\x4e\xaa\x71\x50\xdf\xae"
- "\xea\xb3\xdd\x15\xa3\xe9\x7b\x06\xd6\x5b\x54\x2d\xec\xce\x55\x28"
- "\x43\x77\x63\xda\xbd\x88\x73\x35\xe9\xc0\x2e\xf2\x07\x5d\x1e\x60"
- "\xa5\x99\x31\x42\x76\xef\x5a\x1d\xe7\x05\xba\x1f\x4f\xf7\x84\x9b"
- "\xf5\xcd\x96\x75\xf2\xae\xd5\xf8\x4b\xe9\x7c\xbf\x37\xb2\xc3\xac"
- "\xef\x47\x7e\x81\xf3\xae\x57\xe8\x0c\x2c\x7c\xf6\xc9\x75\x8c\xa7"
- "\x3d\x42\xb1\xfd\xcf\xe1\xb8\x03\x6c\x23\xc2\x6d\x86\xe9\x98\x7e"
- "\x13\xd7\x55\x01\xc7\x9f\x45\x1d\x99\x24\xdf\x93\xf1\xf9\x1a\xb9"
- "\x7c\x2c\xe1\xc3\xfb\x49\xf2\xbd\xce\x47\xb8\xce\x2b\x3a\x38\x3e"
- "\x92\x97\x43\x3d\xe4\xf8\xb1\x3c\xed\xc7\x2a\x70\xa6\x5e\xc0\xdf"
- "\x59\xf8\xfb\x09\xfe\xce\xc3\xdf\xdf\xd1\xfe\xa8\xa5\x3e\xae\x8f"
- "\xf4\xfc\x53\xfc\x9d\x8f\xbf\xaf\xe0\xef\x02\xfc\xdd\x82\xbf\x0f"
- "\xe3\xef\x13\xa4\x17\xb4\xd7\x3b\xed\x59\x83\x63\xab\x90\x2d\x7a"
- "\xf7\xd7\x97\x49\x34\x98\x81\x30\x19\x5c\x5f\x85\x7d\x31\x08\x3e"
- "\xa6\xf2\x33\x70\x50\x1e\x28\x6d\xa4\x90\x07\x91\xe6\x53\xec\xd0"
- "\xf9\x40\x9a\x6c\x9b\x64\x5d\x94\xd3\x04\xfe\x6c\xc4\x9f\x44\x6d"
- "\x65\x02\x57\xa4\xe0\xb9\x8c\x5f\x94\xd3\x87\xa8\x53\xa7\xae\xd3"
- "\x09\x77\xb9\x68\xbf\x23\xfc\x3d\xc5\xf7\x93\x84\xf1\x31\x8c\xcb"
- "\x3d\x8e\xb3\x1c\xdf\x5d\x47\x65\xb8\x1a\xa2\x31\x2f\x2f\xd2\x53"
- "\x55\xb2\x34\xba\xcf\x36\x3e\x57\x23\x4b\xe8\xeb\xdf\xb6\x83\x64"
- "\x86\xe8\x4e\x7d\x8b\xb3\xf2\xb1\x9c\xf7\x85\xe3\x3f\x2f\x64\xb2"
- "\x5e\x5e\x9b\x24\xf4\x77\x7c\xa3\x06\xcf\x31\xc4\x53\xa9\xd1\xf7"
- "\x9e\xc0\xb8\x36\xbe\x5d\x63\x8f\x9a\xb0\xbe\x53\x4e\xd4\x07\xd9"
- "\xae\xba\x23\x4a\x48\x5f\xc6\x7b\x9c\x70\xd6\xc0\xfd\xcb\xca\x0b"
- "\x6b\x08\x8f\xbb\x94\xef\xd3\xef\x8e\xb0\x52\x7f\x27\x24\x2a\xf9"
- "\x3c\x2f\x16\xcc\xa4\x07\x11\x05\x3c\x0f\xc7\xbf\x5b\x8c\x4a\x1e"
- "\x88\xfd\xdf\xdc\x11\x45\x3c\x2f\x3b\x80\xf7\xb4\x59\xc6\x1b\x11"
- "\xf2\xdc\x85\xf2\xd3\x69\xe3\x01\xa4\x3b\xcb\x20\xd2\xe1\xfd\x18"
- "\xb2\xbc\xcc\x37\xbe\x0c\xa2\x1c\xde\x43\x70\x07\xc0\x28\x87\xf7"
- "\x14\xdc\x09\x30\xd6\xe1\xdd\x83\xfe\x4a\x13\xe5\xbf\x73\x3b\xe8"
- "\x74\xf8\x5b\x7a\x5b\x99\xa4\x73\x78\x8b\x20\xb9\x4c\x8f\xbf\x05"
- "\x30\x33\x92\xf5\x39\xbc\xb3\x11\x2e\x1f\xb2\x7c\xec\x7c\x46\x24"
- "\xfb\x74\xa9\x0f\x8c\xb3\x5f\x62\xa5\x0e\x2f\xc6\x0e\xde\xe3\x98"
- "\xee\x67\x59\xbe\x6f\xf0\xea\x63\xfe\xf2\xd3\xe6\x2c\xdf\x79\x36"
- "\xfd\xa5\x77\xf0\xf9\x53\x86\xbc\x64\x0e\x6f\x3a\xb4\xb9\xdd\x08"
- "\x57\xca\x58\xc5\xe9\xb4\x25\x5f\x49\x30\x40\xe7\x22\x54\x9c\x36"
- "\x63\x5f\xb2\x07\xb0\x1f\x38\x0e\x67\x0d\xbc\x80\xbf\x95\xa7\xe7"
- "\xf2\xe7\xf2\xd3\x79\xcc\x70\x3a\x7b\x02\x06\x62\xd4\x07\x87\xb7"
- "\x13\x96\x62\x28\x91\xb5\xc9\xc5\xa8\xfd\x71\xdb\x28\x0e\x4b\xa7"
- "\x3d\x95\xe3\xb3\x36\x95\x32\xcc\x33\xb0\xa8\xd3\xd9\x0e\x6f\x0f"
- "\x60\x1d\x79\x88\xef\x29\x8e\xaf\xfc\x74\x19\xc2\xba\x08\x4e\x8d"
- "\x87\x70\x10\x6c\x96\x0f\xe2\x11\xbe\x6c\x20\xea\xb4\x15\xaf\x1a"
- "\xbc\xec\x58\xf6\x4f\xcc\x96\xf0\x2e\xed\x8b\x89\xe5\xd1\xaf\x3c"
- "\xed\xf2\xd0\x19\x0e\x44\x4b\x1f\x8c\x44\x78\x27\xca\x55\x06\xca"
- "\x27\xb6\xb7\xc3\xc8\xdb\x5b\xd9\x11\xef\xe1\xfd\xe8\x88\x13\xfd"
- "\xe8\x88\xa5\xf4\x5e\x94\x1d\xbc\x4f\xeb\x15\x79\x13\xb1\x5c\x0e"
- "\x2f\x57\xde\x91\xc6\x0c\x1d\x66\x0f\xea\x21\xd2\xb5\x8c\xe8\x88"
- "\x74\x2d\x23\x5a\xb2\x8a\x8e\x34\x47\x71\x15\xb0\xa8\x0e\xf3\x40"
- "\x54\x47\x36\x96\x7f\x7a\x80\xfb\x2a\x1d\x56\x8f\xc0\xbd\x16\xf1"
- "\x2c\x46\xf9\x8e\x40\x1c\x56\xc4\x55\x36\x60\x33\x41\xd6\x26\xe6"
- "\xc9\xf2\x6e\xf3\x2e\xdd\x04\x11\xa9\x50\xa6\xa3\xb3\xe6\x1c\xc5"
- "\xf9\xd8\xcf\x16\xfc\xcd\xc0\x7c\xb8\x1a\xeb\x7a\x07\xf1\x5a\xa9"
- "\x3e\xac\xa7\x0c\x71\x6e\x41\x5c\xf9\xd4\xa6\x6f\x6c\x60\xc4\xe7"
- "\x9a\x6f\x44\xfb\x0e\xfb\xcb\x3b\xda\xfd\x86\x0e\xbb\x22\x43\x24"
- "\x3f\x82\x6e\x7b\x60\xae\x9b\x79\x1d\xde\x03\x38\xea\x60\x8c\xe4"
- "\x3e\x45\xf9\x18\x2b\x1d\x42\x3e\x93\x4c\x15\xe1\x6f\x13\x90\xfc"
- "\xb4\x59\x5f\x22\xd8\x77\x48\x86\xe6\x5a\xdd\xdb\xc6\x83\x55\x87"
- "\xcf\xa5\x4b\xbd\x06\x58\x62\xd5\x97\xf9\xca\x3b\x1a\xdb\xac\xc4"
- "\x97\x8f\xb1\x0c\x95\x2b\x80\x78\x1d\xc6\x0b\x3a\xe6\x8d\x2f\x76"
- "\xe9\x63\x2d\xa5\xac\xcd\x3d\x1b\x61\xad\xfc\xec\x3c\x92\x23\x82"
- "\x9f\xd3\xc3\x9c\x3e\xc3\x67\xd9\xd4\x37\x16\x57\x06\x27\x7a\xee"
- "\x05\x8a\xd9\x4e\xf4\x34\x91\x9c\xfa\x99\xe1\x33\x13\xca\xe8\xc0"
- "\x9c\x9e\xb2\xc8\x25\x5f\x81\x0e\xd3\x7c\x27\x2c\x87\x30\xbf\x05"
- "\xe1\x8e\x73\xb9\x9d\xfb\x95\x37\xde\x6b\xe8\xa8\xf1\x96\x7f\x96"
- "\x36\xf7\xab\x01\x76\xc2\xb2\x07\x9e\xea\x29\x43\x5a\x1d\x82\x39"
- "\x5f\x78\x23\xda\xac\xf9\x08\xd3\x87\xe9\x4d\x5c\xfe\xe7\x7c\xd1"
- "\xcb\xe6\x3e\xcf\xce\xcf\xfd\xea\x53\x36\xc7\xc2\xde\x59\x5a\x0c"
- "\x71\x57\x6d\x63\x7e\xd2\x8b\xe3\x9d\x87\xe0\xaa\x53\xb4\x67\x7e"
- "\x06\xcc\x5e\xe6\x67\x73\xbe\x38\xcf\x96\x3c\x4f\xb4\x49\x87\x13"
- "\x16\xd4\x9f\xe2\x3d\x44\xef\xc3\x27\x2c\xc7\xb0\xfe\x0c\xc4\x5b"
- "\xca\x1c\xc5\x07\x10\xd6\x1e\xff\xd4\x17\x46\x38\xde\xb9\x07\xbc"
- "\x51\x1d\x35\xbe\x8a\x8e\x46\x7f\x54\x87\xdd\x5f\xd1\xd1\xce\xa2"
- "\x3e\x33\x79\x2b\x3e\x4b\xf3\x45\x7d\x86\x32\xf0\x59\x23\xf2\x29"
- "\x8a\x78\xde\x6f\x03\x13\x3e\xd7\xf7\x13\xff\xcb\x3f\x3b\x8c\x7d"
- "\x6d\x47\xdf\x98\x09\xd9\xff\xec\x30\xcd\x43\x60\xd9\xf6\x81\xa8"
- "\xcf\xec\x08\xd7\x2e\xf4\xeb\x33\x27\xc9\x25\xcd\xf7\x63\xda\xa7"
- "\x18\x23\x45\x60\xbe\x6b\x20\xaa\x13\xf0\x32\xb2\xca\xce\x3c\xc4"
- "\x3f\x8a\xcb\x54\x79\x67\x1e\x7b\xb0\x06\x7d\xed\xaf\x10\x4f\x27"
- "\xca\xe4\x34\x86\x34\x44\x3d\xe9\xcc\xf3\x57\x74\x5a\x59\x74\x67"
- "\xa3\x87\xcb\x7e\x67\x03\xe1\x1e\x78\x21\x85\xe6\x27\xf4\x98\x7f"
- "\x98\x55\x9e\x19\xe7\x21\x59\x35\x9c\x31\xf9\x0d\x67\xca\x58\xf9"
- "\x99\xb4\x1f\xbd\xc4\x5c\xbe\xf2\x33\xd9\xfe\xf2\x33\x66\xef\x08"
- "\xf4\xe1\x8b\x8f\x01\xd9\x27\xef\xef\x19\xd2\xe0\x7d\xa4\x47\x13"
- "\xe7\xbf\xa3\x18\x75\x60\xd3\x0d\x65\x27\x7a\x50\x16\xac\xbf\xe0"
- "\xb6\xa9\xcd\xfd\x31\xa7\x29\x8b\x3a\x63\x22\x99\x22\xfe\x2e\xb1"
- "\x42\x19\xab\x38\x93\xe6\xaf\x38\x63\xf6\x55\x20\xde\x28\xac\x27"
- "\xfa\xf3\xf7\x3c\x5c\x5f\x3f\x47\x79\x3d\x86\x65\xde\x07\x21\xe3"
- "\x9f\xdb\xc3\xd9\x48\xb2\x55\x64\x9f\xb2\xbc\x1e\x92\x99\xcf\xc9"
- "\xae\x09\x3b\x05\x4b\x15\x3b\x45\x36\x8a\xe2\x22\xb2\x53\x7e\xd9"
- "\x4e\xf9\x65\x3b\xc5\x9f\x0d\x68\x6b\xca\x4f\x67\x93\x3d\xca\x2a"
- "\x16\x76\x26\xcb\x97\xc6\x50\x36\x62\x10\x47\xb6\xe0\x05\xc2\x54"
- "\x9e\x7e\x8a\xc3\x73\x3a\x9d\x2e\xf3\xa3\xbd\xc1\xab\xc6\x2f\xec"
- "\x4d\xbb\x6c\x6f\x24\xc5\xde\xf8\x70\xfc\x43\x9d\xf2\x87\xb2\x37"
- "\x7e\xd9\xde\xf8\x98\xb0\x37\x7e\xd9\xde\x50\xba\x4f\xb6\x37\xbe"
- "\x10\xf6\x06\xf5\x99\xfa\x1b\x21\xdb\x99\x32\xb2\x33\xd4\x5f\x94"
- "\x35\xb3\x5f\xd8\x99\x3c\x8c\x89\x24\xb2\x33\x3e\x2c\xe3\x57\xec"
- "\x4c\x1f\x2f\x5f\x46\xb6\x66\x60\x07\xa0\xfd\x34\x01\xd9\x18\x6e"
- "\x4f\xbc\x63\xbd\x64\x4f\x90\x7e\xd3\xb4\xf6\x04\xf1\xd5\xe0\xbd"
- "\x51\xb6\x53\xf6\xf8\x6d\xcc\x8b\xf6\xa4\x31\xab\xd8\x8d\xbc\xfe"
- "\x04\xe2\xbd\x68\xb7\x8b\x8b\xca\x1c\xc5\x5e\x40\x3b\xd0\xce\xda"
- "\xca\x00\xdb\x88\xf2\xeb\x43\x5b\x01\x80\x7a\x69\xf2\xa2\x8e\xa3"
- "\x8c\xa7\xb5\x59\xff\x0c\x3e\xd4\xd5\x39\x3d\xbd\x8e\x25\xee\x14"
- "\xe3\x9c\x2f\x98\x0b\xe9\xe3\x5c\x62\x2d\x43\xfb\x92\xe2\x3a\xd1"
- "\xf3\x36\xcc\xee\x64\xfe\xd9\x79\x4e\x13\xea\x40\xda\x9c\x95\xf6"
- "\xf8\x25\xcf\x1b\x51\xcf\x98\x1d\xed\xe2\xbf\xcf\xf9\xc2\x18\xbf"
- "\xb8\x13\xc6\xcc\x5e\xc6\xfc\x3e\xd4\x33\xec\x6f\x23\xf6\xfb\x30"
- "\xb6\xdd\x8e\x3a\xd7\x8e\x7a\x66\xf2\x6a\xf4\x0c\x75\xa6\x1e\xef"
- "\x4d\x82\x7e\x9f\xb5\xa3\x9e\x1d\xf6\xf3\xf1\xac\x93\xc7\xa2\x58"
- "\x4f\x3b\xcd\xdb\xa1\xae\x1d\xf6\x57\x08\x5d\xf3\x8b\x72\x4e\x3f"
- "\xd1\x4f\x92\x75\x0d\x79\x81\xf9\x2e\xd4\x1d\xa4\x75\x18\x5d\xb3"
- "\xaa\x74\xed\x79\x59\xd7\xa2\x84\xae\x21\x4f\x23\x7c\x2f\x08\x7d"
- "\x23\xfc\x14\xaf\x0e\xea\x5b\xf4\x19\x3a\xf3\x46\x27\x64\x87\xeb"
- "\x1c\x8e\x2b\x67\xb2\x51\xdf\xcc\xa8\x6f\x88\x8f\xb9\xc8\x6e\xa2"
- "\x6c\xfe\x27\x8d\x75\x73\xad\xec\x3f\x97\xfa\x6e\x28\x43\x7d\xca"
- "\x46\x5b\xf6\x29\xda\xd1\xff\x5c\xe2\x86\x46\xd4\x27\x13\xea\x51"
- "\x1a\xea\x93\x19\xf5\x8a\xf4\xc9\xee\x7b\x81\x70\x7e\x6e\x1f\xc4"
- "\xc1\xc7\xca\x60\x7d\xba\xd8\xbc\x69\x9f\xed\x07\x7a\x27\x7c\xc3"
- "\xe7\x5f\xf1\xde\xe8\x84\xfe\x0c\xf9\x3e\xc9\x09\xff\x9f\x9e\xfb"
- "\x32\xa8\x87\xd6\xad\x70\xcd\x59\xf8\x41\x3b\xca\x3c\xe0\x7d\x0c"
- "\xde\x7f\x9c\x75\xc7\x3b\xcc\x5f\x95\x9a\x82\x75\xf7\x91\x2e\x32"
- "\xdb\x64\xf2\xe5\xcc\x28\x8b\x06\xd6\x97\x12\xc3\xa2\xdd\x9b\xd9"
- "\x40\x22\xcd\xcd\xc5\xe3\x73\x1c\xd2\x20\x19\x7f\x47\x1f\xf8\x1a"
- "\x12\xf0\x4a\x3c\x60\xf3\x97\x91\xff\x84\xf7\x69\x6c\x63\x62\xf4"
- "\xae\x0d\x90\x1a\xef\x16\x67\x9f\xc6\x6f\x33\xd2\x1c\x55\x02\xdd"
- "\x33\xdb\xa7\x29\x0d\x5f\xcb\xe7\x9f\xc6\x62\x7d\xea\xf3\x4f\x6d"
- "\x90\xd8\x60\x63\x87\x7d\x7d\x5c\x2f\xd3\x94\xb6\x50\xdb\xb0\x9d"
- "\x37\x61\x3b\x3b\x1f\xdb\x64\x86\xf7\x8b\x43\xef\xab\xd8\x67\x9b"
- "\x32\xd8\xff\x30\xf9\xc9\x0a\x4d\xc2\xe4\x67\x28\x74\x0a\xb7\xb6"
- "\x93\xc6\x69\xdf\x06\xd6\x43\x7b\x74\xd3\xbc\x41\xa9\x97\x7d\x86"
- "\x74\x2c\xdb\xea\x03\x43\x56\xb1\x87\x39\x7a\x98\xdd\x51\xfc\x05"
- "\x34\xd0\xbe\xe1\x25\xcc\xef\x8f\x72\x2f\x66\x15\xee\xdc\xde\x0d"
- "\xcc\x4b\xf3\x3e\x58\xc7\x41\x27\x2c\x6a\x14\xbc\xe8\x38\xcc\xe3"
- "\x4d\x83\x3b\x17\x71\x8d\x22\x5c\x27\xb0\xbc\xaf\xc2\x8d\xf2\x3a"
- "\xa5\xdd\xa9\x33\xf0\xb3\xbe\x50\x97\x0f\x5b\x37\xc3\x8d\x67\xe1"
- "\x7e\x7e\xb6\x2b\x2b\x77\x5b\xc9\x26\x60\x9a\x11\xd3\x12\x10\x7f"
- "\x51\x9f\xed\x7e\xf4\xb9\x7b\xf7\x08\x5f\xf6\xfe\x04\x05\xce\x09"
- "\x53\xba\xb5\xeb\xd6\xe4\xaf\x24\xcb\x82\xf6\x79\xd3\x41\xf0\xae"
- "\x75\xb4\x43\x9c\x39\x74\x76\xc0\xa6\x7f\x96\x46\xe7\x6d\x95\x6e"
- "\x81\x24\xe4\x0f\xb5\xaf\x02\x63\x8e\x2e\x66\xbb\xdf\xf4\xd6\x66"
- "\x0f\xc6\x14\xf7\xef\x71\xc2\x87\x61\xe9\xe9\xff\x9a\x75\x22\x0d"
- "\xda\x77\x6f\x00\x20\xfa\x10\x3d\x51\x6f\xfc\x48\x87\xd3\x64\x93"
- "\x1a\x36\x50\xdc\x7d\xff\x49\x85\x5e\xe1\x79\xe2\x2e\x10\xb1\xe9"
- "\x03\x53\x98\x8d\x81\x7d\x0c\xbd\xc7\x78\xe0\x7e\x41\x83\xcf\xec"
- "\xbd\x68\x47\x68\x4e\x99\xce\xc6\x5a\x97\xc8\x3c\x7d\xb6\x07\x52"
- "\x9d\xf0\x70\xab\x3c\x5f\xe5\x76\x78\x67\x90\x6d\x09\x39\x6e\xf1"
- "\x3d\x49\x07\xf1\xff\x30\xb7\x2d\x09\xed\x10\xd9\xa6\x18\xd8\xbe"
- "\x55\xf0\xdf\x43\x78\xe9\x5b\x8f\x4e\xcc\x5f\xe7\x66\xdd\xac\x0a"
- "\x8a\x29\x8e\xa0\xfd\x3d\x31\xed\x09\x94\x6b\x66\x2f\xa4\x36\xfd"
- "\xf0\x09\xfb\x98\x7e\xe8\x2a\x86\x88\x86\xc1\x79\xa2\x1f\x66\xd0"
- "\xbc\x90\x98\x0f\x7b\xa0\xc5\x09\x33\xf2\x95\x76\x91\x8f\x81\xb4"
- "\x25\x3a\x1f\x26\x5f\x83\xde\x53\xac\x2b\x61\x1e\xf2\x39\x10\xd6"
- "\xa5\xf4\x81\xfa\x27\xfa\xf5\x43\xbd\xba\x5f\xf4\xee\x3e\xbe\x44"
- "\xd0\x60\xdd\x26\x30\xf0\xb3\x7a\x7c\xf4\x9e\x63\x06\xef\x0b\xf5"
- "\x99\xf7\x85\xdb\x58\x1c\x23\xbc\xf7\xa2\x0c\xf1\xf4\x76\xc4\x85"
- "\xf1\xcf\x74\xb1\xa7\x33\x3c\xd0\x12\xee\x1b\x16\x94\xcd\x32\x8c"
- "\x55\xc7\x94\xfa\x59\x07\xe2\xfc\x44\xcc\xb1\xfd\xf0\x13\x3f\xf9"
- "\xd9\x1e\x92\xdd\xfe\x02\x1a\x93\x1d\x25\x64\x6f\x39\xec\xd5\x08"
- "\xdb\x89\x30\x27\x64\xd8\x13\xfc\x3c\x40\xf1\x3b\x92\x7e\x71\x1c"
- "\xdb\x82\xed\xe8\xa4\x79\x5f\xa4\xb3\x59\x79\xc6\x18\x1f\xe3\xc4"
- "\x1f\xd6\xb1\x8a\xfe\x82\xd0\x6d\x39\x53\x46\xe3\x99\xef\x6b\xd6"
- "\x83\xf5\x5c\x47\x72\x54\xba\x09\xae\x47\x99\x3c\xbd\x75\x0b\x5c"
- "\x43\x32\xc6\xa2\xdc\xc5\x82\xee\xe9\x68\xe3\xd0\xf7\x44\x8b\x6a"
- "\xdd\x00\x37\xa2\x0e\x59\xcf\x42\xfa\x8c\xa5\x25\x26\x6c\x2b\xc0"
- "\xee\x73\x40\x3e\xca\xa7\x08\x5f\xe4\xf0\x9e\x81\x86\x73\x24\x8b"
- "\xe9\xf9\x8a\x2c\xe2\xbd\xf5\x62\xb6\x02\xc7\x19\x79\x8e\x22\xfd"
- "\x13\x7a\x27\xd1\x01\xe9\xad\xd4\x5f\xb1\x06\x3a\xfd\x77\xec\x6b"
- "\x96\xc4\xc4\x98\x86\x7c\x4c\x77\xe3\xd8\x02\xfc\x42\x5b\x22\x9e"
- "\x3f\x73\x21\xdc\x41\xf6\xb5\x8f\xa7\x63\x9a\x9d\xd9\x74\xa4\x27"
- "\x75\x58\x77\x8f\x13\x96\x1c\x15\xbc\x49\x3f\x4a\xb8\x42\xb7\xe1"
- "\x33\x17\xe3\xfb\xdb\x7e\x89\xfd\x9d\xfa\x98\x69\x2b\xcd\x71\x4e"
- "\xe5\xe7\x8c\x10\xae\x06\x49\xd8\x6c\x3f\xb6\xb5\xde\xe6\xb7\xa0"
- "\x7d\xb6\xf8\x2b\x7d\x26\x7e\x2f\xe7\x31\x79\x1c\x0d\x89\xbf\x0a"
- "\xb6\xd3\x9e\xdd\x9d\x30\x95\x9f\x33\xe3\x47\xb9\xb7\xdf\x70\x96"
- "\x9e\xf9\xf9\x2c\x6e\x83\xdf\xe4\xa8\x35\x8b\xf3\x11\x11\x46\xc4"
- "\xf1\x53\x7f\xdd\x8b\x75\xf4\xd9\xa6\x1e\x76\xc2\xcc\x46\xf1\x7e"
- "\xc6\x6f\x0a\xfb\x7d\x14\xea\x00\xe9\x9c\xd0\xe9\x69\x2f\x9d\x68"
- "\xe4\xfa\xe7\xec\x35\x74\x2a\xf6\x97\xe6\x73\x62\x3a\x60\xda\xf6"
- "\x13\x89\x5c\xbe\x25\x26\x3d\x68\x0c\x3a\xc3\x0d\xf3\x86\x5e\x0f"
- "\x66\xe0\x95\x83\x57\x9e\xfc\x5c\x80\x17\xf6\xf9\xc1\x76\x7c\x2e"
- "\xe2\xb4\xdb\x9f\xaf\x73\x62\x5e\x2f\xfa\xec\xf4\xec\x84\x07\x67"
- "\xb3\xfd\xc9\x92\x72\xdf\xb0\x8f\xe6\x09\x1e\x2c\x76\xc2\x54\x10"
- "\xbc\x98\xc6\xd7\xee\xa0\x3e\x12\xdd\x59\x69\x2d\xf3\xb4\x6c\x75"
- "\x63\xbb\x1f\x3c\xd8\x52\xeb\x06\xd3\x6d\xd4\xff\x07\x0f\x51\x9f"
- "\x68\x0d\x0b\xfd\xae\xab\x65\xae\xe6\x3a\x2f\xd0\xbb\x3c\xc4\x85"
- "\xfa\xdf\xc0\xd7\x09\xb1\x5d\x70\x98\xf0\xc9\x32\xc1\x94\xfe\x0b"
- "\x7e\xf9\x4d\xa6\x0d\x3a\x7a\x1e\x55\xbf\x97\xcf\xc3\x9c\x62\xa5"
- "\xb9\xf2\xda\x85\x69\x51\xa8\xe7\xd3\xe8\x7c\xc7\x73\x30\x6d\x0e"
- "\x43\x5a\x37\x5b\xf8\x59\x51\x2e\x1c\x7f\x7a\xea\xf9\x7a\xa3\x69"
- "\x68\xff\xa6\xf2\x3d\xa8\xab\x31\x9d\xdb\x1a\xc4\xb9\x0b\xf3\x70"
- "\x3c\xea\x39\x61\xf1\x80\x8f\xfa\x8c\x65\xdf\xfe\xda\xa3\x8f\x2f"
- "\x02\xdd\x56\x3a\x7b\x1d\xdb\xc1\x90\x57\xc2\x96\x3d\xe8\xdc\xf2"
- "\x05\xf3\x28\x7d\x6e\x6e\x24\xfd\x98\xb6\xdd\x09\x3f\xfb\x38\xac"
- "\x4e\x0c\xf6\xc3\xfc\x66\x73\xb2\xe0\xa3\x1f\x69\x15\xcc\x47\x73"
- "\xa3\xe0\xe1\xb4\x8f\x83\x79\x68\xc6\x1a\xcc\x28\x09\xe6\xc9\x78"
- "\x65\xc8\xcf\xea\xcb\xa0\xba\x47\xbe\x9a\xab\xfa\x6c\xe6\x04\xd4"
- "\x8f\x12\xc1\x1b\x4a\x47\x79\x26\xb9\xb9\x80\x63\xcf\x40\x2e\xd0"
- "\xfb\x5e\x4a\x27\x19\xa7\x74\x3f\xfa\x37\xf8\x4c\xe7\xc7\x1b\x49"
- "\x7f\xe9\xdc\x2d\x75\xfe\xe0\xf9\x0a\x60\xe6\x67\x66\xc4\x6f\x2b"
- "\x2f\x27\xd9\x45\x98\xd4\x78\x6f\x79\x39\xd6\xb7\x5d\xa1\x2b\xa6"
- "\x15\x50\x3e\xc9\x29\xa6\xd7\x39\xe1\xe7\x09\xfc\x7d\x2e\xc6\x80"
- "\xa1\x7d\x0f\xb3\x7d\xd0\x47\x33\x74\xe6\x11\x2f\x7b\xe0\xa1\xe3"
- "\x68\xc7\xd0\x7e\xfb\xc4\xbe\xef\xf0\xd0\x09\x7a\x46\xfb\x79\x1a"
- "\xef\x5b\x4f\xa0\x9d\xea\xaf\xbc\x90\x3b\x20\xc1\xc8\x7e\x09\xcc"
- "\xde\x5d\xa9\xb3\xbd\xd1\x7f\xcd\x77\x74\x1f\x81\x36\xef\x6f\xc0"
- "\xf4\x1c\xc7\xf1\x2e\x9d\xff\x56\xba\x89\xf9\x7e\xd5\x7f\x50\xef"
- "\xf0\x9e\xb7\xf3\xb3\x4e\xe1\x21\x4e\x8f\x97\x3b\xd0\x0b\x58\xc2"
- "\x71\x0b\xfa\xc4\xa4\xa6\xec\x5a\xc1\xbc\xbb\xba\x68\x4f\xf8\xc4"
- "\xe8\xea\x7e\x48\x7d\x63\x33\xa4\xd5\xf5\x43\x72\x7d\x3f\xa4\xb0"
- "\xcf\xe9\x6c\xfa\xc0\x79\xf6\x71\x56\x30\xd4\x6f\x46\x7f\xce\x0b"
- "\x3a\x5f\x35\xfa\x73\x5e\xf4\xe7\xce\xa7\x90\xbd\x1c\xf4\xe7\x06"
- "\xb8\xaf\xec\xee\xe4\x67\x84\x56\xb8\x3b\x63\x2d\xa0\x8b\xc9\x03"
- "\x23\xb6\xaf\xf4\x1c\x3c\xa4\x8b\xe9\x44\x5f\x12\xfb\xec\x94\xfb"
- "\x8b\xbf\x09\xf1\x16\x18\xc9\xfb\x8a\x36\x9c\x55\xf8\x12\xc3\x8e"
- "\xcd\x12\xc9\x94\x9b\x74\x04\xfb\xf0\xf0\xf5\xf4\xce\xf9\xc8\x0d"
- "\x1e\xfd\xba\x3a\xe6\xa1\xf4\xa2\xb1\xcc\x83\xe9\x7c\x2f\xff\xc3"
- "\x98\xde\x67\x7b\x38\xc5\x29\x7d\x92\x1c\x4e\x46\x31\x66\x92\x6d"
- "\xcd\xc3\x3f\x63\x52\x19\xca\x68\x67\xe3\x16\x2f\xfa\xe3\xe7\x48"
- "\x8f\x1f\x3e\x98\x55\xc0\xbc\xa6\x35\xf4\xfe\xff\xe1\x5a\x5a\x9b"
- "\x40\xef\x24\x7f\x89\xbe\xce\xa5\xd6\x23\xd0\x18\x42\xf1\x43\x7c"
- "\x01\xe2\xac\xec\x6c\x64\x18\xb3\x5f\xae\x5f\x4f\xeb\xcf\xc4\xb7"
- "\xa6\x0f\x77\x3a\x61\x0d\x5f\xf7\xc1\xbf\xcf\xe1\xf6\x74\x7a\x8b"
- "\x1b\x69\x10\x6c\x03\xa6\xd7\xd2\xfe\xe4\xbd\xe5\x17\x3a\xed\x63"
- "\xc8\xf6\x4f\x7f\x45\xf8\x42\x17\x9c\x62\x2c\x98\xfe\xbc\x78\x7f"
- "\x30\x7d\xb2\x13\xe6\xf3\x31\xde\x3a\x8e\x64\x62\x7a\x01\x8b\xbe"
- "\xf0\x19\xc1\x4d\x28\x83\xb2\xb5\x5e\xc8\x63\x15\x17\x9c\x8c\xeb"
- "\xca\x39\x60\xaf\xaf\xea\xa3\x6f\x6e\xdc\xd7\x2d\xea\x43\xdf\xa0"
- "\x05\xf3\x3a\xa9\x0e\x17\xc2\x20\xdd\xa3\xc4\xda\x85\xe9\xe5\x4e"
- "\x98\x27\xdb\xc3\xe9\x8b\xc5\x1c\xf3\xf4\xc5\xbd\x58\x16\x7d\xc5"
- "\xab\x31\x1f\xfd\xdf\x55\x31\xf2\x3b\x6e\xd7\x8b\xfc\x5b\xd1\xe9"
- "\xc7\x9c\x50\xc0\xdf\x03\x16\x8d\x85\xc4\x22\x13\xeb\x0e\xeb\xeb"
- "\x05\xf5\x73\xc6\x43\x7c\x1d\x9e\x04\xd7\xf5\xd9\x32\x40\xc1\x8b"
- "\xe3\xed\xcf\x7b\xa5\xc7\x1e\xc3\xb4\x04\x05\x2f\xc2\x5c\x83\xcf"
- "\xc9\x83\x30\xa2\xcc\x64\x55\x99\xc7\x7a\xa5\x3b\x7f\x8e\x69\x99"
- "\x9a\x32\xb9\x9a\x32\x16\x55\x99\x32\xb9\x9e\x12\x4d\x99\x2a\x4d"
- "\x99\xba\x10\x6d\x3b\xac\x29\x63\xd7\x94\x69\x0f\xd1\xb6\x4e\x4d"
- "\x19\x77\x70\x99\x19\x7a\x15\x6d\x69\x3d\x51\x1a\xa6\x25\x06\x97"
- "\x99\x91\xa2\x29\x33\x45\x79\x46\xdf\x33\x57\xf8\x06\x28\x4f\xc8"
- "\x53\xe4\x6b\x27\xe6\x63\xff\x1f\x2b\xb8\x88\xff\x8d\xb1\xe1\x85"
- "\x53\xa5\x07\xc4\x79\xb9\x64\x57\x69\xfd\x01\xd9\x73\x7a\x67\x42"
- "\x32\x41\x7e\x27\xd5\xd5\x05\x33\x5f\x22\x19\x42\x9c\x87\x86\xd2"
- "\x63\x86\x5d\xd3\xce\x76\x4d\x3b\x9d\x43\xe9\x31\xc3\x1d\x5c\x66"
- "\xa6\x3e\xb8\xcc\xcc\x04\x55\x99\x46\x51\xcf\xcc\x14\x4d\x99\x29"
- "\x9a\x32\x99\x43\xe5\x73\xe6\x62\x4d\x99\x02\x4d\x99\x92\x00\x0d"
- "\x67\xf2\x6f\xc3\x49\x1f\x30\x1d\xe3\x9f\x05\xc7\x2e\x42\x3b\xa3"
- "\x22\xcf\xca\xb7\xd3\x42\xae\x1f\xb9\x7e\x8f\xf8\x6e\x8e\x9f\x4d"
- "\xd0\x09\x8f\x8c\x57\xde\x2d\xbf\xd5\xef\x89\xa4\x77\x9e\x48\xdb"
- "\xee\xe6\x62\x0f\x8e\x2d\x33\x71\x0c\x9e\x93\xa6\xac\x2d\xa1\xf5"
- "\x38\xfc\x6c\x1b\x1e\x8f\xcc\x3c\x29\xf4\xef\x11\xe5\x9d\x0e\xf5"
- "\x07\xe3\x8c\x47\x52\xaf\xb0\x5d\x27\xa8\x5d\x74\xc6\x03\xe2\xb0"
- "\x0e\xc6\x1a\x83\x6d\xa5\x3a\x1f\xf9\x8b\xd2\xd6\x06\xb1\x26\x88"
- "\xd6\x0a\xbb\xe8\xdc\x0d\x2c\xd3\xa4\x8a\x4f\xa8\xad\xee\x23\x9b"
- "\x3d\xfa\xe0\x36\x3f\xb2\x5d\x6e\xf3\x49\x61\xa3\x1e\x39\xa9\xd8"
- "\x93\xb0\xf2\x57\x05\x96\xb6\x3a\x00\x5a\xf3\x70\xa2\x0e\xfd\x4d"
- "\x8c\xb1\xa8\xdd\x1d\x90\x69\xe2\xfe\xef\x9a\x7e\xa0\x7b\x47\xc9"
- "\x03\x7c\x4d\x84\xe8\x4b\x66\x2e\x9d\xaf\x4c\xbe\x4f\x8b\xf5\x4b"
- "\x5a\x97\xc7\xf8\x59\x4b\x90\xf9\x52\x73\x89\x0b\xdb\x9a\x99\xad"
- "\xac\x1f\x72\x42\xa6\xf0\xeb\xaa\x20\x8f\xd6\x6b\xd0\xda\xa6\x66"
- "\xf7\x14\x82\x29\xc2\x76\x2a\x6b\xa7\x7b\xe8\xac\x66\x84\x4d\x0d"
- "\x17\x2b\xa9\xe9\x2a\xda\xf0\xe8\x05\x21\x3f\x99\xc7\x82\xf5\x21"
- "\x12\xe5\x34\xb3\x3d\x58\xe6\x32\x9d\xc1\x32\x97\xe9\x0a\xd6\x07"
- "\x09\xf5\x61\x96\x3e\xb8\xcc\xac\x84\xe0\x32\xb3\x92\x55\x65\x6a"
- "\x44\x3d\xb3\xa6\x68\xca\x64\x6a\xca\xa8\xed\x1f\xf6\x79\x96\x65"
- "\x30\xee\xe4\xf6\x7e\x56\xb1\xea\x59\xda\xc3\xc7\xa9\x59\x55\x4a"
- "\x9a\xfc\x5d\x32\x5f\x2b\x25\xe3\x3b\xa8\xb1\x51\x04\x7f\x4c\xd3"
- "\x86\xe3\x9a\x36\x9c\x52\x9e\xe5\xf5\x15\xef\x21\xed\xc6\xca\x72"
- "\xe6\x8e\xdf\x06\xf3\xe2\xbd\xf3\x9f\x20\xdf\x8c\xc6\x27\xbe\x86"
- "\x6d\x0b\xfa\x94\x5f\x81\x91\xd6\x0e\x76\x15\x41\x04\x9d\xff\xe2"
- "\x84\x1f\xe5\x60\x3c\xe7\xa4\x35\xee\xe8\x4f\x65\x75\xc1\xac\x1e"
- "\xac\xbf\x16\xeb\x40\xda\x3d\x6a\x0e\x6e\xc3\xa3\xd9\xc1\x6d\x78"
- "\x34\x4f\xf5\x6c\xc4\x67\xab\xaa\xdf\x46\xda\x27\xe2\x35\xee\x5b"
- "\x3f\x5a\xae\xa4\xd3\x1c\x00\xf6\xb1\xbb\x94\xfb\x01\x66\x5a\x37"
- "\x38\xba\x03\x1e\x5d\x4f\xf3\x05\x32\xce\x23\x6a\xda\x0a\x5a\x3c"
- "\xda\xaa\x69\xc7\x49\x4d\x3b\xba\x03\xb6\x66\x56\x8f\xd0\x91\x47"
- "\xf1\x7e\x61\x0a\xa5\x21\x2d\x4c\xf1\x5e\xd3\xd5\xf6\x71\xe4\xa7"
- "\xfe\x68\x96\x1b\xfb\xcb\x76\x48\xa3\xe5\xe7\x39\x6c\x1c\xf9\xdd"
- "\x6e\x27\xda\x67\xfa\x76\xf6\x66\x4c\xcb\x11\x7c\xfd\x11\xf6\x7f"
- "\x81\x59\xe0\xfd\x11\x7f\xb7\x4f\xb0\x78\x6f\x62\xb1\x50\x1c\x4e"
- "\x9e\x7b\xe3\xc0\xaa\xac\xb1\x45\x1c\xdb\x15\x7d\xf0\xef\x02\xab"
- "\xbf\x62\xe0\x24\xa6\xd5\xa2\x4e\xd4\x88\xf7\xa8\x03\xc9\x28\xfb"
- "\xb5\xc8\x3f\x8c\x81\x67\xbf\x24\xc7\x8c\xdb\x69\xed\x20\xed\x5f"
- "\x81\x36\x33\x46\xac\xcd\xf8\xd1\x71\x95\x5e\xb9\x4d\x9b\xa7\xb1"
- "\x0e\x98\xfd\x0a\xf9\x76\x64\x37\x68\x0d\x62\xb3\xd7\x05\x34\xcf"
- "\xe2\xf0\x9e\xe5\x3e\x39\xe6\xd7\x88\xb2\xb3\x0d\xaa\xb2\x2e\x79"
- "\x1e\xa4\x9b\xf2\x26\x7a\x41\xdf\xec\x76\xd1\x59\xba\x09\xc2\x8f"
- "\x9f\xfd\x4a\x33\xda\x0b\x2c\x93\xae\x94\xa1\x39\x13\xfe\xde\xbf"
- "\x08\xf4\x13\x4a\x40\x6f\xdf\xdc\xc1\x71\xcb\xef\x9c\x79\x7c\xe4"
- "\x28\xe9\x06\x87\xfb\x24\xf9\x94\x7a\xb1\x6e\x6b\x76\x4d\x84\x07"
- "\x0c\xbd\xd5\x80\x32\x32\xbb\xc6\x57\x0d\x16\x6c\x1b\xc6\xf1\x3f"
- "\x3a\x42\x36\x50\x4d\xbb\x19\x33\xb2\xe7\x67\xcd\x19\xff\xf8\xfc"
- "\x59\x39\x33\x1e\x30\xe5\xac\x5c\xbd\x3c\x7f\xfc\xda\xf5\x45\xa6"
- "\x8d\x85\x2b\x8b\x56\xae\x79\x96\x1f\xff\x65\x5a\x56\x24\x7e\x53"
- "\x0a\x96\xad\x2b\x9a\x4a\xb7\xa9\x26\x6b\xe1\xf2\x0d\xfc\xf6\x8e"
- "\x68\x08\x46\xb2\xb2\x68\x79\xa1\xe9\xd6\xfc\x54\xd3\xcc\x65\x2b"
- "\x0b\xe8\x2b\x86\x50\xb8\x1e\x30\x15\x2e\x2f\x5c\xbe\x2c\xdf\x34"
- "\xd5\x94\x46\x98\xd5\xe8\x54\xfc\x4c\x53\xec\xd3\x3a\x1c\xcf\xd1"
- "\x87\xee\x26\x3b\x45\xe3\x7a\x17\x64\xad\x27\x1f\x8e\x9f\xd7\x85"
- "\x72\x88\x63\x82\xb3\xcf\x36\xa7\x68\xe8\x38\x3e\xa7\x3c\x58\x7e"
- "\xe7\xd4\x06\xcb\xef\x9c\x83\x43\xc7\xf1\x39\x1a\xfd\x9f\xa3\xd1"
- "\xff\x39\xa7\x86\x8e\xe3\x73\x5c\xc1\x65\xe6\x42\x70\x99\xb9\xc6"
- "\x41\x3b\x83\x6d\x7d\x91\xdb\xa5\xb9\xc9\x9a\x32\x93\x35\x65\x32"
- "\x34\xcf\x39\xaa\x67\xf4\x5d\xe7\xe6\xab\x7d\x03\x7c\x2e\x52\x74"
- "\x3d\x60\xdf\xe6\x96\x2b\x30\x34\xf6\xd0\xb7\x2e\x32\x6c\xa3\x0a"
- "\xb6\x5b\x86\x1d\xd4\x7f\xb2\x49\xb4\x76\x53\xf8\xe7\x59\xb7\xca"
- "\xb6\xad\x73\x77\x60\x0c\xed\x44\x5e\xdc\x7c\x0e\xe6\xbe\xd2\x20"
- "\x60\x5d\xb4\x9e\x97\xbd\xbe\xa8\xaf\x61\x34\x18\xa8\x2c\x9d\x57"
- "\xc5\x6c\xb3\xeb\x68\xfd\x38\xa6\xc5\xe0\x85\x76\x2a\x2b\x51\x59"
- "\x3b\xbf\x1d\x61\x9c\x90\xc5\x65\x99\xca\x6d\xe7\xeb\x0e\x79\x7d"
- "\xaf\xd0\x37\x56\x74\x06\xdc\x6e\xb1\x87\x44\x27\x9d\xa3\x46\x75"
- "\x23\x0e\x3d\x93\x66\x9f\x96\xcf\xc3\x32\xe2\x95\x80\x38\x0b\x14"
- "\x9c\x88\x2f\x11\xc4\xb9\x7b\xb4\x8e\x4c\xf6\x7b\xb2\xaa\x14\xff"
- "\x82\x62\x85\x50\xb6\x23\xf4\xda\x6c\x88\xdf\x6d\xf3\x9f\xb4\x6f"
- "\xed\xa4\x36\x1d\x23\x3f\xd4\x91\xe8\x85\xb6\x3a\x2f\xc6\xaf\x60"
- "\xe4\xf1\x54\xf1\x17\xe0\x68\xf4\x02\xcd\x0f\x2f\x2d\x86\xb2\x06"
- "\xc9\x7f\x92\x0d\x96\xa3\x18\x2d\xcb\x4d\xed\xd9\x4e\xe9\x58\x1e"
- "\x63\x09\x17\xad\xe1\x0e\x33\x1f\x11\x4f\x70\xf6\x71\x14\xef\x65"
- "\xa7\xca\xbe\x6f\x79\x03\xe2\x0a\xb9\xbe\x58\x02\x47\x9f\x2d\x1b"
- "\xc7\xbf\x8d\xed\x8a\xcd\x6e\xae\xe5\xb6\x4f\xc2\x74\xd4\xf7\xac"
- "\xc3\xe1\xfc\x14\xd9\xbe\x5b\x69\x5d\x19\xc2\x1e\xba\x18\x2c\xb5"
- "\xbb\x19\xfb\x8d\xba\xd8\xfd\xd6\xd6\xb4\x48\xd9\xbe\x1a\xb0\x5c"
- "\xa7\x52\xee\x72\xfa\x47\xbe\x11\x8d\xc7\xa8\xab\x6e\x11\x2b\xce"
- "\x7f\xe2\x35\xbe\x66\x79\x1e\xfa\x7f\xd9\x8a\x1e\x5c\x85\xcf\x68"
- "\xff\xb2\xf9\x7c\x22\x5f\xd7\x83\xf1\xe4\x3a\x2b\xfa\x6c\x89\x6e"
- "\xb4\x8d\xf3\x72\x95\x3c\x3e\x4f\x44\x79\x25\xcc\xd3\x9c\x48\xf3"
- "\x1a\xf3\x8a\x06\xf3\xc4\x37\x04\xac\xb9\xd8\x4b\xe9\x55\x4a\xba"
- "\x18\x5b\xe6\xd5\x69\x9e\x0f\x29\xcf\x78\x7f\x14\xef\x4d\x32\x7e"
- "\x17\xda\x5c\x9d\xd8\x73\x61\xfe\xf5\xf5\x5c\x6f\xe6\x9d\x54\xf2"
- "\xf9\x9c\xda\x9b\xf4\x6e\xcc\x0d\xfe\xe8\x0b\xdc\xd7\x25\x7b\xfd"
- "\xab\x2f\x3d\x91\x18\x63\xe8\x18\x9d\x9d\x8a\x69\x84\x87\x74\x86"
- "\x9f\x61\x8f\xcf\x1d\x30\x8f\xce\xa0\x75\x91\x8c\x6c\xf4\x42\x92"
- "\xf5\x41\x9a\x7f\x9e\xcf\xe5\x96\xd2\x08\x2f\xe1\xa3\x31\x91\x70"
- "\x13\xbe\x5d\xe4\xd3\xf2\xf5\x92\xf3\xa9\xff\x55\xe1\x78\x85\xf9"
- "\xc5\x2a\x5a\x46\xe2\x73\x79\x70\x5f\xe7\xd7\x6a\x9e\x0f\x2a\xcf"
- "\x34\xd7\x2b\x64\x6f\x7e\x9d\x9c\xd7\x72\xb1\xba\xc6\xf1\x6f\x64"
- "\xe6\x77\x6b\xea\xf3\x04\xe3\x5f\x60\xd0\x3c\x27\x2a\xcf\x7b\xf8"
- "\x3b\x86\x05\x29\x4a\x1d\xbb\xc5\x1a\xae\xee\xa6\xad\xae\xc8\x8b"
- "\xed\x65\x82\x65\x16\xab\xea\x1c\x81\xcf\x05\x01\xfe\x2d\x28\x56"
- "\xf0\xe1\xfd\x76\x15\x1c\xfa\x25\x0b\xf6\x28\x70\xe2\xfd\xc6\x82"
- "\x26\x55\xb9\xc3\x97\xe8\xab\x46\x76\x73\x7c\x42\x76\x17\x74\x6b"
- "\xda\xe2\x09\xe0\xcc\xd1\x07\xda\x92\x63\x54\xc1\xa1\x7e\xe6\x98"
- "\xb4\xb2\xba\xae\x98\x64\x9c\xe4\x35\x27\x3d\x44\x9e\x47\xce\xcb"
- "\x0d\x2d\xe3\x39\x56\x55\xba\x1c\x1f\xe5\xfc\x59\xf6\x13\xc8\x3e"
- "\xbb\x7b\x4b\x73\x94\x73\x54\xb9\x4c\xd2\x3e\x62\x13\xc5\x99\xdd"
- "\x28\xd7\x39\x87\xb5\x78\xc5\xf7\x37\x32\x8e\x00\xce\x32\xe1\xe3"
- "\xe5\x38\x55\x7d\xeb\x71\xc2\x7c\xe5\x3d\x91\x4b\xcc\x0d\x2e\x38"
- "\x15\x2e\xee\xe8\xb3\x3d\x96\x14\x4c\xb3\xc7\x52\x03\x34\x7b\x6c"
- "\x4a\x00\xef\x63\x19\x2a\xb8\x7f\xc3\xe7\x1c\x15\x5c\xde\xa5\x64"
- "\x53\xc8\xca\x63\xe5\x9a\xba\x6a\x55\x38\x9a\x54\x75\x1d\x56\xc1"
- "\xa1\x9f\xf8\x98\x3d\x3c\x7f\x1e\x3b\x15\x9e\x3f\x8f\x79\x42\xf3"
- "\x67\xa1\x31\x50\xef\xc2\xa4\x4b\xeb\xd5\x42\xb3\xaa\x3d\x0d\xf8"
- "\x9c\x1d\xac\x47\x0b\xf3\x34\xcf\x83\xfc\x67\x68\x3b\x9a\x36\x9b"
- "\x23\x29\xbd\x68\x2c\x18\x85\x9e\x2d\xac\x51\xe7\xff\xaa\x5f\xe4"
- "\x53\x1b\xf9\x3b\x38\x7a\xbf\x29\xe0\x8e\x6a\xe1\x08\x46\x95\x7f"
- "\x52\x69\x3b\x8e\xd7\x21\xcf\xfc\x54\xc6\x3f\x87\x9f\xc6\xbf\x85"
- "\x6e\xf1\xde\xa6\x37\x89\xd9\xde\xc9\x0d\x37\x96\xf5\xd9\x1e\x4f"
- "\xc3\x98\xa1\x5b\xd0\xe7\x71\x94\xff\x35\xdc\x37\x61\xe5\xbd\x49"
- "\x28\x4f\xfd\x5d\xf0\xf8\x9f\xf1\x77\x00\x7f\x7f\x17\x3c\xbe\x3e"
- "\x9e\xc3\x6c\xba\x05\x0d\x36\xed\xb8\xfb\x78\x01\xc6\x1e\xfd\xf1"
- "\xde\xb2\xdc\x10\x79\xe5\xcc\x16\x31\x3f\x44\x7a\x23\xf2\xab\xdf"
- "\x09\x8f\x7f\x4c\xed\x55\xa5\x1f\x65\xb6\xb8\x1c\x82\x77\x52\x7d"
- "\x58\x26\x1c\xdf\x94\xef\xa0\x84\xec\xe5\xea\x35\xfd\xf8\xa6\x0b"
- "\x72\xb7\x89\x7e\xe4\x7e\x12\x5c\x77\x6e\x52\xe8\x7e\xe4\x4e\xc6"
- "\x7e\x7c\x13\xba\x1f\xb9\xfc\xdc\x5a\x26\x61\x5f\x86\xf8\x1d\xb9"
- "\x05\xd8\x97\x6f\x38\xdd\x83\xd3\xb7\x2b\x71\x6a\xe9\x37\x18\xff"
- "\x4b\xc0\xcb\x2e\x28\x09\xf0\x4d\x86\x3b\x14\x5f\x0b\xd9\x21\xea"
- "\x6c\x61\xb6\x91\x0b\x9c\x90\xeb\x55\xc6\x2b\x39\xfd\x94\x68\x0b"
- "\xd2\x49\x22\x3a\xe5\xf2\x7a\xc3\xf1\x5b\xd1\x4f\xf1\x9e\xe9\x09"
- "\xd4\xff\xc7\x9d\xca\x98\x8e\xe3\xb9\x4b\xa1\x23\xe6\x65\x6a\xf2"
- "\x3c\xaa\xbc\xfc\xa0\xbc\x2d\x83\xe9\x25\x4a\xfa\xe5\xf1\xe9\x89"
- "\x43\x1a\x3e\x21\x7f\x9e\x9c\x1a\xdc\xef\x27\x8e\x89\xfe\x21\x8f"
- "\x86\xd0\xfa\x89\x93\xc8\xa3\x81\xd0\x3c\x7a\xc2\x1d\x5a\xd6\x9e"
- "\x8c\xe1\xf8\x46\x43\x08\x7c\x4f\xa6\x20\xef\x06\xb8\x0c\xca\x7c"
- "\x1a\xca\x9f\x27\x67\x2b\xfc\xb9\xbc\x3e\x3e\x59\xa3\xe9\xa3\xaf"
- "\x0b\x16\xc5\x8a\xbe\x2e\x7a\x4a\x83\xfb\x60\x68\x59\x7c\xd2\x8e"
- "\xfd\xf4\x85\xee\xe7\x93\xa7\xc2\xcb\xe2\x93\xf4\xae\xce\x37\x54"
- "\x16\x17\x19\x45\x19\x08\x51\x66\x51\x2a\xb3\x85\xaa\x67\x51\x06"
- "\xf9\x45\x4e\x58\x54\x42\xef\xe9\x54\xe9\x8b\x83\xe5\x0f\xfb\x40"
- "\xe5\x88\x7e\x5e\x11\xc7\x10\x1f\xba\x4c\x20\x5d\x4a\x26\xfb\x6c"
- "\x8b\x8e\x69\x68\x75\xbe\x0b\x16\x4f\xed\x95\xa4\x99\x82\x5e\x4f"
- "\xe9\x34\x6d\x3a\x19\x9a\x5e\x8b\x5c\x48\xaf\xf3\xa1\xe9\xb5\x38"
- "\x26\x3c\xbd\x16\x13\xff\xcf\x0f\xa5\xd7\x62\xb3\x9a\x5e\x7e\x9b"
- "\xe8\xdf\x2d\x89\x28\x1b\x03\x4b\x59\x83\xb0\xe5\xc6\x78\x94\x15"
- "\x51\xa6\x87\xca\x14\xc5\x7b\x84\x9c\x98\x6e\x00\xc3\x39\x58\xbc"
- "\x58\xd1\xff\xb8\x5a\x18\xc9\x06\x16\xd1\x1a\x6d\x3a\xcb\xd9\xe8"
- "\x28\x3e\x6f\x77\x78\xd3\x80\xe6\x1b\x35\xf5\x1e\x0d\x6d\x0b\x16"
- "\xb7\x23\x4d\x5f\x0d\x91\xde\x2d\xe6\x4c\x9f\x32\x05\xdb\x88\xa7"
- "\x20\x98\x47\x8b\x78\x39\x18\xdc\xff\xf4\xe2\xd7\xc5\x79\xf6\x94"
- "\x75\x28\xcf\x96\x8c\x92\xf9\x75\x21\xb8\x7d\x4f\x95\x87\xe6\xd7"
- "\x53\x8d\xe1\xf9\xf5\xd4\xb1\xf0\xfc\x7a\x8a\x62\x9f\xf3\x4e\x58"
- "\x62\x0c\x1e\x37\x9e\x72\x05\xf7\x17\xeb\xc5\x72\x4c\x1a\x71\x35"
- "\x3d\x5f\x6e\xbf\x95\x8b\x6c\x1c\xf1\x8a\xbe\xff\xc7\xf6\x8f\xa5"
- "\x36\x0e\x17\x47\x58\xdc\x48\xc3\x9a\xcd\x61\xcf\x07\x8f\x69\xc3"
- "\xb8\x92\xd6\xe7\x99\xc6\xd0\x5c\xd9\x92\x33\x7e\x49\xf7\x00\xde"
- "\x4b\x5d\x90\xf7\x6b\xbf\x14\x51\x46\x6b\xc9\xf8\xb7\x83\xfc\xfd"
- "\xc4\x12\xaf\x9a\x17\xb4\xa6\x6c\x97\xd8\xcb\x91\xe6\x39\x3f\xed"
- "\x82\xa5\x2f\x09\xbe\xe4\xbd\x12\x4c\xc7\xa5\xa6\xd0\x7c\x59\x3a"
- "\x05\xf9\xf2\x69\x68\xbe\x2c\xcd\x09\xcf\x97\xa5\x56\xe4\xcb\xa7"
- "\x43\xf5\x68\x69\xb9\xac\x47\x2f\x52\x19\xd3\x1a\xf2\x57\x97\x7e"
- "\x43\x30\x78\x8f\x3a\xb2\xf4\x34\xe5\x8f\xef\x51\xf4\x88\x97\xa1"
- "\xf8\x9f\xd7\x2f\xc3\x1c\x95\x71\xa8\xf1\x3a\xe3\x7b\x42\xe9\xc9"
- "\x52\x7a\x9f\xaa\x9b\x60\x05\x03\xd2\x30\xf7\x00\xe1\x28\x04\x38"
- "\x07\x79\x73\x08\x8e\xd2\xe9\x6c\xe5\x00\x7c\x5e\x8a\x02\xc7\xe7"
- "\x45\x05\xac\x89\xf5\x59\x80\xe0\x82\x71\xe7\xc9\xfd\x1f\xc9\xc7"
- "\x11\x82\x27\x38\x0d\x4c\xb1\xd0\xc7\xbc\x63\xc1\xfa\x98\x57\x13"
- "\x2c\x9f\x4b\xe9\xfd\x44\xbc\x1f\xed\x1c\xca\x72\xa7\xcf\xa6\x7b"
- "\xe0\xdb\xd1\xcd\x65\x31\x1a\xdd\x44\x19\x58\xf6\x0b\x21\x03\xcb"
- "\xaa\x83\xdb\xba\x2c\x39\xb4\x0c\x2c\x4b\x0f\x2f\x03\xcb\x72\xc3"
- "\xcb\xc0\xb2\x22\x92\x01\x27\x2c\x3b\x14\xac\x9b\xcb\xaa\x82\xfb"
- "\x8e\xf5\x72\xdd\x84\x51\xc3\xd1\x4d\xf4\x85\xae\x0e\xa7\x87\xb2"
- "\xff\xaf\x6b\xe8\x07\x18\x06\xcd\x0c\xa8\x57\xd8\xbe\xa7\xcd\xf4"
- "\x0e\x09\x6d\xbc\x85\x68\x58\xcf\x63\xb4\xa7\x73\xd4\x74\xdc\x25"
- "\x62\xad\x52\x84\xfd\x0b\xad\xd9\x13\xf4\x7c\xe6\xcd\xe0\xfe\x3f"
- "\x5d\x14\x9a\x9e\x4f\x57\x21\x3d\x4b\x43\xd3\xf3\xe9\x83\xe1\xe9"
- "\xf9\x74\x0b\x7d\xab\x3e\x54\xa7\x9e\x3e\x65\xda\xc0\x7d\x14\x5e"
- "\xe6\x1c\x3c\x73\xef\xe5\x8d\x4f\xcf\x24\x04\x8f\x4f\x4f\x7b\x87"
- "\x3f\x3e\x3d\x93\x1b\x7a\x7c\x7a\xc6\x1a\x7a\x7c\x7a\xa6\x5c\xe8"
- "\xc3\x33\xf6\x60\x7d\x78\xa6\x31\x58\x26\x90\x76\xdf\xda\xf8\x94"
- "\x6f\xd4\xe8\xc0\xee\x2e\xc8\x7f\x05\x7d\x0a\xd9\x16\x2e\x7f\x2c"
- "\xb8\x8d\xf9\xa9\xa1\xf9\x96\x9f\x81\x7c\xdb\x1d\x9a\x6f\xf9\x79"
- "\xe1\xf9\x96\x5f\x82\x7c\xdb\x3d\x94\x6f\xf9\x7b\x86\xef\x53\xe4"
- "\xb7\x06\xf3\x2c\xff\xf0\xf0\x79\xb6\x3c\x26\x34\xcf\x96\x27\x87"
- "\xe6\xd9\xf2\x74\xc1\xb3\xe5\x45\xc1\x3c\x5b\x9e\x13\xcc\x33\xa4"
- "\xdb\xb7\xc6\xb3\xe5\x2d\x1a\x9e\xad\xed\x82\x15\x33\x90\x67\xed"
- "\x82\x67\xcf\x46\x69\xda\xe8\x0c\xcd\xb3\xe5\x1e\xe4\xd9\xda\xd0"
- "\x3c\x5b\x91\x10\x9e\x67\x2b\x68\x0f\x8d\xb5\x43\x79\xb6\x22\x73"
- "\xf8\x3c\x5b\x51\x12\xcc\xb3\x15\xf9\xc3\xe7\xd9\x0a\x7b\x68\x9e"
- "\xad\x38\x19\x9a\x67\x2b\x5c\x82\x67\xcf\xa6\x04\xf3\xec\x59\x43"
- "\x30\xcf\x90\x6e\x7f\x27\xcf\x90\x3f\x26\xb1\x5e\xf7\xd9\x8a\x5e"
- "\x3e\xa7\xfd\x6c\x99\x13\x2c\xf2\xf7\xec\x16\x2e\x3b\x32\x0f\x7f"
- "\x85\x30\x45\x43\xc7\xee\x67\xeb\xe4\xb4\xc7\x87\xf2\xe1\xd9\xa3"
- "\x38\xae\xf6\xb4\x94\xf0\x75\x5d\x82\x87\x44\x73\x84\x13\x73\x64"
- "\xcf\x72\xfb\x8f\x3c\x66\xb4\xaf\x30\x8d\xc5\x08\xef\x26\x3c\xb4"
- "\xaf\x4a\x30\x2e\x8b\x7e\x38\x7e\x59\xf8\x35\xe6\xbd\x26\xda\xfb"
- "\xbf\x0b\x56\x5e\x2f\x64\xd5\xa2\xf5\x7f\x1b\xb0\xae\x2f\x84\x9c"
- "\x3e\xa7\x99\x33\xb1\x84\xf1\x7f\x2d\xe4\xff\x36\x84\x96\x53\xcb"
- "\x45\xfc\x5f\x0b\xd1\xa3\x41\x15\xaf\x8e\x46\x0f\x50\x13\xaf\x5a"
- "\xbc\xf1\x6e\x21\x3b\xdc\x8f\xad\xe8\x35\xf5\xd9\x56\x26\x6b\xda"
- "\x8c\xbc\x59\xf9\xa6\xdc\xe6\x7d\xc1\xe5\x57\xa6\x87\x6e\xf3\xca"
- "\x1c\x6c\xf3\xaf\x42\xb7\x79\xa5\x35\x7c\x9b\x57\x56\x61\x9b\x7f"
- "\x35\x54\xb7\x56\x36\xc9\x72\x10\x22\x2e\x5f\x69\x0f\xcd\xff\x95"
- "\x1a\xfe\x43\x6e\x51\x09\x73\xf1\xf2\x41\x70\xcf\x81\x1a\x8e\xd6"
- "\xea\x13\x2c\xc9\x48\x08\xd8\x54\x2d\xce\x30\x70\x39\x43\x64\x8f"
- "\xbe\x2d\x08\x29\x7b\xcf\x95\x09\x7d\x7c\xee\x64\xb0\x3e\x3e\x57"
- "\x1b\xac\x8f\x48\xeb\xe0\x72\x47\x83\xf3\x2d\xe5\xdf\x9e\x8d\x5d"
- "\x95\xa2\x91\x81\x77\xba\x60\xd5\x4f\x85\x0c\xac\xf2\x05\xb7\x63"
- "\x95\x39\xb4\x0c\xac\xca\xc5\xfe\xbf\x13\x5a\x06\x56\x15\x85\x97"
- "\x81\x55\x35\x48\xcb\x77\xd4\x72\xbb\xa0\xc4\x3c\x52\x03\x73\x24"
- "\xb4\xcd\x5b\x75\x3c\xf4\xbc\xce\xaa\x4e\x41\xe3\x82\xa4\x60\x1a"
- "\xaf\xf2\x06\xd3\x70\x95\xf9\x5b\xa0\xe1\xe0\x59\x19\x7d\xb6\x02"
- "\xad\xfe\x3b\xba\xa0\x40\xd6\xff\xd5\x67\x82\xdb\x58\x20\xc7\x3f"
- "\xa1\xe6\xb2\x0a\x9a\x90\x96\x8e\xd0\xb4\x2c\xb0\x87\xee\x73\x01"
- "\x8d\x41\x0e\xff\x10\x5d\x2a\x70\x61\xfa\x02\x7a\x77\x40\x73\x58"
- "\xf5\x98\xbe\xc0\x0b\x06\x3e\x5e\x0d\x8e\x4b\xab\x13\x68\x8e\x9c"
- "\xcf\x31\xa3\xfc\xc6\x27\x41\x36\x8d\x41\xd4\xae\xa5\x25\xda\x77"
- "\xa2\xab\xcd\xd4\x6e\x5a\xc7\x42\xdf\xd5\xc4\x17\x43\xb6\xc3\xed"
- "\x05\x45\xde\x09\x5e\x83\xdb\x4a\x7a\x41\xf0\x0a\xac\x98\xeb\x2c"
- "\xd3\xd8\xa6\xd5\xb5\xa1\x79\xbc\xfa\x70\x78\xd9\x59\x7d\x5c\xf0"
- "\x79\x0d\x04\xf3\x79\x75\xa7\xdf\x16\x97\x43\x7d\x45\x19\x18\x96"
- "\x9e\xd0\xbb\xd3\xb0\xf6\xfe\xc5\x45\x27\xad\x5b\x61\xcc\x59\x58"
- "\x63\xe1\xf5\x49\x0c\x7d\x0a\x1d\xb4\x70\x1b\xb0\xe6\x6d\xde\x4e"
- "\x84\x59\xea\x05\x89\xbd\xb8\xea\x24\xe5\x35\xd8\x98\x87\xce\x8d"
- "\x51\xce\x80\x41\x59\xb8\xba\x03\xd6\x6c\x0b\x2a\x8f\xa3\x91\x43"
- "\xe0\x38\x26\xe6\xf7\xd7\x1c\x55\xe6\xe1\xc3\xcd\xef\x23\xcc\x29"
- "\x65\xdd\xaf\x78\x17\xb6\xa6\x3d\xec\xb8\x8c\x6d\xa2\x6f\xc7\xa9"
- "\x4d\x17\xb7\x03\x6b\xd3\x14\xf9\x15\xef\xe6\xd6\x9a\x03\xdf\xb6"
- "\xac\x9d\x8d\x79\x43\xf6\xc9\x0c\xad\x07\x6b\x8b\xd5\x78\xc4\x79"
- "\x31\x6b\xab\x94\xef\x53\xf0\xbe\xf6\x12\xb8\x94\xf6\xd8\x35\xed"
- "\x69\xc7\x78\xc1\x2d\xe3\x38\x75\x09\x1c\x09\x8e\xa6\x07\x60\x82"
- "\x1f\x22\xce\x42\xe1\x1d\x74\xfe\x8c\xa3\xae\x1b\x62\xbc\xa0\x17"
- "\xb1\x9d\x75\x12\x7d\x1b\x42\xb1\xa1\xc3\x3b\xcd\x4e\xef\xe0\xf8"
- "\x1a\x82\xc4\x69\xf6\x13\xc5\x3e\x79\x0f\x36\xeb\x43\x44\xd3\x13"
- "\x96\xf3\xf6\xba\xbd\xac\xfb\x00\xdf\x7b\xcb\x1a\x14\xff\x55\xd1"
- "\xfa\x1f\x5a\x87\xb1\x15\xa6\x21\xfc\x5f\x84\xae\x17\x6a\x7c\x52"
- "\x6b\x98\xf8\xcf\x4a\xf1\xdf\xb4\xd0\x7a\x6e\xbd\x48\xfc\x67\xa5"
- "\xf8\x6f\x9a\x7a\xdc\x14\xef\x79\xac\xa7\xd4\x3e\x29\xed\x8f\x65"
- "\x5a\x41\x7e\xe6\xf3\xf3\xee\xda\x03\x46\x2f\xbd\xd3\x46\xdd\x74"
- "\x74\xb7\x90\xbe\x1a\x4f\xb8\x8e\xd2\x3e\x0c\x86\x38\x2b\xc9\x22"
- "\x8d\x65\xa4\xaf\xcf\x9b\xf8\x58\xe6\x15\xba\x58\x5a\xcc\x5c\xa9"
- "\x9d\x28\x43\x6b\x2d\x0a\xae\x98\x2d\x16\xf1\xdd\x47\x5c\x27\x8c"
- "\x74\x74\xf3\x71\x51\x47\xfe\x2a\xf7\x5b\xbd\x5f\x01\xe1\x6d\x2e"
- "\x39\x01\x84\xd7\x3f\x38\x4e\x72\xdc\x25\xa4\xe3\x84\x93\x70\xb7"
- "\x21\x1c\xe1\x25\x38\xa5\x1f\xe2\xdb\x98\xe7\x9b\xd4\x7d\xe7\xf3"
- "\x2f\x58\x37\xa6\x9f\xa6\x79\x15\x07\x95\x2b\x5d\xc4\x26\x74\xd2"
- "\x3b\xb3\xf3\x76\x56\xba\x8a\x4d\x28\xa4\x39\xb1\x42\x3a\xef\x59"
- "\xf7\xab\xff\x74\x46\x16\x8d\x05\x83\x48\x7b\xbe\xa7\xc5\xe4\x01"
- "\x27\x14\xa6\x05\xdb\x88\x42\x8d\xff\x6b\xe5\x71\x26\xfe\xea\x69"
- "\x7d\xa2\xbc\x7e\x95\xec\x01\x73\x78\xfb\xb8\x7c\x5c\x6c\x4d\x05"
- "\xbd\x93\xa6\x35\x51\x62\xff\xb7\xc2\x62\xcd\xdc\x9b\x6b\x17\x5f"
- "\x57\xf3\x1f\x58\xef\xba\x48\x21\x23\x45\x91\xc1\x3c\x2d\xac\x2d"
- "\xfd\x82\xde\x05\x89\xf1\x60\x89\x57\x6b\x1f\x0b\x8f\x2a\xbe\x9b"
- "\x26\xbd\x5d\x19\x0f\x4c\x6b\x08\xef\x3a\xcd\x38\x53\xc8\xfd\x7f"
- "\xdf\x90\x71\x61\x1d\xd9\xf5\x20\x99\x6c\xe3\x32\xb4\xce\x74\xc2"
- "\x8d\x72\x53\x48\xf2\xbf\x6e\x1f\xc2\x6c\xa3\x6f\x0e\xf1\x79\xe4"
- "\x39\x58\x97\xed\xb3\x81\xe1\x84\x8b\x7f\x53\x65\x44\x19\xe1\x72"
- "\x4b\xe3\xc6\x44\xb1\x1e\xc9\xad\xa9\xa3\x40\xa1\x39\xc1\xb4\x15"
- "\xfe\x07\x88\xf5\x14\x24\x0b\xeb\xcc\xb4\x36\x23\xae\x87\xef\xb5"
- "\x65\x54\x64\xc8\xe1\x3d\x09\x6d\x5e\x6d\xcc\xb3\xee\x48\xe8\xbe"
- "\xaf\xa3\xf1\xff\x55\x27\x14\x25\x07\xf3\x76\x1d\x1f\xff\x95\xf7"
- "\x3a\xc8\x7b\x57\x70\xb9\x22\x7d\x30\xef\x0b\x6b\x29\x3f\xec\x1a"
- "\x9f\xf2\xde\x64\x8c\x67\x96\xba\xf9\x7a\xaf\x22\xd4\xff\xc2\x9c"
- "\x8b\xd9\x41\x66\xe8\x4d\xf6\x23\xac\xbc\x2e\x18\xed\x56\x51\x79"
- "\xd0\x9c\xd1\xb5\x7c\xce\x68\x69\x17\xac\x97\xdf\xfd\xac\x3f\xa1"
- "\x69\x5f\x53\x78\xdf\xa0\x88\xde\xff\x2c\x0d\x6d\x33\x8a\x4e\x85"
- "\xf6\x0d\x8a\xdc\xb2\x5d\x58\xca\xa2\xb4\x72\xb0\x9e\xbe\xa7\xe3"
- "\x65\x94\x18\x96\xe6\x42\xc3\xc7\xb0\xeb\xcd\x83\x31\x6c\x21\xd9"
- "\x83\xf5\x29\x83\x31\xac\x2b\x54\x0c\xeb\x0c\xc1\xcf\xf5\xdb\x43"
- "\xf3\x73\x7d\x5d\xe8\x18\x76\xfd\x11\x31\xce\xaf\xef\x0e\xe6\xf3"
- "\xfa\xe3\x81\x77\xc2\x45\x4d\xdf\x9e\x3f\xbc\x61\xca\x50\x7f\x78"
- "\xc3\x6f\x05\xaf\x36\x7c\x15\xdc\xb6\x0d\xd9\xa1\x6d\xfb\x06\x4b"
- "\x78\x7f\x78\xc3\xf6\xf0\xb6\x7d\x43\xe3\x50\x7f\xd8\x34\x42\x03"
- "\xd3\x32\xe8\x2b\x05\xf9\x66\x1b\x4e\x09\x3a\x6d\x24\x7f\x2e\x42"
- "\x05\xef\x0e\x96\x77\x6c\x33\xe2\x43\xdb\x76\x96\x6c\x9a\x22\x33"
- "\xe1\x68\x42\x7b\x2f\xdd\xb2\x07\xa2\x50\x07\xde\xe9\xb3\x6d\x1c"
- "\x94\x7f\x5a\xc7\x47\xf5\x90\x8d\x0c\xbb\x9e\x4e\x52\xda\x47\xed"
- "\xd8\x58\x72\xb1\xf7\xa5\x11\x89\x90\xfd\xda\x10\x7a\x6c\xe4\xfe"
- "\x1f\xe1\xb8\x38\xcf\x36\xf6\x68\x74\xcc\x2d\xd6\xe1\x16\xff\x4e"
- "\xf0\xad\x58\x13\xcb\x16\x1b\xf8\x37\x7d\x61\xed\x6d\x71\x4a\x68"
- "\x19\x2d\x36\x0f\xda\xdb\x42\x8e\x77\x93\x26\x3f\x4f\xf0\xa0\xf8"
- "\xa8\x3f\x4a\x3d\xd7\x5d\x5c\x1c\x6c\x93\x8a\xf3\x34\xe5\x34\xf1"
- "\x5f\x31\x6f\xcf\xe5\x8d\x37\xc5\xdd\xe1\xc7\x9b\x4d\xeb\x45\xff"
- "\x37\x6b\xde\x2f\x6f\x32\x5c\x7c\xbc\xd9\x14\xa6\xff\x9b\xcc\xc1"
- "\xe3\xcd\x66\xcd\x3b\xfa\x4d\x79\xa1\xc7\x9b\x4d\xc5\x8a\x9d\x11"
- "\x76\x63\xd3\x1f\x2f\xcf\xde\x6c\x3a\x1c\x6c\x6f\x36\xd5\x5e\xca"
- "\xde\x34\x0f\xb1\x37\x9b\xdc\xf1\x75\xa1\xfa\xb2\x39\x26\xb4\xbd"
- "\xd9\x9c\x2c\x78\xb8\xb9\x24\xd8\xde\x6c\x4e\x0f\xe6\xe1\x26\x0d"
- "\x0f\x37\x6b\xde\x7f\x6f\x32\x5c\xa9\x4d\x8a\x88\x88\x90\x22\x74"
- "\x92\x2e\x02\xb3\xb0\x7b\x30\x32\x42\x1f\x11\x89\xd7\x08\xf9\x77"
- "\xa4\x14\x21\xe9\xf1\x8a\x94\x7f\x47\x68\x9e\x47\x52\x59\xbc\xf4"
- "\xf2\x6f\xa4\xe6\x79\xc4\x25\xf2\x47\xca\xf5\x2a\xf5\xeb\x35\xcf"
- "\x91\x97\xc8\x1f\xf1\x77\x96\x87\x21\xcf\xc1\xdf\x41\xce\x5a\xb3"
- "\x61\x59\xc1\xca\x7c\xbe\xae\x7d\xb9\x69\xd9\x33\xcf\x2c\x5f\xb7"
- "\xce\x54\xb4\xd6\xf4\xf0\x43\xf3\xef\x7e\xc0\x24\x96\xc7\x17\x4c"
- "\xbd\x35\x3f\x1a\xe6\x6c\x2c\xa4\x8c\x39\x0b\x66\xe5\x9a\xb2\x1f"
- "\x7e\x28\x38\x53\x41\xc3\x97\xc1\x5f\x0c\x8b\x4a\xf7\xcc\x15\xd7"
- "\x02\x54\xed\xe5\x76\xa7\x93\xbe\x3d\x17\xf1\x44\xd9\x5f\x8e\xd3"
- "\xf7\xcb\xfd\xa5\x8c\xbe\xab\xe8\x80\x92\x2d\xd4\x89\xf1\x8d\x65"
- "\x60\x7d\x9a\xf6\x53\x29\xd9\xc7\x7e\xef\x02\xd3\xa3\x20\x75\xc0"
- "\x4b\x7f\x6d\xc9\x44\x58\x7c\x76\x38\xbd\x60\x2a\x25\xdf\xb6\xac"
- "\x02\xf3\x74\xec\x41\x3f\xa6\xb9\xe5\xef\xf3\x4b\xf7\xf1\xb4\xdf"
- "\x97\x29\x70\xf1\x5d\xb0\x65\x2a\xfb\x3d\xe3\xcf\xb4\x67\x8d\x80"
- "\xdb\x32\x8a\x49\x2f\xb4\x93\x5d\xa8\x1b\x0d\x7a\x5a\x97\xbd\x6f"
- "\x34\x18\xf6\x5d\x4b\x7b\xee\x6e\xd1\x2b\xeb\xb2\x2b\xf0\xd9\x09"
- "\x2f\x75\x53\xdd\x04\xeb\x97\x5e\xe8\x27\xf8\xfa\x60\xf8\xc9\x81"
- "\x75\xdc\x5b\xf4\x12\xc2\x65\x9d\x86\xf8\x78\x1f\xbb\xe0\x89\xfe"
- "\x6b\xee\x84\x4c\xf4\xd3\x90\x15\xc7\xbd\x65\x20\xbe\x8d\xda\xb2"
- "\x65\x93\xef\xff\x27\xee\x7d\xe0\xa2\xae\xd2\xfd\xf1\xf3\x19\x46"
- "\x1c\x08\x98\xd1\xc8\x26\xd3\x1c\x0b\x75\x2a\x4c\x2a\xfb\x7d\xdd"
- "\xfd\x59\x91\xd9\xbd\x76\x5f\x96\xec\x5e\xbb\x5f\x76\xaf\x05\x16"
- "\xb4\x58\xa6\xb3\x48\x8a\x86\x80\xa3\xb9\x68\xfc\xab\xa8\x48\x11"
- "\xa8\xdc\x5d\xdd\xb5\xb2\x8d\x76\x69\xaf\xd5\x94\xd4\xa5\x42\x86"
- "\x5a\xdb\xa5\xae\xd5\x48\x48\xc8\xa2\x4e\x32\xc0\x08\x33\x9f\xf3"
- "\x7b\xde\xe7\x7c\x3e\x33\x03\x81\xad\xf7\xde\xd7\xeb\xe7\xeb\x85"
- "\xf3\xf9\x9c\xcf\xf9\xfb\x9c\xe7\x3c\xe7\x79\x9e\xf3\x9c\xe7\xe1"
- "\x01\xf8\x4c\xb8\xab\xb7\x88\x57\x3c\xc2\x8c\xb4\x9e\x15\x57\x2e"
- "\xee\x52\x6c\xce\xaa\xcb\x66\x46\x1a\xff\xb4\x1e\x56\x58\x65\xbb"
- "\x9b\xf8\xc6\xbb\x98\xf1\xa3\x7c\xdc\x77\xf5\x6d\x2a\xff\x94\x19"
- "\x7f\x3f\x54\x6c\x18\xe2\x56\x56\x90\xc7\xbb\x39\xfc\x70\xfb\xb8"
- "\x1f\xf6\xb6\x2d\x99\x41\xe4\x79\x68\xb0\xc8\xca\x5a\x89\x7d\xd9"
- "\x7c\x8c\xfb\x4b\x3e\x95\xfe\x2a\x8e\xf4\xfa\x70\x7f\xd6\xb4\xf9"
- "\x2e\x16\xd5\x95\xce\x0c\x47\x72\xaa\x99\x7b\x85\x8f\x15\x1c\xe3"
- "\xdd\x2d\x99\x27\x58\x6b\xce\x41\x96\xd1\xce\x0c\x2d\x9d\x5f\x32"
- "\xe1\x4b\xba\x3c\x39\xb5\xb0\x9f\x59\x37\xaf\x42\x5a\x3f\xdb\xb4"
- "\x99\xc5\x6f\xfa\x0c\x72\x50\x3b\xb5\x73\x8a\xfd\xfc\x28\x53\xa8"
- "\x3e\xc3\x63\x5f\x32\xeb\x63\x3f\xc3\x3d\xf3\x54\x56\x53\xc8\xac"
- "\xbc\xc8\x1e\x37\x54\x64\xb7\x0c\x71\xfb\xe4\xc1\x22\x7b\x62\xab"
- "\x83\xf2\x77\xbe\xc5\x12\xda\x59\xe2\xdb\x3d\xed\x86\xea\xb3\x6c"
- "\x1a\xc6\xd4\x45\x63\xab\x39\x4b\xf9\xcb\x15\x97\x4a\x65\x23\xcb"
- "\x04\xe2\x95\x76\x77\xba\x9f\xa9\x54\x57\xf5\x10\x9b\x56\x33\xc4"
- "\xac\x6a\x99\xe2\x42\xb9\x5e\x56\xf4\xa4\xbb\x85\x11\xa6\xf0\xe0"
- "\xf0\xce\xef\xd2\x89\x1e\x4e\x7c\xf5\xfe\x46\xa3\xbb\xa5\x97\x1d"
- "\xf1\x0d\xb1\x56\xf6\x05\x73\xe7\x7f\xeb\xfa\xfd\xfd\x8d\x13\x88"
- "\x9f\x54\x5c\x9b\x60\x03\x2f\x71\xa7\xe8\x08\xfc\xe7\x15\xb3\x8a"
- "\x42\x16\xe7\xd8\xc4\x26\xf6\x50\xba\xa0\x3d\x25\x9d\x99\xee\xc0"
- "\xb7\xae\x4d\xe2\x3e\xf8\xe3\xdd\x85\x47\x58\x54\xab\xaf\x1a\xf7"
- "\x8e\x0d\xc1\x84\xe4\x54\xb7\xaf\x8d\xb9\x1d\x5f\xbb\xd4\xb8\x64"
- "\x7b\xa9\xca\x4c\x2f\x0f\xb4\x19\xdc\xc6\x01\xe6\x4e\xf7\xb1\x77"
- "\xa8\x6d\x5e\x9e\xbc\x94\x68\x56\x6a\xab\xcf\x0f\xff\x3b\x29\xbc"
- "\xcf\x1a\x5b\x91\xcb\x92\x6b\xcf\xb2\xa4\x3d\x67\x99\x9d\x0f\xda"
- "\x0d\xb8\xe3\x0d\x7f\x69\x7b\xe8\x37\x8e\x64\x30\x1a\xbb\xb8\xeb"
- "\xcd\xe3\xb5\xbb\xde\xc3\x76\x56\x37\x14\xbe\xeb\x3d\xd4\x17\xbe"
- "\xeb\x4d\x38\x65\xc2\x7d\x6f\x0f\x2b\xac\x31\xb7\xb0\x89\xb4\x4e"
- "\x5c\xc0\xef\x8a\xd3\xcc\xb8\xf5\x34\x63\xd7\x15\x1b\x20\x67\x1a"
- "\x69\x3d\x6c\x76\xd3\xdc\xe0\xb9\x83\x15\xcf\xa7\xdf\x38\xfa\x23"
- "\x79\xae\x58\xf8\xaa\xe8\xd4\xf0\x98\xd2\x0c\x94\x36\x9d\x7e\xa3"
- "\xe8\xf7\x92\xa2\x1a\xee\xe5\x25\xfd\x0b\x88\x57\x89\x05\x3e\xcb"
- "\xfb\xe5\xfd\x0b\x06\x9d\xc5\x71\x1e\x76\x60\xb5\x8e\xd7\x92\xbe"
- "\x6f\x36\xbd\xd3\x71\x0a\xfe\xde\xbd\xa2\x5f\xc3\x39\x0a\x7c\xbf"
- "\x6b\xe9\xe8\xc3\xa3\x68\x97\xda\x4f\xa7\x5f\xb3\x94\x41\x8b\x7a"
- "\xf5\xb2\x7d\xc3\x39\x68\xf3\x11\x4a\xe7\x7a\x3a\x8d\xdb\x88\x6f"
- "\xaf\x77\x9c\x32\xc8\x3c\x76\x03\xd5\xe9\xd7\xea\xa7\xb5\x5f\x70"
- "\x00\x6b\xbc\xcf\x60\xe6\x87\x33\xe7\xb3\x9a\x67\x79\xcb\x9e\x67"
- "\x79\x93\x5c\x7b\xc5\x07\x3d\xec\x15\x71\xbf\x90\xf6\xf0\xa6\x52"
- "\xfa\x76\x98\xa4\x71\xc0\xa5\x29\x0b\xf6\xa5\xc5\x6d\x1e\x76\x65"
- "\x62\xe4\x18\xb8\x73\xd3\x41\xec\xa3\xaf\x14\x36\x93\x3c\xf9\xd8"
- "\xc1\xd6\xce\x5e\xf6\xfb\xa1\xee\x09\x45\x1f\x32\x83\x3b\xd0\xc1"
- "\xe6\x25\xca\x38\x39\x75\xcf\x72\xcf\xd3\x88\x1f\xfc\x2c\xef\x25"
- "\x7c\x99\xde\xc3\xb6\x4c\xbf\x36\x91\x25\x7e\x4c\x5c\x89\xa4\x4f"
- "\x5b\x6e\x8a\xa0\x4f\x6f\x1d\xf1\x34\x46\xd0\xa6\xc7\x1f\xf9\x3e"
- "\x6d\xda\xb6\x4a\xd2\x26\x5a\xfb\x82\x16\x05\xb5\x7b\xe4\xdb\xee"
- "\x19\x95\xae\xdd\x5f\xd9\xf6\xa3\x51\xe9\x7e\x2d\x7d\xd6\xa8\x74"
- "\xaf\x4c\xdf\x9a\xad\xd3\xbe\x56\xf4\x63\x03\x68\xdf\xd6\x3b\x41"
- "\xfb\x5a\x33\x35\xda\x27\xe8\xcf\xd6\xb9\xfc\x45\xa2\x45\xeb\x41"
- "\x6f\xb6\x4e\x40\xff\xf9\xdb\x4c\xef\x7b\x4c\x17\x73\xbe\x8f\xb4"
- "\xca\x2f\x98\x91\xfe\x34\xba\x57\x70\x29\xe8\x1e\x68\x1e\x68\xdf"
- "\xee\x29\xbc\x7d\xf7\xb3\xfc\x68\x8d\xf0\x5b\xed\x0c\xd1\xbf\x27"
- "\x28\xad\x94\xd2\x9e\xa0\xef\xa0\x83\x80\xc9\x91\xf4\x46\x26\xe2"
- "\xda\x94\xf8\xf2\x55\x43\x0a\x2b\xa7\xf9\x86\xff\xab\x6d\x04\x5f"
- "\xb3\xc2\x1c\xee\x3c\x9f\xb8\x87\x02\x5f\xe9\xad\x79\x9d\x58\x77"
- "\x53\xb6\xaa\xd0\x53\x9c\x60\x85\x3e\xde\x83\xbb\x2a\xe8\x43\xc6"
- "\xc6\x7f\x81\xaf\x6f\xa5\x29\x87\x31\xf8\x25\x00\xcd\xa6\xbe\x18"
- "\x2b\xa9\x4f\xd2\xb7\xb0\xf3\x90\x87\x7d\xad\xe1\xeb\xe3\xb8\xab"
- "\x46\x7b\x0a\x09\xe2\x4e\xa2\x8f\x34\x36\x73\xb0\x98\xc1\x37\x0b"
- "\xe2\x6b\xe2\x77\xb7\x41\xcd\xa9\xd4\xfd\xb3\x38\x89\x36\x50\x1e"
- "\x77\xbb\x9f\xa1\xcf\x1e\xe6\x5c\x7a\xa4\xa0\x91\xca\x6f\xf1\x02"
- "\x36\xdc\x59\xa4\xd7\xa1\x88\x3a\x0c\x42\x77\x9b\x43\xf9\x3c\xa2"
- "\x7c\xec\x77\xe9\x47\x56\x78\x19\xe8\xbe\xbb\x9b\xea\x28\xe8\x90"
- "\x75\x50\x5d\x9c\xf6\x80\x11\xdf\xb4\xfa\xe3\x37\xf3\xef\xa8\xfe"
- "\x43\x98\x2f\xf8\xe9\x82\x9d\x12\xc1\x25\x0e\xbe\x1a\x24\x1f\xea"
- "\xbc\xa3\xee\x0b\xc6\x34\x5f\x63\x84\x6f\xce\xc5\xf0\xe5\x05\xff"
- "\x62\xe7\xf3\x2d\x46\x30\x4a\xd2\xfd\x8b\xa9\x1b\xfe\x77\x7d\x8b"
- "\x51\xdd\xd6\x5a\x03\xa7\x35\xe7\x5c\x0c\xff\x62\xd4\xff\xbd\xc0"
- "\x43\x6d\x4c\x4b\x9e\xf9\x39\x60\xbe\xa5\x14\x69\x15\x4e\xde\xac"
- "\xcf\x3f\xc6\x8b\xb1\xd0\x37\x87\xe4\x0f\x39\xad\xcb\x6d\x4b\xf0"
- "\x9d\xd2\x56\x20\xff\x3c\xa2\x63\x6e\xda\xc3\x5e\xed\x08\x1a\x2a"
- "\x36\x31\xa3\xa4\x69\x8f\xaf\x44\x79\x49\xd3\x1e\xb7\x86\x69\xda"
- "\xe3\xf1\x92\xa6\x49\x18\x4b\x9a\xf6\xb8\x22\x69\xda\xb6\x73\xc2"
- "\x9e\x88\x68\x1a\xbe\x81\xae\xe9\x34\x6d\xcf\x14\xde\x0c\xda\x31"
- "\xe8\xdc\xd6\xad\xd3\xb6\x32\x4a\x03\xed\x40\x1f\x25\x9d\xda\x9a"
- "\xca\xff\xcb\xce\xa4\xbd\x26\x9e\x73\xe0\x3f\xa3\x5b\x7b\xc6\x7e"
- "\xf2\x33\x49\xe3\x1e\x5f\x18\xa6\x71\xdb\x5c\xe1\xb2\xa0\x71\x8f"
- "\xff\x44\xd2\x38\x99\x5e\xf7\x73\xd0\xb8\xad\xa9\x80\x81\x56\xbf"
- "\x01\xe7\x68\x5a\x7e\xc0\x71\x49\x24\x8d\x1b\xb9\xbe\x1e\xaf\xd2"
- "\x69\x1c\x68\x1b\xbd\xef\xf5\xb0\x99\x42\x2f\x8c\x75\x56\x45\x30"
- "\xd7\xd7\x1d\xe6\x00\x63\x46\xfc\x00\xc0\xed\xf6\x53\x6c\xa2\xe6"
- "\xb7\x46\x1b\xf7\xe3\x1e\xfd\x8e\x26\xc1\xff\xfb\x3e\xcd\x58\xd8"
- "\x2f\x19\xcd\xf5\x0c\xf8\x73\x74\x17\x77\x30\x77\x35\x2f\x6e\x0d"
- "\x1c\x63\xea\xd6\x87\x8f\x63\x5e\x49\xde\xf8\x7f\xf1\x0b\xba\xd3"
- "\xc3\xb6\xcf\xcc\xf0\x09\xfd\xfd\xf1\x0a\x03\x7d\xcb\x1f\xf1\xed"
- "\x66\xb4\x01\xbd\x22\x3d\x9b\xc6\xd3\x23\x5c\x40\x5b\x65\xe7\x69"
- "\x6b\xbf\x68\x8b\x78\x29\x92\x7b\x26\x9d\x66\xdb\xc5\x19\x9a\xf0"
- "\xc9\x3c\x76\x5d\x9f\x6b\xdf\xa3\xc6\xf9\x7e\xee\xfc\xe5\x7f\x75"
- "\xd9\xf9\xcb\xff\xea\x47\xa0\x41\xb8\x8f\x17\x74\x8e\xac\x27\x21"
- "\xa0\xe7\xeb\x41\xbe\x95\xda\x39\xc8\xf1\xa2\x99\x42\x2e\xb3\xea"
- "\x75\x02\xef\xca\x29\x9f\xf0\x5f\x4b\x34\x72\xf1\x46\x06\xdf\xc1"
- "\x91\x65\xf7\x84\xe1\xfb\xab\xb4\xf3\xe8\x69\xe2\xdc\x24\x05\x22"
- "\xbe\xfc\x61\xda\x05\x71\x97\xa6\x2a\x74\xf6\xf0\x2b\x1f\xd1\x4b"
- "\x11\xbf\x55\xbb\xb7\xdb\x4b\xf4\x6d\x06\x7c\x6c\x82\xaf\xd4\xee"
- "\x5a\x5c\x4a\x74\x79\x32\xfc\xb0\x40\x5f\x9d\x11\x4c\x33\x1c\x16"
- "\xfe\xf7\x4b\x52\xf4\xb2\xe3\xe9\xf6\xd0\xae\xd6\xa6\xb8\x87\x44"
- "\x65\xb2\xf4\x32\xa8\x1b\x77\x6f\x68\x3f\x9e\x21\xfc\x9b\x05\x7a"
- "\x41\x03\x2f\x25\x1e\x74\xb2\x6c\x27\x93\x69\xed\x54\x7b\xd8\xf6"
- "\xac\xf3\xdd\x73\x1a\x7f\x7c\x25\x47\x2f\x7c\x7c\x4c\x1b\xdf\x0e"
- "\xcb\x0f\x8c\xef\x3c\xed\xee\x58\x7a\xe1\xed\x5a\xf4\x76\x4b\x2e"
- "\x1c\xae\x3b\x0e\xfd\xe3\x70\x4d\xd1\xe0\xba\xc3\xfb\x03\x70\x1d"
- "\xa3\x9d\x9d\x49\xff\x78\x3b\x36\xad\x9d\x9d\xe9\x63\xb5\xc3\xc4"
- "\xbf\x71\xfd\xf5\x98\xf4\x18\x31\x5a\x5c\xe2\x18\xaa\xa7\xde\xc3"
- "\x4a\x42\xb1\x87\x65\xbc\xa4\x9d\x0d\x1e\xb6\xa3\x6a\xe4\x3d\xae"
- "\x9d\x9f\x64\xd4\x63\x5f\xe7\xaa\x87\xed\x3c\x0a\x5d\xdb\xe2\xcd"
- "\xd2\x3f\xa0\x56\x86\xe8\xf9\x8e\x69\xe7\x3b\x4f\x13\xb1\x30\x34"
- "\xdf\x1d\xb8\x9f\xca\xcb\x59\x7d\x5f\x51\x0e\x93\xb1\xa2\x9f\xb8"
- "\x1e\xf7\x90\xe8\x79\x22\x3d\x4b\x3d\x14\xe2\x0b\x48\x9f\x14\xd1"
- "\x94\xb6\x05\xf1\x27\xe4\xfd\xbd\x27\x96\x53\x1f\xf2\x85\xae\x49"
- "\xf8\xd8\x17\xbe\x5d\x7c\x94\xcf\x80\xb2\xd2\xa7\xc7\x13\xf9\x7a"
- "\x1e\x8f\x5e\x5f\xc8\xbf\xc5\x13\x77\xca\xbd\xe5\x89\x25\x7d\xe3"
- "\xc4\x31\x82\x9f\xb3\xbd\x85\x29\x23\xee\x1f\xde\x91\x9b\xbb\x36"
- "\xf7\xc7\xb6\x75\x8f\xdc\x3f\x77\x5d\xde\xca\xbc\x47\xd7\x89\x8b"
- "\xea\xb1\x8c\x12\x6c\x79\xab\x1e\xc9\x5e\xfb\x68\x9e\x7d\xc3\xca"
- "\x55\xf2\x62\xfb\xd5\x94\x31\x32\x13\x1b\x19\x37\x92\x68\x10\xfc"
- "\x1b\xc2\x07\x85\x88\x1d\x09\x5f\x24\xfa\xbd\xdd\x26\xab\x88\xb1"
- "\x45\x34\xab\x74\xa1\x87\xad\xed\xd6\xe7\x01\xfe\x11\x89\x6f\xb1"
- "\xf6\xb0\xd2\x9f\x01\x77\x96\x11\x0b\x5a\x27\xfd\x4a\x08\xdf\x00"
- "\xee\x3c\x4a\x68\x65\x26\xd7\x7a\xe8\x61\x4b\xdb\x54\xe7\x13\x2e"
- "\xe1\xef\x71\x53\x0f\xde\xfb\x75\x3e\x01\xe7\x4a\xf2\x1c\x78\xc6"
- "\xad\x1d\xac\x74\x16\xda\xc5\xba\xab\x7d\x4a\xc6\xea\xe6\xce\x27"
- "\xda\x71\x57\x9b\xde\x4d\xd4\x07\x97\xce\x8b\x52\x7f\xe3\x78\x3c"
- "\xdb\xe7\x61\xa5\xbe\xf7\x2c\x5e\xa6\xdd\xf5\x36\xd5\xca\x7b\xdd"
- "\x46\xca\xdb\x1b\xca\xeb\xa4\xbc\x65\x6c\x1f\xed\x9b\x63\x9e\x65"
- "\xf3\x58\x35\x55\x1d\x4e\x9f\x10\x39\x66\x92\xab\x69\xfe\xca\x7e"
- "\x4d\x63\x4f\xd4\x71\x45\xce\x7d\x59\x99\xf4\xbd\xac\xa6\x52\x5a"
- "\x34\xfd\xa6\xf7\xd1\x37\xf8\x40\xa0\x6f\x99\x38\x23\x6b\x2d\x38"
- "\xe3\x3a\x6c\xed\xa0\x79\x2f\x73\x78\xd8\xfa\x69\xf2\xde\x1a\xe5"
- "\xa7\x36\xdc\xc5\x43\xac\xc9\xc6\x5d\xd0\xd1\x79\x58\xd9\xa1\x26"
- "\x9b\x8f\xf1\xa8\x7f\x3f\x8e\x72\xb4\xae\xac\x45\xf9\xe0\x45\x28"
- "\x5d\xdc\xcf\x2b\x3b\xa8\xc3\x3c\xcf\xc6\x4f\x21\xcf\x78\x7a\x65"
- "\xec\x97\x15\x62\x2f\x39\xcb\x60\x83\xd5\xc9\xca\x8e\x8e\xde\x2f"
- "\x66\x65\xfd\xd8\x96\xb5\x32\xcf\xb6\x7a\xd5\x9a\x6c\x5b\xd6\xaa"
- "\x2c\xdb\x9a\xb5\x79\xb6\x5f\xac\x85\x82\x07\x2a\x9d\x11\x38\xa1"
- "\x62\x7c\x1b\xd2\x27\xe8\x67\xd8\x7d\x1b\x72\xa2\x25\x4e\x57\xcc"
- "\xed\x1b\xcc\x99\x38\x12\x26\x15\x93\xe4\x5e\x59\x9e\x49\x7d\x37"
- "\xca\xfb\x7f\x51\xdd\xf4\x4e\xe3\x2f\x6b\x1e\xb9\x76\x2b\xee\xd5"
- "\xf2\x96\xea\x79\x05\x5e\x5c\xd9\x13\xfa\x56\xa1\xe1\x63\x9d\xbc"
- "\xa7\x2c\xfc\xde\xd4\x09\x1b\xfe\x72\xd7\xb8\x65\xe0\xeb\x6b\x13"
- "\x7b\xe0\x34\x2b\xdf\xcf\x9d\x65\x3e\x0d\x87\x4c\x6a\x89\x9a\xa6"
- "\xe1\x0f\xe1\x44\x05\xfb\x3e\xfe\x54\xac\x00\xfe\xf0\xc1\x74\x93"
- "\xb0\xf7\x08\xf8\x89\xce\xd1\x3b\xed\xcf\x1e\x56\x9e\x85\x71\xf8"
- "\x36\xa4\x9b\x8a\x9e\x17\xfe\xf7\x4e\xe2\xec\x14\xf1\x69\x08\x57"
- "\x62\x64\x1c\xcd\x8a\xe5\xfa\x1c\xe9\xf9\xc7\xc4\x31\x89\x2f\x23"
- "\x71\x4c\xc2\xf3\x65\x81\x63\xc4\x1f\x50\x9f\x0c\xba\x9f\x3f\xec"
- "\x21\xd4\xb7\xa6\xbc\xcd\x9c\x53\x1b\x8d\x11\x78\x70\x7a\x2c\x3c"
- "\xa0\xb9\x7d\x60\xf5\xda\x07\x1e\xa6\x85\x9e\x9b\x9d\xf7\x40\x0e"
- "\x7c\x5b\x80\x0e\x08\xc7\x19\xb3\xb2\x6c\x8f\xae\xcb\x7e\x20\x96"
- "\x8d\x95\x2b\xf4\x31\x72\xfe\x2d\x2a\xe1\x6b\x5f\x5f\xfa\x04\xdc"
- "\xb1\x90\x77\x2a\x9e\xdc\xdc\xb7\x8e\x64\x91\x11\xf3\xfe\xe4\x2f"
- "\xdd\xd6\x14\xe2\xe9\x52\x84\xef\x38\xc0\x4c\xda\x09\x3c\xf9\x06"
- "\xe0\xd0\x67\x50\x68\x3f\xa9\xcc\xd3\x71\x80\x9e\x8b\x69\x4c\x39"
- "\x61\x1b\x8d\x27\x1b\xfa\x0c\x13\x8e\x81\xfe\x48\x7b\x90\x1e\xa2"
- "\x03\xe6\xba\x0e\x56\x29\x6c\xc1\x6a\xc5\x7e\x54\xd9\xa0\x97\x29"
- "\x0f\xdd\x73\x7e\x72\x9a\x8e\x27\x11\x65\x7e\x8d\x34\xe1\xeb\xc8"
- "\x59\xd1\x86\x39\xe7\x72\xee\x8d\x7a\x3e\x82\x2b\xaf\x13\x74\xe4"
- "\x49\xd3\x68\xda\xf0\x9e\x05\x67\xe2\xb2\x3f\x02\xff\x4c\xaa\x5d"
- "\xf8\x4d\x21\x5e\xaf\x83\x3d\x79\x89\x66\x9f\x22\x74\x8a\xee\x7c"
- "\xaa\xcb\x2f\xeb\xa2\xb6\x06\xf4\xb6\x78\x8c\x6a\xaf\x13\x78\xf6"
- "\x64\x4e\x58\x67\xf8\x64\x22\x64\x65\xde\x97\x1e\xed\x61\x95\xcb"
- "\x05\x6e\xd1\x73\xde\x65\xd2\x87\x1b\xf0\x0d\xe3\x04\x5e\x85\x71"
- "\xea\xc9\x7d\xfa\x7c\x63\xcc\x54\x6e\x85\x4d\xf8\xf9\x7d\xd2\xa5"
- "\xc3\x72\x3c\x5f\x33\x62\xdd\x9a\xa8\x2f\x83\x72\xed\x0a\x39\x4f"
- "\xfa\x17\xc2\x3d\x97\x28\xea\x63\x5a\x17\x7b\xea\x13\xd8\xee\x9b"
- "\xfd\x90\x9b\xd4\x34\xf8\x4e\x90\x7b\xd9\x53\x36\xc2\xe1\xc4\xf0"
- "\xdd\xf4\xa7\x88\xff\xab\x4c\x94\x73\xf7\xd4\xc2\x88\xb5\xe7\xd5"
- "\xec\x01\x26\x02\x46\xa0\x67\xee\xfc\x3b\xc4\x7a\x95\xf7\x7e\x9f"
- "\xca\xd1\xcb\x09\x3f\x03\x84\x1b\xb0\x83\x3d\xcd\x9e\x2a\xc1\x1e"
- "\x81\xfe\x79\xd8\x53\x26\xb4\x8f\xf1\x61\xcf\x16\x78\x63\x45\x0c"
- "\x94\xa7\xf6\x8e\xea\x43\x83\x5e\x97\x56\x77\x93\xfe\x0e\xbf\x63"
- "\x1e\x56\x95\x86\x38\x90\x87\x7d\x62\x0c\x17\x35\x91\x54\xd0\xe4"
- "\x13\xf9\x7a\x75\x18\x52\x7a\x31\xbd\xd3\x5c\x94\x0a\x1f\x59\xbc"
- "\x94\xed\x93\xb4\xa8\x0a\x31\x4c\x79\x91\x0d\x7e\x09\x17\x4a\x7a"
- "\x23\x7c\xe9\x88\x6f\x31\xda\x9a\x8d\xc1\x1d\x21\x61\x17\xe3\x0b"
- "\x08\xda\x20\x7d\x2f\xd0\x77\x5a\x23\x83\x88\xe9\x32\x9c\x13\x23"
- "\xfb\xf6\x74\x66\xa8\x0d\xc4\xa7\x14\x67\x90\x4f\xa7\x49\x5f\x26"
- "\x13\x49\xd6\x7b\xba\x58\x9f\xbf\x6d\xcf\x52\x1a\xe2\xa7\x1a\x98"
- "\xa9\x49\xf8\x0a\x7b\xba\x46\xef\xaf\xf6\xcd\x20\xf0\x41\xc0\xe0"
- "\xe9\xd0\xfa\xef\x13\xb1\x3e\x9f\x6e\xd6\xdb\x11\x79\x29\x1f\xf2"
- "\x37\x25\x89\x6f\x9d\xa1\x7a\xa4\x0f\x15\x93\x88\xf7\x5c\x8f\x6f"
- "\x55\x2c\x4c\xab\x9e\x12\xfe\x8a\x85\xdd\x1a\x8d\xc3\xfb\x58\x4e"
- "\x8c\x98\x03\x1b\x43\x7c\x10\xc4\x11\x36\x48\x5c\xac\x9a\xaf\x97"
- "\x89\x52\x00\xc7\xaa\xc5\x7a\xdb\x7a\x1d\xe8\xff\x79\x69\x9e\x1c"
- "\x8b\x11\x6b\x44\x8b\xd9\x29\xe8\x85\xe4\xb5\xaa\x8e\x08\x1c\x14"
- "\xe3\xac\xaa\x8f\x9c\x6b\xc9\xcb\x55\x35\x44\xe0\x03\xfa\x13\x9a"
- "\x7f\x9a\x7b\x9f\xdc\x4b\xaa\xda\x23\xfa\x48\x73\x52\xd5\x1d\x9a"
- "\x87\x9d\x62\x8e\x10\x03\x6a\xcc\x78\x8f\x62\xad\x50\x1e\x95\x8b"
- "\x7e\x62\x3e\x48\x16\x5b\xc0\x9a\xc0\x13\xd2\x5a\x21\x98\x50\x1f"
- "\x9f\x79\x04\x78\x35\xe8\x7c\x26\x75\x24\x6e\x3e\x93\x16\xd1\x5f"
- "\x05\x74\x9d\xd2\xb2\xf4\x3c\x1e\xf6\x8c\xb8\xcb\xa4\xc3\x93\xbe"
- "\x15\x87\xe6\xf1\x06\x91\xb7\x52\xef\xe7\x0f\xec\x19\x1a\xac\x9e"
- "\xf9\x50\x6b\xa3\x59\x6f\x83\x9e\x49\xfe\xa9\x5a\x31\xba\x8e\xfb"
- "\x37\xe6\x65\x4b\xe7\x46\xd8\xe4\x57\x3e\xf0\x70\x76\x56\xb2\x6d"
- "\xe5\x83\x70\x83\xb4\x6e\x75\x76\xb6\x43\x1c\xe2\x8c\xe4\x03\x13"
- "\x45\x7b\x04\x07\xe9\x73\xfa\xb9\x9f\x3c\x2d\xed\x57\xb0\x2e\xb0"
- "\xde\xbd\x58\xef\x87\x0b\xce\x0a\xd9\xc6\x5d\x7c\x03\x73\xfb\x79"
- "\x31\xf8\x7f\x41\xfb\x30\x7e\xab\x4f\xee\x03\x34\x9f\xd8\x23\x07"
- "\x9d\xcf\x3a\x46\xc2\xeb\xd9\xe2\x91\x6b\xf9\xd9\xca\xb1\xe9\xc4"
- "\xb3\xd7\x0b\x3a\x51\x22\xf1\x02\xf4\x09\xb6\xff\xa8\x97\xca\x34"
- "\x8d\xaa\xf3\x68\x98\x46\x3d\xeb\xd1\x69\x94\xdc\x27\x9e\x33\xd2"
- "\x1e\x54\xa9\xb5\x15\x08\xe3\xcd\x73\x05\x12\x6f\x9e\x23\xf9\xef"
- "\xe5\x6d\xba\xac\x23\xf7\x8e\x67\x3c\xe0\x1f\x65\x7c\xed\xe7\x52"
- "\xf4\xfa\xaa\x26\x63\xdf\x78\x2e\xf5\xfb\xfc\xc3\xb3\xbd\xe0\x1f"
- "\x60\x97\x08\x58\x88\x78\xc2\x62\xdd\x3c\xb7\x3a\x82\xfe\x58\xe8"
- "\xbd\x60\xac\xb9\xbe\x1f\xdb\xf1\x5c\x1c\xb7\xcd\x7d\x60\x4d\xde"
- "\xcd\x70\x51\x95\x9d\xef\xc8\x7e\x20\x2f\x3b\x6b\xf4\x39\x9b\x5d"
- "\xe7\xc5\x70\xc6\x5d\x45\xeb\xde\x1b\x03\x78\x3c\x47\xe3\x7f\x3e"
- "\xa0\x8f\x41\xd0\x29\xe2\x1d\x35\x1a\x17\xd7\xc5\x9e\xff\x50\xc6"
- "\x12\x7f\x2e\xa0\xe3\x09\xf2\xdd\x9e\xcf\xd5\x41\x67\x35\x8d\xff"
- "\x59\x93\x26\x6f\x91\x4c\x5b\x6d\xd3\xdf\xc3\xe5\xab\xb3\xc5\xde"
- "\xf7\xac\xb0\xe9\x23\x98\x56\x77\x46\xf0\x5b\x78\x3f\xa4\xbd\x0b"
- "\x3f\x4c\x32\x2e\x7a\xf5\x46\x09\xdf\x6a\x9a\xff\x67\x34\x5a\xf1"
- "\x7c\xb3\xac\x87\xb1\x97\x0a\xbd\x13\xea\x84\x7e\xbf\xba\x52\x6f"
- "\x8f\xca\x1f\x8b\x6c\x13\xfb\xd6\xe8\xfa\x3c\xac\x5a\xdc\x0f\xd9"
- "\x2a\x7c\xc8\x55\xb7\x8c\xd1\xd7\xb4\xc8\x7c\x94\x87\xe4\xdf\x67"
- "\x6a\xf4\x31\xff\x6b\x3e\xd2\x9e\x37\x9e\x67\x8c\xbd\x72\x8c\xcf"
- "\x17\x03\xb7\xd0\x3e\xf0\x5f\xeb\x43\x96\xe6\x97\x04\xbe\xf1\x3c"
- "\xe8\xbf\xf0\x8f\x66\xc5\xba\x7e\x9e\xe4\xdf\x27\x5b\xf4\x71\x60"
- "\x8c\x0d\x85\x5e\xa3\xee\x97\x4a\x96\x7f\xfe\xe6\x91\x7d\x7b\xbe"
- "\x34\xa2\x4c\xb7\xeb\x4a\xe8\xee\x9f\x9f\xc5\x9d\xcf\x95\x00\x0f"
- "\xe1\xaf\xaa\x2a\x84\x87\xcf\x37\x7e\x1f\xef\x9e\x4f\x02\xde\x45"
- "\xe2\xd2\xaa\x1b\x1e\x20\x4c\x5a\x97\x9d\xf7\x63\xc1\xdd\x13\x63"
- "\x07\xb7\x67\x2b\xf3\x56\xad\x5d\xb3\x2e\xd9\xb6\x2e\x6b\xa5\xb6"
- "\xe8\x47\xac\x79\xa7\x90\xfd\x7d\xfa\x3a\x1b\x74\xee\x4a\x0a\xd3"
- "\x96\x5d\x61\xfc\x87\x8d\xd6\x95\xd0\xcd\xee\xda\x28\xd7\xd3\xae"
- "\xa5\x11\x6b\x57\x94\xc7\x1a\xad\x13\x3c\xdb\xae\xc8\xfd\xdf\x47"
- "\x30\x8d\x39\xcd\x76\x5d\xa2\xc1\xd4\x27\x61\xbc\xeb\x5d\x31\x4e"
- "\xe1\x8f\xeb\xf9\xa3\x18\xa7\xf0\xff\x22\xf8\xb3\x5d\xfb\xf4\xf1"
- "\x86\xe5\x86\x5d\x2e\xc1\x47\x69\xfc\xda\x0f\xc9\xf5\x92\x3f\xdd"
- "\xbd\x42\xd3\xbd\xb5\xeb\x32\x9e\xce\x5f\x53\x5f\xb2\x24\xaf\xba"
- "\xfb\x92\x65\x05\x7c\x38\x23\x1f\x7e\xea\x30\x07\xbb\x6f\xd3\x79"
- "\x4b\x61\xbf\xb7\x43\x4d\x19\x74\xee\x5e\x10\x49\x27\x78\xd4\xc3"
- "\xed\x1a\x8f\x98\x22\x65\xd7\x8b\xfe\xd4\x41\x6d\xe1\xec\xe1\x3c"
- "\x7d\xa3\x71\xed\x26\xfa\xf7\x6a\x03\xea\x01\x7f\xcd\xfb\xac\x5a"
- "\xac\xca\x1a\x71\x86\x57\x4b\x75\x7b\x69\x6e\x29\x1f\xcd\xef\x2e"
- "\x81\x1b\x2a\xe1\x28\x6c\x77\x7c\x3a\x8f\xc4\x76\x7f\x86\xbd\x88"
- "\x9e\x09\x6f\x6b\xec\x12\xa7\x6a\xec\xde\x75\x76\xd6\xd7\x67\x35"
- "\xf4\xad\x4b\x37\x42\x5f\x00\x58\xb8\x6b\xfc\x4c\xe2\xcf\x6e\x3f"
- "\xd1\xbc\x7d\x91\xf5\x69\x75\x01\xa6\x46\xf4\x83\xaf\xb3\x1a\x80"
- "\xdf\xc0\x57\xde\x67\x27\x3e\x61\xb7\x8b\xaf\xb3\x1b\xc6\xf1\xbd"
- "\x75\xbe\x71\xc6\x21\xde\x23\x62\x80\x82\x5e\x49\xff\xfe\x7b\x1e"
- "\x7f\x5a\xea\x06\xb4\x76\x6b\x76\x70\xc3\x0b\x62\x5f\x29\x17\xfb"
- "\x0a\x67\xd2\x5f\x7a\xcd\x3e\x61\x47\xeb\x78\x41\xc4\x7c\xd5\xee"
- "\x67\x7b\x9b\x1c\x01\x11\xab\xae\x28\x0f\x7c\x5a\x00\xe7\x46\xe2"
- "\xfe\xf1\xe1\xbc\x00\xfb\x57\x3f\x70\xb2\xa6\x1d\xbe\xe2\x65\x2c"
- "\xf0\x9a\x4e\xdd\x3f\x3c\x62\x48\x22\xfe\x29\x8d\x2b\x2a\x1c\xbf"
- "\x74\xcf\x21\xe8\x6d\xa5\x3c\x6e\x65\xe5\xc4\xd3\xcb\x39\xd8\x33"
- "\x17\xb1\xf8\xa4\xac\xd0\x41\xf3\x12\xf5\x2d\xe5\xbd\x43\xe0\x4f"
- "\x88\x4e\xec\x79\x0b\xb6\xe9\x1e\xad\x8e\x41\xe7\x1e\xda\xff\x77"
- "\xe7\xc8\xb6\xa8\xbe\x41\x7d\x3e\xf7\xcc\xfd\xbe\x7e\x23\x5c\x1f"
- "\x95\x4f\xd6\xf8\x02\x26\x75\x5f\xef\xa1\xae\x1a\x5d\xf7\x15\xe6"
- "\x7d\xf6\x1c\xd4\x75\x5f\xd2\xf7\x74\x4d\x1e\xda\x1f\x4f\x47\xc4"
- "\x8b\x7e\x06\xbc\x37\x81\x87\x1b\x97\x9f\xa0\xfd\x1d\x7d\xd7\xf9"
- "\x42\x39\x3f\xb5\x77\x82\x3f\x44\xcc\x55\x9d\x97\x94\x3c\x40\xed"
- "\x72\xb9\x97\xd5\x2e\xd0\xf7\x32\x2a\xdb\xa0\xd1\x0a\x6d\x9f\xab"
- "\x0d\xc9\xbf\x63\xdb\xe5\xd7\xe6\xe9\x30\xd2\x61\x2e\x61\x54\x7b"
- "\xa4\x2f\xb6\xaf\x3a\x0c\xdb\xda\x23\x02\xd6\xa1\xef\x75\x13\x22"
- "\x60\x8f\x77\xa3\xa4\x9b\xb5\xb4\xff\xd7\xcc\x97\x7b\x8a\x4c\xe3"
- "\x09\xec\xf7\x22\x6e\xbb\x80\xc1\x2a\xa1\x9b\xf1\x16\xd9\xd1\x37"
- "\xaf\x47\x49\xb1\x49\x5a\x56\x4b\xf9\xf7\xf4\xca\x72\xb5\xd5\xe8"
- "\x4b\x64\x7f\xef\x59\xf3\xf0\x9a\xb5\x1b\xd6\x40\xa1\xf6\xe8\x3a"
- "\xdb\x03\x6b\xb3\xb2\x63\xc7\xd0\x87\x58\x11\xd7\xda\x57\x15\xf2"
- "\x3b\xf5\xa2\x09\x76\xf4\x32\x66\xc1\x8b\x31\xb6\xd9\xc0\xaf\xba"
- "\x47\xa0\x2b\x10\xb1\x23\xe0\x63\x55\xea\x0d\xba\x51\x5e\xc2\xfa"
- "\x85\xfe\xbe\x0d\x39\x1a\x8f\xf5\xc2\x6b\x80\xa3\x26\x73\x70\x1a"
- "\xe3\x49\x7d\x1f\x42\xff\x04\x6f\x3e\x6c\x17\x74\x51\x1d\xce\x31"
- "\x0a\x78\x0d\xdb\x69\xbf\xa9\x6b\xf6\x28\xd7\x05\xe4\xb8\xea\x8e"
- "\xea\xf0\xc0\xf8\x07\x11\x6b\x93\xaf\x22\x1c\x7d\xd1\xa4\xd5\x05"
- "\xfa\x89\xba\x6b\x74\x3b\x6e\xf8\x12\x75\xad\x87\x1f\xe1\xfa\xcf"
- "\xd4\x32\xd0\x9b\x7a\xab\x4e\x97\xb0\x17\xa9\x54\xcf\xab\x03\xde"
- "\x09\xb4\x6e\x6e\xa3\xb2\x53\x3a\xd8\x0b\x59\x32\xde\x40\xfd\xe2"
- "\x91\xf1\x06\x5e\xb0\xd1\x5f\x96\xf6\xb7\x2d\xe2\xf9\x7c\x7f\x7a"
- "\x99\xb4\x70\x5a\x7d\xfd\xa8\x3c\xdb\xa8\x4f\x07\x42\xfc\x8a\xf4"
- "\x67\xaa\xf9\x3f\x46\xec\x8c\xfa\x93\xf0\x19\x1a\xc6\x8d\xfa\x78"
- "\x8d\x07\xe9\x06\xec\xb0\xdf\x76\xb2\x17\xa4\x2f\x93\x72\xc2\x0d"
- "\x9e\xce\x30\x26\x3e\xb8\x8a\x70\xe2\x05\x63\x18\x0f\x24\x8c\x28"
- "\xcd\x1a\xe6\x53\xea\x7b\x51\x26\x12\x0e\xd4\xc6\x6d\x52\x36\x7d"
- "\x21\x55\xdf\xb3\xe1\x2f\x55\xc6\x9f\xa8\x3f\xd0\x50\xd8\x4d\x32"
- "\xff\x0b\x2b\x22\xea\x38\xa0\xe9\x22\x8c\xdc\x50\x67\xa9\x13\x32"
- "\xdb\x0b\x05\x61\x9d\x40\xfd\x01\xd0\x5d\x51\x47\x02\x3b\xe8\xf6"
- "\x89\x98\xd1\x8a\x1e\x23\x9e\xf2\xee\xd3\x79\x14\xbd\xae\x26\xa9"
- "\x73\x12\x3e\x2e\x69\x0d\x56\x52\x9e\x96\x90\x3e\x96\xd2\x42\x32"
- "\x60\x3e\xad\x63\xc1\x7b\xbf\xd0\x1b\x96\xf5\xea\x84\x5f\x01\x21"
- "\x07\xca\x7a\x4c\x1e\xf6\x82\x67\xb4\xdc\x46\xfc\x83\x6d\xd5\x9a"
- "\x55\xc4\x3e\xfc\xc2\xb1\xf6\x66\x12\x1d\x7e\xe1\x58\x75\x33\x4c"
- "\xbe\xee\x5a\x7c\xa7\xf8\xa5\xc5\x71\xf3\x18\xfa\x63\xe8\xbd\x45"
- "\x5c\x66\xe8\x8c\x48\xce\x85\xee\x74\x50\xc6\x4a\x9d\xa8\xfd\x9a"
- "\xb4\xdf\x68\xda\xf7\xd2\x69\xad\x94\x21\xf6\x0d\xc1\xbf\x5e\x75"
- "\xca\x38\xaf\xda\x9e\x4d\xb4\xfc\xc5\xc7\xf5\xf3\x32\x61\x03\x0f"
- "\x3f\x86\x7d\x39\x42\x1f\x37\xe8\x7c\x31\xa4\xff\x90\xfa\x45\x79"
- "\xe6\x46\xe9\xed\x7a\xba\xae\x8f\xa5\xb4\x5e\x5d\xf7\x2a\xf3\xbe"
- "\x18\x08\x97\x1d\xa1\xdb\x4e\xd4\xcf\xe3\x06\x9d\x2f\xd9\x74\x98"
- "\xe9\xf5\x14\xd9\xf8\x69\x8d\x4f\x8a\x12\x7c\xb5\xf3\xc5\x44\xe1"
- "\x3b\x14\xbc\xb8\xd0\x33\xbf\xb4\x5c\x6f\x07\x32\x02\xfa\xad\x9d"
- "\xfd\x88\x75\x0f\x1f\xa1\xd2\xc7\xe8\x4b\xa1\xf9\x1f\x05\x73\xfb"
- "\x8d\x57\x0b\xbd\xbc\x7d\x1d\xf1\x67\x57\x8f\xd2\xc3\x01\x87\xe6"
- "\x55\xb1\x18\xa1\x63\x92\x72\xfa\x04\xf0\x08\x34\x86\x17\x68\x3e"
- "\xa3\x40\xcb\xe5\xbe\xf7\xd2\xb1\xd0\x1e\x1f\xc7\xf6\xf1\xd8\xbe"
- "\x2a\xf8\x99\x97\xf7\x16\x5e\x3a\x07\x7c\xf3\x5e\xfa\xf0\x20\x87"
- "\x8d\xf2\x73\xff\x3e\x28\xf5\xf0\x7b\x6f\x0a\xeb\xcc\x5e\x2a\xd1"
- "\x7c\xa2\xc2\xfe\x8d\xe6\x6b\x6f\x72\x88\xe7\xa4\xfc\x82\xf7\xa2"
- "\x3a\x71\x47\x01\xed\x5f\xc0\x39\x8f\x91\x97\xce\x5e\x22\xd7\xe9"
- "\x5e\x97\xa8\x83\x68\xb5\xbc\x07\xb0\x97\xf8\xff\x97\x6a\xe4\xde"
- "\x80\xba\xd3\x59\x5f\xc2\xec\x94\x3e\xe7\x47\xc9\x80\xa1\x2f\xe1"
- "\x16\x87\xf4\x41\xbc\xf7\x5d\x9f\xd3\x48\x73\xba\x97\xe6\xff\xf7"
- "\xdf\x93\x75\xf5\xb6\x86\xd7\xf3\xa6\xc0\x00\x6f\x2c\xff\x82\xe8"
- "\xdc\x83\x8c\x05\xd6\xf3\x83\xc3\x03\xbc\x41\xc4\x20\xbf\x9f\xb1"
- "\xb2\xaf\x18\x0b\x46\xfd\xfb\xc9\x21\xc2\xd5\xbb\xfb\xd5\xd3\x88"
- "\x17\x58\x47\xf9\xee\xf6\x9d\xe1\xb5\x54\xe6\x6e\x07\x3f\x5d\x4b"
- "\xf9\xee\x3a\x75\x9a\xef\xa1\xbc\x77\xe5\x10\xae\xac\xe7\x81\x60"
- "\xd4\xc3\x27\x6d\xff\x06\xda\xfd\xeb\xc5\xde\x1d\x43\x7b\xb9\xd3"
- "\x50\xc1\xb7\x5e\x7b\xcd\xa0\xf3\xd7\x69\xa1\x38\x65\x54\x2f\xf0"
- "\x6a\x59\x3e\x9e\x1f\x3e\x49\x78\x70\x32\x83\xf8\x0e\xc2\xdb\x93"
- "\x94\x0f\xe7\x3f\x02\x96\xde\xa8\x6b\x26\xd3\x9f\x7d\xcc\xfe\x0f"
- "\xf0\xa6\xe0\x7a\xde\x58\x71\x1f\xf5\xbf\x87\xfa\x3f\xc0\x0f\xd2"
- "\x18\x1a\xca\xbb\x18\x43\xff\x83\xa8\x33\xc8\xa2\x32\x36\x2a\x93"
- "\xea\xe8\x7b\x46\xbe\x85\xd5\x51\xde\xfb\x7c\x6c\x52\x2d\xe5\xb9"
- "\xef\x97\x93\x98\xe8\x7f\x2f\xf5\x3b\x66\x68\x6f\x90\xda\x46\xff"
- "\xa9\x7d\xbf\xde\x4f\xbd\x7d\xf4\x57\x5f\xb7\x19\xd0\x11\xc6\xf6"
- "\x1d\x43\xbf\xe5\xb9\xc7\x6f\x56\x7a\xd7\xd1\x3c\x47\x5d\x7b\x8d"
- "\x94\xb1\x7f\xb3\x40\xef\xff\xc8\x73\xb0\xdf\x14\x4b\xfa\xf9\x1b"
- "\x92\x7f\xf6\x6a\x31\x5d\x64\x1a\xc6\xef\xa5\x75\xab\xdd\xfd\x3b"
- "\xa9\xc3\x8c\xbe\x27\x8f\x3e\xe7\x4a\x5b\x9b\x2b\x74\xd4\x2b\x1f"
- "\xc8\x5b\xb5\x7e\x25\x49\xbe\xb1\xcc\x81\x24\x21\x1b\x67\x67\xd9"
- "\xd6\xae\xb1\x3d\xb8\x72\xd5\xea\xb5\xeb\xb3\x73\x93\x85\x3a\x63"
- "\x5d\xf6\x9a\x2c\xa8\xae\x73\x57\xe6\x3a\x62\x47\xc9\x33\x25\x43"
- "\x7b\x5b\x11\x83\xa6\x10\xf8\xbd\xff\x43\x4d\x6f\xeb\xe7\xce\x54"
- "\x21\x17\x4b\x1a\xf3\xdb\x9b\x6c\x9b\x52\xf1\xfd\x2d\xb9\x8f\xef"
- "\x6f\xe6\x3b\xfb\xbe\xe4\x5c\xc4\xd6\x56\x4e\xb3\xfd\x6f\x08\x78"
- "\xf4\x2d\xd1\xeb\x11\xb2\x2b\x70\xd6\xb1\x09\x7c\xd8\x6f\x57\x70"
- "\x7c\x1f\x01\x8b\xfd\x65\xd2\x56\x88\xd2\x87\x97\xb0\xb0\xbd\xfd"
- "\xfe\x0f\xb9\x81\xc6\x4e\xb0\xd4\x64\x86\x4c\xed\xde\xe3\x7f\x76"
- "\xb0\xfd\x90\xa5\x70\x6e\xd3\x26\x78\x72\x71\x3f\x6b\xff\x2a\x92"
- "\x39\x32\xb9\x33\x3a\x0e\xf0\x2a\x97\x32\xbd\xc1\xac\x20\x76\x6e"
- "\x07\xee\x8a\xa6\xe0\x7c\xb7\xce\xa9\xa6\x84\xed\x9b\x7e\x53\x0a"
- "\xf9\x42\x9c\x73\x08\x9a\xf4\xdb\x6e\x7d\xed\x1a\x70\xff\x66\xeb"
- "\xd4\x1f\xcb\xf5\xf7\xdb\x53\xc8\x4f\xf3\xff\x63\x39\x3e\x11\x07"
- "\x9c\x78\x83\xfd\x13\x68\xfc\x5f\xf1\xa2\x25\xda\x99\xe4\xfe\x09"
- "\x6a\xc2\x22\x47\x70\x1d\xc9\x05\x71\x8b\xbc\xf4\x6d\x40\xdd\xd9"
- "\xd7\x15\x24\x9e\x4a\x25\x39\x81\x97\x2f\xea\x0b\xee\xec\xf3\xa8"
- "\x1b\xec\x06\xec\xad\x45\xf9\x04\xdf\xb5\x39\xb1\xfc\x4c\xce\x45"
- "\xc1\x0d\x76\xe2\xbf\xfa\xba\x39\xa7\xb2\xb1\x7d\x7e\x11\xaf\x78"
- "\x67\x5f\x8f\xf6\x3e\x84\x77\x95\xf8\x64\xbe\xd3\x47\xef\x3e\x83"
- "\xca\x23\xf2\x8f\xc8\xeb\x33\xe2\xdd\xac\x08\xbb\xca\x14\x92\x4b"
- "\x16\x62\xec\xfa\x98\x85\x7c\x06\x1d\x51\x68\x6c\xfb\x99\x9e\x0e"
- "\xb9\x41\xf2\xf0\xec\x01\x82\xb1\xf4\x65\x11\xca\xb7\xef\x73\x1d"
- "\x06\x32\x3e\x77\x1f\xd1\xcd\xfd\xcd\x2a\x62\xa3\x6f\xbd\xfc\x1a"
- "\x6e\xf8\x4d\x1d\x68\xd6\xb2\xa0\xa0\x85\x4c\x9e\x3b\xed\x5f\xa0"
- "\xc3\x13\xf7\x08\x40\x4b\x69\xde\xec\x19\x5e\x16\x2b\xe9\xc0\xfe"
- "\xf4\x08\xf9\xb0\x17\x73\xed\x61\xfb\x34\x3f\x5b\xa6\xad\xf2\xfd"
- "\xb7\xfb\xe4\x5a\xd9\xbf\x4d\xcf\x4b\x69\xd2\xdf\x4f\x89\xef\xd0"
- "\x86\x00\x9b\xea\xb8\x85\x77\xd1\x1c\xa5\x6b\xf9\x0e\x84\xd7\x94"
- "\xc4\x37\xfa\x5d\x00\xf9\x1a\xe7\x8f\x78\xae\x1d\xe7\x2e\x6c\x61"
- "\x0d\xe7\xd8\xaf\xb0\x7f\xda\xa6\x32\xd6\xea\x83\x6c\xf5\x3b\xd3"
- "\xe1\x1a\x1f\x13\xf3\x1c\xdb\xf7\x65\x1f\xcf\x61\xc4\x53\x8e\x29"
- "\x4b\xa0\x0c\xe5\x5f\x2c\xe4\x24\x5a\x17\x2a\xad\x0b\x2a\xf3\x15"
- "\xf0\xba\xb0\x1f\xf2\xcb\xef\xb6\x35\x15\x74\xc3\x57\x3f\xe1\xeb"
- "\xef\xb6\x01\x86\x58\x07\xe5\x4e\x71\x0f\x52\xec\x93\xae\xf5\xf3"
- "\x51\xc7\x2f\x13\xfc\xcc\xd8\x4a\x3b\x04\xcd\x8b\xdf\x51\xc8\x26"
- "\xf5\x50\x7e\x63\x1e\x33\x41\x86\x1d\xb9\x87\x8c\xbd\x7f\xf4\x99"
- "\xd4\xca\xbe\x9d\x6a\xce\xa0\xf3\x77\x87\x88\xf6\x8f\xeb\x3f\x71"
- "\xeb\x14\xe2\x6b\x28\x5f\xe5\x54\x9c\x55\xff\xae\xfb\x7c\x79\xf5"
- "\xbb\xb9\xc0\x95\x79\x56\xda\xd7\x62\xd4\x4a\x71\xe6\x1d\xab\xe6"
- "\x48\xbd\xe5\xef\xed\x7a\x79\xe8\x3d\x61\x57\x50\x31\xc4\xac\x15"
- "\x21\x59\xf1\xf7\x69\x72\x8e\x7e\x9f\xa6\xcb\x17\x63\xb5\x93\xb7"
- "\x97\xab\x45\xb3\x98\xc1\x6d\xf3\xb2\xeb\xfc\x2c\xae\x76\x17\x63"
- "\x95\x9b\xb8\xff\xe9\x4d\x84\x47\x04\x63\x6e\xf8\x5d\x33\xec\x2f"
- "\xea\x68\x8f\x2e\x57\x19\x8b\xa2\xbe\x3c\x3d\x40\x6d\x16\xca\x7c"
- "\x5c\xfa\x55\xb3\x52\x3e\x1f\xfd\x26\x12\x1d\x61\x55\x85\xcc\x54"
- "\xa5\x32\x63\x65\x21\x9b\x46\x69\xc4\x57\xfc\xfe\xa8\x2e\x0b\x8c"
- "\x79\x2e\x5c\x4b\xf4\x91\xda\xdd\x52\xc8\x03\xef\x91\x7c\xe7\x54"
- "\xb9\xff\x1f\x81\xbb\x87\x1d\x98\x2f\xc7\x78\x60\xbe\x2e\x1b\xd0"
- "\x73\xea\xc8\x3b\xd6\x07\xec\xa3\xcf\x98\xef\x5f\xbb\x36\x2f\x23"
- "\x37\x1b\x3f\xf6\x59\x8f\x5e\x3d\x9a\x57\x8c\x93\xf1\xa8\x0e\xa4"
- "\x63\x6d\x81\x7f\x92\x77\x95\x0e\x54\x47\xe8\x7b\xa0\x73\xbe\x15"
- "\x7c\x1f\x6c\x4d\xe8\x5b\xc3\xbb\xe2\xea\x00\x53\x8e\x9b\x98\x61"
- "\x74\x7b\x0f\xae\xcc\x5b\xb9\xfa\xc7\xd2\xac\x61\x8c\x76\x9a\x47"
- "\xb6\xf3\x72\xe8\xfc\x57\x93\xcd\x7d\x82\x3e\x96\x2d\xf2\xf0\xf8"
- "\x39\xc5\x72\xaf\x7b\x39\x49\xb7\x1d\x1c\xdb\xa7\x8b\x6f\x79\xb0"
- "\xdc\x00\xdc\x47\x4c\x4f\xc3\xeb\x9b\xda\x0d\x90\x4b\x0a\xe9\x19"
- "\xb6\x5c\x42\xff\xad\xc5\x8a\x7c\xfb\x6c\x3b\xed\xa5\x2f\xe7\xf3"
- "\x1d\x3e\xe2\x11\x5f\x76\x8c\x67\xbf\x15\x79\x1f\x5e\x9e\xdd\xbf"
- "\x5c\x79\x1e\x5b\x2f\x91\x5f\xb7\xd3\x18\x59\xee\x95\x09\x72\xce"
- "\x5e\x26\xfc\xff\x5d\xbd\x8e\xbf\x7a\x9e\x8a\x29\x7a\x0c\xce\x97"
- "\xc7\xf5\x83\xcc\x4b\xd4\x6a\x89\xe3\xaf\xdc\x21\xce\xa8\xa7\xb2"
- "\x5f\x75\xb0\x57\x6e\x33\x5a\x99\x95\x9e\x7f\x4b\xcf\x42\x87\x81"
- "\x6f\x23\xf0\x68\x7a\x6f\xbd\x91\x28\x0e\x51\x1e\x85\xcb\x7f\xc4"
- "\xf8\xc9\x7f\x51\xf4\x67\xe0\x8a\xb8\xb5\x12\x45\x33\x38\x31\xda"
- "\xc8\xcc\x09\x71\xa6\x19\x57\x4c\xb3\xde\x7a\xcb\xc2\x05\x45\x85"
- "\x05\xf9\x5c\x0d\xf8\xcd\x3c\x22\x6e\x6a\xe9\x1c\xfb\x3d\x57\x17"
- "\x4b\xfe\xa1\x6c\xce\x98\xfc\x52\x99\x93\x3b\x20\xd3\xaa\x09\xb7"
- "\xa4\x15\x3d\xca\x0c\xaf\x0e\x79\x0c\x90\xa1\xc0\xc3\xb8\x03\x5f"
- "\x92\x2c\xfe\xca\x27\xef\x50\x1a\xc1\x2b\x9f\x97\xde\x92\x26\xef"
- "\x24\xbd\x3a\x49\x2d\xbf\x25\x2d\x5c\xbf\x91\xa1\x7e\x92\xd3\x0d"
- "\x7b\x0b\xbb\x0d\x6e\xe3\x2d\xcc\x6d\xf3\xb1\x77\xe8\x79\xcc\xb9"
- "\xa2\x36\xa1\x13\x46\x1d\xb4\x07\x97\x14\x9d\xa3\xbd\x39\x5f\x9c"
- "\xcf\x18\x4e\xb3\x57\xef\x3c\x38\x4e\x39\x71\xc6\x1a\x3b\xf4\x6f"
- "\x83\xce\x57\x89\xfe\xdf\x9f\xa4\xc9\x21\x24\x27\xbd\x5a\xa5\xef"
- "\x07\xf4\xfd\x1e\x79\x4e\xf4\xea\x3e\x3d\xcf\xd8\x7a\x1c\xd8\x3a"
- "\x73\x17\xf0\x80\x0f\x74\x77\xc3\xf7\xe2\x38\xb8\xb2\x98\x78\x94"
- "\x47\x40\x9b\xe3\xb7\x58\xa2\x13\xb6\xa4\x3c\xd2\x42\xbc\x51\x7c"
- "\xef\x25\x2c\xc1\x77\x2f\xfa\x0c\x7b\xfb\xb6\x3d\x24\x73\xe2\x7c"
- "\xd8\xac\xa4\xac\x32\x6f\x49\x59\x19\x74\x2e\xbc\x11\x3c\x94\x39"
- "\xff\x4e\xc5\x1c\xb8\x4d\x09\x38\xe7\xdf\x58\x27\x63\x15\xf9\x2a"
- "\xa7\xf0\x76\x2a\x73\x8c\xca\x78\xe8\xaf\x93\xca\xb5\x74\xb1\x83"
- "\xab\xe8\xb7\xd9\xac\xf0\x3a\x33\xcd\xe4\xbc\x62\x11\xbb\x15\xfb"
- "\x73\x0b\x8f\x25\xd9\x6e\x58\xe8\xe0\x26\x84\x75\x70\x07\x4b\x69"
- "\xde\xa2\x97\x3e\xce\xdf\xa1\xba\x9a\x83\x03\x6a\x73\xed\x69\xd0"
- "\x43\x21\x57\x1d\x25\x1a\x70\x34\xb9\x8a\x59\x35\x9b\x69\x43\x4b"
- "\xa0\x19\xfb\x30\x7c\x0e\x34\x51\x9b\x87\xe8\xaf\xd1\xb6\x86\x45"
- "\x9d\x66\x07\xbf\xd4\x6d\xae\x24\x5f\xf7\x87\x7b\x34\x3d\x80\xeb"
- "\x3a\x2a\xbf\xf9\x11\xe0\x44\xb7\x21\x40\xf5\x93\xac\xdd\xec\xce"
- "\x69\x16\x36\x6c\xb8\x93\x80\x3c\xd4\x86\xdd\xed\x6f\x66\x2a\xb7"
- "\x1a\xe8\xbd\x11\xf7\x0b\x38\xe5\x6d\xcd\x6f\x67\xad\x0e\x3f\xed"
- "\x9b\x2d\x24\x7b\xda\x93\xa8\x3f\xa2\x3e\xfa\x7e\xf4\x55\x9a\x5f"
- "\x1b\xc9\x0c\x54\x5f\x1b\x6c\xe2\x70\x77\x9f\xaf\xb3\xcf\xa6\xf2"
- "\x4d\x7c\xd8\x6a\x40\xfd\xa7\xd9\x6b\x27\x78\x9f\xdd\x3e\xaf\x57"
- "\xc6\x32\xed\x60\xaf\x1d\xa2\x7e\xae\x89\xe8\xe7\x1d\xd4\x7f\x23"
- "\xed\x95\x2e\xaa\xf3\x10\x5f\x4f\x6d\x76\x52\x9b\x3e\x2f\xec\x3f"
- "\x93\xf8\x06\xab\x11\x7d\x6e\x45\x7f\xf3\x83\x8c\x6f\xb0\x1b\x2b"
- "\xce\x32\x23\xad\x05\x57\x1d\xfd\xd2\xf8\x1b\x88\xaf\x9f\x36\xe8"
- "\x7c\x2d\xe4\xff\x01\x7c\x24\xbd\x7b\x74\x5c\x2a\xa3\x3c\xd4\xc7"
- "\x46\xea\xd7\xa1\xf8\x5e\x06\xdd\xc2\x04\xc2\xd3\x09\xd4\xee\x44"
- "\x9a\xab\x46\x82\xdd\xbb\x04\xeb\x43\x18\x93\x3a\xa0\x76\xab\x54"
- "\x5f\xc5\x00\xf5\x69\x9d\xd5\x18\xd7\x89\x38\xef\x83\x9c\xe0\x7d"
- "\x74\x59\xfe\x20\x87\xbd\x38\x6c\xaf\xa9\xcc\x1e\x1a\xab\xd1\xc3"
- "\xfe\x50\x00\x39\xbf\x8b\xbd\xb6\x4d\xc6\x62\x7d\xad\x44\x3b\x4b"
- "\x3e\x2a\xf5\xbb\x07\xbf\x04\xec\x31\xae\xb8\x2d\x96\xed\xee\x6e"
- "\x2f\x8b\xeb\xbc\x84\x78\x96\xd7\x58\x8d\x0a\xfe\xf4\x0f\x25\x7a"
- "\x3f\xc7\x59\x63\x7e\x37\xd1\x17\x75\x80\x77\x43\x7e\x91\x76\x66"
- "\x7f\x38\x94\x91\x1f\x95\x4a\xb2\x8a\x81\xfa\x89\x7b\x4c\x53\x88"
- "\x47\xbb\x15\x76\x88\xd4\x3f\xda\xb3\xff\x70\xec\x7c\x31\x90\x09"
- "\x3e\xc4\x17\xbc\x4e\x7d\xf8\x83\xd0\xa7\x22\x46\xac\xd4\xb1\xbe"
- "\x9e\xa8\xfb\xe1\xe0\x03\xbc\x00\x7b\x2f\xb5\x5b\xbc\x6d\xbd\x68"
- "\x03\x71\x71\xbb\xf3\x6c\xfc\x78\x93\xcd\x3b\xae\xaf\x83\x08\xfb"
- "\x39\xaf\x16\x6b\x4f\xd8\x12\x8c\xb4\x9f\x7b\xbd\x20\x42\x5f\x03"
- "\x7b\x82\x62\xd8\x4c\x48\x7f\x49\xaf\x0b\x9b\xc0\x65\xf9\xd2\x2f"
- "\x8c\xdb\xdf\xab\xc9\x1d\xaf\x7f\x28\xe2\x6f\x81\xa7\x15\x36\x77"
- "\x3d\x9a\x9d\xdc\xeb\x2b\xd1\x46\xd3\xa8\x18\xdf\xd9\x6b\x56\xde"
- "\xbf\x3a\x5b\xaa\x30\xe7\x3e\x94\xb7\xf2\x17\x23\x65\x23\xa3\x90"
- "\xc5\x9d\xaf\x1f\x95\x67\x02\x0d\x71\x11\x32\x82\x31\xa4\xd3\x35"
- "\xb0\x06\xa9\xd7\x6d\x48\x1e\x4b\xaf\x7b\xe7\x2f\xd6\xac\xcd\x15"
- "\x6d\x08\x93\xc2\x6c\x79\x2b\x30\x96\xdd\xb3\xf8\xce\xc5\x73\xd7"
- "\x65\xe7\x89\xa0\x3a\x52\x89\xba\x32\x2b\x2b\x57\x33\x38\x5c\x85"
- "\x52\xf8\xf2\xe0\x06\x51\xd4\xf1\x70\x9e\x34\x55\x5c\xb7\x7a\xe5"
- "\xfa\x6c\xad\x8a\xc8\xbe\x4e\x03\xbd\x6c\xaa\x11\xba\xaa\x58\x69"
- "\x1f\xd1\x70\x28\xe2\x3c\x35\x52\x7f\x73\x19\x7d\x0b\x9d\xff\x3b"
- "\xae\x04\xae\xbc\xb1\xaa\xb5\x5e\xf8\x32\x31\x1e\x7e\x11\xf0\x7d"
- "\xe3\x0e\xc4\x81\xa0\xbd\xad\x11\x71\x8b\x35\xdb\x03\xa2\xd7\x6f"
- "\xcc\x24\x59\xab\x91\xe0\x9b\xbf\x2c\xa8\x72\xa2\xa9\x24\xa7\xbf"
- "\x99\xa8\xe9\x44\x4c\xaa\xa1\x61\x01\xec\xc6\x6a\x85\xfe\xee\x8d"
- "\x85\x61\xfd\xdd\x9b\xb0\xe9\x31\xd1\x7c\x77\xa2\x6f\xe8\x27\x7d"
- "\x5f\x11\x61\xb3\xd3\xe9\x21\x30\xa2\x1e\xd8\x96\x88\x18\x2d\xc4"
- "\x13\x6b\xfe\x20\x0c\xad\x2f\x62\x1f\xfa\x13\x62\x3a\xf5\xaa\x25"
- "\xea\x41\xb9\x66\xfe\xb8\x87\xef\x1c\xfa\xbf\xf3\x7c\x2c\x51\xd2"
- "\x8c\x37\x20\x8b\x5f\x4c\x7d\x6c\xa2\xf4\x74\xa2\x3b\x13\xc0\x1b"
- "\xc9\x33\xaa\x37\x4e\x6a\xfa\x3c\xc0\x67\x42\x44\x1f\x3c\x61\x9d"
- "\xdf\x9b\x89\xde\x18\xf5\xe0\x36\x69\x93\x23\xec\x0f\xa4\x0d\xc8"
- "\x1f\x8d\x21\x1d\x17\xb5\xad\x9d\xb9\x27\x76\x51\x7e\x82\xc5\x41"
- "\xed\x1c\x1c\x63\x4f\xc3\xb8\xa5\x2d\xe5\x1f\x47\xc8\x3f\x32\x26"
- "\xc6\xd0\xff\x55\xa5\xbd\x2c\xfa\x9e\x2d\xf8\x28\xe8\x17\x87\x00"
- "\xef\x3f\x6e\xa4\xef\xb4\xd7\xfd\xd1\xe1\x61\xaf\x87\xfa\x83\x3e"
- "\xe7\xe5\x13\x33\x40\xe5\xb0\xf7\x51\x9f\x26\x52\x9e\xaa\x70\x9f"
- "\xff\x28\xce\x46\x21\x53\x4a\x1e\xe4\x4f\x26\xa1\xe7\x2d\x51\x5d"
- "\x11\xf3\x66\x3c\xcd\xfe\x78\x92\xfa\xea\xda\x2a\x6d\x5f\x26\xe8"
- "\x36\x25\x54\xd7\x88\xf1\x87\x75\xb0\x0d\x6b\xa4\x0e\xf6\x4f\x2c"
- "\x3c\x87\x7f\x6c\x02\xde\xc3\x6e\x48\xb7\x19\xc2\x7c\xca\x78\x21"
- "\x7f\xb2\xeb\xf5\xa8\xb1\x6a\x3d\xe4\xe4\x72\x79\xfe\x4d\xf3\xf2"
- "\xa7\x55\x51\xca\x71\xc1\x4b\xcd\xf3\xb3\x7a\x4a\x8b\xa6\xb4\x7b"
- "\x91\x0f\x6d\x0a\x5d\x25\xc1\x06\x63\x51\x49\xc6\x8a\xb2\x46\x2f"
- "\xa3\xfa\x08\xaf\x0e\x1c\x0d\xe3\xc6\x9f\x52\x05\xbd\xd4\x60\xcd"
- "\x9d\x0d\x5b\xc3\xb2\xfb\x9f\xf6\x86\xf4\x6e\x54\x4f\x78\xcf\xf8"
- "\xd3\x87\x80\x71\x45\x48\x07\xd1\x18\x10\xfd\x90\xe7\xa9\xef\x75"
- "\xb1\xc6\x53\x9c\xf8\x0b\xec\xb5\x90\x0f\x31\xf7\x82\xdf\x13\xfa"
- "\xb3\xc6\x5f\xd7\xca\x33\x8b\x67\xe9\x79\xbf\x6a\x18\x0b\x77\x1a"
- "\xa7\x45\xda\xf7\x4a\xf8\x37\x66\xa9\xa8\x93\xc6\x8f\xba\x68\xff"
- "\x51\x74\xbd\xa6\x56\xef\x3d\x54\xe7\x73\x5d\x1a\xac\xc5\x59\xde"
- "\x4e\x0d\x0e\x98\x63\x01\xf3\xc6\x3c\xc2\x01\x11\x33\xad\xa8\x9e"
- "\x9f\x5a\x4b\x75\xc8\xd8\xba\x8d\x55\x1c\xb0\xd5\xf2\x7b\x21\x7f"
- "\x53\xdf\xe5\x9d\x48\xc2\x45\x92\x4d\xd1\x4f\x75\xa7\xba\x0f\x7d"
- "\xc7\x39\x5e\x58\xa7\xd2\xf8\x21\xca\x7a\x1f\x93\x65\x2a\xe4\x39"
- "\x23\xcd\x4d\xa3\xc2\x37\xe4\x30\xed\x7c\x8b\xf0\xfc\x8f\x6d\xc0"
- "\x7b\xd4\xe3\x13\x32\x73\xa3\x47\x25\xb8\xd0\x9c\x4c\x1e\x74\xbe"
- "\x19\xa7\xcf\x09\xcd\x47\xf3\x79\xf8\x6d\x9a\x93\x37\x17\xe8\xbe"
- "\x95\xb0\x37\xd1\x1a\x2e\x96\xbc\xe4\x9b\xe7\xcc\x5b\x6e\xe5\xe6"
- "\xc0\x8d\x37\x82\x37\xaa\x33\x08\x5d\xa8\x6e\xbf\x3a\x83\xe0\x74"
- "\x46\xbf\x0b\xa0\x6e\xfd\xf7\x76\xd8\xfe\xba\xfd\xd2\xf6\x17\xe9"
- "\x77\xfb\xb8\xda\xea\x0b\xe2\x2e\x4c\x3b\xb5\x51\xa3\xcb\x59\xa0"
- "\x6f\x51\x5b\x14\x82\xdd\x9b\xb8\xff\x78\x48\xa3\x6b\x13\x7b\xd8"
- "\x9b\x9f\x6b\xf5\x47\xf6\x61\xb9\x3c\x53\x7c\xd3\x2f\x79\xff\x37"
- "\x41\x7b\xaa\xa4\xbc\xf6\xa6\x57\xef\x37\x7d\x3f\x34\x7a\x8c\x69"
- "\xb7\xdf\x99\x6d\x5b\x0d\x12\x9d\x72\x43\xbe\xcd\x3e\x2b\x6b\x9e"
- "\x30\x16\xb7\xfd\xd3\xed\x3f\xb6\xa5\xdd\x3c\x2b\x3f\x27\xf9\x6e"
- "\xf9\x73\x7b\xda\x52\xfc\x8e\xb2\x1d\xb0\x0d\x3a\xff\x9c\x36\x52"
- "\x1e\x7c\x47\xeb\xc3\x9f\x73\x3c\xca\x3f\xa5\x0b\x1c\x36\xf9\x2a"
- "\x79\x49\x47\x1b\xed\xa9\xbd\xe0\x93\x97\x05\xbf\xe6\x7c\x47\x47"
- "\x1b\x8f\xf1\x55\x7a\xe3\xe7\xd8\xbd\xf1\xb3\xbd\xde\x98\xa1\x82"
- "\x0a\xa2\x81\xe6\x2d\xdc\x6f\x0e\x4c\x94\xb4\x92\xde\x89\x27\xe9"
- "\x26\xbe\x07\x73\xc9\xee\xb8\xba\x88\x2f\x0b\x72\x37\xf1\x3f\x04"
- "\x97\x3f\x37\xeb\xfb\xb8\xd0\x63\x96\xf8\x2a\x97\xe5\xf3\x61\xe0"
- "\x0e\xf1\x07\xb8\x4f\x5b\x09\x5d\x26\xe5\xa3\xf1\xbf\x9a\x22\x61"
- "\xf1\x67\xc0\xc0\xa6\xc1\x37\x6d\xd0\xf9\x1f\x34\xff\xcb\x84\xee"
- "\x59\x75\x5a\xc5\x5e\xa1\x6e\xbd\xe6\xa7\xbc\x6c\xb6\x57\xaf\x93"
- "\xea\x8a\xd3\xe2\x31\x8b\xfa\x58\x84\x6f\x82\xf3\xfd\xa9\x3b\xfb"
- "\xf7\x42\x6f\x85\x7b\xc1\xe6\x7c\x05\xf1\xb7\xd2\x43\xba\x3a\xfa"
- "\x96\xb0\xc5\x02\xfd\x5d\x7a\x82\x4f\x29\x46\x9e\xb0\x4e\x4b\xf5"
- "\x54\x18\x54\x3f\xf1\x13\x16\xe0\x87\xe0\x55\x85\x3d\xc5\x7f\x34"
- "\x86\xce\xe7\x46\xcc\xfd\x7f\x08\x7c\x38\xeb\x34\x12\x6e\xff\x39"
- "\xf5\xca\x44\xc9\x3b\xa9\x4e\x85\x49\x5f\x11\xff\xf1\xb2\x58\x97"
- "\x1a\x3e\x12\x7c\xbd\x38\x3b\x37\x07\xb8\x17\xf7\x54\xd4\x28\xc2"
- "\x49\xd6\xc3\xdc\x05\x83\xc5\xb8\xaf\x1e\xc2\x4b\x07\xe1\xa5\x83"
- "\xf0\x12\x76\x0e\xd4\xbe\x37\xea\x9a\x4c\x5a\xb3\x4a\x0f\xfb\x8f"
- "\x02\xf4\x1f\xb0\x21\xfe\x3d\x4e\x25\x58\x09\x7b\x56\xc0\x27\x76"
- "\x30\x09\xf7\x0c\x31\x56\x73\x80\xc6\x1c\x39\x2e\x83\xea\x29\x77"
- "\xd2\xb8\x0c\x34\xae\xfc\x53\x42\x17\x84\xfb\x9f\x44\x4b\xa6\x84"
- "\x63\xb8\x1c\xaa\x89\x1c\xa3\x8a\xb8\x4f\x62\x0c\x87\xde\x1a\x6b"
- "\x8c\xdc\x80\x31\x02\x06\x87\x9e\xd4\xce\x39\x45\x3f\x41\xb7\x7a"
- "\xd9\xa1\xb4\x84\x2d\xb8\x77\xe9\xab\x24\xbe\xf7\x76\xcc\x61\xad"
- "\x93\x57\xa2\x9f\x63\xcd\x17\xea\x93\x75\xbd\xb5\xc2\xbc\xa5\x38"
- "\x73\xd0\xf9\x96\x7d\x6c\x78\xbf\x75\xe7\xf9\xe1\xfd\xd6\x74\x94"
- "\x47\x3f\x70\x87\xd4\x0c\x07\x63\x84\xdf\xc4\x57\x94\x8c\xd5\x6e"
- "\xc2\x96\x7a\xf4\x6b\xcc\x6f\x84\xfb\xbd\x15\xb9\x23\xd7\x84\x5a"
- "\xeb\x67\x80\x1f\xf4\x45\x52\xaf\xff\x56\x5b\xe8\xfc\xa1\xc4\xd7"
- "\x68\x56\x6c\x51\x58\x63\x82\x27\xa6\xf1\x8e\x55\xaf\x59\xa9\x84"
- "\x8f\xc2\xdb\x89\x56\x8d\xf9\x9d\xd6\x81\x8d\x6f\xbd\xf6\x4a\xaa"
- "\xaf\x20\x61\x8b\xc2\xbd\x51\xd7\xc6\x26\xf8\x02\x49\x80\x2b\xf5"
- "\x35\x9f\xd6\xf8\x09\xb1\x77\x0b\x5d\xc9\xdb\xb4\xfe\x3f\x16\x71"
- "\x77\xbc\x31\xbe\x02\x69\x17\xf4\x76\x96\x87\xfd\x25\x22\x16\xea"
- "\xdb\x79\x1e\x65\x4e\x89\x5c\xab\x97\xef\xa2\x3d\x6d\xbe\xea\x34"
- "\x73\xdb\x26\x33\xa7\xba\xe2\x55\x6e\x37\xd0\xbe\x35\x3f\x8c\x3b"
- "\xf2\x9e\xaa\x8e\x3b\x54\xbe\x61\x6c\xbc\x78\xfb\xb3\xf3\xe3\xc5"
- "\xdb\xfb\x35\x3d\x6f\xa6\xb4\xbd\x7d\x3b\xa0\xcb\x1c\x7c\xeb\xe5"
- "\xbb\x6c\x85\x68\xff\xed\x4a\xd9\x36\xc1\x24\x90\x0a\x3a\xb3\x94"
- "\xe0\x56\x3c\xe8\x7c\xc7\xae\xd3\x06\xe0\x90\x39\x08\x79\x88\x09"
- "\x3c\xa7\x6f\x8b\x89\xf6\x68\x67\x84\xc3\x49\xe0\x55\x55\xe7\x9f"
- "\x8d\xb4\x7f\xed\xc6\xdd\x13\x5f\x8c\x8f\xe6\xe5\x1d\xa2\x7f\xc6"
- "\x25\x1a\xfd\xf3\x51\x1d\xfe\x2a\xe9\x87\xc2\x24\x62\x06\xd2\x3a"
- "\x47\x9c\x40\xac\x75\x4a\x4b\xa4\x7e\x23\x66\x20\xc9\x08\xef\xd4"
- "\xeb\x7b\xbf\xea\x4c\x05\xbc\x85\xce\xd8\x00\x7e\x98\x60\xf7\x8c"
- "\x41\xdd\x37\x30\xcf\xca\x30\xe6\x81\xad\x53\xf7\xfd\xea\x3a\x66"
- "\xfc\xc0\x7a\x3f\x73\xdc\xc0\x12\xb7\xfc\x3f\x46\xf6\xf7\x05\xcc"
- "\x00\x38\x78\xd8\x3b\x07\x25\xec\xde\xf1\xea\xf3\xe3\x61\x6f\xa7"
- "\x63\x3e\x70\x2e\xb3\x2c\xc0\xfb\xe4\xb9\x94\xcb\x42\x7b\xa0\x55"
- "\x7e\xff\xf3\x8a\x31\xf6\x87\x3b\x6c\xab\xd6\xd9\xb2\xd6\x6e\x58"
- "\x33\x73\x66\xec\x18\xb2\x84\x2b\x49\xca\x12\xae\xf4\x48\x59\x82"
- "\xde\x73\xa8\xbe\x05\xa3\x65\x87\xa5\x19\x9a\x7b\x91\x8c\x14\x16"
- "\x7e\xbe\x9e\x2d\xbd\x3e\xe2\xf5\x46\xb6\xf4\x86\x1b\x33\x7e\x9a"
- "\xbd\x32\x6b\x63\x44\xea\x4d\x91\x7a\xc4\x8a\x5d\xd4\x76\xd4\xd4"
- "\x45\x44\x3f\x94\xbb\x1f\xc3\xbe\xf3\xee\x5d\x85\x01\xfe\x2d\xe1"
- "\xee\x02\xf8\xf4\x3a\x92\x17\x60\x47\x88\xbe\xf1\xcb\x41\xd7\x27"
- "\x4a\xbf\xb6\x41\x06\x3d\x9d\x99\xc6\xee\x25\x99\xae\x5f\xde\xbd"
- "\x78\xf7\x97\xad\xd5\x7e\xa2\x13\x43\xdb\x24\xbf\xf3\x6e\x32\xa5"
- "\x4f\xa2\xdf\x7b\xe4\x99\xce\xbb\x3f\x23\x79\x39\x55\xf8\x30\x59"
- "\x0f\x1f\x26\xef\x0a\xdb\xb0\xeb\x7c\xc5\x4c\xfa\xd2\x73\x75\xc2"
- "\xc7\xbd\x87\xbd\x5b\x05\xfe\x02\x79\xa9\xcc\x5c\xdb\x43\x2c\x05"
- "\xbf\xe0\x87\xe9\x5b\x32\xdf\x31\xb4\x8d\xef\x4e\x87\x4d\x4d\x12"
- "\xa5\x3f\x09\xbe\x2d\xca\x6a\x8a\x1b\x74\xbe\x5b\xa9\xf3\x20\xbe"
- "\x71\xee\x7e\x01\xce\xfa\x3e\x98\x40\xf4\x3b\xc1\x67\xe6\x19\xf0"
- "\x09\xa4\xb0\x24\xec\x0f\xe6\xfc\x34\x71\xb7\x10\xfb\x22\x68\x42"
- "\xad\xa0\xa5\xef\x76\xeb\x74\xa1\x5c\xca\xa3\xb1\x28\x4f\xfb\xe7"
- "\x19\xb9\x7f\xbe\x67\xd2\xd7\x02\x3d\x27\xea\xb8\x3a\xe2\x7e\xd9"
- "\x9a\xbc\xec\xdc\xec\x2c\xdb\xac\x75\xb1\x2c\x22\x02\x6b\x4e\xf6"
- "\x1a\x5b\x6e\xf6\x2f\x1f\xcd\x5e\x27\x04\x3d\x7c\x1d\x79\xfe\x46"
- "\x34\x28\x1c\x0f\x7b\x2a\x60\xfc\xde\x46\xc8\xc2\xe6\x2d\x33\xc5"
- "\x59\x8a\xe0\x8d\xe2\x6e\xc9\x51\xcb\xe3\x53\xa5\xde\xb2\x87\xe0"
- "\x7a\x58\xfa\xe3\x2a\x19\xca\x03\x1f\xd7\xc5\x0e\x97\x49\x5b\x99"
- "\xf7\xde\xd7\x60\x55\x45\xfd\x3c\x14\xe6\xd7\x9a\x84\xdf\x21\x69"
- "\xb3\xfa\xde\x51\x0f\x73\x35\x84\x79\x90\xa6\x9b\x41\x07\x05\x3d"
- "\xfc\x01\x5a\xa8\xf1\xce\xd4\xce\xe1\x2d\x7c\x3d\xef\xac\x18\x62"
- "\x42\x1f\x88\xd8\x08\x92\xbe\x1e\x4e\xd1\xe1\x48\xfc\x4b\x27\xf4"
- "\x0e\xba\x7c\xb4\x2c\x70\x8e\x17\x6e\x64\x06\xe8\x1e\x88\x86\x94"
- "\xbc\x92\xeb\x35\x70\xe7\x7b\x36\xe2\x65\xf2\x90\xa7\x56\xb3\xdd"
- "\xe4\x31\x43\x0e\xaa\x27\x3f\x2c\x77\x34\x2d\x14\x7c\xfc\x10\xf0"
- "\xe6\xf0\xb4\x0c\xec\x11\x92\x76\x5f\xf4\x43\xfd\xe5\xb1\xf2\x1c"
- "\x45\xd2\xb7\xc3\x8d\xda\x18\x7a\x41\xb3\x34\xdb\x5f\x83\xc4\xeb"
- "\xa6\x85\x84\x73\x79\x98\x0b\xa2\xf3\x25\x3a\xbc\x30\x5e\xf4\x1d"
- "\x7a\x6b\xa2\xc3\x25\xaf\x6e\xf2\x1b\x64\xec\xd2\xf7\x92\xa5\x7c"
- "\xd4\x64\x8b\x3c\x37\x94\xb2\x50\xd3\xfc\xb0\x9f\x90\xf7\xaa\x46"
- "\xd3\x88\xb5\x6b\x70\x9d\xec\xe1\x8c\x0d\x2b\x1f\xce\xce\x78\xd4"
- "\x91\x6c\x7b\x74\x8d\x38\xb6\x15\x6a\x80\xbc\x47\x1f\x78\xd8\x06"
- "\x2a\x92\xb1\x78\xe9\xd2\x8c\x45\xf7\xfc\xeb\xcf\x62\xd9\xa2\x95"
- "\x94\x96\xb7\xd6\xb6\x34\x25\x59\x7e\xfa\xe9\x1d\xb7\xff\x5b\xc6"
- "\xed\xcb\xee\xb9\x7b\xf9\x18\x36\xe9\x71\x84\x13\x0e\x9a\xa3\x09"
- "\x1d\xec\x83\x52\x69\x83\xd4\xd4\x3c\xd2\x06\xa9\xc9\x43\x7f\x44"
- "\x9d\xdf\xb7\x32\xf6\x01\xa5\x7e\x50\x4a\x7f\xc5\x12\x6f\x62\x2c"
- "\xd4\x7f\x5f\x18\x6f\x3e\x10\xe7\x6d\xd0\x1d\x48\xdd\xeb\xfb\x44"
- "\xff\xde\x5b\x1a\xf9\x2d\x4c\x0b\xde\x0f\x0a\x7a\xa9\xe1\x05\xf0"
- "\x21\x23\x60\x12\xb8\x21\xf9\x95\xf7\x97\xea\xb8\x51\x21\xcf\x87"
- "\x18\x74\x66\xf8\x4e\xf8\xbd\x1c\xfa\x65\xc2\x05\x07\xce\xd6\x91"
- "\xce\xe3\x6f\x59\xae\xd5\xbb\x0d\xfa\x66\xf0\xb3\xda\x99\x58\x42"
- "\x0f\x7b\xff\x5d\xee\x6c\x5a\x22\x65\xc1\xa6\x8d\x02\x6f\xb6\x4e"
- "\x5d\x24\xce\x20\xc5\x7d\xa2\xf7\x1b\xc3\xf8\xf3\x41\x29\xe6\x06"
- "\x74\x41\xd2\xde\xf7\x8f\x8e\xd2\xe3\x44\x51\x5a\xb7\xee\x67\x3e"
- "\x6f\x26\x33\x18\x67\x56\xb2\x2a\x03\x2f\xf6\xb0\xf7\xab\xa5\x1d"
- "\xea\x07\x26\x9d\x7f\xa6\xe7\x44\x0f\xe3\xed\xa3\xf5\x5f\xe5\x11"
- "\xfa\xaf\x42\x07\x3f\xde\xea\xf0\x82\x47\x76\xb9\xbd\xc2\xbf\xe9"
- "\xad\xad\x0e\x1f\x6c\x4b\x62\xbb\xd8\x07\xf7\x16\x05\xf9\x10\x3d"
- "\x4f\xa5\xb1\x89\x3d\x64\x9e\xd4\x29\x90\x3c\xf6\x41\x99\x94\x4d"
- "\x64\x3a\xe0\x4e\xcf\xe8\xa3\x11\xf3\x43\x78\xd9\x4d\x73\xb4\x6c"
- "\x2c\xba\x97\xb0\xc5\xa0\xf9\x91\xfa\xe0\x38\x64\x54\xc0\xea\x69"
- "\x83\x9a\xf3\xb4\x93\xfe\xe8\x17\xb4\x2f\xcc\x5f\x72\xbf\x84\xed"
- "\x07\x9e\xa6\xfc\x5e\xec\x9b\xfe\xf1\x68\x29\xcd\xe7\x31\x7d\x3e"
- "\x97\x05\xbd\xb7\x62\xbe\x06\x9d\xff\x69\xd5\xe7\xb2\x6f\x76\x45"
- "\x65\xd4\x16\x66\x3b\x5c\x73\x03\xd2\x69\xfd\x7f\x50\x2d\x6c\x7b"
- "\xb0\xbe\x46\x95\x25\x3a\x9c\xaa\x95\x4f\xd7\xcb\x8f\xf6\x4f\x2c"
- "\x2e\xe8\x42\xc9\xf5\x63\x69\xe3\xa3\x85\x93\x1e\x61\xe3\x83\x33"
- "\xc0\x26\x89\x93\xba\x0e\xce\x22\xc7\xd3\xfc\x13\x75\x27\xc9\xdf"
- "\x3b\xbf\x7b\x48\xd3\x03\xd0\xda\xfe\xcf\xfe\xeb\x18\x5b\xed\xdb"
- "\x90\x1e\xd2\xa1\x40\xf7\x01\x9f\x83\xd4\x0f\x4f\x84\x8e\x2c\x64"
- "\xa3\xe9\x61\xcd\x69\xb0\x19\xc3\x9d\x65\xd4\x83\x75\x25\xf5\x36"
- "\xcd\x16\x37\x51\x5e\xaa\x6f\x8d\x38\xff\x76\xfe\x67\x8e\xc0\x3d"
- "\x92\xb5\x85\x9c\x5f\xc0\xbf\xd5\x6c\x98\x04\xef\x22\xef\xe3\x35"
- "\x2f\x0e\xe9\x82\xc4\xdd\xb4\xff\x14\x76\xd9\x94\xbe\x62\x2c\x7d"
- "\x21\xd1\x87\x9c\x95\x6b\xb2\xd6\x3e\xf8\xe0\x0f\x93\x86\xc8\x33"
- "\xae\x4a\xa7\x5a\x42\x75\x92\xfc\xfb\x6a\x8e\xc4\xd3\x66\xa2\xff"
- "\x2f\xa6\x4a\xfe\xed\xdf\x4f\xd2\xba\x99\xde\xc3\x3e\xb4\xea\xfc"
- "\xbb\x5c\x47\x1f\x26\x71\x67\x73\x4e\x78\x6d\x34\x7b\xbf\xbf\x36"
- "\x3e\x34\x8e\xbd\x36\x3e\xb4\xd3\x3e\x7b\x8c\xbe\x27\x51\x9b\xc7"
- "\x04\xcd\xc7\x7c\x4b\x1e\xdc\x65\x0e\xdc\x2a\x78\xf0\x8c\x8d\x4c"
- "\x01\xff\x0d\xdd\x34\xf6\x83\x20\xc9\xb5\x41\xa2\x11\x19\x01\x66"
- "\xc1\x5e\x50\xb1\x06\x7a\xc7\x19\x3c\x30\xc0\x3d\x19\x1b\x89\x5e"
- "\xd0\x7b\x79\x8f\x3c\x83\xbf\xaf\x9f\xe4\x10\x7a\xae\xe8\x02\xad"
- "\x50\x11\x0c\x81\xc9\xfd\xfa\xc3\x6a\x9d\xc7\x35\x6f\xb1\x09\x1f"
- "\xd9\xd8\xb7\x83\xd2\x9e\xe9\x20\xf6\x6e\x6a\xa7\x41\xd0\xa0\xa0"
- "\x19\x67\x00\xac\xe2\x21\xaa\x17\x76\x41\x6b\xd0\xbf\xa8\x1b\xcd"
- "\x81\x14\x71\x56\x50\xf7\x90\xb0\x07\xba\x51\xda\x03\xdd\xc8\x6a"
- "\xd7\x00\x0e\x1f\xfa\xcf\xab\x1b\x8f\x9f\x63\x89\x4c\xcf\x7f\x70"
- "\x55\x86\x23\x67\x63\x06\x6c\x01\x47\xed\xef\x72\x0d\x39\x3f\x9a"
- "\x26\xe1\xfb\x51\x5a\x58\x57\x25\x6d\xf8\x40\x33\xe7\xf9\x85\x0f"
- "\x5b\xed\xac\xe7\xe3\xf9\x80\x7d\xd1\x39\xbc\x9b\x08\xe7\x3e\x9e"
- "\x8b\xb3\x9f\x3e\xd8\xce\xd4\xa5\xb3\x4a\x27\x77\x41\x87\x46\xe9"
- "\x97\xe8\x77\xea\xfb\x28\x9d\xd6\x3e\xd2\x62\xc4\x59\x63\x9e\xd0"
- "\xcd\x11\x9c\x3e\x72\x79\x98\x79\xbe\xd6\xde\xc3\xb0\xcf\x13\x36"
- "\xe5\x82\xcf\xf8\xe8\x94\xbc\xa3\xf5\x51\xa7\x0e\x4b\xe2\x7d\x17"
- "\xe0\x5e\x3f\xec\x74\xfa\x38\x6c\x02\x3f\x66\x7a\x79\x0f\xfb\x48"
- "\xdc\x31\xbd\xdb\x27\x9e\x0f\xdc\xe7\x8b\xbc\x93\xff\x51\xb5\xa4"
- "\x5b\x1f\xd5\x50\x3a\xd1\xca\x8f\x8a\xa9\xcf\x09\xd2\x47\x80\xa8"
- "\x67\x89\x6e\x0f\x15\x09\xb7\xdb\x57\x3a\x88\x59\x5e\xf5\xe0\x83"
- "\xd9\xb9\xeb\xf4\x98\xf2\xf6\xb5\xab\xb3\x6e\xd6\xee\xe0\xaf\xc9"
- "\xde\x90\xb1\x2a\x4b\xdc\xf1\xa1\x54\xf9\x38\x0a\xbe\xc9\x90\x6f"
- "\x84\xdd\xbc\x18\x53\xdb\xac\x5a\x8d\x8f\xea\x60\x2d\x0d\xd2\xde"
- "\xa2\xe5\x11\xb9\xb7\x5d\xf4\x12\xf5\xa3\x4d\xdf\xdb\xa0\x63\xe9"
- "\x63\x3f\xb2\xe1\xcc\x0c\x7e\x19\x70\x36\x07\x3d\x0b\xe5\xa1\x35"
- "\xfa\x51\xe8\xce\x74\x19\xa5\xe3\x4c\xd8\xb5\x06\xe7\xc0\x6d\x77"
- "\xa8\x3b\x7c\xab\x79\xec\x71\x2b\xd1\xb5\x38\xcc\x1d\xce\x8a\x64"
- "\x0c\x8f\x96\x54\xd0\x6b\xe8\x02\x5d\x6b\x60\x4f\xdb\x62\x21\xfe"
- "\x84\xf6\xcb\xb6\x25\x24\xeb\xad\xde\xb6\x89\x99\xd0\x06\xed\x85"
- "\x1e\xa9\x57\x6e\x59\xf1\x6e\x01\x63\xda\x7e\xe8\x29\x13\x7a\xce"
- "\x16\xbb\xdc\x53\x7d\xc5\x9a\x1e\x85\x64\xab\x96\x6d\x1e\x76\x95"
- "\x57\xf6\xf9\x78\xaa\xc0\x13\x41\xeb\x5a\xf6\xf1\x9d\xc7\xdb\x84"
- "\xcd\xf3\xce\xe3\xa9\x2a\xcf\x89\xc2\x3b\xed\x35\xb1\x34\x8f\x6d"
- "\xbc\xc8\xce\x34\x3b\xe9\xa8\x2e\x76\xe4\x7a\xe8\x81\x09\x3f\x5c"
- "\x80\x05\xd5\x5f\xaa\xd5\x5f\x4a\xf5\x53\xbb\x37\x6a\xf1\x73\x5b"
- "\xbc\x7a\x5b\xb4\x5e\xa1\x67\x5a\x8d\x3d\x99\xfa\x9f\x45\x7f\x39"
- "\x52\xe7\xe4\x27\xd9\x6f\x46\x48\xe7\x24\xf9\xbe\x23\x76\x7d\xbd"
- "\xa0\x6d\x6d\x0c\x25\xaa\x53\xf8\x6f\x55\xb4\xb6\x4a\xa0\xff\xd0"
- "\xeb\xe4\x54\x27\x1f\xe8\xad\xa7\xfd\xd3\x44\x74\xc3\x9b\xb0\x85"
- "\xf6\x49\xb4\x01\xbe\xdd\x37\x83\xd3\x3e\x1a\xcc\x08\x1a\xa5\x0f"
- "\x8d\x8d\x2c\x3e\x92\x67\xa7\xf6\xaa\xc3\x7c\x26\xd5\x31\x40\xf4"
- "\xb9\x90\x15\x77\xb2\x23\xaf\xa1\x6d\xd8\x39\x61\x5e\x87\x68\x9e"
- "\x68\xae\x6c\xd4\xce\x41\x92\x35\xe2\x09\x0e\x9f\x61\xbe\x60\x3b"
- "\x52\x3b\x24\xe4\x0f\x33\xf5\xcd\xd8\xc1\x8e\xbc\x8b\xb9\x42\x5d"
- "\x04\x63\x6f\x60\x30\xfd\x9f\xe1\xc3\x0e\xb0\xde\x5c\xc0\xbb\x71"
- "\x7e\xd9\xc5\xdc\x77\x80\x2f\x27\x59\x45\x3c\x17\x65\x71\x55\xcc"
- "\xb5\xb0\x9d\x76\xdf\xb1\xb9\x9b\xab\xe7\x9c\x8c\x37\xd3\xfe\x70"
- "\xce\xc0\x02\x7e\x92\xab\xa9\xdf\x86\xa2\x53\xf0\xb3\x57\x4f\xb4"
- "\xa6\x04\x36\x2b\xa6\xf2\x4d\xcc\x02\x1f\x85\x45\x0e\xee\x6f\xf5"
- "\xd5\xb0\x56\x47\x0d\xfb\x28\x50\xc5\x5c\xeb\xa1\xa7\x75\xf7\x7e"
- "\x9c\x5f\x85\xbb\x2a\x31\xf4\xfc\xb2\xed\xdf\xd0\x56\xeb\xb6\x8f"
- "\x8f\x7e\x4a\x33\xf7\x29\xb3\xfd\x5c\xbc\x57\xb5\xa4\x7f\x44\xd8"
- "\xf6\x11\x2b\xea\xe4\x2a\x78\xbc\xc2\x47\xd0\x46\x09\xd5\x55\x0f"
- "\x7f\x7e\x16\xb5\xcf\x1a\x4b\xe3\x37\x2e\xcb\x67\xe2\x8c\xd4\xb5"
- "\xe6\xcf\xe8\xe3\x25\xb5\x67\x99\xc9\xb5\xe6\x3d\xf1\x2c\x74\x26"
- "\x34\x5e\x77\x56\xbb\xb0\xc1\x84\x2f\x43\x77\x7e\x37\xee\x7c\xab"
- "\x15\xe8\x63\x50\xf6\x9b\xe0\x65\xd4\xcb\xd7\x15\xea\xe5\x5b\x05"
- "\x2d\xd8\x03\x78\x50\x9f\x8e\x2c\x97\x30\x69\xa1\x54\xd9\x67\x82"
- "\x4f\x7a\x24\x7c\x5a\xe7\x03\x3e\xb0\x49\x57\xd7\xf7\xd6\x53\xdf"
- "\x52\x09\x06\xaa\xde\x06\x70\x00\x67\x79\xa8\xbf\xfc\x2c\x8b\x73"
- "\xad\x81\xcd\xba\xfb\x79\x73\x9a\xd1\xa4\x0e\x9c\x3a\x58\xd1\xcf"
- "\x8c\x98\x37\xf0\x0e\x15\xe2\xbb\x80\x79\x01\xe6\xcc\x1b\xf3\x5d"
- "\x3a\xfd\xad\xa0\xbf\x4c\xe0\x1e\xfd\x66\xd1\x7c\x95\x50\x1f\x12"
- "\x69\xae\xea\xf1\x2b\xf1\xb1\xa3\x12\x3e\x5e\xb1\x3f\x13\xae\x84"
- "\xd3\x77\x76\x54\x04\x68\xed\xa8\x42\xf6\x74\x27\xaa\x3b\xd4\x6a"
- "\x69\xbf\xfc\xf1\xf2\x3d\xc4\xeb\xd7\x3c\x25\x7c\x64\xc4\x91\x7c"
- "\x02\x9d\x03\xdb\x25\xee\xd2\xb5\x59\x75\x3a\xbe\x73\x0a\xfc\x4f"
- "\xb8\x17\x1b\x84\x2d\xa5\x6f\x9b\x86\xeb\xdb\x28\xcf\x42\x0f\xbb"
- "\x2e\x47\xae\x89\x16\x71\x07\x10\x74\x60\x3c\x3e\x8b\xf6\xae\x16"
- "\xd8\xb0\xf2\xcb\xd3\x59\x9c\xc2\xbd\x71\x99\x66\xee\x0e\x34\x01"
- "\x87\xe2\x04\xee\xcb\x6f\xc4\x1b\x7b\xcd\xb4\xb7\xb5\x51\xba\x51"
- "\x4f\xc7\x1e\xaa\x92\xbc\x0c\x59\x7d\xd9\x46\x33\x2f\xec\x67\xd3"
- "\x84\xde\x4b\x4f\xdf\xe8\x35\xb7\xd2\xce\x5f\x48\xb4\x1b\xbe\x75"
- "\x50\x86\xd2\xa3\x68\xaf\x3c\x44\xed\xba\x28\x7f\xa2\x9e\x9f\xf7"
- "\xa5\x1b\xdd\xf9\x4d\x62\x9d\xc1\xff\x9a\xd8\x23\x65\xfa\x84\x65"
- "\xf9\x5e\xb3\x98\x33\x3d\x6d\x5d\xba\xd8\x9b\xe1\x87\x83\x78\x6f"
- "\x2e\xfa\xd3\x25\xd2\x15\x92\x9d\x91\x6e\x89\x48\x33\xc0\xe7\x09"
- "\xfc\x69\x46\xa4\x45\x51\x9f\x59\xe8\x9d\xda\xc6\x3e\x8d\x75\xb7"
- "\x6c\x23\xce\x00\xe5\xfe\x2c\xda\xde\xc8\x99\xf4\xd1\x2b\xd3\x24"
- "\x1f\xf0\x49\x7d\xa4\xdc\x8e\x73\x17\xb4\xad\xf6\xa5\x1b\x82\x7d"
- "\xe9\x51\x68\x1f\x75\x41\xe7\x4a\x63\xa4\x76\xbb\x19\xfc\xc3\xf3"
- "\xb2\x45\x0e\x8e\x7b\x5f\x54\xaf\xe8\x4f\xbe\x9f\xf1\xf8\x45\x63"
- "\xfb\x3a\x29\x4d\xb6\xbb\x0a\x7f\x4e\x38\xfd\xe9\x3e\xd0\x94\xa0"
- "\xa9\xbf\xca\xf6\x10\xf6\xe9\x4f\x67\x62\x4e\x83\xb4\xce\x83\x31"
- "\xfd\x55\xf3\xba\x99\x52\x48\x6b\x47\x9e\x4d\x7e\x7a\x1b\xf8\xc4"
- "\x22\x95\x73\x7a\x9e\x0f\xdc\x35\xf7\x92\x2c\xb6\xa3\xbf\x5a\xd8"
- "\xc2\x24\xd8\x6d\x6e\x7f\x37\x6b\x29\xfe\x82\xb5\x04\xdc\xc5\x87"
- "\xce\x7a\x8d\xd2\x26\xc6\x88\x7a\xef\xc1\xb7\x22\x5a\x2f\x19\xc1"
- "\xfa\xf1\x65\x5b\x92\x97\x08\x76\x5f\xcb\xbd\xe0\xd3\x7d\xba\x8c"
- "\x74\xfe\x31\xfc\x45\xf8\x44\x85\xbd\xa8\x5a\x1e\x8d\x38\x91\x45"
- "\x7c\xd0\xce\xe6\x6d\x82\xae\xfa\xd3\xf6\x04\x1f\x4b\xd5\xea\x3d"
- "\x23\xeb\xfd\x0b\x3b\x5f\xbd\xc0\xdb\x96\x6a\x69\x87\xa2\x26\x44"
- "\x5b\x82\x54\x77\x30\x21\x3a\x8d\xf6\x9a\x22\xe2\x5f\x88\x1f\x39"
- "\x7a\x07\xb5\x63\x69\x0d\xb4\x31\xf8\x55\xae\x55\x69\xbf\x3e\x63"
- "\x65\x9a\xfd\x4f\xd1\x69\xf6\x97\xeb\x55\x6e\xb7\x90\xec\x06\xfd"
- "\x6f\x11\xe8\x2c\xf4\xe9\x85\x41\x16\xed\xce\x23\x29\x2b\x3e\xd9"
- "\x4e\x75\xfc\xe8\x7d\xe8\xda\x89\x56\x05\xb9\xd5\xf0\xd6\x80\x87"
- "\x55\x10\xfd\x16\xfe\x41\xb7\x5e\xbe\x2b\x61\x0b\xbb\x95\x1b\xcc"
- "\xc2\x7e\x8c\xf6\x17\x3b\xcd\x6d\xbe\xe8\xcf\x4e\x5f\x55\x84\xad"
- "\x51\x14\xb5\xf5\x06\x6c\x8d\xb8\xc9\x97\x5e\x83\x3d\x93\xe6\x6c"
- "\xd0\xf9\x17\xe2\xff\x3f\x11\xfb\x5d\x29\xf8\x22\x41\xe7\x8f\xde"
- "\xe5\x8d\x57\xe0\xef\x1f\xb1\x52\x15\x75\x7d\xe0\x60\xc5\x77\xcc"
- "\x28\xe1\x71\x74\x6e\x6b\xef\xa0\x8b\x97\x2a\x5e\xac\x23\xad\x6e"
- "\x33\xd5\x1d\xe4\x65\x0a\xed\x9d\x47\x97\xca\xb9\x11\xcf\x56\x7c"
- "\x0f\x0c\xe3\x6e\xe0\x5f\xaa\x6a\x86\xc0\x17\xfd\x25\x95\x78\x5d"
- "\x57\x5f\x9c\xe2\xfd\x57\x6b\x31\xf1\x00\x47\x33\x3d\xca\xa0\xb0"
- "\x59\xd5\x7d\x9d\x8e\x77\xae\xc6\x77\x5b\x63\xdd\x54\x09\xf1\xed"
- "\x89\x3d\xec\xaf\x9f\x0c\x39\x99\x61\x98\xf6\xd6\x21\x92\x7d\xf8"
- "\xee\xf4\xb8\xf2\xa9\x0c\x7e\x11\xa7\xf6\xb0\xa3\x6f\x04\x0c\x2c"
- "\x91\xfe\x2c\xde\xcb\x73\x62\xa8\xde\x54\xe8\x74\x8f\x9c\xc5\x39"
- "\xf3\x67\xd2\x2f\xc7\x2e\x96\xa4\x52\x7d\xd0\x25\x57\x4c\x65\x49"
- "\xd0\x23\x53\x9a\x3d\x23\x28\xcf\x59\x74\x39\x71\xeb\x54\x96\x3c"
- "\xb2\xdd\xa3\x35\x92\xcf\xfb\xab\xd8\xe3\x37\x78\xd9\x15\x8e\x5b"
- "\x78\x07\xd5\x5b\xc9\x9d\x51\x9c\x5f\x6e\x35\x48\x7e\xf0\xb3\x8d"
- "\xe6\x6a\x89\x77\xe2\x5c\x81\xf0\x0d\xe7\x36\x9a\xbe\x5a\x11\x3e"
- "\x5e\x63\x87\x92\x70\x37\x4b\xa4\x29\x16\xc0\xd2\x22\xfa\xa1\xf9"
- "\x65\x0c\x6e\xbd\x26\x13\x75\xa0\x3f\x19\x2b\xa5\xae\x1b\x3e\x1b"
- "\x09\xae\xc2\x4e\xb8\x74\x17\x8b\x7b\x62\x17\xb3\x1c\x79\x50\x8c"
- "\x6b\x9f\x5c\x8b\x46\x86\xfe\xaa\x25\x58\x67\x84\x13\xd4\x6f\xb4"
- "\x07\xdc\x68\x0d\x9c\x71\x15\xe5\x71\xd5\xf5\x10\xfc\x93\x7c\x76"
- "\xd2\x95\x7b\x80\x2d\xeb\x0c\x48\x3f\x63\x2b\x98\xb7\x8e\xea\xab"
- "\x9b\xca\x2c\x54\x57\xbf\x7b\x35\x68\xad\xf5\x4a\x57\x6e\x03\xd5"
- "\xfd\xd7\x18\xec\x47\x65\x04\x1f\xb9\x2f\xfd\xf5\x90\xdb\xdf\xce"
- "\x10\xe3\xe2\x6e\x07\x0f\xa2\x1e\xca\x73\x9b\x18\xef\x6e\xab\x2d"
- "\x43\xfa\xd5\x14\x63\x0d\x9d\x21\x68\xe3\x70\x9f\x15\xf5\x2d\x77"
- "\x67\x12\xcf\xa9\x8d\x49\x87\xb5\xc4\xaf\xbf\x3e\xe9\xca\xdd\xcb"
- "\x30\x3f\xc8\x4f\xef\xc5\xee\x5e\xca\x7b\x6a\xe4\xbc\x20\x0f\x7d"
- "\x7b\x8d\xea\xfd\x3f\xe1\xb3\x31\x9c\xd9\x84\xf3\xd4\xd0\x78\x08"
- "\x56\xbe\xdd\x04\x23\xa9\x33\xfc\xeb\x74\xf4\x95\xe6\x6e\x9a\x3b"
- "\xef\x8b\xb1\xef\x44\xd2\xda\x27\xbc\xdf\xd2\x2a\xf4\x65\x7f\x8b"
- "\xbf\x3b\xa0\x72\x49\xcf\xfe\xe6\x52\x89\x0e\x78\xe8\x17\xb4\x40"
- "\xd0\x93\xeb\x70\x9e\xfd\xb7\x77\xcd\x8a\x9c\x5f\x8c\x05\x3c\xd3"
- "\x58\x73\x1c\x71\x56\x61\x41\x5f\xf5\x39\xe6\x71\xc9\x76\x15\x67"
- "\x50\xb0\xed\x1d\xb6\x32\x89\x7f\xbc\x92\xea\x7d\x4d\xe3\x21\xdb"
- "\xb5\xfd\xb4\xbd\x2f\xa6\xbf\x9e\x3f\x66\x65\xba\x1d\x22\xad\xdf"
- "\x9a\x0c\x69\x3b\x6a\x05\x8d\xaa\x33\xc8\xb5\x83\x3e\x6a\x65\x8f"
- "\xca\xb3\xf1\xbf\x15\x53\xf9\xa3\x63\x8e\x37\x6a\x2a\xfc\x4f\x15"
- "\xc1\x87\xa8\xb8\xab\x44\xb4\x8a\xf6\x83\x68\xb7\x6f\x88\xc9\xf3"
- "\xfa\xf6\x9b\x89\xc7\x8f\xc6\x3d\x55\xbd\x6f\x17\x76\xae\xd0\xae"
- "\xdd\x97\x6b\x5f\xa2\xcb\xd0\x3c\x8e\x60\xec\x34\x8b\x78\x07\xc4"
- "\x77\xa9\xbe\xf8\xe4\x14\x6f\xfc\x2d\x99\x72\xdd\xb4\x3b\x78\xbc"
- "\xa4\xb7\x19\x7e\x56\x8c\x71\x69\x7a\x89\x68\x8c\x99\xea\xa9\xd4"
- "\xcf\xb7\xf5\xba\xc7\x8d\x21\xa2\x8f\x8d\xc6\x24\xfd\x1b\x24\xdb"
- "\xc5\xd8\xe0\xa3\x47\x8c\xed\x73\x71\x07\xf0\x02\xc7\xd3\x2e\xe9"
- "\x5b\x72\x8a\x6b\x2a\xea\xf8\xe2\xd7\xe8\x1f\xe6\x84\xe8\xc3\xa5"
- "\x3d\xec\xf3\x4c\x1e\xfb\x44\xec\x85\xd5\xf9\x79\xb2\xac\xf3\x96"
- "\xcc\x67\x88\x06\xcb\x3b\x8b\xb0\xd9\xf9\xa2\x8c\x97\xdd\x92\x09"
- "\x19\xa6\x8f\xda\x23\xfc\x88\xa0\x43\x5f\x58\x30\x57\xd7\x1d\x60"
- "\xa9\x12\x0f\xbf\x98\x00\x79\x57\xc6\x78\xfa\xbc\x81\xf0\x5e\xfa"
- "\x97\x0b\xd9\xac\x2a\x62\x1f\x8b\xa4\xb1\x17\xd8\x47\x29\xd3\x24"
- "\xcc\x22\xf9\xf1\xf3\xbd\xc2\x2e\x89\xfa\xbb\x21\xa0\xd3\xbf\xcf"
- "\xf7\x72\xe8\xbb\x0b\x35\xbd\x27\x68\x59\xa1\xf4\x11\x38\xe8\xfc"
- "\x62\x71\x48\xef\x89\x3b\xdd\x4e\xde\x8c\x7c\x34\xf7\x67\x90\x47"
- "\xfa\x20\xeb\xd1\xee\x3b\x7f\xf1\x33\xed\x2e\xb3\x1d\xb6\x5a\x54"
- "\x96\xe8\x1d\x17\xfa\x56\xc0\x00\x6d\x8b\xbe\x1b\xa0\xe3\xfc\xa2"
- "\x26\xac\x67\xfe\x5c\xc4\x86\x90\xfe\x08\xbe\x68\xd0\x71\x84\xc6"
- "\x1b\x2d\xe3\x7a\x7c\x3e\xfd\x30\x41\x19\x38\xd0\xc7\xad\xb1\x57"
- "\xd5\x00\x27\xbf\x38\x16\x09\xa7\x65\x01\xb5\x48\xd2\xa0\xcf\x9b"
- "\xb8\x58\xeb\x9f\x37\xfd\x30\x3f\xf1\x5f\xd7\xeb\xbc\x88\x84\xb3"
- "\x85\xe8\xcb\x97\x01\x01\xeb\x92\x8e\x14\xf8\xdd\x7d\xac\x10\x7e"
- "\xc4\xff\xeb\x3b\xf8\x6b\x0f\x94\x74\xa4\x05\x8b\xac\xf0\x4f\xcb"
- "\xd4\x92\x8e\xcc\x2e\x07\x33\x64\xd0\x1f\xfc\x9e\x43\xc6\x23\x99"
- "\xd5\xc2\x63\x89\x3f\xa1\x75\xbe\x79\x15\x33\xdf\x9b\x03\x1d\x83"
- "\x3d\x11\xfe\xd4\xe1\x4b\x1d\xb1\x10\x82\x45\xf6\xc9\xf4\x3c\x85"
- "\xf8\x39\x0b\x37\x75\xa4\xe2\x7c\x3e\xe8\xe4\x44\x8f\x8f\xc1\xa7"
- "\xbb\xc1\xed\xf5\xb3\xcd\xa7\x98\x09\xfe\xda\x03\x65\x4a\x7b\xab"
- "\xef\x4b\x21\xdf\x24\x38\x58\x22\xf1\x1f\xb8\x03\x60\x55\xe3\x15"
- "\x17\xed\xf1\x4d\x72\xdc\x67\xb8\x1c\xb7\xec\x37\xfa\x2f\x68\x5c"
- "\x49\x67\x66\xa1\xe8\xfb\x97\xcf\x04\xa8\x7e\xb5\xe4\xe4\x8a\x60"
- "\xc9\xc9\x74\x79\xa7\xbe\x85\x15\xe6\xf1\x6e\xb7\xaf\x85\x64\xae"
- "\x7e\x11\xbb\x0e\xe7\xff\x18\x23\xc6\x87\xb6\x3f\x3e\x7b\x4a\xf0"
- "\x5a\x01\x7a\x2f\x5a\xad\x95\xe9\xa5\x32\xbd\x2d\x6c\xa8\xe4\xa4"
- "\x18\x7b\xab\x4f\x96\xcd\x10\xcf\x54\x3e\x12\x0e\xda\x98\x43\x70"
- "\xa0\xb1\x63\x7c\x18\x7f\x00\x30\x21\x18\x68\x63\xb5\x0e\x6b\xe3"
- "\xc4\x18\x3f\xa2\x5d\x67\x17\x8d\x93\xc6\x2a\xc6\x39\x4c\xe3\x6c"
- "\xce\x61\xcc\x5f\x9e\x9c\x7a\x2e\xf6\x64\x3a\x64\xd4\xa2\x4f\x88"
- "\x87\x2f\xa8\x64\x24\x8b\x1a\x5f\x2e\xac\x34\xec\x24\xde\xa4\xd0"
- "\x4b\x32\xa9\x97\x77\xc3\x86\xd7\xed\xa0\xbf\x40\x0d\x03\x8f\xa3"
- "\xf3\xeb\xd4\xb6\xf5\x63\xf5\x04\x2b\xec\xe6\xdd\xc4\x9b\xfa\xdd"
- "\x01\xca\x93\x43\xe3\x27\x19\xb6\x4b\xeb\x3f\xf2\x6e\xfe\x4e\x8e"
- "\xcb\xbc\x9a\x25\xbe\xf3\xf3\x12\x83\xbb\xbd\x84\xe9\x63\xb9\x8f"
- "\xf2\xd1\x78\xac\x54\x57\x3c\xc6\xa3\xd2\x38\x77\x53\x3f\xfd\x11"
- "\x63\x3a\xd2\x0b\x3b\xe2\xcf\x58\x6c\x1a\x53\x76\x9d\xa6\x71\x9c"
- "\x66\xd6\xca\x42\xe2\xbf\x7e\x0a\x7e\xf1\xd8\x91\x8b\xd2\x59\x92"
- "\x87\xfd\xd7\x51\x49\xe3\x85\x2f\xe8\x4b\x7a\xd8\x97\xfd\x21\x7f"
- "\xcf\xf0\xa1\x1f\xaf\x1c\x03\x1e\x09\xbf\xcf\xd8\x33\x06\x09\x67"
- "\x70\x4e\xbf\x81\xda\x18\xb4\x4f\x11\xfd\x71\xce\x87\x9d\x70\x1c"
- "\xbd\x23\x76\x14\xee\xab\x2a\x54\xae\x9d\x13\xcc\x50\x3f\xf1\x73"
- "\x4d\xf8\x05\x0c\xc7\xb4\xb9\x7d\x85\x2d\xa0\x36\xaa\x20\x7f\x1f"
- "\x2c\xf4\x1a\x1e\x7f\x85\x25\x5f\x18\x4d\xf9\x2a\x69\x3c\xfa\x0d"
- "\xfd\x2c\xea\xa3\xb1\x4d\xee\x61\x5f\xc7\x8c\x5c\x63\x36\x41\xcb"
- "\x24\x1d\xfc\xaa\x0d\xfa\xcf\x0b\x6c\x57\xf0\x70\xb0\xb1\xb8\xc0"
- "\x72\x47\xf5\x7e\xd0\xf3\xb8\xf7\x2d\x2e\x1c\x0e\x5f\x27\x8f\x57"
- "\x57\xd9\xb3\xc2\x46\xb2\xa8\xfc\x59\xa2\x17\xc4\x2b\x1c\xb6\xe2"
- "\x2c\x85\xf6\xce\xbd\x3e\xb6\x6e\x0f\x43\xfc\x99\x78\x77\xe0\x2e"
- "\x76\xb8\x26\x85\xd5\x9e\x85\xcf\x38\xfb\xe4\xa7\xcf\xd2\x5c\x6a"
- "\x34\x04\x3c\x29\xf4\xc8\x7c\x9d\xdd\x52\xf1\xac\xce\xc3\x7f\xdd"
- "\x5f\xd0\xcf\x0c\xb6\x35\xe2\xd9\xb7\xd8\xc6\x03\x55\x06\x35\xa7"
- "\x06\x7e\xcc\x13\x66\x3b\xe0\xc7\x5c\xf7\x0d\x2e\x78\x9f\x7c\x5a"
- "\x73\x7d\xd6\xd8\xb2\x5c\x96\x8c\x78\x06\x66\xaf\xe4\xe5\xe4\x7e"
- "\xed\x49\xa2\xfe\x59\x34\x7f\xe1\x16\xe9\x2f\xfc\xab\xd5\xb0\x39"
- "\xd7\xbe\xdf\x13\x24\x19\x46\xd4\x9b\xcb\x92\x6a\xce\x32\x3b\xf8"
- "\xa0\x8c\x13\x92\x67\x83\x5c\x78\x57\xaf\x99\x07\xff\x6e\x67\x7b"
- "\x7a\xc2\xf1\x0e\xbc\xeb\x10\x23\x81\x5b\xc7\xb3\x9f\xae\x98\x22"
- "\xec\x09\x84\xaf\x5d\x9c\x33\xd0\x3b\xab\x7a\x8a\x19\x0f\xc3\x36"
- "\xb1\x5e\xde\xc3\x3b\x1c\x90\xf6\xbe\x83\x4e\x4f\x93\xee\x07\x7e"
- "\xdc\xf3\xf2\x52\x29\xef\xa8\xd1\x24\x7f\x79\x07\x5d\xd2\x07\xe9"
- "\xf1\x38\xf7\x36\x35\x42\xc6\xf1\x9c\xc2\x37\xa4\xc1\xaf\x5b\xaa"
- "\x80\xe5\xf1\xf9\x90\x7b\x34\x99\xf1\x1d\x5b\x28\x4d\xf2\x30\xc2"
- "\xe6\xda\x2a\xcf\xff\x68\x6f\x4a\x18\x74\x1e\x4f\xd3\xf7\x33\xec"
- "\xeb\xd2\xd7\xeb\xf1\x2c\x8f\x72\xae\xfa\x3c\xfd\xb3\x68\x36\xe2"
- "\x38\xbb\x49\xa5\xfc\x55\xfa\xfe\x26\xce\x70\xb7\x4e\x5d\xb4\x6e"
- "\x23\x9b\xf6\xaf\x97\x99\x18\xce\xff\x28\x6f\xb7\xdc\x77\x8f\x1f"
- "\x0a\x9f\x11\xa4\x0a\x78\xc3\x47\x81\x90\x31\xe0\xfb\x53\xc6\x34"
- "\xe8\xd5\x7d\x80\xca\xfd\xf7\xf8\xe7\x11\xed\x04\x42\xfb\x28\xb5"
- "\x01\x1b\x74\xd4\x2f\x79\x93\xe3\x07\xc5\x5d\x4a\xca\x27\xf7\xd7"
- "\xe3\xe3\xca\x6d\xf0\x43\x05\xf8\xaa\x9a\x3c\xe9\xee\xfd\x56\xc2"
- "\x37\x9f\x45\xcd\xab\x62\xd6\x77\x0a\x3d\xc6\x04\xe9\xa3\xdb\xdc"
- "\xc1\x3a\xee\xc2\x77\xe0\xba\xeb\x3a\xe8\x03\x3b\xf6\xbb\xb1\x6f"
- "\x0f\xa7\xc7\xdd\x0d\x59\x5f\xf0\xe2\x1d\xd5\x73\xa9\x1c\xa5\x4d"
- "\x7e\xfb\xb4\xdf\x58\xb1\x89\x25\x4b\x5f\xaa\x1d\xc2\x47\x17\xee"
- "\xac\x5f\x95\xc8\xac\x57\x55\x31\xfb\xa0\xb3\xc3\x45\xf2\xa5\xd0"
- "\x77\x8b\xf6\xcb\x17\x55\x22\x9e\xc3\xab\x43\x9e\x09\x72\xae\xbe"
- "\xb9\x97\xde\xed\xe1\xf7\x8e\x73\xda\xf9\x10\xf1\x39\xdf\xac\xa8"
- "\x3b\x2d\x6d\xe9\x85\x7e\xa9\x74\x8e\x25\x6c\x7f\xf0\xcd\xbd\xb2"
- "\x2f\xdf\xdc\x7b\xd8\xc1\xa0\x3b\x3f\x5a\x2b\x7c\xb3\x7f\x43\x3c"
- "\xca\x71\x87\xa6\x8f\x69\x13\x78\x05\x7e\x77\x3b\x64\xb0\x6f\x5d"
- "\x65\x94\x0f\xfb\x04\xf1\x47\xa9\x82\x87\x27\x5e\x57\x25\xfc\x89"
- "\x18\xff\x87\xd0\x37\x8e\x49\x13\x77\x31\x26\xca\x94\xcd\xce\x14"
- "\xf6\x2c\x65\x8b\xba\xe9\xd7\xc4\xcb\x68\x6d\xef\x82\x8f\xa3\x39"
- "\x36\xfa\xb5\xd0\xaf\x95\x7e\x13\xe9\x7b\x1b\xf0\x92\x64\x58\x2b"
- "\x62\x54\xf6\xc5\xcf\x4e\x1f\xef\x5e\x14\x60\xe3\xde\xf6\x6f\x4c"
- "\xda\xec\x75\xa6\x22\x3e\xe1\xb2\x3d\x8c\xad\x0b\xf0\x21\xdb\x15"
- "\x88\x31\xd2\x99\x5a\xb4\x07\x67\xe9\x9d\x89\x23\xcf\xd2\x3b\xe7"
- "\xd3\x1f\xbd\x75\x36\xd3\x9f\x9f\xfe\x52\xc3\x7f\x27\xe6\x0f\x3a"
- "\x3b\x53\x09\x8e\x82\xc7\xba\x30\x9a\x88\xf2\x34\x0f\x90\x8b\xe2"
- "\xa3\x99\x1c\xef\x2d\xa9\xf4\x6e\xe2\xf1\x8b\x8a\xb5\xf1\xa6\xd0"
- "\xbb\xc5\x56\x44\xfb\x5a\x3c\xc1\x64\x2a\x8d\x39\x7e\x51\x37\xc6"
- "\x8b\xfe\xf6\xc5\xd3\xbe\x16\x71\x27\x0c\x75\x62\xfc\xde\x78\x2a"
- "\x47\xb0\xe4\xb3\x2b\x2a\x75\x78\x6a\x70\xc2\x7d\x19\x43\x1f\xd5"
- "\x21\xf9\x20\xca\x4f\x75\xe8\xf9\x43\xb0\x9f\x0a\xff\x04\x34\xa7"
- "\x94\x8f\x64\x62\x93\x7e\xdf\x6c\xd0\x79\x22\xf9\xdd\xd5\x4c\xf3"
- "\xe7\xd1\x99\xea\x8b\x28\x0b\x9f\x0a\x63\x95\xa7\x36\x4d\xb2\x4d"
- "\x3b\xc9\xdd\x9d\xb7\xc9\x76\x4f\xd8\xc6\x5b\x4b\x85\x33\x89\xbf"
- "\x23\xae\x77\x9e\x94\xfb\x16\xba\xa7\xf9\x98\xbb\x46\xa5\x3d\x7f"
- "\x4e\x6a\x6a\x21\x77\x75\xb1\x13\xc7\x5b\xfd\xdd\x17\xb8\x1f\x9e"
- "\x10\xfe\x42\xf8\x50\x31\x73\x17\xdc\x20\xce\xb3\x4e\xb3\x6f\x27"
- "\xb9\xbd\xe2\xce\x39\x3d\x77\x05\xf1\x1d\x67\xe8\xd8\x1b\x48\xc6"
- "\x0e\xc5\xc9\x50\x29\x6f\x2d\xd2\x29\x0d\x3e\x49\xea\x22\xbe\xf1"
- "\xf2\xd9\xda\x39\x4d\xd7\x87\xe0\x2d\x44\x7f\x03\xff\xec\x42\x9f"
- "\xd5\xd2\xd9\x56\x8c\xa1\x88\xe4\x3f\xc4\x06\xc5\x9a\xb0\xad\x87"
- "\xae\xb0\xeb\xd7\x84\x77\x5c\x2d\x9b\x6d\xbd\xb0\x31\x74\x89\xbb"
- "\x92\x45\x01\x7e\xda\x1b\x3f\xdb\x0a\x9e\xa4\xa2\x70\x82\xe9\xf6"
- "\x1a\xee\xea\x4b\x98\x43\xb4\xac\xab\xf9\xdd\x7c\x39\x37\x17\x58"
- "\x6f\xb3\x3e\xf6\x5a\x6d\xec\x94\x26\xce\xa8\xe6\x55\xcb\xf8\x21"
- "\x1e\xf6\x2d\x1b\x57\x67\x45\xf3\x0c\x7e\x80\xf6\x86\x73\x12\x16"
- "\xdf\xa6\x85\xf6\x86\x0b\xea\xc7\xb7\xe3\xfa\xf2\x8f\x68\x63\x58"
- "\x6b\xa3\xe1\xbf\xd9\x46\xc3\xf9\xda\x90\xe7\xe7\xdd\xa9\x17\x2e"
- "\x3b\x76\x0b\xbf\x3a\x44\x3f\x53\x24\xcd\x3c\xf9\x5a\x90\xe4\xb7"
- "\x40\xdc\x2d\xa9\xe0\x6d\x60\x2b\x8b\x58\x2a\x81\xd2\x68\x76\x24"
- "\x7f\x88\xb9\xd6\x7f\xca\x3a\x59\xb7\xf0\xdf\x77\x24\x0f\x32\xdb"
- "\xa2\xe2\xe1\xf2\x39\x95\xc3\x86\x6f\x2b\x01\xef\x3d\x34\x0f\xbb"
- "\x23\xf0\xac\xd5\xf7\x29\x73\x67\x42\xbf\xda\x06\xbd\x76\x31\x8f"
- "\xbf\x25\x55\x25\xda\x40\x3c\x7a\x50\xc0\x83\xf8\x17\x21\x6f\x91"
- "\xcc\x26\xe4\x2d\xaf\xf0\x99\x1c\x2f\x62\xa4\x38\x5f\xc9\x83\xee"
- "\x3b\x38\x9c\x6e\x1b\x74\xb2\x34\xc4\x4e\x81\xde\x99\x9b\x7c\x8e"
- "\x65\x81\x28\x2e\xe4\x29\xe2\xfd\x11\x3b\xc5\xed\xf3\xb0\x20\xf1"
- "\xd1\x35\x03\x2c\xb1\x86\x78\x4f\xa2\xd9\x16\xd0\xf5\x3a\x2d\x7e"
- "\x4a\xd9\x40\x38\x7e\x4a\x2d\x74\x3d\xed\xf4\x3c\xc0\x8c\xc1\xb2"
- "\x64\xfb\xee\x01\x96\xb4\x67\x3d\xb3\xef\x86\x2e\xef\xa4\xe4\x7d"
- "\x84\x6d\x3b\x62\xa9\xac\xb5\xe3\x2c\x21\xcc\xfb\xc0\x47\x42\x98"
- "\x6e\x19\x85\x0e\xe4\x82\xe0\x7d\x52\xec\x83\x81\xd2\xd9\x99\x81"
- "\xb8\x45\xdd\xc3\xe5\x76\x0b\xcd\xc1\x41\x82\x5f\xf2\x58\x73\xab"
- "\xdb\xc8\x54\x45\xc4\xbf\x79\x37\x49\xd2\x77\xaa\xcb\x37\x1e\x4e"
- "\x04\x77\xa7\xb3\x79\xbd\x2c\x45\x9e\xdb\xc7\xd0\x9e\xd8\x93\x0e"
- "\x9b\xc6\xc2\x47\x98\x35\xb8\x7b\x85\x52\xf4\x02\x8b\x72\x07\x52"
- "\x19\xfe\x0a\xbf\xe3\xdd\xf3\x56\xb3\x14\x9c\x3f\xe0\xac\xc4\xf6"
- "\x98\xc8\x7f\x75\x52\x01\x4b\x89\xac\xfb\x91\x8d\xb9\xab\xae\x4f"
- "\xf9\x45\xb6\xed\xc1\x55\xb9\x8f\x6c\x58\x99\x9b\xcd\x96\x48\x53"
- "\x10\xe1\x8e\x7e\x23\xec\x40\x36\xac\xca\xcb\xb1\x3d\xf0\x68\x6e"
- "\x6e\xf6\x9a\x3c\xdb\x5d\xb7\xa7\x7d\xdf\x27\xe9\x6e\xeb\x5e\x9c"
- "\xf5\x48\xbb\xc0\xde\x18\xfe\xdc\xb5\x03\xe5\x88\xaf\xb5\xe5\x8e"
- "\xe5\xe6\xc0\x12\x9b\x8c\x73\xd4\xbb\x02\xb6\xb8\xbc\x28\xbd\x5a"
- "\xf2\xa9\xbd\xf7\x4a\x79\x6a\xd8\x2e\xef\xd1\xf5\x4a\x3f\x80\x7d"
- "\x4b\xa6\xc9\x35\xf5\xf7\x9b\xa3\x1c\x0c\xcf\x8f\xe0\xd9\xec\x60"
- "\x25\xae\xa9\x38\x0f\xff\xbb\xf0\xd1\xc8\x77\x2f\x55\xf4\x7c\x7a"
- "\x1e\xed\xbb\xf0\x3b\x5d\x0b\xbf\xba\xce\x9e\x2c\x82\xcf\xe4\x41"
- "\xe7\xdf\x97\x7b\x0c\x9e\x66\x8d\x47\xe8\x96\x36\x88\xbd\x2b\xe0"
- "\xa3\x93\x3f\x77\xf9\x80\x56\x4f\x29\xb5\x77\x11\xe5\x2d\xf6\xb0"
- "\x1e\x93\x66\xab\x38\xa3\x43\xeb\x97\xb4\xa9\xe8\x59\x2f\x6d\x2a"
- "\xfe\xbe\x37\xe2\x2e\xbc\xf0\x35\x81\xbd\x51\xe3\x49\x07\xb5\xfa"
- "\x9a\x75\x9a\x40\xf9\x8f\x12\x5f\x57\x7d\xe1\xb4\xf0\xef\x52\xfe"
- "\x19\xe1\x7b\xa9\xf7\x8e\x91\x3e\x4d\x74\xb8\x59\x7f\x23\x75\xf1"
- "\x12\xae\x34\x86\x43\x12\x4e\x22\x7d\x5a\x0f\xbd\xa3\x9c\x87\xf5"
- "\x4e\x1b\x8d\x5f\xa1\x19\xbf\x73\xcd\x03\x6b\x1f\x71\xac\xcc\x5b"
- "\x75\xff\xaa\xd5\xab\xf2\x36\x8a\x2b\xfb\xc9\xe2\xbf\x7f\x9a\x95"
- "\xb5\x7c\xb4\xff\x79\x3b\x74\x32\x9a\xdf\x6a\x1f\x6c\x20\xa4\x5e"
- "\xac\xf7\xbb\x80\x93\xdd\x7a\x61\xe3\xec\x15\x7d\xad\x11\x7e\x3c"
- "\x4e\x31\x8f\xe2\xdf\xa7\x9d\x8f\xf4\x6a\x73\x25\xbe\xf7\xc5\x2d"
- "\x6a\xb3\x4d\x65\x0b\x3b\x98\xb7\x01\xe7\x62\x04\x6f\x1b\xf6\xcf"
- "\xb2\x4d\xd8\xe7\xda\xd8\x91\x00\xed\xa5\xe2\xac\xfc\x74\x3c\x60"
- "\x06\x1e\x92\x60\xb4\xb7\x83\x9d\x7a\x54\xc0\xe2\x8c\x75\xaf\xf0"
- "\xcd\x71\xc6\xfa\x1b\xe0\x22\xfa\xac\xf2\xf4\xdd\x9c\xa7\xef\x52"
- "\xcf\xe4\xec\xe6\x67\x72\x76\x85\x7d\x5f\x9e\xf2\x50\xd9\x03\x54"
- "\xf6\x04\x62\x5b\x95\x9f\x66\x07\x40\x27\xf1\x6e\xce\xb3\x90\x6c"
- "\x38\xc7\x8a\xfe\xb8\xbd\x29\x4c\xde\xd7\x3f\xe5\x71\xfb\x6e\x60"
- "\xc4\x7b\xda\xc4\xfd\x50\x71\xbe\x47\xfc\x21\x95\x73\x53\xbf\xdc"
- "\xde\x21\xc8\xd0\x56\x95\x78\x44\x0f\x3b\x65\xa1\xfd\x36\x1d\xf5"
- "\x62\xcc\x7b\x08\x27\x61\xa7\x41\x63\x27\x3e\xa6\xa7\x46\xbb\x1b"
- "\xdc\x59\x46\xe9\x80\xc1\xc8\xf9\x3f\x3d\x13\xf3\x48\x30\xfe\x3f"
- "\x61\x1c\x38\x2d\x7c\x44\x2d\xed\xe4\x5f\xf3\x92\x8e\x62\x39\xdf"
- "\xa7\xef\xd4\xd2\xce\x84\xfd\x05\x9c\xbe\x97\xde\x87\xe9\x4f\xe5"
- "\x25\xdf\xd4\x47\x9c\x4d\xe3\x9b\xf0\xe9\x05\xbb\x13\xc7\x26\x76"
- "\x05\x95\x7f\x52\xe2\xde\x37\x75\xde\xa2\x9c\x28\x2a\x13\xc4\xfd"
- "\x56\x0d\xbe\xaf\xb9\xb7\x9d\xd6\x6d\x3d\xa8\x4f\x67\x7e\xe2\x7a"
- "\x30\xc0\x44\xfc\xfa\xce\x80\xb0\x87\xd4\x7c\x44\x28\xaa\xb3\x17"
- "\xf6\x6a\xf0\xaf\x16\xb7\x67\xb2\x8c\xfd\x30\xe8\x3c\xdd\x19\xb2"
- "\x49\x8a\x93\x3c\x23\xf8\x36\xc4\xf4\xc3\xfa\x01\x0f\x88\x3e\x61"
- "\xfd\x50\xdd\x16\x9c\x73\xcb\x75\x74\x66\xda\x7f\x6f\x1d\x9d\x11"
- "\x38\x4f\xfd\x3e\xc8\x0d\x45\x7c\x5e\x29\xcb\x14\x76\x08\x01\x1f"
- "\xee\x25\x1b\x69\xef\xc9\x92\x34\xc9\x5b\x26\x6c\x55\xd6\xf7\x22"
- "\x9e\x71\x71\xdd\x10\x8b\x53\x4b\x7c\x39\xe0\xd5\x8f\x14\x08\xfb"
- "\x0d\x13\x95\x3b\x08\xfb\x0e\xd8\x18\x26\x88\x98\x91\x9f\xb2\xba"
- "\x7e\x66\xec\x64\x67\x6a\x70\x9e\x14\x86\xf5\x99\xef\x70\x7e\xc8"
- "\x77\x1e\xb7\x9a\x0b\x0c\x25\xa8\x43\x1d\x38\xb5\x40\x2f\x87\xd8"
- "\xe4\x28\xd7\xc1\xce\x7c\x26\xca\x21\xaf\xf0\x25\x62\x59\x41\xbc"
- "\x5a\x26\xf2\x07\xe8\xbd\x56\xb5\xa4\x71\xda\x53\x82\xeb\x03\x07"
- "\xe9\xdb\x72\xb5\xd4\x6e\xa1\xb4\x74\x71\x8e\x31\x6c\xc5\xf9\x26"
- "\xe1\x9c\xe2\x75\x7b\xbe\x75\x89\xfe\xe0\xae\x72\x1e\xed\xbf\x42"
- "\xb6\xf1\x5e\x5d\x7b\x92\x19\x1d\x0f\x62\x3e\xbd\xd2\x07\xf0\x69"
- "\xdd\x1f\x9f\xf7\xad\xbe\x9d\x27\xd3\xfb\x08\x5f\x7d\x06\x13\x3b"
- "\x6c\xf5\x63\xdf\x6f\x3b\x6c\x1d\xa2\xf9\xf1\x6e\x23\x7a\x59\x22"
- "\xf9\x6a\x6f\x68\x6d\x02\x47\xa3\xac\x96\x22\xfa\xbe\x57\xb7\x69"
- "\x02\x9e\x96\x0a\x1f\xef\x67\x0a\x00\x37\xc2\xed\xf9\x47\x56\x87"
- "\x7d\x2c\xf7\xc9\x7b\x7d\x16\x2a\x13\xba\xff\x1b\x1c\x50\x5b\xa8"
- "\x1f\xf0\x45\x93\x1f\x5c\xaf\x1e\xc3\xf9\xfb\xdd\xfd\x2a\xc7\x9d"
- "\x07\xdc\x5f\x81\xec\xb4\x2c\x9f\xf7\x41\x16\xc4\x5d\x31\x9c\xbd"
- "\xe3\x2e\x7d\x78\x9d\x7c\x97\xa4\xdf\xa9\xc7\x1a\x41\x1f\x70\x1f"
- "\xac\xfc\x21\xb1\x4e\x61\x03\x1b\x27\xce\x1f\xa2\x1e\x3e\x79\xb7"
- "\x8f\xea\x3c\x2d\xce\xcd\xfa\x6a\xb5\x7a\xe0\x33\x8b\xea\xc8\xd1"
- "\xeb\x50\x61\x3f\x9c\x2b\xec\xf7\x3c\xb2\xbc\xb4\x35\xba\xdb\xa7"
- "\x8a\x7b\x3c\x28\x2f\x6d\x80\xbe\xab\x09\xd9\xa0\x8a\xbb\x35\xdf"
- "\x1d\xd0\x6d\xcc\xe8\x39\x74\xff\x0b\x30\xed\x2b\x9d\x63\xf5\x11"
- "\x7d\xf0\x95\xce\x4e\xa7\x6f\x44\xff\x4f\xb6\x9d\x57\x1f\x02\x3f"
- "\x0a\x8f\x32\x83\x1a\xeb\xab\x82\x8f\x0c\x58\xdb\x4b\xbb\xf7\xb3"
- "\x37\x69\xfe\x32\xa2\x4e\xb3\xef\xbe\x0b\x9f\xc3\x07\x35\x1d\xf2"
- "\xd9\x15\x52\x86\x39\xbb\x42\xe8\x90\xcb\xe7\xb0\x97\x36\xf9\x0d"
- "\x07\x37\x79\x0c\xd2\x1e\xef\x6c\x9a\x87\x0d\x6d\x0b\xdb\x82\x9e"
- "\xb5\xa0\xae\xb1\xfd\x8a\x0c\x15\xcb\x3a\xfb\x84\xff\x90\xb0\x4e"
- "\xa0\x4f\xdc\x7f\xc2\x99\xb9\x0a\xfe\x31\x21\xda\x02\x1b\x29\xb7"
- "\xe3\x2c\x74\xc9\xd1\x52\x3f\x21\xf3\x68\x76\x9e\x17\xf7\x8c\x7c"
- "\x9f\x8c\x77\x09\xb3\xb3\x1e\xfd\x5c\xaa\xdc\xa0\x22\xfe\x20\x2f"
- "\xaa\x27\x7a\xe9\xf0\x09\x3f\x0d\x6e\xe2\x47\xa9\x0d\xee\xc8\xc5"
- "\x5d\xca\xbe\x4b\xe0\xbf\x41\xae\xcd\xbe\x1d\xa2\x4f\xce\x5b\x79"
- "\x11\x64\x32\x2f\x62\x1d\x9d\x65\x94\x6f\x12\xe5\xbb\xad\xa9\xa0"
- "\x17\x36\x66\x2b\x10\xc7\xb6\x53\x6b\xdb\x1b\x33\x54\x7c\x55\x1c"
- "\xcb\x1c\x74\xf6\x2d\xf7\xb0\xa6\x9a\x0b\xa7\x1b\x7d\xcb\xcf\xc7"
- "\x9f\x4b\x7e\x31\x95\x8d\x27\xe3\x43\x87\x73\x1d\xb5\x7f\x17\x47"
- "\xff\x7d\xb7\x05\x0c\x7e\x36\x6c\x98\xc8\xaf\x2d\xce\x67\x01\xe7"
- "\x44\x1e\xdc\x44\xf3\xd5\x67\x25\x19\xb0\x85\xb5\x4a\xbb\x1b\xd8"
- "\x0e\x98\x0b\x7d\xfc\xac\x3b\xd0\x80\x33\x04\x2f\xcd\x15\xd1\x2d"
- "\xdf\x8f\xdc\x81\xb7\x18\xec\xbb\x41\x6f\x3a\x98\x6f\x16\xfa\x75"
- "\x9d\xa3\x98\xcd\x3d\x8d\xef\x7d\x9d\x72\xcf\xf7\xa5\x6a\xbf\x16"
- "\xf8\x07\x8e\xec\xd3\x3f\x3d\xba\xe6\x01\x38\x99\x9e\xbb\x34\x7b"
- "\x7d\xf6\x6a\xdb\x4f\xe1\x82\x7a\xb4\xdd\x68\x38\xce\x61\x7f\x1c"
- "\xf6\x57\xf0\xef\x88\x77\x78\xbe\x58\x87\x7a\x9c\x43\x5a\x73\x49"
- "\xd0\x79\xff\x6f\xc6\x3a\xd4\xf9\x73\xc4\x39\x0c\x9f\xff\xf4\xb7"
- "\x84\xd6\x80\xfa\xce\x20\xde\xc5\x9e\xee\xf4\x2d\xc5\x3a\x92\xfb"
- "\x4b\xff\xe2\x48\x5f\x45\x92\x3f\x53\xbc\x94\xbe\x42\xbf\xf3\x4a"
- "\xb8\x18\x47\xef\xab\xc3\x77\x6c\xfa\xf3\x69\xbe\x1b\xe5\xfa\x15"
- "\x79\x4b\x74\x3b\x09\x2d\xa6\xbd\xb0\xeb\x50\xb7\xdf\x54\x20\x75"
- "\x93\xfd\x65\xb5\xea\x44\x93\x3c\x17\xeb\x6f\xd0\xef\x70\xc9\xb5"
- "\xf9\x8e\xb6\x36\xfb\x5b\xce\x67\xcb\x12\x5e\x1b\x03\xa6\xf0\xba"
- "\xfe\x5a\x2b\x3b\x60\xfa\x21\x3b\x18\x4d\x46\xbc\xa4\x87\xf9\xa7"
- "\x43\x5f\x29\xef\x6c\xfb\x85\x7f\x21\xe9\x8f\x63\xf0\xb8\xf6\x4c"
- "\x6d\x0c\x7e\xa8\x3d\x5f\x4e\xcf\xaf\x69\xcf\xc4\x2f\x0e\x3e\xaf"
- "\x3d\xd3\x9a\x1d\xdc\xa2\x3d\x27\xd2\xf3\x2a\xed\x99\xf6\x8e\xc1"
- "\x9f\x68\xcf\x53\xe8\xf9\x47\xda\xf3\x65\xf4\x3c\x53\x7b\xa6\x35"
- "\x38\x28\xce\x0c\xa8\xef\x26\xea\x7b\xff\x85\xcb\xac\x03\x2e\x79"
- "\x6e\x3d\xc8\x88\x1f\xac\x92\x7b\x4f\x28\x2d\x91\x70\x3a\x4b\x87"
- "\x2f\xa5\x37\xa2\x1d\x4a\x4f\xf6\x30\x4f\x5b\x44\xba\xe6\xbf\x6d"
- "\x70\xb1\x87\x7d\xe7\x89\x48\xaf\xd1\xd2\x57\x90\xcc\xed\x8b\x48"
- "\xaf\xd4\xd2\xf3\x88\x2e\xe6\x44\xa4\x6f\xd3\xd2\x4b\x3d\xec\xbf"
- "\x8c\x11\xe9\xf9\x5a\xfa\x5e\xdd\x86\x47\x4b\x5f\xad\xa5\x1f\xf2"
- "\xb0\x4f\x1b\x22\xd2\x33\xb5\x74\xa2\xff\xfd\xed\x11\xe9\x82\xae"
- "\x48\x9f\xec\x66\x7e\xb8\x00\x6b\x6b\xd0\xef\x61\xed\x7b\x23\xf2"
- "\x2c\x91\x65\xfd\x24\x4b\xfe\xad\x25\x22\x7d\xa1\x96\x6e\xf7\x28"
- "\x73\x22\xeb\x4c\x19\x8f\x56\x29\xd5\x2c\x73\x3c\xbd\x3e\x64\x20"
- "\x61\xcb\x2c\xf8\xec\x73\xd9\xb8\x13\x66\xde\xc3\x3b\x6c\x85\x9c"
- "\x77\xb0\x73\x4b\x35\xdb\xdd\x74\xd8\x51\xca\xfb\x75\xe7\xe6\x6b"
- "\xbe\x15\xbc\xe2\xce\xdd\x26\xa4\xf9\xdf\x14\xfa\x99\xfc\x62\xe9"
- "\x2f\x5c\x8f\x3d\x03\xfd\x96\x76\xf6\x4f\x79\xe0\x2b\x16\xb6\xe0"
- "\xbd\xd0\x81\xbb\xf3\x86\xa4\x2f\x79\x92\x83\x91\x06\x3d\x0f\xe0"
- "\x11\xa9\xcf\x92\x74\xff\x5c\xb6\x3a\x84\x7b\xad\x52\x17\x86\xb5"
- "\x88\xfc\xb0\x57\x8b\xcc\xeb\x61\xe7\x84\x5f\x8a\x28\xeb\xa4\xbf"
- "\x0e\x3a\xcf\x2d\x0e\xdf\x27\xf2\xd7\x68\xe9\x9f\x51\xfa\x8a\x88"
- "\xf4\x92\x71\x69\x3b\xd1\x41\x6e\x3a\x9e\x39\x3c\xc0\x7d\x81\x01"
- "\xee\x2f\xff\x8a\xfa\xfd\xa0\xb0\x11\xbc\x22\x58\x72\xdc\x81\xfb"
- "\x36\x88\x11\x1b\x58\xcf\xbd\xb0\x89\xa4\xf4\x8b\xee\xf6\x79\x89"
- "\xc7\x18\xe4\x65\xf7\xc3\xfe\xb5\x9f\xe1\x6c\xb6\xa8\x17\xf1\x06"
- "\xcd\x1c\xf7\xb8\x37\x9f\x62\x71\xb8\x8f\x53\xfb\x20\xbe\x7f\xc9"
- "\xee\xca\xf1\xb2\x23\x39\x41\x56\x4b\x75\xef\xb9\x5f\xe7\x2f\xce"
- "\x05\xc2\x77\x85\x8f\x43\xce\xbf\xa2\x48\xc4\xc4\x1e\x12\xbe\xca"
- "\xcd\x5b\x60\x53\xb0\xc8\xcf\xdf\x03\x6f\x3c\xdb\x66\xde\xc2\x6c"
- "\xb4\xb7\x2f\xa0\x67\x8b\xfc\xa3\x6f\x94\x3e\xde\x98\xe4\x5a\x1e"
- "\xca\x93\x72\xf7\x71\x8f\xa4\x17\x43\x79\xfc\x45\xdc\x3f\x19\xca"
- "\xa7\xb2\x7e\x6f\xfc\xec\x31\xef\xe5\x6c\xde\xc3\x0c\xc3\x3b\x89"
- "\x37\x39\xdd\x68\x90\xf4\x69\x38\x4b\x35\x98\xb6\x40\xd7\x2e\xe2"
- "\xe1\xee\xf4\xed\x3d\xb0\xc6\x6f\x38\xb2\xa9\x93\x3d\x76\x19\xb3"
- "\xae\xf0\x1b\x28\xcf\xd0\x89\x84\x3c\xf8\x3d\x9f\x03\x3f\x11\x86"
- "\xd7\xe9\xfb\xdb\x6b\x1a\x0d\x01\xc1\xaf\x0c\x67\x09\xfd\x6c\x89"
- "\x2f\x1f\x7b\x88\xbb\x3d\x08\x5e\x3c\x8e\x78\xf1\x1c\xa2\xff\xa6"
- "\xe0\x86\x9c\xc9\x81\x75\x39\x17\xed\xc9\x65\x71\xc1\x75\xf6\xc4"
- "\xa7\x07\xd8\x02\x7d\xff\xd9\xb3\x9e\xf6\x94\x41\x6b\x6c\x05\xed"
- "\x29\xd0\xfb\x24\x28\x16\x71\x0e\x8d\x67\xd5\xf0\x95\xa5\x76\xfd"
- "\xf9\x63\x7b\x07\x37\xd8\x85\xbf\x09\xf4\x65\xac\xb1\x96\xee\x62"
- "\xc6\xa0\x76\x2f\xb5\xf0\x04\x9b\x42\xfc\xb3\x21\xa1\x9f\xbb\x7a"
- "\x56\x33\x03\xe2\x21\x17\x66\x0b\xdd\xea\x84\x23\x39\x01\xe6\xce"
- "\xff\x82\x15\xe6\x62\x8e\x86\xdf\x04\x9f\x06\x7b\x66\xca\x6f\xe9"
- "\x61\xc3\x1f\x9a\xfd\xb4\x67\xf8\x89\x27\x7f\x08\x72\xf1\xf0\x97"
- "\xd2\xbf\x45\xc0\x86\x7b\xa4\xae\xdc\x45\x48\x3b\x57\x74\x42\xd8"
- "\x0d\xad\x90\x6b\x6b\xf8\x28\xde\x8b\x70\x4f\x36\xf6\xdc\xde\x57"
- "\x86\xfc\x13\xa4\xfe\x6e\xf8\x33\xb9\x3f\xcc\xf6\x4a\xd9\x6e\xf8"
- "\xe8\x78\xb8\xab\x96\x9c\x28\xe6\x88\x05\x59\x03\xfe\x95\x7b\xc4"
- "\x19\x3f\x7c\x06\xe4\xdf\xea\xe2\x44\xee\xa4\x2f\xa3\xc0\xf3\xea"
- "\x8e\x13\xc5\xd2\x87\x64\x40\xde\xcd\x87\xbe\x7f\xc7\x89\x4a\x71"
- "\xbe\xb1\xe3\x44\xbd\xd0\xf7\xef\x38\x71\x70\xeb\x54\xdc\x27\x08"
- "\x54\xf7\xc5\x9c\x70\xd1\xef\xea\xbe\x58\xb5\x79\xdc\xfd\xa8\xa4"
- "\xe3\xa0\xed\x0a\x96\x88\x73\xa6\x8c\xa0\xf4\xc5\x2a\xd7\x70\xb0"
- "\x86\xef\x10\xdf\x66\x74\x38\x58\x94\xf4\x77\x1c\x38\x39\xaf\x86"
- "\xd9\xa8\xaf\xf1\xdc\x74\x22\x53\xd8\x3d\x96\x9c\x70\xb8\x7b\x11"
- "\xa7\x2a\xc8\xe4\x79\x60\x70\x1f\x8f\x39\x91\x29\xf3\x07\x7f\xd4"
- "\xda\x4b\x63\x30\x9d\x48\x71\xfb\x4f\x69\x3c\x61\x70\x01\xf5\x31"
- "\x85\x97\x9c\x48\x95\xf7\xcd\x83\x3b\x74\xba\x2a\x71\x34\xb8\x59"
- "\xe2\x7a\xc7\x41\x09\xb7\xe0\x3e\x6d\xbf\x9a\x81\x67\xda\xbb\x53"
- "\xa4\xfd\x4a\x30\x4f\xe7\x91\x3d\x5a\x1e\x94\xa1\x67\xcd\xcf\x67"
- "\xb0\x8a\xc6\x9e\xac\x7d\x5f\x80\x34\x1a\x1f\xed\x59\x81\x36\x8c"
- "\x6b\x3c\xda\x2a\x60\x51\xc0\xa2\xa8\xcf\x69\xb0\xf5\x06\x9f\xe2"
- "\xf6\xdd\xea\x72\x8b\x39\xe0\xd7\xc3\xb6\x1f\xed\xc0\xdf\x10\xe8"
- "\x26\xd5\x69\x44\x7d\xe1\xfe\xab\x97\xe8\x7d\x41\x7b\xf8\x46\x63"
- "\x4d\x11\x72\x35\x8d\x19\x79\x30\xaf\x5d\x0e\xe8\xfd\xfa\x09\x66"
- "\xb0\xa1\xe3\xa9\x80\x89\x84\x19\x9f\xa6\xc9\xf4\xda\x3c\xf0\x49"
- "\x23\xe1\x21\xdf\x55\x13\xd1\x86\x5c\xd8\x52\xf1\x54\x0d\x7e\x5a"
- "\x8c\x15\x55\xf8\xa2\x95\xdf\xd4\x5f\x47\x94\x9d\x1e\xca\x4b\xfd"
- "\x06\x6f\x04\xbb\x04\x9c\x53\x49\x7c\x55\xdb\x22\xca\xb5\x65\x7c"
- "\x47\x3c\x32\xf1\x90\x5b\x9f\x15\x31\x2b\x53\x06\x9d\x6a\x67\x18"
- "\xde\xb2\x9e\x31\xda\xb8\x42\x6f\xc3\xc3\xd4\xbd\x7a\x3f\xe9\x59"
- "\xdb\x83\xb9\x3d\x3c\x27\xea\x12\xbd\x1c\x74\x3a\x34\x47\x3e\xc4"
- "\x8f\x1d\x27\x2e\x86\xe2\x26\xa8\xb4\x06\x6e\x75\x09\x7c\x64\xbc"
- "\x1e\xba\x4b\x82\x6b\x9a\xc4\x21\xbe\x4d\xee\x85\xbc\x1e\x75\xe2"
- "\xac\x51\xfa\x1b\xe5\xd5\x54\xaf\x76\x67\x89\x1f\xd0\xfa\x40\xf2"
- "\x5f\x60\xef\x68\xb9\x6e\xd1\xca\x2c\x5b\xda\xf5\xe2\xce\xed\xdc"
- "\x47\x1d\xb8\x4e\x9b\x15\x7e\x19\xc9\x73\x5b\xc2\x3e\xce\x10\x8b"
- "\x5a\xf3\x71\x56\x32\xb4\x57\xc0\x5f\x61\x8b\xf9\x00\xaf\xc2\xdd"
- "\x11\xbe\x9e\x57\x97\xd3\x1c\x16\xf5\xb3\x4b\x11\x17\xbb\xd0\xc1"
- "\xbf\x85\xff\x3b\xa2\x97\x4d\x44\x3f\x9a\x0b\xfb\xd9\x44\xd8\x25"
- "\x81\xfe\xc0\xee\x99\xc7\x50\xfa\x0e\x5f\x73\xe8\x1e\x9e\x62\x5c"
- "\x88\xbb\xa3\xbc\x28\xdd\x40\xf9\x8f\x01\x1f\x60\xa3\xde\xa5\x18"
- "\xa7\x51\xbe\x63\xf4\x2d\xaf\x0c\xed\x98\xfa\x6d\x41\xd3\x50\x41"
- "\xd1\x29\x16\x2d\x62\x1c\xe6\xfb\xa1\x53\x33\x74\x28\xec\xd7\x3c"
- "\xa6\xdf\x46\xe9\x09\x22\xdd\x4f\x6d\xef\xe8\xb7\xd1\xb7\x04\xfa"
- "\x76\x9c\x7e\x55\xaa\x23\xbf\x9c\xfa\x5d\x78\x8a\x5d\x41\x7d\xe9"
- "\xe6\x25\xfd\x36\xea\x67\x57\xd1\x23\x6c\x4a\xab\xa3\x1b\xf2\x1d"
- "\xd5\xe7\x91\xb1\x1b\xa9\x6c\x87\xa2\xdc\x44\xe3\xca\x87\x4e\x84"
- "\x7e\x0b\xca\xe8\xb7\x30\xc8\x12\x0a\x37\xd3\xbe\xb7\x99\xda\xc7"
- "\xbd\x56\xaa\x07\x3e\x48\x64\x5f\x68\x6c\xd0\xab\x51\xbd\x9b\x7b"
- "\x79\x17\xd5\xdd\x7d\xa4\x97\xea\xcb\x6f\x0f\xd5\xa9\xf1\xd4\x33"
- "\x68\xbc\x97\xf0\x9d\xaa\x87\xfa\x54\x0d\xdb\x6d\x4a\xb3\x50\x9a"
- "\x25\xc4\x0f\x2b\xc6\x49\xda\x73\x4c\x28\x6f\x51\x3a\x2b\x3c\xc7"
- "\x84\x0d\xb5\x6d\x43\x14\xeb\x50\xa2\xea\xe1\x07\x2b\x5c\xa7\x61"
- "\x3a\xea\x2b\xa5\xfa\x8a\xb2\x59\x0c\xd1\x6a\x13\xf5\x11\x31\xa2"
- "\x8f\x0b\x38\x61\x8d\x29\x86\x69\x34\x96\x4a\x8c\x49\xa5\xb9\x2b"
- "\xa3\xf5\x40\xe3\x51\x68\x3c\x31\x9b\x83\xa1\xbb\xba\x18\xd3\x24"
- "\xc8\x73\x18\x97\x9c\xc7\xfe\x85\x34\xae\xc5\x9b\x73\xf8\x71\x1a"
- "\x5b\xf7\x91\x9c\x76\x46\x7b\x8f\xb9\xd5\xd1\x86\x3b\x14\xc7\x25"
- "\xdc\xba\x61\x83\xba\x90\xc6\xb9\x38\xe4\xab\x57\x89\x7a\x9e\xfa"
- "\xde\x4d\xfd\x2a\xd5\xc6\x89\xb4\xaa\x10\x4f\xaf\x44\x3d\xa3\x3d"
- "\xc7\x86\xf2\x7e\x7f\x9c\xa6\x88\x71\x52\x79\xe3\xcd\xa8\x4f\x1b"
- "\x67\x2c\x8d\x33\xe6\xfb\xe3\x24\x7c\x5a\xcf\xb7\x69\xe3\x2c\xd1"
- "\xc6\x69\xa0\x71\xc6\xd2\x38\xa7\x46\x8c\x73\xf2\xa8\x71\xa6\xd2"
- "\x38\x97\xd0\x38\x3b\x22\xc6\x69\x19\x63\x9c\xa9\x1e\xb4\xb1\xa3"
- "\x7f\x89\xf4\x0f\xc6\x1b\xc5\xfd\xf7\xed\x51\xa1\xfb\xef\x2a\xee"
- "\x5d\x0e\x08\x1f\x44\x0d\xd0\xdf\x40\x6f\x04\x59\x0f\x77\x3c\x33"
- "\x36\x96\x14\x0b\xdd\xcd\x14\xa9\x9b\x16\xfc\xd5\xf6\xa8\x15\xa1"
- "\xbb\x1b\xcf\x8a\xd8\x35\x3e\xa4\x0b\x9f\x01\xb9\x4c\xe8\x1e\x97"
- "\x6d\xdc\x50\x84\xf2\x28\x4b\xf9\x4b\x43\x77\xcc\x14\x83\x43\xea"
- "\x43\xd5\x6e\x3c\xc3\x17\x96\x3c\x13\xe0\xcd\xe2\x4c\x60\x7b\x54"
- "\x38\xfe\xd3\x7a\xde\x04\xb8\x88\xfb\xac\xe2\x3e\x28\x2b\xc9\x08"
- "\x94\xe8\xf7\xd2\x7b\x29\x6f\x67\xc4\xbd\xf4\x5e\xd1\x87\x21\xe1"
- "\xfb\x61\xc3\xb2\xc0\x06\x71\x3f\x7d\x70\xbb\xd1\x14\x6e\x5b\x29"
- "\xd1\xda\xf6\xe0\xd9\x2b\x7d\xb3\x41\xc7\x66\x13\xf6\x36\xdb\x8d"
- "\xf3\x75\x1b\x17\x8f\xc2\x1c\x58\xcb\x63\xc6\x79\xd9\x6e\x5c\x31"
- "\xc2\x17\x94\x32\x01\x7e\xde\x91\x9e\x17\xba\x6b\xbe\xdd\x58\xfc"
- "\x43\x77\xcd\x8b\xbc\x34\x4f\xb4\xde\x1c\x88\x79\xae\x18\x5b\xf8"
- "\x8e\xa1\x02\x11\x2b\x45\x99\x30\x1d\xfd\xec\x50\x8c\xd8\x3f\xcc"
- "\xe2\x3c\x48\x31\x7e\xa9\xd1\xe6\xb6\x65\xc1\x80\xd9\x43\x6d\x0a"
- "\xdf\x52\xa1\x77\xe3\x51\xf8\xca\xa0\xb2\xf1\xc2\xcf\x39\xd5\x37"
- "\x32\xbf\xf8\x5e\x3c\xea\x3d\x75\xd4\xbb\xcd\x47\x34\x6b\x3c\x5b"
- "\x9e\xb2\xa9\x42\xc7\x9b\x9f\xb0\x85\x39\x8a\x4e\xb2\x28\xc2\xc5"
- "\x13\xe8\x5b\x6b\xb7\xb8\xe7\x67\xe6\xce\x14\xe6\xee\x0e\x48\xbe"
- "\x9d\xf8\xa5\x8e\x24\xca\x73\x92\x4d\xc1\x3d\x13\xc4\x92\xa1\xfc"
- "\x3d\x22\x7e\x8c\x12\xfd\xc6\x8a\x47\x63\x99\xfa\x8b\xf4\x8b\xb8"
- "\x61\x13\x78\x23\xd3\xcb\x43\x1e\xc4\x60\x51\x0a\x9f\x67\xd3\x40"
- "\xa7\x08\x87\x3b\xb9\xe1\xb1\x83\x54\xa6\xf7\xa5\xa1\xee\x09\xee"
- "\xc0\x17\xcc\x41\xf4\xb3\x47\x89\xde\x67\x2c\x60\xc6\x8a\x2e\x66"
- "\x21\x3c\x0b\x1c\x0e\x2c\x60\xba\xaf\x87\x9a\xc9\xd2\x87\x40\x0d"
- "\xe1\xe4\x3a\x2b\xf7\x0f\x6e\x8f\x36\x92\x5c\x5b\xac\xeb\x2f\x4a"
- "\xa5\xaf\x37\x23\xb5\xff\x4b\xe1\x97\x42\xf2\x07\x04\xdb\xe8\xdb"
- "\xe4\x3d\xd3\xc4\x5f\x50\x99\x05\x21\xd9\x46\x89\x6e\x92\x30\x1c"
- "\xaa\x97\xfb\x48\x74\xd3\x61\x92\x8e\xb6\x49\x9b\xa8\x44\xca\x9b"
- "\x15\xb2\x89\x82\x4e\x90\xbe\xd3\x1c\xd6\x4b\xb9\x67\xa8\x3e\x23"
- "\x68\xd2\xd6\x38\xd2\x8f\xa7\xa0\x2c\x95\x33\x8b\x38\x97\xdb\xa3"
- "\xeb\xc3\xb8\x16\x9d\x83\xfd\x94\xc6\x14\x47\xf3\x7a\x0c\xe3\x02"
- "\x4c\x7c\xf0\xeb\xa6\x4c\xf0\x1c\xde\x3b\x4e\x1c\x24\xd3\x71\x4f"
- "\x40\xe8\x97\x66\xfb\x09\x9f\x4e\xd1\x1c\x5c\x0c\xdf\x56\x6e\x6a"
- "\xe7\x48\xed\x10\x3b\x62\xed\x63\xad\xf4\x8c\xbb\x0f\xae\x87\xbe"
- "\x61\x9d\xb6\xb1\xf7\x72\xe2\x07\x32\xa9\xcf\x0e\xd4\x05\x5a\x03"
- "\x7b\x51\xf8\x20\x6c\xf5\x52\x5d\x9d\x4c\xd4\x71\x44\xed\x66\x47"
- "\xf2\x8f\x43\xb7\xed\x6f\xad\xfd\x82\xb5\x5a\xff\x22\xda\x01\xbf"
- "\xed\xca\xed\x3b\x5f\xdd\x84\x73\xc7\x2b\xb5\xba\x7b\xa9\xee\xc4"
- "\xf1\xeb\x9e\x6d\xbb\xc0\xba\x2f\xa0\xdf\xb3\x2d\x17\x52\x77\x51"
- "\x35\x0f\x12\x1d\x8e\xa7\x3d\x3e\x07\xfe\x59\x71\xc7\x35\x38\x00"
- "\x9f\x34\x33\x84\xac\xde\xa5\x98\xf6\x80\xde\x08\xfb\x90\x1d\xbe"
- "\x2c\x71\xff\x15\x7a\x76\xed\xde\xab\x3b\x70\x82\x41\xef\x3e\xb8"
- "\xdd\x54\x12\x92\x45\xc3\x67\xe3\x16\x8f\x62\x3a\x20\x6d\xad\x7d"
- "\x59\x12\xb7\x4c\x2b\x51\xd7\xd8\x32\x67\x7f\x95\xb0\xd9\x57\x4c"
- "\x27\x74\xfd\x56\x5f\x4c\x7f\x95\x56\x97\x6d\xb4\xde\x54\x73\x24"
- "\x64\xcb\xce\xcf\xb3\x6d\xc8\x5d\x95\x97\xad\x5f\xd0\x8e\x65\x3f"
- "\xcd\x7e\x20\x7b\xd5\xfa\xec\x2c\xdb\xf2\x47\x73\xd7\xcc\x5d\xfb"
- "\xe0\x83\xb6\xbb\xb2\xd7\xad\x5b\xf9\x8b\xec\x58\xb6\x3c\x77\xe5"
- "\x9a\x75\xab\xa0\xdb\xb4\xd9\x16\xdf\x98\x91\xb3\x36\x6f\xee\x2d"
- "\x8b\x53\x46\xe9\x36\x71\x5f\xfb\x18\x64\x1c\xda\x9f\xa6\x10\x8f"
- "\x31\x09\x7e\x89\xcc\x1b\xb9\xeb\x31\x92\xaf\x09\x07\x7b\xb0\x17"
- "\x62\xff\x81\xec\x05\xff\xc6\xf0\x99\xbc\xfb\x59\xde\xd6\xa5\x5c"
- "\xbe\x87\xf8\xf6\x76\x4a\x83\x7f\xe2\x63\x7c\xa8\xc8\x2b\xce\xb3"
- "\x95\xcb\x37\x52\x9e\xa6\x27\x28\xcd\x1b\x33\x54\x5f\xf1\x15\x33"
- "\x4a\x1e\x23\xc6\xcf\x0d\x13\x79\x29\x7c\x0d\x7f\x63\x65\x9a\x8f"
- "\x74\x83\xdb\xe3\x87\x0d\x91\x69\x59\xa0\x88\x83\xa6\xca\xf5\x15"
- "\x73\x4e\xae\xd3\x13\xc5\xe2\x2e\x83\x72\xf9\xcf\x20\x23\x6e\x45"
- "\xdc\xc5\xed\xb1\x44\xff\x87\x1d\x61\x5a\x7d\xb1\xce\x9b\xb7\x13"
- "\xdc\x37\x74\xd0\xbb\xf0\xb5\x12\x1d\x3b\x7f\x84\x7d\x98\x12\x97"
- "\xc8\x94\x4b\x0b\xe4\x1f\x95\x51\x2e\x2d\x91\x7f\x78\x8e\xfc\xbb"
- "\x7c\xa1\xfc\x1b\x9d\xfe\x3f\xfd\xd3\xdb\xff\x6f\xd7\xe1\xff\x81"
- "\xbf\x7f\xa0\x7d\x31\xee\xff\x1f\xc7\xff\x3f\x29\x4f\x8b\xe1\x3c"
- "\x7f\xc0\x37\xc2\xad\x63\x4f\x7c\xc5\x4c\x84\x9f\x55\x65\xf7\x13"
- "\x4e\x7f\xc9\xac\x05\x01\xde\x59\x74\x2f\x9b\x56\x78\x92\x78\x30"
- "\xe2\xb5\xf2\xf2\x79\x67\xe1\x00\x3f\x4e\x78\xf3\x09\xe1\x6f\x63"
- "\x79\x07\x8b\x2b\xeb\x20\x3e\x2b\x4f\xc6\x9e\xc1\x79\x13\xee\x79"
- "\xb9\xe9\xbd\x65\xbd\x9f\x7d\xec\xfd\x0e\x36\x95\xae\xd6\x4c\xa2"
- "\x3d\xc7\x18\x03\xfe\xc6\x65\xb2\xc4\x9a\x29\xfc\x10\x77\xbe\x92"
- "\xc5\x0d\xaf\x2c\xa7\xb4\xa3\xaf\xaa\xa9\x13\x5e\xdd\xd4\x3c\xc1"
- "\x76\x3f\xf6\xf9\xb8\x37\x35\xdc\xbc\x4d\xdc\x63\xa4\x5f\xe0\xa0"
- "\xe6\x63\x9a\xf6\xa7\x8b\xdf\x92\x7b\xfa\xc5\x65\x9a\x3e\x0f\xcf"
- "\xe2\xfe\x06\x8d\xa3\x91\x3b\x37\x1d\x44\x9d\xaf\xa8\x8d\x13\xb0"
- "\x67\xbe\xba\x29\x75\x42\xc1\x4a\x66\x68\xf5\xf4\xb0\xc3\x44\x0b"
- "\x71\x3e\x4e\xeb\xee\x00\xad\xb3\x83\x7b\xa6\xf0\x4a\xea\x5f\x29"
- "\xf1\x73\x25\xd4\xa7\x7d\x83\xdb\xe3\xed\x1e\x65\xa2\x55\xe3\xe5"
- "\x5c\xb4\x2e\x0e\x94\x51\x9e\x65\x8f\xb2\x19\x65\x94\x8f\x78\xbb"
- "\x12\xc8\x28\xb2\x7f\x93\x66\x12\x0c\x1a\xa8\xcd\x36\xdb\x7d\x78"
- "\x4f\x10\x3c\x06\xda\xa6\x71\x90\x1c\x92\x20\x64\x7e\xb4\xa1\xb7"
- "\x4b\xf5\x97\x50\xfd\x6d\xda\x19\x63\xa5\xac\x27\xbe\x41\xae\x57"
- "\x1f\xfc\xeb\x1e\xd3\xee\x89\xf5\x96\x6d\xa2\x7d\x7d\x88\xc1\x0f"
- "\x6e\x15\xb5\xe1\x32\x6f\x61\xdc\x8c\x3b\xc6\xc7\x02\x24\xd7\xa8"
- "\xd2\x7e\x57\x49\x78\x5e\x2b\x2b\xf8\x10\xc1\x7b\x04\x89\xbf\x17"
- "\xfa\x19\xe2\x3f\x72\x88\x4e\x10\xcf\x21\xee\x67\x10\xbf\x81\x74"
- "\x6a\xa3\x8a\xc6\xd5\x46\x72\x73\x03\xed\xdd\x88\x17\x69\xba\xaf"
- "\xff\x5f\x18\xce\x38\xc0\x2f\xac\xcb\xe7\x7e\x11\x57\x6a\x7b\xc2"
- "\x7c\x9d\x5f\x00\x7e\x80\x47\x28\xbb\x8f\x19\x87\x69\x8e\x09\x47"
- "\x9a\x89\xff\x20\x9e\x3e\xc1\xa1\xcd\x4d\xb3\xe0\x0b\xb4\x38\xd2"
- "\x92\x86\x27\x6c\xa6\xfd\x3d\x8e\xda\x68\xf6\x28\x97\x0b\x58\x48"
- "\x1a\x94\x50\xaa\xef\xf5\xd0\x39\x78\xa8\x0e\x4e\xb4\x8e\xe0\xd6"
- "\x90\x9c\xa9\x30\x8f\x12\x7f\x94\xe6\xa2\x01\x79\xa9\xbc\x91\xf2"
- "\x1f\xa2\x7d\x7f\xa1\x36\x27\xc7\x48\x26\x20\x3e\x20\x61\x31\xfa"
- "\x41\x65\x5a\x08\xd6\xd4\x96\xc5\xa7\xd1\xb1\xa3\x92\x87\xb1\x7c"
- "\xa9\xc3\x9e\xe6\x7a\x5b\x18\xfe\x66\x53\x24\xfc\x09\x16\x52\x2e"
- "\x57\x2c\x3b\x22\xe6\x8e\xe4\x52\x4b\x26\xf4\xd0\xd4\xde\x21\xa1"
- "\x43\x53\xcc\xb7\xc1\xf7\x1b\xe1\xcc\x21\x82\xc5\x21\xca\xd7\x08"
- "\xda\xbc\xf5\x2b\xa2\xb9\xf7\x83\x87\xb2\xdc\x29\x79\x54\x73\x37"
- "\x70\xb8\x4b\x31\x7f\x82\xf7\x4e\x25\x61\x09\xea\xa3\xf7\x37\xe9"
- "\x97\x78\x59\xf3\x6b\x45\x35\x88\x6f\xdc\xbf\x00\xbe\xd9\xe4\x5c"
- "\xf7\x2f\xa0\x7e\xd5\xeb\x77\xa0\x80\x03\x98\x7b\x1a\xa3\xd0\x3f"
- "\x78\x14\x73\x3d\x74\x8d\xa2\xdc\x70\x0e\xfa\x78\x0c\xeb\x53\xff"
- "\x4e\xe9\xdd\xf0\x99\x1b\x01\x9b\x25\xda\x9c\x34\x8a\x58\xa1\x8a"
- "\xe5\x36\xd9\x37\xcb\x34\x7a\x37\x51\x1f\xc4\x39\x44\xdf\x70\x4e"
- "\x54\x05\xca\x14\x86\xcb\x60\xfd\x10\x2e\x9b\xa9\xcc\x8f\xe8\x97"
- "\xeb\x79\xe1\x37\x9f\xfa\xe1\x7a\x1a\xbe\xcb\x14\x73\x7b\xdf\xb0"
- "\xdd\x40\xed\xfa\xa9\x5d\x03\x70\x03\x78\xa1\xd7\x51\x21\x61\x74"
- "\x80\xe6\x4f\xe0\xd7\xe1\x40\x23\xc1\xdd\x42\xfc\xbf\x3f\x5d\xf2"
- "\x77\x66\x97\xd6\x3f\x97\x38\x1f\x8c\x36\x79\x6b\xa5\x9f\x21\xe4"
- "\x0b\xc5\x7f\x0d\xf3\x99\x66\xf8\x19\x32\x51\x5d\x2d\x1a\x4e\x98"
- "\x29\x5f\x5b\x08\x87\xe0\xef\x40\xb1\xa4\x81\xd7\xd4\xfa\x0f\xdc"
- "\xbb\x53\xc2\x2e\xc1\x0b\x1c\x20\x3e\xbe\x5e\xce\x73\xc2\x12\xf0"
- "\xaa\x12\x0f\x27\x25\xea\x75\x08\x9f\x09\x04\x67\x95\xea\xd0\x71"
- "\x25\x92\x36\x50\x5e\x92\x1b\xa3\x43\x78\xa3\xd3\x02\x59\xe7\xe4"
- "\x8d\x9a\x1e\xd5\x4f\x73\x03\x3f\x26\x2e\xe1\x07\x4b\xe0\xe5\xe4"
- "\xa5\x87\x7d\x01\xd0\xd7\xa3\xd4\x2f\xa2\x09\x93\xf6\xf7\xc5\xaa"
- "\xde\x30\x6e\x4f\xaa\xd6\x71\x3b\x62\x5e\x05\x6e\x6f\x13\xf4\x68"
- "\x52\xa3\x87\xfd\x73\xa7\x8e\xfb\x58\xe7\x2a\xad\xeb\x8a\xf5\xe2"
- "\x7c\xc0\x0c\x7d\xa0\x58\xf7\xfe\x5e\x21\x63\x60\x3e\x5b\xf3\x3b"
- "\x85\x8f\xfc\xad\x2a\x33\xb5\xfa\x4e\x40\x3f\xd2\x83\xf5\xaf\xaf"
- "\x71\xcc\x0d\xb5\xe5\x42\x1c\x83\x6d\x44\x03\xb1\x06\x7d\xd4\x27"
- "\xfa\x66\x82\x4f\xb8\xa6\x15\xa9\x6c\x1d\xcd\xed\xe1\x4c\xcc\xdb"
- "\xe4\x05\xfa\x9d\x8b\x0a\x49\x03\xe2\x34\x7c\x11\x7d\x1c\x05\x57"
- "\xb3\x84\xeb\xe4\xd5\x23\xd7\xb7\x25\x0e\xeb\x3b\x12\xae\x80\x29"
- "\x60\x4b\x79\x69\xfc\x13\xf3\x74\xb8\x86\x61\x7a\x71\x8c\x86\x8f"
- "\x1a\x6d\x9d\x3c\x26\x6d\xad\x90\x31\x23\x1a\xb7\x62\x2c\xb4\xa7"
- "\xa0\x7d\x11\x0f\x4b\x93\x7d\x9a\xbc\xc0\xa9\xc9\x01\x0f\x2b\x48"
- "\xd5\xe9\x18\xf5\x67\x39\xf0\x09\x73\xa5\xd3\x0e\xe8\xca\x64\xdf"
- "\x2f\xb6\xeb\xf3\x81\x7e\x47\xd2\x04\xea\x93\xb0\xf7\x0a\x8f\xf9"
- "\xe2\x9f\x51\xb9\xc9\xa0\x6d\x61\xfe\xea\xe2\x9c\x91\x63\xbf\x38"
- "\x0d\x63\x07\x4e\x38\xd6\x43\x5f\x26\xf7\x32\x8f\x12\x77\x6c\x24"
- "\xbd\x8a\xfb\x44\xd8\x65\x68\xfc\x18\xe8\xbd\xe3\x3e\x99\x1f\xfb"
- "\x1b\xe5\x17\xba\x79\x6d\x3f\x84\x8e\x16\x69\xcd\x1a\x0c\x8e\x51"
- "\xfe\x26\xdc\xe3\x86\x2f\x9f\x8b\x8e\x49\x59\x90\x68\xf4\x21\xc4"
- "\xce\xa0\x7c\x25\xad\x24\x07\x04\xa2\x19\xab\xd1\xf8\x4d\xd0\x09"
- "\xbe\x21\xfd\xa2\x0d\xdd\x2c\xc6\x71\x0b\xff\xa6\x4b\x49\x7c\x9c"
- "\xd6\x91\x1f\xfe\x32\xa9\x6e\x5b\x97\x72\x69\x36\xb5\x9b\xa8\xfd"
- "\x5a\xe9\xf7\x2e\xfa\xbd\x8c\x7e\x6f\xa2\xdf\xcb\xe9\x77\x3a\xe5"
- "\x57\xb5\xfc\x29\xf4\x3e\x81\xd2\x6f\xd4\x7e\xa9\x8f\x89\x38\xcf"
- "\x4e\x7b\x02\x7c\xe5\x7d\x48\x9f\xf2\x39\xde\xe9\xf7\x43\x6d\xdc"
- "\x2d\x72\x6d\x27\xee\xa7\x7a\xf2\x91\x0f\xfb\x1a\xa5\x39\x28\x4f"
- "\x19\xea\x86\x5f\x05\x7a\xbe\x2d\x82\x3f\xa5\x7a\x2e\x79\x84\x7e"
- "\xe7\xd3\xef\xf5\xf4\x9b\x47\xe5\xe1\xcf\x33\x8d\x60\xd0\x16\xa6"
- "\x17\x09\x4b\xb2\xf2\xe5\x7c\xd2\x1c\x36\x61\xbd\xeb\xf4\x00\xf8"
- "\x34\x22\xdf\x0a\x99\x4f\xca\xaf\x97\x24\xe9\x73\x17\x10\x73\x67"
- "\x6e\x0f\xd0\xdc\x51\xfd\xb7\xa1\x3c\xfd\xde\xae\xfd\xa6\x6a\xbf"
- "\x77\x68\xbf\xff\xac\xfd\x2e\xd6\x7e\x97\x78\x94\x44\x9f\xc6\x9b"
- "\x10\xcc\x12\x85\x9e\x9c\xd6\xae\xd6\xee\x14\x3b\xe4\x6b\xa2\xff"
- "\x37\x21\x8e\x23\xb5\x5b\xa3\xeb\xad\xa1\xfb\x19\xde\x1e\x73\xd1"
- "\x6e\xa1\xfb\xb9\xa4\x21\x82\x16\x3a\xe2\x94\x54\x46\xbc\x53\x74"
- "\x8d\x81\xf8\x06\x59\x4f\x9c\x41\x3b\xaf\x47\x3c\x18\xc4\xd5\x84"
- "\x9f\x42\x21\x47\xc5\xdf\x82\x73\xcf\x63\x42\xa7\xbf\x03\x3e\x8a"
- "\x86\xf2\xe8\xaf\x98\x64\x8a\x6d\x3a\xbd\x87\xbc\x24\xe5\xfc\x89"
- "\x7f\x19\xdc\x3e\xc5\x16\x96\xf3\x2f\x69\x93\x67\x9b\x97\xfe\x92"
- "\xd2\x23\xe4\xff\x4b\x4a\xd1\x67\x82\x75\x3b\x8d\x67\x7e\x87\x32"
- "\x05\x77\xbd\x6f\xe8\x94\x63\x4e\xd1\xc7\xac\xcd\x95\x43\x87\x79"
- "\xa7\x92\x18\x20\x7a\x98\x0b\xfc\xee\x08\xd1\xe5\xc4\x00\x7e\x35"
- "\xfc\xa1\x79\x4e\x7c\x19\xf3\x1d\x41\x4f\x52\xc3\x74\x7a\xca\xa1"
- "\x91\xf3\x92\x70\x28\x20\xf9\x85\x76\x5a\x97\xc0\x81\x6d\xa3\xd6"
- "\x65\x1a\xd6\xa5\x56\xd6\x3f\x92\xc6\x5f\x9c\x06\x1a\xaf\xf5\x91"
- "\xf0\x36\x51\xd8\xe8\x79\x94\x29\xed\xda\x9e\xd4\x4e\x7b\xe4\x4d"
- "\x94\xbe\x54\xf6\x53\xa6\x6b\x6d\x11\xfe\x25\x2e\x06\xfe\xeb\xe9"
- "\x1a\x7e\xa3\x9e\x85\x98\x6b\x3d\x5d\xab\x9f\xf0\x34\x71\x3e\xd6"
- "\x8f\x9e\x2e\x71\x72\x52\x29\xe8\x0d\xca\x06\x84\x2d\x23\xc9\xdf"
- "\xf7\x35\x51\xbf\x2f\x6d\x24\xfe\xa2\x1e\xeb\x79\xeb\x26\x16\xb7"
- "\xa1\x9a\xc5\xcb\xb5\x79\xe9\xe7\x7a\x59\xa1\xd3\xdf\x7e\x69\x8b"
- "\x4e\xa3\x2a\x04\x3d\x9b\x9c\x3a\x92\x56\x4e\x5d\xc5\x9d\xe6\x40"
- "\xc0\x34\xb4\xfa\x48\x60\xbe\xa0\xb9\xb4\xee\x6b\x06\xb7\x5b\x8d"
- "\x1e\xf6\x8a\x45\xdb\x4b\x5a\x04\xaf\xa6\x58\x7f\x74\xa4\x5e\xd2"
- "\x2e\x59\xb7\x35\x44\xff\x22\xf8\x10\x41\xeb\xd1\x16\xea\xa2\x7d"
- "\xc5\xe2\x2b\x4a\xbf\x48\xd2\x6f\x6b\xba\x87\x5d\x99\xa8\xd3\x56"
- "\xec\x4f\x66\x85\x39\xca\xef\x93\xfb\x93\x0a\x1d\x98\xc3\x27\xfc"
- "\xd3\xb5\x3a\x7a\x19\xf6\x4d\xf8\xff\xce\xd8\x18\x0b\x9f\x55\xe9"
- "\xd4\xd7\xbb\x88\x3f\xdb\xab\x9d\xcd\x90\x9c\x7b\x59\x10\xb2\xac"
- "\x06\x57\x5a\x4f\x97\x1d\xd7\xe6\xe5\x18\xf5\x67\x2f\x68\xfb\xd6"
- "\xf5\x32\xa6\x12\xf4\x41\x22\xc6\x17\x78\x56\x2b\xf7\x8b\x58\x06"
- "\xdb\xad\xdd\x11\x3a\x2e\x6d\xbd\x5d\x7a\x44\xc4\xa8\x28\x19\x5a"
- "\x2d\xf5\x89\x97\x3d\x2a\xd3\x2f\x4b\x97\x76\x08\xc2\xcf\x28\xde"
- "\x17\x47\x59\xa7\xfc\x4d\xe8\x5f\xa3\x63\x66\x4b\x7e\xe4\xb2\x05"
- "\x11\x36\x3f\x02\xd6\xc2\xcf\xf1\xf6\xcb\xd2\xc2\xeb\xe2\x32\xf8"
- "\x82\x36\x52\xd9\x1e\x4a\xcf\xd1\xd3\xe5\x5e\x93\xb0\x50\xd3\x99"
- "\x39\x2e\xda\x92\xca\x88\x36\x47\xef\x76\xea\xeb\xf7\xb2\x66\xd1"
- "\xbe\xb6\x7e\x31\x46\xe0\x03\xd6\x70\x00\x7e\xc5\x68\x0d\x63\x2d"
- "\xd3\x73\x5e\x40\x5f\xbb\x92\xbf\x13\x77\xce\xe4\xba\xbd\xac\x3d"
- "\xa2\x1f\x95\x1a\xae\x1e\xeb\x7b\xc0\x1a\x47\xdf\x7c\x1e\xc5\x24"
- "\xcf\xb2\x14\xab\x94\x31\x76\x74\x1c\x54\x07\xb8\x1f\xba\x69\xe8"
- "\x13\xa0\xb3\xd1\xec\x55\x71\x56\xe2\x83\xaf\xb4\x4a\x5a\x0f\x61"
- "\xff\x68\x16\xa6\xfb\x47\x1b\xdc\x3e\x75\x71\x58\x77\x6c\xdd\xab"
- "\x8d\x6b\x35\xb5\x57\xe3\x2a\x7c\x0f\xb8\xf4\x8c\x5c\x63\xd6\x2a"
- "\xe0\xb1\x9b\x70\x8f\xf6\x9f\xea\xc3\x05\xa2\x6c\xb1\x8e\x7b\xb4"
- "\x46\xb3\xba\x94\xcb\x27\x55\x4d\xe1\xd5\x34\xa7\xb0\xdb\x5f\x4d"
- "\x78\x10\xa4\xdf\x2c\xf9\xab\x58\xf0\xab\xe1\x7c\x35\x95\xa5\xf5"
- "\x3f\xb3\x51\x9f\x03\x5f\xfc\x6c\x87\xc0\xb1\x42\xd8\x37\xa6\x88"
- "\xb3\x7e\xe0\x18\xf0\x4b\x9c\xf9\x13\xae\x99\xb7\xfc\x0b\x03\x9e"
- "\x09\x9f\x29\xf4\x8e\xfe\x02\xcf\x06\xb7\x5f\x6e\xd2\x7d\x1e\x7b"
- "\x94\xa9\xf2\xbc\x6d\xfb\xe5\xd3\x74\xdb\x70\xe0\x61\xde\x4c\x76"
- "\x09\xd5\x6f\x6b\xb2\xf9\xa0\x3b\xff\xda\x1d\xb8\x83\x21\x2f\x60"
- "\x27\xe9\xe5\xa5\x4d\x54\x26\x62\xfe\x13\x84\x2d\xeb\xe1\x15\x42"
- "\x9f\x79\x31\x7d\x5b\x3d\x92\xe6\xc4\xf8\x05\x5f\x49\xd4\xf1\xaa"
- "\x44\x86\x73\x7a\xda\x6b\x2e\xaf\xd4\xf9\xe1\x79\x94\x46\x79\xd0"
- "\x3f\xc8\xe0\x6d\xf4\x5c\x89\x7d\x7a\x1c\xbd\xf3\x7c\xe8\x8a\x40"
- "\x33\xa0\x7b\x82\x1e\x8c\x60\x7d\xb4\x4b\x99\x31\xe9\x08\xfc\x17"
- "\xad\xfd\xbe\xdf\xeb\xc2\x7c\xde\x0f\x7f\x5a\xb6\x5c\x76\x71\x87"
- "\x72\x85\x0f\x7a\xa7\xa2\xef\xa0\xe3\x99\x66\x1d\xa9\xe3\x99\x96"
- "\xa3\xfd\x15\xd0\x9f\x27\xfc\x37\xdd\xa1\x3d\xf7\x9e\xff\x6f\x7a"
- "\x89\xcc\x3b\xbd\x8a\xfe\xea\x25\xac\xac\xb4\x56\xa6\x15\xe8\xb0"
- "\x02\x4d\x01\x8d\x85\x9d\x0d\xd6\xb9\x12\x60\xf0\x97\x44\xf3\x44"
- "\xfd\xde\x7a\xcd\x4f\x5d\x9b\x20\xd3\x4e\x13\xb1\x0b\xe0\xbf\xf8"
- "\x82\x6c\xbd\x94\x69\x62\x3e\x85\x7f\x59\x65\x9a\x83\xda\x4e\xac"
- "\x38\xcd\x8c\x8e\x5c\x36\x1d\x3a\x74\x73\x90\xbb\x20\x03\x03\x27"
- "\x08\x06\x6d\x3d\xca\xf4\x5f\xe6\x6d\x66\x06\xfa\x3e\x83\x9e\x33"
- "\x75\x5e\x8a\xca\x58\xa2\xfc\x2c\x11\x3c\xd4\xed\x9b\xd9\x8c\xc1"
- "\xed\xd3\x17\xea\x73\x05\x3e\x03\x7a\xbc\x50\xbc\x2b\x65\x9a\xb0"
- "\x05\x80\x2f\x7f\x0f\xe0\xa6\xd3\xaa\xd3\xd0\x5d\x4f\xb7\x47\xf9"
- "\x98\x45\xee\x43\xd3\x8b\x69\x5e\x53\x25\xbe\x4c\x5f\x4c\xb8\x7f"
- "\x34\xa2\x9f\xff\x14\xf1\xbc\x1d\xe5\xcd\x3e\xf0\x70\xe3\xc1\x67"
- "\xfa\x11\x1d\x3e\x15\xc2\x07\x28\x73\x88\xf9\x0e\xf0\x5e\xea\x5b"
- "\x8b\x63\x13\x33\xf5\x28\x57\xbc\x45\x63\xc4\xdd\xe0\x66\xa9\xe3"
- "\xbf\xe2\x35\x5d\x4e\x97\xfd\xbe\x62\xb3\x79\x4b\x14\x83\x6e\x1e"
- "\x3e\x23\x85\x2d\xe6\x19\xab\xd0\xc7\xbb\x03\x0b\x99\xab\xf0\xc7"
- "\xc8\x73\xa7\xb6\x97\x1d\xeb\x2b\xb2\xb2\xc3\xd6\x85\xb4\x8e\xaf"
- "\x20\xde\xe6\x9c\xe5\x82\x6d\x5e\x95\x2b\x96\x68\xf0\x6d\x11\xb6"
- "\x22\xca\x15\x97\x61\x2f\x81\x6e\x80\xf6\x11\xf0\x68\x93\xa9\xee"
- "\xbd\xfa\xba\xa1\x7d\xa2\x89\xca\x58\x25\x8d\x39\x4e\xbc\xc5\x15"
- "\x89\xf0\x5b\x23\xe4\x07\x99\x3f\x4e\x9e\x1b\x5c\xd1\x1e\xe2\xb7"
- "\x29\x1f\xca\x09\x1b\x42\x65\x7a\x6f\x46\x10\xba\x84\xe9\xbd\x18"
- "\x9b\x86\x8b\xb4\x5f\xcd\x30\x85\xd7\xed\xf4\xc5\x62\xdd\xf6\x46"
- "\xae\xcb\x19\xf6\xb0\x9c\x7a\xf9\xb1\xb9\x55\x6c\x4c\xbb\x27\x47"
- "\x02\xf6\xaa\x19\xcf\x57\x54\xf0\xfa\x4a\x83\xba\x68\x6b\x39\x8b"
- "\x53\x4a\x09\x6c\x58\x67\xeb\x33\x2f\xa1\xf5\xb8\xdf\x1c\x77\x69"
- "\xda\xed\x79\x13\x79\xa1\x95\x19\xca\xce\x4e\x34\xcd\xf4\x5f\x5a"
- "\xcf\xa3\xae\xf9\xe9\x5d\x79\x38\xfb\xae\x64\xdf\xae\x66\x51\xb7"
- "\x13\x95\xbb\x2a\x8e\x39\x3c\xca\xcc\x06\xdc\x73\x3f\x1c\x07\x5e"
- "\x64\x66\x03\xea\x2c\xa8\x61\xa6\x82\x4e\xde\x5d\xfa\xe0\x04\x13"
- "\xed\xbf\x16\xda\x37\x4a\x2e\x8a\xbb\xb4\x7e\x98\xea\x78\x37\x53"
- "\x94\x1b\xd3\x46\x44\xf6\xcd\x76\xd3\xd8\x7d\x73\x4c\xe9\x52\x6c"
- "\x77\x5c\x58\xdf\xae\xf4\x85\xfb\x76\xa5\xef\x7f\xa1\x6f\x9f\x44"
- "\xf4\xcd\x12\xee\x5b\x0e\xfa\x76\xfc\xc2\xfa\x96\x34\x3f\xdc\xb7"
- "\xa4\xf9\xff\x60\xdf\x0e\x8c\xdf\xb7\x99\x8f\x8c\xdd\xb7\xfc\x4b"
- "\xbb\x94\x99\x9b\x2f\xac\x6f\xb3\xf2\xc2\x7d\x9b\x95\xf7\x3f\xe9"
- "\x5b\x61\x0d\x3f\xd1\x3a\x8d\xc1\x9f\x66\x1c\xe8\x7c\x97\x72\xe5"
- "\x96\xcd\xd3\x84\x1d\xf7\x64\x7a\xbe\xa9\xa8\x86\x7f\x23\x79\x9b"
- "\x99\xe7\xe4\x9e\x36\xd3\x4b\xf8\x2b\xed\x4a\x94\x2b\x3d\xc2\xce"
- "\x25\x6a\xea\x3e\xee\xe4\x81\xeb\x7c\xb0\x19\x0c\xc0\xb7\x0b\x7c"
- "\xc1\xef\x7b\x75\xc0\x8f\x38\x1c\x8d\x75\x67\x8d\xec\xd5\x01\xaf"
- "\x61\x70\xfb\x95\xc9\xba\x3f\x57\xbd\xac\xb9\xfa\x7c\xf4\xe8\xca"
- "\x95\xb7\xe7\x30\x33\xe8\x11\x7e\x11\x4f\xb3\xa2\x70\xa2\xe9\xf6"
- "\xef\xb0\xef\x5f\x99\xaf\xdf\xd7\xd5\xeb\x5a\xd6\x3d\x91\x9b\x0b"
- "\x58\x14\xee\x0c\x0b\xdf\x8f\x56\x2f\x4b\x2a\x60\x13\x96\xe5\x53"
- "\xfd\x7e\x96\x69\xce\xa7\xba\x09\x1e\x92\x97\xbf\xf2\xad\xa8\xd5"
- "\x2c\xae\x8a\xea\xc6\xef\xed\xd6\x22\xbe\xf5\x79\x66\xc4\xdd\x62"
- "\xdc\x11\x96\xf7\x83\xa3\x4d\xd4\x8e\x47\x6f\xe7\x07\xe0\x97\x20"
- "\xe1\x77\xd5\xbb\x61\xf8\x5d\xf5\x68\x18\x7e\x57\xfd\x48\xc2\xef"
- "\xaa\x94\x30\xfc\x92\x6c\x17\x06\xbf\xab\x56\x87\xe1\x27\xcb\x9e"
- "\x1f\x7e\x57\xbd\x30\x3e\xfc\xae\x6a\x0c\xc3\x4f\xd6\x35\x0e\xfc"
- "\xa2\xc7\x86\xdf\x55\xc1\x7f\x0c\x7e\x49\xb6\x7f\x10\x7e\xf1\x12"
- "\x7e\xb3\x94\x30\xfc\x92\xde\x08\xc3\x2f\x69\xa3\x84\x5f\x92\x23"
- "\x0c\xbf\x59\x99\x17\x06\xbf\xa4\x03\x61\xf8\xc9\xb2\xe7\x87\x5f"
- "\xd2\xf1\xf1\xe1\x97\xe4\x0f\xc3\x4f\xd6\x75\x61\xf0\x9b\x75\x33"
- "\xc1\xcd\xa2\xc1\xcf\x32\x3e\xfc\x66\x65\xfe\x83\xf0\x33\x4b\xf8"
- "\xcd\xbe\x2d\x0c\xbf\x59\xfd\x61\xf8\xcd\x7a\x53\xc2\x6f\xd6\xc1"
- "\x30\xfc\x66\xd7\x5f\x18\xfc\x66\xf5\x86\xe1\x27\xcb\x9e\x1f\x7e"
- "\xb3\x67\x8e\x0f\xbf\xd9\x0b\xc2\xf0\x93\x75\x8d\x03\xbf\x89\x63"
- "\xc3\x6f\xf6\xe6\x7f\x0c\x7e\xb3\xeb\xcf\x07\xbf\x0b\xe3\x35\x66"
- "\x8f\x7b\xff\xfd\x02\xeb\x09\x8c\x57\x0f\x60\x08\xfb\x44\x75\xfb"
- "\xec\x40\xad\x1a\x6d\x92\x77\x38\x66\x37\x90\x0c\x73\x6b\x87\x32"
- "\xe7\xce\x5a\x75\x82\x89\x3b\xbf\x39\xa6\x3a\x4f\x6c\xe3\x5b\xa2"
- "\x8d\xea\x96\x89\x46\xf8\x33\x18\x37\xe6\xba\x32\x67\x7f\xd4\x65"
- "\xec\x0a\xdc\xd7\xdb\x4a\xfc\x1a\x9e\x07\xb7\xcf\x69\x20\x5e\x24"
- "\x75\x34\x4c\xb2\x56\xad\x13\xc1\x3e\x73\xb3\xb3\x1e\x5d\x93\xb5"
- "\x72\x4d\x9e\x6d\xe5\x03\x0f\xaf\x1b\xe9\x43\x5f\xc4\xc9\xdc\x86"
- "\xf9\x9b\xe3\x0f\xf9\x98\x71\xf2\x7c\xf8\xea\x73\x5c\x09\xdb\x34"
- "\xfb\x02\x11\xd7\x20\x76\x38\x89\x0f\xa7\xef\x4a\xbd\x8a\xbf\x23"
- "\x7c\x10\x0e\xe7\xec\x22\x79\xaa\x05\x7e\x65\xb4\x73\xa8\x96\x2e"
- "\xe5\x9a\x9f\xf0\x18\x5e\x09\x9b\x0e\x71\xb7\x43\xb1\xeb\x77\xb0"
- "\x9a\xb9\xa9\x3f\x49\x2d\x41\x7c\x2d\x5e\x02\x18\xb4\xc2\xff\xdb"
- "\xfa\xa8\x19\x1d\x4a\x72\x22\x8f\xe9\x4f\xe2\x25\xfd\x76\xed\x8c"
- "\xc3\x0e\x7b\xd1\xd4\x4d\xfc\x6b\xd4\xa7\xf1\x82\x88\x5b\xe2\x92"
- "\xfc\xa0\xfd\x88\x79\x8b\x2d\x0a\x79\xe1\x87\x11\xfe\x09\xf5\x58"
- "\x55\xe8\x37\xf2\x12\x3f\x7e\x2b\x95\xbf\x15\xb1\x3a\x43\x75\xc8"
- "\x3e\x5d\xdc\xa3\x5c\x6d\x14\x63\x29\xf1\xb5\xf5\x3d\x96\xbe\x4b"
- "\xc4\x8b\x14\x70\xbd\xf6\x1c\x8d\xa1\x4d\xc4\xf9\x0c\x9c\x11\x71"
- "\x3e\xb5\x32\xd3\xa9\x8c\xa0\xa7\xf0\xbd\x2a\xeb\xb8\xf6\xb8\xde"
- "\x2f\xe2\xa1\x63\xe9\xfd\xc3\x88\x36\x2e\xa2\xf7\xd7\x22\xbe\xc7"
- "\xd1\xfb\x33\xc4\x87\x4e\xd2\xbe\xc7\xd3\xfb\x46\xf0\xa5\x62\x5c"
- "\xe5\xc5\xd2\x26\x5a\xb9\x76\x05\xa5\x59\xb4\x3c\x93\x28\xcf\x6d"
- "\xe0\x75\xb5\x3a\x26\xd3\xfb\x2c\xc8\x8c\xda\xf7\x44\x7a\x8f\xc1"
- "\xb9\x80\xf6\xfd\x92\x1e\xe5\x9a\x53\xf4\x3e\x47\xfb\x4e\x7c\xfd"
- "\x35\xc2\xd7\x16\xc1\x7d\x1a\xc6\x44\xb0\x77\x00\xee\x04\xeb\x69"
- "\xdc\xe4\x6b\x21\x79\xb5\x08\xf3\x88\x71\xba\x36\xf5\xb0\x0e\xe5"
- "\x9a\xcb\x70\x2f\x4f\xce\x15\xaf\x94\xfe\x81\x0c\xe9\x94\x6e\x45"
- "\x3a\x6c\xcb\xd5\x1d\xdc\x81\x67\x82\xe9\x6b\x80\xa1\xd6\x16\xc9"
- "\x44\xd7\xa4\x6a\xf3\x4c\xb0\x83\x0f\x5f\x56\x5c\xa7\xcd\x05\xf5"
- "\x6d\x22\x7d\xdf\x23\xcf\x3d\x70\xbf\x68\x58\xde\x2f\x52\xae\xc9"
- "\xf9\x6f\xf9\xac\xa0\x72\x92\xee\x5d\xb3\x4f\x8f\x61\x48\x69\xc2"
- "\x57\x06\xf0\x13\xfa\x15\x6f\x8c\xaf\x51\xf8\x68\x21\x1c\xd5\x71"
- "\x05\x78\xc2\xa3\xe7\xb8\xa4\xae\xe6\x9a\xd0\xfd\x5f\x2a\x6b\xd3"
- "\xe2\x3e\x30\x29\x27\x5c\xcb\xc2\xf6\x45\x57\x0b\xfa\x10\xf1\x6d"
- "\x5a\xc4\x37\xdd\x2f\xa1\xf4\x39\xb5\xfd\xda\x05\x11\xdf\xaa\x46"
- "\x7d\x5b\x1e\xf1\x6d\xdb\xa8\x3a\x1d\x11\xdf\xf2\x46\x95\x2b\x8d"
- "\xf8\x96\x39\xea\xdb\xbe\x88\x6f\x69\xda\xb7\x28\x4a\x77\x85\x7c"
- "\x24\x2a\x57\xa7\x6a\xe9\x44\xeb\xaf\x6d\x8f\x48\x4f\xd1\xd2\xd1"
- "\xbe\xd7\xc3\xfe\x7a\x4c\x4b\x17\x78\x4e\x78\x34\x5b\xb6\x91\x1c"
- "\x17\xd1\x06\x93\x32\x96\xaf\x51\xce\x9f\x3d\xdf\xac\xd8\x26\x02"
- "\xa7\xcc\x5b\x8a\x11\x43\xa8\x52\xfa\x03\x93\xeb\x50\xc4\xa1\x46"
- "\xac\x5c\xca\x37\x1e\x6d\x1c\xdb\x46\x30\xb9\x58\xbf\xc7\x1a\x2c"
- "\xf1\x1d\x52\x4b\x86\xa1\x9b\x9e\x01\xbf\x61\x45\xbd\xf0\x1d\xa3"
- "\xc7\x24\x1c\x62\xee\xbc\xc1\xe2\x56\xbf\xb8\x6f\x8b\xfb\x10\x09"
- "\xf0\x7b\xd6\x2a\xf4\x3b\xa7\x64\x5c\x42\xdc\xef\xdd\xe1\x3b\xb4"
- "\xa1\x97\x4d\x73\xdc\xc2\x3b\x21\xe7\x49\x9a\x90\x0c\x7a\x62\xd6"
- "\x68\xda\xf3\xc2\xd6\x5b\x99\x9b\x82\x34\x77\xaf\xd0\x33\x9b\xba"
- "\x94\xb9\xc5\xfa\x77\x39\xde\xb9\xc5\x42\x96\xd6\xee\x15\x0e\x6e"
- "\x9f\x6b\x0f\xc5\xcd\x54\xe6\x6e\xeb\x8f\x57\xba\x29\x6d\xe1\x48"
- "\xfb\xc6\xb9\xf7\xa0\x4e\x8c\xc3\xa3\x24\xfb\x51\x37\xe5\xc9\x0c"
- "\xd9\x37\x52\xfa\x86\x00\x9b\x4a\x7d\xeb\xd2\xeb\xa7\xef\x24\xff"
- "\x27\x0b\xb9\x12\x75\xf6\x97\xd9\xad\x94\x56\xe5\x31\xbc\x5f\x2c"
- "\xed\x23\xe7\xd6\x7b\x58\x47\xca\x78\xfb\x9f\xd0\x49\x9a\xf8\x3e"
- "\x5e\xc2\x0f\xd2\x9a\xaf\x17\xf6\xca\x31\x7c\x9f\x94\xe5\xe7\x9e"
- "\x42\x2c\x32\xc4\xf0\xc6\xb9\xa3\xa4\x3b\xd7\x09\x7b\x08\xa4\x11"
- "\x6c\xf6\x11\x7d\xbe\x70\x5f\xa1\xca\x5c\xb1\xff\xc1\x77\x13\xee"
- "\x5c\xe0\x0e\xc7\xe0\xf6\xeb\x96\x84\x62\x3d\xe8\xf7\x09\x94\xeb"
- "\x7e\x09\x1d\x5f\x85\x2a\xfb\x38\xba\x0f\xe8\x2f\xd5\xd5\x3b\xee"
- "\x5e\x6a\xe2\x42\x57\x44\xbc\x4c\xb3\xb4\x25\xbb\xee\xcd\x28\xeb"
- "\xe5\x04\xf7\xeb\x1a\x42\x31\x2e\x28\x4f\x39\x6c\x82\xa9\xfe\xd0"
- "\x38\x73\x45\x1b\xc7\xa4\x9e\xfe\x3a\x2f\xd1\xb1\xfa\x8a\x21\x66"
- "\xd4\xd2\xbd\xad\x01\x3f\xee\xd6\x8f\xe9\x83\x0b\x7b\xa4\xf0\xdf"
- "\xb4\x93\xd7\xe3\xfe\xc4\x3c\xbf\xde\xe7\x79\x5e\xd8\xed\xa3\xcf"
- "\x12\xb6\xf3\x4e\xe8\x70\x2c\x3b\x4b\x75\x17\x7e\xc1\x3a\x95\x79"
- "\x8f\xc0\xbe\x45\xc0\x64\x93\x6e\x73\x35\xef\x11\x91\x6f\x28\x94"
- "\x47\xe8\x3b\x60\xef\x0b\x38\xd5\xc2\xef\x00\xd5\x59\x4e\x73\x21"
- "\xe2\xd8\x2a\xf3\xde\x10\xfa\x4d\xfa\x2e\xc6\x2d\xec\xd9\x52\x12"
- "\x25\xae\xcc\x3b\xe0\x51\x52\x6c\x12\x07\x65\x1a\x62\xc0\xc3\x0e"
- "\xe1\xb4\x32\xaf\x0c\xb1\x64\x09\x1e\x07\xe1\xbb\xae\xd5\x47\xeb"
- "\x25\x7f\x08\xb8\x70\x10\x31\x03\x3d\xca\x3c\x19\xcb\xca\x04\x98"
- "\xcf\x83\xaf\x3e\x71\xc6\x83\x38\xba\x04\xd3\x81\xc1\xed\x29\x21"
- "\xfd\x07\x62\xf6\x52\x9e\x71\x7d\x37\x02\x46\x41\xea\x73\x2b\xf1"
- "\xab\xae\xa9\x5f\xa0\x7f\x9f\xa8\xb1\xbc\x1e\xf6\x93\xf4\x2c\x7d"
- "\x5f\x94\xc8\xb9\x93\x78\x90\xb2\x3f\xca\x3a\x6d\x66\xab\xc4\x05"
- "\x19\xc7\x5c\x49\x49\xd3\xe0\x27\x62\x5e\x54\xae\x97\x70\x90\xf9"
- "\xaf\x37\x4a\xbd\xcc\xb4\x39\xd4\xaf\xfa\xb0\x5e\xe6\x7a\xa3\xd0"
- "\xa9\x69\x36\xd6\xf4\xed\x50\x44\x9f\x7d\xe2\x1e\xe0\x59\xc8\xd4"
- "\x29\x59\x68\xab\x0c\xbe\xc5\x80\x17\x3d\x91\xf8\x9f\x72\x07\xfa"
- "\x09\xdb\xbc\x60\xcc\x50\x33\xdf\x31\xd4\x02\x38\x53\x99\x02\x5a"
- "\x0b\xf5\xe3\xc4\x89\x17\x71\xaa\x06\xb7\x5f\x9f\x1c\x11\x7b\x97"
- "\xf6\xc1\xeb\xef\xd5\xf7\x39\xec\xd1\xf0\xf3\x10\x4a\x2b\x5b\xd4"
- "\x4e\x3c\x0e\xd3\x78\x9c\x71\xe3\xc4\x57\x5c\xc7\x52\x70\xd7\x18"
- "\x76\xda\xc0\x37\x1e\xb7\x28\x1f\xbe\x93\xe1\x07\xd2\xb5\xe9\x06"
- "\xea\xef\x0d\xf1\x4f\x4f\x11\xf7\x1b\x7d\xae\xeb\xce\xc2\x46\xa7"
- "\xb7\xab\x40\xf8\x37\x32\x2d\xcb\x0f\xf0\x3a\x19\x7b\xdb\xcb\xe3"
- "\x17\x61\xff\xed\x15\xb1\x03\x50\xe7\x7f\xd7\x0f\xb0\x72\x7d\xbb"
- "\xc6\xcb\xf4\xd2\x5e\x7e\x29\x8d\x47\xdc\x67\xa4\xe7\x29\x3d\xca"
- "\x8d\x37\xc9\x78\x91\xd2\x97\xbd\x66\x6b\x18\x2d\xef\xe7\x7b\x99"
- "\xb8\x2f\xad\xdc\xb0\xdf\x76\x0d\x63\xbd\xca\x0d\x2f\x0b\xbf\xd2"
- "\x25\xfd\x16\x0d\x06\x96\x0a\xd9\x2f\x73\x46\xbe\x41\xf4\x11\xfd"
- "\xbb\xb0\xbe\xdd\xa0\xef\x97\xd1\x83\xdb\x6f\x68\xd4\xef\xf5\x8b"
- "\xf1\x6b\xfe\xa6\x5d\x57\x42\x6e\xb9\x71\x96\xc4\xc1\xfe\x44\xad"
- "\xed\xc4\xff\x85\xb6\xbd\xda\x7e\xd8\x2d\x7c\x6e\x13\x5c\x88\x7f"
- "\x24\x5a\x74\x63\xaa\xbe\x9f\x6a\x36\xf2\xc9\x72\x9f\xbf\x31\x3d"
- "\xbc\x97\x4a\x18\x8e\xb8\xb3\xb3\x76\x6d\x9e\x8d\x18\x76\xc7\xca"
- "\xbc\x07\x72\x6c\xd9\xb9\xff\x1f\x7b\x5f\x03\x17\x55\x99\xef\xff"
- "\xcc\x01\x15\x6d\x06\x26\xd7\x6d\xa9\x45\x9b\x5a\xaa\xb1\xb5\xa2"
- "\xcd\x8a\xca\x8a\x34\x77\xa9\x55\xb1\x56\x77\x29\x4d\x51\x51\xc7"
- "\x44\x1d\x11\x11\x15\x79\x4b\x59\x22\x66\x60\xc3\xed\xa2\x02\x5a"
- "\xd7\xfa\xdb\x6e\x2f\xd4\xb5\x7b\x69\xaf\x6d\xd3\x65\x06\x46\x1b"
- "\x18\xb6\x3f\xdd\x8b\xbb\xfa\x6f\x72\xc9\xc8\xd0\x26\x45\x19\x99"
- "\x99\xf3\xfc\x7f\xbf\xf3\x9c\x61\xce\x00\x03\x33\x03\xbe\xe4\x95"
- "\xcf\xe7\x7c\x0e\xe7\x39\xcf\x3c\xe7\x79\x7e\xbf\xef\xef\xed\x79"
- "\x4d\x5f\x93\xae\xc2\x0d\x6f\x7a\x9d\xab\x14\x41\x0b\xef\x49\x13"
- "\xcf\x7e\xdb\xd7\x73\xf6\x5b\xe1\x3d\xfb\xa5\x67\xf2\xd9\x64\xf7"
- "\xd4\x0e\x4f\x5c\x73\x8f\xdf\x75\x7e\x65\x1c\x5f\x03\x57\x2d\x5c"
- "\x06\xb8\xcc\x18\xe7\x2c\x74\x90\x04\xb0\x8f\xc2\x98\xb0\x77\xbd"
- "\xfa\x3d\x25\x38\x0e\x7e\x4c\x36\xf9\xee\x6a\x3e\x9c\x08\xfb\x9a"
- "\x14\xf0\x38\x97\x04\xf7\x47\xaf\x85\xcb\x00\x97\x19\x2e\xe1\x77"
- "\xfc\x7f\x09\x6b\x6d\x6b\xa4\xef\x70\x6c\x9a\x16\x18\xa6\x60\x1e"
- "\x9a\x1f\x2e\xf8\x21\xfc\xcb\x2c\x5f\xaf\x3a\x70\xb4\xf0\x8e\xfd"
- "\x62\x3e\x41\x37\x44\xe6\x13\x55\x3f\xf9\xc2\x68\xe1\x6d\x36\x31"
- "\x9f\xb0\xf6\xdd\xd3\x1e\xdc\xbb\x1f\xf2\x7b\xf2\x85\xd3\xc2\xbb"
- "\xb5\x62\x3e\xb6\xa7\x59\x01\xd7\xdf\x77\x47\xd0\x82\x73\x31\x62"
- "\x3e\xa5\xb4\x3c\x49\x9e\x91\x7c\xe1\x8d\x8f\x63\x1e\x3e\x3f\x9c"
- "\x9d\xc3\x52\x78\x4f\x0b\xe4\xef\x37\xd6\x0b\x8e\x4f\xf7\x66\xf7"
- "\xe6\x93\x76\xc9\x8a\xa5\x0f\xae\x58\x9d\x89\x27\x49\x65\xac\x59"
- "\x9f\x81\xf7\xd5\x8b\x56\x0a\xb7\x35\x0b\x97\x2d\x61\xff\x64\xa4"
- "\xc5\xe1\x3f\x69\x80\x37\xbc\xa7\xae\xd7\xe2\x6d\xc9\x1a\x7c\xcc"
- "\xd2\x4c\x5a\xbf\xc4\x73\xa4\xb7\xcf\xbe\x4b\x5d\x85\xf7\xc5\xda"
- "\x64\x93\xc7\x31\x7f\xe4\xbe\x38\x9b\xec\x36\x61\x1c\x38\x2a\xdf"
- "\x46\x4c\x6a\xe1\xec\x3f\xd2\x67\xbf\x02\xd9\x7d\x0f\xe3\x7e\x05"
- "\x51\xf9\xda\x25\x51\xae\x15\x4b\xe9\x8b\x4e\x2c\x27\xcd\x46\xf6"
- "\xb2\xb5\xe5\x45\x67\x55\xc2\xbe\xa1\x85\xf7\x1e\xf0\xcc\x2f\xe4"
- "\x8b\x3a\x5b\x70\x3f\x7c\x61\xbe\xd1\xcb\xb8\x17\xce\x59\x5c\x7b"
- "\x15\x53\xfd\xb2\x70\x2e\xcd\x38\x78\x7f\x04\x9e\x63\xe1\x39\x1a"
- "\x9e\x63\xf8\xa2\xaf\x52\x70\x7d\x22\x3c\xab\xe0\x39\x16\xca\xb7"
- "\x78\xe4\x42\x4a\x1b\xf1\xb0\xb9\x07\xfb\x8d\x8f\x7d\xf7\x98\x02"
- "\xd9\xba\x5f\xe9\x39\xcb\x57\x38\xb7\xb7\xf0\x7e\x55\xcf\xb9\xbd"
- "\xc2\x59\x4e\xca\xf9\x82\x5d\x13\x6c\xfb\xfd\x55\x61\xd1\xe3\x33"
- "\x99\x1f\x7e\x7f\xa2\x67\x4f\x06\xe6\x67\xdf\x9f\x2c\x39\xf3\x18"
- "\x9f\x35\x3d\x67\x1e\xb3\x7d\xc9\x76\x0a\xfb\x1e\xc9\xee\xaf\xa1"
- "\x85\xf7\xb5\xf6\x9c\x4f\x57\x78\x7f\x99\xf4\x7c\x3a\x1b\xbc\xc7"
- "\xf8\x06\xd2\xf7\x79\xed\xe0\xfd\x53\xf0\x9b\xfd\x9d\xef\x0c\xf1"
- "\x79\xd6\xc2\x8d\xe0\x8b\xc3\x5d\xf0\xcb\x45\x1f\x18\xd3\x69\x41"
- "\x02\xee\x6f\xa3\xc2\x77\xe8\xfb\xf5\xdb\xe7\x80\xe7\x2b\xca\xe2"
- "\x1f\xc3\x7d\x77\xed\xb9\xa9\xb2\x9f\x55\xe3\x1c\x24\x78\x66\xfb"
- "\x46\xd2\x53\xb2\x78\x61\x1d\x9b\x67\x4f\x39\xe9\x9a\xf8\x7e\xd7"
- "\x1e\x7c\xe6\x19\x33\x4e\x5b\x13\xe5\x5a\xb4\x94\xf9\x71\xf1\xaf"
- "\x32\x5d\xda\xcd\xd6\x7d\xca\xe2\x4b\xe8\xd3\xec\xbc\x13\x9b\xec"
- "\x01\x25\xae\x47\x8a\x92\xa5\xad\xa1\xf0\xdb\xa8\xac\x45\x4b\x85"
- "\x34\xc8\xf7\x02\xf8\x5a\x62\xfd\xd6\x5a\x63\xda\x09\x3d\xe7\x66"
- "\x6b\xfd\x65\xf1\xda\x05\xe3\xf3\xf0\x3b\x11\x82\x1f\xf1\x19\x91"
- "\xe3\x59\x81\x58\xb7\x6a\xc9\x9e\x77\xa5\x90\x86\xf3\xb1\xce\x3c"
- "\x4d\x84\x7d\x7f\xc5\xba\x68\x85\xb3\xca\x0a\x1f\x88\xf0\xec\x99"
- "\x63\x83\xb4\xde\xed\x79\xfa\x37\x82\x84\xdc\xb2\x64\xd2\xec\xe9"
- "\xf0\xdf\x24\xf1\x98\x5b\x29\x76\x62\xce\x8c\x71\x47\x9f\x79\xa3"
- "\xf4\x5f\x84\x73\x22\x0b\x1f\x48\x06\x3e\xb9\x04\x7e\xbf\x30\xef"
- "\x1b\xd4\x2d\xc2\xf9\x89\xb8\xae\x90\xef\x84\xef\x4e\x79\x42\xd8"
- "\x5f\x97\x63\xfe\xa2\xb0\xaf\x5d\xe1\x03\x31\x74\x4c\xa7\x81\x9d"
- "\x11\xeb\x34\x00\xff\x04\xbb\x8f\xb2\x21\xac\x9f\x54\x62\xdb\x1f"
- "\xa8\x01\x9d\x3a\x0d\xae\xdf\xb1\xf3\x61\xe6\x7d\xe3\x29\x17\xf7"
- "\x8f\x02\x6c\xa9\xe1\xae\x84\xef\xb7\xf6\xcc\x11\xea\x59\x93\xf9"
- "\xc0\x79\xdc\xdb\xaa\x67\x7d\xae\x6c\xca\xbd\xcc\xaf\x7c\x30\xdc"
- "\x46\x6e\x2d\x63\xf2\xfd\x20\xe0\xdf\x2c\xae\xcd\x7a\x10\xe2\xdf"
- "\x5f\xa7\xf8\x96\xf1\xe0\x52\x4f\xdf\x07\xe3\xdd\x83\x09\x80\xc5"
- "\x69\x70\xfd\x0e\xf2\xcf\xf0\x9c\x91\xfd\x02\x27\xac\x2d\x3a\x1e"
- "\x16\x4d\xe2\x20\x3d\xd5\x93\x3e\x42\x96\x00\xb4\x79\x30\xc3\xa3"
- "\x4f\xce\x8c\xe9\x6e\x81\xe7\xad\xe0\xa7\xbb\xc4\x67\x1b\x3c\x6f"
- "\xf7\x3c\xc3\xff\x7b\x3c\xfa\x06\xe3\xb3\x33\x9b\x93\x77\x60\xfc"
- "\xb7\x24\x1a\x7c\xb2\x68\x8c\xaf\x1e\x84\xf8\xb7\x41\x88\x95\xce"
- "\x44\xde\x1a\x77\xa6\xe0\xd0\xa4\xce\xc8\x47\xb4\x9d\xa0\x43\xe1"
- "\xdd\x11\x1b\xf9\xf3\x7c\xb1\x9c\x76\x1b\x57\x6f\xf6\xf2\x23\x2c"
- "\x0a\x68\x7c\x84\xb5\x69\x8a\x0a\xfe\xb7\xe1\x79\xe5\x5d\x85\x0f"
- "\x29\x6d\xb2\xfb\x1c\x42\xbe\xcc\x8e\x3d\x25\xdd\xca\x39\x56\x88"
- "\xe0\x0d\xcb\x10\x2b\x0f\x09\xeb\x93\x75\x9b\x94\xb3\xd1\xe7\xc3"
- "\x7d\x08\x84\xfd\xc9\x70\xcf\x49\x17\x19\x29\xec\xf3\xaf\xbb\x4d"
- "\x2d\xec\x6f\xbf\x41\x2d\xf7\xec\x37\x09\x72\xaa\xa5\xdc\x3b\x19"
- "\xb8\x07\xa5\xd0\x97\xd6\xa5\x8e\x14\xf6\x9d\x14\xf7\x9b\xac\xca"
- "\x24\xe3\x2a\x79\xb6\xdf\xa4\xb0\x47\xc1\x00\x7b\x4e\xd2\x82\xaf"
- "\x27\x7b\xf6\x9c\x04\x3a\xe0\xda\x43\x35\x3d\xe7\x72\xc0\x3d\x56"
- "\xb2\xd7\x4d\x78\xbf\xfb\x4f\x72\xa0\x37\x39\xb6\xff\x64\x70\xf6"
- "\xe6\xa1\x0e\x86\x93\x29\x93\x3c\x67\x78\x4b\xd2\x12\x40\x5e\x44"
- "\x3f\xe7\x01\x87\x98\x36\xc7\x46\xea\x3b\x7a\x7c\x33\xd0\x77\xd8"
- "\xa7\x08\xef\xb3\x69\xae\x66\x87\x54\xae\x88\xf0\x87\xa6\x7b\x04"
- "\xd8\xe5\x91\x70\x8d\xc2\x2b\xb1\x47\x7f\x9c\xa3\xad\x18\x23\x44"
- "\xc9\xc0\xde\x64\x85\xd1\x24\x97\x2b\x6c\xa1\x4b\xd6\x82\xbe\x27"
- "\xae\xb9\x4e\x72\xbb\x70\xed\x7f\x78\x92\xfb\x0c\x9e\xaf\xd9\x82"
- "\x6b\xc9\x4a\x97\xe1\xda\xc6\x1b\x29\x9e\x53\x93\xe4\xfe\x8e\xee"
- "\x66\x6b\x36\x9b\xc5\x33\x33\x2d\xee\x4c\x6a\x06\x3e\xc8\x31\xee"
- "\xc0\xfd\xb7\x22\x65\x0e\x12\xa9\x0d\xfb\x78\xd6\xd9\x8f\x29\xee"
- "\xbd\x85\x67\x94\xf1\x85\x0e\xd0\x95\x2a\xd9\x42\x57\x58\x9e\xd5"
- "\xd5\x26\x9c\x13\x90\xe4\x1e\x45\x93\xb2\x1e\xa6\xc2\xd9\x62\x99"
- "\xd4\x08\x7a\x36\x4c\x38\x43\x7b\x23\x3d\x03\xff\x47\x24\x6d\x3c"
- "\x43\xf1\x7c\x4f\x28\xdb\x9c\xe4\xe2\xbb\x93\xb2\xf8\xdc\x85\x59"
- "\x32\xf8\xdd\x3f\xe1\x77\xff\x84\xfa\xc4\x41\x99\x4a\x78\x7e\x94"
- "\xee\x5e\x86\x6b\xa0\xf2\x84\xd8\x07\xda\x68\x10\xd7\x95\xd6\xe2"
- "\x99\x9e\xb8\xcf\xf8\x42\x97\x21\x6f\xb7\xb8\x4e\x54\x38\x5b\x36"
- "\xcb\x49\xc5\xef\xc4\x27\x6d\x24\x8f\x2e\xdc\x78\xa3\xb0\xde\x14"
- "\xd7\x52\x25\xb9\x54\xf0\xcd\x3c\xa4\x87\x5c\x38\xcf\x5b\x58\x4f"
- "\xf5\x70\xeb\x40\xe7\x7b\xf6\x1b\x6f\x17\x8f\x4d\xa6\xba\xba\xfd"
- "\xb4\xf8\xc7\x6a\xaa\x33\x4e\xa6\x45\x4e\xd4\xcf\x32\x5a\xfc\x13"
- "\x07\x3c\x43\xfa\x0d\x66\xaa\x33\x4d\xa6\xc5\xe3\x2b\xe0\x0e\xcf"
- "\x2a\x0d\xd5\xd5\x4f\xa6\x85\xce\x38\xf8\x1d\xd8\x31\x17\xfe\x2e"
- "\x8e\x16\xba\x55\x70\x87\x67\x3e\x1a\xf2\xc1\x33\x55\xc2\xbd\x86"
- "\x16\x63\x3f\xcb\x23\x95\xf0\x9b\x38\x5a\xfc\xb3\x78\xf6\xad\x5b"
- "\xe3\x85\x6f\x15\x4f\x8c\x67\xdf\x98\x14\xcf\xbe\x71\x57\x3c\xfb"
- "\xc6\x2f\xe2\x85\x6f\x14\xe3\x5e\x24\x75\xb5\xb4\x98\xd3\x42\xbe"
- "\x78\x5a\x1c\x66\x83\x3b\x3c\x8f\x98\x0d\xf9\xe0\x79\xa4\x01\xee"
- "\xf0\x1c\x01\x75\xa9\x87\xe7\xd1\x7b\x20\xff\x01\x5a\x7c\xcd\x38"
- "\xc8\x37\x85\x16\xcb\x8b\xe0\x0e\xcf\x0a\x17\xe4\x83\xe7\x28\x28"
- "\xc7\x04\xcf\xca\x36\xc8\x0f\xcf\xf7\x62\x7d\x0c\xb4\xf8\x3e\x2c"
- "\x37\x81\x16\xc7\x63\x7e\x78\x7e\x10\xca\x33\xc1\xf3\x43\xad\x70"
- "\x87\xe7\x87\xf3\x20\x3f\x3c\x3f\x0a\x6d\xad\x33\xd2\xe2\x84\x16"
- "\xc8\xf7\x38\x2d\x9e\x0a\xe9\x46\x78\x7e\x7c\x12\xe4\x83\xe7\xe9"
- "\x98\x1f\x9e\x7f\xb5\x15\xf2\xc3\xf3\x13\x48\x23\x33\x2d\xfe\x75"
- "\x19\xe4\x4b\xa4\xc5\x33\xed\x70\x87\xe7\xd9\x58\x7f\x78\x7e\xba"
- "\x06\xee\xf0\x3c\x17\x68\x55\x0f\xcf\xbf\x83\xfa\xd5\x41\x6c\xfa"
- "\x0c\x96\x3f\x83\x16\xcf\x47\xfa\xc0\xf3\x02\xa0\x9f\x09\x9e\x17"
- "\x01\x3d\x4c\xf0\xbc\x24\x15\xf2\xcf\xe8\x9f\x9f\xcb\xa6\xd0\xfc"
- "\x91\x84\x16\xaf\x99\x4f\xf3\x47\xc1\x7d\xad\x9c\xe6\x8f\x50\xd3"
- "\xe2\x8c\x34\x48\x87\xfb\xda\x36\x78\x9e\x24\x3e\xc3\x3d\xfd\x00"
- "\x3c\xc7\x89\xcf\x70\x5f\xb7\x1d\x9e\x27\x8b\xcf\x70\xcf\x8c\x81"
- "\x67\xa0\x6d\x66\x27\x3c\xe3\xbd\x08\x9e\xa7\x88\xcf\x70\xcf\xaa"
- "\x85\xbb\xcb\x3e\x5e\x9f\x65\x57\x94\xc7\xd9\x15\x0d\x7b\x70\x3e"
- "\x92\x5b\x5f\x57\xc3\x47\x1a\x71\x6f\xe0\x91\xb9\x67\xc9\xa8\xe3"
- "\xb2\xc7\x9e\x42\xbb\x67\xcd\xb6\x09\x67\xd5\x89\xfb\xcd\x8d\x3c"
- "\x26\x4b\x58\x0a\x76\x3e\x1e\xcf\x2c\x87\xb6\x77\xd0\x82\x11\xa7"
- "\xa1\xcd\x69\xb4\xe0\x9a\x63\x70\x87\xe7\x6b\x3f\x83\x36\xc3\xf3"
- "\x7d\xc5\x70\x87\xe7\x79\x53\xa1\xed\x69\x5d\x85\x09\x46\x9b\xec"
- "\x61\xa6\xb3\xdf\x28\x2d\x8b\x72\xe5\x82\x9e\x00\x3d\xba\xa3\x29"
- "\x25\xca\x95\x02\x74\x32\x27\x44\xe1\x99\x12\x55\xfa\x5a\x1a\x59"
- "\x2e\xd4\x09\xcf\x8d\xa1\xce\x58\x8e\x7d\xfb\x1a\x0a\xdf\xfe\x1e"
- "\xfb\x33\x69\xe4\x9f\xfd\xbc\x7f\xec\x5a\xe1\xfd\x0d\x4d\x5a\xf6"
- "\x5e\x49\xbc\xef\x7f\x87\xef\xef\x8e\xc2\x3e\xe8\x09\x39\x5a\x9b"
- "\xec\xb1\x64\xcc\x63\x93\x25\x64\xd0\x82\x30\x62\xed\x6c\x17\xdb"
- "\x38\x0a\xf3\x3d\x83\xbf\xf3\xd7\xaf\xc2\x97\x58\x2a\x74\x05\xb4"
- "\x19\x63\x48\xd0\xfb\x9c\x2a\x27\xb6\xf6\x98\x6c\x9a\xba\x4a\xe8"
- "\x1b\x68\x8a\xc7\xb5\x3d\x50\xc6\x49\x67\xb1\x4b\xa9\xda\x14\x05"
- "\xe5\x4d\x9b\x98\xeb\xa0\x9d\x86\x9c\xa9\x60\x9f\x84\xf4\x19\x6c"
- "\xbe\xb8\xf0\x7f\x3c\x9b\xe3\x23\xfc\x1f\xcb\xfa\x39\xa7\xa9\xf1"
- "\xb7\x52\x9f\xdd\x5d\x98\x16\xcd\x47\x36\x25\xb0\x31\xaa\xc7\xbe"
- "\xff\x88\xb7\x71\x51\x19\x64\x84\x6a\xd3\xc7\x50\xfe\xd4\x78\xdf"
- "\xf8\xce\x93\x57\x78\x37\xfe\xaf\x90\x77\x97\xd0\x17\x33\x35\xd1"
- "\xd3\x8f\x4b\xa1\x0d\x2f\x31\xdf\x26\x01\x6d\x11\xf3\xd1\xa6\x9a"
- "\x71\x4f\x4b\x97\xdc\xac\x72\x95\x94\xab\xdc\x25\x4d\xf1\x54\xdf"
- "\x94\x10\xe9\x92\x11\x36\xd7\x7e\xaa\xfb\x2e\x07\xf6\x91\x1d\xc2"
- "\xbc\x1f\xf0\x23\xd7\xcf\xb8\x33\x8b\x70\x86\xf4\xbf\xe3\xf3\x59"
- "\x5a\xb8\x69\xbf\xb5\xa3\x95\x18\xd2\x85\xb2\x3a\x69\x61\x61\x38"
- "\x3f\x32\x2f\xae\x1a\x7d\xcb\x2c\xec\xdb\xf9\x0c\xd3\x37\x02\x9d"
- "\xc1\x87\x9f\xda\xe2\xa9\x0b\xee\xed\xaf\x03\xda\xa1\xdf\x87\x6b"
- "\xa3\x17\xba\xdd\xb8\x8f\x53\x91\x0d\xe8\xc0\xfa\x07\xa7\xd6\xa2"
- "\x9e\x65\xdf\x9d\xa6\xe0\xc7\x38\x5d\x4d\xf3\x71\x1c\x54\x89\xfb"
- "\xe2\x74\x0a\x6b\x29\x5d\x78\x1e\x1f\xda\x37\x96\xd7\x67\x3f\xe3"
- "\x25\xda\x85\x9b\xb4\x6b\xd2\x33\x16\xae\xd7\x3e\xa8\x82\xc0\x4b"
- "\xb5\x66\x99\x6a\xd5\xd2\x55\x6b\xd2\x37\xf6\xf6\x0f\x23\xba\x0a"
- "\xa7\xa5\x01\x36\x84\xbd\xf2\x0f\x82\xcf\xc9\xfa\x8c\xa7\x4f\x41"
- "\x5e\xef\x78\x85\x9d\xff\x00\x79\xca\x6c\xe4\x75\x21\x8e\xe0\x2b"
- "\x9a\x92\x69\xa5\xbe\xf6\x45\x5c\x13\xbe\x1e\x7d\x7c\x3b\xb1\x92"
- "\xd3\x50\x37\x76\x16\x60\x13\xee\x5b\x90\x99\x4d\x0d\x99\xa7\x11"
- "\xe3\xa0\x1f\x1a\x12\x69\x55\x29\x39\xaf\x2b\xaf\x38\x26\x9b\xae"
- "\x3a\xaf\x6b\x88\xf7\x9c\xd7\xe3\x2e\x69\xa8\xe0\xe5\x96\x1a\x3c"
- "\xaf\xc7\x49\xa3\x49\x23\xd0\xb2\xbb\xc8\xd9\x0e\x3a\xbe\xad\xaa"
- "\x00\xec\x0e\xc4\x06\xc2\x7e\x09\x6f\x94\x6a\xdd\x54\x1d\xee\x2e"
- "\x20\x11\x70\x8f\xa4\x91\x8d\x36\xa7\xdc\x1c\x87\xef\xf1\x9c\x1e"
- "\xb7\x53\x4d\x72\x5a\x28\xff\xac\x06\x70\x53\x40\xa8\x70\x36\xaa"
- "\xe6\x24\x81\xf4\x31\xbc\xbe\xc1\x70\x3c\x91\x70\x98\x17\xfc\x1a"
- "\x32\x1f\xfe\xcf\x5e\x44\x14\x90\x2f\x2a\xfb\x20\xa4\x77\xa9\xc7"
- "\xb8\x72\xd5\x11\xdd\xb9\xea\x31\x4e\xaa\x96\x5b\xdb\x1c\xc4\x79"
- "\x4b\x69\xde\x1d\x76\x12\xbe\x03\xfc\x9f\x2a\x1e\xe4\xab\x52\xbf"
- "\xc7\xbd\x59\x3d\xd2\xb5\x59\x1d\xee\x74\xaa\x23\x5c\x1b\xd4\xe1"
- "\xdd\x1b\xd4\x23\x9d\x5d\xea\x08\x6b\xaa\x9d\x1c\xb2\xff\x89\x34"
- "\xb5\xb5\x0b\xfd\x8a\x4e\x45\x63\x87\x53\xd1\x60\x91\xb7\x91\x71"
- "\x77\x6a\x09\xfa\x43\xb2\x9d\xe0\x03\x03\x26\xe4\xae\xd7\x4b\x41"
- "\x7f\x36\x96\x01\x7d\x47\x4c\x9f\x48\xbf\x73\x17\x3e\xd9\xa2\x7a"
- "\x12\x74\x51\x7e\x78\xcc\x71\xd9\xe3\x80\x9f\xdf\x3d\x4e\x0b\x7f"
- "\x53\x02\xf1\xb8\x0a\x2e\x88\x6f\x05\x3e\x80\xef\xf5\x04\xe8\xb4"
- "\xf0\x18\xcc\xcb\xf2\x25\xb5\xda\x84\xfb\x0c\xb5\x70\x86\x69\xe1"
- "\xb4\xc9\x55\x42\x9c\x36\xbd\x67\xfe\xaf\x31\xbc\xff\x75\xe7\x90"
- "\x67\x7e\x4f\xbc\xcb\x83\x3e\xd1\xd5\xf5\xdb\xbf\x48\x8b\xcf\x1c"
- "\xc1\x31\x49\x1e\xe8\x06\xf5\x6d\xc4\xbd\xa2\x68\x6e\xa2\x18\x63"
- "\x4e\x17\xc6\xd6\x71\xad\x36\xf6\x43\x88\x69\xc2\x38\x15\xcf\x25"
- "\xe0\xde\xfc\xb5\xb8\x3f\x17\xf6\x3b\x00\xae\xcd\xd0\x0e\x1b\xd0"
- "\x61\x04\xc4\x67\x35\x70\xd5\xc2\x65\x28\xc7\xfe\x88\x02\x32\xdd"
- "\xd3\x57\xd3\x7f\x5d\x7f\x09\xf1\xcf\x1b\x16\x6f\xbc\xfa\xcb\x68"
- "\x28\x4b\x1b\xfc\x7c\xbe\x5f\x46\x0f\xd0\x6f\x1c\x8e\xfb\xcc\x52"
- "\x7d\x5d\x73\x19\xdf\xb3\x2f\x2d\xe8\xfd\x5f\xae\x02\x3d\x91\x27"
- "\xbc\x2b\x31\x27\xe4\x7c\x4f\xc2\xf0\x5d\x0d\xce\x5f\x80\x67\x55"
- "\xba\x8c\x5a\x3b\x1d\xa4\x0c\xc7\x11\x62\xf4\xb5\x35\xe7\xec\x1c"
- "\xca\x45\x13\xa4\xc1\x6f\xb7\x95\x9d\x13\xcb\xad\x68\x4a\xc9\x5d"
- "\x4b\x84\xb3\x46\xf0\xbc\x22\x94\x97\xb2\x1c\x88\x05\xf1\x6c\xa5"
- "\xf4\x30\xd0\x57\xbf\xfc\x04\xfe\x8f\xc0\x7c\x54\x6e\x4e\xe0\xa1"
- "\x0c\x90\x99\x7d\x54\x61\x56\xf3\xba\x86\x1a\xb0\x0f\x5a\x3a\xbe"
- "\x34\x9a\xdf\xd1\x94\xd8\x55\xf8\x2b\x6c\xbf\x10\xf7\xe3\x3e\x40"
- "\xd8\xd7\xe1\x86\x98\xbb\x69\x9f\x8b\xd0\xa9\x2e\x62\xca\x38\x4b"
- "\xec\xa3\x9d\x1d\x76\x85\xa5\xc2\xae\x68\x2c\x73\x2b\x2c\xad\x70"
- "\x1d\xd1\xa6\xe3\xf8\xef\xaf\x8e\xf4\xec\x67\xf9\xfd\xc0\xfb\x59"
- "\x42\x99\xb1\x9e\x3d\x2d\xdd\x1b\x82\xdf\xcf\xd2\xcd\x7d\xa1\xae"
- "\xca\x1c\x7c\x3f\x4b\xf0\x31\x9b\xc1\xbf\x34\x78\xf6\x1e\x71\x0b"
- "\xf3\xc9\x89\xdc\xad\x30\x47\x0b\xfb\x97\x64\x19\x84\x3d\x48\xd0"
- "\xd7\x44\x5b\xd3\x55\x98\x18\xed\xf1\x1f\x51\x7f\xba\x5f\x74\x3a"
- "\xe0\xc2\xf4\x38\x9b\x6c\x5e\xaa\x47\xb7\x82\x3d\x9d\xed\x1e\x53"
- "\x90\xd8\x85\x6b\x04\x9c\x9a\x47\x31\x2f\xd0\x11\xf7\x04\x0b\x73"
- "\x3b\x35\x53\xe0\x7a\x18\xae\x47\xdc\xba\x86\x04\xb7\xae\x51\xeb"
- "\xd6\x95\xcf\x81\x2b\x19\xae\xf9\x70\xa5\xc0\x95\x0a\x17\xf8\x91"
- "\xe5\x69\x70\xc7\xf7\x19\x70\x65\xc1\x95\x0d\x57\x1e\x5c\x5b\xdd"
- "\x3b\x9a\x66\xbb\x65\xe1\x31\x70\xc5\xc2\xa5\x72\xeb\x2c\xfb\xdc"
- "\x3a\xb3\x8a\xad\xdb\x4c\x34\x78\x70\xda\xff\xbe\xa9\xb7\xb2\xb3"
- "\x13\x46\x7c\x41\xa3\xf0\x5c\xdf\xec\xb3\xb8\x97\x9d\xda\xa4\xee"
- "\x0c\xee\x0c\x0d\x59\xa2\xdd\x1f\xae\xb1\x7c\xd0\x31\xce\xe0\xca"
- "\x7b\x22\xc1\x6f\x9f\x49\x74\x53\xb2\x2b\xa6\x94\xb8\x0a\x48\x1e"
- "\xe8\x35\x59\x53\x4a\x1b\x49\xb2\x93\x5c\x4b\x5b\x37\xc9\x4d\xa5"
- "\x6e\x41\x07\x64\xe3\x59\x2d\xef\x64\x20\xc6\xdd\x34\x59\xe5\x2c"
- "\x69\x48\x74\xcb\x2d\x5a\x2a\xb7\xec\x13\xf6\xc7\x03\x5d\x82\x67"
- "\x95\xf5\xc4\xa0\x88\x39\x88\x43\x1b\x3b\xce\x92\xcd\xa9\x94\x6f"
- "\xd4\x80\xef\xd5\x0a\xc0\x93\x91\x57\x05\xec\x89\x71\xe8\xaf\x8f"
- "\xd0\x3c\xc0\xd2\x68\x37\xd0\x8d\xc7\xf8\x13\x70\xb7\x3b\x93\xc4"
- "\x79\xb0\x07\x36\x5d\xe9\x39\xdf\x89\x8e\x4c\x6c\x81\x77\xe1\x78"
- "\xfe\x53\x25\xc4\xa1\x95\x99\x24\xb6\x12\xde\x09\x67\x75\x42\xbd"
- "\x67\x69\xa3\x28\xbf\x52\x4d\xaa\x9f\x27\x11\x8a\x93\xec\xfc\x57"
- "\x37\xd0\xde\x7b\x06\x42\x79\xc5\xcc\x93\x2a\x62\x52\x1f\x05\xdb"
- "\x5c\x03\x7c\x29\xaf\x70\x82\xfd\x02\x5a\xba\x83\xa3\xe5\x93\x25"
- "\x17\x8a\x96\xce\x18\xfd\x1e\x46\xcf\x14\x82\x34\xeb\x4d\x4f\xa4"
- "\xf1\xa6\x36\xa0\x27\xd0\xd5\xda\xe2\x86\x58\x92\x2c\xf2\xd0\x73"
- "\x17\xd0\x13\x68\x1a\x8d\x34\x05\x7a\x08\x34\xa5\x22\x4d\xab\x25"
- "\x34\x05\xdd\x25\xec\x25\x88\x34\xe5\x81\xa6\xd5\x7e\x68\xda\x13"
- "\xcf\x03\x4d\x77\x07\x44\xd3\x7d\x43\xa0\xe9\xaf\x6d\xfe\x68\xea"
- "\x42\xbf\x41\x5f\x5e\x46\x41\x2f\x5a\x5d\x87\x84\x7d\x31\xc1\xe7"
- "\x3b\x02\xbe\x6b\x2b\x2f\x6f\xa8\xc0\xf3\xbc\x71\x6c\x1e\xcf\x1b"
- "\x13\xf6\x71\xda\x47\xcf\xbb\xf5\x8d\x76\x4c\x03\xbd\xa6\xb9\x0b"
- "\xe7\x03\x69\x6d\x60\xbb\x68\x6d\xd3\x39\xec\x0b\x4b\xba\xbe\x1b"
- "\x7d\x6a\x7d\xd3\x5d\x3c\xd5\x10\xd4\x29\x0b\x26\x92\xf0\x6e\xd0"
- "\x1b\xda\x4c\x72\x63\x19\xe8\xc2\x6e\x9d\xe5\xc8\x09\xd9\x8c\xfd"
- "\xd3\xb5\x3c\x85\x2b\x17\xf7\x77\xe4\x41\xe7\x82\x2e\x17\xf8\x8b"
- "\x3c\xc3\x31\xbe\xc6\x05\xb8\xde\x64\xe6\xeb\x9f\xa6\xb8\x48\xae"
- "\xa6\x2f\x7f\xf9\xdc\x64\xf0\x3d\x07\x97\x13\x3c\xf3\x30\xbb\x1d"
- "\xf9\x5a\x43\xac\x6d\x5e\x39\xe1\x45\x1d\x8d\xbc\x40\xb9\x40\x19"
- "\x29\x95\xe8\x66\xd0\xfb\xca\x2a\xf1\x0c\x10\x77\x01\xe8\x66\xdc"
- "\xef\x1d\x78\x89\x67\x83\xf4\x2b\x1f\x9b\x41\x3e\x36\x09\xe7\x33"
- "\x45\x03\x3d\x6a\xba\xbb\x18\x0f\x91\x67\x56\x97\x59\xe0\x5f\x99"
- "\x68\x0b\x18\xdd\x2d\x7f\xa6\x34\x19\xfc\xb9\x49\x6a\x5e\xdf\x68"
- "\xa3\x5d\x9a\x31\x78\x46\x17\xc4\xfc\x71\x51\xa9\xe0\x3f\x7d\x07"
- "\xb6\x62\x35\xe0\xeb\x14\x89\xdd\xbd\x1a\x7c\xa2\x2e\x3c\x67\x0d"
- "\xea\xb3\x91\x9d\x4f\xcb\x17\x3e\x11\x0f\xef\x84\xfd\x2a\x79\xcf"
- "\x7e\x95\x67\xd4\xd8\x0f\xe1\xed\x1f\x5a\xa3\xe6\x7a\xbe\x59\x22"
- "\x33\xb8\xe5\x93\xd4\x6c\x7d\xe9\xac\x55\x6c\x0c\xb9\x4d\x38\xcb"
- "\xb5\x43\x36\x6b\x0f\xeb\xc7\xfd\x26\x55\x9b\x83\xf3\x7e\x66\xcd"
- "\xa5\xc5\xdf\x27\x6b\xf1\xac\x6d\xcf\xbb\xdc\x64\xa4\x83\xea\xce"
- "\x3c\x02\xba\x7c\x52\x22\x9e\xc1\x8e\x7b\x7f\x05\x87\xc5\x59\xc2"
- "\x7e\xb7\xee\x12\x99\x11\xe8\x94\xc0\xeb\x65\x16\xd0\x29\x71\x74"
- "\x25\xb4\xf5\x79\x68\xeb\x09\xa0\xeb\x09\x68\xeb\x06\xb1\xad\xe2"
- "\xd9\x73\x3c\xd0\x1f\xde\xf5\x6f\x1b\x3d\x6d\x5d\x09\xf4\x2e\xfa"
- "\x32\x6e\xcb\x49\xf2\x23\x0a\xfe\x78\x63\x87\xb0\xb6\xa7\xcb\xea"
- "\x3a\x4a\xf0\xbb\x82\xed\x2e\x29\xd7\xcc\x05\x3c\x22\xcd\xc1\x5f"
- "\x00\x9b\xd7\x60\xf0\xf0\x01\xeb\x43\x9d\x9a\x31\xd5\xab\x49\x9c"
- "\x40\xfb\x53\x64\x12\xca\x33\xd0\x3e\xb6\x1a\xe9\xef\x7b\xfe\xf3"
- "\x38\x81\x07\x23\x81\x07\xab\x45\x1e\xe8\x44\x1e\x80\xbf\x0c\x76"
- "\x38\x02\xe2\xc6\xe8\xea\x02\xc6\x83\xe0\x68\x94\xe4\xf7\xbc\xc2"
- "\x10\xe5\xb5\xd3\xbf\xbc\x3e\xdd\xd8\xcd\x62\x64\x19\xee\x9b\x49"
- "\x23\x9b\xee\xe1\x9d\x20\xb7\x7a\x51\x6e\xa9\xe6\x11\x8f\xcc\x1e"
- "\x97\xcd\x5e\x11\x98\xcc\x3e\xf5\xcc\xff\x52\x99\x1d\x77\x61\x65"
- "\xf6\xe9\x9b\x7c\x65\xf6\xe9\x39\xbe\x32\xfb\xf4\x68\xaf\xcc\x8a"
- "\xef\x86\x45\x66\x9f\x56\x5d\x1a\x99\x7d\x5a\xd5\x8f\xcc\xb6\x04"
- "\x20\xb3\xd1\x7e\x64\x36\xfa\xc2\xc9\xec\x6f\x1e\xbf\x78\x36\xf6"
- "\xb7\xdb\xba\xb9\x7e\x6c\xec\x66\x89\x8d\x55\xa0\x8d\x9d\x13\xdd"
- "\x9f\xbc\x3a\x2b\x41\x5e\xe5\xa2\xbc\x3e\xfb\x17\x28\x6f\xee\xb5"
- "\x87\x8e\x0c\x2e\xaf\xae\x4a\xaf\xff\xe4\x57\x66\x35\x28\xb3\xfb"
- "\x88\xd5\x26\xc8\xec\x22\x8f\xcc\x56\x8a\xb1\xd0\x00\x72\x3b\xce"
- "\x9f\xdc\xe2\x79\x5c\x78\x16\xd7\x80\x72\x2b\xfa\x4b\xce\xf1\x28"
- "\xb7\x86\xcb\xcc\xd6\xce\x3d\xec\x2b\xb7\xbf\x95\xfb\xca\xed\xdc"
- "\x4f\xbc\x72\x2b\xbe\x1b\x16\xb9\x9d\xdb\x7a\x69\xe4\x76\x6e\xeb"
- "\x0f\xc7\xd6\xfe\xd6\xef\xfc\xff\xe1\xb7\xb5\xcf\x3e\x26\xc8\xad"
- "\x3f\x5b\x9b\x2b\xda\x5a\x05\xda\xda\xdf\x7d\x1e\x98\xec\x26\x37"
- "\xfe\x2f\x97\xdd\x0b\x6c\x73\x9f\xf9\xa3\xaf\xec\x3e\x63\xf6\x95"
- "\xdd\x67\xb6\x78\x65\x57\x7c\x37\x2c\xb2\xfb\xcc\xf6\x4b\x23\xbb"
- "\xcf\x6c\xff\xe1\xd8\xdc\x67\xfd\xce\x95\x53\x4d\x20\x79\xc7\x64"
- "\xf3\xae\xb5\x56\x0a\xf3\xf8\xf2\xac\xae\x07\x09\x9b\x6f\x32\xef"
- "\x01\x6b\x74\x3c\xe1\x8b\x5d\x29\x78\x2e\x04\xce\x7b\x29\x97\xcc"
- "\x2b\x61\xf3\x20\xe6\x3d\xe3\x99\x17\xb3\x5b\x3c\x3b\x62\xa0\x79"
- "\x31\xb4\xc8\x29\xce\x9f\x98\xb7\x9d\x61\xc3\xe9\xf0\x3c\xb3\x7d"
- "\xab\xe6\x55\xd0\x17\x9d\x76\xfb\x68\xa7\xdd\xdf\x58\x51\x64\x3e"
- "\xa5\x78\xe6\xd2\x99\x09\xa5\xaa\x33\xc5\x84\x94\x09\xe3\x30\xf3"
- "\x9a\xa1\x8d\x0e\x36\x1f\x62\x9a\xf2\x4c\xc1\x6c\x02\x69\x6d\x9e"
- "\x34\xe1\x0c\xec\x82\x30\xca\xc3\x3b\xaa\x7f\xd9\xb5\x3b\x87\x44"
- "\xe0\x5e\xa0\x77\x9e\x43\x2c\xce\xeb\x04\x1d\x31\x0e\xcf\x6d\xc2"
- "\xb3\x32\xe8\x4f\x7e\xda\x59\x7d\x9a\x84\x37\x6d\x15\xfa\x9e\x71"
- "\x3e\xcd\x1e\x3d\xe2\x3f\xec\xf6\x0a\xca\x85\x13\xbe\xaa\x34\x82"
- "\x2a\x2c\x36\x61\xfe\x2e\x60\xc5\x33\xc7\x06\xcf\x3c\xe3\xc7\xeb"
- "\xf7\x79\xf6\xa2\xa4\x50\xbf\xbf\xe6\xd8\x39\x3c\xab\xbc\x3a\x9d"
- "\x28\xe1\x92\x53\x9d\xc5\xd6\x55\x38\x3f\xdb\xd3\x97\xe8\x77\x2e"
- "\x36\x9e\xe3\xfb\xd3\xe8\x70\x71\x3e\x0f\xae\xa9\xad\x10\xbe\xc3"
- "\xf1\x45\x6e\x48\xa7\x05\xb9\xc2\xd9\x59\x51\x40\x0b\x9c\x3f\x8b"
- "\x67\x1a\xf1\xd5\xa5\xaa\x17\x6e\x20\xe4\x9d\x4d\xed\x1c\xce\xdd"
- "\x70\xff\xcb\x4f\x3b\x0d\x39\xbf\xc0\x3d\x27\x84\xfd\xca\x8f\xcb"
- "\x9e\xdb\x98\xf4\x0d\x3b\xb3\x17\xfe\xdf\x86\xe3\x2f\x33\xe1\x19"
- "\xc7\xf2\xf9\x33\xd1\xe1\x98\x17\xd2\xef\x36\x64\xfe\x9d\x44\x69"
- "\x49\x84\x1e\xda\x26\xe6\x15\xd6\x70\xd8\x64\xcf\x09\x6b\x3a\xe0"
- "\x79\x1c\x8e\x19\xc0\xef\x22\x70\xce\x12\xad\x2c\x8d\x10\xf4\x43"
- "\x89\xc5\xc6\x8f\x2f\x8d\x10\xe6\x9e\x42\x3b\x4b\xa1\xcd\x90\x47"
- "\x8e\xf3\x73\x84\x7b\x0e\x51\x6e\x4f\xc7\xbd\x4d\x9f\xdb\x0a\x77"
- "\xb9\x61\x35\xce\x2d\x99\x6f\xc7\xb2\xfd\xce\xf1\x97\x5b\x6c\xb4"
- "\x20\x9c\xb0\x75\x3a\xb2\xbf\x1d\x93\x2d\x88\x8d\x92\x51\x4a\x2b"
- "\xf5\xfb\x5e\xc0\x3e\x6e\x9c\x57\x2d\xcc\x15\x7f\xce\x0d\xe5\x87"
- "\xef\x16\xfa\x70\x9f\x3b\x62\x93\xcd\x2f\xea\x99\x93\x2f\x8c\x37"
- "\x2d\x98\x8c\xdf\xc1\xdf\x88\xf9\xc5\xf3\x8d\x2c\x36\x55\x4e\x18"
- "\x85\xf7\xe3\xd9\xdc\xeb\x88\x65\x5d\x85\x0b\x62\xbc\x73\xce\x84"
- "\xdf\x01\x96\x16\x60\xff\xaf\xb0\x07\x3d\x3e\xfb\x9d\xd7\x2c\xf2"
- "\xad\x31\x1a\xb0\xd1\x9b\x77\x1e\x8c\x00\x2e\x3c\x18\xc1\xfa\xbe"
- "\x9b\x63\xe3\xd8\xf8\xc6\x82\x8f\x30\x9f\x1e\x78\xe8\xde\x15\x1d"
- "\x2e\xec\xf9\xed\x44\xbe\xe0\xfc\xf8\x85\xeb\x91\x2f\xa5\x60\x0b"
- "\xc4\xbc\x15\xde\xfa\xe3\xf3\x42\x81\x9f\x3c\xf0\x82\xcd\xd3\x5f"
- "\xf8\x84\x70\x7e\x0c\xe8\x0c\x9c\x23\x6e\xcc\x82\x7a\x21\x6e\x01"
- "\x23\xef\xa4\x3b\xb8\xea\x4c\x96\xfe\xd7\xd3\x0e\x0e\xe7\x7d\x60"
- "\x5f\xb8\xee\x79\x12\x8e\x7d\xea\x58\x26\x8d\xd1\x0b\xeb\x16\x04"
- "\x3e\x6e\x02\xde\x65\x02\x76\x81\xe6\xa5\x40\xbf\xea\x6e\x61\xbc"
- "\x6a\x5f\x35\x4f\xe4\x3c\xe4\xb3\xc9\x16\x6e\x85\xf2\x94\x55\xd7"
- "\x51\x3b\xce\xcb\x06\x1a\x6e\xea\x2a\x5c\x98\xe2\xa1\x21\xd6\x09"
- "\xe7\x55\xeb\x84\xf9\xf5\x0b\x8e\x30\x0c\x2d\x78\xcb\xd3\x66\x7f"
- "\xf4\xd4\xbd\x43\x62\x74\x77\x92\x78\x5e\x7e\xab\x9a\x86\xfd\x74"
- "\x0f\xf6\x37\xcf\xea\x20\x04\xf7\xb8\x4f\xda\xf6\x05\xb5\xda\xdd"
- "\x84\x57\xdc\xaa\xc6\xb1\x09\xf7\x0b\xb7\x8f\x4d\xda\x08\xf4\x02"
- "\x7b\x9f\xeb\x20\x4a\x6b\x8e\x9d\x9d\x73\x46\xbe\x27\xee\x75\xa0"
- "\xc3\x41\xaf\x83\x4d\x0d\xcf\xfd\x9e\x5c\x8f\xf4\xe2\x15\x0d\x89"
- "\xc7\x65\x29\xf7\xce\xcd\x20\x79\xc1\xe9\xd1\x14\x61\x5e\x2e\xfa"
- "\x17\xa0\xf3\x39\x9c\x4f\x67\xb5\x83\x7f\xa2\x6b\x48\x0c\xb2\x9c"
- "\x44\x7f\x3a\x12\xdb\xcd\x63\x3f\xb4\xd8\xe6\x24\x6c\x73\xa7\x83"
- "\x60\x5f\xfe\xac\xb5\xb8\x97\xe8\x59\xc2\xeb\x6e\x55\x63\x9b\xc1"
- "\xd7\x31\x07\xdf\xa7\x9f\x62\x1c\xe8\xdb\x14\xe8\xcd\xbf\xf0\xd3"
- "\x3d\xbc\xdc\x62\xc6\x6f\x63\x1d\x70\x7d\xcd\xac\xb3\x44\xa0\x3b"
- "\xd2\xdf\xea\x70\x13\xaa\x90\xd6\xc1\x15\x64\x1d\x16\xf9\x6f\xff"
- "\x9d\x24\xa6\xe4\x1d\xc6\x77\xf7\x0b\x22\x0d\x34\x38\x46\x66\x31"
- "\xe3\x1e\xf7\xb3\xb0\x0e\xf6\x93\x64\xe6\x49\x22\xf0\xdf\xaa\xee"
- "\x20\xee\xb0\xdb\xc7\xe2\x9c\x0a\xe4\x7f\x8e\x0b\xf8\x7f\xce\x81"
- "\xfb\x7f\xd8\xad\x79\xe7\x09\xfa\x2f\xae\x33\x6a\xae\x2f\xff\x17"
- "\xdf\x3b\x37\x2b\x58\xfe\x2f\x1e\x26\xfe\x2f\xbe\x0c\xda\xbf\x24"
- "\x84\xf6\x2f\x19\xa6\xf6\x2f\xb9\x0c\xda\x9f\x1a\x42\xfb\x53\x87"
- "\xa9\xfd\xa9\x7e\xdb\x3f\xed\x7a\x9e\x0a\x73\x6d\x22\xeb\x6a\xd0"
- "\x06\x30\x7b\xb5\xf4\x0e\x9c\x4b\x23\xac\xa7\x12\x9f\x09\x5b\x5f"
- "\x15\xd1\xeb\x59\xde\xeb\x59\xd9\xeb\x79\x5c\xaf\xe7\xe8\x5e\xcf"
- "\x31\x9e\x67\xb0\x23\x23\x4e\xc9\x52\xab\xc0\x2f\xcd\xb3\xc9\x96"
- "\xc6\x8b\xef\x63\x71\x7f\x1c\xb0\xe9\xb1\xfe\xce\xda\x53\xc8\x08"
- "\x75\x72\x94\x08\x67\xe0\xc9\x96\xbe\xd5\x5d\x40\x28\x0d\xbb\x41"
- "\x8d\xe7\x94\xf1\x25\xe5\x19\xb3\x40\x4f\x5b\xed\x0e\xf0\xf3\xa3"
- "\x47\x42\xd9\x3f\xc1\xf3\x17\x91\xaf\xaa\x74\x9c\x5b\xb3\x74\x07"
- "\xb6\xf3\x4e\xad\x81\xf0\x61\xb7\x0b\x73\x1b\x78\x5d\x79\x86\x3d"
- "\xec\xf6\x1b\xe8\x8e\xa6\xd9\xba\x02\x3e\xc2\xda\xd1\x42\xf4\x1c"
- "\xaf\xca\xce\x06\xfe\x76\xec\x27\x9b\x3b\x68\x7b\xb6\x8b\x3a\xac"
- "\xf3\x0d\x24\xd7\x8e\xe7\x97\x98\x49\x93\xbd\x45\x38\xc3\x44\x38"
- "\xab\xc5\xbe\x9f\xa0\xff\x93\x8b\x79\x20\xad\xc9\xfe\x16\x69\x84"
- "\x67\xc3\xea\xaf\xa0\x9d\xcb\x9e\xb0\x76\xbc\x05\xf1\x52\xb9\x96"
- "\x97\x97\xcf\xa1\xf2\xf2\xe4\xc6\x0e\x3c\xa3\xb5\x7c\x3e\xd6\xb5"
- "\x09\xea\x61\x75\xd5\x62\x9c\x35\x5f\x28\xb7\xb3\x59\x88\x49\x71"
- "\xcc\x96\x57\x40\x7e\x45\x79\x32\xd6\x0f\xeb\xd6\xff\x38\x6c\x5d"
- "\x1b\xd4\xfd\xc1\xb9\xea\x70\x82\x6b\x20\x82\xc3\xc8\xb2\x34\xbf"
- "\x7e\x74\x89\x31\x95\x95\x1b\x11\x4a\xb9\x7e\xf5\x3f\x94\x2b\xd6"
- "\x57\x19\x42\xb9\xcb\xfb\x9c\x79\xed\x2d\xd7\x24\xd6\x57\x15\x4a"
- "\xb9\x19\x03\x94\x2b\xd6\x37\x21\x94\x72\x2d\xfe\xcb\xad\x17\xeb"
- "\x9b\x17\x42\xb9\x1a\xbf\x6b\x08\x11\x0f\xa1\x61\x41\xe3\x77\x7d"
- "\x31\x62\x21\x34\x1c\x68\x06\x68\xbf\xb1\x2d\x34\x0c\xac\x50\x0d"
- "\x84\x81\xd0\xf8\xbf\x62\x40\xfe\x87\xc6\xfb\x15\xe6\x81\x78\x1f"
- "\x1a\xdf\x9f\xf7\x8b\x7f\x8c\x0d\x80\xf7\x7b\x68\x64\x53\x02\xaf"
- "\x2f\xdf\xc3\x47\xd6\xbd\xf6\x02\x9f\x40\xa6\x6d\x21\x24\xaa\x82"
- "\x5c\x3b\xad\xea\x0b\x9a\x20\xc4\xdc\xcf\xef\xdf\x52\x49\x38\x88"
- "\xa1\xb9\xb7\x37\xb5\x72\x56\x57\x3c\xea\x2d\xf7\xde\x4c\x87\xec"
- "\x67\x90\xfe\x09\xd8\xc1\x4e\xf0\x65\x59\x59\xe5\x7b\xf4\x39\x09"
- "\x44\x58\x1f\x07\x71\xc4\xac\xb5\x5f\x50\x5c\x77\x9c\xf4\x3d\xe8"
- "\xd7\x0a\xdc\xab\x90\x5c\x0b\xbf\x75\x01\x8e\xa1\x1c\x07\x79\x97"
- "\xb7\xcb\x66\xd9\x85\xbc\x76\x61\x7e\xba\xbe\xee\x35\x8c\x15\x68"
- "\xae\x1a\xf7\x1d\xb3\x1f\x97\xad\xbc\x25\xcc\x4e\xb8\x6a\xe1\xec"
- "\x9c\x95\x2a\x9b\x2c\x4d\x29\xae\x31\xed\x10\xf6\xc7\x83\xba\xe3"
- "\xfe\x78\x2f\x40\xdc\x80\xf9\xef\xd4\x12\xae\x4e\xd8\x4f\x78\xe5"
- "\x0c\xdc\x33\x6f\xa0\xb5\xda\xee\x12\xcb\x56\xfc\x3d\x2d\x01\xfb"
- "\x7c\x92\x70\x4d\x9d\x76\x42\x63\x4a\x89\x1e\xe2\x93\xe9\x13\xb1"
- "\x3f\xe5\x34\xc9\xd9\x42\x79\xec\xdb\xa2\xf2\x86\x78\x9c\x7b\xc8"
- "\xf6\x73\x5f\xd9\x8e\xb1\xbe\x78\x66\xd2\x0d\x27\xe0\x59\x88\x91"
- "\x70\x0e\x8e\xbc\x5c\x4d\xf5\x8a\x84\xa6\xce\xd3\x84\xed\x49\xbe"
- "\xf2\x1b\xdc\xbb\xec\x8c\xdc\x92\xd7\x29\xb7\x14\x41\xbd\xda\x3c"
- "\x6d\xc0\xef\x7b\xd2\x31\x26\xc4\x7c\x5d\x85\x69\xe1\x9e\xb5\xdb"
- "\x7e\xce\x15\x1e\x9b\x14\x4d\xed\x48\x5f\x56\x97\x55\x2b\x90\x07"
- "\xe0\x87\x64\x75\xe6\xaa\x27\xb0\x3e\x92\xb4\x32\x8c\xb5\xa1\xde"
- "\xa9\x2c\xee\x2d\x4f\x15\xd6\xe9\x83\x3d\x98\xab\xe6\x82\xf4\x89"
- "\xd3\xe6\x63\xdb\x0c\x13\xd0\xfe\xae\x7a\x0a\xca\x7f\xe8\x98\x2c"
- "\x8d\xed\x53\x59\x52\x9e\xc5\xd6\x5f\xa6\xcd\x86\x6f\x64\xc1\xb3"
- "\x0a\xf3\xc1\xfb\x16\xf1\x7d\x9e\xe4\x7d\x1e\xce\x45\x15\xdf\x77"
- "\x8a\xef\xb7\x4a\xde\x6f\xd5\x4e\xc0\x7e\x8f\x55\x31\xd8\x06\xa0"
- "\x63\x0a\xbc\xcf\x10\xf6\x38\x10\xce\x73\x2c\x4f\x11\xf3\x65\x74"
- "\xc8\x56\xdd\x7b\x06\x30\x06\xef\xb3\x25\xbf\xcf\xae\xcb\x8a\x23"
- "\xd3\xaa\x90\x86\xab\x12\x6d\x5c\x83\xb8\x36\x3b\x6d\x8e\xd0\x76"
- "\xb0\xa1\xd2\xf2\x6c\xb2\x55\xe3\xd0\x4e\x76\x82\x8f\x06\x79\xa6"
- "\xe0\x37\xa5\xf4\xf6\xac\x02\x55\xa5\xae\x5a\xa4\x5a\xb2\x66\xfd"
- "\x6a\x5c\xc5\xe7\xbb\x3e\x4d\x89\xeb\x5c\xf9\x12\xb3\xc6\x5a\x81"
- "\xeb\xee\x94\xc2\x1a\xef\xed\xc0\x47\x97\xbe\x71\x8f\x3b\xb2\x31"
- "\xce\xad\x6f\x98\x9d\x7b\x96\x70\x39\xd1\xf4\x4b\xc3\xa6\xa9\xe4"
- "\x94\x6c\xd5\x97\xc2\x39\x91\x2a\x61\x4f\xfc\x4e\xc3\xa6\xff\xc2"
- "\x34\x61\x2f\x30\x6b\x0a\x4b\xfb\xb7\x1c\x33\xf7\x71\x4e\x2b\x67"
- "\x49\x39\x4d\xea\xa2\xed\xc4\xa8\x3a\x8d\xfb\xc2\x76\xfe\x1b\xdf"
- "\xcc\xe1\xdc\xdc\x53\xb2\xd5\x4f\xe0\xb7\xb0\xff\x00\xff\x67\x7d"
- "\x21\xab\x1a\xf1\x3b\x38\x6f\x11\x68\xf3\x37\xfc\x1e\xb4\xaf\x39"
- "\xac\x12\xe7\x39\x13\x39\xe4\xd3\xf1\x3a\xb3\x46\x90\xf7\xc2\x55"
- "\x79\x2e\x4e\xfe\x27\x71\x5d\x1f\xa9\x1c\x8b\x73\x74\x57\x67\x49"
- "\xd6\xb9\xc9\xcf\x70\xe4\x51\x48\x2b\xf1\xec\x59\x81\x67\x07\xf9"
- "\xd3\x1f\xe7\x21\x4e\x3e\x5f\xa9\x2f\xe2\xe5\x66\xa0\xaf\x59\x63"
- "\x06\x0d\x16\x25\x9c\x45\xdf\x0d\x75\xd1\xa6\x51\x85\x39\x39\x07"
- "\xe5\x14\x68\xf1\x67\x9c\x43\x18\xd9\xb8\xe7\x2d\x9c\x33\xa8\x6f"
- "\x8c\xfb\x53\xa6\x83\x3b\x64\xa9\x25\xaa\xdf\xa2\x8f\xb5\xda\xfd"
- "\xeb\x54\xea\xba\xbd\xc5\x40\x2c\x6d\xef\x93\x4f\x8f\x98\x89\x7c"
- "\x3e\x09\xcb\xb5\x51\xb7\xd0\x97\x90\x41\xb8\x24\x1b\x09\xc3\xfd"
- "\x94\x70\x0f\x75\x3c\x2f\xbd\xc9\xd1\x08\x7e\xcf\x3b\x19\x6f\xe7"
- "\xb4\x8f\x50\x3d\x4d\xc0\x5f\x62\x63\xd2\xc2\x1a\x20\xbb\xb0\x2e"
- "\x5b\x81\xfd\xe3\x92\xb5\x3f\x19\x5b\x4e\x92\x88\x46\xcd\x51\x92"
- "\x9d\x42\x79\x9c\xe3\x97\x94\x12\x46\x85\xf5\x3f\x59\x90\x59\x0b"
- "\x3c\xdd\xa0\x8e\xdc\x99\x49\xc6\x35\x65\xd8\x88\xb5\xdd\x4c\x76"
- "\xa5\x93\x71\xb4\x4b\x33\xda\x62\x39\x44\xa8\x5e\xad\x7a\x37\xc7"
- "\x30\xc2\x33\x1f\x2b\x2a\x5f\x86\xfd\xa1\x91\x25\x38\x2f\xeb\x1c"
- "\x89\x5b\xf8\x55\x9e\xd0\x87\x8b\xfd\xe5\xae\x2e\xb5\xca\xd9\xa5"
- "\xbe\xb9\xbb\x4b\x3d\xc1\xd3\xcf\xfe\xdc\x0a\x25\xa9\xc2\x75\x43"
- "\x85\x8b\xe4\xb8\x6e\x08\xfd\x4b\x97\x62\x92\x1a\xfb\xd4\x85\xfd"
- "\x61\x36\xa8\x63\xf8\x25\x6a\x72\x97\x5d\x58\x97\x84\xfd\xfc\xca"
- "\xea\xc5\x50\xdf\x8e\xd3\x44\x3a\xb7\xe8\xfc\x06\x35\x87\xf3\x8a"
- "\x68\xe1\xea\xbd\xdd\x55\xfa\x22\x9c\x5f\x04\x76\x21\x3e\x78\xd9"
- "\xd6\x0a\xfe\x33\xb6\x1f\xf8\xb1\xe7\xad\xd3\xc8\x1f\xe0\xd3\x69"
- "\x3b\x87\xbc\x68\x4c\x45\x3e\x34\xfb\xf0\x41\xe0\x5b\xba\x83\x43"
- "\x7e\x20\x2f\x90\x27\x5e\x7e\x7c\x2e\xf0\xe3\x2d\x9e\xf1\xa3\x1b"
- "\xec\x81\x87\x27\xe7\x63\xf4\x15\x03\xf1\x05\xf9\x81\xbc\xb1\xb4"
- "\x1d\x25\x3e\x3c\xb1\x33\x9e\x00\x3d\xc7\x7a\xf8\x82\x3c\xb1\x76"
- "\x80\xcf\x0b\x7c\x79\xf2\x73\x42\x7e\x3d\x91\xf2\x8d\x33\x3e\xeb"
- "\xe1\x8f\xcb\x1f\x7f\xbe\xf1\xf2\x07\x78\xdf\x97\x3f\x27\x95\x38"
- "\xee\x83\xfc\x29\x0b\x86\x3f\x96\x36\xc6\x1f\x97\xc8\x9f\x89\x89"
- "\x84\x73\x74\xa9\xb9\x1d\x99\x24\x7e\xc6\x57\x2a\x62\x4a\x6e\x24"
- "\x40\xeb\xc9\xbc\xce\x92\x15\x9a\x1c\xad\xdb\x1f\xb8\x1c\xa5\x4f"
- "\xbf\x2a\x47\xc1\xca\xd1\xda\x8e\xa1\xc9\xd1\xba\xbc\xab\x72\x74"
- "\xb1\xe4\x68\x5d\x76\x6f\x39\xea\xb1\xd5\xe9\x4b\x57\x2d\x5a\xb1"
- "\x7a\xc5\xea\xe5\xaa\xc5\x1b\x33\x96\xae\x63\x16\xdb\xc7\x66\x47"
- "\xbb\x73\x12\x38\x3c\xf3\xdc\x52\xd1\x4c\xde\xbd\xa1\x99\x73\x7f"
- "\x1d\x1d\x4e\x4b\xa6\x6a\xf9\x92\xa9\x76\x3c\xff\x1c\xe5\x0d\xcf"
- "\x45\x3f\x2e\xdb\x68\xc3\xbd\x00\xd9\x3e\x2a\x1b\x85\xf9\x97\xe0"
- "\x1b\x46\xe3\xf8\xcb\x0b\x9b\x48\xf8\x0b\xb8\x2e\xda\x81\xfd\x1c"
- "\xc2\xfb\x27\x70\xdf\x32\x5a\x55\x1a\x8d\x7b\xd9\x74\xca\xcb\x55"
- "\x5b\xa1\x2c\xbb\xc2\xac\x09\x57\xe1\x3a\x92\xf5\xad\x60\x8f\x2b"
- "\xbc\x7b\x13\x6d\x94\xd3\x91\xeb\x27\xa1\x9c\xe3\x9a\xbe\x53\xb2"
- "\x4c\xc5\x79\xdc\xbb\x1d\xfc\xd7\xb9\x13\xe1\x3b\xe3\xf5\x15\xc2"
- "\xbe\x0b\x20\xf3\xec\xfd\x06\x61\x4f\x33\xa7\xbc\x61\xb6\x70\x6e"
- "\xbc\xbc\x71\xcf\x99\x92\xc6\xb8\x43\xd9\x35\x44\xf5\x34\xca\x7c"
- "\xe6\x03\x4f\x56\x80\xcc\xcf\x36\x90\xc6\xe8\x3f\x91\x4f\x93\x01"
- "\x6b\xc9\x83\xc9\xbc\x04\x63\x13\x02\x93\x79\x0f\xb6\x10\x53\x88"
- "\x2d\xc4\xd5\x35\x80\x2b\xc4\x9a\x07\x5b\xe5\xe7\x18\xb6\xa2\x8e"
- "\x10\xe5\xce\xd3\x80\x2f\x17\xc3\x17\xae\x73\x6e\xcc\xfa\xcc\xbf"
- "\xec\x9f\xeb\x85\x2d\x4e\xc4\xd6\x06\xc0\xd6\x06\x2f\xb6\xe6\x1d"
- "\x55\x92\x5d\x02\xb6\x52\xbc\xd8\xd2\x4d\x52\x7b\x70\x85\x18\x43"
- "\x3c\xf1\xcb\xd5\x04\xe5\xdd\x83\xb1\xea\x65\x6c\xfc\x54\x90\x7d"
- "\x0e\x64\xbf\x4b\x62\x43\xc7\x0f\x45\xf6\x37\x08\xfb\x3f\x20\x4f"
- "\x90\x3f\xc8\x17\xe4\xc5\x95\xc8\x07\x3c\x1b\x9a\x76\xf5\xc7\x8b"
- "\x85\x15\x83\xf1\x02\xf9\x80\xfc\x10\xf8\x00\xfc\xf0\x8c\x65\xe3"
- "\xd8\x26\xf2\x04\x79\x71\x67\x36\xe1\x90\x2f\xd5\x20\xef\x28\xe3"
- "\x40\xdb\x2c\xe4\x8b\xe0\xb7\x16\x28\x96\x6f\x1f\xeb\x3d\x33\xa6"
- "\xab\x70\xe3\xa4\xbe\x3e\xeb\xc6\x04\xef\x3e\x6b\xeb\xdb\x58\x8c"
- "\x61\x8e\x66\x63\x51\x9b\xfe\x20\xca\x30\xc1\x78\x4f\x88\xed\xdc"
- "\x10\xdb\xc9\x21\xb6\x2b\x81\xd8\x0e\xfb\xde\x84\x3d\x08\x36\xea"
- "\xd8\xb8\x18\xc4\x72\x8a\x86\x78\x88\x2b\x84\x3d\x11\x85\x31\x58"
- "\x85\x25\x0f\xc7\x8c\xa8\x0e\xe2\xc6\xd7\x38\x02\xcf\x80\x1b\x77"
- "\x90\x78\xd9\xf8\x96\x38\xc6\x6c\x67\xfb\xf3\x6d\xca\x66\xf5\x5b"
- "\x2f\xcc\x53\x10\xc6\xe7\x38\x7e\x8f\xfb\x05\xdf\xf1\x39\xe9\xf8"
- "\xed\xbb\x39\x76\x71\x6c\x6e\x93\xb0\xbf\x11\xea\x04\xd4\x63\x6f"
- "\xe7\x34\x73\xde\xf1\xb9\xcf\xf0\xfd\x52\xdf\xf1\xb9\x4d\x82\xbf"
- "\x67\x93\x6d\x2a\xc3\x39\x29\xf0\x3c\x83\xa5\xaf\xdf\x2e\x4d\xf7"
- "\x8e\x7f\xb3\x74\x5c\x03\x25\xc6\xd7\x1d\x2c\xb6\xde\xb4\xcf\x13"
- "\xc3\xfa\xf1\x67\x82\xd0\xb3\xb9\xf3\xbd\x7a\x36\x57\x88\x35\x69"
- "\x74\x53\x62\x63\x1f\x3d\x8b\x7b\x5b\xe5\x98\x66\xa1\x9e\x2d\x69"
- "\x48\x60\xf5\xdb\x7c\x2f\xd0\x24\x0c\xcf\x7a\xc3\x74\x5c\x2b\x84"
- "\x3a\xb7\x4a\xd0\xc1\x4d\xf1\x5b\x85\x31\xf8\xcd\x73\x7c\x75\x6f"
- "\x4e\x91\xaf\xee\xdd\xfc\xe2\xc0\xba\x77\xcb\x1d\x03\xeb\xde\xcd"
- "\x1f\x5c\xd5\xbd\xa1\xea\x5e\xf0\xbb\x86\xa4\x7b\xb3\x1d\x57\x75"
- "\xef\x85\xd2\xbd\xd9\x9d\x12\xdd\x3b\xc7\x57\xf7\xe6\xec\xeb\xab"
- "\x7b\x73\x0e\x78\x75\xef\xe6\x14\x5f\xdd\x9b\xa7\x08\x4c\xf7\xe6"
- "\x8e\xbe\xb0\xba\x37\x57\xed\xab\x7b\x73\x45\x3d\xb7\xc9\x1d\xbc"
- "\xee\xcd\x3d\x3c\xb0\xee\xcd\xfd\xd2\x57\xf7\xe6\xee\x67\x3a\x36"
- "\x4f\xce\x74\x6f\xae\x59\xd4\xc9\x2e\x69\xba\x57\xf7\xb2\xf4\xbe"
- "\xba\x37\x2f\x76\x10\xdd\xab\x76\xf3\x1e\xdd\xdb\x0a\xba\xb7\x95"
- "\xe3\x97\xfb\xd3\xbd\xdb\xe2\x1a\x51\xf7\xa6\xa3\xee\xdd\x16\x37"
- "\xb0\xee\xdd\xba\x03\x75\xac\xb0\x57\xe5\x2b\xb4\x4d\xd8\x2b\xf0"
- "\x15\xda\x8e\x78\x9c\x95\x0d\xe9\x90\x86\x7b\x2a\x62\x3e\xc6\x7b"
- "\x8f\x8e\xce\x3b\xdc\xa3\xa3\x21\x1f\x7f\xbd\x57\x47\xa3\x7e\x46"
- "\x3d\x5d\xf5\x0a\xb5\x55\xbf\x82\xe7\x6f\xe4\x13\x8f\xae\xd6\x41"
- "\x1a\x9e\xb1\x81\xfb\x01\xe1\x7c\x44\xa0\x41\xdb\x0b\xf0\x3d\xcc"
- "\x0f\xf9\xd4\xbe\x3a\x7d\xeb\x7c\x5f\x9d\x9e\xff\xdc\xc0\x3a\xfd"
- "\x05\xd9\xc0\x3a\x3d\xff\xc5\xab\x3a\xfd\x52\xe9\xf4\x02\xcb\x55"
- "\x9d\x3e\xb8\x4e\xef\x8f\x17\xbd\x75\xfa\x1d\xa2\x4e\xaf\xea\xd1"
- "\xe9\x05\x66\xff\x3a\x7d\x6b\x76\x5f\x9d\xbe\xb5\xcc\xab\xd3\xf3"
- "\x27\xfb\xea\xf4\x6d\x5f\x06\xa6\xd3\xb7\x1e\xbd\xb0\x3a\x7d\xab"
- "\xcb\x57\xa7\x6f\x13\xcf\x2c\xcc\xdb\x28\xd5\xe9\x7c\x58\x20\x3a"
- "\x7d\xdb\xdb\x1e\x9d\x8e\x3a\xf3\x6d\xbe\x55\xa2\xd3\x51\xb7\x6d"
- "\xfb\xc0\x90\x79\x4c\xa2\xd3\xb7\x15\x31\xdd\xbd\xcd\xe6\x16\x74"
- "\xfa\xb6\x4a\x96\x9e\x97\x25\x4d\xf7\xea\x74\x96\xee\x96\xea\xf4"
- "\x76\xd4\xe9\xdb\x1c\x83\xe8\xf4\xb8\xc0\x75\xfa\x4b\xc9\x5e\x9d"
- "\xfe\x52\xb2\x47\xa7\xa3\x1e\x47\x9d\x8e\x3a\x18\xf5\xba\xb0\x8f"
- "\x96\x30\xa7\xa2\xf8\x93\x28\x3b\x89\xc0\x7d\x73\xb1\x0f\x03\x75"
- "\xb1\xfe\x34\xd3\xed\x42\x9e\xd5\x2c\x0f\xe8\xe7\x36\xd0\xc9\xed"
- "\xa0\x93\xdb\x75\xa7\x48\x38\xe4\x6b\xd5\xe3\xfc\x3c\x78\x46\xdd"
- "\x1d\xd5\x01\x76\xc0\x25\xd8\x81\x56\xb4\x1f\x8c\x5e\xc5\x9f\xf8"
- "\xda\x82\xc2\xaf\xfa\xf3\xd7\xcb\x24\xb6\xa0\xfa\x3a\xda\xd2\x55"
- "\xf8\xfb\x08\x8f\x7e\xd7\xc3\x33\xda\x80\xb2\xd3\x82\x0d\xb0\x81"
- "\x0d\x68\x63\x36\xe0\xf7\x93\x7a\xf2\x40\x1d\x84\x3c\xcc\x4e\xb4"
- "\xbe\x80\xe7\x8f\xb1\x3c\xb3\x7d\xed\x44\xf1\x56\x5f\x3b\xf1\xfb"
- "\x6d\x68\x27\xa0\x0d\x78\x56\x97\x8c\xd7\x99\x93\xdd\x55\xfa\x0a"
- "\xb4\x19\xec\xfd\x8b\x13\x7b\xec\xc4\x75\x12\x3b\x91\xe5\xb1\x13"
- "\xbf\x7f\xef\xb2\xb7\x13\x80\xe5\xc6\xec\x2b\xd1\x4e\x14\x75\x5e"
- "\x0e\x76\x02\x79\x70\x8d\xa4\x6f\xd5\x1f\x1f\x70\x2f\x86\xc6\xb4"
- "\x1f\x8a\x9d\x28\xb2\xfb\xb7\x13\xc5\x7b\xfb\xda\x89\xe2\x5a\xaf"
- "\x9d\xf8\xfd\x7c\x5f\x3b\x51\x32\x3a\x30\x3b\xf1\xd2\x88\xde\x76"
- "\x02\x69\xa6\x67\xf3\x02\x3a\xd0\x3e\xb8\x75\x96\x3c\x1e\x6d\x45"
- "\x48\x76\xe2\xa5\x58\x5f\x3b\xf1\x92\x38\xe7\xbf\x70\x66\xf0\x76"
- "\xe2\xa5\xcf\x85\xf1\x7e\x8f\x9d\x38\xd7\xdb\x4e\xbc\x74\xd4\xd7"
- "\x4e\xbc\x54\xc3\xec\x41\x49\x04\xb3\x13\x2f\x19\x59\x7a\xe1\x0c"
- "\x69\xba\xd7\x4e\xb0\xf4\xbe\x76\xa2\x44\x35\x88\x9d\x90\x3b\x63"
- "\xf4\x15\xce\x92\xc6\x3c\xd7\xde\x52\xd5\xa4\xe4\x47\xdd\xbd\x65"
- "\x80\x61\xdf\xcd\xce\xa5\xf1\x8c\xf9\x2c\x60\x63\x0c\xbc\xb8\xa6"
- "\xb7\x3b\x46\x5f\x74\x3c\x0d\xe4\xa0\xc3\xbf\x1c\x80\x0c\x44\x78"
- "\x64\xa0\x51\xf3\x15\x01\xb9\xe0\x70\x1c\x68\x17\xe0\xdf\xda\xd9"
- "\x2a\xe8\x25\x79\x5b\x02\xc1\xbd\x14\x15\x1d\x44\xa9\x90\xc9\x46"
- "\xe2\x18\x83\x1b\x64\x61\xfa\x44\xca\xff\xbc\x35\x81\x28\x34\x24"
- "\x12\xe5\xe1\x1d\x71\xac\x01\xf7\x63\xc0\x31\x06\xc0\x61\xdc\xc2"
- "\xbf\x79\xc7\x18\xba\x03\x18\x63\xb0\x66\xd9\x84\x31\x06\x5c\xa3"
- "\xc4\x83\x0c\x08\xeb\x66\x70\x8c\xc1\x21\x8c\xcb\x28\x85\xb5\x2a"
- "\xc2\x18\xc3\x31\x82\xe3\x0b\x9e\xfd\x58\x70\x5c\xe1\xe7\xc9\x84"
- "\xc3\xfd\x1a\x76\x01\xfe\x4d\xea\x46\x82\x32\x10\xbc\x3e\xd2\x6d"
- "\x1d\x68\x9e\x8d\x0b\x68\xea\x96\x37\xe6\xd1\x9d\x4d\xda\x3f\x1f"
- "\x73\xc8\x70\xaf\x4a\x37\xf0\x88\x07\xbd\x43\xe5\xbd\xf4\x8e\x53"
- "\xa4\xb7\x93\xd1\x1b\x78\x15\xb1\xa0\x93\x50\x48\x67\x7b\x55\x3a"
- "\x6c\x80\x35\xf5\xd8\xaa\x4d\x48\xdb\x38\x52\x25\xee\x57\xc9\x6f"
- "\xd6\x8c\xe6\x81\x9e\xb8\x36\xe1\xed\x73\x8e\x11\x6e\xf9\xad\xea"
- "\x92\x6e\x32\x09\x74\x8c\x02\x75\x0c\xe0\x73\xcc\xee\x6e\xa0\xed"
- "\x97\x8c\xb6\xb8\x6f\x1a\xde\x5d\x9b\xe1\x37\x4e\xf5\xcd\x4e\x27"
- "\xd0\xd7\xc1\xe8\xbb\x60\xad\x92\x54\x7b\xc6\xd8\xc0\x3e\x37\x01"
- "\x4f\x51\xc7\xcc\xea\x8c\xa2\x78\x1e\x84\xdb\xa9\x8e\xe1\xbf\x06"
- "\xfa\x76\xe2\xd9\x1f\x6a\xe4\xbf\xb2\xfa\x38\x8e\x09\xfe\x9d\x8d"
- "\xb1\x29\xc4\x7d\x30\x36\x83\xbe\x5f\xa1\x22\xd6\x7d\xa0\x6f\x47"
- "\x96\x4c\x76\x56\xe9\x8b\xa8\x0c\xf4\x7d\x76\xb0\xf4\xd5\xb7\x5d"
- "\x1a\xfa\xaa\x7e\x40\xf4\xd5\x59\x42\xa7\x6f\x99\xdf\xf5\xcf\x17"
- "\x96\xbe\xca\x1f\x10\x7d\x4b\x27\x85\x4e\xdf\x3f\xec\x1d\x88\xbe"
- "\xe8\xdf\x7b\x7c\x7b\x8f\x5f\x8f\xb6\x85\xd9\xc6\xed\x31\x5e\x9f"
- "\x7e\x7b\x8c\x67\x2c\x12\x68\x13\xae\x13\xfb\x68\xb4\xcb\xf0\x0c"
- "\x84\xf2\x3f\x78\xc6\x21\xd1\xa7\x16\x78\xb5\x13\x78\xb5\x1a\xd7"
- "\xa0\x88\x7c\x02\x3b\xb0\xb0\x13\x74\xf5\x78\x7d\x85\x5b\x07\x76"
- "\xe2\xf5\x52\x95\x1f\x9e\x71\xa8\xe3\x15\x19\x44\xb9\x40\xcb\x78"
- "\xc7\x6f\x06\x9e\x75\x83\x7f\xe3\x68\x27\xb8\xa6\x34\xaa\x1d\xf4"
- "\xaa\x53\x33\x7a\x3e\xf8\xcb\x1e\xbe\xbd\x93\xe9\x10\x7c\x9b\x7e"
- "\xf9\xb6\xc3\x97\x6f\x67\xfa\xe1\x9b\x77\x6c\x1f\xfc\x4c\x81\x6f"
- "\x36\x81\x6f\x82\x5e\xdf\x0c\xbe\x0d\xf0\xcf\xc3\x37\x41\xaf\x03"
- "\xef\x04\xbe\x75\x1c\x23\x6e\x89\x5e\x47\xbf\x06\x79\x67\x49\x01"
- "\xff\xb2\xb0\xac\x44\xe0\x1b\xfa\x99\x29\xc1\xf2\xad\xbc\x97\x3f"
- "\xb3\xfd\x60\x60\xfe\x4c\xf9\x61\xf4\x59\xa4\xfe\x0c\x3e\x9f\x81"
- "\x98\xd7\xad\xb0\x6c\xed\x0c\xc9\x87\x29\x6f\xf7\xf5\x61\xb6\xef"
- "\x67\x75\x7a\xf9\xa6\xe0\x7d\x98\xed\xc2\x78\xd3\xdb\x3b\x59\x2c"
- "\xe9\xeb\xbf\x6c\xaf\xf2\xf5\x5f\xb6\x6b\x99\x9f\xb2\xdd\x7c\xa6"
- "\x00\xfd\x97\xed\x5b\x59\xfa\xcb\x2a\x69\xba\xd7\x7f\x61\xe9\xec"
- "\xac\xf2\xed\x2d\xc1\xf9\x2c\x77\x5d\x62\x9f\x25\x6e\x00\x9f\x25"
- "\xee\x0a\xf3\x59\x5e\x89\xbf\x6a\x53\x07\xd3\xf9\xdb\xdb\x43\xd7"
- "\xf9\xff\x52\x71\xd5\xa6\x0e\x46\xdf\x57\xf2\x42\xa7\x6f\x85\x23"
- "\x74\x9b\xba\x4b\xeb\xb5\xa9\xbb\xb4\xfe\x6d\xea\xce\xaf\xae\xda"
- "\xd4\xfe\x6c\xea\xbf\xd8\x42\xb7\xa9\x3b\x6b\x7c\x6d\x6a\xe5\xf8"
- "\xc0\x6c\xea\xae\x3b\x86\xdf\xa6\xee\x9a\xe2\x6b\x53\x2b\x23\x58"
- "\x9d\x76\xac\x0f\xde\xa6\xee\xfa\xc6\xbf\x4d\xdd\xf5\xbd\xaf\x4d"
- "\xdd\x65\x64\xb6\xb3\x32\x86\xd9\xd4\x5d\xad\x2c\x7d\x47\x86\x34"
- "\xdd\x6b\x53\x59\x3a\xb3\xa9\x95\xea\xe0\x6c\xea\x8d\x97\xd8\xa6"
- "\xaa\x06\xb0\xa9\xaa\x2b\xcc\xa6\x56\xf9\xdd\xff\xf2\xaa\xce\xf7"
- "\xe8\xfc\xca\x29\xa1\xeb\xfc\x6a\xbf\x67\x14\x0e\xae\xf3\x5f\x4d"
- "\xf5\xea\xfc\x57\x53\xfd\xeb\xfc\x3d\x87\xaf\xea\xfc\xfe\x74\x7e"
- "\x55\x4b\xe8\x3a\x7f\xcf\x5e\x5f\x9d\xff\xda\xb5\x81\xe9\xfc\x57"
- "\x6f\x1a\x7e\x9d\xff\x6a\x9c\xaf\xce\x7f\xd5\xc5\xea\xb4\x7b\x45"
- "\xf0\x3a\xff\xd5\xa3\xfe\x75\xfe\xab\x5f\xf9\xea\xfc\x57\x6b\x99"
- "\x6e\x7f\x4d\xc9\x74\xfe\xab\x16\x96\xbe\x5b\x23\x4d\xf7\xea\x7c"
- "\x96\xce\x74\xfe\x6b\x31\xc1\xe9\xfc\xa8\x4b\xac\xf3\x95\x03\xe8"
- "\x7c\xe5\x15\xa6\xf3\xff\x35\x2f\x74\x9d\xf4\xba\xc3\xab\x93\x5e"
- "\x77\xf8\xd7\x49\xaf\xaf\xba\xaa\x93\xfa\xd3\x49\xaf\xc5\x85\xae"
- "\x93\x5e\x8f\xf7\xd5\x49\x6f\xbc\x1e\x98\x4e\x7a\xfd\x83\xe1\xd7"
- "\x49\xaf\x1b\x7d\x75\xd2\x1b\x65\xac\x4e\xff\xea\x0e\x5e\x27\xbd"
- "\xb1\xd6\xbf\x4e\x7a\x63\xa3\xaf\x4e\x7a\x43\x1c\x83\x7a\x63\x2f"
- "\xd3\x49\x6f\xa4\xb0\xf4\x7f\x75\x49\xd3\xbd\x3a\x89\xa5\x33\x9d"
- "\xf4\x46\xcd\x60\x3a\x09\xb1\xdf\x18\xdd\x0b\xfb\x2b\x3d\xd8\x7f"
- "\x33\xe2\xd3\x4a\x0f\xf6\xdf\x14\xf6\xac\xe2\x2b\x4b\xa3\x5f\xca"
- "\x24\xe1\x25\x78\x96\x08\xc8\xbb\xf6\x59\xc4\xfe\xbe\x2d\x38\x6f"
- "\x41\x7e\x04\x74\x58\x9b\xa8\xd3\xb2\x40\xa7\xb5\xc1\x33\xee\x31"
- "\x35\xbe\x34\x1a\x75\x11\x8e\xff\xe3\x33\xd3\x6d\xf6\x11\xb8\x5e"
- "\x32\xa8\xb5\x4c\x6d\xe2\x5a\xa6\xd4\xbe\x6b\x99\x2a\x25\x6b\x66"
- "\x50\x36\x14\xf9\xb2\x48\x1c\xd7\x05\xfd\x26\xea\x31\xf3\x08\x97"
- "\x5c\xd4\x63\xe7\x40\x8f\x9d\xf3\xca\x04\xea\xb1\x33\xa0\xc7\x3a"
- "\x37\xa8\x27\xa0\x2e\xeb\xbb\x8e\x89\x8d\xe3\x0a\x7a\x4c\xd7\x4b"
- "\x8f\x2d\xef\xa5\xc7\x96\x81\x1e\x4b\x01\x3d\xa6\xf0\xca\xc3\xcf"
- "\x8e\x10\x6e\xc6\x22\x90\x09\xd0\x63\xe5\xe7\x50\x8f\x99\x42\xd4"
- "\x63\xfb\x12\x7d\xe5\xe1\xcd\x0f\x02\x93\x87\x7d\x26\x7f\xf2\xe0"
- "\xd4\x85\x2a\x0f\xfb\x5a\x7c\xe5\xe1\x4d\xf1\x3c\xe2\x37\xce\x07"
- "\x2f\x0f\x6f\xe6\xf7\xc8\xc3\xca\xde\xf2\xf0\xe6\x8b\xbe\xf2\xf0"
- "\xe6\x7c\x86\xfb\x37\xf7\x33\x79\x78\x53\x2b\xca\x89\x43\x9a\xee"
- "\x95\x07\x96\xce\xe4\xe1\x4d\xc3\xd5\xf1\xd9\xcb\xd5\x46\xff\x79"
- "\xa0\x33\xb4\xaf\x8e\xcf\x0a\x71\xd9\x9b\x2d\xa1\xc7\x65\x6f\x5d"
- "\xa2\xf1\xef\x1f\x52\x5f\xf2\x9f\xd3\x42\xa7\xef\xdb\x97\x68\xfc"
- "\xfb\x87\xd4\xaf\xf0\xd6\x10\xc6\xbf\xdf\x1d\x70\xfc\x7b\x60\x3f"
- "\xe6\xbd\x16\x4b\x8f\x0f\xff\x5e\x8b\x67\xce\x65\x5f\x1f\xfe\xbd"
- "\x27\x7c\xd7\x2f\xbd\x7b\xb6\xf7\x7c\xc8\xc1\x7c\x7b\xd7\xff\x2a"
- "\xdf\xfe\x9d\x49\xa1\xfb\xf6\xef\x8d\xf3\xf5\x65\xde\xcf\x0f\xcc"
- "\x97\x79\xef\x0f\xfe\x7c\x19\x57\xc8\xbe\xfd\x7b\x7b\x7c\x7d\x99"
- "\xf7\xd3\x44\xfe\x7f\x12\xbc\x2f\xf3\xfe\x4c\xff\xbe\xcc\xfb\x73"
- "\x7d\x7d\x99\xf7\xc5\x73\xf5\xde\xcf\x63\xbe\xcc\xfb\x53\x58\xfa"
- "\xbb\x06\x69\xba\xd7\x97\x61\xe9\xcc\x97\x79\xbf\xe4\xea\xb8\xed"
- "\xe5\xea\xcb\xfc\x9b\xdf\xf3\xaf\xae\xda\x5a\x8f\x2d\x78\x7f\x4f"
- "\xe8\xb6\xe0\x83\xd9\x57\x6d\xed\x60\xf4\xdd\x1f\x1f\x3a\x7d\xff"
- "\xbd\x26\x74\x5b\xfb\x61\x82\xd7\xd6\x7e\x98\xe0\xdf\xd6\xd6\x7e"
- "\xe0\x6b\x6b\xff\x63\xd1\x55\x5b\x3b\x90\xad\xfd\xa0\x22\x74\x5b"
- "\x5b\x9b\xe7\x6b\x6b\x3f\x3c\x19\x98\xad\xad\x75\x0f\xbf\xad\xfd"
- "\x50\xee\x6b\x6b\x3f\x6c\x15\xf9\x7f\x47\xf0\xb6\xf6\xc3\x0f\xfd"
- "\xdb\xda\x0f\x3f\xf1\xb5\xb5\x1f\x8a\x6b\xe8\x3f\xec\x60\xb6\xf6"
- "\xc3\x7d\x2c\xfd\x3f\x26\x49\xd3\xbd\xb6\x96\xa5\x33\x5b\xfb\xe1"
- "\x60\xeb\x7f\xae\x8e\xe7\x5e\x32\x5b\xfb\x9f\xf3\xaf\xda\x82\xc1"
- "\x6c\xc1\x5f\xe4\xa1\xdb\x82\x03\x07\x42\xb7\x05\x1f\xcf\xf0\xda"
- "\x82\x8f\x67\xf8\xb7\x05\x7f\xfd\xc4\xd7\x16\x7c\xb4\xea\xaa\x2d"
- "\x18\xc8\x16\xfc\xe7\xde\xd0\x6d\xc1\x5f\x4b\x7c\x6d\xc1\xc7\xe7"
- "\x03\xb3\x05\x1f\x8f\x1e\x7e\x5b\xf0\x71\xb4\xaf\x2d\xf8\xb8\x4d"
- "\xe4\xff\x03\xc1\xdb\x82\x8f\x4d\xfe\x6d\xc1\xc7\x8d\xbe\xb6\xe0"
- "\xe3\x3d\x4c\xe7\x7f\xec\x60\xb6\xe0\xe3\xfd\x2c\xfd\xa3\x78\x69"
- "\xba\xd7\x16\xb0\x74\x66\x0b\x0c\xe1\x57\xc7\x79\x2f\x57\x5b\xf0"
- "\x89\x26\x74\x5d\x55\xe7\xf0\xea\xaa\x3a\x87\x7f\x5d\x55\xb7\xca"
- "\x57\x57\xfd\xd7\xf5\x57\x75\xd5\x40\xba\xca\x10\x1d\xba\xae\xaa"
- "\xeb\x35\xfe\x6b\x0c\x70\xfc\xb7\xce\xef\xf8\x6f\xe8\xba\xaa\xae"
- "\xd7\xf8\xaf\x51\x1c\xff\xfd\xe4\xab\xe0\x75\x95\x71\xad\x7f\x5d"
- "\x65\xec\x35\xfe\x6b\x14\xc7\x7f\x8d\xe2\xf8\xaf\x51\x1c\xff\xfd"
- "\xa4\x4d\x9a\xee\xd5\x55\x2c\x9d\xe9\x2a\xe3\x10\xc7\x7f\x1b\x54"
- "\xde\xf1\xdf\x06\x61\xcd\x00\x5f\xd1\x94\xd8\x77\xfc\xb7\xfe\x8f"
- "\x38\xfe\xeb\x95\x09\xd3\xdd\xc2\x58\x30\xca\x45\x27\xdb\x57\xa4"
- "\xdf\x71\xe1\xeb\x9b\x12\xaf\x8e\x0b\x0f\xc7\xb8\x70\x7d\x8a\xaf"
- "\x9c\x34\x34\x06\x26\x27\xf5\x47\x87\x7f\x5c\xb8\xbe\xc3\x57\x4e"
- "\x1a\x6a\x45\xd9\x0d\x61\x5c\xb8\x61\x87\x7f\x39\x69\x78\xd5\x57"
- "\x4e\x1a\xc4\x79\xb9\x0d\x16\x26\x27\x0d\x45\xa2\xfc\x38\xa4\xe9"
- "\x5e\x39\x31\x4a\xc6\x85\x1b\x5a\x03\xb1\xe9\x2e\x79\xe3\x56\xb4"
- "\xd1\x93\x5a\x1f\x75\xf7\xe0\x39\x43\xc4\x73\x7f\x36\x7d\x31\xd3"
- "\xfd\x88\x63\xe7\xde\xd2\xd8\x41\x6d\x7a\x9b\x68\xd3\x53\xfb\xda"
- "\x74\x8f\x3d\x47\x3c\xef\x0a\x68\x4c\xb8\x17\xae\x83\xb2\xe7\x8b"
- "\xcb\x86\x82\x6b\xc4\xb4\xaf\x3d\x0f\x15\xd7\x07\x2f\xd1\xfa\x97"
- "\x1f\xd2\x98\x70\x43\x47\xe8\xb1\xdd\xa1\x4b\xb4\xfe\xe5\x87\xd4"
- "\x4f\x7d\x70\x08\xeb\x5f\x3e\x1d\x70\xfd\xcb\xd5\xbe\x09\xa4\xef"
- "\x21\x5b\xe8\xf4\x6d\x4c\x0e\xdd\xdf\x6f\x8e\xf0\xfa\xfb\xcd\x11"
- "\x1e\xdf\xc6\xb3\x5f\x1a\xe8\xcc\x70\x5d\x3a\x5c\xe7\x08\x79\x29"
- "\x5d\xd8\xeb\x3b\xc2\xda\xf6\x39\x9e\x4f\x04\xfe\x8e\x75\x4b\x52"
- "\x96\xd4\xdf\x69\x1a\xef\xf1\x75\x92\xd0\x0f\x02\xbf\x06\x7d\x1a"
- "\x8f\x8f\x8f\x7b\xe3\x0c\x38\x1f\xf4\x96\xd2\x58\x8c\x09\x9c\x8a"
- "\xc6\xad\x57\x7e\x3c\x60\x49\x08\x3d\x1e\xb0\xf6\x9a\xff\xd6\x1c"
- "\xe0\xfc\x37\xab\xdf\xf9\x6f\xa1\xc7\x03\xd6\x5e\xf3\xdf\x9a\xc5"
- "\xf9\x6f\x8d\x9f\x07\xef\xe7\x34\x0f\x30\xff\xad\xb9\xd7\xfc\xb7"
- "\x66\x71\xfe\x5b\xb3\x38\xff\xad\x59\x9c\xff\xd6\xd8\x22\x4d\xf7"
- "\xfa\x39\x2c\x9d\xf9\x39\xcd\x01\xcd\x7f\x03\x3f\xa7\x68\x08\x7e"
- "\xce\xe0\x7d\x17\x97\x8d\x9f\xb3\xe4\x32\xf1\x73\x3e\x53\x05\x60"
- "\x27\xb6\xf6\xb2\x13\xb1\xff\xbb\xec\x44\xf3\x10\xe6\xbe\xfd\xdf"
- "\x01\xe7\xff\x0b\xf4\x2d\x91\xd0\x17\x75\xb4\x48\x5b\x77\x6c\x69"
- "\x6c\x48\xf4\x05\xdd\x5c\x95\xf3\x43\xa1\xed\x67\x9a\xd0\x69\xdb"
- "\x72\xe4\xaa\x8f\x33\x18\x7d\xff\xaf\x39\x74\xfa\xfe\xf7\x94\xd0"
- "\x7d\x9c\xc3\xf2\x4f\x7b\x7c\x9c\xc3\xf2\xde\x3e\x0e\xfa\x34\x33"
- "\x1d\xcc\xd7\x79\x09\x7c\x94\xe2\xd5\xe0\xef\x64\x12\x62\x6d\xfb"
- "\x88\x94\x80\xcf\x53\x7c\x0a\xfc\x9e\x34\xf0\x7b\x5c\xaf\x8b\x7e"
- "\x4f\x6b\xbe\xaf\xdf\xf3\x3f\x3f\xee\xd7\xef\x51\x78\xfd\x1e\x17"
- "\xf8\x34\xce\xd7\x4b\x63\xcb\x4e\x49\x7c\xa0\xe7\xfb\xfa\x40\xdd"
- "\x3a\xb0\x39\xb7\x94\xaa\x9d\xe0\x07\x0d\xe4\x03\x09\xbc\xef\xe5"
- "\x07\xfd\xf0\x7c\xa0\xcf\x63\x43\xf7\x81\x5a\x67\xf8\xfa\x40\x87"
- "\x3f\x0c\xcc\x07\x6a\x3d\xe8\xb7\xaf\x27\x64\x1f\xa8\xb5\xd5\xd7"
- "\x07\x3a\xbc\x97\xd5\xe9\xbf\x3f\x0c\xde\x07\x3a\xbc\xcd\xbf\x0f"
- "\x74\x58\xe7\xeb\x03\x1d\x4e\x61\xbe\xce\xe1\x5a\xe6\x03\x1d\xce"
- "\x60\xe9\xff\x5d\x2b\x4d\xf7\xfa\x40\x2c\x9d\xf9\x40\x87\x8d\x01"
- "\x8e\xdf\x6c\x75\x81\x8d\xbd\xf4\xf3\xe6\x06\x1a\xbf\x19\xae\x79"
- "\x73\x8b\x2f\x93\xf1\x9b\x7f\xa8\xaf\xda\xe9\x81\xec\xc8\xe1\xd6"
- "\xd0\xed\xc8\x91\x4b\x34\xff\xff\x87\x64\xa7\xff\xa1\x0d\x9d\xbe"
- "\x47\x07\x9c\xff\x3f\xb0\x9d\xb6\x6d\xf7\xf6\x45\xd8\xb6\x07\xd7"
- "\x17\x61\x1b\xed\x6b\x93\xff\xdf\x9b\x57\xfb\x22\x02\xb5\xc3\x47"
- "\x2c\xa1\xdb\xe1\x2f\x5a\x7c\xed\xf0\x97\x8f\x05\x66\x87\x6d\x4f"
- "\x0d\x7f\x5f\x84\x2d\xc5\xd7\x0e\x7f\x39\x49\xc4\xc2\xa2\xe0\xed"
- "\xf0\x97\x0a\xff\x76\xf8\xcb\x1f\xfb\xda\x61\x5b\x3b\xb3\xb7\x5f"
- "\x26\x30\x3b\x6c\x73\xb1\xf4\xff\x97\x22\x4d\xf7\xda\x61\x96\xce"
- "\xec\xf0\x97\x33\x82\x1b\x73\xb9\xf1\x32\x1d\x73\x51\x5d\x61\x63"
- "\x2e\xc7\xde\xba\x6a\x27\x06\xb3\x13\x5f\xa6\x84\x6e\x27\xda\xe4"
- "\xa1\xdb\x89\xe3\x07\xbc\x76\xe2\xf8\x81\xe0\xec\xc4\xf1\xbb\x7d"
- "\xed\x44\xdb\xdf\xae\xda\x89\x40\xed\xc4\xb1\xce\xd0\xed\xc4\x57"
- "\x2e\x5f\x3b\xf1\xf5\x8a\xc0\xec\xc4\xf1\x8d\xc3\x6f\x27\x8e\x17"
- "\xf9\xda\x89\xaf\xe7\x88\x58\x78\x31\x78\x3b\xf1\xf5\xbd\xfe\xed"
- "\xc4\xd7\x0f\xfb\xda\x89\xaf\x95\xcc\x1e\x7c\xad\x61\x76\xe2\xeb"
- "\x58\x96\xde\x56\x24\x4d\xf7\xda\x09\x96\xce\xec\xc4\xd7\x19\x57"
- "\xe7\xdb\x5d\xae\xf3\xed\xda\x5b\x43\xd7\x65\xdf\x6a\xbc\xba\xec"
- "\x5b\x8d\xff\xf9\x76\x27\x8e\xfa\xce\xb7\xfb\xe6\xc5\xab\xf3\xed"
- "\x06\xd2\x55\x5f\x17\x85\xae\xab\x4e\xec\xf3\xd5\x55\x1d\x3f\x0e"
- "\x4c\x57\x7d\x7b\xcb\xf0\xeb\xaa\x6f\x27\xfb\xea\xaa\x0e\x22\xf2"
- "\x7f\x6e\xf0\xba\xea\xdb\x2f\xfd\xeb\xaa\x6f\xbf\xf1\xd5\x55\xdf"
- "\x1e\x60\x3a\xa9\x63\x1c\xd3\x55\xdf\x36\xb3\xf4\x6f\xe6\x48\xd3"
- "\xbd\xba\x8a\xa5\x33\x5d\xd5\x11\xd0\xfe\xff\xde\xf1\xb5\x90\x7c"
- "\xda\x8b\x30\xbe\x36\x5c\x3e\xed\xe5\x32\xbe\x76\xf2\xea\xf8\xcf"
- "\x80\xfe\x6c\xc7\x10\xf6\xfd\x3f\x35\xe0\xf8\xcf\xc0\x36\xe0\xfb"
- "\xbd\x5e\x1b\xf0\xfd\x5e\x7f\xe3\x13\xc5\x80\xa1\x12\xf0\x47\x5f"
- "\x3c\x45\xc2\x5f\xc2\xf1\x89\x96\x46\xa2\xc3\xf1\x89\xd5\x9e\xf1"
- "\x89\x2a\xd1\xc7\xfd\xfe\x7a\x5f\x1f\xf7\xbb\x0f\xfa\xf3\x71\xd1"
- "\xb7\x75\x83\xdf\xea\xea\x3d\x2e\xf1\x6c\xff\xb6\xa3\x5b\xd1\x58"
- "\x74\xfe\xf5\x52\x75\x30\xb6\x63\xd7\x26\x66\x3b\x76\xfe\xa0\x6c"
- "\xc7\x49\x73\xe8\xb6\xc3\xde\xeb\x3c\xdf\xd3\x4f\x05\x66\x3b\xbe"
- "\x5f\x34\xfc\xb6\xe3\x7b\xad\xaf\xed\x38\x3d\x45\xc4\xc3\x33\xc1"
- "\xdb\x8e\xd3\xe3\xfd\xdb\x8e\xd3\xb7\xf8\xda\x8e\xef\xc5\xb9\xa6"
- "\xa7\x67\x33\xdb\x71\x5a\xce\xd2\xbf\x4b\x96\xa6\x7b\x6d\x07\x4b"
- "\x67\xb6\xe3\xf4\xfc\xe0\xfa\x43\xa2\x2e\xd3\xfe\x10\xe5\x15\xd6"
- "\x1f\x72\x66\x08\xeb\xdf\xce\xa5\x5a\x7a\xe6\xcf\x9f\x4b\xed\x13"
- "\xaf\x67\x82\xaf\x7b\x9a\x8d\xb9\xf6\xc4\xeb\xb6\xa3\xa2\x2e\x3b"
- "\x7b\xd8\x57\x97\x75\xe6\xfb\xd3\x65\x03\x8d\xab\x62\x7c\xee\x06"
- "\x3d\xe7\xaa\x0a\x71\x5c\x35\xf3\x87\xa4\xbf\x4e\x6b\x43\xd7\x5f"
- "\x67\x7b\xed\x7f\xda\x15\xe0\xfe\xa7\xe7\xfc\xee\x7f\xea\x0a\x79"
- "\x0e\xfd\xb9\x5e\xfb\x9f\x9e\x13\xf7\x3f\xed\x0c\x61\x5d\xdc\xb9"
- "\xa3\xfe\xf5\xd7\xb9\x5e\xfb\x9f\x9e\x13\xc7\x4f\xbb\xc4\xfd\x4f"
- "\xcf\x89\xfb\x9f\x76\xc6\x4b\xd3\xbd\xfa\xab\x53\xb2\x2e\xae\x6b"
- "\xc0\xfd\x4f\x69\x49\x79\x51\x19\xc7\xd7\xc0\x55\x0b\x75\xbc\x1e"
- "\x30\x60\x80\xff\xcd\xc0\xc7\xb1\xf0\x7f\xb3\x3f\x19\xb3\x2b\xca"
- "\x8b\xf8\x02\xa8\x33\x47\x64\x56\xfb\x77\x06\xc3\x0d\x2e\xe4\x4d"
- "\x25\xe3\x55\x79\x51\x94\x6b\x54\x22\x4f\x35\x04\xf8\x52\x24\x9c"
- "\xaf\x06\xf9\x23\x01\x33\xaa\x4c\x12\x79\x4a\xd6\x75\xc0\x93\x0f"
- "\xea\x1b\x79\x4c\xd6\xb5\x11\xcb\x80\xba\x9a\xa1\x2d\x6a\xbf\x75"
- "\x85\xb2\x92\xde\x9c\x40\xb6\xb8\xe8\xd7\x86\xd5\xa7\x49\x9b\xcc"
- "\x71\x6d\x54\xc7\xa8\x44\x9a\x9b\x4c\xd0\xc7\xaa\xb9\xc1\x1e\x8e"
- "\x65\xe2\xd9\x8b\x6d\xb2\xae\x4e\x7c\xe7\x86\x3a\xe6\xac\x22\x9c"
- "\xfe\xf4\xa8\x08\xd0\x05\x23\x72\x3b\x69\xfb\x1a\x17\xd4\x39\xcb"
- "\x45\x3e\x9e\xd0\x1a\xfe\xee\x4e\x48\x73\x93\x68\x3c\xdf\x0e\xcb"
- "\x00\x1f\x13\xea\xe3\xf8\x71\x35\xe4\xef\xaf\x0e\xdb\xde\x21\x93"
- "\x46\x4c\xa4\xb6\xe0\x70\xe3\xf0\xbb\xfe\x2d\x2a\x7f\x02\x31\xdc"
- "\x0e\xb4\x53\x11\xae\xbf\xf7\x41\x7e\xc7\x2f\xbf\x40\x27\x46\xe0"
- "\x39\x98\xb9\x3b\x08\x57\xca\x8f\x8a\xa8\xcb\x16\xce\xaa\xb4\x77"
- "\x15\x9e\x9f\x62\x93\xa5\x16\x21\xcd\xf1\xcc\x34\x3c\xfb\x17\x70"
- "\x43\x20\x7d\xce\x27\x59\x84\xf4\xe6\x45\x7a\xea\xaa\x45\xaa\x8c"
- "\x15\xab\x96\xae\x59\x9f\xa1\xba\x25\x75\x0c\x99\xb3\x66\x8d\x6a"
- "\xd5\xa2\xd5\x1b\x55\xd2\x37\x0f\xaa\x52\x57\xac\x5b\xb4\x38\x6d"
- "\xe9\x1d\xab\x96\x68\xc7\x40\x9d\x88\xa4\x1e\xe3\xb0\x2e\x7c\xe1"
- "\xf9\x94\xea\x97\x09\x29\x1f\x4b\xc2\xb1\x5e\xf0\x3d\xa3\xe7\x7c"
- "\x3c\x3c\x1f\x8e\x83\x3c\xb9\xa0\x03\x4b\x73\x46\x41\x5e\x47\xf3"
- "\x6e\xa8\x57\x35\xd4\x1b\xea\x88\x75\xb6\x7b\xea\xec\xc1\x44\x2e"
- "\x62\x22\xe7\x34\x60\xb0\xfb\xda\x28\xc7\xa8\x5f\x51\x9a\x8c\xed"
- "\xeb\x04\x39\x91\x41\xda\x22\xb4\x4b\xa0\x03\x8a\xba\x0a\xbb\x27"
- "\x79\x30\x86\xbf\xa5\xfa\xf2\xd9\x5d\x28\x27\x54\xf3\x08\x93\x29"
- "\x67\xf8\x5c\xb5\x8c\xb0\xf3\xf9\xba\x93\xbd\xe7\xf3\x39\xc3\x91"
- "\xb6\x50\x8f\x0e\x48\xd7\xda\x64\xf7\xc9\x31\x1d\xcf\x89\xc4\x73"
- "\xf6\xb0\xce\xd0\x2e\xb0\x8b\xd4\x40\x0b\x44\xec\x17\x7d\x19\xc7"
- "\x97\xc8\xec\xd6\xf0\x73\x24\xc9\x45\x9d\xf4\xc5\x2f\xe3\x9a\x3a"
- "\x3b\x49\x54\xbe\x76\x09\x1d\x79\x7e\x6d\x94\x6b\xc5\x52\x3c\x1f"
- "\x90\xd7\xc9\xec\xf4\x45\xa7\x7a\xee\x44\xa2\x84\xb2\x2d\x92\x73"
- "\x02\xc3\x83\xe3\x7f\xb7\xc0\x7f\xe4\x23\x9e\xff\xc7\xf8\xe8\x8c"
- "\xf9\x24\xa3\x2f\x1f\x7b\xf0\xf7\x26\x4f\x4c\x80\x05\x2a\xaf\x6b"
- "\x4e\x72\x33\x3a\xa2\xec\x9e\xc9\xd5\x90\xbb\x04\xda\x39\x5b\x78"
- "\x7d\x5d\x0d\x5f\x52\xd7\x4e\x4b\xea\x5a\x80\x66\x1a\x7d\x26\x51"
- "\x2d\x74\x2b\x89\xee\x1c\x89\xb3\xeb\xea\x9a\x15\xb2\x3c\x19\xf8"
- "\x16\x1c\xd8\x8d\x38\xd0\x19\x71\xa2\xbc\x6b\x90\x8e\x0d\x1d\x84"
- "\xcc\x5a\x47\xc8\xd7\x53\x48\x58\x35\xfc\x2e\xb8\xf6\x38\xf7\x08"
- "\x7a\xa2\xd0\x99\xbc\x1b\x7e\x8b\xe7\x3c\x06\xf9\x7b\x9b\x5f\xb9"
- "\xeb\x69\xb7\x71\x76\xff\xed\x76\x59\x78\xbd\x11\xf8\x67\xd4\xd0"
- "\x12\xe3\x9c\xbe\xed\x36\xce\x66\xed\x1e\x71\x7a\xf8\xdb\xed\xaa"
- "\x60\xed\x76\xcd\x0e\xad\xdd\x2e\xbf\xfd\x7f\x92\x76\xfb\xe1\xb7"
- "\xdb\x08\xed\x06\x7e\x1b\x81\xdf\xc6\x7e\xf8\x6d\x14\xf9\x7d\xcd"
- "\xb1\xe1\x6f\xb7\xbb\x8c\xb5\xdb\x9d\x18\x5a\xbb\xdd\x7e\xf5\x9f"
- "\xb7\xdd\x26\x3f\xfc\xe6\x0f\xf0\x7a\x13\xf0\xdb\x04\xfc\x36\xf5"
- "\xc3\x6f\x93\xc8\xef\x6b\x3f\x1b\xfe\x76\xf3\xac\xff\xbf\x90\x4f"
- "\x08\xad\xdd\xbc\x39\x80\x76\xfb\xe1\x37\xdd\x0f\xed\x06\x7e\x9b"
- "\x80\xdf\xa6\x7e\xf8\x6d\x12\xf9\x7d\x5f\xf1\xf0\xb7\x9b\xe6\xb1"
- "\x76\xd3\xf8\xd0\xda\x4d\x0d\x83\xb7\xbb\xbe\x7f\x7e\x73\xe4\x2d"
- "\x5e\x5f\x0f\xfc\xae\x07\x7e\xd7\xf7\xc3\xef\x7a\x91\xdf\xf3\xa6"
- "\x0e\x7b\xbb\x39\x22\x9c\x67\x4d\x8b\x49\x5c\x48\xed\xe6\x48\xed"
- "\xe0\xed\xae\x6b\x05\x9d\xdd\x87\xe7\xd6\xac\x78\x72\xe7\x39\x6c"
- "\x3f\x17\x43\x15\x75\xad\xd7\xe4\xe7\xc9\x5c\xf2\xba\x23\xd7\x1c"
- "\x21\x1c\xc4\x7e\x9a\x28\x1b\x19\x0d\x6d\xd5\x50\xbd\x59\x8b\x77"
- "\x1e\xca\x71\x81\xee\x77\xcb\xeb\x5a\xba\x4b\xca\x35\x2f\x2d\x23"
- "\xaa\x5c\x3b\x51\x36\xe5\xd8\x48\x8e\x96\xda\x9b\xc8\x97\x44\x61"
- "\x23\x1c\xf6\x63\x7d\xda\x51\x4b\x56\xa7\x53\x0a\x65\x8f\xc0\x78"
- "\x51\x7f\x9c\xc4\x81\x4f\x9c\x47\xc1\x7e\x94\xf1\x44\x05\xe5\xc7"
- "\x21\x2d\xa1\xec\xf4\xa8\x39\x44\xf6\xd7\xc5\x0e\x82\xf4\x44\xda"
- "\x42\x6c\x19\x27\xd0\xb5\x93\x90\x5f\xcf\x63\x74\xdd\xb5\x2c\x58"
- "\xba\xca\x9a\x99\x5f\x59\x67\xb7\xda\xba\xb1\x5f\x5a\x89\xeb\x9a"
- "\x21\xbd\xa4\x49\x7b\x9a\xd0\x62\x59\x1c\xd5\xd5\xd9\x78\xb0\x59"
- "\xc1\x95\xcb\xf9\x9d\xff\x26\xd1\xa7\xc9\xa0\x33\xfb\x60\xcd\x4b"
- "\xef\xb0\x12\xaa\x30\x26\x33\x7a\x1b\xe7\x5f\x73\x64\xc4\xe9\xfe"
- "\xe9\x6d\x4c\x76\x81\xcd\x71\xcb\x8d\x73\x02\xa7\x77\xd8\x7a\x5f"
- "\x7a\x1b\xe3\x2e\x0e\xbd\xc3\x12\x18\xbd\x8d\x5a\x5f\x7a\x73\x2e"
- "\x46\x6f\x6e\x0f\xd5\x19\x53\x78\xb0\x95\x41\x96\xeb\x77\xfd\xa3"
- "\x84\xde\x80\xef\xbe\x36\xcc\x4b\xef\x70\x17\xd0\x5b\xc4\xb7\x11"
- "\xf0\x7d\xcd\x31\x3f\xf4\x06\x7c\x1b\x01\xdf\xc6\x20\xf0\x1d\xfe"
- "\x55\x2f\x7a\x5f\x24\x7c\x87\x8b\xe7\x3f\x19\x7b\xe1\x3b\x3c\x8d"
- "\xd1\x3b\x5c\x09\xf4\x06\x7c\x1b\x83\xc4\xf7\x88\x88\x00\xec\x07"
- "\xe0\xbb\xaf\xed\xf4\xd2\x7b\x64\x1a\x55\x98\x44\x7c\x9b\x00\xdf"
- "\xd7\x7e\xd6\x3f\xbd\x4d\x80\x6f\x13\xe0\xdb\x14\x04\xbe\x47\xce"
- "\xf5\xa5\xb7\xe9\x22\xe1\x7b\xa4\x8a\xd1\xdb\xd4\x0b\xdf\x23\x8e"
- "\x30\x7a\x8f\xc8\xa3\x3a\x13\xe0\xdb\x14\x24\xbe\x47\x66\x05\x40"
- "\x6f\xc0\x77\x5f\x9b\xed\xa5\xf7\xa8\x23\x40\x6f\x11\xdf\x26\xc0"
- "\xf7\x7d\xc5\x7e\xe8\x0d\xf8\x36\x01\xbe\x4d\x41\xe0\x7b\x94\xa9"
- "\x17\xbd\x2f\x12\xbe\x47\x95\x89\xf4\xee\x85\xef\x51\x33\x18\xbd"
- "\x47\xda\x81\xde\x80\x6f\x53\x90\xf8\x1e\xd5\x1e\x80\x9f\x00\xf8"
- "\xee\xeb\x2b\x78\xe9\x3d\x7a\x06\x55\xd4\x8b\xf8\xae\x07\x7c\xcf"
- "\x9b\xda\x3f\xbd\xeb\x01\xdf\xf5\x80\xef\xfa\x20\xf0\x3d\xfa\x5e"
- "\x5f\x7a\xd7\x5f\x24\x7c\xe3\x11\xf3\x48\xef\xfa\x5e\xf8\x8e\x38"
- "\xc0\xe8\x1d\x91\x42\x75\xf5\x80\xef\xfa\x20\xf1\x3d\xda\xef\xfa"
- "\xdf\x81\xfc\x93\x75\x55\x24\xc2\x97\xe6\x63\x0c\x17\xce\x47\x19"
- "\xf3\xe6\xa5\xf1\x51\xc6\x64\xf4\xef\xa3\x8c\x89\x63\x34\x1f\xdd"
- "\x12\x9a\x8f\x32\xc6\x12\x8a\x8f\xd2\x97\xe6\xf2\xc9\x17\xce\x4f"
- "\x91\x8f\xbf\x34\x7e\xca\x35\xed\xfd\xfb\x29\xd7\xec\x65\x34\xbf"
- "\x26\x31\x34\x3f\x45\x9e\x10\x8a\x9f\xd2\x97\xe6\x8a\x7d\x17\xce"
- "\x57\x51\xfc\xe1\xd2\xf8\x2a\x8a\xf9\xfd\xfb\x2a\x8a\x68\x46\x73"
- "\xf9\x81\xd0\x7c\x15\xc5\xfe\x50\x7c\x95\xbe\x34\x8f\x8a\xb9\x70"
- "\xfe\x4a\xd4\x88\x4b\xe3\xaf\x44\x36\xf7\xef\xaf\x44\x8a\xf1\x4f"
- "\x64\x5c\x68\xfe\x4a\x54\x00\xf1\x4f\x5f\x7f\xa5\x2f\xcd\x95\x65"
- "\x17\xce\x67\x51\x6e\xbc\x34\x3e\x8b\xf2\xf1\xfe\x7d\x16\x25\x61"
- "\x34\x8f\xda\x1b\x9a\xcf\xa2\xac\x0c\xc5\x67\xe9\x4b\xf3\xb1\xe1"
- "\x17\xce\x6f\xb9\xf6\xe4\xa5\xf1\x5b\xae\xad\xed\xdf\x6f\xb9\x36"
- "\x83\xd1\xfc\xda\xe8\xd0\xfc\x96\xb1\xca\x50\xfc\x16\xa4\x35\xd2"
- "\x1c\x7d\x15\x46\xf3\x71\x2d\x34\xb2\xae\xc6\x09\xfe\x88\x02\xe8"
- "\xae\xe8\x20\x5c\x15\xd2\xbc\x95\xd1\xdc\x1d\x69\xd6\x02\x7d\x34"
- "\x48\x33\xa1\x1d\xdf\x46\x47\xba\x4b\xea\x8e\x50\x8e\x40\x5b\x22"
- "\x08\xf0\xec\x4b\x57\x01\x89\x54\xe5\xe4\xc3\xff\xe3\x84\xfd\x33"
- "\x55\x39\x85\x47\xa1\x8d\x61\x38\x46\xe1\xd2\x95\x2b\xdd\x8a\x86"
- "\x32\x78\x77\x13\x1d\x5f\xaa\x74\x82\x2f\x41\x57\x46\x8f\xb3\x76"
- "\xd4\x10\xab\xeb\x10\x69\x6a\xfd\x0b\xe1\x23\xcd\xe9\x77\xb9\x88"
- "\x9a\x7e\xab\x1e\x67\xc9\xb0\x11\xf7\x92\x68\xb9\x35\xcb\x0c\xb8"
- "\x78\x9f\x24\xb5\xd3\x73\xf4\x9f\x6a\xb9\x53\x61\x69\x76\x2b\xcc"
- "\xb3\xdd\xba\xc6\x0a\x97\xc2\x62\x78\x3b\x13\x2c\x9a\x83\xa8\xd3"
- "\xda\x28\xd5\x2f\x26\xe1\xfa\x63\x24\xa2\x74\x31\x91\x97\x1e\x23"
- "\x4a\x4b\x5b\x2b\x69\x3c\x61\x26\x8d\xa7\x0f\x93\xc6\x73\x70\x75"
- "\xc3\xc5\xc3\x95\x77\x98\x58\x3a\x08\x99\x79\x92\x90\xdc\x36\x6a"
- "\xff\xf9\x11\x32\xce\xe2\x6a\x25\x38\x8f\xf7\x14\xf7\xa3\x0f\xe4"
- "\x29\x64\x1c\xfd\x67\x34\xa1\x4b\xa2\x39\x78\x17\x8e\xe9\x56\x97"
- "\x9d\x58\xda\x1c\xf8\x7e\x3b\xbc\x0f\xcf\x6d\x83\xf2\x79\x33\xee"
- "\x17\x67\xb7\xe4\x1d\x84\xf6\x4d\x43\x3a\xb7\x7b\x7c\x32\x7d\x37"
- "\x89\x2b\x05\x36\x23\x66\x92\x28\xc3\xcc\xee\xee\x60\x31\xf3\x23"
- "\xb6\xff\xd9\xca\xe8\xb1\x40\xef\x1b\xf8\x95\xc9\xca\x59\x87\xbf"
- "\xa0\x38\x4f\x0b\xc7\x67\x9a\x3a\x0f\x11\xeb\x56\x9e\x24\x6d\x24"
- "\x64\x86\x9b\x10\xa4\x09\x8e\x25\xcf\xd2\x92\x28\x9c\x3f\xc6\x7f"
- "\xab\x1e\x6b\x6d\xb3\x93\x2d\x2e\xa8\xeb\x29\x47\x4f\x5d\x9b\xb6"
- "\x36\x11\x78\x77\x43\x93\xc6\x46\xe4\x5a\xa2\x44\x3a\x83\x2f\xda"
- "\x3a\xab\x9d\x8c\x5e\xdd\x49\x29\xd2\x18\x69\x8b\x74\xc6\xf2\x3c"
- "\xb4\xb7\xa6\xda\x49\xae\x83\x28\xad\x39\x70\xcf\xa2\x76\x2b\xf9"
- "\x9e\x40\x1d\xcd\x54\x31\x8d\x00\x3e\x32\x10\x13\x80\xc7\x56\xc0"
- "\xc1\x58\x5a\x3c\xb6\xa4\x1a\xda\x8b\x63\xf8\xc1\xb5\x79\x5c\x20"
- "\xe3\x1f\x7d\x7c\x42\x2f\x9e\x8d\xc9\x0c\xcf\x3f\xd9\x4b\x23\x8d"
- "\x71\x4e\xf0\xf5\x18\x9e\x47\x9c\x1e\x1c\xcf\xc6\xf9\x5e\x3c\xff"
- "\xf8\x3d\x2f\x9e\x7f\xf2\x47\xff\x78\xbe\xee\x7b\x86\x67\xa3\xf6"
- "\xf2\xc4\xf3\x75\xdb\x06\xc6\xf3\x75\xa9\xfe\xf1\x6c\xd4\x78\xfc"
- "\xdd\xe1\xc1\xf3\x75\x07\x2e\x1e\x9e\x8d\xc9\xa1\xe1\xf9\xba\x0a"
- "\x5f\x3c\xff\x78\x1f\xc3\xf3\x8f\xe7\x87\x86\xe7\x9f\xf8\x3d\xff"
- "\x60\x20\x7f\x5b\x82\x67\x51\x3f\xdf\x90\x01\x78\x06\xfd\x6c\x14"
- "\xf5\xf3\x35\xc7\x02\xc0\xb3\x44\x3f\x47\xe7\x7b\xf1\x7c\xc3\x52"
- "\xff\x78\xbe\xfe\x13\x11\xcf\x97\xa9\x7e\xbe\x7e\xee\xc0\x78\xbe"
- "\x7e\xf2\x00\x78\x6e\xf7\xc4\x12\xc3\x83\xe7\xeb\x4b\x2e\x22\x9e"
- "\x43\xd4\xcf\xd7\x6b\x7c\xf1\x1c\x9d\xc5\xf0\x1c\x3d\x29\x34\x3c"
- "\xdf\xe0\x77\xfe\xf3\x40\xb1\x8c\x17\xcf\x26\x51\x3f\x8f\x7f\x9c"
- "\x46\x9a\x40\x3f\x9b\x44\xfd\x7c\xed\x67\x83\xe3\xd9\x24\xd1\xcf"
- "\x3f\x7d\xca\x8b\xe7\xf1\xf7\xfa\xc7\x73\xcc\x1f\x18\x9e\x4d\x97"
- "\xa9\x7e\x8e\xb9\x65\x60\x3c\xc7\x84\xfb\xc7\xb3\x49\xe3\x89\xd3"
- "\x86\x07\xcf\x31\xf3\x2f\x1e\x9e\x4d\x21\xea\xe7\x98\x78\x5f\x3c"
- "\xff\x34\x91\xe1\xf9\x06\x57\x68\x78\x1e\xef\xf7\xfc\x9f\x81\xe2"
- "\x44\x09\x9e\x45\xfd\xac\x1a\x07\x78\x06\xfd\x6c\x12\xf5\xf3\x7d"
- "\xc5\x01\xe0\x59\xa2\x9f\x27\xdc\xe4\xc5\xb3\x6a\x84\x7f\x3c\xdf"
- "\xb8\x48\xc4\xf3\x65\xaa\x9f\x27\x9c\x1d\x18\xcf\x13\x5a\x06\xc0"
- "\x73\xbb\x27\x06\x1e\x1e\x3c\xdf\x38\xe9\x22\xe2\x39\x44\xfd\x7c"
- "\x63\x84\x2f\x9e\x27\x44\x33\x3c\x8f\xb7\x84\x86\x67\x95\x2a\x94"
- "\x18\xdc\x8b\xe7\x7a\x51\x3f\xdf\xdc\x46\x23\xeb\x41\x3f\xd7\x8b"
- "\xfa\x79\xde\xd4\xc1\xf1\x5c\x2f\xd1\xcf\xaa\xef\xbd\x78\xbe\xf9"
- "\x73\xff\x78\xbe\xf9\x6e\x86\xe7\xfa\xcb\x54\x3f\xdf\x64\x1a\x18"
- "\xcf\x37\xed\xf5\x8f\xe7\x7a\x8d\xa7\x7f\x61\x78\xf0\x7c\x93\xeb"
- "\xe2\xe1\xb9\x3e\x44\xfd\x7c\x53\xab\x2f\x9e\x55\xed\x0c\xcf\xaa"
- "\xca\xd0\xf0\x7c\xb3\xdf\xf3\xef\x82\xeb\xdf\xb8\xa5\x0d\xfb\x37"
- "\xba\xb1\x7f\xc3\x3b\xf7\x4f\x13\xd5\xcc\xf0\xec\x04\x3c\xef\x92"
- "\xe2\xf9\x1f\xbd\xfb\x37\x7e\xf6\x09\xdf\x83\xe7\x5b\xfa\xe0\x99"
- "\x07\x3c\x3b\x05\x3c\xc7\x9e\xf4\xf4\x6f\x58\x3b\xf6\x00\x4e\x4e"
- "\x10\xeb\x6c\xc0\xb2\x5e\xc4\xf2\x3f\x00\xcb\x40\x43\x1e\x68\x6c"
- "\x39\xd2\x4a\x92\xec\x8c\x96\xdd\x40\x63\x5e\x8a\xe3\xee\x76\x0e"
- "\xf1\x8b\xb8\xf5\x60\xb8\x71\x35\x60\x37\xfd\x6f\xa4\x31\x13\xae"
- "\x4d\x70\xe5\xc0\x45\xfe\x46\x2c\xed\x80\xdd\x15\x52\xec\x36\x8b"
- "\xd8\x8d\xcd\x1f\x18\xbb\xb1\x29\x17\xaf\x2f\x23\x96\xf5\x7f\xfd"
- "\x23\x59\x99\xf4\xd4\x17\xd4\x9a\xd5\x2a\xe2\xf3\x04\x49\x72\x91"
- "\x28\x3a\x4f\x3d\x56\x9e\x4c\x94\x9b\xdd\x84\xd3\x2d\x26\x4a\xdd"
- "\xdf\xa1\xdd\x1e\xf9\x3d\x46\xe4\x87\x1c\x7f\x21\x96\xd3\xad\xc4"
- "\x72\xee\x20\xb1\xf0\x70\x9d\x80\x0b\xea\x9a\xb4\x54\xda\x6e\xbb"
- "\xd8\xee\x5b\x36\x42\x59\xb1\xfe\xdb\x7d\x4b\xb2\xd0\xee\x54\x68"
- "\x77\xb7\xb7\xdd\x56\x90\x03\xe0\xcf\x0d\xbc\xd8\x1f\x92\x64\x27"
- "\xa3\xd7\xb8\x28\xed\x16\xf1\x8f\xfc\x39\xd4\xe2\x20\x49\x5a\xe0"
- "\xd9\x12\xc0\x7f\xdb\x3e\x92\x9b\x0d\xf8\xef\x76\x20\xee\xec\xd6"
- "\xbc\xf3\x80\xff\xd8\xed\x14\xe8\xe7\x44\xfc\xff\x03\xf1\xff\xb3"
- "\x5a\x5e\xc0\xff\xcf\xd2\x42\xc3\xff\x2d\x01\xe0\x3f\x90\xfe\x10"
- "\x75\x1b\xf6\x87\x74\x63\x7f\x88\x77\x0e\xe8\x20\xf8\x97\xf6\x87"
- "\xdc\x2a\xc1\xbf\x7a\x00\xfc\xdf\x76\xd2\xd3\x1f\x72\xe9\xf1\x7f"
- "\xdb\x20\xf8\xbf\x6d\x00\xfc\x0f\x77\xdf\xc7\x6d\x17\x11\xff\xea"
- "\x41\xf0\xaf\x0e\x00\xff\xc6\xe4\xd0\xf0\x7f\x5b\x2f\xfc\xdf\x2a"
- "\xe2\xff\xd6\x10\xf1\xaf\x0e\x04\xff\x01\xf4\x9f\xfc\x1c\xf1\x0f"
- "\xfa\xdf\xd8\x22\x99\x0b\x3c\x18\xfe\x25\xfa\x7f\xa2\x04\xff\x3f"
- "\x1f\x00\xff\xb7\x7b\xf0\x7f\x19\xe8\xff\xdb\x07\xc1\xff\xed\x03"
- "\xe1\x7f\x98\xfb\x4a\x6e\xbf\x88\xf8\xff\xf9\x20\xf8\xff\x79\x20"
- "\xf8\x0f\x51\xff\xdf\xde\x0b\xff\x13\x45\xfc\x4f\x0c\x11\xff\x3f"
- "\x0f\x00\xff\x81\xf4\xb7\xdc\xd9\x86\xfd\x2d\xdd\xd8\xdf\xe2\x9d"
- "\x13\x3e\x08\xfe\xa5\xfd\x2d\x93\x24\xf8\xbf\x73\x00\xfc\xdf\x71"
- "\xd2\xd3\xdf\x72\xe9\xf1\x7f\xc7\x20\xf8\xbf\x63\x00\xfc\x0f\x77"
- "\xdf\xca\x1d\x17\x11\xff\x77\x0e\x82\xff\x3b\x03\xc0\xbf\x29\x44"
- "\xfd\x7f\x47\x2f\xfc\x4f\x12\xf1\x3f\x29\x44\xfc\xdf\x19\x08\xfe"
- "\x03\xe8\x9f\xb9\x1b\xf1\x0f\xfa\xdf\xd4\x22\x59\x1b\x30\x18\xfe"
- "\x25\xfa\xff\x2e\x09\xfe\xef\x1e\x00\xff\x71\x1e\xfc\x5f\x06\xfa"
- "\x3f\x6e\x10\xfc\xc7\x0d\x84\xff\x61\xee\x8b\x89\xbb\x88\xf8\xbf"
- "\x7b\x10\xfc\xdf\x1d\x08\xfe\x43\xd4\xff\x71\xbd\xf0\x7f\x97\x88"
- "\xff\xbb\x42\xc4\xff\xdd\x01\xe0\x3f\x90\xfe\x9c\xc9\x42\x7f\x4e"
- "\x37\xf6\xe7\x78\xd7\x88\x0c\x82\x7f\x69\x7f\xce\x2f\x24\xf8\x9f"
- "\x3c\x00\xfe\xef\x39\xe9\xe9\xcf\xb9\xf4\xf8\xbf\x67\x10\xfc\xdf"
- "\x33\x00\xfe\x87\xbb\xef\xe6\x9e\x8b\x88\xff\xc9\x83\xe0\x7f\x72"
- "\x00\xf8\xaf\x0f\x51\xff\xdf\xd3\x0b\xff\xbf\x10\xf1\xff\x8b\x10"
- "\xf1\x3f\x79\x98\xfa\x7f\xee\x2b\xc1\xfe\x1f\x5e\x5e\xd7\xe2\xac"
- "\x2c\x55\xf2\x25\x96\xe6\x28\x99\x8a\xb8\xe4\x0d\x65\xd6\x8c\x4e"
- "\x32\xeb\x2c\xf0\x44\x7b\x96\x2c\x38\xab\xc4\xf3\x02\x0d\x14\xe2"
- "\x7f\x9f\x35\xa2\x70\xb9\x4a\xa6\x91\xd2\xd5\x24\xdc\x1d\x69\x4e"
- "\xc7\x34\xeb\x71\x07\xc1\x36\x6f\x41\x1a\x9c\xf0\xd2\x00\xfb\xe0"
- "\xe8\x77\x6a\x65\x75\x01\xe4\xe9\xb6\x91\x36\xc0\x8b\xa5\xcd\x06"
- "\xb4\xdf\x24\x60\x0b\x79\x01\xf5\x99\xb4\xfb\x14\x09\x77\xfd\x33"
- "\xfa\x06\xe0\xf1\x38\xc5\x06\x22\x8b\x69\xa3\x3c\xf2\x12\x79\x84"
- "\x7c\x55\x6d\xc2\xf9\x4a\xf7\x6d\x6b\x02\x7c\xbb\xfe\xa9\xbe\xa1"
- "\x1a\xf2\x0d\x7f\xbf\xcc\x7d\xc2\xf8\x07\xdc\x63\x2d\x47\x80\x96"
- "\xc5\xf7\x86\xc8\xa7\xfb\x02\x59\xff\x12\x40\x3f\x45\xfc\x64\xec"
- "\xa7\xe0\xe5\xc6\x39\x81\xf1\xc9\x98\xec\xb3\xa6\x75\xd8\xf9\x74"
- "\x7f\x4b\x60\x7c\x8a\xbf\xc3\x97\x4f\xc3\xdd\x7f\x70\x3f\xdb\x0f"
- "\x86\xbb\xdf\xc2\xf8\x74\xff\xb8\xd0\xf8\x14\x1f\xd2\xfc\xdf\xbe"
- "\xf1\xf4\x03\x47\x30\x9e\x06\x3e\x05\x28\x4f\xc6\x56\x9f\x35\xb8"
- "\xc3\xce\xa7\x07\xb2\x03\xe3\xd3\x03\x9f\xf7\xe2\xd3\x30\xc7\xb9"
- "\x0f\xec\x61\x7c\x7a\x20\x83\xf1\x29\xfe\x40\x68\x7c\x7a\x20\x80"
- "\xf5\x1f\x81\xc4\x7d\x0f\x6d\xc5\xb8\x8f\x87\xb8\x2f\x30\x3e\x99"
- "\x92\x7d\xd6\x0c\x0f\x3b\x9f\x1e\x8a\x0d\x8c\x4f\x0f\x6d\xf1\xe5"
- "\xd3\x70\xc7\x63\x0f\x25\x32\x3e\x3d\x14\xc3\xf8\xf4\x60\x6a\x68"
- "\x7c\x7a\xa8\x6c\x78\xe2\x93\x87\x27\x61\x7c\x02\x7c\x0a\x50\x9e"
- "\x4c\xad\x3e\x6b\x9c\x87\x9d\x4f\x53\x2c\x81\xf1\xe9\xe1\x5b\x7a"
- "\xf1\x69\x98\xe3\x86\x29\x76\xc6\xa7\x29\x46\xc6\xa7\x29\xf2\xd0"
- "\xf8\xf4\xb0\xdf\xf3\x3f\x83\xf3\xa3\x1f\x69\x41\x3f\x9a\x07\x3f"
- "\x3a\x30\x3e\xd5\x27\xfb\xac\xc9\x1e\x76\x3e\x3d\x92\x11\x18\x9f"
- "\x1e\x69\xf4\xe5\xd3\x70\xfb\xb7\x8f\x54\x30\x3e\x3d\x92\xc6\xf8"
- "\xf4\xf0\xfe\xd0\xf8\xf4\x48\x00\xf3\x3f\xfb\x5f\x87\xd5\xd7\xe7"
- "\x4b\xc8\xbb\xbc\x7c\xbe\x04\x55\x60\xbc\x4a\xd8\x78\x61\x7d\xbe"
- "\x84\xc7\x19\xaf\x12\xa2\x19\xaf\x1e\x4d\x09\x8d\x57\x09\x25\xa1"
- "\xae\xdf\xea\xeb\xf7\x4d\x9d\x74\x79\xf9\x7d\x8f\x05\xa8\xff\xa6"
- "\xde\x72\x61\xfd\xbe\xc7\x44\xfd\xf7\x98\xa8\xff\x1e\x0b\x51\xff"
- "\x4d\x0d\x40\xff\xf5\xbf\xee\xab\xaf\xef\x37\xad\xf5\xf2\xf2\xfd"
- "\xa6\x65\x05\xc6\xab\x69\x7f\xbb\xb0\xbe\xdf\xb4\x4a\xc6\xab\x69"
- "\x5a\xc6\xab\xa9\xb5\xa1\xf1\x6a\x9a\xdf\xf3\x5f\x06\x5b\x2f\xd6"
- "\xd7\xff\x9b\x7e\x99\xf9\x7f\xd3\x03\xf4\xff\xa6\x5f\x60\xff\x6f"
- "\xba\xe8\xff\x4d\x17\xfd\xbf\xc7\x43\xf4\xff\xa6\x87\xe4\xff\xf5"
- "\xe2\x95\x28\x57\xbf\x8a\xbb\xbc\x7c\xc0\x5f\x36\x07\xc6\xab\x5f"
- "\x4d\xbc\xb0\x3e\xe0\x2f\x3b\x19\xaf\x7e\x69\x66\xbc\xfa\xa5\x32"
- "\x34\x5e\xfd\xca\xef\xf9\x87\x83\xad\x4f\xeb\xeb\x07\x26\x1e\xb9"
- "\xbc\xfc\xc0\xc4\x00\xe3\xdf\xc4\xcf\x2f\xac\x1f\x98\x28\xc6\xbf"
- "\x89\x62\xfc\xfb\xab\x10\xe3\xdf\xc4\x00\xe2\xdf\x40\xfa\xfd\x7e"
- "\x3d\x05\x7d\x40\x77\x49\x5d\x4b\x14\xd0\x3f\x2a\x8b\x70\xdd\x31"
- "\xc0\x2f\x39\xf0\x2b\x5f\x45\x9c\x25\xc0\x2f\xbb\x8b\xcc\x5a\xfb"
- "\x05\x6d\xea\x70\x93\x6e\xe0\xd5\x79\xf0\x03\xad\xf6\x76\x5c\xa3"
- "\xf7\xd0\x31\xee\xc9\xcf\xe7\xad\x55\x12\xe4\x17\xd2\xdf\x2d\x9f"
- "\x46\x28\xf0\x4b\xe0\x9f\xbc\xb1\xc2\x55\x62\x9e\x3d\xf3\xe4\x17"
- "\x74\x8d\x8d\xd2\x46\x8d\x03\xf7\x8e\x54\x36\x6a\x5a\x49\x52\x1b"
- "\x19\xad\x7a\x1a\xf9\xf2\xe4\x36\x4c\xb7\xda\x5b\x09\xee\xfb\x29"
- "\xf4\x81\x7f\xa1\x1e\xe7\xfa\x1f\xb5\x1c\xf7\x6f\xc2\x75\x85\x9e"
- "\x3d\x9a\xac\x27\x2a\x04\xfe\xf7\xee\x53\x15\xf8\xff\x3f\x6a\xe5"
- "\x2e\x5c\x9f\x38\xec\xbe\xe0\x93\x42\xff\x1f\xff\x45\xf4\x0d\x9e"
- "\x3a\xae\x49\xa3\x14\xea\x38\xb6\xa9\xd3\x4e\xb0\x9e\x4d\x9d\x06"
- "\x92\x9b\x41\x94\x4d\xdd\xed\x24\xa7\x93\xda\x9b\xf2\xbe\x21\x49"
- "\x67\x71\x5c\x00\xf1\xf4\x64\x23\xe3\xf7\x13\x0e\xfe\x0b\xf5\x0d"
- "\x50\x9e\xb1\xa9\x99\x90\xa8\x7c\xa0\xb5\x8b\x70\xc2\x7a\x4d\x8e"
- "\x44\x00\xbd\x34\xd6\xbc\x63\x48\xbb\x66\xab\xeb\xef\x48\x4f\x0d"
- "\xbc\x9f\xd2\x33\xde\x10\x69\xfe\x0c\xd3\x90\xb6\x38\xcf\xd4\xaa"
- "\xb5\x0b\x79\x3c\xef\x19\xef\xf2\x88\x35\xab\x9b\x34\xb9\x08\x81"
- "\xef\xed\xfd\x34\xb9\x15\xf0\xf5\x44\x88\x7a\xfb\xd7\x89\xc3\xd3"
- "\x5f\x39\xb3\x12\xfd\x56\x77\x89\x71\x0e\xab\xe3\x88\xd3\x83\xe3"
- "\xcb\x98\xec\xc5\xd7\xcc\x7b\x87\x86\xaf\x19\x5f\x0d\x2f\xbe\x86"
- "\xdb\x7f\x9d\x51\x33\x34\x7c\xcd\xbc\x83\xe1\x6b\x46\x32\xc3\xd7"
- "\xcc\x58\x2f\xbe\x46\x9c\xbe\x70\xf8\x9a\x11\xce\xf0\xf5\x6b\x63"
- "\x68\xf8\x9a\xb9\x6f\x78\xfa\x59\x93\x5c\xe8\x6b\x03\xbe\x44\xfd"
- "\x75\xcd\xb1\x00\xf0\x25\xd1\x5f\x49\x7f\x1c\x1a\xbe\x92\xa6\x0f"
- "\x33\xbe\x86\xd9\xe7\x4e\x52\x0e\x0d\x5f\x49\x3a\x86\xaf\x59\xb5"
- "\x0c\x5f\x49\x5b\xbd\xf8\xba\xe6\xd8\x85\xc3\xd7\xac\x54\x86\xaf"
- "\x59\xb1\xa1\xe1\x6b\x76\x48\xfb\x5f\xf5\x8d\x0f\x9e\x9e\x8f\xf1"
- "\x81\xbb\xc4\x24\xea\xaf\x6b\x3f\x1b\x1c\x5f\x26\x89\xfe\x7a\xea"
- "\xec\xd0\xf0\xf5\xd4\xeb\xc3\x8b\xaf\xe1\x8e\x13\x9e\xd2\x0e\x0d"
- "\x5f\x4f\x9d\x64\xf8\x7a\x2a\x9a\xe1\xeb\xa9\x36\x2f\xbe\xae\xfd"
- "\xec\xc2\xe1\x6b\xb6\x91\xe1\x6b\xf6\xd6\xd0\xf0\xf5\xb4\xff\xfd"
- "\x9f\x83\xea\xd7\x9e\x73\x00\x63\x1a\xc0\x97\xa8\xbf\xee\x2b\x0e"
- "\x00\x5f\x12\xfd\x35\x67\xee\xd0\xf0\x35\x67\xc4\x30\xe3\x6b\x98"
- "\x63\x9b\xdf\x34\x0f\x0d\x5f\x73\x66\x32\x7c\xfd\x26\x8b\xe1\x6b"
- "\xce\xe3\x5e\x7c\xdd\x57\x7c\xe1\xf0\xf5\x9b\x58\x86\xaf\xa7\xdb"
- "\x42\xc3\xd7\x9c\x00\xf6\x7f\x0d\xa4\x3f\xfe\x77\x31\x18\x87\xb9"
- "\x4b\xea\x45\xfd\x35\x6f\xea\xe0\xf8\xaa\x97\xe8\xaf\xdf\x7e\x30"
- "\x34\x7c\xfd\x76\xe9\xf0\xe2\x6b\xb8\xe3\xb1\xdf\xc6\x0d\x0d\x5f"
- "\xbf\x7d\x9b\xe1\x6b\x6e\x2b\xc3\xd7\x6f\xf7\x7a\xf1\x35\x6f\xea"
- "\x85\xc3\xd7\xdc\xad\x0c\x5f\x73\x1f\x0f\x0d\x5f\xbf\x0b\x60\xff"
- "\x9f\x40\xc7\x11\x9e\xc9\x1b\x5a\x0c\xf9\xcc\xf5\x43\xc3\x58\xf2"
- "\xc1\xcb\x3b\x86\x4c\xde\x3e\x34\x8c\x3d\x73\x2d\xc3\x58\xf2\x14"
- "\x86\xb1\x67\x22\x2e\x4e\x0c\xf9\xbb\x76\x86\xb1\xdf\xed\x0b\x0d"
- "\x63\xcf\x0c\xe3\xf8\xc7\xbc\xb6\xa1\xc5\x91\xf3\xb6\x0c\x0d\x63"
- "\xf3\xee\xb8\xbc\xe3\xc8\x67\x1d\x43\xc3\xd8\xbc\xf5\x0c\x63\xcf"
- "\xee\x61\x18\x9b\x97\x76\x71\xe2\xc8\x67\x67\x30\x8c\x3d\x1b\xe2"
- "\xb8\xcd\xbc\x90\xd6\xbf\xf4\x3f\x6e\xb3\x20\x71\x68\xb1\xe4\x73"
- "\x5f\x0e\x0d\x63\xcf\xfd\xe1\xf2\x8e\x25\x9f\x9b\x3f\x34\x8c\x3d"
- "\x77\x98\x61\xec\xb9\x70\x86\xb1\xe7\x9a\x2f\x4e\x2c\x39\xbf\x86"
- "\x61\x6c\xbe\x36\x34\x8c\x2d\x98\x33\x7c\xe3\x4d\x29\x6f\x0d\x2d"
- "\x9e\x4c\x99\x3e\x34\x8c\x2d\x3c\x7b\x79\xc7\x93\x0b\x0d\x43\xc3"
- "\x58\xca\xc3\x0c\x63\x0b\x35\x0c\x63\x29\x93\x2f\x4e\x3c\xb9\x70"
- "\x1c\xc3\xd8\x82\x96\xd0\x30\x96\x12\xc0\xfe\xff\x81\x8e\x93\x2d"
- "\x51\x0e\x2d\xa6\x5c\xfc\xe6\xd0\x30\xb6\xf8\x99\xcb\x3b\xa6\x5c"
- "\x1c\x3b\x34\x8c\x2d\x7e\x95\x61\x6c\x91\x85\x61\x6c\x71\xc5\xc5"
- "\x89\x29\x17\x65\x31\x8c\x2d\x8a\x0f\x0d\x63\x4b\x62\x86\x6f\x7c"
- "\x6f\x69\xc6\xd0\xe2\xca\xa5\x8a\xa1\x61\x2c\xf5\xa3\xcb\x3b\xae"
- "\x4c\x2d\x1a\x1a\xc6\x96\x8e\x60\x18\x4b\x8d\x63\x18\x4b\x75\x5d"
- "\x9c\xb8\x72\xc9\x11\x86\xb1\x25\x21\xee\x47\xb1\x34\xaf\x37\xc6"
- "\x56\xac\xce\x5c\x94\xb6\x22\x55\xb5\x62\x75\x46\xfa\x5a\xd5\xba"
- "\x15\x9b\x96\x3e\x7c\xcb\xfa\x49\xaa\xf4\x2c\x55\xfa\x8a\xd5\xcb"
- "\xc5\x84\xd4\x31\xe4\xe9\xa5\x69\x8b\xb2\x30\x05\x72\x2f\x5f\xbd"
- "\x6a\xe9\xea\x0c\x55\xfa\xd2\xb5\xeb\x57\xa4\x2f\xc5\xff\xd7\xa9"
- "\x96\xad\x49\x87\x84\x25\x4b\x57\x64\x2e\x55\x2d\x5e\xbf\x6c\xd9"
- "\xd2\xf4\x75\x63\xc8\xcc\xf5\x69\x19\x2b\xb4\x69\x4b\x55\x8f\xcf"
- "\x7c\xec\x8e\x39\xd3\x7f\x33\xe7\xd1\x47\xf1\x70\x32\xc9\xd9\x64"
- "\x31\xb4\xa4\xb1\x0c\x30\x17\x7e\x9c\x5b\xa3\x68\x8a\x26\xc2\x79"
- "\xb6\xa5\xa7\x89\xf2\xc5\x74\x12\x5e\x74\x9a\x44\xe8\x4e\x13\xb9"
- "\xea\x79\x92\x40\x75\x23\x31\x7d\x1c\xd5\x3d\x92\x40\xf5\xe5\xd1"
- "\x54\x37\x35\xcf\xae\xb8\x2d\x0e\xf3\x52\xdd\xad\x29\xf8\x0e\x68"
- "\x1b\x0e\xe9\xed\xc7\xb8\xd5\x16\xbb\x42\xad\xcc\xfd\x86\x70\x74"
- "\xcc\xb2\x9a\x77\x78\x3b\xf7\x09\xee\x02\x0e\x6d\x27\xdc\x72\x33"
- "\x5c\xfb\x09\xa7\x49\x85\x2b\x03\xae\x3c\xb8\xf6\xc1\x55\x03\x97"
- "\x11\xae\x66\xb8\x8e\xc0\xd5\x06\x57\x07\x5c\x9d\x70\x41\x24\xb7"
- "\x02\x22\xe7\x15\x15\x70\x41\xde\x15\x06\x56\xce\x0a\x0b\x5c\x0e"
- "\xc2\x3d\x9f\x00\x17\x94\xb5\x52\x0b\x57\x25\xe1\xd2\xa6\xc0\xfd"
- "\x00\x5c\xad\x70\xd9\xe0\x39\x1c\x2e\x35\xe4\x6d\x66\xef\xd2\x20"
- "\x6d\x55\x0c\x81\x7a\x0e\x7e\xad\x82\xfc\xab\x1e\x87\x4b\x03\x17"
- "\x7c\x73\xf5\x24\xb8\xb2\x07\xf8\x8d\x71\x90\x32\xdb\xa2\xf2\x6f"
- "\xb4\x09\x67\xe0\x71\x9a\x5b\xdc\x05\x24\xcc\xad\x53\x2b\xb5\xb7"
- "\x13\xd9\x09\x6e\xf9\xf7\xd6\xad\xa8\x67\x1e\x49\x10\xce\x74\x84"
- "\x67\xa4\x59\x57\xf1\x72\xbb\x8d\xbc\x53\x81\x67\x9a\x05\x87\xb7"
- "\xe5\x76\xf6\x7b\x4d\x9c\x4d\xf6\xcb\x64\xe1\x0c\xb8\x62\x67\x2c"
- "\xcd\x4d\xde\x25\x9c\xfd\x86\x34\x44\x39\x28\xea\xce\xa6\x11\x9d"
- "\x2e\x94\x79\xc3\x26\xac\xd7\xf2\x83\xb4\x80\x44\xc2\xef\xcd\x14"
- "\xea\x66\x57\x94\x47\x43\x3d\xc3\xf1\xd9\xad\xbb\x2d\xee\xbc\xc2"
- "\xa2\xc5\xff\x1d\x55\xfa\x3d\xb4\xc4\x52\x81\x71\xb6\x21\xe7\x65"
- "\x72\x0c\x7e\x77\x5e\xd1\x14\xaf\x7a\x32\x8a\x1e\xc3\xdf\x16\xe0"
- "\x1e\xb5\x9a\xf9\x4c\x56\x97\x9b\xcf\x2b\xca\x55\xee\x8a\xa6\x14"
- "\x48\x0f\x77\xeb\xca\xa3\x59\xf9\xb7\x81\x9e\x34\x27\x40\xbe\x5a"
- "\x21\xbd\x52\x5f\xeb\xf9\x1f\xee\xfb\xdd\x7a\x4b\x2b\xde\x15\xf9"
- "\xa4\x53\x78\x2e\x48\x20\xec\xae\x24\xaa\x27\x09\xe9\xe0\x56\x3c"
- "\x77\x97\x99\xc8\x0c\x4f\x62\xbd\x57\xa8\x73\xcd\x94\x57\xe5\x84"
- "\xc1\xf7\x57\x4c\xec\xf9\xee\xf5\x4d\xc9\x78\x46\x2a\x2d\x5e\x6a"
- "\xd8\xfd\x32\x21\xf8\x5b\xac\xdb\x8e\xb1\x24\xbc\xea\x65\x12\x81"
- "\x6d\xec\x2a\x5e\x31\xc7\x73\x0e\x1d\xfe\x86\x83\xfc\x4f\x3c\x91"
- "\x4b\x25\x65\xdf\xe4\x16\xda\xb3\xdc\xc8\x68\xba\x62\xab\x4d\x36"
- "\x6d\x0e\xe6\x57\xdd\x2c\xd0\xf2\xa0\xf8\xde\x8c\xfc\xc4\xf2\xa9"
- "\xae\xb1\x0c\x9f\xf1\x9c\xbb\x28\x40\x8e\x2a\x27\xb6\x96\xd1\xc8"
- "\x52\x81\xe5\x60\x7e\xaa\x6f\x80\xff\x35\x1a\xaa\x13\x68\xac\x56"
- "\xad\x26\x09\x50\xf7\xef\xdd\x2f\x3a\xdb\xa0\x8c\x04\xfa\xa2\xb3"
- "\x1d\xf2\xd7\x08\xf4\xd6\x99\xe3\x6c\xdc\x8a\x36\x78\xd7\xde\x73"
- "\xf6\x25\xa3\xb3\x0c\xf2\x39\xba\x8a\x9f\x8f\xb6\xc9\xe6\xa5\x0a"
- "\x7c\xce\xa4\x2d\x78\xc6\xe6\x99\x4c\xea\x4a\x72\x7d\xc1\x83\xae"
- "\x22\xf0\x3e\xde\x46\xe6\xed\xf1\xb4\x91\xf1\xbe\xa7\x9c\x83\xf8"
- "\x6c\x1f\x2d\x94\x93\xd2\x5f\x39\x36\xee\x79\xf5\x42\x97\x4a\xd6"
- "\x7d\x8e\x36\x97\xfe\x16\xe9\x48\x68\x77\x26\xb5\x6c\x49\xa4\x0e"
- "\xfd\x67\x84\x34\x82\xd8\x82\xcc\xc7\x44\xca\xa8\x3d\x69\x23\x89"
- "\x8a\xd4\x46\xd1\x83\xe6\x23\x64\x73\x22\x6d\xc7\x33\x7c\x9b\x3a"
- "\xdb\x48\xf6\x61\x22\xcf\x6d\x24\xe3\xb2\x13\xa9\xdd\x92\x72\x84"
- "\xb0\xf4\x46\x92\xfb\x25\x09\xdf\x6c\xa4\x8e\x59\xa0\xff\x3f\x3d"
- "\x82\xe9\x6d\x04\xcf\xa8\xcc\x6d\xa7\xae\x9c\xe7\x88\x1c\xff\x6f"
- "\x34\x62\xfa\x57\x24\xf7\x24\x09\x4f\xca\xb2\x47\x55\xc3\x37\xf1"
- "\xf7\xbb\xa1\x2e\xfc\x39\x7a\xa0\xf4\x1c\x21\x9b\x9f\x21\xd1\xd9"
- "\x8b\x88\x32\xc9\x4d\xa8\xd5\xf5\x01\x49\x72\x53\xb0\x2f\x26\xb2"
- "\x65\x05\x89\x48\x72\xe1\x3a\xb6\xcf\x09\x9e\xd3\xbd\x1b\xf2\x42"
- "\xdb\x0c\xd8\xb6\xcd\x47\x49\x34\x9e\x4f\xce\x7e\xf3\x91\xf8\x9b"
- "\xa3\x04\x69\x76\x5e\x31\x55\xeb\xd0\x4d\xb5\x43\xdb\x27\x21\x0d"
- "\xe0\x3b\xcd\x3c\xfe\x0e\x7e\x5f\x9a\x2e\xd0\x40\xb6\xd0\x45\xe4"
- "\x6e\x9d\x39\x7a\x61\x96\x41\x28\xd7\xc6\xad\xd4\xec\x4e\x17\xea"
- "\xe4\x93\x37\xc9\x45\xcf\xd8\x15\x66\xc0\xfd\xca\xb2\xa4\xac\x47"
- "\x29\xfe\x16\x78\xd9\xd9\x55\xbc\xb2\xd9\x43\x6f\x0f\x5f\x20\x8f"
- "\x11\x78\xd1\x19\xa6\x25\xe1\xf0\xde\x6e\x93\x2d\x48\xf0\x62\x4d"
- "\x33\x1f\x78\x3e\xd2\x93\x97\xe5\x49\x1b\x67\x93\xcd\x2f\x92\xe0"
- "\x11\xf1\xd5\x93\x07\xde\x4f\xb6\xc9\x9e\x2b\x63\xdf\x58\xd9\x89"
- "\x79\x44\xdd\xef\xc9\x1b\x46\x8b\x3a\x9b\xdd\x0a\xcb\x1e\xca\x51"
- "\x07\xe0\x31\x9e\x9e\x89\x96\xcf\x72\x51\x07\xaf\x6b\x40\x3d\x2f"
- "\xc7\x73\x5d\x59\xfe\x34\x13\xbc\x4f\x50\x65\x0a\xff\xb7\xe2\x77"
- "\x68\x49\x79\x42\xcf\xbb\x02\x32\x82\x56\xe9\xcb\xc0\x76\x28\x93"
- "\xcc\xd4\x01\xb2\x5e\xa6\x4f\x47\xdb\x61\x29\x43\xb9\xe6\x15\xe6"
- "\x44\xc7\x8e\xa6\x04\xd4\x4f\x28\x23\xb4\xa4\x21\x8e\xfd\x56\xf3"
- "\x1c\xca\x0d\xd3\x35\x69\x95\x6e\x28\x03\xea\xd4\x02\xef\x46\x1c"
- "\xe3\x56\x29\x71\x3d\x29\x2d\x3a\x2b\x17\xce\xbd\xe4\x56\xfd\x98"
- "\xe1\xb7\xb3\xd9\xe7\x99\x43\xda\x81\x3c\x81\xce\x42\xfd\x00\xe9"
- "\xf7\x7a\x65\x58\xa0\x1b\xc7\x74\x51\x43\x02\xd3\x23\x61\x3c\xe4"
- "\x93\x1d\x13\xe5\xf1\xfc\x68\x67\x47\x57\xf1\x2a\xc0\xff\xc3\x0e"
- "\x1f\x39\x29\xfe\x5e\x83\x67\x6c\x42\x5d\xc2\xa0\x4c\x1d\xdc\x47"
- "\xc1\xfd\x0f\x75\x66\xe4\xb7\x50\xee\x35\xf8\xff\x8e\xeb\xa8\xfd"
- "\xf1\xe9\x04\xcf\xd3\x04\x79\x5b\xb5\xcf\x46\x8a\xf6\x62\x39\x2f"
- "\xe2\x39\xa3\x90\x86\x79\x20\xdd\x60\x23\x2f\x6e\x67\xe5\x6b\x34"
- "\x9d\x50\xd7\x5e\xe5\x7f\xc5\xca\x67\xe5\x62\x79\x9e\xb2\xab\x5e"
- "\xa1\x1d\xac\xec\xd5\xe1\x9e\xb2\x75\x90\xe6\x29\xff\xf1\x55\x9e"
- "\x6f\xac\x8e\x85\x6f\xc4\x48\xdb\x50\xf1\x0a\xed\xc4\x32\xe0\x5d"
- "\x82\x8d\x54\x99\xf1\x5d\x11\xa4\xe1\x6f\x25\xb8\x0a\xab\x4b\x84"
- "\x32\x8c\x42\x19\x1a\x1b\xa9\x9c\xdd\x4b\xc7\x29\x3c\x3a\x4e\x2c"
- "\xab\xc4\x53\x96\xb7\x1c\x11\x4f\x25\x64\x9f\xc8\x57\x2c\x57\x8e"
- "\xe5\x42\xfe\x03\x36\xf2\xd2\x5e\x69\xdb\x41\xa7\x19\xa9\xde\xb2"
- "\x0f\xf5\x98\x88\xc7\xef\x51\x27\x7b\xea\x8d\xe7\x8c\x82\xee\x6e"
- "\x47\x79\x11\xf4\xb7\xce\xac\xea\x2a\x5e\x13\xde\x4b\x5f\x87\x63"
- "\x3e\x77\xf1\xb2\xf1\x55\x78\xce\xea\x75\xb4\x1d\xf2\xa8\x7d\xce"
- "\x16\xe5\xc8\x23\x90\x36\xc5\x73\xc6\xa9\x1e\xf2\xd8\xb8\x65\x7e"
- "\xf7\x70\xcc\xb9\x89\x70\xd6\x4a\x1b\xfa\xcf\x88\xab\x29\xd6\x98"
- "\x4e\x62\xad\xe4\x09\x5f\xad\x37\x24\xe4\x50\x03\xf8\x4c\x1f\xe2"
- "\xd9\xd4\xc1\xd9\xe4\x35\x5b\x05\x3c\x75\x83\x5f\x99\xfd\x0b\x82"
- "\x76\xf8\x14\xa7\xfd\xc6\x6a\x3f\x2d\xc8\x16\xfc\x2f\xac\x8f\x2e"
- "\x07\x3f\x14\x7d\x51\xf0\xff\x35\x65\x1c\xf3\x47\x79\xc8\x5b\x8d"
- "\xe9\xe8\xab\x82\x9e\xdc\x2d\x79\x47\xab\xf5\x59\x8c\x76\xda\x57"
- "\x05\x7b\x80\xf5\x75\xfd\xca\x80\x75\xe6\x2b\xf5\x59\xd8\x86\xdc"
- "\x2c\xca\x5b\x5d\x5d\x06\xd4\xa5\xaa\x4c\xf4\xa3\xb5\x5b\x92\xaa"
- "\x08\xe5\xab\xf4\x59\xc1\xb5\x41\x2b\xcc\x7f\x82\x58\xe1\x94\x7d"
- "\xbc\x3e\x0b\xcf\x7a\x2e\xcd\x19\x11\x31\xad\x92\x1a\xce\x4c\xd0"
- "\x1b\xba\x8a\xb5\x7b\x3c\x67\xe9\x06\x59\xee\x1e\x4f\xdb\xab\xc5"
- "\xb6\x43\x9a\xe0\x37\xde\x55\x21\x9c\xe5\x8d\xcf\x7e\xcf\xfa\x04"
- "\x3d\xb2\x0f\x7f\x0b\x6d\x4f\xd8\xed\xa1\x93\xcb\x8e\xe7\x98\x5f"
- "\x7b\x82\x5b\xbb\x2a\x29\xdb\x40\x84\x7d\xfb\x75\x0d\xfb\x82\xab"
- "\xd7\x5a\x61\xfe\x7b\x13\xc4\x29\x49\xae\x8f\x29\xd3\x7b\x6b\xff"
- "\x38\x4b\x2c\x0f\xdf\x79\x78\x55\x2d\xc6\x0f\x21\x7c\xc3\xef\xf9"
- "\x07\x92\x76\x29\xfb\xb6\x2b\x7d\x7a\xe8\xed\x4a\x57\xf6\x6d\x57"
- "\xfa\xaa\xe1\x6d\x57\x7a\x46\x00\xed\x52\xf5\x6d\xd7\xba\xf1\x43"
- "\x68\x57\x7b\xdf\x76\xad\x9b\x3e\xbc\xed\x5a\x37\x23\x80\x76\xc5"
- "\xf5\xd3\xae\xb3\xa1\xb7\x6b\x9d\xa1\x6f\xbb\x32\xc6\x0f\x6f\xbb"
- "\x32\x62\x83\xd6\x87\x7a\x8b\x9d\xe9\xc3\x8c\x83\xc1\xeb\xc3\x8c"
- "\xed\x7d\xf5\xe1\xfa\xf3\x5e\x7d\xb8\xfe\xab\x90\xf4\xa1\xbe\x5c"
- "\xf4\x29\xd6\xbf\xd7\x47\x1f\x96\x94\xc7\xf5\xaf\x0f\xd7\xeb\x04"
- "\x7d\xa8\x2b\x0f\x32\xae\x5f\x9f\xdc\xa3\x0f\x15\xe5\x71\x3e\xfa"
- "\x30\xd2\x02\x36\x72\x7d\x4d\x68\xfa\x70\x7d\x4d\x5f\x7d\xb8\x5e"
- "\xe9\xab\x0f\xd7\xfb\x9d\xeb\x4c\x4b\xcc\xea\xfe\xf4\x61\x92\xeb"
- "\x3b\xca\xb0\x61\x56\x07\x57\x9f\xcc\x84\x01\x30\x5f\x33\xf0\xb7"
- "\x1a\x6a\x82\xfc\xd6\x5b\x7e\xbf\x15\xd1\x89\x7e\x86\x72\xcb\xab"
- "\x84\x3b\x0e\x91\x78\x53\x4c\x2b\xc4\x01\x0e\x72\xa7\x16\x30\x51"
- "\x40\xa6\x34\x55\x76\x90\xa6\x98\xe3\x84\x8e\xee\xb4\xd3\x37\x4a"
- "\xe3\x12\xd2\x11\x9b\x1b\x96\x5a\x33\x1c\x41\x62\x73\x43\x9c\x07"
- "\x9b\x4d\x2e\xc0\x66\x26\xe2\x31\xeb\x8f\xd6\x8e\x13\x22\x36\xb3"
- "\xf2\x7b\xf8\x53\xc0\xf0\xd9\x2f\x36\x41\x26\x7c\xb1\xd9\xb0\x87"
- "\x61\x33\x6b\x66\x5f\x6c\x36\xec\xe9\x1f\x9b\x59\x13\x19\x36\x1b"
- "\xf6\x04\xd9\x86\x4e\x2f\x36\x1b\xf6\xf8\x60\xf3\xd6\xd2\xb8\xae"
- "\xe2\xac\x19\xa1\x61\x33\x6b\x86\xa7\xed\x55\x62\xdb\xe1\x5b\x6f"
- "\xf9\x62\x33\x6b\xab\x5f\x1e\x16\x7d\x19\x07\xfa\x50\x7e\x82\xdb"
- "\x38\xc7\x0d\x7e\x2b\x5f\x32\x49\x0d\x71\x57\x17\x9e\x19\x4f\xb9"
- "\xc9\x84\x6e\x50\xcb\xbb\x20\xfe\xed\xea\xd2\x44\xd0\x31\x9d\x9b"
- "\xa8\x33\x9a\x40\xdd\xa3\x68\x97\x3a\x12\x68\x16\x0b\xf7\xb1\x55"
- "\x99\x64\x1c\x5c\xd1\x55\x22\x5d\xe1\xff\x38\xba\x21\x7a\x8c\x3e"
- "\x93\x4c\x8a\xea\x24\x11\x50\x87\xe4\xa8\x7c\x25\x89\x72\x91\x71"
- "\xf8\x3f\x2d\xf8\x42\x0d\xf1\x59\x38\xf6\x7d\xf2\x0a\xf8\x5e\x56"
- "\x14\xa5\xeb\xd4\x04\x62\xb5\x08\xe0\x41\xf4\x6e\x8e\xd6\xb8\x37"
- "\xa8\x39\x1a\x69\xf9\x33\xdd\x9c\x2c\xd4\x89\x8f\x2d\xd5\x02\x86"
- "\xb4\x34\x57\x83\xdf\x4d\xc0\xb3\x8b\xe9\xad\xa5\x19\xb4\x2b\x7a"
- "\x8c\xee\x1c\x99\xb4\x3b\x93\xc4\x56\x67\x12\x35\x75\xaa\x39\xa0"
- "\x41\xf2\x82\xb5\x4a\xe4\x7b\x32\xe5\xe0\x5b\x99\xf0\x2d\xe0\xa5"
- "\x5b\x07\xdf\x72\xc1\xb7\xbe\x83\x6f\x9d\x82\x6f\x15\xc0\xb7\x0a"
- "\xd8\xb7\x82\xa3\xf9\x46\xc3\x40\x7d\xd4\x49\x5b\x26\xe0\x5e\xba"
- "\x5f\x47\x65\x8d\x4a\xc4\xfe\xea\x33\x9b\x35\x41\xe2\x7d\x93\xca"
- "\x5f\xf9\xa5\xef\x90\x18\x2a\xbf\x55\x3d\x6b\xdb\x17\x14\xe3\xe8"
- "\x6d\xef\x90\x49\x28\x73\x4d\x8e\x93\x84\x2a\x6e\x55\x9b\xd4\x1d"
- "\xc1\x7e\xcb\xef\xfc\x87\xe2\x02\x88\x9b\xe5\x10\x87\xca\x2d\xb5"
- "\xa5\x05\x34\xcb\x19\xa3\x2f\xeb\x8e\xd1\xd7\x2c\x74\x29\x01\x57"
- "\x34\x4b\x95\x4e\x54\xc7\xb9\xbc\xbf\x1d\x6a\x01\x1b\xf1\x2c\x89"
- "\x38\xc6\xe5\x47\xe4\x1e\xc6\xbe\xc6\xcd\x31\xbe\x7d\x8d\x9b\x13"
- "\x08\x97\x5d\x43\xb8\x2d\x06\xc2\xe5\xb4\x11\xc8\xe7\x7b\xe5\x11"
- "\x56\x56\xb6\x2e\xe9\xcd\x09\x24\xc7\x45\xbf\x86\x38\xb6\x48\x0f"
- "\xf1\x6f\xd2\x44\x99\xcd\x90\x89\x7d\x70\xd9\xdb\x80\xa6\xdf\x82"
- "\x5d\x8a\x82\xff\x9f\x02\xde\x11\x6d\x3a\xf9\xd1\x09\x2e\x7b\xb6"
- "\x0b\xfe\x8f\xea\x1c\x95\xe8\xce\x4d\x26\xae\xe8\xa6\x04\x67\x89"
- "\xa5\xcc\x0d\xb1\x2c\x2f\x9f\xa4\xc6\x7e\x10\x6b\x87\x9b\x54\x02"
- "\xee\x16\xba\x23\x50\x1e\x92\x0d\x8b\x0f\x91\xe3\x19\x84\xcb\x3d"
- "\x4b\x14\xf4\x8c\x5a\xee\xc1\xf5\xcc\x8e\x28\xc7\x96\x0e\xca\x23"
- "\xbe\xb1\xdf\x01\xde\x45\xe6\x9c\x05\x5b\x6b\x6f\x27\x95\x10\x37"
- "\xbb\xd7\x69\xc6\xda\xcf\x68\x7e\xb4\x8b\x27\xe3\x22\x3b\x89\xb2"
- "\xf2\x34\x60\x70\x1d\xe0\xef\x34\xe0\xdc\xce\x70\x8e\x6b\x85\xaa"
- "\x11\xe3\x85\x8e\x94\xdd\xa7\x19\xc6\x05\xdc\x21\xc6\xd7\x00\xee"
- "\x56\x7b\x71\xe7\x3a\x03\x18\x2f\xde\x04\x75\xa3\xd8\x2f\xc2\xed"
- "\x3e\x31\x0a\xdf\xc9\x46\x4c\xe4\x54\x87\x66\x3b\x88\x37\x0e\xcb"
- "\x1f\xdd\x3d\x5e\x5f\xa3\x7a\x9a\x7e\x77\x8c\xcb\xce\x86\xf4\x08"
- "\xd5\x6f\x6f\x53\x02\xbd\x47\xb3\x3e\x8a\xfc\x08\x8c\xf3\x6d\x40"
- "\x0b\xa4\x8b\xea\x69\x72\xdb\x31\x6e\xf3\x53\x48\xc7\x0d\xfb\x48"
- "\x98\xf6\x11\xda\x06\x34\x4b\xc6\xf2\x6c\xdc\x66\x21\xce\xc2\xf1"
- "\x8f\x4f\x85\xbe\x4f\xf6\x1b\x37\xd0\xcd\x25\x2f\x4f\x00\x7e\xef"
- "\x33\x3c\xdf\x2d\xc8\x1c\xd2\xf1\x78\x1a\xe1\x16\x76\x00\xad\xdc"
- "\x40\xab\x2e\x41\x17\xcc\x16\x74\x41\x51\x67\x46\xb6\x8d\xf2\x49"
- "\xa9\x61\x34\x67\x2d\x8e\xbd\xb8\xc9\x02\x2d\xa1\x5b\x4e\x02\xbd"
- "\x3a\x5b\x51\x6f\x44\xf2\x1b\x98\x6e\x40\x7a\x29\x3a\x88\x92\xea"
- "\xd5\xaa\x77\x72\xcc\x23\xdc\x80\x5f\xd4\x0f\x51\xf9\xb2\xd1\x20"
- "\x97\x91\x25\x28\xbf\x20\xcf\x51\xf9\x82\xbe\x4a\xae\x04\xb9\x75"
- "\x6d\x50\xdf\xec\xdc\xa0\x56\xc1\x35\xc1\xa3\x43\xf0\xcc\xaf\x2a"
- "\xa4\x6d\xf1\x26\x0d\xea\x0f\x6b\x96\x8d\xb8\x80\xb6\x91\x68\x6f"
- "\x36\xa8\x63\x04\x1a\x2f\x57\x93\xbb\x1c\x44\x06\x75\x52\x42\x7d"
- "\xc9\xee\x65\x24\xa2\x51\x73\x8c\xb8\x41\x36\x3c\x74\x9f\xb9\x42"
- "\x45\xa0\x5c\xce\xa4\xfe\x9c\x88\x34\x93\xf9\xc7\x5d\xce\x51\x2f"
- "\xee\x72\x8e\x22\xed\x18\xee\x72\x8e\x5c\x89\xb8\xfb\x34\x59\xc0"
- "\x5d\x98\x73\xbc\x80\xa7\x64\xab\xeb\x7d\xa0\x51\x0e\xf6\x6d\x12"
- "\xc4\xcc\xc1\x3f\x21\x66\x72\xed\x97\x2b\x66\xce\x77\xa9\x55\x70"
- "\x5d\x10\xcc\x40\xb9\x02\x66\x90\x56\x9f\x26\x77\x13\x0f\x8d\x04"
- "\x59\x2d\xb9\x55\xad\xca\x25\x8f\x82\xac\x46\x44\xe5\x4f\x20\x8d"
- "\x02\x9d\xf2\x41\x4e\x29\x7f\x8c\xcb\x9b\x98\xfb\x37\xa2\xec\x2e"
- "\xa0\xd4\xea\x7a\x9b\xf0\x72\x73\x22\xf6\x33\x83\xff\x5b\xe6\x19"
- "\xc3\xc1\xfe\xb8\x28\x2d\x8e\xdb\xdc\x16\xe7\xd6\x35\x96\xf1\xba"
- "\x5b\x53\xa8\x62\x6a\x3b\xf6\xbd\xf1\xba\x91\x84\x57\x3c\x92\xd0"
- "\x55\x9c\xa7\xb5\x11\xda\x2a\xf4\x07\x97\x58\xd0\x77\x41\xfd\xbb"
- "\x43\xe8\x2f\x56\x60\xdf\x79\x5e\x99\x67\x7c\x02\x75\x82\xd8\x2f"
- "\x27\xf6\xdb\xe5\x21\x0f\xc7\x60\xbf\x1d\xd3\x29\x79\xf9\x9e\x7e"
- "\x3b\xcf\x33\xbe\xb7\x71\x79\x5b\xb1\xcf\xc7\xfb\xbb\x7c\xc2\xf2"
- "\x79\x7e\xb7\x79\x04\xea\x7a\xef\xef\xd8\x33\xe8\x15\xe2\xe4\x48"
- "\x44\xbf\x3e\x86\xbc\xb1\x0c\xe4\x27\xfc\x38\x57\x30\x02\xee\x1c"
- "\xd0\xe5\x55\xb8\x87\xc1\x7d\x2d\x96\x1d\x9c\xbd\xca\x17\xd6\x7f"
- "\x42\xfb\x8f\x88\xba\x51\x98\x4b\xa1\xbd\x9d\x28\x4e\x88\xff\x77"
- "\x15\xe7\x57\x78\xc6\x59\xbc\xf9\x7b\xf8\x33\x19\xbf\x0d\x3c\x0a"
- "\x67\x63\x3f\xec\x59\x52\xde\xbd\xc2\x33\x09\x57\x01\x6f\x66\xe3"
- "\x18\x2d\xe0\x57\xd6\x45\x35\x8f\x88\xf7\x87\x51\x3e\xb0\xbf\x14"
- "\xfd\x35\x51\xff\x4e\x61\xdf\x2d\x50\x82\x3d\xb5\x48\xbf\xdb\x1f"
- "\x3d\x6c\x5c\xc1\x24\x7f\xef\x82\xa3\x45\x81\xdf\xf5\x6f\xd3\xd5"
- "\x6e\x1a\x64\x59\xdb\xfd\xfa\x88\x31\x7a\x6d\xd2\x3e\xb7\x81\x77"
- "\x26\x47\x99\xb2\x4f\x06\xe9\x5f\x14\x74\xf8\x2b\xd7\x2d\x37\xa7"
- "\xb8\x2a\xf5\x5a\xec\x93\x6c\xda\xe7\x22\x6f\x9e\x68\xe7\x92\x26"
- "\x4e\x20\x8a\x36\xa2\x44\xff\x69\x66\xc7\xc7\x14\x7d\x28\xfd\x09"
- "\x12\xdb\xfd\x5d\x72\x94\x13\x7c\xc1\x97\x4e\x90\x29\xfc\xf2\xe8"
- "\x31\x25\xcb\x48\x78\x37\xf8\xab\xdd\xcb\x35\x51\x9f\x1e\x69\x27"
- "\x20\x27\xda\xa6\x4e\x1b\xa9\x86\xbc\xf4\xeb\xe4\xc8\x27\x52\xa8"
- "\xc3\x92\xf2\x32\x49\x52\xbb\x0d\x39\x5f\x12\x05\xe8\x22\xa5\x35"
- "\xeb\x6d\x62\x75\x9d\x24\x23\x36\x72\x2a\xab\xeb\x2b\xa2\x5b\x06"
- "\x3a\x0c\x74\x56\xee\x33\xa0\xab\x5d\x67\xc9\x2e\xa9\xae\x7e\xfe"
- "\x35\xaf\xae\xfe\x0e\x74\x75\x31\xe8\xea\xdc\x68\xd2\xa4\x35\x10"
- "\xd0\x1d\xa3\x66\x69\xa3\x1c\x39\x5a\xd0\xd9\x1b\x41\x67\x67\x7d"
- "\x45\x04\x7d\xdd\xd1\x4e\x40\xd7\x46\x56\xad\x26\xe3\x9c\x6b\x40"
- "\x67\x7f\xa7\xf9\xd1\x8e\x1c\xa6\xb3\x77\xae\x06\x9d\xbd\x06\x7c"
- "\xe2\xd5\xa0\xb3\x3b\xfa\xd1\xd9\xa7\xfc\xf8\xc3\xa2\xfe\xe9\x5e"
- "\xa3\xe6\x76\x72\x14\xc7\x55\xb8\x1d\x7f\x1f\x15\x24\x4e\xb6\x6a"
- "\xfd\xf1\x00\xe9\x8d\xf4\xe7\x81\x0f\x8d\xc0\x03\xc1\x6f\x75\x8c"
- "\x4a\x74\x82\x4d\x73\x47\xd6\xd5\xfc\xe9\x44\x2b\x17\x99\x41\x94"
- "\xb3\xb4\x1f\xd3\xee\x75\xc9\xe0\xf7\x27\x2b\x5c\x25\xe6\x94\x12"
- "\xf0\xa9\xdd\xe0\x7b\x3b\xbb\xa2\x23\x80\x06\x4a\xfb\x06\x4d\x14"
- "\xd2\x90\x1f\x0f\xfc\x1c\xb9\x6c\x3e\xe8\xd0\xc9\x55\xcb\x48\xbc"
- "\x53\x57\x77\x84\xea\xea\x9a\xdd\xba\xba\x16\xf8\x6d\xe4\xaf\x6d"
- "\xc8\x97\xbf\x10\x48\xb3\x53\x7d\x7d\x8d\x5b\x61\x4e\xb1\x2b\xea"
- "\x5a\xe1\xb9\x1d\xdf\xe7\x2c\x22\x8a\x24\xf5\x79\x03\xe3\xd7\xeb"
- "\x04\xf9\xc4\xf8\x75\x94\xe8\x20\xee\x43\x9b\x2b\xd8\x57\x91\x67"
- "\x10\x2f\x08\xfe\xbe\x97\x6f\xbd\x6c\xac\xc8\xb7\xc6\x0e\x03\x01"
- "\x7b\x32\xaa\xc7\xd6\x0a\x7c\x3b\x4a\x3c\x76\x16\xe8\x1d\x59\x05"
- "\xb6\xd6\x39\x5c\xb6\x56\x8c\x63\xd0\xd6\xa2\x9d\x45\xbe\xed\x0c"
- "\x9a\x6f\x85\x7e\xe7\xbf\x0f\xcc\x37\x63\x5c\x88\x7c\xdb\xef\xe5"
- "\x9b\x71\x3e\xd5\x19\x67\xbb\x75\xc6\x39\xbe\x7c\x33\x6a\xbd\x7c"
- "\x33\x26\xc3\xb3\xc6\xcb\xb7\xb3\x41\xf0\x6d\xc4\xe9\x2b\x97\x6f"
- "\xbf\xb7\x85\xc8\xb7\x10\xe5\x6d\xb9\x5c\xc2\x37\x90\x37\x23\xc8"
- "\x9b\xb1\x97\xbc\x19\x25\xf2\x66\x04\x79\x33\x4a\xe4\xed\x64\x10"
- "\x7c\xbb\xe6\xd8\x95\xcb\xb7\x17\xfd\xee\x7f\x39\x30\xdf\x4c\x21"
- "\xca\xdb\xf2\x54\x2f\xdf\x4c\x20\x6f\x26\x90\x37\x53\x2f\x79\x33"
- "\x49\xe4\xcd\x04\xf2\x66\x92\xc8\xdb\xd1\x20\xf8\x76\xed\x67\x57"
- "\x2e\xdf\x5e\xf2\x3b\x76\x38\x08\xdf\x42\x95\xb7\x03\x12\xbe\x81"
- "\xbc\x99\x40\xde\x4c\xbd\xe4\xcd\x24\x91\x37\x13\xc8\x9b\x49\x22"
- "\x6f\x1f\x05\xc1\xb7\xfb\x8a\xaf\x5c\xbe\xe9\xfc\xae\x7f\x1e\x98"
- "\x6f\xf5\x21\xca\x9b\x66\x9c\x97\x6f\xf5\x20\x6f\xf5\x20\x6f\xf5"
- "\xbd\xe4\xad\x5e\x22\x6f\xf5\x20\x6f\xf5\x12\x79\xdb\x12\x04\xdf"
- "\xe6\x4d\xbd\x72\xf9\xa6\xf7\xdb\xff\xe9\xe1\x9b\x87\x67\xc8\x3f"
- "\x81\x6f\x34\x99\xb8\xc0\x9f\xfc\xf3\x62\xc6\x37\xe4\x97\xc0\xbb"
- "\x33\xc9\x51\x3a\x91\x67\x2e\x91\x67\x48\x3f\xe4\x1b\xfa\x91\x02"
- "\xdf\x64\xe1\xd1\xe8\x43\xba\xc0\x97\xf4\xf8\x91\x4f\x6a\xa8\xa3"
- "\x51\xf3\x5a\x8f\x1f\xe9\xea\xed\x47\xae\x90\xfa\x91\x6f\xfb\xf0"
- "\xab\xe4\x1c\xf0\x8b\x13\xf9\xf5\x9c\x1f\x3f\x72\xd9\x7f\xf9\xe1"
- "\x57\xf3\xa0\xfc\x02\xde\x8c\x73\x9e\x61\xfc\xda\x29\xfa\xff\x95"
- "\xe9\x43\xe4\xd7\x3a\xe0\x17\xfa\xff\x47\x09\xb7\x6b\x41\xb0\xfc"
- "\x2a\x1b\xd4\xff\xef\x9f\x5f\xa6\xb8\xe0\xf8\xb5\x3c\xd5\xcb\x2f"
- "\xd3\x6c\x17\xd8\x34\x8f\x3d\xf3\xf2\x8b\xd9\x33\x57\x6f\x7b\xb6"
- "\x42\x6a\xcf\x02\xe1\x57\x2f\x7b\x76\x45\xf1\xeb\x65\xbf\xfd\xff"
- "\x6e\x88\xc5\xdd\xa0\xe7\xb0\xbf\x32\xb2\x1d\xe2\x64\x17\xfd\x7a"
- "\x56\x27\xc4\xc9\xae\x51\x89\xa5\xab\x49\xac\x73\x03\xc4\xc9\xc0"
- "\xbb\x92\xd5\x64\x4a\xf1\x6a\x12\xce\xaf\x84\x58\xf9\x04\xc4\xca"
- "\xa0\x9f\xba\xbf\xd5\x44\x59\x52\xec\x84\x87\x58\x19\xfb\xc1\xa0"
- "\xbe\xb1\xf4\x5b\x88\x95\xdb\x40\xf7\xb5\xed\x64\xb1\xf2\x57\x9e"
- "\x58\xf9\x03\x9f\x58\xf9\xa5\xe7\xc5\x58\x59\xa4\x7f\xa5\x94\xf6"
- "\xcf\xfe\xc9\x4f\xac\x6c\x1e\x34\x56\xc6\x18\x79\x17\xc6\xcb\xdf"
- "\x69\xc6\xee\x10\x75\xdb\xce\x53\x43\x8c\x95\xbf\x83\x58\xb9\x80"
- "\xd1\x7e\x67\xd0\xb4\x2f\xf7\x3b\xff\x03\x65\x03\xe5\xa5\xc7\x16"
- "\x01\x9d\x3d\x36\xc8\x09\x36\x08\xfb\x33\xba\x4b\xea\xf6\x03\x5e"
- "\x05\xf9\x10\x6c\xd2\x86\xe8\x08\x94\x0d\x94\x13\x94\x0d\xc1\x16"
- "\x81\x1e\x04\x5b\x94\x56\xfd\x3c\x89\xdf\xfd\x3c\x99\xec\x52\xf8"
- "\xc6\xc8\x4f\xa6\x22\x3f\xbc\xba\x8d\xef\xad\xdb\x96\x4a\x75\xdb"
- "\x07\x7d\x6d\xd1\x60\xba\xed\x79\x7f\xb2\x62\x1e\x54\x56\x50\x46"
- "\x04\x7b\x04\xf2\x72\x21\x64\x65\xe7\xff\x0b\x96\x5f\x7f\xf4\x3b"
- "\xff\x23\x30\x7e\x19\x27\x0f\xce\x2f\x63\x1c\xf0\xcb\xe0\xe5\x97"
- "\x6f\x6c\xec\xe5\x17\x8b\x8d\xf9\xde\xb1\xf1\x52\x69\x6c\x1c\x08"
- "\xbf\x7a\xc7\xc6\x57\x12\xbf\x5e\x71\x0d\x91\x5f\x01\xc8\x97\x11"
- "\xe4\x6b\xc5\x38\x09\xbf\x7c\x62\x62\x09\xbf\x24\xf2\x25\x89\x89"
- "\x97\x4a\x63\xe2\x40\xf8\xd5\x3b\x26\xbe\x92\xf8\x55\xe1\x77\xfe"
- "\x47\x60\xfc\x32\x05\x20\x5f\x26\x90\xaf\x15\x1a\x2f\xbf\x7c\x63"
- "\x61\x2f\xbf\x4c\x12\xf9\x92\xf8\x0e\x4b\xa5\xbe\x43\x20\xfc\xea"
- "\x1d\x0b\x5f\x49\xfc\xda\x39\x7f\x88\xfc\x0a\x40\xbe\x4c\x28\x5f"
- "\x07\x24\xfc\xf2\x89\x81\x25\xfc\x92\xc8\x97\x24\x06\x5e\x2a\x8d"
- "\x81\x03\xe1\x57\xef\x18\xf8\x4a\xe2\x57\xa5\x7c\x68\xfc\xaa\x0f"
- "\x40\xbe\xea\x41\xbe\x9e\x57\x7a\xf9\xe5\x1b\xfb\x7a\xf9\x55\x2f"
- "\x91\x2f\x49\xec\xbb\x54\x1a\xfb\x06\xc2\xaf\xde\xb1\xef\x95\xc4"
- "\xaf\xaa\x03\x03\xc5\x52\xd2\x18\xca\x95\xeb\xe5\x17\xf2\xc6\x09"
- "\xb1\x93\x53\x5e\xb7\xdf\x7f\xfc\xa4\x49\xf3\x17\xef\xe2\xde\x35"
- "\x4f\xb6\xe3\x7a\x10\xe6\x13\xd2\x5e\x3e\x61\xa3\xe6\x4f\xc4\x37"
- "\xe6\xfd\xa8\x4f\x0c\xe5\xf4\xf4\x51\x2c\xf2\x17\xf3\xfe\x25\xe4"
- "\x18\x0a\xf9\x84\x71\x94\x6b\x1d\xf0\x49\xf4\xe3\x77\x0d\xb1\x8f"
- "\xc2\x79\x46\xcd\xed\x02\x3f\x3e\x7b\x11\xc4\x50\x8b\x83\xe5\xd3"
- "\xee\x54\x7f\x7c\xc2\x7e\x22\x8c\x79\x31\x96\xc2\x71\xc7\xa6\xb6"
- "\x76\x52\x9c\x49\x94\xc2\xd8\x63\xbb\xef\xd8\x63\xe9\x71\x88\xa9"
- "\xd6\x00\xdf\x9c\xc9\x44\x7f\x9c\x4c\x29\x79\x9e\xc5\x54\x9e\x78"
- "\xaa\xa9\xd3\x21\x8c\x3d\x5a\x5d\x36\xf2\x84\x8d\x3a\x76\x43\x7e"
- "\x8c\xa3\x2c\x29\x3b\x09\xca\x4a\xee\x97\x44\x81\x3c\x80\x18\x4c"
- "\xe0\x87\x34\x86\xaa\x96\x8e\x37\x2e\xf3\x17\x43\x0d\x3e\xde\x58"
- "\x79\x8a\xc5\x4f\xc2\x78\xe3\x65\x11\x43\xed\xf1\x3b\xfe\x31\xf3"
- "\x4d\xd6\xdf\x80\xb4\xb7\xaa\x5d\x04\xf0\xf4\x75\x54\x07\xeb\xd7"
- "\x73\xe9\xeb\x6a\x30\xa6\xc5\x78\xd6\x9a\x65\x26\xc5\x9b\x88\xb2"
- "\xbb\x2b\x39\x0a\x62\x54\x85\x0b\x74\xdd\x4b\x27\x18\xed\x71\x8d"
- "\x98\x7d\xa5\x46\x98\x2b\x83\xb1\x2c\xca\x8a\x30\xe6\xb8\x98\x4c"
- "\xae\x3c\x46\xe2\x05\xf9\x00\xb9\x70\xe9\xcc\x29\xbc\xa2\xae\x05"
- "\xe5\xe4\x89\x23\xd4\x81\x3c\x40\xf9\xf8\xf4\x08\xf2\xe6\x6d\x92"
- "\x7b\x94\xf1\x46\xe0\x0b\xe7\x3b\x16\xdc\x57\x36\x3e\xf3\xc3\x9f"
- "\xda\xc0\xf8\xb3\xc6\x97\x3f\x55\xa1\x8e\x07\x7b\xe6\x47\xae\x51"
- "\x73\x55\xe2\x78\xf0\xce\x67\x83\xe5\xcf\x6b\x79\xa1\xf1\xc7\x18"
- "\x17\x1a\x7f\x8c\xb3\x85\xb1\x45\x1f\xfe\x18\x35\x8c\x3f\xc6\x39"
- "\x18\x2b\x79\xf9\x73\x36\x40\xfe\xf4\x8a\x91\xae\x28\xfe\xec\xf5"
- "\xdb\xff\x33\x08\x7f\x42\x94\x1f\x63\xb3\x30\x86\xe8\xcb\x1f\x51"
- "\x7e\x8c\x2d\x18\x1b\x79\xf9\x73\x32\x40\xfe\xf4\x8a\x89\xae\x28"
- "\xfe\xbc\xee\xb7\xff\x7b\x60\xfe\x98\x42\x94\x1f\xd3\x6c\x61\xac"
- "\xd0\x87\x3f\x26\x51\x7e\x4c\x73\x30\x16\xf2\xf2\xe7\x68\x80\xfc"
- "\xe9\xdd\x7f\x7a\x25\xf1\xe7\xff\xa4\x84\xc8\x9f\x10\xe5\xc7\xd4"
- "\x2c\x8c\x09\xfa\xf2\x47\x94\x1f\x53\x0b\xc6\x3e\x5e\xfe\x7c\x14"
- "\x20\x7f\x7a\xc5\x3c\x57\x14\x7f\xde\x24\xa1\xf1\xa7\x3e\x44\xf9"
- "\xa9\x9f\x2d\x8c\xfd\xf9\xf0\xa7\x5e\x94\x9f\xfa\x39\x18\xeb\x78"
- "\xf9\xb3\x25\x40\xfe\xf4\x8a\x71\xae\x28\xfe\xfc\x69\xcf\x60\xe3"
- "\x45\x1e\xdf\x59\x3a\x2e\xeb\x04\xff\x0d\xfd\x67\xf4\x9d\x9b\x3a"
- "\x6b\x89\x6b\x0d\xe3\x4d\xf1\x39\xa2\x2c\x11\x79\x23\x8c\xc9\xae"
- "\x64\x63\xb2\x82\xdf\x56\xb8\x6c\x3e\xcd\x0f\x8f\x46\xbf\x4c\x18"
- "\x77\x15\xc6\x26\x4c\xf8\xae\xdd\x29\xf1\xdf\x30\x46\x05\xdf\x9b"
- "\x60\x9c\x9a\xfb\x55\x10\x7e\xdb\x62\x7f\x7c\x19\x7c\x6c\xa2\x52"
- "\x32\x8f\xcf\x13\x7b\x0e\x2b\x5f\x82\x1e\x77\x7d\xcb\xef\xf9\x4f"
- "\x03\xf3\xc5\x14\x17\x1c\x5f\xc0\xde\x14\x2e\x4f\x65\x7c\x39\xda"
- "\x8b\x2f\x26\x8d\x53\x62\x77\x02\xe7\x4b\x2f\x7b\x73\x45\xf1\xe5"
- "\xed\x66\xbf\xb1\x26\xe8\x25\xe4\x09\xce\xef\x2e\x5d\x4c\x62\x8b"
- "\x8f\x91\x29\xce\x6f\xa3\xc7\xcc\x02\x3d\xe7\x5c\x19\x1d\xd1\x04"
- "\x3a\x2e\xa7\x93\x7e\x1d\xd9\x39\x2a\xf1\x50\x8b\x9d\x34\xa5\xd8"
- "\x48\xf7\x86\x64\xa2\x3b\x81\x73\xd5\x6b\xc9\x8b\xe9\x18\xcb\xbf"
- "\x4f\x3e\x3d\x72\x9a\xcc\xda\x47\x9d\xd6\x8e\x5a\x62\xd8\xf4\x3e"
- "\xa1\x2b\xd5\x63\x76\x43\x9e\x85\x40\xc3\x53\xdc\x3b\x45\xe7\x21"
- "\x1e\xbd\x2b\x8b\x28\x67\x74\x50\x47\x53\xc7\x21\xb2\x0b\xbe\x65"
- "\xca\x22\x04\xe9\x8b\x3c\xd1\x3d\x8f\xf1\xe7\x47\x8c\x27\x4f\x31"
- "\x9e\xec\x94\xc4\x9f\x2a\x78\x7f\x5c\x0b\xfc\xf8\xbe\x17\x3f\x8e"
- "\xb4\x13\xa0\xef\xa8\x59\x9d\xc0\x8f\x4e\x0f\x3f\x4e\x92\x9c\xb5"
- "\xc8\x0f\x5b\xcf\x7c\xd7\x6e\x91\x1f\x95\xa8\xbf\xb4\x44\xb9\xc3"
- "\x13\x7f\x9e\x92\xf0\xc3\xb3\x26\x4b\xca\x0f\x4f\xec\xbf\x01\xf8"
- "\x91\xe9\x8d\x3f\xcf\x43\xfc\xb9\x03\xe2\xcf\xdc\xbf\x11\x6e\x47"
- "\x4e\xb0\xfc\x78\xd7\xaf\xfd\xf7\xf0\x02\x6d\x8b\x33\xb2\xae\x06"
- "\xf9\x60\xcd\xaa\x21\xc8\x13\xb4\x27\xee\x6f\xa3\x23\xb2\x33\x40"
- "\x76\x6c\xa3\x12\xbb\x29\xc4\xfc\x10\xef\x5b\xe7\xff\x9d\x60\x9f"
- "\x01\xe3\x81\xd3\x69\xb5\xd7\x12\xa4\xbd\x61\xd3\xdf\x05\x3e\x9c"
- "\xe2\x6a\x22\x16\x74\x12\xee\x4e\xc0\x21\xc4\xfb\xca\x85\xb8\x2e"
- "\x17\x74\xdb\xae\x65\x24\x7e\x86\x96\x3a\x30\x36\x45\x19\xc2\xb9"
- "\x27\xa8\xd7\x9a\xb4\xff\x45\xb0\x5f\xc7\xa9\x30\xa7\x98\x32\x08"
- "\x41\xfd\x86\x74\x1f\xb1\xde\xcb\x27\x9c\x4f\x22\xf0\x6a\x6e\x00"
- "\xf3\x5c\xa5\xfc\x9a\x6f\x0b\x68\x7e\x72\xb7\xd8\x5f\x50\xe9\xe9"
- "\x53\x0b\xb5\xbf\xc0\xd3\xa7\xf6\x1d\x9b\x4f\x92\xfb\x39\xc8\x4f"
- "\xd0\xfc\x7a\x4f\x19\x18\xbf\x8c\x71\xc1\xf3\xab\xab\x1f\x7e\xbd"
- "\x57\xdb\x97\x5f\xc6\xd9\x12\x7e\xed\xf7\xf2\xcb\xa8\x61\xfc\x32"
- "\xce\xf1\xf2\xcb\x98\x3c\x38\xbf\x06\x98\xdf\xfa\x83\xe7\xd7\xfb"
- "\x7e\xe3\x9f\x5e\xfc\x0a\x41\xbe\xbe\xeb\x87\x5f\xff\xa6\xe9\x87"
- "\x5f\x12\xf9\x5a\x2e\x97\xf0\x4b\x94\x2f\xa3\x44\xbe\x8c\x01\xc8"
- "\xd7\x00\xf3\x5a\x7f\xf0\xfc\xda\xef\x77\xfe\x8f\x2f\xbf\x4c\x21"
- "\xc8\xd7\x17\xfd\xf0\xeb\x83\xe8\xbe\xfc\x32\x49\xe4\x0b\x7c\x8b"
- "\x1e\x7e\x99\x44\xf9\x32\x49\xe4\xcb\x14\x80\x7c\x0d\x30\x9f\xf5"
- "\x07\xcf\xaf\x7f\x1f\x70\xfe\x8f\x84\x5f\x21\xc8\xd7\xc7\xfd\xf0"
- "\xeb\xdf\xcd\xfd\xf0\x4b\x2a\x5f\x07\x24\xfc\x12\xe5\xcb\x24\x91"
- "\x2f\x53\x00\xf2\x35\xc0\x3c\xd6\x1f\x3c\xbf\xfe\xc3\xaf\xff\xe7"
- "\xcb\xaf\xfa\x10\xe4\x2b\xb7\x1f\x7e\xd5\x66\xf5\xe5\x57\xbd\x44"
- "\xbe\x34\xe3\xbc\xfc\xaa\x17\xe5\xab\x5e\x22\x5f\xf5\x01\xc8\xd7"
- "\x00\xf3\x57\x7f\xf0\xfc\xfa\xd0\x6f\xff\xb7\x94\x5f\xdd\x7a\x8f"
- "\x7f\xb8\xcf\x97\x5f\xe0\xaf\x47\xb5\xb1\xd8\xca\xc3\x2f\xff\xbe"
- "\xe1\x5f\x62\x7b\x78\xf5\x95\xd7\x37\x14\xf8\x24\x8e\x53\x20\x7f"
- "\xd0\x47\x44\x9f\xb0\x5b\xc7\x78\x84\x63\x80\x03\xfa\x85\x81\xac"
- "\x7f\x0a\x81\x4f\x9e\xb8\x6a\xd8\xf9\x74\x38\x14\x3e\xfd\xa7\xdf"
- "\xf5\x4f\xbe\x7c\xf2\xd8\xad\x40\xf9\xd4\x9f\xcd\xfa\x4f\x4b\x5f"
- "\x3e\x99\x66\x7b\xf9\xc4\xec\x14\xda\x2e\xb4\x55\xbe\x7c\x1a\xc0"
- "\x5e\x05\xb2\xfe\xe2\x07\xcf\xa7\x03\x7e\xf5\x5f\x19\xc7\xd7\xc0"
- "\x55\x0b\x97\x01\x2e\xb3\x9b\x23\xd3\xab\x38\x5e\xc8\x8f\xfb\xfc"
- "\x55\x15\xf4\x79\x3f\x92\x8e\x9c\xee\xc2\x3c\x40\xdb\x71\x98\xcf"
- "\x53\x06\x2d\x26\x48\x3b\x83\x42\x96\x42\xaa\x58\xde\x51\x9e\xb2"
- "\x14\xf9\x24\xc1\x53\x16\xb4\x29\x0f\x68\x6d\x88\xca\x4f\x18\x09"
- "\xf9\xcd\xb4\xb8\x20\x11\xf2\x46\x08\x65\xe6\x87\x0b\xfb\x4b\x7b"
- "\xf2\xba\x0b\x64\xb8\x3e\xdc\x10\x25\x83\xbc\xac\xcc\xd1\x62\x3e"
- "\x15\x5f\x40\x04\x3b\xec\xe6\x38\xfc\x5e\xef\x7a\x8e\x11\xf3\xc5"
- "\x4a\xeb\xa8\xc8\x4f\x10\xca\x13\xf3\x5c\x43\x47\xde\xf8\xb8\xd8"
- "\x16\xb5\x34\x9f\x7b\x2a\xc1\x32\x3d\xf9\xe4\x62\x59\x93\x7c\xf2"
- "\xbc\x46\x08\x9e\x47\x2b\xd4\x2f\x8b\x23\x62\xfd\x14\x98\xd7\x3d"
- "\x26\x3f\xc6\x2d\x0b\x8f\xe3\x39\x12\xe7\xf3\x9b\x42\x22\xe4\x17"
- "\xf3\x46\x0a\x79\x47\xae\x4c\x81\xbc\x93\x45\x9a\x87\x4b\x69\x2e"
- "\xe6\x8b\xf2\xd0\x51\xfa\xce\x5d\xc0\x61\x59\xf8\x5e\x49\x47\x3e"
- "\x9f\x0a\x6d\x98\xe2\xc9\xe7\xf9\x9e\x55\x43\x88\x90\x97\x23\x77"
- "\x8b\x3c\xb9\x16\xda\x91\xe0\xc9\x87\xfb\x29\x78\xf2\xe6\xba\xc9"
- "\xf5\xbb\xbd\xb4\x19\xeb\x2e\x2e\x38\xe2\xce\x0f\x7f\xbc\x77\x99"
- "\x51\xf9\x32\x1b\xe6\x6b\x6c\x17\xca\x46\xfe\x95\x41\xfe\x1f\x89"
- "\x34\x4a\x64\x3c\x51\xf6\xf0\xc4\xcd\xb9\xf0\x9d\xa1\x9a\xd5\x75"
- "\x9c\x98\x6f\x46\xdf\x7c\xe1\xd2\x7c\x3f\x66\x74\x2c\x8d\x00\xda"
- "\xcc\xee\x9b\x37\x42\x9a\xf7\x3a\x96\x77\x6b\x2d\xe4\x9d\xd3\x37"
- "\xaf\x52\x9a\xf7\x27\x2c\x6f\xa1\x16\xf2\x26\xf7\x53\xd7\xb1\x92"
- "\xbc\xd1\x2c\x6f\x91\x1a\xf2\xce\xef\x9b\x57\x25\xcd\x7b\x3d\xcb"
- "\x5b\x86\x75\x48\xe9\x9b\x37\x41\x9a\xf7\x06\x96\xf7\x45\x1b\xe4"
- "\x4d\xed\x9b\x37\x4f\x9a\xf7\xa7\x2c\xef\x4b\x15\x90\x57\xd3\x3b"
- "\xef\x6e\xc6\xdb\x9b\x45\xde\xc6\xb0\xbc\xba\xd9\x90\x37\xad\x9f"
- "\xb6\x85\x09\xe5\xb2\xbc\xe3\x59\xde\x17\x26\x43\x5e\x6d\x3f\xbc"
- "\x90\xe6\x9d\xc0\xf2\x56\x87\x43\xde\x8c\x7e\x78\x21\xcd\x7b\x23"
- "\xcb\x5b\xde\x06\x79\xb3\xfa\xe1\x85\x37\xef\x98\x3f\x6e\x87\x3c"
- "\xd9\xd0\xce\xe6\x7e\x68\x2b\x2d\xf3\x26\x56\xe6\xbf\x3c\x0e\xf9"
- "\xf3\xfa\xa1\xad\x34\xef\xcd\x2c\x6f\x45\x27\xe4\xdd\xda\x0f\x6d"
- "\xa5\x79\x7f\xc6\xf2\xee\xdc\x0b\x79\x8b\xfa\xe6\x05\x79\x63\xf4"
- "\xfd\x85\x48\xdf\x58\x96\xbf\x72\x0e\xe4\x2f\xe9\x87\xbe\x58\x9e"
- "\x47\x66\x6f\x61\x79\x5f\xd6\x40\xde\xb2\x7e\xe8\x2b\xcd\x7b\x2b"
- "\xcb\xfb\xa7\x76\xc8\xbb\xbd\x1f\xfa\x4a\xf3\xde\xc6\xf2\xbe\x8a"
- "\x98\xac\xe8\x87\xbe\xd2\xbc\x6a\x96\xf7\x35\x33\xe4\xad\xec\xa7"
- "\xbe\x37\x4b\xf2\x4e\x64\x79\xf7\x62\x7d\xf7\xf4\xc3\x0f\x69\xde"
- "\xdb\x59\xde\xb7\xf2\x20\xef\xde\x7e\xf8\x21\xcd\xfb\x73\x96\xf7"
- "\x0d\x94\xe3\x7d\xfd\xf0\xa3\x27\x2f\xd8\x85\x49\xee\x31\xff\x67"
- "\xdf\x6e\xcc\x2f\x0b\x17\xe6\xb5\x52\x4e\xd8\xdf\x5f\xc8\x0b\x38"
- "\x31\x88\xfa\xee\x0e\x56\xe6\x9b\x89\x90\x4f\xd8\xfb\x0d\xf3\x34"
- "\x3a\x04\x7d\x04\xf6\xc5\x75\xcf\x6e\xaf\xee\xbe\x93\xe5\xdd\xfd"
- "\x16\xe4\xdd\x2f\xd5\xa1\x94\x0b\x97\xe6\xbb\x8b\xe5\xfb\x10\x69"
- "\x55\xeb\x9b\x2f\xc2\x9b\x6f\xcc\xbb\xfb\xe0\xfd\x81\xea\x5e\xfa"
- "\x18\xea\x29\x2d\xeb\x6e\x56\xd6\x7b\xc9\x90\xd7\xe0\x9b\xcf\xf5"
- "\x0b\x49\xbe\x5f\xb0\x7c\xff\x86\xb4\x31\xfa\xe6\x53\x49\xf3\xdd"
- "\xc3\xf2\xfd\x27\xea\x2c\xb3\x6f\xbe\x04\x69\xbe\xc9\xee\xe2\xfd"
- "\xb5\x42\xde\xfc\x70\x4b\x6f\xfa\x01\xad\x7f\x21\xb1\x69\xf7\xba"
- "\x8b\xff\x5d\x23\xe6\x6d\xf6\xd0\x50\xa0\x33\xc3\x3c\x27\x62\xfe"
- "\x3e\x77\x71\x6d\xb4\x98\xaf\x45\x6a\x07\x24\xb6\xf6\x7e\x3a\xe6"
- "\x9d\x68\xd1\x8e\x0a\xfb\x8e\x82\x7e\x3f\xd2\x9f\xbf\xa1\xbd\x9d"
- "\x5c\x73\x82\x33\x89\xb6\xc7\xb3\xa7\x7e\xbd\x30\x67\x8f\xaf\xd4"
- "\x97\x25\x75\x52\x97\x34\xad\x94\xa3\xcd\x77\x75\x92\x70\xdc\x3f"
- "\x89\x2a\x2c\xb5\x36\x48\xb7\x8f\xd7\xd7\x74\x15\x9b\x8e\xd8\x64"
- "\x4b\x1f\xc7\xbd\x3c\xe0\xff\x76\x1b\x79\x43\xd8\xd7\xa3\xb4\x00"
- "\xfc\x41\x2e\x41\x86\x7b\x30\xef\x86\xff\xf5\x70\x09\xfb\x1e\x6b"
- "\x09\x47\x0b\x49\x82\x21\xd3\x45\x8e\x67\x11\x8e\xd7\x97\xcf\x56"
- "\xa5\xe3\x7e\x22\xf5\xf7\xd2\x0d\x9a\x29\x50\x17\x2d\x7c\x37\xf5"
- "\x18\x3c\x0b\x75\x81\xf6\x83\x6d\x4c\x33\xa4\xe3\x1e\x43\xf5\x2b"
- "\xec\x8a\x46\x2d\x7d\x61\xde\x37\xda\x1c\x72\xe3\x09\xae\x5e\x73"
- "\x06\x74\xc3\x99\x0d\x9a\x47\xb0\x0c\x5e\x51\x9e\x06\x79\xf6\xe1"
- "\x5e\x24\xb4\xa2\x69\x36\xdb\xa7\xa4\xfe\x23\xa1\xfe\x05\xb4\x99"
- "\xc6\xe8\xf3\xf8\xee\xad\x79\x78\x7e\x83\x21\xe7\x04\x39\x26\x79"
- "\x67\xbf\xbe\x49\xd8\xc3\x04\xdb\x05\x6d\xcc\xeb\x2a\xae\xdf\x6f"
- "\x93\x4d\xd7\xb2\x3d\x4a\xea\xfd\x9e\x0f\x0a\xbe\x75\x14\xd5\x95"
- "\x17\x41\xfe\x36\x1b\xf7\x91\x92\xd1\xa1\xde\x6e\x93\x4d\x29\x11"
- "\xff\x77\xd9\x64\x8f\x9a\xd9\xff\x0d\x11\x36\xd9\xbc\xbd\xe2\xff"
- "\xe3\x3c\x7b\xaf\xf4\xbf\x17\x4c\xf9\x7c\x68\x77\x06\xbf\x2b\x39"
- "\x02\xfd\x51\xdc\x97\x8d\x2a\xca\xe7\xab\x26\xe0\x79\x1d\x0d\x6f"
- "\xc1\x37\x33\xd8\x7e\x9a\x0d\x6b\xe1\x1e\x25\xde\xed\xe2\x9d\x62"
- "\x1e\x81\xb7\x31\xa5\x84\x96\x34\x24\x62\x9b\x73\xdc\x94\x87\x72"
- "\x2b\x68\x11\xad\xb5\x66\xb5\x13\xb6\x0f\x75\x43\x15\x11\xf6\xc5"
- "\x01\xba\x02\xed\xe9\x68\x5a\x2b\x7c\x4b\xd7\xa8\x95\xd6\x2b\xee"
- "\xee\x5f\xdc\x33\xf9\xde\xfb\xee\x8f\x7f\x60\xd1\xe2\x25\xa9\x4b"
- "\x97\x2d\xd7\xac\x78\x7e\x65\xda\xaa\xd5\x6b\xb4\x6b\xd3\xd7\x65"
- "\xac\xcf\xdc\x90\xb5\x71\x13\x0e\x56\xf7\xd4\x7f\xd7\xe3\xb2\x4e"
- "\x8e\xc0\x37\xa6\xc2\x37\xcc\x0a\xa1\x2e\x90\xc6\x78\xd2\xe0\x0a"
- "\x57\xf5\x4f\x4f\x6b\x34\x21\xb8\x27\x73\x07\x67\x7e\x06\xf7\x87"
- "\x06\xfe\xcb\xac\x95\xbf\x32\xe0\xf9\x02\x6d\x9c\x79\x46\x93\xfd"
- "\x57\x06\x3c\xdf\xa2\x2e\xba\x9d\xc4\xde\x8c\x67\x10\x98\xe3\xf1"
- "\xfd\xee\x5b\x09\x31\xc2\x6f\xfb\x2b\xf3\x66\x25\x89\x2e\xbf\x8e"
- "\xda\xb7\x5f\x47\x3b\xb0\xfc\xed\xaf\xd0\x76\xfb\x66\x0d\xd1\xc3"
- "\x33\xe0\x46\x79\x9c\x3b\xa8\xa8\x03\x6f\x17\xfc\xd8\x98\xea\x57"
- "\x68\xdb\xd6\xeb\x68\xdb\x0b\xaf\xd0\x8e\xdd\xd7\x51\x5b\xec\x76"
- "\x22\xef\x2a\x36\x1b\x6c\x9c\x39\x5a\xc0\x35\xbc\xe7\xc7\x34\xd4"
- "\x96\xc2\xbb\xbb\x5c\x24\x6c\x37\x3c\x43\x5a\x67\x9d\x8a\xd5\xfb"
- "\xdd\xd3\x8e\x11\xd0\xde\xbd\xd4\x99\x26\xd3\xc3\x77\x18\x8f\x0e"
- "\xde\x6d\x04\x0b\x0c\xdf\xb3\x5b\x1d\xc7\x00\x63\x07\xe3\x70\xdf"
- "\x75\xf8\x5e\x94\xb5\xa2\x83\x60\x79\xef\xa4\x3b\x46\xac\xbb\x81"
- "\xba\x20\xaf\x92\xdf\x9c\x26\x83\xef\x75\x40\xd9\x9d\xd2\xf6\xa8"
- "\x97\xad\xca\x50\xad\x5e\x9f\x96\x36\x71\x0c\x51\x0b\x77\x9f\xb3"
- "\x31\x32\xa0\x3c\x52\xfe\x0a\x35\x42\x3b\x0d\xd0\x5e\x73\x23\x78"
- "\xdc\x80\x17\x02\x6d\x2a\x83\x72\xb7\x41\xfa\x01\xf8\xff\x00\xd4"
- "\xdd\xcc\xce\x53\xf8\xfb\x7b\xb4\xf8\xe0\x14\xa8\x27\xea\x7c\x15"
- "\xee\x55\x75\x66\xc3\x1c\x19\xb4\x7b\x3b\xe4\x33\xab\x6e\x20\xb7"
- "\x1c\xe7\x0e\x29\xa0\x1e\x7b\xe1\x7f\xcc\xff\x21\xf2\x11\xf2\x1b"
- "\x59\xbb\xfe\x2e\x9c\x9d\x03\xb4\x32\x54\x5d\x47\x4b\xba\x8a\x0f"
- "\xb6\xe3\x5e\x76\xc2\x1e\xdf\xf0\x0c\x74\x31\x43\xde\xb2\x33\xb9"
- "\x73\x64\x10\x7b\xc9\x76\xf7\x94\x79\xb0\x16\xeb\x84\xf5\xc0\xf8"
- "\xef\x53\xf0\xbc\x78\x67\x32\xb9\xc3\x41\x64\x9f\xb6\x11\x52\xf9"
- "\x0a\xdd\x03\x57\x25\x5c\x15\x87\xe0\xdd\x41\xb8\xcc\x90\x6e\x81"
- "\xfb\x21\xb8\x1f\x6c\x13\xc6\xeb\xa2\xb1\xde\xeb\xb2\x69\xfb\x5d"
- "\x15\xe4\x67\x58\x3e\x60\xeb\x77\xc7\xb8\xbf\x47\x60\xdd\x71\xdf"
- "\x48\x3a\xe6\x50\xb6\xef\xfe\x7a\x9f\xda\x09\xbc\xff\xff\xed\x1d"
- "\x0f\x5c\x55\xd5\xf9\xbb\xd7\x87\x01\x51\xa0\xbd\x8c\xcc\xf4\x6a"
- "\xb8\xd1\x86\xf8\x30\x33\x35\x4d\x2c\x6b\xb4\xa8\xdc\xe6\x9a\x95"
- "\x35\x48\x34\x29\x45\x42\x53\x52\x14\x44\xdd\x1c\x33\x79\x2a\x92"
- "\x2d\xe3\xbd\x12\x9b\x6d\x6c\xd9\xc2\x46\x9b\x35\xcc\xd7\x02\xe5"
- "\xaf\xfc\x7b\xe8\x43\x9e\x8e\x1a\xa6\x19\x09\x09\x0a\x72\xf7\x7d"
- "\xe7\x9c\xcb\xbb\xef\x81\x86\x96\xf5\xfb\xed\xc7\xd1\xcb\xbd\xe7"
- "\x3b\xe7\x7c\xff\xcf\x77\xbe\x7b\xe0\x77\x0f\xc8\x45\x06\x7e\xd7"
- "\x5f\x45\x91\x78\xcd\x17\xcf\xb9\xd8\xd7\x21\x9e\x0b\xf0\xaa\xfc"
- "\xfa\xcb\x13\xdf\x85\xae\xe2\xf0\xde\xf7\xed\xd5\x95\xd4\xbb\x7e"
- "\x25\x6d\x20\x97\x4f\xc7\x6b\x9d\x3b\xbc\x3c\x8a\xc3\xaa\x43\x78"
- "\xbd\x7a\xbc\xb8\xc7\x80\x5c\x83\x7a\xaa\x41\xfc\x35\x56\x0e\xab"
- "\xc9\x01\xb9\x16\xdf\xfe\x0f\x81\x07\x7d\xc2\x99\x41\xf6\x6c\x4f"
- "\xc5\x98\x8d\xb6\x74\xca\xfb\x23\xc9\x46\xe9\xdc\xb7\xa4\x4e\x95"
- "\xc1\x22\xd0\xb7\xb6\xb9\xfc\xa7\x68\xb2\xbb\xff\x14\x05\x7b\xf8"
- "\x8f\x99\x62\x11\xce\x97\x0c\x0b\xf7\x97\x3d\xcd\xcb\x63\xb0\x5e"
- "\x14\x82\x78\xf6\x28\x4f\x32\x1c\x2c\x47\x4a\xff\x0c\xe0\x9a\x79"
- "\x60\xa0\xf8\x72\x52\x2e\x5a\x41\x3e\x4b\xb4\x05\x5d\xce\x0b\xf2"
- "\x87\x30\x2b\xf1\xb7\x10\xf1\x62\x3d\x1b\xfb\x59\x4b\xe1\xb4\xc6"
- "\x1b\x1b\x93\xf6\x0c\xfa\xa3\xe0\x97\x70\xd2\x38\xd5\x25\x57\x04"
- "\x8d\xe1\xb4\x8b\xc3\x10\x4e\xef\x96\x90\xfc\x25\xf4\xa3\xbf\x6d"
- "\x26\x9f\xa4\x7b\x69\x87\x09\xe7\x52\x04\x74\xb6\xce\x84\xd1\x81"
- "\x60\xc2\xf9\xe6\x73\x4c\x2e\x36\x86\x26\x81\x89\xf0\x51\x4c\x47"
- "\x39\xec\x16\x9a\x8b\x1c\x97\x38\xff\x63\x7f\xc4\xfe\x78\x60\x74"
- "\xb2\x88\x1f\x6c\xd7\xd1\xcd\xa0\xf7\xc8\xf4\x65\x5c\x56\xa4\x95"
- "\x8d\xe3\x77\x91\xec\xa4\x4f\x6c\xcf\x43\x3c\xf1\xd4\xc6\xbe\xbd"
- "\xcd\xe5\xc9\xa6\xef\xb3\x92\x3e\xa8\x3f\x9d\xd7\xc2\xbf\xd7\x57"
- "\xb8\x85\xe9\x0d\xc7\x93\x3d\x54\xa4\x41\x38\x92\x3b\xd4\x0e\x15"
- "\xe3\xd1\xf6\x65\x6d\xb8\xf6\x97\x1c\x77\xb7\x4f\x71\x81\xde\x3e"
- "\x38\x6e\x17\x8e\xb7\xa9\x28\x23\xc5\x13\xa4\xe9\x4f\xeb\x3d\xc2"
- "\xcc\x9d\x69\x88\x63\x49\x1b\xdb\x4b\x41\x3c\xb5\xc8\x8b\x99\xf0"
- "\x20\x3f\x36\x8e\xab\xc4\xb8\x37\xc9\xdd\xd6\x02\x5f\x36\xd9\x9c"
- "\xcd\xe7\x65\x4c\x26\x8c\x5d\x25\x6f\x66\xf1\xb6\x3c\xec\x93\xa7"
- "\xb6\x47\x00\x7d\xef\x94\xaf\x25\xac\x2d\x37\xf9\x2c\xb3\xaf\x8d"
- "\xc7\xb5\x92\xc2\x45\x2b\xd4\x46\x17\xdf\x25\x29\xda\x37\x63\x05"
- "\xdf\xb9\x44\x4f\x5d\x3a\x8b\xad\xab\x44\x83\xc6\x0b\x7c\xb3\x08"
- "\x9f\xa6\xab\x50\xe4\x83\xeb\xab\xd8\x8c\xf0\x6c\xf2\x45\xa6\x37"
- "\x8c\xa3\xcd\xc9\xe4\x8b\x25\x6b\x70\xfc\x9e\x0d\x54\x5f\xca\xea"
- "\x81\x2c\xc6\x76\xb5\x17\x17\x51\x7b\x29\xbe\xa3\xa7\x3f\x8b\xbe"
- "\xd4\x09\x70\x8b\x11\x4c\x2d\xa9\x4c\xb6\x9c\x96\xe5\xd3\xa4\x7d"
- "\x1d\x00\xc4\x27\xea\x28\xaf\x35\xad\x34\x04\x63\x3f\xfb\xde\x3f"
- "\xc6\xeb\x5c\x75\xfb\x4c\x20\x9e\x31\x9e\x09\xfe\x4a\x5f\x15\xb6"
- "\xcf\x25\x19\x49\x9f\xa1\x3c\xf6\x61\x5b\xf9\x54\xe2\xdd\x25\x77"
- "\x69\xa2\x5e\xc7\x4c\x6e\xb4\x03\xd9\x8b\xec\xa2\xc3\x49\xbe\x6f"
- "\x46\x5c\x39\xbc\xce\x7d\x83\x74\x6d\x1e\xa4\x16\x51\x7f\x57\xdf"
- "\xb2\xb7\xa9\x6d\x25\xd2\x1e\x1d\x8f\x6b\x3a\xce\x0b\xfa\xee\x2f"
- "\xe2\xcd\xa1\xb3\x78\x10\x07\xcb\x1f\x90\x17\x2f\xf2\x47\xac\x17"
- "\x89\x71\x74\x9e\x41\x08\x5e\x93\x5c\xf3\xbf\xec\x2b\x77\xff\x2a"
- "\xf3\x9c\xff\x64\x6f\x73\x67\x72\x04\x30\x7f\x48\x00\xe5\x94\x5c"
- "\xb6\x51\xac\x1d\xc2\xd6\x65\x9f\xec\xc3\xf9\xa2\xc3\x31\xdf\xc3"
- "\xd6\x79\xcc\x1f\x97\x46\xd2\x59\xc6\x12\x8e\xcd\x13\x78\x98\xcc"
- "\xcc\x9f\x52\x99\x0f\x14\xa9\x4b\x51\xce\x2e\x3f\x28\x2d\x10\x76"
- "\x2e\xf2\xd0\x89\x16\xbb\x8c\x74\x3e\x03\xc5\xa4\xd6\x54\xb8\xab"
- "\xb5\xdd\x15\x97\xc8\xf6\x9d\xcc\xf6\x65\xf1\x16\xbe\xde\x8a\xb8"
- "\x55\xc6\xdb\x07\xb9\xf9\x30\xf1\xb2\x83\xf9\x2f\xf1\x92\x3c\x8b"
- "\x78\xc9\x63\x7c\x24\x2b\x70\x4a\x2e\x1f\x42\xf4\x71\xec\x4e\x31"
- "\x5f\x05\xae\xd2\x24\xc2\xb5\x1a\x63\x15\xf1\x84\xb4\xbd\x59\xfc"
- "\xbb\x8f\xf9\xc1\x0a\xc1\x7b\x41\x5b\x2a\x8d\x2d\x8a\x3f\x2b\xb3"
- "\xb1\x05\x4e\xf9\x40\x43\x1b\xff\x86\xb3\x2f\x8e\xdf\xa9\x3c\x45"
- "\xfd\xab\x1c\x14\xa3\x95\xc7\xd8\xf3\x47\xca\x23\xe8\xab\x9f\x81"
- "\x01\xf1\x79\x93\x8f\x6a\x7e\x71\x52\xae\xda\x8d\x39\x06\xd9\x2b"
- "\x07\x73\xa4\x9d\xa4\x6f\xf2\x65\xcc\x91\xc6\xb6\xa6\x95\x37\x68"
- "\x7e\x8b\x74\xb6\x91\xee\xb9\x7d\x0e\xde\x8a\x7e\x9c\xe7\xf2\xad"
- "\x83\xb7\x0a\x3d\xee\x44\x3d\x7a\x23\xbd\x37\x85\x5c\x3b\xb1\x3f"
- "\xe6\x62\x55\x2f\x0b\xde\xb7\x8a\xfe\xf7\x6a\x76\x10\x73\xb5\x68"
- "\x03\xc5\x5f\x66\x83\x83\x0e\x31\x36\x5b\xd0\xaa\xd3\xfa\x52\x8e"
- "\xc8\xbf\xcd\x7e\xb0\x8e\xe2\xe0\x68\xb4\x3d\x8b\x7d\xec\x9c\x2a"
- "\x0e\xa3\xb9\xc3\x69\x54\xad\x65\x7e\x88\x79\x8f\xcb\x8f\x0e\xe6"
- "\x7a\xc4\x27\x8a\xc5\xe6\x12\xc4\x41\xf1\x94\x7c\x89\x62\x2a\xbd"
- "\x47\x20\xbe\xf5\x62\xfe\x08\x9e\x2b\x86\xbb\xfb\x4a\xd5\x73\xe8"
- "\x2b\xa3\x5c\xb8\x2b\x02\x7a\x5a\xe7\x2c\x3c\x06\x6e\xe3\x63\x2a"
- "\xa2\x85\x6c\x39\x5c\x36\x51\x27\xbd\xad\x64\x7a\x1b\xa9\xd3\x23"
- "\xea\xad\x72\xa3\xe8\x9f\x47\xb1\xdc\x35\x5f\x2b\x8a\xb5\xb9\xdc"
- "\x3d\x5e\x54\xae\xa2\xf9\xa0\xe3\x6b\xa7\x47\xbc\xc8\xeb\x39\x5e"
- "\x54\x24\x0a\x79\xad\x1e\x73\x23\x5b\xe4\xbb\x5b\x34\x3b\x94\xb4"
- "\x9c\x13\xdf\x21\x2f\xdc\x42\xf1\x93\x68\xeb\xd7\xa0\x2c\xae\x57"
- "\x31\x97\x2b\x17\x74\xb7\x43\xe5\x24\xfd\x7c\x26\x5b\x53\x4c\x20"
- "\x1c\x64\x53\x96\x57\x22\x8c\xdb\xb5\xd2\x48\xb1\x41\x1f\xa3\xb1"
- "\x6f\x46\xa7\x4a\xf3\xa5\x32\xdc\x7d\x2e\x56\xe4\x88\xb9\x28\x68"
- "\x57\x0d\x40\x1b\x99\x74\x74\x73\x3d\xe8\x92\x6d\x6c\xa4\x07\x2e"
- "\x63\xe5\x79\x6d\x4d\xa3\xfe\x38\x36\x11\xc7\x34\x7a\xac\x8f\x66"
- "\xe2\x0f\x69\x45\xb1\x98\x95\xc9\x62\x45\x62\x2b\xe7\xe7\xa4\x45"
- "\xac\x13\x08\x33\x09\x58\x9e\x58\x4b\x34\xbf\x79\xc2\x9d\xa7\xaa"
- "\x88\x9e\xf3\xa3\x8a\x28\x2d\x3f\x62\xb8\x58\x2c\xaa\x8a\x14\xf2"
- "\x11\x6c\x14\x87\x55\x18\x09\xb6\x81\xeb\x21\x43\x65\xeb\xd5\xc1"
- "\x3c\xb1\x5e\xd1\xfc\x92\xb1\x1e\x4c\x73\x8c\xea\x88\xc3\x4a\xf8"
- "\x4b\x53\xce\xd1\x3b\xc4\x56\xa7\x5c\x6e\xa3\x78\x40\xf1\x42\x99"
- "\xcb\xe3\x86\xf2\x10\xbb\x7f\x4e\x71\x87\xf2\x10\x6a\xc7\x7e\xb9"
- "\x14\x8b\x3e\x95\xab\x25\x3a\xd3\x48\x3d\xe1\x8d\x78\xab\x1a\xf8"
- "\xd8\xea\xeb\x59\xae\x70\x22\xa2\x9f\x06\xd3\xc6\x61\xdc\xfa\x88"
- "\xc6\xd1\x78\x2d\x7e\x51\xec\xea\xa0\xd8\xc4\xe8\x55\x3f\x2a\x7c"
- "\x9c\xbd\x37\x68\x79\x51\xbb\xac\xeb\x4b\xdf\x82\x66\x31\xad\x3a"
- "\x9b\xc7\xb3\xea\x2d\x34\x96\xd9\x0f\x63\xe5\xca\xb3\xea\x51\x4b"
- "\x02\x18\xb2\x4e\x53\x5c\x2c\xcc\x10\x7c\x36\x71\x39\xaa\xdf\x63"
- "\x72\xf0\x98\x6a\xe6\xbc\x14\x66\x64\x9d\x63\x6d\x55\x24\x0b\xb5"
- "\xa5\xeb\xda\xd4\xf6\x60\x6a\x63\xe7\xde\x79\x8e\xeb\x6c\x9f\xd7"
- "\xad\x3f\x9d\xd1\x85\x31\x94\xde\x51\x44\xec\xad\x89\xe7\x7c\xd6"
- "\x8c\xd2\xe2\x2e\xea\x65\x0f\xc5\x5e\xd6\x36\x57\xf4\x79\x48\xdc"
- "\x59\x7c\xaf\x79\x82\xeb\x35\x50\x16\xfa\xb6\x71\x39\x6a\xd8\x77"
- "\x62\xd5\x13\x33\x51\xb7\x35\x33\x34\xdd\xea\x9f\x69\xfe\x20\xfd"
- "\x00\xaa\x33\xbf\x4f\x62\xef\xb0\xdb\xa8\x0f\xf1\xc4\xd7\x88\xea"
- "\x48\xcf\x9c\xfa\x53\xb9\xf6\x38\xad\x4b\x3c\x57\xad\x2d\x14\x7b"
- "\x33\x90\x9f\xf0\x3a\xae\x0b\x76\xa3\x16\x63\xd4\xd6\x08\x7c\xe7"
- "\x3f\x86\x7d\xec\xec\x7c\x2b\xfa\x7e\xb0\xbe\x0f\xc5\xa7\xb7\xce"
- "\x39\x05\xce\x9a\x26\x2d\x6e\x50\x2c\x29\x69\x39\x26\x72\x3a\xbb"
- "\x35\x4b\xc4\x92\x53\xb2\xfd\x35\xf7\x3c\xcc\xfe\x9a\x7b\xcc\xa8"
- "\xdd\xed\x19\x33\x30\x6f\x5e\xd3\x9a\x66\x5f\xec\x96\x07\x20\xec"
- "\xe2\xb1\xc3\x1e\x41\x73\x94\xce\x64\x60\xf1\x89\xed\x37\xd5\xfa"
- "\x68\x3c\x53\xdc\x6c\x5e\xae\xed\x5f\xd4\xee\xa0\x5c\xcd\x83\x5e"
- "\x83\x5b\xec\x24\x7a\x1a\x3e\x03\xd0\x37\xfd\x51\x0f\xb4\xdf\x62"
- "\xcf\x15\x71\xde\xea\x16\x2b\xc5\x1a\x46\x71\xd2\x7d\xad\x2a\xdc"
- "\xe2\xbe\x56\xd5\x6e\xec\x1e\x23\x6b\xa3\x7a\xbf\x56\xd5\x8e\xa7"
- "\xb8\xa5\xc5\x48\xf7\x58\x50\x1b\x93\xe5\x96\xcb\xda\x4f\x6a\xb9"
- "\xac\x2b\x8e\xda\x93\x28\x46\x21\xfd\x3c\x41\xdb\xe1\x94\x3f\x76"
- "\x6a\xb4\xb1\xdd\x58\xa2\xa0\x6f\xa6\x15\x46\xa0\x4f\xe5\x8b\x1c"
- "\x90\xcd\xcd\x73\xec\xbb\xea\x35\xde\xe8\x7f\xbe\xe4\x67\xf9\x71"
- "\xa7\xa1\xc1\xb5\x56\xd8\x9a\x17\x6a\xfa\x3d\xb4\x40\x9f\x17\xbe"
- "\x9a\xa9\xae\x6b\x4d\x3b\x34\x4d\x2f\xe3\x8b\x08\x4b\x17\x7b\x08"
- "\x4c\xb7\x0c\xd7\xa1\x40\x4b\xa6\xbb\x6c\x5c\x8e\x43\x91\x24\x07"
- "\xbd\x13\x21\x7d\x3f\xca\x7b\x30\xe7\xc3\xe7\x72\xb3\xa5\xcb\xe7"
- "\x0f\x34\x9c\x4d\xd5\xe7\x57\x85\xb4\xff\xb3\x47\xbc\x7b\x16\x60"
- "\xbe\x63\xd6\xef\xc5\x3c\x78\xcf\x74\x25\x3e\x21\x36\x6e\xf1\xdc"
- "\x31\x4a\x6c\x5c\xec\xe2\xd8\xe8\xf9\xb1\xcb\xa2\x17\xc7\x2e\x8c"
- "\x0b\x59\x10\xfd\x74\xec\x6c\x65\x69\xf4\x22\xc5\x94\x38\x32\xd1"
- "\x17\x5c\x5d\x27\x2a\xd1\x8b\x16\x3d\xbf\x60\x4e\x8c\x12\x17\x3b"
- "\x7b\x54\xc2\x9c\x45\x73\x16\x2b\xd1\x09\x0b\x9f\x8f\x8b\x51\x46"
- "\xc6\x84\x8e\x34\x8d\x8b\xf1\xd5\xef\xa1\x8d\x08\x80\x93\x9d\x67"
- "\x1a\x1b\xd3\xcf\x80\xb7\xbf\x14\x9f\xe0\x9f\x18\x1b\xc7\xf7\xec"
- "\x0e\xef\x1e\x9d\x01\xf1\x74\x46\x24\x9d\x2f\xa6\xa6\x1d\x2a\xc0"
- "\xbb\x81\xfa\xa1\x9c\x0a\x3e\x7b\x23\xef\x43\x5a\xd3\x0e\x27\x3a"
- "\xe5\xfa\x28\x76\x76\x18\xc2\x51\xb6\x21\xea\x99\x82\x46\xcc\xd9"
- "\xe2\xe9\x6f\x88\x2d\x67\xc0\x68\x5e\x02\x06\xbc\xfc\xf0\x0a\xa0"
- "\x33\x24\x71\x0c\xc6\x13\x47\x01\xdf\xf7\x74\x44\x36\xf9\x9c\x37"
- "\xaa\xeb\xce\x1b\xb9\x5d\x1c\xf7\x6b\x7b\xc1\x0f\xaf\x85\x87\xc9"
- "\x3f\x8f\xc9\x0e\xf6\x7b\xc6\xd5\xe8\xcb\xb4\x8f\xda\xfc\xc1\xdd"
- "\xe1\x98\x0f\x3a\xf2\x07\xb3\xb6\xfb\x5b\x64\xf0\x43\xbe\x0c\xfb"
- "\x92\x4c\xb0\x19\x69\x2d\x0a\x54\xd5\xd6\x34\x47\x80\xb6\x9f\x86"
- "\x32\x04\xa0\x2c\x76\x21\x47\x33\x93\x23\x53\x0d\xca\x18\x88\xfc"
- "\x6d\x22\x7e\x1c\x93\x34\x19\x90\x6f\xbb\x53\x3e\x6c\x45\x3e\x03"
- "\x88\xaf\x9e\xf6\xfa\x68\xbf\x0b\xf9\x5c\xdb\xb9\x04\xf5\x36\x94"
- "\x9f\x29\x91\x9e\xc5\xe7\x1f\xca\xb3\xc7\x82\xcf\x1b\x4e\x83\xdf"
- "\x8b\x74\xbe\x5f\xea\x30\xb5\xb8\xa5\x03\x4a\xe7\xd9\xc1\xff\x05"
- "\xb5\x49\x7d\xb7\xb1\x51\xc8\xb4\x8b\x62\xc3\x3b\xcf\xd8\x0d\x24"
- "\x13\xae\x15\x7e\x96\xd3\x17\xdc\x5b\x34\x6c\x1e\xa4\xb6\xa8\xaf"
- "\xe8\x73\xae\xba\x1b\x49\x27\x94\x6f\x35\xa7\xd2\x19\x72\x75\x18"
- "\x83\x1d\x33\x45\x6e\xdc\xa2\xb6\xcf\xd2\xe5\x52\x0e\xf2\xb3\x96"
- "\x0b\xe0\xf6\xd6\x70\xd3\x59\x82\x34\x86\xdb\xbf\x6e\x2d\x8e\x69"
- "\xd2\xe1\x8f\xf2\xc4\x4f\x38\xf1\xb9\x49\xa3\xc3\xdf\xc3\xeb\x28"
- "\x27\x68\x42\x5f\x6e\xba\x00\xbd\xa0\x4d\x99\x6a\x65\x29\xc2\xd3"
- "\xcf\x82\x01\xfb\x56\x5a\x32\x19\xfe\x7c\xd4\x7b\x10\xe1\x5f\x3d"
- "\x08\x60\x0d\xf6\x69\x4e\x73\xcc\x6c\x61\xe7\xfa\xd5\xe1\xfc\x2f"
- "\x9c\xee\xb9\x8f\x2d\xfc\x79\xa2\x87\x3f\x87\x6f\xa2\x9c\x10\x67"
- "\x27\xf9\x50\xfa\x57\xb8\x0e\x63\x3d\x34\x03\x82\x89\x0e\x3e\x97"
- "\xd1\x7e\x48\x6b\xda\x11\x93\x46\x4f\x45\xff\xdf\xd0\xc9\xf7\x60"
- "\x84\x6f\x85\xd0\xde\x75\x72\xa2\xaa\xee\xc3\xf8\x4e\x3c\x92\x8f"
- "\xe1\x98\x18\xcd\xa7\xd0\xd7\x2b\x99\x5f\x19\x21\x58\x4d\xab\x6b"
- "\xb4\x0c\xc4\x7e\xe8\x57\x59\xe8\x4f\xe4\x57\xd8\xd7\xac\xf9\x14"
- "\xfa\x5a\x19\xf5\x43\x1e\x7c\x77\x2d\x0b\x37\x50\x8c\x6c\x90\xeb"
- "\xbd\xc8\xc7\xd4\x97\x1e\xb0\xab\x37\x3c\x6e\xe7\x76\xaa\xf7\x2a"
- "\x6d\xe3\x36\x70\xe9\xfd\x88\x5d\xa7\xf7\x32\xf4\x63\x5f\xd2\x33"
- "\xdf\xab\xae\xf7\x42\xde\xca\x58\x2e\xbe\x02\x6d\xc0\xd6\xaa\x23"
- "\x36\x1a\x2f\x74\x58\xe4\xd2\x61\xbd\xd2\x93\x0e\x3d\x74\x67\xe0"
- "\xe7\x0a\xd6\x87\xd0\x5c\xc1\x31\x5d\xe7\xbf\xf6\x64\x4b\xa4\x61"
- "\x30\x64\x80\x37\xd1\xb0\x19\x59\xff\x35\x1a\x8d\x74\xd4\x75\x53"
- "\xf2\xbc\x8b\xfa\xb3\xcd\x0a\x40\x7b\xe2\x34\x3e\xc8\x48\xfa\xad"
- "\xb7\xb9\xc6\xab\x2d\x9e\xe3\x47\xce\x76\xe3\x95\x5d\xc8\xab\x7d"
- "\xf3\x40\xf4\x23\xc6\xaf\xd3\x70\x31\x7e\x83\x14\xbe\x4e\xe6\x8f"
- "\x20\xff\x76\x4e\x2e\xdd\x0a\x40\x30\x51\x0f\x69\xc6\xb5\xc7\x73"
- "\x7f\xff\xc2\xbf\x6f\x70\xae\x70\xff\x7d\x83\x73\xfe\x85\x7e\xdf"
- "\xe0\x41\xf7\x3d\xa2\xdb\x69\x99\x21\xe9\x68\x67\x77\xf6\x40\x5b"
- "\x1b\x1f\x6a\xd5\xbf\xcf\x1c\xf5\x21\x1e\x4a\xe8\xec\xf5\x9b\x66"
- "\x48\x2a\xe2\xb1\xb1\x35\xfc\xa8\x37\xcf\x5f\x28\x2f\x72\x36\x52"
- "\x1f\x4f\x39\xba\x8a\xb7\x71\x2f\xdd\xce\xb2\x8a\xd7\x7d\x40\x7f"
- "\xf1\x0f\xe3\x9a\xb4\x66\xd9\xad\x33\xa8\x3d\x54\xfc\x00\xee\x60"
- "\xfd\x55\x2c\x1c\x24\xea\x1c\x8b\xa1\xab\x7f\x57\xfb\x37\x28\x3e"
- "\x9c\x5f\x86\xaf\x0d\x24\xfe\x34\x3e\x40\xd7\x63\xda\x45\x46\xab"
- "\xa0\x0d\xe9\xa9\x50\x36\x9b\x32\xc3\x0b\xf1\x99\x58\x67\x55\xed"
- "\x10\xf8\xb5\xba\xaa\xaf\x13\xc4\xbd\x8e\xa5\xdf\x2c\x1d\x81\x61"
- "\xfd\x62\xd8\x9f\x2a\xdd\x19\xd3\x05\x92\xad\x7a\x5e\x51\xdd\x29"
- "\x5e\xec\xc1\x9f\x7e\xb4\x21\xbe\x60\x6c\x1f\x3f\xbd\xab\xc3\x75"
- "\x2d\xab\x74\xdd\x0f\x70\xf6\x27\x58\x2f\x22\xe3\xa5\x96\xa1\xba"
- "\xe7\x61\xfc\x36\x21\xea\x5b\xc4\x7f\xf1\xa2\x94\xf9\x68\x8f\x2e"
- "\xf7\x98\xd0\xd0\x53\x57\x97\xfe\x27\x6a\x36\x56\xf5\x1e\xea\x6a"
- "\x9f\x9c\xef\x5e\x9f\x62\x76\xaf\x4f\x75\x7e\x0b\x9c\x03\x23\x92"
- "\xec\x1c\x00\x10\x9e\xd3\x05\xf4\xf7\x98\x32\xfe\x66\x8f\x29\xe4"
- "\x2a\x82\x9b\x7e\x00\x77\x8f\xd5\x81\x0d\x3d\xf7\xbe\x32\x65\xf0"
- "\x2a\x31\x21\x86\x35\x05\x74\x6b\x9c\xe2\x01\xa3\x7a\x7f\x45\xc0"
- "\xc2\xf6\x76\xeb\xcf\x60\x8a\xae\x2e\x85\xe3\x0f\x2b\xfa\x7f\x53"
- "\xf7\xbe\x7d\xa5\xaf\xf4\xa2\x48\x34\x3f\xfa\xca\x15\x2a\x2a\x5f"
- "\xc5\x31\x12\xb1\x1b\xfd\x53\xbb\x02\xa5\x2a\x1a\x54\x01\x50\xc5"
- "\xc3\xb7\xb2\x8e\xf7\x95\xbe\xd2\x57\xfa\x4a\x5f\xe9\x2b\x7d\xe5"
- "\xff\xa0\x48\xfa\x17\x6b\x3a\x3f\xe4\x2a\x71\xd7\xbf\xff\x48\xe2"
- "\xd2\xc3\xe4\x6f\x32\x4e\x15\x05\x52\xc2\xf3\x15\x6b\x94\x33\xc0"
- "\x3c\xbd\xcc\xb4\x2b\xbe\xc9\x7b\x5d\x44\x41\xf0\xce\x79\x8d\x81"
- "\x5b\x67\xda\xc7\xe7\x25\xb6\x19\xd6\x4c\xb3\x05\x65\xc7\x34\x18"
- "\x33\x66\x54\x8e\xcd\x5d\xdc\xe2\xb7\x3e\xb2\x28\x24\x67\xfe\xc9"
- "\x21\xdb\x66\x39\x26\xed\x49\xea\x90\x53\xef\xfe\x70\xc4\xeb\x4f"
- "\x1d\x1b\xb8\xe9\xe7\x07\xc7\xfc\x2d\xe1\xb4\x6f\xda\x4f\xf7\xff"
- "\xe8\x4f\xcf\x7c\x36\xf8\x0f\x8f\x1d\x9a\xf8\x8f\x65\xe7\xfa\xff"
- "\xe6\xbe\x7f\xff\xe0\x8d\xb9\x9f\x0e\xca\x7c\xa4\x7a\xdc\xbb\x4b"
- "\xce\x5c\xbb\xe1\xa1\x92\xd0\xbf\xc6\x9d\x1a\x9a\xf5\xe4\x91\xbb"
- "\x3e\x58\xd9\x29\xad\x9a\xba\x77\xf8\x6b\xd1\x47\x07\x6c\xfc\x59"
- "\x79\xd8\xdb\xcf\x7d\xe9\xf3\xbb\xfb\x0b\x6f\x7d\x33\xf6\xf8\x8d"
- "\x2f\x3f\x5a\x3b\xe1\xbd\x17\xce\x7a\xad\xbd\xf7\xa3\x91\x3b\xe6"
- "\x7c\x72\xfd\x96\x5f\x56\xdd\xbe\xfb\xf9\xaf\xae\x79\xf1\xc1\xe2"
- "\x51\x7f\x59\xf0\xf9\xcd\xaf\x3e\x51\x37\xf9\xfd\x15\xe7\xfb\xad"
- "\xbe\x67\xdf\x2d\xdb\x67\xff\xe7\xba\xcd\xbf\xa8\xb8\xed\x9d\x45"
- "\xcd\x57\xff\xfe\x81\x03\x3f\xfe\xf3\xb3\x27\x6e\x7a\xe5\xf1\xc3"
- "\x77\xfe\x73\x79\xfb\x55\xbf\xfd\xc9\xc7\x3f\xfc\xe3\xd3\xff\xbd"
- "\xe1\xa5\x5f\xd5\xdc\xf1\xf7\xa5\xad\xfe\xe9\x0f\x97\x8e\x7e\x6b"
- "\xe1\x17\xc3\x2c\xbf\xae\x9f\xf2\xaf\x64\xf5\x9b\xe8\x0f\x33\xec"
- "\xcd\xdf\xa5\xdd\x5c\xc9\x23\x81\xb3\xa2\x2e\x1b\x8f\x2c\x09\xfb"
- "\x73\x40\xca\xed\x20\x79\x43\x7f\xc3\x65\xbc\x31\x5c\xae\xdc\x17"
- "\x28\x8a\x7e\x7c\x6f\x0a\xed\x1f\x85\xe1\x75\x1b\x5e\x37\x31\x88"
- "\x6b\x17\x60\x44\x2f\x71\x5c\xf9\x22\xa1\xec\xfd\x90\x33\x2f\xe8"
- "\x8f\xda\xf2\x06\x1f\xf0\x85\xab\xc1\x0f\xae\x81\x6b\xc1\x1f\x02"
- "\x60\x00\x0c\x84\xeb\xc0\x08\xd7\xc3\x20\xb8\x01\x02\xe1\x46\x18"
- "\x8c\xd2\x0c\x81\x9b\x61\x28\x0c\x43\xa5\x0c\xef\x59\x96\x14\x08"
- "\x0f\xc4\x1f\xf8\x7f\x3a\x84\xb3\x7a\x54\x1f\xfc\x3b\x85\xe7\x0b"
- "\x78\x99\x80\x3b\xfb\xe0\xdf\x29\x5c\xf9\x9e\xef\xc3\xbf\xd7\xbb"
- "\x84\xa9\x03\xcf\x1e\xdc\x72\x88\xae\xe2\x09\x95\x44\xe9\xaa\xc3"
- "\xd7\x8c\xef\x86\xcf\x7d\xbc\x67\x09\xc7\x4b\x6c\xc8\x26\x03\xf0"
- "\xdf\x37\xa8\xfa\xd2\x91\x29\x7d\x68\x18\x90\x42\xbf\x3a\xf1\x06"
- "\x23\xfb\xf9\xf5\x25\x7f\x31\x5e\x29\x78\xad\xc7\x2b\x1d\xaf\x57"
- "\xf0\xda\xa1\xe1\x06\x69\xd8\x34\x90\x94\x24\xbc\x3b\x41\x1a\x1e"
- "\x88\x57\x0e\x48\x41\x21\x20\x8d\x38\x09\xd2\xc8\xf9\x2e\xe6\x43"
- "\xd7\x75\x71\x29\x85\x08\xb8\x82\xcf\x61\xfa\xbd\xda\x4b\x5d\xcf"
- "\xf2\xef\x9d\x11\xa1\x84\x85\x8e\x0d\xbd\xfd\xb6\x68\x65\xd4\x28"
- "\x65\x8c\x29\x2c\x6c\xb4\x69\xdc\xe8\xb0\x3b\x94\x31\x63\x26\x86"
- "\x99\x26\x9a\x4c\xca\x82\x17\x12\x62\xc3\x4c\x4f\xcf\x51\xe6\xc6"
- "\x26\x2c\x58\x1a\x9d\x30\xa7\x17\x42\x5f\x7a\x41\x51\xe0\xe6\xf3"
- "\x9c\x4d\xbd\x85\x24\x98\x02\xf2\xf1\x99\x20\x9f\x0f\x84\xee\x26"
- "\x0d\x16\x97\x7b\x91\xde\xb0\x81\xb4\xbd\x00\x24\xcb\x58\x90\x5e"
- "\x0e\x07\x69\x23\xea\xd2\x86\xb0\xbd\xbb\x40\x7a\xdf\x00\xd2\xbb"
- "\x6d\x20\xbd\xb5\xbe\x3b\xac\xd8\xca\x61\xc7\x15\x90\x1a\x66\x80"
- "\x74\x04\xed\x50\xbd\x86\xc3\x5a\xb0\xcf\x17\x41\x57\x44\xf6\xcb"
- "\x2f\x97\x6a\x6f\xe9\x7f\xa8\x4a\x69\x9a"
+static unsigned int eth_z8e_uncompressed_length = 377284 ;
+static unsigned int eth_z8e_length = 120629 ;
+static unsigned char eth_z8e[120629 + 1] =
+ "\x78\x9c\xec\xbd\x7f\x78\x54\xd5\xb5\x3f\xbc\x32\x19\x60\x12\x03"
+ "\x13\x31\xe2\x94\x62\x1d\x2d\xd8\x68\x51\x82\x62\x4d\x2d\x68\x14"
+ "\xd0\xa8\xfc\x88\x8a\x6d\x54\x34\xa0\x01\x83\x46\x88\x10\x61\x80"
+ "\x90\x09\x03\xea\x04\x81\x44\x45\x1a\x21\x90\x78\x8b\x6d\x40\xd4"
+ "\xd8\xd2\x36\x58\x84\xd1\xc4\xf7\x62\x6f\x92\xa1\x7d\xe9\xf7\xcd"
+ "\xed\x4b\xdb\x91\x1b\x69\x4c\x03\x4c\xc9\x40\xc6\x64\xe6\xec\xf7"
+ "\xb3\xf6\x3e\x27\x99\x19\x26\x28\xf7\xde\xe7\x79\xff\x69\x9e\x67"
+ "\x72\xce\xd9\x67\xef\xb5\xd7\x5e\x7b\xad\xb5\xd7\xde\x7b\xed\x75"
+ "\x88\x2e\xfe\xcf\x47\x16\xbe\x24\x90\xe9\x50\xc1\xc7\xff\x8d\xf2"
+ "\xff\xfa\xfb\xd7\xdf\xbf\xfe\xfe\xf5\xf7\xaf\xbf\x7f\xfd\xfd\xeb"
+ "\xef\xff\xdf\x3f\x7f\x02\x4d\x3a\x63\x32\xd3\x27\x95\x44\x3d\x2e"
+ "\xcb\x18\x5f\x42\xc2\x8c\x9f\xbe\x2e\x42\x78\x95\x80\x71\x7e\x0c"
+ "\x5f\xf9\xf7\x1a\xd2\x4c\x95\x64\xb9\x26\x95\x52\xc5\x4f\x6d\xa6"
+ "\xa9\x3b\x88\xb6\x8c\x12\x5d\xaf\x6f\x15\xfe\xa6\x12\xa2\xc6\x5d"
+ "\x78\xde\x2a\x3a\x5e\x1f\x25\x02\x80\x33\xcf\x47\xf3\xcc\x0c\x67"
+ "\x1d\x9e\xd7\x21\x1d\x69\xc5\x48\x0b\x70\x5a\x05\xca\x19\xe9\xde"
+ "\xf5\xe7\xa8\xc9\x1e\xa2\x0a\x86\x63\x0f\xd3\xb4\xab\x25\x1e\xb5"
+ "\xc8\x5b\xc2\x79\xd7\x8e\x42\xbd\x69\x44\xae\xad\x22\x18\x81\x83"
+ "\x85\xeb\xe1\xba\xf5\xfc\x47\x62\xea\xf3\x23\xad\xdd\xa8\x6f\x10"
+ "\x18\xa9\x5c\x9e\xdb\x60\xff\x0e\x25\x9e\xa0\x4b\x2e\x67\x98\x8c"
+ "\x9b\x70\x91\xc5\xdb\x1b\xa2\x13\x94\x94\xde\xed\xa2\xc4\x46\x50"
+ "\x63\xf3\x56\x99\x9e\xe8\x0d\x84\xc8\x5e\x4a\x09\x78\x37\x13\x57"
+ "\x13\xca\x0d\x67\xfa\x3c\x54\x4d\x63\xb9\x6e\xc0\x35\x0b\x93\x27"
+ "\xa1\x66\x24\x11\xd3\x28\x60\xa2\xef\x05\x5c\x94\xd0\xe3\x4a\x42"
+ "\xfb\x2d\xe9\xb2\xfd\xa8\x17\x65\xcd\x27\x28\xf9\x9f\x26\xe4\x47"
+ "\x9d\x7e\xfb\x2a\xc6\x21\xf9\x53\xe1\xf2\x98\x0c\x38\x9a\xcb\x73"
+ "\xc9\xce\xd7\x88\xba\x5d\xa6\x7b\x03\x26\xab\xd0\xe1\x1c\x30\xe0"
+ "\x70\x3e\xd4\x95\xc2\x75\x75\xbb\xcc\xaf\x45\xe4\xf1\x19\x79\x80"
+ "\xb7\x7f\x42\x80\x12\x19\xe7\xe3\x94\x9c\xc9\xf5\xe9\x6d\x31\x73"
+ "\x1d\xde\xe5\x21\xf2\xa2\xef\x51\x77\x1a\xda\x6a\x6f\x0c\x12\x01"
+ "\xe6\xa5\x35\xa5\x44\x0c\x1f\xf8\xdb\x15\xcc\xe4\x49\x06\x4c\x86"
+ "\xd1\xdf\x56\x97\x67\x64\x8d\xc4\x91\xdb\x6a\x21\x3d\xef\xbc\x48"
+ "\x1c\x19\x2e\xda\x72\x05\xb7\xa5\x09\x1c\xa5\xe7\x59\xdf\x4f\x8f"
+ "\xfe\xf6\x5f\x92\x15\x03\xdb\xa6\x60\x27\x00\x76\x82\x47\x2f\xd7"
+ "\xdf\x7e\x5f\x4c\x7e\x95\x37\x35\x29\x60\x12\x3a\x1d\x92\x3b\x06"
+ "\xf2\x26\x6d\x89\xcc\x0b\x7c\x4c\x8a\xb6\x64\xf2\x51\x72\x1b\xda"
+ "\x99\x88\x3c\x33\xd0\x8f\x76\xfd\xfd\xe5\xfa\x7b\x1b\xde\xdd\xa1"
+ "\xe0\x5d\x92\x19\x01\x2f\x95\xe1\x45\xf2\x96\x92\x28\x33\x7e\x43"
+ "\x60\x20\x0f\xc5\x6f\x98\xc5\xe0\xb7\x65\x36\xa1\x39\xbf\x85\x36"
+ "\x6d\xa8\x23\xcd\x25\xc8\xeb\x08\x92\x7d\x34\x39\x8f\xd3\x25\xf5"
+ "\x80\x4f\x9b\x57\x91\xc5\x59\x24\x82\x5e\x47\x17\xb5\xfa\xbb\xc8"
+ "\xe9\x87\x6c\x84\xce\x52\xe9\x59\xf0\x62\xe8\x24\x95\x3e\x4f\xb6"
+ "\xa6\x92\x2f\x28\x1e\x2f\x6b\x26\x41\xce\x31\x5c\xb6\x9d\x5a\xab"
+ "\xdb\xc9\x59\x1d\x5d\xd6\x79\x25\xd9\x5a\xf0\x8c\x3e\xb7\x32\x1e"
+ "\x2c\x6f\xa1\xe4\x3a\x2a\x79\x93\xcc\xce\xab\xc9\xd4\x92\xef\xd1"
+ "\x71\x49\x71\x30\x2e\xeb\x3b\xc9\xf2\xb3\x85\xe0\xc3\x4e\xc6\xb7"
+ "\x9e\xde\x5f\x15\x34\x35\xda\x66\x50\xa3\xed\x18\x35\xd9\xa6\x50"
+ "\x93\x63\x1a\x6d\xee\xa4\x94\xc6\xe0\x64\x6a\x32\xdf\x4d\x4d\x63"
+ "\xa7\x91\xb7\x0b\xf7\x90\xdf\x46\x5b\x80\xec\xcb\x99\x9f\x52\x0a"
+ "\xb6\x3c\x43\x16\x9f\x82\x09\xda\xa5\x14\x7f\x5c\x4c\xc4\xb4\xe3"
+ "\xe7\x78\xed\x58\xf6\x2d\xb2\x01\xbf\x0e\xe0\xf2\x43\xe0\xf2\xee"
+ "\x58\x1b\x65\x00\xe7\x61\xde\xaa\x10\x99\x4b\x28\x69\x10\x39\x4e"
+ "\xd3\xc0\x7b\x90\xdd\xae\x9d\xd0\x27\x2c\xbf\xdd\xab\x73\xa1\x13"
+ "\x52\x20\xff\x29\xeb\x75\x19\xe8\x72\xbe\x45\xe6\xee\x15\xb9\x09"
+ "\x35\x5b\x45\x7b\x8f\x6b\x38\x19\xef\x20\x8b\xed\x78\xdf\x31\x21"
+ "\x8d\x52\xbd\xa1\x2c\x3a\xd4\xdb\xc1\xf2\xd8\x35\x22\x40\x09\x0c"
+ "\xcf\xea\x80\xec\x2c\xa7\x21\xc0\xe7\x0f\x35\x48\xff\x2e\xf2\xa1"
+ "\x7c\x96\x8f\xb6\xd6\x73\x79\x71\xc5\x63\x01\xed\x8a\xc7\xce\x6a"
+ "\x3f\x7d\xac\x5b\xfc\xf4\xb1\x33\xe1\x9f\x3e\xf6\x4f\xe7\x4a\xb2"
+ "\x84\xaf\x78\xcc\xdf\x5a\x24\xfb\x20\xb5\xb5\x08\x7d\x10\x26\xcb"
+ "\x9a\x93\x94\xfa\xc4\xf3\xe8\xfb\xd0\x5f\x68\xcd\x22\xb2\x69\x49"
+ "\xef\x35\x78\x43\x7f\xa2\x27\x4a\x48\xe0\xfe\x70\xbc\xf6\x75\x27"
+ "\xd7\x67\x19\xb2\x85\x7a\x1b\x7c\xa6\x9f\x07\xb9\x5e\x7f\x52\x43"
+ "\x16\x7e\xd3\xf0\xcb\xc6\x6f\x86\x48\xae\x9f\x01\x5a\x39\x47\xac"
+ "\x4d\xa0\x9d\xbd\x44\x13\x34\x4a\xe8\xa4\xe1\x47\x81\x7f\xea\x20"
+ "\x74\x1b\xa3\x6d\x68\x2c\xfb\x5e\x19\x95\xf6\xf4\x14\x10\xeb\x42"
+ "\xd6\x7f\xac\x0f\x7b\x5c\x23\xec\x3e\xd3\x2f\x32\xa5\xfc\x6e\x85"
+ "\x8e\x49\x6e\x2c\x43\x7a\x47\x60\x75\x41\x82\x7f\x75\x81\xa9\x3b"
+ "\xb9\x71\x1d\xf2\x4c\x43\x9e\x22\x9d\x86\x1d\x0c\x0b\xb2\xe5\x1f"
+ "\x1e\xa2\x44\xc0\x2c\xfa\xed\xb9\x36\xf3\x8e\xad\xe2\x18\xf2\x15"
+ "\xf6\xc3\x02\x6c\xc0\x01\xfd\x47\x94\x19\x69\xa0\x75\xfb\x26\xe4"
+ "\xe3\xf2\xde\x60\x16\x8f\x29\x3e\x6f\x61\x07\x59\x43\x94\x2c\xfa"
+ "\x54\x7d\xc8\xd3\xc1\x3a\x7d\x78\x90\x86\xf6\xb8\x28\x87\x61\x73"
+ "\x39\x6f\x57\x07\xa1\xdc\x3a\xe1\x2c\x30\x21\x7d\x56\x8f\x28\x48"
+ "\x58\x8f\xf4\x46\x94\xd7\xeb\xee\x30\x70\xe4\x3a\xb8\xaf\x25\x9e"
+ "\xe0\x87\xc6\xc2\x20\x0d\xaf\xa2\x44\x94\x7b\x88\xe1\x31\x2c\xf0"
+ "\x81\x0f\x6d\x5d\xd7\x58\xe8\x27\x4d\x44\xc1\xf4\x29\x78\xd6\xcc"
+ "\x28\x78\x48\x17\x80\xc7\xfc\xd7\x84\x32\xc3\x6b\x25\xbc\x07\x7f"
+ "\xab\x31\xbc\x20\x99\xed\x12\xdf\x1f\x33\x8c\x1e\xd6\x1f\x80\xe9"
+ "\x59\x7e\x17\x75\x91\xb5\xd6\xef\x2c\x48\x6c\xc5\xb8\xc9\xe5\xdf"
+ "\x2f\xed\x18\x22\xba\x73\x13\x99\xe7\xf8\xbd\x37\x74\x86\xf3\xac"
+ "\x15\xdd\x05\x89\xc3\xbb\xa0\x8b\x90\x07\xe5\x1d\x8c\x67\x64\x5f"
+ "\x3e\x38\xfd\xc7\x53\xe8\xc7\xd3\xee\x9d\x36\x85\x66\xde\x39\x75"
+ "\x0a\x65\xfc\xf0\x86\x8c\x49\x37\xdf\x7a\xb3\xbc\xb9\xf9\xd6\xcc"
+ "\x9b\x29\xe7\x27\x0f\x4e\xa1\x9c\x59\x53\xe8\x21\xfc\x72\x1e\x9a"
+ "\xfe\xe0\xb4\xe9\x0f\x4d\xa1\xdc\xbb\xef\xc5\xd3\xd4\x29\x13\x33"
+ "\xee\xb9\x21\x67\xea\xbd\xd3\xe9\x81\x39\x37\x65\xdc\x74\x13\xdd"
+ "\x39\x7d\xc6\xc4\x8c\x0c\xfd\x3a\x31\x83\xb3\x3c\x9a\x39\xfd\xa1"
+ "\x1b\x72\x96\x2e\x29\x5e\x72\xc3\xac\x7b\xa7\x72\x0a\xb4\x5b\x04"
+ "\x0f\xa5\x87\xcf\x69\x4c\xeb\x80\x38\x9d\x4d\x1a\x74\xc7\x4e\xf0"
+ "\x00\x7e\x5d\x9e\xd2\xe3\xd0\x01\x97\xbe\xb0\x93\xfb\x4e\x8e\x01"
+ "\xd6\x03\x90\x7b\x73\x8f\x2b\xb5\x04\x34\x94\xb2\x63\xbf\x86\xf5"
+ "\x84\x6d\x08\xde\x7d\xac\x8f\x35\x43\xf0\xbe\x3a\xfa\xfd\x65\xd0"
+ "\xc1\xd6\x7f\x6f\xb5\x13\x79\xf1\x03\xdd\x03\xd0\x85\xa0\xaf\x9f"
+ "\xba\x9d\xb9\x43\xc0\xdf\x09\xa8\xa3\x1d\xb2\x79\x04\x65\xdb\x22"
+ "\x64\xbe\x1d\xfd\x73\x84\xc7\x95\x53\x94\xfa\x41\x6b\x71\x16\x71"
+ "\x3f\x79\x8b\x75\x18\x67\xfb\x61\x24\x4b\x18\xe8\x7b\xc0\x39\xaa"
+ "\xe0\x5c\x6a\x8f\xd0\x0f\x3e\x86\xb3\x19\xef\x74\x58\x67\x5b\xa1"
+ "\x27\xa0\xc7\x93\x35\x67\x3a\x89\xe4\x3a\x8b\xd6\x97\x2e\xc7\x4a"
+ "\x94\xcb\x8d\xe0\xeb\x40\x93\x03\xf9\x7e\x96\x9d\x00\x3e\x48\xc0"
+ "\xf8\x8b\xb6\xa4\xe6\x83\xbf\x03\xe1\x0d\x0d\x0f\x88\xd3\xb9\x6c"
+ "\x47\x0c\x3d\x41\x23\xff\x80\xf6\x35\x6b\x1b\x1a\x72\x44\x8f\x4c"
+ "\x63\xba\x35\x08\x7e\x4e\x46\xbe\xbe\xfe\xb4\xfd\x9c\x06\x3e\x48"
+ "\x64\x79\x15\x42\xa6\x63\xcc\x1c\xb9\x12\x3a\xad\x0d\x79\x73\x38"
+ "\xef\x84\x10\x0d\x83\xae\xb1\xd9\x9d\x09\x74\x9c\x46\x92\x96\xdc"
+ "\xf0\x60\x44\x7d\x80\x33\x92\x07\x29\xe6\x47\x73\xcf\x69\xc0\xe9"
+ "\x96\xe9\xb0\x63\x46\x3e\x0e\xf8\x0f\xb1\xae\x54\xfa\xdb\x36\x8e"
+ "\xf3\xe9\x63\xf3\xc0\x33\x64\x5d\xc1\xb1\x8d\x6b\x04\x2d\xd9\x5e"
+ "\x60\xfb\xaf\xc7\x35\x72\x8e\x8f\x86\xfb\xd5\xd8\x68\x1b\xcb\x79"
+ "\x35\xe0\x28\x52\x2c\x75\x80\x3b\xc7\xb3\xaa\x8b\x4e\x14\xf1\x58"
+ "\x3b\x32\x55\x73\x16\x50\x34\x4e\x97\x36\x33\xfe\xac\x3f\x40\x8b"
+ "\x3f\x81\x0f\x92\x00\x6f\x57\x34\x1f\x8c\xf4\x00\xce\x03\xc0\xaf"
+ "\x0d\x6d\x7a\xc0\x47\x97\x1e\xd6\xba\x0b\x50\x2f\x99\x20\x57\xd0"
+ "\xe7\x03\x30\xf4\xf2\xed\xd1\xe5\x2f\x75\x73\x39\xe4\x1f\xd2\xd3"
+ "\x2d\xf3\x6f\x64\x9a\xeb\x7c\x07\xbe\xbc\x2c\x2d\x3a\xff\x15\x5f"
+ "\x02\x97\xbf\x46\xbc\x9f\x14\xf3\xbe\x05\xef\xff\x4b\x7f\x0f\xb9"
+ "\xbf\x6c\x4e\x0c\xdf\x16\xe1\xfd\xdf\x81\x6f\x00\x72\x0d\xdb\xe2"
+ "\xd2\x6c\xf0\x98\x3f\x22\xff\xfa\x98\xfc\xb5\xc8\xff\x0f\xe6\x1b"
+ "\x1e\x73\x38\x7f\x8d\x2e\x3b\xc8\x6f\x41\xfe\x7d\x31\xf5\xbf\x8b"
+ "\xfc\x81\x08\xfc\x8e\x46\xbf\x4f\xab\xc6\xfb\xaf\x98\xd7\x61\x13"
+ "\x0d\x41\x9e\x61\xac\x4b\x58\x8f\x35\x16\x72\x7f\xa5\x99\x63\xf2"
+ "\x8f\x45\xbe\x14\x9d\x46\x26\x9d\x46\xd9\xdc\x8f\xa8\xe3\x98\xc2"
+ "\x21\x2d\x33\xa6\x4c\x2e\xca\xa4\x81\x8e\x0f\x18\x7c\x19\xa7\x4c"
+ "\x61\x4c\x99\x8d\xdc\x8f\x42\xd5\x63\xee\xe9\x1b\x28\xa3\xeb\xc8"
+ "\x48\x18\xdc\xb6\x4b\x00\xa3\x3e\xa6\xed\x93\x50\xef\x98\x4d\x4a"
+ "\xef\x5c\x02\x1e\xba\x09\x69\xe3\x00\xf3\x61\x96\x01\xc8\x6a\xc0"
+ "\xeb\x0f\x92\x70\x66\xa7\x28\xde\xbd\xfc\xd2\x11\x21\xe2\xfb\x1b"
+ "\xf8\x9e\x61\x8b\x9e\x19\xba\x4c\x5e\x7e\x29\xae\x48\x4f\x63\xfb"
+ "\x2d\x81\x75\xb0\xe8\xb9\x5f\x53\x30\x2f\xbf\x45\x98\xc8\x84\xe7"
+ "\xb0\x5e\xc7\x95\x78\x4e\x00\xfe\x0f\x62\xcc\x21\xb1\x02\xf9\x56"
+ "\xd1\x54\xa4\x73\xda\x8f\xf5\x7c\x03\xcf\x2b\xee\x0f\xa9\xf7\xa3"
+ "\xfe\xa0\xea\xcc\x66\x7e\x9f\x84\xe7\xcf\x14\xbc\x51\x1f\x33\x7c"
+ "\xdc\x4f\xd4\xef\x13\xc2\x0c\xfb\xb4\x21\x93\xa3\xf6\xcb\x72\x90"
+ "\x4b\x59\x1f\xca\x8b\x15\xf2\x1d\xc3\x7c\x1b\xd7\x7b\x71\x7d\x15"
+ "\xd7\x07\x70\x7d\xce\xf9\x15\xd9\x9c\x61\x29\x9f\xfc\xfc\x08\xae"
+ "\x0f\xe2\x3a\x1d\xd7\x87\x70\x9d\x88\xeb\x5d\xb8\x0e\x67\x39\xc1"
+ "\xb8\xca\x73\xae\x00\xc6\x59\xc5\x6b\x3c\x27\xe8\xc9\x66\x9a\x4c"
+ "\x47\xbb\x25\x2d\x34\xa5\x6f\x2c\xaa\x5f\x2f\x97\x73\x42\xf0\x07"
+ "\xa7\x0d\x53\xfc\xa1\xd2\xc2\x86\x5e\x3a\x3d\x90\xa6\xeb\x2a\x5d"
+ "\x36\xf5\x34\x05\x3f\x07\xf0\x8f\x30\xae\x42\xc1\x1a\xa2\x78\x40"
+ "\x87\xaf\xca\x99\xe3\xd4\x99\x10\x59\x27\xae\xbb\x9c\x0e\x21\x70"
+ "\xad\xe4\x3e\xf3\xd1\x28\x0f\xe8\x67\xd6\xb8\x4f\x96\xd2\x0c\xd4"
+ "\x51\xc8\x7d\x60\xf0\x94\x50\x3c\x3a\x94\xef\xb5\x15\xcf\x42\x47"
+ "\xe1\xfd\x8a\x67\x35\x9d\x0f\x65\x1e\xf9\x5e\xe1\x32\x57\xaf\x63"
+ "\x12\xf7\x8f\x7c\x2f\xd3\xd3\x8e\x44\xf0\xe5\xc8\x1e\xd7\x15\xd9"
+ "\x31\x7c\x59\x02\xbe\xbc\x91\xf9\x8f\xfb\x8c\xe9\x32\xa2\x48\xda"
+ "\x04\xa6\x7e\xf8\xa7\x15\x7f\xef\xd4\xe7\xc0\x4a\x17\x5c\x51\x19"
+ "\xa3\xab\x24\xff\xc7\xe8\x8e\x2e\xee\xaf\xc4\x12\x96\xa9\x2b\x3c"
+ "\x3e\x7a\xdf\x27\xed\xcf\x0d\x0d\x3f\xe1\xf7\x01\xf0\x07\xd7\x9b"
+ "\x58\xc4\xba\xe0\x0a\x9f\xf1\x5e\xbe\x4b\x6a\x92\x63\x5e\x62\xa1"
+ "\x7c\x87\xb4\x94\x06\xe3\x9d\x51\x4f\x62\x31\xbf\xb3\xd9\x06\xe0"
+ "\xd6\xa5\xeb\x70\x13\xe3\xd9\x8f\xc2\x5d\x67\xbb\x81\xc8\x74\x7d"
+ "\x19\x0d\xf1\x86\x8e\xd2\xec\x90\x08\x7f\xbf\x8c\x92\xbc\xa1\xbd"
+ "\x74\x1d\xd1\xa5\xde\xd0\x01\x4a\x27\xba\xda\x1b\xda\x02\x7b\x66"
+ "\x3d\xbf\x3f\x74\x5d\x59\x42\x02\xae\xce\xef\x91\x29\xc1\x1b\xaa"
+ "\xa6\x6b\xc9\x8c\x6b\x31\xdd\xfd\xa2\xe8\xf1\x86\xf2\x91\xaf\x90"
+ "\x66\x87\xc5\xe9\x69\x43\xc4\xdf\xf2\xc2\x94\x3a\xe3\x45\xe1\xf4"
+ "\x86\x30\xb7\x08\x35\x23\x5d\x13\xb3\xc3\x5f\xe1\xd7\x23\x34\x77"
+ "\x5d\xfa\xec\xf0\x69\x31\xf5\xc5\x43\x78\xfe\x9b\x98\x3a\xc4\x29"
+ "\xd0\x4f\xc2\x1b\x9a\x4c\xad\x81\x00\xf2\x4f\x22\x51\x5e\x67\x7b"
+ "\xe2\xac\x89\xfa\x60\x93\x68\xe5\x75\xe9\x68\x4f\x66\x1f\xda\x82"
+ "\xf1\xfa\xd6\xbe\xd5\xb8\x6e\xa8\xfb\x81\x7c\xb6\xd4\x65\xa3\x2d"
+ "\x99\x37\x94\x61\x9e\xe1\x40\x3b\xc2\x7e\x01\x3b\xc6\xec\x75\x1c"
+ "\xa3\x11\x6b\xd9\x56\x9f\x8c\xb9\xda\x17\x84\x7e\xb0\xea\x70\x33"
+ "\x79\x8e\x26\x92\x50\x6e\x43\xdd\x74\x09\xc3\x5d\x57\x60\x4d\x10"
+ "\x7e\xe8\x6d\x2b\xd3\xc2\x1b\x3a\x86\xdf\x17\xc4\x34\xf0\x86\x02"
+ "\x80\x49\x56\x94\x2b\xe8\x4b\xaa\xcb\xc5\xcf\x81\x5f\x1d\xf0\xf8"
+ "\x50\xb8\xd2\x3e\x16\xb0\x1d\x50\xfe\x30\x9e\xdb\x78\x8e\x29\x69"
+ "\x19\xa6\x61\xc8\x7f\x18\xfc\x32\x0d\x7c\xc7\xb8\x06\x65\x3d\x1b"
+ "\xea\x7a\x02\x42\xb6\xe1\x9c\xde\x86\xb3\xaa\x4d\xbb\x6d\xba\x1c"
+ "\x21\x6d\xf7\x15\xb8\x9f\xd3\xc3\xf9\xdc\xbb\x6d\xc2\xb2\x3b\x3d"
+ "\x08\xd9\x04\x5d\xcb\x98\x8e\xa0\x6b\x19\xd3\x52\x94\xef\xb6\x79"
+ "\x1d\x1b\xd1\x8e\xdd\xe9\x7d\x49\xbb\x33\x51\xee\xbe\x3e\x69\xcf"
+ "\xec\xce\x0d\x28\x38\x3f\x01\x9c\xb9\x12\x8e\x65\x77\x2e\x60\x15"
+ "\x84\x5d\x76\x9a\xbd\x52\x04\x67\x87\xd6\x86\xf2\x56\x52\xe2\x78"
+ "\x2a\x4b\xe0\xb9\x8c\xd7\x51\x88\x76\x36\xe1\x3a\x0d\xef\xe9\x32"
+ "\xd4\x75\x08\x70\x73\xb9\x3e\xd4\x53\x00\x98\x0b\x00\x2b\x9f\xf1"
+ "\xeb\x35\x51\x2a\x9e\x1d\xbd\xab\x25\x7e\x55\x80\xdd\xa0\x59\x76"
+ "\xd7\x19\x3c\xc4\xfc\xa3\xe8\xc6\x7c\xf3\x36\x81\xbf\x52\x67\x3b"
+ "\x44\x08\xef\x52\xbd\x0e\x4e\xaf\xa6\xd6\x22\xe4\x71\xf0\xfb\x62"
+ "\xdc\xcf\xc4\xfd\x7a\x62\xfe\x99\x55\x14\x58\x7b\x63\x59\x51\x02"
+ "\xf2\x1f\xca\x0b\x59\xe8\x89\x22\x73\x59\x6b\x51\x17\xde\x75\x11"
+ "\xd2\x9c\x5e\x47\xb5\x9c\x7b\xa1\x5f\x43\x61\xcb\x9e\xcc\xb0\x7b"
+ "\xb7\x7b\x44\xc0\x29\xbc\x8e\x62\xe4\x2d\xa2\xeb\xca\x2c\x09\x32"
+ "\xbf\x23\x5f\xb6\x47\xdb\x5c\x46\x5c\xa6\xa5\x60\x2f\xf1\x1c\x0e"
+ "\x6d\xf7\xb7\x74\xad\x67\x1e\xd5\x34\xf7\x1e\x0b\xf8\xb3\xaf\xa5"
+ "\x60\x0b\xcd\xec\x2a\x1b\x06\x7a\x24\x20\x3d\xdc\xd2\xd5\x84\xbc"
+ "\xcd\x8a\x67\x57\x86\xac\x2d\x05\xeb\x29\x64\xd9\xed\x08\xb9\xf7"
+ "\xd8\x66\xaf\xec\x13\x33\x0b\xc4\xa1\xc7\xbb\xca\xc0\xa7\x7b\x69"
+ "\xe6\xc9\x50\x62\x6b\x11\x78\x7e\x65\x0f\xd2\x43\x92\xff\x67\x9e"
+ "\xec\x16\xb3\x9e\x17\xa7\x67\xaf\xfc\x9b\x68\x29\xc8\xa7\x27\x02"
+ "\x34\xe2\x92\xb5\x42\x63\xb9\x68\x6e\xdf\x4b\x97\x1c\xeb\x20\x96"
+ "\x89\x19\xf3\x35\x31\xf3\xe4\x69\xf1\xc4\xf3\x98\xb7\x3a\x26\x03"
+ "\x47\xd0\x25\xb0\x85\xe9\x5d\xd5\x52\x70\x00\x38\x40\x6e\x1c\x93"
+ "\x90\xf6\x36\xf2\x7a\xac\x8f\x9f\x4c\xa5\xe6\xf6\x2d\x14\x4a\xda"
+ "\xed\x08\x97\xef\x76\x6b\x49\xbb\xeb\xd0\x47\x0d\x5a\xf9\x1e\x4b"
+ "\x38\x69\x4f\x66\xa8\x7c\x8f\x4d\x6c\xd8\xe3\x46\x3f\x25\x71\x9f"
+ "\xf7\xba\xc8\x8e\xe7\x97\x7a\x25\x1f\xed\x41\x3f\xed\x69\x80\xfd"
+ "\x2c\x98\x96\xa2\x7c\x4f\x95\x92\x81\x3d\x0d\x7d\x49\x7b\x60\xdf"
+ "\xe1\x2a\xf9\x70\xcf\x61\xe6\xcb\x30\xf4\x1d\xd2\xfe\x3d\x8c\xb2"
+ "\x78\xdf\x86\x5f\x07\x7e\x41\xb1\xe1\x9d\x6c\xc0\xbf\x94\xe1\x6b"
+ "\xee\x77\x72\x85\xe5\x9d\x82\x1b\x89\x2c\xad\x81\x76\xe2\xb5\x0b"
+ "\x39\xd7\x77\xfc\x05\x38\x33\x4f\x85\x70\x0d\x41\x36\xde\xc9\xd6"
+ "\x6e\xaf\x94\x32\x28\x92\xde\x29\x98\x1d\xbe\x43\x3c\x71\x96\xe5"
+ "\x09\xe9\xe5\x80\x91\xfc\x8e\x3b\x28\xf9\xf5\x9d\x97\x19\x87\xbe"
+ "\xd5\xe9\x0c\xc7\x8c\xf7\x55\x62\xc3\xde\xe4\x80\x48\x27\xcd\xbd"
+ "\xd7\xa2\x59\xf6\x16\x08\xf7\x5e\xc8\xc3\xde\xf4\xb0\x7b\x6f\xe6"
+ "\xfd\x43\x84\x9f\xf5\x57\xdf\x4b\x84\x7a\xf6\x51\xe8\x76\x21\x5a"
+ "\x8b\xd6\xe3\xfe\x23\x92\x32\xec\x38\x2a\xf9\xaa\xa5\xeb\x28\x68"
+ "\xf9\x2e\xd2\x9b\xa4\x1e\x63\xda\x8b\xa4\xbd\xe9\x4f\x9c\x1d\x5d"
+ "\xc6\xbc\xf0\x44\x11\x95\x89\xf2\xbd\x36\xad\x7c\xaf\x25\x5c\xbe"
+ "\x37\x53\x4b\x42\x3d\xc9\xef\xed\x09\x4a\xb9\x7e\x0f\x7c\xbd\x0f"
+ "\x65\x3e\x92\xfc\x24\xca\xdf\xab\x1b\x4c\x97\xb2\x4e\x63\x1d\x36"
+ "\x3b\x14\x64\xfe\xfa\x3b\xeb\x3f\xd6\x65\xd0\x05\x79\x86\x2e\x63"
+ "\x3d\xc6\x73\x2c\xd6\x65\x9a\xae\xcb\x34\x5d\x97\x69\x11\xba\x0c"
+ "\xf4\x37\x83\xdf\x83\x52\x7f\x81\x9e\xac\xbb\x66\x87\x33\x44\xac"
+ "\xee\xe2\x32\x61\xe8\x25\x0d\x7a\x09\x3f\x87\xa6\xf4\x52\x83\xae"
+ "\x97\x4c\x86\x5e\x02\x3c\xd6\xdb\x5a\x3c\xbd\xa4\xe9\x7a\x29\xac"
+ "\xeb\x25\x1d\x9f\xb3\xda\x85\xf4\x92\x65\x37\xda\xbb\x3b\x9d\xd7"
+ "\x53\x21\x37\x65\xdc\xcf\xb3\x57\x6a\x65\xe0\x47\xd0\x71\x77\xba"
+ "\xa6\xf4\x51\x36\xe6\x57\x26\xd6\x47\x61\x94\xd7\x0c\x7d\xd4\x23"
+ "\xf5\x46\x01\xeb\x24\xee\xbb\xbc\x90\x9d\x58\x17\x49\xbd\x13\xba"
+ "\x3a\xc4\x7a\x07\xf4\xbb\x23\x56\xef\x00\x9e\x03\xf7\xa9\x7a\xfd"
+ "\x75\x98\x5d\x87\xac\x21\xa7\x98\xed\x08\x48\x1a\xe5\x39\x8a\xcb"
+ "\x98\xe7\xa0\x13\x1a\x44\x6b\x19\x41\x27\xb9\x81\x23\xf8\x3c\x4c"
+ "\x90\x5d\x4b\x08\xfa\x02\x72\x60\x0b\x43\x96\x67\x76\x75\x7b\x67"
+ "\x15\xd1\xb0\x27\x02\xe9\xa9\x33\x4f\x0a\x3f\x68\xe3\x7b\xa2\xa8"
+ "\x8c\x66\x05\xd2\xa1\x1f\x3e\xa2\x19\xed\x42\x9b\x31\xcf\x67\x87"
+ "\x9c\xd8\x66\x2e\xf2\x58\x9f\x78\x3e\x95\x66\x9d\x15\x1e\xe8\x8f"
+ "\xff\x7b\xe6\xc9\x54\xeb\xdc\x76\xfa\xce\x8c\xf9\x42\x0b\x43\x16"
+ "\xd1\x56\x37\xda\x5c\x05\xbc\xeb\x20\x97\x0d\x90\x43\x4b\x08\xf2"
+ "\x18\x29\x8b\x90\xab\x97\x70\x6f\x97\xed\x70\xef\x69\x80\x2c\x56"
+ "\x69\x72\xbc\x6b\x97\x73\x5a\xd4\xd3\x20\xe5\x27\x09\xe9\xe5\x4a"
+ "\x1e\x35\x55\xee\xb0\xc6\xb4\x33\x29\x79\xe4\x3e\xc1\xfb\x36\xfc"
+ "\x3a\xf0\x8b\x92\x47\x96\x33\xc1\x72\x56\x74\x76\x40\xce\x9e\xd7"
+ "\xe5\x2c\x49\xc9\x59\x18\xb6\x4a\x78\xb5\x92\x35\x86\xcf\xf3\xde"
+ "\x7e\x59\x4b\xde\x6b\xc1\x7d\x82\xe2\x1b\x29\x6f\x2c\x6b\xd0\xb1"
+ "\x7b\xd3\x21\x7f\x80\x27\xfc\x2c\x07\xe0\xcb\xbf\xf2\x78\x38\xab"
+ "\x48\xfc\x35\x2f\x3c\x1a\x7d\xbe\x37\x13\xfa\xee\x6f\x33\xbb\xc4"
+ "\x5f\xa1\xeb\x6a\x21\x4b\x16\xc8\x90\x0d\xb2\x94\x0e\x99\x62\x59"
+ "\xaa\x0b\xaf\x66\x98\xef\xd5\xf5\xc3\x90\xe3\x69\xb4\x2c\x0d\xb6"
+ "\xee\xda\xe3\xb2\x77\xf9\xe8\xa3\x66\xb6\x69\x70\x1f\xf4\xd1\xc1"
+ "\x5a\x75\x7f\xb5\xd9\x47\xb5\xc7\xa4\xad\x03\xf9\x2b\x2a\xa5\xcb"
+ "\x3b\xe9\xea\x06\xf0\x3a\xe1\x3e\x05\xf7\x07\x66\x5f\x77\x08\xb6"
+ "\xc6\xe9\x36\xd4\xdb\xc3\x32\x28\x5c\x93\xd8\x86\xcb\x02\x0f\x5a"
+ "\x44\x4f\x7a\x0a\x6c\xc7\xbf\x8a\x3e\x1b\xaf\xed\x59\xf1\x3c\x02"
+ "\xed\x1f\x8b\xeb\xc8\x1d\xe7\x28\x0d\x3f\xdb\x0e\x97\x56\xc6\xf6"
+ "\x15\xee\x33\xc4\x0a\x5b\xf2\xe6\xe5\x34\xde\x1a\x20\x4b\x8d\x4b"
+ "\xcb\xb5\xae\x4d\xe5\x35\xae\x34\xbe\x17\xae\xb7\xa9\xe6\x1c\x99"
+ "\x79\x1d\x42\x4b\x42\x7d\x0e\xab\x10\xcb\xd2\xa9\x66\x29\x31\x4d"
+ "\x6d\x35\x2e\x51\x1f\xee\x91\xf2\x68\x33\x70\x61\xdc\x80\xe7\x95"
+ "\xc0\xb3\xf9\xe1\x95\x59\xf4\xa9\x83\xe2\xae\x0d\xa3\x9d\xfd\xed"
+ "\x8f\xff\xfe\x9a\x14\x83\x26\x83\xbc\x1f\x6f\xd0\x69\x90\x75\x44"
+ "\x33\x8f\xe3\xe1\xe5\xc2\x5f\xf1\x0c\x31\x2d\x6c\xce\x90\xf8\x2f"
+ "\xd0\xb1\xac\x34\x4c\x57\xce\x5e\x79\x95\xf0\x76\x09\x8f\xd7\x71"
+ "\x92\x6a\xf0\xbe\xb4\x04\x63\x67\x52\x83\x47\x94\x37\x1c\xe8\x5e"
+ "\x2e\x42\xbc\x76\x84\x3a\x2a\x7d\x34\x39\x43\xf5\xc5\xee\x2a\x39"
+ "\x67\xb5\x34\x1c\x00\xac\x4b\x19\x56\x0b\xca\x87\xcb\x1b\x9a\x90"
+ "\xaf\xc1\x47\xff\xb1\x4f\xe6\xb3\xec\xae\x2a\x5a\x45\xdf\xee\xa4"
+ "\x6b\xfc\x72\x6e\xe1\x6e\x38\xca\xba\x00\x69\xa9\x48\x0b\x01\x7e"
+ "\x1b\xf2\x77\xf8\xe8\xb7\xfa\x9a\xc4\x35\x21\x23\x1f\xee\xa5\x1d"
+ "\x1f\xc5\x3f\x09\x72\xf1\x1e\xfd\x65\x1f\xd8\x1c\x4b\xd0\x97\xf3"
+ "\x8d\xbf\x54\xfc\xb2\xe2\xbf\x1e\xd0\xe5\x7b\x6c\xdd\xd0\xd1\xce"
+ "\x35\x34\x06\xfd\x03\xfc\xbe\xfb\x3c\xe6\x29\x27\x84\xeb\xbb\x96"
+ "\x9f\xad\x0a\x62\x2e\xf1\xdd\x12\x1f\x6d\x9c\x3c\x18\x3d\xd1\xfe"
+ "\x06\xed\x9c\xe8\xa8\x58\xde\x4f\xcb\xcf\xa1\x1b\x05\xdf\xb3\x2e"
+ "\xaa\x41\x3a\xd3\x0d\x70\x9a\x0c\x9a\x0d\xde\x2f\x0d\x47\xd4\x1c"
+ "\x77\xec\x58\xe1\x12\xe4\xf9\x0e\xef\x69\x8d\x1d\xa7\xe8\xb0\xa7"
+ "\xae\x1b\x7a\x84\xd7\xa5\x31\xf7\x0b\x2c\xb3\x89\x60\x8f\x6b\x2c"
+ "\xec\xff\xf1\xb5\xfa\xba\x57\xc0\x1b\x9a\xce\xba\x25\xee\x98\xc5"
+ "\x7b\x70\x03\xf0\xc7\x4d\x6b\x1d\x03\x3d\x24\x75\x53\xd3\xb4\x52"
+ "\x85\x77\x90\xe1\x7a\x4a\xcf\x50\x3b\xde\x2f\x0b\x88\x0e\xe1\x6e"
+ "\xca\xe4\xb9\x86\x67\x79\x2f\xa7\x4d\x07\x6f\x0b\xcf\x52\xc6\x69"
+ "\xdc\x74\xcf\x77\x7a\xe9\x84\x83\x12\x6b\xfa\xd7\x9b\xc6\x65\xf0"
+ "\xfa\x92\x5a\x57\x1b\x5b\xef\xa3\x1b\x0b\x0c\xbc\xd8\x0e\x01\x7d"
+ "\x99\xd6\x55\x6c\x8f\xf0\x5e\xc7\xb2\x12\x11\x64\xbb\x04\x79\x8f"
+ "\x19\x6d\xe0\xf6\xe9\xed\xf2\x47\xb6\x8b\xf7\xc4\xac\x25\x8a\x06"
+ "\xcb\x56\x92\xc5\xae\x68\x6d\xe1\xf6\x72\x5b\xb8\xcd\xb2\x2d\x52"
+ "\xc7\xf2\x7c\xe2\x16\xcc\xd9\x64\x7a\x43\x8f\x6b\xdc\x64\x1f\xdd"
+ "\x60\x56\x3c\x35\xb6\x3e\x96\x8f\xfa\xfb\xd1\xb2\xbb\x00\x73\xdc"
+ "\xef\x38\x35\x71\x1c\x30\x3f\x53\x6b\x75\xe3\x3e\xd3\xd8\x16\x0f"
+ "\x32\xff\x1e\x3c\xca\x63\xb1\xb7\x84\xf5\xad\xcc\x7b\x19\xf2\xb6"
+ "\x23\xcf\x7e\x3d\xef\x7e\xb5\x47\x28\xaf\xc3\xf8\x8a\x31\x6c\x01"
+ "\xf0\x38\xe2\x97\x63\x3d\xec\x09\xfd\x59\xe0\x19\x57\xb7\x28\x3f"
+ "\x78\x34\x3e\x2e\x7b\x0b\x78\x2c\x0b\x9f\x13\x5d\xa8\xe7\x0a\xe6"
+ "\x29\xe7\x4a\xfa\x16\xf8\xf2\xf3\xd2\x35\x74\x19\xf3\x93\x48\x6a"
+ "\x38\xa6\xe8\x7e\xed\x18\xe1\x82\xdd\x0b\x8d\x5a\xb4\x9c\xbe\x0d"
+ "\x39\x3a\xda\x49\xd7\x4e\xcc\x2b\xb1\x03\x57\xa2\x8a\x53\x44\x52"
+ "\x07\x25\x35\xb4\xf1\x1c\xa7\xe6\x14\xaf\x25\x5d\x9b\x63\xf0\x22"
+ "\xee\xe7\x5e\x48\x5f\x80\xae\x1d\x6a\x6d\xe3\xda\xcf\x78\x5f\xe3"
+ "\x38\x5d\xbb\x8f\xdb\xab\xf6\x54\xaf\x7d\x5b\x9c\x13\x73\x85\x1a"
+ "\xd3\xda\x7c\x74\xad\x0f\xd7\x0e\xf9\x73\xd1\x3c\xfd\xb9\x0d\xf9"
+ "\xb6\x88\x73\x1a\xe7\x81\x7c\x5f\xbb\x57\xb8\x12\x58\x26\x0e\xa0"
+ "\x6e\x94\xb9\x23\x5b\xf5\xcd\xb5\xbb\x18\xd6\x20\x38\xb4\xa1\x6f"
+ "\x89\x79\xf3\x04\x7d\xef\x4e\x7b\x29\xaf\x95\x7e\xef\x72\x29\x17"
+ "\x80\x55\x63\x52\x7a\x1b\x36\x7e\xc7\x4e\x97\x56\x00\x1d\x5d\xa0"
+ "\x6d\xf8\x38\x53\xde\xeb\xef\x84\x3e\x8e\xc6\x87\xdf\x34\xcd\x33"
+ "\x9a\x79\xfc\x7b\xd5\x0a\x4e\x53\xa6\x67\x74\x27\x3f\xef\xe0\xe7"
+ "\x80\xe5\x93\x4c\x6f\x55\x16\xea\xef\xe4\x7a\xab\xd5\x9c\xff\x7b"
+ "\x3b\xba\x51\x47\x8f\xeb\x7b\xd5\x3e\x9a\x50\xac\xf6\x78\x3e\xc9"
+ "\x1c\x6c\xef\x9a\x65\x87\x65\x4e\xc9\xf4\x75\x8f\xb7\xd4\x4a\xf9"
+ "\x3b\x0c\x9e\xef\xd0\xf5\x06\xd3\x39\xe5\x38\x5d\x37\xb7\xc5\x26"
+ "\xf9\xdb\x24\x4c\xdf\x0b\xbd\xa7\xf9\x4d\xbc\x0f\xa7\xd4\xd7\x75"
+ "\x73\xcf\xff\xa5\x67\xe0\x07\x2d\x97\x3e\x43\x7f\xce\xc5\xaf\x10"
+ "\xbf\x03\x78\x9e\x21\x69\xb7\x3d\x3f\xc1\x87\x77\xdd\xb0\xeb\xf9"
+ "\xd9\x47\xe9\x99\x62\xfb\x58\x13\xec\x12\x79\x5f\xf3\x2d\x5e\x4b"
+ "\x48\xcf\x47\x1f\x74\xa9\xbe\xb8\x4e\xae\xa7\x00\x37\xa6\xbb\x70"
+ "\x56\x89\x60\x53\x69\x00\x78\xa7\x6f\x69\xaa\x0a\x90\xfd\x5a\x6e"
+ "\x7f\x7a\x15\xb7\x29\x00\xfa\xf3\x75\x59\x95\xf0\x37\x56\x87\x88"
+ "\xf7\x03\x01\x0b\xf2\xbf\xa8\x49\xad\x4b\x34\xcd\x63\x78\x3a\x4f"
+ "\x08\xa3\xfd\x4a\xa7\x7d\x92\xc9\x7d\x09\x58\x5f\xa0\xed\xd6\x53"
+ "\x74\xdd\x38\x91\xfc\x71\x66\x63\x01\xd1\x0e\xe8\x11\x8c\x35\x72"
+ "\x6f\xa2\x46\xfa\x23\x5c\x87\xf1\xff\x7b\x33\x8c\xfd\xab\x4d\x78"
+ "\xbf\x19\xef\x30\xf6\xf8\x5b\x0a\x82\xc4\xb0\xc2\xdc\x3e\x94\xff"
+ "\x48\xf3\x9b\x31\x56\xa3\xcf\x3f\xc9\x2c\x2d\x82\x9e\xe9\xd7\x5b"
+ "\xe9\xcd\x6b\x4e\x8a\xa0\xd1\xbe\xc6\x5a\x96\x85\xeb\xc0\xff\xcf"
+ "\xfa\x06\xe5\xff\x7e\x9c\xaf\x5f\xd9\x38\x56\xf5\x99\x06\xba\x44"
+ "\xf7\xd9\xf5\x0e\xd5\x5f\xd7\xed\x8d\xee\xaf\xeb\x31\xca\x5f\x17"
+ "\xc0\x35\x05\xbf\x31\xea\x39\xf2\x77\x9d\x2f\xe2\x79\x3c\x7e\xf9"
+ "\xc0\x07\xe3\xff\xb5\x05\xaa\x1f\x38\x1d\xed\x60\x1e\xf9\x27\x59"
+ "\xb4\xbe\x5c\xe2\xfd\x61\x4e\x67\x7e\xe6\x74\x0d\xf6\x0c\x9e\x09"
+ "\xef\x53\x59\x56\x2b\x34\x8a\x7a\xef\x5d\x0f\x9e\x5b\xd5\xcb\xf8"
+ "\x3f\xc0\xb0\xac\x6b\xdd\x6e\xe6\x53\xe4\x01\x8d\xdc\xb0\x59\xaf"
+ "\x9f\x6b\xd0\x15\x69\xd3\xf8\x3d\xf3\x24\xd2\x8b\x7d\x54\x68\x97"
+ "\xfb\xbf\x98\x13\xc6\xb7\x35\xae\xaf\xea\xb7\xc9\x2c\xef\x64\xb3"
+ "\x3e\xea\xa2\xef\xef\x82\xce\x42\xdf\x7e\x9c\xa1\xc6\x9a\xef\xbf"
+ "\xcd\xcf\xd0\x95\x9f\xe3\xbe\xb6\x05\x3a\xa9\x77\x43\x43\x56\x9f"
+ "\x89\x86\xf5\x9a\x28\x2b\xb4\xe1\x74\x28\x94\x5c\x3f\xc3\xdb\xb1"
+ "\x8f\x5a\x43\xbf\x24\xfb\x33\x12\xc6\x9b\x5e\xf0\x80\x73\xa5\x08"
+ "\xbf\xdf\x5b\x67\xf6\x86\x4e\x7b\x30\x36\x5f\xd5\x49\xdf\x97\xf4"
+ "\x78\xe5\x38\x46\xfd\x27\x24\x6c\x9d\x3e\xa7\xdb\x36\x2f\x14\xa1"
+ "\xcd\x27\x44\x00\xf6\x5d\xf2\xa6\x5e\x1a\xbf\x6d\x15\x65\x54\xf7"
+ "\xd2\xd8\x9d\xbd\x94\x2e\xfe\x9e\x6e\xaa\x86\xdd\xf6\xc4\xd9\x54"
+ "\x82\x4e\xc8\x1d\x51\x44\x96\x9d\xab\x48\xf2\x48\xb8\x1c\xf6\x5b"
+ "\x08\xf6\xdb\xe9\x74\xd6\x8d\xfd\xf6\x5b\x9f\xb4\x8b\xf7\x4f\x53"
+ "\x7c\xb4\x7f\xda\xf0\x02\x4a\x48\x99\x47\xa9\xc0\xcf\x79\x8a\xae"
+ "\xff\xcf\x94\x76\xd8\x8e\x68\xb3\x4f\x6f\x2f\x68\xd7\x65\x2d\xa0"
+ "\x61\xb2\xad\xd0\xd7\xa2\xfc\xe3\x8c\x41\xc7\x61\x13\xf3\x54\x80"
+ "\xe5\x86\xdb\xf0\x4f\xde\xa3\xde\x37\x3a\x68\x5e\x56\x2d\x82\x9c"
+ "\x5e\x7c\xb5\x08\x22\xbd\x8d\xeb\xae\x47\x7a\x8f\x6b\x3c\xf9\x4c"
+ "\xbb\x52\x06\xe3\x51\xcc\x8d\x74\xbd\x32\x7e\xad\x30\x95\xf1\x1c"
+ "\xdc\xbd\x26\x04\xdb\xfb\x14\xcb\xec\xf8\xb2\xd9\x85\x22\x64\x5f"
+ "\xcc\xfe\x02\xe3\x8b\xd8\x97\x81\xf7\x30\xdf\x83\x6d\xf3\x75\xfe"
+ "\x0b\x3c\x5e\xf0\x5c\xc1\x5a\x08\x98\x1b\xde\x71\x0b\x67\x3a\x7d"
+ "\x53\xff\x09\xb4\x33\xe5\xf5\x51\xec\xd7\x33\xfe\x80\x8f\x66\xa6"
+ "\x31\xee\xd2\x77\x07\xba\x13\xf6\xd6\x65\xc0\x2b\x18\x00\x1d\xf0"
+ "\x1e\xe3\xff\xbd\x1d\xfa\x7e\xb3\x9f\xf7\x7a\x91\x86\xf1\xff\xfe"
+ "\xf1\x9c\x56\x7c\x35\xd9\x8a\xed\x22\xae\xde\x66\x9b\x89\xf7\xc0"
+ "\x01\x0f\x73\xd5\x1b\xc6\x1a\x70\x30\x4e\xed\xe9\x36\x3d\xfc\x30"
+ "\xd2\x32\x0d\x38\xc8\x73\x39\x9e\xb3\xfb\xf3\xa8\x32\xb9\x11\x65"
+ "\x1e\xee\x36\x5d\xbf\x07\x69\x85\x31\x65\x4a\x62\xca\x6c\x8c\x28"
+ "\x53\xa6\xd7\x53\x1b\x53\xa6\x3e\xa6\x8c\x27\x0e\x6e\x47\x63\xca"
+ "\xb4\xc7\x94\x09\x9c\x8f\xdb\x8d\x96\xe8\x32\x37\xda\xa2\xcb\xdc"
+ "\x98\x1e\x41\x4b\xf6\xe3\xc9\x40\xda\xe4\x98\x32\x33\x62\xca\xcc"
+ "\x35\x9e\x07\xa1\x71\xca\xb2\x1d\x64\x03\x6f\xb2\xaf\x98\xff\x75"
+ "\xf4\x4f\xf7\x4f\x9f\xed\xd1\xcb\x56\x9d\xdf\xae\x1b\xf7\xc6\xd4"
+ "\x77\x20\xa6\xbe\xe6\x38\xed\xf2\xc5\x94\xf1\x47\x97\x99\x40\x11"
+ "\x65\x6a\x55\x3d\x13\xd2\xa2\xcb\x4c\x18\x1b\x53\x66\xd2\xf9\x7c"
+ "\x35\x21\x3b\xa6\x4c\x6e\x4c\x99\x82\xaf\xa1\x05\x8f\xe3\xca\x8f"
+ "\x6e\x14\xdb\xca\x77\xc1\x46\x98\xf0\x07\xf6\xc5\xe0\x7d\xd7\x9f"
+ "\xf5\x06\x87\xf0\x7e\x20\x8f\x57\x8d\x8e\x20\xc6\x96\x09\x98\xff"
+ "\xdc\x92\x61\x8c\x59\xec\xa7\xc2\x32\xad\x6c\xec\x09\x55\x83\xd9"
+ "\xa2\xd2\xd7\x4d\xf7\x97\xe3\xba\x1a\xc7\xf0\x38\x95\x61\xee\xb7"
+ "\x89\x95\xcf\x1b\x29\x38\x19\x8f\x18\xfb\xbe\x35\xca\xff\x25\x81"
+ "\x6d\xf2\x46\x87\x2c\x93\x19\x61\x47\x73\xfd\x81\x7d\xab\x82\xe6"
+ "\x68\x3c\x32\x6c\x17\xc0\x23\x05\xb6\x51\x7a\x2b\xac\x22\xde\xcf"
+ "\x6f\xa9\x86\x0d\x04\xbb\x9f\x71\x3b\x4e\x19\xb5\xd2\x26\x5b\xdc"
+ "\x4b\x7c\xef\x2d\xb9\x4d\xee\xf7\x2b\x9b\x34\xa3\xad\x09\xf5\xb3"
+ "\xed\xde\x54\x74\x86\x7d\xb2\x30\xfe\xb2\xed\x36\x71\x48\x63\x89"
+ "\x9f\xf1\x3a\x62\xf8\xc5\xf8\x68\xa2\x59\xda\x1a\xee\x26\x3b\xfb"
+ "\x22\xb0\xcf\x4e\x63\x20\x93\xf3\x80\xff\x27\x1c\x33\xda\x8b\xb1"
+ "\x1e\x3c\x91\xb1\xf7\x42\x34\x53\x7d\x38\x71\x7c\x34\x4f\x0e\x01"
+ "\xaf\x4c\xcc\x8a\xee\xf7\x89\x39\xd1\xfd\x3e\x71\x5e\x34\x4f\x9a"
+ "\xc0\x93\x13\x8b\x63\xca\xac\x8f\x29\xb3\x25\xa2\x4c\xa5\x5e\x4f"
+ "\x5d\x4c\x99\x86\x98\x32\x87\x23\x9e\xd1\xc6\x89\x6d\xfd\x73\x1f"
+ "\xe9\x73\x35\xb1\x23\xe2\xd9\xb4\x45\xea\xcf\x89\x21\x23\x8d\xd7"
+ "\x8e\x76\x6e\x55\x3e\x3f\x0a\xde\x4d\xb6\x18\x79\x47\xfe\x9b\xc6"
+ "\x47\xe3\x70\xd3\xe4\x68\x1c\x6e\xea\x97\x7f\xdd\x57\xe0\x93\x13"
+ "\x74\xf3\x58\xdd\x57\xa0\x0b\x63\xf6\x6c\x7e\x06\xac\x2a\xe4\x07"
+ "\x1d\x6e\x2a\x89\x81\xb7\x31\x06\x5e\x75\xc4\x73\x2a\x9e\xf7\x46"
+ "\xb4\x21\x35\xd1\x46\x09\xe0\x17\xd8\x13\x37\x35\x19\xe9\x3c\xa7"
+ "\x04\xbe\x1d\x4e\x39\xd6\x64\xb1\x2f\xdb\xc8\xe3\x74\xd3\x07\x3c"
+ "\xff\xd4\x61\x46\xca\x3f\xa9\x76\xdd\x6c\x8e\xc6\xe3\xe6\xb4\x68"
+ "\x3c\x6e\x1e\x1b\xd1\xae\x80\x75\x2d\x3d\x60\x0d\x3d\xf8\x08\xdb"
+ "\x3e\xec\xbf\x29\x7d\xca\xd6\xc0\x66\x3b\xcb\xeb\xef\x41\x3a\x51"
+ "\x4c\x89\x5e\x47\x07\xe6\x72\xfb\xb3\x06\xe5\xa7\xe4\xa6\x0c\xe5"
+ "\xcb\x45\x76\xc0\x5f\x6f\xf0\xa3\xb6\xa1\x29\x43\x2b\xf7\x8c\x41"
+ "\x1a\xf4\xdf\xc4\x54\x65\xe7\x1e\x2a\x10\xce\xdc\x2a\xd0\x13\xf3"
+ "\xa2\x49\x2f\xea\xf3\x88\x69\xec\x93\xc6\x7e\xb3\x18\xe3\x53\xd4"
+ "\xbe\xff\xcd\xcd\x11\x7c\x1d\xb0\xaf\xba\x43\x1c\xa7\x49\xaf\xb2"
+ "\x0d\xc0\x32\xca\xbe\x6d\x8d\x21\x3f\xf1\xdc\xdb\x1b\xea\x94\xb6"
+ "\x1b\xde\x57\xaa\xb2\x93\x2c\x11\x65\xfd\xfa\xdc\xb8\x83\xdf\x4d"
+ "\x08\x91\xb9\x31\xe0\x27\xc0\x49\x53\xf6\xde\xa4\x57\x1b\x21\xaf"
+ "\x28\x33\xd9\x28\xc3\xf3\x68\xb9\x87\x5c\x4c\xe6\x1b\x4b\xc8\xec"
+ "\x59\x75\x5c\xc2\x36\xfc\x44\x60\x4b\x77\x79\x4b\x3a\xc8\x1b\x68"
+ "\xe3\xb5\x2e\xb3\xf2\x09\x9a\x54\x99\x18\x24\x4b\x77\x79\x93\xdd"
+ "\x87\xfb\x70\x79\x53\x3a\x70\x83\x3c\xdd\xbc\x8f\xf5\x4d\x24\xed"
+ "\xa6\x4f\xcf\x79\x70\xf6\xcc\x1b\x7e\xf2\xe0\xbd\x73\xa6\xdf\x66"
+ "\x9f\xb3\xe8\xb9\x05\xf9\x37\x2c\x79\xa1\xd8\xbe\x62\xe9\xa2\xe2"
+ "\x45\x8b\x9f\xb6\x67\x38\xc6\x39\xec\xf3\x8b\xd5\x35\xbd\x70\xfe"
+ "\xb2\xe2\x29\x7c\x3b\xde\x5e\xb4\x74\xc1\x72\x79\x7b\x5d\x32\x45"
+ "\x03\x59\x54\xbc\x60\xa9\x7d\x5c\xfe\x78\xfb\xdd\xf3\x17\x15\xbe"
+ "\xb0\x74\x41\x5c\x58\xb7\xd9\x97\x2e\x58\xba\x60\x7e\xbe\x7d\x8a"
+ "\x3d\x83\x21\x47\x82\x8b\xe8\xcf\x0c\x63\x1c\xe3\xf1\xab\xc2\x25"
+ "\x8e\xe8\xe3\x99\x4f\xf1\xcf\x2d\xf9\xe7\x8f\x65\xb7\x38\xa2\x79"
+ "\xee\x16\x77\x34\xcf\xdd\x52\x75\xfe\x58\x76\x4b\xcc\xf8\x77\x4b"
+ "\xcc\xf8\x77\x4b\xf3\xf9\x63\xd9\x2d\x31\xe3\xdf\x2d\x31\xe3\xdf"
+ "\x0f\xfa\xc7\x3f\xf0\x92\x6f\x9d\xd4\x0b\x3f\x88\x19\xff\x7e\x10"
+ "\x33\xfe\xfd\x60\x52\xcc\xf3\xb4\x88\xe7\xcb\xf0\x3c\x27\x72\x7c"
+ "\xc4\x73\xbe\x21\x9f\x03\xfa\xe5\x07\x0e\x23\x0f\xeb\x7a\xe8\xe6"
+ "\x76\x3d\x6f\x65\x44\xde\x0e\x3d\xef\xae\x7e\xf9\xe3\xbd\x6f\xa4"
+ "\xab\xf9\xfa\xad\x49\xac\xd3\xd9\xff\x8f\xc7\x26\xc8\xc7\x55\xa7"
+ "\xe8\x07\x6b\x19\x16\xf3\x30\xfb\x83\x8a\x9f\x3e\xd6\x53\x33\x92"
+ "\x2c\x5c\xa6\xe6\x35\xf6\x23\x9e\x54\xcd\xbe\xc1\x48\x63\x5f\x69"
+ "\xe8\x94\x5b\xd9\xfe\x3d\xa6\xc6\x8b\x5b\x73\xa4\xcd\x8f\x32\x3a"
+ "\x7c\x39\xaf\x01\x1c\xf6\x3d\xb6\x54\xa8\xb1\xb8\x1d\xf7\x29\xcc"
+ "\xd3\x28\x6f\x16\xa6\x49\x9f\xb3\xcf\x35\xd2\x52\xf1\x4b\x03\xbc"
+ "\x1c\x03\xde\xfa\x51\xf1\x6d\xcb\x58\x3b\xb7\x7f\x3e\x68\x22\x6b"
+ "\x85\x4b\x6b\xf3\x6a\x6c\x5b\xdf\xba\x5e\xad\x2d\x34\xcc\x13\xae"
+ "\x43\xb9\x35\x48\x8f\x3f\x4f\xba\x15\xf6\xdf\xad\x0e\xb5\xde\x72"
+ "\x2b\xfa\x7f\xe6\x2e\xb5\x76\xda\x30\x0f\xfa\xb6\xf7\x04\x65\x2e"
+ "\xc0\xb5\x0f\xd7\x7b\x0d\xf8\x1e\x39\xdf\xbe\xb5\x5d\xb8\x12\x1e"
+ "\x62\xb8\x31\xe9\x21\xe8\xb7\x5e\x6b\xa8\x2c\xf7\xfc\x77\x99\x36"
+ "\xe1\x4a\x7c\x30\x4e\x3a\xfb\xe6\xf6\xfa\x28\x33\x9f\xf1\x8d\x48"
+ "\xcf\x16\xae\x11\x73\x38\xbf\x8f\xeb\x43\x99\xc1\x6c\x6d\xc3\xdf"
+ "\x57\x9d\x19\xc8\xdc\x12\xd3\x8e\xaf\x4e\xd0\x0f\x2f\x55\xed\xf8"
+ "\xe1\x73\x31\x75\xef\x8d\xdf\x8e\xcc\x26\xb4\xe3\xab\x41\xda\xe1"
+ "\x93\xb4\x35\xa1\x2d\xa6\xf3\xde\x85\xd0\x96\xaf\x24\xdd\xa3\xd2"
+ "\x7f\x98\xa6\xdb\x42\x01\xcc\xc3\x52\xf1\x4e\x96\x7d\xa8\x64\xa0"
+ "\xdf\xf4\x7c\x93\xad\x55\x94\x73\x7e\x9d\x3f\x9c\x23\x5c\xc3\x1e"
+ "\xf2\xd1\x0f\x37\x4a\x38\x03\xe9\x85\x0a\x17\xd0\xc9\xc4\x74\x42"
+ "\x7b\x50\x6e\xb0\xfe\x36\xe6\x25\x6a\x2d\xe4\x87\x90\xff\x4c\xc3"
+ "\xef\x36\xb0\xac\x44\xf8\x0d\x3a\xe2\x5d\x5b\xcc\xbb\x60\xc4\xbb"
+ "\x40\xd4\xbb\x35\x46\xfa\x6d\x29\x46\xfa\x37\xeb\xa7\xdb\x26\xc7"
+ "\xf4\x13\xfa\xe7\xb6\x96\xe8\x76\xdf\x36\x43\xb5\x0f\x7d\x74\x1e"
+ "\xad\x6f\x2b\x40\x1f\xf5\xc5\xef\xa3\xdb\xd6\xc7\xe7\xb5\xdb\xe4"
+ "\x3a\x9a\x18\x49\xf1\xe0\x35\xa0\xef\xfa\x24\x0f\xea\xfd\x74\x7e"
+ "\xff\xdc\x76\xcc\xe8\x9f\x6f\xd6\xc6\x1f\xd9\x63\xda\x18\x3e\x41"
+ "\x3f\xda\xa1\xda\xfa\xa3\x93\xd1\xb0\x7f\x94\x19\x9f\x17\x7f\x94"
+ "\x83\x76\x86\xe3\xb7\xf3\x47\x85\x83\xf3\xe2\x8f\xdc\x68\x4f\xf8"
+ "\x7c\x5e\xfc\x51\xad\x2a\x43\xf1\xca\x1c\x10\xae\xb8\xf5\x1c\x75"
+ "\x86\xd8\xce\x9d\x9c\xc2\xeb\x4b\x11\xe9\x5d\xd1\xfc\x87\x36\x70"
+ "\x39\xa6\x5f\x48\xe9\x59\xee\x87\x13\x76\x32\x7d\x1d\x4f\xf6\xb8"
+ "\x26\xcf\x88\xa1\xd5\xe9\x13\x34\xb9\xa5\xdb\x94\xb0\x4b\xd1\x6b"
+ "\xca\xab\xd1\x38\x4d\x2e\x88\x4f\xaf\xc9\x65\xa0\xd7\xe9\xf8\xf4"
+ "\x9a\x5c\x3d\x38\xbd\x26\x73\xff\x9f\x3e\x9f\x5e\x93\x8f\x44\xd2"
+ "\x0b\xb6\xae\x6c\xdf\x77\x6d\xe0\x8d\xbe\x3c\x51\xc3\x6d\x0d\x53"
+ "\xaa\x15\xbc\xa2\xca\x74\xa1\xcc\x14\xb3\x35\xa8\xf8\x04\x36\xa4"
+ "\xe5\x14\x4d\xee\x32\xe4\x7f\x44\x15\x0d\x13\x7d\x8f\xb1\x9f\x51"
+ "\x02\x97\xf3\x3a\x4e\x7b\xbc\xa1\x0c\xe2\xf9\x47\x74\xbd\x53\xb2"
+ "\xe3\xeb\x82\x29\xd0\xe9\x89\xaf\xc5\x49\x77\x28\x5f\xb3\x29\xf5"
+ "\xd1\x3a\x62\x4a\x65\x74\x1f\x81\x6e\x28\xa7\x6f\x3b\x7d\xed\xef"
+ "\xc2\x7d\x76\x3b\x9d\xdf\x67\xb7\xbf\xa5\xfa\xeb\xf6\xb5\xd1\xf8"
+ "\xdd\x6e\x8b\xdf\x5f\xb7\x67\x0c\xde\x5f\xb7\xcf\x18\xbc\xbf\x6e"
+ "\x2f\xe0\xfe\xf2\xd1\xed\xb5\xd1\xe3\xc6\xed\x65\xd1\xed\x45\xbd"
+ "\x28\x27\x4c\x43\x2f\xe3\xe7\x6f\xda\x6e\xe3\xc7\x3a\x8e\xfb\x8a"
+ "\xcf\x31\x01\xff\xab\x19\xc7\x8b\x85\x31\x28\x6c\xd0\xb0\x72\x55"
+ "\xfc\xfd\x56\x9e\xe3\xb6\x62\x26\xce\xfb\xc8\xf6\xef\xb0\xed\x7e"
+ "\xc7\x0b\x9a\x89\xda\x70\x6f\x3a\x41\x77\xde\xa9\x99\x4c\x25\xbc"
+ "\xe7\x29\xfd\xe4\xe5\x1a\xc2\x1d\x1b\x23\xfb\x82\xf7\x3e\x79\x6e"
+ "\xba\x59\xcd\x9d\xfe\x76\x82\xb2\x2e\x57\xfd\x72\xe7\xd5\xd1\x74"
+ "\xbc\xa3\x3e\x7e\xbf\xdc\x71\x18\xfd\xf2\xb7\xf8\xfd\x72\x47\xfb"
+ "\xe0\xfd\x92\xc5\xeb\x87\x7f\x3b\x5f\x8e\xb2\x6c\xba\x1c\xad\xe3"
+ "\x32\xf6\xc5\x3c\x1f\xcf\x2a\xe7\x3c\xb8\x87\x8c\x64\x3d\xcf\xef"
+ "\x6f\xe8\x32\xe4\x48\x96\xe1\xb3\x28\xb2\x7e\x3d\x4f\xb6\x0e\x23"
+ "\x12\x6e\x91\xb5\x2b\x9e\x9c\x64\xb9\x39\xef\x8d\x45\x64\x01\x0d"
+ "\x73\x77\x30\x8c\xa5\x44\x80\xf1\x17\xce\xc7\xe9\x37\x06\x22\xe5"
+ "\x24\xab\xc1\xc8\xc7\xba\x4e\xcf\x5b\x2f\x7a\x0a\x88\xf3\xc5\xc0"
+ "\xd6\xdb\x3f\x4c\x8e\x23\x9c\x9f\xf3\x45\xe7\xb9\xd3\xa2\xe4\xf1"
+ "\xce\x19\xd1\xf2\x78\xa7\x3d\x9a\x3f\x41\x7f\x94\xd3\xa0\xe7\x70"
+ "\x5f\x0c\x1c\xbe\x31\x7f\x5d\x58\x36\xef\xac\x8e\x91\x4d\xf0\xc0"
+ "\x5d\x53\x14\x0f\xdc\x75\x65\x0c\xae\xfb\xe2\xf3\xc0\x9d\xcd\x83"
+ "\xf3\xc0\x9d\x1d\x83\xf3\xc0\x5d\x66\xe6\x01\x1f\xdd\x35\x39\x5a"
+ "\x36\xef\x1a\x13\xdd\x76\xd4\x2b\x65\x93\x2e\xbd\x18\xd9\x84\x2d"
+ "\x74\xd9\x60\x72\xc8\x32\xc5\xfe\x23\x35\xbd\xc6\x5e\xc7\x37\xa2"
+ "\x99\x05\x72\xc5\xf8\x1d\xe1\x35\x25\xe8\xf8\x4c\xa6\xe1\x4e\x79"
+ "\xfe\xf3\xae\xf6\x48\x3a\x6e\x56\x67\x2e\x9d\x27\x68\xea\x22\xde"
+ "\x57\x56\xf4\x9c\x36\x31\xba\xfd\x53\xcd\xf1\xe9\x39\x75\x0c\xe8"
+ "\xe9\x8c\x4f\xcf\xa9\x99\x83\xd3\x73\xea\x1c\x3e\x93\x75\xbe\x4c"
+ "\x4d\x2d\xb4\x2f\x97\x36\x8a\x2c\x73\x8a\xa6\x7e\xfa\xcd\xc6\xa7"
+ "\xa9\xbb\xa2\xc7\xa7\xa9\x1b\x2f\x7e\x7c\x9a\xda\x11\x7f\x7c\x9a"
+ "\x46\xf1\xc7\xa7\x69\x36\x25\x0f\xd3\x72\xa2\xe5\x61\x5a\x46\x34"
+ "\x4f\x80\x76\xff\x6b\xe3\xd3\xb4\xda\x18\x19\xa8\x38\x41\xd3\xaf"
+ "\x86\x4d\x51\xa6\xfa\x6d\xfa\x17\x31\x38\x1e\x88\xdf\x6f\xd3\x8e"
+ "\xa2\xdf\x2a\xe2\xf7\xdb\x34\xff\xe0\xfd\x36\x3d\x05\xfd\x56\x71"
+ "\x7e\xbf\x4d\x1f\x7b\xf1\x36\xc5\xf4\xdc\xe8\x3e\x9b\x9e\x75\xf1"
+ "\x7d\x36\xbd\x3a\x7e\x9f\x4d\xdf\x17\xbf\xcf\xa6\x37\xab\x3e\xbb"
+ "\xdb\x1c\xdd\x67\xd3\xdb\xa3\xfb\x0c\x74\xfb\x1f\xf6\x19\xfa\x27"
+ "\x5f\xf9\x27\xdc\xbd\x00\xf3\xf6\x61\x3d\xae\xbb\xe7\xfa\xe8\x9e"
+ "\xb1\x6a\x6e\x7d\x8f\x1a\x3b\x54\x1f\xbe\x8f\x3c\x39\xe7\x8f\x03"
+ "\x77\x3b\xf4\xb4\x9f\x9c\xdf\x0f\x77\x6f\x81\x8e\xee\x6a\x2a\x91"
+ "\x7b\x5b\xaa\x0f\x99\xe6\xc8\xe7\x59\xc5\xfb\x53\x77\xef\xe3\xb2"
+ "\xe8\x63\xe1\x0d\x86\x88\xf5\x3a\xf2\x07\x18\x0e\x9f\x45\x8d\x81"
+ "\xe5\xbb\x98\x31\xfe\x02\x3e\x35\xf9\x9e\xd2\x9b\x00\xef\x9e\xb3"
+ "\x8a\x57\xef\x89\xb5\x7f\x6b\xf0\xee\x33\xc5\xa7\xf7\xbe\x11\x8d"
+ "\xc3\x3d\xf9\xf1\xf9\xf4\x9e\x12\xb4\xa1\x26\x3e\x9f\xde\x53\x35"
+ "\x38\x9f\xde\x83\xfe\xa7\x9a\x88\xb9\xcf\xc8\x27\x42\xbe\x98\xb9"
+ "\xcf\x3d\x6d\xd6\x80\xe2\x1d\x69\x13\x95\x37\xe4\xf7\xb8\xb2\x63"
+ "\xed\x3f\xf4\x4d\xf6\x1a\x1d\xe7\x17\xa2\xcb\x67\x0f\x62\xff\x65"
+ "\xb3\xfd\xf7\x7e\x7c\x9c\xb3\x2f\x60\xff\x65\xb3\xfd\xf7\xfe\xf9"
+ "\xb2\x95\xad\xdb\x7f\xf1\xe6\x78\xd9\xd5\xf1\xfb\x3f\x3b\xa6\xff"
+ "\x29\xb7\x18\xf3\x61\x59\x3e\x3a\xdf\xb1\xc8\x7c\xec\x9b\xc4\x79"
+ "\x99\x47\xce\xcf\x7b\xaf\x25\x16\xe6\x20\xf9\x32\xce\xe3\x3d\xf6"
+ "\xa5\x8a\xcb\x7b\xf7\xea\xe7\x49\xee\xdd\x17\x2d\x8f\xf7\x16\x47"
+ "\xcb\x63\xb6\x2d\xa6\xdc\x96\xe8\xf7\xe0\x9f\xff\x35\x1d\x7b\x9f"
+ "\x39\x86\x07\x0e\x9d\xa0\xfb\xd6\x2a\x1e\xb8\xef\x3f\xa3\xf1\xb8"
+ "\x6f\x4c\x7c\x1e\xb8\x6f\x12\xda\x7f\x28\x3e\x0f\xdc\x97\x33\x38"
+ "\x0f\xdc\x57\x08\x5a\x1e\x8a\xe4\xdb\x87\x4a\xb2\x86\xc5\xe4\xa9"
+ "\x8c\xaf\xf3\xee\xab\x8b\xbf\x46\x70\x9f\x47\xd1\xf8\xbe\x60\x34"
+ "\x8d\xef\x6b\x8b\xa6\x21\xda\xf2\x3f\xa7\x61\x7f\xfc\x89\x1e\xd7"
+ "\xfd\xb1\xf2\xef\x3d\x41\xf7\xeb\xf2\x3f\xe3\xe3\x68\x1c\xef\xcf"
+ "\x57\xb8\xc4\x5b\x17\xb9\x9f\xe7\xbf\xde\xf8\xb4\xbc\xbf\x3a\x7e"
+ "\x9b\xef\xdf\x87\x31\xc8\xab\x9d\x27\x4b\xf7\x37\x23\xfd\x21\x5e"
+ "\x0f\xe5\xf5\x90\x9d\x48\x7f\x28\x44\x16\x39\x5e\xf5\x8f\x4b\xf7"
+ "\xfb\xd9\x17\x85\xe9\xcf\xfc\x6b\x1d\x43\x39\x3c\x06\x31\x5e\x79"
+ "\x25\xd2\x6f\xc1\xba\x9e\x79\xfd\x1a\xe6\xf5\x19\xd2\xfe\xe3\x7d"
+ "\x16\xf6\x23\xb4\x3a\x28\x87\xe3\x60\x18\xfc\xce\xf9\xa3\x61\xcf"
+ "\x98\xc1\x72\xc1\xf9\x8d\xbc\x6a\xdd\xac\x2c\x46\x37\xcd\x28\x8e"
+ "\xdf\xc7\x33\x36\x0e\xce\x3b\x33\xea\x54\x3f\xcf\x38\x16\xdd\xcf"
+ "\x33\x3c\x9a\x6b\xc4\x1c\x6e\xab\x0f\x74\xbe\x98\x3e\x2e\xb6\x0b"
+ "\xff\xa0\xfa\x7e\xdd\x63\x6d\x45\xa5\xf4\x9d\x4e\x9a\x39\x4d\xd6"
+ "\x67\x12\x41\xeb\xda\x04\x6a\x92\x3a\x60\xe6\x9b\x12\x4f\xe4\xc9"
+ "\x0b\x91\x49\xac\x7b\xb6\x8d\xdf\xd5\xb8\x44\x10\xf9\x8e\xf0\x9e"
+ "\x00\x9f\xe5\x06\x2f\x5c\x76\x9c\x66\x3e\x1e\x55\x1e\x23\xb3\x57"
+ "\xc1\xa8\xaa\x91\xf2\x38\x73\x8b\xb1\xa6\xbb\x1e\xcf\xf1\xd7\x7d"
+ "\x67\x36\x18\xbe\x0f\xca\x67\x6c\xe6\xa0\xfb\x97\x8c\x13\x9f\xa7"
+ "\x61\x9c\x2e\xac\x07\x66\xa5\x18\xfc\xab\x7c\x2d\x67\x8d\x19\xf0"
+ "\xe5\x9b\x95\x8e\x77\x47\x2e\xb0\x36\x18\x21\x07\xb3\xe6\x44\xc2"
+ "\x51\x31\x58\x66\x15\x18\xfe\x78\xb8\x2f\xfe\x1a\x58\x06\x3e\xd5"
+ "\x31\xf8\xec\x85\x9d\xb2\x5e\x87\xd1\x70\x21\x18\xdc\xe7\x8a\x67"
+ "\x99\x1f\x66\x1d\xb9\xd0\x9a\x5f\xa2\x8d\x72\x5e\x3f\x8f\xb7\x66"
+ "\x4b\x7b\x89\x61\x5c\x18\xc7\xd9\x59\x51\x73\x0b\xb9\x77\xcf\x7b"
+ "\x5b\x39\xc3\x95\xdc\xcf\x8e\x59\x23\x9c\x3d\x57\xfa\x53\xe9\x72"
+ "\xff\x44\x28\x56\x0e\x66\x97\x18\x63\x74\x4c\xfa\x16\x43\xee\x31"
+ "\xaf\x65\xb8\x31\xeb\xac\xb3\xf7\x29\x59\xc8\x49\xd1\x92\x22\xe7"
+ "\x6b\xb3\xa5\xfd\x67\xac\x97\xfa\x90\x2f\xa6\x5c\xcc\xfa\xdf\xec"
+ "\xb9\x62\xf0\x75\xfa\x14\xf4\x6f\x80\xf7\xb6\x54\x6c\x88\x9c\xc9"
+ "\x31\xeb\x15\xfe\xcd\xf2\xbc\xff\x9f\xb9\xfd\xba\xde\x7b\xe0\x83"
+ "\xe8\xfa\x72\xe6\x3a\x4f\x5e\xa8\xfd\x39\x83\xb4\x3f\x67\xa0\xfd"
+ "\x8b\x25\xdc\x98\xb5\xc4\x1c\xd9\xfe\xf0\x79\xfa\x2f\xa7\x19\xfa"
+ "\xcb\xa0\x1b\x6c\xee\x07\xc6\x19\xb6\x3a\xaf\x1f\x0c\x6e\xab\x3f"
+ "\x30\xb0\xfe\x27\xcb\xe5\x0c\xac\xff\xf9\xe3\xd9\xea\x3e\x92\x7b"
+ "\xab\x51\x75\x3f\x90\x6d\xad\x8e\xd7\x96\x07\x06\x59\xff\x7b\x40"
+ "\x5f\xff\x7b\xe0\x48\xb4\x3e\x7b\xa0\x32\xba\x0f\x73\x62\xfa\xf0"
+ "\x81\xfa\xe8\x3e\xcc\x99\xfb\xdf\x1d\xd7\xf0\x4c\x89\x89\x89\xa6"
+ "\xc4\x04\x53\x42\x22\x5e\xa3\x89\x34\x2c\xd1\x9c\x38\x04\xbf\xa1"
+ "\xfa\x75\x98\x29\xd1\x64\xc6\x6f\x88\x7e\x1d\x1a\xf3\x3c\x8c\xcb"
+ "\xe2\x67\xd6\xaf\x43\x62\x9e\x87\x7e\xcd\xfb\x61\x7a\xbd\x46\xfd"
+ "\xe6\x98\xe7\x21\x5f\xf3\x7e\xe8\xff\xb0\x3c\x9d\xf7\x1c\xed\x87"
+ "\x76\xef\xe2\xe5\xf3\x0b\x17\xe5\xcb\xfd\xe2\x05\xf6\xf9\x4f\x3d"
+ "\xb5\x60\xd9\x32\x7b\xf1\x12\xfb\x5d\x77\x3e\x78\xd3\x6d\x76\xb5"
+ "\xed\x5c\x38\x65\x5c\x7e\x32\xcd\x5c\xb1\x94\x5f\xcc\x7c\xe8\xde"
+ "\x5c\x7b\xce\x5d\x77\x46\xbf\x34\xc0\xc8\xed\xe5\x0b\x41\x89\x90"
+ "\xbf\xac\xf2\x51\x44\x1b\xb7\x4a\xdd\xd3\xce\x7e\xbe\x6a\xcd\x23"
+ "\x77\x62\x33\xfb\x8f\xf6\x3a\x85\xe7\x1a\xde\xd3\x7f\xe8\x4f\xdc"
+ "\x88\x1b\x6a\xcb\xa8\xe8\x49\x3e\xbf\xf2\xd0\x3f\xc5\x41\x3f\xd9"
+ "\xef\x23\xd3\x71\x7a\xfc\xce\xa6\x6c\xe4\xc5\xb3\xd7\x17\x22\xbb"
+ "\x93\x2c\x27\xe8\x27\x9f\xe3\x5d\x82\xb8\x5d\x43\x5a\x40\xf7\x85"
+ "\xfe\xf1\x3f\x65\xda\xc1\x32\x23\x9f\xf5\x04\xcd\x79\x43\x1c\x14"
+ "\xf2\x99\xcf\x07\xa9\x7c\x73\x16\x09\xd3\x43\xe9\xac\x1b\xaa\x47"
+ "\x92\x99\xf7\x42\xdf\x1c\x49\x96\x37\x47\x71\x8c\x94\x39\x73\x8d"
+ "\xbd\xd0\x72\x3c\xfb\xe8\xf1\x2c\xae\x9b\xf3\x6a\xa6\x87\x1e\xe4"
+ "\xfc\x3b\xa3\xf3\x6f\x1c\xd8\x8b\x9d\x33\xd7\x84\x7c\xb3\x3f\x27"
+ "\xab\x35\x2c\xfe\x19\x4c\xae\xcf\xba\x31\x9b\x12\xbc\xe8\x8a\xe6"
+ "\x50\x19\x29\x9f\x9f\x39\x7f\x5a\x19\x16\x21\xf6\x4f\x9f\xd9\xe5"
+ "\x14\x15\xcf\x91\x19\x32\x9d\xe0\x59\xca\x3e\x0a\x73\x0e\xd4\x2c"
+ "\x20\x33\xda\x3f\xa6\x93\x1e\xee\xb2\xcf\x22\x72\xce\x24\xf3\xef"
+ "\x1d\xec\x6f\xd8\xf0\xd7\xcd\x7f\x24\xf3\x3b\xbd\x65\xa6\x5e\x61"
+ "\xa3\x92\x62\xd1\x21\x38\x6e\x52\x40\x04\xd9\xc7\xbf\x79\x5e\x98"
+ "\xf3\xb4\xf6\x38\x6d\xd4\x5a\x1c\xa0\x35\xc7\x44\xd0\xfd\x47\x75"
+ "\x36\xa0\xa5\x2b\xc0\xfe\x8b\x96\x35\x33\x29\xf1\x44\x2e\x99\x5a"
+ "\x0a\xaa\xc8\x3b\x37\x40\x25\xc7\x44\x47\xf3\xbc\x2f\xa8\xb5\xa0"
+ "\x9e\xf2\xda\xc8\xd4\xdc\xfe\x17\x92\xb1\x7f\x36\x9c\xf6\x97\x9e"
+ "\x25\xdb\x9a\x45\x9c\x76\x96\x56\xad\xa1\xe1\xab\xfe\x44\x56\x6f"
+ "\x47\x1b\xea\x39\x49\x8f\x1e\xa5\x04\xc0\x33\xad\xfe\x0b\xd9\x56"
+ "\x3f\xc2\x7e\xbe\x59\x54\x5d\x4a\x36\xe1\x4c\x4f\xe9\x75\xa6\xa7"
+ "\xf6\x8a\xf4\x91\x3d\xce\xf4\xb4\xd6\x22\xe4\x6f\xff\x88\x46\xb4"
+ "\x51\xda\xc1\xce\x36\x53\xd5\x19\x1a\xc3\x6d\x3a\x81\xb6\x55\x9f"
+ "\x41\xfe\x0d\x9f\x16\x69\x28\x1b\x59\x26\x94\xf4\xa9\xdb\x9b\x1b"
+ "\x24\x0d\xb0\xaa\x7a\x69\x4c\x75\x2f\xd9\xb4\xf2\x4f\x8b\xb8\x5c"
+ "\x17\xfd\xf8\x4b\x2f\x46\x86\x92\x35\x22\xdc\xb7\xa1\x21\x0b\x3a"
+ "\x71\xd8\xfb\x4f\x36\x98\xbd\xcd\x5d\xd4\x12\xe8\xa5\x56\xfa\x33"
+ "\x79\x1d\x7f\xf7\xbc\xf3\x64\xc3\x10\x0d\x42\xe0\x59\xd5\x8e\xba"
+ "\x14\xef\x38\x5b\xc8\xec\x45\x1f\x54\x94\x52\x4a\xd1\x2a\x1a\xd6"
+ "\x89\x74\x35\xb7\x7f\x27\xdb\x1b\xfa\xbb\x67\x95\xf4\xc7\x7d\x3c"
+ "\xab\xb4\x85\x12\x5b\x03\x55\xec\xf7\x69\x0a\x27\x9f\xf6\x7b\x03"
+ "\x47\xc8\x5b\xf4\x37\x8f\x66\x39\xdd\xb6\x51\x23\xcb\xbb\xe7\x8e"
+ "\x98\xbc\xe6\x73\xe4\xcd\x0d\xd0\x21\xd4\x2d\x36\x9c\x66\x5f\x80"
+ "\xac\xd6\x40\x90\xcf\x3b\x65\x88\x6e\x5b\x72\xc5\x52\x1a\xbf\xf3"
+ "\x0c\x8d\xdd\x71\x86\xd2\x45\x4f\xba\x89\x7d\x6c\xf9\xfc\xea\x0e"
+ "\x5c\x53\xda\xc9\x82\xb6\x2b\x7f\xec\x24\xdd\xd7\xb6\x2f\x9d\x6a"
+ "\x7a\x07\x7c\x6d\x7b\xbb\x07\x7c\x6d\xc1\x53\xf3\xd8\xdf\xd6\x47"
+ "\x0f\x07\xac\xcd\x34\xec\x38\xcd\xb1\x31\x7f\x57\x9c\x22\xf3\xba"
+ "\x53\x44\x37\x96\x99\xc8\xbe\x90\xcf\x59\xfc\xe4\x4f\x5e\xf4\x0d"
+ "\xdf\x1f\xa7\x9f\x6c\xc4\x35\x05\xbf\x04\xa4\xaf\xe5\x76\xb6\xeb"
+ "\x7c\x8c\x34\x13\xd2\x5e\xc0\x35\x11\xd7\xe7\x9c\xd5\xc2\x8f\xba"
+ "\xd8\xb7\x29\x99\xf9\x59\xf7\xef\xad\xea\x71\xfd\x24\xdf\x47\x8b"
+ "\xf3\x0d\xbe\x56\x3a\x7e\xce\xbc\x43\xc7\x4f\x72\x7c\x2e\xbf\xc4"
+ "\xab\xaf\x20\x81\x63\x75\xe9\xe9\x8c\x43\x0b\xd7\x8b\xfa\xeb\x71"
+ "\xb5\xe2\xc7\x72\x3a\xcd\x28\xdb\xdd\x57\xc0\x75\x7e\x8a\x74\x61"
+ "\xa4\xa3\xdd\x66\x7e\xf7\xab\xe3\x27\x4d\x2a\x4f\xba\x09\x30\x83"
+ "\x3a\x7c\xc8\xfe\x1c\x33\xcb\x78\xb7\xc9\x2a\x1a\xe7\x4d\xa2\xea"
+ "\xad\xa2\x79\xc7\x56\xd1\xa4\x64\x2f\xd7\xe2\xa3\x22\x0b\xe3\x88"
+ "\x71\xbc\x69\x23\xde\x35\xda\x89\x98\x2e\x4d\xf9\xec\x4f\x96\x0b"
+ "\xfb\xef\x92\x03\x91\x6d\x10\xae\x07\xa5\xad\xff\x5e\xe9\xe1\x21"
+ "\xd0\x01\x96\xd6\xf6\x2e\x7a\xa7\xb7\x63\x88\xf3\x33\x32\x79\x43"
+ "\xc7\x69\x42\x1a\xd9\xd8\x1e\xac\xd9\x2a\x7c\xaf\x73\x3c\xc0\xad"
+ "\xa2\x0b\xfc\x72\x65\x27\xe5\xbe\xf0\xfd\x34\x4a\xfb\x0f\x8c\x76"
+ "\x4a\x3f\xe5\x6e\x8a\xd0\x4f\x97\xb7\xf8\x1a\x22\x74\xd3\xdc\x4f"
+ "\xcf\xd7\x4d\x8f\x7d\xac\x74\x13\x64\x5f\xea\xa2\xb0\x4f\x4f\x7f"
+ "\x37\x26\x5d\xf7\x13\x79\xec\xd5\x98\xf4\xa0\x9e\xbe\x26\x26\xdd"
+ "\xaf\xd2\x1f\xfd\xc8\xd0\x7d\xad\x8c\xc7\x0a\xd6\x7d\x8f\xbe\xc5"
+ "\xba\xaf\x75\x9e\xae\xfb\xa4\xfe\x79\xf4\x45\xf1\x6f\xd0\x45\xcb"
+ "\x59\xdf\x3c\xfa\x38\xe3\x2f\x0e\x92\x81\x7b\x12\xd2\xae\xe4\xb4"
+ "\xca\x3f\x93\x19\x3f\x43\xef\x2d\x61\xbd\xc7\x3a\x8f\x75\xdf\xf6"
+ "\x51\xa2\x6d\xfb\x56\x71\xb4\x5a\xc6\x1a\x7a\xa4\x5f\xff\xbd\x82"
+ "\xb4\x8d\x48\x7b\x05\xef\x59\x0f\x32\x4d\x5a\x72\x1b\x88\xfd\x4f"
+ "\x60\x6b\x1d\xd3\x4c\x19\xb4\x19\xfd\xcd\xe7\x0d\xd7\x83\xbe\xd6"
+ "\x04\x2a\xf2\x16\xf3\xf9\xd5\x30\xfb\xa4\xb5\xb7\x16\xb7\xb3\xdc"
+ "\x8d\x5a\x07\x39\xe3\xf3\xd2\xa5\x01\xd1\xc9\xe7\xee\x18\x87\xbc"
+ "\x95\xf7\x71\x7c\xa6\x84\xa6\x02\x22\xf6\x0b\x67\x9d\x0d\x5c\xcc"
+ "\x95\xc0\x49\xc5\x83\x79\x34\xcd\x47\x6f\x4f\x53\x7d\xfd\x78\x16"
+ "\xc7\x81\x3b\x4e\x8f\xe4\x62\xbe\x17\xe4\xb6\x59\xc3\x65\xc4\xe7"
+ "\x60\x38\x36\x22\x5f\xb7\x9b\xb4\x82\x4a\xe3\x2c\x8c\x0b\xba\x01"
+ "\x79\xbc\x6d\x41\x62\x9c\x7d\xf4\xc8\xae\x96\x92\x06\x2e\x9f\xcd"
+ "\xb4\x11\x2e\xa7\x01\x23\x41\xc2\x30\xc9\x79\x23\xe6\x06\x8f\xaa"
+ "\xb5\xf3\xe4\x86\xac\x96\xb9\x7e\x62\xbd\xef\xed\x00\x8c\x92\xe3"
+ "\x0a\x06\x60\x09\x8c\x01\x51\xef\x74\xf8\xc3\xd7\x88\x7f\x02\x7e"
+ "\x1a\xf7\x17\x9f\x8b\xe4\xfd\x36\xd0\x25\x85\x7d\xe5\x95\x2d\xfa"
+ "\xc8\x8e\x9a\x3f\x13\xe9\x67\x3b\xc1\x6f\x8f\x54\xf3\xb9\x25\x3e"
+ "\xcf\x79\xa1\xb3\x9c\xa0\xd1\x58\xe3\x3c\xa7\xb6\xe2\x7f\xf7\x2c"
+ "\x27\x60\xdb\x76\x9a\x44\x3d\xf0\xaf\xe6\xf3\x9c\xc7\x29\x37\xc4"
+ "\x7c\xa8\xb7\xa9\xf6\x8d\x47\x99\xe6\xb9\xed\x9c\x86\xb9\xe3\x61"
+ "\xa3\xff\xb9\xbd\xdc\x16\xbc\x3b\xac\x6c\x44\x71\xc4\x47\x8f\xd5"
+ "\xf2\x7b\xa4\xed\xe3\xfc\x13\xa0\xc7\xbc\x18\xc3\xde\x3f\x1e\x36"
+ "\x55\xac\x22\xb3\xd2\x69\x73\xf7\x73\x79\xa5\xd3\xe6\x16\x0d\xe8"
+ "\xb4\xb9\x0b\x94\x4e\x53\x34\x56\x3a\x6d\xee\x23\x4a\xa7\xcd\x7d"
+ "\x40\xee\x8b\x41\xa7\xf1\x3b\xd6\x6b\x86\x4e\xdb\x31\x4a\x1c\x66"
+ "\xdd\xd1\xe3\x9a\x9b\x65\xe8\xb6\x4d\x48\x63\xdd\xc1\x38\x2a\x3d"
+ "\xf5\x68\x95\xf8\x7f\xd3\x49\xf9\x1d\xf0\x7d\x01\x9f\x5f\xe8\xd0"
+ "\xef\xd1\x2f\x73\x3f\x50\x3a\x6e\xee\x96\x01\x1d\x37\xd7\x36\x50"
+ "\x96\x75\xdc\xdc\xdd\x4a\xc7\xa9\xf4\x9a\x47\x59\xc7\x3d\x5a\xc5"
+ "\x34\xd0\xe1\x9b\x78\x0d\x4f\xcf\xcf\x74\xac\x8d\xd4\x71\xd1\xf2"
+ "\x35\xb7\xcb\xd0\x71\xac\xdb\xf0\xcc\x71\x23\xe7\x49\x79\x43\xbe"
+ "\x2d\xa0\xb9\x21\x77\xdc\x07\xdc\x66\x8e\xf7\xc6\x74\x9b\x7a\x92"
+ "\x86\xe9\x67\x87\xf4\x76\x3f\x9e\x69\xf8\x3e\xfa\x68\x6e\x56\x3c"
+ "\x3b\x7a\x20\x26\x23\x5d\xc5\xe7\xe6\xbd\x65\xc7\xc9\x5b\x25\xca"
+ "\x5a\x43\xc7\x28\xaf\x18\xba\x22\xf1\xd9\xcf\xb9\x6f\x31\xef\xf8"
+ "\x11\x5f\x59\xf7\x60\x2c\x5d\x93\x17\xa0\xa1\x98\xab\x7f\x5e\x61"
+ "\xc2\x3b\x47\xd4\x3b\xb9\xc6\x70\xe3\x52\x8e\xe7\xf7\xf8\xbc\xc1"
+ "\xe6\xfb\x17\x59\xdf\xc9\xc1\xeb\x7b\x22\x49\xd6\x07\x9b\x0a\x73"
+ "\xa0\x4b\x4f\xd1\xe3\x72\x5e\x22\x63\xe0\xac\x8b\x07\xeb\x89\x1f"
+ "\xea\xef\x87\x0c\xf2\xfe\x91\xaf\x29\xbf\xf2\x6b\xca\xbf\xc9\xba"
+ "\x08\xed\xb3\x86\x5d\xd1\x70\x46\x84\x8c\x7c\x9d\x9c\xef\x63\x7d"
+ "\x2d\xe6\x73\xe7\xd5\x72\x8e\x66\x33\x60\x32\xff\x6d\x46\x3e\x19"
+ "\x97\x05\xba\x72\x1a\x6a\x1c\x11\x88\x2a\x1b\x1e\xa0\xf1\x13\x83"
+ "\x9e\xe9\x64\x3d\xea\xad\x22\x19\xa3\xb6\x11\x36\x29\xc7\x4c\xda"
+ "\xd2\xbf\xfe\x91\x37\x07\x7a\x33\x27\xc2\x2f\xb6\x0b\x7a\xee\x2a"
+ "\x15\x8f\x26\x40\x15\x6a\xbe\x79\x05\xf4\xf3\x48\x3e\x0f\xc3\x67"
+ "\x63\xf2\xc2\x39\xa6\x46\x19\x3b\x2d\xaf\xd2\x28\x3b\xd8\x3a\x0b"
+ "\xd7\xab\xd7\xc9\x3e\xa6\x01\x94\x69\x32\xca\x30\x6c\xf6\x53\xc4"
+ "\xb8\x7c\x95\x3c\x53\x1a\xea\x62\x5d\x78\x05\x6c\xd1\x91\xaa\x9e"
+ "\x79\xa4\xd7\x03\x99\x79\xdc\x73\xa1\xb3\x19\x83\xb7\x6f\xde\xa4"
+ "\x8b\x6f\x1f\xe9\xed\x9b\x57\xf4\x35\xed\xbb\x50\xbd\x7b\x2f\xbe"
+ "\xde\x54\xa3\xde\x8e\x8b\xa7\xeb\xfc\x31\xdf\x9c\xae\x19\x3a\x5d"
+ "\xe7\xe7\x7c\x0d\x5d\xe3\xd5\xb3\xfe\x9b\xd7\x63\x37\xea\x69\x88"
+ "\x57\x0f\xc9\xbf\x41\xcf\x4d\x59\x8c\xd8\x9e\xdd\x90\x1d\x15\x1b"
+ "\xef\x49\x8a\x8c\x97\xdc\x2d\xe5\xea\xc9\xb4\xfe\xf8\xcc\x6a\xaf"
+ "\x1c\xba\xfa\xc9\x89\x79\xb5\x3c\xbe\x0b\xcd\x47\x4f\x4e\xe2\xb8"
+ "\xb1\xd3\xd6\xa8\x33\xd9\x7a\x99\xec\x0b\xc5\x69\xe6\x18\x60\x1c"
+ "\x03\xd0\x0b\x2d\xde\x58\xc5\x71\x4b\x9a\x72\xd8\xff\x1e\x73\x2a"
+ "\xe8\xf8\x27\xdf\xe0\x98\x66\xb8\x1f\xc6\xf7\xbc\x1f\x8e\x6b\xad"
+ "\xd2\x05\x4f\xd6\xfa\x68\x7e\xdb\xe0\x70\x9b\xe6\xed\x2a\xcd\x18"
+ "\x32\x98\x9f\x3d\xca\xfb\x7c\xf4\xfc\x5e\xe9\x5b\x9f\xfc\x49\x36"
+ "\xe6\x14\x7a\x9c\xc1\x05\x8f\xcb\xd8\x73\xce\x5c\x3e\x57\x82\xf1"
+ "\x31\xff\x45\xfd\x3c\x00\xe8\x52\x06\xfa\x3e\x65\x33\xe8\x62\xa4"
+ "\x23\x6d\xbc\x41\x17\xd8\x39\x29\xde\xda\x10\x9f\xd7\x09\xa8\xb3"
+ "\xd9\x4f\x3d\x20\xca\x9b\x72\x15\xec\xa7\x94\x8f\x1a\xd7\xd7\x97"
+ "\x6b\x96\xf3\xa7\x52\x9e\x3f\xe5\x4f\xf2\x27\x35\xe5\x1a\x78\x88"
+ "\x65\x36\x13\x9f\x01\x9f\x80\x31\x75\xb3\x8a\xf5\x97\xc0\xe7\xe5"
+ "\xe4\xfb\x65\xe9\x26\x45\x9b\xa7\x7e\x2d\xba\x39\x7e\x8c\x84\x9d"
+ "\x02\xbc\xe7\x32\x5c\x1f\xae\xfe\xd5\xe9\x1c\xff\x42\x6f\xcf\x53"
+ "\x3b\xb4\x0d\x9f\x64\x6b\x3d\x36\x93\x81\xef\x4e\x79\xb6\xf5\x29"
+ "\xb4\x7f\xfe\x5c\x89\xb3\xc4\xc7\x66\x62\xbf\x7e\x2d\xb9\x69\x9e"
+ "\x58\x6d\xa3\x7d\x4b\x3b\xe4\xfc\x89\xeb\x9c\x80\xfa\x05\xcf\x97"
+ "\x60\xa3\xf4\xb8\xf2\x6d\xfd\x74\x03\x5c\xd1\x63\xd0\xed\xa9\x26"
+ "\x35\x3e\xab\x36\x06\x56\xdb\x4c\x8d\x7e\x79\xee\x8e\xc6\xda\x9d"
+ "\x5f\xa9\x18\xdc\xf9\x73\x0c\xda\xf5\xe3\x04\x7c\x38\x8f\xf2\x73"
+ "\xca\x2f\x36\x70\x92\x32\x9c\xcc\xe7\x78\x9f\x2a\xe0\xf3\x43\x8a"
+ "\xfe\x8d\x29\xc8\x53\x75\x3e\xfd\xf3\xf7\x46\xd0\x3f\x91\x79\x90"
+ "\xe9\xcf\x6b\x1e\xa0\xed\x9f\x40\x4b\x8b\x3a\xf7\xc0\x76\x4d\xfe"
+ "\x5f\xf0\x9c\xc2\x78\x6a\xe5\x06\xcd\x73\xcd\x6a\xbd\x6c\x41\x6a"
+ "\x44\x3f\xa0\xbd\x36\xb6\xd9\x12\x8c\xf6\x73\x19\xa6\x01\xc7\xb3"
+ "\xe4\xba\x81\xcf\x25\x3d\xae\x05\xe9\xb1\x6d\x5a\xa7\xce\x94\x90"
+ "\xf2\x31\x59\x90\x1d\x11\xd3\xdc\x5f\x6c\x17\x41\x75\x3e\x39\xdf"
+ "\xbf\xaf\xd4\x6f\x1e\x4c\x17\x30\x0f\xca\xd8\x98\x26\xb9\xbe\x00"
+ "\xdb\xeb\xe9\x29\x02\xb8\xa9\xbe\x7f\xfa\x72\x95\xb6\x70\x3e\xae"
+ "\xe0\xb1\x05\xfb\x05\xea\xf6\x3b\x65\xac\x15\xb4\xed\xe9\x5c\xe6"
+ "\x39\x83\xcf\x78\x3d\x52\xf9\x8e\x2f\xbc\x92\x75\x8b\x41\x73\xe0"
+ "\x9f\x0c\xfc\x3a\x0c\xfc\x8d\xfc\xdc\x77\x9c\x87\xf7\x6e\x9a\xec"
+ "\x41\xa9\x73\xd5\xd9\xa1\x85\x69\x86\x2c\x73\x1d\xdc\xcf\xac\x73"
+ "\x98\x1e\x8a\x16\x0b\x27\x45\xc3\xb2\x99\x54\xbc\x4e\xe6\x79\xc8"
+ "\xe3\xaa\xe0\x10\xe4\xc9\x1d\x80\xb1\xe0\xa8\x7a\xd7\x8f\x27\xfb"
+ "\xfb\x4b\x9f\x3c\xd5\x1f\x0b\x3f\xe6\x76\x0d\xe0\xcb\xf2\xb7\xb0"
+ "\xbf\xff\xf9\x5d\xc0\x69\xe3\xd8\xbf\x52\xd7\x14\x5f\xcd\xf8\xfa"
+ "\x39\xa6\xae\xe4\x75\x1f\x2d\xb4\x30\xee\x9c\xc7\xe8\xb3\x01\x5e"
+ "\x5c\xe8\x8b\x84\x23\x9c\x12\x57\x09\x47\xe9\x0e\x3f\xe6\xae\x64"
+ "\x57\xfb\x2e\x4f\xa7\x0c\xe0\xbc\x70\xbd\x81\xcf\x80\x4e\x78\x7a"
+ "\x7c\x2c\x4f\x72\xdd\x1c\xb7\x4f\x87\xcd\xba\x24\xf5\x38\x3d\x6d"
+ "\x53\x78\x2d\xa8\xe4\x7e\x1c\x6c\x9c\xe3\xf8\x9a\x1c\x73\xf5\x75"
+ "\xa5\x43\xd0\xcf\x05\x6f\xbe\xae\xce\x13\x05\x54\xdc\xd5\xa7\x77"
+ "\x08\xd3\x5b\x4c\x2b\x5e\x57\xf7\xcb\xb8\x1d\xf2\xac\xf9\xd3\x07"
+ "\x78\xbf\x6e\x44\xd1\x5b\x32\xc6\xae\xee\x23\xe8\x6f\x2a\x0a\xc9"
+ "\xb8\x7f\xce\x62\x3e\x7b\x1b\xe2\x39\x9f\xf4\x81\x6b\x2c\x0e\xd1"
+ "\x43\x41\x96\x89\xa7\xbb\xf8\x4c\xbd\x8a\x5f\xfe\x74\xd0\x38\x47"
+ "\xcf\x31\x3b\x39\xde\x2c\xf4\x50\xe2\x40\xbc\xd8\x82\x23\x6c\x6b"
+ "\xe9\xfd\x4b\x9b\x4d\x42\x8f\xef\x51\x70\x27\x9f\x9b\x57\xfb\x59"
+ "\xc7\xa1\x13\x12\xff\x8e\xbc\x8f\xa8\xf5\x1f\x43\x47\x15\xfc\x81"
+ "\xf7\xb4\x7c\x3a\x8c\x1e\x57\x41\x3e\xc6\x8c\xc3\xe7\xeb\x92\x82"
+ "\x3b\x8d\x39\x0c\x9f\xc3\x53\xfb\x63\x03\xf0\x50\x5e\xda\xd5\x03"
+ "\x7d\xf0\x09\xc3\xaa\x3f\x5f\x2f\x14\x34\x19\xb2\x57\x74\x0d\x9f"
+ "\xe5\x7e\xda\xcd\xf5\x0f\x36\x5e\x08\xe7\x23\xdc\x4f\x96\x13\xf6"
+ "\xf8\x7d\x13\x7f\xbf\x6d\x51\xba\xd1\x06\x83\x26\xaa\x0d\x8b\xd6"
+ "\x76\x27\x37\x14\x0e\xb4\x7d\x91\x5c\x23\x8a\x78\xbf\x3f\x82\x36"
+ "\xfc\xdc\xa0\xc6\xb5\x45\x0e\xf0\x87\x7e\x16\x5f\xa5\x41\x76\x1e"
+ "\x13\xab\x73\x49\xe1\xb8\x88\x0c\x59\x47\xde\x5d\x3e\xea\x09\xaa"
+ "\x7d\xaf\x45\x1c\xff\x80\xf4\x72\x33\x18\x97\xb8\xed\x8c\xc2\xf1"
+ "\x99\x0c\xb6\x39\x54\x6c\x85\x67\x26\x32\xbe\xf6\x6b\xb9\x8f\x17"
+ "\x49\x5b\x57\xc6\x59\xe8\x2b\x18\x12\xe8\x4b\xa7\xee\xbe\x02\xe8"
+ "\x85\x74\x53\x8f\xeb\x19\xe8\xff\x73\x47\x55\x9d\xcf\x8c\x35\x70"
+ "\x65\xdc\x64\x1c\x50\xb1\x28\x3e\x7d\xb9\x5e\x19\xfb\xa9\x60\x18"
+ "\x7e\x16\xfc\x86\x7e\x53\xfb\x04\xf6\x7a\x87\xbf\xfc\x50\x8a\xb6"
+ "\x5c\x1c\xe6\x18\x63\x98\x93\x74\x54\x80\x7f\x47\xac\xf5\xc0\x46"
+ "\x7f\xdc\x94\xb7\x92\xb2\x30\x77\x26\x71\x4e\x64\xee\xd4\x70\x5d"
+ "\x2e\x26\x71\x7c\x73\x3c\x67\xe8\xcf\xe3\xf9\xb9\x7b\xb9\x98\x0b"
+ "\x9c\xdb\x8c\xbd\x42\x15\x23\xe7\x99\x8e\xfe\xb8\x42\x89\x8f\xf1"
+ "\xb9\x22\x8e\x3f\xa5\x61\x4e\xd4\xc1\xf5\xe6\xf1\xbc\x16\xf5\xf5"
+ "\xb8\x9e\x4d\x45\x3f\xcf\xe1\x7c\xfe\xc4\xeb\x47\xe2\x97\x3e\xc8"
+ "\x9e\x6a\x07\xe3\xd5\x9d\x74\x28\xc5\xc0\x75\x44\x20\xcb\xf4\xcd"
+ "\x70\x7b\xb6\xd8\xc0\x0d\xe9\x87\x2b\x54\x7a\x88\x63\x25\xb2\xcf"
+ "\x23\xde\x6f\x31\x70\x35\x70\xe0\xfa\xf8\x1c\xa7\x48\x6e\x70\x70"
+ "\x0c\x1a\xae\x8f\xe3\xb6\x22\xaf\xc7\xc0\xf7\x9b\xf2\x72\x69\xb5"
+ "\x10\x3c\x7e\xb2\xfe\xb5\x8f\x26\x19\x5b\xef\x04\x15\xa6\x35\x56"
+ "\x07\x78\xdd\x7b\x15\xea\x58\xd9\xcd\xb1\x51\xfb\x0a\xe2\xf6\x31"
+ "\x97\x41\xfe\x1c\xa9\x1f\x36\x34\xac\xd4\x44\x36\xf4\x04\xca\xf5"
+ "\x65\xf3\x9a\x13\xe4\xb6\xb0\xa4\xa9\xa4\x83\xcf\x5e\x42\xe7\x14"
+ "\x96\x20\x8f\x83\xed\x2c\xcc\xbb\x82\xf2\xbb\x19\xd0\x4d\x9e\xe5"
+ "\x93\x18\xc6\x1a\xb3\x83\xcc\x4d\x31\xf1\xaa\x06\xe3\x8f\x6e\xcb"
+ "\x27\x65\xdd\x1b\x3e\xc9\xed\x71\x15\xee\xf3\xd1\x73\x83\xda\x84"
+ "\xeb\x46\x81\x9e\xc8\x57\x39\x9a\xe7\x7d\x85\xbe\x0b\xe5\x35\xf6"
+ "\xad\x59\x07\x4d\xb0\x51\x8a\x48\xfa\xa4\x8c\xf5\x6d\x77\xf2\x27"
+ "\xb9\x3c\x96\xf4\xb8\x9e\xb3\x1b\xe5\x79\x5c\xe7\xb1\x03\xfd\x65"
+ "\xab\xe8\xd7\x87\xcf\xe9\xf1\x8a\x9f\xcb\x36\x64\x34\x5e\x3d\xc5"
+ "\xbb\x84\xe6\x1c\x47\x26\x2f\xc6\xad\x1b\x83\x94\xb2\x73\x1b\x51"
+ "\xe5\x2a\x11\x7c\x7d\x15\xe6\x32\xa3\xf9\x3b\x1b\x85\x1e\x96\x51"
+ "\xe6\xef\xcd\xe0\x97\x44\xe0\xf2\xfa\x39\xd4\x59\xaa\xf2\xe9\xfe"
+ "\xeb\x36\xe4\xeb\xc2\x35\x4d\x98\x4c\xb4\xa5\x94\x2c\x5b\x34\x32"
+ "\x57\x96\xd2\x18\xa4\xc1\xd6\x7d\xae\xd9\x90\xd9\x78\x38\x54\xec"
+ "\x24\x7a\x0d\xf5\xae\x2d\x15\xa1\x4f\x30\x9e\xbb\x34\x11\xfc\x26"
+ "\x74\xf7\xd1\xe2\xf1\xaa\x8d\x8b\xc7\x1b\x36\x21\xee\x33\xa3\xfd"
+ "\x0f\x16\xdb\x63\xe7\xca\x4f\x2e\x59\x52\x9c\xb7\x74\x01\x5f\xd2"
+ "\xc7\xbd\x70\x5d\x72\xe4\x9a\x08\x8f\x7f\x2a\x5e\xc5\xe2\x1c\x5e"
+ "\x7f\x7c\x7d\xa4\xb1\x9f\xbe\xb8\xd2\x58\x03\xd5\xfd\xf6\xef\xe0"
+ "\xb9\x1d\xcf\x81\xf0\x6e\xef\xc7\x25\x6b\x18\x4c\xc2\xe7\x16\x32"
+ "\xc5\xd6\xb7\x70\x7e\xf1\xfc\xc2\xdb\x78\xe7\x2c\x39\x5e\x3d\x9e"
+ "\x98\x7a\x82\xfd\xf5\xa8\xf1\x27\x60\xe2\x7c\x9b\x86\x56\x8a\xa4"
+ "\x7f\x64\xa8\x33\xd3\x4b\xc6\x18\x6b\x5b\x83\xf8\x3b\x36\x84\x37"
+ "\x7c\x5a\xcf\xf2\xe0\x5c\x43\xa6\x5f\xad\x6a\x33\xb1\x1d\x59\x8a"
+ "\x7b\x5e\x63\x90\x6b\x65\x7a\xdc\xa8\x83\x67\xda\x30\xbe\x2f\x29"
+ "\x12\xe5\x0d\x98\xb7\x2d\x29\x18\x6c\x5d\x21\xd2\x57\x84\x7d\x0b"
+ "\xdb\x69\x89\xfb\x42\xbe\x47\x9c\x9f\xdb\xc3\x3c\x1b\x53\x2e\xac"
+ "\xfa\x6c\x09\xf8\xbf\xb0\xaa\xff\x5c\xaf\x9e\xa7\x62\x94\x11\x8f"
+ "\x6b\xc9\xd1\x41\xfd\x46\xdc\x9f\xb8\x15\x8f\x17\x4d\x69\xc2\xbc"
+ "\x0d\xed\x7c\xf9\x38\x15\xfd\xd0\x6c\x83\x8d\x30\x9a\x7e\x81\x7b"
+ "\xfe\x04\x40\x02\xbf\x8b\xe2\xa3\x2b\x4f\xd6\x9a\xa1\x5d\xa0\x65"
+ "\x12\x84\xfa\x23\xb3\x7e\x93\x88\x9f\x49\x24\xc8\x5d\xd5\x44\xf4"
+ "\xe0\xb0\xa1\x66\xb2\x8e\x48\xb1\x5c\xf5\x9d\x31\xb6\x3b\x6e\x9f"
+ "\x9c\xe9\x2c\x2d\x81\x56\x0e\x05\xad\x22\x32\x8e\x5a\x67\xdb\xc3"
+ "\xd7\x95\x91\xf4\xab\x29\xef\x8c\xeb\x8f\xb1\xc9\x25\x8a\xf8\x0c"
+ "\xbb\x36\xc2\x44\xce\x17\xc8\xf4\x7e\xaf\xcf\xc4\xb1\xa0\xd9\x7e"
+ "\xe6\x38\xaf\xc0\xf5\xb3\x43\x48\x03\xbd\x1c\x62\xa3\x89\x94\xdd"
+ "\xf9\x7c\x92\xb6\x19\x1d\xd4\x0f\xdf\x4c\x0c\xdf\xf9\x26\x99\x76"
+ "\x95\x76\x98\xbc\xe6\xdb\xc9\x6b\x0f\xd0\x21\xdc\xc7\xed\x2b\xd4"
+ "\xc9\xb6\x2c\xc3\xa8\x71\x69\x6e\xe7\x57\x64\xd2\xcf\xa1\x9a\x4e"
+ "\xd1\xf3\x77\xd6\x0f\x52\x8e\xcf\x7d\x77\x27\x1f\x6c\xec\x71\x3d"
+ "\x5f\xe2\xa3\xbb\xf6\xe9\xb6\x0c\xc6\xdc\xe7\x37\x82\x37\xa4\xfd"
+ "\x89\xf7\x9f\xf0\xf7\x68\x90\x56\x6b\xe4\x89\x6f\xcf\xf0\x5a\xbc"
+ "\xf0\x30\x1f\x88\x73\x5f\x76\xf0\x19\x97\x41\xfc\x61\x86\x79\x1d"
+ "\x37\xf1\x9e\xe4\x90\x11\xd0\x3f\xce\xb3\xa2\x2f\xec\xa2\x34\x88"
+ "\x93\x29\x6c\xa2\xab\x42\xe7\x44\x6e\x4b\xd7\x19\x8c\x05\x47\x79"
+ "\x2e\x92\xf0\xde\xc2\x4f\x4c\xde\xe0\x69\x8f\x77\xbd\x46\xad\xb0"
+ "\x2b\xbd\xd5\xa7\x3d\x2a\xfe\x69\x98\x5a\xe8\xcf\xd4\xe2\xf8\x7f"
+ "\xca\xbc\x65\x7f\x46\xba\x28\x63\x3a\xf7\x9d\x13\x73\xbc\xe6\xff"
+ "\x43\xfc\x7d\x24\x1e\xe3\x40\x77\xfb\x29\x5a\xba\xe8\x20\xe0\xbc"
+ "\xff\x57\xc0\x92\xb1\xd3\xa6\xd0\x21\xdc\xf7\xb8\x96\xf6\x8f\x7f"
+ "\x71\x63\xce\x24\x78\x36\x59\x1d\x8f\x9b\x34\x8c\xa5\x1c\xe3\x0e"
+ "\x63\xe8\x24\x6e\x17\x9e\x33\xf8\x19\xd7\xf1\x7c\xb5\xae\xf5\xec"
+ "\xb0\x86\x1e\xe7\xb1\x35\x97\xc7\x4d\xa4\xcf\xa9\x39\x27\xc7\xda"
+ "\x1c\xfd\x79\x86\xfe\x9c\xad\x3f\x4f\xd3\x9f\xb3\xf4\xe7\xc9\xfc"
+ "\xac\xc6\xe4\x65\x96\x7e\x7b\xc1\x34\xec\x08\x9e\x6d\x46\x5f\x00"
+ "\x9f\xe1\x56\xc7\x1a\x39\xb6\xeb\x78\x4c\xd2\xf1\xca\xd0\x9f\x0d"
+ "\x7c\xae\xb4\x86\xd6\xfc\x6f\xe1\x53\x15\x83\x4f\x5d\x04\x3e\x64"
+ "\x75\x64\x7d\x13\x7c\x52\xad\xfc\x7d\x8a\xff\x01\x3e\x8c\x0b\xa7"
+ "\xf5\xb8\x8a\xd3\xa3\xf1\x29\xce\x34\xf0\x89\xcb\x6f\xcb\x45\x07"
+ "\xdb\x35\xcb\xbe\x25\x63\x40\x0f\x63\x9b\xa5\xa6\xd7\x88\x57\x58"
+ "\x5c\x7c\xa1\x78\x85\x90\x05\x8c\xdb\xc5\x68\x7f\xf1\x34\xdd\x7e"
+ "\x3b\xa0\xec\xfc\xe2\xbd\x86\x0f\x19\xda\x5a\x57\xa1\xda\xba\x77"
+ "\x3d\xc7\xec\x5b\x49\xdf\x76\x3a\x44\x07\xe6\xdd\xff\xc5\x73\xc3"
+ "\x48\xb8\x85\xc5\xcb\x96\x3d\x77\x9b\xbd\x70\xfe\xe2\x05\xf6\x71"
+ "\xf9\xf6\x65\x05\x8b\x16\x16\x2f\x88\xf6\xab\x48\xd5\xbf\x1b\x24"
+ "\xcf\x8b\xf0\x5c\x4a\xce\xa5\xc1\xff\x52\x4f\x4a\xdf\xbc\x17\x9e"
+ "\x13\xae\xe2\x36\xd6\xb9\x3b\x5f\x53\xdf\x97\xea\x71\xbd\x30\xd9"
+ "\x18\x43\x8c\xf9\x2f\x8f\x21\x48\x9f\x83\x71\xf2\x68\x44\x3a\xe7"
+ "\x2d\x30\xd2\x18\xbe\xae\x9b\x86\x1d\xa7\x17\x92\xb8\xce\xb8\x34"
+ "\x3c\x27\x6a\x61\x37\xf1\xb7\x33\x4c\xd0\x29\x82\xe3\x6f\xf1\x39"
+ "\x4c\x94\x13\xc0\x47\xce\x2b\xe6\xe0\x59\xcd\xd9\x04\xe3\xd8\x82"
+ "\x32\xbb\x90\x66\x66\x1b\x02\xf3\xc0\x0e\x2e\x87\xf4\x2f\x38\x1e"
+ "\x06\xd2\x2d\x7a\x5c\x31\x4e\xfb\x8a\xe3\x55\x20\x2d\x75\x20\x6d"
+ "\xf9\x70\xa4\xd9\x90\x66\x57\xf0\x96\x5f\xc9\x74\xc6\x73\x96\xbe"
+ "\x4e\xc6\x79\x26\xea\xf5\x96\x45\xe2\xcc\xdf\x8e\xb9\xe9\xc6\x0c"
+ "\xfb\x9c\x87\x7e\x30\xe5\xf6\xa7\x96\x2c\x5e\x98\x4c\x92\xec\xe9"
+ "\x18\x8e\x33\x6e\x72\x5c\x77\x9b\xbd\x68\xc1\x82\xa5\xf6\x15\x0b"
+ "\x16\x17\xdb\xe7\xaf\x98\xbf\x32\x99\x16\x2e\x59\xfa\x14\x47\x5b"
+ "\xe0\x6e\x59\x96\xf7\xd4\xc2\xa7\xd9\xf9\x45\xe5\x4e\x8e\xb2\x13"
+ "\xe6\xb0\x6e\xd3\xe3\x93\x1c\xae\x60\x1b\x32\xa9\x31\x07\xf7\x1c"
+ "\xb7\xcb\x86\x6b\x13\x7e\x07\xf0\x6b\xc0\xef\x28\x7e\x47\x3a\x69"
+ "\x75\x08\xd7\x7d\x3d\xae\xe5\xc7\x0c\x7b\x65\x80\x87\x96\xfb\x0d"
+ "\x1e\x82\x7d\xb1\x4f\x8d\x6f\x2b\xec\xad\x21\x29\x3f\xfd\x3c\x55"
+ "\x71\x6e\x80\xa7\x38\xee\x68\x2b\xfb\x76\x2d\xc7\xfb\x5e\xb9\x66"
+ "\xc9\x6b\x26\x49\x4c\xb7\x13\xb4\xea\xf2\x9a\xad\x82\x7d\xcc\x78"
+ "\x3d\xb7\x09\xfc\xd2\xac\xe2\xd4\xac\xa8\x46\xbe\xab\x51\xc7\x01"
+ "\xbd\x0e\xf5\x3c\x4a\x1c\xe6\x6f\xc7\x1c\xd7\x9f\x19\xd6\x09\x5a"
+ "\xf9\x2e\xdf\xf3\x55\xdf\x43\xb5\xea\xdf\x96\x33\x0d\xbc\x73\x4c"
+ "\xd7\xeb\xf0\x80\x16\x65\x3b\x5d\x22\x68\xcc\x9d\x79\xad\xd8\x9a"
+ "\x70\x87\x00\x3e\xa7\xb5\xc4\xc7\xda\x64\x1c\xcc\xb2\x5e\xe8\x88"
+ "\x9b\x6f\xf6\x3a\x64\xfe\x04\x5e\x4b\x9e\x55\x24\x34\xfe\x0e\x95"
+ "\x96\xf8\x6c\x1b\x97\x13\x96\xc6\x1c\x6d\xf3\xf0\x2c\x65\x33\x70"
+ "\xfc\x41\x87\x5d\x87\x19\x64\xda\x76\xd2\xf2\x3f\xa8\x79\xf8\xea"
+ "\x90\xb2\x25\x1c\xe3\x0d\x9f\x4b\xc8\x68\x3a\x9e\x27\x1b\x3a\xc0"
+ "\x47\x0e\x8b\xee\x1f\xe7\x51\xed\x77\x14\xeb\xcf\x0d\x3a\x8e\x09"
+ "\x1c\x13\x05\xf8\x1f\xe1\xbe\x83\xbd\xd2\x80\xfb\xa3\xa0\x4f\xb3"
+ "\xa2\x8f\x43\xfa\xf9\xc2\x6e\xe2\xf7\x47\xf9\x3b\x3b\x78\x77\x54"
+ "\xc5\x1b\x59\xb1\x97\xdb\x3c\xe0\x43\x5b\x9d\x05\xfa\xbd\xcb\x7b"
+ "\xcd\x90\xa5\x06\xef\x39\x96\xcf\x15\x75\x80\x57\x6f\xe8\x1d\xd6"
+ "\x33\x79\x61\xc8\xa9\x9c\x4f\x39\xda\x0d\x7d\x33\xc0\x07\x8e\x60"
+ "\x3c\x5d\x12\xaf\xdf\xf5\xbe\x99\x2f\x5c\xcb\x27\x03\xa7\x7a\xd9"
+ "\x07\x1c\x97\xf5\x5c\xff\xbc\xad\x4f\xe9\xc8\x95\x33\xfa\xe7\x98"
+ "\x3a\x1e\x1c\x07\xde\xc7\xb8\xf5\xca\xfd\x7f\x5d\x6f\xac\x2c\x36"
+ "\xf4\x86\x01\xc7\x9a\x20\x34\xab\x03\xff\xdc\xfb\x73\x79\xaf\x84"
+ "\xc7\x4b\x69\x8f\x00\xce\x88\xb3\xea\x2c\x9c\x56\xbe\x3f\xd7\x47"
+ "\x2b\xc7\xf3\xb7\xe6\xa4\x4d\xeb\x5a\x3e\x7b\x40\x17\xad\x3c\x1c"
+ "\x09\x53\x58\xf6\xe7\x32\x5c\xd6\x47\x6c\x93\xe4\x85\xcd\x1c\x8f"
+ "\x26\x57\x1f\x5f\xa0\x83\x57\x06\x0d\x5c\x41\xc3\xc3\x06\xbe\xfa"
+ "\xb7\xce\x0e\xa3\x9e\xdc\xd9\xe1\x3e\xf6\x09\x6f\x52\xfd\xb9\x5a"
+ "\xea\x1b\xbc\xdb\xdb\xe3\x5a\x35\xc9\x47\x2f\xb8\x75\x19\x6a\x46"
+ "\xf9\xbd\x8d\xa5\xd3\x90\x67\x55\x8e\xee\xd7\x7c\x04\xfd\x7b\x34"
+ "\x82\xf7\xa7\x47\xac\xf3\x1c\x55\x7d\x78\x7b\xd9\x71\x5a\x55\x19"
+ "\x91\xae\xf7\x6d\x63\xce\x71\x5a\x3d\x5d\xad\x99\xec\xb7\xa9\xf2"
+ "\xab\xa4\x8d\x6a\xe0\xc8\xba\x80\xcf\xed\xb1\x8c\x4b\xda\xcb\x3e"
+ "\x5e\x75\xd8\x18\x2f\x00\x6b\x9f\xa4\xf9\x28\x71\x80\xe9\xa4\xe2"
+ "\x7e\x2c\x5f\xac\xe8\xb4\xca\x1f\x45\x7b\x1e\x37\x51\x0f\xd3\x69"
+ "\xc4\x5a\xa1\x8d\x08\x24\x88\xbc\x95\x66\x62\x79\x61\x19\xe7\x3d"
+ "\x42\xf0\x87\xb4\xab\x14\xdd\x56\x67\x18\x74\x33\xfa\x8e\xe9\xe4"
+ "\xa3\x55\xb5\x4c\xdb\xe8\x36\x0e\x3b\x72\xdc\x68\x3b\x68\xca\xb1"
+ "\x4d\xf1\x3c\x4d\x97\x8b\x66\xcf\x68\xf6\x21\x59\x71\x6f\xa3\xf9"
+ "\x07\xd4\xe8\x98\x44\x8a\xb6\xab\x2b\xd1\x0e\x7f\xc4\xbc\xe4\x30"
+ "\xd3\x97\x65\x05\x78\xce\xd1\x63\x70\x1d\x56\xfe\x4c\x2b\xa6\x89"
+ "\xf2\xfd\x73\xa4\x2c\x2f\x97\xb1\x52\x38\x7e\xef\x11\xa6\x11\xeb"
+ "\x45\x96\x25\x96\x01\x96\x27\x45\xa3\xd5\x5d\x11\x34\x6a\x62\xfa"
+ "\xe8\x74\xda\x17\xa3\xcb\x17\xd8\x0b\xa7\x28\x5d\x6c\x4f\x1f\x97"
+ "\x3f\x41\x06\xbc\xb1\xdf\x3d\xf5\x36\x7b\xce\x94\x71\x8e\x82\xf1"
+ "\xb3\xd4\x65\x6a\xce\x0c\xbe\x26\x47\xcf\xeb\xec\x3d\xae\x92\x39"
+ "\xd1\x73\xc3\xb5\x3e\xa5\x3f\x4a\x0a\x7d\x09\x23\xe4\x5c\x84\xe3"
+ "\xcf\x56\x2c\x26\x0a\x03\xef\xcd\x9d\xe8\x53\x4b\x43\x80\xe3\x1d"
+ "\xcf\x76\x10\xc7\x47\xff\xaa\x06\xef\x76\x22\x7d\x44\x11\x7f\x4b"
+ "\xe1\x6f\x42\x4b\x6a\x90\x6b\xed\xa2\x7c\x77\x83\x3f\xa9\xb3\x0d"
+ "\xbf\x5a\x7f\xd2\xc1\xf6\xe9\xd7\x39\x05\xe0\x36\x19\xed\xe2\xb5"
+ "\x1d\xcc\xcb\x02\xb3\x1d\x22\xcc\x34\xca\x73\x70\x4c\x72\xc0\x4e"
+ "\xe4\xb5\x9d\x12\xb4\xff\xf9\x74\x35\x7f\x2d\x01\xff\x2f\xdf\xa8"
+ "\xeb\xb2\x9c\x1e\xd7\x1a\xd8\x7f\xb7\x4a\x5f\x00\xcd\x65\x93\xb1"
+ "\xcc\xb5\x75\xd7\x3f\x88\xf9\x40\xad\x01\x13\xb0\x86\x2a\xff\x07"
+ "\x05\xef\x9b\xfa\xd7\x6a\x1b\x3e\x4c\xb5\x26\xa8\xf8\x90\x90\xf1"
+ "\xb2\x1a\x93\x96\xdb\xef\x2f\x83\x77\x23\xd6\xa6\xf2\xfc\x21\x17"
+ "\xbc\x57\xc6\x79\x8c\x77\x15\x2e\xcd\x57\x61\xd2\x82\xe8\xc7\x54"
+ "\x65\x3f\x77\xb1\xfe\xc4\xdc\x75\xcd\x3e\x63\x5c\x93\xe3\xa1\x89"
+ "\xca\xd4\x7c\x66\x8d\xf4\xfb\x3c\xe3\x32\x93\x8f\x4a\xa6\x5d\x93"
+ "\x26\xe7\x28\x41\xcd\x95\x40\xca\xa7\x79\xcd\x6e\x43\xc7\xf2\xbe"
+ "\xa9\x75\xad\xf0\xf3\x1a\xb1\x35\x24\xfc\xbc\x87\x2a\xc7\x0e\xea"
+ "\x24\x6f\x49\x4f\x99\x57\x7e\xfb\x93\xbf\x41\x12\xd0\xc7\x8d\xb0"
+ "\x1a\x37\x50\xbf\x3f\xf1\xfa\x79\x18\x1f\x12\x3a\x69\x8d\x83\xf1"
+ "\x67\xda\xf0\x5e\x8b\x06\x5a\x79\x79\x9c\x64\xfa\x24\xff\xae\x92"
+ "\x7d\x61\xb8\xad\xd6\x10\xda\x1c\xd9\x2e\x93\xe6\xdb\xec\x42\xbb"
+ "\x4c\xfc\x1d\x8f\x93\x2c\x33\x41\xf6\x51\x82\xbc\x8d\x92\x71\xad"
+ "\xe5\xfc\xbc\xb4\x2a\xb2\x8d\xac\xff\x55\x1b\x4a\xf7\xc7\x6b\xa3"
+ "\x30\x25\xe8\x73\xba\xd2\x4d\xba\xbc\x49\x3c\x59\x7f\x74\x51\xe9"
+ "\x8c\x11\x6b\xd9\x37\xa8\x81\xbf\xa1\x33\x95\xfb\x10\xe3\x67\x25"
+ "\xe3\x19\xaf\xbf\x18\x9e\x82\xe5\xcc\xb5\xae\x2d\x9b\xd7\xe3\x72"
+ "\x8e\x8d\x4f\x6f\xe7\xf4\x0b\xd3\xdb\xf9\x2d\x2e\xcf\x78\xf0\xfe"
+ "\x8e\x35\x84\xb9\x26\xf8\x16\xf3\x35\x77\xbc\x7a\x47\xac\xad\x65"
+ "\xbc\xe2\xbe\x13\x2c\x2f\xba\x0e\x02\x1f\x0a\xc8\x89\x60\x9d\x04"
+ "\xdc\x3c\x86\x3e\xb2\x26\xd8\x13\xa5\x7e\x30\x89\xca\x78\x30\xac"
+ "\x6b\x2b\x79\x9f\x6b\x2a\xea\x8f\xfb\x5e\xe3\xef\x7c\xb8\x1b\x7c"
+ "\xda\xba\xef\x5f\x63\x4d\xa0\x3b\xfc\x89\xdf\x4f\xb6\x3a\x42\x63"
+ "\x99\x86\x80\xe9\x80\x1c\xb7\xf0\x3c\x55\xad\x8d\x94\xc1\xfe\x7f"
+ "\xb5\x4e\xae\x51\x26\x35\xf8\xd4\xbe\x51\x19\xc6\xbf\xaa\x76\x63"
+ "\x6d\x1e\xcf\x73\x7d\xf4\x0f\x15\xab\x37\xf1\xdb\xdb\xc4\x86\x83"
+ "\xb5\x9a\xcb\x2a\xec\xab\xac\xb0\x23\xcb\xce\x6a\x82\xbf\xe9\x70"
+ "\xb0\x76\x80\x4f\x94\xdf\x94\xc1\x27\x28\x5f\x1d\x9f\x07\xca\x3e"
+ "\xba\x30\x0f\x94\xbd\xca\xef\x99\xee\x6a\xae\x52\xd6\x6e\xd8\x29"
+ "\x62\xdd\xb7\xb7\xd9\x4b\x65\xfd\x0e\x55\x37\xd3\x24\x8b\xf7\x8c"
+ "\x66\x80\x2e\x65\x3d\xae\xb5\xa9\x86\x1e\x60\x7e\xb1\x86\xf9\x7b"
+ "\x17\x24\x79\x1a\xef\x60\xff\x14\x97\xa9\x75\xf0\x43\x05\xf2\xbb"
+ "\x99\xae\x12\x8b\xdf\x59\xb0\x9d\xbf\x0f\x1b\x48\xda\x8f\x79\xdb"
+ "\xda\x1c\x1f\xfd\xbb\xb2\x2b\x2c\xfb\xe7\x40\x67\xe7\x6e\x51\x7e"
+ "\xd1\x16\x19\x37\x0a\x32\xcd\xb1\xa2\x58\xae\x91\x96\x06\xbc\x39"
+ "\x6e\x14\xe6\x3b\x6b\xdd\xfd\xe3\x92\x2b\x0b\xba\x42\xc8\xb3\x4d"
+ "\x18\x97\xc6\x74\x83\x76\x6f\x98\xb4\xba\x73\x13\x6c\xc4\x6d\x3e"
+ "\xb7\x6e\x74\xdd\xcb\x37\x92\xf9\xff\xb2\x3d\x49\x45\x37\x51\xda"
+ "\xda\x1f\x98\xe9\x1f\x99\x64\x62\x3a\xf8\x68\x6d\x95\xa2\xdd\xda"
+ "\x36\xa3\x7f\x7c\x54\x96\x25\x75\xe7\xba\xc7\x3a\x66\x87\xc4\x57"
+ "\x6a\x9d\x7b\x2d\xf4\xdf\xe2\x54\xf5\xbe\x64\x5e\xec\x1a\x10\xdb"
+ "\xf3\xf6\x45\xcb\xec\xf9\x4b\x56\x2c\xbe\xfa\xea\xa8\xb9\x92\x59"
+ "\x7d\x8f\xd7\x95\xa2\xc6\x53\x57\x96\x81\x37\xdb\x25\x78\x46\xfb"
+ "\x4b\xce\x8b\x69\x3f\x23\x4f\x77\x77\xcf\xcb\xa0\x81\xfb\x89\x34"
+ "\x63\x62\xc4\xe3\xcd\x34\xe3\xa6\x9b\xf3\x1e\x5c\x30\x3f\x7f\x65"
+ "\x44\xea\x2d\x91\xeb\x86\x15\xdb\x50\x77\xe2\xe8\xbb\xa0\x2b\x12"
+ "\x66\xad\xe6\xb1\x65\xdd\x2d\xa5\x21\xf1\x77\xe8\x6b\x8e\x5b\x93"
+ "\xd7\x52\x1c\xa2\x16\xe8\x32\xf1\x6d\xd6\xe1\xc3\xd4\x19\x4f\xd8"
+ "\x53\xe0\x2d\x2b\xda\xee\x87\x5d\x77\x96\xd7\x67\x50\xee\x91\xd6"
+ "\x2a\x8e\xed\x7c\xb0\x4b\xd9\x18\xeb\xd2\x90\x7e\x29\xae\x53\x70"
+ "\x1d\x8a\xeb\x9d\xf6\xc5\x98\xf7\xb0\x4f\xfd\x72\xf6\xa9\x5f\x77"
+ "\x9d\xf4\x0b\x0a\x94\x11\xfb\x06\x9d\x20\x57\x33\xdb\x20\x3e\x5a"
+ "\x57\xc2\xeb\xe0\x9c\x17\x65\x2e\xb7\x3f\x43\x19\x7c\x15\x72\x6f"
+ "\x70\x5d\x9a\x28\x3f\xd8\x25\xb6\xe7\xf2\x77\xdd\xc6\x22\x7d\x65"
+ "\x62\xc2\xe7\x94\x68\xb3\x24\xf5\xb8\xd6\x39\x40\x7f\xf9\x2d\x86"
+ "\xc1\xbe\x81\x2b\xbf\x3d\x1c\x63\x1f\x0e\xd8\x86\x1b\x48\xda\xb7"
+ "\xba\x3d\xb7\x53\x8e\x0b\xeb\x9a\x23\x6c\x3a\x1e\x2f\x93\x95\x7d"
+ "\x22\xc2\xca\x3e\x5d\xd7\x65\xc8\x01\xee\x83\x06\x9f\x46\xc5\xd9"
+ "\x5b\x5c\xbc\x60\xe9\x82\x7c\xfb\xb8\x65\xc9\x14\x11\x65\xaf\x60"
+ "\xc1\x62\xfb\xd2\x05\xcf\xbf\xb0\x60\x99\x8c\x90\xc7\x6f\xa3\xc6"
+ "\xfc\x34\x91\xfc\x51\x7f\x5c\x51\xfb\x68\xa6\xef\xfa\xc7\x39\x36"
+ "\x9b\xd8\xf0\x51\x25\xfb\xf0\x48\x1b\x25\xc5\x64\x8b\x9e\x6f\xbc"
+ "\xa8\x7f\xaf\xe1\xe0\x31\x35\xd7\x79\x51\xc6\x36\x44\xba\x65\x20"
+ "\x0e\xfc\xfa\xfd\xa0\xa5\x49\xa7\xdb\x99\x1e\xd7\xfa\x7a\x83\x6e"
+ "\x3e\x7a\x29\x53\xb7\xa5\xba\xa4\xfe\xc0\x18\x0b\xfd\x17\x35\xbe"
+ "\xaa\x6f\xdf\xae\xe7\xf8\xfd\x89\x72\x3d\x39\xe9\xa0\x8f\xeb\x62"
+ "\x98\x27\x50\x1e\xfd\x73\x0c\x7a\x93\xf5\x9b\xdb\x80\x87\x3a\x6b"
+ "\xb9\x3e\x7d\x1e\x74\x45\x27\xbd\x28\xcf\xe5\x68\xee\x83\x3e\xd6"
+ "\x29\x1c\x4b\x44\x2b\x07\x1c\xb9\x47\xfb\x52\xa6\x5c\x87\xe5\x6f"
+ "\x11\x00\x16\xaf\x03\x43\xcf\xf9\xf9\x3b\xc9\x9c\xa6\x62\xc4\xad"
+ "\x97\xe7\x22\x50\x57\x5b\x8f\xeb\xc5\xa2\x81\x33\x0e\x2f\xf1\x37"
+ "\xb8\x2d\x0c\xd7\x47\x2f\x4e\x62\x78\x2a\x06\xde\x8b\x5b\x7c\xe4"
+ "\xaa\x1e\xb0\x9f\x5e\x6c\x8b\x98\x97\x01\x1f\x85\x67\x00\xb8\xc8"
+ "\x78\xab\xca\xe7\x54\xb6\x9b\xf5\xe7\x16\xbd\xed\x46\x7b\x00\x0f"
+ "\xfa\x6f\x9d\xdb\xf0\x9b\xf0\xe9\xed\x66\xfc\x18\xf7\x48\x9c\x75"
+ "\x7c\x53\x19\xdf\x1e\xd7\x4b\x63\x22\x64\x9b\xd7\x65\x86\x20\x2d"
+ "\x63\xc0\x97\x7d\xbd\x23\x56\x6f\x2c\x59\x6c\x2f\x5c\xb4\xf8\xd9"
+ "\xbc\x15\xf3\x9f\x5d\x90\xf7\x42\xd1\x78\xfb\x0b\x8b\x9f\x2c\x5c"
+ "\xf2\xd4\xb3\xcc\x35\xcb\x8a\x5f\x78\xea\x59\x3b\x6b\x96\xbc\x69"
+ "\x33\x66\xe4\xdd\xf5\xf0\x43\x8f\x24\xd3\x5d\xf3\x91\x86\x99\xff"
+ "\x8c\x8c\xf1\xea\xd5\x83\xd3\xa7\xfe\x38\x6f\xea\xec\x87\x67\xcd"
+ "\x91\x87\x5f\xfa\xdf\x4f\x5b\x1c\x3f\x43\x14\x1f\xc2\x16\x39\xd8"
+ "\x86\xfe\x1d\x72\x9c\xca\xf7\xa9\xb8\xe9\x2f\xb5\x47\xc7\x4d\x7f"
+ "\x09\xda\xfc\x65\x1b\x7e\x93\x88\xdc\x05\xf8\xe1\x4d\x79\x9d\xe2"
+ "\xaf\xa4\xc7\x7a\x5c\x2f\xa7\x0e\xf0\x57\xb9\x3c\x53\xc6\xfe\x4a"
+ "\x6a\x7d\xf6\x65\xe8\xff\xf5\x19\x91\xef\x06\xe6\x93\x2f\x67\xf7"
+ "\xcf\x27\xfb\x75\xca\xcb\xc5\xc6\xdc\x12\x69\xed\x98\x57\x26\xf1"
+ "\xbc\x52\xad\x27\x95\xff\x5a\xf2\xd4\xa0\xf2\x6d\x21\x63\x5e\xc9"
+ "\xb2\x2d\xf7\xa4\xe4\xfc\xe3\xe5\xfa\x48\x19\x97\x6b\xfa\xba\x8c"
+ "\x73\x39\xb9\x7e\x97\x62\x32\xf3\x9a\x36\xec\xe3\x36\xd8\x0a\x18"
+ "\xbf\x7a\x84\x18\x6e\x32\xeb\x38\xf9\x79\x8d\x9b\xed\x66\x9d\x9f"
+ "\x46\x74\x92\xfb\x06\xe1\x7a\x69\x9a\x9a\x53\xbe\xf4\x02\xeb\x75"
+ "\xb1\x6e\xf4\x5d\xec\x5b\xc4\x73\xa7\x1e\x97\x7b\xec\x00\xcf\x96"
+ "\xef\x63\x5e\x18\x98\xcb\xba\xa3\xf4\x7f\xb7\xfc\x86\xa1\x7b\x8e"
+ "\x11\xf7\xa1\xf8\x6a\x32\x99\xaf\xae\xa4\x2d\x26\x51\xe6\x23\xb7"
+ "\x9c\xb7\x32\x3d\x7d\xf4\xb2\x1d\x79\xcd\x03\xf4\x73\xbb\xfb\xe9"
+ "\xa7\xaf\xb3\x18\x6b\x2c\x0a\xef\xf2\x5f\x0f\x46\xab\xf8\x74\x72"
+ "\xb7\x7d\x2d\x9d\x5c\x34\x84\x65\xd2\xa0\xd7\xf9\xb4\x2a\x1f\x73"
+ "\x3e\xad\xca\x9f\x8b\xa0\xd5\x1b\xe7\xd3\xaa\x3c\x27\x62\x5f\x49"
+ "\x5f\x47\x29\xff\x35\xd3\x8c\x79\x0c\xed\x36\x83\xcf\xde\x18\xa0"
+ "\x5f\x79\xd9\xf9\xf4\x2b\xdf\x12\x9f\x7e\xe5\x19\xd7\x44\xc3\xd9"
+ "\x1e\x6f\xdc\x18\xb1\xd6\xa4\x9f\x0b\xdb\x90\xd4\x34\x46\xce\x49"
+ "\x83\xaf\x9b\xb4\x82\xd7\x5d\xf8\xe1\xca\xf3\x88\x01\x5b\x5c\x04"
+ "\x55\x5b\x37\x58\x9a\x30\xe7\xe5\x75\xa5\x0b\x8c\x45\xc7\x8c\x35"
+ "\x0f\xdc\xb7\xf1\xdc\x99\xbf\x0d\xc5\xe9\x4c\x4f\xcc\xb9\xfc\xe0"
+ "\xf7\x36\x65\x97\x6e\xc8\xed\x5f\x73\xb9\xf6\xe1\x9c\xc4\xb5\x64"
+ "\x6f\xac\xbe\x89\xd3\x8b\xd0\x0e\xe9\xb7\xc8\xbe\x5b\x83\xc1\xcc"
+ "\x0b\x67\xd1\x20\x70\xfb\xf9\x7f\xb0\xb3\xd1\x31\xfa\xa8\x60\xfe"
+ "\xe2\xfc\x25\x0b\x17\x7e\xbd\x2a\x8a\xdc\x57\xab\x74\x69\xfc\xcd"
+ "\xad\xa1\x3d\xeb\x9e\x59\xd5\xe3\x7a\x85\xed\xff\x79\x6a\xdc\x7c"
+ "\x05\xfa\xef\x99\xc9\xca\x96\x7c\xac\x43\x9d\x07\x7f\x65\x63\x84"
+ "\x7e\x06\x8f\xbc\x52\x25\x5c\x1b\x8e\x0e\xf4\xf1\x2b\xf9\xe7\xf7"
+ "\xf1\x2b\x8e\xf8\x7d\xfc\x4a\xb5\xb6\x9c\xcf\xe3\xbc\x82\xf9\xcf"
+ "\x52\x69\x6b\xf2\x33\xfb\x41\x60\xce\xdc\x81\xf9\x72\xd7\xec\x95"
+ "\x9e\x3b\xf2\x56\x26\xc8\xbd\x62\xfe\x06\x4b\xe8\x9c\x68\x67\x5f"
+ "\x04\xde\x1f\xe3\x6f\xb0\xf0\xb7\x97\xf8\x5b\xa1\x32\x0f\xee\x2b"
+ "\x4e\x90\x9c\x3b\xe2\xbd\xbd\xe6\x84\xfc\x2e\x37\x6c\x85\x57\x82"
+ "\x86\x6d\x6d\x5d\x6b\x97\xe7\xd4\x37\xab\xfe\x68\xe3\xbe\xe0\xfa"
+ "\xf2\x56\x7a\x54\x1d\xe7\xf8\xdb\x6a\x64\x55\x36\xc4\xc6\x8c\x0b"
+ "\xae\xdd\x27\x75\x7a\x06\xff\x36\x41\xd9\xb0\xfe\xbd\x4a\xfd\xfb"
+ "\xc7\x2c\xfb\xec\x47\x0a\xb8\xee\x58\x3f\x54\xe5\x3b\xb4\xb1\xd6"
+ "\xf0\xc9\xaa\x90\x3e\x50\x64\x65\xfd\xc9\xf3\x9c\x13\xb4\x91\xd7"
+ "\x30\x30\x5e\x6e\x6c\x8a\xdc\xe3\xb4\xaf\x5a\x3b\xf4\x14\x6d\x7c"
+ "\xee\x02\xfb\xa6\x29\x03\x3e\xb0\x65\xc3\x7a\x5c\x9b\xcc\xfd\x3e"
+ "\x62\xae\xb2\x61\x35\x11\xb8\xe1\x9d\x3d\xc2\x57\xd1\xcf\xe3\x31"
+ "\xcf\x1f\x6b\xd4\x37\x58\xfd\x27\x68\xd3\x74\xa4\x61\x3e\xb1\x49"
+ "\x9e\x79\x58\x11\xa2\x31\x45\xb7\xf3\xb7\x7b\x36\x3d\xa7\xcf\x43"
+ "\x31\x16\x30\x3e\x9b\x86\x33\x5c\x1f\xf2\x09\xb9\x1f\xb0\xc9\xd1"
+ "\x8f\x73\x44\x7d\x06\x6c\x45\x93\x4d\xd5\x06\x5e\x28\x37\x47\xee"
+ "\xb5\x96\x44\xef\xef\x39\x16\x2e\xca\x2b\x2a\x58\x99\xb7\x68\xf1"
+ "\xa2\xe2\x64\x72\xcc\x7f\x61\xd1\x04\x24\xd9\x9f\x2a\x58\x54\x94"
+ "\xb7\x48\x46\x2d\x96\x01\x91\x8b\x57\x16\xf1\xde\xc7\x79\x7b\xf0"
+ "\xa9\xd2\x96\x37\x6d\xda\xa7\xc6\xfb\xcd\x29\x06\x9f\xca\x6f\x8e"
+ "\x8b\x5c\x1a\xf0\xbd\x92\xdf\x26\x4e\x3c\x41\x9b\x7f\xc8\x3c\xac"
+ "\xe2\xfc\x54\xe4\x28\xfb\x62\xf3\xb4\xf3\x7d\xb2\x36\xe7\x1a\x3e"
+ "\x59\xe0\xef\x54\x96\xf5\x08\x58\xe0\xff\xcd\x8e\x38\x65\x36\xf6"
+ "\xfb\x77\xea\xdf\x3b\xe7\xbe\x92\x71\xef\x5f\x63\x7d\xbb\xe9\x13"
+ "\xaf\x63\x3a\xc7\xee\xd5\xe5\x6a\xf3\x81\x08\x7c\xa5\x2f\x2f\xc3"
+ "\xe2\xf3\x52\x13\x82\x91\xbe\x6c\x15\x53\x30\xf6\xda\x8c\x7a\xec"
+ "\xab\x4d\xd0\x77\x15\x97\x06\x4c\x9e\x44\xe9\x87\x8c\x72\x3d\xae"
+ "\x0a\x8b\xe1\x47\xe3\xeb\x6f\x57\xc5\x98\x58\x1c\x81\xfb\xd5\x48"
+ "\x9f\x34\xe0\x27\xb8\x99\xfd\x3c\x73\x90\x86\xf1\xbf\x62\x57\x64"
+ "\x5a\x64\x3f\xdd\x39\x7d\x06\x0c\xe8\x65\x0b\xd0\x49\x53\xe7\x17"
+ "\x16\xb2\x0e\x9a\xbf\xa0\xf0\x85\xa5\x4b\x96\xe9\x5d\x77\xe7\x42"
+ "\x0e\x47\x2d\xb3\xdc\xa6\xbf\xb1\x2f\x5e\xb0\x20\x5f\x25\xe9\x1d"
+ "\x19\xbd\x67\xa5\xfc\x18\x2a\x30\xff\xdf\xe8\x1b\xb0\x15\x2b\x6d"
+ "\xc2\x54\x31\x17\xbf\xa7\xa5\xfe\x91\xfd\x5a\xd1\x1e\x3d\x47\xab"
+ "\x08\x18\xb2\x2f\xfb\xd9\x99\x2b\xbf\x89\xdc\x2d\xe4\x1e\x0f\xfa"
+ "\xf5\xd5\x7b\xd1\xce\x21\x98\x3f\x66\xf3\xdc\x64\x00\x4e\xe5\xf8"
+ "\x7e\x7a\xaf\x7b\xac\x6d\x9d\xf2\x99\x30\x43\x37\x98\x39\xb6\x04"
+ "\xde\x63\xfe\xbf\x71\x8e\xd2\x93\x95\xb9\xfd\x7b\x2f\xa6\x44\xcc"
+ "\x37\x2b\x0b\x30\xf7\xa8\x3b\x5f\xbe\x2b\xcb\xce\x97\x7b\xf6\xb5"
+ "\xac\xac\x32\x68\x6c\xf0\x82\xe2\xbf\x57\x6f\x31\xd6\x8c\x6b\xf4"
+ "\x6f\x23\xf0\x3d\x97\xe5\x79\x85\x18\x31\xfc\x0e\xf6\x6b\x38\x4e"
+ "\xaf\x9a\x15\x4f\x55\xfa\x22\x7c\x03\x53\x3b\xe9\x55\x52\x7d\x5b"
+ "\x19\x34\xe4\xcf\x47\x95\xd2\x96\x63\x18\x6a\x5c\xaf\x58\xa3\xf8"
+ "\xeb\xd5\x31\x06\x6d\x79\x0e\x8f\xe7\xf1\x03\x76\x50\x45\xb3\xf4"
+ "\x17\x51\xb1\x35\xfa\xb8\xfd\x80\xb3\xd7\x80\x83\xbc\x68\xbf\xc5"
+ "\x6f\xd0\xca\xc8\x13\xc9\x13\x53\xe7\x17\x61\x82\xbd\x68\xe1\xc2"
+ "\x05\x4b\x97\x19\xf1\xc6\xd3\x97\x14\xe6\xab\xf8\xe2\xb7\xa1\xfb"
+ "\x57\x40\x86\xa7\x70\x88\x72\xa4\xaa\xdb\x18\x7b\x77\x3c\xaf\x89"
+ "\x48\xff\x51\x39\xe7\xda\xba\x76\xa7\x3e\xff\x3a\x4e\xaf\xa7\x29"
+ "\xff\xab\xd7\xca\x95\x6d\x7b\xc9\xcf\x81\x53\x97\x61\xdb\xf2\x5a"
+ "\x6b\x37\x7d\x97\xe3\x2a\xca\x33\x05\x3b\xb6\x8a\x76\x5e\x5b\xed"
+ "\x71\xbd\x96\x6a\x7c\x93\x8e\xed\xa6\x4d\x5b\x55\x2c\x6d\xcf\x62"
+ "\xf6\x15\xd9\xfa\x96\x56\xde\x70\x44\x24\xd7\x11\xec\xb3\x14\x96"
+ "\x89\xe1\x5d\xec\xc3\xcb\x31\xb0\x5e\x9b\xcb\x76\x1d\xeb\x32\xfe"
+ "\x6e\x43\x3b\xbd\x36\x1e\x3a\x1a\xb0\xb6\xee\xf2\x27\x35\x1c\x59"
+ "\xbf\x8a\x2c\x5c\x07\xf4\xb5\xaf\xa9\x96\x69\xfb\x9a\xe3\x63\xe8"
+ "\x32\x5d\x67\xfb\xb8\x1e\x1f\xbd\x36\x4d\xcd\x07\x1b\xda\x85\xc5"
+ "\x63\x63\x5d\xa8\xce\x8b\xbe\xb6\x57\x94\x23\xcd\x5d\x97\x0d\x3a"
+ "\xf2\x37\x0f\xb3\xd5\xf7\xfe\x5e\x6b\x52\xf9\x77\xbb\x67\x73\x1c"
+ "\xa7\xf2\xdd\x6e\xa4\x8f\x41\xba\x4f\xa5\xbf\x93\x3d\x3b\x1c\xe4"
+ "\x79\xf2\x55\xfc\xed\x4a\xd4\x89\xf6\x0f\xaf\x52\x7c\xbf\x7b\xc5"
+ "\xf7\xca\xc8\xc1\xdf\xbb\x54\xb1\xb0\x3e\x71\x03\x8e\x83\xbf\x2b"
+ "\x89\xfc\x98\x3b\xbd\xda\x05\x78\x0e\xdd\x9f\x1c\x7c\xf7\xfa\xab"
+ "\xea\x9c\xc0\xab\xc7\x98\x9e\xc0\xd1\xaf\xaf\x05\x63\xfc\x79\x1d"
+ "\xfa\xef\x4a\x7d\x5e\xfd\x7a\x8e\x51\x07\xc6\x52\x3f\x6c\xf0\xa3"
+ "\x6c\x87\x83\x06\x87\xf1\x6b\xae\x90\xfb\xf2\x3e\x8c\x21\x56\xc1"
+ "\x7e\x70\x03\xdf\xf0\x7b\xdd\x6d\x8c\xab\x5c\xb7\x4e\x07\x3e\xdf"
+ "\x62\xe1\x35\x43\xbd\x2e\xfe\x36\x47\x82\x01\x13\xcf\x87\xb5\x73"
+ "\x27\x6b\x01\xd3\x02\x1b\xc1\xaf\x7f\xbb\xad\xb9\xe2\x0c\xfb\x4c"
+ "\xfa\x60\x03\x5c\x25\xf2\x42\xa9\xbc\x9f\x35\xdc\xf8\x36\x5e\xcd"
+ "\x19\xa6\xfd\xeb\x81\x81\x7d\x2a\x94\x47\x5f\x42\xb6\xca\xda\x69"
+ "\xcb\x70\xae\x97\xe5\x8a\xf9\xa2\x17\xfd\x8c\xbe\xb6\x88\x73\x27"
+ "\xeb\xed\x8b\x69\xf8\x09\xda\x32\x91\xfb\x9b\xf7\x96\xd9\x97\x11"
+ "\x69\x56\x8e\xe5\x7f\x9c\xb6\x5c\xc9\x7d\xcd\xb8\xa0\x8f\xda\x42"
+ "\x3d\xb9\xf7\xf0\x39\x6e\xd6\xbf\x6b\x4a\x60\xbf\x2f\x64\xbd\xf4"
+ "\xc6\x5b\xbc\x1e\xc0\xdf\x60\xe2\x7b\x67\xbe\xd0\x24\xaf\xac\x62"
+ "\x5e\x79\xe3\xad\x35\x1d\x42\xfb\xca\x45\xe2\x70\x80\xe8\x2b\x13"
+ "\x85\x82\xa6\x04\xc6\xdb\xe4\x3c\xc9\x67\xcd\x6b\xc9\xeb\x70\xb3"
+ "\x5f\x9c\x65\xf3\x2a\x4a\xe5\x73\xfa\xfc\x7d\xa1\xd6\x00\x7f\xff"
+ "\xb9\x9a\x7e\x1f\xda\x42\x9e\xe5\x1c\x73\x65\x6b\xf6\x7f\x38\xb6"
+ "\xf0\x7e\x5d\x12\xee\x93\xec\x3f\xe6\xba\xb6\xf8\xfe\xe3\xe8\x1f"
+ "\xe9\x3f\x3c\x7f\x24\xfb\xa3\xf2\xd9\xdf\x9c\xfb\x7b\x6a\xce\xfa"
+ "\x3d\x39\xdb\x85\xc6\x73\xc4\xd2\xe7\xb8\x0e\x37\x60\xd5\xf2\x99"
+ "\xf6\x54\xad\xdb\x96\xac\xbe\x9b\xcb\xbe\x91\x7e\xf2\x2c\xfe\x90"
+ "\x71\x7c\x7e\xe7\x19\xb2\x78\x16\x7f\x22\xef\xd5\xdc\xed\x64\xad"
+ "\x37\xbf\x8d\xed\xd3\x10\x9f\xe7\xe7\xfd\x4d\xcc\x57\xb4\x0a\xc6"
+ "\x31\xac\xf0\x06\xbd\xcc\x46\x79\xd8\xaf\x46\xf9\x49\x5c\x7e\x07"
+ "\xd3\x03\x38\xb5\xcc\x51\x34\x69\xc6\x2c\x5f\xe1\x0c\xfa\xe4\x46"
+ "\xd2\x67\x4b\x25\xd3\x87\xe3\xc0\x6a\xe8\x2f\xe0\x96\x05\x1a\x68"
+ "\x46\x1d\xc0\xd9\xa2\xaf\x07\x5b\x36\x9f\xa1\x14\xcf\x62\xfe\xbe"
+ "\xdc\x1b\x67\xad\x39\x66\x8b\x76\xee\x54\x7d\xc5\x59\x32\x73\xbf"
+ "\xf1\x1e\x50\x85\x7c\x2f\x69\xde\xc6\x7d\x06\x9e\xcc\xc2\x6f\x1a"
+ "\x7e\xd9\xcc\x77\xb8\xce\x40\x7f\xb9\x81\x43\x11\xfa\xaa\x96\xaf"
+ "\xba\x8c\xf1\x77\xc8\x0c\x5f\x81\x81\x74\xc8\x51\x88\xbf\xff\x2a"
+ "\xd7\xbb\xde\x28\xd2\x20\x47\xbc\x1e\xb4\xf3\x35\x4a\xd1\x5c\xaf"
+ "\x16\xed\x80\xde\xac\x7e\x4d\x9e\x75\x4e\xe5\x35\xd2\x6d\xf2\x7b"
+ "\x1d\x5b\xfb\xf7\x3f\x37\x8c\xe2\xf3\xa0\x6f\xd4\x9a\x78\x0d\xc9"
+ "\xdd\xd0\xa1\xf3\x39\xe7\x81\xfe\xb7\xe9\xf2\xf0\xba\xd4\x0b\xac"
+ "\x47\x06\x9b\x9b\xc0\x2e\x6e\x16\xdb\x73\x89\xf7\x92\x52\xd6\x0a"
+ "\x7f\x4a\xbb\x55\xb4\x06\x9a\xe5\x39\xe0\xd6\x40\x58\xee\x25\xe1"
+ "\x7d\xc2\xac\x80\xdf\x0a\x3b\xfa\x08\xd3\xce\x48\xe7\x7d\x28\x5e"
+ "\xa3\x9b\x15\x10\xfe\xd9\x2b\xad\xfc\x7d\xcd\x31\x72\x1f\x42\x4f"
+ "\x6f\xb5\x61\x0e\xb2\xd2\x6f\x45\xdb\x43\xfd\xb0\xba\x73\x13\x59"
+ "\xde\x90\x37\xad\x3f\x6f\x77\xae\xd9\xeb\x50\x75\x46\xa4\x0d\x99"
+ "\xed\x40\x59\xee\x2b\x3d\x4d\xd9\xdf\x3f\x75\xf4\xcf\x4f\xf9\x2c"
+ "\x44\x37\xc6\xe0\x65\xb9\x09\x5a\x77\xae\x29\x0c\xd8\xe0\xfd\x54"
+ "\xf9\x9d\xcf\x90\x5f\xff\x6e\x16\x7f\xeb\xbb\x8d\xc4\xa6\xa1\x76"
+ "\xe4\x33\x33\x5c\x8e\x2f\xc1\xdf\x1b\x11\xc3\x2d\x83\x7c\x4b\xfa"
+ "\x74\x9b\xa7\xf4\x51\xf0\x53\x55\x19\xcb\x73\xd8\xf2\x21\xd9\x9f"
+ "\x61\x7b\xe8\xa7\x5f\x31\x3d\xc3\x90\xb1\x70\xd2\x87\x34\xa1\x83"
+ "\x12\x4a\xc1\xb7\x6a\x3d\xab\xea\x5b\x5e\xc8\xa0\x53\x13\xb0\x69"
+ "\xab\x52\x98\x6f\xac\x5d\xec\x77\xf7\xa1\x3c\xb7\xa1\x25\xff\xe3"
+ "\x88\x37\xd8\x41\xcd\x65\x7f\xa6\xe6\x90\xb7\xec\xc0\x19\xbf\x59"
+ "\xf9\xbc\x99\x01\xb7\xea\x06\x7e\xe7\x04\xaf\xe6\x85\x6b\x69\xb0"
+ "\x7d\x06\x9e\x6b\x43\x5f\xff\x4d\xcd\x3b\xab\xca\x8c\x39\xf6\xd7"
+ "\xb4\xa1\x8d\x63\x72\x08\x61\x23\x6d\xc3\x67\xbc\x7f\xe5\x14\x3d"
+ "\xe9\x34\x61\x15\xaf\xef\x55\xd5\x63\xbe\x93\xa5\xc3\x3d\xad\xc3"
+ "\x6d\xbb\x10\x5c\xe6\x99\xe6\x2a\xb9\xc7\x85\x36\x7d\xe6\x09\x03"
+ "\x76\x38\xf9\xf7\x6c\xff\x38\x9d\x5f\xf1\xfa\xef\xb6\x2b\x51\x8f"
+ "\xa7\x35\x74\x84\x38\xb6\xcf\x4e\x0d\x63\xed\x69\x1b\xe9\xfe\x7d"
+ "\xce\x53\xf4\x66\x92\x26\xd2\x53\x31\xf7\xe7\xbd\x1d\x27\xeb\x38"
+ "\x5e\x57\x28\x0d\xd3\x50\x6f\xb1\x8f\x38\x1e\x05\x60\x5c\xfa\x29"
+ "\xef\xa3\x41\x4f\x84\x85\xcd\xf4\xd1\x39\x58\x0d\xd0\x9d\x32\x3e"
+ "\xc5\xba\x6f\x6f\x1b\xb1\x96\xee\x10\x26\xab\xf4\x0f\xd5\xca\xbf"
+ "\x6c\x43\xdf\xa6\x4b\x7c\x36\x34\x04\x23\x7c\x09\x13\x51\xd7\x26"
+ "\xf6\x25\x14\x96\x86\x03\xd5\x72\x0d\xf3\x43\xe8\xf0\x37\x1b\x7c"
+ "\xf4\x53\x79\x1e\x61\x23\x9f\x17\x91\x3a\x76\xdb\x38\x7f\xd2\xa7"
+ "\xf2\xdb\x49\x7c\x3e\x56\x5b\x1e\xae\xaf\xf8\x27\xe9\x6b\x19\xdb"
+ "\x86\xb4\x76\xf5\x78\x84\xfb\xd3\x5a\x3e\x1b\xa9\xc3\xb6\x02\xf6"
+ "\x9f\x44\xf9\xa7\x98\x63\x6d\x53\xf1\x4c\xdd\x7c\xff\xa6\x9f\xdf"
+ "\x87\xfa\xd2\x09\xf7\x85\xd5\xbd\xbc\xaf\xf0\xa6\x4d\xb8\xae\xf2"
+ "\x74\x5b\x3e\xad\x7d\xc8\xc6\xf6\xd9\xb6\x4c\x5f\xc2\xa1\xb1\xfa"
+ "\x9a\xa2\x8c\xb5\x31\xd8\x7c\x4b\x6c\xb7\x25\x7b\x01\x04\x73\xe3"
+ "\xb4\x4e\xaa\xde\xdd\xeb\x22\x53\x1f\xec\xca\x5e\x13\xa5\x42\xbe"
+ "\x52\x36\x8f\xa6\x0c\xbc\x1b\xdd\x49\xdb\x36\x85\x4c\x94\x86\x5f"
+ "\xaa\xff\xdb\x05\x49\x80\x9b\xc5\xeb\xad\x2d\x67\x78\xbd\x6c\xdb"
+ "\x49\x69\xf7\x6d\xa3\xb1\x1a\xe0\xf1\xde\x51\xc5\x68\x1a\xcb\x6b"
+ "\x9e\x48\x4b\xcf\x0b\xab\x3d\x54\x63\x5d\x63\xdd\x68\x1a\x1f\x5d"
+ "\xef\xb6\x62\xb5\x26\x5a\x2d\xf7\x55\x56\xf8\xe9\x3b\x98\xa7\x1d"
+ "\x3f\x41\xdb\x0b\x84\x2b\x51\x88\x6f\xdb\x4c\xca\xcf\x61\xfb\x03"
+ "\xd6\x2a\xc5\x77\x72\xcf\x10\xfc\xc6\x7b\xb2\xfa\xfe\x54\x82\x8c"
+ "\x31\x92\x7c\xb0\x92\xbf\x6d\x1d\xb1\xe6\x9c\x2a\xf1\xd0\xe3\x02"
+ "\x84\xd7\x5d\x3f\x8f\x61\x30\x3e\x79\xf3\xd5\xde\x16\xc7\x0c\x00"
+ "\x8d\xe5\x99\xfd\x8d\xdb\x28\xe5\x95\x6d\x94\xda\xb2\x90\xdb\xb5"
+ "\x5d\x95\x31\x99\x89\xf1\xd5\xdc\x2c\x67\xe0\x09\xe0\xcd\xf5\x31"
+ "\x6f\xb4\x86\x4e\x7b\x9c\xc5\x42\xf3\x3c\xc3\x76\xed\xf6\x8f\x3d"
+ "\x4b\xf7\xd2\xec\xf6\x90\x3a\xdf\x3a\x97\xfc\x35\x80\x57\x33\x9a"
+ "\x52\x01\xab\xc5\x5b\x48\xbc\xf7\x71\x8d\x67\xe9\x3e\x86\xfd\x39"
+ "\x8f\x05\x9b\x40\x1f\x35\x26\x54\x6f\xf1\x06\xdb\xa8\x05\xf2\x3d"
+ "\xab\x48\x84\x19\xce\x09\xaa\xfe\x96\x6c\xef\x76\x9b\x3d\x4f\xc5"
+ "\x75\x90\x6d\xed\xdf\x33\xd4\xdb\xe1\x3d\xc3\xf0\xaa\xc7\x7b\xe7"
+ "\xc1\x5e\xd4\xdb\x64\xd0\x5a\xf1\x57\xf5\x22\xcf\xd2\x5d\xc4\xfd"
+ "\xc3\xf9\xf1\x9c\xeb\x85\x15\x93\x77\x32\xba\x5f\x38\x0f\xde\x95"
+ "\x03\xee\xad\x03\xfb\xde\xbc\x1f\x3b\x90\xa7\x7a\x1b\x9f\x6d\xdb"
+ "\xd6\xbc\x1d\x34\x52\xfb\x04\xdb\xcf\x32\xae\x3e\xda\x1e\xf0\x16"
+ "\xff\x39\xbe\x7f\x2b\x64\x1f\x7c\xbf\xb6\x55\xee\xff\x55\x7f\x31"
+ "\x2b\xa4\x09\xa5\xcf\x76\x54\x69\xd0\x03\x3e\x5c\x59\x17\x48\x7d"
+ "\x72\x23\xfb\x14\xed\x78\xd3\x9a\xa0\xfa\x97\xdb\xc2\xf6\x4a\xbc"
+ "\x3e\x8e\xd8\x9b\x4c\x65\x5c\x8d\x3e\xe6\xef\x42\x6a\xbc\xbf\xcc"
+ "\xbe\xfb\x7d\x36\x52\xfc\x27\x2a\x01\xb7\x5c\xc9\xd1\xfe\x4c\x3d"
+ "\x56\x42\x66\x77\xd2\x87\x29\x7c\xd6\xd2\xf0\x33\x86\xfc\x5a\xf2"
+ "\x94\x6f\xb8\x8d\x75\x54\x8d\x49\xc9\x0e\xe3\xa8\x97\x9d\xa4\xfc"
+ "\x3b\x76\xe4\xa2\xfc\xa4\xb8\xed\x4d\x84\xde\x71\x41\x4d\xa3\x3d"
+ "\x6c\x47\x0a\xe8\x2a\x8c\x07\x43\xbd\x81\x5e\xfd\x9b\x9c\x3b\x2f"
+ "\x87\x7d\x3e\x94\xcf\x5a\x19\xb8\x5d\xdc\x3e\xe2\x0e\x9f\x9a\x27"
+ "\xed\xb4\x1b\xeb\x54\xc2\x02\x1a\xbb\xac\x82\xcf\x5d\xf2\xd9\x99"
+ "\x40\xd2\x69\x9f\x7f\xb8\x29\x55\xc9\xcd\xce\x6c\xd8\xa9\x52\xdf"
+ "\xe6\x05\x49\xea\x74\xde\x27\xc6\x1c\x6c\x28\xb7\x19\x70\x30\xff"
+ "\x2b\xda\xa7\xc6\x73\x05\x7b\xd0\x75\x22\xa3\x6d\x68\x93\x6c\x1b"
+ "\xda\x28\xdb\xa6\x7f\xb3\x0a\x75\x7d\x21\xd7\xde\x2f\xaa\x3d\x3b"
+ "\x55\x8c\x34\xf7\x69\x1f\x7f\x8f\xf7\x04\xd5\xae\x91\xe7\x69\xd0"
+ "\x27\x6a\x4f\xa5\x26\x53\x24\xbf\x92\x7c\x71\x30\x6b\x64\x8c\x40"
+ "\xb1\xd1\x94\xfa\x06\xc7\xb7\xd4\xbf\x7b\x07\xd8\x0b\xc4\x26\x53"
+ "\xaa\x3c\xaf\x88\xfa\xf8\xbb\xa1\x03\x7a\xa8\xa6\x83\xfb\xea\xc6"
+ "\xbd\x94\xa5\xf8\xb0\xe6\x2f\xbc\x6e\xad\xe6\x8c\x35\x1b\xc1\xf7"
+ "\x39\x6a\x7e\x66\xf8\xa4\x27\x48\x9f\xf4\x48\x1d\x7b\x91\x38\x4a"
+ "\x7d\x27\x92\xbf\x84\xfe\xa9\x29\x91\xe7\x2e\x81\xef\x8a\x90\xa1"
+ "\xff\x6a\x4a\xd8\xbf\xa9\xdf\xb7\x60\x25\x78\xa5\x54\x9d\x4d\xef"
+ "\x71\xd5\xf6\xc7\x7f\x94\xdf\x39\x73\x89\xc3\x9c\x6f\xf6\xca\xd3"
+ "\xd2\xf7\xa0\x42\xc6\x51\xe8\xd4\xcf\xec\xd5\x4e\xd4\xd7\x48\xd2"
+ "\xf9\x3c\x00\xca\x62\xfe\xdb\x28\xe7\xfb\x4c\x03\xae\x5b\xe2\x2e"
+ "\xbf\x35\x56\x5b\x3c\xb0\x87\x54\x23\xd7\x5a\x94\x8f\x6c\xed\x46"
+ "\x83\x47\xd0\xde\xa1\x2a\xde\xe8\xce\xb3\x8d\xe3\x49\xf2\x40\xb7"
+ "\xb0\x25\x7f\xb7\x9a\x79\xb2\x76\x5f\x24\x9d\x66\x87\x34\xa7\xd2"
+ "\x41\x35\xd5\x42\xca\x7a\x4d\xf5\xd7\xdb\x13\x6f\x25\x19\xb6\x88"
+ "\xa2\x73\x2a\xf4\xcb\xcf\x8e\x4a\x5a\xbb\x77\xdb\x38\xee\xcb\xea"
+ "\x52\x8e\x63\xf5\xd6\x67\x1c\x2f\x2c\xe4\xde\x9d\x19\xe6\xf3\x9d"
+ "\x18\x67\x35\xf7\xee\xec\x13\x45\x64\xca\x2b\xe2\x7d\xb3\x4f\x8b"
+ "\x78\x7e\x25\x9c\xb0\x05\x92\x61\x9f\x40\xce\xd7\x2c\x22\xeb\xe3"
+ "\x05\x80\xed\x4c\x4f\xe3\x78\x5e\x1c\xcb\x8b\xe3\xf1\x85\x9d\xe9"
+ "\x23\x71\x3f\x0a\xf6\x5c\xaa\xb0\xec\x4e\x67\xdf\x9b\xb0\x4b\x40"
+ "\x1f\x1f\xe3\x98\x62\x26\xaf\x3f\x48\x6b\x4e\x92\x85\xe3\x85\x85"
+ "\xca\x3f\x75\xb7\x06\xfe\x22\xe7\x16\x23\x8a\x60\x4f\x6b\xf2\x8c"
+ "\x8f\x4d\x4b\xfa\xb4\x08\x63\x7c\xb1\x6a\xf7\x69\xa1\xda\xad\xf0"
+ "\x66\xfc\x95\x8e\x7b\x27\xbb\x54\xe2\xfe\xb3\xe7\x42\x80\xaf\xb9"
+ "\xeb\xa7\x85\xdd\xf5\x59\xea\x5c\x68\x33\x95\x16\x8b\x0e\x2f\x6c"
+ "\x63\xf6\x05\xe5\xb3\xbf\xec\xdb\xc3\x6d\xe4\xf6\x71\xdd\xff\x71"
+ "\xe6\xa4\x8c\x7f\x16\xc2\xb3\xb3\x50\x2f\xd3\x85\x32\x5d\xcd\xd4"
+ "\xeb\xae\x97\x6d\x6f\x0d\xa8\xb2\x79\xf2\x9e\xcb\x47\xd0\x41\x6f"
+ "\x73\x3f\x1d\xd0\x76\x6e\x1f\xb7\x3f\xc4\x34\x01\x0d\xf4\xb6\xda"
+ "\xfa\xf4\x76\x72\x1b\x7f\x8f\x51\x67\x1b\xda\x89\xb6\xca\x76\xf6"
+ "\xa1\x9d\x87\x0b\x88\x82\x1b\x4e\xfb\xbf\x4a\xae\xcf\xe2\xf9\xa1"
+ "\xf3\x0f\xb0\xa3\x4b\x2a\x09\xf3\x40\xf3\xbb\xa5\x95\xa6\x0d\xb0"
+ "\x4d\x4a\xfd\x98\x0f\xfa\x45\x07\xdb\xfb\xde\x22\xfc\x42\xd5\xf2"
+ "\x5b\xc6\xd2\x3e\xe6\xef\xce\x3e\x8f\x36\x69\x5f\x50\x69\x87\xe8"
+ "\x80\x6d\x1a\xf4\x86\x90\xa7\x00\xed\xc7\xfc\xf1\x84\x8e\x3f\xe7"
+ "\x5d\xf3\x4f\xd5\x2e\x6b\x21\xa5\x1d\x7a\xd4\x6d\xf2\xb6\xb9\xc9"
+ "\x68\xcb\x13\xc8\x87\xf6\xd8\x00\x6b\xb8\xfc\xd6\x03\xda\xb9\x1d"
+ "\x78\x06\x23\xda\xd4\xd2\x15\x04\xcc\x3f\x51\x72\x0e\x25\x6c\x3b"
+ "\x85\x76\x9c\x22\x5b\x65\x29\xec\xaf\x07\xd9\x5e\xfc\xb7\xb7\x2f"
+ "\xc9\xa5\xb1\x3e\x7a\x6b\xaf\xe2\x3b\x19\x8b\xe8\xf2\x4e\xfa\x59"
+ "\x4b\x7f\xbc\x21\x8e\xe1\x96\xf4\xe9\x46\xe6\x23\x19\x77\x88\xc7"
+ "\x8c\x1e\xf0\x0c\xfb\xe5\xac\x40\x1d\x3d\xe9\xa3\x24\x3e\xae\x49"
+ "\x84\xe7\x14\x3c\xf3\x77\xa8\xd2\x78\x4d\x00\xe5\xdc\x02\x34\x63"
+ "\xf8\xb0\xe7\x8a\xf9\xca\x34\x8c\x7b\x6e\xe5\x3d\x82\xae\x83\x8d"
+ "\x89\xb9\x6f\x7d\xa9\xdf\xf4\xe2\x7b\x34\xfe\xe2\x74\xca\xcf\x42"
+ "\x83\xe9\x6f\xde\x03\x61\x78\x68\xdb\xc8\x4e\xda\xf5\x79\xb4\x8c"
+ "\xd9\xa5\x2e\x53\x7a\x70\x57\x1d\xef\x3b\x5c\x5c\xbd\xbb\xa4\x0d"
+ "\xc7\xfe\x53\x17\x59\x6e\xaf\x81\x07\xee\x07\x3d\x7b\x75\xf1\x74"
+ "\x78\xdb\x3c\x18\xac\x4d\x5b\x65\x0c\x3a\xe7\xe6\xad\xec\xdb\x78"
+ "\xba\xad\xd1\xc6\x71\xc1\x31\x76\xee\x0a\xd0\xb2\x1d\x64\x71\x9e"
+ "\xe4\x35\x99\x99\xd4\x58\x9d\x41\x3b\x31\x27\x17\xdd\xe9\x23\x5f"
+ "\x3f\xc3\x7e\x14\x4a\x87\xb0\x4d\xca\xe7\x32\xc5\xb2\xf4\xd4\x8a"
+ "\xad\x86\x0d\xff\x76\x4b\xc9\x59\x32\xa9\xef\xae\xbc\xdd\x3c\xcd"
+ "\x2e\x42\x5b\x4c\x5a\x41\x35\xc7\xd1\x4a\xee\xb4\x73\x1c\x2d\x23"
+ "\x36\x95\xb4\x7d\x1c\x90\xb9\x6e\x5b\xf2\xa6\xa5\x34\x9e\xe3\xe9"
+ "\x59\xfd\xca\x96\x53\xe3\xf5\xdb\xac\x63\x53\x75\xdf\x81\x54\x15"
+ "\xaf\x6a\xd7\xb4\x9a\x33\xa8\x4b\xbe\xff\xf9\x0d\x61\xcc\x61\x24"
+ "\xdc\xa5\x34\xb6\xfa\x0c\xa5\xb3\x1d\x94\xf7\x85\xb2\xd9\x78\x5e"
+ "\x38\xb3\xcb\x2a\xc2\xff\x48\xa7\x1d\x9d\x03\xf1\xf6\xfc\xcb\x38"
+ "\x46\x9f\xb0\x0d\xb6\xef\x52\x31\x4a\xfa\x0f\xc9\x18\x2f\xea\xbb"
+ "\x7c\x44\x5b\x5e\x23\x33\x7f\x87\x96\xd7\x05\x79\x9d\x99\xcf\x10"
+ "\xa9\x31\xe4\xe7\xd5\x46\x1c\xb2\x41\xf7\x24\xdd\x6a\xbe\xa3\x0d"
+ "\xc5\xfc\xcb\xdf\xe3\xf1\x2c\xe7\x31\xe3\xe7\xed\x7c\x6e\x69\x60"
+ "\x8e\xf3\xf3\x4f\xf9\x1d\xa7\xb1\x5f\x7d\x96\xa4\xe5\x2f\x52\x78"
+ "\xde\xa3\xcf\x19\x0f\xd9\xfb\xd3\x94\x0d\xc3\x63\x19\xe3\x50\xa3"
+ "\xd6\xa4\x47\xf4\xb8\x7e\x91\x6e\x8c\x67\x3c\xae\xab\x6f\xe0\xfe"
+ "\x62\xb2\x2f\xe1\xe3\xb9\x17\xc0\x2f\x55\xff\x86\x34\xc7\x59\xc8"
+ "\x42\xfe\x42\x63\x7c\x93\xdf\x38\x59\x37\xfa\xae\x65\x2b\x69\xcc"
+ "\x43\xdf\xb2\xc8\x38\x1e\xfc\x2d\x53\x35\xee\xfe\x62\xcb\xc0\xde"
+ "\x5c\x96\xa4\xb7\xfc\x7e\x21\xcf\x31\x4c\x18\x83\x55\x4c\xbd\x2e"
+ "\x35\xfe\x1a\x67\xe6\x7f\xf1\x41\x44\x3d\x47\xfb\xc7\x51\xd4\xc1"
+ "\x3e\x22\x0c\x5f\xd9\x26\xbf\x70\x73\x1d\x3c\xb7\x52\xe3\xeb\x2f"
+ "\x2e\x74\xbe\x30\x9d\xe9\xab\xe9\xf3\x49\x6f\xd7\xdf\x15\x7d\x1d"
+ "\x94\x38\x61\x0b\xd9\x0e\x95\xfa\xcc\x23\x54\x6c\x28\xeb\x71\xaa"
+ "\x1b\xc7\xef\x99\xd7\x3d\x37\xf2\x5a\x5c\xdd\x5a\x2f\x8f\xdb\x7d"
+ "\xb9\x29\xb3\x78\xae\x2f\x6d\xf1\xba\xa2\x1b\x50\x0e\x69\x23\x0f"
+ "\x9e\x0a\x9a\x2b\x56\xd1\x78\xfe\x4e\x28\xd2\xe5\xde\x96\xff\x8a"
+ "\x67\x7b\xbe\x9b\x46\xb6\xef\x6e\xe1\xb3\x05\x75\x55\x98\x5f\xaa"
+ "\x75\x54\xae\x7f\xf3\xd0\x2c\x8e\x27\xf8\x7e\xaf\x6f\x88\xea\xab"
+ "\xdd\xb7\xe0\x39\x7d\xe0\xb9\xee\x0f\xc6\xbe\x80\x8f\x76\x4f\x92"
+ "\xfb\xa0\xec\x3f\xbd\x98\xc7\xeb\x4e\xcf\x80\xcf\xd1\xee\x5b\x14"
+ "\x2e\xbb\x6f\x69\x2c\x22\x5e\xf7\x3e\xba\x53\xc6\x06\xdb\x0d\x79"
+ "\xfe\x45\xb6\xbe\x1e\x73\x44\xf2\x15\xdb\xbb\x2f\xf1\x1c\xec\xef"
+ "\x9e\x4d\xc8\xc7\xe3\x44\x9e\x83\xb2\x94\x0d\xdf\xd9\xa6\x81\x7f"
+ "\x22\xda\xff\x16\xaf\xf5\xc5\xd5\x89\xdb\x88\x64\x99\xf2\xce\x54"
+ "\xe9\xbf\xb6\xc9\x52\x8b\xab\x45\x94\xff\xc3\x83\x2b\xf3\xdc\x11"
+ "\x5c\x53\x71\x3d\x8c\x6b\x9a\xd8\x34\xb4\x8c\xf9\x12\x73\x58\x1b"
+ "\xe6\x09\xbc\xa7\x6a\x19\xec\xdc\x23\xd3\xc6\xbb\xfe\xc7\xa4\xfc"
+ "\x71\xf7\xd8\x5a\xfc\xb0\xcf\x76\x10\x2d\x0b\x89\x5e\xfb\x77\xf8"
+ "\x7c\xd1\x1e\x9b\x73\x07\xfb\xc1\xec\xee\x8a\xf6\x83\xd9\x93\x82"
+ "\xdf\x0c\xfc\x20\x75\x7b\x8e\xe0\x67\x1b\xf8\xbd\x93\xd2\xe3\xda"
+ "\x63\x03\x1d\xa5\x8d\x75\x71\x3a\x71\x8f\x8c\xd3\x56\xc1\xf3\xa2"
+ "\xa4\xcf\xea\x55\x7b\x13\xfc\x78\xb6\x88\xe1\x43\x33\xf4\xf6\xfa"
+ "\xf0\x9c\x6a\x77\x62\x5c\x4b\x02\x4d\x46\xa3\xcd\xc3\x2d\xb5\xdc"
+ "\x5e\xc6\xb7\x3b\xe9\x1f\x9e\xc8\x33\x9f\x0c\x93\xdb\xef\x4f\x42"
+ "\x39\xd0\x52\x5c\xfb\x70\x8e\x41\x4f\x9d\x4e\xbc\x07\x65\xea\x06"
+ "\x0c\x65\x07\x21\x3f\x60\x18\xf9\xfb\x69\x3f\x9a\xa4\x9f\x07\xd7"
+ "\x85\x39\xb1\xc5\x38\x4f\xda\xe3\x7a\xc7\xfc\x71\x21\xe9\x31\x15"
+ "\xf6\xd8\x02\x11\x65\x39\x7e\x46\xbc\xf2\xa8\x53\x96\x67\x5c\x4f"
+ "\xd0\x9e\x6f\xe9\xf5\x06\x07\x93\xa5\xd2\xab\x61\xdf\x41\x9b\x4d"
+ "\x50\xf3\xbe\xc9\xde\x31\x01\xf2\x56\x6b\x18\xf3\x3b\xfd\x59\xa5"
+ "\x02\x30\xde\xd9\xdf\x1a\xec\xb8\xc8\xf1\xf0\x1d\xf5\x8d\xd0\xde"
+ "\x32\xf2\x96\xdc\x24\xbf\x8f\x7d\x8a\xf6\x7e\xe9\xf5\xcb\x38\xf3"
+ "\x7c\x2f\xfd\xc1\xd9\xe7\x83\xc7\x06\xcc\xb1\xfb\xe3\x34\x6a\xc8"
+ "\xbb\x93\xd3\x91\xe6\x0d\xf8\x65\x3c\xc7\x01\x9f\xf4\x2f\x0f\x2b"
+ "\x99\xda\xfb\x96\x8c\xe5\xc0\xf8\x86\xee\xf1\x30\xce\x9a\xfb\xcb"
+ "\xc3\xdc\x06\x27\xe6\x7f\xde\x50\x8f\x87\x65\xc2\xbe\x9c\xd7\x0a"
+ "\xf7\xae\x01\xdf\x09\xad\xfc\xcb\xc3\x17\xd7\x86\xbd\xf2\xfc\xbc"
+ "\x33\x24\x4e\xf9\x93\xbe\x3c\xcc\x36\x49\x45\xe9\x10\xcb\xd4\x6a"
+ "\xe1\xe9\x4e\xee\x84\x2e\xdc\x5b\xfb\xb1\x43\xf5\xcd\x45\xc2\xad"
+ "\x35\xda\xbe\x53\x6f\x3b\xd2\x24\xef\x4f\xa8\x52\xf1\x2b\xf1\xdc"
+ "\x36\xe8\x9a\x15\xfa\x99\xed\x01\xf6\x97\x55\xb4\x78\x37\xbd\x7f"
+ "\x6c\xb8\x28\x3c\xde\x4d\xff\x06\x75\xf4\xe9\x75\x6c\xfc\x6f\xd6"
+ "\xb1\xf1\x42\x75\x40\x37\x5c\xd9\x49\xef\xd9\x2e\x7e\xee\xf8\xae"
+ "\xfc\x46\x10\xf4\xa7\xee\xeb\xf8\x7e\x79\x18\xf3\xb7\x50\x4a\x82"
+ "\x5f\x7e\xcb\xca\x44\x65\x1c\xcb\x33\xe4\xfe\xac\xbe\xc5\xd1\x4b"
+ "\x9e\xe5\x7f\xa4\x76\x7a\x4f\x7e\x33\xb7\x05\x7a\x46\x6c\x1c\x9a"
+ "\xd1\xb7\xe1\x1f\x59\x7d\xa6\x77\x25\x9f\xed\x40\x3f\x6c\x8f\xe0"
+ "\xb3\xd6\xc0\x1f\xc9\x3b\x8f\xd7\x57\x8f\xf0\xba\x76\x86\x18\x9e"
+ "\xe0\xd7\xa0\x1b\x60\xa3\x87\x25\x3d\x60\xbf\xa8\xf9\xd6\xe9\x36"
+ "\x39\xdf\xf2\xcb\xb3\x8e\xc3\x65\x8c\x4e\x57\x51\x21\xaf\x7d\x87"
+ "\xfb\x72\xed\x3d\x2e\xca\xe1\xd8\x9d\xbc\xee\x2c\x2c\x0d\x47\x67"
+ "\x87\x12\x85\x9c\x4f\xc1\xf6\xe7\xd8\x9d\xde\x80\x8f\xc2\xb0\xa3"
+ "\xab\xcf\x51\x5a\x35\x6c\x4f\xe8\xec\x54\xd6\xeb\x35\x7a\xfc\xce"
+ "\x4d\xe7\x06\xe2\x77\xee\xe4\xb5\x9e\x36\xdc\x9f\x23\x73\xb8\xfc"
+ "\x74\xdb\xf6\x73\x34\x76\xc7\x72\x4a\xdf\xce\x6b\x79\x5f\x2a\xdb"
+ "\x87\xed\x0a\x19\xcb\x73\x49\x3a\xaf\xe7\x0f\xd8\x3e\x2b\x38\xd6"
+ "\x70\xbf\xde\x32\xcb\x35\x90\x8b\xa2\xf7\xfb\x72\x1c\x0c\xb9\x3b"
+ "\x53\x43\x29\x96\x5a\xd0\xce\xe3\xa3\xf7\xdc\xa0\x5f\xdc\x71\xc5"
+ "\xf0\xe9\xda\x12\x11\x7f\xf5\xe3\xb1\x4a\xbf\x03\x56\xf3\x60\x3c"
+ "\x11\xde\x9e\x4b\x13\xba\x28\x43\xf9\x47\x24\x61\x4c\xac\xcf\xe0"
+ "\xbd\xf8\xd2\xe7\xc8\x16\xde\x3e\x37\xc1\xf9\x16\x25\xf2\xb7\xd3"
+ "\xf9\x57\xfa\x4f\xd1\x31\xa1\x90\x32\x78\xff\x81\x7d\x28\xec\xab"
+ "\x65\xfe\x84\xb1\x25\x94\x11\x09\x3b\x5b\x39\x59\xdd\x66\x5f\x56"
+ "\x3c\x7f\x25\x7b\x37\xac\x58\x54\x5c\x60\x7f\xea\x85\xa5\x4b\xf9"
+ "\xc4\xe7\xcc\xa9\x39\xd1\x67\x3a\xcd\x9b\x31\x2e\x58\xd7\x4e\x9f"
+ "\x63\x0d\x65\xdb\x55\xfc\xdc\x0f\xaa\x22\xbe\x73\xce\xcf\xea\x7b"
+ "\x1a\xee\x43\x85\x3c\x6e\xf3\x7b\xf5\xec\xb1\x29\x9f\xab\x7a\x39"
+ "\xde\x6b\xdb\x6d\xbb\xd4\x19\xca\x0f\xee\x65\x5f\x06\xc5\xa7\xaa"
+ "\xac\xf2\x53\xaf\x9f\xac\xf6\xf2\xeb\x3b\xfa\x7d\x17\xdc\x6a\x2c"
+ "\x61\xdf\x05\xde\x4f\x56\xb2\xf7\x81\xc5\x90\xbd\x1e\xd7\x07\x69"
+ "\xb0\x9f\x2a\x2f\x5e\xe7\x7c\x90\x26\x71\x54\x67\x65\x19\xa7\xb5"
+ "\x11\x31\xe6\x86\xf6\xb7\x61\xbb\xed\xe7\x6a\xbd\xfb\x83\x37\x19"
+ "\x5f\x1f\xd5\x1f\x8e\x48\x1f\x83\xb6\x1d\x56\xe9\x1f\xe4\x72\xf9"
+ "\xb8\x74\xbe\x77\xf1\x53\x4b\x9e\x2b\x9a\x5f\xbc\xe8\xc9\x45\x85"
+ "\x8b\x8a\x57\xca\xb0\x17\xe3\xe5\xbf\xbb\xc7\xe5\xcf\x91\x8e\x02"
+ "\x91\x76\x1c\xaf\x7b\x18\x71\xb7\xd4\xba\xd3\x2f\xaf\x93\xbe\x92"
+ "\x17\xd7\xbe\x80\x5a\x13\xfc\xe5\x24\x5f\x82\xa7\x70\xc0\xe7\x44"
+ "\xa5\x77\xa7\x0c\x2d\xb3\x8f\xa6\xc9\xc7\xe9\xd7\xb9\xbc\xdf\x04"
+ "\x3a\x1f\xe1\x71\x69\x73\x2f\x8f\x1f\x1d\xd4\x12\xba\x89\x54\xff"
+ "\xfc\xf2\x6d\x8e\x33\xcc\xbe\x6b\xa0\xfd\xae\xe3\x78\x96\xed\x3f"
+ "\x6d\xdb\xc5\xe7\x9b\xc4\x12\xdb\xcf\x99\x17\x18\x3f\xd0\x6e\xbb"
+ "\x10\xb9\xdb\xc4\x92\x82\xed\xe2\x74\xc1\x36\xd8\x6b\x1d\x3b\xb7"
+ "\x8a\x76\xe0\xd0\x00\xba\xcd\x8b\xf4\xfd\xd9\xa4\xbe\x71\xdf\xae"
+ "\x68\xfd\xcb\xff\x84\xae\xba\x15\xbf\x2b\x84\x7b\x77\x81\xa2\xeb"
+ "\x2f\xe5\x1e\xc2\xcc\x02\x71\x7a\x20\xb6\xc5\xaf\xf8\xb9\x0f\x3f"
+ "\x4d\xb8\xf7\xb8\x23\xf6\x38\xf9\xdd\x0d\x62\xc3\x9e\x97\xd9\xde"
+ "\x56\x3c\xf7\xab\x5b\xd4\xf8\xb8\xe7\x65\xbf\xb3\x20\x11\x65\xc2"
+ "\xd2\xdf\x4c\xb6\xe9\x57\xf3\xbd\xeb\xcf\xb1\xff\x43\x40\x2f\x3b"
+ "\x8f\x9f\x3d\xcf\xb0\x8d\xfd\xab\xb0\x30\x39\x05\xef\x8b\x7a\x3b"
+ "\x42\xa4\xfb\x33\x81\x37\x3f\xd8\xc5\xdf\x20\x67\xfe\xdc\xf9\x1a"
+ "\x59\x2a\x47\x12\xec\xae\x5f\xf5\xc7\x3f\x11\x16\x65\x07\x31\xaf"
+ "\x72\x9c\x74\xe9\xfb\x00\x7b\x83\xe1\x33\xaf\x02\xee\x01\xde\x37"
+ "\x55\x3c\xfb\xab\xc3\xff\x3d\x9e\xfd\x95\xe4\xbd\x09\x1b\x69\x1e"
+ "\xef\x35\xb0\x3f\x00\xc7\x11\x87\x1e\x3d\xac\xe4\xf0\xd7\x13\xa5"
+ "\xbf\x03\x74\x3d\xef\x63\xd5\x94\xc2\x7e\xb3\x34\x34\xb3\xdd\x19"
+ "\x72\x51\x19\xef\x39\x6b\xe7\x4e\xd6\xb3\x9f\x80\x3c\x3f\x2a\xe3"
+ "\xef\xff\x9e\x6a\xce\x92\xb9\x9d\xf6\x65\xf1\xde\xc8\x00\xad\xf7"
+ "\xbd\xc1\x30\xc4\x86\x3a\xb2\x96\x98\xdc\x0c\x43\x3b\x77\x2a\xd3"
+ "\x28\x07\x5b\x6b\x18\x97\x3b\x4e\xfb\x56\xca\x72\x9c\x57\xc6\xbd"
+ "\x49\x9d\x0b\x5b\x3c\x55\xd6\xa9\x9e\x73\x04\xf4\x63\xe8\x5c\xb8"
+ "\x1e\xf7\x73\x98\x4e\xb8\xe6\xca\x35\xf9\x3e\x1b\xc9\x78\x4b\x96"
+ "\x4f\x6b\xbd\xbe\xbf\x7b\x24\x3e\xec\x6f\x5d\x8c\xb1\x44\xda\xe9"
+ "\xfb\x5a\x76\x7e\x41\xe6\xa2\x67\xb8\x3f\x7f\x3d\x4f\xda\xaa\xa7"
+ "\xa8\x4e\xe1\xf7\xeb\xf9\xdd\x1b\xea\xb3\xba\x2d\x9d\x47\x02\x26"
+ "\x0b\x35\xda\x82\x3c\x86\x95\x35\xda\x7a\xa1\x3f\x7e\x9d\xee\x33"
+ "\xfd\xa2\x48\xd9\x88\xaa\x1c\xef\xdf\x33\x3f\x26\xda\x52\x9d\x78"
+ "\x9f\x6d\xf8\xd6\x30\x1f\x6e\xc2\x3b\x1f\xed\xb3\x33\xdd\x7c\xf4"
+ "\xcb\xfc\xd6\x2e\x75\xfe\x06\xcf\x43\x39\xa6\x82\xa4\xf5\xba\x67"
+ "\x3b\xac\x6b\x3d\x7c\xc6\x37\xd3\x1a\xca\x32\xf1\xfe\x3c\xc7\x76"
+ "\xe0\x78\x17\x1c\xdf\x81\xd7\x58\xf5\xf7\x19\x31\xef\xc7\x1b\xef"
+ "\x51\xaf\xc7\x88\xcb\xc0\x71\xb3\xd8\xf7\x23\xac\xfb\x83\xca\x78"
+ "\x52\x67\xd4\xfe\x36\xfb\x83\xf2\xfa\x2e\x9f\x6b\xe5\x3d\x68\x94"
+ "\xeb\x3f\xff\xab\xce\x73\xfd\xa6\xdf\xff\x0d\xf7\x69\xfd\xbe\x5b"
+ "\xa0\x45\xb7\xbb\xf3\x70\x00\xb2\x1d\x70\x77\x5a\xf0\x2e\x03\x63"
+ "\x4b\xdd\x05\xe7\xe4\x1c\x7f\xfb\x05\x32\x69\xc9\x0d\x41\x8e\xc3"
+ "\xd2\x18\x20\xfd\x2c\xfb\x6f\x5e\xd5\xe3\x1e\x24\x9e\xa2\xdf\xcc"
+ "\x1c\xd8\x0b\x0e\xeb\xeb\x98\xbf\x69\x50\x76\xf4\x6f\x1a\xe4\x3a"
+ "\xe6\x86\xce\xfa\x9f\xad\x0a\x9a\xea\x57\xf9\x4c\xea\x7c\xcb\x6f"
+ "\xf6\xfa\xe8\xa0\xcf\xf0\x4d\x42\xbe\xc2\xc1\xe2\xeb\x09\xf7\x41"
+ "\x5d\x86\x7f\xfb\x96\x1c\x27\xfa\xe7\xa5\xbf\x55\xdf\x3d\x5c\x37"
+ "\x7a\x9e\xc6\x36\x4c\xf2\x67\x1e\xe9\x1b\x53\x74\x86\xd7\x33\x87"
+ "\xaa\x39\xb2\xca\xa3\xfb\xf3\x5e\xd6\x19\xfd\x3c\x92\x9f\x15\xcd"
+ "\x7e\x3b\xd9\xd8\x1b\xd9\x6c\xd2\x38\x06\xbb\x70\xd6\x8a\x80\xb7"
+ "\x28\x40\xb0\x8f\xfd\x5e\xd8\x44\xa8\x43\x14\x2d\xe5\x6f\x24\xfc"
+ "\xf6\x79\xa6\xbd\x92\xa9\xdf\xca\xfd\x0b\xcd\x75\x87\x70\xf2\xbc"
+ "\xc0\xcf\xbe\x39\x67\x08\xf9\x2e\x45\xbe\x1d\x4d\x25\x5d\xec\x5f"
+ "\xe4\xe1\xb8\x96\xed\x7a\xdd\xfe\xa4\x83\x1d\xdf\x4d\xa1\x79\xa8"
+ "\xb3\xde\x47\x2f\x35\x5c\xbc\x9c\xff\x76\xf0\xfd\xd9\x7e\x9b\x25"
+ "\x8b\x06\x9b\x67\xf2\x3a\xc2\x8d\xa8\x7f\xa6\x60\xfc\x1b\x76\x84"
+ "\x4c\x41\xea\x33\x0d\x13\xdf\x2f\x73\x40\x0f\x0c\x13\xe1\x55\xe8"
+ "\xaf\x6e\x1b\xe6\x21\xcd\xd4\x1a\x6a\x92\xbe\x3b\x90\x61\x6b\x69"
+ "\x40\x9c\xf1\x86\xf6\x49\x1f\x6e\x35\x4e\x37\xbc\xe1\x0d\x7d\x44"
+ "\xad\x45\x7e\xf2\x2c\xfd\x23\x6c\x89\x06\x19\x2f\xef\xc6\xa2\x32"
+ "\xba\xe1\x94\x7c\x9f\xa5\xec\x97\x86\x6a\xfd\x5a\xc8\xf1\x4f\x23"
+ "\x71\xba\xfb\x85\xc5\x4f\x15\x2f\x5a\xb2\xf8\x86\x19\x0b\x96\x2f"
+ "\x28\xb4\x3f\xa8\xdc\x2a\xa3\xc6\x3b\xcb\x40\xac\xf7\xfd\x05\x3c"
+ "\x16\xb1\x0d\xc9\x31\xdf\x2f\x14\xef\xdd\x88\xf5\x0e\x7b\x6e\x2c"
+ "\xaf\xbb\xfe\x6f\xc6\x7b\x37\x6c\x44\x8e\xf5\x3e\xb0\x07\xf1\x61"
+ "\x7a\xbf\x0c\x68\x87\x7a\xf8\x99\xc7\x3f\xcd\xd5\x50\xc7\x72\xb4"
+ "\x53\xda\x2d\xfb\x6b\x23\xe3\x61\xb1\xcd\xc2\xeb\x56\x48\x6f\x30"
+ "\xce\x52\x83\x17\x31\x6e\xec\x3f\x3c\x70\xb6\x6b\xff\x51\xd0\x2d"
+ "\x4d\xc9\xaf\xcc\xdb\x6e\xec\xd5\xeb\xdf\xd8\x93\xbe\x05\x9a\x4b"
+ "\xb3\xab\xf5\xb1\xfd\x5f\xee\xd4\x86\x59\xd4\xde\xcc\x87\xa9\xc6"
+ "\xb9\x41\x25\x9b\x87\x74\xd9\xfc\x30\xfd\x42\xfe\x14\x03\xb2\xf1"
+ "\x61\xfe\x80\x5c\xff\xcd\x28\x9b\xff\x75\xbe\x18\xfa\x3c\xe5\xf2"
+ "\x4e\x3a\xb0\x92\xd7\xcc\x70\x7f\x15\xee\xe7\x33\x2c\x75\x86\xe2"
+ "\xc0\x14\xfd\x1e\x75\x1c\x18\xa7\xdf\x7f\x1b\xf7\xc3\xf5\x7b\xd8"
+ "\x53\xbf\x3b\xab\xdf\x43\x66\x7f\xf7\x17\xfd\x3e\x0d\xf7\x9f\xea"
+ "\xf7\xd0\xf9\xbf\x7b\x57\xbf\x1f\x85\xfb\x37\xf4\xfb\x6f\xe1\x7e"
+ "\x8d\x7e\x0f\x19\xfc\xdd\x02\x7d\x5f\xdb\x72\x82\x7e\xf7\xc0\xc5"
+ "\xcf\x9b\x7e\x37\x46\xd9\x49\xbf\x9b\x0b\x9b\xe9\x88\x1a\x33\xfa"
+ "\xd3\x8a\xd0\x37\x1e\x83\xbe\x48\x4f\xe3\x7a\x90\xee\xf6\xd1\xcf"
+ "\xeb\x22\xd2\xcd\x7a\xfe\x5a\xe8\xb9\xc9\x03\xe9\x1f\x06\xf5\x74"
+ "\xd8\x3f\xef\x36\x47\xa4\x77\xe9\xe9\x47\x90\xbf\x29\x22\x5d\xdf"
+ "\xc7\xfd\x5d\x87\x8f\x6a\x8f\x45\xa4\x1f\x55\xe9\x07\xc8\xf0\x23"
+ "\xd1\xd3\x0f\xeb\xe9\x36\x1f\x55\x6d\x8c\x48\x3f\xa0\xa7\x43\xff"
+ "\x7f\x38\x29\x22\x5d\x7d\xab\x5e\x9e\x37\xb4\x8a\xc6\x12\x96\xad"
+ "\x03\x73\x7c\xb4\xb3\x24\x22\xcf\x2e\xbd\x6c\xa1\x8f\x76\xec\x8a"
+ "\x48\xd7\xcf\xaa\x1e\x58\xef\xa3\x7f\x84\x22\xd2\x07\x9d\xcf\x26"
+ "\x54\xd1\xbc\xc1\xd6\x96\xf9\x9b\x64\xd2\x17\x56\xda\xa4\x1f\x7d"
+ "\xcc\x67\x11\xad\x3b\xc4\x71\x7b\xa9\x10\xc7\xe9\xa3\x3a\xdd\x6f"
+ "\xf3\x00\xfb\xd1\xa9\x33\x9d\x1f\x55\xca\x73\x7e\x6c\x67\xf2\x39"
+ "\xcf\x55\x32\xed\x72\x69\x0f\x39\xca\x54\xdc\x55\xe5\x63\xdc\x25"
+ "\xd7\x58\xf4\xfd\x67\xe4\x99\xc2\xb6\x34\xc3\xe1\x75\x58\x6f\x71"
+ "\xaf\xf4\x7b\xe5\x39\x2e\xa7\xf1\x5a\x83\x3c\xfb\x17\x31\xd7\x55"
+ "\x7a\xff\xa3\x8f\x35\x8e\xcd\xe0\x52\xeb\x31\x2c\x8b\x9c\x9f\x7d"
+ "\xa6\x22\xf3\xfa\xe8\x23\x0f\x5f\x13\x6d\x97\xfe\x9f\x1e\xd7\x47"
+ "\xb5\x03\xe7\xd1\x0e\x04\xf5\xf4\x3f\x21\xbd\x21\x22\xbd\x7d\x70"
+ "\xdd\x0e\x7d\x67\xa9\xcb\xee\x3b\x27\x02\xa1\x73\x22\xb8\xf9\xaf"
+ "\xc0\x7b\xa1\x3c\x5b\xf5\x9d\xb0\xbb\x2e\x57\x8f\x73\xf2\x79\x68"
+ "\xb9\xf0\x43\x67\xf3\xf7\x44\x2e\x99\x15\xf0\xd3\xac\xa2\x1e\xb1"
+ "\xe9\x49\xf6\x7f\x3c\x2b\x63\x7e\x39\xbb\x38\xd6\x3a\xfb\xd4\x05"
+ "\x78\xdf\x2e\xa5\x15\x63\xdc\xce\x85\xfc\xfe\x2f\x34\xb3\xc0\x4f"
+ "\x2d\x05\x61\xda\x09\xd8\x3b\x9e\x34\xfc\x59\x0f\xf6\x9f\xff\x61"
+ "\x1c\xb8\x3e\xa7\xfc\x2e\xd0\x41\xe9\x1f\xc1\xdf\x3d\x14\x9b\x2c"
+ "\xf5\xe2\x13\xb6\x65\xbf\x3c\x62\x5d\x4b\x76\x8c\xed\x5b\x70\xef"
+ "\x91\x3f\x7e\x87\xf4\xc1\xda\xa4\x64\xf9\xe0\x11\x7d\x2f\xed\xb0"
+ "\xd2\x17\x07\x8f\x88\x7f\xe3\x79\xd3\x41\xde\x0f\xfd\xff\xd8\x7b"
+ "\x1f\xb8\xa8\xab\x74\x7f\xfc\xcc\x30\xea\xa0\x03\x8c\x2e\xd9\x68"
+ "\x68\x53\x69\x4d\x85\x45\xbb\xd4\xd7\x76\x75\xa3\xb2\x8d\xf6\x6a"
+ "\x58\xe1\xbd\x78\x73\x13\x53\x0b\x37\xff\x8c\x84\x84\x86\xfc\xd3"
+ "\x88\x3f\x33\xc8\x2a\xbb\x8b\x85\x64\xf7\xda\x7e\xe9\x5e\x2b\xdb"
+ "\xec\xf7\xd5\xae\xe9\x98\xba\x61\x01\x83\xa6\x45\x46\x39\x12\x12"
+ "\x12\xda\x08\x83\x8c\x30\xf3\x39\xbf\xe7\x39\xe7\xf3\x61\x66\x80"
+ "\x81\x61\xc0\x3f\xed\x95\xd7\xeb\xf3\xfa\xf0\x39\x9f\x33\xe7\x73"
+ "\xce\xf3\xbc\xcf\xf3\x3c\xe7\xdf\xf3\x94\x81\xdd\xdc\xeb\xbe\xb8"
+ "\xb5\x5b\x88\xbc\x33\x0f\x6c\x93\x73\xbb\xe4\x5c\x3e\xed\x33\x09"
+ "\x72\x65\x26\xce\xf7\xb2\x98\x20\x79\xbb\x95\xdb\x97\xdb\xe5\x95"
+ "\x6b\xea\xc9\xcb\xe3\x88\x66\x9e\x1d\xcf\x0b\xec\x7b\x30\x38\x09"
+ "\xfd\xad\x35\xed\x00\x3b\x54\xfe\x01\xbc\xdf\xbb\x7c\x97\xdc\xc1"
+ "\xec\x95\x7d\x26\x36\x47\x98\xb3\xab\x16\x75\x88\xb9\xc6\x89\x7a"
+ "\x80\xd9\xc9\x20\xff\x95\xce\x97\x12\xc6\x38\x5e\x4c\x18\xb5\x25"
+ "\x91\xa8\x9c\x2f\xea\x42\x37\x5d\x20\x53\x25\xfd\xb3\x25\x19\x74"
+ "\x4a\xbb\x66\xe4\x06\xd0\x29\x38\xf7\x10\x2c\x53\xb3\xb5\x50\xfc"
+ "\x5f\x90\xff\x67\x63\x69\x72\xdf\xf1\x8d\x9c\x2f\xe9\xe4\xe8\x5f"
+ "\x1c\xeb\xd2\x5b\x5b\x0d\x30\xce\x76\x8a\x67\xa1\xd3\x4e\x93\xb1"
+ "\xfa\xe7\x88\x3c\xb8\x8d\x9a\x9a\x96\x12\x39\xc6\x84\x49\x5b\xcc"
+ "\xe6\xf7\x86\x55\x26\x38\x88\x39\xe5\x04\x49\x4b\x44\x1e\x99\xae"
+ "\x43\x3b\x0d\xf7\xb3\x42\x7e\x35\xa0\x7e\x72\x88\x1d\x74\x86\x1d"
+ "\x6c\xe9\x3f\xe2\xd8\xd1\x74\xbf\x8d\xf9\x37\x36\xe1\xd9\x67\xb0"
+ "\xf7\x1f\xc2\xb4\x39\xe9\xa7\xd9\x9e\x65\x13\xef\x5b\xa6\x08\x7c"
+ "\x4e\xc7\xb3\xd9\x23\xf7\xaa\xdf\xed\xb0\x0f\xe3\xe3\x24\xd3\x3d"
+ "\xa2\x7e\xd8\xca\xc7\x64\xa6\x08\x6f\xd8\x15\x72\xb6\x63\x8c\x99"
+ "\x1b\xcd\x25\x0e\xf2\xb8\x8d\x5a\xd8\x3a\x33\xfa\xa4\x48\x79\xc0"
+ "\x44\x2f\x14\x12\x7e\x8e\xd2\xd4\x26\xe4\x6e\x4f\xe0\x3e\x49\x4d"
+ "\xd2\x1e\x31\xd0\x91\xdb\x53\xf8\x1c\xfb\xf6\x1c\x3e\xe7\xbc\xbd"
+ "\x78\xdd\x78\xdc\x8f\x6e\xb2\xb5\x06\x6e\x2f\x83\x7b\x79\xeb\xc8"
+ "\x4f\x0a\xbd\xeb\xa3\xb7\x8b\xb5\x13\x49\x28\xae\x75\xe0\x7e\xf0"
+ "\x37\xf8\x3e\x70\xf8\xc6\x7e\xdc\x67\x8e\xef\x6e\xac\xd3\x93\x00"
+ "\x9c\x1f\x86\xb4\x47\xee\x2e\x21\x5a\xa8\x6b\x10\x55\x6e\x8f\x66"
+ "\x7b\xef\x72\xb6\xc7\x99\x9b\xa9\x09\xf7\x7c\xf2\x35\xa9\x4f\x14"
+ "\x34\x70\x7b\xb4\x98\xff\xcf\x55\xcd\xd0\x06\xe5\x76\x8d\xd9\x7e"
+ "\x56\xb4\x09\xf7\x03\xf6\xb7\x6b\x68\xce\x76\x1d\xf7\x71\xb0\xff"
+ "\xb4\x24\x57\x39\x46\xf7\x7f\xcd\xe9\xf6\x76\x31\xa7\xdb\x27\x0a"
+ "\x51\x5f\xdd\x88\xff\x83\xee\x8e\xe0\x7b\x28\xf6\x57\x4b\x36\xb2"
+ "\x45\xcc\x83\xbf\xb1\x90\xfd\x3b\xb9\xac\xdd\x6f\x85\xb6\xe7\xf0"
+ "\xf7\xfb\x8b\x30\x0d\xda\x07\x3a\x6b\x7f\x38\xb6\xcb\x9b\x6c\x65"
+ "\xb4\x48\x25\x01\x50\xe7\xa9\xb8\xd7\x17\xed\x14\xb3\xed\x01\x13"
+ "\x8f\x5b\x7a\xc0\xc8\xce\x7a\xc3\x77\x80\x3f\x72\x94\x9b\x78\x36"
+ "\x1d\xcb\x73\xd5\xff\x93\x95\x52\x5d\xf0\x7b\xf8\x0e\xda\x8a\x31"
+ "\x8e\x91\x56\x3a\xcc\x83\x7c\x6d\xd0\xe3\xdc\x53\x1b\xd0\x0c\xf7"
+ "\x71\x1d\x28\x41\x9a\x70\x9a\x1d\x60\x67\x8d\x37\x74\xf1\xe1\xc0"
+ "\x32\x4f\x7a\xf0\x67\x41\x09\xb2\x21\x11\xf7\xf3\x1c\x28\x11\xe9"
+ "\x27\x9e\xc5\x3d\xf0\x18\xa3\x17\x7f\x27\x73\xfb\xed\x84\xae\xbc"
+ "\x3c\x46\xae\x1c\xd7\xc6\x71\xad\x84\xe3\xf5\x40\xb8\xdb\xef\xc2"
+ "\xe7\x9f\x47\x1b\xb9\x4c\x83\x31\x4d\x91\xe6\xed\x59\x07\xa2\x5c"
+ "\xf4\xe6\xe5\xf4\xf2\x8d\x89\xd2\x37\x20\x0f\x91\xea\x09\xfc\x11"
+ "\x75\xf0\x81\xf5\x2e\x9e\x7c\xb2\x4d\xfa\x5d\x29\x3b\x2f\xf6\xc9"
+ "\x6c\x3c\xe7\xda\xab\x1c\xc4\x35\x39\xb0\x2a\xaa\x1c\x0f\x98\x18"
+ "\x1e\xc9\x01\x07\xee\x55\x06\xba\x4e\xe5\x18\x3a\x60\xe1\xba\xf0"
+ "\x00\x5b\xaf\xc7\xf5\x2e\xee\xd3\xf6\x00\x8c\x9d\x3e\x11\x7d\x3f"
+ "\x1c\x54\xf2\x3a\x1c\x44\x0c\x90\xee\xe3\xba\x87\x16\x2c\x62\x07"
+ "\xba\xa7\xac\xd2\x77\x3f\x3b\xa6\x74\x9d\xdd\x3d\x38\xc3\x75\xf6"
+ "\x79\x9f\x8a\xd3\xfb\x60\x21\x8c\x53\x77\x16\x70\xdf\xc7\xbb\x0a"
+ "\x80\x67\xe9\x6d\x64\x3c\xc6\x02\x4a\xd3\xd3\xa6\x2a\x3d\x8c\xad"
+ "\x95\xbb\x27\xd1\x9c\xdd\xba\xb4\x36\x32\x12\xf7\xc2\xa0\xbc\xc1"
+ "\xbd\xb6\x34\x10\xd2\x73\x77\xeb\x5c\xe7\x2b\x3f\x9d\x06\x63\xdb"
+ "\x32\x23\x8c\x65\xd3\xcf\x92\xf1\x7c\x6f\xcb\xc1\x4a\x71\xbe\xf0"
+ "\x35\x21\x67\x77\x38\x9e\xdd\xad\x82\x56\xd1\xf4\x84\xd7\x84\xdc"
+ "\xdd\xe1\x50\xee\xb4\xf4\x65\x64\x0c\xea\x37\xdc\x43\xcd\x31\xf3"
+ "\x69\x18\x94\x3b\x0d\xfd\xea\x09\x34\x4e\x06\xdf\xcf\x10\x94\x7b"
+ "\xeb\x8d\x02\x61\x7b\xf7\x01\x67\xf2\x3a\x72\x68\x02\x7c\x3f\x03"
+ "\x63\x94\xe2\x3c\x90\xd9\x0e\xf5\xcc\xdd\x9d\x01\xef\x82\xe1\xdd"
+ "\x63\x70\x17\xd0\xc7\x1e\xfa\xec\x87\xf2\x35\x58\x3e\x7c\x2b\x83"
+ "\xd7\xdd\xca\xf2\x42\xbe\xb5\x98\x47\xf2\xdd\x27\xa4\xc7\x05\xe0"
+ "\x7b\x3c\x0b\xee\xc4\x18\x18\x29\x16\xc2\x7f\x53\xd3\xf5\x1b\xd1"
+ "\x7e\x86\xbe\xfc\xe9\x75\x34\xef\x93\x32\xc8\xbb\x0b\xf7\x0a\x73"
+ "\x5b\xf6\x53\xb5\xd8\xd7\xc1\x3e\xfe\x74\xb4\xf8\xbf\xaa\x2b\x6f"
+ "\x7a\x1c\x49\xbb\x48\x34\x6c\xbd\xfb\xa5\x00\x90\xbd\xff\x48\xc0"
+ "\x78\x1a\x6e\x65\x4e\xc7\xf2\x0c\xe8\x13\x70\x31\x51\x81\x5c\x1e"
+ "\x05\xf5\xc6\x58\x38\xa7\x70\x0e\x5d\xa4\xcd\x34\xe0\xd3\x8e\x0d"
+ "\xdc\xef\xe3\x4e\x23\x60\x3f\x6d\x2d\xd8\x03\x6b\x89\x6a\xad\x93"
+ "\x84\x61\x3b\x81\x6f\x8d\xb8\xdf\x1d\xc7\x6e\x48\x1b\x91\x87\x25"
+ "\xd0\x96\x6d\x6b\x13\x68\xfd\xda\x66\xda\x58\x99\x50\x43\x40\xcf"
+ "\x8c\xa9\xd2\x57\xa3\xff\xf9\x53\xd8\x56\x9c\xfb\x03\x9a\x96\x58"
+ "\xf0\x1b\xb9\xbb\xb7\xe1\x79\x28\x36\x4f\x20\x3f\x18\x2a\x9d\x1d"
+ "\x2b\x65\xe7\xcb\xfe\xd1\x15\xff\x0c\xea\x72\x50\xac\x4b\xb9\x80"
+ "\xff\x27\xb3\x33\xa8\x23\x71\xfc\x83\x73\x1a\xf3\x57\x6f\xed\x3a"
+ "\x3b\xc3\xe7\x06\xfe\x51\xee\xe6\x7b\x8d\xfd\x16\xe7\x08\xf0\xb7"
+ "\x31\x0e\xda\xb6\x41\xcc\x8b\xbf\x8d\x59\x3d\x9f\xe2\x6f\xe1\x37"
+ "\x8e\xae\xdf\x78\x9c\xe3\x3a\xc4\xed\x0a\xa0\x2d\xfe\x6f\x05\x5a"
+ "\x8a\x7b\xdb\xb4\x7c\x5f\xc2\xa7\x91\xd2\x5e\x00\xe8\x3f\xcd\x88"
+ "\xa7\xde\x7d\xc6\x7f\x3a\xcf\xd3\x0f\x56\x79\x38\xfa\xe8\x82\xf4"
+ "\x24\xc9\x5f\x15\xfc\x9f\x01\x65\xf0\xfd\x95\x6e\x7e\xe8\x0a\xdc"
+ "\x7c\x5a\xa6\x5b\xe9\xf7\x88\x13\x90\x2b\x01\xc0\xcb\x0a\x9a\xbb"
+ "\xb7\x9e\x9f\x85\x2b\x9f\x80\xf5\xac\x23\x9f\xa2\x8c\x0b\xe1\xfe"
+ "\x32\x3e\xfd\x56\x94\x1f\xbb\x62\x9c\x8e\x10\x0b\x7c\x13\xcf\x75"
+ "\xb9\x9e\x3f\x3d\x06\xf2\x44\x0d\xbf\x0d\xe2\x3e\x1f\x3f\xad\xf0"
+ "\xcc\xcf\xde\x67\x74\x7b\x8e\xea\xf6\xac\xb5\x41\xbf\xf1\xb6\xe7"
+ "\xc1\x38\x9e\xcd\x1f\xd6\x06\x67\x12\x7d\xfa\x19\x12\x00\x58\x39"
+ "\x8d\x75\xab\x6a\x6c\xc6\x36\x85\xd0\xac\x08\x82\xf3\xa0\xcc\xb6"
+ "\x04\x9d\x5e\x37\x09\xf2\x9c\x21\x63\x71\x3f\x3e\xc6\xc3\x81\xfc"
+ "\x4d\xdc\x57\xfd\xe1\x0f\xe7\xad\x1a\x49\x84\xe7\xe3\x46\x51\xf9"
+ "\x93\x4a\x5c\x73\x7d\xa7\xc3\x32\x0c\xd7\x1f\xd3\x36\x03\x26\x9d"
+ "\x64\x2c\x60\xac\x1e\x63\x0f\xc2\x6f\x9a\xff\xb3\xa3\x71\x98\xd9"
+ "\x71\x82\xe8\xff\x48\xe4\x4d\xe4\x70\x99\x22\x95\x28\x36\x34\x10"
+ "\x35\xf0\xd5\x71\xc0\x31\x95\x48\xfe\x2e\x4a\xc6\xf0\xb3\xfa\x25"
+ "\x20\x5f\x5f\xd4\x50\x7b\x7b\xd6\x61\x05\x8c\xbd\xe2\xa4\x31\xb6"
+ "\x81\xc7\xbc\x51\xc0\xf7\x57\xca\x45\xdf\x1e\x9c\xb6\x87\x1f\xe4"
+ "\x67\xe9\x42\x9f\x87\xdf\x4c\x75\xd9\xdf\x87\xc5\x73\x68\xfb\x94"
+ "\x5c\xf6\x1d\x3e\x78\x00\x46\xc1\xeb\xf9\xde\x91\x50\xc8\xbb\xa8"
+ "\x6b\xef\x08\x9b\xb7\x3a\x7c\x90\xe6\xee\x13\x6d\xf3\x7d\xca\xf9"
+ "\x4e\xa5\xd8\x07\x31\xbd\x4c\x83\xbf\x85\xdf\x85\xd8\xd8\x1c\xd3"
+ "\xe1\xad\x2e\xac\x1d\x46\x7b\x48\x06\x6d\x52\x01\x5f\x6b\xb1\x5d"
+ "\x48\x13\xc8\x07\xf5\x2f\xb7\x1c\xd8\xe6\xc5\xf7\xaf\xb2\xac\xdc"
+ "\xc1\xe6\x40\x9a\xca\x00\x4f\x67\x81\x07\xbf\x40\xff\x5e\x66\xf8"
+ "\x4e\x65\x69\x07\xa9\xd4\xb4\x92\x2a\xf8\x1f\xf7\x88\x9b\xfe\xf8"
+ "\x3d\xa9\xd7\xf6\xae\x6f\x40\x67\x45\x43\x9d\xe3\xb0\x2c\x94\x05"
+ "\xb8\xaf\xce\x9c\x0a\xfa\xc7\x0a\x65\xc1\x08\x04\xcb\xa8\x14\x1a"
+ "\x49\x65\x0a\x8c\xb3\x0c\xca\x1d\x55\xa5\x27\x48\x95\xe6\x0b\xf6"
+ "\x1d\xb4\x09\x4d\x89\xad\x7d\x95\x9d\x00\x65\xa7\x88\x65\x37\x43"
+ "\xd9\xa1\x5e\xcb\xce\x39\x53\x3d\xc0\xb2\x7d\xaf\x77\xce\x19\xd3"
+ "\x40\xca\x06\x7b\xb7\x02\x63\x1a\xe1\x79\xbb\xb4\x71\x24\xc8\x79"
+ "\x01\x7d\xbb\xde\x48\xf9\x3e\xe5\xcf\x37\xb3\x33\x79\x59\xec\x4c"
+ "\x53\x39\x3b\x9b\x77\x8e\xb0\xbd\xa6\xfc\x3c\xde\x69\x82\xfb\x54"
+ "\xda\xb3\x3e\x5f\xef\x1a\x2b\x75\xad\x1f\x82\xad\xfa\x79\x19\xdf"
+ "\x8f\xba\x4b\x5c\x8f\xff\xfc\x0f\x58\x56\xef\xf5\xf8\x88\xf0\x7d"
+ "\xcd\x9f\x77\xed\xb9\x6b\x0d\xfc\x88\x88\x65\x69\xbb\xcf\xeb\x49"
+ "\xc1\x87\x17\xa7\x24\x49\x71\x8c\x93\xc4\x23\xc6\x4f\x2e\x5e\xb8"
+ "\x78\x49\xf2\xe2\x45\xda\xd8\x55\x89\xcb\xa7\xac\x78\xee\x39\xed"
+ "\xac\xc5\x2f\xbe\xb8\xe0\xf9\xc5\x23\x49\x6c\xe2\x82\xe5\x2f\x2e"
+ "\xc1\xb9\x37\xad\x76\xc6\xaf\xe6\x27\xac\x48\x9a\xf2\xdb\x19\x11"
+ "\xdd\xe6\xde\xf0\x3c\x6a\x2d\xda\xe0\xa0\x3b\xc6\xa6\x39\xc9\x68"
+ "\xf4\xd5\x14\xb2\x9a\x9a\x5e\x86\xf1\x1f\xe0\xaf\x09\xf5\x14\xea"
+ "\x06\x1c\x1b\xa0\x9f\x48\x90\xdf\x15\xaf\xff\x85\x56\x37\x90\xef"
+ "\xe6\x82\x5d\x59\xf3\x06\xf7\x79\x58\x0b\x63\x72\x2b\x5f\x1b\xfc"
+ "\xee\x5e\xf4\x67\x98\x0f\x69\xd6\xc0\x7d\xca\x0d\xdf\x11\x05\xe8"
+ "\x35\x18\x97\x54\xd8\xa8\x7c\x04\x35\x8c\xa5\x07\xe9\xf7\x1a\x22"
+ "\xfa\x89\x97\x9b\x2d\x76\xdc\x67\xa1\x8c\x71\xa4\x53\x94\xa7\xbc"
+ "\x6f\x55\xb4\x71\xba\x6c\x4f\xe0\xfb\xbd\xbf\xbb\x0e\xc7\x30\xeb"
+ "\x58\xec\xd3\x4a\xe8\x3f\xfb\x2a\x5c\x72\xfa\x4b\xad\x68\x3b\xa2"
+ "\x2f\x99\x97\xea\xe0\x99\xfb\x92\xa9\x8c\xf0\xdc\x43\x63\x06\xbd"
+ "\x7c\x62\x06\xbf\xf0\x37\x27\x16\xf1\x0b\xff\x77\xbf\xbe\xb5\xf3"
+ "\xab\x7b\xfa\x60\x2f\xe9\xfb\x7e\x97\x51\xd3\xcf\xe5\xc3\xf7\x59"
+ "\xbb\xaf\x60\xfb\x07\x55\x86\xa5\xaf\x0b\xf1\x06\xd8\xaa\xcd\xff"
+ "\x8e\x28\x01\x9f\x45\xc6\x67\x01\xd3\xdf\x12\x4d\xaa\x83\xd6\xa7"
+ "\xff\x81\x84\xa5\x9d\x21\x18\x7b\xb2\x31\x29\x85\xd6\xa7\x5d\x40"
+ "\x9b\xf4\xcb\xf7\x01\xbf\xbb\x0a\xea\x88\xca\x58\x47\xd4\x55\x49"
+ "\x18\x97\x1a\xfd\xb9\x41\x4d\x9b\xe1\x82\xe7\x8a\x64\x3b\xf9\xdc"
+ "\x7a\x1e\xf7\x9d\x99\xaa\xe2\x41\xee\xd4\x12\x82\xf8\x55\xc5\x93"
+ "\xd0\x92\xb1\x74\x0f\xcd\xd2\xcf\xa3\x72\xfd\x4c\x48\x3b\xf6\x9e"
+ "\x10\x35\xec\xbd\x35\xe5\xc3\xb4\xcf\xa2\x8e\x37\x7f\x28\x62\xf3"
+ "\x26\x7e\xd6\xeb\xcb\x9b\x10\x83\xd0\x4f\x8e\xf1\x79\xf5\x2f\xb7"
+ "\x70\x7d\xfe\x25\x1b\x07\x71\x5f\xcd\x5f\x32\x5b\x11\xda\xb1\x0b"
+ "\x63\xf5\x62\x99\xef\x0a\xbb\x58\xac\xde\xf7\xd6\x44\x0d\x4b\x5d"
+ "\x40\xe4\x55\x16\x18\x99\x80\x1c\xc4\xf5\x58\xe8\x77\xdb\xa1\x9f"
+ "\xed\xd8\x32\x96\x16\x42\xfd\x0c\xa5\x63\x69\x0e\xd4\xa9\xac\x3d"
+ "\xab\x7a\x92\x85\x7c\xa6\x11\xd7\x5d\x4c\xd0\x2f\xb6\x1b\x21\x4f"
+ "\xcc\x2a\x72\xa3\x11\xf2\x15\x40\x3e\xb4\x93\x79\xfd\xbe\x38\x03"
+ "\x34\xd8\x09\xdf\xac\xd6\x3e\x83\xcf\x47\xd8\x19\x40\xfc\x36\xb4"
+ "\x43\x5b\x47\x8e\x24\x81\x6e\x53\xe0\x37\xa4\xef\x42\xf9\x20\xff"
+ "\x3e\x63\xf3\xa4\x58\x2e\x2f\xa7\x5a\x3c\xaf\xb1\x7b\xe6\x06\x57"
+ "\x2c\xe5\x99\xc6\x35\xa0\xd3\x3b\x98\x9f\xd3\x22\x9c\x6f\x41\x1b"
+ "\x83\xd9\x15\x4e\x12\xc2\xe7\x07\xc0\xb6\x48\x00\x39\x00\xf6\x04"
+ "\xdb\xa3\x0e\xb6\x04\xd4\xa5\x08\x63\x7a\xe2\x7b\x18\xb7\xed\x04"
+ "\xbd\xbc\x03\xed\x80\x67\xda\x7e\x8f\xeb\xae\x04\xe3\xf1\xbe\x38"
+ "\x8f\xda\x79\x5c\xa4\x23\x6a\xc9\x16\x40\x19\x84\xfa\x1f\x6c\x61"
+ "\x45\x27\xf0\x10\x30\x50\x0e\xb6\xc5\xe8\x26\x72\x64\xa6\x48\xfb"
+ "\x72\xa6\xf3\x93\x99\x5f\xee\x00\x2e\xa3\x8f\xcc\x85\xf6\xa9\xe0"
+ "\x1b\x60\x8f\x7e\xc7\xe6\xc2\xb9\x8c\x39\x92\x20\xe9\x71\x1c\xf3"
+ "\x5a\xa0\x0c\x0a\xb2\x4c\x7c\x07\xed\x2f\x97\xce\xdc\xd7\xc2\x3b"
+ "\x8d\x48\xb3\x0a\xa0\x19\x96\xc9\xc6\xfe\x36\xb0\x15\x38\x6d\x8e"
+ "\x4c\x42\xbb\x42\xfc\xad\x49\x2a\x17\xc7\xe5\x02\xd8\x15\x48\x2f"
+ "\xa4\x13\x94\x33\x49\x94\x63\xc7\xb8\xfd\xf2\x05\xdb\x33\x81\xb4"
+ "\x07\x5e\xaf\x77\xd1\xff\xa8\xc2\x9d\xfe\xf0\xfb\xf5\x22\x2f\xd7"
+ "\xba\xf1\x0e\xc6\x46\x5f\xc4\xe2\x3c\x29\xd4\x71\x0f\x9f\xe3\x39"
+ "\x3a\x1d\xfd\xe1\xa1\xff\x6d\xa0\xf1\x1e\x03\xfa\x7a\x06\xd9\xbc"
+ "\xee\x3b\x90\xb9\xcf\xa2\xfd\xf4\xc5\x74\x6e\x9f\x1e\xad\x45\x0c"
+ "\x37\x90\xa3\x6c\x1e\xbe\x1e\xea\x85\xe5\xc1\xf3\x3b\x70\x07\x3b"
+ "\xf6\xe8\x5b\xee\xb1\xb3\x5d\x71\xb3\x8f\x96\xb8\xce\x89\x1c\x61"
+ "\xf3\xd2\x78\xc7\x39\x30\x96\xbf\x33\x01\xeb\x56\x8b\xfd\x52\x6a"
+ "\x2b\xc6\xd0\x86\x74\xb4\xfd\x6b\x91\x6f\x52\x3a\xfa\x89\x06\x3e"
+ "\xa9\xa0\x4e\xf7\xf2\x3a\x7d\xa1\xe6\x71\x06\x8f\x66\xe0\x33\xc6"
+ "\xd3\xde\x80\xbf\x49\x73\xfd\x06\xfb\x0d\x60\x38\x04\x7e\x33\x05"
+ "\xee\x54\xca\xcb\xe3\x6c\x1f\xdd\xb9\xa9\x03\xe7\xc0\x8e\x56\x48"
+ "\x71\xb6\x31\xc6\x36\xca\x0c\xe3\x33\x1e\xb4\x47\xda\x6c\x07\x5e"
+ "\x31\xdc\x1d\x70\xec\x02\x7a\x7f\x01\xf6\xff\x1e\xf1\x2c\xd4\xd1"
+ "\x9d\x62\xfd\x4c\xdc\x47\xce\xe7\xcd\xcc\xa7\x33\x1b\x0f\x7d\x51"
+ "\xe2\xda\xb3\x22\xd9\x96\x47\x99\xff\x2d\x28\xab\x02\xf9\x8f\x76"
+ "\x22\xe4\x3b\xd8\x85\x2d\x76\x0e\xfb\x8b\x19\x68\x5f\x8a\xf5\x47"
+ "\xbc\x4c\x16\x69\xd7\xec\xde\xef\xdc\xfb\x79\x7b\xd6\x31\x18\xff"
+ "\x1f\xee\xc2\x80\xd4\xaf\x39\x0e\x8e\x4f\xe7\x7d\xb1\xa9\x0c\xfd"
+ "\x34\x43\xb9\x26\xb4\xc1\xb9\x5e\x3d\xae\x3e\x50\xcb\xf6\x34\x1c"
+ "\x83\x67\xe8\xdf\xc7\x9a\x5b\x47\x7e\xb2\x63\x3d\x93\x1b\xc7\x60"
+ "\xfc\x13\xc1\xf8\x87\x74\x91\xfa\xeb\x86\x67\x70\xec\x17\xc1\xfb"
+ "\x6c\x4a\x3d\xa9\xb2\x37\x13\xf1\x0c\x06\xf4\xd9\xd3\xb8\x76\xda"
+ "\x04\x18\x52\x62\xff\x05\xfe\x6e\x47\x9f\xe2\x40\xc7\xea\xf5\x7f"
+ "\x61\xfd\x56\x85\xfd\xb6\x13\xfd\x84\xc0\x77\x0e\xc6\x47\x91\x03"
+ "\x29\x26\xd6\x8f\xd1\x47\xcc\xeb\x40\x3b\x8c\x69\x0d\xdf\xae\x91"
+ "\xf6\x8e\x23\x46\xd0\x27\x8c\x88\x13\x2d\xf6\x65\x91\x76\x8a\xf6"
+ "\xac\xe3\x44\xea\x7b\x6e\xfc\x67\x79\xba\xf5\xb7\x10\xde\xdf\x8e"
+ "\x47\x48\xb4\x76\xb0\x7e\x7c\xb4\xc2\x01\xfd\xd8\x9d\xa6\x48\x4f"
+ "\xa4\x2b\xe4\x85\xf6\x7f\x96\x24\xd1\xd4\x8d\x9e\x95\x22\xcf\xab"
+ "\xf9\x1c\xd3\x71\xee\x07\xdb\x8d\x86\x22\xfe\x30\x16\xf1\xae\x75"
+ "\xd8\x76\xd0\x0d\xf8\x7d\xc4\xc8\xeb\xa2\xcc\x3a\x68\x45\x8c\x1c"
+ "\x87\xfe\xff\x54\xb1\x4b\x76\x1c\xad\x66\x63\x16\xe0\x93\xc8\x9f"
+ "\x8b\xcc\xa7\x4a\x2f\xb2\x03\x70\xb2\xcb\x25\x9f\xbe\x54\x4a\x74"
+ "\x90\x30\x29\xf5\x7b\xd0\x23\x73\x3c\xe5\xcf\x97\xf7\x43\x19\x63"
+ "\x50\xbe\xb9\x6c\xa8\x2f\xa3\x3d\xe5\xdb\x97\x11\x28\xdf\x10\xd7"
+ "\xfa\x64\x9c\x63\xe3\xfa\xca\x42\xcc\x35\x9e\x32\xc9\x5c\xc9\xf7"
+ "\x06\x70\x9b\x0b\xb1\xa5\x7f\x86\xe7\x47\x1d\x06\xf9\xd9\x58\x5c"
+ "\xd4\x79\x5a\xd4\x71\x90\x76\x50\xa4\x57\x2d\xe4\x3f\x88\xe7\x59"
+ "\xd1\x87\xc5\xa8\x5a\x3e\xd6\x03\x39\xbd\x07\x7d\xb4\x43\xbe\xf5"
+ "\x55\x60\xe7\x77\x66\x73\xd9\x2d\xc9\x0a\xba\x30\x6e\xd4\x4b\x8d"
+ "\x24\x50\xff\x5b\xfa\x7d\x03\xf9\x6a\x31\xf4\x19\x3b\xfa\x09\x85"
+ "\xb2\xb5\x0d\xe4\xc4\x14\xf8\x6e\xa8\x78\xd7\xc0\xfd\x3a\xb8\x8f"
+ "\x6b\x20\x5f\x3b\xe1\x7e\x03\xdc\x4f\x43\x7e\x41\xcc\x1f\x01\xcf"
+ "\x95\x90\xfe\x2b\xf1\x0e\x75\xfc\x6a\x1e\xdc\x67\x8b\xb6\x23\xa6"
+ "\xbf\x89\xcf\x70\xff\x93\xc8\xf3\x0a\xce\xf3\xaf\x72\xa1\x9c\x14"
+ "\xa8\x7f\x8d\xb9\x96\x95\xa5\x87\x3c\x4f\x60\xd9\x78\xbe\x1c\xfe"
+ "\x1f\x46\x5c\x36\x28\x94\x53\x73\x0f\xdc\x23\xe1\x77\x6d\x70\x4f"
+ "\x82\xfb\x61\x91\x06\xd5\x28\x1b\x16\xa5\x20\x6d\x8f\xe3\xbc\x00"
+ "\xe1\xdf\xe3\x7d\x1e\xf5\xb0\x4b\x76\x1c\x99\xb4\x68\x1e\xe7\x37"
+ "\xe4\x65\x38\x80\xbc\x0f\x62\x5e\xb8\x3f\x2c\xde\xa3\xc4\xfb\x23"
+ "\xe2\xfd\x51\xf1\x3e\x43\xbc\x03\x9f\xbf\xaa\x10\x6d\x0c\xa0\xcb"
+ "\x57\x2c\xde\x01\xc8\x6e\xf1\x8c\x4a\x4d\x33\x8e\x91\x41\x8e\xdf"
+ "\x0b\xe5\x07\xb4\x67\xd5\xc4\x4b\xf3\xa3\x38\xe7\xd3\x99\x55\x31"
+ "\xe2\x75\xb6\xae\x5d\x93\xe2\x92\x6d\x7b\x6b\x54\xb2\x28\x02\x36"
+ "\xd0\x75\x25\x72\xd0\xff\xbc\x9c\x6a\xb9\xb8\x2e\x2c\xc6\x7f\x08"
+ "\x40\x9f\x88\x6c\x3c\x14\x24\xd7\x60\x5f\x65\x73\xc7\xe8\xbf\x2f"
+ "\x70\x6f\x2d\x5c\x8d\xd6\xc0\xbd\xcd\x92\xfc\xc6\x71\x0f\x1f\xab"
+ "\xa3\xff\xdf\x9a\x7a\xd7\x58\xbd\x86\xcd\x79\x07\x68\xae\x5f\x09"
+ "\xe9\x0e\xb7\x74\x8c\x47\x7b\x2f\xd0\xb3\x06\xda\x13\x59\x47\xbe"
+ "\x9e\x04\xf7\x5f\xd6\xf3\x36\x47\x48\x6d\x16\xf9\xa1\x97\xe8\x5b"
+ "\x4f\xbe\x3a\x06\xb2\x30\x11\x31\x5c\xd7\x25\x67\xbf\x62\xf3\xba"
+ "\x22\x46\x80\x97\x5f\x19\x91\xa7\x6e\x7d\xd0\x5d\x06\x85\xb6\x67"
+ "\x7d\xbd\xde\x53\xa6\x1c\x59\x8f\x32\x05\xb1\x01\xf2\x1b\x79\xbd"
+ "\xa8\x5b\xff\xc3\xb9\xfe\x31\xbc\xdf\x7d\x6d\xf2\xfc\xed\x97\x11"
+ "\x0e\xde\xef\x6a\x00\x67\x80\xcf\xaf\x66\x20\x7f\x2c\xe4\xeb\xad"
+ "\x62\x9f\xae\x81\x3e\x7d\x2f\xa4\x87\xf3\xba\xf2\x74\xf1\x5b\x80"
+ "\xb3\xaf\xb0\xdd\x37\x48\xe9\x62\x7b\xb1\x9c\x30\xe4\xb7\x94\x2e"
+ "\x96\x8f\x78\x44\x0c\x69\xa4\x74\xb1\x4d\x60\x47\x9d\x88\x93\xe4"
+ "\x89\x81\xe1\xed\x98\x45\xfa\x1d\xf2\x0d\x7d\xa0\xf1\x39\xfe\x13"
+ "\x33\xa0\xaf\x6e\x45\xfd\xb0\xee\x19\xa2\x7a\xa9\x98\x04\xf1\x7e"
+ "\x79\x62\x86\xa7\x8c\xfc\x76\x32\xcd\x0a\x71\x50\xe5\xde\x63\x95"
+ "\x8e\x48\xc9\x5e\x2d\x81\xef\x98\xa4\x98\xee\xae\x58\x12\x27\xda"
+ "\x2a\xb7\x76\xd1\x17\xeb\x52\x2f\xd5\xc5\x4d\x3f\x33\x1e\x60\xdd"
+ "\xb0\xac\x75\x60\xaf\xdb\x40\x2e\x70\xb9\xfd\x4d\xa8\x85\x8c\xda"
+ "\x23\xc9\x54\xd4\x5b\x21\x32\xa2\x2f\x48\x66\xeb\xa3\x21\xa8\x1b"
+ "\x71\x8f\x8f\x80\xf3\x58\x29\x4e\x52\xa5\x87\xb1\x7c\xca\x69\x32"
+ "\x7f\xf5\x48\xf4\x89\x13\x07\x75\x0d\x84\xba\x6d\x73\xe2\xdc\xff"
+ "\x72\x1c\xa7\xd6\x7e\xec\x4c\xa6\x76\x91\x66\xd0\x8f\x6a\xdf\x14"
+ "\x69\x8b\xf2\x6b\x1b\xca\xf4\x75\x69\x3c\x2e\x14\xce\xe5\x60\xff"
+ "\xd8\x84\x7a\x4c\x43\xed\x07\x4b\xb0\xaf\x7c\xb3\x4d\xb2\x49\xa1"
+ "\xbe\x5b\xb9\x4d\x78\x9c\xc5\x9a\x81\xbe\x73\x8c\xcf\x05\xd6\xde"
+ "\xc3\xdb\x5e\xab\xe1\xeb\xdc\xcc\x0f\x2a\x3e\x2b\x02\x34\x63\xbf"
+ "\xe2\xfb\xb2\x2a\x6e\xe6\x7b\x4a\xbe\xb1\x75\xed\x29\x71\xd9\x8a"
+ "\x61\xdc\x37\x58\xad\x9b\xff\xd3\x6f\x2c\xf8\x3b\xf8\x7d\x13\xa4"
+ "\xeb\x5c\xe9\x78\xac\x80\xf9\xed\xad\x09\xce\x8c\xc2\xbd\x65\xd7"
+ "\xa1\x3f\x75\xf1\x7b\x39\xec\xfb\x6c\xce\x03\xfa\xa6\xd8\x7f\x91"
+ "\xce\xa8\xb3\x59\x1f\x86\xfe\x8b\xfd\xb8\x33\x77\x6f\x2d\x5c\xbc"
+ "\xdf\x72\xdd\x1c\xc6\xfa\x2d\xeb\xb3\xb5\xc5\xae\xef\xd5\xce\x66"
+ "\xf3\x5e\xc8\xcf\x97\x35\x2a\x78\xb7\xd3\x42\x3e\x0f\x17\xeb\xc8"
+ "\xfc\xd0\xa0\xdf\x17\xc7\x05\x6a\xc5\xb5\x6d\x5c\xeb\xc4\xb3\x73"
+ "\x21\x80\x6e\xf4\xd5\x22\xad\x55\xcf\x6a\x4e\xa7\x4e\x5c\x77\xba"
+ "\x40\x6d\x85\x5d\xf1\x1c\xbe\x25\x2e\xbf\x4b\xdf\xc4\x8b\xed\xc2"
+ "\xf8\x23\x25\x7c\x2f\xd8\x37\x4f\x70\x9b\xea\x9b\xd9\x88\x53\x33"
+ "\x60\x0f\xee\xc5\x3c\x06\xf7\xb7\xd3\x24\xec\x41\xbf\x5c\x04\x7c"
+ "\xaf\x2c\x1a\x4b\x8b\x81\xa7\xc5\xd0\x97\x96\xc2\xf3\x6e\xb8\x2f"
+ "\xe2\x77\x99\x1a\xef\x62\x1f\x01\xdb\xf6\xdb\x14\xc0\x58\xbc\xd4"
+ "\x3f\x6c\x81\x4d\xe8\x7b\xbd\xb6\x00\xe8\x80\x58\x63\xeb\xc8\x50"
+ "\x6f\xc4\x17\xe2\x0c\x31\x16\x92\xf9\x7b\x86\x33\xe6\x17\x02\xd2"
+ "\xb1\xbe\x88\x33\x28\xeb\xa0\xe4\xcb\xd9\x42\xbe\x65\xe7\x1b\x21"
+ "\xad\x46\xda\xa3\x8b\x6b\x49\x49\x37\x91\xeb\xa0\x5c\xed\x41\x2d"
+ "\xf3\x97\x7a\xd2\xec\x78\x84\x60\x5e\x5c\x87\xe3\x72\xf2\xfa\x83"
+ "\xed\x59\xdf\xa9\x5c\x34\x3f\xc2\xce\x96\x1c\x98\xc7\xe6\x22\x7f"
+ "\x01\xef\x74\xee\xe3\x0c\x0b\xa9\xb0\xe1\x58\x03\xf7\xf6\xdd\x12"
+ "\x4a\xb4\x80\x5b\x90\x63\xdf\xcd\x94\xec\xda\xbb\x43\x71\x3d\xbf"
+ "\x62\x2b\xd4\x0f\xc7\xd0\xd5\xf0\xbf\x01\xc6\x92\xe5\x5e\xe6\x8c"
+ "\x23\x71\xae\x47\x8c\xc1\x54\x8b\xf3\x58\x18\xb3\xa2\x81\x9c\xaa"
+ "\xac\x44\x1f\x2d\x2b\x7a\xfa\xf2\x4e\x4b\xa1\x6d\xe8\xcf\x5b\x9b"
+ "\x48\x7e\x51\x47\x4e\x61\x4c\x96\x9a\xf4\xf3\x38\x47\xf3\xdd\x31"
+ "\xcf\x39\x9a\x93\x93\xc4\x6b\x2a\x5c\x25\xae\xcb\x12\x2e\xfe\x5f"
+ "\xd6\xf7\x65\x99\xc1\xf3\x5a\x66\xc3\x35\x8f\xd3\x4a\x03\xfd\xe4"
+ "\x64\xd7\xfc\x2f\xe2\x12\xfb\x36\xee\xe3\xc0\x39\x27\x99\x83\xa0"
+ "\x4f\x18\xe0\x13\xd4\x7b\xdd\x1d\x4f\x9a\xd6\x20\x8e\x4e\x2e\x61"
+ "\x63\x07\xf9\x40\xcf\xae\x9e\x64\xfc\xe4\x3e\x5f\x4f\x86\xc3\xb7"
+ "\x43\x37\x9c\x23\x0a\x7d\x22\x99\x80\xf3\xdf\x21\x4e\x6a\xc2\x31"
+ "\xae\xe8\x37\xb2\xba\x89\x58\xa6\x24\xad\x25\x72\x78\x7f\x23\xfc"
+ "\x1f\x26\xd9\x49\xf0\x1b\x75\x80\x9d\x84\xa2\x7d\xf4\xf0\x5a\x72"
+ "\x23\xd4\xdf\x2e\xf1\x0a\x6d\x08\x9c\x87\x13\xe7\x12\xb0\xae\xf7"
+ "\xe3\xef\x30\x16\x81\x85\xd1\x8d\xc9\x61\x2c\x03\xf0\x71\xb2\x3e"
+ "\xc0\x46\xd4\x5c\xf7\x58\x00\xff\x15\xa2\xcd\x68\xc1\x58\xdc\xc7"
+ "\xdc\xea\xf9\x3b\xb7\xff\xb3\xf1\xf7\x21\x36\xb4\xcf\xbc\xd1\xc7"
+ "\x92\x2b\xd1\x07\xf7\xab\x86\xc0\x38\x81\xf1\xdb\x41\x9b\xa1\x6e"
+ "\x15\xfa\x35\x44\xd9\x44\x4e\xad\x7e\xe3\x2f\xec\xfc\x63\x39\x9f"
+ "\x9f\x3f\xb5\x4c\x1a\x87\xf3\x7a\x9f\xba\x3f\x24\x33\x80\xe0\xbc"
+ "\x3a\xfa\xb4\x63\x7b\xfd\x7e\xd2\xb0\xb9\x74\xb3\x63\x1a\x31\xa5"
+ "\xfd\x1a\xf3\x48\x76\x55\x6d\x6b\xba\x86\x1c\xd0\x4c\x83\x7e\x7c"
+ "\x4a\x01\x7d\xe5\xd8\xc0\xf7\x54\x9e\x52\x88\xf4\xad\xe0\x7b\x11"
+ "\x2c\xc7\x51\x97\xe0\xd8\x1f\xf4\xc8\x41\xd4\xd1\x50\x76\xbc\xd4"
+ "\x6f\x40\x6f\x40\x3f\xb5\xf0\x58\x36\x39\xb8\xfe\x6b\xa9\x46\xdf"
+ "\x1c\x6c\xdc\xc0\xf3\xab\xf8\x9c\xff\xa9\xa2\x2e\x5b\x1a\xf2\xe1"
+ "\xef\xf8\x1e\x35\x4b\xd9\x7c\xa7\x0c\x68\x6a\x29\xc3\xb6\x89\x58"
+ "\x04\x7d\x75\xea\xa0\xab\xdf\x5a\x18\xee\x0f\x34\xbb\xf7\xcb\x53"
+ "\xf5\xae\xf1\xe6\x77\xc5\x53\x8a\x88\xb6\xb7\x7e\xa8\x0f\x46\x5d"
+ "\x55\x37\x67\xc3\x06\xba\xb5\x50\x2e\x3c\xb4\xae\x80\xa8\x64\x06"
+ "\x20\x1b\xf6\xb3\xe4\xf8\xeb\x1a\x48\xdd\xe2\x10\xd5\xf5\xb3\x1f"
+ "\x4e\x1a\x41\xd3\x34\x44\x6e\x6c\x19\xa1\xbc\xc9\x7e\xfd\x56\x1a"
+ "\x70\xc7\x93\xb3\x92\xec\x44\xfb\xc7\x42\xf2\xc3\x52\x12\xf0\xb0"
+ "\x13\xbe\xad\x22\x7a\x0b\xa9\xd7\xe3\xca\xf3\x01\x15\xda\x1f\xf5"
+ "\x7a\x2c\x33\xb5\x84\x28\x53\xeb\x69\xa3\xe1\xb9\x61\x4a\xd0\x07"
+ "\xea\xd7\x01\x63\xa3\x54\xd7\x6f\xed\x84\x32\xf6\xc7\xb3\xdf\xed"
+ "\xe8\xa3\x6e\xe7\x7b\xaf\x9b\x7e\x6c\x03\xf9\x5e\x36\xb0\xba\x35"
+ "\xa8\x5d\x75\x6b\x50\x0f\xbe\x6e\xdf\x1b\xdd\xea\xa6\x76\xd5\x2d"
+ "\x01\xeb\xb6\x65\x60\x75\xfb\x61\x87\xab\x6e\x3f\xec\xf0\xb1\x6e"
+ "\xdb\xbd\xd7\xad\xfe\xf6\xde\xeb\x96\x72\x7d\x03\xa9\xbf\x7f\x60"
+ "\x75\x3b\x33\xdb\x55\xb7\x33\xb3\x07\x53\x37\x1c\xcb\xa7\x85\xd1"
+ "\xd3\x2c\x66\x40\x22\xf7\xc9\xdb\x40\x4e\x6f\x4e\x2b\x61\xcf\x63"
+ "\xe0\xff\x39\x62\xff\xb6\xa6\xdb\xe8\xf7\xdc\xce\xa9\xdf\x7f\x97"
+ "\x1e\xf7\xbb\xd6\xef\x02\x2c\x8b\xfb\xf1\x4f\xb3\xfd\x0d\xe9\x56"
+ "\x2a\xee\x37\xad\x3f\x55\xca\xf6\xa3\x1c\x10\x63\x6e\x9f\x9e\xd4"
+ "\x3a\x72\x9f\x1a\xf7\x82\x08\xd0\x9f\xe9\xc8\x7d\x61\x18\xa3\xf5"
+ "\xbd\x44\xab\x9c\x66\xa1\x4f\x37\xf4\xc3\xa8\x20\x34\x6f\x5f\xf8"
+ "\x7b\x89\x76\x16\x1f\x7e\x1d\x3b\x87\x7d\x3a\x4c\x3a\x7b\x28\x7d"
+ "\xc3\x1a\x78\x20\x0e\xd2\x23\xa5\x58\xbf\x54\x0e\xf6\x4c\xe0\xbe"
+ "\x50\x2c\x1f\xd2\x67\x4a\xf1\x77\x01\xef\x16\x51\x36\xd8\x42\xec"
+ "\x7d\xc9\xbd\xd3\x99\x92\xdc\x7b\x38\x89\x84\x60\xec\xd1\x0d\x69"
+ "\x23\x70\xcd\xd1\x0a\xdf\x54\x23\xdd\x63\x6c\x23\x68\x48\x2a\x09"
+ "\xc0\x33\x97\xb8\x47\xcf\xac\xb1\x92\x49\xa9\x64\x58\x4c\x0a\x94"
+ "\x69\x27\xf1\x21\x29\x50\x1e\xd0\x9a\x8f\x0d\x4e\xb3\x39\xbe\x22"
+ "\x28\x0f\xd7\xbf\x03\x92\x88\xea\x61\x4d\x3a\x5d\xb7\x99\x28\xf0"
+ "\x7c\x26\x9e\xb3\xe4\x67\x2c\x87\x2b\xa1\xbe\x0e\xa9\x7d\x3e\xf0"
+ "\x27\x98\xf3\xe7\x87\xfb\x5d\xfc\x69\x68\xeb\xc9\x9f\x86\x05\x9c"
+ "\x3f\x0d\x71\x2e\xfe\xfc\x50\xe2\xc9\x9f\x86\x4c\x4f\xfe\x34\x1c"
+ "\xf4\x8f\x3f\x0d\x7b\x5c\xfc\xe1\xdf\xe0\xfc\x69\x38\xd6\x3b\x7f"
+ "\x1a\x9a\x5d\xfc\x69\xc8\xf0\x8d\x3f\x3f\xdc\xe4\x9d\x3f\x0d\x3b"
+ "\xfa\xe0\xcf\xf0\xde\xf9\xf3\xc3\x4a\xdf\xf9\xf3\x43\xc9\x00\xf8"
+ "\x13\xc4\xf9\xd3\xf8\xb5\x8b\x3f\x8d\x7f\xee\xc9\x9f\x46\x19\xe7"
+ "\xcf\x0f\x76\x17\x7f\xce\x4c\xf3\xe4\x4f\xe3\x4d\x9e\xfc\x69\x5c"
+ "\xe4\x1f\x7f\x1a\xe7\xb9\xf8\xc3\xbf\xc1\xf9\xd3\x98\xd4\x3b\x7f"
+ "\x1a\x0d\x2e\xfe\x34\x6a\x7d\xe3\x4f\xe3\x7e\xef\xfc\x69\x9c\x3d"
+ "\x70\xfe\x9c\x19\xdd\x8d\x3f\x6a\xef\xfc\x39\x33\x6d\x00\xfc\x09"
+ "\xe1\xfc\x69\x5a\xed\xe2\x4f\xd3\xbd\x3d\xf9\x73\xe6\x4d\xce\x9f"
+ "\x33\xc5\x2e\xfe\x34\xd5\x7a\xf2\xe7\xcc\x7e\x4f\xfe\x34\x29\xfc"
+ "\xe3\xcf\x19\x87\x8b\x3f\xfc\x1b\x9c\x3f\x4d\xa1\xbd\xf3\xa7\x29"
+ "\xdc\xc5\x9f\x33\x26\xdf\xf8\xd3\xb4\xc0\x3b\x7f\xce\x58\xfb\xe0"
+ "\xcf\x88\xde\xf9\xd3\xf4\xbe\xef\xfc\x69\xaa\xed\x8b\x3f\x03\xb3"
+ "\xf5\x9a\x58\xac\x9a\xc1\x97\xf3\xe3\x54\x6f\xe5\x20\xed\x70\xff"
+ "\xa1\x90\xf5\xe3\xd4\x52\x61\xb8\x92\x9f\xd1\x68\xb2\x6a\xd7\x90"
+ "\x07\xea\xc8\x8f\xaf\x94\x0a\xc3\x94\x34\xeb\xed\x9d\x42\xd6\x7f"
+ "\xcf\xa3\x99\xc3\x15\x42\xe6\x08\x05\x9e\x99\xef\xad\x2c\xbe\x1f"
+ "\xf6\xc7\xd3\x01\xe3\xc8\x44\x3c\x47\xb7\x0e\xec\x65\xfc\xbf\x3d"
+ "\xeb\x47\xa0\xfb\x9e\x92\xbe\xce\x6f\xe1\x5e\xa7\x03\xeb\x71\x7c"
+ "\xdb\x1c\xd6\xe5\xaf\x24\x8b\xa6\xa0\xdf\x37\xfd\xcd\x78\xce\xa2"
+ "\x79\x06\xfa\x73\xa7\x39\xbb\xd7\x47\xdd\x4c\x4f\xe2\xd8\xa3\x81"
+ "\x9c\x7d\x90\xe6\xee\x5e\x8f\x78\x00\x5b\xfd\x17\x90\xc7\xd0\xb5"
+ "\x3f\x8f\xc6\xbd\x26\xce\x11\x46\xf0\xbc\xe7\xde\x87\xbc\x11\x18"
+ "\x6b\xf6\xc5\x34\x8c\xa1\x7a\x6e\x33\xd8\xbe\xb7\xe2\x37\xd0\xa7"
+ "\xd5\x1b\x70\xc7\x7d\x32\x7c\x6f\x66\x33\xf7\xdd\xb3\xee\x86\xd7"
+ "\xf8\x5e\xb8\x73\x99\x12\xee\xe0\x3b\x23\xe1\x79\x89\x68\xcf\x63"
+ "\xfe\x51\xf0\xfc\x84\xdb\x7b\x15\x3c\xe3\x3c\xe4\x68\xf1\x7d\x10"
+ "\x3c\x8f\x43\x3b\x9b\xf9\x5f\x29\xc8\x10\xf7\x10\x9f\x75\x40\x9a"
+ "\x5a\xcc\x33\xba\x89\x9c\x3d\x85\xb6\xbb\x58\xc6\x18\x78\x3e\x84"
+ "\x63\x60\xf1\x7d\x28\x3c\xbf\x8d\x6b\x07\xe2\xfb\xeb\xe0\xd9\x08"
+ "\xcf\xb7\xf1\x33\x2f\x9d\x62\x1f\x3d\x1b\xe7\xdf\x59\xfe\xb3\xcc"
+ "\xf7\x22\xf2\x80\x8f\x05\xce\xba\xed\xff\x39\x1b\xd5\xed\xdd\x1e"
+ "\xb7\x77\x11\xd2\x3b\xbe\x47\xed\x6c\x8d\xdb\x3b\x6d\xb7\x77\x36"
+ "\xb7\x77\x6a\xcf\x32\xcf\xa9\xdd\xde\x11\xcf\xdf\x9d\x0b\x77\xbd"
+ "\x6b\x6e\xee\xf6\x2e\xda\xed\x5d\xad\xf8\x2e\x00\xd2\xe3\x5d\x6b"
+ "\x78\xcd\x15\x62\xba\x1c\xd2\x53\xdc\xd2\xf7\x88\xe9\xf8\xfd\x42"
+ "\x0b\x29\x11\xc7\x2a\x9c\xf7\x62\xf9\x65\x6e\xe5\x1b\xf8\x1c\xc7"
+ "\xb9\x3d\x5d\x7b\xe7\x46\xee\x4b\x10\x3a\xe3\x5e\x83\x77\x49\x88"
+ "\x2b\x77\x6c\x2f\x4f\xd6\x3e\xbb\xea\x79\x6d\xe2\xe2\x24\xdc\xbe"
+ "\xb2\x6c\x49\x92\x76\xd9\x8a\x45\x8b\x3d\x7c\xe9\x87\xa2\x2f\x48"
+ "\x8c\x9b\x87\x3e\x75\x58\x8c\x8a\xbf\xd0\xc6\xae\xb8\x2e\x20\x57"
+ "\xdb\xb3\x7e\xd2\x59\xc8\xef\xa6\xe2\xb7\x8a\xb8\xcf\xf9\x72\xf4"
+ "\xc9\xc3\xfd\xef\x90\xdf\xd7\x91\x9f\xa6\x88\xfe\x77\x4c\x90\x37"
+ "\xd6\xbb\xff\x9d\xf3\x11\xcc\xef\x24\xe4\xe3\xfe\x77\xce\x47\x42"
+ "\x3f\x7f\x98\x8e\xe4\x71\x5a\x78\xfc\xba\x9f\x24\xdb\xc4\x3a\xff"
+ "\x22\xf3\xdd\x98\xc1\xe7\x32\xba\xfb\xd1\xdd\xbd\x08\x7f\x27\xae"
+ "\x97\x2e\x72\xfb\xbd\x89\xbf\x97\xf4\x83\xf8\xcd\x9c\xdd\x09\xf0"
+ "\x3c\xb2\x0e\x9e\xd9\xfc\x3d\x7b\x67\xe5\x73\x79\xb9\xbb\x97\x62"
+ "\x9b\xb0\xdd\x9e\x6d\x93\xff\x5b\x1d\xb1\x06\xba\xda\x66\x8d\x70"
+ "\xf3\xd1\x27\xb6\xc1\x1a\xc7\xfb\x68\x8f\xb6\xb2\xfd\x89\x54\xb9"
+ "\x7b\x29\x7e\x1b\xe5\x19\x3f\xcb\x00\xcf\xb9\xbb\x13\xa4\xfa\xb8"
+ "\xd5\x6f\x29\x8e\xeb\xa1\x7e\xf7\x72\x9a\x80\xfc\x00\x9e\x8a\xf5"
+ "\x6c\xa3\x59\xe7\x6a\x78\xbc\x0a\xd0\x27\x18\x77\x87\xe9\x2a\xab"
+ "\x49\x9a\xcb\x44\x1d\xc5\xe7\x30\xad\x2e\xfb\x0f\x7d\xa7\xe5\x4a"
+ "\xfa\xcb\xea\x66\xff\xf1\x6f\xb6\x67\x9d\x27\xee\x18\x72\x7d\xef"
+ "\xfc\x14\xfc\x9e\x85\x58\xcb\xf8\x79\x80\xdd\xec\xbc\x0e\x3c\x2f"
+ "\xc5\xbd\x98\xf8\x5b\xac\xa3\xb7\x58\x8b\xde\x7c\x5b\xba\xe8\x78"
+ "\x3e\x45\xa2\x63\x11\x8b\x61\x72\x3e\x47\x9a\xaf\x13\xe3\x9c\x98"
+ "\x8a\xba\x62\x8f\x9f\xdf\xc9\xe2\xf7\x19\x86\xe7\xdc\xad\x22\xf1"
+ "\x22\x6d\x3f\x46\x19\x8f\x7d\x86\xcb\xfa\x96\x30\x91\xe7\x11\x62"
+ "\xfd\x4f\x63\xba\x6b\xff\x7d\xcb\x34\x29\x9f\x24\x97\xf9\x7a\x55"
+ "\xcb\x75\x2c\x1f\x8f\x07\x3d\x95\xf3\xfc\x36\x75\x1d\x69\xd1\x89"
+ "\xf9\xbb\x62\xf7\x5a\x48\xcb\x0c\x9a\x7b\x60\x6a\x7b\x56\x0b\x8c"
+ "\x7f\xce\x59\x39\x1d\xf9\x77\xe1\xae\xc3\xba\x20\x8d\xf0\x2c\x39"
+ "\x35\x0e\xcf\x01\xfe\x44\xf4\xaa\xe7\xf8\xbe\xee\x1b\x9b\x48\x2b"
+ "\xb7\x21\xe4\xd4\x8e\x73\xac\xbc\xad\xad\xfb\xdd\xf6\x3e\xab\xa4"
+ "\x3c\x5c\x76\xb3\x77\x6c\x4f\xb9\x3e\x19\xe7\x83\xc4\x77\xc9\x78"
+ "\xbe\xb6\xeb\xff\xe1\x6e\xff\x0f\xc3\xff\xd9\xbe\xe6\x35\x4c\xb7"
+ "\x2a\x5c\x67\xfb\x5b\x4d\xf0\xac\xea\xf6\x1c\xea\xf1\xbc\x9a\xef"
+ "\x7b\x06\xdb\xac\x9e\xed\x21\x17\xd3\xc5\xb2\x03\x59\x7d\x92\xe9"
+ "\x54\xc0\x46\x0a\x9e\xe9\x16\xfb\x61\x0a\x9e\xd9\x0e\x71\xfc\x81"
+ "\x9d\xd7\x86\xf7\x91\xe2\x3d\x42\xbc\x87\xf3\x58\xbc\xad\x29\xd2"
+ "\xb9\xed\x56\x36\x47\xd3\x9a\x23\x9d\xdf\xc4\x33\xde\x78\xbe\x1b"
+ "\xda\x3a\x15\xcf\x78\xe3\x79\x70\xf1\x1e\x21\xde\xc3\xc5\x78\xc4"
+ "\xf3\xe0\x77\x5d\xe7\xbf\xbd\xe9\x73\xc8\x53\x2f\x9d\xe7\x76\xe6"
+ "\xec\x0e\x13\x72\x4c\x78\x2e\xfd\x46\xf4\xe1\x96\xde\x4c\x05\x1e"
+ "\x33\xdc\x46\xcc\xa4\x83\x98\x93\xda\x33\x80\x17\xc1\x55\x7a\x07"
+ "\x9b\xc3\xaf\xb2\x3b\x48\x95\xfe\x2c\x8b\xfd\xfa\x52\xb3\x14\xdb"
+ "\xc6\x36\xc3\x99\xbb\x3b\x4c\xec\x2f\x9b\xf9\x1e\x7d\x1b\xf7\x45"
+ "\x84\x73\x6d\xcd\x6c\xdd\x4b\xd9\x40\xda\xe2\xa4\x3c\x9c\x76\x6d"
+ "\x4c\x4e\xbc\x91\x25\xc5\xf7\xb4\xa5\x4a\xf1\xc4\x2d\xa4\x6d\x5e"
+ "\x5b\xe0\xa1\x62\x48\x2b\xf4\xdc\x33\x6d\x7b\x1b\xcb\xc4\x7a\x5b"
+ "\x88\x6d\x26\x96\x0d\x79\x76\x76\xf5\x59\x25\xd4\x23\x8b\x3c\xc0"
+ "\xcf\xa1\xb4\xc5\xf1\xd8\xb1\x36\xe8\xff\x2d\xf1\xe2\x5e\xf0\x1d"
+ "\x14\xf7\x53\xe3\x7e\x70\xa4\xdd\xc8\xbd\x3b\xd3\xcf\x93\xd0\xd6"
+ "\xce\x38\xdc\x9f\x5e\xcf\xce\x23\xac\x44\x5f\xf0\x76\xf2\xb8\x9e"
+ "\x88\x71\xb3\xda\xee\xc7\xb3\x04\xeb\x58\x4c\xbf\xdd\x3b\x5a\x47"
+ "\xee\xfd\xa4\x3d\xab\x0d\xe4\xff\x43\x2e\xdf\x6d\x79\x7b\xa1\x0e"
+ "\xd0\xbe\xf4\x04\x8c\xcb\xbd\x1d\xf2\x54\x43\x9e\x99\x52\x1e\x7c"
+ "\xdf\x8e\x6b\x4f\x34\x81\x60\xbb\xda\x72\x7f\x2c\x87\xf7\x4b\x2d"
+ "\x72\x83\x81\xef\xfb\x6e\x03\xfe\x97\x29\xfb\xe2\x1b\xf4\x47\x90"
+ "\x91\x07\xf4\x42\xce\x81\x78\xe6\xe7\x3d\xf0\x40\x02\x9f\xe7\x6c"
+ "\x3b\x84\xb1\x27\x37\x5c\x20\x0a\xdc\x87\xc1\xfb\xcd\x05\xe6\xcf"
+ "\x14\xd3\x40\x5f\x94\x41\x3f\x65\xeb\x22\x03\xb3\x3d\xda\xd8\xdc"
+ "\x24\xfa\xee\x42\x3a\xe2\xf9\xa9\xf6\xac\x0b\xda\xae\x38\x1d\x5d"
+ "\xb2\xe4\xc2\x63\xb8\xfe\x01\x7d\x94\xd5\xb1\x7b\x1d\xb0\xbe\x50"
+ "\xd6\x41\xaf\x76\xae\xf2\x40\x3c\x5b\x23\xca\xdb\x37\x8d\xef\x93"
+ "\xbd\xf0\xa7\x00\xcd\x0d\x17\xe0\x5b\x86\xae\xf8\x24\x90\x07\x79"
+ "\x26\x40\xf9\x5d\xed\x4c\x64\xdf\xd8\xc9\xe5\xcd\x85\x72\x21\xf7"
+ "\x40\xfc\x86\x0e\xa2\x10\xd3\xcb\xab\x1c\x76\x8c\x4b\xd1\xab\xaf"
+ "\x1c\x16\xa3\x11\xf7\xa5\xe7\x1d\x88\xc7\xb3\x4b\x77\xdb\xa5\x3a"
+ "\xb7\x97\xe3\x99\x19\xac\x33\xa7\x6d\xfb\xc7\x12\x1d\x8d\x2d\x50"
+ "\x76\xda\x09\x52\x4f\xda\x1f\xc1\xbd\x7b\x8c\x26\x6b\xa4\xfd\xa4"
+ "\xed\x5c\x2e\x76\x74\xe5\x61\x36\x16\x8b\x97\x05\xe5\x97\xb2\x98"
+ "\x7f\xd0\x06\xe0\x85\x29\x0d\xfd\x0e\xb4\xb3\xb8\xc4\xeb\xe0\x3d"
+ "\x6b\x37\xdb\xab\xdb\x2e\x9e\xd9\x6d\x5f\x2f\xe9\x2b\x8b\x98\xb6"
+ "\x01\xbf\x9d\xdc\x41\xce\x91\xf6\xc5\xe6\x8c\x0e\x02\xf4\xd0\xa3"
+ "\xef\xc2\x2a\x1b\xf4\xd1\x94\x0e\xc4\x82\x1e\x63\xc4\x42\x7e\x7e"
+ "\xde\x5a\x89\x34\x6f\x8f\xc6\xef\x23\x6d\x61\x7c\x68\x0d\xd0\x84"
+ "\x41\xdf\x6f\xb7\x48\x34\x2d\x18\x8b\x63\xae\x0b\x5e\x7d\x77\x22"
+ "\x8d\x9c\x50\xe7\xaa\x62\xd0\xdf\xe3\x4f\x40\xfd\xec\x6f\x0b\x23"
+ "\x0f\xc4\xe3\xbe\x70\xf8\x5f\xf4\xd7\xc0\x79\xc7\x71\x60\xcf\x84"
+ "\x6f\xdc\x5d\xc5\xb1\x40\xb8\x9f\x1e\xbb\x4e\xa4\x1f\x8b\x35\x52"
+ "\x98\xcc\xe9\x20\xe6\xaf\xe5\x73\xd6\x61\xf7\xb6\x67\xd9\x53\x5c"
+ "\x73\xd6\x76\x66\x2f\x62\x5c\x84\x52\x36\x2e\xb5\x17\xb9\xd5\xd9"
+ "\xc6\xce\xe0\xb6\xe0\x7c\xa3\x7d\x1a\x7e\xcb\x88\xbe\xe5\x10\x17"
+ "\x4d\xee\xf8\xb7\x4f\xc0\x7a\xe2\xbe\x63\x67\xe0\xbe\x69\xa0\xf3"
+ "\xa3\x90\xce\xf0\x9b\x58\xe8\x0b\xde\xce\x0c\xa3\x3e\x66\xf1\x1d"
+ "\xdb\xb3\x2e\x2a\x25\x7d\x0c\x63\x1c\xd0\x4d\x1d\x32\x36\xf6\x05"
+ "\x9b\xde\x2c\xa0\x4d\xd5\xc1\x62\x6f\x83\xac\x8f\x17\xe5\x7c\x3c"
+ "\xfc\x66\x9a\xb4\xee\xe6\xc4\xb3\x1b\xe7\xd8\x9a\xb3\x4d\x8a\x5b"
+ "\xc8\x7d\x39\x5e\x8c\x77\x9d\xf5\xb8\xb8\xb4\xc7\x59\x0f\x3c\x7f"
+ "\xf4\x17\x16\xdf\x6e\x3b\xea\xb5\xca\xe6\x7a\xd4\x53\xec\xf7\x78"
+ "\xfe\x03\x64\xd4\xf7\xfc\x0c\x53\x3d\xae\x11\xb0\xd8\x3a\x58\x17"
+ "\x1e\x97\xa4\x8e\xfd\x0f\xb8\x55\xe0\x9d\x63\xe9\x22\xe8\xe9\x55"
+ "\x39\x92\x1d\x81\xeb\x7d\x07\x14\xbf\x23\xa6\x9b\xd1\x66\xe8\x90"
+ "\x61\x9c\x79\xc8\x63\x93\x62\xcc\xb3\x98\xf2\xbc\x3d\xb1\x5e\x7d"
+ "\x76\xde\x45\x22\xd0\x67\x01\x9e\xf1\x63\x34\x50\x0d\xd7\xa1\x1f"
+ "\x70\xf4\x69\x6a\x5a\x83\xb1\x7f\x3a\xde\xdf\x34\x96\x9d\x93\xb6"
+ "\x99\xee\x6a\xc1\xbd\x60\xcd\x0d\xa9\xcc\x57\x97\x32\x26\xc5\x41"
+ "\xf1\x77\xcc\xa6\x09\x1a\xae\xc3\x77\x2c\x0e\x06\x96\xe9\xb7\x4f"
+ "\xeb\x8e\x54\xd1\x3e\x6e\x86\xf1\xd7\xf5\xc0\x2b\x36\x2e\x82\xff"
+ "\xc7\x36\x91\xce\xaf\x79\xac\x63\x1e\x97\x41\xdc\x13\x3e\x9c\xfb"
+ "\xf9\x00\x9a\x31\xbf\x0b\x9d\xb3\xb4\x77\x60\x5c\xf0\xce\x27\x98"
+ "\x8f\xf4\x9c\xdd\x7a\x91\x06\xfa\x0d\xbc\x5e\x21\xf3\x53\xe4\xac"
+ "\x8e\x58\xbf\x81\xd5\xad\x53\x23\x8e\x65\x86\xb7\x67\x75\xce\x93"
+ "\xfc\x83\x70\x9b\x8e\xfb\x4e\xe7\xbc\xe8\x3c\x2c\xda\xf0\x49\xe2"
+ "\xb7\x93\x86\xe0\xdb\x45\x62\x99\xd1\xdc\x7f\x7c\x47\x14\x94\x1b"
+ "\x0d\xf5\xa8\x97\xc6\x54\xe2\x39\xa6\x70\x3e\xd6\xeb\x74\xb8\xc6"
+ "\x54\x9c\x86\x1e\x67\xff\x56\xac\x48\xd2\x2e\x5a\xf2\xa2\x7e\x41"
+ "\xd2\xc2\x04\xed\xe2\xc4\xc4\x15\x89\x5a\x74\x2c\xe5\xde\x7f\x78"
+ "\xbc\x2c\x87\x5a\x8c\x83\x59\xe6\x8a\x83\xe9\x88\x73\x8f\x1d\x6b"
+ "\x21\x8e\x79\x43\x33\x7f\xe2\xe8\x11\x73\x56\x2a\xa7\x50\x2e\xe0"
+ "\x5a\xc9\x2e\xb8\x4c\x70\x95\xe3\x7c\xca\x7c\x3b\x89\x02\x7b\x83"
+ "\xed\x21\x73\xf9\xbd\x70\x44\xe0\x3e\xa7\x3a\xe2\x38\x5e\x2a\x28"
+ "\xd0\xce\xc1\xf8\xf4\x3b\x98\x7f\x2c\xf8\x3d\x5c\x26\xb8\xca\xe1"
+ "\x62\xbf\x13\x3e\x61\x67\xf6\x77\xb8\xbf\xe3\x7b\x58\xb2\x30\xfe"
+ "\x44\x35\xcd\x54\xb0\xbe\x27\x6c\xe4\xf9\xba\xd5\x41\x4e\xb3\xda"
+ "\x0c\x62\x3e\xb6\x5e\x18\x9c\x49\xb4\xbd\xe4\x0b\xa0\x59\xcd\x0a"
+ "\x31\x1f\x3b\x93\x29\xb5\x07\xe3\x50\x40\x7e\x29\x9f\x82\x66\x75"
+ "\x84\x8a\xf9\x54\xec\xbb\x59\xf2\xde\xbe\x3b\x8c\x66\x7d\x94\x22"
+ "\xe6\x53\xbb\x97\xe7\x96\x67\xb8\x90\x55\x87\x6d\xae\x16\x32\x15"
+ "\xdc\x77\x59\x96\x23\x05\xf2\xf7\xea\xbf\x77\x60\x7c\x12\xb4\xdd"
+ "\xf9\xa4\x5f\xb8\x64\xf1\xaf\x97\x2c\x4f\xc6\x88\x66\x49\x2b\x56"
+ "\x25\xe1\x7d\xf9\x82\x17\xd8\x6d\xc5\xfc\xe7\x16\xf2\x7f\x92\x96"
+ "\x46\xe0\x3f\x4b\x01\x6f\x78\x5f\xb4\x4a\x8f\xb7\x85\x2b\xf0\x31"
+ "\x25\x21\x7c\xd5\x42\xbc\x75\x3f\x8b\xaa\x6b\xcf\x12\xca\x01\x1b"
+ "\xbb\xb8\x9c\x15\xc0\xfe\xfb\x31\x85\xd9\xd2\x99\x16\x72\x48\xe7"
+ "\x20\xd2\xdc\x9a\xa7\xdf\x13\xe1\x14\xfa\x3d\x09\xc9\xd4\x2f\x0c"
+ "\x71\x2c\x59\x0c\x3a\x63\x69\x7b\x16\x55\x5b\xc8\x1f\x53\x44\xd9"
+ "\x98\xc1\x7c\xe0\x66\x09\xf1\xe2\xfe\x52\x85\x90\xb3\x3b\x12\x63"
+ "\x3b\xa0\xbf\x2e\x8c\xe7\x0e\xcf\xf1\xf0\x9c\x0a\xcf\xd8\x07\x42"
+ "\xe1\x79\x1a\xce\x8b\xc1\xb3\x06\x9e\xc1\xd6\xde\x1e\x8d\xe7\x9c"
+ "\xe1\x59\x0b\xcf\x93\xa0\xfc\xae\xf8\xcf\xbd\x9f\x19\xa4\x85\x52"
+ "\x8c\x79\x1e\x4f\x9e\x6e\xed\x8a\x27\x8f\xb1\xbe\xd2\xd4\x6c\x0f"
+ "\x02\xb7\x41\xe8\xc1\x00\xcd\x84\xf5\x90\xa7\x6b\xfd\x97\xcf\xb9"
+ "\xd0\x63\x92\x0f\x17\x3e\xa7\x82\xb1\xd5\x8a\xeb\xdd\x9e\x41\xfe"
+ "\xff\x78\x50\x9a\xd7\x63\x71\x41\xe1\x4e\xb3\xd0\xd7\x30\xed\xd5"
+ "\x67\x02\xb3\x8b\x65\x64\x2e\xfa\x6d\xb6\xa6\x2f\x92\xdd\x52\x4a"
+ "\x64\xec\x99\xfb\x1d\xa5\xe7\x64\x84\xc5\x47\x97\x7c\x12\xba\xfb"
+ "\xb3\xe8\xf5\x4c\xd6\x51\xb0\x19\x58\x2c\xb4\xa5\x2b\x42\x1c\x0b"
+ "\x16\x33\x3b\x50\x46\x76\x73\xf9\xb5\x8f\xdb\x0b\x32\xb2\x8d\x3e"
+ "\xc9\xe3\xe5\x58\x64\x32\x1d\xf7\x7f\xb5\x74\x05\x85\xdf\x86\xa4"
+ "\x2c\x58\xcc\xd2\x20\xdf\x3a\xb0\xd5\xc4\xfa\xe5\x9a\xc3\xf0\x9c"
+ "\xad\xc0\xfd\x74\xc8\x48\xce\x33\x13\x32\xf0\x3b\x4a\x66\x87\x1c"
+ "\x25\x2a\x8c\xeb\x8a\x75\x2b\x75\xf3\x99\xb8\x01\xd2\x70\x1f\x6b"
+ "\xeb\x93\x44\x85\x3e\xa2\xc5\xba\xe4\xb0\x38\x75\xd9\x32\xad\xe4"
+ "\xef\xca\x02\x69\xdd\xdb\xf3\xe4\x53\x0c\x95\x93\x17\x86\xcf\x7e"
+ "\x04\xfe\x0b\x17\x43\xa3\xbb\x63\x33\xac\x75\xe4\xfe\x88\xd6\xbf"
+ "\xcd\xf9\x37\x16\xff\x36\x5b\xa6\x87\x72\xd8\xf8\x46\xc0\x71\x78"
+ "\x7b\x5c\x31\xdb\x07\x2b\x93\xe1\x38\x27\x4a\xc8\x42\x7b\xb2\x19"
+ "\xbe\x2f\xc3\xb3\xf4\x60\xe7\xec\x5b\xf4\xc6\x5a\xf4\xff\x2d\x03"
+ "\x1a\xcb\x8c\xf8\x4e\xf4\x23\x26\x67\x7e\xb6\x9c\x44\xc3\xce\x29"
+ "\x83\x8d\x82\xe7\x60\x1b\x64\x8a\x77\xd0\xee\xc0\x39\x2d\x21\x5b"
+ "\x16\x89\xb8\x05\x1e\xa3\x1f\x13\x1b\x1d\xb9\x5b\x4b\x03\x4d\x18"
+ "\x3b\x53\x81\xb6\x2e\x9e\x9e\x69\x90\xc9\x51\xfe\x3d\x0c\xd7\xbf"
+ "\xf1\xb8\x44\x4f\x37\x4a\x65\xc2\xb3\x0a\x6c\xa8\xa5\x70\x57\xb7"
+ "\x67\xcb\x75\x6e\xb1\x1f\xf9\xb9\x6c\x99\xfc\x31\xf4\x3f\x87\x65"
+ "\x33\xdb\x59\xa6\x60\x7e\x17\x21\x6f\xac\x85\xa8\x99\x8f\x18\xf8"
+ "\x1f\xec\x9f\x7c\x22\xfe\x0f\xf6\xcf\xaf\xe2\xbb\x95\xf1\xa1\x34"
+ "\x5f\xcb\x30\x2d\x93\x17\x02\x46\x1f\x86\xeb\xdf\x20\x7f\x89\x85"
+ "\xfc\x1f\x96\x7f\x9d\x9c\x9d\xd5\x6c\x08\xd0\x90\x08\x48\xdf\x29"
+ "\xa5\x0f\x93\x45\x01\x4d\xe5\x07\xa5\xbe\xdf\x3a\x72\x5f\x34\x3c"
+ "\x1f\x93\xe6\x79\xd8\xbc\x4f\xb6\xbc\xde\xed\x39\x16\x9e\x6d\xd2"
+ "\x73\x7b\x76\x00\x91\x64\x05\xce\x8b\xb4\xa6\xc7\x6d\xc6\x71\xef"
+ "\x42\x0d\xd8\x85\x60\xdf\xc0\x7b\xe0\x7f\x9e\x89\xff\xf6\x8c\xa5"
+ "\x35\xcb\xd8\x68\x0b\x96\x6b\x6d\x20\xff\xe0\x1d\xd8\x7f\xcb\x62"
+ "\xc5\x72\xa2\x2d\x72\xe3\x0e\xa9\x6d\x42\x56\x40\x88\x90\x6b\xd2"
+ "\xf2\x36\x2a\xd6\xc3\xff\x93\xac\x81\xbb\x2c\x90\x4f\x6f\x21\x94"
+ "\xfb\xc6\x49\x3e\xbb\xd5\xd0\xa1\x8e\x35\xc3\xc8\xd9\xf4\x1c\x62"
+ "\x4e\xc1\xe6\xae\x8d\x6b\xd4\xb3\xd1\xee\x44\x5f\x24\x2c\x5e\x1e"
+ "\xfa\x3e\x75\x90\xe1\x2c\xde\x44\x6e\x53\x0d\x8b\xb3\xf0\x92\x4e"
+ "\x25\xf9\x3d\xa5\x39\xbb\x8e\x51\xb9\x7e\x29\xfa\x42\x65\x71\x65"
+ "\xda\x75\xc1\xcc\xff\xa9\xe8\xf7\x74\x4b\x32\x09\x2d\x11\xb8\xdf"
+ "\x53\xe6\xa7\x64\x38\x8c\x53\x92\x7b\xf7\x7d\x4a\xb3\xde\x51\x49"
+ "\xbe\x4f\xe9\x05\xa7\x1d\xfe\x9f\x04\xf4\x50\xc0\x5d\xc7\x9e\x5d"
+ "\x3e\xaf\x14\xbd\xfa\x42\x95\x83\xdc\x93\x73\x5f\xa8\x03\xd2\x17"
+ "\x32\x05\x8f\xb9\x9a\xad\x00\xf9\x97\xca\xf7\x14\xb9\xd2\xb6\x41"
+ "\x9f\xe1\x73\xc5\x32\x79\xb4\x98\xb6\x0b\xf8\x12\x2a\x8e\x4b\xad"
+ "\x38\xcf\x80\xf3\x65\x20\x13\x2a\x68\x67\xc2\xe6\xde\x64\x4e\x4b"
+ "\xb0\x72\x6b\x0b\xfa\xc8\xc8\x56\xd8\x2d\xb2\x61\xcc\x6f\x3b\x1b"
+ "\x4b\xca\x14\x3d\xfc\x36\x3f\xbb\x70\xc5\xa2\xc5\xf3\xff\xb8\x4c"
+ "\xaf\x7d\x32\xf6\x61\x16\x90\x33\x5c\xbb\x24\x69\x31\x53\x49\xda"
+ "\x27\x1f\x79\x28\x26\x26\x76\xfe\x53\xb1\x0f\xc6\xce\x79\x6a\x3a"
+ "\x3f\x35\x19\x9b\xc8\xdc\x9e\x26\xad\xd0\xe2\x8f\x9e\x15\xa3\xd6"
+ "\xaf\x59\x9c\xb8\xa2\xbb\x3c\x08\x65\x73\x6d\x72\x36\xaf\x6c\xc3"
+ "\xff\xd9\x7c\x9e\x6c\x58\x91\x34\xcf\xc6\x65\xdf\xb0\x57\x90\xb6"
+ "\x2c\xa6\x7d\xf6\x30\x15\xda\x57\xcc\xa7\xd0\x18\xa6\x77\x14\xd8"
+ "\xa7\x51\xff\xb4\x67\x0f\x33\xb9\xfb\x07\x13\x7f\x5b\x2f\xc7\xdf"
+ "\x89\x7d\x59\x4c\xbb\x48\xc7\x8f\x4f\x67\x3e\xbe\xb2\x87\xd9\xa4"
+ "\xb9\x77\x4c\x93\xea\x50\x87\x79\xb2\x87\x4d\xef\x8a\x5b\x9d\x3d"
+ "\x3c\xcc\x15\xef\x94\xfd\x79\xd0\x88\x10\x34\x67\x86\x81\xad\x32"
+ "\x1c\xae\x11\x78\x45\x77\xc9\xf7\x64\x5a\x83\x63\xb6\x10\x19\xe8"
+ "\xe0\x94\x00\x1e\xe3\x2c\xfb\x18\x8b\xcb\x11\xe3\x74\x04\xcc\x77"
+ "\xca\xe1\x1e\x40\xe7\x3b\x15\x6c\x9c\x48\x93\xe9\x31\x76\xde\x3f"
+ "\x99\x56\x63\x2c\x3f\xc0\x71\x4e\x8c\x23\x2d\x27\xc6\x49\x1d\xf3"
+ "\xc1\x7e\x87\xfb\x0f\x78\x6e\x3d\xc6\xf9\x03\x65\xf1\x8c\x70\x3e"
+ "\x87\xfb\x3a\x2c\xc7\x7d\x9c\xcf\x00\x86\x4b\x5b\x78\xec\xeb\x98"
+ "\xd5\x3f\x9d\x9c\xbf\xda\xc2\x63\x5f\x9f\xe3\xf1\xe2\xf1\xfb\x50"
+ "\x66\x1a\x94\x73\x78\xbe\x33\x40\x1b\xe3\xec\xa4\xec\xec\x6d\xf6"
+ "\x08\xd2\x57\x3c\xeb\x5e\xe7\x2f\xb2\x4f\x84\x51\x63\x6e\x12\xcd"
+ "\xae\x6d\x86\x3b\x8c\x09\x4d\x38\xe7\x2a\xa3\xd9\x27\xf7\x50\x63"
+ "\x1e\xa4\xd7\x19\xe0\x6e\xa3\xd9\xa7\xe7\x51\x63\x3e\x3c\x37\x86"
+ "\xc3\x1d\x9e\x3f\xb1\x41\x7e\x3d\xcd\x3e\x80\xbf\xb3\xd2\xec\x83"
+ "\xf5\x90\x0f\x9e\x0f\xd5\xc2\x1d\x9e\xff\x71\x0c\xf2\xc1\xf3\xa7"
+ "\x15\x0d\xb2\x11\x07\xe1\x7f\x48\x6b\x72\xf0\x6f\x9d\x75\xb0\x6f"
+ "\x65\x5b\x1d\xfc\x1b\xad\x0e\xfe\x8d\x0b\x0e\xfe\x8d\x8b\x0e\xfe"
+ "\x8d\x72\xf8\x5d\x6e\x0a\xcd\xfe\x2c\x12\xee\x76\x9a\xfd\xf9\x36"
+ "\xc8\x07\xcf\x95\xa1\x70\x87\xe7\xaa\xf5\x90\x0f\x9e\xcd\x50\x97"
+ "\x7c\x78\x3e\xb2\x08\xf2\xa5\xd2\xec\xa3\x35\x70\x77\xd0\xec\x63"
+ "\x33\x21\x1f\x3c\x1f\x37\xc1\x1d\x9e\xbf\x82\x72\xf2\xe1\xb9\xa6"
+ "\x0c\xee\xf0\xec\xc0\x7a\x64\xd0\x6c\x01\xcb\x25\x34\x8f\x60\xfe"
+ "\x0c\x9a\x27\xc3\xf2\xe0\x39\xa0\x04\xee\xf0\x3c\x6c\x06\x35\x1a"
+ "\xe0\x79\x38\xb6\x75\x3d\xcd\x53\x16\x43\x3e\x05\xcd\x1b\x09\xe9"
+ "\x79\xf0\x3c\xca\x0a\xf9\xe0\x39\x08\xf3\xc3\x73\x48\x34\xe4\x87"
+ "\x67\x35\xd2\x28\x87\xe6\xfd\x22\x16\xf2\x29\x69\xde\x75\x3b\xe1"
+ "\x0e\xcf\x1a\xa8\x7f\x3e\x3c\x8f\x4f\x82\x3b\x3c\x87\x01\xad\x0c"
+ "\xf0\x7c\x23\xb6\xd3\x40\xf3\x6e\xc2\xf2\x41\x5f\xdd\x82\x74\x81"
+ "\xe7\x5b\xe3\x21\x1f\x3c\xeb\x90\x8e\xf0\x7c\xa7\x0e\xf2\xab\x7a"
+ "\xe5\x67\xde\x5d\x84\x66\x0e\x87\xba\xde\x97\x44\x33\x47\xc0\x7d"
+ "\xea\x24\x9a\x39\x4c\x47\xf3\x7e\xb3\x1e\xd2\xe1\x3e\xd5\x01\xcf"
+ "\xe1\xe2\x33\xdc\xef\x3f\x06\xcf\x11\xe2\x33\xdc\x7f\xbd\x1d\x9e"
+ "\x23\xc5\x67\xb8\x4f\x8f\x84\xe7\xa9\x34\xef\xb7\x2a\x78\x86\xfb"
+ "\xf4\xad\xf0\x3c\x4d\x7c\x86\xfb\x03\x60\x93\x0f\x77\x58\x27\xc4"
+ "\x4e\xb5\x06\xc5\x59\xad\x41\x46\xf4\x45\x49\x9c\x05\xb9\x7a\x21"
+ "\x38\x17\xfd\x24\x0e\x4f\x6f\x23\x23\x1a\x64\x23\x57\xa3\x9c\x30"
+ "\xa7\x5a\x58\xec\x47\xd1\x77\xe6\xf0\x3a\x59\xa0\x11\xec\x9e\xa9"
+ "\x20\x97\xe5\xd0\xf6\xed\x34\x6b\x58\x0b\xb4\x39\x9c\x66\x8d\xaa"
+ "\x83\x3b\x3c\x8f\x3e\x0a\x6d\x86\xe7\xfb\xf2\xe0\x0e\xcf\x4f\x3f"
+ "\x04\x6d\x0f\x6f\xcf\x0e\x6c\xb6\xc8\x46\x68\x59\xbf\xff\xdb\x9c"
+ "\xd9\x21\x8e\x74\x1a\xe3\x00\x7d\xb0\xb9\x48\x1b\xe2\x88\x27\xd4"
+ "\x58\x00\x72\x5d\x4b\xe8\x96\xd8\x14\x1a\x3c\x97\xd5\x09\xe3\x30"
+ "\xd1\xce\x49\x72\xfe\xed\x51\xb4\x4e\x36\x72\x1c\xc6\x0b\xa1\xc1"
+ "\x2b\xbd\xbd\xbf\x9f\xbd\x1f\x5f\x14\xc1\xdf\xab\x89\xeb\xfd\xbf"
+ "\xe1\xfb\xb9\x21\xe8\x77\x7f\xe2\x8c\x08\x8b\x6c\x64\x06\xe6\xb1"
+ "\xc8\x02\x4b\x68\x56\x00\x31\xdb\x1a\xc5\x36\x8e\xc0\x7c\x99\xf8"
+ "\x3b\x6f\xf3\x36\x82\x61\x63\x9c\x11\xe4\x16\x8e\x63\x41\x7f\xc9"
+ "\xb5\x69\x93\x76\xd5\xc9\x54\xb3\xb7\xb0\xf9\x89\x4d\x76\x2e\xcf"
+ "\x46\x5d\xd7\x99\x67\x8a\xd5\xae\x09\x81\xf2\x54\x4f\xa4\xdb\xa9"
+ "\xcd\x94\xf6\x10\xc8\x42\x96\x5e\xc8\xce\x1d\xf1\xff\x53\xd9\x7e"
+ "\x52\xfe\x7f\x02\x9b\xbb\x86\xb2\xf0\xb7\xee\xe3\x06\x67\xf6\xaf"
+ "\x6a\x85\xe0\x22\xc2\xd6\xe3\x65\xa3\xc6\x7d\x2c\x58\xe4\x21\x49"
+ "\x64\x98\x76\xcd\x3e\x28\x7f\x54\xbc\xc7\x18\xb3\x2b\x2f\x7b\xf7"
+ "\xc8\x5e\xc8\xfb\x3a\xce\x07\x65\x8f\xd2\x77\xc5\xde\x86\x36\xe4"
+ "\xa3\xee\x92\x93\x28\xd4\xa7\xdc\x66\x1d\x65\xad\x4c\x25\xc4\xa1"
+ "\x32\x5a\x1c\x86\x38\x8b\xd3\xb0\xc9\x4e\x0b\x8a\x48\xb0\x43\x46"
+ "\xd8\xbe\x7f\x99\x6a\xf2\xdd\x76\xb4\x11\x3f\xc3\xbc\xdf\x0a\xc3"
+ "\xa7\xab\xef\x4a\x21\x72\x53\xe2\x09\x78\x56\x4d\xa0\xd9\x0f\xa5"
+ "\x98\x9b\x6b\x88\x29\x11\xcb\x52\x85\xd1\xec\x59\xe5\xc2\xf0\x47"
+ "\x6d\xa5\x68\x6b\xa7\xe0\x5c\xd9\x51\xfc\xdd\x9b\x40\x67\xd0\x03"
+ "\xa3\x1c\x52\x5d\x50\x07\x18\x81\x76\x68\x07\xa3\x0f\x8d\xf9\x4e"
+ "\x27\xfa\xa4\xcb\xb1\x00\x1d\xb8\x8e\x1c\x65\x01\x1b\x80\xf0\xef"
+ "\xaa\xee\x15\x46\x9a\xa2\xaa\xe6\xe1\xda\xa3\x1a\x7d\x7c\xd9\xd8"
+ "\xb9\x7b\x8c\x8a\x2d\xa0\x8e\xe6\x79\xdd\x79\xb7\x6c\xa1\x7e\xfe"
+ "\x1a\xfd\x8a\xc4\xa4\xf9\xab\xf4\xbf\xd6\xc2\xe0\x4f\xbb\xe2\x39"
+ "\xed\xb2\xc5\xcb\x56\x24\xae\xee\xe1\x57\xa8\x3d\x5b\x55\x04\xd8"
+ "\xd8\x8a\xf5\x3a\x0c\x36\x38\x5b\x07\x90\x05\xe3\x59\x33\xd9\xe6"
+ "\xbf\xf0\x78\x2a\x90\x07\xf4\xff\x0b\x6c\x6e\x45\x28\x2e\xd2\xd0"
+ "\x92\xd8\x94\x5c\xf4\x1d\xb2\x0a\xe3\x75\x58\x89\x99\xb4\xf0\x18"
+ "\xcb\x2c\x7e\x22\x8c\x09\x92\xd7\x52\x53\x72\x0b\x60\xdc\x68\x87"
+ "\x4b\x09\x18\x37\x5d\x34\xce\x8d\xab\x93\x05\x47\x5f\x34\x1a\xec"
+ "\x52\xfc\x2b\xa7\xc1\x18\x27\xa8\x36\xea\x31\xfe\x55\x27\xd5\x90"
+ "\x4a\xa0\x65\x47\x8e\x29\x1c\x64\xbc\x6e\x4b\x16\xdd\xe5\x84\x31"
+ "\x12\xf3\x7b\xf3\xb7\x39\x11\x4e\xaa\x53\x38\xb3\x88\x12\xee\xc1"
+ "\x34\x78\xd3\xd6\x4e\x95\xd1\x8a\xef\x31\xee\x95\xb3\x53\x47\xd2"
+ "\x8e\x51\xe1\xdf\x13\x00\x37\x59\x84\xb2\x38\xbf\x09\x67\x09\xa4"
+ "\x8f\x14\x0a\x8c\x19\x0d\xd1\x44\x8e\x79\xc1\x3e\x23\xf3\xe0\xff"
+ "\xd4\x05\x24\x08\xf2\x85\xa4\x1e\x86\xf4\x76\xdd\x48\x47\xba\x4e"
+ "\xd9\x91\xae\x1b\xd9\x49\x75\x2a\x73\xbd\x9d\x74\x4e\x9e\x13\x35"
+ "\xc5\x4a\x14\x9b\xc1\x8e\xdb\x22\x40\xff\x2a\x89\x8d\x77\xbe\xac"
+ "\x1b\xee\x78\x59\xa7\xe8\xec\xd4\x29\x1d\x2f\xe9\x14\x1d\x2f\xe9"
+ "\x86\x77\xb6\xeb\x94\xe6\x45\x56\xf2\x99\xf5\xbf\x48\x55\x7d\x23"
+ "\x9b\xa7\xed\x0c\xda\xb4\xbd\x33\x08\x84\x5f\x3d\x09\xbd\x4b\x0f"
+ "\x76\x1c\xd8\xb7\xaf\x81\x6d\x0f\x98\x50\x39\xde\x9a\x13\x41\x8d"
+ "\x9b\x66\x03\x7d\xa7\x3c\x72\x3b\xfd\xc9\x99\x3d\xc6\xa6\xfd\x3d"
+ "\xc8\xa2\x4c\x85\x06\xd2\x00\x3f\x37\x2e\xa2\xd9\x37\x80\x7c\x53"
+ "\x84\xc1\xa5\xb5\x70\x3e\x10\x9a\x3d\xba\x0c\xe7\x09\x30\x2f\xcf"
+ "\x77\x3d\xd8\x54\x78\x0f\x8d\x66\xf1\x78\xb3\x55\xf3\xb6\x30\x1b"
+ "\x22\x38\x5e\xb2\x21\x0e\x2a\x7a\xf7\x4f\x02\x79\xd6\x77\x8d\xb9"
+ "\x05\x90\x27\xc6\x5c\x6f\xf3\xb5\x0a\xf4\x01\x4d\x0b\x72\x0b\x0b"
+ "\x85\x2e\x9f\xd1\x20\x0f\x83\xdf\x81\xfe\x93\xc1\xde\x19\x0a\x48"
+ "\xda\x79\x12\x80\xef\x76\x5c\xb0\xcb\xf1\x59\x9b\x28\xa3\x66\x9b"
+ "\x9d\x14\xe2\x7a\x45\x58\x6c\xca\x8e\x0b\x56\x39\xe2\x05\xd7\x7c"
+ "\xe0\xb7\x87\x0a\x2f\x88\xe5\x16\x17\x69\xd3\x57\x12\x16\xd3\x06"
+ "\xe3\x62\x21\x8e\x0a\xd3\x60\xcc\x88\x31\xbc\x12\x03\xa0\x1f\x87"
+ "\xc8\xe0\x7f\x25\xe6\xa3\xaa\x02\x22\x40\x19\x80\xa5\x04\x1a\x64"
+ "\x6c\x14\x8c\x46\x3d\x60\x2a\x82\x4e\x88\xad\x11\x36\x17\x41\x9b"
+ "\x42\xe2\x80\x1e\x7a\x69\x0e\xa2\xaa\xcc\x41\xd0\xe7\x17\x7d\xc8"
+ "\x41\x0e\x25\xb5\xa1\x5f\xe0\x00\x6b\xa0\x29\xc2\x1a\xb4\x31\xce"
+ "\x1a\xb4\x69\xb6\x60\xdc\x58\x0c\x57\x89\x3e\x91\xa8\x9a\x64\xea"
+ "\xb0\x2e\x9f\xb5\xe7\xaf\x12\x9f\xb5\x60\x97\x31\xfb\x0c\xb0\x83"
+ "\xf6\x16\xb4\xb7\x06\x63\xd3\xa0\x1d\x86\x32\xb7\x3d\x5b\x1d\x2d"
+ "\xd9\x51\x28\x47\x9c\xb9\xa6\x69\x70\x4d\x85\xf4\x78\x8b\xec\x96"
+ "\xf5\x92\x8c\x01\xbd\xa2\x16\xf2\x1e\x8b\x67\x6b\x63\x9d\x09\x0f"
+ "\x60\x5e\xa0\x5b\x14\x7c\x2b\xc0\xd9\x99\x30\x0d\xae\xe9\x70\xfd"
+ "\xd6\x69\x34\x5a\xe0\x22\x4e\xe3\xa6\x08\xa7\x71\x6e\x28\x5c\x1a"
+ "\xb8\xc2\xe0\xd2\xc2\x35\x09\x2e\xd0\xe7\x73\xc3\xe1\x8e\xef\x23"
+ "\xe1\x9a\x0a\xd7\x34\xb8\xa2\xe0\x9a\xe1\xdc\x5c\xa4\x16\x00\x9f"
+ "\x70\x69\xe1\x82\xdf\x6d\x4c\xe8\xdd\x6f\xca\x19\x1e\x83\x63\xd8"
+ "\x49\x1a\x82\x31\x9a\x53\xdb\xd0\x1f\x65\xcd\x21\x9d\x6d\x60\xb1"
+ "\x58\x64\xa3\xd5\xde\xe6\x3a\xb0\x7c\xe8\x5b\x9d\x03\x2c\x2f\xde"
+ "\xeb\xdc\x89\xa6\x48\xe3\x08\x8b\x35\xa1\xff\x75\xe8\xcf\xb2\xaa"
+ "\xf8\x7a\x12\x63\x25\xe9\x15\xf5\x1d\x24\x7d\x11\x75\xb2\x71\x74"
+ "\x2a\x9e\x85\xd1\xb3\xbd\x0a\x4e\x1a\xa7\xed\x34\x18\x95\x4e\xd5"
+ "\xc6\x08\xaa\xda\x98\xc0\x7c\x5c\x82\xec\xc1\x98\x77\x5d\x63\x48"
+ "\xc4\x14\x8c\x23\x2b\x9b\xdb\xc8\xcb\x8b\xa8\x50\x99\x80\x27\x75"
+ "\x01\x5c\x32\xf2\x26\xe2\x4b\x1a\x47\xfe\x4b\x2d\xcd\x00\xac\x04"
+ "\x3a\x81\x6e\x02\x8e\x1f\x01\x57\x38\x96\x94\xb0\x05\xba\x4c\x2d"
+ "\xc5\x09\xa3\xc3\xd5\x36\x78\xa7\xc0\x38\x62\x25\x30\x7e\x2c\x49"
+ "\x26\x93\x4a\xe0\x1d\x8b\xf9\x0a\xf5\x7e\x5c\x1f\x42\x85\x17\x74"
+ "\xa4\xf4\x8f\x44\x19\x74\x96\xc7\x11\x76\x02\xed\xbb\x62\x69\x18"
+ "\xe6\xc6\xcd\x3a\xab\x25\x87\x74\xdf\x82\x4e\xda\x01\xb2\x7b\x6e"
+ "\x5c\x27\xc8\x6d\xa0\xa5\x73\x60\xb4\x1c\xb3\xfd\x52\xd1\xb2\x33"
+ "\x2c\x36\x9e\xd3\x33\x9e\x20\xcd\xba\xd3\x13\x69\xbc\xa6\x1e\xe8"
+ "\x09\x74\x35\x1f\x73\x92\x60\x19\x59\x20\xd1\xf3\x75\xa0\x27\xd0"
+ "\x54\x83\x34\x05\x7a\x30\x9a\x52\x91\xa6\xa5\x6e\x34\x05\xd9\xc4"
+ "\xfc\x81\x22\x4d\x05\xa0\x69\xa9\x17\x9a\x76\x8d\xc5\x81\xa6\x6f"
+ "\xf8\x44\xd3\xb2\x41\xd0\x34\xb4\xc7\x78\x50\xa2\xa9\x03\xf5\x65"
+ "\xc1\xdc\xd9\x14\xe4\x9d\xd9\xf1\x19\xf3\x6d\x0b\xb6\x4e\x09\xd8"
+ "\x6c\xc5\x82\xca\x18\x07\x34\x51\xe1\x9e\x54\x8c\x5b\xc7\xfc\xd0"
+ "\x95\xd1\x8b\xce\x82\x4d\x3b\x30\x0d\xe4\x56\xc2\xdd\xe8\xcb\x0f"
+ "\xac\xa4\x52\x39\xdd\x55\x75\xc1\x06\xfa\xe5\xfa\xfb\x3b\xd0\x96"
+ "\x2c\xd8\xf4\x93\x40\x13\x08\xca\x90\x67\x6e\x27\x8a\x0e\x90\x13"
+ "\xfa\x64\x72\x63\x21\xc8\xba\x0e\x90\x9d\x4d\xb2\xd0\x63\x8f\xe8"
+ "\x05\x0a\x57\x3a\xfa\x68\x15\x82\x36\x16\x83\xac\x66\xfc\x45\x9e"
+ "\xe1\x5a\x61\xe5\x33\x9f\x40\x79\xd7\x1d\xfa\x3c\xde\x41\xd2\x13"
+ "\x7a\xf2\x57\x48\x8f\xd3\x3a\x0d\xfd\xf7\x13\x8c\x9d\x99\xda\x88"
+ "\x7c\xdd\x41\xcc\xf5\xae\x7e\x22\xbc\xc4\x65\x30\xf2\x02\xfb\x05"
+ "\xf6\x91\x0d\x6e\xb2\x17\xe4\xba\x7a\x8b\x18\x4b\xc6\x09\xb2\x17"
+ "\xf2\x2a\xd0\xb7\x2b\xc6\x98\xe9\xb5\x7f\xbc\x0c\xfd\x63\x0d\x8b"
+ "\xf3\xa5\x01\x7a\xec\xe8\x68\xe7\x3c\x44\x9e\x99\x1d\xe5\x8c\x7f"
+ "\x85\xa2\xac\xe7\x74\xdf\xf8\x02\xa5\x71\xc4\x09\x75\x17\x0a\x36"
+ "\x6d\xa5\xed\x09\x23\x71\x5e\x11\xc6\xba\x11\x21\x8b\xc0\x6e\xf8"
+ "\x09\x74\xc1\x72\xc0\xd7\x39\x32\xe9\x8d\xe5\x60\x0b\xb4\x63\xbc"
+ "\x3e\xa8\xcf\x6a\x1e\xe7\x58\xc8\x1e\x1d\x07\xef\x98\xcf\x59\x41"
+ "\xf2\x39\xdb\xaa\xc3\x31\xba\x6b\x6e\x67\x85\x4e\xee\xfa\xe6\x21"
+ "\xbd\x53\xf9\x53\x0d\x3b\x9f\x2f\x1b\x6b\xe4\x6b\xd1\xff\x1d\x8d"
+ "\x74\x6d\x96\x8d\x35\xf1\xf9\xdc\x1d\x33\xf5\x69\x64\x44\x93\x6c"
+ "\xec\x2a\xb0\xab\xa2\xf4\x18\xb3\x5d\x7a\x97\x0e\x75\xcd\xda\x66"
+ "\xbf\x2b\x83\x64\x38\x73\x7f\xb2\x9b\x53\xce\xa2\x0f\xc7\x01\xca"
+ "\xde\xb1\x6c\x3f\xa0\x33\xe7\x50\x12\xd0\x29\x4a\xc8\x3b\x94\x0a"
+ "\x32\x25\x82\xbe\x00\x6d\xfd\x23\xb4\xb5\x09\xe8\xda\x04\x6d\x7d"
+ "\x49\x6c\xab\x18\xc3\x50\x00\xfa\xc3\xbb\xde\x75\x9f\xd4\xd6\x17"
+ "\xd0\x5f\x7b\x99\x66\xed\x59\xf2\x0b\x7a\x33\xae\xcf\xb2\xf3\x93"
+ "\xed\x66\xc7\xb7\x04\xbf\xcb\x74\xb3\x61\xae\x6e\x0e\xe0\x11\x69"
+ "\x0e\xf6\x40\x21\x0d\x36\x66\x48\x7c\xc0\xfa\xd0\xce\x84\x91\xa5"
+ "\xcb\xa1\x3e\x48\xfb\x73\x24\x1c\xfb\x33\xd0\x7e\x52\x29\xd2\xdf"
+ "\x33\x8e\x78\x28\xe3\xc1\x70\xe0\xc1\x72\x91\x07\xb9\x22\x0f\xc0"
+ "\x4e\x04\x3d\xad\x04\xfd\xab\x29\xcd\xe2\x3c\x18\x18\x8d\xae\xf7"
+ "\xea\xff\xdf\xcf\xfe\xba\xd3\x7b\x7f\x1d\x7f\xb6\x83\x8f\x0d\x65"
+ "\xe8\xfb\x16\x6c\xe3\x56\xa1\x13\xfa\x6d\x81\xd8\x6f\x69\xc2\x6f"
+ "\xa5\x3e\xdb\x20\xd3\xe4\xfa\xd6\x67\xc7\xad\xfe\x5f\xda\x67\x43"
+ "\x2f\x6d\x9f\x1d\xff\xa0\x67\x9f\x1d\x9f\xe4\xd9\x67\xc7\xdf\xee"
+ "\xea\xb3\xe2\xbb\x21\xe9\xb3\xe3\xa3\xae\x4c\x9f\x1d\x1f\xd5\x4b"
+ "\x9f\x2d\xf2\xa1\xcf\x6a\xbc\xf4\x59\xcd\xa5\xeb\xb3\x37\x2c\xba"
+ "\x7c\x3a\x76\xe2\x5b\x1d\xf2\x5e\x74\xec\xcb\x6e\x3a\x36\x08\x75"
+ "\x6c\xd8\xd4\xde\xfa\x6b\x67\x09\xf4\x57\x95\xd8\x5f\xff\xfd\x23"
+ "\x28\x6f\xc2\x3d\x9f\xd5\xf6\xdf\x5f\x1d\x25\x2e\xfb\xc9\x6b\x9f"
+ "\x4d\xc0\x3e\x5b\x46\xcc\x16\xd6\x67\x17\x48\x7d\xb6\x44\x1c\xeb"
+ "\xf4\xd1\x6f\x43\xbd\xf5\x5b\x8c\xeb\x86\x31\xdd\xfa\xec\xb7\xa2"
+ "\xbd\xd4\x39\x01\xfb\xad\xe9\x2a\xd3\xb5\x13\x2e\x7a\xf6\xdb\x89"
+ "\xe1\x9e\xfd\x76\xc2\x29\x57\xbf\x15\xdf\x0d\x49\xbf\x9d\x60\xbf"
+ "\x32\xfd\x76\x82\xfd\xe7\xa3\x6b\x6f\x0c\xbb\x7c\xba\xf6\xe6\x05"
+ "\xac\xdf\x7a\xd3\xb5\xe9\xa2\xae\x0d\x42\x5d\x7b\x63\x9b\x6f\x7d"
+ "\x57\x7b\xf6\x7f\x79\xdf\xbd\xc4\x3a\xf7\xa6\x0f\x3d\xfb\xee\x4d"
+ "\x8d\x9e\x7d\xf7\xa6\x2d\xae\xbe\x2b\xbe\x1b\x92\xbe\x7b\xd3\xce"
+ "\x2b\xd3\x77\x6f\xda\xf9\xf3\xd1\xb9\x37\x7b\x8d\x09\xab\x9d\x48"
+ "\x32\xea\x64\xb7\xdc\x63\x2e\x61\x7b\xe8\x32\xcc\x8e\x5f\xf3\xfd"
+ "\xe2\xb2\x5b\xe6\x9a\x35\x53\x89\x90\x67\x2a\xc3\xd8\x2e\xb8\xff"
+ "\x65\x93\xdb\xfe\x12\xbe\xfe\x7a\xcb\x6a\x69\x7f\xcc\x1b\x62\xfc"
+ "\x97\xbe\xf6\xc7\xd0\x1c\xd3\x54\xf1\x77\x3b\x39\x36\x4c\xd3\xa4"
+ "\x67\xe6\x8f\x46\x76\xcb\x2e\x9a\x6b\x8a\xb4\x06\x9a\x22\xbd\xad"
+ "\x91\x04\x67\x52\x8a\x7b\x42\x5a\x27\xc6\x5a\x5a\xf3\x08\x29\x64"
+ "\xeb\x0f\xb7\x58\xe1\xb7\xcc\x97\x67\x6b\xb0\xb2\xba\x35\x6b\x36"
+ "\x69\xcf\x9e\xa4\x90\xd2\x58\x2c\xf5\xac\x00\x2a\xc0\x3b\x5a\x10"
+ "\xb7\x07\xe3\xfb\xa1\xaf\xe4\xbb\x2e\x20\x16\x27\x85\x82\x8c\x60"
+ "\xfb\x3d\xd8\x9a\xfb\xf5\x37\xd8\x4a\x5b\x88\xa2\x6a\x3d\xdb\xf7"
+ "\x86\xfb\x6a\xb6\x16\x20\xfe\x03\xee\x28\xa6\x72\x05\x11\xb6\xc4"
+ "\x96\xd3\xa0\x8d\x5b\xd9\x3e\x60\xc0\x8a\xb4\xd7\x06\x63\x21\x0a"
+ "\x13\x62\x13\x24\x7f\xbd\x14\xea\xb7\x37\x0d\xcf\xaa\x06\xd0\xd2"
+ "\x44\xa2\x86\x4b\x45\x8d\x1b\xb7\x42\xbd\x4a\xa4\xb9\x43\xaf\x7b"
+ "\xba\x31\x1e\xf4\x0d\x1a\x85\xb8\xaf\x07\xfd\x16\xb0\x98\x42\x1b"
+ "\xe4\x42\x8e\x13\xd2\x69\x56\x3a\x35\xa7\x38\x48\x08\xd0\x02\xd7"
+ "\xdb\x31\x2e\x99\x50\x1a\x6b\x59\x37\x9e\x90\x77\xd7\x34\xca\x71"
+ "\xef\x85\xf3\xaf\x37\xd8\x4c\x69\xbf\xc4\xf5\x78\x16\x83\xa0\x41"
+ "\x36\x79\x73\xcc\x19\x1e\xfb\x19\xfe\x7f\x0b\xd7\x1d\x66\xc1\x33"
+ "\xae\x67\x0b\xad\x1a\x05\xe6\x85\xf4\x27\x4c\xc9\x27\x48\x88\x9e"
+ "\x28\x0b\xa0\x6d\x62\x5e\xf4\xb7\x01\xbc\x99\xcc\x62\x38\xc0\x73"
+ "\x24\xce\x95\xc3\xef\xd8\x3c\x29\x2d\x89\x2d\x67\xf2\xc1\xb0\x71"
+ "\x2b\xb4\xbf\x9c\xed\xfb\x84\x76\x6e\x80\x36\x43\x1e\x15\xee\xb7"
+ "\x61\xf7\x34\xa2\x2e\x82\x34\x2c\x07\xee\x2a\xb6\xe7\x57\x36\x59"
+ "\x8d\x65\x7b\x3d\x2b\xa0\xda\xb8\x95\x02\xb6\xf9\xf9\x1d\xd9\x91"
+ "\x3a\xd9\xad\x33\x42\x64\x94\xc2\x37\x13\xd6\xe1\x1c\x36\xee\xcf"
+ "\xc6\x3d\xe7\xb2\x5b\x27\x40\xf9\x8a\x37\xd8\x9c\xed\x64\x87\x45"
+ "\x36\xa9\xcb\x2f\x39\x5f\x67\xb9\x35\x16\xbf\x83\xbf\xe1\xf9\x27"
+ "\xb3\xfd\xe8\x58\x67\x6d\x5a\x00\x85\xf7\xd3\xf9\x1e\x6e\xe5\xdf"
+ "\xdb\xb3\x6f\x9d\xd6\xb5\x87\x9b\xff\x0e\xb0\x74\xeb\x6c\xe0\x19"
+ "\xdb\x5b\x86\xcf\x5e\xf7\x14\x8b\x7c\xab\xd4\x00\x36\xba\xf3\x4e"
+ "\xc2\x08\xe0\x42\xc2\x08\xd6\xf7\xbd\x34\x8b\x9c\xef\x11\xba\x95"
+ "\xf9\xb8\x2f\x00\x1e\x3a\x5f\xd7\x28\xd8\xbc\x74\x27\xf2\xa5\x0e"
+ "\xde\xdd\xf6\x67\xe4\xcb\x06\xd0\x05\x62\xde\x5d\xae\xfa\xe3\xf3"
+ "\x6d\x8c\x9f\x02\xf0\x82\xef\x59\xba\x6d\x09\x8b\x01\x05\x32\x03"
+ "\xf7\x9a\x1f\x4c\x21\xb8\xfe\x59\x4e\x01\x23\xef\x26\xda\xe5\xa5"
+ "\xc9\x3c\x7d\x6f\x8b\x5d\xbe\xa1\x89\xa0\x6c\x21\xc6\x3f\x12\x05"
+ "\xe8\x21\x05\x96\x49\xc3\x62\xd9\xf9\x07\xc6\xc7\x35\xc0\xbb\x64"
+ "\xc0\x2e\xd0\x7c\x03\xd0\xaf\xb4\x83\xad\xd3\x24\x94\x0a\x44\x25"
+ "\x40\x3e\x8b\xec\xb6\x6d\x50\x9e\x7a\xcb\x58\x6a\xc5\x3d\xd1\x40"
+ "\xc3\x7f\xb4\x67\xdf\x96\x21\xd1\x10\xeb\x84\x7b\x9a\x8d\xb8\x4f"
+ "\x5f\x76\xab\x83\x63\xe8\xd6\x0a\xa9\xcd\xde\xe8\x69\x7c\x97\x84"
+ "\x19\xef\x22\x53\x05\xe5\x99\x1a\x1a\x70\xc3\x56\x9c\x6f\x7e\xbc"
+ "\x19\xfd\x5e\x35\x92\x98\x57\x4e\x52\xb3\xd5\x49\x84\xc0\x33\x35"
+ "\xb8\x06\xe1\x5c\x77\xc7\x98\x18\x90\x44\x60\x6b\x28\xd3\xed\x44"
+ "\x6d\x4e\xb3\xf2\x58\x85\xe4\x3c\x71\xbe\x08\x32\x1c\xe4\x3a\xe8"
+ "\x54\x45\xfa\x79\x32\x0e\xe9\x25\x04\x19\x95\x0d\x32\xdd\x9c\x39"
+ "\x49\x24\x63\x60\x72\x54\xc7\xf6\x7f\xa2\x7d\x01\x32\x5f\x8e\xfb"
+ "\xea\xcc\x56\x07\xae\xbf\x0d\x6c\x1f\xa9\x4c\x97\xe0\x4d\x46\x62"
+ "\xbb\x05\x9c\x87\x16\xdb\x1c\x83\x6d\xb6\xd9\x09\xce\xe5\x3f\xbe"
+ "\x12\xfd\x2d\xb7\x11\x21\xf7\x4c\x0d\xb6\x19\x6c\x9d\x9c\x81\xcf"
+ "\xe9\xeb\xbc\xc6\xd5\xc2\x6f\x53\xa0\xb7\xb0\xee\x86\xad\x82\x6a"
+ "\x63\x0e\x7e\x1b\xeb\x80\xe7\x74\x1e\x6f\x23\x8c\xee\x48\x7f\xb3"
+ "\xdd\x49\x68\xa0\x7b\x1d\x1c\x03\xac\xc3\xed\xde\xdb\x7f\x17\x09"
+ "\x33\xbc\xcb\xf9\xee\x5c\x27\xd2\x20\x01\xd7\xc0\x36\xe6\x60\x8c"
+ "\x8e\xc7\xb1\x0e\xd6\xb3\x64\xd6\x59\xc2\xf8\x6f\xd6\x35\x13\x67"
+ "\xc0\x1d\x63\x70\x2f\x01\xf2\x3f\xcd\x01\xfc\xbf\x60\x47\x1f\x4b"
+ "\x56\x73\xc6\x45\x82\xf6\x8b\xa3\x55\x27\xef\xc9\xff\x3b\xe6\xcc"
+ "\x49\x19\x28\xff\xef\x18\x22\xfe\xdf\x71\x15\xb4\xff\x4e\x3f\xda"
+ "\x7f\xe7\x10\xb5\xff\xce\xab\xa0\xfd\xe1\x7e\xb4\x3f\x7c\x88\xda"
+ "\x1f\xee\xb5\xfd\x0f\x8f\x13\x28\xdb\x63\x12\x9c\xab\x47\x1d\xc0"
+ "\xf5\xd5\x94\x59\xb8\x87\x84\x9d\xcb\x12\x9f\x09\x3f\xa7\xa5\xec"
+ "\xf6\xac\xea\xf6\xac\xee\xf6\x1c\xda\xed\x59\xd3\xed\x39\x4c\x7a"
+ "\x06\x3d\x32\xec\x9c\x2c\xfc\x63\xb0\x4b\x33\x2c\xb2\x29\x71\xe2"
+ "\xfb\x49\xe8\x83\x0c\x74\xfa\xa4\x3e\xe2\x65\xde\xd0\x24\x9b\xc2"
+ "\x63\x87\xac\x1b\xaf\xa3\x6b\x32\x88\x60\x98\x1b\xf9\xf8\x5a\x90"
+ "\x5d\xc0\x3f\xda\xa9\x19\x0e\x36\xc2\xf5\xe8\xe7\x0e\xf7\x1c\x68"
+ "\x13\x71\x2f\xc9\x94\xf7\xb1\x7d\x77\xe9\x4d\x44\x08\xb8\x83\xad"
+ "\xe5\x0b\xc6\xb9\x91\xd6\x80\x3b\xc6\xd3\xcd\x45\xea\x02\xb9\xa0"
+ "\x2c\xc8\x12\xb4\x6b\xad\xd4\x3a\xf3\x3c\xc8\xa1\x36\xf4\x3d\x0f"
+ "\x3c\x4e\xa2\x56\x53\xe2\x59\xa8\xef\x5d\xe3\x2a\x53\xa1\x6c\xf8"
+ "\x0e\x7c\x0b\xc6\x71\x73\x43\xcd\x8e\x6a\x1c\x1f\x45\x56\xd9\xca"
+ "\x09\xc6\x24\x12\xcb\x8c\xa0\x41\x73\x43\xb1\xcc\x5e\xed\x53\x43"
+ "\xee\x36\xf8\xe6\xaf\xe7\xe8\x14\x84\x66\x2a\x42\x07\xc6\xd3\xbb"
+ "\xa6\x79\xb5\x7b\x0d\x79\x93\x78\xb9\x4a\x7f\xca\x2d\xea\xa3\x5c"
+ "\xb1\xbe\x6a\x7f\xca\x6d\xf6\x5e\x6e\xbe\x58\x5f\xad\x1f\xe5\xde"
+ "\x3d\xa3\x8f\x72\xc5\xfa\x46\xf9\x53\x6e\x89\xf7\x72\x0d\x62\x7d"
+ "\x33\xfc\x29\xd7\xe6\xbd\xdc\xdc\x6d\xfe\x61\x21\x22\xba\x2f\x2c"
+ "\xf8\x87\x83\x88\x3e\xda\x9f\xb7\xcd\x3f\x0c\x44\x78\xf5\xff\x82"
+ "\x18\xf0\x8f\xff\xf7\xf4\xc9\x7f\xff\x78\x7f\x4f\x71\x5f\xbc\xf7"
+ "\x8f\xef\xf7\x78\xc5\x3f\xda\xf2\xc0\xfb\x78\x1a\x5c\x44\x84\x82"
+ "\xb9\xf1\x42\x70\xee\xb3\xeb\x84\x28\xf2\x30\xc8\xb0\x90\x62\x32"
+ "\x3a\x8a\x8d\x8f\x7f\x99\xb1\xb6\x84\xc8\x61\xbc\x2b\x7f\x67\x4d"
+ "\x8d\xdc\xec\x98\x8a\x3a\xc7\xb9\x2d\xd9\x2e\xbb\x05\xd2\xf7\x83"
+ "\x84\xb7\x81\xdd\xc9\xcb\x99\x1b\x5f\x90\x16\x45\x44\xbf\x1b\x36"
+ "\x3c\x67\x1c\x03\x72\xcc\x5c\x6c\xc7\x3d\x2b\xa3\xe1\x77\x0e\xc0"
+ "\x2f\x94\x61\x27\xef\x09\x56\x59\x54\x22\xcb\x67\x65\xe7\xeb\x0a"
+ "\x72\x9f\xa5\xe9\x3a\xf4\xbf\x68\x85\x6f\x9e\x09\xb0\x12\x39\xfa"
+ "\x49\x6a\xcf\xfe\x65\xbd\x45\xf6\xab\x63\xe2\x79\xd2\x66\xe6\x27"
+ "\x14\xea\x8b\x67\x35\x31\x2f\xfa\x0b\xbd\x4b\x4f\xe4\xe8\xc3\xbd"
+ "\x3d\xfb\x57\x6a\xf4\x1d\xda\xd7\xb9\x6c\xa7\x61\xe3\x0c\xfc\x3d"
+ "\x35\x80\x0e\x3d\x4b\xe4\x78\x16\x13\xc6\x01\xa6\x02\x18\x43\x3c"
+ "\x72\x3b\xce\x79\xb4\x90\xb4\xb5\x54\xc0\xf9\x27\xaa\x32\xd8\x71"
+ "\x5f\x1c\xdf\xe3\xfd\x2b\x8c\xaf\x61\x13\x65\xff\xf8\x26\x78\x66"
+ "\xe3\x18\xdc\x17\xa3\x8a\x6b\xa4\x05\x41\x51\x55\xb6\x16\x16\x73"
+ "\xa8\x4e\xf6\xab\x77\xd0\x87\x63\xab\x6a\x63\x94\x4d\xb5\x31\x1a"
+ "\xea\x55\x26\xb5\x01\xbf\x2f\xa5\xe3\xb8\x0d\xf3\xc1\xfb\x72\xe9"
+ "\x9c\xb6\x97\xf8\xdd\x63\x62\x34\xd4\xda\xe5\x9b\x43\x76\xef\x14"
+ "\xa4\x3d\xd8\x0a\x53\x6d\xe9\xba\x89\x7c\x1e\x23\x92\x9d\x45\x80"
+ "\x7a\x4f\xe2\x63\xd3\xb9\x93\x98\x1f\x5f\xd0\x01\x73\x74\xf2\x01"
+ "\xda\xad\x91\x4c\xff\x9b\x26\xa2\x8e\xbc\xf7\x3a\x28\xff\x37\x75"
+ "\xb2\xc8\x14\x3e\x16\x9b\x3b\x95\x9d\x4f\x94\x45\x86\xc2\x37\xa6"
+ "\x52\x43\x9c\x05\xf3\xc1\xfb\x62\xf1\x7d\x94\xdb\xfb\x28\xdc\x27"
+ "\x29\xbe\x17\xc7\x72\x73\x67\xb8\xbd\x9f\xa1\x9f\x88\x73\x13\x91"
+ "\x16\x6c\x03\xe8\x33\x2d\xea\xb6\x2e\x5f\x23\x41\x73\xb5\x62\xbe"
+ "\xc8\x66\x59\xe4\xc5\x56\xc0\x16\xbc\x9f\xe6\xf6\xfb\x69\x07\x52"
+ "\x22\xc8\xc3\x5b\x90\x86\xf7\xaa\x2c\xf2\x02\x25\x1f\xcf\x46\x6a"
+ "\x58\xdb\x55\x73\x35\xee\xe5\x41\x7a\x0d\x94\xa9\xb1\x81\x1d\x05"
+ "\xff\xb3\xf9\x1f\x77\x7a\x4b\xa7\x24\xb5\x8b\x96\x2d\xd0\x2e\x5c"
+ "\xb1\x6a\x39\x9e\x72\x1b\xe9\xb1\xbf\x51\x8d\xe7\x40\x05\x43\x81"
+ "\xce\x5c\x8c\xe7\xd2\xd4\xec\x3c\x77\x11\xf0\xd1\x51\xb0\x29\xde"
+ "\x19\xbc\xd1\xea\x2c\x30\xaa\xd3\xdb\x88\x3c\x4d\x43\x4f\x99\xd6"
+ "\x3c\x44\xce\xc9\xee\x7d\x8b\xc5\x63\xd5\x32\x7f\xd5\x36\xd3\x9a"
+ "\x4f\x30\x8d\x9d\x53\x37\xc7\xf3\xb4\x0f\xd2\xca\xe5\xfb\xd2\x6a"
+ "\xe4\x15\xf1\x2d\xe4\x80\xc6\x4a\x0e\x6a\x5b\x48\x09\xa6\x0b\xd5"
+ "\x72\xdc\x37\x7a\x4e\x76\x5f\x10\x7e\x0b\xc7\xf8\xf8\x3f\x9f\xaf"
+ "\xb8\xf7\x4f\xf8\x1d\xf4\xf3\xd1\x2c\xbb\xf7\xcf\xf8\x3d\x8b\xec"
+ "\xde\xa2\x80\x12\xb6\xcf\x58\x05\xf9\x9e\x10\x8c\x05\x3a\xd6\xc7"
+ "\xb3\xef\x9d\xe1\x90\xab\x3a\xc5\x73\x6f\x2c\xfe\x40\x7b\xf6\x7d"
+ "\xd3\xdc\xce\x78\xaa\x5a\xe5\xe4\x01\x48\x9b\x2d\x9d\x2d\xc0\xf8"
+ "\x67\xde\x64\xc6\x45\x18\xcb\x5e\x2c\x89\x8d\x16\x54\x05\x40\xdf"
+ "\x02\x5d\x79\x39\xc1\xb9\x14\x19\xee\x81\x6d\x96\x4d\x05\xdb\xa3"
+ "\x40\x93\x86\xfd\x14\x68\xf1\xdf\xb8\x8f\x2f\x78\x53\xfc\x76\xdc"
+ "\xb7\x57\xb0\xd1\xfa\x5f\xc9\x76\xf9\x67\x15\xbb\x88\xf6\x5f\xd1"
+ "\x1e\xba\x6f\xff\xbf\x2c\xa2\x8e\x3b\x8e\x99\x48\x45\xfd\xdf\xc9"
+ "\xe7\xb5\xe5\x44\x35\x8f\x04\xa4\x5b\xa8\x93\x8d\xf7\x93\x88\x3c"
+ "\xc6\x42\x02\xd2\xda\xb0\x9f\x3a\x49\xfa\x2a\xb8\xdb\x2b\xc1\xc6"
+ "\xd1\x2f\x7d\x27\xad\x71\x98\xf6\x49\x42\xa0\x3f\xb1\x75\x63\x76"
+ "\xce\xc6\xca\xce\x2d\x07\xe1\x1c\xb6\xdb\xf9\x9a\x9a\xb5\x67\x89"
+ "\xb2\x32\xe1\x5b\x92\x1a\x4f\x05\xe7\x4b\xba\x31\x31\xf1\x01\x94"
+ "\x9d\xb1\x49\x81\xcc\x7a\xe0\xe9\x4b\xba\xe0\xd7\x92\x49\x68\x55"
+ "\x92\x85\x98\x1b\xcb\xc9\xeb\x89\x24\x94\xb6\x27\x04\x56\x54\x7c"
+ "\x46\x68\xde\x8f\xd5\xef\xa5\x99\x86\x49\x7b\xa6\x42\x32\x65\x38"
+ "\x67\x19\x6c\xc0\xbd\x53\x17\x48\xc4\xfc\xd3\x19\x6c\x9e\x15\xe7"
+ "\xb4\x1d\xed\x3a\x6d\x67\xbb\xee\xe6\x8e\x76\xdd\x44\x69\x2e\xfc"
+ "\x0f\x4b\xd4\x64\x0b\x9e\xcd\xc9\xbe\x1d\xf3\x2b\xd0\xb6\x77\x04"
+ "\xfe\x54\x83\xf3\xde\x88\x4b\xf8\x76\x98\xb0\x50\x47\xee\xb6\xb2"
+ "\xb3\x3f\x38\x17\xaf\x2e\x7d\x16\xea\xdb\xdc\x42\xdc\xf7\xff\x5c"
+ "\x7c\x49\x27\xc7\xbd\x3f\x34\xfb\xbe\x84\x8e\x2d\xb1\xd1\xb8\x07"
+ "\x08\x74\x41\xe4\xc0\xfb\xf6\xff\x61\x73\x13\xd8\x7e\x0a\x98\xdd"
+ "\xde\x82\xfc\x01\x3e\xb5\x58\xe5\xc8\x8b\xca\x45\xc8\x87\x6a\x0f"
+ "\x3e\x30\xbe\x25\xda\xe5\xc8\x0f\xe4\x05\xf2\xc4\xc5\x8f\xe3\x8c"
+ "\x1f\xdb\x05\xce\x8f\x0e\xd0\x03\x12\x4f\x2e\x86\xc5\xc6\xf5\xc5"
+ "\x17\xe4\x07\xf2\xa6\xa2\xfe\x5b\xe2\xc1\x13\x2b\xe7\x09\xd0\x73"
+ "\x8c\xc4\x17\xe4\x89\xb9\x19\x6c\x5d\xe0\xcb\xef\x8f\x13\xf2\x2f"
+ "\xb7\x53\xa1\x72\xe6\xd1\x2e\xfe\x38\xbc\xf1\xe7\x8c\x8b\x3f\xc0"
+ "\xfb\x9e\xfc\x39\xab\xc6\xb5\x19\xe4\xcf\x8e\x81\xf0\xa7\xa2\x9e"
+ "\xf3\xc7\x21\xf2\xe7\xf6\x68\x22\xb7\xb7\xeb\xe4\x9b\x93\xc9\xd4"
+ "\x99\xa7\xb5\xe4\x50\x5c\x25\x01\x5a\xdb\x05\xe3\xc6\xa9\xfe\xf5"
+ "\xa3\xdf\xa4\xf8\xde\x8f\x7e\x1d\x78\xad\x1f\x0d\xb4\x1f\xdd\xbf"
+ "\x63\x70\xfd\xe8\x37\x33\xae\xf5\xa3\xcb\xd5\x8f\x7e\x13\xd5\xbd"
+ "\x1f\x75\xe9\xea\xc4\xc5\xcb\x16\x2c\x59\x8e\xc7\xf7\x9e\x5d\x9d"
+ "\xb4\xf8\x45\xae\xb1\x3d\x74\xb6\xc6\x99\x16\x25\x47\xbf\x70\x15"
+ "\xc5\xd5\xe4\xbd\xf1\xd5\x72\xe7\x0f\x1a\x05\x35\x0c\xd7\x0a\x06"
+ "\x65\x19\xfa\xf7\xc4\xfe\x56\x84\x7e\x2f\x64\x0f\x6e\xab\x0a\xe3"
+ "\xb1\x34\xf1\x7f\x66\xaf\x84\xc5\xd6\xe0\x1a\xc9\xba\x35\x44\xb1"
+ "\x0e\xcf\x30\xdb\x71\x2e\x82\xbd\x0f\x42\x7f\x87\x74\x4b\x6c\x0d"
+ "\xfa\xad\xb1\xa9\xe2\x2c\xeb\xa1\x2c\x6b\x50\x81\x4e\xa1\xc5\x33"
+ "\x0e\xd3\x4b\x40\x1f\xcf\xeb\xf2\x85\x24\x8b\xaa\xa6\xc3\xa7\x59"
+ "\xb1\x9f\xe3\x79\xb3\x73\xb2\xe9\x47\x2e\x66\x11\xf4\xb7\x61\x9d"
+ "\x73\x3b\x7c\x67\x42\x6c\x1c\xf3\x4b\x00\x7d\x9e\xbf\x7f\x60\x15"
+ "\x7e\xbf\x53\x65\x64\xbe\x0d\x5b\x55\x9b\xe2\x5b\x0d\x1b\xad\x9f"
+ "\xa5\xee\x20\xda\x27\xb1\xcf\x4f\x77\xfe\xbe\x18\xfa\xfc\x6c\x13"
+ "\xa9\xd4\xfc\x17\xf9\x3c\x0e\xb0\x16\xd7\x5f\x9f\x77\xc3\xd8\x44"
+ "\xdf\xfa\xbc\x84\x2d\xc4\x14\x62\x0b\x71\x35\x0a\x70\x85\x58\x93"
+ "\xb0\xb5\xe9\x02\xc7\x56\x48\x2d\x51\xbf\xd6\x42\xf8\x9c\x04\xe0"
+ "\x0b\xcf\x05\x57\xa6\x1c\xf5\xde\xf7\x2f\x74\xc3\x96\x5c\xc4\xd6"
+ "\x4b\x80\xad\x97\x5c\xd8\x7a\xfa\x5b\x35\x79\x9d\x61\x4b\xe7\xc2"
+ "\x56\xee\x4f\x35\x12\xae\x10\x63\x88\x27\xe1\x79\x1d\xc1\xfe\x2e"
+ "\x61\xac\xf4\x39\xbe\xc6\xc9\xfa\xbe\x1c\xfa\x7e\xbb\x9b\x0e\x9d"
+ "\x30\x98\xbe\xff\x00\xdb\xff\x84\x3c\x41\xfe\x20\x5f\x90\x17\xff"
+ "\x8c\x7c\x40\xbf\xb4\xb4\xbd\x37\x5e\xdc\xb6\xab\x3f\x5e\x20\x1f"
+ "\x90\x1f\x8c\x0f\xc0\x0f\x69\xbd\x19\xd7\x1f\x91\x27\xc8\x8b\xbb"
+ "\x52\x89\x1c\xf9\x52\x0a\xfd\x1d\xfb\x38\xd0\x76\x1a\xf2\x85\xd9"
+ "\xad\x59\x41\xbb\x8a\xf0\xcc\xac\x18\xf3\xb7\x3d\x3b\xca\xda\xd3"
+ "\x66\x7d\x50\xd1\xe5\x8b\x52\x36\xbd\x8c\x8f\x31\x8c\x3c\x7e\x8a"
+ "\xec\xa1\x39\x62\x1f\x36\xe1\x78\x8f\x8d\xed\x9c\x30\xb6\x53\xc1"
+ "\xd8\xce\x00\x63\xbb\x94\x46\xd1\x5f\xc0\x83\xdc\xef\x28\x8e\xe5"
+ "\x82\x0c\x76\x6a\x8c\x6b\x44\x9a\xb1\x75\xd2\xa0\x8d\x51\xb8\xae"
+ "\x43\x8d\x30\x6e\xfc\x0f\x39\x81\x67\xc0\x8d\x73\x80\x78\x79\x50"
+ "\x2f\xae\x03\x47\xea\xd7\xe0\x1e\x81\x87\xa2\x78\xfd\xa6\xcf\xc5"
+ "\x74\xb6\x86\x26\x17\xb6\x3a\xd7\x79\xae\xa1\xb9\xaf\xb1\xbe\x97"
+ "\x66\x15\xd7\xcf\x1e\x62\x3e\xad\x51\x26\xa0\x1c\x7b\x27\xad\x5a"
+ "\xee\x5a\x43\x3b\x8a\xef\x6f\xf7\x5c\x43\x7b\x50\x3c\x27\xfd\x50"
+ "\x2c\xee\x1b\x81\xf7\x6a\x9e\x3e\x3d\xce\x3d\xdd\xb5\x46\xcd\xd3"
+ "\x05\x39\x8b\x75\x82\x63\xec\x66\x3e\xb6\x7e\x68\xa9\x34\x86\xf5"
+ "\x62\xcf\x0c\x40\xce\x3e\xaa\x75\xc9\xd9\x47\xf9\x5c\xb3\xa6\x48"
+ "\x59\xd9\x43\xce\x9e\x80\xf7\xbf\xcb\x7d\x1c\xe5\xac\xc1\x48\x44"
+ "\x9e\x5e\x04\x9a\x04\x60\xcc\x4a\x4c\xc7\xf3\x3a\x28\x73\xb7\x30"
+ "\x19\xbc\xc9\xbe\x9e\xad\x93\x3f\xac\xf1\x94\xbd\xbf\x9b\xe9\x29"
+ "\x7b\x1f\x9e\xd5\xb7\xec\x9d\x71\xbe\x6f\xd9\xfb\xf0\xea\x6b\xb2"
+ "\xd7\x5f\xd9\x0b\x76\xd7\xa0\x64\xef\x8c\x3d\xd7\x64\xef\xa5\x92"
+ "\xbd\x33\x76\xb9\xc9\xde\xb7\x3c\x65\xef\xef\x96\xf6\x94\xbd\xbf"
+ "\xcb\x70\xc9\xde\x87\x27\x79\xca\xde\x47\x8f\xf8\x26\x7b\x7f\x57"
+ "\x79\x69\x65\xef\xef\x9a\x3d\x65\xef\xa3\x7b\x44\x39\xb2\x7f\xe0"
+ "\xb2\xf7\xd1\x2d\x7d\xcb\xde\x47\xdf\xf2\x94\xbd\x8f\xa6\x70\x19"
+ "\xfb\x68\x35\x97\xbd\x8f\x1a\x44\x19\x6e\x72\x4f\x77\xc9\x5e\x9e"
+ "\xde\x53\xf6\x3e\xda\xd8\x8f\xec\xd5\x39\x05\x49\xf6\xd6\x80\xec"
+ "\xad\x91\x0b\xcf\x7b\x93\xbd\x33\x6d\x95\x28\x7b\x13\x51\xf6\xce"
+ "\xb4\xf5\x2d\x7b\x67\xfe\x01\x65\x2c\xf3\x4b\xf9\x17\x5a\xcf\xfc"
+ "\x02\xfe\x85\x36\x22\x1e\x1f\x4f\x85\x74\x48\x43\xff\x89\x98\x4f"
+ "\xe4\xbd\x28\xa3\xa3\xb7\x74\xc9\x68\xc8\x27\x8c\x73\xc9\x68\x94"
+ "\xcf\x28\xa7\xb7\xfc\x85\x5a\x4a\xff\x42\x6b\xdb\xb3\xa3\x0f\x4a"
+ "\xb2\xda\x08\x69\x18\x6b\x08\x7d\xf7\xe0\x9e\x41\xa0\x41\xfd\x3a"
+ "\xf8\x1e\xe6\x87\x7c\xcd\x9e\x32\x7d\xa6\xd6\x53\xa6\x3f\x76\x53"
+ "\xdf\x32\xfd\xf7\x87\xfa\x96\xe9\x8f\xcd\xba\x26\xd3\xaf\x94\x4c"
+ "\xff\x7d\xe1\x35\x99\xde\xbf\x4c\xef\x8d\x17\xdd\x65\xfa\x14\x51"
+ "\xa6\x6f\xe9\x92\xe9\xbf\x37\x78\x97\xe9\x33\xa3\x7a\xca\xf4\x99"
+ "\xb1\x2e\x99\x1e\x6d\xf7\x94\xe9\xb3\xde\xf2\x4d\xa6\xcf\x7c\xf3"
+ "\xd2\xca\xf4\x99\x26\x4f\x99\x3e\xab\x50\x94\x3b\xd3\xdd\x65\xba"
+ "\x10\xe0\x8b\x4c\x9f\xb5\x52\x92\xe9\x28\x33\xdf\x11\x6a\xdc\x64"
+ "\x3a\xca\xb6\x59\xab\x4d\xc9\x75\x6e\x32\x7d\xd6\x4c\x2e\xbb\x67"
+ "\x6d\x73\x32\x99\x3e\x2b\x9e\xa7\x47\x4f\x73\x4f\x77\xc9\x74\x9e"
+ "\xee\x74\x97\xe9\x8d\x28\xd3\x67\xed\xe9\x47\xa6\x47\xf8\x2e\xd3"
+ "\x9f\x0a\x73\xc9\xf4\xa7\xc2\x24\x99\x8e\x72\x1c\x65\x3a\xca\x60"
+ "\x94\xeb\xcc\x57\x15\xdb\xf7\xf0\xe4\x2b\x21\x56\xa2\x44\x1f\xb9"
+ "\x38\x87\x81\xb2\x18\xfd\xf1\xa0\x6c\x67\x79\x96\xf3\x3c\x20\x9f"
+ "\xd1\xbf\x69\x23\xc8\xe4\x46\xe3\x39\xa2\x80\x7c\x35\x05\xb8\x87"
+ "\x0e\x9e\x51\x76\x87\x34\x83\x1e\x70\x30\x3d\x50\x83\xfa\x83\xd3"
+ "\xeb\xc9\x57\x3c\x75\xc1\xe3\x6f\xf7\x66\xaf\x17\xba\xe9\x82\xd2"
+ "\xb1\xf4\x58\x7b\xf6\xe3\x15\x92\x7c\x2f\x80\x67\xd4\x01\x85\x2d"
+ "\x4c\x07\x58\x40\x07\xd4\x73\x1d\xf0\xb8\xb5\x2b\x0f\xd4\x81\xe5"
+ "\xe1\x7a\xa2\x06\xf2\xd4\xf2\x3c\x31\xa1\x9e\x7a\xe2\xc9\x68\x4f"
+ "\x3d\x11\xf3\x18\xea\x09\xf4\xdb\xca\x62\xae\x1b\x0b\x34\xce\x2d"
+ "\xb1\x71\xa8\x33\xf8\xfb\xd9\x67\xbb\xf4\xc4\x58\x37\x3d\x91\x22"
+ "\xe9\x89\x98\x55\x57\xbd\x9e\x00\x2c\x57\xa6\xfe\x33\xea\x89\xd9"
+ "\xbb\xae\x06\x3d\x81\x3c\x18\xe5\x36\xb7\xea\x8d\x0f\xe8\x1f\xa1"
+ "\x72\xe9\xcf\x45\x4f\xcc\xde\xe9\x5d\x4f\x3c\x99\xd0\x53\x4f\x3c"
+ "\x99\xea\xd2\x13\x31\x5a\x4f\x3d\xf1\x54\xa5\x6f\x7a\xe2\xc9\xc3"
+ "\xdd\xf5\x04\xd2\xac\x80\xef\x09\x68\x46\xfd\xe0\x34\x6e\xc4\xb9"
+ "\xdf\x19\xfe\xe9\x89\x27\x1b\x3d\xf5\xc4\x53\xbb\x44\x99\x34\x7a"
+ "\xe0\x7a\xe2\x29\xe6\x1f\xb1\x40\xd2\x13\x17\xba\xeb\x89\xa7\xde"
+ "\xf4\xd4\x13\x4f\x25\x71\x7d\xf0\x54\x05\xd7\x13\x4f\xe5\xf0\xf4"
+ "\xc7\xd5\xee\xe9\x2e\x3d\xc1\xd3\x7b\xea\x89\xa7\xea\xfb\xd1\x13"
+ "\xaa\xce\xb0\xd8\xb8\x4e\xc3\xa6\x28\xc7\xb6\x58\x4b\x78\xdc\x03"
+ "\xce\xee\x7d\x80\x63\xdf\x49\xb0\x2f\x74\xad\xf9\x3c\xc3\xd7\x18"
+ "\x04\xf1\xdc\x6d\x47\x58\x6c\x74\xc3\x52\xe8\x07\xcd\xde\xfb\x01"
+ "\xf4\x01\xa5\xd4\x07\x2a\x13\x4e\x13\xe8\x17\x72\x5c\x07\x7a\x1d"
+ "\xf0\x6f\xb6\xd5\x30\xb9\xa4\xaa\x8f\x22\xe8\xaf\x30\xa8\x99\xa8"
+ "\x83\x64\xb2\xe1\xb8\xc6\xe0\x84\xbe\xf0\xc8\xed\x54\xb8\xb3\x26"
+ "\x8a\x04\x25\x90\x60\xec\x0f\xef\x8a\x6b\x0d\xe8\x33\x01\xd7\x18"
+ "\x00\x87\x11\xf3\x8f\xb8\xd6\x18\x3a\x7c\x58\x63\x30\xa7\x58\xd8"
+ "\x1a\x03\x9e\x23\x12\xa0\x0f\xb0\xb3\x2d\xb8\xc6\x60\x67\xeb\x32"
+ "\x6a\x76\x9e\x84\xad\x31\xd4\x11\x5c\x5f\x90\x7c\xa2\xe0\xba\xc2"
+ "\x9d\x71\x44\x8e\x3e\x15\x5e\x07\xfc\x1f\xd2\x55\x12\xec\x03\x03"
+ "\x97\x47\x73\xbc\xee\x7f\x42\xbe\x38\x80\xa6\x4e\xd5\xa6\x28\xfa"
+ "\x5a\x51\xc4\x7f\xd7\xd9\x65\xe8\x0f\xd2\x09\x3c\x12\x40\xee\x50"
+ "\x65\x37\xb9\xd3\x29\xd2\xbb\x93\xd3\x1b\x78\xa5\x7c\xc6\x46\x28"
+ "\xa4\x73\x7f\x90\x76\x0b\x60\x4d\x37\x66\xcb\x1a\xa4\x6d\x04\xd9"
+ "\x22\xfa\x84\x14\x5e\x4e\x08\x14\x80\x9e\x78\x7e\xe0\x9d\x0b\xf6"
+ "\x61\x4e\xe5\x99\x1a\x43\x07\x09\x07\x19\x13\x84\x32\x06\xf0\x39"
+ "\xf2\x8d\x0e\xa0\xed\x29\x4e\x5b\xf4\xe9\x85\x77\xc7\xcb\x3a\x2d"
+ "\x94\x7d\x73\x67\x27\xd0\xd7\xce\xe9\xfb\xcc\x4a\x35\x29\x95\xd6"
+ "\xd8\x3a\x30\xae\x42\x0d\x93\x31\x8f\xdb\x42\x28\xc6\x9b\x70\x76"
+ "\xea\xc2\x84\x1f\x80\xbe\x36\xe8\x53\x9d\x3a\xe4\xbf\xba\xb4\x01"
+ "\xd7\x04\x4f\xf0\x35\xb6\x40\xd1\x57\xc5\xcb\x20\xef\x97\x68\x89"
+ "\xb9\x0c\xe4\xed\xf0\xa7\xec\x9d\x5b\x62\xa3\xa9\x0c\xe4\x7d\xea"
+ "\x40\xe9\xfb\xaf\x65\x57\x86\xbe\xda\x9f\x11\x7d\xe7\x14\xfa\x4f"
+ "\xdf\x38\xe5\x95\xa1\xaf\xfa\x67\x44\xdf\x7f\xb5\xfa\x4f\xdf\xb9"
+ "\x5e\xf7\x3f\x23\x7d\xd1\xbe\x97\x6c\x7b\xc9\xae\x47\xdd\xc2\x75"
+ "\xe3\xd3\x16\x97\x4d\xff\xb4\x45\x5a\x8b\x04\xda\x28\x8c\xe2\x1c"
+ "\x8d\xfe\x39\x72\x63\x93\xec\xe9\x39\xd2\x3a\x24\xda\xd4\x8c\x57"
+ "\xaf\x01\xaf\x96\xe3\x39\x11\x91\x4f\xa0\x07\xe6\xdb\x40\x56\x4f"
+ "\x88\x8d\x73\x1a\x41\x4f\xbc\x15\x6b\xf1\xc2\x33\x39\xca\xf8\xa0"
+ "\x24\xa2\x7e\x46\xcf\x79\x27\xbc\x0c\x3c\xeb\x00\xfb\xc6\xde\x48"
+ "\xf0\xdc\x67\x48\x23\xc8\xd5\xce\x84\xc0\x79\x60\x2f\x4b\x7c\x7b"
+ "\x37\xd9\xce\x6c\x9b\x5e\xf9\xb6\xd9\x93\x6f\xad\xbd\xf0\xcd\xb5"
+ "\xb6\x0f\x76\x26\xe3\x9b\x85\xf1\x8d\xc9\xf5\x97\xc1\xb6\x01\xfe"
+ "\x49\x7c\x63\x72\x1d\x78\xc7\xf8\xd6\x5c\x47\x9c\x6e\x72\x1d\xed"
+ "\x1a\xe4\x5d\x45\x3c\xd8\x97\xd9\x71\xb3\x19\xdf\xd0\xce\x8c\x1f"
+ "\x28\xdf\x9e\xee\x66\xcf\xcc\x33\xfa\x66\xcf\x3c\xbd\x05\x6d\x16"
+ "\x77\x7b\x06\x9f\x5b\x61\xcc\xeb\x0c\xda\x38\xc3\xe6\x97\x0d\xf3"
+ "\xf4\x76\x4f\x1b\x66\x5e\x0a\xaf\xd3\xdc\xd3\x03\xb7\x61\xe6\xb1"
+ "\xf5\xa6\x77\x5e\xe3\x63\x49\x4f\xfb\x65\xde\x02\x4f\xfb\x65\x5e"
+ "\x24\xb7\x53\xe6\x19\x5a\xb3\xd0\x7e\x99\x17\xcd\xd3\xe7\xd6\xbb"
+ "\xa7\xbb\xec\x17\x9e\xde\x8a\xbe\xc1\xb2\xe7\x15\x0f\xcc\x66\xb9"
+ "\xfb\x0a\xdb\x2c\x11\x7d\xd8\x2c\x11\xff\x64\x36\xcb\x1f\xfa\x8a"
+ "\x21\x73\x4d\xa7\x32\x99\x3f\x6f\xbb\xff\x32\x7f\xbe\xd7\x58\x19"
+ "\xd7\x74\xaa\x44\xdf\x67\x66\xf8\x4f\xdf\xf8\x3d\xfe\xeb\xd4\x85"
+ "\x91\x2e\x9d\xba\x30\xd2\xbb\x4e\x7d\xf6\xed\x6b\x3a\xb5\x37\x9d"
+ "\x3a\x7f\x9b\xff\x3a\xf5\xd9\x24\x4f\x9d\xba\xf0\x94\x6f\x3a\xf5"
+ "\xd9\xf3\x43\xaf\x53\x17\x12\x4f\x9d\xba\xb0\x82\xd7\x69\xc1\xfd"
+ "\x03\xd7\xa9\x0b\xdf\xf1\xae\x53\x17\x7e\xe8\xa9\x53\x17\xe6\x70"
+ "\xdd\xb9\xd0\xc2\x75\xea\xc2\x12\x9e\xbe\x60\xaa\x7b\xba\x4b\xa7"
+ "\xf2\x74\xae\x53\x17\x36\x0f\x4c\xa7\xde\x78\x85\x75\xaa\xb6\x0f"
+ "\x9d\xaa\xfd\x27\xd3\xa9\x8b\x67\x5f\x93\xf9\xfd\xc9\xfc\x45\xc4"
+ "\x7f\x99\xff\x9c\x57\xff\x77\xfd\xcb\xfc\x25\x3a\x97\xcc\x5f\xa2"
+ "\xf3\x2e\xf3\x13\xb6\x5c\x93\xf9\xbd\xc9\xfc\xc5\xc5\xfe\xcb\xfc"
+ "\x84\x04\x4f\x99\xbf\xe4\xb8\x6f\x32\x3f\xe1\xf4\xd0\xcb\xfc\x04"
+ "\x9b\xa7\xcc\x5f\x62\xe2\x75\x7a\x7e\xca\xc0\x65\xfe\x92\x37\xbd"
+ "\xcb\xfc\x25\x6f\x7b\xca\xfc\x25\xa9\x5c\xb6\x2f\x39\xc6\x65\xfe"
+ "\x92\x42\x9e\xfe\x7c\xb8\x7b\xba\x4b\xe6\xf3\x74\x2e\xf3\x97\x58"
+ "\x06\x26\xf3\x43\xae\xb0\xcc\x57\xf7\x21\xf3\xd5\xff\x64\x32\xff"
+ "\x05\xaf\xe7\x3f\xfb\x97\x49\xcb\xf6\xb8\x64\xd2\xb2\x3d\xde\x65"
+ "\xd2\xb2\x7b\xae\xc9\xa4\xde\x64\xd2\x12\x9b\xff\x32\x69\xa9\xc3"
+ "\x53\x26\x2d\x5f\xe2\x9b\x4c\x5a\xb6\x7a\xe8\x65\xd2\xb2\x1c\x4f"
+ "\x99\xb4\x3c\x96\xd7\xe9\x85\xfd\x03\x97\x49\xcb\xef\xf5\x2e\x93"
+ "\x96\x4f\xf7\x94\x49\xcb\xc5\x35\xa8\xe5\x09\x5c\x26\x2d\x9f\xc4"
+ "\xd3\x5f\x30\xb9\xa7\xbb\x64\x12\x4f\xe7\x32\x69\x79\x52\x7f\x32"
+ "\x09\xb1\x5f\xa9\xe9\x86\xfd\x17\x24\xec\xeb\x2b\x3e\x2f\x91\xb0"
+ "\xaf\xaf\x60\xfb\xdd\x4a\x62\x6b\xf2\x93\x89\xc2\x80\x71\x2e\xa0"
+ "\xbf\xeb\xff\x1d\xb1\xaf\x7f\x10\xf7\x2d\xa8\x6a\x41\x86\xd5\x8b"
+ "\x32\x2d\x05\x64\x5a\x3d\x3c\xa3\x1f\xa8\x09\xb1\x35\x28\x8b\x70"
+ "\xfd\x1f\x9f\xb9\x6c\xb3\x0e\xc3\xf3\x92\x03\x3a\xcb\x54\x2f\x9e"
+ "\x65\x5a\xd4\xf3\x2c\x53\x89\xdb\x99\x19\xec\x1b\x41\x99\xb2\x60"
+ "\x5c\xd7\x05\xf9\x26\xca\xb1\xf2\x61\x0e\xa5\x28\xc7\x2e\x80\x1c"
+ "\xbb\xe0\xea\x13\x28\xc7\x5a\x41\x8e\xd9\x5e\xd2\x4d\x44\x59\xd6"
+ "\xf3\x1c\x13\x5f\xc7\x65\x72\x2c\xb7\x9b\x1c\x7b\xbe\x9b\x1c\x7b"
+ "\x0e\xe4\x58\x3c\xc8\xb1\x40\x57\x7f\xb8\xa5\x96\xc8\x67\x2e\x80"
+ "\x3e\x01\x72\x6c\xd3\x05\x94\x63\x87\xfc\x94\x63\x7a\x95\x67\x7f"
+ "\x58\xb9\xda\xb7\xfe\xa0\xcf\xf5\xd6\x1f\x3a\x8d\xfe\xf6\x07\x7d"
+ "\xb1\x67\x7f\x58\xb9\x48\xec\xa3\x1f\x0f\xbc\x3f\xac\x7c\xa4\xab"
+ "\x3f\xbc\xd0\xbd\x3f\xac\x9c\xe5\xd9\x1f\x56\x6a\x39\xee\x57\xa6"
+ "\xf0\xfe\xb0\x32\x52\xec\x27\x7b\xdc\xd3\x5d\xfd\x81\xa7\xf3\xfe"
+ "\xb0\x72\xfd\xb5\xf5\xd9\xab\x55\x47\x27\x36\x5e\x5b\x9f\xed\x6f"
+ "\x5c\xb6\xb2\xd8\xff\x71\x59\xd2\x15\x5a\xff\xfe\x39\xcd\x25\xbf"
+ "\x18\xe1\x3f\x7d\x57\x5d\xa1\xf5\xef\x9f\xd3\xbc\x42\xd2\x20\xd6"
+ "\xbf\x5f\xea\x73\xfd\xbb\x6f\x3b\x66\x75\x71\x45\x97\x0d\xbf\xba"
+ "\x58\xda\x73\xd9\xd3\x86\x5f\x1d\xe4\x79\x7e\xe9\xa5\xdd\xdd\xf7"
+ "\x43\xf6\x67\xdb\x3b\xfe\x57\xd9\xf6\xab\xac\xfe\xdb\xf6\x29\x35"
+ "\x9e\xb6\xcc\x9a\x47\x7c\xb3\x65\x56\xcf\xf1\x66\xcb\x38\xfc\xb6"
+ "\xed\x57\x2f\xf2\xb4\x65\xd6\x44\x88\xfc\x7f\x65\xe0\xb6\xcc\x9a"
+ "\xd1\xde\x6d\x99\x35\xe3\x3c\x6d\x99\xd5\xcd\xdc\x66\x59\x33\x83"
+ "\xdb\x32\x6b\x78\xbc\x69\xd9\x4b\xeb\xdd\xd3\x5d\xb6\x0c\x4f\xe7"
+ "\xb6\xcc\x9a\xd9\xd7\xd6\x6d\xaf\x56\x5b\xe6\xe5\x9d\xd7\x74\x6d"
+ "\x7f\xba\x60\xcd\x22\xff\x75\xc1\xda\xd0\x6b\xba\xb6\x3f\xfa\xbe"
+ "\xec\xf0\x9f\xbe\x69\x49\xfe\xeb\xda\x4c\x85\x4b\xd7\x66\x2a\xbc"
+ "\xeb\xda\x8c\xd5\x9e\xba\x36\x7d\xf2\x35\x5d\xdb\x97\xae\x5d\x3b"
+ "\xcf\x7f\x5d\x9b\x31\xc3\x53\xd7\x66\xbe\xef\x9b\xae\xcd\xd8\x3f"
+ "\xf4\xba\x36\xa3\xda\x53\xd7\x66\x96\xf0\x3a\xa5\x9d\x1f\xb8\xae"
+ "\xcd\x5c\xeb\x5d\xd7\x66\xbe\xe2\xa9\x6b\x33\xc5\x33\xf4\x99\x3b"
+ "\xb8\xae\xcd\x5c\xca\xd3\xd3\xac\xee\xe9\x2e\x5d\xcb\xd3\xb9\xae"
+ "\xcd\xec\xef\xfc\xcf\xb5\xf5\xdc\x2b\xa6\x6b\xd7\x69\xaf\xe9\x82"
+ "\xfe\x74\x41\x66\xb5\xff\xba\x60\x7d\x86\xff\xba\xe0\x55\xb5\x4b"
+ "\x17\xbc\xaa\xf6\xae\x0b\xb2\x5f\xf1\xd4\x05\xaf\xdc\x73\x4d\x17"
+ "\xf4\xa5\x0b\xd6\x25\xf8\xaf\x0b\xb2\x67\x7b\xea\x82\x57\x3f\xf6"
+ "\x4d\x17\x64\x57\x0e\xbd\x2e\xc8\xae\xf5\xd4\x05\xaf\x96\xf1\x3a"
+ "\xad\x77\x0e\x5c\x17\xbc\x9a\xeb\x5d\x17\xbc\xfa\x27\x4f\x5d\xf0"
+ "\xea\x22\x2e\xf3\x5f\xdd\xc3\x75\xc1\xab\x29\x3c\x7d\xbd\xc3\x3d"
+ "\xdd\xa5\x0b\x78\x3a\xd7\x05\xaf\x96\x5f\x5b\xe7\xbd\x5a\x75\x41"
+ "\x6e\xb8\xff\xb2\x2a\x7f\x8f\x4b\x56\xe5\xef\xf1\x2e\xab\xf2\xef"
+ "\xf1\x94\x55\xb9\xdf\x5e\x93\x55\x7d\xc9\xaa\x57\x6b\xfd\x97\x55"
+ "\x79\xdd\xd6\x7f\x0d\x3e\xae\xff\xe6\x7b\x5d\xff\xf5\x5f\x56\xe5"
+ "\x77\x5b\xff\x35\x88\xeb\xbf\xb9\x6f\x0f\x5c\x56\x19\xee\xf5\x2e"
+ "\xab\x0c\xdd\xd6\x7f\x0d\xe2\xfa\xaf\x41\x5c\xff\x35\x88\xeb\xbf"
+ "\xb9\x65\xee\xe9\x2e\x59\xc5\xd3\xb9\xac\x32\x0c\x72\xfd\xb7\xa0"
+ "\xde\xb5\xfe\x5b\xc0\xce\x0c\x08\xc5\x45\xca\x9e\xeb\xbf\x05\x73"
+ "\x71\xfd\xd7\xd5\x27\x0c\x6d\x6c\x2d\x18\xfb\x85\x8d\xfb\x15\xe9"
+ "\x75\x5d\x78\x5c\x91\xf2\xda\xba\xf0\x50\xac\x0b\x17\x74\xf3\xe7"
+ "\xb3\xe1\x4f\xbe\xf5\x93\x82\x37\x87\x7e\x5d\xb8\x60\x87\x67\x3f"
+ "\xd9\x90\x2a\x62\xc2\x8f\x75\xe1\x0d\x7f\xf0\xde\x4f\x36\x2c\xf6"
+ "\xec\x27\x1b\xc4\x7d\xb9\x1b\x0a\x79\x3f\xd9\x30\x53\xec\x3f\x7b"
+ "\xdc\xd3\x5d\xfd\xc4\xe0\xb6\x2e\xbc\xa1\xc4\x17\x9d\xee\x50\x6d"
+ "\x9a\x81\x3a\x3a\xbc\xe6\x01\x67\x17\x9e\x93\x44\x3c\xf7\xa6\xd3"
+ "\x9f\xe5\xb2\x1f\x71\xdc\xb9\x2d\xb6\xbe\x5f\x9d\x5e\x2f\xea\xf4"
+ "\x45\x3d\x75\xba\xa4\xcf\x11\xcf\xaf\xfb\xb4\x26\xdc\x0d\xd7\x03"
+ "\xd2\xe7\x77\xec\x18\x0c\xae\x11\xd3\x9e\xfa\xdc\x5f\x5c\x17\x5e"
+ "\xa1\xf3\x2f\x3f\xa7\x35\xe1\x0d\x3b\xfc\x1f\xdb\x6d\xbc\x42\xe7"
+ "\x5f\x7e\x4e\xf3\xd4\x7f\x1a\xc4\xf9\x97\x4d\x7d\x9e\x7f\xb9\x36"
+ "\x37\x81\xf4\xdd\xb8\xcd\x7f\xfa\xfe\xd9\x6b\xfc\xd7\xfe\x6d\x9b"
+ "\xbf\x56\xb8\xec\xfd\xbf\x56\x48\xb6\x8d\xe4\x2f\x0d\x64\xa6\xc2"
+ "\x98\x08\xd7\x05\x42\xf2\x13\x99\xaf\x6f\xa5\xb9\xfe\x38\xd1\xa7"
+ "\xa1\xbd\xf3\xd7\x07\x63\x52\xdc\xed\x9d\x3f\x9f\x92\x6c\x9d\x18"
+ "\xb4\x83\xc0\xae\x41\x9b\x46\xb2\xf1\xd1\x37\x4e\x9f\xfb\x41\x27"
+ "\xc7\xd6\xe3\x98\xa0\x33\x68\xd3\x8c\x7f\xfe\xf1\x40\x91\xc2\xff"
+ "\xf1\xc0\x5f\xbb\xed\x7f\x2b\xf6\x71\xff\xdb\x5f\xbd\xee\x7f\xf3"
+ "\x7f\x3c\xf0\xd7\x6e\xfb\xdf\x8a\xc5\xfd\x6f\x7f\xde\x3c\x70\x3b"
+ "\xa7\xb8\x8f\xfd\x6f\xc5\xdd\xf6\xbf\x15\x8b\xfb\xdf\x8a\xc5\xfd"
+ "\x6f\xc5\xe2\xfe\xb7\x3f\x17\xbb\xa7\xbb\xec\x1c\x9e\xce\xed\x9c"
+ "\x62\x9f\xf6\xbf\x81\x9d\x13\x3d\x08\x3b\xa7\xf1\xe7\x63\xe7\xdc"
+ "\x79\x95\xd8\x39\x9b\xbd\xc6\x3f\x74\xd3\x13\x33\xba\xe9\x89\xfa"
+ "\xff\x5d\x7a\xa2\x78\x10\x7b\xdf\x5e\xef\x73\xff\x3f\xa3\xaf\xc1"
+ "\x8d\xbe\x28\xa3\x45\xda\x3a\x27\xc5\xd6\xfb\x45\x5f\x90\xcd\x5b"
+ "\xd2\x7e\x2e\xb4\x7d\x2d\xdc\x7f\xda\x96\x6c\xbd\x66\xe3\xf4\x47"
+ "\xdf\xd7\x0d\xfe\xd3\xb7\x94\xf8\x6f\xe3\x6c\xad\xfe\xbc\xcb\xc6"
+ "\xd9\x5a\xdd\xdd\xc6\x41\x9b\x66\x96\x9d\xdb\x3a\xf9\x60\xa3\xe4"
+ "\x2d\x07\x7b\x27\x99\x10\x73\xfd\xc7\xc4\x00\x36\x4f\xde\x39\xb0"
+ "\x7b\x96\x82\xdd\xe3\x78\x4b\xb4\x7b\xb6\x3e\xe2\x69\xf7\x94\x7e"
+ "\xdd\xab\xdd\x13\xe4\xb2\x7b\x1c\x60\xd3\x74\xbe\x15\x5b\x5f\x78"
+ "\xce\xcd\x06\xfa\x63\x4f\x1b\xa8\xc3\x08\x3a\x67\x72\x6c\x63\x27"
+ "\xd8\x41\x7d\xd9\x40\x8c\xf7\xdd\xec\xa0\x9f\x9f\x0d\x54\xd2\xe8"
+ "\xbf\x0d\xb4\x55\xed\x69\x03\xbd\xb9\xd6\x37\x1b\x68\xab\xd1\xeb"
+ "\x5c\x8f\xdf\x36\xd0\xd6\x12\x4f\x1b\xe8\xcd\x04\x11\x17\x6b\x07"
+ "\x6e\x03\xbd\xf9\x98\x77\x1b\xe8\xcd\x27\x3c\x6d\xa0\x37\x27\x71"
+ "\x5b\xe7\xcd\x54\x6e\x03\xbd\x39\x95\xa7\x97\xa6\xba\xa7\xbb\x6c"
+ "\x20\x9e\xce\x6d\xa0\x37\x73\x7c\x5c\xbf\x99\xe1\x00\x1d\x7b\xe5"
+ "\xf7\xcd\xf5\xb5\x7e\x33\x54\xfb\xe6\xee\xb8\x4a\xd6\x6f\xfe\xa3"
+ "\xcf\xf8\x87\xd7\xf4\xf4\x9b\x25\xfe\xeb\x91\x6d\x57\x68\xff\xff"
+ "\xcf\x49\x4f\xff\x67\xa4\xff\xf4\x7d\xab\xcf\xfd\xff\x7d\xeb\xe9"
+ "\xb2\x38\xd7\x5c\x44\x59\xdc\xc0\xe6\x22\xfe\x6f\xa5\xa7\x4e\xfe"
+ "\xdb\xb2\x6b\x73\x11\xbe\xea\xe1\x6d\x85\xfe\xeb\xe1\xff\x5b\xec"
+ "\xa9\x87\xdf\x1e\xe6\x9b\x1e\x2e\xbb\x6e\xe8\xe7\x22\xca\x26\x79"
+ "\xea\xe1\x32\xab\x88\x85\xc9\x03\xd7\xc3\x65\x47\xbc\xeb\xe1\xb2"
+ "\xaf\x3d\xf5\x70\xd9\x76\xae\x6f\xdf\x56\x70\x3d\x5c\x66\xe2\xe9"
+ "\x7f\x9b\xe4\x9e\xee\xd2\xc3\x3c\x9d\xeb\xe1\xb7\xd5\x03\x5b\x73"
+ "\xb9\xf1\x2a\x5d\x73\xd1\xfe\x93\xad\xb9\xfc\x97\xfe\x9a\x9e\xe8"
+ "\x4f\x4f\xbc\x3d\xc9\x7f\x3d\xf1\xdf\xd5\xfe\xeb\x89\x77\x33\x5c"
+ "\x7a\xe2\xdd\x8c\x81\xe9\x89\x77\xda\x3c\xf5\xc4\xf6\x3f\x5f\xd3"
+ "\x13\xbe\xea\x89\xff\xda\xe5\xbf\x9e\x78\xc7\xe4\xa9\x27\xde\x9b"
+ "\xe2\x9b\x9e\x78\x77\xfa\xd0\xeb\x89\x77\x67\x7a\xea\x89\xf7\x34"
+ "\x22\x16\x66\x0d\x5c\x4f\xbc\x7b\xd1\xbb\x9e\x78\x4f\xe6\xa9\x27"
+ "\xde\x3d\xc6\xf5\xc1\x7b\xe1\x5c\x4f\xbc\xdb\xc8\xd3\xb7\xcf\x74"
+ "\x4f\x77\xe9\x09\x9e\xce\xf5\xc4\x7b\x53\xaf\xed\xb7\xbb\x5a\xf7"
+ "\xdb\xed\x28\xf1\x5f\x96\x7d\x10\xee\x92\x65\x1f\x84\x7b\xdf\x6f"
+ "\xf7\xf7\x37\x3d\xf7\xdb\xbd\x3f\xeb\xda\x7e\xbb\xbe\x64\xd5\x7b"
+ "\x33\xfd\x97\x55\x7f\x5f\xea\x29\xab\x3e\xf8\xda\x37\x59\xf5\xf7"
+ "\x33\x43\x2f\xab\xfe\x6e\xf7\x94\x55\x1f\x1c\x14\xf9\x3f\x6e\xe0"
+ "\xb2\xea\x83\xb7\xbc\xcb\xaa\x0f\xde\xf1\x94\x55\x1f\x64\x70\x99"
+ "\xf4\x41\x0d\x97\x55\x1f\x14\xf1\xf4\xf7\x35\xee\xe9\x2e\x59\xc5"
+ "\xd3\xb9\xac\xfa\xc0\x27\xff\xff\xae\xf5\x35\xbf\x6c\xda\xcb\xb0"
+ "\xbe\x36\x54\x36\xed\xd5\xb2\xbe\xf6\xe1\xb5\xf5\x9f\x3e\xed\xd9"
+ "\x0f\x06\xe1\xf7\xff\xff\xeb\x73\xfd\xa7\x6f\x1d\xb0\x3b\xc1\xa5"
+ "\x03\x76\x27\x78\x5b\x9f\xc8\x03\x0c\x19\xc0\x1e\xcd\x3d\x47\x14"
+ "\xf9\xb8\x3e\x71\xac\x92\x18\x71\x7d\x62\xb9\xb4\x3e\xb1\x45\xb4"
+ "\x71\x77\x7d\xeb\x69\xe3\xfe\xbf\xd5\xbd\xd9\xb8\x68\xdb\x3a\xc1"
+ "\x6e\x75\x74\x5f\x97\xf8\xf7\xde\x75\x47\x47\xd0\xa6\xe8\x8b\x6f"
+ "\xc5\x36\x0e\x44\x77\xbc\xbe\x86\xeb\x8e\xd7\x7e\x56\xba\xe3\x43"
+ "\x83\xff\xba\x63\x57\xb7\x78\xbe\x1f\x5d\xe7\x9b\xee\xd8\x3d\x79"
+ "\xe8\x75\xc7\xee\x48\x4f\xdd\xf1\x91\x84\x87\x09\x03\xd7\x1d\xbb"
+ "\x4f\x79\xd7\x1d\xbb\xcf\x78\xea\x8e\xdd\xe2\x5e\xd3\x8f\x42\xb9"
+ "\xee\xd8\x5d\xcd\xd3\xff\x5f\x98\x7b\xba\x4b\x77\xf0\x74\xae\x3b"
+ "\x3e\xd2\x0e\x6c\x3e\x24\xe4\x2a\x9d\x0f\x51\xff\x93\xcd\x87\xfc"
+ "\xcf\x20\xce\xbf\xed\xd5\x55\x74\xed\x9f\xdf\xab\xeb\x31\x5e\x4f"
+ "\x06\x5b\xb7\x85\xaf\xb9\x76\x8d\xd7\x2d\xdf\x8a\xb2\xec\xe3\x2d"
+ "\x9e\xb2\x6c\xcf\x23\xde\x64\x59\x5f\xeb\xaa\x38\x3e\x77\x82\x9c"
+ "\x73\x6c\xf1\x73\x5d\x35\xf9\xe7\x24\xbf\x3e\x8a\xf4\x5f\x7e\x7d"
+ "\xdc\xcd\xff\xe9\x5e\x1f\xfd\x9f\x7e\xec\xd5\xff\xa9\xc3\xef\x3d"
+ "\xf4\x1f\x77\xf3\x7f\xba\x57\xf4\x7f\xfa\x3f\x7e\x9c\x8b\xdb\xfb"
+ "\xa6\x77\xf9\xb5\xb7\x9b\xff\xd3\xbd\xe2\xfa\xe9\x5e\xd1\xff\xe9"
+ "\x5e\xd1\xff\xe9\xff\x38\xdc\xd3\x5d\xf2\xeb\x7f\xdc\xce\xc5\xed"
+ "\xed\xd3\xff\x29\x35\xcc\x8d\x2e\x94\x0b\x3b\xe0\xda\x05\x75\x1c"
+ "\x07\x18\x30\xc1\xff\xe5\xc0\xc7\xd1\xf0\xbf\xd7\x39\x31\x6b\xd0"
+ "\xdc\x68\x21\x0b\xea\x2c\x27\x32\xb3\xf5\x27\x93\x69\xbc\x03\xbe"
+ "\xbb\x2f\x9e\xf3\x6a\x6e\x74\x88\x63\x44\xb4\x40\x13\x08\xf0\x25"
+ "\x9a\xc5\x57\x83\xfc\xc1\x80\x19\x6d\x32\x09\x3e\x27\xdb\x97\x21"
+ "\xe5\x83\xfa\x06\xd7\xc9\xf6\x4d\xc7\x32\xda\xb3\xf7\x19\xa0\x2d"
+ "\xcd\x5e\xeb\x0a\x65\xc5\xbc\x3d\x91\xac\x75\xd0\x1f\x4c\xcb\x5b"
+ "\x48\xbd\x6c\xdf\xf1\x90\xe6\x11\xd1\x34\x3d\x8e\xa0\x8d\xb5\x63"
+ "\xbc\x55\x81\x65\x62\xec\x45\x78\xb7\x0b\xdf\x39\xa1\x8e\x69\xcb"
+ "\x88\xbc\xa0\x65\x84\x12\x64\xc1\xb0\x74\x1b\x6d\x5c\xe1\x80\x3a"
+ "\xa7\x38\xc8\xbe\x89\x35\x8a\xf7\x5e\x83\x34\x27\xd1\x60\x7c\x3b"
+ "\x2c\x03\x6c\x4c\xac\xcf\xd7\xa5\x90\xbf\xb7\x3a\xbc\xf2\x2e\x09"
+ "\x1f\x76\x3b\xb5\x0c\x0c\x37\x26\xaf\xe7\xdf\x42\x32\x27\x12\xd3"
+ "\x1d\x40\x3b\x2d\x91\xf7\xf6\x7e\x80\xdf\x29\xea\x43\x26\x2a\x31"
+ "\x0e\x66\xfa\x66\x22\xdf\x20\x8c\x50\x1e\x48\x65\xb1\x2a\xad\xed"
+ "\xd9\xfb\x89\x45\x16\x5e\x86\x34\xc7\x98\x69\x18\xfb\x17\x70\x43"
+ "\x20\x5d\xb3\x3f\x85\x90\xee\xbc\x48\x5c\xb4\x6c\x81\x36\x69\xc9"
+ "\xb2\xc5\x2b\x56\x25\x69\x27\x2f\x1a\x49\x62\x57\xac\xd0\x2e\x5b"
+ "\xb0\x7c\xb5\xd6\xfd\xcd\xaf\xb5\x8b\x96\xbc\xb8\xe0\xd9\xa5\x8b"
+ "\xa7\x2c\x5b\xa8\x1f\x89\x1b\x65\xdc\xea\x11\x8a\x75\x11\xb2\xf7"
+ "\x4f\x2a\xdd\x48\xc8\xa6\x31\x44\x81\xf5\x82\xef\xe5\x48\xf1\xf1"
+ "\x30\x3e\x9c\x1c\xf2\xa4\x83\x0c\xdc\x90\x36\x02\xf2\x9a\x8a\xde"
+ "\x80\x7a\x95\x42\xbd\xa1\x8e\x58\xe7\x9d\x52\x9d\x25\x4c\xa4\x23"
+ "\x26\xd2\x5a\x00\x83\xfb\x8f\x87\xd8\x47\x3c\x4a\x69\x1c\xb6\xcf"
+ "\x06\xfd\x44\xd6\x20\xfb\x64\x32\xea\x25\x6a\x9c\x1b\x0d\xbf\xb5"
+ "\x4a\x18\xc3\xdf\xd2\x82\xb9\xea\x76\xec\x27\x34\xe1\xb7\xbc\x4f"
+ "\x7d\x52\x3e\x47\x27\x23\x3c\x3e\xdf\x27\x61\xae\xf8\x7c\x9f\x94"
+ "\x23\x6d\xa1\x1e\xcd\x90\x1e\x09\xa3\x89\x1d\x98\x8e\x71\x22\x31"
+ "\xce\x1e\xd6\x19\xda\x05\x7a\x91\x9a\x68\x96\x88\xfd\x9c\x32\x8d"
+ "\x90\x73\x68\xab\x59\x71\x81\xc4\x38\x68\x27\xcd\x2d\x03\x9c\xd9"
+ "\x48\x48\xa6\x7e\x21\x1d\xbe\xff\xde\x10\xc7\x92\xc5\x18\x1f\x50"
+ "\xc8\x3d\xb4\x95\xe6\xee\x5b\x3a\xe7\x76\xa2\x86\xb2\x0b\xdd\xe2"
+ "\x04\x2a\x06\xc6\xff\x4f\x18\xff\x91\x8f\x18\xff\x8f\xf3\xf1\x13"
+ "\xcb\xfe\xa4\x9e\x7c\xec\xc2\xdf\xdb\x02\x39\x04\x58\xa0\xaa\xdc"
+ "\xc2\x18\x27\xa7\x23\xf6\xdd\xd6\xf4\x04\x72\x37\xa3\xdd\x81\x62"
+ "\xa1\x20\x57\x2f\x18\x72\xcb\xa8\x21\xb7\x08\x68\xa6\x2b\x48\x26"
+ "\xda\xf9\x4e\x35\x31\x5e\x20\x11\x56\x63\x6e\x61\x90\x2c\x43\x06"
+ "\xb6\x85\x1c\xf4\x46\x04\xc8\x8c\x08\xb1\xbf\xeb\x90\x8e\x9f\x36"
+ "\x13\xf2\xf8\x8b\x84\xfc\x30\x8d\x04\x94\xc2\xef\x06\xd6\x9e\x03"
+ "\xdc\xff\x53\xf6\x81\xb0\x37\xe0\xb7\x18\xe7\x71\x80\xbf\xdf\xe6"
+ "\xb5\xdf\x75\xb5\x3b\x4f\xdd\x7b\xbb\x0f\x16\x42\xbb\xad\x82\x21"
+ "\x4f\x47\x0d\x79\xa1\x3d\xdb\x9d\xa7\xe6\xed\x1e\xd6\x32\xf4\xed"
+ "\x3e\x38\x8f\xb7\xfb\x60\xa8\x7f\xed\x3e\xe8\x75\xfe\xcf\xad\xdd"
+ "\x5e\xf8\x7d\x28\x47\x28\xc8\x03\x7e\xe7\x01\xbf\xf3\x7a\xe1\x77"
+ "\x9e\xc8\xef\x51\x75\x43\xdf\xee\x43\xb1\xbc\xdd\x87\x54\xfe\xb5"
+ "\xfb\x90\x57\xf9\xe7\x6a\x77\xbe\x17\x7e\xff\x23\x03\xda\x0d\xfc"
+ "\xce\x07\x7e\xe7\xf7\xc2\xef\x7c\x91\xdf\xa3\x8f\x0e\x7d\xbb\xff"
+ "\xc1\xe7\xff\xb3\xff\xa1\xf0\xaf\xdd\xff\x30\xf8\xd0\x6e\x2f\xfc"
+ "\xfe\x34\x45\x28\xc8\x07\x7e\xe7\x03\xbf\xf3\x7b\xe1\x77\xbe\xc8"
+ "\xef\xfb\xf2\x86\xbe\xdd\x9f\xce\x10\xdb\xed\xf0\xaf\xdd\x9f\xae"
+ "\xef\xbf\xdd\x06\x2f\xfc\x2e\xd7\x43\xbb\x81\xdf\x06\xe0\xb7\xa1"
+ "\x17\x7e\x1b\x44\x7e\x3f\xfd\xd0\xd0\xb7\xbb\x7c\x1a\x6f\xf7\xa7"
+ "\x36\xff\xda\x5d\x9e\xda\x7f\xbb\x73\x8b\x41\x66\xf7\xe0\xb9\x39"
+ "\x65\x2a\xb9\xeb\x02\xb6\xff\xb0\x85\x06\xe5\x16\x8f\xca\xcc\x90"
+ "\x39\x54\xb9\x25\xa3\x6a\x89\x1c\xc6\x7e\x09\x21\x16\x12\x08\x6d"
+ "\x4d\xa0\x05\x05\xd8\xe6\x04\x01\xca\x71\x80\xec\x77\xaa\x72\x8b"
+ "\x3a\x0c\x73\x75\xf9\xcf\x11\x6d\xba\x95\xa8\xab\xd2\x2c\x24\x4d"
+ "\x4f\xad\x55\xe4\x14\x09\xb2\x10\x39\xce\x63\x7d\xde\xbc\x8b\x2c"
+ "\x4f\xa4\x14\xca\x3e\x8c\xe3\xc5\x82\x06\x12\x01\x36\x71\x06\x05"
+ "\xfd\x51\x28\x10\x2d\x94\x1f\x81\xb4\x84\xb2\x7f\x19\x12\x4b\x64"
+ "\x7b\x9f\xb5\x13\xa4\x27\xd2\x16\xc6\x96\x11\x8c\xae\x60\x61\xff"
+ "\xcb\xd3\x9c\xae\xaf\x3f\x37\x50\xba\x1e\x2e\xe2\x76\x65\xee\x0e"
+ "\xb3\xa5\x03\xc7\x67\x6a\x3c\xd7\x0c\xe9\xb3\xab\xf4\x2d\x30\x0e"
+ "\x29\xb7\x51\x63\xee\x56\x01\x74\xd6\x00\xcb\xf5\xba\xff\xcd\x4d"
+ "\x9e\x6a\x40\x66\xf6\xc0\x9a\x8b\xde\x9f\xcf\xa6\x41\x79\x1a\x4e"
+ "\xef\xbc\xb0\x51\xb5\xc3\x5a\x7a\xa7\x77\x9e\xc6\x01\x3a\xc7\xa9"
+ "\xca\x0b\xf5\x9d\xde\x9f\xdf\xdf\x8d\xde\xd6\xcb\x43\xef\xcf\xb9"
+ "\x1f\x31\x43\x5e\x84\x27\xbd\x3f\x33\x71\x7a\x7f\xb6\x88\x1a\xf3"
+ "\xb4\x02\xe8\xca\x01\x96\xeb\xf5\xfc\xa3\x1b\xbd\x01\xdf\x3d\x75"
+ "\x98\x8b\xde\x15\x26\xa0\xb7\x88\xef\x3c\xc0\xf7\xa8\x3a\x2f\xf4"
+ "\x06\x7c\xe7\x01\xbe\xf3\x06\x80\xef\x8a\xb7\x3d\xe9\x9d\x77\x99"
+ "\xf0\x5d\x21\xc6\x7f\xca\xeb\x86\xef\x8a\x08\x4e\xef\xcf\x8f\x01"
+ "\xbd\x01\xdf\x79\x03\xc4\x77\x45\x85\x0f\xfa\x03\xf0\xdd\x53\x77"
+ "\xba\xe8\x5d\x15\x41\x83\xf2\x45\x7c\xe7\x03\xbe\x47\x1f\xed\x9d"
+ "\xde\xf9\x80\xef\x7c\xc0\x77\xfe\x00\xf0\x5d\x35\xae\x1b\xbd\x2f"
+ "\x13\xbe\x2b\xeb\x39\xbd\xf3\xbb\xe1\xbb\x72\x2b\xa7\x77\xe5\x0c"
+ "\x6a\xcc\x07\x7c\xe7\x0f\x10\xdf\x55\xd3\x7c\xa0\x37\xe0\xbb\xa7"
+ "\xce\x76\xd1\xdb\xbc\x15\xe8\x2d\xe2\x3b\x1f\xf0\x7d\x5f\x9e\x17"
+ "\x7a\x03\xbe\xf3\x01\xdf\xf9\x03\xc0\xb7\x39\xd7\x93\xde\xf9\x97"
+ "\x09\xdf\xe6\x58\x91\xde\xdd\xf0\x6d\x56\x73\x7a\x57\xed\x04\x7a"
+ "\x03\xbe\xf3\x07\x88\x6f\xf3\x76\x1f\xec\x04\xc0\x77\x4f\x5b\xc1"
+ "\x45\xef\x23\x6a\x1a\x64\x10\xf1\x6d\x00\x7c\x3f\xfd\x50\xef\xf4"
+ "\x36\x00\xbe\x0d\x80\x6f\xc3\x00\xf0\x5d\x7d\xb1\x1b\xbd\x2f\x13"
+ "\xbe\xab\x0f\x72\x7a\x1b\xba\xe1\xbb\x3a\x83\xd3\xbb\x7a\x12\x35"
+ "\x1a\x00\xdf\x86\x01\xe2\xfb\x88\xd7\xf3\xbf\x7d\xd9\x27\x2f\x6e"
+ "\x21\x4a\x4f\x9a\x1f\x5d\x7f\xe9\x6c\x94\xa3\xcb\xae\x8c\x8d\x72"
+ "\x74\x6a\xef\x36\xca\x11\x1b\xa7\xf9\x91\x62\xff\x6c\x94\xa3\x85"
+ "\xfe\xd8\x28\x3d\x69\xfe\x85\xfd\xd2\xd9\x29\x5f\x9c\xba\x32\x76"
+ "\xca\x17\xdb\x7b\xb7\x53\xbe\x48\xe0\x34\xff\x42\xe5\x9f\x9d\x72"
+ "\x4c\xe1\x8f\x9d\xd2\x93\xe6\xc7\x97\x5e\x3a\x5b\xe5\xf8\x9c\x2b"
+ "\x63\xab\x1c\xd7\xf6\x6e\xab\x1c\xab\xe5\x34\x3f\x96\xe1\x9f\xad"
+ "\x72\x3c\xc5\x1f\x5b\xa5\x27\xcd\xbf\xb4\x5c\x3a\x7b\xe5\xcb\xc3"
+ "\x57\xc6\x5e\xf9\xb2\xa8\x77\x7b\xe5\x4b\x71\xfc\x73\xdc\xe6\x9f"
+ "\xbd\xf2\xa5\x0f\xe3\x9f\x9e\xf6\x4a\x4f\x9a\xd7\xc4\x5e\x3a\x9b"
+ "\xa5\x66\xfa\x95\xb1\x59\x6a\x94\xbd\xdb\x2c\x5f\x1d\xe4\x34\xff"
+ "\x2a\xc1\x3f\x9b\xa5\x26\xde\x1f\x9b\xa5\x27\xcd\xbf\x2e\xbf\x74"
+ "\x76\xcb\xd7\xef\x5f\x19\xbb\xe5\xeb\xd4\xde\xed\x96\xaf\xa7\x72"
+ "\x9a\xd7\xd4\xfa\x67\xb7\x7c\x7d\xcc\x1f\xbb\x05\x69\x8d\x34\x47"
+ "\x5b\x85\xd3\xbc\xb6\x98\x06\xe7\xea\x3b\xc1\x1e\x09\x02\xba\x07"
+ "\x35\x13\xf9\x16\xa4\x79\x0d\xa7\xb9\x33\xb8\x00\xe9\x93\x80\x34"
+ "\x63\xed\xf8\x51\x13\xec\x34\xe4\x96\x50\x39\x81\xb6\x28\x49\x83"
+ "\xec\xc4\x5b\x8e\x2c\x12\xac\x4d\xcb\x84\xff\x6b\x99\xff\x4c\x6d"
+ "\x5a\xf6\xb7\xd0\xc6\x00\x5c\xa3\x70\x18\xe3\xaa\x9d\x41\xc6\xd9"
+ "\x0d\xb2\x6f\x4e\xd3\x09\xb1\xd5\x9d\x60\x4b\xd0\x17\x34\xa1\xe6"
+ "\xe6\x1d\xc4\xec\xf8\x8c\x54\xd5\x7c\x44\x84\xe0\x82\x5f\xde\xed"
+ "\x20\x3a\xfa\xa3\x2e\xb4\x22\xc9\x42\x9c\x0b\x35\x2a\x73\x4a\x39"
+ "\xe0\xe2\xef\x24\xa6\x91\x5e\xa0\xdf\xeb\x54\x9d\x41\x1b\x0b\x9d"
+ "\x41\x05\x6a\xa7\x71\x53\x9c\x23\x68\x63\xc6\x3b\xc9\x16\xb9\xca"
+ "\x4e\x74\x4b\xeb\x29\x2d\x78\x96\x28\x0a\xea\x88\x72\xc3\xb3\x44"
+ "\xb5\xa1\x8e\xa8\x2b\xea\x6b\x48\x65\x53\x39\xa9\x6c\xf9\x9a\x54"
+ "\x5e\x80\xab\x03\x2e\x01\xae\x8c\xaf\x49\x05\x48\x87\x59\x67\x09"
+ "\x49\xaf\xa7\xd6\x3b\x6b\x49\x68\x85\xa3\x86\xe0\x3e\xde\x73\xb2"
+ "\x6f\x56\xab\xe2\x49\x28\xfd\x5e\x43\xe8\x42\x8d\x1c\xde\x29\x30"
+ "\xdd\xec\xb0\x92\x8a\x7a\x3b\xbe\x8f\x83\xf7\x8a\xf4\x7a\x28\x5f"
+ "\x28\x47\x7f\x71\xd6\x8a\x8c\xc3\xd0\x3e\xa5\x09\xe8\x5c\x26\xd9"
+ "\x64\x05\x1d\x24\x62\x03\xb0\x19\x31\x13\x43\x39\x66\xde\xe8\x18"
+ "\x28\x66\xbe\xe1\xfe\xcf\x5e\xd0\x8c\x01\x7a\x8f\x17\x5e\x88\x53"
+ "\x3f\xfe\xf5\x49\x8a\xfb\xb4\x70\x7d\xa6\xca\xf6\x19\x31\xaf\x17"
+ "\x48\xcc\x6a\x42\x66\x3a\x09\x41\x9a\xe0\x5a\xf2\xe3\x7a\x12\x82"
+ "\xfb\xc7\x84\x1f\x75\x63\xcc\xf5\x56\xb2\xd6\x01\x75\x3d\x67\xef"
+ "\xaa\x6b\xd5\xfa\x2a\x02\xef\xc6\x57\x25\x58\x88\x4a\x4f\xd4\x48"
+ "\x67\xb0\x45\x8b\x1f\x6f\x24\x81\xcb\x6d\x94\x22\x8d\x91\xb6\x48"
+ "\x67\x2c\x4f\xa2\xbd\x79\x91\x95\xa4\xdb\x89\xda\x9c\x06\xf7\x14"
+ "\x6a\x35\x93\xf3\x04\xea\x68\xa0\x41\x4a\x13\xe0\x23\x12\x31\x61"
+ "\x91\x9d\x28\x01\x1c\x8c\xa1\xd9\x27\x66\x97\x42\x7b\x71\x0d\x7f"
+ "\x60\x6d\xae\xf5\x65\xfd\xa3\x87\x4d\xe8\xc2\x73\x9e\x86\xe3\xf9"
+ "\x64\x02\xe0\xd9\xda\x09\xb6\x1e\xc7\xf3\xb0\x96\xfe\xf1\x9c\x17"
+ "\xe6\xc2\xf3\xb7\xab\x5c\x78\x3e\x39\xd7\x3b\x9e\xbf\xfb\x90\xe3"
+ "\x39\x2f\xe2\xea\xc4\xf3\x77\x8f\xf5\x8d\xe7\xef\x74\xde\xf1\x9c"
+ "\xa7\x93\xec\xdd\xa1\xc1\xf3\x77\x19\x97\x0f\xcf\x79\x1a\xff\xf0"
+ "\xfc\xdd\x3c\x4f\x3c\x7f\xbb\x94\xe3\xf9\x5b\xad\x7f\x78\x3e\xe9"
+ "\x35\xfe\x41\x5f\xf6\xb6\x1b\x9e\x45\xf9\x5c\x37\x95\x06\xe7\x81"
+ "\x7c\xce\x13\xe5\xf3\xa8\x3a\x1f\xf0\xec\x26\x9f\x2d\x8f\xb8\xf0"
+ "\x5c\x77\xbb\x77\x3c\x9f\x7a\x45\xc4\xf3\x55\x2a\x9f\x4f\x8d\xeb"
+ "\x1b\xcf\x16\x7b\x1f\x78\x2e\x93\xc6\x12\x43\x83\xe7\x53\xb3\x2f"
+ "\x23\x9e\xfd\x94\xcf\xa7\xc2\x3d\xf1\x6c\x99\xc6\xf1\x7c\xd2\xea"
+ "\x1f\x9e\xeb\xbc\xee\x7f\xee\x6b\x2c\xe3\xc2\x73\xbe\x28\x9f\x4f"
+ "\x2b\x01\xcf\x20\x9f\xf3\x45\xf9\x3c\xfa\x68\xff\x78\xce\x77\x93"
+ "\xcf\xdf\x5f\xe7\xc2\x73\xfd\x45\xef\x78\xae\x9f\xc3\xf1\x9c\x7f"
+ "\x95\xca\xe7\xef\xcf\xf4\x8d\xe7\xef\xcb\xbd\xe3\x39\x5f\x27\x8d"
+ "\xd3\x86\x06\xcf\xf5\xda\xcb\x87\xe7\x7c\x3f\xe5\xf3\xf7\x0e\x4f"
+ "\x3c\x7f\xaf\xe2\x78\xae\x33\xf9\x87\xe7\xd3\x5e\xe3\xff\xf4\x35"
+ "\x4e\x74\xc3\xb3\x28\x9f\x7f\xa8\xa1\xc1\xf9\x20\x9f\xf3\x45\xf9"
+ "\x7c\x5f\x9e\x0f\x78\x76\x93\xcf\xa7\x4f\xbb\xf0\xfc\xc3\x61\xef"
+ "\x78\xfe\x61\xb2\x88\xe7\xab\x54\x3e\x37\xec\xee\x1b\xcf\x0d\xc5"
+ "\x7d\xe0\xb9\x4c\x1a\x03\x0f\x0d\x9e\x1b\xac\x97\x11\xcf\x7e\xca"
+ "\xe7\x86\x0a\x4f\x3c\x9f\xae\xe5\x78\x3e\x5d\xe8\x1f\x9e\x7f\xf0"
+ "\xea\xff\xad\xaf\x31\xb8\x0b\xcf\x06\x51\x3e\x37\x95\x01\x9e\x41"
+ "\x3e\x1b\x44\xf9\xfc\xf4\x43\xfd\xe3\xd9\xe0\x26\x9f\x1b\x3f\x74"
+ "\xe1\xb9\x69\xb3\x77\x3c\x9f\x69\xe3\x78\x36\x5c\xa5\xf2\xf9\x4c"
+ "\x6e\xdf\x78\x3e\x93\xe0\x1d\xcf\x06\x9d\x34\xbf\x30\x34\x78\x3e"
+ "\x63\xba\x7c\x78\x36\xf8\x29\x9f\xcf\x94\x78\xe2\xb9\x71\x3b\xc7"
+ "\x73\x63\xbc\x7f\x78\x6e\xf2\x1a\xff\x6e\x60\xf3\x1b\x67\xcb\x70"
+ "\x7e\xa3\x03\xe7\x37\x5c\x7b\xff\x12\x42\xaa\x39\x9e\x3b\x01\xcf"
+ "\xaf\xbb\xe3\xf9\x9b\xee\xf3\x1b\x3f\xbe\x22\x74\xe1\xf9\x6c\x0f"
+ "\x3c\x0b\x80\xe7\x4e\x86\xe7\xe6\xf7\xa5\xf9\x0d\x73\xf3\x56\xc0"
+ "\x49\x13\x31\xcf\x06\x2c\x17\x88\x58\xfe\x06\xb0\x0c\x34\x14\x80"
+ "\xc6\x15\xb5\x35\x24\xc6\xca\x69\xd9\x01\x34\x16\xdc\x71\xdc\xd1"
+ "\x28\x47\xfc\x22\x6e\x25\x0c\x57\x2e\x07\xec\x26\x1e\x21\x95\xc9"
+ "\x70\xad\x81\x2b\x0d\x2e\x72\x84\x54\x34\x02\x76\x97\xb8\x63\xb7"
+ "\x5a\xc4\x6e\xf3\x23\x7d\x63\xb7\x79\xd2\xe5\x9b\xcb\x68\xe6\xf3"
+ "\x5f\xdf\xc4\xa9\x63\x9e\x38\x49\xcd\x29\x35\x22\x3e\x9b\x48\x8c"
+ "\x83\x84\xd0\xa7\x75\x63\x54\x71\x44\xfd\xb2\x93\xc8\x8d\xcf\x12"
+ "\xb5\xf1\x04\xb4\x5b\xea\xbf\x75\x44\xf5\x99\xfd\x23\x52\xd1\x52"
+ "\x43\x2a\x2e\x1c\x26\x15\x02\x5c\x4d\x70\x41\x5d\x63\x16\xbb\xb7"
+ "\xdb\x2a\xb6\xfb\xec\x74\x28\x6b\x92\xf7\x76\x9f\x0d\x63\xed\x5e"
+ "\x04\xed\xee\x70\xb5\xdb\x0c\xfd\x00\xf8\x33\x5e\x10\xe7\x43\x62"
+ "\xac\x24\x70\x85\x83\xd2\x0e\x11\xff\xc8\x9f\xcf\x8e\xd9\x49\x8c"
+ "\x1e\x78\xb6\x10\xf0\x5f\x5f\x46\xd2\x53\x01\xff\x1d\x76\xc4\x9d"
+ "\xd5\x9c\x71\x11\xf0\xdf\x1c\x47\x81\x7e\x9d\x88\xff\x6f\x10\xff"
+ "\x3f\xa6\x0a\x0c\xff\x3f\x46\xf8\x87\xff\xb3\x3e\xe0\xdf\x97\xf9"
+ "\x10\x2b\xe2\xdf\xda\x81\xf3\x21\xae\x3d\xa0\xfd\xe0\xdf\x7d\x3e"
+ "\xe4\x9c\x1b\xfe\xad\x7d\xe0\xff\xa7\xf7\xa5\xf9\x90\x2b\x8f\xff"
+ "\x9f\xfa\xc1\xff\x4f\x7d\xe0\x7f\xa8\xe7\x3e\x7e\xba\x8c\xf8\xb7"
+ "\xf6\x83\x7f\xab\x0f\xf8\xcf\xd3\xf8\x87\xff\x9f\xba\xe1\xff\x9c"
+ "\x88\xff\x73\x7e\xe2\xdf\xea\x0b\xfe\x7d\x98\x3f\x69\x2d\xc3\xf9"
+ "\x93\x0e\x9c\x3f\x71\xed\x05\xee\x0f\xff\x6e\xf2\xff\xbc\x1b\xfe"
+ "\x5b\xfb\xc0\x7f\x8b\x84\xff\xab\x40\xfe\xb7\xf4\x83\xff\x96\xbe"
+ "\xf0\x3f\xc4\x73\x25\x2d\x97\x11\xff\xad\xfd\xe0\xbf\xd5\x17\xfc"
+ "\xfb\x29\xff\x5b\xba\xe1\xff\xbc\x88\xff\xf3\x7e\xe2\xbf\xd5\x07"
+ "\xfc\xfb\x32\xdf\x72\x01\xf1\x0f\xf2\x3f\x3f\xd4\x6d\x4f\x78\x3f"
+ "\xf8\x77\x9f\x6f\xb1\xb9\xe1\xff\x42\x1f\xf8\x6f\x7b\x5f\x9a\x6f"
+ "\xb9\xf2\xf8\x6f\xeb\x07\xff\x6d\x7d\xe0\x7f\xa8\xe7\x56\xda\x2e"
+ "\x23\xfe\x2f\xf4\x83\xff\x0b\x3e\xe0\x3f\xdf\x4f\xf9\xdf\xd6\x0d"
+ "\xff\x36\x11\xff\x36\x3f\xf1\x7f\xc1\x17\xfc\xfb\x30\x3f\x73\x11"
+ "\xc7\xb3\x20\xff\xf3\x8b\xdc\xce\x06\xf4\x87\x7f\x37\xf9\xdf\xee"
+ "\x86\xff\x8b\x7d\xe0\xdf\x2e\xe1\xff\x2a\x90\xff\xf6\x7e\xf0\x6f"
+ "\xef\x0b\xff\x43\x3c\x17\x63\xbf\x8c\xf8\xbf\xd8\x0f\xfe\x2f\xfa"
+ "\x82\x7f\x3f\xe5\xbf\xbd\x1b\xfe\xdb\x45\xfc\xb7\xfb\x89\xff\x8b"
+ "\x3e\xe0\xdf\x97\xf9\x1c\x07\x9b\xcf\xe9\xc0\xf9\x1c\xd7\x19\x91"
+ "\x7e\xf0\xef\x3e\x9f\xd3\xe1\x86\x7f\x47\x1f\xf8\xef\x7c\x5f\x9a"
+ "\xcf\xb9\xf2\xf8\xef\xec\x07\xff\x9d\x7d\xe0\x7f\xa8\xe7\x6e\x3a"
+ "\x2f\x23\xfe\x1d\xfd\xe0\xdf\xe1\x03\xfe\x0d\x7e\xca\xff\xce\x6e"
+ "\xf8\xef\x10\xf1\xdf\xe1\x27\xfe\x1d\x43\x34\xff\x23\xcc\xc6\xf9"
+ "\x1f\x41\x95\x5b\xd4\x59\x12\x5b\x2d\x18\x36\x16\x86\xc8\xb4\xc4"
+ "\xa1\x32\xce\x36\x27\xd9\xc8\xe3\x6d\xc0\x13\x7d\x1b\x79\xa6\x4d"
+ "\x8d\xf1\x02\x33\x28\x8c\xff\x3d\xce\x88\xc2\xe5\x30\x28\x4d\x1b"
+ "\x96\x13\x85\x33\xb8\xe0\x97\x98\x66\x6e\xb0\x13\x6c\xf3\x5a\xa4"
+ "\x41\x93\x8b\x06\x38\x07\x47\x7f\xd2\xa9\x4b\xb3\x20\x4f\x87\x85"
+ "\xd4\x03\x5e\x2a\xea\x2d\x40\xfb\x35\x0c\x5b\xc8\x8b\x06\x99\xd3"
+ "\xfa\xc6\x39\xa2\x70\x7c\xaf\x19\x0f\x3c\x0e\x0d\x7a\x89\xc8\xc2"
+ "\xea\xa9\x80\xbc\x44\x1e\x21\x5f\xb5\x6b\x70\xbf\x92\xf0\x58\x15"
+ "\xe0\xdb\xf1\xbd\x6e\x7c\x29\xe4\x1b\xfa\x79\x19\x81\xad\x7f\x58"
+ "\x64\xce\xc6\x8a\x5a\xa0\x65\xb6\xd3\x4f\x3e\x09\xbe\x9c\x7f\xf1"
+ "\x61\x9e\x82\xda\x71\x9e\x42\x50\xe5\x85\xfa\xc6\xa7\x3c\x8d\xc7"
+ "\x99\xd6\x21\xe7\x13\x2d\xf6\x8d\x4f\xf4\xbc\x27\x9f\x86\x7a\xfe"
+ "\x80\x8a\xfe\x60\x68\x21\xe7\x93\x50\xe3\x17\x9f\xe4\xc4\xaf\xfd"
+ "\xbf\x3d\xc6\xd3\x72\xd9\x56\x1c\x4f\x03\x9f\x7c\xec\x4f\x79\xc5"
+ "\x1e\x67\x70\x87\x9a\x4f\x72\x59\x94\x4f\x7c\x92\xcb\x36\x77\xe3"
+ "\xd3\xd0\x8e\x73\xe5\x32\x1e\x0f\x5a\x2e\x9b\xca\xf8\x94\x47\x32"
+ "\xfc\xe3\x93\xcc\x87\xf3\x1f\x3e\x8c\xfb\xe4\x01\xd1\x38\xee\x13"
+ "\x60\xdc\xe7\x1b\x9f\xf2\x35\x1e\x67\x86\x87\x9c\x4f\xf2\x46\xdf"
+ "\xf8\x14\xf0\xa0\x27\x9f\x86\x78\x3c\x26\x0f\x50\x71\x3e\xc9\x2d"
+ "\x9c\x4f\x72\x9d\x7f\x7c\x0a\x88\x1d\x92\xf1\x89\x5c\x61\xc5\xf1"
+ "\x09\xf0\xc9\xc7\xfe\x94\x5f\xec\x71\xc6\x79\xc8\xf9\xa4\x28\xf4"
+ "\x8d\x4f\x8a\x33\xdd\xf8\x34\xb4\xe3\x06\xb9\x62\x27\xe7\x93\x22"
+ "\x87\xf3\x29\xa0\xda\x3f\x3e\x29\xbc\xc6\xff\x1c\x90\x1d\x2d\x1f"
+ "\x5e\x8c\x76\xb4\x00\x76\xb4\x6f\x7c\x32\x68\x3c\xce\x64\x0f\x39"
+ "\x9f\x86\x4f\xf5\x8d\x4f\xc3\xff\xe4\xc9\xa7\x21\xb6\x6f\xe5\xc3"
+ "\xe7\x71\x3e\x0d\x8f\xe0\x7c\x1a\x96\xe2\x1f\x9f\x86\xfb\xb0\xff"
+ "\xb3\xf7\x73\x58\x3d\x6c\x3e\xb9\x72\xc6\x55\x65\xf3\xc9\x47\xd4"
+ "\xfb\xc6\x2b\xe5\xf4\x4b\x6a\xf3\xc9\x95\x4a\xce\xab\x11\xb5\x9c"
+ "\x57\x23\x26\xf9\xc7\x2b\xe5\x6c\x7f\xcf\x6f\xf5\xb0\xfb\xe4\x81"
+ "\xd6\xab\xca\xee\x93\x07\xfa\x28\xff\x02\xcf\x5c\x52\xbb\x4f\x1e"
+ "\x28\xca\xbf\x40\x51\xfe\x29\xfd\x94\x7f\x81\x3e\xc8\xbf\xde\xcf"
+ "\x7d\xf5\xb4\xfd\x46\x95\x5c\x5d\xb6\xdf\xa8\x69\xbe\xf1\x6a\xd4"
+ "\x9f\x2f\xad\xed\x37\x2a\x9e\xf3\x6a\x54\x24\xe7\xd5\xc8\x54\xff"
+ "\x78\x35\xca\x6b\xfc\x97\xfe\xce\x8b\xf5\xb4\xff\x82\xae\x32\xfb"
+ "\x4f\xe5\xa3\xfd\x17\x74\x89\xed\xbf\x20\xd1\xfe\x53\x89\xf6\x9f"
+ "\xca\x4f\xfb\x2f\xc8\x2f\xfb\xaf\x1b\xaf\xc4\x7e\x15\x6c\xbb\xba"
+ "\x6c\xc0\xe0\x22\xdf\x78\x15\x7c\xf6\xd2\xda\x80\xc1\xbb\x38\xaf"
+ "\x82\x0d\x9c\x57\x41\xc7\xfc\xe3\x55\x08\xf1\xf7\x7c\x5a\x4f\x3b"
+ "\x50\xbd\xf5\xea\xb2\x03\xd5\x3e\x8e\x7f\xd5\x9b\x2f\xad\x1d\xa8"
+ "\x16\xc7\xbf\x6a\x71\xfc\x1b\xe2\xe7\xf8\x57\xed\xc3\xf8\xd7\x87"
+ "\x79\x3f\xf9\x2f\x08\xda\x80\x4e\x43\x6e\x51\x08\xd0\x3f\x24\x85"
+ "\xc8\x3b\xc2\x80\x5f\x2a\xe0\x57\xa6\x96\x74\x1a\x80\x5f\x56\x07"
+ "\x79\x7c\xe5\x49\x5a\xd5\xec\x24\x1d\xc0\xab\x8b\x60\x07\x9a\xad"
+ "\x8d\x78\x46\xef\x37\x75\xf2\x31\x9b\x9f\x5e\xa9\x26\xc8\x2f\xa4"
+ "\xbf\x53\xa5\x34\x51\xe0\x17\xe3\x9f\x6a\x53\x9c\xc3\x50\xa0\x9e"
+ "\x75\xf6\x24\x5d\x61\xa1\xb4\x32\xc1\x0e\x75\x8a\xab\xae\x4c\xa8"
+ "\x21\x31\xf5\x24\x50\xfb\x24\xf2\x65\xcc\x63\x98\x6e\xb6\xd6\x10"
+ "\xf4\xfb\xc9\xe6\xc0\x4f\xea\x42\x1d\x5f\xe9\x54\xe8\xbf\x09\xcf"
+ "\x15\x4a\x3e\x9a\xcc\x4d\xc5\x8c\xff\xdd\xe7\x54\x19\xff\xbf\xd2"
+ "\xa9\x5f\xc7\xf3\x89\x43\x6e\x0b\x8e\x61\xf3\x7f\xc2\x49\xcd\x78"
+ "\xa9\x8e\x2b\x96\x52\x0a\x75\x1c\x53\x65\xb3\x12\xac\x67\x95\xcd"
+ "\x44\xd2\x93\x88\xba\xaa\xa3\x91\xa4\xd9\xa8\xb5\x2a\xe3\x0c\x89"
+ "\x69\xc3\x75\x01\xc4\xd3\x98\x3f\x71\x7e\x8f\xde\x23\x9c\xd4\x8d"
+ "\x87\xf2\x72\xaa\xaa\x09\x09\xc9\x04\x5a\x3b\x88\x9c\x9d\xd7\x94"
+ "\x13\x25\xd0\x2b\xc1\x9c\x51\x07\xbc\x28\x28\x34\x3b\x4e\x20\x3d"
+ "\x13\xe0\xfd\xb4\xae\xf5\x86\xe0\x82\x8d\x98\x86\xb4\xc5\x7d\xa6"
+ "\x66\xbd\x95\xe5\x91\xde\x73\xde\x65\x10\x73\x4a\x07\xa9\x02\x4b"
+ "\x06\xbe\x97\xf0\x79\x5c\x0d\xe0\x6b\xb4\x9f\x72\xfb\x17\xaa\x21"
+ "\x99\xaf\x94\x5f\x17\x8f\x76\xab\xd3\x90\x17\xca\xeb\x38\xac\xa5"
+ "\x7f\x7c\xe5\x69\x5c\xf8\x0a\xbd\x38\x38\x7c\x85\xbe\x3d\xb4\xf8"
+ "\x1a\x6a\xfb\x35\x34\x69\x70\xf8\x0a\x3d\xcf\xf1\x15\x1a\xc6\xf1"
+ "\x15\xda\xe8\xc2\xd7\xb0\x96\x4b\x87\xaf\x5f\x94\x73\x7c\xfd\x22"
+ "\xc7\x3f\x7c\x5d\xb7\x74\x68\xe6\x59\xaf\x37\xa1\xad\x0d\xf8\x12"
+ "\xe5\xd7\xa8\x3a\x1f\xf0\xe5\x26\xbf\xae\x9f\x3b\x38\x7c\x5d\x1f"
+ "\x38\xc4\xf8\x1a\x62\x9b\x7b\xec\xb1\xc1\xe1\xeb\xfa\x27\x38\xbe"
+ "\xc6\xa6\x72\x7c\x5d\x1f\xed\xc2\xd7\xa8\xba\x4b\x87\xaf\xb1\x3a"
+ "\x8e\xaf\xeb\x1a\xfd\xc3\xd7\xf5\x7e\xf9\xbf\xea\x39\x3e\x18\xaf"
+ "\xc5\xf1\x81\xd3\x90\x2f\xca\xaf\xd1\x47\xfb\xc7\x57\xbe\x9b\xfc"
+ "\x1a\xb7\x7b\x70\xf8\x1a\xb7\x64\x68\xf1\x35\xd4\xe3\x84\x71\x91"
+ "\x83\xc3\xd7\xb8\xf7\x39\xbe\x34\xb5\x1c\x5f\xe3\xca\x5c\xf8\x1a"
+ "\x7d\xf4\xd2\xe1\x4b\x93\xc3\xf1\xa5\x89\xf6\x0f\x5f\xe3\xbd\xfb"
+ "\x7f\x1e\xd0\xbc\x76\x58\x06\x8e\x69\x00\x5f\xa2\xfc\xba\x2f\xcf"
+ "\x07\x7c\xb9\xc9\xaf\xb0\x71\x83\xc3\xd7\x0d\x87\x87\x18\x5f\x43"
+ "\x3c\xb6\xb9\xa1\x68\x70\xf8\x0a\x1b\xcd\xf1\x75\xc3\x34\x8e\xaf"
+ "\x30\xa5\x0b\x5f\xf7\xe5\x5d\x3a\x7c\x8d\x6f\xe4\xf8\x1a\x5f\xe6"
+ "\x1f\xbe\xc2\x7c\xf0\xff\xea\xcb\x7c\xfc\x44\x0b\x8e\xc3\x9c\x06"
+ "\x83\x28\xbf\x9e\x7e\xa8\x7f\x7c\x19\xdc\xe4\xd7\xc4\xd5\x83\xc3"
+ "\xd7\xc4\xdb\x87\x16\x5f\x43\x3d\x1e\x9b\x60\x1b\x1c\xbe\x26\xae"
+ "\xe4\xf8\x9a\x50\xc2\xf1\x35\x31\xc1\x85\xaf\xa7\x1f\xba\x74\xf8"
+ "\x9a\x10\xcd\xf1\x35\x41\xe9\x1f\xbe\x26\xfa\xe0\xff\xc7\xd7\x75"
+ "\x84\x9b\x66\x0c\x6e\x0c\xa9\xfd\x76\x70\x18\xd3\x1a\xaf\xee\x31"
+ "\xa4\x36\x6e\x70\x18\xd3\x1e\xe7\x18\xd3\x12\x8e\x31\x6d\xc5\xe5"
+ "\x19\x43\xde\xb8\x9d\x63\xec\xc6\xa5\xfe\x61\xec\xa6\x21\x5c\xff"
+ "\xb8\xa5\x6c\x70\xe3\xc8\x5b\x1e\x1c\x1c\xc6\x6e\x3e\x7f\x75\x8f"
+ "\x23\x6f\xde\x33\x38\x8c\xdd\x72\x3f\xc7\xd8\xcd\x8b\x38\xc6\x6e"
+ "\x89\xb8\x3c\xe3\xc8\x9b\xd5\x1c\x63\x37\xf9\xb9\x6e\x73\x8b\x5f"
+ "\xe7\x5f\x7a\x5f\xb7\xb9\x55\x35\xb8\xb1\xe4\xe4\xb7\x06\x87\xb1"
+ "\xc9\x73\xae\xee\xb1\xe4\x64\xed\xe0\x30\x36\x79\x0b\xc7\xd8\xa4"
+ "\x72\x8e\xb1\xc9\x45\x97\x67\x2c\x39\x29\x89\x63\x6c\x52\xa4\x7f"
+ "\x18\xbb\x55\x33\x74\xeb\x4d\x3a\xfd\xe0\xc6\x93\xba\xc0\xc1\x61"
+ "\xec\xb6\xdd\x57\xf7\x78\xf2\xb6\xf5\x83\xc3\x18\x34\x80\x61\xec"
+ "\xb6\x70\x8e\xb1\xdb\xec\x97\x67\x3c\x79\x6b\x0d\xc7\xd8\xad\xc5"
+ "\xfe\x61\x4c\xe7\x83\xff\x7f\x5f\xd7\xc9\xee\x38\x36\xb8\x31\xe5"
+ "\x1d\xcb\x06\x87\xb1\x3b\x26\x5c\xdd\x63\xca\xdb\x1b\x07\x87\xb1"
+ "\x3b\x16\x73\x8c\xdd\x5e\xc8\x31\x76\xc7\xbc\xcb\x33\xa6\xbc\x7d"
+ "\x1a\xc7\x98\xce\xe1\x1f\xc6\xee\xb0\x0c\xdd\xfa\xde\x94\xa9\x83"
+ "\x1b\x57\x86\x1f\x19\x1c\xc6\xc2\x33\xaf\xee\x71\x65\xf8\xcc\xc1"
+ "\x61\x2c\xfc\x30\xc7\xd8\x9d\x36\x8e\xb1\x70\xd3\xe5\x19\x57\xde"
+ "\xb9\x95\x63\xec\x4e\xff\xfc\x51\xc8\xa7\xf4\xf0\x7f\xb5\x64\x79"
+ "\xf2\x82\xa5\x4b\x16\x69\x97\x2c\x4f\x4a\x5c\xa9\x7d\x71\xc9\x9a"
+ "\xc5\xd3\x27\xaf\x0a\xd7\x26\xa6\x68\x13\x97\x2c\x7f\x5e\x4c\x58"
+ "\x34\x92\x3c\xb9\x78\xe9\x82\x14\x4c\x81\xdc\xcf\x2f\x5f\xb6\x78"
+ "\x79\x92\x36\x71\xf1\xca\x55\x4b\x12\x17\xe3\xff\x2f\x6a\x9f\x5b"
+ "\x91\x08\x09\x0b\x17\x2f\x49\x5e\xac\x7d\x76\xd5\x73\xcf\x2d\x4e"
+ "\x7c\x71\x24\x99\xb5\x6a\x69\xd2\x12\xfd\xd2\xc5\xda\x19\xb3\x1e"
+ "\x9c\x12\xfb\xc8\x53\xb1\x0f\x3c\x80\xc1\xc9\xdc\x62\x93\x85\x51"
+ "\xc3\xa6\xd9\x80\x39\x45\x83\xfc\xbe\xc9\x55\xa0\xc9\x31\x9e\xed"
+ "\x86\x16\xa2\xce\x4b\x24\x8a\xdc\x16\xa2\x34\xb6\x10\x95\xf6\x8f"
+ "\x24\x8a\xe6\x1e\xde\x51\xd0\x42\x42\x69\x41\x5c\x8d\x60\x94\x59"
+ "\xa9\x71\x78\x84\x35\xb0\xc9\x02\x69\x6a\x21\xb7\x49\x0d\xbf\x09"
+ "\x05\xda\x2a\xa8\x51\xb9\xb5\x4e\x7e\x6f\xbd\x35\xf0\x47\x53\xfa"
+ "\x19\x22\xa7\x23\xef\x4a\x7a\x57\xb0\xca\xf7\xe3\x4a\x0e\xb4\x9d"
+ "\xc8\xef\x36\xc0\x05\xa3\xe0\x08\x1d\x5c\x40\x99\x88\x19\x70\x2d"
+ "\x85\x2b\x09\xae\x1c\xb8\x8a\xe0\xda\x0a\x57\x19\x5c\x3b\xe0\xda"
+ "\x05\x97\x89\xc8\xef\x99\x06\xd7\x3c\xb8\x20\xef\x3d\xeb\x79\x39"
+ "\xf7\x14\xc2\xb5\x07\xae\x7a\xb8\x60\xb4\xf7\x4b\xc8\xff\xcb\x6a"
+ "\x22\xff\xd5\x6c\xb8\x37\xc2\x65\x83\x0b\xd2\x7f\xa5\x85\x0b\x7f"
+ "\x5f\xc4\xdf\xfd\xca\x4e\xe4\x91\x91\x04\xea\xd9\xff\x15\x19\x0b"
+ "\x17\x7c\x37\x32\x03\x2e\x0b\xa4\x41\x7d\xef\x2d\xea\xe3\x37\xb5"
+ "\xfd\x94\xe9\x08\xc9\xbc\xd1\xc2\x62\xe0\xc9\xef\x3e\x43\xb3\x48"
+ "\x00\xcd\xfd\xd1\xa4\xbf\x83\xc8\x9a\xe4\x77\x7f\x68\x5e\x8f\x72"
+ "\x46\x66\x65\x31\x1d\xe1\x19\x69\xd6\x9e\x77\xf7\x4e\x0b\xd1\x17"
+ "\x62\x4c\xb3\x81\xe1\xed\xee\x9d\xe2\xef\x6d\x16\x59\x70\x31\x8b"
+ "\x01\x97\xb7\x2f\x81\xa6\xc7\xbd\xce\x62\xbf\x01\x0d\xf1\x5c\x16"
+ "\xcd\xd9\x5b\x4f\x95\xbb\xe7\x61\x9f\x37\xad\x61\xf5\x32\xf2\xfe"
+ "\x05\xef\xa1\x6e\xd6\xa0\x38\x8c\x73\xa9\xc0\x67\x9a\xdb\x64\xe9"
+ "\x08\xda\x18\x81\xff\x5f\xdc\x12\x1b\x4f\x0d\x1b\xe3\x70\x9c\x6d"
+ "\x4a\xfb\x0f\x52\x07\xbf\xeb\x08\xda\x64\xd7\x3e\x19\x42\xeb\x78"
+ "\xd9\x72\x8b\x3c\x42\x2b\x95\xd5\x11\x14\x67\xa1\xc5\x45\x5a\x6a"
+ "\x04\x0c\x89\xe5\x01\x76\x2c\xd4\x50\x00\x7d\x2b\x22\x15\xd3\x69"
+ "\x49\x6c\x8a\xf4\x3f\xdc\x53\x68\xc1\xc6\x62\xbc\x87\x64\x12\x1b"
+ "\x7b\xce\x8a\x22\xfc\xae\x26\x28\xeb\x9a\xe5\xf7\xdc\x74\x77\x35"
+ "\x91\x99\x9e\xc4\x7a\x47\x34\xa7\x57\x53\x41\x9b\x16\x00\xdf\x8f"
+ "\x38\xdb\xf5\xdd\x71\x45\x1a\x8c\x91\x2a\xe4\x4d\x59\x8f\x31\xf8"
+ "\xf0\xb7\x58\xb7\xd7\xc6\x10\xc5\x1b\x1b\x89\x12\xdb\xd8\x9e\x77"
+ "\x8f\x46\x8a\x43\x87\xbf\x91\x43\xfe\xdf\x3f\x91\x4e\xdd\xca\x3e"
+ "\x4d\x59\x7b\xee\xce\xe1\x34\xbd\x27\xda\x22\x53\xa5\x62\x7e\xed"
+ "\xcd\x8c\x96\x46\xf1\xbd\x01\xf9\x89\xe5\x0b\xc6\x4d\xb3\xf1\x19"
+ "\xe3\xdc\x85\x00\x2a\xb5\x69\x93\x76\x71\x1a\x6d\x8c\xc3\x72\x30"
+ "\xbf\x50\x60\x84\xff\x23\xc2\x05\x68\xaf\x33\x8b\xe8\xb4\xcb\x49"
+ "\x54\x9d\xfc\x9e\x0f\x9d\xb9\x26\x1d\xbc\x87\x7e\x67\x0a\x87\xfc"
+ "\x7a\x46\x6f\xa3\xd1\x6a\x91\xdf\x53\x06\xef\xc2\xbb\x62\x5f\x72"
+ "\x3a\xcb\x84\x5c\xd3\x34\xa8\x53\xad\x45\x76\xcb\x7a\xa9\x0d\x4c"
+ "\xc6\xb9\xf2\x89\x3c\xbd\xa7\xda\x1a\x68\x9a\xd6\x99\x4c\xab\x37"
+ "\x9c\x20\x04\xbe\x49\x3b\x2e\xd0\x8a\xd4\xd9\xd4\x5e\xf0\xaf\x84"
+ "\x54\xc4\xd7\x92\xff\x9f\xbd\xf7\x81\x6f\xaa\xca\x16\x85\x57\x4e"
+ "\x53\x48\x6b\xff\x04\xac\x5a\xb5\x62\xc0\xaa\x41\xf9\x13\xb4\x6a"
+ "\xd5\x22\x55\x40\x8a\x02\xad\x50\xb0\x08\x42\x91\x02\x45\xfe\xc5"
+ "\x52\x21\x60\xa1\x25\xa2\x53\x4a\x5b\x3a\xd8\xc1\xaa\xa5\xad\x23"
+ "\xce\x30\xf3\x98\x3b\xcc\x3c\xe6\x5d\xe6\x7e\xfa\x8c\xb6\x32\x55"
+ "\xa1\x61\xe6\x3a\xbf\xd7\x7b\x3f\x66\x8c\xdc\x52\x2a\x16\xc8\xd8"
+ "\x40\x62\x9b\x64\x7f\x6b\xed\x7d\x4e\x73\x92\x26\x40\x19\xef\xbb"
+ "\x77\xfc\xac\x1e\x72\xce\xde\x6b\xaf\xbd\xf7\xfa\xb7\xd7\xda\x67"
+ "\x9f\xbd\x4b\x97\x40\xca\x35\xdb\x98\x33\xdb\x07\x89\xd7\x9c\x48"
+ "\x64\xc7\x72\x4e\xa0\x8d\xbe\x00\x25\xc7\x59\x57\x9b\xf9\x3d\x28"
+ "\x39\x05\x71\x5b\x56\x42\x52\x69\x0e\x73\x6e\x3d\xca\x3c\x76\xcb"
+ "\x09\x68\x73\xe1\x65\x3e\x86\x70\x7f\xc6\xeb\x3d\x28\xdd\x04\xda"
+ "\x59\x68\x4f\xb7\x5e\x80\xb8\x36\xf3\x05\x4c\x3b\x0b\x25\xf9\xcc"
+ "\x7b\xec\x28\xc1\x7d\x0c\xd9\x5e\x67\xe2\x96\xb3\xa0\x6d\x98\x47"
+ "\xdf\x96\xfd\x05\x1a\xb1\x2d\xbd\xf1\x43\x0c\xdf\x56\xe9\xf6\xf7"
+ "\x6c\x60\x5e\x77\xc5\x3d\xfb\x1d\x90\x61\x0a\xea\x0b\xb5\x99\xce"
+ "\x0d\xc5\xfe\x12\x8c\xbf\xaa\xaa\x7d\xb1\x97\xe4\xfc\x9e\x7a\xb4"
+ "\xc5\xa0\xe4\x53\x9e\x33\xbe\x0a\xe5\xe7\x9e\xd6\x6c\x2f\x73\x13"
+ "\x3c\xf5\x1b\x69\x94\x2e\xf7\x3f\x3d\xca\x0c\x5a\x77\xc5\xbd\x71"
+ "\x0e\xcd\x1d\xf9\x2a\x1e\x12\x4f\x86\x28\xf5\xc9\x30\x26\x87\x26"
+ "\x95\x9f\xbd\xe8\xe7\x79\xa6\x64\x82\xc5\x74\xe4\xff\xed\x07\x45"
+ "\xfb\xee\xd5\x53\x9a\x6c\x4b\x49\x56\x0c\x7e\xd2\xeb\xf2\xdf\x9b"
+ "\x7c\xf1\xbb\xf3\x99\xc4\xe8\x3c\x56\x0f\xeb\x49\x8e\x9b\xe5\x65"
+ "\x1e\x7f\x55\xa5\x13\xed\x65\x1c\x9d\x93\x2a\xe0\xef\xfd\x92\x55"
+ "\xcd\x07\xc3\x06\x7e\xff\x09\xd5\xe3\xdf\x9b\x9b\x43\xb6\x35\xfb"
+ "\x38\xc1\xcf\xcf\xa9\x2e\x42\xdb\x5b\xb5\x3b\x87\xf4\xd0\x1f\x5f"
+ "\xad\xfb\xf6\x8d\x5a\x20\xfd\x66\x28\x63\xac\x72\x7e\x00\x8f\x15"
+ "\xa2\xb1\x3d\x4d\x0c\xcb\xb3\xca\x4a\xa7\xcc\xfb\x1d\x42\x36\xef"
+ "\xad\x27\xbd\xc3\x76\xa5\x61\x7a\xf4\x49\x29\xcd\x48\xdf\x68\xe2"
+ "\xf3\x6a\x7e\x96\xa4\x94\x36\x56\xc8\xcc\xef\x4d\x41\xcf\x12\xd1"
+ "\x0f\x75\x12\xed\x80\xf0\x2f\xd2\x66\x06\xf4\x42\xc8\xb1\xd0\xef"
+ "\x2a\x6c\xd3\x84\x72\xbf\x35\xca\x8f\x70\x9a\x93\x82\x0e\x52\x6f"
+ "\x8c\xcd\xe4\xae\x48\xb3\x38\x34\x43\x0d\x41\xfc\xac\x38\x9c\x43"
+ "\xe7\x56\x62\x5b\xa2\x10\xe7\xbb\xf8\x3b\x14\x7f\x7f\xd1\x7c\x9c"
+ "\xc6\x5a\x8e\xf7\x1a\xba\x7f\xf3\x7a\xe6\x9c\x32\x13\xe8\x8c\x4a"
+ "\xa4\x7b\x9a\xcd\x01\xf9\x5a\xc2\x53\x41\x67\x77\x62\x1a\xc1\x60"
+ "\x7a\x3b\xa6\xbb\x04\x7e\x53\x89\x8b\x6c\x56\x30\x7e\x9f\xc0\x2f"
+ "\xf0\x12\x3e\x05\xf7\xde\x3d\xac\x5b\xe0\xbe\x2f\x45\xc1\x5d\x85"
+ "\x69\x0a\xfe\x29\x6b\x94\x3a\xee\xcb\xc0\xfc\x12\x75\x1f\xde\xd8"
+ "\xc3\x5c\x84\x03\xf3\xf2\x1c\x50\xc8\xed\xc7\x0e\x4c\xa3\xb2\x2a"
+ "\x99\x8a\x6a\xce\x41\x1c\x47\x39\x8e\x32\x07\xac\x28\x50\xdb\x0d"
+ "\xa4\x51\xbc\x62\x6b\x65\x5c\xfb\x14\x5c\x01\x3c\x8a\x4c\xb5\xe4"
+ "\xc9\x3c\x25\xbc\x71\x84\x17\xe1\x3f\x77\xc0\x73\x07\xd4\x7d\x97"
+ "\x6d\x67\x21\xc2\x68\x64\xf8\xdf\x91\x5d\x52\xda\x4d\x67\x77\xb2"
+ "\x8a\xb1\x07\x48\x37\xd0\x06\x02\xea\x92\xc3\x5d\x71\x7f\x4a\x88"
+ "\x0d\xd4\x12\x1c\xda\xcd\x2f\xf9\xd9\xa5\xd7\xb3\x2e\x84\xc9\x0c"
+ "\x3a\xaf\x53\x82\x47\x30\x2d\x57\x39\x37\xb4\x1a\x61\x1c\xd2\xb8"
+ "\x88\xfb\x22\x6e\x1d\x09\x92\xbd\xde\x41\x3e\x29\xc9\x55\x86\x3d"
+ "\xc5\x05\xf6\x7a\x3f\xf8\x1b\x72\xcb\x32\xb7\x32\x1b\xfa\x21\x7f"
+ "\xa4\xf3\x9e\x07\x37\xce\xdd\xcf\xcf\x7f\x64\xbd\xe8\xab\x95\xdc"
+ "\x03\x34\xb6\x9d\x93\xd2\x35\x76\xe7\x37\x5c\x2f\xce\x49\x0f\xf0"
+ "\xb1\xe0\x35\xf4\xed\xc8\xbf\x43\x9f\xba\xb0\x46\x12\x3e\x9e\x1f"
+ "\x61\x1b\x28\x9d\xfc\x3f\xf4\x3d\x1b\x55\x79\xac\x21\x37\x5d\xd0"
+ "\xee\x81\xdf\x13\x1d\x79\x7b\xbd\xd3\x6c\xd4\x66\x7f\x7d\x6e\x3a"
+ "\xf5\xa1\xd4\xc2\xfc\x76\xaf\xdb\x46\xe7\xe9\x1a\x36\x90\x6f\xfa"
+ "\xc0\x4f\xb2\xf7\x02\x43\xfd\x4d\x1f\x5c\x1f\x1e\xc8\xa7\x3a\xd1"
+ "\xff\x3e\xe7\xbc\x25\x37\x9d\xce\x4f\xde\xb5\x35\x5a\x37\xb9\x9e"
+ "\xd9\x7a\x46\xe4\x96\xb9\x2b\x1e\x38\xac\x9c\x4f\x3b\x48\xbc\x87"
+ "\x95\xbe\x37\xc8\x7d\xc7\x34\x3e\x67\x33\xbe\x8e\x9f\x8f\x4d\xcf"
+ "\xce\x48\xfc\x62\x95\x55\x85\x54\x16\xfb\x9e\xd9\xa8\xd0\xc9\xeb"
+ "\xa4\xb3\xc1\x87\x9d\x91\xd2\x5f\xc9\x2e\xb1\x01\xdf\x0b\xbf\xaa"
+ "\xaa\x70\x70\xed\x4a\xe7\xf3\xdf\x6d\xe8\xfb\x67\x7b\x3f\x60\xc2"
+ "\xf6\xa5\xff\x6a\x96\x8c\x8f\xf2\x14\x5e\x35\xc8\x3e\xf9\x55\xd4"
+ "\x11\x71\xfe\x53\xd5\x2f\xfd\xc0\x7e\x3d\xf8\xec\xd5\xf7\xeb\x41"
+ "\xe3\xc0\x7e\x3d\xf8\xca\x77\xdb\xaf\x07\x23\xbe\xff\x54\xf5\xcb"
+ "\x30\xb0\x5f\x0f\xdd\x77\xf5\xfd\x7a\x08\x06\xf6\xeb\xa1\x67\xbf"
+ "\xdb\x7e\x3d\x54\x70\x05\xfd\x32\x0d\xec\xd7\xc3\xf1\x7f\x47\xbf"
+ "\xda\x07\xf6\xeb\xe1\xfb\xbe\xdb\x7e\x3d\x1c\xf1\xfc\xb3\x88\xf6"
+ "\xb0\x7a\xf7\x41\x61\x0f\x1f\xfe\x72\xf0\xf6\xf0\xe1\x03\x03\xed"
+ "\xe1\xc4\x61\x01\x7b\x98\xe1\xbb\x2a\x7b\x58\x9d\x27\xfb\x13\x19"
+ "\x9f\x0c\xb0\x87\x95\x79\xce\xf0\xf6\x30\xe3\x5d\x6e\x0f\xab\xf2"
+ "\x9c\x83\xeb\x43\x86\xb9\xdf\x1e\xc6\xe7\x39\x83\xec\x61\xc2\xee"
+ "\x83\xee\x8a\x8c\xd6\xab\xb3\x87\x19\xad\x03\xed\x61\x86\x31\xd8"
+ "\x1e\x4e\x84\x4b\xc8\x61\x57\x38\x7b\x98\xed\x3d\xcf\x64\xd9\xe8"
+ "\x1a\x5c\x7b\x26\xe6\x5d\xa2\x2e\xf3\x65\xea\x32\x0f\xb2\xae\x96"
+ "\x88\x75\xe9\x7e\x9f\x83\x7e\x86\x7e\xcb\xdb\x20\x75\x96\x80\xd4"
+ "\x96\xd2\x0e\x76\x8b\x07\xc6\x99\x51\x26\xac\x90\xd1\x56\xdf\x0d"
+ "\x6d\x29\x9d\xc0\x62\x7e\x9f\xc3\x7e\x96\xeb\xcc\x2c\x22\xd9\x7c"
+ "\x64\x8b\xbd\xd8\x33\x48\xd9\x7c\x24\x4b\x91\xcd\x36\xef\x3d\xdc"
+ "\xe7\x3d\x27\x4d\xfa\x95\xbd\xfb\x8c\x2c\x9b\x93\xde\xe8\xe7\x8f"
+ "\x55\xc8\x67\x58\xd9\x44\x9d\x08\x96\xcd\xaa\x7c\x21\x9b\x93\x96"
+ "\x0d\x94\xcd\xaa\xfc\xf0\xb2\x39\xe9\x51\x21\x9b\x55\xf9\x83\xeb"
+ "\xc3\xa4\xb8\x80\x6c\x56\xe5\x07\xc9\xe6\x1d\xb9\xe8\xbf\x4d\x2a"
+ "\xb8\x3a\xd9\x9c\x54\xa0\xf4\x7d\xaf\xdc\x77\xa4\x57\x4b\xb0\x6c"
+ "\x4e\x8a\x78\xd6\x35\x9d\xbf\x8e\xf6\x30\xee\x8c\x94\xb9\xda\x87"
+ "\x7e\xab\xbf\xfc\x7c\x7b\xb6\x8f\xb9\xe9\x1c\x76\x26\xa5\x01\xdb"
+ "\x68\x8c\x73\x63\x4c\xe9\x76\x17\xea\x58\xec\xe1\xbf\xb2\xbe\x64"
+ "\xc0\xb6\x27\x32\xb7\x31\x01\x69\x96\x8a\xbf\xc3\xf7\x6e\x80\x24"
+ "\xbc\x92\xf7\xca\x74\xc5\x7b\x13\xdb\x98\x1c\x5b\xbd\x01\xc6\x24"
+ "\xba\x40\x87\x6d\xc8\x4b\xdc\xa6\x07\x8c\xf9\x93\xe8\x9e\x59\xdf"
+ "\x85\xc6\x8b\xa0\xa5\xf9\x44\x7f\x0c\xd6\x67\x49\x64\x6c\xbd\x11"
+ "\x1a\x8b\xb0\x3d\x12\x24\x37\x4a\xec\xa0\x6f\xa3\x51\x62\x09\xbb"
+ "\x57\xb1\x97\xf2\x78\x9b\xfc\xa9\x73\x4d\xec\x67\x78\x95\x16\x52"
+ "\xbd\x99\x74\x1e\x30\xbb\x63\x6e\x1a\x73\x27\xc7\x56\x5d\x84\x31"
+ "\x8d\x1b\x20\xb5\x61\x03\x18\x59\x9f\x51\x42\x1a\xe4\x2d\x7a\x41"
+ "\x4f\x7c\xcf\x63\x12\xd6\xb5\x01\xeb\x42\x5e\xfa\x76\x60\x5d\x5e"
+ "\xac\xeb\x3c\xd6\x75\x0e\xeb\xb2\x62\x5d\x56\x51\xd7\xe0\x68\x9e"
+ "\xd9\x7e\xa9\x79\xdf\xec\x2d\x23\x68\x7f\xda\xd3\x89\x96\xa1\x59"
+ "\x34\x07\xdc\xf3\x52\xe1\x20\xe5\xfd\xd1\xf4\x48\xf8\x77\xfd\x13"
+ "\xa4\x30\xdd\x57\xed\xb3\x5e\xf9\x82\x65\x7b\x01\x5e\xf9\x27\x18"
+ "\x43\x3a\xd7\xe6\x39\x8b\x7a\xf6\x55\xfb\xc7\xc6\xee\xc1\xd6\x15"
+ "\xf1\xfb\xd7\x0a\x2b\xa3\xf9\xe7\x7c\x16\xb7\xdb\xb2\xcb\xca\x2c"
+ "\x7d\x29\xb9\x39\xbd\x29\xb9\xe6\xc5\x5e\x3d\xca\x15\xb3\x18\x8a"
+ "\xc0\xd0\x29\x4d\xfb\xea\xd3\xcf\x71\x8c\x78\x06\x74\x27\xa5\x2c"
+ "\x43\xe9\xbf\xd1\xfc\xdd\x63\x69\xc1\xf3\x77\x8f\xe5\x81\x34\xb9"
+ "\x15\xa4\x29\xed\x20\x4d\xf5\x02\xc2\x05\x5f\xd3\x92\x05\xae\xc9"
+ "\xef\x66\xff\x62\x04\x6c\xf5\xb2\xd3\x18\x9f\x66\x55\x63\x0c\x9c"
+ "\x3d\x5a\xe3\xb0\x6d\xa0\x79\xad\xc9\x7b\x91\xa6\x5f\xe3\xb8\x94"
+ "\x88\xf7\x2b\x91\x77\x60\x2e\x82\x6b\xcf\x48\x93\x0b\xbd\x78\x9f"
+ "\xe8\x1a\x9a\xe5\x2b\xcd\x03\x6f\x72\x2d\xf4\x55\xee\xce\xf1\x61"
+ "\x1c\xeb\xd7\x9d\x6f\x2f\xfd\x0a\x52\xec\xdd\x3e\xa8\x47\xb9\x5b"
+ "\xec\xd3\x91\x3e\xe4\xd9\x9e\xfb\x14\x3a\x8b\x41\x2a\xbd\x00\xf1"
+ "\xac\xc7\x18\xa7\xc8\xf5\xcc\xee\x44\xcf\x96\x6e\xe6\x27\xf9\xa6"
+ "\xf9\x05\xcc\x4b\xd8\x7a\x01\xc7\x5a\x67\x17\xd4\x63\x2c\xed\x5b"
+ "\x5f\x38\xdc\xd9\x53\x78\xed\x5b\x7e\x48\x4a\x70\x81\xbe\xfe\x1b"
+ "\x94\xc1\xf5\x28\x7f\xdf\xa0\x9c\x3b\x85\x9c\xd3\xf7\x37\x0d\x24"
+ "\xe3\xaf\xda\x52\x1b\xbf\x11\x32\xce\xe5\x8e\x64\x7c\x1d\xca\xdd"
+ "\xda\x80\xdc\x79\x7b\x50\xc6\x2b\x1e\x4d\xae\xb7\x32\xd8\xb2\x12"
+ "\xa4\xc6\x33\x43\x29\x4f\x13\x3d\x5a\x32\x7c\x9a\xe3\x81\x40\x1c"
+ "\x96\x35\xb2\xf7\x96\x5c\xb3\x61\x36\x3b\x7f\x52\x9a\x5c\x8b\xe9"
+ "\x3a\xc3\xbc\x3b\xf5\x48\xef\x91\x62\x7e\x26\xcb\x40\xb1\xbb\x03"
+ "\x69\x41\x74\xc1\x38\xfa\xce\x93\xd2\x63\x2b\x89\x8e\x1b\xf7\x43"
+ "\x94\xf9\x11\xd6\x81\x34\x33\x33\x3e\xa7\xf1\x58\x21\x9f\xa7\xde"
+ "\x66\x80\xcf\xf8\x7c\xa2\x28\xe3\x43\xba\x79\xe3\xe6\x03\xf2\xbb"
+ "\xd0\xf6\x7c\x2f\xd7\x39\xa2\x63\xe7\x6a\x90\x16\x77\x23\xad\x7c"
+ "\x48\x2b\x37\xb7\x05\x39\xdc\x16\x94\x1f\x6e\x2f\x71\x30\x7f\x76"
+ "\x41\x14\xdb\xfa\x02\xbd\xcf\xf0\xc1\x22\x33\xb0\x2d\x67\x91\x5e"
+ "\xae\x76\xb2\x1b\x09\xfe\x8d\xc2\x36\x10\xbd\xe2\xbb\x41\xcf\x2a"
+ "\xbe\x3e\xfe\x4f\x5b\x5b\xa3\x7d\x28\xbf\x64\x1f\x12\xb7\x69\x62"
+ "\x50\x2f\x13\x2a\x49\x7f\x51\x9f\x13\xb7\x71\x7b\x95\x57\x8f\x7a"
+ "\xeb\xdd\x68\x1c\xd5\xb7\xd1\x68\xc0\x6b\x84\x62\x43\xe8\x1c\xad"
+ "\xbd\x44\xdb\x8a\x47\xcb\xc8\x7e\xd8\x2d\x0e\xf0\x22\x6d\x13\x68"
+ "\xbc\xd9\x68\x4c\xe1\x34\x5e\x61\x84\xf1\x1e\xd0\x60\x9b\xf4\xd8"
+ "\x5e\x68\x5c\x0e\xba\x63\x85\x27\xc1\x87\xba\xa1\xd0\x7d\xe6\x4a"
+ "\x03\x20\x5e\xe9\x63\xe3\x9f\x41\xa6\x99\x26\xb2\xdc\x4d\xbd\x10"
+ "\x90\xbb\xa9\x17\x88\x76\x42\xee\xa6\xba\xbe\x8f\x72\xf7\x59\x1e"
+ "\x97\xbb\xa8\xbe\x5b\xb8\x3c\x99\xed\xde\xdf\x22\x8d\xa6\x3a\x48"
+ "\x46\x48\x66\x3e\xf9\x25\xc9\xcc\x34\xdd\x7f\x57\x99\xf9\xd6\x6d"
+ "\x34\xe0\xf5\x9f\x22\x33\x88\x97\xcb\x0c\xd1\xea\xb3\xbc\x5e\x50"
+ "\x68\xc4\x75\xb5\xfc\xab\x76\x43\x29\x4c\x42\x5d\x35\x24\x6e\x1b"
+ "\x01\xc7\x38\x9d\xb2\x0c\x86\x79\xcc\x7f\x52\x9a\xf6\x68\xe9\x1f"
+ "\x41\xdf\x6b\x65\xcc\xee\xfd\x15\xd2\xab\x5a\xc7\xe7\xb3\x2b\xe7"
+ "\xe7\xd0\xbb\x11\x7a\x2f\x42\x73\x74\x89\x66\xd0\xd2\x5c\xb9\xaf"
+ "\xea\xb5\x1c\x7a\x3f\xc2\xe2\x75\x4d\x3e\xd4\x6b\xff\x8e\x4f\x0e"
+ "\xfa\xe3\x35\xe8\x23\x4c\x2b\x77\x40\x4b\x2a\x9f\x93\xaf\xdc\x4d"
+ "\xbe\x0b\xd9\x5f\xbe\xde\x9b\xde\x9d\x60\xfe\x7e\x65\xce\x9f\x6c"
+ "\x82\x3c\x2f\x27\xcf\xdb\x4d\x23\x1e\xc6\xd2\xbc\x9d\xb0\x29\xd3"
+ "\xde\x50\xe6\xed\x94\x67\xca\x77\x48\xd3\xea\x69\xce\x27\x50\x2e"
+ "\x2b\x59\x86\x93\xcb\x3d\x76\x0b\xd9\xfa\x40\x39\xf1\x8c\x76\x25"
+ "\xb9\x4f\x02\x5d\x58\x1f\x23\xee\xb5\x1c\xd4\x1f\x6d\xa7\x34\xfd"
+ "\x16\xfc\x95\x90\x2e\xbf\xc7\xdf\x28\xfc\xe5\xe7\xb6\x0d\x6e\xbc"
+ "\xca\xe2\xdf\xbf\x62\xff\xeb\x65\xdb\x38\x97\xeb\xe4\x5d\x10\x7f"
+ "\x46\xbe\x77\x57\x64\x1d\x54\xde\x5d\xf4\xc3\x07\xf8\x33\x83\xea"
+ "\x46\x1e\x69\xc5\xfb\x14\xf1\xac\xc2\x37\x93\x3f\x83\x36\x85\x55"
+ "\xcf\xd7\xd3\x7b\x4f\x94\x5f\x8d\x9b\x15\x3e\x22\xff\x4e\xe4\xef"
+ "\x5f\x90\x47\xe4\xaf\xc9\xf6\x37\x57\xd4\x3b\xdd\x88\xe3\x69\x87"
+ "\xba\xde\x70\xf4\x70\x48\xd3\x23\x9e\x69\x33\x38\x5a\x4c\xcf\x8f"
+ "\x84\x67\xaa\xd1\xc7\x06\x89\x2b\xe2\xf7\x8f\x2c\x25\xd7\x94\xbd"
+ "\xdf\x67\xf3\xf7\xe5\x25\x7e\x5c\x72\x76\x90\xfe\xc5\x13\x11\xf7"
+ "\x7f\xf2\xc5\x55\x1b\xbc\xf5\xb9\x24\xfb\x71\x6d\xfb\xbd\xf0\x8b"
+ "\x33\x5d\x52\xf6\xe8\x11\x10\xdf\x01\x7a\xf2\x9f\x66\x76\x7f\xc0"
+ "\xc8\x87\xaa\x3e\x03\xa9\xbd\xe7\xf3\x12\xfb\xd0\x17\xdc\x79\x06"
+ "\x32\xfc\x2b\x92\x63\x2b\x97\x83\xb6\x17\xfd\xd5\xde\x15\x85\x89"
+ "\x9f\x9d\xe8\x02\xd4\x13\x53\x9b\xcb\x01\x0d\x08\xcb\x4e\xe7\x25"
+ "\x4c\xcf\x67\x9e\xa3\xf9\xbb\x21\xdb\xe8\xb3\x6d\xfd\x12\xe2\xd1"
+ "\x16\xe9\xed\x96\x5f\xf1\x77\x0a\xd1\x9b\x24\x83\xdd\x7b\x0a\xaa"
+ "\x96\xa3\x0d\x43\x9b\x55\x3a\x1f\x6d\xb5\xf7\x02\xbc\xa5\xb6\xd5"
+ "\xcf\xff\x34\x60\xab\xcf\xa3\xad\xae\x40\x5b\x5d\x9a\x0c\x6d\x66"
+ "\x1b\xa0\xed\x18\x3a\xcb\x9c\xe8\xd9\x6a\x46\x9b\xbd\x09\x6d\xb6"
+ "\xe5\x14\x70\x7b\xdd\xdd\x05\x68\x6b\x13\xf6\xae\x85\xa4\xbe\x75"
+ "\x68\xb3\xcf\x17\x5e\xfb\xc6\x56\x61\xb3\xdf\x5c\x8b\x36\x7b\x1d"
+ "\xfa\xc4\x6b\xd1\x66\x77\x87\xb1\xd9\xe7\x22\xf8\xc3\xb2\xfd\xe9"
+ "\x5d\x67\x94\xde\x94\x18\xbc\x34\x1f\xa4\x37\xfe\x7d\xe8\x20\xe5"
+ "\xe4\xc9\xf2\x48\x3c\x20\x7a\x13\xfd\xfd\xc8\x87\x63\xc8\x03\xee"
+ "\xb7\x7a\x86\x66\xf5\xe1\x98\xe6\x4b\xd8\x61\xfe\xe5\x99\x76\x29"
+ "\xa1\x18\xf4\xb3\xcc\x1f\xb0\xde\xf5\x79\xe8\xf7\xe7\xc5\x7b\x2b"
+ "\xab\x0d\x95\xe8\x53\xfb\xd0\xf7\xee\x73\x27\xeb\x90\x06\x7a\xe7"
+ "\xc6\xc2\x44\xa2\xa1\xff\x16\xe4\xe7\x90\x71\x63\xd0\x86\xa6\xed"
+ "\x5d\x0e\xe9\x7d\x55\x3b\xea\x59\xd5\x8e\x1a\x5f\xd5\x8e\x5a\x2c"
+ "\x9b\xf0\xa4\x83\xf8\xf2\x2f\x80\x69\x07\x59\x75\xa5\xd9\x17\x5f"
+ "\x6d\x70\xc6\xef\xa0\xf3\x9c\xf7\x53\xfe\xd6\x25\x10\x9f\x6d\xfc"
+ "\xd6\x26\xf8\xf5\x2e\x10\x9f\x04\xbf\xfe\x02\x55\x18\xf7\xd1\x98"
+ "\xcb\xc7\x57\x99\x67\x18\x2f\x70\x7f\x3f\xc0\xb7\x90\x31\x56\xe6"
+ "\xdb\xb1\x6e\x1b\xe0\x78\x32\xb4\x7f\xac\xe5\x7c\xfb\x0b\x28\xe3"
+ "\x2c\xd2\x3b\x61\x2f\x8e\xb5\x7d\xdf\xd5\x58\x2b\xc7\x31\x34\xd6"
+ "\xd2\x38\x4b\x7c\x7b\x73\xd0\x7c\x9b\x99\x79\x95\x7c\x73\x5e\x25"
+ "\xdf\xb6\x07\xf8\x56\x91\xc2\xaa\x2a\xf4\xbe\xaa\x8a\xa4\x60\xbe"
+ "\x55\x98\x02\x7c\xab\x48\xc6\x67\x63\x80\x6f\x17\x06\xc1\xb7\xe8"
+ "\x6f\xbe\xbf\x7c\x9b\xe5\xb9\x3a\xbe\x55\x5c\xad\xbe\x9d\x50\xf1"
+ "\x0d\xf5\xad\x02\xf5\xad\x22\x44\xdf\x2a\x54\xfa\x56\x81\xfa\x56"
+ "\xa1\xd2\xb7\xb3\x83\xe0\xdb\x35\x27\xbf\xbf\x7c\xcb\x39\x78\x95"
+ "\x7c\xbb\x4a\x7d\x1b\x9f\x16\xe0\xdb\x4e\xd4\xb7\x9d\xa8\x6f\x3b"
+ "\x43\xf4\x6d\xa7\x4a\xdf\x76\xa2\xbe\xed\x54\xe9\xdb\x5f\x06\xc1"
+ "\xb7\x61\x7f\xfa\xfe\xf2\x6d\x76\xe1\xd5\xf1\x6d\xe7\x55\xea\xdb"
+ "\xf8\x4a\x15\xdf\x50\xdf\x76\xa2\xbe\xed\x0c\xd1\xb7\x9d\x2a\x7d"
+ "\xdb\x89\xfa\xb6\x53\xa5\x6f\xef\x0f\x82\x6f\xf7\x57\x7c\x7f\xf9"
+ "\x96\x6b\xb8\x4a\xbe\x5d\xad\xbe\x75\x04\xf8\x56\x89\xfa\x56\x89"
+ "\xfa\x56\x19\xa2\x6f\x95\x2a\x7d\xab\x44\x7d\xab\x54\xe9\xdb\x96"
+ "\x41\xf0\x6d\xc1\x63\xdf\x5f\xbe\xcd\x8d\x38\xff\xa9\xf0\x4d\xe1"
+ "\x19\xf1\x8f\xf3\x8d\xe5\x81\x17\xfd\xc9\xff\xf1\x9c\xe0\x1b\xf1"
+ "\x8b\xf3\xae\x27\x2f\xb1\x4a\xe6\x99\x57\xe6\x19\xd1\x8f\xf8\x46"
+ "\x7e\x24\xe7\x9b\x46\x9b\x44\x3e\xa4\x17\x7d\x49\xc5\x8f\x7c\xa2"
+ "\x90\x79\x8e\x15\xfe\xb4\xdf\x8f\xf4\x86\xfa\x91\x2b\xd5\x7e\xe4"
+ "\xaf\x82\xf8\x55\x79\x11\xf9\x25\xc9\xfc\x7a\x36\x82\x1f\xb9\xfc"
+ "\xa3\x08\xfc\x3a\x7e\x59\x7e\x21\x6f\x92\xfa\x7a\x04\xbf\xde\x94"
+ "\xfd\xff\xfa\xa2\xbf\x93\x5f\xeb\x91\x5f\xe4\xff\xff\x05\xa4\xb7"
+ "\x16\x0d\x96\x5f\x4f\x5f\xd6\xff\x0f\xcf\xaf\x0a\xe7\xe0\xf8\x35"
+ "\x3e\x2d\xc0\xaf\x9d\x7a\x2f\x8e\x69\xca\x78\x16\xe0\x97\x18\xcf"
+ "\xbc\xa1\xe3\xd9\x4a\xf5\x78\x76\x25\xfc\x0a\x19\xcf\xbe\x57\xfc"
+ "\x9a\x1f\x71\xfe\xdf\x87\xb1\xb8\x0f\xed\x1c\xcd\x57\x26\x74\x61"
+ "\x9c\xec\x65\xa7\x67\xb9\x30\x4e\xf6\x0e\xcd\xda\xb5\x16\x52\xfb"
+ "\x36\x62\x9c\x8c\xbc\xab\x5c\x0b\x19\x15\x6b\x41\xeb\x5f\x85\xb1"
+ "\xf2\x19\x8c\x95\xd1\x3e\xf5\x7e\x5d\x98\x78\x34\xdf\x09\x7e\x8c"
+ "\x95\x69\x1e\x0c\xdb\x9b\xca\xbe\xc6\x58\xb9\x03\x6d\x5f\xc7\x9b"
+ "\x22\x56\x3e\xa5\xc4\xca\xbf\x0b\x8a\x95\x77\x3e\x2f\xc7\xca\x32"
+ "\xfd\xeb\xd5\xb4\x7f\xe6\x97\x11\x62\xe5\xd6\xcb\xc6\xca\x14\x23"
+ "\xbf\x45\xf1\xf2\xf9\xc2\xe1\x6f\xc8\xb6\xed\xcd\x73\x7f\x67\xac"
+ "\x7c\x1e\x63\x65\xab\xa0\xfd\x9b\x83\xa6\xfd\x33\x11\xd7\x7f\x90"
+ "\x6e\x90\xbe\xf4\x8f\x45\x48\x67\x65\x0c\xea\xc3\x31\x88\xe6\x33"
+ "\x7a\x2b\x77\x14\xa3\xbc\x72\xfd\xe0\x63\xd2\xc6\x64\x1d\xe9\x06"
+ "\xe9\x09\xe9\x06\x1f\x8b\xd0\x0e\xb2\x21\xa6\x8c\x86\xe7\x21\xbd"
+ "\xf1\x79\x48\xf3\xc6\x07\xc7\xc8\x4f\x14\x10\x3f\x02\xb6\xcd\x1f"
+ "\x6a\xdb\x96\xa9\x6d\xdb\xef\x06\x8e\x45\x97\xb3\x6d\xcf\x47\xd2"
+ "\x95\xd6\xcb\xea\x0a\xe9\x08\x1f\x8f\x50\x5f\xfe\x33\x74\xe5\xcd"
+ "\xbf\x0e\x96\x5f\x0b\x23\xae\xff\xb8\x42\x7e\xb9\xae\x80\x5f\x4e"
+ "\xe4\x57\x4d\x80\x5f\xc1\xb1\x71\x80\x5f\x22\x36\xf6\x87\xc6\xc6"
+ "\xcb\xd4\xb1\xf1\x95\xf0\x2b\x34\x36\xfe\x3e\xf1\x6b\x51\xc4\x75"
+ "\x7e\x57\xc6\xaf\x8a\x2b\xd0\xaf\x0a\xd2\xaf\x0e\x15\xbf\x82\x62"
+ "\x62\x15\xbf\x54\xfa\xa5\x8a\x89\x97\xa9\x63\xe2\x2b\xe1\x57\x68"
+ "\x4c\xfc\x7d\xe2\xd7\xe2\x88\xeb\x3f\xae\x90\x5f\x57\xa0\x5f\x15"
+ "\xa8\x5f\x13\xd2\x03\xfc\x0a\x8e\x85\x03\xfc\xda\xa9\xd2\x2f\x95"
+ "\xef\xb0\x4c\xed\x3b\x5c\x09\xbf\x42\x63\xe1\xef\x13\xbf\x96\x14"
+ "\xff\x7d\xfc\xda\x79\x05\xfa\xb5\x13\xf5\x6b\x42\xa5\x8a\x5f\x41"
+ "\x31\xb0\x8a\x5f\x2a\xfd\x52\xc5\xc0\xcb\xd4\x31\xf0\x95\xf0\x2b"
+ "\x34\x06\xfe\x3e\xf1\x6b\x69\xea\xdf\xc9\xaf\x2b\xd0\xaf\x9d\xa4"
+ "\x5f\x8e\x00\xbf\x82\x63\xdf\x00\xbf\x2a\x55\xfa\xa5\x8a\x7d\x97"
+ "\xa9\x63\xdf\x2b\xe1\x57\x68\xec\xfb\x7d\xe2\x57\xc1\xe7\x97\x8a"
+ "\xa5\xd4\x31\x94\xb7\x34\xc0\x2f\xe2\x4d\x1f\xc6\x4e\x7d\x71\x3b"
+ "\x8a\x23\xc7\x4f\xa6\x8c\x48\xf1\x2e\xed\x07\xf3\x44\x17\x7d\x13"
+ "\x22\x7c\x42\x16\xe2\x13\x1e\x2b\xfc\x25\x04\xc7\xbc\xef\x0f\x88"
+ "\xa1\xfa\x94\x39\x8a\x25\x91\x62\xde\x7f\xb9\xea\x18\x8a\xf8\x44"
+ "\x71\x94\x77\x3d\xf2\x49\xf6\xe3\xdf\xfa\x3b\xe7\x28\xfa\x7a\x8c"
+ "\xd2\x5b\xe8\xc7\x97\x2c\xc1\x18\xea\xb9\xc1\xf2\x69\x79\xc4\xef"
+ "\xbf\x69\x9e\x88\x62\x5e\x8a\xa5\xe8\xbd\x63\x5b\x47\x17\x54\x6c"
+ "\x00\x3d\x7f\xf7\xd8\x15\xfc\xee\x71\x57\x27\xc6\x54\xeb\x90\x6f"
+ "\x7d\x79\x50\xdd\x09\x19\x95\xcf\x8b\x98\x4a\x89\xa7\xda\x5c\x1e"
+ "\xfe\xee\xd1\xee\x75\xc0\x74\x07\xf3\x34\x22\x3c\xc5\x51\x47\xf3"
+ "\xdf\x04\xd2\x95\xd2\x2f\x21\x9e\x78\x80\x31\x18\xe7\x87\x3a\x86"
+ "\x6a\x50\xbf\x6f\x5c\x1e\x29\x86\xba\xfc\xfb\xc6\xfa\x73\x22\x7e"
+ "\xe2\xef\x1b\xff\x5b\xc4\x50\x2b\x22\xbe\xff\x98\xf9\x0b\x31\xdf"
+ "\x40\xb4\xb7\x1b\xbd\x80\xf2\x74\x3a\xb1\x5b\xcc\xeb\x79\xab\x77"
+ "\x98\x29\xa6\xa5\x78\xd6\x6e\x69\x85\x8a\xcd\xa0\xef\x75\xe7\x25"
+ "\x62\x8c\x1a\xef\x45\x5b\xb7\xf3\x8c\xa0\xfd\x96\xb3\xa0\x77\xae"
+ "\x2a\xe4\x6b\x65\x28\x96\x25\x5d\xe1\xef\x1c\x9f\x83\xb4\xfa\x93"
+ "\x90\xce\xf5\x03\xf5\xc2\x5b\x55\x6d\xf0\xc7\xef\xa8\x25\x3d\x99"
+ "\x7e\x82\x79\x88\x07\xa4\x1f\x9f\x9d\x20\xde\xfc\x0a\x4a\xff\x22"
+ "\x78\xc3\xf9\x22\x05\xbf\x0b\x1e\xa8\x1b\x7f\x8a\xc0\x9f\xc3\x57"
+ "\xc6\x9f\x75\xc1\xfc\xd9\x7b\xb5\xef\x83\x95\xf5\x91\xeb\x8c\xd2"
+ "\x5e\xf9\x7d\xf0\x9b\xcf\x0c\x96\x3f\x2b\xeb\xae\x92\x3f\xce\xab"
+ "\xe3\x4f\x85\x9e\xbf\x5b\x0c\xe2\x4f\x85\x51\xf0\xa7\x22\x89\x62"
+ "\xa5\x00\x7f\x2e\x5c\x21\x7f\x42\x62\xa4\xef\x15\x7f\x56\x45\x9c"
+ "\xff\xb9\x34\x7f\x2a\xae\x52\x7f\x2a\x6a\xf8\x3b\xc4\x60\xfe\xc8"
+ "\xfa\x53\x51\x4b\xb1\x51\x80\x3f\x67\xaf\x90\x3f\x21\x31\xd1\xf7"
+ "\x8a\x3f\xab\x23\xce\x7f\x5f\x86\x3f\x57\xa9\x3f\x3b\xf5\xfc\x5d"
+ "\x61\x10\x7f\x76\xca\xfa\xb3\x33\x89\x62\xa1\x00\x7f\xfe\x72\x85"
+ "\xfc\x09\x9d\x3f\xfd\x3e\xf1\x67\xad\xe5\xea\xf8\xb3\xf3\x2a\xf5"
+ "\x67\x67\x0d\x7f\x27\x18\xcc\x1f\x59\x7f\x76\xd6\x52\xec\x13\xe0"
+ "\xcf\xfb\x57\xc8\x9f\x90\x98\xe7\x7b\xc5\x1f\x73\xc4\xfd\x9f\x2e"
+ "\xc3\x9f\xab\xd4\x9f\x4a\x3d\x7f\xf7\x17\xc4\x9f\x4a\x59\x7f\x2a"
+ "\x93\x28\xd6\x09\xf0\x67\xcb\x15\xf2\x27\x24\xc6\xf9\x5e\xf1\xe7"
+ "\x85\xc3\x97\x7b\x5f\xa4\xf8\xce\xea\xf7\xb2\x7d\xe8\xbf\x91\xff"
+ "\x4c\xbe\x73\x9b\xeb\x30\x78\xd7\x09\xde\x54\x5c\x04\x7d\xa5\xcc"
+ "\x1b\xfe\x4e\x76\x95\x78\x27\xcb\xfd\xb6\x57\xc7\x8d\x61\xdb\xb4"
+ "\x49\xe4\x97\xf1\xf7\xae\xfc\xdd\xc4\xc7\x94\xb7\xbf\x4f\xe5\xbf"
+ "\x51\x8c\x8a\xbe\x37\x50\x9c\x5a\x7a\x6a\x10\x7e\xdb\x73\x91\xf8"
+ "\x72\xf9\x77\x13\xf5\xaa\x75\x7c\x4a\xec\xf9\x9d\xf2\x65\xd0\xef"
+ "\x5d\xd7\x47\xdc\xff\xf1\xd2\x7c\xa9\x70\x0e\x8e\x2f\x38\xde\xbc"
+ "\x3a\x3e\x4d\xf0\xe5\x2f\x21\x7c\xd9\x69\xec\x53\x8d\x3b\x57\xce"
+ "\x97\x90\xf1\xe6\x7b\xc5\x97\xe2\xae\x88\xb1\x26\xda\x25\xe2\x09"
+ "\xad\xef\xde\xf5\x1c\xa4\x56\x9c\x84\x8c\xbe\xaf\x93\x63\x67\xa1"
+ "\x9d\xeb\x5b\x95\xac\x6b\x43\x1b\xb7\xd5\xc5\x4e\x27\xb8\x86\x66"
+ "\x7d\xfa\xb9\x13\xda\xf2\x1d\xd0\xbb\x31\x0f\xaa\xce\xd0\x5a\xf5"
+ "\xc3\xb0\xa3\x88\x62\xf9\xdf\xc2\x67\x27\xbe\x81\x59\xfb\x59\x9f"
+ "\xbd\xfb\x30\xd8\x36\xff\x16\xd8\x2a\x63\x6c\x23\xc2\x2c\x46\x1a"
+ "\x9e\x93\x5e\x6c\xfa\x16\xe3\xd1\xf1\x16\xd0\xcf\xe8\x66\x9e\xb6"
+ "\xee\x4f\xe1\x2d\xac\xeb\x63\x1c\x05\x89\xbe\xc4\x93\xaa\xe7\x29"
+ "\xfe\x7c\x5f\xf0\xe4\x29\xc1\x93\x37\x55\xf1\xa7\x01\xf3\x3b\xcd"
+ "\xc8\x8f\xbf\x85\xf0\xe3\x44\x17\x20\x7d\x87\xce\x72\x21\x3f\x5c"
+ "\x0a\x3f\xce\xc2\xd6\x17\x88\x1f\x8e\xfe\xf5\xae\xbd\x32\x3f\xea"
+ "\xc9\x7e\x99\x41\xff\x86\x12\x7f\x9e\x53\xf1\x43\xf9\x26\x4b\xcd"
+ "\x0f\x25\xf6\xdf\x68\xa4\xef\xb4\xfa\xe3\xcf\x6f\x31\xfe\x7c\x03"
+ "\xe3\xcf\xd2\x3f\x82\xf4\xc6\xd6\xc1\xf2\x63\x43\xc4\xf1\x5f\xe1"
+ "\x05\x8d\x2d\x7d\x09\x3b\xcc\xc4\x07\xbb\xe5\x20\x10\x4f\x68\x3c"
+ "\xf1\x7d\x9d\xac\x2b\x29\x46\xdd\x71\x0c\xcd\xea\x65\x18\xf3\x63"
+ "\xbc\x6f\x5f\xf8\xef\x40\x73\x06\x82\x07\x7d\x7d\x76\xe7\x61\x20"
+ "\xda\xdb\x36\xff\x3b\xe7\xc3\x39\x69\xa3\x61\x91\x0b\xa4\x71\x28"
+ "\x87\x18\xef\xeb\x17\xd3\x77\xb9\x68\xdb\xde\x5a\x0e\xe9\x33\xcc"
+ "\xcc\x43\xb1\x29\xe9\x10\xad\x3d\x21\xbb\xd6\x66\xfe\x08\x68\x5e"
+ "\xa7\x2f\xbe\xda\xf0\x71\x31\x00\xd9\x37\xa2\x7b\xf4\x8b\x01\x3e"
+ "\xd1\x7a\x12\xce\xab\xb9\x57\xb0\xce\x55\xcd\xaf\x85\x8e\x2b\x5a"
+ "\x9f\xdc\x2b\xcf\x17\xd4\x2b\x73\x6a\x57\x3b\x5f\xa0\xcc\xa9\x9d"
+ "\x17\xeb\x49\x4a\xff\x8c\xfa\x33\x68\x7e\x59\x8c\x57\xc8\x2f\xe7"
+ "\xe0\xf9\xe5\x0e\xc3\x2f\xcb\xf1\x81\xfc\xaa\xd0\xab\xf8\xb5\x3d"
+ "\xc0\xaf\x0a\xa3\xe0\x57\x45\x52\x80\x5f\x15\xc9\x97\xe7\xd7\x25"
+ "\xd6\xb7\xfe\xc3\xf3\x6b\x53\xc4\xf8\x27\x98\x5f\x15\x57\xa1\x5f"
+ "\xe7\xc3\xf0\x6b\x73\x59\x18\x7e\xa9\xf5\xeb\x84\x8a\x5f\xb2\x7e"
+ "\x55\xa8\xf4\xab\xe2\x0a\xf4\xeb\x12\xeb\x5a\xff\xe1\xf9\xf5\x52"
+ "\xc4\xf5\x3f\x21\xfc\xba\x0a\xfd\xfa\x22\x0c\xbf\x4a\x4c\x03\xf9"
+ "\xb5\x53\xa5\x5f\xe8\x5b\xf4\xf3\x6b\xa7\xac\x5f\x3b\x55\xfa\xb5"
+ "\xf3\x0a\xf4\xeb\x12\xeb\x59\xff\xe1\xf9\xb5\xe5\x92\xeb\x7f\x02"
+ "\xfc\xda\x79\x15\xfa\xf5\x41\x18\x7e\x6d\x71\x84\xe1\x97\x4a\xbf"
+ "\xc6\x57\xaa\xf8\x25\xeb\xd7\x4e\x95\x7e\xed\xbc\x02\xfd\xba\xc4"
+ "\x3a\xd6\x7f\x78\x7e\x6d\x8d\xe8\xff\x85\xf0\xeb\x2a\xf4\xab\x34"
+ "\x0c\xbf\x4a\x6b\x06\xf2\xab\x52\xad\x5f\x1d\x01\x7e\x55\xca\xfa"
+ "\x55\xa9\xd2\xaf\xca\x2b\xd0\xaf\x4b\xac\x5f\xfd\x87\xe7\x57\x59"
+ "\xc4\xf9\x6f\x35\xbf\x7a\xab\x15\xff\x70\x7f\x30\xbf\xd0\x5f\x4f"
+ "\xec\x10\xb1\x95\xc2\xaf\xc8\xbe\xe1\xb6\x8c\x7e\x5e\x9d\x0a\xf8"
+ "\x86\x9c\x4f\xf2\x7b\x0a\xe2\x0f\xf9\x88\xe4\x13\xf6\x56\x09\x1e"
+ "\xd1\x3b\xc0\x4b\xfa\x85\x57\xf2\xfd\xd3\x55\xf0\x49\x89\xab\xbe"
+ "\x73\x3e\xfd\xdb\xd5\xf0\xc9\x1a\xf1\xfb\xa7\x60\x3e\x29\xe3\xd6"
+ "\x95\xf2\x29\xdc\x98\x65\xed\x18\xc8\xa7\x9d\xfa\x00\x9f\xc4\x38"
+ "\x45\x63\x17\x8d\x55\xc1\x7c\xba\xc4\x78\x75\x25\xdf\x5f\xfc\xc3"
+ "\xf3\xe9\xe5\xc8\xf6\x4f\xe2\x67\x9b\x1f\xac\x91\xfc\x87\xf1\xb2"
+ "\xe1\xd5\x8a\x69\xd1\x98\x76\x9c\xca\xd4\xc8\x79\xbe\x0a\xa0\xef"
+ "\xb4\x6d\x89\x9a\x7c\xda\x4f\x97\x60\x86\x28\x30\x89\xdb\x20\x13"
+ "\xfb\x23\xe0\x24\x28\xc3\x74\x5b\xfc\xb6\xcc\x21\x08\xdf\xca\x2a"
+ "\xa6\xe7\x63\xda\x50\x82\x65\xdb\xb4\x7c\x5e\x31\x51\xc3\xf7\xbe"
+ "\x91\xe1\x35\x40\xf0\x04\x8b\x70\x3a\x19\x2e\x85\x7f\x13\x2c\x49"
+ "\xd0\x38\xb0\x6d\x31\x32\x0c\xed\x9d\x67\x50\xb7\x31\x5e\x93\xc9"
+ "\x71\xc9\x70\xb1\x3e\xeb\x49\x7a\x3e\xee\xdb\xa6\x4d\x55\xc3\xb1"
+ "\xc7\x80\xf0\x2a\x70\xd7\xc8\xf8\x8c\x41\xfd\x1d\x05\x10\xbf\xcd"
+ "\xc0\xf1\xc5\x77\x4b\x20\xb7\x2f\x8e\xc5\x66\xa5\x71\x78\x8d\x76"
+ "\x4c\x10\xfc\x10\x50\xf7\x23\x9e\x0d\xb9\x37\x55\x86\x33\xf9\x25"
+ "\x30\x11\x2c\xa6\x6b\xd5\xb4\x96\x61\x13\x14\x3a\x22\xaf\xb5\xea"
+ "\xfe\xfa\xb0\xff\x7b\x45\x1b\x13\x7d\xaf\xde\x93\x26\xf7\x25\x5d"
+ "\x5d\x2f\xc1\x61\xb9\x09\x32\x4f\xf4\xd8\x8f\x8c\x7e\x7c\x95\xf3"
+ "\xb3\x14\xb8\x52\x1f\xdc\x88\x3c\xb2\xd9\x0b\x01\xe4\x7e\x0f\x43"
+ "\xde\xb8\xe4\xbe\x67\x06\xd3\x51\xe3\x50\xe8\x88\x30\xfb\x11\x76"
+ "\x38\xc2\x4c\x51\xf0\xfa\xac\xfc\x9b\x7d\xd1\x6f\xab\xf7\x5a\x92"
+ "\x8b\x63\x28\x61\x0d\xa2\x3f\xd7\xca\x38\xb3\x44\x9f\xf5\xb0\xb7"
+ "\x9f\xd7\x5a\xca\xb3\xc9\x70\x49\xbc\x3f\xb1\xf3\x0c\x3e\x8d\x76"
+ "\xc6\x40\x58\x9d\x1a\xf6\x3a\x01\xfb\xe4\x71\x84\xcd\x19\x08\xab"
+ "\x57\xc3\x5e\x2f\x60\x67\x96\x23\x6c\xee\x40\x58\xef\x70\x15\xec"
+ "\x0d\x02\x36\x3b\x13\x61\xf3\x06\xc2\x1a\xd4\xb0\xc9\x02\xf6\x69"
+ "\x6a\xc3\xc2\x81\xb0\x99\x6a\xd8\x1b\x05\x6c\x8e\x07\x61\xf3\x07"
+ "\xc2\x96\xa9\x61\x6f\x12\xb0\xb3\x0f\x22\x6c\x41\x28\x6c\x23\x97"
+ "\x03\x18\x25\xcb\xc1\xcd\x02\x36\xb7\x10\x61\x0b\xc3\xf4\x2d\x8a"
+ "\xe3\x15\xb0\x29\x02\xf6\x89\x19\x08\xbb\x3a\x0c\x2f\xd4\xb0\xb7"
+ "\x08\xd8\x65\x29\x08\x6b\x0e\xc3\x0b\x35\xec\x08\x01\xfb\x8c\x17"
+ "\x61\x8b\xc3\xf0\x42\x0d\x7b\xab\x80\x5d\x78\x00\x61\x2d\x61\xe8"
+ "\x1b\x80\x8d\x5d\xb4\x10\x61\x4a\x90\x26\xc7\xc3\xd0\x56\x8d\x73"
+ "\xa4\xc0\x99\x1f\x87\xf0\x65\x61\x68\xab\x86\x1d\x25\x60\x97\xbc"
+ "\x87\xb0\xdb\x07\xc2\x82\x66\xaf\xa0\xef\x3d\x32\x7d\x6f\x13\xf0"
+ "\x4b\x57\x23\x7c\x79\x18\xfa\x52\xbe\x4d\xd6\xb5\x54\x01\x3b\xbf"
+ "\x0c\x61\x2b\xc3\xd0\x57\x0d\x7b\xbb\x80\x2d\x02\x84\xad\x09\x43"
+ "\x5f\x35\xec\x1d\x02\xb6\x90\x64\xb2\x36\x0c\x7d\xd5\xb0\x77\x0a"
+ "\xd8\x95\x0e\x84\xad\x0b\xd3\xde\x51\x2a\x58\xa3\x80\x5d\x45\xed"
+ "\xad\x0f\xc3\x0b\x35\xec\x68\x01\xbb\xbe\x0e\x61\x9b\xc2\xf0\x43"
+ "\x0d\x7b\x97\x80\x5d\x43\x7a\xbc\x2f\x0c\x3f\xd4\xb0\x77\xb3\xd8"
+ "\xb5\x36\xd9\x2e\xee\x0f\x85\x45\xde\x0b\x9b\x68\x85\x31\x2c\xd6"
+ "\x9c\x8f\xf7\x04\xc7\xf7\x3d\xe8\xc7\x67\xf5\xde\x4b\xf6\x46\xb6"
+ "\x61\x63\x59\xec\xf2\x16\x19\xdf\xc1\x01\x75\x5b\xb5\x6a\xd8\x71"
+ "\x2c\xb6\xcc\x21\xc3\x1e\x1a\x08\xab\x53\xc3\x8e\x67\xb1\x1b\x94"
+ "\x76\x1e\x1e\x08\xab\xef\x87\x65\xb1\x16\x33\xc2\xbc\xd7\x20\xdb"
+ "\x46\x55\x3b\xef\x51\xe1\x9b\xc0\x62\x37\x1b\x64\x7c\xb6\x81\xf8"
+ "\x0c\x6a\xd8\x7b\x58\xac\xb5\x5c\x86\x6d\x19\x08\x9b\xa9\x86\xbd"
+ "\x97\xc5\xbe\x74\x5c\x86\x6d\x1d\x08\x5b\xa6\x86\x4d\x63\xb1\x5b"
+ "\xca\x64\xd8\xa3\x03\x68\x4f\x7a\x60\x45\x5f\x40\xd8\xa4\xfb\x58"
+ "\x6c\xa9\x49\x86\x0d\xf2\x03\x54\xe3\xf0\xfd\x82\xef\x2f\x9a\x90"
+ "\xef\x7c\xcd\x1d\xda\xfc\xf6\x70\x3e\x86\xf9\x2e\xb8\xe6\x8c\x54"
+ "\x79\x42\x8c\x49\xca\xde\xf4\x55\x5c\x56\xfc\xf5\xb9\x39\xd9\x2e"
+ "\xe6\x55\xa7\xed\x92\xd8\xf1\xf1\x2e\xd0\xf2\xfd\x8e\xe3\x77\x5b"
+ "\x1c\x98\xee\xbc\x25\xd7\xec\xae\xa8\xec\x72\x68\xc6\xf2\x3d\x69"
+ "\xf1\xde\xe5\x80\x55\x47\xe9\x7e\x97\x95\x79\x68\xcf\x5b\x5f\xf5"
+ "\x7c\xbd\xdd\xdf\x4d\x7b\x5f\x79\x10\x87\xa7\xd3\x0c\x51\x86\x22"
+ "\xa0\x77\x2d\xbd\x76\x4b\x37\x20\xfe\x07\xd9\xba\xc2\x0c\x6c\x03"
+ "\xed\x8d\x52\x70\x12\x9f\x79\x1b\xd0\x07\xc2\xb1\x72\x8c\xad\x88"
+ "\xf6\x13\xaa\x5a\xe9\x8c\x7f\xcd\xc4\x5e\x5e\xd0\x65\xde\x0a\xb7"
+ "\x9e\x91\xaa\xb8\x9d\xe5\x7b\x8b\x9c\x2f\x7c\xc4\x1f\x3f\x7f\x0c"
+ "\xed\x39\xc2\xea\x6a\xf5\x62\x3f\x92\xaa\x77\x79\x9b\xad\xec\x38"
+ "\x4b\xc9\xcd\xf4\xf7\x6e\x2f\xa3\xb3\x0f\x6c\x5b\xcf\xc0\x49\x55"
+ "\x9e\xf3\xc6\x5a\xbe\x57\x09\xf6\x29\x33\xec\x1e\x1e\x56\x48\x64"
+ "\x55\xf3\xb3\xdc\x15\x55\x47\x1d\xd2\x76\xa3\xe8\x63\x55\xbb\x43"
+ "\x33\x64\x8a\x7c\xdf\xe1\xd0\xe8\x9c\xf2\xbd\xd3\xa1\xb9\xad\x45"
+ "\xbe\xf7\x2a\x7b\xa9\x84\xdf\xdb\x65\x7e\x0a\xf6\x2d\xcd\xff\x56"
+ "\x9e\x8e\xfc\x4b\xda\x67\x8d\xc5\xcf\x4f\x31\x8c\xa0\x33\x2d\xaa"
+ "\x6b\xb1\xce\x34\xb1\x3f\x66\xf5\x7c\xfc\x4d\x94\x7f\x9d\xf2\x2f"
+ "\x23\x18\xce\xb7\x94\x5c\x1b\xab\xac\xd2\x51\xdf\xb6\xfa\x98\x1f"
+ "\xf1\xe6\xb1\xf2\x66\x8b\xdd\xd2\x05\x62\x5f\xe9\xea\x57\xf8\x3e"
+ "\x37\x44\x3b\xa4\x2f\x8b\x69\xb6\xf0\xba\xaa\x5e\x33\xa9\xdb\x65"
+ "\x9a\x70\xcf\xbd\x69\xf7\xdd\xff\x40\xfa\x83\x4b\x9e\x5b\x5a\xb0"
+ "\x6c\xf9\x8a\xc2\x95\xcf\xaf\x5a\xbd\x66\xed\x3a\xf3\x0b\x45\xeb"
+ "\x8b\x5f\xdc\xb0\xd1\xb2\x69\x33\x6d\xda\xd2\xdf\xfe\xb7\xa6\x68"
+ "\x5c\x12\x60\x1d\x8f\x51\x1d\x7c\x7f\x27\x4a\x13\xb4\xaf\xee\xd0"
+ "\x1a\xc2\xfb\xb5\x76\xf4\x34\x69\x8f\xe5\x6e\x69\xd7\xa3\xb4\xdf"
+ "\x33\xf2\x58\x63\xaf\x9f\x66\xa3\x3d\xf8\x3b\xa4\x5d\x69\x6d\xce"
+ "\x69\x36\x3a\x03\xa2\x39\xb9\x0b\x52\x47\xd1\x3e\xfd\xbb\x0c\x94"
+ "\xdf\x78\x07\x40\x0b\x96\x0d\x87\x73\x94\x1e\x92\x5f\xbb\x9e\x39"
+ "\x6b\xaf\x67\xdd\x84\xbf\x76\x0f\xeb\x72\xbe\x54\x08\xd5\xf8\x8c"
+ "\x72\xa6\xef\x94\x76\x5d\x68\x4e\xe1\x7b\x99\xa7\x34\xec\x61\x1d"
+ "\xdb\xaf\x67\x1d\x2f\xef\x61\xdd\x8d\xd7\x33\x47\x6a\x2d\xc4\xb9"
+ "\x2b\x76\xed\x77\x48\xbb\xf8\x1e\x82\xbb\x30\xdf\x1f\x5b\xdd\xb4"
+ "\x0b\xf3\xc6\x7b\x21\xaa\x11\x9f\x31\xcd\xd5\x6c\x10\xed\xfe\xf5"
+ "\x37\x9e\x68\xc4\x57\xc9\xfa\x56\x6b\xaa\xb1\x1e\xc1\xa3\x9a\x1b"
+ "\x5b\x70\x14\xc5\xfa\x9c\x76\xcf\x49\x70\x48\x35\xc9\x8d\x17\x79"
+ "\x7d\x89\xf6\xba\x6e\x20\x7c\xff\x54\xe4\x89\x5e\x7f\x13\xf3\x62"
+ "\x59\x8f\xff\xa5\xd5\x1a\xac\xef\x73\xc4\xed\x52\xf7\xc7\xb8\x7c"
+ "\x4d\xb1\x61\xed\x8b\xab\x57\x8f\x8e\x05\x23\xff\x0d\x3a\x3f\xa2"
+ "\x18\xf1\xc1\x6b\x7b\x58\x0b\xf6\xd3\x86\xfd\x6d\x3d\x86\xde\x33"
+ "\xca\x0b\x60\x9f\x6a\xb0\x0d\x6b\x30\xfd\x3d\xbc\x7f\x0f\xdb\xde"
+ "\x2a\xce\x1c\x78\xfb\x0d\x56\x51\x93\x8a\xed\x6c\xa5\x3d\x6a\x69"
+ "\xef\xa9\x9e\x8d\xb9\x1a\xec\x77\x2d\xc2\xb5\x1a\x6e\x82\xdb\xb1"
+ "\xdc\x05\x6c\xc7\x3e\xbc\x27\xf8\xb7\x89\x8f\x08\xdf\x22\xfa\xf5"
+ "\x36\xdf\x67\x08\x69\x65\xdb\x7b\x3d\xab\x74\x57\xd4\x1c\xa7\xbd"
+ "\xe9\xf8\x9e\xdd\xf8\x8c\x74\x69\x45\xd8\x9a\x9e\xd2\x5c\x0d\xc6"
+ "\x52\x9a\xc6\x00\xce\x26\x6a\x13\xb5\x83\xe2\xb9\xcf\xd0\x7b\xf2"
+ "\xf7\xe5\xc1\x58\x0f\x68\x3e\xeb\x00\xa8\xdf\xc3\x9a\xf0\xaa\xc7"
+ "\xab\xee\x53\xcc\xfb\x04\xaf\x56\x4c\x3f\x8a\xbf\x9f\xe2\xef\x27"
+ "\x1d\xfc\xfd\x5b\x32\xb5\x7b\x7d\x09\xeb\x1a\x5f\x07\xb7\x11\x7e"
+ "\x94\xad\xa7\x4f\x4a\x4d\x4e\x6a\x3b\xed\x03\xc9\x62\x7f\x5c\x10"
+ "\xbc\x5f\xde\xee\x76\xc0\x7c\xfc\xed\x16\xbf\xea\xeb\xb5\x34\xbc"
+ "\x72\xe5\xfb\x7a\x84\x69\x91\xef\x0f\xe2\xf5\xde\xe5\xaf\x50\x7c"
+ "\x91\xae\x5a\xe3\x95\xc3\x5e\xc9\xf5\x76\xc1\x95\xc1\xfd\xc4\x01"
+ "\x52\x1d\x46\x96\x75\xe6\xe0\xf4\xba\x2c\x91\xb6\x37\x49\x3c\xef"
+ "\x35\xc8\xbf\x33\xf0\x42\x3a\x35\x20\xfe\x86\x72\x91\xd6\x50\x8b"
+ "\xbf\x27\xf0\xea\x0a\xae\xff\x6d\x2c\xff\x76\x09\xf1\xb3\x8f\xce"
+ "\x3f\x40\x5e\x3a\xa4\x1f\xa7\x11\x8f\x76\x09\xd9\xd2\xf8\x19\x4f"
+ "\x33\xa1\x6c\xd5\x07\xe4\xe7\xb5\xdb\x83\xe5\xe7\x35\x7d\x88\xfc"
+ "\xd4\x90\x2d\x42\x7d\x29\x69\x14\xf2\xf2\x5e\xcf\x4b\x05\xf8\xfc"
+ "\x5a\x12\xe2\x79\xcf\xb0\x88\xe3\xe0\xfe\xde\xae\x33\x18\xf7\x15"
+ "\x82\x96\xec\x4b\xb7\xf4\xda\x32\x92\x59\xaa\x5b\xae\x57\xb4\x05"
+ "\xdb\x87\x69\x4d\xd4\xbe\x75\x88\x17\x9f\xf7\x21\x5c\x93\x1d\xbe"
+ "\x51\xda\xc6\xcb\x54\x3c\x8f\xf2\x28\xb7\x97\x70\x52\x39\x16\xe8"
+ "\x97\x89\xca\x88\xba\x6b\x6f\xc4\x74\x8a\x13\xa1\xf4\x6f\x10\x45"
+ "\x6b\x95\x49\x26\xe9\xd7\xee\x35\xa1\x2e\x65\x81\xdf\x9d\x07\x18"
+ "\xea\x9b\x50\xdf\x62\x4e\x4a\xaf\x79\xc7\x95\x80\x89\xf0\x91\x4d"
+ "\xc7\x7e\xd8\x1a\x49\x17\x05\x2e\xf9\xfc\xdf\x1f\x9b\x3e\x35\x03"
+ "\xaf\xa7\x81\xda\x83\xf9\xaa\x7a\x6b\x29\x0e\xdc\xb5\x59\xf4\x15"
+ "\xeb\xda\x87\xe5\x0f\x52\xdf\x89\x9e\x98\x7f\x18\xf1\xe4\x51\x1e"
+ "\xdf\x4b\x5b\xf4\x67\x1f\xed\xb7\x4a\xf4\x20\x78\x3a\xd3\x44\xec"
+ "\xbf\x57\xb3\x85\xd3\x0d\xcb\x13\x3f\x18\xd6\x41\x38\x4a\xbd\xcc"
+ "\xcb\xd0\x1e\xbd\xb3\xd9\x83\xe3\xfa\x4f\xfe\x18\xcc\x9f\xda\x83"
+ "\x6a\xfe\x60\xb9\x83\x58\xbe\x85\x61\x1f\xc9\x9e\x60\x9d\x89\x74"
+ "\x8e\x02\xa6\xd5\xf8\x2b\x10\xc7\x06\x0f\x9f\x1b\x41\x3c\x1f\x62"
+ "\x5b\x6a\x08\x0f\xb6\xa7\x45\xc6\xe5\xfd\xb0\x24\x98\xd7\x32\xbe"
+ "\x7d\xc4\x73\xae\xcf\x9b\x79\x9f\xd0\x76\xfd\xe4\xc7\x0d\x22\xef"
+ "\x30\xc2\x1c\x66\x7d\x59\x40\xfb\x97\x8a\xb1\x84\xe7\x1d\x2a\xfd"
+ "\x96\xf3\xb7\x45\xd8\xb5\x9f\xfc\x66\xfd\x16\xd6\x15\x68\xf7\x4f"
+ "\x0a\x95\x3d\x60\xe5\x76\x1f\xa2\xfa\xd8\xc6\x85\x7c\x5c\xa5\x3a"
+ "\xa8\xbc\x8c\x6f\x0a\xe1\x53\x68\x35\x0e\xdb\x21\xe8\x55\x6b\xc1"
+ "\xf4\x7d\x24\x8b\x9c\x6e\x68\x47\x7b\x4a\x49\x16\x7f\xb2\x1a\xcb"
+ "\xbf\x57\x4d\xcf\x1b\xf9\x33\x70\x1b\xdb\x9f\x5f\x7b\x88\xf2\xed"
+ "\x18\x67\xef\x5a\x85\xb2\xe4\x07\xb8\x2d\x09\x4c\x2e\x2b\xef\xdb"
+ "\x01\xd7\x4b\x53\x34\xcd\x5e\x00\x6a\x27\xd2\xe8\xb0\xbb\x62\x4f"
+ "\x12\xda\xfe\x5c\x6a\x2b\xda\xeb\x43\xec\x9d\x3c\xa0\x36\xa3\x3d"
+ "\x93\xdb\xb7\xe7\x15\x99\xf7\x87\xa8\x8f\x44\xcf\x71\xc2\xf6\x61"
+ "\x5e\xdd\x68\x6a\x7b\xa0\xdf\x7b\xf2\xd5\x34\xe6\xfd\x46\x3e\x10"
+ "\xbf\x88\x2f\x2a\x9c\x24\xfb\x35\x88\xeb\x80\x78\x16\xb2\x41\xb4"
+ "\xae\xb9\x9e\x1d\x25\xf8\x00\xec\xeb\x7c\x7f\xbb\xad\x58\xf7\x78"
+ "\x33\x8e\xe9\xa8\x17\xb4\x8f\x2f\xe2\x3d\x40\xe7\xd5\x20\x8e\xc3"
+ "\x44\x53\x84\x3b\x4b\xf2\x88\xcf\x47\xe5\x3a\xe8\x5c\x87\x31\x78"
+ "\x65\x04\xf4\xff\xf5\xbf\x04\xcb\xd7\xeb\xa1\xfa\x4f\xfc\xae\xf1"
+ "\x97\x66\x01\x97\x87\x22\x30\x9c\x93\x5e\xdf\x24\x8f\x1d\x32\xaf"
+ "\x5f\x3f\xd6\x8c\xfa\xa2\xc2\x91\x1b\xc2\xeb\xc3\x5c\x1e\x37\xce"
+ "\xa0\xf3\x7e\x35\x58\xf6\xb0\x8c\x87\xf7\x99\xcb\x93\x95\xcb\xc0"
+ "\x51\xb6\x11\xfb\xd9\x2f\x07\x7b\x0e\xca\x7c\x3e\x1a\x42\x13\xb9"
+ "\xed\xbb\xbd\x74\xde\x02\xd9\x24\xf4\x31\x1f\x71\xf7\x05\xec\x12"
+ "\xf1\xde\xcf\x79\xff\x7a\x5e\xa3\x18\x6f\x65\xbb\xf5\xba\xc8\xbf"
+ "\x3e\x48\x86\xa9\x2d\x55\x5c\x7e\xa9\x2d\xa5\x0b\xa9\x2d\x87\x79"
+ "\x3b\x4a\x0d\x70\x4e\xaa\xe3\x36\x0d\xcb\xd6\xc8\xfa\x2a\xe3\xda"
+ "\x53\x40\xb8\x5e\x46\x5b\x45\x6d\x72\x48\xbb\x9d\xdc\xfe\x3d\xce"
+ "\xe5\x60\x99\xdc\xf6\x56\x8f\x95\xca\xbe\x96\xf7\xad\xc4\xcb\xb6"
+ "\x22\xdc\x51\x8f\xd8\x93\x39\x16\xcb\xef\x37\x3c\x47\xf0\xf5\x2d"
+ "\x64\xa3\x0d\xcf\xf0\xfb\x5f\x19\xe6\xa1\xac\x9e\x01\x2d\xe2\xd3"
+ "\x91\x8c\x2a\x72\xd1\x2d\xd5\xef\x25\x7f\x1d\x69\x7d\x00\x7d\xa4"
+ "\xfd\x44\x6f\x92\x65\xf4\x91\xd2\xdc\x15\x75\x47\x15\xb9\xc5\x7a"
+ "\xea\x89\xf6\x82\x3f\x6f\x0c\x43\x39\x3e\x1c\x90\xad\x37\x86\xc9"
+ "\x74\xdc\x8f\x74\xd4\x61\x7d\x3f\x96\xfb\xb5\x1f\xe1\xd1\x17\xab"
+ "\xdf\x26\xb7\xbd\x4e\x86\x1f\xab\xf0\x41\xd6\xd5\xa3\xd5\x64\x7f"
+ "\x39\x0f\xde\x68\x91\xcb\xee\x93\xeb\xfa\x58\x81\x25\x1f\x51\xec"
+ "\xb5\xfe\xc6\xc7\x64\x07\xc7\x23\xef\xb9\xed\xe3\x67\x39\x89\x34"
+ "\xd2\x1d\x51\x47\xfd\x1a\x2e\x87\xe8\xf7\x04\xe4\xe8\x8d\xfa\x10"
+ "\xfb\x44\xb6\xb8\xa6\x0d\x71\x90\x3d\x25\x59\x22\x9b\x4a\xf1\x02"
+ "\xe2\x2b\x96\xf5\x47\x6e\xf3\x9b\x31\xc1\xb2\x52\x3f\x1f\x65\x65"
+ "\xac\x0a\xb7\x27\xdc\x38\xd7\x28\x6c\x60\xbd\x28\xf3\xe6\x74\xb9"
+ "\x6f\x07\x44\xdf\xe4\x67\xa2\xdb\x56\x4e\xb7\x78\x15\x1d\x91\x6e"
+ "\x6f\x6d\x92\xe1\x0f\x93\x2d\x0f\xe8\xeb\x9b\xbf\x53\x74\x79\xa0"
+ "\xbd\x78\x6b\x25\xe9\x43\xa0\x5d\x6f\xd6\x84\xd8\x8b\xc3\xe1\xed"
+ "\xc5\x9b\xf9\x72\x7f\x9b\x42\x74\x63\x9f\xec\xef\x6e\x51\xf8\xd0"
+ "\xe6\xea\x95\xf7\x15\xaf\xd9\x42\xf6\x93\xea\x56\x8f\x41\x0d\x82"
+ "\xae\xb2\x2e\xbf\x35\x77\x20\x1f\xde\x4a\x55\xeb\x33\xf1\x9a\x6c"
+ "\x02\xe1\x20\x9e\x72\xbf\x12\xd3\x04\x5f\xdf\xf4\x92\x6d\x50\xdb"
+ "\x68\x84\xad\xf5\x33\xd2\x97\xb7\x8c\xc1\xba\xf8\x66\xad\xac\x8b"
+ "\x4a\xdd\xdf\x22\x8f\x4c\xaa\x7a\xeb\x43\xea\x25\xde\xb4\x10\x1d"
+ "\x44\x1f\xdf\x3a\xa5\x8c\x69\x04\x8f\x65\x2d\x58\xe6\x78\xc8\xf8"
+ "\x58\x43\xed\xc3\xba\xb2\xb8\xcd\xda\xc3\x6d\x85\xc5\x2d\xda\xf3"
+ "\x79\xa3\x3c\x4e\x60\x9a\x49\x4e\x6b\x92\xc7\x12\x45\x6e\xa6\x06"
+ "\xb7\xa9\xde\x14\xde\x3f\x7a\x33\x4b\xf1\x8f\x38\x2e\x6e\x8b\xea"
+ "\xd3\xe4\xfe\x51\xda\x58\x91\xf6\x86\x97\xd2\xaa\x05\x1d\x6a\x19"
+ "\x1f\xaf\xde\x68\x92\xc7\x2b\xd2\x2f\x09\x9f\xf5\xa4\x63\xf4\x8c"
+ "\x38\xca\x09\xbf\xbd\xac\x97\xc6\xb4\x3a\x87\x54\x77\x80\xec\x01"
+ "\xd9\x0b\xc3\x72\x61\x37\x0c\xb3\xf8\xef\x9f\xc9\xee\x90\x1f\x42"
+ "\xf9\x08\x57\x4f\xb6\x08\xd3\xbf\x32\x3c\x81\x7e\xc1\xd7\x3a\xc4"
+ "\x5b\x7f\x54\x2e\xeb\xe3\xbe\xc2\xd7\x59\x51\x4a\x9a\x52\x0e\xed"
+ "\xd6\xaf\xa8\x1c\x95\x57\xec\x17\xd9\x2e\x2f\xd9\x26\x5e\xdf\xde"
+ "\x47\x65\x19\xe7\x71\x83\xe2\x17\xf5\x49\x2a\x58\xda\xdb\x99\xdb"
+ "\xb4\xbd\x95\xc2\x9e\xed\xdd\x42\x65\x39\xff\xd0\x56\x6e\xfd\x96"
+ "\x7d\xd9\x58\x04\xda\x86\x6f\xc8\x2e\xd6\x94\x88\x76\xee\x6d\x17"
+ "\xfd\xd8\xfb\x36\xef\x87\xb0\xa9\x35\xa2\x2d\x35\x25\x0d\xbd\x3c"
+ "\xef\x7d\xea\x0b\xe5\xed\x52\xe5\xb1\x3e\x23\xe5\xfd\x1b\x6f\x57"
+ "\x48\x39\x7f\x5f\xe1\x00\xf8\x46\x71\x66\x96\xae\x61\x8f\x62\x7b"
+ "\x1b\xf2\x44\x3b\x1b\xae\x53\xec\x2e\xd2\x65\x1f\xd9\x5e\x9e\xb7"
+ "\x5c\x86\x99\x25\xff\x72\xfb\xde\x30\x55\xd0\x35\x59\x92\xe9\x7d"
+ "\x40\xf4\xa3\x61\x3e\x8f\xb3\xbf\xce\x43\xda\x36\x64\x28\xb4\x55"
+ "\xdf\x93\xfe\x60\xfd\xc4\x63\x61\x57\x4a\x78\x0c\x5b\x4f\x30\xd4"
+ "\x26\x31\x46\xec\x4d\x0b\xf5\xa9\x3b\xa5\xa6\x3f\xd2\xb8\x24\x7c"
+ "\xd5\xa6\xdf\xc8\xf3\x2f\x60\x2b\xfa\x29\x8e\x0b\x0d\x5e\xc5\xc6"
+ "\x30\x77\x16\xc6\xfc\x27\xa9\x8d\xfc\x5c\x0b\xda\x0f\x58\x0d\x43"
+ "\xf6\xe9\xd7\xbd\x0e\x19\x67\x43\xbb\x62\x37\xc8\x96\xb4\xb9\x4e"
+ "\xca\x3e\x5d\x63\x79\x83\x6c\x4b\xce\x49\x8d\x3b\x82\xfd\xb0\xc6"
+ "\x1d\xc1\x36\xa3\x69\x6f\xa8\xcd\x40\xbf\x79\xbb\xbb\xa2\x71\x61"
+ "\x90\x1f\x80\x69\x97\xb6\x1d\x8d\x26\xd2\x51\x3a\x63\x81\xdb\x27"
+ "\x3e\xa7\xd4\xf8\x37\xa5\xcd\x64\x37\x7b\x5e\x52\xe6\x2f\x9a\xaa"
+ "\xc8\x57\x0b\xa9\xef\x68\x90\xed\xa4\xfa\x14\x7c\x5a\xa0\x3d\xfa"
+ "\x91\x0e\x34\xdf\xd2\x58\x2f\xdb\xf9\xa6\x20\x5b\x29\x8f\x61\x64"
+ "\x27\x83\xc7\xaa\x9a\x2d\xc1\x63\x55\xd3\xa6\x81\x36\xb2\x29\xeb"
+ "\xca\xc7\xaa\x26\x03\xd9\x2d\xc5\x46\x06\xdb\x82\xa6\x19\x0d\x41"
+ "\xbe\x6c\xe3\xe7\x8a\x2f\x1b\xb0\xa3\x8d\x05\x64\xa3\xb0\xfe\xc3"
+ "\x72\xdd\xe8\x7b\x54\xb7\x2a\x75\xa3\x1c\x79\xdb\x0c\x28\x9b\x15"
+ "\x35\x26\xbc\xdf\x2f\xfb\x80\x5c\x37\x7b\xf9\x3e\xe9\x7b\x9d\x28"
+ "\x7f\xb1\x24\x67\xb6\xb5\xdf\x40\x47\x60\xac\x68\xe9\x59\xa7\xd0"
+ "\xf7\xed\xb9\x6a\xbf\x70\xef\x1e\x56\xee\xae\x78\x7b\x8c\xba\x8f"
+ "\x55\x98\xb6\x4b\x9e\x43\xe0\xb4\xe5\xb8\xde\xe6\xf1\x82\xba\x6f"
+ "\xa2\x1f\x6f\xa7\x51\x3f\x28\x26\xc2\xfa\x5d\xe4\xf7\xa0\xcf\x87"
+ "\xf7\x75\x96\xc6\x7e\x99\xdf\x7d\xf4\x5b\xab\xda\xbf\xaa\xf9\x9c"
+ "\x6c\xa5\x1c\x7b\xb6\xa2\xbf\x53\xa3\x9e\x8b\x99\x39\x39\xc7\x60"
+ "\x2e\x5a\xb9\xb6\x78\xf9\x3d\x86\x95\x6b\x57\x16\xaf\x5c\xb2\x7a"
+ "\xe5\xe6\x25\xc5\x2b\xd7\xad\x1d\xb3\x66\xc9\x8a\x95\x4b\x0d\x1b"
+ "\x97\xac\x37\x98\x2c\xb7\x5b\x62\x21\x00\xfa\x90\x61\xc9\xfa\xf5"
+ "\x2f\xae\x59\x56\x60\x58\xbb\x72\xe9\xd8\xa2\x65\xeb\x97\x15\x1b"
+ "\x96\x14\xad\x7b\x71\x6d\x81\xe1\xf6\x82\x71\xb7\x9b\xee\x2f\x88"
+ "\x55\xcf\xa1\x8d\xd2\x43\xb7\xff\xe2\x57\x5d\xbb\x2e\x82\x2e\x51"
+ "\x63\x2e\x4a\xb4\xac\x5c\x2b\xe6\xec\x7e\xba\x77\x7c\x2d\x98\xe9"
+ "\x1c\x45\x3a\x2f\x8c\x55\xbc\x7d\x10\x7f\xb5\x04\x87\xfd\x34\xd0"
+ "\x39\x8a\xd8\xf6\x14\x77\xc5\x4f\xf3\x1d\xd2\xcf\xb2\xf8\x59\x60"
+ "\x98\x8e\x7d\x4b\x61\x17\x3f\xe9\x42\x9f\xcd\x4c\x6b\x82\x1b\x2f"
+ "\x42\x52\xcd\x06\xd0\xe2\x15\x87\x97\x9e\xce\x59\xc4\x32\xb5\x0e"
+ "\xe9\x1d\xf9\x2c\xbd\x77\xd2\x9c\x31\x1f\x1a\x59\xf9\x87\x46\xc1"
+ "\x97\x77\x26\x28\xf3\xbc\xd9\xaf\x40\x36\xc9\xe7\x49\xe9\x1d\xfe"
+ "\x8e\xf4\x65\x94\x65\x9a\x2f\xed\xf9\xdf\x8f\x65\xa2\x3f\x78\xc2"
+ "\x76\x13\xcf\x9b\xe0\x92\x20\x0e\xdb\xa5\x6d\x2e\x31\xc1\x6b\x58"
+ "\xd7\xfa\x64\xc6\xb0\x0e\x8f\x32\x9f\x86\x7d\xd0\x63\x5f\xda\xe5"
+ "\x7e\xfc\xbf\xbc\x1f\x7b\x58\x6a\xed\x70\x6c\xdf\x6e\x6a\xcf\x3b"
+ "\xa9\x4a\x1f\xb0\xdd\xed\x0e\xe9\xa7\xe5\xd8\x4e\x3d\xb5\x2b\xdc"
+ "\x5c\x1f\xcd\x77\x61\x3b\xd7\xf8\x37\x20\xdd\x46\x88\x33\x22\x76"
+ "\x35\x08\xfd\xc3\xfe\xec\x6b\xc4\xfb\xea\x6f\x20\xae\x8a\xce\xf0"
+ "\xb3\xde\xca\x8e\xb9\xbc\x60\x2f\x6c\x87\xc4\x4d\xcc\xc9\xfe\xd7"
+ "\x57\x5d\x72\x9f\xea\xc8\x36\xfc\xcf\xe7\xdb\xb5\xd4\x27\x1c\x2b"
+ "\xe2\x1a\xbf\x89\x38\xb7\xa8\x7d\xed\x7a\xe6\x62\x6f\xa9\x7d\xae"
+ "\x7d\xfc\x6c\x6f\xf2\xb7\x7a\xac\x74\x26\xdc\x3b\x5d\x58\x77\xa6"
+ "\xec\x1b\xbb\x58\xdf\x42\x95\x2f\xf5\x0e\xc9\x99\x2b\x02\x6e\x9d"
+ "\x82\x9b\xce\x06\xa4\x32\x82\xff\xfb\xd6\x60\x19\x67\x00\xff\xbe"
+ "\xac\x50\xfc\x84\x13\xef\x9d\x4a\x3d\x22\x0e\xdf\x47\x3e\x81\x13"
+ "\x65\xd9\x19\xa1\xbe\xd4\xdd\x7b\xd8\xe7\x76\x4c\xdf\xf5\x2d\x68"
+ "\x11\x16\x7d\x14\x8e\x7f\x3f\xd2\x3d\x8e\xf0\xbf\x7c\x3d\xc0\x76"
+ "\x84\xe9\xa9\x78\x27\xd3\xc5\xcf\xe9\xdb\x87\xfa\x5f\x93\x1e\x3a"
+ "\x8f\x2d\xcb\xf3\x43\x21\xf2\x9c\xb9\x9b\x7c\xc2\x5a\xc4\x8f\x32"
+ "\xb4\xeb\x02\x8e\xc3\xf8\x3c\xae\x16\x8c\x54\x0f\xde\x1f\xa7\xf9"
+ "\x10\x77\xc5\xbb\xc9\x4a\x7d\x0c\xe5\xbf\xda\x2f\xe6\x60\x64\xd9"
+ "\x1a\x43\x73\xd7\xa5\x16\xc6\x9a\xd1\xbe\x53\x1b\x49\xc6\xb0\xcc"
+ "\x0c\x45\xa6\x50\xd6\x3f\xe7\x72\x95\x04\x46\x56\xb1\xef\x78\xe3"
+ "\x70\x84\x43\xb9\x6a\x40\x79\x22\xb9\x42\x58\x8b\x22\x53\x28\x6b"
+ "\xc7\x09\x0e\xdb\x10\x7b\x70\x73\xa6\x96\x6c\x64\x87\xf4\xee\x59"
+ "\x92\x31\xf6\xfa\x93\xed\xec\x86\x05\xed\x82\x4f\xef\x9e\xb5\x7b"
+ "\x04\x0f\x02\x74\x7f\xd7\xa6\xa2\xfb\x71\x94\xe3\x58\xa2\xb3\x98"
+ "\xab\x7e\xf7\x2c\xb6\xed\x38\xf7\xc5\xb7\x20\x0f\xf8\x58\xf5\xee"
+ "\x01\x2a\x2f\xd3\xf0\x68\x80\x86\x3f\xd3\x85\xa3\x61\x08\xed\xb4"
+ "\xe2\x9c\xc0\x9f\x25\x91\xae\x60\x99\x0c\xe5\xec\xbf\x70\xbc\xc4"
+ "\x3a\xb4\xda\x5a\xd0\x51\x1d\x2d\x49\x1c\x7e\xb5\x52\xc7\x2e\xa4"
+ "\xb5\xb3\xb4\xf0\x92\xf2\xdc\xd2\x04\x40\x73\xe2\x54\x3e\x35\x89"
+ "\xe8\xfb\xb3\x03\x81\xf2\xcc\x15\x5a\xfe\xf6\xa5\x41\x6d\xe5\x17"
+ "\xb6\xd5\xf6\x9a\x38\xd7\x95\xea\xef\xbe\x54\x7b\x53\x0d\x62\x9c"
+ "\xb4\x8d\x22\xf9\xfe\xf9\xed\xf6\x3a\x00\x4a\x93\x9f\x93\x7a\x70"
+ "\xec\x09\x9d\xdf\x8f\xfc\xbe\xe1\xe7\xcb\x82\xdf\x37\xfc\x3c\x37"
+ "\xd2\xfb\x86\x90\x7a\xdf\xa6\x7a\xfd\x8d\xb9\x1a\x55\xdd\x95\xfe"
+ "\x30\x75\x2b\xe5\xc7\x35\xa9\xe3\x99\x9f\xff\x8d\xda\xd0\x46\xe7"
+ "\x93\xdf\x9c\xab\x61\x88\xa7\x85\x8f\xe1\x3f\x77\x0a\xff\x85\xfc"
+ "\xa2\x9f\x1f\x27\x98\xd0\x7e\xf4\xff\xe9\x92\x3e\xa4\x9f\x6f\xf9"
+ "\x43\xf4\xe3\xa0\xa7\x5f\x43\xbb\x92\x2d\x05\x01\x03\x0b\xf3\x10"
+ "\x07\x30\x92\xc3\x33\xfc\x13\x49\xf2\xb3\x93\x3f\x68\xfb\xe1\xfb"
+ "\xf3\xff\x8e\xbf\x18\xd1\x5e\x8e\xcf\x03\x1a\xb9\x3e\x75\x9f\xa6"
+ "\x5c\xa2\x34\x03\xa5\x48\xb8\xbf\x17\xf0\x2a\xcb\x8d\x06\x18\x95"
+ "\xcc\x81\x19\xf3\x8a\x8c\xfe\x67\xa6\x7e\xa6\x94\xe0\x67\xfc\x8b"
+ "\x5a\xa8\xaa\xe0\xd6\xa8\x02\xbe\xf4\xe8\xf6\x9c\xfe\x24\xa9\x49"
+ "\xaf\xae\x52\x0f\x65\xd1\xfc\x26\x91\xfe\xf1\x20\x3e\x23\xe6\x8f"
+ "\x4a\xef\x07\xb8\xd6\xb5\x4d\x05\xfe\x99\x68\xfe\x6d\xe5\x97\xe8"
+ "\xe3\x60\xff\x46\xa8\xee\x6f\x15\x3f\xb7\x65\x7d\x87\xf8\x2f\xfd"
+ "\x67\x38\x1e\xa3\xdc\x06\xc4\xe3\xb6\xe3\xe1\x40\x03\xf4\x4f\x35"
+ "\x29\x49\x6a\x09\x0d\xe4\xdf\x79\x20\xf8\x79\x74\x61\xf0\xf3\xdd"
+ "\x87\xbf\x8b\xa6\xdb\xe8\x9f\x52\xc7\x30\x80\xbb\xb6\xf7\x27\x26"
+ "\x86\xa8\x4c\x62\x4d\x88\x0a\x05\xfe\xe4\xd6\x44\x01\x8c\x89\x53"
+ "\x25\x6b\xc3\x43\xff\xe7\xfc\xdd\xb4\x4d\x56\x88\x5b\x9d\xfa\x01"
+ "\x99\x93\x42\xd2\xe8\x79\x88\x41\x4e\x9b\xf0\xe1\x00\x78\x9e\x66"
+ "\x50\x3d\x6b\x32\xf1\x9f\x26\x94\xff\x13\xdf\x45\x5b\x7f\xf8\xfb"
+ "\xff\xe1\x9f\x86\xf4\xe3\x87\xbf\xff\xa4\x3f\x26\x46\x71\xb4\x44"
+ "\xfc\x87\xfe\x63\xfd\x86\x92\xc9\x19\x4c\x4e\x60\xf2\xcd\x77\x32"
+ "\x8e\xff\xf0\xf7\xc3\xdf\x0f\x7f\x3f\xfc\xfd\xf0\xf7\xc3\xdf\x0f"
+ "\x7f\xdf\x83\x3f\x0d\x8f\x23\x98\xfc\xd7\x7f\xdf\x9f\x4f\x61\xd0"
+ "\xca\x24\x26\x69\x80\xa9\x32\xca\xee\x03\x8d\x0e\x86\x68\xbf\x3b"
+ "\x2f\xcf\xd0\xdf\xa0\x2b\x2c\x40\xb1\x24\xcd\x33\xdf\x8b\xd7\xcd"
+ "\xaa\xf4\xd4\xef\xaa\x45\xdf\xd9\x9f\x06\x89\x18\x85\xf1\x61\x34"
+ "\x0c\x81\xa1\xa0\x83\x18\x88\x85\x6b\x20\x0e\xe2\x21\x01\xe3\x4e"
+ "\x3d\x0c\x83\xe1\x70\x2d\x24\xc1\x75\x70\x3d\xdc\x00\xc9\x70\x23"
+ "\xdc\x84\x3d\x4a\x81\x5b\x30\xc6\xbf\x15\x09\x33\x12\x46\xc1\x6d"
+ "\xe1\xfb\x55\x06\x99\xc9\xf8\x0f\xfe\x9f\x03\x99\xfc\x39\xff\x87"
+ "\xf4\xff\xab\xe9\x36\x39\xfd\xb8\x9c\xee\xf8\x21\xfd\xff\x6a\xba"
+ "\xe1\xbf\xf8\x77\xe4\x7f\xe9\xaf\x06\xcd\xb7\xb0\xe0\x9a\xb0\x76"
+ "\x33\x34\x55\x23\xff\xf5\x3f\xc3\x65\xca\x0f\xc0\x17\x5c\x3e\xf4"
+ "\x2f\x13\xaf\x34\x71\x5b\x0a\x20\xcf\xf9\x32\xf5\x9f\xf7\x5c\xd0"
+ "\x5f\x24\x44\xfd\x7f\xd6\x85\x78\x15\xe2\x55\x8c\xd7\x46\xbc\x5e"
+ "\xc6\xab\x4a\x41\x2b\x60\x74\x78\xfd\x2d\x0f\xe0\x24\xfe\xfe\x47"
+ "\x3a\xfe\xd6\xe3\xef\xe7\x00\x1d\x58\xee\xf4\x7e\x80\x4e\x04\xf8"
+ "\x4a\x35\x37\x7a\x31\x3f\xd0\xda\x9e\xa3\xe2\xde\x80\x97\x87\xbe"
+ "\xa3\x05\x87\x46\xeb\xc0\x1f\xdb\xd4\xdc\x2c\xc3\x84\x71\x69\xe3"
+ "\xee\xbb\xcf\x30\x76\xac\xe1\x1e\xd3\x84\x7b\xc6\x9b\xd2\xc6\xdf"
+ "\x33\xc1\x60\x9a\xf0\x50\x5a\xfa\x43\xf7\xa6\x19\xd6\x6c\x2a\x5a"
+ "\x39\xc1\xb4\x62\x99\x61\xf9\xca\xa2\x35\x1b\x97\x14\x2d\xbb\x6c"
+ "\x6f\xae\xea\x8f\x9a\x76\x8b\x1f\x38\x37\x82\x29\x3f\x09\xa4\x83"
+ "\x99\x20\x7d\x68\x82\x81\xac\x32\xca\x57\xf0\x9f\x66\x6d\x39\x68"
+ "\x56\x55\x82\x66\xb9\x07\x34\x4b\xb4\xa0\x99\x7f\x10\x34\x95\x98"
+ "\xb6\xa3\x18\x34\xdb\x5b\x41\xb3\xf5\x3d\xd0\x6c\xcc\x19\x98\xf6"
+ "\x93\x02\x91\x76\xb0\x03\x34\x07\x92\x41\xf3\xae\x13\x34\x0d\x59"
+ "\x22\xed\xff\x41\x98\xff\xd5\xf5\x9f\xd3\xf9\xab\xfe\xbb\x52\x3f"
+ "\x62\xc0\x9f\x83\xcb\x13\x8d\xda\xfe\xfa\x30\x93\xa5\x3f\xfc\xfd"
+ "\xf0\xf7\xc3\xdf\x0f\x7f\x3f\xfc\xfd\xf0\xf7\xc3\xdf\x7f\xf3\x3f"
+ "\xa7\x06\xd2\xbe\x91\xb4\xf0\x51\x0d\x80\xdb\xaa\x4b\x71\x68\x32"
+ "\x2a\x69\x6d\x09\xd0\x37\x54\xa0\xe3\xfb\x90\x88\x4b\x8b\x3f\xd1"
+ "\x38\xf0\x0f\xc1\x6b\xa8\x4e\xbd\x46\x85\xd6\x20\x35\x27\x9b\x20"
+ "\x2a\x19\xc4\x7a\x29\x2b\x3b\x2e\xbe\x01\xbe\x07\xba\x41\xc7\xbf"
+ "\x9f\xa5\xef\x46\x11\xbf\xc5\x01\xff\x23\x59\x59\x5f\xa5\xc0\xd1"
+ "\xfa\x2a\x5a\x8f\x85\xb0\xfc\xfb\x81\x08\xeb\x69\xf4\xec\xf5\x64"
+ "\x69\xf2\x5e\x00\xfa\xfe\xf4\xb5\x3d\xcc\xd9\x52\x02\xd0\xbc\x4f"
+ "\x7c\x87\x4a\x6b\x6d\x10\x7f\xbb\x03\x76\x24\x89\xf5\x55\xcc\xf5"
+ "\x32\xa6\x63\x5a\xb7\x03\x2a\xb4\x72\x9d\xdd\x4a\xba\x7d\xfb\x45"
+ "\x68\x31\xf0\xef\x6c\x9c\x2d\x06\x1f\x4c\x19\x49\xfd\x8f\x49\xc6"
+ "\xf2\x95\x91\xd6\xd6\x28\xeb\xc8\xa8\x6e\x19\x3e\x2b\xa4\x3e\xec"
+ "\x63\xcc\x42\xa5\xbe\x08\x38\xe2\xa8\xac\x82\x07\xdb\xde\x8d\x65"
+ "\x6a\x14\x3c\xd8\x1e\xa5\x8d\xce\x29\x5b\x78\x1d\x07\xc2\xb5\xc9"
+ "\xf0\x71\x46\xf4\xb2\xfb\xc7\x77\x64\x7c\xbe\x3c\xd5\x70\xdd\x84"
+ "\xa9\xcb\x52\xef\x64\xa6\xc4\x31\x3b\x4d\xd7\x64\xc6\x64\x26\x8c"
+ "\x9f\x6d\x92\xf4\xd2\x28\xc9\x34\x5c\x2f\xdd\xf1\x1c\xfd\x7b\x7c"
+ "\x84\x91\xff\x1a\xb4\x19\xdb\x0b\xee\x37\x0c\x9d\xf4\xa3\x57\x37"
+ "\x64\xfe\xf3\xcf\x1f\xcf\x9c\x36\x6f\xfd\xe8\x8f\x4c\xd2\xb5\x7f"
+ "\xda\xf9\xbe\xf1\x1b\x82\x18\x39\x8a\xfe\x5d\xd8\x1c\x95\x34\xda"
+ "\x4a\x58\x8e\xdf\x68\xf8\x88\x52\xee\xd2\x66\x14\x17\xdc\x37\x7e"
+ "\x1f\xd5\x38\x77\xe9\x58\x2b\x95\x79\x7c\xa6\x28\x23\x20\xc6\x1f"
+ "\x52\xe7\x8d\xfb\x2d\x95\x36\xf0\x36\x80\x56\xe0\xea\xc7\x7d\x83"
+ "\x68\xa1\x48\x1d\x75\xcc\x74\x8b\x5c\xf7\x4f\xe9\xdf\x67\xde\x19"
+ "\x27\x21\x86\xe1\x63\x1f\xa3\xdc\xf1\x6e\x93\xdb\xd0\x92\xa1\x5d"
+ "\x91\x6a\x1c\x3a\xe1\xe7\x78\x97\xba\x22\x55\x2f\xe1\xfd\x8f\xc4"
+ "\x3d\xd1\xa0\xe0\x01\x01\xa1\x97\x6e\x4f\xca\x28\x28\xb8\xff\x0b"
+ "\x57\xc1\xfd\x7a\x29\x73\x5f\x41\x46\xe6\xf5\x95\xab\xef\x4e\xcd"
+ "\x48\x2d\xb8\x4f\x2f\xf1\xdf\x87\x32\x6f\xaf\x78\x46\x2f\xdd\xf9"
+ "\xa1\x69\x98\x5e\xf3\x87\x26\x0d\x7c\x2c\xcd\x39\xf0\x71\xd4\x9f"
+ "\xff\x7c\x04\xee\x5a\x73\x44\x73\xd7\x8c\x23\x92\x66\xd8\x91\xb8"
+ "\xf9\xf0\x07\xfd\x50\xf8\x43\x32\x5e\x86\x69\xd0\xaa\x29\xcd\x69"
+ "\x95\x36\xe6\xb7\x46\x95\xb6\xb5\x6a\x9f\x86\xd6\xe8\xc5\xc3\x5a"
+ "\x87\x4c\x7b\xaa\x75\xe8\xd3\x5f\xb6\xea\xee\x84\xd6\x18\x80\xd6"
+ "\x91\x20\xb5\x8e\x82\xa4\xd6\x7b\x86\xbd\xda\x3a\x6d\x84\x64\xbb"
+ "\xb6\xe7\x51\xdb\x4d\xda\xc7\x6d\xa9\x7a\xb0\xdd\x1e\x0b\xb6\x3b"
+ "\xe2\xe2\x6c\x77\xe2\x35\x1a\x9a\x6c\x26\x7c\xce\x80\x14\x5b\xf4"
+ "\xe6\x21\x00\xa2\x2d\x47\x0c\x00\x47\x46\xc2\xa4\x23\xa3\xf0\xf7"
+ "\x36\xbc\x52\xf1\xba\x1d\xaf\x3b\xf1\xc2\x38\xe5\x08\xed\xb7\x03"
+ "\xc6\x21\x19\xff\xeb\xc3\x25\x4b\xd2\x96\xdc\x97\x3b\x39\x2a\x6a"
+ "\x59\x2a\x5c\x83\x54\xd3\x66\xa4\x8e\x8c\x4e\x8f\x5e\x96\xfa\x85"
+ "\x2b\x13\xff\xd5\x4b\xcf\xfe\x6b\xd4\x90\xf1\xee\x74\x77\xfe\x3f"
+ "\x7f\xe1\x83\x58\xa4\x3f\x84\xca\x70\x8f\x15\x34\x2e\x6c\xa3\xcb"
+ "\xda\xf3\xa8\xdb\x1a\xa7\x77\x40\x4c\xa1\x22\xc7\x22\xef\x23\xbd"
+ "\xcb\x5a\x86\xf2\x17\x37\x26\x7c\xde\x36\xca\xcb\xba\x44\xb9\x82"
+ "\xf0\x79\x24\xd3\x71\x65\x4a\x5e\x8f\xd4\x9c\x83\xcf\x28\xff\xba"
+ "\xf4\x60\x58\x5b\x94\xcb\xaa\xd9\x86\x79\x07\x06\xe2\xb1\x21\x9e"
+ "\x29\x15\x98\xd7\x1a\x26\xef\x09\x97\x75\x36\xd5\xd1\x11\x52\x87"
+ "\x4b\xa9\x83\xbe\xef\x6e\x40\xfd\x22\xbb\xe3\xb7\xc6\x1c\xa6\xb2"
+ "\x76\x8f\x13\xf6\xf9\xbb\x34\x5a\xcb\x51\x20\x3c\x6e\x6b\x7c\xaa"
+ "\x52\x9e\xe0\x68\x7f\x02\xfa\x2e\x8f\xaf\xff\x84\xf8\xb9\xb4\xfe"
+ "\xb3\x1a\x71\x18\x36\x68\x6e\x38\x09\x71\x3e\x2a\xe3\x80\xf8\x42"
+ "\x97\xf4\x29\xd6\x1d\x9f\xaf\xd8\x39\x4c\xcb\x00\xb1\xce\xdc\x85"
+ "\x7d\x2f\xc3\xbc\x92\x81\x6d\xfe\x74\xb8\xa0\x4b\x7c\x9d\x92\x77"
+ "\xa9\x35\x85\xa2\x0c\x63\x2e\xeb\xa7\x7e\x2c\x73\x74\x20\x3e\x56"
+ "\xe6\xb2\x4a\xaf\x62\x5e\x57\x98\xbc\x6d\xa2\xae\x04\x6d\x98\x3c"
+ "\x2b\xe6\x49\x98\x67\x88\x90\x17\x85\x79\x19\xe1\xf2\x5a\xea\x39"
+ "\xce\xbc\x7e\x9a\x27\xc4\x67\xe2\x73\xa1\x42\xf3\xcb\xf7\x87\xf8"
+ "\x3d\x01\xe9\x9e\x50\x1f\x8a\x9f\x70\xbb\xa4\x63\x84\xef\xf0\xc0"
+ "\xba\x8f\x6a\x5c\xd6\x2c\x94\x85\x84\xcf\x07\xe6\x7d\x76\x33\xd2"
+ "\x81\xda\xe5\x0c\x93\x97\x82\xfd\x41\x7b\x9d\x18\x17\x06\xe7\x10"
+ "\xcc\x73\x60\x9e\xf1\x32\xfc\xd0\x73\x1b\x4e\xfb\x1f\x8c\x80\xe8"
+ "\x4e\x18\x3e\x91\xfa\x23\xe4\x02\x86\x74\xc2\xb0\x63\x3d\x62\x2d"
+ "\xbc\xd3\xb0\x19\xa2\xf0\xf9\x6d\x66\xb5\x5d\x87\xf9\xdd\x28\x4f"
+ "\x3a\xfb\x45\x2f\x74\x42\x62\x25\xc2\x44\xd1\xb7\xab\x34\x3e\x61"
+ "\x7a\x94\xdd\xe3\xa5\xef\x37\x50\xce\x12\x7f\x83\xbf\x12\x96\xe3"
+ "\xdf\x8a\xce\xa9\x87\x54\x6a\x23\x5f\xbf\x6a\xb5\x69\x68\x3d\x28"
+ "\x8d\x87\x2e\x09\xee\x74\x71\x99\x4d\xc4\xf1\x4f\xd7\x24\xaf\xdd"
+ "\xa5\x36\x68\xb1\xec\x16\x49\xcf\xd7\x82\x3b\x11\x17\xb5\xe1\x29"
+ "\xbf\xd5\x26\xf5\xe3\x91\x6c\xd7\xd0\xba\xde\x1e\xab\x34\xdd\x25"
+ "\x25\x32\x81\x47\x6f\x50\xf0\x10\x1c\xd6\xc5\xd7\xc7\xf7\x58\xb5"
+ "\xbb\x55\x30\x53\xd4\x75\x8d\x77\x41\x14\xb5\xf9\x24\xe8\xeb\xa9"
+ "\x3e\xb9\x8f\x7c\xad\xad\x7d\x83\x17\xec\xe8\x5f\x74\x82\xde\x82"
+ "\x7d\x35\x34\x7b\xe8\x1b\x67\xdb\xb0\xc6\xad\x00\x5c\x2f\x24\x30"
+ "\xc8\x38\xeb\x14\x9c\x84\x43\xd5\xd7\xe1\xa2\x7e\xea\xab\x0e\x64"
+ "\xd8\x16\x75\x1b\x09\x2f\xf6\xeb\x86\x06\x84\x6b\x41\xaf\x45\x86"
+ "\xe9\x52\x60\x54\x3c\x18\x29\xb7\x8f\xe8\x43\x3c\x5b\xa8\xe8\xa7"
+ "\xdb\x3a\x0c\xc7\xff\x6b\xba\x84\xde\x06\xd2\xe5\x36\x24\x8b\x36"
+ "\x68\xb0\x0d\x1a\x9b\xc0\x3f\x2c\x4b\xc1\xef\x00\xbd\x47\xdd\xe6"
+ "\x06\x0e\xab\x8f\x11\x7a\xca\x61\x8b\x03\xb0\x89\x41\xb0\x48\x0b"
+ "\x49\xf0\x00\x24\x07\x0c\x2b\x40\x7a\x44\x21\xcc\x41\xe4\xb7\x41"
+ "\x81\x91\xfb\x9f\x8c\x79\x93\x64\x7c\x2d\x2a\x7c\xc5\x84\x8f\xd6"
+ "\xc3\x0a\xdb\x3b\xcc\x11\xb0\x7d\xd0\x8a\xcf\xce\x81\xf6\x95\xf4"
+ "\x75\xb8\x0e\xe1\x52\x29\xdd\x3c\x0a\xf4\x67\x60\xd8\xa9\x1e\x29"
+ "\xaa\x4b\xd0\x62\x38\xda\xbf\xf8\x7d\x4a\x19\x7c\x4e\x73\x80\xc1"
+ "\x23\xd7\x57\x40\xb4\x09\xd8\x5b\xaa\x73\x78\xae\x52\xa7\x92\xaf"
+ "\xd6\x99\xcc\x98\xf1\xe8\x9f\x64\xfe\x32\x33\x25\x73\x84\xe2\xbb"
+ "\x4c\x6c\x59\x9e\x3a\xde\x35\xb1\xc5\x70\x9f\xe9\xdd\x65\xa9\x63"
+ "\xf8\xd8\x7f\xe7\x49\xd3\x28\x1c\xdd\xff\xc4\xff\xdd\x4d\x29\xa9"
+ "\x3c\x05\xd3\xe9\x7e\x14\xdd\xcb\xfe\x02\xde\xcd\x9d\x13\x35\xf4"
+ "\xf6\x22\xba\x13\x9e\x43\xe6\xf5\x8b\x96\x46\x4d\x91\xef\x13\x44"
+ "\xce\xdd\xdc\xe7\x30\x3e\x46\xf7\x77\x70\x5c\xe3\xf7\x51\xcd\xe3"
+ "\x76\x9a\x1e\x9e\xf7\x3f\xa3\x8e\xbc\xba\x2a\x33\xee\x4e\x2b\xc1"
+ "\x8c\x79\xd2\xf4\x16\xa6\x34\x53\xca\xa8\x9f\xf2\x16\xa8\x4b\x1d"
+ "\xa2\x52\x72\x7e\xca\x98\xa9\xa6\x9f\x2c\x98\x73\xdb\x9f\x4c\xc3"
+ "\xaf\xfd\x68\x61\x33\x95\xbf\x76\x78\x50\x4d\xa3\x02\xad\x7a\x6e"
+ "\xd7\xe8\x57\xee\x7d\x57\x60\x99\x37\x27\xea\x4f\x99\x23\xd6\x15"
+ "\x51\xea\x6d\xdc\x17\x23\x5f\x65\xfc\x05\x53\xf4\xab\xf3\xbe\xf8"
+ "\x97\x79\xef\x1c\x7f\x66\x34\xf6\xf4\xda\xdd\xc7\x9f\x99\xf7\xce"
+ "\x17\xff\x12\xf5\x32\x41\xde\x55\x60\x4a\x32\x44\x4f\x7c\xb1\xe5"
+ "\xa9\xd1\xbc\x55\x37\x54\x26\xd7\xdd\xb8\xef\xa6\x83\x37\xbf\x97"
+ "\xd2\x7a\xcb\xbf\x8e\xf8\xeb\xad\x5f\x19\x5c\x23\x19\xfa\x11\x8f"
+ "\x9a\x46\xf6\xfb\x11\x80\x7e\xc4\x49\xf4\x23\x4a\xd1\x8f\x68\x53"
+ "\xfb\x11\x9f\xc4\x3e\x54\x22\x7c\x09\x01\x2f\xfc\x9f\x31\xff\x8a"
+ "\xfe\xcf\x5a\xf4\x7f\xc6\x1c\x89\x9e\xfb\xf4\x91\xb8\x5c\xe1\xff"
+ "\x0c\x4b\x1c\xc2\x7d\xa0\x1b\xf1\x17\xfd\xa0\x3f\x8c\xc4\x5f\x23"
+ "\x3e\x8f\x1e\x3e\x34\xd8\x27\x9a\x9d\xd0\x1a\xbd\x10\x7d\xa2\x0c"
+ "\xf4\x89\x32\x97\xb4\xea\xa6\x7f\xd8\x1a\x93\x9e\xd9\x1a\xdb\xef"
+ "\x17\x3d\xde\x3a\x25\x79\x7c\xeb\x74\x2d\xb4\x3e\x01\xc2\x37\xda"
+ "\x0e\xa6\x4f\xb4\x49\x9a\xcf\xe2\x40\xfb\x59\x42\x53\xec\x67\x89"
+ "\x36\xdb\x67\x7a\xbc\x86\x41\xd3\x67\xc3\x61\xe8\x47\x8f\x36\xc1"
+ "\x47\x93\x4b\x1d\x47\xb4\x90\x70\x24\x06\x2e\x1c\x19\x86\xbf\xf9"
+ "\x7b\xe0\xc8\x8f\x40\x7b\x24\x56\x7b\x21\xd0\xdf\xa4\x53\x47\x46"
+ "\x7e\x3c\xf1\xc8\xa8\x8c\xff\x7d\xe4\xb6\x29\xb3\x8f\xa4\x7e\xfc"
+ "\xf1\x91\xdb\x1d\x23\xd4\x7e\x13\xf5\x19\xe0\xee\xed\xe4\xc1\x22"
+ "\xbd\xef\x33\x0e\x31\x0d\x79\x65\x19\xf7\x07\xef\x97\xfd\xc2\xfb"
+ "\x33\xa7\xbe\x3a\x6f\xde\xd2\x28\x29\x73\x04\xf7\x2e\x65\x4f\x33"
+ "\xe0\x7d\x06\xfb\x9c\x13\x5b\x02\x3e\x67\xaa\x2b\xe0\x73\x1a\x86"
+ "\x4c\xdc\x10\xe4\x9f\xf5\x61\xda\xe7\x19\xa9\x86\xdb\x4d\xdc\x33"
+ "\x3b\x7e\x63\xa8\xb7\x36\xae\xca\x34\x31\x55\x77\x5f\x3b\xfa\x6c"
+ "\x43\xcb\x7f\xb4\xf4\xe7\x74\xa1\xd7\xf6\xad\x5e\x7a\xf5\xf9\x25"
+ "\xe9\x79\x2f\xdf\x85\x3c\xbf\x96\xbc\xe0\xa1\x3f\x7a\xe5\xf0\x8f"
+ "\x7e\xf4\xea\xe1\x23\xcf\xcc\x19\xfd\x5b\x4c\xfb\x28\xb5\x18\xe5"
+ "\xe7\xff\x14\xfc\x9f\xf1\x17\x32\xa2\x7f\xf4\xf4\xe1\x57\x5f\x5f"
+ "\xb1\xa2\x85\xe4\x85\x78\xab\x8c\x51\x3d\xd6\xe1\xe8\x93\x68\xfe"
+ "\xd9\x6d\xbd\x0e\xfd\x9f\x1b\x5b\x43\xc7\xb2\x1f\xf4\xf2\x07\xbd"
+ "\xfc\x41\x2f\xff\x2b\xf4\xf2\x7a\x10\x7a\x79\x63\x65\x38\xbd\x9c"
+ "\x3e\xeb\xf1\xec\x87\x0c\x2f\x2e\x35\x98\x8b\xd6\xad\x28\x5a\xb2"
+ "\xc6\xb0\x7a\xdd\x92\x82\x65\x05\xb1\xd0\x9f\xb1\x64\x69\xf1\xca"
+ "\x0d\x4b\x8a\x97\x0d\xf8\xd6\x31\x59\xf1\x49\x07\xfa\xd6\x37\x7a"
+ "\x22\xfb\xd6\x37\x25\x85\x8f\x4b\x34\x38\xb6\xdf\x64\x0a\x93\x37"
+ "\x4a\xce\x9b\x11\x26\xef\x31\x39\xaf\x30\x4c\x0c\x18\x2f\x62\x8c"
+ "\x9b\xb6\x87\xcb\xc3\xf4\x7a\xc5\x27\xc1\x38\x4d\x6a\x19\xd5\x0d"
+ "\xe4\x93\x74\xc2\x4d\x1f\x63\x9f\xba\x30\xff\x3d\xc5\x97\x71\xc0"
+ "\x4d\xdb\x15\x1f\x4d\x8e\x43\x8c\x2e\x6b\x26\xf6\xf3\x26\x47\x98"
+ "\x18\xe5\x2e\xb9\x5e\x6f\xc0\x37\x9a\x65\x70\x5b\x6f\x8e\x1b\xe8"
+ "\x1b\x1d\x07\x11\x43\xde\x6c\x0c\x81\x4d\x57\x60\xd1\x9f\xa4\x3d"
+ "\x20\xba\xe9\x1b\xb5\x6e\xb8\xf9\x3d\x66\xbd\xb1\x8e\x7c\x4a\x8a"
+ "\x23\x09\x8f\x88\x25\xdb\x79\x2c\x89\xb1\x62\x07\x96\x2d\x56\xc5"
+ "\x93\x1d\xe8\x1b\x0f\xa5\x78\xb2\x13\x6e\x7e\x9b\x62\xca\x6a\x8e"
+ "\xeb\x0c\xe1\x9a\x49\xb8\x1c\x70\xb3\x8d\xfb\x7d\xa2\xec\x41\xd5"
+ "\xbc\x19\xc6\xb5\x37\xf3\xbd\x9a\x14\xbf\x10\xf3\x8f\x3b\xa4\x2f"
+ "\x67\x28\x7d\x20\x5f\x50\xee\x47\x99\xe0\xc3\xcd\x61\xe2\x9f\xe3"
+ "\xbb\x45\x1c\x98\xd2\x1f\xff\x10\x3e\xbf\xf5\xc6\xdf\x34\x70\x9c"
+ "\x29\xa9\x0a\x4e\xb5\x5c\x2e\x5d\xb7\x76\xf9\xca\x15\x2f\x16\x2d"
+ "\x33\xac\x9f\x31\xc3\xb0\x66\x5d\xc1\xb2\x71\xe3\xc6\xc5\x06\xc9"
+ "\x5f\x9c\xf0\x69\x3f\xcd\x24\x39\x24\xbf\x56\x96\x43\xfa\x46\x4f"
+ "\xf6\x9b\x53\xca\x82\xe3\x8b\x4f\x33\x65\xff\x56\x8f\x30\x26\x19"
+ "\x66\x5f\x10\x0c\xe2\x93\x7d\x64\xf2\x73\x13\x64\x98\xd6\x50\x3c"
+ "\x98\xc7\xe3\x22\xfa\xee\xae\x47\xf4\xaf\x3b\x04\xcf\xa3\x72\xbc"
+ "\x83\x72\x3f\x44\x8e\x13\x6e\xd1\x87\xe0\x79\x34\x10\x6f\x68\x14"
+ "\x98\x34\x75\x6c\x82\xcf\x53\x14\x9e\x04\xfc\xf8\xe6\x2e\x81\x5b"
+ "\xa3\x0f\xf8\xfd\xb7\xac\x0e\x89\xa5\xae\x0f\xe0\x06\xbd\x0c\x53"
+ "\x13\xdc\xc6\xe6\x33\x72\x5f\x75\x2a\x3c\x87\x82\xf1\x34\x7f\x2d"
+ "\xe3\x89\x52\xc1\xb4\x87\xb4\xb1\x6b\x60\x1b\x6d\x09\x02\x77\x13"
+ "\xd6\xef\x90\xfb\x36\x22\xa4\xff\x08\xc3\x71\x27\x21\x4c\x8a\x02"
+ "\x93\xa6\x8e\xa5\x28\x9e\xe3\xdf\x62\xc2\x88\x19\x24\x4f\x78\x0d"
+ "\xc1\x76\x9f\x56\xc5\x74\x43\xe5\x72\xa1\xfd\x8f\xef\xc1\x78\xa1"
+ "\x31\x28\x4e\x1b\x11\xd2\x7f\x8c\x0d\x87\x2b\x34\xd2\x2a\x30\xa1"
+ "\xfd\x77\x88\x36\x0e\x1b\x16\xe8\xff\x88\xf6\x10\x3c\xd7\x93\x4c"
+ "\x11\x2e\x55\x5d\xde\x10\x3c\x27\x65\x3a\xaa\x68\x7d\xab\x21\x84"
+ "\x1f\xff\x21\xb7\x47\x45\xeb\x5b\xa7\x84\xe0\x39\x4f\xf9\xc1\xfd"
+ "\xba\xb5\x30\x04\xcf\xf9\x40\xbf\x50\x8e\x05\x4c\x65\x48\x1c\x2b"
+ "\x31\xeb\x47\xf1\x21\x78\x0e\x2a\x30\x3d\x43\x5e\x6d\x12\xbc\xbd"
+ "\xb5\x45\xb1\x45\x82\xaf\x29\x26\xc2\x8d\xe9\x27\xd4\xb6\x00\xdb"
+ "\xd5\x35\x90\x4e\x06\x08\xa5\x93\xaa\x5d\x72\x2c\x6e\x48\x0d\xe9"
+ "\xdf\x19\x99\x4e\xb1\x2a\x3c\x59\x21\xfd\xfb\x5a\xc6\x13\xad\x82"
+ "\x09\xe1\x7f\x73\xb7\x8c\x47\xab\x82\x09\x95\xff\xb3\x32\x1e\x75"
+ "\x5d\x87\x2e\x4f\x27\x43\x90\xfc\x13\xad\x30\xad\xfb\x32\x73\x50"
+ "\x3a\xf1\xee\x60\x24\x8e\x7f\xfb\xf8\x1c\x3c\x8b\xbd\xd8\x4d\x7b"
+ "\x4a\xa1\x8d\xce\xe4\x73\x83\xbd\x64\xa7\x47\xd2\x1e\x07\x4e\xd1"
+ "\x07\x30\x09\xdb\x3d\x72\x09\xf0\xbd\x51\x47\xe6\x38\x20\xa1\x58"
+ "\xfd\x1e\xc0\x01\x23\x2b\xe5\x3c\xec\xff\x75\xed\x4a\x1e\xa5\x8b"
+ "\xf9\xc5\x91\x38\xfe\xdd\x68\x16\xe3\xd8\xc8\xd5\x32\x2c\xda\xfd"
+ "\x94\xac\x70\xdf\x2f\x47\x7a\xff\xb2\x3e\x99\xf9\x4b\x6f\xa4\xef"
+ "\x99\x3b\xcc\x7e\x2b\x03\xbb\xc5\x03\x86\x9b\xa0\xf4\x24\x8c\xd2"
+ "\x51\x8c\x5f\xbd\x19\x74\xa5\x66\xe6\xa1\xfd\x5f\xdb\x9c\xdd\x50"
+ "\xea\x64\x5d\xb4\xdf\xff\xd6\x0b\xa0\xb3\x7b\xf9\x39\x69\xc9\x2d"
+ "\x25\xa7\xc2\x7e\x93\xeb\x97\x18\x94\xa6\x50\xd9\x0e\x68\xab\xef"
+ "\x80\xd2\xfa\xe0\xb2\xa5\xb7\x40\xf2\x31\x3a\x3b\xc0\x0a\x89\xd4"
+ "\x0e\x7a\x9f\xe2\x8d\xed\x30\x97\xbc\x01\xda\x52\xf4\x2e\x8f\x15"
+ "\xd8\x94\xb6\xf0\x6f\x75\xb7\x9f\x01\xdd\x3b\xcb\x6d\xd2\xcb\x67"
+ "\xa8\xbd\xdd\xe6\x5f\x6f\xf6\x48\xcd\xc9\x33\xa0\x39\xf9\x04\xb4"
+ "\x24\x4f\x84\x16\xcb\x14\xa8\x3e\x03\x71\xcd\x9e\x0c\x68\xd1\x3e"
+ "\x0e\x2d\xa9\x53\xc0\xde\x8d\xf7\x06\x1f\xc2\xb8\xf8\xfe\x47\x9d"
+ "\x30\xca\x56\xfb\x3c\xe8\x1c\x02\x27\xd2\x6c\xd4\x51\x65\x2f\x1f"
+ "\x7a\x0e\xd7\x8f\xf5\x37\x42\x32\xb6\xaf\x0b\xdb\xf2\xe0\x49\xb8"
+ "\x2d\x3a\x35\x19\xe8\x6c\x86\xa1\xf6\x3a\x2f\x68\x4b\x20\x26\x82"
+ "\x5c\x24\xf1\x7d\x40\xd1\x8f\x6a\xd8\x83\x63\x3d\xfe\xf6\xa0\x4c"
+ "\xb8\xad\xb7\x65\x60\xdd\x27\xe4\x79\xaf\xee\xd2\xb7\x51\xce\x36"
+ "\xe6\xd1\xbe\x20\x38\x4e\xdf\x96\xa7\xe4\xd1\xfe\xa6\xb4\x6f\xe9"
+ "\xf8\x24\xd0\xdb\xbd\x99\xf0\x41\x6f\x17\x7d\x7b\xdf\x4d\xfb\x21"
+ "\x10\x3e\x1c\xf3\xa3\x68\xfe\x09\xdb\x33\x1a\xc7\xf8\xee\xdb\x10"
+ "\x0e\xcb\x23\xff\xff\x95\xcf\xb9\xb0\x1b\x16\xb8\xfc\x37\x2c\xb8"
+ "\xe0\x7f\x7d\x41\x0f\x7b\x7d\xc1\x37\xbe\xd7\x17\xfc\xad\x74\x13"
+ "\xe8\x7c\x37\x2c\x70\xb6\x99\x39\x0f\xf4\x6d\xe6\xb3\xf4\x1d\xbd"
+ "\x8e\xce\x13\x5d\xf4\x02\xf2\xde\xfb\x17\xd8\xb2\x12\x92\xfd\x31"
+ "\x5f\x1b\xed\xde\x3f\xc3\xa2\x12\x60\x78\x9f\x1e\xae\x7f\x3d\xb1"
+ "\xdd\x07\x95\xf9\x34\xb7\x35\x55\xef\x90\xfe\x83\xfb\x00\xce\x18"
+ "\xd7\x41\xbc\x0e\xe1\x75\x18\xaf\xf7\x58\x6c\x37\xfa\x36\x50\x9a"
+ "\xb0\x4d\x03\xb4\x7f\xcf\x78\x3f\x68\xce\x40\xea\x18\x6c\xbf\x3e"
+ "\x02\xdd\x52\xfc\xd5\x51\x99\x77\x96\xc1\x56\xb7\xbb\x90\xf6\x51"
+ "\x75\x92\x7e\x91\x3f\x8a\xf5\x58\xb0\x9e\xfd\x5c\x17\xf6\xa0\x1e"
+ "\x25\x44\x65\x92\x4f\xe7\x7a\xa9\x50\xe3\x7c\xa9\x50\xea\x49\x88"
+ "\x9a\x8c\x30\xf5\x08\xe3\x90\x69\xd8\x45\xb8\x50\x6f\x9c\xf1\x5e"
+ "\x88\x42\x9c\xe6\x7f\xbe\xd8\xae\xdd\xbb\x87\x9d\x40\xb8\x96\x7e"
+ "\x5c\x88\xbb\x96\xfb\x49\xa9\xed\x4a\x1a\xf9\x49\x55\x08\x47\xe5"
+ "\xed\x9e\x4c\x7a\x67\xe8\xb0\xaf\xee\xa2\xfd\x2b\x62\x59\x9f\xa8"
+ "\x8f\x7c\x38\xd2\xd5\x78\x0f\x0c\x71\x5b\x21\x87\x70\x53\x39\x3a"
+ "\xc7\x02\xcb\x4d\x66\xa5\x85\xe8\x2f\xc2\x2c\x37\x2b\xd4\xd0\x5e"
+ "\xb6\xcd\x58\x5e\xd4\x7d\x7b\xa6\xd2\x46\xaa\x83\xef\x65\x4b\xed"
+ "\x44\x79\x68\x5e\xed\x81\xf8\x3a\x9a\x27\x87\x39\x84\x8f\x70\xa1"
+ "\x1c\x38\xb0\xaf\x93\x9b\x57\x3b\xc1\xcf\x82\x70\x3a\x64\x7c\x35"
+ "\x41\xf8\x30\x9d\x21\x3e\x92\xbf\x16\x2c\x13\xdf\xc4\xf1\xcd\xfe"
+ "\x67\x3f\xe1\xf3\x80\xd6\xc0\xdb\x3b\x8f\x70\xf0\x7d\x99\x11\xa7"
+ "\x6d\xc3\x63\xe8\x3b\xde\xee\x71\x96\x16\x46\xf1\xef\xe6\xb1\xfc"
+ "\xaf\xb7\x76\x45\xb3\x9e\xbc\xa8\x04\xfe\xcd\xfc\x63\x40\xef\x5a"
+ "\x11\xe6\xdf\x58\x4f\x61\x54\x7c\x37\xfa\x7a\x08\x43\xfb\x68\x51"
+ "\x3b\xd5\xbc\x9c\x3d\x75\xde\x44\x98\x37\x65\xfa\x94\x89\x30\xf3"
+ "\xd1\xc9\x13\xc1\xf4\xe0\x58\x53\xda\xbd\x0f\xdc\xcb\x6f\xee\x7d"
+ "\x20\xfd\x5e\xc8\x79\x7a\xf6\x44\xc8\x99\x35\x11\xe6\xe0\x95\x33"
+ "\x67\xea\xec\x29\x53\xe7\x4c\x84\xbc\xc7\xa7\xe3\xd3\xe4\x89\x13"
+ "\x4c\xd3\xc6\xe6\x4c\x9e\x3e\x15\x9e\xca\xbd\xc7\x74\xcf\x3d\xf0"
+ "\xe8\xd4\x19\x13\x4c\x26\xf9\x77\x82\x89\x40\x9e\x49\x9f\x3a\x67"
+ "\x6c\x4e\xd1\xba\xe2\x75\x63\x67\x4d\x9f\x4c\x29\x30\x75\xea\xc4"
+ "\x9c\x20\x3f\xd2\xe8\xbb\xe8\x23\x7a\xbb\xd8\xf9\x2c\xda\xbf\x18"
+ "\x1a\x50\x0e\xf0\xea\xe6\xfb\x22\xc1\x9d\x7f\x6c\x20\xfe\xf1\xb1"
+ "\xe0\x8e\x24\x1a\x4f\xdd\xd6\x3b\x90\xff\x1d\x06\xa2\x23\xed\x21"
+ "\xdc\x09\xe3\x76\x60\xde\x8d\xb2\x3f\x12\x8d\xf9\x9e\xe0\xfc\xd1"
+ "\x0b\x31\xff\x56\xda\x67\xc7\x8e\x17\xd2\xde\x85\xf6\x10\x69\xec"
+ "\x84\x9e\xd2\xbc\x68\xbe\xcf\x21\xf2\x9d\xf6\x9f\x70\x5b\xef\x4c"
+ "\x53\xe9\x7d\x07\xed\x53\x41\xf3\xc9\xe7\xe0\xce\xf8\xb6\xe2\x4c"
+ "\xda\x8b\x0a\xec\xc5\x32\x8e\x0b\xfd\x38\x62\xe5\xbd\x12\x1d\x0d"
+ "\xb4\x07\x88\xc0\x53\xa2\xb2\x11\x0e\xc2\x53\x8d\x79\x32\xae\xa7"
+ "\xda\xd0\x56\xa0\x2d\xdf\xec\x2f\x35\x02\x8b\xed\xb0\xf8\xfb\x8c"
+ "\x20\xe6\x5f\xef\x3c\xa4\x92\x6d\x57\x8b\x05\xe1\xde\xc9\xd2\xd0"
+ "\x7e\x0c\x7c\x6f\x06\xb8\xc3\x86\x32\xee\xf2\x55\xb8\x3e\x64\xe7"
+ "\xf9\x7e\x88\x43\xb0\x7f\x63\xb1\x7f\xa9\xfe\x0a\x97\x8d\xef\x2d"
+ "\xca\xe1\x8c\x49\x8c\x9e\x63\x11\xae\xaf\x3f\xed\x3a\x4a\x73\xd3"
+ "\xfb\x1d\xd4\x59\xc6\x78\x7a\x14\xa6\xff\x19\xed\x5a\x3b\xc2\xda"
+ "\x08\x76\xbc\x17\x86\xf2\x7d\x50\x4a\x35\x70\x12\x8c\x0b\xfd\xb1"
+ "\xae\x8f\x54\xf5\x11\x9e\x85\x62\x1c\x43\x5e\x9c\x47\x3c\x3d\x3c"
+ "\x5d\xc2\xf4\xdf\x23\xfe\x66\xb2\x97\xc2\x86\x8f\xfb\x05\x40\xff"
+ "\x7b\x91\xc0\x33\xed\xf3\xbc\x55\x3c\x37\x23\x2d\xe9\x3d\x01\xbd"
+ "\xe3\x77\x5b\x8d\xe8\xff\xa4\x66\x89\xb1\x72\x1c\xdf\x37\x9f\xf6"
+ "\x95\x65\x71\x8f\x9b\x11\x6f\x8b\x6d\x73\x37\x3f\x1b\xd4\x01\xc6"
+ "\xd5\xfe\xd2\x42\x08\x69\x93\x91\xda\x4f\x36\x04\x69\x31\x16\xe5"
+ "\x20\xc6\x6d\x1d\x0d\x21\x72\x90\x82\x78\x3e\xc4\xf6\xb5\x63\x9f"
+ "\x3e\x44\x3c\xa9\xfe\x9e\x42\xac\x17\xe3\x45\x56\x88\xbe\x52\x00"
+ "\x87\x5c\x3e\x33\xb8\xfc\x9d\x1d\x54\x0e\xe1\xa3\xdd\x3d\x04\x7f"
+ "\x67\x17\xd1\x5c\x96\x3b\x94\xcb\xd1\xe6\x10\xb9\x5c\x83\x6d\xb9"
+ "\x5f\x95\x5f\x13\x92\xff\x14\xe6\x3f\x2c\xe7\xa3\xee\x8f\x3e\x18"
+ "\xd2\xde\xa3\x98\x3f\x09\xdb\xeb\x42\xdd\x8e\xc2\xfa\xf6\x35\xc8"
+ "\xbe\x89\x0c\xef\x08\x81\xf7\x22\xfc\x64\x92\x1b\x1a\x77\x08\xbe"
+ "\x51\xd6\x1d\x84\xd7\xb9\xad\x77\xe9\x43\xea\x9f\x80\xf0\x33\x02"
+ "\xed\xbb\xcb\x14\x9c\x7f\x97\x07\xf3\x9f\x22\x59\xc7\xdf\x67\xc9"
+ "\xd7\x27\x7b\x42\xb6\xac\x79\x35\xf1\xeb\xae\xfc\x10\xf8\x32\x84"
+ "\x2b\x90\x69\x24\xc9\x34\xda\x27\xc7\xee\x27\xe4\x36\xd4\x86\x94"
+ "\x39\x84\x65\x56\x23\x1d\x3f\x54\xe4\x32\x4c\x99\xd6\x90\x32\x5d"
+ "\xc4\x47\x26\xea\xd1\xba\xfb\x02\x65\x64\x3b\xa9\xc6\x41\x7d\xbb"
+ "\xc6\x6d\xbd\x3b\x2e\x18\xc7\xd8\x1a\xac\xb7\xb8\x4a\xd8\x9d\x6b"
+ "\x50\x86\xee\xc1\xb4\x6d\x88\xf3\x63\xd2\x81\x6a\xf2\x07\x9d\x1e"
+ "\x60\xa5\x59\x71\x42\x76\xef\x5e\x93\xe0\x05\xba\x1f\x4b\xf7\x84"
+ "\x9b\xb9\x67\xc8\x3a\x79\xf7\x1a\xfc\xa5\x74\x7e\x0e\x0b\xd9\x61"
+ "\xe6\x7e\xd2\x2f\x70\xde\xfd\x63\x3a\x1b\x0b\x9f\x7d\x72\x1d\x9b"
+ "\x68\xef\x50\x6c\xff\x47\x38\xee\x00\xdb\x88\x70\x9b\x61\x32\xa6"
+ "\x3f\x8b\x69\x47\x64\xb8\xc0\xf3\xc6\x27\xbd\x72\xfe\x58\x51\x67"
+ "\x16\xc9\x7b\x1a\x3e\xdf\x2e\xe3\xbb\x85\xf0\xe3\xfd\x04\xf9\x5e"
+ "\xe3\x23\xdc\xe7\x15\x9d\x1c\x7b\x1d\x2f\x87\x7a\xc9\xeb\xc3\xf2"
+ "\xb4\x6f\xab\x5c\x07\xb5\x7f\x7a\x27\x8c\x39\x8b\xbf\x4f\xe1\xef"
+ "\x27\xb4\x8f\x6a\xa9\x8f\xeb\x27\x3d\xff\x0e\x7f\x67\xe3\xef\xdb"
+ "\xf8\x3b\x07\x7f\xab\xf0\xf7\x31\xfc\x5d\x49\x7a\x42\x7b\xc2\xd3"
+ "\xde\x36\x38\xd6\x0a\x59\xa3\x77\x81\xee\x2c\xc2\x39\x15\x61\x38"
+ "\x2d\xfc\xc2\xde\xe8\x04\x5f\xc7\xf0\xb3\x67\x50\x3e\x28\x6d\xa8"
+ "\x90\x0f\x91\xe6\x53\xec\xd2\xf9\x40\x9a\x6c\xab\x64\xdd\x94\xd3"
+ "\x04\xfe\x1c\xc4\x3f\x86\xda\xca\x04\xae\x68\x21\x03\x32\x7e\x51"
+ "\x4e\x1b\xa6\x4e\x8d\xba\x4e\xfc\xe5\xfb\x22\x39\xe0\x6e\xee\xaf"
+ "\x39\x60\x6c\x0a\x9d\x4d\xe4\x27\x9e\x14\xc1\x0c\xe4\x5d\x2b\xf1"
+ "\x40\x91\x29\x26\x64\x74\x08\xdd\xfb\x37\xae\x42\x1b\x85\xf9\x1b"
+ "\x57\xf9\x65\x39\xe4\x30\x3c\x9f\xb7\x85\xef\xd1\x81\x38\xef\xae"
+ "\x21\xfe\xf0\x7c\x91\x3e\x46\x25\x97\xc3\xdd\xd6\xb1\xfb\x42\xe4"
+ "\xb2\x1d\xe5\xf2\x55\x92\x3f\xe2\x19\xd1\x25\xc1\xcc\xfd\x02\xa9"
+ "\x1f\xff\x79\x21\xdf\x0d\xf2\x3a\x27\x61\x0b\xc6\x76\x87\xe8\xb6"
+ "\x0e\xf1\x54\x84\xd8\x8e\xee\xc0\x18\x39\x2e\x25\xc4\xb6\xed\x63"
+ "\x15\x17\x70\xec\xbb\xab\x4b\xb6\xd1\xae\xa8\x12\xd2\xbd\x71\x18"
+ "\xff\x9e\xcd\xe3\xbe\x6a\x85\xeb\x0f\x84\xc7\x55\xca\xcf\x02\x70"
+ "\x45\x99\xc9\x66\x8c\x2b\x50\xf2\x79\x5e\x7c\x94\x8d\x74\x2a\x6a"
+ "\x35\xcf\x2b\x73\xc0\x6d\x7a\x25\x0f\xc4\x1e\x73\xae\xa8\x62\x9e"
+ "\x57\x1f\xc0\xdb\x51\x27\xe3\x8d\x0a\x7b\xb6\x43\x79\x47\x39\x0a"
+ "\xbf\x74\x57\x19\x44\xdb\xbd\x9f\x43\xb6\x97\xf9\xee\x2e\x83\x18"
+ "\xbb\xf7\x00\x8c\x06\x18\x66\xf7\xbe\x47\x0b\xfc\x47\xda\xbd\xb5"
+ "\xe8\xfb\x6c\xa7\xfc\x0f\x46\x97\x69\x34\xf8\x5b\x7a\x27\x48\x1a"
+ "\xbb\xb7\x1e\xee\x00\x2d\xfe\x16\xc3\xe3\xaf\x30\xb7\xdd\x5b\x80"
+ "\x70\xab\x21\xdb\xc7\xce\x4f\x89\x66\x5f\x2c\xf6\x81\x7e\xc6\x2b"
+ "\xac\xd4\xee\xc5\x38\xc4\x7b\x14\xd3\xfd\x2c\xdb\xf7\x2d\x5e\x6e"
+ "\xe6\x2f\xef\xa8\xcb\xf6\x9d\x67\x93\x5f\xf9\x00\x9f\xbf\x60\x93"
+ "\xa3\x4b\x19\xf2\x93\xd9\xbd\x19\xd0\xe6\x72\x21\x7c\x1a\xb0\x1d"
+ "\x1d\xe5\x8b\x2e\x48\xd0\x47\xe7\x2f\xec\xe8\xa8\xc3\xfe\xec\xef"
+ "\xc3\xbe\xe0\xb8\xfe\xf3\xbe\x97\xf0\xb7\xa2\xe3\x67\xfc\x59\xd7"
+ "\x71\x18\xfb\xb2\x7f\x6c\x19\xc6\x24\x16\xec\x87\xcf\xc9\xd0\xdf"
+ "\xd1\xda\x2d\x27\x20\x61\x1b\xf9\xf5\x19\x40\x67\xac\x21\xbf\x12"
+ "\x65\xbc\xfb\x29\x9e\x63\x31\x58\xae\xa2\xe3\x77\x1c\x47\x79\x47"
+ "\x7b\xa2\x86\x39\xd1\xbe\x27\x12\x2d\xec\xde\x13\x40\xe7\x9c\x13"
+ "\x0d\x68\x2f\xf1\x6c\x1f\x24\x62\xb9\xf6\xbe\x98\x8e\x56\xbc\xba"
+ "\xfa\x62\x4e\xa1\x8e\x9c\xba\x8b\x59\x93\x3e\xa4\xbd\x37\x59\xf9"
+ "\xa9\x74\x7c\xce\x72\xf1\x7d\xa8\xa9\x0d\x30\x94\xed\x38\x95\x8e"
+ "\x72\x35\x05\xe5\x13\xdb\x7a\xaa\x90\xd7\x53\x71\x6a\x85\x8b\x51"
+ "\x1f\x4e\x2d\x17\x7d\x38\xb5\x4c\xf4\xe9\x54\xb9\xac\x6f\x94\xf6"
+ "\x23\xbc\xcf\x75\x13\x5c\xf9\xa9\x72\xa6\x3b\x55\xe7\x41\x1d\x46"
+ "\xba\x96\x11\x1d\x91\xae\x65\x44\x4b\xc4\x5f\x6e\xb7\x54\x62\x3f"
+ "\x4e\xd5\x61\x7b\xf6\x63\xb9\x7f\xe9\xe3\x7e\xcf\xa9\x56\x97\xc0"
+ "\xf3\x07\xc4\xb3\x90\xe3\xd1\x9d\x6a\x45\x5c\xed\x3e\xab\x01\xb2"
+ "\x37\x31\x4f\xb6\x77\x9b\x77\xf1\x26\x88\x1a\x03\x65\x1a\x8a\x7b"
+ "\xec\x96\xd5\xd8\xcf\x16\xfc\x9d\x82\xf9\x70\x2d\xd6\xf5\x01\xe2"
+ "\x6d\xa5\xfa\xb0\x1e\xf4\x61\x4e\xfd\x19\x71\x15\x50\xfb\x7a\xe9"
+ "\x9c\xb0\xd8\x53\x5d\xbd\xd4\xfe\xf2\x4e\x1d\xd3\x75\x1a\xfd\xba"
+ "\xce\x64\x45\x86\x48\x7e\x04\xdd\x48\x6e\xde\xc5\xd1\x0b\xf4\xd9"
+ "\x16\xe6\xc5\x3c\xbd\xdd\x42\xe9\xf5\xd0\x66\x46\x18\x0b\xe5\x17"
+ "\xe3\xfd\x4c\xbc\xdf\x0e\x24\x3f\xb3\xcc\xae\x6d\xe3\xca\xcc\x1a"
+ "\x84\xff\x60\xb1\x57\x07\x8b\xcc\xda\xb2\x36\x73\x37\xe6\x75\x03"
+ "\xa6\x95\xda\x2d\xf5\x3c\x4e\x43\xbe\x7a\x7d\xba\xce\xfd\xbe\xf2"
+ "\x53\x9e\x04\x57\x29\xb3\x5b\x8a\x11\xd6\x0c\xa3\xcb\x74\x1a\x0e"
+ "\x6f\x29\xe0\xfd\xf1\x57\x97\x01\x95\x39\x56\x78\x00\x28\xde\xc3"
+ "\xbe\x3b\x8f\x75\x6f\x27\x19\xf5\xfb\xcb\x3b\x2d\x28\x9f\x7d\xc7"
+ "\x0a\x6b\x61\x66\x77\xd9\x50\xa4\x87\x06\xd3\x7d\xc7\xba\x5b\x10"
+ "\xf6\xa8\x90\xd9\x4d\xde\xc4\x63\x85\xdb\xc1\xab\x3b\xd5\xe5\x2d"
+ "\xef\x2c\xcf\xde\xd4\xc7\x66\x16\xb2\x0f\x9e\xed\x2e\x43\x39\x3d"
+ "\x00\x33\xcf\x7a\xa3\xda\xcc\x28\xf3\x9b\xdc\x98\xee\xe5\xf2\x3f"
+ "\xf3\x6c\x0f\x9b\xf5\x02\x3b\x9f\xbd\xe9\x0b\x76\xac\xb0\x00\x16"
+ "\xb9\x20\xe1\x9a\x6d\xcc\x4f\x7a\x71\xb4\xe3\x00\x5c\x73\xa2\x0b"
+ "\x48\x27\x66\x2c\xf1\xb3\x99\x67\xcf\xb3\x45\x2f\xd0\x19\xf0\x19"
+ "\xd8\x46\xa4\x8b\xab\x16\xe9\xdd\xa9\x3b\x56\xf8\x1e\xb6\x01\xf5"
+ "\xc6\x92\x86\x69\xef\x22\xac\x2d\xf1\xd9\xb3\x7a\x38\xda\x51\x0b"
+ "\xde\x98\x53\x5d\xbe\x1d\xa7\x3c\xfe\x98\xce\x64\x16\x83\xb4\xdf"
+ "\xd1\x69\xf1\xc5\x74\xee\xf7\xee\xe8\x2c\x67\x15\x9d\x1e\xe4\x53"
+ "\x0c\xf1\xbc\xd7\x0a\x06\x7c\xbe\xd8\xcb\xe5\xe8\x34\xf2\xe9\xb4"
+ "\x11\xfd\x6c\x46\xb4\x64\x3b\x4e\xeb\x84\x0e\x9c\x36\xf6\xc5\x9c"
+ "\x4e\x66\x15\xf8\xcb\xe5\xf0\x74\x3a\xc9\x25\x9d\xe5\x83\x69\x0f"
+ "\xf8\xb0\x2c\xe6\x67\xe1\x95\x87\x57\x21\xa6\x1d\x46\xfc\xc3\x08"
+ "\xbf\xbf\xfc\x74\x2b\xe2\x6c\x1f\x07\xa0\x6b\x73\x75\x00\xcd\x73"
+ "\xf0\x79\x01\xcb\x5f\xb0\xcd\x24\x53\x5e\xfc\xf5\xa2\x6e\x9c\x3e"
+ "\xec\x7f\xa4\x86\xeb\x20\xd6\xd7\x9e\xed\x9b\xc4\x16\x5d\x20\x7d"
+ "\xc2\xf4\x1d\x88\x23\xf6\xb4\xc7\xc3\xe5\xf5\xb4\x9b\xda\xd0\xf7"
+ "\x92\x91\xf0\x68\xd9\x8e\x2e\x1d\xab\xe8\xda\xec\x62\x46\xf0\x97"
+ "\x77\x59\xfc\xba\xae\x76\x56\xde\x85\xfa\xd0\x55\xe7\x2b\xef\xda"
+ "\xff\x64\x34\x73\x92\xfd\xea\x7b\x15\xb0\x9e\x43\xe0\x7d\x84\xb1"
+ "\x36\xf3\x76\xbc\x7f\x1f\xb8\x0e\x5b\x3e\xe7\x72\x75\xac\xfb\x73"
+ "\xa4\xe5\xaf\x30\xbd\x85\xdb\x31\xa2\x3d\x8b\xe9\xaa\x5b\x74\xe1"
+ "\xa6\x32\x92\x85\x45\x66\x28\xc3\xba\xca\xfd\x3b\xba\x2c\xbe\x1d"
+ "\x5d\xfb\xfd\x31\x58\x4f\xec\xd7\x37\x79\xb8\x5e\x7f\x8d\x72\x7d"
+ "\x88\x9f\xf9\x48\xf2\xc4\x76\x7c\x9d\x1c\xc9\x96\x92\x4d\x23\x1b"
+ "\x96\xed\xf5\x90\x7c\x9d\x26\xfb\x47\xb6\x0c\x6d\xc1\x62\xc5\x96"
+ "\x91\x1d\xa3\x58\x8c\x6c\x99\x5f\xb6\x65\x7e\xd9\x96\xf9\x55\xb6"
+ "\x0c\xe9\xaf\x45\x79\xf7\x70\xfb\x85\xf4\x24\xdb\x95\xed\x33\xb1"
+ "\x50\xdb\x45\x65\x7c\x68\x97\xfc\x68\x97\xf0\xea\xf2\x0b\xbb\x64"
+ "\x94\xed\x92\xa4\xd8\x25\xc4\x47\x76\xdb\x1f\xce\x2e\xf9\x65\xbb"
+ "\xe4\x93\xed\x92\x5f\xb6\x4b\xfe\x4b\xd9\x25\xdd\x29\xec\xef\xa9"
+ "\x3a\x5a\x6f\x85\x7a\x53\x46\x7c\xce\xde\xe4\x2f\x43\x9b\x81\x74"
+ "\x3c\x55\xe7\x17\xf6\xe8\x30\xc6\x61\x12\xd9\x23\x1f\x96\xf7\x2b"
+ "\xf6\xc8\xcd\xed\x5a\x3b\xd9\x24\xe2\xdd\x62\xaf\x01\xc8\x16\x71"
+ "\xbb\xe3\x1d\xe9\x25\xbb\x83\xf4\x9b\x14\x6a\x77\x10\x5f\x17\xde"
+ "\xeb\x45\xfd\x9d\xc9\x89\x68\x03\x12\xbd\xa5\x2c\xdb\xe2\xe2\x34"
+ "\x5a\x6c\x29\x2e\x23\x99\xf3\x95\x77\x1a\x59\x5b\x19\xf8\x75\xa8"
+ "\x23\x68\x9f\xec\x16\x1f\xa0\xee\x5a\xbc\x68\x2f\xd0\x5e\x95\xfb"
+ "\x50\x97\x67\x76\xf7\xd8\x67\x99\x61\xe8\x22\x97\x51\x3f\xf3\x2c"
+ "\x73\x22\x6d\x1c\x8b\xcc\x65\x30\xcb\x65\x44\xfb\xf0\x3e\xcc\xe8"
+ "\x60\xfe\x19\xf9\x0e\x03\xea\x62\xf9\xcc\x95\xb6\xc4\x45\x2f\xe8"
+ "\x61\xd6\x05\x66\x43\xfb\xf1\xaf\x33\xcf\xea\x13\x17\x76\xc0\x88"
+ "\x19\x4b\x98\xdf\x87\xba\x88\x7d\xf5\xa0\x0e\xea\x50\x17\x93\x7d"
+ "\x3b\x3a\x8d\xa8\x87\x16\x2f\xea\xa3\x5a\x17\x59\x6c\xe7\x45\xbc"
+ "\x37\xf0\x7e\x94\x9f\x36\xa2\xde\xe8\xfc\x7c\xbc\xeb\xe0\xb1\x2f"
+ "\xea\x82\x91\xeb\x4f\x0c\xa6\xef\x10\xfa\xe8\x67\x42\x1f\xfd\x44"
+ "\x3b\x49\xe8\x23\xf1\x04\xf3\xb3\xf0\xca\xc3\x2b\x48\x1f\x49\xcf"
+ "\x18\xe9\x99\xf9\x42\x40\xcf\x5e\x90\xf5\x2c\x46\xe8\x99\x0f\x7d"
+ "\x1a\xdf\x4b\x42\xd7\x08\x3f\xc5\xc7\xfd\xba\x16\xdb\x65\xa1\x33"
+ "\x08\x84\xdc\x70\x7d\x23\x5d\x43\x1b\xdb\x55\x87\xfa\x87\xf8\x98"
+ "\x93\xf4\x00\xe5\xf2\xaf\x34\x1e\xce\x32\xb3\xbf\x2e\xf6\xdd\x84"
+ "\x3c\xef\xda\x8f\xf6\xee\x8b\x99\xdd\xec\xaf\x68\xeb\x9a\x10\x97"
+ "\x05\x75\xa8\x1c\x75\xa9\x0e\x75\x8a\x74\x29\xd9\xf7\x12\xe1\xfc"
+ "\x3a\xb9\x1f\x07\x1f\x4f\x83\x75\xe9\x52\xf3\xb4\x6e\xeb\x03\xc5"
+ "\x0e\xf0\x8a\xb3\xac\xac\x0f\xa0\xff\xe3\x4b\x96\xef\x2b\x1d\xf0"
+ "\x57\xbe\xdf\x3f\xe9\xa0\x79\x2b\x5c\x77\x06\xd2\x33\x51\xde\x01"
+ "\xef\xe3\xf0\x7e\x4a\xf6\xe8\x0f\x98\xbf\x72\xfc\x7e\xac\xdb\x4d"
+ "\x7a\xc8\xac\x69\xe4\xef\x65\xa2\x1c\xea\x98\xdb\x18\xc7\x62\xdd"
+ "\x7f\x62\x7d\xc9\x34\x17\x98\x88\xcf\x09\x48\x83\x54\xfc\x1d\xbe"
+ "\xf7\x22\x24\xe1\x95\xbc\xd7\xea\x2f\x23\x1f\x0b\xef\x4d\x6c\x63"
+ "\x72\x6c\xf5\x06\x18\x93\xe8\x12\x67\xb0\x26\x6e\xd3\xd3\x9c\x58"
+ "\x12\xdd\x33\xeb\x49\x4b\xe3\x45\xf9\x1c\xd6\x78\xac\x4f\x7d\x0e"
+ "\xab\x15\x92\x1b\xad\xec\xa0\xcf\x4d\x74\xe8\x28\x57\xda\x42\x6d"
+ "\xc3\x76\xde\x82\xed\xcc\x9d\xbb\x29\x13\x3e\xb6\x84\xdf\xdf\xd1"
+ "\x6d\x4d\xef\xef\x7f\x84\xfc\x5a\x85\x26\x11\xf2\x0f\x29\x74\x8a"
+ "\xb4\x96\x94\xc6\x72\xdf\x06\xd6\x4d\x7b\x85\xd3\x3c\x45\xa9\x97"
+ "\xfd\x07\xd2\xb1\x6c\xab\x0f\x74\xd9\x16\x0f\xb3\x77\x33\x9b\xdd"
+ "\x72\x16\x1a\x69\xff\xf2\x12\x1c\x3f\x63\xdc\x87\xd8\x0e\xf7\xc1"
+ "\x9e\x0d\xcc\x4b\xf3\x4c\x6e\xeb\x83\xc9\x0e\x58\xa8\x17\xbc\xe8"
+ "\xd4\xf1\xf8\x56\xe7\x3e\x88\xb8\x86\x11\xae\x63\x58\xde\xb7\xc3"
+ "\x8d\xf2\xfa\x60\xa6\x43\x73\x0d\x5f\x93\x8f\x7a\xac\x33\x6f\x86"
+ "\x9b\xcf\xc0\x83\xfc\x7c\x47\x56\xee\x6e\x25\x7b\x80\x69\x7a\x4c"
+ "\xdb\x8e\xf8\x8f\x22\xbc\xd9\x01\x17\xe5\xb5\x71\x0f\x6e\x57\xe0"
+ "\xf0\x3e\x2f\x74\x9d\x9c\xfc\x55\x66\x59\xd0\x7e\x73\x1a\x08\xde"
+ "\x3d\x8f\x76\xaa\xcb\x0c\x9f\x1d\xb0\xe7\x9d\xe5\x74\xee\x57\xe9"
+ "\x16\x48\x41\xfe\x50\xfb\xbe\xc5\x98\xa6\x93\x59\x1f\xac\x79\x67"
+ "\xb3\x07\xe3\x8e\x87\xb4\x0e\x38\xa6\x8b\x44\x4f\xff\x45\xd6\x81"
+ "\x38\x8c\xbb\x36\x00\x10\x7d\x88\x9e\xa8\x37\x7e\xa4\xc3\x97\x64"
+ "\x8f\x1a\x37\x50\x9c\xff\x50\x96\x42\xaf\xc8\x3c\x71\x8b\xfd\xb6"
+ "\xe1\xa1\xfd\xcc\xca\xc0\x36\x82\xde\x9b\x3c\xf4\x0b\x41\x83\xd3"
+ "\xc9\x3d\x68\x47\x68\x0e\x9b\xce\xe8\x5a\x9f\xcc\xd0\xde\x3c\x84"
+ "\xfe\xff\xe4\xfe\xfd\x51\xed\xde\xa9\x64\x5b\xc2\x8e\x59\x7c\x6f"
+ "\xd4\x7e\xfc\x0f\xb7\xb6\xa5\x00\x70\xdb\x14\xa7\xd5\x6e\x15\xfc"
+ "\xf7\x10\x5e\xfa\xb6\xa4\x03\xf3\xd7\xbb\x58\x17\xab\x8c\xf2\x50"
+ "\xac\x41\xfb\x8c\x62\xda\x27\x28\xd7\xcc\x56\x44\x6d\x7a\xf8\x13"
+ "\xdb\x88\x5e\xe8\xb4\x40\x54\x63\xff\xbc\xd4\xc3\x87\x68\x1e\x4a"
+ "\xcc\xbf\x3d\x8c\x31\xd0\xd4\xcf\x95\x76\x91\x1f\x82\xb4\xd5\x91"
+ "\x5f\x42\xfe\x08\xbd\x17\x59\x5f\xc2\x3c\xe4\x97\x20\x6c\xbe\xd2"
+ "\x07\xea\x9f\xe8\xd7\xc3\xc5\xea\x7e\xd1\x5a\x81\xc4\x12\x41\x83"
+ "\xf5\x9b\x40\xc7\xcf\x0c\xf2\xd1\x7b\x95\xa9\xbc\x2f\xd4\x67\xde"
+ "\x17\x6e\x63\x29\x9e\xb8\x0f\x63\x3b\x9e\x6e\x44\x5c\x36\x07\x4c"
+ "\xc9\x14\xf2\xf4\x70\x5a\xa4\x6f\x66\x70\x7c\x6a\xc7\x58\x78\x44"
+ "\xa9\x9f\x9d\xec\x84\x8c\x99\x62\x4e\x2f\x63\xa6\x9f\x7c\x71\x0f"
+ "\xc9\xae\xcf\x41\x63\xb1\xbd\x84\xec\x2d\x87\xbd\x16\x61\x3b\x10"
+ "\x66\xa2\x0c\x3b\x91\x9f\x4b\x28\x7e\x87\xd2\x2f\x8e\x61\x7f\x76"
+ "\x40\x46\x2e\xcd\x33\xb3\xb8\x28\x9b\xf2\xcc\xf0\x19\x7f\xe3\xd8"
+ "\x0e\x9f\x23\x7c\x5b\xba\xda\x69\x2c\xf3\x5d\x64\xdd\x58\xcf\x0d"
+ "\x24\x47\xa5\x9b\xe0\x46\x94\xc9\x2f\xb7\x6e\x81\xeb\x48\xc6\x58"
+ "\x8c\xfb\xb8\xa0\x7b\x46\x13\xb3\xa2\xdf\x8b\x16\xd5\xbc\x01\x6e"
+ "\x46\x1d\x6a\x3d\x03\x19\xbf\x5b\x5c\x62\xc0\xb6\x02\xec\x3a\x07"
+ "\xe4\x9f\x7c\x81\xf0\x47\x29\xc6\x69\x3c\x47\xb2\x98\xf1\xb9\x22"
+ "\x8b\x78\xef\xb8\x94\xad\x40\xba\xe6\x89\x39\x90\x89\x33\xe9\x1d"
+ "\xc8\x49\x98\x98\x4e\xfd\x15\x6b\xae\x27\x8e\x66\x17\x59\x0a\x13"
+ "\x63\x1a\xca\xf7\xc4\x02\xfc\xcd\xe3\x17\xda\x12\xf9\x39\x0b\xe1"
+ "\x92\xd9\x45\x1f\xc1\xe4\x61\x9a\x89\x59\x35\xa4\x27\xf5\x6e\xeb"
+ "\xc4\x85\x0e\x58\x6c\x14\xbc\x99\x68\x24\x5c\x11\xda\x90\xc5\xf8"
+ "\x3e\xbb\xdf\x60\x7f\x27\x7e\x6c\xd8\x4a\x73\xaa\x13\xf9\x3a\x6f"
+ "\xc2\xd5\x28\x09\x9b\x8d\x3e\x6a\x5e\x83\xd5\x5f\x88\xf6\xb9\xd0"
+ "\x5f\x0d\x75\xfc\x5e\xce\x63\xf2\x38\x1a\x16\x7f\xa5\x56\x4b\x7b"
+ "\x87\x77\xc0\x23\x06\x8e\x07\xe5\xde\x76\xd3\x19\x7a\xa6\x8d\x11"
+ "\x34\xae\x38\x4d\x9d\xbd\x2e\x53\x9c\xd3\x88\x30\x22\xd6\x7f\x64"
+ "\x64\x0f\xd6\xe1\xb6\x3e\x62\x70\xc0\x34\x4e\x4b\x67\xbc\xa6\x2e"
+ "\xe2\xf7\x58\xa8\x03\xa4\x73\x42\xa7\x27\x5d\x38\xd6\xc4\xf5\x2f"
+ "\x1d\x65\x3e\x4f\xb6\xbf\x34\x5f\x14\x77\x12\x26\xb9\x8e\x25\x73"
+ "\xf9\x96\x98\xf4\x48\x59\xd0\x59\x72\x98\x37\xf0\x7a\xe4\x10\x5e"
+ "\x2d\x78\x1d\x97\x9f\x4f\xe0\xe5\xc4\x7b\xb4\x7a\x93\x3a\x38\xed"
+ "\xde\x2a\xd0\x38\x30\xaf\x07\xfd\x7a\x7a\x76\xc0\x23\xef\xb1\xb7"
+ "\x52\x25\xe5\xbe\xf1\x0d\x9a\x4b\x78\xa4\x0b\x79\x20\xbf\x63\x25"
+ "\x3c\xa0\xc1\xb6\x11\xdd\x59\x69\x1d\xf3\xb4\x6c\x75\x51\xbb\x93"
+ "\x5b\xea\x5c\x60\xb8\x83\xfa\x3f\x89\xf8\xce\x68\xcd\x0c\xfd\xae"
+ "\xaf\x63\xce\xe6\x7a\x2f\xd0\xbb\x43\xb7\x75\x12\xea\x7f\x63\x3d"
+ "\xb7\xf9\xd5\x5a\x13\xe1\x93\x65\x82\x29\xfd\x17\x74\xd6\xd4\x19"
+ "\x36\x68\xe8\x79\x5b\x03\xcd\x21\x56\x5c\x48\x63\xa5\x79\xf2\x5a"
+ "\x89\x49\x9b\x50\xcf\x27\xd1\x39\x93\xe7\x60\xd2\xfb\x0c\x69\xdd"
+ "\x5c\xc8\xcf\xac\x72\xe2\xf8\xd3\xdd\xc0\xd7\x37\x4d\x42\xfb\x37"
+ "\xf1\x38\x7f\x17\x84\xe9\xdc\xd6\x20\xce\x6a\xcc\xc3\xf1\xa8\xfb"
+ "\x58\xa1\x07\x7c\xd4\x67\x2c\xfb\xfe\x45\x8f\x36\xb1\x18\x34\x5b"
+ "\xe9\x0c\x78\x6c\x07\x43\x5e\x09\x5b\x36\x29\x67\xcb\x59\xe6\x51"
+ "\xfa\xdc\xdc\x44\xfa\x31\xc9\xe5\x80\x5f\x0e\x58\xcf\xa3\x3a\x7f"
+ "\x53\xee\xc7\xa3\xc3\x9a\x53\x05\x1f\xfd\x48\xab\x60\x3e\x3e\xaa"
+ "\x17\x3c\xcc\x9c\x12\xcc\xc3\x47\x71\x44\xca\xac\xc4\x6b\x1f\x5e"
+ "\x87\xc4\xb3\xfa\xca\xb4\xa8\xee\x91\xaf\x99\xa8\xa3\x99\xdb\xd1"
+ "\x5e\x74\x0b\xde\x50\x3a\xca\x33\xc9\xcd\xdf\x70\xec\xe9\xcb\x03"
+ "\x7a\xbf\x4c\xe9\x24\xe3\x94\xee\x47\xff\xc6\x01\x99\x75\x98\xaf"
+ "\x27\xfd\xa5\xf3\xbf\xd4\xf9\xfd\xe7\x3c\x40\xe6\x57\x84\x2b\x71"
+ "\x5b\x79\x39\xc9\x2e\x96\xa9\x4f\xf4\x96\x63\x0c\x90\xe9\x52\xe8"
+ "\x8a\x69\x27\x28\x9f\xe4\xd4\x6d\x7d\x34\x0e\xe9\xc2\xc7\x72\x17"
+ "\xc6\x89\xe1\x7d\x8f\x47\x4d\xfd\x3e\x9a\xee\xf4\x61\xe2\x65\x37"
+ "\x3c\x96\x81\x76\x4c\xc3\x2a\xa1\x46\x8c\x3f\x8f\x4d\xa4\x67\xb4"
+ "\x9f\x5f\xe2\x7d\xfa\x31\xb4\x53\xbd\x15\xae\x83\x7d\x12\x0c\xed"
+ "\x95\xb0\xc3\xd5\xe3\x8f\x7a\x63\xbb\xdf\xb3\x77\x1d\x82\x36\xef"
+ "\x6f\xc1\xf0\x3c\xc7\x31\x81\xce\xa1\x2b\xdd\xc4\x7c\xbf\xee\xdd"
+ "\xaf\xb5\x7b\xcf\xdb\xf8\x99\xab\xf0\x18\xa7\xc7\xce\x93\xe8\x05"
+ "\x2c\xe2\xb8\x05\x7d\xe2\xc6\xef\xaf\x5e\xce\xbc\xd5\x9d\xb4\x37"
+ "\x7d\x72\x6c\x55\x2f\x8c\x79\x73\x33\x98\xea\x7b\x21\xb5\xa1\x17"
+ "\x8c\xec\xb4\x51\xaa\x47\x3f\x6e\xd1\x05\x3d\x9d\x45\x9e\x97\x60"
+ "\x06\x5d\xc3\x66\xf4\xe7\xbc\xa0\xf1\x55\xa1\x3f\xe7\x45\x7f\xee"
+ "\xbc\x91\xec\x65\xbf\x3f\xd7\xc7\x7d\x65\x4f\x06\x3f\xab\x74\x87"
+ "\x27\x23\xbe\x10\x34\x71\xf9\xa0\xc7\xf6\x95\x9e\x83\x47\x5f\x88"
+ "\xeb\x40\x5f\x12\xfb\xec\x90\xfb\x8b\x34\xdf\x9e\x58\x08\x43\x79"
+ "\x5f\xd1\x86\xb3\x2a\xa8\x89\x38\x36\x4b\x24\x53\x2e\xd2\x25\xea"
+ "\xc3\x0e\x7a\xc7\x7d\xe8\x26\x8f\x76\x7d\x3d\xf3\x50\x7a\xf1\x48"
+ "\xe6\xc1\x74\x33\xd5\x7d\x10\xd3\xdd\xd6\xc7\xea\x1c\x92\xa3\x24"
+ "\x92\x8c\x62\xbc\x24\xdb\x9a\xc9\x37\x32\xa9\x8c\x64\xd4\xb3\xc5"
+ "\x8b\xfe\xf8\x39\xd2\xe3\xc9\xc9\xd9\xab\x99\xd7\xb0\x96\xd6\x1b"
+ "\x4c\xd6\xd1\x5a\x08\x7a\x07\xfa\x4f\xe8\xeb\x5c\x6e\xfd\x03\x8d"
+ "\x21\x14\x3f\x24\xae\x46\x9c\x15\xa7\x3d\xac\xd4\x18\x66\x5f\xf1"
+ "\x88\xdf\xbf\xc6\x89\x6f\x5b\x27\xe7\x3a\x60\x2d\x7f\x3f\xc7\xbf"
+ "\x07\xe2\xf6\x74\x4a\x9a\x0b\x69\x10\x6c\x03\xa6\xe8\x68\x9f\xf4"
+ "\x9e\xf2\x0b\x19\xb6\x11\x64\xfb\xa7\x68\x84\x2f\x74\x21\x5d\x8c"
+ "\x05\x93\xbf\x14\xef\x2b\x26\xef\x73\xc0\x1c\x3e\xc6\x9b\x47\x91"
+ "\x4c\x4c\x3e\xc1\x62\x2f\x3c\x4c\x70\xe3\xca\xa0\x6c\x9d\x17\xf2"
+ "\xd9\x8e\x0b\xe9\x8c\xeb\xca\x39\x60\xaf\xaf\x72\xd3\x37\x3e\xae"
+ "\x1b\x16\xb8\xd1\x37\x48\xc3\xbc\x0c\xaa\xc3\x89\x30\x48\xf7\x18"
+ "\xb1\x56\x62\x32\xda\x84\xa7\x64\x7b\x38\xf9\xa8\x98\x87\x9e\x7c"
+ "\xb4\x07\xcb\xa2\xaf\x78\xad\xdb\x3a\x05\xfd\xdf\x55\x25\xf2\x3b"
+ "\x75\xe7\xcb\xfc\xdb\xd4\x29\x63\x1c\xb0\xda\x46\x69\xc5\x23\x21"
+ "\xb9\xd8\xc0\xba\x22\xfa\x7a\x41\xfd\x9c\xfa\x1b\xbe\xee\x4f\x82"
+ "\x1b\x10\x87\x59\xc1\x8b\xe3\xed\x2f\x7b\xa4\xb9\x73\x31\x6d\xbb"
+ "\x82\x17\x61\xae\xc3\xe7\xda\x7e\x18\x51\x66\x9f\xaa\xcc\xdc\x1e"
+ "\xe9\xae\x5f\x62\xda\xe1\x90\x32\xad\x21\x65\xda\x55\x65\xca\xe4"
+ "\x7a\xba\x43\xca\x78\x83\xcb\x4c\x8d\x1b\xd8\xb6\xa9\x86\xe0\x32"
+ "\x53\x4d\x21\x65\x32\x07\xb6\x6d\x6a\x6e\x48\x99\x82\x90\x32\xc5"
+ "\x2a\xda\xd2\xfa\x25\x13\xa6\x95\x87\x94\xa9\x0b\x29\xb3\x5f\x79"
+ "\x46\xdf\xb3\x55\xf8\x06\x28\x4f\xc8\x53\xe4\x6b\x06\xe6\x63\xff"
+ "\xe7\x46\x3c\x0b\x80\x64\x13\x65\x26\xad\x74\xaf\x38\xb7\x97\xec"
+ "\x2a\xad\x77\x20\x7b\x4e\xef\x64\x48\x26\xc8\xef\xa4\xba\x3a\xe1"
+ "\xf1\x0b\x24\x43\x6e\xeb\xe3\x29\x03\xe9\xf1\xb8\x29\xb8\x9d\x8f"
+ "\x67\x06\xb7\xf3\xf1\x9c\x81\xf4\x78\xbc\x20\xa4\x4c\x71\x48\x99"
+ "\xed\xaa\x32\x4d\x72\x3d\x75\x21\x65\xf6\x87\x94\x39\x3c\x50\x3e"
+ "\x1f\x3f\x1a\x52\xe6\x44\x48\x99\xee\x00\x0d\xa7\x91\x12\x6b\x48"
+ "\x1f\xdc\xd6\x69\x18\xff\xe4\x8e\xb9\x04\xed\xf4\x8a\x3c\x2b\xdf"
+ "\x6a\x0b\xb9\x9e\xb6\xa3\x56\x7c\xa7\xc7\xcf\x48\xe8\x80\x69\x7b"
+ "\x95\x77\xd9\xef\xf4\x7a\xa2\xe9\x1d\x2b\xd2\xb6\xab\xd9\xe2\xc1"
+ "\x31\x77\x5a\xa1\x03\x66\x36\x29\x6b\x59\x68\xfd\x0f\x3f\x63\x87"
+ "\xc7\x23\xd3\xb2\x84\xfe\x4d\xab\x97\xdf\xfb\x50\x7f\x30\xce\x98"
+ "\x56\x7f\x75\xed\xca\x9a\x48\xed\xa2\xb3\x26\x10\x87\xa3\x3f\xd6"
+ "\xe8\x6f\x2b\xd5\x99\xa5\x9c\x85\xe7\x6c\x14\x6b\x90\x68\x6d\xb2"
+ "\x93\xce\xff\x70\x5b\xb3\x92\x54\xf1\x09\xb5\xd5\x75\x68\xb3\x47"
+ "\x1b\xd2\x66\x97\x68\x73\x56\x96\xb0\x51\x59\x59\x8a\x3d\x89\x28"
+ "\x7f\x95\x51\x5d\x6d\xd8\x43\x5a\x63\x71\xac\x1e\xfd\x4d\x8c\xb1"
+ "\xa8\xdd\x27\x21\xab\x86\xfb\xbf\x6b\x7b\x81\xee\xed\x25\x0f\xf1"
+ "\x35\x18\x72\x5f\x5a\xe9\x9c\x67\xf2\x7d\x5a\xcc\xdf\xd0\x3a\x40"
+ "\xc6\xcf\x7c\x82\xac\x0b\xcd\x25\x4e\x6a\xab\x4d\x59\xaf\x84\x6d"
+ "\x11\x7e\x5d\x65\x14\xad\xb1\x70\xd2\x5a\xaa\x66\x57\x3a\xc1\x74"
+ "\x20\x6d\x95\xf5\x12\xdd\x74\x66\x34\xc2\xd6\x47\x8a\x95\xd4\x74"
+ "\x15\x6d\x78\x72\x89\x90\x9f\xe9\x63\x82\xf5\x21\x1a\xe5\x74\x7a"
+ "\x66\xb0\xcc\x4d\xcf\x09\x96\xb9\xe9\xf9\xc1\xfa\x20\xa1\x3e\x4c"
+ "\x2f\x0e\x29\xb3\x3d\xa4\x4c\xad\xaa\x4c\x8d\x5c\xcf\xfe\x90\x32"
+ "\x87\x43\xca\xa8\xed\x1f\xf6\x79\x7a\x7b\x7f\xdc\xc9\xed\xfd\xf4"
+ "\x2e\xd5\xb3\x54\xcb\xc7\xa9\xe9\x5e\x25\x4d\xfe\x0e\x9a\xaf\xcd"
+ "\x12\xf8\x9e\x48\x0e\xb1\x51\x08\xff\xc4\x98\xe0\x36\x3c\x91\x11"
+ "\xdc\x86\x27\x66\x28\xcf\xf2\x7a\x8e\x8f\x3a\xe1\x09\xe5\x2c\x4a"
+ "\x57\xe2\x36\x78\x2a\xd1\x3b\x7b\x3e\xf9\x66\x34\x3e\xf1\x35\x73"
+ "\x5b\xd0\xa7\xbc\x40\xef\x0c\x3c\xd0\x59\x0c\x51\x74\x0e\x8d\x03"
+ "\x9e\x6c\x61\x31\x9e\x74\x5a\x53\x8f\xfe\x54\x36\xe2\x58\x88\xf5"
+ "\xd7\x61\x1d\x48\xbb\x27\x0e\x86\xb4\xc1\x16\xd2\x86\xe3\xaa\x67"
+ "\x3d\x3e\x3b\x54\xfd\xd6\xd3\xbe\x14\xaf\x71\xdf\xfa\x09\x8f\x92"
+ "\x4e\x73\x00\xd8\xc7\xae\x52\xee\x07\x64\xd2\x3a\xc5\xe1\x27\xe1"
+ "\x89\x53\x34\x5f\x20\x70\x3e\x99\xaa\xa6\xad\xa0\xc5\x93\xe9\xc1"
+ "\xed\x78\x32\x2b\xb8\x1d\x4f\xe6\x05\x6c\xcd\x13\xf2\x5a\x98\x27"
+ "\x57\x3b\x60\x1e\x3f\x9f\x1e\x69\x61\x48\xf4\x1a\xae\xb5\x8d\x22"
+ "\x3f\xf5\xc9\xdf\xbb\xb0\xbf\xec\x55\x69\xb8\xfc\xfc\x3e\x1b\x45"
+ "\x7e\xb7\x27\x1d\xed\x33\x7d\xab\x7b\x2b\xa6\xb5\x08\xbe\x3e\x89"
+ "\xfd\x9f\x23\xce\x92\xc2\x34\x3e\x0e\x8c\x22\xff\xf7\xc9\x1a\x16"
+ "\x1f\xe5\x89\x24\xcf\x3d\x09\x51\x4e\x65\x4d\x2f\xe2\x70\x29\xfa"
+ "\xe0\xaf\x8e\x72\xfa\x77\xb0\x1c\xb7\x75\x86\xce\x01\xd3\x41\xbc"
+ "\x6b\xf5\xd7\xa3\xec\xd7\x21\xff\x30\x06\x9e\x21\xc7\x32\x5a\x3a"
+ "\x57\x88\xd6\xc8\xd1\x59\x57\x71\x62\x2d\xc8\x8c\x0c\x95\x5e\xb9"
+ "\x0c\x9b\x27\xb1\x93\x30\x93\x6c\xaa\x9e\xec\x06\xad\x79\x6c\xf6"
+ "\x3a\x81\xe6\x59\xec\xde\x33\xdc\x27\xc7\x7c\x90\xcb\x5a\x54\x65"
+ "\x9d\xf2\x3c\x48\x17\xe5\x8d\xf7\x82\xb6\xd9\xe5\xa4\x33\x7d\x93"
+ "\x84\x1f\x3f\x53\xd3\x8c\xf6\x02\xcb\x1c\x50\xca\xd0\x9c\x09\x5f"
+ "\x57\x50\x0c\xda\x71\x25\xa0\xb5\x6d\x3e\xc9\x71\x2b\x6b\x87\x28"
+ "\x3e\xb2\x97\x74\x81\xdd\xd5\x4e\x73\x9a\x5a\xb1\x4e\x6c\x26\x44"
+ "\x79\x40\xd7\x53\x15\x85\x32\x31\x13\x7c\x55\x51\x5d\x18\x1b\x23"
+ "\xed\x66\xa4\x92\x0d\x54\xd3\x6e\xea\xd4\x9c\xd9\xd9\x33\xc7\x3e"
+ "\x3d\x7b\x7a\xee\xd4\x87\x0c\xb9\x2b\xd7\x2c\x2b\x18\xbb\xee\xc5"
+ "\x62\xc3\xc6\xa2\x95\xc5\x2b\xd7\xae\xe0\xc7\x90\x19\x96\x14\x8b"
+ "\x5f\xe3\xea\x25\xeb\x8b\x27\xd2\xed\x18\x83\xb9\x68\xd9\x06\x7e"
+ "\x3b\x3a\x16\x82\x91\xac\x2c\x5e\x56\x64\xb8\xbd\x60\x8c\xe1\xf1"
+ "\x25\x2b\x57\xd3\x57\x13\xe1\x70\x3d\x64\x28\x5a\x56\xb4\x6c\x49"
+ "\x81\x61\xa2\xc1\x44\x98\xd5\xe8\x54\xfc\x34\x29\xf6\x69\x3d\x8e"
+ "\xe7\xe8\x43\x77\x91\x9d\xa2\x71\xbd\x13\xb2\x4f\x91\x0f\xc7\xcf"
+ "\x0d\x43\x39\xc4\x31\xc1\xe1\xb6\xce\xec\x18\x38\x8e\xcf\xf4\x04"
+ "\xcb\xef\x2c\x5d\xb0\xfc\xce\x4a\x1e\x38\x8e\xcf\x0a\xd1\xff\x59"
+ "\x21\xfa\x3f\x6b\xc6\xc0\x71\x7c\x56\x7e\x48\x19\x73\x48\x99\xb2"
+ "\x7e\x3b\x83\x6d\x7d\x99\xdb\xa5\x59\xb5\x21\x65\xf6\x85\x94\x39"
+ "\x14\xf2\xdc\xa2\x7a\x46\xdf\x75\xd6\xe7\x6a\xdf\x00\x9f\x3b\x14"
+ "\x5d\x0f\xd8\xb7\x59\x1e\x05\x86\xc6\x1e\xfa\xb6\x46\xc0\x66\xeb"
+ "\x55\xb0\x5d\x02\x36\xbb\x5f\xff\xc9\x26\xd1\x5a\x51\xe1\x9f\x67"
+ "\xff\x44\xb6\x6d\x1d\xbb\x02\x63\x68\x07\xf2\xe2\xd6\x73\x90\x4d"
+ "\xeb\x80\x09\xd6\x49\xeb\x87\xd9\xeb\x0b\xdc\x8d\xc3\x41\x47\x65"
+ "\xe9\xdc\x2c\x66\x9d\xc9\xbf\xa3\xc7\xb4\x38\xbc\xd0\x4e\x65\x97"
+ "\x2b\x6b\xf5\xb7\x23\x8c\x03\xf8\x71\x3a\x1a\x2a\xb7\x9d\xaf\x73"
+ "\xa4\xfa\x72\xe8\x3b\x1f\xfa\xf6\x5c\xb7\x4b\xec\x59\xd1\x41\xe7"
+ "\xb9\x51\xdd\x88\x43\xcb\xa4\x99\x4f\xc9\xe7\x72\xe9\xf1\x4a\x42"
+ "\x9c\xfd\xeb\xff\x1d\x90\xcd\xbf\x13\x22\x9f\x8f\x7c\x3d\xe1\xf7"
+ "\x64\x7b\x15\xff\x82\x62\x85\x70\xb6\x23\xfc\x5a\x70\x48\xdc\x65"
+ "\xf5\xb7\xdb\xb6\x76\x50\x9b\xc6\x90\x1f\x6a\x4f\xf6\x42\x5b\xbd"
+ "\x17\xe3\x57\xd0\xf3\x78\xca\x72\x16\xec\x4d\x5e\xa0\xf9\xe1\xc5"
+ "\x16\x28\x6b\x94\xfc\xed\xac\xbf\x1c\xc5\x68\x39\xfc\xbb\xf0\xed"
+ "\x94\x8e\xe5\x31\x96\x70\xd2\x9a\xf1\x08\xf3\x11\x89\x04\x67\x1b"
+ "\x45\xf1\x5e\x4e\xbd\xec\xfb\x96\x37\x22\xae\xb0\xeb\x99\x25\xb0"
+ "\xbb\xad\x39\x38\xfe\x59\x32\x15\x9b\xdd\x5c\xc7\x6d\x9f\x84\xe9"
+ "\x38\xf6\xe7\x18\x22\xf9\x29\xb2\x7d\x37\xd3\x3a\x36\xb7\xf5\xa9"
+ "\x94\x4b\xc1\x52\xbb\x9b\xb1\xdf\xa8\x8b\x99\xef\x6c\x35\x45\xcb"
+ "\xf6\x55\x87\xe5\x72\x95\x72\x57\xd2\x3f\xf2\x8d\x68\x3c\x46\x5d"
+ "\x75\x89\x58\x71\xf6\x27\xaf\xf1\x35\xd2\x4f\xa1\xff\x97\xa3\xe8"
+ "\xc1\x35\xf8\x8c\xf6\xef\x29\x3e\x9f\xc8\xd7\xfe\x60\x3c\xb9\xde"
+ "\x8c\x3e\x5b\xb2\x0b\x6d\xe3\x53\xad\x4a\x1e\x9f\x27\xa2\xbc\x12"
+ "\xe6\x69\x4e\xee\xa0\xbc\x8e\xfe\x3c\xf1\xcd\x02\x6b\xb6\x78\x29"
+ "\xdd\xab\xa4\x8b\xb1\x65\x76\x5c\xc8\x73\x8a\xf2\x8c\xf7\x46\x6c"
+ "\x4b\x8d\x8c\xdf\x89\x36\x57\x23\xf6\x78\x98\xbd\xa3\x81\xeb\xcd"
+ "\xec\x2c\x25\x9f\xcf\xa9\xbd\x4d\xef\xc6\x5c\xe0\x8f\xbd\x90\xc9"
+ "\x7d\x2e\x2c\xf3\xeb\x6f\x3c\xd1\x18\x63\x68\x18\x9d\xe1\x8a\x69"
+ "\x84\x87\x74\x86\xce\xd3\x24\x5f\x0d\x71\xd1\x99\xaa\x4e\x92\x91"
+ "\x8d\x5e\x48\x31\x3f\x42\xf3\xcf\xb3\xb9\xdc\x52\x1a\xe1\x25\x7c"
+ "\x34\x26\x12\x6e\xc2\x57\x4d\x3e\x2d\x5f\x9f\x39\x1b\xfb\x9f\xe3"
+ "\x8d\xc4\x2b\xcc\xef\x52\xd1\x32\x1a\x9f\x3d\xc1\x7d\x9d\xa3\x0b"
+ "\x79\x4e\x56\x9e\x69\xae\x57\xc8\xde\x9c\x38\x39\x2f\xed\x52\x75"
+ "\x8d\xe2\xdf\xe4\xcc\xc9\x0b\xae\x6f\x4e\x61\x08\x7e\x4b\xc8\x73"
+ "\xb9\xf2\x5c\xcb\xdf\x31\xcc\xa9\x53\xea\xe0\x3c\x43\x19\xdb\xb7"
+ "\xd5\x19\x7d\xa9\xbd\x53\xb0\xcc\x51\x55\x9d\x43\xf0\xf9\x44\x80"
+ "\x7f\x73\xba\x14\x7c\x78\xef\x52\xc1\xa1\x5f\x92\xab\x55\xe0\xc4"
+ "\xfb\x8d\xdc\xa4\x40\xb9\x5c\xc3\x65\xfa\x1a\x22\xbb\x73\xd7\x08"
+ "\xd9\xcd\xcd\x0b\x6e\x4b\x6e\xa1\x0a\x67\x71\xa0\x2d\xb9\x65\x2a"
+ "\x38\xd4\xcf\xdc\x9a\x50\x59\x5d\x6f\x21\x19\x27\x79\xcd\x3d\x10"
+ "\x26\xcf\x23\xe7\xb5\x86\x97\xf1\x5c\x87\x2a\x5d\x8e\x8f\xe6\x4e"
+ "\x95\xfd\x04\xb2\xcf\xae\x9e\xd2\x5c\xe5\x3c\x57\x2e\x93\xb4\x6f"
+ "\xd9\x78\x71\x76\x38\xca\xf5\x5c\x43\x28\x5e\xf1\xbd\x8f\x8c\xa3"
+ "\x1f\x67\xae\x53\xf8\x78\x73\x73\x02\x7d\x9b\xbb\xd0\x01\xb3\x95"
+ "\xf7\x44\x4e\x31\x37\x98\x3b\x23\x52\xdc\x81\xf0\x95\xc1\x34\x9b"
+ "\x5b\x1f\xa0\xd9\xdc\xfd\x2a\xbc\x87\x54\x70\x7f\xc0\xe7\x16\x15"
+ "\xdc\xf1\xcb\xc9\xa6\x90\x95\xb9\x9e\xe0\xba\xe6\xe9\x02\x38\xe6"
+ "\x25\x05\xea\x9a\x67\x50\xc1\xb5\xe3\xb3\x29\x32\x7f\xe6\xcd\x88"
+ "\xcc\x9f\x79\x85\xe1\xf9\x33\xaf\x4c\x55\x6f\xe5\xe5\xf5\x6a\xde"
+ "\x41\x55\x7b\x1a\xf1\xd9\x16\xac\x47\xf3\x8e\x87\x3c\xf7\xf3\x9f"
+ "\xa1\xed\xd8\xb7\x39\x33\x9a\xd2\x8b\x47\x82\x5e\xe8\xd9\xd3\xa0"
+ "\xce\xff\x75\xaf\xc8\xa7\x36\xf2\x77\x70\xf4\x7e\x53\xc0\x19\x43"
+ "\xe1\x08\x46\x95\x9f\xa5\xb4\x1d\xc7\xeb\xb0\x67\x8f\x2a\xe3\x9f"
+ "\xdd\x4f\xe3\xdf\xd3\x05\xe2\xbd\xcd\xc5\x62\x66\xfd\x20\x2f\xd2"
+ "\x58\x86\x78\x9b\x1c\xf0\x74\x9e\xa0\xcf\xd3\x28\xff\xeb\xb8\x6f"
+ "\xc2\xca\x2f\x16\xa3\x3c\xf5\x76\x42\xde\x54\xfc\xed\xc3\xdf\xd1"
+ "\xc1\xe3\xeb\xd3\x2d\xcc\xaa\x99\xd3\x68\x0d\x1d\x77\x9f\x3e\x81"
+ "\xb1\x47\x6f\xa2\xb7\x2c\x2f\x4c\x9e\x87\x59\xa3\x66\x0f\x4c\xcf"
+ "\xa3\xf7\x3b\xbd\x0e\xc8\x9b\x42\xed\x55\xa5\x1b\x99\x35\x21\x97"
+ "\xe0\x1d\x54\x1f\x96\x89\xc4\x37\xe5\xbb\x2b\x21\x7b\x79\xc5\x21"
+ "\xfd\xf8\x16\x71\xfd\x4d\xf4\x63\xfe\xcc\x90\xba\x2b\xc3\xf7\x23"
+ "\x6f\x1f\xf6\xe3\xdb\xf0\xfd\xc8\xb3\x71\xda\x4a\xd8\x97\x01\x7e"
+ "\x47\xde\x09\xec\xcb\xb7\x9c\xee\xc1\xe9\x2e\x25\x4e\x2d\xfd\x16"
+ "\xe3\x7f\x09\x78\xd9\x39\x25\x01\xbe\x09\xb8\xf9\x29\x89\x75\x90"
+ "\x33\xb0\xce\xf9\x69\xcc\x3a\x74\x8e\x03\xe6\xaf\x56\xc6\x2b\x39"
+ "\x7d\x86\x68\x0b\xd2\x49\x22\x3a\x61\x7f\xb0\x5c\x24\x7e\x2b\xfa"
+ "\x29\xde\x33\xcd\x47\xfd\xcf\xcb\x51\xc6\x74\x1c\xcf\x9d\x0a\x1d"
+ "\x31\xef\x70\x48\x9e\x47\x95\xf7\x79\x50\xde\x96\xfe\xf4\x6e\x25"
+ "\xfd\xca\xf8\xf4\x4c\x4a\x08\x9f\x90\x3f\xcf\xfc\x2a\xb8\xdf\xcf"
+ "\x8c\x11\xfd\x43\x1e\x0d\xa0\xf5\x33\x59\xc8\xa3\xbe\xf0\x3c\x7a"
+ "\xa6\x20\xbc\xac\x3d\xc3\xcf\x99\x66\xc3\x21\x1c\x3e\x5a\xa3\xd5"
+ "\xc7\x65\x50\xe6\xd3\x40\xfe\x3c\xf3\x9e\xc2\x9f\x2b\xeb\xe3\x02"
+ "\x08\xe9\xa3\xaf\x13\x16\x6c\x11\x7d\x5d\x70\x2c\x18\xf7\x82\xe4"
+ "\xf0\xb2\xb8\xc0\x84\xfd\xf4\x85\xef\xe7\x82\x19\x91\x65\x71\x41"
+ "\x21\xf6\xc7\x37\x50\x16\x17\x88\x77\xba\xb2\x0c\x86\xe4\xd5\x33"
+ "\x6b\xd8\x7a\x0e\x91\x5f\xe4\x80\x05\xdd\xf4\x9e\x4e\x95\x7e\x34"
+ "\x58\xfe\xb0\x0f\x54\x8e\xe8\xe7\x15\x71\x0c\xf1\xa1\xd3\x00\xd2"
+ "\xe5\x64\xd2\x6d\x5d\x38\x26\x84\x56\xe7\x3b\x61\xe1\xaf\x7a\x24"
+ "\xe9\x71\x41\xaf\x67\x5f\x08\x6e\xd3\xc2\xac\xf0\xf4\x5a\x98\x8f"
+ "\xf4\x3a\x1f\x9e\x5e\x0b\x4b\x22\xd3\x6b\x21\xf1\xff\xfc\x40\x7a"
+ "\x2d\x3c\xa8\xa6\x97\xdf\x2a\xfa\x77\x5b\x32\xca\x46\xdf\x62\xd6"
+ "\x28\x6c\xb9\x3e\x11\x65\x45\x94\xe9\xa6\x32\x1d\x89\x1e\x21\x27"
+ "\x86\x9b\x40\x77\x0e\x16\x1e\x55\xf4\x3f\xa1\x0e\x86\xb2\xbe\x05"
+ "\xb4\x86\x9b\xce\x94\xd6\xdb\x2d\xe7\x6d\x76\xaf\x09\x68\xbe\x31"
+ "\xb8\xde\x67\x8d\xe1\x6d\xc1\xb3\x99\x48\xd3\xdd\x61\xd2\xe5\x6f"
+ "\x0a\x9e\xad\x09\xb6\x11\xcf\x9a\x83\x79\xb4\x90\xde\x4b\x27\x42"
+ "\xff\x7e\xab\x97\xbe\x2e\xcd\xb3\x67\x1d\x03\x79\xb6\x68\x9b\xe0"
+ "\xd7\xa2\x25\x21\xed\xf3\x84\xe7\xd7\x22\x7d\x64\x7e\x2d\x1a\x13"
+ "\x99\x5f\x8b\xb2\x88\x5f\x0e\x58\x54\x16\x3c\x6e\x2c\xca\x0f\xee"
+ "\x2f\xd6\x8b\xe5\x98\x34\xe4\x5a\x7a\xbe\xd2\x7e\x2b\x17\xd9\x38"
+ "\xe2\x15\xed\x37\x80\xed\x1f\x49\x6d\x1c\x2c\x8e\x88\xb8\x91\x86"
+ "\x35\x9b\x23\x9e\x53\x1e\xd7\x86\x71\x25\xad\xcf\x33\x8c\xa0\xb9"
+ "\xb2\xc5\x73\xfd\x92\xe6\x21\xbc\x97\x3a\x61\xc9\x48\xbf\x14\x55"
+ "\x46\x6b\xc9\xf8\xb7\x8a\xfc\xfd\xc4\xe2\xd5\x6a\x5e\xd0\x9a\xb2"
+ "\x6a\xb1\x77\x24\xcd\x73\x7e\x81\xe5\x2f\x08\xbe\x2c\xd1\x04\xd3"
+ "\x71\x71\x4d\x78\xbe\x2c\xde\x8f\x7c\xf9\x22\x3c\x5f\x16\xb7\x44"
+ "\xe6\xcb\x62\x07\xf2\xe5\x8b\x81\x7a\xb4\xd8\x23\xeb\xd1\xcb\x54"
+ "\xc6\xb0\x96\xfc\xd5\xfc\x95\x04\x83\xf7\xa8\x23\xf9\x4f\x51\xfe"
+ "\xd8\x6e\x45\x8f\xa8\x4c\x3e\xc5\xff\xbc\x7e\x19\xc6\x28\xe3\x50"
+ "\xe1\xcd\xcf\x49\xec\x0e\xa7\x27\xf9\x74\x66\xad\x66\x9c\x19\x74"
+ "\x48\xc3\xbc\xbd\x84\xa3\x08\x00\x71\xbc\x4f\x70\x94\x4e\x67\x3c"
+ "\xab\xe0\xeb\x14\x38\x3e\x2f\x2a\x60\x6b\x98\xbb\x10\x08\x2e\x04"
+ "\xb7\xdc\xff\xa1\x7c\x1c\x21\x78\x82\x0b\x81\xe9\x12\xfa\xb8\x64"
+ "\x4c\xb0\x3e\x2e\x81\x60\xf9\x5c\x4c\xef\x27\x12\xfd\x68\xe7\xf0"
+ "\x3e\xd7\x67\xd5\x3c\xf4\xdd\xe8\xe6\x92\x92\x10\xdd\x44\x19\x78"
+ "\xee\x16\x59\x06\x7c\xc1\x6d\x5d\x52\x1b\x5e\x06\x96\x1c\x88\x2c"
+ "\x03\x4b\x5a\x23\xcb\xc0\x12\xda\x77\xe6\x0b\x07\x3c\x97\x12\xac"
+ "\x9b\x4b\xbc\xc1\x7d\xc7\x7a\xb9\x6e\xc2\xb0\xc1\xe8\x26\xfa\x42"
+ "\xd7\x46\xd2\x43\xd9\xff\xd7\x34\xf6\x02\x0c\x82\x66\x3a\xd4\x2b"
+ "\x6c\xdf\x73\x07\xe9\x1d\x12\xda\xf8\x42\xa2\x61\x03\x8f\xd1\x9e"
+ "\x6b\x51\xd3\xb1\x5a\xc4\x5a\xa5\x9d\xb0\x74\x3a\xad\xd9\x13\xf4"
+ "\x2c\x18\x16\xdc\xff\xe7\x3a\xc2\xd3\xf3\x39\x9a\x9b\x2f\x0d\x4f"
+ "\xcf\xa5\xc9\x91\xe9\xb9\x34\x8d\xbe\x8d\x1f\xa8\x53\x4b\x67\x18"
+ "\x36\x70\x1f\x85\x97\x39\x07\x4b\xdf\xbd\xb2\xf1\x69\xe9\xf6\xe0"
+ "\xf1\x69\xe9\xea\xc1\x8f\x4f\x4b\x5b\xc3\x8f\x4f\x4b\x1d\xe1\xc7"
+ "\xa7\xa5\x1e\xa1\x0f\x05\xa6\x60\x7d\x28\xd0\x07\xcb\x04\xd2\xee"
+ "\x3b\x1b\x9f\x0a\xca\x42\x74\x60\x57\x27\x2c\xd3\xa0\x4f\xf1\x8a"
+ "\xe0\xdb\xb2\x8f\x83\xdb\x58\x50\x1f\x9e\x6f\x05\x87\x90\x6f\xbb"
+ "\xc2\xf3\xad\xe0\x78\x64\xbe\x15\xd0\x3b\xd1\x5d\x03\xf9\xb6\x4c"
+ "\x3b\x78\x9f\x62\x59\x7a\x30\xcf\x96\x19\x06\xcf\xb3\x65\x25\xe1"
+ "\x79\xb6\xac\x36\x3c\xcf\x96\x1d\x10\x3c\x5b\xd6\x11\xcc\xb3\x65"
+ "\x2d\xc1\x3c\x43\xba\x7d\x67\x3c\x5b\x9e\x16\xc2\xb3\x75\x9d\xb0"
+ "\xfc\x77\xc8\xb3\xe3\x82\x67\x2b\x36\x05\xb7\x71\x79\x4e\x78\x9e"
+ "\x2d\x2f\x44\x9e\xad\x0b\xcf\xb3\xe5\xdb\x23\xf3\x6c\x79\x13\xf2"
+ "\x6c\xdd\x40\x9e\x2d\x3f\x3c\x78\x9e\x2d\xef\x0e\xe6\xd9\xf2\xcf"
+ "\x07\xcf\xb3\x15\xa6\xf0\x3c\x5b\x91\x15\x9e\x67\x2b\xf2\x05\xcf"
+ "\x56\xd4\x05\xf3\x6c\x85\x25\x98\x67\x48\xb7\xbf\x93\x67\xc8\x1f"
+ "\x8b\x58\xaf\xbb\xe2\xdb\x1e\x3e\xa7\xbd\x02\x63\x84\xc2\xc3\xe2"
+ "\x9d\x40\x21\x97\x1d\x99\x87\xbf\x46\x98\x8e\x81\x63\x77\x61\x9c"
+ "\x9c\xf6\xf4\x40\x3e\x14\x1a\x71\x5c\xed\x6e\x29\xe1\xeb\xba\x04"
+ "\x0f\x89\xe6\x08\x27\xe6\xc8\x0a\xf9\xda\x00\xe4\x31\xa3\x7d\x8c"
+ "\x69\x2c\x46\x78\x17\xe1\xa1\x7d\x5c\x42\x70\x15\x0f\xc6\x2f\x8b"
+ "\xbc\xc6\xfc\xa2\x85\xce\x1a\xe8\x84\x95\x3b\x84\xac\x16\x86\xfa"
+ "\xbf\x8d\x98\xf7\xac\x90\xd3\x55\x21\x73\x26\x85\x11\xfc\xdf\x95"
+ "\xe4\xff\x36\x86\x97\xd3\x95\x97\xf0\x7f\x57\x92\xff\xdb\xa8\x8a"
+ "\x57\x87\x2f\xf2\x3a\x42\xe2\xd5\x95\xab\x13\x5d\x42\x76\xb8\x1f"
+ "\xbb\xe3\xa2\xc5\x6d\x5d\x59\x1b\xd2\x66\xe4\xcd\xf3\xc3\xe4\x36"
+ "\xc7\x84\x94\x3f\x10\xa1\xcd\x2d\xd8\xe6\x5f\x47\x68\xb3\xe3\x12"
+ "\x6d\xa6\xf9\xee\x5f\x0f\xd4\xad\xe7\x93\x64\x39\x08\x13\x97\x3f"
+ "\x6f\x0a\xcf\xff\xe7\x43\xf8\x0f\x79\xc5\x25\xcc\xc9\xcb\x07\xc3"
+ "\x99\xd5\x70\xb4\x56\x9f\x60\x49\x46\xc2\xc0\xd6\x87\xe2\x8c\x00"
+ "\xd7\x32\x40\xf6\xe8\xdb\x82\xb0\xb2\xf7\xbc\x53\xe8\xe3\xaa\xac"
+ "\x60\x7d\x5c\xa5\x0b\xd6\x47\xa4\x75\x50\xb9\x55\xc6\xe0\xfc\x42"
+ "\xcf\x77\x67\x63\x57\xd5\x85\xc8\xc0\x07\x9d\xb0\xfa\x3a\x21\x03"
+ "\xab\xd7\x84\xb4\xe3\x60\x78\x19\x58\xd5\x8a\xfd\xff\x20\xbc\x0c"
+ "\xac\xea\x88\x2c\x03\xab\x49\x9f\x3f\x50\xcb\xed\x9c\x92\xcc\xa1"
+ "\x21\x30\xa9\xe1\x6d\xde\xea\x8c\xf0\xf3\x3a\xab\x73\x05\x8d\x57"
+ "\x57\x06\xd3\x78\xf5\xea\x60\x1a\x62\x5f\xfe\x7e\x1a\xf6\x9f\xcd"
+ "\xe1\xb6\xae\x0e\xd5\x7f\x7b\x27\xac\x91\xf5\x7f\xed\xdc\x90\x36"
+ "\xca\xf1\x4f\xb8\xb9\xac\x35\x49\x48\x4b\x7b\x78\x5a\xae\x31\x85"
+ "\xef\xf3\x9a\x2c\x1c\x83\xec\xfe\x01\xba\xb4\x26\x1f\xd3\xe7\xd0"
+ "\xbb\x03\x9a\xc3\x6a\xc0\xf4\x39\x5e\xd0\xf1\xf1\xaa\x7f\x5c\x5a"
+ "\xb3\x9d\xe6\xc8\xf9\x1c\x33\xca\x6f\x62\x0a\xe4\xd0\x18\x44\xed"
+ "\x5a\x5c\x12\xfa\x4e\x74\x0d\x9f\xff\xa0\x75\x2c\xf4\x5d\x4d\xa2"
+ "\x05\x72\xec\x2e\x2f\x28\xf2\x4e\xf0\x21\xb8\x1d\xa4\x17\x04\xaf"
+ "\xc0\x8a\xb9\xce\xb2\x10\xdb\xb4\x56\x17\x9e\xc7\x6b\x0d\x91\x65"
+ "\x67\x6d\x86\xe0\xf3\x5a\x73\x30\x9f\xd7\xe6\xfa\xad\x09\xb9\xd4"
+ "\x57\x94\x81\x41\xe9\x09\xbd\x3b\x8d\x68\xef\x5f\x5e\xd0\x6e\xde"
+ "\x0a\x23\xce\xc0\x5a\x1e\x6b\xec\x92\x98\x27\x71\x9b\x06\x5a\xb8"
+ "\x0d\x58\x27\xf6\xc3\x40\x98\xc5\x5e\x90\xd8\xcb\xab\xda\x29\xaf"
+ "\xd1\xca\x3c\x74\x4e\x8d\x72\xe6\x0c\xca\xc2\xb5\x27\x61\xed\xdf"
+ "\x82\xca\xa3\xf7\x67\x17\x38\xc6\x88\xf9\xfd\x75\x46\x65\x1e\x3e"
+ "\xd2\xfc\x3e\xc2\xcc\x50\xd6\xfd\x8a\x77\x61\xeb\x32\x23\x8e\xcb"
+ "\xd8\x26\xfa\xbe\x9c\xda\x74\x69\x3b\xb0\xae\x49\x91\x5f\xf1\x6e"
+ "\x6e\xdd\xc1\xc0\xb7\x2d\xeb\xde\xc3\xbc\x82\x4b\xcc\xe7\xaa\xf4"
+ "\x60\x5d\x97\x1a\x8f\x38\x9f\x66\x9d\x57\xf9\x3e\xc5\x6d\x35\xeb"
+ "\x2e\x83\x4b\x6e\x8f\xd9\x14\xdc\x1e\x73\x26\xfa\x96\x05\x32\x8e"
+ "\x19\x97\xc1\x91\x64\xdf\xf7\x10\x8c\xf3\x43\xd4\x19\x28\x7a\x83"
+ "\xce\xbb\xb1\xd7\x77\x41\x9c\x17\xb4\x22\xb6\x33\xbf\x4d\xdf\x86"
+ "\x30\xbe\xef\xc0\x24\x1b\xbd\x83\xe3\x6b\x08\x92\x27\xd9\x8e\x59"
+ "\x7c\xf2\x9e\x6f\xe6\xdf\x10\x4d\x8f\x15\x9e\xb7\xd5\xef\x61\x5d"
+ "\x7b\xf9\x5e\x5f\xe6\xa0\xf8\xaf\x92\xd6\xff\xd0\x3a\x8c\xad\x30"
+ "\xa9\x13\x5e\x98\x2e\x74\xbd\x28\xc4\x27\x35\x47\x88\xff\xcc\x14"
+ "\xff\x4d\x0a\xaf\xe7\x2f\x5c\x22\xfe\x7b\x81\xe2\xbf\x49\xea\x71"
+ "\x53\xbc\xe7\x79\x61\x86\xda\x27\xa5\xfd\xb8\x0c\xcb\xc9\xcf\x7c"
+ "\xe1\xc3\xbb\x6b\x41\xef\xa5\x77\xda\xa8\x9b\xf6\xae\x16\xd2\x57"
+ "\xfd\x31\xe7\x61\x40\x59\xd5\x25\x98\x49\x16\x69\x2c\x23\x7d\x7d"
+ "\x81\xcf\x17\x26\x7a\x85\x2e\x96\x5a\x98\x73\x4c\x07\xca\xd0\xba"
+ "\x42\x05\x57\xc9\x96\x42\xf1\xdd\x47\x42\x07\x0c\xb5\x77\xf1\x71"
+ "\x51\x43\xfe\x2a\xf7\x5b\xbd\x17\x80\xf0\x36\x97\x1c\x03\xc2\xeb"
+ "\xef\x1f\x27\x39\xee\x6e\xd2\x71\xc2\x49\xb8\xdb\x10\x8e\xf0\x12"
+ "\x9c\xd2\x0f\xf1\x6d\x4c\x51\x92\xba\xef\x7c\xfe\x05\xeb\xc6\xf4"
+ "\xa7\x68\x5e\xc5\x4e\xe5\x4a\x17\xb0\x71\x1d\xf4\xce\xec\xbc\x8d"
+ "\x95\xae\x62\xe3\x8a\x68\x4e\xac\xe8\x6d\x2a\xf7\xeb\xbf\x3a\xa2"
+ "\x8b\x47\x82\x4e\x4e\x5b\xd8\x62\xf0\x80\x03\x8a\x9a\x82\x6d\x44"
+ "\x51\x88\xff\x6b\xe6\x71\x26\xfe\x16\xd3\xfa\x44\x79\xfd\x2a\xd9"
+ "\x03\x66\xf7\xba\xb9\x7c\x5c\x6a\x4d\x05\xbd\x93\xa6\x35\x51\x62"
+ "\xbf\xb9\xa2\xae\x90\xb9\x37\x67\x35\x5f\x57\xf3\xef\x58\xef\xfa"
+ "\x17\x85\x8c\x14\xbf\x18\xcc\xd3\xf5\xba\xd2\xb3\xf4\x2e\x48\x8c"
+ "\x07\x8b\xbc\xa1\xf6\x71\xbd\x51\xf1\xdd\x42\xd2\x33\x95\xf1\xc0"
+ "\xb0\x96\xe3\x0d\x19\x67\xd6\x73\xff\xdf\x37\x60\x5c\x58\x4f\xdf"
+ "\x2c\x07\xc9\x64\x1b\x97\xa1\xf5\x35\xc7\x5c\x28\x37\x45\x24\xff"
+ "\xc5\x31\x08\xb3\x8d\xbe\x39\xc4\xe7\xa1\xe7\x60\xbd\xcd\x67\x05"
+ "\xdd\x31\x27\xff\xa6\x4a\x8f\x32\xc2\xe5\x96\xc6\x8d\xf1\x62\x3d"
+ "\x92\x2b\xa4\x8e\x13\x0a\xcd\x09\xa6\xad\xe8\xdf\x41\xac\xa7\x20"
+ "\x59\x58\x7f\x90\xd6\x66\x24\x74\xf3\xbd\xbd\xf4\x8a\x0c\xd9\xbd"
+ "\xed\xd0\xe6\x0d\x8d\x79\x8a\x53\xc3\xf7\xbd\x98\xc6\xff\xdd\x0e"
+ "\x28\xae\x0d\xe6\x6d\x31\x1f\xff\x95\xf7\x3a\x0e\xa4\x41\x48\xb9"
+ "\xe2\x60\xde\xaf\xe7\xb4\x8e\xb8\xc6\xa7\xfc\x62\x09\xc6\x33\x8b"
+ "\x5d\x7c\xbd\x57\x31\xea\x7f\x51\xcb\xa5\xec\x20\xd3\x5d\x2c\xf1"
+ "\x23\xac\xbc\x2e\x18\xed\x56\xb1\x27\x68\xce\xe8\x7a\x3e\x67\xb4"
+ "\xb8\x13\x5e\x94\xdf\xfd\x6c\x98\x18\xdc\xbe\x17\x93\x22\xfb\x06"
+ "\x2f\xd2\xfb\x9f\xc5\xe1\x6d\xc6\x8b\x33\xc2\xfb\x06\x2f\x16\xc8"
+ "\x76\x61\x31\x8b\x09\x95\x83\x17\xcb\x90\xc7\xbc\x8c\x12\xc3\xd2"
+ "\x5c\x68\xe4\x18\xf6\xc5\x83\xfd\x31\x6c\x11\xd9\x83\x17\xeb\xfa"
+ "\x63\x58\x67\xb8\x18\xd6\x11\x86\x9f\x2f\xba\xc2\xf3\x73\x43\x5c"
+ "\xf8\x18\x76\x43\xaa\x18\xe7\x37\xe4\x05\xf3\x79\x43\x46\xe0\x9d"
+ "\xf0\x8b\x49\xdf\x9d\x3f\xbc\x61\xff\x40\x7f\x78\xe3\xed\x82\x57"
+ "\x1b\x97\x85\xb4\xcd\x16\xde\xb6\x6f\x68\x8f\xec\x0f\x6f\x70\x45"
+ "\xb6\xed\x1b\xf5\x03\xfd\x61\xc3\x90\x10\x98\xb4\x7e\x5f\x29\xc8"
+ "\x37\xdb\x38\x43\xd0\x69\x23\xf9\x73\x51\x2a\xf8\x82\x60\x79\xc7"
+ "\x36\x23\x3e\xb4\x6d\x67\xc8\xa6\x29\x32\x13\x89\x26\xb4\x3f\xd3"
+ "\x6d\xb5\x10\x83\x3a\xf0\x81\xdb\xba\xb1\x5f\xfe\x69\x1d\x1f\xd5"
+ "\x43\x36\x32\xe2\x7a\x3a\x49\x69\x1f\x6f\x47\xf7\xa5\xde\x97\x46"
+ "\x25\x43\xce\x6b\x03\xe8\x61\xe1\xfe\x1f\xe1\xb8\x34\xcf\x2c\x0b"
+ "\x43\x74\xcc\x25\xd6\xe1\x6e\x1a\x2d\xf8\xb6\x29\x24\x96\xb5\x58"
+ "\xf8\x37\x7d\x11\xed\xad\xa5\x2e\xbc\x8c\x5a\x0e\xf6\xdb\xdb\x22"
+ "\xc2\x6b\xf9\xea\xff\x23\xee\x7b\xa0\xa3\xaa\xae\xbd\xcf\x9d\x4c"
+ "\x60\x12\x92\x4c\xc0\x08\x23\xa2\x0c\x36\xd8\x80\x20\xa9\xd2\xf7"
+ "\x51\x3f\x5a\x83\xa2\x0f\xdf\x02\xa1\x2d\x7d\x2b\x6d\xa9\x21\x9a"
+ "\xd8\x50\x11\xa6\x24\xc0\x80\xf9\xc7\x00\x69\xc0\xfc\xb3\x46\x8c"
+ "\x10\x42\xb4\xd8\x87\x2d\x6a\xda\x62\x1b\x5b\xd4\x51\x62\x8d\x35"
+ "\xc9\x44\x4b\xdb\xd4\x42\x3b\xa4\x21\x0c\x69\x80\x81\x0c\x99\x31"
+ "\xcc\xdc\xf3\xed\xdf\x39\xf7\xce\x4c\x62\x82\xf2\xde\x5b\xeb\x63"
+ "\xad\x30\xf7\x9e\x7b\xfe\xee\xb3\xcf\x3e\x7b\xef\xb3\xcf\xde\x23"
+ "\xbe\x77\xca\x39\xd8\x92\xa6\xc6\x45\xeb\xba\xed\x9e\xe1\x34\xc9"
+ "\xde\x39\xbc\xdc\x96\x11\xf2\x9f\xdd\x8e\xef\x9f\x6f\xbf\xd9\x92"
+ "\x39\xf6\x7e\xb3\xe5\xb4\x1c\xff\xd6\x11\xe7\xcb\x5b\xec\x57\xdf"
+ "\x6f\xb6\x8c\x31\xfe\x2d\x4d\xc3\xf7\x9b\xad\x23\xce\xe8\xb7\x74"
+ "\x8e\xbe\xdf\x6c\xf1\xe8\x74\x46\xd2\x8d\xad\x8b\x3e\x1f\xbd\xd9"
+ "\x6a\x1d\x4e\x6f\xb6\x9a\x3e\x8b\xde\x1c\xfb\x14\xbd\xd9\x9a\x63"
+ "\xae\x1f\x6d\x2c\x5b\x0b\x47\xa7\x37\x5b\x6b\xe5\x1c\x12\xd3\x32"
+ "\x8c\xde\x6c\x3d\x3c\x7c\x0e\xb7\x8c\x98\xc3\xad\x23\xce\xbf\xb7"
+ "\xd8\xff\xbb\x34\x29\x26\x26\xc6\x10\xa3\x18\x94\x18\xfa\x44\xc3"
+ "\x63\xe3\x63\x8c\x31\xb1\xf4\x37\x4e\xfb\x1d\x6f\x88\x31\x18\xe9"
+ "\x2f\x56\xfb\x1d\x37\xe2\x7d\x3c\xca\xd2\x9f\x51\xfb\x8d\x1d\xf1"
+ "\x3e\xee\x33\xbe\x8f\xd7\xda\xd5\xdb\x37\x8e\x78\x8f\xfd\x8c\xef"
+ "\xe3\xfe\x87\xe5\xd9\xa7\xde\x87\xdf\x83\x7c\x60\xdd\xa6\xec\xb5"
+ "\x6b\x72\x84\x5d\x7b\xae\x35\xfb\x91\x47\x72\xf3\xf3\xad\x05\xeb"
+ "\xad\xf7\x2c\xfa\xc6\x1d\x77\x59\xa5\x79\xfc\xda\xaf\xce\xcc\x89"
+ "\x67\xcb\x36\x6f\xc0\x87\x65\xdf\x7c\x20\xd3\xba\xe2\x9e\x45\xc3"
+ "\x3f\xea\xd5\x08\x33\xf8\xab\xd5\x12\xb5\xf6\x32\x76\x4d\x66\xac"
+ "\x62\x8f\xa0\x3b\x3d\xb8\x7b\x2e\xe5\x89\x6d\x0f\xb4\xe1\xfe\xf2"
+ "\x50\x09\xc7\xbd\x8a\x6e\x56\x78\x0e\x83\x98\xdb\x58\xca\x6c\x0f"
+ "\xc3\x9f\x4a\x51\x1c\x7f\xd3\xcb\xac\xff\xc1\x0c\xdd\xac\xec\xdb"
+ "\x2d\x4b\x28\x2f\xbd\xbb\xdc\x41\x66\x2d\x01\x6f\x5b\xfa\x09\x7d"
+ "\x53\xf8\xd7\x54\x4a\xf3\x69\xf7\xf3\x4b\xe3\x44\xda\x9b\xa5\x7a"
+ "\x3e\x73\x2f\x2b\x7a\x99\xbf\xc9\xc5\x3b\x7c\xd6\xc8\x7c\x45\xdb"
+ "\xb8\xa1\x30\x03\x74\xa1\x7e\x12\x33\xc2\x2e\xfb\xb9\x49\xcc\xf4"
+ "\xdc\x64\xf8\xf8\x2d\x2a\xd0\xed\xb2\x77\xd1\xbb\x9b\x95\x65\xa2"
+ "\x6d\xe4\x55\x0d\x85\x3f\x40\xfe\x86\xe1\xf9\x0f\x46\xec\xb8\x8b"
+ "\x10\xdf\x2b\x61\xf9\x29\x66\x36\x87\xf8\xc5\x40\x7c\x7f\xd3\xed"
+ "\x4b\x88\x4f\xa3\xa9\x68\x0b\x96\x32\x79\x37\xaa\xe8\xdc\x96\x10"
+ "\x0f\xc2\x67\xc2\xb2\xfe\x12\x5e\xfd\x38\x33\xd2\x7a\x56\x9c\x1b"
+ "\x70\x97\xa2\xe8\xf8\x81\x5c\x66\xa4\xf1\x4f\xeb\x63\x25\x46\xeb"
+ "\x83\xc4\x37\x2e\x63\xc6\x3f\xd8\x71\xdf\xd5\xff\x51\xd5\x47\xcc"
+ "\xf8\xf3\xa1\x52\xc3\x10\xb7\xb0\xc2\x02\xee\xe1\xf0\xfb\xed\xe3"
+ "\x01\xd8\xdb\xb6\xad\x0e\x21\xcf\x3b\xfe\x12\x0b\xeb\x28\xf0\xb1"
+ "\xa2\x13\x3c\x50\xfe\x91\xf4\x57\xd1\xde\xef\xc3\xfd\x59\x53\xd1"
+ "\x32\x16\xd3\x9b\xc9\x0c\xed\x79\x75\xcc\xb5\xca\xc7\x0a\x4f\x70"
+ "\x4f\xdb\xea\xd3\xac\x23\xaf\x89\x65\x75\x31\x43\x5b\xcf\x49\x26"
+ "\x7c\x57\x57\xcd\x73\x16\x5f\x66\x96\xa2\x35\x48\xbb\xcc\xb6\x16"
+ "\xb1\xc4\xad\x7f\x82\x1c\xd4\x45\xed\x9c\x63\xdf\x39\xce\x14\xaa"
+ "\xcf\xf0\xc4\x49\x66\x79\xe2\xdb\xe2\x9e\x39\xab\x2f\x66\x16\x5e"
+ "\x92\x96\x30\x54\x92\x96\x3c\xc4\xd3\x26\xf9\x4b\xd2\x52\x3a\x6c"
+ "\x94\xbf\xe7\x0d\x96\xd4\xc5\x52\xde\xec\xeb\x32\xd4\x5d\x62\xd3"
+ "\x30\xa6\x5e\x1a\x5b\xfd\x25\xca\x5f\x15\x9b\xa1\x52\xd9\xe8\x32"
+ "\xc1\xc4\xd8\x4c\x57\x66\x80\xa9\x54\x57\xdd\x10\x9b\x56\x3f\xc4"
+ "\x2c\x6a\x65\x6c\x06\xca\xf5\xc3\x87\x1c\x51\x8c\xc2\x22\x1e\xba"
+ "\xb2\xdb\xd7\x44\xf4\x70\xfc\xab\x0f\x37\x1b\x5d\x6d\xfd\xac\xdd"
+ "\x37\xc4\x3a\xd8\xc7\xcc\x65\x3f\xe3\xfc\xf9\xc3\xcd\xb1\xc4\x4f"
+ "\x2a\xce\xad\xb0\x81\x97\xb8\x53\xd2\xce\x8c\x2e\x9a\x83\xea\x62"
+ "\x96\x60\xdb\xca\xc6\xf7\x51\xba\xa0\x3d\xe5\x67\x9a\x5d\xc1\x33"
+ "\xce\xad\xe2\x3e\x78\x59\x66\x71\x3b\x8b\xe9\xf0\xd5\xe1\xde\xb1"
+ "\x21\x94\x34\xcf\xe9\xf2\x75\x32\x97\xed\x1f\x4e\x35\x61\xde\xa1"
+ "\x0a\x95\x99\x5e\x1e\xec\x34\xb8\x8c\x83\xcc\x95\xe9\x63\x6f\x51"
+ "\xdb\xbc\x6a\x5e\x1b\xd1\xac\x8c\x0e\x5f\x00\xfe\x77\xd2\xf9\x80"
+ "\x25\xbe\x7a\x03\x9b\xd3\x70\x89\xa5\xee\xbf\xc4\xd2\xb8\x3f\xcd"
+ "\x80\x3b\xde\xf0\xa9\xb6\x9f\x7e\x13\x48\x06\xa3\xb1\x8b\xbb\xde"
+ "\x3c\x51\xbb\xeb\x7d\x25\x8d\x1d\x18\x8a\xdc\xf5\x1e\x1a\x88\xdc"
+ "\xf5\x26\x9c\xb2\xe3\xbe\xb7\x9b\x95\x24\x98\xdb\xd8\xf8\x6e\x56"
+ "\x94\x0e\xfc\xae\x3e\xcf\x8c\xdb\xcf\x33\x76\x7b\xa9\x01\x72\xa6"
+ "\x91\x70\xff\x9c\x8b\xe6\x06\xcf\xdd\xac\xf4\x20\xfd\x26\xd0\x1f"
+ "\xc9\x73\xa5\xc2\x57\x45\x8f\x86\xc7\x94\x66\xa0\xb4\x4a\xfa\x8d"
+ "\xa1\xdf\x9d\x25\xf5\xdc\x4b\x6d\xd5\x10\xaf\x12\x0f\x7c\xd6\xee"
+ "\x97\xd7\xf8\x1d\xa5\x85\x6e\x76\xb8\x47\xc7\x6b\x49\xdf\x8b\xec"
+ "\x6f\x75\x9f\x83\x7f\x79\xaf\xe8\xd7\x95\x3c\x05\xbe\xe6\xb5\x74"
+ "\xf4\xe1\x34\xda\xa5\xf6\x5b\xe9\xd7\x2c\x65\xd0\xd2\x55\x7a\xd9"
+ "\x81\x2b\x79\x68\xf3\x24\xa5\x73\x3d\x9d\xc6\x6d\xc4\xb7\x5f\x75"
+ "\x9f\x33\xc8\x3c\x69\x06\xaa\x33\xa0\xd5\x4f\x6b\xbf\x68\x1a\xd6"
+ "\xf8\x80\xc1\xcc\x8f\xad\x9e\xcf\xea\xf7\xf0\xb6\xfd\x7b\x78\x8b"
+ "\x5c\x7b\xdb\xac\x6e\xf6\x4a\x39\xfa\x48\x7b\x78\x4b\x05\x7d\x3b"
+ "\x46\xdc\x0f\xe0\xd2\x92\x03\xfb\xd2\x6d\x19\x6e\x76\x4b\x4a\xf4"
+ "\x18\xb8\xe3\x09\x2b\xf6\xd1\x57\x8a\x5b\x63\x89\x06\x58\x3b\x7a"
+ "\xfa\xd9\xcf\x87\x3c\xb1\x25\xef\x33\x83\x2b\xd8\xcd\xe6\xa5\xc8"
+ "\xb8\x3c\x07\xf6\x70\xf7\xd3\x88\x57\xbc\x87\xf7\x13\xbe\xdc\xd4"
+ "\xc7\xb6\x55\xde\x96\xc2\x52\x3e\x20\x29\x58\xd2\xa7\x6d\x2f\x46"
+ "\xd1\xa7\xb9\xed\xee\xe6\x28\xda\xb4\xf3\xe4\xa7\x69\xd3\x8e\xbf"
+ "\x4a\xda\x44\x6b\x5f\xd0\xa2\x90\x5b\x4b\x7f\x77\x44\xba\x76\x7f"
+ "\x65\xc7\x4b\x23\xd2\x03\x5a\xfa\x33\x23\xd2\xbd\x32\x7d\xfb\x9f"
+ "\x74\xda\xd7\x81\x7e\x6c\x06\xed\xdb\xfe\x3a\x68\x5f\xc7\x6a\x8d"
+ "\xf6\x09\xfa\xb3\x7d\x3f\x7f\x81\x68\xd1\x26\xd0\x9b\xed\x1b\xd1"
+ "\x7f\xfe\x26\xd3\xfb\x1e\x47\x69\x5f\x46\x5a\xcd\xc7\xcc\x48\x7f"
+ "\x3a\xdd\xfb\x11\xe8\x1e\x68\x1e\x68\xdf\xbe\xc9\xbc\x6b\xdf\x1e"
+ "\x7e\xbc\x5e\xf8\xc9\x76\x84\xe9\xdf\x93\x94\x56\x41\x69\x4f\xd2"
+ "\x77\xd0\x41\xc0\xa4\x3d\xb3\x99\x89\x38\x3a\xe5\xfe\x4e\xd5\x90"
+ "\xce\xaa\x68\xbe\xe1\xff\x6a\x07\xc1\xd7\xac\x30\x9b\xab\xc0\x27"
+ "\xee\xa1\xc0\x37\x7b\x47\x41\x0f\xd6\xdd\xe4\xed\x2a\xf4\x14\xa7"
+ "\x59\xb1\x8f\xf7\xe1\xae\x0a\xfa\x90\xb5\xe5\x3f\xe0\x5b\x5c\x69"
+ "\xc9\x63\x0c\x7e\x09\x40\xb3\xa9\x2f\xc6\x1a\xea\x93\xf4\x65\xbc"
+ "\x7d\x8e\x9b\x75\x1f\x95\x73\x5d\x96\x89\x38\x06\xdd\xcc\x61\xe3"
+ "\x0e\xa2\x8f\x34\x36\x73\xa8\x94\xc1\x37\x0b\xe2\x79\xe2\x77\x9f"
+ "\x41\xcd\xab\xd1\xfd\xb3\x38\x88\x36\x50\x1e\x57\x57\x80\xa1\xcf"
+ "\x6e\xe6\x38\xda\x5e\xd8\x8c\xf2\xab\x01\x1b\xee\x28\xd1\xeb\x50"
+ "\x44\x1d\x06\xa1\xbb\xcd\x73\xb3\xed\x2b\x44\xf9\x78\x5f\x53\xfb"
+ "\x2a\x2f\x03\xdd\x77\x79\xa8\x8e\xc2\x6e\x59\x07\xd5\xc5\x69\x0f"
+ "\x18\xf6\x4d\xab\x3f\xb1\x88\x5f\xa4\xfa\xe7\x60\xbe\xe0\xa7\x0b"
+ "\x76\x4a\x04\x97\x04\xf8\x6a\x90\x7c\xa8\xe3\xb5\x03\x1f\x33\xa6"
+ "\xf9\x1a\x23\x7c\x73\x1c\x81\x2f\x2f\xf8\x17\xbb\x9a\x6f\x31\x82"
+ "\x51\xaa\xee\x5f\x4c\xdd\xfc\xbf\xeb\x5b\x8c\xea\xb6\x34\x18\x78"
+ "\x13\xf5\xff\x08\xfc\x8b\x51\xff\x53\x80\x87\xda\x98\x9a\x9f\xf9"
+ "\x0e\x60\xbe\x2d\x88\xb4\x6a\x07\x6f\xd5\xe7\x1f\xe3\xc5\x58\xe8"
+ "\x9b\x5b\xf2\x87\xbc\xd3\xcd\x76\x34\xe3\x3b\xa5\xb5\x21\xff\x3c"
+ "\xa2\x63\x2e\xda\xc3\x5e\xed\x0e\x19\xaa\xb7\x32\xa3\xa4\x69\x3b"
+ "\x3f\x44\x79\x49\xd3\x76\x96\x47\x68\xda\xce\x22\x49\xd3\x24\x8c"
+ "\x25\x4d\xdb\xf9\x43\x49\xd3\x76\xae\x11\xf6\x44\x44\xd3\xf0\x0d"
+ "\x74\x4d\xa7\x69\xfb\x27\xf3\x56\xd0\x0e\xbf\x63\x67\xa6\x4e\xdb"
+ "\x2a\x29\x0d\xb4\x03\x7d\x94\x74\x6a\x7b\x13\xff\x5b\x1a\x93\xf6"
+ "\x9a\x78\xce\x83\xff\x0c\x8f\xf6\x4c\xf3\xb2\xf3\x7d\x49\xe3\x76"
+ "\x1e\x8e\xd0\xb8\x9d\xe9\x91\xb2\xa0\x71\x3b\xdf\x96\x34\x4e\xa6"
+ "\x1f\xf8\x0e\x68\xdc\xf6\x26\xc0\x40\xab\xdf\x80\x73\x34\x2d\x3f"
+ "\xc1\x71\x5b\x73\x34\x8d\x1b\xbe\xbe\xca\x8c\x3a\x8d\x03\x6d\xa3"
+ "\xf7\x14\x37\x9b\x21\xce\x88\xb1\xce\x6a\x09\xe6\xfa\xba\xc3\x1c"
+ "\x60\xcc\x88\x57\x00\xb8\xdd\x7b\x8e\x8d\xd7\xfc\xd6\x68\xe3\x2e"
+ "\x5b\xa1\xdf\xd1\x74\xb3\x9d\x9f\xf6\x69\xc6\x22\x7e\xc9\x68\xae"
+ "\xa7\xc3\x97\xa3\xab\xb4\x9b\xb9\xea\x78\x69\x47\xf0\x04\x53\xb7"
+ "\x3f\x76\x0a\xf3\x4a\xf2\xc6\xff\xc5\x2f\xe8\x0e\xed\xa3\x4f\x65"
+ "\xf9\x84\xfe\xfe\x54\xb5\x81\xbe\xd9\x87\x7d\x7b\x19\x6d\x40\xaf"
+ "\x48\xcf\xf6\xb1\xf4\x08\xd7\xd0\x56\x68\xec\xb6\x7e\x74\x83\x68"
+ "\x8b\x78\x29\x92\x7b\x26\x9e\x67\x65\xe2\x0c\x4d\xf8\x6d\x1e\xb5"
+ "\xae\x1f\x3d\xa0\x7d\x8f\x19\xe3\xfb\x9a\xcf\x28\xbf\xeb\x33\xca"
+ "\xbf\x04\x1a\x84\xfb\x78\x21\xc7\xf0\x7a\x92\x82\x7a\xbe\x3e\xe4"
+ "\xfb\x50\x3b\x07\x39\x55\x32\x43\xc8\x65\x16\xbd\x4e\xe0\x5d\x15"
+ "\xe5\x13\x3e\x82\x89\x46\x2e\xde\xc2\xe0\x9f\x33\xaa\x6c\x79\x62"
+ "\x04\xbe\x3f\x72\x5e\x45\x4f\x93\xe0\xaa\x63\x0c\xf1\xec\x8f\x11"
+ "\x2f\x8a\xbb\x34\xb5\xe1\xb3\x87\xf2\x1c\xa2\x97\xe2\x8e\xbe\x76"
+ "\x6f\xb7\x9f\xe8\xdb\x74\xe9\x1b\xd9\xa7\xdf\xb5\x98\x42\x74\x79"
+ "\x12\xfc\xb0\x40\x5f\x9d\x15\x5a\x61\x38\x26\xfc\xfd\x97\x37\xea"
+ "\x65\xc7\xd2\xed\xa1\x5d\xad\x4d\x71\x0f\x89\xca\x1c\xd7\xcb\xa0"
+ "\x6e\xdc\xbd\xa1\xfd\x78\xba\xf0\x6f\x16\xec\x07\x0d\x9c\x42\x3c"
+ "\xe8\x24\xd9\xce\x6a\x26\xdb\xd9\x65\xa2\x32\xc7\xaf\x76\xcf\x69"
+ "\xec\xf1\xed\x5a\x7c\xed\xe3\x63\xda\xf8\x76\x95\x7e\xc6\xf8\xae"
+ "\xd6\xee\xd1\x6b\x6f\x37\x59\x6f\x37\x70\xed\x70\xdd\x3d\xe7\xf3"
+ "\xc3\x35\x5d\x83\xeb\xee\xd5\x9f\x01\xd7\xd1\xda\xa9\xfd\xfc\xed"
+ "\x58\xf5\x76\x5a\x47\x6b\x87\x89\x7f\x63\xfa\xeb\x31\xe9\x31\x69"
+ "\xb4\x38\xc8\x71\x7e\xc7\x93\xc9\x6e\xb6\x2b\x45\x3f\xdf\x92\xf1"
+ "\x99\x9e\x4c\x75\xb3\xdd\xc6\xe1\xf7\xb8\x9e\x5c\x94\xd5\x88\x7d"
+ "\x9d\xab\x6e\xf6\xe4\x62\xe8\xda\x16\x17\x49\xff\x80\x5a\x19\xa2"
+ "\xff\xbb\x2a\xae\x76\x9e\x26\x62\x6f\x68\xbe\x3b\x70\x3f\x95\x57"
+ "\x19\xad\x03\x25\x79\x4c\xc6\xa6\x7e\xf2\x25\xdc\x43\xa2\xe7\xf1"
+ "\x78\xa6\x5f\xda\x03\x2a\xa4\x1d\x1e\xe2\x1a\x48\xdf\x14\xe3\xe8"
+ "\xdb\x27\x88\x7b\x21\xef\xf1\x3d\xd9\x46\xfd\x14\x31\xab\xa5\x2f"
+ "\x7f\xe1\xe3\xc5\x47\xf9\x0c\x28\x2b\x7d\x7b\x3c\xe9\xd5\xf3\xb8"
+ "\xf5\xfa\xc2\x7e\x2e\x9e\x7c\x5b\xee\x31\x4f\x3a\x07\xc6\x88\x9f"
+ "\x04\x7f\x67\x07\x8b\xd3\x87\xdd\x43\xbc\x6f\xc3\x86\xf5\x1b\xee"
+ "\xb2\xe6\x3f\xfe\xf0\xdc\xfc\x82\xec\x82\x8d\xf9\xe2\xc2\x7a\x3c"
+ "\xa3\x04\x6b\xc1\x9a\xc7\x73\xd7\x6f\x2c\x48\xdb\x9c\xbd\x46\x5e"
+ "\x70\x9f\x45\x19\xa3\x33\xb1\xe1\xf1\x2a\x89\x16\x41\x7f\x03\x5f"
+ "\x14\x22\x66\x25\x7c\x92\xe8\xf7\x77\x5b\x2c\x22\xb6\x17\xd1\xae"
+ "\x8a\x23\x6e\x66\xcb\xd4\xe7\x03\x7e\x12\x89\x7f\xb1\xf4\xb1\x8a"
+ "\x0f\x81\x43\xcb\x89\x15\x3d\x20\xfd\x4b\x08\x1f\x01\xae\x02\x4a"
+ "\xe8\x60\x26\xe7\x26\xe8\x63\x2b\x97\xa8\x8e\x8a\x05\xc2\xef\xe3"
+ "\xd6\x3e\xbc\x3f\xae\xf3\x0b\x38\x5f\x92\xe7\xc1\xd3\xef\xee\x66"
+ "\x15\xfb\xd1\x2e\xd6\x5f\xc3\x8f\x65\x8c\x70\xee\xa8\x58\x81\x3b"
+ "\xdb\xf4\x6e\xf2\x3b\x2a\x17\xe8\x3c\x29\xf5\x37\x81\x27\x1a\xd3"
+ "\xdc\xac\x72\xed\x3b\xc9\x5e\xa6\xdd\xf9\x36\x35\xc8\xfb\xdd\x46"
+ "\xca\x9b\x13\xce\xeb\xa0\xbc\x95\xc6\x34\xda\x3f\x47\x3d\xd3\xe6"
+ "\x49\x4a\xb3\x7a\x25\x33\x36\x7a\xcc\x24\x5f\xd3\xfc\x55\xdd\x44"
+ "\x63\x4f\xd1\x71\x46\xce\x7d\x55\xac\xf0\xbf\x5c\xa5\x34\x53\xda"
+ "\x38\xfa\xed\x1c\xa0\x6f\xf0\x85\x40\xe3\x82\x1e\x5a\xe9\x28\xbc"
+ "\xe0\x3c\x66\xe9\xa6\x79\xaf\x24\xfe\x62\x93\xf4\x53\x4a\x6d\x70"
+ "\x6a\xc3\x55\x3a\xc4\x5a\xac\x1c\x7a\x67\x9a\xf3\xaa\xf9\x2d\x56"
+ "\x1f\xe3\x31\xdf\x3d\x85\x72\xb4\xbe\x2c\x25\x76\xf0\x24\x94\x2e"
+ "\xee\xe9\x55\xa5\xe9\x30\x2f\xb0\xf2\x73\xc8\x33\x96\x7e\x19\xfb"
+ "\x66\xb5\xd8\x53\x2e\x31\xd8\x62\xf5\xb0\xaa\x4f\xdd\x79\x9c\x99"
+ "\x73\x97\x35\x27\xbb\xc0\xba\x76\xcd\xba\x5c\x6b\xce\x9a\x1c\xeb"
+ "\xba\xf5\x05\xd6\xef\xaf\x87\xa2\x07\xaa\x9d\x61\x38\xa1\x62\x7c"
+ "\x9b\x33\x63\xf5\xb3\xec\x81\xcd\x79\xe3\x24\x4e\x57\xbf\x38\xe0"
+ "\xcf\x1b\x3f\x1c\x26\xd5\xda\x9e\x59\xd5\x45\xf3\xa1\xf9\x04\x88"
+ "\xf1\xd0\x3b\xc6\x92\x31\x7c\x0d\x57\xff\x49\xe6\xad\x36\xea\x79"
+ "\x05\x5e\xdc\xd2\x17\xfe\x56\xad\xe1\xe3\x01\x79\x5f\x59\xf8\xbf"
+ "\x39\x20\x6c\xf9\xab\x17\x8c\x59\x06\x3e\xbf\xb6\xb2\x47\xce\xb3"
+ "\xea\x19\xdc\x51\xb5\x56\xc3\x21\x93\x5a\xa1\xb4\x6a\xf8\x43\x38"
+ "\x51\x6d\xff\x34\xfe\x54\x1f\x07\xfe\x70\x7f\xa6\x49\xd8\x7d\x04"
+ "\x03\x44\xef\xe8\x9d\xf6\x69\xea\xfb\x09\x8c\xc3\xb7\x39\xd3\x54"
+ "\xf2\x9c\xf0\xc3\x77\x16\x67\xa8\x88\x8b\x43\xb8\x12\x27\xe3\x77"
+ "\x56\xb7\xe9\x73\xa4\xe7\x1f\x7d\x0d\x0b\x7c\x19\x8e\x63\x02\x9e"
+ "\x35\x33\x05\x8e\x11\x9f\x40\x7d\x32\xe8\xfe\xfe\xb0\x97\xb8\x59"
+ "\xcd\xc2\x82\x22\xce\xfd\x8e\x9a\xf4\x28\x3c\x38\x3f\x1a\x1e\xd0"
+ "\xdc\x3e\xb2\x76\xfd\x23\x8f\xd1\x42\xdf\x90\x5b\xf0\x48\x1e\x7c"
+ "\x5c\x80\x0e\x08\x07\x1a\x33\x73\xac\x1b\xf3\x73\x1f\x89\x67\xa3"
+ "\xe5\x0a\x7f\x8c\x9e\xff\x64\x95\xf0\x75\x60\x20\x33\x16\x77\x2d"
+ "\xe4\xdd\x8a\xa7\x2e\x0f\xe4\x93\x4c\x32\x6c\xde\x9f\x3a\xeb\xb2"
+ "\xa4\x13\x6f\x97\xce\x04\x2f\x4e\x30\x93\xf6\x02\x3f\x9e\x0b\x38"
+ "\x0c\x18\x14\xda\x57\x6a\xfa\x75\x1c\xa0\x67\xda\xff\xaa\xdd\x11"
+ "\x5b\x8d\x1f\xcf\x19\x30\xc4\x9e\x00\xfd\x91\x76\x21\x7d\x44\x07"
+ "\xcc\x07\xba\xd9\x53\x42\xfe\x6a\x10\xfb\xd2\x53\x73\xf4\x32\x55"
+ "\xe1\xfb\xce\x4f\xd5\xea\x78\x12\x55\xe6\x26\xa4\x09\x9f\x47\x8e"
+ "\x9a\x25\x98\x73\x2e\xe7\xde\xa8\xe7\x23\xb8\xf2\x03\x82\x8e\x3c"
+ "\x55\x3a\x92\x36\xbc\x93\x8c\xb3\x71\xd9\x1f\x81\x7f\x09\x4a\xa3"
+ "\xf0\x9f\x42\x3c\x1f\xd5\x5d\xa9\xd9\xa9\x74\x0a\xde\xc0\x4e\x75"
+ "\x05\x64\x5d\xd4\xd6\x3a\xbd\x2d\x9e\xa8\x34\x1e\x10\x78\xf6\x94"
+ "\x3b\xa2\x3b\x7c\xaa\x02\x32\x33\x1f\xc8\x1c\x47\xf3\xd9\x26\x70"
+ "\x8b\x9e\x0b\x6e\x90\xbe\xdc\x80\x6f\x18\x27\xf0\x2a\x82\x53\x3f"
+ "\xb6\xea\xf3\x8d\x31\x53\xb9\xe3\x56\xe1\xef\xf7\xc7\x0b\x74\x58"
+ "\x8e\xe5\x73\x46\xac\xdb\x04\xea\x8b\x5f\xae\x5d\x21\xef\x49\x3f"
+ "\x43\xb8\xef\x12\x43\x7d\x6c\xed\x65\x4f\x3f\x00\x1b\x7e\x73\x80"
+ "\xe6\xac\x52\x69\x85\x0f\x05\xb9\x97\xfd\xb8\x8e\xea\xaf\x88\xdc"
+ "\x51\xff\xf1\x21\x6a\xbb\x42\xce\xdd\x8f\x8f\x44\xad\x3d\xaf\x66"
+ "\x17\x30\x1e\x30\x02\x3d\x73\xd9\xef\x13\xeb\x55\xde\xff\xfd\xb1"
+ "\x5b\x2f\x27\xfc\x0d\x10\x6e\xc0\x1e\xf6\x3c\x7b\x5a\xf0\x1b\xe8"
+ "\x1f\xc1\xba\x14\xed\x63\x7c\xd8\xbb\x05\xde\x58\x10\x2f\xe5\xe9"
+ "\x69\xc3\xfb\xf0\xf4\x1c\xbd\x2e\x59\xf7\xd3\x0b\xf5\x77\xf8\x1f"
+ "\x73\xb3\xda\x56\xc4\x9f\x3c\xe6\x13\x63\x98\xd0\x52\x40\x6b\xcb"
+ "\x27\xf2\xe5\xe8\x30\xa4\xf4\x52\x7a\x2f\xa0\xbd\xd7\x2e\xe6\xbc"
+ "\xc2\x98\x26\x69\x51\x6d\x0b\x7c\x5b\x95\x58\xe1\x9f\x70\xa1\xa4"
+ "\x37\xc2\xa7\x8e\xf8\xb6\x4d\x5b\xb3\x71\xb8\x2b\x24\xec\x63\x7c"
+ "\x41\x41\x1b\xa4\x0f\x06\xfa\x4e\x6b\xc4\x8f\xf8\x2f\x57\xf2\xe2"
+ "\xb4\xbe\x75\x85\xdb\x40\x5c\x4c\x71\x16\xf9\x74\xab\xf4\x69\x32"
+ "\x9e\x64\xbe\xa7\x03\xfa\xfc\xed\xd8\x43\x69\x88\xdb\x6a\x60\xa6"
+ "\x16\xe1\x33\xac\x36\x45\xef\xaf\xf6\xcd\x20\xf0\x41\xc0\xa0\x36"
+ "\xbc\xfe\x07\x44\x8c\xd1\xda\x0c\xbd\x1d\x91\x97\xf2\x21\x7f\x4b"
+ "\xaa\xf8\xb6\x2a\x5c\x8f\xf4\xa5\x62\x12\x71\xa6\x1b\xc5\x37\x7b"
+ "\x84\x56\x3d\x2d\x6c\xc6\x84\xfd\x1a\x8d\xc3\xfb\x44\x5e\x9c\x98"
+ "\x03\x2b\x8b\xa1\x32\x88\x5f\x6c\x90\xb8\x58\x7b\x58\x2f\x13\xa3"
+ "\x00\x8e\xb5\x47\xf5\xb6\xf5\x3a\xd0\xff\xab\xd2\x3c\x39\x16\x23"
+ "\xd6\x88\x16\x2b\x54\xd0\x0b\xc9\x73\x3d\x73\x9f\xc0\x41\x31\xce"
+ "\x67\x2c\xd1\x73\x2d\x79\xba\x67\xe6\x44\xe1\x03\xf5\xe7\x99\xf0"
+ "\xfc\xbb\xd9\x33\x5a\xdc\xce\x67\x56\x44\xf5\x31\x83\xde\x57\x87"
+ "\xe7\xa1\x4a\xcc\x11\x62\x00\x8d\x1a\x67\x52\xac\x15\xca\xa3\x72"
+ "\xd1\x4f\xcc\x07\xc9\x64\x0b\x58\x0b\x78\x43\x5a\x2b\x04\x13\xf4"
+ "\xf1\x34\xf0\x8a\xea\x6d\x1e\x8e\x9b\xcf\xb4\x46\xf5\x57\x01\x5d"
+ "\xa7\xb4\x13\x7a\x1e\x37\xdb\x23\xce\xe8\x74\x78\xd2\xb7\x40\x78"
+ "\x1e\xef\x40\xde\x3d\x26\xbd\x9f\x9f\xb1\x67\x68\xb0\xda\xb3\x48"
+ "\xb6\xb1\x27\x43\x6f\x83\x9e\x97\xd2\x1a\xf8\x14\x0f\xfe\xf0\x96"
+ "\x82\x5c\xe9\xe4\x08\x9b\x7c\xf6\x23\x8f\xe5\xe6\xcc\xb1\x66\x3f"
+ "\x0a\x77\x48\xf9\x6b\x73\x73\x6d\xe2\x30\x67\x38\x1f\x98\x22\xda"
+ "\x23\x38\x48\xdf\xd3\xcf\xc2\x1f\x8a\x4f\xdb\x87\xb1\xde\xbd\x58"
+ "\xef\xc7\x0a\x2f\x09\x19\xc7\x55\x7a\x07\x73\x05\x78\x29\xe4\x00"
+ "\x41\xfb\x30\x7e\x8b\x4f\xee\x03\x34\x9f\xd8\x23\xa9\x6f\x9e\xe1"
+ "\xf0\xda\x13\x18\xbe\x96\x9f\x35\x8d\x4e\x27\xf6\xbc\x24\xe8\x44"
+ "\x85\xc4\x0b\xd0\x27\xdc\x01\x40\xbd\x54\x66\xe1\xf0\x3a\x9f\x5d"
+ "\x1a\xa1\x51\xcf\x66\xea\x34\x4a\xee\x13\xcf\x16\xd2\x1e\x54\xa3"
+ "\xb5\x55\x10\xc1\x9b\x67\x7d\x12\x6f\x9e\x2d\x77\xb3\x97\xc3\xfe"
+ "\x3e\xe4\xde\xb1\x27\x13\xfc\xa3\x8c\xeb\xfd\xec\x21\xbd\xbe\xda"
+ "\x49\xd8\x37\x9e\x6d\xfe\x34\xff\xf0\x6c\x0e\xf8\x07\xd8\x27\x02"
+ "\x16\x22\x8e\xb1\x58\x37\xcf\xf6\x44\xd1\x9f\x64\x7a\xf7\x8d\x36"
+ "\xd7\x0f\x63\x3b\x9e\x8b\x63\xb7\xb9\x8f\xac\x2b\xf8\x2a\x5c\x55"
+ "\xe5\xda\x6d\xb9\x8f\x14\xe4\xe6\x8c\x3c\x6f\x4b\xd3\x79\x31\x9c"
+ "\x75\xd7\xd2\xba\xf7\x26\x02\x1e\x75\x34\xfe\xbd\x05\xfa\x18\x04"
+ "\x9d\x22\xde\x51\xa3\x71\x09\xbd\x6c\xef\x22\x19\xc3\xbc\xae\x40"
+ "\xc7\x13\xe4\xbb\xd7\xce\x55\x4a\xa3\xf1\xef\x29\xd5\xe4\x2e\x92"
+ "\x6d\xeb\xea\xf4\xf7\x48\xf9\xba\x93\x62\xef\xdb\x23\x6c\xfb\x08"
+ "\xa6\xcf\xad\x8a\xe2\xb7\xf0\x3e\x5f\x7b\x17\xfe\x98\x64\x3c\xf6"
+ "\xba\x8b\x12\xbe\x75\x34\xff\xcf\x68\xb4\x62\x6f\x86\xac\x87\xb1"
+ "\x9f\x14\x7b\x63\x0f\x08\x3d\xff\x73\x26\xbd\x3d\x2a\x7f\x22\xba"
+ "\x4d\xec\x5b\x23\xeb\x73\xb3\x3a\x61\x47\xb5\x5d\xf8\x92\x7b\x6e"
+ "\xf1\x28\x7d\x6d\x8d\xce\x47\x79\xf2\x28\x4f\x8a\x3e\xe6\x6f\xda"
+ "\x45\x5a\xe1\x55\xc6\xd8\xaf\x8d\x31\x00\xdc\x42\xfb\xc0\x7f\xad"
+ "\x0f\x27\x34\xff\x24\x6e\xc4\x8d\x44\xff\x85\x9f\x34\x0b\xd6\xf5"
+ "\x73\x9d\xb4\x9f\x2d\xd6\xc7\x81\x31\x1e\x29\xf6\x1a\x75\xff\x54"
+ "\xb2\xfc\x73\xaf\x0d\xef\xdb\x5e\x63\x54\x19\x8f\xf3\x16\xe8\xf0"
+ "\x9f\xdb\xcf\x1d\x75\x42\xfe\x81\xdf\xaa\xda\x30\x1e\xee\x4d\xff"
+ "\x34\xde\x3d\x57\x0f\xbc\x8b\xc6\xa5\x35\x77\x3c\x42\x98\x94\x9f"
+ "\x5b\x70\x97\xe0\xee\x89\xb1\x83\xfb\xb3\xec\x82\x35\xeb\xd7\xe5"
+ "\xcf\xb1\xe6\xe7\x64\x6b\x8b\x7e\xd8\x9a\x77\x08\x1d\x80\x4f\x5f"
+ "\x67\xd4\x56\x7d\x84\xb6\xec\x8d\xe0\x3f\x6c\xb5\x6e\x81\x8e\x76"
+ "\xef\x45\xb9\x9e\xf6\xb6\x44\xad\x5d\x51\x1e\x6b\xf4\x80\xe0\xd9"
+ "\xf6\x46\xef\xff\x3e\x82\x69\xdc\x79\xb6\xb7\x52\x83\xa9\x4f\xc2"
+ "\x78\xdf\x57\xc4\x38\x85\x5f\xae\xbd\x4b\x31\x4e\xe1\x07\x46\xf0"
+ "\x67\xfb\xac\xfa\x78\x23\x72\xc3\xbe\x05\x82\x8f\xd2\xf8\xb5\xcf"
+ "\x92\xef\x25\x7f\xba\xef\xb8\xa6\x83\xeb\xd2\x65\x3c\x9d\xbf\xa6"
+ "\xbe\xe4\x48\x5e\x75\x5f\xe5\xf2\x42\x7e\x25\xcb\x0e\x7f\x75\x98"
+ "\x83\x7d\xaf\xeb\xbc\xa5\xb0\xe3\xab\x54\x0e\x51\x7f\x9a\xa2\xe9"
+ "\x04\x8f\x79\xac\x4b\xe3\x11\x0f\x49\xd9\x75\xc2\x6f\xba\xa9\x2d"
+ "\x9c\x41\x5c\xa5\x6f\x18\x17\xd1\xbf\x26\xe1\xfb\x0b\xfc\x35\x1f"
+ "\xb0\x68\x31\x32\xeb\x85\xbd\x66\x03\xd5\xed\xa5\xb9\xf5\x3b\xea"
+ "\x89\xff\xdb\x27\x70\x43\x25\x1c\x85\x0d\x8f\x4f\xe7\x91\x58\xfd"
+ "\x32\xec\x45\xf4\x4c\x78\x5b\xdf\x28\x71\xaa\xbe\xd1\x9b\x9f\xc6"
+ "\x06\x06\x2c\x86\x81\xfc\x4c\x23\xf4\x05\x80\x85\xab\x3e\xc0\x24"
+ "\xfe\xd4\xdb\x08\xef\xac\xd1\xf5\x69\x75\x01\xa6\x46\xf4\x83\xe7"
+ "\x5b\x0c\xc0\x6f\xe0\x2b\x1f\x48\x23\x5e\xb8\x7e\x01\xcf\x4f\x33"
+ "\x8c\xe1\x83\xeb\x6a\xe3\x4c\x40\x9c\x49\xc4\x1e\x05\xbd\x92\x7e"
+ "\xfe\xf7\x87\x9e\x96\xba\x01\xad\xdd\xfd\x0a\x37\x3c\x2f\xf6\x95"
+ "\x2a\xb1\xaf\x70\x26\xfd\xa6\xef\xb7\x0a\x7b\x5a\xdb\xf3\x22\xd6"
+ "\xac\x76\x4f\xdb\xdb\x62\x0b\x8a\xb8\x76\x25\x05\xe0\xd3\x82\x38"
+ "\x3f\x12\xf7\x90\x8f\x15\x04\xd9\x37\x03\xc0\xc9\xfd\x2b\xe0\x33"
+ "\x5e\xc6\x20\xdf\xbf\x4a\xf7\x13\x8f\xd8\x95\x88\xbb\x4a\xe3\x8a"
+ "\x89\xc4\x4d\x6d\x80\x4f\x68\x26\xe5\x71\x0b\xab\x22\x9e\x5e\xce"
+ "\xc1\xfe\x17\x11\xb7\x4f\xca\x0a\xdd\x34\x2f\x31\x67\xba\xd9\xfe"
+ "\x37\x04\xfe\x84\xe9\x44\xc3\x97\x61\xa3\xee\xd6\xea\xa0\xb6\x68"
+ "\xff\xdf\x27\x64\x13\xc1\x77\xfb\xf5\xf9\xdc\xff\xe2\xa7\xf5\x1b"
+ "\x91\xfa\xdc\x6c\xff\x41\x8d\x2f\x60\x52\x07\xf6\x0e\xd5\xd5\x90"
+ "\xa2\xeb\xc0\x22\xbc\x4f\x43\x9a\xae\x03\x93\x3e\xa8\xeb\xfb\xd1"
+ "\xfe\x58\x3a\x22\x5e\xf2\x6d\x26\x74\x56\xc4\xc3\x8d\xc9\x4f\xd0"
+ "\xfe\x8e\xbe\xeb\x7c\xa1\x9c\x9f\x86\xb7\xc1\x1f\x22\xd6\xab\xce"
+ "\x4b\x4a\x1e\xa0\xa1\x4d\xee\x65\x0d\x4d\xfa\x5e\x46\x65\x8f\x68"
+ "\xb4\x42\xdb\xe7\x1a\xc2\xf2\xef\xe8\xf6\xf9\x0d\xfd\x3a\x8c\x74"
+ "\x98\x4b\x18\x1d\xb8\x6f\x20\x7e\xd0\x1b\x81\xed\x01\xe1\xdb\x29"
+ "\xea\x7b\x51\x14\xec\xf1\x5e\x28\xe9\xe6\x01\xda\xff\xeb\x0f\xcb"
+ "\x3d\x45\xa6\xf1\x24\xe3\x6d\x22\x5e\xbc\x80\xc1\x1a\xa1\x9b\xf1"
+ "\x96\xa4\x51\xdf\x0e\xe4\xb9\x95\x3b\xed\x92\x96\x1d\xa0\xfd\xaf"
+ "\x21\x47\x2b\x97\x8c\xbe\x44\xf7\xf7\x5b\xeb\x1e\x5b\xb7\x7e\xf3"
+ "\x3a\x28\xd4\x36\xe6\x5b\x1f\x59\x9f\x93\x1b\x3f\x8a\x3e\xc4\x82"
+ "\x78\xda\xbe\xda\xb0\xff\xa9\x17\x4a\x61\x4f\x2f\x63\x17\xbc\xb0"
+ "\xcd\x7a\x2b\xf0\xeb\xc0\x69\xe8\x0a\x44\x0c\x09\xf8\x5a\x95\x7a"
+ "\x03\x0f\xca\x4b\x58\xbf\xf0\xf8\xc0\xe6\x3c\x8d\xc7\x7a\x61\x16"
+ "\xe0\xa8\xc9\x1c\xbc\x97\x35\x66\xeb\xfb\x10\xfa\x27\x78\xf3\x2b"
+ "\x69\x82\x2e\xaa\x57\xf2\x8c\x02\x5e\x57\xd2\x68\xbf\x69\xcc\x70"
+ "\x2b\x77\xac\x94\xe3\x6a\x5c\xaa\xc3\x03\xe3\xf7\x23\xa6\x27\x5f"
+ "\x43\x38\xfa\x42\xa9\x56\x17\xe8\x27\xea\x4e\xd1\xed\xb9\xe1\x53"
+ "\xd4\xb9\x09\xfe\x84\x9f\x5f\xa6\x56\x82\xde\x34\xd6\xe8\x74\x09"
+ "\x7b\x91\x4a\xf5\xbc\x3a\xe8\x8d\xa5\x75\xb3\x88\xca\x4e\xee\x66"
+ "\xcf\x9f\x90\x71\x07\x1a\x8f\x0e\x8f\x3b\xf0\x3c\x71\xa3\xcf\x9f"
+ "\xd0\xfe\x82\x51\xcf\x57\xfb\xd3\xcb\xb4\x46\xa5\x59\x46\xe4\xa1"
+ "\x71\x3d\x9f\x1a\xe6\x57\xa4\x5f\x53\xcd\x0f\x32\x62\x68\x3c\x9f"
+ "\x0d\xdf\xa1\x11\xdc\x68\xdc\xa9\xf1\x20\x1e\xc0\x0e\xfb\x2d\xe5"
+ "\x91\x77\x59\xab\x08\x37\x78\x26\xc3\x98\xb8\x7f\x0d\xe1\xc4\xf3"
+ "\x85\x11\x3c\x90\x30\xa2\xb4\x9a\x08\x9f\xf2\x7c\x0e\xca\x44\xc3"
+ "\x81\xda\x58\x24\x65\xd3\xe7\x9b\xf5\x3d\x1b\x7e\x53\x65\x1c\x8a"
+ "\xe7\x53\x8f\x14\x7b\x48\xe6\x7f\xfe\x78\x54\x1d\xa9\x9a\x2e\xc2"
+ "\xc8\x0d\x07\xca\x0f\x08\x99\xed\x79\x5f\x44\x27\xf0\x7c\x2a\xe8"
+ "\xae\xa8\x23\xc9\x98\xee\xf2\x89\x58\xd5\x8a\x1e\x9b\xde\xef\x78"
+ "\xc1\xaa\xf3\x28\x7a\x5d\x2d\x52\xe7\x24\x7c\x5d\xd2\x1a\xac\xa1"
+ "\x3c\x8b\xc3\xfa\x58\x4a\x0b\xcb\x80\x76\x5a\xc7\x82\xf7\x7e\x21"
+ "\x27\x22\xeb\x35\x8a\x7b\xd5\x42\x0e\x94\xf5\x10\xdf\xf5\x42\xe6"
+ "\x48\xb9\x8d\xf8\x07\xeb\x9a\x75\x6b\x88\x7d\xf8\xbe\x6d\xfd\x57"
+ "\x49\x74\xf8\xbe\x6d\xcd\x57\x61\xfa\xb5\x6c\xf1\x03\xe2\x97\x16"
+ "\xc7\x57\x47\xd1\x1f\x43\xef\x2d\xe2\x41\x43\x67\x44\x72\x2e\x74"
+ "\xa7\x7e\x19\x57\x75\xbc\xf6\x6b\xd2\x7e\xc7\xd1\xbe\xd7\xd9\xcb"
+ "\x7e\x12\x8b\x18\x38\x6e\xf6\x13\x8b\xea\x90\xf1\x64\xb5\x3d\x9b"
+ "\x68\xf9\x0b\x21\xfd\xdc\x4c\xd8\xc2\xc3\x9f\xe1\x40\x9e\xd0\xc7"
+ "\xf9\x1d\x3f\x09\xeb\x3f\xa4\x7e\x51\x9e\xbd\x51\xfa\x0a\x3d\x5d"
+ "\xd7\xc7\x52\x5a\x8e\xae\x7b\x95\x79\x7f\x52\x10\x29\x3b\x4c\xb7"
+ "\x9d\xa2\x9f\xcb\x51\x9e\x3a\x1d\x66\x7a\x3d\x25\x56\x7e\x5e\xe3"
+ "\x93\x62\x04\x5f\xed\x78\xa1\x42\xf8\x10\x05\x2f\x2e\xf4\xcc\x3f"
+ "\x69\xd3\xdb\x81\x8c\x80\x7e\x6b\x67\x40\x62\xdd\xc3\x57\xa8\xf4"
+ "\x35\xfa\x93\xf0\xfc\x8f\x80\x79\xda\x9d\xb3\x84\x5e\x3e\x2d\x9f"
+ "\xf8\xb3\x59\x23\xf4\x70\xc0\xa1\x79\xb5\x2c\x4e\xe8\x98\xa4\x9c"
+ "\x1e\x0b\x1e\x81\xc6\xf0\x3c\xcd\x67\x0c\x68\xb9\xdc\xf7\x0e\xae"
+ "\x0c\xef\xf1\x09\xc6\x34\x1e\x3f\xd8\x0f\x7f\xf3\xf2\xfe\xc2\xc1"
+ "\x1f\x02\xdf\xbc\x53\x1e\xf3\x73\xd8\x2a\x3f\xfb\x5d\xbf\xd4\xc3"
+ "\x1f\x7c\x39\xa2\x33\x3b\xc8\x34\xdf\xa8\xb0\x83\xa3\xf9\x3a\x18"
+ "\xb6\xff\x40\x7e\xc1\x7b\x51\x9d\xb8\xab\x80\xf6\xaf\xe1\xbc\x87"
+ "\xe4\xfe\x59\xad\x72\x9d\xbe\xb8\x40\xd4\x41\xb4\x5a\xde\x07\x78"
+ "\x91\xf0\xf0\xa0\xd8\xf3\x64\xdd\x99\x6c\x20\x69\x56\xd3\x80\xa3"
+ "\x3d\x1d\x30\xf4\x25\x2d\xf2\x4a\x5f\xc4\x2f\x7e\xc5\xe7\x30\xd2"
+ "\x9c\xbe\x48\xf3\xff\xf3\x31\xcf\xb5\xae\x6c\xe2\x2d\xc1\x41\xde"
+ "\x5c\xf5\x31\xd1\xb9\x47\x19\x0b\x6e\xe2\x4d\x57\x06\xf9\x11\x11"
+ "\xfb\xfc\x61\xc6\x2a\xff\xce\x58\x28\xe6\xbb\x67\x87\x08\x57\x1f"
+ "\xbc\xac\x9e\x47\xcc\xc0\x03\x94\xef\x41\xdf\x05\xde\x40\x65\x1e"
+ "\xb4\xf1\xf3\x0d\x94\x6f\xd9\xb9\xf3\x7c\x3f\xe5\x5d\x96\x47\xb8"
+ "\xb2\x89\x07\x43\x31\x8f\x9d\xb5\xfe\x27\x68\xf7\x8b\x47\xbd\xbb"
+ "\x54\xa2\xed\x86\x6a\xbe\xfd\xb6\xd9\xd4\x9f\xd6\x70\xbc\x32\xaa"
+ "\x17\x78\x85\x38\xa5\xc4\x1f\x9e\x25\x3c\x38\x9b\x45\x7c\x07\xe1"
+ "\xed\x59\xca\xe7\x75\xb3\x27\x05\xcd\xf1\xc6\xcc\x9e\x44\x7f\xa3"
+ "\xf2\x4e\xd4\xd7\x96\xd0\x26\xde\x5c\xfd\x10\xf5\xbf\x8f\xfa\x3f"
+ "\xc8\x9b\x68\x0c\x47\xaa\x7a\x19\x43\xff\x43\xa8\x33\x84\x78\x89"
+ "\xca\xc4\x03\xf4\x3d\xcb\x9e\xcc\x0e\x50\xde\x87\x7c\x6c\x62\x03"
+ "\xe5\x79\xe8\x87\x13\x99\xe8\x7f\x3f\xf5\x3b\x4e\xb5\x84\xa8\x6d"
+ "\xf4\xdf\xef\xf8\xa9\x4d\xef\xa7\xde\x3e\xfa\xab\xaf\xdb\x2c\xe8"
+ "\x08\xe3\xfd\xf3\xd1\x6f\x79\xee\xf1\xd3\xbf\x7a\xf3\x69\x9e\x63"
+ "\x6e\x9b\x2d\x65\xec\x9f\x36\xe9\xfd\x1f\x7e\x0e\xf6\xd3\x80\xa4"
+ "\x9f\x3f\x25\xf9\xe7\x60\x97\xa4\x35\x32\x0d\xe3\xf7\xd2\xba\xd5"
+ "\xee\x00\x9e\xd5\x61\x46\xdf\x0f\x8e\x3c\xe7\x5a\xb1\x7e\x83\xd0"
+ "\x51\x67\x3f\x52\xb0\x66\x53\x36\x49\xbe\xf1\xcc\x86\x24\x21\x1b"
+ "\xe7\xe6\x58\xd7\xaf\xb3\x3e\x9a\xbd\x66\xed\xfa\x4d\xb9\x1b\xe6"
+ "\x08\x75\x46\x7e\xee\xba\x1c\xa8\xae\x37\x64\x6f\xb0\xc5\x8f\x90"
+ "\x67\xca\x55\x4b\x07\x62\xd1\x14\x03\xbf\x7f\xb6\x48\xd3\xdb\x06"
+ "\xb8\x23\x43\xc8\xc5\x92\xc6\xfc\xd7\xcb\xd6\xad\x19\xf8\xfe\x65"
+ "\xb9\x8f\xff\x2c\x83\xef\xf6\x7f\x99\x73\x11\xc3\x5b\x39\xcf\x7e"
+ "\x36\x57\xc0\x63\x60\x89\x5e\x8f\x90\x5d\x81\xb3\xb6\xad\xe0\xc3"
+ "\xfe\xeb\x38\xc7\xf7\x61\xb0\xf8\x59\xac\xb4\x19\xa2\xf4\x2b\x4b"
+ "\x58\xc4\xee\xfe\x67\x8b\xb8\x81\xc6\x4e\xb0\xd4\x64\x86\x2e\xed"
+ "\xfe\xe3\x7b\xdd\xec\x25\xc8\x52\x38\xb7\xe9\x14\x3c\xb9\xb8\xa7"
+ "\xf5\xd2\x29\x92\x39\xba\xb8\x63\x5c\x02\xe0\x55\x25\x65\x7a\x83"
+ "\x59\x41\x9c\xdd\x6e\xdc\x19\x4d\xc7\x39\xef\x01\x87\x9a\x1e\xb1"
+ "\x73\xfa\x2f\x23\xe4\x0b\x71\xce\x21\x68\xd2\xa1\xd5\xfa\xda\x35"
+ "\xe0\x1e\xce\xf6\xa9\x77\xc9\xf5\x77\x28\x17\xf9\x69\xfe\xef\x92"
+ "\xe3\x13\xf1\xc6\x89\x37\x78\xa9\x88\xc6\xff\x6f\xbc\x64\x89\x76"
+ "\x26\xf9\x52\x91\x9a\x74\x9f\x37\x94\x4f\x72\x41\xc2\xfd\x36\xfa"
+ "\xf6\xa0\xba\xdb\xff\xb5\x10\xf1\x54\x2a\xc9\x09\xbc\xea\xfe\xfc"
+ "\xd0\x6e\xff\x02\x75\x73\x9a\x01\x7b\x6b\x89\x9d\xe0\xbb\x3e\x2f"
+ "\x9e\x5f\xc8\x9b\x10\xda\x9c\x06\x7b\xd5\x0c\xce\xa9\x6c\xbc\x7f"
+ "\x85\x88\x6d\xbc\xdb\x7f\x8f\xf6\xfe\x0d\xbc\xab\xc4\x27\x53\x5a"
+ "\x26\xbd\x7f\x47\xe5\x51\xf9\x87\xe7\x5d\x85\x77\xb3\x22\xec\x2b"
+ "\xd3\x49\x2e\x59\x88\xb1\xeb\x63\x16\xf2\x19\x74\x44\xe1\xb1\xbd"
+ "\x64\xd7\xd3\x21\x37\x48\x1e\x9e\x3d\x42\x30\xae\x90\xf8\x18\xce"
+ "\xf7\x75\x1d\x06\x32\x96\xb7\x7f\xbe\x9b\xe6\x57\x45\x0c\xf6\xed"
+ "\x37\xce\xe6\x86\xff\x9a\x02\x9a\xb5\x3c\x24\x68\x21\x93\xe7\x4e"
+ "\x2f\x35\xe9\xf0\xc4\x7d\x02\xd0\x52\x9a\xb7\xb4\x2c\x2f\x8b\x97"
+ "\x74\xe0\xa5\xce\x28\xf9\xb0\x1f\x73\xed\x66\x2f\x09\x3f\x4b\xdc"
+ "\x60\xda\x2e\xdf\x0f\x59\xe5\x5a\x79\x29\xa8\xe7\xa5\x34\xe9\xef"
+ "\xa4\x3c\x90\xb2\x39\xc8\xa6\xda\xbe\xc6\x7b\x09\x37\x3b\x65\xbe"
+ "\x9f\xa5\x46\xd6\x94\xc4\x37\xfa\x6d\x82\x7c\x8d\xf3\x47\x3c\x37"
+ "\x8c\x71\x27\xb6\xb8\x9e\x73\xec\x57\xd8\x3f\xad\x53\x99\x88\xa1"
+ "\x4b\x78\x58\x7a\xac\xde\xc7\xc4\x3c\xc7\xfb\xbf\x3c\x80\x58\xe9"
+ "\x44\xcb\x47\x2b\x8f\x32\x94\xff\xa8\x90\x93\x68\x5d\xa8\xb4\x2e"
+ "\xa8\xcc\xbf\x01\xaf\x8b\x2f\x43\x7e\xf9\x59\xb0\xa5\xd0\x03\x9f"
+ "\xfd\x84\xaf\x3f\x0b\x02\x86\x58\x07\x55\x0e\x71\x1f\x52\xec\x93"
+ "\xce\x4d\xf3\x51\xc7\xd9\xa4\x00\x33\x76\x10\x45\xa0\x79\x09\xd8"
+ "\x8a\xd9\xc4\x3e\xca\x6f\x2c\x60\x26\xc8\xb0\xc3\xf7\x90\xd1\xf7"
+ "\x8f\x81\x04\x83\x69\xa0\x4a\x71\xfb\x1d\x3f\xa7\xf1\x1f\x1e\x53"
+ "\xce\xd8\x3e\x99\xf8\x1a\xca\x57\x33\x15\x67\xd5\x3f\x5f\x7d\xb5"
+ "\xbc\xfa\x1d\x5d\xe0\xca\x3c\x0b\xf4\x29\x06\x93\x38\xf3\x4e\x52"
+ "\xdc\x52\x6f\xf9\xf3\x46\xbd\x3c\xf4\x9e\xb0\x2f\xa8\x1e\x62\x96"
+ "\xea\xb0\xac\xf8\xf3\x56\x39\x47\x3f\x6f\xd5\xe5\x8b\xd1\xda\x29"
+ "\x38\xc8\xd5\x92\x99\xcc\xe0\xb2\x7a\xd9\xed\x01\x96\xd0\xb0\x97"
+ "\xb1\x9a\xad\x3c\xf0\xf4\x56\xc2\x23\x82\x31\x37\xfc\x3c\x03\x76"
+ "\x18\x07\x68\x8f\xae\x52\x19\x8b\xa1\xbe\x3c\x3d\x48\x6d\x16\xcb"
+ "\x7c\x5c\xfa\x57\xb3\x50\xbe\xb5\xf4\x9b\x42\x74\x84\xd5\x16\x33"
+ "\x53\xad\xca\x8c\x35\xc5\x6c\x1a\xa5\x11\x5f\x71\x78\xa9\x2e\x0b"
+ "\x8c\x7a\x2e\xdc\x40\xf4\x91\xda\xdd\x56\xcc\x83\xef\x90\xb4\xe4"
+ "\x50\x79\xe0\xf3\xc0\x9d\xc6\x7f\x58\x8e\xf1\xf0\x61\x5d\x36\xa0"
+ "\xe7\xe6\xe1\x77\xad\x0f\x37\x8e\x3c\x63\x7e\x78\xfd\xfa\x82\xac"
+ "\x0d\xb9\xf8\x49\x9b\xb9\x71\xd6\x48\x5e\x31\x41\xc6\xa5\x3a\xdc"
+ "\x89\xb5\x05\xfe\x49\xde\x59\x7a\x39\x39\x4a\xdf\x03\x9d\xf3\xdd"
+ "\xe0\xfb\x60\x73\x42\xdf\xe6\xbc\x5d\x58\x24\xe4\x8d\x53\x26\x66"
+ "\x18\xd9\xde\xa3\xd9\x05\xd9\x6b\xef\x92\x66\x0d\x9f\x6e\xe7\xe5"
+ "\x8c\x11\xed\x84\xcf\x7f\x35\xd9\xdc\x27\xe8\x63\xe5\xfd\xab\x79"
+ "\xe2\x6d\xda\x19\xd8\xcb\xf5\xba\x0d\xe1\xe8\xbe\x5d\xfc\x87\x43"
+ "\x55\xb1\xa5\x58\x23\x25\x45\xcc\xf0\xab\xad\x5d\x06\xc8\x25\xc5"
+ "\xf4\x0c\x9b\x2e\xa1\xff\xd6\x62\x46\xbe\x79\xa9\x8b\xf6\xd2\x97"
+ "\xbd\x7c\x97\x9f\x60\xf8\xb2\x67\x2c\x3b\xae\xe8\x7b\xf1\xf2\xec"
+ "\xfe\x15\xd3\x55\x6c\xbe\x44\x7e\xdd\x4e\x63\x44\xb9\x22\x39\x67"
+ "\xaf\x10\xfe\xff\xdc\xa2\xe3\xaf\x9e\xa7\x7a\xb2\x1e\x8b\xf3\x95"
+ "\x95\x63\xd5\xcf\x2b\x0c\xc9\x12\xc7\x5f\x79\x43\x9c\x51\x4f\x65"
+ "\x3f\xea\x66\xaf\xbc\x6e\xb4\x30\x0b\x3d\xff\x17\x3d\x0b\x1d\x06"
+ "\xbe\x0d\xc3\xa3\x9b\xfa\x1b\x8d\x44\x71\x88\xf2\x28\x5c\xfe\x23"
+ "\xc6\x4f\xfe\x8b\xa1\x3f\x03\x57\xc4\xed\x95\x18\x9a\xc1\xf1\xe3"
+ "\x8c\xcc\x9c\x94\x60\x9a\x7e\xf3\x34\xcb\xdd\x5f\x5b\xb8\xa0\xa4"
+ "\xb8\xd0\xce\xd5\x60\xc0\xcc\xa3\xe2\xa7\x56\xcc\x3e\xf4\xad\x59"
+ "\xa5\x92\x7f\xa8\x9c\x7d\x68\xb4\xbe\x56\x3a\xb8\x0d\x32\xad\x9a"
+ "\xb4\xa8\xb3\x64\x23\x33\xbc\x3a\xe4\x36\x40\x86\x02\x0f\x83\x18"
+ "\xef\xdd\xec\xd5\x07\xde\xa2\x34\x82\x97\x9d\x57\x2c\xea\x94\x77"
+ "\x93\x5e\xdd\xa5\x56\x2d\xea\x8c\xd4\x6f\x64\xa8\x9f\xe4\x74\xc3"
+ "\xc1\x62\x8f\xc1\x65\xfc\x1a\x73\x59\x7d\xec\x2d\x7a\x1e\x75\xae"
+ "\xa8\x4d\xe8\x84\x51\x07\xed\xc1\xe5\x25\x9f\xd0\xde\x6c\x17\xe7"
+ "\x33\x86\xf3\xec\xd5\xb7\x9b\xc6\x28\x27\xce\x58\xe3\x43\xbf\xf3"
+ "\x3b\x5e\x25\x7a\xfe\x70\xad\x26\x87\x90\x9c\xd4\x94\xa0\xef\x07"
+ "\xf4\xfd\xb7\xf2\x9c\xa8\xc9\xaa\xe7\x19\x75\x8e\x76\xc3\xe6\x99"
+ "\x3b\x81\x07\x7c\xd0\xe3\x81\x0f\xc6\xb1\x74\x71\xb0\xb9\xcf\xb7"
+ "\x70\x95\x3f\xfb\x98\xaf\xb8\x8e\x07\x8a\xa7\x71\x4f\xc9\x34\x61"
+ "\x2b\x03\xb9\x22\x79\x60\xca\x63\x17\x07\x9e\x7d\x6c\x40\x7d\xf6"
+ "\xb1\x4b\x7c\xca\x63\x97\xd5\x29\x8f\x0d\x4a\x9d\x21\x33\xfb\x9f"
+ "\x7d\x0c\xf1\x4b\xee\xa5\x7e\x9e\xc7\x39\x24\xc9\x19\x24\xcf\x35"
+ "\x1d\xd5\xe5\x8c\x61\x72\x4c\x4e\x41\x16\x8c\x0a\xb2\x1f\xff\x6e"
+ "\xfa\xf7\xb4\xb0\x1c\x3f\xdc\x98\xfd\x58\x6e\x16\x49\x38\x59\x9a"
+ "\xf5\x11\xd4\xcf\xc4\xcc\x21\x2f\x4e\x3c\xee\xb2\x6e\xce\xdd\xb0"
+ "\x61\xee\xfa\x75\x77\x59\x11\xcc\x43\xa4\xcb\x7b\x4c\x79\xd9\x39"
+ "\x82\xe5\xcb\xfd\x94\xbe\x1a\x63\x41\xec\x48\x1a\xcf\xa5\xe8\x31"
+ "\x68\x7d\x9e\x2e\xfa\x4c\xfd\x45\xbf\xb5\x3e\x93\xdc\xfe\x8b\xb0"
+ "\xfe\x33\xa2\x33\xf8\x45\x00\xfb\xb8\x5e\x07\xca\x53\xb9\x0b\x51"
+ "\xe5\x68\xac\xbf\x38\x14\xad\x37\x95\xba\xcb\x5f\xae\x10\x3a\xd3"
+ "\x67\xbf\xeb\x45\x1c\x1d\xe2\x07\x95\x3e\xf6\x4b\xc1\x37\x41\xe6"
+ "\x13\x30\x0f\xea\xf1\x26\x9a\x5a\x61\x83\x22\xfb\xf6\x0b\x5f\x14"
+ "\x4f\x46\x73\xfe\xcb\x55\xd0\xe5\xf5\xb3\x5f\x7e\x99\xf2\x5d\xa4"
+ "\xfa\x7c\xea\xb3\xdf\x1d\x20\xf9\x8c\xe6\xe0\xbb\x83\xf0\x23\x82"
+ "\xbb\x27\x88\xed\xd0\xe1\xf3\x8a\x38\x79\xa2\x0c\x49\xb1\xe8\xb3"
+ "\xac\xf3\x97\x4b\x22\x3a\x85\x5f\x9a\xf4\x7e\xb9\xd9\x2f\x3a\xd1"
+ "\x97\xe8\xf9\x79\x60\xf1\xca\xb9\xeb\xd6\xcf\x7d\x64\x63\xc1\xdc"
+ "\x82\xbc\x0d\xeb\x37\x7e\x3f\x6f\x18\xbd\x5c\x12\xdc\xed\x7b\x97"
+ "\x9f\xc9\x64\x49\xdb\x92\xc7\x99\x95\xf4\xc7\xdb\x77\xc0\x26\xf5"
+ "\x7a\x66\xb6\x7f\x0f\x3a\x42\xb6\x7f\x0f\xef\x84\x6e\x02\x67\xe4"
+ "\xe6\x6d\xe9\x6b\x12\xb6\xa5\x67\xab\x8e\x85\x77\xe2\x0e\x94\x39"
+ "\xf8\x80\x92\xd0\xb3\x48\x09\x39\xe6\xdf\x09\x9e\xac\x9e\x68\x78"
+ "\xcd\x64\xde\x45\x65\x4e\x50\x19\x37\xfd\xf5\x50\xb9\xb6\x5e\xf6"
+ "\xab\x38\xfa\x6d\x35\x6f\xe3\x07\xcc\x41\xae\xce\x29\x25\xf9\x8b"
+ "\xea\xc5\xdd\x0f\x1e\xef\x73\x42\xfe\x9b\x17\x64\xb1\x11\x5d\xed"
+ "\xaf\xe6\xd0\x5a\x1b\xb7\x6c\x27\x7f\x8b\xea\x6a\x55\x07\xd5\x56"
+ "\xc4\x3d\xd6\xce\x2c\x8e\x57\xd0\xdf\xed\xb5\xcc\x02\x1b\xfb\xc2"
+ "\xd3\xcc\xd0\xd1\xe3\xc1\x3d\x12\x27\xb5\xd7\x42\xf9\x8f\xd2\x5f"
+ "\xb3\x75\x1d\x8b\x39\xcf\x7e\x55\xa4\xdb\xe6\x49\xfe\xff\x35\xc1"
+ "\x07\x53\x79\x27\xee\x85\x14\x3d\x4e\xb4\xa3\xd7\x6b\x40\xfd\x94"
+ "\xd6\xea\xca\xf3\x30\x57\xb0\x0d\x77\x77\xa0\xa3\x41\x9e\xb4\x20"
+ "\x7d\x83\x9e\x46\xe5\x16\x03\xd1\xd1\x36\xda\xa7\x9a\x61\xf3\xd9"
+ "\x51\xd8\xc5\x3a\x6c\xad\x4c\x1d\x48\x4b\x15\xf5\x51\x7f\xa8\xcc"
+ "\xf1\x57\x1f\x0d\x18\x80\x2f\x94\xaf\x13\xfc\x10\x7c\x3d\xf0\xfc"
+ "\xb4\x5b\x29\x4f\x0b\x7d\xef\xe4\x67\x2c\x06\xd8\x55\x9e\x67\x47"
+ "\x76\xf2\x81\xb4\xb4\x79\xfd\x32\xfe\x6d\x37\x3b\xb2\x8a\xfa\xfa"
+ "\x5e\x54\x5f\xbf\x45\x63\x20\x5c\x62\x4e\x6a\xf7\x28\xfa\xd1\x91"
+ "\xd7\xca\x3a\x02\xd4\xae\xaf\x15\x76\xc3\xa9\x7c\xb3\xc5\x08\x3b"
+ "\x62\xbe\x39\xcd\x58\x7d\x89\x19\x89\x66\x3a\x0f\xd0\x2f\x8d\xff"
+ "\x08\xc9\x7f\xd3\xfc\x8e\x23\x36\xdd\x5f\x08\xe4\x0d\x7a\x2f\xd5"
+ "\x69\x4e\x25\xe5\xa1\xfe\x34\xa3\xee\xc4\x7e\x06\x1d\x54\x2c\xd1"
+ "\xb3\x58\x6a\x73\x3c\xc1\xb1\x99\x60\x97\x4d\x73\x76\x14\xb0\x26"
+ "\xf8\x78\x54\xaa\xaf\x7a\x90\xfa\x93\x6f\x31\x26\xf4\x30\x65\x79"
+ "\xd0\xcf\x09\xe6\xc7\x97\xdb\xfd\x1c\xf7\x0b\x60\xab\x4f\x65\xbe"
+ "\x4a\x63\x35\x4a\x9b\x87\x23\xfd\x7a\x5b\x21\xe0\xd8\x85\x4c\x4d"
+ "\xbf\xfb\x5a\x25\x6c\x28\x23\x76\x90\xaf\x55\xd0\xfb\xef\xa3\xdf"
+ "\x81\xe7\xaa\xe3\x97\x79\x0d\x02\xd7\x5f\x9b\xef\x36\xb8\xfb\xb5"
+ "\xf5\x43\x75\x1b\x8d\x03\x8e\xd5\x48\x5f\x4a\xfc\xc9\x4a\xb9\x06"
+ "\x5e\x13\xbc\x7e\x2f\x3b\x92\x26\x63\x05\x1f\x99\xa3\xe9\x05\x8f"
+ "\xcb\x3a\x7f\x55\x84\xb9\x06\x0c\x09\xcf\xcb\x5c\x9e\x56\x81\xe3"
+ "\x6e\xf6\xab\xc6\x06\xe2\xa9\xc6\xa0\xf7\x01\x17\xed\x75\xea\x20"
+ "\xf7\x40\x96\x96\x36\x8f\xaf\x39\xb3\xec\x31\x19\x24\x37\x1b\x08"
+ "\x16\x58\xa3\x93\x49\x5e\xb8\x1b\xb6\xb1\x04\x03\xf4\xc9\x7d\xb5"
+ "\xb8\xdc\x34\x07\xc4\xa3\xfe\xda\x48\xfd\x15\x71\xa9\x10\xb7\x58"
+ "\xea\xfb\x7f\x6d\xd1\x7d\xc3\xf0\x41\x5e\x08\x3e\x90\xda\x2d\xdd"
+ "\xb1\x49\xb4\x81\x58\xcd\x9e\x02\x2b\x3f\xd5\x62\xf5\x8e\x49\xef"
+ "\xa3\x6c\x39\xbd\x5a\xfc\x47\x61\xd7\x32\xdc\x96\xf3\xd7\xa5\x51"
+ "\xba\x43\xd8\xb6\x94\xc2\x7e\x47\xfa\xf0\xfa\xb5\xf0\xf5\xb5\xdc"
+ "\x2e\x7d\x15\xb9\x02\xfd\x9a\x0c\xfc\xeb\x76\x11\x13\x0e\xf2\x95"
+ "\xb0\xff\xec\xd3\x6c\x36\x7f\x9d\x8b\x36\x5a\x46\xc4\x9d\xcf\x5d"
+ "\x97\xfd\xf0\xda\x5c\xa9\x4e\x9f\xfb\x83\x82\xec\xef\x0f\x97\xd3"
+ "\x05\xdd\xe5\x8e\x5f\x77\x49\x3a\xf6\x9b\xe4\x28\xda\x68\x0c\x9f"
+ "\x2f\x18\xd8\x11\x79\xc6\xf0\x9b\xf4\xd1\xce\x18\x1e\xf8\xfe\xba"
+ "\xf5\x1b\x44\x1b\xc2\xbc\x35\x57\xde\x54\x8d\x67\xdf\x5a\xfc\xc0"
+ "\xe2\xb9\xf9\xb9\x05\x22\xd0\x93\x54\xe8\x67\xe7\xe4\x6c\xd0\x8c"
+ "\x5f\xd7\xa0\x14\xbe\x3c\xba\x59\x14\xb5\x3d\x56\x20\xcd\x66\xf3"
+ "\xd7\x66\x6f\xca\xd5\xaa\x88\xee\xeb\x34\xec\xdd\x2d\xf5\x62\x7f"
+ "\x88\x97\xb6\x3a\xbf\x71\x46\x9d\xed\x47\xeb\x12\x6f\xa0\x6f\x27"
+ "\xf4\x6f\xb6\x5b\x80\x2b\xcd\x8f\x77\x34\x0a\x9a\x65\x3c\xf6\x02"
+ "\xe0\xdb\xfc\x00\x62\x93\x10\x9f\x95\x8e\x58\xda\x9a\x1d\x0c\xf1"
+ "\x0e\xcd\x33\x79\xa5\x21\x9d\xe0\x6b\x5f\x1e\x52\x39\xed\xef\x76"
+ "\x37\x3b\x6a\xd1\xf4\x73\x26\xd5\xf0\x9b\x85\xb0\x61\x6c\x10\xba"
+ "\xe4\xe6\x8c\x08\xdd\x3f\x6a\x01\x0f\x0b\x1a\x8b\xbe\xa1\x9f\xf4"
+ "\x7d\x75\x94\xfd\x58\x8f\x9b\xfd\x46\xe8\x64\x60\xe7\x24\xe2\x06"
+ "\x11\x3d\xd2\x7c\x94\x18\x3a\x5e\x00\x4f\xf4\xdb\x72\xd8\x87\xa9"
+ "\x15\x06\x6d\x8f\x7b\xfd\x79\xbe\x3b\xf4\x87\x79\x3e\x96\x22\x69"
+ "\x52\xf3\x39\x4a\xbf\x8e\xfa\xd8\x4a\xe9\x1f\xbc\x5a\xec\x89\x05"
+ "\x9f\x2e\xcf\x4b\x9b\xcf\x69\xba\x65\xc0\x27\x36\xaa\x0f\x3d\x11"
+ "\xfd\xf3\x51\x8b\x37\xd1\x00\xfb\xdb\x7e\xdd\x16\x46\xda\x23\xbd"
+ "\x6e\x0a\xeb\x5b\xa9\x6d\xcd\xfe\x23\xa5\x97\xf2\x13\x2c\xd2\x34"
+ "\x9b\x0c\x8c\x7d\x25\xc6\x2d\xed\x7a\x5f\x5f\x18\x2d\x8b\xcb\x38"
+ "\x2d\xa1\x3f\xa8\xd2\x86\x1b\x7d\x5f\x23\x78\x7a\xe8\xba\x87\x00"
+ "\xef\xd7\x89\xf6\x87\xde\xa7\x72\xb4\x73\xfe\xba\x5f\xef\x0f\xfa"
+ "\x5c\x60\x27\xc6\x94\xca\x81\x0f\x1b\x10\xfb\xfd\xeb\x75\x91\x3e"
+ "\xbf\x2e\xe5\x77\xae\xd3\xab\xdf\x26\xc8\x33\x07\xc3\x82\xa8\x79"
+ "\x33\x9e\x67\xaf\x9f\xa3\xbe\x2e\xd8\x2e\xed\xb0\x62\x75\xfb\x26"
+ "\xaa\x6b\xd8\xf8\x23\xe7\x01\xbf\xd9\x20\xcf\x03\x7e\x6b\x8c\xcc"
+ "\xe1\xeb\xad\xc0\x7b\xd8\xb0\xe9\xf6\x6b\x98\x4f\x19\xc3\xe6\xb7"
+ "\x73\xf4\x7a\xd4\x24\x83\x05\x3a\x9b\x2a\x69\x8b\x41\xf3\xf2\xdb"
+ "\xc7\x63\x94\x53\x82\xaf\x9f\x17\x60\x8d\x94\x36\x8e\xd2\xb2\x91"
+ "\x0f\x6d\x0a\xbd\x39\xc1\x06\x63\x51\x49\xde\x8f\xb1\x8c\x5b\x4a"
+ "\xf5\x15\x12\x3d\x5e\x1a\xc1\x8d\xdf\x2e\x16\x76\x60\x1a\xac\xb9"
+ "\xe3\x37\x3f\x8a\xe8\x91\x7e\x7b\x28\xac\x03\xa6\x7a\x22\x7b\xd2"
+ "\x6f\xdb\x01\xe3\xea\xb0\x3e\xec\x28\x13\xfd\x90\x67\xfb\xef\xf4"
+ "\xb2\xdf\x5d\xe4\xf1\xa1\xf7\xb1\x9f\x43\x57\x81\xb9\x17\xb2\x87"
+ "\xd0\xe5\xfe\xee\xa5\x06\x79\x7e\xb6\x87\x9e\x5f\x56\x0d\xa3\xe1"
+ "\xce\xef\xac\xd1\xb6\xe6\x12\xfe\xbf\xcb\x53\x51\x27\x8d\x1f\x75"
+ "\xd1\x1e\xa7\xe8\x3a\x76\xad\xde\x6f\x53\x9d\xcf\xf6\x6a\xb0\x16"
+ "\xe7\xca\x55\x1a\x1c\x30\xc7\x02\xe6\xbf\xa3\x35\xf5\x6b\x71\x7e"
+ "\x53\xd2\xc8\xcf\xad\xa7\x3a\x64\xbc\xe7\xdf\xd5\x71\xc0\x56\xcb"
+ "\xef\x85\x2e\x88\xfa\x2e\xef\xe9\x12\x2e\x5e\xc9\x13\x77\x14\xd5"
+ "\x2a\x83\x15\x7d\xc7\x99\x72\x44\xbf\xf7\xbb\x76\x94\xf5\x3e\x21"
+ "\xcb\x54\xcb\x33\x6f\x9a\x9b\xdf\xc5\xf2\xcd\x79\x4c\x3b\x6b\x25"
+ "\x5a\xff\xfa\x71\xe0\x3d\xea\xf1\x09\xfd\xcd\xef\x7a\x54\x82\x0b"
+ "\xcd\x89\xd9\xef\x38\x9a\xac\xcf\x09\xcd\x47\xdb\x55\x64\x3f\x9a"
+ "\x93\xa3\x0b\x75\x7f\x5f\xd8\x9b\x68\x0d\x97\x4a\xb9\xe6\x68\xc8"
+ "\xbc\xed\x6e\x6e\x0e\xde\x09\x1e\xcc\x77\xc0\x20\xf4\xf2\xba\x2d"
+ "\xf5\x74\x82\xd3\x05\xfd\x7e\x8a\xba\xfd\xbb\x5d\xb0\x43\x77\x05"
+ "\xa4\x1d\x3a\xd2\x1f\xf4\x71\xb5\xc3\x17\xc2\xfd\xac\x2e\x6a\xa3"
+ "\x51\x97\xf9\x41\xdf\x62\xb6\x29\x04\xbb\xa3\x47\xdc\xec\xd5\xf9"
+ "\x1a\x5d\x1b\x4f\x73\x7e\x52\xab\x3f\xba\x0f\x9a\xaf\xfd\xa3\x41"
+ "\x29\x87\x1e\xf5\x10\xed\xa9\x93\xba\x83\xa3\x3e\xbd\xdf\xf4\xdd"
+ "\x39\x72\x8c\x2b\xee\x7d\x20\xd7\xba\x16\x24\x3a\xfd\x0e\xbb\x35"
+ "\x6d\x66\xce\x3c\x71\x71\xc1\x7a\xff\xbd\x77\x59\x57\x7c\x75\xa6"
+ "\x3d\x6f\xce\x83\xf2\xe7\xde\x15\x4b\xf1\x3b\x42\x2e\xb0\xfa\x1d"
+ "\x6f\xac\x1c\xae\x9b\x78\x47\xeb\xc3\x1b\x6b\xdd\xca\x03\x22\x76"
+ "\x23\x37\xf9\x3d\xbc\xbc\x37\x8d\xf6\xd4\x7e\xc8\x6c\xcb\x43\xff"
+ "\xe0\x7c\x57\x6f\x1a\x8f\xf3\x7b\xbc\x89\xb3\x0f\xd1\x9f\xcd\x1b"
+ "\x17\xf2\x56\x13\x0d\x24\x1e\x35\x60\x0e\x8e\x97\xb4\x92\xde\x89"
+ "\xef\xf1\x10\x6f\x85\xb9\x64\xf7\xcd\x2a\xe1\xcb\x43\xdc\x45\x3c"
+ "\x16\xc1\xe5\x8d\x36\x7d\x1f\x17\x3a\xf5\x72\xbf\x67\xb9\x9d\x5f"
+ "\x01\xee\x10\x7f\x60\x22\xd9\xdf\x03\xbd\x3a\xe5\xa3\xf1\xbf\x7a"
+ "\x48\xc2\xe2\x4d\x9a\xff\xa3\xa9\x1a\x7c\x57\xd0\x3b\xcd\xff\x8a"
+ "\x04\xb1\xc6\x1d\x16\xb1\x57\xa8\xdb\x67\x7f\x83\xe4\x52\x9b\x5e"
+ "\x27\xd5\x95\x20\xef\x3b\xca\xfa\xe4\xf9\xeb\x67\xff\xa9\xbb\x3f"
+ "\x31\x41\x87\x8a\xbb\xea\x66\xbb\x82\x98\x70\x99\x61\xbd\x31\x7d"
+ "\x23\x3e\x08\xba\xe4\xcc\x24\x9f\x52\x8a\x3c\x11\xfd\xaa\xea\xae"
+ "\x36\xa8\x01\xe2\x27\x92\x81\x1f\xe0\x55\xa5\x6d\xcf\x9b\x47\xc3"
+ "\x67\xc5\xc3\xe6\xfe\x4d\x81\x0f\x97\x1c\x88\xed\xf8\xc6\xe2\x5b"
+ "\x52\x24\xef\xa4\x3a\x14\x26\xfd\x97\xbc\x29\x7c\xc8\x69\xfc\xc9"
+ "\x74\x82\xaf\x17\x76\x1c\x24\x07\x78\xc1\x47\xab\x31\x84\x93\xac"
+ "\x8f\xb9\x0a\xfd\xa5\xf0\xa1\x10\xc6\x4b\x1b\xe1\xa5\x8d\xf0\x12"
+ "\x36\x37\xd4\xbe\x37\x66\xf6\x6a\x5a\xb3\x24\x73\xbd\x59\x8a\xfe"
+ "\x03\x36\xaa\x83\x25\xa8\x04\x2b\x61\x5b\x0d\xf8\xc4\x0f\x95\xe3"
+ "\xee\x2b\xc6\x6a\x0e\xd2\x98\xa3\xc7\x65\x50\xdd\x55\x0e\x1a\x97"
+ "\x81\xc6\x65\x3f\x27\xf4\x92\xb8\x93\x4c\xb4\x64\x72\x24\xae\xd0"
+ "\x5b\x8d\xd1\x63\x54\x11\x8b\x4c\x8c\xe1\xad\xb7\x47\x1b\x23\x37"
+ "\x60\x8c\x80\xc1\x5b\xcf\x68\x67\xee\xa2\x9f\xa0\x5b\xfd\xec\xad"
+ "\x95\x49\xdb\x70\x17\xd8\xef\x21\xde\xfa\x5e\xcc\x61\x83\x83\xd7"
+ "\xa0\x9f\xa3\xcd\x17\xea\x93\x75\x39\x57\x9b\xb7\x95\xae\xf6\x3b"
+ "\x9c\x73\x46\x87\xb7\x73\xd9\xd5\xe1\xed\x9c\x81\xf2\xe8\x07\xee"
+ "\x35\x9b\xe1\xf4\x8e\xf0\x9b\xf8\x8a\xf2\xd1\xda\x4d\xda\xd6\x88"
+ "\x7e\x8d\xfa\x8d\x70\xbf\xbf\x7a\xc3\xf0\x35\xa1\x36\x04\x18\xe0"
+ "\x07\xdd\xa5\x3c\x63\x72\x1e\x0f\x9f\x85\x95\x07\x92\xcd\x8a\x35"
+ "\x06\x6b\x4c\xf0\xc4\x34\xde\xd1\xea\x35\x2b\x35\xf0\x9b\x79\x2f"
+ "\xd1\xaa\x51\xbf\xd3\x3a\xb0\xf2\xed\xb7\xdd\x42\xb0\x3b\x9e\xb4"
+ "\x4d\xe1\xde\x98\xdb\xe2\x93\x7c\xc1\x54\xc0\x95\xfa\x6a\xa7\x35"
+ "\x7e\x56\xec\xdd\x42\x6f\xf7\x36\xad\xff\x0e\x11\x0b\xcf\x1b\xe7"
+ "\x3f\x2e\x6d\xd4\xde\xce\x73\xb3\x3f\xaf\xd2\xe9\x18\xbd\xdb\xdd"
+ "\xca\xec\x55\x72\xad\xde\xb8\x97\xf6\xb4\x3a\xd5\x61\xe6\xd6\xad"
+ "\x66\x4e\x75\x4d\x54\x79\x9a\x81\xf6\xad\xba\x08\xee\xc8\xbb\xd3"
+ "\x3a\xee\x50\xf9\xe6\xd1\xf1\xe2\xed\xbf\x5e\x1d\x2f\xde\x7e\x59"
+ "\x3b\x73\x58\x2d\x65\xa2\x77\x98\x2e\x13\xf1\xed\x37\xee\xb5\x16"
+ "\xa3\xfd\xb7\x6b\x65\xdb\x04\x93\x60\x06\xe8\xcc\x52\x82\x5b\x29"
+ "\xe5\x9d\xa3\xd3\x06\xe0\x90\x39\x04\x99\x8b\x09\x3c\xa7\x6f\x4b"
+ "\x88\xf6\xf4\xcb\xfd\x59\xad\x07\xaf\xaa\x3a\xde\x30\xd1\xfe\xb5"
+ "\x0f\x32\x93\x2f\x2e\xb0\x92\xf2\x10\xfd\x1b\x3f\x4d\xd2\xbf\xc0"
+ "\x52\x9a\x9b\x15\xb5\xd2\x37\x8a\x49\xc4\xb1\xa4\x75\x8e\xd8\x95"
+ "\x58\xeb\x94\x96\x42\xfd\x86\x2e\x84\x64\x84\x77\xc2\xe7\xbf\xaa"
+ "\x23\x03\xf0\x3e\x84\x31\x18\xc0\x0f\x13\xec\x9e\x31\xa8\x87\x06"
+ "\xe7\x59\x18\xc6\x3c\xb8\x7d\xea\xa1\x1f\xdd\xce\x8c\xbf\xb7\x3c"
+ "\xcc\x6c\x77\xb0\x94\x6d\xff\x66\x64\xff\x5a\xc0\x0c\x80\x83\x9b"
+ "\xbd\x73\x44\xc2\xee\x1d\x9f\x3e\x3f\x6e\xf6\xf6\x2a\xcc\x07\xce"
+ "\x08\x97\x07\xf9\x80\x3c\x23\x3d\x96\xe2\x66\x87\xb5\xef\x6f\xac"
+ "\x1e\x65\x7f\xb8\xcf\xba\x26\xdf\x9a\xb3\x7e\xf3\xba\x19\x33\xe2"
+ "\x47\x91\x25\x8e\xa5\x49\x59\xe2\xd8\xaa\x68\x59\x82\xde\xd7\x52"
+ "\x7d\x0b\x47\xca\x0e\x4b\xb3\x34\x97\x37\x59\xe9\x2c\xf2\xfc\x25"
+ "\xb6\xf4\x4b\x51\xaf\x77\xb2\xa5\x77\xdc\x99\xf5\x8d\xdc\xec\x9c"
+ "\x2d\x51\xa9\x5f\x8e\xd6\x69\x57\xef\xa5\xb6\x63\xa6\xde\x43\xf4"
+ "\x43\x79\xf0\x09\xec\x3b\x2d\x5f\x2f\x0e\xf2\x33\x84\xbb\x0b\xe0"
+ "\x67\xae\xbd\x20\xc8\xda\x89\xbe\xf1\x1b\x41\xd7\xc7\x4b\x5f\xcb"
+ "\x21\x06\x9d\xb1\x99\xc6\xee\x25\x99\xee\xb2\xbc\x07\xd4\xb2\xb1"
+ "\xa3\x2e\x40\x74\x22\x14\x90\xfc\x4e\x4b\x3a\xa5\x4f\xa4\xdf\x6f"
+ "\xcb\xf3\xc5\x96\xef\x91\x4c\x9e\x21\xfc\xea\x6c\x82\x5f\x9d\x16"
+ "\x61\x2f\x75\xbb\xaf\x94\x49\xff\x8e\xc7\x3c\x88\xbb\xe0\x66\x2d"
+ "\x75\xe0\x2f\x90\x97\xca\x7c\xc9\xfa\x03\x96\x8e\x5f\xf0\xc3\xf4"
+ "\x2d\x9d\xef\x0a\x05\xf8\xbe\x4c\xd8\x77\xa5\x52\xfa\x33\xe0\xdb"
+ "\x62\x2c\xa6\x38\xbf\xa3\xa5\x56\xe7\x41\x7c\x63\xdc\x43\x14\xf2"
+ "\xb8\xb6\x0f\x26\x11\xfd\x4e\xf2\x99\x79\x16\xfc\x54\x29\x2c\x15"
+ "\xfb\x83\xd9\xbe\x42\xdc\x77\xc5\xbe\x08\x9a\xd0\x20\x68\x69\x4b"
+ "\xbf\x4e\x17\xaa\xa4\x3c\x1a\x8f\xf2\xb4\x7f\x5e\x90\xfb\xe7\xbb"
+ "\x61\xfd\x27\x3d\x5b\x74\x5c\x1d\x76\xd7\x71\x5d\x41\xee\x86\xdc"
+ "\x1c\xeb\xcc\xfc\x78\x16\x15\x15\x38\x2f\x77\x9d\x75\x43\xee\x0f"
+ "\x37\xe6\xe6\x0b\x41\x0f\x5f\x87\xeb\x0a\x89\x06\x45\x62\xb4\x4f"
+ "\x05\x8c\xdf\x2d\x92\xfa\xab\x19\xe2\x5c\x4f\x9e\xc7\x2e\xf2\xa8"
+ "\x55\x89\x19\x52\x87\xde\x47\x70\xfd\xbd\x3c\xbf\x2e\x0f\x79\xc0"
+ "\xc7\xf5\xb2\xdf\x3f\x25\xed\xb6\xde\x7d\x5f\x83\xd5\x53\xd4\x4f"
+ "\x67\x84\x5f\x7b\x4f\x9c\x0d\x4b\xfb\xe9\x77\xbb\xdc\xec\x58\x73"
+ "\x84\x07\x79\x6f\x11\xe8\xa0\xa0\x87\x9f\x41\x0b\x35\xde\x99\xda"
+ "\xf9\xfd\x4e\xbe\x89\xf7\x54\x0f\x31\xa1\x9b\x46\xbc\x0e\x49\x5f"
+ "\x7f\x3f\x5f\x87\x23\xf1\x2f\x3d\xd0\x3b\xe8\xf2\xd1\xf2\xe0\x27"
+ "\xbc\x78\x0b\x33\x40\xf7\x40\x34\x24\xf8\xca\x06\xaf\x81\x3b\xde"
+ "\x4d\x25\x5e\x46\xc4\x91\x6f\xd0\xec\x88\x79\x5c\xa8\x87\xea\x29"
+ "\x8c\xc8\x1d\xef\x65\x08\x3e\x7e\x08\x78\xf3\x7b\x6b\x16\xf6\x08"
+ "\x49\xbb\x27\x7c\x56\x7f\x79\xbc\x3c\xd3\x93\xf4\xed\xf7\x47\xb5"
+ "\x31\xf4\x83\x66\x69\x76\xe8\x06\x89\xd7\xef\x65\x10\xce\x79\x30"
+ "\x17\x44\xe7\xcb\x75\x78\x61\xbc\xe8\x3b\xce\x50\x88\x0e\x07\x5f"
+ "\xdd\x1a\x30\xc8\x78\xba\xef\xa6\x4b\xf9\xe8\xbd\xd4\xe8\x33\x6c"
+ "\x29\x0b\xbd\xb7\x20\xe2\xbb\xe6\xdd\xba\x91\x34\x62\xfd\x3a\x5c"
+ "\x6d\x7c\x2c\x6b\x33\xd4\xce\x1b\x6d\x73\xac\x1b\xd7\x09\x13\x02"
+ "\xa1\x06\x28\xd8\xf8\xc8\x63\x56\x50\x91\xac\xc5\x4b\x97\x66\xdd"
+ "\xf3\xad\x6f\x7e\x3b\x9e\xdd\x93\x4d\x69\x05\xeb\xad\x4b\xd3\xe7"
+ "\xc8\x4f\xdf\xb8\xef\xde\xff\xcc\xba\x77\xf9\xb7\x1e\x5c\x39\xca"
+ "\xfd\x88\x04\xc2\x09\xc8\x5d\xb1\xdd\xec\xfd\x1a\x69\x0f\xf7\x5e"
+ "\xdb\x70\x7b\xb8\xf7\x7a\x18\xc3\xd1\x60\x2b\x49\x32\xef\xdb\xe9"
+ "\x8f\x60\xf7\xfe\x0e\x89\x37\x71\x89\xd4\xff\x40\x04\x6f\xde\x17"
+ "\x70\x85\xee\x40\x9e\x03\xb4\x12\xfd\x7b\x77\x45\xf4\xb7\x08\x2d"
+ "\x78\x5f\xd8\x8a\xea\x78\x01\x7c\xc8\x0a\x9a\x04\x6e\x48\x7e\xa5"
+ "\x75\x85\x8e\x1b\xd5\xf2\xac\x92\x41\x2f\x87\xef\x84\xdf\xc7\x71"
+ "\xd6\x41\xb8\xd0\x03\x3b\x0f\xa4\xf3\xc4\x45\xc7\x65\xbd\xad\xe5"
+ "\x38\xfb\x00\x3f\xab\x9d\xcf\x26\xf5\xb1\xd6\x77\xb9\xe3\xbd\xa5"
+ "\x52\x16\x7c\xaf\x48\xe0\xcd\xf6\xa9\xf7\x88\xf3\x70\x71\xb7\xad"
+ "\xf5\x68\x04\x7f\xde\xaf\xc1\xdc\x44\xf4\xd1\xad\x5d\x23\xf4\x38"
+ "\x31\x94\xd6\xaf\xc7\x3e\x28\x98\xc1\x0c\xc6\x19\x35\xac\xd6\xc0"
+ "\x4b\xdd\xac\xb5\x5e\xda\x44\xbf\x9f\xa0\xf3\xcf\xf4\x4c\xeb\xdf"
+ "\x70\x78\xa4\xfe\xab\x2a\x4a\xff\x55\x6c\xe3\xa7\x3a\x6c\x5e\xf0"
+ "\xc8\x4e\x97\x57\xf8\xdc\xbd\xbb\xc3\xe6\x83\x9d\x53\x3c\xc1\x29"
+ "\xbb\x24\xc4\x87\xe8\x79\x2a\x8d\x4d\xec\x21\xf3\xa4\x4e\x81\xe4"
+ "\xb1\xf7\x9f\x92\xb2\x89\x4c\x07\xdc\xe9\x19\x78\x65\xc4\xfc\x10"
+ "\x5e\xf6\xd3\x1c\x2d\x1d\x8d\xee\x25\x6d\x33\x68\xbe\xcd\xde\x3f"
+ "\x0d\x19\x15\xb0\x7a\xda\xa0\xe6\x3d\xed\xa0\x3f\xfa\x05\xed\x8b"
+ "\xf0\x97\x5c\x9f\xb3\x9e\x16\x7b\x3f\xf6\xcd\xb1\xe2\xc3\x1b\x69"
+ "\x3e\x4f\xe8\xf3\xb9\x3c\xe4\xbd\x1b\xf3\xe5\x77\xfc\x61\x9a\x3e"
+ "\x97\x03\xb7\x3e\x9d\x1c\xb3\x8d\x59\x8f\xd5\xdf\x81\x74\x5a\xff"
+ "\xef\x0b\xbb\x66\xf8\x22\x18\x59\x96\xe8\x70\x86\x56\x7e\x95\x5e"
+ "\x7e\xa4\xcf\x6c\x71\x59\x1c\x4a\xae\xbb\xa4\xbd\x99\x16\xe2\x7c"
+ "\x98\xbd\x19\xce\xa3\x5b\x24\x4e\xea\x3a\x38\xed\x3c\xf0\x83\x6f"
+ "\xa9\xbb\x49\xfe\xde\xed\x7b\x47\xd3\x03\xd0\xda\xfe\xc3\x27\xb7"
+ "\x33\xb6\xd6\xb7\x39\x33\xac\x43\x81\xee\x03\x7e\x30\xa9\x1f\xd1"
+ "\xf7\x5f\xc2\xf6\xc2\x6e\xf6\xc1\x4a\xd8\x2f\xea\xba\x5f\xac\x2b"
+ "\xa9\xb7\xf9\x20\xc5\xe5\x63\x8c\xea\x5b\x27\x6c\x31\x1c\x7f\x58"
+ "\x2b\x70\x8f\x64\x6d\x21\xe7\x17\xf2\x33\xfa\xb9\x0a\x78\x17\x79"
+ "\x37\xf4\x83\xf0\xf9\x87\xbc\x27\xf9\x87\x16\x9c\xad\x50\xfa\xea"
+ "\xd1\xf4\x85\x44\x1f\xf2\xb2\xd7\xe5\xac\x7f\xf4\xd1\xcf\x26\x0d"
+ "\xd1\xe7\xad\x35\x0e\xb5\x9c\xea\x84\xfc\xeb\x96\x78\xfa\x01\xd1"
+ "\xff\x17\x9a\x25\xff\xf6\xdd\xb3\xb4\x6e\x6e\xea\x63\x6d\xd3\x74"
+ "\xfe\x5d\xae\xa3\xb6\x34\xee\xf8\x60\x6d\x64\x6d\x7c\xe0\xfb\xf4"
+ "\xda\x68\x33\x8d\xbe\x36\xda\xe6\xd0\x3e\x7b\x82\xbe\xa7\xb9\xd9"
+ "\x2f\xc5\xfd\x0b\xbc\x6b\x3c\xb8\xd3\x1c\xbc\x5b\xf0\xe0\x59\x5b"
+ "\x98\x02\xfe\x1b\xba\x69\xec\x07\x21\x92\x6b\x43\x44\x23\xb2\x82"
+ "\x2c\x19\x7b\x41\xf5\x3a\xe8\x1d\xa7\xf3\xe0\x20\x77\x67\x6d\x21"
+ "\x7a\x41\xef\x55\x7d\xd2\x1e\xe4\xa1\xcb\x24\x87\xd0\x73\x75\x2f"
+ "\x68\x85\x8a\x00\x1d\x4c\xee\xd7\x6d\xf5\x3a\x8f\x6b\xde\x66\x15"
+ "\x7e\xdb\xb1\x6f\x87\xa4\x6d\x5d\x13\xf6\x6e\x6a\xe7\x88\xa0\x41"
+ "\x21\x33\xce\x19\x58\xf5\x0f\xa8\x5e\xd8\xa8\xad\x43\xff\x62\xee"
+ "\x34\x07\xd3\x85\x5f\x93\x03\x3f\x10\xb6\x69\x77\x4a\xdb\xb4\x3b"
+ "\x59\xc3\x3a\xc0\xa1\x2d\x78\x55\xdd\x78\xe2\xec\x9a\xe8\x74\xfb"
+ "\xa3\x6b\xb2\x6c\x79\x5b\xb2\x60\x97\x3a\x62\x7f\x97\x6b\xc8\xd1"
+ "\x6e\x95\xf0\x6d\x5f\x19\xd1\x55\x49\x7b\x52\xd0\xcc\x79\x01\xe1"
+ "\x57\x59\x3b\x4f\xea\x10\xf7\x1d\x4a\x3e\xc1\xbb\x89\x70\xae\xe3"
+ "\x4b\xc4\xc3\x8f\x1b\x80\x1d\xd7\x81\x4c\x56\xe3\xe0\x4e\xe8\xd0"
+ "\x28\xfd\x06\xdd\xbf\xc3\x00\xa5\xd3\xda\x47\x9a\xf0\xc9\x02\xfd"
+ "\x9c\xc4\xbd\xf6\x16\x37\x33\xcf\xd7\xda\x3b\x06\x5b\x51\x71\xbf"
+ "\x41\xf0\x19\xed\x17\xe5\x7d\xc1\x76\x8f\x0e\x4b\xe2\x7d\x17\xc2"
+ "\xd7\x04\x6c\xc6\x06\x38\xec\x53\x3b\x8c\x7a\x79\x37\x6b\x17\x77"
+ "\x82\x1e\xf4\x89\xe7\xa6\x87\x7c\xd1\xfe\x21\xda\xeb\x25\xdd\x6a"
+ "\x6f\xa4\x74\xc2\x97\xf6\x1d\xd4\xe7\x24\xe9\xb7\x42\xd4\xb3\x54"
+ "\xb7\xcd\x8b\x86\xdb\xbd\xd9\x36\x62\x96\xd7\x3c\xfa\x68\xee\x86"
+ "\x7c\x6b\xb6\x74\x03\x91\xb6\x7e\x6d\xce\x57\x35\x7f\x10\xeb\x72"
+ "\x37\x67\xad\xc9\x11\xf7\xcd\x28\x55\x3e\x8e\x80\xef\x1c\xc8\x37"
+ "\xe2\x0e\x87\x18\xd3\x1f\x37\x36\x68\x7c\x54\x37\xeb\x34\x4a\xdb"
+ "\x1f\xd7\x0f\xe5\xde\x36\xe1\xa7\xd4\x8f\xe3\xfa\xde\x06\x1d\xcb"
+ "\x00\xfb\x4a\x0d\xce\xe5\xe0\x2b\x64\xff\x1e\xde\x03\x3d\x0b\xe5"
+ "\xa1\xfd\xaf\xdd\xa4\xaf\xd7\x4a\x4a\x87\x7d\x82\x73\x1d\x6c\x12"
+ "\xfe\xf8\x8c\xba\xcb\xdf\xc2\xe3\x7b\x6c\x44\xd7\x44\xcc\x6f\x9c"
+ "\x47\xc9\xb8\x32\xae\xc5\xa0\xd7\xd0\x05\x3a\xd7\xc1\xb6\xdb\x95"
+ "\x42\xfc\x49\xb2\x9b\xfd\xb1\x8e\x64\xbd\x96\x1d\x5b\x99\x69\xbf"
+ "\x3c\x63\x74\x4b\xbd\xb2\x6b\xf5\xdb\x85\x8c\x69\xfb\xa1\xbb\x52"
+ "\xe8\x39\x5d\x32\x66\x4c\xb9\xbf\x8b\x9b\xf8\x52\xc8\xe1\xd2\xff"
+ "\x9b\xab\x96\x64\xa9\x2e\x5e\xde\xd3\x4c\xfc\xb8\x9f\xef\xea\x69"
+ "\xa6\xf4\x1b\x29\x5d\x8b\xd3\x73\x3a\xb0\x1c\xb1\x51\x76\x9d\x0e"
+ "\x50\xfa\x34\x4a\x97\xf1\xdd\xca\xcf\x34\x2f\x0f\x05\xe0\x53\x66"
+ "\x3a\xdf\x75\xa6\x99\xda\xa4\xf1\x7f\xc1\x2b\xc7\xdf\x53\x27\x70"
+ "\x4e\xd0\x4d\x57\x80\xef\x3e\x9d\x26\x6c\xf9\x77\xf7\xd4\xa9\x3c"
+ "\x2f\x06\xef\xb4\x6f\xc5\x13\x4e\x1c\xe7\x25\x69\x4c\xb3\xff\x8f"
+ "\xe9\x65\x9d\xdb\xa0\x53\x26\x5c\x6b\x01\x5c\xa9\xaf\x3d\x9a\xce"
+ "\x87\xf8\xb6\x4e\xa2\xff\xf3\x99\xa4\x3f\x9d\x19\x7a\x5b\xb4\xf6"
+ "\xbd\xb4\xb7\xbb\xb1\xbf\x13\x2c\x8e\xd2\x9f\x53\xea\xaf\x02\x24"
+ "\x47\x4e\x0f\xeb\xaf\x24\x0f\xd9\x69\xd7\xd7\x1e\xda\xd6\xe0\xe1"
+ "\x56\x1d\xc2\x3f\xb1\xa2\xb5\xe5\x86\x2e\x45\xaf\x93\x53\x9d\x7c"
+ "\xb0\xbf\x91\xf6\x62\x13\xd1\x20\x6f\xd2\x36\xda\x73\xd1\x06\x64"
+ "\x00\xdf\x74\x4e\x7b\x72\x28\x2b\x64\x94\x3e\x62\xb6\xb0\xc4\x68"
+ "\xfe\x9f\xda\xf3\x44\x78\x56\xaa\x63\x90\x68\x7d\x31\x2b\xed\x61"
+ "\x1f\x0a\x1e\x12\x67\xc5\xc0\x91\x21\x9a\x73\x9a\x77\x3b\xb5\xd3"
+ "\x44\x72\x4b\x62\x2f\xfb\x70\x26\xe6\x1e\x36\x51\x0d\x43\x42\x96"
+ "\x31\x53\xdf\x8c\xdd\xec\xc3\x89\x98\x77\xd4\x45\xf3\xb2\x24\xe8"
+ "\xcf\xfc\x77\xf8\x68\x04\xac\x8b\x0a\xb9\xc7\xfa\x28\xe0\xfd\xd1"
+ "\x33\xe0\xf1\x49\xee\x11\xcf\x25\x39\x5c\x15\x78\x23\xee\x04\x7c"
+ "\xf4\x4c\x91\x87\xab\x9f\x38\x18\x6f\xa5\xbd\xe6\x13\x03\x0b\x06"
+ "\x48\x46\xa7\x7e\x1b\x4a\xce\xc1\x8f\x64\x23\xd1\xad\x72\xd8\x62"
+ "\x99\xaa\xb6\xb2\x64\xf8\xe0\x2c\xb1\xf1\x40\x87\xaf\x9e\x75\xd8"
+ "\xea\xd9\x1f\x82\xb5\xcc\xb9\x09\x3a\xdf\x3f\x2e\xfc\xc0\x5e\x8b"
+ "\x3b\x58\x71\xd4\x46\xc8\xfa\x9f\x68\xeb\xc3\xe3\x1f\x1c\xff\x88"
+ "\x7d\xe0\xfc\x88\x59\xbf\x23\xde\x7b\xda\x32\xff\xc0\xda\x32\xfe"
+ "\xc0\x4a\x7a\xb8\x0a\x7e\xb1\xf8\x71\xb4\x51\x4e\x75\x35\xc2\x5f"
+ "\x65\xb2\x3a\x60\x89\xa7\xf1\x1b\x97\xdb\x41\x93\xbd\xcc\xb9\xee"
+ "\xb7\xe8\x63\x6e\xc3\x25\x66\x72\xae\x7b\x47\x3c\x0b\xfd\x0b\x8d"
+ "\xd7\x95\xd3\x25\x6c\x8b\xe1\xab\xd3\x65\xf7\xc0\x97\x81\x5a\x8d"
+ "\x3e\x86\x64\xbf\x09\x5e\x46\xbd\xfc\x81\xe2\x70\x79\x11\x2b\x67"
+ "\x3f\xe0\x41\x7d\x6a\x5f\x29\x61\xd2\xd6\x45\x30\xfd\x4f\x0d\x3e"
+ "\x99\xd1\xf0\xf9\x70\x07\xe0\x83\xbb\x16\xea\xa6\xfe\x46\xea\x5b"
+ "\x06\xc1\x40\xd5\xdb\x00\x0e\xe0\x5c\x10\xf5\x57\x5d\x62\x09\xce"
+ "\x75\xb8\x8b\xf1\xd1\x59\xf3\x0a\xa3\x49\x1d\x3c\xd7\x54\x7d\x99"
+ "\x19\x31\x6f\xe0\x43\xaa\xc5\x77\x01\xf3\x36\xcc\x99\x37\xce\xd7"
+ "\x44\x7f\x47\xe8\xaf\x19\xb8\x47\xbf\x47\x69\xbe\xca\xa9\x0f\x39"
+ "\x34\x57\x8d\xf8\xd5\xd6\x9b\x07\x3e\x8c\xb1\xd7\x13\xae\x44\xd2"
+ "\x77\x9f\x3e\x13\xa4\xb5\xa3\x0a\x39\xf6\xa3\x1c\xb5\xd2\x90\x2c"
+ "\xed\xf2\x3b\x32\xf7\x93\xdc\x50\xff\x63\xe1\xfb\x25\x81\x64\x1d"
+ "\x61\xcb\xb1\x57\xdc\x11\xfd\x63\x9e\xbe\x27\xec\x9e\x0c\xbf\x2a"
+ "\x1f\xd5\x1a\x84\x8d\xb0\x5f\xf3\x87\xe9\xa7\x3d\xf6\x8f\x15\x6e"
+ "\x76\xfb\x11\xb9\x26\x3a\xc5\x5d\x56\xd0\x94\xb1\x78\x36\xda\x07"
+ "\xdb\x60\x9b\xcd\x6f\xcc\x64\x09\x0a\xf7\x26\xac\x36\x73\x57\xb0"
+ "\x05\x38\x94\x20\x70\x5f\x7e\x23\x3e\xdb\x6b\xa6\x7d\xb2\x93\xd2"
+ "\x8d\x7a\x3a\xf6\x63\x95\x64\x6f\xc8\xfd\xcb\xb7\x98\x79\xf1\x65"
+ "\x36\x4d\xe8\xd0\xf4\xf4\x2d\x5e\x73\x87\x85\xe1\x7e\x5b\x10\xbe"
+ "\xa3\x50\x86\xd2\x63\x68\xdf\x3d\x4a\xed\xc2\x77\x6b\x8a\x9e\x9f"
+ "\x0f\x64\x1a\x5d\xf6\x16\xb1\xce\xe0\x5f\x50\xec\xb7\x32\x3d\x76"
+ "\xb9\xdd\x6b\x16\x73\xa6\xa7\xe5\x67\x8a\x7d\x1e\xfe\x65\x88\x8f"
+ "\xe7\xa2\x3f\xbd\x22\x5d\x21\x39\x5c\xd8\x98\x44\xa5\x19\xe0\xcb"
+ "\x07\xfe\x62\xa3\xd2\x62\xa8\xcf\x2c\xfc\x4e\x6d\x63\xcf\xc7\xba"
+ "\x5b\xbe\x05\xe7\x89\x72\xaf\x17\x6d\x6f\xe1\x4c\xfa\xa0\x96\x69"
+ "\x92\xa7\x38\xee\x8d\xd6\x01\xe0\x0c\x07\x6d\xab\x03\x99\x86\xd0"
+ "\x40\x66\x0c\xda\x47\x5d\xd0\xdf\xd2\x18\xa9\x5d\xd8\x5f\x74\x31"
+ "\x5e\x79\x9f\x97\xe3\x3e\x23\xd5\x2b\xfa\x63\x0f\x30\x9e\x78\xbf"
+ "\x6d\x74\xbb\xb5\x79\x87\x9c\xc5\xdf\x21\x9c\xfe\x53\x00\x34\x25"
+ "\x64\x0a\x04\xac\x3f\xc0\x9e\xff\xa7\x1f\x62\x4e\x43\xb4\xce\x43"
+ "\x71\x81\xc0\x3c\x0f\x53\x8a\x69\xed\xc8\x73\xce\x3f\x3d\x05\x9e"
+ "\xb3\x44\xe5\x9c\x9e\x77\x00\x77\xcd\xfd\x24\xd7\xed\x0a\x04\x85"
+ "\x8d\x57\xd2\x6d\x8d\xae\x80\x87\xb5\x95\x7e\xcc\xda\x82\xae\xd2"
+ "\xa3\x97\xbc\x46\x69\xeb\x65\x44\xbd\x2f\xe2\x5b\x09\xad\x97\xac"
+ "\x50\xe3\xd8\x72\x32\xc9\x5e\x04\xbb\x7f\xc8\xbd\xe0\x4f\x01\x5d"
+ "\xde\xba\xfa\x18\xfe\xbc\x02\x3e\x7f\x61\x07\xad\x56\xc5\x35\x52"
+ "\x5f\x4a\xb8\x3f\x8d\xcd\x13\xb6\x46\x7f\x4e\x4b\xf2\xb1\x0c\xad"
+ "\xde\x0b\xb2\x5e\xca\x7f\x95\x7a\x81\xb7\x6d\x75\x42\xa7\x4e\x63"
+ "\x8a\xab\x09\x51\xdd\xa1\xa4\xb8\x4e\xda\x6b\x4a\x88\x17\x22\xde"
+ "\xe6\x2f\xcf\x50\x3b\x35\x1d\xc1\x4e\x06\xbf\xe1\x0d\x2a\xed\xfd"
+ "\x17\x2c\x4c\xb3\x6b\x2b\x39\xcf\xfe\xbc\x4d\xe5\x69\xc9\x24\x07"
+ "\x42\x97\x5c\x02\x3a\x0b\xdd\x7c\x71\x88\x8d\x73\x15\xb8\x19\xfc"
+ "\xdd\x52\x1d\xbb\xde\x85\xde\x9e\x68\x55\x88\x5b\x0c\x6f\x0c\xba"
+ "\x59\x35\xd1\x6f\xe1\xff\x76\xfb\x8d\x7b\x93\xb6\xb1\xbb\xb9\xc1"
+ "\x2c\xec\x22\xd5\xca\x59\x87\x68\x6e\x03\xa2\x3f\xbb\xfd\xfd\x51"
+ "\x36\x74\x31\xe7\xd9\x5f\x62\x61\x43\xc7\x4d\xfe\x26\xd8\x11\x71"
+ "\x9a\x33\xbf\xe3\x2f\xe9\x6e\xf6\x27\x71\x77\xa7\x02\x3c\x96\xa0"
+ "\xf3\x7f\xd9\xef\x4d\x8c\x15\xb6\x78\xf0\xc3\xa7\x6e\x0a\x36\x55"
+ "\x5f\x64\x46\x09\x8f\xbf\x14\x75\xf4\xfb\x9d\xbc\x22\xd6\x86\x75"
+ "\xa4\xd5\x6d\xa6\xba\x97\xf1\xca\x58\x9b\x9b\xfd\xa5\x5e\xce\x8d"
+ "\x78\xce\xc3\xf7\xe0\x15\xdc\x79\xfd\x73\x4f\xfd\x10\x78\xac\x3f"
+ "\xd7\x10\xdf\xec\x1c\x48\x88\xb5\x7d\xd3\x52\x4a\xfc\xc4\x5f\x9a"
+ "\xdc\xca\x90\xe4\xf7\x35\x5f\xbe\x23\x75\x0f\xe1\x39\xdc\x67\x89"
+ "\x77\x51\x25\x24\x03\xa4\xf4\xb1\x8f\x67\x0c\x39\x98\xe1\x0a\xed"
+ "\xad\x43\x24\x47\xf1\x7d\x99\x09\x55\x53\x59\x3a\x7d\x9b\xda\xc7"
+ "\xba\x62\x83\x06\x96\x42\x7f\xc9\xde\x1b\xf3\x10\x5f\x24\x03\xfa"
+ "\xe1\xf6\x4b\x38\xb3\xee\x12\x74\xbf\x7a\x2f\x4b\x55\xa9\x3e\xe8"
+ "\xa5\xab\xa7\xb2\x54\xe8\xa4\x29\x2d\x2d\x2b\x24\xcf\x6c\x74\x99"
+ "\x73\xfb\x54\x36\x67\x78\xbb\x7f\xe9\x97\x3c\xe3\xc7\x56\xfc\x6e"
+ "\xf6\xb2\x9b\x6d\x5f\xe3\xdd\x54\x2f\x62\x90\x72\x7e\xa3\xc5\x20"
+ "\x79\xcb\xae\xf7\xcd\x75\x12\xef\xc4\x19\x05\xe1\x1b\xce\x80\x34"
+ "\xdd\xb7\x22\x7c\x18\xc7\x87\xca\x71\xe7\x50\xa4\x29\xc9\x80\x65"
+ "\xb2\xe8\x87\xe6\x77\x34\xb4\x7d\xf6\x6a\xd4\x81\xfe\x64\x65\x4b"
+ "\xbd\x39\x7c\x92\xba\x59\x97\xd0\xf3\x54\xec\x65\x09\x4f\xee\x65"
+ "\xc9\xed\x8f\x8a\x71\x05\xe4\x5a\x34\x32\xf4\x57\x2d\xc7\x3a\x23"
+ "\x9c\xa0\x7e\xa3\x3d\xe0\x46\x47\xf0\x82\xb3\xa4\x80\xab\xce\x1f"
+ "\xc0\xef\xce\x5f\xbf\xe2\xdc\x70\x98\x2d\xef\x09\x4a\x3f\x7a\xab"
+ "\x98\xf7\x00\xd5\x77\x60\x2a\x4b\xee\x65\x7f\xbd\xcf\xb5\x16\xb4"
+ "\xd6\x72\x8b\x73\xc3\x11\xaa\xfb\xaf\xdf\xc6\x7e\x54\x49\xf0\x91"
+ "\xfb\xd2\xc7\x09\xae\x40\x17\x43\x0c\x97\x07\x6d\x3c\x84\x7a\x28"
+ "\xcf\x53\x62\xbc\xfb\x2c\xd6\x2c\xe9\x37\x56\x8c\x35\x7c\x1e\xa1"
+ "\x8d\xc3\x75\x49\xd4\x77\xd0\xb5\x9a\xf8\x57\x6d\x4c\x3a\xac\x25"
+ "\x7e\xfd\xf5\x94\x73\xc3\x41\x86\xf9\x41\x7e\x7a\xef\x74\x11\xc4"
+ "\xb3\xce\x0d\x9f\x17\xe4\xe9\x65\x1f\xa3\xde\xff\x13\x39\x67\xc3"
+ "\xf9\x4f\x24\x4f\xfd\x5e\xd8\x02\x76\x2d\xde\x47\x30\x92\xfa\xc7"
+ "\xbf\x3e\x8e\xbe\xba\xd9\x5f\xd7\xba\x0a\x3e\x1e\xfd\xae\x2f\xad"
+ "\x7d\xc2\xfb\x6d\x1d\x42\xf7\xf6\xf1\xf7\x1e\x0c\xaa\x5c\xd2\xb3"
+ "\xbf\x25\x13\xef\x76\xc8\x4d\xbf\xa0\x05\x82\x9e\xdc\x8e\xb3\xf1"
+ "\xbf\x4d\x34\x2b\x72\x7e\x31\x16\xf0\x4c\xa3\xcd\x71\xd4\xb9\x47"
+ "\x32\xfa\xaa\xcf\x31\x4f\x98\x77\x48\xc5\x79\x16\x6c\xd6\xaf\x58"
+ "\x98\xc4\x3f\x5e\x43\xf5\x4a\x1a\x57\x1e\x48\xd7\x7c\xb1\xa6\x0f"
+ "\xc4\x7d\x62\xe4\x4f\x58\x98\x6e\x5f\xcb\xe3\x3e\x81\x0d\x2f\x6c"
+ "\xa2\x2d\xa0\x51\x07\x0c\x72\xed\xa0\x8f\x5a\xd9\x39\xf2\x9c\xfd"
+ "\xe3\x4e\x2a\x3f\x67\xd4\xf1\xc6\x10\xdd\x71\x10\x99\xa6\xf1\x88"
+ "\x3b\x78\x44\xab\x68\x3f\x18\xe7\xf2\x0d\x31\x79\xf6\xff\x37\xf8"
+ "\x16\x18\x87\xfb\xd7\x7a\xdf\xae\xed\x8c\xe2\x6f\x99\xf2\x8c\xe2"
+ "\x6f\x75\xba\x3c\xce\x13\x08\xc6\x0e\xb3\x88\xe7\x41\x7c\x97\xea"
+ "\x4b\x9c\xd7\xe4\x4d\x5c\xe4\x96\xeb\xe6\x6f\x4e\x9e\x28\xe9\x6d"
+ "\x56\x80\x95\x62\x5c\x9a\x8e\x63\x1c\xc6\x4c\xf5\xb8\xf5\xb3\x72"
+ "\xbd\xee\x31\x63\xe4\xe8\x63\xa3\x31\x49\xbf\x1d\xf3\x0e\x89\xb1"
+ "\xc1\xf7\x94\x18\xdb\x89\xef\xa1\xfc\xb5\x8d\xe7\x84\x8c\x91\x58"
+ "\x31\xaf\xc9\x39\x15\x75\x9c\xbc\x8c\xfe\x61\x4e\x88\x3e\x4c\xe9"
+ "\x63\x27\x9a\x78\xfc\x93\xf1\xd7\x58\xa7\xbc\x6b\x5d\xb1\xc8\xfd"
+ "\x0c\xd1\x60\x79\x17\x17\xf6\x3f\x27\x4f\xf2\xca\x45\x6e\xc8\x30"
+ "\x03\xd4\x1e\xe1\x47\x14\x1d\x3a\xb9\x1a\x73\x75\xfb\x61\x96\x21"
+ "\xf1\xf0\xe4\xb7\x20\x3b\xcb\x18\x66\x27\x49\xfe\xfd\x4b\xab\xb4"
+ "\xfd\xd1\x6d\xb1\x15\x61\x8b\x1d\x4d\x63\xaf\xad\x8f\x27\x05\xbd"
+ "\xe3\x49\xb3\x56\x50\x7f\x7d\xc2\xc6\x89\xfa\xbb\x39\xa8\xd3\xbf"
+ "\x13\x3e\x0e\xdd\x79\xb1\xa6\x43\x05\x2d\x2b\x96\x3e\x30\xa9\x3f"
+ "\xb5\x61\x1d\x2a\x7c\x15\x38\x78\x2b\xf2\xd1\xdc\x5f\x40\x1e\xe9"
+ "\x5b\xaf\x4f\xbb\xc7\x7f\xf2\x25\xed\x8e\x7e\x1a\xec\xbe\xa8\x6c"
+ "\xa7\x5b\x31\x08\x3b\x61\xc0\x00\x6d\x8b\xbe\x1b\xa0\x2f\x3d\xd9"
+ "\x1f\xd1\x59\x9f\x10\xb2\xa3\xf4\xb3\xf1\x77\xa3\x8e\x23\x34\xde"
+ "\x71\x32\x6e\xcd\x89\xc7\x8f\xcd\x61\x02\x07\x06\xb8\x25\xfe\x0b"
+ "\xf5\xc0\xc9\xbf\xcf\x89\x86\xd3\xf2\xa0\x5a\x22\x69\xd0\xc9\x14"
+ "\x2e\xd6\xfa\xc9\x94\xcf\xe6\x27\xfe\xbe\x4d\xe7\x45\x24\x9c\x93"
+ "\x89\xbe\x9c\x5a\x2a\x60\x5d\x7e\xba\x1c\x7e\xa5\x9f\x28\x86\x9f"
+ "\xfc\x7f\x2c\x42\x3c\x82\x60\xf9\xe9\x43\xa1\x12\x0b\xfc\x2f\x33"
+ "\xb5\xfc\x74\x73\xaf\x8d\x19\xb2\xe8\x0f\x7e\xfd\x21\xe3\x91\xcc"
+ "\x9a\xcc\xe3\x89\x3f\xa1\x75\x5e\xb4\x86\x99\xbf\x97\x07\x7d\x45"
+ "\x5a\x0a\xe2\x05\x20\x56\x00\x62\x7d\x84\x4a\xd2\x26\xd1\xf3\x64"
+ "\xe2\xe7\x92\xb9\xe9\x74\x1d\xce\xfa\x43\x0e\x4e\xf4\xf8\x04\x6c"
+ "\x99\x0d\x2e\x6f\x80\x15\x9d\x63\x26\xc4\x23\x08\x56\xc6\x66\x76"
+ "\xf8\x4e\x0a\xf9\x26\xc9\xc6\x52\x88\xff\xc0\xdd\x16\x8b\x9a\x18"
+ "\x9b\x41\x7b\xfc\x62\x39\xee\x0b\x5c\x8e\x5b\xf6\x1b\xfd\x17\x34"
+ "\x8e\xe4\xf0\x62\xd1\x77\xf7\xe9\x20\xd5\xaf\x96\xf7\x1f\x09\x95"
+ "\xf7\x37\x49\x5f\x11\x6d\xac\xb8\x80\x7b\x5c\xbe\x36\x92\xb9\x2e"
+ "\x8b\xd8\x8c\xb0\x25\xc0\x18\x31\x3e\xb4\xfd\xc1\xa5\x73\x22\xbe"
+ "\x42\x90\xde\x4b\xd6\x6a\x65\xfa\xa9\x4c\x7f\x1b\x1b\x2a\xef\x17"
+ "\x63\xef\xf0\xc9\xb2\x59\xe2\x99\xca\x47\xc3\x41\x1b\x73\x18\x0e"
+ "\x34\x76\x8c\x0f\xe3\x0f\x02\x26\x04\x03\x6d\xac\x96\x2b\xda\x38"
+ "\x31\xc6\x3f\x10\x55\xd8\x4b\xe3\xa4\xb1\x8a\x71\x5e\xa1\x71\xb6"
+ "\xe6\x31\x16\xa8\x9a\xe7\xfc\x24\xbe\xbf\x09\x32\x6a\xc9\x87\xc4"
+ "\xc3\x17\xd6\x30\x92\x45\x8d\x2f\x17\xd7\x18\x76\x13\x6f\x52\xec"
+ "\x25\x99\xd4\xcb\x3d\x1d\x34\x26\x97\x8d\xfe\x82\xf5\x0c\x3c\x8e"
+ "\xce\xaf\xc3\x4e\xfc\x03\xf5\x34\x2b\xf6\x70\x0f\xf1\xa6\x01\xd8"
+ "\x31\xbb\xf2\x68\xfc\x24\xc3\xf6\x6a\xfd\x47\xde\xa2\x8b\x72\x5c"
+ "\xe6\xb5\x2c\xe5\xad\xef\x94\x1b\x5c\x5d\xe5\x4c\x1f\xcb\x43\x94"
+ "\x8f\xc6\x63\xa1\xba\x12\x31\x1e\x95\xc6\xb9\x8f\xfa\x19\x88\x1a"
+ "\x53\x7b\x7f\x80\xea\xfc\x13\x8b\x5f\xc1\x94\xbd\xe7\x69\x1c\xe7"
+ "\x99\xa5\xa6\x98\xf8\xaf\x6f\x80\x5f\x74\xdf\x34\x21\x93\xa5\xba"
+ "\xd9\x3f\x52\x25\x8d\x17\xbe\xce\xaf\xef\x63\xa7\xee\x0b\xfb\x33"
+ "\x47\x8c\x88\xc4\xd8\x55\xc0\x23\xe1\xd7\x1c\x7b\x86\x9f\x70\x06"
+ "\x67\xfe\x9b\xa9\x0d\x7f\xda\x64\xd1\x1f\xc7\x7c\xd8\x35\x27\xd0"
+ "\x3b\x62\xa3\xe1\x1e\xb6\x42\xe5\x32\x39\xc1\x0c\xf5\x13\x3f\xb7"
+ "\x18\xbf\x80\xe1\xa8\xf6\xbb\xaf\xb0\x05\xd4\x46\x3f\xe4\xef\xa6"
+ "\x62\xaf\x61\xe7\x2b\x6c\xce\xb5\xd1\x94\x53\x05\x63\xd1\x6f\xe8"
+ "\x7a\x51\x1f\x8d\x6d\x12\xed\xdc\xdf\x1e\xbe\xc6\xac\x82\x96\x49"
+ "\x3a\xd8\x6d\x85\x2e\xf5\x1a\xdb\x15\x3c\x1c\xec\x35\xae\xad\x5c"
+ "\x77\xaa\xde\x0f\xaa\xc3\x3d\x56\xdf\xaf\x1d\x0e\xdd\x85\x63\xd5"
+ "\x55\xb9\x47\xd8\x5b\x96\x54\xed\x21\x7a\x41\xbc\xc2\x31\x0b\xce"
+ "\x65\x68\xef\x3c\xe8\x63\xf9\xfb\x19\xe2\xf9\x25\xba\x82\xcb\xd8"
+ "\xb1\xfa\x74\xd6\x70\x09\xbe\x10\xd3\x26\x3d\x7d\x89\xe6\x52\xa3"
+ "\x21\xe0\x49\xa1\x93\xe6\xf9\x69\xc9\xd5\x7b\x74\x1e\xfe\x9f\xf7"
+ "\x15\x5e\x66\x06\xeb\x3a\xf1\xbc\x78\xb1\x95\x07\x6b\x0d\x6a\x5e"
+ "\x3d\xfc\xf4\x27\xcd\x42\x3c\xe3\x3c\xdd\xf7\xbd\xe0\x7d\xec\xb4"
+ "\xe6\x06\x2c\xf1\x95\x1b\xd8\x1c\xc4\xeb\x30\x7b\x25\x2f\x27\xf7"
+ "\xeb\x7f\x16\x50\xff\x92\x35\x7f\xf8\xc9\xd2\x1f\xfe\xa9\xa3\xb0"
+ "\x91\xd7\xbe\xbf\x18\x22\x19\x46\xd4\xbb\x81\xa5\xd6\x5f\x62\x69"
+ "\xe0\x83\xb2\x4e\x4b\x9e\x0d\x72\xe1\xb2\x7e\x33\x0f\xfd\x2b\x8d"
+ "\xed\xef\x8b\xc4\xf3\xf0\xe6\x23\x06\x08\xb7\x8c\x65\x8b\x5d\x3d"
+ "\x59\xd8\x26\x08\x5f\xd2\x38\xb3\xa0\x77\x56\xfb\x63\x66\x3c\x06"
+ "\x3b\xc7\x46\x79\xbf\xf4\x58\x50\xda\x0e\xfb\x1d\x3d\x29\x7a\x9c"
+ "\x83\x31\xcf\xde\x2b\xa4\xbc\xa3\x8e\x23\xf9\xcb\xeb\x77\x4a\xdf"
+ "\xba\x3d\xab\x5c\x3b\xd4\x28\x19\xa7\xe7\xab\xf8\x86\x34\xf8\x2b"
+ "\xcc\x10\xb0\xec\xd9\x01\xb9\x47\x93\x19\xdf\xb2\x86\xd3\x24\x0f"
+ "\x23\xec\xb7\x2d\xf2\x2c\x91\xf6\xa6\x24\xea\x4b\xa3\xbe\x9f\x61"
+ "\x5f\x97\x3e\x8c\x7b\x8e\xb8\x95\xa0\xf7\x2a\xfd\x4b\xd6\xec\xcd"
+ "\x71\x0e\x94\x41\xf9\x7b\xf4\xfd\x4d\x9c\x07\x6f\x9f\x7a\x4f\xfe"
+ "\x16\x36\xed\x9b\x37\x98\x18\xce\x12\x29\xaf\x47\xee\xbb\xa7\x13"
+ "\x22\xe7\x0d\x19\x02\xde\xf0\xbd\x21\x64\x0c\xf8\xb4\x95\x31\x3b"
+ "\xfa\x75\xdf\xb6\x72\xff\x3d\x3d\x2b\xd2\xce\xe9\xa5\xe1\x7d\x94"
+ "\xda\x80\x3d\x3b\xea\x97\xbc\xc9\x69\xe9\x6f\x92\xf2\xc9\xfd\xf5"
+ "\x34\xbb\x0a\x2f\x96\x06\xf8\xaa\x9a\x3c\xe9\xea\x3f\x23\xe1\x6b"
+ "\x67\x31\xb8\xd3\xf1\x56\xb1\xdb\x98\x24\x7d\xd0\x9b\xa9\xfd\xfd"
+ "\xf8\x0e\x5c\x77\xde\x0e\x7d\xe0\xe9\x4f\xa0\x5d\xe6\x57\x32\x13"
+ "\x1e\x84\xac\x2f\x78\xf1\xd3\x9e\xb9\x54\x8e\xd2\x26\xbd\x79\x3e"
+ "\x60\xac\xde\xca\xe6\x48\x1f\xc1\xa7\x85\x7d\x27\x7c\x31\x7c\x21"
+ "\x85\x59\xbe\x50\xcb\xd2\xfc\x8e\xde\x64\xb7\x72\x45\xfa\x85\x42"
+ "\xfb\x55\xf7\x27\xe3\x5e\xca\xab\x43\xee\x58\x39\x57\xbd\x2f\xe3"
+ "\x0e\x4a\xd4\xfb\x03\xda\x59\x53\xa7\x9b\xf5\x1e\x3e\x70\x5e\xda"
+ "\xe5\x0b\xfd\x52\xc5\xec\x9a\x88\x2d\x43\xef\xcb\xb2\x2f\xbd\x2f"
+ "\x1f\xb3\x89\x3b\x3c\xc7\x1b\x44\xec\x81\x5e\x92\xcf\x7a\x9c\x9a"
+ "\x3e\xa6\x53\xe0\x15\xf8\xdd\x32\xc8\x60\x67\x9c\x95\x94\x0f\xfb"
+ "\x04\xf1\x47\x19\x82\x87\x27\x5e\x57\x25\xfc\x89\x8c\xbf\xf7\x06"
+ "\xe8\x1b\x47\xa5\x89\x7b\x19\x13\x65\x2a\x67\xb9\x85\x6d\x4c\xe5"
+ "\xfd\x79\xf4\x6b\xe2\x95\xb7\xd5\xd0\x6f\x02\xe1\x5c\x23\xfd\x26"
+ "\xd3\x6f\x1d\xfd\x12\x0f\x73\xff\x0a\xe0\x25\xc9\xb0\x16\xc4\x60"
+ "\x1d\x48\x9c\xd5\x35\xd6\x7d\x3f\xc0\xc6\xb5\xe3\x3f\x99\xb4\xff"
+ "\x3b\x53\x83\xf8\x9b\xcb\xf7\x33\x96\x1f\xe4\x43\xd6\x9b\x11\x43"
+ "\xe7\x4c\x4d\xc9\x7e\x9c\xcb\x9f\xc9\x19\x7e\x2e\x7f\x66\x07\xfd"
+ "\xb5\x30\xe6\x21\x2c\xf7\x2c\xa1\xe7\x9a\xc8\x9f\x67\x87\xdf\x71"
+ "\xa6\x86\xe0\x28\x78\xac\x6b\xa3\x89\x67\x84\xce\xa7\x1a\x72\x51"
+ "\x62\x5c\xa9\x1c\xef\x22\x27\xbd\x9b\x78\xe2\xfd\x4c\x1b\x6f\x13"
+ "\xbd\x27\x5b\x4b\x68\x5f\x4b\x24\x98\x4c\xa5\x31\x27\xde\x9f\x87"
+ "\xf1\xa2\xbf\x03\x89\xb7\xd5\x44\xdf\x75\x44\x9d\x18\xbf\x37\x91"
+ "\xca\x11\x2c\xf9\xad\x4f\x27\xeb\xf0\xd4\xe0\x84\xfb\x3d\x86\x01"
+ "\xaa\x43\xf2\x41\x94\x9f\xea\xd0\xf3\x87\x61\x3f\x15\x7e\x37\x68"
+ "\x4e\x29\x1f\xc9\xc4\x26\xfd\x1e\xa5\xdf\xe1\x29\x7c\x7b\xad\x3c"
+ "\x1b\x41\x59\x5f\x54\x59\xf8\x0a\x19\xad\x3c\xb5\x69\x92\x6d\xde"
+ "\x46\x32\xdf\x99\xa7\x64\xbb\x1e\xdb\x58\x6b\xa9\x78\x06\xf1\x77"
+ "\xf5\x6e\xdc\xe5\x02\x3f\xb4\xd0\x35\xcd\xc7\x5c\xf5\x2a\xed\xf9"
+ "\xb3\x9d\x19\xc5\xdc\xd9\xcb\xce\x7e\xa9\x23\xe0\xb9\xc6\xfd\xd0"
+ "\x23\xec\x79\xf9\x50\x29\x73\x15\xde\x21\xce\xc6\xce\xb3\xbe\x6c"
+ "\x97\x57\xf8\x52\xc0\xb3\xb0\x87\xc4\x79\x3c\xf6\x06\x92\xb1\xc3"
+ "\x71\x60\x54\xca\xdb\x80\x74\x4a\xc3\x1d\xae\x03\x51\xdf\x78\xd5"
+ "\xac\x3a\xb9\xa6\xfa\x6e\x00\x6f\x21\xfa\x1b\xfc\x77\x27\xfa\xac"
+ "\x56\xcc\xaa\xc3\x18\x4a\x48\xfe\x43\xec\x5b\xac\x09\xeb\x26\xe8"
+ "\x0a\xcf\x5e\x26\xbc\xe3\x6a\xe5\xac\xba\x6b\x1b\xc3\x59\x27\xda"
+ "\x2c\x09\xf2\xf3\xde\xc4\x59\x38\x23\x32\x54\x17\xc7\x9a\xee\xad"
+ "\xe7\xce\x81\xa4\xd9\x4e\xbf\xa3\xcf\xf2\xb6\x5d\xce\xcd\xb5\xd5"
+ "\xdb\x67\xd1\xc7\xde\xa0\x8d\x9d\xda\x12\xfe\x10\xe6\xd5\xc9\xf8"
+ "\x38\x94\x67\xc5\x98\x3a\x2b\x9a\x67\xf0\x03\xb4\x37\x7c\xa2\xc1"
+ "\xa2\x31\xbc\x37\x5c\x5b\x3f\x1a\x3f\x47\x1b\x57\x64\x1b\xff\x32"
+ "\xfe\xf7\xda\xf8\x97\xf1\x6a\x6d\xc8\xb3\xf8\x7f\xd5\x5c\xbb\xec"
+ "\xf8\x2f\xe1\xd7\x92\xe8\x67\x93\xa4\x99\xe7\x94\x10\xc9\x6f\xc1"
+ "\x84\x45\x4e\xf0\x36\xb0\xbb\x45\xac\xa0\x60\x45\x5c\x69\xbb\x7d"
+ "\x88\x39\x37\x7d\xc4\x7a\xd8\xbf\xde\x47\x99\xf6\x02\xc8\x6c\xf7"
+ "\xb3\x2b\x55\xb7\x25\x5f\x31\xf4\xb9\x01\xef\xfd\x34\x0f\xfb\xa2"
+ "\xf0\xac\xc3\xf7\x11\x73\xad\x86\x7e\xb5\x93\xd6\xd7\xfd\x44\x2f"
+ "\x16\x39\x55\xa2\x0d\xc4\xa3\x87\x04\x3c\x88\x7f\x11\xf2\x16\xc9"
+ "\x6c\x42\xde\xf2\x0a\x5f\xe0\x89\x22\x06\x90\xe3\x95\x7e\xe8\xbe"
+ "\x43\x57\x32\xad\x7e\x07\x5b\x81\xd8\x40\xd0\x3b\x73\x93\xbf\x75"
+ "\x79\x30\x86\x0b\x79\x8a\x78\x7f\xc4\x06\x72\xf9\xdc\x2c\x44\x7c"
+ "\x74\xfd\x20\x4b\xa9\x27\xde\x93\x68\x76\x32\xe8\xfa\x01\x2d\x3e"
+ "\x50\xe5\x60\x24\x3e\x50\x03\x74\x3d\x5d\xf4\x3c\xc8\x8c\xa1\xca"
+ "\x79\x87\xf6\x0d\xb2\xd4\xfd\x9b\x58\xda\x3e\xe8\xf2\xce\x4a\xde"
+ "\x47\xd8\xc9\x23\x56\xd0\xfa\x34\x9c\x25\x44\x78\x1f\xf8\xfe\x88"
+ "\xd0\x2d\x31\x97\xd7\x06\xef\x7e\xb1\x0f\x06\x2b\x66\xb9\x83\x09"
+ "\xf7\xe7\x11\xec\x88\x06\xf7\x33\x82\x5f\xe1\x68\x73\xab\xdb\xdb"
+ "\xd4\x46\xc5\x77\x7a\x3b\x55\xd2\x77\x37\x3b\xb7\x78\x2c\x9c\x08"
+ "\xed\xcb\x64\xf3\xfa\x59\xba\xb4\x01\x88\xa3\x3d\xf1\xdc\x21\xd8"
+ "\x47\x16\x3f\xce\x2c\xa1\x7d\xab\x94\x92\xe7\x59\x8c\x2b\x98\xc1"
+ "\xf0\x57\x7c\x91\x7b\xe6\xad\x65\xe9\x38\x7f\xc0\x59\x89\xf5\x09"
+ "\x91\x7f\x4b\x6a\x21\x4b\x8f\xae\x7b\x89\x34\x22\x11\x41\x15\xb6"
+ "\xc0\x82\x64\xf3\x9a\x82\x3c\xeb\x23\x1b\x37\x6c\xc8\x5d\x57\x60"
+ "\x5d\x76\xef\x8a\x11\x77\xdd\xaa\x68\x5f\x30\x6f\xbb\x6f\xa5\x39"
+ "\xb8\xc4\x2a\xe3\x73\x5d\x48\x87\xbd\x2e\x2f\xc9\xac\x93\xfc\xe7"
+ "\x85\x2f\x49\x39\x49\x6d\x94\x77\xed\x2e\xa4\xcb\x77\xbe\x94\xf0"
+ "\xf9\xe6\x3e\x76\x5e\xec\xf7\xea\x3e\xcb\x41\xc2\x4d\xa5\x97\x9d"
+ "\x3f\x05\x1b\x07\x89\xa7\xe7\xdf\x86\xdf\x08\x69\x0b\x71\xee\x88"
+ "\xb4\x85\x38\x1f\xf6\xff\x22\x6c\xbf\x88\xbe\xc3\xee\x01\xe7\xdb"
+ "\x72\xed\x9d\x2f\xd5\xd7\x1e\xe5\xad\x20\xfe\x29\xf9\xda\x69\xce"
+ "\xf9\x0a\xa9\x33\x3b\xdf\x46\xf0\xcf\xd4\x6c\x1e\xa7\x77\x53\xdf"
+ "\xd1\x17\xfa\xbe\x02\xfd\x89\xdc\x19\xba\x70\xc3\x70\x7f\x39\xda"
+ "\x18\xf7\x59\x7e\x2a\xf5\xe1\x17\xbe\x84\xf1\x50\xb9\x8c\xa8\xf4"
+ "\x69\x34\xf6\x0c\x2d\xdd\x8b\xf2\xa3\xce\xc3\x03\xeb\x1e\x59\xff"
+ "\xb8\x2d\xbb\x60\xcd\xc3\x6b\xd6\xae\x29\xd8\x22\xdc\x41\xcc\x11"
+ "\xff\xdd\x3f\x33\x67\xe5\xc8\xd8\x06\x69\xd0\x8b\x68\x3e\xd1\x7d"
+ "\xb0\x69\x90\xba\xa9\x0b\xef\x06\x1d\xec\xee\x6b\x83\xc1\x05\x41"
+ "\x67\xea\x85\x8f\x98\x0b\xc7\x89\x3f\x66\xda\x19\x45\xbf\xb4\xff"
+ "\x94\xdf\x07\x12\xee\x5f\x61\x9d\xca\x16\x76\xb3\x01\x11\x0f\x8c"
+ "\xe6\xa4\x11\x7b\x58\xe5\x56\xec\x35\x9d\xac\x3d\x48\xfb\x99\x38"
+ "\xaf\xf6\xbe\x8e\x98\x67\xe0\xe3\x08\x46\x07\xbb\x99\x57\xcc\x3b"
+ "\xbf\x60\x39\x28\xfc\xbe\x5c\xb0\xfc\x14\x78\x83\x3e\xab\x3c\x73"
+ "\x1f\xe7\x99\x7b\xd5\x0b\x79\xfb\xf8\x85\xbc\xbd\x11\xbf\xaa\xde"
+ "\x23\x54\xf6\x70\xb7\x56\x57\xd5\x79\x76\x18\xb4\x0a\xef\xe6\x82"
+ "\x64\x92\xcf\x66\xd7\xa1\x3f\x2e\x6f\x3a\x93\xbe\x20\xbc\x47\x5c"
+ "\xbe\x3b\x18\xf1\x7f\x8d\xe2\xbe\xa7\x38\x63\x23\x1e\x8d\xca\xb9"
+ "\xa8\x5f\x2e\xef\x10\xe4\xd8\x3a\x95\xf8\x34\x1a\x6f\x0f\xed\x79"
+ "\x5d\xa8\x17\x63\xde\x4f\x7c\x3a\xec\x2e\xfc\x0e\x2f\xf1\xa1\xe7"
+ "\xba\xa2\x6d\x6f\x00\x83\x4a\xfa\x0e\xdb\x0b\x39\xff\xde\xcb\x98"
+ "\x3f\x82\xf1\xff\x89\xe0\xc0\xc5\x38\x8c\x6f\x69\x0f\xff\x07\x2f"
+ "\x3f\xdd\x25\xe7\xfb\xe2\x4d\x5a\xda\x85\x88\x2f\x8a\x8b\x5f\xa2"
+ "\xf7\x2b\xf4\xa7\xf2\xf2\xde\x40\xd4\xf9\x30\xbe\x09\xb9\x1b\x76"
+ "\x24\xb6\xad\x58\x2b\x17\x73\xe5\x79\x71\xaf\xdf\x5b\x92\x17\x43"
+ "\x65\x42\xb8\xaf\x2a\xe1\x7b\x71\xa7\x6b\xc7\x79\xdd\xde\x82\xfa"
+ "\x74\x69\xa6\xf3\xd1\x20\x6c\xd0\x52\x5c\x3d\x41\x61\xdf\xa8\xf9"
+ "\x1f\x51\x54\xc7\x85\x85\xb0\x8b\x27\x19\x2d\x61\xff\x24\x19\x57"
+ "\xc4\xef\xb8\x18\xf1\xff\x9c\x20\xf9\x36\xac\x2d\xc4\x8d\x14\xb6"
+ "\x23\xc4\x1f\xa1\x4f\x58\x5b\xd4\x56\x0f\xce\x9a\xe5\x1a\xbb\xe8"
+ "\xfd\xef\xad\xb1\x8b\x5e\x8c\x85\xea\xda\xc1\x0d\x25\x7c\x5e\x05"
+ "\x5b\x2d\x6c\x01\x82\x3e\xdc\x33\x36\x12\xfd\x3f\x2a\xe9\xc7\x40"
+ "\xb6\xb0\x17\xd9\xd4\xdf\x88\xbb\xbc\x07\x86\x58\x82\x5a\xee\x77"
+ "\x82\x5f\x6e\x2f\x14\x36\x14\x26\x2a\xd7\x04\x1b\x0b\xd8\x0c\x26"
+ "\x89\xb8\xa4\x1f\xb1\x03\x97\x99\xb1\x87\x5d\xb2\xe1\x4c\x27\x02"
+ "\xeb\x4b\xef\xe2\x0c\x8f\xef\xee\xb1\x99\x0b\x0d\xe5\xa8\x43\x1d"
+ "\x3c\xb7\x40\x2f\x47\x3c\xe2\x78\x94\xeb\x66\x97\x5e\x12\xe5\x90"
+ "\x57\xf8\xa9\x49\x5e\x45\xfc\x92\x1b\xf9\x83\xf4\xde\xa0\x26\xaf"
+ "\xe0\x44\xd7\x43\x9b\x82\x4d\xf4\x6d\xa5\x5a\x71\x5b\x0d\xa5\x65"
+ "\x8a\xb3\x84\x2b\x16\x9c\x31\x12\xce\xc5\xda\x5c\xee\x33\x4e\xd1"
+ "\x1f\xdc\x3d\x2e\xa0\x3d\x50\xc8\x17\x97\x42\x0d\x67\x99\xd1\xf6"
+ "\x28\xe6\x73\x40\xf2\xd8\xe7\xd9\x21\xd9\xbf\x81\xa7\x06\x76\xf7"
+ "\x37\x0d\x10\xbe\xfa\x0c\x26\x76\xcc\x12\xc0\xde\xbb\xe2\x98\x65"
+ "\x88\xe6\x67\x20\xd3\x6d\xf8\xa7\x5b\xf2\xb6\x03\xe1\xb5\x09\x1c"
+ "\x8d\xb1\x24\x97\xd0\x77\xbb\x6e\xa3\x04\xbc\xac\x10\xf1\x03\x2e"
+ "\xad\x00\xdc\xdc\xcc\x6b\x6a\x5f\x1b\xf1\xdf\x3d\x20\xef\xe9\x25"
+ "\x53\x99\xb0\xff\xfb\xd0\xa0\xda\x46\xfd\x80\x9f\x23\x7b\x68\x93"
+ "\x7a\x02\x67\xe0\x0f\x5e\x56\x39\xee\x30\xe0\x3e\x0a\xe4\x97\xe5"
+ "\x76\x3e\x00\x79\x0c\x77\xbf\x70\xfe\x8d\xfb\xf7\x91\x75\x32\x10"
+ "\xd0\xef\xe1\xeb\x6b\x03\xf7\xbb\xaa\x7e\x20\xd6\x29\x6c\x5a\x13"
+ "\xc4\x19\x40\xcc\x63\x67\x1f\xf4\x51\x9d\xe7\xc5\xd9\xd5\x40\x83"
+ "\x56\x0f\xfc\xb1\xf9\x1d\xbe\x85\x7a\x1d\x2a\xec\x81\x37\x08\x7b"
+ "\x3c\xb7\x2c\x2f\xed\x7d\x1e\xf4\xa9\xe2\x5e\x0e\xca\x4b\x3b\x1c"
+ "\x5f\xd8\xff\x9b\xbc\x2b\xe3\x2b\xd5\x6d\xc6\xe8\xb9\x22\x7c\xd7"
+ "\x8f\x60\x3a\x50\x31\xbb\xce\x47\xf4\xc1\x57\x31\xab\x8b\xbe\x11"
+ "\x9f\x7f\xee\x53\xbe\x3e\x86\xe9\x24\x10\xdf\x70\x23\x33\xa8\xf1"
+ "\xfe\x7e\xf8\x5f\xc1\x1d\x56\x69\xc7\x7e\x39\x4e\xf3\xc5\x12\x73"
+ "\x9e\xf9\xde\x8d\x9c\x85\x87\x34\x3d\xee\xe5\x74\x29\x47\x5c\x4e"
+ "\x17\x7a\xdc\xaa\xd9\xa5\x3f\xd9\x1a\x30\x34\x6d\x75\x1b\xa4\x7d"
+ "\xdd\xe5\x54\xe2\x64\xa2\x62\x60\xf8\x7a\x50\xd7\xe8\x3e\x79\x42"
+ "\x1a\xed\x1b\x14\xb1\xe2\x22\x72\xf9\xa0\xe0\xe9\x70\x6e\xad\x82"
+ "\x87\x4b\x8a\xab\x81\x9d\x92\xcb\x76\x09\xfa\xdc\x71\x52\x47\x20"
+ "\xf3\x68\x76\x9b\xd7\xf5\x0d\x7f\x9f\x84\x77\x09\xb3\xcb\x47\xf4"
+ "\xb3\xa1\x2a\x83\x8a\x18\x97\xbc\xa4\x91\xe8\xa5\xcd\x27\x7c\x3b"
+ "\xb8\x88\x27\xa4\x36\xb8\x6d\x03\xee\x46\x5e\x3e\x8b\xb8\x59\x72"
+ "\x6d\x0e\x8a\xf3\x1b\xd5\x71\x37\x2f\x81\x5c\xe4\x45\x3c\xad\x4b"
+ "\x8c\xf2\x4d\xa4\xba\xaf\x6f\x29\xec\x87\x9d\xd7\x11\xc4\x4a\xee"
+ "\xd1\xda\xf6\xc6\x85\x7c\x5f\x48\x60\xab\xfd\x8e\xc1\x34\x37\x7b"
+ "\xaf\xf1\xda\xe9\xc6\x60\xda\xd5\x78\x64\xc9\xb3\x65\xb0\xb1\xe4"
+ "\x6c\xe8\x51\x6e\xa7\xf6\x97\x71\xf4\xdf\x7f\x7d\xd0\x10\x20\xbe"
+ "\x6c\x3c\xbf\xad\xd4\xce\x82\x8e\xf1\x3c\xb4\x95\xe6\x6b\xc0\x42"
+ "\x72\x58\x1b\xeb\x90\xb6\x2f\x38\xbf\x37\x17\xfb\xf8\x25\x57\xf0"
+ "\x08\xf4\xf8\x5e\xc9\xa7\xf8\x13\x5d\xc1\x37\x18\xec\xb5\x41\x6f"
+ "\xba\xd9\xe0\x27\xe8\xd7\xed\xb6\x52\x36\xf7\x3c\xbe\x0f\x36\x4b"
+ "\xfe\xcd\x9f\x22\x7f\x07\x7b\xe0\x7b\x3a\xba\x4f\xf7\x6f\x5c\xf7"
+ "\x08\x1c\x98\xcf\x5d\x9a\xbb\x29\x77\xad\xf5\x1b\x70\x6f\x3e\xd2"
+ "\x0e\x34\x12\x4b\xd3\xef\xc6\xfe\x0a\x1e\x1a\x31\x35\xaf\x16\x4f"
+ "\x53\x8f\xa5\x49\x6b\x2e\x15\x7a\xe7\xff\xcd\x78\x9a\x3a\x8f\x8c"
+ "\x58\x9a\x91\x33\x98\x40\x63\x78\x0d\xa8\x6f\xf9\xf1\x2e\xf6\x74"
+ "\x87\xdf\x8a\x75\x24\xf7\x97\x80\x25\xda\x0f\x96\xf0\xe7\x52\x19"
+ "\x6b\xa3\xf4\x74\xfd\x0e\x2b\xe1\x62\x02\xbd\x67\x44\xee\xcc\x04"
+ "\x96\x12\xdc\xa4\x9f\xd3\x04\x91\x77\x95\x6e\xab\x20\xfc\x90\x6a"
+ "\xb6\x15\x6a\xd9\x82\xe3\x52\x3f\x18\xc8\x6e\x50\xc7\x9b\xe4\xd9"
+ "\x54\xa0\x5c\xbf\x93\x25\xd7\xe6\x5b\xda\xda\x0c\x34\x5e\xcd\x9e"
+ "\x24\xb2\x36\x02\x27\x22\xeb\xfa\x1f\x7a\xd9\x13\x9f\x65\x8b\xa2"
+ "\xc9\x69\xd7\xf7\xb1\xa1\x8b\xd0\x19\xca\x3b\xd8\x43\xe2\x0e\x9d"
+ "\xf4\xaf\x31\xf4\x9a\xf6\x4c\x6d\x0c\xed\xd7\x9e\x6f\xa4\xe7\x9d"
+ "\xda\x33\xf1\x8b\x43\x8f\x6b\xcf\xb4\x66\x87\xbe\xa5\x3d\xa7\xd0"
+ "\xf3\x57\xb5\x67\xda\x3b\x86\x66\x6a\xcf\x93\xe9\x39\x51\x7b\xbe"
+ "\xa1\x8f\x7d\x72\x59\x7b\xa6\x35\xf8\xc9\x49\xed\x5c\xdf\xd4\xcb"
+ "\x3e\x79\xff\xda\xe5\xc6\x4f\x6a\x25\x1f\xfc\xc9\x71\xe2\x8f\xf2"
+ "\xe4\xde\x13\x4e\xf3\x10\x6e\x2f\xd0\xe1\x4b\xe9\x15\x68\xc7\xef"
+ "\x18\x22\x7e\xb6\xc7\x1a\x95\xae\xf9\xb6\x1e\xb2\x10\x9d\x3b\x12"
+ "\x95\x6e\xd3\xd2\xd3\x49\x3e\x5d\x1c\x95\x9e\xa3\xa5\x2f\x21\xfa"
+ "\xb9\x30\x2a\x5d\x3b\xc7\x1e\x5a\xed\x66\x7f\x5f\x19\x95\xbe\x54"
+ "\x4b\xb7\xeb\x76\x34\x5a\x7a\x86\x96\x4e\xb2\xd7\x9f\x8d\x51\xe9"
+ "\xf3\xb5\x74\x7a\x0e\x1c\x8e\x4a\x17\x74\x45\xfa\xfb\x37\xf3\x63"
+ "\x85\x58\x5b\x43\xc4\xff\xff\xcd\x17\x95\x67\x9a\x56\xb6\x87\xd2"
+ "\xa7\x45\xa5\x27\x6b\xe9\x41\xb7\x32\x3b\xba\xce\x31\xe5\x79\xa5"
+ "\x8e\xad\x1e\x4b\xb7\x8e\x18\x18\xc2\x36\x59\xf0\xd9\xc1\xaf\xe0"
+ "\x8e\x97\x79\x3f\xef\xb6\x16\x73\xde\xcd\x82\x56\xcd\x7e\xb6\x09"
+ "\xb6\x8c\xf2\xbe\x5c\xd0\xa4\xf9\x4a\xf0\x8a\x3b\x74\x5b\x91\x76"
+ "\x45\xc4\x75\x9a\x67\x2f\x95\xbe\xe8\xf5\xb8\x46\xd0\x31\x69\xe7"
+ "\xef\x94\xe7\x35\xe8\xdc\x51\x0f\xf4\xd0\xae\x82\x21\x19\xa7\x80"
+ "\x64\x51\xa4\x41\xd7\x02\x78\x44\xeb\x94\x24\xdd\x0f\x7e\x45\x1d"
+ "\xc2\x3d\x55\xa9\x8f\xc2\x5a\x44\x7e\xd8\x8c\x45\xe7\x75\xb3\xe0"
+ "\x02\xfc\xc6\x58\x26\xfe\xd9\xef\x08\x5a\x22\xf7\x83\xae\xd8\xb4"
+ "\xf4\x3f\x51\x7a\x7a\x54\xfa\xaa\x31\x69\x3b\xd1\x41\x6e\xea\x69"
+ "\xbe\x32\xc8\x7d\xc1\x41\x1e\xa8\xfa\x3b\xf5\xfb\x51\x61\xa7\x77"
+ "\x73\xa8\xbc\xa7\x15\xf7\x67\x10\x87\x38\xb8\x89\x7b\x61\x97\x48"
+ "\xe9\x13\x1e\xf4\x79\x89\xc7\xf0\xf3\xca\x87\x61\x83\x7a\x99\xe1"
+ "\x7c\xb4\xa4\x1f\x31\x2d\xcd\x1c\xf7\xb2\x8b\xce\xb1\x04\xdc\xaf"
+ "\x69\x78\x14\xdf\x4f\xb2\x65\x79\x5e\xd6\x9e\x17\x62\x0d\x54\xf7"
+ "\xfe\x87\x75\xfe\x22\xd8\x19\xb9\xfb\xdb\x83\xf3\xe4\x9b\x4b\x44"
+ "\xdc\xf5\x90\xb4\xab\xd9\x86\x73\xfd\xfb\xed\xfc\x1d\xf0\xc6\xb3"
+ "\x1a\xcd\xdb\x98\x95\xf6\xf6\x04\x7a\xae\x91\x7f\xf4\x8d\xd2\xc7"
+ "\x1a\x93\x5c\xcb\xa1\x25\x52\x26\x3e\xbd\x40\xd2\x8b\xd0\x12\xfe"
+ "\x02\xe4\xc2\x10\xce\x83\xed\xc4\x87\xdb\x47\x2b\x5f\xb4\x9f\x19"
+ "\xae\xec\x26\xde\xe4\x7c\xb3\x41\xd2\x27\x75\x81\x6a\x30\x6d\x83"
+ "\xbe\x5b\xc4\x5c\xde\xed\x0f\x1e\x5e\x17\x30\xb4\x6f\xed\x61\x4f"
+ "\xdc\xc0\x2c\xab\x02\x06\xca\x13\x7a\x3d\xa9\x00\xfe\xf2\x67\x97"
+ "\x12\x3f\x6b\xf8\x15\x7d\x7f\x73\x5d\xb3\x21\x28\xf8\x15\x75\x81"
+ "\xd0\x91\x96\xfb\xe1\x63\xcb\xec\xea\x0a\x81\x17\x4f\x20\x5e\xdc"
+ "\x49\xf4\xdf\x14\xda\x9c\x37\x29\x98\x9f\x37\x61\xff\x06\x96\x10"
+ "\xca\x4f\x4b\x79\x7a\x90\x2d\xd0\xf7\x9f\xfd\x9b\x68\x4f\xf1\x5b"
+ "\xe2\xab\x69\x4f\x81\xee\x25\x49\x49\x16\x67\xc1\x78\x56\x0d\xa7"
+ "\x56\x37\x6c\xba\x7a\xfc\xf8\xd0\xe6\x34\xe1\x3f\x02\x7d\x19\x6d"
+ "\xac\x15\x7b\x99\x31\xa4\xdd\x33\x2d\x3e\xcd\x26\x13\xff\x6c\x48"
+ "\xba\xcc\x9d\x7d\x6b\x99\x01\x31\xb7\x8b\x73\x85\x7e\x33\xb6\x3d"
+ "\x2f\xc8\x5c\xf6\x8f\x59\xf1\x06\xcc\x91\x5a\x09\x3e\x0d\x36\xc5"
+ "\x94\x3f\xb9\x8f\xa9\xfb\xcd\x01\xda\x33\x02\xc4\x93\xff\x00\x72"
+ "\xb1\xfa\x0b\xe9\xaf\x42\xf5\xe1\x5e\xa8\x73\xc3\x3d\x48\x6b\x2f"
+ "\x39\x2d\x6c\xc7\x8f\xc8\xb5\xa5\x1e\xc2\x7b\x09\xee\xbd\xc6\x87"
+ "\x4c\xaf\x0c\x05\x62\xa5\x6e\x42\x7d\x49\xdb\x1f\x6c\x52\xb6\x53"
+ "\x0f\x8d\x85\xbb\x6a\xb9\x07\xb1\x13\xa7\xbb\xea\xc1\xbf\x72\xb7"
+ "\x38\x67\x87\x0f\x00\xfb\xdd\x4e\x3e\x58\xa3\xf9\x26\xe2\x8f\xab"
+ "\xbb\x3c\x5d\xd2\x3f\x29\xd7\x6d\xe4\x8c\x7c\x97\xc7\x23\xce\x18"
+ "\x76\x79\x02\x42\xe7\xbe\xeb\xac\x69\xfb\x54\xdc\x0f\xe0\x6b\x07"
+ "\xe2\xce\xd2\x9a\xe2\x19\x03\x49\x86\x51\xcf\x87\xc5\x7e\x54\xde"
+ "\x6b\xb2\xde\xcc\x52\x70\xd6\x93\x15\x92\x7e\x7e\xc5\x1a\x56\x98"
+ "\x8d\xef\x12\xdf\xa6\x77\xdb\x58\x8c\xf4\xa5\xcd\xdf\x98\x57\xcf"
+ "\x10\xa7\x22\x91\x9b\x3c\xcd\xc2\xf6\xb0\xdc\xd3\xea\xea\x47\x0c"
+ "\xb4\x10\x13\x67\x46\x0a\x2b\xe4\x71\x9e\x66\x91\x5f\x61\x89\x1d"
+ "\xfd\x34\x06\x93\xa7\xdc\x15\x38\xc7\xb4\x7a\xa9\x8f\x9e\x72\x5e"
+ "\xee\xa9\x13\xf7\xc7\x15\xf6\x3d\x9d\xae\x0a\x1c\x55\xd8\xd7\x25"
+ "\xae\xf7\x9a\x04\xdc\xa8\x3e\x6d\xbf\x9a\x8e\x67\xda\xbb\xd3\x85"
+ "\x0d\x49\x19\x5b\xa2\xf3\xc8\x6e\x2d\x0f\xca\xd0\xb3\xb8\xeb\x40"
+ "\xdf\xf3\x68\xec\x4c\xfb\x9e\x80\x34\x1a\x1f\xed\x59\xfc\x20\xc6"
+ "\x35\x16\x6d\x15\xb0\x28\x64\x31\xd4\x67\xe8\x49\x60\xa7\xef\x73"
+ "\xf9\xee\x76\xba\x30\x07\x8a\x01\xb1\x7b\xfa\xd1\x0e\xfc\x07\x81"
+ "\x6e\x52\x9d\x46\xd4\x17\xd5\xff\xb3\x7a\x5f\xd0\x1e\xbe\xd1\x58"
+ "\xcb\x85\x5c\x4d\x63\x46\x1e\xcc\x6b\xaf\x0d\xba\xb7\xcb\x04\x33"
+ "\x1f\xea\x4d\x01\x4c\x24\xcc\x14\xaf\x26\xd3\x6b\xf3\xa0\x9c\x1e"
+ "\x0e\x0f\xf9\xae\x9a\x88\x36\x6c\x60\x53\xfa\x14\x43\x8a\x06\x3f"
+ "\x19\xbf\x47\x51\x84\x9f\x06\xf9\x4d\xd9\x12\x55\xf6\xa6\x70\x5e"
+ "\xea\x37\x78\x23\xd8\x06\xe0\xac\x48\xe0\xab\xa2\x1c\x8c\x2a\x77"
+ "\x30\xeb\x22\xf1\xc8\xc4\x43\x6e\xdf\x23\xe2\xa1\xa6\xfb\xcb\x94"
+ "\xe6\x08\xbc\x65\x3d\xa3\xb4\x71\xb3\xde\x86\x5b\x51\xec\x7a\x3f"
+ "\xe9\x59\xee\xc1\x65\x4a\x30\x32\x27\xca\x34\xbd\x1c\x74\x3a\x34"
+ "\x47\xad\x88\x51\x3c\x46\xcc\x15\xc5\x45\xb9\x3b\x82\x77\x3b\x05"
+ "\x3e\x2a\x86\x02\xd8\x8a\x13\x5c\x0f\x49\x1c\x32\x64\x8a\xbd\x90"
+ "\xd2\x51\x27\xce\xfb\x84\x2f\xdb\x32\xc3\x5a\xaa\xb7\x5c\xeb\x73"
+ "\xa9\xec\x83\x81\xe4\x3f\xfe\x29\xbf\xb5\xf7\x64\xe7\x58\x57\x7c"
+ "\x49\xdc\xa1\x9d\xbb\xd1\x86\xeb\xb1\x39\x91\x97\xe1\x3c\x77\x72"
+ "\xd8\x67\x59\x99\xa1\x2d\xec\xb3\xac\x5c\x95\x77\x5e\x68\xd7\xe2"
+ "\x83\xbc\x16\xf7\x37\xf8\x26\x5e\x57\x05\xdf\x88\x97\xd9\x14\xc4"
+ "\x5e\x2f\xb6\xf1\x33\x1d\x36\x92\xd9\x4d\x81\x69\xbc\x3c\x60\x2d"
+ "\xbe\xcc\xc6\xc3\x36\x08\xf4\x07\xb6\xc7\x3c\x8e\xd2\x77\x05\xac"
+ "\xe1\x7b\x75\xca\xf8\x64\xdc\x05\xe5\x25\x99\x06\xca\x3f\x1f\xf8"
+ "\x00\x3b\xf1\x5e\x65\x9c\x97\xf2\xcd\xa7\x6f\x05\x95\x68\xc7\x14"
+ "\xb0\x87\x4c\x21\x6f\xc9\x39\x36\x4e\xc4\xcf\xb4\x07\xa0\x53\x33"
+ "\x74\x2b\x31\x5b\xa8\x4e\x3b\xa5\x27\x89\xf4\x00\xb5\xbd\x2b\x60"
+ "\xa7\x6f\x49\xf4\xed\x35\xfa\x55\xa9\x0e\x7b\x15\xf5\xbb\xf8\x1c"
+ "\xbb\x99\xfa\xe2\xa1\x76\xec\xd4\xcf\xde\x92\xc7\xd9\xe4\x0e\x9b"
+ "\x07\xf2\x1d\xd5\xe7\x96\x71\x41\xa9\x6c\xb7\x62\x8c\xa3\x71\x09"
+ "\x5d\x0a\xfd\x16\x56\xd2\x6f\x71\x88\x25\x15\x17\xd1\xbe\x57\x44"
+ "\xed\xe3\x9e\x2a\xd5\x03\x9f\x22\xb2\x2f\x34\x36\xe8\xd5\xa8\xde"
+ "\xa2\x7e\xde\x4b\x75\x7b\xda\xfb\xa9\x3e\x7b\x57\xb8\x4e\x8d\xa7"
+ "\xa6\xf5\x3d\xee\x2c\xaf\x32\x64\x52\x9f\xea\x60\x3f\x4d\x69\xc9"
+ "\x94\xd6\x13\xe6\x87\x95\x71\xa7\xb5\xe7\xb8\x70\xde\x92\x4c\x56"
+ "\xfc\x09\xb3\x08\x1b\x80\xcd\x31\xac\x5b\x19\x57\x00\xbf\x56\x91"
+ "\x3a\x8d\x17\x51\x5f\x05\xd5\x57\x92\xcb\xe2\x88\x56\x9b\xa8\x8f"
+ "\x88\x43\x7e\x4a\xc0\x49\xac\x31\xa3\x97\xc6\x52\x83\x31\xa9\x34"
+ "\x77\x95\xb4\x1e\x68\x3c\x0a\x8d\x27\xae\x28\x14\xbe\x7b\x8b\x31"
+ "\x4d\x84\x3c\x87\x71\x69\xf3\x58\x4b\xe3\xaa\x2f\xca\xe3\xa7\x68"
+ "\x6c\x9e\xf6\xbc\x2e\x46\x7b\x8f\xb9\xc3\xd6\x89\x7b\x0c\xa7\x24"
+ "\xdc\x3c\x98\xd7\x5a\x1a\x67\x7d\xd8\x0f\xb4\x32\xee\x71\xea\xfb"
+ "\x6a\xea\x57\x85\x36\x4e\xa4\xe5\x85\x79\x7a\x65\xdc\x1a\xed\x39"
+ "\x3e\x9c\xf7\x53\xe3\x8c\x3d\x11\x35\x4e\x2a\x3f\x7e\x22\xea\xd3"
+ "\xc6\x19\x4f\xe3\x8c\xfb\xf4\x38\x09\x9f\x36\xf1\x1d\xda\x38\xcb"
+ "\xb5\x71\x1a\x68\x9c\xf1\x34\xce\xa9\x51\xe3\x9c\x34\x62\x9c\x75"
+ "\x34\xce\x46\x1a\x67\x77\xd4\x38\x93\x47\x19\x67\x9d\x1b\x6d\xec"
+ "\x0a\x34\x8a\xbd\x65\x9c\xa1\x42\xdc\x67\x2f\x8b\x0d\xdf\xff\x54"
+ "\x71\x8f\x72\x50\xf8\x14\x3a\x02\xfd\x0d\xf4\x46\x90\xf5\x70\x67"
+ "\x33\x6b\x4b\x79\xa9\xd0\xdd\x4c\x96\xba\x69\xc1\x5f\x95\x8d\x4b"
+ "\x0f\xdf\x9f\xd8\x23\xe2\x22\xf9\x90\x2e\x7c\x00\x6c\x60\x42\xf7"
+ "\xb8\x7c\xcb\xe6\x12\x94\x47\x59\xca\xbf\x3a\x7c\xcf\x4b\x89\x15"
+ "\x67\x23\x80\x1f\x9e\xe1\xdb\x4a\xf4\xab\xcc\x50\x2f\xce\x0a\xca"
+ "\xc6\x55\x84\x75\x9a\x9b\x78\x0b\xe0\x22\xee\xa7\x8a\xfb\x9d\xac"
+ "\x3c\x2b\x58\xae\xdf\x33\xef\xa7\xbc\xcd\x51\xf7\xcc\xfb\x45\x1f"
+ "\x86\x84\x2f\x87\xcd\xcb\x83\x9b\xc5\x7d\x73\xca\x73\x22\xd2\xb6"
+ "\x71\x95\xd6\x76\x26\x9e\xbd\xd2\xd7\x1a\x74\x6c\x56\x61\xf3\x52"
+ "\x36\xde\xa4\xdb\x99\xb8\x95\x98\xc5\x58\xcb\xa3\xc6\x10\x2a\x1b"
+ "\x9f\x3e\xcc\xb7\x93\x62\x12\x31\x4c\x28\x7d\x49\xf8\xee\x78\xd9"
+ "\xf8\x95\x9f\x75\x77\xbc\xc4\x4b\xf3\x44\xeb\x8d\x68\xb6\x42\xb8"
+ "\xd2\xc8\x77\x85\xbc\x22\x0e\x8f\x32\x5e\xc4\x97\xeb\x56\xc6\xe3"
+ "\xfe\xa7\x59\xf8\x7d\x50\xc6\xff\x42\xa3\xcd\x69\xcb\x43\x41\xb3"
+ "\x9b\xda\x14\xbe\xa2\xc2\xef\xe3\x0f\xc1\xf7\x05\xe5\x3b\x25\x7c"
+ "\xe8\x53\x7d\xc3\xf3\x8b\xef\xa5\x23\xde\x33\x46\xbc\x5b\x7d\x44"
+ "\xb3\xc6\xb2\xa7\xa9\x9c\x2a\x74\xbc\x9d\x49\xdb\x98\xad\xe4\x2c"
+ "\x8b\x21\x5c\x3c\x8d\xbe\x75\x78\xc4\x5d\x3b\x33\x77\xa4\x33\x97"
+ "\x27\x28\xf9\x76\xe2\x97\xba\x53\x29\xcf\x59\x36\x19\x77\x3d\x10"
+ "\xa7\x88\xf2\xf7\x89\xd8\x44\x4a\xdc\xae\x55\x1b\xe3\x99\xfa\xfd"
+ "\xcc\x09\xdc\xf0\x84\x15\xe7\xf9\x2f\x0f\xb9\x11\xdf\x47\x29\x7e"
+ "\x8e\x4d\x03\x9d\x22\x1c\xee\xe1\x86\x42\x2b\x95\xe9\xff\xc9\x90"
+ "\x27\xd6\x15\xfc\x98\xd9\x88\x7e\xf6\x29\x71\x85\xc6\x42\x66\xac"
+ "\xee\x65\xc9\x84\x67\xc1\x63\x24\xae\xe8\xbe\x1b\xea\x27\x49\x9f"
+ "\x00\xf5\x84\x93\xf9\x16\x1e\xf0\x97\x99\xba\xdc\xec\x9f\x9d\xba"
+ "\xfe\xa2\x42\xfa\x6e\x33\x52\xfb\xf7\x09\x3f\x13\x92\x3f\x20\xd8"
+ "\xc6\x5d\x2f\xef\x8d\xa6\x7c\xdf\x5f\x16\x97\x10\x96\x6d\x94\xb8"
+ "\x3a\xed\x1c\x2c\x45\xee\x23\x71\x75\xc7\x48\xd2\xdd\x21\xed\x92"
+ "\x52\x28\xef\x82\xb0\x5d\x12\x74\x82\xf4\x9d\xef\x52\x53\xa4\xdc"
+ "\xa3\xa6\x64\x85\x4c\xda\x1a\x47\x7a\x4f\x39\xca\x52\x39\xb3\x88"
+ "\xa1\x5a\x16\x57\x10\xc1\xb5\xb8\x85\xd8\x4f\x69\x4c\x09\x34\xaf"
+ "\x4d\x18\x17\x60\xe2\x83\x9f\x36\xc5\x74\xe4\xd8\xc1\x31\x62\x6c"
+ "\x99\x4e\x2f\x08\x0a\xfd\xd2\x6c\x3b\xe1\xd3\x39\x9a\x83\xeb\xe0"
+ "\xab\xca\x45\xed\xb4\x37\x0c\xb1\x76\xcb\x00\xeb\xa0\x67\xdc\x3f"
+ "\x70\xfe\xe0\x9f\x24\xe1\x8f\xbe\x97\x13\x3f\xd0\x4c\x7d\x6e\x45"
+ "\x5d\xa0\x35\xb0\xd9\x84\x4f\xc1\x0e\xe2\x7a\x5c\x44\xe9\x51\x47"
+ "\xbb\xea\x61\xed\xf6\x53\xd0\x6d\xdb\x3b\x1a\x3e\x66\x1d\x96\x3f"
+ "\x8a\x76\xc0\x6f\x3b\x37\x0c\x5c\xad\x6e\xdc\x65\xf5\x68\x75\xf7"
+ "\x53\xdd\x29\x63\xd7\x3d\xab\xf1\x1a\xeb\xbe\x86\x7e\xcf\xaa\xb9"
+ "\x96\xba\x4b\xea\x78\x88\xe8\x70\x22\xc9\x14\x4e\xf8\x5b\xc5\x3d"
+ "\xd3\xd0\x20\x7c\xcc\x4c\x17\xb2\x7a\xaf\x32\xe1\x87\xa0\x37\xc2"
+ "\x46\x63\x97\xff\xa8\xb8\x83\x0a\x3d\xbb\x76\xf7\xd4\x15\x3c\xcd"
+ "\xa0\x77\xf7\x97\x4d\x08\xfb\x3f\x88\x3a\x9f\x4e\x76\x2b\x13\x4a"
+ "\xa5\xbd\xb3\xff\xa8\xc4\xad\x09\x5f\x46\x5d\xa3\xcb\x9c\x81\x80"
+ "\xb0\x9b\x57\x26\xbc\xae\xeb\xb7\x06\xe2\x02\x01\xad\x2e\xeb\x48"
+ "\xbd\xa9\xe6\x18\xc8\x9a\x6b\x2f\xb0\x4a\xff\xd5\xda\x85\xeb\x78"
+ "\xf6\x8d\xdc\x47\x72\xd7\x6c\xca\xcd\xb1\xae\xdc\xb8\x61\xdd\xdc"
+ "\xf5\x8f\x3e\x6a\x5d\x96\x9b\x9f\x9f\xfd\xfd\xdc\x78\xb6\x72\x43"
+ "\xf6\xba\xfc\x35\xd0\x6d\x5a\xad\x8b\xef\xcc\xca\x5b\x5f\x30\xf7"
+ "\x6b\x8b\xd3\x47\xe8\x36\x71\xff\xfa\x04\x64\x1c\xda\x9f\x26\x13"
+ "\x8f\x31\x11\x7e\x86\xcc\x5b\xb8\xf3\x09\x92\xaf\x09\x07\xfb\xb0"
+ "\x17\x62\xff\x81\xec\x45\x34\xfa\x38\xed\x19\x6d\xfb\xf6\xf0\xce"
+ "\x5e\xe5\xe6\x1f\x12\xdf\xde\x05\x7f\xcb\xb4\x67\x9c\xe0\x43\x25"
+ "\x5e\x71\xf6\xac\xdc\xbc\x0c\xfe\x91\x9f\xa4\x34\x6f\x9c\x9a\x52"
+ "\xfd\x77\x66\x94\x3c\x46\x42\x1b\x37\x8c\xe7\x15\x93\x79\x0b\xff"
+ "\xa7\x85\x69\xfe\xf7\x0d\x2e\x77\x00\x76\x3c\xa6\xe5\xc1\x12\x0e"
+ "\x9a\x2a\xd7\x57\x42\xbb\x5c\xa7\x9e\x2e\x71\x9f\x40\xb9\x79\x2e"
+ "\x64\xc4\xed\x88\xe9\x59\x96\x40\xf4\x5f\x5d\x1c\xa1\xd5\x93\x75"
+ "\xde\xbc\x8b\xe0\xbe\xb9\x9b\xde\x85\xef\x94\x71\x89\xa6\x61\x36"
+ "\x5a\x4a\x92\x87\x29\x53\x57\xc8\x3f\x2a\xa3\x4c\x5d\x25\xff\xf0"
+ "\x1c\xfd\x77\x73\xb2\xfc\x1b\x99\xfe\x3f\xfd\xd3\xdb\xff\x6f\xd7"
+ "\xd1\xf6\x19\x7f\x9f\xa3\x7d\x31\xee\xff\x8f\xe3\xff\x1f\xd5\x71"
+ "\xfc\x6a\x7f\xc0\x37\xc2\xad\x13\x4f\xfe\x9d\x99\x08\x3f\x6b\x2b"
+ "\x1f\x26\x9c\x3e\xc9\x2c\x85\x41\xde\x53\xf2\x3d\x36\xad\xf8\x2c"
+ "\xf1\x60\xc4\x6b\x15\xd8\x79\x4f\xf1\x20\x3f\x45\x78\xf3\x22\xe1"
+ "\x6f\x73\x55\x37\x4b\xa8\xec\x26\x3e\xab\x40\xc6\x35\xc2\x79\x13"
+ "\xee\x5a\xb9\xe8\xbd\x6d\x53\x80\x7d\xe0\xbd\x08\xbb\x46\x67\xc7"
+ "\x6a\x26\xbc\x28\x00\x7f\x13\x56\xb3\x94\xfa\xc9\xfc\x28\x77\xbc"
+ "\x72\x82\x1b\x5e\x69\xa3\xb4\xe3\xaf\xaa\x19\xb1\xaf\x6e\x6d\x8d"
+ "\xb5\x3e\x8c\x7d\xde\x5c\xa9\xe1\xe6\xf5\xe2\x2e\x21\xfd\x02\x07"
+ "\xe1\xb7\x5b\x9c\x5b\x28\x93\x9f\x92\x7b\xfa\xe4\x6c\x4d\x9f\x87"
+ "\x67\x11\xdf\x87\xc6\xd1\xcc\x1d\x4f\x58\x51\xe7\x2b\x6a\x73\x2c"
+ "\xf6\xcc\x57\xb7\x66\xc4\x16\x66\x33\x43\x87\xbb\x8f\x1d\x23\x5a"
+ "\x88\xf3\x71\x5a\x77\x87\x69\x9d\x35\xed\x9f\xcc\x6b\xa8\x7f\x15"
+ "\xc4\xcf\x95\x53\x9f\x0e\xf9\xcb\xcc\xd8\x7f\xfa\x35\x5e\xce\x49"
+ "\xeb\xe2\x70\x25\xe5\x59\xbe\x91\x4d\xaf\xa4\x7c\xc4\xdb\x95\x43"
+ "\x46\x91\xfd\xbb\xee\x32\xc1\xe0\x08\xb5\xd9\x69\x7d\x08\xef\x13"
+ "\x05\x8f\x81\xb6\x69\x1c\xd6\x6e\x65\xa2\x90\xf9\xd1\x86\xde\xae"
+ "\xbf\x2c\x79\x95\x5b\x89\x3f\xa8\x9d\x31\xd6\xc8\x7a\x92\xcb\xe5"
+ "\x7a\x0d\x2c\x46\x7c\x5a\xed\xae\xd6\xe2\xca\xad\xb4\xaf\x0f\x31"
+ "\x13\xb5\x51\x4b\x6d\x38\xcd\xdb\x18\x37\xe3\x9e\xef\x89\x20\xc9"
+ "\x35\xaa\xb4\xa1\x55\x26\x3e\x2e\xcb\x4a\x3e\x44\xf0\x1e\x21\xe2"
+ "\xef\x85\x7e\x86\xf8\x8f\x3c\xa2\x13\xc4\x73\x88\x3b\x12\xc4\x6f"
+ "\x20\x9d\xda\xa8\x85\xdf\x73\x92\x9b\x8f\xd0\xde\xdd\x04\x5e\xe1"
+ "\xa1\xcb\xff\xc1\x70\xc6\x01\x7e\x21\xdf\xce\x03\x22\x66\x59\xd9"
+ "\x44\x93\xce\x2f\x00\x3f\xc0\x23\x54\x3e\xc4\x8c\x57\x68\x8e\x09"
+ "\x47\x5a\x89\xff\x20\x9e\x7e\xe2\x62\x6d\x6e\x5a\x05\x5f\xa0\xc5"
+ "\x28\x97\x34\x7c\xe2\xd7\x69\x7f\x4f\xa0\x36\x5a\xdd\xca\xcd\x02"
+ "\x16\x92\x06\x4d\x5c\xad\xef\xf5\xd0\x39\xb8\xa9\x0e\x4e\xb4\x8e"
+ "\xe0\x76\x64\xce\x6a\x85\xb9\x95\xe4\x43\x34\x17\x47\x90\x97\xca"
+ "\x1b\x29\x7f\x0d\xed\xfb\x3a\x7f\x7d\x82\x64\x02\xe2\x03\x26\x5a"
+ "\xd0\x0f\x2a\xd3\x46\xb0\xc6\x5c\xb4\x6a\x74\xec\xb8\xe4\x61\xae"
+ "\xfb\x85\x0e\x7b\x9a\xeb\x1d\x11\xf8\x4f\x3c\x11\x0d\x7f\x82\xc5"
+ "\x0e\x6d\x2e\xbf\x17\x35\x77\x24\x97\x5e\x37\x1f\x7a\x68\x6a\xef"
+ "\xa8\xd0\xa1\x29\x93\xae\x87\x2f\x37\xc2\x99\xa3\x04\x8b\xa3\x94"
+ "\xaf\x19\xb4\x79\xfb\xdf\x89\xe6\x3e\x0c\x1e\xea\xba\x9b\x24\x8f"
+ "\x3a\xe9\x28\x70\xb8\x57\x99\x24\x62\x8c\xf6\x28\x13\xa7\xa1\x3e"
+ "\x7a\xaf\xa4\x5f\xe2\x65\x27\xed\x2c\xa9\xe7\x5e\x9a\x6b\xc4\xbd"
+ "\x8e\xd7\xe6\xba\xc6\x5f\x36\xa9\x40\xbf\x87\x04\x1c\xc0\xdc\xd3"
+ "\x18\xa7\x49\x3d\xc5\xa4\x02\xe8\x1a\x45\xb9\x2b\x79\xe8\xe3\x09"
+ "\xac\x4f\xfd\x3b\xa5\x7b\xe0\x03\x37\x0a\x36\xd3\xb4\x39\x69\x16"
+ "\x71\x68\x95\xeb\xae\xd7\xfa\x86\x73\x3f\x13\xf5\x41\x9c\x43\x0c"
+ "\x5c\xc9\x8b\xa9\x46\x99\xe2\x48\x19\xac\x1f\xc2\x65\x33\x95\x49"
+ "\xa4\x5f\xae\xe7\x85\xaf\x7d\xea\x47\xed\xd3\xf0\x45\xa6\x4c\x3a"
+ "\x3c\x70\x25\xcd\x80\xd8\x15\xd4\xae\x01\xb8\x01\xbc\xd0\xeb\xa8"
+ "\x96\x30\x3a\x4c\xf3\x27\xf0\xeb\x58\xb0\x99\xe0\x7e\xdd\x4a\x37"
+ "\x93\x36\xd4\xa8\x47\xeb\x9f\x53\x9c\x0f\x8e\x9b\xd0\xd2\x20\xfd"
+ "\x06\x21\x5f\xd8\xff\x59\x84\xcf\x9c\x04\xbf\x00\x26\xaa\xab\x4d"
+ "\xc3\x09\x33\xe5\x3b\x18\xc6\x21\xf8\x1c\x50\xae\x4b\x05\xaf\xa9"
+ "\xf5\x1f\xb8\x77\x93\x84\xdd\xc4\x16\xe0\x80\x8f\xf8\x4f\x39\xcf"
+ "\x13\xe1\x2f\x3c\x45\xe2\xe1\x75\x1e\xbd\x0e\xe1\xb7\x80\xe0\xac"
+ "\x52\x1d\x3a\xae\x44\xd3\x06\x7f\x59\x4a\x0a\xd1\x85\x30\xde\xe8"
+ "\xb4\x40\xd6\x79\xfd\x32\x8d\x0f\xb1\xd3\xdc\x74\x8a\x98\x04\xf0"
+ "\x6b\x25\xf0\xf2\x7a\xeb\x31\x5f\x90\x3d\x09\xbc\x7c\x08\x34\x21"
+ "\xa5\x68\x20\xc9\x90\x17\xc1\xed\x94\xb5\x3a\x6e\x47\xcd\xab\xc0"
+ "\xed\x1d\x82\x1e\xa5\x54\xb8\xd9\x92\x95\x3a\xee\x63\x9d\xab\xb4"
+ "\xae\xab\x37\x89\xf3\x01\x33\xf4\x81\x62\xdd\x07\xfa\x85\x8c\x81"
+ "\xf9\xec\xb0\xf7\x08\x9f\xf7\xdb\x55\xc4\xa8\x38\x0d\xfd\x48\x1f"
+ "\xd6\xbf\xbe\xc6\x31\x37\xd4\x96\x13\x71\x0e\x76\x10\x0d\xc4\x1a"
+ "\xf4\x51\x9f\x44\x2c\x8c\x49\xcc\xd8\xb2\x2a\x83\xe5\xd3\xdc\x1e"
+ "\x5b\x8d\x79\xbb\x3e\x41\xbf\xf7\x50\x2d\x69\x40\x82\x86\x2f\xa2"
+ "\x8f\x23\xe0\x6a\x96\x70\xbd\x3e\x63\xf8\xfa\x9e\xe4\xc6\xfa\x8e"
+ "\x86\x2b\x60\x0a\xd8\x52\x5e\x1a\x7f\xfc\x12\x1d\xae\x51\x30\x3d"
+ "\xa9\xe1\xa3\x46\x5b\xaf\x1f\x95\xb6\x22\x76\x00\x62\x3d\x6c\xc7"
+ "\x58\x68\x4f\x41\xfb\x22\xd6\x9a\x26\xfb\xb4\x78\x81\x53\xd7\x77"
+ "\xba\x59\x61\x93\x4e\xc7\x08\x57\xd2\x80\x4f\x98\x2b\x9d\x76\x40"
+ "\x57\xa6\xf5\x3d\xa8\xcf\x07\xfa\x1d\x4d\x13\x68\x8f\x11\xf6\x5e"
+ "\x91\x31\x4f\x9e\x4b\xe5\x26\x81\xb6\x45\xf8\xab\xc9\x0b\x87\x8f"
+ "\x7d\x72\x2a\xc6\x0e\x9c\xb0\x6d\x82\xbe\x4c\xee\x65\x6e\xc5\xdc"
+ "\x34\x9c\x5e\x99\x5f\x14\x76\x19\x1a\x3f\x06\x7a\x6f\x7b\x48\xe6"
+ "\xc7\xfe\x46\xf9\x85\x6e\x5e\xdb\x0f\xb1\x2e\x90\x56\xaf\xc1\xe0"
+ "\x04\xe5\x6f\xc1\x5d\x6a\xf8\xe6\x99\x70\x42\xca\x82\x44\xa3\x8f"
+ "\xd2\xde\xe1\xa4\x7c\xab\x3a\x08\x5a\xc1\x71\x8c\xd5\x6b\xfc\x26"
+ "\xe8\x04\xdf\x9c\x39\x61\xb3\x87\xc5\xd9\xbe\xc6\xff\xd9\xab\x4c"
+ "\xf9\x36\xad\xa3\x00\xfc\x5f\x52\xdd\xd6\x5e\x65\xea\x57\xa8\xdd"
+ "\x14\xed\xd7\x42\xbf\x33\xe8\xf7\x06\xfa\x8d\xa3\xdf\x1b\x7b\x95"
+ "\x1b\x2e\x52\x7e\x55\xcb\x9f\x4e\xef\x7f\xa5\xf4\x3b\xb5\x5f\xea"
+ "\xe3\x94\x15\xf4\xbb\xe2\x49\xf0\x95\x0f\x89\xf4\x97\xf1\x4e\xbf"
+ "\xfb\xb5\x71\xb7\xc9\xb5\x3d\xa5\x88\xea\xb1\x23\x1f\xf6\x35\x4a"
+ "\xb3\x51\x9e\x6c\xd4\x0d\xdf\x06\xf4\x7c\x7d\x14\x7f\x4a\xf5\x58"
+ "\x10\xf3\x76\x3e\xfd\xe2\xae\x45\x01\x95\x7f\x1f\xf5\x12\x0c\x3a"
+ "\x23\xf4\x62\xe2\xb4\x1c\xbb\x9c\x4f\x9a\xeb\x3a\xac\x77\x9d\x1e"
+ "\x00\x9f\x86\xe5\x5b\x25\xf3\x49\xf9\x75\x4a\x40\x9f\xbb\xa0\xc4"
+ "\xdb\xc3\x41\x9a\x3b\xaa\x7f\x11\xca\xd3\xef\xbd\xda\x6f\x86\xf6"
+ "\x7b\x9f\xf6\xfb\xef\xda\xef\x62\xed\x77\x89\x5b\x99\xd2\xaa\xf1"
+ "\x26\x04\xb3\x29\xad\x80\x09\xad\x5d\xe9\x7b\x4e\xb1\x04\x21\x5f"
+ "\x13\xfd\xff\x32\x62\x84\xfa\xcb\x2c\x36\x5d\x6f\x0d\xdd\xcf\x95"
+ "\xb2\x09\xff\xd8\x27\x74\x3f\x96\xf2\x08\x2d\x0c\xf5\x24\x28\x19"
+ "\x8c\x78\xa7\x71\xf5\x06\x5e\xa3\xd5\xe3\x36\x68\xe7\xf5\x88\x35"
+ "\x84\x98\xad\xf0\x3b\x28\xe4\xa8\xc4\x45\x88\xb5\x7b\x42\xe8\xf4"
+ "\x77\xc1\x4f\x50\xc8\x43\x7f\x3e\x6f\x5c\x28\xa0\xd3\x7b\xc8\x4b"
+ "\x52\xce\x1f\xdf\x49\x6d\xf9\x22\x72\xbe\xe5\xa0\x3c\xdb\x9c\xf2"
+ "\x43\x7f\xd9\x0d\x51\xf2\xbf\x65\x35\xfa\x4c\xb0\xee\xa2\xf1\xcc"
+ "\xef\x56\x6e\x80\xbe\xf7\x8e\x1e\x39\xe6\x74\x7d\xcc\xda\x5c\xd9"
+ "\x74\x98\xf7\x28\x53\x3a\x89\x1e\x6e\x00\x7e\x77\x87\xe9\xf2\x14"
+ "\x11\x47\x4f\xc3\x1f\x9a\xe7\x29\xf0\xad\x54\x12\x45\x4f\x52\x22"
+ "\x74\xfa\x86\x9a\xe1\xf3\x32\xb1\x26\x28\xf9\x85\x2e\x5a\x97\xc0"
+ "\x81\xcc\x11\xeb\x32\x15\xeb\x52\x2b\xdb\x36\x9c\xc6\x4f\x4e\x05"
+ "\x8d\xd7\xfa\x48\x78\x3b\x65\x01\xe6\xc6\xad\xdc\x70\x58\xdb\x93"
+ "\xba\x68\x8f\xfc\x32\xa5\x5b\x65\x3f\x65\xba\xd6\x16\xe1\xdf\x14"
+ "\x0b\xf0\x5f\x4f\xd7\xf0\x1b\xf5\x24\x63\xae\xf5\x74\xad\x7e\xc2"
+ "\xd3\x29\x26\xac\x1f\x3d\x5d\xe2\x64\xca\x6a\xd0\x1b\x94\x0d\x0a"
+ "\x5b\x46\x92\xbf\x1f\x6a\xa1\x7e\x4f\xad\x20\xfe\xa2\x11\xeb\x79"
+ "\xfb\x56\x96\xb0\xb9\x8e\x25\xca\xb5\x39\xf5\x65\xbd\xac\xd4\xe9"
+ "\x4f\x6d\xd4\x69\x54\xb5\xa0\x67\xd7\xa7\x0c\xa7\x95\x37\x7d\x95"
+ "\x3b\xcc\xc1\xa0\x29\xe4\x6e\x0f\xce\x17\x34\x97\xd6\x7d\x3d\x95"
+ "\xeb\x72\xb3\x57\xca\xb5\xbd\xa4\x4d\x9e\xa9\xdc\x98\xd8\xde\x28"
+ "\x69\x97\x56\x77\x98\xfe\x45\xf1\x21\x82\xd6\xa3\x2d\xd4\x45\xfb"
+ "\x4a\xb2\xaf\x24\x73\x82\xa4\xdf\x37\xce\x71\xb3\x5b\x52\x74\xda"
+ "\x8a\xfd\xc9\xac\x30\x5b\xd5\x43\x72\x7f\x52\xa1\x03\xb3\xf9\x84"
+ "\xbf\xb9\x0e\x5b\x3f\xc3\xbe\x09\x7f\xde\x59\x5b\xe2\xe1\x37\x2a"
+ "\x93\xfa\x3a\x83\xf8\xb3\x83\xda\xd9\x0c\xc9\xb9\xd3\x3e\x84\x2c"
+ "\xab\xc1\x95\xd6\xd3\xb4\xd7\xb4\x79\x39\x41\xfd\x39\x08\xda\xbe"
+ "\x7d\x93\x8c\xd7\x05\x7d\x90\x88\x1f\x07\x9e\xd5\xc2\x03\x22\x36"
+ "\x41\xd9\x8d\x47\xa3\x74\x5c\x8d\x72\x9d\x4c\x7d\x5e\xc4\x9c\x28"
+ "\x0f\xb9\xa5\x3e\x71\xda\x03\x32\x7d\xda\x1c\x69\x87\x20\xfc\x86"
+ "\xe2\xdd\x12\x63\x99\xfc\x17\xa9\x17\x9e\x30\x24\xf9\x91\x69\x09"
+ "\x51\x36\x3f\x02\xd6\xc2\x6f\x71\xd9\xb4\xd4\xc8\xba\xb8\x31\x80"
+ "\x32\x54\xb6\x8f\xd2\x17\xea\xe9\x72\xaf\x99\xa8\xf9\x51\x08\xf5"
+ "\x4c\xd8\x96\xc1\x88\x36\x8f\xdb\xe7\xd0\xd7\xef\xb4\x7a\xd1\xbe"
+ "\xb6\x7e\x31\x46\xe0\x03\xd6\x70\x10\xbe\xbd\x68\x0d\x63\x2d\xd3"
+ "\xb3\x27\xa8\xaf\x5d\xc9\xdf\xa5\x88\xb5\x2b\xd6\xed\xb4\xc3\x91"
+ "\x7e\x4c\xcb\xd1\x70\xf5\xc4\xc0\x23\x96\x04\xfa\x46\x7c\xf7\x04"
+ "\xed\x2c\xeb\x46\x29\x63\xec\xea\x35\xa9\x83\x3c\x00\xdd\x34\xf4"
+ "\x09\xd0\xd9\x68\xf6\xaa\x38\x2b\xf1\xc1\x5f\x59\x0d\xad\x87\x88"
+ "\x8f\xb2\x64\xa6\xfb\x28\xf3\x97\xdd\x64\x89\xe8\x8e\x6f\xb4\x6b"
+ "\xe3\x72\x53\x7b\xf5\xce\xe2\x77\x80\x4b\x6b\xe4\x1a\xbb\x31\x0f"
+ "\x78\xec\x22\xdc\xa3\xfd\xa7\xee\x58\xa1\x28\xbb\x52\xc7\x3d\x5a"
+ "\xa3\x39\x34\xef\xa7\x6b\x27\xf3\x3a\x9a\x53\xd8\xd8\xaf\xa5\xf7"
+ "\x0f\xe9\x37\x47\xfe\x2a\xc9\xf8\xd5\x70\xbe\x8e\xca\xd6\xb8\xd9"
+ "\x8c\x66\x7d\x0e\x7c\x89\xb3\xbc\x02\xc7\x8a\x61\xdf\x98\x2e\xce"
+ "\xfa\x81\x63\xc0\x2f\x71\xe6\x4f\xb8\x66\xde\xf6\x1f\x0c\x78\x26"
+ "\xfc\x96\xd0\x3b\xfa\x0b\x3c\xa3\xba\x4e\xe8\x3e\x8c\xdd\xca\x4d"
+ "\xda\x79\xdb\x4d\x5e\xdd\x36\x1c\x78\x58\x30\x83\x5d\x4f\xf5\x5b"
+ "\x5b\xac\x3e\xe8\xce\xff\xe1\x0a\xde\xc7\x90\x17\xb0\x93\xf4\x72"
+ "\x4a\x8b\xbf\xec\xe6\xa8\xf9\x9f\x28\x7d\xc5\xae\x12\xfa\xcc\xeb"
+ "\xe8\x5b\xc6\x70\x9a\x93\xd0\x26\xf8\x4a\xda\x9f\xbf\x90\xc2\xac"
+ "\x84\xb7\xb4\xd7\xdc\x9c\xa3\xf3\xc3\xf3\x28\x8d\xf2\xa0\x7f\x90"
+ "\xc1\x3b\xe9\x39\x07\xfb\xf4\x18\x7a\x67\xc8\x25\x5e\xd0\x0c\xe8"
+ "\x9e\xa0\x07\x23\x58\x1f\xef\x55\x66\x9c\x6e\x87\x0f\xa1\xf5\x9f"
+ "\xf6\x63\x5d\x6c\xe7\x97\xe1\xd3\xca\xba\x81\x5d\xd7\xad\xcc\x68"
+ "\x85\xde\xa9\xe4\x22\x74\x3c\x37\xf7\x0f\xd7\xf1\x4c\x5f\xa8\xfd"
+ "\xad\xa0\xbf\x23\x91\x3f\xeb\x62\xed\xd9\x79\xf5\x3f\xeb\x2a\x99"
+ "\xd7\x9a\x47\x7f\x05\x12\x56\x16\x5a\x2b\xd3\x57\xe8\xb0\x02\x4d"
+ "\x01\x8d\x85\x9d\x0d\xd6\x39\x81\x1d\x3e\x8b\x68\x9e\xa8\xdf\xdb"
+ "\x67\x7f\xc3\xb9\x15\x32\xed\x74\xe1\x0f\x01\xfe\x88\xaf\xc9\xd6"
+ "\x4b\x99\x2e\xe6\x53\xf8\x8b\x55\xa6\x2f\xa6\xb6\x53\xaa\xcf\x33"
+ "\xa3\x6d\x03\xbb\x09\x3a\x74\x73\x88\x3b\x21\x03\x03\x27\x10\xd7"
+ "\xac\x4f\xb1\xde\x57\x50\xc4\x0c\xf4\x7d\x3a\x3d\xcf\xd7\x79\x29"
+ "\x2a\x93\x1c\x13\x60\x29\xe0\xa1\xee\x2d\x62\xd3\xfd\x65\xd6\x64"
+ "\x7d\xae\xc0\x67\x40\x8f\xa7\xe9\x22\xd0\x57\x61\x0b\x00\xdf\xfc"
+ "\x6e\xc0\x4d\xa7\x55\xe7\xa1\xbb\x9e\x1e\x8c\xf1\xb1\x64\xb9\x0f"
+ "\x59\x57\xd2\xbc\xa6\x48\x7c\xb1\x5a\x08\xf7\x8f\x47\xf5\xf3\xfe"
+ "\xa8\xe7\x32\x94\x37\xfb\xc0\xc3\x8d\x05\x1f\xeb\xf3\x3a\x7c\xaa"
+ "\x85\x4f\x4f\x66\x13\xf3\x1d\xe4\xfd\x88\xe3\x66\xdb\xca\x4c\x7d"
+ "\xca\x8c\xa7\x68\x8c\xb8\x9f\xdb\x2a\x75\xfc\x33\x76\xea\x72\xba"
+ "\xec\xf7\x8c\xaf\x9b\xb7\xc5\x30\xe8\xe6\xe1\x03\x52\xd8\x62\x5e"
+ "\xb0\x08\x7d\xbc\x2b\xb8\x90\x39\x8b\xef\x42\x9e\x9b\xb4\xbd\xec"
+ "\xc4\x40\x89\x85\x1d\xb3\x2c\xa4\x75\x3c\x63\x1a\xad\x95\xbc\x6b"
+ "\xb6\x79\x55\x66\x4c\xd3\xe0\xdb\x26\x6c\x45\x14\xeb\x39\xec\x25"
+ "\xd0\x0d\xd0\x3e\xd2\x82\xfd\x9a\xea\xb6\xeb\xeb\x86\xf6\x89\x16"
+ "\x82\x53\xbf\xa4\x31\x38\x9f\xb7\x7a\xe0\x3b\x46\xc8\x0f\x32\x7f"
+ "\x82\x3c\x37\x98\x71\x38\xcc\x6f\x53\x3e\x94\x13\x36\x84\x8a\xd5"
+ "\x99\x15\x82\x2e\xc1\xea\xc4\xd8\x34\x5c\xa4\xfd\x6a\xc6\x89\xc8"
+ "\xba\xb5\x8a\x7b\x79\xc7\xfa\xa3\xd7\xe5\x8c\x60\x44\x4e\xbd\xb9"
+ "\x69\x6e\x2d\xb3\x8e\xb6\x0e\x6d\x49\xd8\xab\x6e\x79\xbc\xba\x9a"
+ "\x37\xd6\x18\xd4\x7b\xb6\x57\xb1\x04\xa5\x82\xc0\x86\x75\xb6\x69"
+ "\xf5\xf5\xbd\xca\x2d\x45\xe6\x84\x29\x2b\xee\x2d\x18\xcf\x8b\x2d"
+ "\xcc\x50\x79\x69\xbc\x69\x46\x60\x4a\x23\x8f\x99\xfd\x8d\x65\x05"
+ "\x38\xfb\xae\x61\x67\xd6\xb2\x98\x7b\x43\xd4\x76\x02\xb3\xb9\x95"
+ "\xd4\x72\xdc\x35\x3f\x96\x00\x5e\x24\xb5\x1c\x75\x16\xd6\x33\x53"
+ "\x61\x0f\xf7\x54\x3c\x1a\x6b\xa2\xfd\x37\x99\xf6\x8d\xf2\x09\x09"
+ "\x53\x1a\xaf\x50\x1d\x6f\xaf\x16\xe5\x9a\xc6\xee\xdb\x17\xe2\x46"
+ "\xef\x9b\x6d\x72\xaf\xf2\x85\x1b\xae\xad\x6f\x33\x5b\x23\x7d\x9b"
+ "\xd9\xfa\xbf\xd0\xb7\x17\xa3\xfa\x96\x1c\xe9\x5b\x1e\xfa\xf6\xda"
+ "\xb5\xf5\xed\x8b\xa6\x48\xdf\xbe\x68\xfa\x9c\x7d\x3b\x3c\x76\xdf"
+ "\x52\x17\x8d\xde\x37\xfb\x94\x5e\x25\xf5\xeb\xd7\xd6\xb7\xb4\x25"
+ "\x91\xbe\xa5\x2d\xf9\x9f\xf4\xad\xb8\x9e\x9f\xee\xa0\x15\x04\x7d"
+ "\x0e\xe8\x7c\xaf\x32\xf3\x5b\x45\xd3\x84\x1d\xf7\x24\x7a\x8e\x2b"
+ "\xa9\xe7\xff\x94\xbc\x4d\x6a\xbb\xdc\xd3\x52\x69\xfd\xdc\xac\xd9"
+ "\x95\xcc\x14\x31\x1e\xd4\x98\xa9\x87\xb8\x83\x07\x6f\xf7\xc1\x66"
+ "\x30\x08\xff\x2a\x06\xbe\x5b\x9d\xf6\xea\x60\xc0\xc0\xe3\xd5\x39"
+ "\x07\x2e\x19\xd9\xab\x83\x5e\x83\xbf\x6c\x26\xd3\xfd\xb3\xea\x65"
+ "\xcd\x75\x57\xa3\x47\x33\xbf\x7c\x6f\x1e\x33\x83\x1e\xe1\x17\xb1"
+ "\x5a\xab\x8b\xc7\x9b\xee\xbd\x88\x7d\x7f\xe6\x52\xfd\xce\xac\x5e"
+ "\xd7\x72\xcf\x78\x6e\x2e\x64\x31\xb8\xb7\x2b\xfc\x2f\x5a\xbc\x2c"
+ "\xb5\x90\xc5\x2e\xb7\x53\xfd\x01\xb6\xda\x6c\xa7\xba\x09\x1e\x92"
+ "\x97\x9f\xf9\x54\xcc\x5a\x96\x50\x4b\x75\xe3\xf7\x5e\x4b\x09\xdf"
+ "\xfe\x1c\x33\xe2\x7e\x2f\xee\xe9\xca\x3b\xba\xe3\x4c\xd4\xce\x11"
+ "\xbd\x9d\xcf\x80\x5f\x92\x84\xdf\xad\xcf\x44\xe0\x77\xeb\x03\x11"
+ "\xf8\xdd\x9a\x28\xe1\x77\xab\x31\x02\xbf\x5b\x7d\xd7\x06\xbf\x5b"
+ "\x33\x22\xf0\x93\x65\xaf\x0e\xbf\x5b\x37\x8e\x0d\xbf\x5b\x2b\x22"
+ "\xf0\x93\x75\x8d\x01\xbf\x71\xa3\xc3\xef\xd6\x0f\x3f\x1f\xfc\x6e"
+ "\xf5\x7d\x4e\xf8\x25\x4a\xf8\x7d\xf1\x4f\x11\xf8\x7d\x71\x57\x04"
+ "\x7e\x5f\x5c\x26\xe1\xf7\xc5\xc5\x11\xf8\xa5\xcd\xbf\x36\xf8\x7d"
+ "\xb1\x34\x02\x3f\x59\xf6\xea\xf0\xfb\xe2\x6b\x63\xc3\xef\x8b\x6d"
+ "\x11\xf8\xc9\xba\xae\x0d\x7e\x69\x13\x09\x6e\xc9\x1a\xfc\x92\xc7"
+ "\x86\x5f\xda\xfc\xcf\x09\x3f\xb3\x84\xdf\xac\xeb\x23\xf0\x4b\x7b"
+ "\x3f\x02\xbf\xb4\x4a\x09\xbf\xb4\x1d\x11\xf8\xcd\x2a\xb8\x36\xf8"
+ "\xa5\x39\x23\xf0\x93\x65\xaf\x0e\xbf\xb4\xcb\x63\xc3\x6f\x56\x42"
+ "\x04\x7e\xb2\xae\x31\xe0\x37\x7e\x74\xf8\xcd\xfa\xfa\xe7\x83\xdf"
+ "\xac\x82\xab\xc1\xef\xda\x78\x8d\x59\x42\xd6\xf9\x5f\xa8\xa7\x73"
+ "\xac\x7a\x00\x43\xd8\x27\xaa\x65\xb3\x3a\x1b\xd4\x71\x26\x79\x87"
+ "\x63\x56\x39\xc9\x30\x77\x77\x2b\xb3\x6f\x6a\x50\x63\x4d\xdc\x71"
+ "\x66\x8e\xea\xf0\x1c\xe7\xdb\xc6\x19\xd5\x6d\xe3\x8d\xf0\x29\x30"
+ "\x5a\x5d\xc2\x5e\x56\x99\x5d\x14\x73\x03\xbb\x19\xf7\xf5\xb6\x13"
+ "\xbf\x86\x67\x7f\xd9\xec\x72\xe2\x45\x52\x46\xc2\x24\x67\x4d\xbe"
+ "\x08\xde\xb9\x21\x37\x67\xe3\xba\x9c\xec\x75\x05\xd6\xec\x47\x1e"
+ "\xcb\x1f\xee\x13\x5f\xc4\xbd\xdc\x81\xf9\x9b\xdd\x16\xf6\xf3\xe2"
+ "\xe0\x76\xf8\xcb\xb3\xdd\x02\xdb\xb4\xdb\x12\x44\x9c\x82\x78\xb5"
+ "\x9e\x5f\xc9\xdc\x9b\xf1\x05\xfe\x96\xf0\x03\x78\x25\x6f\x2f\x2f"
+ "\x0f\xa4\xc2\xb7\x8b\x76\x36\x91\xda\xab\xcc\x9d\xc9\x13\x63\x84"
+ "\x7d\x88\xb8\xdb\xa1\xdc\xa6\xdf\xc1\x6a\xe5\xa6\x40\xa1\x5a\x11"
+ "\x63\xe2\x95\x31\xc2\xc7\x4d\x07\x7c\xb0\x6d\x8a\x99\xde\xad\xdc"
+ "\xee\xe1\x71\x81\x42\xaa\xab\x54\xab\x47\xc4\x1d\xc9\xd8\xca\xff"
+ "\x81\xfa\x34\x5e\x10\x71\x48\x9c\x92\x1f\xbc\xed\x79\xf3\x36\x6b"
+ "\x0c\xf2\xc2\x17\x22\x7c\x04\xea\xb1\xa7\xd0\x6f\xe4\x25\x7e\xfc"
+ "\x6e\x2a\x7f\x37\x62\x6f\x86\xeb\x90\x7d\xba\x8e\xfa\xd4\x25\xc6"
+ "\x52\x1e\x48\x1b\x78\x22\x73\xaf\x88\xff\x28\xe0\x7a\x7b\x3b\xb5"
+ "\x9d\x26\xe2\x76\x06\x2f\x88\xb8\x9d\x5a\x99\x9b\xa8\x8c\xa0\xa7"
+ "\xf0\x7f\x2a\xeb\xb8\xfd\x35\xbd\x5f\xc4\x43\xc7\xd3\xfb\xfe\xa8"
+ "\x36\x26\xd0\xfb\xce\xa8\xef\x09\xf4\xbe\x86\xf8\xd0\x89\xda\xf7"
+ "\x44\x7a\x5f\x06\xbe\x54\x8c\xab\xaa\x54\xda\x44\x2b\xb7\xc3\x16"
+ "\x38\x59\xcb\x33\x91\xf2\x5c\x0f\x5e\x57\xab\x63\x52\x9f\x32\xf7"
+ "\x13\xc8\x8c\xda\xf7\x14\x7a\x3f\x89\x73\x01\xed\xfb\xf5\xf4\xfe"
+ "\x36\xbd\x7f\x51\xfb\x4e\x7c\xfd\x1c\x19\xff\xc6\x14\x28\xc0\x98"
+ "\xd4\x0a\x83\x07\x70\x27\x58\x17\x50\x5a\x2a\xc9\xab\x25\x98\x47"
+ "\x8c\xd3\xb9\xb5\x8f\x75\x2b\x73\x10\x1b\x34\x46\xcc\x55\x42\x8c"
+ "\x49\xfa\xe8\x31\x64\x52\x7a\x3f\xd2\x61\x5b\xae\x56\x1a\x3c\x78"
+ "\x26\x98\xee\x04\x0c\xb5\xb6\x48\x26\x9a\x9b\xa2\xcd\x33\xc1\x0e"
+ "\x7e\x74\x59\xe9\x01\x6d\x2e\xa8\x6f\xe3\xe9\xfb\x0f\xb5\x73\x8f"
+ "\x43\xcb\x83\x57\xe4\xfd\x22\x65\xee\xc2\xff\x96\xdf\x08\x2a\x27"
+ "\xe9\xde\xdc\x42\x3d\x26\x21\xa5\x49\x5f\x59\x84\x9f\xd0\xaf\x78"
+ "\xe3\x02\xc9\xc2\x4f\x0a\xe1\xa8\x8e\x2b\xc0\x13\x3e\x6e\x76\xad"
+ "\xd4\xd5\xcc\x0d\xdf\xff\x75\x2b\x73\x7c\x5a\x1c\x07\x26\xe5\x84"
+ "\xb9\xc7\x23\xf6\x45\x73\x04\x7d\x88\xfa\xe6\x8d\xfa\x66\xd7\xbf"
+ "\x49\x1b\xb8\xdb\x13\xa2\xbe\xe5\x8d\xf8\x96\x16\xf5\x2d\x73\x78"
+ "\x9d\xb7\x2f\x8e\xfa\xb6\x64\x44\xb9\xd5\x51\xdf\xe6\x8f\xf8\x56"
+ "\x18\xf5\x2d\x55\xfb\x16\x43\xe9\xb5\x61\x3f\x85\xca\x9c\x14\x2d"
+ "\x9d\x68\xfd\xed\x87\xa3\xd2\x8d\x5a\x3a\xda\x6f\x71\xb3\x8f\x35"
+ "\x39\x46\xe2\x39\xe1\xd1\xad\x5a\x1b\xee\x48\x1b\xb7\x69\x7e\xe6"
+ "\x03\xf2\x7e\xb1\x72\xdb\x52\xb3\x62\x1d\x0f\x9c\x32\x6f\x2b\x45"
+ "\x4c\xa0\x1a\xe9\x93\x4b\xae\x43\x11\xbb\x1a\xb1\x6f\x29\xdf\x58"
+ "\xb4\x71\xcc\xd8\x98\x65\xf3\x32\xf5\xbb\xac\xa1\xf2\x40\x8a\x5a"
+ "\xce\x57\xfe\x3f\xf6\xde\x07\x2e\xaa\x2a\xef\x1f\x3f\x73\x19\x15"
+ "\x6d\x06\x26\x97\x6d\xa7\xc2\x9a\x5a\xdb\x1d\xcd\x92\xca\x5a\x2b"
+ "\x2d\xfa\xa3\x8b\x65\x62\xad\xee\x52\x99\xa2\xa2\x8d\x89\x3a\x12"
+ "\x22\x2a\x02\xa2\xf1\x20\x31\x48\xd4\x22\x1a\xa0\xbb\x5f\xdb\xc5"
+ "\x5d\x2b\x76\xd7\x9e\x87\xdd\xc7\x76\x67\x37\x7d\x18\xe4\xcf\x0c"
+ "\xad\xfd\x1e\xea\xc1\xa7\xc9\xc8\xc8\x45\x9d\x14\x65\x84\x99\x7b"
+ "\x7e\x9f\xcf\x3d\xf7\x32\x77\x06\x06\x66\x06\xfc\x93\x8f\xbc\x5e"
+ "\xf7\x75\xb9\xe7\x9e\x39\xf7\x9c\xcf\xe7\xfd\xf9\x77\xfe\xe2\x59"
+ "\x83\xb8\x7f\x57\x56\x3b\xe5\x85\x33\x06\xf1\x2c\x43\xd2\x45\xac"
+ "\xa9\x9d\xd9\xa0\x1b\x22\xd0\xce\xe1\xf8\x5e\x23\xc4\xb7\x8d\xc6"
+ "\x93\xec\x9c\x41\x5c\xdf\xbb\xd5\x19\xb5\xb6\x9d\x44\x1b\x1f\xa1"
+ "\xad\x18\xe7\x31\x9d\x30\xd1\x02\x79\x23\x45\x9d\xb6\x83\xcd\xf5"
+ "\x8e\xc1\xb3\xb9\x23\xad\xed\x42\x3f\x73\xf8\x71\x45\x4c\xb3\xf4"
+ "\x9e\xb5\x37\xa6\x59\x88\xa5\xc5\x75\x85\x50\x47\x57\xcf\x39\x98"
+ "\x8a\x98\x96\x73\xea\x61\x86\xce\xdc\x18\x8d\xf7\xfc\xc6\x98\x71"
+ "\x58\x26\xb6\xc1\xae\x98\x58\x8f\x65\x43\x9e\x49\x3d\xf3\x1b\xc3"
+ "\x9d\xb8\x0f\xde\xa3\x6c\x3e\x7e\x4c\xb3\x70\x06\x50\x6e\x0c\xc4"
+ "\xff\x13\x27\x88\xf3\x38\xb7\x50\x9c\xfb\xd8\x45\x08\xce\x6b\xa6"
+ "\xa3\xdc\xfb\xb2\xbe\x25\xa3\xcf\x76\x27\xe0\x5c\xd5\x63\xc2\x3c"
+ "\xec\xd5\xb8\xff\x9f\x93\xcc\x32\x12\x76\xb6\x8d\x22\xe6\xcf\x8d"
+ "\x1d\x76\xb2\x19\xd7\x24\x6e\x75\x56\x9e\x1d\xe5\xfe\x0b\x94\x59"
+ "\x69\x27\x8b\xde\x12\xfb\x25\xf0\x9c\x5d\x88\x85\xa1\x7d\x59\x06"
+ "\x02\x79\xf6\x40\x1e\x0b\xe4\xa9\x97\xf2\xe0\xfb\x4e\xec\xe3\xa5"
+ "\x06\x82\xed\x3a\x67\xba\xb3\x14\xde\xb7\xdb\x39\x4b\x33\x9b\xa3"
+ "\x19\xe3\xb4\x93\xaf\xb2\xfd\xd9\x60\xa1\x5f\x54\x15\xa6\xa3\x05"
+ "\x61\x7a\xd0\xf9\x5a\xb6\x17\x41\x98\x8e\xf5\x27\xdc\x33\x0d\xcf"
+ "\x37\xc3\xb3\xc7\x71\xec\x93\xe9\xbe\x7b\xb6\x0a\xfa\x03\xd2\x80"
+ "\x3f\x95\x60\x23\x84\xf5\x69\xc1\xe9\x85\x7b\xe6\x08\x65\xdc\xc4"
+ "\xf6\x3f\xc3\x75\x24\x9d\xb9\xf7\xec\xee\x39\x3f\xa2\x67\x4d\xc3"
+ "\x3d\xb5\xd8\xcf\xb8\x8d\x67\x75\xf4\xad\x03\xd6\x17\xca\xf2\xbb"
+ "\x0f\x09\xfc\x46\x2b\xf4\xc5\xe6\xf3\x53\xd8\x7c\xb6\x7b\xaf\x0f"
+ "\xd3\xde\x7c\xbe\x33\xf7\xde\x9e\xf1\x0f\xcc\x83\x3c\xe3\xa1\xfc"
+ "\x9e\x76\xa6\xe0\x37\xee\x9d\xc4\xc6\x0a\xee\x8d\xe3\x4d\x61\xda"
+ "\x6d\x5d\x44\x29\xa6\xc7\x35\xba\x9c\xb8\xbe\xbf\xcf\xbd\xb8\xd0"
+ "\x4e\x0b\xfb\x38\x15\x86\x69\x71\x0d\xc7\x44\xa7\x54\xe7\xfb\xe2"
+ "\x70\xed\x00\xd6\x99\xd1\xf6\xbe\xa9\x12\x1d\x4d\x67\xa0\xec\xcc"
+ "\xcf\x48\xab\xe2\xde\x43\x38\xc7\x46\xa0\xc9\x7a\x69\xde\xd7\xbd"
+ "\xc2\x3a\x6e\xe1\xfb\x2c\x8f\x30\x66\x8a\x73\x8e\x91\x4e\x15\x88"
+ "\x35\x28\xb3\x10\x78\x21\x9c\x8d\xab\xb8\x4f\x88\x75\x36\xc3\x7b"
+ "\xa1\xdd\xc2\x9c\xba\xfb\x92\x99\x1c\xdc\x07\xf1\xcf\x7d\xe9\x4c"
+ "\x0e\x58\x1a\x9e\x5d\x8f\x73\x21\x4e\x29\xee\xfd\x0a\xcf\xa7\x05"
+ "\x7a\xe8\x71\x0f\xbb\xc6\x0e\x90\xd7\xf4\x2e\xc4\x82\x1e\xcf\x21"
+ "\x04\x3a\x08\xf3\xe1\x91\x5e\xf0\xbf\x05\xbf\x8f\xb4\xc5\xb3\x79"
+ "\xc3\xb4\xd1\xa0\x07\xee\x4b\xec\x39\xe3\xf8\x06\x5c\x57\x71\xaf"
+ "\xdf\xbd\x0b\x91\x46\x6e\xa8\x73\x23\xf8\xcc\xe6\x9b\x3e\x83\xfa"
+ "\x4d\x1a\xc7\x47\x84\x69\x71\x0e\x27\xd4\x95\xcd\x73\x2b\x60\xbc"
+ "\x63\x38\x98\xa4\x80\x6f\x4c\x6c\x64\x58\x60\x67\xa3\x2b\xee\xab"
+ "\x14\xe9\x27\x9c\x7d\x51\x94\xc6\xe8\x20\xe6\x9f\xc7\xfa\x86\xa2"
+ "\xef\x87\x7a\x79\xce\xff\x82\x74\xa1\x5f\x4f\x9c\xe7\xdd\x99\x3b"
+ "\x29\x4a\x56\xe7\x0e\x61\x2d\xe2\x19\x8c\xeb\xef\x3b\x80\xdf\x32"
+ "\xe1\x1e\x63\x88\x8b\x13\x72\xfc\xdf\x57\x8e\xf5\xc4\xf9\x81\xee"
+ "\x91\xfc\x14\xba\x95\x8f\x45\x3a\xc3\x6f\x8e\x80\x2c\xf4\xb9\x2f"
+ "\x21\xea\x6e\x3c\x4b\x05\xbe\xb7\x45\x76\x9e\x2f\xd8\xe2\x49\x1f"
+ "\x48\xb6\x16\xfd\x04\xdc\x6b\xa2\x27\xcd\x34\x3d\x01\xf4\x77\x82"
+ "\xe8\x67\x25\xf8\xdd\xef\xf0\x6e\x12\x83\xeb\x9d\x71\xae\x38\xe2"
+ "\x8d\xaa\xa6\x39\x71\x0f\x65\xdc\x0f\xd2\xbc\xfe\x5e\xa8\xef\xfd"
+ "\x4b\xde\xbc\x41\x58\x63\xd9\x61\xbe\xfb\x0c\xce\x13\x6a\x3f\x9e"
+ "\x21\xec\x73\x14\x1e\x9f\xee\xa2\xbb\xd8\x79\xde\x0e\xaa\x9e\xe6"
+ "\xc4\x77\xc2\x19\x02\x58\x66\xa8\xfb\x01\x2b\xee\x8f\x11\xfd\xa9"
+ "\x76\xf0\x27\x7e\x00\xed\x11\xec\x14\xfc\x7f\xc3\x09\xc5\x03\x26"
+ "\x76\x06\x25\xdb\xd3\x5e\x9c\xef\x38\x9c\xed\x11\xe0\x20\xc2\x9a"
+ "\x6d\xc5\x03\x0a\xdd\x78\x42\xda\x15\x0f\x0c\x13\xf6\x97\xce\x73"
+ "\x1a\x44\x1a\x18\xb6\xb1\x7a\x45\x2e\x48\xe7\x84\x3a\x62\xfd\x82"
+ "\xac\x5b\xbd\x68\x4b\x87\x77\xe6\x3e\xa0\x91\xf6\x16\x10\xda\x2f"
+ "\xee\x3b\x6d\xbe\x1d\x63\xa7\x07\x36\x8a\xf6\x33\x59\xfc\x76\xf2"
+ "\xe0\xbf\xfd\x80\xb8\x96\xd2\x19\x2b\xec\xbd\x0d\x74\x81\x72\x63"
+ "\xa1\x1e\xa5\x92\x4d\x17\xe7\xe9\x4f\x60\xbe\xc6\x03\x55\x1e\x7b"
+ "\xce\x68\xe8\xb5\x6e\x68\xd5\xaa\x54\x1d\x04\x0d\xc6\x85\xa9\x8b"
+ "\x0d\xba\x25\x29\x29\xab\x52\x74\xb8\xe9\x8e\xcf\x59\x4d\xe1\x34"
+ "\xf7\x81\x83\xe2\x79\x72\x95\x3d\xe7\xc9\xe5\xfe\xa4\x67\xfc\x0b"
+ "\xc7\xd0\xec\x8a\x9f\x68\x86\x26\xb6\xfa\xc9\x04\x7f\xe5\x14\x71"
+ "\x7c\x15\x5c\xd5\x70\x99\xe1\xb2\x60\xac\xb5\xc0\x49\x62\xc1\x46"
+ "\x0b\xf1\x98\x67\xcd\xfc\x03\xb8\x77\x4d\xec\x31\xc5\x4f\xb6\x56"
+ "\xf0\x4a\x22\xec\xad\x92\xc3\xe3\x7c\x16\xdc\x27\xbd\x1a\x2e\x33"
+ "\x5c\x16\xb8\x84\xdf\xf1\xff\x10\xd6\xfb\x56\xc9\xdf\xe1\xf8\x38"
+ "\xcd\xf9\x08\xf7\x5b\xb7\xd1\x4d\x4a\x61\x1c\x84\x2f\x66\xf9\x7c"
+ "\xea\xc0\xd1\xdc\x7b\x54\x62\x3e\xc1\xcf\x8a\xd8\x44\x74\x7d\xe4"
+ "\x0b\xa3\xb9\xe3\xf7\x8b\xf9\xc2\x31\x9f\xd4\x1e\xdc\xc3\x1f\xf2"
+ "\x4b\xf9\x94\x34\x77\x92\x45\xcc\x27\xac\xfd\xe3\x73\xb8\xbe\xbe"
+ "\x3b\x8c\xe6\x38\x1d\x62\x3e\x8d\xbc\x3c\x59\x9e\xe1\x7c\xee\xed"
+ "\x5a\xcc\xc3\x6f\x52\x0a\xbe\x21\xcd\xfd\xc9\x04\xc8\xdf\xb7\x8e"
+ "\x09\x8a\x4f\x93\x8f\xf8\xf2\xc9\xb8\x78\xd9\x92\x87\x96\xad\x4c"
+ "\xc3\xd3\xa9\x52\x57\xad\x49\xc5\xfb\xca\x85\xcb\x85\xdb\xaa\x05"
+ "\x4b\x17\xb3\x7f\x52\x93\x63\xf0\x9f\x64\xc0\x1b\xde\x93\xd6\x18"
+ "\xf1\xb6\x78\x15\x3e\xa6\x1b\x26\xac\x59\x2c\x1d\x13\xee\xb5\xf7"
+ "\x53\x67\xee\x83\xe0\xff\xfe\x24\x99\xf9\x23\x0f\xe6\xd9\x15\xe3"
+ "\x85\xf1\xc6\xc8\x4d\x76\x72\x48\x2f\x9c\x27\x48\x7a\xed\x99\xa0"
+ "\x78\xf0\x97\xb8\x67\x42\xe4\x26\xe3\xe2\x48\xd7\xb2\x25\xa0\x67"
+ "\x77\xc3\x6f\xc1\xff\x7d\x87\xad\xc9\xcf\x73\xa6\x0b\xfb\x87\xe6"
+ "\x3e\x18\x25\xcd\x71\xe4\xf3\x9c\x13\x70\x5f\x7c\x61\xce\x53\x31"
+ "\xee\xc7\xe3\x44\x1d\x9a\x5a\x51\x2c\x9c\x4f\x03\xbe\xa9\x73\x12"
+ "\x3c\x67\xc0\xb3\x16\x9e\xa3\xf9\xbc\xb6\x6a\x5c\x23\x09\xcf\x78"
+ "\x9e\xd9\xd8\xce\xdc\x87\x7a\xce\xbf\x94\xd3\x46\x3c\xc0\xee\xa1"
+ "\x3e\x63\x74\x9f\x7d\xc7\xa0\x0c\x83\x74\x3e\xb0\x70\x16\x70\xee"
+ "\x43\xe9\x3d\x67\x01\x0b\x67\x3a\x69\x04\xdb\xc4\x6c\xfb\x43\xe7"
+ "\xc2\xb4\x63\xb6\xb0\x58\xe0\xa1\xdd\xd2\xbe\x10\xcc\xd7\x7f\xa8"
+ "\x4a\x76\x8e\x32\x3e\x9b\x7b\xce\x51\x66\xfb\x98\xed\x14\xf6\x5e"
+ "\x52\x3c\x0c\x32\xfe\x50\x4c\xcf\x99\x77\xb9\x0f\xb5\xc9\xcf\xbc"
+ "\xb3\xc3\x7b\x8c\xb1\x3a\x73\x1f\x26\x1e\x3b\xf8\xd0\x5b\xf8\xcd"
+ "\xbe\xce\x8c\xde\xc6\x41\x3c\xb0\x0e\xe2\x01\xb8\x0b\xb1\x81\xe8"
+ "\x87\x63\x3a\xcd\x89\xc5\x3d\x76\x74\xf8\x0e\x7d\xbf\x3e\xfb\x3d"
+ "\x04\xbf\xf6\xe1\x1d\xb8\xff\xae\x23\x2b\x49\xf1\xc3\x0a\x9c\x07"
+ "\x05\xcf\x6c\xff\x48\x7a\x4a\xf1\xb0\xb0\xc6\x4c\xda\x5b\x4e\xbe"
+ "\x2e\xbf\xcf\xf5\x0f\x1f\x4b\xe3\xd6\xc9\xab\x22\x5d\x0b\x97\x30"
+ "\x3f\xee\xe1\x0b\x4c\x97\xf2\x89\xcc\xde\x3f\xdc\x4a\x9f\x63\xe7"
+ "\x9e\xd8\x15\x53\x0c\xb8\x26\x2a\x52\x91\xbc\x8a\xc2\x6f\x23\xd3"
+ "\x17\x2e\x11\xd2\x20\xdf\x66\xf0\xb5\xc4\xfa\xd5\x5a\xa3\xdb\x08"
+ "\x3d\xef\x66\xfb\x0d\x28\x1e\xb6\xcc\x1f\x93\x8d\xdf\x09\x17\xfc"
+ "\x88\x8f\x89\x0a\xcf\x1f\xc4\xba\x55\xc8\xf6\xbe\xdb\x06\x69\x38"
+ "\x27\xec\xec\x73\x44\x85\x7b\xfd\x8a\x75\xb1\x08\xe7\x9f\xe5\x4e"
+ "\x49\x94\xf6\xed\x01\x9a\x5b\x7c\xdb\xf3\xdc\xcf\x04\x09\xb9\x63"
+ "\xf1\x84\xd9\xd3\xe0\xbf\x09\xe2\xd1\xb9\x72\xec\x44\x9f\x8d\x20"
+ "\x45\x67\x7f\xf3\xe6\x0f\x84\xb3\x27\x73\xa7\x80\xfe\x7f\x98\xed"
+ "\x27\xb1\xf9\xc5\x6f\x50\xb7\x08\x67\x32\xe2\xda\x46\x1e\xd7\xee"
+ "\x3e\xfa\x2b\x61\x9f\x5d\x8e\xf9\x8b\xc2\xb9\x4c\xb9\x53\x52\xe9"
+ "\x28\xa7\x96\x9d\x3b\x4b\x27\x03\xff\x04\xbb\x8f\xb2\x21\xac\xe1"
+ "\xd4\x60\xdb\xa7\xe2\xba\xd6\x27\xe0\xfa\x05\x3b\x27\xe6\xc5\x6f"
+ "\xa4\x72\x71\x0f\x2b\xc0\xd6\x6e\xb8\x03\x5e\xa6\xc6\xf4\xcc\x53"
+ "\xea\x59\x17\x3a\xf5\x59\xdc\x5f\xcb\xb3\x46\xf8\x51\xb1\x5f\x73"
+ "\xea\x3c\x3b\xf9\x51\x11\x93\xef\xa9\x80\xff\x3a\x71\x7d\xd8\xd4"
+ "\x54\x3b\x79\xda\xe6\x53\xc6\x87\x52\xff\x0b\xe3\xdd\xd4\x52\xc0"
+ "\xe2\x13\x70\xfd\x02\xf2\xef\x91\xce\xdd\xde\xcc\x09\xeb\x9b\x8e"
+ "\x87\x69\x71\x0d\xf0\xd4\x03\x52\xfa\x30\x45\x2c\xd0\x66\x6a\xbd"
+ "\xa4\x4f\xce\x8e\xe2\xe3\xe0\xb9\x05\xfc\xcd\x39\xe2\x33\xc8\xdc"
+ "\xd4\x76\xe9\x19\xfe\x77\x4a\xfa\x06\x63\xc4\xb3\x1b\x12\x76\x60"
+ "\xec\xb9\x58\x0b\x3e\x99\x16\x63\xbc\x47\xb4\x76\x72\x78\x8b\xf0"
+ "\xdb\x88\x71\x55\x67\x73\x1a\x62\x3a\x22\x1e\x73\x74\x80\x0e\x85"
+ "\x77\x93\xec\xe4\xf7\x47\x58\x39\x8f\xc4\xda\xb9\xc3\x3a\x0f\x3f"
+ "\xc2\x22\x81\xc6\x73\x58\x9b\x1e\x4d\x87\xff\x13\xf0\x0c\x74\xc8"
+ "\x67\x00\xf9\x9a\xcd\x62\xc2\xf6\xdd\x05\x5d\x9a\x39\xd6\x2d\xe0"
+ "\xb3\x2e\x45\xac\x3c\x2a\x9c\x1f\x6d\x5a\xaf\x11\xf6\xdf\xc5\xbd"
+ "\x10\x84\x3d\xd2\x70\xef\x49\x17\x19\x2e\xec\xf7\x6f\x1a\x5f\x29"
+ "\xec\x73\xbf\x56\xaf\x92\xf6\x9d\xa4\x79\x9d\x60\x0f\xde\x6b\xc7"
+ "\xbd\x28\x85\xfe\xbc\x4e\x7d\x84\xb0\xff\xa4\xb8\xef\x64\x79\x1a"
+ "\x89\x2a\xe3\xd9\xbe\x93\xc2\x3e\x09\xfd\xec\x3d\x49\x73\x4e\x6c"
+ "\x91\xf6\x9e\x04\x3a\xe0\xfa\x47\x3d\x3d\xef\x72\xc2\x7d\xac\x6c"
+ "\xbf\x1d\x65\x9f\xfb\x50\x72\xa0\x37\x39\xb6\x0f\x65\x70\xf6\xe6"
+ "\xd1\x27\x19\x4e\x1e\xdd\x22\x9d\x0b\x2e\x4b\x2b\x05\x9c\xef\x61"
+ "\x69\x53\x67\x8b\x69\xfb\xec\xa4\xd6\xd1\xe3\x9b\x81\xbe\xc3\x7e"
+ "\x4d\x90\xe3\x23\x10\x07\xef\x90\xcb\x15\x11\xfe\xd0\x74\x0f\x03"
+ "\xbb\x3c\x1c\xae\x11\x78\xc5\xf5\xe8\x8f\xf3\xb4\x19\x63\x84\x48"
+ "\x05\xd8\x9b\xf4\x30\x1a\xef\x72\x85\x2d\x70\x29\x8e\xa0\xef\x89"
+ "\xeb\xbe\xe3\xdd\x2e\xdc\x7f\x40\x19\xef\x3e\x8b\x67\x76\x1e\xc1"
+ "\xf5\x6c\xdb\x96\xe2\xfa\xca\x5b\x29\x9e\x57\x13\xef\x3e\x4d\x77"
+ "\xb1\x75\xa3\x36\xf1\x1c\xce\x7a\x77\x1a\xb5\x00\x1f\x54\x18\x77"
+ "\xe0\x1e\x60\x11\x0a\x27\x89\x30\x86\xfd\x6d\xd6\xb9\xbf\x51\xdc"
+ "\xff\x0b\xcf\x2a\xe3\x73\x9d\xa0\x2b\x75\x8a\x05\xae\xb0\x6c\xab"
+ "\xab\x55\x38\x2f\x20\xde\x3d\x82\xc6\xa7\x4f\xa5\xc2\x19\x63\x69"
+ "\xf4\x20\xe8\xd9\x30\xe1\x5c\xee\x75\xf4\x2c\xfc\x1f\x1e\xbf\xee"
+ "\x2c\xc5\x33\x43\xa1\x6c\x4b\xbc\x8b\xef\x8a\x4f\xe7\xb3\x16\xa4"
+ "\x2b\xe0\x77\x5f\xc2\xef\xbe\x84\xfa\xc4\x40\x99\x1a\x78\x7e\x94"
+ "\xee\x5a\x8a\xeb\xb0\xb2\x85\xd8\x07\xda\x68\x16\xd7\xb6\x56\xe3"
+ "\x39\xa1\xb8\xdf\xf8\x02\x97\x39\x7b\x97\xb8\x56\x55\x38\xaf\x36"
+ "\xbd\x9b\x8a\xdf\x99\x1c\xbf\x8e\x3c\xba\x60\xdd\xad\xc2\x9a\x57"
+ "\x5c\xcf\x15\xef\xd2\xc1\x37\xb3\x91\x1e\x2a\xe1\x8c\x70\x61\x4d"
+ "\xd7\x63\x31\xfd\x9d\x19\xda\x67\xbc\x9d\xff\xfd\x2a\x6a\xaa\x99"
+ "\x44\xf3\xb5\xd9\x70\xdf\x4f\xf3\x68\x12\xce\x83\xa5\xf9\x37\xcf"
+ "\xa6\x26\x0b\xa4\xdf\xa2\x83\xfb\x7e\x9a\xaf\x73\x50\x53\x2d\x3c"
+ "\xff\xd0\x0c\xf7\xfd\x34\x97\xcf\x83\xfc\x31\x34\x97\xe2\xef\xaa"
+ "\x68\x3e\x49\x87\x7c\x31\x34\x5f\x61\x84\x3b\x3c\x73\x06\xc8\x07"
+ "\xcf\x61\x89\xc7\x15\x8f\x75\xc0\xff\x90\xf6\xa3\x22\xf6\x2d\xdc"
+ "\xcb\x04\xbe\x95\x3f\xa1\x88\x7d\x63\x62\x11\xfb\xc6\xbd\x45\xec"
+ "\x1b\xf7\x17\x09\xdf\xc8\x57\x26\x40\xbe\xc9\x34\x7f\x98\x05\xee"
+ "\xd5\x34\x7f\xc4\x64\xc8\x07\xcf\xe1\x95\x70\x87\xe7\x51\x5a\xc8"
+ "\x07\xcf\xd7\x41\x5d\x6a\xe1\x59\xe5\x84\x7c\x53\x68\x7e\x44\x32"
+ "\xdc\x0f\xd0\xfc\x48\x3b\xe4\x83\xe7\xeb\xe7\xc0\x1d\x9e\x47\x43"
+ "\x39\xb5\xf0\x1c\x35\x05\xee\xf0\x3c\x19\xeb\x01\xb1\xe0\x43\x50"
+ "\x6e\x8d\x99\xe6\x3f\x8c\xf9\xe1\x79\x2a\x94\x67\x81\xe7\x47\x63"
+ "\x20\x1f\x3c\xc7\x36\xc3\x1d\x9e\x1f\xc7\xb6\x3e\x49\xf3\x9f\x9c"
+ "\x00\xf7\x83\x34\x7f\x1a\xa4\x5b\xe0\xf9\xa7\x5b\xe0\x0e\xcf\x33"
+ "\x30\x3f\x3c\x3f\xd5\x02\x77\x78\x9e\x89\x34\x8a\xa3\xf9\xb3\xda"
+ "\xe0\x6e\xa1\xf9\xcf\xc6\x41\x3e\x78\xfe\x19\xd6\x1f\x9e\x7f\x1e"
+ "\x0e\xf9\xe0\x39\x01\x69\x05\xcf\x2f\x60\x3b\x67\xd2\xfc\x97\xb0"
+ "\xfc\x7a\x9a\xbf\x00\xe9\x02\xcf\x0b\x81\x7e\x16\x78\x4e\x02\x7a"
+ "\xd4\xc2\xf3\xd2\x03\x70\xaf\xef\x9b\x9f\xcb\xde\xa2\x9b\x86\x13"
+ "\x9a\x9f\xb2\x9f\x6e\x1a\x01\xf7\xd4\x24\xba\x69\x98\x9e\xe6\xaf"
+ "\x3d\x08\xe9\x70\x5f\x33\x05\x9e\x27\x88\xcf\x70\x4f\x8b\x82\xe7"
+ "\x18\xf1\x19\xee\x69\xed\xf0\x3c\x49\x7c\x86\xfb\xba\x54\x78\x06"
+ "\x1a\xaf\x9f\x09\xcf\x70\x5f\x67\x87\xe7\x29\xe2\x33\xdc\x33\x34"
+ "\x70\x77\x39\xc6\xbc\xe1\x74\xa8\x4b\xaa\x1c\xea\x3a\x1d\xce\x89"
+ "\x72\x17\xd6\xc4\xf0\x11\x35\xb8\x47\xf0\xf0\xac\x73\x64\xc4\x71"
+ "\xc5\x93\x7b\xd1\xee\x59\x33\xec\xc2\x99\x75\xe2\x9e\x77\xc3\x8f"
+ "\x29\x9e\xf8\x10\xec\xfc\x64\x3c\x07\x1d\xda\x9c\x4c\x73\x86\x9d"
+ "\x81\x7b\x3b\xcd\xb9\xee\x18\xb4\x19\x9e\xaf\xff\x18\xee\xf0\xfc"
+ "\x40\x3e\xb4\x19\x9e\x5f\x7c\x1c\xee\xed\x9d\xb9\x4f\x46\xdb\x15"
+ "\x8f\x31\x9d\xfd\x9b\x37\x35\x91\xae\x2c\xd0\x13\xa0\x47\x77\x34"
+ "\xd9\x23\x5d\x89\x84\x9a\xea\xcc\x91\x78\xb6\x44\x79\xf1\x64\x1a"
+ "\xb1\x5d\xa8\x13\x9e\x1f\x43\xbb\xc7\x72\xec\xdb\xd7\xd1\x63\x8a"
+ "\x27\x67\x60\x9f\x2a\x8d\x78\xdf\xdf\xfb\x65\xc2\xfb\x9b\x9a\x1c"
+ "\xec\xbd\x86\x78\xde\xff\x02\xdf\x6f\x8d\xc4\x7e\xf0\x5b\x36\x39"
+ "\xec\x8a\x27\xab\x30\x8f\x5d\xf1\x44\x3d\xcd\x09\x23\xd6\x8e\x36"
+ "\xb1\x8d\x23\x30\xdf\x1f\xf0\x77\xfe\xfa\x55\xf8\x02\x9b\xd6\x94"
+ "\x43\x6d\x18\x43\x82\xde\xe7\x74\x99\x63\xab\x8f\x29\xa6\x67\x97"
+ "\x0b\x7d\x03\x4d\xd5\xb8\xbe\xe8\x98\x62\xda\xb4\xee\x7c\x9a\xa7"
+ "\x5b\x1f\x09\xe5\x4d\xdf\x94\xe5\xa4\x1d\xe6\xcc\xc7\xc1\x3e\x09"
+ "\xe9\x07\xd9\x9c\x75\xe1\xff\x2a\x36\xcf\x48\xf8\xbf\x8c\xf5\xb5"
+ "\x4e\xcf\xc6\xdf\xca\x7d\x76\x77\xee\x2a\x23\x1f\xd1\x64\x66\xe3"
+ "\x64\xd3\x66\x7c\xc8\xdb\xb9\xc8\x54\x32\x4c\xb7\xfe\x6f\x50\xfe"
+ "\xb4\x22\xef\xf8\x4e\xca\x2b\xbc\x5b\xf3\x57\xc8\xfb\xb6\xd0\x17"
+ "\x33\x6d\xb7\xd4\x8f\x4c\xa1\x0d\xaf\x33\xdf\x06\x63\x65\x25\xf3"
+ "\xd1\xa6\xeb\x70\x5f\x4d\x97\xaa\x6e\xb7\xab\xa0\x64\xb7\xbb\xa0"
+ "\xa9\x9a\x16\x36\x99\x23\x5c\x0a\xc2\xe6\xfb\x4f\x9f\x3b\xd1\x89"
+ "\x7d\x64\x87\x31\xaf\x9a\x1f\x9e\xbe\xe7\xee\x74\xc2\x99\x53\x3e"
+ "\xc3\xe7\x67\x68\x6e\xa6\xca\xda\xde\x4c\xcc\x29\x42\x59\x33\x69"
+ "\xee\xd6\x79\xfc\xf0\xcd\x79\x15\xe8\x5b\xa6\x63\xdf\xce\xc7\x48"
+ "\x97\x26\xa0\x33\xf8\xf0\xd3\x27\x48\x75\xc1\x3d\xfe\x4d\x40\x3b"
+ "\xf4\xfb\x70\x7d\xf6\x02\xb7\x1b\xf7\x92\x82\x18\x66\x7a\x36\xeb"
+ "\x1f\x9c\x2e\x9c\xfb\x2c\x7e\x77\x09\x3f\x8a\xa6\x36\xce\xc3\xb1"
+ "\x58\x0d\xee\xcd\xd3\x21\xac\xe7\x74\xe1\xb9\x7c\x68\xdf\x58\x5e"
+ "\x39\xef\x56\x2c\x36\x2e\x58\x6f\x5c\x95\x92\xba\x60\x8d\xf1\x21"
+ "\x1d\x04\x5e\xba\x55\x4b\x75\x2b\x96\xac\x58\x95\xb2\xce\xd7\x3f"
+ "\x0c\x87\x7a\x1d\x04\x6c\x08\xfe\x54\x2d\xf8\x9c\xac\xdf\x3a\xee"
+ "\x2d\xe4\xf5\x8e\x12\x76\x0e\x04\xe4\x69\xb3\x93\xdf\x08\xfb\x8a"
+ "\xf1\xa5\x4d\xcd\xb4\xac\x78\xf2\x56\x5c\x97\xbe\x06\x7d\x7c\x07"
+ "\xb1\x92\x33\x50\x37\x76\x26\x60\x23\xee\x9d\x90\x96\x41\xcd\x69"
+ "\x67\x10\xe3\xd5\xd4\x74\xd8\x02\x18\xcf\xbe\x60\xda\xae\x3d\xa6"
+ "\x88\x4b\xbf\x60\x3a\x5c\x2d\x9d\xdb\xe3\x2e\xa8\xd3\xf2\x2a\x5b"
+ "\x0c\x9e\xdb\xd3\x4d\xb5\xa4\x01\x68\xd9\x95\x47\x13\x01\x09\xf3"
+ "\xca\x73\xc0\xee\x40\x6c\x20\xec\xd9\xf0\x9b\x62\x87\x9b\xea\x95"
+ "\xee\x1c\x12\x0e\xf7\x08\x1a\xd1\x94\xd8\xad\xaa\xab\xc2\xf7\x78"
+ "\x5e\x8f\xbb\x5b\x4f\x32\x8f\x50\xfe\x05\x03\xe0\x26\x87\x50\xe1"
+ "\x8c\x54\xc3\x49\x02\xe9\xa3\xf8\xc2\xba\xd8\xe3\x71\x84\xc3\xbc"
+ "\xe0\xd7\x90\x79\xf0\x7f\xc6\x42\xa2\x86\x7c\x91\x19\xb5\x90\xde"
+ "\xa9\x1f\xe5\xca\xd2\x87\x77\x65\xe9\x47\x75\x53\xbd\xca\xda\xea"
+ "\x24\xdd\x77\xbc\x49\xee\x72\x10\xe5\x0e\xf0\x7f\xca\x79\x90\xaf"
+ "\xb2\x62\x9d\x7b\x83\x7e\xb8\x6b\x83\x5e\xd9\xdd\xad\x0f\x77\xad"
+ "\xd5\x2b\xbb\xd6\xea\x87\x77\x77\xea\xc3\xad\x49\x0e\x72\xd8\xf1"
+ "\x3b\xd2\xd8\xda\x26\xf4\x2b\x76\xab\x9b\x92\xbb\xd5\x75\x33\x55"
+ "\xad\x24\xea\x6e\x23\xf8\x41\xe0\x17\xee\x04\x1f\x18\x30\xa1\x72"
+ "\xbd\x53\x0c\x36\xaa\x49\x03\xf4\x7d\x69\xda\x38\x7a\xda\x9d\x3b"
+ "\x6b\x82\xee\x29\xd0\x45\x9b\x94\xd1\x90\x06\xf8\x79\xa1\x8c\xe6"
+ "\xfe\xbc\x15\xe2\x71\x1d\x5c\x63\xed\x8c\x0f\xe0\x7b\xcd\x04\x9d"
+ "\xa6\x8c\xc6\xbc\x2c\xdf\xcf\x62\xec\xc2\x3d\x3e\x5b\x38\xcb\x34"
+ "\x77\x7a\x41\xb9\x10\xa7\xc5\x15\x49\xfe\xf5\x41\x65\xdf\x6b\xdf"
+ "\x21\xcf\xfe\x9e\x78\x97\x07\x7d\x62\xaa\xe9\x73\xde\x1a\xf0\x64"
+ "\x12\x8e\x8b\xf2\x40\xb7\xe3\x8a\x19\x77\xe0\x7e\x55\x34\x2b\x4e"
+ "\x8c\x31\xe3\x84\xb1\x45\x5c\x2f\x8e\xfd\x10\x2c\x6d\x06\xeb\x9b"
+ "\xe0\x62\x71\x8f\xfe\x6a\xdc\x23\x0c\xfb\x1d\x00\xd7\x16\xbb\x62"
+ "\x06\xea\xcf\x61\x10\x9f\x55\xc1\x55\x0d\x97\xf9\x4d\xec\x8f\xc8"
+ "\x21\xd3\xa4\xbe\x9a\xbe\xeb\x3a\x03\xe2\x9f\xdf\x3e\xe9\x89\x57"
+ "\x67\x18\xa1\xdd\xc1\x9f\xef\xa0\x98\xe1\xf7\x8c\x03\x61\xef\x53"
+ "\xa4\x71\x61\xcd\xec\x22\xbe\x67\x6f\x5c\xd0\xfb\x33\x0e\x81\x9e"
+ "\xc8\x16\xde\x15\xd4\x99\x33\xbf\x25\x61\xf8\xae\x0a\xe7\x50\xc0"
+ "\xb3\x2e\x45\x41\xad\x1d\x4e\x52\x84\xe3\x08\xd1\xc5\x93\xab\xce"
+ "\x3b\x38\x94\x0b\x1c\x8b\x81\xdf\x1e\x2d\x3a\x2f\x96\x5b\xda\x64"
+ "\xcf\x5a\x4d\x84\x33\x47\xf0\xdc\x22\x94\x97\xa2\x4c\x88\x05\xf1"
+ "\x8c\xa5\x94\x30\xd0\x57\x4f\xdd\x08\xff\x87\x63\x3e\xaa\xaa\x33"
+ "\xf3\x50\x06\xc8\x8d\x9e\xaa\xeb\x2a\x79\x53\x5d\x0c\x2d\x7f\xc3"
+ "\x41\xc7\x14\x97\xf2\x3b\x9a\x2c\x9d\xb9\x4f\x61\xfb\x85\x7d\x44"
+ "\x71\x2f\x22\xec\xeb\x70\x43\xcc\xdd\x58\xe9\x22\xf4\x71\x17\x39"
+ "\x94\x7a\x8e\x38\x46\xd2\x24\x87\xda\xa6\x75\xa8\x9b\x34\x6e\xb5"
+ "\x2d\x01\xae\x79\xc6\x14\x1c\x83\x7e\x7a\x52\xcf\x9e\x9a\xdf\xf6"
+ "\xbf\xa7\x26\x94\x39\x56\xda\x57\xd3\xbd\x36\xf8\x3d\x35\xdd\xdc"
+ "\xb1\xf4\xf2\xb4\x81\xf7\xd4\x04\x1f\xd3\x06\xfe\xa5\x59\xda\xff"
+ "\xc4\x2d\xcc\x69\x27\x2a\xb7\xba\xae\x54\xd8\x43\x25\xdd\x2c\xec"
+ "\x83\x82\xbe\x26\xda\x9a\xce\xdc\xa7\x7b\xf6\xbf\x45\xfd\xe9\xde"
+ "\x4a\x8d\x70\x25\x43\x3a\xe8\xce\xf9\x07\x24\xdd\x4a\x23\x4a\x6c"
+ "\xee\x51\xaf\xed\x16\xc6\xb0\xba\x0d\x8f\x62\x5e\xd0\x41\x68\x3f"
+ "\xc3\xdc\xdd\x86\x29\x70\x4d\x85\xeb\x11\xb7\xe9\xb0\xd9\x6d\xb2"
+ "\x39\xdc\xa6\x92\x23\x70\x35\xc3\xd5\x02\x97\x1d\xae\x56\xb8\xc0"
+ "\x27\x2a\x69\x87\x3b\xbe\xef\x80\xcb\x09\x97\xcb\x6d\xda\x4e\xe0"
+ "\x52\xba\x77\x34\xd9\xdc\x0a\x65\x34\x5c\x63\xe1\xd2\x41\x39\x7a"
+ "\xb7\xa9\x6e\x37\x5b\x3b\x3a\x53\x2b\xe1\xb4\xef\xbd\x5b\xc7\xb1"
+ "\x33\x14\x86\x7d\x4e\x23\xf1\x7c\xdf\x8c\x73\xb8\x9f\x5e\xe5\x21"
+ "\x7d\x47\x70\x67\x69\x28\x66\xc6\xf9\xc3\x35\x96\x0f\x3a\xa6\x3b"
+ "\xc8\xf2\x4a\xfd\xf6\x99\x68\x9b\x9a\x5d\xd1\xc5\xd9\xae\x1c\x92"
+ "\x0d\x7a\x4d\xd1\x98\xd8\x4a\xe2\x1d\x24\xab\xbe\xb5\x8b\x64\x25"
+ "\x51\xb7\xa0\x03\x32\xf0\xcc\x96\xf7\xda\x11\xe3\x6e\x9a\xa0\xeb"
+ "\x2e\x38\x6c\x71\xab\xac\x0e\xaa\xb2\xe9\x85\x3d\xfa\x40\x97\xe0"
+ "\x99\x65\x3d\x31\x28\x62\x0e\xe2\xd0\x86\xf6\x73\x64\x43\x12\xe5"
+ "\x1b\x20\xca\xc7\x7d\xf8\x22\x15\xe4\x57\x02\xf6\xc4\x38\xf4\xe9"
+ "\x16\x9a\x0d\x58\x1a\xe9\x06\xba\xf1\x18\x7f\x02\xee\x76\xa5\x91"
+ "\x18\x09\x7b\x60\xd3\x35\xd2\x39\x4f\x74\xf8\x4c\x7c\xa7\xc4\x73"
+ "\xa0\xca\x20\x0e\x2d\x4b\x23\x63\xcb\xe0\x9d\x70\x66\x27\xd4\x7b"
+ "\x96\x31\x92\xf2\xcb\xf5\xa4\xe2\x15\x12\xae\x3e\xc9\xce\x81\x75"
+ "\x03\xed\x3d\x67\x21\x6c\xd7\x3e\x73\x52\x47\x0e\xe9\x8f\x82\x6d"
+ "\xae\x02\xbe\x6c\xd7\x76\x83\xfd\x02\x5a\xba\x83\xa3\xe5\x33\xad"
+ "\x17\x8b\x96\xdd\xd1\xc5\x3a\x46\xcf\x44\x82\x34\xf3\xa5\x27\xd2"
+ "\x78\x7d\x2b\xd0\x13\xe8\x6a\x3d\xe2\x86\x58\x92\x2c\x94\xe8\xf9"
+ "\x36\xd0\x13\x68\xaa\x45\x9a\x02\x3d\x04\x9a\x52\x91\xa6\x15\x32"
+ "\x9a\x82\xee\x12\xf6\x33\x44\x9a\xf2\x40\xd3\x0a\x3f\x34\xed\x89"
+ "\xe7\x81\xa6\xbb\x02\xa2\x69\xe5\x20\x68\x1a\x3f\xd9\x1f\x4d\x5d"
+ "\xe8\x37\x14\x6e\xd7\x50\xd0\x8b\x56\xd7\x61\x61\x6f\x4e\xf0\xf9"
+ "\xe6\x81\xef\x9a\xc0\xab\xea\xb4\x78\xae\x37\x9e\x4d\x86\xe7\x8e"
+ "\x09\x7b\x49\x55\xd2\x0b\xee\xc2\x26\x23\xa6\x81\x5e\x33\x4c\xc4"
+ "\x39\x49\xa0\x5d\x2a\x38\x5a\xdd\x78\x1e\xfb\xc2\x9e\x5b\xdd\x85"
+ "\x3e\x75\x61\xd3\xfb\x3c\x35\x10\xd4\x29\xf3\xc7\x11\x65\x17\xe8"
+ "\x0d\x63\x1a\xb9\xb5\x08\x74\x61\x97\xc9\x36\xef\x84\x62\xb6\x6a"
+ "\x9a\x91\xa7\x70\x65\xe1\x1e\x93\x3c\xe8\x5c\xd0\xe5\x02\x7f\x91"
+ "\x67\x38\xc6\xd7\x30\x1f\xd7\xbc\xcc\x76\xd7\x25\xba\x48\x96\xa1"
+ "\x37\x7f\xf9\xac\x04\x9d\xbb\x60\x60\x39\xc1\xb3\x0f\x33\xda\x90"
+ "\xaf\x55\xc4\xda\xea\x91\x13\x5e\xd4\xd1\xc8\x0b\x94\x0b\x94\x91"
+ "\x6d\x32\xdd\x0c\x7a\x5f\x53\x2e\x9e\x05\xe2\xce\x01\xdd\x8c\x7b"
+ "\xce\x03\x2f\xf1\x8c\x90\x3e\xe5\x63\x03\xc8\xc7\x7a\xe1\x9c\x26"
+ "\x2d\xd0\xa3\xaa\xab\x93\xf1\x10\x79\x66\x75\x59\x04\xfe\x15\x89"
+ "\xb6\x80\xd1\xdd\x76\x27\xa5\x09\xe0\xcf\x4d\xac\xe4\x0b\x9b\x12"
+ "\x69\xa7\x61\x14\x9e\xd5\x05\x31\x7f\x4c\x64\x12\xf8\x4f\xa7\xc1"
+ "\x56\xac\x04\x7c\x9d\x22\x63\x77\xad\x04\x9f\xa8\x13\xcf\x5b\x83"
+ "\xfa\xac\x63\xe7\xd4\xf2\xb9\x33\x8b\xe0\x9d\xb0\x67\x26\x2f\xed"
+ "\x99\x79\x56\x8f\xfd\x10\x9e\xfe\xa1\x55\x7a\xae\xe7\x9b\x05\xc3"
+ "\x62\xdd\xaa\x89\x95\x6c\x8d\xeb\xb3\x6c\x4f\xf2\xf0\xaf\xab\x91"
+ "\xae\xed\x8a\x67\xd9\xbc\xa7\xbc\xf6\x03\xc6\x4c\x9c\x7b\xf4\xec"
+ "\xbb\x34\xbf\xa3\xca\x88\x67\x6e\x4b\xef\xb2\x12\x90\x0e\xc6\xbb"
+ "\xb3\x49\xb6\xdb\x34\xd1\x82\x67\xb1\xe3\x5c\x88\xe0\xb0\xf8\xec"
+ "\x41\x2c\xcb\x5d\x30\xec\x49\xa0\x53\x2c\x5f\x38\x6c\x26\xe8\x94"
+ "\x18\xba\x1c\xda\xfa\x0a\xb4\xf5\x04\xd0\xf5\x04\xb4\x75\xad\xd8"
+ "\x56\xf1\x0c\x3a\x1e\xe8\x0f\xef\xfa\xb6\x8d\x52\x5b\x97\x03\xbd"
+ "\xf3\x5a\xf3\x36\x9e\x24\xdf\xa3\xe0\x8f\x37\xb4\x0b\xeb\x8b\x3a"
+ "\xad\xae\xa3\x04\xbf\x2b\xd8\xee\x82\x92\xb6\xb9\x80\x47\xa4\x39"
+ "\xf8\x0b\xb3\x69\x44\x5d\xac\xc4\x07\xac\x0f\xed\x36\x8c\xaa\x58"
+ "\x09\xf5\x41\xda\x9f\x22\x13\x50\x9e\x81\xf6\x63\x2b\x90\xfe\xde"
+ "\xe7\x40\x47\x09\x3c\x18\x0e\x3c\x58\x29\xf2\xc0\x24\xf2\x00\xfc"
+ "\x65\xb0\xc3\xe1\x10\x37\x6a\x2b\x72\x18\x0f\x82\xa3\xd1\x73\x6d"
+ "\x43\x2c\xaf\xa9\xfe\xe5\xf5\xe7\x77\x74\xb1\x18\x59\x81\x7b\x77"
+ "\x42\x8c\xf0\x27\xbe\x1b\xe4\xb6\x50\x94\x5b\x6a\x78\x44\x92\xd9"
+ "\xe3\x8a\x9f\xfd\x3d\x30\x99\x9d\xf3\x87\xff\xa3\x32\x1b\x75\x71"
+ "\x65\x76\xee\x3a\x6f\x99\x9d\xbb\xcf\x5b\x66\xe7\x2e\xf4\xc8\xac"
+ "\xf8\x6e\x48\x64\x76\x6e\xfa\xe5\x91\xd9\xb9\xe9\x7d\xc8\xec\x9c"
+ "\x00\x64\x56\xeb\x47\x66\xb5\x17\x4f\x66\x7f\x5e\x76\xe9\x6c\xec"
+ "\xf3\x47\xbb\xb8\x3e\x6c\xec\x06\x99\x8d\x55\xa3\x8d\xfd\x85\xb1"
+ "\x2f\x79\xed\x2e\x03\x79\x55\x89\xf2\xfa\xc2\x5f\xa0\xbc\x84\x65"
+ "\x87\x5b\x06\x96\x57\x57\x99\xc7\x7f\xf2\x2b\xb3\x06\x94\xd9\x4a"
+ "\x62\xb5\x0b\x32\xbb\x50\x92\xd9\x32\x31\x16\xea\x47\x6e\xa3\xfc"
+ "\xc9\x2d\x9e\xcb\x85\x67\x72\xf5\x2b\xb7\xa2\xbf\xd4\x3d\x06\xe5"
+ "\xd6\x7c\x85\xd9\xda\xe7\xef\xf1\x96\xdb\xe7\x93\xbc\xe5\xf6\xf9"
+ "\x1b\x3d\x72\x2b\xbe\x1b\x12\xb9\x7d\x3e\xe6\xf2\xc8\xed\xf3\x31"
+ "\xdf\x1d\x5b\xfb\xc2\x9c\x4b\x67\x6b\x5f\xda\x21\xc8\xad\x3f\x5b"
+ "\x9b\x25\xda\x5a\x35\xda\xda\x17\xef\x0a\x4c\x76\xe7\xdd\xf1\x7f"
+ "\x5c\x76\x2f\xb2\xcd\x9d\x77\xd2\x5b\x76\x5f\xd2\x79\xcb\xee\xbc"
+ "\x4f\x3c\xb2\x2b\xbe\x1b\x12\xd9\x9d\xd7\x7e\x79\x64\x77\x5e\xfb"
+ "\x77\xc7\xe6\xce\xf7\x3b\x57\x4e\x77\x0b\xc9\x3e\xa6\x98\xbf\xcc"
+ "\x5a\x26\xcc\xe3\x03\x5c\x3d\x24\xce\xf3\x9e\xff\x86\x55\x3b\x99"
+ "\xf0\xf9\xb4\x19\xcf\xa6\xc0\x79\x2f\x6f\xca\xe6\x95\xb0\x79\x10"
+ "\xf3\xff\x20\xcd\x8b\xd9\x25\x9e\x5f\xd1\xdf\xbc\x18\x9a\x47\x93"
+ "\xc5\xdf\x89\xeb\xa9\xa9\x51\x7a\x66\x7b\x67\xcd\x77\xd0\xad\xd4"
+ "\xe0\x18\x49\x0d\xfe\xc6\x8a\x22\x36\x51\x8a\xe7\x3e\x9d\xbd\xa5"
+ "\x78\xf7\xd9\x7c\x42\x8a\x84\x71\x98\x05\x7a\xf8\xed\x6c\x36\x1f"
+ "\x62\x7a\xd1\xd9\x9c\xd9\x04\xd2\xa6\x48\x69\xc2\x59\xd8\x39\x61"
+ "\x94\x87\x77\xa0\x43\x32\x76\x65\x92\x70\xdc\x8f\xf4\xee\xf3\x88"
+ "\xc5\x05\x33\x41\x47\xe0\xbe\x48\x1d\x78\x5e\x07\xfd\xc1\xcd\x1d"
+ "\x15\x67\x88\xb2\x71\x8b\xd0\xf7\x8c\xf3\x69\x76\x17\x22\xfe\xc3"
+ "\xc6\x97\x52\x4e\x49\xf8\xf2\xe2\x3c\xaa\xb6\x25\x0a\xf3\x77\x01"
+ "\x2b\xd2\x1c\x1b\x3c\x77\x8d\x1f\x53\xac\x97\xf6\xc3\xa4\x50\xbf"
+ "\xbf\x66\x3a\x38\x3c\xb3\xbc\x22\x85\x68\xe0\x52\x51\x93\x2d\x11"
+ "\xea\x75\x44\xea\x4b\xf4\x3b\x17\x1b\xcf\xf3\xbd\x59\xab\x14\xe7"
+ "\xf3\xe0\xba\x5e\xa1\xdf\x6c\x1b\xc7\xe7\xb9\x21\x9d\xe6\x64\x09"
+ "\xe7\x77\x45\x02\x2d\x70\xfe\x2c\x9e\xab\xc4\x57\x14\xef\xde\x7c"
+ "\x13\x21\xef\xad\x6f\xe3\x70\xee\x86\x7b\xfb\xcd\x1d\xe6\xcc\x7b"
+ "\x85\x73\xad\x71\x5f\xf1\xe3\x8a\xc4\xa6\xf8\x6f\xd8\xd9\xbd\xf0"
+ "\xff\x51\x1c\x7f\x79\x06\x9e\x71\x2c\x9f\x3f\xab\x55\x62\x5e\x48"
+ "\xdf\x6a\x4e\xfb\x8c\x44\x1a\x49\x78\x21\xb4\x4d\xcc\x9b\xd0\x21"
+ "\xec\x75\x93\x28\x9c\xe1\x03\xcf\xc9\x38\x66\x00\xbf\x0b\xc7\x39"
+ "\x4b\xb4\xac\x38\x4f\xd0\x0f\x05\xb6\x44\x68\x7f\x9e\x30\xf7\x14"
+ "\xda\xb9\x0d\xda\x0c\x79\x54\x38\x3f\x47\xb8\x67\x12\xcd\x5b\x29"
+ "\xb8\xbf\x6a\x62\x0b\xdc\x55\xe6\x95\x38\xb7\x24\x31\x0e\xcb\xf6"
+ "\x3f\xc7\xdf\x96\x48\x73\x94\x84\xad\x15\x52\x34\x1d\x53\x2c\xcc"
+ "\x88\x54\x50\x0a\xdf\xd4\x6f\xc6\x3e\x6e\x9c\x57\x2d\xcc\x15\x5f"
+ "\x38\x17\xca\x57\xee\x12\xfa\x70\x17\x4e\xb2\x2b\x16\xd8\x7b\xe6"
+ "\xe4\x0b\xe3\x4d\x0b\x0b\xf0\x3b\xf8\x1b\x31\x3f\x5b\xcf\x03\x75"
+ "\xd6\x65\x86\x51\x78\x5e\xc3\xe6\x5e\x87\xff\x11\x7e\x9f\xea\x99"
+ "\x73\x26\xfc\x0e\xb0\xb4\x10\xfb\x7f\x85\x73\x94\xf0\xd9\xef\xbc"
+ "\x66\x91\x6f\x0d\x5a\xc0\x86\x2f\xef\x24\x8c\x00\x2e\x24\x8c\x60"
+ "\x7d\xdf\xcf\xb4\x73\x6c\x7c\x63\x11\xdb\x5b\x12\x78\xe8\x7e\x5b"
+ "\xab\x14\xf6\x1d\xef\x46\xbe\xe0\xfc\xf8\x45\x0d\xc8\x97\x6d\x60"
+ "\x0b\x58\xde\x85\x0e\x4f\xfd\x85\xdf\x0a\xfc\xe4\x81\x17\x6c\x9e"
+ "\xfe\xa2\x5f\x09\x67\xd8\x80\xce\xc0\x39\xe2\x07\x21\x2a\xa1\x88"
+ "\x5b\xc0\xc8\x7b\x29\x4e\xae\x22\x8d\xa5\xff\xf5\x8c\x93\xc3\x79"
+ "\x1f\xd8\x17\x6e\x7a\x85\x28\xb1\x4f\x1d\xcb\xa4\xd1\xc5\xfa\x89"
+ "\x12\x1f\xd7\x03\xef\xd2\x00\xbb\x40\xf3\x6d\x40\xbf\x8a\x2e\x61"
+ "\xbc\x4a\x5f\xc1\x13\x15\x0f\xf9\xec\x8a\x45\x2d\x50\x9e\xa6\xfc"
+ "\x06\xea\xc0\x79\xd9\x40\xc3\xff\xea\xcc\x5d\x54\x2d\xd1\x10\xeb"
+ "\x84\xf3\xaa\x4d\xc2\xfc\xfa\x45\x93\x18\x86\x16\x29\xa5\x36\xfb"
+ "\xa3\xa7\xe9\x3d\x12\x6d\xba\x9b\x4c\xe6\x55\xe3\x2a\x69\xd8\xcd"
+ "\xbb\xb1\xbf\x79\x16\x68\x0d\xdc\x67\x3f\xfe\xb5\xcf\xa9\xd5\xe1"
+ "\x26\xbc\x7a\x5c\x25\x8e\x4d\xb8\x37\x8f\x1f\x1d\xbf\x0e\xd7\x43"
+ "\x1c\xb6\x64\x39\x89\xc6\x9a\xe9\x60\x67\xad\x91\x6f\x89\xfb\x55"
+ "\xd0\xe1\xa0\xd7\xc1\xa6\x2a\xb3\xbe\x25\x37\x22\xbd\x78\xf5\x61"
+ "\xcb\x71\xc5\x62\xd3\xdc\x54\x92\x1d\x9c\x1e\x5d\x2c\xac\xad\x42"
+ "\xff\x02\x74\x3e\x87\xf3\xe9\xac\x0e\xf0\x4f\x4c\x87\x2d\x41\x96"
+ "\xb3\xdb\x9f\x8e\xc4\x76\xf3\xd8\x0f\x2d\xb6\x39\x1e\xdb\xdc\xe1"
+ "\x24\xd8\x97\x3f\x6b\x35\xee\x67\x7a\x8e\xf0\xa6\x71\x95\xd8\x66"
+ "\xf0\x75\xe2\x82\xef\xd3\x4f\x8a\xee\xef\xdb\x14\xe8\xcd\x6f\xbe"
+ "\x79\x37\xaf\xb2\xc5\xe1\xb7\xb1\x0e\xb8\xbe\x66\xd6\x39\x22\xd0"
+ "\x1d\xe9\x6f\x75\xba\x09\x55\xcb\xeb\xe0\x0a\xb6\x0e\xfe\xdb\x7f"
+ "\x37\x89\x2e\x78\x8f\xf1\xdd\xbd\x59\xa4\x81\x01\xc7\xc8\x6c\x71"
+ "\xb8\xcf\xfe\x2c\xac\x83\xe3\x24\x79\xe6\x24\x11\xf8\x6f\xd5\xb7"
+ "\x13\x77\xd8\xf8\xd1\x38\xa7\x02\xf9\x9f\xe9\x02\xfe\x9f\x77\xe2"
+ "\x1e\x24\x0e\x6b\xf6\x05\x82\xfe\x8b\xeb\xac\x9e\xeb\xcd\xff\x25"
+ "\x26\x88\xd6\x83\xe4\xff\x92\x21\xe2\xff\x92\x2b\xa0\xfd\x4b\x43"
+ "\x68\xff\xd2\x21\x6a\xff\xd2\x2b\xa0\xfd\x2f\x87\xd0\xfe\x97\x87"
+ "\xa8\xfd\x2f\xfb\x6d\xff\x13\x37\xf2\x54\x98\x6b\x13\x51\x13\x83"
+ "\x36\x80\xd9\x2b\xc3\x6b\x38\x97\x46\x58\x4f\x25\x3e\x13\xb6\xbe"
+ "\x2a\xdc\xe7\x59\xe5\xf3\xac\xf1\x79\x8e\xf2\x79\xd6\xfa\x3c\x47"
+ "\x4b\xcf\x60\x47\x86\x9d\x52\xbc\x7c\x0e\xfc\xd2\x6c\xbb\xc2\x50"
+ "\x24\xbe\x1f\x8b\x7b\xf4\x80\x4d\x1f\xeb\xef\xbc\x3f\xb5\x82\xd0"
+ "\x6e\x8e\x12\xe1\x1c\x3e\xc5\x32\x65\x57\x0e\xa1\x34\xec\x26\x3d"
+ "\x9e\x95\xc6\x17\x94\x74\xcc\x02\x3d\x6d\x75\x38\xc1\xcf\xd7\x0e"
+ "\x87\xb2\x7f\x80\x67\x40\x22\x5f\x75\x29\x38\xb7\xc6\xf0\x2d\xb6"
+ "\xf3\x6e\xa3\x99\xf0\x61\xe3\x85\xb9\x0d\xbc\xa9\xa4\xc3\x11\x36"
+ "\xfe\x26\xba\xa3\xc9\x66\xca\xe1\xc3\xad\xed\x47\x48\x21\xc7\xeb"
+ "\x32\x32\x80\xbf\xed\xfb\xc9\x86\x76\xda\x96\xe1\xa2\x4e\xeb\x3c"
+ "\x33\xc9\x72\xe0\x19\x2a\x16\xd2\xe8\x38\x22\x9c\xa3\x22\x9c\x17"
+ "\xe3\xd8\x4f\xd0\xff\xc9\xc2\x3c\x90\xd6\xe8\xd8\x47\x1a\xe0\xd9"
+ "\xbc\xf2\x2b\x68\xe7\xb2\x5f\x59\xdb\xf7\x41\xbc\x54\xe2\xe0\x55"
+ "\x25\x47\xa8\xaa\xa4\xb9\xa1\x1d\xcf\x89\x2d\x69\xc1\xba\x36\x42"
+ "\x3d\xac\xae\x6a\xe0\x6f\x49\x8b\x50\x6e\x87\x4d\x88\x49\x71\xcc"
+ "\x96\x57\x43\x7e\x75\x49\x33\xd6\x0f\xeb\xd6\xf7\x38\x6c\x4d\x12"
+ "\xd4\xfd\xa1\xb9\x7a\x25\xc1\x35\x10\xc1\x61\x64\xd9\x41\xbf\x7e"
+ "\x74\x41\x4d\x2b\x2b\x37\x3c\x84\x72\x5f\xf1\xab\xff\x69\x81\x45"
+ "\xac\xaf\x26\x94\x72\x53\xfb\x29\x57\xac\xaf\x2e\x94\x72\xeb\xfd"
+ "\x97\x5b\x2b\xd6\x37\x36\x84\x72\x97\x8f\xed\xa7\x5c\xb1\xbe\xd9"
+ "\xa1\x94\xeb\x77\x0d\x21\xe2\x21\x34\x2c\x2c\xf7\xbf\xff\x03\x60"
+ "\x21\x34\x1c\x24\xf7\xd3\x7e\x4b\x52\x68\x18\x48\x4e\xef\x0f\x03"
+ "\xa1\xf1\x3f\xb9\x5f\xfe\x87\xc6\xfb\x15\xba\xfe\x78\x1f\x1a\xdf"
+ "\x57\xf8\xc5\x3f\xc6\x06\xc0\x27\x1d\x8d\x68\x32\xf3\x85\xdb\x75"
+ "\x7c\x44\xcd\xed\x9b\xf9\x58\xf2\xc4\x46\x42\x22\x4b\xc9\xf5\x4f"
+ "\x94\x7f\x4e\x63\x85\x98\x7b\xa5\x6a\x63\x19\xe1\x20\x86\xe6\xde"
+ "\x5d\xdf\xcc\x59\x5d\x93\x51\x6f\xb9\xf7\xa4\x39\x15\x3f\x84\xf4"
+ "\xbf\x83\x1d\xec\x00\x5f\x96\x95\xb5\x5d\x57\x98\x19\x4b\x84\xf5"
+ "\x71\x10\x47\xcc\x5a\xfd\x39\xc5\x75\xc7\xf1\xdf\x82\x7e\x2d\xc5"
+ "\xfd\x12\xc9\xf5\xf0\x5b\x17\xe0\x18\xca\x71\x92\xf7\x79\x87\x62"
+ "\x96\x43\xc8\xeb\x10\xe6\xa7\x17\xd6\xdc\x8e\xb1\x02\xcd\xd2\xe3"
+ "\xde\x67\x0e\xf8\xf6\xc6\x30\x07\xe1\x2a\x84\xf3\x7b\x56\xa6\xdb"
+ "\x15\xab\x0c\xe2\x1a\xd3\x76\x61\x8f\x3e\xa8\x3b\xee\xd1\xb7\x19"
+ "\xe2\x06\xcc\x7f\xb7\x91\x70\x1f\x09\x7b\x1a\xaf\xdc\x83\xfb\xf6"
+ "\xf5\xb7\x56\xdb\x5d\x60\x53\xe2\xef\x69\x01\xd8\xe7\x93\xb8\x9e"
+ "\xdc\x41\x20\xc6\xc8\x2e\x84\xf8\x64\xda\x38\xec\x4f\x39\x43\x32"
+ "\x37\x52\x1e\xfb\xb6\xa8\xea\x70\x35\xce\x3d\x64\x7b\xca\xaf\x8a"
+ "\xc5\x58\x5f\x3c\xb7\xe9\xa6\x13\xf0\x2c\xc4\x48\x38\x07\x47\x55"
+ "\x52\x49\x0b\xd5\xb1\x8d\x1d\x67\x08\xdb\x17\x7d\xd5\x63\xb8\x7f"
+ "\xda\x59\x95\x8d\x74\xa8\x6c\xe1\x9d\xb9\xab\xa6\x48\x6d\xc0\xef"
+ "\x4b\xe9\x18\x13\x62\x3e\x78\x3f\x4f\x5a\xbb\xed\xe7\x6c\xe3\xd1"
+ "\xf1\x5a\xea\x40\xfa\xb2\xba\x18\xff\x8e\x3c\xa0\x05\x56\x67\x47"
+ "\x96\xfe\x16\xd6\x47\xb2\xaa\x0d\x63\x6d\xb0\x17\xad\x2c\xee\x2d"
+ "\x69\x15\xce\x1d\x01\x7b\x30\x57\xcf\x05\xe9\x13\xaf\x12\xf6\xa4"
+ "\x32\xdf\x82\xf6\xd7\xb8\x17\xca\x7f\xf8\x98\xc2\xa8\x62\x71\x5e"
+ "\x89\x93\xad\xbf\x5c\x55\x09\xdf\x70\xc2\xf3\x6e\xcc\x07\xef\x27"
+ "\xb0\xf7\xdb\x89\xe7\xfd\x76\xf4\x95\xb4\xe2\xfb\x99\xe2\x7b\xa5"
+ "\xec\xbd\xd2\x78\x0b\xf6\x7b\x18\x53\xb1\x0d\x40\x47\x3b\x94\xd7"
+ "\x21\xec\xb3\x20\x9c\x29\x59\x62\x17\xbf\xd3\xd1\xae\x30\x9a\xce"
+ "\x02\xc6\xe0\xbd\x4b\xf6\x7d\xd7\x47\xe9\x31\xe4\x89\x72\xa4\xa1"
+ "\x71\xb7\x9d\x3b\x2c\xae\xcd\x5e\xb5\x4f\x68\x3b\xd8\x50\x79\x79"
+ "\x76\x85\x31\x19\xed\x64\x07\xf8\x68\x90\xe7\x2d\xfc\xa6\x9c\xde"
+ "\xd2\x2a\x50\x5d\xd2\x8a\x85\xba\xc5\xab\xd6\xac\xc4\x55\x7c\xde"
+ "\xeb\xd3\x34\xb8\xce\x95\x2f\xa8\x6b\xb3\x96\xe2\xba\x3b\x8d\xb0"
+ "\xc6\xfb\x2d\xe0\xa3\xab\xb0\x49\xe7\x8e\xb0\x55\xb9\x0b\x0f\xdb"
+ "\xb2\xce\x11\x2e\x53\x4b\xbf\x30\xaf\x7f\x9c\x9c\x52\xac\x7e\x50"
+ "\x38\xab\x52\x27\xec\xcb\xdf\x61\x5e\xff\x0f\x4c\x13\xf6\x47\xb4"
+ "\x26\xb2\xb4\x3f\x65\x5a\xb8\xbf\x65\x36\x73\xf5\x89\x67\xc8\x47"
+ "\x5a\x07\x39\xa8\x3b\x83\x7b\xd3\x76\xfc\x89\xb7\x71\x38\x37\x17"
+ "\xf2\xff\x0a\xbf\x85\xfd\x07\xf8\x3f\xeb\x0b\x59\x7d\x07\x7e\x07"
+ "\xe7\x2d\xb6\x2b\x56\x8f\xc3\xef\xd9\x15\xab\xf5\x61\x65\xc2\x5c"
+ "\x6e\x15\xe4\xfb\x8a\x37\xd5\xb5\x09\xf2\x9e\x6b\x6c\x76\x71\xaa"
+ "\x6e\x71\x5d\x1f\x29\x1b\x8d\x73\x74\x57\xdb\x64\xeb\xdc\x54\x67"
+ "\x39\xf2\x28\xa4\xb5\x4a\xfb\x66\xe0\xf9\x45\xfe\xf4\xc7\x05\x88"
+ "\x93\x2f\x94\x15\x87\xf3\xaa\x3a\xa0\x6f\x5d\x9b\xc5\x42\xb0\x9f"
+ "\x46\x81\xf3\x8c\xdb\x15\xaf\x1e\xa4\xea\xba\xe6\x4c\x94\x53\xa0"
+ "\xc5\xef\x71\x0e\x61\x44\x93\x6e\x1f\xce\x19\x2c\xb4\x55\xfd\x2e"
+ "\xcd\xc9\x1d\xae\xaf\x26\xba\x9f\xa3\x8f\x95\x32\xf7\xe9\x24\xea"
+ "\x1a\x7f\xc4\x4c\xea\x5b\xff\x48\xea\x5a\x2c\x44\x35\x8f\x84\x65"
+ "\xd9\xa9\x5b\xe8\x4b\x48\x25\x5c\xbc\x9d\x84\xe1\x9e\x4e\xb8\x8f"
+ "\x3b\x9e\xd9\xde\xe8\x6c\x00\xbf\xe7\xbd\xf6\x77\x33\xdb\x86\xe9"
+ "\x9e\x23\xe0\x2f\xb1\x31\x69\x61\x0d\x90\x43\x58\x97\xad\xc6\xfe"
+ "\x71\xd9\xda\x9f\xfa\x8d\x27\x49\x78\x83\xe1\x28\xc9\x48\xa4\x3c"
+ "\xce\xf1\x8b\x4f\x0c\xa3\xc2\xfa\x9f\x74\xc8\x6c\x04\x9e\xae\xd5"
+ "\x47\xec\x4c\x23\x51\x8d\xa9\x76\x62\x6d\xb3\x90\xb7\x53\x48\x14"
+ "\xed\x34\x8c\xac\xaf\x3f\x4c\x68\xe1\x9d\xbb\xdf\xcf\x34\x0f\x93"
+ "\xe6\x63\x45\x6e\x52\x20\x7e\x23\x0a\x70\x5e\xd6\x79\x12\xb3\xe0"
+ "\xab\x6c\xa1\x0f\x17\xfb\xcb\x5d\x9d\x7a\x5d\x77\xa7\xfe\xf6\xae"
+ "\x4e\xfd\x2d\x52\x3f\xfb\x4b\xcb\x34\xa4\x1c\xd7\x0d\xe5\x26\x25"
+ "\xe1\xba\x21\xf4\x2f\x5d\xea\x89\x95\xd8\xa7\x2e\xec\x51\xb3\x56"
+ "\x1f\xcd\x2f\xd6\x93\x89\x0e\x61\x5d\x12\xf6\xf3\x6b\x2a\x16\x41"
+ "\x7d\xdb\xcf\x10\xf9\xdc\xa2\x0b\x6b\xf5\x1c\xce\x2b\xa2\xb9\xab"
+ "\x5d\x5d\xe5\xc5\xe1\x38\xbf\x08\xec\xc2\xe4\xe0\x65\xfb\x55\xc1"
+ "\x7f\xc6\xf6\x53\xc0\xec\xbe\x33\xc8\x1f\xe0\xd3\x19\x07\x87\xbc"
+ "\x68\x48\x42\x3e\xd8\xbc\xf8\x20\xf0\x2d\xc5\xc9\x21\x3f\x90\x17"
+ "\xc8\x13\x0f\x3f\x3e\x11\xf8\xb1\x8f\x67\xfc\xe8\x02\x7b\x20\xf1"
+ "\xe4\x42\x74\xb1\xb6\x3f\xbe\x20\x3f\x90\x37\xf5\xad\x47\x89\x17"
+ "\x4f\x1c\x8c\x27\x40\xcf\xd1\x12\x5f\x90\x27\xd6\x76\xf0\x79\x81"
+ "\x2f\x4f\x7d\x42\xc8\xd3\xe3\x28\xdf\x30\xf3\xe3\x1e\xfe\xb8\xfc"
+ "\xf1\xe7\x1b\x0f\x7f\x80\xf7\xbd\xf9\x73\x52\x83\xe3\x3e\xc8\x9f"
+ "\xb6\x60\xf8\x53\xdf\xca\xf8\xe3\x12\xf9\x33\x2e\x8e\x70\xce\x4e"
+ "\x3d\xb7\x23\x8d\x4c\x9e\xf9\x95\x8e\x1c\x4a\x68\x20\x40\xeb\x02"
+ "\xde\x64\x75\x86\x26\x47\x6b\x55\x81\xcb\xd1\x9a\xf2\x6b\x72\x14"
+ "\xac\x1c\xad\x79\x72\x70\x72\x94\xd6\x7c\x4d\x8e\x2e\x95\x1c\xa5"
+ "\x1d\xf1\x95\xa3\x1e\x5b\x9d\xb2\x64\xc5\xc2\x65\x2b\x97\xad\x7c"
+ "\x59\xb7\x68\x5d\xea\x92\x57\x99\xc5\xf6\xb2\xd9\x5a\x77\x66\x2c"
+ "\x87\xe7\xae\xd7\x97\xda\xc8\xfb\x37\xd9\x38\xf7\xd7\x5a\x25\x2d"
+ "\x98\xe6\xe0\x0b\xa6\x1b\xf1\x0c\x76\x94\x37\x3c\x9b\xfd\xb8\x62"
+ "\xe3\x64\xdc\x8f\x90\xed\xa3\xb2\x51\x98\x7f\x09\xbe\x61\x29\x8e"
+ "\xbf\x6c\x5e\x4f\x94\x9b\x71\x5d\xb4\x13\xfb\x39\xf0\x7d\xc6\xaf"
+ "\x70\xef\x34\x5a\x5e\x5c\x8a\x7b\xd9\x74\xa8\x4a\x76\x6f\x81\xb2"
+ "\x1c\xea\xba\x36\xa5\x0e\xd7\x91\xac\x8b\x01\x7f\xc3\xe1\xd9\x1f"
+ "\x29\x23\x89\x0e\x4f\xdf\x82\x72\x8e\x6b\xfa\x4e\x29\xd6\x2d\xb9"
+ "\x80\xfb\xc7\x83\xff\x3a\x77\x1c\x7c\x67\x4c\xb1\x56\xd8\x77\x01"
+ "\x64\x9e\xbd\xdf\x30\x12\xbf\xdf\xad\x3a\x6c\x13\xce\xae\x57\x35"
+ "\xe9\xce\x16\xd8\xaa\x0e\x67\x54\x11\xdd\x73\x28\xf3\xeb\xde\x78"
+ "\xaa\x14\x64\x7e\xb6\x99\x34\x68\x7f\x47\xea\x12\x00\x6b\x09\x03"
+ "\xc9\xbc\x0c\x63\xb7\x04\x26\xf3\x12\xb6\x10\x53\x88\x2d\xc4\xd5"
+ "\x75\x80\x2b\xc4\x9a\x84\xad\x37\xcf\x33\x6c\x45\xb6\x10\xcd\xce"
+ "\x33\x80\x2f\x17\xc3\x17\xae\x73\x6e\x48\xff\xd8\xbf\xec\x9f\xf7"
+ "\xc1\x16\x27\x62\x6b\x2d\x60\x6b\xad\x07\x5b\x2f\x1e\xd5\x90\xb7"
+ "\x05\x6c\x2d\xf6\x60\xcb\x34\xb1\x52\xc2\x15\x62\x0c\xf1\xc4\xbf"
+ "\xac\x27\x28\xef\x12\xc6\x2a\x96\xb2\xf1\x53\x41\xf6\x39\x90\xfd"
+ "\x4e\x99\x0d\x1d\x33\x18\xd9\x5f\x2f\xec\xff\x80\x3c\x41\xfe\x20"
+ "\x5f\x90\x17\x57\x23\x1f\xf0\x7c\x6a\xda\xd9\x17\x2f\x16\x39\x06"
+ "\xe2\x05\xf2\x01\xf9\x21\xf0\x01\xf8\x21\x8d\x65\xe3\xd8\x26\xf2"
+ "\x04\x79\x71\x77\x06\xe1\x90\x2f\x15\x20\xef\x28\xe3\x40\x5b\x1b"
+ "\xf2\x45\xf0\x5b\x73\xd4\xd5\x6f\x8d\xf6\x9c\x5b\xd3\x99\x9b\xb1"
+ "\xa5\xb7\xcf\x9a\x51\xea\xd9\xeb\x6d\xdd\x14\x16\x63\xd4\x95\xb2"
+ "\xb1\xa8\x8d\xdf\x88\x32\x9c\x8d\xf1\x9e\x10\xdb\xb9\x21\xb6\x53"
+ "\x41\x6c\x57\x00\xb1\x1d\xf6\xbd\x09\x7b\x10\x64\x7c\xc5\xc6\xc5"
+ "\x20\x96\x53\x1f\xae\x86\xb8\xa2\x12\x69\x26\x8c\xc1\xaa\x6d\xc2"
+ "\x9e\x3f\xd4\x04\x71\xe3\xaf\x39\x02\xcf\x80\x1b\x77\x90\x78\xd9"
+ "\xa8\x14\xc7\x98\x0d\x6c\x8f\xc0\x8d\x47\x58\xfd\xd2\x85\x79\x0a"
+ "\xc2\xf8\x1c\xc7\xef\x76\x6f\xf6\x1e\x9f\x93\x8f\xdf\xbe\x9f\xe9"
+ "\x10\xc7\xe6\x36\xb2\xfd\x18\x71\x4d\x08\xe8\xb1\x77\x33\x6d\x9c"
+ "\x67\x7c\xee\x63\x7c\xff\xa1\xf7\xf8\xdc\x46\xc1\xdf\x83\x3a\xb4"
+ "\xe1\x9c\x14\x78\xde\xc3\xd2\xd3\xdb\xe5\xe9\x9e\xf1\x6f\x96\x8e"
+ "\x6b\xa0\xc4\xf8\xba\x9d\xc5\xd6\x99\x44\x8a\x61\xfd\xf8\x33\x41"
+ "\xe8\xd9\x9c\xfd\x1e\x3d\x9b\x23\xc4\x9a\x54\xdb\x64\x69\xe8\xa5"
+ "\x67\x71\x6f\xab\x9c\x31\xb3\x50\xcf\x16\x1c\x36\xb3\xfa\x65\x9a"
+ "\x80\x26\x61\x78\xde\x1c\xa6\xe3\x5a\x21\xd4\xb9\xe5\x82\x0e\x6e"
+ "\xaa\xde\x22\x8c\xc1\x67\xee\xf3\xd6\xbd\x9b\xec\xde\xba\x37\xf3"
+ "\x8b\xfe\x75\x6f\xf6\x6b\xfd\xeb\xde\x2c\xf5\x35\xdd\x1b\xaa\xee"
+ "\x05\xbf\x6b\x50\xba\x37\x7b\xf6\x35\xdd\x7b\xb1\x74\x6f\xf6\x4c"
+ "\x99\xee\x7d\xc7\x5b\xf7\xe6\x90\xde\xba\x37\x27\xca\xa3\x7b\x33"
+ "\xab\xbd\x75\xef\xe6\x25\x81\xe9\xde\x9c\x85\x17\x57\xf7\xe6\x64"
+ "\x7b\xeb\xde\xcd\xb3\x45\x3d\x32\x37\x78\xdd\xbb\xf9\x9e\xfe\x75"
+ "\xef\xe6\x07\xbd\x75\xef\x66\x15\xd3\xb1\x9b\x93\x98\xee\xdd\xac"
+ "\x63\xe9\x99\x73\xe4\xe9\x1e\xdd\xcb\xd2\x7b\xeb\xde\xcd\x19\x03"
+ "\xe8\x5e\xbd\x9b\x97\x74\x6f\x33\xe8\xde\x66\x8e\x7f\xd9\x9f\xee"
+ "\xcd\xcb\x6b\x40\xdd\x9b\x82\xba\x37\x2f\xaf\x7f\xdd\xfb\x6f\xdf"
+ "\xa2\x8e\x15\xf6\xaa\x2c\xa1\xad\xc2\x5e\x81\x25\xb4\x0d\xf1\x38"
+ "\x2b\x03\xd2\x21\x0d\xf7\x54\xc4\x7c\x8c\xf7\x92\x8e\xde\x72\x4f"
+ "\x8f\x8e\x86\x7c\xfc\x8d\x1e\x1d\x8d\xfa\x19\xf5\x74\x79\x09\xb5"
+ "\x57\x94\xe0\x19\x20\x5b\x12\x24\x5d\x6d\x82\x34\x3c\xe7\x03\xf7"
+ "\x03\xc2\xf9\x88\x40\x83\xd6\xcd\xf0\x3d\xcc\x0f\xf9\xb2\xbd\x75"
+ "\xfa\xbf\xed\xf7\xd6\xe9\x5b\x3e\xe8\x5f\xa7\xe7\x3e\xdf\xbf\x4e"
+ "\xdf\xf2\xc5\x35\x9d\x7e\xb9\x74\x7a\xee\xd8\x6b\x3a\x7d\x60\x9d"
+ "\xde\x17\x2f\x7c\x75\xfa\x5d\xa2\x4e\x2f\xef\xd1\xe9\xb9\x3a\xff"
+ "\x3a\xfd\xdf\x8e\xf4\xd6\xe9\xff\xd6\xe6\xd1\xe9\x5b\x0a\xbc\x75"
+ "\xfa\xd6\x07\x03\xd3\xe9\x79\xf7\x5f\x5c\x9d\x9e\x37\xc7\x5b\xa7"
+ "\x6f\x1d\x2b\xda\x9c\x26\xb9\x4e\xe7\xc3\x02\xd1\xe9\x5b\x87\x49"
+ "\x3a\x1d\x75\xe6\xbb\x7c\xb3\x4c\xa7\xa3\x6e\xdb\xaa\x36\xa7\x1d"
+ "\x93\xe9\xf4\x3c\x3b\xd3\xdd\x5b\x27\xbb\x05\x9d\x9e\x27\xee\xe5"
+ "\xb5\xd9\x26\x4f\xf7\xe8\x74\x96\xee\x96\xeb\xf4\x36\xd4\xe9\x5b"
+ "\x67\x0f\xa0\xd3\x63\x02\xd7\xe9\x85\x55\x1e\x9d\x5e\x58\x25\xe9"
+ "\x74\xd4\xe3\xa8\xd3\x51\x07\xa3\x5e\x17\xf6\xd1\x12\xe6\x54\x14"
+ "\xde\x18\xe9\x20\xe1\xb8\x6f\x2e\xf6\x61\xa0\x2e\x2e\x3c\xc3\x74"
+ "\xbb\x90\x67\x25\xcb\x03\xfa\xb9\x15\x74\x72\x1b\xe8\xe4\x36\xd3"
+ "\x29\xa2\x84\x7c\xcd\x85\x38\x3f\x0f\x9e\x51\x77\x47\xb6\x83\x1d"
+ "\x70\x09\x76\xa0\x19\xed\x07\xa3\x57\xe1\x8d\xde\xb6\x20\x7f\x6a"
+ "\x5f\xfe\x7a\x91\xcc\x16\x54\xdc\x40\x8f\x74\xe6\xe6\x27\x4a\xfa"
+ "\xbd\x10\x9e\xd1\x06\x14\x9d\x11\x6c\x80\x1d\x6c\x40\x2b\xb3\x01"
+ "\xf9\x5b\x7a\xf2\x40\x1d\x84\x3c\xcc\x4e\x34\x6f\xc6\x33\xd0\x58"
+ "\x9e\x4a\x6f\x3b\x61\x6a\xf1\xb6\x13\xf9\x47\xd1\x4e\x40\x1b\x70"
+ "\x1f\x19\x05\x6f\xaa\x6b\x76\x97\x17\x6b\xd1\x66\xb0\xf7\x05\x9b"
+ "\x7a\xec\xc4\x0d\x32\x3b\x91\x2e\xd9\x89\xd7\x47\x5e\xf1\x76\x02"
+ "\xb0\xdc\x90\x71\x35\xda\x89\x82\x99\x57\x82\x9d\x40\x1e\x5c\x27"
+ "\xeb\x5b\xf5\xc7\x07\xdc\x8b\xa1\x21\xf9\xbb\x62\x27\x0a\xe2\xfc"
+ "\xdb\x09\x93\xab\xb7\x9d\x28\xd4\x78\xec\x44\xfe\x7e\x6f\x3b\xb1"
+ "\x6d\x61\x60\x76\xa2\xf0\x25\x5f\x3b\x81\x34\x2b\x64\xf3\x02\xda"
+ "\xd1\x3e\xb8\x4d\x36\xc2\xa3\xad\x08\xc9\x4e\x14\x66\x78\xdb\x89"
+ "\x6d\x33\x45\x3b\xf6\x4e\xf0\x76\x62\xdb\x5d\xc2\x78\xbf\x64\x27"
+ "\xce\xfb\xda\x89\x6d\xf7\x7b\xdb\x89\x6d\xe1\xcc\x1e\x6c\x4b\x64"
+ "\x76\x62\x5b\xb4\x68\x6f\xf6\xc8\xd3\x3d\x76\x82\xa5\xf7\xb6\x13"
+ "\xdb\xd2\x07\xb0\x13\xaa\xee\xe8\x62\x6d\x77\x41\x13\x71\xed\x29"
+ "\xde\x3d\x21\xe1\x51\xb7\xaf\x0c\x30\xec\xbb\xd9\xd9\x38\xd2\x98"
+ "\xcf\x7c\x36\xc6\xc0\x8b\x6b\x7a\xbb\xa2\x8b\xc3\x8f\x27\x83\x1c"
+ "\xb4\xfb\x97\x03\x90\x81\x70\x49\x06\x1a\x0c\x5f\x11\x90\x0b\x0e"
+ "\xc7\x81\xde\x06\xfc\x5b\x3b\x9a\x05\xbd\xa4\x6a\x8d\x25\xb8\x97"
+ "\xa2\xba\x9d\x68\xd4\x0a\xc5\x70\x1c\x63\x70\x83\x2c\x4c\x1b\x47"
+ "\xf9\x3b\x9b\x63\x89\xda\x40\x22\x50\x1e\xde\x13\xc7\x1a\x70\x3f"
+ "\x06\x1c\x63\x00\x1c\xc6\x2c\x68\xf2\x8c\x31\x74\x05\x30\xc6\x60"
+ "\x4d\xb7\x0b\x63\x0c\xb8\x46\x89\x07\x19\x10\xd6\xcd\xe0\x18\x83"
+ "\x53\x18\x97\xd1\x08\x6b\x55\x84\x31\x86\x63\x04\xc7\x17\xa4\xfd"
+ "\x58\x70\x5c\xe1\xce\x04\xc2\xe1\x7e\x0d\x6f\x03\xfe\x0f\xe9\x1b"
+ "\x08\xca\x40\xf0\xfa\xa8\xa8\xa5\xbf\x79\x36\x2e\xa0\xa9\x5b\xd5"
+ "\x44\xe8\xce\x26\xc7\xef\x8f\x39\x15\xb8\x57\xa5\x1b\x78\xc4\x83"
+ "\xde\xa1\x2a\x1f\xbd\xd3\x2d\xd2\xbb\x9b\xd1\x1b\x78\x15\x3e\xbf"
+ "\x83\x50\x48\x67\x7b\x55\x3a\xed\x80\x35\xfd\xe8\xf2\xf5\x48\xdb"
+ "\x18\x52\x2e\xee\x57\xc9\x6f\x30\x8c\xe4\x81\x9e\xb8\x36\xe1\xdd"
+ "\xf3\xce\x61\x6e\xd5\xb8\xca\x82\x2e\x32\x01\x74\x8c\x1a\x75\x0c"
+ "\xe0\x73\xd4\xae\x2e\xa0\xed\x17\x8c\xb6\xb8\x6f\x1a\xde\x5d\x1b"
+ "\xf4\x3a\x28\xfb\xf6\xee\x6e\xa0\xaf\x93\xd1\x77\xfe\x6a\x0d\xa9"
+ "\x90\xc6\xd8\xc0\x3e\x37\x02\x4f\x51\xc7\xcc\xea\x88\xa4\x78\x1e"
+ "\x85\xbb\x5b\x1f\xcd\x7f\x0d\xf4\xed\xc0\xf3\x47\xf4\xc8\x7f\x4d"
+ "\xc5\x71\x1c\x13\xfc\x8c\x8d\xb1\xa9\xc5\x7d\x30\x36\x80\xbe\x5f"
+ "\xa6\x23\xd6\x4a\xd0\xb7\xc3\xb7\x15\x74\x97\x17\x87\x53\x05\xe8"
+ "\xfb\x8c\x60\xe9\x5b\x3c\xe5\xf2\xd0\x57\xf7\x1d\xa2\xef\x1b\x63"
+ "\x43\xa7\xef\x9b\x7e\xd7\x3f\x5f\x5c\xfa\x6a\xbe\x43\xf4\x2d\xde"
+ "\x12\x3a\x7d\xdf\x72\xf5\x47\x5f\xf4\xef\x25\xdf\x5e\xf2\xeb\xd1"
+ "\xb6\x30\xdb\xb8\x3d\xd5\xe3\xd3\x6f\x4f\x95\xc6\x22\x81\x36\x4a"
+ "\x93\xd8\x47\x63\x5c\x8a\x67\x20\x94\x7c\x23\x8d\x43\xa2\x4f\x2d"
+ "\xf0\x6a\x27\xf0\x6a\x25\xae\x41\x11\xf9\x04\x76\x60\x41\x07\xe8"
+ "\xea\x31\xc5\xe0\x93\x81\x9d\x78\xa7\x78\xb7\x1f\x9e\x71\xa8\xe3"
+ "\xd5\xa9\x44\x33\xdf\xc8\x78\xc7\x6f\x00\x9e\x75\x81\x7f\xe3\x6c"
+ "\x23\xb8\xa6\x34\xb2\x0d\xf4\x6a\xb7\x61\xe4\x3c\xf0\x97\x25\xbe"
+ "\xbd\x97\xe6\x14\x7c\x9b\x3e\xf9\xb6\xc3\x9b\x6f\x67\xfb\xe0\x9b"
+ "\x67\x6c\x7f\x71\x1b\xe3\x9b\x5d\xe0\x9b\xa0\xd7\x37\x80\x6f\x03"
+ "\xfc\x93\xf8\x26\xe8\x75\xe0\x9d\xc0\xb7\xf6\x63\xc4\x2d\xd3\xeb"
+ "\xe8\xd7\x20\xef\xea\x13\xc1\xbf\xcc\x7d\xb3\x55\xe0\x1b\xfa\x99"
+ "\x89\xc1\xf2\xad\xc4\xc7\x9f\x29\xbd\x2d\x30\x7f\x66\xfb\x3d\xe8"
+ "\xb3\xc8\xfd\x19\x7c\x3e\x0b\x31\xaf\x5b\x6d\x53\x76\x84\xe4\xc3"
+ "\x6c\x8f\xf5\xf6\x61\x4a\x55\xac\x4e\xbf\x5c\x17\xbc\x0f\xb3\x5d"
+ "\x18\x6f\x7a\x77\x27\x8b\x25\xbd\xfd\x97\xed\xe7\xbc\xfd\x97\xed"
+ "\x16\xe6\xa7\x94\xea\xce\xe6\xa0\xff\xb2\xbd\x85\xa5\xff\x32\x5d"
+ "\x9e\xee\xf1\x5f\x58\x3a\x3b\x2f\xbd\x74\x42\x70\x3e\xcb\xc4\xcb"
+ "\xec\xb3\xc4\xf4\xe3\xb3\xc4\x5c\x65\x3e\xcb\x8e\xa2\x6b\x36\x75"
+ "\x20\x9d\x5f\x1a\x1b\xba\xce\xdf\xe9\xb8\x66\x53\x07\xa2\xef\x8e"
+ "\xe6\xd0\xe9\x5b\x36\x3b\x74\x9b\x5a\x61\xf1\xd8\xd4\x0a\x8b\x7f"
+ "\x9b\x5a\x31\xf5\x9a\x4d\xed\xcb\xa6\xbe\x3d\x39\x74\x9b\x5a\x11"
+ "\xee\x6d\x53\x77\xad\x09\xcc\xa6\x56\xbc\x36\xf4\x36\xb5\xe2\x2d"
+ "\x6f\x9b\xba\x4b\x5c\xbb\x5c\xd6\x10\xbc\x4d\xdd\xf5\x98\x7f\x9b"
+ "\xba\x6b\x86\xb7\x4d\xdd\x15\xcd\x6c\xe7\xae\x54\x66\x53\x77\xc5"
+ "\xb0\xf4\xb2\x7a\x79\xba\xc7\xa6\xb2\x74\x66\x53\x77\x65\x07\x67"
+ "\x53\x6f\xbd\xcc\x36\x55\xd7\x8f\x4d\xd5\x5d\x65\x36\x75\xb7\xdf"
+ "\xfd\x2f\xaf\xe9\x7c\x49\xe7\xef\x7a\x2b\x74\x9d\xff\x6b\xbf\x67"
+ "\x14\x0e\xac\xf3\xf7\x1c\xf0\xe8\xfc\x3d\x07\xfc\xeb\xfc\x3d\xf7"
+ "\x5c\xd3\xf9\x7d\xe9\xfc\x5f\x4d\x08\x5d\xe7\xff\x3f\x97\xb7\xce"
+ "\x7f\x67\x59\x60\x3a\x7f\xcf\xba\xa1\xd7\xf9\x7b\xf2\xbc\x75\xfe"
+ "\x3b\x73\x58\x9d\x7e\xfd\xf7\xe0\x75\xfe\x3b\xf7\xfb\xd7\xf9\xef"
+ "\x4c\xf5\xd6\xf9\xef\x68\x98\x6e\x7f\xc7\xc0\x74\xfe\x3b\x63\x59"
+ "\xfa\xaf\xcd\xf2\x74\x8f\xce\x67\xe9\x4c\xe7\xbf\x93\x1a\x9c\xce"
+ "\x8f\xbc\xcc\x3a\x5f\xd3\x8f\xce\xd7\x5c\x65\x3a\xff\x37\xcd\xa1"
+ "\xeb\xa4\xbd\xb3\x3d\x3a\x69\xef\x6c\xff\x3a\xa9\xf2\xd0\x35\x9d"
+ "\xd4\x97\x4e\x7a\x27\x2f\x74\x9d\x54\x59\xe4\xad\x93\xf6\xba\x03"
+ "\xd3\x49\x7b\xd5\x43\xaf\x93\xf6\x46\x7b\xeb\xa4\xbd\x6d\xac\x4e"
+ "\xbf\x9d\x1b\xbc\x4e\xda\x5b\xeb\x5f\x27\xed\x6d\xf2\xd6\x49\x7b"
+ "\xc5\x31\xa8\xbd\x2e\xa6\x93\xf6\x56\xb3\xf4\xdf\xce\x91\xa7\x7b"
+ "\x74\x12\x4b\x67\x3a\xe9\x77\xe1\x03\xe9\x24\xc4\x7e\x83\xd6\x07"
+ "\xfb\xcb\x25\xec\xef\x4b\xac\x2b\x93\xb0\xbf\x2f\x51\x98\xef\x56"
+ "\x56\x5c\xfa\x7a\x1a\x51\x16\xe0\x59\x22\x20\xef\xc6\x17\x10\xfb"
+ "\xbf\xff\x04\xe7\x2d\xa8\x5a\x40\x87\xb5\x8a\x3a\x2d\x1d\x74\x5a"
+ "\x2b\x3c\xe3\x1e\x53\x63\x8a\x4b\x51\x17\xe1\xf8\x3f\x3e\x33\xdd"
+ "\xe6\x18\x86\xeb\x25\x83\x5a\xcb\xd4\x2a\xae\x65\x4a\xea\xbd\x96"
+ "\xa9\x4c\xb6\x66\x06\x65\x43\xbd\x49\x11\x81\xe3\xba\xa0\xdf\x44"
+ "\x3d\x66\x19\xe6\x52\x89\x7a\xec\x3c\xe8\xb1\xf3\x1e\x99\x40\x3d"
+ "\x76\x16\xf4\x58\xc7\x5a\xfd\x2d\xa8\xcb\x7a\xaf\x63\x62\xe3\xb8"
+ "\x82\x1e\x33\xf9\xe8\xb1\x97\x7d\xf4\xd8\x52\xd0\x63\x89\xa0\xc7"
+ "\xd4\x1e\x79\xf8\x61\x0b\xe1\x66\x2e\x04\x99\x00\x3d\xf6\xe6\x79"
+ "\xd4\x63\x87\x42\xd4\x63\xbf\xdf\xed\x2d\x0f\xef\xaa\x03\x93\x87"
+ "\x7d\x63\xfc\xc9\x43\xb7\x29\x54\x79\xd8\x37\xc1\x5b\x1e\xf6\x39"
+ "\x59\x9d\x7e\xf7\x6c\xf0\xf2\xb0\xef\xd3\x1e\x79\x58\xee\x2b\x0f"
+ "\xfb\xbe\xf0\x96\x87\x7d\xfb\x19\xee\xdf\x55\x31\x79\xd8\x67\x61"
+ "\xe9\xbf\x9b\x2d\x4f\xf7\xc8\x03\x4b\x67\xf2\xf0\xae\xf6\xda\xf8"
+ "\xec\x95\x6a\xa3\xdf\xeb\xef\x0c\xed\x6b\xe3\xb3\x42\x5c\xf6\xee"
+ "\x84\xd0\xe3\xb2\xf7\x2f\xd3\xf8\xf7\x77\xa9\x2f\xf9\xbd\x83\xa1"
+ "\xd3\xf7\x0f\x97\x69\xfc\xfb\xbb\xd4\xaf\x50\x35\x88\xf1\xef\x3f"
+ "\xf6\x3b\xfe\xdd\xbf\x1f\xf3\xc1\x84\xfa\x1e\x1f\xfe\x83\x09\xd2"
+ "\x9c\xcb\xde\x3e\xfc\xfe\x5f\x79\xaf\x5f\xfa\xd3\x33\xbe\xf3\x21"
+ "\x07\xf2\xed\x5d\xff\xa7\x7c\xfb\x3f\x6c\x09\xdd\xb7\xdf\x9f\xec"
+ "\xed\xcb\x7c\xf0\x69\x60\xbe\xcc\xfe\x6f\xfc\xf9\x32\xae\x90\x7d"
+ "\xfb\xfd\x4e\x6f\x5f\xe6\x83\x83\x22\xff\x6f\x0c\xde\x97\xf9\xe0"
+ "\x1d\xff\xbe\xcc\x07\xef\x7a\xfb\x32\x1f\x64\x33\x9f\xe5\x83\x66"
+ "\xe6\xcb\x7c\xf0\x16\x4b\xff\x93\x56\x9e\xee\xf1\x65\x58\x3a\xf3"
+ "\x65\x3e\x68\xbd\x36\x6e\x7b\xa5\xfa\x32\xff\xe1\xf7\xfc\xab\x6b"
+ "\xb6\x56\xb2\x05\x1f\x38\x43\xb7\x05\xd5\x95\xd7\x6c\xed\x40\xf4"
+ "\xfd\x8f\xa2\xd0\xe9\xfb\x97\xf0\xd0\x6d\xed\x81\x52\x8f\xad\x3d"
+ "\x50\xea\xdf\xd6\x1e\x50\x7b\xdb\xda\xbf\xfc\xf9\x9a\xad\xed\xcf"
+ "\xd6\x56\x3b\x42\xb7\xb5\xff\xd9\xec\x6d\x6b\x3f\x9c\x16\x98\xad"
+ "\x3d\x30\x77\xe8\x6d\xed\x81\x24\x6f\x5b\xfb\x61\x8c\xc8\xff\xd7"
+ "\x82\xb7\xb5\x1f\x5e\xef\xdf\xd6\x7e\x78\xa3\xb7\xad\x3d\x20\xae"
+ "\xa1\xff\xf0\x49\x66\x6b\x3f\x14\xcf\x0c\xfd\xcb\x16\x79\xba\xc7"
+ "\xd6\xb2\x74\x66\x6b\x3f\x1c\x68\xfd\xcf\xb5\xf1\xdc\xcb\x66\x6b"
+ "\xff\xba\xff\x9a\x2d\x18\xc8\x16\x7c\x98\x14\xba\x2d\x30\x47\x85"
+ "\x6e\x0b\xfe\xb1\xc7\x63\x0b\xfe\xb1\xc7\xbf\x2d\xf8\xc7\x8d\xde"
+ "\xb6\xc0\x7c\xe8\x9a\x2d\xe8\xcf\x16\xfc\xd5\x15\xba\x2d\xf8\x7b"
+ "\xab\xb7\x2d\xf8\xe8\xd9\xc0\x6c\xc1\x3f\x16\x0e\xbd\x2d\xf8\x87"
+ "\xd1\xdb\x16\x7c\x34\x45\xe4\xff\x1b\xc1\xdb\x82\x8f\xc6\xf8\xb7"
+ "\x05\x1f\xdd\xe1\x6d\x0b\xfe\xe1\x64\x3a\xff\xa3\xd9\xcc\x16\x7c"
+ "\xa4\x62\xe9\xe6\x22\x79\xba\xc7\x16\xb0\x74\x66\x0b\x3e\x9a\x77"
+ "\x6d\x9c\xf7\x4a\xb5\x05\x07\xcd\xa1\xeb\xaa\x9a\xd9\x1e\x5d\x55"
+ "\x33\xdb\xbf\xae\xfa\xaf\x43\xde\xba\xea\xd0\xea\x6b\xba\xaa\x3f"
+ "\x5d\xf5\x91\x31\x74\x5d\xf5\x5f\x3e\xe3\xbf\x35\x01\x8e\xff\xd6"
+ "\xf8\x1d\xff\x0d\x5d\x57\xd5\xf8\x8c\xff\xd6\x88\xe3\xbf\x87\xa6"
+ "\x06\xaf\xab\x6a\x6a\xfd\xeb\xaa\x1a\x9f\xf1\xdf\x1a\x71\xfc\xb7"
+ "\x46\x1c\xff\xad\x11\xc7\x7f\x0f\x4d\x91\xa7\x7b\x74\x15\x4b\x67"
+ "\xba\xca\x32\xc8\xf1\xdf\xc3\xe9\x9e\xf1\xdf\xc3\xc2\x9a\x01\xbe"
+ "\xb4\xc9\xd2\x7b\xfc\xb7\xf6\x24\x8e\xff\x7a\x64\xc2\xb2\x55\x18"
+ "\x0b\x46\xb9\xe8\x60\xfb\x8a\xf4\x39\x2e\x7c\x63\x93\xe5\xda\xb8"
+ "\xf0\x50\x8c\x0b\xd7\xfa\xec\xe7\x53\x77\x47\x60\x72\x72\xf8\xfe"
+ "\xa1\x1f\x17\x3e\xfc\xa4\xb7\x9c\xd4\x69\x44\x4c\x84\x30\x2e\x7c"
+ "\xf8\x5b\xff\x72\x72\xf8\x82\xb7\x9c\x1c\x16\xe7\xe5\xd6\x8d\x65"
+ "\x72\x72\xd8\xce\xd2\x2d\xb3\xe5\xe9\x1e\x39\xb1\xc8\xc6\x85\xeb"
+ "\x62\x02\xb1\xe9\x2e\x55\x93\x12\x6d\xf4\x84\xe6\x47\xdd\x3d\x78"
+ "\x4e\x15\xf1\xdc\x97\x4d\x5f\xc4\x74\x3f\xe2\xb8\x7b\x4f\xf1\x9e"
+ "\x01\x6d\x7a\xab\x68\xd3\x93\x7a\xdb\x74\xc9\x9e\x23\x9e\xdf\x0e"
+ "\x68\x4c\xd8\x07\xd7\x41\xd9\xf3\x25\x6d\x83\xc1\x35\x62\xda\xdb"
+ "\x9e\x87\x8a\xeb\xfa\xcb\xb4\xfe\xe5\xbb\x34\x26\x5c\xf7\x64\xe8"
+ "\xb1\x5d\xc3\x65\x5a\xff\xf2\x5d\xea\xa7\xae\x1f\xc4\xfa\x17\x6b"
+ "\xbf\xeb\x5f\xae\xf5\x4d\x20\x7d\x1b\x27\x87\x4e\x5f\x5b\x55\xe8"
+ "\xfe\xfe\x3f\x13\x3d\xfe\xfe\x3f\x13\x25\xdf\x46\xda\x2f\x0d\x74"
+ "\xa6\xd2\x94\x02\xd7\x79\x42\x5e\x4f\x11\xf6\xfa\x0e\xb7\xb6\x7e"
+ "\x82\xe7\x13\x81\xbf\xf3\xf1\x27\xf1\xe9\x72\x7f\xa7\x69\x8d\xe4"
+ "\xeb\xc4\xa3\x1f\x04\x7e\x0d\xfa\x34\x92\x8f\x8f\x7b\xe3\xf4\x3b"
+ "\x1f\xf4\x8e\xe2\x3d\x18\x13\x74\xab\x9b\x94\x57\x7f\x3c\x60\x2d"
+ "\x0d\x3d\x1e\xf8\xd8\x67\xfe\xdb\x91\x00\xe7\xbf\xfd\xd3\xef\xfc"
+ "\xb7\xd0\xe3\x81\x7f\xfa\xcc\x7f\xfb\xa7\x38\xff\xad\xe9\xae\xe0"
+ "\xfd\x9c\x7f\xf6\x33\xff\xed\x9f\x3e\xf3\xdf\xfe\x29\xce\x7f\x3b"
+ "\x22\xce\x7f\xfb\xa7\x38\xff\xad\x69\x82\x3c\xdd\xe3\xe7\xb0\x74"
+ "\xe6\xe7\x1c\x09\x68\xfe\x1b\xf8\x39\xe1\x83\xf0\x73\x06\xee\xbb"
+ "\xb8\x62\xfc\x9c\xa5\x57\x88\x9f\xf3\x89\xdf\xf3\x8f\x64\x76\x42"
+ "\xe9\x63\x27\xf6\xfc\xdf\xb2\x13\x47\x06\x31\xf7\xed\xff\xeb\x77"
+ "\xfe\xbf\x40\xdf\x02\x19\x7d\x51\x47\x8b\xb4\x75\x8f\x2d\xde\x13"
+ "\x12\x7d\x41\x37\x97\x67\x7e\x57\x68\xfb\x89\x39\x74\xda\x36\x4f"
+ "\xba\xe6\xe3\x0c\x44\xdf\xff\xd6\x85\x4e\xdf\x4f\xdf\x0a\xdd\xc7"
+ "\x69\x49\xaa\xeb\xf1\x71\x5a\x92\x7c\x7d\x1c\xf4\x69\x9e\x71\x32"
+ "\x5f\xe7\x75\xf0\x51\xf2\x57\x82\xbf\x93\x46\x88\xb5\xf5\x43\x52"
+ "\x00\x3e\x4f\xfe\x29\xf0\x7b\x92\xc1\xef\x71\xbd\x23\xfa\x3d\xff"
+ "\xf3\xa9\xb7\xdf\xf3\xd9\x8a\x3e\xfd\x1e\xb5\xc7\xef\x71\x81\x4f"
+ "\xd3\xfd\x4e\xf1\x9e\xa2\x53\x32\x1f\xe8\x95\xde\x3e\x50\x97\x09"
+ "\x6c\xce\x1d\xc5\x95\xdd\xe0\x07\xf5\xe7\x03\x09\xbc\xf7\xf1\x83"
+ "\xbe\x7b\x3e\x50\x73\x46\xe8\x3e\xd0\xff\xec\xf1\xf6\x81\x8e\x5e"
+ "\x1f\x98\x0f\xd4\x72\x9b\xdf\xbe\x9e\x90\x7d\xa0\x96\x18\x6f\x1f"
+ "\xa8\xc5\x25\xe2\xe2\xfa\xe0\x7d\xa0\x96\xa3\xfe\x7d\xa0\x96\xaf"
+ "\xbc\x7d\xa0\x96\x6a\xe6\xeb\x1c\xd5\x30\x1f\xa8\xa5\x9e\xa5\x7f"
+ "\xa6\x91\xa7\x7b\x7c\x20\x96\xce\x7c\xa0\xa3\xd1\x01\x8e\xdf\x28"
+ "\x5d\x60\x63\x2f\xff\xbc\xb9\xfe\xc6\x6f\x86\x6a\xde\xdc\x92\x2b"
+ "\x64\xfc\xe6\x7f\xb3\xaf\xd9\xe9\xfe\xec\xc8\xd1\x98\xd0\xed\xc8"
+ "\xe7\x97\x69\xfe\xff\x77\xc9\x4e\xff\xaf\x25\x74\xfa\x7e\xd1\xef"
+ "\xfc\xff\xfe\xed\xf4\x97\xed\x9e\xbe\x88\x2f\xdb\x83\xeb\x8b\xf8"
+ "\x72\xa1\xb7\x4d\x3e\xa6\xb8\xd6\x17\x11\xa8\x1d\xb6\x8f\x0d\xdd"
+ "\x0e\x7f\x39\xc1\xdb\x0e\xb7\xee\x08\xcc\x0e\x7f\xb9\x77\xe8\xfb"
+ "\x22\xbe\xac\xf6\xb6\xc3\xad\x5b\x58\x9d\xbe\xf8\x73\xf0\x76\xb8"
+ "\x75\x89\x7f\x3b\xdc\xba\xc2\xdb\x0e\xb7\xc6\x32\x7b\xdb\x5a\xca"
+ "\xec\x70\xeb\x1c\x96\xfe\x45\xb5\x3c\xdd\x63\x87\x59\x3a\xb3\xc3"
+ "\xad\x7b\x82\x1b\x73\xb9\xf5\x0a\x1d\x73\xd1\x5d\x65\x63\x2e\xc7"
+ "\x95\xd7\xec\xc4\x40\x76\xa2\xb5\x3a\x74\x3b\xf1\x75\x52\xe8\x76"
+ "\xe2\x44\x94\xc7\x4e\x9c\x88\x0a\xce\x4e\x7c\xb3\xd5\xdb\x4e\xb4"
+ "\x8d\xbb\x66\x27\x02\xb5\x13\xc7\x67\x86\x6e\x27\xbe\x99\xe3\x6d"
+ "\x27\x4e\xfc\x3d\x30\x3b\xf1\x4d\xd3\xd0\xdb\x89\x6f\xec\xde\x76"
+ "\xe2\xc4\x3e\x56\xa7\xaf\xbf\x08\xde\x4e\x9c\x30\xf9\xb7\x13\x27"
+ "\x7e\xe9\x6d\x27\x4e\x18\x98\x3d\x38\x61\x66\x76\xe2\x44\x06\x4b"
+ "\xff\xda\x2e\x4f\xf7\xd8\x09\x96\xce\xec\xc4\x89\xfa\x6b\xf3\xed"
+ "\xae\xd4\xf9\x76\xed\x31\xa1\xeb\xb2\x53\x66\x8f\x2e\x3b\x65\xf6"
+ "\x3f\xdf\xee\xd4\xfd\xde\xf3\xed\xda\xbf\xb8\x36\xdf\xae\x3f\x5d"
+ "\x75\xc2\x1e\xba\xae\x3a\x45\xbc\x75\xd5\xe9\x15\x81\xe9\xaa\x53"
+ "\x1b\x87\x5e\x57\x9d\x2a\xf0\xd6\x55\xa7\x13\x44\xfe\xbf\x1b\xbc"
+ "\xae\x3a\xfd\xa0\x7f\x5d\x75\xfa\x31\x6f\x5d\x75\x3a\x8a\xe9\xa4"
+ "\xd3\xc9\x4c\x57\x9d\xd6\xb3\xf4\xf6\x7d\xf2\x74\x8f\xae\x62\xe9"
+ "\x4c\x57\x9d\x0e\x68\xff\x7f\xcf\xf8\x5a\x48\x3e\xed\x25\x18\x5f"
+ "\x1b\x2a\x9f\xf6\x4a\x19\x5f\x73\x5c\x1b\xff\xe9\xd7\x9f\x3d\x3d"
+ "\x88\x7d\xff\xcf\xf4\x3b\xfe\xd3\xbf\x0d\xe8\x70\x79\x6c\x40\x87"
+ "\xcb\xdf\xf8\x44\x3e\x60\xa8\x00\xfc\xd1\xad\xa7\x88\xf2\x75\x1c"
+ "\x9f\x38\xd2\x40\x4c\x38\x3e\xb1\x52\x1a\x9f\x28\x17\x7d\xdc\x8e"
+ "\xd5\xde\x3e\xee\x59\x75\x5f\x3e\x2e\xfa\xb6\x6e\xf0\x5b\x5d\xbe"
+ "\xe3\x12\x2f\xf4\x6d\x3b\xba\xd4\x4d\xe1\x17\xde\x29\xae\x0c\xc6"
+ "\x76\xbc\xbd\x9e\xd9\x8e\x9d\xdf\x29\xdb\xf1\xad\x2e\x74\xdb\xd1"
+ "\xe1\x73\x9e\xef\xb9\xbd\x81\xd9\x8e\x8e\x3f\x0f\xbd\xed\xe8\xb0"
+ "\x78\xdb\x8e\x73\x6f\xb1\x3a\x9d\xf9\x43\xf0\xb6\xe3\xdc\x1a\xff"
+ "\xb6\xe3\xdc\x46\x6f\xdb\x71\x4e\x9c\x6b\x7a\xae\x92\xd9\x8e\x73"
+ "\x49\x2c\xfd\x4c\x95\x3c\xdd\x63\x3b\x58\x3a\xb3\x1d\xe7\xf6\x07"
+ "\xd7\x1f\x12\x79\x85\xf6\x87\x68\xae\xb2\xfe\x90\xce\x41\xac\x7f"
+ "\xbb\x70\xa0\xbe\x67\xfe\xfc\x85\x03\xbd\xe2\xf5\x34\xf0\x75\xcf"
+ "\xb0\x31\xd7\x9e\x78\xdd\x7e\x54\xd4\x65\x17\xee\xf1\xd6\x65\x9d"
+ "\x9f\xfa\xd3\x65\xfd\x8d\xab\x62\x7c\xee\x06\x3d\xe7\x2a\x0f\x71"
+ "\x5c\x35\xed\xbb\xa4\xbf\xce\x59\x42\xd7\x5f\x4e\x9f\xfd\x4f\xbb"
+ "\x02\xdc\xff\xf4\x82\xdf\xfd\x4f\x5d\x21\xcf\xa1\xbf\xe0\xb3\xff"
+ "\x69\x97\xb8\xff\x69\x67\x08\xeb\xe2\xba\xee\xf7\xaf\xbf\xba\x7c"
+ "\xf6\x3f\xed\x12\xc7\x4f\xbb\xc4\xfd\x4f\xbb\xc4\xfd\x4f\x3b\x8b"
+ "\xe4\xe9\x1e\xfd\xd5\x29\x5b\x17\xd7\xd5\xef\xfe\xa7\xb4\x60\x7b"
+ "\x78\x11\xc7\x57\xc1\x55\x0d\x75\xbc\x11\x30\x60\x86\xff\x2d\xc0"
+ "\xc7\xd1\xf0\xbf\xcd\x9f\x8c\x39\xd4\xdb\xc3\xf9\x1c\xa8\x33\x47"
+ "\x14\x56\xc7\x69\xb3\xf9\x26\x17\xd6\xb3\x83\xf1\x6a\x7b\x78\xa4"
+ "\x6b\x44\x1c\x4f\x0d\x04\xf8\x12\x2e\x9c\xaf\x06\xf9\x23\x00\x33"
+ "\xba\x34\x12\x71\x4a\xd1\x1d\x25\xe5\x83\xfa\x46\x1c\x53\x74\x35"
+ "\x61\x19\x9d\xb9\xdd\x3a\x68\x4b\xb6\xdf\xba\x42\x59\xf1\x7b\x6f"
+ "\x21\x1b\x5d\xf4\x6b\xf3\xca\x33\xa4\x55\xd1\xbd\x2c\xb2\x7d\x44"
+ "\x1c\xcd\x4a\x20\xe8\x63\x55\xdd\xe4\x50\x62\x99\x78\xf6\x22\xbc"
+ "\x9b\x89\xef\xdc\x50\xc7\xcc\x15\x84\x2b\x3c\x33\x22\x1c\x74\xc1"
+ "\xb0\xac\x0e\xda\xb6\xca\x05\x75\x4e\x77\x91\xbf\xdd\xd2\xac\x7c"
+ "\x7f\x27\xa4\xb9\x89\x16\xcf\xb7\xc3\x32\xc0\xc7\x84\xfa\x74\xaf"
+ "\xa8\x80\xfc\x7d\xd5\xe1\xb5\xf7\xc8\x84\x61\xe3\xa8\x3d\x38\xdc"
+ "\x74\x9b\xfd\xd1\x31\x72\xd3\x2d\xc4\x3c\x1e\x68\xa7\x23\x5c\x5f"
+ "\xef\x83\xfb\x8e\x4b\xdf\x8f\x4e\x0c\xc7\x73\x30\xb3\x76\x10\x6e"
+ "\x1b\x3f\x22\xfc\xa3\x0c\xe1\xac\x4a\x47\x67\xae\xeb\x2d\xbb\xe2"
+ "\x65\x3b\xd2\x1c\xcf\x4c\xc3\xb3\x7f\x01\x37\x04\xd2\xf7\xfd\x3d"
+ "\x9d\x10\x5f\x5e\xa4\x24\xad\x58\xa8\x4b\x5d\xb6\x62\xc9\xaa\x35"
+ "\xa9\xba\x3b\x92\x46\x91\x39\xab\x56\xe9\x56\x2c\x5c\xb9\x4e\x27"
+ "\x7f\xf3\x90\x2e\x69\xd9\xab\x0b\x17\x25\x2f\xb9\x6b\xc5\x62\xe3"
+ "\x28\x0c\x5e\x65\xf5\x88\xc2\xba\xf0\xb9\xae\xea\x8a\x62\x42\xde"
+ "\x1c\x4d\x94\x58\xaf\xce\x5c\x77\xb4\x74\x3e\x1e\x9e\x0f\xc7\x41"
+ "\x9e\x2c\xd0\x81\xdb\x32\x47\x60\x5e\xfd\x2e\xa8\x57\x05\xd4\x1b"
+ "\xea\x08\x75\x76\xc7\x49\x75\x96\x30\x91\x85\x98\xc8\x3c\x03\x18"
+ "\x74\x2f\x8b\x74\x8e\xf8\x29\xa5\x09\xd8\x3e\x3c\x57\x54\x01\x69"
+ "\x7f\x46\xbb\x44\x4d\xdb\xc3\xe1\xb7\x5b\x24\x8c\xe1\x6f\x69\x61"
+ "\x89\xad\x13\xe5\x84\x1a\x1e\x61\x32\xc5\xcf\x9b\xab\x57\x10\x76"
+ "\x3e\x9f\xbb\xca\x73\x3e\x1f\x3f\x0f\x69\x0b\xf5\x68\x87\x74\x8b"
+ "\x5d\xf1\x60\x12\xa6\xe3\x39\x91\x78\xce\x1e\xd6\x19\xda\x05\x76"
+ "\x91\x9a\x69\x8e\x88\xfd\xbc\xd6\x3c\xbe\x60\x98\xd1\xaa\x3c\x4f"
+ "\xe2\x5d\xb4\x9b\x6e\x6d\xcd\x6b\xec\xe8\x20\x91\x9b\x8c\x8b\xe9"
+ "\x70\x57\x6d\xa4\x6b\xd9\x12\x3c\x1f\x90\x37\x0d\x33\xd2\xad\xfc"
+ "\xee\xb9\xe3\x88\xa6\x33\x97\x1f\x2b\x3b\x27\x50\x19\x1c\xff\x79"
+ "\x81\xff\xc8\x47\x3c\xff\x8f\xf1\x91\x4f\xfd\x7b\x6a\x6f\x3e\xf6"
+ "\xe0\x6f\x2f\x4f\x0e\x01\x16\xa8\xaa\x66\x76\xbc\x9b\xd1\x11\x65"
+ "\xf7\x6c\x96\x81\x4c\x14\x68\x47\x27\xf0\x85\x35\x31\x7c\x41\x8d"
+ "\x81\x16\xd4\xcc\xa1\xaa\x92\xb6\xc2\x34\xa2\x5b\xe0\xd6\x10\xd3"
+ "\x79\x12\xe3\x30\xd5\xcc\x56\x2b\xb2\x15\xe0\x5b\x70\x60\x37\x62"
+ "\x40\x67\xc4\x30\x79\x2f\x69\x43\x3a\xd6\xb4\x13\x32\xeb\x55\x42"
+ "\xbe\x9e\x42\xc2\x2a\xe0\x77\x41\xb6\x87\xed\xff\x94\xcb\x57\xed"
+ "\x82\xdf\xe2\x39\x8f\xc1\xfd\x9e\x4e\xf6\x2b\x77\x9e\x76\xdb\xfa"
+ "\x6c\x37\x47\xc6\x42\xbb\xab\xa0\xdd\x6d\xd0\xee\x23\x7d\xb4\xdb"
+ "\xc6\xda\x3d\xec\xcc\xd0\xb7\x9b\x3a\x58\xbb\x69\x65\x48\xed\xe6"
+ "\x88\xdf\xfe\x3f\x4f\xbb\x2d\x7d\xf3\x9b\x53\x44\xf3\x85\x16\xe0"
+ "\xb7\x05\xf8\x6d\xe9\x83\xdf\x16\x91\xdf\xd7\x1d\x1b\xf2\x76\x73"
+ "\xa4\x4d\x68\x77\x3e\xd9\x1d\x5a\xbb\x15\x7e\xf5\x9f\xac\xdd\x7e"
+ "\xf8\xcd\x45\x41\xbb\x81\xdf\x16\xe0\xb7\xa5\x0f\x7e\x5b\x44\x7e"
+ "\x5f\xff\xf1\xd0\xb7\x5b\xc1\xfa\xff\xf3\x15\xa5\xa1\xb5\x9b\xd3"
+ "\x0d\xdc\xee\x5a\x3f\xfc\x0e\x53\xf1\x85\xb5\xc0\xef\x5a\xe0\x77"
+ "\x6d\x1f\xfc\xae\x15\xf9\xfd\x40\xfe\xd0\xb7\x9b\x63\xfb\xdf\xe4"
+ "\x73\x45\xa1\xb5\x3b\x4c\x1b\x40\xbb\xfd\xf0\x5b\xa9\x84\x76\x03"
+ "\xbf\x6b\x81\xdf\xb5\x7d\xf0\xbb\x56\xe4\xf7\x8b\x8f\x0f\x7d\xbb"
+ "\xc3\x6c\xac\xdd\x61\x79\xa1\xb5\x5b\xa9\x09\x40\xaf\x25\x80\xee"
+ "\xea\xc5\x73\x6b\xfa\x64\x72\xf7\x79\x6c\xff\xb0\x54\xaa\xae\x49"
+ "\xb8\x6e\x53\xb6\xc2\xa5\xaa\x99\x77\x5d\x0b\xe1\x20\xf6\x33\x44"
+ "\xda\xc9\x48\x68\xab\x81\x16\xd6\x39\xf0\xce\x43\x39\x2e\xd0\xfd"
+ "\x6e\x55\xcd\x9c\xae\x82\x92\xb6\xd7\x97\x12\x5d\x96\x83\x68\x1a"
+ "\x33\xed\x24\xd3\x48\x1d\x8d\xe4\x0b\xa2\xb6\x13\x0e\xfb\xb1\xea"
+ "\xda\xab\xc9\xca\x14\x4a\xa1\xec\x97\x30\x5e\x2c\x3c\x4e\x62\xc0"
+ "\x27\xce\xa6\x60\x3f\x8a\x78\xa2\x83\xf2\x63\x90\x96\x50\xf6\x99"
+ "\xc8\x39\x44\xf1\xd7\x45\x4e\x82\xf4\x44\xda\x42\x6c\x19\x23\xd0"
+ "\x15\x3c\xc8\xa7\x5f\x64\x74\x7d\x7b\x69\xb0\x74\x1d\xa6\x67\x7e"
+ "\x65\x8d\xd1\x6a\xef\x22\xe0\x5b\x6a\x70\x5d\x33\xd0\xab\xb5\xd1"
+ "\x78\x86\xd0\x7c\x65\x1e\x35\xd5\x24\xf2\x60\xb3\x82\x2c\xd7\xef"
+ "\xfc\x37\x19\xbd\x9b\x81\xde\xbd\xb0\xe6\xa1\xf7\xf0\x56\xa0\x77"
+ "\xb3\x48\xef\x96\xeb\x5a\x86\x9d\xf1\x43\xef\x66\xa0\x77\x1b\xd0"
+ "\xfb\x48\xe0\xf4\x1e\xde\xe0\x43\xef\xaa\x4b\x43\xef\xe1\xa5\x22"
+ "\xbd\x1d\xde\xf4\x1e\x3e\x87\xd1\x7b\x98\x13\xe8\x6d\x07\x7a\xdb"
+ "\x82\x2c\xd7\xef\xfa\x47\x99\x1e\x07\x7c\xf7\xb6\x61\x1e\x7a\x87"
+ "\xcf\xa1\x6a\x8b\x88\x6f\x0b\xe0\xfb\xba\x63\x7d\xd3\xdb\x02\xf8"
+ "\xb6\x00\xbe\x2d\x41\xe0\x3b\x7c\xaa\x37\xbd\x2d\x97\x08\xdf\xe1"
+ "\xe2\xf9\x4f\x16\x1f\x7c\x8f\x38\xc8\xe8\x3d\xc2\x40\x4d\x16\xc0"
+ "\xb7\x25\x48\x7c\x87\x27\x06\x40\x6f\xc0\x77\x6f\xdb\xe9\xa1\xf7"
+ "\xc8\x83\x40\x6f\x11\xdf\x16\xc0\xf7\xf5\x1f\xfb\xa1\x37\xe0\xdb"
+ "\x02\xf8\xb6\x04\x81\xef\x91\xef\xfa\xd0\xfb\x12\xe1\x7b\x64\xba"
+ "\x48\x6f\x1f\x7c\x8f\x9c\xc4\xe8\x1d\xde\x0c\xf4\x06\x7c\x5b\x82"
+ "\xc4\xf7\x48\xbf\x71\xb5\xcc\x6e\x01\xbe\x7b\xdb\x6c\x0f\xbd\xaf"
+ "\x9b\x44\xd5\xb5\x22\xbe\x6b\x01\xdf\x0f\xe4\xf7\x4d\xef\x5a\xc0"
+ "\x77\x2d\xe0\xbb\x36\x08\x7c\x5f\x37\xc6\x9b\xde\xb5\x97\x08\xdf"
+ "\xa3\x98\xff\x57\x50\xeb\x83\xef\x51\x7b\x18\xbd\x47\xc5\x51\x53"
+ "\x2d\xe0\xbb\x36\x48\x7c\x5f\x17\x1b\x00\xbd\x01\xdf\xbd\x7d\x05"
+ "\x0f\xbd\x55\x7b\x80\xde\x22\xbe\x6b\x01\xdf\x2f\x3e\xee\x87\xde"
+ "\x80\xef\x5a\xc0\x77\x6d\x10\xf8\x56\x99\x7c\xe8\x7d\x89\xf0\xad"
+ "\x4a\x10\xe9\xed\x83\x6f\x55\x14\xa3\xf7\x75\xd5\x40\x6f\xc0\x77"
+ "\x6d\x90\xf8\x56\xf9\x5d\xff\xdb\x9f\x7f\xf2\x6a\x39\x09\xf7\xa6"
+ "\x79\x84\xf6\xe2\xf9\x28\x11\x8a\xcb\xe3\xa3\xa8\xeb\xfb\xf6\x51"
+ "\xd4\x79\x8c\xe6\xea\x09\xa1\xf9\x28\x11\x63\x43\xf1\x51\x7a\xd3"
+ "\x3c\xb2\xe0\xe2\xf9\x29\x91\x6b\x2e\x8f\x9f\x12\x19\xdb\xb7\x9f"
+ "\x12\xe1\x62\x34\x8f\xd8\x1d\x9a\x9f\x12\x59\x1a\x8a\x9f\xd2\x9b"
+ "\xe6\xd7\x93\x8b\xe7\xab\x68\xbe\xb9\x3c\xbe\x8a\x66\x7f\xdf\xbe"
+ "\x8a\xc6\xc8\x68\xae\x89\x0a\xcd\x57\xb9\x5e\x15\x8a\xaf\xd2\x9b"
+ "\xe6\xa3\x53\x2f\x9e\xbf\x32\xfa\xa5\xcb\xe3\xaf\x8c\xd6\xf7\xed"
+ "\xaf\x5c\x2f\xc6\x3f\xd7\xe7\x85\xe6\xaf\x8c\x0e\x20\xfe\xe9\xed"
+ "\xaf\xf4\xa6\xf9\xf7\xda\x2e\x9e\xcf\xf2\xbd\xa6\xcb\xe3\xb3\x7c"
+ "\xaf\xac\x6f\x9f\xe5\x7b\x09\x8c\xe6\xa3\x5d\xa1\xf9\x2c\xdf\xeb"
+ "\x08\xc5\x67\xe9\x4d\xf3\xef\xcf\xbb\x78\x7e\xcb\xf7\xa7\x5d\x1e"
+ "\xbf\xe5\xfb\x9a\xbe\xfd\x96\xa8\x7a\x46\xf3\x28\x63\x68\x7e\xcb"
+ "\xf7\x0d\xa1\xf8\x2d\x48\x6b\xa4\x39\xfa\x2a\x8c\xe6\xda\x09\x34"
+ "\xa2\x26\xa6\x1b\xfc\x11\x35\xd0\x5d\xdd\x4e\xb8\x72\xa4\x79\x33"
+ "\xa3\xb9\x3b\xa2\xce\x01\xf4\x31\x20\xcd\x84\x76\xfc\x4b\x1b\xe1"
+ "\x2e\xa8\x99\x47\x39\x02\x6d\x09\x27\xc7\xb9\x1b\x1e\x74\xe5\x90"
+ "\x08\x5d\xe6\x26\xf8\x5f\x2b\xec\x9f\xa9\xcb\xcc\x3d\x0a\x6d\x0c"
+ "\xc3\x31\x0a\x97\xa9\xa4\xc8\xad\xae\xd3\x1c\xe7\x7e\xb0\x8e\x8e"
+ "\x29\x2e\xea\x06\x5f\x82\x2e\xd7\x46\x59\xdb\xab\x88\xd5\x75\x98"
+ "\x34\x36\xff\x85\xf0\x11\x75\x67\x26\xba\x88\x9e\xfe\x4b\x1f\x55"
+ "\x9f\x6a\x27\xee\xc5\x5a\x95\x35\xdd\x02\xb8\xf8\x23\x89\x6f\xa3"
+ "\xe7\xe9\x97\x7a\x55\xb7\xda\x36\x1b\xca\xb1\xb9\x4d\x4d\x5a\x97"
+ "\xda\x16\xfb\x6e\x1a\x78\x6e\x4e\xa2\x4f\x6e\xa5\xb4\x70\x11\x51"
+ "\x16\x1e\x23\xe1\xdb\x16\x11\xd5\xb6\x63\x44\x53\xdf\xda\x4c\x1a"
+ "\x4e\x58\x48\xc3\x99\x4f\x49\xc3\x79\xb8\xba\xe0\xe2\xe1\xca\xfe"
+ "\x94\xd4\xb7\x13\xf2\xcc\x49\x42\xb2\x5a\xa9\xe3\xce\x16\x12\x55"
+ "\xef\x6a\x26\x38\x8f\xf7\x14\xf7\x03\xb5\x2a\x91\x44\xd1\x2f\xb5"
+ "\x84\x2e\xd6\x72\xf0\x4e\x89\xe9\x56\x97\x83\xd4\xb7\x3a\xe1\xfd"
+ "\x0d\xed\xf0\x5e\x99\xd5\x0a\xe5\xf3\x16\xdc\x2f\xce\x51\x9f\x5d"
+ "\x0b\xed\x9b\x9e\x0d\x74\x36\x48\x3e\x59\x61\x17\x89\xd9\x06\x6c"
+ "\x46\xcc\xc4\x53\x86\x99\x5d\x5d\xc1\x62\xe6\x07\x6c\xff\xb3\xe5"
+ "\xda\xd1\x40\xef\x9b\xf8\xe5\x09\x9a\x59\x9f\x7e\x4e\x71\x9e\x16"
+ "\x8e\xcf\x34\x76\x1c\x26\xd6\x2d\x3c\x89\x5f\x47\xc8\x4c\x37\x21"
+ "\x48\x13\x1c\x4b\x9e\x65\x24\x91\x38\x7f\x8c\xff\x97\x7e\xb4\xb5"
+ "\xd5\x41\x36\xba\xa0\xae\xa7\x9c\x3d\x75\x6d\xdc\xd2\x48\xe0\xdd"
+ "\x4d\x8d\x06\x3b\x51\x19\x89\x06\xe9\x0c\x7e\x51\xc2\xac\x36\x32"
+ "\x72\x65\x07\xa5\x48\x63\xa4\x2d\xd2\x19\xcb\x93\x68\x6f\x4d\x72"
+ "\x90\x2c\x27\xd1\x58\x33\xe1\x9e\x4e\x1d\x56\xf2\x2d\x81\x3a\xea"
+ "\xa8\x7a\x7a\x36\xe0\xa3\x03\x31\x61\xe7\x6e\x88\x01\x1c\x8c\xa6"
+ "\xf9\xdf\x6f\xad\x80\xf6\xe2\x18\x7e\x70\x6d\xd6\x06\x32\xfe\xd1"
+ "\xcb\x27\x94\xe1\xb9\x99\xe1\xf9\x26\x17\xe0\xb9\x0a\xf0\x7c\x84"
+ "\xe1\x79\xd8\x99\x00\xf0\xdc\xe2\xc1\xf3\x8d\x23\x3d\x78\xbe\xe9"
+ "\xa4\x7f\x3c\xdf\x34\x43\xc4\xb3\xe3\xca\xc4\xf3\x8d\x47\xfb\xc7"
+ "\xf3\x8d\x07\xfa\xc1\x73\x9b\xe4\xef\x0e\x0d\x9e\x6f\x8a\xba\x84"
+ "\x78\x6e\x0e\x0d\xcf\x37\x3a\xbc\xf1\x7c\x23\x61\x78\xd6\xee\x0f"
+ "\x0d\xcf\x37\xfb\x3d\xff\xa0\x3f\x7f\xdb\x83\x67\x8b\xa8\x9f\xc7"
+ "\xd4\xd3\x08\x0b\xe8\x67\x8b\xa8\x9f\xaf\x3b\x36\x30\x9e\x2d\x32"
+ "\xfd\x7c\xf3\xa7\x1e\x3c\x8f\xf9\xd0\x3f\x9e\xc7\xdc\xc8\xf0\x6c"
+ "\xb9\x42\xf5\x73\xf4\xbb\xfd\xe3\x39\xba\xc0\x3f\x9e\x2d\x06\x29"
+ "\x96\x18\x1a\x3c\x47\xb7\x5e\x3a\x3c\x5b\x42\xd4\xcf\xd1\x66\x6f"
+ "\x3c\xdf\x6c\x63\x78\xbe\x79\x4b\x68\x78\x1e\xe3\x77\xfe\x73\x7f"
+ "\xb1\x8c\x0c\xcf\xa2\x7e\xd6\x95\x01\x9e\x41\x3f\x5b\x44\xfd\x7c"
+ "\xfd\xc7\x01\xe0\x59\xa6\x9f\x6f\xd9\xeb\xc1\xb3\xce\xe4\x1f\xcf"
+ "\xb7\x7e\x23\xe2\xf9\x0a\xd5\xcf\xb7\x6e\xec\x1f\xcf\xb7\xce\xeb"
+ "\x07\xcf\x6d\x52\x9c\x36\x34\x78\xbe\x75\xff\x25\xc4\x73\x88\xfa"
+ "\xf9\xd6\x22\x6f\x3c\xdf\xb2\x9b\xe1\xf9\x96\x39\xa1\xe1\x59\xe7"
+ "\xf7\xfc\x9f\xfe\xe2\x44\x0f\x9e\x6b\x45\xfd\xfc\xc3\x64\x1a\x51"
+ "\x0b\xfa\xb9\x56\xd4\xcf\x0f\xe4\x0f\x8c\xe7\x5a\x99\x7e\xbe\x6d"
+ "\x9d\x07\xcf\x3f\x7c\xc9\x3f\x9e\x6f\xff\x33\xc3\x73\xed\x15\xaa"
+ "\x9f\x6f\x7f\xa6\x7f\x3c\xdf\x3e\xc1\x3f\x9e\x6b\x0d\x52\x0c\x3c"
+ "\x34\x78\xbe\x7d\xcb\xa5\xc3\x73\x6d\x88\xfa\xf9\xf6\x44\x6f\x3c"
+ "\xdf\x66\x64\x78\xbe\x6d\x6c\x68\x78\xfe\xa1\xdf\xfd\xdf\xfa\x8b"
+ "\xc1\x65\x78\x16\xf5\xf3\x8f\xa6\x00\x9e\x41\x3f\xd7\x8a\xfa\xf9"
+ "\xc5\xc7\x03\xc0\xb3\x4c\x3f\x8f\x9d\xe1\xc1\xf3\x8f\xee\xf2\x8f"
+ "\xe7\x3b\xb6\x8a\x78\xbe\x42\xf5\xf3\x1d\x63\xfa\xc7\xf3\x58\x57"
+ "\x3f\x78\x6e\x93\xfa\x17\x86\x06\xcf\x77\xcc\xb9\x84\x78\x0e\x51"
+ "\x3f\xdf\x11\xe3\x8d\xe7\xb1\xb1\x0c\xcf\x3f\xec\x08\x0d\xcf\x3f"
+ "\xf2\x7b\xfe\x5d\x70\xfd\x1b\xe3\xa6\x60\xff\x46\x17\xf6\x6f\x78"
+ "\xe6\xfe\x19\x22\x6d\x0c\xcf\xdd\x80\xe7\xb7\xe5\x78\xfe\x1f\xdf"
+ "\xfe\x8d\x1f\xdf\xc8\xf7\xe0\x79\x5c\x2f\x3c\xf3\x80\xe7\x6e\x01"
+ "\xcf\xfa\x69\x52\xff\x86\xb5\x7d\x37\xe0\xe4\x04\xb1\xce\x06\x2c"
+ "\x17\x8a\x58\xfe\x1f\xc0\x32\xd0\x90\x07\x1a\xd7\xb7\x34\x93\x78"
+ "\x07\xa3\x65\x17\xd0\x98\x97\xe3\xb8\xab\x8d\x43\xfc\x22\x6e\x25"
+ "\x0c\x37\xac\x04\xec\xa6\x34\x91\x86\x34\xb8\xd6\xc3\x95\x09\x17"
+ "\x69\x22\xf5\x6d\x80\xdd\x65\x72\xec\xda\x44\xec\xfe\xf8\xd3\xfe"
+ "\xb1\xfb\xe3\xea\x4b\xd7\x97\xa1\x67\xfd\x5f\xff\x93\xa0\x89\x7f"
+ "\xf6\x73\x6a\x4d\x6f\x16\xf1\x79\x82\xc4\xbb\x48\x24\x7d\x51\x3f"
+ "\x5a\x95\x40\x34\x1b\xdc\x84\x33\x2d\x22\x1a\xd3\x67\xd0\x6e\x49"
+ "\x7e\x8f\x11\xd5\x61\xe7\x5f\x48\xfd\x99\x66\x52\x7f\xbe\x96\xd4"
+ "\xf3\x70\x9d\x80\x0b\xea\x1a\xbf\x44\xde\x6e\x87\xd8\x6e\x7d\x13"
+ "\x94\x35\xd6\x7f\xbb\xf5\x55\x42\xbb\x93\xa0\xdd\x5d\x9e\x76\x5b"
+ "\x41\x0e\x80\x3f\x37\xf1\x62\x7f\x48\xbc\x83\x8c\x5c\xe5\xa2\xb4"
+ "\x4b\xc4\x3f\xf2\xe7\xf0\x11\x27\x89\x37\x02\xcf\x16\x03\xfe\x5b"
+ "\x2b\x49\x56\x06\xe0\xbf\xcb\x89\xb8\x73\x58\xb3\x2f\x00\xfe\x7f"
+ "\xdc\x4e\x81\x7e\xdd\x88\xff\xff\x41\xfc\xff\x58\xc3\x0b\xf8\xff"
+ "\xd1\xc1\xd0\xf0\x3f\x2e\x10\xfc\x07\xd0\x1f\x32\x01\xf1\x5f\xd5"
+ "\x85\xfd\x21\x9e\x39\xa0\x03\xe1\x5f\xa6\xcf\xc7\xcb\xf0\x3f\xa1"
+ "\x1f\xfc\xdf\x29\xe1\xdf\x71\xf9\xf1\x3f\x7e\x00\xfc\x8f\xef\x0f"
+ "\xff\x43\xdc\xf7\x71\xe7\x25\xc4\xff\x9d\x03\xe0\xff\xce\x40\xf0"
+ "\xdf\x1c\x1a\xfe\xc7\xfb\xe0\x7f\xbc\x88\xff\x71\x21\xe2\x7f\x42"
+ "\x00\xf8\x0f\xa4\xff\x64\xe2\x14\xec\x3f\xe9\xc2\xfe\x13\xcf\x5c"
+ "\xe0\x01\xf0\x2f\xef\x3f\xb9\x4b\x86\xff\x89\xfd\xe0\xff\xee\x69"
+ "\x52\xff\xc9\xe5\xc7\xff\x5d\x03\xe0\xff\xae\x7e\xf0\x3f\xd4\x7d"
+ "\x25\x77\x5f\x42\xfc\xdf\x3d\x00\xfe\xef\x0e\x00\xff\x96\x10\xf5"
+ "\xff\x5d\x3e\xf8\xbf\x4b\xc4\xff\x84\x10\xf1\x3f\x31\x10\xfc\x07"
+ "\xd0\xdf\x72\x2f\xe2\x1f\xf4\xbf\xe5\x88\x6c\x4e\xf8\x40\xf8\x97"
+ "\xe9\xff\x18\x19\xfe\xef\xed\x07\xff\xf7\x48\xf8\xbf\x02\xf4\x7f"
+ "\xcc\x00\xf8\x8f\xe9\x0f\xff\x43\xdc\xb7\x72\xcf\x25\xc4\xff\x3d"
+ "\x03\xe0\xff\x9e\x40\xf0\x1f\xa2\xfe\x8f\xf1\xc1\x7f\x8c\x88\xff"
+ "\x89\x21\xe2\xff\xde\x00\xf0\x1f\x48\xff\xcc\xfd\x18\xcf\x82\xfe"
+ "\xaf\x9d\x23\x5b\x1b\x30\x00\xfe\xe5\xfd\x33\xf7\xc9\xf0\x7f\x7f"
+ "\x3f\xf8\x9f\x34\x4d\xea\x9f\xb9\xfc\xf8\xbf\x6f\x00\xfc\xdf\xd7"
+ "\x0f\xfe\x87\xba\x2f\x66\xd2\x25\xc4\xff\xa4\x01\xf0\x3f\x29\x00"
+ "\xfc\xd7\x86\xa8\xff\xef\xf3\xc1\xff\x7d\x22\xfe\xef\x0d\x11\xff"
+ "\xf7\x07\x82\xff\x00\xfa\x73\x26\x0b\xfd\x39\x5d\xd8\x9f\xe3\x59"
+ "\x23\x32\x10\xfe\x65\xfa\xff\x01\x19\xfe\x27\xf7\x83\xff\x9f\x48"
+ "\xf8\xbf\x02\xf4\xff\x03\x03\xe0\xff\x81\xfe\xf0\x3f\xc4\x7d\x37"
+ "\x3f\xb9\x84\xf8\xff\xc9\x00\xf8\xff\x49\x20\xf8\x0f\x51\xff\x3f"
+ "\xe0\x83\xff\x07\x44\xfc\xdf\x1f\x22\xfe\x27\x0f\x51\xff\xcf\x83"
+ "\xad\xd8\xff\xc3\xab\x6a\xe6\x74\x97\x15\x17\xf1\x05\xb6\xd9\x91"
+ "\x0a\x1d\x71\xa9\xea\x34\xd6\xd4\x0e\x32\xeb\x1c\xf0\xc4\x78\x8e"
+ "\xcc\x3f\xa7\xc1\xf3\x02\x63\x29\xc4\xff\x5e\x6b\x44\xe1\x72\x15"
+ "\x4c\xcf\xde\xb6\x92\x28\xdd\x11\x75\xc2\xfa\x49\xeb\x71\x27\xc1"
+ "\x36\x6f\x44\x1a\x9c\xf0\xd0\x00\xfb\xe0\xe8\x69\xbd\xa6\x22\x07"
+ "\xf2\x74\xd9\x49\x2b\xe0\xa5\xbe\xd5\x0e\xb4\x5f\x2f\x60\x0b\x79"
+ "\x01\xf5\xd9\xb2\xeb\x14\x51\xba\xbe\xd4\xde\x04\x3c\x8e\x52\xaf"
+ "\x25\x8a\xe8\x56\xca\x23\x2f\x91\x47\xc8\x57\xdd\x7a\x9c\xaf\xf4"
+ "\xe0\xd1\x46\xc0\xb7\xeb\x4b\xfd\x4d\x15\x90\x6f\xe8\xfb\x65\x1e"
+ "\x14\xc6\x3f\xe0\x9e\x51\xdf\x02\xb4\xcc\x9f\x1c\x22\x9f\x1e\x0c"
+ "\x60\xfd\x4b\x20\xfd\x14\x0f\x17\x60\x3f\x05\xf0\xe9\x48\x80\x7c"
+ "\x6a\xf6\x5a\xd3\x3a\xe4\x7c\x7a\x78\x42\x60\x7c\x7a\xf8\x35\x1f"
+ "\x3e\x0d\x71\xff\xc1\xc3\x6c\x3f\x18\xee\xe1\xb1\x8c\x4f\x0f\x25"
+ "\x87\xc6\xa7\x87\x43\x9a\xff\xdb\x3b\x9e\x9e\x3a\x09\xe3\x69\x1e"
+ "\xe2\xe9\xc0\xf8\x64\x49\xf0\x5a\x83\x3b\xe4\x7c\x9a\x72\x24\x30"
+ "\x3e\x4d\xbd\xcb\x9b\x4f\x43\x1d\xe7\x4e\x61\xe7\x41\x73\x53\xea"
+ "\x19\x9f\xa6\x44\x85\xc6\xa7\xa9\x01\xac\xff\x08\x24\xee\x7b\xa4"
+ "\x05\xe3\x3e\xe0\x53\x80\xf2\x64\x69\xf6\x5a\x33\x3c\xe4\x7c\x7a"
+ "\x24\x23\x30\x3e\x3d\xf2\x89\x0f\x9f\x86\x38\x1e\x7b\x64\x37\xe3"
+ "\xd3\x23\xa9\x8c\x4f\x53\x0f\x84\xc6\xa7\x47\xda\x86\x26\x3e\x89"
+ "\xdd\x82\xf1\x09\x0f\xf1\x49\x60\x7c\xaa\x4d\xf0\x5a\xe3\x3c\xe4"
+ "\x7c\x8a\x1d\x1b\x18\x9f\x62\x37\x7a\xf3\x69\xa8\xe3\x86\xd8\x38"
+ "\xc6\xa7\xd8\x68\xc6\xa7\x47\x93\x42\xe3\x53\xac\xdf\xf3\x3f\x83"
+ "\xf3\xa3\x1f\x9f\x80\x7e\x34\xf0\x29\x40\x79\xaa\x6d\xf6\x5a\x93"
+ "\x3d\xe4\x7c\x7a\xac\x3e\x30\x3e\x3d\x7e\x87\x0f\x9f\x86\xd8\xbf"
+ "\x7d\xcc\xc1\xf8\xf4\xd8\x41\xc6\xa7\xc7\x54\xa1\xf1\xe9\xf1\x40"
+ "\xe6\x7f\xf6\xb9\x0e\xab\xb7\xcf\xf7\x44\xf3\x95\xe5\xf3\x3d\x91"
+ "\x1e\x18\xaf\x9e\x68\xba\xb8\x3e\xdf\x13\x65\x8c\x57\x4f\x18\x19"
+ "\xaf\x1e\xaf\x0e\x8d\x57\x4f\xb4\x86\xba\x7e\xab\xb7\xdf\x37\x6d"
+ "\xcb\x95\xe5\xf7\x4d\x0b\x50\xff\x4d\xdb\x78\x71\xfd\xbe\x69\xa2"
+ "\xfe\x9b\x26\xea\xbf\x27\x43\xd4\x7f\xd3\x02\xd0\x7f\x7d\xaf\xfb"
+ "\xea\xed\xfb\xfd\x34\xe6\xca\xf2\xfd\xa6\xdb\x02\xe3\xd5\x4f\xc7"
+ "\x5d\x5c\xdf\x6f\x7a\x07\xe3\xd5\x74\x0b\xe3\xd5\x74\x4d\x68\xbc"
+ "\xfa\xa9\xdf\xf3\x5f\x06\x5a\x2f\xd6\xdb\xff\x8b\xbb\xc2\xfc\xbf"
+ "\xb8\x00\xfd\xbf\xb8\x8b\xec\xff\xc5\x89\xfe\x5f\x9c\xe8\xff\xfd"
+ "\x34\x44\xff\x2f\x2e\x24\xff\xcf\x9b\x57\x92\x0f\xf8\x54\xde\x95"
+ "\xe5\x03\x3e\xa5\x0f\x8c\x57\x4f\x6d\xba\xb8\x3e\xe0\x53\x33\x19"
+ "\xaf\x9e\xd2\x31\x5e\xcd\x30\x84\xc6\xab\xa7\xfc\x9e\x7f\x38\xd0"
+ "\xfa\xb4\xde\x7e\xe0\xcc\x49\x57\x96\x1f\xf8\x74\x80\xf1\xef\xcc"
+ "\xbb\x2e\xae\x1f\xf8\xb4\x18\xff\x3e\x2d\xc6\xbf\x4f\x87\x18\xff"
+ "\xce\x0c\x20\xfe\x0d\xa4\xdf\x6f\xd6\x5b\xe8\x03\xba\x0b\x6a\xe6"
+ "\x44\x02\xfd\x23\xd3\x09\xd7\x15\x0d\xfc\x52\x01\xbf\x36\xe9\x48"
+ "\x77\x01\xf0\xcb\xe1\x22\xb3\x56\x7f\x4e\x1b\xdb\xdd\xa4\x0b\x78"
+ "\x75\x01\xfc\x40\xab\xa3\x0d\xd7\xe8\x3d\x7c\x8c\x9b\x75\xd7\x8b"
+ "\xab\x35\x04\xf9\x85\xf4\x77\xab\xa6\x67\x53\xe0\x97\xc0\x3f\x55"
+ "\x93\xd6\x55\x50\x67\x7b\xe6\xe4\xe7\x74\x95\x9d\xd2\x06\x83\x13"
+ "\xea\x54\x52\xd4\x60\x68\x26\xf1\xad\x64\xa4\xee\x39\xe4\xcb\x33"
+ "\x47\x31\xdd\xea\x68\x26\xb8\xef\xa7\xd0\x07\xfe\xb9\x3e\xca\xf5"
+ "\xdf\x7a\x15\xee\xdf\x84\xeb\x0a\xa5\x3d\x9a\xac\x27\x4a\x05\xfe"
+ "\xfb\xf6\xa9\x0a\xfc\xff\x6f\xbd\xe6\x6d\x5c\x9f\x38\xe4\xbe\xe0"
+ "\x33\x42\xff\x1f\xff\xb9\xf6\x26\xa9\x8e\xab\x92\x29\x85\x3a\x8e"
+ "\x6e\xec\x70\x10\xac\x67\x63\x87\x99\x64\xa5\x12\x4d\x63\x57\x1b"
+ "\xc9\xec\xa0\x8e\xc6\xec\x6f\x48\xfc\x39\x1c\x17\x40\x3c\xcd\xba"
+ "\x83\xf1\xfb\x99\xd9\xfc\xe7\xfa\x9b\xec\xdc\xac\xe8\x46\x1b\x21"
+ "\x91\x9b\x80\xd6\x2e\xc2\x09\xeb\x35\x39\x12\x0e\xf4\x32\x58\xb3"
+ "\x8f\x11\x1a\x51\x3f\xdb\xea\xfa\x0c\xe9\x69\x80\xf7\x53\x7a\xc6"
+ "\x1b\x22\xea\x9f\xc3\x34\xa4\x2d\xce\x33\xb5\x1a\x1d\x42\x1e\xe9"
+ "\x3d\xe3\x5d\x36\xb1\xa6\x77\x91\x46\x17\x21\x80\x0f\x57\x5d\x42"
+ "\x33\xe0\x6b\x66\x88\x7a\x7b\xd6\xee\xa1\xe9\xaf\x9c\xdd\x81\x7e"
+ "\x2b\xe0\xeb\x08\xab\xe3\xb0\x33\x01\xe0\xab\xd9\x83\xaf\xd9\xa6"
+ "\xc1\xe1\x6b\xf6\xd4\x21\xc6\xd7\x10\xfb\xaf\xb3\xc3\x07\x87\xaf"
+ "\xd9\xaf\x31\x7c\xc5\x57\x31\x7c\xcd\xce\xf0\xe0\x6b\xd8\x99\x8b"
+ "\x87\xaf\xf8\x79\x0c\x5f\xf1\xd1\xa1\xe1\xeb\x59\x32\x34\xfd\xac"
+ "\x3f\x9b\x83\xbe\xb6\xbb\xc0\x22\xea\xaf\xeb\x8e\x0d\x8c\x2f\x8b"
+ "\x4c\x7f\x3d\x77\x72\x70\xf8\x7a\xae\x7c\x68\xf1\x35\xd4\x3e\xf7"
+ "\x73\x86\xc1\xe1\xeb\xb9\xaf\x18\xbe\x9e\xd3\x30\x7c\x3d\xd7\xe2"
+ "\xc1\xd7\x75\xc7\x2e\x1e\xbe\x9e\x3d\xc0\xf0\xf5\x6c\x46\x68\xf8"
+ "\xfa\x59\xe2\xd0\xf4\x0f\xcf\xdd\x8f\xf1\x01\xe0\x4b\xd4\x5f\xd7"
+ "\x7f\x1c\x00\xbe\x64\xfa\x6b\xee\x33\x83\xc3\xd7\x1c\xf7\x10\xe3"
+ "\x6b\x88\xe3\x84\x39\x96\xc1\xe1\x6b\xee\x34\x86\xaf\x39\x46\x86"
+ "\xaf\xb9\x53\x3c\xf8\xba\xfe\xe3\x8b\x87\xaf\x39\xd1\x0c\x5f\x3f"
+ "\x6b\x09\x0d\x5f\x73\xcd\x43\xd3\xaf\x9d\x10\x85\x31\x8d\xbb\xa0"
+ "\x56\xd4\x5f\x0f\xe4\x0f\x8c\xaf\x5a\x99\xfe\xfa\xc5\xbb\x83\xc3"
+ "\xd7\x2f\x5e\x1a\x5a\x7c\x0d\x75\x6c\xf3\x0b\xfd\xe0\xf0\xf5\x8b"
+ "\x77\x18\xbe\x7e\x6e\x63\xf8\xfa\x45\x99\x07\x5f\x0f\xe4\x5f\x3c"
+ "\x7c\xfd\x3c\x83\xe1\xeb\xe7\x53\x42\xc3\x57\x82\x6e\x68\xfa\xe3"
+ "\x5f\x48\xc5\x38\x0c\xf0\x25\xea\xaf\x17\x1f\x0f\x00\x5f\x32\xfd"
+ "\xf5\x82\x7a\x70\xf8\x7a\xfe\xc3\x21\xc6\xd7\x10\xc7\x63\xcf\xe7"
+ "\x0d\x0e\x5f\x2f\x0c\x63\xf8\x7a\x3e\x86\xe1\xeb\x79\x97\x07\x5f"
+ "\x2f\x3e\x7e\xf1\xf0\x95\xd0\xc2\xf0\x95\x50\x16\x1a\xbe\x5e\xc8"
+ "\x1e\xba\x71\x84\x79\xcd\x83\x8b\x21\xe7\xad\x1e\x1c\xc6\xe6\xdd"
+ "\x76\x65\xc7\x90\x2f\xb6\x0f\x0e\x63\xf3\x96\x31\x8c\xbd\xf8\x16"
+ "\xc3\xd8\xbc\xc4\x4b\x13\x43\xbe\x18\xcb\x30\xf6\x22\x09\x0d\x63"
+ "\xf3\x86\x70\xfc\x63\xc1\x94\xc1\xc5\x91\xf3\x3f\x19\x1c\xc6\xe6"
+ "\xbf\x76\x65\xc7\x91\xf3\x67\x0f\x0e\x63\xf3\x1b\x18\xc6\x5e\x72"
+ "\x32\x8c\xcd\x3f\x78\x69\xe2\xc8\x97\xf6\x30\x8c\xbd\x14\xe2\xb8"
+ "\xcd\x82\x90\xd6\xbf\xf4\x3d\x6e\xb3\x70\xf7\xe0\x62\xc9\x85\x0f"
+ "\x0e\x0e\x63\x89\xdf\x5c\xd9\xb1\x64\xe2\xfe\xc1\x61\x6c\xe1\x3d"
+ "\x0c\x63\x89\xf3\x18\xc6\x16\xea\x2f\x4d\x2c\x99\x18\xce\x30\xb6"
+ "\xc0\x12\x1a\xc6\x16\xee\x1b\xba\xf1\xa6\x24\xe5\xe0\xe2\xc9\xc5"
+ "\xe5\x83\xc3\xd8\xe2\x67\xae\xec\x78\x72\xb1\x76\x70\x18\x5b\xfc"
+ "\x4b\x86\xb1\x45\x66\x86\xb1\xc5\x05\x97\x26\x9e\x5c\x94\xcc\x30"
+ "\xb6\x68\x42\x68\x18\x4b\x0a\x60\xff\xff\x40\xc7\xc9\x96\x1a\x06"
+ "\x17\x53\x2e\x55\x0c\x0e\x63\x4b\xfe\x70\x65\xc7\x94\x4b\x32\x06"
+ "\x87\xb1\x25\x17\x18\xc6\x96\x8c\x65\x18\x5b\xe2\xb8\x34\x31\x65"
+ "\x92\x8d\x61\x2c\xa9\x28\x34\x8c\x2d\x4d\x1d\xba\xf1\x3d\x43\xfd"
+ "\xe0\xe2\x4a\xc3\x92\xc1\x61\xcc\xf0\xfd\x2b\x3b\xae\x7c\xd9\x3e"
+ "\x38\x8c\x19\x5e\x62\x18\x7b\x39\x8f\x61\xcc\x30\xe7\xd2\xc4\x95"
+ "\x2f\x4f\x62\x18\x5b\x1a\xe2\x7e\x14\x86\x5e\xfb\x5f\x2d\x5b\x99"
+ "\xb6\x30\x79\x59\x92\x6e\xd9\xca\xd4\x94\xd5\xba\x57\x97\xad\x5f"
+ "\x32\xf5\x8e\x35\x13\x74\x29\xe9\xba\x94\x65\x2b\x5f\x16\x13\x92"
+ "\x46\x91\xe7\x96\x24\x2f\x4c\xc7\x14\xc8\xfd\xf2\xca\x15\x4b\x56"
+ "\xa6\xea\x52\x96\xac\x5e\xb3\x2c\x65\x09\xfe\xff\xaa\x6e\xe9\xaa"
+ "\x14\x48\x58\xbc\x64\x59\xda\x12\xdd\xa2\x35\x4b\x97\x2e\x49\x79"
+ "\x75\x14\x79\x66\x4d\x72\xea\x32\x63\xf2\x12\xdd\x93\xcf\x3c\x76"
+ "\xd7\x9c\x69\x3f\x9b\xf3\xe8\xa3\x78\x38\x99\xec\x6c\xb2\x68\x5a"
+ "\xd0\xa4\x01\xcc\x29\x8f\x73\x29\x4b\x1a\xc1\xba\xe0\x79\xb6\xdb"
+ "\xce\x10\xcd\xd6\x14\xa2\xcc\x3b\x43\xc2\x4d\x67\x88\x4a\xf7\x0a"
+ "\x89\xa5\xa6\x91\xd9\x90\x1e\x45\x4d\x8f\x99\x69\x61\x49\x29\x35"
+ "\x4d\x27\x0e\xf5\xf8\x2a\xcc\x4b\x4d\xe3\xec\xf8\x0e\x68\xab\x84"
+ "\x74\xc3\x31\x2e\x65\xac\x43\x7d\x67\x51\xd6\x37\x84\xa3\xa3\x5e"
+ "\x09\x7f\x8f\x77\x70\x7f\x47\xe9\x82\xb6\x13\x6e\xb9\x0e\x2e\x15"
+ "\x5c\x07\xe0\xaa\x87\xab\x99\x70\xc9\x04\xae\x70\xb8\xa2\xe1\xd2"
+ "\xc3\x35\x09\xae\x29\x70\x3d\x09\xd7\x4c\xb8\xe6\xc0\x65\x83\xcb"
+ "\x41\xb8\x15\x90\x77\x85\x96\x95\xb3\x62\x2c\x5c\xb3\xe1\x2a\x85"
+ "\x0b\xca\x5a\x69\x81\xab\x83\x70\xab\xde\x82\x2b\x0a\xae\x18\xb8"
+ "\x80\xfa\xab\xe6\xc1\x95\x0d\x79\xf4\xec\x9d\x11\xd2\x8c\xa9\x04"
+ "\xea\x39\xf0\x65\xc4\xfc\x65\x70\x99\x09\xb7\x1a\xbe\xb9\x7a\x0b"
+ "\x5c\x47\xfa\xf9\x4d\xf4\x00\x65\x4e\x89\xdc\x74\xab\x5d\x38\x03"
+ "\x8f\x5b\xbe\xd1\x9d\x43\xc2\xdc\xa6\x3b\x8b\x8c\xe3\x89\xe2\x04"
+ "\xb7\x7c\x86\x75\x0b\xea\x99\xc7\xcc\xc2\x99\x8e\xf0\x8c\x34\xeb"
+ "\xcc\x5f\x1e\x67\x27\xef\x6b\xf0\x4c\xb3\xe0\xf0\xb6\x3c\x4e\xfc"
+ "\x7d\x9e\x5d\x31\xa3\x4a\x38\x03\x2e\x9f\x2f\xa3\x59\x09\x6f\x0b"
+ "\x67\xbf\x21\x0d\x51\x0e\xf2\xdc\x0e\x1a\xee\x9c\x83\x32\x6f\x5e"
+ "\x2f\xd4\xeb\x36\x9a\x43\x22\xe0\xf7\x3a\x0a\x75\x73\xa8\x4b\x4a"
+ "\xa1\x9e\x4a\x7c\x76\x9b\xc6\x57\x5d\x50\x5b\x1d\xf8\xbf\xb3\xbc"
+ "\x58\x47\x0b\x6c\x5a\x8c\xb3\xcd\x99\xc5\xe4\x18\xfc\xee\x82\xba"
+ "\xa9\x5a\xf7\x54\x24\x3d\x86\xbf\xcd\xc1\x3d\x6a\x97\xef\x67\xb2"
+ "\xba\x5c\x77\x41\x5d\xb2\xdb\x5d\xda\x64\x87\x74\xa5\xdb\x54\x52"
+ "\xca\xca\x1f\x0f\x7a\xb2\xce\x6c\xe7\x92\x35\x42\x7a\x59\xf1\x64"
+ "\xe9\x7f\xb8\xab\xdc\x85\xb6\x04\xbc\xab\x37\x91\x0e\xe1\x39\x27"
+ "\x96\xb0\xbb\x86\xe8\x9e\x22\xa4\x9d\x4b\xfe\x60\xa2\x85\x28\xcc"
+ "\x4f\x61\xbd\x93\xb3\xb3\x2c\x94\xd7\x65\x86\xc1\xf7\x93\x37\xf5"
+ "\x7c\xf7\xc6\xa6\x66\x3c\x23\x95\xe6\x2f\xd3\xee\x2a\x26\x04\x7f"
+ "\x8b\x75\xdb\x31\x9a\x28\xcb\x8b\x49\x38\xb6\xb1\x33\x3f\x79\x9f"
+ "\x74\x0e\x1d\xfe\x86\x83\xfc\x33\x66\x64\x51\x59\xd9\xeb\xdc\xac"
+ "\x3d\xd1\x8c\xa6\xc9\x2d\x76\xc5\xf4\x7d\x98\x5f\x77\xbb\x40\xcb"
+ "\xdb\xc4\xf7\x3a\xe4\x27\x96\x4f\x4d\x4d\x1a\x7c\xc6\x73\xee\x22"
+ "\x01\x99\xba\xcc\xb1\xd5\x8c\x46\x36\x2d\x96\x83\xf9\x69\x61\x1d"
+ "\xfe\x6f\xa6\x26\x81\xc6\x7a\xdd\x4a\x12\x7b\x8c\x5b\x31\xc3\xbd"
+ "\x95\xce\x83\x32\x62\xe9\x56\x9a\x08\xf9\x63\x04\x7a\x9b\xea\xaa"
+ "\xec\xdc\x8a\x29\xf0\x2e\xb1\xe7\xec\x4b\x46\x67\x05\xe4\x33\x76"
+ "\xe6\xaf\x30\xda\x15\xf3\x0f\x08\x7c\x4e\xa3\x47\xf0\x8c\xcd\xb3"
+ "\x69\xd4\x15\xef\xfa\x9c\x07\x5d\x45\xe0\x7d\x91\x9d\xcc\xd3\x48"
+ "\x6d\x64\xbc\xef\x29\xe7\x36\x7c\x76\x8c\x14\xca\xa9\xee\xab\x1c"
+ "\xf8\x76\xf6\x02\x97\x4e\xd1\x75\x9e\xda\xb6\xfd\x1c\xe9\x48\x68"
+ "\x57\x1a\xad\xdf\x18\x47\x9d\x85\x1f\x13\xd2\x60\x68\x21\x20\xf3"
+ "\xd1\x11\x0a\xea\x88\x5f\x47\x22\x23\x8c\x91\xb4\xd6\xd2\x42\x36"
+ "\xc4\xd1\x36\x3c\xc3\xb7\xb1\xa3\x95\x64\x7c\x4a\x54\x59\x0d\x24"
+ "\x2a\x23\x8e\x3a\xea\x13\x5b\x08\x4b\x6f\x20\x59\x5f\x10\xe5\x86"
+ "\x83\xd4\x39\x0b\xf4\x7f\x5d\x0b\xa6\xb7\x12\x3c\xa3\x32\xab\x8d"
+ "\xba\x32\x5f\x22\x2a\xfc\xbf\xe1\x20\xa6\x7f\x45\xb2\x4e\x12\x65"
+ "\x7c\xba\x23\xb2\x02\xbe\x89\xbf\xdf\x05\x75\xe1\xcf\xd3\x03\xdb"
+ "\xce\x13\xb2\xe1\x79\xa2\xcd\x58\x48\x34\xf1\x6e\x42\xad\xae\x0f"
+ "\x48\xbc\x9b\x82\x7d\x39\x44\x36\x2e\x23\xe1\xf1\x2e\x5c\xc7\xf6"
+ "\x09\xc1\x73\xba\x77\x41\x5e\x68\x9b\x19\xdb\xb6\xe1\x28\xd1\xe2"
+ "\xf9\xe4\xec\x37\x1f\x8a\xbf\x39\x4a\x90\x66\x17\xd4\xd3\x1c\x4e"
+ "\xd3\x74\x23\xb4\x7d\x0b\xd2\x00\xbe\x63\xe3\xf1\x77\xf0\xfb\x6d"
+ "\x29\x02\x0d\x14\x0b\x5c\x44\xe5\x36\xd5\x95\x2e\x48\x37\x0b\xe5"
+ "\xda\xb9\x95\xe6\x5d\x29\x42\x9d\xbc\xf2\xc6\xbb\xe8\x59\x87\xba"
+ "\x0e\x70\xbf\xb2\x2d\x3e\xfd\x51\x8a\xbf\x05\x5e\x26\x77\xe6\xaf"
+ "\xd2\x4b\xf4\x96\xf8\x62\xe7\x56\x45\x03\x2f\x92\xc3\x8c\x44\x09"
+ "\xef\xe3\xec\x8a\x85\xa5\x32\xac\xed\x07\x9e\x0f\x97\xf2\x8a\x79"
+ "\x92\xed\x8a\x05\x76\x59\x1e\xc4\x57\x4f\x1e\x78\x5f\x60\x57\x24"
+ "\xb6\xb1\x6f\xac\x9a\x89\x79\x44\xdd\x2f\xe5\x0d\xa3\x79\x4e\xbd"
+ "\x5b\x6d\xd3\x51\x8e\x3a\x01\x8f\xd5\xf4\xac\x56\x35\xcb\x45\x9d"
+ "\xbc\xe9\x30\xea\x79\x15\x9e\xeb\xca\xf2\x1b\xc7\xc0\x7b\xb3\x2e"
+ "\x4d\xf8\x3f\x06\xbf\x43\x0b\x4a\xcc\x3d\xef\x72\xc8\x30\x5a\x5e"
+ "\xac\x01\xdb\xa1\x89\xb7\x50\xa7\xdb\xb4\x5d\x53\x98\x82\xb6\xc3"
+ "\x26\xc8\x35\xaf\xae\xb3\x38\x77\x34\x99\x51\x3f\xa1\x8c\xd0\x82"
+ "\xc3\x55\x62\x3d\x3e\x40\xb9\x61\xba\x66\x55\x87\x1b\xca\x80\x3a"
+ "\x4d\x80\x77\xc3\x8e\x71\x46\xb4\xe9\x04\x9e\x93\x84\x73\x2f\x39"
+ "\xe3\x0a\x86\x5f\xa7\xde\xeb\x99\x13\x64\xde\x0c\xbe\x4d\x29\xea"
+ "\x07\x48\x37\x79\x64\x58\xa0\x1b\xc7\x74\xd1\x61\x33\xd3\x23\x61"
+ "\x3c\xe4\x53\x1c\x13\xe5\xf1\xc2\x48\x9a\xd4\x99\x6f\x04\xfc\x3f"
+ "\x36\xdb\x4b\x4e\xf2\x3b\xcc\x78\xc6\x26\xd4\x25\x0c\xca\xfc\x0a"
+ "\xee\x23\xe0\xfe\xcd\x47\x16\xe4\xb7\x50\xee\x75\xf8\xff\x8e\x1b"
+ "\xa8\xe3\xc9\x69\x04\xcf\xd3\x04\x79\x5b\x4d\xec\x64\x6b\x14\x96"
+ "\xb3\x15\xcf\x19\x85\x34\xcc\x03\xe9\x5a\x3b\xc9\x57\x8a\xe5\x9b"
+ "\x3b\xa0\xae\xde\xe5\xaf\x9e\xca\xca\x67\xe5\x62\x79\x52\xd9\xe5"
+ "\x25\xb4\x5d\x2c\x7b\x9e\x54\xb6\x09\xd2\xa4\xf2\x9f\x5c\xd1\xf3"
+ "\x8d\x0c\x78\x5f\x20\x6f\x43\x69\x09\xed\xc0\x32\xe0\x5d\xa9\x9d"
+ "\x54\xc4\xe2\xbb\x3c\x48\xc3\xdf\xca\x70\x15\xf6\x11\x58\x8d\x8f"
+ "\x0e\x0a\x65\x98\xed\xa4\xcc\xe2\xa3\xe3\xd4\x92\x8e\x13\xcb\x6a"
+ "\x95\xca\x92\x95\xc3\xf0\x54\xa0\xd4\x8b\x7c\xc5\x72\x55\x58\x6e"
+ "\x67\x7e\x4a\x94\x9d\x14\x44\xcb\xdb\x0e\xb2\x15\x4d\x0b\x6d\x7a"
+ "\xd4\x63\x62\xfe\x19\xa8\x93\xa5\x7a\xe3\x39\xa3\xa0\xbb\x63\x51"
+ "\x5e\x04\xfd\x6d\xaa\xdb\x0d\xe5\xcc\xf3\xd1\xd7\x4a\xcc\xe7\xce"
+ "\x5f\xb6\xa6\x1c\xcf\x59\xbd\x81\xb6\x41\x9e\x6c\xaf\xb3\x45\x39"
+ "\xf2\x08\xa4\xbd\x25\x9d\x71\x5a\x08\x79\xec\xdc\x32\xbf\x7b\x38"
+ "\x66\xde\x46\x38\x6b\x99\x1d\xfd\x67\xc4\xd5\x14\x6b\x74\x07\xb1"
+ "\x96\xf1\x84\xaf\x28\x8e\x8d\xcd\xa4\xe6\xe3\xdc\xab\xd7\xe3\xd9"
+ "\xd4\xc1\xd9\xe4\x94\x16\x01\x4f\x5d\xe0\x57\x66\xdc\x4b\xd0\x0e"
+ "\x9f\xe2\x52\x1f\xb3\x3a\xce\x08\xb2\x05\xff\x0b\xeb\xa3\xdf\x04"
+ "\x3f\x14\x7d\x51\xf0\xff\x0d\x45\x1c\xf3\x47\x79\xc8\x5b\x81\xe9"
+ "\xe8\xab\x82\x9e\xdc\x25\x7b\x47\x2b\xde\x70\x32\xda\xbd\x7a\x41"
+ "\xb0\x07\x58\x5f\xd7\x4f\xcd\x58\x67\xbe\xec\x0d\x27\xb6\x21\x2b"
+ "\x9d\xf2\x56\x57\xa7\x19\x75\xa9\x2e\x0d\xfd\xe8\x57\x3f\x89\x2f"
+ "\x27\x94\x2f\x7f\xc3\x19\x5c\x1b\x5e\xdd\x8d\xdf\x84\x58\xe1\x94"
+ "\x63\xcc\x1b\x4e\x3c\xeb\x79\x5b\xe6\xb0\xf0\x27\xca\xa8\xf9\xec"
+ "\x2d\xc5\xb1\x9d\xf9\xaf\x3a\xa5\xb3\x74\x83\x2c\xd7\x29\xb5\xbd"
+ "\x42\x6c\x3b\xa4\x09\x67\xf6\x4c\x2c\x15\xce\xf2\x86\xe7\x54\xbf"
+ "\x67\x7d\xd2\x82\x3a\x3d\xfe\x16\xda\x1e\xbb\x4b\xa2\x93\xcb\x81"
+ "\xe7\x98\x5f\x7f\x82\x4b\x3d\x14\x9f\x61\x26\xc2\xbe\xfd\xa6\x3a"
+ "\x7d\x70\xf5\x4a\x15\xe6\xbf\x37\x42\x9c\x12\xef\xfa\x1b\x65\x7a"
+ "\x2f\xf5\xe4\x2c\xb1\x3c\x7c\x27\xf1\xaa\x42\x8c\x1f\x42\xf8\x86"
+ "\xdf\xf3\x0f\x64\xed\xd2\xf4\x6e\xd7\x9a\xf2\xd0\xdb\xb5\xc6\xd0"
+ "\xbb\x5d\x6b\x0e\x0d\x6d\xbb\xd6\xd4\x07\xd0\x2e\x5d\xef\x76\xa5"
+ "\xad\x09\xbd\x5d\x69\xb1\xbd\xdb\x95\x56\x3e\xb4\xed\x4a\xdb\x13"
+ "\x40\xbb\x62\x7a\xb7\x6b\xed\x33\xa1\xb7\x6b\xad\xb6\x77\xbb\xd6"
+ "\xae\x19\xda\x76\xad\xcd\x08\x5a\x1f\x16\xda\x8c\x4c\x1f\xa6\xdf"
+ "\x16\xbc\x3e\x5c\xdb\xde\x5b\x1f\xae\x7b\xd6\xa3\x0f\xd7\x4d\x0d"
+ "\x49\x1f\x16\x96\x88\x3e\xc5\xba\x91\xbd\xf4\x61\x41\x49\x55\xdf"
+ "\xfa\x30\xfd\x2b\x41\x1f\x9a\x4a\xaa\x82\x6b\x43\x7a\x55\x8f\x3e"
+ "\x54\x97\x54\x79\xe9\xc3\x08\x1b\xf8\xd3\xeb\xc2\x43\xd3\x87\xeb"
+ "\xc2\x7b\xeb\xc3\x74\x83\xb7\x3e\x5c\x17\xdb\x0f\x0e\x2b\xfb\xd2"
+ "\x87\xf1\xae\xd3\x54\xc4\x46\x65\x90\xf5\xf1\xbb\xfe\x1b\xbe\x15"
+ "\x33\xc0\xb7\x82\xec\x2b\x59\xaf\xf4\xfb\xad\x70\x67\x1c\xf8\x19"
+ "\x9a\x8d\xbf\x22\xdc\xf1\x0c\xc2\x35\x46\x37\x43\x1c\xe0\x24\x77"
+ "\x1b\x01\x13\x39\x64\x4a\x63\x59\x3b\x69\x8c\x3e\x4e\xe8\x48\x67"
+ "\x1c\xfd\x4d\x71\x55\x6c\x0a\x62\x73\xfd\x87\xd6\x54\x67\x90\xd8"
+ "\x5c\x9f\x27\x61\xb3\xd1\x05\xd8\x4c\x43\x3c\x6e\x38\x69\x6d\x3f"
+ "\x21\x62\x73\xc3\xa7\x3d\xfc\xc9\x61\xf8\xec\x13\x9b\x20\x13\xde"
+ "\xd8\xac\xd3\x31\x6c\x6e\x78\xa7\x37\x36\xeb\x74\x7d\x63\x73\xc3"
+ "\x26\x86\xcd\xba\x20\xfb\xda\x36\xcc\xf4\x60\xb3\x4e\xe7\x85\xcd"
+ "\x1f\x15\x57\x75\xe6\x6f\xd8\x13\x1a\x36\x37\xec\x91\xda\x5e\x2e"
+ "\xb6\x1d\xd2\x94\xde\xd8\xdc\xd0\xe2\x97\x87\x79\xad\x79\xa0\x0f"
+ "\x55\x27\xb8\x8c\x7d\x6e\xf0\x5b\xf9\x82\x89\x95\x10\x77\x75\xe2"
+ "\x99\xf1\x94\x9b\x44\xe8\x5a\xbd\xaa\x13\xe2\xdf\xce\x4e\x43\x38"
+ "\x1d\xd5\xf9\x31\xed\xd6\x12\xa8\x7b\x24\xed\xd4\x47\x00\xcd\xc6"
+ "\xc2\x7d\x74\x79\x1a\x89\x82\x4b\x5b\x2e\xd2\x15\xfe\x8f\xa1\x6b"
+ "\xb5\xa3\x0a\xd3\xc8\x84\xc8\x0e\x12\x0e\x75\x48\x88\xdc\xa4\x21"
+ "\x91\x2e\x12\x85\xff\xd3\x9c\x63\xe9\x10\x9f\x29\xb1\xef\x93\x57"
+ "\xc3\xf7\xd2\x23\x29\x7d\x55\x4f\x20\x56\x0b\x07\x1e\x68\x77\x71"
+ "\xb4\xca\xbd\x56\xcf\xd1\x08\xdb\x9d\x74\x43\x82\x50\x27\x7e\x6c"
+ "\xb1\x03\x30\xe4\xa0\x59\x06\xfc\x6e\x2c\x9e\x5d\x4c\x7f\x54\xdc"
+ "\x41\x3b\xb5\xa3\x4c\xe7\xc9\x84\x5d\x69\x64\x6c\x45\x1a\xd1\xd3"
+ "\x6e\x3d\x07\x34\x48\x98\xbf\x5a\x83\x7c\x4f\xa0\x1c\x7c\x2b\x0d"
+ "\xbe\x05\xbc\x74\x9b\xe0\x5b\x2e\xf8\xd6\x69\xf8\xd6\x29\xf8\x56"
+ "\x0e\x7c\x2b\x87\x7d\x2b\x38\x9a\x6f\xec\xf7\xfc\xe7\xf8\x8d\xb7"
+ "\xe0\x5e\xba\x5f\x47\xa6\x8f\x88\xc3\xfe\xea\xb3\x1b\x0c\x41\xe2"
+ "\x7d\xa3\xdf\xfd\x9f\xb7\xbd\x47\xa2\xa9\x6a\x5c\xe5\xac\xd7\x3e"
+ "\xa7\x18\x47\xbf\xf6\x1e\x99\x80\x32\xd7\xe8\x3c\x49\xa8\x7a\x5c"
+ "\xe5\x21\x7d\x7b\xb0\xdf\xf2\x3b\xff\x21\x3f\x07\xe2\x66\x15\xc4"
+ "\xa1\x2a\xdb\xe4\x6d\x39\x34\xbd\x3b\xba\x58\xd3\x15\x5d\x1c\xb3"
+ "\xc0\xa5\x01\x5c\xd1\x74\x5d\x0a\xd1\x1d\xe7\xb6\x8c\x3b\x7c\x04"
+ "\x6c\xc4\x0b\x24\xfc\x18\xb7\x25\x31\xeb\x53\xec\x6b\xcc\x4c\xf5"
+ "\xee\x6b\xcc\x2c\x25\x5c\x76\x38\xe1\x36\x69\x09\x97\x33\x85\x40"
+ "\x3e\xef\x6b\x73\x02\x2b\x2b\xeb\xab\xf8\xbd\xb7\x90\x4c\x17\xfd"
+ "\x9a\x16\x6c\x0f\x2f\x84\xf8\x37\x7e\x9c\xc2\x6e\x4e\xc3\x3e\xb8"
+ "\xac\xa3\x40\xd3\x7f\x81\x5d\x8a\x84\xff\xf7\x02\xef\x88\x31\x85"
+ "\x7c\xef\x04\x97\x55\xe9\x82\xff\x23\x3b\x46\xc4\xb9\xb3\x12\x88"
+ "\x4b\xdb\x64\xee\x2e\xb0\x69\xdc\x10\xcb\xf2\xaa\x89\x95\xd8\x0f"
+ "\x62\x6d\x77\x93\x32\xc0\xdd\x02\x77\x38\xca\x43\x82\x79\xd1\x61"
+ "\x72\x3c\x95\x70\x59\xe7\x88\x9a\x9e\xd5\xab\x24\x5c\x3f\xd3\x1e"
+ "\xe9\xdc\xd8\x4e\x79\xc4\x37\xf6\x3b\xc0\xbb\x88\xcc\x73\x60\x6b"
+ "\x1d\x6d\xa4\x0c\xe2\x66\xf7\xab\x86\xd1\x8e\xb3\x86\xef\xbd\xcd"
+ "\x93\xa8\x88\x0e\xa2\x29\x3b\x03\x18\x7c\x15\xf0\x77\x06\x70\xee"
+ "\x60\x38\xc7\xb5\x42\x15\x88\xf1\xdc\xee\xea\x5d\x67\x18\xc6\x05"
+ "\xdc\x21\xc6\x57\x01\xee\x56\x7a\x70\xe7\x3a\x0b\x18\xcf\xdf\x98"
+ "\x50\x96\x43\xb1\x5f\x84\xdb\x75\x62\x04\xbe\x53\x0c\x1b\xc7\xe9"
+ "\x0e\xcf\x76\x12\x4f\x1c\xb6\x65\x61\xd7\x98\xe2\x18\xdd\x73\xf4"
+ "\xf4\x31\x2e\xeb\x08\xa4\x87\xeb\x7e\xfe\x63\x0d\xd0\x7b\x21\xeb"
+ "\xa3\xd8\x92\x88\x71\xbe\x1d\x68\x81\x74\xd1\x3d\x47\x7e\x7c\x8c"
+ "\xcb\xdc\x8b\x74\x5c\x5b\x49\xc2\x8c\x8f\xd0\x56\xa0\x59\x15\x96"
+ "\x67\xe7\x32\x85\x38\x0b\xc7\x3f\xea\x84\xbe\x4f\xf6\x1b\x37\xd0"
+ "\xcd\xa5\x2a\x31\x03\xbf\xf5\xe6\x57\xba\x04\x99\x43\x3a\x1e\x4f"
+ "\x26\xdc\x82\x76\xa0\x95\x1b\x68\xd5\x29\xe8\x82\xd9\x82\x2e\xc8"
+ "\xeb\xac\xcf\xb0\x53\x3e\x3e\x29\x8c\x66\xae\xc6\xb1\x17\x37\x99"
+ "\x6f\x24\x74\xe3\x49\xa0\x57\x47\x33\xea\x8d\x08\x7e\x2d\xd3\x0d"
+ "\x48\x2f\x75\x3b\xd1\xd0\xc2\x3b\x77\xbf\x97\x69\x19\xe6\x06\xfc"
+ "\xa2\x7e\x88\xdc\xa4\x18\x09\x72\x19\x51\x80\xf2\x0b\xf2\x1c\xb9"
+ "\x49\xd0\x57\x09\x65\x20\xb7\xae\xb5\xfa\xdb\xbb\xd7\xea\x75\x70"
+ "\xdd\x22\xe9\x10\x3c\xf3\xab\x1c\x69\x9b\xbf\xd1\x8c\xfa\xc3\x9a"
+ "\x6e\x27\x2e\xa0\x6d\x04\xda\x9b\xb5\xfa\x68\x81\xc6\x2f\xeb\xc9"
+ "\x44\x27\x51\x40\x9d\x34\x50\x5f\xb2\x6b\x29\x09\x6f\x30\x1c\x23"
+ "\x6e\x90\x0d\x89\xee\xcf\x2c\xd3\x11\x28\x97\x3b\xa4\xff\x84\x88"
+ "\x34\x53\xf8\xc7\x5d\xce\xfd\x1e\xdc\xe5\xdc\x8f\xb4\x63\xb8\xcb"
+ "\x99\x74\x35\xe2\xae\x2e\x41\xc0\x5d\x58\xf7\x18\x01\x4f\x55\x56"
+ "\xd7\x1f\x81\x46\x39\xd8\xb7\x49\x10\x33\xb5\xbf\x43\xcc\x6c\x8e"
+ "\xbb\x52\x31\x73\xa1\x53\xaf\x83\xeb\xa2\x60\x06\xca\x15\x30\x83"
+ "\xb4\xaa\x4b\xe8\x22\x12\x8d\x04\x59\x2d\x18\x57\xa9\xcb\x22\x8f"
+ "\x82\xac\x26\x46\x6e\xba\x85\x34\x08\x74\xda\x92\xa8\xfb\x39\xe5"
+ "\x8f\x71\x9b\x37\x65\x35\x11\x4d\x57\x0e\xa5\x56\xd7\xbb\x84\x57"
+ "\xd5\x59\xb0\x9f\x99\x2f\xd8\xae\x91\xc6\x70\xb0\x3f\x2e\xd2\x88"
+ "\xe3\x36\xe3\xab\xdc\xa6\x26\x0d\x6f\x1a\x67\xa7\xea\xe9\x06\xec"
+ "\x7b\xe3\x4d\x23\xb3\x79\xf5\x63\xe6\xce\xfc\xcd\x16\xbb\x82\x13"
+ "\xfa\xba\x69\x81\x0d\x7d\x17\xd0\x99\x9b\xbf\x15\xfa\x8b\xd5\xd8"
+ "\x77\xbe\xb9\x4d\x1a\x9f\x40\x9d\x20\xf6\xcb\x89\xfd\x76\x5b\x90"
+ "\x87\xa3\xb0\xdf\x8e\xe9\x94\xcd\x9f\x4a\xfd\x76\xd2\x33\xbe\xb7"
+ "\x73\x9b\x5b\xb0\xcf\x47\xf6\xbb\x04\x31\x9f\xf8\xbb\xcc\x97\x50"
+ "\xd7\x7b\x7e\xc7\x9e\x41\xaf\x24\x74\x73\x24\xbc\x4f\x1f\x43\xd5"
+ "\xa4\x01\xf9\x51\x1e\xe7\x5e\x7b\x09\xee\x1c\xd0\xe5\x02\xdc\xc3"
+ "\xe0\x5e\x8b\x65\x07\x67\xaf\xb6\x08\xeb\x3f\xa1\xfd\xf3\x44\xdd"
+ "\x28\xcc\xa5\x30\x8e\x27\xea\x13\xe2\xff\x9d\xf9\x5b\x1c\xd2\x38"
+ "\x8b\x27\x7f\x0f\x7f\x0a\xf0\xdb\xc0\x23\x25\x1b\xfb\x61\xcf\xb2"
+ "\xf2\x4c\xc2\x33\x51\xea\x80\x37\x36\x1c\xa3\x05\xfc\x2a\x3a\xa9"
+ "\xe1\x11\xf1\x3e\x15\xe5\x03\xfb\x4b\xd1\x5f\x13\xf5\xef\x5b\xec"
+ "\xbb\xaf\x81\xaf\x95\x39\x56\xfe\xdd\xbe\xe8\x61\xe7\x5e\xdb\xe2"
+ "\xef\x5d\x70\xb4\x78\x6d\xb7\xbf\x72\xa6\xe9\xdd\x34\xc8\xb2\xda"
+ "\xfd\xfa\x88\xd1\x6f\x38\xe2\x2b\xdd\x66\xbe\x3b\x21\xf2\x50\xc6"
+ "\xc9\x20\xfd\x8b\xdc\x27\xfd\x95\xeb\x56\xd5\xd9\x5d\x65\x6f\x38"
+ "\xb0\x4f\xb2\xb1\xd2\x45\xf6\x9e\x68\xe3\xe2\xc7\xdd\x42\xd4\xad"
+ "\x44\x83\xfe\xd3\x33\xed\x7f\xa3\xe8\x43\x15\x9e\x20\x63\xbb\x4e"
+ "\x27\x44\x76\x83\x2f\xf8\xfa\x09\x32\x85\x7f\x59\x3b\xaa\x60\x29"
+ "\x51\x76\x81\xbf\xda\xf5\xb2\x21\xb2\xae\xa5\x8d\xb8\xcb\xdf\x70"
+ "\x34\x76\xd8\x49\x05\xe4\xa5\x5f\x27\x44\xcc\x48\xa4\xce\xfa\xc4"
+ "\x62\x12\xaf\x77\x9b\x33\xbf\x20\x6a\xd0\x45\x1a\x6b\xfa\xbb\xc4"
+ "\xea\x3a\x49\x86\xad\xe3\x74\x56\xd7\x57\xc4\xb4\x14\x74\x18\xe8"
+ "\xac\xac\xe7\x41\x57\xbb\xce\x91\xb7\xe5\xba\xfa\x95\x5f\x7b\x74"
+ "\xf5\x69\xd0\xd5\xf9\xa0\xab\xb3\xb4\xa4\xd1\x68\x26\xa0\x3b\x46"
+ "\xcc\x32\x46\x3a\x33\x8d\xa0\xb3\xd7\x81\xce\x4e\xff\x8a\x08\xfa"
+ "\xba\xbd\x8d\x80\xae\x8d\x28\x5f\x49\xa2\xba\x57\x81\xce\x3e\x6d"
+ "\xf8\xde\x8e\x4c\xa6\xb3\x77\xae\x04\x9d\xbd\x0a\x7c\xe2\x95\xa0"
+ "\xb3\xdb\xfb\xd0\xd9\xa7\xfc\xf8\xc3\xa2\xfe\xe9\x5a\xa5\xe7\x76"
+ "\x72\x14\xc7\x55\xb8\x1d\x9f\x8d\x08\x12\x27\xff\x66\xf1\xc7\x03"
+ "\xa4\x37\xd2\x9f\x07\x3e\x34\x00\x0f\x04\xbf\xd5\x39\x22\xae\x1b"
+ "\x6c\x9a\x3b\xa2\x26\xe6\x77\x27\x9a\xb9\x88\x54\xa2\x99\x65\xfc"
+ "\x1b\xed\x7a\x35\x01\xfc\xfe\x04\xb5\xab\xa0\xce\x5e\x00\x3e\xb5"
+ "\x1b\x7c\xef\xee\x4e\x6d\x38\xd0\x40\xe3\x58\x6b\x88\x44\x1a\xf2"
+ "\x63\x80\x9f\xc3\x97\xed\x07\x1d\x3a\xa9\x7c\x29\x99\xdc\x6d\xaa"
+ "\x99\x47\x4d\x35\xb3\xdd\xa6\x9a\x39\xf0\xdb\x88\xa7\xed\xc8\x97"
+ "\xbf\x10\x48\x33\xd2\xc2\xc3\x31\x6e\x75\x9d\xdd\xa1\xae\x49\x80"
+ "\x67\x03\xbe\xcf\x5c\x48\xd4\xf1\xfa\x0b\x66\xc6\xaf\x77\x08\xf2"
+ "\x89\xf1\xeb\x28\x31\x41\xdc\x87\x36\x57\xb0\xaf\x22\xcf\x20\x5e"
+ "\x10\xfc\x7d\x0f\xdf\x7c\x6c\xac\xc8\xb7\x86\x76\x33\x01\x7b\x32"
+ "\xa2\xc7\xd6\x0a\x7c\x3b\x4a\x24\x3b\x0b\xf4\x8e\x28\x07\x5b\xdb"
+ "\x3d\x54\xb6\x56\x8c\x63\xd0\xd6\xa2\x9d\x45\xbe\xed\x0c\x9a\x6f"
+ "\x5b\xb3\x43\xe4\x5b\x55\x68\x7c\x7b\x45\x25\xe3\x1b\xd8\x81\x1a"
+ "\x1b\xf0\xed\x88\x0f\xdf\x1c\x32\xbe\x35\xc3\x73\x9b\x87\x6f\xe7"
+ "\x82\xe0\xdb\xb0\x33\x57\x2f\xdf\x5e\xf7\xbb\xff\x51\xff\x7c\xb3"
+ "\x84\x28\x6f\xaf\x24\x79\xf8\x66\x01\x79\xb3\x80\xbc\x59\x7c\xe4"
+ "\xcd\x22\x93\x37\x0b\xc8\x9b\x45\x26\x6f\x27\x83\xe0\xdb\x75\xc7"
+ "\xae\x5e\xbe\x15\xf8\xdd\xff\x72\x00\xbe\x85\x2a\x6f\x07\x64\x7c"
+ "\x03\x79\xb3\x80\xbc\x59\x7c\xe4\xcd\x22\x93\x37\x0b\xc8\x9b\x45"
+ "\x26\x6f\x47\x83\xe0\xdb\xf5\x1f\x5f\xbd\x7c\x2b\xf4\x3b\x76\xd8"
+ "\x3f\xdf\x6a\x43\x94\xb7\xe5\x51\x1e\xbe\xd5\x82\xbc\xd5\x82\xbc"
+ "\xd5\xfa\xc8\x5b\xad\x4c\xde\x6a\x41\xde\x6a\x65\xf2\xf6\x61\x10"
+ "\x7c\x7b\x20\xff\xea\xe5\x5b\x51\x62\x88\x7c\x0b\x51\xde\x96\x27"
+ "\xcb\xf8\x06\xf2\x56\x0b\xf2\x56\xeb\x23\x6f\xb5\x32\x79\xab\x05"
+ "\x79\xab\x95\xc9\xdb\xc6\x20\xf8\xf6\xe2\xe3\x57\x2f\xdf\x8a\xfd"
+ "\xf6\x7f\x4a\x7c\x93\x78\x86\xfc\x13\xf8\x46\x13\x88\x0b\xfc\xc9"
+ "\xdf\x2f\x62\x7c\x43\x7e\x09\xbc\x3b\x9b\x10\x69\x12\x79\xe6\x12"
+ "\x79\x86\xf4\x43\xbe\xa1\x1f\x29\xf0\x4d\xa1\xd4\xa2\x0f\xe9\x02"
+ "\x5f\x52\xf2\x23\x9f\x32\x50\x67\x83\xe1\xd7\x3d\x7e\xa4\xcb\xd7"
+ "\x8f\x5c\x26\xf7\x23\xdf\xf5\xe2\x57\xc1\x79\xe0\x17\x27\xf2\xeb"
+ "\x25\x3f\x7e\xe4\xd2\x7f\xf8\xe1\x97\x6d\x40\x7e\x01\x6f\xa2\xba"
+ "\xcf\x32\x7e\xed\x14\xfd\xff\xb2\x94\x41\xf2\xeb\x55\xe0\x17\xfa"
+ "\xff\x47\x09\xf7\xf6\xfc\x60\xf9\xf5\xe6\x80\xfe\x7f\xdf\xfc\xb2"
+ "\x54\x05\xc7\xaf\x57\x0e\x78\xf8\x65\xb1\xb9\xc0\xa6\x49\xf6\xcc"
+ "\xc3\x2f\x66\xcf\x5c\xbe\xf6\x6c\x99\xdc\x9e\x05\xc2\x2f\x1f\x7b"
+ "\x76\x55\xf1\xeb\x97\x7e\xfb\xff\xdd\x10\x8b\xbb\x41\xcf\x61\x7f"
+ "\x65\x44\x1b\xc4\xc9\x2e\xfa\xf5\xac\x0e\x88\x93\x5d\x23\xe2\xb6"
+ "\xad\x24\x63\xbb\xd7\x42\x9c\x0c\xbc\x2b\x58\x49\xa6\xe4\xaf\x24"
+ "\x4a\x7e\x39\xc4\xca\x27\x20\x56\x06\xfd\xd4\xf5\x2f\x43\x64\x7d"
+ "\xa2\x83\xf0\x10\x2b\x63\x3f\x18\xd4\x77\x2c\xfd\x17\xc4\xca\xad"
+ "\xa0\xfb\x5a\x77\xb2\x58\xf9\x2b\x29\x56\xfe\xc0\x2b\x56\x7e\xfd"
+ "\x15\x31\x56\x16\xe9\x5f\x26\xa7\xfd\x0b\xbf\xf3\x13\x2b\x5b\x06"
+ "\x8c\x95\x31\x46\x7e\x1b\xe3\xe5\xd3\x86\xd1\x3b\x44\xdd\xb6\xf3"
+ "\xd4\x20\x63\xe5\xd3\x10\x2b\xe7\x30\xda\xef\x0c\x9a\xf6\x25\x7e"
+ "\xe7\x7f\xa0\x6c\xa0\xbc\xf4\xd8\x22\xa0\xb3\x64\x83\xba\xc1\x06"
+ "\x61\x7f\x46\x57\x41\xcd\x24\xc0\xab\x20\x1f\x82\x4d\x5a\xab\x0d"
+ "\x47\xd9\x40\x39\x41\xd9\x10\x6c\x11\xe8\x41\xb0\x45\x07\x2b\x5e"
+ "\x21\x93\x77\xbd\x42\x26\xb9\xd4\xde\x31\xf2\x53\x49\xc8\x0f\x8f"
+ "\x6e\xe3\x7d\x75\xdb\x12\xb9\x6e\xfb\xa0\xb7\x2d\x1a\x48\xb7\xbd"
+ "\xe2\x4f\x56\x2c\x03\xca\x0a\xca\x88\x60\x8f\x40\x5e\x2e\x86\xac"
+ "\xec\xfc\xdf\x60\xf9\x55\xea\x77\xfe\x47\x80\xfc\xda\x1f\x00\xbf"
+ "\xaa\xe8\xf0\x64\xad\x8c\x5f\x5e\xb1\xb1\x8c\x5f\x0e\x19\xbf\x3c"
+ "\xb1\xf1\x12\x79\x6c\x1c\x08\xbf\x7c\x63\xe3\xab\x89\x5f\x3b\xe7"
+ "\x0c\x8e\x5f\x96\x00\xe4\xcb\x02\xf2\x95\x9c\xec\xe1\x97\x77\x4c"
+ "\xec\xe1\x97\x45\x26\x5f\xb2\x98\x78\x89\x3c\x26\x0e\x84\x5f\xbe"
+ "\x31\xf1\xd5\xc4\xaf\x32\xbf\xf3\x3f\x02\xe4\x57\x00\xf2\x65\x41"
+ "\xf9\x32\xcb\xf8\xe5\x15\x0b\xcb\xf8\x25\x93\x2f\x99\xef\xb0\x44"
+ "\xee\x3b\x04\xc2\x2f\xdf\x58\xf8\x6a\xe2\x57\xf9\xfe\xc1\xf1\xab"
+ "\x36\x00\xf9\xaa\x05\xf9\x5a\x11\xe5\xe1\x97\x77\x0c\xec\xe1\x57"
+ "\xad\x4c\xbe\x64\x31\xf0\x12\x79\x0c\x1c\x08\xbf\x7c\x63\xe0\xab"
+ "\x89\x5f\xbb\x92\x06\xc9\xaf\x00\xe4\xab\x16\xe4\x6b\x85\x41\xc6"
+ "\x2f\xaf\xd8\x57\xc6\x2f\x99\x7c\xc9\x62\xdf\x25\xf2\xd8\x37\x10"
+ "\x7e\xf9\xc6\xbe\x57\x13\xbf\x7e\x15\xd5\x5f\x2c\x25\x8f\xa1\x5c"
+ "\x59\x1e\x7e\x21\x6f\xba\x21\x76\xea\x56\xd5\x4c\xf2\x1f\x3f\x2d"
+ "\x3f\xe8\x2f\xde\xc5\xbd\x6b\x9e\x6a\xc3\xf5\x20\xcc\x27\xa4\x3e"
+ "\x3e\x61\x83\xe1\x77\xc4\x3b\xe6\xfd\xb0\x57\x0c\xd5\x2d\xf5\x51"
+ "\x2c\xf4\x17\xf3\xfe\x25\xe4\x18\x0a\xf9\x84\x71\x94\xeb\x55\xe0"
+ "\x93\xe8\xc7\xbf\x3d\xc8\x3e\x8a\xee\xb3\x7a\xee\x6d\xf0\xe3\x33"
+ "\x16\x42\x0c\xb5\x28\x58\x3e\xfd\xfa\x80\x3f\x3e\x61\x3f\x11\xc6"
+ "\xbc\x18\x4b\xe1\xb8\x63\x63\x6b\x1b\xc9\x4f\x23\x1a\x61\xec\xb1"
+ "\xcd\x7b\xec\x71\xdb\x71\x88\xa9\x56\x01\xdf\xba\x13\x48\xe1\x71"
+ "\x32\xa5\xe0\x15\x16\x53\x49\xf1\x54\x63\x87\x53\x18\x7b\xb4\xba"
+ "\xec\x64\x86\x9d\x3a\x77\x41\x7e\x8c\xa3\xea\x13\x77\x12\x94\x95"
+ "\xac\x2f\x88\x1a\x79\x00\x31\x98\xc0\x0f\x79\x0c\x55\x21\x1f\x6f"
+ "\x5c\xea\x2f\x86\x1a\x78\xbc\xb1\xec\x14\x8b\x9f\x84\xf1\xc6\x2b"
+ "\x22\x86\xda\xe3\x77\xfc\xe3\x99\xbd\xac\xbf\x01\x69\x6f\xd5\xbb"
+ "\x08\xe0\xe9\xeb\xc8\x76\xd6\xaf\xe7\x2a\xac\x89\xc1\x98\x16\xe3"
+ "\x59\x6b\xba\x85\xe4\xaf\x27\x9a\xae\xce\x84\x48\x88\x51\xd5\x2e"
+ "\xd0\x75\xaf\x9f\x60\xb4\xc7\x35\x62\x8e\xe5\x06\x61\xae\x0c\xc6"
+ "\xb2\x28\x2b\xc2\x98\xe3\x22\x32\xa9\xec\x18\x99\x2c\xc8\x07\xc8"
+ "\x85\xcb\x54\x67\xe7\xd5\x35\x73\x50\x4e\x66\xb4\x50\x27\xf2\x00"
+ "\xe5\xa3\xae\x05\x79\xf3\x2e\xc9\x3a\xca\x78\x23\xf0\x85\xf3\x1e"
+ "\x0b\xee\x2d\x1b\x1f\xfb\xe1\x4f\x75\x60\xfc\x59\xe5\xcd\x9f\xf2"
+ "\x50\xc7\x83\xa5\xf9\x91\xab\xf4\x5c\xb9\x38\x1e\xbc\xf3\x85\x60"
+ "\xf9\xf3\x4e\xaf\xf5\xcf\x01\xf2\xa7\x2a\x44\xfe\xd8\x84\xb1\x45"
+ "\x6f\xfe\xb4\x89\xfc\x39\x82\xb1\x92\x87\x3f\xe7\x02\xe4\x8f\x4f"
+ "\x8c\x74\x55\xf1\xe7\xb7\x7e\xfb\x7f\xfa\xe7\x8f\x25\x44\xf9\xb1"
+ "\xcc\x16\xc6\x10\xbd\xf8\x63\x11\xe5\xc7\x32\x07\x63\x23\x0f\x7f"
+ "\x4e\x06\xc8\x1f\x9f\x98\xe8\xaa\xe2\xcf\x5e\xbf\xfd\xdf\x03\xf0"
+ "\x27\x44\xf9\xb1\xd8\x84\xb1\x42\x6f\xfe\x88\xf2\x63\x39\x82\xb1"
+ "\x90\x87\x3f\x47\x03\xe4\x8f\x6f\xff\xe9\xd5\xc4\x9f\xdf\x55\x87"
+ "\xc6\x9f\xda\x10\xe5\xa7\x76\xb6\x30\x26\xe8\xc5\x9f\x5a\x51\x7e"
+ "\x6a\xe7\x60\xec\xe3\xe1\xcf\x87\x01\xf2\xc7\x27\xe6\xb9\xaa\xf8"
+ "\xb3\x2f\x21\x44\xfe\x84\x28\x3f\xb5\x36\x61\xec\xcf\x9b\x3f\xa2"
+ "\xfc\xd4\x1e\xc1\x58\xc7\xc3\x9f\x8d\x01\xf2\xc7\x27\xc6\xb9\xaa"
+ "\xf8\xf3\xae\x73\xa0\xf1\x22\xc9\x77\x96\x8f\xcb\x76\x83\xff\x86"
+ "\xfe\x33\xfa\xce\x8d\x1d\xd5\xc4\xb5\x8a\xf1\x26\xff\x3c\xd1\x14"
+ "\x88\xbc\x11\xc6\x64\x97\xb3\x31\x59\xc1\x6f\xcb\x5d\xb6\x9f\x6e"
+ "\x52\x6a\xd1\x2f\x13\xc6\x5d\x85\xb1\x89\x43\xf8\xce\xd0\x2d\xf3"
+ "\xdf\x30\x46\x05\xdf\x9b\x60\x9c\x9a\xf5\x55\x10\x7e\xdb\x22\x7f"
+ "\x7c\x19\x78\x6c\xa2\x4c\x36\x8f\x4f\x8a\x3d\x87\x94\x2f\x41\x8f"
+ "\xbb\xbe\xef\xf7\xfc\xa7\xfe\xf9\x62\xa9\x0a\x8e\x2f\x60\x6f\x72"
+ "\x5f\x39\xc0\xf8\x72\xd4\x87\x2f\x96\xb6\x6e\x99\xdd\x09\x9c\x2f"
+ "\x3e\xf6\xe6\xaa\xe2\xcb\x1f\xf4\x7e\x63\x4d\xd0\x4b\xc8\x13\x9c"
+ "\xdf\xbd\x6d\x11\x19\x9b\x7f\x8c\x4c\xe9\xfe\x97\x76\xd4\x2c\xd0"
+ "\x73\xdd\xcb\xb5\xe1\x8d\xa0\xe3\x32\x3b\xe8\xd7\x11\x1d\x23\xe2"
+ "\x0e\x1f\x71\x90\xc6\x44\x3b\xe9\x5a\x9b\x40\x4c\x27\x70\xae\x7a"
+ "\x35\xd9\x9a\x82\xb1\xfc\x1f\x49\x5d\xcb\x19\x32\xab\x92\x76\x5b"
+ "\xdb\xab\x89\x79\xfd\x1f\x09\x5d\xae\x1f\xb5\x0b\xf2\x2c\x00\x1a"
+ "\x9e\xe2\xfe\x60\xbf\x00\xf1\xe8\xc4\x74\xa2\x99\xd9\x4e\x9d\x8d"
+ "\xed\x87\xc9\xdb\xf0\xad\x43\xe0\x45\x22\x7d\x91\x27\xa6\x57\x30"
+ "\xfe\xfc\x90\xf1\xe4\x59\xc6\x93\x9d\xb2\xf8\x53\x07\xef\x8f\x1b"
+ "\x81\x1f\xdf\xfa\xf0\xa3\xa5\x8d\x00\x7d\x47\xcc\xea\x00\x7e\x74"
+ "\x48\xfc\x38\x49\x32\x57\x23\x3f\xec\x3d\xf3\x5d\xbb\x44\x7e\x94"
+ "\xa1\xfe\x32\x12\xcd\x0e\x29\xfe\x3c\x25\xe3\x87\xb4\x26\x4b\xce"
+ "\x0f\x29\xf6\x5f\x0b\xfc\x48\xf3\xc4\x9f\x17\x20\xfe\xdc\x01\xf1"
+ "\x67\x56\x13\xe1\x76\x64\x06\xcb\x8f\x3f\xfa\xb5\xff\x12\x2f\xd0"
+ "\xb6\x74\x47\xd4\xc4\x20\x1f\xac\xe9\x55\x04\x79\x82\xf6\xc4\xfd"
+ "\x2f\x6d\x78\x46\x2a\xc8\x8e\x7d\x44\x5c\x17\x85\x98\x1f\xe2\x7d"
+ "\xeb\xbc\xcf\x08\xf6\x19\x30\x1e\x74\x77\x5b\x1d\xd5\x04\x69\x6f"
+ "\x5e\xff\x99\xc0\x87\x53\xdc\x9f\x12\xe7\x77\x10\xee\x6e\xc0\x21"
+ "\xc4\xfb\x9a\x05\xb8\x2e\x17\x74\xdb\xdb\x4b\xc9\xe4\x99\x46\xea"
+ "\xc4\xd8\x14\x65\x08\xe7\x9e\xa0\x5e\x6b\x34\xfe\x83\x60\xbf\x4e"
+ "\xb7\xba\xce\x7e\x28\x95\x10\xd4\x6f\x48\xf7\x61\x6b\x3c\x7c\xc2"
+ "\xf9\x24\x02\xaf\xe6\x06\x30\xcf\x55\xce\xaf\x79\xf6\x80\xe6\x27"
+ "\x77\x89\xfd\x05\x65\x52\x9f\x5a\xa8\xfd\x05\x52\x9f\xda\x69\x36"
+ "\x9f\x24\xeb\x13\x90\x9f\xa0\xf9\xb5\xdf\x10\x20\xbf\xaa\x82\xe7"
+ "\x57\x67\x1f\xfc\xfa\x40\xd3\x07\xbf\x6c\x1e\x7e\xbd\xa2\x92\xf1"
+ "\xab\x4d\xe4\xd7\x11\x19\xbf\x9a\x07\xe6\x57\x3f\xf3\x5b\xbf\xf3"
+ "\xfc\xfa\x77\xbf\xf1\x8f\x37\xbf\x2c\x21\xc8\xd7\xe9\x3e\xf8\xf5"
+ "\xef\xe6\xde\xfc\xb2\xc8\xe4\xeb\x95\x24\x0f\xbf\x2c\xa2\x7c\x59"
+ "\x64\xf2\x65\x09\x40\xbe\xfa\x99\xd7\xfa\x9d\xe7\xd7\x7f\xf8\x9d"
+ "\xff\xe3\xc3\xaf\x10\xe4\xeb\xf3\x3e\xf8\x55\x6d\xec\x83\x5f\x72"
+ "\xf9\x3a\x20\xe3\x97\x28\x5f\x16\x99\x7c\x59\x02\x90\xaf\x7e\xe6"
+ "\xb3\x7e\xe7\xf9\xf5\xe7\x7e\xe7\xff\x78\xf8\x55\x1b\x82\x7c\xfd"
+ "\xad\x0f\x7e\xfd\x45\xd7\x9b\x5f\xb5\x32\xf9\x5a\x1e\xe5\xe1\x57"
+ "\xad\x28\x5f\xb5\x32\xf9\xaa\x0d\x40\xbe\xfa\x99\xc7\xfa\x9d\xe7"
+ "\xd7\x7f\xfa\xf5\xff\x7c\xf8\x15\x82\x7c\x65\xf5\xc1\xaf\xff\xb4"
+ "\xf5\xc1\x2f\x99\x7c\x2d\x4f\x96\xf1\x4b\x94\xaf\x5a\x99\x7c\xd5"
+ "\x06\x20\x5f\xfd\xcc\x5f\xfd\xce\xf3\xeb\x80\xdf\xfe\x6f\x39\xbf"
+ "\xba\x0a\x25\xff\xb0\xd2\x9b\x5f\xe0\xaf\x47\xb6\xb2\xd8\x4a\xe2"
+ "\x97\x7f\xdf\xf0\xc3\x8c\x1e\x5e\x7d\xe5\xf1\x0d\x05\x3e\x89\xe3"
+ "\x14\xc8\x1f\xf4\x11\xd1\x27\xec\x32\x31\x1e\xe1\x18\x60\xbf\x7e"
+ "\x61\x20\xeb\x9f\x42\xe0\x93\x14\x57\x0d\x39\x9f\x3e\x0d\x85\x4f"
+ "\x7f\xf5\xbb\xfe\xc9\x9b\x4f\x92\xdd\x0a\x94\x4f\x7d\xd9\xac\xbf"
+ "\x8d\xed\xcd\x27\x8b\xcd\xc3\x27\x66\xa7\xd0\x76\xa1\xad\xf2\xe6"
+ "\x53\x3f\xf6\x2a\x90\xf5\x17\xdf\x79\x3e\x99\xfd\xea\xbf\x22\x8e"
+ "\xaf\x82\xab\x1a\x2e\x33\x5c\x16\x37\x47\xa6\x95\x73\xbc\x0d\xf3"
+ "\xe3\x3e\x7f\xe5\x39\xbd\xde\x0f\xa7\xc3\x67\xcc\xc1\x3c\x40\x5b"
+ "\x61\xac\x5d\x2a\x83\xe6\x13\xa4\x9d\x59\xad\x48\x24\xe5\x2c\xef"
+ "\x08\xa9\x2c\xf5\x26\x12\x2b\x95\x05\x6d\xca\x06\x5a\x9b\x23\x37"
+ "\xc5\x0e\x87\xfc\x16\x9a\xff\xda\x6e\xc8\x1b\x2e\x94\xb9\x49\x29"
+ "\xec\x1b\x2a\xe5\x75\xe7\x28\x70\x7d\xb8\x39\x52\x01\x79\x59\x99"
+ "\x23\xc5\x7c\x3a\x3e\x87\xe8\x84\x7a\x72\x1c\x7e\xcf\xb7\x9e\xa3"
+ "\xc4\x7c\x63\xe5\x75\x54\x6f\x8a\x15\xca\x13\xf3\x5c\x47\x87\xdf"
+ "\xae\x15\xdb\xa2\x97\xe7\x73\x3f\x4e\xb0\x4c\x29\x9f\x4a\x2c\x6b"
+ "\x82\x57\x9e\x5f\x13\x82\xe7\xd1\x0a\xf5\x4b\xe7\x88\x58\x3f\x35"
+ "\xe6\x75\x8f\xda\x92\xea\x56\x28\x63\x78\x8e\xc4\x78\xfd\x26\x97"
+ "\x08\xf9\xc5\xbc\x11\x42\xde\xe1\x2b\xab\x21\xef\x24\x91\xe6\x4a"
+ "\x39\xcd\xc5\x7c\x91\x12\x1d\xe5\xef\xdc\x39\x1c\x96\x85\xef\x35"
+ "\x74\xf8\x8a\x03\xd0\x86\x29\x52\x3e\xe9\x7b\x56\x88\xdc\x84\xbc"
+ "\x1c\xb9\x47\xe4\xc9\xf5\xd0\x8e\x58\x29\x1f\xee\xa7\x20\xe5\xcd"
+ "\x72\x93\x1b\x77\x79\x68\x33\xda\x9d\x9f\x3b\xc9\xbd\x49\xf9\xa4"
+ "\x6f\x99\x91\x9b\x14\x76\xcc\xd7\xd0\x26\x94\x8d\xfc\x6b\x83\xfc"
+ "\xdf\x13\x69\x14\xc7\x78\xa2\xe9\xe1\x89\x9b\x73\xe1\x3b\x73\x05"
+ "\xab\x6b\x94\x98\x6f\x66\xef\x7c\x4a\x79\xbe\xef\x33\x3a\x16\x27"
+ "\x02\x6d\x66\xf7\xce\x1b\x2e\xcf\x7b\x03\xcb\x9b\xa7\x81\xbc\x73"
+ "\x7a\xe7\xd5\xc8\xf3\xfe\x80\xe5\xdd\x6a\x81\xbc\x09\x7d\xd4\x75"
+ "\xb4\x2c\xaf\x96\xe5\x7d\x3d\x1b\xf2\xce\xeb\x9d\x57\x27\xcf\x7b"
+ "\x23\xcb\xfb\x16\xd6\x21\xb1\x77\xde\x58\x79\xde\x9b\x58\x5e\xd3"
+ "\x64\xc8\x9b\xd4\x3b\x6f\xb6\x3c\xef\xcd\x2c\x6f\xa1\x03\xf2\x1a"
+ "\x7c\xf3\xee\x62\xbc\xbd\x5d\xe4\x6d\x34\xcb\x5b\x54\x09\x79\x93"
+ "\xfb\x68\x5b\x98\x50\x2e\xcb\x3b\x86\xe5\xcd\x2d\x80\xbc\xc6\x3e"
+ "\x78\x21\xcf\x7b\x0b\xcb\xfb\xab\x79\x90\x37\xb5\x0f\x5e\xc8\xf3"
+ "\xde\xca\xf2\x6e\x9f\x02\x79\xd3\xfb\xe0\x85\x27\xef\xa8\xd2\x76"
+ "\xc8\x93\x01\xed\xb4\xf5\x41\x5b\x79\x99\xb7\xb1\x32\x77\x96\x41"
+ "\xfe\xec\x3e\x68\x2b\xcf\x7b\x3b\xcb\x5b\x36\x13\xf2\x6e\xe9\x83"
+ "\xb6\xf2\xbc\x3f\x64\x79\xcb\x5d\x90\x37\xaf\x77\x5e\x90\x37\x46"
+ "\xdf\x7b\x45\xfa\x8e\x65\xf9\x77\xed\x83\xfc\x05\x7d\xd0\x17\xcb"
+ "\x93\x64\xf6\x0e\x96\xf7\x97\x66\xc8\x5b\xd4\x07\x7d\xe5\x79\x7f"
+ "\xc4\xf2\xbe\x17\x0b\x79\xdf\xea\x83\xbe\xf2\xbc\x3f\x66\x79\xf7"
+ "\x20\x26\x4b\xfb\xa0\xaf\x3c\xaf\x9e\xe5\xfd\x8d\x0e\xf2\x96\xf5"
+ "\x51\xdf\xdb\x65\x79\xc7\xb1\xbc\xbf\xc5\xfa\xee\xee\x83\x1f\xf2"
+ "\xbc\xe3\x59\xde\xf7\x9b\x21\xef\x9e\x3e\xf8\x21\xcf\x7b\x27\xcb"
+ "\xbb\x17\xe5\xb8\xb2\x0f\x7e\xf4\xe4\x05\xbb\x30\xc1\x3d\xea\xf7"
+ "\xa8\x47\x6d\x90\x57\x38\x2f\x85\x72\xc2\xfe\xfe\x42\x5e\xc0\x89"
+ "\x59\xd4\x77\x77\xb1\x32\xf7\xed\x86\x7c\xc2\x9e\x72\x98\xa7\xc1"
+ "\x29\xe8\x23\xb0\x2f\xae\xfb\x76\x79\x74\xf7\xdd\x2c\xef\xff\x53"
+ "\x42\xde\xfd\x72\x1d\x4a\x39\xa5\x3c\xdf\x44\x96\xef\x43\xa4\x55"
+ "\xb5\x77\xbe\x70\x4f\xbe\x51\x7f\x22\xf0\xfe\x40\x85\x8f\x3e\x86"
+ "\x7a\xca\xcb\xba\x87\x95\xb5\xbf\x0a\xf2\x9a\xbd\xf3\xb9\xee\x95"
+ "\xe5\xbb\x97\xe5\xfb\x77\xa4\xcd\x41\xef\x7c\x3a\x79\xbe\xfb\x58"
+ "\xbe\xbf\xa2\xce\xb2\x78\xe7\x8b\x95\xe7\x9b\xe4\xce\xaf\xd6\x08"
+ "\x79\x37\x29\xeb\x7d\xe9\x07\xb4\xbe\x57\x66\xd3\xee\x77\xe7\xff"
+ "\xd9\x2c\xe6\xb5\x49\x34\x14\xe8\xcc\x30\xcf\x89\x98\x7f\xc0\x9d"
+ "\xff\x9f\x46\x31\xdf\x11\xb9\x1d\x90\xd9\xda\x9f\xd0\x51\x7f\x30"
+ "\x8a\x76\x54\xf0\xdd\x41\xbf\xb7\xf4\xe5\x6f\x18\xc7\x93\xeb\x4e"
+ "\x70\xb5\x7a\x66\x7b\xa4\x3d\xf5\x0f\x0b\x7e\x04\x5f\x56\xac\x89"
+ "\xef\xa0\x2e\x79\xda\x36\x8e\xda\x26\x76\x10\x25\xee\x9f\x44\xd5"
+ "\xb6\xc9\x76\x48\x77\x8c\x29\x8e\xe9\xcc\xaf\x9d\x64\x57\x18\xca"
+ "\x70\x2f\x0f\xf8\x3f\xd6\x4e\x7e\xfb\x24\xfe\xbf\x2d\x07\xfc\x41"
+ "\x2e\x56\x81\x7b\x30\xef\x82\xff\x0b\xe1\x12\xf6\x3d\x36\x12\x8e"
+ "\xe6\x92\x58\x73\x9a\x8b\x1c\x4f\x27\x1c\x5f\x58\x62\xd3\xa5\xe0"
+ "\x7e\x22\xb5\x26\xba\xd6\x30\x85\x16\xd8\x1c\xf0\xdd\xa4\x63\xf0"
+ "\x2c\xd4\x05\xda\x4f\x0b\x4a\xfe\xff\xf6\x9e\x06\x2c\xaa\xeb\xca"
+ "\xf3\x86\x31\x45\x0a\x05\x0d\x21\xc4\xa0\x3e\x15\x5b\xba\xab\x30"
+ "\x18\x4c\x8c\xb5\x09\x49\x48\xc2\x6e\xfe\xdc\x5d\xda\xda\x06\xb3"
+ "\x10\xc5\x40\x82\x48\x00\x05\x7f\x22\x88\x64\x37\x61\x55\x66\x95"
+ "\x10\xba\x21\x0c\x49\xd8\xad\xed\xba\x8d\x69\x4d\x77\xd2\x75\xbb"
+ "\x58\xc9\x2e\xc2\xe8\x8c\x8a\x80\xfc\xe8\x88\x6c\x8a\x09\xba\x13"
+ "\x21\x82\x82\x73\xf7\x9c\x7b\xef\x63\xde\x0c\x68\xcd\x6f\xbf\xaf"
+ "\xe5\x26\x8f\xf7\xde\xb9\xe7\x9e\xbf\x7b\xee\xb9\xe7\xdd\xf1\xbb"
+ "\xb7\xaf\x2e\x87\xf6\x18\x3a\x74\xc0\x15\xe4\x70\xb1\xad\x4f\x9e"
+ "\xcb\xde\x0c\x33\x51\xfe\xba\x7e\x8c\x0d\xfd\xf9\xe9\xf7\x10\x0d"
+ "\x77\x50\x45\x1f\xca\x0b\xb4\x17\x09\xab\x3c\xea\x10\xfb\x94\x34"
+ "\xde\xc2\xe5\x2f\x66\x0e\x16\xb1\x13\xdc\x57\x4a\x8a\xe8\xfc\x86"
+ "\xba\xcd\x1f\x42\xb7\xae\xce\x75\xdb\x51\xbe\x87\x09\xe9\x85\x3a"
+ "\xc2\x60\x69\x63\xa0\x53\x49\x6c\x10\x7b\x94\x1c\xaa\xbb\xe6\x9e"
+ "\x1f\xc5\x10\xcc\xb6\xbf\xea\x8f\xf8\x4b\x30\xbf\x4b\x17\x76\x68"
+ "\x4c\x74\x2a\xf7\xf6\xc8\xe7\x24\xa7\xf2\x80\x2a\x9f\x53\x9c\xca"
+ "\x53\x23\xf2\x39\x53\xdb\x7b\x65\xfc\xbd\x60\x2a\x3a\x51\xef\x01"
+ "\xf7\x6b\xcb\xfc\x29\x1f\xa5\x7d\xd9\x58\x50\x45\xa7\x3a\x83\xce"
+ "\xeb\x68\x32\xb2\xed\x15\x03\x62\x3f\xcd\xc6\x43\x78\x0f\x96\x77"
+ "\x97\xbc\x33\xc2\xe1\x7d\x1b\xb1\xb3\x88\x6d\x6b\x6c\x20\x9d\x37"
+ "\x5f\x65\x6e\x16\xf8\x6a\x38\xdb\xe6\x67\xb2\x17\xf4\x82\xd8\x87"
+ "\xba\xf1\x13\xb1\x2f\x0e\xda\x15\x6d\xcf\x82\xfc\x4c\x9c\xd7\x76"
+ "\x87\x4b\x2f\x97\x29\x76\xc1\x1d\x71\x0b\xef\xbc\x6b\xd1\xdd\xa9"
+ "\x4f\xaf\x58\x99\xb6\xea\x99\xf4\x8c\x67\x9f\xcb\x5c\x9d\xb5\x26"
+ "\xfb\xf9\x9c\xdc\xbc\xb5\xeb\xf2\x0b\xd6\x6f\xa0\x4d\x5e\x46\xe5"
+ "\x7f\x2d\x41\x19\x30\x00\xf2\xb8\x1f\x79\x34\xa5\x71\x59\x10\x26"
+ "\xfa\xa4\x29\xc9\xa8\x8e\x6f\x4f\x7b\x38\x00\xed\xc9\xdc\x67\x68"
+ "\x7a\x87\xf6\x87\xc6\xfe\x57\xec\x55\x0f\xf3\xf3\x05\x7a\x0c\x4d"
+ "\xb5\x47\x5c\x0f\xd7\xd1\xf9\x16\x07\xc3\x7b\x21\x72\x36\x9d\x41"
+ "\xd0\x64\xa6\x7a\xcb\x37\x01\xea\xb1\xed\x78\x34\x67\x87\x40\xf8"
+ "\xae\x30\xe6\x2a\x0f\x63\x7d\x44\xbf\xbc\x82\xf5\xba\x36\xa6\xc3"
+ "\x0e\x7c\x47\xbf\x09\xf9\xc0\x60\x4b\x3b\x88\xd9\x2e\xe6\xb1\x11"
+ "\xd5\x15\xac\xa7\x24\x8c\xf5\x6c\xad\x60\x7d\x96\x30\xe6\x8c\x2c"
+ "\x87\xc0\xc1\x52\x5b\xb8\xd3\xd0\x94\xcd\xfd\x1a\xeb\xdd\x01\x4d"
+ "\x21\x65\x58\x17\x33\x02\x7e\x16\x7c\x47\xd8\xc0\x41\x55\xc8\xfd"
+ "\xf6\xc5\xa1\x49\xa8\xdf\x08\x1b\xce\x54\x76\x20\x1f\xd1\x47\xb6"
+ "\x97\xeb\x71\x06\x46\x7e\x2e\xfb\x50\x37\xfa\x98\xed\x25\xda\x77"
+ "\x1d\xf9\x05\xdb\x2b\xfb\x80\xe8\xfd\x3c\x67\x68\x52\xee\x34\x36"
+ "\x82\xb8\xe9\xee\x8d\x99\x0a\xe2\x24\x20\xed\x01\xbd\x3e\x51\xab"
+ "\x56\xe7\xa9\x59\x6b\x33\x33\xbf\x1d\x00\x51\xfc\xee\x75\x36\x46"
+ "\x1e\xd2\x83\x5d\x15\xac\x1e\xf5\xac\x43\x7d\x1b\x0e\x63\xc6\x8d"
+ "\xfe\x02\xa8\x93\x19\xe9\x76\x21\x7c\x3f\x3e\xef\x47\xd9\x1b\xc4"
+ "\x79\x0a\xa7\x26\xb3\x52\x5b\x39\xca\x49\x31\x9f\xef\x5d\xd5\x9f"
+ "\x9f\xa4\xa0\xde\xe5\x88\xd7\xa0\x4e\x83\xb9\x1f\x18\x0e\xa7\xa1"
+ "\x1c\xb5\xf8\x4c\xf8\x53\xa8\x1f\x11\xbf\x5e\xe8\xd5\xc5\xcf\xce"
+ "\x41\x5b\xd5\xbd\x1e\xc6\xb6\x0d\x96\x1e\x8e\xa7\xbd\xec\xf8\x1e"
+ "\xdf\xf8\x8e\x76\x69\x40\x5c\x73\x7f\x61\x92\x82\xdf\x5e\x8a\xc5"
+ "\x43\x33\x84\x64\x22\x39\xe8\xfb\xaf\x09\x33\x2f\xf7\xf0\x32\x98"
+ "\x3f\x04\x4a\x53\x0f\x40\x55\x05\xab\xc1\xab\x0a\xaf\xca\x46\xac"
+ "\x3b\x84\x57\x03\xc2\x6d\x78\x6f\xc4\xfb\xa1\x1e\xfe\x7b\x5d\x38"
+ "\xc9\x9d\xbb\x89\xf5\xc6\x54\xc2\x1c\xa2\x8f\xbe\xf5\x83\x6e\x43"
+ "\x57\x0a\xc9\x4e\xfb\x46\xb2\x80\xc3\xcd\xde\xfb\xeb\xd9\x13\x01"
+ "\xeb\xf1\x9e\x2c\xee\xfa\xcb\x5e\x8b\x57\xbd\x78\x76\x04\xe2\x73"
+ "\x9c\x7c\x56\xf1\x9a\xf7\xfb\x2f\x5f\x7a\xd7\xba\x1c\x95\x37\x8e"
+ "\x7b\x43\x57\xf3\x8d\xe1\x1d\x5b\x0a\x86\xe6\xdd\x78\x39\xbd\xe1"
+ "\xcd\x56\x01\x3b\x59\x22\xde\x4f\x9a\xe5\x7d\x3f\x18\xda\xd1\x4e"
+ "\xed\x48\xbf\x7d\x48\xc0\x3a\x8c\x78\x7f\x14\xaf\x65\x3e\xfc\x89"
+ "\x66\x1f\xf5\xe7\x70\x31\xc6\x6c\xec\x4b\xa7\xe1\x70\x2d\xf5\x51"
+ "\x99\xf0\x2d\xc5\xcd\x38\xac\x06\x7d\xab\xca\xe3\x3f\xf6\x57\xbc"
+ "\xfd\xc7\x5e\xe4\xe3\x3f\x66\x8a\x45\x38\x16\xfa\x2c\xc2\x5f\xf6"
+ "\xf7\x6f\x5c\x89\xef\xf6\x12\xa4\xb3\x5f\x7d\x8a\xd3\xe0\xff\x06"
+ "\xa3\xec\x43\x80\xa0\x74\x30\x52\x7c\xe9\x33\xd8\x4f\x90\xcf\x12"
+ "\x6f\xc9\x57\xc8\x82\xf2\x21\xac\x86\xe4\x5b\x83\x74\xf1\xbd\x16"
+ "\xf1\x6a\xec\x70\x51\x93\x8d\xb7\x29\x7d\x16\xfd\x51\xca\x4b\x34"
+ "\xa9\x1d\xf3\xe8\x55\x43\x6d\x04\x6f\xc7\xcb\x08\xa7\x6f\x4b\x28"
+ "\xfc\x18\xfc\xe8\xdf\x36\x93\x4f\xd2\xdd\x3e\x62\xc2\xb1\x94\x08"
+ "\xee\xc1\x65\x10\x13\x0e\x26\x1c\x6f\x93\xbb\x0d\x8e\xcc\xe8\x4d"
+ "\x60\x22\x7a\x14\xd3\x9d\x06\x87\xc9\x42\x63\x51\xd0\x92\xe7\x7f"
+ "\x1c\xae\x69\xcc\x06\xce\xa7\x9a\xe4\xc1\x7a\x1d\xdf\x72\xfa\x8e"
+ "\x2c\xdb\x20\x74\x45\x5e\xb5\xd8\x7e\x2f\xe9\x4e\xf6\xc4\x7a\x2b"
+ "\xd2\x69\xa0\x3a\xbe\xf7\xb6\xd0\xa7\x96\xf6\x67\x25\x7b\x10\x3e"
+ "\x9d\xd7\x22\xf6\xeb\xb3\x9d\xe7\x76\xc3\xf6\xd4\x1f\x0c\x79\x10"
+ "\x8d\xc2\x11\x36\xc2\x30\x1e\xbd\xb5\x61\x08\xe7\xfe\x63\xf7\x79"
+ "\xf7\xcf\x51\x55\xdf\x3f\xd8\x6e\x2f\xb6\xaf\x67\xa8\x23\xc5\x13"
+ "\xe4\x19\x4c\xf3\x3d\xc2\xcc\xee\x52\xa4\xb1\x6e\x88\xaf\xa5\x20"
+ "\x9d\x58\x94\xc5\x4c\x74\x50\x9e\x7a\x49\x2b\xf3\xc0\x26\xef\xbe"
+ "\x96\xf4\x6a\xa9\xcf\xf9\x78\xde\xc0\x75\xc2\xd8\x75\x4c\xa9\x16"
+ "\x75\x56\xc4\xb1\xb2\xe1\x44\xa0\xfd\x4e\xc5\x5c\xc2\xeb\xf6\x15"
+ "\x5e\xe6\xfd\x5b\x2f\xe2\xda\xb1\x59\xb9\x2f\xb0\x5e\x9d\xdc\x6d"
+ "\xda\x9e\xb1\x52\xee\x7d\xc4\x8f\xe5\x27\xf3\x79\x95\x78\x50\x7b"
+ "\x41\xef\xe8\x3e\xa2\xa7\xd9\x2a\x1a\xe5\x10\xf6\x72\xf4\x22\xbc"
+ "\x96\x7c\x91\xdb\x0d\xe3\x68\x7f\x21\xf9\xe2\xd1\x4e\x6c\xbf\x7f"
+ "\x07\xbd\xe7\xf3\xf7\x6c\x1e\x63\x3d\xf5\x91\x54\x6f\xc7\x6f\xf4"
+ "\xb2\xe7\xd0\x97\xdc\x00\x73\x42\xc1\x34\x50\xcc\x75\xdb\x33\xb0"
+ "\x31\x41\x39\x38\x02\x40\x72\xa2\x8d\xac\x83\xa5\xc7\x4a\x70\xae"
+ "\xa9\x27\x59\x31\x5e\xef\x63\x6f\x2d\x03\x92\x19\xe3\x99\x94\xef"
+ "\xd8\x27\xb2\xef\xf7\x91\x8e\x64\xcf\x68\x11\xfb\xb0\xae\xf9\xc7"
+ "\x24\xbb\x47\xef\x63\x0e\xbd\x8d\xb9\xde\xd8\x0f\xd4\x5f\xd4\x2f"
+ "\x3a\x9a\xe4\xfb\x66\xa4\xb5\x47\xbc\x0b\xdf\x20\x5b\x9b\xc3\x98"
+ "\x8d\xf0\x3d\xb8\xcd\x93\xa9\x6e\x33\xf2\x8e\xc9\xc6\x39\x1d\xc7"
+ "\x05\xed\xfb\x8b\x74\xf7\xd0\x59\x3c\x48\xc3\x4a\x36\x45\xbc\xe5"
+ "\xe4\x8f\xf8\x6e\x13\xed\x8e\x27\xe3\x7c\x3e\x0f\xaf\x25\x9e\xf1"
+ "\xdf\xfc\x98\xb7\x7f\x1d\xf7\x1d\xff\xd4\xdf\x66\x77\x61\x22\x70"
+ "\x7f\xc8\x01\xf5\x82\xe1\xf8\x39\x39\x77\xc8\xbe\x6e\xfe\xee\x41"
+ "\x1c\x2f\x3a\x1a\xf5\x3e\x7d\x6d\xe5\xfe\x98\xff\x28\x9d\x65\x4c"
+ "\xbe\x62\x95\x74\xb8\xce\xdc\x9f\x8a\xb9\x0f\xd8\x58\x3e\xea\x39"
+ "\xea\x07\xc7\x55\xd9\xcf\x36\x1f\x9b\x68\xb1\x2b\x93\xce\x67\xa0"
+ "\x98\x34\x58\x0c\xf7\x0c\x0e\x7b\xe2\x12\xf5\xbd\x9b\xf7\xfd\xf1"
+ "\x06\x8b\x98\x6f\x65\xdc\x3a\x2e\xea\xc3\xbc\x7c\x98\x64\xb9\xca"
+ "\xfd\x97\x64\x29\x4c\x26\x59\xac\x5c\x8e\x42\x15\x2e\x18\x9a\xf3"
+ "\x88\xbf\xd3\xd0\x0c\x72\xbc\x4a\x5a\xc7\x9a\x89\xd6\x56\x8c\x55"
+ "\x24\x13\xf2\x4e\xe1\xf1\xef\x21\x6e\x93\x13\x52\xf6\x86\xa1\x62"
+ "\x6a\x6b\x6f\xb8\x6c\xe0\x6d\x1b\xf0\x79\xc9\x90\xd8\xc3\x39\x00"
+ "\xdb\xef\x56\x9f\x26\xfc\x93\x71\x14\xa3\xd5\x1f\xf1\xe7\xe9\xea"
+ "\xf7\xd1\x57\x3f\x04\x23\xd2\xf3\x27\x1f\xd5\xfc\xa2\xcf\x70\x32"
+ "\x08\x73\x0c\xea\xaf\x3d\x98\x23\xed\x26\x7b\x93\x2f\x63\x8e\x14"
+ "\x37\x58\x7a\x62\x89\xe6\xb7\xc8\xa7\x8a\x6c\x2f\xfa\xe7\xc4\x16"
+ "\xf4\x63\xab\xc7\xb7\x4e\x6c\x91\x76\xdc\x8d\x76\xf4\x47\x7e\x8a"
+ "\xd4\x6b\x37\xe2\x63\x2e\xd6\xf6\xb1\x94\xbd\x52\xe2\xbf\xae\xf5"
+ "\x83\x1c\xab\xb6\x1d\x14\x7f\x79\x1f\xb4\xc4\xc9\xb6\xb5\x82\x57"
+ "\xcb\x42\x0d\x97\x72\x44\xb1\x37\x7b\xcb\x42\x8a\x83\x31\xd8\xf7"
+ "\x3c\xf6\xf1\x73\xaa\x04\x8c\xc6\x8e\xe0\xd1\xd6\xc5\xfd\x10\xf3"
+ "\x1e\x8f\x1f\xb5\x04\xfa\xc4\x27\x8a\xc5\xe6\x23\x48\x83\xe2\x29"
+ "\xf9\x12\xc5\x54\xfa\x8e\x40\x19\x7b\xe4\xf8\x91\x32\xb7\xac\xf7"
+ "\xf6\x95\xb6\x43\xe8\x2b\xf3\x75\xb4\xd3\xc7\x9b\xe7\x2c\x22\x06"
+ "\x56\x49\xdd\xde\x93\xba\xed\x91\xba\xbd\x27\x75\xdb\x8d\x3c\xd0"
+ "\x6e\x6d\x2f\xe8\xec\x88\x76\x6b\x3d\x27\xf1\xad\x14\xcb\x3d\xe3"
+ "\xb5\x75\xae\x36\x96\xc7\xc6\x8b\xd6\x93\x34\x1e\x3c\x72\xb5\x82"
+ "\x4f\xbc\xb0\x8e\x1f\x2f\x5a\x1c\x52\xdf\x1a\x9f\xb1\x51\x2b\xf3"
+ "\xdd\xf3\x5a\x3f\x1c\x19\xb8\x22\xf7\x21\xb7\x9d\xa7\xf8\x49\xbc"
+ "\xf5\x73\x50\xb5\xb0\xab\x1c\xcb\xad\xef\x8f\xed\x87\xd6\x72\xfd"
+ "\x78\xa6\xbe\xa6\x98\x40\x34\xa8\x4f\x79\x5e\x89\x30\xd1\xaf\xad"
+ "\x99\x14\x1b\xf4\x31\x1a\x71\xcb\xdd\x8c\xc6\x4b\x6b\xa5\xf7\x58"
+ "\x6c\x35\xca\xb1\x28\x79\xb7\x65\x60\x1f\x99\x3c\x7c\xdb\x02\x7d"
+ "\xf8\x52\xdf\xd4\x93\x1d\x64\x9f\x7e\x4f\x9b\xd3\x08\x1f\xdb\x16"
+ "\x60\x9b\x78\x9f\xf9\xd1\x4c\xf2\x39\x0d\x2d\x56\x1e\xb3\x2a\x78"
+ "\xac\x28\x18\xe4\xf2\xb4\x25\x58\xe4\x3c\x81\x30\x93\x84\x85\xc8"
+ "\xb9\x44\xf3\x9b\x77\x7d\x64\xaa\x19\x3f\x3f\x6a\xb1\x6a\xf9\x11"
+ "\xa7\xc5\x63\x51\x5b\xad\xd4\x8f\x60\xf3\x05\xac\x25\x93\x60\x3b"
+ "\x84\x1d\xca\x19\x9f\xaf\x5a\x42\xe4\x7c\x45\xe3\xcb\xe0\x34\x9c"
+ "\x28\xa2\x31\x46\xef\x48\x63\x88\xe8\xdb\x8b\xae\xd0\x37\x44\x25"
+ "\xd6\x45\x50\x3c\xa0\x78\xa1\xae\x12\x71\x43\x7d\x9c\xdf\x1f\xa4"
+ "\xb8\x43\x79\x08\xd5\x23\x5e\x20\xc5\x22\x84\xff\x90\xce\x34\x62"
+ "\x1f\xf9\x23\xdd\x93\x4b\x64\xdb\xd5\x3c\x57\xf8\x28\xd1\x4f\x83"
+ "\x69\xed\x70\x1c\x4d\xa7\x76\xd4\x5e\x8b\x5f\x14\xbb\x46\x28\x36"
+ "\x09\x7e\xef\x48\x1f\xe7\xdf\x0d\x5a\x5e\x34\x6c\xd0\xe1\xd2\x5e"
+ "\xd0\x22\xa6\x8d\xc8\x78\x76\x9e\xda\xf2\xfe\xc3\x58\xb9\xf9\x32"
+ "\x3b\x63\xc9\x01\x63\xf5\x45\x8a\x8b\xb6\x3e\x21\x67\x7b\xa2\xd0"
+ "\xa3\x7d\x0a\xd7\x43\xc4\x54\xb3\x90\xc5\xd6\x57\x7d\x85\xd7\xcd"
+ "\x27\x5d\xa8\xae\x4c\x57\xc7\x86\xa3\xa8\x8e\x9f\x7b\xe7\xdb\xce"
+ "\x3d\x9c\x3e\x06\x9f\xce\xe8\xc2\x18\xea\x5f\x5d\xa1\xc5\xde\xf6"
+ "\x06\x21\x67\xfb\x8b\x5a\xdc\x45\xbb\x84\x52\xec\xe5\x75\xab\x24"
+ "\xce\xe3\xf2\xce\xe3\x7b\xfb\xbb\xc2\xae\xe1\x06\x69\xef\x08\xa9"
+ "\x07\xdf\x27\x96\x7d\xb4\x0c\x6d\xdb\xbe\x47\xb3\xad\xfe\x99\xc6"
+ "\x0f\xf2\x27\x3f\x13\x71\x65\x13\xff\x86\xad\x22\x1c\x92\x49\xcc"
+ "\x11\x27\x6b\x7d\x73\x6a\xfc\xd6\xbb\x8f\xe6\x25\x91\xab\x76\xcd"
+ "\x92\x6b\x33\x50\x97\xf3\x26\xce\x0b\x1d\x99\x5a\x8c\x61\x83\x89"
+ "\xf8\xcd\xdf\x8d\x38\x1d\xfc\x7c\x2b\xda\x3f\x58\x8f\x43\xf1\xe9"
+ "\xed\x2b\x4e\x49\xb3\x23\x51\x8b\x1b\x14\x4b\x8e\x0c\x74\xcb\x9c"
+ "\xae\x63\xa8\x5a\xc6\x92\x0b\x86\x8e\xcb\xde\x79\x58\xc7\x65\xef"
+ "\x98\xd1\x15\xe4\x1b\x33\x30\x6f\x2e\x19\x2c\xed\xb0\x79\xe5\x01"
+ "\x08\xbb\x7e\xec\xe8\xa8\xa1\x31\x4a\x67\x32\xf0\xf8\xc4\xd7\x9b"
+ "\x3a\x53\x35\x99\x29\x6e\xf6\x6f\xd4\xd6\x2f\x3a\xaf\x52\xae\xe6"
+ "\xcd\xaf\x73\x89\x57\xec\x24\x7e\x1a\x3d\x23\xd0\x9e\xfe\x68\x07"
+ "\x5a\x6f\xe9\x0c\x94\x71\xbe\xc6\x2b\x56\xca\x39\x8c\xe2\xa4\xf7"
+ "\x5c\x65\x3b\xef\x3d\x57\x75\x9e\x1b\x1b\x23\x3b\xad\x37\x3e\x57"
+ "\x75\x9a\x29\x6e\x69\x31\xd2\x3b\x16\x74\xf2\xf5\x01\x4f\x2e\xdb"
+ "\x99\xa0\xe5\xb2\x9e\x38\xda\xd1\x4c\x31\x0a\xf9\x5b\x05\xef\xae"
+ "\x38\x9c\xf7\x17\x69\xbc\xb1\x3e\xf3\x08\x66\x4e\xac\xd4\x56\x83"
+ "\xcf\xe1\x32\x07\xe4\x63\xf3\x0a\xdf\x57\xbd\x3d\x05\xfd\x2f\x80"
+ "\xfc\xac\x2e\xeb\x22\xf4\x78\xe6\x8a\xfa\xfe\x35\x9a\x7d\xbb\xde"
+ "\xd7\xe7\x85\xaf\x57\xb0\x97\x90\x4f\x95\x5e\xc7\xed\x08\x2b\x93"
+ "\x6b\x08\xdc\xb6\x9c\x56\x57\xb6\xa5\xc2\x5b\x37\xa1\x47\x57\x2d"
+ "\xe9\x41\xdf\x44\xc8\x7f\x25\xe5\x3d\x98\xf3\xe1\x73\x73\xaf\x65"
+ "\xd4\xe7\xed\x4b\x2e\x17\xeb\xf3\xab\xc3\x09\x14\x2b\xe5\xb7\x67"
+ "\x03\xe6\x3b\x66\xfd\x5a\xcc\x63\x0f\x2c\x55\xb3\x73\x32\xb2\xf2"
+ "\x56\x2d\x50\x33\xb2\x32\xf2\x32\x52\x33\x33\x36\xa4\xe6\x65\xac"
+ "\xc9\x9a\xb7\x3a\xf5\x99\x8c\x15\x6a\x7e\x6a\xae\x6a\x2a\x98\x5b"
+ "\x10\x00\x1e\xd4\xc5\x6a\x6a\x6e\xee\xda\xd5\x69\x2b\xd5\xac\x8c"
+ "\x15\xf3\x73\xd2\x72\xd3\xf2\xd4\xd4\x9c\x35\x6b\xb3\x56\xaa\x73"
+ "\x57\x46\xcf\x35\xdd\xb9\x32\x40\xbf\x86\x36\x3b\x04\xfa\xdc\x97"
+ "\x7a\x7b\xcb\x2e\x81\x7f\xb0\x92\x9d\x13\x5c\x90\x91\x25\xd6\xec"
+ "\x4e\x07\xc5\x94\x43\x36\x9d\x11\x49\xe7\x8b\xb1\xd2\x53\x2a\xde"
+ "\x8d\x84\x87\x7a\xd2\xb3\x3f\xca\x1e\x31\x58\x7a\xca\xe1\x34\x74"
+ "\x5b\xf9\xd9\x61\x08\x47\xdd\x22\xd8\xa5\x86\x5e\xcc\xd9\xb2\xe9"
+ "\xdf\x10\x5b\x2e\x41\xa8\x79\x1d\x18\xf1\x0a\xc4\x2b\x84\xce\x90"
+ "\x1c\x2c\x3d\x8d\xf1\xc7\xa9\x8a\x75\xcf\xd3\xb5\xae\x20\xd8\xc6"
+ "\xb6\xc1\x36\xd1\x2f\xa7\xdf\xd0\xd6\x82\x9f\x78\x11\x9e\x20\xff"
+ "\xec\x36\x9c\xe6\xbf\x51\x6c\x45\x5f\xa6\x75\xd4\xfe\xdf\xdc\x1f"
+ "\x8f\xf9\x60\x67\xdd\x34\x5e\xf7\xc6\x80\x01\x02\x51\x2e\xe3\xc1"
+ "\x4d\x26\xd8\x85\xbc\x72\xc3\x19\x43\x1e\xe9\xda\x7a\x1a\xea\x10"
+ "\x82\xba\xb4\x49\x3d\x1e\xe1\x7a\x54\xb0\xc8\xf2\xa9\x28\xdf\x4e"
+ "\x2e\x4f\xb9\xa6\x03\xca\xdd\xe6\x34\x9c\x1a\x42\x39\x43\x48\xae"
+ "\xf1\xd6\xfa\x68\xbd\x0b\xe5\xec\x72\xaf\x43\xbb\xcd\x10\x67\x4a"
+ "\x94\x55\x8b\xf1\x87\x7a\x85\x5a\xf0\x79\xc7\x45\x08\xdc\x4e\xe7"
+ "\xfb\x15\xcf\x64\x87\x07\x46\xc0\x9e\xde\x06\xc1\xeb\x99\x8b\xfd"
+ "\xaa\xb7\x57\xe8\xe4\xf4\xa7\xd8\xf0\xcb\x67\xdb\x8c\xa4\x13\xce"
+ "\x15\x81\x96\x8b\xd7\x5c\x5b\x34\xee\x0a\x63\x03\xec\x35\x7d\xce"
+ "\xe5\x7c\x9e\x6c\x42\xf9\x56\x7f\x31\x9d\x21\xe7\x5c\x86\xb6\xdc"
+ "\x2b\x73\xe3\x01\x36\x9c\xac\xcb\xa5\x9c\xe4\x67\x03\xd7\xa0\xed"
+ "\xaf\xd1\xa6\xb3\x04\xa9\x8d\xe8\x7f\x67\x17\xb6\x71\xe9\xe8\x5b"
+ "\x7d\xe9\x13\x4d\x7c\x76\x69\x7c\xc4\x77\xb8\x93\x72\x02\x17\xfa"
+ "\xb2\xeb\x1a\xfc\x22\x77\x56\xb0\x66\x3b\xc2\xcb\x2e\x03\xe5\x47"
+ "\x38\xd6\x89\xfe\x99\x70\xb4\xfb\x26\xa2\xbf\x35\x0c\xa0\x04\x71"
+ "\xfa\x4b\x4f\xef\x1d\xe0\xe7\xfa\x9d\xc1\xf1\x6f\xdb\xed\xbb\x8e"
+ "\x2d\xfd\x79\xb1\x8f\x3f\xc7\xef\xa4\x9c\xb0\x1c\xe9\xa3\x0f\x95"
+ "\x7d\x82\xf3\x30\xbe\x47\x97\x43\x14\xf1\xc1\x67\xca\x2b\x1b\x90"
+ "\xe6\x4b\x1a\x3f\x86\xfe\xbf\xc3\x2d\xd6\x60\xa4\x6f\xcd\xa3\xb5"
+ "\xeb\xc2\x02\xc6\x0e\x62\x7c\x27\x19\xc9\xc7\xb0\xcd\x7e\xcd\xa7"
+ "\xd0\xd7\x9b\xb9\x5f\x85\x42\x14\x2b\x3d\x13\x6f\x99\x8a\x78\xe8"
+ "\x57\xd5\xe8\x4f\xe4\x57\x88\xdb\xab\xf9\x14\xfa\x9a\x83\xf0\x50"
+ "\x86\x80\xbd\x1b\xe2\x8d\x14\x23\x7b\x0c\xdd\xcb\xc9\xc7\xd8\xab"
+ "\x8f\xb4\xb1\x5b\x9f\x6c\x13\xfd\xd4\xbd\x9c\x56\x9a\xc8\x9e\x1e"
+ "\xbb\x77\x9b\x74\x76\x77\xa0\x1f\x07\x90\x9d\xc5\x5a\x75\xf7\x72"
+ "\x94\xcd\xc1\x73\xf1\x17\xb0\x0f\xf8\x5c\xd5\x1d\x41\xed\xa5\x0d"
+ "\x6d\x1e\x1b\x76\x17\x8c\x67\x43\x1f\xdb\x19\xc5\xb9\x82\xdd\x25"
+ "\x34\x56\xb0\xcd\xe8\xf9\xaf\xe3\xf5\x25\xf2\x30\x1a\xcb\xc1\x9f"
+ "\x78\xd4\x87\x72\xfc\x4e\x8d\x47\x19\xda\xda\x55\x98\x7e\x5d\x7f"
+ "\xae\xc7\x51\x4d\x6b\xe2\xd4\x3e\x32\x94\xec\x7b\x36\xc2\xd3\x9e"
+ "\x0d\xf8\xb6\x9f\xbb\xc2\x4b\x56\x7e\xb1\xd2\xb3\xa6\x5d\x53\xd1"
+ "\x8f\xb8\xbc\x67\x93\xaf\x27\x6f\xa4\x2a\xe6\xc9\xba\xd9\xe4\xdf"
+ "\x67\x5f\xb1\x57\x02\x10\x4c\xbe\x97\xf4\xe3\xdc\xe3\xbb\xbe\x7f"
+ "\xed\xdf\x1b\xce\x9e\xf0\xfe\xbd\xe1\x6c\xfd\xb5\x7e\x6f\xf0\xe6"
+ "\xdb\x33\x85\xf8\xba\x2d\x49\x8a\x8e\xf7\x88\x7b\x1c\xde\x5a\xfb"
+ "\xe8\x1a\xfd\xf7\x4c\x4f\x2a\xc9\x70\x84\xce\x5e\xbf\x3d\x49\x61"
+ "\x48\xa7\x9e\xcf\xe1\x3d\x29\x22\x7f\xa1\xbc\xa8\x27\x9e\x70\x7c"
+ "\xf5\x18\x2d\xfe\xa1\x07\xe8\x76\x99\xbf\x4c\x7a\x08\x42\xe8\x7e"
+ "\x57\x8a\x56\x6d\xf0\x42\x06\x36\xce\x0b\xe6\xce\x8b\x38\x3e\xc3"
+ "\x22\x40\xf2\xdd\xc5\x5f\x8c\xa3\xf8\xa3\xf5\x9f\xa3\x4c\x16\xf2"
+ "\x72\x7a\x43\xa0\x48\x7e\x45\x3a\x8c\x84\xeb\xb4\x66\xa0\x35\x19"
+ "\xaf\x50\x14\x2d\x4a\x9a\x84\xf4\x6a\x38\x32\x63\x23\x92\xbe\xf6"
+ "\xce\xf4\xef\x04\xf1\x7e\xc7\xe2\x97\xac\x63\x30\xd3\x6f\x25\xff"
+ "\xa7\x4a\xdf\x69\x1e\x05\x19\x6a\x42\xf4\x2c\x43\xa0\x68\x12\x7f"
+ "\x08\xa6\x3f\x43\x48\x2f\x0a\xeb\x17\xd5\x8d\x22\xdc\x3c\xb0\x45"
+ "\x87\xde\x24\xc4\x5f\xec\x45\xe3\x73\x96\x19\xba\xe7\x99\xe2\x76"
+ "\xb7\xe3\x0b\xa4\x7f\xfd\xa2\x3a\x26\x6b\x8f\x1e\xf7\x58\x9c\x34"
+ "\x1e\xaa\xc7\xfe\x8b\xf7\x69\x20\xbd\x87\x7a\xea\xef\x31\x79\xbf"
+ "\xc7\xfb\xd4\xdf\xbf\xf4\x0b\x90\x1c\xea\xe8\x4f\xa1\x73\x0a\xc0"
+ "\x7d\x11\xa3\xc0\x60\x9f\x21\x13\x6c\xf6\x19\x42\x9e\x22\xa5\xf1"
+ "\x43\x79\x6a\x75\x60\xe3\xf8\xd8\x5f\x4e\x99\xb6\x45\x0e\x88\x99"
+ "\xae\xb1\x3e\x75\xaf\x0f\x8c\xde\x6f\x52\x25\x2c\xf6\xc0\x18\x7c"
+ "\x0e\x53\x75\xef\x4a\x3c\xfe\xa9\x01\x58\x92\xf2\x05\x88\x3a\x51"
+ "\xfe\x14\x8b\x42\xe3\x63\xa2\x7c\x49\x85\x89\x59\x1c\x23\x11\xbf"
+ "\xd1\x7f\x6c\x34\x50\x32\x59\xc1\x24\x80\xc9\x87\x2f\x64\x1e\x9f"
+ "\x28\x13\x65\xa2\x4c\x94\x89\x32\x51\x26\xca\x1f\x41\x51\xf4\x1f"
+ "\xd6\x74\x2e\xf7\xd7\xe4\x5d\xff\xfd\xa3\xc8\x4b\x0f\x33\x7c\x9e"
+ "\x76\x4c\x16\x28\x8a\xaf\x53\x6b\x52\x9c\x21\xe6\xa5\x0e\xd3\xde"
+ "\x6c\x97\xff\x4b\x89\x0d\x51\xbb\xd3\x7b\xc3\x2b\x97\xb5\x2d\xb2"
+ "\x16\x0c\x19\x4b\x12\xea\x23\x6b\x57\xf6\x84\x96\x27\x35\xc7\xed"
+ "\xcb\x1b\x08\xdc\xf6\xa8\x6d\xde\x9e\xcc\xbe\x88\xaa\xe4\xce\x25"
+ "\xfb\x37\x8d\x18\x8a\xef\xff\xed\xec\x37\x9f\xee\x9e\xba\xf3\xaf"
+ "\x8f\x2d\xf8\x45\xce\xc5\x80\xd2\xbf\x6c\xfc\xb3\x9f\x3d\xfb\xe1"
+ "\xb4\x7f\xfa\x51\xfb\xe2\x5f\x6f\xb8\x72\xd3\xdf\x3d\xf4\xdf\xdf"
+ "\xfc\x97\x55\x1f\x84\x55\x7c\xbf\xe5\xce\x5f\xad\xbb\xf4\x8d\x1d"
+ "\x8f\x1f\x89\xfe\x79\xd6\x85\x19\xd5\x4f\x9d\xba\xe7\x37\x9b\xdd"
+ "\xca\x96\xfb\x0e\xcc\x7a\x23\xf5\xcc\x94\x7f\xfc\xab\xa3\xb1\xef"
+ "\x3c\xff\xf1\xe4\x97\xff\xe2\xd0\xb7\x7f\x9a\x71\xee\xb6\x1f\xff"
+ "\xf0\xe4\xdd\xef\xad\xbf\x3c\xe9\xc5\x07\xdf\x9f\xfb\xcf\x69\xff"
+ "\x7b\xcb\x2b\xdf\x3b\xb1\xf0\xdd\xb5\x9f\x04\x6d\x7f\xec\xf0\xfc"
+ "\x7f\x5b\x7d\x7e\xfa\xeb\xcb\xbb\xbe\xfb\x9f\x2f\x5c\xf5\xdb\xfa"
+ "\xc0\xc1\x39\x6f\xad\x38\x7b\xf3\xae\xbf\x39\x7e\xc7\x2f\x73\xfb"
+ "\xbf\xfe\x0f\x8f\x34\xfd\xf9\xbf\x3e\xf7\xd1\xed\xaf\x3d\xd9\xf1"
+ "\x9d\xff\xd8\x38\xfc\xb5\xbf\x7f\xf8\x7f\xbe\xf5\x93\x67\x7e\x77"
+ "\xeb\xab\x3f\x68\xbd\xeb\xdf\xf3\x07\x83\xcb\x9e\xb0\xc7\xbc\xbd"
+ "\xe6\xff\x66\x5a\xfe\xf6\xf4\xbd\xff\x55\xc8\x3e\x8f\xfd\xc0\xcf"
+ "\x78\xf3\x57\xd9\x6f\x9e\xe4\x91\xc0\xd5\x6d\x9f\x99\x8e\x41\x91"
+ "\xfd\x2f\x00\x45\x0b\x41\xf1\x87\x9b\x8c\x9f\xe1\x8b\xe1\xb3\xea"
+ "\x7d\x8d\xa2\xea\xdb\xdf\x48\xa1\xf5\x8a\x58\xbc\xee\xc0\xeb\x76"
+ "\x0e\xf1\xac\x02\x44\xde\x20\x8d\xaf\xae\x28\x68\x03\x3f\x94\x70"
+ "\x12\xdc\x84\x56\xf3\x87\xc9\x10\x00\x5f\x87\x40\x08\x82\x6f\x40"
+ "\x30\x84\xc0\x14\x98\x0a\x37\x43\x28\xdc\x02\x61\x70\x2b\x84\xc3"
+ "\x6d\x30\x0d\xb5\x8a\x80\xe9\x30\x03\x66\xa2\x71\x66\xc1\x6c\x98"
+ "\x33\xbe\x5e\x45\x10\x1f\x8e\x7f\xf0\xff\xa5\x7c\xd5\xa6\x08\x52"
+ "\x26\xe0\x5f\x29\xbc\x4e\xc2\x1d\x12\xee\x9c\x80\x7f\xa5\x70\xf5"
+ "\x0f\x7c\x9f\xf5\x07\xbd\x2b\x98\x46\x88\x4c\xc2\x2b\x9f\x18\x2d"
+ "\xbe\x50\x45\x96\xd1\x77\xf8\x3d\xed\xc7\xd0\xf3\x6e\xef\x5b\xe2"
+ "\xf1\x8a\x13\x8f\x85\x00\xf2\xb7\x07\xa6\x2f\x23\x17\xbc\x4a\x85"
+ "\xf2\x5b\xe3\x94\x22\xfa\x55\xc5\x1f\x42\xf9\xdf\x1b\x28\xf4\xcb"
+ "\xe2\xc1\x12\xbc\xcc\x78\xed\xc2\xcb\x82\xd7\x4f\x35\x56\xa0\xcc"
+ "\x0e\x07\x65\xce\x52\xbc\xef\xc3\x7b\x1f\x28\x91\x45\xa0\x7c\x0b"
+ "\x85\x9f\x5b\x07\x4a\x54\xbc\x47\x99\x58\xe7\xa8\xd4\x4a\x8c\x84"
+ "\xab\xf8\x1c\x97\xee\xc3\xf0\xd3\xce\x77\x75\x0f\x26\x25\xaa\xb1"
+ "\xd1\x71\xd1\x0b\x17\xaa\xf3\xe7\xab\x0b\x4c\xb1\x0b\x62\x4c\x71"
+ "\x31\x0b\x62\x55\x53\xec\xe2\xb8\x45\x8b\xef\x88\x53\x57\xaf\xcf"
+ "\xc9\x88\x35\x3d\x93\xa6\xae\xca\xc8\x59\x9d\x9f\x9a\x93\x76\x23"
+ "\x8a\x7f\xfa\x82\xea\xc0\xf4\xab\x42\x4c\x7d\xaf\x29\x70\x2f\x18"
+ "\xfa\xf6\xe2\xbc\x64\x86\xb1\xdd\x1c\x25\x2f\xef\xa2\xfc\x2c\x02"
+ "\x94\x9f\xa8\xa0\xbc\xb9\x0d\x94\xaa\x4a\x50\x5e\x49\x00\xa5\x01"
+ "\x61\xef\xfb\x83\x52\x97\x0c\xca\xaf\xd1\xe6\xbf\xe8\x19\x0b\x73"
+ "\x0c\x09\x58\x5f\x01\x28\xbf\xdb\x03\xca\x99\x12\x50\x4e\x76\x0a"
+ "\xd8\x20\xe2\x5c\xdc\xf4\xe5\x28\xff\x99\xcb\xa7\xed\x6f\xe5\xff"
+ "\x01\x88\x8f\x0c\x51"
;
diff --git a/sys/dev/mxge/ethp_z8e.h b/sys/dev/mxge/ethp_z8e.h
index de63bbea08dd..3da83416c600 100644
--- a/sys/dev/mxge/ethp_z8e.h
+++ b/sys/dev/mxge/ethp_z8e.h
@@ -1,6 +1,6 @@
/*******************************************************************************
-Copyright (c) 2006-2011, Myricom Inc.
+Copyright (c) 2006-2012, Myricom Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -28,7535 +28,7590 @@ POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
***************************************************************************/
-static unsigned int ethp_z8e_uncompressed_length = 385956 ;
-static unsigned int ethp_z8e_length = 120433 ;
-static unsigned char ethp_z8e[120433 + 1] =
- "\x78\x9c\xec\xbd\x7f\x7c\x94\xc5\xb5\x3f\x7e\x76\xb3\xc0\x26\x06"
- "\x36\x42\x84\x95\xa2\x5d\x2c\x68\xb4\x20\xd1\x62\x4b\x2d\xd4\x20"
- "\x41\xc1\xf2\x4b\xc1\x36\x2a\x1a\x50\xa0\x8b\x46\x88\x10\x61\x81"
- "\x90\x5d\x16\xb4\x09\x02\x89\x1a\x35\x4a\x48\xe8\x15\x2d\x6d\x69"
- "\xc5\x16\x2b\x3f\x42\x59\x9a\x78\x2f\xd0\x24\x9b\x56\xf0\x93\xdb"
- "\x8b\xb7\x2b\x37\xd2\x94\x1b\x60\x4b\x16\xb2\x26\xbb\x3b\xdf\xf7"
- "\x99\x79\x9e\x64\x77\xd9\xa0\xdc\x7b\x5f\xaf\xef\x3f\xcd\xeb\xb5"
- "\x79\x9e\x67\x9e\x99\x33\x33\x67\xce\x39\x73\xce\xcc\x99\xf3\x10"
- "\x5d\xfd\x9f\x8f\xcc\x7c\x31\x90\xb1\xa9\xec\xf0\xff\xa0\xfc\x3f"
- "\xff\xfe\xf9\xf7\xcf\xbf\x7f\xfe\xfd\xf3\xef\x9f\x7f\xff\xfc\xfb"
- "\xff\xf7\xcf\x6f\xa0\xb1\x17\x8c\x26\xfa\x43\x19\x51\x87\xdb\x3c"
- "\xcc\x47\x91\xbc\x37\x5e\x15\x21\xbc\x32\x60\x9e\x1f\xc6\x57\xfe"
- "\xbd\x82\x34\x63\x19\x99\x6f\x4a\xa3\x34\xf1\x86\xd5\x38\x69\x1b"
- "\x51\xf9\x60\xd1\xf6\xea\xeb\xc2\x5f\x57\x48\x54\xbb\x03\xcf\xaf"
- "\x8b\xd6\x57\x07\x8b\x00\xe0\xcc\xf3\x51\x6e\x39\xc3\x59\x8f\xe7"
- "\xf5\x48\x47\x5a\x81\x8f\xe6\x6d\xe0\xb4\x52\x94\xd3\xd3\xbd\x1b"
- "\x2e\x51\x9d\x2d\x44\xa5\x0c\xc7\x16\xa6\xec\xe1\xb2\x1d\xdb\x91"
- "\x37\x95\xf3\xae\x1b\x8c\x7a\xd3\x89\xdc\xaf\x8b\x60\x54\x1b\xcc"
- "\x5c\x0f\xd7\xad\xe5\x6f\x8a\xab\xcf\x8f\xb4\x16\xbd\xbe\x5e\x60"
- "\xa4\x71\x79\xee\x83\xed\x46\x4a\x3a\x4d\xd7\x5c\xc7\x30\xb9\x6d"
- "\xc2\x4d\x66\x6f\x67\x88\x4e\x53\x72\x46\xbb\x9b\x92\x6a\x81\x8d"
- "\x2d\xaf\xcb\xf4\x24\x6f\x20\x44\xb6\x22\x32\xe0\xdd\x74\x5c\x8d"
- "\x28\xd7\x9f\xf1\x33\xbb\x92\x46\x70\xdd\x80\x6b\x12\x46\x8f\xa1"
- "\x7a\x20\x11\xe3\x28\x60\xa4\x5b\x02\x6e\x32\x74\xb8\x93\xd1\x7f"
- "\x73\x86\xec\x3f\xea\x45\x59\xd3\x69\x4a\xf9\x87\x11\xf9\x51\xa7"
- "\xdf\xb6\x9a\xdb\x90\xf2\x91\x70\x7b\x8c\x3a\x9c\x88\xdb\x73\x4d"
- "\xd5\x2b\x44\xed\x6e\xe3\xd4\x80\xd1\x22\x34\x38\x35\x3a\x1c\xce"
- "\x87\xba\x52\xb9\xae\x76\xb7\xe9\x95\xa8\x3c\x3e\x3d\x0f\xda\xed"
- "\x1f\x13\xa0\x24\x6e\xf3\x29\x4a\x19\xc7\xf5\x69\x7d\x31\x71\x1d"
- "\xde\x15\x21\xf2\x62\xec\x51\x77\x3a\xfa\x6a\xab\x0d\x12\x01\xe6"
- "\xb5\xd5\x45\x44\x0c\x1f\xed\xb7\x29\x98\x29\x63\x75\x98\x0c\xa3"
- "\xbb\xaf\x6e\xcf\xc0\x6a\xd9\x46\xee\xab\x99\xb4\xbc\xf3\xa2\xdb"
- "\xc8\x70\xd1\x97\x21\xdc\x97\x3a\x50\x94\x96\x67\x43\x37\x3e\xba"
- "\xfb\x7f\x4d\x56\x1c\x6c\xab\x82\x6d\x00\x6c\x83\x47\x2b\xd7\xdd"
- "\x7f\x5f\x5c\x7e\x95\x37\x2d\x39\x60\x14\x1a\x1e\x52\x5a\x7b\xf2"
- "\x26\x97\x47\xe7\x45\x7b\x8c\x0a\xb7\x64\xf4\x51\x4a\x33\xfa\x99"
- "\x84\x3c\xd3\x30\x8e\x36\xed\xfd\x75\xda\x7b\x2b\xde\xdd\xa3\xe0"
- "\x5d\x33\x2e\x0a\x5e\x1a\xc3\x8b\xa6\x2d\xc5\x51\x26\xfc\xfa\x40"
- "\x41\xee\x8b\x5f\x3f\xb3\x4e\x6f\xcb\xad\x22\xe2\xbc\x1e\x7d\xda"
- "\xb8\x2f\x2b\xe2\x16\xe4\x75\x04\xc9\x36\x94\x9c\xa7\xe8\x9a\xdd"
- "\x80\x4f\x5b\x56\x93\xd9\x99\x2f\x82\x5e\x47\x1b\x35\xfa\xdb\xc8"
- "\xe9\x07\x6f\x84\x2e\x52\xd1\x45\xd0\x62\xe8\x2c\x15\x3d\x47\xd6"
- "\xba\xc2\xcf\x29\x11\x2d\x47\x8c\x82\x9c\xc3\xb8\x6c\x0b\x35\x56"
- "\xb6\x90\xb3\x32\xb6\xac\xf3\x06\xb2\x36\xe0\x19\x63\x6e\xe1\x76"
- "\x30\xbf\x85\x52\xf6\x65\x15\xbe\x49\x26\xe7\x70\x32\x36\x2c\xf0"
- "\x68\x6d\x49\x75\x70\x5b\x36\x9c\x21\xf3\xdb\x8b\x40\x87\x67\xb8"
- "\xbd\x87\xb3\xde\x5b\x1d\x34\xd6\x5a\xa7\x51\xad\xf5\x24\xd5\x59"
- "\x27\x50\x9d\x23\x9b\xb6\x9c\xa1\xd4\xda\xe0\x78\xaa\x33\xdd\x47"
- "\x75\x23\xb2\xc9\xdb\x86\x7b\xf0\x6f\xad\x35\x40\xb6\x15\x4c\x4f"
- "\xa9\xf6\xf2\xa7\xc9\xec\x53\x30\x81\xbb\xd4\x82\xc3\x05\x44\x8c"
- "\x3b\x7e\x4e\xd4\x8f\xe5\xd7\x93\x15\xed\x6b\x45\x5b\xbe\x8b\xb6"
- "\xfc\x6a\x84\x95\x32\xd1\xe6\x7e\xde\x8a\x10\x99\x0a\x29\xb9\x17"
- "\x3e\x4e\x8f\x80\xf6\xc0\xbb\x6d\x55\x90\x27\xcc\xbf\xed\x6b\x72"
- "\x20\x13\x52\xc1\xff\xa9\x1b\x34\x1e\x68\x73\xfe\x94\x4c\xed\x2b"
- "\x73\x0c\xd5\xaf\x8b\x96\x0e\x77\x7f\xd2\xdf\x81\x17\x5b\xf0\xbe"
- "\x75\x4c\x3a\xa5\x79\x43\x59\x74\xa8\xb3\x95\xf9\xb1\x6d\x40\x80"
- "\x0c\x0c\xcf\xe2\x00\xef\xac\xa0\x3e\x68\xcf\x9f\xaa\x91\xfe\x0d"
- "\xe4\x43\xf9\x2c\x1f\xbd\xd6\xc6\xe5\xc5\x90\xc7\x02\x91\x21\x8f"
- "\x5d\x8c\xbc\xf1\x58\xbb\x78\xe3\xb1\x0b\xe1\x37\x1e\xfb\x87\x73"
- "\x15\x99\xc3\x43\x1e\xf3\x37\xe6\xcb\x31\x48\x6b\xcc\xc7\x18\x84"
- "\xc9\xbc\xf6\x2c\xa5\x3d\xf1\x1c\xc6\x3e\xf4\x29\xad\x5d\x4c\xd6"
- "\x48\xf2\xa1\xa0\x37\x74\x82\x9e\x28\x24\x11\x49\xf6\x98\x13\xf5"
- "\xaf\x3d\xe5\xb0\x4b\xe7\x2d\xd4\xbb\xd7\x67\xdc\x3b\x8e\xeb\xf5"
- "\x27\x1f\x75\xe1\xb7\x01\xbf\x62\xfc\x36\x89\x94\xc3\x9b\x80\x2b"
- "\xe7\x80\x75\x06\xaa\xea\x24\x1a\x13\x21\xc3\x19\xea\x7f\x1c\xed"
- "\x4f\xeb\x05\x6f\xc3\x22\x1b\x8f\x7b\x6e\x71\x51\x51\x47\x87\x9d"
- "\x58\x16\xb2\xfc\x63\x79\xd8\xe1\x1e\x60\x43\x3d\x0e\xc9\xbf\xaf"
- "\x43\xc6\xa4\x1c\xf7\x20\xbd\x35\xb0\xc6\x6e\xf0\xaf\xb1\x1b\xdb"
- "\x53\x8e\xd7\x22\x4f\x36\xf2\xec\xd6\x70\xd8\xca\xb0\xc0\x5b\xfe"
- "\xfe\x21\x4a\x02\xcc\xfc\x0f\x2f\x35\x9b\xb6\xbd\x2e\x4e\x22\x5f"
- "\x5e\x37\x2c\xc0\x06\x1c\xe0\x7f\x80\x4b\x4f\x03\xae\x5b\x36\x23"
- "\x1f\x97\xf7\x06\xb3\x78\x4e\xf1\x79\xf3\x5a\xc9\x12\xa2\x14\xd1"
- "\xa5\xea\x43\x9e\x56\x96\xe9\xfd\x83\xd4\xb7\xc3\x4d\xb3\x18\x36"
- "\x97\xf3\xb6\xb5\x12\xca\xd5\x0a\xa7\xdd\x88\xf4\x19\x1d\xc2\x6e"
- "\xd8\x80\xf4\x5a\x94\xd7\xea\x6e\xd5\xdb\xc8\x75\xf0\x58\xcb\x76"
- "\x82\x1e\x6a\xf3\x82\xd4\xbf\x82\x92\x50\x6e\x36\xc3\x63\x58\xa0"
- "\x03\x1f\xfa\x5a\x5b\x9b\xe7\xa7\x88\x88\x81\xe9\x53\xf0\x2c\xe3"
- "\x62\xe0\x21\x5d\x00\x1e\xd3\x5f\x1d\xca\xf4\xdf\x2e\xe1\x3d\xf4"
- "\x61\x84\xe1\x05\xc9\x64\x93\xed\xfd\x21\xc3\xe8\x60\xf9\x01\x98"
- "\x9e\x15\xf7\x52\x1b\x59\xb6\xfb\x9d\xf6\xa4\x46\xcc\x9b\x5c\xfe"
- "\xbd\xa2\xd6\x3e\xa2\x3d\x27\x89\x69\x8e\xdf\x7b\x43\x17\x38\xcf"
- "\x3a\xd1\x6e\x4f\xea\xdf\x06\x59\x84\x3c\x28\xef\xe0\x76\x46\x8f"
- "\xe5\x43\x93\x7f\x38\x81\x7e\x98\x3d\x35\x7b\x02\x4d\x9f\x38\x69"
- "\x02\x65\x7e\x77\x74\xe6\xd8\x6f\x7d\xe7\x5b\xf2\xe6\x5b\xdf\x19"
- "\xf7\x2d\x9a\xf5\xa3\x87\x26\xd0\xac\x19\x13\x68\x36\x7e\xb3\x66"
- "\x4f\x7e\x28\x7b\xf2\xec\x09\x94\x73\xdf\x54\x3c\x4d\x9a\x70\x47"
- "\xe6\xfd\xa3\x67\x4d\x9a\x3a\x99\x1e\x9c\x73\x67\xe6\x9d\x77\xd2"
- "\xc4\xc9\xd3\xee\xc8\xcc\xd4\xae\x77\x64\x72\x96\x47\xc7\x4d\x9e"
- "\x3d\x7a\xd6\xb2\xa5\x05\x4b\x47\xcf\x98\x3a\x89\x53\x20\xdd\xa2"
- "\x68\x28\x23\x7c\x29\xc2\xb8\x0e\x88\xf3\x53\x28\x02\xd9\x51\x05"
- "\x1a\xc0\xaf\xcd\x53\x74\x0a\x32\xe0\xda\xe7\xab\x78\xec\xe4\x1c"
- "\x60\xa9\x01\xdf\x9b\x3a\xdc\x69\x85\xc0\xa1\x9f\x71\x68\xbb\x89"
- "\xe5\xc4\x90\x7d\x78\x77\x58\x9b\x6b\xfa\xe0\x7d\x65\xec\xfb\x41"
- "\x90\xc1\x96\x7f\x6b\xb4\x11\x79\xf1\x03\xde\x03\x90\x85\xc0\xaf"
- "\x9f\xda\x9d\x39\x7d\x40\xdf\x06\xd4\xd1\x02\xde\x6c\x42\xd9\xe6"
- "\x28\x9e\x6f\xc1\xf8\x34\xf1\xbc\x72\x8e\xd2\xde\x6f\x2c\xc8\x22"
- "\x1e\x27\x6f\x81\x06\xe3\x62\x37\x8c\x14\x09\x03\x63\x0f\x38\xc7"
- "\x15\x9c\x6b\x6d\x51\xf2\xc1\xc7\x70\xb6\xe0\x9d\x06\xeb\x62\x23"
- "\xe4\x04\xe4\xf8\x03\x11\x67\x06\x89\x94\x7d\x53\x22\x5d\x19\x72"
- "\xae\x44\xb9\x9c\x28\xba\x0e\xd4\x39\x90\xef\xed\x29\x06\xd0\x81"
- "\x01\xf3\x2f\xfa\x92\xb6\x00\xf4\x1d\x08\x6f\x3c\xfa\xb2\x38\x9f"
- "\xc3\x7a\x44\xdf\xd3\x34\xf0\x4f\xe8\x5f\x7d\x64\xe3\xd1\x32\xd1"
- "\x21\xd3\x18\x6f\x7b\x05\x3f\xa7\x20\x5f\x57\x77\xda\x3e\x4e\x03"
- "\x1d\x24\x31\xbf\x0a\x21\xd3\x31\x67\x0e\x5c\x05\x99\xd6\x8c\xbc"
- "\x65\x9c\x77\x4c\x88\xfa\x41\xd6\x58\x6d\x4e\x03\x9d\xa2\x81\x14"
- "\x49\x39\xfa\x4a\x54\x7d\x80\x33\x90\x27\x29\xa6\x47\x53\xc7\x79"
- "\xc0\x69\x97\xe9\xd0\x63\x06\x3e\x0e\xf8\xaf\xb2\xac\x54\xf2\x7b"
- "\xc8\xbf\x73\x3e\x6d\x6e\xee\x79\x06\xaf\x2b\x38\x43\xfe\xbd\x16"
- "\xb8\x64\x7d\x81\xf5\xbf\x0e\xf7\xc0\x39\x3e\xea\xef\x57\x73\xe3"
- "\x90\x66\xce\x1b\x41\x1b\x45\xea\xf5\xad\x80\x5b\xee\x59\xdd\x46"
- "\xa7\xf3\x79\xae\x1d\x98\x16\x71\xda\x29\xb6\x4d\xd7\xd6\x73\xfb"
- "\x59\x7e\x00\x17\x27\x40\x07\xc9\x80\xb7\x23\x96\x0e\x06\x7a\x00"
- "\xe7\x65\xb4\xaf\x19\x7d\x7a\xd9\x47\xd7\x1e\x89\xb4\xdb\x51\x2f"
- "\x19\xc1\x57\x90\xe7\x3d\x30\xb4\xf2\x2d\xb1\xe5\xaf\x2d\xe6\x72"
- "\xc8\xdf\xa7\xa3\x5d\xe6\xdf\xc4\x38\xd7\xe8\x0e\x74\x39\x28\x3d"
- "\x8e\x2e\xb7\xa1\x2d\xff\x19\xf5\x7e\x6c\xdc\xfb\x75\x78\xff\x5f"
- "\xda\x7b\xf0\xfd\xa0\x39\x71\x74\x9b\x8f\xf7\x7f\x43\x7b\x03\xe0"
- "\x6b\xe8\x16\xd7\x4e\x01\x8d\xf9\xa3\xf2\x6f\x88\xcb\xbf\x1d\xf9"
- "\xff\x9b\xe9\x86\xe7\x1c\xce\x5f\xad\xf1\x0e\xf2\x9b\x91\x7f\x4f"
- "\x5c\xfd\xf3\x91\x3f\x10\xd5\xbe\xe3\xb1\xef\xd3\x2b\xf1\xfe\x0b"
- "\xa6\x75\xe8\x44\x7d\x90\xa7\x1f\xcb\x12\x96\x63\xb5\x79\x3c\x5e"
- "\xe9\xa6\xb8\xfc\x23\x90\x2f\x55\xc3\x91\x51\xc3\xd1\x14\x1e\x47"
- "\xd4\x71\x52\xb5\x21\x7d\x5c\x5c\x99\x1c\x94\x49\x07\x1e\x5f\xd6"
- "\xe9\x32\x41\x99\xbc\xb8\x32\x9b\x78\x1c\x85\xaa\xc7\xd4\xd1\xd5"
- "\x53\x46\x93\x91\xd1\x30\xb8\x6f\xd7\x00\xc6\xee\x58\x18\x83\x5b"
- "\x51\xef\xb0\xcd\x4a\xee\x5c\x03\x1a\xba\x13\x69\xff\x0e\x98\xaf"
- "\x31\x0f\x80\x57\x03\x5e\x7f\x90\x84\x73\x4a\xaa\xa2\xdd\xeb\xae"
- "\x1d\x10\x22\xbe\x1f\xcd\xf7\x0c\x5b\x74\x4c\xd3\x78\xf2\xba\x6b"
- "\x71\x45\x7a\x3a\xeb\x6f\x06\x96\xc1\xa2\xe3\x07\x11\x05\xf3\xba"
- "\xbb\x84\x91\x8c\x78\x0e\x6b\x75\xfc\x09\xcf\x06\xb4\xff\x15\xcc"
- "\x39\x24\x56\x22\xdf\x6a\x9a\x84\xf4\xc3\x92\x57\x55\x3e\xf9\xac"
- "\xea\x98\xc2\xf4\x3d\x16\xcf\xfb\xb4\xf2\xef\x33\x3c\xdc\xdf\xa1"
- "\xdd\x1b\xc2\x0c\xeb\xbc\xce\x83\x83\x7f\x2e\xcb\x81\x0f\x25\x7c"
- "\x94\x17\x2b\xe5\x3b\x86\xf9\x1a\xae\x53\x71\x5d\x87\xeb\x83\xb8"
- "\x3e\xee\xfc\x82\xac\xce\xb0\xe4\x47\x7e\x9e\x8a\xeb\x43\xb8\xde"
- "\x85\xeb\x6c\x5c\x87\xe3\x7a\x2f\xfa\x10\x66\xbe\xc0\x3c\xca\x36"
- "\x56\x00\xf3\xaa\xa2\x2d\xb6\x01\x3a\xa6\x30\x0e\x26\x23\x4f\xab"
- "\xe4\x57\x25\x5f\xcc\x6a\x1c\xaf\x6b\x93\x69\x29\x32\xad\x9f\xa2"
- "\x07\x95\x16\xd6\xe5\xd0\xf9\x9e\x34\x4d\x36\x69\xbc\xa8\xa5\x29"
- "\xf8\xb3\x00\xdf\xc3\x6d\x15\x0a\x56\x1f\x35\xe6\x1a\x7c\x55\xce"
- "\x94\xa0\x4e\x43\x74\x9d\xb8\x96\x3b\x1d\x42\xe0\xea\xe2\x31\xf2"
- "\xd1\xe0\xdd\x42\xd2\x3d\xe6\x58\x05\x6f\xae\x96\x6f\x2c\xe3\x58"
- "\x96\x97\xe9\xe9\x4d\x51\xb4\x34\xb0\xc3\x3d\x38\x14\xc7\x47\x99"
- "\xa0\xa5\xdb\x99\x66\x18\xef\xdc\xb7\x01\xf9\x72\x1e\x97\x7d\x91"
- "\xf0\xcf\x2b\x9a\xac\xd2\xec\x56\xc5\xbf\x43\xb2\xe3\xe4\x8b\xa4"
- "\xd9\x38\x7e\x6f\x63\x9c\x27\x15\x32\x1f\x0c\x81\xfd\xf7\xde\x30"
- "\xa9\x33\x6e\x3c\xfa\x3a\xbf\x0f\x60\x8c\xb9\xde\xa4\x7c\xee\xc7"
- "\x90\x72\xfd\xbd\x7c\x97\x7c\x22\x8b\xe9\x3b\x29\x4f\xbe\xdb\x8d"
- "\xf9\x68\xaf\xfe\x4e\xaf\x27\xa9\x40\xbe\xab\xef\x81\xbb\xcf\xae"
- "\xc1\x4d\x4a\xa4\xf3\x89\xe2\x7d\x39\xa3\x89\x8c\xb7\xb9\xa8\x8f"
- "\x37\x74\x9c\x66\x86\x44\x78\xb4\x8b\x92\xbd\xa1\x5d\x74\x2b\xd1"
- "\xb5\xde\xd0\x49\xba\x8d\x68\xb8\x37\x54\x0e\x1d\x64\x07\xbf\x3f"
- "\x74\x0b\x19\x0c\xb8\x3a\x6f\x76\x19\x0d\xde\x50\x01\x8d\x70\x99"
- "\x70\xcd\xa3\xfb\xfa\x88\x0e\x6f\x68\x1a\xf2\x2d\xa0\x99\x61\x71"
- "\x3e\xbb\x8f\xf8\x6b\x6e\x98\xd2\xa6\xbd\x20\x9c\xde\x10\xec\x81"
- "\x50\x3d\xd2\x23\x62\x66\xf8\x0b\xfc\x3a\x44\xa4\x78\x9f\x7d\x66"
- "\xf8\xbc\x98\xf4\xc2\x21\x3c\xff\x55\x60\x8c\x84\x37\x34\x9e\x1a"
- "\x03\x01\xe4\x73\x0a\x51\xb2\x2f\xe7\x89\x8b\x46\xea\x82\x0e\x11"
- "\x29\xd9\x67\x47\x5f\x1c\x5d\xe8\x07\xe6\xd7\x95\x5d\x6b\x70\xdd"
- "\xb8\x6f\x85\x7c\x2e\xde\x57\x2c\xcc\xfb\x1c\xb7\xc3\xb8\xe2\x3e"
- "\x78\x43\x2d\x94\x0b\xf3\x60\xe6\x2a\xbf\xe0\xf6\x0f\x58\xc7\xb6"
- "\xd5\x78\xc2\x18\x58\x66\xae\x72\x0a\xbc\x33\x8b\xe4\x7d\x0e\x6f"
- "\xa8\x8d\x50\x47\x31\xe0\xbd\x20\xe1\x15\xef\xdb\x89\xbc\x7e\xce"
- "\x17\x0d\x87\x61\x70\xde\x99\x61\xb2\x20\xff\xce\xae\xe4\x7d\x15"
- "\xf8\xed\xc5\xaf\x15\x65\x3b\x85\x3b\xfd\xb0\xc0\x7c\x2f\x8a\xf7"
- "\x9b\x45\xca\x7e\x6b\x10\x3c\x2c\x71\x19\xa6\x7e\xa2\x64\x3f\xc6"
- "\x99\xb2\x41\x77\x68\xef\xfe\x71\xb2\xbd\x1b\xf7\x7f\x27\x28\xfb"
- "\xb1\xff\xdb\xaa\x1f\xfb\xef\xe2\xf4\x76\xe8\x3a\xb8\xcf\x69\x57"
- "\xef\x7e\x84\x72\x73\x64\xb9\xe2\xfd\x39\xc2\xbc\xdf\x1e\x04\x7f"
- "\x01\xaf\x2e\xc6\x23\xf0\xea\x62\x5c\x02\x7e\x8e\xd7\xb1\x89\x44"
- "\xf2\x7e\x7b\x57\xf2\x7e\x07\xca\x6f\xec\x92\x3a\xc8\xfe\x8a\xa0"
- "\x82\xfd\x06\xe0\xcc\x05\xdd\x26\x01\x46\x05\x60\xed\xec\x72\xdb"
- "\x68\xe6\x2a\x11\x9c\x19\x5a\x17\xca\x5d\x45\x49\xa3\xc8\x85\xf6"
- "\x1e\x04\x8e\x16\xa0\x9f\x75\xb8\x66\xe3\x3d\x0d\x42\x5d\x87\x00"
- "\xb7\x82\xeb\x43\x3d\x3b\x01\xf3\x1d\xc0\x5a\xc0\x6d\xfa\xc2\x4d"
- "\x69\x78\xde\xfb\x85\x6a\x5f\x73\xa4\x78\x7f\x30\x62\xde\xdf\xaa"
- "\xd3\x10\xd3\x8f\xc2\x5b\x39\xcd\x08\x88\x90\x37\xb4\x8d\x40\x63"
- "\x69\x8d\x81\x93\xfc\x1e\xf6\xcf\x2e\x8c\x33\xd3\x54\x01\xae\x3b"
- "\x88\xe9\xa7\x31\xff\x05\xce\x7b\x88\x69\x68\x46\x7e\x60\xdd\x68"
- "\xca\x37\xe0\xd9\x99\x1b\x32\xd3\x13\xf9\x26\x57\xb8\x78\xff\x91"
- "\xc6\x7c\x1e\x97\xe3\x28\xc3\xe5\xf2\xc8\x62\x80\x0d\x60\x10\x21"
- "\x8b\xc3\x6f\xea\x6f\x77\x8a\xc6\xc0\x34\xe4\xcd\x27\xee\x0f\xd3"
- "\x11\xe7\x9f\xde\x26\x7c\x61\xf3\x01\x07\xf7\x4d\x0c\x70\x51\x43"
- "\xdb\x5d\xc4\x76\x58\x43\xdb\x0e\xa6\xd3\x88\x30\x1f\x98\x02\x1a"
- "\xed\x9a\xde\xe6\xea\xf3\xc4\x45\x32\x20\x2d\xdc\x60\xdf\x85\xf7"
- "\x75\xc8\x57\x2f\xe9\x76\xc6\xc5\x90\x25\x64\xde\xbf\x37\x54\x7c"
- "\x20\x67\xc6\xc5\x2e\xd1\x60\x2f\xa7\xc7\xdb\x5c\xc0\xd5\x2e\x9a"
- "\x7e\x36\x94\xd4\x98\xbf\x00\x79\x3a\x90\xbe\x43\xd2\xff\xf4\xb3"
- "\xed\x62\xc6\x73\xe2\xfc\x8c\x8b\x7f\x15\xd3\xed\xe2\x50\xae\x83"
- "\x06\x5c\xb3\x4e\x44\x98\x2f\xea\x5b\x76\xd1\x35\x27\x7d\xc4\x3c"
- "\x31\x6d\x7e\x44\x4c\x3f\x7b\x5e\x3c\xf1\x1c\xe3\x66\x3c\x35\xd8"
- "\xc1\x3f\x8e\x72\xc6\x77\x73\x83\xbd\x06\xf5\x67\x03\xae\x53\x78"
- "\x1d\xdb\x90\xd7\x63\x79\xfc\x6c\x1a\xd5\xb7\x94\x53\x28\x79\xff"
- "\xde\x70\xc9\xfe\x23\x91\xe4\xfd\xad\x91\x92\xfd\x41\x91\x7c\x60"
- "\x4a\xa8\xe4\x40\x4e\x38\xf9\x00\x68\xe0\xc0\x11\x8c\x53\x32\x8f"
- "\x79\xa7\x9b\x6c\x78\xfe\xd7\x4e\x1e\xff\xe2\x03\xcd\xe8\x6b\x10"
- "\x3a\xaf\x50\xb4\x7f\xa0\x99\xd7\x16\x50\x36\xd8\x95\x7c\x00\x3a"
- "\x19\xae\x92\xf6\x6a\xcc\x4c\x97\xc8\x67\x14\x1b\x6b\xfa\xc1\xee"
- "\x49\xea\x4a\xae\xb1\xe2\x97\x81\xdf\x38\xa4\x15\x03\xfe\xb5\x92"
- "\xa6\x8a\x6b\x8a\xc5\xf7\xcb\xa0\x43\x5f\x04\x9c\x9a\x9d\x33\xc3"
- "\xf7\x08\xe0\x10\x7c\x52\x53\x1c\x29\xa9\xa9\x00\xac\x23\x41\x49"
- "\xfb\x35\xff\xc6\xb0\xbb\xd6\x64\xf0\x9a\x83\x09\xef\x9b\xc5\xc6"
- "\x83\x0f\x04\x99\x56\xcd\x07\xa7\x44\xcc\x07\x77\x8a\xe2\x83\x39"
- "\x3f\x78\x41\xf8\xc3\xc5\x07\x1d\x91\xe2\x83\xf6\x50\x5f\xe8\xe6"
- "\x8e\x1a\x62\xf9\x14\xfa\xbd\x00\x0e\x3e\x02\x3e\x76\xc8\xf1\xf7"
- "\x3a\xc0\x03\xab\x86\xba\x1a\xda\x40\x0b\xf9\xbf\x92\xb2\xa9\x31"
- "\x70\x5c\xe2\x54\x24\x1f\x9c\xc2\x34\xc5\xe3\xfb\x44\x3e\xb9\x44"
- "\xc9\xc1\x9c\x48\xc9\x41\x7b\xb8\x04\x70\x93\x51\x4f\xca\xa1\x33"
- "\x41\xc9\xaf\x87\x40\xaf\x35\x28\xf3\x11\x29\x1a\x3f\xd4\xda\x9b"
- "\x8c\x64\x59\xc5\xf2\x69\x66\x28\xc8\x34\xf3\x37\x96\x6b\x4a\x4e"
- "\x51\xae\x2e\xa7\x58\x46\xb1\xbd\xc3\x72\x2a\xa2\xc9\xa9\x88\x26"
- "\xa7\xe4\xb3\x19\xb2\xa6\x78\x9f\x83\xe5\xd1\x4c\x87\x92\x33\x33"
- "\xc3\x99\x02\xb4\x91\x0a\x18\x0e\x35\x16\xc8\xb3\x71\xdf\x0b\x32"
- "\xbf\xc4\xd3\xbe\x9d\x11\xc8\x1b\xfc\xf6\x46\x94\xbc\x09\x6a\xf2"
- "\xc6\xa8\xcb\x9b\x30\xe6\x35\xf0\x54\x24\x91\xbc\x89\x68\xf2\x26"
- "\x2c\x94\xbc\x89\x68\xf2\x86\xd3\xc3\x9a\xbc\x09\x27\x90\x37\xe0"
- "\x67\xee\x6f\x92\x26\x67\x5c\x2c\x67\xb8\xbf\xa0\x35\x7b\x44\xc9"
- "\x99\x62\xd8\x3a\x46\x96\x33\x61\x94\x89\xe8\x72\xa6\x43\x96\xdf"
- "\xc9\xb2\xa6\xeb\x45\x82\xfc\xb4\x11\xcb\x18\x29\x4f\x42\xc3\x43"
- "\x2c\x4f\x80\xbf\x7b\xe2\xe5\x09\xe0\xed\xc5\x7d\x9a\x26\xa7\x5a"
- "\x61\xe9\x86\x20\x4f\x8e\xcc\x74\x04\x30\xd6\x9f\xc2\xf6\x87\xdc"
- "\x76\x14\xb8\xbc\x8e\x10\x41\x0e\x04\x45\xa3\x8b\xd0\x46\xd0\x6f"
- "\x18\xb2\x82\x08\x7c\x39\x25\x04\x1e\x07\x8d\xe7\x34\xe6\x9f\xa0"
- "\x30\x78\x75\x7a\x5b\xbb\xf7\x89\x40\x46\xda\xf4\xb3\xc2\x0f\xfc"
- "\xf8\x9e\xc8\x77\x41\xbe\x64\xf8\x1b\xda\x0e\xd2\xb4\x16\x11\x99"
- "\x36\xcf\x67\x03\x0f\xe4\x4c\x5f\xec\xb1\x3c\xf1\x5c\x1a\xf8\x4c"
- "\x78\x20\x17\x3f\x9e\x7e\x36\xcd\x32\xb7\x85\x6e\x9c\x36\x5f\x44"
- "\xc2\xe0\x33\xf4\xf7\x08\xfa\xdd\x8c\xb6\xb7\x82\xe7\x82\xe0\xb3"
- "\x29\xa1\x38\x3e\x13\x29\x07\xfe\x15\xf7\x36\x85\xbf\x03\x41\xf0"
- "\x59\x73\x44\xce\x67\x2d\xd2\xc6\x44\x3d\x72\x2d\x0e\xbc\xd6\x1c"
- "\x29\x51\xbc\x16\x11\x8a\xd7\x22\x8c\x3f\xa3\xc6\x6b\x18\x0b\xf0"
- "\x8d\x15\xbf\x0c\xfc\x12\xf3\x5a\x7e\x14\xaf\x3d\xa7\xf1\x5a\xb2"
- "\xe2\x35\x8c\x69\x52\x78\x8d\xe2\x37\x86\xcf\x76\x68\x37\xbf\xa5"
- "\x1c\x9c\x82\x7b\x83\xa2\x1d\xc9\x73\x98\x57\x0e\x3a\xc0\x6f\x76"
- "\xf0\x1b\xe0\x09\x3f\xcb\x4d\xd0\xe6\x7f\xf2\x5c\x37\x23\x5f\xfc"
- "\x67\x6e\x78\xa8\x0b\xfc\xe4\x80\x2c\xfb\x2b\xe4\xe8\x7f\x3e\x11"
- "\xa0\xed\xe0\xa7\x29\xe0\xa3\x1c\xf0\x93\x1d\x7c\xc5\xfc\xd4\x1a"
- "\x5e\xc3\x30\x0f\xb5\x76\xc3\x90\x73\x65\x2c\x3f\xf5\xb6\x0e\xda"
- "\xe1\xb6\x15\xfa\xe8\x40\x3e\xeb\x2b\xb8\x2f\xf6\x51\x4d\xb6\x76"
- "\x0f\xfd\x67\xbb\x55\xea\x31\xe0\xc1\xfc\x22\xba\xee\x0c\x0d\x9f"
- "\x02\x7a\x27\xdc\xa7\xe2\x7e\xda\xcc\x5b\x0f\x89\xc8\x26\x83\x15"
- "\xf5\x76\x30\x1f\x0a\xf7\x58\xd6\xcf\xb2\x40\x87\x66\xd1\x91\x91"
- "\x2a\x52\x8e\xdd\x28\xba\xac\xbc\xd6\x66\xc1\xf3\x00\xf4\x7f\x04"
- "\xae\x03\xb7\x5d\xa2\x74\xfc\xac\xdb\xdc\x11\x17\xeb\x4e\xb8\xcf"
- "\x14\x2b\xad\x29\x5b\x56\xd0\x28\x4b\x80\xcc\xd5\xee\x48\x8e\x65"
- "\x5d\x1a\xaf\x39\xa5\xf3\xbd\x70\xef\x18\x5f\x7d\x89\x4c\xbc\x2e"
- "\x10\xe9\x8f\xfa\x1c\x16\x21\x96\x67\x50\xf5\x32\xc8\x07\x37\x59"
- "\xab\xdd\x62\x77\xb8\x83\x71\xb0\x2f\x47\x6f\x0b\xb7\x0d\xed\xbc"
- "\x01\xed\x9c\xfb\xf0\xaa\x2c\xfa\xc8\x41\x09\xd7\x6a\x3b\xdc\xc3"
- "\xbb\xfb\xdf\xcb\xfb\x4a\x1d\x27\xbd\xbc\xaf\xd1\xf1\xd4\xcb\xba"
- "\x9e\x89\xe7\xe8\xf0\x0a\xe1\x2f\x7d\x9a\x18\x17\x56\x67\x48\xfc"
- "\x17\xf0\xe8\x2a\x0a\xd3\x0d\x33\x57\x7d\x5d\x78\xdb\x84\xc7\xeb"
- "\x38\x4b\xd5\x78\x5f\x54\x28\x22\x91\xe4\x63\xa0\xd9\xa3\xa1\xf6"
- "\x15\x22\xc4\x6b\x39\x1d\xee\x9b\x6c\x3e\xfa\x9e\x47\x8d\xc5\xfe"
- "\x66\x69\x43\x9a\x8f\x86\x00\xeb\x5a\x86\xd5\x80\xf2\xe1\x92\x63"
- "\xd0\x3d\x6f\x9a\xe2\xa3\xa3\x39\x32\x9f\x79\x7f\x73\xfe\x6a\xfa"
- "\xda\x19\xba\x49\xe2\x58\x14\x1f\x4b\x67\x79\x80\xb4\x34\xa4\x6d"
- "\x12\x25\xc7\xac\xc8\xef\xf0\xd1\x07\xe5\x4a\x8f\xbd\x69\x93\x9e"
- "\x0f\xf7\xf3\xf8\x3e\x86\x7e\x0c\x72\x31\x1d\xb0\x6c\x3d\x9b\x55"
- "\x06\x6d\x79\x5d\xff\x4b\xc3\x2f\x2b\xf1\xeb\x1e\x79\x7e\x20\x07"
- "\xba\x16\x39\xd7\xd2\x30\x8c\x0f\xda\xf7\x0d\x03\xec\x88\xd3\xc2"
- "\x7d\x53\xc5\xdb\xab\x83\xb0\x13\xbe\x91\xea\xa3\x97\xea\x7a\xc3"
- "\xa7\x60\x5d\xe7\x92\x68\x2d\x5d\xd1\x8d\xcb\xcf\x66\xae\x8a\x08"
- "\xbe\x67\x79\x54\x8d\x74\xc6\x1b\xe0\xcc\xd1\x71\xd6\xfb\xb8\x1c"
- "\x4b\x53\x36\xe7\x37\xf6\x08\xb7\x20\xcf\x8d\xbc\xc7\xf4\x8d\x0f"
- "\x14\x1e\x0e\xb4\xb6\x43\x8e\xf0\x3a\x31\x6c\xb3\xc0\x72\xab\x08"
- "\x02\xe6\x4e\x1f\x8d\xca\xd4\xd6\xa1\x02\xde\xd0\x64\x96\x2d\x09"
- "\xe7\x2d\xde\x13\xeb\x81\x3f\xe2\x78\xe3\x30\xc8\x21\x29\x9b\x4e"
- "\x6c\x28\x52\xed\x0e\x32\x5c\x4f\xd1\x05\x6a\xc1\xfb\xe5\x01\xd1"
- "\x2a\x8a\x4f\x38\xd8\x8e\xf0\xac\xe8\xe4\xb4\x13\xa0\x6d\xe1\x59"
- "\xc6\x6d\x1a\x71\xc2\x73\x63\x27\x9d\x76\x50\x52\x75\xf7\xfa\xcf"
- "\x08\x0f\xaf\xf7\xa8\x75\xae\x11\x59\x3e\x1a\x1d\xd4\xdb\xc5\x3a"
- "\x06\xf0\xcb\xb8\x6e\x66\x5d\x83\xf7\x1e\x96\x17\x8a\x20\xeb\x1c"
- "\xc8\x9b\xa7\xf7\x81\xfb\xa7\xfa\x35\xc2\x15\xdd\x2f\xde\xa3\xb2"
- "\x14\x2a\x1c\x2c\x5f\x45\x66\x9b\xc2\xb5\x99\xfb\xcb\x7d\xe1\x3e"
- "\xcb\xbe\x48\x19\x8b\x39\x22\x74\x17\xec\x31\x99\xce\xb0\x60\xff"
- "\x8c\xd2\x68\x6a\x44\x56\x3c\x1d\x75\x8f\xa3\x79\xff\x4e\xd8\xa0"
- "\x37\x3a\x23\xe2\xd4\x69\x1a\xf9\x88\x5a\x3b\x1b\xf9\x48\x84\xf5"
- "\xec\x20\xd3\xaf\x57\xee\xbd\x78\x0b\x59\xde\xca\xbc\x83\x90\xb7"
- "\x05\x79\xa6\x6a\x79\xa7\xaa\x3d\x3b\x79\xed\xc7\x57\xcc\x63\xef"
- "\xf8\x68\xe4\x3c\xbf\x9c\xef\x4f\x64\xe9\xcf\xb0\xdd\x61\xff\x8d"
- "\xb4\x8a\x12\x6f\x30\x71\x5b\x0e\xee\xe4\xf9\x2c\x7c\x49\xb4\xa1"
- "\x9e\x21\x4c\x53\xce\x55\x74\x3d\xe8\xf2\xb3\xa2\xb5\x34\x88\xe9"
- "\x49\x24\x1f\x1b\xa6\xf0\x3e\x72\x97\x70\x43\xf7\x84\x44\xcd\x5f"
- "\x41\x5f\x03\x1f\xa5\x9f\xa1\x91\x87\x73\x0b\x6d\x68\x2b\x51\xe9"
- "\x39\x22\x29\x83\x92\x8f\x59\xbd\xa1\xcf\xa9\xfa\x1c\xaf\xed\x8c"
- "\xf4\xe9\xb4\x88\xfb\xb6\x2b\xc9\x0b\xcc\x33\x19\x6a\xed\xe1\xe6"
- "\x47\x78\x9f\xe1\x14\xdd\x9c\xcd\xfd\x55\x7b\x9c\x37\xdf\x25\x2e"
- "\x89\xb9\x42\xce\x69\x35\x56\x1f\xdd\x9c\x8f\x6b\x86\xfc\xb9\x69"
- "\x9e\xf6\x6c\x45\xbe\x11\xe2\x52\x84\xf3\x64\x20\x6d\xbc\x70\x1b"
- "\x98\x27\x6a\x3a\xdc\x37\xc3\x1e\xfd\x7e\xb3\x1a\x9b\x9b\xc7\x32"
- "\xac\x5e\xda\x60\xc5\xd8\x12\xd3\x26\x60\xfd\xc9\x56\xc4\x6b\x97"
- "\x37\xbf\x23\xf9\x02\xb0\xaa\x8d\x4a\x6e\x47\xd0\xd6\x2a\x77\xc4"
- "\x0e\x19\x6d\x8f\x6c\xfc\xb3\x5d\xde\x6b\xef\x84\x36\x8f\x26\x86"
- "\x7f\x62\x83\x67\x28\xd3\xf8\x2d\xa3\x14\x9c\x13\x0e\xcf\xd0\x33"
- "\xfc\x3c\x9a\x9f\x03\xe6\x8f\xed\xde\x8a\x2c\xd4\x7f\x06\xf5\xde"
- "\x32\x4a\xd9\xf3\xb7\x8c\x6e\x47\x1d\x1d\xee\x5b\x46\xf9\x68\x8c"
- "\x49\xed\xb9\x7c\x6c\xef\x6d\x2f\x99\x79\x87\x79\x4e\xf1\x74\xc6"
- "\xd9\x86\xed\xcc\x7f\x35\xe6\x76\x73\x4d\x86\x26\x37\x78\x9d\x26"
- "\xf5\x14\x65\xb4\x35\x58\x25\x7d\x1b\x85\xf1\x96\x4d\xbf\x8e\xf8"
- "\x8d\xbc\x2f\xa6\xc4\x57\x46\xdb\xe5\xbf\x5b\x3c\xf8\x35\xe1\x77"
- "\x52\x7b\x6e\xc5\x2f\x84\xfb\x69\xf8\x9d\x94\xb8\xdb\xba\xc0\xe0"
- "\xc3\xbb\x76\xe8\xec\xfc\xec\xa3\x5b\x8e\x88\xad\x23\x8c\xc2\xac"
- "\xee\xab\xaf\xe7\x75\x82\x5b\x02\x18\x83\x42\x35\x16\x19\x72\x4d"
- "\x05\x6d\x63\xbc\x0b\x67\x85\x08\xd6\x15\x05\xb8\xdd\x23\xea\x2a"
- "\x02\x64\xbb\x99\xfb\x9f\xc1\x63\x2c\x02\xc0\x3f\x5f\x97\x57\x08"
- "\x7f\x6d\x65\x88\x78\x7f\xae\xc3\x9d\x01\xfe\x5f\x3c\x4d\xad\x39"
- "\x9c\xd8\xce\xf0\x34\x9a\x10\x7a\xff\x95\x4c\xfb\xd8\xce\x63\x89"
- "\xe7\xe7\xd1\x77\xcb\x39\xca\xf8\x40\xa4\xfc\xd9\x5e\x6b\x27\xda"
- "\x06\x39\x82\xb9\x46\xee\x15\x54\x4b\xff\x80\x0c\xcc\xff\x37\x9f"
- "\xd4\xf7\x93\x36\xe3\xfd\x16\xbc\xc3\xdc\xe3\x6f\xb0\x07\x89\x61"
- "\x85\xb9\x7f\x28\x7f\x30\xe2\x37\x61\xae\xc6\x98\x7f\x6c\x2f\xca"
- "\x87\x9c\xe9\x96\x5b\x19\x73\xd7\x9e\x15\x41\xbd\x7f\xb5\xdb\x99"
- "\x17\x32\x40\xff\xcf\xd8\x7b\xa5\xff\xee\x36\xdf\x96\x5c\x3b\x42"
- "\x8d\x59\x04\x78\x89\x1d\xb3\xdb\xcc\x6a\xbc\x6e\x1d\x1f\x3b\x5e"
- "\xb7\x41\xb7\xb9\x75\x03\x7e\x95\xf8\xed\x52\xcf\xd1\xbf\x5b\xf3"
- "\xa3\xee\x6b\xf0\x83\xec\xbc\x15\xf3\xff\xc8\xa0\x1a\x07\x4e\x47"
- "\x3f\x98\x46\xfe\x41\xd0\x0d\x73\x88\xf7\x6b\x39\x9d\xe9\x99\xd3"
- "\x23\xd0\x67\x7c\x74\x6b\x19\xde\xa7\x31\xaf\x96\x46\x28\xe6\xbd"
- "\x17\xb5\x7b\x56\x43\x56\xd3\xad\x9f\x31\x2c\xcb\xba\xe2\x62\xa6"
- "\x53\x94\x29\xb7\x84\x8a\xa1\x4f\xde\xda\xa6\xe3\x15\x69\xc7\xf9"
- "\x3d\xd3\x64\x87\xfb\x36\x13\xf0\xb2\x53\xee\xc7\xc2\xde\x4b\xac"
- "\x6b\xdc\x96\xd1\xad\x93\x99\x6b\x8a\x59\x1e\xb5\xd1\x37\xc7\x42"
- "\x66\x61\x6c\xff\x3c\x4f\xcd\x35\xdf\xbc\x8b\x9f\x21\x2b\x3f\xc3"
- "\x7d\x66\x03\x64\x52\xe7\xc6\xa3\xae\x2e\x23\xf5\xeb\x34\x52\x56"
- "\x68\x8b\x61\x7c\x28\xe5\xf0\x26\x6f\xeb\x1e\x6a\x0c\xfd\x86\x6c"
- "\x4f\x4b\x18\xb7\x7a\x41\x03\xce\x55\x22\xfc\x5e\xe7\x4e\x93\x37"
- "\x74\xde\x83\xb9\xf9\xeb\x67\xe8\x9b\x12\x1f\x2f\x9d\xc2\xac\xff"
- "\x84\x84\xad\xf0\x93\x6a\xb0\x6e\x59\x24\x42\x5b\x4e\x8b\x00\xf4"
- "\xbb\x94\xcd\x9d\x34\xea\xad\xd5\x94\x59\xd9\x49\x23\xaa\x3a\x29"
- "\x43\xfc\x2d\xc3\x58\x09\xbd\xed\x89\x8b\x69\x04\x99\x90\x33\x20"
- "\x9f\xcc\x55\xab\x49\xd2\x48\x78\x33\xf4\xb7\x10\xf4\xb7\xf3\x19"
- "\x2c\x1b\xbb\xf5\xb7\x2e\xa9\x17\x1f\xdb\xa0\xe8\xe8\xd8\x86\xfe"
- "\x76\x32\xa4\xce\xa3\x34\xb4\xcf\x79\x8e\x6e\x5b\x9c\x8a\x09\x91"
- "\xfb\xec\xd3\xfa\x0b\x9c\x17\x5a\xec\xd4\x4f\xf6\x15\xf2\x5a\x94"
- "\xfc\x79\x5e\xaf\xf3\xb0\x91\x69\x2a\xc0\x7c\xc3\x7d\x58\xc7\x7b"
- "\xc6\x7b\x86\x06\x4d\xcb\x2b\x45\x90\xd3\x0b\x86\x8b\x20\xd2\xed"
- "\x5c\xf7\x6e\xa4\x77\xb8\xbf\x59\xe6\x33\x7e\x30\xad\x37\x1a\x85"
- "\x7d\xa4\xc9\x95\x51\xd7\x0a\xa3\x8b\x69\xf4\xc8\xda\x10\x74\xef"
- "\x73\xcc\xb3\xa3\xd2\x66\xe6\x89\x90\x6d\x09\xef\xdf\x8f\x22\xf6"
- "\x2d\xe0\x3d\xc5\x5f\x43\xb7\xf9\x32\x7f\x02\x9e\x2f\xd8\x56\xb0"
- "\xe4\x01\xe6\xc6\x9a\x23\x02\xf6\xf9\x57\xf5\x67\x40\x3f\x53\x5f"
- "\x1d\xcc\x7e\x36\xa3\xa6\xf9\x68\xda\x0e\x6e\xbb\xf4\xa5\x81\xec"
- "\x84\xbe\x35\x08\xed\x2a\x0e\x00\x0f\x78\x8f\xf9\x7f\xaa\xbe\xff"
- "\xeb\xe7\xbd\x57\xa4\x61\xfe\x7f\xa0\x86\xd3\x0a\x86\x93\xb5\xc0"
- "\x26\x7a\xd3\x69\x4c\xbc\x27\x0d\x78\x43\x50\x66\x8f\x0e\x07\xf3"
- "\xd4\x2f\xda\x8d\x0f\x3f\x8c\xb4\x23\x3a\x1c\xe4\xb9\x0e\xcf\xcd"
- "\xdd\x79\x54\x99\xd6\xa8\x32\x0f\xb7\x1b\x6f\xfb\x05\xd2\x42\xb1"
- "\x65\x46\xa7\xc6\x96\x19\x3d\x2c\xaa\x8c\x4b\xd5\x33\x3a\x33\xae"
- "\x4c\x56\x5c\x99\x59\x97\xb7\x6d\xf4\x82\xb8\x32\x05\x71\x65\x36"
- "\x5c\xde\xb6\xd1\x15\x71\x65\x76\xc6\x95\xd9\x1b\x85\x4b\xf6\xab"
- "\xc9\x44\x5a\x7d\x5c\x99\x93\x71\x65\xda\xf4\xe7\x5e\x70\x9c\xba"
- "\x7c\x1b\x59\x41\x9b\xec\xbb\xe5\x7f\x15\xe3\xd3\xfe\xc6\x33\x1d"
- "\xaa\xec\xed\x19\x97\xf7\xeb\xf6\xf1\xb1\xf5\xdd\x3e\x2d\xb6\xbe"
- "\xdb\xe7\x5e\xde\xaf\xdb\xf3\xe3\xca\xb8\xe2\xca\x94\x45\x95\xd9"
- "\xae\xd5\xb3\x23\xae\xcc\x9e\xb8\x32\x75\x97\xd3\xd5\xed\xcd\x71"
- "\x65\x5a\xe3\xca\x04\xbf\x04\x17\x3c\x8f\x2b\xbf\xb6\xc1\xac\x2b"
- "\xdf\x0b\x1d\x61\xcc\x7c\xf6\x8d\xe0\x7d\xd0\xb7\x3b\x83\x7d\x78"
- "\x7f\x8e\xe7\xab\x5a\x47\x10\x73\xcb\x18\xd8\x3f\x63\x3d\xfa\x9c"
- "\xc5\x7e\x23\xcc\xd3\x4a\xc7\x1e\x93\xd1\x9b\x2e\x2a\x7d\xcf\x34"
- "\xff\x35\xae\xab\x76\x18\xcf\x53\x63\xca\xbb\x75\x62\xe5\x83\x46"
- "\x1a\x9c\xbf\xeb\xfb\xb0\xd5\xca\x1f\xc5\xc0\x3a\x79\xad\x43\x96"
- "\x39\x12\xa5\x47\x73\xfd\x81\x3d\xab\x83\xa6\xb8\x76\xec\xbc\x42"
- "\x3b\x52\xa1\x1b\xd9\x1b\x31\x7b\xf1\xfe\x7a\x43\x25\x74\x20\xe8"
- "\xfd\xdc\xb6\x53\x94\x99\x29\x75\xb2\x25\x9d\xc4\xf7\xde\xc2\xbb"
- "\xe5\xfe\xbb\xd2\x49\x33\xed\x75\xa8\x9f\x75\xf7\xba\xfc\x0b\xec"
- "\x23\x85\xf9\x97\x75\xb7\xcc\xd7\x6a\x0b\xfd\x68\x57\xe6\x3c\xdd"
- "\x4f\xc5\x47\x99\xe5\x52\xd7\x28\x3e\x31\x8f\x7d\x03\xd8\x87\xa6"
- "\x36\x30\x8e\xf3\x80\xfe\xc7\xe4\xe9\xfd\xc5\x5c\xef\x47\xde\xf1"
- "\x57\xc2\x99\x1a\xc3\xcc\x9a\x58\x9a\xec\x03\x5a\xc9\x6c\x8a\x1d"
- "\xf7\x4c\x5f\xec\xb8\x67\xfa\x63\x69\xd2\x08\x9a\xbc\xc3\x14\x5b"
- "\xe6\x8e\xf4\xd8\x32\x77\x8c\x88\x2a\x53\xa6\xea\xb9\x63\x5c\x5c"
- "\x99\x29\x71\x65\x72\xa2\x9e\xd1\xc7\x3b\xec\xdd\xb6\x8f\xf4\x81"
- "\xba\xc3\x11\xf5\x6c\x2c\x97\xf2\xf3\x8e\x4d\x7a\x1a\xaf\x1d\x55"
- "\xbd\xae\x7c\x70\x34\x78\x3b\xe3\xf8\x9d\xf3\xd7\xc4\xb5\xa1\x3e"
- "\xae\x0d\xdd\xfc\xaf\xed\xdd\xff\xe1\x34\xdd\xb9\x47\xdb\xbb\x6f"
- "\xc3\x9c\x3d\x93\x9f\x01\xab\x02\xf9\x81\x87\x3b\x53\x63\xe1\xdd"
- "\x39\x2c\x16\xde\x9d\xa3\xa2\x9e\xd3\xf0\x3c\x3e\xaa\x0f\x69\x49"
- "\x56\x32\x80\x5e\xa0\xbf\xdd\x39\x47\x4f\x67\x9b\x12\xed\x6d\x75"
- "\xca\xb9\x26\x8b\x7d\xcb\x06\x9e\xa2\x3b\x27\xb2\xfd\xa9\xc1\x8c"
- "\xe6\x7f\x52\xfd\xba\xb3\x3c\xae\x1d\x3b\xe2\xda\xb1\x27\xaa\x5f"
- "\x01\xcb\x3a\x7a\xd0\x12\x7a\xe8\x11\xd6\x7d\xd8\x9f\x52\xfa\x78"
- "\xad\x85\xce\x76\x91\xd2\xd8\xb7\xee\x74\x01\x25\x79\x1d\xad\xb0"
- "\xe5\x8e\xb9\x7a\xa5\xa7\x94\x13\xf9\xca\xb7\x8a\x6c\x1d\xee\x6f"
- "\xa5\xeb\xf4\x18\xd9\x78\x22\x3f\x52\xf2\xa7\x6c\xa4\x41\xfe\x65"
- "\x6e\x57\x7a\x6e\x53\x99\x70\xe6\x54\x00\x9f\xb0\x8b\xc6\x5e\xa7"
- "\xd9\x11\x1b\xd8\x47\x8c\xfd\x58\x31\xc7\xa7\xaa\x7d\xf8\x6f\xcd"
- "\x8d\xa2\xeb\x80\x6d\xf5\x3d\xe2\x14\x8d\x1d\xce\x3a\x00\xf3\x28"
- "\xfb\x9a\xd5\x86\xfc\xc4\xb6\xb7\x37\x74\x46\xea\x6e\x78\x6f\xd3"
- "\xca\x56\x44\x95\xf5\x6b\xb6\x71\x2b\xbf\x1b\x13\x22\x53\x6d\xc0"
- "\x4f\x80\x93\xae\xf4\xbd\xb1\xc3\x6b\xc1\xaf\x28\x53\xaf\x97\x61"
- "\x3b\x5a\xee\xf1\x16\x90\xe9\xf6\x42\x32\x79\x56\x9f\x92\xb0\x75"
- "\xbf\x0d\xe8\xd2\x6d\xde\xc2\x56\xf2\x06\x9a\x79\xad\xcb\xa4\x7c"
- "\x74\xc6\xda\x92\x82\x64\x6e\x2f\x39\x01\x7b\x6e\xac\x2d\x5c\x72"
- "\xc2\x8e\xb6\x61\x7c\xbe\x95\xcd\xf2\x26\x1a\x77\x93\x27\xcf\x7a"
- "\x68\xe6\xf4\xd1\x3f\x7a\x68\xea\x9c\xc9\x77\xdb\xe6\x2c\x7e\x76"
- "\xe1\x82\xd1\x4b\x9f\x2f\xb0\xad\x5c\xb6\xb8\x60\xf1\x92\x1f\xdb"
- "\x32\x1d\x23\x1d\xb6\xf9\x05\xea\x9a\x91\x37\x7f\x79\xc1\x04\xbe"
- "\x1d\x65\xcb\x5f\xb6\x70\x85\xbc\xbd\x35\x85\x62\x81\x2c\x2e\x58"
- "\xb8\xcc\x36\x72\xc1\x28\xdb\x7d\xf3\x17\xe7\x3d\xbf\x6c\x61\x42"
- "\x58\x77\xdb\x96\x2d\x5c\xb6\x70\xfe\x02\xdb\x04\x5b\x26\x43\x8e"
- "\x06\x17\x35\x9e\x99\xfa\x3c\xc6\xf3\x57\xa9\x5b\x34\x69\xf3\x99"
- "\x4f\xd1\xcf\xd8\xc0\xe5\x73\xd9\x5d\xe6\x58\x9a\xbb\xcb\x1a\x4b"
- "\x73\x77\x65\x5c\x3e\x97\xdd\x15\x37\xff\xdd\x15\x37\xff\xdd\x35"
- "\xf7\xf2\xb9\xec\xae\xb8\xf9\xef\xae\xb8\xf9\xef\xae\xee\xf9\x0f"
- "\xb4\xe4\x5b\x2f\xe5\xc2\x5d\x71\xf3\xdf\x5d\x71\xf3\xdf\x5d\x75"
- "\x71\xcf\xc7\xa3\x9e\x07\xe1\xb9\x25\x7a\x7e\xc4\x73\x40\xe7\xcf"
- "\x1e\xf9\xf2\x6d\xb3\x9e\x87\x65\x3d\x64\x73\x8b\xca\xfb\x6d\x5b"
- "\x54\xde\x56\x2d\xef\xd8\x6e\xfe\xe3\x7d\x6d\xa4\x2b\x7b\xfd\xdb"
- "\x6f\xb2\x4c\x67\x7f\x3c\x9e\x9b\xc0\x1f\x5f\x3f\x47\xdf\xbe\x96"
- "\x61\x31\x0d\xb3\x7f\xa6\x78\xe3\xb1\x8e\xea\x81\x64\xe6\x32\xd5"
- "\xaf\xb0\x5f\xef\xd8\x51\xec\xab\x8b\x34\xf6\x5d\x86\x4c\xf9\x36"
- "\xf4\xdf\xdf\x69\x7b\xdf\xdf\xf6\x49\x9d\x1f\x65\x34\xf8\xd2\xae"
- "\x01\x1c\xf6\x05\x36\x97\xaa\xb9\xb8\x05\xf7\xa9\x4c\xd3\x28\x6f"
- "\x12\xc6\xb1\xcf\xb1\x0f\x34\xd2\xd2\xf0\x4b\x07\x3c\x9f\x0e\x6f"
- "\xc3\xe0\xc4\xba\x65\xbc\x9e\xdb\x6d\x0f\x1a\xc9\x52\xea\x8e\x34"
- "\x7b\x23\xac\x5b\x7f\x27\x5d\xad\x2d\x1c\xdd\x2e\xdc\x87\x72\xaa"
- "\x91\x9e\xd8\x4e\xfa\x0e\xf4\xbf\xef\x98\xd5\x7a\xcb\x77\x30\xfe"
- "\xd3\xc7\xaa\xb5\xd3\xa3\xdb\x21\x6f\x3b\x01\xe7\x22\xae\x5d\xb8"
- "\xfe\xbb\x0e\xdf\x23\xed\xed\xef\x14\x08\xb7\x61\x36\xc3\x8d\x4b"
- "\xdf\x04\xf9\xd6\x69\x09\xb9\x72\x12\xbc\xdb\x29\xdc\x49\x0f\x25"
- "\x48\xf7\x40\x67\xe8\x44\x3b\x02\xdc\xde\xa8\xf4\x66\xe1\x1e\x30"
- "\x87\xf3\xfb\xb8\x3e\x94\xe9\x4d\xd7\xd6\xfd\x6f\x95\x0f\xff\xb8"
- "\x11\x71\xfd\xf8\xe2\x34\x8d\xfb\xa9\xea\xc7\xb8\x70\x6c\xdd\xe3"
- "\xc6\x27\xee\xc7\xb8\x39\xe8\xc7\x17\x89\xfb\x31\x2e\x5f\xe2\xd6"
- "\x88\xbe\x18\x2f\x7b\xc7\xbe\xac\x5f\x48\xbc\xc7\xa6\xef\xd0\x74"
- "\xa1\x00\xec\xb0\x34\xbc\x93\x65\x67\x17\xf6\x8c\x9b\x96\xaf\xde"
- "\x52\x41\xb3\x12\xd4\xd9\x22\xdc\xfd\x66\xfb\xe8\xbb\xf2\x5c\x43"
- "\x54\x7a\x48\xb5\x05\x78\x32\x32\x9e\xd0\x1f\x94\xeb\x6d\xbc\x75"
- "\xbb\x44\xad\x85\x7c\x17\xfc\x3f\x8e\xf4\xb5\xcc\xe5\x85\xc2\xaf"
- "\xe3\x11\xef\xec\x71\xef\x82\x51\xef\x36\xc4\xbc\x5b\xdb\x9d\x5e"
- "\xa9\xa7\x7f\xb5\x71\xfa\x6e\x7d\xdc\x38\x61\x7c\xee\x7e\x3c\xb6"
- "\xdf\xdf\x3d\xa9\xfa\x87\x31\xba\x0c\xd7\xdf\x0d\x62\x8c\xba\x12"
- "\x8f\xd1\xdd\xe9\x89\x69\xed\x6e\xb9\x8e\x26\x06\x52\x02\x78\x77"
- "\xf3\xbe\x53\x97\xa4\x41\x6d\x9c\x2e\x1f\x9f\xbb\xf3\xf4\xf1\xf9"
- "\x6a\x7d\xbc\x7b\x77\x5c\x1f\xc3\xa7\xe9\x7b\xa3\x55\x5f\xbf\xb7"
- "\x36\x0e\xf6\x91\xc4\xb4\x78\xb7\x0f\xfd\x0c\xf7\xd2\xcf\x50\xef"
- "\xb4\xf8\x3d\x2b\xfa\x13\xbe\x9c\x16\xbf\x97\xa9\xca\x50\xa2\x32"
- "\xd3\x84\x3b\x51\x3d\xdf\x5b\xe0\x0c\xb1\x9e\xfb\xbd\x4a\x5e\x5f"
- "\x8a\x4a\x2f\x8c\xa5\x3f\xf4\x81\xcb\x31\xfe\x42\x4a\xce\xf2\x38"
- "\x9c\xb6\x91\xf1\xcb\x68\xb2\xc3\xfd\xbd\x93\x71\xb8\x3a\x7f\x9a"
- "\xc6\x3f\xde\x6e\x34\xec\x50\xf8\x9a\x30\x3c\xae\x4d\xc1\xc4\xf8"
- "\x1a\x9f\x06\x7c\x9d\x4f\x8c\xaf\xf1\xa3\x7a\xc7\xd7\x78\x1e\xff"
- "\xf3\x97\xe3\x6b\xfc\xbc\x68\x7c\x41\xd7\x95\xfd\xfb\x86\x15\xb4"
- "\xd1\x95\x2b\xaa\xb9\xaf\x61\x4a\xb3\x80\x56\x54\x99\x36\x2e\x53"
- "\x6e\x09\x2a\x3a\x81\x0e\x69\x3e\x47\xe3\x0b\x75\xfe\x1f\x50\x41"
- "\xfd\x44\xd7\x63\xec\x47\x64\xe0\x72\x5e\xc7\x79\x8f\x37\x94\x49"
- "\x6c\x7f\xc4\xd5\xdb\x9c\x58\x16\x8c\xf7\x03\xa7\xaf\x5c\x9e\x3e"
- "\xc1\xac\xfc\xc8\x26\x64\xc5\xca\x88\x09\xb6\xd8\x31\xfa\x1e\xef"
- "\x47\x58\xb4\x6d\xa7\x2f\xfd\x5d\x79\xcc\x26\x94\x5d\x3e\x66\xdf"
- "\xbf\x43\x8d\xd7\xf7\xaf\x8d\x6b\xdf\xce\xc4\xe3\x35\xc1\xd3\xfb"
- "\x78\x4d\x38\xd9\xfb\x78\x4d\xe0\xf5\xd3\xf3\x3e\xfa\x7e\x66\xec"
- "\xbc\xf1\xfd\xb4\xd8\xfe\xa2\x5e\x94\x13\xc6\xbe\x83\xf8\xf9\xab"
- "\xf6\x5b\xff\xb1\x8c\xe3\xb1\xe2\x73\x45\x68\xff\x70\x6e\xe3\xd5"
- "\xc2\xe8\x15\x36\x70\x58\xb6\x3a\xf1\x7e\x2b\xdb\xb8\x8d\x15\x44"
- "\xbc\x8f\x6c\xbb\x91\x75\xf7\x7b\xfa\x44\x8c\xd4\x8c\x7b\xe3\x69"
- "\xca\xfa\x53\xc4\x68\x2c\xe4\x3d\x4f\xe9\xb7\x2e\xd7\x10\xee\x19"
- "\x16\x3d\x16\xbc\xf7\xc9\xb6\xe9\x16\x65\x3b\xfd\x15\xe5\xdf\x51"
- "\xe3\x92\xf5\x7e\x2c\x1e\xef\xc9\x4a\x3c\x2e\xf7\xe4\x60\x5c\xfe"
- "\x9a\x78\x5c\xee\x29\xe8\x7d\x5c\xee\x29\xc3\xb8\xfc\xf5\x72\x3e"
- "\xba\x67\xa7\xc6\x47\xeb\xb9\x8c\x6d\x09\xdb\xe3\x59\xd7\x73\x1e"
- "\xdc\x83\x47\xb2\x24\x4e\x46\xb7\xe9\x7c\x24\xcb\x9c\x04\x2c\x59"
- "\xbf\xca\x73\x4f\xb3\x06\x23\x0a\x6e\x16\x59\xda\x12\xf1\x49\x96"
- "\x95\xf3\xde\x9e\x4f\x66\xe0\x30\x67\x1b\xc3\x58\x46\x84\x7a\x9e"
- "\xe5\x7c\x9c\x7e\x7b\x20\x9a\x4f\xb2\xa6\xe8\xf9\x58\xd6\x69\x79"
- "\xb3\x44\x87\x9d\x38\x5f\x1c\x6c\xad\xff\xfd\xe4\x3c\xc2\xf9\x39"
- "\x5f\x5c\x9e\x0a\xc5\x8f\x59\x27\x63\xf9\x31\x6b\x77\x2c\x7d\x02"
- "\xff\x28\x17\x81\x9c\xc3\xbd\x09\x6d\xf8\xca\xf4\x75\x65\xde\x9c"
- "\x38\x2a\x8e\x37\x41\x03\x13\x1b\x14\x0d\x4c\xfc\x55\x6c\x5b\x27"
- "\x66\x27\xa6\x81\x89\x73\x7b\xa7\x81\x89\x8e\xde\x69\x60\x62\x39"
- "\xd3\x80\x8f\x26\xd6\xc7\xf2\xe6\xc4\x5d\xb1\x7d\x47\xbd\x92\x37"
- "\xe9\xda\xab\xe1\x4d\xe8\x42\x83\x7a\xe3\x43\xe6\x29\xf6\x1f\xa9"
- "\xee\xd4\xf7\x3a\xbe\x12\xce\xcc\xe0\x2b\xb4\xef\xde\x79\xbc\xa6"
- "\x04\x19\x3f\x8e\x71\x58\x25\xcf\x63\xde\x5b\x10\x8d\xc7\x2d\xea"
- "\x0c\xa4\x13\x79\xbf\xe0\x7d\x65\x85\xcf\x49\x87\x63\xfb\x7f\x6f"
- "\x79\x62\x7c\xde\xbb\x0b\xf8\x74\x26\xc6\xe7\xbd\x47\x7a\xc7\xe7"
- "\xbd\x2d\x7c\x46\xea\x72\x9e\xba\x37\x64\x5b\x21\x75\x14\x59\xe6"
- "\x1c\x4d\x7a\xf8\xab\xcd\x4f\x93\xc6\xc6\xce\x4f\x93\x86\x5d\xfd"
- "\xfc\x34\xc9\x91\x78\x7e\x9a\x54\x96\x78\x7e\x9a\xb4\x53\xf1\xc3"
- "\x24\x5f\x2c\x3f\x4c\xf2\xc4\xd2\x04\x70\xf7\x7f\x36\x3f\x65\x67"
- "\xc6\xf1\x40\xe9\x69\xca\x7e\x1f\x3a\x85\x4b\x8d\xdb\xe4\xe7\x63"
- "\xdb\x98\x3d\x2d\xf1\xb8\x65\x2f\xc0\xb8\x95\x26\x1e\xb7\x6c\x57"
- "\xef\xe3\x96\x5d\x89\x71\x2b\xbd\x7c\xdc\xb2\xf7\x5c\xbd\x4e\x91"
- "\xdd\x1a\x3b\x66\xd9\x4d\x57\x3f\x66\x93\x47\x25\x1e\xb3\xc9\xd9"
- "\x89\xc7\x6c\xb2\xe6\x9b\x3e\xb9\x3c\x76\xcc\x26\x17\xc4\x8e\x19"
- "\xf0\xf6\xbf\x1c\x33\x8c\xcf\x0e\xe5\x9f\x30\xf9\x22\xec\xf6\x7e"
- "\x1d\xee\xc9\x6d\x3e\xba\x6f\x8f\xb2\xad\xef\x53\x73\x87\x1a\xc3"
- "\xf7\x90\xc7\x77\xf9\x3c\x70\x9f\x59\x4b\xfb\xd1\xe5\xe3\x70\xdf"
- "\x08\xc8\xe8\xb6\xba\x42\xb9\xb7\xa5\xc6\x90\x71\x8e\x7c\x9e\xd5"
- "\xbc\x3f\x75\x5f\x36\x97\xc5\x18\x0b\x6f\x30\x44\x2c\xd7\x91\x3f"
- "\xc0\x70\xf8\x6c\x68\x1c\xac\xfc\xab\x99\xe3\x7b\xf7\xa9\x39\xba"
- "\xc3\x53\x74\x27\xe0\xdd\xff\x82\xa2\xd5\xfb\xe2\xf5\xdf\x6a\xbc"
- "\x7b\x44\xd1\xe9\xd4\x91\x71\x6d\x08\x24\xa6\xd3\xfb\x53\xd1\x87"
- "\xea\xc4\x74\x7a\x7f\x46\xef\x74\x7a\x3f\xc6\x9f\xaa\xa3\x6c\x9f"
- "\x81\x4f\x84\x7c\x71\xb6\xcf\xfd\x76\x4b\x40\xd1\x8e\xd4\x89\x4a"
- "\x8e\xee\xe8\x70\xdf\x1f\xaf\xff\x61\x6c\xa6\xf4\xd7\xda\xdc\x27"
- "\xae\x7c\x2f\xfa\xdf\xfd\xac\xff\xbd\xd7\x4b\x9b\xaf\xa0\xff\xdd"
- "\xcf\xfa\xdf\x7b\x97\xf3\xd6\x14\x4d\xff\x4b\x64\xe3\x4d\x19\x95"
- "\x78\xfc\xa7\xc4\x8d\x3f\xe5\x14\xc0\x1e\x96\xe5\x63\xf3\xe5\x45"
- "\xe7\x63\xdf\x24\xce\xcb\x34\x92\x20\x6f\x45\x3c\xcc\x5e\xf2\x79"
- "\x2e\xa3\x3d\xf6\xa5\x4a\x48\x7b\x53\xb4\x33\x25\x53\xb3\x63\xf9"
- "\x71\xaa\x29\x96\x1f\xef\xdf\x19\x5b\x6e\xea\x88\xd8\xf7\xf7\x05"
- "\xfe\xef\x64\xec\xd4\xf2\x38\x1a\x38\x74\x9a\x1e\xb8\x56\xd1\xc0"
- "\x03\x8b\xe3\xda\xb1\x2b\x31\x0d\x4c\xad\x43\xff\x0f\x25\xa6\x81"
- "\xa9\xbe\xde\x69\x60\x6a\x08\xb8\x3c\x14\x4d\xb7\xb3\x0b\xb3\xfa"
- "\xc5\xe6\x79\xc0\x96\x58\xe6\x3d\x30\x2e\xf1\x1a\xc1\x03\xb3\x14"
- "\x8e\x1f\x28\x8e\xc5\xf1\x03\xf6\x58\x1c\xa2\x2f\xff\x7b\x1c\x76"
- "\xc7\x83\xe8\x70\x3f\x10\xcf\xff\xde\xd3\xf4\x03\x8d\xff\xa7\x3d"
- "\x18\xd7\xc6\x80\x6a\x4b\xa2\x75\x91\x1f\xb0\xfd\xeb\x4d\x8c\xcb"
- "\x1f\x8c\x4a\xdc\xe7\x1f\x64\x63\x0e\xf2\x46\x2e\xe3\xa5\x1f\xcc"
- "\x45\xfa\x6c\x5e\x0f\xe5\xf5\x90\x2a\xa4\xcf\x0e\x91\x59\xce\x57"
- "\xdd\xf3\xd2\x0f\x5c\xec\x8b\xc2\xf8\x67\xfa\xb5\x0c\xa3\x59\x3c"
- "\x07\x71\xbb\x72\x0b\xa5\xdf\x82\x65\x03\xd3\xfa\x4d\x4c\xeb\x3f"
- "\x90\xfa\x1f\xef\xb3\xb0\x1f\xa1\xc5\x41\xb3\x38\x2e\x85\x4e\xef"
- "\x9c\x3f\x0e\xf6\x49\xe6\x0b\xce\xaf\xe7\x55\xeb\x66\xae\x38\xd9"
- "\x34\xcd\x94\x78\x8c\xa7\x0d\xeb\x9d\x76\xa6\x8d\x53\xe3\x3c\x2d"
- "\x2f\x76\x9c\xa7\xcd\x8a\xb8\x07\xcc\xe1\xbe\x82\x06\xae\x8a\x4f"
- "\x0a\x6c\xc2\xdf\xab\xbc\x5f\xff\x58\x73\x7e\x11\xdd\x78\x86\xa6"
- "\x1d\x97\xf5\x19\x45\xd0\xb2\xce\x40\x75\x52\x06\x4c\xbf\x55\xb6"
- "\x13\x79\x72\x43\x64\x14\xeb\x9f\x69\xe6\x77\xd5\x6e\x11\x44\xbe"
- "\x26\xde\x13\xe0\xb3\xd5\xa0\x85\x41\xa7\x68\xda\xd9\x98\xf2\xe0"
- "\x7c\xaf\x82\x91\x51\x2d\xf9\x71\xfa\x08\x7d\x4d\x77\x03\x9e\x13"
- "\xaf\xfb\x4e\x9f\xa2\xfb\x3e\x28\x9f\xb1\xe9\xbd\xee\x5f\x72\x9b"
- "\xf8\xac\x0c\xb7\xe9\xca\x72\x60\x7a\xa5\x4e\xbf\xca\xd7\x72\xfa"
- "\xae\x1e\x5f\xbe\xe9\x7b\xf1\x6e\xde\x15\xd6\x06\xa3\xf8\x60\x7a"
- "\x4b\x34\x1c\x15\x13\x65\x7a\x50\xf7\xc7\xeb\x70\xcf\x30\x7d\x09"
- "\x2c\xad\x3d\x33\x46\xc5\xb6\x67\xc6\x78\xe8\x29\xe9\x1a\x8c\x29"
- "\x57\x82\xc1\x63\xae\x68\x96\xe9\x61\xc6\xbc\x2b\xad\xf9\x25\x59"
- "\x69\xd6\xab\x97\xd1\xd6\x0c\xa9\x2f\x31\x8c\x2f\x69\x63\x53\x8c"
- "\x6d\x21\xf7\xee\x79\x6f\x6b\xe6\x36\xc5\xf7\x33\xe3\xd6\x08\x67"
- "\xb4\x49\x7f\x2a\x8d\xef\x9f\x08\xc5\xf3\xc1\xcc\x54\x7d\x8e\x8e"
- "\x4b\x1f\xa1\xf3\x3d\xec\x5a\x86\x1b\xb7\xce\x3a\x33\x5b\xf1\xc2"
- "\xcc\xca\x48\x72\xb4\xbd\x36\x53\xea\x7f\xfa\x7a\x29\xde\x67\xc7"
- "\x95\x8b\x5b\xff\x9b\xd1\x26\x7a\x5f\xa7\x4f\xc5\xf8\x06\x78\x6f"
- "\x4b\xc5\x6a\x98\x59\x1f\xb7\x5e\xe1\xdf\x22\xcf\xdf\xff\x05\x70"
- "\x67\x69\x72\xef\xc1\x89\x71\xf5\xb5\x39\xcf\x5e\xa9\xff\xb3\x7a"
- "\xe9\xff\xac\x9e\xfe\x2f\x91\x70\xe3\xd6\x12\x67\xc9\xfe\x87\x2f"
- "\x93\x7f\xb3\xd8\x87\x54\xc7\x1b\x74\xee\x59\x1f\xe8\xba\x3a\xaf"
- "\x1f\xf4\xae\xab\xcf\xea\x59\xff\x53\xe5\x7a\xd6\xff\xfc\x89\x74"
- "\x75\x1f\xc9\xbd\xd5\xd8\xba\x9b\x2d\x95\x09\xfb\xd2\xcb\xfa\xdf"
- "\x83\xda\xfa\xdf\x83\xf3\x62\xe5\xd9\x83\xb6\xd8\x31\x9c\x15\x37"
- "\x86\x0f\x66\xc5\x8e\xe1\xcc\xb6\xff\xe9\xbc\x86\x67\x4a\x4a\x4a"
- "\x32\x26\x19\x8c\x86\x24\xbc\x46\x17\xa9\x5f\x92\x29\xa9\x0f\x7e"
- "\x7d\xb5\x6b\x3f\x63\x92\xd1\x84\x5f\x1f\xed\xda\x37\xee\xb9\x1f"
- "\x97\xc5\xcf\xa4\x5d\xfb\xc4\x3d\xf7\xfd\x92\xf7\xfd\xb4\x7a\xf5"
- "\xfa\x4d\x71\xcf\x7d\xbe\xe4\x7d\xdf\xff\x65\x79\xba\xec\x39\xd6"
- "\x0f\x6d\xea\x92\x15\xf3\xf3\x16\x2f\x90\xfb\xc5\x0b\x6d\xf3\x9f"
- "\x7a\x6a\xe1\xf2\xe5\xb6\x82\xa5\xb6\x7b\x27\x3e\x74\xe7\xdd\x36"
- "\xb5\xed\x9c\x37\x61\xe4\x82\x14\x9a\xbe\x72\x19\xbf\x98\x3e\x7b"
- "\x6a\x8e\x6d\xd6\xbd\x13\x63\x5f\xea\x60\xe4\xf6\xf2\x95\xa0\x44"
- "\xf1\x5f\x56\xc9\x60\xa2\x4d\xaf\x4b\xd9\xd3\xc2\x7e\xbe\x6a\xcd"
- "\xe3\x47\x87\xeb\xd9\x7f\xb4\xd3\x29\x3c\x37\xf1\x9e\xfe\xec\x85"
- "\xdc\x89\xd1\xdb\x5d\x94\xff\x24\x9f\x5f\x99\xbd\x4e\xfc\xde\x4f"
- "\xb6\x07\xc8\x78\x8a\xe6\xfe\xa9\x6e\x0a\xf2\xe2\xd9\xeb\x0b\x91"
- "\xcd\x49\x66\x94\x7f\x0e\xef\x0c\xe2\xfb\x11\xa4\x05\x34\x5f\xe8"
- "\x1f\xae\x93\x69\xbf\x77\xe9\xf9\x2c\xa7\x69\xce\x48\xf1\x7b\x21"
- "\x9f\xf9\x7c\x90\xca\x37\xfb\x0b\x61\x7c\x68\x2f\xcb\x86\xca\x81"
- "\x64\xe2\xbd\xd0\x37\x07\x92\xf9\xcd\xc1\x1c\xb3\x64\x76\x9b\xbe"
- "\x17\x5a\x82\x67\x1f\xcd\x6d\xe2\xba\x39\x6f\xc4\xf8\xd0\x29\xce"
- "\x5f\x15\x93\x7f\xce\xb0\x9e\xbd\xd8\xd9\x6d\x46\xe4\x9b\xf9\x19"
- "\x59\x2c\x61\xf1\x8f\x60\xca\x61\xd7\xed\x53\xc8\xe0\xc5\x50\xd4"
- "\x87\x5c\xa4\x7c\x7e\xe6\x2c\x5c\x15\x16\x21\xf6\x4f\x9f\xde\xe6"
- "\x14\xa5\xcf\x92\x09\x3c\x6d\xf0\x2c\x63\x1f\x85\x39\xd3\xaa\x17"
- "\x92\x09\xfd\x1f\x76\x86\x1e\x2e\xb4\xcd\x20\x72\x4e\x27\xd3\x31"
- "\x07\xfb\x1b\x1e\xbb\x71\xcb\x9f\xc9\xf4\xcb\x4e\x97\xb1\x53\x58"
- "\xa9\xb0\x40\xb4\x0a\x8e\x63\x14\x10\x41\xf6\xf1\xaf\x9f\x17\xe6"
- "\x3c\x03\x3a\x9c\x56\x6a\x2c\x08\xd0\xda\x93\x22\x58\xfc\x67\x75"
- "\x36\xa0\xa1\x2d\xc0\xfe\x8b\xe6\xb5\xd3\x29\xe9\x74\x0e\x19\x1b"
- "\xec\x15\xe4\x9d\x1b\xa0\xc2\x93\xa2\xb5\x7e\xde\xe7\xd4\x68\xdf"
- "\x4d\xb9\xcd\x64\xac\x6f\xf9\x94\x64\x2c\x9e\x2d\x86\xcc\xa2\x8b"
- "\x64\x5d\xbb\x98\xd3\x2e\xd2\xea\xb5\xd4\x7f\xf5\x09\xb2\x78\x5b"
- "\x9b\x51\xcf\x59\x7a\xf4\x38\x19\x00\xcf\xb8\xe6\x53\xb2\xae\x79"
- "\x84\xfd\x7c\xb3\xa8\xb2\x88\xac\xc2\x99\x91\xda\xe9\xcc\x48\xeb"
- "\x14\x19\x03\x3b\x9c\x19\xe9\x8d\xf9\xc8\xdf\x72\x90\x06\x34\x53"
- "\xfa\xef\xcf\x34\x1b\x2b\x2e\xd0\x30\xee\xd3\x69\xf4\xad\xf2\x02"
- "\xf2\x6f\xfc\x64\x77\x04\x65\xa3\xcb\x84\x92\x3f\x39\xe2\xcd\x09"
- "\x52\x04\xb0\x2a\x3a\x69\x58\x65\x27\x59\x23\x25\x9f\xec\xe6\x72"
- "\x6d\xf4\xc3\x55\xde\x7a\xa2\xc2\xb5\x22\xdc\xb5\xf1\xa8\x0b\x32"
- "\xb1\xdf\x7b\x4f\xee\x35\x79\xeb\xdb\xa8\x21\xd0\x49\x8d\xf4\x17"
- "\xf2\x3a\xfe\xe6\xf9\xe5\x93\x7b\x79\xcd\xda\xe0\x59\xdd\x82\xba"
- "\x14\xed\x38\x1b\xf8\xac\xb2\x8b\x4a\x8b\x28\x35\x7f\x35\xf5\x3b"
- "\x83\x74\x65\xdb\xd7\x14\x7b\x43\x7f\xf3\xac\x96\xfe\xb8\x73\x9b"
- "\x8a\x1a\x28\xa9\x31\x50\xc1\x7e\x9f\xc6\xf0\x00\x43\xa6\x37\xd0"
- "\x44\xde\xfc\xbf\x7a\x22\xa9\x06\xeb\xa6\x08\x99\x7f\x75\xa9\xc9"
- "\xe8\x35\x5d\x22\x6f\x4e\x80\x0e\xa1\x6e\xb1\xc5\xc0\x7b\x9f\x59"
- "\x8d\x81\x20\x9f\x77\xca\x14\xed\xd6\x94\xd2\x65\x34\xaa\xea\x02"
- "\x8d\xd8\x76\x81\x32\x44\x47\x86\x91\x7d\x6c\xf9\x6c\xea\x36\x5c"
- "\x53\x5b\xc8\x8c\xbe\x2b\x7f\xec\xfe\x9a\xaf\x6d\x57\x06\x55\x77"
- "\xf6\xf8\xda\x76\xb6\xf7\xf8\xda\x82\xa6\xfc\xec\x6f\xeb\xa3\x87"
- "\x37\x58\xea\xa9\x1f\xf8\x64\x27\xd3\x77\xe9\x39\x32\xad\x3f\x47"
- "\x74\xbb\xcb\x48\xb6\x45\x7c\xce\xe2\x47\x0b\xbd\x18\x1b\xbe\x3f"
- "\x45\x3f\x1a\x86\x6b\x2a\x7e\x06\xa4\xcb\xf8\x0d\x2d\x1a\x1d\x23"
- "\xcd\x88\xb4\x3e\xb8\x26\x81\x5f\xc2\xce\x4a\xe1\x47\x5d\xcd\xed"
- "\x46\x4a\x61\x7a\xd6\xfc\x7b\x9b\x3b\xdc\x3f\x0c\xf8\xe8\xd9\x36"
- "\x9d\xae\x95\x8c\x9f\xed\x3f\x74\xea\x2c\xc7\xcb\xf2\xcb\x76\x75"
- "\xd9\x0d\x1c\x3b\x4b\x4b\xe7\x36\x3c\xce\xf5\xa2\xfe\x2c\x5c\x2d"
- "\xf8\x81\x4f\x7f\x78\x5c\x2f\xdb\xde\x65\x47\x9d\x3f\x7a\x18\xe9"
- "\x42\x4f\x47\xbf\x4d\xfc\xee\xb7\xa7\xce\x1a\x55\x9e\x0c\x23\x60"
- "\x06\x35\xf8\xe0\xfd\xd9\xe5\xcc\xe3\xed\x46\x8b\xa8\x9d\x37\x96"
- "\x2a\x5f\x17\xf5\xdb\x5e\x17\x75\x8a\xf7\x7e\x54\xe1\xa3\xa5\x65"
- "\xdc\x46\xcc\xe3\x75\x9b\xf0\xae\x16\xb3\x0e\xe3\xa5\x6e\x01\xfb"
- "\x93\xfd\x08\xfa\xdf\x35\x35\xd1\x7d\x10\xee\x07\x2b\x78\x2e\xfd"
- "\x75\xd1\x91\x3e\x90\x01\x15\x8d\x2d\x6d\xf4\xcb\xce\xd6\x3e\xce"
- "\xa3\x64\xf4\x86\x4e\xd1\x98\x74\xb2\xb2\x3e\x58\xfd\xba\xf0\xbd"
- "\xca\xf1\xf9\x5e\x17\x6d\xa0\x97\x1b\xce\x50\x4e\x9f\x6f\xa6\x53"
- "\xfa\x1f\x1d\xa4\xc9\xa7\x9c\x1b\xa2\xe4\xd3\x3b\x0d\xbe\xbd\x51"
- "\xb2\x69\xee\xc3\x97\xcb\xa6\xc7\x1e\x54\xb2\x09\xbc\x2f\x65\x51"
- "\xd8\xa7\xa5\x4f\x88\x4b\xd7\xfc\x44\x1e\x1b\x1e\x97\x1e\xd4\xd2"
- "\xfb\xc7\xa5\xfb\x55\xfa\xa3\xd3\x75\xd9\xd7\xc8\xed\x58\xc9\xb2"
- "\xef\xd1\x3b\x58\xf6\x35\xce\xd3\x64\x9f\x94\x3f\x8f\x5e\x27\xfe"
- "\x05\xb2\x68\x05\xcb\x9b\x47\xce\x72\xfb\xc5\xef\x49\x6f\x7b\x32"
- "\xd2\x7e\xc5\x69\x65\x7f\x21\x13\x7e\xba\xdc\x13\x2c\xf7\x58\xe6"
- "\xb1\xec\xdb\x3a\x58\x34\x6f\x7d\x5d\x1c\xaf\x94\xb1\x7f\x1e\xe9"
- "\x96\x7f\x2f\x21\x6d\x13\xd2\x5e\xc2\x7b\x96\x83\x8c\x93\x86\x9c"
- "\xbd\xc4\xfe\x27\xa0\xb1\x61\x11\x63\x26\x6d\xc1\x78\xf3\x79\xc3"
- "\x0d\xc0\xaf\xc5\x40\xf9\xde\x02\x3e\xc3\x1a\x66\x9f\xb4\x96\xc6"
- "\x82\x16\xe6\xbb\xc1\xeb\xc1\x67\x5e\xc7\xe7\x54\x14\x10\x67\xf8"
- "\xdc\x1d\xb7\x21\x77\xd5\x03\x1c\x2f\xc9\x50\x07\x6b\x98\xfd\xc2"
- "\x59\x66\xa3\x2d\xa6\x32\xb4\x49\xc5\x67\x79\x64\x87\x8f\x76\xb8"
- "\xd4\x58\xcf\x6d\xe2\xb8\x6c\xa7\x28\xa7\x15\xf6\x5e\x90\xfb\x66"
- "\x09\xbb\x88\xcf\xc1\x70\xac\x42\xbe\x6e\x35\x46\xec\x65\xfa\x59"
- "\x18\x37\x64\x03\xf2\x78\x9b\x83\xc4\x6d\xf6\xd1\x23\x63\x1b\x0a"
- "\xf7\x72\xf9\x66\xc6\x8d\x70\x3b\x75\x18\x06\x09\xc3\x28\xed\x46"
- "\x3b\xf2\xa9\xb5\xf3\x94\xa3\xae\x86\xb9\x7e\x62\xb9\xef\x6d\x05"
- "\x8c\xc2\x53\x0a\x06\x60\x09\xcc\x01\x31\xef\x34\xf8\xfd\xd7\x8a"
- "\x7f\x00\xfe\x0e\x1e\x2f\x3e\x17\xc9\xfb\x6d\xc0\x4b\x2a\xfb\xca"
- "\x2b\x5d\xf4\x91\xd1\xd5\x7f\x21\xd2\xce\x76\x82\xde\x1e\x19\xc5"
- "\xe7\x96\xf8\x3c\xe7\x95\xce\x72\x02\x47\x23\xf4\xf3\x9c\x91\x95"
- "\xff\xb7\x67\x39\x01\xdb\x5a\x65\x14\xbb\xd1\xfe\x51\x7c\x9e\x13"
- "\xed\xdf\xc4\x74\xa8\xf5\x29\xf3\xb5\x47\x25\xce\x0b\x38\x0d\xb6"
- "\xe3\x11\x7d\xfc\xb9\xbf\xdc\x17\xbc\xcb\x51\x3a\xa2\x80\xfd\xf1"
- "\x58\x26\xbf\x47\x5a\x36\xe7\x1f\x03\x39\xe6\xc5\x1c\xf6\xde\xa9"
- "\xb0\xb1\x74\x35\x99\x94\x4c\x9b\x3b\x95\xcb\x2b\x99\x36\x97\x7a"
- "\x64\xda\x63\x17\x95\x4c\x53\x38\x56\x32\xed\xb1\xbf\x2b\x99\xf6"
- "\xd8\x67\x72\x5f\x0c\x32\x8d\xdf\xb1\x5c\xd3\x65\xda\xb6\xc1\xe2"
- "\x08\xcb\x8e\x0e\xf7\x63\x4d\xba\x6c\xdb\x8c\x34\x96\x1d\xdc\x46"
- "\x25\xa7\x1e\xcd\x10\xff\x91\x41\xca\xef\x80\xef\xed\x7c\x7e\xa1"
- "\x55\xbb\xe7\xf9\x64\xa2\x92\x71\x73\x47\xf4\xc8\xb8\xc7\x76\xf6"
- "\x94\x65\x19\x37\xf7\xbb\x4a\xc6\xa9\xf4\xea\x47\x59\xc6\x3d\x9a"
- "\xc1\x38\xd0\xe0\x1b\x79\x0d\x4f\xcb\xcf\x78\xcc\x8c\x96\x71\xb1"
- "\xfc\x35\xb7\x50\x97\x71\x2c\xdb\xf0\xbc\x09\x32\x4d\xda\x90\xcc"
- "\x67\xe5\xc0\xb9\xce\x77\x3c\x06\xdc\x67\x8e\xbf\xc6\x78\x9b\x74"
- "\x96\xfa\x69\x67\x87\xb4\x7e\xcf\x3d\xa2\xfb\x3e\x02\xff\x4d\x89"
- "\xf4\xe8\x9e\x18\x89\xf4\x75\x3e\x3b\xef\x75\x9d\x22\x6f\x85\x70"
- "\x35\x86\x4e\x52\x6e\x01\x64\x45\xd2\x33\x9f\xf1\xd8\xc2\xee\xf8"
- "\x1e\x5f\x59\xf6\x9c\xa1\xc7\xfb\xe7\x06\xa8\x2f\x6c\xf5\xcf\x4a"
- "\x8d\x78\xe7\x88\x79\x27\xd7\x18\x6e\x5f\xc6\xf1\xf5\xc0\x08\xbd"
- "\xd8\xfb\x57\x59\xdf\xda\x2b\xd4\xf7\xa6\xac\x0f\x3a\x15\x6c\xa0"
- "\x6b\xcf\xd1\xe3\xd2\x2e\x91\xf1\x6d\xd6\x27\x84\x75\x54\x7b\xdf"
- "\xa7\x97\xf7\x7f\xbf\x72\xf9\x27\x92\xaf\x5c\xfe\x89\x5b\x59\x16"
- "\xa1\x7f\x96\xb0\x3b\x16\xce\x80\x90\x9e\xef\x0c\xe7\x7b\x50\x5b"
- "\x8b\xf9\xcc\x39\x5c\xda\x68\x56\x1d\x26\xd3\xdf\x16\xe4\x93\x31"
- "\x43\x20\x2b\xb3\x57\x11\xc7\x6b\x89\x2e\xbb\xb9\x07\xc7\x4f\x64"
- "\x5d\x61\xdd\x2f\xd5\x5b\x41\x32\x66\x6c\x2d\x74\x52\x8e\x69\x54"
- "\xde\xbd\xfe\xf1\x44\x0b\xe4\xa6\x2f\xca\x2f\x96\xed\xb1\xaf\x73"
- "\x5c\x03\xd6\x2f\x4b\x95\xbd\x39\x04\xf2\x79\x20\x9f\x87\xe1\xb3"
- "\x31\xb9\xe1\x59\xc6\x5a\x19\xcb\x2c\xd7\xa6\x97\xed\x6d\x9d\x85"
- "\xeb\xd5\xea\x64\x1f\xd3\x00\xca\xcc\xd1\xcb\x30\x6c\xf6\x53\xc4"
- "\xbc\xfc\x75\x79\xa6\x34\xd4\xc6\xb2\x70\x08\x74\xd1\x81\xaa\x9e"
- "\x79\xa4\xd5\x53\xec\xa3\xc7\x67\x5d\xe9\x6c\x46\xef\xfd\xcb\xad"
- "\xbb\xfa\xfe\x91\xd6\xbf\x79\xf4\x25\xfd\xbb\x42\xbd\xf3\xc6\x5f"
- "\x7d\xbd\x69\x7a\xbd\x8e\xab\xc7\xeb\xbc\x5d\x5f\x1d\xaf\x99\x1a"
- "\x5e\xe7\xf9\xbe\x04\xaf\x09\xea\x99\x9f\xfe\xd5\xeb\xb1\x69\xf5"
- "\xcc\x9f\x92\xa8\x1e\x92\x7f\xbd\x9e\x9b\x32\xeb\xb1\x36\xdb\xc1"
- "\x3b\x2a\x56\xdd\xfc\xb2\xe8\xf8\xc5\xed\x92\xaf\xe6\xef\xe8\x8e"
- "\x97\xac\xf6\xca\x21\xab\xe7\x1f\xce\xdd\xce\xf3\xbb\x88\xf8\x68"
- "\x7e\x1d\xc7\x71\xcd\x5e\xab\xce\x64\x6b\x65\x9a\xaf\x14\x37\x99"
- "\x63\x74\x71\x4c\x3e\xaf\x15\x7d\xaf\xe0\xd8\x25\x27\xca\xd8\xff"
- "\x1e\x36\x15\x64\xfc\x93\x37\x70\xcc\x31\xdc\xf7\xc3\x7d\x86\x92"
- "\x01\x4f\x66\xa0\x9e\xde\xcf\x4e\x6e\x3c\xb1\x7d\x47\x51\x66\x9f"
- "\xde\xfc\xeb\x51\x1e\x3a\xc5\x73\x72\x6d\x2a\x92\xf2\xb1\x03\xb6"
- "\x84\x16\xef\x6f\xc1\xe7\x32\x06\x9c\x33\x87\xcf\x93\x60\x5e\x5c"
- "\xd0\x5f\x3b\x07\x00\x7c\xb8\x80\xd7\x27\xb7\xeb\xf8\xd0\xd3\x91"
- "\xb6\x47\xc7\x07\xf4\x9b\x54\xef\xf6\x10\x9f\xd3\x09\xa8\x33\xd9"
- "\x4f\xfe\xbb\x28\x39\x51\xa1\x60\x3f\xa5\xf6\x68\xb8\xbe\xae\x1c"
- "\x93\xb4\x9b\x8a\xd8\x6e\x7a\xaa\xc6\x9f\x7c\xa2\x42\x6f\x87\x58"
- "\x6e\x35\xf2\xd9\xef\x31\x98\x4b\xb7\xa8\x98\x7b\x06\x3e\x27\x27"
- "\xdf\x2f\xcf\x30\x2a\x9c\x3c\x35\x41\xb4\x73\xec\x18\x09\x3b\x15"
- "\xed\x6c\x61\xb8\x3e\x5c\xfd\x6b\x32\x38\xee\x85\xd6\x9f\xa7\x46"
- "\x46\x36\x7e\xec\x88\x74\x58\x8d\x7a\x7b\xab\xe4\x99\xd6\xa7\xd0"
- "\xff\x79\x2a\x4e\xac\x6c\x8f\xd5\xc8\xfe\xfc\x91\x94\x13\xdb\xc5"
- "\x1a\x2b\xed\x59\xd6\x2a\xed\x26\xae\x73\x0c\xea\x17\x6c\x27\x41"
- "\x37\x41\xb9\xed\xdd\x78\x03\x5c\xd1\xa1\xe3\xed\xa9\x69\x6a\x5e"
- "\x56\x7d\x0c\xac\xb1\x1a\x6b\xfd\xf2\xbc\x1d\x8d\xb0\x39\xbf\x50"
- "\xb1\xb0\x9f\x3a\xa9\xe3\xae\xbb\x4d\x68\x0f\xe7\x51\xfe\x4d\x4f"
- "\x85\xf4\x36\x49\xde\x4d\xe1\xf3\xbb\x4f\xfa\xf9\xdc\x90\xc2\x7f"
- "\x6d\x6a\x87\x7b\x81\xed\x72\xfc\x2f\x18\x1b\x85\xff\x24\xa6\x3d"
- "\xc6\x3f\xaf\x75\x00\x2f\x8f\x03\x97\x66\x75\xde\x81\xf5\x99\x05"
- "\x0b\xf1\x9c\xca\xed\x8c\x94\xe8\x38\xcf\x31\xa9\x75\xb2\x05\x15"
- "\x51\xe3\x80\xfe\x5a\x59\x57\x33\xe8\xfd\xe7\x32\x8c\x03\x8e\x2b"
- "\xc9\x75\xa3\x3d\xd7\xa0\xee\xdd\xf1\x7d\x5a\xaf\xce\x92\x90\xf2"
- "\x2d\x59\xd0\x14\x15\x5b\xdc\x5f\x60\x13\x41\x75\x2e\x79\x81\x63"
- "\x4f\x91\xdf\xd4\x9b\x0c\x60\x1a\x94\x31\x2a\x8d\x72\x5d\x01\x3a"
- "\xd7\xa2\x8f\x04\xda\xa6\xc6\x7e\xd1\x36\x95\xb6\xf0\xef\xb8\x82"
- "\xc6\x16\x4e\x14\xa8\xdb\xef\x94\x31\x56\xd0\xb7\x45\x3e\xa6\x39"
- "\x9d\xce\x78\x1d\x52\xf9\x8c\x2f\x7c\x87\x65\x8a\x8e\x73\xb4\x3f"
- "\xa5\xc3\xbd\x30\x5f\x6f\xbf\x9e\x9f\xc7\x8e\xf3\xf0\x9e\x4d\x9d"
- "\x2d\x28\x65\xad\x3a\x33\xb4\xb0\x52\xe7\x61\xae\x83\xc7\x99\x65"
- "\x0d\xe3\x43\xe1\x62\x61\x4d\x2c\x2c\xab\x51\xc5\xcd\x64\x9a\x07"
- "\x3f\xae\x0e\xf6\x41\x1e\x5f\x0f\x8c\x85\x73\xd5\xbb\xee\x76\xb2"
- "\x9f\xbf\xf4\xc5\x53\xe3\xb1\x68\x2a\xf7\xab\xa7\xbd\xcc\x7f\x8b"
- "\xba\xc7\x9f\xdf\x05\x9c\x56\x8e\xc1\x2b\x65\x4c\xc1\x70\x6e\xaf"
- "\x9f\x63\xdb\x4a\x5a\x07\xfc\x32\x6e\x3b\xe7\xd1\xc7\xac\x87\x16"
- "\x17\xd9\xa3\xe1\x08\xa7\x6c\xab\x84\xa3\x64\x87\x9f\xf7\xb6\x6d"
- "\x6a\xbf\x65\x51\x79\x54\xbf\x53\xf5\xf6\xf4\xc8\x84\x45\x7b\xe2"
- "\x69\x92\xeb\xe6\x58\x7c\x1a\x6c\x96\x25\x69\xa7\x68\xd1\x76\xad"
- "\x5d\x56\x1e\xc7\xde\xe6\x37\x8e\x73\xc9\xb1\x4f\x5f\x55\x32\x04"
- "\xe3\x6c\x1f\xfe\xaa\x3a\x47\x14\x50\xf1\x4f\x7f\x3c\x52\x18\x7f"
- "\xca\xb8\xe2\xf5\x74\xbf\x8c\xd7\x21\xcf\x98\xff\x98\xf7\xf8\xc5"
- "\x80\xfc\x9f\xca\x58\xb7\x9a\x6f\xa0\xbf\x2e\x3f\x24\x63\xf9\x39"
- "\x0b\xf8\xcc\x6d\x88\x6d\x3d\xe9\xfb\x56\x5b\x10\xa2\xd9\x41\xe6"
- "\x89\x1f\x17\xf0\x59\x7a\x15\x47\xfc\xc7\x2e\xfd\xfc\x3c\xc7\xce"
- "\xe4\xb8\xaf\x90\x43\x49\x3d\x71\x5b\xed\x39\xac\x63\x69\xe3\x4b"
- "\x5b\x8c\xa2\x49\xf1\xff\x8f\x8f\xf2\x79\x79\xb5\x8f\x75\x0a\x32"
- "\x21\xe9\x6f\xa7\xe8\xc7\x9f\xa9\x75\x1f\x5d\x46\xd9\x1f\xe1\xbd"
- "\x2c\x9f\x06\x03\x75\xb5\x81\xbf\x67\x5d\x2e\x4b\x7e\x7c\x54\xb7"
- "\x5d\xf8\xfc\x9d\xda\x17\xeb\x81\xe7\xa3\x1f\x4b\x5b\xb0\x67\x0c"
- "\xfe\x00\x58\xf6\x71\x97\xcb\x05\xfb\x34\x9d\xf7\xf2\x6f\xe2\x33"
- "\xdc\x3f\x4e\xe3\xfa\x7b\x9b\x2f\x84\xf3\x11\x1e\x27\xf3\x69\x5b"
- "\xe2\xb1\x49\xbc\xcf\x66\xdf\xad\xf7\x41\xc7\x89\xea\xc3\xe2\xe4"
- "\xf6\x94\xa3\xbb\x7a\xfa\xbe\x58\xea\xae\x51\xef\x27\x46\xe1\x86"
- "\x9f\xb3\xd4\xbc\xb6\x18\xf8\x59\xa0\xc5\xaa\x55\x69\xe0\x9d\xad"
- "\x62\x4d\x0e\xa9\x36\x2e\x26\x9d\xd7\x91\x77\x94\x8f\x2e\x5a\xd5"
- "\x7e\xd7\x62\xf4\xdf\x5e\xac\xca\xd9\x8f\x73\x5b\x12\xf6\x33\xb6"
- "\x8d\x7b\x59\xd7\x50\x31\x15\x16\xef\xe3\xf6\xda\x6e\xe6\x31\x5e"
- "\xfc\x82\x94\xe1\x1c\x5f\xa1\xcb\xde\x27\xd0\x95\x41\xed\x5d\x76"
- "\xc8\x85\x0c\x23\xea\x81\xec\x6a\x0f\x68\x75\xee\xd2\xdb\xca\x6d"
- "\x93\xf1\x39\xc5\xe2\xc4\xf8\xe5\x7a\x65\xcc\x27\x7b\x3f\xfc\xcc"
- "\xf8\xf5\xfd\xaa\x7a\x09\xf4\xf4\x56\x7f\x49\x53\x66\x64\x85\x38"
- "\xc2\xf1\xc5\x60\x8b\xb4\x96\x82\x7e\x07\xac\xf3\x40\x37\x7f\xdc"
- "\x98\xbb\x8a\xb2\x60\x33\x93\xb8\x24\xc6\x55\x45\x70\x5d\x21\xc6"
- "\x72\x9c\x71\x3c\x67\x6a\xcf\xa3\xf8\xb9\x7d\x85\x98\xdb\xe1\x7e"
- "\x7a\x9e\xbe\x47\xa8\x62\xe3\x3c\x9d\xdf\x1d\x4f\x28\xe9\x31\x3e"
- "\x4f\xc4\x71\xa7\x22\xb0\x85\x5a\xb9\xde\x5c\xb6\x67\x51\x1f\xf2"
- "\x55\x40\xdf\x68\xe1\x7c\xfe\xa4\xdb\x06\xe2\x97\x38\x9e\x07\xca"
- "\x70\xbb\xda\x93\x9b\x32\xf5\xb6\x0e\x08\x64\x19\xbf\x62\xdb\x42"
- "\x7a\xdb\x90\x7e\xa4\x54\xa5\x87\x38\xfe\x21\xfb\x3a\x76\xb8\x9f"
- "\x19\xa6\xb7\x55\x6f\x03\xd7\xc7\xe7\x37\x45\xca\xd1\xbd\x1c\x7b"
- "\x86\xeb\xe3\x78\xaa\xc8\x3b\x45\x6f\xef\x57\xa5\xe5\xa2\x4a\x21"
- "\x78\xfe\x64\xf9\x6b\x1b\x4a\xd4\x18\x60\x99\xf2\x4c\x65\x6d\x65"
- "\x00\x34\x77\x74\x3f\xea\xd8\xd7\x2e\xec\x14\xe9\xb2\x27\x1c\x63"
- "\x2e\x83\xfc\xcd\x52\x3e\x6c\x3c\xba\x2f\x22\xa6\x40\x4e\xa0\x5c"
- "\xd7\x14\x5e\x6b\x02\xdf\xe6\x99\xea\x0a\x5b\xf9\xcc\x25\x64\x4e"
- "\x9e\x09\x79\xf6\xb2\x9e\x05\x7b\x2b\x28\xbf\x5f\x01\xd9\xe4\x59"
- "\x31\x16\x30\xf2\xfa\x98\x1c\x64\xaa\x8b\x8b\x53\xd5\x1b\x7d\xb4"
- "\x9b\x3f\xde\xdd\xbe\xf1\xe3\xe2\x0e\x77\x1e\xf4\xff\x67\x7b\xdd"
- "\xf3\x5d\x3f\x18\xf8\x44\xbe\xb2\xa1\x6c\xef\xe5\xd9\xaf\x94\x57"
- "\xdf\xaf\x66\x19\x34\xc6\x4a\xa9\x22\xf9\xe3\xdd\x2c\x6f\xdb\x53"
- "\x3e\x2e\xe6\xb9\x04\xe5\x77\xea\xe5\x79\x5e\xe7\xb9\x03\xe3\x65"
- "\x2d\xed\x96\x87\x79\x4d\x8a\x9f\xf3\x9a\x74\x1e\x4d\x54\x4f\xc1"
- "\x0e\x11\x71\x8e\x24\xa3\x17\xf3\xd6\xed\x41\x4a\xad\x7a\x8b\xa8"
- "\x6c\xb5\x08\xbe\xba\x1a\x36\xcc\x50\xfe\xde\x45\xde\x14\xe6\x51"
- "\xa6\xef\x2d\xa0\x97\x24\xb4\xe5\xd5\x4b\xa8\xb3\x48\xe5\xd3\xfc"
- "\xd6\xad\xc8\x57\x80\x6b\xba\x30\x1a\xa9\xbc\x88\xcc\xe5\x11\x32"
- "\x95\x15\xd1\x30\xa4\x41\xd7\x7d\x76\x8e\xce\xb3\x89\xda\x50\x5a"
- "\x45\xf4\x0a\xea\x5d\x57\x24\x42\x7f\xc0\x7c\xee\x8e\x88\xe0\x57"
- "\xc1\x3b\xfa\xbf\x47\xf5\xf1\xd9\x3d\xba\x4e\x88\x7b\x4f\xac\xdf"
- "\xc1\xb3\x97\x9d\xf1\x7e\x72\xe9\xd2\x82\xdc\x65\x0b\xf9\x92\x31"
- "\xf2\xf9\x5b\x53\xa2\xd7\x42\x78\xfe\x53\x71\x2a\x9e\x6d\xe6\x75"
- "\xc7\x57\x07\xea\xfb\xe8\x4b\xac\xfa\xda\xa7\xe6\xaf\x7f\x0f\xdb"
- "\x74\x6c\xfb\xe0\xdd\xd8\xc3\x85\x6b\x19\x8c\xe1\x33\x33\x19\xe3"
- "\xeb\x5b\x34\xbf\x60\x7e\xde\xdd\xbc\x63\x96\x92\xa0\x9e\x25\x53"
- "\xe2\xea\x71\x75\xd7\xa3\xe6\x9f\x80\x91\xf3\x6d\x1e\xd2\x24\x92"
- "\x43\xf9\xea\xac\xf4\x92\x1d\xfa\x9a\x56\x2f\x7e\x8e\xc1\xf0\xc6"
- "\x4f\xfc\xcc\x0f\xce\xb5\x64\xfc\xed\xea\x66\x23\xeb\x91\x45\xb8"
- "\xe7\xb5\x05\xb9\x46\xa6\xc5\x8b\xfa\xfd\x85\x66\xcc\xef\x4b\x82"
- "\xa2\xe4\x68\xd0\x47\x4b\x7a\x5d\xb3\x89\xf6\x11\x61\x9f\xc2\x16"
- "\x5a\x9a\x76\x25\x9f\x23\xce\xcf\xfd\x61\x9a\x8d\x2b\xf7\x82\x1a"
- "\xb3\xa5\xa0\xff\x3c\x5b\xf7\x79\x5e\x2d\x4f\xe9\x60\x3d\x0e\xd7"
- "\xd2\xb9\xbd\xfa\x8b\x14\x7f\xbc\x57\xd1\xf8\xd2\x8f\xea\x60\xaf"
- "\xa1\x9f\x3f\x39\x45\x4b\x0f\x9b\xac\xd0\x11\x86\xd2\xcf\x70\xff"
- "\x11\x97\xe5\x77\x31\x74\x74\xc3\xd9\xed\x26\x48\x17\x48\x19\x83"
- "\x50\x7f\x64\xd2\x6e\x92\xf0\x33\x0a\x83\xdc\x4d\x4d\xc2\x08\xf6"
- "\xeb\x6b\x22\xcb\x80\x54\xf3\xd7\x6f\x1c\x66\xbd\xe7\xfb\xe3\xc7"
- "\x39\x8b\x0a\x21\x95\x43\x41\x8b\x88\x8e\x9f\x16\xb2\x3e\x7c\xab"
- "\x8b\xa4\x3f\x4d\x49\x28\x61\x9c\x98\xcd\x6e\x91\xcf\x67\xd7\x23"
- "\x03\x06\x65\x39\x9f\x27\xe3\x7b\x9d\x3e\x23\xc7\x68\x66\xfd\x99"
- "\xbf\x75\x71\x8a\xf2\x1f\x3c\x84\x34\xe0\xcb\x21\x36\x0d\xca\x52"
- "\x7a\x67\xfe\xcb\x91\x2d\x83\xb2\x7a\xe0\x9b\x88\xe1\x3b\xdf\x24"
- "\xe3\x8e\xa2\x56\xa3\xd7\xf4\x7d\xf2\xda\x02\x74\x08\xf7\x09\xc7"
- "\x0a\x75\xb2\x2e\xcb\x30\xaa\xdd\x91\x62\xe7\x17\x64\xd4\xce\x9f"
- "\x1a\xcf\x51\xfe\xd1\xdd\xbd\x94\xe3\xf3\xde\xed\x29\xde\x4b\x1d"
- "\xee\xe7\x4c\x3e\xba\x37\x5b\xd3\x65\x30\xe7\x3e\x07\xfb\x7f\xa9"
- "\x8c\xf3\x84\xf7\x17\xf9\xbb\x30\x48\xcb\xd0\xf3\x24\xd6\x67\x78"
- "\x0d\x5e\x78\x98\x0e\xc4\xa5\xbf\xb7\xf2\xd9\x96\x5e\xfc\x60\xfa"
- "\x79\x1d\x77\xf2\x5e\x64\x9f\x01\x90\x3f\xce\x8b\xa2\x2b\xec\xa6"
- "\x74\xb0\x93\x31\x6c\xa4\xaf\x87\x2e\x89\x9c\x86\xb6\x0b\x32\xa6"
- "\x29\xcb\x9a\x5f\x2f\xfa\x83\xd1\x1b\x3c\xef\xf1\x6e\x88\x50\x23"
- "\xf4\x4a\x6f\xe5\x79\x8f\x8a\x7d\x1a\xa6\x06\xfa\x0b\x35\x38\xfe"
- "\x9f\xcb\xeb\xfa\x0b\xd2\x85\x8c\x85\xdd\x75\x49\xcc\xf1\x9a\x3e"
- "\x21\xfe\x4e\x11\xcf\x71\xc0\xbb\xed\x1c\x3d\xf7\x8f\xdf\x03\xce"
- "\x7b\xff\x09\x58\x32\x66\xda\x04\x3a\x84\x7b\xf4\xa9\x7b\xfe\x4b"
- "\x18\x6b\xc6\xe0\xd9\x6c\x71\x3c\x6e\x8c\x60\x2e\xe5\xd8\x76\x98"
- "\x43\xc7\x72\xbf\xf0\x9c\xc9\xcf\xb8\x8e\xe2\xab\x65\x9d\x67\x9b"
- "\x25\xf4\x38\xcf\xad\x39\x3c\x6f\x22\x7d\x4e\xf5\x25\x39\xd7\xce"
- "\xd2\x9e\xa7\x69\xcf\x53\xb4\xe7\x6c\xed\x39\x4b\x7b\xe6\x75\x79"
- "\x6d\x4e\x5e\x56\xd6\xad\x2f\x18\xfb\x35\xe1\x79\xbb\x3e\x16\x68"
- "\x4f\x7f\x8b\x63\xad\x9c\xdb\xb5\x76\x8c\xd5\xda\x95\xa9\x3d\xeb"
- "\xed\xb9\xc1\x12\x5a\xfb\x7f\xd4\x9e\xe5\xb6\xd8\xf6\x2c\xcf\x8c"
- "\x6a\x0f\x59\x1c\x59\x5f\xa5\x3d\x69\x16\xfe\x4e\xc4\xff\xa2\x3d"
- "\xdc\x16\x4e\x43\xfd\xbb\xe3\xda\xe3\xd1\xdb\x93\x90\xde\x56\x88"
- "\x56\xd6\x6b\x96\x5f\x2f\xe3\x3a\xf7\x63\x9d\xa5\xba\x53\x8f\x53"
- "\xb8\x3c\x74\xa5\x38\x85\xe0\x05\xcc\xdb\x05\xe8\xff\xf2\x7a\x4d"
- "\x7f\xab\x51\x7a\x7e\xc1\x58\xdd\x77\x0c\x7d\xdd\x59\xaa\xfa\xba"
- "\x6b\x03\xc7\xea\x5b\x45\x5f\x73\x3a\x44\x2b\xec\xee\xff\x62\xdb"
- "\x30\x1a\x6e\x5e\xc1\xf2\xe5\xcf\xde\x6d\xcb\x9b\xbf\x64\xa1\x6d"
- "\xe4\x02\xdb\x72\xfb\xe2\x45\x05\x0b\x63\xfd\x29\xd2\xb4\xef\xf7"
- "\xc8\x73\x22\x6c\x4b\x49\x5b\x1a\xf4\x2f\xe5\xa4\xf4\xc9\x2b\xb8"
- "\x28\xdc\x05\xf3\x58\xe6\x56\xbd\xa2\xbe\xf3\x84\xf6\xd4\xe9\x73"
- "\x88\x6e\xff\xf2\x1c\x82\xf4\x93\x98\x27\xe7\x46\xa5\x73\x5e\xbf"
- "\x9e\xc6\xf0\x35\xd9\xd4\xef\x14\x15\xbc\xcc\x75\x26\xc4\xe1\x25"
- "\x01\x3b\x20\x87\xbf\x61\x61\x84\x4c\x11\x1c\x77\x8b\xcf\x5f\xa2"
- "\x9c\x38\x4d\xcf\x4b\xbb\x62\x0e\x9e\x95\xcd\x26\xd0\xc6\xe7\x1f"
- "\x46\x99\x1d\x48\x33\xb1\x0e\x01\x3b\xb0\x95\xcb\x21\xfd\x59\x8e"
- "\x83\x81\x74\xb3\x16\x4f\x8c\xd3\xd6\x71\x9c\x0a\xa4\xa5\x45\xa5"
- "\xbd\x86\x34\x2b\xd2\x6c\x1a\xbc\x77\x18\xcf\x78\xce\xd2\xd6\xc9"
- "\x38\xcf\x3e\xad\xde\x98\x98\x16\xfc\x0d\x97\x3b\x6f\xcf\xb4\xcd"
- "\x99\xfd\xed\x09\xdf\x7f\x6a\xe9\x92\x45\x29\x24\xd1\x9e\x81\xe9"
- "\x38\xf3\x4e\xc7\xad\x77\xdb\xf2\x17\x2e\x5c\x66\x5b\xb9\x70\x49"
- "\x81\x6d\xfe\xca\xf9\xab\x52\x68\xd1\xd2\x65\x4f\x71\x94\x05\x1e"
- "\x96\xe5\xb9\x4f\x2d\xfa\x31\x3b\xbd\xa8\xdc\x29\x31\x7a\xc2\x1c"
- "\x96\x6d\x5a\x5c\x92\x23\xa5\xac\x43\x26\x1f\x77\xe1\x9e\xe3\x75"
- "\x59\x71\xad\xc3\xaf\x06\xbf\xbd\xf8\x1d\xc7\xaf\xe9\x0c\xad\xe1"
- "\x98\x18\x7b\x3a\xdc\x2b\x16\xe8\xfa\x4a\x0f\x0d\xad\x70\xe8\x34"
- "\x04\xfd\x62\x8f\x9a\xdf\x56\xec\x6c\x0c\x49\xfe\xe9\xa6\xa9\xd2"
- "\x4b\x3d\x34\xc5\xf1\x46\x1b\xd9\xa7\x6b\x05\xde\x77\xca\xb5\x4a"
- "\x5e\x33\x49\x66\xbc\x9d\xa6\x55\xdb\xaa\x5f\x17\xf5\x1c\x2b\x07"
- "\xd7\x3a\xd0\x4b\xbd\x8a\x4f\xb3\x72\x04\xf2\x0d\x47\x1d\x35\xaa"
- "\x0e\xed\x79\xb0\x38\xc2\xdf\x70\x39\xa5\x3d\x33\x2c\xc0\xb8\x8b"
- "\xef\xf9\xaa\xed\x9d\x5a\xb4\x6f\xbc\x19\x7b\xde\xad\x6c\xd0\xea"
- "\xe0\x6f\xfd\xb8\xaa\xdc\xd2\x96\x92\xb6\x33\xaf\x11\x5b\x0c\xf7"
- "\x08\xb4\xe7\x7c\x24\xe9\x31\x15\xff\xd2\xd5\x09\x19\xf1\xad\x6f"
- "\x79\x1d\x32\xbf\x81\xd7\x90\x67\xe4\x8b\x08\xc7\x21\x8f\x24\x3d"
- "\xd3\xcc\xe5\x84\xf9\xb8\x2b\xb2\xa5\x7f\x96\xd2\x19\x38\xee\xe0"
- "\xca\x9d\x1a\xcc\x20\xe3\xf6\x0c\xad\x78\x44\xd9\xe1\x6b\x36\x28"
- "\x5d\x62\xe5\x1e\xdd\xd7\x12\x3c\x9a\x81\xe7\x3a\x5d\x06\xf8\x68"
- "\x65\x99\xe6\x17\xe7\xd1\xfa\x1f\xd2\x9e\xf7\x6a\x6d\x34\x70\x2c"
- "\x14\xb4\xbf\x89\xc7\x0e\xfa\xca\x5e\xdc\x1f\x07\x7e\xea\x15\x7e"
- "\x1c\x32\xce\x01\xf4\x26\x7e\x7f\x9c\xbf\x77\x83\x77\xc7\x55\x9c"
- "\x91\x95\x63\xb9\xcf\x3d\xbe\xb3\x95\x59\x68\xeb\x5d\xbc\xc7\x0c"
- "\x5e\xda\xeb\xbd\xc4\xfc\xb9\x32\x13\xf0\x76\xeb\x72\x87\xe5\x4c"
- "\x6e\x18\x7c\x2a\xed\x29\x47\x9e\x2e\x6f\x7a\xe8\xc0\xe1\x4a\x24"
- "\x4b\x12\x8d\xbb\xc2\xbf\xe3\xef\xc2\xfd\x7c\x1d\xda\xb4\x5b\x8e"
- "\x01\xc7\x63\xbd\xd4\x6d\xb7\x75\x29\x19\xe9\x38\xde\x6d\x63\x6a"
- "\xed\xe0\xd8\xee\x3e\x6e\x5b\xa7\xdc\xf7\xd7\xe4\x86\x23\xa4\xcb"
- "\x0d\x1d\x8e\xc5\x20\x22\x16\x07\xfe\x15\x1f\xab\xe0\x3d\x12\x9e"
- "\x2f\xa5\x3e\x02\x38\x03\x2e\xaa\x33\x70\x91\x92\x63\xb0\x4d\x1d"
- "\x7b\xf8\x9b\x6f\x52\xa7\x75\x3f\xff\xff\x7a\x64\xd1\xaa\x59\xd1"
- "\x30\x85\xf9\x58\x05\xc3\x65\x79\xc4\x3a\x49\x6e\xd8\xc4\x71\x68"
- "\x2a\xb4\xf9\x05\x32\x78\x95\x4b\x6f\x2b\x70\x78\x44\x6f\xaf\xf6"
- "\xcd\xb1\x23\xa8\xc7\x37\x33\xdc\xc5\xbe\xe0\x75\x6a\x3c\xd7\x48"
- "\x79\x83\x77\xbb\x50\xb6\xc6\x47\xcf\xa7\x69\x3c\x54\x8f\xf2\xbb"
- "\x6a\x8b\xb2\x91\x67\x55\xb3\xe6\xcf\xdc\x84\xf1\x3d\xde\x43\xfb"
- "\x2b\x1a\xa2\xd6\x79\x8e\xab\x31\xfc\xbe\xeb\x14\xad\xb6\x46\xa5"
- "\x6b\x63\x5b\x3b\x0b\xe9\x0d\x6a\xcd\xe4\x58\x8e\x2a\xbf\x5a\xf9"
- "\xae\x6a\x6d\x64\x59\xc0\xe7\xf5\x98\xc7\x25\xee\xe5\x18\xaf\x9e"
- "\xa5\xcf\x17\x80\xb5\x47\xe2\x7c\xb0\xa8\x61\x3c\xa9\x78\x1f\xcf"
- "\x5f\x52\x78\x5a\xed\x88\xc1\x3d\xcf\x9b\xa8\x87\xf1\x34\x60\x9d"
- "\x88\x0c\x08\x18\x44\xee\x2a\x13\x31\xbf\x30\x8f\xf3\xde\x20\xe8"
- "\x43\xea\x55\x0a\x6f\xab\xf7\xea\x78\xd3\xc7\x8e\xf1\xe4\xa3\xd5"
- "\x19\x8c\xdb\xd8\x3e\xf6\x6b\x3a\xa5\xf7\x1d\x38\xe5\x98\xa6\x78"
- "\xae\xd7\xf8\xa2\xde\x33\x94\x7d\x47\x56\xfc\xa9\xd6\xf4\x6d\xaa"
- "\x75\x8c\x25\x85\xdb\x35\x56\x1f\x15\x38\xa2\xec\x92\x23\x8c\x5f"
- "\xe6\x15\xb4\xb3\x5c\x8b\xbd\x75\x44\xf9\x31\xad\xa8\x17\x25\xc7"
- "\xca\x25\x2f\xaf\x90\x31\x52\x38\x6e\x6f\x13\xe3\x88\xe5\x22\xf3"
- "\x12\xf3\x00\xf3\x93\xc2\xd1\x9a\x82\x28\x1c\xd5\x31\x7e\x34\x3c"
- "\xed\x89\x93\xe5\x0b\x6d\x79\x13\x94\x2c\xb6\x65\x8c\x5c\x30\x46"
- "\x06\xba\xb1\xdd\x37\xe9\x6e\xdb\xac\x09\x23\x1d\xf6\x51\x33\xd4"
- "\x65\xd2\xac\x69\x7c\x4d\x89\xb5\xeb\x6c\xa8\xe7\x64\xac\x6d\xb8"
- "\xce\xae\xe4\xc7\x9a\x80\xcf\x90\x2a\xfd\xd9\x39\xee\x6c\xe9\x12"
- "\xa2\x30\xda\xbd\xe5\x0c\xc6\xd4\x7c\x6c\x2c\xc7\x39\x9e\xe9\x20"
- "\x8e\x8b\xfe\x45\x35\xde\x55\x21\x7d\x40\x3e\x7f\x1f\xe1\xaf\x22"
- "\x92\x7c\x6c\x2c\xaf\xd9\x88\x92\xfd\x41\x7f\x72\xc8\xea\x4f\xee"
- "\xf2\xf9\x93\x9b\xcc\x93\x6f\x75\x8a\x0e\x77\xe1\x34\xbd\x5f\xbc"
- "\xb6\x03\x3c\x8d\x9d\xe9\x10\x61\xc6\x51\xae\x83\x63\x91\x03\x76"
- "\x12\xaf\xed\x14\xa2\xff\xf9\xbb\x95\xfd\x5a\x08\xfa\x5f\xa1\xe9"
- "\x33\x34\x0b\xcf\xd0\xff\xbe\x2d\xd7\xb8\x22\x6e\xab\x8c\x61\x1e"
- "\x59\x7f\xdb\x43\xa2\xa4\xcb\xa7\xc3\x04\xac\xbe\x9a\xdf\x83\x84"
- "\xf7\x55\xfd\x6a\x23\x1b\xff\x98\x6d\x31\xa8\xb8\x90\xe0\x71\x57"
- "\xb5\x31\x92\xd3\xed\x27\x83\x77\x03\xd6\xa5\xb1\x1f\x4d\x0e\x68"
- "\xcf\xc5\x79\xf4\x77\xa5\xee\x88\xaf\xd4\x18\x09\x62\x1c\xd3\x94"
- "\xfe\xdc\xc6\xf2\x13\xb6\xeb\xda\xf1\xfa\xbc\x26\xe7\x43\x23\xb9"
- "\x94\x3d\xb3\xf6\x71\x2e\x77\xc1\x6d\x22\xc8\xec\xfa\x9b\xd2\xa5"
- "\x8d\x12\x8c\xb8\x0d\xa4\x7c\x99\xd7\xde\xa1\xcb\x58\xde\x2f\xb5"
- "\xac\x13\x7e\x5e\x23\xb6\x84\x84\x5f\xc6\xda\xe7\xb9\x83\xce\x90"
- "\xb7\xb0\xc3\xe5\x95\xdf\xe0\xe4\xef\x8a\x04\xb4\x79\x23\xac\xe6"
- "\x0d\xd4\xef\x4f\xba\x6d\x1e\xe6\x07\xc3\x19\x82\xae\x8b\xf6\x33"
- "\x6e\x78\xaf\x25\x02\x5c\x79\x79\x9e\x64\xfc\xa4\xd4\xd7\xb1\x0f"
- "\x0c\xf7\xd5\x12\x42\x9f\xa3\xfb\x65\x8c\xf8\xb6\xb8\xd1\x2f\x23"
- "\xfa\xe5\x38\xcb\x3c\x13\x64\xdf\x24\xf0\xdb\x60\x19\xcf\x5a\xda"
- "\xe7\x45\xb6\xe8\x3e\xb2\xfc\x57\x7d\x28\x9a\x98\xa8\x8f\xc2\xc8"
- "\x7d\x64\x1c\x14\x5d\xa7\xf1\x9b\x6c\x27\xcb\x8f\x36\x5a\x7b\x7c"
- "\xc0\x3a\xf6\x09\x3a\x36\x16\xf2\x6d\x12\x8f\x21\xe6\xcf\x32\x6e"
- "\x67\xa2\xf1\x62\x78\x1a\x2c\x9f\x65\x9d\x6b\x1e\xda\xb2\x2b\x31"
- "\xbe\x8b\x1a\xae\x8c\xef\xa2\x9f\x72\x79\x6e\x07\xef\xef\x58\x42"
- "\x46\xc8\xe0\x2e\x1f\xec\xb5\xe2\x44\xf5\x0e\x58\xb7\x9d\xdb\x95"
- "\xf0\x9d\x60\x7e\xd1\x64\x10\xe8\x50\x80\x4f\x04\xcb\xa4\x0e\xb7"
- "\x73\x8a\x2e\x8f\x2c\x06\x5b\x92\x94\x0f\x46\x51\x96\x08\x86\x65"
- "\x5d\x19\xef\x73\x4d\x42\xfd\x09\xdf\x47\xf8\xdb\x1d\xc5\xc7\x6c"
- "\x91\xf5\xdf\xbc\xc9\x62\xa0\x7b\xfc\x49\xdf\x4c\xb1\x38\x42\x23"
- "\x18\x87\x80\xe9\x00\x1f\x3f\xcc\x76\xaa\x5a\x1b\x71\x42\xff\x7f"
- "\x59\xc6\x67\xf2\x27\x1f\xb3\xa9\x7d\x23\x27\xe6\xbf\x0a\x9b\xbe"
- "\x36\x8f\xe7\x16\x1f\xfd\xdd\xae\xf8\xf2\x6b\x6f\x89\x8d\xde\xe3"
- "\x11\xb7\x45\xd8\x56\x5b\xa0\x47\xba\xd6\x46\x04\x7f\xcf\xc1\x7b"
- "\xbc\x87\x4e\x94\xbf\x94\x4e\x27\x1d\x6e\xd7\x88\xc4\x34\xe0\x9a"
- "\x7c\x65\x1a\x70\x5d\xcf\xef\x19\xef\xca\x56\x71\xe5\xe9\x7a\x8a"
- "\x58\xff\xb5\xb7\x6c\x45\xb2\x7e\x52\x75\x33\x4e\xb2\x78\xcf\x68"
- "\x1a\xf0\xe2\x42\xde\x0a\x5d\x0e\x30\xbd\x58\xc2\xfc\xad\x0b\x92"
- "\x34\x8d\x77\x98\x57\x0a\xcc\x6a\x1d\xbc\xa9\x4c\x7e\xbf\xd2\xbd"
- "\xa6\xcc\xef\xb4\x6f\xe5\xef\xb4\x06\x92\x8f\x55\x22\x4f\xb3\x8f"
- "\xea\xd4\x7e\xab\xf9\x58\x39\x60\x54\x94\x2b\x7f\x68\xb3\x8c\x17"
- "\x05\x9e\xe6\x18\x51\xcc\xd7\x48\x4b\x47\xbb\x39\x5e\x14\xec\x9d"
- "\x75\x69\xdd\xf3\x92\x3b\x0b\xb2\x42\x48\x5d\x0c\xf3\xd2\xb0\x76"
- "\xe0\xee\x35\x63\x64\xe7\xa5\x31\x56\xe2\x3e\x5f\x5a\x3f\x74\xe7"
- "\x4f\x6e\x27\xd3\xbf\x5a\x9f\xa4\xfc\x3b\x29\x7d\xdd\xb7\x4d\xf4"
- "\xdf\xe3\xc8\xc8\x78\xf0\xd1\x3a\x9b\xc2\xdd\xba\x79\xfa\xf8\xf8"
- "\xc8\x79\x44\xca\xce\xf5\x8f\xb5\xce\x0c\x89\x2f\xd4\x3a\xf7\x3a"
- "\xc8\xbf\x67\x2b\xd4\xfb\x35\xad\xf1\x6b\x40\xac\xcf\xdb\x16\x2f"
- "\xb7\x2d\x58\xba\x72\xc9\xf0\xe1\x31\xb6\x92\x49\x7d\x17\x77\x5d"
- "\xb9\x9a\x4f\xd7\x1d\xd1\xdb\xcd\x7a\x09\x9e\xd1\xff\x35\x97\xc5"
- "\xb2\x9f\x96\xab\xb9\xb9\xe7\x66\x52\xcf\xfd\x1d\x34\xed\x8e\xa8"
- "\xc7\x6f\xd1\xb4\x3b\xbf\x95\xfb\xd0\xc2\xf9\x0b\x56\x45\xa5\xde"
- "\x15\xbd\x6e\x58\xfa\x16\xea\x4e\x1a\x7a\x2f\x64\x85\x61\xc6\x1a"
- "\x9e\x5b\xdc\x07\x8b\x42\xe2\x6f\x90\xd7\xe3\xc0\x63\xb9\x0d\x05"
- "\x21\x6a\x80\x2c\x13\x5f\x63\x19\xde\x4f\x9d\xed\x84\x3e\x05\xda"
- "\xb2\xa0\xef\x7e\xe8\x75\x17\x79\x7d\x06\xe5\x3e\x6b\xac\xe0\x98"
- "\xce\x4d\x5a\xbc\x7a\x77\x25\xd2\xaf\xc5\xf5\x23\x5c\xfb\xe2\x7a"
- "\xd4\xb6\x04\x76\x0f\xfb\xd2\xaf\x60\x5f\x7a\xf7\xfb\xd2\x1f\x28"
- "\xe0\x22\xf6\x09\xc2\xfb\x39\xac\x83\xf8\x68\xbd\x89\xd7\xc1\x39"
- "\x2f\xd2\xb6\xd9\x9e\xa6\x4c\xbe\x0a\xb9\x37\xe8\xae\x14\x25\x4d"
- "\x69\x62\x6b\x0e\x7f\x6f\x6d\xc4\x69\x5a\x6f\x48\x32\x7c\x46\x49"
- "\x56\x73\x6a\x87\x7b\x3d\xca\x2e\x99\xc3\x78\xea\xed\x5b\xb4\xf2"
- "\x1b\xc0\x71\xfa\x61\x8f\x6e\xb8\x91\xa4\x7e\xab\xe9\x73\x55\x72"
- "\x5e\x58\x3f\x27\x4a\xa7\xe3\xbd\xe9\x14\xa5\x9f\x88\xb0\xd2\x4f"
- "\xd7\x17\xe8\x7c\x80\x7b\x97\x4e\xa7\x31\xf1\xf5\x96\x14\x2c\x5c"
- "\xb6\x70\x81\x6d\xe4\xf2\x14\x8a\x8a\xae\x67\x5f\xb8\xc4\xb6\x6c"
- "\xe1\x73\xcf\x2f\x5c\x2e\x23\xe3\xf1\xdb\x98\x39\x3f\x5d\xa4\x34"
- "\x66\xeb\xe7\xbe\x6c\x43\x19\xbf\xeb\x3f\xe7\x98\x6c\x62\x63\x63"
- "\x1d\xfb\xee\x48\x1d\x25\x75\x50\x4e\xac\xbd\xf1\x82\x8a\x3b\x51"
- "\xdc\xa4\xd9\x3a\x2f\xc8\xef\x58\x9f\xa2\x0d\x65\x3d\xf1\xdf\x37"
- "\x4c\x04\x2e\x8d\x1a\xde\x2e\x76\xb8\x37\x8c\xd3\xf1\xe6\xa3\x17"
- "\x3c\x9a\x2e\xd5\x26\xe5\x07\xe6\x58\xc8\xbf\x98\xf9\x55\x7d\x83"
- "\x76\x03\xc7\xe5\x48\x92\xeb\xc9\xc9\x4d\x26\xae\x8b\x61\xa2\x3e"
- "\x0f\xc6\x07\xb8\xb5\xb1\x7c\x2b\xd6\xe1\xa1\xce\x0c\xae\x4f\xb3"
- "\x83\x86\x9c\xa1\x17\xe4\x9a\x73\xa4\xb8\xc9\xc4\x32\x85\x63\x88"
- "\x44\x4a\x00\x47\xee\xd1\xbe\xe0\x91\xeb\xb0\xfc\x0d\x02\xc0\xe2"
- "\x75\x60\xc8\x86\x74\xfe\x5e\x31\xa7\xa9\xd8\x70\xeb\x37\xf1\xda"
- "\xb3\x28\xf1\x02\xef\x1b\x82\x3d\x67\x1b\x5e\xf0\xb0\xde\xc9\x70"
- "\x7d\xb4\xa1\x86\xe1\xa9\xd8\x77\x2f\x0c\x03\xed\x8c\xe8\xd1\x9f"
- "\x5e\x98\x17\x65\x97\x71\x7b\x64\x3b\x03\x68\x8b\x8c\xb3\xaa\x7c"
- "\x4d\x65\xbf\x59\x7e\x96\x6b\x7d\xd7\xfb\x03\x78\x90\x7f\xeb\xd3"
- "\x74\xbf\x09\x9f\xd6\x6f\x6e\x1f\xb7\x3d\xba\xcd\x5a\x7b\x2b\xb8"
- "\xbd\x28\xb7\x23\x8a\xb7\x79\x5d\xa6\x0f\xd2\xf6\xf6\xf8\xb0\x6f"
- "\xa0\x78\xb9\xb1\x74\x89\x2d\x6f\xf1\x92\x67\x72\x57\xce\x7f\x66"
- "\x61\xee\xf3\xf9\xa3\x6c\xcf\x2f\x79\x32\x6f\xe9\x53\xcf\x30\xd5"
- "\x2c\x2f\x78\xfe\xa9\x67\x6c\x2c\x59\x72\xb3\xa7\x4d\xcb\xbd\xf7"
- "\xe1\xd9\x8f\xa4\xd0\xbd\xf3\x91\x06\xcb\x7f\x5a\xe6\x28\xf5\xea"
- "\xa1\xc9\x93\x7e\x98\x3b\x69\xe6\xc3\x33\xe6\xc8\x43\x2f\xdd\xef"
- "\xb3\x97\x24\xce\x10\x43\x87\x69\xa2\xd8\x1b\xc2\xf8\xf6\x39\x45"
- "\x25\xe3\x55\xbc\xf4\x17\xf3\x62\xe3\xa5\xbf\x88\x46\xbf\xb8\x1d"
- "\xbf\x1a\xa2\x9f\xf8\xf1\x83\x74\x2f\xc9\x54\xf4\x95\xfc\x44\x87"
- "\xfb\xc5\x8a\x1e\xfa\x2a\x91\x67\x29\xd9\x4f\x49\xad\xcf\xbe\x08"
- "\xf9\xbf\x7e\x6f\xf4\xbb\x1e\x7b\xf2\xc5\xa6\x6e\x7b\xb2\x5b\xa6"
- "\xbc\xd8\x6d\x5b\x22\xcd\x0c\xbb\x32\x99\xed\x4a\xb5\x9e\x54\x32"
- "\x41\xd2\x54\xaf\xfc\x6d\x26\xdd\xae\x64\xde\x96\x7b\x52\xd2\xfe"
- "\xf8\xc9\xb8\x68\x1e\x97\x6b\xfa\x1a\x8f\x73\x39\xb9\x7e\x97\x3a"
- "\x28\x9b\xd7\xb4\xfd\xc9\x5e\xd6\x15\x30\x7f\x75\x08\xd1\x7f\x50"
- "\xb6\x6a\xd3\x4f\x1c\xbc\xc6\xcd\x7a\xb3\x46\x4f\x03\xce\xd0\x4f"
- "\x3e\x10\xee\x17\xea\x95\x4d\xf9\x42\x98\xe5\xba\x58\x3f\xf4\x5e"
- "\xf6\x2d\x62\xdb\x09\x75\xee\xea\xa1\xd9\x92\xf1\x4c\x0b\x3d\xb6"
- "\xec\x4f\x62\xe4\x7f\xbb\xfc\x2e\xe1\x4f\x4e\xea\xf1\x1e\x0a\x86"
- "\x93\xd1\x34\xbc\x8c\xca\x8d\x02\xf2\xe6\x27\x9b\xb8\x0e\xc6\xa7"
- "\x8f\x5e\xdc\x89\xbc\xa6\x1e\xfc\x15\xa7\x75\xe3\x4f\x5b\x67\xd1"
- "\xd7\x58\x54\xbb\x4b\x26\xf4\x86\xab\xc4\x78\x2a\x9e\xf7\xa5\x78"
- "\x72\x53\x1f\xe6\x49\x1d\x5f\x97\xe3\xaa\x78\xc7\xe5\xb8\x2a\xbe"
- "\xd8\x83\xab\x17\x6f\xb8\x1c\x57\xc5\xcd\x51\xfb\x4a\xda\x3a\x4a"
- "\xc9\x04\xc6\x19\xd3\x18\xfa\xbd\x09\x74\x56\xd1\x83\xbf\x12\xf3"
- "\xe5\xf8\x2b\x19\x96\x18\x7f\xc5\x7c\xbe\x2a\x1a\x4e\x55\xa2\x79"
- "\x63\xc0\x3a\xa3\x76\x1e\xac\xe4\x65\xfe\xd6\x3d\xb7\xe3\x55\x63"
- "\xc4\xfe\xaa\x1b\x3f\x5c\xd9\x8e\xe8\xd1\xc5\x45\x50\xc3\x6f\x59"
- "\x1d\x6c\x5e\x5e\x57\xba\xc2\x5c\x74\x52\x5f\xf3\xc0\x7d\x33\xdb"
- "\xce\xfc\x4d\x28\x4e\x67\x7c\xf2\x37\xc6\x40\xef\xcd\x4a\x2f\x2d"
- "\xe9\xfe\xfe\x47\xfb\xcd\x2b\xb6\x27\xad\x23\x5b\x6d\xe5\x9d\x9c"
- "\x1e\x04\x0d\x4d\xe1\x74\xf6\xdd\xea\x0d\x66\x6e\x38\x8b\x12\xc3"
- "\xdd\xd8\x4d\xff\xbd\x9d\x89\x8e\x93\x47\xf6\xf9\x4b\x16\x2c\x5d"
- "\xb4\xe8\xcb\x45\x51\xf4\xbe\x5a\x99\x3b\xc2\xdf\xc1\xea\xdb\xb1"
- "\xfe\xe9\xd5\xa8\x13\xfa\x7f\x7e\xab\x9a\x37\x37\x42\xfe\x2d\xae"
- "\x53\xba\xe4\x63\xad\xea\x1c\xf8\x4b\xe9\x51\xf2\x19\x34\xf2\x92"
- "\x4d\xb8\x37\xce\xed\x19\xe3\x8d\x6d\x97\x8f\xf1\x4b\x94\x78\x8c"
- "\x5f\x1a\x11\x59\xc1\xe7\x70\x5e\x82\xfd\xb3\x4c\xea\x9a\xfc\xcc"
- "\x7e\x10\xb0\x99\x5b\x61\x2f\xb7\xcd\x5c\xe5\xb9\x27\x77\x95\x41"
- "\xee\x15\xf3\xb7\x57\x42\x97\x44\x0b\xfb\x22\xf0\xfe\x18\x7f\x7b"
- "\x85\xbf\xb9\xc4\xdf\xff\x94\x79\x70\x5f\x7a\x9a\xa4\xed\x88\xf7"
- "\xb6\xea\xd3\xf2\xfb\xd8\xd0\x15\x5e\x72\xe9\xba\xb5\x05\x2a\x23"
- "\x9f\x4f\xdf\xa2\xc6\xa3\x99\xc7\x82\xeb\xcb\x5d\xe5\x51\x75\x5c"
- "\xe2\xef\xaa\x91\x45\xe9\x10\x2f\xed\xbd\xe2\xda\x7d\x72\xa8\xb7"
- "\x18\x68\x66\x61\x74\xf5\xeb\xde\xab\xd4\xbe\x43\xcc\xbc\xcf\xfe"
- "\xa3\x1d\xee\x4d\x69\xf1\xfe\xa7\xca\x77\x68\x53\x86\xee\x93\x55"
- "\x2a\x7d\xa0\xc8\xc2\xf2\x93\xed\x9c\xd3\xb4\x69\x5a\xb5\x9c\x2f"
- "\x37\x4d\x8b\xde\xe3\xb4\xad\x5e\xd7\xf7\x1c\xbd\x74\xf1\x0a\xfb"
- "\xa6\xa9\x3d\xbe\xaf\xae\x7e\x28\xbf\xa9\xdb\x47\xcc\xed\xea\x57"
- "\x1d\xd5\x36\xbc\xdb\x19\xe5\xab\xe8\xe7\xf9\x98\xed\xc7\x6a\xf5"
- "\x5d\x55\x3f\xda\xd0\x80\x34\xd8\x13\x9b\x65\x3c\xc2\x95\x21\x1a"
- "\x96\xff\x7d\xfe\x66\xcf\xa6\x8b\x9a\x1d\xda\x66\x2b\xe2\xf6\x6c"
- "\x7a\x8d\xe1\xfa\x90\x4f\xc8\xfd\x80\xcd\xd4\xdd\xe6\xa8\xfa\x74"
- "\xd8\x0a\x27\x9b\x47\xe8\xed\xf2\xd1\x26\x19\x3f\x85\xbf\x73\x1d"
- "\xdd\x27\xc7\xa2\xc5\xb9\xf9\xf6\x55\xb9\x8b\x97\x2c\x2e\x48\x21"
- "\xc7\xfc\xe7\x17\x8f\x41\x92\xed\x29\xfb\xe2\xfc\xdc\xc5\x32\x5a"
- "\xb1\x0c\x84\x5c\xb0\x2a\x9f\xf7\x3e\x2e\xdb\x83\x4f\x93\xba\xbc"
- "\x71\xf3\x78\x35\xdf\x6f\x2e\xd7\xe9\x54\x7e\xfb\x5b\xe4\x50\x8f"
- "\xef\x95\xfc\x66\x70\x12\xfa\x79\x98\x69\x58\xc5\xf7\xd9\xd2\xac"
- "\xf4\x8b\xcd\xf5\x97\xfb\x64\x6d\xf6\xe9\x3e\x59\xa0\xef\x34\xe6"
- "\xf5\x28\x58\xa0\xff\x2d\x74\x79\x99\x2d\xe9\xdd\xfe\x9d\xda\x77"
- "\xc7\x79\xac\x64\xbc\xfb\x57\x58\xde\x6e\x7e\xc0\xeb\x98\xcc\x31"
- "\x7b\x35\xbe\xda\x92\x1d\xd5\x5e\xe9\xcb\xcb\xb0\xf8\x9c\xd4\x98"
- "\x60\xb4\x2f\xdb\x96\x8f\x30\xf7\x5a\xf5\x7a\x6c\x6b\x8c\x90\x77"
- "\x5b\xde\x0c\x18\x3d\x49\xd2\xff\x18\xe5\x00\xab\x4c\xf7\xa3\xf1"
- "\x75\xf7\x6b\xcb\x8e\xf8\x36\xa2\xed\xc3\x91\x5e\xd3\xe3\x27\xb8"
- "\xc5\xc5\x30\x90\x86\xf9\xbf\x74\x54\x74\x5a\xf4\x38\x4d\x9c\x3c"
- "\x0d\x0a\xf4\xf2\x85\x18\xa4\x49\xf3\xf3\xf2\x58\x06\xcd\x5f\x98"
- "\xf7\xfc\xb2\xa5\xcb\xb5\xa1\x9b\xb8\x88\xc3\x50\xcb\x2c\x77\x6b"
- "\x6f\x6c\x4b\x16\x2e\x5c\xa0\x92\xb4\x81\x8c\xdd\xb3\x52\x7e\x0c"
- "\xa5\xb0\xff\x37\xd9\x7b\x74\xc5\xd2\xed\xc2\xb8\xa5\x05\xbf\xf3"
- "\x52\xfe\xc8\x71\x2d\xcd\x8b\xb5\xd1\x4a\x0b\x75\xde\x97\xe3\xec"
- "\x64\x9f\xb3\xa3\x2f\xb7\x0b\xb9\xc7\x83\x71\x2d\xfb\x13\xfa\xd9"
- "\xc7\x47\x65\x7c\xe6\xcb\x10\x05\x67\x4f\x37\xbe\xd7\x3f\xd6\xbc"
- "\x5e\xf9\x4c\x98\xf8\x9b\xb5\x1c\x53\x02\xef\x61\xff\xbf\x74\x52"
- "\xc9\xc9\x52\x5f\xf7\xde\x8b\x31\x09\xf6\x66\x29\x68\x7f\x69\xe6"
- "\xe5\xfc\x5d\x66\xbe\x9c\xef\xd9\xd7\xb2\xcc\xa6\xe3\x38\xea\x1b"
- "\xf4\xa0\xbf\xb2\x83\xfa\x9a\x71\xb5\xf6\x4d\x04\xbe\xe7\xb2\x6c"
- "\x57\x88\x01\xfd\xef\x61\xbf\x86\x53\x54\xb6\x49\xd1\x54\x99\x3d"
- "\xca\x37\x30\xed\x0c\x95\x15\xab\xb1\x2d\x73\xe9\xfc\x87\x7e\x4a"
- "\x5d\x8e\x61\xa8\x79\xbd\xb4\x8f\xa2\xaf\xb2\x1d\x3a\x6e\xd9\x86"
- "\xc7\xf3\x9e\x1e\x3d\xa8\x74\x8e\xf4\x17\x51\x31\x35\xba\xb8\xff"
- "\x80\x33\x56\x87\x83\xbc\xe8\xbf\xd9\xaf\xe3\x4a\xcf\x13\x4d\x13"
- "\x93\xe6\xe7\xc3\xc0\x5e\xbc\x68\xd1\xc2\x65\xcb\xf5\x38\xe3\x19"
- "\x4b\xf3\x16\xa8\xb8\xe2\x77\x63\xf8\x57\x82\x87\x27\x70\x68\x72"
- "\xa4\xaa\xdb\x38\x7d\x77\x14\xaf\x89\x48\xff\x51\x69\x73\xbd\x76"
- "\xb0\x4a\xb3\xbf\x4e\xd1\x2b\xb3\x94\xff\xd5\x2b\xd7\x2a\xdd\xf6"
- "\x9a\xb7\x3b\xdc\x2f\x17\xe8\xba\x2d\xaf\xb5\xb6\xd3\x4d\x15\x7c"
- "\x46\x8e\xcf\x12\x6c\x7b\x5d\xb4\xf0\xda\x2a\xf2\x54\xe8\xdf\xa2"
- "\x63\xbd\x69\xf3\xeb\x2a\x86\xb6\x67\x09\xfb\x8a\xbc\xf6\x69\xa4"
- "\xe4\x58\x9a\x48\xd9\x97\x05\xfd\x2c\x95\x79\xa2\x7f\x1b\xfb\xf0"
- "\x72\xec\xab\x97\x5b\x58\xaf\x63\x59\xc6\xdf\x6b\x68\xa1\x97\xf7"
- "\x40\x46\x43\xa6\xbf\xe6\xf3\x27\x1f\x4b\xdb\xb0\x9a\xcc\x5c\x07"
- "\xe4\xb5\xaf\x6e\x3b\xe3\xf6\x15\x3a\x0c\x59\xa6\xc9\x6c\x1f\xd7"
- "\xe3\xa3\x97\xeb\xb5\x75\xff\x11\xda\x3a\xeb\x08\xe4\x83\xfc\xef"
- "\x5f\xa1\x68\x75\xff\x87\xb7\xb8\xc8\xc1\xdf\xa6\x54\x71\xab\x3e"
- "\xde\x8b\x7e\xec\xe5\x6f\x40\x42\x17\x84\xbd\xf3\x72\x01\xfa\xb0"
- "\x57\xf3\x01\x07\xad\xbc\xd2\xa0\x7c\xfb\x5f\x5e\xc0\x38\x00\xdc"
- "\x4c\x0d\x6e\x26\xe0\x62\xfc\x6f\xd0\xe2\x65\xbf\xb2\x49\xaf\x03"
- "\xf3\x9f\x1f\x7a\x73\x90\x75\x67\xb4\xdb\x8c\x5f\x6a\xa9\xdc\x4b"
- "\xf7\x41\xee\x5b\x04\xfb\xae\xf5\x7c\x6f\xef\x95\x3a\x7d\x2e\xe4"
- "\xba\xb5\xb6\x8f\xe2\xb5\x3e\x5e\xe7\xd3\xea\x62\x79\x6f\xd0\x61"
- "\xe2\xd9\x1c\xb9\x74\x76\x3b\x60\x9a\x31\xaf\xfb\xb5\xef\xac\xa5"
- "\x96\x5e\x60\x3f\x47\x1f\xe6\xed\xaf\x8b\xdc\x50\x1a\xef\x41\xf5"
- "\xd7\xbf\x63\x57\x7d\x81\xf1\xf5\x6a\x66\xcf\xde\x12\xca\x03\xff"
- "\xe0\x07\x57\x0b\xbd\x3a\x95\xeb\x65\x5e\xe0\xb1\xec\xc4\xd8\x60"
- "\x7c\xa6\x88\x4b\x67\x77\xdb\x96\x50\xff\xd3\xf4\xea\xb3\x3c\x46"
- "\xbc\x1f\xcc\xfe\x87\x48\xb3\x70\xdc\xfd\x53\xf4\xea\x23\x3c\x3e"
- "\xdc\x16\xe0\xd0\x1a\xea\xc8\xb9\x9f\xcf\x5c\xb3\xcc\x5c\x5b\x08"
- "\x9d\x7b\x11\xcb\x92\xf2\x4f\xd9\x86\xe7\xef\x25\xf1\xbd\x73\x81"
- "\x88\xc8\xf1\x5d\xcd\xe3\x5b\xfe\xe9\xda\x56\x11\xf9\xc2\x4d\xe2"
- "\x48\x80\xe8\x0b\x23\x85\x82\x46\x03\xb7\xdb\xe8\x3c\xcb\xe7\xc2"
- "\xb7\x93\xd7\x51\xcc\xbe\x6c\xe6\x2d\xab\x29\x8d\xcf\xd4\xf3\xb7"
- "\x80\x1a\x03\x95\xd4\x98\x5f\x49\xc7\x42\xe5\xe4\x59\xc1\xf1\x51"
- "\x5e\xdb\xf0\x47\x47\x39\xef\xb1\x25\xe3\x7e\xb2\xed\x87\xb2\xae"
- "\x61\x7f\x3c\xfe\x67\xfa\xa3\xe7\xcf\x64\x7b\x54\x3e\x8f\xaa\xcf"
- "\x39\x46\xf5\x59\xc7\xc8\xd9\x22\x22\x6c\xd7\x15\x3d\xcb\x75\x14"
- "\x03\xd6\x76\x3e\x7f\x9e\x16\x69\xb7\xa6\xa0\xff\x26\xde\x3f\x68"
- "\x0c\xf8\xc9\xb3\x64\x3f\xb7\xf1\x57\x55\x17\xc8\xec\x59\xf2\x07"
- "\x79\xaf\xec\xad\xb3\xdb\xbd\x0b\x9a\x59\xa7\x0c\xf1\xd9\x7b\xde"
- "\x93\x84\x8d\x11\x29\xe5\x36\x86\x55\xbb\x81\x2f\x93\x5e\x1e\x3a"
- "\xa7\x5e\x5e\xc6\x8a\xdb\xc6\xf8\x40\x9b\x1a\xe6\x28\x9c\xd4\x63"
- "\xa6\xd0\xda\xfc\xa9\x33\x27\x1a\x3f\xaf\xd6\x33\x7e\x38\x66\x6b"
- "\x04\xe3\x85\xb6\x65\x01\x07\x11\xbd\x0e\xb4\xd9\xac\xad\xe1\x9a"
- "\xb7\x5c\xa0\x54\xcf\x12\xfe\x16\xdc\x6b\x77\x58\x66\x99\x40\x1f"
- "\xe7\x76\x97\x5e\x24\x13\x8f\x1b\xef\xdb\x94\xca\xf7\x0c\xf3\xb5"
- "\x74\x1e\x33\x7f\xf2\x51\x17\x7e\x1b\xf0\x2b\x66\xba\xc3\x75\x13"
- "\xc6\xab\x18\x6d\xd8\x85\xb1\xda\xce\x57\x45\x8b\xfb\xf7\x72\x5c"
- "\x12\xcd\x86\xea\x49\x07\x1f\x85\x84\xfc\xde\x32\x78\xa6\x7c\x57"
- "\x04\x7c\xc4\x6b\x38\x55\xaf\x50\x6a\xc4\x5d\x16\xdc\x06\x59\x57"
- "\xf9\x8a\x3c\x97\x9c\xc6\xeb\x9a\x6f\xc9\x6f\x6b\xbc\xb6\x5b\x97"
- "\x7d\x1b\x07\xf3\xd9\xcd\xf2\x93\x46\x5e\xf7\x29\x3e\x96\xa1\xd1"
- "\x79\x06\xf2\x40\xfe\x0f\xd1\xe6\xd0\x57\xa4\x7d\xc1\xbc\xdf\x9b"
- "\x3d\x01\x5d\xb6\x5e\x6c\xcd\x21\xde\xff\x49\x5d\x27\xfc\xa9\x2d"
- "\x16\xd1\x18\xa8\x97\x67\x76\x1b\x03\x61\xb9\xff\x83\xf7\x86\x19"
- "\x01\xbf\x05\xba\x6f\x13\xe3\x4e\x4f\xe7\xbd\x23\x5e\x57\x9b\x11"
- "\x10\xfe\x99\xab\x2c\xfc\x2d\xcc\x61\x72\xef\x40\x4b\x6f\xb4\xc2"
- "\x6e\x58\xe5\xb7\xa0\xef\xa1\x6e\x58\xed\x39\x49\xcc\x6f\xc8\x9b"
- "\xde\x9d\xb7\x3d\xc7\xc4\xdf\x76\xe6\x3a\xa3\xd2\xfa\xcc\x74\xa0"
- "\x2c\x8f\x95\x96\xa6\x74\xe6\xd7\xf7\x74\xdb\x94\x7c\x7e\xa1\x1d"
- "\xf3\xe6\xf2\x1c\x43\xa4\x3d\xc7\x18\x06\x6c\xd0\x7e\x9a\xfc\x26"
- "\x67\xc8\xaf\x7d\xe3\xaa\x15\xfc\xdb\x4c\x62\xf3\x90\x79\xc8\x67"
- "\x62\xb8\x1c\x0b\x82\xbf\x0d\x22\xfa\x5f\x9f\xf8\xdb\xcf\x9b\x0c"
- "\x56\x4f\xd1\xa3\xa0\xa7\x37\x6a\x98\x9f\xc3\xe6\x3f\x8e\xb5\x3d"
- "\xcd\x3a\xcc\x1b\xd2\x37\x20\x0c\x1e\x0b\x27\xff\x71\xec\x98\x56"
- "\x32\x14\x81\x6e\xd5\x1a\xd4\x1b\x0f\x7b\xc1\x83\xce\x88\x80\x1e"
- "\xfa\xc6\x14\xa6\x1b\x4b\x1b\xfb\xca\xfd\x71\x9c\xf4\x4f\x4b\x09"
- "\xa7\x79\x83\xad\x54\xef\xfa\x0b\xd5\x87\xbc\xae\x9a\x0b\x7e\x93"
- "\xf2\x53\x33\x31\xdc\xc5\xfc\xce\x09\x5a\xcd\x0d\x6f\xa7\xde\xf6"
- "\x06\xd8\x3e\xc6\x1c\xf6\x57\x65\x2b\xbe\x51\xa3\xdb\xc5\x57\xee"
- "\x43\x45\x3a\xc7\xcf\x10\xc2\x4a\x91\x8d\xff\xc1\xb1\xf2\x9d\xa2"
- "\x23\x83\xc6\xac\xe6\x35\xb9\x37\xda\x60\xa3\x64\x69\x70\xcf\x2b"
- "\xb8\xc8\x7f\x05\xb8\x4c\x33\xf5\x15\x72\x5f\x0a\x7d\xfa\x0f\x0a"
- "\x03\x76\x38\xe5\x3f\xb2\x20\xe3\x9d\xce\x2f\x78\xcd\xf6\xcd\x47"
- "\x50\x0f\x35\x86\x9a\x88\xe3\xf0\x54\x45\x30\x3f\x9e\xb7\x92\xe6"
- "\x93\xe7\x3c\x47\x15\x93\x23\x22\x23\x0d\xf6\x3a\xef\xc7\x38\x59"
- "\xc6\xf1\x5a\x40\x51\x98\xfa\x7a\x31\x33\x72\xec\x08\xc0\x98\xfe"
- "\x11\xef\x7d\x41\x4e\x84\x85\xd5\x78\xf0\x12\x66\x7a\xc8\x4e\x19"
- "\x4b\x62\xfd\xd7\xde\x1a\xb0\x8e\xee\x11\x46\x8b\xf4\xe9\x8c\x94"
- "\x74\x59\x31\xb6\x76\xd9\x9e\x8d\xc7\xc6\x45\xf9\xff\x25\xa1\x2e"
- "\xe9\xff\x27\xcc\x47\x43\x95\x72\xdd\xf1\x8f\x63\x3b\xdc\x15\x01"
- "\x1f\xbd\x21\xd7\x5f\x37\xf1\x19\x0f\x29\x63\xdf\x9c\xef\x4f\xfe"
- "\xc4\xc7\x30\xf8\x2c\x6b\x64\x45\x78\x77\xe9\x3f\xa4\x7e\xcd\xef"
- "\x26\x36\xb6\x75\x78\x44\xf1\x27\x3e\x3e\xc7\xa8\xc1\xb6\x9c\xa3"
- "\x37\xaf\x15\x25\x9f\x40\xbf\x78\x73\x9e\x1a\x1b\x79\x3f\x8a\xdf"
- "\x87\xba\x32\xa0\x57\x57\xec\xac\xec\xe4\xbd\x80\x8a\x39\xc2\xfd"
- "\x75\x4f\xbb\xf9\x13\xdf\x6c\x2b\xeb\x54\x6f\x16\xf8\x0c\xb5\xc5"
- "\xda\x3a\xa0\x8c\x8b\xd1\x9b\x8d\x24\xb6\x5a\x53\xbc\x00\x02\x7b"
- "\x36\xfd\x0c\x6d\xfd\xbc\xd3\x4d\xc6\x2e\xe8\x82\x9d\x46\xe2\xf5"
- "\xec\xd4\x2d\x43\x29\x13\xef\x86\x9e\xa1\x37\x8f\x86\x8c\x94\x8e"
- "\x5f\x9a\xff\x6b\xf6\x64\xc0\xcd\xe2\x35\xd2\x86\x0b\xbc\xc6\xf5"
- "\x96\x3c\xa7\x5c\xfa\x16\x8d\x88\x00\x1e\xef\xf7\x94\x0e\xa5\x11"
- "\xbc\x4e\x89\xb4\x8c\xdc\xb0\xda\xf7\xd4\xd7\x22\xd6\x0f\xa5\x51"
- "\xb1\xf5\xbe\xb9\x5b\xad\x63\x6e\x6d\x91\xb6\x95\x9f\x6e\x84\x6d"
- "\x75\x0a\x70\x77\x08\x77\x92\x10\x5f\xb3\x1a\x95\x6f\xc2\x5b\x9b"
- "\x2d\x15\x8a\xee\xe4\x3e\x1f\xe8\x8d\xf7\x51\xb5\x3d\x25\x83\x8c"
- "\x07\x92\xe2\xad\xe3\xef\x50\x47\xad\x13\xa7\xc9\x76\x68\x67\xf8"
- "\xc3\xeb\x6f\xe3\xd8\x60\xf2\xec\x7e\xee\x7c\xb5\x1f\xc5\xe7\xfb"
- "\x7d\xf4\x96\x8c\xc7\xb8\xe9\x2d\x4a\x7d\xe9\x2d\x4a\x6b\x58\x24"
- "\xfb\x55\xa3\x78\xd1\x44\xdc\xde\x48\x31\xf3\x19\x68\x02\xed\xe6"
- "\xfa\x98\x36\x1a\x43\xe7\x3d\xce\x02\x11\xf1\x3c\xcd\xba\xe8\x5b"
- "\x61\xcf\xb2\x5d\x34\xb3\x25\xa4\xce\xa2\xce\x25\x7f\x35\xe0\x55"
- "\x0f\xa5\xb4\xd3\xb4\x35\xd9\x9b\x47\xbc\x5f\x71\x93\x67\xd9\x1e"
- "\xc0\xde\x7a\x03\xcf\x05\x9b\x81\x1f\x35\x27\x6c\x6d\xf2\x06\x9b"
- "\xa9\x01\xfc\x3d\x23\x5f\x48\x38\xc8\xf3\xb0\xec\xef\x56\xab\x2d"
- "\x57\xc5\x60\x90\x7d\xed\xde\xe7\xd3\xfa\xe1\xbd\x20\xe1\xd9\xbd"
- "\xa0\x12\xbd\x4f\x3a\xae\x15\x7d\x6d\x7d\xc7\xb3\x6c\x07\xf1\xf8"
- "\x70\x7e\x3c\x97\x7b\xdb\x90\xf7\x6c\xec\xb8\x70\x1e\xbc\xfb\x08"
- "\x70\xbf\xd3\xb3\x57\xcd\x7b\xa8\x3d\x79\x2a\xdf\xe2\xf3\x68\x6f"
- "\x99\xb7\x02\x47\x6a\x6d\x7f\xeb\x1d\xdc\x56\x8c\x5d\xa6\xb7\xe0"
- "\x2f\x89\x7d\x52\xc1\xfb\xa0\xfb\x75\x8d\x72\xcf\xae\x72\xf8\x8c"
- "\x50\x44\x28\x79\x56\x79\x3c\x02\x39\xe0\xc3\x95\x65\x81\x94\x27"
- "\xb7\xb3\x1f\x50\xe5\x09\x8b\x41\x8d\x2f\xf7\x85\xf5\x95\x44\x63"
- "\x1c\xb5\x9f\x98\xc6\x6d\xd5\xc7\x98\xbf\xe1\x18\xe1\x3d\x61\xf6"
- "\xb7\xef\xb2\x92\xa2\x3f\x51\x06\xb8\x1f\x69\xba\x9b\x43\x9b\xcb"
- "\x1c\xed\xc9\x7f\xcc\xe2\xf3\x91\xba\x6f\x30\xf8\x77\x7c\xae\xf2"
- "\xe7\xb6\xb2\x8c\xaa\x36\x0a\x8d\x36\x2b\x8f\x6b\x65\x0b\x94\x4f"
- "\x46\x65\x39\xca\x17\x24\xec\x6f\x12\xe4\x8e\x1b\x62\x1a\xfd\x61"
- "\x3d\x52\x40\x56\x61\x3e\xe8\xeb\x0d\x74\x6a\xdf\xcf\xdc\xf6\x20"
- "\x74\xea\xbe\x7c\x3e\x4a\x6f\xdb\xd5\xed\xfd\x6d\x1b\xa6\x6c\x9b"
- "\x6d\x73\xf5\xb5\x25\x61\x06\x8e\xdd\x16\xc1\x67\x25\xf9\xbc\x4b"
- "\xa0\xbf\xc1\xe6\xef\x3f\x68\x96\xe2\x9b\x6d\x1b\x44\xb2\x92\xb7"
- "\xb9\x41\x72\x71\xbf\x78\x6f\x17\x76\x53\x5f\xee\x33\xe0\xc0\xfe"
- "\xc9\x1f\xaf\xe6\x73\x05\xbb\xd7\xb5\x1d\xbd\x6f\xe8\x93\xec\x1b"
- "\xfa\x28\xfb\xa6\x7d\x5f\xea\x34\x55\x0d\x97\xeb\xe5\x57\xd7\x1f"
- "\x15\x5f\x66\x93\xc1\xc6\xdf\xce\x3d\x4d\xd5\xfb\xe4\x19\x18\x8c"
- "\x89\xda\x07\xa9\x2a\x10\x29\x2f\xa5\x5c\x1d\xcc\xaa\x2c\x05\x73"
- "\xd0\xac\xd7\x38\x16\xa5\xf6\x8d\x3a\xc0\xfe\xa9\xd8\x3c\x68\x96"
- "\x3c\x63\x88\xfa\xf8\x1b\x9f\x3d\x72\xa8\x7a\x04\x8f\xd5\xed\xbb"
- "\x28\x4b\xd1\x61\xf5\xf5\xbc\xd6\xac\xec\xbc\xaa\x23\x90\xbd\x9b"
- "\x94\x4d\xa5\xfb\x91\x1b\xa4\x1f\x79\xb4\x8c\xbd\xca\x36\x4a\x79"
- "\x27\x52\x3a\x3d\xb8\xdf\x2b\xcf\x4a\xa2\xbd\x2b\x43\xba\xfc\xab"
- "\xda\xcb\x3e\x49\xdd\xfe\x00\xab\x40\x2b\x45\xea\x1c\x79\x87\xbb"
- "\x3a\x47\xd7\x51\xe4\x37\xc9\xdc\xe2\x08\xe7\x9b\xb9\xea\xbc\xf4"
- "\x17\x28\x95\x31\x0f\xce\x68\xe7\xec\xaa\x9f\xd5\xd6\x35\x32\xd8"
- "\x87\x1f\x65\xcb\x7d\x74\x58\x9e\x09\x64\x1c\x70\xdd\xb2\xed\xf2"
- "\xbb\x60\xd5\xbb\x7b\xf6\x7d\xaa\xe4\x77\xd3\x95\x5f\x6b\xf5\x11"
- "\x9d\x46\xd0\xdf\xbe\x2a\x36\x68\xd5\x1d\xb5\xa3\x48\xd2\x40\xbb"
- "\xb0\xa6\x7c\xa3\x92\x69\xb2\xda\x1f\x8d\xa7\x99\xa1\x88\x53\xc9"
- "\xa0\xaa\x66\x21\x79\xbd\xaa\xf9\xcb\xf5\x89\xed\x93\x75\x5d\x44"
- "\xe1\x39\x0d\xf2\xe5\xed\x34\x89\xeb\xe2\xfd\x39\x1c\xa3\x65\x4d"
- "\x11\xc7\x9c\xfa\x69\x1f\x8e\xed\x15\x2a\xde\xef\x08\xf3\x99\x4c"
- "\xcc\xb3\x91\xe2\xfd\xc5\xa7\xf3\xc9\x98\x9b\xcf\x7b\x5d\x9f\xec"
- "\x66\xfb\x4a\x38\xa1\x0b\xa4\x40\x3f\x01\x9f\xaf\x5d\x4c\x96\xc7"
- "\xed\x80\xed\xcc\x48\xe7\xd8\x5b\x1c\x77\x8b\x63\xe7\x85\x9d\x19"
- "\x03\x71\x3f\x18\xfa\x5c\x9a\x30\xef\xb7\xb3\xbf\x4c\xd8\x2d\x20"
- "\x8f\x4f\x72\xfc\x2f\xa3\xd7\x1f\xa4\xb5\x67\xc9\xcc\xb1\xbd\x42"
- "\x25\x9f\x1c\x69\x0c\x7c\x2a\x6d\x8b\x01\xf9\xd0\xa7\x23\xf2\x5c"
- "\x8e\x35\x92\xfc\xc9\x6e\xcc\xf1\x7b\x54\xbf\xcf\x0b\xd5\x6f\xd5"
- "\x6e\x6e\xbf\x94\x71\xc5\x35\xc5\x45\xb2\xed\xff\xf2\xf3\x10\xe0"
- "\x47\x8a\x0f\x6f\x08\x17\x1f\x76\xa9\xb3\x9c\xf5\x54\x54\x20\x5a"
- "\xbd\xd0\x8d\xd9\x7f\x93\xcf\xeb\xb2\x3f\x0e\xf7\x91\xfb\xc7\x75"
- "\xff\xf1\xc2\x59\x19\xab\x2c\x84\x67\x67\x9e\x56\xa6\x0d\x65\xda"
- "\xea\xa9\xb3\xf8\xb0\xec\x7b\x63\x40\x95\xcd\x95\xf7\x5c\x3e\x0a"
- "\x0f\x5a\x9f\xbb\xf1\x80\xbe\x73\xff\xb8\xff\x21\xc6\x09\x70\xa0"
- "\xf5\xd5\xda\xa5\xf5\x93\xfb\x78\x0c\xb3\xce\x5b\xe8\x27\xfa\x2a"
- "\xfb\xd9\x85\x7e\x1e\xb1\x13\x05\xb7\x18\x32\xbf\x48\x39\xec\x62"
- "\xfb\xd0\xf9\x27\xe8\xd1\x85\x65\x04\x3b\xd0\xf4\xab\xa2\x32\xe3"
- "\x46\xe8\x26\x45\x7e\xd8\x83\x7e\xd1\xca\xfa\xbe\x37\x1f\xbf\x50"
- "\xa5\xfc\xee\xb0\xd4\x8f\xf9\x1b\xb1\xcf\xa1\x4f\x91\xcf\xa9\xa8"
- "\x55\xb4\x42\x37\x0d\x7a\x43\xc8\x63\x47\xff\x61\x3f\x9e\xd6\xda"
- "\xcf\x79\xd7\xfe\x43\xf5\xcb\x92\x47\xe9\x87\x1e\x2d\x36\x7a\x9b"
- "\x8b\x49\xef\xcb\x13\xc8\x87\xfe\x58\x01\xab\xbf\xfc\x2e\x03\xfa"
- "\xb9\x15\xed\x0c\x46\xf5\xa9\xa1\x2d\x08\x98\x27\x28\x65\x16\x19"
- "\xde\x3a\x87\x7e\x9c\x23\x6b\x59\x11\xf4\xaf\x87\x58\x5f\xfc\xe9"
- "\x67\xd7\xe4\xd0\x08\x1f\x6d\x6f\x55\x74\x27\xe3\x06\x5d\x77\x86"
- "\xde\x4e\xee\x8e\x0d\xc4\xf1\xd6\x92\x3f\xa9\x67\x3a\x92\x31\x82"
- "\x78\xce\xe8\x00\xcd\xb0\x2f\xcd\x4a\xd4\xd1\x91\x31\x58\xb6\xc7"
- "\x3d\x96\xf0\x9c\x8a\x67\xd6\x83\xd3\x79\x4d\x00\xe5\x8e\x08\xe0"
- "\x8c\xe1\x43\x9f\xdb\xc3\x57\xc6\x61\xc2\xb3\x26\xbf\xa6\x71\xa8"
- "\x63\x1c\xdb\xbe\xbb\x8b\xfc\xc6\x17\x7e\x4d\xa3\xae\x4e\xa6\xbc"
- "\x3d\xae\x37\xf9\xcd\xfb\x16\x0c\x0f\x7d\x1b\x78\x86\x76\xdc\x10"
- "\xcb\x63\x36\x29\xcb\x94\x1c\x7c\xbb\x85\xf7\x0a\xae\xb2\x5e\x29"
- "\xff\xd8\xe7\xe9\x2a\xcb\xb5\xea\xed\xc0\xfd\x8e\xde\xda\x7e\xf5"
- "\x78\xd8\x91\xd5\x1b\xac\xcd\xaf\xcb\x78\x71\xce\x2d\xaf\x43\x5e"
- "\x40\x57\xa8\xb5\x72\x0c\x6f\xcc\x9d\x3b\x02\xb4\x7c\x1b\x99\x9d"
- "\x67\x79\x4d\x66\x3a\xd5\x56\x66\x52\x15\x6c\x72\xd1\x9e\x31\xf0"
- "\xd5\x0b\xec\xfb\xa0\x64\x08\xeb\xa4\x7c\x96\x52\x2c\xcf\x48\x2b"
- "\x7d\x5d\xd7\xe1\xdf\x49\x2e\xbc\x48\x46\xf5\x8d\x94\x77\xcc\xd9"
- "\x36\x11\x2a\x37\x46\xec\x95\x1c\xf3\x2a\xa5\x6b\x1e\xc7\xbc\xd2"
- "\xe3\x48\x49\xdd\xc7\x01\x9e\x6b\xb7\xa6\x6c\x5e\x46\xa3\x38\xf6"
- "\x9d\xc5\xaf\x74\x39\x35\x5f\xbf\x33\x0e\xed\x4b\xd3\xf6\xfb\xd3"
- "\x54\x6c\xa9\xb7\x5d\xd5\x17\x50\x97\x7a\xbf\x38\x0c\x1b\x46\xc2"
- "\x5d\x46\x23\x2a\x2f\x50\x06\xeb\x41\xb9\x9f\x2b\x9d\x8d\xed\xc2"
- "\xe9\x6d\x16\x11\xfe\xef\x0c\xda\x76\xa6\x27\x36\x9e\x7f\x39\xc7"
- "\xd3\x13\x09\xcf\x55\xa9\xf5\x77\xe9\xf3\x23\xe3\xb1\xa8\x6f\xe8"
- "\x11\x95\xbf\x42\x26\xfe\x66\x2c\xaf\xe5\xf1\xda\x30\x9f\xfb\x51"
- "\x73\xc8\x3b\xcd\x7a\xcc\xb0\x5e\xf7\x11\x8b\x95\xbd\x13\xe9\x0b"
- "\xfb\xcb\xdf\xe1\xf1\xac\xe0\x39\xe3\x5d\x1b\x9f\x35\xea\xb1\x71"
- "\xde\x35\xf0\x3b\x4e\x63\x5f\xf8\x2c\x89\xcb\x77\xa7\xb0\xdd\xa3"
- "\xd9\x8c\x87\x6c\xdd\x69\x4a\x87\xe1\xb9\x8c\xdb\x50\xad\xd6\x91"
- "\x07\x74\xb8\xdf\x5d\xa0\xcf\x67\x3c\xaf\xab\xef\xd5\xbe\xeb\xf0"
- "\x19\x3e\xea\x75\xff\x4a\x5f\x57\x97\x7e\x6e\x1c\x0b\xcc\xfd\xee"
- "\x4e\x7d\x7e\x93\xdf\x23\x59\x3f\xf4\xde\xe5\xab\x68\xd8\xec\xeb"
- "\xcd\x32\xf6\x06\x7f\x77\x54\xcd\xbb\xef\x36\xf5\xec\xa7\x65\x49"
- "\x7c\xcb\x6f\x0d\xb2\x8d\x61\xc4\x1c\xac\xe2\xdf\xb5\xa9\xf9\x57"
- "\x3f\xe7\xfe\xee\xd9\x9e\x7a\x7e\x96\xd6\x3d\x8f\xa2\x0e\xf6\xeb"
- "\x60\xf8\x4a\x37\x79\x97\x7d\x68\x78\xef\x2b\x4b\xcd\xaf\xef\xd6"
- "\x5d\x41\x17\xcb\x60\xfc\x46\x34\x7b\xd2\xdb\xf6\x37\x85\x5f\x07"
- "\x25\x8d\x29\x27\xeb\xa1\x22\x9f\x69\x80\x8a\xe3\x64\x39\x45\x3f"
- "\x9b\xcf\xef\x99\xd6\x3d\xb7\xf3\x5a\xdc\xcf\x0e\x7a\x79\xde\xee"
- "\xca\x49\x9d\xc1\xb6\xbe\xd4\xc5\x7f\xb6\x6b\x34\xca\x21\x6d\xe0"
- "\xef\xcf\x05\x4d\xa5\xab\x69\x14\x7f\xd3\x13\xe9\x72\x9d\xc0\x3f"
- "\xe4\x99\x8e\x6f\xa4\x93\xf5\x1b\xe5\x7c\x1e\xe0\x67\xc7\x61\x5f"
- "\x86\xe4\x3a\x2a\xd7\xbf\x65\x88\x8b\x63\xff\xbd\xd7\xe9\xeb\xa3"
- "\xc6\x6a\xe7\x73\x78\xce\x88\x7a\xee\xaf\xaf\xe5\xfb\x68\x67\xbe"
- "\xdc\xbb\x64\x9f\xe7\x25\x3c\x5f\xb3\xad\xa4\xfb\x09\xed\x7c\x4e"
- "\xb5\x65\xe7\x73\xb5\xf9\xc4\x6b\xd5\xc7\xab\x64\x1c\xaf\x9d\xd9"
- "\x3e\x7a\x77\x83\xb6\x1e\xd3\x24\xe9\x8a\xf5\xdd\x17\xd9\x06\xfb"
- "\x9b\x67\x33\xf2\xf1\x3c\x91\xeb\xa0\x2c\xa5\xc3\x87\x38\xee\xa5"
- "\x2f\xaa\xff\x9f\xf2\x5a\x5f\x42\x99\xf8\x16\x91\x2c\x53\xd2\x35"
- "\x4b\xfa\x9c\x6d\xbe\xde\x87\xab\x59\x94\x84\xd9\x5e\x4a\x05\xcd"
- "\xa5\xe1\xca\x73\x38\xe7\x4d\x17\x9b\x87\x78\x98\x2e\x61\xc3\x5a"
- "\x61\x27\x98\xdb\x93\xbb\xa6\xf4\x76\x56\x91\x71\xe3\xdd\xf0\x43"
- "\x52\x3e\xb4\x3f\x9f\xd3\xe0\x87\x7e\xb6\x8d\x68\x79\x48\x74\xda"
- "\x6e\xe4\x33\x41\x3f\x9f\xe3\xdc\xc6\xbe\x2b\x3f\xcf\x88\xf5\x5d"
- "\xf9\xf9\x14\xfc\x8a\xf1\x3b\x49\xf4\x8b\x54\x5c\xe7\xf4\xfc\x7e"
- "\x31\xa5\xc3\xfd\xf3\x39\xc0\xa3\xd4\xb1\xae\x4e\x26\x72\x79\x8c"
- "\x03\xdb\x45\xc9\x7f\xf1\xab\xfe\x0e\xca\xc4\xb3\x59\xf4\x1f\x92"
- "\xaf\xf5\xd7\x86\xe7\x34\x9b\x13\xf3\x5a\x32\x70\x32\x14\x7d\xee"
- "\x7f\xbd\x8f\xfb\xcb\xed\x6d\x4f\x0e\x53\xf4\x39\x4d\x86\xc9\xfd"
- "\xf7\x27\xa3\x1c\x70\x29\x6e\x5e\xb1\x5d\xc7\xa7\x86\x27\xde\x37"
- "\x32\xb6\x03\x86\xd2\x83\x90\x1f\x30\xf4\xfc\xdd\xb8\x1f\xca\xdf"
- "\xd7\xc0\x98\x22\x1f\x6c\x62\xb3\x7e\x06\xb4\xc3\xfd\x8b\xac\xc3"
- "\x79\x6a\xff\x80\xcb\x06\xa2\xca\x72\xcc\x8b\x44\xe5\x51\xa7\x2c"
- "\xcf\x6d\x3d\x4d\x3f\x7f\x58\xd5\xfb\x8b\xb1\xbd\xf1\x52\xd1\x70"
- "\xe8\x77\x95\x3e\x8e\x8b\xc1\xfa\xd0\x78\xef\xb0\x00\x79\x2b\x23"
- "\x98\xf3\x43\x99\x59\x45\xc2\x73\x9a\x7e\x71\xb1\x31\xd8\x7a\x95"
- "\xf3\xe1\x2f\xa4\x4f\x96\xe8\x74\x91\xb7\xf0\x4e\xf9\x2d\xeb\x73"
- "\xb4\x6b\xa4\xd7\x2f\x63\xc2\xf3\xbd\x8c\x2d\xca\x7e\x1a\x3c\x37"
- "\xc0\xc6\xee\x8e\xa9\x18\x41\xde\x2a\x4e\x47\x9a\x37\xe0\x97\xb1"
- "\x17\x7b\xfc\xc8\xbb\xcc\x8a\xa7\x7e\xf9\xa9\x8c\xbf\xc0\xed\x0d"
- "\xdd\xef\xe1\x36\x47\x8a\xbb\xcc\xdc\x07\x27\xec\x3f\x6f\xa8\xc3"
- "\xc3\x3c\x61\x5b\xc1\x6b\x85\xbf\xdc\x07\xba\x13\x91\x92\x2e\xf3"
- "\xd5\xf5\xe1\x97\xf2\x3c\x90\x33\x24\xce\xf9\x93\xbb\xcc\xac\x93"
- "\x94\x16\xf5\x31\x4f\xaa\x14\x9e\xf6\x94\x50\x66\x87\xfb\x97\x27"
- "\x0f\x3b\xd4\xd8\x5c\x25\xdc\x93\x7a\xdf\xab\xb4\xbe\x23\x4d\xee"
- "\xcd\x8d\xa9\x50\xb1\x26\x7d\xb4\x2b\xbd\xd7\x35\x2b\x8c\x33\xeb"
- "\x03\xec\xe3\xaa\x70\xb1\x6b\x41\xf7\xdc\x70\x55\xed\xd8\xb5\xe0"
- "\x2b\xd4\xd1\xa5\xd5\x71\xe4\x7f\x58\xc7\x91\x2b\xd5\x01\xd9\x70"
- "\xc3\x19\xfa\xd5\x9c\xab\xb7\x1d\x7f\x65\x93\xb4\x52\x1c\xb2\x29"
- "\x99\xf9\xeb\x8f\xc2\xb0\xdf\x42\xa9\x83\x32\xe5\x77\xa7\x8c\xe4"
- "\xe2\xb8\x9b\xa1\xe2\xbf\xf8\x1b\x1c\x9d\xe4\x59\xf1\x67\x6a\xa1"
- "\x5f\xc9\x58\x77\x0d\x05\x6c\xb3\x0d\xc9\xef\xda\x18\x72\x75\x19"
- "\x77\xed\x60\x7c\x6f\xc3\x38\x6c\x8d\xa2\xb3\xc6\xc0\x9f\xc9\x3b"
- "\x8f\xd7\x57\x9b\x78\x5d\x3b\x5f\xf4\x1f\x94\x19\x81\x6c\x80\x8e"
- "\x1e\x96\xf8\x80\xfe\x22\xed\x2d\xd8\x6c\xd2\xde\xf2\xcb\xf3\x89"
- "\xfd\x65\x3c\x4d\xf7\xd2\x00\xaf\x7d\x87\xbb\x72\x6c\x1d\x6e\x9a"
- "\xc5\x71\x36\x79\xdd\x59\x98\x8f\xa5\xcf\x0c\x25\x09\x69\x4f\x41"
- "\xf7\xe7\x38\x9b\xde\x80\x8f\xc2\xd0\xa3\x2b\x2f\x51\x7a\x25\x74"
- "\x4f\xc8\xec\x34\x96\xeb\xd5\x5a\xac\xcd\xcd\x97\x7a\x62\x6d\x56"
- "\xf1\x5a\x4f\x33\xee\x2f\x91\x29\xbc\xd9\x60\xdd\x7a\x89\x46\x6c"
- "\x5b\x41\x19\x5b\x79\x2d\xef\xef\x4a\xf7\x61\xbd\x42\xc6\xdd\x5c"
- "\x9a\xc1\xeb\xf9\x3d\xba\xcf\x4a\x8e\x0b\xdc\x2d\xb7\x4c\x72\x0d"
- "\xe4\xaa\xf0\xfd\x6b\x39\x0f\x86\x8a\xbb\x66\x85\x52\xaf\xf7\x75"
- "\x6d\x0c\xc3\x26\xfd\x55\x1d\xf0\x97\x95\x68\x6c\x75\x3f\xac\xf2"
- "\xa8\x58\xa9\x87\x47\x28\xf9\xee\xa3\xf7\xcc\xbd\xd1\x44\x78\x6b"
- "\x0e\x8d\x69\xa3\x4c\xe5\xd3\x90\x8c\x39\xf1\xbd\x3c\xde\x3f\x2f"
- "\x7a\x96\xac\xe1\xad\x73\x0d\xce\x9f\x52\x12\x7f\xe7\x9c\x7f\x45"
- "\xff\x10\xad\x63\xf2\x28\x93\xf7\x1f\xd8\xef\xc1\xb6\x46\xe6\x9f"
- "\x30\xa2\x90\x32\xa3\x61\x4f\x51\x8e\x51\x77\xdb\xa6\x2e\x79\x6a"
- "\xe9\xb3\xf9\xf3\x0b\x16\x3f\xb9\x38\x6f\x71\xc1\x2a\x19\x42\x61"
- "\x94\xfc\x77\xdf\xc8\x05\x73\xe4\xa6\x73\x94\x7e\x31\xa2\x67\x3d"
- "\xee\xbd\x8b\x21\x5e\x3f\xb8\x2a\x7c\xbd\x27\xe5\x5f\x25\x74\xa9"
- "\x4a\xe9\xbb\xb3\xdb\xec\x33\xd4\x35\xc9\x35\x71\xa4\x6d\xd2\x7c"
- "\x6c\x4e\x6b\xf9\x22\x9b\x86\x78\x40\xc7\xe3\x4f\xd1\x6f\x42\xbc"
- "\x1f\x82\xb1\x4a\xf3\x16\x9e\x61\x5b\x72\x3c\xaf\xf1\x37\xf0\x5a"
- "\xc6\x32\xce\xbf\x7b\x2d\xfb\x30\xb0\x3f\x14\xe8\x70\xc7\x29\xed"
- "\x59\xfb\x66\xfa\xd6\xd0\x52\xeb\x8e\xd0\x79\xeb\xbb\x42\xe4\xbc"
- "\x25\x96\xda\xb7\x8a\xf3\xf6\xb7\xa2\xe2\xbf\xf5\x45\xf9\x97\xc1"
- "\x27\xdf\xc1\x6f\x88\x28\xde\xbf\x13\xfc\x37\xec\x0c\xed\x7e\x87"
- "\xdb\x30\xdd\x2e\xce\xf7\xc4\x42\xd8\xbd\x0f\xcf\x5d\xf8\x45\x44"
- "\xf1\x81\x23\x51\xfb\x6b\xfc\xee\x53\xce\x9f\xbf\x88\x7d\xc2\x76"
- "\x9f\xe5\x76\x89\x8d\x07\xfe\xcd\xef\xb4\x27\x21\x7f\x58\xb5\xf3"
- "\xfd\x64\xef\x86\x46\xb2\x3d\x29\xef\xcd\x9e\xa7\x59\x9f\x7b\xff"
- "\xa7\xc2\xe8\x14\xbc\x07\xe7\x6d\x0d\x91\x3a\xaf\xf6\x9e\x83\x7d"
- "\x10\xaa\xa0\x6f\x57\x0e\xa4\xb4\xb2\x81\x94\xda\xe1\x7e\x7f\x6c"
- "\xb7\xff\x85\x59\xcd\xb7\x3c\xe7\x71\xec\x6c\xc8\xa3\x0e\x9e\x3f"
- "\xb9\x1d\x4c\xc3\x80\x39\x8f\xf7\xe7\xd4\xf9\xa8\xf7\xf3\xa0\x5b"
- "\x5a\xaf\x5e\x1e\xbf\x2f\xbf\xa7\x32\x66\x13\xcd\xe3\x35\x6d\xde"
- "\x77\xe6\xd8\xd2\xe0\x57\xb3\xb2\x37\x7e\x73\x42\xee\xab\x43\xa6"
- "\xf0\x7e\x49\x75\x11\xf4\x04\xf3\xb1\x54\xd6\x6f\x42\x6e\x72\xf1"
- "\xde\x66\xe4\xd2\xd9\xdd\xbc\x1f\x2d\xcf\x16\xca\x98\xec\xc7\xa8"
- "\xfa\x22\x99\x5a\xe8\x7d\xfe\x56\x77\x5a\x0f\x5e\x7f\xf3\x5d\x86"
- "\x21\x36\xee\xcb\xb2\x14\x1a\x8b\x19\x46\xe4\xd2\xb9\x71\x7a\x39"
- "\xe0\xae\x1f\x97\x03\x1d\xdc\x20\xcb\x71\x5e\x19\x13\x25\x6d\xae"
- "\x30\x77\xcd\x92\x75\xaa\xe7\x59\x02\x7c\x18\xba\x14\xde\x8d\xfb"
- "\x39\x8c\x27\x5c\x73\xe4\xda\x2f\xec\x75\x19\x8b\xc7\xfc\x89\xcf"
- "\xeb\xfb\x9b\x47\xb6\x87\x7d\x71\x0b\x20\xb3\xa4\x3e\xf8\x9b\xe7"
- "\xaa\x3e\x27\x53\xfe\xd3\x3c\x7e\xbf\x95\xeb\xfe\xa0\xa7\x9d\xaa"
- "\x7d\xbf\xed\xd3\xbe\xf1\xb0\xab\xdd\x1c\x4a\x0b\x18\xcd\x54\x6b"
- "\x0d\xb2\xac\xf4\xd4\x5a\x3b\x61\x53\xfc\xa6\xde\x67\xdc\xbb\x5b"
- "\xe9\x22\xaa\x1c\xef\x13\x43\x4f\x6d\x4d\xb2\xa6\x39\xf1\xbe\x4d"
- "\xf7\xbb\x80\x4e\xda\xba\x19\xef\x80\xdb\x3a\xc6\x9b\x8f\x76\x67"
- "\x35\xe6\xa9\xb3\x19\x78\xee\xcb\xe7\xed\x25\xae\xd7\x3f\xd3\x6a"
- "\x59\xe7\xe1\xf3\x9f\xe3\x2c\xa1\x2c\x23\xef\x03\xf3\xb9\x7f\x8e"
- "\x85\xc0\x67\xff\x79\x2d\x4f\x7b\x9f\x19\xf7\x7e\x94\xfe\xbe\xc3"
- "\xfd\xdb\x05\xfa\x99\x7d\x8e\xa9\xc4\x3e\x06\x61\xcd\x57\x50\xc6"
- "\x1a\xba\xa0\xf6\x51\xd9\x57\x90\xd7\x11\xf9\xcc\x23\xef\x75\xa2"
- "\x5c\x65\xb7\xef\xa6\x3c\xeb\xf3\xdb\x5d\xba\x6f\x14\xee\xf7\x76"
- "\xfb\xf5\x00\x17\xed\xc5\x21\x73\x20\x75\x88\x27\x50\xdc\x05\xfd"
- "\xf3\xb7\xc7\x21\x0f\x7b\x8d\x45\x24\x6d\x3f\x8e\xc9\xfc\x3c\x19"
- "\x23\x29\xc7\xc6\x71\x8c\x8e\xda\x00\x69\xbe\xff\x7b\xee\xd2\xce"
- "\xc4\x27\x9d\xa3\xdf\xfe\xa3\x67\xcf\x31\xac\xad\x97\xed\x99\xab"
- "\xf4\xb5\x3d\x73\xe5\x7a\xd9\xc6\x2e\xff\xdb\xab\x83\xc6\xdd\xab"
- "\x7d\x46\x75\xf6\x61\xcf\x2c\x1f\xd5\x6c\xd0\xfd\x56\x90\x2f\xad"
- "\xb7\xd8\x6b\xa2\xb8\x29\x55\xc1\xfc\x40\xae\x27\xf6\xd8\x3f\x1f"
- "\x48\xdf\x20\xde\x1f\x8c\xf0\x5c\x99\xf2\x1f\xd2\x6f\xd2\x9b\x7f"
- "\x81\xd7\xcd\xfa\x2a\x5b\xec\x03\xed\x5b\x52\xd2\xd7\x73\xd0\x99"
- "\xd8\xe7\x81\xfc\xac\x70\xb6\xc7\xa7\xaf\xc1\x6f\x31\x46\x38\x2e"
- "\xb7\x70\x6e\x17\x01\x6f\x7e\x80\xa0\x87\xf9\xbd\x98\x7b\x51\x87"
- "\xc8\x5f\xc6\x71\xf3\x3f\xb8\x8e\x71\xaf\x78\xea\x83\x12\xd9\x26"
- "\xf7\x3d\xc2\xc9\xfa\xa7\xbf\x4d\xda\x41\xc8\x77\x2d\xf2\x4d\xac"
- "\x2b\x6c\x63\x3f\x16\xe2\x98\x87\x2d\x5a\xdd\xfe\xe4\xa6\xd4\x6f"
- "\xa4\xd2\xbc\x0e\xf7\x07\xd0\xff\x5f\xcc\xba\x7a\x3e\xff\x60\xce"
- "\x95\x74\x11\x35\x37\x66\x51\x6f\xf6\x0c\xdb\xab\xb7\xa3\xfe\xe9"
- "\x82\xdb\xff\xbb\x89\x21\x63\x90\xba\x8c\xfd\xc4\x37\x5d\x0e\xc8"
- "\x81\x7e\x22\xbc\x1a\xe3\xd5\x6e\x85\xbe\x5b\x4f\x8d\xa1\x3a\xe9"
- "\x23\x02\x1e\xb6\x14\x05\xc4\x05\x6f\x68\x8f\xf4\xef\x55\xe7\xe0"
- "\x7f\xf7\x5d\x6f\xe8\x20\x35\xe6\xfb\xc9\xb3\xec\xcf\x98\xb3\x7e"
- "\x37\x92\xdb\x75\x7b\xbe\x8b\x46\x9f\xe3\xf7\x1f\xb4\xa8\x79\xf2"
- "\x77\x59\xda\x35\x8d\x63\x63\x46\xb7\xe9\xbe\xe7\x97\x3c\x55\xb0"
- "\x78\xe9\x92\xd1\xd3\x16\xae\x58\x98\x67\x7b\x48\xb9\xdc\xc5\xcc"
- "\x5f\xe6\x9e\xf8\xdf\x1f\xa6\xf2\x9c\xc2\xba\x0a\xc7\x01\xbf\x52"
- "\x0c\x70\x3d\xfe\x37\xf4\x86\x11\xbc\xbe\xf7\x7f\x19\x03\x5c\xd7"
- "\x45\x38\xfe\x77\xcf\x5a\xf7\x87\xf5\xdd\x3c\x10\x39\xd4\xc1\xcf"
- "\x7c\xf6\x33\xe2\xfe\xdd\x34\xe6\xa3\x2a\xe9\x9f\xf6\x61\x76\x74"
- "\xac\x24\xf6\xc5\xe3\xf5\x11\xa4\xcf\xd5\xcf\xd9\x82\x16\x31\x6f"
- "\x7c\x98\xd7\x73\xee\xe7\x43\x07\xc6\x7b\xaf\xe2\x5f\x99\xb7\x58"
- "\xdf\x13\xd6\xbe\xbb\x26\xf7\xb0\x23\xee\xae\x2c\xb5\x0e\xf3\xe1"
- "\xe6\xaa\x48\x3f\xb3\xda\x03\xf8\x70\x8f\x7e\xa6\x4c\xf1\xe6\x21"
- "\x8d\x37\x3f\xac\xbf\xd2\xbe\x7d\x0f\x6f\xec\x35\xf7\xf0\xf5\x5f"
- "\xb5\xb2\x7b\xcd\x5f\xb6\xe7\xaf\xe9\xc3\xd7\x9d\xa1\xfd\x37\xf0"
- "\xda\x0c\xee\xbf\x8e\xfb\x3e\x72\xae\x95\xfe\xf5\xfb\x3e\xd3\xee"
- "\x51\xc7\xbe\xa3\xda\xfd\xd7\x70\xff\xbe\x76\x3f\x14\xf7\x6f\x6a"
- "\xf7\xe0\xd9\x7d\xeb\xb4\xfb\x74\xdc\x2f\xd6\xee\x21\xf3\xf7\x3d"
- "\xa8\xdd\x0f\xc6\xfd\x77\xb5\xfb\xeb\x71\x3f\x5c\xbb\x07\x0f\xee"
- "\x4b\xd6\xf6\x4f\xcd\x68\xfb\xc5\xab\xd7\xcf\xf7\x7a\xd4\x1e\xdd"
- "\x3e\xe8\x89\xef\xed\x50\x73\x46\x77\x5a\x3a\x68\x7a\x81\x8e\x5f"
- "\xa4\xf3\xdc\x68\x46\xfa\x28\x1f\xbd\xd3\x12\x95\xbe\x53\xcb\x9f"
- "\x8d\xf9\xc6\x17\x95\x5e\xa9\xa5\xcf\x85\x0e\x6a\x8e\x4a\x2f\xd3"
- "\xd2\x0b\x20\x17\xed\x51\xe9\x5a\x5c\x87\x7d\x9b\x7c\xb4\xdd\x1a"
- "\x95\xee\xd0\xd2\x77\xe8\xfe\x0a\x5a\x7a\x9e\x96\x5e\x83\xf4\x23"
- "\x51\xe9\xf3\xb4\x74\xc8\xff\x0f\x9b\xa3\xd2\xd5\xba\x82\x3c\x8b"
- "\x66\x11\xb5\x85\xcc\x5b\xfb\x82\x3e\xda\xb6\x37\x2a\xcf\x14\x55"
- "\x76\x7f\x9a\x8f\x2a\xa3\xfb\x32\x5e\x4b\xcf\xf0\xd1\xdf\xb7\x47"
- "\xa5\x67\xf6\x26\xab\x0c\x15\x34\xaf\xb7\x35\x4c\xfe\x4e\x95\xf4"
- "\x93\x94\xba\xe5\x81\x85\x7c\x4e\xcd\xb2\x4d\x9c\xb2\x15\x09\x71"
- "\x8a\x0e\x4c\x53\xfe\x81\x47\x79\xee\x68\x53\xe7\xfd\x0e\x8c\x95"
- "\x67\xc0\xd8\xe7\x9c\xcf\x00\xae\xe6\xb4\xfd\x32\xf6\xc9\x18\x87"
- "\x4b\xc5\xe4\x54\xfe\xa7\x6d\xd2\x96\xd7\xf6\x39\x91\xe7\x33\x5e"
- "\xdb\x64\x38\xbc\xde\xe7\x2d\xe8\x94\x3e\x91\x6c\x4b\x71\x1a\xdb"
- "\xb4\xf2\x5c\x58\x94\x4d\xa5\xe4\xfe\x81\x85\x11\x3e\xb7\xef\x56"
- "\x76\x3f\xf3\x22\xe7\x67\xdf\x9c\xe8\xbc\x3e\x3a\x20\x6d\xd3\x24"
- "\xeb\xb5\x9f\x74\xb8\x0f\x64\xf7\x9c\x55\xda\x5f\xa9\xa5\x9f\x40"
- "\xfa\xdc\xa8\xf4\xe2\xde\x65\x3b\xe4\x9d\x79\x5f\x71\xd7\x25\x11"
- "\x08\x5d\x12\xc1\x2d\xff\x89\x76\x2f\x92\xe7\x6e\x6e\x0c\x17\xef"
- "\xab\xd0\x62\x60\x7c\x16\x5a\x21\xfc\x90\xd9\xfc\x8d\x89\x6b\x66"
- "\x04\xfc\x34\x23\xbf\x43\x6c\x7e\x92\xfd\xec\x2e\xca\x78\x50\xce"
- "\x36\x8e\xbf\xcd\xbe\x5b\x01\xde\x1f\x4a\x6d\xc4\x1c\x57\xb5\x88"
- "\xdf\x7f\x4a\xd3\xed\x7e\x6a\xb0\x87\xa9\x0a\xb0\xb7\x3d\xa9\xfb"
- "\x4d\x1e\xe8\x8e\xff\xc3\x6d\xe0\xfa\x9c\xf2\x5b\x31\x35\xa3\xb9"
- "\xad\xfc\x2d\x3c\xb1\xf9\x7a\xbf\xf8\x03\xeb\xb2\x5d\xfc\x0d\x44"
- "\x1b\xe6\xf6\x71\xb8\x27\xf9\xe3\x77\x48\xef\xad\x4f\x8a\x97\x6b"
- "\x34\x7f\xcc\xfd\x66\x25\x2f\x6a\x0a\xc4\xbf\xf0\xb9\xa3\x1a\x07"
- "\xca\xb6\xfa\x93\xbb\x12\xfa\x5f\xad\xdd\x46\xc6\xae\x8d\xd0\x4d"
- "\xce\xed\x35\x2a\xf9\x74\x70\x41\xc4\x68\x5e\xc7\xeb\x8a\xf2\x3b"
- "\x11\x1b\x8f\x4d\xd9\xb5\x24\x68\x6c\x58\xdd\x42\x6b\xae\x27\xeb"
- "\xdc\x20\xfb\x92\xd7\x7c\x3e\xa0\x80\x63\x71\x75\xf9\xa1\x87\x1a"
- "\x7f\x8b\xf7\xbf\x5f\xb2\xd7\x18\x92\xfa\xca\xc1\x05\x72\x2d\xaa"
- "\xf8\xd8\x30\x9e\x43\xbc\xcd\x61\x3e\x7b\x24\xf5\x64\xc8\x7f\x73"
- "\x78\xa5\x7d\x60\x68\xb9\xfd\x9a\x6d\xcb\x28\x35\xbc\x3c\x23\xfd"
- "\xd5\x4b\x34\x4e\x9f\x7f\x60\xc3\x66\x8a\x0e\x6b\x4a\x29\xe6\x14"
- "\xb6\x71\x07\x18\xd2\xe4\x9e\x1b\xdf\x47\x8c\x6f\x8f\xa8\x5a\x71"
- "\xe5\x6f\xde\x84\x61\xdb\x72\xec\x69\x6e\x4b\xa2\xbe\x6e\x7a\x0b"
- "\xf6\xb2\x76\x4e\xb6\xe8\x73\x1a\x0c\xbb\xc5\x38\xe0\xa2\xf0\x9c"
- "\xc9\x23\x23\x7f\x27\xa4\x68\xa1\x5c\x47\xea\xd3\x60\x0f\x91\xd7"
- "\xf1\x17\x2a\x5a\xc6\x63\x74\x70\x1f\xeb\x69\xec\x37\x89\xfc\x69"
- "\x67\xe8\xe0\x51\x4b\x10\x73\x46\x10\xba\xf4\xd3\x6c\x13\x1e\xfc"
- "\x34\x20\x63\xdf\xfe\xde\xc6\xbe\xe3\xff\x1f\x7b\xdf\x03\x17\x65"
- "\x95\xee\x7f\x66\x18\x75\xd0\xe1\x8f\x46\x39\x1a\xda\x54\xba\x4d"
- "\x2d\x16\xb6\xd6\xb5\x5d\xdb\xa8\x74\xd7\x6d\x35\xac\x6b\xbf\xcb"
- "\xae\x96\x98\x60\x68\xa8\x23\x12\x91\x21\x20\x12\x3f\x30\x06\xe9"
- "\xae\xdb\x45\x18\xfe\x74\xc5\x7b\x69\xd7\x36\xb7\x9f\x7b\xd7\xf6"
- "\x97\x85\x89\x1b\x12\x30\x68\x58\x68\x98\x13\x21\xa1\x8b\x36\xc2"
- "\x20\x23\xcc\xbc\xe7\xf7\x3c\xe7\xbc\x2f\x33\x03\x0c\x0c\x03\x9a"
- "\xfd\x56\x3e\x9f\xf7\x33\xbc\xe7\x3d\xef\x79\xcf\x79\x9e\xef\x79"
- "\x9e\xe7\xfc\x7b\x9e\xf2\xb8\xc7\x30\xed\x4a\xca\x59\xb6\x47\x82"
- "\xf0\xbe\x75\xb0\x1e\xef\x53\xf0\xdc\xee\x78\xe3\xfc\x3f\x75\x5b"
- "\xc7\xf0\xb9\x8a\x83\x27\x38\xcf\x7a\x4c\x7c\xfc\x75\xb0\xde\x1d"
- "\x76\x85\xcc\x83\x65\x14\x7d\xa3\x1b\x6c\xe4\x49\x0b\x35\xb1\xf5"
- "\x4c\xf4\x57\x90\xf8\x48\x39\xbd\x9c\x4b\xf8\x19\xbb\x0f\x77\x09"
- "\x59\x07\xcb\xb8\xbf\xca\x0f\xdf\x20\x7c\x2f\x12\xe8\xc8\x83\x07"
- "\xf8\x5c\xee\xc1\x4a\x3e\xb7\x79\xb0\x61\xdb\x54\xdc\xab\xfc\x61"
- "\x5e\x87\xef\xc1\x56\xf8\x8d\xed\x18\xff\x59\xb9\x7b\x7d\xf4\xb7"
- "\x06\xcd\x74\x12\x84\x73\xea\xb8\xef\xb8\x98\xef\x37\x86\x6f\x7c"
- "\x64\xa0\x59\xec\xd9\x6d\x4d\x3a\xe2\xc3\xc7\x7b\x1f\x9e\xbb\xcf"
- "\x40\x34\x50\x57\x3f\xaa\x3c\x98\xc9\xf6\x78\x65\x1e\xcc\x33\xb6"
- "\xd1\x72\xdc\x5b\xc8\xd7\x3e\x3e\x2a\xa3\xbe\x07\x33\x79\xfe\x8f"
- "\x1e\xaa\x6d\x83\x36\x28\x0f\x46\x18\xad\x17\x44\x9b\xf0\x23\xc0"
- "\xfe\xc1\x08\x9a\x79\x30\x86\x9f\x7f\xff\x28\x4b\x92\xab\x1c\xa3"
- "\x1f\x6d\x11\xb1\xde\xc0\xe9\xf6\x51\x99\xa8\xaf\x6e\xc3\xff\x41"
- "\x77\x87\xf2\xb5\xfa\x8f\xe2\x25\x1b\xd9\x24\xe6\xc1\x77\xe0\xff"
- "\x08\x2e\x6b\x3f\xda\x09\x6d\x17\xcf\x30\x7c\xc4\xd6\x0b\xa1\x7d"
- "\xa0\xb3\x3e\xac\xc3\x76\xb9\x93\xad\x8c\x16\x49\xc4\x07\xea\x9c"
- "\x88\x7b\x4a\xd1\x4e\x31\x5a\x1e\x29\xe7\xb1\x2c\x0f\xcd\x66\xe7"
- "\x80\xe1\x3b\xc0\x1f\x39\xca\x4d\x3c\xb7\x8c\xe5\x39\xea\x5f\x7e"
- "\xb3\x54\x17\xfc\x1e\x3e\x83\xb6\xe2\xfe\x1e\xa4\x55\x0c\xe6\x41"
- "\xbe\xb6\xe8\x70\x8e\xa3\x13\x68\x86\xfb\x85\x0e\x85\x21\x4d\x38"
- "\xcd\x0e\xf5\xc6\x3c\xe7\xf4\x3a\x34\xd1\x95\x1e\xfc\x5e\x50\x82"
- "\x6c\x88\xc3\x7d\x23\x87\xc2\x44\xfa\xb5\x89\xdf\x67\x71\x38\xf9"
- "\xb3\xf2\x3d\x4e\xef\x4e\xeb\xcd\xcb\xe3\xa6\xca\x71\x0d\x16\xe7"
- "\xe4\x39\x5e\xcb\xeb\x9c\xde\xab\x5b\x71\x09\x6d\xe4\xf7\x23\x30"
- "\xce\x25\xd2\xbc\x2b\xad\xbc\xd9\x41\x6f\x5e\xce\x00\xdf\x98\x2e"
- "\x7d\xc3\x44\xca\x4b\xa5\x7a\xc2\xff\xa2\x0e\x3e\xa4\x75\xf0\xa4"
- "\x7c\xa1\xf4\x5e\x11\x3b\x4b\xf4\x91\x05\xcf\x40\x0e\x28\x07\x71"
- "\xed\x07\xa8\x52\x6b\x7b\xa4\x9c\xe1\x91\x1c\x2a\xc1\x3d\xb1\x40"
- "\xd7\x44\x8e\xa1\x43\xe9\x5c\x17\x1e\x2a\xc1\x32\x71\x5d\x85\xfb"
- "\x3b\x3d\x94\x07\xe5\x8a\xb1\xba\x0f\xed\x15\xeb\x00\xe3\xbf\x0f"
- "\x4b\xfb\x8e\xeb\x1e\x5b\x19\xc5\x0e\xfb\xce\x7a\x49\xd7\xf7\x5c"
- "\x91\xd2\x71\xae\xf3\x50\xab\xd3\xb9\xd8\x50\x4e\xef\x8f\xe7\xc0"
- "\x38\x75\x7f\x0e\xf7\x8b\x7b\x20\x07\x78\x96\xd2\x49\xa6\x62\x7c"
- "\x98\x64\x1d\x3d\x5f\xab\x83\xb1\xb5\xb2\x2a\x0a\xe4\x45\x4c\x72"
- "\x27\x19\x8f\x7b\x2e\x50\xde\xe0\x7c\x0f\xf5\x85\xf4\xac\xaa\x18"
- "\xc7\xd9\xbb\x0a\x13\x8c\x6d\xcb\xf4\x30\x96\x4d\xb9\x40\xa6\xf2"
- "\x3d\x14\x1f\x6f\x14\xe7\x7d\xf2\x85\xcc\xaa\x58\x3c\xd7\x59\x0b"
- "\x23\x42\x9a\x12\x93\x2f\x64\x55\xc5\x42\xb9\x49\x29\xeb\xc8\x24"
- "\xd4\x6f\xb8\x57\x97\x63\xa6\xa2\x1c\xca\x4d\x42\x9f\x6b\x02\x8d"
- "\x90\xc1\xf7\xcb\x05\x65\x9d\x52\x2f\x10\xb6\x47\x1c\x70\x26\x6f"
- "\x22\x1f\x1f\x82\xef\x97\x63\xdc\x4a\x9c\xf3\x31\x5a\xad\xe8\x17"
- "\xa2\x1c\x9e\xf9\xc3\x33\x9c\xef\x11\xd0\xff\x1a\xfa\x73\x87\xf2"
- "\xd5\x58\x3e\x7c\xab\x9c\xd7\x9d\xf9\x45\x29\x6f\x22\x87\x6f\xc7"
- "\x3c\x92\x5f\x37\x21\x25\xc2\x07\x9f\xe3\x39\x61\x3b\xc6\x45\x00"
- "\xeb\x9c\xbf\xd3\xd0\xfb\x8e\x68\x3f\x43\x5f\xae\x78\x9f\x6e\xff"
- "\xac\x01\xf2\x1e\xc0\x3d\xa9\xdc\x96\xad\xd8\x2f\xf6\x75\xb0\x8f"
- "\x2b\xfe\x22\xfe\xaf\xea\xcd\x9b\x12\x41\x92\xaf\x10\x35\x5b\x57"
- "\x7d\xd9\x07\x64\x6f\x85\x0a\x63\x2c\x38\x95\xf9\x35\x96\x97\x8d"
- "\xfe\xe2\xa2\x89\x0a\xe4\xf2\x04\xa8\x37\xc6\x47\xf9\x1a\xe7\x6a"
- "\x45\xda\x98\x80\x4f\xfb\x76\x70\x9f\x80\xfb\xf5\x80\xfd\xe4\x2d"
- "\x60\x0f\x6c\x21\xaa\x2d\x76\x12\x8c\xed\x04\xbe\xb5\xe2\xbe\x6a"
- "\x1c\xbb\x21\x6d\x44\x1e\x36\x42\x5b\x9a\xb7\xc4\xd0\xe6\x2d\x6d"
- "\xb4\xb5\x26\xa6\x81\x80\x9e\x99\x54\xab\xab\x43\xdf\xe4\x5f\x63"
- "\x5b\x71\x8e\x12\x68\xda\x68\xc2\x6f\x64\x55\x35\xe3\x59\x19\x36"
- "\x4f\x20\x3f\x74\x40\x3a\x57\x54\xc4\xce\x1e\x55\x84\xf6\xce\x7d"
- "\x25\xd0\x0a\xb1\x2e\x95\x02\xfe\x9f\xc0\xce\x27\x8e\xc7\xf1\x0f"
- "\xce\x69\xac\x78\xa5\xa4\xf7\x8c\x06\x9f\x1b\xa8\x88\x75\xf2\xcb"
- "\xc5\xde\xc5\x39\x02\x7c\x37\xdc\x46\x3b\x77\x88\x79\xf1\xdd\xf0"
- "\x57\x56\x50\x7c\x17\xde\x29\xe9\x7d\xc7\xe5\x8c\xcf\x61\x6e\x57"
- "\x00\x6d\xf1\x7f\x33\xd0\x52\xdc\x43\xa5\xe1\xeb\xdf\x15\x0d\xd2"
- "\x9a\xb3\x89\x7c\x9c\x8b\x78\x1a\xd8\x9f\xf8\x11\xe2\xea\x23\xe9"
- "\x48\x1d\xfa\x6f\x82\x74\xb5\xe4\xcb\x08\xfe\x9f\x01\x65\x71\x3b"
- "\xdb\xc9\x47\x59\x8e\x93\xbf\xc3\x14\x33\xfd\x06\x71\x02\x72\xc5"
- "\xe7\x3c\x39\xa2\xa3\x59\x75\x4a\x7e\x4e\xea\xc8\x21\xac\x67\x13"
- "\x39\x82\xbe\x14\x02\xb8\x2f\x85\x23\x5b\x45\xf9\x61\x0d\xb7\xdb"
- "\x02\x4c\xf0\x4d\x3c\xf3\xe3\x74\x9f\x08\xf2\x24\x10\xf2\xfd\x99"
- "\xfb\x03\x3c\xa2\xeb\x93\x1f\x9f\xa7\xf6\xb9\x0f\xeb\x73\xaf\xb1"
- "\x40\xbf\x71\xb7\xb6\xae\x9f\xca\xe6\x0f\x83\xfd\xb7\x12\x5d\xca"
- "\x39\xe2\x03\x58\x39\x8b\x75\xab\x6d\x6d\xc3\x36\x05\xd0\xb4\x50"
- "\x82\x73\xa0\xcc\xb6\x04\x9d\xde\x34\x03\xf2\x9c\x23\xb7\xe0\xbe"
- "\x6f\x8c\x91\x02\xf9\xcf\x73\x3f\xe6\x9f\xfc\x66\xf9\x4b\xe3\x89"
- "\xf0\x42\xc4\x04\x2a\x7f\x2a\x0f\xd7\xf6\xde\xe9\x36\x8d\xc1\x75"
- "\xae\xe4\x5d\x04\x6d\xad\x5b\x00\x63\xcd\x18\x8f\x0e\xde\x69\xdb"
- "\xdd\xdd\x3a\xc6\x68\x3b\x45\x74\x6b\x89\xfc\x3c\xf9\x64\x91\x22"
- "\x89\x28\x76\xb4\x90\x40\xe0\xab\xed\xb0\x6d\x6e\xaf\x2f\x04\xc3"
- "\x24\x7e\x8e\xdb\x00\xf2\x75\x93\x9a\x5a\xbb\xd2\xfe\x5e\x06\x63"
- "\xaf\x9d\xd2\x18\x3b\x9b\xc7\x41\x51\xc0\xf7\x6f\x96\x8b\x7e\x1f"
- "\x38\x6d\xff\x7e\x96\x9f\xb3\x0a\x7a\x01\xde\x69\x74\xd8\xdf\x9f"
- "\xf0\x58\xe3\x99\x75\x21\x5c\xf6\x7d\x12\x73\x18\x2c\xf8\x74\xbe"
- "\x47\x21\xa8\x2b\xed\x13\x65\xef\x1e\x05\x36\x6f\xf5\x49\x0c\xf0"
- "\x30\x84\xdb\xe6\x75\x21\x2b\xec\x4a\xb1\x0f\x62\xfa\xfb\x11\xf8"
- "\x2e\xbc\x17\x60\x61\x73\x4c\x9f\xcc\x77\x60\xed\x13\x15\xca\x7c"
- "\x68\x93\xca\x44\xfe\x9e\x8a\xed\x42\x9a\x40\x3e\x05\xdc\xa7\x1f"
- "\x2e\x75\xe3\x17\x56\xf9\x37\xa5\x0d\xe7\x40\x32\x7b\x5a\x01\x4f"
- "\x17\x80\x07\x37\xa1\xef\x27\x23\x7c\xa7\xa6\xa8\x9b\xd4\xa8\x3b"
- "\x48\x2d\xfc\x8f\x7b\x91\xcb\xd7\x7e\x43\x9a\x35\x03\xeb\x1b\xd0"
- "\x59\x99\x50\xe7\x3c\x2c\x0b\x65\x01\xee\xdf\x32\x26\x81\xfe\x31"
- "\x43\x59\xcd\x84\x95\x51\x23\xb4\x92\x9a\x44\x18\x67\x65\x4f\x31"
- "\xd7\x16\x9d\x22\xb5\xea\xcf\xd8\x77\xd0\x26\x2c\x8f\xeb\x18\xac"
- "\xec\x32\x28\xfb\x80\x58\x76\x1b\x94\x1d\xe4\xb6\xec\xcc\x9e\xc0"
- "\x61\x96\xed\x79\xbd\x33\x7b\xc8\x70\xca\x06\xd9\xa7\xc2\x38\x37"
- "\x78\xae\x2b\x79\x0a\xf1\xb3\x5f\x46\xbf\x9f\xb7\x51\xbe\x1f\xf6"
- "\xe8\xc3\xec\xec\x57\x1a\xdb\x6f\xac\x64\x67\xc0\x2e\x12\xb6\xa7"
- "\x91\x9f\xfb\x3a\x4b\x70\x3f\x44\x57\xda\x51\xad\x63\xac\xd4\xbb"
- "\x4e\x05\xb6\xea\xd1\x45\x7c\xdf\x63\x95\xb8\xee\x7b\x14\xfd\x46"
- "\xba\x19\xe7\x7d\x3a\x87\xef\x9f\x3d\xfa\x9a\x34\xff\xd2\xe1\xfb"
- "\xe9\x1c\xb1\x2c\x4d\xdf\x79\x3d\x29\x20\x6d\x74\x62\xbc\x14\xdb"
- "\x36\x5e\x3c\x7e\xfa\x74\xf4\xaa\xe8\x35\x09\xd1\x51\x9a\xa5\x2f"
- "\xc5\xad\x9f\xb5\x61\xf5\x6a\xcd\xe2\xe8\x4d\x9b\x56\xbe\x10\x3d"
- "\x9e\x2c\x8d\x5b\xb9\x7e\xd3\x1a\x9c\x7b\xd3\x68\xe6\xff\x64\x45"
- "\xcc\x86\xf8\x59\x3f\x9f\x1f\xda\x67\xee\x0d\xcf\x2a\x36\xa2\x0d"
- "\x0e\xba\xe3\x96\x64\x3b\x99\x88\x7e\x7c\x02\x5e\xa1\xe5\xaf\xc2"
- "\xf8\x0f\xf0\x77\x1e\xf5\x14\xea\x06\x1c\x1b\xa0\x0f\x41\x90\xdf"
- "\xd5\x05\x6f\xd2\xba\x16\xf2\xa5\x1d\xec\xca\x86\x62\xee\x0f\xaf"
- "\x11\xc6\xe4\x66\x1e\x6f\xf1\xcb\x93\xe8\xeb\xee\x75\x48\x33\xfb"
- "\xd6\x85\xec\xf8\x8a\x28\x40\xaf\xc1\xb8\xa4\x2a\x8f\xca\xc7\xd1"
- "\xec\x5b\x68\x05\xfd\x46\x4d\x44\x1f\xe2\x72\xa3\xc9\x8a\xeb\xf9"
- "\xca\x70\x5b\x0a\x45\x79\xca\xfb\x56\xd5\x2e\x4e\x97\x83\x65\x7c"
- "\x5f\xf1\x97\xef\xe3\x18\x66\x1b\x8b\x87\x59\x05\xfd\xff\xa0\xce"
- "\x21\xa7\x3f\xab\x10\x6d\xc7\x06\xa0\xfb\xcb\x4d\x70\xcf\xfd\x8c"
- "\x54\xd5\xbb\xee\xd5\xa8\x06\xbd\xfc\x45\x2b\xbf\xf0\x9d\x06\x25"
- "\xbf\xf0\x7f\xe7\xeb\x4b\x03\xbf\xfa\xa6\x8f\xf4\x92\xbe\xef\xed"
- "\xfb\xf5\x49\x83\x5f\x9e\x7c\x1f\x7f\xbf\xcf\xf6\x8f\xe4\xfd\xfa"
- "\xf4\xc1\x2e\xc4\x1b\x60\xab\xf1\xf5\xaf\x88\x12\xf0\xb9\x53\xff"
- "\x3c\x60\xfa\x34\x51\x27\xd9\x68\x73\xca\xb3\x24\x38\xf9\x1c\xc1"
- "\x78\x84\xad\xf1\x89\xb4\x39\xf9\x32\xda\xa4\xf5\xcf\x00\x7e\x0f"
- "\xe4\x34\x11\x95\xbe\x89\x04\xd6\xc6\x63\xac\x62\xf4\xf5\x05\x72"
- "\xa6\x0d\x2e\xb8\xaf\x4e\xb0\x92\x4f\xcd\x97\x70\x7f\x53\x79\x6d"
- "\x24\xc8\x9d\x46\x42\x10\xbf\xaa\x48\x12\x64\xb8\x85\x7e\x40\xd3"
- "\x36\x80\x3e\xdb\x80\x71\x09\xeb\xdf\x15\xc2\xc6\xbc\xbb\xb9\x72"
- "\x8c\xe6\x79\xd4\xf1\x35\xbf\x11\xb1\x79\x84\x9f\x29\xfa\x8c\x9d"
- "\x67\x80\x7e\x52\xcf\xe7\xd5\xeb\x1f\xe5\xfa\xbc\x7e\xa2\x38\xdf"
- "\x04\xff\x7f\xc6\x6c\x45\x68\xc7\x01\x8c\xdf\x8a\x65\xfe\x49\x38"
- "\xc0\xe2\xb7\xbe\xbb\x39\x6c\x4c\xd2\x4a\x22\xaf\x35\x9d\x27\x18"
- "\xdb\x09\x63\x81\x42\xbf\xdb\x0b\xfd\x6c\x5f\xe1\x2d\x34\x17\xea"
- "\x97\x5d\x74\x0b\xcd\x84\x3a\x95\x75\xa5\xd5\x54\x82\xee\xf9\x40"
- "\x5c\x77\x29\x87\x7e\xb1\x57\x0f\x79\xc2\x5f\x22\xb7\xe9\x21\x5f"
- "\x0e\xe4\x43\x3b\x99\xd7\xef\x98\x1e\x68\xb0\x1f\xbe\x59\xa7\x79"
- "\x0e\xef\x8d\x6c\xef\x0d\x7e\x1b\xda\xa1\x69\x22\x46\x35\xe8\x36"
- "\x05\x7e\x43\xfa\x6e\x57\x5a\x2d\xc8\xbf\xca\x78\xb6\x76\x06\xe9"
- "\xbc\x9c\xda\xa5\xbc\xbf\x56\x65\xef\x70\xc4\xd7\xcd\xd6\x6f\x06"
- "\x9d\xde\xcd\x7c\x60\xa2\xdf\x35\x66\x63\x30\xbb\xc2\x4e\x02\xf8"
- "\xfc\x00\xd8\x16\x31\x20\x07\xc0\x9e\x60\x7b\xa1\xc1\x96\x80\xba"
- "\xec\xc4\x38\x8f\xf8\x1c\xc6\x6d\xfb\x41\x2f\xef\x43\x3b\xe0\xb9"
- "\xce\x27\x08\xce\xb1\x63\x8c\xd6\x4d\xcb\xa9\x95\xc7\xcc\xa9\xdd"
- "\x2f\xd9\x02\x28\x83\x50\xff\x83\x2d\xac\xe8\x01\x1e\x02\x06\x2a"
- "\xc1\xb6\x98\x78\x9e\x69\x0e\x46\xfb\x4a\xa6\xf3\x13\x98\xcf\x66"
- "\x1f\x2e\xa3\x6b\xed\xd0\x3e\x15\x7c\x03\x68\xd6\xc8\xe6\xc2\xb9"
- "\x8c\x31\xaa\x24\x3d\x8e\x63\x5e\x13\x94\x41\x41\x96\x89\xcf\xa0"
- "\xfd\x47\xa4\x58\x77\x60\x57\xd4\x7e\x20\xd2\xac\x9a\xaf\x21\x1b"
- "\xd9\xd8\x1f\x6c\xae\x10\x91\x36\x95\x68\x57\x88\xef\xf6\xee\x7f"
- "\xc4\x71\xb9\x00\x76\x05\xd2\x0b\xe9\x04\xe5\x54\x8a\x72\xac\x9e"
- "\xdb\x2f\xc7\x5e\x12\xd7\x2d\x73\x81\xd7\xe9\x0e\xfa\x1b\xcb\x9c"
- "\xe9\x0f\xef\x8b\xe3\xc6\x63\xb7\x3b\xf1\x0e\xc6\x46\x75\x56\x9c"
- "\x27\x85\x3a\x7e\xc0\xe7\x78\x8c\x5f\xa3\xaf\x34\xf4\xcd\x0c\x34"
- "\xfe\x20\x1b\xfd\x00\x83\x6c\xde\xf6\x15\xc1\xb5\x6f\xb0\x9f\xea"
- "\xbe\xe6\xf6\x69\x5d\x2a\x62\x18\xee\xd9\x3c\x7c\x33\xd4\x0b\xcb"
- "\x83\xfb\xa7\xe0\x17\xec\xd8\xba\x5f\x39\xc7\x53\x76\xc4\x52\xae"
- "\x0b\x73\x9c\x47\x30\xc6\xf2\xf1\xb3\x31\x16\xe7\xc0\x58\xfe\x9e"
- "\x18\xac\x5b\x23\xf6\x4b\xa9\xad\x18\x57\x19\xd2\xd1\xf6\x6f\x44"
- "\xbe\x49\xe9\xe8\x43\x18\xf8\xa4\x82\x6f\x9d\x14\xeb\xb4\x1f\xee"
- "\x95\x70\x3f\x83\xcd\xef\xf7\xb0\xf3\xe6\x8d\xfa\x64\xc7\x3b\xd8"
- "\x6f\x00\xc3\x01\x90\xe7\x18\xfc\x52\x29\x2f\x8f\xbd\x5c\x17\xf1"
- "\xbb\x6e\x9c\x03\xab\xd3\x49\xb1\x97\x31\xee\x32\xca\x0c\xfd\x73"
- "\x2e\xb4\x47\xda\xec\x05\x5e\x31\xdc\x1d\xb6\x1d\x00\x7a\x1f\x03"
- "\xfb\xff\x6f\x11\xbc\x5d\x75\x11\x62\xfd\xca\xb9\xff\x94\xa3\xb9"
- "\xcc\xdf\x2f\x1b\x0f\x1d\x0b\xeb\x1d\x0f\xf5\xda\x96\x75\xcc\x8f"
- "\x2d\x94\x55\x8d\xfc\x47\x3b\x11\xf2\xc5\xf4\x62\x8b\x9d\xf7\xad"
- "\x6b\x45\xfb\x52\xac\x3f\xe2\xe5\xa8\x48\xbb\x5c\xe7\x7e\xe7\xdc"
- "\xcf\xa1\x0c\x18\xff\x7f\xd2\x8b\x01\xa9\x5f\x73\x1c\x1c\x17\x63"
- "\x3f\xf5\xb4\xa2\x0f\x5f\x28\xb7\x1c\x6d\x70\xae\x57\x8f\xef\x3f"
- "\xdc\x68\xc3\x39\xf4\x7a\xb8\x87\xfe\x7d\x3c\xb7\x63\xfc\x67\xa6"
- "\x74\x26\x37\x8e\x03\x7d\xee\x63\xb1\x4a\x90\x2e\x52\x7f\xdd\xf1"
- "\x1c\x8e\xfd\x42\x79\x9f\x4d\x04\x34\x58\xdb\x88\xb8\xd7\x1f\xfa"
- "\xec\x59\x5c\x3b\x3d\x0f\x18\x52\x62\xff\x05\xfe\xee\x45\x7f\xd3"
- "\x40\xc7\xba\xf4\x37\x59\xbf\x55\x61\xbf\xed\x41\x1f\x12\xf0\x9d"
- "\x8a\xc8\x30\x72\x38\xb1\x9c\xf5\x63\xf4\x1f\x52\x00\xb4\xc3\x38"
- "\xc7\xf0\xed\x24\x69\x8f\x32\x62\x04\xfd\x85\x88\x38\xa9\xc0\xbe"
- "\x2c\xd2\x4e\x01\xf9\x4a\xa5\xbe\xe7\xc4\x7f\x96\xa7\x4f\x7f\x0b"
- "\xe0\xfd\xed\x78\xbd\x44\x6b\x1b\xeb\xc7\x75\x3a\x1b\xf4\x63\x67"
- "\x9a\x22\x3d\x91\xae\x5d\x69\x9f\x41\xfb\x2b\xd5\x12\x4d\x1d\xf4"
- "\xfc\x6c\xa3\xc8\xf3\x3a\x3e\xc7\xf4\xd9\x1c\x71\xfe\xa9\x97\x86"
- "\x22\xfe\x50\x0f\x1c\xd8\x86\x6d\x07\xdd\x80\xdf\x47\x8c\x14\x88"
- "\x32\xab\xc2\x8c\x18\xf9\x0c\xfa\xff\xbf\x6a\x1d\xb2\xa3\x2e\x9e"
- "\x8d\x59\x80\x4f\x9c\x3f\x9f\x15\x32\x7f\x1b\x03\xc8\x0e\x13\x39"
- "\xb6\xdc\x21\x9f\x3e\xdb\x2b\xd1\x41\xc2\xa4\xd4\xef\xa1\x8c\x2b"
- "\xae\xf2\xe7\xb3\xd3\x50\xc6\x24\x94\x6f\x0e\x1b\xea\xb3\x36\x57"
- "\xf9\xf6\x59\x3d\xca\x37\xc4\xb5\x2e\x01\xe7\xd8\xb8\xbe\x32\x91"
- "\x9a\x24\x57\x99\x54\xb3\x91\xef\x0d\xe0\x36\x17\x62\x4b\xf7\x1c"
- "\xcf\x8f\x3a\x0c\xf2\xb3\xb1\xb8\xa8\xf3\x2a\x50\xc7\x41\x5a\x8c"
- "\x48\xaf\x46\xc8\x5f\x81\xe7\x26\xd1\x57\xc2\x84\x46\x3e\xd6\x03"
- "\x39\xfd\x01\xfa\xef\x86\x7c\xda\x5a\xf8\x5a\x4f\x06\x97\xdd\x92"
- "\xac\xa0\xab\x22\x26\xbc\xdc\x4a\x7c\x75\x3f\xa7\xdf\xb4\x90\x13"
- "\x78\x9e\xd5\x8a\x3e\x24\xa1\x6c\x4d\x0b\xf9\xe2\x18\x7c\x37\x48"
- "\xfc\x55\xc3\xef\xfb\xf0\x3b\x05\x7e\xdf\x82\xdf\x5b\xe1\x37\x0b"
- "\xf2\x0b\x62\xfe\x50\xb8\xdf\x08\xe9\x3f\x11\x7f\xa1\x8e\x27\xd0"
- "\xde\x5c\x22\xda\x8e\x98\xbe\x00\xef\xe1\xf7\x01\x91\xe7\xd5\x9c"
- "\xe7\x27\x66\x41\x39\x89\x50\xff\x06\x63\x23\x2b\x4b\xd7\x42\x3e"
- "\xef\xc4\xb2\xf1\x1c\x33\xfc\xff\xb6\x93\x0d\x0a\xe5\x9c\x38\x01"
- "\xbf\x73\xe0\x77\x17\xfc\xc6\xc3\xef\x3a\x91\x06\x75\x28\x1b\xa2"
- "\x12\x19\xcd\x33\x35\xdc\xde\x5d\x22\xf5\x79\xd4\xc3\x0e\xd9\x51"
- "\x5b\x19\xb5\x9c\xf3\xdb\x44\x8e\x33\x1c\x40\xde\x47\x31\x2f\xfc"
- "\x3e\x2e\xfe\x86\x89\xbf\x0b\xc4\xdf\x5f\x8a\xbf\xf3\xc5\xdf\x85"
- "\x26\x72\x42\x27\xda\x18\x40\x97\x13\x3a\x6c\x37\xf4\x6d\xd1\x9f"
- "\xda\xe7\xb9\x38\x46\x06\x39\xfe\x00\x94\xef\xd3\x95\xf6\xb9\x42"
- "\x9a\x1f\xc5\x39\x9f\x9e\xb4\xa3\x7f\x2c\x60\xeb\xda\x9f\x07\x3b"
- "\x64\x9b\xd1\xa6\x92\x85\x11\xb0\x81\x6e\x36\xc8\x69\xae\x58\x4e"
- "\xbc\x5c\x5c\x17\x16\x63\x03\xf8\xa0\xbf\x3c\x36\x1e\xf2\xbb\x29"
- "\x02\xfb\x2a\x9b\x3b\x46\xdf\x6e\xbe\x75\x04\x2e\x15\x8c\x0d\x02"
- "\x25\xf9\x8d\xe3\x1e\x3e\x56\x1f\xf7\x19\x7c\x2b\xd3\x31\x56\xff"
- "\x7c\x2e\x5f\x43\x9b\xbc\x11\xd2\x4b\x1c\xe9\x27\xf0\x3c\xc0\x03"
- "\x40\xcf\x06\x68\xcf\x9c\x26\xf2\x39\xfa\xf0\xbf\xbf\x99\xb7\x39"
- "\x54\x6a\xb3\xc8\x0f\x9d\x44\xdf\x66\x72\x22\x11\x64\x61\x1c\x62"
- "\xb8\xa9\x57\xce\x9e\x60\xf3\xba\x22\x46\x80\x97\x27\x66\x23\x4f"
- "\x9d\xfa\xa0\xb3\x0c\x0a\xea\x4a\xfb\x42\xeb\x2a\x53\x8c\x5a\x94"
- "\x29\x88\x0d\x90\xdf\xc8\x6b\x65\x9f\xfe\x57\x8f\xfd\x8f\xf7\xbb"
- "\x2f\xa2\x5c\xdf\xfd\xac\xde\xc6\xfb\x5d\x03\xe0\x0c\xf0\x59\x8f"
- "\xf1\x21\x40\x0e\x7d\x31\x5f\xec\xd3\x0d\xd0\xa7\x1f\x80\xf4\x3a"
- "\x5e\x57\x9e\x2e\x7e\x0b\x70\x56\x8f\xed\xbe\x55\x4a\x17\xdb\x8b"
- "\xe5\xa0\xcf\xff\x29\x52\xba\x58\x3e\xe0\xb1\xfe\x00\xf6\x13\x29"
- "\x5d\x6c\x13\xd8\x51\x5f\xd8\x24\x79\x92\xcd\xf1\x96\x2e\xbd\x87"
- "\x7c\x43\xff\x58\x7c\x8e\xff\x0b\x3c\x5b\x51\x82\xfa\x61\xdb\x73"
- "\x44\xf5\x72\x1e\xf1\xe3\xfd\xf2\x8b\x56\x57\x19\x79\xea\x28\x4d"
- "\x0b\xb0\x51\xa5\xd1\x5a\x63\x9b\x23\xd9\xab\x86\xae\xb4\x86\x28"
- "\x29\xce\xb7\x23\xce\x40\xc3\xae\x9a\x92\x5e\xfa\x42\x5d\x1a\x32"
- "\xa5\xba\x38\xe9\x67\xc6\x03\xac\x1b\x96\xb5\x0d\xec\x75\x0b\xc8"
- "\x05\x2e\xb7\x1b\x0e\x98\xc8\x04\xc9\xde\x65\x7a\x2b\x40\x46\x74"
- "\x39\x09\x6c\x7d\x34\x00\x75\x23\xee\xf1\x11\x70\x1e\x2b\xd1\x4e"
- "\x6a\x75\x30\x96\x4f\x3c\x4b\x56\xbc\x32\x1e\x7d\xaf\x44\x40\x5d"
- "\xdf\x81\xba\x95\xda\x71\xee\x7f\x3d\x8e\x53\x4f\xad\xb4\x27\x50"
- "\xab\x48\x33\xe8\x47\xa7\x16\x88\xb4\x45\xf9\x55\x8a\x32\x7d\x5b"
- "\x32\x8f\x19\x84\x73\x39\xd8\x3f\x7e\x87\x7a\x4c\x4d\xad\x15\x06"
- "\xec\x2b\x27\x17\x4a\x36\x29\xd4\xb7\x84\xdb\x84\xc7\xf7\x30\xdf"
- "\x44\x60\x79\xf3\xb9\xc0\x93\x27\x78\xdb\x4f\x7e\xc0\xd7\xb9\x99"
- "\x8f\x4c\xbc\x2f\xf3\x51\xdf\xf2\x05\xdf\x97\x75\xf4\xef\x7c\x4f"
- "\xc9\xc9\xbc\xde\x3d\x25\x0e\x5b\xb1\x9c\xfb\x8d\x3a\xb9\xdf\xd1"
- "\x27\x4e\xa6\xe3\x7b\xf0\xfe\x79\x48\xaf\x76\xa4\x1f\x2f\xe5\xf6"
- "\x80\xd1\xe6\xbf\x35\x0c\xf7\x96\xdd\x8c\xbe\xb6\xf9\xf7\x4e\x85"
- "\xb0\xef\xb3\x39\x0f\xa3\x4d\xea\xbf\x48\x67\xd4\xd9\xac\x0f\x43"
- "\xff\xc5\x7e\xdc\x93\x55\x47\xe0\xe2\xfd\x96\xeb\xe6\x72\xd6\x6f"
- "\x59\x9f\x3d\x35\xcf\xa9\x1e\x16\x36\xef\x85\xfc\x7c\x55\xad\x82"
- "\x67\x11\xa0\x57\xeb\xc4\x67\x3c\xa6\xc4\x79\xe6\x23\xcf\x8c\x6b"
- "\xdb\xb8\xd6\x89\x67\xb4\x02\x00\xdd\xe8\x13\x44\x5a\xab\x5e\xdc"
- "\x96\x42\xed\xb8\xee\x74\x99\x5a\x72\x7b\x7d\xfd\x9f\x2a\x75\xf8"
- "\xf7\x39\xa9\x10\xdb\x65\x85\x6f\x19\xf8\x5e\xb0\x86\x4e\x6e\x53"
- "\x35\x58\x10\xa7\x46\xc0\x1e\xfc\xe6\xf1\xb8\xcc\xa7\x4c\x12\xf6"
- "\xa0\x5f\x46\xb5\x90\x2f\x37\xee\xbc\x85\xe6\x01\x4f\xf3\xa0\x2f"
- "\xc5\xc2\xfd\xb3\xf0\x1b\xc5\x7f\x65\x81\xf8\x2b\xf6\x91\xbc\xae"
- "\xb4\x2f\x83\xa5\x78\xf4\x48\x1b\x8b\x6f\x4f\x24\xe2\x2c\x07\xe8"
- "\x80\x58\x63\xeb\xc8\x50\x6f\xc4\x17\xe2\x0c\x31\x16\xb0\xf5\x09"
- "\x86\x33\xe6\x7f\x20\x11\xf7\x20\x9f\x54\x20\xce\xa0\xac\x18\xc9"
- "\xcf\xaf\x89\x7c\xa9\xe2\xeb\x39\x5f\x26\x49\x7b\x6e\x71\x2d\x29"
- "\xfe\x76\x72\x33\x94\xab\xa9\xd0\x30\x5f\x9a\x67\x8c\xb6\x05\x04"
- "\xf3\xe2\x3a\x1c\x97\x93\x93\x2b\xe0\x9d\x7d\x0e\x9a\x1b\x59\x6c"
- "\xe6\xc3\xcb\xd9\x5c\xe4\x4d\xf0\xac\xda\x79\x9c\x61\x22\x55\x79"
- "\x38\xd6\xc0\xbd\x7d\x77\x06\x11\x5c\x07\x06\x39\xf6\xa5\x59\xb2"
- "\x6b\xef\x0b\xc2\xf5\xfc\xaa\xf9\x50\x3f\x1c\x43\xd7\xc1\xff\xa1"
- "\x30\x96\xac\x74\x33\x67\x3c\x07\xe7\x7a\xc4\xf8\x3c\x8d\x38\x8f"
- "\x85\xf1\x0c\x5a\xc8\x99\x8d\x35\xe8\x0b\x64\x43\x7f\x3f\xcf\xc9"
- "\x89\xb4\x13\x7d\x3d\x6b\xe2\xc8\x4d\x4d\xe4\xcc\x52\x9c\x37\x4a"
- "\xb9\x84\x73\x34\x8d\x89\xae\x73\x34\x8d\x95\xe2\x05\x23\xed\xd3"
- "\x61\x4e\x57\x9d\xf8\xbb\x68\x88\xab\x55\xcc\x0b\x2d\xfd\x4a\xd4"
- "\x29\x6a\xe8\x27\x8d\xbd\xf3\xbf\x88\x4b\xec\xdb\xb8\x8f\x03\xe7"
- "\x9c\x64\x36\x82\xbe\x47\x80\x4f\x50\xef\x6d\xf7\x3c\x5d\xbe\x19"
- "\x71\x74\x9a\x9d\x83\x42\x1f\xc4\xc3\xdb\x4b\x74\x9a\xf1\x93\xfb"
- "\x03\x6d\xac\x83\x6f\x07\xed\xb8\x48\x14\xba\x38\x32\x0d\xe7\xbf"
- "\x03\xec\xb4\x1c\xc7\xb8\xa2\x4f\xc1\xba\xf3\xe4\xf4\xb1\xf8\x2d"
- "\x44\x0e\xcf\x6f\x83\xff\xcb\x25\x3b\x09\xde\x09\xf4\xb1\x92\x20"
- "\xb4\x8f\x1e\xdf\x42\x6e\xeb\x4a\x3b\x6d\x90\x78\x85\x36\x04\xce"
- "\xc3\x89\x73\x09\x50\xd7\x46\xb6\xc7\x19\xfd\xd4\x9b\x18\xdd\x98"
- "\x1c\xc6\x32\x60\x0c\x7b\x3a\xd3\xc7\x42\x02\xb9\xee\x39\x0d\xf8"
- "\x3f\x2a\xda\x8c\xa7\x4b\x01\xfb\xf5\x4e\xf5\xfc\x85\xd3\xff\x19"
- "\xf8\x7e\x80\x05\xed\x33\x77\xf4\xf9\x6a\x96\x44\x1f\xdc\xaf\x1a"
- "\x00\xe3\x04\xc6\x6f\x1b\x6d\x83\xba\x55\xeb\x36\x13\xe5\x79\x72"
- "\x66\x5a\xf1\x9b\xec\x9c\x5d\x25\x9f\x9f\x3f\x33\x51\x1a\x87\xf3"
- "\x7a\x7f\x75\x3a\x60\xab\x0f\xc1\x79\x75\xf4\x77\xc6\xf6\xfa\x7d"
- "\xa7\x66\x73\xe9\x46\xdb\x3c\x52\x9e\xfc\x53\xcc\x23\xd9\x55\x8d"
- "\x1d\x29\x6a\x72\x58\x3d\x0f\xfa\xf1\x57\x65\x26\xd9\x91\xb9\xc3"
- "\xdf\x53\xf9\x55\x99\x48\xdf\x6a\xbe\x17\xe1\xab\x57\x50\x97\xe0"
- "\xd8\x1f\xf4\x48\x05\xea\xe8\xae\xb4\x33\x0a\xa9\xdf\x80\xde\xa8"
- "\x80\x77\x44\x7f\xd8\xb8\xfe\xfb\x55\x3c\xfa\x80\x60\xe3\x06\x9e"
- "\x5f\xc5\xe7\xfc\xcf\xcc\xed\xb5\xa5\x21\x1f\xbe\xc7\xf7\xa8\x7d"
- "\xb5\x68\x85\x5d\x06\x34\xfd\x6a\x11\xb6\x4d\xc4\x22\xe8\xab\x33"
- "\x31\x8e\x7e\x7b\x9a\xc9\xe6\xc3\x6d\xce\xfd\xf2\x4c\xa6\x63\xbc"
- "\xd9\x38\x6f\xd6\x4e\xa2\x19\xa8\x1f\xea\xfc\x51\x57\x9d\xb9\xb2"
- "\x63\x07\x2d\xc9\x95\x0b\x8f\x6d\xcb\x21\x2a\x59\x36\x90\x0d\xfb"
- "\x59\x42\xe4\xcd\x2d\xc4\xe4\x1b\xa0\x9a\xbc\xe4\xf1\xf8\x71\x34"
- "\x59\x4d\xe4\xfa\xf6\x71\xca\xdb\xad\x93\x4b\xa8\xcf\x3d\x4f\x2f"
- "\x8e\xb7\x12\xcd\xda\x5c\xf2\x6d\x2c\xf1\x79\xdc\x0e\xdf\x56\x11"
- "\x9d\x89\x34\x05\xe1\x99\xd1\xc3\x2a\xb4\x3f\x9a\x82\xb0\xcc\x24"
- "\x03\x51\x26\x35\xd3\xd6\xec\xd5\x63\x94\xa0\x0f\x02\x0b\x00\x63"
- "\x13\x54\x93\x4b\x7a\xa0\x8c\x43\x91\xec\xbd\x01\xcf\x46\xf3\xba"
- "\x99\x7e\x3f\x70\xdd\x74\xb7\x40\xdd\xf6\x0c\xaf\x6e\xdf\xec\x77"
- "\xd4\xed\x9b\xfd\x23\xaf\xdb\xd7\xb3\x9d\xea\x16\xe8\xa8\x5b\x0c"
- "\xd4\xed\xeb\x47\x87\x57\xb7\xb3\x4b\x1d\x75\x3b\xbb\xd4\xc3\xba"
- "\xed\x1d\xa4\x6e\x35\x03\xd7\x2d\x71\x32\xd4\xed\xf4\xf0\xea\xd6"
- "\x62\x71\xd4\xad\xc5\x32\x92\xba\xe1\x58\x3e\x39\x98\x9e\x65\xfe"
- "\xe4\xe3\xb8\xbf\xd6\x16\xf2\xcd\xc3\xc9\x06\x76\x3f\xa9\x85\x34"
- "\x5d\x11\xfb\xb7\x39\xc5\x42\xbf\xe1\x76\x4e\x53\xf4\xbd\x3a\xdc"
- "\xef\xda\xb4\x1c\xb0\x1c\xc4\x31\xfd\x0d\xdb\xdf\x90\x62\xa6\xe2"
- "\x7e\xd3\xa6\xd7\x8a\xd8\x7e\x94\xfa\x4c\xf1\xbe\xb2\x63\x7c\xdd"
- "\x1c\xdc\x0b\x22\x40\x7f\xa6\xe3\xeb\xc2\x30\x7e\xe7\xbb\x71\x66"
- "\x39\x4d\x43\xdf\x61\xe8\xef\x4f\x41\xe8\xf6\xba\x25\xef\xc6\x59"
- "\x59\xec\xf0\x6d\xec\xbc\x6f\x53\xb9\x74\xc6\x4d\xfa\x86\xd9\xb7"
- "\x3e\x13\xd2\x1b\xa4\x38\xb0\x54\xae\xc4\xb1\xc7\x5c\x2c\x1f\xd2"
- "\xcd\x52\x6c\x56\xc0\x7b\xba\x28\x1b\x2c\x01\xd6\xc1\xe4\xde\x37"
- "\x33\x25\xb9\xf7\x78\x3c\x09\xc0\xb8\x94\x3b\x92\xc7\xe1\x9a\x23"
- "\x94\xd5\xb4\x1f\xe9\x1e\x6e\x19\x47\x03\x92\x88\x0f\x9e\xed\xc3"
- "\x3d\x7a\x46\xb5\x99\xcc\x48\x22\x63\xc2\x13\xa1\x4c\x2b\x89\x0c"
- "\x48\x84\xf2\x80\xd6\x7c\x6c\xf0\x0d\x9b\xe3\xdb\x09\xe5\xe1\xfa"
- "\xb7\x4f\x3c\x51\x3d\xae\x4e\xa1\xdb\x76\x11\x05\x9e\x03\xc4\xf3"
- "\x7c\xfc\x2c\xdf\x58\x65\x57\xda\x37\x25\x52\xfb\x3c\xe0\x8f\x3f"
- "\xe7\x4f\xf3\x69\x07\x7f\x9a\x77\xf5\xe7\x4f\xf3\x18\xce\x9f\x6f"
- "\x6c\x0e\xfe\x9c\x0d\x73\xe5\x4f\xf3\x4c\x57\xfe\x34\xc7\x78\xc7"
- "\x9f\xe6\x48\x07\x7f\xf8\x37\x38\x7f\x9a\x13\x07\xe6\x4f\x73\xae"
- "\x83\x3f\xcd\x33\x3c\xe3\x4f\xf3\x11\xf7\xfc\x69\x5e\x3a\x08\x7f"
- "\xc6\x0e\xcc\x9f\xb3\x37\x7b\xce\x9f\xb3\x61\xc3\xe0\x8f\x1f\xe7"
- "\x4f\xcb\x16\x07\x7f\x5a\x1e\xea\xcf\x9f\xb3\x7b\x38\x7f\xce\x1a"
- "\x1c\xfc\x69\x31\xb9\xf2\xe7\xec\x11\x57\xfe\xb4\x28\xbd\xe3\x4f"
- "\x0b\x71\xf0\x87\x7f\x83\xf3\xa7\x45\x3d\x30\x7f\x5a\x42\x1d\xfc"
- "\x39\x5b\xe1\x19\x7f\x5a\xa2\xdd\xf3\xe7\xac\x65\xf8\xfc\x69\xf9"
- "\x4b\x1f\xfe\x04\xba\xe7\x4f\x8b\x69\x18\xfc\x09\xe0\xfc\x69\x9d"
- "\xe6\xe0\xcf\xb7\x27\xfb\xf3\xe7\xdb\x05\x9c\x3f\xdf\xce\x73\xf0"
- "\xa7\x35\xd5\x95\x3f\xdf\x46\xbb\xf2\xe7\xdb\x32\xef\xf8\xf3\x6d"
- "\x89\x83\x3f\xfc\x1b\x9c\x3f\xdf\x1e\x18\x98\x3f\xdf\xd6\x39\xf8"
- "\xf3\x6d\x94\x67\xfc\x69\x1d\xe3\x9e\x3f\xdf\xee\x1c\x84\x3f\xe3"
- "\x06\xe6\x4f\xeb\x33\x9e\xf3\xa7\x35\x75\x30\xfe\x0c\xcf\xd6\x6b"
- "\xdd\x89\xdf\x1d\x85\x72\x1a\xdd\x95\x83\xb4\xc3\xfd\x87\x42\x5a"
- "\x6b\x63\x91\x30\x56\xc9\xcf\x68\xb4\xee\xd4\x6c\x26\x8f\x34\x91"
- "\x73\x77\x17\x09\x63\x94\x34\xad\x0c\xc6\x49\x7f\xc8\xa3\x5b\xc7"
- "\x2a\x84\xad\xe3\x14\x78\x36\xdb\x7d\xfc\xf6\x73\x59\x3e\x53\xc8"
- "\x74\x3c\x47\xb7\x0d\xec\x65\xfc\xbf\x2b\xed\xdc\x4e\xb0\x05\xc3"
- "\x06\x3b\xbf\x85\x7b\x9d\x0e\xa7\xe3\xf8\xf6\x5c\x79\xaf\x5f\x8c"
- "\x34\x9a\x88\xfe\xc5\x74\x77\xe0\x39\x8b\x73\xad\xe8\xeb\x1b\xc6"
- "\xab\x15\x61\x77\xd0\x33\x38\xf6\x68\x21\xe7\xcf\xd2\xac\x2a\x8c"
- "\x8d\x69\x01\x5b\xfd\xa6\xf3\xe4\x7c\x68\xef\xfe\x3c\x1a\x91\x2f"
- "\xce\x11\xea\x78\xde\xb6\x67\x20\xaf\x0e\xe3\x90\x6e\x4a\xc6\xf8"
- "\x9a\x6d\x0f\x83\xed\xfb\x23\xfc\x06\xfa\x4e\x2a\x86\x5f\xdc\x27"
- "\xc3\xf7\x66\x9e\x5f\xc2\xec\xe5\x6d\xb7\xe6\xf3\xbd\x70\x6d\x33"
- "\x25\xdc\xc1\x77\xc6\xc3\xbd\x9f\x68\xcf\x63\xfe\x09\xe7\xc9\x3f"
- "\x3a\x9d\x9e\xab\xe0\xfe\x24\x94\x3d\x51\x7c\xee\x07\xf7\x07\xd1"
- "\xce\x66\x7e\x3e\x72\x52\xc5\x3d\xc4\xff\x28\x81\xb4\x40\x31\xcf"
- "\x44\xc8\xf3\x1a\xda\xee\x62\x19\x93\xe0\x7e\x0d\x8e\x81\xc5\xe7"
- "\x41\x70\xbf\x18\xd7\x0e\xc4\xe7\x37\xc3\xfd\x6c\xb8\xbf\x8b\x9f"
- "\x79\xe9\x11\xfb\xe8\x79\x9b\x77\x67\xc6\xcf\xb3\x98\x9a\xc8\x03"
- "\x3e\x16\xf8\x87\xd3\xfe\x9f\xf3\xcd\x7d\x9e\x45\x3a\x3d\xab\x97"
- "\x9e\xf1\x3d\x6a\xff\x48\x72\x7a\x56\xd1\xe7\x59\x9e\xd3\xb3\xfd"
- "\x7d\xca\xdc\xef\xf4\xac\xb4\xcf\x7b\x75\x4e\xcf\x72\xfb\x3c\x6b"
- "\x73\x7a\x96\x2a\x3e\xf3\xe9\x4a\x6b\x53\x38\xd6\xf0\xce\xeb\xc4"
- "\x74\x39\xa4\x07\x3b\xa5\x47\x8a\xe9\xf0\xfd\xb6\x39\x26\x52\x60"
- "\x16\xd3\x19\xef\x79\xf9\x6d\x8b\x9c\xca\x0f\xe5\x73\x1c\x6d\x91"
- "\xbd\x7b\xe7\xc6\xd7\xe5\x0a\x3d\x11\xf9\xf0\x4c\x8d\xb8\x72\xc6"
- "\xf6\xfa\x04\xcd\xf3\x2f\xbd\xa0\x89\x8b\x8e\xc7\xed\x2b\xeb\xd6"
- "\xc4\x6b\xd6\x6d\x88\x8a\x76\xf1\xb3\x1e\x84\x3e\x07\x31\xa6\x1a"
- "\xfa\x6e\x61\xf1\x0b\xde\xa4\xad\xbd\x31\x3f\x40\xae\xc2\xb7\xaa"
- "\x4d\x64\x01\xfb\xd6\x4e\xee\x8f\xbc\x12\x7d\xbf\x70\x3f\x2f\xe4"
- "\x89\x26\xd2\x76\x4c\xf4\xf3\x52\x0e\x79\xad\xee\xfd\xbc\x5c\xac"
- "\x67\xfe\x0d\x21\x1f\xf7\xf3\x72\xb1\x01\xfa\xf9\xe3\x74\x3c\x8f"
- "\xe1\xc1\x63\x9b\x5d\x90\x6c\x13\xf3\x8a\x2b\xcc\x47\x60\x2a\x9f"
- "\xcb\xe8\xeb\xaf\xb5\xaa\x14\xdf\x13\xd7\x4b\x4b\x9d\xde\x8f\xe2"
- "\xcf\x25\xfd\x20\x7e\x33\xb3\x0a\xcf\xb9\x8e\x6f\x82\x7b\x36\x7f"
- "\xcf\x9e\x5d\xe0\x73\x79\x59\x55\x7b\xb1\x4d\xd8\x6e\xd7\xb6\xc9"
- "\xff\xad\x89\x5c\x78\xc7\xd1\xb6\x0b\xf5\x4e\xbe\xe0\xc4\x36\x5c"
- "\xb0\xf1\x3e\xda\xaf\xad\x6c\x7f\x22\x55\x56\xed\xc5\x6f\xa3\x3c"
- "\x63\x75\xf5\x85\xfb\xac\xaa\x32\xa9\x3e\x4e\xf5\xdb\x8b\xe3\x7a"
- "\xa8\xdf\x49\x4e\x13\x90\x1f\xc0\x53\xb1\x0d\xbb\x68\x5a\x5b\x12"
- "\x8f\x65\x00\xfa\x04\x63\xb2\x30\x5d\x75\x31\x4a\x9a\xcb\x44\x1d"
- "\xc5\xe7\x30\x2f\x3a\xec\x3f\xf4\xd1\x95\x25\xe9\xaf\x8b\x4e\xf6"
- "\x1f\xff\x26\xa4\x95\x3a\x63\xc8\xe9\x7b\xc7\xf0\x7b\x90\x6f\x11"
- "\x3f\x0f\x50\x55\x86\xfd\x1d\xee\x03\x71\x2f\x26\xbe\x8b\x75\x74"
- "\x17\x87\xcf\x9d\x0f\x45\x07\x1d\xbf\x0b\x96\xe8\xb8\x93\x9d\x91"
- "\xff\x2e\x44\x9a\xaf\x13\x63\x60\x94\xef\xec\x8d\x4b\xfd\x5d\x04"
- "\x8b\xed\x96\x3d\xb9\xf2\x3e\x15\x89\xe4\xb4\xfd\x6e\x25\xca\x78"
- "\xec\x33\x5c\xd6\x7f\x57\x2e\xf2\x3c\x92\xd7\xff\xbb\x2c\x4c\x77"
- "\xec\xbf\xff\xce\x24\xe5\x93\xe4\x32\x5f\xaf\xfa\xee\x7d\x96\x8f"
- "\xc7\x0a\x8e\xe1\x3c\xbf\x2b\xb0\x89\x7c\x57\x2d\xe6\x3f\xc7\xb0"
- "\xc8\xfc\xf7\x7c\xd7\x4a\xb3\xea\x63\xa0\xae\x30\xfe\x69\x13\x63"
- "\x56\xf0\xef\xc2\x6f\x35\xd6\x05\x69\x84\x67\xc9\xa9\x7e\x72\x25"
- "\xf0\x67\xc0\xb3\x5a\xe2\xbe\xee\xdb\xce\x93\x4b\xdc\x86\x90\x53"
- "\x2b\xce\xb1\xf2\xb6\x5e\x8a\x76\xda\xfb\xac\x92\xf2\x70\xd9\xcd"
- "\x9e\xb1\x3d\xe5\xba\x04\x9c\x0f\x12\x9f\x25\xe0\xf9\xda\xde\xff"
- "\xc7\x3a\xfd\x3f\x06\xff\x67\xfb\x9a\x37\x33\xdd\xaa\x70\x9c\xe3"
- "\xbf\x14\x05\xf7\xaa\x3e\xf7\x41\x2e\xf7\xaf\xf0\x7d\xcf\x60\x9b"
- "\x35\xb3\x3d\xe4\x62\xba\x58\xb6\x2f\xab\x4f\x02\x9d\x0b\xd8\x38"
- "\x80\x67\xba\xc5\x7e\x78\x00\xcf\x6c\x07\xd8\x9e\x65\xe7\xb5\xe1"
- "\xf9\x1c\xf1\x37\x54\xfc\x0d\xe1\x71\x5a\x2f\x05\x3b\x62\xad\xe3"
- "\x1c\xcd\xa5\x10\x77\xb1\xdf\xf1\x3c\xb8\xf8\x1b\x2a\xfe\x86\x88"
- "\xb1\x6a\x97\xc3\x7b\xbd\xe7\xbf\x07\xde\x83\x7c\x29\x5d\x3a\xcb"
- "\x6d\xcf\xac\x5a\x2e\x64\x1e\x5b\x88\x71\x41\xd1\x4f\x58\x4a\x1b"
- "\xfa\x8a\xb1\x10\x23\xe9\x26\xc6\xf8\xae\x54\x8c\x0d\x5a\xcb\x63"
- "\x82\xe2\x19\x58\x19\xce\x9b\xa3\xed\x58\xab\xbb\xc0\xe2\x82\xbe"
- "\xdc\x26\xc5\x3d\xb9\xd4\x6a\xcf\xaa\x5a\x2e\xf6\x97\x5d\x7c\x8f"
- "\x7e\x3b\x9b\x2f\x66\x71\xad\xdb\xd8\xba\x97\xb2\x85\xb4\x27\x4a"
- "\x79\x38\xed\xda\xd9\xdc\x57\x71\x9a\x14\xfb\xb1\x5d\x23\xc5\x9a"
- "\x36\x91\xf6\xa4\x4e\xdf\xcf\x1b\x20\x6d\x8e\xeb\x9e\xe9\xf6\xc5"
- "\x58\x26\xd6\xdd\x44\x2e\x99\xb1\x6c\xc8\x13\xd1\xdb\x67\x21\xfd"
- "\x65\x1b\x99\x0a\xf5\x6a\x91\xca\x87\xe7\xd0\xff\xcd\x8c\x96\x58"
- "\x66\x67\x96\x1d\xe8\xd0\x9e\x6d\x92\x17\x2e\xe2\x7b\xae\xdb\x41"
- "\xff\xfd\xf7\xfc\xc1\x6c\x20\xe8\x0b\x79\xd0\x97\x4a\x84\xcc\xfa"
- "\x5c\xe6\xcb\xdb\xb7\x3e\x8f\xcf\x31\xb6\x9f\xc5\xdd\xe1\x3b\x2e"
- "\x13\x05\xee\x81\xe0\x98\xed\xe0\x3e\x90\x21\x0d\x64\x75\x19\xf4"
- "\x11\x36\x57\x30\x3c\xbd\xdf\x6e\x61\x65\x4c\xe5\xbe\xcd\xf0\xec"
- "\x52\x57\x5a\x47\x58\x6f\xfc\x84\xde\x7e\xdc\xb1\x06\xd7\x1e\xa0"
- "\x7f\xb0\x3a\xf6\xad\x03\xd6\x17\xca\x6a\x76\x6b\x63\x2a\xeb\xd9"
- "\xfa\x2c\xc8\x80\x48\xbe\x47\xb5\xe3\xcf\x3e\xea\x5b\x5b\xe1\x5b"
- "\x7b\x7b\xe3\x46\x40\x9e\x1c\xdc\x7b\x0f\xe5\xf7\xb6\x33\x8e\x7d"
- "\xa3\x9e\xf7\xf5\x8e\x56\x21\xab\x3e\x77\x47\x37\x51\x88\xe9\xad"
- "\xb5\x36\x2b\xc6\x1e\x18\xd0\xcf\x16\x8b\x9d\x87\x7b\xc2\xb7\xd7"
- "\xe7\xe2\xb9\xa1\xfb\xac\x52\x9d\x2d\xad\x78\x5e\x05\xeb\xcc\x69"
- "\x6b\x39\x2d\xd1\x51\xdf\x0e\x65\x27\x9f\x22\xcd\xc4\x12\x8d\xfb"
- "\xe6\x18\x4d\x36\x4b\x7b\x39\x2d\x6c\xcc\xc7\xbe\xcf\xf3\xb0\xb1"
- "\x3f\x8b\x63\x04\xe5\x17\xb1\x58\x6c\xd0\x06\xe0\x45\x79\x32\x9e"
- "\xf9\xb7\xb0\xb8\x00\xdb\x98\xaf\x0e\x68\x37\xdb\x27\xdb\x29\xae"
- "\x93\x58\x4a\x25\x5d\x61\x12\xd3\x76\xe0\xb7\x13\xba\xc9\x45\x62"
- "\x79\x0d\x63\xac\x03\x3d\x4a\xd0\x3f\x5d\xad\x05\xfa\x49\x62\x37"
- "\x62\xa1\x04\x63\x77\x9a\x88\x25\x9d\xeb\x37\xa4\xb9\x25\x06\xbf"
- "\x8f\xb4\x85\xb1\x99\x19\x68\x7a\xb9\x2b\xad\xb3\x37\xfe\x63\xce"
- "\x2d\x38\xde\xb1\x0c\xea\x5f\xd7\x0e\x75\xae\xcd\x03\xdd\x39\xf5"
- "\x14\xd6\xef\xa8\x30\xbe\x3e\x17\xf7\x64\xc3\xff\xeb\x44\xd9\xce"
- "\x78\xc7\x71\xd0\xf9\x96\x8f\x3a\xf8\xf6\x5a\x8e\x05\xe6\x43\x0d"
- "\xd2\x16\x8a\xf4\x63\xf1\x24\x72\x13\x38\x1d\xc4\xfc\x36\x3e\x5f"
- "\x1c\x7c\x17\xd4\xcb\x29\xfe\x5d\x27\xd3\xdd\xe8\xfb\xbe\x88\x8d"
- "\x09\x3b\xf7\x3b\xd5\xd9\xc2\xce\xbf\xb6\xe3\x5c\x5f\xe7\x72\xfc"
- "\x96\x1e\xfd\x87\x21\x2e\xce\x3b\xe3\xbf\xf3\x61\xac\x27\xee\xf9"
- "\xb5\xfb\xd6\x45\x82\xbe\x8d\x42\x3a\xc3\x3b\xf1\xd0\x17\x72\x07"
- "\xd1\x85\x2c\xee\x5e\x57\xda\x65\xad\xa4\x0b\x61\x7c\x01\x7a\xa1"
- "\xeb\x76\x36\xee\x04\x7b\xda\x28\xa0\x3d\xd3\xa5\x41\xdc\x40\x5f"
- "\x2f\x11\x65\x6c\x09\xbc\xb3\x5c\x5a\xf3\xb2\xe3\xb9\x89\x8b\x6c"
- "\xbd\xd7\x22\xc5\x93\xe3\xfe\xfa\x2e\xa7\x3a\xce\x59\x5c\xce\xee"
- "\x77\xce\x02\xcf\xfe\xbc\xc9\xe2\x8e\xed\x45\x9d\x52\xd3\xd6\x8c"
- "\x3a\x82\xbd\x8f\x67\x2f\x92\x61\x4c\xce\xcf\x0f\x35\xe3\xfc\x3c"
- "\x8b\x79\x82\x75\xe1\xb1\x27\x9a\xd8\xff\x80\x5b\x05\xfe\x72\x2c"
- "\x5d\x36\xf7\xc6\x4c\x07\x7e\xe3\x5a\xdb\x61\xc5\x2f\x48\xf9\x1d"
- "\xa8\xaf\xbb\x6e\xc7\xf8\xdf\x5d\x69\x5d\x41\x52\xec\x6f\x16\xeb"
- "\x9b\xb7\x67\xa7\x5b\xbf\x8c\xf7\x92\x50\xf4\x17\x80\xe7\xeb\x18"
- "\x0d\x54\x93\x63\xd0\xd7\x33\xfa\xad\x2c\xdf\x8c\x31\x59\xba\x8e"
- "\xfd\xee\x16\x76\x46\xd9\x52\x7e\x6f\x3b\xee\xc3\x6a\x6b\x49\x62"
- "\xfe\x98\x94\xe1\x89\x36\x8a\xef\x31\x7b\xc2\x6f\x32\x9e\x37\x6e"
- "\x63\xb1\x0e\xb0\x4c\xaf\xfd\x16\x77\x19\x44\xdb\xb4\x0d\xc6\x3e"
- "\x93\x81\x57\xcc\x76\x87\xff\x6f\x39\x4f\xac\x57\x78\x0c\x5a\xee"
- "\x7b\x5f\xdc\x8f\x3d\x96\xfb\xd8\x00\x9a\x31\x9f\x07\xd6\x75\x9a"
- "\x7b\x30\x5e\xb3\x75\x23\xf3\x83\x9d\x59\xb5\x4f\xa4\xc1\xbe\x1d"
- "\xbc\x5e\x01\x2b\x12\xe5\xac\x8e\x58\xbf\xe1\xd5\xcd\x3a\x57\x1c"
- "\x47\x8c\xed\x4a\xb3\x26\x49\xbe\x39\xb8\x3d\xc5\xfd\x63\x73\x5e"
- "\x58\xcf\x89\xf6\xf3\x7e\xf1\xdb\xfb\x47\xe1\xdb\xfb\xc5\x32\x33"
- "\xb9\x8f\xf0\x2e\xe8\x07\x55\x60\x9f\x5e\x51\x48\xe3\x19\xf1\x0c"
- "\x51\x08\x1f\x67\x5d\x09\x76\x8c\x67\x38\x0d\x5d\xce\xdd\x6d\xd8"
- "\x10\xaf\x89\x5a\xb3\x49\xb7\x32\x7e\x55\x8c\x26\x3a\x2e\x6e\x43"
- "\x9c\x06\x9d\x34\x39\xf7\x1f\x1e\xc7\xe8\x4a\xa8\x18\x9f\xb0\xcc"
- "\x11\x9f\xf0\x4a\xa2\x73\x4c\x4f\x13\xb9\x92\x34\x3a\x73\x17\x57"
- "\xf2\xdc\x95\x93\x2b\x17\xf6\xc1\x75\x00\xae\x72\xb8\x2a\x71\x2e"
- "\x63\x85\x95\x84\x81\xae\x67\xfb\x4c\x1c\x3e\x27\xae\xa0\x5f\xf2"
- "\xb0\x26\x72\xa5\xb3\x48\x50\xe0\x38\x08\xe3\x86\xef\xc3\xfc\xc5"
- "\xf0\x3e\x5c\xe5\x70\x55\xc2\xc5\xde\x13\x3e\x66\xe7\xe5\xf7\x39"
- "\x3f\xe3\xfb\x47\xb6\xee\xc5\x3c\x74\x2b\x2e\xd9\x43\xbe\x7f\xe7"
- "\xf9\xfa\xd4\x41\x4e\xd3\xda\xa5\x7c\x6c\x6d\xdf\x7f\x2b\xd1\x0c"
- "\x90\xcf\x87\xa6\x9d\x2b\x13\xf3\xb1\xbd\x36\x52\x7b\x30\xd6\x00"
- "\xe4\x97\xf2\x29\x68\x5a\xd7\x1c\x31\x1f\xd3\x15\x42\x9a\x7c\xa0"
- "\xef\x8e\xa1\x69\x07\x82\xc5\x7c\x81\xce\xe5\x39\xe5\x19\x2b\xa4"
- "\x9d\x29\xc5\x3c\xc2\x56\x45\x10\xb7\x9d\xae\xe4\x41\xfe\x01\xfd"
- "\xaf\x0c\x8f\x4f\x3d\x61\x7d\xf9\xa4\x5b\xb5\x26\xfa\xa7\x6b\xd6"
- "\x27\x60\xa4\xa9\xf8\x0d\x2f\xc5\xe3\xef\xfa\x95\x2f\xb2\x9f\x0d"
- "\x2b\x56\xaf\xe2\xff\xc4\xc7\x86\xe2\x3f\xb1\x80\x37\xfc\x8d\x7a"
- "\x49\x87\x3f\xab\x36\xe0\x6d\x62\x4c\xc8\x4b\xab\xf0\xa7\xef\x39"
- "\x50\x6d\x57\x5a\x4f\x2b\x60\xa3\x81\xcb\xd9\x1e\x18\x23\x9d\x63"
- "\xd8\xc3\x78\x4a\x47\xb4\x36\x22\xcd\x6b\xb9\xfa\x1c\xb1\xc9\xd0"
- "\xe7\x48\xc0\x56\xdd\xaa\x00\xdb\x9a\x68\xd0\x19\x3b\xbb\xd2\x6c"
- "\xa1\x26\xb2\x96\x88\xb2\xb1\x9c\xf9\x39\x4d\xeb\x49\x15\xf7\x76"
- "\x2a\x84\xcc\xaa\x78\xf4\xdf\x0f\xf7\x2c\xce\x36\xdc\x97\xc0\xfd"
- "\x07\x70\x8f\xf1\xb5\x83\xe0\x3e\x09\xe7\xa4\xe0\x5e\x0d\xf7\xc1"
- "\x42\xe6\xc1\x4c\x3c\x63\x0c\xf7\x1a\xb8\x9f\x01\xe5\xe7\x4a\xfd"
- "\x62\x60\x5b\xd9\xb6\x4f\x8a\xfd\xcd\xe3\x7c\xdb\xca\x7b\xe3\x7c"
- "\x63\x3c\xa7\xe4\xc0\xe5\x4c\xff\x32\x1b\xc4\xd6\xec\xa3\x9e\x96"
- "\x00\x79\x9a\x25\x7d\xc9\xe7\x3b\x6c\x16\xc9\x7f\x0a\x9f\xcf\xb0"
- "\x2b\x9c\xe2\xa5\xe3\x7d\x90\x14\x2f\x1d\xe7\xbb\x58\xbc\x46\xf8"
- "\xa5\x69\xe8\x4f\x96\x96\x0d\x38\x97\xc7\xe2\x7c\xda\x5f\x41\xdf"
- "\xbc\xe6\x94\x28\xd9\x9d\x45\x38\x87\x06\xf7\xdc\xb7\x24\xbd\x48"
- "\xec\x2c\x3e\x94\xe4\x77\xce\xd9\x97\xc4\x80\xe7\xa1\x8e\x83\xcd"
- "\xc0\xe2\x5d\xc5\x6e\x08\xb0\xad\x8c\xe6\x76\xa0\xfd\x24\x97\x5f"
- "\x75\xe9\xdc\x5e\xb0\x57\xd0\xa7\x79\x4c\x14\x13\x11\x16\x72\xdf"
- "\x53\xb1\x1b\x28\xbc\x1b\x90\xb8\x32\x9a\xa5\x41\xbe\x6d\x60\xab"
- "\x89\xf5\x7b\xdb\x18\x8c\x67\x5c\x05\xd1\x47\x86\xbd\xec\xb9\x69"
- "\xa9\xf8\x1d\x25\xb3\x43\x8e\x13\x15\xc6\xdb\xc4\xba\x15\x39\xf9"
- "\xc5\xdb\x01\x69\xb8\x87\xb4\xe3\x69\xa2\x42\x3f\xc0\x62\x5d\xca"
- "\x78\xfc\x30\x21\x4c\xf2\x35\x65\x82\xb4\xbe\xed\x79\xfa\x5f\x19"
- "\x2a\x67\xae\x0a\x59\xb2\x00\xfe\x0b\x11\x43\x56\x3b\x63\x33\xb8"
- "\x63\xfc\xf1\xc8\x8e\xff\x4a\xf8\x6f\x1e\x97\x54\x00\x3b\xcd\xce"
- "\xc6\x42\x02\x8e\x81\xbb\x22\xf2\xf8\x1e\x54\xe1\x28\xfa\xdd\x15"
- "\xd2\xd0\x9e\xc4\x73\xd3\xc2\x01\xc4\x2c\x55\xd6\x65\x16\x6f\x41"
- "\x1f\xcf\x32\xa0\xb1\xf0\x0e\x3e\x13\x7d\x78\xc9\x99\x8f\x2b\x3b"
- "\x51\xb3\x33\xc2\x60\xa3\xe0\x19\xd4\x16\x99\xac\x06\xed\x0e\x9c"
- "\x4f\x12\xd2\x84\xa5\x88\x5b\xe0\x31\xfa\x10\xb1\xd0\xf1\x55\x91"
- "\xd4\xf7\x58\x08\xe2\x18\x6d\x5d\x63\x20\xd2\x8c\xa2\xcf\x80\xc7"
- "\xe1\xfa\x37\x1e\x7b\x66\x59\xab\x54\x26\xdc\xab\xc0\x86\xda\x09"
- "\xbf\x81\x5d\x69\x74\xa1\x53\x4c\x3e\xf1\x4c\x34\x5d\x83\xbe\xdf"
- "\xb0\x6c\x66\x3b\xcb\x64\xef\x73\x1b\x84\xc6\x9b\x48\xe0\x1c\xde"
- "\x17\x31\xd6\xe8\xf6\x4c\xf1\x7f\xb0\x7f\xee\x37\xf7\x29\xe3\x84"
- "\x34\x57\xca\x31\x0d\x3a\x4f\x4e\x1e\x87\xeb\xdf\x20\xff\x07\x26"
- "\xf2\x20\xcb\xbf\x4d\xce\xce\x49\xb6\xf8\xa8\xf1\xbc\x3b\xad\x97"
- "\xd2\xc7\xc8\xc2\x80\xa6\x18\xd3\x8d\xf7\xfd\x8e\xf1\x75\xb1\x70"
- "\x6f\x91\xe6\x58\xd8\x9c\x4b\x06\xee\xeb\xea\xbd\x4f\x84\xfb\x20"
- "\xe9\x1e\xfe\xd7\x48\xb2\x02\xe7\x24\x3a\x52\x22\x76\xe1\xb8\x73"
- "\x95\x1a\xec\x42\xb0\x6f\xe0\x39\xf0\x7f\xfb\x42\xfe\x6e\x8f\xa6"
- "\x23\x4d\xaf\xb3\xf8\xdf\x14\x69\x01\xf9\x07\xcf\xc0\xfe\x8b\x6d"
- "\x14\xcb\x89\x31\xc9\x8b\x7a\xdb\x26\xa4\xf9\x04\x08\x59\xc7\x16"
- "\xb2\x36\xca\x64\xa5\xf0\xff\x22\xb3\x6f\x95\x06\xf2\x01\xff\x6d"
- "\x06\x96\x2f\xe1\x42\x49\x76\x77\xe0\x52\x23\x58\xf0\xe5\xab\xbb"
- "\x91\x7e\x6c\x4f\xb6\x7e\x73\x20\xf3\x5d\x8b\x7e\x40\x58\x4c\x34"
- "\xf4\x6f\x69\x23\x63\x59\x4c\x81\x2c\x9b\x9a\xf9\xd2\x7f\x59\xab"
- "\x92\x7c\x5b\x82\xbc\x09\xa2\xf2\x0d\x16\xf4\x77\xc9\x62\x87\x74"
- "\x69\xfd\x99\x8f\x4b\xd1\xb7\x65\x61\x02\x09\x32\x08\xdc\xb7\x25"
- "\xf3\x11\x32\x16\xc6\x29\x09\x03\xfb\xb7\xa4\x69\x7b\x17\x4a\xfe"
- "\x2d\xe9\x65\xbb\x15\xfe\x9f\x01\xf4\xc0\xf8\xef\x5a\x76\xef\xf0"
- "\x37\xa5\x18\xd0\xdf\xa5\x9c\xb0\x98\x25\xe8\xef\x72\x58\xfa\x42"
- "\x26\x63\xf3\xb2\x5d\x19\x32\x90\x7f\xaf\xb2\xb8\x80\x4e\x69\x15"
- "\xd0\x12\xd1\xbf\x01\x8d\x11\xd3\x1a\x4c\x24\xcb\x20\x8e\x4b\xcd"
- "\x38\xc6\xdf\xc9\xe6\xc6\x84\x36\xda\x13\xb3\x6b\x20\x99\xd3\xee"
- "\x3f\xc5\xd4\x8e\xfe\x29\x32\xe4\x6a\x93\x4c\x9e\x84\xef\xb2\xb1"
- "\xa4\x4c\xae\xee\xdb\xaf\x9f\x5f\xb5\x21\x2a\x7a\xc5\xda\x75\x3a"
- "\xcd\xd3\x4b\x1f\x67\x81\x12\x43\x34\x6b\xe2\xa3\x99\x4a\xd2\x3c"
- "\xbd\xe0\xb1\xf0\xf0\xa5\x2b\xfe\x75\xe9\xa3\x4b\x9f\xf9\xd7\x87"
- "\xf9\x89\xc5\xa5\x71\xaf\x60\xb0\xcd\xf8\x0d\x1a\x7c\xe9\x79\x31"
- "\x9a\xf8\xe6\xe8\xb8\x0d\x7d\xe5\x41\x10\x9b\xe7\x92\xb3\x39\x5d"
- "\x0b\xfe\xcf\xe6\xd2\x64\xf2\xfd\xd2\x1c\x17\x93\x7d\x32\xf9\x1e"
- "\xa4\x2d\x8b\x35\x9e\x21\xc7\x3e\x4b\xc4\x38\xef\xa8\x77\x14\xd8"
- "\xa7\x51\xff\x40\x5b\x4c\xce\xbe\xb9\xf8\xbb\x3e\x0a\x39\xbe\x27"
- "\xf6\x65\x31\x6d\x0a\x9d\x3a\x35\x85\xf9\xd7\xca\xf0\x09\x92\xe6"
- "\xbd\x31\x4d\xaa\x43\x13\xe6\xc9\x90\x3f\xdb\x1b\x4f\x38\xc3\x67"
- "\x9e\x23\x0e\x25\xfb\x73\xa1\x11\x21\x68\xce\x8c\x01\x5b\x65\x2c"
- "\x5c\xe3\xf0\x5a\xd8\x2b\xdf\x13\x68\x03\x8e\xd9\x02\x64\xa0\x83"
- "\x13\x7d\x78\x1c\xab\x8c\x7a\x16\x7b\x21\xdc\x6e\xf3\x59\x61\x97"
- "\xc3\xaf\x0f\x5d\x61\x57\xb0\x71\x22\x4d\xa0\xf5\xec\xac\x7d\x02"
- "\xad\xc3\x78\x6d\x80\xe3\xcc\x70\x5b\x72\x66\xb8\x9d\xda\x56\x80"
- "\xfd\x0e\xbf\xdf\xe2\x99\xf1\x70\xfb\xb7\x94\xc5\xac\xc1\xb3\xf5"
- "\xdc\xcf\x60\x25\xee\xa1\x7c\x0e\x30\x5c\xd4\xce\x63\x12\x87\xbf"
- "\xf2\xdd\x99\x15\xaf\x98\x78\x4c\xe2\x8b\x3c\x8e\x37\x8f\x75\x4e"
- "\x92\xa1\x9c\xa3\x2b\xec\x3e\x9a\x70\x7b\x0f\x65\xe7\x5e\x33\x14"
- "\x9a\xc1\xe2\x0c\xa3\x8c\xdd\x34\x85\xc8\xf1\x1c\x9d\xbd\x68\xb5"
- "\x06\x7d\x0a\xa6\x98\xa9\x15\x7d\xd3\x7c\xd4\xdd\x20\xd7\x24\x28"
- "\x80\x6e\x8a\x05\xb5\xba\xd0\x81\xcf\x3d\x67\x7c\x95\x4a\xf5\xf9"
- "\xfb\x69\xc6\xd7\x4b\xa8\xbe\x60\x0e\xcd\x3c\x86\x73\xa3\x32\x9a"
- "\xd1\xac\x81\x7b\x48\x6f\x31\x53\xbd\x61\x0e\xcd\x38\x57\x0e\xbf"
- "\x70\xdf\x96\x4b\xf5\x85\x70\xff\x49\x04\xbc\xb7\x8f\x66\x54\xe2"
- "\x7b\xa1\x34\xe3\xe8\x42\xf8\x85\xfb\xaa\x30\xc8\x07\xf7\x9f\xce"
- "\x85\x5f\xb8\xaf\x0e\x6d\x91\x8d\x09\x84\x77\x20\xed\xbb\x48\xfe"
- "\xad\xf6\x48\xf6\xad\x8c\xce\x48\xfe\x0d\x6b\x24\xff\x46\x4f\x24"
- "\xff\x86\x10\xc9\xbf\x51\xa3\x85\xfc\x07\x68\x46\x6d\x1e\xe4\x9b"
- "\x4b\x33\xea\x94\xf0\x0b\xf7\xc7\x12\x21\x1f\xdc\x1f\x6f\x85\x5f"
- "\xb8\xaf\x87\xba\x14\xc2\xfd\x89\x4a\xc8\xff\x01\xcd\xf8\x62\x1e"
- "\xe4\x9b\x47\x33\x1a\xf6\xc1\x2f\xdc\x9f\x9a\x01\xf9\xe0\xfe\x4b"
- "\x28\xc7\x00\xf7\xa7\x55\x90\x7f\x1e\xdd\x2e\xc3\xfa\x94\xd3\xed"
- "\x3e\x58\x6e\x18\xdd\xae\xc0\xfc\x70\x3f\x16\xca\x33\xc0\x3d\x8c"
- "\xaf\xf5\x06\xb8\xf7\x2d\x83\xfc\x70\x3f\x01\xda\x9a\x5f\x41\xb7"
- "\xab\x6c\x90\x6f\x3e\xdd\xee\x0f\xe9\x05\x70\x1f\xb8\x14\xf2\xc1"
- "\xfd\x24\xcc\x0f\xf7\x37\xed\x85\xfc\x70\x7f\x33\xd2\xa8\x92\x6e"
- "\x9f\x7c\x00\xf2\x2d\xa4\xdb\xa7\xaa\xe1\x17\xee\x83\xb1\xfe\x70"
- "\x3f\xbd\x01\x7e\xe1\xfe\x76\xa0\x55\x21\xdc\xdf\x09\xf5\xcb\xaf"
- "\xa6\xdb\x67\x62\xf9\x8b\xe8\x76\x2d\xd2\x07\xee\xef\xa9\x80\x7c"
- "\x70\x3f\x0b\xe8\x61\x80\xfb\xfb\xb2\x21\xff\xa2\x01\xf9\xb9\xfd"
- "\xfe\x28\xba\x75\x2c\xa1\xdb\x7f\x6a\xa1\x5b\xc7\xc1\xef\xbc\x52"
- "\xba\x75\x8c\x96\x6e\x0f\x53\x40\x3a\xfc\x3e\x9c\x04\xf7\x21\xe2"
- "\x3d\xfc\xfe\x7c\x29\xdc\x87\x8a\xf7\xf0\xfb\x48\x08\xdc\xcf\x11"
- "\xef\xe1\xf7\xd1\xfd\x70\x3f\x97\x6e\x7f\x2c\x1b\xee\xf1\x57\x03"
- "\xf7\xf3\xc4\x7b\xf8\x9d\xbf\x04\x7e\x6d\xe6\x69\xd1\x89\x66\xbf"
- "\xb5\xa1\x66\xbf\xa2\x12\xc4\xa4\x3d\x27\x7f\x9f\xe0\x5f\x10\x0a"
- "\x7a\x77\x6c\x4a\x27\x19\xd7\x22\x1b\x77\x1a\x65\x8a\x31\xc9\xc4"
- "\x62\x01\x8a\x3e\x2e\xc7\x36\xc9\xc6\x9e\x04\x1b\x09\xe3\x39\xc8"
- "\xa1\xed\x6d\x34\x6d\x4c\x3b\xb4\x39\x96\xa6\x4d\x68\x82\x5f\xb8"
- "\x9f\x78\x1c\xda\x0c\xf7\x0f\x6e\x87\x5f\xb8\x5f\xf6\x18\xb4\x3d"
- "\xb6\x2b\x63\xdc\x5c\x93\x4c\x11\xcb\x64\xc4\x7f\x25\x94\x04\xd8"
- "\x52\x68\xb8\x0d\x74\xc7\xae\x3d\x91\x01\xb6\x48\xe0\x43\x71\x58"
- "\x00\xc6\xec\x28\x8c\x3e\x40\xfd\xd7\xb2\x3a\x61\x5c\x1e\xda\x33"
- "\x43\xce\xbf\x3d\x81\x36\xc9\xc6\x45\x63\xfc\x08\xea\x9f\xe6\xee"
- "\xf9\x6b\xec\xf9\xd4\x3d\x3a\xfe\x1c\xf0\xd0\xfb\x7c\x19\x3e\xdf"
- "\x13\x80\x7e\xd8\xa7\x3f\xcb\x9e\x1b\x2d\xad\x62\xbb\x7c\xf0\xd9"
- "\x21\xcc\x6b\x92\x8d\x6b\xe6\x32\x7c\x6c\x2b\x4d\xf3\x21\x1d\xca"
- "\x63\x4b\xa0\xee\x16\xa8\x7b\x88\x68\xc3\xc7\x53\x65\x55\x22\xf7"
- "\x71\x52\x7f\xc0\xdd\x3c\x90\x90\xbd\x3b\x4f\x0f\x72\x10\xc7\xc5"
- "\xa0\x0f\xe5\x9a\xe4\x19\x07\x9a\x64\xbe\xe5\x85\x6c\xbe\x63\xcf"
- "\x5c\x2e\x1f\x95\xaf\xf5\x6c\x3f\x96\xae\xd9\x1c\x00\xdf\xf7\x3d"
- "\x94\x62\xa5\x9d\xe5\xc9\x8f\x81\x6c\x65\xe9\xe5\xec\x0c\x11\xff"
- "\x9f\xad\x21\x89\xff\xe7\xb1\x79\x68\x28\x0b\xdf\x75\x1e\x87\xd8"
- "\x33\x66\x2f\x11\xfc\xf7\x84\xb1\xb5\x75\x99\x32\xeb\xa0\x60\x92"
- "\x07\xc4\x93\x31\x9a\xcd\x1f\x41\xf9\x4a\xd7\x31\x6b\x6f\x5e\xf6"
- "\xec\x2f\x1f\x42\xde\x02\x9c\x5f\xca\x50\xf6\xc6\x3f\xa6\xd0\x86"
- "\xd7\x51\x17\xca\x49\x18\xea\x67\x66\x03\xcb\x7c\x23\xf1\xb4\x93"
- "\x4d\x55\xac\xb1\x65\xaf\xd5\xd8\xb3\xf7\xcc\xa5\x39\x7b\xc2\xfc"
- "\x6d\x32\xee\x1b\x58\xe6\xfb\xfb\xfb\xac\x68\x73\x56\x61\xde\xc5"
- "\xc2\xd8\x9f\x05\xde\x9b\x48\xe4\xe5\x71\xa7\xf0\x5e\x4f\x33\xc2"
- "\xca\x8c\x6d\x0d\xa4\x3c\x8e\x95\x95\x4d\x33\x16\x45\x08\x63\x7f"
- "\xb1\xb4\x08\x6d\xf7\x44\x9c\x7b\x3b\x8e\xe9\x13\x81\x2f\xa0\x57"
- "\x7c\x63\xa5\xba\xa0\x4e\xd1\x03\xed\xd0\xae\x46\x7f\x18\x2b\xec"
- "\x76\xf4\x2f\x97\x69\x02\x3a\x70\x7e\xf9\x2e\xc1\x38\xef\xe2\x77"
- "\xf7\x08\xe3\x8f\xe9\x6a\x97\xe3\x3a\xa2\x12\xfd\x75\x75\xb2\x33"
- "\xf4\x18\xfd\x58\x40\x3b\x80\xe7\x75\xe6\xdd\xba\x55\xba\x15\x9b"
- "\x75\x1b\xe2\xe2\x57\xbc\xa4\xfb\xa9\x06\x06\x93\x9a\x0d\xab\x35"
- "\xeb\xa2\xd7\x6d\x88\x7b\xa5\x9f\x8f\xa0\xae\x8c\xf1\x0a\x93\x4c"
- "\xc9\xe6\xc4\x8e\x82\x4d\xcf\xe6\xf4\x65\x13\xea\x91\xd7\xbb\xde"
- "\xe4\x31\x38\x20\x8f\x16\xc6\x7d\x7b\x99\x5d\x9e\xb7\x27\x82\x1a"
- "\xa2\x0f\x64\xa1\x1f\x90\x97\x30\xc6\x83\x99\x18\x49\x3b\x8f\xcb"
- "\xcb\x62\xee\xc1\x18\x23\x61\x0b\x2d\x4f\x68\xc7\x7e\x00\xb2\xa5"
- "\x68\x21\x2d\x5c\x4d\xae\xe8\xd7\xe6\x35\xc9\x26\x1c\xb8\xa2\x2f"
- "\x9a\x2b\xc5\x4c\xb2\x67\x17\xe5\x09\xaa\xdd\xfb\x30\x66\x52\x0f"
- "\x55\x93\x1a\xa0\x65\x77\xe6\xb1\xe5\xa0\x07\x22\x0a\xd3\xe8\x01"
- "\x3b\x8c\xb9\x98\x0f\x9b\xff\x4a\x48\xb5\x53\xad\xc2\x9e\x46\x94"
- "\xf0\xeb\x4f\xfd\x4b\x4d\x3d\xaa\xe2\x50\x7c\x8e\xb1\x92\xec\x3d"
- "\x5a\x92\x5c\x4f\x85\xdf\xc6\x00\x6e\xd2\xc0\x68\xc7\xd8\xb0\x31"
- "\x17\x08\xa4\x8f\x17\x72\x8a\xca\x5b\x16\x12\x39\xe6\x05\x7b\x8f"
- "\x2c\x87\xff\x93\x56\x12\x3f\xc8\x17\x90\x74\x14\xd2\xbb\xb4\xe3"
- "\x6d\x29\x5a\x65\x77\x8a\x76\x7c\x0f\xd5\xaa\x8c\xcd\x56\xd2\x33"
- "\x33\x21\x77\x96\x99\x28\x76\x81\x5d\x58\x28\x40\x1f\x34\x44\x97"
- "\xd8\x5f\xd5\x8e\xb5\xbd\xaa\x55\xf4\xf4\x68\x95\xb6\x97\xb5\x8a"
- "\xee\x97\xb5\x63\x7b\xba\xb4\x4a\x63\x94\x99\x54\x99\xff\x40\x6a"
- "\x9b\x5b\xd9\xbc\x6f\x8f\x5f\x69\x5b\x8f\x5f\x51\xb5\xaa\x99\x04"
- "\xdd\xab\x03\xbb\x10\xec\xe5\x7c\x18\x2b\x00\x26\x54\xb6\x3d\x09"
- "\xa0\xef\x4a\x73\x81\xbe\x85\x0b\xee\xa6\xdf\xd9\x33\x02\x63\x34"
- "\x4f\x80\xbc\xda\xaa\x50\x43\x1a\xe0\x27\xb8\x81\x66\x4c\x01\x19"
- "\xa7\x08\x86\x4b\x63\xe2\x7c\x20\x34\x23\x00\xef\xd5\x98\x97\xe7"
- "\xbb\x39\xd6\xc4\x7e\x27\x7e\xc0\x62\xb8\x66\xf8\x56\x17\x32\x9b"
- "\x64\x42\x9d\x64\x93\x54\x28\x06\xf6\x35\x02\x79\x2c\xbd\x63\x78"
- "\x01\x64\x8e\x3e\x7f\x40\xdf\x38\xdc\xff\x0f\x7c\x3b\x27\xbf\x2e"
- "\x57\xe8\xf5\xff\x0c\x32\x53\x35\x0d\xfa\x4f\x2a\x7b\x96\x5d\x1c"
- "\x96\x7c\x89\xf8\xe0\xb3\x7d\x97\xad\x72\xbc\xd7\xc4\xc9\xa8\xd1"
- "\x62\x25\xb9\xb8\xfe\x11\x1c\x7d\x60\xdf\x65\xb3\x1c\xf1\x52\x0b"
- "\x69\xf0\xee\x03\xb9\x97\xc5\x72\xf3\xf6\x44\xa6\x6c\x24\x2c\x0e"
- "\x0a\xc6\x52\x42\x1c\xe5\x26\xc3\x18\x14\xe3\x3e\xc5\xa1\x0c\x53"
- "\x6d\x84\xff\x95\x98\x8f\xaa\x8a\xc3\x04\x28\x03\xb0\x54\x46\xfd"
- "\x8a\xb5\x82\xbe\x68\x1f\xc8\x56\x1d\x9d\xb6\x5a\x2d\xec\xda\xb3"
- "\xb0\x2b\x43\x55\x09\xf4\x30\x49\x73\x1a\xb5\x65\x36\x82\xfe\xbb"
- "\xe8\x63\x36\x72\x24\xbe\x13\x7d\xfc\xfa\x98\x7d\x8f\x45\x9a\xfd"
- "\x76\xe7\x99\xfd\x4a\x73\x05\xfd\x6e\x13\x5c\xcd\xba\x38\xa2\x3a"
- "\x2f\xf3\xcb\xee\xf5\x3f\x7b\xe9\x3a\xf1\x3f\x0b\x76\x1e\xb3\xf7"
- "\x00\x3b\x68\xbf\x09\xfa\x62\x16\xcf\x04\xed\x3a\x94\xb9\x5d\x19"
- "\x7e\x07\x24\xbb\x0c\xe5\x88\x3d\xeb\x58\x2c\x5c\x31\x90\x5e\x67"
- "\x92\x69\xac\x92\x8c\x01\xdd\xb3\x44\xd8\xfe\xa4\xba\x0b\xcf\x58"
- "\xf5\xc4\x3c\x82\x79\x81\x6e\xa9\xf0\x2d\x1f\x7b\x4f\xcc\x3c\xb8"
- "\x1e\x86\xeb\xe7\x76\x7d\xb1\xc6\xae\x2f\x0a\xb3\xeb\x4b\x75\x76"
- "\xfd\xda\xa5\x70\x45\xc0\xb5\x1c\xae\x48\xb8\xa2\xe0\x8a\xa1\xfa"
- "\xb5\xb1\xf0\x8b\xcf\xe3\xe1\x4a\x84\x2b\x09\xae\x54\xb8\xd2\xed"
- "\xbb\xf6\x2c\x11\x00\x9f\x70\x69\xe0\x0a\xb6\xeb\x77\x37\xc0\x35"
- "\xe0\x5c\x09\xcd\xec\xe1\xb1\x1b\xc6\x9c\xa1\x01\x18\xdb\x37\xa9"
- "\x13\xfd\x49\xaa\x8f\x68\x2d\xc3\xf3\x61\x2f\xf3\x4f\x77\x37\x7f"
- "\x82\xe5\x43\xff\xea\x19\x66\x79\xee\xfd\x1c\xaa\xf7\x44\xd8\x82"
- "\x57\x33\x7f\xea\xd0\xa7\x65\xb5\x91\xcd\x24\xdc\x4c\x52\xaa\x9b"
- "\xbb\x49\x4a\x14\xb5\xb3\xb1\x79\x12\x9e\x6d\xd9\x60\x41\x1c\xdb"
- "\x69\x84\xa6\x27\xbb\x68\xa1\x5d\xb5\x5b\x47\x55\xbb\xcb\x98\xcf"
- "\x4a\x90\x3f\x18\x2b\xad\x77\x5c\x8a\xb8\x82\xb1\x69\x4d\x5b\x27"
- "\x79\x35\x8a\x0a\x35\x31\x60\x9b\x34\x00\xc0\x64\xe4\x2d\xc4\x98"
- "\x34\x36\xfd\x75\x23\x4d\x05\xbc\xf8\xda\x81\x6e\x02\x8e\x49\x01"
- "\x5b\x38\x3e\x95\xf0\x05\xfa\x2c\x50\x8a\x2f\x45\xc7\xfa\xc7\xc0"
- "\x33\x05\xc6\x9f\x32\xc0\x98\xd4\x90\x40\x66\x18\xe0\x19\x8b\x15"
- "\x0a\xf5\x7e\x52\x17\x40\x85\x17\xb5\xa4\x68\x2d\x51\xfa\x5d\xe0"
- "\xf1\x67\xed\x40\xfb\xde\x18\x0c\xd9\x6b\xf3\x16\x5f\xd0\x90\x23"
- "\xda\xd3\xa0\x97\xf6\x81\xfc\x5e\x9b\xd7\x03\xb2\x1b\x68\x69\x1f"
- "\x1e\x2d\x03\x35\x57\x8b\x96\x3d\xc1\xd1\x25\x9c\x9e\x91\x04\x69"
- "\xd6\x97\x9e\x48\xe3\xcd\xcd\x40\x4f\xa0\xab\xb1\xde\x4e\xfc\x65"
- "\x64\xa5\x44\xcf\x02\xa0\x27\xd0\x54\x8d\x34\x05\x7a\x30\x9a\x52"
- "\x91\xa6\x45\x4e\x34\x05\xf9\xc4\xfc\x7b\x22\x4d\x05\xa0\x69\x91"
- "\x1b\x9a\xf6\x8e\xef\x81\xa6\xc5\x1e\xd1\xb4\x6c\x04\x34\x9d\x18"
- "\xef\x8e\xa6\x36\xd4\x99\x39\x6b\x73\x29\xc8\x3c\xa3\xad\x8a\xf9"
- "\xaa\x05\x7b\xa7\x19\xec\x36\x93\xa0\x2a\xca\x03\x9a\xa8\x70\x9f"
- "\x00\xc6\x3b\x63\x7e\xe5\xca\xe8\x15\x7b\x4e\xa9\x19\xd3\x40\x76"
- "\xc5\xdc\x87\xbe\xf9\x74\x26\x52\x24\xa7\x07\x6a\x2f\x5b\x40\xc7"
- "\x04\xbd\xd3\x8d\x36\x67\xce\x9e\xfb\x04\x1a\x43\x50\x8e\x3c\x77"
- "\x37\x51\x74\x83\xac\xd0\x25\x90\xdb\x72\x41\xde\x75\x83\xfc\x3c"
- "\x2f\x9b\xb4\x70\x81\x4e\xa0\x70\xa5\xa0\xcf\x55\xc1\x6f\xb7\x09"
- "\xe4\x35\xe3\x2f\xf2\x0c\xd7\x1f\x6b\x9e\xfb\x18\xca\xbb\xe9\xa1"
- "\x4f\x23\x6d\x24\x25\xa6\x3f\x7f\x85\x94\x08\xb0\xbb\x86\xee\x27"
- "\x18\x73\x31\xa9\x15\xf9\xba\x8f\x18\x9b\x1d\xfd\x44\x78\x99\xcb"
- "\x61\xe4\x05\xf6\x0b\xec\x23\x3b\x9c\xe4\x2f\xc8\xf6\xc0\x42\x31"
- "\x06\x89\x1d\xe4\x2f\xe4\x55\xa0\xaf\x56\x8c\x4d\x32\x60\xff\x78"
- "\x15\xfa\xc7\x66\x16\x1f\x4a\x0d\xf4\xd8\xd7\xdd\xc5\x79\x88\x3c"
- "\x33\xda\x2a\x19\xff\x72\x45\x79\xcf\xe9\xbe\xfb\x8f\x94\x46\x80"
- "\x2d\x23\x53\x0b\x39\xa5\x26\xda\x15\x33\x1e\xe7\x2a\x61\xfc\x1c"
- "\x1a\x10\x05\xb6\xc3\x77\xa0\x0f\xd6\x03\xbe\x2e\x92\x19\xc5\xeb"
- "\xc1\x1e\xe8\xc2\x38\x6f\x50\x9f\x57\x78\x7c\x5c\x21\xc3\xbf\x1a"
- "\x9e\x31\x1f\xb2\x82\xe4\x43\xb6\x43\x8b\xe3\x7e\xc7\x7c\xd1\x06"
- "\xad\xdc\xf1\xcd\xcf\xf7\xd9\x55\x32\x35\x3b\x6f\x2f\x0b\xe2\xfb"
- "\xcc\x94\x1f\x64\x22\x5d\xdb\x64\x41\x73\xf8\x1c\xf1\xa1\x6c\x5d"
- "\x32\x19\x77\x5e\x76\xd3\x39\xba\xfd\x68\xaa\x0e\x63\x7d\x4b\xcf"
- "\x52\x22\x90\x0e\x73\xee\x4d\x25\x20\xbb\x65\x73\x8d\x89\x17\xd0"
- "\x27\xe3\x30\x65\x6f\x10\x9b\xef\xb0\x67\x7e\xbe\x1f\xe8\x14\x26"
- "\x6c\xff\xfc\x03\x90\x29\xa1\xf4\x45\x68\xeb\x5a\x68\xeb\x79\xa0"
- "\xeb\x79\x68\xeb\xcb\x62\x5b\xc5\xd8\x77\x02\xd0\x1f\x9e\x0d\xac"
- "\xff\xa4\xb6\xbe\x88\xb1\x60\xde\x8f\xd8\x72\x81\xdc\x44\xef\xc0"
- "\x35\x5f\x76\x1e\xb2\xcb\x68\x3b\x4d\xf0\xbb\x4c\x3f\x67\xaf\x8d"
- "\x79\x06\xf0\x88\x34\x07\x9b\x00\xf4\x5c\x51\xb9\xc4\x07\xac\x0f"
- "\xed\x89\x19\x5f\xb4\x1e\xea\x83\xb4\xbf\x48\x42\xb0\x3f\x03\xed"
- "\x67\x14\x21\xfd\x5d\xe3\x4f\x07\x31\x1e\x8c\x05\x1e\xac\x17\x79"
- "\xa0\x17\x79\x00\xb6\x22\xe8\x6a\x9c\xe3\x50\x17\xa5\x71\x1e\x0c"
- "\x8f\x46\x37\xcf\x18\xe5\xfe\x6a\x71\xdf\x5f\xd5\x2b\xbb\xf9\x18"
- "\x52\x86\xbe\x6c\xa9\xff\x9e\x9f\x08\x3d\xd0\x6f\x73\xc4\x7e\x4b"
- "\x63\x7e\x2e\xf5\xd9\x16\xd9\xcd\x76\xcf\xfa\xec\x2d\x17\xfe\x49"
- "\xfb\x6c\xd0\xd5\xed\xb3\x93\xff\xe2\xda\x67\x27\xb7\xba\xf6\xd9"
- "\xc9\x85\x8e\x3e\x2b\x3e\x1b\x95\x3e\x3b\x79\xff\xf7\xd3\x67\x27"
- "\xef\x1f\xa0\xcf\xd6\x7b\xd0\x67\xd5\x6e\xfa\xac\xfa\xea\xf5\x59"
- "\x75\xc3\xb5\xd3\xb1\xc1\x53\xba\xe5\x03\xe8\xd8\x57\x9d\x74\xac"
- "\x1f\xea\xd8\x29\x7b\x07\xea\xaf\x3d\x06\xe8\xaf\x2a\xb1\xbf\xfe"
- "\xf6\x6f\x50\xde\xd4\x3d\x55\x8d\x43\xf7\x57\x9b\xc1\x61\x3f\xb9"
- "\xed\xb3\x31\xd8\x67\xcb\x88\xd1\xc4\xfa\xec\x4a\xa9\xcf\x1a\xc4"
- "\xf1\xce\x20\xfd\x36\xc8\x5d\xbf\xc5\x78\x60\x18\x0b\x6c\xd0\x7e"
- "\x2b\xda\x4b\x3d\xd3\xb0\xdf\x96\x5f\x67\xba\xf6\xd6\x75\xae\xfd"
- "\xf6\xd6\x12\xd7\x7e\x7b\xeb\x33\x8e\x7e\x2b\x3e\x1b\x95\x7e\x7b"
- "\x6b\xec\xf7\xd3\x6f\x6f\x8d\xfd\xe1\xe8\xda\xe0\xdc\x6b\xa7\x6b"
- "\x6f\x3b\xc1\xfa\xad\x3b\x5d\x9b\x22\xea\x5a\x3f\xd4\xb5\xd3\xd6"
- "\x78\xd6\x77\xa7\xaf\xfc\x27\xef\xbb\x57\x59\xe7\xde\x76\xb7\x6b"
- "\xdf\xbd\x6d\xb9\x6b\xdf\xbd\x6d\xa2\xa3\xef\x8a\xcf\x46\xa5\xef"
- "\xde\xa6\xfd\x7e\xfa\xee\x6d\xda\x1f\x8e\xce\xd5\x2c\x72\xd7\x77"
- "\x35\xd3\x49\x6a\x93\x4c\xb3\xc7\x68\x60\xfb\xf2\x52\x8d\xb6\x9f"
- "\x12\xb6\x97\x45\xa6\xa9\x31\xaa\xe7\x12\x61\xfb\xb1\x06\x8c\xd5"
- "\x82\x7b\x6a\x7e\xe7\xb4\x67\x85\xaf\xe9\x6a\x2e\x48\x7b\x6e\x8a"
- "\xc5\x78\x2e\x83\xed\xb9\xa1\x99\xc7\x62\xf8\x7b\xb7\xf3\x7d\xf2"
- "\x99\xc7\x62\xa5\x7b\xe6\x5f\x46\x76\x7b\x08\xcd\x3a\x16\x65\xf6"
- "\x3d\x16\xe5\x6e\x9d\xc4\x7f\x2b\xa5\xb8\xcf\xa4\x63\x7a\x42\x68"
- "\xc7\x76\x42\x72\xd9\x1a\xc4\xed\x51\xd0\x46\x1e\x0f\xd8\x7f\x6a"
- "\x60\x47\xda\x12\x02\x69\x89\x52\x1a\x8b\xc1\x9d\xe6\x43\x05\x78"
- "\x46\x73\xd6\xd8\x30\x5e\x1f\xfa\x3e\xbe\xf7\x32\x62\xf1\xf6\x4c"
- "\x90\x11\x6c\x0f\x09\x5b\xc7\x9f\x7c\xab\xa5\xa8\x9d\x28\x6a\xd3"
- "\xd9\x5e\x3a\xdc\xab\x53\x92\x83\xf8\xf7\xb9\x27\x8f\xca\x15\x44"
- "\x28\x5c\xad\xa4\x7e\xbb\x5b\xd9\xde\x62\xc0\x8a\xb4\x7f\x07\xe3"
- "\x1a\x0a\xd3\xa2\xcb\x24\xff\xbb\x14\xea\xf7\x61\x32\x9e\x3d\xf5"
- "\xa1\x45\x71\x24\x10\x2e\x15\xd5\xef\x6e\xed\xca\xb8\x23\x50\x9a"
- "\x3f\x74\xbb\x4f\x1c\xe3\x08\xdf\xaa\x56\x88\x7b\x85\xd0\x0f\x01"
- "\xdb\x73\xb8\x43\x2e\x64\xda\x21\x9d\xa6\xa5\x50\x63\xa2\x8d\x04"
- "\x00\x2d\x70\x0d\x1f\xe3\x8c\x09\x45\x09\xa1\xdb\xa6\x12\xf2\xa7"
- "\xcd\xad\x72\xdc\xcf\x61\xff\x8f\x5b\x2d\xe5\xc9\xf7\xe3\x1a\x3f"
- "\x8b\x29\xd0\x22\xbb\xd3\x2f\xfc\x1c\x8f\x19\x0c\xff\x4f\xc1\xb5"
- "\x87\xc5\x70\x8f\x6b\xe4\x42\x87\x5a\x81\x79\x5b\x64\x77\x1c\x29"
- "\x4f\x38\x45\x02\x74\x44\x99\x03\x6d\xe3\x79\xef\xd8\x89\x79\x4d"
- "\xb2\x3b\xd9\x1e\x05\xb8\x2f\xc3\xf9\x72\x78\x8f\xcd\x95\x52\xc3"
- "\x6a\x25\x93\x0f\xd9\xbb\x5b\x85\x69\xab\x95\x6c\x2f\x29\xb4\x73"
- "\x07\xb4\x19\xf2\xa8\x70\x0f\x0f\xfb\x4d\x26\x81\x3b\x21\x0d\xcb"
- "\x81\x5f\x15\xdb\x47\x2c\xbb\x23\x1d\xcb\x76\x7b\xfe\x40\xb5\xbb"
- "\x95\x02\xb6\xf9\x79\x1c\xd9\xb1\x26\xd9\x9d\x07\x02\x64\x94\x52"
- "\x43\x74\xd9\x36\x9c\xc7\xc6\x3d\xdf\xb8\x8f\x5d\x76\xe7\x1b\x50"
- "\xbe\xa2\x98\xcd\xdb\xde\xa9\x33\xc9\xee\x70\xec\x47\x60\x6b\x2d"
- "\x77\x56\xe2\x77\xf0\x1d\x31\x3f\xdb\x6b\x8a\x75\xd6\x24\xfb\x50"
- "\xb8\xff\x33\xdf\x17\xae\x5c\x0d\xef\x3b\xfc\xff\xf0\xf7\x00\x4b"
- "\x77\x56\x00\x36\x99\x6f\x14\xbc\x77\xbb\x4f\x59\xe4\x5b\x0d\x50"
- "\xaa\x1f\xef\x24\x8c\x00\x2e\x24\x8c\x60\x7d\xdf\x4d\x36\xc9\x99"
- "\x3e\x92\xcd\x60\x31\xb9\x72\x80\x87\xf6\x02\xb5\x82\xcd\x4d\xf7"
- "\x20\x5f\x9a\xe0\xd9\x4c\x5f\xe4\xcb\x0e\xd0\x05\x62\xde\x10\x47"
- "\xfd\xf1\x7e\x26\xe3\xa7\x00\xbc\xe0\xfb\xa0\x66\x9c\x66\x31\x9d"
- "\x40\x66\xe0\xfe\xf5\x8a\x44\xa8\x17\xe2\x16\x30\xf2\xa7\x38\xab"
- "\xbc\x28\x81\xa7\x7f\xd8\x6e\x95\xef\x38\x4f\x50\xb6\x10\xfd\x5a"
- "\xa2\x00\x3d\xa4\xc0\x32\x69\x70\x74\xd9\x7d\x12\x1f\x37\x03\xef"
- "\x12\x00\xbb\x40\xf3\x1d\x40\xbf\xa2\x6e\xb6\x56\x53\x56\x24\x10"
- "\x95\x00\xf9\x4c\xb2\x99\x6a\x28\x2f\xb0\xf0\x16\x6a\xc6\x7d\xd6"
- "\x40\xc3\xcd\x5d\x19\x33\x2c\x12\x0d\xb1\x4e\xb8\x4f\x5a\x8f\x7b"
- "\xff\x65\x33\x74\x1c\x43\x33\xc2\xa4\x36\xbb\xa3\xa7\xfe\x4f\x24"
- "\x58\x7f\x2f\x99\x2b\x28\x7b\xd4\xd4\xe7\xd6\x12\x9c\x6f\x7e\xb2"
- "\x0d\xfd\x58\xb5\x92\xf0\xd7\xce\x50\xa3\xd9\x4e\x04\xdf\x1e\x35"
- "\xae\x43\xd8\xb7\xdd\x33\x29\xfc\x15\xa0\x17\xe8\xfb\x14\x2b\x09"
- "\x34\x26\x9b\x79\xec\x41\x72\x89\xd8\x37\x81\x0c\x07\xb9\x0e\x3a"
- "\x55\x91\x72\x89\x4c\x41\x7a\x09\x7e\x45\x0b\x81\x66\x47\x9f\x89"
- "\x27\xa9\xc3\x93\xa3\x33\xd9\xf9\x67\xb4\x2f\x40\xe6\xcb\x71\xaf"
- "\x9e\xd1\x0c\xf6\x89\xbe\x68\xe1\x30\xcb\x71\x7b\xfe\x19\xdb\x2d"
- "\xe0\x3c\xb4\xd8\xe6\x70\x6c\xb3\xc5\x4a\x70\x2e\xff\xc9\x8d\xe8"
- "\x3f\xb9\x93\x08\x59\x3d\x6a\x6c\x33\xd8\x3a\x95\xc3\x9f\xd3\xff"
- "\x51\xc4\x60\xdf\xa6\x40\x6f\x61\xdb\xad\x25\x82\x6a\x77\x25\x7e"
- "\x1b\xeb\x80\x67\x7f\x9e\xec\x24\x8c\xee\x48\x7f\xa3\xd5\x4e\xa8"
- "\xaf\x73\x1d\x6c\xc3\xad\x83\xfb\xf6\xdf\x4b\x82\xb3\xff\xc4\xf9"
- "\x6e\xdf\x26\xd2\x20\x06\xd7\xc1\x76\x57\x62\xcc\x8d\x27\xb1\x0e"
- "\xe6\x0b\x64\x31\x68\x1e\xe4\xbf\x51\xdb\x46\xec\x3e\xf7\x4c\xc2"
- "\x3d\x07\xc8\xff\x64\x1b\xf0\xff\xb2\x15\x7d\x26\x99\x8d\xa9\x57"
- "\x08\xda\x2f\xb6\x0e\xad\xbc\x3f\xff\xef\x3a\xfa\x4c\xe2\x70\xf9"
- "\x7f\xd7\x28\xf1\xff\xae\xeb\xa0\xfd\x5a\x2f\xda\xaf\x1d\xa5\xf6"
- "\x6b\xaf\x83\xf6\xdf\xed\x45\xfb\xef\x1e\xa5\xf6\xdf\xed\xb6\xfd"
- "\x8f\x4f\x11\x28\xdb\x8b\xe2\x9f\xcf\xe2\xd0\x70\x7d\x75\xcf\x21"
- "\xdc\x77\xc2\xce\x7a\x89\xf7\x84\x9f\xfd\x52\xf6\xb9\x57\xf5\xb9"
- "\x0f\xec\x73\x1f\xd4\xe7\x5e\xdd\xe7\x3e\x58\xba\x07\x3d\x32\xe6"
- "\xa2\xec\x9e\xd9\x60\x97\xa6\x9a\x64\xf7\x54\x8b\xcf\x67\xa0\x4f"
- "\x31\xd0\xe9\x33\x06\x89\x7f\x79\xeb\x79\xd9\x8f\xd9\x19\x14\xba"
- "\x6d\xaa\x96\x6e\x4e\x25\x42\xf6\xda\xf8\x27\xb7\x80\xec\x02\xfe"
- "\xd1\x1e\xf5\x58\xb0\x11\x26\xa3\xdf\x3a\xdc\x77\xa0\x89\xc3\xfd"
- "\x24\x3f\x9e\x89\xed\xbb\x57\x57\x4e\x04\x9f\x7b\x98\x2d\x28\xe8"
- "\xd7\xc6\x9b\x7d\xee\x99\x4a\x77\xed\x59\x92\x23\x17\x94\x39\x69"
- "\x82\x66\x8b\x99\x9a\x17\x5d\x02\x39\xd4\x89\xbe\xe4\x81\xc7\xf1"
- "\xd4\x5c\x1e\x77\x01\xea\xfb\x63\x7d\x4d\x12\x94\x0d\xdf\x81\x6f"
- "\xc1\x38\x6e\xed\x52\x1e\xb7\x7d\x6d\x7c\xad\xa5\x92\x60\x8c\x21"
- "\xb1\x4c\x1d\xf5\x5b\xbb\x14\xcb\x1c\xd0\x3e\xcd\xce\x6f\x86\x6f"
- "\xfe\xf4\x19\xad\x82\xd0\xad\x8a\xa0\xe1\xf1\xf4\xc7\xfb\xdc\xda"
- "\xbd\xd9\x05\x51\xbc\x5c\xa5\x17\xe5\x86\xb8\x8d\x95\x0e\xe5\x8a"
- "\xf5\x0d\xf4\xa6\xdc\x48\xf7\xe5\x1a\xc4\xfa\x6a\xbc\x29\xf7\xc0"
- "\x20\xe5\x8a\xf5\x0d\xf3\xa2\xdc\x59\x81\xee\xcb\x2d\x14\xeb\x9b"
- "\xea\x4d\xb9\x31\xee\xcb\xcd\x6f\xf6\x0e\x0b\xb3\x3e\x18\x0c\x0b"
- "\xde\xe1\xe0\xde\x41\xda\x5f\xd0\xec\x1d\x06\xee\x8d\x1a\x0c\x03"
- "\xde\xf1\xff\xde\x41\xf9\xef\x1d\xef\xef\x53\x0d\xc6\x7b\xef\xf8"
- "\x7e\x9f\x5b\xfc\xa3\x2d\x0f\xbc\x2f\xa1\xfe\x7b\xc2\x84\x9c\xb5"
- "\x25\x82\x7f\xfe\x7f\x6e\x13\xc2\xc8\xe3\x20\xc3\x02\xf2\xc8\xc4"
- "\x30\x36\x3e\xbe\xcf\xb2\xc5\x40\xe4\x30\xde\x95\xbf\xb3\xb9\x41"
- "\x6e\xb4\xcd\x45\x9d\x63\x2f\x4d\xb0\xca\xee\x84\xf4\x43\x80\x2a"
- "\x0b\xd8\x9d\xbc\x9c\xb5\x25\x39\xc9\x61\x44\xf4\xa3\x61\xc1\xb3"
- "\xcb\xe1\x20\xc7\x8c\x79\x56\xdc\xb7\x32\x11\xde\xb3\x01\x7e\xa1"
- "\x0c\x2b\x79\x57\x30\xcb\xc2\xe2\x58\x3e\x33\x3b\xb3\x97\x93\xff"
- "\x9f\x34\x45\x8b\xfe\x14\xcd\x2d\xb2\xd0\x67\x7d\xcc\x44\x8e\x7e"
- "\x8f\xba\x32\x42\x23\x4c\xb2\xd9\x0b\xc5\x33\xaa\x6d\xcc\xef\x27"
- "\xd4\x17\xcf\x7f\x62\x5e\xf4\xff\x79\xaf\x8e\xc8\xd1\x27\x3b\xe4"
- "\x4d\x47\x5f\xa0\x83\x9d\xf5\xb6\x67\xef\x4e\xc7\xf7\x69\x36\xe8"
- "\xd0\x0b\x44\x8e\xe7\x3b\x69\xf0\x6a\x92\x03\x63\x88\x05\x77\xe3"
- "\x9c\x47\x3b\x49\xde\x42\x05\x9c\x7f\xa2\xaa\xa2\xb9\xb8\x37\x8e"
- "\xef\x1b\x9f\xad\x29\xe2\xfb\xc8\xad\x2c\xfe\x30\xdc\xb3\x71\x0c"
- "\xee\x8d\x51\xad\xd5\xd2\x1c\xbf\xb0\x5a\x4b\x3b\x8f\x87\x29\x9b"
- "\x7d\x3b\xfa\x64\xec\x50\xed\x4e\xb5\xa8\x76\x67\x76\x65\xcc\x0e"
- "\x96\xda\x80\xdf\x97\xd2\x71\xdc\x86\xf9\xe0\xf9\x3c\xe9\xec\xb7"
- "\x9b\x78\xdc\x93\xc2\xd5\xd4\xdc\xeb\x6b\x43\x76\xff\x5b\x48\x7b"
- "\xb0\x15\x12\x2d\x29\xda\xe9\x7c\x1e\x63\x76\x25\x8e\x87\xa1\xde"
- "\x51\x7c\x6c\xba\x36\x8a\xf9\xe5\x05\x1d\xf0\x8c\x56\x3e\x4c\xbb"
- "\x75\x36\xd3\xff\xe5\xd3\x51\x47\xde\x9f\x05\xe5\xff\x0c\xda\xd4"
- "\xc6\xc7\x62\x6b\x13\xd9\x99\x47\xd9\xec\x4c\xf8\x46\x22\xdc\x6b"
- "\x30\x5f\x93\xec\x7e\x95\xf8\x3c\xd5\xe9\x79\x2a\xee\x95\x14\x9f"
- "\x8b\x63\xb9\xb5\xe9\x4e\xcf\xd3\x75\xd3\x71\x6e\xe2\xfe\xa5\xd8"
- "\x06\xa0\x63\x24\xea\xb6\x5e\xdf\x21\x7e\x6b\x23\xc5\x7c\xf1\x6d"
- "\xb2\xfb\xd7\x75\x00\xb6\xe0\x79\x92\xd3\xfb\x49\x87\x13\x43\xc9"
- "\xe3\x85\x48\xc3\xfb\x53\x4d\xf2\xe2\x85\x7c\x3c\x3b\x3b\x9b\xb5"
- "\x5d\xb5\x36\xc2\xb9\x3c\x93\xec\xfe\x45\x50\x66\x84\x05\xec\x28"
- "\xc8\x13\x8f\xdf\x74\xa6\xb7\x74\xf2\x52\x13\xb5\x6e\xa5\x66\xd5"
- "\x86\x97\xd6\xe3\xc9\xb9\xf1\x2e\x7b\x1c\x03\xf1\x6c\xa9\x90\x5d"
- "\x1c\x63\xcc\xc3\xb3\x6e\x81\xec\x8c\xf8\x4e\xdc\x37\xe5\x5f\x5a"
- "\x62\xcf\x29\x0d\x15\xfc\x8b\x96\x94\x6f\x7e\x8c\x5c\x94\xfd\x84"
- "\xf9\x2b\x35\x02\x4a\xb2\xdf\x44\xdf\x1e\x55\x98\xc6\xfc\x19\x61"
- "\xac\x29\x36\x66\xdf\xac\x24\x15\x9a\x76\x36\xee\x87\x67\xcf\xb2"
- "\x39\x8e\x4e\x22\xb7\xa5\x29\xc9\xff\x49\xae\x93\x7f\x20\x98\xe4"
- "\xff\x47\x68\x60\xfb\x74\x0f\xab\x2b\xc9\x7d\x89\x4a\x8c\xab\x28"
- "\xff\x08\xc6\xd2\xf8\x1c\x9f\x49\x67\x11\xe0\xfd\x77\xd8\x9e\xdd"
- "\x3b\xf8\xff\x29\x79\xf4\xeb\xc3\x6a\xd1\x8f\x85\xec\x27\x32\xac"
- "\x2b\xfa\xf8\x68\x93\xfd\x64\x0c\xd6\xcf\x24\xfb\x89\xc2\xc7\x80"
- "\x7b\x7c\x89\x0a\xf2\x5f\x12\xf4\xc5\x31\x28\x0f\x6c\x19\xf7\x1f"
- "\xa0\x69\xaa\x3f\xe0\xb9\x3b\x83\x78\x16\xaf\x2b\xe3\x27\x8d\x4e"
- "\x67\x4c\x55\x1d\x72\xf2\x08\xa4\x99\xa5\xb3\x0d\x18\xfb\xcc\x9d"
- "\x7c\xb1\x82\x8d\x77\x25\x38\x3a\x53\x50\x15\x03\x2f\x8a\x63\x2a"
- "\xe7\x13\x9c\x77\x91\xe1\x9e\xd9\x36\xd9\x03\xad\xd4\xaf\x38\x22"
- "\x19\xfb\x74\x4e\xd1\x92\x3f\xe0\xbe\x3f\xa0\xe3\x5e\xdc\xe7\x07"
- "\xb4\x7c\x1b\xee\xab\x16\x96\x11\xcd\xd3\x68\x3b\xcd\x59\xf9\xeb"
- "\x28\x6a\xbb\x67\x49\x39\xa9\x6e\x7e\x8f\x7c\x5a\x5f\x49\x54\xcb"
- "\x89\x4f\x8a\x89\xda\x59\x1b\xe3\x89\x3c\xdc\x44\x7c\x92\x3b\xb1"
- "\x4f\xdb\x09\x9e\x1f\xa8\xb5\xd6\x80\x3d\xb4\xc1\xf2\x4e\x72\xeb"
- "\x18\xcd\x93\x84\x40\xdf\x63\x6b\xcc\xec\x9c\x8f\x99\x9d\x9b\xf6"
- "\xc3\xf9\x6e\xa7\xf3\x3d\xea\xa4\x48\x2a\x6c\xb9\x40\x94\x35\x31"
- "\xa7\x49\x78\xa4\x0f\x65\xe7\x7b\x12\x21\xa3\x19\x78\xff\xb2\xd6"
- "\xdf\xfe\xb2\x76\xd2\xae\xcb\x24\xa8\x36\xde\x04\xb6\x59\x25\x29"
- "\x88\x23\x41\xb4\x2b\xc6\xb7\xba\xb2\x8a\xd0\xed\xf6\xc0\x77\x93"
- "\xcb\xc7\xd8\x95\x7c\x7f\x55\xc0\x56\x19\xce\x6f\xfa\x67\xe3\x3e"
- "\xab\xcb\x24\x74\xc5\xd9\x54\x36\x27\x8b\xf3\xdf\xb6\x2e\xad\xa6"
- "\xa7\x4b\x7b\x47\xf7\xcb\xda\xe9\xd2\xbc\xf9\xb3\x17\x02\x71\x9d"
- "\x20\x82\x66\xfc\xa8\x04\xf7\xf6\xe1\x38\xc0\xe6\x27\x53\xe3\x1c"
- "\x39\x62\x18\xbe\x1f\x2c\xac\xd2\x92\xfb\xcc\xec\xec\x11\xce\xdb"
- "\x07\x16\x3d\x8f\x75\x6d\x27\x6c\xaf\x90\x2f\xdf\x2b\x64\xc5\x35"
- "\x6b\xd5\xee\x86\xc5\x6b\x34\xa4\x7b\x5a\x74\xa6\x31\xf1\x0f\x24"
- "\xe5\x0a\xfd\x9a\xd9\xf1\x89\x80\xdb\x8c\x39\x38\xb7\xd7\x70\x44"
- "\x7b\x02\xf5\xc9\x9c\xe1\xcb\x87\x07\xd8\xfa\x2f\xd2\x06\xf8\x54"
- "\xb2\xb7\x1d\xf9\x56\xb4\xe4\x8f\x71\x66\xf9\x13\xcd\xd4\x56\x13"
- "\xf5\x07\xf2\x69\x43\x9d\x0b\x7f\x18\x3f\x21\x1f\xf2\x09\x79\x84"
- "\xbc\x72\xf0\xe9\x04\xe3\xd3\x5e\x81\xf3\xa9\x5b\x95\x5f\x22\xf1"
- "\xca\x6a\x88\xce\xf3\x84\x5f\xd5\xcd\x03\xf3\x0b\xe8\xdc\xcb\xaf"
- "\xfc\x76\x12\x64\x6c\x03\x7b\x19\xf8\xf5\xc4\x53\x84\x3c\xf1\x36"
- "\x15\x6a\x16\x1e\xef\xe5\x9b\x2d\xd3\x0d\xdf\xce\x39\xf8\x06\xfc"
- "\x1f\x84\x6f\x77\xcd\x18\x0e\xdf\xaa\x9b\x39\xdf\x6c\xe2\x1e\x2f"
- "\x6d\x05\x91\x5b\x5f\xd6\xca\xf3\x2e\x93\xb9\xc8\xbf\x45\x67\x35"
- "\xe4\xc8\xd2\x1a\xe0\xd9\x7b\x2e\xfc\x13\xf4\xbb\x13\x81\x07\xfb"
- "\x90\x87\xde\xf5\xbb\x87\x22\x3d\xef\x77\xff\x72\xf2\x46\xbf\x1b"
- "\xad\x7e\xf7\x2f\xa9\x23\xeb\x77\x0f\x85\xdc\xe8\x77\xdf\x77\xbf"
- "\x7b\x48\xdb\xb7\xdf\xf5\xda\x0d\x71\xd1\xeb\x56\xae\x59\x8f\xc7"
- "\x13\x9f\x7f\x25\x3e\x7a\x13\xb7\x1e\x5c\xec\x07\xb5\x3d\x39\x4c"
- "\x8e\x3e\xe7\xaa\xf3\xea\xc8\xbb\x53\xeb\xe4\xf6\x6f\xd5\x0a\x9a"
- "\x3d\x39\x52\xc8\x9e\xd2\x8a\xbe\x43\xb1\x7f\xee\x44\xbf\x1e\xb2"
- "\x47\xea\x6b\x83\x79\x9c\x4e\xfc\x9f\xd9\x4e\xc1\xab\xd5\xb8\x5e"
- "\xb3\x6d\x33\x51\x6c\xc3\x33\xda\x56\x9c\x17\x61\xcf\x1f\x46\x5f"
- "\x8a\xb4\x70\xb5\x1a\xfd\xf2\x58\x54\x6b\x35\xe9\x50\x96\xd9\xaf"
- "\x38\x46\xa1\xc1\x33\x17\x3f\x33\x80\xed\x53\xd7\xeb\x67\x49\xf6"
- "\x08\xa1\x63\x7f\x6a\x46\xb9\x80\x67\xe4\x2e\xca\x7e\x76\xec\x0a"
- "\xae\x75\x80\x3d\xfd\xcc\xdd\xf0\x9d\x69\xd1\x79\xcc\xef\x02\xc8"
- "\x08\xfe\xfc\x61\x3d\x7e\xff\x4a\x76\x11\xc6\xba\xb1\x74\xa8\x4a"
- "\x4b\x3a\xb2\x4b\x43\xab\x92\xf2\x44\x19\xf1\x33\xfb\x13\x79\x5c"
- "\x46\xd4\xa8\x01\x83\x8b\x00\x83\x11\x43\xc9\x08\x27\xec\x4d\x1f"
- "\x9e\x8c\x40\xac\x21\xe6\x10\x6f\x13\x00\x6f\x88\x41\x09\x73\xbf"
- "\x13\x31\x17\xd0\x48\x02\x19\xee\x6c\x1c\x77\x78\xee\xb9\x26\xd1"
- "\x81\x39\x7b\x5f\xcc\x5d\xee\x83\x39\xb9\x88\xb9\x97\x5d\x31\xb7"
- "\xec\x74\x20\x29\xe0\xb2\xc2\x81\x39\xbd\x4c\x2d\xe1\x0d\xb1\x87"
- "\x38\x13\x5e\xd0\x92\x9a\xb6\xf6\x5e\xec\x15\xad\xe6\xeb\xad\x6c"
- "\x3f\xaf\x9c\xee\xbb\xf2\xb2\x28\x2b\x2e\x48\xb2\x22\xdf\x8d\x8e"
- "\x3e\xed\xa5\xac\x78\x98\xcd\x7f\x23\xaf\xba\x81\x6f\xc8\xaf\x27"
- "\xd4\x20\x23\xd4\xff\x49\x3e\x5d\x7a\x9d\xf0\x27\x6e\x74\xf8\x83"
- "\xbe\x70\xa1\x2e\x03\xf0\x68\x66\xc8\x50\x3c\x42\xfe\x20\x9f\x18"
- "\x7f\x80\x4f\xd2\x9a\x38\xae\x91\x22\xaf\x90\x3f\xf7\x26\x11\x39"
- "\xf2\xab\x28\x81\xcb\x07\x94\x03\x6c\x0f\x76\x1f\xf9\x0e\x34\x5f"
- "\x8a\x3c\x63\xe3\xea\x34\xbf\x17\x76\xe2\x19\xe2\x49\x92\x0d\xfd"
- "\x88\xa6\xbf\x0d\xfd\xc8\x9c\x5e\xbf\x98\xb2\x9f\x95\xf1\xf1\x51"
- "\xb1\x78\x8e\x38\xec\x35\xb1\xcf\x13\x1c\xab\xb2\x71\xa9\x1d\xc6"
- "\xa5\x2a\x18\x97\x66\xc3\xb8\x34\xb1\x95\xfb\x4f\x90\x3d\xb2\x95"
- "\x88\xe7\x99\xa9\x5f\xd1\x5c\x18\x13\x69\x91\x96\x6c\x8d\xd7\x6f"
- "\x77\x2a\xae\x49\x51\x3d\x8c\x79\xff\x53\x4e\xe0\x3e\xf3\x88\xd6"
- "\x3e\x4c\x1c\x3d\x22\xee\x4d\x3a\x16\xa5\xdb\x8c\xfb\x1b\xc2\x74"
- "\xbc\x7e\x3f\xfb\x0d\xa6\xb3\xf5\x3f\xb9\x50\x62\xdf\xe6\xba\xfe"
- "\xe7\xbc\x3e\xfc\x6e\xb2\x59\x5c\xfb\x0b\x63\x6b\x7f\x28\x43\x50"
- "\xee\xbd\x03\x63\x18\xc7\xfa\xdf\x71\x7c\xfe\x1b\xd7\xf5\xbf\x30"
- "\xa6\xef\x4c\xb2\xb0\x74\xdc\xf3\x02\xf7\xe2\x7a\xda\xcf\x22\x9c"
- "\xd3\x1d\xeb\xeb\x3c\x5d\x90\xb3\xb8\x2b\x38\x3f\xd0\xc6\xe7\x05"
- "\xc2\x0c\xd2\xf8\xdb\x8d\xbd\x34\x0c\xb9\xbc\x20\xd5\x21\x97\x17"
- "\xb0\x3d\x00\x54\xbd\x67\x61\x4d\x3f\xb9\x7c\x0a\x9e\xcf\x3f\xf7"
- "\x24\xca\xe5\xec\xa2\x30\x5e\xbf\x47\xef\x06\x9a\xf8\x60\xfc\x4c"
- "\x4c\xc7\xf3\x46\x28\xa3\x0b\x99\xcc\xde\x33\x37\x9d\xad\xf1\x3f"
- "\xba\xd0\x55\x56\xcf\xdf\xeb\x2a\xab\x1f\xdd\x32\xb8\xac\x7e\xfc"
- "\xa1\xc1\x65\xf5\xa3\x6f\xdf\x90\xd5\xa3\x2d\xab\x25\xbb\xce\x5b"
- "\x59\xfd\xb8\xe2\x86\xac\xbe\xd6\xb2\xfa\x71\xe2\x24\xab\x97\xba"
- "\xca\xea\xf9\xd5\xfd\x65\xf5\x7c\x93\x43\x56\x3f\xba\xd4\x55\x56"
- "\xff\x62\xb6\x67\xb2\x7a\xc1\xac\xab\x2b\xab\x17\x2c\x72\x95\xd5"
- "\xbf\x08\x16\x75\xc9\xa5\xe1\xcb\xea\x05\xf6\xc1\x65\xf5\x2f\xc6"
- "\xb8\xca\xea\x05\x0d\x5c\x26\xff\x22\x94\xcb\xea\x05\x6d\xa2\x0c"
- "\x37\x3b\xa7\x3b\x64\x35\x4f\xef\x2f\xab\x7f\xb1\x70\x08\x59\xad"
- "\xb5\x0b\x92\xac\x6e\x00\x59\xdd\x20\x17\x5e\x70\x27\xab\x7f\x9d"
- "\x5e\x83\xb2\x3a\x0e\x65\xf5\xaf\xd3\x07\x97\xd5\x4f\x5c\x40\x99"
- "\xcc\xfc\x7a\xbe\x49\x9b\x99\x5f\xc5\x37\x69\x2b\xe2\xf4\xc9\x24"
- "\x48\x87\x34\xf4\x3f\x89\xf9\x38\xef\x25\x99\xfe\x0b\x7b\xaf\x4c"
- "\x87\x7c\xc2\x14\x87\x4c\x47\x79\x8e\x72\xbd\xf0\x4d\x6a\x2a\x7a"
- "\x93\x36\x76\x65\xfc\x72\x86\x24\xdb\xf5\x90\x86\x71\x92\xd0\xf7"
- "\x11\xee\x8f\x04\x1a\x34\x6f\x83\xef\x61\x7e\xc8\xb7\xc8\x55\x07"
- "\x3c\xb1\xcf\x55\x07\xfc\x72\xeb\xe0\x3a\xe0\x57\x0f\x0f\xae\x03"
- "\x7e\xf9\xce\x0d\x1d\x70\xbd\xe9\x80\x5f\x29\x6f\xe8\x80\xa1\x75"
- "\xc0\x40\x3c\xea\xab\x03\x66\x89\x3a\xa0\x70\x48\x1d\xf0\x2b\x85"
- "\x7b\x1d\xf0\x44\x5d\x7f\x1d\xf0\x44\xb3\x43\x07\xfc\x32\xc2\x55"
- "\x07\x2c\x7a\xc0\x33\x1d\xf0\xeb\xd9\x57\x57\x07\xfc\x7a\x89\xab"
- "\x0e\x58\xa4\x11\xe5\x54\xa1\xb3\x0e\x10\x7c\x3c\xd1\x01\x8b\x64"
- "\x92\x0e\x40\x19\xfb\x0e\xae\x37\xf4\xea\x00\x94\x85\x8b\x7c\xcb"
- "\x13\x9a\x9c\x74\xc0\xaf\x1b\xb9\xac\x5f\x34\xc7\xce\x74\xc0\xaf"
- "\xcd\x3c\xfd\x17\x06\xe7\x74\x87\x0e\xe0\xe9\x76\x67\x1d\xd0\x8a"
- "\x3a\x60\xd1\xa2\x21\x74\x40\xa8\xe7\x3a\xe0\xa9\x46\x87\x0e\x78"
- "\xaa\x51\xd2\x01\x28\xf7\x51\x07\xa0\xcc\x46\x3d\xc0\x7c\x83\xb1"
- "\x3d\x21\x4f\x2d\x08\x30\x13\x25\xfa\x24\xc6\x39\x15\x94\xdd\xe8"
- "\xff\x08\x75\x01\xcb\xb3\x9e\xe7\x01\x79\xde\x0c\x32\xbc\x15\x64"
- "\x78\xab\xfe\x22\x51\x40\xbe\x86\x1c\xdc\x5f\x08\xf7\x28\xeb\x03"
- "\xda\x40\x6f\xd8\x98\xde\x68\x40\x7d\xc3\xe9\xf5\xd4\x02\x57\xdd"
- "\xb1\xf8\xa1\x81\xc6\x03\xb9\x4e\xba\xa3\xe8\x16\x5a\xdf\x95\xb1"
- "\x78\xb9\xa4\x0f\x72\xe0\x1e\x75\x46\x6e\x3b\xd3\x19\x26\xd0\x19"
- "\xcd\x5c\x67\x2c\x4e\xed\xcd\x03\x75\x60\x79\xb8\x5e\x69\x80\x3c"
- "\x8d\x62\x9e\x52\x57\xbd\xf2\x94\xd2\x55\xaf\x2c\x3e\x89\x7a\x05"
- "\xfd\xe4\xb2\xf8\xf2\xfa\xe2\x08\x7b\x61\x74\x1e\xea\x18\xfe\x3c"
- "\xfc\xf7\xbd\x7a\xe5\x16\x27\xbd\x92\x28\xe9\x95\x27\xc7\x5c\xf7"
- "\x7a\x05\xb0\x5c\x93\xf4\xcf\xa4\x57\xc2\x23\xaf\x07\xbd\x82\xbc"
- "\x99\xe0\x34\x37\xec\x4e\xaf\xa0\x5f\x89\x9a\xd8\x1f\xba\x5e\x09"
- "\x5f\xee\x5e\xaf\x3c\xa5\xed\xaf\x57\x9e\x9a\xe7\xd0\x2b\x8b\xf7"
- "\xb9\xea\x95\xa7\xf5\x9e\xe9\x95\xa7\xb2\xfa\xea\x15\xa4\x65\x0e"
- "\xdf\x5f\xd1\x86\xfa\xc4\xae\xdf\x9d\x2a\xa0\x6e\xf1\x4a\xaf\x3c"
- "\x55\xe6\xaa\x57\x9e\x4e\x14\xf5\xde\x5b\xc3\xd7\x2b\x4f\xb3\xb9"
- "\xa3\x1c\x49\xaf\x5c\xee\xab\x57\x9e\x5e\xe9\xaa\x57\x9e\x9e\xc3"
- "\xf5\xc7\xd3\xd9\x5c\xaf\x3c\xbd\x50\xd4\x4f\x25\xce\xe9\x0e\xbd"
- "\xc2\xd3\xfb\xeb\x95\xa7\x4b\x87\xd0\x2b\xaa\x1e\x43\x74\x5e\x77"
- "\x76\x69\xaa\xad\x34\x21\x34\x64\xf9\x6d\xf6\xbe\x7d\x83\xf7\x09"
- "\x3b\xc1\x3e\xd2\xbb\xc6\xf5\xbf\x08\xe9\x51\xe5\xe3\x5e\x62\xd6"
- "\x37\xba\x83\xa3\x33\x5b\x62\xa1\x7f\xb4\xb9\xef\x1f\xd0\x37\x94"
- "\x52\xdf\xa8\x89\x39\x4b\xa0\xbf\xc8\x71\x8d\x2b\x1f\xfa\x85\xd1"
- "\xd2\xc0\xe4\x98\xaa\x59\x43\xd0\x9f\xa4\x5f\x1b\x09\xf4\x93\xc9"
- "\xc6\xfe\x1a\xa8\x66\x87\x3e\xb2\xe0\x6e\x2a\xdc\xd3\xa8\x21\x7e"
- "\x31\xc4\x1f\xfb\xc9\x9f\xc4\x35\x14\xf4\x3f\x81\x6b\x27\x80\xcf"
- "\xd0\x15\xc7\x78\xff\xc8\x87\xab\x9b\xf7\x8f\xe9\xdd\x5d\xda\x3b"
- "\xdc\xad\x9d\x18\x13\x4d\x6c\xed\x04\xcf\x07\xe1\xb9\x2c\x01\xfa"
- "\x07\xc5\xb5\x13\x2b\xef\x13\x50\xdf\xc0\x62\xb6\x76\xd2\xe4\xb2"
- "\x76\xf2\xe3\x46\x22\x47\xdf\x14\x05\xce\x6b\x27\xda\x9a\x7e\x7d"
- "\x02\xfb\x0a\xf6\x89\xe1\xcb\xaf\xa5\x9a\xc1\xf6\x2f\xd9\x80\xd6"
- "\x76\x55\x69\x2a\xcd\xdf\xa3\xfb\x63\x93\x55\x86\x7e\x3c\xed\xc0"
- "\x3b\x01\xe4\x14\x55\xf5\x91\x53\x3d\x22\x1f\x7a\x38\x1f\x80\x87"
- "\xca\xe7\x2c\x84\xae\xb0\x81\xad\xd5\x23\xfa\xf2\xb4\x9a\x00\x87"
- "\xda\x49\x85\x9b\x91\xee\x6a\x52\x28\xfa\xf3\x14\x5e\x8d\xf1\x15"
- "\x80\xd6\x34\x4d\x4e\xde\xb9\x6c\x65\x6b\x8d\xd9\xdd\x24\x04\xe4"
- "\x92\x1f\xca\x25\xc0\xee\xf8\xe2\x6e\xa0\xfb\xd7\x9c\xee\xe8\x63"
- "\x0d\x7f\x6d\xaf\x6a\x35\x50\xf6\x1d\x3d\x3d\x20\x97\xac\x9c\xf6"
- "\xcf\x6d\x0c\x24\xcc\x07\x28\xae\x37\x82\xae\xaf\x05\x7e\xa3\x5c"
- "\x7a\xd2\x12\x40\x31\x56\x87\xf0\xad\x16\xfd\x4d\x05\xdf\x67\x01"
- "\xda\xf7\x68\x11\x1b\x81\x45\x2d\xb8\xde\x78\xca\x65\xbd\xd1\xfc"
- "\xaa\x63\xbd\xb1\xb6\xec\x04\xdf\x1f\xe2\xa2\x3b\x9e\x3e\xd0\x53"
- "\x18\x9d\x89\x74\x67\xba\x23\x7e\xb8\xb4\x7f\xc6\xf0\xfd\xd1\x3e"
- "\xf0\x07\x4e\xfb\xa5\x31\x23\xa3\xfd\xbf\xf5\xf3\x95\x7a\xed\x68"
- "\xaf\xfc\x81\xd3\xfe\x99\xe6\x91\xd1\x3e\xc2\x6d\xfc\x3f\xa4\x3d"
- "\x8e\x3d\xa4\x71\x87\x34\xe6\x40\x3d\xc6\xf5\xf0\x32\xad\x63\xbc"
- "\xb1\x4c\x2b\xad\xdb\x02\xcd\x14\x7a\x71\xbe\x49\xb7\x9a\xdc\x76"
- "\x5e\xf6\xdb\x42\x69\xcd\x16\xed\x7d\xc6\xc7\x7c\xe0\xe3\x7a\x3c"
- "\xdf\x23\xf2\x10\x74\xce\x0a\x0b\xe8\x85\x69\xd1\x79\x76\x3d\xe8"
- "\xa4\x3d\x09\xa1\x6e\xf8\x29\x47\x7d\xe2\x17\x4f\x02\x9f\xd3\x39"
- "\xf8\x2a\xbc\x0a\xfc\xec\x06\x3b\xcb\xda\x4a\xf0\xcc\x6e\x40\x2b"
- "\xd8\x5f\x3d\x31\xbe\xcb\xc1\x9e\x97\x78\xfa\xa7\x04\x2b\xb3\xb1"
- "\x06\xe4\xe9\x2e\x57\x9e\x76\x0c\xc0\xd3\x67\xd7\x40\x3f\x95\x8b"
- "\x76\x30\xe3\xa9\xa9\x97\xa7\x4c\x8f\xbc\xaa\x0d\x46\xbe\x4a\x3c"
- "\x45\x3d\xc2\x78\xda\xc6\xf5\x48\xaf\x7f\xa3\x57\x1d\x76\x70\x75"
- "\xe4\xe9\x01\x78\xfa\x6f\x91\x2e\x3c\x8d\x1c\x2e\x4f\x7f\x1b\xe3"
- "\x6a\x57\x2d\x3b\xe1\x99\x5d\xf5\xdb\xb3\x68\x3b\x39\xdb\x55\x78"
- "\xdf\x01\x63\x75\xbb\xdf\xee\x74\x8b\x57\xb6\xd4\x6f\x2d\xae\xb6"
- "\xd4\xb2\x72\x5e\xa7\xdf\x4c\x1c\xbe\x2d\xb5\x8c\xd9\x5f\xef\xe4"
- "\xf3\x31\xb0\xab\x1d\xb5\xec\x6d\x57\x3b\x6a\x59\x12\xb7\x97\x96"
- "\xd5\x77\xa4\xa1\x1d\xb5\x2c\x97\xa7\xff\x26\xd0\x39\xdd\x61\x47"
- "\xf1\xf4\x0e\xf4\xf9\x96\xb1\xcc\x34\x3c\xdb\x69\xf2\xf7\x6c\x3b"
- "\xa9\x07\xb1\x9d\xd4\xff\x24\xb6\xd3\xb3\xcb\x6f\xe8\x6f\x6f\x75"
- "\xc8\x32\xcb\xc8\x74\xc8\x73\x6e\xfd\xbf\xdc\xd0\xdf\x43\xd1\xfe"
- "\xd9\xd2\x91\xd1\x3e\x72\xa9\xf7\xfa\xfb\xf9\x56\x87\xfe\x7e\xbe"
- "\xd5\xbd\xfe\x7e\xfe\xd9\x1b\xfa\x7b\x38\xfa\x7b\x85\x66\x64\xfa"
- "\xfb\x79\xad\xab\xfe\x5e\xf5\x7b\xcf\xf4\xf7\xf3\x7b\x46\x5f\x7f"
- "\x3f\xbf\xdf\x55\x7f\xaf\x4a\xe5\x75\x8a\x3c\x36\x7c\xfd\xbd\x6a"
- "\xa5\x7b\xfd\xbd\x6a\x8d\xab\xfe\x5e\x35\x8f\xeb\xe9\x55\x3b\xb9"
- "\xfe\x5e\xb5\x84\xa7\x47\xd6\x39\xa7\x3b\xf4\x37\x4f\xe7\xfa\x7b"
- "\x55\xc9\xf0\xf4\x77\xc0\xf7\xac\xbf\x03\x07\xd1\xdf\x81\xff\x24"
- "\xfa\x3b\x7a\xb0\x18\x82\x37\x74\xc8\xa0\x3a\x64\xd5\xfe\x91\xe9"
- "\x90\xd5\x6e\xe3\x9f\x0d\xad\x43\xd6\x84\x38\x74\xc8\x9a\x10\xf7"
- "\x3a\x24\xe6\xad\x1b\x3a\x64\x38\x3a\x24\x3a\x6a\x64\x3a\x24\x26"
- "\xd6\x55\x87\xac\x39\xe9\x99\x0e\x89\x39\x37\xfa\x3a\x24\xc6\xea"
- "\xaa\x43\xd6\x54\xf0\x3a\xbd\x70\xf3\xf0\x75\xc8\x9a\x3d\xee\x75"
- "\xc8\x9a\x77\x5c\x75\xc8\x9a\x54\xae\x2b\xd6\x34\x70\x1d\xb2\x66"
- "\x27\x4f\x7f\x21\xc8\x39\xdd\xa1\x43\x78\x3a\xd7\x21\x6b\x9a\x87"
- "\xa7\x43\xc6\x7d\xcf\x3a\x44\x39\x88\x0e\x51\xfe\x93\xe8\x90\x17"
- "\x07\x3d\xff\x3b\xb8\x1c\x5b\x67\x71\xc8\xb1\x75\x16\xf7\x72\x6c"
- "\xdd\x9a\x1b\x72\x6c\x38\x72\x6c\x8d\x75\x64\x72\x6c\xdd\x1c\x57"
- "\x39\xb6\xfe\x2d\xcf\xe4\xd8\xba\x3f\x8f\xbe\x1c\x5b\x57\xee\x2a"
- "\xc7\xd6\x67\xf3\x3a\xbd\x78\x7a\xf8\x72\x6c\xfd\x3a\xf7\x72\x6c"
- "\xfd\x4b\xae\x72\x6c\xfd\x42\x2e\xaf\xd6\x97\x70\x39\xb6\x7e\x39"
- "\x4f\x7f\xb1\xd1\x39\xdd\x21\xc7\x78\x3a\x97\x63\xeb\xf7\x0e\x25"
- "\xc7\xb0\x5f\xd4\xa8\xfb\xf4\x8b\x17\xa5\x7e\xb1\x31\xf8\x53\x83"
- "\xd4\x2f\x36\x32\x1b\x4d\x30\xac\x56\xbf\x9e\x40\x14\xd9\x18\xaf"
- "\x05\x64\x84\xee\xb7\xd8\x2f\x74\x6f\xe0\xfe\x12\x55\x23\xc8\xbd"
- "\x66\x51\x0e\x26\x82\x1c\x6c\x86\x7b\xf4\x65\x36\x6d\xb5\x1a\xe5"
- "\x17\xee\xd3\xc0\x7b\x2e\x0f\xcd\x63\x30\x5e\x0c\x5b\x67\x77\xea"
- "\x37\xac\xaf\x74\x88\x7d\xa5\x83\xf7\x15\xe9\xbc\x5c\x52\x33\x15"
- "\xec\x9b\xb4\x93\xc2\xa3\x7c\x28\xf6\x1f\x76\x0e\x0b\xfa\x0f\xdd"
- "\xa4\xf5\x37\xc4\x41\x9f\x31\xb7\x12\xf4\x57\x8f\x7d\xc6\x6f\xab"
- "\xcc\x9f\x76\xc4\xf8\x82\x4c\xe4\xb2\x4f\xa8\x1c\x63\x43\xdf\x53"
- "\x9b\x40\xf6\xb5\x83\xec\x6b\x77\xf4\x15\x5c\x3b\xef\xd8\xa4\xd5"
- "\x58\x36\x69\xa7\xf7\x74\x80\xec\x33\xf7\xed\x27\x33\x43\x8a\xdb"
- "\x51\xf6\xb5\xb2\x7e\xc2\x64\x1f\xf4\x0d\xa1\x03\x64\xdf\x0b\xa2"
- "\xec\xeb\xd0\xa2\xac\x0f\x2c\x5e\x0d\xb2\x2f\xf2\x3c\x97\x7d\xa2"
- "\x0d\x77\x27\xca\xbe\x4d\x5a\xf9\xef\xda\x45\xd9\xb7\x12\x65\xdf"
- "\x11\xe8\x23\x7f\x73\x95\x7d\x7e\xde\xca\x3e\xdd\x72\xd7\x7e\xb2"
- "\xf1\xa8\x67\xfd\x44\x77\xd2\x5d\x3f\xe9\xd1\x7b\xdb\x4f\x74\xad"
- "\xae\xfd\x64\xe3\x7e\xb1\xef\x76\x0e\xbf\x9f\x6c\xfc\x7d\x6f\x3f"
- "\x79\xb1\x6f\x3f\xd9\x58\xe8\xda\x4f\x36\xea\x78\x7f\xd8\x58\xc9"
- "\xfb\xc9\xc6\x74\xb1\xff\x58\x9c\xd3\x1d\xfd\x84\xa7\xf3\x7e\xb2"
- "\xb1\xfe\xc6\x7a\xf9\x0f\x4d\xdf\x6f\x5a\x72\x63\xbd\xdc\xdb\x31"
- "\xe3\xc6\xd6\x91\x8d\x19\xe3\xab\x6f\xcc\xb7\x7b\x4b\xfb\x4d\x79"
- "\x23\xa3\x7d\xc2\xc2\x1b\x73\x25\xde\xd2\xfe\xa5\xa0\x91\xd1\xfe"
- "\xe5\x8a\xa1\xc6\x18\xee\x6d\xa9\xcd\xba\xea\xde\x31\xc6\x66\x9d"
- "\xb4\x3f\xb7\xff\x18\xe3\x95\xb3\xae\x67\xe9\x12\x5f\xea\xbb\x77"
- "\x76\xa8\xb1\x87\xed\xc6\xd8\x03\x78\x9d\x90\x3b\xb2\xb1\xc7\x2b"
- "\x7d\xf6\x27\xbe\x3a\xcd\x33\x9b\x6a\xf3\x2c\x77\x36\x95\xcd\xeb"
- "\xb1\xc7\xe6\x79\xae\x36\xd5\xab\x4a\x11\x1b\x8f\x0e\xdf\xa6\xda"
- "\x7c\xce\xbd\x4d\xb5\xf9\x92\xab\x4d\xb5\xb9\x82\xdb\x4e\xaf\x06"
- "\x73\x9b\x6a\x73\x03\x4f\x4f\x0c\x73\x4e\x77\xd8\x54\x3c\x9d\xdb"
- "\x54\xaf\x6a\x6f\xac\xa3\xff\xd0\x6c\xaa\xa4\xd2\x1b\x7a\xdd\x5b"
- "\xdd\xf2\xea\xbc\x91\xe9\x96\xe4\xef\x71\xff\xe7\x0f\x5d\xaf\x27"
- "\xb5\x8d\x8c\xf6\x29\x83\xee\xff\x1c\x5c\xaf\xa7\x2d\x74\xe8\xf5"
- "\xb4\x85\xee\xf5\xfa\xd6\x83\xae\x7a\x3d\x75\xf1\x0d\xbd\xee\x8d"
- "\x5e\x4f\x8e\x19\x99\x5e\xdf\x9a\xe9\xaa\xd7\xd3\x3a\x3d\xd3\xeb"
- "\x69\x63\x46\x5f\xaf\xa7\x05\xb9\xea\xf5\x34\x93\x88\x8d\x29\xc3"
- "\xd7\xeb\x69\x87\xdc\xeb\xf5\xb4\xa3\xae\x7a\x3d\x4d\x3c\xa7\x96"
- "\x66\xe1\x7a\x3d\x6d\x1f\x4f\x4f\x55\x3b\xa7\x3b\xf4\x3a\x4f\xe7"
- "\x7a\x7d\x1b\xb9\xb1\xbe\xfe\x43\xd3\xeb\xe9\x49\x37\x74\x8b\xb7"
- "\xba\x65\xdb\x08\xc7\x8c\xaf\x59\xbd\xd7\x2d\x99\xa5\x0e\xdd\x92"
- "\x59\xea\x5e\xb7\x64\x4e\x71\xd5\x2d\x19\x6f\xdf\xd0\x2d\xde\xe8"
- "\x96\xf4\x8a\x91\xe9\x96\xff\xdd\xec\xaa\x5b\xb2\x9e\xf2\x4c\xb7"
- "\x64\xae\x1c\x7d\xdd\x92\xa9\x73\xd5\x2d\x59\xf3\x44\x6c\xbc\x34"
- "\x7c\xdd\x92\x35\xcd\xbd\x6e\xc9\x9a\xe9\xaa\x5b\x32\xad\x5c\x87"
- "\x64\x2d\xe1\xba\x25\x4b\xc5\xd3\x33\xe2\x9d\xd3\x1d\xba\x85\xa7"
- "\x73\xdd\x92\xb5\xfc\xc6\xba\xfb\x0f\x4d\xb7\x6c\x1f\x74\xff\xef"
- "\xe0\xf2\x4d\x9f\xee\x90\x6f\xfa\x74\xf7\xf2\x2d\xfb\x8a\xab\x7c"
- "\x7b\x3d\xeb\x86\x7c\xf3\x46\xbe\x65\xe9\x46\x26\xdf\xb2\x2b\x5c"
- "\xe5\x5b\x8e\x87\xfe\x80\xf4\x8f\x8e\xbe\x7c\xd3\xf7\xf1\xff\x90"
- "\x23\xfa\x00\x7a\xfd\x99\xe1\xcb\x37\xbd\xdd\xbd\x7c\xcb\x19\xe3"
- "\x2a\xdf\xf4\xa2\xff\x9f\x9c\x50\x2e\xdf\xf4\xa2\xff\x9f\xd7\x97"
- "\x3a\xa7\x3b\xe4\x1b\x4f\xe7\xf2\x2d\x67\xde\xc8\xd6\xe3\x73\x2b"
- "\x1c\xeb\xf1\xb9\x8c\x17\x42\xde\x9e\x85\xfd\xd7\xe3\x73\x1f\xc2"
- "\xf5\x78\x47\x7f\xc9\x39\xc8\xd6\xe6\xb1\xcf\x58\xb8\xff\x9e\x01"
- "\xd7\xe9\xa7\xec\x59\x78\x63\x9d\xfe\x6a\xae\xd3\xe7\x2a\x5c\xfb"
- "\xcf\x1b\x1b\x3d\xeb\x3f\xb9\x5b\x47\x7f\x9d\x3e\x37\xd7\xb5\xff"
- "\xbc\xb1\x5c\xc4\xca\x6b\xc3\xef\x3f\x6f\x3c\xec\xbe\xff\xbc\xb1"
- "\xc0\xb5\xff\xbc\x21\x8e\x31\xdf\xd0\xf1\xfe\xf3\x46\x08\x4f\xcf"
- "\x49\x77\x4e\x77\xf4\x1f\x9e\xce\xfb\xcf\x1b\x49\x9e\xd8\x07\x36"
- "\x55\x69\x3a\xea\xfb\x90\xc6\xdb\xec\xbd\x38\x8f\x17\x71\x3e\x90"
- "\x7d\xf0\x3c\xd7\x17\xcc\x36\x28\x4d\x98\x33\xa4\x7d\xd0\x2c\xda"
- "\x07\x51\xfd\xed\x03\xc9\x36\x30\x00\xbe\xf3\x3d\x5a\xa3\x17\xf1"
- "\x8e\xb6\xc1\xe5\xe1\xda\x06\x5a\x87\x6d\xa0\xef\x63\x1b\xbc\xd0"
- "\xc7\x36\x60\x78\x6f\x72\xc1\x7b\x3f\xdb\xa0\x17\xef\xa3\x65\x1b"
- "\xfc\xbb\xe5\xc6\x1a\xbd\xb7\xe3\xce\x37\x72\x47\x36\xee\xdc\xa9"
- "\xbb\x31\x97\xef\x2d\xed\x7f\x37\xc2\xb9\xfc\xdf\xb7\xdd\x98\x6f"
- "\xf1\x96\xf6\x3b\x47\xe8\xcb\xe1\x3f\xdc\xc6\x7f\x1a\xda\xbe\xca"
- "\x9f\xe3\x18\x8f\xe4\xcf\x91\xec\x2b\xc9\x37\x22\xc8\x67\x85\x3e"
- "\x0e\xae\xcb\x84\xbc\x1e\xc7\xe2\x0c\x28\x8d\xcd\x27\x88\x2e\x19"
- "\x6d\xae\x5d\x6f\x87\x27\x3a\xdb\x5c\x79\xb3\x24\x7b\x2b\x1c\x6d"
- "\x31\xb0\xad\xd0\xae\x92\xc6\x20\xe8\xd7\x6a\xd0\xfd\xc3\x33\x13"
- "\xe6\xe0\x98\xa5\xc7\xaf\x34\xfd\x9f\x77\xbc\xf2\xe6\x9c\x91\x8d"
- "\x57\x76\xc5\xbb\xda\x5b\xf9\x5f\x7b\x66\x6f\xed\xba\x34\xfa\xe3"
- "\x95\x7c\xe2\x6a\x6f\xe5\x57\xf3\x3a\xfd\xc7\xd9\xe1\xdb\x5b\xf9"
- "\xef\xb8\xb7\xb7\xf2\xff\xe2\x6a\x6f\xe5\x67\x72\xbb\x2a\xdf\xc4"
- "\xed\xad\x7c\x03\x4f\xff\x8f\x66\xe7\x74\x87\xbd\xc5\xd3\xb9\xbd"
- "\x95\xdf\xe6\xa1\xbd\x95\x39\x02\x7b\x6b\xee\x0f\xc7\xde\xba\xfb"
- "\x3a\xb7\xb7\x0c\x6e\xe3\xbf\x39\xe9\x9d\xf4\x3e\x7a\x67\xce\x0d"
- "\xbd\x83\xb2\xa6\x80\x8c\x4c\xef\x14\x9a\x86\xa4\x7d\xb6\x13\xed"
- "\x51\xe6\x8b\x74\xb7\xcf\x48\x98\xe3\x35\xed\x41\xd6\x17\x26\xff"
- "\x90\xe9\x6e\xd8\x3b\x32\xba\x17\xbb\x8d\x7f\x7c\xc3\xd6\x1a\x8a"
- "\xf6\x45\xda\x91\xd1\xbe\xa4\xde\x7b\x5b\x6b\x77\xf9\xa7\xbd\xb6"
- "\xd6\xee\xf2\xbe\xb6\x16\xda\x56\x8b\xad\xdc\xe6\x7a\x1d\x6c\xa5"
- "\xed\xeb\xc1\xee\x4a\x20\xc4\xd8\x7c\x90\x64\x83\xed\xb5\xfd\x22"
- "\xd8\x5f\xb1\x60\x7f\xd9\xf6\x88\xf6\xd7\xee\x07\x5c\xed\xaf\xb7"
- "\xde\x19\xd0\xfe\xf2\x73\xd8\x5f\x36\xb0\xad\x7a\xf6\x24\xcc\xc9"
- "\xbd\xe8\x64\x8b\xad\xed\x6f\x8b\x75\xeb\x4b\x33\xbb\x67\x26\xcc"
- "\xed\x01\x7b\x6c\x30\x5b\x8c\x61\x62\x00\x7b\xec\xff\x0f\x5b\xac"
- "\xb8\x64\x64\xb6\xd8\x6e\xe2\x6a\x8b\x95\xae\xf3\xcc\x16\xdb\xbd"
- "\xc5\xed\xdc\x97\xd7\xb6\xd8\xee\x6c\x57\x5b\xac\x34\x42\xc4\xcc"
- "\x53\xc3\xb7\xc5\x4a\x1f\x72\x6f\x8b\x95\x3e\xea\x6a\x8b\x95\x8a"
- "\x67\x4f\x4b\x63\xb9\x2d\x56\xaa\xe5\xe9\x6f\x2d\x71\x4e\x77\xd8"
- "\x62\x3c\x9d\xdb\x62\xa5\x89\x1e\xae\x8d\xa5\xdb\x40\xa7\x7f\xff"
- "\xfb\x29\x07\x5b\x1b\x1b\xad\xfd\x94\xda\xeb\x7c\x6d\x6c\xcf\xd0"
- "\xf3\x5f\x37\x6c\x82\x01\x64\x4d\x69\xf6\xc8\xf4\xd2\x7f\xc7\xde"
- "\xb0\x09\xbc\xa5\xfd\x7f\x8d\x70\xee\xab\xac\xd5\x7b\x9b\xe0\x8f"
- "\xfb\x1d\xf3\x2f\x7f\xdc\x3f\xbc\xf9\x97\x3f\xde\xed\xaa\xff\xdf"
- "\x1e\x58\xff\xdf\x98\x7f\x19\x86\xce\xff\xef\xfd\x23\xd3\xf9\x7f"
- "\xb0\xb8\xea\xfc\xbd\x2b\x3d\xd3\xf9\x7f\xdc\x38\xfa\xf3\x2f\x7f"
- "\x4c\x75\xd5\xf9\x7b\x17\x89\x38\x89\x1e\xbe\xce\xdf\x3b\xcb\xbd"
- "\xce\xdf\xfb\x80\xab\xce\xdf\xab\xe4\xba\x7d\x6f\x24\xd7\xf9\x7b"
- "\x83\x79\xfa\xdb\x51\xce\xe9\x0e\x9d\xcf\xd3\xb9\xce\xdf\x1b\x3b"
- "\xbc\xf5\xae\x80\xeb\x74\xbd\x2b\xf0\x9f\x64\xbd\xeb\x9d\xe6\x1b"
- "\x7a\xc7\x5b\xbd\xb3\x37\x75\x64\x7a\xe7\xdd\x48\xef\xf5\xce\x7b"
- "\x21\x0e\xbd\xf3\x5e\xc8\xf0\xf4\xce\x9f\xdf\x72\xd5\x3b\xfb\x66"
- "\xde\xd0\x3b\x23\xd5\x3b\x7f\x0a\x19\x99\xde\xf9\x73\x1f\xff\x47"
- "\xef\x79\xe8\xff\xe8\xcf\x6e\xfd\x1f\x79\xaf\x77\xfe\xdc\xc7\xff"
- "\xd1\x7b\xa2\xff\xa3\x77\xbd\xf0\x1b\xf2\xde\x1e\xf7\x7a\xe7\xbd"
- "\x3e\xfe\x8f\xde\x4b\xe5\xfa\xe5\x3d\xd1\xff\xd1\x7b\xa2\xff\xa3"
- "\x77\x1b\x9d\xd3\x1d\x7a\xe7\x5d\x27\xbf\x21\xef\xdd\xf0\x7f\xf4"
- "\x83\xdb\x87\xb9\x7f\x04\xf2\xef\xaf\x2a\x87\xfc\xfb\xab\xca\xfd"
- "\x3e\xcc\xff\xd9\xea\xba\x0f\xf3\x2f\x13\x6f\xec\xc3\xf4\x46\xbe"
- "\xbd\x37\x42\xbf\x48\xff\xb3\xc8\x55\xbe\xfd\xf5\x7d\xcf\xe4\xdb"
- "\xff\x1c\x1d\x7d\xf9\xf6\x3f\x0d\xae\xf2\xed\xaf\xa5\xbc\x4e\xfb"
- "\xbd\x90\x6f\x7f\x7d\xcd\xbd\x7c\xfb\xab\xde\x55\xbe\xfd\x35\x92"
- "\xcb\xb1\xbf\x1e\xe0\xf2\xed\xaf\xf1\x3c\x7d\x7f\xa3\x73\xba\x43"
- "\xbe\xed\x77\x92\x6f\x7f\xad\x18\xde\xba\xa6\x57\x76\xf5\x35\x58"
- "\xd7\x1c\x2d\xbb\xfa\x7a\x5f\xd7\x7c\x7f\xde\x8d\x79\x34\x6f\x6c"
- "\xea\xbf\x36\x8c\xcc\xa6\xfe\xdb\x7e\xef\x75\xca\xc1\x3c\x87\x4e"
- "\x39\x98\xe7\x6e\x7d\x67\x3b\xe0\x2e\x1b\x6c\xe2\xac\x8b\x44\xf1"
- "\x3a\xae\xef\xd4\xd7\x10\x3d\xae\xef\xac\x97\xd6\x77\x0a\x45\x3b"
- "\xfb\xa0\x9f\xab\x9d\xfd\x7f\xf5\x03\xd9\xd9\x68\x5f\xdb\xc1\x76"
- "\xb6\xf5\x5d\xd7\xf9\xed\xc0\xba\xa8\xdb\xaf\x34\xf3\xca\x9e\x84"
- "\xb9\xc3\xd5\x45\x05\x9b\xb9\x2e\xca\xff\xc1\xeb\xa2\xf7\xd3\x47"
- "\xa6\x8b\x3e\x68\x70\xd5\x45\x1f\x2e\xf0\x4c\x17\x1d\x7c\x66\xf4"
- "\x75\xd1\xc1\x28\x57\x5d\xf4\x61\xa8\x88\x95\xd9\xc3\xd7\x45\x1f"
- "\x4e\x74\xaf\x8b\x3e\x9c\xe2\xaa\x8b\x0e\xb6\x71\x9d\xf3\xe1\x7c"
- "\xae\x8b\x3e\x24\x3c\xfd\xff\x86\x3a\xa7\x3b\x74\x11\x4f\xe7\xba"
- "\xe8\xc3\x25\xc3\x9b\xe3\x19\x77\x9d\xce\xf1\x28\xff\x49\xe6\x78"
- "\x3e\xaa\xf4\x5e\x26\x7e\x9c\x5d\xdd\x7b\x7e\xe3\xe3\xec\x7e\xf3"
- "\x0c\x09\x60\x6f\xb7\xf3\x75\xee\xde\x79\x06\xd3\x69\x51\xfe\x7d"
- "\x2c\x73\x95\x7f\xe5\x6e\xe5\xdf\x60\x6b\xd9\x38\xaf\x60\x07\xd9"
- "\x68\x2b\x1c\xc1\x5a\x76\xc2\x0f\x5d\xe6\x7d\x38\x42\xff\xca\x87"
- "\xaa\x5d\x65\xde\xe1\x87\x3c\x93\x79\x1f\xff\xca\xad\xcc\xf3\xfa"
- "\x1c\xc7\xc7\x11\xae\x32\xef\xf0\x0c\x11\x1f\x0b\x86\x2f\xf3\x0e"
- "\x8f\x71\x2f\xf3\x0e\xfb\xb9\xca\xbc\x8f\x4d\x5c\xb6\x1d\x9e\xcb"
- "\x65\xde\xc7\x16\x9e\x5e\x3e\xdf\x39\xdd\x21\xf3\x78\x3a\x97\x79"
- "\x87\xe7\x0f\x26\xf3\x68\xf6\xda\xcc\x5c\xb9\xb0\x0f\xae\x03\x50"
- "\xc7\x29\x80\x8d\x72\xf8\xbf\x12\x78\x3c\x11\xfe\xaf\x73\xd7\xff"
- "\xcc\x7e\x6b\x33\x85\x34\xa8\xb3\x9c\xc8\x8c\xe6\xef\xca\xcb\xa7"
- "\xda\xb0\xde\xe2\x99\xb5\xb5\x99\x01\xb6\x71\x0b\x05\x1a\x43\x80"
- "\x2f\x99\x2c\x36\x26\xe4\xc7\xf3\x41\x9a\x04\xe2\x7f\x51\x76\xb8"
- "\x59\xca\x07\xf5\xf5\x6f\x92\x1d\x7e\x0b\xcb\x80\xba\x9a\xa1\x2d"
- "\x4b\xdc\xd6\x15\xca\x0a\x7f\x7b\x3a\xd9\x62\xa3\xdf\x96\xaf\x6f"
- "\x27\xcd\xb2\x8a\x87\x02\xda\xc6\x2d\xa4\x29\x11\x04\x6d\xb9\x7d"
- "\x53\xcd\x0a\x2c\x13\xe3\xe9\xc2\xb3\x60\x7c\x66\x87\x3a\x26\xaf"
- "\x23\xf2\x9c\xf6\x71\x4a\x90\x13\x63\x52\x2c\xb4\x75\x83\x0d\xea"
- "\x0c\xd8\xfc\x68\x7a\x83\xe2\xdd\x7c\x48\xb3\x13\x35\xc6\x26\xc5"
- "\x32\xc0\x9e\x85\xfa\x54\x3c\x5c\x04\xf9\x07\xaa\xc3\x6b\x7f\x22"
- "\x21\x63\xee\xa6\xa6\xe1\xe1\xa6\x22\xd7\x1d\x1d\x03\xb6\x4e\x27"
- "\xe5\xf7\x00\xed\x34\x44\x3e\xd0\xf3\x61\x7e\x67\xb0\xf3\xef\x4a"
- "\x8c\x6d\x9c\xb2\x8b\xc8\x77\x08\xe3\x94\x87\x93\x58\xfc\x61\x73"
- "\x57\xc6\x91\x28\x93\xec\x1e\x16\x3b\x14\xe3\x5a\x62\xfc\x77\xc0"
- "\x0d\x81\xf4\xa4\x43\x89\x84\xf4\xe5\x45\x5c\xd4\xba\x95\x9a\xf8"
- "\x35\xeb\xa2\x37\xbc\x14\xaf\x99\x19\x35\x9e\x2c\xdd\xb0\x41\xb3"
- "\x6e\xe5\xfa\x57\x34\xce\x4f\x7e\xaa\x89\x5a\xb3\x69\xe5\xf3\xb1"
- "\xd1\xb3\xd6\xad\xd2\x8d\xc7\xcd\x28\x4e\xf5\x08\xc2\xba\x08\x19"
- "\x47\x32\x8b\xfe\x9d\x90\xdf\x4d\x22\x0a\xac\x17\x7c\xaf\x4d\x8a"
- "\x61\x8a\x31\x3c\xe5\x90\x27\x05\xe4\xe3\x8e\xe4\x71\x90\xb7\xc2"
- "\x5a\x0c\xf5\x2a\x82\x7a\x43\x1d\xa1\xce\x7f\x57\x4b\x75\x96\x30"
- "\x91\x82\x98\x48\x6e\x07\x0c\xfe\xfd\xa1\x00\xeb\xb8\x5f\x52\x1a"
- "\x81\xed\xc3\x7e\x22\x83\xb4\x2c\xa6\xcb\xf4\x6b\x33\xe1\xdd\xa5"
- "\x12\xc6\xf0\x5d\x9a\xb3\x76\x49\x17\xf6\x13\x1a\xf3\x73\xde\xa7"
- "\x3e\x09\x79\x46\x2b\x23\x3c\x86\xea\xdf\x53\x1d\x31\x54\x3f\x61"
- "\x73\xd5\x50\x8f\x36\x48\xcf\x33\x91\x1e\x16\xf3\x18\x63\xff\x62"
- "\x2c\x54\xac\x33\xb4\x0b\x74\x29\x2d\xa7\x69\x22\xf6\x33\xdf\x8f"
- "\x10\x32\x3f\x37\x19\x15\x97\x49\xb8\x8d\xf6\xd0\xac\xf7\x23\x6a"
- "\x2d\x16\x12\xb0\x55\xb7\x8a\x8e\x3d\xb2\x2b\xc0\xb6\x26\x1a\x63"
- "\xb8\x0a\x59\x9f\x9b\x68\x56\xdd\xce\x67\xee\x26\x81\x50\xb6\xc5"
- "\x29\x96\xab\x62\x78\xfc\xff\x3b\xe3\x3f\xf2\x11\x63\xb4\x72\x3e"
- "\x7e\x32\xff\x50\x7c\x7f\x3e\xf6\xe2\xef\x6d\x81\x1c\x01\x2c\x50"
- "\x55\x7e\x5d\xb8\x9d\xd3\x11\xfb\x6e\x47\x4a\x0c\xb9\x8f\xd1\xee"
- "\x13\x9b\x90\x93\xbf\x4f\xc8\xce\x6f\xa5\xd9\xf9\xf5\x40\xb3\x98"
- "\x9c\x04\xa2\x59\x61\x0f\x24\xfa\xcb\x24\xd4\xac\xcf\xaf\xf3\x93"
- "\xa5\xca\xc0\x1e\x91\x83\x3e\x09\x05\x99\x11\x2a\xf6\xf7\x18\xa4"
- "\xe3\x27\x60\xad\x3d\xb9\x89\x90\x6f\xe7\x11\x9f\x22\x78\x6f\x78"
- "\xed\xf9\x84\xe9\x7f\x9a\xf1\x49\x6a\x31\xbc\x8b\x31\x7a\x87\xf7"
- "\x7e\xa5\xd2\x6d\xbf\xeb\x6d\x77\xc1\x92\x81\xdb\x5d\x69\x11\x72"
- "\x0a\x42\x85\xec\x82\x18\x9a\x5d\xb0\xb4\x7f\xbb\x0b\x96\xf0\x76"
- "\x8f\x69\x1f\xfd\x76\x57\x96\xf3\x76\x57\x26\x7a\xd7\xee\xa3\xc4"
- "\x83\x76\xbb\xe1\xf7\xd1\x36\x68\x37\xf0\xbb\x00\xf8\x5d\x30\x00"
- "\xbf\x0b\x44\x7e\x4f\x68\x1a\xfd\x76\x1f\x3d\xc0\xdb\x7d\x54\xe7"
- "\x65\xbb\xdd\xca\x3f\x47\xbb\x0d\x6e\xf8\x5d\xd5\x2c\xe4\x18\x80"
- "\xdf\x06\xe0\xb7\x61\x00\x7e\x1b\x44\x7e\x4f\x3c\x3e\xfa\xed\xae"
- "\xe2\xfe\x0f\x33\xaa\x62\xbc\x6b\x77\x95\xd9\x83\x76\xbb\xe1\xf7"
- "\xa7\x8d\xd0\x6e\xe0\xb7\x01\xf8\x6d\x18\x80\xdf\x06\x91\xdf\x0f"
- "\x6e\x1f\xfd\x76\x7f\xca\xe3\x3f\x67\x7c\x1a\xe9\x5d\xbb\x3f\x75"
- "\xbb\xff\xc5\xd1\xee\x42\x37\xfc\xae\xae\x17\x72\x0a\x81\xdf\x85"
- "\xc0\xef\xc2\x01\xf8\x5d\x28\xf2\x7b\xd9\x63\xa3\xdf\xee\xea\x12"
- "\xde\xee\xea\x08\xef\xda\x5d\xed\x76\xff\xbb\x93\x3c\x6f\x00\x99"
- "\xdd\x8f\xe7\xc6\xc4\xb9\xe4\xde\xcb\xd8\xfe\xda\xf9\xd4\x2f\xbf"
- "\x61\xc2\xd6\x54\x99\x4d\x95\xdf\x38\x01\xc6\x72\x05\x69\x42\x4c"
- "\x80\x89\xf8\x42\x5b\x63\x68\x4e\xb1\x0e\x7f\x05\x28\xc7\x06\xb2"
- "\xdf\xae\xca\xaf\xef\xce\x5e\x1b\xf3\xfa\x6a\xa2\x49\x31\x93\xc0"
- "\xda\x64\x13\x49\xd6\x51\x73\x2d\xf9\x9a\xf8\x99\x88\x1c\xe7\xcb"
- "\x3e\x6d\x3b\x40\xd6\xc7\x51\x0a\x65\xcf\xc2\x31\x66\x4e\x0b\x09"
- "\x05\x9b\x38\x95\x82\xfe\xc8\x15\x88\x06\xca\x0f\x45\x5a\x42\xd9"
- "\x71\x01\x4b\x89\xec\xc3\xe7\xad\x04\xe9\x89\xb4\x85\xf1\x68\x28"
- "\xa3\xab\x85\x90\x5f\x2f\xe3\x74\x2d\x58\x3d\x5c\xba\xd6\xf0\xf5"
- "\xbf\xec\x7c\xb3\xd1\xd4\x4d\xc0\xb6\x0c\xc4\x33\xf7\x90\xbe\xbf"
- "\x56\xd7\x0e\x63\x91\x9a\x08\xaa\xcf\x37\x09\xa0\xb3\x86\x57\x6e"
- "\xad\x5b\xff\xd7\x4e\xf2\x34\x02\x64\x66\x3f\xac\x39\xe8\x6d\xdc"
- "\x4f\xfd\x0a\x22\x38\xbd\x0b\x96\x4f\x68\x1c\xd3\x3e\x30\xbd\x0b"
- "\x22\x6c\xa0\x73\xec\xaa\x82\xa5\x9e\xd3\xdb\x58\xe8\x4a\xef\x82"
- "\xd0\x6b\x43\x6f\xa3\x18\xff\xb4\x40\xe7\x4a\x6f\xe3\x0c\x4e\xef"
- "\xda\x4a\xaa\x2f\x88\x14\x40\x57\x0e\xb3\xdc\x72\x0f\xe8\x0d\xf8"
- "\xee\xaf\xc3\x1c\xf4\x3e\x36\x03\xe8\x2d\xe2\xbb\x00\xf0\x3d\xa1"
- "\xc9\x0d\xbd\x01\xdf\x05\x80\xef\x82\x61\xe0\xfb\x98\x5f\x1f\x7a"
- "\x5f\x23\x7c\xd7\x89\xf3\x7f\x05\x7d\xf0\x5d\xb7\x93\xd3\xbb\x0e"
- "\xc6\xb9\x05\x80\xef\x82\x61\xe2\xfb\x58\xa8\x07\xfa\x03\xf0\xdd"
- "\x5f\x77\x3a\xe8\x7d\x7c\x27\xf5\x33\x88\xf8\x36\x00\xbe\x27\x1e"
- "\x1f\x98\xde\x06\xc0\xb7\x01\xf0\x6d\x18\x06\xbe\x8f\x6f\x71\xa5"
- "\xb7\xe1\x1a\xe1\xfb\x38\xf7\x31\x99\x6d\xe8\x83\xef\xe3\x0a\x4e"
- "\xef\x63\x65\x54\x6f\x00\x7c\x1b\x86\x89\xef\xe3\x25\x1e\xd0\x1b"
- "\xf0\xdd\x5f\x67\x3b\xe8\x5d\xaf\x00\x7a\x8b\xf8\x36\x00\xbe\x1f"
- "\xdc\xee\x86\xde\x80\x6f\x03\xe0\xdb\x30\x0c\x7c\x7f\x76\xa1\x0f"
- "\xbd\xaf\x11\xbe\x3f\x3b\x20\xd2\xbb\x0f\xbe\x3f\x8b\xe7\xf4\xfe"
- "\x4c\x0d\xf4\x06\x7c\x1b\x86\x89\xef\xfa\x40\x0f\xec\x04\xc0\x77"
- "\x7f\x5b\xc1\x41\xef\x13\xf1\xd4\xaf\x50\xc4\x77\x21\xe0\x7b\xd9"
- "\x63\x03\xd3\xbb\x10\xf0\x5d\x08\xf8\x2e\x1c\x06\xbe\x4f\x3c\xeb"
- "\x4a\xef\xc2\x6b\x84\xef\x13\x62\xfc\xcb\xc2\x3e\xf8\xae\x6f\xe6"
- "\xf4\xae\xcf\xa4\xfa\x42\xc0\x77\xe1\x30\xf1\x7d\x22\xd5\x1b\xfb"
- "\x64\x53\x21\x51\xba\xd2\xfc\xf3\xd6\xab\x67\xa3\x7c\x7e\xec\xfb"
- "\xb1\x51\x3e\x37\x0c\x6c\xa3\x7c\x1e\xc1\x69\x7e\xc2\xe6\x9d\x8d"
- "\xf2\xb9\xdb\xf3\x0f\x83\xd9\x28\xfd\x69\xde\xb0\xfc\xea\xd9\x29"
- "\x0d\x0b\xbe\x1f\x3b\xa5\x21\x70\x60\x3b\xe5\x8b\x6a\x4e\xf3\x2f"
- "\x74\xde\xd9\x29\x0d\x6e\xfd\x1f\x0c\x66\xa7\xf4\xa7\xf9\xc9\xba"
- "\xab\x67\xab\x9c\x7c\xff\xfb\xb1\x55\x4e\xa6\x0f\x6c\xab\x9c\x0c"
- "\xe3\x34\x6f\x68\xf6\xce\x56\x39\xd9\xe8\x8d\xad\xd2\x9f\xe6\x5f"
- "\xce\xbf\x7a\xf6\xca\x97\xb3\xbe\x1f\x7b\xe5\x94\x75\x60\x7b\xe5"
- "\x94\x38\xfe\x39\x15\xe1\x9d\xbd\xf2\xa5\x07\xe3\x9f\xfe\xf6\x4a"
- "\x7f\x9a\x37\x1e\xb8\x7a\x36\x4b\xe3\x5b\xdf\x8f\xcd\xd2\x18\x3b"
- "\xb0\xcd\xd2\xa8\xe5\x34\xff\xb2\xda\x3b\x9b\xa5\xd1\x6d\xfc\x93"
- "\xc1\x6c\x96\xfe\x34\xff\x2a\xe4\xea\xd9\x2d\x5f\xdd\xfc\xfd\xd8"
- "\x2d\xa7\x4d\x03\xdb\x2d\xa7\x0d\x9c\xe6\xa7\xc3\xbc\xb3\x5b\xbe"
- "\x9a\xeb\x8d\xdd\x82\xb4\x46\x9a\xa3\xad\xc2\x69\x6e\xb2\x51\xff"
- "\xfc\x7d\x3d\x60\x8f\xf8\x01\xdd\xfd\xda\x88\xbc\x10\x69\xde\xc0"
- "\x69\x6e\xf7\x2f\xd6\x01\x7d\x62\x90\x66\xac\x1d\xff\x50\xfb\xdb"
- "\xb3\xf3\x1b\xa9\x9c\x40\x5b\x94\xa4\x45\x76\xc6\xd7\x96\x46\xfc"
- "\x35\xc9\x5b\xe1\x7f\xd3\x05\xcc\xa3\x49\xce\x38\x0d\x6d\xf4\xc1"
- "\x35\x0a\x9b\x7e\x6d\xa0\xdd\xaf\x28\x17\x9e\xfd\x8a\x4e\x5b\x1d"
- "\xd8\x03\xb6\x04\x7d\x51\x1d\x64\x6c\xdb\x47\x8c\xb6\x2a\x52\xdb"
- "\xf0\x37\x22\xf8\x17\xc7\xdd\x67\x23\x5a\xfa\x0f\x6d\x50\x75\xbc"
- "\x89\xd8\x57\xa9\x55\xc6\xc4\x4a\xc0\xc5\x7b\x24\xbc\x95\x5e\xa6"
- "\xdf\x68\x55\x3d\x7e\xbb\xeb\xec\x7e\xc5\x4b\xec\xfa\xd2\x3c\x9b"
- "\xdf\xee\xf2\x77\x12\x4c\x72\x95\x95\x68\x63\x9b\x29\xcd\x79\x9e"
- "\x28\x72\x9a\x88\x72\xc7\xf3\x44\xb5\xa3\x89\x04\x56\x37\x37\x90"
- "\x9a\xf3\x95\xa4\xa6\xfd\x24\xa9\xb9\x0c\x57\x37\x5c\x02\x5c\xa9"
- "\x27\x49\x75\x1b\x21\x8b\xa1\x96\x29\xcd\xd4\xfc\xe3\x46\x12\x54"
- "\x6d\x6b\x20\x9a\xe7\x08\xb9\x28\x3b\x73\x5a\x15\x49\x82\xe8\x37"
- "\x6a\x42\x57\xa9\xe5\xf0\x4c\x81\xe9\x46\x9b\x99\x54\x37\x5b\xf1"
- "\xf9\x07\xf0\x5c\x91\xd2\x0c\xe5\x0b\x95\xe8\xcb\xd0\x5c\x9d\x7a"
- "\x14\xda\x37\x15\xe9\xdc\x2a\xd9\x64\x39\xdd\x24\x74\x07\xb0\x19"
- "\x31\x13\x4e\x39\x66\x8a\xbb\x87\x8b\x19\x13\xf7\xff\xfe\xa2\x7a"
- "\x12\xd0\x7b\xaa\xf0\x62\x44\xe0\x93\x27\xcf\x50\xdc\x0f\x86\xeb"
- "\x33\xb5\x96\x2a\x82\x6b\xd6\xe1\xaf\x10\xb2\xc8\x4e\x08\xd2\x04"
- "\xd7\x92\x9f\xd4\x91\x00\xdc\xa7\x26\xfc\x43\x3b\xc9\xd8\x6c\x26"
- "\x5b\x6c\x50\xd7\x8b\xd6\xde\xba\xd6\xa6\xd7\x12\x78\x36\xb5\x36"
- "\xc6\x44\x54\x3a\x12\x88\x74\x06\x5b\xb4\xe1\xc9\x56\xe2\xbb\xde"
- "\x42\x29\xd2\x18\x69\x8b\x74\xc6\xf2\x24\xda\x1b\xa3\xcc\x24\xc5"
- "\x4a\x02\x8d\xc9\xf0\x9b\x48\xcd\x46\x72\x89\x98\x64\x67\xcc\xd4"
- "\x6f\x2a\x01\x7c\xc4\x23\x26\xe0\x9e\x00\x0e\x26\xd1\x8c\xaf\xf6"
- "\x17\x41\x7b\x71\x6d\x7f\x78\x6d\xfe\xda\x93\xf5\x8f\x7e\x36\xa1"
- "\x03\xcf\x05\x11\x1c\xcf\xdf\x54\x53\xff\x82\xd0\x1e\xb0\xf5\x38"
- "\x9e\xc7\xb4\x0f\x8d\xe7\x82\xe5\x0e\x3c\x7f\x7d\xd2\x81\xe7\x6f"
- "\x0e\xba\xc7\xf3\x37\x53\x38\x9e\x0b\x74\xd7\x27\x9e\x9b\xde\x19"
- "\x1c\xcf\x4d\xd9\xee\xf1\x5c\x10\x23\xd9\xbb\xa3\x83\xe7\xa6\xe6"
- "\x6b\x87\xe7\x82\x08\xef\xf0\xdc\x54\xee\x8a\xe7\xaf\xeb\x38\x9e"
- "\xbf\x4e\xf7\x0e\xcf\xdf\xb8\xf5\x7f\x3c\x98\xbd\xed\x84\x67\x51"
- "\x3e\xb7\x18\x00\xcf\x20\x9f\x0b\x44\xf9\x3c\xa1\xc9\x03\x3c\x3b"
- "\xc9\xe7\xe6\xb7\x1d\x78\x6e\xd1\xbb\xc7\xf3\xd9\x73\x22\x9e\xaf"
- "\x53\xf9\x7c\x76\xcb\xe0\x78\x3e\xbb\x7c\x10\x3c\xb7\x4a\x63\x89"
- "\xd1\xc1\xf3\xd9\xfd\xd7\x10\xcf\x5e\xca\xe7\xb3\xb9\xae\x78\x6e"
- "\x2e\xe1\x78\x6e\x5e\xea\x1d\x9e\x5b\xca\xbc\x19\xcb\x38\xf0\x6c"
- "\x10\xe5\xf3\xb9\x58\xea\x6f\x00\xf9\x6c\x10\xe5\xf3\xc4\xe3\x43"
- "\xe3\xd9\xe0\x24\x9f\xbf\x7d\xc5\x81\xe7\x73\xcf\xba\xc7\x73\xeb"
- "\xfb\x1c\xcf\x86\xeb\x54\x3e\xb7\x2e\x1e\x1c\xcf\xad\x21\xee\xf1"
- "\x6c\x88\x91\xc6\x69\xa3\x83\xe7\xd6\xf4\x6b\x87\x67\x83\x97\xf2"
- "\xb9\x35\xd2\x15\xcf\xdf\xea\x38\x9e\xbf\x9d\xe1\x1d\x9e\xcf\x25"
- "\x7a\x33\x4e\x74\xc2\xb3\x28\x9f\xdb\xe6\x01\x9e\x41\x3e\x1b\x44"
- "\xf9\xfc\xe0\x76\x0f\xf0\xec\x24\x9f\xcf\xff\xca\x81\xe7\xb6\x59"
- "\xee\xf1\xfc\x8f\x2c\x11\xcf\xd7\xa9\x7c\xfe\xc7\xb4\xc1\xf1\x7c"
- "\xde\x36\x08\x9e\x5b\xa5\x31\xf0\xe8\xe0\xf9\x1f\x4b\xaf\x21\x9e"
- "\xbd\x94\xcf\xff\x08\x75\xc5\xf3\xf9\x30\x8e\xe7\x73\x16\xef\xf0"
- "\xdc\xe6\x36\xfe\xeb\x60\x63\x70\x07\x9e\x0b\x45\xf9\xfc\x9d\x8a"
- "\xfa\x17\x82\x7c\x2e\x14\xe5\xf3\xb2\xc7\x86\xc6\x73\xa1\x93\x7c"
- "\xbe\x30\xc5\x81\xe7\x8b\x76\xf7\x78\xbe\xf8\x1b\x8e\xe7\xc2\xeb"
- "\x54\x3e\x5f\xb8\x30\x38\x9e\x2f\x54\xbb\xc7\x73\x61\x8c\x34\xbf"
- "\x30\x3a\x78\xbe\x38\xe3\xda\xe1\xb9\xd0\x4b\xf9\x7c\x91\xb8\xe2"
- "\xf9\x42\x20\xc7\x73\x5b\x85\x77\x78\xfe\x4e\x3d\x3a\xf3\x1b\xed"
- "\x2a\x9c\xdf\xe8\xc6\xf9\x0d\xc7\xde\xbf\x98\x80\x3a\x8e\xe7\x1e"
- "\xc0\x73\x81\x33\x9e\xbf\xec\x3b\xbf\xf1\xdd\x39\xa1\x17\xcf\x97"
- "\xfa\xe1\x59\x00\x3c\xf7\x30\x3c\x5f\xba\x59\x9a\xdf\x30\xb6\x95"
- "\x00\x4e\xce\x13\xe3\x12\xc0\x72\x8e\x88\xe5\x2f\x01\xcb\x40\x43"
- "\x01\x68\x5c\xdd\xd8\x40\xc2\xcd\x9c\x96\xdd\x40\x63\xc1\x19\xc7"
- "\xdd\xad\x72\xc4\x2f\xe2\x56\xc2\x70\xcd\x7a\xc0\x6e\xdc\x31\x52"
- "\x93\x00\xd7\x66\xb8\x92\xe1\x22\xc7\x48\x75\x2b\x60\x77\x8d\x33"
- "\x76\xeb\x44\xec\x9a\xdf\x1e\x1c\xbb\xe6\xcc\x6b\x37\x97\x61\xe6"
- "\xf3\x5f\x5f\x46\x04\x86\x3f\x75\x86\x1a\x13\x1b\x44\x7c\x9e\x27"
- "\xe1\x36\x12\x40\x97\x69\x27\xa9\x22\x48\xe0\xab\x76\x22\xd7\x3f"
- "\x4f\x02\xf5\xa7\xa0\xdd\x52\xff\x6d\x22\xaa\x2a\xeb\xdf\x48\x75"
- "\x7b\x03\xa9\xbe\x7c\x94\x54\x0b\x70\x9d\x87\x0b\xea\x1a\x1e\xed"
- "\xdc\x6e\xb3\xd8\xee\x4b\x6f\x41\x59\x33\xdc\xb7\xfb\x52\x2a\x6b"
- "\x77\x14\xb4\xbb\xdb\xd1\x6e\x23\xf4\x03\xe0\xcf\x54\x41\x9c\x0f"
- "\x09\x37\x13\xdf\x0d\x36\x4a\xbb\x45\xfc\x23\x7f\xaa\xea\xad\x24"
- "\x5c\x07\x3c\x5b\x05\xf8\x6f\x2e\x23\x29\x49\x80\xff\x6e\x2b\xe2"
- "\xce\x6c\x4c\xbd\x02\xf8\x37\x7f\x40\x81\x7e\x3d\x88\xff\x2f\x11"
- "\xff\xdf\x99\x04\x86\xff\xef\x76\x7a\x87\xff\x76\x0f\xf0\xef\xc9"
- "\x7c\x48\xa7\x0a\xe7\x43\xba\x71\x3e\xc4\xb1\x07\x74\x08\xfc\x3b"
- "\xcf\x87\xb4\x3b\xe1\xdf\x32\x08\xfe\x2d\x37\x4b\xf3\x21\xdf\x3f"
- "\xfe\x3b\x86\xc0\x7f\xc7\x20\xf8\x1f\xed\xb9\x8f\x8e\x6b\x88\x7f"
- "\xcb\x10\xf8\xb7\x78\x80\xff\x82\x08\xef\xf0\xdf\xd1\x07\xff\xed"
- "\x22\xfe\xdb\xbd\xc4\x7f\xa7\x27\xf8\xf7\x60\xfe\xc4\x8a\xf8\x07"
- "\xf9\x5f\x50\xef\xb4\x17\x78\x28\xfc\x3b\xc9\xff\x4e\x27\xfc\x77"
- "\x0d\x82\xff\x2e\x09\xff\xd7\x81\xfc\xbf\x3c\x04\xfe\x2f\x0f\x86"
- "\xff\x51\x9e\x2b\xb9\x7c\x0d\xf1\xdf\x35\x04\xfe\xbb\x3c\xc1\xbf"
- "\x97\xf2\xff\x72\x1f\xfc\x77\x8a\xf8\xef\xf4\x12\xff\x56\x0f\xf0"
- "\xef\xc9\x7c\x4b\x8f\x0a\xe7\x5b\xba\x71\xbe\xc5\xb1\x27\x7c\x08"
- "\xfc\x3b\xcf\xb7\x58\x9d\xf0\xdf\x3d\x08\xfe\xbb\x6f\x96\xe6\x5b"
- "\xbe\x7f\xfc\x5f\x19\x02\xff\x57\x06\xc1\xff\x68\xcf\xad\x5c\xb9"
- "\x86\xf8\xef\x1e\x02\xff\xdd\x1e\xe0\xdf\xe0\xa5\xfc\xbf\xd2\x07"
- "\xff\x56\x11\xff\x56\x2f\xf1\xdf\xe3\x09\xfe\x3d\x98\x9f\x11\x10"
- "\xff\x20\xff\x0d\xf5\x4e\x67\x03\x86\xc2\xbf\x93\xfc\xef\x71\xc2"
- "\xbf\x7d\x10\xfc\xdb\x25\xfc\x5f\x07\xf2\xdf\x36\x04\xfe\x6d\x83"
- "\xe1\x7f\x94\xe7\x62\x6c\xd7\x10\xff\xf6\x21\xf0\x6f\xf7\x04\xff"
- "\x5e\xca\x7f\x5b\x1f\xfc\xf7\x88\xf8\xef\xf1\x12\xff\x82\x07\xf8"
- "\xf7\x60\x3e\x47\x2e\x63\xf3\x39\xdd\x38\x9f\xe3\x38\x23\x32\x04"
- "\xfe\x9d\xe7\x73\x04\x07\xfe\xe5\xc4\x3d\xfe\xe5\xe4\x66\x69\x3e"
- "\xe7\xfb\xc7\x3f\x1d\x02\xff\x74\x10\xfc\x8f\xf6\xdc\x0d\xbd\x76"
- "\xf8\x97\x93\xc1\xf1\x2f\x27\x1e\xe0\xbf\xd0\x4b\xf9\x4f\xfb\xe0"
- "\x5f\x10\xf1\x2f\x78\x87\x7f\xb9\x6c\x74\xe6\x7f\xe4\xf2\xfd\x38"
- "\xff\x23\xa8\xf2\xeb\x7b\x0c\xab\x03\x85\xec\xdd\x75\x01\x32\x0d"
- "\xb1\xa9\x8a\x72\x8d\xf1\x16\xf2\x64\x27\xf0\x44\xd7\x49\x9e\xeb"
- "\x0c\xc4\x58\x96\xe5\x14\xc6\xff\x2e\x67\x44\xe1\xb2\x65\x4f\x25"
- "\x3b\xd6\x13\x85\xdd\xbf\x38\x0e\xd3\x8c\x2d\x56\x82\x6d\xde\x82"
- "\x34\x38\xef\xa0\x01\xce\xc1\xd1\xef\xb4\x81\x45\x69\x90\xa7\xdb"
- "\x44\x9a\x01\x2f\xd5\xcd\x26\xa0\xfd\x66\x86\x2d\xe4\x05\xd4\x67"
- "\x69\xf1\x45\xa2\xb0\x7d\xa3\x9e\x0a\x3c\x0e\xf2\x7b\x99\xc8\x82"
- "\x9b\xa9\x80\xbc\x44\x1e\x21\x5f\x35\x9b\x29\x85\x7c\xef\xd4\x02"
- "\xbe\x6d\xdf\x68\xa7\x16\x41\xbe\x51\x9f\x97\x91\xcb\xd9\xfa\x07"
- "\xfc\x2e\xaa\x6e\x04\x5a\x6e\x97\x79\xc9\x27\xb9\x27\xe7\x5f\x86"
- "\x9e\xa7\x90\x2b\x96\xe3\x3c\x85\xa0\x2a\x58\xea\x19\x9f\x0a\x22"
- "\x5c\xce\xb4\x8e\x3a\x9f\x7c\x6c\x9e\xf1\x49\xf1\x8c\x2b\x9f\x46"
- "\x79\xfe\x40\xae\xd0\x70\x3e\xf9\x58\x38\x9f\x7c\xe6\x79\xc7\x27"
- "\x85\x57\xfb\x7f\xfb\x8d\xa7\xe5\x63\x15\x38\x9e\x06\x3e\x79\xd8"
- "\x9f\x0a\x1a\x5c\xce\xe0\x8e\x3a\x9f\xc6\x94\x7a\xc6\xa7\x31\xf6"
- "\x3e\x7c\x1a\xdd\x71\xae\x7c\x4c\x25\xe7\xd3\x18\x03\xe7\x93\xa2"
- "\xd9\x3b\x3e\x8d\xf5\xe0\xfc\x87\x07\xe3\x3e\xf9\xb8\xbd\x38\xee"
- "\x13\x60\xdc\xe7\x19\x9f\x0c\x11\x2e\x67\x86\x47\x9d\x4f\xe3\x16"
- "\x79\xc6\xa7\x71\x7b\x5c\xf9\x34\xca\xe3\x31\xf9\x38\x1d\xe7\xd3"
- "\xb8\xf9\x9c\x4f\x63\xb3\xbd\xe3\xd3\xb8\x03\xa3\x32\x3e\x91\xfb"
- "\x2e\xc5\xf1\x09\xf0\xc9\xc3\xfe\x64\x68\x70\x39\xe3\x3c\xea\x7c"
- "\x52\x5a\x3c\xe3\x93\xef\xe2\x3e\x7c\x1a\xdd\x71\x83\xdc\x97\xc7"
- "\x03\x96\x2b\xdb\x38\x9f\x94\x73\xbc\xe3\x93\x6f\xe4\xe8\xd8\xd1"
- "\xe3\x6d\x68\x47\x0b\x60\x47\x7b\xc6\xa7\xc2\x08\x97\x33\xd9\xa3"
- "\xce\xa7\xf1\x06\xcf\xf8\x34\xbe\xd3\x95\x4f\xa3\x6c\xdf\xca\xc7"
- "\x97\x73\x3e\x8d\xdf\xc9\xf9\xe4\xdb\xe8\x1d\x9f\x26\x78\xb0\xff"
- "\x73\xe0\x73\x58\xfd\x6d\x3e\x55\xd9\xf5\x65\xf3\xa9\x16\x7a\xc6"
- "\x2b\xd5\x5b\x57\xd7\xe6\x53\xc5\x72\x5e\xa9\xc2\x38\xaf\x26\x64"
- "\x7a\xc7\x2b\x95\x5b\xff\x8f\x43\x9d\xdf\xea\x6f\xf7\xf9\x2f\xbd"
- "\xbe\xec\x3e\x3f\x0f\xe5\x9f\xff\xe2\xab\x6b\xf7\xf9\x8b\xf2\xcf"
- "\x4f\x94\x7f\x7e\x5e\xca\x3f\x7f\x0f\xe4\xdf\xc0\xe7\xbe\xfa\xdb"
- "\x7e\x81\xe4\xfa\xb2\xfd\x02\x4a\x3c\xe3\x55\xc0\x95\xab\x6b\xfb"
- "\x05\x54\x70\x5e\x05\xe4\x71\x5e\xf9\x9b\xbc\xe3\x55\xa0\xca\xdb"
- "\xf3\x62\xfd\xed\xbf\x89\xd7\x99\xfd\x37\xd1\x43\xfb\x6f\xe2\x55"
- "\xb6\xff\x26\x8a\xf6\xdf\x44\xd1\xfe\x0b\xf4\xd2\xfe\x9b\xe8\x95"
- "\xfd\xd7\x87\x57\x62\xbf\xba\x29\xe2\xfa\xb2\x01\x27\x59\x3d\xe3"
- "\xd5\x4d\x4f\x5d\x5d\x1b\xf0\xa6\x60\xce\xab\x49\x66\xce\xab\x49"
- "\x73\xbd\xe3\xd5\x4d\x6e\xe3\xdf\x0e\x75\x3e\xad\xbf\x1d\x78\xb3"
- "\xe2\xfa\xb2\x03\x83\x3c\x1c\xff\x06\xd9\xaf\xae\x1d\x18\x24\x8e"
- "\x7f\x83\xc4\xf1\xef\x4d\x5e\x8e\x7f\x6f\xf6\x60\xfc\xeb\xc9\xbc"
- "\xdf\xe4\x28\xb4\x01\xed\xd9\xf9\xf5\x01\x40\xff\x80\x44\x22\xef"
- "\x0e\x06\x7e\xa9\x80\x5f\x5b\x35\xa4\x27\x1b\xf8\x65\xb6\x91\x27"
- "\x37\x9e\xa1\xb5\x6d\x76\xd2\x0d\xbc\xba\x02\x76\xa0\xd1\xdc\x8a"
- "\x67\xf4\x7e\xd6\x24\xbf\xc5\xbe\x6c\x63\x20\x41\x7e\x21\xfd\xed"
- "\xaa\xa9\xa0\xfb\x8a\xe3\x18\xff\x54\xa5\x79\xb6\xec\xe2\x25\x8b"
- "\x2f\x9c\xa1\x1b\x4c\x94\xd6\xc4\x58\xd1\x77\x64\x60\x4d\x4c\x03"
- "\x09\x6f\x26\xbe\x9a\xa7\x91\x2f\xb7\xbc\x83\xe9\x46\x73\x03\x41"
- "\xbf\x9f\x6c\x0e\xfc\x8c\x36\xc8\xf6\x85\x56\x85\xfe\x9b\xf0\x5c"
- "\xa1\xe4\xa3\xc9\x78\x3e\x8f\xf1\xbf\xef\x9c\x2a\xe3\xff\x17\xda"
- "\xc0\x02\x3c\x9f\x38\xea\xb6\xe0\x2d\x6c\xfe\x4f\x38\xa3\x9e\x2a"
- "\xd5\x71\x43\x2c\xa5\x50\xc7\x49\xb5\x16\x33\xc1\x7a\xd6\x5a\xca"
- "\x49\x4a\x3c\x09\xac\xed\x6e\x25\xc9\x16\x6a\xae\x4d\x3d\x47\xc2"
- "\x3b\x71\x5d\x00\xf1\x74\x4b\x27\xe7\xf7\x2d\x1a\xe1\x8c\x76\x2a"
- "\xfc\xb6\xd5\xd6\x11\x12\xb0\x15\x68\x6d\x23\x72\x76\x5e\x53\x4e"
- "\x94\x40\xaf\x18\x63\x6a\x13\xd2\xae\xce\x68\x3b\x85\xf4\x8c\x81"
- "\xe7\xf3\x7a\xd7\x1b\xfc\x8b\x8f\x63\x1a\xd2\x16\xf7\x99\x1a\x75"
- "\x66\x96\x47\x7a\xce\x79\x97\x4a\x8c\x89\xdd\xa4\xd6\x46\x08\xe0"
- "\xa3\xfa\xd3\x88\x06\xc0\xd7\xcd\x5e\xca\xed\xc9\xba\xd1\x99\xaf"
- "\x9c\x52\x81\x76\xab\x3d\xbb\x60\x29\xaf\xe3\x98\xf6\xa1\xf1\x55"
- "\x10\xe1\xc0\xd7\x94\x67\x47\x86\xaf\x29\x7e\xa3\x8b\xaf\xd1\xb6"
- "\x5f\xd5\x0d\x23\xc3\xd7\x94\x67\x38\xbe\xd4\xa9\x1c\x5f\x53\x16"
- "\x39\xf0\x35\xa6\xfd\xea\xe1\x4b\x1d\xc2\xf1\x35\xb9\xcd\x3b\x7c"
- "\x4d\x71\xeb\x87\x76\x78\xf3\xac\xc1\x33\xd0\xd6\x06\x7c\x89\xf2"
- "\x6b\x42\x93\x07\xf8\x72\x92\x5f\xb7\x1e\x1c\x19\xbe\x6e\x5d\x37"
- "\xca\xf8\x1a\x65\x9b\xfb\xd6\xb9\x23\xc3\xd7\xad\x7f\xe1\xf8\x9a"
- "\x6a\xe2\xf8\xba\x75\xaf\x03\x5f\x13\x9a\xae\x1e\xbe\xa6\x66\x73"
- "\x7c\x4d\x5d\xe4\x1d\xbe\x82\xbd\xf2\x7f\xd5\x7f\x7c\x30\x3d\x1d"
- "\xc7\x07\xf6\x6c\x83\x28\xbf\x26\x1e\x1f\x1a\x5f\x06\x27\xf9\x35"
- "\x7d\xda\xc8\xf0\x35\xad\x66\x74\xf1\x35\xda\xe3\x84\x69\x79\x23"
- "\xc3\xd7\xf4\x9b\x39\xbe\xa6\x85\x71\x7c\x4d\x57\x39\xf0\x35\xf1"
- "\xf8\xd5\xc3\x57\x70\x1b\xc7\x57\xf0\x5e\xef\xf0\x35\xdd\xbd\xff"
- "\xe7\x61\xcd\x6b\x6b\x9a\x71\x4c\x03\xf8\x12\xe5\xd7\x83\xdb\x3d"
- "\xc0\x97\x93\xfc\xd2\x6c\x19\x19\xbe\x34\xb3\x46\x19\x5f\xa3\x3c"
- "\xb6\xb9\xcd\x3a\x32\x7c\x69\x5e\xe2\xf8\xba\xad\x84\xe3\x4b\x13"
- "\xeb\xc0\xd7\x83\xdb\xaf\x1e\xbe\x6e\x5b\xc4\xf1\x75\x9b\xca\x3b"
- "\x7c\x69\x3c\xf0\xff\xea\xc9\x7c\xfc\x9d\xf3\x71\x1c\x66\xcf\x2e"
- "\x14\xe5\xd7\xb2\xc7\x86\xc6\x57\xa1\x93\xfc\xba\xe3\xf4\xc8\xf0"
- "\x75\x87\x7e\x74\xf1\x35\xda\xe3\xb1\x3b\x22\x46\x86\xaf\x3b\x4e"
- "\x70\x7c\xdd\x41\x38\xbe\xee\xa8\x76\xe0\x6b\xd9\x63\x57\x0f\x5f"
- "\xb7\xef\xe5\xf8\xba\x3d\xd6\x3b\x7c\xdd\xe9\x81\xff\x1f\x4f\xd7"
- "\x11\x66\x96\x8d\x6c\x0c\x39\xf3\xd1\x91\x61\x6c\xc6\xa5\xeb\x7b"
- "\x0c\x39\xe3\x83\x91\x61\x6c\xe6\x43\x1c\x63\x33\xa2\x38\xc6\x66"
- "\x86\x5e\x9b\x31\xe4\x8c\x40\x8e\xb1\x3b\xeb\xbc\xc3\xd8\xcc\x51"
- "\x5c\xff\xd0\xaa\x46\x36\x8e\xbc\x6b\xcf\xc8\x30\x76\xd7\x33\xd7"
- "\xf7\x38\xf2\x2e\xcd\xc8\x30\x76\x57\x21\xc7\xd8\x8f\x2a\x39\xc6"
- "\xee\xda\x79\x6d\xc6\x91\x3f\x8a\xe7\x18\xfb\x91\x97\xeb\x36\x5a"
- "\xaf\xce\xbf\x0c\xbc\x6e\x73\x8f\x6e\x64\x63\xc9\x7b\x7c\x47\x86"
- "\xb1\xbb\xdf\xbf\xbe\xc7\x92\x77\xa7\x8f\x0c\x63\xf7\xc8\x38\xc6"
- "\xee\x0e\xe1\x18\xbb\xdb\x7a\x6d\xc6\x92\xda\x06\x8e\x31\x6d\x9e"
- "\x77\x18\xbb\x27\x69\xf4\xd6\x9b\x42\xea\x47\x36\x9e\x0c\x59\x37"
- "\x32\x8c\x85\x4c\xbb\xbe\xc7\x93\x3f\x6e\x1d\x19\xc6\x42\xa2\x39"
- "\xc6\x7e\x9c\xcb\x31\x16\xb2\xfc\xda\x8c\x27\x7f\x3c\x8f\x63\xec"
- "\x1e\x9b\x77\x18\x0b\x31\x8d\xde\x3a\xd9\x7d\x73\x47\x36\xa6\xbc"
- "\xf7\xd8\xc8\x30\x76\xef\xd6\xeb\x7b\x4c\x79\xef\xa2\x91\x61\xec"
- "\xde\xa3\x1c\x63\xb3\x2c\x1c\x63\xf7\x96\x5f\x9b\x31\xe5\xac\x12"
- "\x8e\xb1\x59\x91\xde\x61\xec\xbe\xf9\xa3\xb7\xbe\x37\xdb\x30\xb2"
- "\x71\xe5\xec\x07\x46\x86\xb1\xd0\xb3\xd7\xf7\xb8\x32\x74\xdf\xc8"
- "\x30\x36\x7b\x16\xc7\x58\x68\x04\xc7\xd8\xec\x19\xd7\x66\x5c\x19"
- "\xaa\xe0\x18\xbb\xcf\x3b\x7f\x14\xf2\xd9\xfd\xfc\x5f\xad\x59\x9f"
- "\xb0\x32\x76\x4d\x94\x66\xcd\xfa\xf8\xb8\x8d\x9a\x4d\x6b\x36\x47"
- "\x3f\x3c\xf3\xa5\x10\x4d\x5c\xa2\x26\x6e\xcd\xfa\x17\xc4\x84\xa8"
- "\xf1\xe4\xe9\xe8\xd8\x95\x89\x98\x02\xb9\x5f\x58\xbf\x2e\x7a\x7d"
- "\xbc\x26\x2e\x7a\xe3\x4b\x6b\xe2\xa2\xf1\xff\x4d\x9a\xd5\x1b\xe2"
- "\x20\x61\x55\xf4\x9a\x84\x68\xcd\xf3\x2f\xad\x5e\x1d\x1d\xb7\x69"
- "\x3c\x59\xfc\x52\x6c\xfc\x1a\x5d\x6c\xb4\x66\xfe\xe2\x47\x67\x2d"
- "\x5d\xf0\xaf\x4b\x1f\x79\x04\x83\x93\x39\xc5\x26\x0b\xa6\xd9\xa5"
- "\xb9\x80\x39\x45\x8b\xfc\xa7\x7b\x6a\xc1\x5a\xc4\xf8\xb8\x3b\xda"
- "\x49\xe0\xf6\x38\xa2\xc8\x6a\x27\x4a\x7d\x3b\x51\x69\xd6\x92\x30"
- "\x9a\x75\xca\x9c\xd3\x4e\x82\x68\xce\x5a\xb5\xa0\xbf\x29\x94\xea"
- "\x27\xeb\xcc\xbe\x36\x0d\xa4\x05\x0a\x59\x3d\x4b\xe0\x9d\x20\xa0"
- "\xad\x82\xea\xa7\x98\x9a\xe4\x3f\x8d\x32\xfb\xda\x49\xca\x39\x22"
- "\xa7\xe3\xef\x6f\xf8\x93\x60\x96\x1f\x8a\x27\xf8\x27\x23\xf2\x9f"
- "\x98\xe1\x6a\x24\xf2\x39\xd9\x70\x19\xe0\x2a\x83\xab\x0e\xae\x06"
- "\xb8\xda\xe0\xb2\x12\xf9\x03\x0a\xb8\x54\x70\x05\xc1\x15\x0c\xd7"
- "\x0c\xb8\x4a\xe0\x2a\x87\x0b\xf2\x3e\xd0\xca\xcb\x79\xc0\x42\xe4"
- "\x0f\x6a\xe0\x5a\x08\x57\x24\x91\xff\x0b\xe4\xff\x97\x39\x70\xed"
- "\x87\x6b\x11\x5c\x11\x70\x61\x7a\x3a\x5c\xf8\xbe\x95\x3f\x9b\xbb"
- "\x1c\xae\x3c\x02\xf5\x1c\xfa\x9a\x7b\x00\x2e\xf8\xee\xdc\x66\x22"
- "\x7f\x68\x3e\x5c\x50\xdf\x87\xac\x7d\xf2\x85\x39\xfd\xbf\x7c\x88"
- "\x32\x93\x02\xb6\xde\x66\x62\x31\xf0\xe4\x73\x16\xd3\x34\xe2\x43"
- "\xb3\xec\x44\x77\x0f\x91\x9d\x97\xcf\x99\x62\x4c\x47\x39\x73\x53"
- "\x28\x8b\xe9\x08\xf7\x48\xb3\xae\xed\x73\xd4\x26\xa2\x53\x63\x4c"
- "\xb3\xe1\xe1\x6d\x8e\x5a\x7c\x3f\xc2\x24\x53\x29\x59\x0c\xb8\xed"
- "\x75\xb9\x34\x25\xa2\x80\xc5\x7e\x03\x1a\xe2\xb9\x2c\x9a\x59\xa7"
- "\xa4\xca\x2a\x03\xf6\xf9\xf2\xcd\x58\xaf\x9f\x5c\xe2\xfd\x0b\x9e"
- "\x43\xdd\xcc\x7e\x6b\xd5\x50\x4f\x05\xde\xd3\x2c\x9b\xa6\xdb\x6f"
- "\xb7\x0e\xff\xbf\x52\x18\x5d\x42\xb3\x77\xe7\xe1\x38\xbb\x3c\xf9"
- "\x3f\x49\x13\xbc\xd7\xed\xb7\x67\xae\xe6\xe9\x00\xda\xc4\xcb\x96"
- "\x43\x1d\xd2\xa5\xb2\xba\xfd\xd6\x6a\x68\xde\x9e\x48\xaa\x07\x0c"
- "\x89\xe5\x09\x50\x1e\xcd\x2e\x0e\x83\x7c\x26\x4c\xa7\x86\xe8\x03"
- "\xd2\xff\xf0\xdb\x48\x73\x76\x9b\xf0\x37\x60\x2b\xb1\xb0\xfb\xb4"
- "\x30\xc2\x7f\x03\x09\xca\xba\x36\xf9\x03\xaf\xdd\x57\x47\x64\xe5"
- "\x4f\x63\xbd\x1f\x58\x92\x52\x47\x05\x4d\xb2\x0f\x7c\xff\x81\xa7"
- "\x7a\xbf\x3b\x65\x4f\x04\xc6\x4f\x15\xb6\xcf\x6e\xc5\x18\x7c\xf8"
- "\x2e\xd6\x2d\x7f\x12\x51\x14\xff\x3b\x51\x62\x1b\xbb\xb6\x3f\x90"
- "\x24\xc5\xa1\xc3\x77\xe4\x90\xff\x89\xa7\x52\xa8\x53\xd9\xbf\xa2"
- "\xac\x3d\x3f\x69\xe3\x34\x7d\x60\xaf\x49\xe6\xcb\x62\xe5\x69\xee"
- "\x60\xb4\xbc\x24\x3e\x37\x23\x3f\xb1\x7c\x41\x5f\x9a\x8b\xf7\x18"
- "\xe7\x2e\x00\x50\xab\x49\x9e\x71\x80\xd3\x68\x77\x1e\x96\x83\xf9"
- "\x85\x9c\x22\xf8\x7f\x4e\xae\x00\xed\xb5\xa7\x11\xad\x66\x3d\x09"
- "\x6b\x92\x3f\x38\xc5\x9e\x75\x2c\x02\x9e\x43\xbf\x3b\xb6\x1c\xf2"
- "\xef\x63\xf4\xd6\x17\x87\x9a\xe4\x0f\xaa\xe0\xd9\xf2\xde\xd8\x97"
- "\x9c\xce\x32\x21\xeb\x58\x6c\xd7\xf6\x07\xc3\x4c\x32\x8d\x55\x6a"
- "\x03\x93\x71\x8e\x7c\x22\x4f\x1f\x9c\x63\xf6\x3d\x16\xdb\x93\x40"
- "\xeb\x76\x9c\x22\x04\xbe\x49\xbb\x2f\xd3\xea\xa4\x25\xd4\x9a\xf3"
- "\xbf\x08\xa9\x8e\x6c\x24\x29\x2b\x49\xf0\x84\xad\xd4\x1c\x6e\x27"
- "\x01\x13\x1a\x03\x68\xcd\x92\x46\x90\xd1\x9d\x24\xa9\x8e\xb6\xd6"
- "\xea\x3e\x20\x49\x67\x89\x6a\xcb\x1a\x12\x94\xb2\x84\x9a\x93\xab"
- "\xa9\xd5\x98\xd8\x48\x6a\x2d\x70\xe9\x6a\x20\xdf\x09\xb8\x3e\x20"
- "\x29\xaf\x90\xff\xc7\xde\xfb\xc0\x37\x55\x64\x8b\xe3\x27\xb7\x29"
- "\xa4\xb5\x7f\x02\x56\x2d\x5a\x31\x60\xd5\xa2\x2d\x54\x17\x5d\x74"
- "\x8b\x44\x28\x58\x14\x68\x85\x8a\x55\x10\x8a\xb6\x58\xb0\x40\x2c"
- "\x05\x02\x16\x5a\x22\xba\xa5\x16\xa8\x2b\xcf\xad\xd2\x7f\x2e\x75"
- "\xb7\x2a\x2e\xd5\x65\x9f\xf5\x7d\xf0\x99\x5d\xaa\xaf\x8b\x40\xba"
- "\xfb\xf0\xf3\xed\xbe\x1f\xae\x91\x57\xd9\x3e\xb6\x40\xb4\x81\x84"
- "\x36\xc9\xfc\xce\x99\xb9\xb7\xbd\x49\x13\xa4\xca\xba\xff\xac\x5e"
- "\x72\xef\xcc\x99\x33\x67\xce\xbf\x39\x33\x77\xee\x8c\x76\x0e\xfa"
- "\xd3\x4d\x67\x21\xea\x88\xe9\x2c\xa6\x9d\x82\x92\x5c\xe6\x39\x7c"
- "\x88\xe0\x3e\x84\x4c\x8f\x23\x76\xe3\x29\xd0\xd6\xcd\xa7\x6f\xcb"
- "\x3e\x85\x7a\xa4\xa5\x37\xfa\xaa\xdc\xf3\xdb\x46\x75\xf5\xac\x65"
- "\x1e\x57\xc5\x0f\xa3\xec\xf0\x23\xab\x5f\x5b\x88\x66\x3a\x37\x14"
- "\xdb\x4b\x30\xbe\x6d\xf5\xf1\x8b\x3d\xa4\xe7\x3f\x04\xf4\xc5\xa0"
- "\xe4\x53\x9e\x23\xba\x1e\xf5\xe7\x87\xc9\x99\x1e\xe6\x22\x78\x6a"
- "\x37\xf2\xa8\x40\x6e\x7f\x41\x98\x09\xb4\x58\x87\xc9\xae\xb9\xfe"
- "\xa8\x4a\x86\x24\x93\x61\x4a\x7d\x32\xcc\x4e\xbb\x66\x2c\xd7\x0b"
- "\x1f\xcf\x9b\x58\x42\xb0\x98\x8e\xf2\xbf\x3e\x51\xd0\xf7\xc3\x62"
- "\x4a\x93\x7d\x29\xd9\xed\x16\x1f\xd9\x75\xf9\x41\x93\x37\x7a\x77"
- "\x03\x93\x98\x1b\xf5\x79\x12\xeb\x89\x8f\x9a\xe3\x61\x6e\xdf\xb6"
- "\xba\x54\xf4\x97\x51\x74\x4e\xaa\x80\x9f\x34\x1d\xf3\x8d\x86\xb5"
- "\xfc\x3e\x85\xea\xf1\xd5\xe6\x57\x91\x6f\xcd\x6c\x27\xf8\xe5\x55"
- "\xdb\x8b\xd0\xf7\x6e\xdb\x5d\x45\x76\xe8\x8b\xae\xcf\x38\xff\xf2"
- "\x6b\x64\x33\xf1\x0c\x75\x8c\x55\x2e\x37\xf6\xe3\xb1\x40\xb8\x5d"
- "\x9a\xa4\x65\x58\x9e\x55\xd6\xa5\xca\xb2\x3f\x25\x74\x73\x12\xf1"
- "\x4e\x8b\x74\x15\x63\x7a\xf8\x71\x69\x52\x25\x7d\xa3\x89\xcf\x7b"
- "\xf8\x59\x92\xd2\xa4\x17\x84\xce\x1c\x34\xf9\x3d\x4b\xc4\x3f\xb4"
- "\x49\xf4\x03\x22\xbe\x98\xf4\xf6\x80\x5d\x08\x3d\x16\xf6\x5d\x87"
- "\x34\xdd\xde\xed\xb3\x84\xf9\x10\x4e\x73\x5c\xf0\x41\xea\x8d\xf8"
- "\x7d\xae\xab\x62\xd2\x31\xbb\x46\x5b\xe8\x27\xcf\x8a\xdf\x55\xd1"
- "\xb9\x95\x48\x4b\xd8\x09\xe9\xce\x08\xfc\x1d\x8e\xbf\xd1\x07\xda"
- "\xa9\xaf\xe5\x78\x2f\xa3\xfb\x57\xae\x64\x8e\xf4\xd9\x40\x67\x54"
- "\x22\xdf\xef\x4c\xb4\xc3\xe2\x9d\x84\xa7\x82\xce\xee\xc4\x34\x82"
- "\xc1\xf4\x34\x3b\xe4\x6e\x11\xf8\x27\xda\x9d\xe4\xb3\xfc\xf1\x2f"
- "\x11\xf8\x05\x5e\xc2\xa7\xe0\xae\x7d\x89\x75\xcb\xb8\xcb\x14\xdc"
- "\xdb\x30\x4d\xc1\x9f\xbe\xa2\xbf\x8e\x06\xac\x23\x4a\xdd\x86\x97"
- "\x5f\x62\x4e\xc2\x81\x79\xfb\xed\x50\x90\x47\x79\x5b\x31\x8d\xca"
- "\xaa\x74\x2a\xec\x40\x16\xe2\x38\xc4\x71\x74\xda\x61\xa9\x9f\xdf"
- "\x40\x1e\x45\x2b\xbe\x56\xe0\xba\x4b\xa7\xe0\x1a\xc0\xa3\xe8\xd4"
- "\x27\xd5\xb2\x4c\x09\x6f\x14\xe1\x45\xf8\x49\x76\x78\x6c\xa2\xba"
- "\xed\xc8\xf3\x2c\x39\x2f\x1b\xf9\x9e\xac\xa6\x59\xf6\xab\x4d\x58"
- "\x5e\x23\xeb\xeb\x28\xf2\x59\x4a\x3e\x9d\xeb\xc9\x2a\x6e\xd3\x93"
- "\xdd\xa0\x7f\x04\xb4\x33\x03\xe2\xa9\x09\xf0\x8f\x5a\x82\xf3\x55"
- "\xdc\x36\x9d\x9f\x6b\x7a\x25\xeb\x42\x18\xab\xdf\x59\x9e\x12\xdc"
- "\x8d\x69\x47\x95\x33\x45\xb7\x23\x8c\x5d\xba\x2d\xe4\x9e\x89\x9b"
- "\xc6\x80\x64\xab\xb1\x53\xbc\x4a\x3a\x97\x66\x4b\x70\x82\xad\xc6"
- "\x07\xbe\xba\x7c\xab\x71\x13\xb3\x9e\x90\x7e\xf4\x00\x9d\x11\x3d"
- "\xb4\x3e\xf0\x47\x7c\xfd\x1f\xeb\xc5\x38\xae\xe4\x36\x7e\x76\xfa"
- "\x69\x29\x6d\xb3\xcd\xf1\x15\xb7\x3d\xbc\x5f\x41\xf9\x2f\x62\xdc"
- "\x47\xb1\x1f\xc6\xdb\x05\x55\x92\x88\xff\x7c\x08\x5b\x47\xe9\x14"
- "\x1b\x62\x5c\x5a\xaf\xca\x63\x75\xf9\x66\xc1\xbb\xb4\x3b\x89\x8f"
- "\x9c\x5e\xcf\xbd\x56\xa2\xd9\x57\x93\x6f\xa6\x36\x94\x9a\x99\xcf"
- "\xe6\x71\x59\xe9\xac\x5d\xc3\x5a\x8a\x5b\xd3\xae\xc8\xac\x05\x86"
- "\xb6\x6d\x1e\x62\x1b\xf8\xf8\x17\x63\xf3\xd3\x8e\x6b\xf3\xcd\x74"
- "\xb6\xf2\x8e\x4d\xe1\xba\x69\x35\xcc\xda\x33\x3a\xdf\xea\xaa\x48"
- "\x9b\xa4\x9c\x5d\x3b\x34\xbc\x69\x93\x94\xb6\xd7\xc9\x6d\xc7\xba"
- "\xf8\x3b\xeb\x09\xd5\xfc\x4c\x6d\x7c\x4e\x0b\xb9\xd6\x09\xfd\x4b"
- "\x13\x95\xc5\xb6\x1b\xeb\x15\x3e\x79\x1c\x74\xa6\xf8\x88\x93\xd2"
- "\xe4\xf0\xcc\x12\x2b\xf0\x7d\xf2\xb7\xd5\x35\x0d\x91\x2e\xbe\xfe"
- "\xe5\x08\x8e\x0b\x32\x3d\x1f\x30\xe1\x17\x27\xa7\xcc\x91\xf1\x51"
- "\x9e\x22\xab\x3a\x39\x5e\x1f\x7a\x1d\x93\x27\x5e\x44\xbb\xf4\x41"
- "\xda\xf5\xe9\x37\x6f\xd7\xe4\xa6\xc1\xed\xba\x3b\xfc\xd2\xb6\xeb"
- "\xee\x90\xeb\xbf\x55\xed\x32\x0c\x6e\xd7\xdd\xbf\xfe\xe6\xed\xba"
- "\xbb\x2c\x48\xbb\x3e\xbd\xc4\xed\xea\xbc\x88\x76\xa5\x0e\x6e\xd7"
- "\x94\x6d\xdf\xbc\x5d\x53\x72\x06\xb7\x6b\xca\xaf\x2f\x6d\xbb\xa6"
- "\xec\x1f\xb2\x3f\xdc\xbe\xdb\x21\xfc\xa1\x71\xc9\xd0\xfd\xa1\x31"
- "\x79\xb0\x3f\xbc\xe7\x85\x01\x7f\x78\xcf\xc6\x6f\xe4\x0f\xb7\x2f"
- "\x97\x63\x8d\x7b\x66\x0e\xf2\x87\x95\xcb\x53\x83\xfb\xc3\x7b\x6e"
- "\xe0\xfe\x70\xdb\xf2\x21\x8e\xa3\x8d\x8e\x7e\x7f\x18\xbd\x3c\xd5"
- "\xcf\x1f\xc6\xec\xc6\xfe\xf3\x9e\x8c\x6f\xe6\x0f\xef\xc9\x18\xec"
- "\x0f\x8d\x4d\xfe\xfe\xf0\x9e\xb2\xd0\x7a\x58\x9f\x14\xcc\x1f\x66"
- "\x7a\xce\x30\xa1\x1b\xf5\x49\x43\xa4\x27\xe4\xfe\xef\xa8\xf3\xcd"
- "\x17\xae\xab\xae\x79\x68\x75\x4d\x0d\x39\xff\x85\x63\xc3\x2a\x8c"
- "\x41\xf4\x1b\x5f\x05\xe9\x44\x09\x48\x47\x12\x3a\xc0\x66\x76\xc3"
- "\x78\x13\xea\x84\x05\xd2\x8e\xd4\x74\xc3\x91\x84\x13\xc0\x22\x0e"
- "\x56\xb1\x9f\xaf\x35\x1a\x8b\x48\x37\xa7\x7a\x6d\xc5\xee\x21\xea"
- "\xe6\xd4\x36\x45\x37\x8f\x78\x50\x37\xd7\x92\x3e\xa6\xa7\xd8\xba"
- "\x4f\xca\xba\x99\x3e\xaa\x5f\x3e\x16\xa1\x9f\x41\x75\x13\x6d\xc2"
- "\x5f\x37\xeb\x1a\x84\x6e\x4e\xfb\x62\xb0\x6e\xd6\x35\x04\xd7\xcd"
- "\x69\xbf\x11\xba\x59\xd7\x30\xb4\x36\x4c\xab\x1c\xd0\xcd\xba\x06"
- "\x3f\xdd\xbc\x71\xad\xd1\x55\x31\xad\xf3\x9b\xe9\xe6\xb4\x4e\xa5"
- "\xed\xb5\x72\xdb\x31\x2d\xdd\x5f\x37\xd3\x13\x42\xca\xb0\xfc\xbd"
- "\x1c\xf4\x87\x51\x27\xa5\xf4\x6e\x2f\xc6\xb4\xbe\x4a\x4d\x7c\xa6"
- "\x97\xb9\xe8\x8c\x76\x26\x4d\x04\xb6\x2e\x29\xca\x85\xe3\x4d\x97"
- "\xab\x40\xc7\x22\x0f\x8e\x66\x7d\xf1\x80\xb4\xc7\x32\x57\x52\x0c"
- "\xf2\x2c\x11\x7f\x47\xd6\xae\x85\x38\xbc\xe2\x6b\x65\xbe\xe2\x7d"
- "\x2a\x5b\x17\x1f\xb9\x7d\x2d\x24\xc7\x3a\x41\x87\x34\xe4\xc4\x6e"
- "\xd6\x43\xac\x07\xe2\xe8\x9e\x59\x1a\xd3\xea\xcf\x81\x96\xe6\x1a"
- "\x7d\xd1\x58\x9f\x39\x96\xb1\xd5\x49\x50\x5f\x84\xf4\x48\x10\x5f"
- "\x2f\xb1\x66\xef\xba\x24\x89\xc5\xec\x7e\x93\x3d\x9d\xc3\x69\xf2"
- "\x25\xae\x2d\x43\x1d\x2a\x63\xa5\x05\x54\xaf\x91\xce\x0a\x66\x37"
- "\xae\xdd\xc2\x5c\xf1\x91\xdb\xce\x41\x72\xfd\x5a\x48\xac\x5b\x0b"
- "\x49\xac\x2f\x49\x42\x1e\xe4\x2c\x7a\x4a\x4f\x72\xc7\x36\x60\x5d"
- "\x6b\xb1\x2e\x94\xa5\x77\x1b\xd6\xe5\xc1\xba\xce\x60\x5d\xa7\xb1"
- "\x2e\x0b\xd6\x65\x11\x75\x0d\x8d\xe7\xd3\x73\x2e\x34\x27\x9c\xb9"
- "\x71\x34\xed\x5d\xfb\xe7\x58\xf3\xf0\x0c\x9a\x1f\xee\x79\xba\x60"
- "\x88\xfa\x3e\x3d\xe4\xf7\x3f\x3b\x7e\x09\x09\x4c\xd7\x17\x3f\xe7"
- "\xd9\xcf\x58\xa6\x07\xe0\xd9\x5f\x42\x32\xd9\xdc\x11\xf7\x29\xb4"
- "\xb3\xbe\xf8\x0f\x93\xba\x87\x58\xd7\x8c\xc4\x50\x75\x55\x58\x58"
- "\x7b\x5f\x02\x8d\x17\x77\xb7\xec\x90\x98\xb9\x37\x21\xbf\xf9\xe0"
- "\xd1\x5e\x58\x6c\xa6\x39\x68\x66\x36\x3c\x02\xba\xe3\xd2\xac\x8e"
- "\xd2\x3f\xd2\x7c\xde\x8c\x26\xff\xf9\xbc\x19\x87\x40\xca\x30\x81"
- "\x34\xb3\x01\xa4\xfb\x93\x00\xe1\x02\xae\xdc\xcc\xd7\x47\xc3\x26"
- "\x0f\xfb\x33\x8e\x53\xcb\xb7\xe3\x58\x38\x73\x9c\xc6\x6e\x5d\x4b"
- "\xf3\x5b\x19\xcb\x90\x7f\x7f\xc1\x3e\x28\x96\xee\x09\x9f\xa9\x08"
- "\x2e\x3f\x29\x65\x14\xc4\x3a\x87\x67\x78\xa2\x76\x77\x78\x70\xfc"
- "\xd6\x17\xff\x9a\xf1\x7c\xe5\xee\xaa\x3e\x1a\xcf\x3e\x46\x7e\xe0"
- "\xde\x25\xb1\x9a\x32\x1c\x6f\x6b\xe2\x19\x8b\xa7\x39\xdb\x9c\x1a"
- "\xbc\x48\xf6\x5c\xee\x91\xb6\x56\xd2\x0f\xd2\xc5\x7a\x91\xae\x27"
- "\x7d\xdc\x21\xf7\xd9\x8e\xb0\x9b\x73\xc9\x06\xbc\x58\xbe\xf4\x0b"
- "\x48\xb0\x1d\xf3\x02\xea\x74\xce\x62\xaf\x8e\xec\x28\xc7\xfa\xc8"
- "\x1f\xe0\x04\xb6\xa8\xf4\x4b\x88\x46\x1d\x8a\x22\x7b\xf0\xa1\x3d"
- "\x64\x1e\x8b\x75\xa3\x5d\xfb\x36\x9d\x85\x58\xf2\x13\xb4\x2f\xb2"
- "\xad\xdb\x0e\xbe\x33\x49\x31\xbb\x56\x42\x9c\xe7\x4c\xc1\x48\xc7"
- "\x99\x82\xcb\x5f\xf6\x41\x5c\x8c\x09\xf4\xb5\x2b\x51\x77\x57\xa1"
- "\x7d\x9c\x46\xfb\xe8\x16\xf6\xd1\xaf\xaf\xcf\xb5\x96\xd3\x37\x37"
- "\xdc\x36\xb6\xc9\xb6\xb1\x0e\xf5\x75\xed\x80\x6d\x78\x56\x25\x49"
- "\xb5\x12\x03\xa4\x11\xf9\x3e\xbd\xba\x7e\xd3\x70\xf2\xfb\xa9\x6c"
- "\xf4\x52\x03\x8d\xcd\x32\x3d\xcc\xb3\x17\x65\x11\x3e\x4e\x32\xb0"
- "\x6d\xbb\x3b\x0e\x66\x75\xc1\xc0\x98\x6e\xd6\x1f\x7b\xaf\xcd\x6f"
- "\x36\xcc\x65\x67\x8e\x4b\x19\xb9\x98\xae\x33\xcc\xbf\x49\x8f\x72"
- "\xfc\xa3\x18\x03\xce\xea\xa0\x39\x02\xbb\x94\x31\x11\x71\x01\xbd"
- "\x97\xf8\x98\xcf\x49\xce\xac\x46\x58\xf0\x22\xcf\x3d\x51\xcb\x8d"
- "\xbe\xa8\xdd\x4d\xd6\xe5\xbd\xdc\x36\xfb\x50\x06\x27\x0a\x41\x5a"
- "\xdc\x8d\xbc\xf1\x22\x6f\x5c\xdc\x67\x64\x71\x9f\x51\x7e\x30\xbe"
- "\xc4\xce\x7c\x99\x79\x61\x0c\xf9\xa2\xb3\x99\xbd\xb0\xc8\x04\x6c"
- "\xe3\x29\xe4\x91\xb3\x83\xfc\x4b\x8c\x6f\x9d\xf0\x21\xbb\x90\x3f"
- "\xd1\xdd\xa0\x67\x15\x5e\xfd\x2f\x37\xb5\x85\x7b\x51\xcf\xc9\x8f"
- "\xc4\x6e\xd6\x44\xa0\xac\x62\x2a\xc9\xce\xd1\xee\x63\x37\x73\xbf"
- "\xc6\x65\xeb\x59\x97\x34\xb6\x6f\x5d\x92\x01\xaf\xd1\x8a\xaf\xa1"
- "\xb3\xb8\x6a\xc9\xcf\x54\xcc\x00\xf2\x33\x36\xb3\x1d\x3c\xc8\xcb"
- "\x18\xea\x97\xd6\x25\x25\x70\x9e\x3e\x81\x3c\x5d\x0a\xba\x09\x6e"
- "\xd0\x20\x5d\x7a\xa4\x19\x0e\x17\x1c\x07\xe2\xb1\x17\xed\x88\xf8"
- "\xdc\x47\x3e\x08\x75\x0d\xe3\x14\xe3\xec\x65\x06\xf8\x30\xe9\x13"
- "\xa0\xbd\x95\x4a\xcf\xb3\xcf\x69\x4e\xd4\x66\xf6\x00\x8b\xde\xdd"
- "\xc1\xf8\x3c\x52\xc6\xa4\x83\x59\x6e\x08\xad\xd3\xf7\x8f\x19\xd0"
- "\xe9\xfb\xc7\x0c\xe8\xf4\xfd\x06\xfe\x4e\x41\xa5\xd7\xe7\xab\x51"
- "\xaf\xa3\xd4\x7a\x7d\xdf\x9d\x7f\x55\xbd\x9e\x33\x74\xbd\x7e\xf9"
- "\xb4\x4a\xaf\x37\xfd\x6d\xf4\xfa\xe3\x1c\xae\xd7\x61\x7d\xd7\x72"
- "\x7d\xc5\xbe\xfb\x1d\xb0\x4b\xf7\x47\x29\x7a\xfb\xbb\x37\x48\x6f"
- "\x67\x65\xfd\xbd\xea\xed\x79\x57\x92\x01\xaf\x4b\xae\xb7\x88\xf3"
- "\xa2\xf5\xf6\xe3\x9c\x5e\x50\xf8\x47\xfa\xcb\xca\xfb\xe2\x0d\xa5"
- "\x30\x05\xf9\xd6\x11\xbb\x79\x34\x1c\x16\x3c\xec\x30\xcc\x67\x3e"
- "\xf4\x11\x5b\x49\x9f\x7a\x2d\x8c\xf9\xa2\xea\x33\x4a\x7f\x0f\x7a"
- "\xac\xa3\xca\xe6\x79\x0b\x62\x4d\xf4\x8e\x67\x79\x3c\x8b\x1e\x65"
- "\xa7\x77\x41\x48\x8f\x96\xde\xff\x78\xb7\x7a\xc1\x8b\xfe\xc4\xbb"
- "\xad\xb1\xca\xb7\xf5\x7f\x1c\xbe\x68\xf1\x8e\x88\x45\x78\x0c\xae"
- "\x8a\x59\x1d\xca\xfb\x8b\xa0\xb1\x49\x54\x63\x15\xda\x8b\xf6\x84"
- "\x34\xfb\x13\xfc\x95\xf0\xf7\x29\xfc\x0d\xc3\xdf\x7b\x88\x8e\xa1"
- "\xf5\x73\xb3\xf9\xf8\x17\xfb\xb2\x4e\xe1\x07\x67\x47\x73\x1b\xbc"
- "\x19\xa2\x4f\xca\xf7\xae\x8a\xd9\x05\xca\xfb\x90\x7e\xf8\x7e\x7e"
- "\xcc\xd6\x52\xdd\xc8\x13\xad\x78\x47\x23\x9e\x55\xf8\xc2\xf9\x33"
- "\x68\x13\xb0\xfd\x59\xf4\x2e\x15\x75\x49\xe3\x62\x05\x77\xcb\xbf"
- "\x93\xf9\x3b\x1d\xe4\x03\xc5\x79\xc2\xd7\x8a\x3a\xb0\x5e\x3b\xf6"
- "\xc3\x79\xea\x7a\x83\xf1\x03\xf3\x3c\xa1\xf2\x86\xc6\x8b\x39\x21"
- "\xd7\x7f\x4d\x4f\xf2\xb2\x21\xe2\x0a\xf9\xfd\x2b\x4b\xc8\x37\x65"
- "\x36\x79\xad\xbe\xbe\x9c\xd8\x0f\x4b\x4e\x0d\x31\x2e\x99\x13\x72"
- "\xfc\xeb\x8d\xaa\xcf\xcd\x1c\x37\x1a\xbc\x35\xf9\x26\x9a\xeb\xa4"
- "\x58\xeb\x48\x92\x07\x28\xde\x7a\x7d\xb9\x5d\xea\xc3\x98\x31\x06"
- "\xed\x71\x8e\xf3\x03\xb6\xe3\x24\xc6\xa8\xeb\x72\x62\xb7\x2f\x87"
- "\x34\xcf\x99\xf8\xc8\xe7\xd1\x07\xf5\xa2\x3f\xe8\x3d\x53\x10\x7b"
- "\xc4\xe4\x06\x5f\x6d\xbe\xc9\xe6\x69\x83\x7a\x84\x23\xff\x4b\xf4"
- "\x9e\x3f\x93\x13\x53\xb1\x12\xf8\xbb\x0d\xeb\x63\x6f\xa0\xff\xcd"
- "\x7c\x3f\x7c\x23\xfa\x1c\xf4\x19\xdc\x0f\x7f\x03\x1f\xdc\xfb\xcc"
- "\xcd\xb9\xb3\x17\x32\xf7\x91\x63\x7f\x80\xd2\xc3\xa0\x2f\x5d\x03"
- "\xd1\x84\xdf\xe6\x39\x2c\xfc\xf2\xc3\xe8\x97\xf1\xb9\x4e\xe5\x97"
- "\xf9\x9c\x7a\x80\x5f\xa6\xf8\xfb\x48\x67\x17\xc4\x38\x61\xf8\x1c"
- "\x67\xac\x7b\x93\x93\xf9\x28\x1e\xa7\xf7\x28\x08\x13\xa3\xf8\xe8"
- "\x57\x30\xee\xe8\x5b\x25\xfc\x73\xad\xec\x9f\x5f\x39\xfd\xed\xfd"
- "\xf3\x2b\x16\xf4\xcf\x18\xef\xbd\x4c\xbe\x19\xfd\xf2\x9e\x13\x0e"
- "\xc9\x83\xbe\x78\x68\xb2\xcd\xaa\x0e\x25\xdb\x39\xd8\x7f\x92\x4c"
- "\x49\x77\x0e\x37\x79\xe8\x1d\xff\x9f\xbd\x31\xaf\x34\x53\xff\xd8"
- "\x8b\x7d\xe3\xeb\xcb\x3b\xa4\x18\x33\xca\xd6\xf4\x01\xf3\xac\xce"
- "\x89\x65\x7d\x39\xd1\xde\xca\xfa\x5c\x4f\x5f\xbc\xae\xaf\x0f\xe5"
- "\x8b\xfe\x02\xfb\x2b\xbd\xe3\xe9\x02\xce\x13\xdf\xb5\xf9\x26\xdf"
- "\x73\xb7\x34\x60\xdf\x34\xa9\xee\x34\x4c\x64\xdb\x5e\x69\xf7\x6c"
- "\x7b\xe5\x58\xdf\xb6\x57\x8e\xa2\x5e\xc6\x60\xfc\x88\x32\x3f\x6f"
- "\xf5\x6d\x7b\xc5\xe1\xdb\x5e\xdb\xec\x8d\xae\xcf\x75\x44\xbf\xd2"
- "\x81\xcf\x5d\xbe\xa7\x51\x0f\x36\x90\x1e\x7c\x08\x86\x39\xd4\x0f"
- "\x3f\xf0\x61\x30\x3d\x78\xd9\x32\xb4\xbe\x78\x76\x0e\xea\x41\x07"
- "\xea\xc1\x97\x6a\x3d\x78\x9f\xce\x38\x14\xba\xf0\xa0\xd0\x05\xe4"
- "\x3b\x1f\xcb\xf4\xf7\xd3\x73\x0f\x06\xd7\x87\x63\x17\xa7\x0f\xbd"
- "\x67\xfc\xf5\xa1\xe6\x1b\xea\x03\xf6\xaf\xf1\x75\x38\x6e\x3a\x7f"
- "\x26\x49\xaa\x21\x7d\xf8\x64\x40\x1f\xde\xfc\x93\x43\xea\x1b\xb2"
- "\x3e\xcc\x0d\x79\xfe\x57\x70\x7d\xd8\x95\xfa\x2d\xf5\xc1\x3d\xa0"
- "\x0f\xbb\xb2\x3c\xdb\x76\x2d\xec\xdb\xb6\x2b\x7b\x40\x1f\xce\xa2"
- "\x3e\xec\x32\x0d\xe8\xc3\xae\x1c\x7c\x2e\x18\xac\x0f\xf3\x3e\xf9"
- "\x6e\xf5\x21\xfc\xab\x7f\x0d\x7d\xc8\x0e\x39\xfe\x0d\xa1\x0f\xdf"
- "\xd2\x3f\x24\x67\xa9\xf4\x01\xfd\xc3\x2e\xf4\x0f\xbb\x54\xfe\xe1"
- "\x14\xe9\x83\xca\x3f\xec\x42\xff\xb0\x2b\x88\x7f\x78\xf0\x8b\xef"
- "\x56\x1f\x2e\x3b\xfe\xaf\xa1\x0f\xf3\xdb\x86\xa6\x0f\x35\xdf\xd2"
- "\x3f\x24\x37\x0d\xe8\x43\x0d\xfa\x87\x1a\xf4\x0f\x35\x2a\xff\xf0"
- "\x29\xea\x43\x8d\xca\x3f\xd4\xa0\x7f\xa8\x09\xe2\x1f\x1e\x3a\xfb"
- "\xdd\xea\xc3\x88\x3f\xfc\x6b\xe8\x43\x4e\xc8\xf9\xef\x10\xfa\xf0"
- "\x2d\xfd\x43\x0a\xa8\xf4\x01\xfd\x43\x0d\xfa\x87\x1a\x95\x7f\x78"
- "\x9f\xf4\x41\xe5\x1f\x6a\xd0\x3f\xd4\x04\xf1\x0f\x8f\x84\x7f\xb7"
- "\xfa\x70\x47\xc5\xbf\x86\x3e\x3c\xd2\x35\x34\x7d\xa8\xfd\x96\xfe"
- "\x21\x25\x67\x40\x1f\x6a\xd1\x3f\xd4\xa2\x7f\xa8\x55\xf9\x87\x8d"
- "\xa8\x0f\xb5\x2a\xff\x50\x8b\xfe\xa1\x36\x88\x7f\x58\x78\xc5\x77"
- "\xab\x0f\x0b\xa6\xfe\x6b\xe8\xc3\x42\xf7\xd7\xe9\x83\xa2\x0b\xa4"
- "\x17\xa4\x0b\x7d\xa5\x39\x40\xe3\x8c\xd7\x4f\x0a\x7d\x20\x3d\xe0"
- "\x3a\xd1\x93\x13\xeb\x45\x5d\xf0\x3c\x8d\xba\xd0\x2b\x74\x81\x78"
- "\x41\xfa\x40\xe3\x0a\x1a\x4f\x90\x4e\x78\x71\x4c\xe1\x89\xc6\x31"
- "\xc5\x66\x6d\x1c\xe9\x41\x6f\xd4\xd7\x8c\x2b\x7a\x81\x8f\xfd\x68"
- "\x8c\x77\x5a\x5a\x74\x6d\x30\x3d\x78\x65\x88\x73\x7c\xfd\xe3\x4b"
- "\x3f\x3d\xf8\x70\x40\x0f\x1e\x0e\x31\xae\x98\x1f\x42\x0f\xec\x17"
- "\xa1\x07\xa7\x07\x8f\x33\xbf\xad\x1e\xf4\xae\x92\xf5\x80\xc6\x99"
- "\x3e\x79\x9c\xf9\x18\x8e\x33\xa3\x87\xaa\x07\x8b\xe1\x9b\xe9\x41"
- "\x4d\xea\xd0\xf4\x20\xb9\x89\xe2\x04\xa1\x07\x35\x0b\x3d\xd1\x18"
- "\x2b\xf8\xe9\xc1\x05\xe2\x05\x3f\x3d\xc8\xbd\xe1\xbb\xd5\x83\x80"
- "\x78\xe1\x9f\x56\x0f\x96\x84\xdc\xff\xd5\x87\x72\x27\x7f\x4f\xf3"
- "\xf6\xf4\xed\x46\x8c\x43\xcc\x1b\xd1\x37\x1c\x3b\x56\x42\x22\xf5"
- "\x11\xde\x75\x39\xb1\x95\xa7\x21\x6d\xeb\x4a\xd0\x7a\x56\xa3\xfc"
- "\x8b\x40\xdb\x2b\x01\xf4\xae\x2e\x88\x3d\xd4\xe9\x10\x73\x48\x66"
- "\x2b\xd4\x23\x7c\x5f\xa5\x98\x43\xf2\xf6\xe4\xc4\x6c\xfd\x0a\xf8"
- "\xba\x57\xeb\xa2\x9f\xa1\x6c\x1f\xd3\x04\x93\xed\xae\x21\xf8\xfa"
- "\x5e\xb5\xaf\x3f\xe5\x2f\x5b\xb5\x9f\xaf\xb1\xa8\xe6\x90\xe6\x84"
- "\x98\x43\xba\x08\x99\xf2\xb9\xfd\xd3\xc2\xcf\xf7\xcf\x21\x7d\xcb"
- "\x39\xfe\x3e\xf4\xf1\xaf\x48\xfe\x3e\xfe\x9b\xc9\xf4\xb1\x63\x17"
- "\x9a\x77\x24\xfb\x26\xbb\x56\x6c\xba\xbf\x8f\x27\x3b\x46\x79\x9f"
- "\xaf\x7c\x65\x1f\xef\xeb\x9f\x1e\xb0\x69\xb2\x65\xb2\x6b\xb2\x63"
- "\xde\xd7\xd3\x3e\xbf\xcf\xa5\x34\xd7\xa9\xe6\x8e\xbc\xd1\xb2\x9f"
- "\x0f\xe2\xe3\x7d\x17\xf4\xf1\x79\x41\xe5\xff\x8f\xe0\xe3\x49\x0f"
- "\x14\xfb\xfe\xfb\xb3\xed\xbc\xd0\xeb\xbf\x2e\x4a\x0f\x76\x4d\xfc"
- "\x7a\x3d\xd8\x95\xea\x7b\x6e\xbc\xb6\x4e\x35\x67\xe4\x8d\xde\x85"
- "\x7e\x5e\xcc\x19\x09\x3d\x18\x98\x33\xf2\x05\xce\x19\xf9\xe9\xc1"
- "\xd2\x88\xef\x56\x0f\x02\xe6\x8c\xfe\x69\xf5\x60\x69\xf7\xb7\xd4"
- "\x83\x8b\xf0\x07\xbb\xd0\x1f\x8c\xcf\x51\xe9\x01\xfa\x83\x5d\xe8"
- "\x0f\x76\xa9\xfc\xc1\xc0\x5c\x91\x2f\x70\xae\xc8\x4f\x0f\x0a\x46"
- "\x7c\xb7\x7a\x10\x30\x57\xf4\x4f\xab\x07\x05\xce\x6f\xa7\x07\x35"
- "\x17\xe1\x0f\x6a\xc8\x1f\xec\xa9\x53\xcd\x11\x79\xa3\xe5\xb8\x2f"
- "\x48\xcc\xe7\xbb\x60\xcc\xb7\x7c\xd4\x3f\x6a\xcc\xf7\xf7\xad\x07"
- "\xcb\x43\xbe\x2b\xbd\x48\x3d\xb8\x08\x7f\x50\x83\xfe\x60\x02\xa8"
- "\xf4\x00\xfd\x41\x0d\xfa\x83\x1a\x95\x3f\x18\x98\x1b\xf2\x05\xce"
- "\x0d\xf9\xe9\x41\xe1\x98\xef\x56\x0f\x02\xe6\x86\xfe\x69\xf5\x60"
- "\x85\xf6\xdb\xe9\x41\xed\x45\xf8\x83\x5a\xf4\x07\x13\xb2\xeb\x54"
- "\x73\x42\xde\xe8\x5a\xf4\x07\xb5\x2a\x7f\x30\x30\x27\xe4\x0b\x9c"
- "\x13\xf2\xd3\x83\x95\xe3\xbe\x5b\x3d\x08\x98\x13\xfa\xa7\xd5\x83"
- "\x55\x21\xd7\x55\x28\x3a\xd0\x3f\x07\xc0\x06\xf4\x80\xcb\x7e\x75"
- "\x4e\x6c\x6f\xd4\x2b\xfb\x94\xf1\x7f\xe5\xa0\xf1\x7f\x4a\x73\xc8"
- "\x79\xa0\x80\xf7\xcb\x7c\x6c\xb0\xfd\x95\x66\x31\x4e\xa8\xcf\x25"
- "\xf9\x3f\xbf\x41\x8c\x13\x0d\xf3\x49\xfe\xa6\xe0\xf2\x1f\xea\x9c"
- "\x60\x1e\xca\xbf\xf3\x02\xf2\x7f\x34\xc4\x38\xe1\x91\x6f\x27\x7f"
- "\x5a\xef\xd8\x77\xe6\x12\xca\x5f\x99\x13\xfc\x14\xa4\x57\xbe\xd5"
- "\x78\xf1\xa9\x90\xf2\x0f\xba\x9e\xa4\x49\xac\x27\xa1\xb5\x24\x47"
- "\xba\xba\x60\xeb\x39\xd0\xc7\x14\x0a\x9d\xe0\x6b\x4a\x50\x27\x2a"
- "\x4f\x42\x9a\x47\xb4\xad\x7f\x4d\x09\xed\x8b\x2e\xfc\x82\x95\xaf"
- "\x29\x51\xe6\x03\xfa\xd7\x93\x2c\xa2\xf5\x24\x45\xd1\xdf\x7a\x2e"
- "\x80\xd6\x93\x14\xa3\x8c\x9d\x28\xe3\xb3\x24\xdf\x0f\xfd\xec\xda"
- "\x6f\x0e\x20\xd4\x3a\x92\x8b\x99\xd7\xf9\x2b\xac\x23\xe1\x73\x00"
- "\x97\xc4\xa6\x8b\xec\x21\x7d\x3b\xca\x91\xe4\x69\x4b\xf2\xf0\x79"
- "\x5d\xc5\xc6\x6d\xe6\x76\xd8\xda\x0b\x7a\x65\xfe\x5f\x91\x29\xf9"
- "\x7b\x86\x7a\xc0\xce\xe4\x44\x93\x4c\x9f\x5f\x89\x7e\x7e\xd5\x80"
- "\x9f\xf7\x0d\xbb\xa5\xa1\x76\x03\xfa\xf7\x0d\x30\x91\xf3\x28\xa6"
- "\xb6\x59\xcc\x07\xd4\xe7\x92\xbd\x93\x3d\xb3\xe8\x57\xba\xfa\x64"
- "\x7b\x17\xf2\x3e\x0c\x24\x67\x71\x7e\x66\xb1\x86\x6c\x8f\x64\x1e"
- "\x23\xcb\xbc\x2e\x84\xcc\xb9\xbc\x35\x7a\xda\x8b\x83\xbe\x33\xeb"
- "\x97\xb9\xe7\x19\xd5\xfc\x8f\x5a\xe6\xf2\xbc\x8f\x0f\x6d\xf9\xa2"
- "\xd6\x0f\x5d\xa4\xdc\x2f\xd9\xfc\x3e\xca\xbd\x4e\x96\x7b\xff\xfc"
- "\xfe\xb7\x92\x7b\x71\xe8\xef\x5f\xfc\xe4\xbe\x2b\xf5\x12\xc8\xdd"
- "\x3d\x58\xee\x34\xfe\x27\xb9\xef\xca\xa6\x71\x3e\x8b\xde\x55\xd0"
- "\x27\xaf\x1b\x19\x2c\xf7\x35\xe7\xff\xfa\x72\x0f\xff\xea\x5f\x43"
- "\xee\x6b\x43\xee\x7f\x1e\x20\xf7\x4b\x60\xef\xc9\x59\x41\xe4\x2e"
- "\xdb\xfb\xae\xa3\x34\xae\x47\xb9\xcb\xf6\x7e\x2a\x88\xdc\xd7\x7d"
- "\xf9\xd7\x97\xfb\x65\xc7\xff\x35\xe4\x6e\x0e\xb9\xfe\xc3\x5f\xee"
- "\x35\x97\xc0\xde\x93\x9b\x06\xcb\xbd\x46\xb6\xf7\x9a\x6c\x1a\xc7"
- "\xb3\xe8\x1a\xd9\xde\x3f\x0d\x22\xf7\xf5\xff\xf7\xd7\x97\xfb\x88"
- "\x3f\xfc\x6b\xc8\x7d\x83\xf5\x22\xe5\x7e\x09\xec\x3d\x05\x82\xc8"
- "\x5d\xb6\xf7\x9a\xa3\x34\x6e\x47\xb9\xcb\xf6\xfe\x7e\x10\xb9\x3f"
- "\xfd\xf9\x5f\x5f\xee\x77\x54\xfc\x6b\xc8\xbd\x24\xe4\xfa\x3f\x7f"
- "\xb9\xd7\x5e\x02\x7b\x4f\xc9\x19\x2c\xf7\x5a\xd9\xde\x6b\xb3\x69"
- "\x9c\xce\xa2\x6b\x65\x7b\xdf\x18\x44\xee\x1b\xff\xf8\xd7\x97\xfb"
- "\x82\xa9\xff\x1a\x72\xdf\xd4\xfc\x75\xef\xeb\x15\xd9\x2b\x73\x36"
- "\xfc\xfd\x2c\xc6\xf7\x8a\xbc\x49\x0f\x48\xe6\xa4\x0b\x6a\x99\xf3"
- "\x35\x3c\xab\xc4\x1a\x1e\x8a\xdb\x19\x8e\xc5\xd9\x30\xbe\x7e\xa3"
- "\x8b\x8f\xdb\xe5\x38\x9e\x69\xb4\x71\x14\xcb\x87\x8e\xe3\x4b\x7f"
- "\xa7\xc8\xfb\x9b\x8e\xdd\xbe\x4e\xde\x81\x63\xf2\xbf\x17\x79\xab"
- "\xc7\x6f\x97\x46\xde\x65\x0d\xdf\x4c\xde\x35\xa9\x43\x93\x77\x4d"
- "\x96\x90\x37\x5f\xa7\x51\x30\x20\xef\x9a\x6c\x21\xef\x9a\x9c\xd0"
- "\xfd\xf9\xe6\xf7\xfe\xfa\xf2\xf6\x9f\x93\xff\xe7\x95\xb7\x25\xe4"
- "\xf9\x1f\x34\x07\x43\xb2\x26\xb9\xef\x58\x0e\x89\xcf\x2f\x17\x73"
- "\x2b\x9e\x33\xf1\xe4\xf3\xb5\x24\x7f\xfa\xc6\x27\x06\x75\xe0\xe3"
- "\x1c\x07\xf4\xba\x72\x80\xbe\xe5\xa1\x75\x17\x47\x0a\xec\x60\x33"
- "\x1f\x84\xad\x45\xa0\x3f\x94\xfb\x15\xcc\x69\x62\x7d\xb6\x63\x56"
- "\xfa\xc6\x5b\x6b\xdd\x70\x10\xd8\xaa\xa4\xc8\x45\x4e\x90\x4e\x4b"
- "\xcf\x64\xd0\xba\x8d\xf1\x4e\xe4\x09\x7d\xef\x83\x32\xdf\x7a\x1a"
- "\xe0\xc3\x62\x00\xc3\x52\x92\xf5\x33\xaf\x85\xaf\x09\xf2\x9d\xcf"
- "\x50\xe6\x65\xd4\x73\xaf\x41\x64\xbd\x4b\xba\x34\x6b\x33\x94\x75"
- "\x19\x7e\xf3\x32\xdf\xf6\xfb\xcb\x4b\xb6\x36\x63\x4b\xc8\xbd\x9c"
- "\x68\xbd\x0d\xc9\x93\x6c\xda\xb3\x5d\xcc\xcb\xd8\x30\xbc\xa7\x75"
- "\x35\x64\xc3\xde\x9e\x78\xdd\xd3\xc5\x68\xeb\x1d\xc2\xd6\x9f\xff"
- "\x0a\x61\x73\xff\x07\x48\x3f\x84\x6c\xfb\x84\x6c\xbf\x22\xd9\xfe"
- "\x0f\xb0\xd5\x49\x91\xa7\xa5\x67\x0d\x24\x5f\x92\x6b\xe9\x1f\x41"
- "\xbf\x98\xf6\x45\x21\x1f\x8f\xfe\x1d\xe5\x3c\xa9\x7e\x39\x4c\x24"
- "\xfb\xf7\x6e\x7b\xe5\xa8\x67\x9b\x58\xa3\x41\x7e\xbf\x2f\x6a\x77"
- "\x47\x45\x91\x2c\xff\x47\x48\xfe\xcf\x06\x95\xff\xae\x6f\x3a\xf7"
- "\x2e\xcb\xff\x1b\x7f\xd7\xf3\xb7\xb2\xf7\x55\x97\xca\xde\x9f\x2b"
- "\xbb\x38\x3d\x10\xf3\x34\x43\xd3\x03\x57\x10\x3d\xf8\x71\xd2\x60"
- "\x3d\xd8\x95\x85\x7a\xe0\xf6\xd7\x83\x5d\xd9\x42\x0f\x76\xe5\x60"
- "\x7e\xc1\x60\x3d\xf8\xf1\x5b\xdf\x8d\x1e\x5c\xe4\xf7\x3c\xff\xf0"
- "\x7a\x50\x5e\x7e\x91\x7a\xf0\x0d\xfc\xc1\x99\x20\x7a\xb0\x35\x35"
- "\x88\x1e\xa0\x3f\x48\xce\x0a\xd0\x03\xd9\x1f\xec\x42\x7f\xb0\x2b"
- "\x88\x3f\xd8\xfa\xeb\xef\x46\x0f\x2e\xf2\x3b\x9e\x7f\x78\x3d\xa8"
- "\x08\xd9\xff\xfb\xeb\x41\xcd\x37\xf0\x07\x9f\x05\xd1\x83\xe7\x27"
- "\x0d\xd6\x03\x8c\x05\x31\x0e\xf4\xd7\x83\x1a\xd9\x1f\xd4\xe4\x50"
- "\x7c\x38\x58\x0f\x9e\x7f\xff\xbb\xd1\x83\x8b\xfc\x7e\xe7\x1f\x5e"
- "\x0f\x2a\x43\x7e\xff\x1b\xa0\x07\xdf\xc0\x1f\x7c\x10\x44\x0f\xb6"
- "\x19\x83\xe8\x01\xfa\x83\x14\x08\xd0\x03\xd9\x1f\xd4\xa0\x3f\xa8"
- "\x09\xe2\x0f\xb6\x7d\xf8\xdd\xe8\xc1\x45\x7e\xb7\xf3\x0f\xaf\x07"
- "\xdb\x43\x8e\xff\xfc\xf5\xa0\xf6\x1b\xf8\x83\xd2\x20\x7a\xb0\x23"
- "\x63\xb0\x1e\xd4\xa2\x3f\x48\xc9\xf1\xd7\x83\x5a\xd9\x1f\xd4\xa2"
- "\x3f\xa8\x0d\xe2\x0f\x76\x1c\xfe\x6e\xf4\xe0\x22\xbf\xd7\xf9\x87"
- "\xd7\x83\xaa\x90\xdf\x7f\xab\xf5\xa0\xaf\x7f\xbc\xd0\xc2\xf5\xa0"
- "\x62\x83\xd0\x83\x8d\xa4\x07\x5d\x62\xfd\x4e\xa5\xac\x07\xfd\x63"
- "\x85\xce\x40\x1d\x78\x61\x56\xbf\x0e\xfc\xdf\xc0\x58\xa1\x0f\xe5"
- "\xcd\xe7\x83\xe4\x71\x82\x32\x0f\xc4\xc7\x09\x38\x4e\xac\xf8\x4a"
- "\x96\x3f\x9f\x13\x78\x21\xb8\xfc\x87\x30\x4e\xf4\x5b\xa3\x11\x28"
- "\xff\xbf\xf3\xef\x74\x06\xcd\x0b\xfc\xf1\xdb\xae\xcd\xf8\xc9\x45"
- "\xca\x5f\x89\x0b\x2e\x56\xfe\x9f\x05\x91\xff\x8b\x41\xe4\x5f\x93"
- "\x25\xe4\x9f\xdc\xa4\xc4\x03\xca\xbc\x10\x8f\x07\x06\xc9\xff\xc5"
- "\xef\x48\xfe\x7f\x9f\xdf\xe7\x5c\x7a\xf9\xef\x0c\x29\x7f\x2f\xda"
- "\x40\xad\xe4\x6b\xae\x92\x7c\x2d\x78\x59\xf1\x6a\xc3\xb4\x70\x4c"
- "\xe3\xef\x82\xab\xe4\x3c\x6f\x05\xd0\xde\x49\xd6\x58\x4d\x2e\xf1"
- "\x9b\x60\x86\x29\x30\xb1\x9b\xc1\x88\x6d\x13\x70\x12\x94\x61\xba"
- "\x35\x7a\xb3\x71\x18\xc2\xb7\xb1\x8a\x39\xf1\x98\x36\x9c\x60\xd9"
- "\x66\x2d\xdf\x17\x27\x56\xc3\xf7\xce\x94\xe1\x35\xb4\x57\x96\x95"
- "\x60\x11\x4e\x27\xc3\x89\xbd\xa3\x25\x09\xea\x07\xd3\x16\x21\xc3"
- "\xd0\x9e\x55\x06\x35\x8d\xd1\x1a\x23\xc7\x25\xc3\x45\x7a\x2d\x9f"
- "\x35\x12\xac\x77\xb3\x36\x51\x0d\xc7\xa6\x02\xe1\x55\xe0\x2e\x93"
- "\xf1\x25\xf9\xb5\x77\x2c\x40\xf4\x66\x03\xc7\x17\xdd\x2d\x81\x4c"
- "\x1f\xea\xc4\xac\x6e\x0e\xaf\xd1\x26\xfb\xc1\x0f\x03\x75\x3b\xa2"
- "\xd9\xb0\xd4\x6a\x19\x2e\xd5\x27\x01\x3f\xf7\x19\xd3\xb5\x6a\x5e"
- "\xcb\xb0\x31\x0a\x1f\x69\x4f\x27\x75\x7b\xbd\xd8\xfe\x5a\x41\x63"
- "\xac\xf7\xb9\x09\x4d\x72\x5b\x26\xa9\xeb\x25\x38\x2c\x77\xab\x2c"
- "\x13\x3d\xb6\x23\xad\x1f\x5f\xe5\xf2\x72\x05\x0e\x75\x76\x14\xca"
- "\xc8\x6a\x2b\x00\x90\xdb\x3d\x02\x65\xb3\x47\x6e\xbb\xd1\x9f\x8f"
- "\x1a\xbb\xc2\x47\x84\xa1\xbd\xcd\x46\x22\x4c\xba\x82\xd7\x6b\xe1"
- "\xfb\x68\x89\x76\x5b\x3c\x97\x93\x5e\x1c\xee\x02\xa8\x13\xed\xb9"
- "\x5c\xc6\x99\x21\xda\xac\x87\xda\x7e\x59\x6b\x29\xcf\x2a\xc3\xc5"
- "\xf1\xf6\x44\x3e\x6a\xf4\x6a\xb4\xb3\x06\xc3\xea\xd4\xb0\x57\x08"
- "\xd8\x2c\x3b\xc2\x66\x0d\x86\xd5\xab\x61\xaf\x14\xb0\x73\x1d\x08"
- "\x9b\x3d\x18\xd6\x33\x52\x05\x7b\x95\x80\x7d\x10\x10\x36\x67\x30"
- "\xac\x41\x0d\x1b\x2f\x60\x17\x67\x20\xec\xc2\xc1\xb0\x46\x35\xec"
- "\x28\x01\xfb\x90\x1e\x61\x73\x07\xc3\x96\xa9\x61\xaf\x16\xb0\x0f"
- "\x1b\x10\x36\x2f\x10\xb6\x9e\xeb\x01\x8c\x95\xf5\xe0\x1a\x01\xbb"
- "\x20\x15\x61\x0b\x82\xb4\x2d\x8c\xe3\x15\xb0\x09\x02\x36\x53\x8b"
- "\xb0\x85\x41\x64\xa1\x86\xbd\x56\xc0\xae\xca\x46\x58\x53\x10\x59"
- "\xa8\x61\x47\x0b\xd8\xc7\x13\x11\xb6\x38\x88\x2c\xd4\xb0\xd7\x09"
- "\xd8\xfc\x64\x84\x35\x07\xe1\xef\x00\x6c\xe4\x13\x13\x11\xa6\x04"
- "\x79\xd2\x1e\x84\xb7\x6a\x9c\x63\x04\xce\x65\x69\x08\x5f\x16\x84"
- "\xb7\x6a\xd8\xb1\x02\xf6\xc9\x74\x84\xdd\x32\x18\x16\x34\xb5\x82"
- "\xbf\xb7\xc9\xfc\xbd\x5e\xc0\xaf\x98\x85\xf0\xe5\x41\xf8\x4b\xf9"
- "\x56\xd9\xd6\x12\x05\xec\x92\x2c\x84\xad\x0c\xc2\x5f\x35\xec\x0d"
- "\x02\x76\x93\x1b\x61\xab\x82\xf0\x57\x0d\x7b\xa3\x80\x5d\x9d\x84"
- "\xb0\x3b\x83\xf0\x57\x0d\x7b\x93\x80\x5d\x43\xba\x53\x1d\x84\xde"
- "\xb1\x2a\xd8\x24\x01\xbb\x2e\x1e\x61\x6b\x82\xc8\x42\x0d\x3b\x4e"
- "\xc0\x96\x75\x21\x6c\x43\x10\x79\xa8\x61\x6f\x16\xb0\xeb\x49\xd7"
- "\x1b\x83\xc8\x43\x0d\x7b\x0b\x8b\x7c\x5a\x27\xfb\xc5\xa6\x40\x58"
- "\x94\xbd\xf0\x89\x16\x48\x66\x91\x1b\xc9\xc7\x10\xdc\x1e\x82\xeb"
- "\xc7\x67\xf1\xfc\x80\xfc\x8d\xec\xc3\x52\x58\xe4\x53\xd9\x32\xbe"
- "\xe6\x41\x75\x5b\xb4\x6a\xd8\xf1\x2c\xb2\xca\x21\xc3\xee\x1b\x0c"
- "\xab\x53\xc3\x4e\x60\x91\x5b\xac\x32\x6c\xcb\x60\x58\x7d\x3f\x2c"
- "\x8b\x7c\xae\x0d\x61\xf6\xd7\xc9\xbe\x51\x45\xe7\x6d\x2a\x7c\xb7"
- "\xb2\xc8\xf2\x76\x19\x9f\x75\x30\x3e\x83\x1a\xf6\x36\x16\xf9\x13"
- "\x85\xce\xd6\xc1\xb0\x46\x35\xec\x0f\x58\x64\x45\x87\x0c\xdb\x36"
- "\x18\xb6\x4c\x0d\x3b\x91\x45\x56\xda\x65\xd8\x43\x83\x78\x4f\x76"
- "\x60\xc1\x58\x40\xf8\xa4\xdb\x59\xe4\xf6\x2e\x19\xd6\x2f\x0e\x50"
- "\xf5\xc3\x77\x08\xb9\x5b\x3a\x50\xee\x47\x79\x7f\xb3\x59\xdb\x11"
- "\x2c\xc6\x30\xdd\x0c\x97\x9d\x94\x6a\x6b\x44\x9f\xa4\x9c\x7b\x55"
- "\xc7\xbf\x2b\xf4\xd5\xe4\x57\x65\x3a\x99\x47\x9d\xb6\x43\x62\xed"
- "\x13\x9c\x20\xce\x52\x89\xde\xdd\x62\xc7\x74\xc7\xb5\xf9\xcd\xae"
- "\x8a\xda\x26\xbb\xe6\xe6\x0e\xda\xc7\x0f\xef\xf7\xd9\xe1\xc9\x6c"
- "\xba\xdf\x61\x61\x6e\xda\xbf\xd2\xbb\x7d\x79\x96\xcd\xd7\x8d\xb1"
- "\x1c\x73\x23\x0e\x37\xc6\x72\x61\x06\x1c\x57\x96\x9a\x59\xaf\xcd"
- "\xdc\x0d\x27\xa4\xda\xf3\x6c\x55\x41\x1a\xd2\x60\xc2\xfa\xf2\x8e"
- "\xe3\x33\xa7\x01\x63\x20\xec\x2b\x0b\xad\x45\xb4\x8f\x68\xdd\x38"
- "\x47\x74\xa3\x89\x3d\xb3\xa0\xcb\xb4\x09\xae\x3b\x29\xd5\xf1\xb8"
- "\x80\xef\x31\x78\xa6\xe0\x6e\x5f\xf4\xf2\x42\xda\x7b\x90\x55\xbf"
- "\x96\x25\xf6\x25\xac\xe3\x67\x3b\x22\x0d\xed\x2c\x21\xbf\xcc\xd7"
- "\xbb\xa5\x8c\xce\x55\xb3\x6e\x3a\x09\xc7\x55\x79\x8e\x51\xaf\xf1"
- "\x3d\x0b\xb1\x4d\x65\xde\xf2\x83\x66\x9f\xee\x60\x31\x2b\x3f\xda"
- "\x62\x2b\xb4\x83\x38\xf3\xa5\xee\x0b\x16\xf3\xb0\xcd\x57\x7e\x70"
- "\x21\xa6\x37\xd9\x9c\xbd\x3c\x1d\x71\x34\x53\x7c\xd9\xa3\xfb\x7d"
- "\x16\x2b\xff\x7d\xb6\xf5\xea\x5e\xe8\x94\xea\xf8\xde\x7d\x94\xce"
- "\xb6\x1e\xe5\xfc\xf1\x6d\x3d\xda\x14\x16\x0f\xda\x9e\x88\xdf\x67"
- "\xb9\x2a\xea\xda\x95\xb3\x47\x94\xba\x08\xaf\x5d\xc6\x15\x62\xdd"
- "\x47\x2c\xdb\xb6\xbc\xdc\x55\x51\x1f\x85\xf1\x62\x97\xe0\x71\x7d"
- "\xbc\x5d\x13\x96\x27\xdf\x27\xda\x35\xc3\xd2\xe4\xfb\x54\xbb\x66"
- "\xcc\x24\xf9\x3e\x4d\xd9\xd3\x31\xf8\x1e\x93\xcb\x17\x22\x6f\x8b"
- "\x7d\xbb\x72\x74\x14\xeb\x52\xfc\xce\xa2\x97\x2f\x34\x8c\xa6\xf3"
- "\xfa\xea\x8f\x62\x9d\xc5\x62\x7f\xff\xfa\x97\xf1\x37\x56\xfe\x75"
- "\xc8\xbf\x8c\x60\xb8\xde\x24\x2c\x05\x56\x59\x97\x41\xbc\xdd\xe4"
- "\x65\x3e\xc4\x5b\x8d\x7c\x6a\xb6\x99\xbb\x64\xfe\xd5\x7f\xc8\xe3"
- "\x7e\x92\x1d\xca\x97\x45\x1c\x6d\xe6\x75\x6d\x6b\x34\xa9\xe9\x4a"
- "\xbd\xf5\xb6\x1f\x4c\xbc\xfd\x8e\x1f\x4e\xba\x73\xc9\x63\x8f\xe7"
- "\xe5\x2f\x7d\xa2\x60\xd9\xf2\x27\x0b\x57\xac\x5c\x65\x7a\xaa\x68"
- "\x75\xf1\x9a\xb5\xeb\xcc\xeb\x37\x20\x9e\xfe\xb3\xda\xd8\xae\x74"
- "\x8d\x53\x02\xac\x63\x2a\xd6\xd1\x70\x3b\xa7\x05\xd3\x84\xec\x1b"
- "\x12\xb5\x86\xe0\x71\xb5\x0d\x23\x5d\x3a\x3f\xa6\x5b\x6a\xd8\x4c"
- "\x67\xd9\xa0\x8e\x69\x6c\x35\xf7\x5a\xe9\x7c\xb1\x4e\xa9\xa1\xf8"
- "\x88\xe3\x5e\x2b\x9d\x6f\x77\x20\xbe\x0b\x12\xc7\xd2\x19\x64\x0d"
- "\xb9\x94\x5f\x7f\x23\x40\x2b\x96\x0d\x86\x73\xac\x1e\xe2\x5f\xbc"
- "\x92\x39\x76\x5e\xc9\xba\x09\xff\xce\x97\x58\x97\xe3\xe9\x02\xd8"
- "\x8e\xcf\xa8\xe7\xfa\x13\xd2\xab\xb7\x1f\x48\xe0\xe7\x34\x25\xd4"
- "\xbd\xc4\x3a\xb7\x5c\xc9\x3a\x9f\x79\x89\x75\xd7\x5f\xc9\xec\x89"
- "\x3b\x21\xca\x55\xd1\xd0\x65\x97\x1a\x8c\xdc\x66\x30\xdf\x17\x59"
- "\x6f\xdf\x81\x79\x13\x3c\x10\x56\x8f\xcf\x98\xe6\x3c\x60\x10\x74"
- "\xef\xfd\xca\x1d\x8e\xed\x3b\xc4\xfa\x0a\x35\xdb\xb1\x1e\x21\xa3"
- "\x57\x1f\x6e\xc5\x5e\x1c\xeb\x73\xd8\xdc\xc7\xc1\x2e\xbd\x9a\x53"
- "\x7f\x8e\xd7\x17\x6b\xab\xee\x06\xc2\xf7\xcb\x22\x77\xf8\xea\xab"
- "\x99\x07\x61\x27\xf9\x9e\x2e\xd4\x20\x4c\x1c\xe2\x76\xaa\xdb\x93"
- "\xb4\x74\x45\xb1\x61\xe5\x9a\xc2\xc2\x71\x91\x90\xc4\x7f\xfd\xce"
- "\xc6\x2b\xa6\xfd\x65\x5f\x7c\x89\xb5\x62\x3b\xad\xd8\xde\xb6\xc3"
- "\x18\xbd\xa3\xbe\x00\xb6\xa9\x0a\xf1\xbe\x85\xe9\xfb\xf1\x7e\x3f"
- "\xd2\xde\x26\xce\x53\x7b\xe7\x8f\xac\xe2\xd5\x3c\xa4\xb3\x8d\xce"
- "\xd8\xa0\xfd\x68\x7b\xd6\x65\x6b\xb0\xdd\x3b\x11\xae\xcd\x70\x35"
- "\xdc\x70\x42\xfa\xd9\xed\x48\x47\x23\xde\x13\xfc\xe7\x24\x47\x84"
- "\x6f\x15\xed\x7a\x87\x9f\x9d\x89\xbc\xb2\xd6\x5e\xc9\x2a\x5d\x15"
- "\x3f\xd3\xd3\x3e\xdb\xfc\x3c\x22\x7c\x46\xbe\xb4\x21\x6c\x55\x4f"
- "\x69\xb6\x06\xc7\x81\x9a\xfa\x7e\x9c\xaf\xda\x89\x26\xa2\x83\xc6"
- "\x96\x1f\x63\xf4\xe6\xeb\xcb\x81\x14\x37\x68\x3e\x46\x4f\x56\xf3"
- "\x12\x6b\xc0\xab\x06\xaf\xea\x83\x98\xf7\x3b\xbc\xda\x30\xfd\x10"
- "\xfe\x1e\xc4\xdf\xdf\xe1\x85\x63\xd3\x78\xa2\x7b\x75\x09\xeb\x9a"
- "\x50\x0d\xd7\x13\x7e\xd4\xad\x87\x8e\x4b\xef\xa4\x12\xed\xb4\x8f"
- "\x3d\x8b\xfc\x59\xa3\xff\xde\xdf\x8d\xf1\x80\xf9\xf8\x9b\x2c\x7e"
- "\xd5\x57\x63\x31\x5e\x3b\xe5\xfb\x63\x78\x69\xe5\x7b\x07\x5e\x9e"
- "\xaf\xbf\x02\xf1\x85\xba\x5e\x2b\xb8\x78\xd8\x8b\xba\x1a\x2f\x0e"
- "\xee\x17\x06\x90\x5e\x37\xe3\xd5\xec\x9f\xfe\x7a\xb9\x48\xfb\x65"
- "\xb6\x78\xfe\x65\xae\xfc\x5b\x09\xd2\x5e\xe4\xd3\x5e\xc4\xbf\xb7"
- "\x4d\xa4\xed\x3d\x8a\xbf\x09\x78\x25\x05\xd4\x4f\x38\xb9\x5e\xf5"
- "\xd1\xd9\x6e\x28\x4b\xbb\xf4\xb3\x62\x92\xd1\x0e\xa1\x5b\x1a\x1f"
- "\xe3\x69\x26\xd4\xad\x9a\x01\xfd\x69\xcc\xf7\xd7\x9f\xc6\xac\x00"
- "\xfd\xa9\x22\x5f\x84\xb6\xb0\xbf\x5e\xe8\xcb\xfe\x9e\xa7\xf3\xf0"
- "\xb9\x31\x1b\xf1\xec\xa7\x39\x0f\xc4\xc1\xfb\xef\x1d\x27\x71\xdc"
- "\x59\x00\x5a\xf2\x2f\xdd\x52\xe3\x6b\xa4\xb3\x54\xb7\x5c\xaf\xa0"
- "\x05\xe9\xc3\xb4\x06\xa2\x6f\x15\xe2\xc5\xe7\x46\x84\x6b\xb0\xc1"
- "\x57\x0a\x6d\xbc\x4c\xc5\x72\xd4\x47\x99\x5e\xc2\x49\xe5\xd8\x40"
- "\xbb\x4c\x54\x46\xd4\xfd\xda\xc3\x98\x4e\xe3\x54\xfa\x9e\x29\xcc"
- "\xe6\xb1\x03\xe9\x24\xfd\xda\x3c\xa9\x68\x4b\x19\xe0\x73\xe5\xc0"
- "\x84\x78\x48\x45\x7b\x8b\x38\x2e\xbd\x96\x36\xbe\x04\x52\x09\x1f"
- "\xf9\x74\xbb\xf4\x1a\xd4\x93\x2d\x0a\x5c\xf2\xf9\x7f\x3f\x33\x1d"
- "\x34\x01\xaf\xa7\x8e\xe8\xc1\x7c\x55\xbd\x3b\x69\x1c\xba\x63\x83"
- "\x68\x2b\xd6\xd5\x88\xe5\x9b\xa9\xed\xc4\x4f\xcc\x6f\x41\x3c\xd5"
- "\x94\xc7\xcf\x02\x12\xed\x69\xa4\xf3\x22\x88\x1f\x04\x4f\xe7\x35"
- "\x8a\x7d\xbf\x5f\x7d\x9f\xf3\x0d\xcb\x93\x3c\x18\xd6\x41\x38\x4a"
- "\x3d\xcc\xc3\xd0\x1f\xed\xde\xe0\xc6\xb8\xe2\x17\x23\xfc\xe5\xf3"
- "\x9a\x43\x2d\x1f\x2c\xd7\x8c\xe5\x5b\x19\xb6\x91\xfc\x09\xd6\x19"
- "\x4b\x67\xc4\x61\x5a\x95\xaf\x02\x71\xac\x75\xf3\x79\x1a\xc4\x43"
- "\x3e\xa5\x8a\xf0\x20\x3d\xad\x02\xd7\xcf\xd3\x7e\x53\xe2\x2f\x6b"
- "\x19\x5f\x23\xc9\x9c\xdb\xf3\x06\xde\x26\xf4\x5d\x3f\xff\x7d\x9d"
- "\xc8\x6b\x41\x98\x16\xd6\x97\x01\x74\xfe\x82\xe8\x4b\x78\xde\xbe"
- "\xd2\xf3\x5c\xbe\xad\xc2\xaf\xfd\xfc\xcb\xd5\x1b\x59\xd7\x00\xdd"
- "\x3f\x6f\x52\xce\xb0\x90\xe9\xde\x47\xf5\xb1\x75\x0b\x79\xbf\x4a"
- "\x75\x50\x79\x19\xdf\x16\xc2\xa7\xf0\x6a\x3c\xd2\x21\xf8\xf5\x5a"
- "\x0b\xa6\x37\x92\x2e\x72\xbe\xa1\x1f\xed\x29\x25\x5d\xfc\xf9\x1e"
- "\x2c\xbf\x7f\x3b\x3d\xaf\xe3\xcf\x46\xee\x63\xfb\xf3\x5f\x73\x52"
- "\xbe\x0d\xc7\xf9\x3b\x9e\x44\x5d\xf2\x01\x5c\x1f\x07\xa9\x4e\x0b"
- "\x6f\xdb\x1e\xe7\xd3\xe9\x9a\x03\x1e\x00\xa2\x13\x79\xd4\xe2\xaa"
- "\xf8\x45\x36\xf6\x35\xfc\x4c\x37\xf4\xd7\xfb\xd8\xee\x1c\x20\x9a"
- "\xd1\x9f\xc9\xf4\xfd\xe2\x43\x59\xf6\xfb\xa8\x8d\xc4\xcf\xf1\xc2"
- "\xf7\x61\xde\xeb\xcb\x88\xf6\x81\x76\xff\xa2\x41\xcd\x63\xde\x6e"
- "\x94\x03\xc9\x8b\xe4\xa2\xc2\x49\xba\x5f\x85\xb8\xf6\x88\x67\xa1"
- "\x1b\xc4\xeb\xaa\x2b\xd9\x21\x82\x1f\x80\x6d\xe2\xfb\xf1\x6f\xc2"
- "\xba\x27\x98\xb0\x4f\x47\xbb\xa0\x73\x48\x10\xef\x1e\x3a\x8b\x13"
- "\x71\xb4\x10\x4f\x91\x96\x14\xd2\x47\x7c\x3e\x24\x97\x4b\xc6\xfe"
- "\x9c\xae\xb4\x01\xfb\x7f\xfd\x5a\x7f\xfd\x6a\x0a\xb4\x7f\x92\x77"
- "\x95\xaf\x34\x03\xb8\x3e\x14\x81\xe1\xb4\xd4\xf4\x9e\xdc\x77\xc8"
- "\xb2\x7e\x3d\xfa\x00\xda\x8b\x0a\xc7\xce\x00\x59\xb7\x70\x7d\x5c"
- "\x37\x4b\x43\x6d\xc6\xb2\x2d\x32\x1e\xde\x66\xae\x4f\x16\xae\x03"
- "\x87\xd8\x3a\x6c\x67\xbf\x1e\xfc\xc2\x21\xcb\xf9\x50\x00\x4f\x14"
- "\xdf\x95\x46\xe7\xc5\x91\x4f\xc2\x18\xf7\x6e\x57\xdf\x80\x5f\x22"
- "\xd9\xfb\xb8\xec\x9b\xaa\xeb\x45\x7f\x2b\xfb\xad\x26\x91\x7f\xa5"
- "\x9f\x0e\x13\x2d\x87\xb9\xfe\x12\x2d\xa5\x0b\x89\x96\x16\x4e\x47"
- "\xa9\x01\x4e\x4b\xaf\xa7\x53\xfd\x58\xb6\x5d\xb6\x57\x19\xd7\x2f"
- "\xc8\xf6\xf7\x3f\x83\xbe\x8a\x68\xc2\xba\x53\xb9\xff\x9b\xc1\x79"
- "\xf2\x9a\x4c\x7b\x9b\xdb\x42\x65\x1b\xab\xcf\x4b\xbc\x6c\x1b\xde"
- "\x47\xb9\xc5\x99\x32\x91\x58\xbe\x89\xf6\xf1\x3f\x21\xfd\x92\xfc"
- "\x85\x86\xde\x21\x9d\x90\xde\x3a\x45\xdf\x7b\xa2\x4f\xd1\x22\x3e"
- "\x1d\xe9\xa8\xa2\x17\xdd\xd2\x5b\x9f\xd2\x78\x01\x79\xbd\x07\x63"
- "\xa4\x26\xe2\x37\xe9\x32\xc6\x48\x13\x5d\x15\x6f\x44\x29\x7a\x8b"
- "\xf5\xd4\x10\xef\x85\x7c\xde\x78\x00\xf5\xb8\x65\x40\xb7\xde\x78"
- "\x40\xe6\x63\x13\xf2\x51\x87\xf5\xfd\x5e\x6e\x57\x13\xc2\x63\x2c"
- "\xf6\xd6\x6f\x64\xda\xe5\x73\x03\xdf\x58\xa1\xc8\x41\xb6\xd5\x43"
- "\xdb\xc9\xff\x72\x19\xbc\xa9\x95\xcb\x36\x8a\xba\xde\x0c\x57\x60"
- "\x29\x46\x14\x67\x45\xbd\x19\x4e\x7e\x70\x02\xca\x9e\xfb\x3e\x7e"
- "\x4e\xad\x48\x23\xdb\x11\x75\xbc\xf5\x16\xd7\x43\x8c\x7b\x06\xf4"
- "\xe8\x8d\x63\x01\xfe\x89\x7c\x71\xd5\x11\xc4\x41\xfe\x94\x74\x89"
- "\x7c\x2a\x8d\x57\x90\xc6\x7d\xb2\xfd\xc8\x34\xbf\x39\xd3\x5f\x57"
- "\xde\x7a\x19\x75\x25\x65\x00\xf7\x9b\x93\x82\xf5\x73\xf5\xc2\x07"
- "\xd6\xc8\x6d\xdb\x2a\xb7\x6d\x8f\xdc\xb6\xad\x72\xdb\x9a\xb0\x0e"
- "\xe2\xdb\x6c\x15\x1f\x91\x6f\x7b\xde\x93\xe1\x5b\xc8\x97\x0f\xd8"
- "\xeb\x9b\x67\x15\x5b\x1e\xec\x2f\xf6\xbc\x4e\xf6\xa0\xa2\xab\x3d"
- "\xc0\x5f\xb4\x04\xf7\x17\x6f\x36\xc8\xed\x6d\x08\xb0\x8d\x46\x39"
- "\xde\x7d\x5f\x91\xc3\x11\x1c\x8f\x89\x73\x91\x5e\x7d\x9f\xfc\x27"
- "\xd5\xad\xee\x83\xea\x04\x5f\x65\x5b\xde\xf3\x6f\x83\xe5\xb0\x27"
- "\x4f\x6d\xcf\x24\x6b\xf2\x09\x84\x83\x64\xca\xe3\x4a\x4c\x13\x72"
- "\xdd\x93\x46\xbe\x41\xed\xa3\x11\x76\xa7\x8f\x91\xbd\xec\x29\xf0"
- "\xb7\xc5\x37\x8f\xca\xb6\x28\xd7\xfd\xd6\x9d\x28\xa3\x54\x55\xbd"
- "\xc7\x02\xea\x25\xd9\xb4\x12\x1f\x64\x99\xde\xa0\xf4\x69\x04\x8f"
- "\x65\xcd\xae\x8a\xb7\xf4\x01\xfd\x63\x15\xd1\x87\x75\x95\x73\x9f"
- "\xf5\x12\xf7\x15\x66\x17\xa7\xe7\xad\xb8\x7a\xb9\x9f\xc0\xb4\x54"
- "\x91\xb6\xc7\x2e\xf7\x25\x8a\xde\x3c\xeb\x4f\xd3\x5b\xa6\xe0\xf1"
- "\xd1\x9b\xe5\x4a\x7c\xc4\x71\x71\x5f\xf4\x56\xb1\xdc\x3e\x4a\x4b"
- "\x11\x69\x6f\xa6\x51\xda\x76\xc1\x87\x9d\x8c\xf7\x57\x6f\xd8\xe5"
- "\xfe\x8a\xec\x4b\xc2\xe7\x2c\xb2\x31\x7a\x46\x1c\x6d\x84\xdf\x56"
- "\xd6\x4b\x63\x88\x6a\xbb\xf4\x7a\x37\xf9\x03\xf2\x17\xb4\x2e\x95"
- "\xff\xce\xe1\xbf\x57\x90\xdf\xa1\x38\x84\xf2\x11\xee\x18\xf9\x22"
- "\x4c\x1f\x67\xb8\x0f\xe3\x82\xbf\xe8\x10\xef\x2f\xa3\xe4\xb2\x93"
- "\x79\xac\xf0\x97\x8c\x30\x25\x4d\x29\x87\x7e\xeb\x14\x95\xa3\xf2"
- "\x8a\xff\x22\xdf\xe5\x21\xdf\x24\xea\xdb\x2c\xeb\x38\x1f\x37\x28"
- "\x71\x51\x9f\xa4\x82\xa5\xf3\x64\x84\x4f\x3b\x24\xfc\xd9\x2f\xdf"
- "\xa7\xb2\x5c\x7e\xe8\x2b\x37\x9d\x67\x9f\xd7\x17\x81\xb6\xee\x2b"
- "\xf2\x8b\xaf\xee\x17\x74\xee\x8d\x97\xdb\xf1\x39\x6f\x87\xf0\xa9"
- "\x55\x82\x96\x57\xf7\xd7\xf5\xf2\x3c\x2f\xb5\x85\xf2\x76\xa8\xf2"
- "\x58\x5f\x12\xe6\xed\xe5\xe7\x7c\x05\x96\xf3\xf5\x15\x0c\x82\xaf"
- "\x17\xe7\x01\xeb\xea\x5e\x52\x7c\xef\xde\x6a\x41\xe7\xde\x07\x15"
- "\xbf\x8b\x7c\xef\x24\xdf\xcb\xf3\x96\xca\x30\x73\xe4\x5f\xee\xdf"
- "\xf7\x3e\x2b\xf8\x1a\x2f\xc9\xfc\xee\x96\xdb\xf1\x32\x1f\x67\xff"
- "\x25\x07\x79\xbb\xb7\x44\xe1\xad\xfa\x9e\xec\x07\xeb\xd7\xd3\x33"
- "\xd7\xfb\x12\x3e\x86\xad\x21\x18\xa2\x49\xf4\x11\xbf\x2c\x0e\x8c"
- "\xa9\x71\xac\x37\x82\xfa\x25\x11\xab\xbe\xfd\xa5\x3c\xff\x03\xd6"
- "\xa2\x9f\x61\xbf\xd0\x9c\xa6\xf8\x18\xe6\xca\xc0\x31\xff\x71\x84"
- "\x69\x9e\x4c\x69\x74\x46\x88\x1a\x86\xfc\xd3\xde\x5e\xbb\x8c\xb3"
- "\x39\x5e\xf1\x1b\xe4\x4b\x8e\x38\x8f\xcb\x31\x5d\x73\x5b\x9d\xec"
- "\x4b\x4e\x4b\xcd\xbf\xf3\x8f\xc3\x9a\x7f\xe7\xef\x33\xde\xfe\x34"
- "\xd0\x67\x60\xdc\xbc\xc5\x55\xd1\x5c\xe3\x17\x07\x60\xda\x85\x7d"
- "\x47\xb3\x89\x6c\x94\xce\x88\xe3\xfe\x89\xcf\x69\xbd\x7d\xab\x42"
- "\x33\xf9\xcd\x9e\xa7\x95\xf9\x8b\xb7\x0f\x53\xac\xe6\x5f\xdf\xdb"
- "\x51\x7e\xbe\x93\xea\x53\xf0\x61\x2f\x45\x76\x64\x2d\xa2\xf9\x96"
- "\xe6\x63\xb2\x9f\x6f\xf0\xf3\x95\x72\x1f\x46\x7e\xd2\xbf\xaf\x7a"
- "\xf5\x7d\xff\xbe\xea\xed\xf7\x06\xfb\xc8\xb7\xcb\x2f\xbe\xaf\x7a"
- "\x3b\x97\xfc\x96\xe2\x23\xfd\x7d\xc1\xdb\x95\x75\x7e\xb1\xec\xdb"
- "\x71\x4a\x2c\x3b\xe0\x47\x9b\x69\xcc\xb4\x1f\xeb\x6f\x11\x75\xbf"
- "\x83\xfa\xda\xa0\x53\xea\xc6\xfc\xb4\x23\x06\xd4\xcd\x8a\x57\x4d"
- "\xa8\x53\x5d\x72\x0c\xc8\x6d\xb3\x97\x9f\x47\xb4\x37\x15\xf5\x2f"
- "\x92\xf4\xcc\xba\xf2\x2b\xe8\x1c\xe8\x2b\x5a\x7b\x56\x29\xfc\x7d"
- "\xe7\xdf\xd4\x71\x61\xed\x4b\xac\x1c\xeb\x29\x54\xb7\x71\x1b\xa6"
- "\xed\x90\xe7\x10\x38\x6f\x39\xae\x77\x8c\xf5\x2f\xf9\xb7\x4d\xb4"
- "\xe3\x9d\x62\x6a\x07\x8d\x89\xb0\xfe\x89\x14\xf7\x60\xcc\x87\xf7"
- "\xaf\xb7\xd4\xf7\xeb\x7c\x63\xd4\x79\x8b\x3a\xbe\xfa\x59\x1c\xf9"
- "\x4a\x79\xec\xd9\x86\xf1\x4e\x95\x7a\x2e\x66\xf6\xb4\x2c\x83\xa9"
- "\x68\xd9\xca\xe2\xa5\xb7\x19\x96\xad\x5c\x56\xbc\x6c\x49\xe1\xb2"
- "\x0d\x4b\x8a\x97\xad\x5a\x99\xbc\x62\xc9\x13\xcb\x1e\x37\xac\x5b"
- "\xb2\xda\x90\x6a\xbe\xc1\x1c\x09\x03\xa0\x77\x19\x96\xac\x5e\xbd"
- "\x66\x45\x7e\x9e\x61\xe5\xb2\xc7\x53\x8a\xf2\x57\xe7\x17\x1b\x96"
- "\x14\xad\x5a\xb3\x32\xcf\x70\x43\xde\xf8\x1b\x52\xef\xc8\x8b\x54"
- "\xcf\xa1\x8d\xd5\x43\xb7\xef\xdc\xff\x75\xed\x38\x07\xba\x58\x8d"
- "\xa9\x28\xd6\xbc\x6c\xa5\x98\xb3\xfb\xd5\xa7\x13\x76\x82\x89\xce"
- "\x88\xa7\xf3\x8e\x59\xc5\x3b\x0e\xfc\xd5\x12\x1c\xb6\xd3\x40\x67"
- "\xc4\x23\xed\x09\xae\x8a\x5f\x35\xd8\xa5\x77\xcb\xf9\x59\xc6\x98"
- "\x8e\x6d\x4b\x60\xe7\x7e\xd7\x85\x31\x9b\x89\xde\x97\xd7\x9f\x83"
- "\xb8\xaa\xb5\xa0\xc5\x2b\x0a\x2f\x3d\x9d\x21\x8f\x65\x8e\xda\xa5"
- "\x7d\x0e\x71\xe6\xcb\xbe\x62\x47\xc4\x1f\x72\x58\xf9\x1f\x72\x84"
- "\x5c\xf6\x3d\xa5\xcc\x33\x67\x3e\x0b\x99\xa4\x9f\xc7\xa5\x7d\xfc"
- "\xbd\xd7\x33\xa8\xcb\x34\x5f\xdb\xf3\x9f\x53\x8d\x18\x0f\x1e\xa3"
- "\xf9\x56\xcc\x7b\xca\x29\x41\x14\xd2\xa5\x3d\x50\x92\x0a\x2f\x62"
- "\x5d\xab\xe3\x19\x73\x55\xec\x9b\xa4\xcc\xa7\x61\x1b\xf4\xd8\x96"
- "\x0e\xd1\x8e\x5f\x5d\xc3\xdb\xf1\x12\x4b\xdc\x39\x12\xe9\xfb\x09"
- "\xd1\xb3\x2f\x4f\x69\x03\xd2\xdd\x61\x97\x7e\xd5\x86\x74\xea\x89"
- "\xae\x60\x73\x7d\x34\xdf\x85\x74\xbe\xe5\x5b\x8b\x7c\x1b\x2d\xce"
- "\xb8\xdb\x51\x27\xec\x0f\xdb\xd3\x59\x8f\xf7\xdb\xbf\x82\xa8\x6d"
- "\x74\x3e\xb9\xe5\x3a\x76\xd8\xe9\x01\x5b\x41\x07\xc4\xae\x67\x0e"
- "\xf6\xef\xff\xd7\x25\xb7\xa9\x83\x7c\xc3\xaf\x96\x77\x68\xa9\x4d"
- "\xd8\x57\x44\xd5\x7f\x15\x72\x6e\x51\xfb\xe2\x95\xcc\xc9\x76\xa9"
- "\x63\xae\x5f\xf3\x73\x80\x28\xde\xea\xb1\xd0\x99\xd6\xbf\x4e\xc2"
- "\xba\xcb\xe4\xd8\xd8\xc9\xfa\x16\xaa\x62\xa9\x5f\x93\x9e\x39\x43"
- "\xe0\xd6\x29\xb8\xe9\xdc\x73\x2a\x23\xe4\xff\xeb\xb7\xb0\x8c\x43"
- "\x85\xbf\x3c\x10\x3f\xe1\xc4\x7b\x87\x52\x8f\x18\x87\xff\x9a\x62"
- "\x02\x07\xea\xb2\x23\x44\x7d\x89\x3f\x79\x89\x1d\xb5\x61\xfa\x8e"
- "\xf3\xa0\x45\xd8\xa3\xf5\x2f\x71\xfc\x5d\xc8\xf7\x59\x84\xff\x99"
- "\x2b\x01\xb6\x20\x4c\x4f\xc5\xbe\x32\x27\x3f\x83\xfc\xdf\xa9\x5f"
- "\x33\x07\xce\x63\xcb\xfa\x7c\x57\x80\x3e\x1b\x7f\x42\x31\xe1\x4e"
- "\xc4\x8f\x3a\xb4\xe3\x2c\xf6\xc3\xf8\x3c\x7e\x27\x24\x51\x3d\x78"
- "\xdf\x4e\xf3\x21\x88\x33\x47\xa9\x8f\xa1\xfe\x6f\xf7\x89\x39\x18"
- "\x59\xb7\x92\x69\xee\xba\xd4\xcc\xd8\x01\xf4\xef\x44\x23\xe9\x18"
- "\x96\xa9\x54\x74\x0a\x75\xfd\x28\xd7\xab\x38\x48\x62\x15\xff\xae"
- "\xaf\x1f\x89\x70\xa8\x57\x75\xa8\x4f\xa4\x57\x08\xdb\xa2\xe8\x14"
- "\xea\x5a\x3b\xc1\x21\x0d\x91\xcd\x1b\x8c\x5a\xf2\x91\x9d\xd2\xbb"
- "\x29\xa4\x63\xec\xa7\xf7\x77\xb0\xab\x16\x74\x08\x39\xbd\x9b\x62"
- "\x73\x0b\x19\x0c\xf0\xfd\x5d\x50\xf1\xbd\x1d\xf5\x38\x92\xf8\x2c"
- "\xe6\xaa\xdf\x4d\x41\xda\xda\x79\x2c\xbe\x11\x65\xc0\xfb\xaa\x7f"
- "\xef\xa6\xf2\x32\x0f\x0f\x0d\xf0\xf0\xdd\x8c\x60\x3c\x0c\xe0\x9d"
- "\x56\x9c\x73\xfe\x6e\x36\xd9\x0a\x96\x29\x51\xce\x2e\x0f\x26\x4b"
- "\xac\x43\xab\xdd\x09\x3a\xaa\xa3\x35\x8e\xc3\xef\x51\xea\xd8\x81"
- "\xbc\x76\x94\x16\x5c\x50\x9f\x5b\x1b\x00\x68\x4e\x9c\xca\x27\xc6"
- "\x11\x7f\xdf\xed\x1e\x28\xcf\x9c\x81\xe5\x6f\x78\xdc\x8f\x56\x7e"
- "\xb1\x8a\x16\x78\x71\x24\xea\x11\xa7\xb7\x25\xf9\x42\xf4\x26\x1a"
- "\x44\x3f\x69\x1d\x4b\xfa\xdd\x92\x6f\xab\x06\xa0\x34\xf9\x39\xbb"
- "\x07\xfb\x9e\xc0\xf9\xfd\xd0\xef\x1b\x5a\x5e\xf3\x7f\xdf\xd0\xb2"
- "\x33\xd4\xfb\x86\x80\x7a\x3f\xa7\x7a\x7d\xf5\xd9\x1a\x55\xdd\x87"
- "\x7c\x41\xea\x56\xca\x8f\x6f\x50\x8f\x67\xde\xbb\x95\x68\x38\x82"
- "\xfd\x14\xbb\x26\x5b\xc3\x10\x4f\x2b\xef\xc3\xdf\x4b\x15\xf1\x0b"
- "\xc5\x45\xef\xe9\x09\x26\xb0\x1d\xfd\x7f\xba\x38\x1a\xff\xc2\x79"
- "\xfe\x10\x3e\x03\xf4\xf4\x6b\x28\x50\xb2\x25\x3f\x60\x60\x41\x1e"
- "\xa2\x00\xc6\x70\x78\x86\x7f\x22\x49\x7e\x76\xf0\x07\x6d\x3f\x7c"
- "\x7f\xfe\xb7\xf8\x8b\x10\xf4\x72\x7c\x6e\xd0\xc8\xf5\x95\xab\x20"
- "\xd2\x2f\x50\x9a\x81\x52\x24\xd8\x1f\xf5\x36\x65\xd9\x38\xa6\x1f"
- "\xd3\xc4\x81\x19\xf3\xc8\xf8\x95\x67\xa6\x7e\xa6\x14\xff\x67\xfc"
- "\x0b\x5b\xa8\xaa\xe0\xba\xb0\x3c\xbe\xf4\x29\xd1\xde\x9f\x24\x35"
- "\xe8\xd5\x55\xea\xa1\x2c\x9c\xdf\xc4\xd2\x3f\x6e\xc4\x97\x84\xf9"
- "\x63\xda\xfa\x01\x2e\x77\x6e\x56\x81\x7f\x2c\xc8\xbf\x3e\xfe\x02"
- "\x6d\x1c\xea\xdf\x68\xd5\xfd\x75\xe2\x67\x6c\xc7\x25\xc4\x7f\xe1"
- "\x3f\x43\x7b\x84\x72\x3b\xa0\x1e\xd7\xe7\x06\x03\x1d\xe0\xff\xf5"
- "\x56\x25\x49\xad\xa1\x03\xf9\x37\xa5\xf9\x3f\x27\xb9\xfd\x9f\x6f"
- "\xc9\xf8\xf6\x84\xa3\x0d\xd2\x3f\xa5\xf6\x11\x00\x37\xc7\xf5\x27"
- "\xc6\x06\x98\x4c\x6c\x55\x80\x09\x0d\xfc\xc9\xd4\x84\x21\x3d\x35"
- "\xaa\x64\x6d\x70\xe8\xbf\xce\xdf\xd5\x9b\x65\x83\xb8\xce\xa1\x1f"
- "\x94\x39\x25\x20\x8d\x9e\x87\x19\xe4\xb4\x5b\x7f\x33\x08\x9e\xa7"
- "\x19\x54\xcf\x1a\x23\xfe\xd3\x00\x70\x43\xe1\xa5\xa0\xf5\xfb\xbf"
- "\x7f\xc1\x3f\x0d\xd9\xc7\xf7\x7f\x7f\xa5\x3f\x26\x7a\x71\xf4\x44"
- "\xfc\x87\xfe\x63\xfd\x8e\x92\xc9\x19\x4c\x4e\x60\xf2\xcd\x25\xe9"
- "\xc7\xbf\xff\xfb\xfe\xef\xfb\xbf\xef\xff\xbe\xff\xfb\xfe\xef\xfb"
- "\xbf\x7f\x82\x3f\x0d\x1f\x47\x30\xf9\xaf\xff\xbe\x3f\x9f\x86\x41"
- "\x05\x35\x4c\xd2\x00\x53\x65\x94\xdd\x0e\x1a\x1d\x0c\xd3\x5e\xba"
- "\x28\xcf\xd0\x4f\xd0\x45\x16\xa0\x6f\x7e\xe8\xbd\xcb\x0f\xf0\xba"
- "\x46\x95\x3e\xf6\x52\x51\xf4\xad\xff\x34\xc8\xbc\x30\x1c\x17\x86"
- "\xc3\x30\x18\x0e\x3a\x88\x80\x48\xb8\x0c\xa2\x20\x1a\x62\x70\xbc"
- "\xa9\x87\x11\x30\x12\x2e\x87\x38\xb8\x02\xae\x84\xab\x20\x1e\x46"
- "\xc1\xd5\xd8\x92\x04\xb8\x16\xc7\xf6\xd7\x21\x43\xc6\x04\x6f\x4b"
- "\x19\x18\xe3\xf1\x1f\xfc\x3f\x0b\x8c\xfc\x39\xf7\xfb\xf4\xef\x34"
- "\xdd\x2a\xa7\xb7\xcb\xe9\xf6\xef\xd3\xbf\xd3\x74\xc3\xdf\xf8\x77"
- "\xcc\xdf\xf4\x57\x83\x2e\x5b\x78\x6d\x4d\x50\x5f\x19\x98\xaa\x91"
- "\xff\xfa\x9f\xe1\x6b\xca\x0f\xc2\xe7\x5f\x3e\xf0\xcf\x88\xd7\x44"
- "\x71\x5b\x0a\x20\xe6\x79\x99\xfa\xcf\x13\xaa\xa4\xf2\xb7\xb9\x13"
- "\x2f\x07\x5e\x08\xb9\x19\x7b\x18\xcb\x65\x78\x5d\xa1\xe0\x11\x30"
- "\x74\x04\xde\x69\xcc\xff\xac\x11\xc0\x7e\x0c\x2f\xac\xf6\x73\x33"
- "\xc0\xf1\x28\x80\x2f\x66\x01\xfc\xef\x1e\x80\x13\xdd\x03\x38\x7b"
- "\xca\x06\xa8\xfb\xd2\x24\xee\x0d\x78\x9d\x23\x44\x60\xd7\xf4\x4f"
- "\xef\x59\xa7\x67\x67\x18\x6e\x1d\x3f\x71\xfc\xed\x3f\x58\x62\x48"
- "\xc9\x4a\x31\xdc\x96\x7a\xeb\xad\x13\x52\xef\x98\x70\xeb\x0f\x0d"
- "\xb7\xdd\x76\xd7\xad\xa9\x77\xa5\xa6\x1a\x56\xac\x2f\x5a\x76\x6b"
- "\xea\x13\xf9\x86\xa5\xcb\x8a\x56\xac\x5b\x52\x94\xff\x75\x4d\xfa"
- "\x26\x7f\x44\xde\xb5\x3e\xe0\x12\xf0\xe7\xf6\x14\x90\x7e\x53\x06"
- "\xd2\x1f\x72\x61\x90\x78\x34\x55\xf2\x5c\x6a\x92\x7c\x05\x64\xaf"
- "\xb4\x82\xe6\xc9\x26\xd0\x2c\xb5\x83\x26\xb7\x06\x34\x39\xc7\x40"
- "\xb3\x3d\x0b\x34\xcf\x1b\x40\xf3\x9c\x11\x34\xa5\x9d\xa0\x31\x47"
- "\x0d\x4e\xfb\x69\xb3\x48\xdb\x87\x65\xf7\xe2\xf5\x7a\x2a\x68\x5e"
- "\x4d\x10\x69\x56\x3d\x68\xfe\xe3\x6b\xa5\xfa\x1d\xff\x5d\x6c\xdc"
- "\x30\xe8\xcf\xce\x75\x8b\x66\xac\x62\xd3\x83\x4c\x8e\x7e\xff\xf7"
- "\xfd\xdf\xf7\x7f\xdf\xff\x7d\xff\xf7\xfd\xdf\xf7\x7f\x7f\xe7\x7f"
- "\x0e\x0d\x4c\xfc\x4a\xd2\xc2\x6f\x31\x2a\x72\x59\x74\x09\x76\xcd"
- "\x9d\x13\x69\x2d\x09\xd0\x37\x53\xa0\xe3\xfb\x9e\x88\x4b\x8b\x3f"
- "\xe1\xd8\xf1\x0f\xc3\x6b\xb8\x4e\xbd\x26\x85\xd6\x1c\x1d\x88\x4f"
- "\x85\xb0\x78\x10\xeb\xa3\x2c\xac\x5d\x7c\x73\x7c\x1b\x74\x83\x8e"
- "\xef\x19\x40\xdf\x89\x22\x7e\xb3\x1d\xde\x68\x50\xd6\x53\x29\x70"
- "\xb4\x9e\x8a\xd6\x5f\x21\x2c\xff\x26\x21\xc4\xfa\x19\x3d\xfb\x69"
- "\xbc\x34\xad\x16\x80\xbe\x37\x7d\xf1\x25\xe6\x68\x2d\x01\x38\xd0"
- "\x28\xbe\x3b\xa5\xb5\x35\x88\xbf\xc3\x0e\xe5\x8d\x62\x3d\x15\x73"
- "\x3e\x83\xe9\x98\xd6\x6d\x87\xad\xca\xf7\x13\xdd\x4a\xba\x6d\xcb"
- "\x39\x68\x35\xf0\xef\x6a\x1c\xad\x06\x2f\xa4\x8f\xa1\xf6\x47\xc4"
- "\x23\x6c\xc8\xb5\x34\xca\xba\x31\xaa\x5b\x86\xcf\x08\xa8\x0f\xdb"
- "\x18\xb1\x50\xa9\x2f\x04\x8e\x28\x2a\xab\xe0\x41\xda\xbb\xb1\x4c"
- "\x95\x82\x07\xe9\x51\x68\x74\xa4\x6f\xe4\x75\xec\x09\x46\x93\xe1"
- "\xc3\xb4\xf0\xfc\x3b\x26\x74\xa6\x1d\x5d\x9a\x68\xb8\xe2\xd6\xe9"
- "\xf9\x89\x37\xb1\xd4\xd8\xe4\xe7\x53\x2f\x33\x46\x18\x63\x26\xcc"
- "\x4d\x95\xf4\xd2\x58\x29\x75\xa4\x5e\xba\xf1\x31\xfa\xb7\x7d\x74"
- "\x12\xff\x35\x68\xd3\xb6\xe4\xdd\x61\x18\x3e\xe5\xc7\xcf\xad\x35"
- "\xbe\xfb\x8b\x19\xc6\x7b\xe7\xaf\x1e\xf7\xdb\x54\xe9\xf2\x3f\x3c"
- "\xff\x7e\xd2\x57\x04\x31\x66\x2c\xfd\xbb\xf0\x40\x58\xdc\x38\x0b"
- "\x61\x69\x1f\x65\xf8\x2d\xa5\xdc\xac\x4d\x2b\xce\xbb\x7d\x42\x23"
- "\xd5\xf8\xe0\xe3\x29\x16\x2a\x33\x63\xb6\x28\x23\x20\x26\xec\x53"
- "\xe7\x8d\x7f\x87\x4a\x1b\x38\x0d\xa0\x15\xb8\xfa\x71\x5f\x25\x28"
- "\x14\xa9\x63\x0f\xa7\x5e\x2b\xd7\xfd\x33\xfa\xf7\x91\xdd\xe3\x25"
- "\xc4\x30\x32\x65\x2a\xe5\x4e\x70\xa5\xba\x0c\xad\x69\xda\x27\x12"
- "\x93\x86\xdf\xfa\x0b\xbc\x4b\x7c\x22\x51\x2f\xe1\xfd\x8f\xc5\x3d"
- "\xf1\x20\xef\x87\x02\x42\x2f\xdd\x10\x97\x96\x97\x77\xc7\x67\xce"
- "\xbc\x3b\xf4\x92\xb1\x31\x2f\xcd\x78\x65\x65\xe1\x2d\x89\x69\x89"
- "\x79\xb7\xeb\x25\xfe\x7b\x97\xf1\x86\x8a\x47\xf4\xd2\x4d\xbf\x49"
- "\x1d\xa1\xd7\xfc\x57\x83\x06\x3e\x94\xe6\xed\xf9\x30\xec\x93\x4f"
- "\x3e\x82\x9b\x57\x7c\xa4\xb9\x79\xd6\x47\x92\x66\xc4\x47\x51\x0f"
- "\xc3\x7f\xe9\x87\xc3\x7f\xc5\xe3\x65\xb8\x17\xda\x34\xa5\x59\x6d"
- "\xd2\xba\xdc\xb6\xb0\xd2\x23\x6d\xda\x87\xa0\x2d\x7c\xf1\x88\xb6"
- "\x61\xf7\x3e\xd0\x36\xfc\xa1\xcf\xdb\x74\x37\x41\x5b\x04\x40\xdb"
- "\x18\x90\xda\xc6\x42\x5c\xdb\x6d\x23\x9e\x6b\xbb\x77\xb4\x64\xbd"
- "\xbc\xe7\x1e\xeb\xd5\xda\x19\xd6\x44\x3d\x58\x6f\x88\x04\xeb\x8d"
- "\x51\x51\xd6\x9b\xf0\x1a\x07\x0d\xd6\x54\x7c\x4e\x83\x04\x6b\xf8"
- "\x86\x61\x00\x82\x96\x8f\x0c\x00\x1f\x8d\x81\x29\x1f\x8d\xc5\xdf"
- "\xeb\xf1\x4a\xc4\xeb\x06\xbc\x6e\xc2\x0b\xc7\x29\x1f\xd1\xfe\x3e"
- "\x90\x34\x2c\xed\xdf\x7f\xb3\x64\xc9\xc4\x25\xb7\x67\x4f\x0b\x0b"
- "\xcb\x4f\x84\xcb\x90\x6b\xda\xb4\xc4\x31\xe1\x93\xc2\xf3\x13\x3f"
- "\x73\x1a\xf1\x5f\xbd\xf4\xe8\x7f\x87\x0d\x9b\xe0\x9a\xe4\xca\x7d"
- "\xf7\x33\x2f\x44\x22\xff\x21\x50\x87\x7b\x2c\xa0\x71\x22\x8d\x4e"
- "\x4b\xcf\x3d\x2e\x4b\x94\xde\x0e\x11\x05\x8a\x1e\x8b\xbc\xdf\xea"
- "\x9d\x96\x32\xd4\xbf\xa8\xe4\xe0\x79\x9b\x29\x2f\xe3\x02\xe5\xf2"
- "\x82\xe7\x91\x4e\x47\x95\x29\x79\x3d\xd2\x81\x2c\x7c\x46\xfd\xd7"
- "\x4d\xf2\x87\xb5\x86\x39\x2d\x9a\xcd\x98\xb7\x67\x30\x1e\x2b\xe2"
- "\x49\xaf\xc0\xbc\xb6\x20\x79\xf7\x39\x2d\x73\xa9\x8e\xce\x80\x3a"
- "\x9c\x4a\x1d\xf4\x3d\x77\x1d\xda\x17\xf9\x1d\x9f\x25\xa2\x85\xca"
- "\xda\xdc\x0e\x68\xf4\x75\x69\xb4\xe6\x43\x40\x78\x5c\x96\xe8\x44"
- "\xa5\x3c\xc1\xd1\x7e\x04\xf4\x1d\x1e\x5f\xef\x09\xd1\x0f\xd2\x7a"
- "\xcf\xed\x88\xc3\xb0\x56\x73\xd5\x71\x88\xf2\x52\x19\x3b\x44\x17"
- "\x38\xa5\x83\x58\x77\x74\xae\xe2\xe7\x30\x8d\xaf\xcf\xa7\x3a\xb0"
- "\xed\x65\x98\x57\x32\x98\xe6\x83\x23\x05\x5f\xa2\xab\x95\xbc\x0b"
- "\xad\x21\x14\x65\x18\x73\x5a\x0e\xfa\xb0\xcc\xa1\xc1\xf8\x58\x99"
- "\xd3\x22\x3d\x87\x79\x5d\x41\xf2\x36\x8b\xba\x62\xb4\x41\xf2\x2c"
- "\x98\x27\x61\x9e\x21\x44\x5e\x18\xe6\xa5\x05\xcb\x6b\xad\xe1\x38"
- "\x73\xfa\x79\x1e\x13\x6d\xc4\xe7\x02\x85\xe7\x5f\xdf\x1e\x92\xf7"
- "\xad\xc8\xf7\x98\x9a\x40\xfc\x84\xdb\x29\x1d\x26\x7c\x2d\x83\xeb"
- "\x3e\xa4\x71\x5a\x32\x50\x17\x62\x8e\x0e\xce\xfb\xf8\x1a\xe4\x03"
- "\xd1\xe5\x08\x92\x97\x80\xed\x41\x7f\x1d\x1b\x15\x04\xe7\x30\xcc"
- "\xb3\x63\x5e\xd2\xd7\xc8\x43\xcf\x7d\x38\xed\x77\x30\x1a\xc2\x4f"
- "\xc0\xc8\xc9\xd4\x1e\xa1\x17\x30\xec\x04\x8c\x38\xdc\x23\xd6\xbe"
- "\x3b\x0c\x1b\x20\x0c\x9f\x5f\x65\x16\xeb\x15\x98\xdf\x8d\xfa\xa4"
- "\xb3\x9d\xf3\xc0\x09\x88\xad\x44\x98\x30\xfa\x56\x95\xfa\x27\x4c"
- "\x0f\xb3\xb9\x3d\xf4\xbd\x06\xea\x59\xec\xdb\xf8\x2b\x61\x39\xfe"
- "\xfd\xc9\xbc\x1a\x48\x24\x1a\xf9\x7a\x55\x8b\x55\x43\xeb\x3f\xa9"
- "\x3f\x74\x4a\x70\x93\x93\xeb\x6c\x2c\xf6\x7f\xba\x06\x79\xad\x2e"
- "\xd1\xa0\xc5\xb2\x1b\x25\x3d\x5f\xfb\xed\x40\x5c\x44\xc3\x03\x3e"
- "\x8b\x55\xea\xc7\x23\x59\x2f\xa3\x75\xbc\x3d\x16\x69\xa6\x53\x8a"
- "\x65\x02\x8f\xde\xa0\xe0\x21\x38\xac\x8b\xaf\x87\xef\xb1\x68\x7f"
- "\xa2\x82\x49\x57\xd7\x35\xc1\x09\x61\x44\xf3\x71\xd0\xd7\x50\x7d"
- "\x72\x1b\xf9\xda\x5a\xdb\x5a\x0f\xd8\x30\xbe\x38\x01\x7a\x33\xb6"
- "\xd5\x70\xc0\x4d\xdf\x34\x5b\x47\xd4\x6f\x02\xe0\x76\x21\x81\x41"
- "\xc6\x59\xad\xe0\x24\x1c\xaa\xb6\x8e\x14\xf5\x53\x5b\x75\x20\xc3"
- "\xb6\xaa\x69\x24\xbc\xd8\xae\xab\xea\x10\xae\x15\xa3\x16\x19\xa6"
- "\x4b\x81\x51\xc9\x60\x8c\x4c\x1f\xf1\x87\x64\xb6\x50\xb1\x4f\x97"
- "\x65\x04\xf6\xff\x97\x75\x09\xbb\x1d\x48\x97\x69\x88\x17\x34\x68"
- "\x90\x06\x8d\x55\xe0\x1f\x91\xa1\xe0\xb7\x83\xde\xad\xa6\xb9\x8e"
- "\xc3\xea\x23\x84\x9d\x72\xd8\xe2\x01\xd8\x58\x3f\x58\xe4\x85\x24"
- "\x64\x00\x92\x1d\x46\xe4\x21\x3f\xc2\x10\xa6\x19\xe5\x6d\x50\x60"
- "\xe4\xf6\xc7\x63\xde\x14\x19\x5f\xab\x0a\x5f\x31\xe1\xa3\xf5\xaf"
- "\xc2\xf7\x8e\xb0\x0f\xf8\x3e\x68\xc3\x67\xc7\x60\xff\x4a\xf6\x3a"
- "\x52\x87\x70\x89\x94\x6e\x1a\x0b\xfa\x93\x30\xe2\x8b\x1e\x29\xac"
- "\x4b\xf0\x62\x24\xfa\xbf\xe8\xfe\xd8\x06\x9f\x27\xda\xc1\xe0\x96"
- "\xeb\xcb\x23\xde\x0c\xf8\x5b\xaa\x73\x64\xb6\x52\xa7\x92\xaf\xb6"
- "\x19\x63\xc4\x04\x8c\x4f\x8c\x6f\x18\x13\x8c\xa3\x95\xd8\x65\x72"
- "\xeb\xd2\xc4\x09\xce\xc9\xad\x86\xdb\x53\x5f\xcb\x4f\x4c\xe6\x7d"
- "\xff\x4d\xc7\x53\xc7\x62\xef\xfe\x07\xfe\xef\x4f\x28\x25\x91\xa7"
- "\x60\x3a\xdd\x8f\xa5\x7b\x39\x5e\xc0\xbb\x07\xe7\x85\x0d\xbf\xa1"
- "\x88\xee\x44\xe4\x60\xbc\x72\xd1\xe3\x61\xe9\xf2\x7d\x8c\xc8\xb9"
- "\x85\xc7\x1c\x49\x53\xe9\xfe\x46\x8e\x6b\x42\x23\xd5\x3c\xfe\xf9"
- "\xd4\x1f\xcd\xff\x55\xd8\x47\xcf\x3d\x69\x8c\xba\xc9\x42\x30\xc9"
- "\xf7\xa7\xee\xc2\x94\x03\x94\x32\xf6\x67\x9c\x02\x75\xa9\x7d\x54"
- "\x4a\xce\x4f\x48\x9e\x9e\xfa\x6f\x0b\xe6\x5d\xff\x87\xd4\x91\x97"
- "\xff\x76\xe1\x01\x2a\x7f\xf9\x48\xbf\x9a\xc6\x0e\x50\xf5\xd8\x8e"
- "\x71\xcf\xfe\xe0\x35\x81\x65\xfe\xbc\xb0\x3f\x18\x47\xaf\x2a\xa2"
- "\xd4\xeb\x79\x2c\x46\xb1\xca\x84\xb3\xa9\xe1\xcf\xcd\xff\xec\x3f"
- "\xe6\xef\x6e\x7f\x64\x1c\xb6\xf4\xf2\x9f\xb4\x3f\x32\x7f\xf7\x67"
- "\xff\x11\xf6\x0c\x41\xde\x9c\x97\x1a\x67\x08\x9f\xbc\xa6\xf5\x81"
- "\x71\x9c\xaa\xab\x2a\xe3\xab\x47\x35\x5e\xdd\x7c\xcd\xfe\x84\xb6"
- "\x6b\xff\x7b\xf4\x9f\xae\xfb\x3f\x83\x73\x0c\xc3\x38\xe2\x9e\xd4"
- "\x31\xfd\x71\x04\x60\x1c\x71\x1c\xe3\x88\x52\x8c\x23\x8e\xa8\xe3"
- "\x88\xdf\x45\xde\x55\x22\x62\x09\x01\x2f\xe2\x9f\xe4\xff\xc6\xf8"
- "\x67\x25\xc6\x3f\xc9\x1f\x85\x3f\xf8\xd0\x47\x51\xd9\x22\xfe\x19"
- "\x11\x3b\x8c\xc7\x40\xa3\xf0\x17\xe3\xa0\xff\x1a\x83\xbf\x49\xf8"
- "\x3c\x6e\xe4\x70\xff\x98\x68\x6e\x4c\x5b\xf8\x42\x8c\x89\xd2\x30"
- "\x26\x32\x2e\x69\xd3\xcd\xfc\x4d\x5b\xc4\x24\x63\x5b\x64\x7f\x5c"
- "\x34\xa3\x2d\x3d\x7e\x42\xdb\x4c\x2d\xb4\xdd\x07\x22\x36\xda\x02"
- "\xa9\xbf\xd3\xc6\x69\x3e\x8e\x02\xed\xc7\x31\x0d\x91\x1f\xc7\x5a"
- "\xad\x1f\xeb\xf1\x1a\x01\x0d\x1f\x8f\x84\xe1\xbf\xbd\xa7\x01\x7e"
- "\x3b\xad\xd4\xfe\x91\x16\x62\x3e\x8a\x80\xb3\x1f\x8d\xc0\xdf\xdc"
- "\x97\xe0\xa3\x1f\x83\xf6\xa3\x48\xed\xd9\x81\xf6\xc6\x7d\xf1\xd1"
- "\x98\x0f\x27\x7f\x34\x36\xed\x3f\x3f\xba\x3e\x7d\xee\x47\x89\x1f"
- "\x7e\xf8\xd1\x0d\xf6\xd1\xea\xb8\x89\xda\x0c\x70\xcb\x16\x8a\x60"
- "\x91\xdf\xb7\x27\x0d\x4b\x1d\xf6\x6c\x3e\x8f\x07\xef\x90\xe3\xc2"
- "\x3b\x8c\xd3\x9f\x9b\x3f\xff\xf1\x30\xc9\x38\x9a\x47\x97\x72\xa4"
- "\x39\x10\x7d\xfa\xc7\x9c\x93\x5b\x07\x62\xce\x44\xe7\x40\xcc\x69"
- "\x18\x36\x79\xad\x5f\x7c\xd6\x87\x69\x47\xd3\x12\x0d\x37\xa4\xf2"
- "\xc8\xac\x7d\x54\x60\xb4\x36\x7e\x5b\xea\xe4\x44\xdd\xed\x1d\x18"
- "\xb3\x0d\x2f\xff\xf1\xe3\xbf\xa0\x0b\xa3\xb6\xf3\x7a\xe9\xb9\xe5"
- "\x4b\x26\xe5\x3c\x73\x33\xca\xfc\x72\x8a\x82\x87\xff\xf8\xd9\x96"
- "\x1f\xff\xf8\xb9\x96\x8f\x1e\x99\x37\xee\x1d\x4c\xfb\x6d\x62\x31"
- "\xea\xcf\xff\xcb\xfb\x7f\x13\xce\xa6\x85\xff\xf8\xa1\x96\xe7\x7e"
- "\xfa\xc4\x13\xad\xa4\x2f\x24\x5b\xa5\x8f\xea\xb1\x8c\xc4\x98\x44"
- "\xf3\xae\xcb\x72\x05\xc6\x3f\xa3\xda\x02\xfb\xb2\xef\xed\xf2\x7b"
- "\xbb\xfc\xde\x2e\xff\x16\x76\x79\x25\x08\xbb\x1c\x55\x19\xcc\x2e"
- "\x67\xce\x99\x91\x79\x97\x61\xcd\xe3\x06\x53\xd1\xaa\x27\x8a\x96"
- "\xac\x30\x14\xae\x5a\x92\x97\x9f\x17\x09\xfd\x19\x4b\x1e\x2f\x5e"
- "\xb6\x76\x49\x71\xfe\xa0\x6f\x1b\xe3\x95\x98\x74\x70\x6c\x3d\xca"
- "\x1d\x3a\xb6\xbe\x3a\x2e\xf8\xb8\x44\x83\x7d\xfb\xd5\xa9\x41\xf2"
- "\xc6\xca\x79\xb3\x82\xe4\x4d\x95\xf3\x0a\x82\x8c\x01\xa3\xc5\x18"
- "\xe3\xea\x2d\xc1\xf2\x30\xbd\x46\x89\x49\x70\x9c\x26\xb5\x8e\xed"
- "\x06\x8a\x49\x4e\xc0\xd5\x1f\x62\x9b\xba\x30\x7f\xbf\x12\xcb\xd8"
- "\xe1\xea\x2d\x4a\x8c\x26\x8f\x43\x92\x9c\x16\x23\xb6\xf3\x6a\x7b"
- "\x90\x31\xca\xcd\x72\xbd\x9e\x81\xd8\x68\x8e\xc1\x65\xb9\x26\x6a"
- "\x70\x6c\xd4\x0e\x62\x0c\x79\x4d\x52\x00\xec\x24\x05\x16\xe3\x49"
- "\xda\xf3\xa1\x9b\xbe\x49\xeb\x86\x6b\xf6\x33\xcb\xa8\x6a\x8a\x29"
- "\x69\x1c\x49\x78\xc4\x58\xb2\x83\x8f\x25\x71\xac\xd8\x89\x65\x8b"
- "\x55\xe3\xc9\x4e\x8c\x8d\x87\xd3\x78\xf2\x04\x5c\xf3\x2a\x8d\x29"
- "\xb7\x73\x5c\x27\x09\xd7\x6c\xc2\x65\x87\x6b\xac\x3c\xee\x13\x65"
- "\x9b\x55\xf3\x66\x38\xae\xbd\x86\xef\x05\xaa\xc4\x85\x98\xdf\x6e"
- "\x97\xbe\x8a\x53\xda\x40\xb1\xa0\xdc\x8e\x32\x21\x87\x6b\x82\x8c"
- "\x7f\xda\x7f\x22\xc6\x81\x09\xfd\xe3\x1f\xc2\xe7\xb3\x8c\x7a\xbb"
- "\x8e\xe3\x4c\x48\x54\x70\xaa\xf5\xf2\xf1\x55\x2b\x97\x2e\x7b\x62"
- "\x4d\x51\xbe\x61\xf5\xac\x59\x86\x15\xab\xf2\xf2\xc7\x8f\x1f\x1f"
- "\xe9\xa7\x7f\x51\x22\xa6\x3d\x68\x24\x3d\xa4\xb8\x56\xd6\x43\x23"
- "\xc6\x9c\x72\xdc\x9c\x50\xe6\x3f\xbe\x38\x68\x94\xe3\x5b\xfa\x86"
- "\x2b\x55\x86\x69\xf4\x83\x41\x7c\x72\x8c\x4c\x71\x6e\x8c\x0c\xd3"
- "\x16\x88\x07\xf3\xf8\xb8\x88\xbe\xb3\xeb\x11\xed\xeb\x0e\xc0\x73"
- "\x8f\x3c\xde\x41\xbd\x1f\x26\x8f\x13\xae\xd5\x07\xe0\xb9\x67\x60"
- "\xbc\xa1\x51\x60\x26\xaa\xc7\x26\xf8\x9c\xae\xc8\x64\x20\x8e\x3f"
- "\xd0\x25\x70\x6b\xf4\x03\x71\xff\xb5\x85\x01\x63\xa9\x2b\x07\x70"
- "\x83\x5e\x86\xa9\xf2\xa7\xf1\xc0\x49\xb9\xad\x3a\x15\x9e\x7d\xfe"
- "\x78\x0e\xfc\x45\xc6\x13\xa6\x82\xe9\x08\xa0\xb1\x6b\x30\x8d\xd6"
- "\x18\x81\xbb\x01\xeb\xb7\xcb\x6d\x1b\x1d\xd0\x7e\x84\xe1\xb8\xe3"
- "\x10\x26\x41\x81\x99\xa8\x1e\x4b\xd1\x78\x8e\x7f\x7b\x09\xa3\x67"
- "\x91\x3e\xe1\x35\x0c\xe9\xfe\xb3\x6a\x4c\x37\x5c\x2e\x17\xd8\xfe"
- "\xe8\x1e\x1c\x2f\xd4\xfb\x8d\xd3\x46\x07\xb4\x1f\xc7\x86\x23\x15"
- "\x1e\x69\x15\x98\xc0\xf6\xdb\x05\x8d\x23\x46\x0c\xb4\x7f\x74\x47"
- "\x00\x9e\x2b\x49\xa7\x08\x97\xaa\x2e\x4f\x00\x9e\xe3\x32\x1f\x55"
- "\xbc\xbe\xce\x10\x20\x8f\xff\x95\xe9\x51\xf1\xfa\xba\xf4\x00\x3c"
- "\x67\x28\xdf\xbf\x5d\xd7\x15\x04\xe0\x39\x33\xd0\x2e\xd4\x63\x01"
- "\x53\x19\x30\x8e\x95\x98\xe5\xb7\xd1\x01\x78\x9a\x15\x98\x9e\x61"
- "\xcf\x35\x08\xd9\x5e\xd7\xaa\xf8\x22\x21\xd7\x84\x54\xc2\x8d\xe9"
- "\xc7\xd4\xbe\x00\xe9\xea\x1a\xcc\x27\x03\x04\xf2\x49\x45\x97\x3c"
- "\x16\x37\x24\x06\xb4\xef\xa4\xcc\xa7\x48\x15\x9e\x8c\x80\xf6\xfd"
- "\x45\xc6\x13\xae\x82\x09\x90\xff\x81\x6e\x19\x8f\x56\x05\x13\xa8"
- "\xff\xa7\x64\x3c\xea\xba\xf6\x7d\x3d\x9f\x0c\x7e\xfa\x4f\xbc\xc2"
- "\xb4\xee\xaf\x99\x83\xd2\x89\x77\x07\x63\xb0\xff\xdb\x5d\xc3\xbf"
- "\x8d\x8e\x19\xbe\x8f\xf6\x90\x42\x1f\x6d\xe4\x73\x83\xbd\xe4\xa7"
- "\xc7\x98\xeb\xd1\x9f\x89\x36\x40\xaa\xf0\xdd\x63\x96\x00\xdf\x8b"
- "\x75\x4c\x96\x1d\x62\x8a\xd5\xef\x01\xec\x30\xa6\x52\xce\xc3\xf6"
- "\x5f\xd1\xa1\xe4\x51\xba\x98\x5f\x1c\x83\xfd\xdf\x28\x93\xe8\xc7"
- "\xc6\x14\xca\xb0\xe8\xf7\x13\x32\x82\x7d\xaf\x1c\xea\xfd\xcb\xea"
- "\x78\xe6\x2b\x1d\x45\xdf\x2f\x9f\x9d\xe4\xb3\x30\xb0\x99\xdd\x60"
- "\xb8\x1a\x4a\x8f\xc3\x58\x1d\x8d\xf1\xb7\x6f\x00\x5d\xa9\x89\xb9"
- "\x69\xbf\xd9\x23\x8e\x6e\x28\x75\xb0\x2e\x3a\x6b\x60\xd3\x59\xd0"
- "\xd1\x99\x01\x9b\x9e\x82\xf8\xd6\x92\x2f\x82\x7e\x83\xeb\xa3\xb3"
- "\x01\x13\xa8\x6c\x27\x1c\xa9\xe9\x84\xd2\x1a\xff\xb2\xa5\xd7\x42"
- "\xfc\x61\x3a\xb7\xc0\x02\xb1\x44\x07\xbd\x4f\xf1\x44\x9e\x9d\x54"
- "\xf2\x32\x68\x4b\x31\xba\x3c\x9c\x67\x55\x68\x69\x27\x5a\xb6\x9c"
- "\x04\xdd\xee\xa5\x56\xe9\x99\x93\x44\xaf\x77\xd2\xde\x0d\x6e\xe9"
- "\x40\xfc\x2c\x38\x10\x7f\x0c\x5a\xe3\x27\x43\xab\x39\x1d\xb6\x9f"
- "\x84\xa8\x03\xee\x34\x68\xd5\xce\x80\xd6\xc4\x74\xb0\x75\xe3\xbd"
- "\xc1\x8b\x30\x4e\xbe\xdf\xd1\x09\x18\x6b\xdd\xb9\x1c\x74\x76\x81"
- "\x13\x79\x36\xf6\x90\xb2\x77\x0f\x3d\x07\x6b\xc7\xea\x51\x10\x8f"
- "\xf4\x75\x21\x2d\x77\x1e\x87\xeb\xc3\x13\xe3\x21\x95\xfa\x5f\x5b"
- "\xb5\x07\xb4\x25\x10\x11\x42\x2f\xe2\xf8\xbe\x9f\x18\x47\xd5\xbd"
- "\x84\x7d\x3d\xfe\xf6\xa0\x4e\xb8\x2c\xd7\xa7\x61\xdd\xc7\xe4\x79"
- "\xaf\xee\xd2\x57\x51\xcf\xd6\xe5\xd0\x3e\x20\xd8\x4f\x5f\x9f\xa3"
- "\xe4\xd1\x7e\xa6\xb4\x4f\xe9\x84\x38\xd0\xdb\x3c\x46\xf8\xa0\xb7"
- "\x8b\xbe\xb5\xef\xa6\xfd\x0f\x08\x1f\xf6\xf9\x61\x34\xff\x84\xf4"
- "\x8c\xc3\x3e\xbe\xfb\x7a\x84\xc3\xf2\x28\xff\x76\xbe\x87\x30\xbb"
- "\x6a\x81\xd3\x77\xd5\x82\xb3\xbe\x9f\x2e\xe8\x61\x3f\x5d\xf0\x95"
- "\xf7\xa7\x0b\xbe\x2c\x5d\x0f\x3a\xef\x55\x0b\x1c\x47\x4c\x5c\x06"
- "\xfa\x23\xa6\x53\xf4\xdd\xbc\x6e\xe3\x29\xd0\x2f\x7a\x0a\x65\xef"
- "\xf9\x14\x36\x2e\x83\x78\x5f\x44\x9f\xc3\xe6\xf9\x04\x16\x95\x00"
- "\xf3\x45\x78\x82\xca\xb6\x27\xd2\x6b\x56\xe6\xd3\x5c\x96\x44\xbd"
- "\x5d\x72\xa6\x52\xbd\x8e\xe8\x70\x33\x5e\x25\x78\x95\xe1\xb5\x85"
- "\x45\x7a\xb7\x20\xaf\x4a\x63\x36\x6b\x80\xf6\xeb\x99\xe0\x03\xcd"
- "\x49\x48\x4c\xa6\x33\x8d\x43\xf0\x2d\xc1\xb7\x3d\x0e\x6e\x2a\x83"
- "\x4d\x2e\x57\x01\xed\x9b\xea\x20\xfb\xa2\x78\x14\xeb\x31\x63\x3d"
- "\x5c\xe7\xd1\x46\x9c\x2c\x26\x8e\xde\xe5\x75\x39\x9f\x2e\xd0\x38"
- "\x9e\x2e\x90\x7a\x62\xe2\xc2\x10\xa6\x06\x61\x9a\x64\x1e\x76\x11"
- "\x2e\xb4\x1b\x47\xb4\x07\xc2\x10\xa7\xe9\xdd\x73\x1d\xda\xda\x97"
- "\xd8\x31\x84\x6b\xed\xc7\x85\xb8\x77\xf2\x38\x29\xb1\x43\x49\xa3"
- "\x38\x69\x1b\xc2\x51\x79\x9b\xdb\x48\xf5\xd8\x6d\x85\x5d\xb4\x5f"
- "\x45\x24\xeb\x13\xf5\x51\x0c\x47\xb6\x1a\xed\x86\x61\x2e\x0b\x64"
- "\x11\x6e\x2a\x67\xeb\xee\x02\x2c\x17\xc6\x4a\x0b\x30\x5e\x84\x39"
- "\x2e\x56\xa0\xa1\xbd\x6b\x0f\x60\x79\x51\xf7\x0d\x46\x85\x46\xaa"
- "\x83\xef\x5d\x4b\x74\xa2\x3e\x1c\x28\x74\x43\x74\x35\xcd\x93\xc3"
- "\x3c\xc2\x47\xb8\x50\x0f\xec\xd8\xd6\xb0\x03\x85\x0e\xf0\x31\x3f"
- "\x9c\x76\x19\x5f\x95\x1f\x3e\x4c\x67\x88\x8f\xf4\xaf\x15\xcb\x44"
- "\x37\x70\x7c\x73\xdf\xf5\x11\x3e\x37\x68\x0d\x9c\xde\xf9\x84\x83"
- "\xef\x03\x8d\x38\xad\x6b\xa7\x62\xec\x78\x83\xdb\x51\x5a\x10\xc6"
- "\xbf\x93\xc7\xf2\x7b\x37\x75\x85\xb3\x9e\x9c\xb0\x18\xfe\x8d\xfc"
- "\x54\xa0\x77\xad\x08\xf3\x47\xd6\x53\x10\x16\xdd\x8d\xb1\x1e\xc2"
- "\xd0\xbe\x59\x44\xa7\x5a\x96\x73\xa7\xcf\x9f\x0c\xf3\xd3\x67\xa6"
- "\x4f\x86\xd9\xf7\x4c\x9b\x0c\xa9\x77\xa6\xa4\x4e\xfc\xc1\x0f\x7f"
- "\xc0\x6f\x7e\xf0\xc3\x49\x3f\x80\xac\x87\xe6\x4e\x86\xac\x39\x93"
- "\x61\x1e\x5e\x59\xf3\xa6\xcf\x4d\x9f\x3e\x6f\x32\xe4\xcc\x98\x89"
- "\x4f\xd3\x26\xdf\x9a\x7a\x6f\x4a\xd6\xb4\x99\xd3\xe1\x81\xec\xdb"
- "\x52\x6f\xbb\x0d\xee\x99\x3e\xeb\xd6\xd4\x54\xf9\xf7\xd6\x54\x02"
- "\x79\x64\xd2\xf4\x79\x29\x59\x45\xab\x8a\x57\xa5\xcc\x99\x39\x8d"
- "\x52\x60\xfa\xf4\xc9\x59\x7e\x71\x64\x92\xf7\x9c\x97\xf8\xed\x64"
- "\x67\x32\x68\xbf\x62\xa8\x43\x3d\xc0\xab\x9b\xef\x83\x04\x37\xfd"
- "\xbe\x8e\xe4\xc7\xfb\x82\x1b\xe3\xa8\x3f\x75\x59\x6e\x24\xf9\xf3"
- "\xf9\x5b\xda\x33\xf8\x04\x8c\x9f\x8c\x79\xa3\xe4\x78\x24\x1c\xf3"
- "\xdd\xfe\xf9\xe3\x16\x62\xfe\x75\xb4\xaf\x8e\x0d\x2f\xe4\xbd\x13"
- "\xfd\x21\xf2\xd8\x01\x3d\xa5\x39\xe1\x7c\x5f\x43\x94\x3b\xed\x37"
- "\xe1\xb2\xdc\x34\x51\x65\xf7\x9d\xb4\x2f\x05\xcd\x27\x9f\x86\x9b"
- "\xa2\x8f\x14\x1b\xb9\xac\x6c\xc5\x32\x8e\xb3\xfd\x38\x22\xe5\xbd"
- "\x11\xed\x75\xb4\xe7\x87\xc0\x53\xa2\xf2\x11\xb4\xdf\x71\xfb\x76"
- "\xcc\x93\x71\x3d\x70\x04\x7d\x05\xfa\xf2\xa9\xbe\xd2\x24\x60\x91"
- "\x67\x8d\xbe\xbe\x24\x10\xf3\xaf\x37\xed\x53\xe9\xb6\xb3\xd5\x8c"
- "\x70\xbb\x33\x34\xb4\xff\x02\xdf\x8b\x01\x6e\xb4\xa2\x8e\x3b\xbd"
- "\xdb\xc3\xb7\xb2\x33\x7c\xff\xc3\x61\xd8\xbe\x14\x6c\x5f\xa2\x6f"
- "\x7b\x78\x39\xdf\x4b\x94\xc3\x25\xc5\x31\x7a\x8e\x41\xb8\xbe\xfe"
- "\xb4\x2b\x28\xcd\x45\xef\x77\xd0\x66\x19\xe3\xe9\x61\x98\xfe\x09"
- "\xfa\xb5\x0e\x84\x2d\x27\xd8\x09\x1e\x18\xce\xf7\x3d\x29\xd5\xc0"
- "\x71\x48\x5a\xe8\x8b\x09\xaf\x50\xd5\x47\x78\x16\x8a\x7e\x0c\x65"
- "\x71\x06\xf1\xf4\xf0\x74\x09\xd3\xdf\x43\xfc\xcf\x93\xbf\x14\x3e"
- "\x7c\xfc\xa3\x00\xfd\xef\x45\x06\x9e\x69\x5f\xe7\x4d\xe2\xf9\x00"
- "\xf2\x92\xde\x13\xd0\x3b\x7e\x97\x25\x09\xe3\x9f\xc4\x0c\xd1\x57"
- "\x8e\xe7\x75\xd0\x3e\xb2\x2c\xea\xa1\x54\xc4\x5b\x69\xdd\xd0\xcd"
- "\xcf\xc9\xb1\x43\x52\xa1\xaf\xb4\x00\x02\x68\x4a\x22\xfa\xc9\x87"
- "\x20\x2f\x52\x50\x0f\x22\x5c\x96\x71\x10\xa0\x07\x09\x88\x67\x2b"
- "\xd2\xd7\x81\x6d\xda\x8a\x78\x12\x7d\x3d\x05\x64\x1b\x12\xda\x16"
- "\xc6\x4a\x03\x38\xe4\xf2\x46\xff\xf2\x37\x75\x52\x39\x84\x0f\x77"
- "\xf5\x10\xfc\x4d\x5d\xc4\x73\x59\xef\x50\x2f\xc7\x99\x02\xf4\x72"
- "\x0c\xd2\x72\x87\x2a\xbf\x2a\x20\x3f\x1c\xf3\x7f\x24\xe7\xa3\xed"
- "\x8f\x6b\x0e\xa0\xf7\x10\xe6\x4f\x41\x7a\x9d\x68\xdb\x61\x58\x5f"
- "\x63\x9d\x1c\x9b\xc8\xf0\xf6\x00\x78\x0f\xc2\x4f\x23\xbd\xa1\x7e"
- "\x87\xe0\xeb\x65\xdb\x41\x78\x9d\xcb\x72\xb3\xde\x1f\x3e\xe5\x0b"
- "\x84\x9f\x35\x40\xdf\xcd\xa9\xfe\xf9\x37\xbb\x31\xff\x01\xd2\x75"
- "\xfc\x7d\x94\x62\x7d\xf2\x27\xe4\xcb\x0e\x14\x92\xbc\x6e\xce\x0d"
- "\x80\x2f\x43\xb8\x3c\x99\x47\x92\xcc\xa3\x46\x79\xec\x7e\x4c\xa6"
- "\x61\x67\x40\x99\x7d\x58\xa6\x10\xf9\xb8\x55\xd1\xcb\x20\x65\xda"
- "\x02\xca\x74\x91\x1c\x99\xa8\x47\xeb\xea\x1b\x28\x23\xfb\x49\x35"
- "\x0e\x6a\xdb\x65\x2e\xcb\x2d\x51\x01\x6d\x4f\xc7\x7a\x8b\xb7\x09"
- "\xbf\x73\x19\xea\xd0\x6d\x98\x76\x3b\xe2\xdc\x46\x36\xb0\x9d\xe2"
- "\x41\x87\x1b\x58\x69\x46\x94\xd0\xdd\x5b\x56\xc4\x78\x80\xee\x53"
- "\xe8\x9e\x70\x33\xd7\x2c\xd9\x26\x6f\x59\x81\xbf\x94\xce\xcf\x7d"
- "\x21\x3f\xcc\x5c\xf7\xfb\x04\xce\x5b\x5e\xa0\xf3\xbe\xf0\xd9\x2b"
- "\xd7\x91\x42\x7b\x85\x22\xfd\x15\xd8\xef\x00\x5b\x87\x70\x1b\x60"
- "\x1a\xa6\x5f\xcb\x6d\x55\xc0\xf1\x67\x51\x47\x06\xe9\xf7\x44\x7c"
- "\xbe\x42\x2e\x1f\x4d\xf8\xf0\xfe\x56\xf9\x5e\xe3\x25\x5c\x67\x14"
- "\x1b\x4c\xe1\x7b\x78\x92\x1d\x72\xfc\x58\x9e\xf6\x65\x15\x38\x93"
- "\xbf\xc4\xdf\x99\xf8\xfb\x29\xfe\x3e\x80\xbf\xef\xd1\x3e\xa9\xa5"
- "\x5e\x6e\x8f\xf4\xfc\x1a\xfe\xce\xc5\xdf\x17\xf0\x77\x1e\xfe\x6e"
- "\xc4\xdf\xa9\xf8\xfb\x30\xd9\x05\xed\xf9\x4e\x7b\xd7\x60\xdf\x2a"
- "\x74\x8b\xde\xfd\xb9\x32\x88\x07\xd3\x11\x26\x9d\xdb\xab\xf0\x2f"
- "\x3a\x21\xc7\x64\x7e\x16\x0f\xea\x03\xa5\x0d\x17\xfa\x20\xd2\xbc"
- "\x8a\x1f\x3a\x33\x90\x26\xfb\x26\xd9\x16\xe5\x34\x81\x3f\x0b\xf1"
- "\x27\x10\xad\x4c\xe0\x0a\x17\x32\x97\xf1\x8b\x72\xda\x20\x75\x6a"
- "\xd4\x75\xda\xe1\x16\x07\xed\x7b\x84\xbf\xc7\xf8\xbe\x92\x90\x12"
- "\xc5\xb8\xde\x63\x3f\xcb\xf1\xdd\xd2\x22\xc3\x55\x11\x8f\x79\x79"
- "\x91\x9e\xac\xd2\xa5\x91\x2e\x4b\x4a\x4e\x80\x2e\x61\xac\x7f\xe3"
- "\x73\xa4\x33\xc4\x77\x6a\x5b\x8c\x89\xf7\xe5\xbc\x2d\x1c\xff\x19"
- "\xa1\x93\x75\xf2\xda\x24\x61\xbf\x29\x0d\x01\x78\xf6\x23\x9e\x8a"
- "\x00\x7b\xef\x1e\xe8\xd7\x52\xda\x03\xfc\x51\x23\xd6\x87\xbe\xf2"
- "\xe6\x2e\xd9\xaf\x3a\xc3\x4a\xc8\x5e\x52\xdc\x76\x38\xc9\xf7\x94"
- "\xc3\xfc\xed\x84\xc7\x59\xca\xf7\xeb\x77\x86\x99\xa8\xbd\xe3\xe3"
- "\x95\x7c\x9e\x17\x1d\x57\x46\x76\x10\x56\xc8\xf3\xb0\xff\xbb\x5e"
- "\xaf\xe4\x81\xd8\x07\xce\x19\x56\xcc\xf3\xb2\xfa\xf1\x56\x9c\xcd"
- "\x95\xf1\x86\x05\x3d\x7f\xa1\xfc\x6c\x56\x0a\x80\x74\x73\x19\x84"
- "\xdb\x3c\x47\x21\xd3\xc3\xbc\x29\x65\x10\x61\xf3\xec\x81\x71\x00"
- "\x23\x6c\x9e\x63\x70\x33\xc0\x18\x9b\x67\x27\xc6\x2b\x8d\x94\xff"
- "\xc1\x4d\xa0\xd1\xe0\x6f\xe9\x8d\x65\x92\xc6\xe6\x29\x86\xc4\x32"
- "\x2d\xfe\x16\xc2\x8c\x70\xe6\xb2\x79\x66\x21\x5c\x1e\x64\x7a\xd9"
- "\x99\xf4\x70\xf6\xd9\x62\x2f\xe8\x67\x3d\xcb\x4a\x6d\x1e\x1c\x3b"
- "\x78\x0e\x61\xba\x8f\x65\x7a\xcf\xe3\xe5\x62\xbe\xf2\xb3\xb9\x99"
- "\xde\x33\x6c\xda\xb3\x1f\xe0\xf3\x67\x0c\x65\xc9\x6c\x9e\x34\x38"
- "\xe2\x74\x22\x5c\x29\x63\x5b\xcf\x66\x2d\x3a\x2b\x41\x1f\x9d\x8f"
- "\xb0\xf5\x6c\x2e\xb6\xc5\xd4\x87\xed\xc0\x7e\x78\x55\xdf\xd3\xf8"
- "\x5b\x71\x76\x25\x7f\x2e\x3f\x5b\xc6\x74\x67\x4d\xe3\x71\x20\x46"
- "\x6d\xb0\x79\x3a\x61\x31\x0e\x25\x32\xd7\x3b\x18\xd1\x1f\xb3\x99"
- "\xc6\x61\x69\xb4\xb7\x72\x6c\xe6\xfa\x52\x86\x79\x3a\x16\x71\xd6"
- "\x64\xf3\x74\x03\xd6\x51\x86\xf8\x36\x72\x7c\xe5\x67\x1b\x10\xd6"
- "\x41\x70\x6a\x3c\x84\x83\x60\x33\xbd\x10\x8b\xf0\x0d\x7d\x11\x67"
- "\xab\xf0\x6a\xc6\xcb\x8e\x65\xbf\x62\x96\xb8\xdf\xd0\xfe\x98\xac"
- "\xfc\x1c\xc6\x08\xe7\xf4\x6e\x3a\xcb\x81\x78\xe9\x85\xe1\x6c\xeb"
- "\x39\xd2\xab\x74\xd4\x4f\xa4\xf7\x5c\x2a\xa7\xb7\xe2\xdc\x04\x37"
- "\x6f\xc7\xb9\xf1\xa2\x1d\xe7\x52\x28\xbd\x07\x75\x07\xef\xb3\x7a"
- "\x44\x5e\x26\x96\xcb\xe6\xe5\xca\xcf\x65\x31\xdd\xb9\x5c\x37\xda"
- "\x21\xf2\xb5\x8c\xf8\x88\x7c\x2d\x23\x5e\x22\xfe\x2c\x9b\xb9\x12"
- "\x58\xc4\xb9\xdc\xbe\x88\x73\x26\x2c\x6f\xe9\xe3\xb1\xca\xb9\x2a"
- "\xb7\xc0\xbd\x03\xf1\x2c\x44\xfd\x0e\x43\x1c\x55\x88\xab\xa1\xcf"
- "\x62\x80\xcc\xf5\xcc\x9d\xe9\xd9\xec\x59\xbc\x1e\xc2\x92\xa1\x0c"
- "\xe9\x7d\x1f\x79\x94\x87\xed\x6c\xc5\xdf\x74\xcc\x87\xcb\xb1\xae"
- "\x0f\x10\x6f\x15\xd5\x87\xf5\x34\x20\xce\x5a\xc4\x95\x47\x34\x9d"
- "\xb7\x80\x1e\x9f\x9b\xcf\x0b\xfa\xda\x7d\xe5\xe7\x1c\x3e\xdd\x39"
- "\xbb\xa2\x43\xa4\x3f\x82\x6f\x3b\x61\x8e\x93\x79\x6c\x9e\x5a\xec"
- "\x75\x70\x8c\xe4\x3c\x46\xf9\x38\x56\xda\x83\x72\x26\x9d\x2a\xc6"
- "\xdf\x46\x20\xfd\x39\x62\x7a\x96\x60\x3f\x20\x1d\x9a\x63\x72\x6e"
- "\x4e\x01\x93\x06\x9f\x4b\x17\x7b\x74\xb0\xc8\xa4\x2d\xf3\x96\x9f"
- "\xb3\x1e\x31\x91\x5c\x8e\x62\x19\x2a\x57\x08\xb1\x1a\x1c\x2f\x68"
- "\x98\x27\xd6\xec\xd0\x46\x17\x94\xb2\x23\xce\x59\x08\x6b\x02\x6a"
- "\x0f\xe9\x11\xc1\xcf\xee\x66\x76\xaf\xce\x65\xa2\xb6\xb1\x98\x32"
- "\x38\xdc\x7d\x3b\xd0\x98\xed\x70\x77\x23\xe9\xa9\x8f\xe9\x5c\x46"
- "\xd4\xd1\xbe\xd9\xdd\x65\xe1\x8b\xce\x82\x06\xd3\xbc\x87\x0b\xf6"
- "\x60\x7e\x2b\xc2\x1d\xe2\x7a\x3b\xe7\xac\x27\xd6\xa3\x3b\xd7\xec"
- "\x29\x77\x65\xcd\x39\xdb\xc7\x0e\x17\xec\x84\x47\xbb\xcb\x90\x57"
- "\x7b\x60\xf6\x29\x4f\xd8\x11\x53\x1e\xc2\xb8\x30\xbd\x91\xeb\xff"
- "\xec\x53\x3d\x6c\xce\x53\xec\xcc\x9c\xb3\x9f\xb1\xd9\x05\xec\x83"
- "\xc5\x66\x88\xb9\x6c\x33\xf3\x91\x5d\x1c\xea\xdc\x03\x97\x1d\xa3"
- "\xbd\xf3\xd3\x61\xd6\x12\x1f\x9b\x7d\xea\x0c\x5b\xf4\x14\xf1\x26"
- "\x0d\x0e\x17\xa0\xfd\x98\x77\x12\xbf\xdb\x0f\x17\xec\xc7\xfa\xd3"
- "\x11\x6f\x29\xb3\x99\x6b\x11\xd6\x1a\xfb\xe8\x29\x3d\x1c\xea\xdc"
- "\x09\x9e\x88\x73\xcd\xde\xad\xe7\xac\xbe\x88\x73\x76\xdf\xd6\x73"
- "\x0e\x16\xe1\x32\x7a\xb6\xba\xb2\xbc\x11\x2e\xd4\x01\x97\x15\xe5"
- "\x14\x41\x32\xef\xb5\x80\x01\x9f\xff\xb3\x97\xe4\x5f\xee\x6a\xc7"
- "\xb6\x3a\x30\x36\x66\x42\xf7\x5d\xed\x34\x0f\x81\x65\x1d\x7d\x11"
- "\x2e\x3b\xc2\x39\x84\x7d\xb9\x81\xf4\x92\xe6\xfb\x31\x0d\x19\x54"
- "\x10\xd6\x17\xe1\xd6\xe3\x65\xc0\x2b\x95\x55\xb8\xcb\x10\xff\x08"
- "\xae\x53\xe5\xee\x32\x76\x77\x15\xc6\xda\x67\x11\x8f\xbb\x21\xd3"
- "\x3b\x85\x21\x0f\xd1\x4e\xdc\x65\xbe\xad\xee\x2a\xc4\x65\x75\x73"
- "\xdd\x77\x7f\x40\xb8\xfb\x9e\x4e\xa2\xf9\x09\x2d\xe6\xb7\xb3\x8a"
- "\xf3\x53\xdd\xa4\xab\xba\xf3\x46\x9f\xee\x7c\x03\x2b\x3f\x9f\x75"
- "\xff\xb3\xcc\xe1\x2d\x3f\x6f\xf2\x95\x9f\xcf\xf5\x0c\xc3\x18\xde"
- "\xbc\x1f\xc8\x3f\x79\xfe\x93\x21\x0f\x3e\x44\x7e\x34\x72\xf9\xdb"
- "\xcc\x68\x03\xeb\xaf\x2e\x3b\xdc\x8d\xba\x60\x7a\x8b\xfb\xa6\x23"
- "\xce\xa3\x9c\xa7\x2c\xe2\xbc\x91\x74\x8a\xe4\xbb\xc8\x04\x65\x6c"
- "\xeb\xf9\x2c\xdf\xd6\xf3\xb9\xde\xad\x88\x37\x02\xeb\x89\xec\x3b"
- "\xee\xe6\xf6\xda\x87\xfa\xba\x1f\xe8\xec\x47\xa1\xe3\x7d\xf6\x50"
- "\x3e\x92\x7c\x15\xf9\xa7\x4c\x8f\x9b\x74\xe6\xcf\xe4\xd7\x84\x9f"
- "\x82\xc5\x8a\x9f\x22\x1f\x45\xe3\x22\xf2\x53\x3e\xd9\x4f\xf9\x64"
- "\x3f\xc5\x9f\x75\xe8\x6b\xca\xcf\x9a\xc8\x1f\x65\x9a\x85\x9f\xc9"
- "\xf4\xa6\x32\xd4\x8d\x28\xc4\x61\x12\xb2\x40\x98\x8a\xb3\x1b\x39"
- "\x3c\xe7\xd3\xd9\x06\x1f\xfa\x1b\xbc\x9a\x7d\xc2\xdf\x38\x64\x7f"
- "\x23\x29\xfe\xc6\x6b\xa1\x33\x2f\x49\xb7\x06\xfb\x1b\x9f\xec\x6f"
- "\xbc\x4c\xf8\x1b\x9f\xec\x6f\x28\xdd\x2b\xfb\x1b\x6f\x10\x7f\x83"
- "\xf6\x4c\xed\x0d\x93\xfd\x4c\x19\xf9\x19\x6a\x2f\xea\x5a\xae\x4f"
- "\xf8\x99\x32\x1c\x13\x49\xe4\x67\xbc\x58\xc6\xa7\xf8\x19\x17\x2f"
- "\xdf\x40\xbe\xa6\xef\x39\x40\xff\x69\x00\xf2\x31\xdc\x9f\x78\xc6"
- "\x78\xc8\x9f\x20\xff\xa6\x04\xfa\x13\xc4\xd7\x8c\xf7\x7a\xd9\x4f"
- "\xd9\x63\x37\x33\x0f\xfa\x13\x6b\xa6\xd9\x89\xb2\xfe\x14\x62\x3d"
- "\xe8\xb7\xcd\xc5\x65\x36\xb3\x07\xd0\x0f\x38\xd8\x91\x32\x40\x1a"
- "\x51\x7f\xbd\xe8\x2b\x00\xd0\x2e\x8d\x1e\xb4\x71\xd4\xf1\xac\x23"
- "\xa6\x4f\xc0\x8b\xb6\x3a\xbb\xbb\xc7\xb6\xc8\x99\xa4\x9f\x7d\x8a"
- "\x39\x90\x3f\xf6\x45\xa6\x32\xf4\x2f\x49\x8e\xc3\xdd\xef\xc3\xac"
- "\x4e\xe6\x9b\x95\x6b\x37\xa0\x0d\x64\xcd\x5e\x66\x8d\xa5\x73\x37"
- "\xe7\x9c\x65\x56\xf4\x8b\xff\x3d\xfb\x94\x3e\x76\x61\x27\x8c\x9e"
- "\xb5\x84\xf9\xbc\x68\x67\xd8\x5e\x2b\xb6\xbb\x1d\x69\xb7\xa3\xcd"
- "\x39\xd0\xce\x8c\x9e\x00\x3b\x63\x91\xae\xff\xc4\x7b\x83\xe0\x9f"
- "\xcb\x81\x76\xd6\xee\xe3\xfd\x59\x27\x1f\x8b\x62\x3d\x0e\x9a\xb7"
- "\x43\x5b\x6b\xf7\x6d\x15\xb6\xe6\x63\xc2\xd6\x7c\xc4\x3f\x49\xb6"
- "\x35\x94\x05\xda\x8d\x1e\x2f\x03\x5e\xc1\x6d\xcd\xa4\xb2\xb5\xa7"
- "\x64\x5b\x8b\x10\xb6\x86\x32\x0d\xf3\x3e\x2d\xec\x8d\xf0\xd3\x78"
- "\xb5\xdf\xde\x22\xcf\x1b\xe9\x0c\x00\xa1\x3b\xdc\xe6\xb0\x5f\x39"
- "\x6f\x42\x7b\xcb\x45\x7b\x43\x7c\xcc\x41\x7e\x13\x75\xf3\x4f\xd4"
- "\xd7\xcd\x31\xb1\x3f\x2d\xf6\x5e\x5d\x86\xf6\x64\x42\x5f\xf6\x19"
- "\xfa\xd1\x3f\x2d\x72\x42\x03\xda\x93\x11\xed\x28\x0b\xed\x29\x17"
- "\xed\x8a\xec\xc9\xee\x7d\x9a\x70\xf6\xd9\xfb\x71\xf0\xbe\xd2\xdf"
- "\x9e\x2e\x34\x6f\xea\xb2\xfc\x50\x6b\x87\xf3\x7c\x3c\x8d\xf7\x7a"
- "\x3b\xf4\xa6\xcb\xf7\x09\x76\xf8\xff\xb4\x3c\x96\x41\x3b\x34\x6d"
- "\x82\x2b\x4e\xc2\x0f\xdb\x51\xe7\x01\xef\xa3\xf0\xfe\x68\xe6\xb8"
- "\x0f\x98\xaf\xd2\x58\x80\x75\xbb\xc8\x16\x99\x65\x22\xd9\x80\x11"
- "\x75\x51\xc7\x5c\x49\x51\x2c\x46\xf7\x0a\x9d\xd3\x4a\xe7\xb2\xe2"
- "\x73\x0c\xf2\x20\x11\x7f\x47\xd6\x9e\x83\x38\xbc\xe2\x6b\xe5\x33"
- "\x61\xf1\x3e\x95\xad\x8b\x8f\xdc\xbe\x16\x92\x63\x9d\xe2\x3c\x56"
- "\x3a\x3f\x16\xe3\xe8\x38\xba\x67\x96\xcf\x92\xea\xcf\xc9\x67\xb2"
- "\x46\x63\x7d\x74\x26\xeb\xea\x24\xa8\x2f\xe2\xe7\x63\xc5\xd7\x5b"
- "\x58\xb3\xd7\x45\x7c\x38\x9b\xa5\xd0\x42\xb4\x21\x9d\xd7\x22\x9d"
- "\x9d\x0f\xae\x37\xc2\x87\xe6\xe0\xfb\x2b\xba\x2c\x93\xfa\xdb\x1f"
- "\x22\x3f\x51\xe1\x49\x88\xfc\x74\x85\x4f\xa1\xd6\x76\x52\x3f\xed"
- "\x5d\xcb\xba\x69\xaf\x6e\x9a\x37\x28\xf5\xb0\xff\x45\x3e\x96\x6d"
- "\xf2\x82\x2e\xd3\xec\x66\xb6\x6e\x66\xb5\x99\x4f\x41\x3d\xed\x1f"
- "\x5e\xc2\x7c\xbe\x68\x5d\x09\xdb\xa6\x33\xf7\xac\x65\x1e\x9a\xf7"
- "\xc1\x3a\x9a\xec\xb0\xa0\x41\xc8\xe2\x5c\x3b\x1f\x6f\x46\xe9\xcc"
- "\x88\x6b\x04\xe1\x3a\x8c\xe5\xbd\xdb\x74\xa8\xaf\x93\xda\xed\x1a"
- "\x5d\x0b\x87\xd3\x9d\x6b\x37\x6d\x80\x6b\x4e\xc2\x9d\x3a\x3e\x4e"
- "\xa8\xd4\x55\x91\x4f\xc0\x34\x3d\xa6\xc5\x21\xfe\x9d\x2e\xcb\x9d"
- "\x18\x73\xf7\xec\x14\xb1\xec\x9d\x71\x0a\x9c\x1d\x26\x75\x05\xae"
- "\x5b\x93\xbf\x92\x2c\xf3\xdb\xef\x4d\x03\xfe\xbb\xd7\xd1\x4e\x71"
- "\xc6\xe0\xd9\x03\x3e\xdd\x95\x45\xe7\x6e\x95\x6e\x84\x04\x94\x0f"
- "\xd1\xb7\x15\xc7\x1c\x27\x98\xe5\x4e\xc3\xee\x0d\x6e\x1c\x53\xdc"
- "\xb9\xd3\x0e\x07\x43\xf2\xd3\x77\x8e\x75\x22\x0f\x1c\x3b\xd6\x02"
- "\x10\x7f\x88\x9f\x68\x37\x3e\xe4\xc3\xe7\xe4\x93\xea\xd7\xd2\xb8"
- "\xfb\xce\x0e\x85\x5f\x21\x65\x52\xa9\xab\x14\x63\xd3\xbb\x26\x31"
- "\x0b\x03\xeb\x68\x7a\x8f\x71\xd7\x9d\x9c\x07\xe5\x2e\x7b\x0f\xfa"
- "\x11\x9a\x53\xa6\x33\xb2\x56\xc7\x33\xb7\xcb\x72\x57\xb2\x1d\xa6"
- "\xb6\xc9\xf3\x55\x4e\x9b\x67\x3a\xf9\x96\xa0\xfd\x16\xdf\x9b\xb4"
- "\x1f\xff\x8f\x72\x8e\x24\xa0\x1f\x22\xdf\x14\x15\xd7\xba\x49\xc8"
- "\xdf\x4d\x78\xe9\x5b\x8f\x4e\xcc\x5f\xed\x64\x5d\xac\x32\x8e\xce"
- "\x22\x71\xd2\x3e\x9f\x98\x46\xe7\xfe\x30\x6b\x11\xd1\xf4\xa3\x87"
- "\xad\xa3\x7b\xe1\x84\x19\xc2\xea\xfb\xe7\x89\x7e\x94\x4e\xf3\x42"
- "\x62\x3e\xec\xae\x56\x3b\x4c\xcf\x53\xe8\xa2\x18\x03\x79\x4b\x7c"
- "\x6e\xa7\x58\x83\xde\x53\xac\x2e\x61\x6e\x8a\x39\x10\xd6\xa1\xb4"
- "\x81\xda\x27\xda\xf5\x23\xad\xba\x5d\xf4\xee\x3e\xb6\x44\xf0\x60"
- "\xf5\x7a\xd0\xf1\x33\x7b\xbc\xf4\x9e\x63\x3a\x6f\x0b\xb5\x99\xb7"
- "\x85\xfb\x58\xec\x23\x3c\xb7\xa3\x0e\xf1\x74\x07\xe2\xc2\xf1\xcf"
- "\xb4\x76\xa1\x4f\x77\xb5\x86\xfa\x86\x05\x75\xb3\x01\xc7\xaa\xa3"
- "\x4b\x7d\xec\x38\xe2\xfc\x54\xcc\xb1\xfd\x88\xce\xfe\x08\xcb\x74"
- "\xa3\xee\x46\xc5\x54\x52\x9f\x6c\x2b\x21\x7f\xcb\x61\x2f\x47\xd8"
- "\x4e\x84\x39\x2c\xc3\x1e\xe6\xe7\x12\x8a\xdf\xe1\xf4\x8b\xfd\x58"
- "\x2d\xd2\xd1\x49\xf3\xbe\xc8\xe7\x32\xe5\x19\xc7\xf8\x38\x4e\xfc"
- "\x51\x0d\xdb\x16\x53\x19\x9c\x96\xf3\x0d\xd4\x9f\x79\xcf\xb1\x6e"
- "\xac\xe7\x2a\xd2\xa3\xd2\xf5\x30\x0a\x75\xf2\xf3\x4d\x1b\xe1\x0a"
- "\xd2\x31\x16\xad\xab\x16\x7c\x4f\x4b\x65\x16\x8c\x3d\xd1\xa3\x9a"
- "\xd6\xc2\x35\x68\x43\x55\x27\x21\x6d\xfa\xe2\x12\x03\xd2\x0a\xb0"
- "\xe3\x34\x50\x8c\xf2\x19\xc2\xef\xb4\x79\xbe\x80\xfa\xd3\xa4\x8b"
- "\x69\x79\x8a\x2e\xe2\xbd\xe9\x42\xbe\x02\xfb\x19\x83\x98\xa3\x48"
- "\xfb\x94\xde\x49\x1c\x87\xb4\x36\x6a\xaf\x58\x03\x9d\xf6\x1e\x3b"
- "\xc7\x12\x18\xef\xd3\xdc\xe8\xa7\xd3\x9c\xf8\x6b\xe0\x17\xfa\x12"
- "\xf9\x59\x8f\x70\x4d\xec\x9c\x97\x60\x0c\x98\x66\x65\x16\x0d\xd9"
- "\x49\x0d\xd6\xdd\x6d\x87\x45\x2d\x42\x36\x69\x2d\x84\x2b\x04\x0d"
- "\x7a\xc6\xf7\xb9\xfd\x0a\xdb\x3b\xf9\x41\xc3\x26\x9a\xe3\x9c\x3c"
- "\x8e\xdb\x05\xe2\xaa\x97\x84\xcf\xf6\x21\xad\x75\x16\x5f\x01\xfa"
- "\xe7\x02\xdf\xf6\x11\x19\xfc\x5e\xce\x63\x72\x3f\x1a\x14\x7f\x65"
- "\x5c\x2b\x3f\x2b\x11\x26\xf3\x73\x41\x7d\xa8\xf7\xd6\xab\x4f\xd2"
- "\xf3\xdb\xf4\xec\x8c\x1a\x99\x61\xab\x36\x8a\x73\x1a\x11\x46\x8c"
- "\xe3\x27\xbf\xdd\x83\x75\xb8\x2c\x93\x9b\xed\x30\xa3\x41\xbc\x9f"
- "\x19\x99\x11\xf2\xfb\x28\xb4\x01\xb2\x39\x61\xd3\x53\x9e\x3d\xdc"
- "\x40\xf6\xe7\x86\x1e\x9d\xdb\x20\xfb\x5f\x9a\xcf\x89\x3a\x0e\x53"
- "\xb6\x1c\x8e\xe7\xfa\x2d\x31\xe9\x6e\xbd\xdf\x59\x6e\x98\x37\xf8"
- "\xba\x3b\x1d\xaf\x6c\xbc\x72\xe5\xe7\x42\xbc\xb0\xcd\x77\xb7\xe3"
- "\x73\x31\xe7\xdd\xae\x3c\x8d\x1d\xf3\x7a\x30\x66\xa7\x67\x3b\xdc"
- "\x3d\x8b\xed\x4a\x94\x94\xfb\xfa\x97\x69\x9e\xe0\x6e\xb3\x1d\x26"
- "\x83\x90\xc5\x14\xbe\x76\x07\x69\x23\xbe\xb3\xd2\x6a\xe6\x6e\xdd"
- "\xe4\x44\xba\xef\x6e\x6a\xad\x76\x82\xe1\x46\x6a\xff\xdd\x7b\xa8"
- "\x4d\xb4\x86\x85\x7e\x57\x57\x33\xc7\x81\x1a\x0f\xd0\xbb\x3c\xc4"
- "\x85\xf6\x5f\x9f\x28\xe6\x32\xe2\x1c\x84\x4f\xd6\x09\xa6\xb4\x5f"
- "\xf0\x79\x64\x86\x61\xad\x86\x9e\x47\xd4\xbd\xc4\xe7\x61\x3c\xac"
- "\x34\x47\x5e\xbb\x30\x25\x02\xed\x7c\x0a\x9d\xf3\x78\x1a\xa6\xcc"
- "\x66\xc8\xeb\x03\x05\xfc\xcc\x28\x07\xf6\x3f\xdd\x75\x7c\xbd\xd1"
- "\x14\xf4\x7f\x93\x73\xf9\xbb\x19\x4c\xe7\xbe\x06\x71\x6e\xc7\x3c"
- "\xec\x8f\xba\x0f\x17\xb8\xc1\x4b\x6d\xc6\xb2\xef\x9f\x73\x6b\x63"
- "\x8b\x41\xb3\xc9\x84\x7e\x07\xe9\x60\x28\x2b\xe1\xcb\xee\xb6\x6f"
- "\x3c\xc5\xdc\x4a\x9b\x0f\x34\x90\x7d\x4c\xd9\x62\x87\xd7\x8f\x86"
- "\xb4\x89\xfe\x76\x18\x5f\x3d\x90\x28\xe4\xe8\x43\x5e\xf9\xcb\xd1"
- "\xd8\x20\x64\x38\xe5\xa8\xbf\x0c\x8d\x58\x83\x11\x35\xc1\x38\x11"
- "\xaf\x74\xf9\x59\x7d\xe9\x54\xf7\x28\x57\x63\xa5\xcb\x62\x8c\x43"
- "\xfb\x28\x11\xb2\xa1\x74\xd4\x67\xd2\x9b\x2f\xb1\xef\xe9\xcb\x01"
- "\x7a\xdf\x4b\xe9\xa4\xe3\x94\xee\xc3\xf8\x06\x9f\x93\x30\x5f\x4f"
- "\xf6\x4b\xe7\x6f\xa9\xf3\xfb\xcf\x59\x00\xe3\x7a\xc2\x15\xbb\xb9"
- "\xbc\x9c\x74\x17\x61\x92\x63\x3d\xe5\xe5\x58\xdf\x16\x85\xaf\x98"
- "\x56\x48\xf9\xa4\xa7\x98\x5e\x63\x87\x37\xf8\xfa\x05\x27\x8e\x01"
- "\x83\xc7\x1e\x46\x6b\x7f\x8c\xa6\x73\x97\x91\x2c\xbb\xe1\x9e\x43"
- "\xe8\xc7\xb0\x1f\x1f\x61\x14\xfd\xcf\x3d\x74\xf6\x93\x06\xfd\xe7"
- "\xe7\x78\xdf\x76\x18\xfd\x54\xef\xf6\x70\x73\x9f\x04\xc3\x7b\x25"
- "\x30\x7a\xb6\x1b\x2b\x3d\x91\xde\x2d\xb6\xae\x7d\x70\xc4\xf3\x0e"
- "\x18\x96\x73\x1c\xbf\xa1\x73\xe0\x4a\xd7\x33\xef\xde\xde\x26\xad"
- "\xcd\x73\xc6\xca\xcf\x5c\x85\x7b\x38\x3f\x9e\x3f\x8e\x51\xc0\x22"
- "\x8e\x5b\xf0\x27\xca\x58\xb0\x7d\x29\xf3\x6c\x3f\x41\x7b\xc3\xc7"
- "\x47\x6e\xeb\x85\xe4\x57\x36\x40\x6a\x4d\x2f\x24\xd6\xf5\x42\x12"
- "\xfb\x73\x92\x54\x83\x71\xdc\xa2\xb3\x7a\x3a\x8b\x3c\x27\xc6\x04"
- "\xba\xba\x0d\x18\xcf\x79\x40\xe3\xdd\x86\xf1\x9c\x07\xe3\xb9\x33"
- "\x49\xe4\x2f\xfb\xe3\xb9\x3e\x8a\x95\x2b\x23\xb4\xe2\xac\xd0\x08"
- "\x3a\x2b\x4a\x13\x95\x0b\x7a\xa4\xaf\xf4\x34\xdc\xa3\x89\xea\xc4"
- "\x58\x12\xdb\x6c\x97\xdb\x8b\xbf\x71\xb1\x05\x30\x9c\xb7\x15\x7d"
- "\x38\xdb\x36\xc2\x18\xb2\x6f\x96\x48\xa7\x9c\x64\x4b\xd8\x86\xa9"
- "\xa3\xe8\x9d\xf3\xbe\xab\xdd\xda\xd5\x35\xcc\x4d\xe9\xc5\x63\x98"
- "\x1b\xd3\xf9\x9e\xfe\xcd\x98\xee\xb2\x4c\x4d\xb2\x4b\x5f\x86\x8c"
- "\x01\x71\xcc\x24\xfb\x9a\xa9\xaf\x33\xa9\x8c\x74\xd4\xba\xd1\x83"
- "\xf1\xf8\x69\xb2\xe3\xa9\x4d\x99\x85\xcc\x63\x58\x49\xef\xff\xa7"
- "\x56\xd3\xda\x04\x7a\x27\xf9\x4b\x8c\x75\xbe\x6e\x3d\x02\xf5\x21"
- "\x34\x7e\x88\x2d\x44\x9c\x15\x6e\x2b\xc3\x31\xfb\xc5\xc6\xf5\xb4"
- "\xfe\x4c\x7c\x6b\x3a\xb5\xd3\x0e\x2b\xf9\xba\x0f\xfe\x7d\x0e\xf7"
- "\xa7\xd3\x5a\x9d\xc8\x03\x7f\x1f\x30\xad\x9a\xf6\x29\xef\xa9\x1c"
- "\xa6\xb5\x8e\x26\xdf\x3f\xed\x05\x11\x0f\x0e\x93\xfb\x82\x69\x4f"
- "\x89\xf7\x07\xd3\x26\xda\x61\x2e\xef\xe3\x4d\x63\x49\x27\xa6\x15"
- "\xb2\x98\x61\x61\x04\x37\xbe\x0c\xca\x56\x79\x20\x97\x6d\x1b\x06"
- "\x8c\xdb\xca\x69\x60\x3f\x7d\xd2\x45\xdf\xdc\x38\xaf\x5a\xe0\xc2"
- "\xd8\xa0\x15\xf3\xb4\x54\x87\x03\x61\x90\xef\x11\x62\xed\xc2\xb4"
- "\x72\x3b\x3c\x20\xfb\xc3\x69\x0b\xc5\x1c\xf3\xb4\x85\x3d\x58\x16"
- "\x63\xc5\xcb\x31\x1f\xe3\xdf\x27\xa3\xe4\x77\xdc\x8e\x67\xf8\xb7"
- "\xa2\xd3\xf6\xdb\xa1\x30\x8b\xd2\x8a\xc7\x40\x7c\xb1\x81\x75\x85"
- "\x8c\xf5\xfc\xda\x39\xfd\x1e\xbe\x0e\x4f\x82\xab\x5c\x96\x74\x50"
- "\xf0\x62\x7f\xfb\x46\x8f\xf4\xe0\x83\x98\x16\xa7\xe0\x45\x98\x2b"
- "\xf0\x39\xb1\x1f\x46\x94\x99\xa8\x2a\xf3\x60\x8f\x74\xf3\x1b\x98"
- "\x96\x11\x50\x26\x27\xa0\x4c\x81\xaa\x4c\x99\x5c\x4f\x49\x40\x99"
- "\xca\x80\x32\x35\x41\x68\x6b\x0e\x28\x63\x0d\x28\xd3\x1e\x84\xb6"
- "\xce\x80\x32\x4e\xff\x32\xd3\xb5\x2a\xde\xd2\x7a\xa2\x54\x4c\x8b"
- "\xf7\x2f\x33\x3d\x29\xa0\xcc\x24\xe5\x19\x63\xcf\x1c\x11\x1b\xa0"
- "\x3e\xa1\x4c\x51\xae\x68\x2f\xd3\xb1\xfd\x0f\x16\x5e\x20\xfe\xc6"
- "\xb1\x61\xb8\xa7\xb4\x56\x9c\x9b\x4b\x7e\x95\xd6\x1f\x90\x3f\xa7"
- "\x77\x26\xa4\x13\x14\x77\x52\x5d\x27\x60\xc6\xb3\xa4\x43\x88\x73"
- "\xcf\x60\x7e\x4c\xb7\x06\xd0\xd9\x1e\x40\xa7\x7d\x30\x3f\xa6\x3b"
- "\xfd\xcb\xcc\xd0\xfa\x97\x99\x11\xa7\x2a\xd3\x20\xea\x99\x91\x14"
- "\x50\x66\x52\x40\x99\x8c\xc1\xfa\x39\x63\x61\x40\x99\xc2\x80\x32"
- "\x25\x03\x3c\x9c\xc1\xbf\x0d\x27\x7b\xc0\x74\x1c\xff\xcc\xdb\x7f"
- "\x01\xde\xe9\x15\x7d\x56\xbe\x9d\x16\x7a\x7d\xef\xa8\x9d\xe2\xbb"
- "\x39\x7e\x46\x41\x27\xdc\x9b\xa2\xbc\x5b\xde\xdd\xeb\x0e\xa7\x77"
- "\x9e\xc8\xdb\xae\x03\x66\x37\xf6\xb9\x33\xb0\x0f\x9e\x9d\xaa\xac"
- "\x2d\xa1\xf5\x38\xfc\x8c\x1b\x3e\x1e\x99\xd1\x21\xec\xef\x5e\xe5"
- "\x9d\x0e\xb5\x07\xc7\x19\xf7\x26\x7f\x43\xba\x0e\x13\x5d\x74\xd6"
- "\x03\xe2\x30\xf5\x8f\x35\xfa\x69\xa5\x3a\xef\xfd\xa3\x42\x6b\xbd"
- "\x58\x13\x44\x6b\x85\x1d\x74\xfe\x06\x96\x69\x54\x8d\x4f\x88\x56"
- "\xe7\xbe\x0d\x6e\xad\x3f\xcd\xf7\x6e\x91\x69\xee\x10\x3e\xea\xde"
- "\x0e\xc5\x9f\x84\xd4\xbf\xca\xb8\xa6\x23\x35\x00\xb4\xe6\xe1\x70"
- "\x0d\xc6\x9b\x38\xc6\x22\xba\x8f\x43\x86\x81\xc7\xbf\x2b\x7b\x81"
- "\xee\x6d\x25\x77\xf1\x35\x11\xa2\x2d\x19\x39\x74\xce\x32\xc5\x3e"
- "\xad\xa6\xaf\x68\x5d\x1e\xe3\x67\x2e\x41\xc6\xb3\x07\x4a\x1c\x48"
- "\x6b\x46\x96\xb2\x7e\xc8\x0e\x19\x22\xae\xab\x8c\x6b\xa0\xf5\x1a"
- "\xb4\xb6\xe9\x80\x73\x12\xc1\x14\x23\x9d\xca\xda\xe9\x6e\x3a\xb3"
- "\x19\x61\x93\x43\x8d\x95\xd4\x7c\x15\x34\xdc\xf7\xa5\xd0\x9f\x8c"
- "\xfd\xfe\xf6\x10\x8e\x7a\x9a\xd1\xee\xaf\x73\x19\x76\x7f\x9d\xcb"
- "\x70\xf8\xdb\x83\x84\xf6\x30\x53\xeb\x5f\x66\x66\x9c\x7f\x99\x99"
- "\x89\xaa\x32\x55\xa2\x9e\x99\x93\x02\xca\x64\x04\x94\x51\xfb\x3f"
- "\x6c\xf3\xcc\x82\xfe\x71\x27\xf7\xf7\x33\xcd\xaa\x67\x69\x27\xef"
- "\xa7\x66\x56\x2a\x69\xf2\x77\xc9\x7c\xad\x94\x8c\xaf\x29\xc0\x47"
- "\x11\xfc\xfe\x00\x1a\x0e\x05\xd0\x70\x4c\x79\x96\xd7\x57\xfc\x16"
- "\x79\x37\x46\xd6\x33\x67\xec\x66\x78\x20\xd6\x33\xf7\x61\x8a\xcd"
- "\xa8\x7f\xe2\x6b\xd8\x36\x62\x4c\x79\x16\xf4\xb4\x76\xf0\x44\x31"
- "\x84\xd1\x39\x30\x76\xb8\x3f\x9b\x45\x47\x10\x4c\x37\xc6\x53\x99"
- "\x27\x60\x66\x37\xd6\x5f\x8d\x75\x20\xef\xee\x33\xfa\xd3\x70\x5f"
- "\x96\x3f\x0d\xf7\xe5\xaa\x9e\xf5\xf8\x6c\x52\xb5\x5b\x4f\xfb\x44"
- "\xbc\xc8\x63\xeb\xfb\xca\x95\x74\x9a\x03\xc0\x36\x76\x95\xf2\x38"
- "\xc0\x48\xeb\x06\x47\x1e\x87\xfb\xd6\xd0\x7c\x81\x8c\x73\x9f\x9a"
- "\xb7\x82\x17\xf7\xb5\x05\xd0\xd1\x11\x40\x47\xd7\x80\xaf\x99\xd9"
- "\x2d\x6c\xe4\x3e\xbc\x9f\x9f\x44\x69\xc8\x0b\x43\xac\xc7\x70\xb9"
- "\x75\x2c\xc5\xa9\xf7\xcf\x74\x62\x7b\xd9\x73\xd2\x48\xf9\x79\x36"
- "\xc3\x98\x01\x63\x31\x3a\xbb\x97\xbe\x9d\xbd\x0e\xd3\xb2\x85\x5c"
- "\xef\xc7\xf6\xcf\x33\x0a\xbc\xf7\xf3\x77\xfb\x04\x8b\xf7\x06\x16"
- "\x1d\xd7\x12\x4a\x9f\x7b\x62\xe2\x9a\x95\x35\xb6\x88\x63\x8b\x62"
- "\x0f\xbe\xed\x71\xcd\xbe\x6d\xb1\x6e\x4c\xab\x46\x9b\xa8\x12\x63"
- "\x9a\xd8\x74\xd4\x7d\x1a\x7f\xe3\x18\x78\x96\x3c\x96\x89\x6b\xa5"
- "\xb5\x83\xb4\x7f\x05\xfa\xcc\x28\xb1\x36\xe3\xfe\x43\x2a\xbb\x72"
- "\x1a\x36\x4c\x61\xc7\x61\xd6\x0b\x14\xdb\x91\xdf\xa0\x35\x88\x07"
- "\x3c\x0e\xa0\x79\x16\x9b\xe7\x24\x8f\xc9\x31\xbf\x4a\x94\x9d\xa5"
- "\x53\x95\x75\xc8\xf3\x20\x5d\x94\x37\xc1\x03\xda\x03\x4e\x07\xc5"
- "\x2a\x71\x22\x8e\x9f\xf5\xc2\x01\xf4\x17\x58\x26\x4d\x29\x43\x73"
- "\x26\xfc\xbd\x7f\x31\x68\xc7\x97\x80\xd6\xba\xe1\x38\xc7\x2d\xbf"
- "\x73\xe6\xe3\x23\x5b\x49\x17\xd8\x9c\x1d\x14\x53\x6a\xc5\xba\xad"
- "\x59\x55\x61\x6e\xd0\xf5\x6c\x8b\x6b\xb0\xe3\xbd\x77\x5b\x5c\x13"
- "\xd2\x86\xfd\xd9\xfd\xfb\xc8\x07\xaa\x79\x37\x7d\x7a\xd6\xdc\xcc"
- "\xd9\x29\x0f\xcd\x9d\x99\x3d\xfd\x2e\x43\xf6\xb2\x15\xf9\x79\x29"
- "\xab\xd6\x14\x1b\xd6\x15\x2d\x2b\x5e\xb6\xf2\x09\x7e\x0c\x98\x61"
- "\x49\xb1\xf8\x4d\x2a\x5c\xb2\xba\x78\x32\xdd\x26\x1b\x4c\x45\xf9"
- "\x6b\xf9\xed\xb8\x48\xf0\x47\xb2\xac\x38\xbf\xc8\x70\x43\x5e\xb2"
- "\x61\xc6\x92\x65\x85\xf4\x15\x43\x30\x5c\x77\x19\x8a\xf2\x8b\xf2"
- "\x97\xe4\x19\x26\x1b\x52\x09\xb3\x1a\x9d\x4a\x9e\xa9\x8a\x7f\x5a"
- "\x8d\xfd\x39\xc6\xd0\x5d\xe4\xa7\xa8\x5f\x3f\x01\x99\x6b\x28\x86"
- "\xe3\xe7\x76\xa1\x1e\x62\x9f\x60\x77\x59\x66\x17\x0f\xee\xc7\x67"
- "\x97\xfb\xeb\xef\xec\x6a\x7f\xfd\x9d\xdd\x34\xb8\x1f\x9f\x1d\x60"
- "\xff\xb3\x03\xec\x7f\xf6\xb1\xc1\xfd\xf8\x6c\x87\x7f\x99\x39\xe0"
- "\x5f\x66\x8e\xbe\xdf\xcf\x20\xad\xcf\x70\xbf\x34\x27\x31\xa0\xcc"
- "\xc4\x80\x32\xe9\x01\xcf\xd9\xaa\x67\x8c\x5d\xe7\xe4\xa9\x63\x03"
- "\x7c\x2e\x56\x6c\x7d\xc0\xbf\xcd\x29\x57\x60\xa8\xef\xa1\x6f\x5d"
- "\x64\xd8\x06\x15\x6c\x97\x0c\xdb\x6f\xff\xe4\x93\x68\xed\xa6\x88"
- "\xcf\x33\x6f\x90\x7d\x5b\xe7\x8e\x81\x3e\xb4\x13\x65\x71\xdd\x69"
- "\x98\xf3\x42\xbd\x80\x75\xd0\x7a\x5e\xf6\xd3\x05\xae\xfa\x91\xa0"
- "\xa3\xb2\x74\x6e\x15\xb3\xcc\xaa\xa1\xf5\xe3\x98\x16\x85\x17\xfa"
- "\xa9\xcc\x78\x65\xed\xfc\x16\x84\xb1\x43\x26\xd7\x65\x2a\xb7\x85"
- "\xaf\x3b\xe4\xf5\xbd\x40\xdf\x58\xd1\x59\x70\x3b\xc4\x1e\x12\x9d"
- "\x74\x9e\x1a\xd5\x8d\x38\xb4\x4c\x9a\xf5\xb9\x7c\x2e\x96\x1e\xaf"
- "\x38\xc4\x59\xa8\xe0\x44\x7c\xfc\x5c\x46\x8a\xf9\x28\xd6\x13\x71"
- "\x4f\x66\xa5\x12\x5f\xd0\x58\x21\x98\xef\x08\xbe\x36\x1b\x62\x77"
- "\x58\x7c\x1d\xd6\x4d\x9d\x44\xd3\x7e\x8a\x43\x6d\xf1\x1e\x38\x52"
- "\xe3\xc1\xf1\x2b\xe8\xf9\x78\xca\x7c\x0a\x6c\x0d\x1e\xa0\xf9\xe1"
- "\xc5\x66\x28\xab\x97\x7c\x1d\xac\xbf\x1c\x8d\xd1\x32\x9d\x44\xcf"
- "\x16\x4a\xc7\xf2\x38\x96\x70\xd0\x1a\xee\x10\xf3\x11\xb1\x04\x67"
- "\x1d\x4b\xe3\xbd\xac\x64\x39\xf6\x2d\xaf\x47\x5c\x41\xd7\x17\x4b"
- "\x60\x73\x59\xb2\xb0\xff\x5b\xd7\xae\xf8\xec\x03\xd5\xdc\xf7\x49"
- "\x98\x8e\xe3\xd7\xcc\xe6\x50\x71\x8a\xec\xdf\x4d\xb4\xae\x0c\x61"
- "\xf7\x5c\x08\x96\xe8\x3e\x80\xed\x66\xdb\x87\xe9\x76\x6f\x4a\x0d"
- "\x97\xfd\xab\x0e\xcb\x75\x2a\xe5\x2e\xa6\x7d\x14\x1b\x51\x7f\x8c"
- "\xb6\xea\x14\x63\xc5\xb9\x0f\xbf\xc8\xd7\x2c\x3f\x80\xf1\x5f\x96"
- "\x62\x07\x97\xe1\x33\xfa\xbf\x2c\x3e\x9f\xc8\xd7\xf5\xe0\x78\x72"
- "\xb5\x09\x63\xb6\x78\x27\xfa\xc6\x07\x72\x94\x3c\x3e\x4f\x44\x79"
- "\x25\xcc\x7d\x20\xbe\x93\xf2\x8a\xfb\xf3\xc4\x37\x04\xec\x80\xd9"
- "\x43\xe9\x95\x4a\xba\xe8\x5b\x1e\xa8\x09\x78\xde\xa3\x3c\xe3\x7d"
- "\x0b\xde\x1b\x64\xfc\x0e\xf4\xb9\x1a\xb1\xe7\xc2\xdc\x51\x75\xdc"
- "\x6e\x1e\xe8\x50\xf2\xf9\x9c\xda\xab\xf4\x6e\xcc\x09\xbe\x98\x61"
- "\x3a\x1e\x73\x61\x99\xbd\x5f\xb9\xc3\x71\x8c\xa1\x61\x74\x86\x2a"
- "\xa6\x11\x1e\xb2\x19\x7e\x96\x3d\x3e\x1f\x87\x07\x0e\xd1\x77\x0e"
- "\xa4\x23\xeb\x3c\x90\x60\xba\x9b\xe6\x9f\xe7\x72\xbd\xa5\x34\xc2"
- "\x4b\xf8\xa8\x4f\x24\xdc\x84\x6f\x3b\xc5\xb4\x7c\xbd\xe4\x5c\x6a"
- "\x7f\x65\x28\x59\x61\xbe\x59\xc5\xcb\x70\x7c\x2e\xf7\x6f\xeb\xdc"
- "\xea\x80\xe7\x26\xe5\x99\xe6\x7a\x85\xee\xcd\xad\x91\xf3\x5a\x2f"
- "\x54\xd7\x58\xfe\x8d\xcc\xdc\xae\x80\xfa\xdc\xfe\xf8\xe7\xe9\x02"
- "\x9e\xe3\x95\xe7\x9d\xfc\x1d\xc3\xbc\x24\xa5\x0e\x2e\x33\xd4\xb1"
- "\xc6\x4d\x8e\xf0\x0b\xed\x65\x82\x65\x16\xaa\xea\x1c\x86\xcf\x85"
- "\x03\xf2\x9b\x67\x56\xf0\xe1\xfd\x16\x15\x1c\xc6\x25\xf3\x76\x2a"
- "\x70\xe2\xfd\xc6\xbc\x46\x55\xb9\xe6\xaf\x69\x6b\x80\xee\x66\x7b"
- "\x85\xee\xce\xeb\x0a\xa0\xc5\x3d\x80\x33\x5b\x3b\x40\x4b\xb6\x5e"
- "\x05\x87\xf6\x99\x6d\x08\xd4\xd5\xd5\x66\xd2\x71\xd2\xd7\xec\xb4"
- "\x20\x79\x6e\x39\x2f\x27\xb8\x8e\x67\x9b\x54\xe9\xf2\xf8\x28\xfb"
- "\x13\x39\x4e\x20\xff\xec\xec\x29\xcd\x56\xce\x53\xe5\x3a\x49\xfb"
- "\x88\x4d\x10\x67\x77\xa3\x5e\x67\x37\x07\xe2\x15\xdf\xdf\xc8\x38"
- "\x06\x70\x96\x89\x18\x2f\xdb\xae\x6a\x5b\xb7\x1d\xe6\x2a\xef\x89"
- "\x1c\x62\x6e\x70\xde\xb1\x50\xe3\x0e\x97\xe5\xc1\x04\x7f\x9e\x3d"
- "\x98\x3c\xc0\xb3\x07\x27\x0d\xe0\x7d\x30\x5d\x05\xf7\x5f\xf8\x9c"
- "\xad\x82\xcb\xfd\x3a\xdd\x14\xba\xf2\x60\x79\x40\x5d\xd5\x2a\x1c"
- "\x8d\xaa\xba\x9a\x55\x70\x1d\xf8\x6c\x0d\x2d\x9f\x07\x8f\x85\x96"
- "\xcf\x83\xee\xe0\xf2\x99\xaf\x1f\xa8\x77\x7e\xc2\xd7\xdb\xd5\x7c"
- "\xa3\x8a\x9e\x7a\x7c\xce\xf2\xb7\xa3\xf9\xb9\x01\xcf\xfd\xf2\x67"
- "\xe8\x3b\x1a\x37\x18\xc3\x29\xbd\x78\x0c\xe8\x85\x9d\xcd\xaf\x52"
- "\xe7\xef\xed\x15\xf9\x44\x23\x7f\x07\x47\xef\x37\x05\x5c\x4b\x20"
- "\x1c\xc1\xa8\xf2\x3b\x14\xda\xb1\xbf\x0e\x7a\xf6\xa7\xd2\xff\xd9"
- "\x7c\xd4\xff\xcd\xe7\xfd\x1f\xdb\x36\x3c\x8d\x59\x3e\xc8\x09\xd5"
- "\x97\xb9\x2c\x0f\xa5\xe2\x98\xa1\x4b\xf0\xe7\x21\xd4\xff\x95\x3c"
- "\x36\x61\x95\xc3\xd3\x50\x9f\x7a\x4f\xc0\x43\x9f\xe0\x6f\x1f\xfe"
- "\xbe\xe7\xdf\xbf\x3e\x94\xcd\x2c\x9a\x79\xf5\x96\xc0\x7e\xf7\xa1"
- "\x42\x1c\x7b\xf4\xc6\x7a\xca\x72\x82\xe4\x95\x33\x4b\xd8\xdc\x20"
- "\xe9\x0d\x28\xaf\x5e\x3b\x3c\x74\x94\xe8\x55\xa5\xb7\x30\x4b\x4c"
- "\x36\xc1\xdb\xa9\x3e\x2c\x13\x4a\x6e\xca\x77\x50\x42\xf7\x72\xb4"
- "\x01\xed\x38\x7f\x02\x72\x36\x8b\x76\xe4\x7c\xea\x5f\x77\x4e\x42"
- "\xf0\x76\xe4\x4c\xc4\x76\x9c\x0f\xde\x8e\x9c\x2c\xce\x5b\x09\xdb"
- "\x32\x28\xee\xc8\x29\xc4\xb6\x9c\xe7\x7c\xf7\x4f\xdf\xa2\x8c\x53"
- "\x4b\xcf\x03\xbd\x17\xe2\x65\xe7\x95\x0c\xc8\x4d\x86\xdb\x13\x5b"
- "\x0d\x59\x41\xea\x6c\x65\x96\xe1\xf3\xec\x90\xe3\x51\xfa\x2b\x39"
- "\xfd\x98\xa0\x05\xf9\x24\x11\x9f\xb0\x3d\x58\x2e\x94\xbc\x15\xfb"
- "\x14\xef\x99\x1e\x46\xfb\x7f\xc8\xae\xf4\xe9\xd8\x9f\x3b\x14\x3e"
- "\x62\x5e\x46\x40\x9e\x5b\x95\x97\xe7\x97\xb7\xb1\x3f\xbd\x44\x49"
- "\xbf\x38\x39\x3d\xbc\x27\x40\x4e\x28\x9f\x47\x26\xfb\xb7\xfb\xe1"
- "\xfd\xa2\x7d\x28\xa3\x41\xbc\x7e\xb8\x03\x65\xd4\x17\x5c\x46\x0f"
- "\x3b\x83\xeb\xda\x23\x51\x1c\xdf\x48\x08\x82\xef\x91\x24\x94\x5d"
- "\x1f\xd7\x41\x59\x4e\x83\xe5\xf3\xc8\x2c\x45\x3e\x17\xd7\xc6\x47"
- "\xaa\x02\xda\xe8\x3d\x01\x0b\xa2\x45\x5b\x17\x3c\x1a\x80\xbb\x29"
- "\xb8\x2e\x3e\x62\xc5\x76\x7a\x83\xb7\xf3\x91\x63\xa1\x75\xf1\x11"
- "\x7a\x57\xe7\x1d\xac\x8b\x0b\xf4\xa2\x0c\x04\x29\xb3\x20\x99\x59"
- "\x82\xd5\xb3\x20\x9d\xe2\x22\x3b\x2c\x28\xa1\xf7\x74\xaa\xf4\x85"
- "\xfe\xfa\x87\x6d\xa0\x72\xc4\x3f\x8f\x18\xc7\x90\x1c\x4e\x18\x40"
- "\xfa\x3a\x9d\x74\x59\x16\xec\x0f\xe0\xd5\x99\x13\xb0\x70\x72\x8f"
- "\x24\xcd\x10\xfc\x7a\x54\x13\x40\x53\x47\x70\x7e\x2d\x70\x20\xbf"
- "\xce\x04\xe7\xd7\xc2\xa8\xd0\xfc\x5a\x48\xf2\x3f\x33\x98\x5f\x0b"
- "\x8d\x6a\x7e\xf9\x2c\xa2\x7d\xd7\xc7\xa3\x6e\xf4\x2d\x66\xf5\xc2"
- "\x97\xeb\x63\x51\x57\x44\x99\x6e\x2a\x53\x1c\xeb\x16\x7a\x62\xb8"
- "\x1a\x74\xa7\x61\xe1\x42\xc5\xfe\x63\xaa\x61\x38\xeb\x5b\x40\x6b"
- "\xb4\xe9\x4c\x67\xbd\xcd\x7c\xc6\x6a\xf3\xa4\x02\xcd\x37\x06\xd4"
- "\xdb\x12\xdc\x17\x2c\x6c\x47\x9e\xfe\x24\x48\x7a\x97\x98\x33\x7d"
- "\xd4\xe0\xef\x23\x1e\x05\x7f\x19\x2d\xe0\xe5\xa0\x7f\xff\xd3\x0b"
- "\x5f\x17\x96\xd9\xa3\xa6\xc1\x32\x5b\x34\x42\x96\xd7\x97\xfe\xf4"
- "\x3d\x5a\x1e\x5c\x5e\x8f\x36\x84\x96\xd7\xa3\xfb\x43\xcb\xeb\x51"
- "\x1a\xfb\x9c\xb1\xc3\x22\xbd\x7f\xbf\xf1\xa8\xc3\xbf\xbd\x58\x2f"
- "\x96\x63\xd2\xb0\xcb\xe9\xf9\x62\xdb\xad\x5c\xe4\xe3\x48\x56\xf4"
- "\xfd\x3f\xd2\x3f\x86\x68\x1c\x2a\x8e\x90\xb8\x91\x87\x55\x1b\x42"
- "\x9e\x13\x1e\x75\x04\xc7\x95\xb4\x3e\xcf\x30\x9a\xe6\xca\x16\x7d"
- "\xe1\x93\x34\x77\xe1\xbd\x74\x02\x72\xdf\xf6\x49\x61\x65\xb4\x96"
- "\x8c\x7f\x3b\xc8\xdf\x4f\x2c\xf2\xa8\x65\x41\x6b\xca\xb6\x8b\xbd"
- "\x1c\x69\x9e\xf3\xb3\x13\xb0\xf8\x59\x21\x97\xdc\x17\xfc\xf9\xb8"
- "\xd8\x10\x5c\x2e\x8b\x27\xa1\x5c\x3e\x0b\x2e\x97\xc5\xd9\xa1\xe5"
- "\xb2\xd8\x84\x72\xf9\x6c\xb0\x1d\x2d\x2e\x97\xed\xe8\x19\x2a\x63"
- "\x58\x49\xf1\xea\xe2\xf3\x04\x83\xf7\x68\x23\x8b\x3f\xa7\xfc\x94"
- "\x6e\xc5\x8e\x78\x19\x1a\xff\xf3\xfa\x65\x98\x16\x19\x87\x1a\xaf"
- "\x3d\xb6\x3b\x98\x9d\x2c\xa6\xf7\xa9\x9a\xf1\x26\xd0\x21\x0f\x73"
- "\x6a\x09\x47\x11\xc0\x69\xc8\x9d\x4d\x70\x94\x4e\x67\x2c\x0f\xc0"
- "\xe7\x26\x29\x70\x7c\x5e\x54\xc0\x1a\x98\xab\x00\x08\xce\x1f\x77"
- "\xae\xdc\xfe\xe1\xbc\x1f\x21\x78\x82\x0b\x80\x31\x0b\x7b\xcc\xdd"
- "\xef\x6f\x8f\xb9\x55\xfe\xfa\xb9\x98\xde\x4f\xc4\xfa\xd0\xcf\xa1"
- "\x2e\x77\x7a\x2d\x9a\xbb\x2e\x8d\x6d\x2e\x89\x0a\xb0\x4d\xd4\x81"
- "\x25\x6f\x09\x1d\x58\xb2\xcd\x9f\xd6\x25\x89\xc1\x75\x60\x49\x5a"
- "\x68\x1d\x58\x92\x13\x5a\x07\x96\x14\x93\x0e\xd8\x61\xc9\x1e\x7f"
- "\xdb\x5c\x52\xe9\xdf\x76\xac\x97\xdb\x26\x8c\x18\x8a\x6d\x62\x2c"
- "\x74\x79\x28\x3b\x94\xe3\x7f\x4d\x7d\x2f\xc0\x10\x78\xa6\x43\xbb"
- "\x42\xfa\x1e\x33\xd2\x3b\x24\xf4\xf1\x05\xc4\xc3\x3a\x3e\x46\x7b"
- "\x2c\x5b\xcd\xc7\xed\x62\xac\x55\x8a\xb0\x7f\xa4\x35\x7b\x82\x9f"
- "\x8f\xbf\xea\xdf\xfe\xc7\x8a\x83\xf3\xf3\xb1\x4a\xe4\x67\x69\x70"
- "\x7e\x3e\xd6\x14\x9a\x9f\x8f\xb5\xd2\xb7\xea\x83\x6d\xea\xb1\x63"
- "\x86\xb5\x3c\x46\xe1\x65\x4e\xc3\xe3\xb7\x5f\x5c\xff\xf4\x78\x9c"
- "\x7f\xff\xf4\x98\x67\xe8\xfd\xd3\xe3\x39\xc1\xfb\xa7\xc7\x4d\xc1"
- "\xfb\xa7\xc7\xcb\x85\x3d\x3c\x6e\xf5\xb7\x87\xc7\x1b\xfc\x75\x02"
- "\x79\x77\xc9\xfa\xa7\x3c\x7d\x80\x0d\xec\x38\x01\x79\x2f\x60\x4c"
- "\x21\xfb\xc2\xfc\x07\xfd\x69\xcc\x4b\x0e\x2e\xb7\xbc\x74\x94\xdb"
- "\x8e\xe0\x72\xcb\xcb\x0d\x2d\xb7\xbc\x12\x94\xdb\x8e\xc1\x72\xcb"
- "\xdb\x39\xf4\x98\x22\xaf\xcd\x5f\x66\x79\xcd\x43\x97\x59\x7e\x54"
- "\x70\x99\xe5\x27\x06\x97\x59\x7e\x9a\x90\x59\x7e\xb1\xbf\xcc\xf2"
- "\xb3\xfd\x65\x86\x7c\xbb\x64\x32\xcb\x6f\x0d\x90\xd9\xaa\x13\xb0"
- "\x74\x3a\xca\xac\x5d\xc8\xec\x89\x88\x00\x1a\xed\xc1\x65\x96\xef"
- "\x46\x99\xad\x0a\x2e\xb3\xa5\x71\xa1\x65\xb6\x94\xf6\xd0\x58\x35"
- "\x58\x66\x4b\x33\x86\x2e\xb3\xa5\x25\xfe\x32\x5b\x9a\x37\x74\x99"
- "\x2d\xb5\x06\x97\xd9\xd2\x8e\xe0\x32\x5b\xea\x10\x32\x7b\x22\xc9"
- "\x5f\x66\x4f\xe8\xfc\x65\x86\x7c\xfb\x96\x32\x43\xf9\x18\xc5\x7a"
- "\xdd\x27\xb6\xf6\xf0\x39\xed\x27\xca\xec\x50\x20\x7f\xcf\x5e\xc0"
- "\x75\x47\x96\xe1\x5e\x84\x29\x1e\xdc\x77\x3f\x51\x23\xa7\x3d\x34"
- "\x58\x0e\x4f\xb4\x60\xbf\xda\xdd\x5a\xc2\xd7\x75\x09\x19\x12\xcf"
- "\x11\x4e\xcc\x91\x3d\xc1\xfd\x3f\xca\x98\xd1\xbe\xc2\xd4\x17\x23"
- "\xbc\x93\xf0\xd0\xbe\x2a\xfe\xb8\x0a\xb4\x43\x89\xcb\x42\xaf\x31"
- "\x1f\x6e\xa4\xbd\xff\x4f\xc0\xb2\x51\x42\x57\x0b\x02\xe3\xdf\x7a"
- "\xac\xeb\x94\xd0\xd3\xe5\x01\x73\x26\x05\x21\xe2\xdf\x02\x8a\x7f"
- "\xeb\x83\xeb\x69\xc1\x05\xe2\xdf\x02\xe2\x47\xbd\x6a\xbc\x3a\x12"
- "\x23\xc0\x80\xf1\x6a\x81\x27\xd6\x29\x74\x87\xc7\xb1\xdb\x86\x1b"
- "\x5d\x96\x65\x89\x01\x34\xa3\x6c\x96\xbd\x2a\xd3\xfc\xb2\x7f\xf9"
- "\x65\x69\xc1\x69\x5e\x96\x8d\x34\xef\x0d\x4e\xf3\x32\x53\x68\x9a"
- "\x97\x55\x22\xcd\x7b\x07\xdb\xd6\xb2\x46\x59\x0f\x82\x8c\xcb\x97"
- "\x59\x83\xcb\x7f\x59\x80\xfc\x21\xa7\xb8\x84\x39\x78\x79\x3f\xb8"
- "\xe5\xa0\x86\xa3\xb5\xfa\x04\x4b\x3a\x12\x04\x36\x39\x10\x67\x08"
- "\xb8\xec\x41\xba\x47\xdf\x16\x04\xd5\xbd\xe5\x65\xc2\x1e\x97\x77"
- "\xf8\xdb\xe3\xf2\x6a\x7f\x7b\x5c\x16\xc0\x93\xe5\x2d\xfe\xf9\x05"
- "\xe5\x97\xce\xc7\x3e\x99\x14\xa0\x03\x1f\x9c\x80\x27\x5f\x13\x3a"
- "\xf0\xa4\xd7\x9f\x8e\x27\x8d\xc1\x75\xe0\xc9\x1c\x6c\xff\x07\xc1"
- "\x75\xe0\xc9\xe2\xd0\x3a\xf0\x64\x15\xf2\xf2\x03\xb5\xde\xce\x2b"
- "\x31\x0e\x0f\x80\xd9\x17\xdc\xe7\x3d\x79\x28\xf8\xbc\xce\x93\x9d"
- "\x82\xc7\x85\x09\xfe\x3c\x7e\xd2\xe3\xcf\x43\x6c\xcb\xb7\xe7\x61"
- "\xff\x59\x19\x2e\x4b\x61\xa0\xfd\xdb\x4e\x40\xa1\x6c\xff\x2b\xbe"
- "\xf0\xa7\xb1\x50\x1e\xff\x04\x9b\xcb\x2a\x6c\x44\x5e\xda\x82\xf3"
- "\xb2\xd0\x1a\xbc\xcd\x85\xd4\x07\xd9\x7c\x83\x6c\xa9\x90\xbe\x4b"
- "\x9d\x47\xef\x0e\x68\x0e\xab\x0e\xd3\xe7\x79\x40\xc7\xfb\xab\xfe"
- "\x7e\x69\x45\x1c\xcd\x91\xf3\x39\x66\xd4\xdf\xd8\x04\xc8\xa2\x3e"
- "\x88\xe8\x5a\x5c\x12\xf8\x4e\x74\x85\x91\xe8\xa6\x75\x2c\xf4\x5d"
- "\x4d\xac\x19\xb2\x6c\x4e\x0f\x28\xfa\x4e\xf0\x01\xb8\x4d\x64\x17"
- "\x04\xaf\xc0\x8a\xb9\xce\xb2\x00\xdf\xb4\xa2\x3a\xb8\x8c\x57\x34"
- "\x87\xd6\x9d\x15\x87\x84\x9c\x57\x82\xbf\x9c\x57\x74\xfa\x2c\x31"
- "\xd9\xd4\x56\xd4\x81\x21\xd9\x09\xbd\x3b\x0d\xe9\xef\x9f\x59\xd0"
- "\x61\xda\x04\xa3\x4f\xc2\xca\x02\x5e\x9f\xc4\x30\xa6\xd0\x40\x2b"
- "\xf7\x01\x2b\xdf\xe7\x74\x22\xcc\x62\x0f\x48\xec\x99\x27\x3b\x28"
- "\xaf\xde\xc2\xdc\x74\x6e\x8c\x72\x06\x0c\xea\xc2\xe5\xc7\x61\xe5"
- "\x66\xbf\xf2\xd8\x1b\xd9\x04\x8e\xfd\x62\x7e\x7f\x65\x8b\x32\x0f"
- "\x1f\x6a\x7e\x1f\x61\x8e\x29\xeb\x7e\xc5\xbb\xb0\x95\xed\x21\xfb"
- "\x65\xa4\x89\xbe\x1d\x27\x9a\x2e\xec\x07\x56\xa5\x2a\xfa\x2b\xde"
- "\xcd\xad\x32\x0e\x7c\xdb\xb2\x6a\x16\xe6\x39\x2f\x30\x9f\xab\xb2"
- "\x83\x55\x66\x35\x1e\x71\x5e\xcc\xaa\x4a\xe5\xfb\x14\xbc\xaf\xfe"
- "\x1a\x5c\x0a\x3d\xd6\x00\x7a\xda\x71\xbc\xe0\x94\x71\x1c\xfb\x1a"
- "\x1c\x71\xb6\xc6\xbb\x60\xbc\x0f\xc2\x4e\x42\xd1\x38\x3a\x7f\xc6"
- "\x56\xd3\x05\x51\x1e\xd0\x8a\xb1\x9d\xe9\x56\xfa\x36\x84\xc6\x86"
- "\x36\xcf\x14\x2b\xbd\x83\xe3\x6b\x08\xe2\xa7\x58\x0f\x9b\xbd\xf2"
- "\x1e\x6c\xa6\x7b\x88\xa7\x87\x0b\xce\x58\x6b\x5e\x62\x5d\xb5\x7c"
- "\xef\x2d\x93\xdf\xf8\xaf\x92\xd6\xff\xd0\x3a\x8c\x4d\x30\x05\xe1"
- "\xff\x28\x6c\xbd\x28\x20\x26\x35\x85\x18\xff\x99\x68\xfc\x37\x25"
- "\xb8\x9d\x9b\x2e\x30\xfe\x33\xd1\xf8\x6f\x8a\xba\xdf\x14\xef\x79"
- "\x4c\xc7\xd4\x31\x29\xed\x8f\x65\x58\x4a\x71\xe6\x53\x0f\xdc\xb2"
- "\x13\xf4\x1e\x7a\xa7\x8d\xb6\x69\xeb\x6a\x25\x7b\xd5\x1f\x76\xb4"
- "\xd0\x3e\x0c\xba\x18\x13\xe9\x22\xf5\x65\x64\xaf\x4f\x19\x78\x5f"
- "\xe6\x11\xb6\x58\x6a\x66\x8e\xe4\x4e\xd4\xa1\x55\x05\x0a\xae\xa8"
- "\x8d\x05\xe2\xbb\x8f\x98\x4e\x18\x6e\xeb\xe2\xfd\xa2\x86\xe2\x55"
- "\x1e\xb7\x7a\xce\x02\xe1\x3d\x50\x72\x18\x08\xaf\xaf\xbf\x9f\xe4"
- "\xb8\x4b\xc8\xc6\x09\x27\xe1\x3e\x82\x70\x84\x97\xe0\x94\x76\x88"
- "\x6f\x63\x9e\x6a\x54\xb7\x9d\xcf\xbf\x60\xdd\x98\xfe\x39\xcd\xab"
- "\xd8\xa8\x5c\xe9\x02\x36\xbe\x93\xde\x99\x9d\xb1\xb2\xd2\x27\xd9"
- "\xf8\x22\x9a\x13\x2b\xa2\x73\x9f\x35\x7b\xff\x64\x0f\x2f\x1e\x03"
- "\x3a\x91\xf6\x54\x77\xab\xc1\x0d\x76\x28\x4a\xf5\xf7\x11\x45\x01"
- "\xf1\xaf\x89\x8f\x33\xf1\x57\x4b\xeb\x13\xe5\xf5\xab\xe4\x0f\x98"
- "\xcd\xe3\xe2\xfa\x71\xa1\x35\x15\xf4\x4e\x9a\xd6\x44\x89\xfd\xdf"
- "\x8a\xcc\x01\x73\x6f\x8e\xed\x7c\x5d\xcd\xff\x60\xbd\xab\xc3\x85"
- "\x8e\x14\x87\xfb\xcb\xb4\xa8\xba\xf4\x14\xbd\x0b\x12\xfd\xc1\x22"
- "\x4f\xa0\x7f\x2c\x6a\x51\x62\xb7\x80\xf4\x76\xa5\x3f\x30\xac\x24"
- "\xbc\xab\x03\xfa\x99\x22\x1e\xff\x7b\x07\xf5\x0b\xab\xc9\xaf\xfb"
- "\xe9\xe4\x11\xae\x43\xab\x0d\x87\x9d\xa8\x37\x45\xa4\xff\xab\x5f"
- "\x46\x98\xcd\xf4\xcd\x21\x3e\x0f\x3f\x0d\xab\xb3\xbc\x16\xd0\x1d"
- "\x76\xf0\x6f\xaa\xf4\xa8\x23\x5c\x6f\xa9\xdf\x98\x20\xd6\x23\x39"
- "\x03\xea\x28\x54\x78\x4e\x30\x47\x8a\xfe\x07\xc4\x7a\x0a\xd2\x85"
- "\xd5\x46\x5a\x9b\x11\xd3\xcd\xf7\xda\xd2\x2b\x3a\x64\xf3\x74\xc0"
- "\x11\x4f\xe0\x98\x67\xf5\xbe\xe0\x6d\x5f\x4d\xfd\xff\x4f\xec\x50"
- "\x9c\xe8\x2f\xdb\xd5\xbc\xff\x57\xde\xeb\xa0\xec\x1d\xfe\xe5\x8a"
- "\xb5\xfe\xb2\x2f\xaa\xa6\xfc\x90\x6b\x7c\x2a\x87\xa7\xe3\x78\x66"
- "\xb1\x93\xaf\xf7\x2a\x46\xfb\x2f\xca\xbe\x90\x1f\x64\x51\xc3\xd3"
- "\x7d\x08\x2b\xaf\x0b\x46\xbf\x55\x5c\xee\x37\x67\x74\x25\x9f\x33"
- "\x5a\x7c\x02\xd6\xc8\xef\x7e\xd6\x1c\x0e\xa0\xaf\x31\x74\x6c\x50"
- "\x4c\xef\x7f\x16\x07\xf7\x19\xc5\xc7\x82\xc7\x06\xc5\x4e\xd9\x2f"
- "\x2c\x66\xd1\x81\x7a\xb0\x86\xbe\xa7\xe3\x65\x94\x31\x2c\xcd\x85"
- "\x86\x1e\xc3\xae\x31\xf6\x8f\x61\x8b\xc8\x1f\xac\x49\xea\x1f\xc3"
- "\x3a\x82\x8d\x61\xed\x41\xe4\xb9\x66\x4b\x70\x79\xae\xa9\x09\x3e"
- "\x86\x5d\xb3\x4f\xf4\xf3\x6b\xba\xfc\xe5\xbc\xe6\xd0\xc0\x3b\xe1"
- "\xe2\xc6\x4b\x17\x0f\xaf\x9d\x34\x38\x1e\x5e\xfb\x6b\x21\xab\xb5"
- "\x67\xfd\x69\x5b\x9b\x15\xdc\xb7\xaf\x2d\x08\x1d\x0f\xaf\xdd\x12"
- "\xda\xb7\xaf\x6d\x18\x1c\x0f\x1b\x86\x05\xc0\xb4\xf6\xc7\x4a\x7e"
- "\xb1\xd9\xda\x63\x82\x4f\xeb\x28\x9e\x0b\x53\xc1\x3b\xfd\xf5\x1d"
- "\x69\x46\x7c\xe8\xdb\x4e\x92\x4f\x53\x74\x26\x14\x4f\x68\xef\xa5"
- "\xeb\x77\x42\x04\xda\xc0\x07\x2e\xcb\xba\x7e\xfd\xa7\x75\x7c\x54"
- "\x0f\xf9\xc8\x90\xeb\xe9\x24\x85\x3e\xa2\x63\x5d\xc9\x85\xde\x97"
- "\x86\xc5\x43\xd6\x8b\x83\xf8\xb1\x8e\xc7\x7f\x84\xe3\xc2\x32\x5b"
- "\xd7\x1d\x60\x63\x4e\xb1\x0e\xd7\xfc\x9e\x90\x9b\x39\x60\x2c\x6b"
- "\xd6\xf1\x6f\xfa\x42\xfa\x5b\x73\x52\x70\x1d\x35\x1b\xfb\xfd\x6d"
- "\x11\xc7\xbb\x3e\x20\x3f\x57\xc8\xc0\xdc\xe2\x8b\x56\xcf\x75\x9b"
- "\xcd\xfe\x3e\xc9\x9c\x1b\x50\x2e\x60\xfc\x67\xe6\xf4\x5c\x5c\x7f"
- "\x63\xee\x0a\xdd\xdf\xac\x5f\x23\xda\xbf\x21\xe0\xfd\xf2\x7a\xdd"
- "\x85\xfb\x9b\xf5\x21\xda\xbf\xde\xe8\xdf\xdf\x6c\x08\x78\x47\xbf"
- "\x3e\x37\x78\x7f\xb3\xde\xac\xf8\x19\xe1\x37\xd6\xff\xfe\xe2\xfc"
- "\xcd\xfa\x66\x7f\x7f\xb3\xbe\xfa\xeb\xfc\xcd\x81\x41\xfe\x66\xbd"
- "\x33\xb6\x26\x58\x5b\x36\x44\x05\xf7\x37\x1b\x12\x85\x0c\x37\x94"
- "\xf8\xfb\x9b\x0d\x69\xfe\x32\x5c\x1f\x20\xc3\x0d\x01\xef\xbf\xd7"
- "\xeb\xbe\xa9\x4f\x0a\x0b\x0b\x93\xc2\x34\x92\x26\x0c\xb3\xb0\x79"
- "\x30\x3c\x4c\x1b\x16\x8e\xd7\x30\xf9\x77\xb8\x14\x26\x69\xf1\xfa"
- "\xff\x89\xfb\x1e\xe8\xa8\xaa\x6b\xef\x33\x93\x09\x4c\x70\x32\x13"
- "\x42\x8c\x23\x7f\x64\x50\xb0\x51\x41\xa2\xe2\xf7\x51\xc4\x1a\x2b"
- "\xbe\x87\x6f\xa1\xa4\x14\x6b\xda\x87\x26\x68\x62\x43\x45\x98\x26"
- "\x01\x02\x86\x4c\x18\x22\x8d\x9a\x7f\x6a\xc4\x00\x21\x44\xa5\x2d"
- "\xb4\xa8\xb1\xc6\x36\xf6\xa1\x8e\x12\x7d\x51\x43\x26\x5a\x6c\xa3"
- "\x0f\xdb\x21\x0d\x31\xa4\x01\x46\x32\x49\x86\x64\xe6\x9e\x6f\xff"
- "\xce\xb9\x77\x66\x12\x13\x2c\xef\xbd\xb5\x3e\xd6\x0a\x73\xef\xb9"
- "\xe7\xef\x3e\xfb\xec\xb3\xf7\x3e\xfb\xec\x1d\xad\xfe\x4e\x18\xf5"
- "\x3e\x11\x65\xe9\xcf\xa0\xfe\x46\x8f\x7a\x9f\xf0\x2d\xdf\x27\xaa"
- "\xed\x6a\xed\x1b\x46\xbd\x47\x7f\xcb\xf7\x09\xff\xc3\xf2\xec\x1b"
- "\xef\x23\xef\x41\xde\xb5\x6e\xe3\xea\xb5\x6b\x32\x85\x5d\x7b\x96"
- "\x6d\xf5\x43\x0f\x65\xe5\xe6\xda\xf2\xd6\xdb\xbe\x7f\xfb\x8a\x1b"
- "\x17\xd9\xa4\x79\xfc\xda\x5b\xe7\x64\x4e\x62\x77\x6f\xca\xc1\x87"
- "\xbb\x7f\x78\x57\x9a\x2d\xf5\xfb\xb7\x8f\xfc\xa8\x55\x23\xcc\xe0"
- "\x2f\x54\x4b\xc4\xda\x4b\x79\x22\x91\xb1\xd2\x9d\x82\xee\x74\xe2"
- "\xee\xb9\x94\x27\x8a\x3e\x6f\xc1\xfd\xe5\x21\x07\xc7\xbd\x8a\x0e"
- "\x56\xb0\x15\x83\x98\x57\x57\xc4\xec\x0f\xc2\x9f\x4a\xc1\x2e\xfe"
- "\xb6\x97\xd9\xfe\x8d\xe9\x3b\xd8\xe3\xa7\x9a\x96\x52\x5e\x7a\x77"
- "\x7b\x02\xcc\xe6\x00\x6f\x5b\xf4\x04\x7d\xd3\xf1\xef\x29\x94\xe6"
- "\x53\xef\x64\x3a\x76\x89\xb4\xb7\x8b\xb4\x7c\x96\x2e\xb6\xf5\x56"
- "\xfe\x36\x17\xef\xf0\x59\x23\xf3\x6d\x9d\xcc\xf5\x8f\xb5\x81\x2e"
- "\xd4\xc4\x33\x03\xec\xb2\x77\xc5\x33\xe3\xae\x44\xf8\xdc\xdd\x6a"
- "\xd0\xec\xb2\x9f\xa0\x77\x0f\x7b\xbc\x1b\x6d\x23\xaf\xa2\x7f\x6c"
- "\x08\xf9\x6b\x47\xe6\x5f\x10\xb6\xe3\xde\x6a\xd0\x53\xbe\xe5\x27"
- "\x98\xc5\x12\xe4\x5f\xfb\x27\x05\xf3\xaf\x5f\x4a\x7c\x1a\x4d\x45"
- "\x4b\xa0\x88\xc9\xbb\x51\x5b\xb7\x6e\x0e\xf2\x00\x7c\x26\xdc\xdd"
- "\xeb\xe0\x15\x8f\x32\x03\xad\x67\x9d\x2b\x07\x77\x29\xb6\x66\xee"
- "\xcb\x62\x06\x1a\xff\xf4\x1e\x56\x58\x65\xbb\x87\xf8\xc6\xbb\x99"
- "\xe1\xa3\xfc\x22\xc6\xcb\x8d\xbb\xcb\x3f\x65\x86\xdf\x0e\x15\xe9"
- "\x87\xb8\x95\x15\xe4\xf1\x6e\x0e\x3f\xdc\x3e\xee\x87\xbd\x6d\x4b"
- "\x46\x10\x79\x9e\x1c\x74\x58\x59\x2b\xb1\x2f\x5b\x8f\x73\x7f\xc9"
- "\xa7\xd2\x5f\xc5\xd1\x5e\x1f\xee\xcf\x1a\xb7\xde\xcd\xa2\xba\xd2"
- "\x98\xfe\x68\x76\x35\x73\xaf\xf2\xb1\x82\xe3\xbc\xbb\x25\xe3\x24"
- "\x6b\xcd\xae\x67\xe9\xed\x4c\xdf\xd2\xf9\x25\x13\xbe\xa4\xcb\x53"
- "\x8a\x0a\xfb\x99\x75\xeb\x1a\xa4\xf5\xb3\x2d\x5b\x59\xec\x96\xcf"
- "\x20\x07\xb5\x53\x3b\xa7\xd9\x4f\x8e\x31\x1d\xd5\xa7\x7f\xec\x4b"
- "\x66\x7d\xec\xc7\xb8\x67\x9e\xc2\x6a\x0a\x99\x95\x3b\x92\x4c\x43"
- "\x8e\xa4\xb8\x21\x9e\x14\x3f\xe8\x48\x4a\x68\xb5\x53\xfe\xce\xb7"
- "\x98\xb9\x9d\x25\xbc\xdd\xd3\xae\xaf\x3e\xc7\xa6\x63\x4c\x5d\x34"
- "\xb6\x9a\x73\x94\xbf\x3c\x91\x29\x54\x36\xb2\x4c\x20\x36\xd1\xea"
- "\x4e\xf3\x33\x85\xea\xaa\x1e\x62\xd3\x6b\x86\x98\x55\x29\x4b\x64"
- "\x28\xd7\xcb\x1c\x4f\xbb\x5b\x18\x61\x0a\x0f\x0e\x97\x47\xe7\x13"
- "\x3d\x9c\xf8\xea\x83\x8d\x06\x77\x4b\x2f\x3b\xea\x1b\x62\xad\xec"
- "\x0b\xe6\xce\xff\xca\xf5\xdb\x07\x1b\xa3\x89\x9f\xd4\xb9\xb6\xc0"
- "\x06\x5e\xe2\x8e\xe3\x28\xfc\xe7\x15\xb1\x8a\x42\x66\xb2\x6f\x61"
- "\x13\x7b\x28\x5d\xd0\x9e\x12\x7f\x91\x3b\xf0\x95\x6b\x8b\xb8\x0f"
- "\xfe\x78\x77\xe1\x51\x16\xd5\xea\xab\xc6\xbd\x63\x7d\xd0\x9c\x52"
- "\xe4\xf6\xb5\x31\xb7\xfd\x6f\x2e\xc5\x94\x92\x5d\xaa\x30\xe3\xcb"
- "\x03\x6d\x7a\xb7\x61\x80\xb9\xd3\x7c\xec\x1d\x6a\x9b\x97\xa7\x94"
- "\x12\xcd\x4a\x69\xf5\xf9\xe1\x7f\x27\x99\xf7\x59\x27\x55\xe4\xb0"
- "\xb9\xb5\xe7\xd8\xec\xbd\xe7\x58\x12\x1f\x4c\xd2\xe3\x8e\x37\xfc"
- "\xa5\xed\xa5\x5f\x13\xc9\x60\x34\x76\x79\x8f\x3b\x56\xbd\xeb\x3d"
- "\x9c\xc4\xf6\x0d\x85\xef\x7a\x0f\xf5\x85\xef\x7a\x13\x4e\x19\x71"
- "\xdf\xdb\xc3\x0a\x6b\x2c\x2d\x6c\x22\xad\x13\x17\xf0\xbb\xe2\x0c"
- "\x33\x6c\x3f\xc3\xd8\xf5\x45\x7a\xc8\x99\x06\x5a\x0f\x5b\xdd\x34"
- "\x37\x78\xee\x60\x45\x0b\xe8\xd7\x44\x7f\x24\xcf\x15\x09\x5f\x15"
- "\x9d\x2a\x1e\x53\x9a\x9e\xd2\x66\xd0\x6f\x14\xfd\x5e\xea\xa8\xe1"
- "\x5e\x6a\x2b\x8d\x78\x95\x49\xc0\x67\xf5\x7e\x79\xda\xa0\xb3\xc8"
- "\xe4\x61\x87\xd6\x6a\x78\x2d\xe9\xfb\x56\xe3\x3b\x1d\xa7\xe1\xef"
- "\xdd\x2b\xfa\x35\x9c\xad\x83\xef\x77\x35\x1d\x7d\xd8\x80\x76\xa9"
- "\xfd\x34\xfa\xb5\x48\x19\xd4\xd1\xab\x95\xed\x1b\xce\x46\x9b\x8f"
- "\x52\x3a\xd7\xd2\x69\xdc\x06\x7c\x7b\xbd\xe3\xb4\x5e\xe6\x49\xd2"
- "\x53\x9d\x7e\xb5\x7e\x5a\xfb\x05\x87\xb0\xc6\xfb\xf4\x16\x7e\x24"
- "\x63\x01\xab\xd9\xc9\x5b\xf6\xee\xe4\x4d\x72\xed\x15\xd5\x7b\xd8"
- "\x2b\xc2\xf7\x24\xed\xe1\x4d\xa5\xf4\xed\x08\x49\xe3\x80\x4b\x53"
- "\x26\xec\x4b\x8b\xda\x3c\xec\xca\x84\xc8\x31\x70\xe7\x96\x7a\xec"
- "\xa3\xaf\x14\x36\x93\x3c\xf9\x58\x7d\x6b\x67\x2f\xfb\xed\x50\x77"
- "\xb4\xe3\x43\xa6\x77\x07\x3a\xd8\xfc\x04\x19\x27\x67\xdf\x4e\xee"
- "\x79\x16\xf1\x83\x77\xf2\x5e\xc2\x97\x19\x3d\x6c\xdb\x8c\xeb\x12"
- "\x58\xc2\xc7\xc4\x95\x48\xfa\xb4\xed\xe6\x08\xfa\xf4\xd6\x51\x4f"
- "\x63\x04\x6d\x7a\xfc\xd1\x6f\xd2\xa6\xe2\x35\x92\x36\xd1\xda\x17"
- "\xb4\x28\xe8\x51\xd3\xef\x1d\x95\xae\xde\x5f\x29\xfe\xee\xa8\x74"
- "\xbf\x9a\x3e\x67\x54\xba\x57\xa6\x6f\xcf\xd2\x68\x5f\x2b\xfa\xb1"
- "\x09\xb4\x6f\xfb\x5d\xa0\x7d\xad\x19\x2a\xed\x13\xf4\x67\xfb\x3c"
- "\xfe\x22\xd1\xa2\x8d\xa0\x37\xdb\xa3\xd1\x7f\xfe\x36\xd3\xfa\x1e"
- "\xd3\xc5\x9c\xef\x23\xad\xf2\x0b\x66\xa0\x3f\x95\xee\x15\x5c\x06"
- "\xba\x07\x9a\x07\xda\xb7\x27\x91\xb7\xef\xd9\xc9\x8f\xd5\x08\xbf"
- "\xd5\xce\x10\xfd\x7b\x8a\xd2\x4a\x29\xed\x29\xfa\x0e\x3a\x08\x98"
- "\x1c\x4d\x6b\x64\x22\xae\x4d\xa9\xb1\x5a\xd1\x27\xb3\x72\x9a\x6f"
- "\xf8\xbf\x2a\x26\xf8\x5a\x74\xcc\xee\xce\xf3\x89\x7b\x28\xf0\x95"
- "\xde\x9a\xd7\x89\x75\x97\xb8\x5d\x81\x9e\xe2\x24\x2b\xf4\xf1\x1e"
- "\xdc\x55\x41\x1f\xd2\x37\xff\x1b\x7c\x7d\xeb\x9a\xb2\x19\x83\x5f"
- "\x02\xd0\x6c\xea\x8b\xa1\x92\xfa\x24\x7d\x0b\x3b\x0f\x7b\xd8\xdf"
- "\x54\x7c\x7d\x1c\x77\xd5\x68\x4f\x21\x41\xdc\x49\xf4\x91\xc6\x66"
- "\x09\x16\x31\xf8\x66\x41\x7c\x4d\xfc\xee\xd1\x2b\xd9\x95\x9a\x7f"
- "\x16\x27\xd1\x06\xca\xe3\x6e\xf7\x33\xf4\xd9\xc3\x9c\xcb\x8e\x16"
- "\x34\x52\xf9\x6d\x5e\xc0\x86\x3b\x1d\x5a\x1d\x3a\x51\x87\x5e\xe8"
- "\x6e\xb3\x29\x9f\x47\x94\x37\x47\xe7\x1f\x5d\xe5\x65\xa0\xfb\xee"
- "\x6e\xaa\xa3\xa0\x43\xd6\x41\x75\x71\xda\x03\x46\x7c\x53\xeb\x8f"
- "\xdd\xca\xbf\xa6\xfa\x0f\x63\xbe\xe0\xa7\x0b\x76\x4a\x04\x17\x13"
- "\x7c\x35\x48\x3e\xd4\x79\xe7\xbe\x2f\x18\x53\x7d\x8d\x11\xbe\x39"
- "\x97\xc0\x97\x17\xfc\x8b\x5d\xc8\xb7\x18\xc1\x68\xb6\xe6\x5f\x4c"
- "\xd9\xf4\xbf\xeb\x5b\x8c\xea\xb6\xd6\xea\x39\xad\x39\xe7\x12\xf8"
- "\x17\xa3\xfe\xef\x07\x1e\xaa\x63\x5a\xfa\xdc\x4f\x00\xf3\x6d\xa5"
- "\x48\xab\x70\xf2\x66\x6d\xfe\x31\x5e\x8c\x85\xbe\xd9\x25\x7f\xc8"
- "\x69\x5d\x16\x2f\xc5\x77\x4a\x5b\x85\xfc\xf3\x89\x8e\xb9\x69\x0f"
- "\x7b\xb5\x23\xa8\xaf\xd8\xc2\x0c\x92\xa6\x3d\xbe\x1a\xe5\x25\x4d"
- "\x7b\xdc\x1a\xa6\x69\x8f\xc7\x4a\x9a\x26\x61\x2c\x69\xda\xe3\x3a"
- "\x49\xd3\x8a\xcf\x0b\x7b\x22\xa2\x69\xf8\x06\xba\xa6\xd1\xb4\xbd"
- "\x89\xbc\x19\xb4\x63\xd0\x59\xdc\xad\xd1\xb6\x32\x4a\x03\xed\x40"
- "\x1f\x25\x9d\xda\x9e\xc2\xff\x2b\x89\x49\x7b\x4d\x3c\x67\xc3\x7f"
- "\x46\xb7\xfa\x8c\xfd\xe4\xc7\x92\xc6\x3d\xbe\x38\x4c\xe3\x8a\x5d"
- "\xe1\xb2\xa0\x71\x8f\xff\x40\xd2\x38\x99\xbe\xef\x27\xa0\x71\xdb"
- "\x53\x00\x03\xb5\x7e\x3d\xce\xd1\xd4\xfc\x80\xe3\xd2\x48\x1a\x37"
- "\x72\x7d\x3d\x5e\xa5\xd1\x38\xd0\x36\x7a\xdf\xef\x61\xb3\x84\x5e"
- "\x18\xeb\xac\x8a\x60\xae\xad\x3b\xcc\x01\xc6\x8c\xf8\x01\x80\xdb"
- "\x1d\xa7\xd9\x44\xd5\x6f\x8d\x3a\xee\xc7\x3d\xda\x1d\x4d\x82\xff"
- "\x37\x7d\x9a\xb1\xb0\x5f\x32\x9a\xeb\x99\xf0\xe7\xe8\x2e\xea\x60"
- "\xee\x6a\x5e\xd4\x1a\x38\xce\x94\xed\x8f\x9c\xc0\xbc\x92\xbc\x71"
- "\x0b\x7e\x41\x77\x7a\xd8\x8e\x59\xe9\x3e\xa1\xbf\x3f\x51\xa1\xa7"
- "\x6f\xf9\x23\xbe\xdd\x8a\x36\xa0\x57\xa4\x67\xe3\x78\x7a\x84\x8b"
- "\x68\xab\xec\x02\x6d\x1d\x14\x6d\x11\x2f\x45\x72\xcf\xe4\x33\x6c"
- "\x87\x38\x43\x13\x3e\x99\xc7\xae\xeb\x73\xf5\x7b\xd4\x38\xdf\xcf"
- "\x5f\xb8\xfc\x2f\x2e\xbf\x70\xf9\x5f\x7c\x17\x34\x08\xf7\xf1\x82"
- "\xce\x91\xf5\x98\x03\x5a\xbe\x1e\xe4\x5b\xad\x9e\x83\x9c\x70\xcc"
- "\x12\x72\x99\x55\xab\x13\x78\x57\x4e\xf9\x84\xff\x5a\xa2\x91\x4b"
- "\x36\x33\xf8\x0e\x8e\x2c\xbb\x37\x0c\xdf\x5f\xa4\x5e\x40\x4f\x63"
- "\x72\x93\x14\x88\xf8\xf2\x47\x68\x17\xc4\x5d\x9a\xaa\xd0\xd9\xc3"
- "\x2f\x7c\x44\x2f\x45\xfc\x56\xf5\xde\x6e\x2f\xd1\xb7\x99\xf0\xb1"
- "\x09\xbe\x52\xbd\x6b\x71\x19\xd1\xe5\x78\xf8\x61\x81\xbe\x3a\x3d"
- "\x98\xaa\x3f\x22\xfc\xef\x97\x24\x6b\x65\xc7\xd3\xed\xa1\x5d\xb5"
- "\x4d\x71\x0f\x89\xca\x64\x6a\x65\x50\x37\xee\xde\xd0\x7e\x3c\x53"
- "\xf8\x37\x0b\xf4\x82\x06\x5e\x46\x3c\x68\xbc\x6c\x27\x83\xa9\xed"
- "\x54\x7b\xd8\x8e\xcc\x0b\xdd\x73\x1a\x7f\x7c\x25\xc7\x2e\x7e\x7c"
- "\x4c\x1d\xdf\x13\x71\xdf\x32\xbe\x0b\xb4\xfb\xc4\xb2\x8b\x6f\x37"
- "\x4e\x6b\xb7\xe4\xe2\xe1\xfa\xc4\xe1\x7f\x1e\xae\xc9\x2a\x5c\x9f"
- "\xf0\x7e\x0b\x5c\xc7\x68\xe7\xc9\xd9\xff\x7c\x3b\x36\xb5\x9d\x27"
- "\xd3\xc6\x6a\x87\x89\x7f\xe3\xfa\xeb\x31\x6a\x31\x62\xd4\xb8\xc4"
- "\x31\x54\x4f\x9d\x87\x95\x84\x62\x0f\xcb\x78\x49\x4f\x36\x78\xd8"
- "\x13\x55\x23\xef\x71\x3d\xf9\x49\x7a\x1d\xf6\x75\xae\x78\xd8\x93"
- "\xc7\xa0\x6b\x5b\xb2\x55\xfa\x07\x54\xcb\x10\x3d\x7f\x62\xfa\x85"
- "\xce\xd3\x44\x2c\x0c\xd5\x77\x07\xee\xa7\xf2\xf2\x04\x4f\x9f\x23"
- "\x9b\xc9\x58\xd1\x4f\xdd\x80\x7b\x48\xf4\x3c\x91\x9e\xa5\x1e\x0a"
- "\xf1\x05\xa4\x4f\x8a\x09\x94\xb6\x0d\xf1\x27\xe4\xfd\xbd\xa7\x56"
- "\x52\x1f\xf2\x85\xae\x49\xf8\xd8\x17\xbe\x5d\x7c\x94\x4f\x8f\xb2"
- "\xd2\xa7\xc7\x53\xf9\x5a\x1e\x8f\x56\x5f\xc8\xbf\xc5\x53\x77\xc9"
- "\xbd\xe5\xa9\xa5\x7d\xe3\xc4\x31\x82\x9f\xb3\xfd\x85\xc9\x23\xee"
- "\x1f\xde\x99\x93\xb3\x3e\x67\x91\x2d\xf7\xd1\x07\xe7\xe5\xe6\xad"
- "\xce\xdb\x90\x2b\x2e\xaa\x4f\x62\x94\x60\xcb\x5b\xf3\x68\xd6\xfa"
- "\x0d\x79\x49\x9b\x56\xaf\x91\x17\xdb\xaf\xa1\x8c\x91\x99\xd8\xc8"
- "\xb8\x91\x44\x83\xda\xb8\x5e\xf8\xa0\x10\xb1\x23\xe1\x8b\x44\xbb"
- "\xb7\xdb\x64\x15\x31\xb6\x88\x66\x95\x2e\xf6\xb0\xf5\xdd\xda\x3c"
- "\xc0\x3f\x22\xf1\x2d\xd6\x1e\x56\xfa\x63\xe0\xce\x72\x62\x41\xf7"
- "\x49\xbf\x12\xc2\x37\x80\x3b\x8f\x12\x5a\x99\xd1\xb5\x11\x7a\xd8"
- "\xd2\x36\xc5\xf9\x94\x4b\xf8\x7b\xdc\xd2\x83\xf7\x7e\x8d\x4f\xc0"
- "\xb9\x92\x3c\x07\x9e\x79\x5b\x07\x2b\x9d\x83\x76\xb1\xee\x6a\x9f"
- "\x91\xb1\xba\xb9\xf3\xa9\x76\xdc\xd5\xa6\x77\x23\xf5\xc1\xa5\xf1"
- "\xa2\xd4\x5f\x13\x8f\x4d\xa0\x79\x2e\xf5\xbd\x17\xe7\x65\xea\x5d"
- "\x6f\x63\xad\xbc\xd7\x6d\xa0\xbc\xbd\xa1\xbc\x4e\xca\x5b\x96\xd0"
- "\x4d\xfb\xe6\x98\x67\xd9\xdc\x1c\x9f\xad\x0c\xa7\x45\x47\x8e\x99"
- "\xe4\x6a\x9a\xbf\xb2\x5f\xd2\xd8\x13\x34\x5c\x91\x73\x5f\x56\x26"
- "\x7c\x2f\x97\xc7\x67\x53\xda\x04\xfa\x2d\xea\xa3\x6f\xf0\x81\x40"
- "\xdf\x32\x70\x46\xd6\x5a\x70\xd6\x75\xc4\xda\x41\xf3\x5e\x66\xf7"
- "\xb0\x8d\xd3\xe5\xbd\x35\xca\x4f\x6d\xb8\x8b\x86\x58\x93\x8d\xbb"
- "\xa0\xa3\xf3\xb0\xb2\xc3\x4d\x36\x1f\xe3\x51\xff\x7e\x02\xe5\x68"
- "\x5d\x59\x1d\xf9\xe0\x45\x28\x5d\xdc\xcf\x2b\xab\xd7\x60\x9e\x67"
- "\xe3\xa7\x91\x67\x3c\xbd\x32\xf6\xcb\x0a\xb1\x97\x9c\x63\xb0\xc1"
- "\xea\x64\x65\xc7\x46\xef\x17\x73\x32\x17\xd9\x32\x57\xe7\xd9\xd6"
- "\xae\x59\x97\x65\xcb\x5c\x93\x69\x5b\xb7\x3e\xcf\xf6\xd3\xf5\x50"
- "\xf0\x40\xa5\x33\x02\x27\x14\x8c\x6f\x53\x5a\xb4\x76\x86\xdd\xb7"
- "\x29\x7b\x82\xc4\xe9\x8a\x79\x7d\x83\xd9\x13\x47\xc2\xa4\x62\xb2"
- "\xdc\x2b\xcb\x33\xa8\xef\x06\x79\xff\x2f\xaa\x9b\xde\x69\xfc\x65"
- "\xcd\x23\xd7\x6e\xc5\xfd\x6a\xde\x52\x2d\xaf\xc0\x8b\x2b\x7b\x42"
- "\xdf\x2a\x54\x7c\xdc\x27\xef\x29\x0b\xbf\x37\xfb\x84\x0d\x7f\xb9"
- "\x6b\xdc\x32\xf0\xf5\xb5\x85\x3d\x74\x86\x95\x1f\xe4\xce\x32\x9f"
- "\x8a\x43\x46\xa5\x34\x3e\x5f\xc5\x1f\xc2\x89\x0a\xf6\x4d\xfc\xa9"
- "\x58\x05\xfc\xe1\x83\x69\x46\x61\xef\x11\xf0\x13\x9d\xa3\x77\xda"
- "\x9f\x3d\xac\x3c\x13\xe3\xf0\x6d\x4a\x33\x3a\x76\x09\xff\x7b\xa7"
- "\x70\x76\x8a\xf8\x34\x84\x2b\x31\x32\x8e\x66\xc5\x4a\x6d\x8e\xb4"
- "\xfc\x63\xaf\x61\x81\x2f\x23\x71\x4c\xc2\xf3\x65\x81\x63\xc4\x1f"
- "\x50\x9f\xf4\x9a\x9f\x3f\xec\x21\xd4\xb7\xa6\xbc\xad\x9c\x53\x1b"
- "\x8d\x11\x78\x70\x66\x2c\x3c\xa0\xb9\x7d\x68\xed\xfa\x87\x1e\xa1"
- "\x85\x9e\x93\x95\xf7\x50\x36\x7c\x5b\x80\x0e\x08\xc7\x19\x73\x32"
- "\x6d\x1b\x72\xb3\x1e\x9a\xc4\xc6\xca\x15\xfa\x18\x39\xff\x71\x0a"
- "\xe1\x6b\x5f\x5f\x5a\x34\xee\x58\xc8\x3b\x15\x4f\x6f\xed\xcb\x25"
- "\x59\x64\xc4\xbc\x3f\xfd\x73\xb7\x35\x99\x78\xba\x64\xe1\x3b\x0e"
- "\x30\x93\x76\x02\x4f\xbf\x01\x38\xf4\xe9\x75\xb4\x9f\x54\xe6\x69"
- "\x38\x40\xcf\x45\x34\xa6\xec\xb0\x8d\xc6\xd3\x0d\x7d\xfa\xe8\xe3"
- "\xa0\x3f\xd2\x1e\xa4\x87\xe8\x80\x65\x5f\x07\xab\x14\xb6\x60\xb5"
- "\x62\x3f\xaa\x6c\xd0\xca\x94\x87\xee\x39\x3f\x3d\x5d\xc3\x93\x88"
- "\x32\xbf\x44\x9a\xf0\x75\xe4\xac\x68\xc3\x9c\x73\x39\xf7\x06\x2d"
- "\x1f\xc1\x95\xef\x13\x74\xe4\x69\xe3\x68\xda\xf0\x5e\x1c\xce\xc4"
- "\x65\x7f\x04\xfe\x99\xe2\x53\x85\xdf\x14\xe2\xf5\x3a\xd8\xd3\x97"
- "\xaa\xf6\x29\x42\xa7\xe8\xce\xa7\xba\xfc\xb2\x2e\x6a\x6b\x40\x6b"
- "\x8b\xc7\xc6\xa7\xee\x13\x78\xf6\x74\x76\x58\x67\xf8\x74\x02\x64"
- "\x65\xde\x97\x36\xc1\xc3\x2a\x57\x0a\xdc\xa2\xe7\xbc\xcb\xa5\x0f"
- "\x37\xe0\x1b\xc6\x09\xbc\x0a\xe3\xd4\xd3\x07\xb4\xf9\xc6\x98\xa9"
- "\xdc\x2a\x9b\xf0\xf3\xfb\xb4\x4b\x83\xe5\x78\xbe\x66\xc4\xba\x35"
- "\x51\x5f\x06\xe5\xda\x15\x72\x9e\xf4\x2f\x84\x7b\x2e\x51\xd4\xc7"
- "\xfc\x2e\xf6\xcc\x27\xb0\xdd\xb7\xf8\x21\x37\xc5\x8b\x78\x70\x72"
- "\x2f\x7b\xc6\x46\x38\x9c\x10\xbe\x9b\xfe\x0c\xf1\x7f\x95\x09\x72"
- "\xee\x9e\x59\x1c\xb1\xf6\xbc\xaa\x3d\xc0\x44\xc0\x08\xf4\xcc\x9d"
- "\x7f\xa7\x58\xaf\xf2\xde\xef\x33\xd9\x5a\x39\xe1\x67\x80\x70\x03"
- "\x76\xb0\x67\xd8\x33\x25\xd8\x23\xd0\x3f\x0f\x7b\xc6\x88\xf6\x31"
- "\x3e\xec\xd9\x02\x6f\xac\x88\x81\xf2\xcc\xfe\x51\x7d\x68\xd0\xea"
- "\x52\xeb\x6e\xd2\xde\xe1\x77\xcc\xc3\xaa\x52\x11\x07\xf2\x88\x4f"
- "\x8c\xe1\x92\x26\x92\x0a\x9a\x7c\x22\x5f\xaf\x06\x43\x4a\x2f\xa2"
- "\x77\x9a\x8b\x52\x26\xcf\x84\x12\xd4\x78\x53\x55\x88\x61\xca\x1d"
- "\x36\xf8\x25\x5c\x2c\xe9\x8d\xf0\xa5\x23\xbe\xc5\xa8\x6b\x36\x06"
- "\x77\x84\x84\x5d\x8c\x2f\x20\x68\x83\xf4\xbd\x40\xdf\x69\x8d\x0c"
- "\x22\xa6\xcb\x70\x76\x8c\xec\xdb\xb3\x19\xa1\x36\x10\x9f\x52\x9c"
- "\x41\x3e\x9b\x2a\x7d\x99\x4c\x24\x59\xef\xd9\x22\x6d\xfe\x8a\x77"
- "\x52\x1a\xe2\xa7\xea\x99\xb1\x49\xf8\x0a\x7b\xb6\x46\xeb\xaf\xfa"
- "\x4d\x2f\xf0\x41\xc0\xe0\xd9\xd0\xfa\xef\x13\xb1\x3e\x9f\x6d\xd6"
- "\xda\x11\x79\x29\x1f\xf2\x37\xcd\x16\xdf\x3a\x43\xf5\x48\x1f\x2a"
- "\x46\x11\xef\xb9\x0e\xdf\xaa\x58\x98\x56\x3d\x23\xfc\x15\x0b\xbb"
- "\x35\x1a\x87\xf7\xb1\xec\x18\x31\x07\x36\x86\xf8\x20\x88\x23\xac"
- "\x97\xb8\x58\xb5\x40\x2b\x13\xa5\x03\x1c\xab\x96\x68\x6d\x6b\x75"
- "\xa0\xff\x17\xa4\x79\x72\x2c\x06\xac\x11\x35\x66\xa7\xa0\x17\x92"
- "\xd7\xaa\x3a\x2a\x70\x50\x8c\xb3\xaa\x2e\x72\xae\x25\x2f\x57\xd5"
- "\x10\x81\x0f\xe8\x4f\x68\xfe\x69\xee\x7d\x72\x2f\xa9\x6a\x8f\xe8"
- "\x63\x0a\xbd\x77\x87\xe6\xa1\x5c\xcc\x11\x62\x40\x8d\x19\xef\x51"
- "\xac\x15\xca\xa3\x70\xd1\x4f\xcc\x07\xc9\x62\x0b\x59\x13\x78\x42"
- "\x5a\x2b\x04\x13\xea\xe3\x73\x8f\x02\xaf\x06\x9d\xcf\xa5\x8c\xc4"
- "\xcd\xe7\x52\x23\xfa\xab\x03\x5d\xa7\xb4\x4c\x2d\x8f\x87\x3d\x27"
- "\xee\x32\x69\xf0\xa4\x6f\x45\xa1\x79\xbc\x51\xe4\xad\xd4\xfa\xf9"
- "\x2d\x7b\x86\x0a\xab\xe7\x3e\x54\xdb\x68\xd6\xda\xa0\x67\x92\x7f"
- "\xaa\x56\x8d\xae\xe3\xc1\xcd\x79\x59\xd2\xb9\x11\x36\xf9\xd5\x0f"
- "\x3d\x92\x95\x39\xd7\xb6\xfa\x61\xb8\x41\xca\x5d\x9b\x95\x65\x17"
- "\x87\x38\x23\xf9\xc0\x04\xd1\x1e\xc1\x41\xfa\x9c\x7e\xfe\x07\xcf"
- "\x4a\xfb\x15\xac\x0b\xac\x77\x2f\xd6\xfb\x91\x82\x73\x42\xb6\x71"
- "\x17\xdd\xc8\xdc\x7e\x5e\x04\xfe\x5f\xd0\x3e\x8c\xdf\xea\x93\xfb"
- "\x00\xcd\x27\xf6\xc8\x41\xe7\x4e\xfb\x48\x78\xed\x2c\x1a\xb9\x96"
- "\x77\x56\x8e\x4d\x27\x76\xde\x20\xe8\x44\xa9\xc4\x0b\xd0\x27\xd8"
- "\xfe\xa3\x5e\x2a\xd3\x34\xaa\xce\x63\x61\x1a\xb5\xd3\xa3\xd1\x28"
- "\xb9\x4f\x3c\x6f\xa0\x3d\xa8\x52\x6d\x2b\x10\xc6\x9b\xe7\x0b\x24"
- "\xde\x3c\x4f\xf2\xdf\xcb\xc5\x9a\xac\x23\xf7\x8e\xe7\x3c\xe0\x1f"
- "\x65\x7c\xed\xe7\x93\xb5\xfa\xaa\xe2\xb1\x6f\x3c\x9f\xf2\x4d\xfe"
- "\x61\x67\x2f\xf8\x07\xd8\x25\x02\x16\x22\x9e\xb0\x58\x37\xcf\xaf"
- "\x8d\xa0\x3f\x71\xf4\x5e\x30\xd6\x5c\x3f\x88\xed\x78\x1e\x8e\xdb"
- "\xe6\x3d\xb4\x2e\xef\x56\xb8\xa8\xca\xca\xb7\x67\x3d\x94\x97\x95"
- "\x39\xfa\x9c\x2d\x49\xe3\xc5\x70\xc6\x5d\x45\xeb\xde\x1b\x0b\x78"
- "\x3c\x4f\xe3\xdf\x15\xd0\xc6\x20\xe8\x14\xf1\x8e\x2a\x8d\x33\x75"
- "\xb1\x5d\x1f\xca\x58\xe2\xcf\x07\x34\x3c\x41\xbe\x3b\xf2\xb9\x32"
- "\xe8\xac\xa6\xf1\xef\x34\xaa\xf2\x16\xc9\xb4\xd5\x36\xed\x3d\x5c"
- "\xbe\x3a\x4b\xec\x7d\x3b\x85\x4d\x1f\xc1\xb4\xba\x33\x82\xdf\xc2"
- "\xfb\x61\xf5\x5d\xf8\x61\x92\x71\xd1\xab\x37\x4b\xf8\x56\xd3\xfc"
- "\x3f\xa7\xd2\x8a\x5d\xcd\xb2\x1e\xc6\x5e\x2a\xf4\x46\xef\x13\xfa"
- "\xfd\xea\x4a\xad\x3d\x2a\x7f\x3c\xb2\x4d\xec\x5b\xa3\xeb\xf3\xb0"
- "\x6a\x71\x3f\x64\xbb\xf0\x21\x57\xdd\x32\x46\x5f\x53\x23\xf3\x51"
- "\x1e\x92\x7f\x9f\xab\xd1\xc6\xfc\xc3\x7c\xa4\xed\x32\x5c\x60\x8c"
- "\xbd\x72\x8c\xbb\x8a\x80\x5b\x68\x1f\xf8\xaf\xf6\x21\x53\xf5\x4b"
- "\xe2\x41\xfc\x46\xf4\x5f\xf8\x47\xb3\x62\x5d\xef\x22\xf9\xf7\xe9"
- "\x16\x6d\x1c\x18\x63\x43\xa1\xd7\xa0\xf9\xa5\x92\xe5\x77\xdd\x3a"
- "\xb2\x6f\xbb\x4a\x23\xca\x74\xbb\xae\x84\xee\x7e\xd7\x1c\xee\x7c"
- "\xbe\x04\x78\x08\x7f\x55\x55\x21\x3c\xdc\xd5\xf8\x4d\xbc\xdb\x35"
- "\x1b\x78\x17\x89\x4b\x6b\x6e\x7c\x88\x30\x29\x37\x2b\x6f\x91\xe0"
- "\xee\x89\xb1\x83\xdb\xb3\xd5\x79\x6b\xd6\xaf\xcb\x9d\x6b\xcb\xcd"
- "\x5c\xad\x2e\xfa\x11\x6b\xde\x29\x64\x7f\x9f\xb6\xce\x06\x9d\xbb"
- "\x67\x87\x69\xcb\xee\x30\xfe\xc3\x46\xeb\x4a\xe8\x66\x77\x6f\x96"
- "\xeb\x69\xf7\xb2\x88\xb5\x2b\xca\x63\x8d\xee\x13\x3c\xdb\xee\xc8"
- "\xfd\xdf\x47\x30\x8d\x39\xc3\x76\x5f\xaa\xc2\xd4\x27\x61\xbc\xfb"
- "\x5d\x31\x4e\xe1\x8f\x6b\xd7\x31\x8c\x53\xf8\x7f\x11\xfc\xd9\xee"
- "\x03\xda\x78\xc3\x72\xc3\x6e\x97\xe0\xa3\x54\x7e\xed\xdb\xe4\x7a"
- "\xc9\x9f\xee\x59\xa5\xea\xde\xda\x35\x19\x4f\xe3\xaf\xa9\x2f\x99"
- "\x92\x57\xdd\x73\xe9\xf2\x02\x3e\x9c\x9e\x0f\x3f\x75\x98\x83\x3d"
- "\xb7\x6b\xbc\xa5\xb0\xdf\x2b\x8b\x4f\x1b\x74\xee\x59\x18\x49\x27"
- "\x78\xd4\x23\xed\x2a\x8f\x98\x26\x65\xd7\x4b\xfe\xd0\x41\x6d\xe1"
- "\xec\xe1\x02\x7d\xa3\x71\xed\x21\xfa\xf7\x6a\x03\xea\x01\x7f\xcd"
- "\xfb\xac\x6a\xac\xca\x1a\x71\x86\x57\x4b\x75\x7b\x69\x6e\x29\x1f"
- "\xf1\x7f\xbb\x05\x6e\x28\x84\xa3\xb0\xdd\xf1\x69\x3c\x12\xdb\xf3"
- "\x19\xf6\x22\x7a\x26\xbc\xad\x49\x92\x38\x55\x93\xe4\xcd\x4d\x62"
- "\x7d\x7d\x56\x7d\x5f\x6e\x9a\x01\xfa\x02\xc0\xc2\x5d\xe3\x67\x12"
- "\x7f\xf6\xf8\x89\xe6\x1d\x88\xac\x4f\xad\x0b\x30\x35\xa0\x1f\x3c"
- "\xd7\xaa\x07\x7e\x03\x5f\x79\x5f\x12\xf1\x09\x7b\x5c\x3c\x37\x49"
- "\x3f\x8e\xef\xad\x0b\x8d\xd3\x84\x78\x8f\x88\x01\x0a\x7a\x25\xfd"
- "\xfb\xef\x7d\xfc\x59\xa9\x1b\x50\xdb\xad\x79\x82\xeb\x5f\x10\xfb"
- "\x4a\xb9\xd8\x57\x38\x93\xfe\xd2\x6b\x0e\x08\x3b\x5a\xfb\x0b\x22"
- "\xe6\xab\x7a\x3f\xdb\xdb\x64\x0f\x88\x58\x75\x8e\x3c\xf0\x69\x01"
- "\x9c\x1b\x89\xfb\xc7\x47\xf2\x02\xec\x87\x7e\xe0\x64\x4d\x3b\x7c"
- "\xc5\xcb\x58\xe0\x35\x9d\x9a\x7f\x78\xc4\x90\x44\xfc\x53\x1a\x57"
- "\x54\x38\x7e\xe9\xde\xc3\xd0\xdb\x4a\x79\xdc\xca\xca\x89\xa7\x97"
- "\x73\xb0\x77\x1e\x62\xf1\x49\x59\xa1\x83\xe6\x25\xea\x2b\xca\x7b"
- "\xa7\xc0\x9f\x10\x9d\xd8\xfb\x16\x6c\xd3\x3d\x6a\x1d\x83\xce\xbd"
- "\xb4\xff\xef\xc9\x96\x6d\x51\x7d\x83\xda\x7c\xee\x9d\xf7\x4d\xfd"
- "\x46\xb8\x3e\x2a\x3f\x57\xe5\x0b\x98\xd4\x7d\xbd\x87\xba\x6a\x34"
- "\xdd\x57\x98\xf7\xd9\x5b\xaf\xe9\xbe\xa4\xef\xe9\x9a\x3c\xb4\x3f"
- "\x9e\x8e\x88\x3b\x7e\x0c\xbc\x37\x82\x87\x1b\x97\x9f\xa0\xfd\x1d"
- "\x7d\xd7\xf8\x42\x39\x3f\xb5\x77\x81\x3f\x44\xcc\x55\x8d\x97\x94"
- "\x3c\x40\xed\x4a\xb9\x97\xd5\x2e\xd4\xf6\x32\x2a\xdb\xa0\xd2\x0a"
- "\x75\x9f\xab\x0d\xc9\xbf\x63\xdb\xe5\xd7\xe6\x69\x30\xd2\x60\x2e"
- "\x61\x54\x7b\xb4\xcf\x3c\xb1\x31\x0c\xdb\xda\xa3\x02\xd6\xa1\xef"
- "\xfb\xa2\x23\x60\x8f\x77\x83\xa4\x9b\xb5\xb4\xff\xd7\x2c\x90\x7b"
- "\x8a\x4c\xe3\xe6\x84\x7f\x88\xb8\xed\x02\x06\x6b\x84\x6e\xc6\xeb"
- "\x48\x42\xdf\xbc\x1e\x5d\xb2\x4d\xd2\xb2\x5a\xca\xbf\xb7\x57\x96"
- "\xab\xad\x46\x5f\x22\xfb\x7b\xef\xba\x47\xd6\xad\xdf\xb4\x0e\x0a"
- "\xb5\x0d\xb9\xb6\x87\xd6\x67\x66\x4d\x1a\x43\x1f\x62\x45\x5c\x6b"
- "\x5f\x55\xc8\xef\xd4\x8b\x46\xd8\xd1\xcb\x98\x05\x2f\xc6\xd8\xae"
- "\x06\x7e\xed\x7b\x14\xba\x02\x11\x3b\x02\x3e\x56\xa5\xde\xa0\x1b"
- "\xe5\x25\xac\x5f\xe8\xef\xdb\x94\xad\xf2\x58\x2f\xbc\x06\x38\xaa"
- "\x32\x07\xa7\x31\x9e\xd2\xf6\x21\xf4\x4f\xf0\xe6\xc3\x49\x82\x2e"
- "\x2a\xc3\xd9\x06\x01\xaf\xe1\x24\xda\x6f\xf6\x35\x7b\x74\xd7\x07"
- "\xe4\xb8\xf6\x1d\xd3\xe0\x81\xf1\x0f\x22\xd6\x26\x5f\x43\x38\xfa"
- "\xa2\x51\xad\x0b\xf4\x13\x75\xd7\x68\x76\xdc\xf0\x25\xea\xda\x08"
- "\x3f\xc2\x75\x9f\x29\x65\xa0\x37\x75\x56\x8d\x2e\x61\x2f\x52\xa8"
- "\x9e\x57\x07\xbc\xd1\xb4\x6e\x6e\xa7\xb2\x89\x1d\xec\x85\x4c\x19"
- "\x6f\xa0\x6e\xc9\xc8\x78\x03\x2f\xd8\xe8\x2f\x53\xfd\x2b\x8e\x78"
- "\xbe\xd0\x9f\x56\x26\x35\x9c\x56\x57\x37\x2a\x4f\x31\xf5\xe9\x50"
- "\x88\x5f\x91\xfe\x4c\x55\xff\xc7\x88\x9d\x51\x77\x0a\x3e\x43\xc3"
- "\xb8\x51\x17\xab\xf2\x20\xdd\x80\x1d\xf6\xdb\x4e\xf6\x82\xf4\x65"
- "\x52\x4e\xb8\xc1\xd3\x10\xd7\xdb\xcb\x07\xd7\x10\x4e\xbc\x60\x08"
- "\xe3\x81\x84\x11\xa5\x59\xc3\x7c\x4a\x5d\x2f\xca\x44\xc2\x81\xda"
- "\xb8\x5d\xca\xa6\x2f\xa4\x68\x7b\x36\xfc\xa5\xca\xf8\x13\x75\x87"
- "\x1a\x0a\xbb\x49\xe6\x7f\x61\x55\x44\x1d\x87\x54\x5d\x84\x81\xeb"
- "\xf7\xc5\xed\x13\x32\xdb\x0b\x05\x61\x9d\x40\xdd\x21\xd0\x5d\x51"
- "\x87\x39\xc1\xeb\xf6\x89\x98\xd1\x3a\x2d\x46\x3c\xe5\x3d\xa0\xf1"
- "\x28\x5a\x5d\x4d\x52\xe7\x24\x7c\x5c\xd2\x1a\xac\xa4\x3c\x2d\x21"
- "\x7d\x2c\xa5\x85\x64\xc0\x7c\x5a\xc7\x82\xf7\x7e\xa1\x37\x2c\xeb"
- "\xed\x13\x7e\x05\x84\x1c\x28\xeb\x31\x7a\xd8\x0b\x9e\xd1\x72\x1b"
- "\xf1\x0f\xb6\x35\xeb\xd6\x10\xfb\xf0\x53\xfb\xfa\x5b\x49\x74\xf8"
- "\xa9\x7d\xcd\xad\x30\xf9\xba\x7b\xc9\x5d\xe2\x97\x16\xc7\xad\x63"
- "\xe8\x8f\xa1\xf7\x16\x71\x99\xa1\x33\x22\x39\x17\xba\xd3\x41\x19"
- "\x2b\x75\xa2\xfa\x6b\x54\x7f\x27\xd0\xbe\x57\x44\x6b\xa5\x0c\xb1"
- "\x6f\x08\xfe\x75\x8a\x53\xc6\x79\x55\xf7\x6c\xa2\xe5\x2f\x3e\xae"
- "\x9d\x97\x09\x1b\x78\xf8\x31\xec\xcb\x16\xfa\xb8\x41\xe7\x8b\x21"
- "\xfd\x87\xd4\x2f\xca\x33\x37\x4a\x6f\xd7\xd2\x35\x7d\x2c\xa5\xf5"
- "\x6a\xba\x57\x99\xf7\xc5\x40\xb8\xec\x08\xdd\x76\x82\x76\x1e\x37"
- "\xe8\x7c\xc9\xa6\xc1\x4c\xab\xc7\x61\xe3\x67\x54\x3e\x29\x4a\xf0"
- "\xd5\xce\x17\x13\x84\xef\x50\xf0\xe2\x42\xcf\xfc\xd2\x4a\xad\x1d"
- "\xc8\x08\xe8\xb7\x7a\xf6\x23\xd6\x3d\x7c\x84\x4a\x1f\xa3\x2f\x85"
- "\xe6\x7f\x14\xcc\x93\x6e\xba\x46\xe8\xe5\x93\x72\x89\x3f\xbb\x66"
- "\x94\x1e\x0e\x38\x34\xbf\x8a\xc5\x08\x1d\x93\x94\xd3\xa3\xc1\x23"
- "\xd0\x18\x5e\xa0\xf9\x8c\x02\x2d\x97\xfb\xde\x4b\xc7\x43\x7b\xbc"
- "\x29\x81\xf0\x6a\x62\x03\xfc\xcc\xcb\x7b\x0b\x2f\x9d\x07\xbe\x79"
- "\x2f\x7b\x64\x90\xc3\x46\xf9\xf9\x7f\x1f\x94\x7a\xf8\xfd\x37\x87"
- "\x75\x66\x2f\x95\xa8\x3e\x51\x61\xff\x46\xf3\xb5\x7f\x6e\x88\xe7"
- "\xa4\xfc\x82\xf7\xa2\x3a\x71\x47\x01\xed\x5f\xc4\x39\x0f\xc9\xfd"
- "\x8b\x4a\xe4\x3a\xdd\xef\x12\x75\x10\xad\x96\xf7\x00\xf6\x13\xff"
- "\xff\x52\x8d\xdc\x1b\x50\x77\x1a\xeb\x33\x2f\xb2\xf7\x39\x3f\x9a"
- "\x0b\x18\xfa\xcc\x2b\xea\xa5\x0f\xe2\xfd\xef\xfa\x9c\x06\x9a\xd3"
- "\xfd\x34\xff\xbf\xfd\x86\xac\xab\xb5\x35\xbc\x91\x37\x05\x06\x78"
- "\x63\xf9\x17\x44\xe7\x1e\x66\x2c\xb0\x91\xd7\x0f\x0f\xf0\x06\x11"
- "\x83\xfc\x41\xc6\xca\xfe\xca\x58\x30\xea\xdf\x4f\x0d\x11\xae\xde"
- "\xd3\xaf\x9c\x41\xbc\xc0\x7d\x94\xef\x1e\xdf\x59\x5e\x4b\x65\xee"
- "\xb1\xf3\x33\xb5\x94\xef\xee\xd3\x67\xf8\x5e\xca\x7b\x77\x36\xe1"
- "\xca\x46\x1e\x08\x46\x3d\x72\xca\xf6\x23\xd0\xee\x5f\x2e\xf1\x96"
- "\x99\x9b\xb8\x53\x5f\xc1\xb7\x5f\x77\xed\xa0\xf3\x97\xa9\xa1\x38"
- "\x65\x54\x2f\xf0\x6a\x79\x3e\x9e\x1f\x39\x45\x78\x70\x2a\x9d\xf8"
- "\x0e\xc2\xdb\x53\x94\x0f\xe7\x3f\xe2\x6e\x96\x37\xea\xda\x78\xfa"
- "\x4b\x1a\xb3\xff\x03\xbc\x29\xb8\x91\x37\x56\x3c\x40\xfd\xef\xa1"
- "\xfe\x0f\xf0\x7a\x1a\x43\x43\x79\x17\x63\xe8\x7f\x10\x75\x06\x59"
- "\x54\xfa\x66\xdd\xe4\x7d\xf4\x3d\x3d\x3f\x8e\xed\xa3\xbc\x0f\xf8"
- "\xd8\xe4\x5a\xca\xf3\xc0\xcf\x27\x33\xd1\xff\x5e\xea\x77\xac\xb9"
- "\x29\x48\x6d\xa3\xff\xd4\xbe\x5f\xeb\xa7\xd6\x3e\xfa\xab\xad\xdb"
- "\x74\xe8\x08\xcd\x13\x45\xbf\xe5\xb9\xc7\xaf\x56\x7b\x73\x69\x9e"
- "\xa3\xae\xbb\x56\xca\xd8\xbf\x5a\xa8\xf5\x7f\xe4\x39\xd8\xaf\x8a"
- "\x24\xfd\xfc\x15\xc9\x3f\xfb\xd5\x98\x2e\x32\x0d\xe3\xf7\xd2\xba"
- "\x55\xef\xfe\x9d\xd2\x60\x46\xdf\xe7\x8e\x3e\xe7\x4a\x5d\x9f\x23"
- "\x74\xd4\xab\x1f\xca\x5b\xb3\x71\x35\x49\xbe\x93\x98\x1d\x49\x42"
- "\x36\xce\xca\xb4\xad\x5f\x67\x7b\x78\xf5\x9a\xb5\xeb\x37\x66\xe5"
- "\xcc\x15\xea\x8c\xdc\xac\x75\x99\x50\x5d\xe7\xac\xce\xb1\x4f\x1a"
- "\x25\xcf\x94\x9a\x9b\x5a\x11\x83\xa6\x10\xf8\x7d\xf0\x43\x55\x6f"
- "\xeb\xe7\xce\x14\x21\x17\x4b\x1a\xf3\xeb\x9b\x6d\x5b\x52\xf0\xfd"
- "\x2d\xb9\x8f\x1f\x6c\xe6\xe5\x13\x83\x9c\x8b\xd8\xda\xba\x33\xec"
- "\xe0\x1b\x02\x1e\x7d\x4b\xb5\x7a\x84\xec\x0a\x9c\xb5\x6f\x01\x1f"
- "\xf6\xeb\x55\x1c\xdf\x47\xc0\xe2\x60\x99\xe4\x45\x28\x7d\x78\x29"
- "\x0b\xdb\xdb\x1f\xfc\x90\xeb\x69\xec\x04\x4b\x55\x66\x28\x51\xef"
- "\x3d\xfe\x67\x07\x3b\x08\x59\x0a\xe7\x36\x6d\x82\x27\x17\xf7\xb3"
- "\x0e\xae\x21\x99\xa3\x84\x3b\x27\x98\x00\xaf\x72\x29\xd3\xeb\x2d"
- "\x3a\xc4\xce\xed\xc0\x5d\xd1\x64\x9c\xef\xee\x73\x2a\xc9\x61\xfb"
- "\xa6\x5f\x95\x42\xbe\x10\xe7\x1c\x82\x26\xfd\xba\x5b\x5b\xbb\x7a"
- "\xdc\xbf\xd9\x3e\x75\x91\x5c\x7f\xbf\x3e\x8d\xfc\x34\xff\x8b\xe4"
- "\xf8\x44\x1c\x70\xe2\x0d\x0e\x46\xd3\xf8\x15\xee\x58\xaa\x9e\x49"
- "\x1e\x8c\x56\xcc\x3f\xaa\x0f\xe6\x92\x5c\x60\xba\x2f\x99\x97\x1b"
- "\x13\x95\x72\xe3\x84\x20\xf1\x54\x0a\xc9\x09\xbc\xfc\xbe\x9b\x82"
- "\xe5\x46\xa6\x6c\x4a\xd2\x63\x6f\x75\xe4\x13\x7c\xd7\x67\x4f\xe2"
- "\x67\xb3\x2f\x09\x6e\x4a\x82\x9d\xaa\x91\x73\x2a\x6b\x36\x5a\x45"
- "\xbc\xe2\x72\xe3\x24\xf5\x7d\x2a\xde\x15\xe2\x93\x29\xcd\x46\xef"
- "\x57\x2a\x3c\x22\xff\xc8\xbc\xb3\xf1\x6e\xd1\x09\xbb\xca\x64\x92"
- "\x4b\x16\x63\xec\xda\x98\x85\x7c\x06\x1d\x51\x68\x6c\x07\x99\x96"
- "\x0e\xb9\x41\xf2\xf0\xec\x21\x82\xb1\xf4\x65\x11\xca\x77\xe0\x73"
- "\x0d\x06\x32\x3e\xf7\x44\xc2\xd9\x83\xcd\x0a\x62\xa3\x6f\x9f\x76"
- "\x2d\xd7\xff\x6a\x1f\x68\xd6\xf2\xa0\xa0\x85\x4c\x9e\x3b\x1d\x5c"
- "\xa8\xc1\x13\xf7\x08\x40\x4b\x69\xde\x92\xd2\xbd\x6c\x92\xa4\x03"
- "\x07\xd3\x22\xe4\xc3\x5e\xcc\xb5\x87\x1d\x50\xfd\x6c\x19\xb7\xcb"
- "\xf7\x5f\x1f\x90\x6b\xe5\x60\xb1\x96\x97\xd2\xa4\xbf\x9f\x52\xe3"
- "\xf1\x4d\x01\x36\xd5\xfe\x3d\xde\x45\x73\x94\xa6\xe6\x3b\x14\x5e"
- "\x53\x12\xdf\xe8\x77\x21\xe4\x6b\x9c\x3f\xe2\xb9\x76\x9c\xbb\xb0"
- "\x85\x35\x9c\x63\xbf\xc2\xfe\x69\x9b\xca\x58\xab\x0f\xb2\xd5\x6f"
- "\x8c\x47\x6a\x7c\x4c\xcc\xb3\x79\x62\xb0\x8f\x67\x23\x1e\xe8\x98"
- "\xb2\x04\xca\x50\xfe\x25\x42\x4e\xa2\x75\xa1\xd0\xba\xa0\x32\x0a"
- "\xf0\xba\xb0\x1f\xf2\xcb\x6f\x8a\x9b\x0a\xba\xe1\xab\x9f\xf0\xf5"
- "\x37\xc5\x80\x21\xd6\x41\xb9\x53\xdc\x83\x14\xfb\xa4\x6b\xe3\x02"
- "\xd4\xf1\x73\xb3\x9f\x19\x5a\x69\x87\xa0\x79\xf1\xdb\x0b\xd9\xe4"
- "\x1e\xca\x6f\xc8\x63\x46\xc8\xb0\x23\xf7\x90\xb1\xf7\x8f\x3e\x53"
- "\x7c\x63\x5f\x79\x3c\xf1\x3b\xbf\x39\x4c\xb4\x7f\x5c\xff\x89\xdb"
- "\x13\x89\xaf\xa1\x7c\x95\x53\x71\x56\xfd\x9b\xee\x0b\xe5\xd5\xee"
- "\xe6\x02\x57\xe6\x5b\xa1\x4f\x89\x6f\x14\x67\xde\xe6\xf8\x4a\xa9"
- "\xb7\xfc\x6d\x92\x56\x1e\x7a\x4f\xd8\x15\x54\x0c\x31\x6b\x45\x48"
- "\x56\xfc\x6d\xaa\x9c\xa3\xdf\xa6\x6a\xf2\xc5\x58\xed\xe4\xed\xe7"
- "\x8a\x63\x0e\xd3\xbb\x6d\x5e\x76\xbd\x9f\x99\x6a\x77\x33\x56\xb9"
- "\x85\xfb\x9f\xdd\x42\x78\x44\x30\xe6\xfa\xdf\x34\xc3\xfe\x62\x1f"
- "\xed\xd1\xe5\x0a\x63\x51\xd4\x97\x67\x07\xa8\xcd\x42\x99\x8f\x4b"
- "\xbf\x6a\x56\xca\xe7\xa3\xdf\x04\xa2\x23\xac\xaa\x90\x19\xab\x14"
- "\x66\xa8\x2c\x64\xd3\x29\x8d\xf8\x8a\xdf\x1e\xd3\x64\x81\x31\xcf"
- "\x85\x6b\x89\x3e\x52\xbb\xdb\x0a\x79\xe0\x3d\x92\xef\x9c\x0a\xf7"
- "\xff\x33\x70\xf7\xb0\x43\x0b\xe4\x18\x0f\x2d\xd0\x64\x03\x7a\x4e"
- "\x19\x79\xc7\xfa\x50\xd2\xe8\x33\xe6\x07\xd7\xaf\xcf\x4b\xcf\xc9"
- "\xc2\x4f\xd2\x9c\x0d\xd7\x8c\xe6\x15\x4d\x32\x1e\xd5\xa1\x34\xac"
- "\x2d\xf0\x4f\xf2\xae\xd2\xa1\xea\x08\x7d\x0f\x74\xce\xb7\x81\xef"
- "\x83\xad\x09\x7d\x6b\x78\x57\x5c\x1d\x60\xba\x13\x46\xa6\x1f\xdd"
- "\xde\xc3\xab\xf3\x56\xaf\x5d\x24\xcd\x1a\xc6\x68\xa7\x79\x64\x3b"
- "\x2f\x87\xce\x7f\x55\xd9\xdc\x27\xe8\x63\xd9\x7d\x36\x1e\x7b\x8b"
- "\x4b\xee\x75\x2f\xcf\xd6\x6c\x07\xc7\xf6\xe9\x62\xcc\x0b\x96\x27"
- "\xa6\x60\x8d\x38\xb6\x32\xfd\xeb\x5b\xda\xf5\x90\x4b\x0a\xe9\x19"
- "\xb6\x5c\x42\xff\xad\xc6\x8a\x7c\xfb\x5c\x3b\xed\xa5\x2f\xe7\xf3"
- "\x32\x23\xc9\xc0\x2f\xdb\xc7\xb3\xdf\x8a\xbc\x0f\x2f\xcf\xee\x5f"
- "\xae\xbc\x80\xad\x97\xc8\xaf\xd9\x69\x8c\x2c\xf7\x4a\xb4\x9c\xb3"
- "\x97\x09\xff\x7f\x53\xa7\xe1\xaf\x96\xa7\x22\x51\x8b\xc1\xf9\xf2"
- "\xb8\x7e\x90\x79\x69\xbc\x4b\xe2\xf8\x2b\x77\x8a\x33\xea\xa9\xec"
- "\x17\x1d\xec\x95\xdb\x0d\x56\x66\xa5\xe7\x5f\xd3\xb3\xd0\x61\xe0"
- "\xdb\x08\x3c\x9a\xd1\x5b\x67\x20\x8a\x43\x94\x47\xc7\xe5\x3f\x62"
- "\xfc\xe4\xbf\x28\xfa\xd3\x73\x9d\xb8\xb5\x12\x45\x33\x38\x71\x82"
- "\x81\x59\xcc\x26\xe3\xcc\x2b\xa6\x5b\x6f\xfb\xde\xe2\x85\x8e\xc2"
- "\x82\x7c\xae\x04\xfc\x16\x1e\x11\x37\xb5\xf4\x96\xec\x7b\xaf\x29"
- "\x92\xfc\x43\xd9\x2d\xd9\x63\xf5\xb5\xcc\xc9\xed\x90\x69\x15\xf3"
- "\x8a\x4a\xc7\x06\xa6\x7f\x75\xc8\xa3\x87\x0c\x05\x1e\xc6\x1d\xf8"
- "\x92\x64\xf1\x57\x3e\x79\x87\xd2\x08\x5e\xf9\xbc\x74\x45\xa5\xbc"
- "\x93\xf4\xea\x64\xa5\x7c\x45\x65\xb8\x7e\x03\x43\xfd\x24\xa7\xeb"
- "\xf7\x17\x76\xeb\xdd\x86\xef\x31\xb7\xcd\xc7\xde\xa1\xe7\x31\xe7"
- "\x8a\xda\x84\x4e\x18\x75\xd0\x1e\x5c\xe2\x38\x4f\x7b\x73\xbe\x38"
- "\x9f\xd1\x9f\x61\xaf\xde\x55\x3f\x4e\x39\x71\xc6\x6a\x36\x6f\x1c"
- "\x74\xbe\x4a\xf4\xff\xc1\xd9\xaa\x1c\x42\x72\xd2\xab\x55\xda\x7e"
- "\x40\xdf\x37\xc8\x73\xa2\x57\x0f\x68\x79\xc6\x9c\xa3\x27\x61\xeb"
- "\xcc\x5d\xc0\x03\x3e\xd0\xdd\x0d\xdf\x8b\xe3\xe0\xca\x12\xe2\x51"
- "\xca\x40\x9b\x63\xb7\xc5\x4d\x30\x6f\x4b\x7e\xb4\x85\x78\xa3\xd8"
- "\xde\x4b\x99\xd9\x77\x3f\xfa\x0c\x7b\xfb\xb6\xbd\x24\x73\xe2\x7c"
- "\xd8\xa2\x4b\x5e\x63\xd9\x96\xbc\x3a\xe8\x5c\x7c\x13\x78\x28\x4b"
- "\xfe\x5d\x3a\x4b\xe0\x76\x5d\xc0\xb9\xe0\xa6\x7d\x32\x56\x91\xaf"
- "\x32\x91\xb7\x53\x99\xe3\x54\xc6\x43\x7f\x9d\x54\xae\xa5\x8b\xd5"
- "\xaf\xa1\xdf\x66\x8b\x8e\xef\xb3\xd0\x4c\xce\x2f\x12\xb1\x5b\xb1"
- "\x3f\xb7\x70\x33\xc9\x76\xc3\x42\x07\x17\x1d\xd6\xc1\xd5\x97\xd2"
- "\xbc\x4d\x58\xf6\x38\x7f\x87\xea\x6a\x0e\x0e\x28\xcd\xb5\x67\x40"
- "\x0f\x85\x5c\x75\x8c\x68\xc0\xb1\xb9\x55\xcc\xaa\xda\x4c\xeb\x5b"
- "\x02\xcd\xd8\x87\xe1\x73\xa0\x89\xda\x3c\x4c\x7f\x8d\xb6\x75\x2c"
- "\xea\x0c\xab\xff\x52\xb3\xb9\x92\x7c\xdd\xef\xee\x55\xf5\x00\xae"
- "\xeb\xa9\xfc\xd6\x47\x81\x13\xdd\xfa\x00\xd5\x4f\xb2\x76\xb3\x3b"
- "\xbb\x59\xd8\xb0\xe1\x4e\x02\xf2\x50\x1b\x49\x6e\x7f\x33\x53\xb8"
- "\x55\x4f\xef\x8d\xb8\x5f\xc0\x29\x6f\x6b\x7e\x3b\x6b\xb5\xfb\x69"
- "\xdf\x6c\x21\xd9\x33\x69\x36\xf5\x47\xd4\x47\xdf\x8f\xbd\x4a\xf3"
- "\x6b\x23\x99\x81\xea\x13\x31\xed\x71\x77\x9f\xe7\x26\x5d\x4d\xe5"
- "\x9b\xf8\xb0\x55\x8f\xfa\xcf\xb0\xd7\x4e\xf2\xbe\xa4\xa4\xf9\xbd"
- "\x32\x96\x69\x07\x7b\xed\x30\xf5\xb3\x3c\xa2\x9f\x77\x52\xff\x0d"
- "\xb4\x57\xba\xa8\xce\xc3\x7c\x23\xb5\xd9\x49\x6d\xfa\xbc\xb0\xff"
- "\x9c\xcd\x37\x59\x0d\xe8\x73\x2b\xfa\x9b\x1f\x64\x7c\x53\x92\xa1"
- "\xe2\x1c\x33\xd0\x5a\x70\xed\xa3\x5f\x1a\x7f\x03\xf1\xf5\xd3\x07"
- "\x9d\xaf\x85\xfc\x3f\x80\x8f\xa4\x77\x8f\x86\x4b\x65\x94\x87\xfa"
- "\xd8\x48\xfd\x3a\x1c\xdb\xcb\xa0\x5b\x88\x26\x3c\x8d\xa6\x76\x27"
- "\xd2\x5c\x35\x12\xec\xde\x25\x58\x1f\xc6\x98\x94\x01\xa5\x5b\xa1"
- "\xfa\x2a\x06\xa8\x4f\xb9\x56\x83\xa9\x13\x71\xde\x07\x39\xc1\xfb"
- "\xd8\xf2\xfc\x41\x0e\x7b\x71\xd8\x5e\x53\x99\xbd\x34\x56\x83\x87"
- "\xfd\xae\x00\x72\x7e\x17\x7b\xad\x58\xc6\x62\x7d\xad\x44\x3d\x4b"
- "\x3e\x26\xf5\xbb\xf5\x5f\x02\xf6\x18\x97\x69\x5b\xdc\x0e\x77\xb7"
- "\x97\x99\x3a\x2f\x25\x9e\xe5\x35\x56\xa3\x80\x3f\xfd\x5d\x89\xd6"
- "\xcf\x71\xd6\x98\xdf\x4d\xf4\x45\x19\xe0\xdd\x90\x5f\xa4\x9d\xd9"
- "\xef\x0e\xa7\xe7\x47\xa5\x90\xac\xa2\xa7\x7e\xe2\x1e\x53\x22\xf1"
- "\x68\xb7\xc1\x0e\x91\xfa\x47\x7b\xf6\xef\x8e\x5f\x28\x06\x32\xc1"
- "\x87\xf8\x82\xd7\xa9\x0f\xbf\x13\xfa\x54\xc4\x88\x95\x3a\xd6\xd7"
- "\x13\x34\x3f\x1c\x7c\x80\x17\x60\xef\xa5\x76\x8b\x8a\x37\x8a\x36"
- "\x10\x17\xb7\x3b\xcf\xc6\x4f\x34\xd9\xbc\xe3\xfa\x3a\x88\xb0\x9f"
- "\xf3\xaa\xb1\xf6\x84\x2d\xc1\x48\xfb\xb9\xd7\x0b\x22\xf4\x35\xb0"
- "\x27\x28\x82\xcd\x84\xf4\x97\xf4\xba\xb0\x09\x5c\x9e\x2f\xfd\xc2"
- "\xb8\xfd\xbd\xaa\xdc\xf1\xfa\x87\x22\xfe\x16\x78\x5a\x61\x73\xd7"
- "\xa3\xda\xc9\xbd\xbe\x1a\x6d\x34\x8d\x8a\xf1\x9d\xb5\x6e\xf5\x83"
- "\x6b\xb3\xa4\x0a\x73\xde\xcf\xf2\x56\xff\x74\xa4\x6c\x64\x10\xb2"
- "\xb8\xf3\xf5\x63\xf2\x4c\xa0\xc1\x14\x21\x23\x18\x42\x3a\x5d\x3d"
- "\x6b\x90\x7a\xdd\x86\xb9\x63\xe9\x75\xef\xfa\xe9\xba\xf5\x39\xa2"
- "\x0d\x61\x52\x98\x25\x6f\x05\x4e\x62\xf7\x2e\xb9\x6b\xc9\xbc\xdc"
- "\xac\x3c\x11\x54\x47\x2a\x51\x57\x67\x66\xe6\xa8\x06\x87\x6b\x50"
- "\x0a\x5f\x1e\xde\x24\x8a\xda\x1f\xc9\x93\xa6\x8a\xb9\x6b\x57\x6f"
- "\xcc\x52\xab\x88\xec\xeb\x74\xd0\xcb\xa6\x1a\xa1\xab\x9a\x24\xed"
- "\x23\x1a\x0e\x47\x9c\xa7\x46\xea\x6f\x2e\xa7\x6f\xa1\xf3\x7f\xfb"
- "\x95\xc0\x95\x37\xd6\xb4\xd6\x09\x5f\x26\x86\x23\x2f\x02\xbe\x6f"
- "\xdc\x89\x38\x10\xb4\xb7\x79\x10\xb7\x58\xb5\x3d\x20\x7a\xfd\xc6"
- "\x2c\x92\xb5\x3c\x04\xdf\xfc\xe5\xc4\xe5\x12\x4d\x25\x39\xfd\xcd"
- "\x04\x55\x27\x62\x54\xf4\x0d\x0b\x61\x37\x56\x2b\xf4\x77\x6f\x2c"
- "\x0e\xeb\xef\xde\x84\x4d\x8f\x91\xe6\xbb\x13\x7d\x43\x3f\xe9\xfb"
- "\xaa\x08\x9b\x9d\x4e\x0f\x81\x11\xf5\xc0\xb6\x44\xc4\x68\x21\x9e"
- "\x58\xf5\x07\xa1\x6f\x7d\x11\xfb\xd0\x1f\x8a\x41\x73\x95\xd2\xf8"
- "\x76\xb9\x66\x7e\xbf\x97\x97\x9b\x37\xcd\xf7\xb1\x04\x49\x33\xde"
- "\x80\x2c\x3e\x85\xfa\xd8\x44\xe9\xf9\x44\x77\xa2\xc1\x1b\xc9\x33"
- "\xaa\x37\x4e\xa9\xfa\x3c\xc0\x27\x3a\xa2\x0f\x9e\xb0\xce\xef\xcd"
- "\x04\x6f\x6c\x7c\x7b\xb1\xb4\xc9\x11\xf6\x07\xd2\x06\xe4\xf7\x86"
- "\x90\x8e\x8b\xda\x56\xcf\xdc\x13\xba\x28\x3f\xc1\xa2\x5d\x3d\x07"
- "\xc7\xd8\x53\x31\x6e\x69\x4b\xf9\xfb\x11\xf2\x8f\x8c\x89\x61\xde"
- "\xa4\x48\x7b\x59\xf4\x3d\x4b\xf0\x51\xd0\x2f\x0e\x01\xde\xbf\xdf"
- "\x4c\xdf\x69\xaf\xfb\xbd\xdd\xc3\x5e\x0f\xf5\x07\x7d\xce\xcb\x27"
- "\x66\x80\xca\x61\xef\xa3\x3e\x4d\xa4\x3c\x55\xe1\x3e\xff\x5e\x9c"
- "\x8d\x42\xa6\x94\x3c\xc8\x1f\x8c\x52\xcf\x1b\xdf\x1d\x31\x6f\x86"
- "\x33\xec\xf7\xa7\xa8\xaf\x22\x1e\x96\x36\x7e\x89\xb3\xbf\x1f\x31"
- "\xfe\xb0\x0e\xb6\x61\x9d\xd4\xc1\xfe\x81\x85\xe7\xf0\xf7\x4d\xc0"
- "\x7b\xd8\x0d\x69\x36\x43\x98\x4f\x19\x2f\xe4\x0f\x49\x5a\x3d\x8a"
- "\x39\xbe\x19\x72\x72\xb9\x3c\xff\xa6\x79\xf9\xc3\x9a\x28\xdd\x09"
- "\xc1\x4b\xcd\xf7\xb3\x3a\x4a\x9b\x40\x69\xf7\x23\x1f\xda\x14\xba"
- "\x4a\x82\x0d\xc6\xa2\x90\x8c\x15\x65\x9d\xb0\x9c\xea\x23\xbc\x3a"
- "\x74\x2c\x8c\x1b\x7f\x48\x11\xf4\x52\x85\x35\x77\x36\x6c\x0f\xcb"
- "\xee\x7f\xd8\x1f\xd2\xbb\x51\x3d\xe1\x3d\xe3\x0f\x1f\x02\xc6\x15"
- "\x21\x1d\x44\x63\x40\xf4\x43\x9e\xa7\xbe\xd7\xc5\x1a\x4f\x73\xe2"
- "\x2f\xb0\xd7\x42\x3e\xc4\xdc\x0b\x7e\x4f\xe8\xcf\x1a\x7f\x59\x2b"
- "\xcf\x2c\x76\xd2\xf3\x41\x45\x3f\x16\xee\x34\x4e\x8f\xb4\xef\x95"
- "\xf0\x6f\xcc\x54\x50\x27\x8d\x1f\x75\xd1\xfe\xa3\xd3\xf4\x9a\x6a"
- "\xbd\xf7\x52\x9d\xcf\x77\xa9\xb0\x16\x67\x79\xe5\x2a\x1c\x30\xc7"
- "\x02\xe6\x8d\xc4\xfb\xbe\x2e\x62\xa6\x39\xea\xf8\xe9\xf5\x54\x87"
- "\x8c\xad\xdb\x58\xc5\x01\x5b\x35\xbf\x17\xf2\x37\xf5\x5d\xde\x89"
- "\x24\x5c\x24\xd9\x14\xfd\x54\xca\xe3\xdb\xd0\x77\x9c\xe3\x85\x75"
- "\x2a\x8d\x1f\xa2\xac\xf7\x31\x59\xa6\x42\x9e\x33\xd2\xdc\x34\xea"
- "\xf8\xa6\x6c\xa6\x9e\x6f\x11\x9e\xff\xbe\x0d\x78\x8f\x7a\x7c\x42"
- "\x66\x6e\xf4\x28\x04\x17\x9a\x93\xf8\x41\xe7\x9b\x26\x6d\x4e\x68"
- "\x3e\x9a\x2f\xc0\x6f\xd3\x9c\xbc\xb9\x50\xf3\xad\x84\xbd\x89\xd6"
- "\x70\x91\xe4\x25\xdf\x3c\x6f\xd9\x76\x1b\xb7\x04\x6e\xba\x09\xbc"
- "\xd1\x3e\xbd\xd0\x85\x6a\xf6\xab\x33\x09\x4e\x67\xb5\xbb\x00\xca"
- "\xf6\x7f\x6f\x87\xed\xaf\xdb\x2f\x6d\x7f\x91\x7e\x8f\x8f\x2b\xad"
- "\xbe\x20\xee\xc2\xb4\x53\x1b\x35\x9a\x9c\x05\xfa\x16\xb5\x4d\x47"
- "\xb0\x7b\x13\xf7\x1f\x0f\xab\x74\x6d\x62\x0f\x7b\xf3\x73\xb5\xfe"
- "\xc8\x3e\xac\x94\x67\x8a\x6f\xfa\x25\xef\xff\x26\x68\x4f\x95\x94"
- "\xd7\xde\xf4\x6a\xfd\xa6\xef\x87\x47\x8f\x31\xf5\x8e\xbb\xb2\x6c"
- "\x6b\x41\xa2\x93\x6f\xcc\xb7\x25\xcd\xc9\x9c\x2f\x8c\xc5\x6d\xff"
- "\x72\xc7\x22\x5b\xea\xad\x73\xf2\xb3\xe7\xde\x23\x7f\xee\x48\x5d"
- "\x86\xdf\x51\xb6\x03\xb6\x41\xe7\x1f\x53\x47\xca\x83\xef\xa8\x7d"
- "\xf8\x63\xb6\x47\xf7\x2f\x42\x17\xcd\x4d\xc6\x7a\x5e\x32\xe0\xa5"
- "\x3d\xb5\x17\x7c\xf2\xf2\xe0\xdf\x38\x7f\x62\xc0\xcb\x63\x8d\xf5"
- "\xde\xd8\x5b\xb2\xe9\x2f\xd9\x1b\x6b\xae\xa9\x20\x1a\x68\xd9\xc6"
- "\xfd\x96\xc0\x44\x49\x2b\xe9\x9d\x78\x92\x6e\xe2\x7b\x30\x97\xec"
- "\xce\x6b\x1c\x7c\x79\x90\xbb\x89\xff\x21\xb8\xfc\xb1\x59\xdb\xc7"
- "\x85\x1e\xb3\xd4\x58\xbf\x3c\x9f\x0f\x03\x77\x88\x3f\x20\x79\x8e"
- "\xda\x8c\x82\xde\xf5\x8f\x34\xfe\x57\x93\x25\x2c\xfe\x08\x18\xd8"
- "\x54\xf8\xa6\x0e\x3a\xff\x83\xe6\x7f\xb9\xd0\x3d\x2b\x4e\xab\xd8"
- "\x2b\x94\xed\xd7\xae\x20\x59\x20\x59\xab\x93\xea\x32\x49\x7b\x26"
- "\x59\x1f\x8b\xf0\x4d\x70\xa1\x3f\xa5\x3c\xa6\x09\x7a\x2b\xdc\x0b"
- "\xb6\xe4\xeb\x10\x7f\x2b\x2d\xa4\xab\xa3\x6f\xe6\x6d\x71\xd0\xdf"
- "\xa5\x99\x7d\xba\x22\xe4\x09\xeb\xb4\x14\x4f\x85\x5e\xf1\x13\x3f"
- "\x11\x07\xfc\x10\xbc\xaa\xb0\xa7\xf8\x8f\xc6\xd0\xf9\xdc\x88\xb9"
- "\xff\x0f\x81\x0f\xe7\x9c\x06\xc2\xed\x3f\xa6\x5c\x99\x20\x79\x27"
- "\xc5\xa9\x63\xd2\x57\xc4\x7f\xbc\x2c\xd6\xa5\x8a\x8f\x04\x5f\x2f"
- "\xce\xce\x2d\x01\xee\xc5\x3d\x15\x25\x8a\x70\x92\xf5\x30\x77\xc1"
- "\x60\x11\xee\xab\x87\xf0\xd2\x4e\x78\x69\x27\xbc\x84\x9d\x03\xb5"
- "\xef\x8d\xba\x36\x83\xd6\xac\xae\x87\xfd\x47\x01\xfa\x0f\xd8\x10"
- "\xff\x6e\x52\x08\x56\xc2\x9e\x15\xf0\x31\x5f\xb2\x04\xf7\x0c\x31"
- "\x56\x4b\x80\xc6\x1c\x39\x2e\xbd\xe2\x29\x77\xd2\xb8\xf4\x34\xae"
- "\xfc\xd3\x42\x17\x84\xfb\x9f\x44\x4b\x12\xc3\x31\x5c\x0e\xd7\x44"
- "\x8e\x51\x41\xdc\x27\x31\x86\xc3\x6f\x8d\x35\x46\xae\xc7\x18\x01"
- "\x83\xc3\x4f\xab\xe7\x9c\xa2\x9f\xa0\x5b\xbd\xec\x70\xaa\x79\x5b"
- "\x11\x43\x3f\x89\xef\xbd\x03\x73\x58\xeb\xe4\x95\xe8\xe7\x58\xf3"
- "\x85\xfa\x64\x5d\x6f\xad\xb2\x6c\x2b\xca\x18\x74\xbe\x95\x34\x36"
- "\xbc\xdf\xba\xeb\xc2\xf0\x7e\x6b\x06\xca\xa3\x1f\xb8\x43\x6a\x81"
- "\x83\x31\xc2\x6f\xe2\x2b\x4a\xc6\x6a\xd7\xbc\xad\x0e\xfd\x1a\xf3"
- "\x1b\xe1\x7e\x6f\x45\xce\xc8\x35\xa1\xd4\xfa\x19\xe0\x07\x7d\x91"
- "\xd4\xeb\xbf\xd5\x16\x3a\x7f\x28\x35\xb6\x5b\x74\xb6\x28\xac\x31"
- "\xc1\x13\xd3\x78\xc7\xaa\xd7\xa2\xab\x84\x8f\xc2\x3b\x88\x56\x8d"
- "\xf9\x9d\xd6\x81\x8d\x6f\xbf\xee\x4a\xaa\xaf\xc6\xbc\x4d\xc7\xbd"
- "\x51\xd7\x4d\x32\xfb\x02\xb3\x01\x57\xea\x6b\x3e\xad\xf1\x93\x62"
- "\xef\x16\xba\x92\xb7\x69\xfd\x7f\x2c\xe2\xee\x78\x63\x8d\x6a\x7c"
- "\xae\xb7\x33\x3d\xec\x4f\x11\xb1\x50\xdf\xce\xf3\xe8\xbe\x53\x22"
- "\xd7\xea\xb4\xdd\xb4\xa7\xad\x54\x9c\x16\x6e\xdb\x62\xe1\x54\x57"
- "\xac\xc2\x93\xf4\xb4\x6f\xad\x0c\xe3\x8e\xbc\xa7\xaa\xe1\x0e\x95"
- "\x6f\x18\x1b\x2f\xde\xfe\xec\xc2\x78\xf1\xf6\x41\x55\xcf\x9b\x21"
- "\x6d\x6f\xdf\x0e\x68\x32\x07\xdf\x3e\x6d\xb7\xad\x10\xed\xbf\x5d"
- "\x29\xdb\x26\x98\x04\x52\x40\x67\x96\x11\xdc\x8a\x06\x9d\xef\x24"
- "\x69\xb4\x01\x38\x64\x09\x42\x1e\x62\x02\xcf\xe9\xdb\x12\xa2\x3d"
- "\xea\x19\xa1\x65\x09\x78\x55\xc5\xf9\x47\x03\xed\x5f\x7b\x70\xf7"
- "\xc4\x17\x1b\x43\x72\xd9\x3b\x44\xff\x0c\x4b\x25\xfd\x8b\x49\xe0"
- "\xa5\x31\xd6\x2a\xe9\x87\xc2\x28\x62\x06\xd2\x3a\x47\x9c\x40\xac"
- "\x75\x4a\x4b\xa0\x7e\x23\x66\x20\xc9\x08\xef\xd4\x69\x7b\xbf\xe2"
- "\x4c\x01\xbc\x85\xce\x58\x0f\x7e\x98\x60\xf7\x9c\x5e\x39\x30\x30"
- "\xdf\xca\x30\xe6\x81\xed\x53\x0f\xfc\xe2\x7a\x66\xf8\xc0\xfa\x20"
- "\xb3\xdf\xc8\x12\xb6\xfd\x1f\x03\xfb\xc7\x42\xa6\x07\x1c\x3c\xec"
- "\x9d\x7a\x09\xbb\x77\xbc\xda\xfc\x78\xd8\xdb\xf0\x01\xc0\x70\x2e"
- "\xb3\x3c\xc0\xfb\xe4\xb9\x94\x2b\x8e\xf6\x40\xab\xfc\xfe\xc7\x55"
- "\x63\xec\x0f\x77\xda\xd6\xe4\xda\x32\xd7\x6f\x5a\x37\x6b\xd6\xa4"
- "\x31\x64\x09\xd7\x6c\x29\x4b\xb8\xd2\x22\x65\x09\x7a\xcf\xa6\xfa"
- "\x16\x8e\x96\x1d\x96\xa5\xab\xee\x45\xd2\x93\x59\xf8\xf9\x06\xb6"
- "\xec\x86\x88\xd7\x9b\xd8\xb2\x1b\x6f\x4a\x5f\x91\xb5\x3a\x73\x73"
- "\x44\xea\xcd\x91\x7a\xc4\x8a\xdd\xd4\x76\xd4\xd4\xef\x13\xfd\xd0"
- "\xdd\xf3\x18\xf6\x9d\x77\xef\x2e\x0c\xf0\xaf\x08\x77\x17\xc2\xa7"
- "\xd7\xd1\xbc\x00\x3b\x4a\xf4\x8d\x4f\x03\x5d\x9f\x28\xfd\xda\x06"
- "\x19\xf4\x74\x16\x1a\xbb\x97\x64\xba\x7e\x79\xf7\xe2\xdd\x9f\xb7"
- "\x56\xfb\x89\x4e\x98\xf7\x4b\x7e\xe7\xdd\xb9\x94\x3e\x99\x7e\xef"
- "\x95\x67\x3a\xef\xfe\x98\xe4\xe5\x14\xe1\xc3\x64\x23\x7c\x98\xbc"
- "\x2b\x6c\xc3\xae\xf7\x15\x31\xe9\x4b\xcf\xd5\x09\x1f\xf7\x1e\xf6"
- "\x6e\x15\xf8\x0b\xe4\xa5\x32\xf3\x6c\x3f\x63\xc9\xf8\x05\x3f\x4c"
- "\xdf\xe6\xf2\x32\xf3\x7e\xbe\x27\x0d\x36\x35\xb3\x29\xfd\x69\xf0"
- "\x6d\x51\x56\xa3\x69\xd0\xf9\x6e\xa5\xc6\x83\xf8\xc6\xb9\xfb\x05"
- "\x38\x6b\xfb\xa0\x99\xe8\xb7\xd9\x67\xe1\xe9\xf0\x09\xa4\x63\xb3"
- "\xb1\x3f\x58\xf2\x53\xc5\xdd\x42\xec\x8b\xa0\x09\xb5\x82\x96\xbe"
- "\xdb\xad\xd1\x85\x72\x29\x8f\x4e\x42\x79\xda\x3f\xcf\xca\xfd\xf3"
- "\x3d\xa3\xb6\x16\xe8\x39\x41\xc3\xd5\x11\xf7\xcb\xd6\xe5\x65\xe5"
- "\x64\x65\xda\xe6\xe4\x4e\x62\x11\x11\x58\xb3\xb3\xd6\xd9\x72\xb2"
- "\x7e\xbe\x21\x2b\x57\x08\x7a\xf8\x3a\xf2\xfc\x8d\x68\x50\x38\x1e"
- "\xf6\x54\xc0\xf8\xbd\xcd\x90\x85\x2d\xdb\x66\x89\xb3\x14\x79\x06"
- "\xb6\xe2\x80\x52\x1e\x9b\x22\xf5\x96\x3d\x04\xd7\x23\xd2\x1f\x57"
- "\xa9\xb9\x0a\x7c\x5c\x17\x3b\x52\x26\x6d\x65\xde\x7b\x5f\x85\x55"
- "\x15\xf5\xf3\x70\x98\x5f\x6b\x12\x7e\x87\xa4\xcd\xea\x7b\xc7\x3c"
- "\xcc\xd5\x10\xe6\x41\x9a\x6e\x05\x1d\x14\xf4\xf0\x5b\x68\xa1\xca"
- "\x3b\x53\x3b\x47\xb6\xf1\x8d\xbc\xb3\x62\x88\x09\x7d\x20\x62\x23"
- "\x48\xfa\x7a\x24\x59\x83\x23\xf1\x2f\x9d\xd0\x3b\x68\xf2\xd1\xf2"
- "\xc0\x79\x5e\xb8\x99\xe9\xa1\x7b\x20\x1a\x72\xe0\x95\x1c\xaf\x9e"
- "\x3b\xdf\xb3\x11\x2f\x53\x85\x3c\xb5\xaa\xed\x26\x8f\x35\x57\x52"
- "\x3d\xf9\x61\xb9\xa3\x69\xb1\xe0\xe3\x87\x80\x37\x47\xa6\xa7\x63"
- "\x8f\x90\xb4\xfb\x92\x6f\xeb\x2f\x9f\x24\xcf\x51\x24\x7d\x3b\xd2"
- "\xa8\x8e\xa1\x17\x34\x4b\xb5\xfd\xd5\x4b\xbc\x6e\x5a\x4c\x38\x57"
- "\x85\xb9\x20\x3a\x5f\xa2\xc1\x0b\xe3\x45\xdf\xa1\xb7\x26\x3a\x7c"
- "\xe0\xd5\x2d\x7e\xbd\x8c\x5d\xfa\xde\x5c\x29\x1f\x35\xd9\x22\xcf"
- "\x0d\xa5\x2c\xd4\xb4\x20\xec\x27\xe4\xbd\xaa\xd1\x34\x62\xfd\x3a"
- "\x5c\x27\x7b\x24\x7d\xd3\xea\x47\xb2\xd2\x37\xd8\xe7\xda\x36\xac"
- "\x13\xc7\xb6\x42\x0d\x90\xb7\xe1\xa1\x47\x6c\xa0\x22\xe9\x4b\x96"
- "\x2d\x4b\xff\xfe\xbd\x3f\xfc\xf1\x24\xf6\xfd\xd5\x94\x96\xb7\xde"
- "\xb6\x2c\x79\xae\xfc\xb4\xe2\xce\x3b\x7e\x94\x7e\xc7\xf2\x7b\xef"
- "\x59\x39\x86\x4d\xba\x89\x70\xa2\x92\xe6\x28\xba\x83\x7d\x50\x2a"
- "\x6d\x90\x9a\x9a\x47\xda\x20\x35\x79\xe8\x8f\xa8\xf3\xfb\x56\xc6"
- "\x3e\xa0\xd4\x0f\x4a\xe9\xaf\x48\xe2\x4d\x4c\x1c\xf5\xdf\x17\xc6"
- "\x9b\x0f\xc4\x79\x1b\x74\x07\x52\xf7\xfa\x3e\xd1\xbf\xf7\x96\x45"
- "\x7e\x0b\xd3\x82\xf7\x83\x82\x5e\xaa\x78\x01\x7c\x48\x0f\x18\x05"
- "\x6e\x48\x7e\xe5\xfd\x65\x1a\x6e\x54\xc8\xf3\x21\x06\x9d\x19\xbe"
- "\x13\x7e\x57\x41\xbf\x4c\xb8\x50\x89\xb3\x75\xa4\xf3\xd8\x15\x55"
- "\x6a\xbd\xc5\xd0\x37\x83\x9f\x55\xcf\xc4\xcc\x3d\xec\xfd\x77\xb9"
- "\xb3\x69\xa9\x94\x05\x9b\x36\x0b\xbc\xd9\x3e\xf5\xfb\xe2\x0c\x52"
- "\xdc\x27\x7a\xbf\x31\x8c\x3f\x1f\x94\x62\x6e\x40\x17\x24\xed\x7d"
- "\xff\xd8\x28\x3d\x4e\x14\xa5\x75\x6b\x7e\xe6\xf3\x66\x31\xbd\x61"
- "\x56\x25\xab\xd2\xf3\x22\x0f\x7b\xbf\x5a\xda\xa1\x7e\x60\xd4\xf8"
- "\x67\x7a\x4e\xf0\x30\xde\x3e\x5a\xff\x55\x1e\xa1\xff\x2a\xb4\xf3"
- "\x13\xad\x76\x2f\x78\x64\x97\xdb\x2b\xfc\x9b\xde\xd6\x6a\xf7\xc1"
- "\xb6\x64\x52\x17\xfb\xe0\x7e\x47\x90\x0f\xd1\xf3\x54\x1a\x9b\xd8"
- "\x43\xe6\x4b\x9d\x02\xc9\x63\x1f\x94\x49\xd9\x44\xa6\x03\xee\xf4"
- "\x8c\x3e\x1a\x30\x3f\x84\x97\xdd\x34\x47\xcb\xc7\xa2\x7b\xe6\x6d"
- "\x7a\xd5\x8f\xd4\x07\x27\x20\xa3\x02\x56\xcf\xea\x95\xec\x67\x9d"
- "\xf4\x47\xbf\xa0\x7d\x61\xfe\x92\xfb\x25\x6c\x3f\xf0\x34\xe5\xf7"
- "\x62\xdf\xf4\x8f\x47\x4b\x69\x3e\x8f\x6b\xf3\xb9\x3c\xe8\xbd\x0d"
- "\xf3\x35\xe8\xfc\x4f\xab\x36\x97\x7d\x57\xbf\xee\x89\xda\xc6\x6c"
- "\x47\x6a\x6e\x44\x3a\xad\xff\x0f\xaa\x85\x6d\x0f\xd6\xd7\xa8\xb2"
- "\x44\x87\x53\xd4\xf2\x69\x5a\xf9\xd1\xfe\x89\xc5\x05\x5d\x28\xb9"
- "\x16\x49\x1b\x1f\x35\x9c\xf4\x08\x1b\x1f\x9c\x01\x36\x49\x9c\xd4"
- "\x74\x70\x71\x72\x3c\xcd\x3f\x50\xca\x49\xfe\x2e\x8f\x7e\x52\xd5"
- "\x03\xd0\xda\xfe\xcf\xfe\xeb\x19\x5b\xeb\xdb\x94\x16\xd2\xa1\x40"
- "\xf7\x01\x9f\x83\xd4\x0f\x4f\x84\x8e\x2c\x64\xa3\xe9\x61\xcd\xa9"
- "\xb0\x19\xc3\x9d\x65\xd4\x83\x75\x25\xf5\x36\xcd\x71\x6e\xa2\xbc"
- "\x54\xdf\x3a\x71\xfe\xed\xfc\xcf\x6c\x81\x7b\x24\x6b\x0b\x39\xbf"
- "\x80\x7f\xa5\xda\x30\x09\xde\x45\xde\xc7\x6b\x5e\x12\xd2\x05\x89"
- "\xbb\x69\xff\x29\xec\xb2\x29\x7d\xd5\x58\xfa\x42\xa2\x0f\xd9\xab"
- "\xd7\x65\xae\x7f\xf8\xe1\x6f\x27\x0d\x91\x67\x5c\x95\x4e\xa5\x84"
- "\xea\x24\xf9\xf7\xd5\x6c\x89\xa7\xcd\x44\xff\x5f\x4c\x91\xfc\xdb"
- "\xbf\x9f\xa2\x75\x33\xa3\x87\x7d\x68\xd5\xf8\x77\xb9\x8e\x3e\x9c"
- "\xcd\x9d\xcd\xd9\xe1\xb5\xd1\xec\xfd\xe6\xda\xf8\xd0\x30\xf6\xda"
- "\xf8\x30\x89\xf6\xd9\xe3\xf4\x7d\x36\xb5\x79\x5c\xd0\x7c\xcc\xb7"
- "\xe4\xc1\x5d\x96\xc0\x6d\x82\x07\x4f\xdf\xcc\x74\xe0\xbf\xa1\x9b"
- "\xc6\x7e\x10\x24\xb9\x36\x48\x34\x22\x3d\xc0\xe2\xb0\x17\x54\xac"
- "\x83\xde\x71\x26\x0f\x0c\x70\x4f\xfa\x66\xa2\x17\xf4\x5e\xde\x23"
- "\xcf\xe0\x1f\xe8\x27\x39\x84\x9e\x2b\xba\x40\x2b\x14\x04\x43\x60"
- "\x72\xbf\xfe\xb0\x5a\xe3\x71\x2d\xdb\x6c\xc2\x47\x36\xf6\xed\xa0"
- "\xb4\x67\xaa\xc7\xde\x4d\xed\x34\x08\x1a\x14\xb4\xe0\x0c\x80\x55"
- "\xfc\x8c\xea\x85\x5d\xd0\x3a\xf4\x2f\xea\x26\x4b\x20\x59\x9c\x15"
- "\xec\xfb\x99\xb0\x07\xba\x49\xda\x03\xdd\xc4\x6a\xd7\x01\x0e\x1f"
- "\xfa\x2f\xa8\x1b\x8f\xbd\x25\x35\x32\x3d\xff\xe1\x35\xe9\xf6\xec"
- "\xcd\xe9\xb0\x05\x1c\xb5\xbf\xcb\x35\xe4\xfc\x68\xba\x84\xef\x47"
- "\xa9\x61\x5d\x95\xb4\xe1\x03\xcd\x9c\xef\x17\x3e\x6c\xd5\xb3\x9e"
- "\x8f\x17\x00\xf6\x8e\xf3\x78\x37\x12\xce\x7d\x3c\x0f\x67\x3f\x7d"
- "\xb0\x9d\xd9\x97\xc6\x2a\x9d\x1c\xe7\x8d\xc4\x6b\x7d\x7c\xa9\x76"
- "\xa7\xbe\x8f\xd2\x69\xed\x23\x2d\x46\x9c\x35\xe6\x09\xdd\x1c\xc1"
- "\xe9\x23\x97\x87\x59\x54\x5b\xd7\xe8\xa7\x60\x9f\x27\x6c\xca\x05"
- "\x9f\xf1\xd1\x69\x79\x47\xeb\xa3\x4e\x0d\x96\xc4\xfb\x2e\xc4\xbd"
- "\x7e\xd8\xe9\xf4\x71\xd8\x04\x7e\xcc\xb4\xf2\x1e\xf6\x91\xb8\x63"
- "\x7a\x8f\x4f\x3c\x1f\x7a\xc0\x17\x79\x27\xff\xa3\x6a\x49\xb7\x3e"
- "\xaa\xa1\x74\xa2\x95\x1f\x15\x51\x9f\xcd\xd2\x47\x80\xa8\x67\xa9"
- "\x66\x0f\x15\x09\xb7\x3b\x56\xdb\x89\x59\x5e\xf3\xf0\xc3\x59\x39"
- "\xb9\x5a\x4c\xf9\xa4\xf5\x6b\x33\x6f\x55\xef\xe0\xaf\xcb\xda\x94"
- "\xbe\x26\x53\xdc\xf1\xa1\x54\xf9\x38\x0a\xbe\x73\x21\xdf\x08\xbb"
- "\x79\x31\xa6\xb6\x39\xb5\x2a\x1f\xd5\xc1\x5a\x1a\xa4\xbd\x45\xcb"
- "\xa3\x72\x6f\xbb\xe4\x25\xea\x47\x9b\xb6\xb7\x41\xc7\xd2\xc7\xbe"
- "\x6b\xc3\x99\x19\xfc\x32\xe0\x6c\x0e\x7a\x16\xca\x43\x6b\xf4\xa3"
- "\xd0\x9d\xe9\x32\x4a\xc7\x99\xb0\x6b\x1d\xce\x81\xdb\xee\x54\xca"
- "\x8c\xa5\x7c\x52\xff\x42\xa2\x6b\x26\xcc\x1d\xce\x8a\x64\x0c\x8f"
- "\x96\x14\xd0\x6b\xe8\x02\x5d\xeb\x60\x4f\xdb\x12\x47\xfc\x09\xed"
- "\x97\x6d\x4b\x49\xd6\x2b\x2d\xde\xc2\x8c\x68\x83\xf6\x42\x8f\xd4"
- "\x2b\xb7\xac\x7a\xb7\x80\x31\x75\x3f\xf4\x94\x09\x3d\x67\x4b\x92"
- "\xdc\x53\x8d\x75\xaa\x1e\xa5\x8e\xf2\x15\x7b\xd8\x55\x5e\xd9\xe7"
- "\xfe\x0c\x81\x27\x82\xd6\xb5\x1c\xe0\x4f\xf6\x8b\x3b\x02\xf4\x9b"
- "\xa1\xf0\xec\x28\xbc\xd3\x5e\x33\x89\xe6\xb1\x8d\x3b\x92\x98\x6a"
- "\x27\x1d\xd5\xc5\x8e\xde\x00\x3d\x30\xe1\x87\x0b\xb0\xa0\xfa\x0f"
- "\xa9\xf5\x1f\xa2\xfa\xa9\xdd\x9b\xd4\xf8\xb9\x2d\x5e\xad\x2d\x5a"
- "\xaf\x5e\xda\x8f\x4b\xb1\x27\x53\xff\x8b\xe9\xaf\x44\xea\x9c\xfc"
- "\x24\xfb\xcd\x0c\xe9\x9c\x24\xdf\x77\x34\x49\x5b\x2f\x68\x5b\x1d"
- "\xc3\x01\xc5\x29\xfc\xb7\xea\xd4\xb6\x0e\x40\xff\xa1\xd5\xc9\xa9"
- "\x4e\x3e\xd0\x5b\x47\xfb\xa7\x91\xe8\x86\xd7\xbc\x8d\xf6\x49\xb4"
- "\x01\xbe\xdd\x37\x93\xd3\x3e\x1a\x4c\x0f\x1a\xa4\x0f\x8d\xcd\x2c"
- "\x36\x92\x67\xa7\xf6\xaa\xc3\x7c\x26\xd5\x31\x40\xf4\xb9\x90\x15"
- "\x75\xb2\xa3\xaf\xa1\x6d\xd8\x39\x61\x5e\x87\x68\x9e\x68\xae\x52"
- "\xa8\x9d\x7a\x92\x35\x62\x09\x0e\x9f\x61\xbe\x60\x3b\x52\x3b\x24"
- "\xe4\x0f\x0b\xf5\xcd\xd0\xc1\x8e\xbe\x8b\xb9\x42\x5d\x84\x17\x71"
- "\x81\xc1\xb4\x7f\x85\x0f\x3b\xc0\x7a\x6b\x01\xef\xc6\xf9\x65\x17"
- "\x73\xdf\x09\xbe\x9c\x64\x15\xf1\xec\xc8\xe4\x8a\x98\x6b\x61\x3b"
- "\xed\xbe\x73\x6b\x37\x57\xce\x3b\x19\x6f\xa6\xfd\xe1\xbc\x9e\x05"
- "\xfc\x24\x57\x53\xbf\xf5\x8e\xd3\xf0\xb3\x57\x47\xb4\xa6\x04\x36"
- "\x2b\xc6\xf2\x2d\x2c\x0e\x3e\x0a\x1d\x76\xee\x6f\xf5\xd5\xb0\x56"
- "\x7b\x0d\xfb\x28\x50\xc5\x5c\x1b\xa1\xa7\x75\xf7\x7e\x9c\x5f\x85"
- "\xbb\x2a\x31\xf4\xfc\xb2\xed\x47\x68\xab\xb5\xf8\xe3\x63\x9f\xd2"
- "\xcc\x7d\xca\x6c\x3f\x11\xef\x55\x2d\x69\x1f\x11\xb6\x7d\xc4\x1c"
- "\x9d\x5c\x01\x8f\x57\xf8\x28\xda\x28\xa1\xba\xea\xe0\xcf\x2f\x4e"
- "\xe9\xb3\x4e\xa2\xf1\x1b\x96\xe7\x33\x71\x46\xea\x5a\xf7\x47\xf4"
- "\xf1\xd2\xda\x73\xcc\xe8\x5a\xf7\x9e\x78\x16\x3a\x13\x1a\xaf\x3b"
- "\xb3\x5d\xd8\x60\xc2\x97\xa1\x3b\xbf\x1b\x77\xbe\x95\x0a\xf4\x31"
- "\x28\xfb\x4d\xf0\x32\x68\xe5\xf7\x15\x6a\xe5\x5b\x05\x2d\xd8\x0b"
- "\x78\x50\x9f\x8e\xae\x94\x30\x69\xa1\x54\xd9\x67\x82\x4f\x5a\x24"
- "\x7c\x5a\x17\x00\x3e\xb0\x49\x57\x36\xf6\xd6\x51\xdf\x52\x08\x06"
- "\x8a\xd6\x06\x70\x00\x67\x79\xa8\xbf\xfc\x1c\x33\xb9\xd6\xc1\x66"
- "\xdd\xbd\xcb\x92\x6a\x30\x2a\x03\xa7\xeb\x2b\xfa\x99\x01\xf3\x06"
- "\xde\xa1\x42\x7c\x17\x30\x2f\xc0\x9c\x79\x63\xa3\xf3\xe9\xaf\x80"
- "\xfe\x8a\x80\x7b\xf4\x5b\x4c\xf3\x55\x42\x7d\x48\xa0\xb9\xaa\xc3"
- "\xaf\xc0\xc7\x92\x81\x7a\xf8\x78\xc5\xfe\x4c\xb8\x12\x4e\x7f\x72"
- "\xe0\xd5\x00\xad\x1d\x45\xc8\x9e\xee\x04\xa5\x2c\xde\x25\xed\x97"
- "\x3f\x5e\xb9\x97\x78\xfd\x9a\x67\x84\x8f\x0c\x13\xc9\x27\xd0\x39"
- "\xb0\xdd\xe2\x2e\x5d\x9b\x55\xa3\xe3\x4f\x26\xc2\xff\x84\x7b\x89"
- "\x5e\xd8\x52\x1a\xf7\xab\xb8\xbe\x9f\xf2\x2c\xf6\xb0\xeb\xb3\xe5"
- "\x9a\x68\x11\x77\x00\x41\x07\xc6\xe3\xb3\x68\xef\x6a\x81\x0d\x2b"
- "\x9f\x96\xc6\x4c\x3a\xee\x35\x65\x58\xb8\x3b\xd0\x04\x1c\x32\x09"
- "\xdc\x97\xdf\x88\x37\xf6\x5a\x68\x6f\x6b\xa3\x74\x83\x96\x8e\x3d"
- "\x54\x21\x79\x19\xb2\xfa\xf2\xcd\x16\x5e\xd8\xcf\xa6\x0b\xbd\x97"
- "\x96\xbe\xd9\x6b\x69\xa5\x9d\xbf\x90\x68\x37\x7c\xeb\xa0\x0c\xa5"
- "\x47\xd1\x5e\x79\x98\xda\x75\x51\xfe\x04\x2d\x3f\xef\x4b\x33\xb8"
- "\xf3\x9b\xc4\x3a\x83\xff\x35\xb1\x47\xca\xf4\xe8\xe5\xf9\x5e\x8b"
- "\x98\x33\x2d\x2d\x37\x4d\xec\xcd\xf0\xc3\x41\xbc\x37\x17\xfd\xe9"
- "\x12\xe9\x3a\x92\x9d\x91\x1e\x17\x91\xa6\x87\xcf\x13\xf8\xd3\x8c"
- "\x48\x8b\xa2\x3e\xb3\xd0\x3b\xb5\x8d\x7d\x1a\xeb\x6e\xf9\x66\x9c"
- "\x01\xca\xfd\x59\xb4\xbd\x99\x33\xe9\xa3\x57\xa6\x49\x3e\xe0\x93"
- "\xba\x48\xb9\x1d\xe7\x2e\x68\x5b\xe9\x4b\xd3\x07\xfb\xd2\xa2\xd0"
- "\x3e\xea\x82\xce\x95\xc6\x48\xed\x76\x33\xf8\x87\xe7\x65\x3f\xaa"
- "\xe7\xb8\xf7\x45\xf5\x8a\xfe\xe4\xfb\x89\xf6\xdc\x97\x3c\xb6\x7d"
- "\x4f\x4a\xb6\xab\xf0\x27\x84\xd3\x9f\x1e\x00\x4d\x09\x9a\x62\x1a"
- "\x6c\x3f\xc3\x3e\xfd\xe9\x2c\xcc\x69\x90\xd6\x79\x30\x36\xa6\x61"
- "\x7e\x37\xd3\x15\xd2\xda\x91\x67\x93\x9f\xde\x0e\x3e\xd1\xa1\x70"
- "\x4e\xcf\x0b\x80\xbb\x96\x5e\xd8\xe5\xc4\x34\x0a\x5b\x18\xf3\xe2"
- "\x0c\xb7\xbf\x9b\xb5\x14\x7d\xc1\x5a\x02\xee\xa2\xc3\xe7\xbc\x06"
- "\x69\x13\x63\x40\xbd\xf7\xe2\x9b\x83\xd6\x4b\x7a\xb0\x6e\x7c\xd9"
- "\x96\xe4\x25\x82\xdd\xdf\xe4\x5e\xf0\xe9\x01\x4d\x46\xba\xf0\x18"
- "\xfe\x24\x7c\xa2\xc2\x5e\x54\x29\x9f\x0a\x9d\xab\x83\x0f\x26\xb1"
- "\xf9\x5b\xa0\xab\xfe\xb4\xdd\xec\x63\x29\x6a\xbd\x67\x65\xbd\x7f"
- "\x62\x17\xaa\x17\x78\xdb\x52\x2d\xed\x50\x14\xf3\xd4\xd4\x20\xd5"
- "\x1d\x34\x4f\xad\xa4\xbd\xc6\x41\xfc\x0b\xf1\x23\xc7\xee\xa4\x76"
- "\x52\x5b\x03\x6d\x0c\x7e\x95\x6b\x15\xda\xaf\xcf\x5a\x99\x6a\xff"
- "\xe3\x38\xc3\xfe\x74\x83\xc2\x93\xe2\x48\x76\x13\x7d\x01\x9d\x85"
- "\x3e\xbd\x30\xc8\x26\xb8\xf3\x48\xca\x8a\x4d\xc9\xa6\x3a\xbe\xfb"
- "\x3e\x74\xed\x44\xab\x82\xdc\xaa\x7f\x6b\xc0\xc3\x2a\x88\x7e\x0b"
- "\xff\xa0\xdb\xa7\xed\x36\x6f\x63\xb7\x71\xbd\x45\xd8\x8f\x29\x65"
- "\x8b\xb2\x69\x6e\x25\x8c\xcb\x8d\x0d\x11\xb6\x46\x51\xd4\xd6\x1b"
- "\xb0\x35\xe2\x26\x63\x7e\x0d\xf6\x4c\x9a\xb3\x41\xe7\x9f\x88\xff"
- "\xff\x44\xec\x77\xa5\xe0\x8b\x04\x9d\x3f\x76\xb7\x37\x36\x31\x19"
- "\x75\xc0\x4f\x99\xb2\x31\x50\x5f\xf1\x35\x33\x48\x78\x1c\x9b\xd7"
- "\xda\x3b\xe8\xe2\xa5\x89\xc9\x58\x47\x6a\xdd\x16\xaa\x3b\xc8\xcb"
- "\x12\x49\xf6\x39\xb6\x4c\xce\x8d\x78\xb6\xe2\x7b\x60\x18\x77\x03"
- "\xff\x54\x55\x33\x04\xbe\xe8\x4f\x29\xc4\xeb\xba\xfa\x4c\x89\xc9"
- "\x3f\xb4\x16\x11\x0f\x70\x2c\xc3\xa3\x53\xc4\x1d\x36\xcd\xd7\xe9"
- "\x78\xe7\x6a\x7c\x8f\x75\x92\x9b\x2a\x21\xbe\x3d\xa1\x87\xfd\xf9"
- "\x93\x21\x27\xd3\x0f\xd3\xde\x3a\x44\xb2\x0f\xdf\x93\x66\x2a\x9f"
- "\xca\x92\xe9\xdb\xd4\x1e\x76\xec\x8d\x80\x9e\x25\xd0\x5f\x9c\x77"
- "\x5a\x76\x0c\xd5\x9b\x02\x9d\xee\xd1\x73\x38\x67\xfe\x4c\xfa\xe5"
- "\xd8\xcd\x66\x2b\x54\x1f\x74\xc9\x15\x53\xd9\x6c\xe8\x91\x29\x2d"
- "\x29\x3d\x28\xcf\x59\x34\x39\x71\xfb\x54\x36\x77\x64\xbb\xc7\x6a"
- "\x24\x9f\xf7\x67\xb1\xc7\x6f\xf2\xb2\x2b\xec\xdf\xe3\x1d\x54\x6f"
- "\x25\x77\x46\x71\x3e\xcd\xaa\x97\xfc\xe0\x67\x9b\x2d\xd5\x12\xef"
- "\xc4\xb9\x02\xe1\x1b\xce\x6d\x54\x7d\xb5\x4e\xf8\x78\x35\x9b\x97"
- "\xe0\x6e\x96\x48\xd3\xc5\x01\x96\x71\xa2\x1f\xaa\x5f\xc6\xe0\xf6"
- "\x6b\x33\x50\x07\xfa\x93\xbe\x5a\xea\xba\xe1\xb3\x91\xe0\x2a\xec"
- "\x84\x4b\x77\x33\xd3\x53\xbb\x59\xdc\xd1\x87\xc5\xb8\x0e\xc8\xb5"
- "\x68\x60\xe8\xaf\x52\x8a\x75\x46\x38\x41\xfd\x46\x7b\xc0\x8d\xd6"
- "\xc0\x59\x97\x23\x8f\x2b\xae\x9f\xc1\x3f\xc9\x67\xa7\x5c\x39\x87"
- "\xd8\xf2\xce\x80\xf4\x33\xb6\x8a\x79\xf7\x51\x7d\xfb\xa6\xb2\x38"
- "\xaa\xab\xdf\xbd\x16\xb4\xd6\x7a\xa5\x2b\xa7\x81\xea\xfe\x73\x0c"
- "\xf6\xa3\x32\x82\x8f\xdc\x97\xfe\x7c\xd8\xed\x6f\x67\x88\x71\x71"
- "\x8f\x9d\x07\x51\x0f\xe5\xb9\x5d\x8c\x77\x8f\xd5\x96\x2e\xfd\x6a"
- "\x8a\xb1\x86\xce\x10\xd4\x71\xb8\xcf\x89\xfa\x56\xba\x33\x88\xe7"
- "\x54\xc7\xa4\xc1\x5a\xe2\xd7\x9f\x9f\x76\xe5\xec\x67\x98\x1f\xe4"
- "\xa7\xf7\x22\x77\x2f\xe5\x3d\x3d\x72\x5e\x90\x87\xbe\xbd\x46\xf5"
- "\xfe\xdf\xf0\xd9\x18\xce\x6c\xc2\x79\x6a\x68\x3c\x04\x2b\xdf\x1e"
- "\x82\x91\xd4\x19\xfe\x79\x06\xfa\x4a\x73\x37\xdd\x9d\xf7\xc5\xd8"
- "\x77\x22\x69\xed\x13\xde\x6f\x6b\x15\xfa\xb2\xbf\xc4\xde\x13\x50"
- "\xb8\xa4\x67\x7f\x71\x11\xef\x96\xed\xa1\x5f\xd0\x02\x41\x4f\xae"
- "\xc7\x79\xf6\x5f\xde\xb5\xe8\xe4\xfc\x62\x2c\xe0\x99\xc6\x9a\xe3"
- "\x88\xb3\x8a\x38\xf4\x55\x9b\x63\x6e\x4a\xc9\x56\x70\x06\x05\xdb"
- "\xde\x61\x2b\x93\xf8\xc7\x2b\xa9\xde\xd7\x54\x1e\xd2\xaf\xee\xa7"
- "\xfe\xbe\xd8\x18\x17\x7f\xcc\xca\x34\x3b\x44\x5a\xbf\x87\xd3\xa5"
- "\xed\xa8\x15\x34\x6a\x9f\x5e\xae\x1d\xf4\x51\x2d\xeb\x93\x67\xe3"
- "\x7f\x29\xa2\xf2\x63\xda\x7d\xf3\xa8\xa9\xf0\x3f\xe5\x80\x0f\x51"
- "\x71\x57\x89\x68\x15\xed\x07\x13\xdc\xbe\x21\x26\xcf\xeb\xdb\x6f"
- "\x25\x1e\x7f\x02\xee\xa9\x6a\x7d\xbb\xb8\x73\x85\x76\xf5\xbe\x5c"
- "\xfb\x52\x4d\x86\xe6\x26\x82\xb1\xd3\x22\xe2\x1d\x10\xdf\xa5\xf8"
- "\x62\x53\xec\xde\xd8\x15\x75\x72\xdd\xb4\xdb\x79\xac\xa4\xb7\xe9"
- "\x7e\x56\x84\x71\xa9\x7a\x89\x09\x18\x33\xd5\x53\xa9\x9d\x6f\x6b"
- "\x75\x8f\x1b\x43\x44\x1b\x1b\x8d\x49\xfa\x37\x48\xc9\x16\x63\x83"
- "\x8f\x1e\x31\xb6\xcf\xc5\x1d\xc0\x8b\x1c\x4f\xbb\x84\x6d\x8a\xdd"
- "\x35\x15\x75\x7c\xf1\x4b\xf4\x0f\x73\x42\xf4\xe1\xb2\x1e\xf6\x79"
- "\x06\x9f\xf4\xd4\xa4\x8b\xab\xf3\xf3\xb9\xb2\xce\x15\x75\xcf\x11"
- "\x0d\x96\x77\x16\x61\xb3\xf3\x45\x19\x2f\x5b\x51\x07\x19\xa6\x8f"
- "\xda\x23\xfc\x88\xa0\x43\x5f\xc4\x61\xae\xae\x3f\xc4\x52\x24\x1e"
- "\x7e\x11\x0d\x79\x57\xc6\x78\xfa\xbc\x81\xf0\x5e\xfa\x97\x0b\xd9"
- "\xac\xea\xc4\x3e\x16\x49\x63\x2f\xb2\x8f\x52\xa6\x31\x2f\x22\x79"
- "\xee\xf3\xfd\xc2\x2e\x89\xfa\xbb\x29\xa0\xd1\xbf\xcf\xf7\x73\xe8"
- "\xbb\x0b\x55\xbd\x27\x68\x59\xa1\xf4\x11\x38\xe8\xfc\x62\x49\x48"
- "\xef\x89\x3b\xdd\x4e\xde\x8c\x7c\x34\xf7\x67\x91\x47\xfa\x20\xeb"
- "\x51\xef\x3b\x7f\xf1\x63\xf5\x2e\x73\x12\x6c\xb5\xa8\x2c\xd1\x3b"
- "\x2e\xf4\xad\x80\x01\xda\x16\x7d\xd7\x43\xc7\xf9\x45\x4d\x58\xcf"
- "\xfc\xb9\x88\x0d\x21\xfd\x11\x7c\xd1\xa0\xe1\x08\x8d\x77\x82\x8c"
- "\xeb\xf1\xf9\x8c\x23\x73\x99\xc0\x81\x3e\x6e\x9d\x74\x55\x0d\x70"
- "\xf2\x8b\xe3\x91\x70\x5a\x1e\x50\x1c\x92\x06\x7d\xde\xc4\xc5\x5a"
- "\xff\xbc\xe9\xdb\xf9\x89\xff\xba\x41\xe3\x45\x24\x9c\xe3\x88\xbe"
- "\x7c\x19\x10\xb0\x2e\x19\x40\x0c\x38\xcb\x63\x85\xf0\x23\xfe\x5f"
- "\x5f\xc3\x5f\x7b\xa0\x64\xc0\x1e\x74\x58\xe1\x9f\x96\x29\x25\x03"
- "\x45\x5d\x76\xa6\x4f\xb7\x43\xb7\x9e\x28\x64\x3c\x92\x59\xe3\xb8"
- "\x99\xf8\x13\x5a\xe7\x5b\xd7\x30\xcb\xfd\xd9\xd0\x31\x24\x25\xc0"
- "\x9f\x3a\x7c\xa9\x23\x16\x42\xd0\x91\x14\x4f\xcf\x89\xc4\xcf\xc5"
- "\x71\xe3\x40\x06\xce\xe7\x83\x4e\x4e\xf4\xf8\x38\x7c\xba\xeb\xdd"
- "\x5e\x3f\xdb\x7a\x9a\x19\xe1\xaf\x3d\x50\x96\x68\x6d\xf5\x7d\x29"
- "\xe4\x1b\xb3\x9d\x25\x10\xff\x81\x3b\x00\x56\x25\x36\x91\xd1\x1e"
- "\x6f\x90\xe3\x3e\xcb\xe5\xb8\x65\xbf\xd1\x7f\x41\xe3\x4a\xfc\x45"
- "\x85\xa2\xef\x5f\x3e\x17\xa0\xfa\x95\x92\x60\x41\xb0\x24\x98\x2f"
- "\xef\xd4\xb7\xb0\xc2\x3c\xde\xed\xf6\xb5\x90\xcc\xd5\x2f\x62\xd7"
- "\xe1\xfc\x1f\x63\xc4\xf8\xd0\xf6\xc7\xe7\x4e\x0b\x5e\x2b\x40\xef"
- "\x8e\xb5\x6a\x99\x5e\x2a\xd3\xdb\xc2\x86\x4a\x82\x62\xec\xad\x3e"
- "\x59\x36\x5d\x3c\xa3\x7c\x04\x1c\xd4\x31\x87\xe0\x40\x63\xc7\xf8"
- "\x30\xfe\x00\x60\x42\x30\x50\xc7\x6a\x1d\x56\xc7\x89\x31\x7e\x44"
- "\xbb\xce\x6e\x1a\x27\x8d\x55\x8c\x73\x98\xc6\xd9\x9c\xcd\x98\xbf"
- "\x3c\xa5\xe8\xfc\xa4\x60\x3e\x64\x54\xc7\x27\xc4\xc3\x17\x54\x32"
- "\x92\x45\x0d\x2f\x17\x56\xea\x9f\x24\xde\xa4\xd0\x4b\x32\xa9\x97"
- "\x77\xc3\x86\xd7\x6d\xa7\xbf\x40\x0d\x03\x8f\xa3\xf1\xeb\xd4\xb6"
- "\xf5\x63\xe5\x24\x2b\xec\xe6\xdd\xc4\x9b\xfa\xdd\x01\xca\x93\x4d"
- "\xe3\x27\x19\xb6\x4b\xed\x3f\xf2\x6e\xfd\x5a\x8e\xcb\xb2\x96\x25"
- "\xbc\xf3\x93\x12\xbd\xbb\xbd\x84\x69\x63\x79\x80\xf2\xd1\x78\xac"
- "\x54\x57\x2c\xc6\xa3\xd0\x38\xf7\x50\x3f\xfd\x11\x63\x3a\xda\x0b"
- "\x3b\xe2\xcf\xd8\xa4\x54\xa6\xdb\x7d\x86\xc6\x71\x86\x59\x2b\x0b"
- "\x89\xff\x5a\x01\x7e\xf1\xf8\xd1\x4b\xd2\xd8\x6c\x0f\xfb\xaf\x63"
- "\x52\xa6\x13\xbe\xa0\x2f\xed\x61\x5f\xf6\x87\xfc\x3d\xc3\x87\x7e"
- "\x6c\xe2\x74\xe0\x91\xf0\xfb\x8c\x3d\x63\x90\x70\x06\xe7\xf4\x9b"
- "\xa8\x8d\xc1\xa4\x44\xd1\x1f\xe7\x02\xd8\x09\x9b\xe8\x1d\xb1\xa3"
- "\x70\x5f\x55\x47\xe5\xac\x9c\x60\x86\xfa\x89\x9f\x33\xe0\x17\x30"
- "\x1c\xd3\xe6\xf6\x15\xb6\x90\xda\x68\x80\xfc\x5d\x5f\xe8\xd5\x3f"
- "\xfe\x0a\x9b\x7b\x71\x34\xe5\xaf\xb3\xc7\xa3\xdf\xd0\xcf\xa2\x3e"
- "\x1a\x5b\x7c\x0f\xfb\x5b\xcc\xc8\x35\x66\x13\xb4\x4c\xd2\xc1\xbf"
- "\xb6\x41\xff\x79\x91\xed\x0a\x1e\x0e\x36\x16\x17\x59\xee\x98\xd6"
- "\x0f\x7a\x1e\xf7\xbe\xc5\xc5\xc3\xe1\x6f\x73\xc7\xab\xab\x6c\xa7"
- "\xb0\x91\x74\x94\xef\x24\x7a\x41\xbc\xc2\x11\x2b\xce\x52\x68\xef"
- "\xdc\xef\x63\xb9\x7b\x19\xe2\xcf\xc4\xba\x03\x77\xb3\x23\x35\xc9"
- "\xac\xf6\x1c\x7c\xc6\x25\xc5\x3f\x7b\x8e\xe6\x52\xa5\x21\xe0\x49"
- "\xa1\x47\xe6\xb9\x49\x71\x15\x3b\x35\x1e\xfe\x6f\xfd\x05\xfd\x4c"
- "\x6f\x5b\x27\x9e\x7d\x4b\x6c\x3c\x50\xa5\x57\xb2\x6b\xe0\xc7\xdc"
- "\xbc\xa8\x1e\x7e\xcc\x35\xdf\xe0\x82\xf7\xc9\xa7\x35\xd7\x67\x9d"
- "\x54\x96\xc3\xe6\x22\x9e\x81\xc5\x2b\x79\x39\xb9\x5f\x7b\x66\x53"
- "\xff\xe2\x54\x7f\xe1\x71\xd2\x5f\xf8\x5f\xd7\xc2\xe6\x5c\xfd\x7e"
- "\x6f\x90\x64\x18\x51\x6f\x0e\x9b\x5d\x73\x8e\x25\x81\x0f\x4a\x3f"
- "\x29\x79\x36\xc8\x85\x77\xf7\x5a\x78\xf0\x1f\x49\x6c\x6f\x4f\x38"
- "\xde\x81\x37\x17\x31\x12\xb8\x75\x3c\xfb\xe9\x8a\x44\x61\x4f\x20"
- "\x7c\xed\xe2\x9c\x81\xde\x59\xd5\x33\xcc\x70\x04\xb6\x89\x75\xf2"
- "\x1e\xde\x91\x80\xb4\xf7\x1d\x74\x7a\x9a\x34\x3f\xf0\xe3\x9e\x97"
- "\x97\x4a\x79\x47\x99\x40\xf2\x97\x77\xd0\x25\x7d\x90\x9e\x30\xb9"
- "\x8b\x95\x08\x19\xc7\x73\x1a\xdf\x90\x06\xbf\x6e\x29\x02\x96\x27"
- "\x16\x40\xee\x51\x65\xc6\x77\x6c\xa1\x34\xc9\xc3\x08\x9b\x6b\xab"
- "\x3c\xff\xa3\xbd\xc9\x3c\xe8\x3c\x91\xaa\xed\x67\xd8\xd7\xa5\xaf"
- "\xd7\x13\x99\x1e\x3d\x3b\x7e\x81\xfe\xc5\xa9\x36\xe2\x38\xbb\x49"
- "\xa1\xfc\x55\xda\xfe\x26\xce\x70\xb7\x4f\xfd\x7e\xee\x66\x36\xfd"
- "\x87\x97\x1b\x19\xce\xff\x28\x6f\xb7\xdc\x77\x4f\x1c\x0e\x9f\x11"
- "\xa4\x08\x78\xc3\x47\x81\x90\x31\xe0\xfb\x53\xc6\x34\xe8\xd5\x7c"
- "\x80\xca\xfd\xf7\xc4\xe7\x11\xed\x04\x42\xfb\x28\xb5\x01\x1b\x74"
- "\xd4\x2f\x79\x93\x13\xf5\xe2\x2e\x25\xe5\x93\xfb\xeb\x89\x71\xe5"
- "\x36\xf8\xa1\x02\x7c\x15\x55\x9e\x74\xf7\x7e\x25\xe1\x9b\xcf\xa2"
- "\xe6\x57\x31\xeb\x3b\x85\x1e\x83\x59\xfa\xe8\xb6\x74\xb0\x8e\xbb"
- "\xf1\x1d\xb8\xee\xba\x1e\xfa\xc0\x8e\x83\x6e\xec\xdb\xc3\x69\xa6"
- "\x7b\x20\xeb\x0b\x5e\xbc\xa3\x7a\x1e\x95\xa3\xb4\xf8\xb7\xcf\xf8"
- "\x0d\x15\x5b\xd8\x5c\xe9\x4b\xb5\x43\xf8\xe8\xc2\x9d\xf5\xab\x12"
- "\x98\xf5\xaa\x2a\x96\x34\xe8\xec\x70\x79\x74\x5c\xd8\xab\x88\xf6"
- "\xcb\x7f\xd4\x86\x78\x0e\xaf\x0e\x79\xa2\xe5\x5c\xfd\xfd\x7e\x7a"
- "\x4f\x0a\xbf\x77\x9c\x57\xcf\x87\xda\x3c\xec\xef\xab\xf6\x9d\x91"
- "\xb6\xf4\x42\xbf\x54\x7a\x4b\x6a\xd8\xfe\xe0\xef\xf7\xcb\xbe\xfc"
- "\xfd\xfe\x23\x76\x06\xdd\xf9\xb1\x5a\xe1\x9b\xfd\xef\x24\xf7\x9e"
- "\xb0\xab\xfa\x98\x36\x81\x57\xe0\x77\x77\x40\x06\xfb\xca\x55\x46"
- "\xf9\xb0\x4f\x10\x7f\x94\x22\x79\xf8\x5b\xb2\x15\xc2\x9f\x88\xf1"
- "\x7f\x08\x7d\xe3\x98\x34\x71\x37\x63\xa2\x4c\xd9\xa2\x3a\x61\xcf"
- "\x52\x76\x5f\x12\xfd\x1a\x79\xd9\xe2\x54\xfa\x35\x11\xce\x65\xd0"
- "\x6f\x1c\xfd\x42\x96\x4d\xa0\xef\x71\xc0\x4b\x92\x61\xad\x88\x51"
- "\xd9\x17\xbb\xa8\x7a\xbc\x7b\x51\x80\x8d\xbb\xf8\x47\x4c\xda\xec"
- "\x75\xa6\x20\x3e\xe1\xf2\xbd\x8c\xe5\x06\xf8\x90\xed\x0a\xc4\x18"
- "\xe9\x4c\x71\xec\xc5\x59\x7a\x67\xc2\xc8\xb3\xf4\xce\x05\xf4\x47"
- "\x6f\x9d\xcd\xf4\xe7\xa7\xbf\x94\xf0\xdf\xc9\x05\x83\xce\xce\x14"
- "\x82\xa3\xe0\xb1\x2e\x8e\x26\xa2\x3c\xcd\x03\xe4\xa2\xd8\xa9\x29"
- "\x72\xbc\x2b\x8a\xe8\xdd\xc8\x63\x7f\xe4\x52\xc7\x6b\xa7\xf7\x38"
- "\x9b\x83\xf6\xb5\x58\x82\xc9\x54\x1a\x73\xec\x7d\x49\x18\x2f\xfa"
- "\xdb\x17\xbb\x38\x35\xf2\x4e\x18\xea\xc4\xf8\xbd\xb1\x54\x8e\x60"
- "\xc9\xaf\x7e\xdd\xa3\xc1\x53\x85\x13\xee\xcb\xe8\xfb\xa8\x0e\xc9"
- "\x07\x51\x7e\xaa\x43\xcb\x1f\x82\xfd\x54\x26\xf8\x26\xb4\x45\x32"
- "\xb1\x51\xbb\x6f\x36\xe8\x3c\x39\xf7\xdd\xb5\x4c\xf5\xe7\xd1\x99"
- "\xe2\x8b\x28\x0b\x9f\x0a\x63\x95\xa7\x36\x8d\xb2\xcd\xc5\xa9\x5d"
- "\xac\xf3\x76\xd9\xee\x49\xdb\x78\x6b\xa9\x70\x16\xf1\x77\xc4\xf5"
- "\xce\x97\x72\xdf\x62\xf7\x74\x1f\x73\xd7\x28\xb4\xe7\xdf\x52\x94"
- "\x52\xc8\x5d\x5d\xec\xe4\x89\x56\x7f\xf7\x45\xee\x87\x27\x85\xbf"
- "\x10\x3e\x54\xc4\xdc\x05\x37\x8a\xf3\xac\x33\xec\xab\xc9\x6e\xaf"
- "\xb8\x73\x4e\xcf\x5d\x41\x7c\xc7\x19\x3a\xf6\x06\x92\xb1\x43\x71"
- "\x32\x14\xca\x5b\x8b\x74\x4a\x83\x4f\x92\x7d\x11\xdf\x78\xf9\xa2"
- "\x34\xb9\xa6\xba\x3e\x04\x6f\x21\xfa\x1b\xf8\x57\x17\xfa\xac\x94"
- "\x2e\x4a\xc3\x18\x1c\x24\xff\x21\x36\x28\xd6\x84\x6d\x23\x74\x85"
- "\x5d\xbf\x24\xbc\xe3\x4a\xd9\xa2\xb4\x8b\x1b\x43\x97\xb8\x2b\xe9"
- "\x08\xf0\x33\xde\xd8\x45\x69\xe0\x49\x2a\x0a\xa3\x8d\x77\xd4\x70"
- "\x57\x9f\xf9\x96\xa2\x41\x67\x57\xf3\xbb\xf9\x72\x6e\x2e\xb2\xde"
- "\x66\x6d\xec\xb5\xea\xd8\x29\x4d\x9c\x51\xcd\xaf\x96\xf1\x43\x3c"
- "\xec\x2b\x36\xae\xce\x8a\xe6\x19\xfc\x00\xed\x0d\xe7\x25\x2c\xbe"
- "\x4a\x0d\xed\x0d\x17\xd5\x8f\xaf\xc6\xf5\xe5\x1f\xd1\xc6\xb0\xda"
- "\x46\xc3\x7f\xb3\x8d\x86\x0b\xb5\x21\xcf\xcf\xbb\x53\x2e\x5e\x76"
- "\xec\x16\x7e\x75\x88\x7e\xda\x25\xcd\x3c\xf5\x5a\x90\xe4\xb7\x80"
- "\x69\x45\x11\x78\x1b\xd8\xca\x22\x96\x4a\xa0\x74\x6a\xca\xd1\xfc"
- "\x21\xe6\xda\xf8\x29\xeb\x64\xdd\xc2\x7f\xdf\xd1\x3c\xc8\x6c\x3f"
- "\x72\x0d\x97\xdf\xd2\x36\xac\xff\x0a\xf7\x27\xb3\xf7\xd2\x3c\xec"
- "\x89\xc0\xb3\x56\xdf\xa7\xcc\x9d\x01\xfd\x6a\x1b\xf4\xda\x2e\x1e"
- "\xbb\xa2\x48\x21\xda\x40\x3c\x7a\x50\xc0\x83\xf8\x17\x21\x6f\x91"
- "\xcc\x26\xe4\x2d\xaf\xf0\x99\x1c\x2b\x62\xa4\x38\x5f\xc9\x83\xee"
- "\x3b\x38\x9c\x66\x1b\x74\xb2\x54\xc4\x4e\x81\xde\x99\x9b\x8c\x95"
- "\xcb\x03\x51\x5c\xc8\x53\xc4\xfb\x23\x76\x8a\xdb\xe7\x61\x41\xe2"
- "\xa3\x6b\x06\x58\x42\x0d\xf1\x9e\x44\xb3\xe3\x40\xd7\xf7\xa9\xf1"
- "\x53\xca\x06\xc2\xf1\x53\x6a\xa1\xeb\x69\xa7\xe7\x01\x66\x08\x96"
- "\xa5\x64\xef\x19\x60\xb3\xf7\x6e\x64\x49\x7b\xa0\xcb\x3b\x25\x79"
- "\x1f\x61\xdb\x8e\x58\x2a\xeb\x93\x70\x96\x10\xe6\x7d\xe0\x23\x21"
- "\x4c\xb7\x0c\x42\x07\x72\x51\xf0\x3e\x25\xf6\xc1\x40\xe9\xa2\xba"
- "\x80\xe9\xbe\xa4\xe1\xf2\xc5\xc4\x73\x74\xd7\x13\xfc\xe6\x8e\x35"
- "\xb7\x9a\x8d\x4c\x55\x44\xfc\x9b\x77\x67\x4b\xfa\x4e\x75\xf9\xc6"
- "\xc3\x89\xe0\x9e\x34\x36\xbf\x97\x25\xcb\x73\xfb\x18\xda\x13\x7b"
- "\xd2\x60\xd3\x58\xf8\x28\xb3\x06\xf7\xac\xd2\x39\x5e\x60\x51\xee"
- "\x40\x0a\xc3\x5f\xe1\xd7\xbc\x7b\xfe\x5a\x96\x8c\xf3\x07\x9c\x95"
- "\xd8\x1e\x13\xf9\xaf\x99\x5d\xc0\x46\x9c\x39\x3c\xba\x39\x67\xcd"
- "\x0d\xc9\x3f\xcd\xb2\x3d\xbc\x26\xe7\xd1\x4d\xab\x73\xb2\xd8\x52"
- "\x69\x0a\x22\xdc\xd1\x6f\x86\x1d\xc8\xa6\x35\x79\xd9\xb6\x87\x36"
- "\xe4\xe4\x64\xad\xcb\xb3\xdd\x7d\x47\xea\x37\x7d\x92\xee\xb1\xee"
- "\xc7\x59\x8f\xb4\x0b\xec\x8d\xe1\xcf\x5f\x37\x50\x8e\xf8\x5a\xdb"
- "\xee\x5c\x69\x09\x2c\xb5\xc9\x38\x47\xbd\xab\x60\x8b\xcb\x1d\x69"
- "\xd5\x92\x4f\xed\xbd\x5f\xf2\xf6\x96\xa5\xf2\x1e\x5d\xaf\xf4\x03"
- "\xd8\xb7\x74\xba\x5c\x53\xff\xb8\x35\xca\xce\xf0\xfc\x28\x9e\x2d"
- "\x76\x56\xe2\x9a\x8a\xf3\xf0\x7f\x08\x1f\x8d\x7c\xcf\x32\x9d\x96"
- "\x4f\xcb\xa3\x7e\x17\x7e\xa7\x6b\xe1\x57\xd7\xd9\x93\x49\xf0\x89"
- "\x1f\x74\xfe\x63\xa5\x47\xef\xeb\x56\x79\x84\x6e\x69\x83\xd8\xbb"
- "\x0a\x3e\x3a\xf9\xf3\xd3\x06\xd4\x7a\x4a\xa9\xbd\x4b\x28\x6f\x91"
- "\x87\xf5\x18\x55\x5b\xc5\x99\x1d\x6a\xbf\xa4\x4d\x45\xcf\x46\x69"
- "\x53\xf1\x8f\xfd\x11\x77\xe1\x85\xaf\x09\xec\x8d\x2a\x4f\x3a\xa8"
- "\xd6\xd7\xac\xd1\x04\xca\x7f\x8c\xf8\xba\xea\x8b\xa7\x85\xff\x90"
- "\xf2\xcf\x08\xdf\x4b\xbd\x77\x8e\xf4\x69\xa2\xc1\xcd\xfa\x2b\xa9"
- "\x8b\x97\x70\xa5\x31\x1c\x96\x70\x12\xe9\xd3\x7b\xe8\x1d\xe5\x3c"
- "\xac\x77\xfa\x68\xfc\x0a\xcd\xf8\x5d\xeb\x1e\x5a\xff\xa8\x7d\x75"
- "\xde\x9a\x07\xd7\xac\x5d\x93\xb7\x59\x5c\xd9\x9f\x2b\xfe\xfb\x97"
- "\x39\x99\x2b\x47\xfb\x9f\x4f\x82\x4e\x46\xf5\x5b\xed\x83\x0d\x84"
- "\xd4\x8b\xf5\x7e\x1d\x70\xb2\xdb\x2e\x6e\x9c\xbd\xa2\xaf\x35\xc2"
- "\x8f\xc7\x69\x46\xfc\x63\xaf\x7a\x3e\xd2\xab\xce\x95\xf8\xde\x67"
- "\xba\x2f\xce\x36\x95\x2d\xee\x60\xde\x06\x9c\x8b\x11\xbc\x33\xb0"
- "\x7f\x96\x6d\xc1\x3e\xd7\xc6\x8e\x06\x68\x2f\x15\x67\xe5\x67\x62"
- "\x01\x33\xf0\x90\x04\xa3\xfd\x1d\xec\xf4\x06\x01\x8b\xb3\xd6\xfd"
- "\xc2\x37\xc7\x59\xeb\xaf\x80\x8b\xe8\xb3\xc2\xd3\xf6\x70\x9e\xb6"
- "\x5b\x39\x9b\xbd\x87\x9f\xcd\xde\x1d\xf6\x7d\x79\xda\x43\x65\x0f"
- "\x51\xd9\x93\x88\x6d\x55\x7e\x86\x1d\x02\x9d\xc4\xbb\x25\x2f\x8e"
- "\x64\xc3\x5b\xd2\xd0\x1f\xb7\x37\x99\xc9\xfb\xfa\xa7\x3d\x6e\xdf"
- "\x8d\x8c\x78\xcf\x0c\x71\x3f\x54\x9c\xef\x11\x7f\x48\xe5\xdc\xd4"
- "\x2f\xb7\x77\x08\x32\x74\x9a\x42\x3c\xa2\x87\x9d\x8e\xa3\xfd\xb6"
- "\x1a\xf5\x62\xcc\x7b\x09\x27\x61\xa7\x41\x63\x27\x3e\xa6\xa7\x46"
- "\xbd\x1b\xdc\x59\x46\xe9\x80\xc1\xc8\xf9\x3f\x33\x0b\xf3\x48\x30"
- "\xfe\xbf\x61\x1c\x38\x23\x7c\x44\x2d\xeb\xe4\x7f\xe3\x25\x03\x75"
- "\x72\xbe\xcf\xdc\xa5\xa6\x9d\x0d\xfb\x0b\x38\x73\x3f\xbd\x0f\xd3"
- "\x9f\xc2\x4b\x06\x5d\x11\x67\xd3\xf8\x26\x7c\x7a\xc1\xee\xc4\xbe"
- "\x85\x5d\x41\xe5\x9f\x96\x67\xd5\x83\xef\x78\x1d\xd9\x51\x54\x26"
- "\x88\xfb\xad\x2a\x7c\x5f\x73\x17\x9f\xd1\x6c\x3d\xa8\x4f\x67\x7f"
- "\xe0\x7a\x38\xc0\x44\xfc\xfa\xce\x80\xb0\x87\x54\x7d\x44\xe8\x14"
- "\x67\x2f\xec\xd5\xe0\x5f\xcd\xb4\x37\x5e\xc6\x7e\x18\x74\x9e\xe9"
- "\x0c\xd9\x24\x99\x24\xcf\x08\xbe\x0d\x31\xfd\xb0\x7e\xc0\x03\xa2"
- "\x4f\x58\x3f\x54\x77\x1c\xce\xb9\xe5\x3a\x3a\x3b\xfd\xbf\xb7\x8e"
- "\xce\x0a\x9c\xa7\x7e\xd7\x73\xbd\x83\xcf\x2f\x65\x19\xc2\x0e\x21"
- "\xe0\xc3\xbd\x64\x03\xed\x3d\xc5\x92\x26\x79\xcb\x84\xad\xca\xc6"
- "\x5e\xc4\x33\x2e\xda\x37\xc4\x4c\x4a\xa9\xb1\x04\xbc\xfa\xd1\x02"
- "\x61\xbf\x61\xa4\x72\xf5\xb0\xef\x80\x8d\xa1\x59\xc4\x8c\xfc\x94"
- "\xed\xeb\x67\x86\x4e\x76\xb6\x06\xe7\x49\x61\x58\x9f\xfd\x1a\xe7"
- "\x87\xfc\xc9\xfe\x85\x96\x02\xbd\xa8\x43\x19\x38\xbd\x50\x2b\x87"
- "\xd8\xe4\x28\xd7\xc1\xce\x7e\x26\xca\x21\xaf\xf0\x25\x12\xb7\x8a"
- "\x78\xb5\x3a\xe4\x0f\xd0\x7b\xad\x12\x97\xca\x69\x4f\x09\x6e\x0c"
- "\xd4\xd3\xb7\x95\x4a\xe9\xe2\x54\x4a\x4b\x13\xe7\x18\xc3\x56\x9c"
- "\x6f\x12\xce\x25\x26\xbb\x3d\x5f\xb9\x44\x7f\x70\x57\x39\x8f\xf6"
- "\x5f\x21\xdb\x78\xaf\xa9\x3d\xc5\x0c\xf6\x87\x31\x9f\x5e\xe9\x03"
- "\xf8\x0c\x3b\x20\xfb\xe7\x7d\xab\xef\xc9\x60\x7e\x1f\xe1\xab\x4f"
- "\x6f\x64\x47\xac\xb0\xb1\xbf\x2f\xee\x88\x75\x88\xe6\xc7\x5b\x4c"
- "\xf4\xf2\x80\xe4\xab\xbd\xa1\xb5\x09\x1c\x8d\xb2\xc6\x39\xe8\xfb"
- "\x7e\xcd\xa6\x09\x78\x5a\x2a\x7c\xbc\x9f\x2d\x00\xdc\x08\xb7\x17"
- "\x1c\x5d\x1b\xf6\xb1\xdc\x27\xef\xf5\xc5\x51\x99\xd0\xfd\xdf\xe0"
- "\x80\xd2\x42\xfd\x80\x2f\x9a\xfc\xe0\x46\xe5\x38\xce\xdf\xef\xe9"
- "\x57\x38\xee\x3c\xe0\xfe\x0a\x64\xa7\xe5\xf9\xbc\x0f\xb2\x20\xee"
- "\x8a\xe1\xec\x1d\x77\xe9\xc3\xeb\xe4\xeb\xd9\xda\x9d\x7a\xac\x11"
- "\xf4\x01\xf7\xc1\xca\x7f\x26\xd6\x29\x6c\x60\x4d\xe2\xfc\x21\xea"
- "\x91\x53\xf7\xf8\xa8\xce\x33\xe2\xdc\xac\xaf\x56\xad\x07\x3e\xb3"
- "\xa8\x8e\x6c\xad\x0e\x05\xf6\xc3\x39\xc2\x7e\xcf\x23\xcb\x4b\x5b"
- "\xa3\x7b\x7c\x8a\xb8\xc7\x83\xf2\xd2\x06\xe8\xeb\x9a\x90\x0d\xaa"
- "\xb8\x5b\xf3\xf5\x21\xcd\xc6\x8c\x9e\x43\xf7\xbf\x00\xd3\xbe\xd2"
- "\x5b\xd2\x7c\x44\x1f\x7c\xa5\x8b\xaa\xe9\x1b\xd1\xff\x53\x6d\x17"
- "\xd4\x87\xc0\x8f\xc2\x06\xa6\x57\xcc\xc6\x06\xf8\xc8\x80\xb5\xbd"
- "\xb4\x7b\x3f\x77\xb3\xea\x2f\x23\xea\x0c\xfb\xfa\xeb\xf0\x39\x7c"
- "\x50\xd5\x21\x9f\x5b\x25\x65\x98\x73\xab\x84\x0e\xb9\xfc\x96\x94"
- "\x97\xb6\xf8\xf5\xf5\x5b\x3c\x7a\x69\x8f\x77\x8e\x78\x91\xa1\xe2"
- "\xb0\x2d\xe8\xb9\x38\xd4\x35\x36\xcf\x69\xae\x93\x75\xf6\x09\xff"
- "\x21\x61\x9d\x40\x9f\xb8\xff\x84\x33\x73\x05\xfc\xa3\x79\x6a\x2a"
- "\x6c\xa4\xdc\xf6\x73\xd0\x25\x4f\x90\xfa\x09\x99\x47\xb5\xf3\x9c"
- "\xd2\x33\xf2\x3d\x1e\xef\x12\x66\xe7\x3c\xda\xb9\x54\xb9\x5e\x41"
- "\xfc\x41\xee\xa8\x23\x7a\x69\xf7\x09\x3f\x0d\x6e\xe2\x47\xa9\x0d"
- "\x6e\xcf\xc1\x5d\xca\xbe\x4b\xe1\xbf\x41\xae\xcd\xbe\x27\x44\x9f"
- "\x9c\xb7\x71\x07\x64\x32\x2f\x62\x1d\x9d\x63\x94\x6f\x32\xe5\xbb"
- "\xbd\xa9\xa0\x17\x36\x66\x05\x88\x63\xdb\xa9\xb6\xed\x8d\x35\xd7"
- "\x5d\x65\x62\x19\x83\xce\xbe\x95\x1e\xd6\x54\x73\xf1\x74\xa3\x6f"
- "\xe5\x85\xf8\x73\xc9\x2f\xa6\xb0\xf1\x64\x7c\xe8\x70\xae\xa7\xf6"
- "\xef\xe6\xe8\xbf\xef\xf6\x80\xde\xcf\x86\xf5\x13\xf9\x75\x45\xf9"
- "\x2c\xe0\x9c\xc8\x83\x5b\x68\xbe\xfa\xac\x24\x03\xb6\xb0\x56\x69"
- "\x77\x03\xdb\x01\x4b\xa1\x8f\x9f\x73\x07\x1a\x70\x86\xe0\xa5\xb9"
- "\x22\xba\xe5\xfb\xae\x3b\xf0\x16\x83\x7d\x37\xe8\x4d\x07\xf3\xcd"
- "\x41\xbf\xae\xb7\x17\xb1\x79\x67\xf0\xbd\xaf\x53\xee\xf9\xbe\x14"
- "\xf5\x37\x0e\xfe\x81\x23\xfb\xf4\x2f\x1b\xd6\x3d\x04\x27\xd3\xf3"
- "\x96\x65\x6d\xcc\x5a\x6b\x5b\x01\x17\xd4\xa3\xed\x46\xc3\x71\x0e"
- "\xfb\x4d\xd8\x5f\xc1\xbf\x23\xde\xe1\x85\x62\x1d\x6a\x71\x0e\x69"
- "\xcd\xcd\x86\xce\xfb\x7f\x33\xd6\xa1\xc6\x9f\x23\xce\x61\xf8\xfc"
- "\xa7\xbf\x25\xb4\x06\x94\x77\x06\xf1\x2e\xf6\x74\xa7\x6f\x19\xd6"
- "\x91\xdc\x5f\xfa\x97\x44\xfa\x2a\x92\xfc\x59\x62\x32\xa5\xaf\xd2"
- "\xee\xbc\x12\x2e\x9a\xe8\x7d\x6d\xf8\x8e\x4d\x7f\x3e\xcd\x77\xa3"
- "\x5c\xbf\x22\x6f\x89\x66\x27\xa1\xc6\xb4\x17\x76\x1d\xca\x8e\x9b"
- "\x0b\xa4\x6e\xb2\xbf\xac\x56\x99\x68\x94\xe7\x62\xfd\x0d\xda\x1d"
- "\x2e\xb9\x36\xdf\x51\xd7\x66\x7f\xcb\x85\x6c\x59\xc2\x6b\x63\xc0"
- "\x18\x5e\xd7\x7f\x53\xcb\x0e\x18\xbf\xcd\x0e\x46\x95\x11\x2f\xed"
- "\x61\xfe\x19\xd0\x57\xca\x3b\xdb\x7e\xe1\x5f\x48\xfa\xe3\x18\x3c"
- "\xa1\x3e\x53\x1b\x83\x1f\xaa\xcf\xd3\xe8\xf9\x35\xf5\x99\xf8\xc5"
- "\xc1\x5d\xea\x33\xad\xd9\xc1\x6d\xea\x73\x02\x3d\xaf\x51\x9f\x69"
- "\xef\x18\xfc\x81\xfa\x9c\x48\xcf\xdf\x55\x9f\x2f\xa7\xe7\x59\xea"
- "\x33\xad\xc1\x41\x71\x66\x40\x7d\x37\x52\xdf\xfb\x2f\x5e\x66\x1d"
- "\x70\xc9\x73\xeb\x41\x46\xfc\x60\x95\xdc\x7b\x42\x69\x09\x84\xd3"
- "\x99\x1a\x7c\x29\xbd\x11\xed\x50\xfa\x5c\x0f\xf3\xb4\x45\xa4\xab"
- "\xfe\xdb\x06\x97\x78\xd8\xd7\x9e\x88\xf4\x1a\x35\x7d\x15\xc9\xdc"
- "\xbe\x88\xf4\x4a\x35\x3d\x8f\xe8\x62\x76\x44\x7a\xb1\x9a\x5e\xea"
- "\x61\xff\x65\x88\x48\xcf\x57\xd3\xf7\x6b\x36\x3c\x6a\xfa\x5a\x35"
- "\xfd\xb0\x87\x7d\xda\x10\x91\x9e\xa1\xa6\x13\xfd\xef\x6f\x8f\x48"
- "\x17\x74\x45\xfa\x64\xb7\xf0\x23\x05\x58\x5b\x83\x7e\x0f\x6b\xdf"
- "\x1f\x91\x67\xa9\x2c\xeb\x27\x7e\xf1\x2f\x2d\x11\xe9\x8b\xd5\xf4"
- "\x24\x8f\xee\x3b\x91\x75\x26\x8f\x47\xab\x74\xd5\x2c\x63\x3c\xbd"
- "\x3e\x64\x20\x61\xcb\x2c\xf8\xec\xf3\x59\xb8\x13\x66\xd9\xcb\x3b"
- "\x6c\x85\x9c\x77\xb0\xf3\xcb\x54\xdb\xdd\x7c\xd8\x51\xca\xfb\x75"
- "\xe7\x17\xa8\xbe\x15\xbc\xe2\xce\xdd\x16\xa4\xf9\xdf\x14\xfa\x99"
- "\xfc\x22\xe9\x2f\x5c\x8b\x3d\x03\xfd\x96\x7a\xf6\x4f\x79\xe0\x2b"
- "\x16\xb6\xe0\xbd\xd0\x81\xbb\xf3\x86\xa4\x2f\x79\x92\x83\x91\x06"
- "\x3d\x0f\xe0\x11\xa9\xcf\x92\x74\xff\x7c\x96\x32\x84\x7b\xad\x52"
- "\x17\x86\xb5\x88\xfc\xb0\x57\x8b\xcc\xeb\x61\xe7\x85\x5f\x8a\x28"
- "\xeb\xe4\x3f\x0f\x3a\xcf\x2f\x09\xdf\x27\xf2\xd7\xa8\xe9\x9f\x51"
- "\xfa\xaa\x88\xf4\x92\x71\x69\x3b\xd1\x41\x6e\xec\x2f\x1a\x1e\xe0"
- "\xbe\xc0\x00\xf7\x97\xff\x95\xfa\xfd\xb0\xb0\x11\xbc\x22\x58\xd2"
- "\x5f\x89\xfb\x36\x88\x11\x1b\xd8\xc8\xbd\xb0\x89\xa4\xf4\x4b\xee"
- "\xf1\x79\x89\xc7\x18\xe4\x65\x0f\xc2\xfe\xb5\x9f\xe1\x6c\xd6\xd1"
- "\x8b\x78\x83\x16\x8e\x7b\xdc\x5b\x4f\x33\x13\xee\xe3\xd4\x3e\x8c"
- "\xef\x5f\xb2\xbb\xb3\xbd\xec\x68\x76\x90\xd5\x52\xdd\x7b\x1f\xd4"
- "\xf8\x8b\xf3\x81\xd0\x5d\x61\xea\x03\xda\x73\x88\x98\xd8\x43\xc2"
- "\x57\xb9\x65\x1b\x6c\x0a\xee\x5b\xc8\xdf\x03\x6f\xbc\x28\xc3\xb2"
- "\x8d\xd9\x68\x6f\x5f\x48\xcf\xa9\xf2\xef\x3e\x3c\x8f\x39\xd7\x2a"
- "\x6d\xa7\xb5\x3c\x94\x27\x68\x4d\xc9\x00\x93\xf4\x62\x28\x8f\xbf"
- "\x88\xfb\x27\x43\xf9\x44\x6f\x16\x12\x1f\xbe\x70\xac\xf2\x5b\xf7"
- "\x32\xfd\x70\x39\xf1\x26\x67\x1a\xf5\x92\x3e\x0d\x67\x2a\x7a\xe3"
- "\x36\xe8\xda\x45\x3c\xdc\x72\x63\xd3\xa1\x75\x7e\xfd\xd1\x2d\x9d"
- "\xec\xb1\xcb\x99\x75\x95\x5f\x4f\x79\x86\x4e\x9a\xf3\xe0\xd3\xfc"
- "\x96\x14\xe2\x67\xf5\xaf\xd3\xf7\xb7\xd7\x35\xea\x03\x82\x5f\x19"
- "\xce\x14\xfa\xd9\x52\x63\x35\xf6\x10\x77\x7b\x10\xbc\xb8\x89\x78"
- "\xf1\x12\xa2\xff\xc6\xe0\xa6\xec\xf8\x40\x6e\xf6\x25\x7b\x73\x98"
- "\x29\x98\x9b\x94\xf0\xec\x00\x5b\xa8\xed\x3f\x7b\x37\xd2\x9e\x32"
- "\x68\x9d\x54\x41\x7b\x0a\xf4\x3e\x66\x5d\x9c\x38\x87\xc6\xb3\xa2"
- "\xff\x6b\x5c\xed\xc6\x0b\xc7\xf6\x0e\x6e\x4a\x12\xfe\x26\xd0\x97"
- "\xb1\xc6\x5a\xba\x9b\x19\x82\xea\xbd\xd4\xc2\x93\x2c\x91\xf8\x67"
- "\xbd\xb9\x9f\xbb\x7a\xd6\x32\x3d\xe2\x21\x17\x66\x09\xdd\x6a\xf4"
- "\xd1\xec\x00\x73\xe7\x7f\xc1\x0a\x73\x30\x47\xc3\x6f\x82\x4f\x83"
- "\x3d\x33\xe5\x8f\xeb\x61\xc3\x1f\x5a\xfc\xb4\x67\xf8\x89\x27\xff"
- "\x19\xe4\xe2\xe1\x2f\xa5\x7f\x8b\x80\x0d\xf7\x48\x5d\x39\xdf\x47"
- "\xda\x79\xc7\x49\x61\x37\x54\x20\xd7\xd6\xf0\x31\xbc\x3b\x70\x4f"
- "\xd6\x1c\xdb\xf4\xca\x90\x3f\x5a\xea\xef\x86\x3f\x53\xf7\x87\x64"
- "\x29\xdb\x0d\x1f\x1b\x0f\x77\x95\x92\xf3\x90\x5d\x66\xba\x6b\xc0"
- "\xbf\x72\x8f\x38\xe3\x87\xcf\x80\xfc\xdb\x5c\x9c\xc8\x9d\xf4\x65"
- "\x14\xd8\xa5\x3c\x71\xbe\x4e\xfa\x90\x0c\xc8\xbb\xf9\xd0\xf7\x3f"
- "\x71\xbe\x5e\x9c\x6f\x3c\x71\x5e\xea\xfb\x9f\x38\xdf\xb6\x7d\x2a"
- "\xee\x13\x04\xaa\xfb\x62\xce\x13\xdf\x16\x58\xdb\x67\x8e\x1f\x33"
- "\x3e\x9f\xd8\x8f\x4a\x06\xda\x6c\x57\xb0\x04\x9c\x33\xa5\x07\xa5"
- "\x2f\x56\xb9\x86\x83\x35\xfc\x09\xf1\x6d\x66\x87\x9d\x45\x49\x7f"
- "\xc7\x81\x53\xf3\x6b\x98\x8d\xfa\x1a\xcb\x8d\xe7\x8b\x84\xdd\x63"
- "\xc9\xf9\x4a\x77\x2f\xe2\x54\x05\x99\x3c\x0f\x0c\x1e\xe0\x31\xe7"
- "\x8b\x64\xfe\xe0\x77\x5b\x7b\x69\x0c\xc6\xf3\xa9\x6e\xff\x69\x95"
- "\x27\x0c\x2e\xa4\x3e\xa6\xf2\x92\xf3\x19\xf2\xbe\x79\xf0\x09\x8d"
- "\xae\x4a\x1c\x0d\x6e\x55\x71\xbd\x4d\xc2\x2d\x78\x40\xdd\xaf\x66"
- "\xe2\x99\xf6\xee\x64\x69\xbf\x12\xcc\xd3\x78\x64\x8f\x9a\x07\x65"
- "\xe8\x59\xf5\xf3\x19\xac\xa2\xb1\xcf\x55\xbf\x2f\x44\x1a\x8d\x8f"
- "\xf6\xac\x40\x1b\xc6\x35\x1e\x6d\x15\xb0\x28\x60\x51\xd4\x67\xf8"
- "\xc0\xc3\x1d\x01\x9f\xdb\x77\x9b\xcb\x2d\xe6\x80\xdf\x00\xdb\x7e"
- "\xb4\x03\x7f\x43\xa0\x9b\x54\xa7\x01\xf5\x85\xfb\xaf\x5c\xaa\xf5"
- "\x05\xed\xe1\x1b\x8d\x35\x55\xc8\xd5\x34\x66\xe4\xc1\xbc\x76\xd9"
- "\xa1\xf7\xeb\x27\x98\xc1\x86\x8e\xa7\x00\x26\x12\x66\x7c\xba\x2a"
- "\xd3\xab\xf3\xc0\x27\x8f\x84\x87\x7c\x57\x8c\x44\x1b\x72\x60\x4b"
- "\xc5\x53\x54\xf8\xa9\x31\x56\x14\xe1\x8b\x56\x7e\x53\x7e\x19\x51"
- "\x76\x46\x28\x2f\xf5\x1b\xbc\x11\xec\x12\x70\x4e\x25\xf1\x55\x69"
- "\x8b\x28\xd7\x96\xfe\x35\xf1\xc8\xc4\x43\x6e\xdf\x29\x62\x56\x12"
- "\x6f\xa5\x74\x86\xe1\x2d\xeb\x19\xa3\x8d\x2b\xb4\x36\x3c\x4c\xd9"
- "\xaf\xf5\x93\x9e\xd5\x3d\x98\x27\x85\xe7\x44\x59\xaa\x95\x83\x4e"
- "\x87\xe6\xc8\x87\xf8\xb1\xe3\xc4\xc5\xd0\xb9\x09\x2a\xad\x81\xdb"
- "\x5c\x02\x1f\x19\xaf\x83\xee\x92\xe0\x6a\x97\x38\xc4\x8b\xe5\x5e"
- "\xc8\xeb\x50\x27\xce\x1a\xa5\xbf\x51\x5e\x4d\xf5\xaa\x77\x96\xf8"
- "\x21\xb5\x0f\x24\xff\x05\xf6\x8f\x96\xeb\xbe\xbf\x3a\xd3\x96\x7a"
- "\x83\xb8\x73\x3b\x6f\x83\x1d\xd7\x69\x33\xc3\x2f\x23\x79\xee\xb8"
- "\xb0\x8f\x33\xc4\xa2\x56\x7d\x9c\x95\x9a\x9b\x04\xfc\x75\x6c\x09"
- "\x1f\xe0\x55\xb8\x3b\xc2\x37\xf2\xea\x72\x9a\x43\x47\x3f\xbb\x0c"
- "\x71\xb1\x0b\xed\xfc\x2b\xf8\xbf\x23\x7a\x89\xb8\xee\xdd\x85\xfd"
- "\x6c\x22\xec\x92\x40\x7f\x60\xf7\xcc\x63\x29\xbd\xcc\xd8\x1d\xba"
- "\x87\xa7\x33\x2c\xc6\xdd\x51\xee\x48\x23\x5e\xda\x18\x00\x3e\xc0"
- "\x46\xbd\x4b\x67\x98\x4e\xf9\x70\xaf\x34\xaf\x4c\xe8\x12\x62\x52"
- "\x82\x26\x73\x8d\xe3\x34\x9b\x20\x62\x1c\xe6\xfb\xa1\x53\xd3\x77"
- "\xe8\xd8\x2f\x79\x6c\x4c\x0a\xa5\x9b\x45\xba\x9f\xda\x2e\x8b\x49"
- "\xa1\x6f\x66\xfa\x76\x82\x7e\x15\xaa\x23\xbf\x9c\xfa\x5d\x78\x9a"
- "\x5d\x41\x7d\xe9\xe6\xa5\x31\x29\xd4\xcf\x2e\xc7\xa3\x2c\xb1\xd5"
- "\xde\x0d\xf9\x8e\xea\xf3\xc8\xd8\x8d\x54\xb6\x43\xa7\xbb\x99\xc6"
- "\x95\x0f\x9d\x08\xfd\x16\x94\xd1\x6f\x61\x90\x99\x0b\xb7\xd2\xbe"
- "\xb7\x95\xda\xc7\xbd\x56\xaa\x07\x3e\x48\x64\x5f\x68\x6c\xd0\xab"
- "\x51\xbd\x5b\x7b\x79\x17\xd5\xdd\x7d\xb4\x97\xea\xcb\x6f\x0f\xd5"
- "\xa9\xf2\xd4\x33\x69\xbc\x97\xf2\xf2\x29\x46\xea\x53\x35\x6c\xb7"
- "\x29\x2d\x8e\xd2\xe2\x42\xfc\xb0\xce\x30\x59\x7d\x8e\x09\xe5\x75"
- "\xa4\xb1\xc2\xf3\x4c\xd8\x50\xdb\x36\x45\xb1\x0e\x5d\x54\x1d\xfc"
- "\x60\x85\xeb\xd4\xcf\x40\x7d\xa5\x54\x9f\x23\x8b\xc5\x10\xad\x36"
- "\x52\x1f\x11\x23\xfa\x84\x80\x13\xd6\x98\x4e\x3f\x9d\xc6\x52\x89"
- "\x31\x29\x34\x77\x65\xb4\x1e\x68\x3c\x3a\x1a\x4f\xcc\xd6\x60\xe8"
- "\xae\x2e\xc6\x34\x19\xf2\x1c\xc6\x25\xe7\x31\x66\x15\x8d\x2b\x73"
- "\x6b\x36\x3f\x41\x63\xeb\x3e\x9a\xdd\xce\x68\xef\xb1\xb4\xda\xdb"
- "\x70\x87\xe2\x84\x84\x5b\x37\x6c\x50\x49\xde\x8f\xc9\x0c\xf9\xea"
- "\xd5\x45\xed\xa2\xbe\xc7\x51\xbf\x4a\xd5\x71\x22\xad\x2a\xc4\xd3"
- "\xeb\xa2\x9e\x53\x9f\x27\x85\xf2\x7e\x73\x9c\xc6\x88\x71\x52\x79"
- "\xc3\xad\xa8\x4f\x1d\xe7\x24\x1a\x67\xcc\x37\xc7\x49\xf8\xb4\x91"
- "\x17\xab\xe3\x2c\x51\xc7\xa9\xa7\x71\x4e\xa2\x71\x4e\x8d\x18\x67"
- "\xfc\xa8\x71\x66\xd0\x38\xb3\x69\x9c\x1d\x11\xe3\x8c\x1b\x63\x9c"
- "\x19\x1e\xb4\x51\x16\x93\x2d\xfd\x83\xf1\x46\x71\xff\x7d\x47\x54"
- "\xe8\xfe\xbb\x82\x7b\x97\x03\xc2\x07\x51\x03\xf4\x37\xd0\x1b\x41"
- "\xd6\xc3\x1d\xcf\xf4\xcd\x25\x45\x42\x77\x93\x28\x75\xd3\x82\xbf"
- "\xda\x11\xb5\x2a\x74\x77\x63\xa7\x88\x5d\xe3\x43\xba\xf0\x19\x90"
- "\xc3\x84\xee\x71\xf9\xe6\x4d\x0e\x94\x47\x59\xca\x5f\x1a\xba\x63"
- "\xa6\xd3\xdb\xa5\x2e\x7e\x4a\x1c\x9e\xe1\x0b\x4b\x9e\x09\xf0\x66"
- "\x71\x26\xb0\x23\x2a\x1c\xff\x69\x23\x6f\x02\x5c\xc4\x7d\x56\x71"
- "\x1f\x94\x95\xa4\x07\x4a\xb4\x7b\xe9\xbd\x94\xb7\x33\xe2\x5e\x7a"
- "\xaf\xe8\xc3\x90\xf0\xfd\xb0\x69\x79\x60\x93\xb8\x9f\x3e\xb8\xc3"
- "\x60\x0c\xb7\xad\x2b\x51\xdb\x36\xe2\xd9\x2b\x7d\xb3\x41\xc7\x66"
- "\x13\xf6\x36\x3b\x0c\x0b\x34\x1b\x17\x8f\x8e\xd9\xb1\x96\xc7\x8c"
- "\xf3\xb2\xc3\xb0\x6a\x84\x2f\x28\x5d\x34\xfc\xbc\x23\x3d\x2f\x74"
- "\xd7\x7c\x87\xa1\xe8\xdb\xee\x9a\x3b\xbc\x34\x4f\xb4\xde\xec\x88"
- "\x79\xae\x33\x90\x8c\x6b\xae\x11\xb1\x52\x74\xd1\x33\xd0\xcf\x0e"
- "\x9d\x01\xfb\x87\x45\x9c\x07\xe9\x0c\x5f\xaa\xb4\xd9\xbb\x3c\x18"
- "\xb0\x78\xa8\x4d\xe1\x5b\x2a\xf4\x6e\x38\x06\x5f\x19\x54\x36\x56"
- "\xf8\x39\xa7\xfa\x46\xe6\x17\xdf\x8b\x46\xbd\xa7\x8c\x7a\xb7\xf9"
- "\x88\x66\x8d\x67\xcb\x53\x36\x55\xe8\x78\xab\xcd\xdb\x98\xdd\x71"
- "\x8a\x45\x11\x2e\x9e\x44\xdf\x5a\xbb\xc5\x3d\x3f\x0b\x77\x26\x33"
- "\x77\x77\x40\xf2\xed\xc4\x2f\x75\xcc\xa6\x3c\xa7\x58\x22\xee\x99"
- "\x20\x96\x0c\xe5\xef\x11\xf1\x63\x74\x13\xde\x58\xb5\x61\x12\x53"
- "\x7e\x9a\x76\x09\xd7\x6f\xa9\x87\x2d\xc1\xcb\x43\x1e\xc4\x60\xd1"
- "\x15\xee\x62\xd3\x41\xa7\x08\x87\x3b\xb9\xfe\xb1\x7a\x2a\xd3\xfb"
- "\xd2\x50\x77\xb4\x3b\xf0\x05\xb3\x13\xfd\xec\xd1\x4d\x38\x60\x28"
- "\x60\x86\x8a\x2e\x16\x47\x78\x16\x38\x12\x58\xc8\x34\x5f\x0f\x35"
- "\xf1\xd2\x87\x40\x0d\xe1\x64\xae\x95\xfb\x07\x77\x4c\x30\x90\x5c"
- "\x5b\xa4\xe9\x2f\x4a\xa5\xaf\x37\x03\xb5\xff\x73\xe1\x97\x42\xf2"
- "\x07\x04\xdb\x09\xb7\xcb\x7b\xa6\x09\x3f\xa5\x32\x0b\x43\xb2\x8d"
- "\x6e\x42\x93\xe4\x17\xcd\x52\x17\x4d\xef\x47\x48\x3a\x2a\x96\x36"
- "\x51\x09\x94\x37\x33\x64\x13\x05\x9d\x20\x7d\xa7\x39\x74\x09\xb9"
- "\xc7\x64\x76\xa5\x07\x8d\xea\x1a\xa7\x74\xda\xb7\x51\x96\xca\x59"
- "\x44\x9c\xcb\x1d\x13\xea\xc2\xb8\x36\x01\xf6\xcd\x3a\x1a\x93\x89"
- "\xe6\xf5\x38\xc6\x05\x98\xf8\xe0\xd7\x4d\x17\xed\x39\xb2\x7f\x9c"
- "\x38\x48\xc6\x01\x16\x10\xfa\xa5\x5b\x16\x12\x3e\x9d\xa6\x39\x98"
- "\x02\xdf\x56\x6e\x6a\xe7\x68\xed\x10\x3b\x6a\xed\x63\xad\xf4\x8c"
- "\xbb\x0f\xae\x9f\xfd\x9d\x75\xda\xc6\xde\xcb\x89\x1f\x20\xbc\xe8"
- "\xaf\x44\x5d\xa0\x35\xb0\x17\x85\x0f\xc2\x56\x2f\xd5\xd5\xc9\x44"
- "\x1d\x47\x95\x6e\x76\x34\x1f\x32\xec\x7d\x0b\x5b\x6b\xbf\x60\xad"
- "\xd6\x3f\x89\x76\xc0\x6f\xbb\x72\xfa\x2e\x54\x77\x1d\xd5\x5d\xaf"
- "\xd6\xdd\x4b\x75\x27\x8c\x5f\xf7\xa2\x8c\x8b\xac\xfb\x22\xfa\xbd"
- "\x28\xf5\x62\xea\x76\x54\xf3\x20\xd1\xe1\x58\xda\xe3\x4b\xe0\x9f"
- "\x15\x77\x5c\x83\x03\xf0\x49\x33\x53\xc8\xea\x5d\x3a\xe3\x5e\xd0"
- "\x1b\x61\x1f\x52\x66\x2c\x16\xf7\x5f\xa1\x67\x57\xef\xbd\xba\x03"
- "\x27\x19\xf4\xee\x83\x3b\x8c\x25\x61\xbf\x55\xa1\xb3\x71\xa2\x7d"
- "\xc6\x43\xc2\xd6\xba\xd4\x58\x2c\x71\xcb\xb8\x1a\x75\x8d\xad\x23"
- "\x8d\x69\x10\x36\xfb\x3a\xe3\x49\x4d\xbf\xd5\x17\x1b\xd3\xa0\xd6"
- "\x65\x1b\xad\x37\x55\x1d\x09\xd9\xb2\xf2\xf3\x6c\x9b\x72\xd6\xe4"
- "\x65\x69\x17\xb4\x27\xb1\x15\x59\x0f\x65\xad\xd9\x98\x95\x69\x5b"
- "\xb9\x21\x67\xdd\xbc\xf5\x0f\x3f\x6c\xbb\x3b\x2b\x37\x77\xf5\x4f"
- "\xb3\x26\xb1\x95\x39\xab\xd7\xe5\xae\x81\x6e\xd3\x66\x5b\x72\x53"
- "\x7a\xf6\xfa\xbc\x79\xdf\x5b\x92\x3c\x4a\xb7\x89\xfb\xda\xc7\x21"
- "\xe3\xd0\xfe\x94\x48\x3c\xc6\x64\xf8\x25\xb2\x6c\xe6\xae\xc7\x48"
- "\xbe\x26\x1c\xec\xc1\x5e\x88\xfd\x07\xb2\x17\xfc\x1b\xc3\x67\xf2"
- "\x9e\x9d\xbc\xad\x4b\x37\x6d\x2f\xf1\xed\xed\x94\x06\xff\xc4\xc7"
- "\xf9\x90\xc3\x2b\xce\xb3\x75\xd3\x36\x53\x9e\xa6\xa7\x28\xcd\x1b"
- "\x6b\x76\x55\xfc\x95\x19\x24\x8f\x11\xe3\xe7\xfa\x89\xbc\x14\xbe"
- "\x86\xff\x6e\x65\xaa\x8f\x74\xbd\xdb\xe3\x87\x0d\x91\x71\x79\xc0"
- "\xc1\x41\x53\xe5\xfa\x8a\x39\x2f\x69\xdd\xf9\x3a\x71\x97\x41\x37"
- "\xed\xc7\x90\x11\xb7\x23\xee\xe2\x8e\x49\x44\xff\x87\xed\x61\x5a"
- "\x3d\x45\xe3\xcd\xdb\x09\xee\x9b\x3a\xe8\x5d\xf8\x5a\x99\x30\x69"
- "\xc1\x08\xfb\x30\x9d\x29\x81\xe9\x2e\x2b\x90\x7f\x54\x46\x77\x59"
- "\x89\xfc\xc3\x73\xe4\xdf\xb4\xc5\xf2\x6f\x74\xfa\xff\xf4\x4f\x6b"
- "\xff\xbf\x5d\x87\xff\x5b\xfe\xfe\x89\xf6\xc5\xb8\xff\x3f\x8e\xff"
- "\x7f\x52\x9e\x16\xc3\x05\xfe\x80\x6f\x84\x5b\xc7\x9f\xfa\x2b\x33"
- "\x12\x7e\x56\x95\x3d\x48\x38\xfd\x25\xb3\x16\x04\x78\xa7\xe3\x7e"
- "\x36\xbd\xf0\x14\xf1\x60\xc4\x6b\xe5\xe5\xf3\xce\xc2\x01\x7e\x82"
- "\xf0\xe6\x13\xc2\xdf\xc6\xf2\x0e\x66\x2a\xeb\x20\x3e\x2b\x4f\xc6"
- "\x9e\xc1\x79\x13\xee\x79\xb9\xe9\xbd\x65\xa3\x9f\x7d\xec\xfd\x1a"
- "\x36\x95\xae\xd6\x0c\xa2\x3d\xc7\x19\x03\xfe\x9a\x32\x58\x42\x4d"
- "\x22\x3f\xcc\x9d\xaf\x64\x72\xfd\x2b\x2b\x29\xed\xd8\xab\x4a\x4a"
- "\xf4\xab\x5b\x9a\xa3\x6d\x0f\x62\x9f\x37\xbd\xa9\xe2\xe6\xed\xe2"
- "\x1e\x23\xfd\x02\x07\x55\x1f\xd3\xb4\x3f\x4d\x79\x4b\xee\xe9\x53"
- "\xca\x54\x7d\x1e\x9e\xc5\xfd\x0d\x1a\x47\x23\x77\x6e\xa9\x47\x9d"
- "\xaf\x28\x8d\xd1\xd8\x33\x5f\xdd\x92\x12\x5d\xb0\x9a\xe9\x5b\x3d"
- "\x3d\xec\x08\xd1\x42\x9c\x8f\xd3\xba\x3b\x44\xeb\xac\x7e\x6f\x22"
- "\xaf\xa4\xfe\x95\x12\x3f\x57\x42\x7d\x3a\x30\xb8\x23\x36\xc9\xa3"
- "\x9b\x68\x55\x79\x39\x17\xad\x8b\x43\x65\x94\x67\xf9\x06\x36\xb3"
- "\x8c\xf2\x11\x6f\x57\x02\x19\x45\xf6\x6f\xf2\x2c\x82\x41\x03\xb5"
- "\xd9\x66\x7b\x00\xef\x66\xc1\x63\xa0\x6d\x1a\x87\xad\x43\x67\x16"
- "\x32\x3f\xda\xd0\xda\xa5\xfa\x4b\xa8\xfe\x36\xf5\x8c\xb1\x52\xd6"
- "\x13\xdb\x20\xe9\x58\x8c\x09\x31\x44\xe5\x3d\xb1\x18\x53\xd9\x16"
- "\xda\xd7\x87\x18\xfc\xe0\x56\x51\x1b\x2e\xcb\x36\xc6\x2d\xb8\x63"
- "\x7c\x3c\x40\x72\x8d\x22\xed\x77\x75\xe6\x5d\xb2\xac\xe4\x43\x04"
- "\xef\x11\x24\xfe\x5e\xe8\x67\x88\xff\xc8\x26\x3a\x41\x3c\x87\xb8"
- "\x9f\x41\xfc\x06\xd2\xa9\x8d\x2a\x1a\x57\x1b\xc9\xcd\x0d\xb4\x77"
- "\xd7\x83\x57\x78\xa0\xff\xdf\x18\xce\x38\xc0\x2f\xe4\xe6\x73\xbf"
- "\x88\x2b\xb5\xc3\xbc\x40\xe3\x17\x80\x1f\xe0\x11\xca\x1e\x60\x86"
- "\x61\x9a\x63\xc2\x91\x66\xe2\x3f\x88\xa7\x37\xdb\xd5\xb9\x69\x16"
- "\x7c\x81\x1a\x47\x5a\xd2\x70\xf3\x56\xda\xdf\x4d\xd4\x46\xb3\x47"
- "\x37\x4d\xc0\x42\xd2\x20\x73\xa9\xb6\xd7\x43\xe7\xe0\xa1\x3a\x38"
- "\xd1\x3a\x82\x5b\xc3\xdc\x0c\x1d\xf3\xe8\x62\x8f\xd1\x5c\x34\x20"
- "\x2f\x95\x37\x50\xfe\xc3\xb4\xef\x2f\x56\xe7\xe4\x38\xc9\x04\xc4"
- "\x07\x98\x97\xa0\x1f\x54\xa6\x85\x60\x4d\x6d\xc5\xf9\x54\x3a\x76"
- "\x4c\xf2\x30\x71\x5f\x6a\xb0\xa7\xb9\x2e\x0e\xc3\xdf\x62\x8c\x84"
- "\x3f\xc1\x42\xca\xe5\xba\xb8\x27\x22\xe6\x8e\xe4\xd2\xb8\x0c\xe8"
- "\xa1\xa9\xbd\xc3\x42\x87\xa6\xb3\xdc\x0e\xdf\x6f\x84\x33\x87\x09"
- "\x16\x87\x29\x5f\x23\x68\xf3\xf6\xbf\x12\xcd\x7d\x10\x3c\x54\xdc"
- "\x5d\x92\x47\xb5\x74\x03\x87\xbb\x74\x96\x4f\xf0\xde\xa9\x33\x2f"
- "\x45\x7d\xf4\xfe\x26\xfd\x12\x2f\x6b\x79\xcd\x51\x83\xf8\xc6\x31"
- "\xf0\xc9\x37\x49\x9d\xeb\x34\xea\x57\x9d\x76\x07\x0a\x38\x80\xb9"
- "\xa7\x31\x0a\xfd\x83\x47\x67\xa9\x83\xae\x51\x94\x1b\xce\x46\x1f"
- "\x8f\x63\x7d\x6a\xdf\x29\xbd\x1b\x3e\x73\x23\x60\xb3\x54\x9d\x93"
- "\x46\x11\x2b\x54\x17\x77\xbb\xec\x5b\xdc\x74\x7a\x37\x52\x1f\xc4"
- "\x39\x44\xdf\x70\x76\x54\x05\xca\x14\x86\xcb\x60\xfd\x10\x2e\x5b"
- "\xa8\xcc\x77\xe9\x97\x6b\x79\xe1\x37\x9f\xfa\xe1\x7a\x16\xbe\xcb"
- "\x74\x96\xf6\xbe\xe1\x24\x3d\xb5\xeb\xa7\x76\xf5\xc0\x0d\xe0\x85"
- "\x56\x47\x85\x84\xd1\x21\x9a\x3f\x81\x5f\x47\x02\x8d\x04\xf7\x38"
- "\xe2\xff\xfd\x69\x92\xbf\xb3\xb8\xd4\xfe\xb9\xc4\xf9\xe0\x04\xa3"
- "\xb7\x56\xfa\x19\x42\xbe\x50\xfc\xd7\x30\x9f\x69\x81\x9f\x21\x23"
- "\xd5\xd5\xa2\xe2\x84\x85\xf2\xb5\x85\x70\x08\xfe\x0e\x74\x71\xa9"
- "\xe0\x35\xd5\xfe\x03\xf7\xee\x92\xb0\x33\x7b\x81\x03\xc4\xc7\xbb"
- "\xe4\x3c\x9b\x97\x82\x57\x95\x78\x38\x39\x41\xab\x43\xf8\x4c\x20"
- "\x38\x2b\x54\x87\x86\x2b\x91\xb4\x81\xf2\xa6\x10\x5f\x1a\xc2\x1b"
- "\x8d\x16\xc8\x3a\xe3\x37\xab\x7c\xc8\x42\x9a\x1b\xf8\x6b\x77\x09"
- "\x3f\x58\x02\x2f\xe3\x97\x1d\xf1\x05\x40\x5f\x8f\x51\xbf\x88\x26"
- "\x4c\x3e\xd8\x67\x9e\x62\x0d\xe3\xf6\xe4\x6a\x0d\xb7\x23\xe6\x55"
- "\xe0\x76\xb1\xa0\x47\x93\x1b\x3d\xec\x5f\x3b\x35\xdc\xc7\x3a\x57"
- "\x68\x5d\x57\x6c\x14\xe7\x03\x16\xe8\x03\xc5\xba\xf7\xf7\x0a\x19"
- "\x03\xf3\xd9\x9a\xdf\x29\x7c\xe4\x6f\x57\x98\xb1\xd5\x77\x12\xfa"
- "\x91\x1e\xac\x7f\x6d\x8d\x63\x6e\xa8\x2d\x17\xe2\x18\x14\x13\x0d"
- "\xc4\x1a\xf4\x51\x9f\xe8\x9b\x11\x3e\xe1\x9a\x56\xa5\xb0\x5c\x9a"
- "\xdb\x23\x19\x98\xb7\xf8\x85\xda\x9d\x8b\x0a\x49\x03\x4c\x2a\xbe"
- "\x88\x3e\x8e\x82\xab\x45\xc2\x35\x7e\xed\xc8\xf5\x1d\x67\xc2\xfa"
- "\x8e\x84\x2b\x60\x0a\xd8\x52\x5e\x1a\xff\xc4\x3c\x0d\xae\x61\x98"
- "\x4e\x89\x51\xf1\x51\xa5\xad\xf1\x63\xd2\xd6\x0a\x19\x33\xa2\x71"
- "\x3b\xc6\x42\x7b\x0a\xda\x17\xf1\xb0\x54\xd9\xa7\xc9\x0b\x9c\x8a"
- "\x0f\x78\x58\x41\x8a\x46\xc7\xa8\x3f\x2b\x81\x4f\x98\x2b\x8d\x76"
- "\x40\x57\x26\xfb\x3e\x25\x49\x9b\x0f\xf4\x3b\x92\x26\x50\x9f\x84"
- "\xbd\x57\x78\xcc\x53\x7e\x4c\xe5\xe2\x41\xdb\xc2\xfc\xd5\x94\xec"
- "\x91\x63\x9f\x92\x8a\xb1\x03\x27\xec\x1b\xa1\x2f\x93\x7b\x99\x47"
- "\x67\x3a\x3e\x92\x5e\x99\x3e\x11\x76\x19\x2a\x3f\x06\x7a\x6f\x7f"
- "\x40\xe6\xc7\xfe\x46\xf9\x85\x6e\x5e\xdd\x0f\x53\xb0\xff\x51\x5a"
- "\xb3\x0a\x83\xe3\x94\xbf\x09\xf7\xb8\xe1\xcb\xe7\x92\xe3\x52\x16"
- "\x24\x1a\x7d\x18\xb1\x33\x28\x5f\x49\x2b\xc9\x01\x81\x09\x8c\xd5"
- "\xa8\xfc\x26\xe8\x04\xdf\x94\x76\xc9\xa6\x6e\x16\x63\xff\x1e\xff"
- "\x7b\x97\x2e\xe1\x71\x5a\x47\x7e\xf8\xcb\xa4\xba\x6d\x5d\xba\xcb"
- "\xb2\xa8\xdd\x04\xf5\xd7\x4a\xbf\x77\xd3\xef\xe5\xf4\x7b\x33\xfd"
- "\x4e\xa3\xdf\x19\x94\x5f\x51\xf3\x27\xd3\x7b\x34\xa5\xdf\xa4\xfe"
- "\x52\x1f\x13\x70\x9e\x9d\xfa\x14\xf8\xca\x07\x90\x9e\xf8\x39\xde"
- "\xe9\xf7\x43\x75\xdc\x2d\x72\x6d\x27\x1c\xa4\x7a\xf2\x91\x0f\xfb"
- "\x1a\xa5\xd9\x29\x4f\x19\xea\x86\x5f\x05\x7a\xbe\x3d\x82\x3f\xa5"
- "\x7a\x2e\x7d\x94\x7e\x17\xd0\xef\x0d\xf4\x9b\x47\xe5\xe1\xcf\x33"
- "\x95\x60\xd0\x16\xa6\x17\xe6\xa5\x99\xf9\x72\x3e\x69\x0e\x9b\xb0"
- "\xde\x35\x7a\x00\x7c\x1a\x91\x6f\x95\xcc\x27\xe5\xd7\x4b\x67\x6b"
- "\x73\x17\x10\x73\x67\x69\x0f\xd0\xdc\x51\xfd\xb7\xa3\x3c\xfd\xde"
- "\xa1\xfe\xa6\xa8\xbf\x77\xaa\xbf\xff\xaa\xfe\x2e\x51\x7f\x97\x7a"
- "\x74\x09\x3e\x95\x37\x21\x98\x25\x08\x3d\x39\xad\x5d\xb5\xdd\xc4"
- "\x24\xc8\xd7\x44\xff\x6f\x46\x1c\x47\x6a\xb7\x46\xd3\x5b\x43\xf7"
- "\x33\xbc\x23\xe6\x92\x3d\x42\xf7\x73\x69\x43\x04\x2d\xac\x34\xe9"
- "\x52\x18\xf1\x4e\x13\x6a\xf4\xbc\x52\xad\xc7\xa4\x57\xcf\xeb\x11"
- "\x0f\x06\x71\x35\xe1\xa7\x50\xc8\x51\xb1\x2b\x0e\x60\xbd\x0a\x9d"
- "\x7e\x19\x7c\x14\x99\xab\xe8\xaf\x8e\x64\x8a\xfd\x1a\xbd\x87\xbc"
- "\x24\xe5\xfc\x89\x7f\x1a\xdc\x91\x68\x0b\xcb\xf9\x97\xb6\xc9\xb3"
- "\xcd\xcb\x7e\x4e\xe9\x11\xf2\xff\xa5\xf0\xd1\x75\x33\xc1\xba\x9d"
- "\xc6\xb3\xa0\x43\x97\x98\x41\xbf\x37\x76\xca\x31\x27\x6b\x63\x56"
- "\xe7\xca\xae\xc1\xbc\x53\x97\x10\x20\x7a\x98\x03\xfc\xee\x08\xd1"
- "\xe5\x84\x00\x7e\x55\xfc\xa1\x79\x4e\x78\x19\xf3\x1d\x41\x4f\x52"
- "\xc2\x74\x3a\xf1\xf0\xc8\x79\x31\x1f\x0e\x48\x7e\xa1\x9d\xd6\x25"
- "\x70\xa0\x78\xd4\xba\x4c\xc5\xba\x54\xcb\xfa\x47\xd2\xf8\x29\xa9"
- "\xa0\xf1\x6a\x1f\x09\x6f\x13\x32\x31\x37\x1e\x5d\x62\xbb\xba\x27"
- "\x21\x26\xc3\xcd\x94\xbe\x4c\xf6\x53\xa6\xab\x6d\x11\xfe\x25\x2c"
- "\x01\xfe\x6b\xe9\x2a\x7e\xa3\x9e\xc5\x98\x6b\x2d\x5d\xad\x9f\xf0"
- "\x34\x61\x01\xd6\x8f\x96\x2e\x71\x72\x72\x29\xe8\x0d\xca\x06\x84"
- "\x2d\x23\xc9\xdf\x0f\x34\x51\xbf\x2f\x6b\x24\xfe\x02\xf7\xc4\x8f"
- "\x6f\xdf\xc2\x4c\x9b\xaa\x59\xac\x5c\x9b\x97\x7d\xae\x95\x15\x3a"
- "\xfd\x1d\x97\xb5\x68\x34\xaa\x42\xd0\xb3\xf8\x94\x91\xb4\x72\xea"
- "\x1a\xee\xb4\x04\x02\x26\x73\xe9\xd1\xc0\x02\x41\x73\x69\xdd\xd7"
- "\x0c\xee\xb0\x1a\x3c\xec\x95\x38\x75\x2f\x69\x11\xbc\x9a\xce\xfa"
- "\xdd\xa3\x75\x92\x76\xc9\xba\xad\x21\xfa\x17\xc1\x87\x08\x5a\x8f"
- "\xb6\x50\x17\xed\x2b\x71\x3e\x47\xda\x25\x92\x7e\x5b\xd3\x3c\xec"
- "\xca\x04\x8d\xb6\x62\x7f\xb2\xe8\x98\xbd\xfc\x01\xb9\x3f\x29\xd0"
- "\x81\xd9\x7d\xc2\x3f\x5d\xab\xbd\x97\x61\xdf\x84\xff\xef\xf4\xcd"
- "\x93\xe0\xb3\x2a\x8d\xfa\x7a\x37\xf1\x67\xfb\xd5\xb3\x19\x92\x73"
- "\x2f\x0f\x42\x96\x55\xe1\x4a\xeb\xe9\xf2\x13\xea\xbc\x1c\xa7\xfe"
- "\xec\x07\x6d\xdf\xbe\x51\xc6\x54\x82\x3e\x48\xc4\xf8\x02\xcf\x6a"
- "\xe5\x7e\x11\xcb\x60\x87\xb5\x3b\x42\xc7\x25\xed\xce\x74\x97\x1d"
- "\x15\x31\x2a\x4a\xcd\xa5\x52\x9f\x78\xf9\x06\x99\x7e\x79\x9a\xb4"
- "\x43\x30\xab\xeb\xe9\xf2\x25\x51\xd6\xc4\xbf\x08\xfd\xeb\x84\x98"
- "\xab\x25\x3f\x72\xf9\xc2\x08\x9b\x1f\x01\x6b\xe1\xe7\x78\xc7\xe5"
- "\xa9\xe1\x75\x71\xf9\x6c\x94\xa1\xb2\x3d\x94\x9e\xad\xa5\xcb\xbd"
- "\xc6\xbc\x58\xd5\x99\x55\x5e\xb2\x2d\x85\x11\x6d\x9e\xb0\xc7\xa9"
- "\xad\xdf\xcb\x9b\x65\xfb\x72\xfd\x62\x8c\xc0\x07\xac\xe1\x80\xf0"
- "\x2b\xb6\x42\xf8\xc2\xa1\xe7\xaa\x80\xb6\x76\x25\x7f\x27\xee\x9c"
- "\xc9\x75\x7b\x79\x7b\x44\x3f\x2a\x55\x5c\x3d\xde\xf7\x90\xd5\x44"
- "\xdf\x7c\x1e\x9d\x51\x9e\x65\xe9\xac\x52\xc6\x78\x62\xa0\x4d\x19"
- "\xe0\x7e\xe8\xa6\xa1\x4f\x80\xce\x46\xb5\x57\xc5\x59\x89\x0f\xbe"
- "\xd2\x2a\x69\x3d\x84\xfd\xa3\xc5\x31\xcd\x3f\xda\xe0\x8e\xa9\x4b"
- "\xc2\xba\x63\xeb\x7e\x75\x5c\xa5\xd4\x5e\x8d\xab\xf0\x3d\xe0\xd2"
- "\x73\x72\x8d\x59\xab\x80\xc7\x6e\xc2\x3d\xda\x7f\xaa\x8f\x14\x88"
- "\xb2\x45\x1a\xee\xd1\x1a\xcd\xec\xd2\x4d\x9b\x5c\x95\xc8\xab\x69"
- "\x4e\x61\xb7\xbf\x96\xf0\x20\x48\xbf\x99\xf2\x57\x17\x87\x5f\x15"
- "\xe7\xab\xa9\x2c\xad\xff\x59\x8d\xda\x1c\xf8\x62\x17\xd5\x0b\x1c"
- "\x2b\x84\x7d\x63\xb2\x38\xeb\x07\x8e\x01\xbf\xc4\x99\x3f\xe1\x9a"
- "\x65\xdb\xbf\x31\xe0\x99\xf0\x99\x42\xef\xe8\x2f\xf0\x6c\x70\xc7"
- "\x34\xa3\xe6\xf3\xd8\xa3\x9b\x2a\xcf\xdb\x76\x4c\x9b\xae\xd9\x86"
- "\x03\x0f\xf3\x66\xb1\x4b\xa9\x7e\x5b\x93\xcd\x07\xdd\xf9\xdf\xdc"
- "\x81\x3b\x19\xf2\x02\x76\x92\x5e\x5e\xd6\x44\x65\x22\xe6\xdf\x2c"
- "\x6c\x59\x8f\xac\x12\xfa\xcc\x29\xf4\x6d\xed\x48\x9a\x13\xe3\x17"
- "\x7c\x25\x51\xc7\xab\x12\x18\xce\xe9\x69\xaf\x99\x56\xa9\xf1\xc3"
- "\xf3\x29\x8d\xf2\xa0\x7f\x90\xc1\xdb\xe8\xb9\x12\xfb\xf4\x38\x7a"
- "\xe7\x05\xd0\x15\x81\x66\x40\xf7\x04\x3d\x18\xc1\xfa\x58\x97\x6e"
- "\xe6\xe4\xa3\xf0\x5f\xb4\xfe\x9b\x7e\xaf\x0b\xf3\x79\x3f\xfc\x69"
- "\xd9\x72\xd8\x94\x0e\xdd\x15\x3e\xe8\x9d\x1c\x5f\x43\xc7\x33\xdd"
- "\x3a\x52\xc7\x33\x3d\x5b\xfd\x2b\xa0\x3f\x4f\xf8\x6f\x86\x5d\x7d"
- "\xee\xbd\xf0\xdf\x8c\x12\x99\x77\x46\x15\xfd\xd5\x49\x58\x59\x69"
- "\xad\x4c\x2f\xd0\x60\x05\x9a\x02\x1a\x0b\x3b\x1b\xac\x73\x5d\x80"
- "\xc1\x5f\x12\xcd\x13\xf5\x7b\xfb\xb5\x2b\x5c\x5b\x20\xd3\x4e\x17"
- "\xb1\x0b\xe0\xbf\xf8\xa2\x6c\xbd\x74\xd3\xc5\x7c\x0a\xff\xb2\xba"
- "\xe9\x76\x6a\x3b\xa1\xe2\x0c\x33\xd8\x73\xd8\x0c\xe8\xd0\x2d\x41"
- "\xee\x82\x0c\x0c\x9c\x20\x18\xb4\xf5\xe8\x66\xfc\x3c\x6f\x2b\xd3"
- "\xd3\xf7\x99\xf4\x9c\xa1\xf1\x52\x54\x26\x2e\xca\xcf\x12\xc0\x43"
- "\xdd\xb1\x95\xcd\x1c\xdc\x31\x63\xb1\x36\x57\xe0\x33\xa0\xc7\x0b"
- "\xc5\xbb\xd2\x4d\x17\xb6\x00\xf0\xe5\xef\x01\xdc\x34\x5a\x75\x06"
- "\xba\xeb\x19\x49\x51\x3e\x16\x27\xf7\xa1\x19\x45\x34\xaf\x29\x12"
- "\x5f\x66\x2c\x21\xdc\x3f\x16\xd1\xcf\x7f\x89\x78\xde\x81\xf2\x16"
- "\x1f\x78\xb8\xf1\xe0\x33\xe3\xa8\x06\x9f\x0a\xe1\x03\x94\xd9\xc5"
- "\x7c\x07\x78\x2f\xf5\xad\xc5\xbe\x85\x19\x7b\x74\x57\xbc\x45\x63"
- "\xc4\xdd\xe0\x66\xa9\xe3\xbf\xe2\x35\x4d\x4e\x97\xfd\xbe\x62\xab"
- "\x65\x5b\x14\x83\x6e\x1e\x3e\x23\x85\x2d\xe6\x59\xab\xd0\xc7\xbb"
- "\x03\x8b\x99\xab\x70\x11\xf2\xdc\xa5\xee\x65\xc7\xfb\x1c\x56\x76"
- "\xc4\xba\x98\xd6\xf1\x15\x4b\x3d\x7a\xb6\xf2\xa2\x6d\x5e\x75\x57"
- "\x2c\x55\xe1\xdb\x22\x6c\x45\x74\x57\x5c\x8e\xbd\x04\xba\x01\xda"
- "\x47\xc0\xa3\xc5\x53\xdd\xfb\xb5\x75\x43\xfb\x44\x13\x95\xb1\x4a"
- "\x3d\x66\x7f\x2a\x3d\x27\xc0\x6f\x8d\x90\x1f\x64\x7e\x93\x3c\x37"
- "\xb8\xa2\x3d\xc4\x6f\x53\x3e\x94\x13\x36\x84\xba\x19\xbd\xe9\x41"
- "\xe8\x12\x66\xf4\x62\x6c\x2a\x2e\xd2\x7e\x35\xd3\x18\x5e\xb7\x33"
- "\x96\x88\x75\xdb\x1b\xb9\x2e\x67\x26\x85\xe5\xd4\x69\xc7\xe7\x55"
- "\x31\xdb\x58\xeb\xd0\x6e\xc6\x5e\x35\x73\x57\x45\x05\xaf\xab\xd4"
- "\x2b\xdf\xdf\x5e\xce\x4c\xba\x52\x02\x1b\xd6\xd9\xc6\x8c\x4b\x69"
- "\x3d\x1e\xb4\x98\x2e\x4b\xbd\x23\x6f\x22\x2f\xb4\x32\x7d\xd9\xb9"
- "\x89\xc6\x59\xfe\xcb\xea\x78\xd4\xb5\x2b\xee\xce\xc3\xd9\x77\x25"
- "\xfb\x6a\x2d\x8b\xba\x83\xa8\xdc\x55\x26\x66\xf7\xe8\x66\x35\xe0"
- "\x9e\xfb\x11\x13\x78\x91\x59\x0d\xa8\xb3\xa0\x86\x19\x0b\x3a\x79"
- "\x77\xe9\xc3\xd1\x46\xda\x7f\xe3\x68\xdf\x28\xb9\xc4\x74\x59\xdd"
- "\x30\xd5\xf1\x6e\x86\x28\x57\x3f\x7e\xdf\x6c\x37\x8f\xdd\x37\x7b"
- "\x62\x97\xce\x76\xe7\xc5\xf5\xed\x4a\x5f\xb8\x6f\x57\xfa\xfe\x17"
- "\xfa\xf6\x49\x44\xdf\xe2\xc2\x7d\xcb\x46\xdf\x4e\x5c\x5c\xdf\x66"
- "\x2f\x08\xf7\x6d\xf6\x82\x7f\xb2\x6f\x87\xc6\xef\xdb\xac\x47\xc7"
- "\xee\x5b\xfe\x65\x5d\xba\x59\x5b\x2f\xae\x6f\x73\xf2\xc2\x7d\x9b"
- "\x93\xf7\x3f\xe9\x5b\x61\x0d\x3f\xd9\x3a\x9d\xc1\x9f\xa6\x09\x74"
- "\xbe\x4b\x77\xe5\xb6\xad\xd3\x85\x1d\x77\x3c\x3d\xdf\xec\xa8\xe1"
- "\x7f\x97\xbc\xcd\xac\xf3\x72\x4f\x9b\xe5\x25\xfc\x95\x76\x25\xba"
- "\x2b\x3d\xc2\xce\x25\x6a\xea\x01\xee\xe4\x81\xeb\x7d\xb0\x19\x0c"
- "\xc0\xb7\x0b\x7c\xc1\x37\xbf\x3a\xe0\x47\x1c\x8e\xf6\x7d\xe7\x0c"
- "\xec\xd5\x01\xaf\x7e\x70\xc7\x95\x73\x35\x7f\xae\x5a\x59\x4b\xf5"
- "\x85\xe8\xd1\x95\xab\xef\xc8\x66\x16\xd0\x23\xfc\x22\x9e\x66\x45"
- "\xe1\x44\xe3\x1d\x5f\x63\xdf\xbf\x32\x5f\xbb\xaf\xab\xd5\xb5\xbc"
- "\x7b\x22\xb7\x14\xb0\x28\xdc\x19\x16\xbe\x1f\xad\x5e\x36\xbb\x80"
- "\x45\x2f\xcf\xa7\xfa\xfd\x2c\xc3\x92\x4f\x75\x13\x3c\x24\x2f\x7f"
- "\xe5\x5b\x51\x6b\x99\xa9\x8a\xea\xc6\xef\x1d\x56\x07\xdf\xbe\x8b"
- "\x19\x70\xb7\x18\x77\x84\xe5\xfd\xe0\x09\x46\x6a\xc7\xa3\xb5\xf3"
- "\x2d\xf0\x33\x4b\xf8\x5d\xf5\x6e\x18\x7e\x57\x6d\x08\xc3\xef\xaa"
- "\xef\x4a\xf8\x5d\x95\x1c\x86\xdf\x6c\xdb\xc5\xc1\xef\xaa\xb5\x61"
- "\xf8\xc9\xb2\x17\x86\xdf\x55\x2f\x8c\x0f\xbf\xab\x1a\xc3\xf0\x93"
- "\x75\x8d\x03\xbf\x09\x63\xc3\xef\xaa\xe0\x3f\x07\xbf\xd9\xb6\x7f"
- "\x12\x7e\xb1\x12\x7e\x73\x74\x61\xf8\xcd\x7e\x23\x0c\xbf\xd9\x9b"
- "\x25\xfc\x66\xdb\xc3\xf0\x9b\x93\x71\x71\xf0\x9b\x7d\x28\x0c\x3f"
- "\x59\xf6\xc2\xf0\x9b\x7d\x62\x7c\xf8\xcd\xf6\x87\xe1\x27\xeb\xba"
- "\x38\xf8\xcd\xb9\x95\xe0\x16\xa7\xc2\x2f\x6e\x7c\xf8\xcd\xc9\xf8"
- "\x27\xe1\x67\x91\xf0\xbb\xfa\xf6\x30\xfc\xe6\xf4\x87\xe1\x37\xe7"
- "\x4d\x09\xbf\x39\xf5\x61\xf8\x5d\x5d\x77\x71\xf0\x9b\xd3\x1b\x86"
- "\x9f\x2c\x7b\x61\xf8\x5d\x3d\x6b\x7c\xf8\x5d\xbd\x30\x0c\x3f\x59"
- "\xd7\x38\xf0\x9b\x38\x36\xfc\xae\xde\xfa\xcf\xc1\xef\xea\xba\x0b"
- "\xc1\xef\xe2\x78\x8d\xab\xc7\xbd\xff\x7e\x91\xf5\x04\xc6\xab\x07"
- "\x30\x84\x7d\xa2\xb2\xe3\xea\x40\xad\x32\xc1\x28\xef\x70\x5c\xdd"
- "\x40\x32\xcc\x6d\x1d\xba\xef\xdc\x55\xab\x44\x1b\xb9\xf3\xef\xc7"
- "\x15\xe7\xc9\x62\xbe\x6d\x82\x41\xd9\x36\xd1\x00\x7f\x06\xe3\xc6"
- "\x5c\xd7\x7d\xe7\x60\xd4\xe5\xec\x0a\xdc\xd7\xdb\x4e\xfc\x1a\x9e"
- "\x07\x77\x7c\xa7\x81\x78\x91\x94\xd1\x30\xc9\x5c\x93\x2b\x82\x7d"
- "\xe6\x64\x65\x6e\x58\x97\xb9\x7a\x5d\x9e\x6d\xf5\x43\x8f\xe4\x8e"
- "\xf4\xa1\x2f\xe2\x64\x16\x63\xfe\xbe\xe3\x0f\xf9\x98\x71\xf2\x7c"
- "\xf8\xea\xb3\x5f\x09\xdb\xb4\xa4\x85\x22\xae\x81\xd9\xb2\x84\x0f"
- "\xa7\xed\x4e\xb9\x8a\xbf\x23\x7c\x10\x0e\x67\xef\x26\x79\xaa\x17"
- "\x7e\x65\x54\x7f\x85\xbd\x5d\xba\x6b\x7f\xc0\x63\xa7\x34\xc2\xa6"
- "\x43\xdc\xed\xd0\x25\x69\x77\xb0\x9a\xb9\x29\x66\x89\x52\x3a\xa5"
- "\x91\x97\x4d\xa9\x07\x0c\x5a\xe1\xff\x6d\x63\xd4\xcc\x0e\xdd\xdc"
- "\x04\x1e\x1b\xb3\x84\x97\xc6\x2c\x55\xcf\x38\x96\xc2\x5e\x34\x65"
- "\x0b\xff\x1b\xea\x53\x79\x41\xc4\x2d\x71\x49\x7e\x30\xe9\xa8\x65"
- "\x9b\x2d\x0a\x79\xe1\x87\x11\xfe\x09\xb5\x58\x55\xe8\x37\xf2\x12"
- "\x3f\x7e\x1b\x95\xbf\x0d\xb1\x3a\x43\x75\xc8\x3e\x4d\xe9\xd1\x5d"
- "\x63\x10\x63\x29\x35\x7a\xfb\x1e\x4b\xdb\x2d\xe2\x45\x0a\xb8\x5e"
- "\x77\x9e\xc6\xe0\x15\x71\x3e\x03\x67\x45\x9c\x4f\xb5\xcc\x0c\x2a"
- "\x23\xe8\x29\x7c\xaf\xca\x3a\xae\x3b\xa1\xf5\x8b\x78\xe8\x49\xf4"
- "\xfe\x61\x44\x1b\x97\xd0\xfb\x6b\x11\xdf\x4d\xf4\xfe\x1c\xf1\xa1"
- "\x93\xd5\xef\xb1\xf4\xbe\x19\x7c\xa9\x8c\x91\x59\x24\x6d\xa2\x75"
- "\xd7\xad\xa2\xb4\x38\x35\xcf\x64\xca\x73\x3b\x78\x5d\xb5\x8e\x78"
- "\x7a\x9f\x03\x99\x51\xfd\x9e\x40\xef\x31\x38\x17\x50\xbf\x5f\xda"
- "\xa3\xbb\xf6\x34\xbd\x7f\x47\xfd\x4e\x7c\xfd\xb5\xc2\xd7\x16\xc1"
- "\x7d\x31\xc6\x44\xb0\xaf\x06\xdc\x09\xd6\x8b\xb9\xc9\xd8\x4b\xf2"
- "\xaa\x03\xf3\x88\x71\xba\xb6\xf4\xb0\x0e\xdd\xb5\x97\xe3\x5e\x9e"
- "\x9c\xab\x29\x8d\xd2\x3f\x90\x3e\x8d\xd2\xad\x48\x87\x6d\xb9\x52"
- "\x36\xa5\x1a\xcf\x04\xd3\xd7\x00\x43\xb5\x2d\x92\x89\xae\x4d\x51"
- "\xe7\x99\x60\x07\x1f\xbe\xac\x68\x9f\x3a\x17\xd4\xb7\x89\xf4\x7d"
- "\xaf\x7a\xee\x91\xbd\x3c\x30\x2c\xef\x17\xe9\xae\xcd\xfe\x6f\xf9"
- "\xac\xa0\x72\x92\xee\x5d\x7b\x40\x8b\x61\x48\x69\xc2\x57\x06\xf0"
- "\x13\xfa\x15\x6f\xac\xb1\x5d\xf8\x68\x21\x1c\xd5\x70\x05\x78\xc2"
- "\x27\x7c\xc7\x25\x75\x35\xd7\x86\xee\xff\x52\x59\x9b\x1a\xf7\x81"
- "\x49\x39\xe1\x3a\x16\xb6\x2f\xba\x46\xd0\x87\x88\x6f\xd3\x23\xbe"
- "\x69\x7e\x09\xa5\xcf\xa9\x1d\xd7\x2d\x8c\xf8\x56\x35\xea\xdb\xca"
- "\x88\x6f\xc5\xa3\xea\xb4\x47\x7c\xcb\x1b\x55\xae\x34\xe2\x5b\xc6"
- "\xa8\x6f\x07\x22\xbe\xa5\xaa\xdf\xa2\x28\xdd\x15\xf2\x91\xa8\xbb"
- "\x26\x45\x4d\x27\x5a\x7f\x5d\x7b\x44\x7a\xb2\x9a\x8e\xf6\xbd\x1e"
- "\xf6\xe7\xe3\x6a\xba\xc0\x73\xc2\xa3\xab\x65\x1b\x73\x4d\x11\x6d"
- "\x30\x39\x87\xc6\x76\x39\x7f\x49\xf9\x16\x9d\x6d\x22\x70\xca\xb2"
- "\xad\x08\x31\x84\x2a\xa5\x3f\x30\xb9\x0e\x45\x1c\x6a\xc4\xca\xa5"
- "\x7c\xe3\xd1\xc6\xb1\x6d\x04\xe7\x16\x69\xf7\x58\x83\xa5\xc6\xe3"
- "\x4a\xa9\x05\xe7\x23\x33\xe1\x37\xcc\xd1\x0b\xdf\x31\x5a\x4c\xc2"
- "\x21\xe6\xce\x1b\x2c\x6a\xf5\x8b\xfb\xb6\xb8\x0f\x61\x86\xdf\xb3"
- "\x56\xa1\xdf\x39\x2d\xe3\x12\xe2\x7e\x6f\x99\xf1\xf8\xa6\x5e\x36"
- "\xdd\xfe\x3d\xde\x09\x39\x4f\xd2\x84\xb9\xa0\x27\x16\x95\xa6\xed"
- "\x12\xb6\xde\xba\x79\xc9\x48\x73\xf7\x0a\x3d\xb3\xb1\x4b\x37\xaf"
- "\x48\xfb\x2e\xc7\x3b\xaf\x48\xc8\xd2\xea\xbd\xc2\xc1\x1d\xf3\x92"
- "\x42\x71\x33\x75\xf3\x8a\xfb\x63\x13\x93\x28\x6d\xf1\x48\xfb\xc6"
- "\x79\xf7\xa2\x4e\x8c\xc3\xa3\x9b\xeb\x47\xdd\x94\x27\x23\x64\xdf"
- "\x48\xe9\x9b\x02\x6c\x2a\xf5\xad\x4b\xab\x9f\xbe\x93\xfc\x3f\x57"
- "\xc8\x95\xa8\xb3\xbf\x6c\x71\x1a\xa5\x55\x79\xf4\x9f\xdb\xa4\x7d"
- "\xe4\xbc\x3a\x0f\xeb\x48\x1e\x6f\xff\x13\x3a\x49\xd3\x94\x36\x5e"
- "\x3a\xa5\x9d\xd6\x7c\xb3\xf4\x03\x30\xa5\x4d\xca\xf2\xf3\x4e\x23"
- "\x16\x19\x62\x78\xe3\xdc\x51\xd2\x9d\xeb\x85\x3d\x04\xd2\x08\x36"
- "\x07\x88\x3e\x0b\xfd\xf3\xc5\xad\xc9\x79\x62\xff\x83\xef\x26\xdc"
- "\xb9\xc0\x1d\x8e\xc1\x1d\xd7\x2f\x0d\xc5\x7a\xd0\xee\x13\xe8\xae"
- "\xff\x39\x74\x7c\x15\x8a\xec\xe3\xe8\x3e\xa0\xbf\x54\x57\xef\xb8"
- "\x7b\xa9\x69\x8a\xd4\x83\x96\x9b\x65\x6c\x59\xdd\xf5\x6f\x46\x59"
- "\xa7\x75\x53\x5b\x0d\xa1\x18\x17\x94\xa7\x1c\x36\xc1\x54\x7f\x68"
- "\x9c\x39\xa2\x8d\xe3\x52\x4f\x7f\xbd\x97\xe8\x58\x73\xc5\x10\x33"
- "\xa8\xe9\xde\xd6\x80\x1f\x77\xeb\xc7\xf4\xc1\x85\x3d\x52\xf8\x6f"
- "\x2a\x9f\xd2\x8c\xfb\x13\xf3\xfd\x5a\x9f\xe7\x7b\x61\xb7\x8f\x3e"
- "\x4b\xd8\xce\x3f\xa9\xc1\xb1\xec\x1c\xd5\x5d\xf8\x05\xeb\xd4\xcd"
- "\x7f\x14\xf6\x2d\x02\x26\x5b\x34\x9b\xab\xf9\x8f\x8a\x7c\x43\xa1"
- "\x3c\x42\xdf\x01\x7b\x5f\xc0\xa9\x16\x7e\x07\xa8\xce\x72\x9a\x0b"
- "\x11\xc7\x56\x37\xff\x0d\xa1\xdf\xa4\xef\x62\xdc\xc2\x9e\x2d\x39"
- "\x41\xe2\xca\xfc\x43\x1e\x5d\xb2\x4d\xe2\xa0\x4c\x43\x0c\x78\xd8"
- "\x21\x9c\xd1\xcd\x2f\x43\x2c\x59\x82\x47\x3b\x7c\xd7\xb5\xfa\x68"
- "\xbd\xe4\x0f\x01\x17\xda\x11\x33\xd0\xa3\x9b\x2f\x63\x59\x99\x00"
- "\xf3\xf9\x76\xb4\x0f\xd8\x22\x8e\x2e\xc1\x74\x60\x70\x47\x72\x48"
- "\xff\x81\x98\xbd\x94\x67\x5c\xdf\x8d\x80\x51\x90\xfa\xdc\x4a\xfc"
- "\xaa\x6b\xea\x17\xe8\xdf\x27\x8a\x79\x4a\x33\xec\x27\xe9\x59\xfa"
- "\xbe\x28\x95\x73\x27\xf1\x20\xf9\x60\x94\x75\xfa\xac\x56\x89\x0b"
- "\x32\x8e\xb9\x2e\x39\xf5\xff\xb1\xf7\x3d\xf0\x4d\x55\x67\xff\x27"
- "\x69\x80\x80\x49\x13\xb1\x73\xc1\x15\x8c\xae\x6e\xd1\xa1\x56\x45"
- "\x45\xc4\x59\x15\x1c\x28\x52\x74\xa0\x55\x10\x8a\xfc\x0b\x5a\x20"
- "\x94\x52\x02\x94\xfe\x13\xbb\x52\x93\xd2\x39\xe6\x5b\xa4\x2d\x15"
- "\x71\x2d\x1b\xba\x6e\xb0\xfd\xba\xbd\x30\xe3\x2b\xec\x2d\xda\x36"
- "\xd5\x1f\xfc\x6c\x4a\x1d\x69\xd7\x61\x65\x05\x62\x29\x34\xb4\xc9"
- "\x3d\xbf\xe7\xb9\xe7\xa6\xb9\x69\x93\x36\x49\x0b\xe2\xa4\x9f\xcf"
- "\xfd\xdc\xde\x73\x9f\x9c\x7b\xce\xf3\x7c\xcf\xf3\x3c\xe7\xdf\x73"
- "\x04\xfe\xf1\x67\x5e\x14\xa4\x32\x3e\x30\xfa\xbb\x64\x6c\x5c\x26"
- "\xfa\xc7\x50\xae\x52\xef\xb8\xcc\x5d\x32\x7e\x4c\x4d\x58\x63\x0d"
- "\xef\x0e\x88\xca\xdc\xc1\xef\x03\x6c\xc7\x3e\x75\xec\x62\xfc\x96"
- "\x19\x63\x8b\x21\x2e\x4e\x89\xf1\x1f\x3b\x15\xcb\x89\x6b\xf3\xdc"
- "\xca\xc8\x56\x6a\x8e\x6c\x43\x3e\xc3\x6f\xd2\xa0\x2d\xf8\x1d\x5b"
- "\x45\xbd\x89\xe7\x9e\x74\xe6\xdc\x35\x5e\x74\xf6\x2e\xd8\xc1\xbb"
- "\x5e\xf4\xd8\x39\xb4\xd1\x18\xe7\xa1\x27\xcd\xfc\x9c\x06\x7c\x1c"
- "\xad\xe0\xe3\xf8\x1d\x2b\xe2\xe3\x1c\xde\x41\x62\x71\xaf\x31\xae"
- "\xd3\x46\xbc\x51\xc5\xb3\x95\x18\x3b\x19\xe3\x40\x5a\x36\xdc\x0d"
- "\xe5\xbd\x5b\xf9\xab\xeb\xf9\xfd\x8d\x1d\x96\x3b\xda\x71\x8d\x4e"
- "\xdb\xc9\x34\x3e\xbe\x91\x3c\xde\xe8\xa2\x3b\xd9\xd9\xdb\x0e\xaa"
- "\x7c\xb6\x12\xdf\xf1\x67\x07\x60\x9e\xe1\xc6\x01\x96\xdc\x55\x2f"
- "\xf8\x32\x6d\x60\xcb\xbf\x0f\xf5\xe1\xf7\x33\xc2\xff\xd7\x9f\x92"
- "\xdc\x73\x2f\x3b\x2f\x92\xc5\xb2\x17\xd6\x1a\x0e\x67\xfb\xf3\x1d"
- "\x84\xdf\x2f\x2d\xb9\x7b\x8f\xf6\x36\x42\xda\x24\x77\xbf\xc7\xc7"
- "\x95\x36\x8d\x8c\x15\x78\x10\xbb\x95\x95\x4b\xb5\xc0\x28\xe5\xcb"
- "\x88\xe5\x0b\xad\x6c\x77\x7b\xec\xe5\xf0\xce\x9c\xbb\x2b\x3d\xfb"
- "\xfa\xf9\xfa\x0b\xf1\xa6\x2d\x37\x63\xbf\xe5\x9e\x5b\x98\x5c\x46"
- "\x4e\x10\xbe\x3d\x61\x08\xbe\xed\x10\xf2\x94\xf3\x31\xb7\x81\x2f"
- "\x90\x2f\xe8\xbd\x7b\xe2\x3c\xf6\x54\x58\x23\x3f\x9e\xd9\xf9\x7b"
- "\x12\xbc\xb6\x94\xf1\xd0\x67\xcf\xce\xaa\x55\x29\x5a\x70\xd8\x0d"
- "\x0b\x53\x16\xe9\xb5\x4b\x92\x93\x57\x25\x6b\x31\xe0\x4d\xaf\x73"
- "\x95\xe4\x34\xe7\x9e\x24\xe1\xec\xb7\xf2\x9e\xb3\xdf\x72\xee\xd9"
- "\x2f\x3e\x93\xcf\x2e\xb9\xa7\x72\x68\xfa\x35\xf7\x04\xdc\xe7\x57"
- "\x20\xe5\x2a\xe0\xaa\x84\xcb\x02\x57\x15\xf6\x73\x16\x38\x49\x1c"
- "\xd8\x47\x7e\x4e\xd8\xbb\x5f\xfd\x1e\x13\xce\x83\x37\x4b\x26\xdc"
- "\x55\xc2\xc9\x08\x1f\xd7\x24\x9b\xc3\xb5\x24\x18\x1f\xbd\x12\x2e"
- "\x0b\x5c\x55\x70\xf1\xbf\xe3\xfe\x87\xdf\x6b\x5b\x21\x7e\x87\x73"
- "\xd3\x34\xdb\x32\x19\x69\x68\x96\x8c\xf7\x43\xb8\x37\x18\x5d\xaf"
- "\x32\x48\x69\xce\xed\xfb\x05\x3a\x5e\x37\x44\x66\x11\xad\x1f\xba"
- "\x08\x9a\xf3\x63\xbb\x40\xc7\xef\x7d\xf7\xd4\x07\x63\xf7\x03\xbd"
- "\x87\x4e\x46\x73\xee\x32\x08\x74\x2c\xa6\x59\xb6\xd4\xdf\x77\x87"
- "\xd1\xec\x0b\xd1\x02\x9d\x5a\x9c\x9f\x88\x66\x38\x97\x73\xe3\x14"
- "\xa4\xe1\xb2\x64\xec\x1c\x96\x9c\x7b\x8e\x02\xbd\xdf\x98\xa7\xa1"
- "\xc9\xe9\xde\xb4\xde\x72\x32\x2c\x5a\xbe\x64\xd2\xf2\x95\xa9\x78"
- "\x92\x54\xca\xaa\xb5\x29\x78\x5f\xb9\xf0\x15\xfe\xb6\x6a\xc1\xd2"
- "\x45\xec\x9f\x94\xa4\x58\xfc\x27\x09\xf0\x86\xf7\xc5\x6b\x0d\x78"
- "\x5b\xb4\x0a\x1f\x8d\xfa\xf1\x6b\x17\x79\x8e\xf4\xf6\x89\xbb\xd4"
- "\x99\x73\x5f\x8c\x5d\x32\x21\x8a\xf9\x23\xf7\xc5\xda\x25\x3f\xe6"
- "\xe7\x81\x55\x59\x76\x72\x58\xc7\x9f\xfd\x47\xfa\xc4\x2b\x90\xdc"
- "\xf7\x10\xc6\x2b\x50\x65\x19\x16\xa9\x5c\xcb\x97\x50\xb3\x6a\x1a"
- "\xfc\x36\xc9\x4e\x76\x0b\x7b\xcb\x47\xc6\xf1\x71\x43\x73\xee\x3d"
- "\xe0\x59\x5f\xc8\x99\xe4\x1d\x18\x0f\x9f\x5f\x6f\xf4\x06\xc6\xc2"
- "\x19\xa9\x05\xba\xc9\x25\x6f\xf0\xe7\xd2\x44\xc1\x7b\xfc\xdd\x14"
- "\x78\xd6\xc0\x73\x34\x97\x7b\x31\x13\xf7\x27\xc2\xb3\x16\x9e\x63"
- "\x20\xff\x6a\x4f\xbb\x10\xf3\x46\x38\x6c\x6e\x92\xdf\xfe\xb1\x6f"
- "\x8c\x29\x68\x5b\xf7\xab\x3d\x67\xf9\xf2\xe7\xf6\xe6\xdc\xaf\xed"
- "\x39\xb7\x97\x3f\xcb\x49\x3d\x8f\xb7\x6b\xbc\x6d\xbf\xbf\x38\x42"
- "\x33\x36\x95\xf9\xe1\xf7\x4f\xf3\xc4\x64\x60\x7e\xf6\xfd\x09\xa2"
- "\x33\x8f\xf1\x59\xdf\x73\xe6\x31\x8b\x4b\xf6\x16\x1f\xf7\x48\x72"
- "\x7f\x05\xcd\xb9\xaf\xbe\xe7\x7c\xba\x9c\xfb\x0b\xc4\xe7\xd3\xd9"
- "\xe1\x3d\xf6\x6f\x20\xbd\xdc\x6b\x07\xef\x9f\x8c\xdf\xf4\x77\xbe"
- "\x33\xf4\xcf\x8d\x0b\xd6\x83\x2f\x0e\x77\xde\x2f\x17\x7c\x60\x4c"
- "\xa7\xd9\x71\x18\xdf\x46\x8b\xef\xd0\xf7\xf3\x3b\xe6\x80\xe7\x2b"
- "\x4a\x26\x3e\x82\x71\x77\x1d\x19\x8b\x25\x3f\x2c\xc1\x35\x48\xf0"
- "\xcc\xe2\x46\xd2\x33\x92\x89\xfc\x3e\x36\x4f\x4c\x39\xf1\x9e\x78"
- "\xbf\x7b\x0f\x3e\xf3\xcc\x19\x27\xad\x52\xb9\x16\x2e\x61\x7e\xdc"
- "\xc4\xb7\x99\x2e\x55\x29\x98\xbd\x9f\x68\xa2\xcf\xb0\xf3\x4e\xec"
- "\x92\x07\xd4\xb8\x1f\x49\x25\x49\x5a\x45\xe1\xb7\x2a\xe3\xc2\x25"
- "\x7c\x1a\xd0\xbd\x0a\xbe\x96\x50\xbe\xd5\xd6\xe8\x56\x42\x2f\xb8"
- "\xd9\x5e\x7f\xc9\x44\xc3\xfc\xb1\x99\xf8\x1d\x39\xef\x47\x7c\x46"
- "\x14\x78\x56\x20\x96\xad\x44\x14\xf3\x6e\x2b\xa4\xe1\x7a\xac\x73"
- "\xcf\x10\x3e\xee\xaf\x50\x16\x03\x7f\x56\x59\xce\x03\x72\x4f\xcc"
- "\x1c\x3b\xa4\xf5\xae\xcf\x33\x3f\xe7\x5b\xc8\x2d\x8b\xc6\xcf\x9a"
- "\x0a\xff\x8d\x17\x8e\xb9\x15\x63\x27\xfa\x5c\xe4\xb5\x71\xe7\x7e"
- "\xb3\xef\x4b\xfe\x9c\xc8\x9c\x07\x12\x40\x4e\x2e\x5e\xde\xaf\xce"
- "\xfd\x0a\x75\x0b\x7f\x7e\x22\xee\x2b\xe4\x3a\xe0\xbb\x93\xa7\xf3"
- "\xf1\x75\xa5\xcc\x5f\xe4\xe3\xda\xe5\x3c\x80\x31\xbd\xed\xec\x8c"
- "\x58\x95\x1d\xe4\xc7\xdb\x7d\x6c\x1b\xfc\xfe\x49\x35\xd6\xfd\x81"
- "\x0a\xd0\xa9\x8f\xc1\xf5\x1c\x3b\x1f\x66\xee\x57\x9e\x7c\x31\x7e"
- "\x14\x60\x6b\x1a\xdc\xd5\xf0\xfd\xfa\x9e\x35\x42\x3d\x7b\x32\x1f"
- "\xb8\x88\xb1\xad\x7a\xf6\xe7\x4a\x26\xdf\xcb\xfc\xca\x49\x32\x3b"
- "\xf9\x51\x01\x6b\xdf\x18\xff\xbf\x4a\xd8\x9b\x35\x09\xfa\xbf\x4f"
- "\x26\xfa\xe6\x31\x69\x89\x67\xec\x83\xc9\x6e\x52\x1c\x60\xf1\x31"
- "\xb8\x9e\x03\xfa\x19\x9e\x33\xb2\x5f\x95\xf2\x7b\x8b\x4e\x46\x68"
- "\x48\x2c\xa4\x2f\xf6\xa4\x0f\x93\xc4\x01\x6f\x26\xa5\x78\xf4\xc9"
- "\xb9\xc8\xc8\x0e\x78\xde\x0c\x7e\xba\x8b\x3d\xab\xf0\xfd\x36\xcf"
- "\x33\xfc\x5f\xea\xd1\x37\xd8\x3f\x3b\xb7\x31\x61\x3b\xf6\xff\x16"
- "\x69\xc0\x27\xd3\x60\xff\x6a\x12\xf4\x7f\xff\x37\x93\xfd\x76\x92"
- "\xe1\x5c\xf6\xc7\xe3\x3b\x22\x9f\xa9\xe8\x00\x1d\x0a\xef\x1a\xed"
- "\xe4\x77\xf3\x84\x7c\x5a\xed\xd2\x86\x16\xaf\x3c\x22\x54\xc0\x63"
- "\x17\xab\xd3\x64\x2d\x55\xaa\x09\x9e\x57\xde\x99\xf3\xa0\xda\x2e"
- "\xb9\xcf\xc9\xd3\xa5\xb6\x95\x9a\xba\xd4\xb3\xad\xd0\x83\xb7\x2c"
- "\x45\xac\x3c\xc8\xef\x4f\x36\x6f\x50\xf3\x31\xc4\x30\x0e\x01\x1f"
- "\x9f\x0c\x63\x4e\xba\xc8\x70\x3e\xce\xbf\xf9\x41\x3d\x1f\xdf\x7e"
- "\x9d\x4e\xe1\x89\x37\x09\xed\xb4\x80\x4a\xdf\x4f\xc1\x18\x94\xfc"
- "\x58\x5a\xa7\x2e\x92\x8f\x3b\x29\xc4\x9b\x2c\x4e\x25\x51\x45\x1c"
- "\x8b\x37\xc9\xc7\x28\xe8\x27\xe6\x24\xcd\xfe\x72\x82\x27\xe6\x24"
- "\xf0\x01\xf7\x1e\xea\xe8\x05\x97\x13\xee\x31\xa2\x58\x37\x32\xbf"
- "\xf1\x27\xa5\xa0\x37\xa5\x2c\xfe\x64\x68\xf6\xe6\xc1\x36\x86\x93"
- "\xc9\xe3\x3d\x67\x78\x8b\xd2\xe2\xa0\xbd\x08\x7e\xce\x03\x4e\x21"
- "\x6d\xb6\x9d\xfc\xbd\xad\xc7\x37\x03\x7d\x87\x63\x8a\xf0\x3e\x8d"
- "\x66\xe8\xb7\x8b\xdb\x15\xe1\xff\xd0\x74\x0f\x03\xbb\x3c\x1c\xae"
- "\x11\x78\x4d\xeb\xd1\x1f\x17\x68\x3d\xf6\x11\x54\x12\xb0\x37\xc6"
- "\x08\x1a\xef\x72\x45\x2c\x70\x49\x8e\xa2\xef\x89\x7b\xae\xe3\xdd"
- "\x2e\xdc\xfb\x2f\x8b\x77\x9f\xc3\xf3\x35\x8f\xe2\x5e\xb2\xad\x4b"
- "\x71\x6f\xe3\x8d\x14\xcf\xa9\x89\x77\x9f\xa5\x3b\xd9\x9e\xcd\x3a"
- "\xe1\xcc\xcc\x6a\x77\x2a\xad\x02\x39\x28\xb0\xdf\x81\xf1\xb7\x22"
- "\x25\x4e\x12\x69\x88\xf8\x60\xe6\xf9\x0f\x28\xc6\xde\xc2\x33\xca"
- "\xb8\x1c\x27\xe8\x4a\xad\x64\x81\x2b\x22\xd3\xea\x6a\xe1\xcf\x09"
- "\x88\x77\x8f\xa0\xf1\xc6\x87\x28\x7f\xb6\x58\x2a\x3d\x04\x7a\x36"
- "\x82\x3f\x43\x7b\x3d\x3d\x07\xff\xcb\xe3\xd7\x9f\xa3\x78\xbe\x27"
- "\xe4\x5d\x15\xef\xe2\xba\xe2\x8d\x5c\xc6\x02\xa3\x04\x7e\xf7\x4f"
- "\xf8\xdd\x3f\xa1\x3c\xb1\x90\xa7\x1a\x9e\x1f\xa6\x3b\x97\xe2\x1e"
- "\xa8\x4c\xbe\xef\x03\x75\xb4\x08\xfb\x4a\x2b\xf1\x4c\x4f\x8c\x33"
- "\xbe\xc0\x65\xc9\xdc\x29\xec\x13\xe5\xcf\x96\x35\x76\x53\xe1\x3b"
- "\x13\xe3\xd7\x93\x87\x17\xac\xbf\x91\xdf\x6f\x8a\x7b\xa9\xe2\x5d"
- "\x5a\xf8\x66\x26\xf2\x43\xc1\x9f\xe7\xcd\xef\xa7\x7a\xa8\xbe\xbf"
- "\xf3\x3d\x71\x9d\xc8\x9a\x31\x44\x8a\xfb\x33\xdc\x25\xef\x24\x62"
- "\x2c\xb0\x0c\x07\x75\xe2\xb8\xdf\x07\x5d\xf5\x52\x6d\xaa\x0c\xf4"
- "\xea\x43\xee\x5a\x43\xac\xff\x3d\x75\x79\x63\xc0\xff\xfd\xbc\x83"
- "\xe6\x45\x27\x51\x73\x7d\x0a\x35\xa9\xa3\x70\xbd\x2a\xcd\xbb\x71"
- "\x32\x3c\x43\xfa\xcd\x0a\x6a\xb6\xa5\xd0\xbc\x98\x46\xb8\xc3\xf3"
- "\x8f\xf7\x52\x73\x03\x3c\x4b\x53\xe0\x77\x0e\x9a\x17\x81\xbf\x33"
- "\xd0\x3c\xd9\x62\xb8\xc3\xf3\xb0\x79\x40\x07\xcf\xc3\x67\xc3\x1d"
- "\x9e\x47\xcc\x38\x29\xf9\x69\x15\xfc\x06\xd2\x6e\x4b\x63\xdf\xba"
- "\x3d\x8d\xff\x56\x1e\xf6\xd5\xf0\x1b\xf7\xa4\xb1\x6f\xdc\x97\xc6"
- "\xbe\x01\xf8\xe2\xbf\x21\x9f\x02\xf4\x4e\x9a\x37\x72\x3f\xd0\x19"
- "\x69\xde\x35\x31\x70\x87\x67\xc5\x36\xa0\x83\xe7\x48\x19\xdc\xe1"
- "\x59\x05\x65\x69\x80\x67\x75\x0b\xd0\xbb\x68\xde\xe8\x04\xa0\x4b"
- "\xa3\x79\xd7\x55\xc3\x1d\x9e\xbf\x17\x07\x74\xf0\x7c\x3d\xe4\x63"
- "\x83\x67\x8d\x0e\xe8\xe1\x79\x32\x7e\x9f\xd0\xbc\x9f\x62\xbe\x99"
- "\x34\xef\x61\xa0\xb7\xc1\xf3\x23\x90\x9f\x0d\x9e\x1f\x8b\x06\x3a"
- "\x78\x9e\x72\x08\xee\xf0\xfc\x38\xd6\x55\x46\xf3\xa6\x69\xe0\xbe"
- "\x99\xe6\x4d\x87\x74\x1b\x3c\x3f\x69\x80\x3b\x3c\x3f\x85\xf4\xf0"
- "\x3c\x13\xeb\x0b\xcf\xb3\x20\x9f\x7a\xe0\xf1\x33\x47\xe1\x9e\x4b"
- "\xf3\xe6\x4c\x00\x3a\x78\x7e\x0e\xcb\x0f\xcf\xcf\x77\x00\x1d\x3c"
- "\xcf\x03\x5e\x35\xc0\xf3\x7c\xac\xa7\x82\xe6\x2d\xc4\xfc\x4d\x34"
- "\x6f\x11\xf2\x03\x9e\x97\xd8\xe1\x0e\xcf\x7a\xe0\x47\x03\x3c\xbf"
- "\x5c\x0e\x77\xbf\xe7\xf3\xd1\xbc\x15\x99\x34\x6b\x38\x94\x39\xf5"
- "\x00\xcd\x1a\x01\x77\x63\x12\xcd\x1a\xa6\xa3\x79\x1b\xab\x21\x1d"
- "\xee\xeb\xa7\xc0\xf3\x78\xe1\x19\xee\x1b\xa2\xe1\x39\x56\x78\x86"
- "\xfb\x86\x0e\x78\x9e\x20\x3c\xc3\x7d\x53\x1a\x3c\x4f\xa4\x79\xe9"
- "\xb3\xe1\x19\xee\x9b\x5a\xe1\x79\xb2\xf0\x0c\xf7\x4c\x0d\xdc\x5d"
- "\x8e\xb1\xbb\x2a\x1d\xca\x32\x83\x43\x79\xdc\x8e\x98\x74\xe7\x7f"
- "\xee\xe0\x22\xeb\x31\x8e\xf0\xf0\x8c\xf3\x64\xc4\x49\xc9\x23\xbf"
- "\x46\x1b\x69\x4d\xb3\xf3\xe7\xda\x09\xb1\xe9\x86\x37\x4b\xe2\x7e"
- "\x09\x3e\xc1\x44\x3c\xdf\x1c\xea\x3c\x9e\x66\x0f\x6b\x87\xfb\x5e"
- "\x9a\x7d\x4d\x33\xd4\x19\x9e\xaf\xfd\x0c\xee\xf0\x7c\x5f\x1e\xd4"
- "\x19\x9e\xe7\x3e\x0a\xf7\xbd\x9d\x39\x71\x0e\xbb\xe4\xa7\x31\xbc"
- "\x7e\xff\xcd\x3e\xbb\xca\x95\x01\x3a\x05\x74\xee\xf6\xe6\x52\x95"
- "\x2b\x91\x50\x73\x63\xa6\x0a\xcf\x9f\x28\xde\xe5\xa4\x91\x65\x7c"
- "\x99\xf0\x8c\x19\xda\x1d\x23\x65\xdf\xbe\x86\x36\x4b\x1e\x19\x8b"
- "\x63\x9f\x34\xf2\x83\x40\xef\x1f\xe2\xdf\xdf\xd0\x5c\xc1\xde\xcb"
- "\x89\xf7\xfd\x5c\x7c\xff\xa2\x0a\xc7\xab\xc7\xbd\xc5\xbf\xb7\x76"
- "\xb4\x0a\xf5\x8a\xc0\x77\xeb\x91\xd6\x2e\x79\x84\x9d\x43\x26\x89"
- "\x2b\xa5\xd9\x11\xe4\x9c\x42\x0d\xbe\xe9\x23\x7b\xed\x92\x87\x5a"
- "\x84\xb1\xc4\x0e\xaa\x90\x3b\x59\x1c\x82\xeb\x02\xc5\x48\x91\x73"
- "\x26\x7b\xbd\x39\x9b\xd6\x61\x9f\x14\xec\x88\x54\x9b\x1e\x53\xd9"
- "\x2c\x79\xcc\x58\xcc\x8f\x35\x34\x1b\x71\xaf\x50\xb3\xe4\xd1\x87"
- "\xba\xf3\xd5\x13\xb5\x1b\x54\xf0\xfd\xc7\xd6\x67\x38\xe9\x79\x4b"
- "\xfa\xa3\x60\xef\xf8\xf4\x14\xb6\xfe\x9c\xff\x3f\x91\xad\x19\xe2"
- "\xff\x9f\xc1\xc6\x4d\x1f\x33\xe2\x6f\xc5\x7d\x00\x77\x4e\x52\x12"
- "\x17\xd9\x9c\xc9\xe6\xbc\x1e\x7d\xe4\x20\x67\x97\xaa\x52\xc8\x30"
- "\xed\x86\x0f\x20\xff\x47\x73\x7d\xfb\x8b\x1e\x5a\xfe\xdd\x8a\xbf"
- "\x01\xed\x0e\x7e\x6c\xe7\xd1\x9e\xf3\x8f\x29\xd4\xe1\x75\xe6\x2b"
- "\xc5\xa1\x6d\x63\x3e\xdf\x63\x1a\x8c\x91\xe9\x52\x34\x26\xba\x4c"
- "\x65\x89\x6e\x53\xb3\x91\xe6\x37\x67\x46\xba\x24\x84\xad\xdd\x7f"
- "\xec\xa9\x3b\x9d\x38\xe6\xf6\x31\xd2\x0e\xe3\x86\xa7\x8e\xbf\xc3"
- "\x48\xa4\x96\xe4\x06\x7c\x9e\x4a\x73\x36\x1e\xb2\xb6\xd5\x13\x4b"
- "\x32\x9f\xd7\x14\x9a\xf3\x8b\x14\x6e\x78\x96\xa1\x04\x7d\x55\x23"
- "\x8e\x15\x7d\x86\x7c\x39\x02\x72\x01\xbe\x3f\x16\xe3\x29\x0b\x9e"
- "\x15\x60\x06\xde\xa1\x1f\x89\x7b\xad\x17\xb8\xdd\x18\x17\x2a\xd7"
- "\x0e\x7c\x60\xf2\x7a\x0c\x63\x42\x13\xe1\xbb\x2f\x72\x91\xea\x98"
- "\xda\x79\x38\xaf\x2a\xc7\x38\x3b\xe7\xf9\xbd\x99\x2e\x3c\xdf\x0f"
- "\xed\x25\xa3\xf5\x89\x8f\xbc\xc8\xb0\x60\x83\x61\x55\x72\xca\x82"
- "\xb5\x86\x49\x5a\xe8\xc8\x69\x57\x2d\xd5\xae\x58\xb2\x62\x55\xf2"
- "\xfa\xde\xfe\xa6\x1c\xca\x75\x00\x70\x52\x85\xe5\x3a\x02\x3e\x2c"
- "\x1b\x83\x9e\x6a\x42\x59\x6f\x7f\x93\x9d\x27\x01\x34\x76\x3b\x79"
- "\x97\xef\x97\x70\x85\xcd\x85\xb4\x68\x97\x73\x0b\xee\x31\x5f\x8b"
- "\x7d\x06\x07\xb1\x92\x76\x28\x1b\x3b\x5b\xb0\x16\xe3\x20\xa4\xa6"
- "\x51\x4b\x6a\x3b\xb6\x03\x23\x35\x1f\xcf\xa5\xc5\xef\xc4\x5d\x34"
- "\x97\xd5\x37\x4b\xa6\x1a\x2e\x9a\x8f\x1b\x3d\xe7\xff\xb8\x4d\xc7"
- "\xeb\x39\x85\xdd\x81\xe7\xff\x74\x53\x0d\xa9\x01\x5e\x76\x99\xd4"
- "\x6a\xb0\x03\x8a\xe2\x6c\xb0\x63\xd0\xd7\xe0\xe3\x2f\xfc\x66\x9f"
- "\xc5\x4d\x75\x32\x77\x36\x91\xc3\x3d\x92\x46\x36\x6b\xbb\x15\x8d"
- "\x06\x7c\x8f\xe7\xfe\xb8\xbb\x75\x24\xfd\x28\xe5\x5e\xd0\x03\x6e"
- "\xb2\x09\xe5\xcf\x5a\xd5\x9f\x26\x90\x3e\x8a\xcb\x6f\x24\x27\xa7"
- "\x11\x29\xd2\x82\x9f\x44\xe6\xc1\xff\x69\x0b\x89\x12\xe8\x54\x69"
- "\x47\x20\xbd\x53\x37\xca\x95\xa1\x93\x77\x65\xe8\x46\x75\x53\x9d"
- "\xc2\xda\xe2\x24\xdd\xb7\xec\xab\xbb\xdd\x41\x64\xdb\xc1\x9f\x2a"
- "\xe6\xa0\x0d\x16\xed\xb2\xbb\x37\xea\x86\xbb\x36\xea\x64\xdd\xdd"
- "\x3a\xb9\x6b\x9d\x4e\xd6\xb5\x4e\x37\xbc\xbb\x53\x27\xb7\x2e\x76"
- "\x90\x8f\x1d\xbf\x25\xb5\x2d\xad\xfc\x38\x65\xb7\xb2\x79\x7c\xb7"
- "\xb2\x51\xa1\x68\x21\x51\x77\x18\xc0\xaf\x02\x3f\xf3\x2d\xf0\xa9"
- "\x01\x13\x0a\xd7\xbb\xfb\x2c\xd4\xdc\x54\x07\xfc\x9d\x33\xf5\x56"
- "\x7a\xd6\x9d\xf3\xa4\x4e\xfb\x04\xe8\xab\x2c\x59\x34\xa4\x01\x7e"
- "\x9e\x2b\xa4\x39\x3f\xb7\x43\xff\x5e\x0b\x17\xf4\x97\x79\x39\x80"
- "\x2f\x37\xbd\x11\x9e\xa3\x91\x96\xd1\xcd\x1a\x6f\xe7\xef\x33\xd2"
- "\xf8\x33\x51\x73\x1e\xdb\x5c\xcc\xf7\xfb\xa6\xe6\x7a\xfc\xf5\x43"
- "\x32\xff\xfb\xd8\x81\x66\x6f\x4f\xff\x99\x03\x9d\x63\xfe\xdc\xee"
- "\x57\x97\xe7\x8f\x70\xe1\x1c\x27\x07\x7c\x3b\x29\x79\x7c\x2c\xc6"
- "\x9e\xa2\x19\xd3\x84\x3e\xeb\x54\x7e\x1c\x0b\xf7\x7e\xe3\xb8\x06"
- "\x4b\x7b\x9c\x1f\x3b\xe1\xa4\x71\x18\xeb\xbf\x12\xe3\x7d\xe1\x38"
- "\x06\xe0\xba\xca\x2e\x79\x1c\xc7\xcd\x86\x41\x7f\xaf\x02\xae\x4a"
- "\xb8\x2c\xbf\xc2\xf1\x8d\x6c\x32\xd5\x33\xf6\xe3\xbf\xac\x8f\x43"
- "\xff\xf7\x37\xd5\xde\xfe\xef\xe3\xd0\xff\x9d\x6a\x09\x7d\x7d\xe0"
- "\xe3\xfa\x7e\xc6\xa1\x65\x18\xb7\x96\xe6\xd7\xab\x0b\xb8\x9e\x38"
- "\xb7\x60\x1b\x1e\x3f\x08\x7a\x22\x93\x7f\x67\x6a\xcc\x4c\xff\x9a"
- "\x44\xe0\xbb\x0a\x5c\x0f\x01\xcf\xda\x64\x09\xb5\x76\x38\x49\x01"
- "\xce\x4b\x44\xef\x72\x56\x5c\x70\x48\xb1\x5d\xd4\x42\x1a\xfc\xf6"
- "\x58\xc1\x05\x21\xdf\xc2\xe6\xd2\x8c\xd5\x84\x3f\xbb\x04\xcf\x3f"
- "\xc2\xf6\x52\x90\x0e\x7d\x4b\x3c\xab\x29\x19\x75\xf5\xcf\xae\x85"
- "\xff\xe5\x48\x47\x15\x8d\x99\x1c\xe4\x01\x6d\xa6\x95\x2a\x1b\xf5"
- "\x9c\xf9\xb8\x03\x6c\x48\x05\x1d\xfb\x4e\x02\xb7\xbd\x39\xb7\x33"
- "\xe7\x67\x58\x7f\x3e\x96\x30\xc6\x15\xc2\xb1\x13\x37\xf4\xe1\x6b"
- "\xcb\x5d\x84\x3e\xea\x22\x87\x53\xce\x43\xff\x43\x1d\xe5\x50\xda"
- "\xeb\x1d\xca\xa6\x3a\xb7\xb2\x49\x0b\x57\x8c\x21\x19\xe7\x93\xa7"
- "\x8d\xef\x89\x8f\xf9\x75\xff\xf1\x31\x21\xcf\x18\x4f\x8c\x4c\xf7"
- "\xba\xd0\xe3\x63\xba\xa5\x27\x74\xc5\xa9\x03\xc7\xc7\x04\x9f\xb5"
- "\x0e\xfc\x55\x8b\x27\x96\x89\x9b\x5f\x9f\x4e\x14\x6e\x65\x63\x02"
- "\x1f\x0f\xc5\x68\xe1\x63\x9a\xa0\xef\x8a\xb6\xa6\x33\x67\x9a\xde"
- "\xe3\x8f\xa2\xfe\x74\x9b\xd5\x5a\xb8\xa2\x21\x3d\xd3\x2e\x99\x5b"
- "\xe9\xd1\xad\x60\x73\x0b\xdc\xa3\xb6\xd8\x3b\x71\xcf\x41\xb7\xfe"
- "\x61\xa4\x05\x3e\x5a\xe0\xdb\x11\xee\x6e\xfd\x64\xb8\x1e\x82\xeb"
- "\xa7\x6e\xf3\xf1\x4c\xb7\xb9\xa9\xc2\x6d\x2e\xdb\x06\x57\x21\x5c"
- "\x45\x70\x95\xc2\xb5\x1b\x2e\xf0\x73\xca\xf6\xc2\x1d\xdf\xef\x87"
- "\xab\x12\xae\x03\x70\x59\xe0\x3a\xe4\xde\xde\x5c\xe0\x96\xc8\xa2"
- "\xe1\x8a\x81\x0b\xca\xd1\xa4\x71\x9b\xed\xad\x6e\x73\x63\x22\xdb"
- "\x0b\x3a\x3d\xca\x83\x55\xff\x71\x06\x26\xb1\xf3\x18\x86\x9d\xa0"
- "\x2a\x3c\x2b\x38\xed\x3c\xc6\xc7\xd3\x1f\xd6\x75\x84\x76\x2e\x87"
- "\x64\xfa\x94\x40\xd8\xc6\xfc\x41\xcf\x74\x87\x98\xdf\xb6\x80\xe3"
- "\x30\x9a\xe6\x42\x57\xf4\x3b\x71\xae\x6c\x92\x09\xba\x4d\x52\x9b"
- "\xd8\x42\xe2\x1d\x24\xa3\xba\xa5\x8b\x64\x2c\xa6\x6e\x5e\x0f\xa4"
- "\xe1\xf9\x2f\xef\xa7\x20\xce\xdd\x34\x41\xdb\x6d\x3a\x9e\xeb\x56"
- "\xd8\x2b\xa8\xc2\xde\xca\xc7\xdc\x03\x7d\x82\xe7\x9f\xf5\xf4\x6b"
- "\x11\x77\xd0\xb7\xad\x69\x3b\x4f\x36\x2e\xa6\x5c\x0d\x48\x18\xe3"
- "\xea\xa9\x24\xe4\x6d\x1e\x7f\x42\xdf\xf6\xc9\x46\x9a\x09\x78\x1a"
- "\xe9\x06\xbe\x71\xd8\xa7\x05\xec\xed\x4c\x25\xb1\x1e\xfc\x81\x5d"
- "\x57\x7b\xce\x8c\xa2\xc3\xa7\xeb\xe0\x9d\x0c\xcf\x94\x2a\x82\xbe"
- "\x6d\x51\x2a\x89\x29\x82\x77\xfc\xf9\x9f\x50\xee\x99\x06\x15\xe5"
- "\x5e\xd1\x91\x92\x97\x89\x5c\x79\x9a\x9d\x29\xeb\x06\xde\x7b\xcf"
- "\x55\x28\xab\x7f\xea\xb4\x96\x1c\xd6\x7d\x01\xf6\xb9\x02\xe4\x52"
- "\x56\xdf\x0d\x36\x0c\x78\xe9\x0e\x8d\x97\x4f\xd8\x2f\x15\x2f\xbb"
- "\xa3\x77\xd9\x19\x3f\x13\x09\xf2\xac\x37\x3f\x91\xc7\x1b\x5a\x80"
- "\x9f\xc0\x57\xeb\x51\x37\xf4\x4f\xc9\x42\x0f\x3f\x77\x00\x3f\x81"
- "\xa7\x1a\xe4\x29\xf0\x83\xe7\x29\x15\x78\x5a\x22\xe2\x29\xe8\x2f"
- "\x3e\x3e\x21\xf2\x94\x03\x9e\x96\x04\xe0\x69\xcf\x18\x01\xf0\x74"
- "\x67\x50\x3c\x2d\x1f\x04\x4f\x67\x4c\x08\xc4\x53\x17\xfa\x0e\xf9"
- "\x65\x75\x14\x74\xa3\xd5\xf5\x31\x1f\x6b\x93\x9a\x9a\x62\x38\x53"
- "\x93\x96\x53\x1c\xaf\xc7\x33\xc2\x71\xbe\x1f\xcf\x30\xe3\x63\x43"
- "\x95\xd3\x8b\xee\xfc\xe6\x58\x4c\x03\xdd\xa6\xbf\x13\xd7\x18\x19"
- "\xec\x60\xbf\x68\x65\xed\x05\x1c\x5f\x8b\x5f\xd1\x85\xbe\x77\x7e"
- "\xf3\x2a\x8e\xea\x09\xea\x95\xf9\xb7\x12\x59\x17\xe8\x0e\x43\x2a"
- "\xb9\xb1\x00\xf4\x61\x97\xb9\x29\xe6\x94\xe4\x29\xf9\x54\x03\x47"
- "\xe1\xca\xc0\x98\x91\x1c\xe8\x5d\xd0\xe7\xbc\x7c\x51\x66\x38\x6f"
- "\x58\x33\x1f\xf7\xb0\x3c\x75\xf1\x93\x44\x17\xc9\xd0\xf7\x95\x2f"
- "\x97\x91\xa0\x75\x9b\x06\x6e\x27\x78\x8e\x62\x5a\x2b\xca\xb5\x82"
- "\x58\x5b\xbc\xed\x84\x13\xf4\x34\xca\x02\xdb\x05\xb6\x91\xad\x22"
- "\xfd\x0c\xba\x5f\x5d\x2c\x9c\x2b\xe2\xce\x06\xfd\x8c\x31\xe4\x41"
- "\x96\x78\xde\x88\xdf\xf6\xb1\x11\xda\xc7\x06\xfe\xcc\x27\x0d\xf0"
- "\xa3\xa2\xab\x93\xc9\x10\x65\x66\x75\x55\xf1\xf2\x2b\x10\xec\x01"
- "\xe3\xbb\xfd\xdf\x94\x26\x80\x4f\x17\xa7\xe7\xf2\x9b\xb5\xb4\x53"
- "\x3f\x0a\xcf\xfd\xda\x79\x06\xf0\xb4\x18\x7c\xa8\xb3\x60\x2f\x56"
- "\x02\xbe\xce\x90\x98\x9d\x2b\xc1\x2f\xea\xc4\xb3\xdb\xa0\x3c\xeb"
- "\xd9\x99\xb7\x5c\xce\x74\x13\xbc\xe3\x63\x60\x72\x9e\x18\x98\xe7"
- "\x74\x38\xb6\xe1\x1d\x73\x5a\xa5\x93\x7a\xbf\x79\x3d\x71\x2b\xe2"
- "\xf4\x6c\xcf\xea\xcc\x0f\xf9\xb1\x60\xb9\x13\xfb\x0b\xa4\x4d\x32"
- "\x93\xdf\x2b\x48\x73\xdd\x9b\x0d\xe9\xb8\x96\x68\xe6\x1e\x9a\x3f"
- "\xcc\x68\xc0\xf3\xbb\x3d\xef\x32\x12\x90\x0f\xda\x3b\x32\x09\xd8"
- "\x80\xb8\x5c\x3c\xd7\x1d\xe3\x89\x85\x86\xc5\x99\x16\xcc\xcb\x6d"
- "\xba\x1e\x6d\x7d\x1c\x97\x7f\xbd\x02\x74\x4a\x2c\x7d\x05\xea\xfa"
- "\x32\xd4\xf5\x14\xf0\xf5\x14\xd4\x75\x9d\x50\x57\xe1\x3c\x3b\x0e"
- "\xf8\x0f\xef\xfc\xdb\x47\x4f\x5d\x5f\x01\x7e\xe7\x9e\x9f\xb5\xe9"
- "\x34\xb9\x8e\x82\x4f\x5e\xd3\xc6\xef\x17\xea\xb4\xba\xbe\x20\xf8"
- "\x5d\xde\x7e\x9b\xca\xca\xe7\x00\x1e\x91\xe7\xe0\x6b\x43\x5f\xb2"
- "\x91\x78\xe4\x80\xe5\xa1\xdd\xfa\x51\x25\x2b\xa1\x3c\xc8\xfb\x33"
- "\x64\x3c\xb6\x67\xe0\x7d\x4c\x09\xf2\xdf\xf7\x4c\xe9\x28\x5e\x06"
- "\xc3\x41\x06\x2b\x05\x19\x98\x05\x19\x80\xcf\x0c\xb6\x18\xc7\x7a"
- "\x34\x25\xd9\x4c\x06\xa1\xf1\x28\xbe\x65\x88\xdb\xeb\x84\xc0\xed"
- "\xf5\xe7\x37\x75\xb1\xbe\xb4\x04\x63\x71\x42\x3f\x61\x0d\xd7\x0d"
- "\xed\x36\x5f\x68\xb7\x54\xff\x53\x4f\x9b\x3d\x29\x99\x75\x30\xb8"
- "\x36\xfb\xf4\x7b\xdf\xd1\x36\x1b\x75\x69\xdb\xec\x33\x6b\x7d\xdb"
- "\xec\x33\xe5\xbe\x6d\xf6\x99\x17\xbd\x6d\x56\x78\x37\x24\x6d\xf6"
- "\x99\x94\x6f\xa6\xcd\x3e\x93\xe2\xa7\xcd\x46\x05\xd1\x66\x35\x01"
- "\xda\xac\xe6\xd2\xb5\xd9\x9f\x17\x5e\x3e\x1b\xfb\xac\xad\x4b\xea"
- "\xc7\xc6\x6e\x14\xd9\x58\x25\xda\xd8\xd9\x49\xfe\xda\x6b\x77\x11"
- "\xb4\x57\x85\xd0\x5e\x5f\xf8\x2b\xe4\x37\x67\xc9\xc7\x8d\x03\xb7"
- "\x57\x57\x91\xd7\x7f\x0a\xd8\x66\xf5\xd8\x66\xcb\x89\xd5\xce\xb7"
- "\xd9\x85\x9e\x36\x5b\x24\xf4\x87\xfa\x69\xb7\x51\x81\xda\x2d\x9e"
- "\xf1\x85\xe7\x7b\xf5\xdb\x6e\x05\x7f\xa9\x7b\x2c\xb6\x5b\xcb\x15"
- "\x66\x6b\x9f\xbd\xdd\xb7\xdd\x3e\x9b\xe8\xdb\x6e\x9f\xfd\x9e\xb7"
- "\xdd\x0a\xef\x86\xa4\xdd\x3e\x3b\xfe\x9b\x69\xb7\xcf\x8e\xff\xf6"
- "\xd8\xda\xe7\x02\x9e\xff\x37\xf4\xb6\xf6\x85\x5f\xf3\xed\x36\x90"
- "\xad\xcd\x10\x6c\xad\x12\x6d\x6d\xc2\xad\xc1\xb5\xdd\xe7\x6f\xfa"
- "\x8e\xb7\xdd\x4b\x6c\x73\x9f\xff\xca\xb7\xed\xbe\x10\xed\xdb\x76"
- "\x9f\xff\xd4\xdb\x76\x85\x77\x43\xd2\x76\x9f\x6f\xfd\x66\xda\xee"
- "\xf3\xad\xdf\x1e\x9b\x3b\x57\x11\xa8\xed\x6a\xc7\x91\xcc\x66\xc9"
- "\xdc\x25\xd6\x22\x7e\x6d\x60\xa6\xd5\x35\x89\xb0\x35\x2c\x73\xcd"
- "\x56\xcd\x44\xc2\xe5\xab\x73\xf1\xac\x09\x5c\x4b\xf3\x2b\xd1\x5a"
- "\x15\xb6\xb6\x62\xee\x7b\x9e\xb5\x36\x3b\x85\xf3\x28\xfa\x5b\x6b"
- "\x43\x4d\xea\x68\xe1\x77\xad\x6c\x7d\x8d\x5a\xeb\x79\x66\xb1\xb0"
- "\xe6\xb6\x51\xb3\x5a\xe3\x50\xaa\x03\x9d\xbb\x2d\x8f\xcc\xa2\x14"
- "\xcf\x71\x3a\x37\x6e\x9f\xe1\x5c\x1e\x21\x05\xfc\x5c\xcc\xbc\x18"
- "\xf8\xed\x0c\xb6\xc6\xe2\xb9\x59\xe7\xb2\x67\x11\x48\x9b\xe8\x49"
- "\xe3\xcf\xd5\xce\x8e\xa0\x1c\xbc\x03\x1d\x32\x79\x67\x3a\x91\x63"
- "\x7c\xd1\x3b\x2e\x20\x16\xe7\x4d\x03\x1d\x11\x85\x67\x41\xe1\xf9"
- "\x1b\xf4\xfb\x3f\xe8\x28\x69\x27\xb2\xda\xcd\xfc\xf8\x33\xae\xd1"
- "\x29\xcd\x47\xfc\x47\xdc\x56\x48\xa5\x32\xc2\x15\xbf\x33\x8d\x2a"
- "\x9b\x74\xfc\x9a\x60\xc0\x8a\x67\xdd\x0e\x9e\xa3\xc6\x8d\xdd\xd5"
- "\xea\x89\x6f\x49\xa1\x7c\x7f\x4b\x77\x48\xf1\xfc\xf3\x92\x64\xa2"
- "\x86\x4b\x41\xcd\x4d\x3a\x28\x57\x9d\x67\x3c\x31\xe0\xfa\x6e\x3c"
- "\x1b\xf8\x07\x1a\x99\xb0\x46\x08\xf7\xe9\xf2\x3e\xd3\x56\x29\x97"
- "\xeb\x86\x74\x9a\x9d\xc1\x9f\xc7\xa5\x02\x5e\xe0\x9a\x5c\x3c\x27"
- "\x89\x2b\xd9\x67\x78\xf5\x06\x42\xde\xdf\xd0\x2a\xc5\xf5\x20\xee"
- "\xff\xfa\x41\x87\x25\xfd\x6e\x8c\x63\xc1\xc7\x40\x3f\x29\x79\xb1"
- "\x26\xfe\x2b\x76\x0e\x30\xfc\x6f\xc3\x39\x98\xa7\xe0\x19\xd7\x07"
- "\x70\xe7\x34\x32\xa4\x85\xf4\xd7\x2c\xa9\x0d\x44\x65\x20\xf2\x7c"
- "\xa8\x9b\x40\x3b\xbb\x83\x8f\x5d\xf3\x22\xbf\xee\x16\x9e\xf5\x38"
- "\x6f\x00\xbf\x93\xe3\x3a\x28\x5a\xf4\xce\x34\x5e\x3f\x98\x9a\x74"
- "\xdc\xd8\x77\x84\x3d\x53\x4d\xba\xad\x50\x67\xa0\x51\xe0\x9a\x1f"
- "\xfe\x9e\x4e\xd4\xdb\x92\x31\x5e\xea\x8b\xf5\x70\x57\x58\x56\xe2"
- "\x7a\x95\x17\xa7\x60\xde\x81\xf7\x0d\x34\xe9\x68\xb6\x8c\xb0\xbd"
- "\x3f\x92\x4f\x9b\x25\xf3\x8d\x2a\x09\xa5\xb4\x68\x57\xeb\xab\x38"
- "\xce\x8d\x6b\xb5\xf9\xf5\xe7\xf3\x9f\x86\xfc\x65\x3b\xf9\x71\xdc"
- "\xf9\xb1\x76\xc9\xbc\xc6\x9e\x75\xfe\xfc\x9c\xd3\x7c\x5c\x57\x25"
- "\xc1\xdf\x08\xf4\x5a\x86\xbf\x26\x9d\x36\x3d\x82\xc2\xf3\x6a\xb6"
- "\x9e\x5b\xbe\x14\x7e\x6f\xf0\xae\x63\xe3\x7f\x07\x58\x9a\xbf\x19"
- "\x64\xc6\xaf\xb9\xc1\xe7\x80\x6b\xa5\x05\xb9\xd5\x68\x00\x1b\xbd"
- "\x65\xe7\xc1\x08\xe0\xc2\x83\x11\x2c\xef\xef\xd3\xed\x52\x36\xc7"
- "\xb1\x80\x5f\xb7\x96\x0f\x32\x74\xef\xd0\xc8\xf8\x38\xe2\xdd\x28"
- "\x17\x5c\x73\xbf\xe0\x08\xca\x65\x2b\xd8\x02\x46\x3b\xbf\xcd\x5b"
- "\x7e\xfe\xb7\xbc\x3c\x39\x90\x05\x5b\xfb\xbf\xa0\x98\x3f\x93\x06"
- "\x74\x06\xae\x3b\x3f\x64\x84\x72\x21\x6e\x01\x23\xef\x27\x3b\xa5"
- "\x25\xa9\x2c\xfd\x6f\xed\x4e\x29\xae\x25\xc1\xf1\x70\xf3\xcb\x44"
- "\x86\xe3\xea\x98\x27\x8d\xde\xd5\x7a\xa7\x47\x8e\x1b\x40\x76\xa9"
- "\x80\x5d\xe0\xf9\x56\xe0\x5f\x49\x17\x3f\x67\xd5\x5a\xc2\x11\x05"
- "\x07\x74\x76\xc9\x82\x7a\xc8\x4f\x5d\x7c\x3d\x75\xe0\x5a\x6f\xe0"
- "\xe1\x86\xce\x9c\x05\x3d\xfb\x1f\xb0\x4c\xb8\x56\xdb\xcc\xaf\xd9"
- "\x5f\x10\xcb\x30\xb4\x80\x78\xea\x1c\x88\x9f\xe6\xf7\x49\xb4\xf9"
- "\x0e\x32\x91\x53\x4c\xd2\xd3\x88\x1f\x94\xe2\x78\xf3\x4c\xa8\x35"
- "\xc6\xcd\x8f\x7f\xed\x04\xb5\x3a\xdc\x84\x53\x4e\xd2\xe3\xfc\x84"
- "\xfb\xd5\xdb\x46\xc7\xaf\xc7\x3d\x16\xc7\x73\x33\x9c\x44\x6d\x4d"
- "\x77\xb0\xb3\xd3\xc8\xd7\xc4\xbd\x06\x74\x38\xe8\x75\xb0\xa9\xb2"
- "\x8c\xaf\xc9\x18\xe4\x17\xa7\x3c\x9e\x7b\x52\x92\xb8\x65\x4e\x0a"
- "\xc9\x0c\x4d\x8f\x26\xf2\xe7\x14\xa1\x7f\x01\x3a\x5f\x8a\x6b\xf4"
- "\xac\x0e\xf0\x4f\xcc\xc7\x43\x8c\xf7\x91\xd8\x67\xbd\xb5\xb8\xde"
- "\x1c\x8e\x43\x0b\x75\x8e\xc7\x3a\x77\x38\x09\x8e\xe5\xcf\x5c\x8d"
- "\xf1\x49\xcf\x13\xce\x3c\x49\x8f\x75\x06\x5f\x47\x1e\xfa\x98\xfe"
- "\x42\x4d\x7f\xdf\xa6\xc0\x6f\xee\xd5\x1f\x94\x72\x8a\x26\x39\x7e"
- "\x1b\xcb\x80\x7b\x76\x66\x9e\x27\x3c\xdf\x91\xff\x56\xa7\x9b\x50"
- "\xa5\xb8\x0c\xae\x50\xcb\x10\xb8\xfe\x77\x90\x68\xd3\xfb\x4c\xee"
- "\xee\x57\x05\x1e\xe8\x71\x9e\xac\x49\x8e\x71\xf3\x67\x62\x19\x1c"
- "\xa7\xc9\x53\xa7\x09\x2f\x7f\xab\xae\x8d\xb8\x23\x6e\x1b\x8d\x6b"
- "\x2f\x50\xfe\xe9\x2e\x90\xff\x05\x27\xc6\x14\x71\x58\x33\x2f\x12"
- "\xf4\x5f\x5c\xe7\x74\xd2\xbe\xf2\x7f\x69\xcb\x1c\x63\xa8\xf2\x7f"
- "\x69\x88\xe4\xff\xd2\x15\x50\xff\x45\x61\xd4\x7f\xd1\x10\xd5\x7f"
- "\xd1\x15\x50\xff\xc5\x61\xd4\x7f\xf1\x10\xd5\x7f\x71\xc0\xfa\x3f"
- "\x36\x86\xa3\xfc\x9a\x9c\xc8\xcf\x1d\x68\x03\x98\xbd\x5a\x92\x85"
- "\xeb\x6f\xf8\x3d\x5a\xc2\x33\x61\x7b\xb6\xe4\xbd\x9e\x15\xbd\x9e"
- "\xd5\xbd\x9e\xa3\x7a\x3d\x6b\x7a\x3d\x47\x7b\x9e\xc1\x8e\x0c\x3b"
- "\x23\x59\xfc\x35\xf8\xa5\x99\x76\xc9\x12\x93\xf0\x3e\x06\x63\xee"
- "\x80\x4d\x8f\x09\x74\x7e\x9f\x52\x42\x68\xb7\x94\x12\xfe\x5c\x3d"
- "\xc9\x52\xd2\x95\x4d\x28\x8d\xb8\x41\x87\x67\x9f\x71\xa6\xb2\xfd"
- "\x33\x41\x4f\x5b\x1d\x4e\xf0\xf3\x35\xc3\x21\xef\xef\xe3\x99\x8e"
- "\x28\x57\x6d\x32\xae\xaf\x59\x72\x1a\xeb\x79\x87\xc1\x42\xb8\x88"
- "\xdb\xf8\xf5\x0d\x9c\xb9\x6c\xbf\x23\xe2\xb6\x1b\xe8\xf6\xe6\x02"
- "\x73\x36\x27\xb7\xb6\x1d\x25\xf9\x52\x4e\x9b\x96\x06\xf2\x6d\xdb"
- "\x4f\x36\xb6\xd1\xd6\x34\x17\x75\x5a\xe7\x59\x48\x86\x03\xcf\x44"
- "\xa9\x22\xb5\x8e\xa3\xfc\xb9\x28\xfc\xf9\x2f\x8e\xfd\x04\xfd\x9f"
- "\x0c\xa4\x81\xb4\x5a\xc7\x5e\x52\x03\xcf\x96\x95\xff\x82\x7a\x2e"
- "\x2d\xb6\xb6\xed\x85\xfe\x52\x59\x05\xa7\x28\xdb\x46\x15\x65\x85"
- "\x35\x6d\x78\x9e\x4a\x59\x11\x96\xb5\x16\xca\x61\x75\x55\x62\x3f"
- "\xab\x88\xcf\xb7\xa3\x8e\xef\x93\xe2\xbc\x2d\xa7\x04\x7a\x65\x59"
- "\x21\x96\x0f\xcb\xe6\xdf\xdf\xad\x8f\x81\xb2\x4f\x9a\xa3\x93\x11"
- "\xdc\x57\x11\x1a\x46\x96\x5a\x02\xfb\xd1\xf5\xbb\x59\xbe\xf2\x30"
- "\xf2\x5d\x16\x50\xff\x53\x93\x4d\x28\xaf\x3a\x9c\x7c\xfb\xac\x49"
- "\x17\xe5\x2b\x94\x57\x1b\x4e\xbe\x55\x81\xf3\x6d\x10\xca\x1b\x17"
- "\x46\xbe\x7a\x6d\x3f\xf9\x0a\xe5\xcd\x0c\x27\xdf\x80\xfb\x8b\x11"
- "\x0f\xe1\x61\x41\x5f\xdd\x1f\x16\xc2\xc3\xc1\xf2\x7e\xea\x6f\x8b"
- "\x09\x0f\x03\xcb\x53\xfa\xc3\x40\x78\xf2\x5f\xde\xaf\xfc\xc3\x93"
- "\xfd\xcb\x7d\xce\x7c\x17\xcb\x3e\x3c\xb9\xbf\x1c\x10\xff\xd8\x37"
- "\xa0\xa6\xcf\xed\x34\xb2\x39\x93\xcb\x2f\xb3\x73\x91\x9f\x37\xbf"
- "\xca\xc5\x91\xc7\x36\x11\xa2\x2a\x24\xd7\x3e\x56\x7c\x82\xc6\xf1"
- "\x7d\xee\x57\xe4\x9b\x8a\x88\x14\xfa\xd0\xd2\xf7\x36\xd4\x4b\xad"
- "\xae\x89\xa8\xb7\xdc\xbb\x53\x9d\x92\x1f\x42\xfa\x87\x60\x07\x3b"
- "\xc0\x97\x65\x79\x95\xd9\xf3\xd3\xe3\x08\xbf\xe7\x0e\xfa\x11\x33"
- "\x57\x9f\xa0\xb8\x97\x39\xfe\x6b\xd0\xaf\x85\x18\xff\x90\x5c\x0b"
- "\xbf\x75\x01\x8e\x21\x1f\x27\xf9\x3d\xe7\x90\xcc\x74\xf0\xb4\x0e"
- "\xb6\xe6\xfd\xf3\x66\xec\x2b\xd0\x0c\x1d\xc6\x32\x73\xc0\xb7\xd7"
- "\x47\x38\x88\xb4\x84\x3f\x8f\xe7\x95\x14\xbb\x24\x69\xb1\xb0\x6f"
- "\xb5\x8d\x8f\xb9\x07\x65\xc7\x98\x7b\xaf\x42\xbf\x01\xe9\xef\x30"
- "\x10\xe9\x47\x7c\x8c\xe2\x57\x4a\x31\x0e\x5f\x7f\xfb\xbf\xdd\x26"
- "\xfb\x21\xfc\x3d\x35\x81\x7d\x3e\x4d\xa4\xb5\x1d\x0e\x42\xa3\xdf"
- "\x89\xcb\x87\xfe\xc9\xd4\x5b\x71\x3c\xa5\x9d\xa4\x6f\xa2\x1c\x8e"
- "\x6d\x51\xc5\x71\x23\xae\x3f\x64\x31\xe2\x93\x26\x63\x5f\x5f\x38"
- "\x87\xe9\x86\x53\xf0\xcc\xf7\x91\x70\x1d\x8e\xa2\x4c\x4f\xf3\x95"
- "\x71\xb5\x1d\xed\x84\xc5\x39\x4f\x7a\x08\xe3\xa1\x9d\x53\xd8\x2d"
- "\x1d\x0a\x7b\x55\x67\x4e\xd2\x44\x4f\x1d\xf0\xfb\x9e\x74\xec\x13"
- "\x22\x1d\xbc\x4f\xf0\xec\x07\x0f\x70\x56\xf1\xe8\x78\x0d\x75\x20"
- "\x7f\x59\x59\x56\x1c\x44\x19\x50\x93\xbd\xb2\x23\x43\x37\x8e\x8d"
- "\x91\x24\xb5\x60\x5f\x1b\xca\xbd\x9b\xf5\x7b\xcb\x76\xf3\x7b\xff"
- "\xc1\x1e\xcc\xd1\x49\x43\xf4\x89\x93\xf8\xbd\xb0\x96\x71\x68\x7f"
- "\x57\xbc\x0b\xf9\x3f\xd8\x2c\x59\x21\x9c\x83\x5b\x56\xc9\xf6\x74"
- "\x26\xed\x86\x6f\x54\xc2\x73\x22\xd2\xc1\x7b\x9d\xf0\xde\x22\x7a"
- "\x6f\xc1\xf5\xa8\xc2\xfb\x69\xc2\xfb\x43\xa2\xf7\x87\x0c\xe3\x70"
- "\xdc\x63\x85\x01\xeb\x00\x7c\x2c\x85\xf7\xfb\xf9\xb8\x09\xfc\x19"
- "\x91\x65\xa5\x02\xdd\xfe\x36\xc9\x8a\x2d\xe7\x00\x63\xf0\xfe\x80"
- "\xe8\xf7\x07\x3e\x32\xc6\x92\xc7\x8a\x91\x87\x2b\x8a\xec\xd2\xe3"
- "\x42\xcc\xe9\xa4\x72\xbe\xee\x60\x43\xc5\xf9\xd9\x25\x2b\xf4\x68"
- "\x27\x3b\xc0\x47\x03\x9a\x02\xfc\xa6\x98\xdf\x9e\x9d\xa5\xda\xc5"
- "\x2b\x16\x6a\x17\xad\x5a\xbb\x12\x77\x06\xfa\xee\x79\x53\xe3\xde"
- "\x59\xce\xd4\x58\x6e\x2d\xc4\xbd\x7c\x6a\x7e\xdf\xf8\x36\x5c\xa3"
- "\x15\xd9\x64\x77\xe7\x37\x19\xb8\xc8\xe3\x05\x96\x0d\x8f\x92\x33"
- "\x92\x95\xfc\xfc\x81\x15\x34\x9b\x09\xde\x5b\x36\x7c\x8c\x69\x7c"
- "\x1c\x66\x3c\x2b\x86\x1f\x0f\xd8\x20\x27\x87\xb4\xed\xfc\x98\x02"
- "\xbc\x5b\xcf\x8f\x9f\x9c\x27\x52\x57\xb6\x9c\xec\x4b\xaf\x93\x1e"
- "\xe0\xec\xd2\x7d\x5c\x3d\xbf\x16\xfa\x23\x4d\x15\xb9\xd3\x28\xc7"
- "\x33\xe6\xa4\x1f\x40\x3f\x1d\xdf\xe3\x3b\xcf\xde\x22\xf8\xfd\x11"
- "\x7e\x5d\xf4\xcd\xec\xff\x8c\x42\xda\xf4\x91\xc6\x21\xec\x29\x5f"
- "\x39\x16\xcb\x8a\xeb\x1c\xdb\x24\x2b\x6f\xc2\xf2\xd9\x25\x2b\xb5"
- "\x11\x45\xfc\xfa\x70\xc5\x19\xc9\x2a\x25\x67\x6e\x2c\x47\xdd\xe0"
- "\xca\x59\x71\x94\x66\x2b\x7e\x8b\xfb\x0a\x8b\xde\xf0\xec\xa1\x5d"
- "\xe9\x14\xed\xb3\x53\x9c\x93\x92\x87\x3b\x73\x56\x29\x3c\x31\x33"
- "\xf0\xec\xa2\x40\xba\xc6\x09\xfe\xe3\xc5\xe8\x5d\x55\x9c\xa2\x11"
- "\x64\xd1\x58\x5e\x35\x85\xe0\x98\x8e\x04\xd7\x25\xb7\x49\x56\xcb"
- "\xa8\xb2\xb1\x30\x1d\xdb\x74\xfe\xf1\x82\xdf\xf2\x31\x98\x9a\xec"
- "\x7b\x71\x8d\x21\xf0\x72\x0f\x3c\x7f\x3c\xad\x9c\x68\x9f\x41\x7f"
- "\x6c\xd5\xa6\x27\x17\x53\xd7\x6d\xb3\x2c\xa4\xba\xe5\x8f\xe4\x93"
- "\xa3\x55\x44\x31\x8f\x44\x64\xd8\xa9\x9b\xaf\x63\x0a\x91\xc6\xdb"
- "\x49\x04\xc6\x73\xc2\x18\xee\xb8\x47\xa3\xd6\x59\x03\x3e\xd2\xfb"
- "\x29\xef\xa5\xb7\x0e\xd3\xce\x24\xe0\x5b\xb1\xf9\x6b\x7e\x0f\x92"
- "\x83\xdf\x17\xae\xc4\xb1\x74\xd1\xde\xa3\x6d\x69\x89\x94\xdb\x74"
- "\x9a\xc8\x6b\xf4\x5f\x90\xf8\xc4\x08\xca\xef\x3d\x32\x02\xa1\x03"
- "\x64\xbf\x8e\xad\x13\xdc\x7e\x81\x44\xd5\xa6\xd8\x89\xb5\xad\x8a"
- "\xec\x48\x26\x51\xb4\x53\x3f\xb2\xba\xea\x63\x42\xf3\x27\x27\xfe"
- "\x3e\xdd\x32\xcc\xad\x60\x6b\xb7\x54\x59\x12\x1c\x3b\x8d\x34\xe1"
- "\x1a\xae\x0b\x24\x76\xc1\xbf\x32\xf9\xf1\x5e\x1c\x5b\x77\x75\xea"
- "\xb4\xdd\x9d\xba\x9b\xbb\xd6\xe9\xc6\x79\xc6\xe4\x5f\x3c\xad\xc6"
- "\x39\x88\x04\x9a\xb3\x30\x11\xf7\x2d\xa1\x2f\xea\x52\xc6\xe9\x71"
- "\xfc\x9d\x8f\x4f\xb3\x4e\x17\xcd\x2d\xd2\x91\x3b\x1d\xfc\xbe\x28"
- "\x9c\x13\x50\x97\xbc\x84\x65\x6d\x27\xfc\x3a\x24\x25\x5b\x87\xe4"
- "\xc4\xf9\x70\x45\x93\xe6\x29\x30\xab\x5d\x63\x77\x55\x59\x8d\xbf"
- "\x25\x19\x17\x69\x13\xdf\x47\x30\x02\x6e\x73\x56\xc5\x50\x65\x93"
- "\xe6\xb0\xee\x18\xda\x96\x89\xa1\xeb\x07\x03\xbf\x96\x15\x79\x03"
- "\x72\xb2\xef\x6d\x47\xb9\x1d\x2f\xf8\x5d\xb2\x43\xfa\x44\x0b\x75"
- "\xd5\x2c\xfe\x2d\xf9\xa4\xbe\xce\x47\x3e\xbc\x3c\x81\x0e\xe5\x84"
- "\x32\x42\x59\x79\xe5\x74\x8c\x97\xd3\x5e\x8e\xc9\xa9\x4b\xf1\xb9"
- "\xdd\x23\x2b\x67\xd1\xae\xfa\x60\xe4\x55\xdd\xe2\x5f\x5e\xc0\xe7"
- "\x1e\x79\xbd\xd5\x4e\xa2\xac\x6d\xe0\x37\x83\xbc\x9e\x78\x9a\x90"
- "\x27\xf6\x50\xae\x66\xda\x67\x3d\x72\x73\x99\x02\xc8\xed\x2b\xaf"
- "\xdc\x40\xfe\xfd\xc9\xad\x25\x14\xb9\x55\xb7\x30\xb9\xb9\x84\xf5"
- "\x63\xba\x43\x44\xea\x5c\xa7\x93\x16\x5e\x20\x13\x51\x7e\x33\xfe"
- "\xa5\x25\x87\x67\xd7\x80\xcc\xfe\xe8\x23\x3f\xce\x6c\xaf\x04\x19"
- "\x54\xa3\x0c\xc3\x6b\x77\x29\x69\xc1\xb7\xbb\xe4\xf3\x57\xdb\xdd"
- "\x50\xb5\xbb\xe4\xa2\xc1\xb5\xbb\x94\x69\x57\xdb\xdd\x37\xdd\xee"
- "\x52\xa6\xf4\x6e\x77\x3d\x7e\x43\xf2\x92\x15\x0b\x97\xaf\x5c\xbe"
- "\x72\x99\xf6\xa5\xf5\x29\x4b\xd6\x30\xef\xc1\xc7\x7f\xd0\xb8\xd3"
- "\xe3\xa4\x78\xa6\x7b\x75\x61\x1d\xf9\xfd\x0d\x75\x52\xf7\x97\x1a"
- "\x19\x35\x3d\x5b\xc1\x99\x9e\x8b\xc5\xf3\xdd\xb1\x7d\xe2\xb9\xef"
- "\x27\x25\x1b\x1c\x18\xeb\x90\xc5\x89\xd9\xc0\xe2\x69\x44\xbf\x93"
- "\x80\x73\x41\xaf\x6e\x20\xb2\x57\x71\xdf\xb7\x13\xc7\x5c\xf8\xf7"
- "\xcf\x63\x5c\x36\x5a\xfc\x4e\x02\xc6\xea\xe9\x50\x94\x25\x6e\x86"
- "\xbc\x1c\xca\xc6\x72\x99\x16\xf7\xb5\xa4\x42\xb9\x57\xb4\x79\x63"
- "\x2f\x6d\x88\xa6\xc3\x53\x15\xa8\x17\x70\x1f\xe2\x19\x49\xea\xe9"
- "\x8b\x38\x8f\x02\xbe\xf4\x9c\x5b\xe1\x3b\x63\x77\xd5\xf3\x71\x25"
- "\x40\x47\xb0\xf7\xc6\x3d\xf8\xfd\x8b\xa6\xe3\x05\xe8\x6f\x9c\x53"
- "\x34\xd9\xcf\x99\x9a\x0c\x1f\xa7\x15\x0a\x3a\x62\xdd\x98\x27\x0a"
- "\x99\x8e\xa8\xd1\x00\x06\x67\x00\x06\x13\x06\xd2\x11\x22\xec\x8d"
- "\x0b\x4d\x47\x20\xd6\x10\x73\x88\xb7\x6b\x00\x6f\x88\x41\x0f\xe6"
- "\x7e\x25\x60\x4e\xd5\x48\xd4\x3c\xee\x5c\x0c\x77\xb8\x8f\xbb\xc6"
- "\xe8\xc5\x9c\xbb\x37\xe6\x2e\xf4\xc2\x9c\x54\xc0\xdc\x3a\x5f\xcc"
- "\xcd\xfd\x42\x4d\x76\xf0\x98\x4b\xf4\x62\xce\x1c\xa7\xf7\xe0\x0d"
- "\xb1\x87\x38\xe3\x96\xe9\x48\x4d\x5b\x7b\x0f\xf6\x4a\x96\xb2\xb9"
- "\x5c\x7e\xad\xb0\x94\x56\x5c\x5c\x27\xe8\x8a\xd3\x1e\x5d\xf1\x56"
- "\x00\x1b\xfd\x45\x98\xba\xc2\xc8\xe2\xbf\x80\xac\xba\x40\x6e\x28"
- "\xaf\x27\x34\xa0\x23\x34\xbb\xc8\x27\xb3\xaf\x10\xf9\x24\x0f\x8d"
- "\x7c\xf0\x4c\x6c\x28\x8b\x1f\x19\x2d\x68\x1b\x48\x46\x28\x1f\x94"
- "\x13\x2f\x1f\x90\x93\x67\xbe\x1d\xe7\x5f\x51\x56\x28\x9f\x3b\xd2"
- "\x88\x14\xe5\x55\x92\xca\xf4\x03\xea\x01\x7e\x7d\x77\x2f\xfd\x0e"
- "\x3c\x37\xa0\xcc\xf8\x3e\x76\xb6\x72\xd9\xb6\xd1\xde\x33\x74\x3a"
- "\x73\x36\x4c\xee\xeb\x43\x6f\x98\xe5\x8d\x3b\x97\x2a\x9c\x0b\xda"
- "\x98\xc0\x7c\xf6\x8d\x6f\x0b\x6d\x3e\x0e\xfb\xaa\x7c\xbf\xd4\x0d"
- "\xfd\x52\x05\xf4\x4b\x4d\xd0\x2f\xc5\x71\x43\x3e\x26\xc3\x86\x62"
- "\x36\xa7\x07\xfd\x50\xe5\x71\x23\xf4\x89\xf4\xc8\x4b\x7e\xfe\x58"
- "\x69\xb7\xe0\x7c\x17\x35\x43\x9f\x77\x97\x94\xc0\x73\xd5\x61\x9d"
- "\x3b\x44\x1c\x6d\x38\x20\xcc\x8f\x6b\x58\xbc\xc2\x8d\x26\x56\xbe"
- "\x54\x7e\x5d\x23\x3f\xb7\x28\xe5\x4a\xdd\xaf\xfa\xce\x2d\x8a\xe7"
- "\x9e\x7f\x9f\xee\x10\xe6\x15\x37\xb2\xf8\x5e\xd8\x5f\x02\xbd\xf7"
- "\x1e\xf4\x61\xbc\x73\x8b\x9f\xe1\xfb\xb5\xbe\x73\x8b\x1b\x85\xb3"
- "\xbb\x36\x96\xe2\x7a\x1a\x78\x9e\xc7\xd2\x53\x53\xc4\xe9\xde\xb9"
- "\x7b\x96\x8e\x7b\xb8\x84\xb1\x81\x36\x36\x2e\xb0\xb1\xd2\xd3\xff"
- "\x0e\xe0\x2f\x85\xa0\x97\x33\x8b\xbc\x7a\x39\x93\x1f\x3b\xa7\x9a"
- "\xe6\xdc\x9a\x3e\x7a\x19\x63\x7d\x65\x0e\x9b\x89\x7a\xd9\x74\x3c"
- "\x93\x95\x2f\x6d\x2a\xf0\x24\x02\xcf\xbe\xc3\x74\xdc\xeb\x84\x3a"
- "\xba\x98\xd7\xd9\xcd\xc6\xcd\xfc\xfa\x81\xb4\xc5\xbe\xba\x3a\xa3"
- "\xca\x57\x57\xa7\x6d\xef\x5f\x57\xa7\xcf\xe9\x5f\x57\xa7\x1d\xbe"
- "\xaa\xab\x87\x5a\x57\x7b\xfc\xba\x70\x75\x75\xba\xf6\xaa\xae\xbe"
- "\xdc\xba\x3a\x3d\x5a\xa4\xab\x67\xfb\xea\xea\x8c\xd6\xbe\xba\x3a"
- "\xc3\xe5\xd5\xd5\x69\x06\x5f\x5d\x9d\xf5\x54\x70\xba\x3a\x73\xfa"
- "\xa5\xd5\xd5\x99\x7a\x5f\x5d\x9d\x35\x51\xd0\x3b\xca\xd0\x75\x75"
- "\xd6\x98\xfe\x75\x75\xd6\x4d\xbe\xba\x3a\xb3\x83\xe9\xe4\xac\x19"
- "\x4c\x57\x67\x09\xe9\x69\x0a\x71\xba\x57\x57\xb3\xf4\xbe\xba\x3a"
- "\x6b\xf1\x00\xba\x5a\xe7\xe6\x3c\xba\xba\x1e\x74\x75\xbd\x94\x5b"
- "\x16\x48\x57\xe7\x94\xd6\xa0\xae\x4e\x46\x5d\x9d\x53\xda\xbf\xae"
- "\xce\x19\x89\x3a\x99\x8f\xf5\xf9\x26\x6d\xe1\x63\x2d\xbe\x49\x5b"
- "\x11\xa7\x33\xd3\x20\x1d\xd2\x30\x26\x25\xd2\x31\x1e\x7b\x74\x7a"
- "\xf6\x98\x1e\x9d\x0e\x74\xdc\x18\xaf\x4e\x47\x7d\x8e\x7a\xbd\xf8"
- "\x4d\x6a\x2f\x79\x13\xcf\x2f\xc9\x8e\xf3\xe8\x76\x33\xa4\xe1\x19"
- "\x25\x18\x4f\x09\xd7\x5e\x02\x0f\x5a\x5e\x85\xef\x21\x3d\xd0\xe9"
- "\x7d\x6d\xc0\x6b\xd5\xbe\x36\x20\xbb\xb8\x7f\x1b\xb0\xf9\xf9\xfe"
- "\x6d\x40\xf6\x91\xab\x36\xe0\x4a\xb3\x01\x9b\x63\xae\xda\x80\x81"
- "\x6d\x80\x3f\x19\xf5\xb6\x01\xb7\x0b\x36\xa0\x78\x40\x1b\xb0\x59"
- "\x1b\xd8\x06\xbc\xd6\xd6\xd7\x06\xe4\x10\xaf\x0d\xc8\x4e\xf1\xb5"
- "\x01\xbf\x78\x3a\x38\x1b\x90\xf3\xd4\xa5\xb5\x01\x39\x49\xbe\x36"
- "\xe0\x17\x93\x05\x1b\xf5\x17\xb1\x0d\xe0\x22\x82\xb1\x01\xbf\x18"
- "\xeb\xb1\x01\xa8\x63\xdf\xc3\xf9\x86\x1e\x1b\x80\xba\xf0\x17\xb7"
- "\x58\x52\x9b\x45\x36\x20\xc7\xc9\x74\xfd\x2f\x66\xb9\x79\x1b\xf0"
- "\x0b\x85\x60\x4b\x2a\xc5\xe9\x5e\x1b\xc0\xd2\xdd\x62\x1b\xd0\x8a"
- "\x36\xe0\x17\xfa\x01\x6c\x40\x6c\xf0\x36\xc0\xe4\xf4\xda\x00\x93"
- "\xd3\x63\x03\x50\xef\xa3\x0d\x40\x9d\x8d\x76\x80\x8f\x5b\xc6\xaf"
- "\x37\x31\x2d\x54\x39\x88\x1c\xe3\x14\xe3\x98\x0a\xea\xee\xfc\x76"
- "\x66\x0b\x78\x9a\x95\x8c\x06\xf4\x79\x0b\xe8\xf0\x56\xd0\xe1\xad"
- "\xe6\x33\x44\x06\x74\xf5\xf9\xb8\x76\x11\x9e\x51\xd7\xab\xda\xc0"
- "\x6e\xb8\x78\xbb\x51\x8f\xf6\x86\xf1\xcb\xb4\xd0\xd7\x76\xe4\xce"
- "\xf1\xd7\x1f\x28\x10\xd9\x8e\x92\xeb\xe9\xd1\xce\x9c\x5c\xa3\xc7"
- "\x1e\xe4\xc3\x33\xda\x8c\x82\x76\xde\x66\xd8\xc1\x66\xb4\x30\x9b"
- "\x91\x5b\xd4\x43\x03\x65\xe0\x69\x98\x5d\xa9\x7f\x15\xcf\x7b\x63"
- "\x34\x16\x5f\xbb\x62\x8a\xf1\xb5\x2b\xb9\xe7\xd1\xae\x40\x1d\xf0"
- "\x6c\x34\x09\x67\x6e\x2c\x74\x17\xef\xaa\x47\x1b\xc3\xde\xe7\xfd"
- "\xa1\xc7\xae\x5c\x2f\xb2\x2b\x46\x8f\x5d\xd9\x72\xd3\x15\x6f\x57"
- "\x00\xcb\x35\x69\xdf\x25\xbb\x92\x97\x76\x25\xd8\x15\x94\xcd\x35"
- "\xa2\xb1\xe1\x40\x76\x05\x63\x58\xd4\x24\x7d\xdb\xed\x4a\x9e\x31"
- "\xb0\x5d\x31\x4d\xe9\x6b\x57\x4c\x09\x5e\xbb\x92\x5b\xed\x6b\x57"
- "\xcc\x7b\x82\xb3\x2b\xa6\x77\x7b\xdb\x15\xe4\x65\x3e\x5b\x63\xd1"
- "\x86\xf6\xc4\x6d\xb6\x5b\x38\xb4\x2d\x61\xd9\x15\xd3\x21\x5f\xbb"
- "\x62\xde\x26\xd8\xbd\x83\xa1\xdb\x15\x33\x3f\x76\x94\xef\xb1\x2b"
- "\x17\x7a\xdb\x15\xf3\x26\x5f\xbb\x62\x9e\xc5\xec\x87\xb9\x9c\xd9"
- "\x15\xf3\x62\xc1\x3e\x1d\x10\xa7\x7b\xed\x0a\x4b\xef\x6b\x57\xcc"
- "\x96\x01\xec\x8a\xa2\xbb\x68\x57\x7d\x97\xa9\xc9\xe2\xda\xbd\xcf"
- "\x30\x7e\xde\x8d\xee\xde\x6d\x83\xb5\x09\x37\x3b\x37\xc8\x33\xc7"
- "\xf5\x2c\x21\xdd\x8a\xcf\xed\x9c\xb0\x3f\xba\x2b\x7a\x57\xd5\xc9"
- "\x24\x68\x1f\x6d\x81\xdb\x07\xb4\x0d\xb9\xa7\x6d\xd4\xe8\xff\x45"
- "\xa0\xbd\x48\x71\x8e\xeb\x2d\x68\x17\xd6\x8e\x7a\x5e\x8f\x29\x5a"
- "\xb4\x04\x63\x5d\x2a\xdb\x88\x5a\x29\x91\x0c\x7f\x12\xbc\x7a\x37"
- "\xb4\x91\xa9\xb7\x52\xee\xb6\x46\x2d\x51\xea\x49\x24\xb6\x93\xf7"
- "\x85\x39\x14\x8c\x6d\x81\x73\x27\x80\xcf\xd8\x05\x9f\xb2\xf6\xf1"
- "\x16\x5c\x5d\xac\x7d\x8c\xeb\xea\xd4\xdd\x1c\x68\xee\xc4\x6a\xb4"
- "\xf3\x73\x27\xb8\xf7\x08\xf7\x7c\x71\xd0\x3e\x28\xce\x9d\x38\x59"
- "\x9b\x80\xf2\xaa\x77\xf2\x73\x27\xcd\x3e\x73\x27\x3f\x69\x24\x52"
- "\x8c\x7b\xb1\x43\x3c\x77\xa2\xab\xe9\xd3\x26\xb0\xad\x60\x9b\x08"
- "\x5d\x7f\x6d\x9d\xdc\xdf\x5a\x26\x17\xf0\xda\xad\x68\xb2\xd0\xb7"
- "\x9a\x2b\x7e\xd7\xec\x94\x60\x8c\x51\x37\xc8\x8e\x03\x3d\x45\x15"
- "\xbd\xf4\x54\xb7\x20\x87\x6e\x26\x07\x90\xa1\x7c\x7e\x07\xa1\x0b"
- "\x5c\xe0\x6b\x75\x0b\x71\x46\x9d\x76\xc0\xa1\x6e\x74\xf1\x06\xe4"
- "\xbb\x86\x14\x0b\xb1\x46\xb9\x8d\xfa\x91\x1c\xf0\x9a\x66\x4b\xc9"
- "\x7b\x17\x9c\xfc\x5c\xa3\xa9\x8b\x8c\x07\xbd\xa4\x44\xbd\x04\xd8"
- "\x1d\xb5\xb3\x0b\xf8\xde\xc4\xf8\x8e\x71\xec\xf0\xee\xda\xa8\xd3"
- "\x42\xde\x37\x77\x77\x83\x5e\x72\x32\xde\xcf\x5f\xad\x26\x7c\x7c"
- "\x52\x9c\x6f\x04\x5b\x5f\x0b\xf2\x46\xbd\x34\xb3\x43\x45\xf1\x2c"
- "\x0f\xee\x4b\x1d\xc6\xf4\x8a\xbe\xb3\x03\xcf\x6d\xd1\x21\x36\xd4"
- "\x25\x27\x71\xbe\xb1\xc1\x67\xbe\xd1\xb1\xd1\x3b\xdf\x58\x5b\x7e"
- "\x8c\xad\x0f\xf1\xb1\x1d\xe6\xa3\xdd\xc5\xbb\xaa\x90\xef\xbc\xed"
- "\x48\x09\x95\xf7\x05\x01\x63\xa5\x5f\x7a\xde\xab\xbf\xe5\xbc\xdf"
- "\xba\x79\x70\xbc\x7f\x23\x60\xfc\x97\x4b\xcf\x7b\xf9\xb7\x9c\xf7"
- "\xbf\x24\x83\xe3\xfd\xaf\x2a\xfa\xe3\x3d\xf6\x3d\x3c\xfd\x0e\x4f"
- "\x9f\x03\xed\x18\xb3\xc3\x6f\x4e\xf1\xf6\x37\xde\x9c\xe2\x99\xb7"
- "\x05\x9e\xc9\xcc\xc2\x78\x93\x61\x29\x9e\x87\xf1\xeb\xbf\x78\xe6"
- "\x6c\xd1\xdf\xe7\xe5\xf8\x16\xc8\x71\x25\xee\x1d\x12\x64\x08\x36"
- "\x67\x41\x07\xd8\x85\xb1\xbb\xea\xdd\x66\xb0\x49\xef\xee\x33\x04"
- "\x90\xa7\x14\xed\x89\x32\x85\xa8\xe7\x1b\xbc\x72\xe5\x36\x82\x3c"
- "\xbb\xc0\xcf\x72\xb6\x12\xdc\x0f\xac\x6a\x05\xff\xab\x5b\x3f\x72"
- "\x1e\xf8\xf3\x1e\x99\xbe\x9f\xea\xe4\x7d\x2c\xbf\x32\xdd\xee\x2b"
- "\xd3\x73\x7e\x64\xfa\xe2\x72\x68\xa7\x52\xc1\x0f\xe6\x65\x6a\xef"
- "\x91\x29\x6f\x47\x36\xea\xa2\x51\xae\x1e\x99\xa2\x1d\xe1\x65\xda"
- "\xc6\xec\x48\x4f\xec\xa4\x8d\x5e\x3f\xb8\x3a\xf1\x0b\x3f\x32\x7d"
- "\x23\xcd\x47\xa6\x89\xa1\xca\xf4\xd7\x9b\x7d\xfd\xaa\x37\xbf\x0e"
- "\xce\xaf\x7a\x53\x82\xbe\x93\xd8\xaf\xc2\xe7\x73\xd0\x57\x77\x2b"
- "\xed\x87\x3a\xc2\xf2\xa5\xde\x54\xfb\xfa\x52\x6f\x36\xb2\x32\x6d"
- "\xbb\x3d\x74\x5f\xea\x4d\xde\xff\x7a\xef\x2d\xd6\x07\xf6\xf5\xa3"
- "\xde\x3c\xec\xeb\x47\xbd\x59\xc8\xfc\xa5\x37\x1d\xe7\xb2\xd1\x8f"
- "\x7a\x73\x2f\x4b\xdf\x36\x5e\x9c\xee\xf5\xa3\x58\x3a\x3b\xd3\xfe"
- "\x4d\x57\x68\xbe\xd3\xf7\xbf\x61\xdf\x49\xd3\x8f\xef\xa4\xf9\x8e"
- "\xf8\x4e\x85\x01\xd7\xff\x5f\xb5\xdf\x03\xd9\x90\xff\x52\x0f\xce"
- "\x86\x6c\xef\xb8\x6a\xbf\xc3\xe5\x7d\xa1\x65\x70\xbc\xdf\xd1\xef"
- "\xfe\x87\xfe\xed\x77\x89\xcc\x6b\xbf\x4b\x64\x81\xed\x77\xf1\xfa"
- "\xab\xf6\x3b\x14\xfb\xfd\xd6\xe4\xc1\xd9\xef\xe2\x29\xbe\xf6\xbb"
- "\xe4\x0f\xc1\xd9\xef\xe2\x0f\x87\xde\x7e\x17\xd7\xf9\xda\xef\x92"
- "\x22\x56\xa6\x1d\xa7\x43\xb7\xdf\x25\x9b\x02\xdb\xef\x92\xd7\x7c"
- "\xed\x77\x49\x02\xb3\xd3\x25\x15\xcc\x7e\x97\x24\xb1\xf4\x1d\x6d"
- "\xe2\x74\xaf\xfd\x66\xe9\xcc\x7e\x97\x1c\x08\xcd\x7e\xab\xbe\x61"
- "\xfb\xad\xee\xc7\x7e\xab\xbf\x23\xf6\xbb\x74\xe2\x55\x1b\x12\xae"
- "\x0d\x29\xa9\x1b\x9c\x0d\x79\x3b\xe0\xf9\xd7\x03\xdb\x90\xdd\xd3"
- "\xbc\x36\x64\xf7\xb4\xc0\x36\xe4\x9d\x83\x57\x6d\x48\x28\x36\xa4"
- "\x34\x73\x70\x36\xe4\x9d\x5c\x5f\x1b\xb2\xfb\x7c\x70\x36\x64\xf7"
- "\xb0\xa1\xb7\x21\xbb\xa3\x7c\x6d\xc8\x6e\x3b\x2b\xd3\xae\xbb\x42"
- "\xb7\x21\xbb\x3f\x0c\x6c\x43\x76\x1f\xf1\xb5\x21\xbb\x85\xb3\x32"
- "\x76\x77\x30\x1b\xb2\x5b\x88\x6b\xbf\x2b\x56\x9c\xee\xb5\x21\x2c"
- "\x9d\xd9\x90\x77\x49\x68\x36\x64\xc4\x37\x6c\x43\xe4\xfd\xd8\x10"
- "\xf9\x77\xc4\x86\xfc\xa6\xcf\xf9\x87\xc1\xeb\xb1\x3d\x6a\xaf\x1e"
- "\xdb\xa3\x0e\xac\xc7\xca\x5f\xbb\xaa\xc7\x42\xd1\x63\xef\x46\x0d"
- "\x4e\x8f\x95\xcf\xf2\xd5\x63\x7b\x0e\x06\xa7\xc7\xca\x6b\x86\x5e"
- "\x8f\x95\x37\xfa\xea\xb1\x3d\xe5\xac\x4c\xbf\xb9\x18\xba\x1e\xdb"
- "\xb3\x25\xb0\x1e\xdb\xf3\x4b\x5f\x3d\xb6\x67\x31\xd3\x57\x7b\x0e"
- "\x30\x3d\xb6\xc7\xc8\xd2\x7f\xe3\x14\xa7\x7b\xf5\x18\x4b\x67\x7a"
- "\x6c\x4f\xd5\x40\x7a\x0c\xdb\x45\x8d\xa6\x57\xbb\x78\xc5\xd3\x2e"
- "\xf6\x4e\xfc\xa4\xc8\xd3\x2e\xf6\xf2\x3e\x1a\x57\xf4\x4e\xc2\xeb"
- "\xa9\x44\x66\xc2\x33\x71\x40\x47\x18\x5e\xc0\x76\xf1\xbb\xf7\x70"
- "\x7d\x89\xa2\x11\xf4\x5e\x8b\xa0\x07\x8d\xa0\x07\x5b\xe0\x19\xe3"
- "\xa4\x8d\x7d\x27\x01\xf5\x17\xae\xd3\xc0\x67\xa6\x0f\x1d\xc3\xf0"
- "\x4c\x1e\x7e\x9e\x5d\xd4\x6e\xf8\xb6\x72\x4e\x68\x2b\xe7\x58\x5b"
- "\xf1\xec\x97\x4b\x6b\xa1\x9c\x7b\x8d\x6e\x74\xfc\xe2\x08\x8a\xed"
- "\x87\xdf\x87\x05\xed\x87\xae\xd1\x45\x16\x25\x43\x9b\x71\xb4\x12"
- "\x8c\x85\x8f\x6d\x46\x99\x25\x89\xa4\xe7\xf4\x23\x41\x27\x32\xdd"
- "\xc7\x55\x0d\x73\x61\x5c\xab\x35\xa0\xfb\xda\x41\xf7\xb5\x7b\xdb"
- "\x0a\xce\x9d\x9f\x5b\xa3\xd3\x76\xac\xd1\x8d\xeb\x3e\x07\xba\xcf"
- "\xd1\xbb\x9d\x2c\x68\xdb\xd9\x8e\xba\xaf\x95\x6f\x27\xbc\xee\x83"
- "\xb6\xc1\x9d\x03\xdd\xb7\x4c\xd0\x7d\xe7\x74\xa8\xeb\xd5\x3b\x97"
- "\x82\xee\x4b\x3c\xc5\x74\x9f\xe0\xc3\xfd\x10\x75\xdf\x1a\x9d\xf4"
- "\x57\xed\x82\xee\x5b\x88\xba\xef\x30\xb4\x91\xbf\xfa\xea\x3e\x65"
- "\xb8\xba\xef\x77\x46\xdf\x76\xb2\xf7\x5f\xc1\xb5\x93\xdf\x9d\x0f"
- "\xd4\x4e\xba\xcd\xe1\xb6\x93\xbd\x32\xdf\x76\xb2\xb7\x8e\x95\xe9"
- "\xb7\xd7\x86\xde\x4e\xf6\xfe\xa1\xa7\x9d\xbc\xd2\xbb\x9d\xec\xfd"
- "\x8b\x6f\x3b\xd9\x6b\x62\xed\x61\x6f\x0b\x6b\x27\x7b\x4b\x59\xfa"
- "\x6f\xd5\xe2\x74\x6f\x3b\x61\xe9\xac\x9d\xec\x75\x5c\x9d\x2f\xff"
- "\xb6\xd9\xfb\xf7\x93\xae\xce\x97\x87\xdb\x67\x7c\x4f\x36\xb8\x3e"
- "\xe3\xef\x5b\xaf\x8e\xb7\x87\xcb\xfb\xf7\xf7\x0f\x8e\xf7\x7f\x58"
- "\x7c\x75\xac\x24\x5c\xde\x57\xc4\x0e\x8e\xf7\x7f\xb4\x0f\xd4\xc7"
- "\x08\xec\x4b\xfd\xc9\x54\xdd\xd3\xc7\xf8\x93\xc9\xb3\x3e\xb7\x6f"
- "\x1f\xe3\x4f\x12\xdf\xbd\x74\xfb\x7e\xd9\x7b\xed\xec\x40\x7d\x0f"
- "\xd7\xd5\xbe\x07\xc8\xfa\x0f\x7b\x07\xd7\xf7\xd8\xdf\x6b\x7d\xe2"
- "\x9f\x1f\x08\xce\xa7\xfa\xd3\xf4\x40\x3e\x95\x2b\xec\xbe\xc7\x9f"
- "\x12\x7c\x7d\xaa\x3f\xc7\x08\xd8\x78\x31\x74\x9f\xea\xcf\xc3\x02"
- "\xfb\x54\x7f\x56\xfa\xfa\x54\x7f\xb2\x33\xdf\xe9\xcf\x13\x99\x4f"
- "\xf5\x27\xe1\x8c\xf0\x7d\xf3\xc4\xe9\x5e\x9f\x8a\xa5\x33\x9f\xea"
- "\xcf\x53\xae\xce\xa3\x7f\xdb\x7c\xaa\xff\x63\xb9\x6a\xd7\xc3\xb5"
- "\x2d\x7f\x4e\x18\x9c\x6d\xf9\xcb\x37\xb8\xfe\xf3\xdb\x6e\xd7\x2b"
- "\xe5\x83\xe3\xfd\x5f\xfb\x5d\xff\xd9\xbf\x5d\x3f\xb8\xd8\x6b\xd7"
- "\x0f\x2e\x0e\x6c\xd7\x0f\xd8\x7c\xed\xfa\x7f\x2f\xbf\x6a\xd7\xc3"
- "\xb1\xeb\x7f\xd9\x3c\x38\xbb\x7e\x60\xb7\xaf\x5d\xff\xdb\xb5\xc1"
- "\xd9\xf5\x83\x37\x0d\xbd\x5d\x3f\x18\xeb\x6b\xd7\x0f\xba\x04\x6c"
- "\xdc\x1b\xba\x5d\x3f\xf8\x45\x60\xbb\x7e\xf0\x5f\xbe\x76\xfd\xa0"
- "\xb0\x4f\xed\x6f\x6a\x66\xd7\x0f\x56\xb3\xf4\xff\x9e\x20\x4e\xf7"
- "\xda\x75\x96\xce\xec\xfa\xdf\xa2\xaf\xce\xaf\x7f\xdb\xec\xfa\x07"
- "\x01\xcf\xff\xba\x6a\x5b\x06\xb2\x2d\x7f\x1b\x64\x9f\xf1\xc3\xa8"
- "\xf0\x6d\xcb\x47\x16\xaf\x6d\xf9\xc8\x12\xd8\xb6\x7c\x74\xaf\xaf"
- "\x6d\xf9\xf0\xf0\x55\xdb\x12\x8e\x6d\xf9\xc0\x3e\x38\xdb\xf2\x11"
- "\xf1\xb5\x2d\x87\x56\x04\x67\x5b\x3e\xda\x34\xf4\xb6\xe5\x23\x93"
- "\xaf\x6d\x39\x24\x94\xe9\xc3\x5f\x86\x6e\x5b\x0e\x3d\x10\xd8\xb6"
- "\x1c\x7a\xc4\xd7\xb6\x1c\x8a\x62\x36\xe4\x50\x12\xb3\x2d\x87\x74"
- "\x2c\xfd\xc3\x02\x71\xba\xd7\xb6\xb0\x74\x66\x5b\x0e\x19\xaf\xce"
- "\xbb\x7f\xdb\x6c\xcb\xe1\x7e\xd7\xff\xf6\xaf\xdf\xaa\x4a\xbd\xfa"
- "\xad\xaa\x34\xb0\x7e\xab\xfa\x9e\xaf\x7e\xfb\xfb\xbb\x57\xf5\x5b"
- "\x38\xfa\xed\x90\x69\x70\xfa\xed\x7f\xed\xbe\xfa\xed\x48\x90\xf1"
- "\x80\xaa\x5e\x1c\x7a\xfd\x56\xd5\x2b\xfe\xc3\x11\x21\x06\xd0\xdf"
- "\x57\x87\xae\xdf\x8e\x8c\x09\xac\xdf\x8e\xdc\xe4\xab\xdf\xaa\x84"
- "\xf8\x3f\x47\x66\x30\xfd\x76\x44\x48\xff\xbb\x41\x9c\xee\xd5\x6f"
- "\x2c\x9d\xe9\xb7\x23\x09\x83\x9b\x8f\xff\xc4\xee\x9d\x8f\xff\x84"
- "\x97\x05\x57\xd8\x9c\xdb\x77\x3e\xfe\x93\x39\x38\x1f\xef\x6d\x2f"
- "\x47\x6c\xfc\xdc\x3c\xb6\x99\x0e\x16\xbf\xc7\xef\x3c\xfd\x98\xe6"
- "\xdc\xab\xf3\xf4\x97\x72\x9e\xfe\x13\xad\x6f\xfb\xa9\x36\x07\xd7"
- "\x7e\x3e\x29\x1e\xfa\x79\xfa\x4f\xf6\xfa\xb6\x9f\x6a\xa3\x80\x95"
- "\xb7\x43\x6f\x3f\xd5\xcf\x07\x6e\x3f\xd5\x0b\x7d\xdb\x4f\xb5\xd0"
- "\xc7\xac\x36\xb1\xf6\x53\x3d\x4d\x68\x83\xa5\xe2\x74\x6f\xfb\x61"
- "\xe9\xac\xfd\x54\x17\x06\xe3\x1f\xb8\x14\x4d\x87\xd0\xde\x8f\x6f"
- "\xbc\xd1\xdd\x83\xf3\x14\x01\xe7\xfe\xfc\x83\x97\x98\xbd\xe0\x7d"
- "\x83\xdd\xfb\x52\x06\xf4\x0f\x5a\x04\xff\x60\x71\x5f\xff\xc0\xe3"
- "\x1b\x14\x01\xbe\xdf\x0a\x6a\x8e\x5e\xc0\x3b\xfa\x06\x17\x42\xf5"
- "\x0d\x5e\xf2\xfa\x06\xe6\x5e\xbe\xc1\xb2\x5e\xbe\x01\x8f\xf7\x66"
- "\x1f\xbc\xf7\xf1\x0d\x7a\xf0\x3e\x54\xbe\x41\xad\xfa\xea\x1c\x7d"
- "\xb8\xfd\xce\xea\xbd\x83\xeb\x77\x5a\x4d\x57\xc7\xf2\xc3\xe5\x7d"
- "\xed\x20\xc7\xf2\x3f\x95\x5f\x1d\x6f\x09\x97\xf7\xd6\x41\xc6\x72"
- "\xf8\x6c\x73\xf8\xfd\x91\x63\xb3\xbc\xfd\x91\x63\xb3\x3c\xfe\x95"
- "\x27\x36\x22\xe8\x67\x99\x39\x19\xae\x0b\x84\xbc\x9e\xcc\x9f\x33"
- "\x20\xb7\xb6\x1c\xc3\x73\xd7\xc0\xe7\x3a\x7a\x38\xde\x28\xf6\xb9"
- "\xfe\xef\x74\x8f\xbf\x15\x8f\xbe\x18\xf8\x56\xe8\x57\x79\xfa\x20"
- "\x18\xd7\xaa\xdf\xf5\xc3\xb7\xec\x4b\xc1\x3e\x4b\xb7\xb2\xe9\xd0"
- "\x77\xb7\xbf\xf2\xe9\xac\xc1\xf5\x57\x8e\x16\xf8\xfa\x5b\xc7\xdc"
- "\xc1\xf9\x5b\xc7\x94\x43\xdf\x5f\x39\x16\xed\xeb\x6f\x1d\x6b\x15"
- "\x70\x22\x09\xdd\xdf\x3a\x76\x24\xb0\xbf\x75\xec\x53\x5f\x7f\xeb"
- "\xd8\x6e\xe6\x57\x1d\x73\x31\x7f\xeb\x58\x25\x4b\xff\xbf\x44\x9c"
- "\xee\xf5\xb7\x58\x3a\xf3\xb7\xfe\x9f\x3c\x48\x7f\xab\x6a\x10\xfe"
- "\x96\xf1\xdb\xe3\x6f\x2d\xba\xc2\xfd\xad\xcf\x33\x83\xb0\x3b\x87"
- "\x7a\xd9\x9d\x94\xab\x76\x07\x75\xcd\xff\x8b\x1e\x9c\xdd\xa9\x77"
- "\x0d\xc8\x7b\x93\x88\xf7\xa8\xf3\x05\xbe\xbb\x63\xf6\xa5\x84\xcd"
- "\x7b\xd0\xf5\xc5\xe9\xdf\x66\xbe\x7f\x5e\x35\x38\xbe\x37\x04\x3c"
- "\xff\xf0\xaa\xaf\x35\x10\xef\x6d\x53\x06\xc7\xfb\xe3\x8e\xf0\x7d"
- "\xad\x7f\x34\x7e\xd2\xe3\x6b\xfd\xa3\xb1\xb7\xaf\x85\xbe\xd5\x53"
- "\x4e\xe6\x73\xbd\x0e\xbe\x52\xde\x4a\xf0\xbb\x52\x09\xb1\xb6\x1c"
- "\x24\x26\xf0\xbd\xf2\xce\x80\xff\x95\x04\xfe\x97\xeb\x5d\xc1\xff"
- "\xfa\xc7\xd3\xbe\xfe\x57\xe3\x11\xbf\xfe\x97\xd2\xeb\x7f\xb9\xc0"
- "\xb7\xea\x7e\x77\x5f\x4a\xc1\x19\x91\x2f\xf6\x72\x5f\x5f\xac\xcb"
- "\xdc\x54\xd5\x75\xcb\x3e\x63\x37\xf8\x63\xfd\xf9\x62\x3c\x26\xfc"
- "\xf8\x63\xff\x19\xbe\x58\xc3\x81\xc1\xf9\x62\xff\x88\xf6\xf5\xc5"
- "\x4e\x6c\x09\xce\x17\xfb\xc7\xf6\x80\x63\x5f\x61\xfb\x62\xff\x28"
- "\xf7\xf5\xc5\x4e\xa4\x08\x98\x59\x11\xba\x2f\x76\x62\x4e\x60\x5f"
- "\xec\xc4\x8b\xbe\xbe\xd8\x09\x61\xef\xe9\x89\x5c\xe6\x8b\x9d\x98"
- "\xc2\xd2\x1b\x93\xc4\xe9\x5e\x5f\x8c\xa5\x33\x5f\xec\xc4\xb6\x20"
- "\xe7\xc6\x0e\xb9\xc0\xa6\x7f\xf3\xeb\x29\xfb\x9b\x1b\x1b\xaa\xf5"
- "\x94\x2f\x5d\xe1\x73\x63\x4d\x03\x8f\x7f\x5d\xf5\x09\xfc\xe8\x9a"
- "\x13\xe5\x83\xb3\x4b\xcd\xb9\x57\x7d\x82\x70\x79\xdf\x34\xc8\xb1"
- "\xaf\x16\x59\xf8\x3e\xc1\xc9\x3a\xef\xf8\xcb\xc9\xba\xd0\xc6\x5f"
- "\x4e\x4e\xf5\xb5\xff\x2d\xfe\xed\xff\xd5\xf1\x97\x10\x6c\x7e\x73"
- "\xdd\xe0\x6c\xfe\x49\xb5\xaf\xcd\xff\x72\x53\x70\x36\xff\xa4\x79"
- "\xe8\xc7\x5f\x4e\x16\xf9\xda\xfc\x2f\xf5\x02\x4e\xb2\x42\xb7\xf9"
- "\x5f\x4e\x0f\x6c\xf3\xbf\x7c\xda\xd7\xe6\x7f\x19\xc3\x6c\xfb\x97"
- "\x69\xcc\xe6\x7f\x39\x91\xa5\xb7\x64\x8a\xd3\xbd\x36\x9f\xa5\x33"
- "\x9b\xff\x65\x6e\x68\xf3\x5d\xaa\x2b\x74\xbe\x4b\xfd\x1d\x99\xef"
- "\xfa\x8a\x5c\xb5\x3b\xe1\xda\x9d\x2f\x8b\x06\x67\x77\x4e\x0d\x18"
- "\xff\x23\xb0\xdd\x39\x3d\xcd\x6b\x77\x4e\x4f\x0b\xcd\xee\xb4\x1d"
- "\xf4\xb5\x3b\xff\x7e\xe4\xaa\xdd\x19\xac\xdd\xf9\x6a\xda\xe0\xec"
- "\x4e\x5b\xaf\xf8\x47\xa7\x83\x8c\x7f\x74\x3a\x60\xfc\xa3\xf0\xed"
- "\xce\xe9\x5e\xf1\x8f\x4e\x0b\xf1\x8f\x4e\x85\x11\x37\xe4\xf4\x87"
- "\x81\xed\xce\xe9\x5e\xf1\x8f\x4e\x0b\xf1\x8f\x4e\x0b\xf1\x8f\x4e"
- "\x0b\xf1\x8f\x4e\x39\xc5\xe9\x5e\xbb\x73\x4a\x14\x37\xe4\xcc\xd5"
- "\xf8\x47\xdf\xba\x75\x98\x67\x07\xa1\xff\xda\x75\x5e\xfd\xd7\xae"
- "\x0b\xbc\x0e\xf3\xeb\x62\xdf\x75\x98\x8e\xdb\xaf\xae\xc3\x0c\x47"
- "\xbf\x9d\x19\x64\x5c\xa4\xaf\xf5\xbe\xfa\xad\xfd\x58\x70\xfa\xed"
- "\xeb\x7f\x0d\xbd\x7e\xfb\xba\xc3\x57\xbf\xb5\x5b\x58\x99\xce\x86"
- "\xa1\xdf\xda\xdf\x0e\xac\xdf\xda\xf7\xf8\xea\xb7\xf6\x34\xa6\xc7"
- "\xda\x8f\x32\xfd\xd6\x5e\xc0\xd2\xcf\x3a\xc5\xe9\x5e\xfd\x76\x56"
- "\xa4\xdf\xda\xed\xa1\xcd\x6b\x86\xe5\x57\x5f\x86\x79\xcd\xa1\xf2"
- "\xab\xaf\xf4\x79\xcd\x8e\x84\xab\xe3\x68\xe1\xf8\xd4\xed\x1d\x83"
- "\xf3\xa9\xcf\xd7\x85\x6f\x53\x9c\xfb\xbd\x36\xc5\xb9\x3f\xd0\xfc"
- "\x4e\x1e\xe0\xce\x04\x3e\xf1\x96\x33\x44\xf6\x3a\xce\xef\x1c\xad"
- "\x21\x66\x9c\xdf\x59\xe9\x99\xdf\x29\x16\xfc\x6c\xe7\xad\xbe\x7e"
- "\xf6\x85\x3d\xfe\xfc\x6c\xf4\xaf\xdd\xe0\x3b\xbb\x7a\xcf\xeb\xbc"
- "\xe0\xdf\x16\x75\x29\x9b\xaa\x2e\xbe\xbb\xcf\x18\xaa\x2d\xda\xb1"
- "\x81\xd9\xa2\xb7\xbe\xf5\xb6\xa8\xa3\x74\x70\xb6\xa8\xb3\xc3\xd7"
- "\x16\x5d\x5c\x18\x9c\x2d\x72\xae\x1e\x7a\x5b\xe4\xcc\xf4\xb5\x45"
- "\x17\x67\x08\x58\x79\x2a\x74\x5b\x74\xf1\xf6\xc0\xb6\xe8\xe2\xbd"
- "\xbe\xb6\xe8\xa2\x9c\xd9\x9c\x8b\x89\xcc\x16\x5d\x8c\x66\xe9\x17"
- "\x66\x88\xd3\xbd\xb6\x88\xa5\x33\x5b\x74\x31\x29\xb4\x31\x9e\x11"
- "\x57\xe8\x18\x8f\xfc\x3b\x32\xc6\xd3\xd5\x12\xbe\x4e\x74\x97\x57"
- "\xf7\xec\xdf\x70\x97\xf7\x19\x67\x48\x05\x7f\xbb\x9d\xcd\x73\xf7"
- "\x8c\x33\xd8\xbf\x10\xf4\x9f\x7b\xac\xaf\xfe\xeb\x0e\xa8\xff\xfa"
- "\x9b\xcb\xc6\x71\x05\x37\xe8\x46\x57\xf1\x20\xe6\xb2\x53\xbf\xed"
- "\x3a\xef\xe2\x20\xe3\x2b\xbb\x5a\x7d\x75\x1e\x37\x27\x38\x9d\xe7"
- "\x5e\x12\x50\xe7\x85\xbd\x8f\xc3\x9d\xe2\xab\xf3\xb8\x38\x01\x1f"
- "\x0b\x43\xd7\x79\xdc\x4d\x81\x75\x1e\x77\xab\xaf\xce\x73\xbb\x98"
- "\x6e\xe3\x66\x33\x9d\xc7\xa9\x59\x7a\x77\xa2\x38\xdd\xab\xf3\x58"
- "\x3a\xd3\x79\x5c\x62\x7f\x3a\x8f\x9a\xca\xaa\x0a\xa4\x5c\x05\x5c"
- "\x95\x50\xc6\x31\x80\x0d\x0b\xfc\x5f\x05\x32\x1e\x0d\xff\x07\xf4"
- "\x49\x1c\xca\xb2\x2a\x2e\x1b\xca\x2c\x25\x12\xab\xe3\xac\xc5\x72"
- "\x83\x0b\xcb\x6d\x67\xfc\x29\xab\x52\xb9\x46\x4c\xe3\xa8\x9e\x80"
- "\x5c\xaa\xf8\xb3\x31\x81\x1e\xf7\x07\x69\x53\x49\xe4\x19\x09\x25"
- "\x1e\x3a\x28\x6f\x64\xb3\x84\x3b\x88\x79\x74\xe6\x50\x05\xd4\x25"
- "\x29\x60\x59\x21\xaf\xf8\x3d\xe3\xc8\x26\x17\xfd\xd2\xb2\xb2\x9d"
- "\xb4\x48\xe8\x1c\x55\xdb\x88\x69\x34\x23\x81\xa0\x2f\x57\x71\x83"
- "\x43\x86\x79\xe2\x79\xba\xf0\x6e\x22\xbe\x73\x43\x19\xd3\x57\x10"
- "\x69\x7e\xfb\x08\x39\xe8\x89\x61\x19\x1d\xb4\x75\x95\x0b\xca\x0c"
- "\xd8\xfc\x60\x5c\xbd\xec\xf7\x6f\x41\x9a\x9b\x68\xf0\x6c\x52\xcc"
- "\x03\xfc\x59\x28\x0f\x7d\xbe\x04\xe8\xfd\x95\xe1\xb5\xf7\xc9\xf8"
- "\x61\xb7\x52\x7b\x68\xb8\xa1\x7b\x03\xf1\x51\x95\x35\x8e\x58\x6e"
- "\x03\xde\x69\x89\xd4\xdf\xfb\x90\xbe\x23\x25\xfd\xed\x7f\x97\xe3"
- "\xd9\xc6\x19\xdb\x89\x74\x2b\x37\x42\xfe\x51\x1a\x7f\xfe\xb0\xa3"
- "\x33\x8f\x64\xda\x25\x8b\x1b\x91\xe7\x78\xae\x25\x9e\xff\x0e\xb8"
- "\x21\x90\x5e\xf8\xa1\x91\x90\xde\xb2\x48\x5e\xbc\x62\xa1\x36\x65"
- "\xf9\x8a\x25\xab\xd6\xa6\x68\x6f\x59\x3c\x8a\xcc\x5e\xb5\x4a\xbb"
- "\x62\xe1\xca\xf5\x5a\xf1\x9b\x49\xda\xc5\xcb\xd7\x2c\x7c\x29\x69"
- "\xc9\xed\x2b\x16\x19\x46\xa1\xb0\x45\xe5\x88\xc2\xb2\x70\x79\x64"
- "\x77\xc9\x1b\x84\xfc\x6a\x34\x91\x61\xb9\x3a\xf3\x24\x72\xcf\x19"
- "\xa6\x78\x86\xa7\x14\x68\x32\x40\x3f\x6e\x4d\x1f\x81\xb4\x51\x3b"
- "\xa1\x5c\x25\x50\x6e\x28\x23\x94\x59\x32\xc1\x53\x66\x0f\x26\x32"
- "\x10\x13\xe9\xed\xe4\xa4\x54\x32\x47\xe5\x1c\xf1\x33\x4a\x13\xb0"
- "\x7e\x18\x43\x4b\x02\x69\xef\xf2\xb6\xcc\x5c\x56\x05\xbf\x35\x78"
- "\x30\x86\xbf\xa5\xf9\x65\x05\x9d\xd8\x4e\xa8\xfe\xa7\x7c\x9b\x92"
- "\x4a\xa7\xcd\xd1\x49\x08\x7f\x86\x6a\x9e\xa4\xa8\xe7\x0c\x55\x48"
- "\x47\xde\x42\x39\xda\x20\x7d\xbf\x5d\x72\x9f\x02\xd3\xf1\xec\x5f"
- "\x3c\x0b\x15\xcb\x0c\xf5\x02\x5b\x4a\x2d\x34\x5b\xc0\x7e\xee\xf9"
- "\x59\x9c\xe9\xfa\x58\xab\xec\x02\x89\x77\xd1\x6e\xba\xe5\xfc\xac"
- "\xda\x8e\x0e\xa2\xca\x32\x2c\xa2\xa3\xc8\x9f\x54\xae\xe5\x4b\xf0"
- "\x0c\x57\xce\x7c\x7d\x2c\x35\xab\xa6\xcd\xb9\x95\xa8\x3b\xf3\xa4"
- "\x6a\xd1\x59\xae\xb2\xd0\xe4\x2f\xe5\xe5\x8f\x72\xc4\x33\x5a\x99"
- "\x1c\xa5\x89\x1f\xa6\xf4\x95\x63\x0f\xfe\xf6\x70\xe4\x30\x60\x81"
- "\x2a\xea\xd5\xf1\x6e\xc6\x47\x6c\xbb\xe7\x32\xf4\xe4\x4e\x9e\x77"
- "\x11\x1a\x2e\xff\x73\x07\x67\xaa\xd7\x51\x53\x7d\x14\xf0\xac\x3c"
- "\x3f\x95\x68\x17\xb8\xd5\xc4\x7c\x81\xc4\x3a\xcc\xf5\xe0\x9f\x64"
- "\x4a\xc0\x1f\x91\x82\x3d\x89\x05\x9d\x11\x2b\xb4\xf7\x72\xe4\xe3"
- "\xff\xb6\x11\x32\x73\x0d\x21\x5f\x4e\x26\x11\x25\xf0\xbb\x10\xeb"
- "\xc3\xdb\x7f\x9a\x27\x2d\xda\x09\xbf\xc5\x33\x7a\x43\xfb\x7d\x44"
- "\x4c\xc0\x76\xe7\xad\x77\x81\xff\x7a\xcb\xd4\x5c\x7e\xbd\x01\xea"
- "\x5d\x0e\xf5\xde\xe6\xa7\xde\x05\xac\xde\xc3\xda\x87\xbe\xde\x11"
- "\x2c\xfe\x75\x5e\xc4\xb6\xf0\xea\x2d\x8b\x1e\xb8\xde\xb6\x00\xf2"
- "\x1e\x26\x87\x7a\x83\xbc\x6d\x20\x6f\x9b\x1f\x79\xdb\x04\x79\x5f"
- "\xd3\x3c\xf4\xf5\x96\x1d\x65\xf5\x96\x99\xc2\xab\xf7\xb0\x80\xfa"
- "\x4f\x54\xef\x00\xf2\x1e\x4e\xb8\x7c\x1b\xc8\xdb\x06\xf2\xb6\xf9"
- "\x91\xb7\x4d\x90\xf7\xb5\x9f\x0d\x7d\xbd\x87\xb1\xf8\x87\x79\xc3"
- "\x36\x87\x57\xef\xe1\x8a\x81\xeb\xdd\x10\x40\xde\xc3\x9d\x50\x6f"
- "\x90\x77\x03\xc8\xbb\xc1\x8f\xbc\x1b\x04\x79\xdf\x97\x37\xf4\xf5"
- "\x1e\xce\xce\x7f\xce\x1b\x9e\x16\x5e\xbd\x47\x04\x5c\xff\x22\xaa"
- "\x77\x00\x79\x8f\x70\x70\xf9\x0d\x20\xef\x06\x90\x77\x83\x1f\x79"
- "\x37\x08\xf2\x9e\xfb\xe8\xd0\xd7\x7b\xc4\x01\x56\xef\x11\x29\x61"
- "\xd6\x3b\xe0\xfa\x77\x91\x5e\xd3\x80\xee\xea\x23\x73\xab\x71\x22"
- "\xb9\xe3\x02\xd6\x7f\x64\x22\x55\xd6\x6b\xae\xc9\xca\x94\xb8\x14"
- "\xf5\xd1\xd7\x40\x5f\x6e\x47\x36\xa7\x57\xd9\xc9\x48\xa8\xab\x9e"
- "\xe6\x37\x56\xe0\x9d\x83\x7c\x5c\xa0\xfb\xdd\x8a\xfa\xa8\x2e\x53"
- "\x59\xf9\xeb\x4b\x89\x36\xc3\x41\xd4\xb5\xe9\x76\x92\x6e\xa0\x8e"
- "\x5a\xd2\x44\x94\x76\x22\xc5\xf1\xb2\x4f\xda\x2a\xc9\xca\x64\x4a"
- "\x21\xef\xe9\xd8\xc7\xcc\x3f\x49\x62\xc1\x27\xce\xa4\x60\x3f\x0a"
- "\x38\xa2\x85\xfc\x63\x91\x97\x90\xf7\x1f\x55\xb3\x89\xe4\x6f\x2f"
- "\x39\x09\xf2\x13\x79\x0b\xfd\xd1\x58\x9e\xaf\x1d\x84\x3c\x39\x97"
- "\xf1\x75\xc7\xd2\x50\xf9\x3a\x52\x98\xff\xab\x8f\xb5\xda\xbb\x08"
- "\xf8\x96\x6a\xdc\x73\x6f\x97\xca\xeb\x6a\x0d\xed\x84\xe6\xc9\x53"
- "\xa8\xb9\x5e\xcb\x81\xcd\x0a\x31\xdf\x80\xf1\xaf\x45\xfc\x2e\x04"
- "\x7e\xf7\xc1\x9a\x97\xdf\xa3\xa0\x1f\x52\x5f\x28\xf0\xbb\xe8\x9a"
- "\xc6\x61\xed\x01\xf8\x5d\x08\xfc\x2e\x07\x7e\x6f\x0b\x9e\xdf\xa3"
- "\xfe\xe2\xcb\xef\x7a\xc3\xe5\xe1\xf7\x28\xe1\xfc\xd3\xfa\x0a\x5f"
- "\x7e\x8f\x8a\x63\xfc\x1e\xd9\x02\xfc\x2e\x05\x7e\x17\x84\x98\x6f"
- "\x63\x10\x7a\x1c\xf0\xdd\xd7\x86\x79\xf9\xad\x88\xa3\x4a\x9b\x80"
- "\x6f\x1b\xe0\xfb\x9a\x66\xff\xfc\xb6\x01\xbe\x6d\x80\x6f\x5b\x08"
- "\xf8\x56\xdc\xda\x8b\xdf\x97\x09\xdf\xd7\x08\xe3\x7f\xb6\x5e\xf8"
- "\xbe\xa6\x82\xf1\xfb\x9a\xd9\xd4\x6c\x03\x7c\xdb\x42\xc4\xb7\x62"
- "\x46\x10\xfc\x06\x7c\xf7\xb5\x9d\x5e\x7e\x2b\x2b\x80\xdf\x02\xbe"
- "\x6d\x80\xef\x6b\x3f\x0b\xc0\x6f\xc0\xb7\x0d\xf0\x6d\x0b\x01\xdf"
- "\xca\xed\xbe\xfc\xb6\x5d\x26\x7c\x2b\x17\x0b\xfc\xee\x85\x6f\xa5"
- "\x96\xf1\x5b\x71\x08\xf8\x0d\xf8\xb6\x85\x88\x6f\xe5\x81\x20\xec"
- "\x16\xe0\xbb\xaf\xcd\xf6\xf2\x5b\xa5\xa5\xca\x06\x01\xdf\x0d\x80"
- "\xef\xfb\xf2\xfc\xf3\xbb\x01\xf0\xdd\x00\xf8\x6e\x08\x01\xdf\xaa"
- "\x91\xbd\xf8\x7d\x99\xf0\x1d\xc9\xfc\x3f\x53\x43\x2f\x7c\x47\x16"
- "\x30\x7e\x47\x4e\xa0\xe6\x06\xc0\x77\x43\x88\xf8\x56\x8d\x0f\x82"
- "\xdf\x80\xef\xbe\xbe\x82\x97\xdf\xea\x02\xe0\xb7\x80\xef\x06\xc0"
- "\xf7\xdc\x47\x03\xf0\x1b\xf0\xdd\x00\xf8\x6e\x08\x01\xdf\xea\xf5"
- "\xbe\xfc\x6e\xb8\x4c\xf8\x56\x0b\xe7\x5f\x36\xf4\xc2\xb7\x9a\x30"
- "\x7e\xab\x76\x03\xbf\x01\xdf\x0d\x21\xe2\x5b\x5d\x14\x8e\x7f\xb2"
- "\xa6\x98\xc8\x7d\x79\x3e\x5a\x76\xe9\x7c\x94\x6b\x4f\x7f\x33\x3e"
- "\xca\xb5\x95\xfe\x7d\x94\x6b\x53\x18\xcf\xaf\xd5\x84\xe7\xa3\x8c"
- "\x0e\xb8\xff\xa1\x3f\x1f\xa5\x2f\xcf\xaf\x33\x5e\x3a\x3f\xe5\xba"
- "\x85\xdf\x8c\x9f\x72\xdd\x78\xff\x7e\xca\xe8\x56\xc6\xf3\xd1\xa6"
- "\xf0\xfc\x94\xeb\x02\xc6\x3f\xe8\xcf\x4f\xe9\xcb\xf3\xa8\xb6\x4b"
- "\xe7\xab\x44\x1d\xfb\x66\x7c\x95\xa8\x52\xff\xbe\x4a\xd4\x3c\xc6"
- "\xf3\x28\x12\x9e\xaf\x12\xe5\x0c\xc7\x57\xe9\xcb\xf3\xeb\x13\x2f"
- "\x9d\xbf\x72\xfd\xf4\x6f\xc6\x5f\xb9\x3e\xca\xbf\xbf\xf2\x3d\xa1"
- "\xff\xf3\xbd\x94\xf0\xfc\x95\xeb\x83\xe8\xff\xf4\xf5\x57\xfa\xf2"
- "\xfc\xfb\x47\x2f\x9d\xcf\xf2\xfd\x83\xdf\x8c\xcf\xf2\xfd\x5c\xff"
- "\x3e\xcb\xf7\xa7\x30\x9e\x5f\xdf\x1a\x9e\xcf\xf2\x7d\x7b\x38\x3e"
- "\x4b\x5f\x9e\x8f\x99\x76\xe9\xfc\x96\x31\x77\x7d\x33\x7e\x8b\xc6"
- "\xe5\xdf\x6f\xd1\x54\x32\x9e\x6b\xe6\x85\xe7\xb7\x8c\x99\x1d\x8e"
- "\xdf\x82\xbc\x46\x9e\xa3\xaf\xc2\x78\x1e\xad\xa1\x91\x9f\x3b\xba"
- "\xc1\x1f\x51\x02\xdf\x95\x6d\x44\x5a\x8c\x3c\xaf\x67\x3c\x77\x47"
- "\x36\x56\x00\x7f\xf4\xc8\x33\xbe\x1e\xff\xd6\x44\xba\x4d\xf5\xd1"
- "\x54\x4a\xa0\x2e\x72\x72\x52\x7a\xc3\x2d\xae\x6c\x12\xa9\x4d\xcf"
- "\x82\xff\xa3\x47\x22\x8d\x36\x3d\xe7\x0b\xa8\x63\x04\xce\x51\xb8"
- "\xcc\x65\xb3\xdc\xca\xe3\x75\x27\xa5\x3f\x58\x42\xc7\xbe\x33\xab"
- "\x1b\x7c\x09\xfa\x8a\x26\xca\xda\x56\x41\xac\xae\x8f\x49\x6d\xfd"
- "\x5f\x09\x17\xd9\xf8\xc7\x3b\x5d\x44\x47\xff\xad\x8b\xaa\x4e\xb1"
- "\x13\xf7\x22\x8d\xc2\x6a\xac\x02\x5c\xfc\x91\xc4\xb7\xd2\x0b\xf4"
- "\x9f\x3a\x45\xb7\xb2\x49\xed\x56\x36\x16\xb8\xcd\x4d\xf5\x2e\x65"
- "\x13\x79\x2f\x15\x7a\x82\x4e\xa2\x4b\x6a\xa1\x34\xff\x25\x22\xcb"
- "\x6f\x26\xf2\xad\x2f\x11\xc5\xd6\x66\xa2\xae\x6e\xa9\x27\x35\xa7"
- "\xaa\x48\x4d\xbb\x8d\xd4\x5c\x80\xab\x0b\x2e\x0e\xae\x4c\x1b\xa9"
- "\x6e\x23\xe4\xa9\xd3\x84\x64\xb4\x50\xc7\x4f\x1a\x49\x54\xb5\xab"
- "\x9e\x68\xe7\x13\x72\x46\x7a\xc3\x45\x45\x22\x89\xa2\xff\xd4\x10"
- "\xba\x48\x23\x85\x77\x32\x4c\xb7\xba\x1c\xa4\xba\xc5\x89\xef\xeb"
- "\xe1\xbd\x2c\xa3\x05\xf2\xe7\xaa\x30\x96\xa1\xa3\x3a\xf3\x08\xd4"
- "\xef\xb9\x38\xe0\xb3\xce\xe3\x93\xe5\x77\x91\xd8\xad\x20\x66\xc4"
- "\x4c\x3c\x65\x98\xd9\xd9\x15\x2a\x66\x7e\xc0\xe2\xbf\xbf\xa2\x19"
- "\x0d\xfc\xbe\x81\x7b\x25\x41\x3d\xd3\x76\x82\xe2\x7a\x30\x9c\x9f"
- "\xa9\xed\xf8\x98\xe0\x9c\x75\xfc\x7a\x42\x66\xb8\x09\x41\x9e\xe0"
- "\x5c\xf2\x4c\x03\x51\xe1\x3a\x35\xee\xdf\xba\xd1\xd6\x16\x07\xd9"
- "\xe4\x82\xb2\x9e\x71\xf6\x94\xb5\x76\x73\x2d\x81\x77\x37\xd4\xea"
- "\xed\x44\x61\x20\x6a\xe4\x33\xf8\x45\x9a\x99\xad\x64\xe4\xca\x0e"
- "\x4a\x91\xc7\xc8\x5b\xe4\x33\xe6\xe7\xe1\xbd\x75\xb1\x83\x64\x38"
- "\x89\xda\x9a\x0e\x77\x23\x75\x58\xc9\xd7\x04\xca\xa8\xa0\xca\xe7"
- "\xe2\x00\x1f\xfb\x11\x13\x76\xe9\x0d\xd1\x80\x83\xd1\x34\x6f\x4c"
- "\x5d\x09\xd4\x17\xe7\xf6\x43\xab\x73\x74\x30\xf3\x1f\x7d\x7c\x42"
- "\x11\x9e\x0b\x19\x9e\xc7\xb5\xd2\xc8\x7a\x03\xe0\x79\x1b\xc3\xf3"
- "\xb0\xf6\x20\xf0\x5c\xe4\xc5\x73\xf4\x79\x2f\x9e\xc7\xd9\x02\xe3"
- "\x79\xdc\xbd\x02\x9e\x2b\xae\x4c\x3c\x8f\x3d\xd2\x3f\x9e\xc7\x96"
- "\xf7\x83\xe7\x72\x8f\xbf\x3b\x34\x78\x1e\x47\x2e\x23\x9e\x0b\xc3"
- "\xc3\xf3\xd8\x46\x5f\x3c\x47\xb7\x31\x3c\x47\x97\x86\x87\xe7\x71"
- "\x01\xe3\x1f\xf7\xe7\x6f\x7b\xf1\x6c\x13\xf4\xf3\x4d\x95\x80\x67"
- "\xd0\xcf\x36\x41\x3f\x5f\xd3\x3c\x30\x9e\x6d\x22\xfd\x7c\xe3\x61"
- "\x2f\x9e\x6f\xda\x13\x18\xcf\x37\x0d\x63\x78\xb6\x5d\xa1\xfa\x59"
- "\xbb\xbd\x7f\x3c\x6b\x8d\x81\xf1\x6c\xd3\x79\xfa\x12\x43\x83\x67"
- "\x6d\xdd\xe5\xc3\xb3\x2d\x4c\xfd\xac\xdd\xeb\x8b\xe7\x1b\x0f\x30"
- "\x3c\xdf\x68\x08\x0f\xcf\x37\x1d\x0a\xa7\x2f\x23\xc2\xb3\xa0\x9f"
- "\x63\x72\x69\xa4\x0d\xf4\xb3\x4d\xd0\xcf\xd7\x7e\x16\x04\x9e\x45"
- "\xfa\xf9\xe6\x5f\x7b\xf1\x1c\xb3\x3e\x30\x9e\x7f\x78\x4c\xc0\xf3"
- "\x15\xaa\x9f\x7f\xb8\xbc\x7f\x3c\xff\x70\x5a\x3f\x78\x2e\xf7\xf4"
- "\xd3\x86\x06\xcf\x3f\x2c\xbd\x8c\x78\x0e\x53\x3f\xff\x30\xcd\x17"
- "\xcf\x37\x9b\x18\x9e\x6f\x8e\x0b\x0f\xcf\x31\xdb\xc2\xe9\x27\x7a"
- "\xf1\xdc\x20\xe8\xe7\x1f\x27\x00\x9e\x41\x3f\x37\x08\xfa\xf9\xbe"
- "\xbc\x81\xf1\xdc\x20\xd2\xcf\xb7\x2c\xf1\xe2\xf9\xc7\xd3\x03\xe3"
- "\xf9\x47\xef\x32\x3c\x37\x5c\xa1\xfa\xf9\x47\x0f\xf4\x8f\xe7\x1f"
- "\x69\x02\xe3\xb9\x41\xe7\xe9\x03\x0f\x0d\x9e\x7f\x64\xb8\x7c\x78"
- "\x6e\x08\x53\x3f\xff\x68\x86\x2f\x9e\x6f\x99\xc7\xf0\x7c\x8b\x3a"
- "\x3c\x3c\xff\x38\xe0\xf9\xaf\xfd\xf5\xc1\x45\x78\x16\xf4\xf3\x6d"
- "\x3a\x1a\xd9\x00\xfa\xb9\x41\xd0\xcf\x73\x1f\x0d\x02\xcf\x22\xfd"
- "\xac\xbb\xd7\x8b\xe7\xdb\xc6\x04\xc6\xf3\xad\x6b\x05\x3c\x5f\xa1"
- "\xfa\xf9\xd6\x91\xfd\xe3\x59\xd7\xda\x0f\x9e\xcb\x3d\xe3\x0b\x43"
- "\x83\xe7\x5b\xe3\x2e\x23\x9e\xc3\xd4\xcf\xb7\x46\xfb\xe2\x59\x37"
- "\x9e\xe1\xf9\xc7\xf6\xf0\xf0\x7c\xdb\x84\xa1\x19\xdf\xb8\x5d\x87"
- "\xe3\x1b\x5d\x38\xbe\xe1\x5d\xfb\xa7\x57\xd5\x31\x3c\x77\x03\x9e"
- "\x77\x88\xf1\x7c\xbc\xf7\xf8\xc6\x4f\x86\x71\x3d\x78\xbe\xbd\x0f"
- "\x9e\x39\xc0\x73\x37\x8f\xe7\xf1\x77\x79\xc6\x37\xac\x6d\xa5\x80"
- "\x93\x53\xc4\x3a\x0b\xb0\x9c\x2f\x60\xf9\x38\x60\x19\x78\xc8\x01"
- "\x8f\xab\x1b\xeb\x49\xbc\x83\xf1\xb2\x0b\x78\xcc\x89\x71\xdc\xd5"
- "\x2a\x45\xfc\x22\x6e\x3d\x18\xae\x59\x09\xd8\x4d\xfe\x94\xd4\xa4"
- "\xc2\xb5\x01\xae\x74\xb8\xc8\xa7\xa4\xba\x15\xb0\xbb\x5c\x8c\xdd"
- "\x3a\x01\xbb\x3f\x39\xdc\x3f\x76\x7f\xb2\xfb\xf2\x8d\x65\xfc\x84"
- "\x8d\x7f\x1d\x4f\x50\xc7\x3f\x7d\x82\x5a\x8d\xf5\x02\x3e\x4f\x91"
- "\x78\x17\x51\xd1\xb9\xba\xd1\x8a\x04\xa2\xde\xe8\x26\x52\xf3\x4b"
- "\x44\x6d\x6e\x80\x7a\x7b\xda\x6f\x33\x51\x7c\xec\xfc\x2b\xa9\x6e"
- "\xaf\x27\xd5\x17\x8e\x90\x6a\x0e\xae\x53\x70\x41\x59\xe3\x97\x88"
- "\xeb\xed\x10\xea\x3d\xfe\x20\xe4\x15\x13\xb8\xde\xe3\x8b\xf8\x7a"
- "\x2f\x86\x7a\x77\x79\xeb\x6d\x85\x76\x00\xf2\xb9\x81\x13\xc6\x43"
- "\xe2\x1d\x64\xe4\x2a\x17\xa5\x5d\x02\xfe\x51\x3e\x1f\x1f\x75\x92"
- "\x78\x03\xc8\x6c\x11\xe0\xbf\xa5\x9c\x64\xa4\x01\xfe\xbb\x9c\x88"
- "\x3b\x87\x35\xf3\x22\xe0\xff\x27\xf5\x14\xf8\xd7\x8d\xf8\x3f\x8e"
- "\xf8\xbf\xcd\xc5\xf1\xf8\xbf\xad\x22\x3c\xfc\xdf\x1e\x0c\xfe\x83"
- "\x18\x0f\x89\xd5\xe1\x78\x48\x17\x8e\x87\x78\xd7\x80\x0e\x84\x7f"
- "\x91\x3e\xbf\x43\x84\xff\xd8\x7e\xf0\x7f\xa7\x07\xff\x15\xdf\x3c"
- "\xfe\xef\x18\x00\xff\x77\xf4\x87\xff\x21\x1e\xfb\xb8\xe3\x32\xe2"
- "\xff\xce\x01\xf0\x7f\x67\x30\xf8\x2f\x0c\x0f\xff\x77\xf4\xc2\xff"
- "\xed\x02\xfe\x6f\x0f\x13\xff\xb1\x41\xe0\x3f\x98\xf1\x93\x7b\x10"
- "\xff\xa0\xff\x6d\x51\xa2\xb5\xc0\x03\xe0\x5f\x3c\x7e\x72\x97\x08"
- "\xff\xf7\xf4\x83\xff\xbb\xef\xf2\x8c\x9f\x7c\xf3\xf8\xbf\x6b\x00"
- "\xfc\xdf\xd5\x0f\xfe\x87\x7a\xac\xe4\xae\xcb\x88\xff\xbb\x07\xc0"
- "\xff\xdd\x41\xe0\xdf\x16\xa6\xfe\xbf\xab\x17\xfe\x63\x05\xfc\xc7"
- "\x86\x89\xff\x7b\x82\xc1\x7f\x10\xe3\x2d\xf7\xe9\x70\xbc\xa5\x0b"
- "\xc7\x5b\xbc\x6b\xc2\x07\xc2\xbf\x48\xff\x4f\x10\xe1\xff\xbe\x7e"
- "\xf0\x7f\xaf\x07\xff\x57\x80\xfe\x9f\x30\x00\xfe\x27\xf4\x87\xff"
- "\x21\x1e\x5b\x99\x70\x19\xf1\x7f\xef\x00\xf8\xbf\x37\x18\xfc\x87"
- "\xa9\xff\x27\xf4\xc2\xff\x3d\x02\xfe\xef\x09\x13\xff\xf7\x05\x81"
- "\xff\x60\xc6\x67\x1e\x40\xfc\x83\xfe\x6f\x88\x12\xed\x0d\x18\x00"
- "\xff\xe2\xf1\x99\xfb\x45\xf8\x7f\xa0\x1f\xfc\x4f\xbc\xcb\x33\x3e"
- "\xf3\xcd\xe3\xff\xfe\x01\xf0\x7f\x7f\x3f\xf8\x1f\xea\xb1\x98\xfb"
- "\x2f\x23\xfe\x27\x0e\x80\xff\x89\x41\xe0\xbf\x21\x4c\xfd\x7f\x7f"
- "\x2f\xfc\xdf\x27\xe0\xff\xbe\x30\xf1\xff\x40\x30\xf8\x0f\x62\x3c"
- "\x67\x32\x3f\x9e\xd3\x85\xe3\x39\xde\x3d\x22\x03\xe1\x5f\xa4\xff"
- "\x27\x89\xf0\x3f\xb9\x1f\xfc\x3f\xe8\xc1\xff\x15\xa0\xff\x27\x0d"
- "\x80\xff\x49\xfd\xe1\x7f\x88\xc7\x6e\x26\x5d\x46\xfc\x3f\x38\x00"
- "\xfe\x1f\x0c\x06\xff\x61\xea\xff\x49\xbd\xf0\xff\x80\x80\xff\x07"
- "\xc2\xc4\xff\xe4\x21\x1a\xff\x79\xa8\x0e\xc7\x7f\x38\x45\x7d\x54"
- "\x77\xd1\x3b\xb3\x38\x53\x93\x5a\x25\xd1\x12\x97\xe2\x78\x9d\x35"
- "\xa5\x83\xcc\x3c\x0f\x32\x31\x9c\x27\xf3\xcf\xab\x89\xdb\xd4\x44"
- "\x28\xf4\xff\x7d\xf6\x88\xc2\xe5\x32\x3d\x17\xb7\x75\x25\x91\xb9"
- "\x23\x1b\xff\x88\x69\xd6\x93\x4e\x82\x75\xde\x84\x3c\x38\xe5\xe5"
- "\x01\x8e\xc1\xd1\xb3\x3a\x75\x49\x36\xd0\x74\xd9\x49\x0b\xe0\xa5"
- "\xba\xc5\x0e\xbc\xdf\xc0\x63\x0b\x65\x01\xe5\x31\xec\x3c\x43\x64"
- "\xae\x7f\x6a\x6e\x00\x19\x47\x29\xd7\x11\x49\x74\x0b\xe5\x50\x96"
- "\x28\x23\x94\xab\x76\x03\xae\x57\x7a\xe8\x48\x2d\xe0\xdb\xf5\x4f"
- "\xdd\x0d\x25\x40\x37\xf4\xe3\x32\x0f\xf1\xf3\x1f\x70\xd7\x57\x37"
- "\x02\x2f\xf3\x26\x87\x29\xa7\x87\x82\xd8\xff\x12\xcc\x38\xc5\xc3"
- "\x46\x1c\xa7\x00\x39\x6d\x0b\x52\x4e\x85\x3e\x7b\x5a\x87\x5c\x4e"
- "\x0f\x6b\x82\x93\xd3\xc3\xab\x7b\xc9\x69\x88\xc7\x0f\x1e\x9e\xcc"
- "\xe4\xf4\xb0\x9a\xc9\xe9\xa7\x09\xe1\xc9\xe9\xe1\xb0\xd6\xff\xf6"
- "\xed\x4f\x3f\xa2\xc5\xfe\x34\x07\xfd\xe9\xe0\xe4\x64\xd3\xf8\xec"
- "\xc1\x1d\x72\x39\xc5\x59\x82\x93\xd3\x23\x63\x7c\xe5\x34\xd4\xfd"
- "\xdc\xb8\x16\x26\xa7\xb8\x4a\x26\xa7\x38\x12\x9e\x9c\x1e\x09\x62"
- "\xff\x47\x30\xfd\xbe\x47\xab\xb0\xdf\x07\x72\x0a\xb2\x3d\xd9\x0a"
- "\x7d\xf6\x0c\x0f\xb9\x9c\x1e\xd5\x07\x27\xa7\x47\x3f\xec\x25\xa7"
- "\x21\xee\x8f\x3d\x6a\x62\x72\x7a\x34\x91\xc9\xe9\x91\xf2\xf0\xe4"
- "\xf4\xe8\xd1\xa1\xe9\x9f\x4c\x31\x60\xff\x84\x83\xfe\x49\x70\x72"
- "\x6a\xd0\xf8\xec\x71\x1e\x72\x39\x4d\x51\x07\x27\xa7\x29\xcb\x7d"
- "\xe5\x34\xd4\xfd\x86\x29\xec\x3c\x60\xe9\x14\x39\x93\xd3\x63\xb3"
- "\xc2\x93\xd3\x94\x80\xf1\x4f\x43\xf3\xa3\x1f\xd7\xa0\x1f\x0d\x72"
- "\x0a\xb2\x3d\x35\x14\xfa\xec\xc9\x1e\x72\x39\x4d\xad\x0c\x4e\x4e"
- "\x8f\x5f\xdb\x4b\x4e\x43\xec\xdf\x4e\x6d\x64\x72\x9a\x5a\xc1\xe4"
- "\x34\xc5\x19\x9e\x9c\x1e\x0f\x66\xfd\xa7\xdf\x7d\x58\x7d\x7d\xbe"
- "\x9f\x1d\xba\xb2\x7c\xbe\x9f\x2d\x0e\x4e\x56\x3f\x3b\x78\x69\x7d"
- "\xbe\x9f\xe5\x32\x59\xfd\x6c\x1e\x93\xd5\xe3\xbb\xc3\x93\xd5\xcf"
- "\x02\xc6\x5a\x1a\x68\xff\x56\x5f\xbf\x6f\xba\xe1\xca\xf2\xfb\xa6"
- "\x07\xa9\xff\xa6\x2f\xbf\xb4\x7e\xdf\x74\x41\xff\x4d\x17\xf4\xdf"
- "\xb4\x30\xf5\xdf\xf4\x20\xf4\x9f\xff\x7d\x5f\x7d\x7d\xbf\x27\xa3"
- "\xaf\x2c\xdf\xef\x89\x03\xc1\xc9\xea\xc9\xef\x5d\x5a\xdf\xef\x09"
- "\x3b\x93\xd5\x13\xfb\x99\xac\xa6\xbb\xc2\x93\xd5\x93\xba\x70\xf7"
- "\x8b\xf5\xf5\xff\x66\x5c\x61\xfe\xdf\x8c\x20\xfd\xbf\x19\x97\xd8"
- "\xff\x9b\x21\xf8\x7f\x33\x04\xff\xef\xc9\x30\xfd\xbf\x19\x61\xf9"
- "\x7f\xbe\xb2\xf2\xf8\x80\x33\x53\xae\x2c\x1f\x70\x66\x54\x70\xb2"
- "\x9a\xb9\xe2\xd2\xfa\x80\x33\x27\x32\x59\xcd\x54\x30\x59\x3d\x35"
- "\x3b\x3c\x59\xcd\xcc\x0c\x77\x7f\x5a\x5f\x3f\x70\x96\xf6\xca\xf2"
- "\x03\xe3\x83\xec\xff\xce\x1a\x73\x69\xfd\xc0\x78\xa1\xff\x1b\x2f"
- "\xf4\x7f\xe3\xc3\xec\xff\xce\x0a\xa2\xff\x1b\xcc\xb8\xdf\x33\x99"
- "\xe8\x03\xba\x4d\xf5\x51\x2a\xe0\xbf\xca\x48\xa4\x5d\xd1\x20\x2f"
- "\x05\xc8\x2b\x4b\x4b\xba\x4d\x20\x2f\x87\x8b\xcc\x5c\x7d\x82\xd6"
- "\xb6\xb9\x49\x17\xc8\xea\x22\xf8\x81\x56\x47\x2b\xee\xd1\x7b\xb0"
- "\x59\xfa\xcc\x98\xb9\xab\xd5\x04\xe5\x85\xfc\x77\x2b\x9e\x8b\xa3"
- "\x20\x2f\x5e\x7e\x8a\xa6\x7a\x97\xa9\xb1\xe0\xa9\xd3\x27\xe8\x2a"
- "\x3b\xa5\x35\x7a\x27\xc6\x8e\x9c\x55\xa3\xaf\x27\xc0\x85\x91\xda"
- "\x67\x50\x2e\x4f\x1f\xc1\x74\xab\xa3\x9e\x60\xdc\x4f\x7e\x0c\xfc"
- "\x84\x2e\xca\xf5\xb9\x4e\x81\xf1\x9b\x70\x5f\xa1\x27\x46\x93\xf5"
- "\x54\x21\x2f\xff\xde\x63\xaa\xbc\xfc\x3f\xd7\xa9\x77\xe0\xfe\xc4"
- "\x21\xf7\x05\x9f\xe6\xc7\xff\xb8\x13\x9a\x1b\x3c\x65\x5c\x95\x44"
- "\x29\x94\x71\x74\x6d\x87\x83\x60\x39\x6b\x3b\x2c\x24\x23\x85\xa8"
- "\x6b\xbb\x5a\x49\x7a\x07\x75\xd4\x66\x7e\x45\xe2\xcf\xe3\xbc\x00"
- "\xe2\xe9\x99\x6b\x99\xbc\x9f\x9e\xcc\x9d\xd0\xdd\x60\x97\x3e\x23"
- "\xaf\x05\xaf\x50\x95\x05\xbc\x76\x11\x29\xbf\x5f\x53\x4a\xe4\xc0"
- "\x2f\xbd\x35\xb3\x99\xd0\xc8\x2f\xd4\x56\x57\x03\xf2\x53\x0f\xef"
- "\x27\xf7\xcc\x37\x44\x7e\x31\x1a\xd3\x90\xb7\xb8\xce\xd4\x6a\x70"
- "\xf0\x34\x9e\xf7\x4c\x76\x99\xc4\x6a\xec\x22\xb5\x2e\x42\x00\x1f"
- "\xad\x9f\x24\xd4\x03\xbe\x66\x85\xa9\xb7\x9f\x31\x0d\xcd\x78\xe5"
- "\x6c\x3b\xfa\xad\x80\xaf\x6d\xac\x8c\xc3\xda\x83\xc0\x57\xa1\x17"
- "\x5f\xb3\xd7\x0f\x0e\x5f\xb3\x6f\x1d\x62\x7c\x0d\xb1\xff\xfa\xf3"
- "\x8e\xc1\xe1\x6b\xf6\x6a\x86\xaf\x9f\x17\x31\x7c\xcd\xd6\x7b\xf1"
- "\x35\xac\xfd\xd2\xe1\xeb\xe7\xd3\x18\xbe\x7e\x2e\x0f\x0f\x5f\xb3"
- "\xdb\x86\x66\x9c\x15\xf1\x50\x0f\xfa\xcb\x26\xe8\xaf\x6b\x9a\x07"
- "\xc6\x97\x4d\xa4\xbf\x9e\xb5\x0d\x0e\x5f\xcf\x6e\x19\x5a\x7c\x0d"
- "\xb5\xcf\xfd\xec\xec\xc1\xe1\xeb\xd9\x4f\x19\xbe\xe6\xb8\x18\xbe"
- "\x9e\xad\xf2\xe2\xeb\x9a\xe6\x4b\x87\xaf\x39\xe5\x0c\x5f\x73\xf4"
- "\xe1\xe1\xeb\xb9\xb0\xe2\x5f\xf5\xed\x1f\x3c\x5f\x8a\xfd\x03\xc0"
- "\x97\xa0\xbf\xae\xfd\x2c\x08\x7c\x89\xf4\xd7\xf3\x0f\x0c\x0e\x5f"
- "\x09\x5f\x0d\x31\xbe\x86\xb8\x9f\x90\xb0\x7f\x70\xf8\x7a\xfe\x2e"
- "\x86\xaf\x84\x79\x0c\x5f\xcf\xeb\xbc\xf8\xba\xf6\xb3\x4b\x87\xaf"
- "\x04\x39\xc3\xd7\x73\x55\xe1\xe1\xeb\xf9\xc0\xf1\x9f\x43\x1a\xd7"
- "\x9e\x47\xb0\x4f\xe3\x36\x35\x08\xfa\xeb\xbe\xbc\x81\xf1\xd5\x20"
- "\xd2\x5f\x73\xb7\x0f\x0e\x5f\x73\xa7\x0f\x2d\xbe\x86\xba\x6f\x33"
- "\x37\x6a\x70\xf8\x9a\xfb\x4b\x86\xaf\x17\x0e\x30\x7c\xcd\xcd\xf5"
- "\xe2\xeb\xbe\xbc\x4b\x87\xaf\x17\xf4\x0c\x5f\x2f\xe8\xc2\xc3\xd7"
- "\xbc\x60\xe2\xbf\x06\x31\x1e\x3f\x3f\x11\xfb\x61\x80\x2f\x41\x7f"
- "\xcd\x7d\x34\x08\x7c\x89\xf4\xd7\x8b\x17\x07\x87\xaf\x17\xf7\x0c"
- "\x31\xbe\x86\xb8\x3f\xf6\x62\xca\xe0\xf0\xf5\xe2\xd7\x0c\x5f\x2f"
- "\x46\x33\x7c\xbd\xd8\xea\xc5\xd7\xdc\x47\x2f\x1d\xbe\xe6\x55\x31"
- "\x7c\xcd\xcb\x0d\x0f\x5f\xf3\x83\x89\x7f\x1a\xe4\x3c\x42\xe2\xa1"
- "\xc1\xf5\x21\x13\x5f\x1c\x1c\xc6\x12\x95\x57\x76\x1f\x72\x41\xfd"
- "\xe0\x30\x96\x38\x87\x61\x6c\x41\x26\xc3\x58\xe2\x8c\xcb\xd3\x87"
- "\x5c\x30\x9e\x61\x6c\x7e\x5b\x78\x18\x4b\x1c\xc2\xf9\x8f\x45\xba"
- "\xc1\xf5\x23\x5f\xfa\x70\x70\x18\x7b\x69\xf5\x95\xdd\x8f\x7c\x69"
- "\xf2\xe0\x30\xf6\xd2\x5f\x18\xc6\x16\xb6\x30\x8c\xbd\x54\x71\x79"
- "\xfa\x91\x0b\x0b\x18\xc6\x16\x86\x39\x6f\xb3\x28\xac\xfd\x2f\xfe"
- "\xe7\x6d\x96\x98\x06\xd7\x97\x5c\x72\xcb\xe0\x30\xb6\xf8\xd8\x95"
- "\xdd\x97\x5c\x5c\x3a\x38\x8c\x2d\x19\xcb\x30\xb6\x78\x1a\xc3\xd8"
- "\x92\xa8\xcb\xd3\x97\x5c\xd4\xc1\x30\xb6\x68\x7f\x78\x18\x5b\x52"
- "\x38\x74\xf3\x4d\xcb\x1c\x83\xeb\x4f\x2e\xdb\x32\x38\x8c\x2d\x7b"
- "\xe0\xca\xee\x4f\x2e\x93\x0d\x0e\x63\xcb\xb2\x18\xc6\x96\xee\x65"
- "\x18\x5b\x66\xbc\x3c\xfd\xc9\xa5\x09\x0c\x63\x4b\x35\xe1\x61\x6c"
- "\x59\x10\xf1\xff\x83\x9d\x27\x7b\x79\xf6\xe0\xfa\x94\xcb\x4f\x0f"
- "\x0e\x63\xcb\x8b\xaf\xec\x3e\xe5\x72\xfd\xe0\x30\xb6\xfc\x5f\x0c"
- "\x63\xcb\xd5\x0c\x63\xcb\x1b\x2f\x4f\x9f\x52\x7f\x80\x61\x4c\x9f"
- "\x16\x1e\xc6\x5e\x4e\x1c\xba\xf9\xbd\xa4\xca\xc1\xf5\x2b\x93\x9e"
- "\x1e\x1c\xc6\x92\x24\x57\x76\xbf\xf2\x95\xea\xc1\x61\x2c\x69\x3a"
- "\xc3\xd8\x2b\x29\x0c\x63\x49\x71\x97\xa7\x5f\xf9\x8a\x96\x61\xec"
- "\xe5\x30\xe3\x51\x24\xf5\x89\x7f\xb5\x7c\x65\xea\xc2\xa4\xe5\x8b"
- "\xb5\xcb\x57\xa6\x24\xaf\xd6\xae\x59\xbe\x61\xc9\x43\xb7\xac\x1d"
- "\xaf\x4d\x36\x6a\x93\x97\xaf\x5c\x26\x24\x2c\x1e\x45\x9e\x59\x92"
- "\xb4\xd0\x88\x29\x40\xbd\x6c\xe5\x8a\x25\x2b\x53\xb4\xc9\x4b\x56"
- "\xaf\x5d\x9e\xbc\x04\xff\x5f\xa3\x5d\xba\x2a\x19\x12\x16\x2d\x59"
- "\x9e\xba\x44\xfb\xd2\xda\xa5\x4b\x97\x24\xaf\x19\x45\x9e\x5a\x9b"
- "\x94\xb2\xdc\x90\xb4\x44\x3b\xe5\xa9\x47\x6e\x9f\x3d\xf5\xe7\xb3"
- "\x1f\x7e\x18\x0f\x27\x13\x9d\x4d\x16\x4d\x4d\x4d\x75\x80\x39\xd9"
- "\x49\x69\xea\x8a\x5a\x0d\xe1\xcf\xc7\xdd\xda\x4e\xd4\x5b\x92\x89"
- "\x2c\xb7\x9d\xc8\xcd\xed\x44\xa1\x7d\x99\xc4\x51\xf3\x0d\x71\x90"
- "\x1e\x45\xcd\xcf\x64\xd2\xfc\xb2\x04\x6a\x7e\xd6\xe2\x50\x3e\x68"
- "\x40\x5a\x6a\x9e\x54\x8a\xef\x80\xb7\x32\x6a\x7e\x4e\xd7\x2c\x4d"
- "\x1d\xef\x50\x4e\x9e\x95\xf1\x15\x91\xd2\x51\x2b\x3a\xde\xe7\x1c"
- "\xd2\x0f\x71\x24\x01\xea\x4e\xa4\xab\x14\x44\xba\xd2\x09\xf7\x72"
- "\xb8\x2a\xe1\x3a\x04\x57\x1b\x5c\x1d\x44\x6a\x90\xc3\x15\x05\x97"
- "\x16\x2e\x1d\x5c\xb1\x70\x01\xf7\x0c\x71\x70\x1d\x80\xab\x11\x2e"
- "\xa0\x5d\x2d\x63\xf9\x40\x23\x91\xae\x9e\x0c\xd7\x66\xb8\x20\xaf"
- "\xe4\xfd\x70\xd9\x89\x74\x4d\x26\x5c\x04\xae\x68\xb8\x62\xe0\x9a"
- "\x06\x57\x12\xd0\x44\xb1\x77\x29\x90\x96\x92\x48\xa0\x9c\x03\x5f"
- "\x29\x48\x9f\x0b\xd7\x5e\x22\x5d\x0b\xdf\x5c\x6b\x80\xcb\xd2\x8b"
- "\x4e\x2e\xfa\x3f\x66\x80\x3c\xa7\xa8\xb2\x6e\xb4\xf3\x67\xe0\x49"
- "\x57\x2d\x77\x67\x93\x08\xb7\x79\xf2\x2c\xc3\x6d\x44\x72\x4a\xba"
- "\xea\x5e\xeb\x66\xd4\x33\xcf\x64\xf2\x67\x3a\xc2\x33\xf2\xac\x33"
- "\x6f\xd5\x04\x3b\x79\xbf\x10\xcf\x34\x0b\x0d\x6f\xab\x26\x08\xbf"
- "\x4f\xb1\x4b\x1e\x2f\xe7\xcf\x80\xcb\x57\x4d\xa1\x19\x09\x3b\xd8"
- "\xd9\x6f\xab\xf8\x71\x34\x6a\x8a\x2c\xa2\x8a\x91\xd1\xd8\xe6\x2d"
- "\x1b\xf8\x72\x29\x69\x36\x89\x84\xdf\x2b\x28\x94\xcd\xa1\x2c\x4b"
- "\x80\x72\xca\xf0\xd9\x6d\x7e\xd0\x70\x51\x69\xaf\xc0\xff\x9d\xc5"
- "\xbb\xec\xd4\x64\xaf\xc7\x7e\xb6\x25\xfd\x0d\xd2\x0c\xbf\xbb\xa8"
- "\x6c\x36\x6a\x9f\x50\xd1\x66\xfc\x6d\x36\xc6\xa8\x5d\x55\xca\xda"
- "\xea\x2a\xc5\x45\x65\x59\xa2\xbb\xb0\xb9\x14\xd2\x65\x6e\x73\x59"
- "\x02\xcb\xff\x41\xd0\x93\x8d\x99\xf0\xbf\x8b\x4f\x2f\xda\xe5\xf4"
- "\xfc\x0f\x77\xa7\x3b\xbf\x49\x8b\x77\x65\x16\xe9\xe0\x9f\xb3\xe3"
- "\x08\xbb\xab\x89\xf6\x09\x42\xda\xa4\x86\xb7\xef\xac\x22\x12\xcb"
- "\x13\x58\x6e\x43\x52\x46\x15\xe5\xb4\xe9\x11\xf0\x7d\xc3\x8a\x9e"
- "\xef\x8e\x69\x2e\xc4\xf3\x53\x69\xde\x0a\xd9\xce\x37\x08\xc1\xdf"
- "\x62\xd9\xb6\x8f\x26\xb2\xe2\x37\x88\x1c\xeb\xd8\x99\x67\x28\xf4"
- "\x9c\x43\x87\xbf\x91\x02\xfd\xf4\xe9\x19\x54\x94\xf7\x12\x37\xab"
- "\x8f\x9c\xf1\xd4\x50\x65\x97\x3c\xb6\x1b\xe9\xb5\x37\xf3\xbc\x54"
- "\x0a\xef\x15\x28\x4f\xcc\x9f\x9a\x9b\xea\xf0\x19\xcf\xb9\x53\x55"
- "\x11\xa9\x36\x3d\xa6\x92\xf1\xc8\x5e\x8f\xf9\x20\x3d\xcd\x3f\x8e"
- "\xff\xef\xa5\x66\x9e\xc7\x3a\xed\x4a\x12\xd7\x2c\x5d\x7d\xaf\xdb"
- "\xac\x46\xfe\x41\xbb\x53\xab\x81\xde\xc1\xf3\xdb\xdc\x68\xb0\x4b"
- "\x57\xeb\xe0\x9d\xba\xe7\xec\x4b\xc6\x67\x09\xd0\x69\x3b\xf3\x56"
- "\xcf\xb3\x4b\xe6\x56\xf2\x72\x4e\xa5\x47\xf1\x8c\xcd\x73\xa9\xd4"
- "\x15\xef\x3a\xc1\x81\xae\x22\xf0\x3e\xcd\x4e\xe6\x96\x7a\xea\xc8"
- "\x64\xdf\x93\x8f\x12\x9f\x1d\x4a\x3e\x9f\xdd\xfe\xf2\x81\x6f\x27"
- "\x2d\x70\x69\x25\x5d\x17\x68\xdd\xd6\x67\x91\x8f\x84\x76\xa5\xd2"
- "\xea\x4d\xd3\xa8\x33\xff\x33\x42\x6a\xf4\x8d\x04\xda\x7c\x74\xa4"
- "\x84\x3a\xe2\xd7\x13\x55\xa4\x41\x45\x8f\x54\x35\x92\x8d\xd3\x68"
- "\x2b\x9e\xfb\x5b\xdb\xd1\x42\xd2\x6c\x44\x91\x51\x43\xa2\xd2\xa6"
- "\x51\x47\x75\x62\x23\x61\xe9\x35\x24\xa3\x89\xc8\x36\x1e\xa2\xce"
- "\x99\xa0\xff\x3f\x69\xc4\xf4\x16\x82\x67\x54\x66\xb4\x52\x57\xfa"
- "\x8b\x44\x81\xff\xd7\x1c\xc2\xf4\x7f\x91\x8c\xd3\x44\x16\x6f\x74"
- "\xa8\x4a\xe0\x9b\xf8\xfb\x9d\x50\x16\xee\x02\x3d\xb0\xf5\x02\x21"
- "\x1b\x9f\x27\x9a\xb4\x85\x04\xfc\x40\x42\xad\xae\x3f\x91\x78\x37"
- "\x05\xfb\x72\x98\x6c\x5a\x4e\xe4\xf1\x2e\xdc\xc7\x76\x8c\xe0\xb9"
- "\xdf\x3b\x81\x16\xea\x66\xc1\xba\x6d\xfc\x82\x68\xf0\x1c\x74\xf6"
- "\x9b\x83\xc2\x6f\xbe\x20\xc8\xb3\x8b\xca\x67\x2b\x9c\xe6\xe7\x62"
- "\xa1\xee\x06\xe4\x01\x7c\xa7\x8e\xc3\xdf\xc1\xef\xb7\x26\xf3\x3c"
- "\x90\x2c\x70\x11\x90\x79\x63\xc2\x02\xa3\x85\xcf\xd7\x2e\x4d\xde"
- "\xbb\x33\x99\x2f\x93\x0f\x6d\xbc\x8b\x9e\x73\x28\x1b\x01\xf7\xc9"
- "\x47\xe3\x8d\x0f\x53\xfc\x2d\xc8\x32\xba\x33\x6f\x4d\x94\x87\xdf"
- "\x1e\xb9\xd8\xa5\x6b\xe4\x20\x8b\xe8\x08\x03\x91\xc1\xfb\x09\x76"
- "\xc9\xfc\x6d\x22\xac\x61\x1b\x1a\xee\xa1\x15\x68\x12\xec\x92\x79"
- "\x8d\x22\x1a\xc4\x57\x0f\x0d\xbc\x37\xda\x25\x2f\xb6\xb0\x6f\xac"
- "\x99\x88\x34\x82\xee\xf7\xd0\x46\x50\x93\xdc\xe1\x56\xda\xed\x54"
- "\x4a\x9d\x80\x47\x23\x3d\xa7\x51\xcc\x74\x51\x27\x67\x3e\x8e\x7a"
- "\x5e\x81\xe7\xba\x32\xfa\x94\x91\xf0\x3e\x53\x9b\xca\xff\x1f\x8d"
- "\xdf\xa1\xa6\xb2\xcc\x9e\x77\xd9\x64\x18\x2d\xde\x55\x07\xb6\x43"
- "\x1d\x5f\x45\x9d\xd0\xd6\xeb\xf2\x93\xd1\x76\xd8\xeb\xb0\x5d\x73"
- "\xca\xc6\x5c\xe7\xf6\x66\x6c\xf3\x13\xb0\x8d\x50\xd3\x71\x83\x50"
- "\x8e\xb7\xb1\xdd\x30\x5d\xb3\xc6\xee\x86\x3c\xa0\x4c\x1d\xf0\x6e"
- "\x58\xb3\x34\x65\x36\xee\x27\xa5\xa6\x91\xe3\xd9\xb9\x97\x29\xcf"
- "\x33\xfc\xca\x1d\x3e\xcf\x52\xbe\xcd\xef\x05\xdf\x26\x01\xf5\x03"
- "\xa4\xaf\xf7\xb6\x61\x9e\x6f\x52\xa6\x8b\x8e\x67\x32\x3d\x12\xc1"
- "\x01\x9d\xa4\x59\x68\x8f\x17\x95\xea\xa8\xce\xbc\x14\xc0\xff\x4f"
- "\x63\x7c\xda\x49\xfe\xb0\x5c\x3c\x63\x13\xca\x12\x01\x79\x7e\x0a"
- "\xf7\x11\x70\x3f\xf6\x51\x15\xca\x9b\xcf\xf7\x1a\xfc\x7f\xfb\xf5"
- "\xd4\x31\x65\x2a\xc1\xf3\x34\xa1\xbd\xa5\xb4\xd9\x49\x2e\xaf\x23"
- "\xb6\xe0\x39\xa3\x90\x86\x34\x9d\x79\x6b\x65\x76\xb2\x65\x9b\x90"
- "\xff\xde\x0e\x28\xab\x6f\xfe\x6b\x6f\x65\xf9\xb3\x7c\x31\x3f\x4f"
- "\xde\xc5\x6f\xd2\x36\x96\xf7\xda\x69\x9e\xbc\xcd\x90\xe6\xc9\x7f"
- "\xca\x8a\x9e\x6f\xe8\xe1\x1b\xd1\xe2\x3a\x14\xbe\x49\x3b\xb6\xf3"
- "\xe7\x89\xae\xdd\x6c\x27\xc5\x55\xf8\x2e\x17\xd2\xf0\xb7\x22\x5c"
- "\x45\x7c\x34\x0d\xf2\x38\xc4\xe7\xb1\xd7\x4e\x8a\x66\xf5\xd2\x71"
- "\x4a\x8f\x8e\x13\xf2\xaa\xf3\xe4\x25\xca\x47\xc0\x53\x54\xab\x20"
- "\x57\xcc\x57\x81\xf9\x76\xe6\xa5\x12\x3b\x79\x7d\xb7\xb8\xee\xc0"
- "\x73\x99\xf0\x2e\xda\x2e\x79\xa8\xc5\xb7\x1d\xac\x96\xd3\x7c\x7b"
- "\x2b\xea\x38\x21\xaf\x7b\x51\x5f\x7b\xde\xe3\x19\xa4\xa0\xd7\xc7"
- "\x63\x5b\xe2\x75\xbb\xb9\x31\x11\xf2\x59\xdc\x4b\x97\xcb\x90\xce"
- "\x9d\xb7\x62\x61\x31\x9e\xc1\x7a\x3d\x6d\x05\x9a\x5c\x9f\x73\x47"
- "\xa5\xe4\xa7\x90\xd6\x73\xfe\x69\x3e\xd0\xd8\xa5\x2b\x02\xc6\x77"
- "\x4c\xbf\x89\x48\xad\x40\x0d\xbe\x35\x62\x6e\xb2\x35\xba\x83\x58"
- "\x8b\x38\xc2\x95\xbc\x43\xe2\xd2\xa9\xe5\xa4\x74\xdd\x18\x3c\xcf"
- "\x3a\x34\x7b\x9d\xca\xce\xff\xec\x02\x9f\x33\xed\x6e\x82\x36\xfa"
- "\x8c\xd4\x38\xdd\xea\x68\xe7\xdb\x1d\xfc\xcf\xfb\x03\xbf\x02\x1f"
- "\x15\xfd\x54\xe8\x1b\xe8\x0b\xa4\xcc\x57\xe5\x80\xb6\x04\xd3\xd1"
- "\x8f\x05\x1d\xba\x53\xf4\x8e\x96\xec\xaa\x64\xbc\x33\x4a\x78\x5b"
- "\x81\xe5\x75\xfd\xcc\x82\x65\xe6\x8a\x76\x55\x62\x1d\x32\x8c\x94"
- "\xb3\xba\x3a\x2d\xa8\x67\xb5\xa9\xe8\x63\xaf\xfb\x22\xbe\x98\x50"
- "\xae\x78\x57\x65\x68\x75\x58\xc7\x9f\x3d\x0e\xfd\x88\x33\x8e\xb1"
- "\xbb\xf0\x8c\x65\xe9\xd6\xf4\x61\xf2\xc7\x8a\xa8\xe5\xdc\xb8\x77"
- "\x40\xc6\x46\xe2\x39\x67\x37\xb4\x7c\x8d\xc4\x53\xf7\x12\xa1\xee"
- "\xf0\x2d\xbe\xcf\x76\x67\x21\x7f\xfe\x37\x3c\x1b\x27\x06\x92\x17"
- "\xe8\x98\x56\xfc\x2d\xd4\x3d\x6e\xa7\x87\x4f\x2e\x07\x9e\x7f\x7e"
- "\xed\x29\xa9\xb1\x26\x3e\xcd\x42\xf8\x98\xfe\xe6\xe3\xad\x21\x96"
- "\x8b\x1f\xff\xaa\x85\x3e\x4c\xbc\xeb\x03\xca\x74\xa2\xf1\xfc\x4c"
- "\x21\x3f\x7c\xe7\x91\x55\x89\xd0\xb7\x08\xe3\x1b\x01\xc7\x3f\x44"
- "\xf5\x52\xf7\xad\xd7\xfa\x77\xc3\xaf\xd7\x7a\x43\xdf\x7a\xad\xaf"
- "\x19\xda\x7a\xad\x0f\xb8\xfe\x59\x54\x2f\x6d\xdf\x7a\x6d\xd8\x14"
- "\x7e\xbd\x36\x4c\xeb\x5b\xaf\x0d\xef\x0e\x6d\xbd\x36\x04\x5c\xff"
- "\x20\xaa\x57\x6c\xdf\x7a\x6d\x9c\x13\x7e\xbd\x36\x6a\xfb\xd6\x6b"
- "\xe3\xa6\xa1\xad\xd7\xc6\x80\xfb\x7f\x03\xea\xc3\xfc\xa6\x58\xa6"
- "\x0f\xd3\x6e\x0d\x5d\x1f\x6e\xec\xe8\xab\x0f\x37\x3d\xef\xd5\x87"
- "\x9b\xa6\x86\xa5\x0f\xf3\xcb\x04\x7f\x63\xd3\xb5\x7d\xf4\xa1\xa9"
- "\xcc\xe0\x5f\x1f\xa6\x9d\xe6\xf5\xa1\xb9\xcc\x10\x5a\x1d\xd2\x2a"
- "\x7b\xf4\xa1\xb2\xcc\xe0\xa3\x0f\x23\x9b\x62\x3b\xf3\x36\xa9\xc3"
- "\xd3\x87\x9b\xd4\x7d\xf5\x61\x9a\xc1\x57\x1f\x6e\x9a\x16\x18\x87"
- "\x8d\x7a\x7f\xfa\x30\xde\x75\x96\x32\x6c\x34\xea\x43\x2c\x4f\x69"
- "\x3f\x98\x77\xf4\xff\xad\xe3\x8e\xd0\xbe\x95\x1e\x70\xfd\x07\xf4"
- "\x63\xd5\xe0\x83\xa8\x37\xbd\x4d\xa4\x27\xd3\x88\xb4\x36\xba\x1e"
- "\xfa\x08\x4e\x72\x87\x01\x30\x91\x4d\x26\xd7\x16\xb5\x91\xda\xe8"
- "\x93\x84\x2a\x47\xaa\xe9\x6f\xf6\x65\xc6\x25\x23\x36\xd3\x0f\x5b"
- "\x53\x9c\x21\x62\x33\xbd\xc0\x83\xcd\x5a\x17\x60\x33\x15\xf1\x98"
- "\x71\xde\xda\x76\x4a\xc0\x26\xf4\x68\x3c\xf2\xc9\x66\xf8\xf4\x8b"
- "\x4d\x68\x13\xbe\xd8\x3c\x6e\x67\xd8\xcc\x78\xaf\x2f\x36\x8f\xdb"
- "\xfd\x63\x33\x63\x0b\xc3\xe6\x71\x7b\x68\x75\xc8\x98\xed\xc5\xe6"
- "\x71\xbb\x0f\x36\x7f\xb4\x2f\xb3\x33\x2f\x63\x6f\x78\xd8\xcc\xd8"
- "\xeb\xa9\x7b\xb1\x50\x77\x48\x53\xf8\x62\x33\xa3\x25\xa0\x0c\x73"
- "\xcf\xcf\x02\x7d\xa8\x38\x25\xcd\xdc\xef\x06\x9f\x96\x33\xc5\xe9"
- "\xa1\x4f\xd6\x89\xe7\xc9\x53\xe9\x04\x42\xd7\xe9\x14\x9d\xd0\x37"
- "\xee\xec\xd4\xcb\x69\xa4\xfc\x2d\xda\xad\x21\x50\x76\x15\xed\xd4"
- "\x45\x02\xcf\x62\xe0\x3e\xba\x38\x95\x44\xc1\xa5\x29\x16\xf8\x0a"
- "\xff\xc7\xd2\x75\x9a\x51\xf9\xa9\x64\xbc\xaa\x83\xc8\xa1\x0c\x09"
- "\xaa\x2c\x35\x51\xb9\x48\x14\xfe\x4f\xb3\x4f\xe8\xa0\xef\x26\xc3"
- "\x71\x51\x4e\x09\xdf\x33\xaa\x28\x5d\xa3\x23\xd0\x8f\x93\x83\x0c"
- "\x34\x3b\xa5\xb4\xc2\xbd\x4e\x27\xa5\x91\xf6\x7f\xd3\x8d\x09\x7c"
- "\x99\xb8\x98\x7d\x16\xc0\x90\x85\x66\xe8\xf1\xbb\x71\x78\xae\x31"
- "\xfd\xd1\xbe\x43\xb4\x53\x33\xca\x7c\x81\x8c\xdf\x99\x4a\x62\x4a"
- "\x52\x89\x8e\x76\xeb\xa4\xc0\x83\x84\xf9\xab\xd5\x28\xf7\x04\x2a"
- "\x85\x6f\xa5\xc2\xb7\x5c\xd8\xff\x83\x6f\xb9\xe0\x5b\x67\xe1\x5b"
- "\x67\xe0\x5b\xd9\xf0\xad\x6c\xf6\xad\xd0\x78\x9e\xa5\xed\x6f\xfc"
- "\x3a\x7e\xd3\x38\x8c\xb3\xfb\xa5\xca\x38\x62\x1a\x8e\x65\x9f\xdb"
- "\xa8\x0f\x11\xef\x59\x99\x81\xf2\xdf\xfa\x3e\x89\xa6\x8a\x49\xfa"
- "\x99\xaf\x9d\xa0\xd8\xc7\x7e\xed\x7d\x32\x1e\xdb\x5c\xad\xf3\x34"
- "\xb4\xb3\x49\xfa\xc3\xba\xb6\x50\xbf\x15\x70\xfd\x73\x5e\x36\xad"
- "\xeb\x8e\xc6\x7e\xa1\xdd\xb9\x55\x4a\x8d\x5d\xd1\xbb\x1c\x1f\x1f"
- "\xed\x22\x0b\x8c\x38\x5e\x4e\x8d\xda\x17\x88\xbc\x59\x9a\x5b\x9a"
- "\x61\xc3\xb1\xc7\x6c\x83\xef\xd8\x63\xf6\x36\x22\xdd\x0c\x5f\x79"
- "\x4d\x4f\xa4\x39\x0e\x02\x74\xbd\x2e\x5d\xfc\x9e\x71\x24\xdd\x45"
- "\xbf\x84\xfe\x6c\x55\x3e\xf4\x83\xe3\x6f\x95\xd8\x2d\xa9\x38\x16"
- "\xb7\xf9\x2e\xe0\xdf\xbf\xc1\x06\xa9\xf0\x7f\xcc\xcf\x90\x4c\xae"
- "\x3b\x25\xdd\x1c\xab\xea\x18\x31\xcd\xa5\x68\xd2\xb8\xa0\xff\xd6"
- "\xad\x69\xce\xbc\x68\xb2\xd7\x75\x63\x9f\xf6\x25\xd4\x03\xaf\xde"
- "\xaa\x92\x64\x42\xbf\x35\x4e\x4f\xa9\x06\xc7\x97\x13\x8a\xe0\x42"
- "\xd9\xf3\x72\x8f\x8c\x9c\x82\xf8\x40\x2c\xee\x64\xe9\x6a\xc4\xe3"
- "\x56\xc1\x66\x3b\x22\x6e\x4b\xc4\x36\xe0\x86\xdf\x67\xfc\x8b\x44"
- "\x5b\x1b\xdd\x04\x30\x9d\xb0\xc0\x2d\xc7\x76\x94\x60\x79\xe1\x33"
- "\x72\xd2\x40\xa4\x19\x5f\x13\x25\x60\x48\x81\xed\x81\x83\xf6\x10"
- "\xdf\xa8\x72\x42\xbb\xe6\xd2\xcf\x13\x15\xea\x09\x8c\xe1\x6c\x85"
- "\xde\x28\x77\x56\x17\xb9\x63\x25\x89\x72\x9d\xd5\x8f\x76\x9c\xd5"
- "\x5f\xb7\x9d\x23\x51\x91\x06\xa2\x2e\x5e\x09\xd8\x5d\x05\xed\xe3"
- "\x0c\xb4\x8f\x36\xd6\x3e\x7a\xf0\x9a\x43\x77\xe3\xfe\x20\xbe\x6d"
- "\x98\x85\xb6\xb1\x0e\xf0\x9a\xea\x6d\x1b\xae\x55\x3a\x69\xb1\x94"
- "\x12\x28\x23\xf0\x3d\x2b\x71\x67\xfa\x08\xd4\xfb\x06\x3a\xee\x9d"
- "\x44\xd0\xbb\x50\x57\xea\xfa\x3d\xc8\x62\xd8\xad\x52\x2d\xf4\xf9"
- "\x35\x1f\xcf\x6a\x25\xde\x3e\x5d\xee\xdb\x5d\x63\x77\x39\xb4\xcf"
- "\xd0\xb3\xcd\xd2\xcd\x3a\x48\x97\x6b\x9f\xfd\xb1\x1a\xe4\xf8\x36"
- "\xeb\x03\xe6\x96\xe2\x78\x82\x5d\xfa\x2a\xc6\x03\x22\x38\x87\xf2"
- "\x09\x3f\x7e\xfa\x5a\x22\xd0\x12\x37\xf0\xdc\xa5\x28\xcb\xe4\x14"
- "\xf6\x56\xcb\xcb\x5d\x7c\xdb\xec\x06\x19\x9c\x4c\x22\xd2\x05\x6d"
- "\xc0\x1b\x37\xf0\xa6\x93\xd7\x19\xb3\x78\x9d\x61\x92\x6f\x4b\xb3"
- "\x53\x2e\x7e\x71\x04\x05\xbe\xc8\x71\x0c\x69\xbe\x81\xd0\x4d\xa7"
- "\x81\x47\x1d\xf5\xa8\x5f\x22\xb9\x75\x4c\x87\xec\x00\xfe\x28\xdb"
- "\x88\x9a\xe6\x4f\x4e\x7c\x3f\xbd\x6a\x98\x1b\x70\x8e\x7a\x44\x95"
- "\x25\x19\x09\xb2\x8a\x34\x61\x3b\x87\x76\xaf\xca\xe2\xf5\x1a\x2f"
- "\x5b\xd7\x3a\xdd\xcd\xdd\xeb\x74\x5a\xb8\xc6\x79\x74\x0d\x9e\x1b"
- "\x56\x8c\x7a\x26\x2f\xab\x0a\xf5\x8c\xd5\x68\x27\x2e\xe0\x65\x24"
- "\xda\xa5\x75\xba\x68\x9e\xa7\xcb\x80\xa7\x4b\x89\xfc\x4e\x27\x91"
- "\x40\xb9\xd4\x50\x66\x52\xa3\x6f\x26\xc8\x63\x37\xb4\x23\xe4\x73"
- "\x37\xea\x20\xc0\x1a\xf8\x29\x99\x4f\x2d\xd7\x92\xc3\xba\x63\x04"
- "\xe3\x40\x65\x5c\xa4\x4d\x38\x7e\x6b\x85\xae\x02\x55\x36\x69\x90"
- "\xb7\x76\xe9\x66\xf2\xf1\x2c\x27\x09\x8c\xe9\x9c\xaf\xbc\x98\xce"
- "\xf9\xca\x8b\xe9\x9c\x56\x7e\xfe\x43\x84\xeb\x8b\x85\x80\x6b\x85"
- "\x18\xd7\x39\x92\x4b\x8a\xeb\x99\xa1\xe3\x7a\xfb\x19\x11\xae\xd3"
- "\xbf\x19\x5c\x7f\x92\xc0\xe3\x3a\xa2\x7b\x2c\xe2\x75\xb3\xcc\xea"
- "\xfa\x23\xb1\x4b\x73\x8e\x7a\x70\x7b\xe4\xb7\x88\xdb\x5c\xcd\x95"
- "\x8a\xdb\x8b\x9d\x3a\x2d\x5c\x43\x8e\x5b\xc8\x33\x68\xdc\x7e\x92"
- "\xd0\x45\x3c\xfc\x43\xfc\x52\xd3\x24\xbd\x36\x83\x3c\x0c\x7c\x2b"
- "\x55\x65\x8d\x23\x35\x8c\x87\xa5\xda\x67\x29\x07\x3a\xe2\x69\xc4"
- "\x53\x57\x36\xa5\x9c\xa2\x31\x37\xe3\x53\xa2\x86\x6f\xd4\x59\x5d"
- "\xef\x11\x95\x01\xe7\xa3\xca\x12\xa8\xf2\x39\x1d\x3f\x67\x25\x25"
- "\x32\xce\x3c\xa9\x14\xc7\xae\x70\x6c\xd1\x6d\x6e\xaa\xe3\xcc\x37"
- "\xc4\x71\xca\x67\x32\x71\x3e\x8b\x2a\x1f\x34\x74\xe6\xe5\x96\x7a"
- "\xe6\x5a\xfc\xfb\x97\x4d\x75\xd0\x5e\x64\x27\xa5\x5b\x8a\xe1\x2e"
- "\x85\xfb\x03\x70\x8f\x80\x3b\x7f\x6e\x5d\x68\x76\x2e\xf7\x28\x1b"
- "\xc3\x6c\x8a\x11\xf4\xe0\x31\xbe\x0d\xde\x46\x94\xa7\x84\xff\x3b"
- "\xf3\xb6\xc4\x7a\xe6\x6e\xbc\xf4\x3d\xfc\xa8\xc6\x6f\x03\x4f\x64"
- "\x6c\x3e\x89\x3d\x8b\xf2\xab\xe1\x9f\x89\x4c\x0b\xf5\x2f\xc0\x79"
- "\x5f\xc0\x92\xa4\x93\xea\x7f\x2a\xdc\x1f\x42\xac\xe2\x18\xec\x87"
- "\x46\x66\x23\x3d\xdf\x80\xef\x96\xdb\xa5\xd9\xe3\xc5\xdf\xf5\xc7"
- "\x0f\xbb\x74\x4b\xc0\x33\x7d\x42\xe3\xc5\x16\x7b\xa0\x7c\xa6\xea"
- "\xdc\x34\xb4\xbc\xf2\x02\xee\xff\xa4\xd1\xbb\x2a\xe2\xcb\xdd\x16"
- "\xae\x3b\x41\x75\x38\xed\x74\x88\x7e\x49\x5e\xc0\xfe\xaf\x5b\xd1"
- "\x58\x1a\x7f\xeb\x38\xe2\x2e\xda\x55\x81\x63\x9d\xe8\x6b\xd5\xea"
- "\x5c\x04\xfd\xad\x3d\x2f\xdb\xa5\xdd\xe0\x33\x46\x42\x7b\x9c\xd9"
- "\xf1\x01\xdd\x7a\x0a\x7c\xd4\x75\x09\xaa\xfc\x97\xc9\x64\xd7\x59"
- "\xcd\xa8\xd7\x41\x07\x75\x81\x3e\xe8\x3a\xab\x57\xd5\x1a\x9c\x84"
- "\x2b\xde\x55\x61\x75\x55\x91\x9d\x40\x87\xfa\x17\xcb\x7b\xf1\x6c"
- "\x42\x64\xde\x4a\x9c\xbf\x38\x4f\x2c\x2f\xfd\x16\xf4\xef\xeb\xaf"
- "\x0d\xdb\x04\x3a\x07\x74\x06\xaf\x87\xc3\xd0\xc1\x5d\xaf\xde\x96"
- "\xf8\xd4\x3c\xea\xac\x6d\xfc\x8c\x64\xd4\x10\x75\xc6\x5a\xa2\xc4"
- "\xfc\xad\xae\x1a\xa6\x97\x9f\x07\xbd\x0c\xcf\x25\x22\xbd\xcc\xaf"
- "\x2f\xe8\xa5\x97\xd1\xff\xae\x6d\x69\x25\x91\x1d\x64\xc4\xcc\x0e"
- "\x95\x33\xbd\x83\x72\xe8\x8f\x5b\x5d\xa7\x71\xef\x71\xa4\x47\x47"
- "\xbf\x05\x7e\x47\xf7\x2a\xa6\x9f\x8b\x05\xfd\xfc\xd6\x99\xc1\xeb"
- "\xe7\xb7\xb2\x41\x3f\x83\xbf\xb7\x1d\x75\x33\xe8\xe5\xbd\x27\x1d"
- "\x52\x17\xe8\xe2\xd0\x64\x6b\x0a\xb8\xfe\x63\x26\xd8\x4f\x94\x29"
- "\x62\xa7\xa6\xdc\x85\xeb\x11\xbe\x74\x47\x7e\xee\x40\xfb\xd8\x05"
- "\xb6\x71\xcf\xcb\xf5\xd2\x48\x23\xc8\xd6\xf0\x01\x75\xad\x49\x50"
- "\xd1\xee\x04\xa5\xdb\xd4\x58\xea\xea\xd6\xc8\xbb\xbb\x41\xbe\xa0"
- "\x2f\xc0\x5e\xa9\x1d\x1b\xf5\x3c\x4f\xb8\xb1\xbb\x2a\xb8\x9c\xa5"
- "\x15\x60\x9b\x26\x96\x9c\x21\x13\xa8\xb9\x5e\xed\x32\xd7\x47\x77"
- "\x9b\xeb\xa3\x00\x97\x91\x17\x4d\x28\xf3\x8b\x16\xce\x5c\x1f\xcb"
- "\xe5\x37\x38\xdc\xca\xc6\x52\x87\xb2\x5e\x03\xcf\x3a\x6e\x23\xe0"
- "\x60\x03\xe1\xe7\xb4\xb4\x33\xd1\x0e\x9b\xcd\xfe\x70\xb0\x3d\x3b"
- "\x34\x5b\xfc\x54\x02\xe0\xa0\x1e\x70\xf0\xb5\x18\x07\x07\x89\x2b"
- "\x5b\xb0\xd1\x73\x18\x16\x80\xef\x7c\x5f\xa6\xc7\x4e\x3f\xf3\xb1"
- "\x7f\x3c\x34\x06\x87\x87\xae\xb3\xbe\x78\x28\x0a\x13\x0f\x60\x5f"
- "\x35\x25\xd0\x6f\xba\x78\x56\x27\x2d\x42\x3c\x1c\xf3\xe2\xe1\x77"
- "\xff\x70\x48\xbb\x43\xc6\x43\xbe\x21\x34\x3c\xd4\x1b\x06\x87\x87"
- "\x65\x72\x11\x1e\x0a\x00\x0f\x45\x80\x87\x6d\x5e\x3c\x9c\x47\x3c"
- "\x54\x88\xf0\x50\x08\xcf\xe5\x7d\xf1\xb0\xb5\xf8\xf2\xe2\x61\x58"
- "\xfb\x77\x03\x0f\x05\x01\xfb\xbf\x01\xf0\x30\x48\xfd\xb0\x2c\xd1"
- "\x8b\x07\x1b\xe8\x07\x1b\xe8\x07\x9b\x48\x3f\x9c\x06\x3c\xd8\x44"
- "\xfa\xc1\x06\xfa\xc1\xe6\x47\x3f\xfc\xf2\xbd\xcb\x8b\x87\x6b\x9a"
- "\xbf\x1b\x78\x78\xa3\x20\x34\x3c\xd8\x06\xab\x1f\x2a\x45\x78\x00"
- "\xfd\x60\x03\xfd\x60\x13\xe9\x87\x2f\x10\x0f\x22\xfd\x60\x03\xfd"
- "\x60\xf3\xa3\x1f\x7e\x75\xf0\xf2\xe2\xe1\xda\xcf\xbe\x1b\x78\xd8"
- "\x16\x70\xfc\x3b\x00\x1e\x06\xa9\x1f\xf4\x6a\x2f\x1e\x1a\x40\x3f"
- "\x34\x80\x7e\x68\x10\xe9\x87\x83\x80\x87\x06\x91\x7e\x68\x00\xfd"
- "\xd0\xe0\x47\x3f\xfc\xba\xe6\xf2\xe2\xe1\xbe\xbc\xef\x06\x1e\xde"
- "\xac\x08\x0d\x0f\x0d\x83\xd4\x0f\x7a\xbd\x08\x0f\xa0\x1f\x1a\x40"
- "\x3f\x34\x88\xf4\xc3\x26\xc4\x83\x48\x3f\x34\x80\x7e\x68\xf0\xa3"
- "\x1f\xfe\xeb\x8b\xcb\x8b\x87\xb9\x8f\x7e\x37\xf0\x50\x68\x19\x08"
- "\x0f\x1e\x2c\x20\x2e\x10\x0b\xdd\x19\x09\x04\xfb\x19\x7b\x4e\x31"
- "\x3c\x20\x0e\x78\x4c\x9c\x4b\x50\xb9\x01\x0b\xae\x8d\x80\x85\x2e"
- "\x86\x05\xe4\x05\xe2\x01\xfb\x15\xd8\x9f\x40\x4c\xb8\xa1\x4f\xe1"
- "\x52\x42\x9f\x22\x4b\xa6\x41\x1c\x74\x29\x06\xe8\x57\x74\x11\xbe"
- "\xef\x87\x7d\xbc\x33\xd2\xed\xff\xf2\x87\x83\xb7\x42\x1c\xe3\xeb"
- "\xe9\x5f\xfa\xe0\xe0\xb0\x17\x07\xcf\x07\xe8\x57\x3c\x1b\x00\x07"
- "\xf6\x20\x70\x70\xa6\x6f\x3f\x73\xb0\x38\xe8\x5a\x25\xe0\x00\xfb"
- "\x99\x9c\xd0\xcf\x7c\x09\xfa\x99\xca\x50\x71\xf0\x56\x55\x78\x38"
- "\xb0\x19\x42\xc3\xc1\xb2\x4a\xf4\x13\x18\x0e\x6c\x45\x2e\x25\xf8"
- "\x0a\x3e\x38\xe8\xc7\x5f\xf0\xc1\xc1\x8e\xd3\x97\x17\x07\xbd\xfc"
- "\x85\xff\x58\x1c\x14\x05\xdc\xff\xcb\x81\xdc\x51\xdf\xe3\xb8\x3d"
- "\xee\x33\x89\x74\xb0\x71\x23\xdc\x6f\xb2\x75\x25\x89\x41\x1b\xe1"
- "\x5e\x97\xa0\x32\x9d\x21\x93\xb7\xac\x24\x32\xd7\x1a\x90\x7f\x32"
- "\x91\x75\x49\x09\xe9\x5a\xa3\x57\x55\xb7\x38\xd8\x18\x12\xae\x47"
- "\x05\xfa\x6e\x13\x1b\x43\x72\x9f\x4b\x88\xdc\xd2\xce\xd6\xc0\x5a"
- "\xe6\xef\x02\xd9\x16\x1f\xf1\x27\xdb\x1d\x21\xe8\xfa\x2e\xb1\xae"
- "\x3f\xed\x2b\x5b\xb1\x9e\x2f\xca\x16\x8d\x21\xcd\x0c\x30\x86\x14"
- "\x84\x4c\xf9\xb1\xfd\x33\x4c\xcf\xf7\x8c\x21\x0d\x72\x8c\xbf\x1b"
- "\x74\xfc\x5b\x52\x5f\x1d\x1f\x9e\x4c\x4b\x76\xf7\x37\xee\x88\xed"
- "\x1b\xdb\xb5\xa7\x4d\xf7\xd8\x78\x6c\xc7\x20\xef\x8b\xa6\xcf\x3b"
- "\x78\x5b\xbf\xd1\xdb\xa6\xb1\x2d\x63\xbb\xc6\x76\xcc\xdb\x7a\x8c"
- "\x49\x9c\xa3\xb7\x94\x88\xc6\x8e\xdc\x4a\x41\xcf\xfb\xd1\xf1\x5c"
- "\xbf\x3a\x7e\xa7\x5f\xf9\x7f\x1b\x74\x3c\xe2\xc0\xd3\xbe\xaf\xbc"
- "\xb6\x5d\x1a\x78\xfd\x57\x50\x38\xa8\x4f\x19\x18\x07\xf5\x06\x2e"
- "\x67\x79\x94\x08\x07\x05\x80\x03\xd0\xf3\x6c\xcc\x88\xe1\xc0\x3b"
- "\x66\xc4\xf5\x1e\x33\xf2\xc1\xc1\xdb\x9f\x5e\x5e\x1c\xf4\x1a\x33"
- "\xfa\x8f\xc5\xc1\xae\xfd\x83\xc4\x41\x10\xfa\xa0\x1e\xf4\xc1\x72"
- "\x7d\x89\x68\xac\xc8\xad\xb4\x81\x3e\xb0\x89\xf4\x81\x77\xac\x88"
- "\xeb\x3d\x56\xe4\x83\x83\x77\x6c\x97\x17\x07\xbd\xc6\x8a\xfe\x63"
- "\x71\xb0\xfb\xc0\xe0\x70\x60\x0b\x42\x1f\xd8\x50\x1f\x1c\x10\xe1"
- "\x00\xf4\x81\xe0\xf7\xf9\xf1\xf9\xb8\x7e\x7d\xbe\x77\x9b\xbe\xad"
- "\x3e\xdf\x95\x8d\x83\xdf\x04\x9c\x2b\x0d\x12\x07\x41\xe8\x03\x1b"
- "\xe8\x83\x97\xd5\x25\xa2\xb1\x21\xb7\xb2\x01\xf4\x41\x83\x48\x1f"
- "\x78\xc7\x86\xb8\xde\x63\x43\x3e\x38\x28\xfb\xea\xf2\xe2\xa0\xd7"
- "\xd8\xd0\x7f\x2c\x0e\xca\xab\x07\x87\x83\x86\x20\xf4\x41\x03\xe8"
- "\x83\x97\x17\x8b\x70\x00\xfa\xa0\x01\xf4\x41\x83\x48\x1f\x78\xc7"
- "\x84\xb8\xde\x63\x42\x3e\x38\xd8\xf3\xf5\xe5\xc5\x41\xaf\x31\xa1"
- "\xff\x58\x1c\xfc\x36\xe0\xba\x0a\x0f\x06\x7a\xc6\x00\xa8\x17\x07"
- "\xbc\xec\xd7\x24\xa8\xba\x14\x9f\x77\x78\xfa\xff\xa6\x3e\xfd\x7f"
- "\xbd\x25\xe0\x38\x50\xaf\xf9\x65\xbe\x6f\x90\xff\xb9\x83\xf5\x13"
- "\x1a\x4b\x51\xfe\xaf\x6f\x60\xfd\x44\xed\xb3\x28\xff\xdf\xf9\x97"
- "\x7f\xa8\x63\x82\x8b\x41\xfe\x2d\xfd\xc8\xff\xc5\x00\xfd\x84\x17"
- "\x06\x27\x7f\x5c\xef\xd8\x7d\x76\x08\xe5\xef\x19\x13\xfc\x82\x48"
- "\xdf\x1a\x54\x7f\x71\x6f\x40\xf9\xfb\x5d\x4f\x52\xce\xd6\x93\xe0"
- "\x5a\x92\xda\xd6\x56\xb2\xe5\x02\x51\x47\x26\x31\x4c\xf0\x6b\x4a"
- "\x00\x13\xa6\x53\x64\xb2\x8b\xd5\xad\x67\x4d\x09\xc6\x70\x67\x7a"
- "\xc1\xc2\xaf\x29\xf1\x8c\x07\xf4\xac\x27\x99\x8f\xeb\x49\xde\x3b"
- "\x36\xe8\xb1\x00\x5c\x4f\x92\x02\x32\xee\x00\x19\x9f\x47\xf9\x1e"
- "\xf6\x69\xd7\x3e\x63\x00\x81\xd6\x91\x04\x33\xae\x73\x09\xd6\x91"
- "\xf0\x63\x00\x43\xd2\xa6\xdf\x2f\x0f\xa8\xdb\x41\x8e\x28\x4f\xab"
- "\xce\xc5\x8f\xeb\x7a\xda\xb8\xd5\x58\x47\xb6\x74\x11\xb5\x67\xfc"
- "\xdf\x23\x53\xd4\xf7\x14\x70\x40\xcf\x26\x28\x51\xa6\xaf\xaf\x04"
- "\x3d\xbf\xca\xab\xe7\xb9\xe1\x4b\x2b\x8a\x37\x80\x7e\xdf\x40\x26"
- "\xf0\x3c\x8a\x6c\x70\xb0\xf1\x80\xc6\x52\x6c\xef\xd8\x9e\xa9\xb2"
- "\x5e\xd7\x2d\xb4\x77\x26\xef\x1a\x82\x72\x66\x67\x7d\xfe\xfe\x08"
- "\xb6\x3d\x94\x79\xa4\x20\xf3\x92\x00\x32\xe7\xe5\x2d\x51\x63\xdc"
- "\x10\xdc\x67\xd6\x23\x73\xd7\xab\xa2\xf1\x1f\xb1\xcc\x85\x71\x1f"
- "\x0e\xda\x72\x50\xeb\x87\x82\x94\xfb\x90\x8d\xef\x83\xdc\x4b\x04"
- "\xb9\xf7\x8c\xef\x0f\x4a\xee\x15\x81\xf7\xbf\xf8\xc8\xbd\xde\x30"
- "\x78\xb9\x2f\x93\xfb\x91\x7b\x81\x20\xf7\x6d\xd8\xcf\x07\xb9\x97"
- "\x77\x0b\xeb\x46\xfa\xca\xfd\x0f\x1f\x5e\x7a\xb9\x0f\x6b\xff\x6e"
- "\xc8\xfd\x8f\x01\xe3\x9f\xf5\x92\xfb\x10\xb4\xf7\x65\x89\x7d\xe5"
- "\x6e\x13\xda\xbb\x2d\x0a\xfb\xf5\x54\x69\x13\xda\xfb\x69\x3f\x72"
- "\xdf\xf7\x97\x4b\x2f\xf7\x6b\x9a\xbf\x1b\x72\xdf\x1f\x70\xfd\x87"
- "\xaf\xdc\x6d\x43\xd1\xde\x2b\xfd\xc8\x5d\x68\xef\xb6\x6d\xd8\x8f"
- "\x07\xb9\x0b\xed\xfd\x0b\x3f\x72\xff\xd3\x1f\x2e\xbd\xdc\xaf\xfd"
- "\xec\xbb\x21\xf7\x3f\xe7\x06\x29\xf7\x21\x68\xef\x7a\x75\x5f\xb9"
- "\x37\x08\xed\xbd\x21\x0a\xfb\xed\x54\xd9\x20\xb4\xf7\x83\x7e\xe4"
- "\xfe\x7f\xf6\x5c\x7a\xb9\xdf\x97\xf7\xdd\x90\x7b\x65\xc0\xf5\x7f"
- "\xbe\x72\x6f\x18\x82\xf6\xae\xd7\xfb\x91\xbb\xd0\xde\x1b\xb6\x61"
- "\x3f\x1d\xe4\x2e\xb4\xf7\x4d\x7e\xe4\xfe\x97\xb7\x2f\xbd\xdc\xe7"
- "\x3e\xfa\xdd\x90\xfb\x5f\x8d\x03\xcd\xd7\x7b\x64\xef\x19\xb3\xe1"
- "\xe7\x67\xc1\xbf\xf7\xc8\x1b\x71\x80\x32\x47\x2c\x88\x65\xce\xaf"
- "\xe1\x59\xc5\xd6\xf0\xa0\xdf\x4e\xa1\x2f\x4e\x87\xf3\xeb\x37\x74"
- "\x7c\xbf\x5d\xf0\xe3\xa9\x44\xa6\x41\x5f\x3e\xb0\x1f\xff\xdf\xbf"
- "\xf4\xc8\x3b\xdc\xbe\xdb\x40\xf2\xee\xdd\x27\xbf\x52\xe4\x2d\xee"
- "\xbf\x0d\x8d\xbc\x0f\xe8\xc3\x93\xb7\xcd\x10\x9a\xbc\x6d\x05\x4c"
- "\xde\xfc\x3a\x8d\x72\xaf\xbc\x6d\xdb\x98\xbc\x6d\x85\x81\xed\xf9"
- "\xc1\xac\x4b\x2f\x6f\xdf\x31\xf9\xff\x5c\x79\xff\x2d\xa1\xbf\x31"
- "\x18\x94\x35\xca\x7d\xeb\xcb\x24\xe6\xf5\x97\xd9\xd8\x8a\xeb\xac"
- "\x06\x75\xbe\x0c\xe5\x8f\x7b\x7c\x22\x01\x03\x9f\x24\x38\x48\x57"
- "\x67\x02\xc1\xbd\x3c\xb8\xee\xa2\x56\x6f\x27\x56\xe3\xc7\x64\x4b"
- "\x32\x51\x57\x27\xb6\x93\x99\xe5\xb4\xdb\xda\x68\xc1\x3d\xde\x32"
- "\xcb\x86\x8f\x09\x5d\xa5\x1b\x35\xbf\x83\x48\xcf\x48\x3f\x50\xe3"
- "\xba\x8d\x3b\x3a\x80\x27\xb8\xdf\x07\x64\xbe\xe5\x0c\x21\x87\x53"
- "\x08\xd1\x2e\x45\x59\x7f\xb0\x62\xd8\x5a\x3f\xfb\x7c\x42\x19\x97"
- "\x11\x8f\xbd\xfa\x91\xf5\x0e\xe9\xd0\xac\xcd\xf0\xac\xcb\xf0\x19"
- "\x97\x19\xec\xfe\xcb\x21\x5b\x9b\x61\x89\xeb\x6f\xbd\x0d\xca\x13"
- "\xdb\xb4\x2b\x9f\x8d\xcb\x58\x8d\x55\x04\xd7\xd5\x60\x1b\x76\x9f"
- "\xd3\xc8\x37\xa6\x40\x5b\xaf\x67\x6d\xfd\xf5\x76\xa0\x4d\x6c\x20"
- "\x88\x0f\x26\xdb\x6e\x26\xdb\x76\x94\x6d\x03\xa1\x6b\x74\xa3\xce"
- "\x48\x2d\xad\x28\x5f\x94\x6b\x86\x8d\xa8\x17\x60\x5c\x14\xd4\xf1"
- "\xa0\xdf\x41\xce\x13\x77\xbe\x4c\x26\x60\xfb\x77\x9b\xeb\xa3\x5c"
- "\x66\xb6\x46\x03\xf5\x7e\xb7\xa2\x49\x93\x97\x2c\xc8\xff\x05\x94"
- "\xff\x87\x7e\xe5\xbf\x23\xdc\xb1\x77\x41\xfe\x61\xef\xeb\xf9\xa6"
- "\xda\xfb\xaa\xa1\x6a\xef\xff\x13\x30\x26\x8a\x2f\x0e\xd8\x38\x4d"
- "\x68\x38\xe8\xf4\x83\x83\xff\x71\xf8\xc1\x41\x01\xe8\x7d\x79\x2f"
- "\x1c\x6c\x13\x70\x50\x08\xef\xcb\xfb\xe2\xe0\xa3\xb5\x97\x07\x07"
- "\x41\xee\xe7\xf9\xd6\xe3\xe0\xd0\xac\x20\x71\x10\x86\x3e\x38\xeb"
- "\x07\x07\x87\x9c\x7d\x71\x60\x03\x7d\xb0\x2c\xd1\x17\x07\x36\x41"
- "\x1f\xd8\x40\x1f\xd8\xfc\xe8\x83\xc3\x9b\x2e\x0f\x0e\x82\xdc\xc7"
- "\xf3\xad\xc7\xc1\xdf\x03\xda\x7f\x5f\x1c\xd8\xc2\xd0\x07\x27\xfc"
- "\xe0\xe0\x7f\x89\x1f\x1c\xa0\x3e\xa8\xec\x85\x03\x41\x1f\xd8\x0a"
- "\xd1\x3f\xec\x8b\x83\xff\x7d\xed\xf2\xe0\x20\xc8\xfd\x3b\xdf\x7a"
- "\x1c\x54\x05\xdc\xff\xdb\x0b\x07\x61\xe8\x83\x0f\xfc\xe0\xe0\x88"
- "\xbc\x2f\x0e\x1a\x40\x1f\xe8\xd5\xbe\x38\x68\x10\xf4\x41\x03\xe8"
- "\x83\x06\x3f\xfa\xe0\x88\xf9\xf2\xe0\x20\xc8\x7d\x3b\xdf\x7a\x1c"
- "\x7c\x1c\xb0\xff\xe7\x8b\x83\x86\x30\xf4\x41\x86\x1f\x1c\x7c\xa2"
- "\xf6\x83\x03\xd0\x07\x7a\x7d\x2f\x1c\x08\xfa\xa0\x01\xf4\x41\x83"
- "\x1f\x7d\xf0\xc9\xaf\x2f\x0f\x0e\x82\xdc\xaf\xf3\xad\xc7\x41\x75"
- "\xc0\xfd\xdf\x62\x1c\x74\xf7\xf4\x17\x2a\x79\x1c\xe4\x6d\x60\x38"
- "\xd8\x84\x38\x68\x65\xeb\x77\x4c\x02\x0e\x7a\xfa\x0a\x2d\xbd\x31"
- "\x50\x13\xd5\x83\x81\xaf\xbc\x7d\x85\x6e\x90\x37\x3f\x1e\x24\xf4"
- "\x13\x3c\xe3\x40\x7c\x3f\x01\xfa\x89\x79\xed\x82\xfc\xf9\x31\x81"
- "\x1a\xff\xf2\x0f\xa1\x9f\xe8\xb3\x46\xa3\xb7\xfc\xaf\xf0\x7d\x3a"
- "\x7d\xc6\x05\x6c\x83\x5d\x9b\x51\x1b\xa4\xfc\x3d\x7e\x41\xb0\xf2"
- "\x3f\xe1\x47\xfe\x56\x3f\xf2\xb7\x15\x30\xf9\x2f\xab\xf4\xf8\x03"
- "\x9e\x71\x21\xde\x1f\xe8\x23\x7f\xeb\x65\x92\xff\x95\xb9\x3f\x67"
- "\xe8\xe5\x5f\x17\x50\xfe\x05\x52\xae\x02\xae\x4a\xb8\x2c\x70\x55"
- "\xb9\xa5\x64\x6a\xb1\x94\xe3\xf7\xf3\x60\x0c\xf1\xe2\xec\x3e\xef"
- "\x87\xd3\xe1\x8f\xcf\x40\x1a\x90\x21\x7f\x66\xab\x27\x0f\x9a\x47"
- "\x90\x8f\x16\xa5\x24\x11\xe3\x5f\x21\xed\x08\x4f\x5e\xca\x2c\x12"
- "\xe7\xc9\x0b\xea\x97\x09\x7c\xb7\xa8\xb2\xe2\x86\x03\x7d\x15\xcd"
- "\xdb\x62\x07\x5a\x39\x9f\x67\x96\x2c\x1a\xe9\x3d\xb4\xee\x6c\x09"
- "\xc6\x6c\xb2\xa8\x24\x40\xcb\xf2\x1c\x29\xd0\x69\xb9\x6c\xa2\xe5"
- "\xcb\x29\x95\xe2\xf7\x7a\x97\x73\x94\x40\x17\x23\x2e\xa3\x32\x2b"
- "\x8e\xcf\x4f\xa0\xb9\x86\x0e\xbf\x71\x8a\x50\x17\x9d\x98\xce\xfd"
- "\x28\xc1\x3c\x3d\x74\x0a\x21\xaf\xf1\x3e\x34\xbb\x08\x51\x49\xb4"
- "\xac\x7c\x46\x29\x11\xca\xa7\x44\x5a\xf7\xa8\xdc\xfd\x6e\x89\x2c"
- "\x96\x93\x92\x58\x9f\xdf\xe4\x10\x9e\x5e\xa0\x8d\xe4\x69\x87\xbf"
- "\x82\xb4\x13\x04\x9e\xcb\xc4\x3c\x17\xe8\x54\x1e\x3e\x8a\xdf\xb9"
- "\xb3\xa5\x98\x17\xbe\x07\x5f\xeb\xe5\x4a\xa8\xc3\x64\x0f\x9d\xe7"
- "\x7b\x56\xf0\x00\x78\x5a\x29\xb9\x4b\x90\xc9\xb5\x50\x8f\x38\x0f"
- "\x1d\xc6\x51\xf3\xd0\x02\xae\xc7\xec\xf4\xf2\x66\xb4\x3b\x2f\x2f"
- "\xc5\x9d\x25\x9b\xd2\x3b\x4f\x55\x96\xc4\x8e\x74\x35\xad\x7c\xde"
- "\x20\xbf\x3c\x1d\xd0\x5f\x27\xf0\x68\x1a\x93\x89\xba\x47\x26\x6e"
- "\xa9\x0b\xdf\x59\x4a\x58\x59\xa3\x04\xba\x19\x7d\xe9\x64\x62\xba"
- "\xef\x31\x3e\x6e\x97\x03\x6f\x66\xf5\xa5\x95\x8b\x69\xaf\x67\xb4"
- "\xa6\x72\xa0\x9d\xdd\x97\x56\x2d\xa6\xfd\x3e\xa3\xcd\xaf\x04\xda"
- "\x04\x3f\x65\x1d\x2d\xa2\xd5\x30\xda\x82\x2a\xa0\x9d\xd7\x97\x56"
- "\x2b\xa6\x1d\xc3\x68\x77\xa8\x81\x36\xb1\x2f\x6d\x9c\x98\xf6\x06"
- "\x46\xfb\x46\x3d\xd0\x2e\xee\x4b\x9b\x29\xa6\xfd\x01\xa3\xdd\xd6"
- "\x0a\xb4\xfa\xde\xb4\x3b\x99\x6c\x6f\x16\x64\x1b\xcd\x68\xdf\x74"
- "\x02\x6d\x92\x9f\xba\x45\xf0\xf9\x32\xda\xb1\x8c\x36\xaf\x1a\x68"
- "\x0d\x7e\x64\x21\xa6\x1d\xc7\x68\x7f\x17\x0d\xb4\x29\x7e\x64\x21"
- "\xa6\xbd\x91\xd1\x96\xb4\x01\xad\xd1\x8f\x2c\xbc\xb4\xa3\x4a\x3b"
- "\x80\x26\x0d\xea\x59\xe7\x87\xb7\xe2\x3c\x6f\x62\x79\xee\x72\x01"
- "\x7d\xa6\x1f\xde\x8a\x69\x6f\x66\xb4\xef\xca\x80\x76\xb3\x1f\xde"
- "\x8a\x69\x7f\xc8\x68\xcb\x14\x40\x9b\xdb\x97\x16\xda\x1b\xe3\xef"
- "\xdd\x02\x7f\x63\x18\xfd\x9e\x28\xa0\x37\xf9\xe1\x2f\xe6\xe7\x69"
- "\xb3\xb7\x30\xda\x62\x0d\xd0\x16\xf8\xe1\xaf\x98\xf6\x47\x8c\xf6"
- "\xaf\x16\xa0\xdd\xe6\x87\xbf\x62\xda\x1f\x33\xda\xf7\x1d\x40\x5b"
- "\xe8\x87\xbf\x62\x5a\x1d\xa3\xad\x40\xec\x14\xf9\x29\xef\xcd\x22"
- "\xda\x5b\x19\xed\x1f\xed\x40\x5b\xea\x47\x1e\x62\xda\xdb\x18\xed"
- "\x81\x0a\xa0\xdd\xed\x47\x1e\x62\xda\x9f\x30\xda\xfd\x88\xf5\x72"
- "\x3f\xf2\xe8\xa1\x05\xbb\x30\xde\x3d\xea\xcf\x75\x3b\x91\x5e\x22"
- "\xe3\xf7\x9d\x51\x29\x6f\xdf\x79\x5a\xc0\x89\x45\xd0\x77\xb7\xb3"
- "\x3c\x2b\xb1\x5d\xf2\xb1\x09\x90\xa6\xc6\xc9\xeb\x23\xb0\x2f\xae"
- "\x7b\x76\x7a\x75\xf7\x1d\x8c\xf6\x3d\xc4\xee\x7e\xb1\x0e\xa5\x52"
- "\x99\x98\xee\x4e\x46\x57\x8d\x7a\xa1\xd2\x97\x4e\xee\xa5\x1b\x65"
- "\xc9\x85\xf7\x07\x4a\x7a\xe9\x63\x28\xa7\x38\xaf\xbb\x58\x5e\xff"
- "\x53\x00\xb4\x16\x5f\x3a\xd7\xdd\x22\xba\xbb\x19\xdd\xa1\x42\xa0"
- "\x3b\xe4\x4b\xa7\x15\xd3\xdd\xc3\xe8\x6a\xb1\x6c\x55\xbe\x74\x71"
- "\x62\xba\x09\xee\xbc\xbf\x97\xf2\xb4\x59\xb2\xea\xde\xfc\x03\x5e"
- "\xdf\x2d\xb2\x69\xf7\xba\xf3\xaa\xca\x05\xda\x3a\x0f\x0f\x79\x3e"
- "\x33\xcc\x4b\x05\xcc\xdf\xe7\xce\xfb\xb8\x42\xa0\x3b\x2a\xb6\x03"
- "\x22\x5b\x7b\x3f\x1d\xf5\xb7\x52\xc1\x8e\xf2\x67\x20\x83\x7e\x6f"
- "\xf4\xe7\x6f\x18\x6e\x23\xd7\x9c\x92\xda\x0c\xcc\xf6\x78\xce\xeb"
- "\x6a\x60\xe7\x26\x17\xed\xaa\x8b\xef\xa0\x2e\x71\xda\x56\x29\xad"
- "\xbb\xb3\x83\xc8\x30\x66\x2a\x55\xda\x9d\x76\x48\x77\x8c\xdd\xe5"
- "\xe8\xcc\xb3\xa5\xd9\x25\x4b\xf8\xd8\x86\xf0\x7f\xae\x9d\xfc\xa6"
- "\x1a\xff\xdf\x9a\x4d\x9d\xc0\x13\x09\x9e\xef\xb2\x13\xfe\xcf\x87"
- "\x8b\x3f\x53\x05\xfc\x3a\x9a\x43\xe2\x2c\xa9\x2e\x72\xd2\x48\xa4"
- "\x5c\x7e\x59\x81\x36\x19\xe3\x0a\xda\x8e\xd1\x75\xfa\xc9\x50\x96"
- "\x0a\xf8\xee\xe2\x66\x78\xe6\xcb\x02\xf5\x07\xdb\xb8\xd7\x92\x8c"
- "\xb1\x45\x1b\x46\x3a\x94\x4d\x15\xf4\xd5\xb9\x5f\x19\xd2\xc9\x8d"
- "\xa7\xa4\x0d\xf2\x73\xa0\x1b\xce\xad\xd3\xff\x14\xf3\xe0\x94\x65"
- "\x7b\x81\xe6\x10\xc6\x24\xa4\x85\xcd\x05\x2c\x5e\x61\x03\x1f\xcf"
- "\x1d\xca\x53\x47\xa3\x77\x59\xb8\xae\xcd\x99\x78\x36\x9c\x25\xfd"
- "\x14\x69\x16\xbd\x73\x8c\x69\xe6\x63\x19\x42\xfd\x2c\x6e\x93\xdc"
- "\xc9\x29\xe4\x1d\xd4\x74\x9d\xc3\x9a\x64\x27\xec\x2c\x98\x06\x1b"
- "\x8d\x7c\xde\xca\x99\xe4\x8d\x90\x6e\xb7\x76\x74\xf1\xe9\x90\x47"
- "\x01\xfa\x9d\xe7\x14\x6a\x19\x35\xa9\xe5\x96\x1b\xba\x48\x8b\xb4"
- "\x81\x6f\xe3\x98\x4e\xcd\xd7\x39\x90\x57\x9c\xf9\x3a\x7b\x84\x86"
- "\xc8\xce\x29\xd5\xb2\xce\xbc\x86\x0a\xcf\x99\x24\x9e\x6f\x61\xbe"
- "\x76\x21\x2f\x78\x5f\x67\x97\x4c\xb5\xb0\x38\x89\x0d\xf2\x7e\xd6"
- "\x88\xa8\xa8\xb9\xac\xaa\x33\xef\x38\x01\xdf\xb2\x82\xc9\xe0\xb8"
- "\xc2\x2e\x99\x6c\x12\xfe\xd7\xd8\x25\x0f\x77\x08\xff\xc7\xd8\x25"
- "\x73\x9d\xc2\xff\x3d\xf1\x1f\xfd\xc7\xa3\x2c\x2b\x02\x9e\xef\xe7"
- "\x76\x24\xc8\xd1\x2f\x46\x5f\x9f\x2a\xcb\x8a\xb4\xe3\xf0\x1c\xc2"
- "\xe3\x55\xf0\xcd\xfd\xec\x2c\x80\xe3\x66\xb8\xab\x84\xbb\x43\xb8"
- "\x53\xa4\xe1\x71\x15\xfd\x4e\x1c\x35\x1d\xcf\x45\x7e\xa7\xbb\x29"
- "\x07\xf9\xd6\x03\xef\x5a\xad\xc6\x56\x81\xa7\xc7\xf9\x33\x90\x79"
- "\x99\x82\xdc\xa9\xf2\xba\x56\xfe\x5b\xe6\xa6\x0a\x71\xb9\x80\x86"
- "\xc4\xde\x75\xf7\x3d\x13\xee\xbd\xef\xfe\x89\x0f\x2c\x7c\x69\xd1"
- "\xe2\x25\x4b\x97\xe9\x97\xbf\xfc\x4a\xd2\x8a\x95\xab\x0c\xab\x93"
- "\xd7\xa4\xac\x4d\x5d\x67\x5c\xbf\x01\xe9\x7a\xea\xb0\x63\xca\xff"
- "\x6f\xef\x7a\xc0\xa2\x3c\xce\xfc\x7c\xcb\x9a\x22\xc5\x82\x86\x10"
- "\x6a\x4c\x5c\x0d\xf4\xc8\x9d\xc0\x62\x48\xa2\xd6\x36\x24\x35\x09"
- "\xb9\x9a\xc6\xdc\x79\x57\xef\x4a\xee\xe4\x82\x06\x52\x44\x0b\x24"
- "\xe2\xbf\x40\xd0\x5e\xd3\x3d\x95\x4d\xe4\x28\x77\x41\x96\x34\xd8"
- "\xb3\x2d\xd7\x98\x0b\xf6\xe8\xd5\xf6\xb0\x92\x1e\x26\x44\x4c\x6b"
- "\xee\xc8\x15\xec\x8a\x0b\x2c\xb0\xe0\x0a\xab\xa0\x20\x73\xbf\x77"
- "\x66\x3e\xf6\xdb\x05\x8d\xf9\xdb\xe7\xb9\x87\xd1\xe1\xfb\xe6\x9d"
- "\x99\xf7\xdf\xbc\xf3\xce\x3b\xb3\xb0\xa3\xf9\x4c\x0c\x74\xee\x07"
- "\x9d\xb6\x04\xc1\x0f\x60\xd2\x26\xda\xe6\x99\x2d\x53\xeb\xb4\x25"
- "\x06\x7b\x9f\x85\x74\x07\x58\xdb\x16\xba\xfb\x06\xf6\xa7\xb5\x54"
- "\x3e\xd4\x40\x77\xa7\xb9\x4c\x6d\x39\x27\xbc\x0f\x35\xd0\xdd\x7d"
- "\xc7\x62\xdc\x2c\x76\x21\xdd\xaf\xd6\xb6\x86\xea\x1d\x5f\x60\xac"
- "\x11\x7d\xa7\xc2\xb9\x30\x92\xc5\xec\x8b\xe6\xde\xb2\x68\xee\x21"
- "\xfc\x65\xe5\xdc\xed\xdd\x96\xc5\xf6\xa2\x0c\xbb\x8d\xec\x32\xb5"
- "\x27\x1c\x43\xb4\x8d\x38\x7a\x5e\x55\x39\x77\xed\x8a\xe6\xae\x9d"
- "\xe5\xdc\xe3\x88\xe6\xce\xd8\x32\x16\x3e\x6c\x6b\x73\x3a\x4d\x6d"
- "\x4b\xc4\xbc\x42\xfd\x78\xd8\xef\x5a\x4b\x51\x97\x34\xc6\x42\x1c"
- "\x28\x03\xe6\x3b\x66\x91\x7c\xbf\x3a\x38\x32\x03\xf2\x35\xf2\xd1"
- "\x1c\x6d\x2f\xe8\xc8\x71\x6a\x7f\xac\x11\x11\x00\xe8\x79\x5b\x46"
- "\x3a\x60\x2b\xed\xab\xe8\x4e\x29\xd0\x8b\x68\xa9\xf0\x30\xc2\xf7"
- "\x93\xbc\x91\x19\xf9\x73\xf9\x18\xda\x5a\xc7\xb7\xe5\x68\x68\x13"
- "\x0e\xdc\x3e\xa3\x3c\xf1\xeb\x37\x14\x58\x72\x9f\xce\xc9\xb9\x23"
- "\x8c\xc5\x8b\x67\xc0\xbd\x7f\x05\xf4\x7d\xb4\xfb\xca\x79\x23\xe4"
- "\x6c\x80\xbc\x4d\x6f\x23\xe2\x87\xcd\x30\xc8\x64\x07\xde\x03\x80"
- "\x1f\xc1\xfb\x11\xf0\xde\x24\xef\x8a\x1b\x78\x87\xdb\xda\xd3\xc1"
- "\x27\xad\x39\x16\xfa\xfe\xda\xa1\xcd\xab\x35\xc8\x5d\x86\x76\x4d"
- "\x96\xb9\x2c\xae\xcb\x74\x3a\x01\x7c\xd4\xe0\x9d\xda\xbf\x47\xe3"
- "\x88\xf6\x8d\x52\xae\x81\xa3\x54\x86\xae\x1a\xf6\x47\xf3\xdd\xc3"
- "\xb6\xd3\xa1\xf4\xbd\xdc\xe2\xfe\x22\x94\xa1\x97\x26\xb4\xb5\x0f"
- "\x15\xad\xd6\xb0\x6f\xd4\x1c\x13\x38\xdb\x5b\x89\x27\xe2\x83\xf6"
- "\xa2\x6f\x21\xf2\x1b\x1f\x5d\xc3\x12\x46\x98\xf6\x96\x8b\xb1\xca"
- "\x72\x5e\x8d\x5c\x89\x5c\xf1\x26\xea\x8e\x23\x37\x01\xde\x8c\xe7"
- "\x9b\x78\x1e\x47\xc6\x5e\x36\x86\xf8\xce\xdf\xce\xdd\x49\x15\xec"
- "\x76\xc2\x0f\xdb\xfa\x7a\x87\x69\x20\x9e\x78\xa7\xef\xbd\xe7\x61"
- "\xa7\x2b\x03\xbf\x2b\xdc\x19\xc9\x50\x8f\x67\xac\x7c\x1a\xb3\x33"
- "\x07\x79\xb7\x7a\x3f\xc5\x4c\xbf\x1f\x53\xef\x6e\x64\xdf\xfb\xe7"
- "\x60\x7c\x57\xcb\x67\xd6\x5e\x7f\xdb\xeb\xca\x95\xd7\xd7\xee\x6c"
- "\x0c\x33\x75\xc2\xfb\x77\x1e\x0c\x84\x77\x16\x4b\x58\xef\x4a\x59"
- "\xee\x5d\xa3\x9e\xbb\x98\xa9\x0f\x7a\xea\x03\xfe\xbe\x06\x09\xeb"
- "\x6b\xc6\x33\x0a\xd9\x12\x44\x9f\x70\xd6\xd1\x78\x8e\x96\x60\xcd"
- "\xc0\x58\x3a\x4d\xa7\x73\x68\x8c\x4a\xa5\x6d\x69\xe3\x5c\xc0\xb2"
- "\x60\x5b\x95\x7e\xfb\x71\x3e\x1e\x68\x3f\xce\xb4\x20\xfb\xb1\x93"
- "\x3f\xc2\x5c\xa8\x73\x48\x7b\x39\x32\xb4\x2d\x13\x65\xe7\x4a\xe0"
- "\x39\x42\x67\x24\xc0\x21\xe2\x8a\xd2\x5e\xc6\x66\x65\x31\x33\xf9"
- "\x17\x8f\xc9\xb9\x9f\x6c\x96\x68\x2b\xba\x92\x17\xf0\x07\x58\x35"
- "\xf1\xb7\x11\x78\x51\xae\x41\xbb\xea\x16\x36\xa8\xf3\x26\xfa\xd8"
- "\x9e\x82\x3d\x2a\x7e\x09\x27\xf5\xe3\x7e\xb9\xb2\xa8\x8f\xa4\x7d"
- "\xe6\x31\xc0\x69\x6f\x4b\x7f\xff\x14\xd2\x32\xe6\x64\x64\x93\xf4"
- "\x6c\x19\xb3\x62\x2e\xa5\xb1\xf1\xe1\x35\x2c\x29\x86\x59\x31\xdf"
- "\x66\x76\x98\xce\xa4\x24\x6e\x67\x56\xc2\x47\x7e\x1d\x72\x8c\x38"
- "\x68\x2e\x4a\x5c\xea\xfe\xd3\xd3\x59\x6f\x6e\x62\x82\x4e\x15\xf1"
- "\x83\x7a\x03\xdd\x32\xda\xc7\x96\x6e\x95\xb2\x82\x56\x0d\xfa\x1f"
- "\x22\xd9\x49\x9f\xa8\xaf\x07\x1e\x3b\xd5\x89\xbb\x83\xa4\x3c\x35"
- "\x74\xbf\x04\xe9\x83\xda\xd3\x5d\x94\xf2\x7b\xc2\xdb\x0f\x0b\xbd"
- "\xa1\x3f\x8d\x07\x07\x0d\xc2\x51\x34\xc6\xc7\x38\xfc\xd1\x2b\x5b"
- "\x47\x10\x7b\x9c\x9d\x19\x38\x3e\x67\xdc\xc6\xf1\x41\xbf\x43\xe8"
- "\xdf\xc8\x21\x23\xf9\x13\xd0\x8c\xa0\x78\x03\x30\xfb\xb8\x0d\x38"
- "\x9e\x19\x11\xe7\x3a\x5d\xa6\x8e\x4b\xe0\xc5\x4e\x78\xc0\x4f\xa3"
- "\xc4\xd5\x91\x72\x74\x7b\xe0\x58\x2b\x7c\x35\x34\xe6\x62\x3e\x6f"
- "\x15\x32\xc1\x77\x75\x1c\xaf\x92\x75\xf5\x68\x53\xcf\x47\xd3\x18"
- "\xdd\xd7\x20\xd7\x12\x51\x57\x57\x74\x49\x8c\x6f\xa3\xf4\x6b\x1d"
- "\x3d\xf9\x3b\xb8\xdb\xcf\x77\x47\xb5\x7e\xe7\x85\xe2\xbb\x8e\xe8"
- "\xf1\xcd\xe9\x62\x6d\x25\x1a\xd4\x5f\xe1\xdb\x4e\xf8\x74\x5d\x25"
- "\x82\x0f\xa9\xaf\x33\x87\x00\xaf\x21\x5b\x14\x7a\x83\x1f\x1d\x2a"
- "\x22\x5b\xec\x20\x1b\x3a\xb2\x97\xca\x9b\x45\x79\x89\xf0\xb1\x13"
- "\xf5\x67\x3c\x54\xdf\xe2\xc6\xb8\x7d\x13\xb6\x34\xce\xd8\xed\x51"
- "\xcc\xea\x2b\x11\xb2\xd5\xfa\xb6\xad\xd0\x8e\x8d\x31\x46\x7c\x42"
- "\x47\xf5\xc3\xb6\xb3\x2b\xb1\xd6\x88\xf8\x01\xfe\xba\x8e\xbf\xb2"
- "\x86\x11\xcf\xf0\x67\x8a\xbf\xb3\xbf\x50\x63\x5f\x47\x32\x92\x3e"
- "\x13\xa5\xef\x43\x5d\x67\x06\xf1\xee\x97\xfb\x6c\x85\x51\xc7\x42"
- "\x6e\x8c\x03\x8d\x17\x8d\x8b\x01\x27\xd9\xbe\x1d\xb8\x6a\x65\x59"
- "\xda\x06\xe9\xda\x1e\xcd\x9b\xa9\xbd\xbf\xad\xeb\x1d\xaa\x7b\x16"
- "\xb4\x93\x36\x31\x71\xf7\x18\xdd\x5b\x02\xbc\xb5\x74\xcf\x28\x70"
- "\xd4\x93\x4e\xc1\x4b\x1c\xd9\x23\xca\xcd\xaa\x5f\x2c\xd6\xf3\x45"
- "\xc8\xcb\xfd\xf3\xbf\xf3\xa6\x40\xfb\x72\x05\xcf\x7f\x1a\x6f\xfb"
- "\x78\x51\x1a\x13\xf6\x90\xc7\x2c\x03\x26\xd7\x6b\x6a\xed\x50\x63"
- "\xdd\x39\xe3\x18\xe6\x8b\x01\xc7\xee\xa0\xb1\xae\x17\xf6\xb8\x79"
- "\xa5\x46\x32\xa3\x6f\xbd\xc2\x23\x64\x16\xf6\x54\x22\x6c\xa0\x99"
- "\x6f\x86\x9c\x13\x76\x70\xd6\xad\xc6\xb9\x39\x48\x27\xba\xef\x4a"
- "\xa1\xfb\xe5\xc8\x27\x0d\x97\xb0\x2f\x0f\x8f\xfa\xfd\x12\x8d\xfd"
- "\xb8\x18\x7b\x97\xdd\x21\xd7\x5b\xe5\xb7\x5c\xb2\x3e\x3a\xc0\x86"
- "\x89\x97\x37\x84\xfd\x12\x2f\x45\xe9\xc4\x4b\xbd\xe0\xa3\xc8\xc2"
- "\x06\x4c\x9d\xcb\x89\x3e\xfa\x36\xa9\xf9\xaa\x70\x9d\xad\x24\x5c"
- "\x3b\xe1\xab\x88\x27\xd0\x8e\x17\xfe\xef\x41\xa1\x93\xfd\x8a\xf7"
- "\xa6\x91\x12\xea\xeb\xb4\x5f\x32\x89\xbe\x4d\x78\x37\x8f\xc8\x3b"
- "\x68\xc2\xd0\xff\x20\x7d\xef\x7f\x97\xa9\x67\x8c\x7c\x34\x7d\xe6"
- "\x84\xf7\x4e\xfa\xfb\x50\xf8\x14\x33\xf0\x85\x92\x8d\xea\x76\xe1"
- "\x31\xf5\xbc\x4b\xdf\x8f\x0f\x5d\xd7\x22\x46\x3a\x48\xfa\x26\x5b"
- "\x46\x8c\x94\x32\x6c\xeb\x32\xeb\x76\x0b\x3a\x95\xa4\x7b\x39\x3e"
- "\x5d\x0f\xc3\x8e\xeb\xfd\xb6\xd5\xf5\xb0\xd2\xe3\x41\xe8\x31\x14"
- "\xf4\x8e\x2b\xb9\x0e\xa2\x3d\x62\xb1\x9e\x9f\x29\xde\x2b\x54\xfb"
- "\x75\xfa\x38\xa8\xb9\xda\xbc\x97\xfc\xaf\x18\x83\xae\x31\xd5\xb7"
- "\x46\xd1\xba\xa2\xb7\xa5\x18\x51\xde\x2d\xd5\x75\x85\xfc\x60\x12"
- "\xc6\x5e\xf8\x3e\x71\x07\xaf\x84\xd1\xdc\x91\x34\x7a\x0e\x08\x3b"
- "\x44\xdc\xe3\xb7\xa3\xae\x53\x41\xfe\x89\x7c\xb1\xfd\x04\x70\x90"
- "\x3f\x25\x5b\x22\x9f\x4a\xfb\x18\xe0\xab\x55\xf3\x47\xf1\xdc\x7d"
- "\x5f\xa0\xad\xf4\xbc\x00\x5b\x49\xf0\xe3\xee\xb6\x4e\xb5\xce\x39"
- "\xa4\x0f\xac\x94\x7d\xba\x9f\x53\xb2\xd5\x4a\xd9\x54\x99\xf4\xf6"
- "\xac\xd0\xdb\x03\x06\x3d\x42\x6f\xee\xd7\x54\xfb\x7a\xf2\xe5\xfe"
- "\xf9\xda\xdd\xaf\xcf\xe5\xc9\xfe\xc2\xfd\x32\xcd\x07\x03\x5f\x4d"
- "\x41\xfe\xa2\x7e\x6a\x7f\xd1\x5d\xa1\xe4\xad\x0e\x9a\x1b\x35\x2a"
- "\xde\x3d\xac\x8f\xc3\x09\xec\xd3\xe4\x3d\x4a\xed\x87\xc9\x7f\x12"
- "\x6d\xe3\x1a\x54\x25\xf5\xaa\xe6\xb2\x7b\xcf\xe4\x71\x70\xa7\x1b"
- "\xe7\x33\x8d\x35\xf9\x04\xc2\x41\x63\x2a\xe2\x4a\xc0\xe4\xb8\xba"
- "\x53\xc8\x37\x18\x7d\x34\xda\x96\x8d\x73\x9a\x2f\xee\xb5\x81\x73"
- "\xb1\xbb\x59\xcd\x45\x45\xbb\x27\x19\x63\x64\x35\xd0\x3d\x15\x44"
- "\x97\xc6\xa6\x91\xf4\xa0\xc6\xf4\x56\x7d\x4d\xa3\xf6\xe8\x5b\x38"
- "\x6c\xeb\x09\x0d\x5a\x1f\xed\xc4\x1f\x68\x15\x0b\x9f\x55\x2e\x7c"
- "\x45\xe1\xb0\xe0\xa7\x27\xdc\xa1\xd6\x09\xc0\xac\x12\xe6\x6e\x55"
- "\x6b\x89\x6e\x37\x3b\x02\x79\xea\xc9\x9a\x3a\x3e\xea\x2e\xd6\xe3"
- "\x23\x81\x4b\xf8\xa2\x9e\x1c\x25\x1f\xc1\x12\x24\xac\x3b\x85\x60"
- "\x7b\xa5\x1e\xca\xb8\x58\xaf\xba\x5a\xd5\x7a\x45\xf3\xcb\x84\x72"
- "\x1a\xcd\x31\x2a\x03\x47\x03\xe1\x6f\x29\xbe\x4c\x7b\x88\x0a\xa7"
- "\xa9\xd3\x45\xfe\x80\xfc\x05\xfd\x1e\xab\x78\xd2\xef\x96\x9a\x7a"
- "\x67\x91\xdf\xa1\x38\x84\xea\xd1\xee\x14\xf9\x22\xc0\x17\xd0\x7d"
- "\xad\xbc\x2f\x14\x78\x7b\xcd\xb2\x6f\xef\x5d\x22\x56\xe8\x4b\x0b"
- "\xd1\x61\x7a\x3f\xf8\xad\x4e\xea\x47\xfd\x75\xff\x45\xbe\x6b\x8c"
- "\x7c\x93\xa0\xd7\xbb\x45\xd9\xb8\xd8\x37\xe8\x71\xd1\xa8\xc9\xd0"
- "\x96\xee\x9f\x11\x3e\xad\xb7\x51\xfa\xb3\xde\xc3\xd4\x57\x8c\x1f"
- "\x7c\xe5\xb3\x97\xf8\x19\x47\x1e\x33\x57\x0d\x92\x5f\x6c\xaf\x93"
- "\x7c\xf6\x45\x2a\x39\xde\x13\x72\x48\x9f\x6a\x97\xbc\xb4\xd7\x55"
- "\x5d\x16\x75\x17\x48\x16\xaa\x2b\x35\xd4\xf1\xd1\x78\xd4\xf5\xcd"
- "\x16\x7c\x05\xf5\x1b\x1f\xcd\x9a\xd4\x9e\xee\x1f\x86\x0f\x0d\xad"
- "\x2a\xd7\x7d\x6f\x9f\x5d\xf2\xd9\xf7\x88\xee\x77\xa1\xf7\x36\xf2"
- "\xbd\xa2\x6e\xbd\x6a\xf3\x35\xf5\x14\xfe\xbd\x6f\x87\xd4\x6b\x8c"
- "\x49\xe9\xdb\xa5\xe4\x78\x41\xec\xb3\xfb\xd6\x40\xb7\x7d\x05\xba"
- "\x6e\x8d\xef\x34\x7f\x40\x3f\x92\xca\xc2\xee\xb7\x8b\x3d\x6c\x25"
- "\xb5\x21\x9e\xe4\x1a\xd1\x9b\x13\x1c\x53\x63\xaf\x37\x93\xd6\x25"
- "\x19\xab\xf6\xf7\xa8\xb3\x21\xd6\x90\xf7\x7d\xac\x0b\x9e\x14\xdd"
- "\xc7\xf0\xe1\x34\xec\xf9\x3b\xd0\xc6\x23\xee\x35\xa5\x3b\x45\x8c"
- "\x6d\xc8\x3f\xbd\x7a\xd9\xa9\x70\x7a\x22\x75\xbf\x41\xbe\xe4\x84"
- "\xaf\x43\xc5\x74\x9e\x86\x2a\xe5\x4b\x06\x4c\x9e\xa3\x81\x71\x98"
- "\xe7\x68\xa0\xcf\xe8\x7f\x37\xd8\x67\x20\x6e\xde\x35\x6c\xf3\x94"
- "\x05\xc4\x01\x80\x5d\xdb\x77\x78\xb2\x68\x8e\xd2\x9d\x72\xc2\x3f"
- "\x89\xf3\xae\xfe\x3b\x74\x9e\xc9\x6f\x0e\x6d\xd3\xcf\x2f\xfa\xdf"
- "\xa0\x58\x2d\x90\x5e\xbf\x39\xc0\x77\x12\x3d\x1d\x9f\x99\xd1\x9d"
- "\x64\xd0\x03\x9d\xb9\x78\x4e\x29\x3f\x5f\x1d\xe0\x2b\xd5\x1a\x46"
- "\x7e\x32\x70\xad\x6a\x3f\x1c\xb8\x56\xf5\xbf\x36\xd9\x47\xf6\x17"
- "\x5f\xff\x5a\xd5\xbf\x86\xfc\x96\xee\x23\x03\x7d\x41\xff\xae\xaa"
- "\x80\x58\xb6\x3f\x5c\x8f\x65\xfd\x7e\xd4\x53\x49\x3e\x0a\xf4\xeb"
- "\x15\xed\x31\xac\xfb\x13\xb4\x51\x9f\x72\xc2\x02\xdb\xb4\xb5\x67"
- "\xc1\xa6\x9c\x2a\x06\x14\x73\xf3\xb2\xb8\xbf\xa8\x2f\x1e\xf6\x17"
- "\x46\x76\xd6\x90\x3b\xc8\x5c\xfe\xb5\xa2\x71\x68\xa3\xae\xdf\x81"
- "\x3d\xc6\xb8\x70\x7f\x39\x7f\x7e\xd8\x36\x90\x69\x94\x71\x0f\x60"
- "\xa5\xea\x0c\x41\xe8\x56\xe0\x1a\x58\xe2\x28\x0f\x94\x4d\xca\x31"
- "\x90\x43\x72\xd0\x9e\x08\xf4\x17\x51\xdc\x83\x98\x0f\xef\x9d\x87"
- "\x1c\x13\x36\xef\x34\x5f\x2a\x31\xc6\x57\xa7\xc3\xc9\x57\xaa\xbd"
- "\x67\x13\xe2\x1d\xbb\xf1\x2c\xe6\x91\xaf\xac\xb2\x6c\xca\xcb\xce"
- "\x2d\x58\xbf\xd8\x92\x9d\x9b\x5d\x90\x9d\x91\x93\xbd\x35\xa3\x20"
- "\x7b\x63\xee\xa2\x0d\x19\x4f\x66\x3f\x61\xd9\x9c\x91\x6f\xb1\x16"
- "\xc6\x15\x86\x31\x7f\xd3\x65\x96\x8c\xfc\xfc\xa7\x37\xac\xcb\xb4"
- "\xe4\x66\x3f\x91\x90\xb7\x2e\x7f\x5d\x81\x25\x23\x6f\xe3\xd3\xb9"
- "\x99\x96\xb8\xcc\xc4\x38\xeb\xdd\x99\x61\xc6\x33\xb4\x85\x91\xcc"
- "\x33\x7e\xd1\xed\x2e\xbd\xc8\x42\x23\xb4\x4d\x79\x11\x85\xd9\xb9"
- "\xf2\xdc\xee\xdc\xbb\x49\x65\x6c\x13\xea\xc3\xe9\x7e\x64\x6e\x1b"
- "\x70\xe3\x69\xa6\x76\x90\xd3\x82\xf7\x50\xf0\x3e\x6f\xd8\x76\x0e"
- "\x3e\x7b\xa8\x58\xdc\x7d\x0c\x38\x64\x9b\xc7\x2f\x36\xb9\x11\xb3"
- "\x6d\xa2\xcf\xd7\x1d\x17\x59\x94\xfd\x19\x66\x46\x0e\x47\x8e\x34"
- "\x45\xd2\x59\xd7\x39\xf8\x7d\xaf\x5b\x9e\x7d\x7a\x73\xbc\xb3\x66"
- "\x2f\xe7\xbb\x67\x2f\x97\xe3\xe2\xcd\xd6\xcf\xa2\x1f\xfd\x36\x7b"
- "\x94\xec\xb3\xc3\xe4\x15\x9f\xc5\xed\x84\x2d\xd3\x39\xee\xd0\x2f"
- "\xef\x4f\x45\x3c\xd8\x46\xe7\xb0\xa8\xcb\xf6\x99\x58\x38\xf8\x32"
- "\x1f\xdb\x6e\x65\xfb\x40\x2b\x3f\x86\xf3\x61\x9b\xd7\xaa\x9f\xa7"
- "\x41\x86\x48\xc8\xd2\x2a\xe5\x38\x77\xa3\x90\xa3\x9c\xc7\x96\xcd"
- "\x01\x7f\x2f\x12\x3f\xde\x74\x5d\x06\xf0\xdd\xea\x34\x9d\x6b\x00"
- "\x9f\x91\xc4\xd7\x54\x67\x7d\x74\xde\x05\x3e\x0f\x8c\x3f\x03\xbd"
- "\xdd\x26\xef\xc4\x2b\xad\x92\xf3\x0f\xf2\xb4\x39\xf0\xbe\x77\x90"
- "\x85\xef\xa1\xbb\xcb\x4b\xe6\xf3\xb7\x7d\x63\xac\x25\xab\x95\x45"
- "\x6c\xe1\x5e\xfe\x53\xb7\x5b\xc9\x74\x92\x7c\xc3\xeb\x4f\xb5\x9a"
- "\x49\x26\xac\x15\xe1\x8e\xc1\xab\x9e\x2d\x9a\xf7\x45\x73\x1f\x7f"
- "\xc9\x18\x73\x9d\x5f\x4a\x3a\xa1\x78\x6b\xa8\x84\xee\xc0\x3e\x6f"
- "\x01\xed\x42\x15\x1b\xfb\xf8\x68\xba\x21\x96\x3a\x4f\x76\xe6\xbb"
- "\x0a\xee\x50\x1d\x37\xdd\x93\x4e\x7d\xe4\xf8\x9f\x3f\x80\x3e\x5e"
- "\x03\xfe\xe2\x60\xfc\x84\x13\xef\x5e\x9d\x8e\xdc\x87\x9f\xa7\x98"
- "\xc0\x0b\x5b\xf6\x5e\x85\x5e\xec\x8b\xe5\xfc\x54\x0b\xe0\xa5\x97"
- "\x98\x19\x6d\xe1\xab\x04\x7e\x27\xf4\xbe\x82\xf0\xef\x8c\x66\x6c"
- "\x17\xda\x0c\xd9\xbc\x85\x3e\x71\x67\xf9\x79\xd8\x49\xfb\xa6\xe0"
- "\xb3\x6c\x65\xcf\xcb\x82\xec\x39\xf5\x45\x8a\x09\xcb\x80\x1f\x36"
- "\x54\x7a\x01\xeb\x30\xca\x89\x65\x2c\x9e\xe8\xe0\xfd\x24\x9d\x87"
- "\x0c\xdb\x06\x57\xe9\xf4\x38\xec\x7f\xef\xb8\x3c\x83\x51\xb6\xb5"
- "\x88\xce\xaf\x8b\x0a\x39\x3f\x06\xff\x4e\x3c\x92\x8d\xa1\xcf\x2e"
- "\xdd\xa6\x60\xeb\xa7\x84\x5d\x45\xb1\x78\x6e\x1b\x0c\x75\xcc\x41"
- "\x3b\xd8\x55\x15\xec\x89\xec\x0a\x6d\x0f\xe9\x36\x05\x5b\x3b\x49"
- "\xed\xc0\x43\xd8\xa1\xad\xa9\x66\xf2\x91\x2e\xd3\x50\x1c\xd9\x18"
- "\xff\xde\x57\x5b\xf9\xcd\xdf\x68\x95\xe3\x34\x14\xd7\x32\x22\xc7"
- "\xc0\xaf\xf7\xc1\x11\x83\xde\x4f\xc2\x8e\xc3\x48\xcf\xf2\xac\x7a"
- "\x28\x0e\xbc\x9d\x14\xb1\xf8\x0e\x8c\x81\x58\xab\x06\x5d\xd4\x5f"
- "\xe9\xb0\xd9\xaf\xc3\xa1\xd4\xa9\x74\x18\xa4\x3b\xb3\xbc\x17\x7d"
- "\x68\x25\xcd\x15\xf4\x29\xd0\xef\x3a\x9f\x6a\x2c\x41\xc3\x6c\x2e"
- "\x63\xa1\x44\xa3\x31\x4a\xb4\xaf\xd1\x69\x94\x42\xd7\xde\xa2\xac"
- "\x6b\xda\x73\x63\x35\x63\x74\x26\x4e\xfd\x63\xa3\x48\xbf\x43\x2e"
- "\x7f\x7f\xee\x0b\xee\x1f\xf7\x44\x00\xaf\x22\x83\xd7\x91\x7d\x73"
- "\x60\x47\x82\x5f\x5f\xec\xb5\xf8\x8d\xb5\xc8\x75\xb2\x61\x21\xd9"
- "\xb7\xef\xf1\x96\x0a\xc6\x08\xa6\xca\x2b\x87\xb0\xf6\x04\x9f\xef"
- "\x5f\xfd\xf3\x06\xdf\xfe\xc0\xcf\x1b\x7c\xbb\xaf\xf6\x79\x43\x10"
- "\xdd\xf7\x88\xee\xb8\x63\xb5\x66\xa0\xdd\x38\x3e\x05\x6d\xbd\x7f"
- "\x62\xb5\x71\x3f\x73\xe1\x0e\xe2\xe1\x04\xd6\x29\x7e\xcb\x6a\x8d"
- "\x03\x4f\xa3\x58\xc3\x2f\xc4\xcb\xf8\x85\xe2\xa2\x0b\xa1\xd4\x26"
- "\x58\x8e\x89\x14\x1a\x45\x67\xea\xec\x92\x28\xcc\x78\x90\x51\x84"
- "\xc4\xee\xf6\xea\xd5\xa6\x80\xc6\x8c\x4f\x51\x08\x67\xec\x1e\xd1"
- "\x9e\x23\x49\x90\x2a\x4b\x2c\xe6\x89\xf6\x13\xf5\x1f\x21\xcd\x94"
- "\xfc\x0a\x7c\x23\x4c\x93\x6f\x4b\x22\x0d\x2d\x56\x5c\xa3\x37\x67"
- "\x7a\x97\xa9\xd2\xb7\x90\x8b\x57\xcf\x00\x3e\xab\x68\xcc\xf9\x98"
- "\xc2\xaf\x97\xb9\xb1\x4c\x90\xc0\x32\x52\x48\xba\x81\xc0\xfc\x90"
- "\x4c\xf1\xab\x52\x5f\xcc\x9c\x00\x99\xaa\x8d\xbc\x42\xdd\xc5\x33"
- "\xc4\x4b\x04\xfd\x18\x01\xbe\x78\xd4\x2f\x59\x35\xd1\xe0\x46\xdf"
- "\x73\x86\xe6\x6f\x49\xf6\x97\x56\x5f\x43\xc6\x0f\x9a\x6e\x33\xbc"
- "\xcf\x97\x8f\xa5\x6b\x3f\x46\xfc\xd7\x4e\x96\x93\x33\xf5\x57\xbf"
- "\x79\x2c\x75\x4d\xd5\xd4\xaf\xff\x65\xfa\x18\x73\xa3\x85\xfa\xeb"
- "\xbf\xd4\x10\x58\xbe\xd7\x1e\x58\xbe\xcf\xf9\x31\x70\xce\x04\x91"
- "\x22\x27\xf6\x62\xa9\xb5\x13\xc0\x88\xa0\x29\x13\x61\x0f\x9a\x42"
- "\xfe\xa4\xb8\x09\x61\xec\xfe\x14\x03\xd8\x3c\x75\xeb\x4f\x26\xcd"
- "\x7d\x4e\x4d\x88\xf9\xde\xc8\x49\x95\xf7\x06\xc1\xa8\x7c\x83\x45"
- "\xc1\x92\x8f\x4e\x6a\x2f\x60\x16\x43\x59\x4b\xc5\x8f\x6a\xd8\xbf"
- "\x77\x72\xdb\xe9\x34\x9d\xae\x23\x69\x34\x3f\xa6\xd3\x27\x94\xb8"
- "\x5c\xc5\xe1\x89\xc4\x83\xfe\xf1\x09\x47\xc9\x55\x05\x57\x00\xae"
- "\x5e\x3e\x96\x75\x7c\x3a\x4d\xa7\xe9\x34\x9d\xa6\xd3\x74\x9a\x4e"
- "\xff\x0f\x92\x66\xdc\x58\xd3\xef\xb0\x7e\x46\x3d\x8d\xfb\x1f\x4d"
- "\x65\x23\xcc\xf4\x51\xfa\x71\x95\x58\x71\x6a\x83\xa5\x7a\xad\x33"
- "\xd2\xbe\xea\xa4\xf5\xd0\x26\x6f\xe8\xf3\x69\x4d\xf1\x07\xb3\xdc"
- "\x31\x15\x6b\x5a\x97\xd4\x17\x8e\x98\x77\xad\x68\x8c\xad\xc9\x74"
- "\x45\x95\xad\x3e\x95\x52\x57\xe0\x0b\xdf\xbd\xb2\x79\x51\x6d\x8e"
- "\x67\x5e\x65\x7a\xdb\xf2\x23\xdb\xc7\x4c\x25\xf7\xff\x6a\xe1\xf7"
- "\xff\xae\x63\xce\x8b\x7f\xf6\x9b\xc5\xff\x96\x37\x18\x66\xfb\xd3"
- "\x37\xff\xf8\x47\x4f\xf5\xce\xfd\xe7\xbf\xfe\xdf\x65\xff\xb1\xf5"
- "\xf2\x0d\x7f\xff\xe0\xaf\xbf\xf0\x83\xf5\x5d\xd1\xe5\x7f\xf9\xdf"
- "\x77\xff\xf4\x99\x8b\x9f\xdb\xfb\xb5\x13\x89\x3f\xc9\x1d\xb8\xad"
- "\xea\x6f\x4e\x7f\xf9\x97\xcf\x8e\x6b\xcf\xdd\x77\x74\xc1\xcb\x19"
- "\x67\x66\xbf\xf0\xd8\x3b\xc9\xaf\x7d\xeb\xfc\xcc\xef\x3e\x7c\xfc"
- "\x8e\x1f\x66\xf7\x7c\xfe\x9f\xfe\xea\xbd\xa5\x3f\xdb\x72\x69\xc6"
- "\xb7\x1f\x78\x23\xee\xc0\xba\xce\x9b\xfe\xf1\x2f\xde\xbd\xeb\xf0"
- "\xd3\x17\x66\xed\x79\xe4\xed\x84\x7f\xdd\xd0\x7f\xeb\xfe\xc7\xdb"
- "\xbf\xf4\x8b\x1d\x57\x42\x76\x7e\xe5\xd8\xed\xaf\x3c\x71\xf6\xc6"
- "\x7d\x7f\xfe\xdb\x3b\x5f\xcf\x1f\xfa\xec\x3f\x7c\xf5\xad\x3f\xf9"
- "\xf1\x37\xfb\x6e\x79\xe9\x1b\xbf\xfb\xe2\xcf\xb7\x8d\x7e\xe6\x3b"
- "\x0f\xfd\xd7\x1f\xfd\xcb\x93\xdd\x37\x7f\xef\xeb\xff\x73\xcf\xbf"
- "\x6f\x1e\x8e\x28\x7d\xb4\x25\xe9\xd5\x8d\xe7\xe6\x3b\xfe\xf6\xf7"
- "\xf7\xfe\x67\x11\xff\x28\xfa\x63\x21\x51\xbf\xfd\x34\xc7\xcd\x1f"
- "\x3c\x12\xb8\x6a\xed\x87\xc6\x63\xd2\xd4\xf8\x4b\x40\xf1\x5d\x4c"
- "\x0b\x65\x37\x98\x3f\xc4\x8e\xe1\xc3\xca\x7d\x95\x64\x31\xf6\xbf"
- "\x9e\x44\xe7\x47\xc9\xc8\x77\x22\xdf\x22\x20\xfe\x53\x80\x85\xd7"
- "\x89\xe3\x93\x4f\x1a\x64\x0f\x01\x67\x33\xd8\x0d\xd0\x56\x28\x9b"
- "\xc9\xc2\xd8\x67\x59\x38\x9b\xc5\x3e\xc7\x22\x58\x24\x9b\xcd\xe6"
- "\xb0\x1b\x59\x14\xbb\x89\x45\xb3\x9b\x59\x0c\xfb\x3c\x9b\x0b\x69"
- "\xe6\xb1\x5b\xd9\x6d\x6c\x3e\x94\xb2\x60\x6a\x59\x8a\x59\x6a\x0c"
- "\x7e\xe0\xff\x2a\x96\x2a\xca\x6b\xa7\xe1\x9f\x2a\xbc\x41\xc1\x4f"
- "\x2a\xb8\x73\x1a\xfe\xa9\xc2\x2d\x7f\xe0\xe7\x82\x3f\xe8\x53\x43"
- "\xe8\x20\xa3\x87\x80\x18\x62\x22\x05\x43\x35\x95\x26\xca\xec\x7d"
- "\xfa\x4f\xc2\x17\xd8\x3f\x38\xa5\x22\xab\x03\xd9\x22\xc6\xe4\xe7"
- "\x0d\xdc\x98\xc6\xca\xb5\x5f\x99\x67\x17\xd3\x47\x27\xa1\x2c\x4a"
- "\xfc\x7c\xff\xd4\x50\x80\x5c\x8c\xbc\x1b\xb9\x14\xf9\x25\xe4\x03"
- "\x3a\x6e\xa6\xcd\x5f\xc1\x34\xcb\x76\x3c\x9d\x4c\x5b\x10\x83\x5c"
- "\xcb\xb4\xd8\x45\x4c\x5b\xe8\x61\x5a\x5c\x8e\x9f\xf9\xc4\xe7\x27"
- "\xb8\xd4\x16\x29\xb8\x05\xef\xc9\xc6\xb3\xda\x0f\xba\x9e\x35\x3c"
- "\xb0\x3a\xcd\x92\x9c\x98\x92\x78\xd7\x9d\x19\x96\x84\x55\x09\x96"
- "\xc5\xd6\xe4\xe4\x24\xeb\xdd\x49\xc9\xf7\x58\x16\x2f\x5e\x96\x6c"
- "\x5d\x66\xb5\x5a\x36\x6c\xc9\xcb\x4e\xb6\x3e\xb9\xce\xb2\x3e\x3b"
- "\x6f\xc3\xe6\x8c\xbc\x75\xd7\x21\xf5\x07\x4e\x10\x85\xdd\x7a\x45"
- "\xb2\x69\x1c\x21\x8d\xdd\xcb\x4c\x57\x0a\x59\xc8\xec\x54\x36\x69"
- "\x48\x35\xbb\x12\x29\x5e\xe5\xa0\xea\x1f\xb6\x31\xed\x07\x8d\x4c"
- "\x7b\x79\x8c\x69\x2f\xd5\x33\x6d\xdf\x08\xd3\x8e\xe7\x30\xed\xd7"
- "\xcb\x99\x76\x34\x9d\x69\x3f\x47\x9b\xd7\xe3\x27\xc3\x7e\xd3\x2c"
- "\x61\xe7\xd0\xb7\x17\xd9\xb5\x92\x69\x6d\x4b\x24\x6c\x14\x63\x73"
- "\x31\xe6\x93\x50\xc1\x47\x48\x1f\x74\xdc\xb5\xff\x03\x03\x93\xab"
- "\x6c"
+static unsigned int ethp_z8e_uncompressed_length = 387604 ;
+static unsigned int ethp_z8e_length = 121317 ;
+static unsigned char ethp_z8e[121317 + 1] =
+ "\x78\x9c\xec\xbd\x7f\x7c\x54\xc5\xd5\x3f\x7e\xb2\x59\x60\x13\x03"
+ "\x1b\x31\xe2\x96\x62\x5d\x2d\xd8\x68\x51\x82\x62\x4d\x2d\x68\x14"
+ "\xd0\xa8\xfc\x88\x4a\xdb\xa8\x68\x82\x06\x0c\x1a\x21\x42\x80\x05"
+ "\x42\x36\x2c\xd8\x6e\x10\x48\x54\xa4\x11\x02\x89\x9f\x62\xa5\x2d"
+ "\x56\x6c\x69\x8b\x6d\x02\xab\x49\x3f\x0f\x6d\x93\x2c\x55\xb4\xb1"
+ "\x5f\x6c\x57\x9e\x94\xa6\x3c\x01\xb6\x64\x61\xd7\x64\xf7\xce\xe7"
+ "\x7d\x66\xee\x4d\x76\x97\x0d\xca\xf3\x3c\xaf\xd7\xf7\x9f\xe6\xf5"
+ "\xda\xdc\x7b\xe7\xce\x9c\x39\x73\xe6\x9c\x33\x67\x66\xce\x9c\x4b"
+ "\x74\xf1\x7f\x3e\xb2\xf0\x25\x89\x4c\x1f\xb8\xdf\xfd\x6f\x94\xff"
+ "\xf7\xdf\xbf\xff\xfe\xfd\xf7\xef\xbf\x7f\xff\xfd\xfb\xef\xdf\x7f"
+ "\xff\xff\xfe\xf9\x93\x68\xd2\x19\x93\x99\xde\xab\x21\x0a\xba\x2c"
+ "\x63\x7c\x49\x49\x33\x7e\xf0\xb2\x08\xe3\x55\x12\xc6\xf9\x31\x7c"
+ "\xe5\xdf\x4b\x48\x33\xd5\x90\xe5\x9a\x74\x4a\x17\x3f\xb0\x99\xa6"
+ "\xee\x20\xda\x32\x4a\x74\xbf\xbc\x55\xf8\x5b\xca\x89\x9a\x77\xe1"
+ "\x79\xab\xe8\x7a\x79\x94\x08\x00\x4e\xa1\x8f\x0a\xcd\x0c\x67\x1d"
+ "\x9e\xd7\x21\x1d\x69\x65\x48\x0b\x70\x5a\x35\xca\x19\xe9\xde\xf5"
+ "\xe7\xa8\xc5\x1e\xa6\x6a\x86\x63\x8f\xd0\xb4\xab\x25\x1e\x0d\xc8"
+ "\x5b\xce\x79\xd7\x8e\x42\xbd\x19\x44\xae\xad\x22\x14\x85\x83\x85"
+ "\xeb\xe1\xba\xf5\xfc\x87\xe3\xea\xf3\x23\xad\xd3\xa8\x6f\x10\x18"
+ "\xe9\x5c\x9e\xdb\x60\xff\x0a\x25\x1f\xa7\x4b\x2e\x67\x98\x8c\x9b"
+ "\x70\x91\xc5\xdb\x1b\xa6\xe3\x94\x92\xd9\xe3\xa2\xe4\x66\x50\x63"
+ "\xf3\x56\x99\x9e\xec\x0d\x84\xc9\x5e\x41\x49\x78\x37\x13\x57\x13"
+ "\xca\x0d\x67\xfa\x3c\x54\x47\x63\xb9\x6e\xc0\x35\x0b\x93\x27\xa9"
+ "\x7e\x24\x11\xd3\x28\x60\xa2\xaf\x05\x5c\x94\x14\x74\xa5\xa0\xfd"
+ "\x96\x4c\xd9\x7e\xd4\x8b\xb2\xe6\xe3\x94\xfa\x2f\x13\xf2\xa3\x4e"
+ "\xbf\x7d\x15\xe3\x90\xfa\x3b\xe1\xf2\x98\x0c\x38\x9a\xcb\x73\xc9"
+ "\xce\x97\x88\x7a\x5c\xa6\x7b\x03\x26\xab\xd0\xe1\x34\x1a\x70\x38"
+ "\x1f\xea\x4a\xe3\xba\x7a\x5c\xe6\x97\xa2\xf2\xf8\x8c\x3c\xc0\xdb"
+ "\x3f\x21\x40\xc9\x8c\xf3\x31\x4a\xcd\xe6\xfa\xf4\xb6\x98\xb9\x0e"
+ "\xef\xf2\x30\x79\xd1\xf7\xa8\x3b\x03\x6d\xb5\x37\x87\x88\x00\xf3"
+ "\xd2\xfa\x0a\x22\x86\x0f\xfc\xed\x0a\x66\xea\x24\x03\x26\xc3\xe8"
+ "\x6f\xab\xcb\x33\xb2\x5e\xe2\xc8\x6d\xb5\x90\x9e\xb7\x30\x1a\x47"
+ "\x86\x8b\xb6\x5c\xc1\x6d\x69\x01\x47\xe9\x79\xd6\xf7\xd3\xa3\xbf"
+ "\xfd\x97\xe4\xc4\xc1\xb6\x29\xd8\x49\x80\x9d\xe4\xd1\xcb\xf5\xb7"
+ "\xdf\x17\x97\x5f\xe5\x4d\x4f\x09\x98\x84\x4e\x87\xd4\xae\x81\xbc"
+ "\x29\x5b\xa2\xf3\x02\x1f\x93\xa2\x2d\x99\x7c\x94\xda\x81\x76\x26"
+ "\x23\xcf\x0c\xf4\xa3\x5d\x7f\x7f\xb9\xfe\xde\x86\x77\x77\x28\x78"
+ "\x97\x64\x47\xc1\x4b\x67\x78\xd1\xbc\xa5\x24\xca\x8c\xdf\x10\x18"
+ "\xc8\x43\xf1\x1b\x66\x31\xf8\x6d\xa9\x4d\x68\xce\x2f\xa1\x4d\x1b"
+ "\x1a\x41\x0b\x41\x5e\x47\x88\xec\xa3\xc9\x79\x8c\x2e\xd9\x0b\xf8"
+ "\xb4\x79\x15\x59\x9c\xa5\x22\xe4\x75\x74\x53\xbb\xbf\x9b\x9c\x7e"
+ "\xc8\x46\xf8\x2c\x55\x9c\x05\x2f\x86\x4f\x52\xc5\x73\x64\x6b\x29"
+ "\xff\x3b\x25\xe2\x65\xcd\x24\xc8\x39\x86\xcb\x76\x52\x7b\x5d\x27"
+ "\x39\xeb\x62\xcb\x3a\xaf\x24\x5b\x1b\x9e\xd1\xe7\x56\xc6\x83\xe5"
+ "\x2d\x9c\xda\x68\x2f\x7f\x95\xcc\xce\xab\xc9\xd4\x56\xe4\xd1\x71"
+ "\x49\x73\x30\x2e\xeb\x4f\x90\xe5\x87\x0b\xc0\x87\x27\x18\xdf\x16"
+ "\xfb\x5b\xab\x42\xa6\x66\xdb\x0c\x6a\xb6\x1d\xa5\x16\xdb\x14\x6a"
+ "\x71\x4c\xa3\xcd\x27\x28\xad\x39\x34\x99\x5a\xcc\x77\x53\xcb\xd8"
+ "\x69\xe4\xed\xc6\x3d\xe4\xb7\xd9\x16\x20\xfb\x72\xe6\xa7\xb4\xe2"
+ "\x2d\x4f\x93\xc5\xa7\x60\x82\x76\x69\x65\xef\x96\x11\x31\xed\xf8"
+ "\x39\x51\x3b\x96\x7e\x89\x6c\xc0\xaf\x0b\xb8\x7c\x13\xb8\xbc\x39"
+ "\xd6\x46\x59\xc0\x79\x98\xb7\x36\x4c\xe6\x72\x4a\x19\x44\x8e\x33"
+ "\x34\xf0\x1e\x64\xb7\x7b\x27\xf4\x09\xcb\x6f\xcf\xea\x7c\xe8\x84"
+ "\x34\xc8\x7f\xda\x7a\x5d\x06\xba\x9d\xaf\x91\xb9\x67\x45\x7e\x52"
+ "\xfd\x56\xd1\x19\x74\x0d\x27\xe3\x1d\x64\xb1\x13\xef\xbb\x26\x64"
+ "\x50\xba\x37\x9c\x43\x07\x7b\xbb\x58\x1e\xbb\x47\x04\x28\x89\xe1"
+ "\x59\x1d\x90\x9d\xe5\x34\x04\xf8\xfc\xa9\x1e\xe9\x5f\x45\x3e\x94"
+ "\xcf\xf1\xd1\xd6\xbd\x5c\x5e\x5c\xf1\x68\x40\xbb\xe2\xd1\xb3\xda"
+ "\x0f\x1e\xed\x11\x3f\x78\xf4\x4c\xe4\x07\x8f\xfe\xcb\xb9\x92\x2c"
+ "\x91\x2b\x1e\xf5\xb7\x97\xca\x3e\x48\x6f\x2f\x45\x1f\x44\xc8\xb2"
+ "\xe6\x24\xa5\x3f\xfe\x1c\xfa\x3e\xfc\x09\xad\x59\x48\x36\x2d\xe5"
+ "\xbd\x0e\x6f\xf8\x43\x7a\xbc\x9c\x04\xee\xbb\x12\xb5\xaf\x27\xb5"
+ "\xa5\xd0\x90\x2d\xd4\xbb\xdf\x67\xfa\xad\x8d\xeb\xf5\xa7\xb4\x16"
+ "\xe2\x57\x84\x5f\x31\x7e\x25\x22\xb5\xa5\x04\xb4\x72\x8e\x58\x9b"
+ "\x44\x3b\x7b\x89\x26\x68\x94\x74\x82\x86\x1f\x01\xfe\xe9\x83\xd0"
+ "\x6d\x8c\xb6\xe1\xcf\x9e\xaf\x55\x52\x45\x30\x58\x4c\xac\x0b\x59"
+ "\xff\xb1\x3e\x0c\xba\x46\xd8\x51\x4f\xbe\x94\xdf\xad\xd0\x31\xa9"
+ "\x7f\xf6\x20\xbd\x2b\xb0\xba\x38\xc9\xbf\xba\xd8\xd4\x93\xfa\xe7"
+ "\x66\xe4\x99\x86\x3c\x35\x3a\x0d\xbb\x18\x16\x64\xcb\x3f\x3c\x4c"
+ "\xc9\x80\x59\xfa\xeb\x73\x1d\xe6\x1d\x5b\xc5\x51\xe4\x2b\xe9\x87"
+ "\x05\xd8\x80\x03\xfa\x8f\xa8\x34\xd2\x40\xeb\xce\x4d\xc8\xc7\xe5"
+ "\xbd\xa1\x1c\x1e\x53\x7c\xde\x92\x2e\xb2\x86\x29\x55\xf4\xa9\xfa"
+ "\x90\xa7\x8b\x75\xfa\xf0\x10\x0d\x0d\xba\x28\x8f\x61\x73\x39\x6f"
+ "\x77\x17\xa1\x5c\xb3\x70\x16\x9b\x90\x3e\x2b\x28\x8a\x93\xd6\x23"
+ "\xbd\x19\xe5\xf5\xba\xbb\x0c\x1c\xb9\x0e\xee\x6b\x89\x27\xf8\xa1"
+ "\xb9\x24\x44\xc3\x6b\x29\x19\xe5\x1e\x62\x78\x0c\x0b\x7c\xe0\x43"
+ "\x5b\x9b\x9b\x4b\xfc\xa4\x89\x18\x98\x3e\x05\xcf\x9a\x1d\x03\x0f"
+ "\xe9\x02\xf0\x98\xff\x5a\x50\x66\x78\x83\x84\xf7\xe0\xaf\x35\x86"
+ "\x17\x22\xb3\x5d\xe2\xfb\x1d\x86\x11\x64\xfd\x01\x98\x9e\xe5\x77"
+ "\x51\x37\x59\x1b\xfc\xce\xe2\xe4\x76\x8c\x9b\x5c\xfe\xad\x8a\xae"
+ "\x21\xa2\x27\x3f\x99\x79\x8e\xdf\x7b\xc3\x67\x38\xcf\x5a\xd1\x53"
+ "\x9c\x3c\xbc\x1b\xba\x08\x79\x50\xde\xc1\x78\x46\xf7\xe5\x83\xd3"
+ "\xbf\x33\x85\xbe\x33\xed\xde\x69\x53\x68\xe6\x9d\x53\xa7\x50\xd6"
+ "\x37\x6f\xc8\x9a\x74\xf3\xad\x37\xcb\x9b\x9b\x6f\xcd\xbe\x99\xf2"
+ "\xbe\xfb\xe0\x14\xca\x9b\x35\x85\x1e\xc2\x2f\xef\xa1\xe9\x0f\x4e"
+ "\x9b\xfe\xd0\x14\xca\xbf\xfb\x5e\x3c\x4d\x9d\x32\x31\xeb\x9e\x1b"
+ "\xf2\xa6\xde\x3b\x9d\x1e\x98\x73\x53\xd6\x4d\x37\xd1\x9d\xd3\x67"
+ "\x4c\xcc\xca\xd2\xaf\x13\xb3\x38\xcb\x23\xd9\xd3\x1f\xba\x21\x6f"
+ "\xc9\xe2\xb2\xc5\x37\xcc\xba\x77\x2a\xa7\x40\xbb\x45\xf1\x50\x66"
+ "\xe4\x9c\xc6\xb4\x0e\x88\xd3\xb9\xa4\x41\x77\xec\x04\x0f\xe0\xd7"
+ "\xed\xa9\x38\x06\x1d\x70\xe9\xb2\x9d\xdc\x77\x72\x0c\xb0\x36\x42"
+ "\xee\xcd\x41\x57\x7a\x39\x68\x78\x98\x69\x68\xbf\x86\xf5\x84\x6d"
+ "\x08\xde\xbd\xab\x8f\x35\x43\xf0\xbe\x2e\xf6\xfd\x65\xd0\xc1\xd6"
+ "\xff\x68\xb7\x13\x79\xf1\x03\xdd\x03\xd0\x85\xa0\xaf\x9f\x7a\x9c"
+ "\xf9\x43\xc0\xdf\x49\xa8\xa3\x13\xb2\x79\x18\x65\x3b\xa2\x64\xbe"
+ "\x13\xfd\x73\x98\xc7\x95\x53\x94\xfe\x76\x7b\x59\x0e\x71\x3f\x79"
+ "\xcb\x74\x18\x67\xfb\x61\xa4\x4a\x18\xe8\x7b\xc0\x39\xa2\xe0\x5c"
+ "\x6a\x8f\xd2\x0f\x3e\x86\xb3\x19\xef\x74\x58\x67\xdb\xa1\x27\xa0"
+ "\xc7\xaf\xd7\x9c\x99\x24\x52\x1b\x33\xb5\xbe\x4c\x39\x56\xa2\x5c"
+ "\x7e\x14\x5f\x07\x5a\x1c\xc8\xf7\xc3\xdc\x24\xf0\x41\x12\xc6\x5f"
+ "\xb4\x25\xbd\x08\xfc\x1d\x88\x6c\x68\x7d\x4e\x9c\xce\x67\x3b\x62"
+ "\xe8\x71\x1a\xf9\x27\xb4\xaf\x55\xdb\xd0\x5a\x2a\x82\x32\x8d\xe9"
+ "\xb6\x5f\xf0\x73\x2a\xf2\xf5\xf5\xa7\xbd\xc3\x69\xe0\x83\x64\x96"
+ "\x57\x21\x64\x3a\xc6\xcc\x91\x2b\xa1\xd3\x3a\x90\xb7\x94\xf3\x4e"
+ "\x08\xd3\x30\xe8\x1a\x9b\xdd\x99\x44\xc7\x68\x24\x69\xa9\xad\x4b"
+ "\xa2\xea\x03\x9c\x91\x3c\x48\x31\x3f\x9a\x83\xa7\x01\xa7\x47\xa6"
+ "\xc3\x8e\x19\xf9\x18\xe0\x2f\x65\x5d\xa9\xf4\xb7\x6d\x1c\xe7\xd3"
+ "\xc7\xe6\x81\x67\xc8\xba\x82\x63\x1b\xd7\x0c\x5a\xb2\xbd\xc0\xf6"
+ "\x5f\xd0\x35\x72\x8e\x8f\x86\xfb\xd5\xd8\x68\x1b\xcb\x79\x35\xe0"
+ "\x28\xd2\xc6\x74\x01\x6e\x99\x67\x55\x37\x1d\x2f\xe5\xb1\x76\x64"
+ "\xba\xe6\x2c\xa6\x58\x9c\x2e\x6d\x65\xfc\x59\x7f\x80\x16\x1f\x82"
+ "\x0f\x52\x00\x6f\x57\x2c\x1f\x8c\xf4\x00\xce\x73\xc0\xaf\x03\x6d"
+ "\x7a\xce\x47\x97\x1e\xd2\x7a\x8a\x51\x2f\x99\x20\x57\xd0\xe7\x03"
+ "\x30\xf4\xf2\x9d\xb1\xe5\x2f\x75\x73\x39\xe4\x1f\x12\xec\x91\xf9"
+ "\x37\x32\xcd\x75\xbe\x03\x5f\x5e\x96\x11\x9b\xff\x8a\x7f\x02\x97"
+ "\xbf\x46\xbd\x9f\x14\xf7\xbe\x0d\xef\xff\x53\x7f\x0f\xb9\xbf\x6c"
+ "\x4e\x1c\xdf\x96\xe2\xfd\x3f\x80\x6f\x00\x72\x0d\xdb\xe2\xd2\x5c"
+ "\xf0\x98\x3f\x2a\xff\xfa\xb8\xfc\x0d\xc8\xff\x5f\xcc\x37\x3c\xe6"
+ "\x70\xfe\x7a\x5d\x76\x90\xdf\x82\xfc\xfb\xe2\xea\x7f\x13\xf9\x03"
+ "\x51\xf8\x1d\x89\x7d\x9f\x51\x87\xf7\x9f\x31\xaf\xc3\x26\x1a\x82"
+ "\x3c\xc3\x58\x97\xb0\x1e\x6b\x2e\xe1\xfe\xca\x30\xc7\xe5\x1f\x8b"
+ "\x7c\x69\x3a\x8d\x4c\x3a\x8d\x72\xb9\x1f\x51\xc7\x51\x85\x43\x46"
+ "\x76\x5c\x99\x7c\x94\xc9\x00\x1d\x9f\x33\xf8\x32\x41\x99\x92\xb8"
+ "\x32\x1b\xb9\x1f\x85\xaa\xc7\x1c\xec\x1b\x28\xa3\xeb\xc8\x68\x18"
+ "\xdc\xb6\x4b\x00\x63\x6f\x5c\xdb\x27\xa1\xde\x31\x9b\x94\xde\xb9"
+ "\x04\x3c\x74\x13\xd2\xc6\x01\xe6\x32\x96\x01\xc8\x6a\xc0\xeb\x0f"
+ "\x91\x70\xe6\xa6\x29\xde\xbd\xfc\xd2\x11\x61\xe2\xfb\x1b\xf8\x9e"
+ "\x61\x8b\xe0\x0c\x5d\x26\x2f\xbf\x14\x57\xa4\x67\xb0\xfd\x96\xc4"
+ "\x3a\x58\x04\xef\xd7\x14\xcc\xcb\x6f\x11\x26\x32\xe1\x39\xa2\xd7"
+ "\x71\x25\x9e\x93\x80\xff\x12\x8c\x39\x24\x56\x20\xdf\x2a\x9a\x8a"
+ "\x74\x4e\x5b\xae\xe7\x1b\x78\x5e\x71\x7f\x58\xbd\x1f\xf5\x27\x55"
+ "\x67\x2e\xf3\xfb\x24\x3c\xff\x5e\xc1\x1b\xf5\x2e\xc3\xc7\xfd\x44"
+ "\xfd\x3e\x29\xc2\xb0\x4f\x1b\x32\x39\xea\x1d\x59\x0e\x72\x29\xeb"
+ "\x43\x79\xb1\x42\xbe\x63\x98\xaf\xe3\x7a\x2f\xae\x2f\xe2\xfa\x00"
+ "\xae\xcf\x3a\x3f\x23\x9b\x33\x22\xe5\x93\x9f\x1f\xc6\xf5\x41\x5c"
+ "\xa7\xe3\xfa\x10\xae\x13\x71\xbd\x0b\xd7\xe1\x2c\x27\x18\x57\x79"
+ "\xce\x15\xc0\x38\xab\x78\x8d\xe7\x04\xc1\x5c\xa6\xc9\x74\xb4\x5b"
+ "\xd2\x42\x53\xfa\xc6\xa2\xfa\xf5\x72\x39\x27\x04\x7f\x70\xda\x30"
+ "\xc5\x1f\x2a\x2d\x62\xe8\xa5\xd3\x03\x69\xba\xae\xd2\x65\x53\x4f"
+ "\x53\xf0\xf3\x00\xff\x30\xe3\x2a\x14\xac\x21\x8a\x07\x74\xf8\xaa"
+ "\x9c\x39\x41\x9d\x49\xd1\x75\xe2\xba\xcb\xe9\x10\x02\xd7\x1a\xee"
+ "\x33\x1f\x8d\xf2\x80\x7e\x66\x8d\xfb\x64\x09\xcd\x40\x1d\x25\xdc"
+ "\x07\x06\x4f\x09\xc5\xa3\x43\xf9\x5e\x5b\xf1\x0c\x74\x14\xde\xaf"
+ "\x78\x46\xd3\xf9\x50\xe6\x91\xef\x15\x2e\x73\xf5\x3a\x26\x71\xff"
+ "\xc8\xf7\x32\x3d\xe3\x70\x14\x5f\x8e\x0c\xba\xae\xc8\x8d\xe3\xcb"
+ "\x72\xf0\xe5\x8d\xcc\x7f\xdc\x67\x4c\x97\x11\xa5\xd2\x26\x30\xf5"
+ "\xc3\x3f\xad\xf8\x7b\xa7\x3e\x07\x56\xba\xe0\x8a\x9a\x38\x5d\x25"
+ "\xf9\x3f\x4e\x77\x74\x73\x7f\x25\x97\xb3\x4c\x5d\xe1\xf1\xd1\x5b"
+ "\x3e\x69\x7f\x6e\x68\x5d\xc1\xef\x03\xe0\x0f\xae\x37\xb9\x94\x75"
+ "\xc1\x15\x3e\xe3\xbd\x7c\x97\xd2\x91\xc3\xb2\x92\x5c\x22\xdf\x21"
+ "\x2d\x6d\xbf\xf1\xce\xa8\x27\xb9\x8c\xdf\xd9\x6c\x03\x70\x1b\x73"
+ "\x75\xb8\xc9\x89\xec\x47\xe1\x6e\xcc\xbe\x81\xc8\x74\x7d\x25\x0d"
+ "\xf1\x86\x8f\xd0\xec\xb0\x88\x7c\xbd\x92\x52\xbc\xe1\x3d\x74\x1d"
+ "\xd1\xa5\xde\x70\x23\x65\x12\x5d\xed\x0d\x6f\x81\x3d\xb3\x9e\xdf"
+ "\x1f\xbc\xae\x32\x29\x09\x57\xe7\xd7\xc8\x94\xe4\x0d\xd7\xd1\xb5"
+ "\x64\xc6\xb5\x8c\xee\x7e\x5e\x04\xbd\xe1\x22\xe4\x2b\xa1\xd9\x11"
+ "\x71\x7a\xda\x10\xf1\xb7\x82\x08\xa5\xcf\x78\x5e\x38\xbd\x61\xcc"
+ "\x2d\xc2\xad\x48\xd7\xc4\xec\xc8\x67\xf8\x05\x85\xe6\x6e\xcc\x9d"
+ "\x1d\x39\x2d\xa6\x3e\x7f\x10\xcf\x7f\x13\x53\x87\x38\x05\xfa\x49"
+ "\x78\xc3\x93\xa9\x3d\x10\x40\xfe\x49\x24\xaa\x1a\xb3\x1f\x3f\x6b"
+ "\xa2\x3e\xd8\x24\x5a\x55\x63\x2e\xda\x93\xdf\x87\xb6\x60\xbc\xfe"
+ "\x6e\xdf\x6a\x5c\x37\x34\x7e\x47\x3e\x5b\x1a\x8b\xd1\x96\xfc\x1b"
+ "\x2a\x31\xcf\x70\xa0\x1d\x11\xbf\x80\x1d\x63\xf6\x3a\x8e\xd2\x88"
+ "\xb5\x6c\xab\x4f\xc6\x5c\xed\xef\x84\x7e\xb0\xea\x70\xf3\x79\x8e"
+ "\x26\x52\x50\x6e\x43\xe3\x7c\x09\xc3\xdd\xe8\xb6\x26\x09\x3f\xf4"
+ "\xb6\x95\x69\xe1\x0d\x1f\xc5\xef\xef\xc4\x34\xf0\x86\x03\x80\x49"
+ "\x56\x94\x73\xf7\xa5\x34\x3a\xf0\xab\xc5\xef\x10\xf0\xf8\x8b\x70"
+ "\x65\xbc\x2b\x60\x3b\xa0\x7c\x17\x9e\x43\x3c\xc7\x94\xb4\x8c\xd0"
+ "\x30\xe4\xef\x02\xbf\x4c\x03\xdf\x01\xd7\x26\x9b\xac\x67\x43\xd3"
+ "\x15\x01\xc1\x6d\x68\x1a\xa5\xda\xd0\x74\xb9\x6a\x53\x53\xb6\x2e"
+ "\x47\x9c\x76\x2b\xee\xe7\x04\x39\x9f\xbb\x29\x5b\x58\x9a\x72\x43"
+ "\x90\x4d\xd0\xb5\x92\xe9\x08\xba\x56\x32\x2d\x45\x55\x53\xb6\xd7"
+ "\xb1\x11\xed\x68\xca\xed\x4b\x69\xca\x47\xb9\xa7\xfb\xa4\x3d\xd3"
+ "\xe4\x08\x28\x38\x2b\x00\x67\xae\x84\x63\x69\x72\x00\x96\x3b\xe2"
+ "\xb2\xd3\xec\x95\x22\x34\x3b\xbc\x36\x5c\xb0\x92\x92\xc7\x53\x65"
+ "\x12\xcf\x65\xbc\x8e\x12\xb4\xb3\x05\xd7\x69\x78\x4f\x97\xa1\xae"
+ "\x83\x80\xeb\xe0\xfa\x50\x8f\x1b\x30\x9f\x07\xac\x22\xc6\xaf\xd7"
+ "\x44\xe9\x78\xae\xed\x5d\x2d\xf1\xdb\x0f\xd8\x1d\x9a\xa5\xe9\x90"
+ "\xc1\x43\xcc\x3f\x8a\x6e\xcc\x37\xaf\x13\xf8\x2b\x7d\xb6\x43\x84"
+ "\xf1\x2e\xdd\xeb\xe0\xf4\x3a\x6a\x2f\x45\x1e\x07\xbf\x2f\xc3\xfd"
+ "\x4c\xdc\xaf\x27\xe6\x9f\x59\xa5\x81\xb5\x37\x56\x96\x26\x21\xff"
+ "\xc1\x82\xb0\x85\x1e\x2f\x35\x57\xb6\x97\x76\xe3\x5d\x37\x21\xcd"
+ "\xe9\x75\xd4\xc9\xb9\x17\xfa\x35\x1c\xb1\x1c\xc8\x8f\xb8\x9b\x76"
+ "\x8f\x08\x38\x85\xd7\x51\x86\xbc\xa5\x74\x5d\xa5\x25\x49\xe6\x77"
+ "\x14\xc9\xf6\x68\x9b\x2b\x89\xcb\xb4\x15\xef\x21\x9e\xc3\xa1\xed"
+ "\xfe\xb6\xee\xf5\xcc\xa3\x9a\xe6\x3e\x90\x09\xfe\xec\x6b\x2b\xde"
+ "\x42\x33\xbb\x2b\x87\x81\x1e\x49\x48\x8f\xb4\x75\xb7\x20\x6f\xab"
+ "\xe2\xd9\x95\x61\x6b\x5b\xf1\x7a\x0a\x5b\x9a\x6a\xc3\xee\x03\xd9"
+ "\xb3\x57\xf6\x89\x99\xc5\xe2\xe0\x63\xdd\x95\xe0\xd3\x3d\x34\xf3"
+ "\x64\x38\xb9\xbd\x14\x3c\xbf\x32\x88\xf4\xb0\xe4\xff\x99\x27\x7b"
+ "\xc4\x2c\x58\x46\xb3\x57\xfe\x4d\xb4\x15\x17\xd1\xe3\x01\x1a\x71"
+ "\xc9\x5a\xa1\xb1\x5c\xb4\x76\xee\xa1\x4b\x8e\x76\x11\xcb\xc4\x8c"
+ "\x79\x9a\x98\x79\xf2\xb4\x78\xfc\x39\xcc\x5b\x1d\x93\x81\x23\xe8"
+ "\x12\xd8\xc2\xf4\xde\xdf\x56\xdc\x08\x1c\x20\x37\x8e\x49\x48\x7b"
+ "\x1d\x79\x3d\xd6\xc7\x4e\xa6\x53\x6b\xe7\x16\x0a\xa7\x34\xd5\x46"
+ "\xaa\x9a\x76\x6b\x29\x4d\x87\xd0\x47\x1d\x5a\xd5\x81\xcc\x48\xca"
+ "\x81\xfc\x70\xd5\x81\x6c\xb1\xe1\xc0\x6e\xf4\x53\x0a\xf7\x79\xaf"
+ "\x8b\xec\x78\xfe\x51\xaf\xe4\xa3\x03\xe8\xa7\x03\x1d\xb0\x9f\x05"
+ "\xd3\x52\x54\x1d\xd8\xaf\x64\xe0\x40\x47\x5f\xca\x81\x43\xc8\xd7"
+ "\xa1\xf8\xf0\x40\x17\xf3\x65\x04\xfa\x0e\x69\xff\x88\xa0\x2c\xde"
+ "\x87\xfa\x52\x0e\x5a\xf0\xb3\x89\x0d\x07\x8b\x01\xff\x52\x86\xaf"
+ "\xb9\x0f\x3a\x84\xe5\xa0\xfb\x46\x22\x4b\x7b\xa0\x93\x78\xed\x42"
+ "\xce\xf5\x1d\x9f\x00\x67\xe6\xa9\x30\xae\x61\xc8\xc6\xc1\x62\xed"
+ "\xf6\x1a\x29\x83\x22\xe5\xa0\x7b\x76\xe4\x0e\xf1\xf8\x59\x96\x27"
+ "\xa4\x57\x01\x46\xea\xc1\xdd\x21\xc9\xaf\x07\xdf\x60\x1c\xfa\x56"
+ "\x67\x32\x1c\x33\xde\xc3\x86\xf6\x5c\x1f\x10\x99\xa4\xb9\x3d\x99"
+ "\x9a\xc5\xe3\x16\x6e\x0f\xe4\xc1\x93\x1b\x71\x7b\xf2\xef\x1f\x22"
+ "\xfc\xac\xbf\xfa\xbe\x47\xa8\x67\x1f\x85\x6f\x17\xa2\xbd\x74\x3d"
+ "\xee\x9b\x48\xca\xb0\xe3\x88\xe4\xab\xb6\xee\x23\xa0\xe5\x9b\x48"
+ "\x6f\x91\x7a\x8c\x69\x2f\x52\x3c\xb9\x8f\x9f\x1d\x5d\xc9\xbc\xf0"
+ "\x78\x29\x55\x8a\x2a\x4f\xb6\x56\xe5\xc9\x8c\x54\x79\xf2\xb5\x14"
+ "\xd4\x93\xfa\xde\x1f\x42\x52\xae\xdf\x03\x5f\xef\x43\x99\x26\xc9"
+ "\x4f\xa2\xea\xbd\x43\x83\xe9\x52\xd6\x69\xac\xc3\x66\x87\x43\xcc"
+ "\x5f\xff\x60\xfd\xc7\xba\x0c\xba\xa0\xc0\xd0\x65\xac\xc7\x78\x8e"
+ "\xc5\xba\x4c\xd3\x75\x99\xa6\xeb\x32\x2d\x4a\x97\x81\xfe\x66\xf0"
+ "\x7b\x48\xea\x2f\xd0\x93\x75\xd7\xec\x48\x96\x88\xd7\x5d\x5c\x26"
+ "\x02\xbd\xa4\x41\x2f\xe1\x57\xab\x29\xbd\xd4\xa1\xeb\x25\x93\xa1"
+ "\x97\x00\x8f\xf5\xb6\x96\x48\x2f\x69\xba\x5e\x8a\xe8\x7a\x49\xd3"
+ "\xf5\x92\x76\x21\xbd\x64\x69\x42\x7b\x9b\x72\x79\x3d\x15\x72\x53"
+ "\xc9\xfd\x3c\x7b\xa5\x56\x09\x7e\x04\x1d\x9b\x72\x35\xa5\x8f\x8a"
+ "\x31\xbf\x32\xb1\x3e\x8a\xa0\xbc\x66\xe8\xa3\xa0\xd4\x1b\x6e\xd6"
+ "\x49\xdc\x77\x05\x61\x3b\xb1\x2e\x92\x7a\x27\x7c\x75\x98\xf5\x0e"
+ "\xe8\x77\x47\xbc\xde\x01\xbc\x5a\xdc\xa7\xeb\xf5\x1f\xc2\xec\x3a"
+ "\x6c\x0d\x3b\xc5\x6c\x47\x40\xd2\xa8\xc0\x51\x56\xc9\x3c\x07\x9d"
+ "\xd0\x21\xda\x2b\x09\x3a\x69\x37\x70\x04\x9f\x47\x08\xb2\x9b\x19"
+ "\x86\xbe\x80\x1c\x64\x47\x20\xcb\x33\xbb\x7b\xbc\xb3\x4a\x69\xd8"
+ "\xe3\x81\xcc\xf4\x99\x27\x85\x1f\xb4\xf1\x3d\x5e\x5a\x49\xb3\x02"
+ "\x99\xd0\x0f\x4d\x34\xa3\x53\x68\x33\x0a\x7d\x76\xc8\x49\xf6\xcc"
+ "\x85\x1e\xeb\xe3\xcf\xa5\xd3\xac\xb3\xc2\x03\xfd\xf1\xc1\xcc\x93"
+ "\xe9\xd6\xb9\x9d\xf4\x95\x19\xf3\x84\x16\x81\x2c\xa2\xad\xbb\xd1"
+ "\xe6\xfd\xc0\xfb\x10\xe4\xb2\x03\x72\x98\x19\x86\x3c\x46\xcb\x22"
+ "\xe4\xea\x47\xb8\xb7\xcb\x76\xb8\x0f\x74\x40\x16\xf7\x6b\x72\xbc"
+ "\xeb\x94\x73\x5a\xd4\xd3\x21\xe5\x27\x05\xe9\x55\x4a\x1e\x35\x55"
+ "\xae\x4b\x63\xda\x99\x94\x3c\x72\x9f\xe0\x7d\x08\x72\x63\xc1\x2f"
+ "\x46\x1e\x59\xce\x04\xcb\x59\xe9\xd9\x01\x39\x7b\x4e\x97\xb3\x14"
+ "\x25\x67\x11\xd8\x2a\x91\xd5\x4a\xd6\x18\x3e\xcf\x7b\xfb\x65\x2d"
+ "\xd5\x93\x89\xfb\x24\xc5\x37\x52\xde\x58\xd6\xa0\x63\x3d\xb9\x90"
+ "\x3f\xc0\x13\x7e\x96\x03\xf0\xe5\x5f\x79\x3c\x9c\x55\x2a\xfe\x5a"
+ "\x10\x19\x8d\x3e\xf7\xe4\x43\xdf\xfd\x6d\x66\xb7\xf8\x2b\x74\x5d"
+ "\x03\x64\x29\x13\x32\x94\x0d\x59\xca\x85\x4c\xb1\x2c\x1d\x8a\xac"
+ "\x66\x98\xef\x1d\xea\x87\x21\xc7\xd3\x58\x59\x1a\x6c\xdd\x35\xe8"
+ "\xb2\x77\xfb\xa8\xa9\x95\x6d\x1a\xdc\x87\x7c\x74\xa0\x41\xdd\x5f"
+ "\x6d\xf6\x51\xc3\x51\x69\xeb\x40\xfe\x4a\x2b\xe8\xf2\x13\x74\xf5"
+ "\x7e\xf0\x3a\xe1\x3e\x0d\xf7\x8d\xb3\xaf\x3b\x28\xb4\x8d\x66\x1b"
+ "\xea\x0d\xb2\x0c\x0a\xd7\x24\xb6\xe1\x72\xc0\x83\x16\x11\xcc\x4c"
+ "\x83\xed\xa8\x89\x3e\x1b\xaf\xed\x59\xf1\x3c\x02\xed\x1f\x8b\xeb"
+ "\xc8\x1d\xe7\x28\x03\x3f\xdb\x0e\x97\x56\xc9\xf6\x15\xee\xb3\xc4"
+ "\x0a\x5b\xea\xe6\xe5\x34\xde\x1a\x20\x4b\xbd\x4b\xcb\xb7\xae\x4d"
+ "\xe7\x35\xae\x0c\xbe\x17\xae\xd7\xa9\xfe\x1c\x99\x79\x1d\x42\x1b"
+ "\x8e\xfa\x1c\x56\x21\x96\x66\x52\xfd\x12\xe8\x06\x17\xd9\xea\x5d"
+ "\x62\x6f\x24\x28\xe5\x31\xdb\xc0\x85\x71\x03\x9e\x57\x02\xcf\xd6"
+ "\x6f\xaf\xcc\xa1\xdf\x39\x28\xe1\xda\x30\xda\xd9\xdf\xfe\xc4\xef"
+ "\xaf\x49\x33\x68\x32\xc8\xfb\xf1\x06\x9d\x06\x59\x47\x34\xf3\x38"
+ "\x1e\x59\x2e\xfc\xd5\x4f\x13\xd3\xc2\xe6\x0c\x8b\xff\x04\x1d\x2b"
+ "\x2b\x22\x74\xe5\xec\x95\x57\x09\x6f\xb7\xf0\x78\x1d\x27\xa9\x1e"
+ "\xef\x2b\xca\x31\x76\xa6\xb4\xfa\x44\x55\xeb\xd1\x9e\xe5\x22\xcc"
+ "\x6b\x47\xa8\xa3\xc6\x47\x93\xb3\x54\x5f\x34\xed\x97\x73\x56\x4b"
+ "\xeb\x51\xc0\xba\x94\x61\xb5\xa1\x7c\xa4\xaa\xb5\x13\xf9\xf6\xfb"
+ "\xe8\x8f\xfb\x64\x3e\x4b\xd3\xfe\xd2\x55\xf4\xe5\x13\x74\x8d\x5f"
+ "\xce\x2d\xdc\xad\x01\xd6\x05\x48\x4b\x47\x5a\x18\xf0\x43\xc8\xdf"
+ "\xe5\xa3\x5f\xeb\x6b\x12\xd7\x84\x8d\x7c\xb8\x97\x76\x7c\x0c\xff"
+ "\x24\xc9\xc5\x7b\xf4\x97\x7d\x60\x73\x2c\x49\x5f\xce\x37\xfe\xd2"
+ "\xf1\xcb\x49\xfc\x7a\x40\x97\x1f\xc8\xee\x81\x8e\x76\xae\xa1\x31"
+ "\xe8\x1f\xe0\xf7\xd5\xe7\x30\x4f\x39\x2e\x5c\x5f\xb5\xfc\x70\x55"
+ "\x08\x73\x89\xaf\x96\xfb\x68\xe3\xe4\xc1\xe8\x89\xf6\x77\x68\xe7"
+ "\x44\x57\xf5\xf2\x7e\x5a\x7e\x0a\xdd\x28\xf8\x9e\x75\x51\x3d\xd2"
+ "\x99\x6e\x80\xd3\x62\xd0\x6c\xf0\x7e\x69\xf5\xab\x39\xee\xd8\xb1"
+ "\xc2\x25\xc8\xf3\x15\xde\xd3\x1a\x3b\x4e\xd1\xe1\xc0\xa1\x1e\xe8"
+ "\x11\x5e\x97\xc6\xdc\x2f\xb0\xd4\x26\x40\xaf\xb1\xb0\xff\xc7\x37"
+ "\xe8\xeb\x5e\x01\x6f\x78\x3a\xeb\x96\x84\x63\x16\xef\xc1\x0d\xc0"
+ "\x1f\x37\xad\x7d\x0c\xf4\x90\xd4\x4d\x1d\xeb\x2b\x14\xde\x21\x86"
+ "\xeb\xa9\x38\x43\x9d\x78\xbf\x34\x20\xba\x84\xbb\xc3\xc1\x73\x0d"
+ "\xcf\xf2\x5e\x4e\x9b\x0e\xde\x16\x9e\x25\x8c\xd3\xb8\xe9\x9e\xaf"
+ "\xf4\xd2\x71\x07\x25\xd7\xf7\xaf\x37\x8d\xcb\xe2\xf5\x25\xb5\xae"
+ "\x36\x76\xaf\x8f\x6e\x2c\x36\xf0\x62\x3b\x04\xf4\x65\x5a\xef\x67"
+ "\x7b\x84\xf7\x3a\x96\x96\x8b\x10\xdb\x25\xc8\x7b\xd4\x68\x03\xb7"
+ "\x4f\x6f\x97\x3f\xba\x5d\xbc\x27\x66\x2d\x57\x34\x58\xba\x92\x2c"
+ "\x76\x45\x6b\x0b\xb7\x97\xdb\xc2\x6d\x96\x6d\x91\x3a\x96\xe7\x13"
+ "\xb7\x60\xce\x26\xd3\x3b\x82\xae\x71\x93\x7d\x74\x83\x59\xf1\xd4"
+ "\xd8\xbd\xf1\x7c\xd4\xdf\x8f\x96\x26\x37\xe6\xb8\x5f\x71\x6a\xe2"
+ "\x18\x60\xfe\x5e\xad\xd5\x8d\xfb\xbd\xc6\xb6\x78\x88\xf9\xf7\xfd"
+ "\x00\x8f\xc5\xde\x72\xd6\xb7\x32\xef\x65\xc8\xdb\x89\x3c\xef\xe8"
+ "\x79\xdf\x51\x7b\x84\xf2\x3a\x8c\xaf\x18\xc3\x9e\x07\x1e\x87\xfd"
+ "\x72\xac\xef\xc8\x31\x9e\x05\x9e\x71\x75\x8b\xaa\xf7\x03\x89\x71"
+ "\xf1\xb8\x79\x2c\x8b\x9c\x13\xdd\xa8\xe7\x0a\xe6\x29\xe7\x4a\xfa"
+ "\x12\xf8\xf2\xd3\x8a\x35\x74\x19\xf3\x93\x48\x69\x0d\x2b\xba\x5f"
+ "\x3b\x46\xb8\x60\xf7\x42\xa3\x96\x2e\xa7\x2f\x43\x8e\x02\x27\xe8"
+ "\xda\x89\x05\xe5\x76\xe0\x4a\x54\x7d\x8a\x48\xea\xa0\x94\xd6\x10"
+ "\xcf\x71\xea\x4f\xf1\x5a\xd2\xb5\x79\x06\x2f\xe2\x7e\xee\x85\xf4"
+ "\x05\xc6\x19\x8b\x5a\xdb\xb8\xf6\xf7\xbc\xaf\x71\x8c\xae\xdd\xc7"
+ "\xed\x55\x7b\xaa\xd7\xbe\x2e\xce\x89\xb9\x42\x8d\x69\xd0\xd5\xd7"
+ "\x42\x4f\x1c\xb4\xc8\x9f\x8b\x0a\xd5\xf3\x81\x10\xf2\x6d\x11\xe7"
+ "\x34\xe2\x74\xa4\xed\x11\xae\x24\x96\x89\x46\xd4\xdd\xe1\xa3\x3b"
+ "\x72\x55\xdf\x5c\xbb\x8b\x61\x25\xc6\xe1\x40\x08\x7d\x4b\xcc\x9b"
+ "\xc7\xe9\x6b\x77\xda\x2b\x78\xad\xf4\x6b\x97\x4b\xb9\x00\xac\x7a"
+ "\x93\xd2\xdb\xb0\x51\x2d\x3b\x5d\x5a\x31\x74\x74\xb1\xb6\xe1\xc3"
+ "\x42\x79\xaf\xbf\x13\xfa\x38\x9a\x18\x7e\xc7\x7a\xcf\x68\xe6\xf1"
+ "\xaf\xd5\x29\x38\x1d\x0e\xcf\xe8\x13\xfc\xbc\x83\x9f\x03\x96\x8f"
+ "\x0a\xbd\xb5\x39\xa8\xff\x04\xd7\x5b\xa7\xe6\xfc\x5f\xdb\xd1\x83"
+ "\x3a\x82\xae\xaf\xd5\xf9\x68\x42\x99\xda\xe3\xf9\xa8\x70\xb0\xbd"
+ "\x6b\x96\x1d\x96\x39\x25\xd3\xd7\x3d\xd6\xd6\x20\xe5\xaf\xab\xc7"
+ "\x72\xd0\xa2\xeb\x0d\x5e\x07\x4a\x3b\x46\xd7\xcd\x6d\xb3\x49\xfe"
+ "\x36\x09\xd3\xd7\xc2\x3f\xd3\xfc\x26\xde\x87\x53\xea\xeb\xba\xb9"
+ "\xe7\xff\x32\xb3\xf0\x83\x96\xcb\x9c\xa1\x3f\xe7\xe3\x57\x82\x5f"
+ "\x23\x9e\x67\x48\xda\x6d\x2f\x4a\xf2\xe1\x5d\x0f\xec\x7a\x7e\xf6"
+ "\x51\x66\xb6\xd8\x3e\xd6\x04\xbb\x44\xde\xd7\x7f\x89\xd7\x12\x32"
+ "\x8b\xd0\x07\xdd\xaa\x2f\xae\x93\xeb\x29\x90\x47\xa6\xbb\x70\xd6"
+ "\x8a\x50\x4b\x45\x00\x78\x67\x6e\x69\xa9\x0d\x90\xfd\x5a\x6e\x7f"
+ "\x66\x2d\xb7\x29\x00\xfa\xf3\x75\x69\xad\xf0\x37\xd7\x85\x89\xf7"
+ "\x03\x01\x0b\xf2\xbf\xb0\x45\xad\x4b\x74\x34\x30\x3c\x9d\x27\x84"
+ "\xd1\x7e\xa5\xd3\x3e\x2a\xe4\xbe\x04\xac\xbf\xa3\xed\xd6\x53\x74"
+ "\xdd\x38\x91\xfa\x61\x61\x73\x31\xd1\x0e\xe8\x11\x8c\x35\x72\x6f"
+ "\xa2\x5e\xfa\x23\x5c\x87\xf1\xff\x6b\x33\x8c\xfd\xab\x4d\x78\xbf"
+ "\x19\xef\x30\xf6\xf8\xdb\x8a\x43\xc4\xb0\x22\xdc\x3e\x94\x6f\xd2"
+ "\xfc\x66\x8c\xd5\xe8\xf3\x8f\x0a\x2b\x4a\xa1\x67\xfa\xf5\x56\x66"
+ "\xeb\x9a\x93\x22\x64\xb4\xaf\xb9\x81\x65\xe1\x3a\xf0\xff\x33\xbe"
+ "\x41\xf9\xbf\x1f\xe7\xeb\x57\x36\x8f\x55\x7d\xa6\x81\x2e\xb1\x7d"
+ "\x76\xbd\x43\xf5\xd7\x75\x7b\x62\xfb\xeb\x7a\x8c\xf2\xd7\x05\x70"
+ "\x4d\xc3\x6f\x8c\x7a\x8e\xfe\x5d\xe7\x8b\x7a\x1e\x8f\x5f\x11\xf0"
+ "\xc1\xf8\x7f\x6d\xb1\xea\x07\x4e\x47\x3b\x98\x47\xfe\x45\x16\xad"
+ "\x2f\x9f\x78\x7f\x98\xd3\x99\x9f\x39\x5d\x83\x3d\x83\x67\xc2\xfb"
+ "\x74\x96\xd5\x6a\x8d\x62\xde\x7b\xd7\x83\xe7\x56\xf5\x32\xfe\x0f"
+ "\x30\x2c\xeb\x5a\xb7\x9b\xf9\x14\x79\x40\x23\xb7\x3b\xe8\xba\x7e"
+ "\xae\x41\x57\xa4\x4d\xe3\xf7\xcc\x93\x48\x2f\xf3\x51\x89\x5d\xee"
+ "\xff\x62\x4e\x98\xd8\xd6\xb8\xbe\xb6\xdf\x26\xb3\x1c\x2c\x66\x7d"
+ "\xd4\x4d\x5f\xdf\x05\x9d\x85\xbe\xfd\x30\x5f\x8d\x35\x5f\x7f\x9d"
+ "\x9f\xa1\x2b\x3f\xc5\x7d\x43\x1b\x74\x52\xef\x86\xd6\xc2\x3e\x13"
+ "\x0d\xeb\x35\x51\x4e\x78\xb3\x79\x72\x38\xb5\xa5\xc4\xdb\xb5\x8f"
+ "\xda\xc3\x3f\x27\xfb\xd3\x12\xc6\xab\x5e\xf0\x80\x73\xa5\x88\xbc"
+ "\xd5\xbb\xdb\xec\x0d\x9f\xf6\x60\x6c\xbe\xea\x04\x7d\x5d\xd2\xe3"
+ "\x85\x63\x18\xf5\x1f\x97\xb0\x15\x7d\xd2\xcc\xb6\xcd\x0b\x44\x78"
+ "\xf3\x71\x11\x80\x7d\x97\xba\xa9\x97\xc6\x6f\x5b\x45\x59\x75\xbd"
+ "\x34\x76\x67\x2f\x65\x8a\x7f\x64\x9a\xea\x60\xb7\x3d\x7e\x36\x9d"
+ "\xa0\x13\xf2\x47\x94\x92\x65\xe7\x2a\x92\x3c\x12\xd9\x04\xfb\x2d"
+ "\x0c\xfb\xed\x74\x26\xeb\xc6\x7e\xfb\xad\x4f\xda\xc5\x6d\x45\x8a"
+ "\x8f\xda\x8a\x86\x17\x53\x52\x5a\x21\xa5\x03\x3f\xe7\x29\xba\xfe"
+ "\xe3\xb4\x4e\xd8\x8e\x68\xb3\x4f\x6f\x2f\x68\xd7\x6d\x2d\xa6\x61"
+ "\xb2\xad\xd0\xd7\xa2\xea\xc3\xfc\x41\xc7\x61\x13\xf3\x54\x80\xe5"
+ "\x86\xdb\xf0\x2f\xde\xa3\xde\x37\x3a\x64\x5e\x5a\x27\x42\x9c\x5e"
+ "\x76\xb5\x80\xce\xfc\x7a\x07\xd7\xbd\x17\xe9\x41\xd7\x78\xf2\x99"
+ "\xf6\x8f\x1f\x8c\x47\x31\x37\xd2\xf5\xca\xf8\xb5\xc2\x54\xc9\x73"
+ "\xf0\xdd\x6b\xc2\xb0\xbd\x4f\xb1\xcc\x8e\xaf\x9c\x5d\x22\xc2\xf6"
+ "\x45\xec\x2f\x30\xbe\x94\x7d\x19\x78\x0f\xf3\x67\xb0\x6d\x3e\xcf"
+ "\x7f\x81\xc7\x0b\x9e\x2b\x58\x4b\x00\x73\xc3\xc1\xdd\xc2\x99\x49"
+ "\x5f\xd4\x7f\x02\xed\x4c\x7b\x79\x14\xfb\xf5\x8c\x6f\xf4\xd1\xcc"
+ "\x0c\xc6\x5d\xfa\xee\x40\x77\xc2\xde\xba\x0c\x78\x85\x02\xa0\x03"
+ "\xde\x63\xfc\xbf\xb7\x4b\xdf\x6f\xf6\xf3\x5e\x2f\xd2\x30\xfe\xdf"
+ "\x2f\xdb\x5b\x76\x35\xd9\xca\xec\x22\xe1\x5e\x3b\xdb\x4c\xbc\x07"
+ "\x0e\x78\x57\x04\x5d\x37\x8c\x35\xe0\x60\x9c\xfa\x49\x8f\xe9\xdb"
+ "\xdf\x46\x5a\xb6\x01\x07\x79\x2e\xc7\x73\x6e\x7f\x1e\x55\x26\x3f"
+ "\xaa\xcc\xb7\x7b\x4c\xd7\xff\x04\x69\x25\x71\x65\xca\xe3\xca\x6c"
+ "\x8c\x2a\x53\xa9\xd7\xd3\x10\x57\x66\x6f\x5c\x19\x4f\x02\xdc\x8e"
+ "\xc4\x95\xe9\x8c\x2b\x13\x38\x1f\xb7\x1b\x2d\xb1\x65\x6e\xb4\xc5"
+ "\x96\xb9\x31\x33\x8a\x96\xec\xc7\x93\x85\xb4\xc9\x71\x65\x66\xc4"
+ "\x95\x99\x6b\x3c\x0f\x42\xe3\xb4\xa5\x3b\xc8\x06\xde\x64\x5f\x31"
+ "\xff\xcb\xe8\x9f\x9e\x1f\x3c\x13\xd4\xcb\xd6\x9e\xdf\xae\x1b\xf7"
+ "\xc4\xd5\xd7\x18\x57\x5f\x6b\x82\x76\xf9\xe2\xca\xf8\x63\xcb\x4c"
+ "\xa0\xa8\x32\x0d\xaa\x9e\x09\x19\xb1\x65\x26\x8c\x8d\x2b\x33\xe9"
+ "\x7c\xbe\x9a\x90\x1b\x57\x26\x3f\xae\x4c\xf1\xe7\xd0\x82\xc7\x71"
+ "\xe5\x47\x37\x8a\x6d\xe5\xbb\x60\x23\x4c\xf8\x13\xfb\x62\xf0\xbe"
+ "\xeb\x0f\x7b\x43\x43\x78\x3f\x90\xc7\xab\x66\x47\x08\x63\xcb\x04"
+ "\xcc\x7f\x6e\xc9\x32\xc6\x2c\xf6\x53\x61\x99\x56\x36\xf6\x84\xda"
+ "\xc1\x6c\x51\xe9\xeb\xa6\xfb\xcb\x71\x5d\xcd\x63\x78\x9c\xca\x32"
+ "\xf7\xdb\xc4\xca\xe7\x8d\x14\x9c\xac\x87\x8d\x7d\xdf\x7a\xe5\xff"
+ "\x92\xc4\x36\x79\xb3\x43\x96\xc9\x8e\xb2\xa3\xb9\xfe\xc0\xbe\x55"
+ "\x21\x73\x2c\x1e\x59\xb6\x0b\xe0\x91\x06\xdb\xa8\xb8\x1d\x56\x11"
+ "\xef\xe7\xb7\xd5\xc1\x06\x82\xdd\xcf\xb8\x1d\xa3\xac\x06\x69\x93"
+ "\x2d\xea\x25\xbe\xf7\x96\xdf\x26\xf7\xfb\x95\x4d\x9a\xd5\xd1\x82"
+ "\xfa\xd9\x76\x6f\x29\x3d\xc3\x3e\x59\x18\x7f\xd9\x76\x9b\x38\xa4"
+ "\xb9\xdc\xcf\x78\x1d\x36\xfc\x62\x7c\x34\xd1\x2c\x6d\x0d\x77\x47"
+ "\x21\xfb\x22\xb0\xcf\x4e\x73\x20\x9b\xf3\x80\xff\x27\x1c\x35\xda"
+ "\x8b\xb1\x1e\x3c\x91\xb5\xe7\x42\x34\x53\x7d\x38\x71\x7c\x2c\x4f"
+ "\x0e\x01\xaf\x4c\xcc\x89\xed\xf7\x89\x79\xb1\xfd\x3e\xb1\x30\x96"
+ "\x27\x4d\xe0\xc9\x89\x65\x71\x65\xd6\xc7\x95\xd9\x12\x55\xa6\x46"
+ "\xaf\x67\x77\x5c\x99\xfd\x71\x65\x0e\x45\x3d\xa3\x8d\x13\x3b\xfa"
+ "\xe7\x3e\xd2\xe7\x6a\x62\x57\xd4\xb3\x69\x8b\xd4\x9f\x13\xc3\x46"
+ "\x1a\xaf\x1d\xed\xdc\xaa\x7c\x7e\x14\xbc\x9b\x6c\x71\xf2\x8e\xfc"
+ "\x37\x8d\x8f\xc5\xe1\xa6\xc9\xb1\x38\xdc\xd4\x2f\xff\xba\xaf\xc0"
+ "\x7b\xc7\xe9\xe6\xb1\xba\xaf\x40\x37\xc6\xec\xd9\xfc\x0c\x58\xb5"
+ "\xc8\x0f\x3a\xdc\x54\x1e\x07\x6f\x63\x1c\xbc\xba\xa8\xe7\x74\x3c"
+ "\xef\x89\x6a\x43\x7a\xb2\x8d\x92\xc0\x2f\xb0\xdf\x6e\x6a\x31\xd2"
+ "\x79\x4e\x09\x7c\xbb\x9c\x72\xac\xc9\x61\x5f\xb6\x91\xc7\xe8\xa6"
+ "\xb7\x79\xfe\xa9\xc3\x8c\x96\x7f\x52\xed\xba\xd9\x1c\x8b\xc7\xcd"
+ "\x19\xb1\x78\xdc\x3c\x36\xaa\x5d\x01\xeb\x5a\x7a\xc0\x1a\x7e\xf0"
+ "\x61\xb6\x7d\xd8\x7f\x53\xfa\x94\xad\x81\xcd\x76\x96\xd7\xdf\x43"
+ "\x74\xbc\x8c\x92\xbd\x8e\x2e\xcc\xe5\xda\x06\xb5\xd9\x7b\x52\x3b"
+ "\x4a\x95\x2f\x17\xd9\x01\x7f\xbd\xc1\x8f\xda\x86\x8e\x52\xad\xea"
+ "\xc8\x64\xa4\x41\xff\x4d\x4c\x57\x76\xee\x07\x6e\xe1\xcc\xaf\x05"
+ "\x3d\x31\x2f\x9a\xf4\xbc\x3e\x8f\x58\xcf\x3e\x69\xec\x37\x8b\x31"
+ "\x3e\x4d\xed\xfb\xdf\xdc\x1a\xc5\xd7\x01\xfb\xaa\x3b\xc4\x31\x9a"
+ "\xf4\x22\xdb\x00\x2c\xa3\xec\xdb\xd6\x1c\xf6\x13\xcf\xbd\xbd\xe1"
+ "\x13\xd2\x76\xc3\xfb\x1a\x55\x76\x92\x25\xaa\xac\x5f\x9f\x1b\x77"
+ "\xf1\xbb\x09\x61\x32\x37\x07\xfc\x04\x38\x19\xca\xde\x9b\xf4\x62"
+ "\x33\xe4\x15\x65\x26\x1b\x65\x78\x1e\x2d\xf7\x90\xcb\xc8\x7c\x63"
+ "\x39\x99\x3d\xab\x8e\x49\xd8\x86\x9f\x08\x6c\xe9\x6e\x6f\x79\x17"
+ "\x79\x03\x1d\xbc\xd6\x65\x56\x3e\x41\x93\x6a\x92\x43\x64\xe9\xa9"
+ "\xea\x80\x8c\x4c\xaa\x89\x54\x75\x14\x03\xb7\x4a\x1f\xdd\xbc\x8f"
+ "\xf5\x4d\x34\xed\xa6\x4f\xcf\x7b\x70\xf6\xcc\x1b\xbe\xfb\xe0\xbd"
+ "\x73\xa6\xdf\x66\x9f\xb3\xf0\xd9\xf9\x45\x37\x2c\x5e\x56\x66\x5f"
+ "\xb1\x64\x61\xd9\xc2\x45\x4f\xd9\xb3\x1c\xe3\x1c\xf6\x79\x65\xea"
+ "\x9a\x59\x32\x6f\x69\xd9\x14\xbe\x1d\x6f\x2f\x5d\x32\x7f\xb9\xbc"
+ "\xbd\x2e\x95\x62\x81\x2c\x2c\x9b\xbf\xc4\x3e\xae\x68\xbc\xfd\xee"
+ "\x79\x0b\x4b\x96\x2d\x99\x9f\x10\xd6\x6d\xf6\x25\xf3\x97\xcc\x9f"
+ "\x57\x64\x9f\x62\xcf\x62\xc8\xd1\xe0\xa2\xfa\x33\xcb\x18\xc7\x78"
+ "\xfc\xaa\x76\x89\xc3\xfa\x78\xe6\x53\xfc\x73\x4b\xd1\xf9\x63\xd9"
+ "\x2d\x8e\x58\x9e\xbb\xc5\x1d\xcb\x73\xb7\xd4\x9e\x3f\x96\xdd\x12"
+ "\x37\xfe\xdd\x12\x37\xfe\xdd\xd2\x7a\xfe\x58\x76\x4b\xdc\xf8\x77"
+ "\x4b\xdc\xf8\xf7\x8d\xfe\xf1\x0f\xbc\xe4\x5b\x27\xf5\xc2\x37\xe2"
+ "\xc6\xbf\x6f\xc4\x8d\x7f\xdf\x98\x14\xf7\x3c\x2d\xea\xf9\x32\x3c"
+ "\xcf\x89\x1e\x1f\xf1\x5c\x64\xc8\xe7\x80\x7e\xf9\x86\xc3\xc8\xc3"
+ "\xba\x1e\xba\xb9\x53\xcf\x5b\x13\x95\xb7\x4b\xcf\xbb\xab\x5f\xfe"
+ "\x78\xef\x1b\xe9\x6a\xbe\x7e\x6b\x0a\xeb\x74\xf6\xff\xe3\xb1\x09"
+ "\xf2\x71\xd5\x29\xfa\xc6\x5a\x86\xc5\x3c\xcc\xfe\xa0\xe2\x07\x8f"
+ "\x06\xeb\x47\x92\x85\xcb\xd4\xbf\xc4\x7e\xc4\x93\xea\xd8\x37\x18"
+ "\x69\xec\x2b\x0d\x9d\x72\x2b\xdb\xbf\x61\x35\x5e\xdc\x9a\x27\x6d"
+ "\x7e\x94\xd1\xe1\xcb\x79\x0d\xe0\xb0\xef\xb1\xa5\x5a\x8d\xc5\x9d"
+ "\xb8\x4f\x63\x9e\x46\x79\xb3\x30\x4d\xfa\x94\x7d\xae\x91\x96\x8e"
+ "\x5f\x06\xe0\xe5\x19\xf0\xd6\x8f\x4a\x6c\x5b\xc6\xdb\xb9\xfd\xf3"
+ "\x41\x13\x59\xab\x5d\x5a\x87\x57\x63\xdb\xfa\xd6\xf5\x6a\x6d\xa1"
+ "\xb5\x52\xb8\x0e\xe6\xd7\x23\x3d\xf1\x3c\xe9\x56\xd8\x7f\xb7\x3a"
+ "\xd4\x7a\xcb\xad\xe8\xff\x99\xbb\xd4\xda\x69\x6b\x25\xf4\x6d\xef"
+ "\x71\xca\x9e\x8f\x6b\x1f\xae\xf7\x1a\xf0\x3d\x72\xbe\x7d\x6b\xa7"
+ "\x70\x25\x3d\xc4\x70\xe3\xd2\xc3\xd0\x6f\xbd\xd6\x70\x65\xfe\xf9"
+ "\xef\xb2\x6d\xc2\x95\xfc\x60\x82\x74\xf6\xcd\xed\xf5\x51\x76\x11"
+ "\xe3\x1b\x95\x9e\x2b\x5c\x23\xe6\x70\x7e\x1f\xd7\x87\x32\x83\xd9"
+ "\xda\x86\xbf\xaf\x3a\x33\x90\xbd\x25\xae\x1d\x9f\x1d\xa7\x6f\x5e"
+ "\xaa\xda\xf1\xcd\x67\xe3\xea\xde\x93\xb8\x1d\xd9\x2d\x68\xc7\x67"
+ "\x83\xb4\xc3\x27\x69\x6b\x42\x5b\x4c\xe7\xbd\x0b\xa3\x2d\x9f\x49"
+ "\xba\xc7\xa4\x7f\x33\x43\xb7\x85\x02\x98\x87\xa5\xe3\x9d\x2c\xfb"
+ "\x50\xf9\x40\xbf\xe9\xf9\x26\x5b\x6b\x29\xef\xfc\x3a\xbf\x39\x47"
+ "\xb8\x86\x3d\xe4\xa3\x6f\x6e\x94\x70\x06\xd2\x4b\x14\x2e\xa0\x93"
+ "\x89\xe9\x84\xf6\xa0\xdc\x60\xfd\x6d\xcc\x4b\xd4\x5a\xc8\x37\x21"
+ "\xff\xd9\xa5\xc6\x5a\xe6\xd2\x72\xe1\x37\xe8\x88\x77\x1d\x71\xef"
+ "\x42\x51\xef\x02\x31\xef\xd6\x18\xe9\xb7\xa5\x19\xe9\x5f\xac\x9f"
+ "\x6e\x9b\x1c\xd7\x4f\xe8\x9f\xdb\xda\x62\xdb\x7d\xdb\x0c\xd5\x3e"
+ "\xf4\xd1\x79\xb4\xbe\xad\x18\x7d\xd4\x97\xb8\x8f\x6e\x5b\x9f\x98"
+ "\xd7\x6e\x93\xeb\x68\x62\x24\x25\x82\xb7\x1f\x7d\xd7\x27\x79\x50"
+ "\xef\xa7\xf3\xfb\xe7\xb6\xa3\x46\xff\x7c\xb1\x36\x7e\xcb\x1e\xd7"
+ "\xc6\xc8\x71\xfa\xd6\x0e\xd5\xd6\x6f\x9d\x8c\x85\xfd\xad\xec\xc4"
+ "\xbc\xf8\xad\x3c\xb4\x33\x92\xb8\x9d\xdf\x2a\x19\x9c\x17\xbf\xe5"
+ "\x46\x7b\x22\xe7\xf3\xe2\xb7\x1a\x54\x19\x4a\x54\xa6\x51\xb8\x12"
+ "\xd6\x73\xc4\x19\x66\x3b\x77\x72\x1a\xaf\x2f\x45\xa5\x77\xc7\xf2"
+ "\x1f\xda\xc0\xe5\x98\x7e\x61\xa5\x67\xb9\x1f\x8e\xdb\xc9\xf4\x79"
+ "\x3c\x19\x74\x4d\x9e\x11\x47\xab\xd3\xc7\x69\x72\x5b\x8f\x29\x69"
+ "\x97\xa2\xd7\x94\x17\x63\x71\x9a\x5c\x9c\x98\x5e\x93\x2b\x41\xaf"
+ "\xd3\x89\xe9\x35\xb9\x6e\x70\x7a\x4d\xe6\xfe\x3f\x7d\x3e\xbd\x26"
+ "\x1f\x8e\xa6\x17\x6c\x5d\xd9\xbe\xaf\xda\xc0\x1b\x7d\x05\xa2\x9e"
+ "\xdb\x1a\xa1\x74\x2b\x78\x45\x95\xe9\x46\x99\x29\x66\x6b\x48\xf1"
+ "\x09\x6c\x48\xcb\x29\x9a\xdc\x6d\xc8\xff\x88\x5a\x1a\x26\xfa\x1e"
+ "\x65\x3f\xa3\x24\x2e\xe7\x75\x9c\xf6\x78\xc3\x59\xc4\xf3\x8f\xd8"
+ "\x7a\xa7\xe4\x26\xd6\x05\x53\x0a\x41\xd3\x97\x12\xa4\x3b\x94\xaf"
+ "\xd9\x94\xbd\xb1\x3a\x62\x4a\x4d\x6c\x1f\x81\x6e\x28\xa7\x6f\x3b"
+ "\x7d\xee\xef\xc2\x7d\x76\x3b\x9d\xdf\x67\xb7\xbf\xa6\xfa\xeb\xf6"
+ "\xb5\xb1\xf8\xdd\x6e\x4b\xdc\x5f\xb7\x67\x0d\xde\x5f\xb7\xcf\x18"
+ "\xbc\xbf\x6e\x2f\xe6\xfe\xf2\xd1\xed\x0d\xb1\xe3\xc6\xed\x95\xb1"
+ "\xed\x45\xbd\x28\x27\x4c\x43\x2f\xe3\xe7\x2f\xda\x6e\xe3\xc7\x3a"
+ "\x8e\xfb\x8a\xcf\x31\x01\xff\xab\x19\xc7\x8b\x85\x31\x28\x6c\xd0"
+ "\xb0\x66\x55\xe2\xfd\x56\x9e\xe3\xb6\x63\x26\xce\xfb\xc8\xf6\xaf"
+ "\xb0\xed\x7e\xc7\x32\xcd\x44\x1d\xb8\x37\x1d\xa7\x3b\xef\xd4\x4c"
+ "\xa6\x72\xde\xf3\x94\x7e\xf2\x72\x0d\xe1\x8e\x8d\xd1\x7d\xc1\x7b"
+ "\x9f\x3c\x37\xdd\xac\xe6\x4e\x7f\x3b\x4e\x39\x97\xab\x7e\xb9\xf3"
+ "\xea\x58\x3a\xde\xb1\x37\x71\xbf\xdc\x71\x08\xfd\xf2\xb7\xc4\xfd"
+ "\x72\x47\xe7\xe0\xfd\x92\xc3\xeb\x87\x7f\x3b\x5f\x8e\x72\x6c\xba"
+ "\x1c\xad\xe3\x32\xf6\x45\x3c\x1f\xcf\xa9\xe2\x3c\xb8\x87\x8c\xe4"
+ "\x3c\xc7\xef\x6f\xe8\x36\xe4\x48\x96\x99\x01\x58\xb2\x7e\x3d\x4f"
+ "\xae\x0e\x23\x1a\x6e\xa9\xb5\x3b\x91\x9c\xe4\xb8\x39\xef\x8d\xa5"
+ "\x64\x01\x0d\xf3\x77\x30\x8c\x25\x44\x80\xf1\x09\xe7\xe3\xf4\x1b"
+ "\x03\xd1\x72\x92\xb3\xdf\xc8\xc7\xba\x4e\xcf\xbb\x57\x04\x8b\x89"
+ "\xf3\xc5\xc1\xd6\xdb\x3f\x4c\x8e\x23\x9c\x9f\xf3\xc5\xe6\xb9\xd3"
+ "\xa2\xe4\xf1\xce\x19\xb1\xf2\x78\xa7\x3d\x96\x3f\x41\x7f\x94\xd3"
+ "\xa0\xe7\x70\x5f\x06\x1c\xbe\x30\x7f\x5d\x58\x36\xef\xac\x8b\x93"
+ "\x4d\xf0\xc0\x5d\x53\x14\x0f\xdc\x75\x65\x1c\xae\xfb\x12\xf3\xc0"
+ "\x9d\xad\x83\xf3\xc0\x9d\x5d\x83\xf3\xc0\x5d\x66\xe6\x01\x1f\xdd"
+ "\x35\x39\x56\x36\xef\x1a\x13\xdb\x76\xd4\x2b\x65\x93\x2e\xbd\x18"
+ "\xd9\x84\x2d\x74\xd9\x60\x72\xc8\x32\xc5\xfe\x23\xf5\xbd\xc6\x5e"
+ "\xc7\x17\xa2\x99\x05\x72\xc5\xf8\x1d\xe6\x35\x25\xe8\xf8\x6c\xa6"
+ "\xe1\x4e\x79\xfe\xf3\xae\xce\x68\x3a\x6e\x56\x67\x2e\x9d\xc7\x69"
+ "\xea\x42\xde\x57\x56\xf4\x9c\x36\x31\xb6\xfd\x53\xcd\x89\xe9\x39"
+ "\x75\x0c\xe8\xe9\x4c\x4c\xcf\xa9\xd9\x83\xd3\x73\xea\x1c\x3e\x93"
+ "\x75\xbe\x4c\x4d\x2d\xb1\x2f\x97\x36\x8a\x2c\x73\x8a\xa6\xfe\xee"
+ "\x8b\x8d\x4f\x53\x77\xc5\x8e\x4f\x53\x37\x5e\xfc\xf8\x34\xb5\x2b"
+ "\xf1\xf8\x34\x8d\x12\x8f\x4f\xd3\x6c\x4a\x1e\xa6\xe5\xc5\xca\xc3"
+ "\xb4\xac\x58\x9e\x00\xed\xfe\xd7\xc6\xa7\x69\x0d\x71\x32\x50\x7d"
+ "\x9c\xa6\x5f\x0d\x9b\x42\xb7\x37\xa7\xff\x3d\x0e\xc7\xc6\xc4\xfd"
+ "\x36\xed\x08\xfa\xad\x3a\x71\xbf\x4d\xf3\x0f\xde\x6f\xd3\xd3\xd0"
+ "\x6f\xd5\xe7\xf7\xdb\xf4\xb1\x17\x6f\x53\x4c\xcf\x8f\xed\xb3\xe9"
+ "\x39\x17\xdf\x67\xd3\xeb\x12\xf7\xd9\xf4\x7d\x89\xfb\x6c\x7a\xab"
+ "\xea\xb3\xbb\xcd\xb1\x7d\x36\xbd\x33\xb6\xcf\x40\xb7\xff\x61\x9f"
+ "\xa1\x7f\xd6\x2b\xff\x84\xbb\xe7\x63\xde\x3e\x2c\xe8\xba\x7b\xae"
+ "\x8f\xee\x19\xab\xe6\xd6\xf7\xa8\xb1\x43\xf5\xe1\x5b\xc8\x93\x77"
+ "\xfe\x38\x70\xb7\x43\x4f\xfb\xee\xf9\xfd\x70\xf7\x16\xe8\xe8\xee"
+ "\x96\x72\xb9\xb7\xa5\xfa\x90\x69\x8e\x7c\x9e\x55\xbc\x3f\x75\xf7"
+ "\x3e\x2e\x8b\x3e\x16\xde\x50\x98\x58\xaf\x23\x7f\x80\xe1\xf0\x59"
+ "\xd4\x38\x58\xbe\x8b\x19\xe3\x2f\xe0\x53\xb3\xde\x53\x71\x13\xe0"
+ "\xdd\x73\x56\xf1\xea\x3d\xf1\xf6\x6f\x3d\xde\xfd\x5e\xf1\xe9\xbd"
+ "\xaf\xc4\xe2\x70\x4f\x51\x62\x3e\xbd\xa7\x1c\x6d\xa8\x4f\xcc\xa7"
+ "\xf7\xd4\x0e\xce\xa7\xf7\xa0\xff\xa9\x3e\x6a\xee\x33\xf2\xf1\xb0"
+ "\x2f\x6e\xee\x73\x4f\x87\x35\xa0\x78\x47\xda\x44\x55\xad\xeb\x83"
+ "\xae\xdc\x78\xfb\x0f\x7d\x93\xbb\x46\xc7\x79\x59\x6c\xf9\xdc\x41"
+ "\xec\xbf\x5c\xb6\xff\xde\x4a\x8c\x73\xee\x05\xec\xbf\x5c\xb6\xff"
+ "\xde\x3a\x5f\xb6\x72\x75\xfb\x2f\xd1\x1c\x2f\xb7\x2e\x71\xff\xe7"
+ "\xc6\xf5\x3f\xe5\x97\x61\x3e\x2c\xcb\xc7\xe6\x3b\x1a\x9d\x8f\x7d"
+ "\x93\x38\x2f\xf3\xc8\xf9\x79\xef\xb5\xc4\xc3\x1c\x24\x5f\xd6\x79"
+ "\xbc\xc7\xbe\x54\x09\x79\xef\x5e\xfd\x3c\xc9\xbd\xfb\x62\xe5\xf1"
+ "\xde\xb2\x58\x79\xcc\xb5\xc5\x95\xdb\x12\xfb\x1e\xfc\xf3\xbf\xa6"
+ "\x63\xef\x33\xc7\xf1\xc0\xc1\xe3\x74\xdf\x5a\xc5\x03\xf7\x7d\x1c"
+ "\x8b\xc7\x7d\x63\x12\xf3\xc0\x7d\x93\xd0\xfe\x83\x89\x79\xe0\xbe"
+ "\xbc\xc1\x79\xe0\x3e\x3e\xab\x7c\x30\x9a\x6f\x1f\x2a\xcf\x19\x16"
+ "\x97\xa7\x26\xb1\xce\xbb\x6f\x77\xe2\x35\x82\xfb\x3c\x8a\xc6\xf7"
+ "\x85\x62\x69\x7c\x5f\x47\x2c\x0d\xd1\x96\xff\x39\x0d\xfb\xe3\x4f"
+ "\x04\x5d\xf7\xc7\xcb\xbf\xf7\x38\xdd\xaf\xcb\xff\x8c\x77\x63\x71"
+ "\xbc\xbf\x48\xe1\x92\x68\x5d\xe4\x7e\x9e\xff\x7a\x13\xd3\xf2\xfe"
+ "\xba\xc4\x6d\xbe\x7f\x1f\xc6\x20\xaf\x76\x9e\x2c\xdd\xdf\x8a\xf4"
+ "\x87\x78\x3d\x94\xd7\x43\x76\x22\xfd\xa1\x30\x59\xe4\x78\xd5\x3f"
+ "\x2e\xdd\xef\x67\x5f\x14\xa6\x3f\xf3\xaf\x75\x0c\xe5\xf1\x18\xc4"
+ "\x78\x15\x94\x4b\xbf\x05\xeb\x7a\xe6\xf5\x6b\x98\xd7\x67\x48\xfb"
+ "\x8f\xf7\x59\xd8\x8f\xd0\xea\xa0\x3c\x8e\x83\x61\xf0\x3b\xe7\x8f"
+ "\x85\x3d\x63\x06\xcb\x05\xe7\x37\xf2\xaa\x75\xb3\xca\x38\xdd\x34"
+ "\xa3\x2c\x71\x1f\xcf\xd8\x38\x38\xef\xcc\xd8\xad\xfa\x79\xc6\xd1"
+ "\xd8\x7e\x9e\xe1\xd1\x5c\x23\xe6\x70\x5b\x7d\xa0\xf3\xc5\xf4\x71"
+ "\x99\x5d\xf8\x07\xd5\xf7\xeb\x1e\xed\x28\xad\xa0\xaf\x9c\xa0\x99"
+ "\xd3\x64\x7d\x26\x11\xb2\xae\x4d\xa2\x16\xa9\x03\x66\xbe\x2a\xf1"
+ "\x44\x9e\x82\x30\x99\xc4\xba\x67\x3a\xf8\x5d\xbd\x4b\x84\x90\xef"
+ "\x30\xef\x09\xf0\x59\x6e\xf0\xc2\x65\xc7\x68\xe6\x63\x31\xe5\x31"
+ "\x32\x7b\x15\x8c\xda\x7a\x29\x8f\x33\xb7\x18\x6b\xba\xeb\xf1\x9c"
+ "\x78\xdd\x77\xe6\x7e\xc3\xf7\x41\xf9\x8c\xcd\x1c\x74\xff\x92\x71"
+ "\xe2\xf3\x34\x8c\xd3\x85\xf5\xc0\xac\x34\x83\x7f\x95\xaf\xe5\xac"
+ "\x31\x03\xbe\x7c\xb3\x32\xf1\xee\xf0\x05\xd6\x06\xa3\xe4\x60\xd6"
+ "\x9c\x68\x38\x2a\x06\xcb\xac\x62\xc3\x1f\x0f\xf7\x65\x9f\x03\xcb"
+ "\xc0\xa7\x2e\x0e\x9f\x3d\xb0\x53\xd6\xeb\x30\xf6\x5f\x08\x06\xf7"
+ "\xb9\xe2\x59\xe6\x87\x59\x87\x2f\xb4\xe6\x97\x6c\xa3\xbc\x97\xcf"
+ "\xe3\xad\xd9\xd2\x5e\x62\x18\x17\xc6\x71\x76\x4e\xcc\xdc\x42\xee"
+ "\xdd\xf3\xde\x56\xde\x70\x25\xf7\xb3\xe3\xd6\x08\x67\xcf\x95\xfe"
+ "\x54\xba\xdc\x3f\x1e\x8e\x97\x83\xd9\xe5\xc6\x18\x1d\x97\xbe\xc5"
+ "\x90\x7b\xcc\x6b\x19\x6e\xdc\x3a\xeb\xec\x7d\x4a\x16\xf2\xd2\xb4"
+ "\x94\xe8\xf9\xda\x6c\x69\xff\x19\xeb\xa5\x3e\xe4\x8b\x2b\x17\xb7"
+ "\xfe\x37\x7b\xae\x18\x7c\x9d\x3e\x0d\xfd\x1b\xe0\xbd\x2d\x15\x1b"
+ "\x22\x6f\x72\xdc\x7a\x85\x7f\xb3\x3c\xef\xff\x17\x6e\xbf\xae\xf7"
+ "\x1e\x78\x3b\xb6\xbe\xbc\xb9\xce\x93\x17\x6a\x7f\xde\x20\xed\xcf"
+ "\x1b\x68\xff\x22\x09\x37\x6e\x2d\x31\x4f\xb6\x3f\x72\x9e\xfe\xcb"
+ "\x6b\x85\xfe\x32\xe8\x06\x9b\xfb\x81\x71\x86\xad\xce\xeb\x07\x83"
+ "\xdb\xea\x0f\x0c\xac\xff\xc9\x72\x79\x03\xeb\x7f\xfe\x44\xb6\xba"
+ "\x8f\xe4\xde\x6a\x4c\xdd\x0f\xe4\x5a\xeb\x12\xb5\xe5\x81\x41\xd6"
+ "\xff\x1e\xd0\xd7\xff\x1e\x38\x1c\xab\xcf\x1e\xa8\x89\xed\xc3\xbc"
+ "\xb8\x3e\x7c\x60\x6f\x6c\x1f\xe6\xcd\xfd\xef\x8e\x6b\x78\xa6\xe4"
+ "\xe4\x64\x53\x72\x92\x29\x29\x19\xaf\xd1\x44\x1a\x96\x6c\x4e\x1e"
+ "\x82\xdf\x50\xfd\x3a\xcc\x94\x6c\x32\xe3\x37\x44\xbf\x0e\x8d\x7b"
+ "\x1e\xc6\x65\xf1\x33\xeb\xd7\x21\x71\xcf\x43\x3f\xe7\xfd\x30\xbd"
+ "\x5e\xa3\x7e\x73\xdc\xf3\x90\xcf\x79\x3f\xf4\x7f\x58\x9e\xce\x7b"
+ "\x8e\xf5\x43\xbb\x77\xd1\xf2\x79\x25\x0b\x8b\xe4\x7e\xf1\x7c\xfb"
+ "\xbc\x27\x9f\x9c\xbf\x74\xa9\xbd\x6c\xb1\xfd\xae\x3b\x1f\xbc\xe9"
+ "\x36\xbb\xda\x76\x2e\x99\x32\xae\x28\x95\x66\xae\x58\xc2\x2f\x66"
+ "\x3e\x74\x6f\xbe\x3d\xef\xae\x3b\x63\x5f\x1a\x60\xe4\xf6\xf2\x85"
+ "\xa0\x44\xc9\x5f\x4e\xd5\x28\xa2\x8d\x5b\xa5\xee\xe9\x64\x3f\x5f"
+ "\xb5\xe6\x91\x3f\xb1\x95\xfd\x47\x7b\x9d\xc2\x73\x0d\xef\xe9\x3f"
+ "\xf4\x21\x37\xe2\x86\x86\x4a\x2a\x7d\x82\xcf\xaf\x3c\xf4\x2f\x71"
+ "\xc0\x4f\xf6\xfb\xc8\x74\x8c\x1e\xbb\xb3\x25\x17\x79\xf1\xec\xf5"
+ "\x85\xc9\xee\x24\xcb\x71\xfa\xee\xa7\x78\x97\x24\x6e\xd7\x90\x16"
+ "\xd0\x7d\xa1\xbf\xf3\x2f\x99\x76\xa0\xd2\xc8\x67\x3d\x4e\x73\x5e"
+ "\x11\x07\x84\x7c\xe6\xf3\x41\x2a\xdf\x9c\x85\xc2\xf4\x50\x26\xeb"
+ "\x86\xba\x91\x64\xe6\xbd\xd0\x57\x47\x92\xe5\xd5\x51\x1c\x23\x65"
+ "\xce\x5c\x63\x2f\xb4\x0a\xcf\x3e\x7a\x2c\x87\xeb\xe6\xbc\x9a\xe9"
+ "\xa1\x07\x39\xff\xce\xd8\xfc\x1b\x07\xf6\x62\xe7\xcc\x35\x21\xdf"
+ "\xec\x4f\xc9\x6a\x8d\x88\x7f\x85\x52\x5b\x0a\x6f\xcc\xa5\x24\x2f"
+ "\xba\xa2\x35\x5c\x49\xca\xe7\x67\xce\x87\x2b\x23\x22\xcc\xfe\xe9"
+ "\x33\xbb\x9d\xa2\xfa\x59\x32\x43\xa6\x93\x3c\x4b\xd8\x47\x61\x4e"
+ "\x63\xfd\x7c\x32\xa3\xfd\x63\x4e\xd0\xb7\xbb\xed\xb3\x88\x9c\x33"
+ "\xc9\xfc\x07\x07\xfb\x1b\xb6\x6a\x9b\xdf\x27\xf3\x4f\x7b\x2b\x4d"
+ "\xbd\xc2\x46\xe5\x65\xa2\x4b\x70\xdc\xa4\x80\x08\xb1\x8f\x7f\x6b"
+ "\x61\x84\xf3\x9c\x0a\x3a\x6d\xd4\x5e\x16\xa0\x35\x47\x45\xc8\xfd"
+ "\xbe\x3a\x1b\xd0\xd6\x1d\x60\xff\x45\xcb\x9a\x99\x94\x7c\x3c\x9f"
+ "\x4c\x6d\xc5\xb5\xe4\x9d\x1b\xa0\xf2\xa3\xa2\xab\xb5\xf0\xef\xd4"
+ "\x5e\xbc\x97\x0a\x3a\xc8\xd4\xda\xf9\x09\xc9\xd8\x3f\x9b\xcd\x59"
+ "\x15\x67\xc9\xb6\x66\x21\xa7\x9d\xa5\x55\x6b\x68\xf8\xaa\x0f\xc9"
+ "\xea\xed\xea\x40\x3d\x27\xe9\x91\x23\x94\x04\x78\xa6\xd5\x9f\x90"
+ "\x6d\xf5\xc3\xec\xe7\x9b\x43\x75\x15\x64\x13\xce\xcc\xb4\x5e\x67"
+ "\x66\x7a\xaf\xc8\x1c\x19\x74\x66\x66\xb4\x97\x22\x7f\x67\x13\x8d"
+ "\xe8\xa0\x8c\x03\x27\x3a\x4c\xb5\x67\x68\x0c\xb7\xe9\x38\xda\x56"
+ "\x77\x06\xf9\x37\x7c\xbc\x57\x43\xd9\xe8\x32\xe1\x94\x8f\x0f\x79"
+ "\xf3\x43\xa4\x01\x56\x6d\x2f\x8d\xa9\xeb\x25\x9b\x56\xf5\xf1\x5e"
+ "\x2e\xd7\x4d\xdf\xf9\xa7\x17\x23\x43\xf9\x1a\x11\xe9\xdb\xd0\x5a"
+ "\x08\x9d\x38\xec\xad\x27\xf6\x9b\xbd\xad\xdd\xd4\x16\xe8\xa5\x76"
+ "\xfa\x0b\x79\x1d\xff\xf0\xfc\xf4\x89\xfd\x43\x34\x08\x81\x67\x55"
+ "\x27\xea\x52\xbc\xe3\x6c\x23\xb3\x17\x7d\x50\x5d\x41\x69\xa5\xab"
+ "\x68\xd8\x09\xa4\xab\xb9\xfd\xc1\x62\x6f\xf8\x1f\x9e\x55\xd2\x1f"
+ "\xf7\xb1\x9c\x8a\x36\x4a\x6e\x0f\xd4\xb2\xdf\xa7\x29\x32\xc2\x9c"
+ "\xe5\x0d\x1c\x26\x6f\xe9\xdf\x3c\x5a\x9a\xd9\xb6\x51\x23\xcb\x9b"
+ "\xe7\x0e\x9b\xbc\xe6\x73\xe4\xcd\x0f\xd0\x41\xd4\x2d\x36\x9b\x27"
+ "\x43\x6f\xe5\xb4\x07\x42\x7c\xde\x29\x4b\xf4\xd8\x52\xab\x97\xd0"
+ "\xf8\x9d\x67\x68\xec\x8e\x33\x94\x29\x82\x99\x26\xf6\xb1\xe5\xf3"
+ "\xab\x3b\x70\x4d\xeb\x24\x0b\xda\xae\xfc\xb1\x87\xeb\xbe\xb6\x7d"
+ "\x99\x54\xdf\x3b\xe0\x6b\xdb\xdb\x33\xe0\x6b\x0b\x9e\x2a\x64\x7f"
+ "\x5b\x1f\x7d\x3b\x60\x6d\xa5\x61\xc7\x68\x8e\x8d\xf9\xbb\xfa\x14"
+ "\x99\xd7\x9d\x22\xba\xb1\xd2\x44\xf6\x05\x7c\xce\xe2\xbb\x1f\x7a"
+ "\xd1\x37\x7c\x7f\x8c\xbe\xbb\x11\xd7\x34\xfc\x92\x90\xbe\x96\xdb"
+ "\xd9\xa9\xf3\x31\xd2\x4c\x48\x5b\x86\x6b\x32\xae\xcf\x3a\xeb\x84"
+ "\x1f\x75\xed\xef\x31\x51\x2a\xf3\xb3\xee\xdf\xbb\x3f\xe8\xfa\x2e"
+ "\xea\x5c\x54\x64\xf0\xb5\xd2\xf1\x73\x0a\x0f\x1e\x3b\xc9\xf1\xb9"
+ "\xfc\x12\xaf\xbe\xe2\x24\x8e\xd5\xa5\xa7\x33\x0e\x6d\x5c\x2f\xea"
+ "\xdf\x8b\xab\x15\x3f\x96\xd3\x69\x46\xd9\x9e\xbe\x62\xae\xf3\x77"
+ "\x48\x17\x46\x3a\xda\x6d\xe6\x77\xbf\x38\x76\xd2\xa4\xf2\x64\x9a"
+ "\x00\x33\xa4\xc3\x87\xec\xcf\x31\xb3\x8c\xf7\x98\xac\xa2\xb9\x70"
+ "\x12\xd5\x6d\x15\xad\x3b\xb6\x8a\x16\x25\x7b\xf9\x16\x1f\x95\x5a"
+ "\x18\x47\x8c\xe3\x2d\x1b\xf1\xae\xd9\x4e\xc4\x74\x69\x29\x62\x7f"
+ "\xb2\x7c\xd8\x7f\x97\x34\x46\xb7\x41\xb8\x1e\x94\xb6\xfe\xcf\x2a"
+ "\x0e\x0d\x81\x0e\xb0\xb4\x77\x76\xd3\x4f\x7b\xbb\x86\x38\x7f\x4f"
+ "\x26\x6f\xf8\x18\x4d\xc8\x20\x1b\xdb\x83\xf5\x5b\x85\xef\x65\x8e"
+ "\x07\xb8\x55\x74\x83\x5f\xae\x3c\x41\xf9\xcb\xbe\x9e\x41\x19\x7f"
+ "\xc4\x68\xa7\xf4\x53\xfe\xa6\x28\xfd\x74\x79\x9b\x6f\x7f\x94\x6e"
+ "\x9a\xfb\xbb\xf3\x75\xd3\xa3\xef\x2a\xdd\x04\xd9\x97\xba\x28\xe2"
+ "\xd3\xd3\xdf\x8c\x4b\xd7\xfd\x44\x1e\x7d\x31\x2e\x3d\xa4\xa7\xaf"
+ "\x89\x4b\xf7\xab\xf4\x47\x9a\x0c\xdd\xd7\xce\x78\xac\x60\xdd\xf7"
+ "\xc8\x6b\xac\xfb\xda\x0b\x75\xdd\x27\xf5\xcf\x23\xcf\x8b\xff\x03"
+ "\x5d\xb4\x9c\xf5\xcd\x23\x8f\x31\xfe\xe2\x00\x19\xb8\xa7\x20\xed"
+ "\x4a\x4e\xab\xf9\x0b\x99\xf1\x33\xf4\xde\x62\xd6\x7b\xac\xf3\x58"
+ "\xf7\x6d\x1f\x25\x3a\xb6\x6f\x15\x47\xea\x64\xac\xa1\x87\xfb\xf5"
+ "\xdf\x0b\x48\xdb\x88\xb4\x17\xf0\x9e\xf5\x20\xd3\xa4\x2d\x7f\x3f"
+ "\xb1\xff\x09\x6c\xad\xb0\x66\xca\xa2\xcd\xe8\x6f\x3e\x6f\xb8\x1e"
+ "\xf4\xb5\x26\x51\xa9\xb7\x8c\xcf\xaf\x46\xd8\x27\xad\xb3\xbd\xac"
+ "\x93\xe5\x6e\xd4\x3a\xc8\x19\x9f\x97\xae\x08\x88\x13\x7c\xee\x8e"
+ "\x71\x28\x58\x79\x1f\xc7\x67\x4a\x6a\x29\x26\x62\xbf\x70\xd6\xd9"
+ "\xc0\xc5\x5c\x03\x9c\x54\x3c\x98\x47\x32\x7c\xf4\xfa\x34\xd5\xd7"
+ "\x8f\xe5\x70\x1c\xb8\x63\xf4\x70\x3e\xe6\x7b\x21\x6e\x9b\x35\x52"
+ "\x49\x7c\x0e\x86\x63\x23\xf2\x75\xbb\x49\x2b\xae\x31\xce\xc2\xb8"
+ "\xa0\x1b\x90\xc7\xdb\x11\x22\xc6\xd9\x47\x0f\xef\x6a\x2b\xdf\xcf"
+ "\xe5\x73\x99\x36\xc2\xe5\x34\x60\x24\x49\x18\x26\x39\x6f\xc4\xdc"
+ "\xe0\x11\xb5\x76\x9e\xda\x5a\xd8\x36\xd7\x4f\xac\xf7\xbd\x5d\x80"
+ "\x51\x7e\x4c\xc1\x00\x2c\x81\x31\x20\xe6\x9d\x0e\x7f\xf8\x1a\xf1"
+ "\x2f\xc0\xcf\xe0\xfe\xe2\x73\x91\xbc\xdf\x06\xba\xa4\xb1\xaf\xbc"
+ "\xb2\x45\x1f\xde\x51\xff\x17\x22\xfd\x6c\x27\xf8\xed\xe1\x3a\x3e"
+ "\xb7\xc4\xe7\x39\x2f\x74\x96\x13\x34\x1a\x6b\x9c\xe7\xd4\x56\xfc"
+ "\xef\x9e\xe5\x04\x6c\xdb\x4e\x93\xd8\x0b\xfc\xeb\xf8\x3c\xe7\x31"
+ "\xca\x0f\x33\x1f\xea\x6d\x6a\x78\xe5\x11\xa6\x79\x7e\x27\xa7\x61"
+ "\xee\x78\xc8\xe8\x7f\x6e\x2f\xb7\x05\xef\x0e\x29\x1b\x51\x1c\xf6"
+ "\xd1\xa3\x0d\xfc\x1e\x69\xfb\x38\xff\x04\xe8\x31\x2f\xc6\xb0\xb7"
+ "\x8e\x45\x4c\xd5\xab\xc8\xac\x74\xda\xdc\x77\xb8\xbc\xd2\x69\x73"
+ "\x4b\x07\x74\xda\xdc\xf9\x4a\xa7\x29\x1a\x2b\x9d\x36\xf7\x61\xa5"
+ "\xd3\xe6\x3e\x20\xf7\xc5\xa0\xd3\xf8\x1d\xeb\x35\x43\xa7\xed\x18"
+ "\x25\x0e\xb1\xee\x08\xba\xe6\xe6\x18\xba\x6d\x13\xd2\x58\x77\x30"
+ "\x8e\x4a\x4f\x3d\x52\x2b\xfe\xbf\x4c\x52\x7e\x07\x7c\x5f\xcc\xe7"
+ "\x17\xba\xf4\x7b\xf4\xcb\xdc\xb7\x95\x8e\x9b\xbb\x65\x40\xc7\xcd"
+ "\xb5\x0d\x94\x65\x1d\x37\xf7\xc7\x4a\xc7\xa9\xf4\xfa\x47\x58\xc7"
+ "\x3d\x52\xcb\x34\xd0\xe1\x9b\x78\x0d\x4f\xcf\xcf\x74\x6c\x88\xd6"
+ "\x71\xb1\xf2\x35\xb7\xdb\xd0\x71\xac\xdb\xf0\xcc\x71\x23\x0b\xa5"
+ "\xbc\x21\xdf\x16\xd0\xdc\x90\x3b\xee\x03\x6e\x33\xc7\x7b\x63\xba"
+ "\x4d\x3d\x49\xc3\xf4\xb3\x43\x7a\xbb\x1f\xcb\x36\x7c\x1f\x7d\x34"
+ "\x37\x27\x91\x1d\x3d\x10\x93\x91\xae\xe2\x73\xf3\xde\xca\x63\xe4"
+ "\xad\x15\x95\xed\xe1\xa3\x54\x50\x06\x5d\x91\xfc\xcc\xa7\xdc\xb7"
+ "\x98\x77\x7c\x8b\xaf\xac\x7b\x30\x96\xae\x29\x08\xd0\x50\xcc\xd5"
+ "\x3f\xad\x36\xe1\x9d\x23\xe6\x9d\x5c\x63\xb8\x71\x09\xc7\xf3\x7b"
+ "\xac\x70\xb0\xf9\xfe\x45\xd6\x77\x72\xf0\xfa\x1e\x4f\x91\xf5\xc1"
+ "\xa6\xc2\x1c\xe8\xd2\x53\xf4\x98\x9c\x97\xc8\x18\x38\xeb\x12\xc1"
+ "\x7a\xfc\x9b\xfa\xfb\x21\x83\xbc\x7f\xf8\x73\xca\xaf\xfc\x9c\xf2"
+ "\xaf\xb2\x2e\x42\xfb\xac\x11\x57\x2c\x9c\x11\x61\x23\xdf\x09\xce"
+ "\xf7\xae\xbe\x16\xf3\xa9\xf3\x6a\x39\x47\xb3\x19\x30\x99\xff\x36"
+ "\x23\x9f\x8c\xcb\x02\x5d\x39\x0d\x35\x8e\x08\xc4\x94\x8d\x0c\xd0"
+ "\xf8\xf1\x41\xcf\x74\xb2\x1e\xf5\xd6\x92\x8c\x51\xdb\x0c\x9b\x94"
+ "\x63\x26\x6d\xe9\x5f\xff\x28\x98\x03\xbd\x99\x17\xe5\x17\xdb\x0d"
+ "\x3d\x77\x95\x8a\x47\x13\xa0\x6a\x35\xdf\xbc\x02\xfa\x79\x24\x9f"
+ "\x87\xe1\xb3\x31\x05\x91\x3c\x53\xb3\x8c\x9d\x56\x50\x63\x94\x1d"
+ "\x6c\x9d\x85\xeb\xd5\xeb\x64\x1f\xd3\x00\xca\xb4\x18\x65\x18\x36"
+ "\xfb\x29\x62\x5c\xbe\x4a\x9e\x29\x0d\x77\xb3\x2e\xbc\x02\xb6\xe8"
+ "\x48\x55\x4f\x21\xe9\xf5\x40\x66\x1e\xf3\x5c\xe8\x6c\xc6\xe0\xed"
+ "\x2b\x9c\x74\xf1\xed\x23\xbd\x7d\x85\xa5\x9f\xd3\xbe\x0b\xd5\xbb"
+ "\xe7\xe2\xeb\x4d\x37\xea\xed\xba\x78\xba\xce\x1b\xf3\xc5\xe9\x9a"
+ "\xa5\xd3\x75\x5e\xde\xe7\xd0\x35\x51\x3d\xeb\xbf\x78\x3d\x76\xa3"
+ "\x9e\xfd\x89\xea\x21\xf9\x37\xe8\xb9\x29\x8b\x11\xdb\xb3\x07\xb2"
+ "\xa3\x62\xe3\x3d\x41\xd1\xf1\x92\x7b\xa4\x5c\x3d\x91\xd1\x1f\x9f"
+ "\x59\xed\x95\x43\x57\x3f\x31\xb1\xa0\x81\xc7\x77\xa1\xf9\xe8\x89"
+ "\x49\x1c\x37\x76\xda\x1a\x75\x26\x5b\x2f\x93\x7b\xa1\x38\xcd\x1c"
+ "\x03\x8c\x63\x00\x7a\xa1\xc5\x9b\x6b\x39\x6e\x49\x47\x0d\xfb\xdf"
+ "\x63\x4e\x05\x1d\xff\xc4\x2b\x1c\xd3\x0c\xf7\xc3\xf8\x9e\xf7\xc3"
+ "\x71\x6d\x50\xba\xe0\x89\x06\x1f\xcd\xeb\x18\x1c\x6e\x47\xc3\xae"
+ "\x8a\xac\x21\x83\xf9\xd9\xa3\xbc\xcf\x47\xcf\xed\x91\xbe\xf5\xa9"
+ "\x1f\x95\x62\x4e\xa1\xc7\x19\x9c\xff\x98\x8c\x3d\xe7\xcc\xe7\x73"
+ "\x25\x18\x1f\x8b\x9e\xd7\xcf\x03\x80\x2e\x95\xa0\xef\x93\x36\x83"
+ "\x2e\x46\x3a\xd2\xc6\x1b\x74\x81\x9d\x93\xe6\x6d\x08\xf3\x79\x9d"
+ "\x80\x3a\x9b\xfd\xe4\x03\xa2\xaa\xa3\x56\xc1\x7e\x52\xf9\xa8\x71"
+ "\x7d\x7d\xf9\x66\x39\x7f\xaa\xe0\xf9\x53\xd1\x24\x7f\x4a\x47\xad"
+ "\x81\x87\x58\x6a\x33\xf1\x19\xf0\x09\x18\x53\x37\xab\x58\x7f\x49"
+ "\x7c\x5e\x4e\xbe\x5f\x9a\x69\x52\xb4\x79\xf2\x97\xa2\x87\xe3\xc7"
+ "\x48\xd8\x69\xc0\x7b\x2e\xc3\xf5\xe1\xea\x5f\x9d\xc9\xf1\x2f\xf4"
+ "\xf6\x3c\xb9\x43\xdb\xf0\x51\xa9\x16\xb4\x99\x0c\x7c\x77\xca\xb3"
+ "\xad\x4f\xa2\xfd\xf3\xe6\x4a\x9c\x25\x3e\x36\x13\xfb\xf5\x6b\xa9"
+ "\x1d\x0d\x62\xb5\x8d\xf6\x2d\xe9\x92\xf3\x27\xae\x73\x02\xea\x17"
+ "\x3c\x5f\x82\x8d\x12\x74\x15\xd9\xfa\xe9\x06\xb8\x22\x68\xd0\xed"
+ "\xc9\x16\x35\x3e\xab\x36\x06\x56\xdb\x4c\xcd\x7e\x79\xee\x8e\xc6"
+ "\xda\x9d\x9f\xa9\x18\xdc\x45\x73\x0c\xda\xf5\xe3\x04\x7c\x38\x8f"
+ "\xf2\x73\x2a\x2a\x33\x70\x92\x32\x9c\xca\xe7\x78\x9f\x2c\xe6\xf3"
+ "\x43\x8a\xfe\xcd\x69\xc8\x53\x7b\x3e\xfd\x8b\xf6\x44\xd1\x3f\x99"
+ "\x79\x90\xe9\xcf\x6b\x1e\xa0\xed\x87\xa0\xa5\x45\x9d\x7b\x60\xbb"
+ "\xa6\xe8\x13\x3c\xa7\x31\x9e\x5a\x95\x41\xf3\x7c\xb3\x5a\x2f\x9b"
+ "\x9f\x1e\xd5\x0f\x68\xaf\x8d\x6d\xb6\x24\xa3\xfd\x5c\x86\x69\xc0"
+ "\xf1\x2c\xb9\x6e\xe0\x73\x49\xd0\x35\x3f\x33\xbe\x4d\xeb\xd4\x99"
+ "\x12\x52\x3e\x26\xf3\x73\xa3\x62\x9a\xfb\xcb\xec\x22\xa4\xce\x27"
+ "\x17\xf9\xf7\x55\xf8\xcd\x83\xe9\x02\xe6\x41\x19\x1b\xd3\x24\xd7"
+ "\x17\x60\x7b\x3d\x35\x45\x00\x37\xd5\xf7\x4f\x5d\xae\xd2\x16\xcc"
+ "\xc3\x15\x3c\x36\xff\x1d\x81\xba\xfd\x4e\x19\x6b\x05\x6d\x7b\x2a"
+ "\x9f\x79\xce\xe0\x33\x5e\x8f\x54\xbe\xe3\x0b\xae\x64\xdd\x62\xd0"
+ "\x1c\xf8\xa7\x02\xbf\x2e\x03\x7f\x23\x3f\xf7\x1d\xe7\xe1\xbd\x9b"
+ "\x16\x7b\x48\xea\x5c\x75\x76\x68\x41\x86\x21\xcb\x5c\x07\xf7\x33"
+ "\xeb\x1c\xa6\x87\xa2\xc5\x82\x49\xb1\xb0\x6c\x26\x15\xaf\x93\x79"
+ "\x1e\xf2\xb8\x2a\x34\x04\x79\xf2\x07\x60\xcc\x3f\xa2\xde\xf5\xe3"
+ "\xc9\xfe\xfe\xd2\x27\x4f\xf5\xc7\x82\x77\xb9\x5d\x03\xf8\xb2\xfc"
+ "\x2d\xe8\xef\x7f\x7e\x17\x70\xda\x38\xf6\xaf\xd4\x35\x65\x57\x33"
+ "\xbe\x7e\x8e\xa9\x2b\x79\xdd\x47\x0b\x2c\x8c\x3b\xe7\x31\xfa\x6c"
+ "\x80\x17\x17\xf8\xa2\xe1\x08\xa7\xc4\x55\xc2\x51\xba\xc3\x8f\xb9"
+ "\x2b\xd9\xd5\xbe\xcb\x53\x69\x03\x38\x2f\x58\x6f\xe0\x33\xa0\x13"
+ "\x9e\x1a\x1f\xcf\x93\x5c\x37\xc7\xed\xd3\x61\xb3\x2e\x49\x3f\x46"
+ "\x4f\xd9\x14\x5e\xf3\x6b\xb8\x1f\x07\x1b\xe7\x38\xbe\x26\xc7\x5c"
+ "\x7d\x59\xe9\x10\xf4\x73\xf1\xab\x2f\xab\xf3\x44\x01\x15\x77\xf5"
+ "\xa9\x1d\xc2\xf4\x1a\xd3\x8a\xd7\xd5\xfd\x32\x6e\x87\x3c\x6b\xfe"
+ "\x54\x23\xef\xd7\x8d\x28\x7d\x4d\xc6\xd8\xd5\x7d\x04\xfd\x2d\xa5"
+ "\x61\x19\xf7\xcf\x59\xc6\x67\x6f\xc3\x3c\xe7\x93\x3e\x70\xcd\x65"
+ "\x61\x7a\x28\xc4\x32\xf1\x54\x37\x9f\xa9\x57\xf1\xcb\x9f\x0a\x19"
+ "\xe7\xe8\x39\x66\x27\xc7\x9b\x85\x1e\x4a\x1e\x88\x17\x5b\x7c\x98"
+ "\x6d\x2d\xbd\x7f\x69\xb3\x49\x1c\x56\xf2\x5f\x7c\x27\x9f\x9b\x57"
+ "\xfb\x59\xc7\xa0\x13\x92\xff\x81\xbc\x0f\xab\xf5\x1f\x43\x47\x15"
+ "\xff\x89\xf7\xb4\x7c\x3a\x8c\xa0\xab\xb8\x08\x63\xc6\xa1\xf3\x75"
+ "\x49\xf1\x9d\xc6\x1c\x86\xcf\xe1\xa9\xfd\xb1\x01\x78\x28\x2f\xed"
+ "\xea\x81\x3e\x78\x8f\x61\xed\x3d\x5f\x2f\x14\xb7\x18\xb2\x57\x7a"
+ "\x0d\x9f\xe5\x7e\xca\xcd\xf5\x0f\x36\x5e\x08\xe7\xc3\xdc\x4f\x96"
+ "\xe3\xf6\xc4\x7d\x93\x78\xbf\x6d\x61\xa6\xd1\x06\x83\x26\xaa\x0d"
+ "\x0b\xd7\xf6\xa4\xb6\x6e\x1c\x68\xfb\x42\xb9\x46\x14\xf5\xfe\x9d"
+ "\x28\xda\xf0\xf3\x7e\x35\xae\x2d\x74\x80\x3f\xf4\xb3\xf8\x2a\x0d"
+ "\xb2\xb3\x5d\xac\xce\x27\x85\xe3\x42\x32\x64\x1d\x79\x77\xf9\x28"
+ "\x18\x52\xfb\x5e\x0b\x39\xfe\x01\xe9\xe5\x66\x30\x2e\x09\xdb\x19"
+ "\x83\xe3\xd3\x59\x6c\x73\xa8\xd8\x0a\x4f\x4f\x64\x7c\xed\xd7\x72"
+ "\x1f\x2f\x94\xb6\xae\x8c\xb3\xd0\x57\x3c\x24\xd0\x97\x49\x3d\x7d"
+ "\xc5\xd0\x0b\x99\xa6\xa0\xeb\x69\xe8\xff\x73\x47\x54\x9d\x4f\x8f"
+ "\x35\x70\x65\xdc\x64\x1c\x50\xb1\x30\x31\x7d\xb9\x5e\x19\xfb\xa9"
+ "\x78\x18\x7e\x16\xfc\x86\x7e\x51\xfb\x04\xf6\x7a\x97\xbf\xea\x83"
+ "\xf1\xda\x72\x71\x88\x63\x8c\x61\x4e\xd2\x55\x0d\xfe\x1d\xb1\xd6"
+ "\x03\x1b\xfd\x31\x53\xc1\x4a\xca\xc1\xdc\x99\xc4\x39\x91\xbd\x53"
+ "\xc3\x75\xb9\x98\xc4\xf1\xcd\xf1\x9c\xa5\x3f\x8f\xe7\xe7\x9e\xe5"
+ "\x62\x2e\x70\xee\x30\xf6\x0a\x55\x8c\x9c\xa7\xbb\xfa\xe3\x0a\x25"
+ "\x3f\xca\xe7\x8a\x38\xfe\x94\x86\x39\x51\x17\xd7\x5b\xc0\xf3\x5a"
+ "\xd4\x17\x74\x3d\x93\x8e\x7e\x9e\xc3\xf9\xfc\xc9\xd7\x8f\xc4\x2f"
+ "\x73\x90\x3d\xd5\x2e\xc6\xab\x27\xe5\x83\xf1\x06\xae\x23\x02\x39"
+ "\xa6\x2f\x86\xdb\x33\x65\x06\x6e\x48\x3f\x54\xad\xd2\xc3\x1c\x2b"
+ "\x91\x7d\x1e\xf1\x7e\x8b\x81\xab\x81\x03\xd7\xc7\xe7\x38\x45\x6a"
+ "\x6b\x2d\xc7\xa0\xe1\xfa\x38\x6e\x2b\xf2\x7a\x0c\x7c\xbf\x28\x2f"
+ "\x57\xd4\x09\xc1\xe3\x27\xeb\x5f\xfb\x68\x92\xb1\xf5\x8e\x53\x49"
+ "\x46\x73\x5d\x80\xd7\xbd\xb7\xa1\x8e\x57\x7b\x38\x36\x6a\x5f\x71"
+ "\xc2\x3e\xe6\x32\xc8\x9f\x27\xf5\xc3\x86\xd6\x57\x35\x91\x0b\x3d"
+ "\x81\x72\x7d\xb9\xbc\xe6\x04\xb9\x2d\x29\x6f\x29\xef\xe2\xb3\x97"
+ "\xd0\x39\x25\xe5\xc8\x53\xcb\x76\x16\xe6\x5d\x21\xf9\xdd\x0c\xe8"
+ "\x26\xcf\xf2\x49\x0c\x63\x8d\xd9\x41\xe6\x96\xb8\x78\x55\x83\xf1"
+ "\x47\x8f\xe5\xa3\xdd\x3d\x1b\x3e\xaa\x0c\xba\x4a\xf6\xf9\xe8\xd9"
+ "\x41\x6d\xc2\x75\xa3\x40\x4f\xe4\xab\x19\xcd\xf3\xbe\x12\xdf\x85"
+ "\xf2\x1a\xfb\xd6\xac\x83\x26\xd8\x28\x4d\xa4\x7c\xb4\x9b\xf5\x6d"
+ "\x4f\xea\x47\x95\x3c\x96\x04\x5d\xcf\xda\x8d\xf2\x3c\xae\xf3\xd8"
+ "\x81\xfe\xb2\x55\xf7\xeb\xc3\x67\xf5\x78\xc5\xcf\xe6\x1a\x32\x9a"
+ "\xa8\x9e\xb2\x5d\x42\x73\x8e\x23\x93\x17\xe3\xd6\x8d\x21\x4a\xdb"
+ "\xb9\x8d\xa8\x66\x95\x08\xbd\xbc\x0a\x73\x99\xd1\xfc\x9d\x8d\x12"
+ "\x0f\xcb\x28\xf3\xf7\x66\xf0\x4b\x32\x70\x79\xf9\x1c\xea\xac\x50"
+ "\xf9\x74\xff\x75\x1b\xf2\x75\xe3\x9a\x21\x4c\x26\xda\x52\x41\x96"
+ "\x2d\x1a\x99\x6b\x2a\x68\x0c\xd2\x60\xeb\x3e\xdb\x6a\xc8\x6c\x22"
+ "\x1c\xaa\x77\x12\xbd\x84\x7a\xd7\x56\x88\xf0\x7b\x18\xcf\x5d\x9a"
+ "\x08\x7d\x11\xba\xfb\x68\xd1\x78\xd5\xc6\x45\xe3\x0d\x9b\x10\xf7"
+ "\xd9\xb1\xfe\x07\x8b\xec\xf1\x73\xe5\x27\x16\x2f\x2e\x2b\x58\x32"
+ "\x9f\x2f\x99\xe3\x96\x5d\x97\x1a\xbd\x26\xc2\xe3\x9f\x8a\x57\xb1"
+ "\x28\x8f\xd7\x1f\x5f\x1e\x69\xec\xa7\x2f\xaa\x31\xd6\x40\x75\xbf"
+ "\xfd\x3b\x78\x6e\xc7\x73\x20\xbc\xdb\xf3\x6e\xf9\x1a\x06\x93\xf4"
+ "\xa9\x85\x4c\xf1\xf5\x2d\x98\x57\x36\xaf\xe4\x36\xde\x39\x4b\x4d"
+ "\x54\x8f\x27\xae\x9e\x50\x7f\x3d\x6a\xfc\x09\x98\x38\xdf\xa6\xd1"
+ "\x87\x45\x8a\x28\x55\x67\xa6\x17\x8f\x31\xd6\xb6\x06\xf1\x77\xec"
+ "\x88\x6c\xf8\xd8\xcf\xf2\xe0\x5c\x43\xa6\x5f\xac\xea\x30\xb1\x1d"
+ "\x59\x81\x7b\x5e\x63\x90\x6b\x65\x7a\xdc\xa8\x03\x67\x3a\x30\xbe"
+ "\x2f\x2e\x15\x55\xad\xd0\x4b\x8b\x8b\x07\x5b\x57\x88\xf6\x15\x61"
+ "\xdf\xc2\x4e\x5a\xec\xbe\x90\xef\x11\xe7\xe7\xf6\x30\xcf\xc6\x95"
+ "\x8b\xa8\x3e\x5b\x0c\xfe\x2f\xa9\xed\x3f\xd7\xab\xe7\xa9\x1e\x65"
+ "\xc4\xe3\x5a\x7c\x64\x50\xbf\x11\xf7\x47\x7b\x15\x8f\x97\x4e\x69"
+ "\xc1\xbc\x0d\xed\xfc\xfe\x31\x2a\xfd\xa6\xd9\x06\x1b\x61\x34\xbd"
+ "\x81\x7b\xfe\x04\x40\x12\xbf\x8b\xe1\xa3\x2b\x4f\x36\x98\xa1\x5d"
+ "\xa0\x65\x92\x84\xfa\x23\xb3\x7e\x93\x8c\x9f\x49\x24\xc9\x5d\xd5"
+ "\x64\xf4\xe0\xb0\xa1\x66\xb2\x8e\x48\xb3\x5c\xf5\x95\x31\xb6\x3b"
+ "\x6e\x9f\x9c\xed\xac\x28\x87\x56\x0e\x87\xac\x22\x3a\x8e\x9a\xb0"
+ "\x7d\xfb\xba\x4a\x92\x7e\x35\x55\xc2\x96\x08\xd7\x4d\x2e\x51\xca"
+ "\x67\xd8\xb5\x11\xa3\x72\x9c\xcb\xc8\xf4\x56\xaf\xcf\xc4\xb1\xa0"
+ "\xd9\x7e\xe6\x38\xaf\xc0\xf5\xf7\x07\x91\x06\x7a\x39\xc4\xc6\x51"
+ "\x39\xca\xee\x7c\x2e\x45\xdb\x3c\x2a\x67\x00\xbe\x99\x18\xbe\xf3"
+ "\x55\x32\xed\xaa\xe8\x32\x79\xcd\xb7\x93\xd7\x1e\xa0\x83\xb8\x4f"
+ "\xd8\x57\xa8\x93\x6d\x59\x86\x51\xef\xd2\x38\x6e\x97\x49\x3f\x87"
+ "\x6a\x3a\x45\xcf\xdd\xb9\x77\x90\x72\x7c\xee\xbb\x27\xf5\xfd\xff"
+ "\x0c\xba\x9e\x2b\xf7\xd1\x5d\xfb\x74\x5b\x06\x63\xee\x73\x1b\xc1"
+ "\x1b\xd2\xfe\xc4\xfb\x63\xfc\x3d\x1a\xa4\x35\x18\x79\x12\xdb\x33"
+ "\xbc\x16\x2f\x3c\xcc\x07\xe2\xdc\x3f\xbb\xf8\x8c\xcb\x20\xfe\x30"
+ "\xc3\xbc\x8e\x9b\x78\x4f\x72\xc8\x08\xe8\x1f\xe7\x59\xd1\x17\x71"
+ "\x51\x06\xc4\xc9\x14\x31\xd1\x55\xe1\x73\x22\xbf\xad\xfb\x0c\xc6"
+ "\x82\x23\x3c\x17\x49\xfa\xd9\x82\xf7\x4c\xde\xd0\x69\x8f\x77\xbd"
+ "\x46\xed\xb0\x2b\xbd\x75\xa7\x3d\x2a\xfe\x69\x84\xda\xe8\x2f\xd4"
+ "\xe6\xf8\x73\xa5\xb7\xf2\x2f\x48\x17\x95\x4c\xe7\xbe\x73\x62\x8e"
+ "\xd7\xfc\x11\xf1\xf7\x91\x78\x8c\x03\xdd\xed\xa7\x68\xc9\xc2\x03"
+ "\x80\xf3\xd6\x5f\x01\x4b\xc6\x4e\x9b\x42\x07\x71\x1f\x74\x2d\xe9"
+ "\x1f\xff\x12\xc6\x9c\x49\xf2\x6c\xb2\x3a\x1e\x33\x69\x18\x4b\x39"
+ "\xc6\x1d\xc6\xd0\x49\xdc\x2e\x3c\x67\xf1\x33\xae\xe3\xf9\x6a\x5d"
+ "\xeb\xd9\x61\x0d\x3f\xc6\x63\x6b\x3e\x8f\x9b\x48\x9f\x53\x7f\x4e"
+ "\x8e\xb5\x79\xfa\xf3\x0c\xfd\x39\x57\x7f\x9e\xa6\x3f\xe7\xe8\xcf"
+ "\x93\xf9\x59\x8d\xc9\x4b\x2d\xfd\xf6\x82\x69\xd8\x61\x3c\xdb\x8c"
+ "\xbe\x00\x3e\xc3\xad\x8e\x35\x72\x6c\xd7\xf1\x98\xa4\xe3\x95\xa5"
+ "\x3f\x1b\xf8\x5c\x69\x0d\xaf\xf9\xdf\xc2\xa7\x36\x0e\x9f\xdd\x51"
+ "\xf8\x90\xd5\x91\xf3\x45\xf0\x49\xb7\xf2\xf7\x29\xfe\x07\xf8\x30"
+ "\x2e\x9c\x16\x74\x95\x65\xc6\xe2\x53\x96\x6d\xe0\x93\x90\xdf\x96"
+ "\x8b\x2e\xb6\x6b\x96\x7e\x49\xc6\x80\x1e\xc6\x36\x4b\x7d\xaf\x11"
+ "\xaf\xb0\xac\xec\x42\xf1\x0a\x21\x0b\x18\xb7\xcb\xd0\xfe\xb2\x69"
+ "\xba\xfd\xd6\xa8\xec\xfc\xb2\x3d\x86\x0f\x19\xda\xba\xbb\x5a\xb5"
+ "\x75\xcf\x7a\x8e\xd9\xb7\x92\xbe\xec\x74\x88\x2e\xcc\xbb\xff\x93"
+ "\xe7\x86\xd1\x70\x4b\xca\x96\x2e\x7d\xf6\x36\x7b\xc9\xbc\x45\xf3"
+ "\xed\xe3\x8a\xec\x4b\x8b\x17\x2e\x28\x9b\x1f\xeb\x57\x91\xae\x7f"
+ "\x37\x48\x9e\x17\xe1\xb9\x94\x9c\x4b\x83\xff\xa5\x9e\x94\xbe\x79"
+ "\xcb\x9e\x15\xae\xb2\x0e\xd6\xb9\x3b\x5f\x52\xdf\x97\x0a\xba\x96"
+ "\x4d\x36\xc6\x10\x63\xfe\xcb\x63\x08\xd2\xe7\x60\x9c\x3c\x12\x95"
+ "\xce\x79\x8b\x8d\x34\x86\xaf\xeb\xa6\x61\xc7\x68\x59\x0a\xd7\x99"
+ "\x90\x86\xe7\x04\xe6\x01\xf9\xfc\xed\x0c\x13\x74\x8a\xe0\xf8\x5b"
+ "\x7c\x0e\x13\xe5\x04\xf0\x91\xf3\x8a\x39\x78\x56\x73\x36\xc1\x38"
+ "\xb6\xa1\xcc\x2e\xa4\x99\xd9\x86\xc0\x3c\xb0\x8b\xcb\x21\xfd\xef"
+ "\x1c\x0f\x03\xe9\x16\x3d\xae\x18\xa7\x7d\xc6\xf1\x2a\x90\x96\x3e"
+ "\x90\xb6\x7c\x38\xd2\x6c\x48\xb3\x2b\x78\xcb\xaf\x64\x3a\xe3\x39"
+ "\x47\x5f\x27\xe3\x3c\x13\xf5\x7a\x2b\xa3\x71\xe6\x6f\xc7\xdc\x74"
+ "\x63\x96\x7d\xce\x43\xdf\x98\x72\xfb\x93\x8b\x17\x2d\x48\x25\x49"
+ "\xf6\x4c\x0c\xc7\x59\x37\x39\xae\xbb\xcd\x5e\x3a\x7f\xfe\x12\xfb"
+ "\x8a\xf9\x8b\xca\xec\xf3\x56\xcc\x5b\x99\x4a\x0b\x16\x2f\x79\x92"
+ "\xa3\x2d\x70\xb7\x2c\x2d\x78\x72\xc1\x53\xec\xfc\xa2\x72\xa7\xc6"
+ "\xd8\x09\x73\x58\xb7\xe9\xf1\x49\x0e\x55\xb3\x0d\x99\xf2\x67\x07"
+ "\xee\x39\x6e\x97\x0d\xd7\x16\xfc\x1a\xf1\xdb\x8f\xdf\x11\xfc\x0e"
+ "\x9f\xa0\xd5\x61\x5c\xf7\x05\x5d\xcb\x8f\x1a\xf6\xca\x00\x0f\x2d"
+ "\xf7\x1b\x3c\x04\xfb\x62\x9f\x1a\xdf\x56\xd8\xdb\xc3\x52\x7e\xfa"
+ "\x79\xaa\xfa\xdc\x00\x4f\x71\xdc\xd1\x76\xf6\xed\x5a\x8e\xf7\xbd"
+ "\x72\xcd\x92\xd7\x4c\x52\x98\x6e\xc7\x69\xd5\xe5\xf5\x5b\x05\xfb"
+ "\x98\xf1\x7a\x6e\x0b\xf8\xa5\x55\xc5\xa9\x59\x51\x87\x7c\x57\xa3"
+ "\x8e\x46\xbd\x0e\xf5\x3c\x4a\x1c\xe2\x6f\xc7\x1c\xd3\x9f\x19\xd6"
+ "\x71\x5a\xf9\x26\xdf\xf3\x55\xdf\x43\xb5\xea\xdf\x96\x33\x0d\xbc"
+ "\x73\x4c\xd7\xeb\xe0\x6f\x0c\x55\xee\x74\x89\x90\x31\x77\xe6\xb5"
+ "\x62\x6b\xd2\x1d\x02\xf8\x9c\xd6\x92\x1f\xed\x90\x71\x30\x2b\x7b"
+ "\xa1\x23\x6e\xbe\xd9\xeb\x90\xf9\x93\x78\x2d\x79\x56\xa9\xd0\xf8"
+ "\x3b\x54\x5a\xf2\x33\x1d\x5c\x4e\x58\xfe\xec\xd0\x36\x0f\xcf\x51"
+ "\x36\x03\xc7\x1f\x74\xd8\x75\x98\x21\xa6\xed\x09\x5a\xfe\x27\x35"
+ "\x0f\x5f\x1d\x56\xb6\x84\x63\xbc\xe1\x73\x09\x19\xcd\xc4\xf3\x64"
+ "\x43\x07\xf8\xc8\x61\xd1\xfd\xe3\x3c\xaa\xfd\x8e\x32\xfd\x79\xbf"
+ "\x8e\x63\x12\xc7\x44\x01\xfe\x87\xb9\xef\x60\xaf\xec\xc7\xfd\x11"
+ "\xd0\xa7\x55\xd1\xc7\x21\xfd\x7c\x61\x37\xf1\xfb\x23\xfc\x9d\x1d"
+ "\xbc\x3b\xa2\xe2\x8d\xac\xd8\xc3\x6d\x1e\xf0\xa1\xad\xcb\x01\xfd"
+ "\xde\xe4\xbd\x66\xc8\xd2\x7e\xef\x39\x96\xcf\x15\xbb\x01\x6f\xaf"
+ "\xa1\x77\x58\xcf\x14\x44\x20\xa7\x72\x3e\xe5\xe8\x34\xf4\xcd\x00"
+ "\x1f\x38\x42\x89\x74\x49\xa2\x7e\xd7\xfb\x66\x9e\x70\x2d\x9f\x0c"
+ "\x9c\xf6\xca\x3e\xe0\xb8\xac\xe7\xfa\xe7\x6d\x7d\x4a\x47\xae\x9c"
+ "\xd1\x3f\xc7\xd4\xf1\xe0\x38\xf0\x3e\xc6\xad\x57\xee\xff\xeb\x7a"
+ "\x63\x65\x99\xa1\x37\x0c\x38\xd6\x24\xa1\x59\x1d\xf8\xe7\x6e\x73"
+ "\xf0\x5e\x09\x8f\x97\xd2\x1e\x01\x9c\x11\x67\xd5\x59\x38\xad\xaa"
+ "\xcd\xe1\xa3\x95\xe3\xf9\x5b\x73\xd2\xa6\x75\x2d\x9f\x3d\xa0\x8b"
+ "\x56\x1e\x8a\x86\x29\x2c\x6d\x0e\x86\xcb\xfa\x88\x6d\x92\x82\x88"
+ "\x99\xe3\xd1\x38\xf4\xf1\x05\x3a\x78\x65\xc8\xc0\x15\x34\x3c\x64"
+ "\xe0\xab\x7f\xeb\xec\x10\xea\xc9\x9f\x1d\xe9\x63\x9f\xf0\x16\xd5"
+ "\x9f\xab\xa5\xbe\xc1\xbb\x3d\x41\xd7\xaa\x49\x3e\x5a\xe6\xd6\x65"
+ "\xa8\x15\xe5\xf7\x34\x57\x4c\x43\x9e\x55\x79\xba\x5f\xf3\x61\xf4"
+ "\xef\x91\x28\xde\x9f\x1e\xb5\xce\x73\x44\xf5\xe1\xed\x95\xc7\x68"
+ "\x55\x4d\x54\xba\xde\xb7\xcd\x79\xc7\x68\xf5\x74\xb5\x66\xd2\x96"
+ "\xad\xca\xaf\x92\x36\xaa\x81\x23\xeb\x02\x3e\xb7\xc7\x32\x2e\x69"
+ "\x2f\xfb\x78\xd5\x21\x63\xbc\x00\xac\x7d\x92\xe6\xa3\x44\x23\xd3"
+ "\x49\xc5\xfd\x58\xbe\x48\xd1\x69\x95\x3f\x86\xf6\x3c\x6e\xa2\x1e"
+ "\xa6\xd3\x88\xb5\x42\x1b\x11\x48\x12\x05\x2b\xcd\xc4\xf2\xc2\x32"
+ "\xce\x7b\x84\xe0\x0f\x69\x57\x29\xba\xad\xce\x32\xe8\x66\xf4\x1d"
+ "\xd3\xc9\x47\xab\x1a\x98\xb6\xb1\x6d\x1c\x76\xf8\x98\xd1\x76\xd0"
+ "\x94\x63\x9b\xe2\x79\x9a\x2e\x17\xad\x9e\xd1\xec\x43\xb2\xe2\xde"
+ "\x66\xf3\x37\xa8\xd9\x31\x89\x14\x6d\x57\xd7\xa0\x1d\xfe\xa8\x79"
+ "\xc9\x21\xa6\x2f\xcb\x0a\xf0\x2c\xd3\x63\x70\x1d\x52\xfe\x4c\x2b"
+ "\xa6\x89\xaa\xb6\x32\x29\xcb\xcb\x65\xac\x14\x8e\xdf\x7b\x98\x69"
+ "\xc4\x7a\x91\x65\x89\x65\x80\xe5\x49\xd1\x68\x75\x77\x14\x8d\x5a"
+ "\x98\x3e\x3a\x9d\xf6\xc5\xe9\xf2\xf9\xf6\x92\x29\x4a\x17\xdb\x33"
+ "\xc7\x15\x4d\x90\x01\x6f\xec\x77\x4f\xbd\xcd\x9e\x37\x65\x9c\xa3"
+ "\x78\xfc\x2c\x75\x99\x9a\x37\x83\xaf\xa9\xb1\xf3\x3a\x7b\xd0\x55"
+ "\x3e\x27\x76\x6e\xb8\xd6\xa7\xf4\x47\x79\x89\x2f\x69\x84\x8c\xe3"
+ "\xc2\xf1\x67\xab\x17\x11\x45\x80\xf7\xe6\x13\xe8\x53\x4b\x5b\x06"
+ "\xc7\x3b\x9e\xed\x20\x8e\x8f\xfe\x59\x3d\xde\xed\x44\xfa\x88\x52"
+ "\xfe\x96\xc2\xdf\x84\x96\xd2\x96\xc1\x6b\x36\xa2\xaa\xa9\xc3\x9f"
+ "\x22\x6c\xfe\x14\xcd\xe7\x4f\xf9\xc0\x3c\xfd\x3a\xa7\x00\xdc\x16"
+ "\xa3\x5d\xbc\xb6\x03\x3a\x65\xcc\x76\x88\x08\xd3\xa8\xc0\xc1\x31"
+ "\xc9\x01\x3b\x99\xd7\x76\xca\xd1\xfe\xe7\x32\xd5\xfc\xb5\x1c\xfc"
+ "\xbf\x7c\xa3\xae\xcb\xf2\x82\xae\x35\xb0\xff\x6e\x95\xbe\x00\x9a"
+ "\xcb\x26\x63\x99\x6b\xeb\xae\x7f\x50\x54\x69\x3e\x03\x26\x60\x0d"
+ "\xd5\xfd\x1f\x24\xbc\x2f\xea\x5f\xab\x6d\x68\xcf\xb2\x26\xa9\xf8"
+ "\x90\x90\xf1\xca\x7a\x93\x96\xdf\xef\x2f\x83\x77\x23\xd6\xa6\xb3"
+ "\x3f\x4d\x3e\x78\xaf\x92\xf3\x18\xef\xaa\x5d\x9a\xaf\xda\xa4\x85"
+ "\xd0\x8f\xe9\xca\x7e\xee\x66\xfd\x89\xb9\xeb\x9a\x7d\xc6\xb8\x26"
+ "\xc7\x43\x13\x55\xaa\xf9\xcc\x1a\xe9\xf7\x79\xc6\x65\x26\x1f\x95"
+ "\x4f\xbb\x26\x43\xce\x51\x42\x9a\x2b\x89\x94\x4f\xf3\x9a\x1f\x1b"
+ "\x3a\x96\xf7\x4d\xad\x6b\x85\x9f\xd7\x88\xad\x61\xe1\xe7\x3d\x54"
+ "\x39\x76\xd0\x09\xf2\x96\x07\x2b\xbd\xf2\xdb\x9f\xfc\x0d\x92\x80"
+ "\x3e\x6e\x44\xd4\xb8\x81\xfa\xfd\xc9\xd7\x17\x62\x7c\x48\x3a\x41"
+ "\x6b\x1c\x8c\x3f\xd3\x86\xf7\x5a\x34\xd0\xca\xcb\xe3\x24\xd3\x27"
+ "\xd5\xbb\x97\x7d\x61\xb8\xad\xd6\x30\xda\x1c\xdd\x2e\x93\xe6\xdb"
+ "\xec\x42\xbb\x4c\xfc\x1d\x8f\x93\x2c\x33\x21\xf6\x51\x82\xbc\x8d"
+ "\x92\x71\xad\xe5\xfc\xbc\xa2\x36\xba\x8d\xac\xff\x55\x1b\x2a\xde"
+ "\x49\xd4\x46\x61\xe2\x36\x32\x0d\x2a\x36\xe9\xf2\x26\xf1\x64\xfd"
+ "\xd1\x4d\x15\x33\x46\xac\x65\xdf\xa0\xb6\x0c\xe8\xb7\xa9\xdc\x87"
+ "\x18\x3f\x6b\x18\xcf\x44\xfd\xc5\xf0\x14\x2c\x67\xbe\x75\x6d\x65"
+ "\x61\xd0\xe5\x1c\x9b\x98\xde\xce\xe9\x17\xa6\xb7\xf3\x4b\x5c\x9e"
+ "\xf1\xe0\xfd\x1d\x6b\xd8\x04\x1d\xac\xf9\x30\x5f\x73\x27\xaa\x77"
+ "\xc4\xda\x06\xc6\x2b\xe1\x3b\xc1\xf2\xa2\xeb\x20\xf0\xa1\x80\x9c"
+ "\x08\xd6\x49\xc0\xcd\x63\xe8\x23\x6b\x92\x3d\x59\xea\x07\x93\xa8"
+ "\x49\x04\xc3\xba\xb6\x86\xf7\xb9\xa6\xa2\xfe\x84\xef\x35\xfe\xce"
+ "\x87\xbb\x8d\xb4\x75\x5f\xbf\xc6\x9a\x44\x77\xf8\x93\xbf\x9e\x6a"
+ "\x75\x84\xc7\x32\x0d\x01\xd3\x01\x39\x6e\xe3\x79\xaa\x5a\x1b\xa9"
+ "\x84\xfd\xff\xe2\x6e\xb9\x46\x99\xd2\xa6\xef\x1b\x55\x62\xfc\xab"
+ "\xed\x34\xd6\xe6\xf1\x3c\xd7\x47\xff\xa5\x62\xf5\x26\x7f\x79\x9b"
+ "\xd8\xf0\x3e\x6c\x11\xab\xb0\xaf\xb2\xc2\x8e\xac\x3c\xab\x09\xfe"
+ "\xa6\xc3\xfb\x9e\x01\x3e\x51\x7e\x53\x06\x9f\xa0\x7c\x5d\x62\x1e"
+ "\xa8\x6c\xba\x30\x0f\x54\xbe\xc8\xef\x99\xee\x6a\xae\x52\xd9\x69"
+ "\xd8\x29\x62\xdd\x97\xb7\xd9\x2b\x64\xfd\x0e\x55\x37\xd3\x24\x87"
+ "\xf1\x9f\x01\xba\x54\x06\x5d\x6b\xd3\x0d\x3d\xc0\xfc\x62\x8d\xf0"
+ "\xf7\x2e\x48\xf2\x34\xde\xc1\xfe\x29\xab\x54\xeb\xe0\x1f\xb8\xe5"
+ "\x77\x33\x5d\xe5\x16\xbf\xb3\x78\x3b\x7f\x1f\x36\x90\xd2\x56\x8e"
+ "\x3c\x79\x3e\xfa\x0f\x65\x57\x58\xda\xca\x00\xc3\xb1\x45\xf9\x45"
+ "\x5b\x64\xdc\x28\xc8\x34\xc7\x8a\x62\xb9\x46\x5a\x06\xf0\xe6\xb8"
+ "\x51\x98\xef\xac\x75\xf7\x8f\x4b\xae\x1c\xe8\x0a\x21\xcf\x36\x61"
+ "\x5c\x1a\xd3\x03\xda\xbd\x62\xd2\x76\x9f\x9b\x60\x23\x6e\xf3\xb9"
+ "\x75\xa3\x77\x7f\xff\x46\x32\xff\x5f\xdb\x13\x54\x7a\x13\x65\xac"
+ "\xfd\x86\x99\xfe\x2b\x9b\x4c\x4c\x07\x1f\xad\xad\x55\xb4\x5b\xdb"
+ "\x61\xf4\x8f\x8f\x2a\x73\xa4\xee\x5c\xf7\x68\xd7\xec\xb0\xf8\x4c"
+ "\xad\x73\xaf\x85\xfe\x5b\x94\xae\xde\x97\x17\xc6\xaf\x01\xb1\x3d"
+ "\x6f\x5f\xb8\xd4\x5e\xb4\x78\xc5\xa2\xab\xaf\x8e\x99\x2b\x99\xd5"
+ "\xf7\x78\x5d\x69\x6a\x3c\x75\xe5\x18\x78\xb3\x5d\x82\x67\xb4\xbf"
+ "\xfc\xbc\x98\xf6\x33\x0a\x74\x77\xf7\x82\x2c\x1a\xb8\x9f\x48\x33"
+ "\x26\x46\x3d\xde\x4c\x33\x6e\xba\xb9\xe0\xc1\xf9\xf3\x8a\x56\x46"
+ "\xa5\xde\x12\xbd\x6e\x58\xbd\x0d\x75\x27\x8f\xbe\x0b\xba\x22\x69"
+ "\xd6\x6a\x1e\x5b\xd6\xdd\x52\x11\x16\xff\x80\xbe\xe6\xb8\x35\x05"
+ "\x6d\x65\x61\x6a\x83\x2e\x13\x5f\x66\x1d\x3e\x4c\x9d\xf1\x84\x3d"
+ "\x05\xde\xb2\xa2\xed\x7e\xd8\x75\x67\x79\x7d\x06\xe5\x1e\x6e\xaf"
+ "\xe5\xd8\xce\x1f\xa4\x29\x1b\x63\x5d\x06\xd2\x2f\xc5\x75\x0a\xae"
+ "\x43\x71\xbd\xd3\xbe\x08\xf3\x1e\xf6\xa9\x5f\xce\x3e\xf5\xeb\xae"
+ "\x93\x7e\x41\x81\x4a\x62\xdf\xa0\xe3\xe4\x6a\x65\x1b\xc4\x47\xeb"
+ "\xca\x79\x1d\x9c\xf3\xa2\xcc\xe5\xf6\xa7\x29\x8b\xaf\x42\xee\x0d"
+ "\xae\xcb\x10\x55\x1f\xa4\x89\xed\xf9\xfc\x5d\xb7\xb1\x48\x5f\x99"
+ "\x9c\xf4\x29\x25\xdb\x2c\x29\x41\xd7\x3a\xd8\x72\x8b\xe4\xb7\x18"
+ "\x06\xfb\x06\xae\xfc\xf6\x70\x9c\x7d\x38\x60\x1b\x6e\x20\x69\xdf"
+ "\xea\xf6\xdc\x4e\x39\x2e\xac\x6b\x8d\xb2\xe9\x78\x6f\x3a\x55\xd9"
+ "\x27\x22\xa2\xec\xd3\x75\xdd\x86\x1c\xe0\x3e\x64\xf0\x69\x4c\x9c"
+ "\xbd\x45\x65\xf3\x97\xcc\x2f\xb2\x8f\x5b\x9a\x4a\x51\x51\xf6\x8a"
+ "\xe7\x2f\xb2\x2f\x99\xff\xdc\xb2\xf9\x4b\x65\x84\x3c\x7e\x1b\x33"
+ "\xe6\x43\xdf\xff\x29\xcb\x38\xff\x65\x1f\xcd\xf4\x5d\xff\x18\xc7"
+ "\x66\x13\x1b\xfe\xc4\xf6\xb2\xdc\x2f\x14\x69\xa3\xf2\x63\xe7\x1b"
+ "\xcf\xeb\xdf\x6b\x78\x3f\xac\xe6\x3a\xcf\xcb\xd8\x86\x48\xb7\x0c"
+ "\xc4\x81\x5f\xff\x0e\x68\x69\xd2\xe9\x76\x26\xe8\x5a\xbf\xd7\xa0"
+ "\x9b\x8f\xbe\x97\xad\xdb\x52\xdd\x52\x7f\x60\x8c\x85\xfe\x8b\x19"
+ "\x5f\xd5\xb7\x6f\xd7\xef\x07\x6f\x24\xcb\xf5\xe4\x94\x0f\xe4\xbc"
+ "\x8a\x61\x1e\x47\x79\x51\xf5\x3e\xeb\x4d\xd6\x6f\x6e\x03\x1e\xea"
+ "\x6c\xe0\xfa\xf4\x79\xd0\x15\x27\xe8\x79\x79\x2e\x47\x73\x7f\x40"
+ "\xac\x53\x38\x96\x88\x56\xf5\x81\xfe\x6d\xe3\xef\x65\xcb\x75\x58"
+ "\xfe\x16\x01\x60\xf1\x3a\x30\x74\x43\x3a\x7f\x27\x99\xd3\x54\x8c"
+ "\xb8\xf5\xf2\x5c\x04\xea\x0a\x05\x5d\xcf\x97\x0e\x9c\x71\xf8\x9e"
+ "\xb4\x3b\x19\xae\x8f\x9e\x9f\xc4\xf0\x54\x0c\xbc\xe7\xb7\xf8\xc8"
+ "\x55\x37\x60\x3f\x3d\xdf\x11\x35\x2f\x03\x3e\x0a\xcf\x00\x70\x91"
+ "\xf1\x56\x95\xcf\xa9\x6c\x37\xeb\xcf\x2d\x7a\xdb\x8d\xf6\x00\x1e"
+ "\xf4\xdf\x3a\xb7\xe1\x37\xe1\xd3\xdb\xcd\xf8\x31\xee\xd1\x38\xeb"
+ "\xf8\xa6\x33\xbe\x41\xd7\xf7\xc6\x44\xc9\x36\xaf\xcb\x0c\x41\x5a"
+ "\xd6\x80\x2f\xfb\x7a\x47\xbc\xde\x58\xbc\xc8\x5e\xb2\x70\xd1\x33"
+ "\x05\x2b\xe6\x3d\x33\xbf\x60\x59\xe9\x78\xfb\xb2\x45\x4f\x94\x2c"
+ "\x7e\xf2\x19\xe6\x9a\xa5\x65\xcb\x9e\x7c\xc6\xce\x9a\xa5\x60\xda"
+ "\x8c\x19\x05\x77\x7d\xfb\xa1\x87\x53\xe9\xae\x79\x48\xc3\xcc\x7f"
+ "\x46\xd6\x78\xf5\xea\xc1\xe9\x53\xbf\x53\x30\x75\xf6\xb7\x67\xcd"
+ "\x91\x87\x5f\xfa\xdf\x4f\x5b\x94\x38\x43\x0c\x1f\xa6\x83\x97\x42"
+ "\xe8\xdf\x21\xc7\xa8\x6a\x9f\x8a\x9b\xfe\xbd\xce\xd8\xb8\xe9\xdf"
+ "\x83\x36\xff\xbe\x0d\xbf\x49\x44\xee\x62\xfc\xf0\xa6\x6a\xb7\xe2"
+ "\xaf\x94\x47\x83\xae\xef\xa7\x0f\xf0\x57\x95\x3c\x53\xc6\xfe\x4a"
+ "\x6a\x7d\xf6\xfb\xd0\xff\xeb\xb3\xa2\xdf\x0d\xcc\x27\xbf\x9f\xdb"
+ "\x3f\x9f\xec\xd7\x29\xdf\x2f\x33\xe6\x96\x48\x33\x63\x5e\x99\xc2"
+ "\xf3\x4a\xb5\x9e\x54\xf5\x4b\xc9\x53\x83\xca\xb7\x85\x8c\x79\x25"
+ "\xcb\xb6\xdc\x93\x92\xf3\x8f\xef\xef\x8d\x96\x71\xb9\xa6\xaf\xcb"
+ "\x38\x97\x93\xeb\x77\x69\xa3\xa6\xf1\x9a\xb6\x3f\xe5\xfd\x10\x6c"
+ "\x05\x8c\x5f\x41\x21\x86\x8f\x9a\xa6\xe3\xe4\xe7\x35\x6e\xb6\x9b"
+ "\x75\x7e\x1a\x71\x82\xdc\x37\x08\xd7\xf7\xa6\xa9\x39\xe5\xf7\x96"
+ "\xb1\x5e\x17\xeb\x46\xdf\xc5\xbe\x45\x3c\x77\x0a\xba\xdc\x63\x07"
+ "\x78\xb6\x6a\x1f\xf3\xc2\xc0\x5c\xd6\x1d\xa3\xff\x7b\xe4\x37\x0c"
+ "\xdd\x73\x8c\xb8\x0f\x65\x57\x93\xc9\x7c\x75\x0d\x6d\x31\x89\x4a"
+ "\x1f\xb9\xe5\xbc\x95\xe9\xe9\xa3\xef\xdb\x91\xd7\x3c\x40\x3f\xb7"
+ "\xbb\x9f\x7e\xfa\x3a\x8b\xb1\xc6\xa2\xf0\xae\xfa\xe5\x60\xb4\x4a"
+ "\x4c\x27\x77\xc7\xe7\xd2\xc9\x45\x43\x58\x26\x0d\x7a\x9d\x4f\xab"
+ "\xaa\x31\xe7\xd3\xaa\xea\xd9\x28\x5a\xbd\x72\x3e\xad\xaa\xf2\xa2"
+ "\xf6\x95\xf4\x75\x94\xaa\x5f\x32\xcd\x98\xc7\xd0\x6e\x33\xf8\xec"
+ "\x95\x01\xfa\x55\x55\x9e\x4f\xbf\xaa\x2d\x89\xe9\x57\x95\x75\x4d"
+ "\x2c\x9c\xed\x89\xc6\x8d\x11\x6b\x4d\xfa\xb9\xb0\x0d\x29\x2d\x63"
+ "\xe4\x9c\x34\xf4\xb2\x49\x2b\x7e\xd9\x85\x1f\xae\x3c\x8f\x18\xb0"
+ "\xc5\x45\x48\xb5\x75\x83\xa5\x05\x73\x5e\x5e\x57\xba\xc0\x58\x74"
+ "\xd4\x58\xf3\xc0\x7d\x07\xcf\x9d\xf9\xdb\x50\x9c\xce\xf4\xc4\x9c"
+ "\xcb\x0f\x7e\xef\x50\x76\xe9\x86\xfc\xfe\x35\x97\x6b\x57\x36\x24"
+ "\xaf\x25\x7b\x73\xdd\x4d\x9c\x5e\x8a\x76\x48\xbf\x45\xf6\xdd\x1a"
+ "\x0c\x66\x41\x24\x87\x06\x81\xdb\xcf\xff\x83\x9d\x8d\x8e\xd3\x47"
+ "\xc5\xf3\x16\x15\x2d\x5e\xb0\xe0\xf3\x55\x51\xf4\xbe\x5a\x8d\x4b"
+ "\x73\x07\xf9\x1b\x9d\xeb\x9e\x5e\x15\x74\xbd\xc0\xf6\x7f\xa1\x1a"
+ "\x37\x5f\x80\xfe\x7b\x7a\xb2\xb2\x25\x1f\xed\x52\xe7\xc1\x5f\xd8"
+ "\x18\xa5\x9f\xc1\x23\x2f\xd4\x0a\xd7\x86\x23\x03\x7d\xfc\x42\xd1"
+ "\xf9\x7d\xfc\x82\x23\x71\x1f\xbf\x50\xa7\x2d\xe7\xf3\x38\x2f\x60"
+ "\xfe\xb3\x44\xda\x9a\xfc\xcc\x7e\x10\x98\x33\x77\x61\xbe\xdc\x3d"
+ "\x7b\xa5\xe7\x8e\x82\x95\x49\x72\xaf\x98\xbf\xc1\x12\x3e\x27\x3a"
+ "\xd9\x17\x81\xf7\xc7\xf8\x1b\x2c\xfc\xed\x25\xfe\x56\xa8\xcc\x83"
+ "\xfb\xea\xe3\x24\xe7\x8e\x78\x6f\xaf\x3f\x2e\xbf\xcb\x0d\x5b\xe1"
+ "\x85\x90\x61\x5b\x5b\xd7\xda\xe5\x39\xf5\xcd\xaa\x3f\x3a\xb8\x2f"
+ "\xb8\xbe\x82\x95\x1e\x55\xc7\x39\xfe\xb6\x1a\x59\x95\x0d\xb1\x31"
+ "\xeb\x82\x6b\xf7\x29\x62\xb0\x58\x68\x16\x61\xaa\x1c\xd6\xbf\x57"
+ "\xa9\x7f\xff\x98\x65\x9f\xfd\x48\x01\xd7\x1d\xef\x87\xaa\x7c\x87"
+ "\x36\x36\x18\x3e\x59\xd5\xd2\x07\x8a\xac\xac\x3f\x79\x9e\x73\x9c"
+ "\x36\xf2\x1a\x06\xc6\xcb\x8d\x2d\xd1\x7b\x9c\xf6\x55\x6b\x87\x9e"
+ "\xa2\x8d\xcf\x5e\x60\xdf\x34\x6d\xc0\x07\xb6\x72\x58\xd0\xb5\xc9"
+ "\xdc\xef\x23\xe6\xaa\x1c\x56\x1f\x85\x1b\xde\xd9\xa3\x7c\x15\xfd"
+ "\x3c\x1e\xf3\xfc\xb1\x5e\x7d\x83\xd5\x7f\x9c\x36\x4d\x47\x1a\xe6"
+ "\x13\x9b\xe4\x99\x87\x15\x61\x1a\x53\x7a\x3b\x7f\xbb\x67\xd3\xb3"
+ "\xfa\x3c\xb4\xdb\x5e\xc1\xf8\x6c\x1a\xce\x70\x7d\xc8\x27\xe4\x7e"
+ "\xc0\x26\x47\x3f\xce\x51\xf5\x19\xb0\x15\x4d\x36\xd5\x19\x78\xa1"
+ "\xdc\x1c\xb9\xd7\x5a\x1e\xbb\xbf\xe7\x58\xb0\xb0\xa0\xb4\x78\x65"
+ "\xc1\xc2\x45\x0b\xcb\x52\xc9\x31\x6f\xd9\xc2\x09\x48\xb2\x3f\x59"
+ "\xbc\xb0\xb4\x60\xa1\x8c\x5a\x2c\x03\x22\x97\xad\x2c\xe5\xbd\x8f"
+ "\xf3\xf6\xe0\xd3\xa5\x2d\x6f\xda\xb4\x4f\x8d\xf7\x9b\xd3\x0c\x3e"
+ "\x95\xdf\x1c\x17\xf9\x34\xe0\x7b\x25\xbf\x4d\x9c\x7c\x9c\x36\x7f"
+ "\x93\x79\x58\xc5\xf9\xa9\xce\x53\xf6\xc5\xe6\x69\xe7\xfb\x64\x6d"
+ "\xce\x37\x7c\xb2\xc0\xdf\xe9\x2c\xeb\x51\xb0\xc0\xff\x9b\x1d\x09"
+ "\xca\x6c\xec\xf7\xef\xd4\xbf\x77\xce\x7d\x25\xe3\xde\xbf\xc4\xfa"
+ "\x76\xd3\x7b\x5e\xc7\x74\x8e\xdd\xab\xcb\xd5\xe6\xc6\x28\x7c\xa5"
+ "\x2f\x2f\xc3\xe2\xf3\x52\x13\x42\xd1\xbe\x6c\xd5\x53\x30\xf6\xda"
+ "\x8c\x7a\xec\xab\x4d\xd0\x77\xd5\x97\x06\x4c\x9e\x64\xe9\x87\x8c"
+ "\x72\x41\x57\xb5\xc5\xf0\xa3\xf1\xf5\xb7\xab\x7a\x4c\x3c\x8e\xc0"
+ "\xfd\x6a\xa4\x4f\x1a\xf0\x13\xdc\xcc\x7e\x9e\x35\x48\xc3\xf8\x5f"
+ "\xbd\x2b\x3a\x2d\xba\x9f\xee\x9c\x3e\x03\x06\xf4\xd2\xf9\xe8\xa4"
+ "\xa9\xf3\x4a\x4a\x58\x07\xcd\x9b\x5f\xb2\x6c\xc9\xe2\xa5\x7a\xd7"
+ "\xdd\xb9\x80\xc3\x51\xcb\x2c\xb7\xe9\x6f\xec\x8b\xe6\xcf\x2f\x52"
+ "\x49\x7a\x47\xc6\xee\x59\x29\x3f\x86\x6a\xcc\xff\x37\xfa\x06\x6c"
+ "\xc5\x1a\x9b\x30\x55\xcf\xc5\xef\x29\xa9\x7f\x64\xbf\x56\x77\xc6"
+ "\xce\xd1\xaa\x03\x86\xec\xcb\x7e\x76\xe6\xcb\x6f\x22\xf7\x08\xb9"
+ "\xc7\x83\x7e\x7d\xf1\x5e\xb4\x73\x08\xe6\x8f\xb9\x3c\x37\x19\x80"
+ "\x53\x33\xbe\x9f\xde\xeb\x1e\xed\x58\xa7\x7c\x26\xcc\xd0\x0d\x66"
+ "\x8e\x2d\x81\xf7\x98\xff\x6f\x9c\xa3\xf4\x64\x4d\x7e\xff\xde\x8b"
+ "\x29\x19\xf3\xcd\x9a\x62\xcc\x3d\x76\x9f\x2f\xdf\x35\x95\xe7\xcb"
+ "\x3d\xfb\x5a\xd6\xd4\x1a\x34\x36\x78\x41\xf1\xdf\x8b\xb7\x18\x6b"
+ "\xc6\xf5\xfa\xb7\x11\xf8\x9e\xcb\xf2\xbc\x42\x8c\x18\x7e\x07\xfb"
+ "\x35\x1c\xa3\x17\xcd\x8a\xa7\x6a\x7c\x51\xbe\x81\xe9\x27\xe8\x45"
+ "\x52\x7d\x5b\x13\x32\xe4\xcf\x47\x35\xd2\x96\x63\x18\x6a\x5c\xaf"
+ "\x5e\xa3\xf8\xeb\xc5\x31\x06\x6d\x79\x0e\x8f\xe7\xf1\x03\x76\x50"
+ "\x75\xab\xf4\x17\x51\xb1\x35\xfa\xb8\xfd\x80\xb3\xc7\x80\x83\xbc"
+ "\x68\xbf\xc5\x6f\xd0\xca\xc8\x13\xcd\x13\x53\xe7\x95\x62\x82\xbd"
+ "\x70\xc1\x82\xf9\x4b\x96\x1a\xf1\xc6\x33\x17\x97\x14\xa9\xf8\xe2"
+ "\xb7\xa1\xfb\x57\x40\x86\xa7\x70\x88\x72\xa4\xaa\xdb\x38\x7b\x77"
+ "\x3c\xaf\x89\x48\xff\x51\x39\xe7\xda\xba\x76\xa7\x3e\xff\x3a\x46"
+ "\x2f\x67\x28\xff\xab\x97\xaa\x94\x6d\x7b\xc9\x8f\x80\x53\xb7\x61"
+ "\xdb\xf2\x5a\x6b\x0f\x7d\x95\xe3\x2a\xca\x33\x05\x3b\xb6\x8a\x4e"
+ "\x5e\x5b\x0d\xba\x5e\x4a\x37\xbe\x49\xc7\x76\xd3\xa6\xad\x2a\x96"
+ "\xb6\x67\x11\xfb\x8a\x6c\x7d\x4d\xab\x6a\xf5\x8b\xd4\x46\x3b\xec"
+ "\xb3\x34\x96\x89\xe1\xdd\xec\xc3\xcb\x31\xb0\x5e\x9a\xcb\x76\x1d"
+ "\xeb\x32\xfe\x6e\x43\x27\xbd\x34\x1e\x3a\x1a\xb0\xb6\xee\xf2\xa7"
+ "\xb4\xfa\xd7\xaf\x22\x0b\xd7\x01\x7d\xed\x6b\x69\x60\xda\xbe\xe4"
+ "\x78\x17\xba\x4c\xd7\xd9\x3e\xae\xc7\x47\x2f\x4d\xd3\xd7\xfd\xcd"
+ "\xc2\x72\x24\x9b\x75\xa1\x3a\x2f\xfa\xd2\x1e\x51\x85\x34\x77\x63"
+ "\x31\xe8\xc8\xdf\x3c\x2c\x56\xdf\xfb\x7b\xa9\x45\xe5\x6f\xda\x3d"
+ "\x9b\xe3\x38\x55\x35\xed\x46\xfa\x18\xa4\xfb\x54\xfa\xc1\xe2\xd9"
+ "\x91\x10\xcf\x93\xaf\xe2\x6f\x57\xa2\x4e\xb4\x7f\x78\xad\xe2\xfb"
+ "\xa6\x1f\x7c\xad\x92\x1c\xfc\xbd\x4b\x15\x0b\xeb\xa3\xbd\x80\x53"
+ "\xcb\xdf\x95\x44\x7e\xcc\x9d\x5e\xec\x06\xbc\x5a\xdd\x9f\x1c\x7c"
+ "\xf7\xf2\x8b\xea\x9c\xc0\x8b\x47\x99\x9e\xc0\x31\x5d\x5f\x0b\x4e"
+ "\x0f\xba\x5e\x86\xfe\xbb\x52\x9f\x57\xbf\x9c\x67\xd4\x81\xb1\xd4"
+ "\x0f\x1b\x3c\xc0\x76\x38\x68\xd0\x85\x5f\x77\xb5\xdc\x97\xf7\x61"
+ "\x0c\xb1\x0a\xf6\x83\x1b\xf8\x86\xdf\xcb\x6e\x63\x5c\xe5\xba\x75"
+ "\x3a\xa4\xf1\xba\x21\xaf\x19\xea\x75\x71\x2c\xba\x24\x03\xa6\xa8"
+ "\x6a\xed\xd2\xce\x9d\x6c\x00\x4c\x0b\x6c\x04\xbf\xfe\xed\xb6\xee"
+ "\xea\x33\xec\x33\xe9\x83\x0d\x70\x95\x28\x08\xa7\xf3\x7e\xd6\x70"
+ "\xe3\xdb\x78\xf5\x67\x98\xf6\x2f\x07\x06\xf6\xa9\x50\x1e\x7d\x09"
+ "\xd9\xaa\xec\xa4\x2d\xc3\xb9\x5e\x96\x2b\xe6\x8b\x5e\xf4\x33\xfa"
+ "\x3a\x53\x9c\x3b\xb9\xd7\xbe\x88\x86\x1f\xa7\x2d\x13\xb9\xbf\x79"
+ "\x6f\x99\x7d\x19\x91\x66\xe5\x58\xfe\xc7\x68\xcb\x95\xdc\xd7\x8c"
+ "\x0b\xfa\x28\x14\x0e\xe6\xdf\xc3\xe7\xb8\x59\xff\xae\x29\x87\xfd"
+ "\xbe\x80\xf5\xd2\x2b\xaf\xf1\x7a\x00\x7f\x83\x89\xef\x9d\x45\x42"
+ "\x93\xbc\xb2\x8a\x79\xe5\x95\xd7\xd6\x74\x09\xed\x33\x17\x89\x43"
+ "\x01\xa2\xcf\x4c\x14\x0e\x99\x92\x18\x6f\x93\xf3\x24\x9f\x35\x6f"
+ "\x20\xaf\xc3\xcd\x7e\x71\x96\xcd\xab\x28\x9d\xcf\xe9\xf3\xf7\x85"
+ "\xda\x03\xfc\xfd\xe7\x3a\xfa\x43\x78\x0b\x79\x96\x73\xcc\x95\xad"
+ "\xb9\x7f\x74\x6c\xe1\x79\x79\x0a\xee\x53\xec\xdf\xe1\xba\xb6\xf8"
+ "\xfe\x78\xe4\x7d\xfa\xa3\xe7\x7d\xb2\x3f\x22\x9f\xfd\xad\xf9\x7f"
+ "\xa0\xd6\x9c\x3f\x90\xb3\x53\x68\x3c\x47\xac\x78\x96\xeb\x70\x03"
+ "\x56\x03\x9f\x69\x4f\xd7\x7a\x6c\xa9\xea\xbb\xb9\xec\x1b\xe9\x27"
+ "\xcf\xa2\xdf\x30\x8e\xcf\xed\x3c\x43\x16\xcf\xa2\xf7\xe4\xbd\x9a"
+ "\xbb\x9d\x6c\xf0\x16\x75\xb0\x7d\x1a\xe6\xf3\xfc\xbc\xbf\x89\xf9"
+ "\x8a\x56\xcd\x38\x46\x14\xde\xa0\x97\xd9\x28\x0f\xfb\xd5\x28\x3f"
+ "\x89\xcb\xef\x60\x7a\x00\xa7\xb6\x39\x8a\x26\xad\x98\xe5\x2b\x9c"
+ "\x41\x9f\xfc\x68\xfa\x6c\xa9\x61\xfa\x70\x1c\x58\x0d\xfd\x05\xdc"
+ "\x72\x40\x03\xcd\xa8\x03\x38\x5b\xf4\xf5\x60\xcb\xe6\x33\x94\xe6"
+ "\x59\xc4\xdf\x97\x7b\xe5\xac\x35\xcf\x6c\xd1\xce\x9d\xda\x5b\x7d"
+ "\x96\xcc\xdc\x6f\xbc\x07\x54\x2d\xdf\x4b\x9a\x77\x70\x9f\x81\x27"
+ "\x0b\xf1\x2b\xc2\xaf\x98\xf9\x0e\xd7\x12\xf4\x97\x1b\x38\x94\xa2"
+ "\xaf\x1a\xf8\xaa\xcb\x58\x2d\xc7\x3a\xd1\xe7\x63\x03\xe9\x90\xa3"
+ "\x30\x7f\xff\x55\xae\x77\xbd\x52\xaa\x41\x8e\x78\x3d\x68\xe7\x4b"
+ "\x94\xa6\xb9\x5e\x2c\xdd\x01\xbd\x59\xf7\x92\x3c\xeb\x9c\xce\x6b"
+ "\xa4\xdb\xe4\xf7\x3a\xb6\xf6\xef\x7f\x6e\x18\xc5\xe7\x41\x5f\x69"
+ "\x30\xf1\x1a\x92\xbb\xcd\xa2\xf3\xb9\x05\x79\xa0\xff\x6d\xba\x3c"
+ "\xbc\x2c\xf5\x02\xeb\x91\xc1\xe6\x26\xb0\x8b\x5b\xc5\xf6\x7c\xe2"
+ "\xbd\xa4\xb4\xb5\xc2\x9f\xd6\x69\x15\xed\x81\x56\x79\x0e\xb8\x3d"
+ "\x10\x91\x7b\x49\x78\x9f\x34\x2b\xe0\xb7\xc2\x8e\x3e\xcc\xb4\x33"
+ "\xd2\x79\x1f\x8a\xd7\xe8\x66\x05\x84\x7f\xf6\x4a\x2b\x7f\x5f\x73"
+ "\x8c\xdc\x87\xd0\xd3\xdb\x6d\x98\x83\xac\xf4\x5b\xd1\xf6\x70\x3f"
+ "\xac\x9e\xfc\x64\x96\x37\xe4\xcd\xe8\xcf\xdb\x93\x6f\xf6\x3a\x54"
+ "\x9d\x51\x69\x43\x66\x3b\x50\x96\xfb\x4a\x4f\x53\xf6\xf7\x0f\x1c"
+ "\xfd\xf3\x53\x3e\x0b\xd1\x83\x31\x78\x69\x7e\x92\xd6\x93\x6f\x8a"
+ "\x00\x36\x78\x3f\x5d\x7e\xe7\x33\xec\xd7\xbf\x9b\xc5\xdf\xfa\xee"
+ "\x20\xb1\x69\x74\x21\xf2\x99\x19\x2e\xc7\x97\xe0\xef\x8d\x88\xe1"
+ "\x63\x12\x7e\x67\x40\x6c\x34\xdb\x3c\x15\x8f\x80\x9f\x6a\x2b\x59"
+ "\x9e\x23\x96\x76\xbb\xfd\x69\xb6\x87\x7e\xf0\x19\xd3\x33\x02\x19"
+ "\x8b\xa4\xb4\xdb\x27\x74\x51\x52\x05\xf8\x56\xad\x67\xd5\x7e\xc9"
+ "\x0b\x19\x74\x6a\x02\x36\x6d\x6d\x1a\xf3\x8d\xb5\x9b\xfd\xee\xda"
+ "\xc7\x4a\x5f\xb7\x11\x94\xee\x0d\x75\x51\x6b\xe5\x5f\xa8\x35\xec"
+ "\xad\x6c\x3c\xe3\x37\x2b\x9f\x37\x33\xe0\xd6\xde\xc0\xef\x9c\xe0"
+ "\xd5\x82\x48\x03\x0d\xb6\xcf\xc0\x73\x6d\xe8\xeb\xbf\xa9\x79\x67"
+ "\x6d\xa5\x31\xc7\xfe\x9c\x36\x74\x70\x4c\x0e\x21\x6c\xa4\x6d\xf8"
+ "\x2b\xc7\xdf\x77\x8a\x60\x26\x4d\x58\xc5\xeb\x7b\xb5\x7b\x31\xdf"
+ "\xc9\xd1\xe1\x9e\xd6\xe1\x76\x5c\x08\x2e\xf3\x4c\x6b\xad\xdc\xe3"
+ "\x22\x2d\xf5\xaf\x14\x01\xec\x48\xea\x5f\x73\xa0\xe3\x9d\xce\xcf"
+ "\x78\xfd\x77\xdb\x95\xa8\x87\xda\xc3\x87\x89\x63\xfb\xec\xd4\x30"
+ "\xd6\x9e\xb6\x91\xee\xdf\xe7\x3c\x45\xaf\xa6\x68\x22\x33\x1d\x73"
+ "\x7f\xde\xdb\x71\xb2\x8e\xe3\x75\x85\x8a\x08\x0d\xf5\x96\xf9\x88"
+ "\xe3\x51\x00\xc6\xa5\xbf\xe3\x7d\x34\xe8\x89\x88\xb0\x99\x9a\xce"
+ "\xc1\x6a\x80\xee\x94\xf1\x29\xd6\x7d\x79\xdb\x88\xb5\x74\x87\x30"
+ "\x59\xa5\x7f\xa8\x56\xa5\xd9\xd0\xb7\xc5\x12\x9f\x0d\x6d\xb6\x28"
+ "\x5f\xc2\x64\xd4\xb5\x89\x7d\x09\x85\xa5\xf5\x68\x9d\x5c\xc3\x6c"
+ "\xb7\x07\x5d\xaf\xee\xf7\xd1\x0f\xe4\x79\x84\x8d\x7c\x5e\x44\xea"
+ "\xd8\x6d\xe3\xfc\x29\x1f\xfb\x18\x06\x9f\x8f\xd5\x96\x47\xf6\x56"
+ "\xff\x4b\xda\xea\xfc\x6e\x48\x7b\x77\xd0\x23\xdc\x1f\xfb\xf8\x6c"
+ "\xa4\x0e\xdb\x0a\xd8\x1f\x8a\xaa\x8f\x61\x23\x6d\x53\xf1\x4c\xdd"
+ "\x7c\xff\xaa\x9f\xdf\x87\xfb\x32\x09\xf7\x25\x75\xbd\xbc\xaf\xf0"
+ "\xaa\x4d\xb8\xae\xf2\xf4\x58\x3e\xf6\x3d\x64\x63\xfb\x6c\x5b\xb6"
+ "\x2f\xe9\xff\x16\xeb\x6b\x8a\x32\xd6\xc6\x60\xf3\x2d\xb1\xdd\x96"
+ "\xea\x05\x10\xcc\x8d\x33\x4e\x50\xdd\x8f\x7b\x5d\x64\xea\x83\x5d"
+ "\xd9\x6b\xa2\x74\xc8\x57\xda\xe6\xd1\x94\x85\x77\xa3\x4f\xd0\xb6"
+ "\x4d\x61\x13\x65\xe0\x97\xee\xff\x72\x71\x0a\xe0\xe6\xf0\x7a\x6b"
+ "\xdb\x19\x5e\x2f\xdb\x76\x52\xda\x7d\xdb\x68\xac\x06\x78\xbc\x77"
+ "\x54\x3d\x9a\xc6\xf2\x9a\x27\xd2\x32\x0b\x22\x6a\x0f\xd5\x58\xd7"
+ "\x58\x37\x9a\xc6\xc7\xd6\xbb\xad\x4c\xad\x89\xd6\xc9\x7d\x95\x15"
+ "\x7e\xfa\x0a\xe6\x69\xc7\x8e\xd3\xf6\x62\xe1\x4a\x16\xe2\xcb\x36"
+ "\x93\xf2\x73\xd8\xfe\x80\xb5\x56\xf1\x9d\xdc\x33\x04\xbf\xf1\x9e"
+ "\xac\xbe\x3f\x95\x24\x63\x8c\xa4\xbe\xbf\x97\xbf\x6d\x1d\xb5\xe6"
+ "\x9c\x2e\xf1\xd0\xe3\x02\x44\xd6\x5d\x5f\xc8\x30\x18\x9f\x82\x79"
+ "\x6a\x6f\x8b\x63\x06\x80\xc6\xf2\xcc\xfe\xc6\x6d\x94\xf6\xc2\x36"
+ "\x4a\x6f\x5b\xc0\xed\xda\xae\xca\x98\xcc\xc4\xf8\x6a\x6e\x96\x33"
+ "\xf0\x04\xf0\xe6\xfa\x98\x37\xda\xc3\xa7\x3d\xce\x32\xa1\x79\x9e"
+ "\x66\xbb\x76\xfb\xbb\x9e\x25\x7b\x68\x76\x67\x58\x9d\x6f\x9d\x4b"
+ "\xfe\x7a\xc0\xab\x1f\x4d\xe9\x80\xd5\xe6\x2d\x21\xde\xfb\xb8\xc6"
+ "\xb3\x64\x1f\xc3\xfe\x94\xc7\x82\x4d\xa0\x8f\x1a\x13\xea\xb6\x78"
+ "\x43\x1d\xd4\x06\xf9\x9e\x55\x2a\x22\x0c\xe7\x38\xd5\x7d\x49\xb6"
+ "\x77\xbb\xcd\x5e\xa0\xe2\x3a\xc8\xb6\xf6\xef\x19\xea\xed\xf0\x9e"
+ "\x61\x78\x75\xe3\xbd\x85\xb0\x17\xf5\x36\x19\xb4\x56\xfc\x55\xb7"
+ "\xd0\xb3\x64\x17\x71\xff\x70\x7e\x3c\xe7\x7b\x61\xc5\x14\x9c\x8c"
+ "\xed\x17\xce\x83\x77\x55\x80\x7b\xeb\xc0\xbe\x37\xef\xc7\x0e\xe4"
+ "\xa9\xdb\xc6\x67\xdb\xb6\xb5\x6e\x07\x8d\xd4\x3e\xc1\xf6\xb3\x8c"
+ "\xab\x8f\xb6\x07\xbc\x65\x7f\x49\xec\xdf\x0a\xd9\x07\xdf\xaf\x6d"
+ "\x97\xfb\x7f\x75\x7f\x9f\x15\xd6\x84\xd2\x67\x3b\x6a\x35\xe8\x01"
+ "\x1f\xae\xac\x0b\xa4\x3e\xb9\x91\x7d\x8a\x76\xbc\x6a\x4d\x52\xfd"
+ "\xcb\x6d\x61\x7b\x25\x51\x1f\x47\xed\x4d\xa6\x33\xae\x46\x1f\xf3"
+ "\x77\x21\x35\xde\x5f\x66\xdf\xfd\x3e\x1b\x29\xfe\x13\x35\x80\x5b"
+ "\xa5\xdb\x6e\xf9\xfa\x58\x96\xdf\x93\xd2\x3e\x9e\xcf\x5a\x1a\x7e"
+ "\xc6\x90\xdf\xcc\x02\xe5\x1b\x6e\x63\x1d\x55\x6f\x52\xb2\xc3\x38"
+ "\xea\x65\xe7\x28\xff\x8e\x1d\xf9\x28\x3f\x27\x61\x7b\x93\xa1\x77"
+ "\x5c\x50\xd3\x68\x0f\xdb\x91\x02\xba\x0a\xe3\xc1\x50\x6f\xa0\x57"
+ "\xff\x26\xe7\xce\xcb\x61\x9f\x0f\xe5\xb3\x56\x06\x6e\x17\xb7\x8f"
+ "\xb8\xc3\xa7\xe6\x49\x3b\xed\xc6\x3a\x95\xb0\x80\xc6\x2e\xab\xe0"
+ "\x73\x97\x7c\x76\x26\x30\xdc\x6c\xf7\x0f\x1f\x95\xa7\xe4\x66\x67"
+ "\xae\x48\x51\xfa\xb6\x20\x44\x52\xa7\xf3\x3e\x31\xe6\x60\x43\xb9"
+ "\xcd\x80\x03\xfb\xa2\x74\x9f\x1a\xcf\x15\xec\x41\xd7\x89\x8c\xb6"
+ "\xa1\x4d\xb2\x6d\x68\xa3\x6c\x9b\xfe\xcd\x2a\xd4\xf5\x77\xb9\xf6"
+ "\x7e\x51\xed\xd9\xa9\x62\xa4\x6d\x34\xdb\xf9\x7b\xbc\xc7\xa9\x61"
+ "\x8d\x3c\x4f\x83\x3e\x51\x7b\x2a\xf5\xd9\x22\xf5\x85\xd4\x8b\x83"
+ "\x59\x6f\x56\x30\x47\xe5\xbd\xc2\xf1\x2d\xf5\xef\xde\x01\xf6\x7c"
+ "\xb1\x69\x54\x9e\x3c\xaf\x88\xfa\xf8\xbb\xa1\x03\x7a\xa8\xbe\x8b"
+ "\xfb\xea\xc6\x3d\x94\xa3\xf8\xb0\xfe\x13\x5e\xb7\x56\x73\xc6\xfa"
+ "\x8d\xe0\xfb\x3c\x35\x3f\x33\x7c\xd2\x93\xa4\x4f\x7a\xb4\x8e\xbd"
+ "\x48\x1c\xa5\xbe\x13\xa9\x11\x0f\xee\xcb\xe5\xb9\x4b\xe0\xbb\x22"
+ "\x6c\xe8\xbf\xfa\x72\xf6\x6f\xea\xf7\x2d\x58\x09\x5e\xa9\x50\x67"
+ "\xd3\x83\xae\x86\xfe\xf8\x8f\xf2\x3b\x67\x2e\x71\x88\xf3\xcd\x5e"
+ "\x79\x5a\xfa\x1e\x54\xcb\x38\x0a\x27\xf4\x33\x7b\x0d\x13\xf5\x35"
+ "\x92\x4c\x3e\x0f\x80\xb2\x98\xff\x36\xcb\xf9\x3e\xd3\x80\xeb\x96"
+ "\xb8\xcb\x6f\x8d\x35\x94\x0d\xec\x21\xd5\xcb\xb5\x16\xe5\x23\xdb"
+ "\xb0\xd1\xe0\x11\xb4\x77\xa8\x8a\x37\xba\xf3\x6c\xf3\x78\x92\x3c"
+ "\xd0\x23\x6c\xa9\x5f\xad\x63\x9e\x6c\xd8\x17\x4d\xa7\xd9\x61\xcd"
+ "\xa9\x74\x50\x7d\x9d\x90\xb2\x5e\x5f\xf7\xf9\xf6\xc4\x6b\x29\x86"
+ "\x2d\xa2\xe8\x9c\x0e\xfd\xf2\xc3\x23\x92\xd6\xee\xa6\x6c\x8e\xfb"
+ "\xb2\xba\x82\xe3\x58\xbd\xf6\x7b\x8e\x17\x16\x76\x37\xe5\x47\xf8"
+ "\x7c\x27\xc6\x59\xcd\xdd\x54\x7c\xbc\x94\x4c\x05\xa5\xbc\x6f\xf6"
+ "\xf1\x5e\x9e\x5f\x09\x27\x6c\x81\x54\xd8\x27\x90\xf3\x35\x0b\xc9"
+ "\xfa\x58\x31\x60\x3b\x33\x33\x38\x9e\x17\xc7\xf2\xe2\x78\x7c\x11"
+ "\x67\xe6\x48\xdc\x8f\x82\x3d\x97\x2e\x2c\x4d\xb9\xec\x7b\x13\x71"
+ "\x09\xe8\xe3\xa3\x1c\x53\xcc\xe4\xf5\x87\x68\xcd\x49\xb2\x70\xbc"
+ "\xb0\x70\xd5\xc7\x87\xda\x03\x9f\xc8\xb9\xc5\x88\x52\xd8\xd3\x9a"
+ "\x3c\xe3\x63\xd3\x52\x3e\xde\x8b\x31\x7e\x9f\x6a\xf7\x69\xa1\xda"
+ "\xad\xf0\x66\xfc\xa5\x8e\xc3\xbc\xb7\x42\xe2\xfe\xc3\x67\xc3\x80"
+ "\xaf\xb9\x5b\x8a\x22\xee\x96\x42\x75\x2e\xb4\x95\x2a\xca\x44\x97"
+ "\x17\xb6\x31\xfb\x82\xf2\xd9\x5f\xf6\xed\xe1\x36\x72\xfb\xb8\xee"
+ "\x3f\x9e\x39\x29\xe3\x9f\x85\xf1\xec\x2c\xd1\xcb\x74\xa3\x4c\x77"
+ "\x2b\xf5\xba\x5b\x64\xdb\xdb\x03\xaa\x6c\x81\xbc\xe7\xf2\x51\x74"
+ "\xd0\xdb\xdc\x4f\x07\xb4\x9d\xdb\xc7\xed\x0f\x33\x4d\x40\x03\xbd"
+ "\xad\xb6\x3e\xbd\x9d\xdc\xc6\x3f\x60\xd4\xd9\x86\x76\xa2\xad\xb2"
+ "\x9d\x7d\x68\xe7\xa1\x62\xa2\xd0\x66\x73\xd6\x67\xa9\x2d\x85\x3c"
+ "\x3f\x74\xfe\x09\x76\x74\x79\x0d\x61\x1e\x68\x7e\xb3\xa2\xc6\xb4"
+ "\x01\xb6\x49\x85\x1f\xf3\x41\xbf\xe8\x62\x7b\xdf\x5b\x8a\x5f\xb8"
+ "\x4e\x7e\xcb\x58\xda\xc7\xfc\xdd\xd9\xe7\xd0\x26\xed\xef\x54\xd1"
+ "\x25\xba\x60\x9b\x86\xbc\x61\xe4\x29\x46\xfb\x31\x7f\x3c\xae\xe3"
+ "\xcf\x79\xd7\xfc\x4b\xb5\xcb\x5a\x42\x19\x07\x1f\x71\x9b\xbc\x1d"
+ "\x6e\x32\xda\xf2\x38\xf2\xa1\x3d\x36\xc0\x1a\x2e\xbf\xf5\x80\x76"
+ "\x6e\x07\x9e\xa1\xa8\x36\xb5\x75\x87\x00\xf3\x43\x4a\xcd\xa3\xa4"
+ "\x6d\xa7\xd0\x8e\x53\x64\xab\xa9\x80\xfd\xf5\x20\xdb\x8b\xff\xe7"
+ "\xf5\x4b\xf2\x69\xac\x8f\x5e\xdb\xa3\xf8\x4e\xc6\x22\xba\xfc\x04"
+ "\xfd\xb0\xad\x3f\xde\x10\xc7\x70\x4b\xf9\xb8\x95\xf9\x48\xc6\x1d"
+ "\xe2\x31\x23\x08\x9e\x61\xbf\x9c\x15\xa8\x23\x98\x39\x4a\xe2\xe3"
+ "\x9a\x44\x78\x4e\xc3\x33\xdb\xc1\x19\xbc\x26\x80\x72\x87\x04\x68"
+ "\xc6\xf0\x61\xcf\xed\xe3\x2b\xd3\x30\xe1\xb9\x95\x9f\x11\x74\x1d"
+ "\x6c\x4c\xcc\x7d\xf7\x56\xf8\x4d\xcf\xff\x8c\xc6\x5f\x9c\x4e\xf9"
+ "\x61\x78\x30\xfd\xcd\x7b\x20\x0c\x0f\x6d\x1b\x79\x82\x76\x7d\x1a"
+ "\x2b\x63\x76\xa9\xcb\x94\x1e\xdc\xb5\x9b\xf7\x1d\x2e\xae\xde\x5d"
+ "\xd2\x86\x63\xff\xa9\x8b\x2c\xb7\xc7\xc0\x03\xf7\x83\x9e\xbd\xba"
+ "\x78\x3a\xbc\x6e\x1e\x0c\xd6\xa6\xad\x32\x06\x9d\x73\xf3\x56\xe8"
+ "\x0b\xd8\x0a\xcd\x36\x8e\x0b\x8e\xb1\x73\x57\x80\x96\xee\x20\x8b"
+ "\xf3\x24\xaf\xc9\xcc\xa4\xe6\xba\x2c\xda\x89\x39\xb9\xe8\xc9\x1c"
+ "\xf9\xf2\x19\xf6\xa3\x50\x3a\x84\x6d\x52\x3e\x97\x29\x96\x66\xa6"
+ "\x57\x6f\x35\x6c\xf8\xd7\xdb\xca\xcf\x92\x49\x7d\x77\xe5\xf5\xd6"
+ "\x69\x76\x11\xde\x62\xd2\x8a\xeb\x38\x8e\x56\xaa\x56\xc8\x71\xb4"
+ "\x8c\xd8\x54\xd2\xf6\x71\x40\xe6\x7a\x6c\xa9\x9b\x96\xd0\x78\x8e"
+ "\xa7\x67\xf5\x2b\x5b\x4e\x8d\xd7\xaf\xb3\x8e\x4d\xd7\x7d\x07\xd2"
+ "\x55\xbc\xaa\x5d\xd3\xea\xcf\xa0\x2e\xf9\xfe\x47\x37\x44\x30\x87"
+ "\x91\x70\x97\xd0\xd8\xba\x33\x94\xc9\x76\x50\xc1\xdf\x95\xcd\xc6"
+ "\xf3\xc2\x99\xdd\x56\x11\xf9\xaf\x4c\xda\x71\x62\x20\xde\x9e\x7f"
+ "\x29\xc7\xe8\x4b\x7c\x46\x4b\xad\xe5\x4b\xff\x21\x19\xe3\x45\x7d"
+ "\x97\x8f\x68\xcb\x4b\x64\xe6\xef\xd0\xf2\xba\x20\xaf\x33\xf3\x19"
+ "\x22\x35\x86\xfc\xa8\xce\x88\x43\x36\xe8\x9e\xa4\x5b\xcd\x77\xb4"
+ "\xa1\x98\x7f\xf9\x83\x1e\xcf\x72\x1e\x33\x7e\xd4\xc9\xe7\x96\x06"
+ "\xe6\x38\x3f\xfa\x1d\xbf\xe3\x34\xf6\xab\xcf\x91\xb4\x7c\x23\x8d"
+ "\xe7\x3d\xfa\x9c\xf1\xa0\xbd\x3f\x4d\xd9\x30\x3c\x96\x31\x0e\xf5"
+ "\x6a\x4d\x7a\x44\xd0\xf5\x46\xa6\x31\x9e\xf1\xb8\xae\xbe\x81\xfb"
+ "\xc6\x64\x5f\xd2\xa1\x86\x0b\xe0\x97\xae\x7f\x43\x9a\xe3\x2c\xe4"
+ "\x20\x7f\x89\x31\xbe\xc9\x6f\x9c\xac\x1b\x7d\xd7\xd2\x95\x34\xe6"
+ "\xa1\x2f\x59\x64\x1c\x0f\xfe\x96\xa9\x1a\x77\xdf\xd8\x32\xb0\x37"
+ "\x97\x23\xe9\x2d\xbf\x5f\xc8\x73\x0c\x13\xc6\x60\x15\x53\xaf\x5b"
+ "\x8d\xbf\xc6\x99\xf9\x37\xde\x8e\xaa\xe7\x48\xff\x38\x8a\x3a\xd8"
+ "\x47\x84\xe1\x2b\xdb\xe4\x0d\x37\xd7\xc1\x73\x2b\x35\xbe\xbe\x71"
+ "\xa1\xf3\x85\x99\x4c\x5f\x4d\x9f\x4f\x7a\xbb\xff\xa1\xe8\xeb\xa0"
+ "\xe4\x09\x5b\xc8\x76\xb0\xc2\x67\x1e\xa1\x62\x43\x59\x8f\xd1\xee"
+ "\x71\xfc\x9e\x79\xdd\x73\x23\xaf\xc5\xed\x5e\xeb\xe5\x71\xbb\x2f"
+ "\x3f\x6d\x16\xcf\xf5\xa5\x2d\xbe\xbb\xf4\x06\x94\x43\xda\xc8\x03"
+ "\xa7\x42\xe6\xea\x55\x34\x9e\xbf\x13\x8a\x74\xb9\xb7\xe5\xbf\xe2"
+ "\x99\xe0\x57\x33\xc8\xf6\xd5\x2d\x7c\xb6\x60\x77\x2d\xe6\x97\xea"
+ "\x9b\xa8\x5c\xff\xe6\xd1\x95\x1c\x4f\xf0\xad\x5e\xdf\x10\xd5\x57"
+ "\x3f\xbe\x05\xcf\x99\x03\xcf\xbb\xff\x64\xec\x0b\xf8\xe8\xc7\x93"
+ "\xe4\x3e\x28\xfb\x4f\x2f\xe2\xf1\x5a\xd0\x80\xcf\xd1\x8f\x6f\x51"
+ "\xb8\xfc\xf8\x96\xe6\x52\xe2\x75\xef\x23\x3b\x65\x6c\xb0\x1f\x43"
+ "\x9e\xdf\xc8\xd5\xd7\x63\x0e\x4b\xbe\x62\x7b\xf7\x7b\x3c\x07\xfb"
+ "\x87\x67\x13\xf2\xf1\x38\x51\xe0\xa0\x1c\x65\xc3\x0b\x8e\xa5\xe9"
+ "\x8b\x6a\xff\x6b\xbc\xd6\x97\x50\x27\x6e\x23\x92\x65\xaa\xb4\x3c"
+ "\xe9\xbf\xb6\x69\x8c\x0f\x57\x8b\xd8\x44\x3c\x5f\x62\x9e\x4b\xc7"
+ "\x35\x1d\x57\xce\x9b\x21\x36\x8d\xf6\x30\x5f\x62\x0e\x6b\xc3\x3c"
+ "\xc1\xd2\x93\xa2\xe5\x0e\x76\xee\x91\x69\xe3\x5d\xff\x1d\x52\xfe"
+ "\xb8\x3f\xb1\xb5\xf9\x61\x9f\xed\x20\x5a\x1a\x16\xbd\xf6\xaf\xf0"
+ "\xf9\xa2\x9f\xd8\x9c\x3b\xd8\x0f\xe6\xc7\xdd\xb1\x7e\x30\x3f\x49"
+ "\xc3\x6f\x06\x7e\x90\xba\x9f\x1c\xc6\xcf\x36\xf0\xfb\x69\x5a\xd0"
+ "\xf5\x13\xe8\xca\x1f\x4b\x1b\xeb\xe2\x74\xe2\x4f\x64\x9c\xb6\x6a"
+ "\x9e\x17\xa5\x7c\xe2\x57\xed\x1d\x95\x85\x67\x8b\x18\x3e\xba\x54"
+ "\x6f\xaf\x1d\xcf\xe9\x76\x27\xc6\xb5\x14\xd0\x64\x34\xda\x3c\x7c"
+ "\x8c\x8f\xdb\xcb\xf8\xf6\x0c\x27\x8a\x3e\xf3\xc9\x30\xb9\xfd\xfe"
+ "\x14\x94\x03\x2d\xc5\xb5\x2b\x1b\x0c\x7a\xea\x74\xe2\x3d\x28\x53"
+ "\x0f\x60\x28\x3b\x08\xf9\x01\xc3\xc8\xdf\x4f\xfb\xd1\xfc\xcd\x0e"
+ "\xf4\x29\xf2\x61\x4e\x6c\x31\xce\x93\x06\x5d\x3f\x35\xbf\x5b\x42"
+ "\x7a\x4c\x85\x9f\xd8\x02\x51\x65\x39\x7e\x46\xa2\xf2\xa8\xd3\xa2"
+ "\xea\x64\x5e\xfa\xc9\x97\xf4\x7a\x43\x83\xc9\x52\xc5\xd5\xb0\xef"
+ "\xa0\xcd\x26\xa8\x79\xdf\x64\xef\x98\x00\x79\xeb\x34\x8c\xf9\x22"
+ "\x2b\xa7\x42\x78\x8e\xd3\x4f\xdf\x69\x0f\x75\x5d\xe4\x78\xf8\x53"
+ "\xf5\x8d\xd0\xde\x4a\xf2\x96\xdf\x24\xbf\x8f\x7d\x8a\xf6\xfc\xd3"
+ "\xeb\x97\x71\xe6\xf9\x5e\xfa\x83\xb3\xcf\x07\x8f\x0d\x98\x63\xf7"
+ "\xc7\x69\xd4\x90\x77\x27\xa7\x23\xcd\x1b\xf0\xcb\x78\x8e\x03\x3e"
+ "\xe9\x9a\x45\xc9\xd4\x9e\xd7\x64\x2c\x07\xc6\x37\x7c\x8f\x87\x71"
+ "\xd6\xdc\x9a\x85\xdb\xe0\xc4\xfc\xcf\x1b\x0e\x7a\x58\x26\xec\xcb"
+ "\x79\xad\x70\xcf\x1a\xf0\x9d\xd0\xaa\x34\xcb\xc5\xb5\x61\x8f\x3c"
+ "\x3f\xef\x0c\x8b\x53\xfe\x14\xcd\xc2\x36\x49\x75\xc5\x10\xcb\xd4"
+ "\x3a\xe1\xe9\x49\x15\x59\x41\xd7\x9e\x86\x77\x1d\xaa\x6f\x2e\x12"
+ "\x6e\x83\xd1\xf6\x9d\x7a\xdb\x91\x26\x79\x7f\x42\xad\x8a\x5f\x89"
+ "\xe7\x8e\x41\xd7\xac\xd0\xcf\x6c\x0f\xb0\xbf\xac\xa2\xc5\x9b\x99"
+ "\xfd\x63\xc3\x45\xe1\xf1\x66\xe6\x17\xa8\xa3\x4f\xaf\x63\xe3\x7f"
+ "\xb3\x8e\x8d\x17\xaa\x03\xba\xe1\xca\x13\xf4\x33\xdb\xc5\xcf\x1d"
+ "\xdf\x94\xdf\x08\x82\xfe\xb4\x2b\x9d\xf9\x56\x55\x04\xf3\xb7\x70"
+ "\xda\xa8\x2c\xf9\x2d\x2b\x13\x55\x72\x2c\xcf\xb0\xfb\x13\x7f\x9b"
+ "\xa3\x97\x3c\xcb\xdf\xa7\x4e\xfa\x99\xfc\x66\x6e\x5b\x19\xcf\xd9"
+ "\x46\x97\xf6\x6d\x10\x95\x7d\xa6\x37\x25\x9f\xed\x40\x3f\x6c\x8f"
+ "\xe2\xb3\xf6\xc0\xfb\xe4\x2d\xe4\xf5\xd5\xc3\xbc\xae\x5d\x2a\x86"
+ "\x8f\xca\xd2\xa0\x1b\x60\xa3\x47\x24\x3d\x60\xbf\xc8\xf9\x16\xe6"
+ "\x6c\x72\xbe\xe5\x97\x67\x1d\x87\xcb\x18\x9d\xae\xd2\x12\x5e\xfb"
+ "\x8e\xf4\xe5\xdb\x83\x2e\xca\xe3\xd8\x9d\xbc\xee\x2c\x2c\xad\x81"
+ "\xd9\xe1\x64\x21\xe7\x53\xb0\xfd\x39\x76\xa7\x37\xe0\xa3\x08\xec"
+ "\xe8\xba\x73\x94\x51\x07\xdb\x13\x3a\x3b\x9d\xf5\x7a\xbd\x1e\xbf"
+ "\x73\xd3\xb9\x81\xf8\x9d\x3b\x79\xad\xa7\x03\xf7\xe7\xc8\x1c\xd9"
+ "\x64\xb6\x6d\x3f\x47\x63\x77\x2c\xa7\xcc\xed\xbc\x96\xf7\x4f\x65"
+ "\xfb\xb0\x5d\x21\x63\x79\x2e\xce\xe4\xf5\xfc\x01\xdb\x67\x05\xc7"
+ "\x1a\xee\xd7\x5b\x66\xb9\x06\x72\x51\xf4\x7e\x4b\x8e\x83\x61\xb7"
+ "\x96\x17\x4e\x1b\xe3\xeb\xdb\xcc\x7e\x72\x3f\x73\x83\x7e\x09\xc7"
+ "\x15\xc3\xa7\x6b\x4b\x54\xfc\xd5\x77\xc7\x2a\xfd\x0e\x58\xad\x83"
+ "\xf1\x44\x64\x7b\x3e\x4d\xe8\xa6\x2c\xe5\x1f\x91\x82\x31\x71\x6f"
+ "\x16\xef\xc5\x57\x3c\x4b\xb6\xc8\xf6\xb9\x49\xce\xd7\x28\x99\xbf"
+ "\x9d\xce\xbf\x8a\x7f\x89\xae\x09\x25\x94\xc5\xfb\x0f\xec\x43\x61"
+ "\x5f\x2d\xf3\x27\x8d\x2d\xa7\xac\x68\xd8\xb9\xca\xc9\xea\x36\xfb"
+ "\xd2\xb2\x79\x2b\xd9\xbb\x61\xc5\xc2\xb2\x62\xfb\x93\xcb\x96\x2c"
+ "\xe1\x13\x9f\x33\xa7\xe6\xc5\x9e\xe9\x34\x6f\xc6\xb8\x60\x5d\x3b"
+ "\x7d\x8e\x35\x9c\x6b\x57\xf1\x73\xdf\xae\x8d\xfa\xce\x39\x3f\xab"
+ "\xef\x69\xb8\x3f\xd8\xc8\xe3\x36\xbf\x57\xcf\x47\xb2\x95\xcf\xd5"
+ "\x5e\x39\xde\x6b\xdb\x6d\xbb\xd4\x19\xca\xb7\xef\x65\x5f\x06\xc5"
+ "\xa7\xaa\xac\xf2\x53\xdf\x3b\x59\xed\xe5\xef\xed\xea\xf7\x5d\x70"
+ "\xab\xb1\x84\x7d\x17\x78\x3f\x59\xc9\xde\xdb\x16\x43\xf6\x82\xae"
+ "\xb7\x33\x60\x3f\xd5\x5c\xbc\xce\x79\x5b\x9e\x27\xd1\xcf\xca\x32"
+ "\x4e\x6b\xa3\x62\xcc\x0d\xed\x6f\xc3\x76\xdb\x8f\xd4\x7a\xf7\xdb"
+ "\xaf\x32\xbe\x3e\xda\x7b\x28\x2a\x7d\x0c\xda\x76\x48\xa5\xbf\x9d"
+ "\xcf\xe5\x13\xd2\xf9\xde\x45\x4f\x2e\x7e\xb6\x74\x5e\xd9\xc2\x27"
+ "\x16\x96\x2c\x2c\x5b\x29\xc3\x5e\x8c\x97\xff\xee\x1e\x57\x34\x47"
+ "\x3a\x0a\x44\xdb\x71\xbc\xee\x61\xc4\xdd\x52\xeb\x4e\x3f\xbf\x4e"
+ "\xfa\x4a\x5e\x5c\xfb\x02\x6a\x4d\xf0\xe7\x93\x7c\x49\xff\xb1\x77"
+ "\xc0\xe7\x44\xa5\xf7\xa4\x8d\xf6\xd8\x47\xd3\xe4\x63\xf4\xcb\x7c"
+ "\xde\x6f\x02\x9d\xd3\x79\x5c\xda\xdc\xcb\xe3\x47\x17\xb5\x85\x6f"
+ "\xd2\x7d\xa6\x7f\xfe\x3a\xc7\x19\x66\xdf\x35\xd0\x7e\xd7\x31\x3c"
+ "\xcb\xf6\x9f\xb6\xed\xe2\xf3\x4d\x62\xb1\xed\x47\xcc\x0b\x8c\x1f"
+ "\x68\xb7\x5d\x88\xfc\x6d\x62\x71\xf1\x76\x71\xba\x78\x1b\xec\xb5"
+ "\xae\x9d\x5b\x45\x27\x70\xd8\x0f\xba\x15\x46\xfb\xfe\x6c\x52\xdf"
+ "\xb8\xef\x54\xb4\xfe\xf9\xc7\xd0\x55\xb7\xe2\x77\x85\x70\x37\xb9"
+ "\x15\x5d\x7f\x2e\xf7\x10\x66\x16\x8b\xd3\x03\xb1\x2d\x7e\xc1\xcf"
+ "\x7d\xf8\x69\xc2\x7d\x60\x77\xd4\x1e\x27\xbf\xbb\x41\x6c\x38\xf0"
+ "\x06\xdb\xdb\x8a\xe7\x7e\x71\x8b\x1a\x1f\x0f\xbc\xe1\x77\x16\x27"
+ "\xa3\x4c\x44\xfa\x9b\xc9\x36\xfd\x62\x9e\x77\xfd\x39\xf6\x7f\x08"
+ "\xe8\x65\x0b\xf9\xd9\xf3\x34\xdb\xd8\xbf\x88\x08\x93\x53\xf0\xbe"
+ "\xa8\xb7\x2b\x4c\xba\x3f\x13\x78\xf3\xed\x5d\xfc\x0d\x72\xe6\xcf"
+ "\x9d\x2f\x91\xa5\x66\x24\xc1\xee\xfa\x45\x7f\xfc\x13\x91\xa6\xec"
+ "\x20\xe6\x55\x8e\x93\x2e\x7d\x1f\x86\xab\x78\x7f\xcc\xab\x80\xdb"
+ "\xc8\xfb\xa6\x8a\x67\x7f\x71\xe8\xbf\xc7\xb3\xbf\x90\xbc\x37\x61"
+ "\x23\x15\xf2\x5e\x03\xfb\x03\x70\x1c\x71\xe8\xd1\x2e\x25\x87\xbf"
+ "\x9c\x28\xfd\x1d\xa0\xeb\x79\x1f\xab\xbe\x02\xf6\x9b\xa5\xb5\x9b"
+ "\xed\xce\xb0\x8b\x2a\x79\xcf\x59\x3b\x77\x72\x2f\xfb\x09\xc8\xf3"
+ "\xa3\x32\xfe\xfe\x1f\xa8\xfe\x2c\x99\x3b\x69\x5f\x0e\xef\x8d\x0c"
+ "\xd0\x7a\xdf\x2b\x0c\x43\x6c\x68\xb4\x5b\xcb\x4d\x6e\x86\xa1\x9d"
+ "\x3b\x95\x6d\x94\x83\xad\x35\x8c\xcb\x1d\xa3\x7d\x2b\x65\x39\xce"
+ "\x2b\xe3\xde\xa4\xcf\x15\x16\x2d\x4f\xd6\xa9\x9e\xf3\x04\xf4\x63"
+ "\xf8\x5c\x64\x2f\xee\xe7\x30\x9d\x70\xcd\x97\x6b\xf2\x7d\x36\x92"
+ "\xf1\x96\x2c\x1f\xfb\xbc\xbe\x7f\x78\x24\x3e\xec\x6f\x5d\x86\xb1"
+ "\x44\xda\xe9\xfb\xda\x76\xfe\x9d\xcc\xa5\x4f\x73\x7f\xfe\xb2\x50"
+ "\xda\xaa\xa7\x68\xb7\xc2\xef\x97\xf3\x7a\x36\xb4\x14\xf6\x58\x44"
+ "\x7a\xc0\x64\xa1\x66\x5b\x88\xc7\x30\x4f\xb3\xad\x17\xfa\xe3\x97"
+ "\x99\x3e\xd3\x6f\x6b\x94\x8d\xa8\xca\xf1\xfe\x3d\xf3\x63\xb2\x2d"
+ "\xdd\x89\xf7\xb9\x86\x6f\x0d\xf3\xe1\x26\xbc\xf3\xd1\x3e\x3b\xd3"
+ "\xcd\x47\x3f\x2f\x6a\xef\x56\xe7\x6f\xf0\x3c\x94\x63\x2a\x48\x5a"
+ "\xaf\x7b\xa6\xcb\xba\xd6\xc3\x67\x7c\xb3\xad\xe1\x1c\x13\xef\xcf"
+ "\x73\x6c\x07\x8e\x77\xc1\xf1\x1d\x78\x8d\x55\x7f\x9f\x15\xf7\x7e"
+ "\xbc\xf1\x1e\xf5\x7a\x8c\xb8\x0c\x1c\x37\x8b\x7d\x3f\x22\xba\x3f"
+ "\xa8\x8c\x27\x75\x46\xed\x6f\xb3\x3f\x28\xaf\xef\xf2\xb9\x56\xde"
+ "\x83\x46\xb9\xfe\xf3\xbf\xea\x3c\xd7\xaf\xfa\xfd\xdf\x70\x9f\xd1"
+ "\xef\xbb\x05\x5a\xf4\xb8\x85\x25\x00\xd9\x0e\xb8\xb5\x5c\xbc\xcb"
+ "\xc2\xd8\xb2\xfb\x82\x73\x72\x8e\xbf\xbd\x8c\x4c\x5a\x6a\x1b\xcf"
+ "\xd7\x4c\xcd\x01\xd2\xcf\xb2\xff\xea\x45\x3d\xee\x41\xf2\x29\xfa"
+ "\xd5\xcc\x81\xbd\xe0\x88\xbe\x8e\xf9\xab\xfd\xca\x8e\xfe\xd5\x7e"
+ "\xb9\x8e\xb9\x41\xf3\xff\x70\x55\xc8\xb4\x77\x95\xcf\xa4\xce\xb7"
+ "\xfc\x6a\x8f\x8f\x0e\xf8\x0c\xdf\x24\xe4\x2b\x19\x2c\xbe\x1e\xc6"
+ "\x0d\xdd\x86\xfd\xf5\x6b\x72\x9c\xe8\x9f\x97\xfe\x5a\x7d\xf7\x70"
+ "\xdd\x68\xfe\xe6\x81\x53\xa4\xfe\x55\xfa\xc6\x7a\x4b\xcf\xf0\x7a"
+ "\xe6\x50\x35\x47\x56\x79\x74\x7f\xde\xcb\x4e\xc4\x3e\x8f\xe4\x67"
+ "\x45\xb3\x5f\x4f\x36\xf6\x46\x36\x9b\x34\x8e\xc1\x2e\x9c\x0d\x22"
+ "\xe0\x2d\x0d\x10\xec\x63\xbf\x17\x36\x11\xea\x10\xa5\x4b\xf8\x1b"
+ "\x09\xbf\x7e\x8e\x69\xaf\x64\xea\xd7\x72\xff\x42\x73\xdd\x21\x9c"
+ "\x3c\x2f\xf0\x77\xcb\xf9\x29\xf2\x5d\x8a\x7c\x3b\x5a\xca\xbb\x21"
+ "\xf7\xad\x3e\x8e\x6b\xd9\xa9\xd7\xed\x4f\xf9\xc0\xf2\xd5\x34\x2a"
+ "\x44\x9d\x7b\x7d\xf4\xbd\xfd\x17\x2f\xe7\xbf\x1e\x7c\x7f\xb6\xdf"
+ "\x66\xc9\xa1\xc1\xe6\x99\xbc\x8e\x70\x23\xea\x9f\x29\x18\xff\xfd"
+ "\x3b\xc2\xa6\x10\xf5\x99\x86\x89\xaf\x57\x3a\xa0\x07\x86\x89\xc8"
+ "\x2a\xf4\x57\x8f\x0d\xf3\x90\x56\x6a\x0f\xb7\x48\xdf\x1d\xc8\xb0"
+ "\xb5\x22\x20\xce\x78\xc3\xfb\xa4\x0f\xb7\x1a\xa7\xf7\xbf\xe2\x0d"
+ "\x37\x51\x7b\xa9\x9f\x3c\x4b\xde\x87\x2d\xb1\x5f\xc6\xcb\xbb\xb1"
+ "\xb4\x92\x6e\x38\x25\xdf\xe7\x28\xfb\x65\x7f\x9d\x7e\x2d\xe1\xf8"
+ "\xa7\xd1\x38\xdd\xbd\x6c\xd1\x93\x65\x0b\x17\x2f\xba\x61\xc6\xfc"
+ "\xe5\xf3\x4b\xec\x0f\x2a\xb7\xca\x98\xf1\xce\x32\x10\xeb\xfd\x9d"
+ "\x62\x1e\x8b\xd8\x86\xe4\x98\xef\x17\x8a\xf7\x6e\xc4\x7a\x87\x3d"
+ "\x37\x96\xd7\x5d\xff\x37\xe3\xbd\x1b\x36\x22\xc7\x7a\x1f\xd8\x83"
+ "\xf8\x4d\x66\xbf\x0c\x68\x07\x83\xfc\xcc\xe3\x9f\xe6\xda\xbf\x9b"
+ "\xe5\x68\xa7\xb4\x5b\xde\x69\x88\x8e\x87\xc5\x36\x0b\xaf\x5b\x21"
+ "\x7d\xbf\x71\x96\x1a\xbc\x88\x71\xe3\x9d\x43\x03\x67\xbb\xde\x39"
+ "\x02\xba\x65\x28\xf9\x95\x79\x3b\x8d\xbd\x7a\xfd\x1b\x7b\xd2\xb7"
+ "\x40\x73\x69\x76\xb5\x3e\xf6\xce\x3f\x77\x6a\xc3\x2c\x6a\x6f\xe6"
+ "\x37\xe9\xc6\xb9\x41\x25\x9b\x07\x75\xd9\xfc\x4d\xe6\x85\xfc\x29"
+ "\x06\x64\xe3\x37\x45\x03\x72\xfd\x37\xa3\x6c\xd1\xe7\xf9\x62\xe8"
+ "\xf3\x94\xcb\x4f\x50\xe3\x4a\x5e\x33\xc3\xfd\x55\xb8\x9f\xc7\xb0"
+ "\xd4\x19\x8a\xc6\x29\xfa\x3d\xea\x68\x1c\xa7\xdf\x7f\x19\xf7\xc3"
+ "\xf5\x7b\xd8\x53\xbf\x3d\xab\xdf\x43\x66\x7f\xfb\x89\x7e\x9f\x81"
+ "\xfb\xdf\xe9\xf7\xd0\xf9\xbf\x7d\x53\xbf\x1f\x85\xfb\x57\xf4\xfb"
+ "\x2f\xe1\x7e\x8d\x7e\x0f\x19\xfc\xed\x7c\x7d\x5f\xdb\x72\x9c\x7e"
+ "\xfb\xc0\xc5\xcf\x9b\x7e\x3b\x46\xd9\x49\xbf\x9d\x0b\x9b\xe9\xb0"
+ "\x1a\x33\xfa\xd3\x4a\xd1\x37\x1e\x83\xbe\x48\xcf\xe0\x7a\x90\xee"
+ "\xf6\xd1\x8f\x76\x47\xa5\x9b\xf5\xfc\x0d\xd0\x73\x93\x07\xd2\x7f"
+ "\x13\xd2\xd3\x61\xff\xbc\xd9\x1a\x95\xde\xad\xa7\x1f\x46\xfe\x96"
+ "\xa8\x74\x7d\x1f\xf7\xb7\x5d\x3e\x6a\x38\x1a\x95\x7e\x44\xa5\x37"
+ "\x92\xe1\x47\xa2\xa7\x1f\xd2\xd3\x71\x5f\xbb\x31\x2a\xbd\x51\x4f"
+ "\x87\xfe\xff\xcd\xa4\xa8\x74\xf5\xad\x7a\x79\xde\xd0\x2a\x9a\xcb"
+ "\x59\xb6\x1a\xe7\xf8\x68\x67\x79\x54\x9e\x5d\x7a\xd9\x12\x1f\xed"
+ "\xd8\x15\x95\xae\x9f\x55\x6d\x5c\xef\xa3\xff\x0a\x47\xa5\x0f\x3a"
+ "\x9f\x4d\xaa\xa5\xc2\xc1\xd6\x96\xf9\x9b\x64\xd2\x17\x56\xda\xa4"
+ "\x4d\xef\xf2\x59\x44\xeb\x0e\x71\xcc\x5e\x21\xc4\x31\x6a\xda\xad"
+ "\xfc\x36\x5b\x8f\xb2\x1f\x9d\x3a\xd3\xd9\x54\x23\xcf\xf9\xb1\x9d"
+ "\xc9\xe7\x3c\x57\xc9\xb4\xcb\xa5\x3d\xe4\xa8\x54\x71\x57\x95\x8f"
+ "\x71\xb7\x5c\x63\xd1\xf7\x9f\x91\x67\x0a\xdb\xd2\x0c\x87\xd7\x61"
+ "\xbd\x65\xbd\xd2\xef\x95\xe7\xb8\x9c\xc6\x6b\x0d\xf2\xec\x5f\xd4"
+ "\x5c\x57\xe9\xfd\xa6\x77\x35\x8e\xcd\xe0\x52\xeb\x31\x2c\x8b\x9c"
+ "\x9f\x7d\xa6\xa2\xf3\xfa\xa8\xc9\xc3\xd7\x64\xdb\xa5\x1f\x05\x5d"
+ "\x4d\x0d\x03\xe7\xd1\x1a\x43\x7a\xfa\x87\x48\xdf\x1f\x95\xde\x39"
+ "\xb8\x6e\x87\xbe\xb3\x34\x16\xf7\x9d\x13\x81\xf0\x39\x11\xda\xfc"
+ "\x57\xe0\xbd\x40\x9e\xad\xfa\x4a\xc4\xdd\xe8\xd0\xe3\x9c\x7c\x1a"
+ "\x5e\x2e\xfc\xd0\xd9\xfc\x3d\x91\x4b\x66\x05\xfc\x34\xab\x34\x28"
+ "\x36\x3d\xc1\xfe\x8f\x67\x65\xcc\x2f\x67\x37\xc7\x5a\x67\x9f\xba"
+ "\x00\xef\xdb\xa5\xb5\x63\x8c\xdb\xb9\x80\xdf\x7f\x42\x33\x8b\xfd"
+ "\xd4\x56\x1c\xa1\x9d\x80\xbd\xe3\x09\xc3\x9f\xf5\x40\xff\xf9\x1f"
+ "\xc6\x81\xeb\x73\xca\xef\x02\x1d\x90\xfe\x11\xfc\xdd\x43\xb1\x69"
+ "\x8c\x5f\xbc\xc7\xb6\xac\x96\xfe\xff\xd8\x7b\x1b\xb0\xa8\xae\x6b"
+ "\x6f\x7c\xcf\x30\xe8\x88\x03\x8c\x96\x98\xd1\xa0\x99\x24\xda\x4e"
+ "\x2c\x26\xa4\xc5\x5c\xda\x6b\x5a\x92\x98\x5b\x93\xaa\xd0\x54\xff"
+ "\x97\xde\x18\xc5\x08\x76\x68\x40\x27\x48\x08\x1a\x04\x44\xe5\x45"
+ "\x03\x48\x6f\x68\x2e\x49\xf8\xd2\xd7\x2a\xe9\x35\x89\xed\x35\xcf"
+ "\x35\x79\x4c\x3b\x56\x6c\x30\x01\x06\x15\x23\x26\x18\x47\x82\x04"
+ "\x0d\x9a\x91\x0f\x19\x61\xe6\xec\xff\x5a\x7b\x9f\xc3\xcc\x00\x03"
+ "\xc3\x80\xc6\xbc\x95\xe7\x39\xcf\x70\xf6\xd9\x67\x9f\xbd\xd7\xfa"
+ "\xed\xb5\xd6\xfe\x5a\x2b\x70\x13\xd1\x82\x6e\x2f\x84\xff\x09\xbb"
+ "\xf0\x19\xa4\xbb\x6b\x13\xef\xcb\x7f\xad\x13\xd7\xd2\x5a\xb9\xbc"
+ "\xf8\x6b\x1d\xdd\x85\xe3\xa6\xbf\xd6\xc3\xbb\xad\x96\x09\xc2\xa0"
+ "\xfb\xe2\x36\x96\x10\x79\xef\x76\xb0\x4d\xae\x1c\x94\x73\xf9\xf4"
+ "\x37\xa3\x20\x57\x6e\xc2\xf9\x5e\x16\x13\x64\x7b\x8d\x6e\xdf\x1a"
+ "\xab\xbc\x66\x43\x33\x79\x79\x2a\xd1\x2c\xb3\xe2\x79\x81\xbf\x3d"
+ "\x1a\x90\x8c\xfe\xd6\x04\x0b\xd8\xa1\xf2\xff\x81\xe7\x7f\x5d\x73"
+ "\x50\x6e\x63\xf6\xca\xdf\x8c\x6c\x8e\x30\xa7\x1a\xf7\x03\x06\x9a"
+ "\x1a\xec\xa8\x07\x98\x9d\x0c\xf2\x5f\x69\x7f\x49\x3f\xd9\xb6\x4e"
+ "\x3f\xb1\x24\x89\xa8\xec\xeb\x74\x41\xaf\x5e\x23\xe1\x92\xfe\x29"
+ "\x49\x01\x9d\xd2\xad\xf1\xdb\x01\x3a\x05\xe7\x1e\x02\x64\x6a\xb6"
+ "\x16\x8a\xff\x0b\xf2\xff\xdb\x5a\x9a\x32\x74\x7c\x23\xfb\x4b\x3a"
+ "\x39\xfa\x17\xc7\xba\x0c\xd6\xd6\x5c\x18\x67\xdb\xc5\xb3\xd0\xe9"
+ "\x17\xc8\x14\xc3\x6a\x22\x0f\xe8\xa2\xc6\x4b\x09\x44\x8e\x31\x61"
+ "\xd2\xe3\xd8\xfc\x9e\x6f\x8d\xde\x46\x4c\xa9\x9f\x91\xf4\x24\xe4"
+ "\x91\xf1\x0e\xb4\xd3\x70\x3f\x2b\xe4\x57\x03\xea\x67\x05\x5a\x41"
+ "\x67\x58\xc1\x96\xfe\x1d\x8e\x1d\x8d\x3f\xe9\x64\xfe\x8d\x8d\x78"
+ "\xf6\x19\xec\xfd\xc7\x30\x6d\x69\xc6\x05\x16\xdf\xd9\xcc\xfb\x96"
+ "\x31\x14\xef\x33\xf0\x6c\xb6\xdf\x89\xd0\x77\x7a\xac\xbe\x7c\x9c"
+ "\x64\x7c\x88\xf3\x4c\x30\xf3\x31\x99\x31\xd4\x1d\x76\x85\x1c\x63"
+ "\x0e\x45\x3f\xf8\xc5\x36\xb2\xb8\x93\x9a\xd9\x3a\x33\xfa\xa4\x48"
+ "\xfd\xb9\x91\x5e\x2b\x20\xfc\x1c\xa5\xb1\x4b\xd8\x66\xcc\xe1\x3e"
+ "\x49\x8d\xd2\x1e\x31\xd0\x91\xc6\x22\x36\xc7\xbe\xcd\x58\xc1\xe7"
+ "\x9c\x8d\x07\x37\x4f\xc3\xfd\xe8\xc6\xce\x8e\x09\x46\xd0\x95\xc6"
+ "\xaa\x0e\xbf\x4f\x0f\xba\xd7\x47\x1f\x1e\xd4\xce\x20\x41\xb8\xd6"
+ "\x81\xfb\xc1\xcb\xf8\x3e\x70\xf8\xc6\x61\xdc\x67\x8e\xcf\xee\x6e"
+ "\x32\x10\x1f\x9c\x1f\x86\xb4\x27\x1e\x2c\x26\x5a\xa8\xab\x3f\x55"
+ "\x1a\xf5\x6c\xef\x5d\x8e\x31\xd5\xd4\x46\x8d\xb8\xe7\x93\xaf\x49"
+ "\xfd\x5d\x41\x27\x18\xf5\x62\xfe\x3f\xd4\xb6\x41\x1b\x94\xc6\x70"
+ "\x93\xf5\xb2\x68\x13\x1e\x06\xec\x1b\xc3\x69\x8e\x71\x01\xf7\x71"
+ "\x70\xf8\x82\x24\x57\x39\x46\x0f\x9f\xe1\x74\xfb\xf0\x20\xa7\xdb"
+ "\xdf\x15\xa2\xbe\xba\x1b\xff\x07\xdd\x1d\xca\xf7\x50\x1c\xae\x93"
+ "\x6c\x64\xb3\x98\x07\xdf\x31\x93\xc3\x07\xb8\xac\x3d\x6c\x81\xb6"
+ "\xe7\xf0\xe7\x87\x0b\x31\x0d\xda\x07\x3a\xeb\x70\x08\xb6\xcb\x9d"
+ "\x6c\x65\xb4\x48\x23\x3e\x50\xe7\x68\xdc\xeb\x8b\x76\x8a\xa9\xf3"
+ "\xe7\x46\x1e\xb7\xf4\x48\x1e\x3b\xeb\x0d\xdf\x01\xfe\xc8\x51\x6e"
+ "\xe2\xd9\x74\x2c\xcf\x51\xff\xbf\xbf\x20\xd5\x05\xbf\x87\xcf\xa0"
+ "\xad\x78\x66\x1f\x69\xb5\x00\xf3\x20\x5f\x5b\x0c\x38\xf7\xd4\x05"
+ "\x34\xc3\x7d\x5c\x47\x8a\x91\x26\x9c\x66\x47\xd8\x59\xe3\x1d\x7d"
+ "\x7c\x38\x92\xe8\x4a\x0f\x7e\x2f\x28\x41\x36\x24\xe1\x7e\x9e\x23"
+ "\xc5\x22\xfd\xda\xf8\xf7\x8f\x3c\xc9\xe8\xc5\x9f\xc9\x9c\xde\x9d"
+ "\xde\x97\x97\xc7\xc8\x95\xe3\xda\x38\xae\x95\x70\xbc\x1e\x09\x71"
+ "\x7a\x2f\x64\xc5\x55\xb4\x91\x0f\x85\x63\x4c\x53\xa4\x79\x77\xd6"
+ "\x91\x08\x07\xbd\x79\x39\x83\x7c\x63\x86\xf4\x0d\xc8\x43\xa4\x7a"
+ "\x02\x7f\x44\x1d\x7c\x64\x8b\x83\x27\x7f\xdf\x2d\xbd\x57\xca\xce"
+ "\x8b\xfd\x3d\x0a\xcf\xb9\x0e\x2a\x07\x71\x4d\x0e\xac\x8a\x5a\xdb"
+ "\xcf\x8d\x0c\x8f\xe4\x88\x0d\xf7\x2a\x03\x5d\xa3\x39\x86\x8e\x98"
+ "\xb9\x2e\x3c\xc2\xd6\xeb\x71\xbd\x8b\xfb\xb4\x3d\x02\x63\xa7\xbf"
+ "\x8b\xbe\x1f\x2a\x95\xbc\x0e\x95\x88\x01\xd2\x7f\x5c\xf7\xd8\xca"
+ "\x58\x76\xa0\x7b\xce\x8b\x86\xfe\x67\xc7\x94\x8e\xb3\xbb\x95\xf3"
+ "\x9d\xce\x3e\x87\x70\x7a\x57\x16\xc0\x38\xf5\x40\x3e\xf7\x7d\x7c"
+ "\x30\x1f\x78\x96\xd1\x45\xa6\x61\x2c\xa0\x74\x03\xbd\x54\x6b\x80"
+ "\xb1\xb5\xb2\x66\x3e\xcd\xa9\x59\x90\xde\x45\xfc\x70\x2f\x0c\xca"
+ "\x1b\xdc\x6b\x4b\x27\xd4\xa0\x5f\xa3\x05\x8e\xf3\x95\x1f\xcd\x83"
+ "\xb1\x6d\x45\x1e\x8c\x65\x33\x2e\x93\x69\x7c\x6f\x4b\x65\x8d\x38"
+ "\x5f\xf8\x86\x90\x53\xb3\x10\xcf\xee\xd6\x42\xab\x68\x86\xfe\x0d"
+ "\x61\x5b\xcd\x42\x28\x77\x59\x46\x22\x99\x8c\xfa\x0d\xf7\x50\x73"
+ "\xcc\x7c\x14\x0c\xe5\x2e\x43\xbf\x7a\x02\x8d\x96\xc1\xf7\xcb\x05"
+ "\xe5\x49\x45\x9e\x40\xd8\xde\x7d\xc0\x99\xbc\x89\x1c\x9d\x0e\xdf"
+ "\x2f\xc7\x18\xa5\x38\x0f\x64\xb2\x5a\xd1\xf7\x47\x39\x3c\x0b\x80"
+ "\x67\x4f\xc2\xaf\x80\x3e\xf6\xd0\x67\x3f\x94\xaf\xc1\xf2\xe1\x5b"
+ "\xe5\xbc\xee\xcc\xf7\x4d\x39\xe4\xdb\x88\x79\x24\xdf\x7d\x42\x46"
+ "\xb4\x0f\x3e\xc7\xb3\xe0\x76\x8c\x81\x91\x6a\x26\xfc\x9d\x86\xbe"
+ "\x77\x44\xfb\x19\xfa\xf2\x47\x77\xd0\xed\x9f\xd6\x41\xde\x83\xb8"
+ "\x57\x98\xdb\xb2\x1f\xa9\xc5\xbe\x0e\xf6\xf1\x47\x93\xc4\xff\x55"
+ "\x7d\x79\x33\xa2\x49\xfa\x75\xa2\x61\xeb\xdd\x2f\xf9\x80\xec\xfd"
+ "\x87\x1e\xe3\x69\x38\x95\xf9\x08\x96\x97\x8b\x3e\x01\xe3\x88\x0a"
+ "\xe4\xf2\x44\xa8\x37\xc6\xc2\x39\x8f\x73\xe8\x22\x6d\xe6\x01\x9f"
+ "\xf6\xef\xe0\x7e\x1f\x0f\xe4\x01\xf6\xd3\x37\x82\x3d\xb0\x91\xa8"
+ "\x36\xda\x49\x30\xb6\x13\xf8\xd6\x8a\xfb\xdd\x71\xec\x86\xb4\x11"
+ "\x79\x78\x08\xda\x52\xb9\x51\x4f\x9b\x37\xb6\xd1\xd6\x1a\x7d\x03"
+ "\x01\x3d\x33\xb9\xd6\x50\x87\xfe\xe7\xcf\x63\x5b\x71\xee\x0f\x68"
+ "\x7a\xc8\x8c\xdf\xd8\x56\x53\x89\xe7\xa1\xd8\x3c\x81\xbc\x32\x48"
+ "\x3a\x3b\x56\xca\xce\x97\xfd\xa3\x2f\xfe\x19\xd4\xa5\x52\xac\x4b"
+ "\x95\x80\xff\xa7\xb0\x33\xa8\x7e\x38\xfe\xc1\x39\x8d\x15\xeb\xcb"
+ "\xfb\xce\xce\xf0\xb9\x81\x7f\x54\x39\xf9\x5e\x63\xef\xe2\x1c\x01"
+ "\xbe\x1b\x69\xa3\x5d\x3b\xc4\xbc\xf8\x6e\xe4\xfa\x15\x14\xdf\x85"
+ "\x77\x6c\x7d\xef\xb8\x9c\xe3\x3a\xca\xed\x0a\xa0\x2d\xfe\x6f\x01"
+ "\x5a\x8a\x7b\xdb\xb4\x7c\x5f\xc2\x47\x61\xd2\x5e\x00\xe8\x3f\x6d"
+ "\x88\xa7\xc1\x7d\xc6\x7f\xb4\xcc\xd5\x0f\x56\x55\x08\xfa\xe8\x82"
+ "\xf4\x64\xc9\x5f\x15\xfc\x9f\x09\x65\xf0\xfd\x95\x4e\x7e\xe8\xf2"
+ "\x9d\x7c\x5a\x66\x58\xe8\x97\x88\x13\x90\x2b\x3e\xc0\xcb\x6a\xba"
+ "\xed\xa4\x82\x9f\x85\xab\x9a\x8e\xf5\x6c\x22\x1f\xa1\x8c\x0b\xe4"
+ "\xfe\x32\x3e\x3a\x2b\xca\x8f\x86\x48\xbb\x2d\xd0\x0c\xdf\xc4\x73"
+ "\x5d\x8e\xfb\x8f\xea\x41\x9e\xa8\xe1\x5d\x7f\xee\xf3\xf1\xa3\x6a"
+ "\xd7\xfc\xec\x79\x66\xbf\xfb\x88\x7e\xf7\xda\x4e\xe8\x37\xee\xf6"
+ "\x3c\xe4\x4d\x63\xf3\x87\xb6\x80\x4d\xc4\x90\x71\x91\xf8\x00\x56"
+ "\x2e\x60\xdd\x6a\x5b\xdb\xb0\x4d\x81\x34\x2b\x94\xe0\x3c\x28\xb3"
+ "\x2d\x41\xa7\x37\xcd\x84\x3c\x17\xc9\x14\xdc\x8f\x8f\xf1\x70\x20"
+ "\xff\x25\xee\xab\xfe\xd8\x7b\xcb\x5e\xf4\x23\xc2\x6f\xa3\x27\x52"
+ "\xf9\xd3\x4a\x5c\x73\x7d\xbb\xc7\xec\x8b\xeb\x8f\xe9\xaf\x03\x26"
+ "\xed\x64\x0a\x60\xac\x19\x63\x0f\xc2\x3b\x6d\xff\xb7\xa7\xd5\xd7"
+ "\x64\xfb\x8c\x18\x7e\x47\xe4\x97\xc8\xb1\x0a\x45\x1a\x51\xec\x68"
+ "\x21\x6a\xe0\xab\xed\x88\x2d\x9c\x48\xfe\x2e\x8a\x27\xf3\xb3\xfa"
+ "\xc5\x20\x5f\xd7\x69\xa8\xb5\x3b\xeb\x98\x02\xc6\x5e\xd1\xd2\x18"
+ "\x3b\x97\xc7\xbc\x51\xc0\xf7\x5f\x90\x8b\xbe\x3d\x38\x6d\x8f\x3d"
+ "\xca\xcf\xd2\x05\xfd\x16\xde\x09\x77\xd8\xdf\xc7\xc4\x73\x68\x27"
+ "\x75\x5c\xf6\x1d\xab\x3c\x02\xa3\xe0\x2d\x7c\xef\x48\x10\xe4\x8d"
+ "\xed\xdb\x3b\xc2\xe6\xad\x8e\x55\x02\x0f\x75\xdc\x36\x3f\xa9\x5b"
+ "\x61\x57\x8a\x7d\x10\xd3\x0f\x85\xe3\xbb\xf0\x5e\x60\x27\x9b\x63"
+ "\x3a\x56\xee\xc0\xda\x31\x8c\xb9\x27\x83\x36\xa9\x80\xaf\x8d\xd8"
+ "\x2e\xa4\x09\xe4\x83\xfa\x57\x99\x8f\xec\x76\xe3\xfb\x57\x79\xa8"
+ "\xd5\x86\x73\x20\x39\x42\x2b\xe0\xe9\x32\xf0\xe0\x7b\xe8\xdf\xcb"
+ "\x04\xdf\xa9\x29\xed\x21\x35\x9a\x0e\x52\x0b\xff\xe3\x1e\x71\xe3"
+ "\xef\xbe\x24\xcd\xda\xc1\xf5\x0d\xe8\x2c\x3d\xd4\x39\x15\xcb\x42"
+ "\x59\x80\xfb\xea\x4c\x69\xa0\x7f\x2c\x50\x16\x8c\x40\xb0\x8c\x1a"
+ "\xa1\x95\xd4\xa4\xc2\x38\x2b\x37\xd8\x52\x5b\xfa\x19\xa9\xd5\x9c"
+ "\x64\xdf\x41\x9b\xd0\x98\xd4\x31\x54\xd9\x39\x50\x76\x91\x58\x76"
+ "\x1b\x94\x1d\xe4\xb6\xec\x1c\x41\x3d\xc2\xb2\x3d\xaf\x77\x8e\x40"
+ "\x46\x52\x36\xd8\xbb\x6d\x18\xd3\x08\xcf\xdb\xa5\x4f\x25\xfe\xf6"
+ "\x6b\xe8\xdb\xf5\x6e\xca\xf7\x29\x7f\xf2\x3a\x3b\x93\x87\x6b\xe8"
+ "\xdb\xaa\x5b\xd9\xd9\xbc\x2b\x84\xed\x35\xe5\xe7\xf1\x2e\x10\xdc"
+ "\xa7\xd2\x9d\xf5\xc9\x16\xc7\x58\xa9\x6f\xfd\x10\x6c\xd5\x4f\x2a"
+ "\xf8\x7e\xd4\x6a\x71\x3d\xe2\x93\x67\xb1\xac\xc1\xeb\x51\x2b\xee"
+ "\x6b\xfe\xa4\x6f\xcf\x5d\xc7\x84\x5a\xad\x58\x96\xb6\xff\xbc\x9e"
+ "\x14\x7c\x38\x2e\x35\x59\x8a\x63\x9c\x2c\x1e\x31\x7e\x3a\x6e\x55"
+ "\x5c\x7c\x4a\x5c\xac\x76\xc9\x8b\x49\x6b\xe6\xac\x5d\xbd\x5a\xbb"
+ "\x28\x6e\xdd\xba\x95\xbf\x8d\xf3\x23\x4b\x92\x56\xae\x59\x17\x8f"
+ "\x73\x6f\x5a\xed\xfc\x1f\xaf\xd0\xaf\x4d\x9e\xf3\xb3\xf9\xa1\xfd"
+ "\xe6\xde\xf0\x3c\x6a\x23\xda\xe0\xa0\x3b\xa6\xa4\xdb\xc9\x24\xf4"
+ "\xd5\x14\xb8\x9e\x1a\x5f\x86\xf1\x1f\xe0\xef\x12\xea\x29\xd4\x0d"
+ "\x38\x36\x40\x3f\x91\x20\xbf\xab\xdf\x7c\x8d\xd6\xb5\x90\x2f\x7e"
+ "\x03\x76\x65\x43\x19\xf7\x79\xd8\x08\x63\x72\x0b\x5f\x1b\xfc\x62"
+ "\x2e\xfa\x33\x7c\x05\xd2\x2c\x13\x4e\xea\x76\x7c\x41\x14\xa0\xd7"
+ "\x60\x5c\x52\xdd\x49\xe5\xe3\x69\xee\x14\x5a\x49\xbf\xd4\x10\xd1"
+ "\x4f\xbc\xdc\x64\xb6\xe2\x3e\x0b\x65\xa4\x2d\x83\xa2\x3c\xe5\x7d"
+ "\xab\xba\x8b\xd3\xc5\x98\xc3\xf7\x7b\x7f\x71\x07\x8e\x61\x36\xb3"
+ "\xd8\xa7\x35\xd0\x7f\xfe\x56\xed\x90\xd3\x9f\x6a\x45\xdb\xb1\x01"
+ "\xe8\xfe\x52\x13\xdc\x73\x5f\x32\x35\xa1\xae\x7b\x68\x4c\xa0\x97"
+ "\x3f\x9b\xcf\x2f\x7c\xe7\xb3\x58\x7e\xe1\xff\xce\xd7\x59\x2b\xbf"
+ "\xfa\xa7\x8f\xf6\x92\xbe\xef\x75\x19\x0d\xc3\x5c\x1e\x7c\x9f\xb5"
+ "\xfb\x5b\x6c\xff\xa8\xca\x30\x0f\x75\x21\xde\x00\x5b\x8d\xaf\x7c"
+ "\x41\x94\x80\xcf\xc2\xbc\xe7\x00\xd3\x67\x89\x26\xcd\x46\x9b\x33"
+ "\x9e\x25\xc1\xe9\x17\x09\xc6\x9e\x6c\x4d\x4e\xa5\xcd\xe9\xd7\xd0"
+ "\x26\xfd\xf4\xcf\x80\xdf\x83\xf9\x4d\x44\x95\xd7\x44\xd4\xb5\xc9"
+ "\x18\x97\x1a\xfd\xb9\x41\x4d\xdb\xe0\x82\xfb\xea\x14\x2b\xf9\xc4"
+ "\x72\x15\xf7\x9d\x19\x6b\x63\x40\xee\x34\x12\x82\xf8\x55\xc5\x90"
+ "\xa0\xe2\x29\xf4\x10\xcd\x32\x2c\xa3\x72\xc3\x42\x48\xab\x7f\x57"
+ "\x88\xf0\x7d\x77\x43\x95\xaf\xf6\x39\xd4\xf1\xa6\xf7\x44\x6c\xde"
+ "\xc3\xcf\x7a\x7d\x7a\x0f\x62\x10\xfa\x49\x3d\x9f\x57\xff\xb4\x84"
+ "\xeb\xf3\x4f\xd9\x38\x88\xfb\x6a\xfe\x94\xd9\x8a\xd0\x8e\x83\x18"
+ "\xab\x17\xcb\x7c\x47\x38\xc8\x62\xf5\xbe\xbb\x21\xc2\x37\x6d\x25"
+ "\x91\xd7\x9a\x61\x64\x02\x72\x10\xd7\x63\xa1\xdf\xed\x83\x7e\xb6"
+ "\xbf\x64\x0a\x2d\x80\xfa\xe5\x96\x4e\xa1\x39\x50\xa7\x8a\xee\xac"
+ "\xba\x99\x66\xf2\xb1\x46\x5c\x77\x31\x42\xbf\xd8\x97\x07\x79\x22"
+ "\x5f\x24\x77\xe7\x41\xbe\x7c\xc8\x87\x76\x32\xaf\xdf\xc9\x8b\x40"
+ "\x83\x03\xf0\xcd\x3a\xed\x72\xbc\x3f\xce\xce\x00\xe2\xb7\xa1\x1d"
+ "\xda\x26\x72\x3c\x19\x74\x9b\x02\xbf\x21\x7d\x17\xca\x07\xf9\xf7"
+ "\x31\x9b\x27\xc5\x72\x79\x39\x75\xfc\xbc\x46\x4e\x4d\xc2\x0e\x47"
+ "\x2c\xe5\x84\xbc\x0d\xa0\xd3\x7b\x98\x9f\xd3\x42\x9c\x6f\x41\x1b"
+ "\x83\xd9\x15\x76\x12\xc8\xe7\x07\xc0\xb6\xd0\x83\x1c\x00\x7b\x82"
+ "\xed\x51\x07\x5b\x02\xea\x52\x88\x31\x3d\xf1\x39\x8c\xdb\x0e\x80"
+ "\x5e\xc6\x33\xaa\xca\xe5\x5d\x4f\xe1\xba\x2b\xc1\x78\xbc\xeb\x96"
+ "\x51\x2b\x8f\x8b\x74\x5c\x2d\xd9\x02\x28\x83\x50\xff\x83\x2d\xac"
+ "\xe8\x05\x1e\x02\x06\xaa\xc0\xb6\x98\x74\x89\x1c\x5f\x28\xd2\xbe"
+ "\x8a\xe9\xfc\x14\xe6\x97\xdb\x87\xcb\xe8\xe3\xbf\x81\xf6\xa9\xe0"
+ "\x1b\x60\x8f\x7e\xc1\xe6\xc2\xb9\x8c\x39\xae\x97\xf4\x38\x8e\x79"
+ "\xcd\x50\x06\x05\x59\x26\x3e\x83\xf6\x57\x49\x67\xee\x1b\xe1\x99"
+ "\x46\xa4\x59\x35\xd0\x0c\xcb\x64\x63\x7f\xb0\xb9\x74\x9c\x36\xc7"
+ "\x67\xa2\x5d\x21\xbe\x6b\x94\xca\xc5\x71\xb9\x00\x76\x05\xd2\x0b"
+ "\xe9\x04\xe5\xcc\x14\xe5\x58\x3d\xb7\x5f\x4e\xb2\x3d\x13\x48\x7b"
+ "\xe0\xf5\x16\x07\xfd\x4f\x28\x9c\xe9\x0f\xef\x6f\x11\x79\xb9\xd1"
+ "\x89\x77\x30\x36\x3a\xb9\x04\xe7\x49\xa1\x8e\x87\xf8\x1c\xcf\x89"
+ "\x47\xd0\x1f\x1e\xfa\xdf\x06\x1a\x1f\xca\x45\x5f\xcf\x20\x9b\x37"
+ "\x7f\x01\x32\xf7\x39\xb4\x9f\x4e\x3e\xc2\xed\xd3\x13\x8d\x88\xe1"
+ "\x16\x72\x82\xcd\xc3\x37\x43\xbd\xb0\x3c\xb8\x7f\x1b\x7e\xc1\x8e"
+ "\x3d\xf1\x47\xe7\xd8\xd9\x8e\xb8\xd9\x27\x8a\x1d\xe7\x44\x8e\xb3"
+ "\x79\x69\xfc\xc5\x39\x30\x96\xbf\x57\x8f\x75\x6b\xc4\x7e\x29\xb5"
+ "\x15\x63\x68\x43\x3a\xda\xfe\x8d\xc8\x37\x29\x1d\xfd\x44\x03\x9f"
+ "\x54\x50\xa7\xb9\xbc\x4e\x27\xd5\x3c\xce\xe0\x89\x4c\xbc\xc7\x78"
+ "\xda\x3b\xf0\x9d\x74\xc7\x3b\xd8\x6f\x00\xc3\x81\xf0\xce\x1c\xf8"
+ "\xa5\x52\x5e\x1e\x67\xfb\xc4\x81\x57\x7b\x70\x0e\xec\x44\xb5\x14"
+ "\x67\x1b\x63\x6c\xa3\xcc\xc8\x5b\xee\x42\x7b\xa4\xcd\x3e\xe0\x15"
+ "\xc3\xdd\x11\xdb\x41\xa0\xf7\x49\xb0\xff\x0f\x89\x67\xa1\x4e\x1c"
+ "\x10\xeb\x67\xe4\x3e\x72\x3e\x69\x63\x3e\x9d\xd9\x78\xe8\x64\xb1"
+ "\x63\xcf\x8a\x64\x5b\x9e\x60\xfe\xb7\xa0\xac\x6a\xe4\x3f\xda\x89"
+ "\x90\xaf\xb2\x0f\x5b\xec\x1c\xf6\xc9\xf9\x68\x5f\x8a\xf5\x47\xbc"
+ "\xcc\x12\x69\xd7\xe6\xdc\xef\x9c\xfb\x79\x77\x56\x3d\x8c\xff\x8f"
+ "\xf5\x61\x40\xea\xd7\x1c\x07\xa7\x1e\xe1\x7d\x51\x68\x45\x3f\xcd"
+ "\x50\xae\x11\x6d\x70\xae\x57\x4f\xa9\x8f\x34\xb2\x3d\x0d\xf5\x70"
+ "\x0f\xfd\xbb\xbe\xad\xc3\xef\xd3\x86\x2d\x4c\x6e\xd4\xc3\xf8\x27"
+ "\x94\xf1\x0f\xe9\x22\xf5\xd7\x1d\xcb\x71\xec\x17\xca\xfb\x6c\x6a"
+ "\x33\xa9\xb5\xb6\x11\xf1\x0c\x06\xf4\xd9\x0b\xb8\x76\x7a\x09\x30"
+ "\xa4\xc4\xfe\x0b\xfc\xdd\x87\x3e\xc5\x81\x8e\x75\x5b\x5e\x63\xfd"
+ "\x56\x85\xfd\xb6\x17\xfd\x84\xc0\x77\x2a\x63\x22\xc8\x91\x54\x23"
+ "\xeb\xc7\xe8\x23\xe6\x4d\xa0\x1d\xc6\xb4\x86\x6f\x37\x48\x7b\xc7"
+ "\x11\x23\xe8\x13\x46\xc4\x89\x16\xfb\xb2\x48\x3b\x45\x77\xd6\x29"
+ "\x22\xf5\x3d\x27\xfe\xb3\x3c\xfd\xfa\x5b\x20\xef\x6f\xa7\x42\x25"
+ "\x5a\xdb\x58\x3f\x3e\x51\x6d\x83\x7e\xec\x4c\x53\xa4\x27\xd2\x15"
+ "\xf2\x42\xfb\x3f\x4e\x96\x68\xea\x44\xcf\x1a\x91\xe7\x75\x7c\x8e"
+ "\xe9\x14\xf7\x83\xed\x44\x43\x11\x7f\x18\x8b\xf8\xe0\x66\x6c\x3b"
+ "\xe8\x06\xfc\x3e\x62\xe4\x4d\x51\x66\x55\x5a\x10\x23\xa7\xa0\xff"
+ "\xff\xba\xc8\x21\x3b\x4e\xd4\xb1\x31\x0b\xf0\x49\xe4\xcf\x75\xe6"
+ "\x53\x65\x10\xd9\x01\x38\x39\xe8\x90\x4f\x9f\x2a\x25\x3a\x48\x98"
+ "\x94\xfa\x3d\xe8\x91\xa5\xae\xf2\xe7\xd3\x9f\x40\x19\x93\x51\xbe"
+ "\x39\x6c\xa8\x4f\x17\xb8\xca\xb7\x4f\x43\x51\xbe\x21\xae\x0d\x29"
+ "\x38\xc7\xc6\xf5\x95\x99\x98\x1a\x5c\x65\x92\xa9\x86\xef\x0d\xe0"
+ "\x36\x17\x62\xcb\xb0\x9c\xe7\x47\x1d\x06\xf9\xd9\x58\x5c\xd4\x79"
+ "\x5a\xd4\x71\x90\x56\x29\xd2\xab\x11\xf2\x57\xe2\x79\x56\xf4\x61"
+ "\x31\xb1\x91\x8f\xf5\x40\x4e\x1f\x42\x1f\xed\x90\x6f\x4b\x2d\xd8"
+ "\xf9\xbd\xd9\x5c\x76\x4b\xb2\x82\xae\x8a\x9e\xf8\x52\x2b\x99\x60"
+ "\xf8\x19\xfd\xb2\x85\x9c\x8e\x83\x3e\x63\x45\x3f\xa1\x50\xb6\xb6"
+ "\x85\x7c\x36\x07\xbe\x1b\x24\xfe\x6a\xe0\xf7\x0e\xf8\x9d\xda\x42"
+ "\xce\xd8\xe1\xf7\x2e\xf8\xbd\x00\xf9\x05\x31\x7f\x28\xdc\xd7\x40"
+ "\xfa\x8f\xc5\x5f\xa8\xe3\xe9\x65\xf0\x1b\x25\xda\x8e\x98\xbe\x13"
+ "\xef\xe1\xf7\xf7\x22\xcf\xab\x39\xcf\x4f\x6f\x83\x72\x52\xa1\xfe"
+ "\x0d\xa6\x46\x56\x96\x01\xf2\xfc\x0a\xcb\xc6\xf3\xe5\xf0\xbf\x2f"
+ "\x71\xd8\xa0\x50\x4e\xc3\x43\xf0\x1b\x06\xef\x75\xc1\x6f\x32\xfc"
+ "\x1e\x13\x69\x50\x87\xb2\x21\x36\x15\x69\x7b\xaa\x59\xcb\xed\xdd"
+ "\x28\xa9\xcf\xa3\x1e\x76\xc8\x8e\xe3\x33\x63\x97\x71\x7e\x43\x5e"
+ "\x86\x03\xc8\xfb\x28\xe6\x85\xdf\xc7\xc5\xdf\x08\xf1\xf7\x09\xf1"
+ "\xf7\x17\xe2\xef\x7c\xf1\x17\xf8\x7c\xba\x5a\xb4\x31\x80\x2e\xa7"
+ "\x59\xbc\x03\x90\xdd\x33\xf9\x37\x1a\xda\x70\x8c\x0c\x72\x7c\x2e"
+ "\x94\xef\xd3\x9d\xd5\x10\x23\xcd\x8f\xe2\x9c\x4f\x6f\x56\xf5\xf8"
+ "\x37\xd9\xba\x76\x43\xaa\x43\xb6\x9d\xb0\xaa\x64\x11\x04\x6c\xa0"
+ "\x3b\x8a\xe5\xa0\xff\x79\x39\x75\x72\x71\x5d\x58\x8c\xff\xe0\x83"
+ "\x3e\x11\xd9\x78\xc8\x7f\x4a\x34\xf6\x55\x36\x77\x8c\xfe\xfb\x26"
+ "\x9c\xb0\x01\xd6\x94\x30\x36\x50\x49\xf2\x1b\xc7\x3d\x7c\xac\x8e"
+ "\xfe\x7f\x1b\x9a\x1d\x63\xf5\x06\x36\xe7\xed\xa3\xb9\xf3\x05\x48"
+ "\xb7\x39\xa5\x47\x61\x9d\x81\x9e\x0d\xd0\x9e\xb0\x26\x72\x66\x26"
+ "\xfc\xfe\xa8\x99\xb7\x39\x54\x6a\xb3\xc8\x0f\x83\x44\xdf\x66\x72"
+ "\xba\x1e\x64\x61\x12\x62\xb8\xa9\x4f\xce\x9e\x66\xf3\xba\x22\x46"
+ "\x80\x97\xa7\xf3\x90\xa7\x4e\x7d\xd0\x59\x06\x05\x75\x67\x9d\xd9"
+ "\xe2\x2a\x53\x8e\x6f\x41\x99\x82\xd8\x00\xf9\x8d\xbc\x8e\xed\xd7"
+ "\xff\x70\xae\x7f\x32\xef\x77\x67\x8c\xae\xef\x7e\x1a\x6a\xe3\xfd"
+ "\xae\x01\x70\x06\xf8\x3c\x3d\x1f\xf9\x63\x26\x67\xca\xc5\x3e\xdd"
+ "\x00\x7d\x7a\x2e\xa4\x87\xf0\xba\xf2\x74\xf1\x5b\x80\xb3\xd3\xd8"
+ "\xee\xbb\xa4\x74\xb1\xbd\x58\x4e\x30\xf2\x5b\x4a\x17\xcb\x47\x3c"
+ "\x22\x86\x34\x52\xba\xd8\x26\xb0\xa3\x3e\x8b\x96\xe4\x49\x2e\xc3"
+ "\x5b\xbd\x59\x7a\x0f\xf9\x86\x3e\xd0\xf8\x1c\xff\x67\xf3\xa1\xaf"
+ "\x96\xa3\x7e\xd8\xbc\x9c\xa8\x5e\x2a\x22\xfe\xbc\x5f\x7e\x36\xdf"
+ "\x55\x46\x9e\x9d\x45\xb3\x02\x6d\x54\x79\xa2\xb3\xc6\x16\x26\xd9"
+ "\xab\xc5\xf0\x1d\xa3\x14\xd3\xdd\x11\x4b\xe2\xb3\xae\x9a\xf2\x3e"
+ "\xfa\x62\x5d\x9a\xa5\xba\x38\xe9\x67\xc6\x03\xac\x1b\x96\xb5\x19"
+ "\xec\xf5\x4e\x90\x0b\x5c\x6e\x7f\x1e\x64\x26\x13\x0f\x49\x32\x15"
+ "\xf5\x56\xa0\x8c\x18\xf2\x53\xd8\xfa\x68\x20\xea\x46\xdc\xe3\x23"
+ "\xe0\x3c\x56\xaa\x9d\xd4\x1a\x60\x2c\x9f\x7a\x81\xac\x58\xef\x87"
+ "\x3e\x71\xa2\xa1\xae\x13\xa0\x6e\xbb\xed\x38\xf7\xbf\x06\xc7\xa9"
+ "\x8d\x1f\xda\x53\xa8\x55\xa4\x19\xf4\xa3\xc6\x9d\x22\x6d\x51\x7e"
+ "\xed\x46\x99\xbe\x39\x9d\xc7\x85\xc2\xb9\x1c\xec\x1f\xaf\xa2\x1e"
+ "\xd3\x50\x6b\x65\x31\xf6\x95\xcf\x77\x4b\x36\x29\xd4\xb7\x9c\xdb"
+ "\x84\xa7\x58\xac\x19\xe8\x3b\x9d\x7c\x2e\xb0\xf1\x21\xde\xf6\x46"
+ "\x0d\x5f\xe7\x3e\x21\xfa\x75\x6c\x54\xf8\x68\xa6\x9c\xe6\xfb\xb2"
+ "\xaa\xef\xe5\x7b\x4a\x3e\xef\xec\xdb\x53\xe2\xb0\x15\x83\xb9\x6f"
+ "\xb0\x46\x27\xff\xa7\x9f\x9b\xf1\x3d\x78\xff\x12\xa4\xeb\x1c\xe9"
+ "\x78\xac\x80\xf9\xed\xb5\x06\x6c\x8a\xc0\xbd\x65\x77\xa0\x3f\x75"
+ "\xf1\x7b\x39\xec\xfb\x6c\xce\x03\xfa\xa6\xd8\x7f\x91\xce\xa8\xb3"
+ "\x59\x1f\x86\xfe\x8b\xfd\xb8\x77\xdb\x09\x5b\xef\x36\xb1\xdf\x72"
+ "\xdd\x1c\xcc\xfa\x2d\xeb\xb3\x8d\x45\x8e\xef\x35\x46\xb1\x79\x2f"
+ "\xe4\xe7\xcb\x1a\x15\x3c\x3b\x60\x26\x9f\x84\x88\x75\x64\x7e\x68"
+ "\xd0\xef\x8b\xed\x1a\xb5\xe0\xda\x36\xae\x75\xe2\xd9\xb9\x40\x40"
+ "\x37\xfa\x6a\x91\xd6\xaa\x17\xb5\x65\x50\x3b\xae\x3b\x5d\xa3\x9d"
+ "\x05\x7d\xf1\x1c\xce\x12\x87\xdf\xa5\xcf\x63\xc4\x76\xa1\xbf\xd0"
+ "\x62\xbe\x17\xec\xf3\x5f\x71\x9b\xea\xf3\x28\xc4\xa9\x09\xb0\x07"
+ "\xbf\x45\x3c\x06\xf7\xd9\x79\x12\xf6\xa0\x5f\xc6\x02\xdf\x6b\x0a"
+ "\xa7\xd0\x22\xe0\x69\x11\xf4\xa5\x04\xb8\x7f\x1f\x7e\x63\xf9\xaf"
+ "\x4c\x8d\xbf\x62\x1f\x29\x82\x77\x53\x01\x63\x31\x52\xff\xe8\x9c"
+ "\x20\xc4\x20\xce\xf2\x81\x0e\x88\x35\xb6\x8e\x0c\xf5\x46\x7c\x21"
+ "\xce\x10\x63\x81\x9b\x9e\x62\x38\x63\x7e\x21\x20\x1d\xeb\x8b\x38"
+ "\x83\xb2\x2a\x25\x5f\xce\x66\x72\x96\x9d\x6f\x84\xb4\x06\x69\x8f"
+ "\x2e\xae\x25\x25\xdf\x43\xee\x80\x72\xb5\x95\x5a\xe6\x2f\xf5\x9c"
+ "\xc9\xf6\x04\xc1\xbc\xb8\x0e\xc7\xe5\xe4\x9d\x95\xdd\x59\x5f\xa8"
+ "\x1c\x34\x3f\xce\xce\x96\x1c\x59\xc6\xe6\x22\xbf\x07\xcf\x74\xce"
+ "\xe3\x0c\x33\xa9\xee\xc4\xb1\x06\xee\xed\xbb\x2f\x88\x68\x01\xb7"
+ "\x20\xc7\xbe\x58\x28\xd9\xb5\x0f\x06\xe1\x7a\x7e\x75\x39\xd4\x0f"
+ "\xc7\xd0\x75\xf0\x7f\x2e\x8c\x25\xab\xdc\xcc\x19\x87\xe1\x5c\x8f"
+ "\x18\x83\xa9\x11\xe7\xb1\x30\x66\x45\x0b\x39\x5f\x53\x83\x3e\x5a"
+ "\xd6\x0e\xf4\xe5\x9d\x9e\x4a\xbb\xd0\x9f\xb7\x36\x89\x7c\xaf\x89"
+ "\x9c\x47\x1f\xd3\x0d\x19\x57\x71\x8e\xe6\x8b\x7a\xd7\x39\x9a\x73"
+ "\x33\xc5\x2b\x1c\xae\x62\xc7\x65\x0e\x11\xff\xaf\x18\xfa\x32\xcf"
+ "\xe7\x79\xcd\x51\x70\x2d\xe3\xb4\xd2\x40\x3f\x39\xd7\x37\xff\x8b"
+ "\xb8\xc4\xbe\x8d\xfb\x38\x70\xce\x49\x66\x23\xe8\x13\x06\xf8\x04"
+ "\xf5\xde\x3c\xfb\x69\xe3\x06\xc4\xd1\xb9\x78\x36\x76\x90\x8f\xf4"
+ "\xec\xea\x39\xc6\x4f\xee\xf3\xf5\x5c\x08\x7c\x3b\x68\xc7\x15\xa2"
+ "\x30\x24\x91\xe9\x38\xff\x1d\x68\xa7\x46\x1c\xe3\x8a\x7e\x23\xeb"
+ "\x2e\x11\xf3\x9c\xe4\x8d\x44\x0e\xcf\xef\x86\xff\x83\x25\x3b\x09"
+ "\xde\x51\xfb\x58\x49\x10\xda\x47\x8f\x6f\x24\x77\x43\xfd\xad\x12"
+ "\xaf\xd0\x86\xc0\x79\x38\x71\x2e\x01\xeb\xfa\x13\x7c\x0f\x63\x11"
+ "\x98\x19\xdd\x98\x1c\xc6\x32\x00\x1f\xe7\x9a\x7d\x3a\x89\x9a\xeb"
+ "\x1e\x33\xe0\xbf\x5a\xb4\x19\xcd\x18\x8b\xbb\xde\xa9\x9e\xff\xe6"
+ "\xf4\x7f\x36\xbe\x1f\xd8\x89\xf6\x99\x3b\xfa\x98\xb7\x49\xf4\xc1"
+ "\xfd\xaa\x81\x30\x4e\x60\xfc\xb6\xd1\x36\xa8\x5b\xb5\x61\x03\x51"
+ "\x5e\x22\xe7\xd7\x97\xbd\xc6\xce\x3f\x56\xf1\xf9\xf9\xf3\x89\xd2"
+ "\x38\x9c\xd7\xfb\xfc\x4f\x02\x37\xf9\x10\x9c\x57\x47\x9f\x76\x6c"
+ "\xaf\xdf\x37\x1a\x36\x97\x6e\xb2\xcd\x23\xc6\xf4\x9f\x62\x1e\xc9"
+ "\xae\x6a\xec\xc8\xd0\x90\x23\x9a\x79\xd0\x8f\xcf\x2b\xcc\xb2\x2a"
+ "\xcd\xc8\xf7\x54\x9e\x57\x88\xf4\xad\xe6\x7b\x11\xcc\xa7\x50\x97"
+ "\xe0\xd8\x1f\xf4\x48\x25\xea\x68\x28\x3b\x46\xea\x37\xa0\x37\xa0"
+ "\x9f\x9a\x79\x2c\x9b\x1c\x5c\xff\x35\xd7\xa1\x6f\x0e\x36\x6e\xe0"
+ "\xf9\x55\x7c\xce\xff\x7c\x61\x9f\x2d\x0d\xf9\xf0\x3d\xbe\x47\xcd"
+ "\x5c\xb1\xc2\x2e\x03\x9a\x9a\x2b\xb0\x6d\x22\x16\x41\x5f\x9d\xaf"
+ "\x74\xf4\x5b\x33\xc3\xfd\x91\x36\xe7\x7e\x79\xbe\xd9\x31\xde\xfc"
+ "\xa2\x68\x4e\x21\xd1\x0e\xd6\x0f\x0d\x01\xa8\xab\x9a\x96\xee\xd8"
+ "\x41\xcb\x0b\xe4\xc2\x63\x9b\xf3\x89\x4a\x96\x0b\x64\xc3\x7e\x96"
+ "\x12\x73\x47\x0b\x69\x8a\x0b\x54\xdd\x19\xf5\x78\xf2\x78\x9a\xae"
+ "\x21\xf2\xbc\xf6\xf1\xca\x7b\xac\x77\x96\x53\x9f\xd9\x4f\x2f\x4a"
+ "\xb6\x12\xed\xef\x0a\xc8\x57\x09\xc4\xe7\x71\x3b\x7c\x5b\x45\x0c"
+ "\x66\xd2\x6c\xc0\x95\xe7\x23\x2a\xb4\x3f\x9a\x0d\x58\x66\x5a\x31"
+ "\x51\xa6\x35\xd3\xd6\xdc\xd5\xbe\x4a\xd0\x07\xea\x37\x01\x63\x13"
+ "\x55\x77\x96\xf7\x42\x19\x87\x63\xd8\x7b\x83\x9e\x59\x17\xeb\x76"
+ "\x75\xf0\xba\x19\xa6\xb4\x90\x2f\x65\x23\xab\x5b\x8b\xda\x51\xb7"
+ "\x16\xf5\xe8\xeb\xf6\x65\x9e\x53\xdd\xd4\x8e\xba\xe9\xb1\x6e\x25"
+ "\x23\xab\xdb\x57\xfb\x1d\x75\xfb\x6a\xbf\x87\x75\xdb\xe7\xbe\x6e"
+ "\xcd\xf7\x0f\x5e\xb7\xd4\x3b\x5b\x48\xf3\x4f\x46\x56\xb7\x8b\x51"
+ "\x8e\xba\x5d\x8c\x1a\x4d\xdd\x70\x2c\x9f\x1e\x4c\x2f\xb0\x98\x01"
+ "\x49\xdc\x27\x6f\x0b\xb9\xf0\x7a\x7a\x31\xbb\x9f\x0c\xff\x2f\x15"
+ "\xfb\xb7\x25\xa3\x93\x7e\xc9\xed\x9c\xe6\xc3\x0f\x18\x70\xbf\x6b"
+ "\xf3\x41\xc0\xb2\x81\x63\xfa\x02\xdb\xdf\x90\x61\xa1\xe2\x7e\xd3"
+ "\xe6\xf3\xa5\x6c\x3f\xca\xe9\x4c\x7e\x7f\x61\x66\x87\xdf\xc9\x50"
+ "\xdc\x0b\x22\x40\x7f\xa6\x7e\x27\xe7\x61\x8c\xd6\x77\x93\x2c\x72"
+ "\x9a\x85\x3e\xdd\xd0\x0f\xa3\x82\xd0\xed\x27\x17\xbe\x9b\x64\x65"
+ "\xf1\xe1\x37\xb3\x73\xd8\x17\x82\xa5\xb3\x87\xd2\x37\x2c\x13\x4e"
+ "\x67\x42\x7a\x98\x14\xeb\x97\xca\xc1\x9e\x99\x70\x32\x0c\xcb\x87"
+ "\xf4\x85\x52\xfc\x5d\xc0\xbb\x59\x94\x0d\x9d\x81\xd6\xa1\xe4\xde"
+ "\x85\x4d\x92\xdc\x7b\x3c\x99\x04\x62\xec\xd1\x1d\xe9\xe3\x71\xcd"
+ "\xd1\x02\xdf\x54\x23\xdd\x23\x3b\xc7\xd3\xc0\x34\xe2\x83\x67\x2e"
+ "\x71\x8f\x9e\x49\x63\x21\x33\xd3\x88\x6f\x64\x2a\x94\x69\x25\x31"
+ "\x81\xa9\x50\x1e\xd0\x9a\x8f\x0d\x2e\xb0\x39\xbe\x42\x28\x0f\xd7"
+ "\xbf\x7d\x92\x89\xea\x71\x4d\x06\xdd\xfc\x3a\x51\xe0\xf9\x4c\x3c"
+ "\x67\xc9\xcf\x58\x8e\x53\x42\x7d\x6d\x52\xfb\x3c\xe0\x4f\x00\xe7"
+ "\xcf\x57\x3f\x71\xf0\xa7\xa5\x6b\x20\x7f\x5a\x56\x72\xfe\xb4\x44"
+ "\x3b\xf8\xf3\x55\xb1\x2b\x7f\x5a\x36\xb9\xf2\xa7\xa5\xd2\x3b\xfe"
+ "\xb4\x1c\x72\xf0\x87\x7f\x83\xf3\xa7\xa5\x7e\x70\xfe\xb4\xb4\x39"
+ "\xf8\xd3\x92\xe9\x19\x7f\xbe\xba\xc7\x3d\x7f\x5a\xf6\x0f\xc1\x9f"
+ "\x71\x83\xf3\xe7\xab\x17\x3c\xe7\xcf\x57\xc5\x23\xe0\x8f\x3f\xe7"
+ "\x4f\xeb\x19\x07\x7f\x5a\xff\x30\x90\x3f\xad\x32\xce\x9f\xaf\xac"
+ "\x0e\xfe\x5c\x9c\xe7\xca\x9f\xd6\x7b\x5c\xf9\xd3\x1a\xeb\x1d\x7f"
+ "\x5a\x97\x39\xf8\xc3\xbf\xc1\xf9\xd3\x9a\x3c\x38\x7f\x5a\x73\x1d"
+ "\xfc\x69\xd5\x7a\xc6\x9f\xd6\xc3\xee\xf9\xd3\x1a\x35\x72\xfe\x5c"
+ "\x9c\xd4\x8f\x3f\x6a\xf7\xfc\xb9\x38\x6f\x04\xfc\x09\xe4\xfc\xb9"
+ "\xb4\xde\xc1\x9f\x4b\x73\x07\xf2\xe7\xe2\x4e\xce\x9f\x8b\x45\x0e"
+ "\xfe\x5c\x6a\x74\xe5\xcf\xc5\xc3\xae\xfc\xb9\xa4\xf0\x8e\x3f\x17"
+ "\x6d\x0e\xfe\xf0\x6f\x70\xfe\x5c\x0a\x1a\x9c\x3f\x97\x42\x1c\xfc"
+ "\xb9\x68\xf4\x8c\x3f\x97\x56\xba\xe7\xcf\x45\xcb\x10\xfc\x19\x3f"
+ "\x38\x7f\x2e\xfd\xd9\x73\xfe\x5c\x6a\x1c\x8a\x3f\x23\xb3\xf5\x2e"
+ "\xb1\x58\x35\xa3\x2f\xe7\xeb\x70\x77\xe5\x20\xed\x70\xff\xa1\x90"
+ "\xf5\x75\x78\xa9\x30\x4e\xc9\xcf\x68\x5c\xb2\x68\x37\x90\x9f\x37"
+ "\x91\xaf\xb7\x96\x0a\xbe\x4a\x9a\xf5\xd6\x01\x21\xeb\xbf\x97\xd1"
+ "\x4d\xe3\x14\xc2\xa6\xf1\x0a\x3c\x33\x3f\x58\x59\x7c\x3f\xec\xd7"
+ "\x17\x7c\xa6\x92\x19\x78\x8e\x6e\x33\xd8\xcb\xf8\x7f\x77\xd6\xd7"
+ "\x40\xf7\x43\xc5\x43\x9d\xdf\xc2\xbd\x4e\x47\xb6\xe0\xf8\xb6\x2d"
+ "\xb8\xcf\x5f\x49\x16\x4d\x45\xbf\x6f\x86\x7b\xf1\x9c\x45\xdb\x7c"
+ "\xf4\xe7\x4e\x73\x6a\x76\x47\xdc\x4b\xcf\xe1\xd8\xa3\x85\x5c\x7e"
+ "\x94\x6e\xab\xd9\x8d\x78\x00\x5b\xfd\x7b\x90\x27\xb7\x6f\x7f\x1e"
+ "\x8d\x7e\x43\x9c\x23\x8c\xe2\x79\xaf\xfc\x19\xf2\x46\x61\xac\xd9"
+ "\x75\xe9\x18\x43\xf5\xca\xeb\x60\xfb\x7e\x1f\xbf\x81\x3e\xad\xca"
+ "\xe0\x17\xf7\xc9\xf0\xbd\x99\x6d\xdc\x77\xcf\xe6\xbb\xde\xe0\x7b"
+ "\xe1\xae\x6c\x92\x70\x07\xdf\xf1\x83\xfb\x78\xd1\x9e\xc7\xfc\x13"
+ "\xe1\xfe\x57\x4e\xcf\x55\x70\x8f\xf3\x90\x93\xc4\xe7\xfe\x70\x3f"
+ "\x15\xed\x6c\xe6\x7f\x25\x3f\x53\xdc\x43\x7c\xd9\x06\x69\x6a\x31"
+ "\xcf\xa4\x4b\xe4\xf2\x79\xb4\xdd\xc5\x32\x26\xc3\xfd\x51\x1c\x03"
+ "\x8b\xcf\x83\xe0\xfe\x2d\x5c\x3b\x10\x9f\xdf\x01\xf7\x79\x70\xff"
+ "\x03\x7e\xe6\xa5\x57\xec\xa3\x97\xa3\xbd\x3b\xcb\x7f\x99\xf9\x5e"
+ "\x44\x1e\xf0\xb1\xc0\x65\xa7\xfd\x3f\x97\x23\xfa\x3d\x3b\xe4\xf4"
+ "\x2c\x54\x7a\xc6\xf7\xa8\x5d\x6e\x70\x7a\xa6\xed\xf7\xac\xd3\xe9"
+ "\x99\xda\xb5\xcc\x2b\x6a\xa7\x67\xc4\xf5\xbd\x2b\x21\x8e\x67\x6d"
+ "\x6d\xfd\x9e\x2d\x70\x7a\xd6\x28\x3e\xf3\x81\xf4\x18\xc7\x1a\x5e"
+ "\x5b\xb5\x98\x2e\x87\xf4\x54\xa7\xf4\x43\x62\x3a\x7e\xbf\xc0\x4c"
+ "\x8a\xc5\xb1\x0a\xe7\xbd\x58\x7e\x85\x53\xf9\xb9\x7c\x8e\xe3\xca"
+ "\xa1\xbe\xbd\x73\x7e\x27\x73\x84\xde\xe8\x37\xe0\x59\x32\xe2\xca"
+ "\x19\xdb\x6b\x52\xb4\xcf\xbd\xf8\x5b\x6d\x52\x5c\x32\x6e\x5f\x49"
+ "\x8c\x4f\xd6\x26\xae\x8d\x8d\x73\xf1\xa5\x1f\x84\xbe\x20\x31\x6e"
+ "\x1e\xfa\xd4\x61\x31\x2a\x5e\xa3\xad\x7d\x71\x5d\x40\xae\x76\x67"
+ "\x7d\xa3\x33\x93\x7f\x0b\xc7\x6f\x15\x72\x9f\xf3\x55\xe8\x93\x87"
+ "\xfb\xdf\x21\x4f\x35\x91\x6f\xe6\x88\xfe\x77\x8c\x90\x77\x89\x7b"
+ "\xff\x3b\x57\x43\x99\xdf\x49\xc8\xc7\xfd\xef\x5c\x0d\x83\x7e\xfe"
+ "\x38\xf5\xe3\x71\x5a\x78\xfc\xba\x6f\x24\xdb\xc4\xb2\xe2\x3a\xf3"
+ "\xdd\x98\xc9\xe7\x32\xfa\xfb\xd1\xad\xd9\x82\xef\x89\xeb\xa5\x5b"
+ "\x9c\xde\x37\xf2\xe7\x92\x7e\x10\xbf\x99\x53\x93\x03\xf7\x7e\x4d"
+ "\x70\xcf\xe6\xef\xd9\x33\x0b\x9f\xcb\xdb\x56\x93\x8b\x6d\xc2\x76"
+ "\xbb\xb6\x4d\xfe\xef\x4d\xc4\x32\xc1\xd1\x36\x4b\xa8\x93\x8f\x3e"
+ "\xb1\x0d\x96\x68\xde\x47\x07\xb4\x95\xed\x4f\xa4\xca\x9a\x5c\xfc"
+ "\x36\xca\x33\x56\xd7\x09\x70\xbf\xad\x26\x47\xaa\x8f\x53\xfd\x72"
+ "\x71\x5c\x0f\xf5\x9b\xcb\x69\x02\xf2\x03\x78\x2a\xd6\xb3\x8b\x66"
+ "\x5d\x69\xe0\xf1\x2a\x40\x9f\x60\xdc\x1d\xa6\xab\x2c\x46\x69\x2e"
+ "\x13\x75\x14\x9f\xc3\xb4\x38\xec\x3f\xf4\x9d\xb6\x4d\xd2\x5f\x16"
+ "\x27\xfb\x8f\x7f\xb3\x3b\xeb\x2a\x71\xc6\x90\xe3\x7b\x57\xe7\xe0"
+ "\xf7\xcc\xc4\x52\xc1\xcf\x03\xd4\xe4\x60\x7f\x87\xfb\x04\xdc\x8b"
+ "\x89\xef\x62\x1d\xdd\xc5\x5a\x74\xe7\xdb\xd2\x41\xc7\xab\xa9\x12"
+ "\x1d\x0b\x59\x0c\x93\xab\x39\xd2\x7c\x9d\x18\xe7\xc4\x58\xd8\x17"
+ "\x7b\xfc\xea\x01\x16\xbf\x2f\x77\x5a\xd5\x83\x2a\x12\x23\xd2\xf6"
+ "\x43\x94\xf1\xd8\x67\xb8\xac\x6f\x0f\x16\x79\x1e\x2d\xd6\xff\x02"
+ "\xa6\x3b\xf6\xdf\xb7\xcf\x93\xf2\x49\x72\x99\xaf\x57\xb5\xdf\xc1"
+ "\xf2\xf1\x78\xd0\x31\x9c\xe7\x3f\x50\x37\x91\x76\x9d\x98\xbf\x2f"
+ "\x76\xaf\x99\xb4\xcf\xa7\xdb\x4e\xc7\x74\x67\xb5\xc3\xf8\xe7\x8a"
+ "\x85\xd3\x91\x7f\x17\x7e\x75\x58\x17\xa4\x11\x9e\x25\xa7\x79\xd3"
+ "\xaa\x80\x3f\xd1\x83\x9f\x25\x7d\x46\x3c\xaf\xd3\xc1\x6d\x08\x39"
+ "\xb5\xe2\x1c\x2b\x6f\x6b\xc7\x61\xa7\xbd\xcf\x2a\x29\x0f\x97\xdd"
+ "\xec\x19\xdb\x53\x6e\x48\xc1\xf9\x20\xf1\x59\x0a\x9e\xaf\xed\xfb"
+ "\x7f\x9c\xd3\xff\xbe\xf8\x3f\xdb\xd7\xbc\x81\xe9\x56\x85\xe3\x6c"
+ "\x7f\x87\x11\xee\x55\xfd\xee\x83\x5c\xee\xd7\xf3\x7d\xcf\x60\x9b"
+ "\x35\xb3\x3d\xe4\x62\xba\x58\xf6\x04\x56\x9f\x14\x1a\x0e\xd8\x28"
+ "\xc2\x33\xdd\x62\x3f\x2c\xc2\x33\xdb\x81\xb6\x67\xd9\x79\x6d\x78"
+ "\x1e\x26\xfe\x86\x8a\xbf\x21\x3c\x16\x6f\x47\xaa\x74\x6e\xbb\x83"
+ "\xcd\xd1\x74\xe4\x48\xe7\x37\xf1\x8c\x37\x9e\xef\x86\xb6\x86\xe3"
+ "\x19\x6f\x3c\x0f\x2e\xfe\x86\x8a\xbf\x21\x62\x3c\xe2\x65\xf0\x5e"
+ "\xdf\xf9\x6f\x77\xfa\x1c\xf2\x34\x4b\xe7\xb9\xed\x39\x35\xf3\x84"
+ "\x9c\xfa\x08\x8c\xff\x8a\x3e\xdc\x32\xda\xa8\xc0\x63\x86\x77\x12"
+ "\x13\xe9\x21\xa6\xe4\xee\x4c\xe0\x45\x40\xad\xc1\xc6\xe6\xf0\x6b"
+ "\xad\x36\x52\x6b\xb8\xcc\x62\xbf\xbe\xd4\x26\xc5\xb6\xe9\x9c\x6f"
+ "\xdf\x56\x33\x4f\xec\x2f\xaf\xf3\x3d\xfa\x9d\xdc\x17\x11\xce\xb5"
+ "\xb5\xb1\x75\x2f\x65\x0b\xe9\x8a\x96\xf2\x70\xda\x75\x31\x39\x51"
+ "\x96\x25\xc5\xf7\xec\x4c\x93\xe2\x89\x9b\x49\xd7\xb2\xae\x09\x67"
+ "\x1a\x20\xad\xc0\x75\xcf\x74\xe7\x5b\x58\x26\xd6\xdb\x4c\x3a\x17"
+ "\x62\xd9\x90\xe7\x40\x5f\x9f\x55\x42\x3d\xb2\xc8\xcf\xf9\x39\x94"
+ "\xae\x68\x1e\x3b\xb6\x13\xfa\x7f\x7b\x8c\xb8\x17\x7c\x3f\xc5\xfd"
+ "\xd4\xb8\x1f\x1c\x69\xe7\x77\xa2\x3e\xe3\x2a\x09\xea\xe8\x8d\xc6"
+ "\xfd\xe9\xcd\xec\x3c\xc2\x0b\xe8\x0b\xde\x4a\x16\x1b\x88\x18\x37"
+ "\xab\xeb\x27\x78\x96\x60\x33\x8b\xe9\x57\x53\xd7\xe1\x77\xa2\xa9"
+ "\x3b\xab\x0b\xe4\xff\x63\x0e\xdf\x6d\xdb\x4f\xc0\x37\xa0\x7d\x19"
+ "\x7a\x8c\xcb\x5d\x0d\x79\xa0\x0f\x77\x2d\x94\xf2\xe0\xf3\x6e\x5c"
+ "\x7b\xa2\x7a\x82\xed\xea\xca\xc3\x7d\xdf\x5d\x09\x66\x79\x79\x08"
+ "\xdf\xf7\xdd\x05\xfc\xaf\x50\x0e\xc5\x37\xe8\x8f\x05\xd0\x9f\x8b"
+ "\x84\x9c\xd3\x39\xcc\xcf\xfb\x84\xd3\x05\x7c\x9e\xb3\xeb\x28\xc6"
+ "\x9e\xdc\x71\x8d\x28\x70\x1f\x06\xef\x37\xd7\x98\x3f\x53\x4c\x03"
+ "\x7d\x51\x01\xfd\x94\x9d\xad\x1c\x99\xed\xd1\xc5\xe6\x26\xd1\x77"
+ "\x17\xd2\x11\xcf\x4f\x75\x67\x5d\xd3\xf6\xc5\xe9\xe8\x93\x25\xd7"
+ "\x9e\xc4\xf5\x0f\xe8\xa3\xac\x8e\xfd\xeb\x80\xf5\x85\xb2\x2a\xdd"
+ "\xda\xb9\xca\xd3\x7c\x8d\x68\xfb\xc9\x65\x7c\x9f\xec\xb5\xdf\xfb"
+ "\x68\xee\xba\x06\xdf\xca\xed\x8b\x4f\x02\x79\x90\x67\x02\x94\xdf"
+ "\xd7\xce\x24\xf6\x8d\x03\x5c\xde\x5c\xab\x12\xb6\x9d\xce\xd9\xd1"
+ "\x43\x14\x62\x7a\x55\xad\xcd\x8a\x71\x29\xdc\xed\x4b\x57\x32\xff"
+ "\x5d\xdb\x4f\xa3\xff\xbb\xce\x07\xad\x52\x9d\xbb\xab\xf0\xcc\x0c"
+ "\xd6\x99\xd3\xb6\xfb\x43\x89\x8e\x79\xed\x50\x76\xfa\x67\xa4\x99"
+ "\x74\x3f\x81\x7b\xf7\x18\x4d\x36\x48\xfb\x49\xbb\xb9\x5c\xec\xe9"
+ "\xcb\xc3\x6c\x2c\x16\x2f\x0b\xca\x2f\x65\x31\xff\xa0\x0d\xc0\x0b"
+ "\x63\x3a\xfa\x1d\xe8\x66\x71\x89\x37\xc3\x73\xd6\x6e\xb6\x57\xb7"
+ "\x5b\x3c\xb3\xdb\xbd\x45\xd2\x57\x66\x31\x6d\x07\x7e\x3b\xa5\x87"
+ "\x5c\x21\xdd\x71\xa6\xcc\x1e\x02\xf4\x28\x42\xdf\x85\xb5\x9d\xd0"
+ "\x47\x53\x7b\x10\x0b\x45\x18\x23\x16\xf2\xf3\xf3\xd6\x4a\xa4\x79"
+ "\xf7\x02\xfc\x3e\xd2\x16\xc6\x87\x16\x1f\x4d\x30\xf4\xfd\x6e\xb3"
+ "\x44\xd3\xfc\x29\x38\xe6\xba\xe6\xd6\x77\x27\xd2\xc8\x0e\x75\xae"
+ "\x05\xe4\x18\xa7\x7d\x06\xf5\xb3\xbe\x25\xf8\x9d\xce\xc1\x7d\xe1"
+ "\xf0\xbf\xe8\xaf\x81\xf3\x8e\xe3\xc0\xba\x09\xbe\xf1\x60\x2d\xc7"
+ "\x02\xe1\x7e\x7a\xac\x3a\x91\x7e\x2c\xd6\x48\x41\x0a\xa7\x83\x98"
+ "\xbf\x91\xcf\x59\x07\xcf\xed\xce\xb2\xa6\x3a\xe6\xac\xad\xcc\x5e"
+ "\xc4\xb8\x08\xa5\x6c\x5c\x6a\x2d\x74\xaa\x73\x27\x3b\x83\xdb\x8e"
+ "\xf3\x8d\xd6\x79\xf8\xad\x3c\xf4\x2d\x87\xb8\xb8\xe4\x8c\x7f\xeb"
+ "\x74\xac\x27\xee\x3b\xb6\x4f\x38\xb9\x0c\x74\x7e\x0c\xd2\x19\xde"
+ "\x59\x02\x7d\x21\x67\x08\x7d\xcc\xe2\x3b\x76\x67\x5d\x57\x4a\xfa"
+ "\x18\xc6\x38\xa0\x9b\x7a\x64\x6c\xec\x0b\x36\xbd\x49\x40\x9b\xaa"
+ "\x87\xc5\xde\x06\x59\x9f\x29\xca\x79\xb0\x3d\xae\xcf\x93\xd6\xdd"
+ "\xec\x78\x76\xe3\x0a\x5b\x73\xee\x94\xe2\x16\x72\x5f\x8e\xd7\x63"
+ "\x1c\x67\x3d\xae\x27\x0c\x38\xeb\x81\xe7\x8f\x5e\x63\xf1\xed\xf6"
+ "\xa1\x5e\xab\x69\x6b\x46\x3d\xc5\xde\xc7\xf3\x1f\x20\xa3\xbe\xe4"
+ "\x67\x98\x9a\x71\x8d\x80\xc5\xd6\xc1\xba\xf0\xb8\x24\x4d\xec\x7f"
+ "\xc0\xad\x02\x7f\x39\x96\xae\x83\x9e\x7e\x31\x47\xb2\x23\x70\xbd"
+ "\xef\x88\xe2\xdf\x88\xf1\x5e\xb4\x19\x7a\x64\x18\x67\x1e\xf2\x74"
+ "\x4a\x31\xe6\x59\x4c\x79\xde\x9e\x64\xb7\x3e\x3b\x1f\x20\xa1\xe8"
+ "\xb3\x00\xcf\xf8\x31\x1a\xa8\xa6\xe9\xd1\x0f\x38\xfa\x34\x35\x6e"
+ "\xc0\xd8\x3f\x3d\x7f\x7e\x75\x0a\x3b\x27\xdd\x69\x7c\xa0\x1d\xf7"
+ "\x82\xb5\xb5\xa4\x31\x5f\x5d\xca\xc8\x54\x1b\xc5\xf7\x98\x4d\xe3"
+ "\x3f\x0d\xcf\x3c\xb7\xb1\x38\x18\x58\xa6\xd7\x3e\xad\x7b\xd2\x44"
+ "\xfb\xb8\x0d\xc6\x5f\x77\x02\xaf\xd8\xb8\x08\xfe\x9f\x72\x89\xf4"
+ "\x9e\xe1\xb1\x8e\x79\x5c\x06\x71\x4f\xf8\x38\xee\xe7\x03\x68\xc6"
+ "\xfc\x2e\xf4\x2e\xd2\xce\xc6\xb8\xe0\xbd\xbf\x62\x3e\xd2\x73\x6a"
+ "\x0a\x44\x1a\x14\xec\xe0\xf5\x0a\x5c\x91\x2a\x67\x75\xc4\xfa\x8d"
+ "\xac\x6e\xbd\x1a\x71\x2c\x33\xae\x3b\xab\x77\x99\xe4\x1f\x84\xdb"
+ "\x74\xdc\x77\x3a\xe7\x45\xef\x31\xd1\x86\x2f\x14\xbf\x5d\x38\x06"
+ "\xdf\x2e\x14\xcb\xd4\x73\xff\xf1\x3d\x11\x50\xae\x1e\xea\xd1\x2c"
+ "\x8d\xa9\xc4\x73\x4c\x21\x7c\xac\xd7\x6b\x73\x8c\xa9\x38\x0d\x5d"
+ "\xce\xfe\xad\x5d\x9b\xac\x8d\x8d\x5f\x67\x58\x99\xbc\x4a\xaf\x8d"
+ "\x4b\x4a\x5a\x9b\xa4\x45\xc7\x52\xce\xfd\x87\xc7\xcb\xb2\xa9\xc5"
+ "\x38\x98\x15\x8e\x38\x98\xb6\x68\xe7\xd8\xb1\x66\x62\x5b\x36\x36"
+ "\xf3\x27\xb6\x01\x31\x67\xa5\x72\x0a\xe4\x02\xae\x95\x1c\x84\xcb"
+ "\x08\x57\x15\xce\xa7\xac\xb0\x92\x08\xb0\x37\xd8\x1e\x32\x87\xdf"
+ "\x0b\x5b\x28\xee\x73\x6a\x22\xb6\x53\xa5\x82\x02\xed\x1c\x8c\x4f"
+ "\xbf\x9f\xf9\xc7\x82\xf7\xe1\x32\xc2\x55\x05\x17\x7b\x4f\xf8\x3b"
+ "\x3b\xb3\xbf\xdf\xf9\x19\xdf\xc3\x92\x85\xf1\x27\xea\xe8\x26\x05"
+ "\xeb\x7b\xc2\x7f\xf2\x7c\xfd\xea\x20\xa7\x59\x5d\xb9\x62\x3e\xb6"
+ "\x5e\x18\xb0\x89\x68\x07\xc9\xe7\x43\xb3\xda\x14\x62\x3e\x76\x26"
+ "\x53\x6a\x0f\xc6\xa1\x80\xfc\x52\x3e\x05\xcd\xea\x09\x12\xf3\xa9"
+ "\xd8\x77\xb3\xe4\x83\x7d\xd7\x97\x66\x7d\x90\x2a\xe6\x53\x3b\x97"
+ "\xe7\x94\x67\x9c\x90\xd5\x84\x6d\xae\x13\x36\x29\xb8\xef\xb2\x2c"
+ "\x5b\x2a\xe4\x1f\xd4\x07\xcc\xc8\xf8\x24\x68\xfb\xf3\xc9\xb0\x2a"
+ "\x3e\xee\xa7\xf1\x6b\x52\x30\xa2\x59\xf2\xda\x17\x93\xf1\x77\xcd"
+ "\xca\xe7\xd9\xcf\xda\x15\xab\x57\xf1\x7f\x92\x13\x42\xf1\x9f\x04"
+ "\xc0\x1b\xfe\xc6\xbe\x68\xc0\x9f\x55\x6b\xf1\x36\x55\x1f\xf2\xe2"
+ "\x2a\xfc\xe9\x7f\x16\x55\xd7\x9d\x25\x54\x01\x36\x0e\x72\x39\x2b"
+ "\x80\x6d\xf6\x75\x2a\xb3\xa5\x37\x99\xc9\x51\x9d\x8d\x48\x73\x6b"
+ "\xae\x7e\x4f\x84\xf3\xe8\xf7\x24\x70\x93\x61\x55\xa0\x2d\x3e\x0e"
+ "\x74\x46\x6e\x77\x16\x55\x9b\xc9\xef\x52\x45\xd9\x58\xce\x7c\xe0"
+ "\x66\x09\x31\xe2\xfe\x52\x85\x90\x53\xb3\x04\x63\x3b\xa0\xbf\x2e"
+ "\x8c\xe7\x0e\xf7\x99\x70\x5f\x0c\xf7\xd8\x07\x82\xe0\x7e\x19\xce"
+ "\x8b\xc1\xbd\x06\xee\x83\x85\x1c\xa3\x1e\xcf\x39\xc3\xbd\x16\xee"
+ "\x67\x42\xf9\x7d\xf1\x9f\x07\x3f\x33\x48\x0b\xa4\x18\xf3\x3c\x9e"
+ "\x3c\x2d\xef\x8b\x27\x8f\xb1\xbe\xd2\xd5\x6c\x0f\x02\xb7\x41\x68"
+ "\xa5\x8f\x66\xfa\x16\xc8\xd3\xb7\xfe\xcb\xe7\x5c\x68\xbd\xe4\xc3"
+ "\x85\xcf\xa9\x60\x6c\xb5\xa2\x66\xa7\x7b\x90\xff\x5f\x57\x4a\xf3"
+ "\x7a\x2c\x2e\x28\xfc\xd2\x2c\xf4\x35\x4c\x2b\x06\x9d\x4f\x44\xbb"
+ "\x58\x46\x7e\x83\x7e\x9b\x2d\x19\xb1\xb2\xfb\x4a\x89\x8c\xdd\x73"
+ "\xbf\xa3\xf4\x8a\x8c\xb0\xf8\xe8\x92\x4f\x42\x67\x7f\x16\x83\x9e"
+ "\xc9\x3a\x01\x36\x03\x8b\x85\x96\xb0\x36\xd0\xb6\x32\x8e\xd9\x81"
+ "\x32\xf2\x3e\x97\x5f\x27\xf9\xbc\x85\x8c\xec\xa6\x4f\xf3\x78\x39"
+ "\x66\x99\x4c\xc7\xfd\x5f\x25\xac\xa5\xf0\x6e\x60\xea\xca\x38\x96"
+ "\x06\xf9\x36\x83\xad\x26\xd6\x6f\x9b\x29\x18\xcf\xd9\x0a\xdc\x4f"
+ "\x87\x8c\xe4\x2c\x9f\x9e\x89\xdf\x51\x32\x3b\xe4\x04\x51\x61\x5c"
+ "\x57\xac\x5b\xa9\x93\xcf\xc4\x1d\x90\x86\xfb\x58\x3b\x9e\x26\x2a"
+ "\xf4\x11\x2d\xd6\x25\x87\xc5\xa9\xcb\x96\x69\x25\x7f\x57\x66\x48"
+ "\xeb\xdf\x9e\xa7\x7f\xcd\x50\x39\x6b\x55\x48\xd4\x13\xf0\x5f\x88"
+ "\x18\x1a\xdd\x19\x9b\xc1\x1d\x7e\xa7\xa2\x3b\xf6\xac\xdf\xcb\xe2"
+ "\xdf\x66\xcb\x0c\x50\x0e\x1b\xdf\x08\x38\x0e\xef\x8e\x2e\x62\xfb"
+ "\x60\x65\x32\x1c\xe7\x44\x08\x59\x68\x4f\xb6\xc1\xf7\x65\x45\x88"
+ "\x59\xaa\x3c\xb9\xa5\x6c\x23\xfa\xff\x96\x01\x8d\x65\x79\xf8\x4c"
+ "\xf4\x23\x26\x67\x7e\xb6\xec\x44\xc3\xce\x29\x83\x8d\x82\xe7\x60"
+ "\x5b\x64\x8a\xb7\xd1\xee\xc0\x39\x2d\x21\x5b\x16\x86\xb8\x05\x1e"
+ "\xa3\x1f\x93\x4e\xea\x57\x13\x41\x27\xd4\xcf\x44\x1c\xa3\xad\x8b"
+ "\xa7\x67\x5a\x64\x72\x94\x7f\x8f\xc3\xf5\xef\x3c\x2e\xd1\x33\xad"
+ "\x52\x99\x70\xaf\x02\x1b\x2a\x17\x7e\xd5\xdd\xd9\x72\x9d\x53\xec"
+ "\x47\x7e\x2e\x5b\x26\x7f\x12\xfd\xcf\x61\xd9\xcc\x76\x96\x29\x98"
+ "\xdf\x45\xc8\xbb\xc4\x4c\xd4\xcc\x47\x0c\xfc\x0f\xf6\xcf\x2b\x44"
+ "\xfc\x1f\xec\x9f\x1f\xc7\xf4\x2b\xe3\x3d\x69\xbe\x96\x61\x5a\x26"
+ "\x2f\x00\x8c\x3e\x0e\xd7\xbf\x43\xfe\x62\x33\xf9\x17\x96\x7f\xb3"
+ "\x9c\x9d\xd5\x6c\xf1\xd1\x90\x50\x48\x3f\x20\xa5\xfb\xca\x22\x80"
+ "\xa6\xf2\x4a\xa9\xef\x77\xf8\x9d\xd4\xc3\x7d\xbd\x34\xcf\xc3\xe6"
+ "\x7d\xb2\xe5\xcd\x4e\xf7\xc9\x70\xdf\x29\xdd\x77\x67\xfb\x10\x49"
+ "\x56\xe0\xbc\x48\x47\x46\xf4\xeb\x38\xee\x5d\xa5\x01\xbb\x10\xec"
+ "\x1b\x78\x0e\xfc\xdf\x6e\xe4\xef\x0a\xda\x8e\xac\xbc\xd6\xce\x80"
+ "\x29\x31\x9d\x20\xff\xe0\x19\xd8\x7f\x89\x4b\xc4\x72\x16\x98\xe5"
+ "\x3b\xeb\xa4\xb6\x09\x59\x3e\x81\xc2\xb6\xfa\x08\xde\x46\xc5\x16"
+ "\xf8\x7f\xbe\x65\x42\x0d\xbe\x63\x30\x13\xca\x7d\xe3\xa4\x5c\x2e"
+ "\xcf\xed\x51\x2f\x31\xc1\xc8\xd9\xb8\x1a\x31\xa7\x60\x73\xd7\x79"
+ "\x1b\xd4\xcc\xaf\x31\xfa\x22\x61\xf1\xf2\xd0\xf7\xa9\x8d\x8c\x63"
+ "\xf1\x26\xb6\x51\x0d\x8b\xb3\xf0\x92\x4e\x25\xf9\x3d\xa5\x39\x78"
+ "\x0e\xce\x90\x80\xbe\x50\x59\x5c\x99\x6e\x5d\x00\xf3\x7f\x2a\xfa"
+ "\x3d\x2d\x49\x21\x41\xc5\x02\xf7\x7b\xca\xfc\x94\x8c\x83\x71\x4a"
+ "\xca\xe0\xbe\x4f\x69\xd6\xdb\x2a\xc9\xf7\x29\xbd\x66\xb7\xc2\xff"
+ "\x33\x81\x1e\x0a\xf8\xd5\xb1\x7b\x87\xcf\x2b\xc5\xa0\xbe\x50\xe5"
+ "\x84\xc5\xb3\x41\x5f\xa8\x23\xd2\x17\x32\x05\x8f\xb9\x9a\xad\x00"
+ "\xf9\x97\xc6\xf7\x14\x39\xd2\x76\x43\x9f\xe1\x73\xc5\x32\xf9\x02"
+ "\x31\xed\x20\xf0\x25\x48\x1c\x97\x5a\x70\x9e\x01\xe7\xcb\x40\x26"
+ "\x54\xd3\x5e\xfd\xeb\x83\xc9\x9c\xf6\x80\x60\x73\x3b\xfa\xc8\xc8"
+ "\x56\x58\xcd\x32\x5f\x16\xd3\x97\x8d\x25\x65\x8a\x01\x7e\x9b\x9f"
+ "\x5b\xb5\x36\x36\x6e\xc5\xef\x12\x0d\xda\xa7\x97\x3c\xce\x02\x72"
+ "\x86\x68\xe3\x93\xe3\x98\x4a\xd2\x3e\xfd\xc4\x63\x91\x91\x4b\x56"
+ "\xfc\x7a\xc9\xa3\x4b\x96\xfe\xfa\x11\x7e\x6a\x72\x49\x12\x73\x7b"
+ "\x9a\xbc\x56\x8b\x2f\x3d\x27\x46\xad\xdf\x10\x97\xb4\xb6\xbf\x3c"
+ "\x08\x62\x73\x6d\x72\x36\xaf\xdc\x89\xff\xb3\xf9\x3c\x99\x6f\xa1"
+ "\x34\xcf\xc6\x65\x9f\xef\x56\xa4\x2d\x8b\x69\x9f\xed\xab\x42\xfb"
+ "\x8a\xf9\x14\x9a\xcc\xf4\x8e\x02\xfb\x34\xea\x9f\xee\x6c\x5f\xa3"
+ "\xb3\x7f\x30\xf1\xdd\x66\x39\xbe\x27\xf6\x65\x31\xed\x3a\x9d\x36"
+ "\x2d\x83\xf9\xf8\xca\xf6\xed\x94\xe6\xde\x31\x4d\xaa\x43\x13\xe6"
+ "\xc9\xf6\x7d\xa4\x2f\x6e\x75\xf6\xb8\x60\x47\xbc\x53\xf6\xe7\x42"
+ "\x23\x42\xd0\x9c\xf1\x05\x5b\x65\x1c\x5c\xe3\xf1\x5a\xd0\x27\xdf"
+ "\x53\x68\x03\x8e\xd9\x02\x65\xa0\x83\x53\x7d\x78\x8c\xb3\xec\x7a"
+ "\x16\x97\x23\xd2\x6e\xf3\x59\x61\x97\xc3\xaf\x0f\x5d\x61\x57\xb0"
+ "\x71\x22\x4d\xa1\xf5\xec\xbc\x7f\x0a\xad\xc3\x58\x7e\x80\xe3\x9c"
+ "\x48\x5b\x7a\x4e\xa4\x9d\xda\x56\x80\xfd\x0e\xbf\x5f\xe1\xb9\xf5"
+ "\x48\xfb\x57\x94\xc5\x33\xc2\xf9\x1c\xee\xeb\xb0\x0a\xf7\x71\x2e"
+ "\x07\x0c\x97\xb6\xf3\xd8\xd7\x91\xeb\xbf\x39\xb7\x62\xbd\x99\xc7"
+ "\xbe\xbe\xc2\xe3\xc5\xe3\xf7\xa1\xcc\x74\x28\xe7\xd8\x0a\xbb\x8f"
+ "\x36\xd2\xde\x4b\xd9\xd9\xdb\xec\xf1\x64\xa8\x78\xd6\x28\x63\xd7"
+ "\x4d\x25\x72\x3c\xcb\x67\x2f\x8d\xd7\xa2\x5f\xc3\x0c\x0b\xb5\xa2"
+ "\x7f\x9c\xbf\xf5\x34\xc8\xb5\x29\x0a\xa0\xdb\xf8\x59\xb5\x86\xd0"
+ "\xc1\xcf\x5e\x67\x9f\x8f\xa1\x79\x25\x07\x68\x76\x73\x28\xcd\x2b"
+ "\x0d\xa3\x39\xf5\x38\x3f\x2b\xa3\xd9\x5f\x11\xb8\x87\xf4\x8b\x75"
+ "\x34\xaf\x2c\x8c\x66\xb7\x95\xc3\x2f\xdc\x7f\x63\xa0\x79\xe5\x70"
+ "\xff\x71\x38\xbc\xb7\x9f\x66\x7f\x82\xef\x85\xd2\xec\x6a\x1d\xfc"
+ "\xc2\x7d\x8d\x16\xf2\xc1\x7d\xad\x06\x7e\xe1\xde\xa4\x6e\x91\x8d"
+ "\xb7\xc0\x3b\x90\xd6\x1e\xc1\xbf\xd5\x15\xc1\xbe\x95\x6d\x8d\xe0"
+ "\xdf\xe8\x8d\xe0\xdf\x10\x22\xd8\x37\xb6\xcb\x22\xf8\x37\xea\x94"
+ "\x90\xff\x20\xcd\x3e\x9e\x0a\xf9\xc2\x69\xf6\x89\x56\xf8\x85\xfb"
+ "\xfa\x68\xc8\x07\xf7\xa7\xaa\xe0\x17\xee\x4f\x43\x5d\xca\xe1\xbe"
+ "\xa1\x02\xf2\x1f\xa2\xd9\x9f\x05\x43\xbe\x79\x34\xfb\xf3\x02\xf8"
+ "\x85\xfb\xb3\x0a\xc8\x07\xf7\x5f\x40\x39\x65\x70\x7f\xae\x0d\xf2"
+ "\xcf\xa3\xdb\x15\x58\x1f\x23\xdd\xee\x8b\xe5\x46\xd0\xed\xe3\x31"
+ "\x3f\xdc\x4f\x80\xf2\xca\xe0\xde\xcf\x0c\xbf\x70\xaf\xca\x81\xfc"
+ "\x70\x1f\x00\x6d\x2d\xa9\xa4\xdb\x03\x1b\x21\xdf\x7c\xba\x7d\x12"
+ "\xa4\x97\xc2\xfd\xf7\xc2\x20\x1f\xdc\x07\x61\x7e\xb8\x9f\x92\x0b"
+ "\xf9\xe1\x5e\x83\x34\xaa\xa2\xdb\xa7\x15\x41\xbe\x05\x74\x7b\xb0"
+ "\x15\x7e\xe1\xfe\x6e\xac\x3f\xdc\xdf\x73\x10\x7e\xe1\x7e\x26\xd0"
+ "\xaa\x1c\xee\xbf\x0f\xf5\x2b\xa9\xa6\xdb\x75\x58\xfe\x42\xba\xfd"
+ "\x87\x48\x1f\xb8\x9f\xb3\x1b\xf2\xc1\x7d\x28\xd0\xa3\x0c\xee\x7f"
+ "\x94\x00\xf9\x17\x0e\xca\xcf\xed\x73\xe7\xd3\x4d\xe3\x08\xdd\xfe"
+ "\x48\x3d\xdd\x34\x1e\x7e\x7f\xbe\x85\x6e\xf2\xd5\xd1\xed\x8f\x35"
+ "\x43\x3a\xfc\x46\x2c\x83\xfb\x10\xf1\x1e\x7e\x1f\x0d\x83\xfb\x50"
+ "\xf1\x1e\x7f\x55\x70\x1f\x26\xde\xc3\xef\xfc\x42\xb8\x0f\xa7\xdb"
+ "\x9f\x48\x80\x7b\xfc\x25\x70\x3f\x4f\xbc\x87\xdf\x5f\x84\xc2\xaf"
+ "\xcd\x32\x5d\x9f\x6a\xf1\x4f\x0c\xb5\xf8\xef\x2c\x47\x4c\xda\xf3"
+ "\x4b\xf6\x0b\x01\xa5\xa1\xa0\x77\xc7\x65\x74\x91\xf1\x2d\x32\xbf"
+ "\x0f\x51\xa6\x98\xd2\xcc\x2c\x4e\xa4\xe8\x67\x73\x5c\x93\x6c\xc2"
+ "\xfb\x60\x23\x85\x83\x0c\x97\x43\xdb\xdb\x68\x96\x6f\x3b\xb4\x39"
+ "\x81\x66\x4d\x6c\x82\x5f\xb8\x9f\x74\x02\xda\x0c\xf7\x0f\x6f\x87"
+ "\x5f\xb8\x7f\xe6\x31\x68\x7b\x42\x77\xb6\x9f\xc6\x2c\x1b\xbf\x90"
+ "\xc9\x88\x3d\xeb\xcb\x03\x6d\x19\x34\xd2\x06\xba\xe3\xf5\x8a\x98"
+ "\x40\x5b\x0c\x60\x77\x57\x44\x20\xc6\x73\x29\xd1\x1f\xa4\x01\x89"
+ "\xac\x4e\x18\xb3\x89\xf6\xce\x94\xf3\x6f\x4f\xa4\x4d\x32\xbf\x27"
+ "\x30\xb6\x08\x0d\xd8\xea\xee\x79\x1c\x7b\x3e\xad\xc2\xc0\x9f\x2b"
+ "\x89\xe3\xf9\x33\xf8\x7c\x6b\x20\xfa\xe8\x9f\x11\xc3\x9e\x9b\x3a"
+ "\x5b\xc5\x76\xf9\xe0\xb3\x9d\x98\xd7\x2c\xf3\xab\xe4\x32\x7c\x42"
+ "\x15\xcd\xf2\x21\x1d\xca\xfa\x05\x50\xf7\x7a\xa8\xbb\x4a\xb4\xe1"
+ "\x97\x50\x65\x4d\x34\xf7\xb3\x72\x7a\xd0\xfd\x7b\x38\x86\x15\x72"
+ "\xf7\x14\xe5\x81\x1c\xc4\x71\x31\xe8\x43\xb9\x36\x7d\xe6\xc1\x26"
+ "\x99\xaa\xbc\x84\xcd\x77\x54\x84\x73\xf9\x38\x31\xae\x77\x7b\x7d"
+ "\x9a\x76\x43\x20\x7c\x5f\xb5\x33\xc3\x4a\xbb\x8c\xe9\x8f\x81\x6c"
+ "\x65\xe9\x07\xd9\x39\x26\xfe\xff\x6e\xb6\x3f\x95\xff\x5f\xc0\xe6"
+ "\xc2\xa1\x2c\x7c\xd7\x79\x1c\x62\xcf\x0e\x0b\x15\x02\x2a\x22\xd8"
+ "\xfa\xbe\x6c\x62\xfc\x87\x82\x59\x1e\x98\x4c\x7c\xb5\x1b\xfe\x06"
+ "\xe5\x4f\xdc\xef\x32\x66\xed\xcb\xcb\x9e\xfd\xe1\xaf\x90\xf7\x4d"
+ "\x9c\x5f\xca\x9e\x68\xec\x8b\xe5\x0d\x6d\x78\x05\x75\xa1\x9c\x44"
+ "\xa0\x7e\xe6\x36\xb0\x2a\xa2\x26\x8d\x10\x9b\x6a\x97\xd6\x96\x9b"
+ "\xa8\xb5\xe7\x56\x84\xd3\xfc\x8a\x88\x00\x9b\x8c\xb0\x73\x04\x32"
+ "\xd5\x8b\x0f\x5a\xd1\xe6\xfc\x18\xf3\xce\x11\xc6\x3d\x62\x79\x20"
+ "\x95\xc8\x8d\x49\x9f\xe1\x7d\x22\xcd\x7e\x3c\xc7\xd4\xd6\x40\x8c"
+ "\x49\xac\xac\x04\x9a\x1d\x19\x2e\x8c\x7b\x32\xac\x14\x6d\xf7\x54"
+ "\x9c\x7b\x3b\x81\x74\xb9\x0a\x7c\x01\xbd\xa2\x5a\x28\xd5\x05\x75"
+ "\x4a\x1e\xd0\x0e\xed\x6a\xf4\xc9\xb1\xc2\x6e\x47\x1f\x77\x39\x66"
+ "\xa0\x03\xe7\x97\x2a\x14\x6c\x0a\x22\x7e\x77\xab\xe0\x57\xaf\xaf"
+ "\x5d\x86\x6b\x99\x4a\xf4\x19\xd6\xc5\xce\xf1\x63\x94\x6d\x01\x75"
+ "\x3e\xcf\xeb\xcc\xbb\xc4\x55\x86\x15\x1b\x0c\x6b\x93\x92\x57\xbc"
+ "\x68\xf8\xa9\x16\x06\x93\xda\xb5\xab\xb5\x89\x71\x89\x6b\x93\xd6"
+ "\x0f\xf0\x53\x04\xf5\x6a\x06\x9c\xb0\xf9\xae\x63\xf0\x75\xb6\xae"
+ "\x20\x0b\x38\x80\xbc\x7e\xfd\x35\x1e\x9f\xa5\x3b\xdb\x1f\xc6\xac"
+ "\xcf\xb3\xb9\x1a\xa1\xa8\x22\x9a\x16\xeb\x0f\x6e\x43\x5f\x24\x2f"
+ "\x62\xfc\x0f\x0b\x31\x91\x76\x1e\xb3\x99\xc5\x63\x84\x31\x46\xca"
+ "\x46\x6a\x4c\x69\xc7\x7e\x00\x32\x68\xe7\x02\x5a\x12\x4f\xae\xe7"
+ "\x25\x16\x35\xc9\x02\x8a\xae\xe7\xed\x0c\x97\xe2\x69\xd9\x73\x77"
+ "\x16\x09\xaa\x3d\xfb\x31\x9e\x56\x2f\xd5\x90\x1a\xa0\x65\x4f\x4e"
+ "\x3d\x8c\x21\xeb\xa3\x4a\xb2\xe8\x41\x3b\x8c\xb9\x98\x1f\x9d\x3d"
+ "\xeb\x33\xed\x54\xa7\xb0\x67\x11\x25\xfc\x06\xd0\x80\xbd\xe6\x5e"
+ "\xd5\xae\x50\x7c\x8e\x71\xb4\xec\xbd\x3a\x92\x5e\x4f\x85\xff\xd0"
+ "\x03\x6e\xb2\x08\x65\x71\x83\xf5\x97\x09\xa4\xfb\x09\xf9\x3b\x8d"
+ "\x2d\x0b\x88\x1c\xf3\x82\xbd\x47\x96\xc1\xff\x69\x2b\x89\x3f\xe4"
+ "\x0b\x4c\x3b\x06\xe9\xdd\x3a\x3f\x5b\x86\x4e\xd9\x93\xa1\xf3\xeb"
+ "\xa5\x3a\x95\xa9\xd9\x4a\x7a\x67\xad\x2f\x98\x63\x21\x8a\xd7\xc1"
+ "\x2e\x2c\x11\xa0\x0f\x16\xeb\xcb\xed\x2f\xeb\xc6\xd9\x5e\xd6\x29"
+ "\x7a\x7b\x75\x4a\xdb\x4b\x3a\x45\xcf\x4b\xba\x71\xbd\xdd\x3a\xa5"
+ "\x29\xd6\x42\x3e\xb6\xfc\x89\xd4\x36\xb7\xb2\x79\xdf\x5e\xff\xbd"
+ "\x6d\xbd\xfe\x3b\xab\x55\xcd\x24\xe8\x01\x03\xd8\x85\x60\x2f\xbf"
+ "\x01\x63\x05\xc0\x84\xca\xf6\xc7\xf5\x99\x34\x6f\x6f\x01\xd0\x77"
+ "\xe3\x13\xf7\xd3\x6f\xec\xd9\xdf\x5b\xa0\x7d\x0a\xe4\xd5\x26\x85"
+ "\x06\xd2\x00\x3f\x77\x83\x3e\x09\x06\x19\xa7\x08\x86\x4b\x6b\xe6"
+ "\x7c\x20\x34\x7b\x92\x0d\xe7\x1d\x30\x2f\xcf\xa7\x59\x68\x66\xbf"
+ "\x41\xc5\x2c\xbe\x6f\xb6\x6a\x5f\x09\xb3\x49\x02\xf6\x4b\x36\x49"
+ "\xa5\x62\x70\x7f\x27\x90\xa7\xbe\x6f\x0c\x2f\x80\xcc\xc9\x2b\x19"
+ "\xd4\x3f\x0f\xf7\x41\x04\xdf\xce\x2f\xa9\x2b\x10\xfa\x7c\x50\x83"
+ "\xcc\x0c\xb0\x43\xff\xc9\x64\xcf\x72\x77\x45\xa4\x5f\x25\x3e\xf8"
+ "\x6c\xff\x35\xab\x1c\xef\xb5\x49\x32\x6a\xea\xb4\x92\x02\x5c\xff"
+ "\x08\xd6\x1f\xdc\x7f\xcd\x22\x47\xbc\xe0\x1a\x52\x93\x2c\xf0\x8e"
+ "\x82\x6b\x62\xb9\x45\x15\x31\x19\x2f\x10\x16\x23\x07\xe3\x6c\x21"
+ "\x8e\x0a\xd2\x61\x0c\x8a\x31\xc1\x92\x50\x86\x05\xfe\x0a\xfe\x57"
+ "\x62\x3e\xaa\xda\x15\x21\x40\x19\x80\xa5\x0a\xea\xbf\x4b\x27\xe4"
+ "\xed\xdc\x0f\xb2\xd5\x40\xa7\xc7\x6b\x84\xd7\x2b\x40\xa6\x05\x56"
+ "\x00\x3d\x8c\xd2\x9c\x46\x6d\x85\x8d\xa0\x0f\x31\xfa\x98\x8d\x1c"
+ "\x4d\xee\x42\x3f\xc3\x3e\x96\x09\xf5\xd1\x16\xff\x3d\x45\x16\xff"
+ "\xbd\x05\x42\xde\x1e\x33\x5c\xcd\x86\x24\xa2\xba\x24\x53\x27\xf4"
+ "\xf9\xc0\xbd\x7a\x8b\xf8\xc0\x05\x3b\x8f\xd9\x7b\x80\x1d\xb4\xdf"
+ "\x84\xbc\x5d\x2c\xd6\x0d\xda\x75\x28\x73\xbb\xb3\xd5\x45\x92\x5d"
+ "\x86\x72\xc4\xbe\xad\x3e\x16\xae\x18\x48\xdf\x6f\x96\xdd\xd7\x20"
+ "\xc9\x18\xd0\x3d\x51\xc2\xf6\x28\x2b\x5b\x6b\xeb\xd5\xff\x1c\xf3"
+ "\x02\xdd\x70\x0d\xd3\xc7\xde\xab\x9f\x07\xd7\x23\x70\xfd\xcc\x9e"
+ "\xb7\x4b\x6b\xcf\xdb\x19\x61\xcf\xdb\x6b\xb0\xe7\x25\x2e\x81\x2b"
+ "\x1a\xae\x65\x70\xc5\xc0\x15\x0b\x97\x9e\xe6\x25\x26\xc0\x2f\x3e"
+ "\x4f\x86\x2b\x15\xae\x34\xb8\x32\xe1\xda\x62\x7f\xbd\x22\x4a\x00"
+ "\x7c\xc2\xa5\x85\x2b\xd8\x9e\xb7\xa7\x01\xae\x41\xe7\x4a\x68\x8e"
+ "\xc0\xe3\x7a\xf8\x9e\xa3\x81\x18\xf7\x39\xad\x0b\x7d\x5a\x6a\x8e"
+ "\xea\x3a\x47\x16\xdf\x45\x36\x29\xd6\xdd\xfc\x09\x96\x0f\xfd\xab"
+ "\x77\x84\xe5\x1d\x70\x3b\x1f\xa3\xa9\x88\xb6\x05\xc7\x33\x9f\xee"
+ "\xd0\xa7\x65\xb5\x31\xcd\x24\xd2\x42\x32\xaa\x9b\x7b\x48\x46\x2c"
+ "\xb5\xb3\xb1\x79\x1a\x9e\xaf\x31\xb0\xfd\x0f\x76\x1a\xad\xed\xcd"
+ "\xdd\xb9\xc0\xae\xda\x63\xa0\xaa\x3d\x15\xcc\x6f\x26\xc8\x1f\x8c"
+ "\xa3\xd7\x37\x2e\x45\x5c\xc1\xd8\xb4\xa6\xad\x8b\xbc\x1c\x4b\x85"
+ "\x1a\x3d\x9e\xfe\x05\x80\xc9\xc8\x4e\xc4\x98\x34\x36\xfd\x65\x23"
+ "\xcd\x04\xbc\x4c\xb0\x03\xdd\x04\x1c\x93\x02\xb6\x70\x7c\x2a\xe1"
+ "\x0b\xf4\x99\x5a\x8a\x3d\x46\xc7\x4d\x5a\x00\xcf\x14\x18\x9b\xac"
+ "\x18\xc6\xa4\xc5\x29\x64\x66\x31\x3c\x63\x71\x64\xa1\xde\x8b\x0d"
+ "\x81\x54\x78\x5e\x47\x4a\x7f\x47\x94\xfe\x97\x79\x6c\x62\x3b\xd0"
+ "\xbe\x2f\x3e\x47\x6e\x62\xd1\xa2\xcb\x5a\x72\x54\x77\x16\xf4\xd2"
+ "\x7e\x90\xdf\x89\x45\xbd\x20\xbb\x81\x96\xf6\x91\xd1\xf2\x7b\x03"
+ "\xc6\x43\x63\x45\xcb\xde\x60\x7d\x39\xa7\x67\x0c\x41\x9a\xf5\xa7"
+ "\x27\xd2\x78\x43\x33\xd0\x13\xe8\x6a\xaa\xb7\x93\x00\x19\x59\x29"
+ "\xd1\xf3\x4d\xa0\x27\xd0\x54\x83\x34\x05\x7a\x30\x9a\x52\x91\xa6"
+ "\xa5\x4e\x34\x05\xf9\xc4\x7c\x8c\x22\x4d\x05\xa0\x69\xa9\x1b\x9a"
+ "\xf6\x8d\xef\x81\xa6\x65\x1e\xd1\xb4\x62\x14\x34\x0d\x5a\xe2\x8e"
+ "\xa6\x36\xd4\x99\xf9\x89\x05\x14\x64\x9e\xc9\xf6\x31\xf3\x97\x0b"
+ "\xf6\x4e\x33\xd8\x6d\x66\x41\xb5\xb3\x08\x68\xa2\xc2\x7d\xae\x18"
+ "\x0b\x8f\xf9\xb6\xab\xa0\xd7\xed\xf9\x7b\x2d\x98\x06\xb2\x4b\xff"
+ "\x20\xfa\x07\x34\x98\x49\xa9\x9c\x1e\xac\xbd\xd6\x09\x3a\xe6\xce"
+ "\xbc\x1e\xb4\x39\xf3\x2b\x1e\x14\xa8\x9e\xa0\x1c\x59\x7e\x3f\x51"
+ "\xf4\x80\xac\x30\xa4\x90\xbb\x0b\x40\xde\xf5\x80\xfc\xbc\x24\xbb"
+ "\x43\xf7\x84\x41\xa0\x70\x65\xa0\xdf\x57\xc1\x7f\x8f\x19\xe4\x35"
+ "\xe3\x2f\xf2\x0c\xd7\x1f\x6b\x96\xff\x1d\xca\x9b\x32\xf5\x93\x18"
+ "\x1b\xc9\xd0\x0f\xe4\xaf\x90\x11\x0d\x76\xd7\xf0\xfd\x04\xe3\x71"
+ "\xa6\xb5\x22\x5f\xf7\x13\x53\xb3\xa3\x9f\x08\x2f\x71\x39\x8c\xbc"
+ "\xc0\x7e\x81\x7d\x64\x87\x93\xfc\x05\xd9\xae\x2e\x11\xe3\xd3\xd8"
+ "\x41\xfe\x42\x5e\x05\xfa\x8b\xc5\xb8\x35\x83\xf6\x8f\x97\xa1\x7f"
+ "\x6c\x60\xb1\xc3\x34\x40\x8f\xfd\x3d\xdd\x9c\x87\xc8\x33\x93\xad"
+ "\x8a\xf1\xaf\x40\x94\xf7\x9c\xee\x7b\xfe\x9b\xd2\x68\xb0\x65\x40"
+ "\xfe\xe5\xef\x35\xd3\x6e\xbd\x1f\xce\x55\xc2\xf8\x39\x34\x30\x16"
+ "\x6c\x87\x6f\x40\x1f\xac\x01\x7c\x5d\x21\x33\xcb\xd6\x80\x3d\xd0"
+ "\x8d\x31\x00\xa1\x3e\xeb\x79\xec\x64\x21\x7b\xd2\x3e\x78\xc6\xfc"
+ "\xd8\x0a\x92\x1f\xdb\x0e\x1d\x8e\xfb\x1d\xf3\x45\x6b\x75\x72\xc7"
+ "\x37\xcf\xec\xb7\xab\xc0\x16\xc0\x33\xff\xb2\x29\xdc\x9f\x95\xf2"
+ "\x6f\x7a\xa4\x6b\x9b\xec\x4e\xbe\x4e\x91\x53\x99\x60\x48\x27\xe3"
+ "\x2f\xc9\xa6\x60\x7c\xd6\x18\x03\xc6\x81\x97\x9e\x65\x40\x5d\xb3"
+ "\x76\x5b\x1f\xc8\x24\x20\xbb\x15\xe1\xa6\xd4\xcb\xe8\x17\x72\x84"
+ "\xb2\x77\x0a\x4e\x79\xc8\xec\x39\x67\x0e\x00\x9d\x22\x84\xed\x67"
+ "\x0e\x81\x4c\x09\xa5\xcf\x43\x5b\x7f\x07\x6d\xbd\x04\x74\xbd\x04"
+ "\x6d\x7d\x49\x6c\xab\x18\x17\x51\x00\xfa\xc3\xb3\xc1\xf5\x9f\xd4"
+ "\xd6\xe7\x31\x4e\xd0\xa1\xf0\x8d\x97\xc9\xf7\xe8\xbd\xb8\xe6\xcb"
+ "\xce\x64\x76\x9b\x6c\x67\x09\x7e\x97\xe9\xe7\xdc\x44\xfd\x52\xc0"
+ "\x23\xd2\x1c\x6c\x02\xd0\x73\x3b\x8d\x12\x1f\xb0\x3e\xb4\x57\xef"
+ "\x57\xba\x06\xea\x83\xb4\xbf\x42\x42\xb0\x3f\x03\xed\x67\x96\x22"
+ "\xfd\x5d\x63\x93\x07\x31\x1e\x8c\x03\x1e\xac\x11\x79\x90\x27\xf2"
+ "\x00\x6c\x45\xd0\xd5\x38\xc7\xa1\x29\xcd\xe2\x3c\x18\x19\x8d\x34"
+ "\x6e\xe3\x5f\x7a\xd9\x5f\x3b\xdd\xf7\xd7\xbb\x1e\xed\xe1\x63\x48"
+ "\x19\xfa\xd3\xa5\x01\x15\x3f\x16\x7a\xa1\xdf\xe6\x8b\xfd\x96\xea"
+ "\x7f\x26\xf5\xd9\x16\x99\xe6\xac\x67\x7d\x76\x6a\xcd\x3f\x69\x9f"
+ "\x0d\xba\xb1\x7d\x76\xda\x1f\x5c\xfb\xec\xb4\x2a\xd7\x3e\x3b\x6d"
+ "\xa3\xa3\xcf\x8a\xcf\xc6\xa4\xcf\x4e\x2b\xfc\x76\xfa\xec\xb4\xc2"
+ "\x41\xfa\x6c\xbd\x07\x7d\x56\xe3\xa6\xcf\x6a\x6e\x5c\x9f\xbd\xeb"
+ "\xe0\xcd\xd3\xb1\x33\xae\xf7\xc8\x07\xd1\xb1\x2f\x3b\xe9\x58\x7f"
+ "\xd4\xb1\xc1\xb9\x83\xf5\xd7\xde\x62\xe8\xaf\x2a\xb1\xbf\xfe\xc7"
+ "\x07\x50\xde\xf4\xad\x1f\x37\x0e\xdf\x5f\x6d\xc5\x0e\xfb\xc9\x6d"
+ "\x9f\xd5\x63\x9f\xad\x20\x26\x33\xeb\xb3\x2b\xa5\x3e\x5b\x2c\x8e"
+ "\x77\x86\xe8\xb7\x41\xee\xfa\x2d\xc6\x8a\xc3\x38\x71\x43\xf6\x5b"
+ "\xd1\x5e\xea\x9d\x8e\xfd\xd6\x78\x8b\xe9\xda\x19\x8b\x5c\xfb\xed"
+ "\x8c\x4c\xd7\x7e\x3b\x63\xae\xa3\xdf\x8a\xcf\xc6\xa4\xdf\xce\x58"
+ "\xf8\xed\xf4\xdb\x19\x0b\xbf\x3b\xba\xf6\x6e\xc3\xcd\xd3\xb5\xf7"
+ "\xbe\xc7\xfa\xad\x3b\x5d\x9b\x21\xea\x5a\x7f\xd4\xb5\xda\x27\x3d"
+ "\xeb\xbb\xf7\x3c\xfa\x4f\xde\x77\x6f\xb0\xce\xbd\x77\x82\x6b\xdf"
+ "\xbd\x77\x9e\x6b\xdf\xbd\xe7\xaa\xa3\xef\x8a\xcf\xc6\xa4\xef\xde"
+ "\xab\xfc\x76\xfa\xee\xbd\xca\xef\x8e\xce\xbd\x2f\xc4\x5d\xdf\xd5"
+ "\xce\x20\x99\x4d\xb2\xfb\xb6\x9a\x8a\xd9\xbe\xbc\x4c\x93\xed\xa7"
+ "\x7c\x0f\xba\xec\xbe\xb7\x4d\x9a\x70\x22\x6c\xaf\xaf\xc3\x78\x31"
+ "\xb8\xa7\xe6\x55\xa7\x3d\x2b\x7c\x4d\xf7\xbe\x1a\x69\xcf\x4d\x99"
+ "\x18\x53\x66\xa8\x3d\x37\x34\xa7\x3e\x86\xbf\x37\x53\xc9\xb1\x51"
+ "\x1f\x2b\xdd\x33\x1f\x37\xb2\x99\x2a\xba\xad\x7e\x99\x65\x42\xfd"
+ "\x32\x77\xeb\x24\x01\x9b\x28\xc5\x7d\x26\x1d\x33\xd6\x87\x76\x6c"
+ "\x27\xa4\x80\xad\x41\xcc\x9c\x0f\x6d\x4c\x60\x7b\x24\x02\xa6\xab"
+ "\x3b\xb2\xa2\x08\xa4\x45\x4b\x69\x2c\x3e\x7b\x96\x0f\x15\xe0\x19"
+ "\xcd\x4f\xb0\x61\xcc\x40\xf4\xbf\xfc\xc0\x35\xc4\xe2\x4c\x3d\xc8"
+ "\x08\xb6\x87\x84\xad\xe3\xdf\x79\x57\x67\x69\x3b\x51\xd4\x6e\x61"
+ "\x7b\xe9\x70\xaf\x4e\x79\x3e\xe2\xdf\x67\x76\x11\x95\x2b\x88\x50"
+ "\x12\xaf\xa4\xfe\x7b\x5a\xd9\xde\x62\xc0\x8a\xb4\x7f\x07\xe3\x2b"
+ "\x0a\xd3\xf5\x15\x92\x0f\x60\x0a\xf5\xfb\x6b\x3a\x9e\x7f\xf5\xa1"
+ "\xa5\x49\x44\x0d\x97\x8a\xe6\xed\x69\x85\x7a\x59\xa4\xf9\x43\xb7"
+ "\xfb\xc4\x31\xc6\xf4\x5d\x1a\x85\xb8\x57\x08\x7d\x21\xb0\xbd\xf4"
+ "\x3b\xe4\x42\x8e\x1d\xd2\x69\x56\x06\x35\xa5\xda\x48\x20\xd0\x02"
+ "\xd7\xf0\x31\xd6\x99\x50\xba\x3e\x74\xf3\x34\x42\xde\xd9\xd0\x2a"
+ "\xc7\xfd\x1c\xf6\xff\xba\xab\xd3\x98\xfe\x23\x5c\xe3\x67\x71\x0d"
+ "\x5a\x64\xb3\x2e\x47\x5e\xe4\xf1\xa4\xe1\xff\xeb\xb8\xf6\xb0\x08"
+ "\xee\x71\x8d\x5c\xe8\xd0\x28\x30\x2f\xa4\xff\xd1\x98\xf2\x19\x09"
+ "\x34\x10\x65\x3e\xb4\x4d\xcc\x9b\x8c\x79\xcd\xb2\x59\x6c\x8f\x02"
+ "\xdc\xb3\xbd\x4a\xf0\x1e\x9b\x2b\xa5\xc5\xf1\x4a\x26\x1f\x72\xf7"
+ "\xb4\x0a\xd3\xe3\x95\x6c\x2f\x29\xb4\x73\x07\xb4\x19\xf2\xa8\x70"
+ "\x0f\x0f\xfb\x4d\x27\xea\x42\x48\xc3\x72\xe0\x57\xc5\xf6\x11\xcb"
+ "\x66\xa1\xff\x3e\x77\x7b\xc1\x15\x20\x8f\x5b\x29\x60\x9b\x9f\x09"
+ "\x92\x1d\x6f\x92\x7d\xbf\x28\x50\x46\x29\x2d\xd6\x57\x6c\xc6\x79"
+ "\x6c\xdc\xf3\x8d\xfb\xd8\x65\xdf\x7f\x01\xca\x57\x94\xb1\x79\xdb"
+ "\xef\x47\x01\x8e\x1c\xfb\x11\xd8\x5a\xcb\xf7\x2b\xf0\x3b\xf8\x8e"
+ "\x98\x9f\xed\x35\xc5\x3a\x6b\xd3\x7d\x28\xdc\xff\x9e\xef\x0b\x57"
+ "\xfe\x05\xde\x2f\xe8\xdb\x17\xce\xdf\x03\x2c\x7d\x7f\x37\x94\xc9"
+ "\xfc\xb3\xe0\xbd\xdb\x7d\xca\x22\xdf\x6a\x34\x80\x8d\xfe\xbc\x93"
+ "\x30\x02\xb8\x90\x30\x82\xf5\x7d\x37\xdd\x2c\xe7\xfb\x8e\x7e\xc0"
+ "\xe2\xd2\xe4\x03\x0f\xed\x6f\x6a\x14\x6c\x6e\xba\x17\xf9\xd2\x84"
+ "\xcf\x2e\x22\x5f\x76\x80\x2e\x10\xf3\xaa\x1c\xf5\x67\xf7\x8c\x9f"
+ "\x02\xf0\x82\xef\x83\xfa\xc1\x87\x2c\xae\x14\xc8\x0c\xdc\xbf\x5e"
+ "\x99\x0a\xf5\x42\xdc\x02\x46\xde\x49\xb2\xca\x4b\x53\x78\xfa\x5f"
+ "\xdb\xad\xf2\x1d\x97\x08\xca\x16\x92\xf7\x3b\xa2\x00\x3d\xa4\xc0"
+ "\x32\x69\xb0\xbe\xe2\x41\x89\x8f\x1b\x80\x77\x29\x80\x5d\xa0\xf9"
+ "\x0e\xa0\x5f\x69\x0f\x5b\xab\xa9\x28\x15\x88\x4a\x80\x7c\x66\xd9"
+ "\x0f\xac\x50\x9e\xba\x64\x0a\xb5\xe0\x3e\x6b\xa0\xe1\x3f\xba\xb3"
+ "\x7f\x50\x2f\xd1\x10\xeb\x84\xfb\xa4\xf3\x70\xef\xbf\xec\x07\x51"
+ "\x1c\x43\x3f\xd0\x4a\x6d\x76\x47\xcf\xbc\x77\x48\x70\xde\x03\x24"
+ "\x5c\x50\x0a\x1a\xea\x73\x57\x39\xce\x37\x2f\x6e\x43\x5f\x5a\xad"
+ "\x24\x72\xeb\x39\x6a\xb2\xd8\x89\x30\x41\xd0\xe0\x3a\x84\x7d\xf3"
+ "\xec\xc9\x91\xeb\x81\x5e\xa0\xef\x33\xac\x44\x6d\x4a\xb7\xf0\xf8"
+ "\x87\xe4\x2a\xb1\xaf\x03\x19\x0e\x72\x1d\x74\xaa\x22\xe3\x2a\x99"
+ "\x8a\xf4\x12\xfc\x77\x2e\x68\x91\xe9\xde\x5a\x9a\x4c\x32\x47\x26"
+ "\x47\x75\xc9\x8c\xee\x60\x5f\x80\xcc\x97\xe3\x5e\x3d\x93\x05\xec"
+ "\x93\xbc\x9d\x0b\x46\x58\xce\x21\x77\x32\x12\xdb\x2d\xe0\x3c\xb4"
+ "\xd8\xe6\x48\x6c\x73\xa7\x95\xe0\x5c\xfe\xe2\x17\xd0\x87\x73\x17"
+ "\x11\xb6\x09\x1a\x6c\x33\xd8\x3a\x55\x23\x9f\xd3\xbf\xdf\xed\xf9"
+ "\x6f\xfc\x36\x05\x7a\x0b\x9b\xef\x2a\x17\x54\x7b\xaa\xf0\xdb\x58"
+ "\x07\x3c\xfb\xb3\xb8\x8b\x30\xba\x23\xfd\x4d\x56\x3b\xa1\x13\x9c"
+ "\xeb\x60\x1b\x69\x1d\xdc\xb7\xff\x01\x12\x9c\xfb\x0e\xe7\xbb\x7d"
+ "\xb3\x48\x03\x3d\xae\x83\xed\xa9\xc2\xb8\x1f\x8b\xb1\x0e\x96\xcb"
+ "\x64\xd1\x65\xc2\xf8\x6f\xd2\xb5\x11\xbb\xcf\xec\xc9\xb8\xe7\x00"
+ "\xf9\x9f\x6e\x03\xfe\x5f\xb3\xa2\xdf\x26\x8b\x29\xf3\x3a\x41\xfb"
+ "\xc5\xd6\xa1\x93\x0f\xe4\xff\xec\xb7\x96\xa6\x8e\x94\xff\xb3\xc7"
+ "\x88\xff\xb3\x6f\x81\xf6\xff\xd0\x8b\xf6\xff\x70\x8c\xda\xff\xc3"
+ "\x5b\xa0\xfd\x21\x5e\xb4\x3f\x64\x8c\xda\x1f\xe2\xb6\xfd\x8f\x4f"
+ "\x15\x28\xdb\x8b\x12\x50\xc2\x62\xe1\x70\x7d\x35\x67\x27\xee\x3b"
+ "\x61\x67\xbd\xc4\x7b\xc2\xcf\x7e\x29\xfb\xdd\xab\xfa\xdd\xab\xfb"
+ "\xdd\x07\xf5\xbb\xd7\xf4\xbb\x0f\x96\xee\x41\x8f\xf8\x5e\x91\xcd"
+ "\x99\x04\x76\x69\xa6\x59\x36\x67\x9f\xf8\x7c\x26\xfa\x35\x03\x9d"
+ "\x3e\x73\x88\x18\x9c\x77\x5d\x92\x3d\xc0\xce\xa0\xd0\xcd\xd3\x74"
+ "\x74\x43\x26\x11\x72\x13\x93\x17\x6f\x04\xd9\x05\xfc\xa3\xbd\x9a"
+ "\x71\x60\x23\xdc\x89\xbe\xf3\x70\xdf\x81\x36\x09\xf7\x93\x3c\xe0"
+ "\x8b\xed\x7b\xc0\x60\x24\x82\xcf\x6c\xb6\x9e\x2f\xe4\x25\x26\x5b"
+ "\x7c\x66\x4f\xa3\xaf\x57\x44\xe5\xcb\x05\x65\x7e\x96\xa0\xdd\x68"
+ "\xa1\x96\x85\x57\x41\x0e\x75\xa1\x3f\x7b\xe0\x71\x32\xb5\x18\x93"
+ "\x2e\x43\x7d\x1f\x48\xac\x49\x83\xb2\xe1\x3b\xf0\x2d\x18\xc7\x25"
+ "\x2e\x31\xd9\xea\x70\x7c\x94\x5c\xdb\x59\x45\x30\xce\x91\x58\xa6"
+ "\x81\xfa\x27\x2e\xc1\x32\x07\xb5\x4f\x73\x4b\x9a\xe1\x9b\x3f\x5d"
+ "\xaa\x53\xe0\xfe\x80\xa0\x91\xf1\xf4\x81\x02\xb7\x76\x6f\x6e\x69"
+ "\x2c\x2f\x57\xe9\x4d\xb9\xad\x43\x94\x2b\xd6\x57\xed\x45\xb9\x0f"
+ "\x46\xb8\x2f\xb7\x4c\xac\xaf\xd6\x9b\x72\x8b\x86\x28\x57\xac\x6f"
+ "\x84\x37\xe5\xba\xf5\x7f\x42\x73\xcb\xc5\xfa\x66\x7a\x51\x6e\xe8"
+ "\x02\xf7\xe5\x96\x34\x7b\x87\x85\xd0\xe2\xa1\xb0\xe0\x1d\x0e\x42"
+ "\x87\x68\x7f\x69\xb3\x77\x18\x78\x68\xfe\x50\x18\xf0\x8e\xff\x0f"
+ "\x0d\xc9\x7f\xef\x78\xff\x50\xdb\x50\xbc\xf7\x8e\xef\x3f\x72\x8b"
+ "\x7f\xb4\xe5\x81\xf7\xe5\x34\xa0\x22\x42\xc8\x4f\x2c\x17\x02\x4a"
+ "\x76\x6d\x16\x22\xc8\xe3\x20\xc3\x02\x8b\xc8\xa4\x08\x36\x3e\xfe"
+ "\x51\xfd\xc6\x62\x22\x87\xf1\xae\xfc\xed\x0d\x0d\x72\x93\x2d\x1c"
+ "\x75\x8e\x7d\x77\x8a\x55\x76\x1f\xa4\x1f\x06\x9d\xd5\x09\x76\x27"
+ "\x2f\x27\xb1\x3c\x3f\x3d\x82\x88\xbe\x3c\x3a\xf1\xec\x72\x24\xc8"
+ "\x31\x53\x91\x15\xf7\xad\x4c\x82\xf7\x6c\x80\x5f\x28\xc3\x4a\xde"
+ "\x15\x2c\xb2\x88\x24\x96\xcf\xc2\xce\xec\xe5\x97\xec\xa2\x19\x3a"
+ "\xf4\xe9\x68\x69\x91\xfd\xf8\x11\x1f\x0b\x91\xa3\xef\xa5\xee\xec"
+ "\x1f\x87\x9b\x65\x61\x3a\xf1\x8c\x6a\x1b\xf3\x3d\x0a\xf5\xc5\xf3"
+ "\x9f\x98\x17\x7d\x90\x3e\x60\x20\x72\xf4\x0b\x0f\x79\x63\xd1\x1f"
+ "\xe9\x50\x67\xbd\xed\xb9\x7b\xb6\xe0\xfb\x34\x17\x74\xe8\x65\x22"
+ "\xc7\xf3\x9d\x34\x38\x9e\xe4\xc3\x18\xe2\x89\xfb\x71\xce\xa3\x9d"
+ "\xa4\x6f\xa4\x02\xce\x3f\x51\xd5\xce\x70\xdc\x1b\xc7\xf7\x8d\x87"
+ "\xb1\x73\x1f\xa2\xec\x9f\x76\x09\xee\xd9\x38\x06\xf7\xc6\xa8\x12"
+ "\x75\x34\xdf\x3f\xa2\xb6\xb3\x9d\xc5\x31\x6a\x92\x85\x31\xbf\x90"
+ "\x1d\xaa\x3d\x99\x9d\xaa\x3d\x39\x50\x2f\x9b\xd4\x06\xfc\xbe\x94"
+ "\x8e\xe3\x36\xcc\xd7\x9d\x1d\x16\x2c\x9d\xfd\x76\x13\x13\x7c\x72"
+ "\xa4\x86\x5a\xfa\xfc\x7d\xc8\xe6\x6e\x42\xda\x83\xad\x90\xda\x99"
+ "\xa1\x9b\xc1\xe7\x31\xc2\x2a\x70\x3c\x0c\xf5\x8e\xe5\x63\xd3\xc4"
+ "\x58\xe6\x1b\x18\x74\xc0\x52\x9d\x7c\x84\x76\x6b\x18\xd3\xff\xc6"
+ "\x19\xa8\x23\xe7\xc6\x43\xf9\xff\x0a\x6d\xe2\xf1\xcb\x72\x13\x53"
+ "\xd9\x99\x47\x59\x18\xee\xe3\x49\x85\x7b\x2d\xe6\x83\xe7\x6d\xe2"
+ "\xf3\x4c\xa7\xe7\x99\xb8\x57\x92\x3f\x9f\x2b\x8e\xe5\x12\xb7\x38"
+ "\x3d\xdf\x62\x98\x81\x73\x13\x73\xc3\xb0\x0d\x40\xc7\x18\xd4\x6d"
+ "\x7d\xfe\x4b\xfc\x13\x63\xc4\x7c\xc9\x6d\xb2\xb9\x8b\x3a\x00\x5b"
+ "\xf0\x3c\xcd\xe9\xfd\xb4\x23\xa9\xa1\xe4\xf1\x12\xa4\xe1\xdc\x18"
+ "\xb3\x7c\x97\x8e\x8f\x67\xc3\x12\x58\xdb\x55\x89\xd1\xce\xe5\x99"
+ "\x65\x73\x43\xa0\xcc\xe8\x4e\xb0\xa3\x20\xcf\x12\xfc\xa6\x33\xbd"
+ "\xa5\x93\x97\xda\xd8\xc4\x95\xda\x55\x6b\x5f\x5c\x83\x27\xe7\xfc"
+ "\x5c\xf6\x38\xaa\xf1\x6c\xa9\x90\xbb\x4b\x6f\x2a\xc2\xb3\x6e\x6a"
+ "\x76\x46\xbc\x10\xf7\x4d\x05\xec\x2d\xb7\xe7\xef\x0d\x15\x02\x76"
+ "\x46\x19\x37\x3c\x46\xae\xc8\xe6\x5e\xc5\xf6\x9a\xb4\x84\xe4\xbe"
+ "\x86\xfe\x45\x3e\x86\xb4\x87\x99\x4f\x54\x8c\x77\xc5\xc6\xec\x1b"
+ "\x94\xa4\x52\xdb\xce\xc6\xfd\xf0\xec\x11\x36\xc7\xd1\x45\xe4\xb6"
+ "\x2c\x25\xf9\x9f\xf4\x3a\xf9\x21\xc1\x2c\xff\x1f\xa1\x81\xed\xd3"
+ "\x3d\xa2\xa9\x22\x0f\xa6\x2a\x31\xb6\xa3\xfc\x6f\x30\x96\xc6\xe7"
+ "\xf8\x4c\x3a\x8b\x00\xef\xe7\xb1\x3d\xbb\xf7\xf2\xff\x33\x8a\xe8"
+ "\xf9\x23\x1a\xd1\x97\x86\x6c\xee\x79\xac\x2b\xfa\x19\x01\x3a\x5e"
+ "\xc0\xfa\x01\x2d\x9a\x7d\x8a\xd9\xde\x65\x15\xe4\x3f\x2e\xe4\xed"
+ "\xd2\xa3\x3c\xb0\x65\xcf\x2d\xa2\x59\xaa\x5e\x3c\x77\x57\x2c\x9e"
+ "\xc5\xeb\xce\x7e\xf8\x90\xd3\x19\x53\x55\x87\x9c\xfc\x1c\xd2\xea"
+ "\xa4\xb3\x0d\x18\x7f\xcd\x9d\x7c\xb1\x82\x8d\x77\x3d\x58\x9f\x23"
+ "\xa8\x76\x01\x2f\x76\xe9\xab\x40\x12\x07\x1a\x70\x3f\x6b\x0f\xd4"
+ "\x25\xbc\x8a\xfa\xef\x8a\x4e\xc7\x3e\x9d\xbf\x33\xea\x4f\xb8\xef"
+ "\x0f\xe8\xb8\x0f\xf7\xf9\x01\x2d\xdf\x82\xfb\x8f\x17\x54\x10\xed"
+ "\xd3\x68\x3b\xfd\xcb\xa3\xbf\x8c\xa5\xb6\xd9\x51\x46\x52\xdd\xfc"
+ "\x17\xf2\x49\x7d\x15\x51\x2d\x23\x3e\x19\x66\x6a\x67\x6d\x4c\x26"
+ "\xf2\x48\x33\xf1\x49\xef\xc2\x3e\x6d\x27\x78\x7e\xa0\xd6\x5a\x03"
+ "\xf6\x90\x21\xe1\xed\xf4\x56\x5f\xed\x62\x42\xa0\xef\xb1\x35\x66"
+ "\x76\xce\xc7\xc2\xce\x4d\xfb\xe3\x7c\xb7\xd3\xf9\x1e\x6b\x5a\x0c"
+ "\x15\x36\x5e\x26\xca\x1a\xfd\x59\x12\x19\xe3\x43\xd9\xf9\x9e\x54"
+ "\xc8\x68\x01\xde\xbf\xa4\x0b\xb0\xbf\xa4\x9b\xfc\xfa\x35\x12\x54"
+ "\x9b\x6c\x06\xdb\xac\x8a\xbc\x99\x44\x82\x68\xb7\x7e\x42\x75\xd5"
+ "\xc7\x84\xe6\x13\xf5\xbb\xe9\x46\x5f\xbb\x92\xef\xaf\x0a\xdc\x24"
+ "\xc3\xf9\xcd\x80\x5c\xdc\x67\x75\x8d\x84\xae\xb8\x90\xc9\xe6\x64"
+ "\x71\xfe\xdb\xd6\xad\xd3\xf6\x76\xeb\xee\xed\x79\x49\x37\x43\x9a"
+ "\x37\x7f\xf6\xb2\x1a\xd7\x09\xa2\x69\xf6\xfd\x99\xb8\xb7\x0f\xc7"
+ "\x01\x36\x7f\x85\x06\xe7\xc8\x11\xc3\xf0\xfd\x60\x61\x95\x8e\x80"
+ "\x85\x80\x67\x8f\x70\xde\x5e\x5d\xfa\x1c\xd6\xb5\x9d\xb0\xbd\x42"
+ "\x13\xf8\x5e\x21\x2b\xae\x59\xab\xf6\x34\x2c\x8a\xd7\x92\x9e\xe9"
+ "\xfa\x1c\x53\xea\x9f\x48\xc6\x75\x7a\x9e\xd9\xf1\xa9\x80\xdb\xec"
+ "\x87\x5b\xa9\xff\x9e\x86\xa3\xba\x53\xa8\x4f\xc2\x46\x2e\x1f\xc2"
+ "\xd9\xfa\x2f\xd2\x06\xf8\x54\xbe\xaf\x1d\xf9\xb6\x33\xea\xbf\x93"
+ "\x2c\xf2\xa7\x9a\xa9\xad\x26\xf6\x4f\xe4\x93\x86\x3a\x17\xfe\x30"
+ "\x7e\x42\x3e\xe4\x13\xf2\x08\x79\xe5\xe0\xd3\x29\xc6\xa7\x7d\x02"
+ "\xe7\x53\x8f\xaa\xa4\x5c\xe2\x95\xb5\x58\x5f\xe4\x09\xbf\xaa\x9b"
+ "\x07\xe7\x17\xd0\xb9\x8f\x5f\x6f\xb4\x93\x20\x53\x1b\xd8\xcb\xc0"
+ "\xaf\xa7\x7e\x45\xc8\x53\x6f\x51\xa1\x66\xc1\x89\x3e\xbe\xd9\x72"
+ "\xdc\xf0\xed\xa2\x83\x6f\xc0\xff\x21\xf8\x36\x5b\x31\x12\xbe\x55"
+ "\x37\x73\xbe\xd9\xc4\x3d\x5e\xba\x4a\x22\xb7\xbe\xa4\x93\x17\x5d"
+ "\x23\xe1\xc8\xbf\x85\x17\xb4\xe4\xe8\x92\x1a\xe0\xd9\x5f\x5c\xf8"
+ "\x27\xe4\xed\x49\x05\x1e\x14\x20\x0f\xbd\xeb\x77\xf3\x22\x3c\xef"
+ "\x77\x3f\x7d\xff\x76\xbf\x1b\xab\x7e\xf7\xd3\x98\xd1\xf5\xbb\x79"
+ "\xaa\xdb\xfd\xee\xdb\xee\x77\xf3\x94\xfd\xfb\x5d\x9f\xdd\x90\x14"
+ "\x97\xb8\x32\x7e\x0d\x1e\x4f\x7c\x6e\x7d\x72\xdc\x3a\x6e\x3d\xb8"
+ "\xd8\x0f\x1a\x7b\x7a\x84\x1c\xfd\xde\x55\x17\xd5\x91\x77\xa7\xd5"
+ "\xc9\xed\x5f\x69\x14\x34\x77\x5a\x8c\x90\x1b\xdc\x8a\xfe\x4b\xb1"
+ "\x7f\x16\xa2\x5f\x0f\xd9\x63\x07\x6a\x83\x79\xac\x50\xfc\x9f\xd9"
+ "\x4e\xc1\xf1\x1a\x5c\xaf\xd9\xbc\x81\x28\x36\xe3\x19\x6d\x2b\xce"
+ "\x8b\xb0\xe7\xd3\xd1\x9f\x23\x2d\x89\xd7\xa0\x5f\x9e\x4e\x55\xa2"
+ "\x76\x0b\x94\x65\xf1\xdf\xa5\x57\x68\xf1\xcc\xc5\xcf\xd2\x40\xdf"
+ "\xef\xef\xf3\xf5\x24\x7b\xd4\x4c\xc7\x3d\x52\x87\x72\x01\xcf\xc8"
+ "\x5d\x91\xfd\xec\xcf\xd7\x71\xad\x03\xec\xe9\xa5\xf7\xc3\x77\xa6"
+ "\xeb\x8b\x98\xdf\x05\x90\x11\xfc\x79\x04\xf3\xff\x7e\x3d\x77\x27"
+ "\xc6\xdb\xe9\xec\x50\xed\x2d\xef\xc8\xdd\x1b\xfa\x71\x5a\x91\x28"
+ "\x23\x7e\x76\xf6\xa9\x22\x2e\x23\x6a\x34\x80\xc1\x85\x80\xc1\xe8"
+ "\xe1\x64\x84\x13\xf6\x66\x8c\x4c\x46\x20\xd6\x10\x73\x88\xb7\x89"
+ "\x80\x37\xc4\xa0\x84\xb9\x57\x45\xcc\x05\x36\x12\x35\xc3\x9d\x8d"
+ "\xe3\x0e\xcf\x3d\xd7\xa4\x3a\x30\x67\xef\x8f\xb9\x6b\xfd\x30\x27"
+ "\x17\x31\xf7\x92\x2b\xe6\x9e\x39\xab\x26\x6f\x72\x59\xe1\xc0\x5c"
+ "\x9e\x42\x23\xe1\x0d\xb1\x87\x38\x13\x7e\xab\x23\x35\x6d\xed\x7d"
+ "\xd8\x2b\x5d\xcd\xd7\x5b\xd9\x7e\x5e\x39\xdd\x7f\xfd\x25\x51\x56"
+ "\x5c\x96\x64\xc5\x1b\x6e\x74\xf4\x59\x2f\x65\x45\x04\x9b\xff\x46"
+ "\x5e\xf5\x00\xdf\x90\x5f\x4f\x69\x40\x46\x68\x76\x91\x4f\x96\xdc"
+ "\x22\xfc\x49\x1a\x1b\xfe\xa0\x3f\x5e\xa8\xcb\x20\x3c\xd2\xa9\x86"
+ "\xe3\x11\xf2\x07\xf9\xc4\xf8\x03\x7c\x92\xd6\xc4\x71\x8d\x14\x79"
+ "\x85\xfc\x79\x20\x8d\xc8\x91\x5f\xa5\x29\x5c\x3e\xa0\x1c\x60\x7b"
+ "\xb0\xfb\xc9\x77\xa0\x79\x18\xf2\x8c\x8d\xab\xb3\xfc\x0f\x16\xe2"
+ "\x19\xe2\xc9\x92\x0d\x0d\x36\xf7\x00\x1b\xfa\xb1\xa0\x3e\xdf\x9c"
+ "\xb2\x9f\xe5\xf0\xf1\xd1\x2e\xf1\x1c\xf1\xe3\x71\x62\x9f\x27\x38"
+ "\x56\x65\xe3\x52\x3b\x8c\x4b\x55\x30\x2e\xcd\x85\x71\x69\x6a\xab"
+ "\xe8\x3f\xe1\xb1\x95\x44\x3c\xcf\x4c\xfd\x77\x86\xc3\x98\x08\xe3"
+ "\x12\xf2\x35\x5e\xff\x3d\x99\xb8\x26\x45\xf3\x60\xcc\xbb\x4b\x4e"
+ "\xe0\x3e\xe7\xa8\xce\x3e\x42\x1c\x3d\x26\xee\x4d\xaa\x5f\x66\xd8"
+ "\x80\xfb\x1b\x1e\x8f\xe2\xf5\xfb\x19\x8b\x5d\xc1\xd6\xff\xe4\x42"
+ "\xb9\x7d\xb3\xeb\xfa\x9f\xf3\xfa\xf0\xbb\xe9\x16\x71\xed\xef\x71"
+ "\xb6\xf6\x87\x32\x04\xe5\xde\xdb\x30\x86\x71\xac\xff\x9d\xc0\xe7"
+ "\x3f\x71\x5d\xff\x7b\x9c\xe9\x3b\xb3\xec\xf1\x58\xdc\xf3\x02\xf7"
+ "\xe2\x7a\xda\xcf\xc2\x9d\xd3\x1d\xeb\xeb\x3c\x5d\x90\xb3\xd8\x2f"
+ "\x38\x3f\xd0\xc6\xe7\x05\x1e\x4f\x93\xc6\xdf\x6e\xec\xa5\x11\xc8"
+ "\xe5\x05\x31\x0e\xb9\xbc\x20\x86\xd1\x46\x53\xb1\xa0\x66\x80\x5c"
+ "\xfe\x0c\x9e\xff\xe2\xd8\x62\x94\xcb\xb9\x3b\x23\x78\xfd\xe6\x4f"
+ "\x00\x9a\xf8\x60\x0c\x4f\x4c\xc7\xf3\x46\x28\xa3\x4b\x98\xcc\xae"
+ "\x08\xdf\xc2\xd6\xf8\xe7\xeb\x5c\x65\xf5\x2f\x72\x5d\x65\xf5\xfc"
+ "\x67\x87\x96\xd5\xff\x36\x75\x68\x59\x3d\x7f\xdb\x6d\x59\x3d\xd6"
+ "\xb2\x5a\xb2\xeb\xbc\x95\xd5\x4f\x34\xdf\x96\xd5\x37\x5b\x56\x3f"
+ "\x61\x76\x92\xd5\x7f\x74\x95\xd5\xbf\xd8\x37\x50\x56\xff\xc2\xe8"
+ "\x90\xd5\xf3\xc3\x5c\x65\xf5\x93\x93\x3c\x93\xd5\x0b\xfc\x6f\xac"
+ "\xac\x5e\x10\xe2\x2a\xab\x17\xd8\x44\x5d\x72\x7c\xe4\xb2\x7a\xc1"
+ "\xd9\xa1\x65\xf5\x82\x0b\xae\xb2\x7a\xc1\x41\x2e\x93\x9f\x54\x73"
+ "\x59\xbd\xa0\x5a\x94\xe1\x75\xce\xe9\x0e\x59\xcd\xd3\x07\xca\xea"
+ "\x27\x75\xc3\xc8\x6a\x9d\x5d\x90\x64\x75\x03\xc8\xea\x06\xb9\xf0"
+ "\x5b\x77\xb2\x7a\x71\x6c\x0d\xca\xea\x24\x94\xd5\x8b\x63\x87\x96"
+ "\xd5\x8b\x6a\x50\x26\x33\xbf\x9e\xaf\xd1\x66\xe6\x57\xf1\x35\xda"
+ "\x8a\x38\x5d\x9c\x06\xe9\x90\x86\xfe\x27\x31\x1f\xe7\xbd\x24\xd3"
+ "\x9f\x3c\xdb\x27\xd3\x21\x9f\x30\xd5\x21\xd3\x51\x9e\xa3\x5c\x2f"
+ "\x79\x8d\x9a\x4b\x5f\xa3\x8d\xdd\xd9\x4f\x29\x24\xd9\x9e\x07\x69"
+ "\x18\xab\x09\x7d\x1f\xe1\xfe\x48\xa0\x41\xf3\x66\xf8\x1e\xe6\x87"
+ "\x7c\x21\xae\x3a\x60\x51\x81\xab\x0e\x78\x6a\xe5\xd0\x3a\x60\xe1"
+ "\xf4\xa1\x75\xc0\x53\x79\xb7\x75\xc0\xad\xa6\x03\x7e\xd9\x7a\x5b"
+ "\x07\x0c\xaf\x03\x06\xe3\x51\x7f\x1d\x30\x47\xd4\x01\x25\xc3\xea"
+ "\x80\x5f\x36\xbb\xd7\x01\x8b\xf6\x0f\xd4\x01\x8b\x2a\x1d\x3a\xe0"
+ "\xa9\x70\x57\x1d\x10\x79\x87\x67\x3a\x60\xf1\xa4\x1b\xab\x03\x16"
+ "\x87\xba\xea\x80\x48\x71\x0d\xe0\xc9\x8d\xce\x3a\x40\xf0\xf1\x44"
+ "\x07\x2c\x3e\x2f\xe9\x00\x94\xb1\x6f\xe3\x7a\x43\x9f\x0e\x40\x59"
+ "\xb8\xf8\xa2\x31\xa5\xc9\x49\x07\x2c\x3e\xc4\x65\x7d\x64\x90\x9d"
+ "\xe9\x80\xc5\x3c\x36\xb2\xec\xc9\x34\xe7\x74\x87\x0e\xe0\xe9\x76"
+ "\x67\x1d\xd0\x8a\x3a\x20\x32\x64\x18\x1d\x10\xea\xb9\x0e\x58\x72"
+ "\xc8\xa1\x03\x96\x1c\x92\x74\x00\xca\x7d\xd4\x01\x28\xb3\x51\x0f"
+ "\x30\xdf\x60\x6c\x4f\xc8\x92\x59\x81\x16\xa2\x44\x9f\xc4\x38\xa7"
+ "\x82\xb2\x1b\xfd\x1f\xa1\x2e\x60\x79\xd6\xf0\x3c\x20\xcf\x9b\x41"
+ "\x86\xb7\x82\x0c\x6f\xcd\xbb\x42\x14\x90\xaf\x21\x1f\xf7\x17\xc2"
+ "\x3d\xca\xfa\xc0\x36\xd0\x1b\x36\xa6\x37\x1a\x50\xdf\x70\x7a\x2d"
+ "\x99\xe5\xaa\x3b\xa2\xa6\x0e\x36\x1e\x28\x70\xd2\x1d\xa5\x53\x68"
+ "\x7d\x77\x76\xd4\x3c\x49\x1f\xe4\xc3\x3d\xea\x8c\x82\x76\xa6\x33"
+ "\xcc\xa0\x33\x9a\xb9\xce\x88\x8a\xe9\xcb\x03\x75\x60\x79\xb8\x5e"
+ "\x69\x80\x3c\x8d\x62\x9e\x2d\xae\x7a\xe5\xd7\xad\xae\x7a\x25\xea"
+ "\x7d\xd4\x2b\xe8\x27\x97\xc5\xb8\xcf\xdb\x15\x6d\x2f\xd1\x17\xa1"
+ "\x8e\xe1\xcf\x9f\x7e\xb1\x4f\xaf\x4c\x71\xd2\x2b\xa9\x92\x5e\x89"
+ "\xba\x70\xcb\xeb\x15\xc0\x72\x4d\xda\x3f\x93\x5e\x79\x3a\xe2\x56"
+ "\xd0\x2b\xc8\x9b\x89\x4e\x73\xc3\xee\xf4\x0a\xfa\x95\xa8\x49\xf8"
+ "\xae\xeb\x95\xa7\xe7\xb9\xd7\x2b\x4b\x94\x03\xf5\xca\x92\x60\x87"
+ "\x5e\x89\x2a\x70\xd5\x2b\x4b\x13\x3d\xd3\x2b\x4b\xe2\xfb\xeb\x15"
+ "\xa4\x65\x3e\xdf\x5f\xd1\x86\xfa\xc4\x9e\xb7\x27\x53\x40\xdd\xe2"
+ "\x95\x5e\x59\x92\xe3\xaa\x57\x96\x46\x8b\x7a\x6f\xd3\xc8\xf5\xca"
+ "\x52\x36\x77\x94\x2f\xe9\x95\x6b\xfd\xf5\xca\xd2\x47\x5d\xf5\xca"
+ "\xd2\x20\xae\x3f\x96\x26\x70\xbd\xb2\x54\xc7\xd3\x23\x33\x9d\xd3"
+ "\x1d\x7a\x85\xa7\x0f\xd4\x2b\x4b\xb7\x0c\xa3\x57\x54\xbd\xc5\xfa"
+ "\xa2\x9e\xdc\xbd\x99\xb6\xdd\xeb\x43\x43\x96\xdd\x6d\xef\xdf\x37"
+ "\x78\x9f\xb0\x13\xec\x23\x7d\x6b\x5c\xff\x1f\x21\xbd\xaa\x12\xdc"
+ "\x4b\xcc\xfa\x46\x4f\xb0\x3e\xa7\x25\x01\xfa\x47\x9b\xfb\xfe\x01"
+ "\x7d\x43\x29\xf5\x8d\x1a\xfd\x05\x02\xfd\x45\x8e\x6b\x5c\x6f\x40"
+ "\xbf\x30\x75\x36\x30\x39\xa6\x6a\xd6\x12\xf4\x27\xe9\xdf\x46\xd4"
+ "\xfe\x32\xd9\xb8\x5f\xfe\x06\xfa\x1f\xf4\x91\x27\xee\xa7\xc2\xec"
+ "\x46\x2d\xf1\xd7\x93\x00\xec\x27\xef\x88\x6b\x28\xe8\x7f\x02\xd7"
+ "\x4e\x00\x9f\xa1\x2b\x8e\xf3\xfe\xf1\x06\x5c\x3d\xbc\x7f\xcc\xe8"
+ "\xe9\xd6\xdd\xeb\x6e\xed\xc4\x94\x6a\x66\x6b\x27\x78\x3e\x08\xcf"
+ "\x65\x09\xd0\x3f\x28\xae\x9d\x58\x79\x9f\x80\xfa\xaa\xcb\xd8\xda"
+ "\x49\x93\xcb\xda\xc9\x0f\x1b\x89\x1c\x7d\x53\xbc\xe9\xbc\x76\xa2"
+ "\xab\x19\xd0\x27\xb0\xaf\x60\x9f\x18\xb9\xfc\xfa\x77\x32\xd4\xfe"
+ "\x25\x1b\xd0\xda\xae\xda\x9b\x49\xdf\xa8\x30\xfc\x77\x93\x55\x86"
+ "\x7e\x3c\xed\xc0\x3b\x01\xe4\x14\x55\xf5\x93\x53\xbd\x22\x1f\x7a"
+ "\x39\x1f\x80\x87\xca\xe5\x9d\x84\xae\xb0\x81\xad\xd5\x2b\xfa\xf2"
+ "\xb4\x9a\x01\x87\xba\xc9\x25\x1b\x90\xee\x1a\x52\x22\xfa\xf3\x14"
+ "\x5e\xd6\x4f\x10\xf2\x71\xff\x87\x9c\xbc\x7d\xcd\xca\xd6\x1a\x73"
+ "\x7b\x48\x08\xc8\x25\x7f\x94\x4b\x80\x5d\xbf\xb2\x1e\xa0\xfb\x79"
+ "\x4e\x77\xf4\xb1\x86\xbf\xb6\x97\x75\x5a\x28\xfb\xde\xde\x5e\x90"
+ "\x4b\x56\x4e\xfb\xe5\x2f\xa8\x09\xf3\x01\x8a\xeb\x8d\x3d\x18\x13"
+ "\xa3\x81\xc9\xa5\xc5\x9d\x81\x14\x63\x85\x08\x5f\xe9\xd0\xdf\x54"
+ "\xf0\x83\x9d\x40\xfb\x5e\x1d\x62\x43\x5d\xda\x82\xeb\x8d\x9f\xb9"
+ "\xac\x37\x5a\x5e\x76\xac\x37\xd6\x56\x9c\xe2\xfb\x43\x5c\x74\xc7"
+ "\xd2\xa2\xde\x12\x7d\x0e\xd2\x9d\xe9\x8e\xe4\x91\xd2\x3e\x3a\xed"
+ "\xdb\xa3\xbd\xfa\x3b\x4e\xfb\x7f\x5f\x30\x3a\xda\xff\x66\x80\xaf"
+ "\xd4\x9b\x47\x7b\xe5\x77\x9c\xf6\xd1\x95\xa3\xa3\xfd\x33\xc9\x43"
+ "\xd1\x1e\xc7\x1e\xd2\xb8\x43\x1a\x73\xa0\x1e\xe3\x7a\x78\xb9\xd2"
+ "\x31\xde\x58\xae\x94\xd6\x6d\x81\x66\x8a\x3c\x71\xbe\xc9\xb0\x9a"
+ "\xdc\x7d\x49\xf6\xec\x46\x69\xcd\x16\xed\x7d\xc6\xc7\x37\x80\x8f"
+ "\x6b\xf0\x7c\x8f\xc8\x43\xd0\x39\x2b\x3a\x41\x2f\x4c\xd7\x17\xd9"
+ "\xf3\x40\x27\xfd\x71\x7d\xa8\x1b\x7e\xca\x51\x9f\xf8\x27\x13\xf5"
+ "\x72\x83\x83\xaf\xc2\xcb\xc0\xcf\x1e\xb0\xb3\xac\xad\x04\xcf\xec"
+ "\x06\xb6\x02\x1f\x7b\xf5\x13\x96\x81\x3d\x2f\xf1\xf4\x9d\x14\x2b"
+ "\xb3\xb1\x06\xe5\xe9\xeb\xae\x3c\xed\x18\x84\xa7\xcf\xc6\x43\x3f"
+ "\x95\x8b\x76\x30\xe3\xa9\xb9\x8f\xa7\x4c\x8f\xbc\xac\x0b\x46\xbe"
+ "\x4a\x3c\x45\x3d\xc2\x78\xda\xc6\xf5\x48\x9f\x7f\xa3\x97\x1d\x76"
+ "\x70\x75\xcc\xd9\x41\x78\xfa\x1f\x11\x2e\x3c\x8d\x19\x29\x4f\x9f"
+ "\x5d\xe0\x6a\x57\x2d\x7f\xcf\x33\xbb\xea\xd9\xa3\x68\x3b\x39\xdb"
+ "\x55\x78\xdf\x01\x63\x75\xbb\xff\x9e\x2d\x9d\x5e\xd9\x52\xcf\xd6"
+ "\xbb\xda\x52\xcb\xcb\x79\x9d\x9e\xb9\x3a\x72\x5b\x6a\x39\xb3\xbf"
+ "\xde\x7e\x83\x8f\x81\x5d\xed\xa8\xe5\xdb\x5c\xed\xa8\xe5\xcb\xb8"
+ "\xbd\xb4\xfc\x40\x47\x16\xda\x51\xcb\x0d\x3c\xfd\x19\x8b\x73\xba"
+ "\xc3\x8e\xe2\xe9\x1d\xe8\xf3\x2d\x7b\xb9\x71\x64\xb6\xd3\x9d\xdf"
+ "\xb2\xed\xa4\x19\xc2\x76\xd2\xfc\x93\xd8\x4e\x31\xf3\x6e\xeb\x6f"
+ "\x6f\x75\xc8\xf2\xfa\xd1\xe9\x90\x95\x6e\xfd\xbf\xdc\xd6\xdf\xc3"
+ "\xd1\x3e\x66\xcb\xe8\x68\xbf\x2a\xcc\x7b\xfd\x1d\x57\xe5\xd0\xdf"
+ "\x71\x55\xee\xf5\x77\xdc\x23\xb7\xf5\xf7\x48\xf4\xf7\x73\x64\x74"
+ "\xfa\x3b\x4e\xe9\xaa\xbf\x57\xbf\xe8\x99\xfe\x8e\xdb\x3a\xf6\xfa"
+ "\x3b\xae\xd0\x55\x7f\xaf\x16\xfd\x3d\xac\xfa\xf3\xc8\xf5\xf7\xea"
+ "\x47\xdd\xeb\xef\xd5\x4f\xba\xea\xef\xd5\x3c\x06\xa8\x6c\x75\x32"
+ "\xd7\xdf\xab\x43\x79\xfa\xaa\xfd\xce\xe9\x0e\xfd\xcd\xd3\xb9\xfe"
+ "\x5e\x9d\x39\x32\xfd\x1d\xf8\x2d\xeb\x6f\xf5\x10\xfa\x5b\xfd\x4f"
+ "\xa2\xbf\x7f\x3b\x54\x0c\xc1\xdb\x3a\x64\x48\x1d\xb2\xba\x70\x74"
+ "\x3a\x24\xde\x6d\xfc\xb3\xe1\x75\x48\x82\xca\xa1\x43\x12\x54\xee"
+ "\x75\xc8\xf3\x9b\x6e\xeb\x90\x91\xe8\x10\xfd\xfc\xd1\xe9\x90\xe7"
+ "\x17\xba\xea\x90\x84\xf7\x3d\xd3\x21\xcf\x1f\x1b\x7b\x1d\xf2\x7c"
+ "\x83\xab\x0e\x49\xd8\xcd\xeb\x14\xdf\x35\x72\x1d\x92\xb0\xd5\xbd"
+ "\x0e\x49\xc8\x73\xd5\x21\x09\x31\x5c\x57\x24\x1c\xe4\x3a\x24\x21"
+ "\x99\xa7\xc7\x77\x3a\xa7\x3b\x74\x08\x4f\xe7\x3a\x24\xa1\x72\x64"
+ "\x3a\x64\xfc\xb7\xac\x43\x94\x43\xe8\x10\xe5\x3f\x89\x0e\x59\x33"
+ "\xe4\xf9\xdf\xa1\xe5\x98\xa1\xde\x21\xc7\x0c\xf5\xee\xe5\x98\xe1"
+ "\xc9\xdb\x72\x6c\x24\x72\x2c\xa1\x61\x74\x72\xcc\x10\xe4\x2a\xc7"
+ "\x5e\xd8\xe4\x99\x1c\x33\xfc\x7e\xec\xe5\x98\xa1\xdc\x55\x8e\xbd"
+ "\x90\xc0\xeb\xb4\xe6\xc3\x91\xcb\xb1\x17\x16\xb9\x97\x63\x2f\x2c"
+ "\x75\x95\x63\x2f\xe8\xb8\xbc\x7a\x21\x93\xcb\xb1\x17\xe6\xf1\xf4"
+ "\x35\x87\x9c\xd3\x1d\x72\x8c\xa7\x73\x39\xf6\x42\xee\x70\x72\x0c"
+ "\xfb\x45\x8d\xa6\x5f\xbf\x78\x5e\xea\x17\xeb\x6c\x9f\x14\x4b\xfd"
+ "\x62\x1d\xb3\xd1\x84\xe2\x78\xcd\x2b\x29\x44\x91\x8b\xf1\x5a\x40"
+ "\x46\x18\xfe\x03\xfb\xc5\xba\x17\x70\x7f\x89\xaa\x11\xe4\x5e\xb3"
+ "\x28\x07\x53\x41\x0e\x36\xc3\x3d\xfa\x32\x9b\x1e\xaf\x41\xf9\x85"
+ "\xfb\x34\xf0\x9e\xcb\x43\x8b\x2f\xc6\x8b\x61\xeb\xec\x4e\xfd\x86"
+ "\xf5\x95\x0e\xb1\xaf\x74\xf0\xbe\x22\x9d\x97\x4b\x6b\xa6\x82\x7d"
+ "\x9d\x6e\x72\x64\xac\x0f\xc5\xfe\xc3\xce\x61\x41\xff\xa1\xeb\x74"
+ "\x01\xc5\x49\xd0\x67\x2c\xad\x04\xfd\xd5\x63\x9f\xf1\xdf\x24\x0b"
+ "\xa0\x1d\xfa\x09\x20\x13\xb9\xec\x13\xaa\x7c\x6d\xe8\x7b\x6a\x1d"
+ "\xc8\xbe\x76\x90\x7d\xed\x8e\xbe\x82\x6b\xe7\x1d\xeb\x74\xda\xce"
+ "\x75\xba\x19\xbd\x1d\x20\xfb\x2c\xfd\xfb\x89\x4e\x55\xd6\x8e\xb2"
+ "\xaf\x95\xf5\x13\x26\xfb\xa0\x6f\x08\x1d\x20\xfb\x7e\x2b\xca\xbe"
+ "\x0e\x1d\xca\x7a\x75\xd9\x6a\x90\x7d\x31\x97\xb8\xec\x13\x6d\xb8"
+ "\xfb\x50\xf6\xad\xd3\xc9\x5f\x6d\x17\x65\xdf\x4a\x94\x7d\x47\xa1"
+ "\x8f\x7c\xe0\x2a\xfb\xfc\xbd\x95\x7d\xeb\xe6\xb9\xf6\x93\xe4\xb7"
+ "\x3c\xeb\x27\xeb\xde\x77\xd7\x4f\x7a\xf3\xbc\xed\x27\xeb\xaa\x5c"
+ "\xfb\x49\x72\xa1\xd8\x77\x4f\x8d\xbc\x9f\x24\xbf\xd8\xd7\x4f\x9e"
+ "\xef\xdf\x4f\x92\x37\xba\xf6\x93\xe4\x28\xde\x1f\x92\x2b\x78\x3f"
+ "\x49\x8e\x15\xfb\x4f\xbd\x73\xba\xa3\x9f\xf0\x74\xde\x4f\x92\x0f"
+ "\xdc\x5e\x2f\xff\xae\xe9\xfb\x94\xd0\xdb\xeb\xe5\xde\x8e\x19\x93"
+ "\xab\x46\x37\x66\x7c\x69\xdf\xed\xf9\x76\x6f\x69\x9f\x92\x3a\x3a"
+ "\xda\xaf\xd7\xdd\x9e\x2b\xf1\x96\xf6\x2f\x75\x8e\x8e\xf6\x1b\x76"
+ "\x0f\x37\xc6\x70\x6f\x4b\x6d\x8c\xaa\xee\x1b\x63\x6c\x8c\x92\xf6"
+ "\xe7\x0e\x1c\x63\xa4\x1d\x75\x3d\x4b\xf7\xf2\xd2\xfe\x7b\x67\x87"
+ "\x1b\x7b\xd8\x6e\x8f\x3d\x80\xd7\xeb\x0d\xa3\x1b\x7b\xa4\xf5\xdb"
+ "\x9f\xb8\xd1\xee\x99\x4d\xb5\xd1\xdf\x9d\x4d\x65\xf3\x7a\xec\xb1"
+ "\x31\xd8\xd5\xa6\xda\x28\xfa\x89\x7d\xf9\x9e\x91\xdb\x54\x1b\x8f"
+ "\xb9\xb7\xa9\x36\x1e\x77\xb5\xa9\x36\xee\xe6\xb6\xd3\x46\x1b\xb7"
+ "\xa9\x36\x1e\xe4\xe9\x2f\x6b\x9d\xd3\x1d\x36\x15\x4f\xe7\x36\x55"
+ "\xba\xf2\xf6\x3a\xfa\x77\xcd\xa6\xca\xd8\x72\x5b\xaf\x7b\xab\x5b"
+ "\xd2\x83\x47\xa7\x5b\x36\x7d\x8b\xfb\x3f\xbf\xeb\x7a\x3d\xa3\x7a"
+ "\x74\xb4\xcf\x1a\x72\xff\xe7\xd0\x7a\x7d\xab\xce\xa1\xd7\xb7\xea"
+ "\xdc\xeb\xf5\x2d\x25\xae\x7a\x7d\xf3\x9c\xdb\x7a\xdd\x1b\xbd\xbe"
+ "\x69\xc1\xe8\xf4\xfa\x16\xbd\xab\x5e\xdf\x7a\xca\x33\xbd\xbe\xe5"
+ "\xc2\xd8\xeb\xf5\x2d\x9d\xae\x7a\x7d\xab\x91\xd7\x29\xeb\xfa\xc8"
+ "\xf5\xfa\xd6\x9d\xee\xf5\xfa\xd6\xb7\x5c\xf5\xfa\x56\xf1\x9c\xda"
+ "\xd6\x7a\xae\xd7\xb7\x16\xf0\xf4\x2c\xab\x73\xba\x43\xaf\xf3\x74"
+ "\xae\xd7\xb7\x9a\x6f\xaf\xaf\x7f\xd7\xf4\xfa\xff\x59\x76\x5b\xb7"
+ "\x78\xab\x5b\xb6\x8e\x72\xcc\x98\xd3\xe0\xbd\x6e\x79\x65\x8b\x43"
+ "\xb7\xbc\xb2\xc5\xbd\x6e\xd9\x7e\xdd\x55\xb7\x6c\xdb\x76\x5b\xb7"
+ "\x78\xa3\x5b\xfe\xcf\xee\xd1\xe9\x96\xed\x95\xae\xba\x25\xf7\x21"
+ "\xcf\x74\xcb\x2b\x8f\x8e\xbd\x6e\x79\x25\xca\x55\xb7\xe4\x06\x8b"
+ "\xd8\x58\x3a\x72\xdd\xf2\x8a\xdd\xbd\x6e\xc9\xf5\x75\xd5\x2d\xaf"
+ "\x34\x70\x1d\x92\x1b\xca\x75\xcb\x2b\x6d\x3c\x7d\xdb\x12\xe7\x74"
+ "\x87\x6e\xe1\xe9\x5c\xb7\xe4\xce\xbb\xbd\xee\xfe\x5d\xd3\x2d\x79"
+ "\x43\xee\xff\x1d\x5a\xbe\x15\xc4\x3a\xe4\x5b\x41\xac\x7b\xf9\xb6"
+ "\xe3\x8c\xab\x7c\xcb\x8f\xbf\x2d\xdf\xbc\x91\x6f\xb9\x51\xa3\x93"
+ "\x6f\x3b\x76\xbb\xca\xb7\xdf\x7b\xe8\x0f\xa8\xe0\x9e\xb1\x97\x6f"
+ "\x05\xfd\xfc\x3f\x14\x88\x3e\x80\xf2\xe7\x8e\x5c\xbe\x15\x9c\x75"
+ "\x2f\xdf\x0a\x2e\xb8\xca\xb7\x02\xd1\xff\xcf\xef\xd5\x5c\xbe\x15"
+ "\x88\xfe\x7f\xf2\xc3\x9c\xd3\x1d\xf2\x8d\xa7\x73\xf9\xf6\xfb\xe0"
+ "\xd1\xad\xc7\xbf\xba\xdb\xb1\x1e\xff\x2a\xe3\x85\x50\x54\xb1\x60"
+ "\xe0\x7a\xfc\xab\x53\x71\x3d\xde\xd1\x5f\x7e\x5f\xc2\xd6\xe6\xb1"
+ "\xcf\x74\x72\xff\x3d\x83\xae\xd3\x4f\xad\x58\x70\x7b\x9d\xfe\x46"
+ "\xae\xd3\xff\x67\xb3\x6b\xff\x29\xfc\x95\x67\xfd\xe7\xd5\x95\x63"
+ "\xbf\x4e\xff\xaa\xc1\xb5\xff\x14\xce\x13\xb1\x12\x37\xf2\xfe\x53"
+ "\x38\xdd\x7d\xff\x29\x9c\xe5\xda\x7f\x5e\x15\xc7\x98\x85\x51\xbc"
+ "\xff\x14\xaa\x78\xfa\xef\x63\x9d\xd3\x1d\xfd\x87\xa7\xf3\xfe\x53"
+ "\xb8\xcc\x13\xfb\xc0\xa6\xda\xbb\x05\xf5\x7d\x48\xe3\xdd\xf6\x3e"
+ "\x9c\x27\x8b\x38\x1f\xcc\x3e\x78\x8e\xeb\x0b\x66\x1b\xec\x5e\x1f"
+ "\x36\xac\x7d\xd0\x2c\xda\x07\xb1\x03\xed\x03\xc9\x36\x28\x06\x7c"
+ "\xbf\xe1\xd1\x1a\xbd\x88\x77\xb4\x0d\xae\x8d\xd4\x36\xf8\xa1\xc3"
+ "\x36\xc8\xeb\x67\x1b\xfc\xb6\x9f\x6d\xc0\xf0\xde\xe4\x82\xf7\x01"
+ "\xb6\x41\x1f\xde\xc7\xca\x36\xf8\x43\xfd\xed\x35\x7a\x6f\xc7\x9d"
+ "\x85\x86\xd1\x8d\x3b\xff\x2b\xea\xf6\x5c\xbe\xb7\xb4\x7f\x6d\x94"
+ "\x73\xf9\x45\xd5\xb7\xe7\x5b\xbc\xa5\xfd\x7f\x8d\xd2\x97\xc3\x1b"
+ "\x6e\xe3\x3f\x0d\x6f\x5f\x95\x04\x39\xc6\x23\x25\x41\x92\x7d\x25"
+ "\xf9\x46\x04\xf9\xac\xc8\x4b\x82\xeb\x1a\x21\xaf\x24\xb1\x38\x03"
+ "\x4a\x53\xf3\x29\x62\x48\x47\x9b\xab\x78\x5b\x64\xaa\xb3\xcd\xf5"
+ "\xa6\xbf\x64\x6f\x45\xa2\x2d\x06\xb6\x15\xda\x55\xd2\x18\x04\xfd"
+ "\x5a\x0d\xb9\x7f\x78\xd6\xfa\x30\x1c\xb3\xf4\xfa\xef\xdd\xf2\xcf"
+ "\x3b\x5e\x79\x3d\x68\x74\xe3\x95\xe2\x25\xae\xf6\x56\xc9\x61\xcf"
+ "\xec\xad\xe2\xe3\x63\x3f\x5e\x29\x36\xbb\xda\x5b\x25\xfb\x78\x9d"
+ "\xde\x38\x3a\x72\x7b\xab\x24\xcf\xbd\xbd\x55\xf2\x07\x57\x7b\xab"
+ "\x44\xcf\xed\xaa\x12\x23\xb7\xb7\x4a\xd2\x78\xfa\x1b\x95\xce\xe9"
+ "\x0e\x7b\x8b\xa7\x73\x7b\xab\xa4\xda\x43\x7b\x2b\x67\x14\xf6\x56"
+ "\xf8\x77\xc7\xde\x0a\xb9\xc5\xed\xad\x32\xb7\xf1\xdf\x9c\xf4\xce"
+ "\x96\x7e\x7a\x27\xec\xb6\xde\x41\x59\x53\x62\x1e\x9d\xde\x29\x37"
+ "\x0e\x4b\xfb\x5c\x27\xda\xa3\xcc\x17\xe9\x6e\x9f\xb9\x3e\xcc\x6b"
+ "\xda\x83\xac\x2f\x49\xff\x2e\xd3\xbd\x2c\x77\x74\x74\xdf\xe5\x36"
+ "\xfe\xf1\x6d\x5b\x6b\x38\xda\xef\x54\x8e\x8e\xf6\xff\xf7\x80\xf7"
+ "\xb6\xd6\x9e\xf2\x4f\xfa\x6c\xad\x3d\xe5\xfd\x6d\x2d\xb4\xad\x16"
+ "\x59\xb9\xcd\xf5\x0a\xd8\x4a\xdb\xd7\x80\xdd\x95\x42\x88\xa9\xf9"
+ "\x43\x92\x0b\xb6\xd7\xf6\x2b\x60\x7f\x25\x80\xfd\x65\xfb\xa3\x68"
+ "\x7f\xed\xb9\xc3\xd5\xfe\xda\x9d\x37\xa8\xfd\xe5\xef\xb0\xbf\x6c"
+ "\x60\x5b\xf5\xfe\x71\x7d\x58\xc1\x15\x27\x5b\xec\x77\x03\x6d\xb1"
+ "\x9e\xbc\xbd\x39\x3d\xb3\xd6\x87\xf7\x82\x3d\x36\x94\x2d\xc6\x30"
+ "\x31\x88\x3d\xf6\xff\x86\x2d\xb6\x2b\x73\x74\xb6\xd8\x1f\xcd\xae"
+ "\xb6\xd8\xde\x45\x9e\xd9\x62\x7b\x9e\x75\x3b\xf7\xe5\xb5\x2d\xb6"
+ "\x27\xc1\xd5\x16\xdb\x1b\x2e\x62\xe6\xa1\x91\xdb\x62\x7b\xa7\xba"
+ "\xb7\xc5\xf6\xde\xe3\x6a\x8b\xed\x11\xcf\x9e\xee\x5d\xc8\x6d\xb1"
+ "\xbd\x62\xfa\xee\x50\xe7\x74\x87\x2d\xc6\xd3\xb9\x2d\xb6\x37\xda"
+ "\xc3\xb5\xb1\x2d\x36\xd0\xe9\xdf\xfe\x7e\xca\xa1\xd6\xc6\xc6\x6a"
+ "\x3f\xe5\x0f\x6f\xf1\xb5\xb1\x8a\xe1\xe7\xbf\x6e\xdb\x04\x83\xc8"
+ "\x9a\xbd\x09\xa3\xd3\x4b\x7f\x5a\x78\xdb\x26\xf0\x96\xf6\x6f\x8d"
+ "\x72\xee\xeb\xbf\xab\xbc\xb7\x09\xde\x29\x74\xcc\xbf\xbc\x53\x38"
+ "\xb2\xf9\x97\x77\x26\xb8\xea\xff\x7d\x83\xeb\xff\xdb\xf3\x2f\x23"
+ "\xd0\xf9\x7f\x2a\x1c\x9d\xce\x7f\xbb\xde\x55\xe7\xbf\xfb\xa8\x67"
+ "\x3a\xff\x9d\x5f\x8d\xfd\xfc\xcb\x3b\x31\xae\x3a\xff\xdd\x10\x11"
+ "\x27\x4f\x8c\x5c\xe7\xbf\xeb\xef\x5e\xe7\xbf\x7b\x87\xab\xce\x7f"
+ "\xa7\x95\xeb\xf6\x77\x23\xb8\xce\x7f\xc7\xc6\xd3\xf7\xcd\x77\x4e"
+ "\x77\xe8\x7c\x9e\xce\x75\xfe\xbb\x0b\x47\xb6\xde\x15\x78\x8b\xae"
+ "\x77\xa9\xff\x49\xd6\xbb\xf6\x57\xde\xd6\x3b\xde\xea\x9d\x77\x63"
+ "\x46\xa7\x77\xfe\x12\xe1\xbd\xde\x79\x4f\xe5\xd0\x3b\xef\xa9\x46"
+ "\xa6\x77\x0e\x6c\x72\xd5\x3b\xff\xe3\x7b\x5b\xef\x8c\x56\xef\xfc"
+ "\x59\x35\x3a\xbd\x73\xa0\x9f\xff\xa3\xf7\x3c\xf4\x7f\x74\xc0\xad"
+ "\xff\x23\xef\xf5\xce\x81\x7e\xfe\x8f\xde\x13\xfd\x1f\xfd\xc5\x0b"
+ "\xbf\x21\xef\x6d\x75\xaf\x77\xde\xeb\xe7\xff\xe8\xbd\x18\xae\x5f"
+ "\xde\x13\xfd\x1f\xbd\x27\xfa\x3f\xfa\xcb\x21\xe7\x74\x87\xde\xf9"
+ "\x8b\x93\xdf\x90\xf7\x6e\xfb\x3f\xfa\xce\xed\xc3\xfc\xdf\x51\xc8"
+ "\xbf\xf7\xdb\x1c\xf2\xef\xfd\x36\xf7\xfb\x30\xdf\x5f\xe9\xba\x0f"
+ "\xf3\x7f\xaf\xde\xde\x87\xe9\x8d\x7c\x7b\x6f\x94\x7e\x91\xde\x0f"
+ "\x71\x95\x6f\x1f\xbc\xee\x99\x7c\x7b\xff\xad\xb1\x97\x6f\xef\x1f"
+ "\x74\x95\x6f\x1f\x6c\x11\xb1\xe1\x85\x7c\xfb\x20\xce\xbd\x7c\xfb"
+ "\x20\xd1\x55\xbe\x7d\x10\xc1\xe5\xd8\x07\x45\x5c\xbe\x7d\xb0\x84"
+ "\xa7\xff\xef\x21\xe7\x74\x87\x7c\xfb\x5f\x27\xf9\xf6\xc1\xee\x91"
+ "\xad\x6b\x7a\x65\x57\xdf\x84\x75\xcd\xb1\xb2\xab\x6f\xf5\x75\xcd"
+ "\x43\xc1\xb7\xe7\xd1\xbc\xb1\xa9\x3f\x38\x38\x3a\x9b\xfa\xc3\x42"
+ "\xef\x75\x8a\x31\xd5\xa1\x53\x8c\xa9\xee\xd6\x77\xb6\x03\xee\x72"
+ "\xc1\x26\xde\x76\x85\x28\x5e\xc1\xf5\x9d\xfa\x1a\x92\x87\xeb\x3b"
+ "\x6b\xa4\xf5\x9d\x12\xd1\xce\xfe\xdb\x65\x57\x3b\xfb\xaf\x89\x83"
+ "\xd9\xd9\x68\x5f\xdb\xc1\x76\xb6\xf5\x5f\xd7\xf9\x8f\xc1\x75\x51"
+ "\x8f\xff\xde\x9c\xeb\x7f\x5c\x1f\x3e\x52\x5d\xf4\xe6\x06\xae\x8b"
+ "\xde\xf8\xce\xeb\xa2\x43\xb1\xa3\xd3\x45\x7f\x3b\xe8\xaa\x8b\x0e"
+ "\xcf\xf2\x4c\x17\x19\xe7\x8e\xbd\x2e\x32\xce\x77\xd5\x45\x87\xd5"
+ "\x22\x56\x26\x8d\x5c\x17\x19\xaf\xba\xd7\x45\xc6\xeb\xae\xba\xc8"
+ "\x58\xcd\x75\xce\xe1\x99\x5c\x17\x19\xcd\x3c\xfd\xaf\x6a\xe7\x74"
+ "\x87\x2e\xe2\xe9\x5c\x17\x1d\x0e\x1d\xd9\x1c\xcf\xf8\x5b\x74\x8e"
+ "\x47\xf9\x4f\x32\xc7\xf3\xf7\x0a\xef\x65\xe2\xd1\x84\xea\xbe\xf3"
+ "\x1b\x47\x13\x06\xcc\x33\xa4\x80\xbd\xdd\xce\xd7\xb9\xfb\xe6\x19"
+ "\xcc\x67\x45\xf9\x57\x79\xde\x55\xfe\x1d\x71\x2b\xff\x86\x5a\xcb"
+ "\xc6\x79\x05\x3b\xc8\x46\x5b\xc9\x28\xd6\xb2\x53\xbe\xeb\x32\xef"
+ "\xf0\x28\xfd\x2b\x57\xee\x73\x95\x79\xff\x98\xea\x99\xcc\x3b\x7a"
+ "\xbf\x5b\x99\xe7\xf5\x39\x8e\xa3\xe1\xae\x32\xef\x1f\x0a\x11\x1f"
+ "\xb3\x46\x2e\xf3\x8e\x5e\x70\x2f\xf3\x8e\x5e\x76\x95\x79\x47\x8d"
+ "\x5c\xb6\xfd\x43\xc3\x65\xde\xd1\x7a\x9e\x7e\x64\xa6\x73\xba\x43"
+ "\xe6\xf1\x74\x2e\xf3\xfe\x31\x73\x28\x99\x47\x73\x13\x73\x0a\xe4"
+ "\xc2\x7e\xb8\x0e\x42\x1d\xa7\x02\x36\x8c\xf0\x7f\x15\xf0\x78\x12"
+ "\xfc\x5f\xe7\xae\xff\x59\xfc\x13\x73\x84\x2c\xa8\xb3\x9c\xc8\x4c"
+ "\x96\x6f\x8c\xc6\x69\x36\xe4\x8d\x78\x66\x2d\x31\x27\xd0\x36\x7e"
+ "\x81\x40\xf5\x04\xf8\x92\xc3\x62\x63\x42\x7e\x3c\x1f\xa4\x4d\x21"
+ "\x01\x57\x64\xff\xa8\x94\xf2\x41\x7d\x03\x9a\x64\xff\xd8\x84\x65"
+ "\x40\x5d\xeb\xa0\x2d\xa1\x6e\xeb\x0a\x65\x45\xbe\x35\x83\x6c\xb4"
+ "\xd1\xaf\x8c\x6b\xda\x49\xb3\xec\xa3\xa9\x81\x6d\xe3\x17\xd0\x8c"
+ "\x68\x82\xb6\xdc\xfe\x69\x16\x05\x96\x89\xf1\x74\x9b\x65\xff\xb0"
+ "\xe1\x33\x3b\xd4\x31\x3d\x91\xc8\xf3\xdb\xc7\x2b\x41\x4e\xf8\x66"
+ "\x74\xd2\xd6\xb5\x36\xa8\x33\x60\xf3\x6f\x33\x1a\x14\xef\xbe\xd1"
+ "\x80\x73\x88\x1a\x8c\x4d\x8a\x65\x80\x3d\x0b\xf5\xf9\x68\x7a\x29"
+ "\xe4\x1f\xac\x0e\x5b\xdf\x21\x21\xbe\xf7\x53\xf3\xc8\x70\xf3\x91"
+ "\xc1\x1d\x1d\x03\x37\xcd\x20\xc6\xd9\x40\x3b\x2d\x91\x0f\xf6\x7c"
+ "\x84\xdf\x19\xea\xfc\xbb\x12\x63\x1b\x67\xbc\x4e\xe4\x3b\x84\xf1"
+ "\xca\x23\x69\x2c\xfe\xb0\xa5\x3b\xbb\x6a\xbe\x59\x16\xc2\x62\x87"
+ "\x62\x5c\x4b\x8c\xff\x0e\xb8\x21\x90\xbe\xec\x30\x58\x92\xfd\x79"
+ "\x91\x14\x9b\xb8\x52\x9b\x1c\x9f\x18\xb7\xf6\xc5\x64\xed\xac\x58"
+ "\x3f\xb2\x64\xed\x5a\x6d\xe2\xca\x35\xeb\xb5\xce\x4f\x7e\xaa\x8d"
+ "\x8d\x5f\xb7\xf2\xb9\x84\xb8\x39\x89\xab\x0c\x7e\x50\x27\xe2\x54"
+ "\x8f\x20\xac\x8b\x90\x5d\xa5\x2f\xfd\x4f\x42\x5e\x9d\x4c\x14\x58"
+ "\x2f\xf8\x5e\xb5\x14\xc3\x14\x63\x78\xca\x21\x4f\x06\xc8\xc7\x1d"
+ "\xe9\xe3\x21\xef\x47\x0d\x65\x50\xaf\x52\xa8\x37\xd4\x11\xeb\x6c"
+ "\x95\xea\x2c\x61\x22\x03\x31\x91\xde\x0e\x18\x3c\x36\x35\xd0\x3a"
+ "\xfe\x17\x94\x46\x63\xfb\x3a\xa1\x9f\xc8\x20\x2d\x9e\xe9\xb2\xbc"
+ "\xc4\x9c\xee\xec\x63\x61\x12\xc6\xf0\x5d\x9a\x9f\x18\xd5\x8d\xfd"
+ "\x84\xea\x7f\xc6\xfb\xd4\xc7\xaa\xa5\x3a\x19\xe1\x31\x54\x8f\xc5"
+ "\x38\x62\xa8\x7e\xcc\xe6\xaa\xa1\x1e\x6d\x90\x0e\x1a\x53\x60\x31"
+ "\x8f\x31\xf6\x2f\xc6\x42\xc5\x3a\x43\xbb\x40\x97\x52\x23\xcd\x12"
+ "\xb1\x9f\x73\x28\x5c\xc8\x39\x63\x36\x29\xae\x91\x48\x1b\xed\xa5"
+ "\xdb\x0e\x85\xd7\x76\x76\x92\xc0\x4d\x86\x55\x74\x5c\xd5\xfa\x40"
+ "\x5b\x7c\x1c\xc6\x70\x15\xb6\x9d\x31\xd3\x6d\x27\x73\x97\xde\x4f"
+ "\xd4\x50\x76\xbd\x53\x2c\x57\xc5\xc8\xf8\x7f\x8c\xf1\x1f\xf9\x88"
+ "\x31\x5a\x39\x1f\x3f\x9e\x79\x38\x79\x20\x1f\xfb\xf0\xf7\x96\x40"
+ "\x8e\x02\x16\xa8\xaa\xa4\x2e\xd2\xce\xe9\x88\x7d\xb7\x23\x43\x4f"
+ "\x1e\x64\xb4\xfb\xb8\x51\xc8\x2f\xd9\x2f\xe4\x96\xb4\xd2\xdc\x92"
+ "\x7a\xa0\x99\x3e\x3f\x85\x68\x57\xd8\xd5\x24\xef\x1a\x09\xb5\xe4"
+ "\x95\xd4\xf9\xcb\x32\x65\x60\x8f\xc8\x41\x9f\x84\x82\xcc\x08\x15"
+ "\xfb\xbb\x1e\xe9\xf8\x51\x1b\x21\x8b\xd7\x11\xf2\xd5\x3c\xe2\x53"
+ "\x0a\xef\x8d\xac\x3d\x1f\x33\xfd\x4f\xb3\x3f\x8e\x29\x83\x77\x31"
+ "\x46\xef\x08\xdf\x6f\x75\xdb\xef\xfa\xda\x5d\x1a\x35\x78\xbb\x3f"
+ "\xa9\x17\xf2\x4b\x43\x85\xdc\x52\x3d\xcd\x2d\x5d\x32\xb0\xdd\xa5"
+ "\x51\xbc\xdd\xbe\xed\x63\xdf\xee\x4f\xca\x79\xbb\x3f\x89\xf6\xae"
+ "\xdd\x9f\x98\x3d\x68\xb7\x1b\x7e\x57\x57\x43\xbb\x81\xdf\xa5\xc0"
+ "\xef\xd2\x41\xf8\x5d\x2a\xf2\x7b\x62\xd3\xd8\xb7\xbb\xba\x88\xb7"
+ "\xbb\x3a\xca\xbb\x76\x57\xbb\x95\x7f\x8e\x76\x97\xb9\xe1\x77\x4d"
+ "\xa5\x90\x5f\x06\xfc\x2e\x03\x7e\x97\x0d\xc2\xef\x32\x91\xdf\x93"
+ "\x4e\x8c\x7d\xbb\x6b\xb8\xff\xc3\xec\x9a\x05\xde\xb5\xbb\xc6\xad"
+ "\x9e\x76\x6a\xb7\x1b\x7e\xd7\x1e\x82\x76\x03\xbf\xcb\x80\xdf\x65"
+ "\x83\xf0\xbb\x4c\xe4\xf7\xc3\xdb\xc7\xbe\xdd\xb5\x3c\xfe\x73\x76"
+ "\x6d\x84\x77\xed\xae\x75\xbb\xff\xc5\xd1\xee\x72\x37\xfc\x36\x1d"
+ "\x10\xf2\xcb\x81\xdf\xe5\xc0\xef\xf2\x41\xf8\x5d\x2e\xf2\xfb\x99"
+ "\xc7\xc6\xbe\xdd\xa6\x4c\xde\x6e\x53\xb8\x77\xed\x36\xb9\xdd\xff"
+ "\xee\x24\xcf\x1b\x40\x66\x0f\xe0\xb9\x29\x35\x9c\x3c\x70\x0d\xdb"
+ "\x7f\x7c\x26\xf5\x2f\x69\x98\xb8\x29\x53\x66\x53\x95\x34\x4e\x84"
+ "\xb1\xdc\x9b\x59\x82\x3e\xd0\x4c\x26\x40\x5b\xf5\x34\x7f\x97\x01"
+ "\x7f\x05\x28\xc7\x06\xb2\xdf\xae\x2a\xa9\xef\xc9\x4d\xd4\xbf\xb2"
+ "\x9a\x68\x33\x2c\x44\x5d\x9b\x6e\x26\xe9\x06\x6a\xa9\x25\xe7\x89"
+ "\xbf\x99\xc8\x71\xbe\xec\x93\xb6\x83\x64\x4d\x12\xa5\x50\xb6\x3f"
+ "\x8e\x31\xf3\x5b\x48\x28\xd8\xc4\x99\x14\xf4\x47\x81\x40\xb4\x50"
+ "\x7e\x28\xd2\x12\xca\x4e\x0a\x5c\x42\x64\x7f\x7d\xce\x4a\x90\x9e"
+ "\x48\x5b\x18\x8f\x86\x32\xba\x76\x12\xf2\xcb\x67\x38\x5d\xdf\x5c"
+ "\x3d\x52\xba\xd6\xf1\xf5\xbf\xdc\x12\x8b\xc9\xdc\x43\xc0\xb6\x54"
+ "\xe3\x99\x7b\x48\x2f\xac\x35\xb4\xc3\x58\xa4\x0e\xc6\x01\x25\x66"
+ "\x01\x74\xd6\xc8\xca\x3d\xee\xd6\xff\xb5\x93\x3c\x8d\x06\x99\x39"
+ "\x00\x6b\x0e\x7a\x9f\x28\xa4\xfe\xa5\xd1\x9c\xde\xa5\xcb\x26\x36"
+ "\xfa\xb6\x0f\x4e\xef\xd2\x68\x1b\xe8\x1c\xbb\xaa\x74\x89\xe7\xf4"
+ "\x3e\xb1\xd1\x95\xde\xa5\xa1\x37\x87\xde\x27\xc4\xf8\xa7\xa5\x06"
+ "\x57\x7a\x9f\x50\x70\x7a\x1f\xaf\xa0\x79\xa5\x31\x02\xe8\xca\x11"
+ "\x96\x5b\xee\x01\xbd\x01\xdf\x03\x75\x98\x83\xde\xf5\x0a\xa0\xb7"
+ "\x88\xef\x52\xc0\xf7\xc4\x26\x37\xf4\x06\x7c\x97\x02\xbe\x4b\x47"
+ "\x80\xef\x93\x97\xfb\xd1\xfb\x26\xe1\xfb\xa4\x38\xff\x57\xda\x0f"
+ "\xdf\x27\x93\x39\xbd\x4f\x6a\x80\xde\x80\xef\xd2\x11\xe2\xbb\x5e"
+ "\xed\x81\xfe\x00\x7c\x0f\xd4\x9d\x0e\x7a\x9f\x4a\xa6\xfe\x65\x22"
+ "\xbe\xcb\x00\xdf\x93\x4e\x0c\x4e\xef\x32\xc0\x77\x19\xe0\xbb\x6c"
+ "\x04\xf8\x3e\xf5\xac\x2b\xbd\xcb\x6e\x12\xbe\x4f\x71\x1f\x93\xb9"
+ "\x65\xfd\xf0\x5d\xdf\xcc\xe9\x5d\x9f\x43\xf3\xca\x00\xdf\x65\x23"
+ "\xc4\xf7\xa9\x4c\x0f\xe8\x0d\xf8\x1e\xa8\xb3\x1d\xf4\xfe\xb4\x19"
+ "\xe8\x2d\xe2\xbb\x0c\xf0\xfd\xf0\x76\x37\xf4\x06\x7c\x97\x01\xbe"
+ "\xcb\x46\x80\xef\x4f\x6b\xfa\xd1\xfb\x26\xe1\xfb\xd3\x22\x91\xde"
+ "\xfd\xf0\xfd\xe9\x12\x4e\xef\x53\x56\xa0\x37\xe0\xbb\x6c\x84\xf8"
+ "\xfe\xd4\xe2\x81\x9d\x00\xf8\x1e\x68\x2b\x38\xe8\xdd\xb0\x84\xfa"
+ "\x97\x8b\xf8\x2e\x07\x7c\x3f\xf3\xd8\xe0\xf4\x2e\x07\x7c\x97\x03"
+ "\xbe\xcb\x47\x80\xef\x86\x47\x5c\xe9\x5d\x7e\x93\xf0\xdd\x20\xc6"
+ "\xbf\x2c\xef\x87\xef\xd3\x95\x9c\xde\xa7\xf5\x34\xaf\x1c\xf0\x5d"
+ "\x3e\x42\x7c\x37\xc4\x78\x63\x9f\xac\x2b\x21\x4a\x57\x9a\x9f\xa9"
+ "\xba\x71\x36\xca\x99\x3f\x7f\x3b\x36\xca\x99\xb4\xc1\x6d\x94\x33"
+ "\xe1\x9c\xe6\x0d\x8d\xde\xd9\x28\x67\xdc\x9e\x7f\x18\xca\x46\x19"
+ "\x48\xf3\xcf\xe7\xdd\x38\x3b\xe5\xf3\x59\xdf\x8e\x9d\xf2\x99\x65"
+ "\x70\x3b\xe5\xb3\x7d\x9c\xe6\x9f\x45\x79\x67\xa7\x7c\xee\xd6\xff"
+ "\xc1\x50\x76\xca\x40\x9a\x37\xee\xbf\x71\xb6\x4a\xe3\xeb\xdf\x8e"
+ "\xad\xd2\x18\x3b\xb8\xad\xd2\xa8\xe5\x34\xff\xbc\xd2\x3b\x5b\xa5"
+ "\xf1\x90\x37\xb6\xca\x40\x9a\x7f\x31\xf3\xc6\xd9\x2b\x5f\xf8\x7f"
+ "\x3b\xf6\xca\xd9\x86\xc1\xed\x95\xb3\xe2\xf8\xe7\x6c\xb8\x77\xf6"
+ "\xca\x17\x1e\x8c\x7f\x06\xda\x2b\x03\x69\x7e\xae\xe8\xc6\xd9\x2c"
+ "\xe7\x36\x7d\x3b\x36\xcb\xb9\x85\x83\xdb\x2c\xe7\x94\x9c\xe6\x5f"
+ "\xec\xf3\xce\x66\x39\xe7\x36\xfe\xc9\x50\x36\xcb\x40\x9a\x9f\x57"
+ "\xdd\x38\xbb\xc5\xdc\xf5\xed\xd8\x2d\x66\xe3\xe0\x76\x8b\x39\x8d"
+ "\xd3\xdc\xac\xf5\xce\x6e\x39\xaf\xf1\xc6\x6e\x41\x5a\x23\xcd\xd1"
+ "\x56\xe1\x34\xff\xb2\x91\x06\x94\xec\xef\x05\x7b\xc4\x1f\xe8\xee"
+ "\xdf\x46\xe4\x25\x48\xf3\x06\x4e\x73\x7b\xc0\x2e\x03\xd0\x47\x8f"
+ "\x34\x63\xed\xf8\x5a\x13\x60\xcf\x2d\x69\xa4\x72\x02\x6d\x51\x12"
+ "\xe0\xd9\x45\x5b\x16\x09\xd0\xa6\x6f\x82\xff\xbf\xac\xc1\x3c\xda"
+ "\xf4\xec\xb3\xd0\x46\x1f\x5c\xa3\xb0\xe5\x25\xaa\xed\xfe\x3b\x0b"
+ "\xe0\xd9\xfd\x74\x7a\xbc\xba\x17\x6c\x09\xfa\xbc\x26\xc8\xd4\xb6"
+ "\x9f\x98\x6c\x1f\x93\xda\x86\x0f\x88\x10\xb0\x2b\xe9\x41\x1b\xd1"
+ "\xd1\xaf\x75\x41\xd5\xc9\x66\x62\x5f\xa5\x51\x99\x52\xab\x00\x17"
+ "\x7f\x21\x91\xad\xf4\x1a\xfd\x52\xa7\xea\xf5\xdf\x53\x67\xf7\xdf"
+ "\x15\x65\xcf\xdb\x5b\x64\xf3\xdf\x63\x7c\x3b\xc5\x2c\x57\x59\x89"
+ "\x2e\xa1\x99\xd2\xfc\xe7\x88\x22\xbf\x89\x28\x77\x3c\x47\x54\x3b"
+ "\x9a\x88\xba\xba\xb9\x81\xd4\x5c\xaa\x22\x35\xed\x67\x48\xcd\x35"
+ "\xb8\x7a\xe0\x12\xe0\xca\x3c\x43\xaa\xdb\x08\x59\x74\x99\x90\x8c"
+ "\x66\x6a\xf9\x61\x23\x09\xaa\xb6\x35\x10\xed\x72\x42\xae\xc8\x9a"
+ "\x3e\x54\xc5\x90\x20\xfa\xa5\x86\xd0\x55\x1a\x39\x3c\x53\x60\xba"
+ "\xc9\x66\x21\xd5\xcd\x56\x7c\x5e\x0c\xcf\x15\x19\xcd\x50\xbe\x50"
+ "\x85\xbe\x0c\x2d\xd5\x99\xc7\xa0\x7d\xd3\x91\xce\xad\x92\x4d\x96"
+ "\xdf\x43\x42\x77\x00\x9b\x11\x33\x91\x94\x63\xa6\xac\x67\xa4\x98"
+ "\x69\xe2\xfe\xdf\x9f\xd7\x4c\x06\x7a\x4f\x13\x9e\x8f\x56\x2f\x3e"
+ "\x73\x8e\xe2\x7e\x30\x5c\x9f\xa9\xed\xfc\x98\xe0\x9a\x75\xe4\x7a"
+ "\x42\x16\xda\x09\x41\x9a\xe0\x5a\xf2\x62\x03\x09\xc4\x7d\x6a\xc2"
+ "\xd7\xba\xc9\xa6\x66\x0b\xd9\x68\x83\xba\x5e\xb1\xf6\xd5\xb5\x76"
+ "\x4b\x2d\x81\x67\xd3\x6a\xf5\x66\xa2\x32\x10\x35\xd2\x19\x6c\xd1"
+ "\x86\xc5\xad\x64\xc2\x9a\x4e\x4a\x91\xc6\x48\x5b\xa4\x33\x96\x27"
+ "\xd1\xde\x14\x6b\x21\x19\x56\xa2\x36\xa5\xc3\x6f\x2a\xb5\x98\xc8"
+ "\x55\x02\x75\xac\xa3\xfe\xd3\x09\xe0\x23\x19\x31\x01\x78\x34\x03"
+ "\x0e\x26\xd3\xec\xf3\x85\xa5\xd0\x5e\x5c\xdb\x1f\x59\x9b\xbf\xf4"
+ "\x64\xfd\x63\x80\x4d\xe8\xc0\x73\x69\x34\xc7\x73\xcb\x3e\x1a\x50"
+ "\x1a\xda\x0b\xb6\x1e\xc7\xb3\x6f\xfb\xf0\x78\x2e\x5d\xe6\xc0\x73"
+ "\xf3\xfb\x0e\x3c\xb7\x94\xb8\xc7\xf3\x85\xeb\x1c\xcf\xa5\x86\x5b"
+ "\x13\xcf\x17\xf2\x86\xc6\xf3\x85\x04\xf7\x78\x2e\xd5\x4b\xf6\xee"
+ "\xd8\xe0\xf9\x42\xe5\xcd\xc3\x73\x69\xb4\x77\x78\xbe\x50\xee\x8a"
+ "\xe7\xe6\xfd\x1c\xcf\xcd\xb1\xde\xe1\xb9\xc5\xad\xff\xe3\xa1\xec"
+ "\x6d\x27\x3c\x8b\xf2\xf9\x62\x1a\xe0\x19\xe4\x73\xa9\x28\x9f\x27"
+ "\x36\x79\x80\x67\x27\xf9\xfc\xd5\x36\x07\x9e\x2f\x26\xba\xc7\x73"
+ "\xeb\x31\x11\xcf\xb7\xa8\x7c\x6e\x7d\x76\x68\x3c\xb7\xce\x1b\x02"
+ "\xcf\xad\xd2\x58\x62\x6c\xf0\xdc\x5a\x78\x13\xf1\xec\xa5\x7c\x6e"
+ "\x35\xb8\xe2\xf9\xab\x4c\x8e\xe7\xaf\xc2\xbc\xc3\xf3\xc5\x1c\x6f"
+ "\xc6\x32\x0e\x3c\x97\x89\xf2\xb9\x6d\x21\x0d\x28\x03\xf9\x5c\x26"
+ "\xca\xe7\x49\x27\x86\xc7\x73\x99\x93\x7c\xbe\xf4\x1b\x07\x9e\xdb"
+ "\x1e\x71\x8f\xe7\xaf\x5f\xe7\x78\x2e\xbb\x45\xe5\xf3\xd7\x73\x86"
+ "\xc6\xf3\xd7\x2a\xf7\x78\x2e\xd3\x4b\xe3\xb4\xb1\xc1\xf3\xd7\xb1"
+ "\x37\x0f\xcf\x65\x5e\xca\xe7\xaf\x23\x5c\xf1\x7c\x29\x8a\xe3\xf9"
+ "\x92\xc2\x3b\x3c\xb7\x45\x7b\x33\x4e\x74\xc2\xb3\x28\x9f\xbf\x09"
+ "\x06\x3c\x83\x7c\x2e\x13\xe5\xf3\xc3\xdb\x3d\xc0\xb3\x93\x7c\xbe"
+ "\x7c\xbf\x03\xcf\xdf\xf8\xbb\xc7\xf3\x95\x78\x11\xcf\xb7\xa8\x7c"
+ "\xbe\x6c\x1f\x1a\xcf\x97\x1b\x87\xc0\x73\xab\x34\x06\x1e\x1b\x3c"
+ "\x5f\x09\xbb\x89\x78\xf6\x52\x3e\x5f\x51\xbb\xe2\xf9\xb2\x96\xe3"
+ "\xb9\xad\xde\x3b\x3c\x7f\xe3\x36\xfe\xeb\x50\x63\x70\x07\x9e\xcb"
+ "\x45\xf9\x7c\xb5\x8d\x06\x94\x83\x7c\x2e\x17\xe5\xf3\x33\x8f\x0d"
+ "\x8f\xe7\x72\x27\xf9\xfc\xcd\x75\x07\x9e\xaf\x9e\x75\x8f\xe7\xab"
+ "\x3f\xe1\x78\x2e\xbf\x45\xe5\xb3\xa5\x66\x68\x3c\x5b\xf6\xb9\xc7"
+ "\x73\xb9\x5e\x9a\x5f\x18\x1b\x3c\x5f\x55\xdc\x3c\x3c\x97\x7b\x29"
+ "\x9f\x2d\x66\x57\x3c\x7f\x63\xe1\x78\xfe\x66\xb7\x77\x78\xbe\x6a"
+ "\x1d\x9b\xf9\x8d\xce\x36\x9c\xdf\xe8\xc1\xf9\x0d\xc7\xde\x3f\x7d"
+ "\x60\x1d\xc7\x73\x2f\xe0\xf9\x4d\x67\x3c\x7f\xde\x7f\x7e\xa3\xfd"
+ "\x98\xd0\x87\xe7\xce\x01\x78\x16\x00\xcf\xbd\x0c\xcf\x1d\x5d\xd2"
+ "\xfc\x86\xa9\xad\x1c\x70\x72\x89\x98\xa2\x00\xcb\xf9\x22\x96\x3f"
+ "\x07\x2c\x03\x0d\x05\xa0\x71\x75\x63\x03\x89\xb4\x70\x5a\xf6\x00"
+ "\x8d\x05\x67\x1c\xf7\xb4\xca\x11\xbf\x88\x5b\x09\xc3\x35\x6b\x00"
+ "\xbb\x49\xc7\x49\x4d\x0a\x5c\x1b\xe0\x4a\x87\x8b\x1c\x27\xd5\x30"
+ "\x62\x5e\x14\xef\x8c\xdd\x3a\x11\xbb\x1d\xdb\x86\xc6\x6e\x87\xfe"
+ "\xe6\xcd\x65\x74\xf0\xf9\xaf\xcf\xa3\xd5\x91\xbf\x3a\x47\x4d\xa9"
+ "\x0d\x22\x3e\x2f\x91\x48\x1b\x09\xa4\xcf\xe8\x26\xab\xa2\x89\xfa"
+ "\x65\x3b\x91\xe7\x3d\x47\xd4\x79\x9f\x41\xbb\xa5\xfe\xdb\x44\x54"
+ "\x1f\x5b\x3f\x20\xd5\xed\x0d\xa4\xfa\xda\x31\x52\x2d\xc0\x75\x09"
+ "\x2e\xa8\x6b\x64\x9c\x73\xbb\x2d\x62\xbb\x3b\x37\x41\x59\x33\xdd"
+ "\xb7\xbb\x33\x86\xb5\x3b\x16\xda\xdd\xe3\x68\xb7\x09\xfa\x01\xf0"
+ "\x67\x9a\x20\xce\x87\x44\x5a\xc8\x84\xb5\x36\x4a\x7b\x44\xfc\x23"
+ "\x7f\x3e\xae\xb7\x92\x48\x03\xf0\x6c\x15\xe0\xbf\xb9\x82\x64\xa4"
+ "\x01\xfe\x7b\xac\x88\x3b\x8b\x29\xf3\x3a\xe0\xbf\xa3\x98\x02\xfd"
+ "\x7a\x11\xff\x9f\x23\xfe\xdb\x8d\x02\xc3\x7f\x7b\xb2\x77\xf8\xef"
+ "\xf4\x00\xff\x9e\xcc\x87\x74\xb7\xe1\x7c\x48\x0f\xce\x87\x38\xf6"
+ "\x80\x0e\x83\x7f\xe7\xf9\x90\x2e\x27\xfc\x77\x0f\x81\xff\x6b\x5d"
+ "\xd2\x7c\xc8\xb7\x8f\xff\x6b\xc3\xe0\xff\xda\x10\xf8\x1f\xeb\xb9"
+ "\x8f\x6b\x37\x11\xff\xdd\xc3\xe0\xbf\xdb\x03\xfc\x97\x46\x7b\x87"
+ "\xff\x6b\xfd\xf0\xdf\x25\xe2\xbf\xcb\x4b\xfc\x77\x7b\x82\x7f\x0f"
+ "\xe6\x4f\x7a\x10\xff\x20\xff\x4b\xeb\x9d\xf6\x02\x0f\x87\x7f\x27"
+ "\xf9\x6f\x75\xc2\x7f\xcf\x10\xf8\xbf\x2e\xe1\xff\x16\x90\xff\xd7"
+ "\x87\xc1\xff\xf5\xa1\xf0\x3f\xc6\x73\x25\xd7\x6f\x22\xfe\x7b\x86"
+ "\xc1\x7f\x8f\x27\xf8\xf7\x52\xfe\x5f\xef\x87\x7f\xab\x88\x7f\xab"
+ "\x97\xf8\xef\xf1\x00\xff\x9e\xcc\xb7\xd8\xdb\x70\xbe\xa5\x07\xe7"
+ "\x5b\x1c\x7b\xc2\x87\xc1\xbf\xf3\x7c\x4b\xaf\x13\xfe\xed\x43\xe0"
+ "\xdf\xd6\x25\xcd\xb7\x7c\xfb\xf8\xb7\x0d\x83\x7f\xdb\x10\xf8\x1f"
+ "\xeb\xb9\x15\xdb\x4d\xc4\xbf\x7d\x18\xfc\xdb\x3d\xc0\x7f\x99\x97"
+ "\xf2\xdf\xd6\x0f\xff\xbd\x22\xfe\x7b\xbd\xc4\xbf\xdd\x13\xfc\x0f"
+ "\x3f\x3f\x23\x27\x88\x7f\x90\xff\x65\xf5\x4e\x67\x03\x86\xc3\xbf"
+ "\x93\xfc\x17\x1c\xf8\x97\x93\x21\xf0\x4f\x25\xfc\xdf\x02\xf2\x9f"
+ "\x0e\x83\x7f\x3a\x14\xfe\xc7\x78\x2e\x86\xde\x3c\xfc\xcb\xc9\xd0"
+ "\xf8\x97\x13\x4f\xf0\xef\xa5\xfc\xa7\xfd\xf0\x2f\x88\xf8\x17\xbc"
+ "\xc3\xbf\x9c\x78\x80\x7f\x0f\xe6\x73\xe4\x3e\x6c\x3e\xa7\x07\xe7"
+ "\x73\x1c\x67\x44\x86\xc1\xbf\xd3\x7c\x8e\x5c\xe6\x84\x7f\x1f\xf7"
+ "\xf8\x97\xcb\xbb\xa4\xf9\x9c\x6f\x1d\xff\x72\xf9\xd0\xf8\x97\xcb"
+ "\x87\xc0\xff\x18\xcf\xdd\xc8\xe5\x37\x11\xff\x3e\xc3\xe0\xdf\xc7"
+ "\x03\xfc\x97\x7b\x27\xff\xe5\x72\x57\xfc\xcb\x65\x1c\xff\xdb\x65"
+ "\x5e\xe2\xdf\x67\x6c\xe6\x7f\xe4\xbe\x85\x38\xff\x23\xa8\x4a\xea"
+ "\x7b\x8b\xe3\xd5\x42\xee\x9e\xba\x40\x99\x96\xd8\x54\x3b\x0b\x4c"
+ "\xc9\x9d\x64\x71\x17\xf0\xc4\xd0\x45\x96\x77\xa9\x31\x96\xa5\x91"
+ "\xc2\xf8\xdf\xe5\x8c\x28\x5c\xb6\xdc\xe9\x64\xc7\x1a\xa2\xb0\x07"
+ "\xec\x4a\xc2\x34\x53\x8b\x95\x60\x9b\x37\x22\x0d\x2e\x39\x68\x80"
+ "\x73\x70\xf4\x1b\x9d\xba\x34\x0b\xf2\xf4\x98\x49\x33\xe0\xa5\xba"
+ "\xd9\x0c\xb4\xdf\xc0\xb0\x85\xbc\x80\xfa\x84\x95\x5d\x21\x0a\xdb"
+ "\x97\x9a\x69\xc0\xe3\x20\xff\x97\x88\x2c\xb8\x99\x0a\xc8\x4b\xe4"
+ "\x11\xf2\x55\xbb\x81\x52\xc8\x97\x57\x0b\xf8\xb6\x7d\xa9\x9b\x56"
+ "\x0a\xf9\xc6\x7c\x5e\x46\xee\xcb\xd6\x3f\xe0\x37\xa4\xba\x11\x68"
+ "\xb9\x5d\xe1\x25\x9f\x7c\x3d\x39\xff\x32\xfc\x3c\x85\x7c\xfc\x3c"
+ "\x9c\xa7\x10\x54\xa5\x4b\x3c\xe3\x53\x69\xb4\xcb\x99\xd6\x31\xe7"
+ "\xd3\xb8\x46\xcf\xf8\x34\x7e\xae\x2b\x9f\xc6\x78\xfe\x40\x3e\x9e"
+ "\x70\x3e\x8d\xab\xe7\x7c\x1a\x17\xec\x1d\x9f\xc6\x7b\xb5\xff\x77"
+ "\xc0\x78\x5a\xae\x6c\xc6\xf1\x34\xf0\xc9\xc3\xfe\x54\xda\xe0\x72"
+ "\x06\x77\xcc\xf9\xa4\xdc\xe2\x19\x9f\x94\x67\xfb\xf1\x69\x6c\xc7"
+ "\xb9\x72\x65\x05\xe7\x93\x32\x8d\xf3\x69\x7c\xa5\x77\x7c\x52\x7a"
+ "\x70\xfe\xc3\x83\x71\x9f\xdc\x2f\x17\xc7\x7d\x02\x8c\xfb\x3c\xe3"
+ "\x53\x59\xb4\xcb\x99\xe1\x31\xe7\x93\x5f\x88\x67\x7c\xf2\xdb\xea"
+ "\xca\xa7\x31\x1e\x8f\xc9\xfd\xa2\x38\x9f\xfc\x66\x72\x3e\x4d\x48"
+ "\xf0\x8e\x4f\x7e\x45\x63\x33\x3e\x51\x85\xe1\xf8\x04\xf8\xe4\x61"
+ "\x7f\x2a\x6b\x70\x39\xe3\x3c\xe6\x7c\x9a\x58\xef\x19\x9f\x54\x73"
+ "\xfa\xf1\x69\x6c\xc7\x0d\xf2\x89\x3c\x1e\xb0\x7c\x62\x35\xe7\xd3"
+ "\xc4\x20\xef\xf8\xa4\x8a\x18\x1b\x3b\xda\xbf\x11\xed\x68\x01\xec"
+ "\x68\xcf\xf8\x54\x1e\xed\x72\x26\x7b\xcc\xf9\xe4\x9f\xe6\x19\x9f"
+ "\xfc\x4f\xb9\xf2\x69\xac\xed\x5b\xff\x72\xce\x27\xff\x64\xce\x27"
+ "\xd5\x21\xef\xf8\xe4\xef\xc1\xfe\xcf\xc1\xcf\x61\x0d\xb4\xf9\x02"
+ "\x73\x6e\x2d\x9b\x2f\x50\xe7\x19\xaf\x02\x37\xdd\x58\x9b\x2f\x70"
+ "\x21\xe7\x55\xa0\x96\xf3\x2a\x40\xef\x1d\xaf\x02\xdd\xfa\x7f\x1c"
+ "\xee\xfc\xd6\x40\xbb\x6f\x52\xd8\xad\x65\xf7\xa9\x3d\x94\x7f\x93"
+ "\xe6\xdc\x58\xbb\x4f\x2d\xca\x3f\xb5\x28\xff\xd4\x5e\xca\xbf\x49"
+ "\x1e\xc8\xbf\xc1\xcf\x7d\x0d\xb4\xfd\x26\x9b\x6f\x2d\xdb\x6f\x72"
+ "\xa6\x67\xbc\x9a\x7c\xe6\xc6\xda\x7e\x93\x77\x73\x5e\x4d\x4e\xe5"
+ "\xbc\x9a\x64\xf4\x8e\x57\x93\xdb\xbc\x3d\x2f\x36\xd0\xfe\x0b\xba"
+ "\xc5\xec\xbf\x20\x0f\xed\xbf\xa0\x1b\x6c\xff\x05\x89\xf6\x5f\x90"
+ "\x68\xff\x7d\xcf\x4b\xfb\x2f\xc8\x2b\xfb\xaf\x1f\xaf\xc4\x7e\x35"
+ "\x25\xfc\xd6\xb2\x01\xef\x68\xf0\x8c\x57\x53\x1e\xba\xb1\x36\xe0"
+ "\x1d\x36\xce\xab\x3b\xea\x38\xaf\xee\xd0\x78\xc7\xab\x29\x6e\xe3"
+ "\xdf\x0e\x77\x3e\x6d\xa0\x1d\x78\x67\xf3\xad\x65\x07\xde\xe9\xe1"
+ "\xf8\xf7\xce\xb3\x37\xd6\x0e\xbc\x53\x1c\xff\xde\x29\x8e\x7f\xa7"
+ "\x78\x39\xfe\xbd\xd3\x83\xf1\xaf\x27\xf3\x7e\xd3\xe6\xa3\x0d\x68"
+ "\xcf\x2d\xa9\x0f\x04\xfa\x07\xa6\x12\x79\x4f\x30\xf0\x4b\x05\xfc"
+ "\xda\xa4\x25\xbd\xb9\xc0\x2f\x8b\x8d\x2c\x7e\xe1\x1c\xad\x6d\xb3"
+ "\x93\x1e\xe0\xd5\x75\xb0\x03\x4d\x96\x56\x3c\xa3\xf7\xaf\x4d\xf2"
+ "\xa9\x67\x9f\x79\x41\x4d\x90\x5f\x48\x7f\xbb\x6a\x3a\xa1\xc0\x2f"
+ "\xc6\x3f\xd5\xde\x22\x5b\xee\xae\xa8\x45\x97\xcf\xd1\xb5\x66\x4a"
+ "\x6b\xf4\x56\xf4\x1d\xa9\xae\xd1\x37\x90\xc8\x66\x32\x41\xfb\x34"
+ "\xf2\x65\x6a\x1e\xa6\x9b\x2c\x0d\x04\xfd\x7e\xb2\x39\xf0\x73\xba"
+ "\x20\xdb\x69\x9d\x0a\xfd\x37\xe1\xb9\x42\xc9\x47\x93\xe9\x52\x11"
+ "\xe3\x7f\xff\x39\x55\xc6\xff\xd3\x3a\xf5\x9b\x78\x3e\x71\xcc\x6d"
+ "\xc1\xa9\x6c\xfe\x4f\x38\xa7\x99\x26\xd5\x71\x6d\x02\xa5\x50\xc7"
+ "\xc9\xb5\x9d\x16\x82\xf5\xac\xed\x34\x92\x8c\x64\xa2\xae\xed\x69"
+ "\x25\xe9\x9d\xd4\x52\x9b\x79\x91\x44\x76\xe1\xba\x00\xe2\x69\xea"
+ "\x29\xce\xef\xa9\x44\x38\xa7\x9b\x06\xbf\xd5\xb5\x75\x84\x04\x6e"
+ "\x02\x5a\xdb\x88\x9c\x9d\xd7\x94\x13\x25\xd0\x4b\x6f\xca\x6c\x42"
+ "\xda\xd5\x99\x6c\x9f\x21\x3d\xf5\xf0\x7c\x5e\xdf\x7a\x43\xc0\xae"
+ "\x13\x98\x86\xb4\xc5\x7d\xa6\x26\x83\x85\xe5\x91\x9e\x73\xde\x65"
+ "\x12\x53\x6a\x0f\xa9\x05\x69\x60\x96\x6b\xf6\x7d\x12\xdd\x00\xf8"
+ "\xd2\x78\x29\xb7\xa7\x45\x8d\xcd\x7c\x65\xf0\x6e\xb4\x5b\xed\xb9"
+ "\xa5\x4b\x78\x1d\x7d\xdb\x87\xc7\x57\x69\xb4\x03\x5f\xc1\x8f\x8c"
+ "\x0e\x5f\x77\x5d\x1e\x5b\x7c\x8d\xb5\xfd\x7a\xd7\xc1\xd1\xe1\x2b"
+ "\x78\x2e\xc7\xd7\x5d\x31\x1c\x5f\xc1\x21\x0e\x7c\xf9\xb6\xdf\x38"
+ "\x7c\xdd\xa5\xe2\xf8\x9a\x56\xed\x1d\xbe\x82\xf7\x8f\xcd\x3c\xeb"
+ "\xdd\x0a\xb4\xb5\x01\x5f\xa2\xfc\x9a\xd8\xe4\x01\xbe\x9c\xe4\xd7"
+ "\x8c\x92\xd1\xe1\x6b\xc6\xa2\x31\xc6\xd7\x18\xdb\xdc\x33\x34\xa3"
+ "\xc3\xd7\x8c\x3f\x70\x7c\x4d\x37\x72\x7c\xcd\xc8\x75\xe0\x6b\x62"
+ "\xd3\x8d\xc3\xd7\xf4\x04\x8e\xaf\xe9\x21\xde\xe1\xeb\x6e\xaf\xfc"
+ "\x5f\x0d\x1c\x1f\xdc\x13\x8b\xe3\x03\x7b\x6e\x99\x28\xbf\x26\x9d"
+ "\x18\x1e\x5f\x65\x4e\xf2\x4b\x6b\x1f\x1d\xbe\xb4\x6f\x8f\x2d\xbe"
+ "\xc6\x7a\x9c\xa0\x4d\x1d\x1d\xbe\xb4\x5d\x1c\x5f\x5a\x2d\xc7\x97"
+ "\xb6\xcd\x81\xaf\x49\x27\x6e\x1c\xbe\xee\xae\xe6\xf8\xba\x3b\xd7"
+ "\x3b\x7c\xdd\xe3\xde\xff\xf3\x88\xe6\xb5\xef\xab\xc4\x31\x0d\xe0"
+ "\x4b\x94\x5f\x0f\x6f\xf7\x00\x5f\x4e\xf2\xeb\xbe\x67\x47\x87\xaf"
+ "\xfb\xfc\xc7\x18\x5f\x63\x3c\xb6\xb9\xb7\x61\x74\xf8\xba\x6f\x29"
+ "\xc7\xd7\xbd\x99\x1c\x5f\xf7\x2d\x74\xe0\xeb\xe1\xed\x37\x0e\x5f"
+ "\xf7\x86\x70\x7c\xdd\xd3\xe6\x1d\xbe\xee\xf3\xc0\xff\xab\x27\xf3"
+ "\xf1\xdf\x9f\x89\xe3\x30\x7b\x6e\xb9\x28\xbf\x9e\x79\x6c\x78\x7c"
+ "\x95\x3b\xc9\xaf\x59\x1f\x8e\x0e\x5f\xb3\x12\xc7\x16\x5f\x63\x3d"
+ "\x1e\x9b\x15\x3e\x3a\x7c\xcd\x7a\x8f\xe3\x6b\xa6\x99\xe3\x6b\xd6"
+ "\x3e\x07\xbe\x9e\x79\xec\xc6\xe1\x6b\x66\x2e\xc7\xd7\xcc\x85\xde"
+ "\xe1\xeb\xfb\x1e\xf8\xff\xf1\x74\x1d\x41\x97\x33\xba\x31\xa4\xee"
+ "\x9e\xd1\x61\xec\x07\xc7\x6f\xed\x31\xe4\x0f\x8a\x47\x87\x31\xdd"
+ "\x54\x8e\xb1\x1f\xcc\xe7\x18\xd3\xa9\x6f\xce\x18\xf2\xfb\x16\x8e"
+ "\xb1\xef\xef\xf7\x0e\x63\xba\x31\x5c\xff\x98\xdd\x36\xba\x71\xe4"
+ "\xec\xad\xa3\xc3\xd8\xec\xb9\xb7\xf6\x38\x72\x36\x19\x1d\xc6\x66"
+ "\x6f\xe4\x18\xbb\xbf\x82\x63\x6c\x76\xf2\xcd\x19\x47\xde\xbf\x84"
+ "\x63\xec\x7e\x2f\xd7\x6d\x66\x7b\x75\xfe\x65\xf0\x75\x9b\x39\x51"
+ "\xa3\x1b\x4b\x86\x5c\x1c\x1d\xc6\x42\x5e\xbf\xb5\xc7\x92\x21\xb1"
+ "\xa3\xc3\x58\xc8\x79\x8e\xb1\x10\x15\xc7\x58\x48\xc3\xcd\x19\x4b"
+ "\xfe\xf0\x20\xc7\xd8\x0f\x53\xbd\xc3\xd8\x9c\x65\x63\xb7\xde\xf4"
+ "\xe0\x81\xd1\x8d\x27\x1f\x5c\x34\x3a\x8c\x3d\x60\xbf\xb5\xc7\x93"
+ "\x0f\x54\x8d\x0e\x63\x0f\x3e\xc1\x31\xf6\x80\x81\x63\xec\xc1\x79"
+ "\x37\x67\x3c\xf9\x40\x30\xc7\xd8\x9c\x46\xef\x30\xf6\xa0\x71\xec"
+ "\xd6\xc9\x7e\xa4\x19\xdd\x98\xf2\xa1\x3f\x8f\x0e\x63\x0f\xad\xbc"
+ "\xb5\xc7\x94\x0f\x85\x8c\x0e\x63\x0f\xbd\xc5\x31\x16\x5a\xcf\x31"
+ "\xf6\x50\xf9\xcd\x19\x53\x86\x66\x72\x8c\x85\x46\x78\x87\xb1\x1f"
+ "\xcd\x1c\xbb\xf5\xbd\xb0\xb4\xd1\x8d\x2b\xc3\xee\x18\x1d\xc6\x7e"
+ "\x7c\xf4\xd6\x1e\x57\xfe\xb8\x60\x74\x18\x0b\xf3\xe7\x18\xfb\x71"
+ "\x38\xc7\x58\x98\xe2\xe6\x8c\x2b\x7f\xd4\xcc\x31\xf6\x23\xef\xfc"
+ "\x51\xc8\xc3\x06\xf8\xbf\x8a\x5f\x93\xb2\x32\x21\x3e\x56\x1b\xbf"
+ "\x26\x39\xe9\x05\xed\xba\xf8\x0d\x71\x8f\xcc\x7a\x31\x44\x9b\x94"
+ "\xaa\x4d\x8a\x5f\xf3\x5b\x31\x21\xd6\x8f\x3c\x1d\x97\xb0\x32\x15"
+ "\x53\x20\xf7\x6f\xd7\x24\xc6\xad\x49\xd6\x26\xc5\xbd\xf0\x62\x7c"
+ "\x52\x1c\xfe\xbf\x4e\xbb\x7a\x6d\x12\x24\xac\x8a\x8b\x4f\x89\xd3"
+ "\x3e\xf7\xe2\xea\xd5\x71\x49\xeb\xfc\xc8\xa2\x17\x13\x92\xe3\x0d"
+ "\x09\x71\xda\xf9\x8b\x1e\x9d\xb3\xe4\x89\x5f\x2f\xf9\xf9\xcf\x31"
+ "\x38\x99\x53\x6c\xb2\x60\x9a\xbb\xb7\x00\x30\xa7\x68\x91\x3f\xb2"
+ "\xb5\x56\x43\x58\x7c\xdc\x1d\xed\x44\xbd\x3d\x89\x28\xb6\xb5\x13"
+ "\x65\x5e\x3b\x51\x69\x7f\x47\x22\xe8\xb6\xb3\x96\xfc\x76\x12\x44"
+ "\xf3\x13\x35\x42\xde\x94\x50\x9a\x37\xcd\x60\x99\x40\xb5\x90\xa6"
+ "\x16\xb6\x09\x51\xf0\x4e\x10\xd0\x56\x41\xf3\x82\xcd\x4d\xf2\x47"
+ "\xe6\x5b\x80\x43\x19\x17\x89\x9c\xfa\xcd\x3d\xf8\x8e\x60\x91\x1f"
+ "\x4e\x26\xcc\x06\x27\xf2\x87\xeb\xe0\x3a\x44\xe4\xff\x92\x00\x57"
+ "\x1a\x5c\x39\x70\xed\x87\xeb\x20\x5c\xd5\x70\x35\xc0\xd5\x0c\x57"
+ "\x1b\x5c\x9d\x70\xc1\x28\x2e\x5c\x01\x57\x26\x5c\xe5\x70\x41\xde"
+ "\xf0\x2a\x5e\x4e\x78\x3d\x91\xff\x84\xc0\xa5\x83\x2b\x02\x2e\xc8"
+ "\xff\xd3\x20\xb8\x0a\xe1\x0a\x81\x0b\x28\xff\x53\x48\xff\x69\x2c"
+ "\x5c\xf8\x7e\x03\x7f\xf6\xaf\xf3\xe0\x82\x91\xf8\x23\xf3\x87\xbf"
+ "\xfe\xb5\x08\x2e\xf8\xee\xbf\x56\x12\xf9\xbc\x99\x70\x41\x7d\xe7"
+ "\x35\xf4\xcb\xa7\x75\xfa\x7f\xde\x30\x65\x2e\x0b\xdc\x74\xb7\x99"
+ "\xc5\xc0\x93\xff\xcb\x1c\x9a\x45\x7c\x68\x1e\x21\x86\xd9\x44\x76"
+ "\x49\xfe\xf0\x75\xd3\x16\x94\x33\x53\x42\x59\x4c\x47\xb8\x47\x9a"
+ "\x75\x6f\x7f\xd8\x6a\x26\x86\x02\x8c\x69\x36\x32\xbc\x3d\x6c\xe5"
+ "\xef\xff\x4b\xb8\x59\x16\xd0\xca\x62\xc0\x6d\x3f\x99\x43\x33\xa2"
+ "\xdf\x64\xb1\xdf\x80\x86\x78\x2e\x8b\xe6\x9c\x54\x50\x65\x4d\x1a"
+ "\xf6\x79\xe3\x06\xac\xd7\xc3\xc7\x79\xff\x82\xe7\x50\x37\x8b\x7f"
+ "\xa2\x06\xea\xa9\xc0\x7b\xba\x8d\x6a\x7b\xfc\xf7\x18\xf0\xff\xeb"
+ "\x25\xfa\x72\x9a\xbb\xa7\x08\xc7\xd9\xc6\xf4\x5d\xa4\x09\xde\xeb"
+ "\xf1\xaf\x08\xd7\x3e\x1d\x48\x9b\x78\xd9\x72\xb3\xfc\x5f\x62\xa5"
+ "\xb2\x7a\xfc\x13\xb5\xb4\xa8\x22\x86\xe6\x01\x86\xc4\xf2\x04\x28"
+ "\x8f\xfe\xff\xec\x7d\x0d\x7c\x54\xc5\xb5\xf8\xd9\x9b\x0d\x6c\x42"
+ "\x3e\x16\x8c\xba\x68\xc4\x05\xa3\x06\xe5\x63\xb1\xd1\x46\x0d\xb2"
+ "\xca\x87\x41\x81\x04\x88\x18\x25\x42\x90\x80\x8b\x06\x88\x10\x21"
+ "\x60\x20\x61\x45\x1b\xd2\x24\xa4\x2d\xb5\xd1\x86\x24\x20\x6a\xb4"
+ "\xa8\x51\xb1\xa6\x7d\xf8\x77\x5b\x22\x4d\x95\xb0\x69\x1f\xfe\x9a"
+ "\xf6\x47\xeb\xca\x8b\x34\xe5\x05\xd8\x9a\xc5\x5d\x92\xdd\x9d\xff"
+ "\x39\x33\xf7\x26\x77\x37\xbb\x08\x4a\x7d\xfd\x30\x7a\xd9\x7b\x67"
+ "\xce\x9c\x39\x73\xbe\xe6\xcc\xdc\xb9\x33\x15\xbb\xcd\x08\x67\xa3"
+ "\x74\x56\x6b\x69\x56\xee\xf1\x77\x3f\xab\x7a\xc9\x41\xbf\xf1\x5b"
+ "\xc0\xc5\x9f\xad\x66\x10\xbf\x7a\x20\x5f\xd7\x2d\xa5\x2e\x9b\xd8"
+ "\x0e\x1a\xdb\x3c\xa2\x3b\xd5\x54\xd2\xce\xfc\xc6\xcd\x11\x58\x7f"
+ "\xea\xa4\xfe\x7a\x47\x36\x66\xd3\xf9\xa9\xfe\xf2\x94\x56\x3a\x83"
+ "\x8f\xca\x12\x6d\xcf\x8f\x00\x6d\xfd\x0f\x41\x47\x6d\x74\x97\xa7"
+ "\xe6\x28\xe7\xd0\x51\x19\x09\xe1\xef\x99\x5b\xc2\x54\xb8\xc7\x32"
+ "\xde\x9e\x5b\x0e\x09\x9e\xa6\x56\x38\x34\x31\x87\x08\xde\x38\x86"
+ "\xf3\xf2\x77\x72\x7e\x3b\xc9\x93\xf0\xfb\x2b\x5f\xae\xa6\x67\x3a"
+ "\xe7\x2e\x1e\xb5\xd5\xb8\x39\xa9\x59\xf0\xe8\xa5\x1a\xc2\x43\xf0"
+ "\xfe\xaa\x5d\x78\xff\xdd\x02\x3f\xb6\xd7\x67\x85\x64\xe3\x2a\x30"
+ "\x23\xed\x67\x7d\xdb\x8e\x64\x62\x3e\xda\xdd\x91\x2c\x84\x6f\xe2"
+ "\xfc\xae\xdc\x6d\x72\x48\xa9\xdd\x98\x97\xd5\x7f\xf6\xa5\xe0\xb3"
+ "\xc6\xbf\xed\x48\x9e\xbb\xfc\x56\xa3\x43\x73\x4d\x87\xd2\x06\xee"
+ "\xe3\x06\xe0\x64\x99\xde\x9a\xe0\x8c\x3a\x92\xd7\xb7\x8e\xb5\x6f"
+ "\xff\x13\x00\xd6\xc9\x7a\xbf\x60\x87\x8a\x33\x99\xa7\x6a\x01\xc0"
+ "\xa1\xdc\xa3\x50\xb2\x04\x12\x87\x6d\x61\xce\x0c\x1f\xc4\x0f\x3b"
+ "\x1a\xcf\xda\x32\x8f\xa2\x8f\x3e\x03\xc5\xed\xac\xeb\x70\xc1\x7e"
+ "\x28\xfe\x0c\x62\x36\xad\x80\x84\x92\x4c\xe6\xdc\x7c\x88\x79\xec"
+ "\x45\x47\xe1\xb0\x0b\xaf\x82\x36\x84\xfb\x18\xaf\xfd\x50\xb2\x01"
+ "\xb4\x73\xd0\x9f\x6e\x3e\x03\x31\x87\x0b\xce\x60\xda\x49\x28\xce"
+ "\x65\xde\xb6\x43\x04\xf7\x01\x64\x78\x9d\xf1\x9b\x4e\x82\xb6\x6e"
+ "\x01\x7d\x5b\xf6\x67\xa8\x47\x5a\x7a\x63\xaf\xc8\x3d\x5b\x99\xd8"
+ "\xd5\xb3\x8e\x79\xb1\x2d\xdd\x0e\x48\x33\x05\xb4\x85\x68\xee\xe5"
+ "\xbc\xd5\x10\x8c\xbf\x72\xb7\x61\xb1\x97\xf4\xfc\x56\x07\xfa\x62"
+ "\x50\xf2\x29\xcf\x19\xbb\x1b\xf5\xe7\xb6\x98\x0c\x2f\x73\x13\x3c"
+ "\xb5\x1b\x79\x94\x2b\xb7\x3f\x37\xa2\x00\xb4\xee\xf2\xdb\x32\x1d"
+ "\x9a\xeb\xf6\xa9\x64\x48\x32\x19\xa2\xd4\x27\xc3\x14\x3a\x34\x49"
+ "\x5c\x2f\xfc\x3c\xef\xbb\x39\x04\x8b\xe9\x28\xff\xeb\xb4\x82\xbe"
+ "\xdb\xb2\x28\x4d\xf6\xa5\x64\xd7\x79\x7e\xb2\xeb\xb2\xb6\x4c\x5f"
+ "\xec\x4b\x0d\x4c\x62\x1e\xd4\xe7\x54\xd6\x63\x88\x99\xe3\x65\x1e"
+ "\x7f\xe5\x2e\x13\xfa\xcb\x18\x3a\x27\x55\xc0\xdf\x7e\x2d\xe6\x9b"
+ "\x8d\xeb\xf8\x7d\x2c\xd5\xe3\xdf\x69\xa9\x26\xdf\x9a\xd1\x4e\xf0"
+ "\x2b\xab\xab\xd6\xa0\xef\xad\x7c\xa9\x9a\xec\xd0\x1f\xbb\x3b\xfd"
+ "\xec\x73\x8d\x66\xb2\x6f\x86\x3a\xc6\x2a\x56\x9a\xfb\xf1\x58\x21"
+ "\x12\xe9\xe9\x64\x58\x9e\x55\xec\x32\xc9\xb2\x6f\x13\xba\x79\x9b"
+ "\x83\xec\x0e\xe9\xca\xc2\xf4\xc8\x63\xd2\xed\xf9\xf4\x8d\x26\x3e"
+ "\x57\xf0\xb3\x24\xa5\xdb\x1f\x17\x3a\xd3\x96\x19\xf0\x2c\x11\xff"
+ "\xd0\x26\xd1\x0f\x88\xf8\xe2\xf6\x1f\x0c\xd8\x85\xd0\x63\x61\xdf"
+ "\xbb\x90\xa6\xd4\x43\x7e\x6b\x84\x1f\xe1\x34\xc7\x04\x1f\xa4\xde"
+ "\xa8\x23\xd9\xee\xf2\xdb\xf7\x3b\x34\x43\x67\x05\xc8\xb3\xfc\x50"
+ "\x01\x9d\x5b\x89\xb4\x44\x20\xce\xbf\xe1\xef\x50\xfc\x3d\x79\xa0"
+ "\x9d\xfa\x5a\x8e\x77\x18\xdd\x3f\x7f\x19\x73\x4e\x9b\x0d\x74\x46"
+ "\x25\xf2\x3d\x4d\xeb\x80\x5c\xce\xf7\x72\x3a\xbb\x13\xd3\x08\x06"
+ "\xd3\x13\x31\xdd\x25\xf0\x7f\xd7\xe6\x22\x9f\x15\x80\x3f\xed\x4e"
+ "\x81\x5f\xe0\x25\x7c\x0a\xee\x9d\xcf\xb2\x6e\x19\x77\xae\x82\xbb"
+ "\x12\xd3\x14\xfc\xd3\x56\xf6\xd7\x51\x8a\xf9\xc5\xea\x36\x3c\xf7"
+ "\x2c\x73\x11\x0e\xcc\xab\x75\x80\xe5\x28\xe5\x6d\xc3\x34\x2a\xab"
+ "\xd2\xa9\x88\x03\x99\x88\xe3\x10\xc7\xd1\xe2\x80\x47\xf2\xd4\x7e"
+ "\x03\x79\x14\xab\xf8\x5a\x19\x57\x97\x82\x6b\x00\x8f\xa2\x53\x1d"
+ "\x35\xb2\x4c\x09\x6f\x0c\xe1\x75\x97\x4f\x36\x38\xe0\xe1\xbd\xea"
+ "\xb6\x23\xcf\xd3\xe5\xbc\x14\xe4\x7b\x8c\x9a\x66\xd9\xaf\x36\x62"
+ "\x79\x8d\x8c\xeb\x2c\xf9\x2c\x25\x9f\xce\xf5\x64\xe5\x29\x4e\xb2"
+ "\x1b\xf4\x8f\x80\x76\x66\x44\x3c\xc5\x41\xfe\x51\x4b\x70\xfe\xf2"
+ "\x9b\xaf\xe5\xe7\x9a\x5e\xc6\xba\x10\xa6\x21\xe0\x2c\x4f\x09\xee"
+ "\xc0\xb4\x7d\xca\x99\xa2\x55\x08\xe3\x90\x6e\x0e\xbb\x67\xe2\xe6"
+ "\xd1\x20\xd9\x91\x8b\x18\xaf\x92\xce\xa5\xd9\x13\x5d\x60\xaf\xf5"
+ "\x83\xbf\xce\x62\x33\x6f\x66\xb6\xe3\xd2\x1d\x93\xe8\x8c\xe8\x0b"
+ "\xeb\x03\x27\xf3\xf5\x7f\xac\x17\xe3\xb8\xe2\x9b\x80\xfa\xbd\x53"
+ "\xd2\x94\x25\x76\xe7\xe7\xdc\xf6\xf0\x7e\x36\xe5\xff\x08\xe3\x3e"
+ "\x8a\xfd\x30\xde\xb6\x54\x4b\x22\xfe\xf3\x23\x6c\x1d\xa5\x53\x6c"
+ "\x88\x71\x69\xbd\x2a\x8f\xd5\x59\x8a\x04\xef\xa6\x8c\x24\x3e\x72"
+ "\x7a\xbd\x77\xdb\x88\x66\x7f\xad\xa5\x88\xda\x50\x52\xc4\xfc\x76"
+ "\xaf\xdb\x46\x67\xed\x1a\xd7\x51\xdc\x7a\xc7\x99\x8c\x9d\xc0\xd0"
+ "\xb6\x8b\x2e\xac\x0d\x77\xf0\xf1\x2f\xc6\xe6\xa7\x9c\x57\x59\x8a"
+ "\xe8\x6c\xe5\xed\x9b\x23\x75\x53\x6b\x99\xad\x67\x94\xc5\xe6\x2e"
+ "\x9f\x62\x50\xce\xae\xbd\x30\xbc\x53\x0c\x4a\xdb\xeb\xe4\xb6\x63"
+ "\x5d\xfc\x9d\xf5\xc4\x1a\x7e\xa6\x36\x3e\x4f\x09\xbb\xd6\x09\xfd"
+ "\x4b\x23\x95\xc5\xb6\x9b\xeb\x15\x3e\x79\x9d\x74\xa6\xf8\xf0\x13"
+ "\xd2\x94\xcf\x32\x8a\x6d\xc0\xf7\xc9\xaf\xdc\xd5\x78\x81\x74\xf1"
+ "\xf5\x2f\x87\x71\x5c\x90\xe1\x7d\x9f\x09\xbf\x68\x8e\x9d\x23\xe3"
+ "\xa3\x3c\x45\x56\x75\x72\xbc\x7e\xe1\x75\x98\x13\xce\xa3\x5d\xfa"
+ "\xc1\xed\x32\xbf\xf7\xd5\xdb\x65\x2e\x0b\xd1\xae\xcf\x2e\x72\xbb"
+ "\xc2\xae\xff\x56\xb5\xcb\x38\xb8\x5d\x77\xfe\xf8\xab\xb7\xeb\xce"
+ "\xdc\xc1\xed\xba\xf3\xbd\x8b\xdb\xae\x3b\x5b\xce\xa3\x5d\xa6\xc1"
+ "\xed\xba\x6b\xe5\x57\x6f\xd7\x5d\xa9\x83\xdb\x75\xd7\x8f\x2f\x6e"
+ "\xbb\xee\xaa\xbd\x60\x7f\x58\xf5\x92\x53\xf8\xc3\xa9\x77\x5e\xb8"
+ "\x3f\x9c\x1a\x33\xd8\x1f\x4e\x7b\x7c\xc0\x1f\x4e\x7b\xe8\x2b\xf9"
+ "\xc3\xaa\x95\x72\xac\x31\x6d\xec\x20\x7f\x58\xb1\xd2\x14\xda\x1f"
+ "\x4e\x8b\xe4\xfe\xb0\x72\xe5\x05\x8e\xa3\xa7\xb6\xf7\xfb\xc3\xd8"
+ "\x95\xa6\x00\x7f\x18\xf7\x12\xf6\x9f\xd3\x92\xbf\x9a\x3f\x9c\x96"
+ "\x3c\xd8\x1f\x4e\x2d\x0b\xf4\x87\xd3\x72\xc3\xeb\xe1\xee\xe4\x50"
+ "\xfe\x30\xc3\x7b\x9a\x09\xdd\xd8\x9d\x7c\x81\xf4\x84\xdd\xff\x1d"
+ "\x75\xbe\xe9\xdc\x75\xed\x6a\xba\xb0\xba\xa6\x87\x9d\xff\xc2\xb1"
+ "\x61\x01\xc6\x20\xfa\x4d\xbb\x40\x3a\x8e\x23\xf6\xc3\x89\x1d\x60"
+ "\x2f\xf2\xc0\x84\x02\xd4\x09\x2b\xa4\x1d\xae\xed\x86\xc3\x89\xc7"
+ "\x81\x45\xb5\x15\xb0\x97\x36\x98\xcd\x6b\x48\x37\xa7\xff\xd9\x5e"
+ "\xe8\xb9\x40\xdd\x9c\xde\xa8\xe8\xe6\x61\x2f\xea\xe6\x3a\xd2\xc7"
+ "\xbb\x63\xed\xdd\x27\x64\xdd\x9c\x71\xb6\x5f\x3e\x56\xa1\x9f\x21"
+ "\x75\x13\x6d\x22\x50\x37\x77\x35\x08\xdd\x9c\xf1\xc1\x60\xdd\xdc"
+ "\xd5\x10\x5a\x37\x67\xec\x12\xba\xb9\xab\xe1\xc2\xda\x30\x23\x7f"
+ "\x40\x37\x77\x35\x04\xe8\xe6\x75\x1b\xcc\xee\xf2\x19\x2d\x5f\x4d"
+ "\x37\x67\xb4\x28\x6d\xdf\x29\xb7\x1d\xd3\x92\x02\x75\x73\x86\x37"
+ "\xac\x0c\xcb\xf6\xa7\xa2\x3f\x8c\x39\x21\xdd\x7d\xc8\x87\x31\xad"
+ "\xbf\x42\x6b\xc8\xf0\x31\x37\x9d\xd1\xce\xa4\x14\x60\xeb\x93\x63"
+ "\xdc\x38\xde\x74\xbb\x2d\x3a\x16\x7d\xc8\xcf\xfa\x0c\x80\xb4\xc7"
+ "\x33\x77\x72\x1c\xf2\x2c\x09\x7f\x47\xec\x5c\x07\x09\x78\x19\x76"
+ "\xca\x7c\xc5\x7b\x13\x5b\x6f\x88\xae\x5a\x07\xe3\xe2\x5d\xa0\x43"
+ "\x1a\xb2\xe3\xb7\xe8\x21\xde\x0b\x09\x74\xcf\xac\x2f\x42\xfd\x17"
+ "\xa0\xa5\xb9\x46\x7f\x2c\xd6\x57\x14\xcf\xd8\xda\x64\xa8\x5f\x83"
+ "\xf4\x48\x60\xa8\x97\x58\x93\x6f\x7d\xb2\xc4\xe2\x5e\xfa\x19\x7b"
+ "\x32\x9b\xd3\xe4\x4f\xda\x50\x8a\x3a\x54\xca\x4a\x2c\x54\xaf\x99"
+ "\xce\x0a\x66\xd7\x6d\xd8\xca\xdc\x86\xe8\xca\x2f\x60\x5c\xfd\x3a"
+ "\x48\xaa\x5b\x07\xc9\xac\x2f\x59\x42\x1e\x64\x2f\x7a\x5c\x4f\x72"
+ "\xcf\x66\x12\xd6\xb5\x0e\xeb\x42\x59\xfa\x2a\xb1\x2e\x2f\xd6\x75"
+ "\x1a\xeb\x3a\x85\x75\x59\xb1\x2e\xab\xa8\xeb\xc2\x78\x9e\x9e\x7a"
+ "\xae\x39\xe1\x8c\x4d\xa3\x68\xef\xda\xbf\xc6\x17\x0d\x4d\xa7\xf9"
+ "\xe1\x9e\x27\x2d\x17\xa8\xef\xe9\x61\xbf\xff\xd9\xfe\x3a\x24\x32"
+ "\x9d\xdf\x30\xe7\xe9\x4f\x58\x06\x4a\xf5\xe9\xd7\x61\x1c\xd9\xdc"
+ "\x61\xcf\x49\xb4\x33\xbf\xe1\x83\xe4\xee\x0b\xac\x6b\xa6\x36\x5c"
+ "\x5d\xe5\x56\xd6\xde\x97\x48\xe3\xc5\x97\x9a\xb7\x4b\xac\xa8\x37"
+ "\xd1\xd2\xf4\xe1\x91\x5e\x58\x5c\x44\x73\xd0\xac\xc8\xf8\x20\xe8"
+ "\x8e\x49\x19\xcd\x25\x7f\xa4\xf9\xbc\x99\x65\x81\xf3\x79\x33\xf7"
+ "\x82\x74\x6f\x26\x48\xb3\x4a\x41\x9a\xa3\x03\x84\x0b\xba\xcc\x19"
+ "\xaf\x8c\x82\xcd\x5e\xf6\x57\x1c\xa7\x96\x55\xe1\x58\x38\x63\xac"
+ "\xc6\x61\x5b\x47\xf3\x5b\xf7\xce\x44\xfe\xfd\x2f\xf6\x41\xf1\x74"
+ "\x4f\xf8\x0a\xd6\xc0\x25\x27\xa4\x7b\xd3\xe3\x5d\x43\xd3\xbd\x31"
+ "\x2f\x75\x78\x71\xfc\xd6\x67\x68\x34\x9f\xad\x78\xa9\xba\x8f\xc6"
+ "\xb3\x0f\x93\x1f\xb8\xe7\xce\x78\x4d\x29\x8e\xb7\xb5\x06\xc6\x0c"
+ "\x34\x67\x9b\x5d\x8b\x17\xc9\x9e\xcb\x3d\xfa\xf7\x4d\xa4\x1f\xa4"
+ "\x8b\xf5\x22\x5d\x4f\xfa\xb8\x5d\xee\xb3\x9d\x11\x37\xe4\x92\x0d"
+ "\xf8\xb0\x7c\xc9\x67\x90\x68\x3f\xea\x03\xd4\xe9\xec\xc5\x3e\x1d"
+ "\xd9\x51\xb6\xed\xc1\xdf\xc3\xf1\x02\x90\x4a\xfe\x0e\xb1\xa8\x43"
+ "\x31\x64\x0f\x7e\xb4\x87\x8c\xa3\xf1\x1e\xb4\x6b\xff\xe6\x33\x10"
+ "\x4f\x7e\x82\xf6\x45\xb6\x77\x3b\xc0\x7f\x3a\x39\xee\xa7\xab\x20"
+ "\xc1\x7b\xda\x32\xc2\x79\xda\x72\xc9\x73\x7e\x48\x88\x2b\x00\xfd"
+ "\xce\x55\xa8\xbb\xab\xd1\x3e\x4e\xa1\x7d\x74\x0b\xfb\xe8\xd7\xd7"
+ "\x67\x7e\x63\xa1\x6f\x6e\xb8\x6d\x54\xca\xb6\xb1\x3e\x99\x74\xb8"
+ "\xdf\x36\xbc\xab\x93\xa5\x9d\x12\x03\xa4\x11\xf9\x9e\x5e\x54\xbf"
+ "\x79\x28\xf9\x7d\x13\x1b\xb5\xc2\x48\x63\xb3\x0c\x2f\xf3\xbe\x81"
+ "\xb2\x88\x1c\x2b\x19\x59\xe5\x4b\x1d\x1f\x66\x76\xc1\xc0\x98\x2e"
+ "\xe3\x17\xbd\x57\x59\x9a\x8c\xf3\xd8\xe9\x63\xd2\xbd\x66\x4c\xd7"
+ "\x19\x17\x5c\xaf\x47\x39\xfe\x42\x8c\x01\x33\x9a\x69\x8e\xc0\x21"
+ "\xdd\x9b\x80\xb8\x80\xde\x4b\x7c\xc4\xe7\x24\x67\x15\x21\x2c\xf8"
+ "\x90\xe7\xde\x98\x95\x66\x7f\xcc\x4b\x8d\xb6\x47\x7b\xb9\x6d\xf6"
+ "\xa1\x0c\x8e\xe7\x83\xb4\xb8\x1b\x79\xe3\x43\xde\xb8\xb9\xcf\xc8"
+ "\xe4\x3e\xa3\xec\x90\xa7\xd8\xc1\xfc\x19\x79\x11\x0c\xf9\xa2\xb3"
+ "\x17\xf9\x60\x51\x01\xb0\x4d\x27\x91\x47\xae\x0e\xf2\x2f\x71\xfe"
+ "\xf5\xc2\x87\xfc\x14\xf9\x13\xdb\x0d\x7a\x56\x05\xfa\xd7\x37\xb7"
+ "\x46\xfa\x50\xcf\xc9\x8f\xc4\x6f\xd1\x44\xa1\xac\xe2\x2a\xc8\xce"
+ "\xd1\xee\xe3\xb7\x70\xbf\xc6\x65\xeb\x5d\x9f\x3c\xa6\x6f\x7d\xb2"
+ "\x11\xaf\x51\x8a\xaf\xa1\xb3\xb8\x76\x92\x9f\x29\x4f\x77\x90\x9f"
+ "\xb1\x17\x39\xc0\x8b\xbc\x8c\xa3\x7e\x69\x7d\x72\x22\xe7\xe9\x23"
+ "\xc8\xd3\xe5\xa0\x9b\xe8\x01\x0d\xd2\xa5\x47\x9a\xa1\xcd\x72\x0c"
+ "\x88\xc7\x3e\xb4\x23\xe2\x73\x1f\xf9\x20\xd4\x35\x8c\x53\xcc\xb3"
+ "\x57\x18\xe1\x83\xe4\x8f\x81\xf6\x56\x2a\x39\xcb\x3e\xa5\x39\x51"
+ "\x7b\x91\x17\x58\xec\x4b\x1d\x8c\xcf\x23\xdd\x6b\xf8\x30\xd3\x03"
+ "\xe1\x75\x7a\x8e\x66\x40\xa7\xe7\x68\x06\x74\x7a\x0e\xb7\x17\xb5"
+ "\x5e\x9f\xad\x41\xbd\x8e\x51\xeb\xf5\xec\x91\xff\x50\xbd\x9e\x73"
+ "\xe1\x7a\xfd\xdc\x29\x95\x5e\x6f\xfe\xbf\xd1\xeb\x8f\xb2\xb9\x5e"
+ "\x47\xf4\x5d\xc5\xf5\x35\xd1\xee\x7d\x0b\x1c\xd2\xec\x6e\x45\x6f"
+ "\x7f\xfb\x2a\xe9\x6d\x86\xe9\x9f\x55\x6f\xcf\xba\x93\x8d\x78\x5d"
+ "\x74\xbd\x45\x9c\xe7\xad\xb7\x1f\x65\xf7\x82\xc2\x3f\xd2\x5f\x56"
+ "\xe6\x37\x18\x4b\x60\x0a\xf2\xad\x39\x7e\xcb\x28\x68\x13\x3c\x6c"
+ "\x36\x2e\x60\x7e\xf4\x11\x2b\x48\x9f\x7a\xad\x8c\xf9\x63\x76\xa7"
+ "\x97\xfc\x0e\xf4\x58\x47\xb5\xdd\xfb\x1a\xc4\x17\xd0\x3b\x9e\x95"
+ "\x06\x16\x9b\xe8\xa0\x77\x41\x48\x8f\x96\xde\xff\xf8\x2a\x91\xf7"
+ "\xe8\x4f\x7c\x95\x2f\x57\xfb\xb7\xfd\xd9\xe9\x8f\x15\xef\x88\x58"
+ "\x14\x33\xba\xcb\x33\x9a\x95\xf7\x17\x21\x63\x93\x98\x97\xab\xd1"
+ "\x5e\xb4\xc7\xa5\xcc\x77\xf0\x57\xc2\xdf\xb9\xf8\x1b\x81\xbf\xa3"
+ "\x89\x8e\x0b\xeb\xe7\x32\xf8\xf8\x17\xfb\xb2\x4e\xd9\x0f\x9e\xe4"
+ "\x36\x78\x03\xc4\x9e\x90\xef\xdd\xe5\x99\xe9\xca\xfb\x90\x7e\xf8"
+ "\x01\x7e\x74\x52\xdd\xc8\x13\xad\x78\x47\x23\x9e\x55\xf8\x3e\xe3"
+ "\xcf\xa0\x4d\xc4\xf6\x67\xd2\xbb\x54\xd4\x25\x8d\x9b\x59\xee\x90"
+ "\x7f\x27\x8b\x77\x3a\x2f\x57\x53\x9c\x27\xfb\xda\x6e\xb9\x5e\x1b"
+ "\xf6\xc3\xd3\xd4\xf5\x86\xe2\x87\x43\xca\x3c\x1a\x2e\xef\xc2\x78"
+ "\x91\x19\x76\xfd\xd7\xf4\x64\x1f\xbb\x30\x5c\x73\xc3\x7e\xff\xca"
+ "\x12\x2d\x05\x19\x8d\x3e\x9b\xbf\x2f\x3b\xfe\x83\xe2\x93\x17\x18"
+ "\x97\xcc\x0d\x3b\xfe\xf5\xc5\xec\xce\xcd\x18\x3b\x0a\x7c\xb5\x96"
+ "\x02\x9a\xeb\xa4\x58\xeb\x70\xb2\x17\x28\xde\x7a\xe5\x51\x87\xd4"
+ "\x87\x31\x63\x1c\xda\xe3\x1c\xd7\xfb\x6c\xfb\x09\x8c\x51\xd7\x67"
+ "\xc7\x57\x3d\x0a\x69\xde\xd3\x86\xe8\xef\xa3\x0f\xea\x45\x7f\xd0"
+ "\x7b\xda\x12\x7f\xb8\xc0\x03\xfe\x9d\x96\x02\xbb\xb7\x15\xea\x11"
+ "\x8e\xfc\x2f\xd1\x7b\xf6\x74\x76\x5c\xf9\x2a\xe0\xef\x36\x6c\x0f"
+ "\xbf\x8a\xfe\x77\xde\xce\xc8\x4d\xe8\x73\xd0\x67\x70\x3f\xfc\x15"
+ "\x7c\x70\xef\x53\x37\xe4\xce\xce\x61\x9e\xc3\x47\x7f\x0f\x25\x6d"
+ "\xa0\x2f\x79\x02\x62\x09\xbf\xdd\xdb\x26\xfc\xf2\x03\xe8\x97\xf1"
+ "\xb9\x4e\xe5\x97\xf9\x9c\x7a\x90\x5f\xa6\xf8\xfb\x70\x67\x17\xc4"
+ "\xb9\x60\xe8\x1c\x57\xbc\x67\xb3\x8b\xf9\x29\x1e\xa7\xf7\x28\x08"
+ "\x13\xa7\xf8\xe8\xe7\x31\xee\xe8\x5b\x2d\xfc\xf3\x4e\xd9\x3f\x3f"
+ "\x7f\xea\xeb\xfb\xe7\xe7\xad\xe8\x9f\x31\xde\x7b\x8e\x7c\x33\xfa"
+ "\xe5\xbd\xc7\x9d\x92\x17\x7d\xf1\x85\xc9\x76\x7e\x51\x38\xd9\xce"
+ "\xc1\xfe\x93\x64\x4a\xba\xd3\xd6\xe8\xa5\x77\xfc\x7f\xf5\xc5\xed"
+ "\x6c\xa2\xfe\xb1\x17\xfb\xc6\x57\x1e\xed\x90\xe2\x8a\x50\xb6\x05"
+ "\xef\x33\xef\xda\xec\x78\xd6\x97\x1d\xeb\xab\xd8\x9d\xeb\xed\x33"
+ "\xe8\xfa\xfa\x50\xbe\xe8\x2f\xb0\xbf\xd2\x3b\x9f\xb4\x70\x9e\xf8"
+ "\xaf\xb2\x14\xf8\x9f\x99\x50\x8a\x7d\x53\x6a\xdd\x29\x48\x61\x95"
+ "\x3b\xdb\xbd\x95\x3b\x8f\xf6\x55\xee\x3c\x82\x7a\x19\x87\xf1\x23"
+ "\xca\xfc\xac\xcd\x5f\xb9\xd3\xe9\xaf\x6a\x68\xf2\xc5\xee\xce\x75"
+ "\xc6\xee\xec\xc0\xe7\x2e\xff\x93\xa8\x07\x1b\x49\x0f\x3e\x00\xe3"
+ "\x1c\xea\x87\xb3\x5e\x0c\xa5\x07\xcf\x59\x2f\xac\x2f\x9e\x9d\x8d"
+ "\x7a\xd0\x81\x7a\xf0\x77\xb5\x1e\xbc\x07\x5e\xab\xdc\x47\xdf\x27"
+ "\x74\x01\xf9\xce\xc7\x32\xfd\xfd\xf4\xbc\x0f\x43\xeb\xc3\xd1\xf3"
+ "\xd3\x87\xde\xd3\x81\xfa\x50\xfb\x15\xf5\x01\xfb\x57\x43\x1d\x8e"
+ "\x9b\xce\x9e\x4e\x96\x6a\x49\x1f\x3e\x1e\xd0\x87\x9f\xfd\xc5\x29"
+ "\xf5\x5d\xb0\x3e\xdc\x17\xf6\xfc\xaf\xd0\xfa\x50\x67\xfa\x9a\xfa"
+ "\xd0\x31\xa0\x0f\x75\x99\xde\xca\xba\x9c\xbe\xca\xba\xac\x01\x7d"
+ "\x38\x83\xfa\x50\x57\x30\xa0\x0f\x75\xd9\xf8\x6c\x19\xac\x0f\x0b"
+ "\xde\xf9\x66\xf5\x21\xf2\xf3\xff\x0c\x7d\xb8\x3f\xec\xf8\x37\x8c"
+ "\x3e\x7c\x4d\xff\x30\xd1\xa4\xd2\x07\xf4\x0f\x75\xe8\x1f\xea\x54"
+ "\xfe\xe1\x24\xe9\x83\xca\x3f\xd4\xa1\x7f\xa8\x0b\xe1\x1f\xb2\x3f"
+ "\xf8\x66\xf5\x61\xd8\xb1\xff\x0c\x7d\x78\xa0\xf1\xc2\xf4\xa1\xfe"
+ "\x6b\xfa\x87\x89\x65\x03\xfa\x50\x8f\xfe\xa1\x1e\xfd\x43\xbd\xca"
+ "\x3f\xfc\x19\xf5\xa1\x5e\xe5\x1f\xea\xd1\x3f\xd4\x87\xf0\x0f\x0f"
+ "\x7e\xfc\xcd\xea\xc3\xf0\xdf\xff\x67\xe8\xc3\xc2\xb0\xf3\xdf\x61"
+ "\xf4\xe1\xeb\xfa\x07\x87\x4a\x1f\xd0\x3f\xd4\xa3\x7f\xa8\x57\xf9"
+ "\x87\xf7\x48\x1f\x54\xfe\xa1\x1e\xfd\x43\x7d\x08\xff\x90\xf3\xd9"
+ "\x37\xab\x0f\xb7\x94\xff\x67\xe8\xc3\x43\xad\x17\xa6\x0f\x0d\x5f"
+ "\xd3\x3f\x98\x52\x07\xf4\xa1\x01\xfd\x43\x03\xfa\x87\x06\x95\x7f"
+ "\xd8\x84\xfa\xd0\xa0\xf2\x0f\x0d\xe8\x1f\x1a\x42\xf8\x87\x45\x67"
+ "\xbe\x59\x7d\x58\x78\xd7\x7f\x86\x3e\x2c\xee\xf8\x32\x7d\x50\x74"
+ "\x81\xf4\x82\x74\xa1\xaf\x24\x1b\x68\x9c\xf1\xca\x09\xa1\x0f\xa4"
+ "\x07\x5c\x27\x7a\xb2\xe3\x7d\xa8\x0b\xde\x27\x51\x17\x7a\x85\x2e"
+ "\x10\x2f\x48\x1f\x68\x5c\x41\xe3\x09\xd2\x09\x1f\x8e\x29\xbc\xb1"
+ "\x38\xa6\xd8\xa2\x4d\x20\x3d\xe8\x8d\xf9\x92\x71\x45\x2f\xf0\xb1"
+ "\x1f\x8d\xf1\x4e\x49\xb9\xbe\x50\x7a\xf0\xfc\x05\xce\xf1\xf5\x8f"
+ "\x2f\x03\xf4\xe0\x83\x01\x3d\x78\x20\xcc\xb8\x62\x41\x18\x3d\x70"
+ "\x9c\x87\x1e\x9c\x1a\x3c\xce\xfc\xba\x7a\xd0\xbb\x5a\xd6\x03\x1a"
+ "\x67\xfa\xe5\x71\xe6\xc3\x38\xce\x8c\xbd\x50\x3d\x58\xe2\xf8\x6a"
+ "\x7a\x50\x6f\xba\x30\x3d\x98\x58\x46\x71\x82\xd0\x83\xfa\x1c\x6f"
+ "\x2c\xc6\x0a\x01\x7a\x70\x8e\x78\x21\x40\x0f\x96\x46\x7e\xb3\x7a"
+ "\x10\x14\x2f\xfc\xdb\xea\xc1\xd2\xb0\xfb\xbf\xfa\x51\xee\xe4\xef"
+ "\x69\xde\x9e\xbe\xdd\x88\x73\x8a\x79\x23\xfa\x86\x63\xfb\x2a\x48"
+ "\xa2\x3e\xc2\xb7\x3e\x3b\xbe\xe2\x14\xa4\x6d\x5b\x05\x5a\xef\x5a"
+ "\x94\xff\x1a\xd0\xf6\x4a\x00\xbd\x6b\x2d\xf1\x87\x3a\x9d\x62\x0e"
+ "\xa9\xc8\x06\xf5\x08\xdf\x57\x21\xe6\x90\x7c\x3d\xd9\x71\xdb\x3e"
+ "\x07\xbe\xee\xd5\xb6\x68\x37\xca\x36\xef\xd3\x50\xb2\xfd\xe9\x05"
+ "\xf8\xfa\x5e\xb5\xaf\x3f\x19\x28\x5b\xb5\x9f\xaf\xb5\xaa\xe6\x90"
+ "\xe6\x84\x99\x43\x3a\x0f\x99\xf2\xb9\xfd\x53\xc2\xcf\xf7\xcf\x21"
+ "\x7d\xcd\x39\xfe\x3e\xf4\xf1\xcf\x4b\x81\x3e\xfe\xab\xc9\x74\xd9"
+ "\xfe\x73\xcd\x3b\x92\x7d\x93\x5d\x2b\x36\xdd\xdf\xc7\x93\x1d\xa3"
+ "\xbc\xcf\x56\xec\xdc\xc7\xfb\xfa\x27\x07\x6c\x9a\x6c\x99\xec\x9a"
+ "\xec\x98\xf7\xf5\xb4\xcf\xef\x33\xa6\xea\x3a\xd5\xdc\x91\x2f\x56"
+ "\xf6\xf3\x21\x7c\xbc\xff\x9c\x3e\x7e\x79\x48\xf9\xff\x2b\xf8\x78"
+ "\xd2\x03\xc5\xbe\xff\xf9\x6c\xfb\x91\xf0\xeb\xbf\xce\x4b\x0f\xea"
+ "\x52\xbe\x5c\x0f\xea\x4c\xa8\x07\x9d\x75\xaa\x39\x23\x5f\x6c\x1d"
+ "\xfa\x79\x31\x67\x24\xf4\x60\x60\xce\xc8\x1f\x3c\x67\x14\xa0\x07"
+ "\x96\xbf\x7d\xb3\x7a\x10\x34\x67\xf4\x6f\xab\x07\x2b\x0e\x7d\x4d"
+ "\x3d\x38\x0f\x7f\x50\x87\xfe\x60\x52\xaa\x4a\x0f\xd0\x1f\xd4\xa1"
+ "\x3f\xa8\x53\xf9\x83\x81\xb9\x22\x7f\xf0\x5c\x51\x80\x1e\x3c\xfa"
+ "\xf7\x6f\x56\x0f\x82\xe6\x8a\xfe\x6d\xf5\xe0\xb1\x23\x5f\x4f\x0f"
+ "\xea\xcf\xc3\x1f\xd4\xa3\x3f\x98\x54\x51\xa7\x9a\x23\xf2\xc5\xca"
+ "\x71\x5f\x88\x98\xcf\x7f\xce\x98\x2f\xff\xec\xbf\x6a\xcc\xf7\xcf"
+ "\xad\x07\x2b\xc3\xbe\x2b\x3d\x4f\x3d\x38\x0f\x7f\x50\x4f\xfe\xc0"
+ "\xa1\xd2\x03\xf4\x07\xf5\xe8\x0f\xea\x55\xfe\x60\x60\x6e\xc8\x1f"
+ "\x3c\x37\x14\xa0\x07\xab\x35\xdf\xac\x1e\x04\xcd\x0d\xfd\xdb\xea"
+ "\xc1\xea\xce\xaf\xa7\x07\x0d\xe7\xe1\x0f\x1a\xd0\x1f\xdc\x94\x52"
+ "\xa7\x9a\x13\xf2\xc5\x36\xa0\x3f\x68\x50\xf9\x83\x81\x39\x21\x7f"
+ "\xf0\x9c\x50\x80\x1e\x3c\x1e\xf5\xcd\xea\x41\xd0\x9c\xd0\xbf\xad"
+ "\x1e\x3c\x1e\x76\x5d\x85\xa2\x03\xfd\x73\x00\x6c\x40\x0f\xb8\xec"
+ "\xd7\x66\xc7\xf7\xc6\xec\xdc\xa7\x8c\xff\x2b\x06\x8d\xff\x4d\xd5"
+ "\x61\xe7\x81\x82\xde\x2f\xf3\xb1\x41\xd5\xce\x26\x31\x4e\xd8\x9d"
+ "\x4b\xf2\xff\xfe\x46\x31\x4e\x34\x2e\x20\xf9\xaf\x0d\x2d\xff\x0b"
+ "\x9d\x13\xcc\x43\xf9\x77\x9e\x43\xfe\x0f\x85\x19\x27\x3c\xf8\xf5"
+ "\xe4\x4f\xeb\x1d\xfb\x4e\x5f\x44\xf9\x2b\x73\x82\x7f\x06\xe9\xf9"
+ "\xaf\x35\x5e\x5c\x1b\x56\xfe\x21\xd7\x93\x34\x8a\xf5\x24\xb4\x96"
+ "\xe4\x70\x57\x17\x6c\xfb\x02\xf4\x71\xf9\x42\x27\xf8\x9a\x12\xd4"
+ "\x89\x8a\x13\x90\xe6\x15\x6d\xeb\x5f\x53\x42\xfb\xa2\x0b\xbf\x60"
+ "\xe3\x6b\x4a\x94\xf9\x80\xfe\xf5\x24\x8b\x68\x3d\x49\xe1\xc9\xaf"
+ "\x3d\x17\x40\xeb\x49\x0a\x51\xc6\x2e\x94\xf1\x19\x92\xef\x07\x01"
+ "\x76\x1d\x30\x07\x10\x6e\x1d\xc9\xf9\xcc\xeb\xfc\x03\xd6\x91\xf0"
+ "\x39\x80\x8b\x62\xd3\x4f\xd8\xc2\xfa\x76\x94\x23\xc9\xd3\x9e\xec"
+ "\xe5\xf3\xba\x8a\x8d\xdb\x8b\xda\x61\x5b\x2f\xe8\x95\xf9\x7f\x45"
+ "\xa6\xe4\xef\x19\xea\x01\x3b\x9d\x1d\x4b\x32\xfd\xfe\x2a\xf4\xf3"
+ "\xab\x07\xfc\xbc\x7f\xc8\x84\xd2\x9d\x1b\xd1\xbf\x6f\x84\x14\xce"
+ "\xa3\xb8\x86\x26\x31\x1f\xb0\x3b\x97\xec\x9d\xec\x99\xc5\xee\xec"
+ "\xea\x93\xed\x5d\xc8\xbb\x0d\x48\xce\xe2\xfc\xcc\x75\x9f\x92\xed"
+ "\x91\xcc\xe3\x64\x99\xd7\x85\x91\x39\x97\xb7\x46\x4f\x7b\x71\xd0"
+ "\x77\x66\xfd\x32\xf7\x3e\xa5\x9a\xff\x51\xcb\x5c\x9e\xf7\xf1\xa3"
+ "\x2d\x9f\xd7\xfa\xa1\xf3\x94\xfb\x45\x9b\xdf\x47\xb9\xd7\xc9\x72"
+ "\xef\x9f\xdf\xff\x5a\x72\x5f\x1f\xfe\xfb\x97\x00\xb9\xd7\x99\x2e"
+ "\x82\xdc\x3b\x06\xcb\x9d\xc6\xff\x24\xf7\xba\x2c\x1a\xe7\xb3\xd8"
+ "\x3a\x4b\x9f\xbc\x6e\x64\xb0\xdc\x8b\xfe\xf8\x8f\x97\x7b\xe4\xe7"
+ "\xff\x19\x72\xdf\x10\x76\xff\xf3\x20\xb9\x5f\x04\x7b\x9f\x68\x0a"
+ "\x21\x77\xd9\xde\xeb\x8e\xd0\xb8\x1e\xe5\x2e\xdb\xfb\xc9\x10\x72"
+ "\xdf\xf8\xbb\x7f\xbc\xdc\x87\x1d\xfb\xcf\x90\xfb\x93\x61\xd7\x7f"
+ "\x04\xca\xbd\xfe\x22\xd8\xfb\xc4\xb2\xc1\x72\xaf\x97\xed\xbd\x3e"
+ "\x8b\xc6\xf1\x2c\xb6\x5e\xb6\xf7\x3f\x87\x90\x7b\xf1\x6f\xff\xf1"
+ "\x72\x1f\xfe\xfb\xff\x0c\xb9\x6f\x6a\x38\x4f\xb9\x5f\x0c\x7b\x77"
+ "\x84\x90\xbb\x6c\xef\xf5\x47\x68\xdc\x8e\x72\x97\xed\xfd\xbd\x10"
+ "\x72\xdf\xfc\xab\x7f\xbc\xdc\x6f\x29\xff\xcf\x90\x7b\x49\xd8\xf5"
+ "\x7f\x81\x72\x6f\xb8\x08\xf6\x6e\x4a\x1d\x2c\xf7\x06\xd9\xde\x1b"
+ "\xb2\x68\x9c\xce\x62\x1b\x64\x7b\xdf\x14\x42\xee\xa5\xbf\xf8\xc7"
+ "\xcb\x7d\xe1\x5d\xff\x19\x72\xdf\x52\xfd\x65\xef\xeb\x15\xd9\x2b"
+ "\x73\x36\xfc\xfd\x2c\xc6\xf7\x8a\xbc\x49\x0f\x48\xe6\xa4\x0b\x6a"
+ "\x99\xf3\x35\x3c\xab\xc5\x1a\x1e\x8a\xdb\x19\x8e\xc5\xd9\x10\xbe"
+ "\x7e\xa3\x8b\x8f\xdb\xe5\x38\x9e\x69\xb4\x09\x14\xcb\x87\x8f\xe3"
+ "\xad\xaf\x28\xf2\xfe\xaa\x63\xb7\x2f\x93\x77\xf0\x98\xfc\x9f\x45"
+ "\xde\xea\xf1\xdb\xc5\x91\xf7\x53\xa5\x5f\x4d\xde\xf5\xa6\x0b\x93"
+ "\x77\x7d\xa6\x90\x37\x5f\xa7\x61\x19\x90\x77\x7d\x96\x90\x77\x7d"
+ "\x76\xf8\xfe\x7c\xeb\x73\xff\x78\x79\x07\xce\xc9\xff\xfb\xca\xfb"
+ "\xe9\xb0\xe7\x7f\xd0\x1c\x0c\xc9\x9a\xe4\xbe\xfd\x51\x48\xfa\xfe"
+ "\xa3\x62\x6e\xc5\x7b\xda\x40\x3e\x5f\x4b\xf2\xa7\x6f\x7c\xe2\x50"
+ "\x07\x3e\xca\x76\x42\xaf\x3b\x1b\xe8\x5b\x1e\x5a\x77\x71\xd8\xe2"
+ "\x00\x7b\xd1\x87\xb0\x6d\x0d\xe8\x0f\xe5\x7e\x0e\x73\x1a\x59\x9f"
+ "\xfd\xa8\x8d\xbe\xf1\xd6\xda\x36\x7e\x08\x6c\x75\x72\xf4\x22\x17"
+ "\x48\xa7\xa4\x67\x92\x69\xdd\xc6\x04\x17\xf2\x84\xbe\xf7\x41\x99"
+ "\x6f\x3b\x05\xf0\x41\x21\x80\x71\x39\xc9\xfa\x99\xa7\x23\x9f\x08"
+ "\xf1\x9d\xcf\x85\xcc\xcb\xa8\xe7\x5e\x43\xc8\xfa\xa7\xd2\xc5\x59"
+ "\x9b\xa1\xac\xcb\x08\x98\x97\xf9\xba\xdf\x5f\x5e\xb4\xb5\x19\xdf"
+ "\x0b\xbb\x97\x13\xad\xb7\x21\x79\x92\x4d\x7b\xab\xc4\xbc\x8c\xbd"
+ "\xa8\x15\x68\x5d\x0d\xd9\xb0\xaf\xc7\xa0\x7b\xb2\x10\x6d\xbd\x43"
+ "\xd8\xfa\xf7\x3f\x47\xd8\xdc\x3f\x01\xe9\x87\x90\x6d\x9f\x90\xed"
+ "\xe7\x24\xdb\x3f\x01\x5b\x9b\x1c\x7d\x4a\x2a\x03\x92\x2f\xc9\xb5"
+ "\xe4\x8f\xa0\x5f\x4c\xfb\xa2\x90\x8f\x47\xff\x8e\x72\x4e\xad\x7f"
+ "\x14\x52\xc8\xfe\x7d\x95\x3b\x8f\x78\x2b\xc5\x1a\x0d\xf2\xfb\x7d"
+ "\x31\x2f\x75\x94\xaf\x91\xe5\xff\x20\xc9\xbf\x2c\xa4\xfc\x7f\xfa"
+ "\x55\xe7\xde\x65\xf9\x7f\xe5\xef\x7a\xfe\xaf\xec\x7d\xf5\xc5\xb2"
+ "\xf7\x6d\xb9\xe7\xa7\x07\x62\x9e\xe6\xc2\xf4\xc0\x1d\x42\x0f\xca"
+ "\x75\x83\xf5\xa0\x2e\x13\xf5\xa0\x23\x50\x0f\xea\xb2\x84\x1e\xd4"
+ "\x65\x63\xbe\x65\xb0\x1e\x94\x57\x7e\x33\x7a\x70\x9e\xdf\xf3\xfc"
+ "\xcb\xeb\xc1\xf7\x2d\xe7\xa9\x07\x5f\xc1\x1f\x9c\x0e\xa1\x07\x15"
+ "\xfa\x10\x7a\x80\xfe\x60\xa2\x29\x48\x0f\x64\x7f\x50\x87\xfe\xa0"
+ "\x2e\x84\x3f\xa8\xf8\xf1\x37\xa3\x07\xe7\xf9\x1d\xcf\xbf\xbc\x1e"
+ "\x54\x86\xed\xff\x03\xf5\xa0\xfe\x2b\xf8\x83\x4f\x42\xe8\x41\x95"
+ "\x61\xb0\x1e\x60\x2c\x88\x71\x60\xa0\x1e\xd4\xcb\xfe\xa0\x3e\x9b"
+ "\xe2\xc3\xc1\x7a\x50\xb5\xf3\x9b\xd1\x83\xf3\xfc\x7e\xe7\x5f\x5e"
+ "\x0f\xb6\x87\xfd\xfe\x37\x48\x0f\xbe\x82\x3f\x78\x3f\x84\x1e\x54"
+ "\x1b\x43\xe8\x01\xf9\x03\x47\x90\x1e\xc8\xfe\xa0\x1e\xfd\x41\x7d"
+ "\x08\x7f\x50\xfd\xe2\x37\xa3\x07\xe7\xf9\xdd\xce\xbf\xbc\x1e\xfc"
+ "\x20\xec\xf8\x2f\x50\x0f\x1a\xbe\x82\x3f\x28\x09\xa1\x07\x3f\x4c"
+ "\x1e\xac\x07\x0d\xe8\x0f\x4c\xa9\x81\x7a\xd0\x20\xfb\x83\x06\xf4"
+ "\x07\x0d\x21\xfc\xc1\x0f\x5f\xfb\x66\xf4\xe0\x3c\xbf\xd7\xf9\x97"
+ "\xd7\x83\x1f\x85\xfd\xfe\x5b\xad\x07\x7d\xfd\xe3\x85\x66\xae\x07"
+ "\xe5\x1b\x85\x1e\x6c\x22\x3d\xe8\x12\xeb\x77\x2a\x64\x3d\xe8\x1f"
+ "\x2b\x74\x06\xeb\xc0\x8e\x71\xfd\x3a\xf0\xb7\x81\xb1\x42\x1f\xca"
+ "\x9b\xcf\x07\xc9\xe3\x04\x65\x1e\x88\x8f\x13\x70\x9c\x58\xfe\xb9"
+ "\x2c\x7f\x3e\x27\xb0\x23\xb4\xfc\x2f\x60\x9c\x18\xb0\x46\x23\x58"
+ "\xfe\xff\xe4\xdf\xe9\x0c\x9a\x17\xf8\xe3\xd7\x5d\x9b\xf1\xe3\xf3"
+ "\x94\xbf\x12\x17\x9c\xaf\xfc\x3f\x09\x21\xff\x67\x43\xc8\xbf\x3e"
+ "\x53\xc8\x7f\x62\x99\x12\x0f\x28\xf3\x42\x3c\x1e\x18\x24\xff\x67"
+ "\xbf\x21\xf9\xff\x73\x7e\x9f\x73\xf1\xe5\xff\x93\xb0\xf2\xf7\xa1"
+ "\x0d\xec\x94\xfc\x4d\xd5\x92\xbf\x19\x2f\x1b\x5e\xad\x98\x16\x89"
+ "\x69\x7c\xaf\xcf\x6a\x39\xcf\x57\x0e\xb4\x77\x92\x2d\x5e\x93\x4b"
+ "\xfc\x26\x98\x21\x0a\x4c\xfc\x16\x30\x63\xdb\x04\x9c\x04\xa5\x98"
+ "\x6e\x8b\xdd\x62\x1e\x82\xf0\xad\xac\x3c\xd3\x83\x69\x43\x09\x96"
+ "\x6d\xd1\xf2\x7d\x8f\xe3\x35\x7c\xef\x4c\x19\x5e\x43\x7b\x65\xd9"
+ "\x08\x16\xe1\x74\x32\x5c\x22\xdf\x1b\x48\x92\xa0\x7e\x30\x6d\x51"
+ "\x32\x0c\xed\x59\x65\x54\xd3\x18\xab\x31\x73\x5c\x32\x5c\xb4\xcf"
+ "\x7a\x8c\x9e\xdb\x7d\x5b\xb4\x49\x6a\x38\x76\x17\x10\x5e\x05\x6e"
+ "\x98\x8c\x2f\x39\xa0\xbd\x63\x00\x62\xb7\x18\x39\xbe\xd8\x6e\x09"
+ "\x64\xfa\x50\x27\x32\x0e\x71\x78\x8d\x76\x5c\x00\xfc\x10\x50\xb7"
+ "\x23\x96\x0d\xf9\x4e\x91\x0c\x67\xf2\x4b\xc0\xcf\xb5\xc4\x74\xad"
+ "\x9a\xd7\x32\x6c\x9c\xc2\x47\xda\xd3\x49\xdd\x5e\x1f\xb6\x7f\xa7"
+ "\xa0\x31\xde\xf7\xcc\x4d\x65\x72\x5b\x52\xd5\xf5\x12\x1c\x96\x9b"
+ "\x24\xcb\x44\x8f\xed\x48\xeb\xc7\x57\xb1\xb2\x4c\x81\x43\x9d\x1d"
+ "\x89\x32\xb2\xd9\x71\xa4\x28\xb7\x7b\x38\x2b\x9f\x5b\x21\xb7\xdd"
+ "\x1c\xc8\x47\x8d\x43\xe1\x23\xc2\x98\x11\x76\x04\xc2\x4c\x53\xf0"
+ "\xfa\xac\x7c\x1f\x2d\xd1\x6e\xab\xf7\x12\xd2\x8b\xb6\x2e\x80\x3a"
+ "\xd1\x9e\x4b\x64\x9c\xe9\xa2\xcd\x7a\xd8\xd9\x2f\x6b\x2d\xe5\xd9"
+ "\x64\xb8\x04\xde\x9e\xe8\x5c\xa3\x4f\xa3\x9d\x35\x18\x56\xa7\x86"
+ "\xbd\x54\xc0\xce\xb7\x21\x6c\xe6\x60\x58\xbd\x1a\xf6\x32\x01\x7b"
+ "\x5f\x3b\xc2\x66\x0d\x86\xf5\x8e\x50\xc1\x5e\x2e\x60\xef\x77\x20"
+ "\x6c\xf6\x60\x58\xa3\x1a\xd6\x20\x60\x1f\x4e\x46\xd8\x9c\xc1\xb0"
+ "\x66\x35\xec\x48\x01\xfb\x80\x13\x61\x73\x07\xc3\x96\xaa\x61\xaf"
+ "\x10\xb0\x39\x80\xb0\x79\xc1\xb0\xf5\x5c\x0f\x60\x8c\xac\x07\x57"
+ "\x0a\xd8\x45\x7a\x84\xb5\x84\x68\x5b\x04\xc7\x2b\x60\x13\x05\xec"
+ "\xdc\x4e\x84\xcd\x0f\x21\x0b\x35\xec\x55\x02\x76\x4d\x0a\xc2\x16"
+ "\x84\x90\x85\x1a\x76\x94\x80\x5d\xae\x45\xd8\xc2\x10\xb2\x50\xc3"
+ "\x5e\x2d\x60\x2d\x31\x08\x5b\x14\x82\xbf\x03\xb0\xd1\x8f\x26\x20"
+ "\x4c\x31\xf2\xa4\x3d\x04\x6f\xd5\x38\x47\x0b\x9c\xf9\x89\x08\x5f"
+ "\x1a\x82\xb7\x6a\xd8\x31\x02\x76\x55\x12\xc2\x6e\x1d\x0c\x0b\x9a"
+ "\x9d\x82\xbf\x37\xc9\xfc\xbd\x46\xc0\x17\x8c\x43\xf8\xb2\x10\xfc"
+ "\xa5\x7c\x9b\x6c\x6b\x49\x02\x36\xcf\x84\xb0\x15\x21\xf8\xab\x86"
+ "\xbd\x56\xc0\x6e\xe9\x40\xd8\xea\x10\xfc\x55\xc3\x5e\x27\x60\xd7"
+ "\xe9\x10\x76\x47\x08\xfe\xaa\x61\xaf\x17\xb0\x45\xa4\x3b\x35\x21"
+ "\xe8\x1d\xa3\x82\x4d\x16\xb0\x1b\x3c\x08\x5b\x1b\x42\x16\x6a\xd8"
+ "\xb1\x02\xf6\xa9\x56\x84\x6d\x08\x21\x0f\x35\xec\x0d\x02\xf6\x49"
+ "\xd2\xf5\x3d\x21\xe4\xa1\x86\xbd\x91\x45\x6f\xea\x92\xfd\x62\x63"
+ "\x30\x2c\xca\x5e\xf8\x44\x2b\x8c\x63\xd1\x25\x0e\xbc\x27\xb8\xbd"
+ "\x04\xd7\x8f\xcf\xea\xfd\x0e\xf9\x1b\xd9\x87\x8d\x67\xd1\x85\x29"
+ "\x32\xbe\xa6\x41\x75\x5b\xb5\x6a\xd8\x09\x2c\xfa\x47\xed\x32\xec"
+ "\xbe\xc1\xb0\x3a\x35\xec\x44\x16\xfd\xbd\x06\x19\xb6\x79\x30\xac"
+ "\xbe\x1f\x96\x45\x6f\x6b\x44\x98\xfd\x75\xb2\x6f\x54\xd1\x79\x93"
+ "\x0a\xdf\x24\x16\xfd\xfd\x26\x19\x9f\x6d\x30\x3e\xa3\x1a\xf6\x26"
+ "\x16\xfd\x63\x85\xce\x96\xc1\xb0\x66\x35\xec\x77\x58\x74\x65\xb3"
+ "\x0c\xdb\x3a\x18\xb6\x54\x0d\x9b\xc2\xa2\xb7\xdb\x64\xd8\x43\x83"
+ "\x78\x4f\x76\x60\xc5\x58\x40\xf8\xa4\x9b\x59\xf4\x0f\x5a\x65\xd8"
+ "\x80\x38\x40\xd5\x0f\xdf\x22\xe4\xfe\x74\x33\xca\x9d\x7f\x13\x84"
+ "\x3e\xbf\x23\x54\x8c\x51\x70\x03\x0c\x3b\x21\x35\x14\x8b\x3e\x49"
+ "\x39\xf7\x6a\x17\x6f\x9b\xbf\xd6\x52\x9d\xe1\x62\x5e\x75\xda\x76"
+ "\x89\xb5\x4f\x74\x81\x96\x9f\xa5\x12\xfb\x52\xb3\x03\xd3\x9d\x57"
+ "\x59\x9a\xdc\xe5\x0d\x65\x0e\xcd\xf8\x66\xda\xc7\x0f\xef\x77\x38"
+ "\xe0\x31\x7e\x0e\xd0\x76\x2b\xf3\xd0\xfe\x95\xbe\xaa\x95\x99\x76"
+ "\x7f\x37\xc6\x72\xcc\x83\x38\x3c\x18\xcb\x45\x18\x71\x5c\x59\x52"
+ "\xc4\x7a\xed\x45\xdd\x70\x5c\x6a\xf8\x23\x5b\x6d\x49\x43\x1a\x0a"
+ "\xb0\xbe\xbc\x63\xf8\xcc\x69\xc0\x18\x08\xfb\xca\x7c\xdb\x1a\xda"
+ "\x47\x74\x57\x94\x33\xf6\xe5\x02\xf6\xd4\xc2\xae\x82\xcd\x70\xf5"
+ "\x09\x69\x97\x8e\x60\xf8\x1e\x83\xa7\x2d\x77\xf8\x63\x57\xe6\xd3"
+ "\xde\x83\xac\xa6\x31\x53\xec\x4b\xb8\x8b\x9f\xed\x88\x34\xb4\xb3"
+ "\x44\x4b\xa9\xbf\x77\x6b\x29\x9d\xab\x66\xdb\x7c\x02\x8e\xa9\xf2"
+ "\x9c\x23\x1b\xf9\x9e\x85\xd8\xa6\x52\x5f\x59\x5b\xb6\x5f\xd7\x96"
+ "\xc5\xca\xfe\xd0\x64\xcf\x77\x80\x38\xf3\x65\xd7\x07\x2c\xee\x01"
+ "\xbb\xbf\xac\x2d\x0d\xd3\x1b\xec\xae\x5e\x9e\x8e\x38\xaa\x29\xbe"
+ "\xec\xd1\x1d\x49\x67\x65\x47\x66\xd9\xae\xe8\x85\x4e\x69\x17\xb7"
+ "\x5f\x4a\x67\xdb\xfe\xd0\x44\xfc\xf1\x6f\xfb\x43\x43\x84\x01\xb4"
+ "\x3d\x51\x47\xd2\xdd\xe5\xbb\x9a\x94\xb3\x47\x94\xba\x08\xaf\x43"
+ "\xc6\x15\x66\xdd\x47\x3c\xab\x5c\x59\x86\x65\xbb\x31\x5e\x6c\x15"
+ "\x3c\xde\xe5\x71\x68\x86\x4c\x13\xf7\xbb\xb5\x0e\x4d\x54\xa2\x7c"
+ "\xaf\x77\x68\x92\x0c\xf2\x7d\xa2\xb2\xa7\x63\xe8\x3d\x26\x57\xe6"
+ "\x20\x6f\x0b\xfd\x3f\xcd\xd6\x51\xac\x4b\xf1\x3b\x8b\x5d\x99\x63"
+ "\x1c\x45\xe7\xf5\xed\xde\x87\x75\x16\x8a\xfd\xfd\x77\x6f\xc0\xdf"
+ "\x78\xf9\xd7\x29\xff\x32\x82\xe1\x7a\x93\xb8\x02\x58\xc5\xae\x74"
+ "\xe2\xed\x66\x1f\xf3\x23\xde\x1a\xe4\x53\xa3\xbd\xa8\x4b\xe6\xdf"
+ "\xee\x17\x79\xdc\x4f\xb2\x43\xf9\xb2\xa8\x3f\x34\xf2\xba\x2a\x5f"
+ "\x2e\x50\xd3\x65\x9a\x74\xd3\x77\x52\x6e\xbe\xe5\xbb\xa9\xb7\x2e"
+ "\x79\x78\x69\xde\xb2\xe5\x8f\x58\x56\x3c\xfa\x58\xfe\xca\x55\xab"
+ "\x0b\x1e\x5f\xb3\xb6\xf0\x89\x75\xeb\x8b\x36\x6c\x44\x3c\xfd\x67"
+ "\xb5\xb1\x9f\x4e\xd3\xb8\x24\xc0\x3a\xee\xc2\x3a\x5e\xb8\x94\xd3"
+ "\x82\x69\x42\xf6\x2f\x68\xb5\xc6\xd0\x71\xb5\x1d\x23\x5d\x3a\x3f"
+ "\xa6\x5b\x7a\x61\x09\x9d\x65\x83\x3a\xa6\xb1\xd7\xde\x6d\xa3\xf3"
+ "\xc5\x3a\xa5\x17\xb2\x0e\x3b\xef\xb6\xd1\xf9\x76\x07\x0c\x5d\x90"
+ "\x34\x86\xce\x20\x7b\xc1\x4c\xf9\xf5\xd7\x01\xb4\x60\xd9\x50\x38"
+ "\xc7\xe8\xc1\xf0\xa3\xcb\x98\x73\xc7\x65\xac\x9b\xf0\xef\x78\x96"
+ "\x75\x39\x9f\xb4\x40\x15\x3e\xa3\x9e\xeb\x8f\x4b\x7b\x2e\x3d\x90"
+ "\xc8\xcf\x69\x4a\xac\x7b\x96\x75\x6e\xbd\x8c\x75\x3e\xf5\x2c\xeb"
+ "\xae\xbf\x8c\x39\x92\x76\x40\x8c\xbb\xfc\x85\x56\x87\xf4\x82\x91"
+ "\xdb\x0c\xe6\xfb\xa3\x77\xdb\xb6\x63\xde\x44\x2f\x44\xd4\xe3\x33"
+ "\xa6\xb9\x0e\x18\x05\xdd\x6f\x7c\xee\x89\xc4\xf6\xed\x65\x7d\xf9"
+ "\x9a\x2a\xac\x47\xc8\x68\xcf\xad\x2d\xd8\x8b\x63\x7d\x4e\xbb\xe7"
+ "\x18\x38\xa4\x3d\xa9\xf5\x5f\xf0\xfa\xe2\xed\x35\xdd\x40\xf8\x5e"
+ "\x5f\xe3\x89\x5c\x7b\x05\xf3\x22\xac\xc1\xff\x64\xbe\x06\xeb\x73"
+ "\x21\x6e\x97\xba\x3d\xc9\xcb\x51\xe6\xab\x9e\xc8\xcf\x1f\x1b\x0d"
+ "\xc9\xfc\x37\xe0\x6c\xbc\x42\xda\x5f\xf6\x47\xcf\xb2\x16\x6c\xa7"
+ "\x0d\xdb\xdb\xda\x86\xd1\x3b\xea\x0b\x60\x9b\xaa\x11\x6f\x25\xa6"
+ "\xef\xc7\xfb\xfd\x48\x7b\xab\x38\x4f\xed\x9d\x5f\xb0\xf2\x3d\xd3"
+ "\x90\xce\x56\x3a\x63\x83\xf6\xa3\xed\x59\x9f\xa5\xc1\x76\xef\x40"
+ "\xb8\x56\xe3\x15\x70\xed\x71\xe9\xc5\x4b\x91\x8e\x3d\x78\x4f\xf0"
+ "\xbf\x22\x39\x22\x7c\x8b\x68\xd7\x3b\xfc\xec\x4c\xe4\x95\x6d\xe7"
+ "\x65\xac\xc2\x5d\xbe\xc7\x49\xfb\x6c\xf3\xf3\x88\xf0\x19\xf9\xd2"
+ "\x8a\xb0\xd5\x3d\x25\x59\x1a\x1c\x07\x6a\xea\xfb\x71\xee\xb1\x11"
+ "\x4d\x44\x07\x8d\x2d\x3f\xc2\xe8\xcd\xdf\x97\x0d\xe3\x3d\xa0\xf9"
+ "\xa8\x13\xa0\xf6\x59\xd6\x80\x57\x2d\x5e\x35\x1f\x62\xde\x6f\xf1"
+ "\x6a\xc5\xf4\x43\xf8\xfb\x21\xfe\xfe\x16\x2f\x1c\x9b\x1a\x88\xee"
+ "\xb5\xc5\xac\x6b\x62\x0d\x5c\x43\xf8\x51\xb7\xee\x3f\x26\xbd\xa3"
+ "\x27\xda\x69\x1f\x7b\x16\xfd\xe2\xd6\xc0\xbd\xbf\x5f\xf2\x00\xe6"
+ "\x83\xf4\x72\x8c\xf8\x55\x5f\x2f\x67\xe1\x55\x28\xdf\xef\x47\xd8"
+ "\x4e\xf9\xbe\x1d\xaf\xa3\x5f\x7e\x05\xe3\x0b\x77\x35\xa6\x9f\x3f"
+ "\xec\x79\x5d\x5b\xcf\x0f\xee\x55\x00\x69\x6f\x36\x5e\xd5\x81\xe9"
+ "\x7b\x2d\x22\xed\xcd\x14\xf1\xfc\xa6\x59\xfe\xcd\x07\xe9\x2d\xe4"
+ "\xd3\x5b\x88\xff\xad\x46\x91\xf6\xd6\x3e\x90\xf6\x79\xf1\x5e\x17"
+ "\x54\x3f\xe1\xac\x25\x79\xf6\xd1\xd9\x6e\x28\x4b\x87\xf4\x62\x16"
+ "\xc9\x68\xbb\xd0\x2d\x8d\x9f\xf1\xb4\x4c\xd4\xad\xda\x01\xfd\x79"
+ "\x79\x7a\xa0\xfe\xbc\x6c\x0a\xd2\x9f\x6a\xf2\x45\x68\x2f\xb5\xf5"
+ "\x42\x5f\xf6\xf7\x3c\x99\x87\xcf\x2f\xa7\x20\x9e\xfd\x34\xe7\x81"
+ "\x38\x78\x3c\xb4\xfd\x04\x8e\x3b\x2d\xa0\x25\xff\xd2\x2d\xbd\xfc"
+ "\x34\xe9\x2c\xd5\x2d\xd7\x2b\x68\x41\xfa\x30\xad\x81\xe8\x5b\x8d"
+ "\x78\xf1\x79\x0f\xc2\x35\xd8\xe1\x73\x85\x36\x5e\xa6\xfc\x51\xd4"
+ "\x47\x99\x5e\xc2\x49\xe5\xd8\x40\xbb\x32\xa9\x8c\xa8\xbb\xf1\x56"
+ "\x4c\xa7\x71\x2a\x7d\xcf\x14\x61\xf7\x3a\x80\x74\x92\x7e\xed\x5e"
+ "\x13\xda\x52\x3a\xf8\xdd\xd9\x30\xd1\x00\x26\xb4\xb7\xa8\x63\x52"
+ "\x63\xe2\x84\x62\x30\x11\x3e\xf2\xe9\xd8\x0e\x47\x3d\xd9\xa2\xc0"
+ "\x25\x9f\xff\xf7\x62\xe6\x87\x05\xc0\xeb\xa9\x23\x7a\x30\x5f\x55"
+ "\xef\x0e\x1a\x87\x6e\xdf\x28\xda\x8a\x75\xed\xc1\xf2\x4d\xd4\x76"
+ "\xe2\x27\xe6\x37\x23\x9e\x22\xca\xe3\x67\x01\x89\xf6\xec\xa1\xf3"
+ "\x22\x88\x1f\x04\x4f\xe7\x35\x8a\x7d\xbf\xf7\xec\xe4\x7c\xc3\xf2"
+ "\x24\x0f\x86\x75\x10\x8e\x12\x2f\xf3\x32\xf4\x47\x2f\x6c\xf4\x60"
+ "\x5c\xf1\xca\xdf\x03\xe5\xd3\xd8\xae\x96\x0f\x96\x6b\xc2\xf2\x2d"
+ "\x0c\xdb\x48\xfe\x04\xeb\x8c\xa7\x33\xe2\x30\xad\xda\x5f\x8e\x38"
+ "\xd6\x79\xf8\x3c\x0d\xe2\xf9\x14\x69\xa9\x26\x3c\x48\x4f\x8b\xc0"
+ "\xf5\x4a\xe2\xaf\x8a\x03\x65\x2d\xe3\xdb\x43\x32\xe7\xf6\xbc\x91"
+ "\xb7\x09\x7d\xd7\x2b\x6f\xd6\x89\xbc\x66\x84\x69\x66\x7d\xe9\x40"
+ "\xe7\x2f\x88\xbe\x84\xe7\xed\x2b\x39\xcb\xe5\xdb\x22\xfc\xda\x2b"
+ "\xbf\x5b\xbb\x89\x75\x0d\xd0\xfd\x4a\x99\x72\x86\x85\x4c\xf7\x3e"
+ "\xaa\x8f\xad\xcf\xe1\xfd\x2a\xd5\x41\xe5\x65\x7c\x79\x84\x4f\xe1"
+ "\xd5\x04\xa4\x43\xf0\xab\xb1\x06\xd3\xf7\x90\x2e\x72\xbe\xa1\x1f"
+ "\xed\x29\x21\x5d\x7c\xa5\x02\xcb\xef\xaf\xa2\xe7\xf5\xfc\xd9\xc8"
+ "\x7d\x6c\x7f\x7e\xe3\x11\xca\xb7\xe3\x38\x7f\xfb\x63\xa8\x4b\x7e"
+ "\x80\x6b\x12\xc0\xe4\xb2\xf2\xb6\xed\x75\x3d\x39\x4d\x73\xc0\x0b"
+ "\x40\x74\x22\x8f\x9a\xdd\xe5\xaf\xa6\xa0\xef\x2f\x24\x5a\xd1\x5f"
+ "\xef\x63\x2f\x64\x03\xd1\x8c\xfe\x4c\xa6\xef\xd5\x17\x65\xd9\xef"
+ "\xa3\x36\x12\x3f\x27\x08\xdf\x87\x79\x7b\x67\x12\xed\x03\xed\x7e"
+ "\xb5\x54\xcd\x63\xde\x6e\x94\x03\xc9\x8b\xe4\xa2\xc2\x49\xba\x5f"
+ "\x8d\xb8\xf6\x8a\x67\xa1\x1b\xc4\xeb\xea\xcb\xd8\x21\x82\x1f\x80"
+ "\xfd\x19\xdf\x8f\x7f\x33\xd6\x3d\xb1\x00\xfb\x74\xb4\x0b\x3a\x87"
+ "\x04\xf1\xee\xa5\xb3\x38\x11\x47\x33\xf1\x14\x69\x89\x25\x7d\xc4"
+ "\xe7\x43\x72\xb9\x18\xec\xcf\xc7\xe1\x95\x36\x60\xff\x3f\xf3\x05"
+ "\xea\xd7\xcf\x82\xed\x9f\xe4\x5d\xed\x2f\x49\x07\xae\x0f\x6b\xc0"
+ "\x78\x4a\xfa\xd9\x73\x72\xdf\x21\xcb\xfa\x67\x27\x0f\xa0\xbd\xa8"
+ "\x70\x14\x06\xc9\xba\x99\xeb\xe3\xfa\x59\x1a\x6a\x33\x96\x6d\x96"
+ "\xf1\xf0\x36\x73\x7d\xb2\x72\x1d\x38\xc4\xd6\x63\x3b\xfb\xf5\xe0"
+ "\xd5\x76\x59\xce\x87\x82\x78\xa2\xf8\xae\x44\x3a\x2f\x8e\x7c\x12"
+ "\xc6\xb8\x77\xb8\xfb\x06\xfc\x12\xc9\xde\xcf\x65\xff\xb3\xa2\x7a"
+ "\xd1\xdf\xca\x7e\xeb\x67\x22\xff\xb2\x00\x1d\x26\x5a\x5e\xe3\xfa"
+ "\x4b\xb4\x94\xe4\x10\x2d\xcd\x9c\x8e\x12\x23\x9c\x92\xf6\x26\x51"
+ "\xfd\x58\xb6\x49\xb6\x57\x19\xd7\xab\x5b\x09\xd7\x53\xe8\xab\x88"
+ "\x26\xac\x5b\xcf\xfd\xdf\x0c\xae\x07\x4f\xcb\xb4\xb7\x7a\xac\x54"
+ "\xf6\xe5\xa2\xb3\x12\x2f\x8b\x71\xcc\x4b\xdd\x1e\x71\xa6\x4c\x34"
+ "\x96\x6f\xa4\x7d\xfc\x8f\x4b\x4d\x9d\xe4\xa3\xe9\x1d\x12\xde\xb7"
+ "\xd1\xf7\x9e\xe8\x53\xb4\x88\x4f\x47\x3a\xaa\xe8\x45\xb7\xd4\xf4"
+ "\x1e\x8d\x17\x90\xd7\x7b\x31\x46\x6a\x24\x7e\x93\x2e\x63\x8c\x94"
+ "\xe2\x2e\xdf\xdb\xad\xe8\x2d\xd6\x53\x4b\xbc\x17\xf2\x79\x6d\x12"
+ "\xea\x71\xf3\x80\x6e\xbd\x36\x49\xe6\x63\x23\xf2\x51\x87\xf5\xbd"
+ "\x29\xb7\xab\x11\xe1\x31\x16\x6b\xda\x25\xd3\x2e\x9f\x1b\xf8\xda"
+ "\x6c\x45\x0e\xb2\xad\x1e\xaa\x22\xff\xcb\x65\xf0\x5a\xa7\x5c\x76"
+ "\x8f\x5c\xd7\x67\x0a\x2c\xc5\x88\xe2\xac\xa8\xd7\x3e\x23\x3f\x38"
+ "\x11\x65\xcf\x7d\x1f\x3f\xa7\x56\xa4\x91\xed\x88\x3a\x9a\x2a\xb9"
+ "\x1e\x62\xdc\x33\xa0\x47\xaf\xed\x0f\xf2\x4f\xe4\x8b\xab\x0f\x23"
+ "\x0e\xf2\xa7\xa4\x4b\xe4\x53\x69\xbc\x82\xf8\x76\xc8\xf6\x23\xd3"
+ "\xfc\xfa\xd8\x40\x5d\x69\xda\x80\xba\x32\x7e\x00\xf7\xeb\x86\x50"
+ "\xfd\x5c\xbd\xf0\x81\xb5\xa2\xcc\xeb\x2b\xe4\xb6\xed\x15\x6d\x93"
+ "\x9f\x89\x6f\x9b\x39\xdf\xc6\xab\xf8\x88\x7c\x7b\xe3\x39\x19\xbe"
+ "\x99\x7c\xf9\x80\xbd\xbe\xfe\xb1\x62\xcb\x83\xfd\xc5\x1b\xdb\xc8"
+ "\x1e\x54\x74\x35\x05\xf9\x8b\xe6\xd0\xfe\xe2\xf5\x52\xb9\xbd\x0d"
+ "\x41\xb6\xb1\x47\x8e\x77\x77\x2a\x72\x38\x8c\xe3\x31\x71\x2e\xd2"
+ "\x9e\x9d\xe4\x3f\xa9\x6e\x75\x1f\x54\x27\xf8\x2a\xdb\xf2\x1b\x4f"
+ "\x0c\x96\xc3\x1b\xd3\xd4\xf6\x4c\xb2\x26\x9f\x40\x38\x48\xa6\x3c"
+ "\xae\xc4\x34\x21\xd7\x37\x28\x7e\xaf\x56\xfb\x68\x84\xdd\xe1\x67"
+ "\x64\x2f\x6f\xa4\x07\xda\xe2\xeb\xfb\x64\x5b\x94\xeb\x6e\x1a\x89"
+ "\x32\x32\xa9\xea\xdd\x1f\x54\x2f\xc9\xa6\x85\xf8\x20\xcb\x34\x52"
+ "\xe9\xd3\x08\x1e\xcb\x16\x61\x19\x67\x50\xff\x58\x4d\xf4\x61\x5d"
+ "\x16\xee\xb3\x9e\xe5\xbe\xa2\xc8\x2d\xe8\x71\xd5\xcb\xfd\x04\xa6"
+ "\x99\xe4\x34\x9b\xdc\x97\x28\x7a\xb3\x2c\x90\xa6\xa6\xcc\xd0\xf1"
+ "\xd1\xeb\x16\x25\x3e\xe2\xb8\xb8\x2f\x6a\xca\x92\xdb\x47\x69\xe3"
+ "\x45\xda\xeb\x89\x94\x56\x25\xf8\xb0\x83\xf1\xfe\xea\x35\x9b\xdc"
+ "\x5f\x91\x7d\x49\xf8\x6c\x22\x1b\xa3\x67\xc4\xc1\xc7\x82\xf6\xd2"
+ "\x5e\x1a\x43\xd4\x38\xa4\xbd\x87\xc8\x1f\x90\xbf\xa0\x75\xa9\xfc"
+ "\x77\x0e\xff\x3d\x43\x7e\x87\xe2\x10\xca\x47\xb8\xfd\xe4\x8b\x8e"
+ "\x4b\x6f\x46\x19\xef\xc1\xb8\xe0\x7f\x75\x88\xb7\xa9\x5b\x94\x7d"
+ "\xf3\x2a\x1e\x2b\xfc\x6f\x7a\x84\x92\xa6\x94\x43\xbf\xd5\x46\xe5"
+ "\xa8\xbc\xe2\xbf\xc8\x77\x79\xc9\x37\xf1\xfa\xde\x5c\x22\xeb\x38"
+ "\x1f\x37\x28\x71\x51\x9f\xa4\x82\xa5\xf3\x64\xb8\x4f\x7b\x73\xaf"
+ "\xf0\x67\x6f\xee\xa4\xb2\x5c\x7e\xe8\x2b\x37\x9f\x65\x9f\xd6\xaf"
+ "\x01\x6d\xdd\xe7\xe4\x17\xf7\xd4\xca\x74\x7a\x44\x3b\xde\xfc\x15"
+ "\x6f\x87\xf0\xa9\xd5\x82\x96\x3d\xb5\x75\xbd\x3c\xef\xcf\xd4\x16"
+ "\xca\xdb\xae\xca\x63\x7d\xc9\x94\xc7\xcf\xf9\x0a\x2e\xe7\xef\xb3"
+ "\x0c\x82\xaf\x17\xe7\x01\xeb\xea\x9e\x55\x7c\xef\x5b\x45\x82\xce"
+ "\xb7\x6e\x56\xfc\x2e\xf2\xa5\x85\x7c\x2f\xcf\x5b\x2e\xc3\xcc\x91"
+ "\x7f\xb9\x7f\x7f\x6b\x99\xe0\xab\x41\x92\xf9\x7d\x48\xb4\xe3\xad"
+ "\x0d\x7c\x9c\xfd\xbf\xd9\xc8\xdb\xb7\x72\x14\xde\xaa\xef\xc9\x7e"
+ "\xb0\x7e\x3d\x3d\x73\xbd\x2f\xe6\x63\xd8\x5a\x82\x21\x9a\x44\x1f"
+ "\xf1\x66\x56\x70\x4c\x7d\x5c\xda\xf7\x77\xea\x97\x44\xac\xba\xef"
+ "\x77\xf2\xfc\x0f\xd8\xd6\xec\xc6\x7e\xe1\xed\x44\xc5\xc7\x30\x77"
+ "\x3a\x8e\xf9\x8f\x21\xcc\xdb\x57\x51\x1a\x9d\x11\xa2\x86\x21\xff"
+ "\xf4\x46\xaf\x43\xc6\xf9\x96\x47\xf1\x1b\xe4\x4b\x0e\xbb\x8e\xc9"
+ "\x31\xdd\xdb\x8d\x75\xb2\x2f\x39\x25\xbd\xfd\x4a\x60\x1c\xf6\xf6"
+ "\x2b\x81\x3e\x63\xdf\x7b\xc1\x3e\x03\xe3\xe6\xad\xee\xf2\xb7\x8b"
+ "\x03\xe2\x00\x4c\x3b\xb7\xef\x78\x3b\x93\x6c\x94\xce\x88\xe3\xfe"
+ "\x89\xcf\x69\xed\x1b\xae\xd0\x4c\x7e\xb3\xe7\x49\x65\xfe\x62\xdf"
+ "\x6b\x14\xab\x05\xd5\xd7\x1d\xe0\x3b\xa9\x3e\x05\x9f\x16\xe8\x8c"
+ "\x31\xe4\x03\xcd\xb7\xbc\xbd\x5f\xf6\xf3\x0d\x01\xbe\x52\xee\xc3"
+ "\xc8\x4f\x06\xf6\x55\x7b\x76\x06\xf6\x55\xfb\x9e\x1b\xec\x23\xf7"
+ "\x59\xce\xbf\xaf\xda\x67\x26\xbf\xa5\xf8\xc8\x40\x5f\xb0\x2f\xbf"
+ "\x2e\x20\x96\x7d\xdb\xa5\xc4\xb2\x03\x7e\xf4\xed\xad\xe4\xa3\xb0"
+ "\xfe\x66\xb9\xee\x4e\x87\xb4\xbb\x4b\xa9\x1b\xf3\x13\x0f\x1b\x51"
+ "\x37\xcb\xf7\x64\xa2\x4e\xb5\xca\x31\x20\xb7\xcd\x5e\x7e\x1e\xd1"
+ "\x5b\x7a\xd4\xbf\x68\xd2\x33\xdb\xaa\xcf\xa1\x73\xa0\xaf\x68\xe9"
+ "\x59\xad\xf0\xf7\x9d\x27\xd4\x71\xe1\xce\x67\x59\x99\xbb\xfc\x9d"
+ "\x59\xea\x36\x56\x62\xda\x76\x79\x0e\x81\xf3\x96\xe3\x7a\xc7\x58"
+ "\xff\x6c\x60\xdb\x44\x3b\xde\xc9\xa2\x76\xd0\x98\x08\xeb\x4f\xa0"
+ "\xb8\x07\x63\x3e\xbc\xdf\x5b\x53\xdf\xaf\xf3\x2f\x75\x9f\xb5\xaa"
+ "\xe3\xab\x3d\x2e\xf2\x95\xf2\xd8\xb3\x15\xe3\x9d\x6a\xf5\x5c\xcc"
+ "\xec\xa9\x99\xc6\x82\x35\x2b\x56\x15\x2e\xbf\xc9\xb8\x62\xd5\x8a"
+ "\xc2\x15\x4b\xf2\x57\x6c\x5c\x52\xb8\x62\xf5\xaa\x71\x2b\x97\x3c"
+ "\xb2\x62\xa9\x71\xfd\x92\xb5\x46\x53\xd1\xb5\x45\xd1\x30\x00\x7a"
+ "\x9b\x71\xc9\xda\xb5\x4f\xac\x5c\x96\x67\x5c\xb5\x62\xe9\xf8\x35"
+ "\xcb\xd6\x2e\x2b\x34\x2e\x59\xb3\xfa\x89\x55\x79\xc6\x6b\xf3\x26"
+ "\x5c\x6b\xba\x25\x2f\x5a\x3d\x87\x36\x46\x0f\xdd\xfe\x2f\xfe\xd6"
+ "\xb5\xfd\x0b\xd0\xc5\x6b\x0a\xd6\xc4\x17\xad\x58\x25\xe6\xec\x7e"
+ "\xfe\xde\xc4\x1d\x50\x40\x67\xc4\xd3\x79\xc7\xac\xfc\x9d\x76\xfc"
+ "\xd5\x12\x1c\xb6\xd3\x48\x67\xc4\x23\xed\x89\xee\xf2\x9f\x97\x3a"
+ "\xa4\x5f\x5a\xf8\x59\xc6\x98\x8e\x6d\x4b\x64\x5f\xfc\xb6\x0b\x63"
+ "\xb6\x02\x7a\x5f\x5e\xff\x05\x24\x54\xaf\x03\x2d\x5e\x31\x78\xe9"
+ "\xe9\x0c\x79\x2c\xb3\xcf\x21\xbd\xdb\x2e\xce\x7c\x79\x37\xcb\x19"
+ "\xf5\x71\x26\x2b\xfb\x58\x9e\xb3\x7d\x77\xae\x32\xcf\x9c\xf1\x34"
+ "\x64\x90\x7e\x1e\x93\xde\xe5\xef\x15\x9f\x42\x5d\xa6\xf9\xda\x9e"
+ "\xff\x77\x97\x19\xe3\xc1\xa3\x34\xdf\x8a\x79\x73\x5d\x12\xc4\x20"
+ "\x5d\xda\x03\xc5\x26\xf8\x11\xd6\xb5\xd6\xc0\x98\xbb\xfc\x5d\x83"
+ "\x32\x9f\x86\x6d\xd0\x63\x5b\x3a\xe4\x76\xf4\xf1\x76\x3c\xcb\x92"
+ "\x76\x8c\x40\xfa\x7e\x48\xf4\xbc\x3b\x4d\x69\x03\xd2\xdd\xe1\x90"
+ "\x7e\xde\x88\x74\xea\x89\xae\x50\x73\x7d\x34\xdf\x85\x74\x56\xfa"
+ "\xd7\x21\xdf\x46\x89\x33\xee\xb6\xd7\x09\xfb\xc3\xf6\xb4\xd4\xe3"
+ "\x7d\xd5\xe7\x10\x53\x49\xe7\x93\x5b\xaf\x66\x6d\x2e\x2f\xd8\x2d"
+ "\x1d\x10\xbf\x81\x39\xd9\xcf\xff\xd6\x25\xb7\xa9\x99\x7c\xc3\xdb"
+ "\x8f\x76\x68\xa9\x4d\xd8\x57\xc4\xd4\x7f\x1e\x76\x6e\x51\xfb\xa3"
+ "\xcb\x98\x8b\xfd\x54\x1d\x73\x35\xf3\x73\x80\x28\xde\xea\xb1\xd2"
+ "\x99\xd6\xcd\x3a\xac\x3b\x57\x8e\x8d\x5d\xac\x2f\x47\x15\x4b\xbd"
+ "\x4b\x7a\xe6\x0a\x83\x5b\xa7\xe0\xa6\x73\xcf\xa9\x8c\x90\x7f\x73"
+ "\x25\x96\x71\xaa\xf0\x5b\x82\xf1\x13\x4e\xbc\x77\x2a\xf5\x88\x71"
+ "\x78\x33\xc5\x04\x4e\xd4\x65\x67\x98\xfa\x92\x7e\xf8\x2c\x3b\x62"
+ "\xc7\xf4\xed\x67\x41\x8b\xb0\x38\x76\xe5\xf8\xd1\x3e\x7e\x3e\x8e"
+ "\xf0\x3f\x75\x19\xc0\x56\x84\xe9\x29\x7f\x37\xd7\xc5\xcf\x20\x6f"
+ "\x46\xfb\xdf\x93\x1d\x3c\x8f\x2d\xeb\xf3\x6d\x41\xfa\x6c\xfe\x21"
+ "\xc5\x84\x3b\x10\x3f\xea\xd0\xf6\x33\xd8\x0f\xe3\xf3\x84\x1d\x90"
+ "\x4c\xf5\xe0\x7d\x3b\xcd\x87\xb8\xcb\x7f\x91\xaa\xd4\xc7\x50\xff"
+ "\xab\xfc\x62\x0e\x46\xd6\xad\x71\x34\x77\x5d\x52\xc4\xd8\x01\xf4"
+ "\xef\x44\x23\xe9\x18\x96\xc9\x57\x74\x0a\x75\xfd\x08\xd7\xab\x04"
+ "\x48\x66\xe5\xcd\xce\xfa\x11\x08\x87\x7a\x55\x87\xfa\x44\x7a\x85"
+ "\xb0\x35\x8a\x4e\xa1\xae\xb5\x13\x1c\xd2\x10\xdd\xb4\xd1\xac\x25"
+ "\x1f\xd9\x29\xfd\x32\x96\x74\x8c\xfd\xe4\xde\x0e\x76\xf9\xc2\x0e"
+ "\x21\xa7\x5f\xc6\xda\x3d\x42\x06\x03\x7c\xff\x85\x43\xc5\xf7\x76"
+ "\xd4\xe3\x68\xe2\xb3\x98\xab\xfe\x65\x2c\xd2\xd6\xce\x63\xf1\x4d"
+ "\x28\x03\xde\x57\xfd\xe2\x10\x95\x97\x79\x78\x68\x80\x87\xbf\x4c"
+ "\x0e\xc5\xc3\x20\xde\x69\xc5\x39\xe7\xbf\x4c\x21\x5b\xc1\x32\x39"
+ "\xca\xd9\xe5\xa1\x64\x89\x75\x68\xb5\x3b\x40\x47\x75\xb4\x24\x70"
+ "\xf8\x0a\xa5\x8e\xed\xc8\x6b\x67\x89\xe5\x9c\xfa\xdc\xd2\x00\x40"
+ "\x73\xe2\x54\x3e\x29\x81\xf8\xfb\xcb\x43\x03\xe5\x99\x2b\xb8\xfc"
+ "\xb5\x4b\x03\x68\xe5\x17\xd2\xea\xf8\xd1\x08\xd4\x23\x4e\xef\x7f"
+ "\xc5\x9c\x8b\xde\x24\xa3\xe8\x27\x6d\x63\x48\xbf\xff\x6b\xba\xbd"
+ "\x06\x80\xd2\xe4\xe7\x94\x1e\xec\x7b\x82\xe7\xf7\xc3\xbf\x6f\xf8"
+ "\xaf\xa7\x03\xdf\x37\xfc\x57\x61\xb8\xf7\x0d\x41\xf5\xfe\x8a\xea"
+ "\xf5\xd7\x67\x69\x54\x75\xef\xf5\x87\xa8\x5b\x29\x3f\xa1\x41\x3d"
+ "\x9e\xd9\x3f\x9c\x68\x38\x8c\xfd\x14\xbb\x32\x4b\xc3\x10\x4f\x0b"
+ "\xef\xc3\xf7\xeb\x45\xfc\x42\x71\xd1\x7f\x39\x09\x26\xb8\x1d\xfd"
+ "\x7f\xba\x04\x9a\x63\x87\xb3\xfc\x21\x72\x06\xe8\xe9\xd7\xd8\xa1"
+ "\x64\x4b\x01\xc0\xc0\x42\x3c\xc4\x00\x8c\xe6\xf0\x0c\xff\x44\x92"
+ "\xfc\xec\xe4\x0f\xda\x7e\xf8\xfe\xfc\xaf\xf1\x17\x25\xe8\xe5\xf8"
+ "\x3c\xa0\x91\xeb\x53\xb7\x69\xda\x39\x4a\x33\x50\x8a\x84\xfa\x7b"
+ "\x1c\xaf\xd2\xac\x48\x80\x31\x06\x0e\xcc\x98\x57\x64\xf4\x3f\x33"
+ "\xf5\x33\xa5\x04\x3e\xe3\x5f\x44\x8e\xaa\x82\xab\x23\xf2\xf8\xd2"
+ "\xa7\x6b\x33\xfb\x93\xa4\x06\xbd\xba\x4a\x3d\x94\x46\xf2\x9b\x78"
+ "\xfa\xc7\x83\xf8\x92\x31\x7f\x4c\x6a\x3f\xc0\x25\xae\x2d\x2a\xf0"
+ "\x8f\x04\xf9\xd7\x94\x9d\xa3\x8d\x17\xfa\x37\x4a\x75\x7f\xb5\xf8"
+ "\xb9\x26\xfd\x22\xe2\x3f\xf7\x9f\xb1\x3d\x4a\xb9\x1d\x50\x8f\x6b"
+ "\xda\x43\x81\x0e\xf0\x3f\xc9\xa4\x24\xa9\x35\x74\x20\xff\xfa\xbd"
+ "\x81\xcf\x63\x2d\x81\xcf\x37\x36\x5f\x0c\xd2\x6d\xf4\x4f\x89\x03"
+ "\x63\xf6\x1b\xb6\xf6\x27\xc6\x07\x99\x4c\x7c\x75\x90\x09\x0d\xfc"
+ "\xc9\xd4\x44\x00\x8c\x8b\x51\x25\x6b\x43\x43\xff\x63\xfe\xae\xd8"
+ "\x22\x1b\xc4\xd5\x4e\xfd\xa0\xcc\x29\x41\x69\xf4\x3c\xc4\x28\xa7"
+ "\x4d\xfa\xd5\x20\x78\x9e\x66\x54\x3d\x6b\xcc\xf8\x4f\x03\xea\xff"
+ "\xd1\x8b\x41\xeb\xb7\x7f\xff\x81\x7f\x1a\xb2\x8f\x6f\xff\xfe\x41"
+ "\x7f\x4c\xf4\xe2\xe8\x89\xf8\x0f\xfd\xc7\xfa\x1d\x25\x93\x33\x98"
+ "\x9c\xc0\xe4\x9b\x8b\xd2\x8f\x7f\xfb\xf7\xed\xdf\xb7\x7f\xdf\xfe"
+ "\x7d\xfb\xf7\xed\xdf\xb7\x7f\xff\x06\x7f\x1a\x3e\x8e\x60\xf2\x5f"
+ "\xff\x7d\x7f\x3e\x0d\x83\x56\x24\x30\x49\x03\x4c\x95\x51\x7a\x33"
+ "\x68\x74\x30\x44\x7b\xf1\xa2\x3c\x63\x3f\x41\xe7\x59\x80\xc6\x92"
+ "\xb4\x46\xe0\x3b\x78\x5d\xa9\x4a\x4f\xba\x58\x14\x5d\xb4\x3f\x0d"
+ "\x32\x31\x02\xc7\x87\x91\x30\x04\x86\x82\x0e\xa2\x20\x1a\x86\x41"
+ "\x0c\xc4\x42\x1c\x8e\x3b\xf5\x30\x1c\x46\xc0\x25\x90\x00\x97\xc2"
+ "\x65\x70\x39\x18\x60\x24\x5c\x81\x2d\x4a\x84\xab\x70\x8c\x7f\x35"
+ "\x32\x66\x34\x8c\x81\x6b\x42\xb7\xab\x14\xcc\x06\xfc\x07\xff\xcf"
+ "\x04\x33\x7f\xce\xfd\x36\xfd\x1b\x4d\xb7\xc9\xe9\xed\x72\xba\xe3"
+ "\xdb\xf4\x6f\x34\xdd\xf8\x7f\xfc\x3b\xfa\xff\xf4\x57\x83\xee\x5b"
+ "\x78\x70\x4d\x48\xbf\x19\x9c\xaa\x91\xff\xfa\x9f\xe1\x4b\xca\x0f"
+ "\xc2\x17\x58\x3e\xf8\xcf\x8c\x57\x8a\xb8\x2d\x01\x90\xe7\x7c\x99"
+ "\xfa\xcf\x7b\x2a\xe0\x2f\x1c\xa2\xfe\x3f\x6b\x0e\x5e\x16\xbc\x0a"
+ "\xf1\x5a\x8f\xd7\x53\x78\x55\x2a\x68\x05\x0c\x7d\x42\xf2\xf7\x6c"
+ "\x80\x63\xf8\xfb\x3f\xa9\xf8\x5b\x8b\xbf\x47\x00\x3a\xb1\xdc\x5f"
+ "\x1b\x01\x8e\x23\xc0\xdf\x54\x73\xa3\x5f\xe4\x0e\x50\xdb\x73\x48"
+ "\xdc\x1b\xf1\xf2\xd0\x39\x7b\xe0\xd0\x68\x1d\xf8\x63\x9b\x9e\x95"
+ "\x6e\x9c\x34\x21\x65\xc2\xcd\x37\x1b\xc7\x67\x8e\x37\xde\x64\x9a"
+ "\x74\xd3\x44\x53\xca\xc4\x9b\x26\x19\x4d\x93\x6e\x4b\x49\xbd\xed"
+ "\x3b\x29\xc6\x95\x1b\xd6\xac\x98\x64\x7a\x64\x99\x71\xf9\x8a\x35"
+ "\x2b\xd7\x2f\x59\xb3\xec\x4b\x9b\xf3\x55\xfe\x88\xb4\xab\xfc\xc0"
+ "\xa5\x11\xc8\xf9\x29\x20\xb5\xe4\x82\xf4\x71\x36\x0c\x12\x95\xa6"
+ "\x5a\x9e\x63\x4d\x96\xaf\xa0\xec\xc7\x1b\x40\xb3\xaa\x0c\x34\x2b"
+ "\x6c\xa0\x59\x5a\x0c\x9a\x85\xfb\x41\xf3\x03\x13\x68\xaa\x30\x6f"
+ "\x9b\x11\x34\xd6\x16\xd0\x6c\xec\x1e\x9c\xf6\x7c\xb5\x48\x7b\x17"
+ "\xcb\xbe\x85\xd7\x5e\x3d\x68\x5e\xf0\x8a\xb4\x5f\x3b\x41\xf3\xde"
+ "\x3f\xdb\x9c\xe1\xf9\xc6\x13\x83\xfe\x1c\x5c\xaf\x68\x26\x6b\xc4"
+ "\xfe\x10\x93\xa6\xdf\xfe\x7d\xfb\xf7\xed\xdf\xb7\x7f\xdf\xfe\x7d"
+ "\xfb\xf7\xed\xdf\x3f\xf9\x9f\x53\x03\x29\x9f\x4b\x5a\xf8\x35\x46"
+ "\x45\x6e\xab\x2e\xd1\xa1\x49\xab\xa0\x35\x26\x40\xdf\x52\x81\x8e"
+ "\xaf\x39\x15\x97\x16\x7f\x22\xb1\xe3\x1f\x82\xd7\x50\x9d\x7a\xad"
+ "\x0a\xad\x45\x3a\x60\x30\x41\x84\x01\xc4\xba\x29\x2b\x6b\x17\xdf"
+ "\x22\xdf\x04\xdd\xa0\xe3\x7b\x09\xd0\xf7\xa3\x88\xbf\xc8\x01\x3f"
+ "\x33\x28\xeb\xac\x14\x38\x5a\x67\x45\xeb\xb2\x10\x76\x25\xc1\x86"
+ "\x59\x57\xa3\x67\x3f\x31\x48\x53\x77\x02\xd0\x77\xa8\x3f\x7a\x96"
+ "\x39\x5b\x8a\x01\x0e\xec\x11\xdf\xa3\xd2\x9a\x1b\xc4\xdf\xe1\x80"
+ "\x6d\x09\x62\x9d\x15\x73\x3d\x85\xe9\x98\xd6\xed\x80\x72\xad\x5c"
+ "\x67\xb7\x92\x6e\xdf\xfa\x05\xb4\x18\xf9\xf7\x36\xce\x16\xa3\x0f"
+ "\xa6\x8d\xa6\xf6\x47\x19\xb0\x7c\x45\xb8\x35\x36\xca\x7a\x32\xaa"
+ "\x5b\x86\x4f\x0f\xaa\x0f\xdb\x18\x95\xa3\xd4\x17\x06\x47\x0c\x95"
+ "\x55\xf0\x20\xed\xdd\x58\xa6\x5a\xc1\x83\xf4\x28\x34\x3a\xa7\x6d"
+ "\xe2\x75\xec\x0d\x45\x93\xf1\x83\xb4\xc8\x65\xb7\x4c\xec\x4c\x3b"
+ "\xb2\x3c\xc9\x78\xe9\xa4\xe9\xcb\x92\xae\x67\xa6\xf8\x71\xdf\x37"
+ "\x0d\x33\x47\x99\xe3\x26\xce\x33\x49\x7a\x69\x8c\x64\x1a\xa1\x97"
+ "\xae\x7b\x98\xfe\x6d\x1f\x95\xcc\x7f\x8d\xda\xb4\xad\x79\xb7\x18"
+ "\x87\x4e\xf9\xde\x33\xeb\xcc\xef\xbe\x3c\xc3\x7c\xf7\x82\xb5\x63"
+ "\x7f\x6d\x92\x2e\xf9\xfd\xf7\xdf\x4b\xfe\x9c\x20\x46\x8f\xa1\x7f"
+ "\x73\x0e\x44\x24\x8c\xb5\x12\x96\xf6\x91\xc6\x5f\x53\xca\x0d\xda"
+ "\xb4\xc2\xbc\x9b\x27\xee\xa1\x1a\xef\x5b\x3a\xde\x4a\x65\x66\xcc"
+ "\x16\x65\x04\xc4\xc4\x7d\xea\xbc\x09\x6f\x51\x69\x23\xa7\x01\xb4"
+ "\x02\x57\x3f\xee\xcb\x05\x85\x22\x75\x4c\x9b\xe9\x2a\xb9\xee\xdd"
+ "\xf4\xef\x83\x2f\x4c\x90\x10\xc3\x88\xf1\x77\x51\xee\x44\xb7\xc9"
+ "\x6d\x6c\x49\xd3\x3e\x92\x94\x3c\x74\xd2\xcb\x78\x97\xf4\x48\x92"
+ "\x5e\xc2\xfb\xef\x89\x7b\xe2\x41\xde\x77\x05\x84\x5e\xba\x36\x21"
+ "\x2d\x2f\xef\x96\x4f\x5c\x79\xb7\xe8\x25\xf3\x9e\xbc\x34\xf3\x65"
+ "\x15\xf9\x37\x26\xa5\x25\xe5\xdd\xac\x97\xf8\xef\x6d\xe6\x6b\xcb"
+ "\x1f\xd4\x4b\xd7\xff\xca\x34\x5c\xaf\xf9\x4d\x83\x06\x3e\x90\xe6"
+ "\xef\xfd\x20\xe2\xe3\x8f\x0f\xc2\x0d\x2b\x0f\x6a\x6e\x98\x75\x50"
+ "\xd2\x0c\x3f\x18\xf3\x00\xfc\x46\x3f\x14\x7e\x63\xc0\xcb\x78\x37"
+ "\xb4\x6a\x4a\x32\x5b\xa5\xf5\xb9\xad\x11\x25\x87\x5b\xb5\xf7\x43"
+ "\x6b\xe4\xe2\xe1\xad\x43\xee\x9e\xdb\x3a\xf4\xfe\x4f\x5b\x75\xd7"
+ "\x43\x6b\x14\x40\xeb\x68\x90\x5a\xc7\x40\x42\xeb\x4d\xc3\x9f\x69"
+ "\xbd\x7b\x94\x64\xbb\xa4\xe7\x4e\xdb\x15\xda\x19\xb6\x24\x3d\xd8"
+ "\xae\x8d\x06\xdb\x75\x31\x31\xb6\xeb\xf1\x1a\x0b\x0d\x36\x13\x3e"
+ "\xa7\x41\xa2\x2d\x72\xe3\x10\x00\x41\xcb\x41\x23\xc0\xc1\xd1\x30"
+ "\xe5\xe0\x18\xfc\xbd\x06\xaf\x24\xbc\xae\xc5\xeb\x7a\xbc\x70\x9c"
+ "\x72\x90\xf6\xfd\x81\xe4\x21\x69\x3f\xff\xd5\x92\x25\x29\x4b\x6e"
+ "\xce\x9a\x1a\x11\xb1\x2c\x09\x86\x21\xd7\xb4\x69\x49\xa3\x23\x53"
+ "\x23\x97\x25\x7d\xe2\x32\xe3\xbf\x7a\xe9\xa1\xff\x8e\x18\x32\xd1"
+ "\x9d\xea\xce\x7d\xf7\x13\x1f\x44\x23\xff\x21\x58\x87\x7b\xac\xa0"
+ "\x71\x21\x8d\x2e\x6b\xcf\x9d\x6e\x6b\x8c\xde\x01\x51\x16\x45\x8f"
+ "\x45\xde\xaf\xf5\x2e\x6b\x29\xea\x5f\xcc\xb8\xd0\x79\x5b\x28\x2f"
+ "\xfd\x1c\xe5\xf2\x42\xe7\x91\x4e\xc7\x94\x2a\x79\x3d\xd2\x81\x4c"
+ "\x7c\x46\xfd\xd7\xa5\x06\xc2\xda\x22\x5c\x56\xcd\x16\xcc\xdb\x3b"
+ "\x18\x8f\x0d\xf1\x4c\x2b\xc7\xbc\xd6\x10\x79\xf7\xb8\xac\xf3\xa8"
+ "\x8e\xce\xa0\x3a\x5c\x4a\x1d\xf4\x9d\x77\x1d\xda\x17\xf9\x1d\xbf"
+ "\x35\xaa\x99\xca\xda\x3d\x4e\xd8\xe3\xef\xd2\x68\x8b\x0e\x01\xe1"
+ "\x71\x5b\x63\x93\x94\xf2\x04\x47\xfb\x14\xd0\xf7\x79\x7c\x1d\x28"
+ "\xc4\xde\x47\xeb\x40\xab\x10\x87\x71\x9d\xe6\xf2\x63\x10\xe3\xa3"
+ "\x32\x0e\x88\xb5\xb8\xa4\x0f\xb1\xee\xd8\x5c\xc5\xcf\x61\x5a\x1a"
+ "\x88\xf5\xe6\x2e\x6c\x7b\x29\xe6\x15\x0f\xa6\xf9\xc3\x11\x82\x2f"
+ "\xb1\x35\x4a\xde\xb9\xd6\x16\x8a\x32\x8c\xb9\xac\x1f\xfa\xb1\xcc"
+ "\xa1\xc1\xf8\x58\xa9\xcb\x2a\x3d\x83\x79\x5d\x21\xf2\xb6\x88\xba"
+ "\xe2\xb4\x21\xf2\xac\x98\x27\x61\x9e\x31\x4c\x5e\x04\xe6\xa5\x85"
+ "\xca\x6b\xa9\xe5\x38\xb3\xfb\x79\x1e\x17\x6b\xc6\x67\x8b\xc2\xf3"
+ "\x2f\x6f\x0f\xc9\x7b\x12\xf2\x3d\xae\x36\x18\x3f\xe1\x76\x49\x6d"
+ "\x84\xaf\x79\x70\xdd\x87\x34\x2e\x6b\x3a\xea\x42\xdc\x91\xc1\x79"
+ "\x1f\x5d\x89\x7c\x20\xba\x9c\x21\xf2\x12\xb1\x3d\xe8\xaf\xe3\x63"
+ "\x42\xe0\x1c\x82\x79\x0e\xcc\x4b\xfe\x12\x79\xe8\xb9\x0f\xa7\x7d"
+ "\x10\x46\x41\xe4\x71\x18\x31\x99\xda\x23\xf4\x02\x86\x1c\x87\xe1"
+ "\x6d\x3d\x62\x4d\xbc\xd3\xb8\x11\x22\xf0\x79\x17\xb3\xda\x2e\xc5"
+ "\xfc\x6e\xd4\x27\x9d\xfd\x0b\x2f\x1c\x87\xf8\x0a\x84\x89\xa0\x6f"
+ "\x58\xa9\x7f\xc2\xf4\x08\xbb\xc7\x4b\xdf\x71\xa0\x9e\xc5\xbf\x89"
+ "\xbf\x12\x96\xe3\xdf\x2c\xcc\xaf\x85\x24\xa2\x91\xaf\x63\xb5\xda"
+ "\x34\xb4\x2e\x94\xfa\x43\x97\x04\xd7\xbb\xb8\xce\xc6\x63\xff\xa7"
+ "\x6b\x90\xd7\xf0\x12\x0d\x5a\x2c\xbb\x49\xd2\xf3\x35\xe1\x4e\xc4"
+ "\x45\x34\xcc\xf5\x5b\x6d\x52\x3f\x1e\xc9\x36\x8c\xd6\xf7\xf6\x58"
+ "\xa5\x99\x2e\x29\x9e\x09\x3c\x7a\xa3\x82\x87\xe0\xb0\x2e\xbe\x4e"
+ "\xbe\xc7\xaa\xfd\xa1\x0a\x66\x9a\xba\xae\x89\x2e\x88\x20\x9a\x8f"
+ "\x81\xbe\x96\xea\x93\xdb\xc8\xd7\xdc\xda\xd7\x79\xc1\x8e\xf1\xc5"
+ "\x71\xd0\x17\x61\x5b\x8d\x07\x3c\xf4\xad\xb3\x6d\x78\xfd\x66\x00"
+ "\x6e\x17\x12\x18\x65\x9c\x35\x0a\x4e\xc2\xa1\x6a\xeb\x08\x51\x3f"
+ "\xb5\x55\x07\x32\x6c\x8b\x9a\x46\xc2\x8b\xed\xba\xbc\x0e\xe1\x5a"
+ "\x30\x6a\x91\x61\xba\x14\x18\x95\x0c\x46\xcb\xf4\x11\x7f\x48\x66"
+ "\x39\x8a\x7d\xba\xad\xc3\xb1\xff\x1f\xd6\x25\xec\x76\x20\x5d\xa6"
+ "\xc1\x20\x68\xd0\x20\x0d\x1a\x9b\xc0\x3f\x3c\x5d\xc1\xef\x00\xbd"
+ "\x47\x4d\x73\x1d\x87\xd5\x47\x09\x3b\xe5\xb0\x85\x03\xb0\xf1\x01"
+ "\xb0\xc8\x0b\x49\xc8\x00\x24\x07\x0c\xcf\x43\x7e\x44\x20\x4c\x13"
+ "\xca\xdb\xa8\xc0\xc8\xed\x37\x60\xde\x14\x19\x5f\x8b\x0a\x5f\x21"
+ "\xe1\xa3\x75\xb1\xc2\xf7\x0e\x77\x0c\xf8\x3e\x68\xc5\x67\xe7\x60"
+ "\xff\x4a\xf6\x3a\x42\x87\x70\x49\x94\x5e\x30\x06\xf4\x27\x60\xf8"
+ "\x67\x3d\x52\x44\x97\xe0\xc5\x08\xf4\x7f\xb1\x7b\x94\x32\xf8\x9c"
+ "\xe2\x00\xa3\x47\xae\x2f\x8f\x78\x33\xe0\x6f\xa9\xce\x11\x59\x4a"
+ "\x9d\x4a\xbe\xda\x66\xcc\x51\x13\x31\x3e\x31\xbf\x6a\x4e\x34\x8f"
+ "\x52\x62\x97\xc9\x2d\xcb\x93\x26\xba\x26\xb7\x18\x6f\x36\xbd\xb8"
+ "\x2c\x69\x1c\xef\xfb\xaf\x3f\x66\x1a\x83\xbd\xfb\xef\xf9\xbf\x3f"
+ "\xa4\x94\x24\x9e\x82\xe9\x74\x3f\x86\xee\xe5\x78\x01\xef\xee\x9b"
+ "\x1f\x31\xf4\xda\x35\x74\x27\x22\x07\xf3\x65\x8b\x96\x46\x4c\x93"
+ "\xef\xe3\x44\xce\x8d\x3c\xe6\x48\xbe\x8b\xee\xaf\xe3\xb8\x26\xee"
+ "\xa1\x9a\x27\x7c\xdf\x74\xfb\x82\xb7\x23\x0e\x3e\xf3\x98\x39\xe6"
+ "\x7a\x2b\xc1\x8c\xbb\xd7\xf4\x53\x4c\x39\x40\x29\x63\x76\x73\x0a"
+ "\xd4\xa5\xf6\x51\x29\x39\x3f\x71\xdc\x74\xd3\x8f\x17\xce\xbf\xe6"
+ "\xf7\xa6\x11\x97\xfc\x3a\xe7\x00\x95\xbf\x64\x44\x40\x4d\x63\x06"
+ "\xa8\x7a\x78\xfb\xd8\xa7\xbf\xf3\xa2\xc0\xb2\x60\x7e\xc4\xef\xcd"
+ "\xa3\x56\xaf\xa1\xd4\x6b\x78\x2c\x46\xb1\xca\xc4\x33\xa6\xc8\x67"
+ "\x16\x7c\xf2\xcb\x05\x2f\xb4\x3f\x38\x16\x5b\x7a\xc9\x0f\xdb\x1f"
+ "\x5c\xf0\xc2\x27\xbf\x8c\x78\x8a\x20\x6f\xc8\x33\x25\x18\x23\x27"
+ "\x3f\xd1\x32\x77\x2c\xa7\xea\xf2\x0a\x43\xcd\xc8\x3d\x57\x34\x5d"
+ "\xb9\x3f\xb1\xf5\xaa\xff\x1e\xf5\x97\xab\xff\x66\x74\x8d\x66\x18"
+ "\x47\xdc\x69\x1a\xdd\x1f\x47\x00\xc6\x11\xc7\x30\x8e\x28\xc1\x38"
+ "\xe2\xb0\x3a\x8e\xf8\x6d\xf4\x6d\xc5\x22\x96\x10\xf0\x22\xfe\x19"
+ "\xf7\xdf\x18\xff\xac\xc2\xf8\x67\xdc\xc1\xc8\xfb\xee\x3f\x18\x93"
+ "\x25\xe2\x9f\xe1\xf1\x43\x78\x0c\x34\x12\x7f\x31\x0e\xfa\xcd\x68"
+ "\xfc\x4d\xc6\xe7\xb1\x23\x86\x06\xc6\x44\xf3\xe2\x5a\x23\x73\x30"
+ "\x26\x4a\xc3\x98\xc8\xbc\xa4\x55\x37\xf3\x57\xad\x51\xa9\xe6\xd6"
+ "\xe8\xfe\xb8\x68\x46\xeb\x34\xc3\xc4\xd6\x99\x5a\x68\xbd\x07\x44"
+ "\x6c\xb4\x15\x4c\xbf\xd5\x26\x68\x3e\x8a\x01\xed\x47\x71\x0d\xd1"
+ "\x1f\xc5\xdb\x6c\x1f\xe9\xf1\x1a\x0e\x0d\x1f\x8d\x80\xa1\xbf\xbe"
+ "\xb3\x01\x7e\x3d\xb5\xc4\x71\x50\x0b\x71\x07\xa3\xe0\xcc\xc1\xe1"
+ "\xf8\x9b\xfb\x2c\x1c\xfc\x1e\x68\x0f\x46\x6b\xcf\x0c\xb4\x37\xe1"
+ "\xb3\x83\xa3\x3f\x98\x7c\x70\x4c\xda\xff\x3b\x78\xcd\xb4\x79\x07"
+ "\x93\x3e\xf8\xe0\xe0\xb5\x8e\x51\xea\xb8\x89\xda\x0c\x70\xe3\x56"
+ "\x8a\x60\x91\xdf\x37\x27\x0f\x31\x0d\x79\x7a\x19\x8f\x07\x6f\x91"
+ "\xe3\xc2\x5b\xcc\xd3\x9f\x59\xb0\x60\x69\x84\x64\x1e\xc5\xa3\x4b"
+ "\x39\xd2\x1c\x88\x3e\x03\x63\xce\xc9\x2d\x03\x31\x67\x92\x6b\x20"
+ "\xe6\x34\x0e\x99\xbc\x2e\x20\x3e\xeb\xc3\xb4\x23\x69\x49\xc6\x6b"
+ "\x4d\x3c\x32\x6b\x1f\x19\x1c\xad\x4d\xa8\x34\x4d\x4e\xd2\xdd\xdc"
+ "\x81\x31\xdb\xd0\xb2\xef\x2d\x7d\x99\x2e\x8c\xda\xce\xea\xa5\x67"
+ "\x1e\x5d\x92\x9a\xfd\xd4\x0d\x28\xf3\x4b\x28\x0a\x1e\xfa\xbd\xa7"
+ "\x9b\xbf\xf7\xbd\x67\x9a\x0f\x3e\x38\x7f\xec\x5b\x98\xf6\xeb\xa4"
+ "\x42\xd4\x9f\x3f\xe4\xfd\x61\xe2\x99\xb4\xc8\xef\xdd\xdf\xfc\xcc"
+ "\x4f\x1e\x79\xa4\x85\xf4\x85\x64\xab\xf4\x51\x3d\xd6\x11\x18\x93"
+ "\x68\xde\x75\x5b\x2f\xc5\xf8\x67\x64\x6b\x70\x5f\xf6\xad\x5d\x7e"
+ "\x6b\x97\xdf\xda\xe5\xff\x85\x5d\x5e\x06\xc2\x2e\x47\x56\x84\xb2"
+ "\xcb\x99\x73\x66\x64\xdc\x66\x7c\x62\xa9\xb1\x60\xcd\xea\x47\xd6"
+ "\x2c\x59\x69\xcc\x5f\xbd\x24\x6f\x59\x5e\x34\xf4\x67\x2c\x59\x5a"
+ "\xb8\x62\xdd\x92\xc2\x65\x83\xbe\x79\x34\x28\x31\xe9\xe0\xd8\x7a"
+ "\xa4\x27\x7c\x6c\x7d\x45\x42\xe8\x71\x89\x06\xfb\xf6\x2b\x4c\x21"
+ "\xf2\xc6\xc8\x79\xb3\x42\xe4\xdd\x25\xe7\x59\x42\x8c\x01\x63\xc5"
+ "\x18\xe3\x8a\xad\xa1\xf2\x30\xbd\x56\x89\x49\x70\x9c\x26\xb5\x8c"
+ "\xe9\x06\x8a\x49\x8e\xc3\x15\x1f\x60\x9b\xba\x30\x7f\xbf\x12\xcb"
+ "\x38\xe0\x8a\xad\x4a\x8c\x26\x8f\x43\x92\x5d\x56\x33\xb6\xf3\x0a"
+ "\x47\x88\x31\xca\x0d\x72\xbd\xde\x81\xd8\x68\x8e\xd1\x6d\xbd\x32"
+ "\x66\x70\x6c\xd4\x0e\x62\x0c\x79\x65\x72\x10\x6c\xaa\x02\x8b\xf1"
+ "\x24\xed\x05\xd1\x4d\xdf\xaa\x75\xc3\x95\xfb\x99\x75\x64\x0d\xc5"
+ "\x94\x34\x8e\x24\x3c\x62\x2c\xd9\xc1\xc7\x92\x38\x56\xec\xc4\xb2"
+ "\x85\xaa\xf1\x64\x27\xc6\xc6\x43\x69\x3c\x79\x1c\xae\xdc\x45\x63"
+ "\xca\x2a\x8e\xeb\x04\xe1\x9a\x4d\xb8\x1c\x70\xa5\x8d\xc7\x7d\xa2"
+ "\x6c\x93\x6a\xde\x0c\xc7\xb5\x57\xf2\x3d\x42\x95\xb8\x10\xf3\xdb"
+ "\x1d\xd2\x99\x7c\xa5\x0d\x14\x0b\xca\xed\x28\x15\x72\xb8\x32\xc4"
+ "\xf8\xa7\xfd\x87\x62\x1c\x98\xd8\x3f\xfe\x21\x7c\x7e\xeb\xc8\x37"
+ "\xeb\x38\xce\xc4\x24\x05\xa7\x5a\x2f\x97\xae\x5e\xb5\x7c\xc5\x23"
+ "\x4f\xac\x59\x66\x5c\x3b\x6b\x96\x71\xe5\xea\xbc\x65\x13\x26\x4c"
+ "\x88\x0e\xd0\xbf\x18\x11\xd3\x7e\x68\x26\x3d\xa4\xb8\x56\xd6\x43"
+ "\x33\xc6\x9c\x72\xdc\x9c\x58\x1a\x38\xbe\xf8\xd0\x2c\xc7\xb7\x7a"
+ "\x84\x31\xc9\x30\x7b\x02\x60\x10\x9f\x1c\x23\x53\x9c\x1b\x27\xc3"
+ "\xb4\x06\xe3\xc1\x3c\x3e\x2e\xa2\xef\xef\x7a\x44\xfb\xba\x83\xf0"
+ "\xdc\x29\x8f\x77\x50\xef\x87\xc8\xe3\x84\xab\xf4\x41\x78\xee\x1c"
+ "\x18\x6f\x68\x14\x98\x14\xf5\xd8\x04\x9f\xa7\x29\x32\x19\x88\xe3"
+ "\x0f\x74\x09\xdc\x1a\xfd\x40\xdc\x7f\x55\x7e\xd0\x58\xea\xb2\x01"
+ "\xdc\xa0\x97\x61\xaa\x03\x69\x3c\x70\x42\x6e\xab\x4e\x85\x67\x5f"
+ "\x20\x9e\x03\xff\x2b\xe3\x89\x50\xc1\x74\x04\xd1\xd8\x35\x98\x46"
+ "\x5b\x9c\xc0\xdd\x80\xf5\x3b\xe4\xb6\x8d\x0a\x6a\x3f\xc2\x70\xdc"
+ "\x09\x08\x93\xa8\xc0\xa4\xa8\xc7\x52\x34\x9e\xe3\xdf\x64\xc2\xa8"
+ "\x59\xa4\x4f\x78\x0d\x41\xba\xff\xaa\x1a\xd3\x0d\x95\xcb\x05\xb7"
+ "\x3f\xb6\x07\xc7\x0b\xf5\x01\xe3\xb4\x51\x41\xed\xc7\xb1\xe1\x08"
+ "\x85\x47\x5a\x05\x26\xb8\xfd\x0e\x41\xe3\xf0\xe1\x03\xed\x1f\xd5"
+ "\x11\x84\xe7\x32\xd2\x29\xc2\xa5\xaa\xcb\x1b\x84\xe7\x98\xcc\x47"
+ "\x15\xaf\xaf\x36\x06\xc9\xe3\x7f\x64\x7a\x54\xbc\xbe\x7a\x5a\x10"
+ "\x9e\xd3\x94\x1f\xd8\xae\xab\x2d\x41\x78\x4e\x0f\xb4\x0b\xf5\x58"
+ "\xc0\x54\x04\x8d\x63\x25\x66\xfd\x75\x6c\x10\x9e\x26\x05\xa6\x67"
+ "\xc8\x33\x0d\x42\xb6\x57\xb7\x28\xbe\x48\xc8\x35\xd1\x44\xb8\x31"
+ "\xfd\xa8\xda\x17\x20\x5d\x5d\x83\xf9\x64\x84\x60\x3e\xa9\xe8\x92"
+ "\xc7\xe2\xc6\xa4\xa0\xf6\x9d\x90\xf9\x14\xad\xc2\x93\x1e\xd4\xbe"
+ "\xff\x95\xf1\x44\xaa\x60\x82\xe4\x7f\xa0\x5b\xc6\xa3\x55\xc1\x04"
+ "\xeb\xff\x49\x19\x8f\xba\xae\x7d\x5f\xce\x27\x63\x80\xfe\x13\xaf"
+ "\x30\xad\xfb\x4b\xe6\xa0\x74\xe2\xdd\xc1\x68\xec\xff\xf6\xf0\x39"
+ "\x78\x16\x37\x2c\x86\xf6\x96\x42\x1f\x6d\xe6\x73\x83\xbd\xe4\xa7"
+ "\x47\xd3\x5e\x54\x4e\xd1\x06\x30\x09\xdf\x3d\x9a\xef\xa7\x82\x65"
+ "\x33\x1d\x10\x57\xa8\x7e\x0f\xe0\x80\xd1\x15\x72\x1e\xb6\xff\xd2"
+ "\x0e\x25\x8f\xd2\xc5\xfc\xe2\x68\xec\xff\x46\x16\x88\x7e\x6c\x74"
+ "\xbe\x0c\x8b\x7e\x3f\x31\x3d\xd4\x77\xcc\xe1\xde\xbf\xac\x35\x30"
+ "\x7f\xc9\x48\xfa\xae\xd9\x53\xed\xb7\x32\xb0\x17\x79\xc0\x78\x05"
+ "\x94\x1c\x83\x31\x3a\x1a\xe3\x57\x6d\x04\x5d\x49\x01\xf3\xd0\x3e"
+ "\xb4\x87\x9d\xdd\x50\xe2\x64\x5d\x74\x06\xc1\xe6\x33\xa0\xa3\xb3"
+ "\x04\x36\x3f\x0e\x86\x96\xe2\xcf\x42\x7e\x9b\xeb\xa7\x33\x03\x13"
+ "\xa9\x6c\x27\x1c\xae\xed\x84\x92\xda\xc0\xb2\x25\x57\x81\xa1\x8d"
+ "\xce\x33\xb0\x42\x3c\xd1\x41\xef\x53\xbc\xd1\x9e\xea\xe2\xe7\x40"
+ "\x5b\x82\xd1\x65\x5b\x9e\x4d\xa1\xa5\x9d\x68\xd9\x7a\x02\x74\x2f"
+ "\x2c\xb7\x49\x4f\x9d\x40\x7a\xab\xa0\xfa\x8d\x8d\x1e\xe9\x80\x61"
+ "\x16\x1c\x30\x1c\x85\x16\xc3\x64\x68\x29\x9a\x06\x55\x27\x20\xe6"
+ "\x80\x27\x0d\x5a\xb4\x33\xa0\x25\x69\x1a\xd8\xbb\xf1\xde\xe8\x43"
+ "\x18\x17\xdf\x07\xe9\x38\x8c\xb1\xed\x78\x14\x74\x0e\x81\x13\x79"
+ "\x36\xe6\x90\xb2\xa7\x0f\x3d\x87\x6a\xc7\xda\x91\x60\x40\xfa\xba"
+ "\x90\x96\x5b\x8f\xc1\x35\x91\x49\x06\x30\x51\xff\x6b\xaf\xf1\x82"
+ "\xb6\x18\xa2\xc2\xe8\x45\x02\xdf\x0f\x14\xe3\xa8\xba\x67\xb1\xaf"
+ "\xc7\xdf\x1e\xd4\x09\xb7\xf5\x9a\x34\xac\xfb\xa8\x3c\xef\xd5\x5d"
+ "\xb2\x0b\xf5\x6c\x7d\x36\xed\x0f\x82\xfd\xf4\x35\xd9\x4a\x1e\xed"
+ "\x73\x4a\xfb\x97\x4e\x4c\x00\xbd\xdd\x6b\x86\xf7\x7b\xbb\xe8\x1b"
+ "\xfc\x6e\xda\x17\x81\xf0\x61\x9f\x1f\x41\xf3\x4f\x48\xcf\x58\xec"
+ "\xe3\xbb\xaf\x41\x38\x2c\x8f\xf2\xff\x6f\x3e\xe7\xc2\x2e\x5f\xe8"
+ "\xf2\x5f\xbe\xf0\x8c\xff\x27\x0b\x7b\xd8\x4f\x16\x7e\xee\xfb\xc9"
+ "\xc2\xbf\x97\x6c\x00\x9d\xef\xf2\x85\xce\xc3\x05\x5c\x06\xfa\xc3"
+ "\x05\x27\xe9\x7b\x7a\xdd\xa6\x93\xa0\x5f\xf4\x38\xca\xde\xfb\x67"
+ "\xd8\xb4\x02\x0c\xfe\x28\x96\x6e\xf7\x7e\x0c\x8b\x8a\x81\xe1\x7d"
+ "\x76\xa8\xf6\xf5\xc4\x41\xbb\x32\x9f\xe6\xb6\x26\xe9\x1d\x92\xbb"
+ "\x8c\xea\x75\xc6\xea\xda\xf1\x3a\x82\x57\x07\x5e\x47\x59\x1c\x1c"
+ "\x45\x5e\x95\xc4\x6d\xd1\x00\xed\xe3\x33\xd1\x0f\x9a\x13\x90\x34"
+ "\x8e\xce\x3a\x0e\xc3\xb7\x44\x7f\xd5\xe5\x05\xd7\x97\xc2\x66\xb7"
+ "\xdb\x42\xfb\xa9\x3a\xc9\xbe\x28\x1e\xc5\x7a\x8a\xb0\x1e\x1e\xeb"
+ "\xa2\x8d\xb8\x58\xdc\xe5\x05\x14\xd3\xb9\x9e\xb4\x68\x9c\x4f\x5a"
+ "\xa4\x9e\xb8\xcb\xd7\x22\x4c\xad\x43\xf2\x80\xcc\xc3\x2e\xc2\x85"
+ "\x76\xe3\x8c\xf5\x42\x04\xe2\x2c\x78\xf7\x8b\x0e\xed\xce\x67\xd9"
+ "\x51\x84\x6b\xe9\xc7\x85\xb8\x77\xf0\x38\x29\xa9\x43\x49\xa3\x38"
+ "\xa9\x12\xe1\xa8\xbc\xdd\x63\xa6\x77\x86\x0e\x7b\x7e\x17\xed\x63"
+ "\x11\xcd\xfa\x44\x7d\x14\xc3\x91\xad\xc6\x7a\x60\x88\xdb\x0a\x99"
+ "\x84\x9b\xca\xd9\xbb\xbb\x00\xcb\xad\x65\x25\x16\x8c\x17\x61\x8e"
+ "\x9b\x59\x34\xb4\xa7\xed\x01\x2c\x2f\xea\xbe\xd6\xac\xd0\x48\x75"
+ "\xf0\x3d\x6d\x89\x4e\xd4\x87\x03\xf9\x1e\x88\xad\xa1\x79\x72\x98"
+ "\x4f\xf8\x08\x17\xea\x81\x03\xdb\xba\xf6\x40\xbe\x13\xfc\x2c\x00"
+ "\xa7\x43\xc6\x57\x1d\x80\x0f\xd3\x19\xe2\x23\xfd\x6b\xc1\x32\xb1"
+ "\x0d\x1c\xdf\xbc\x77\xfd\x84\xcf\x03\x5a\x23\xa7\x77\x01\xe1\xe0"
+ "\xfb\x43\x23\x4e\xdb\xba\xbb\x30\x76\xbc\xd6\xe3\x2c\xb1\x44\xf0"
+ "\xef\xe7\xb1\xfc\x1b\x9b\xbb\x22\x59\x4f\x76\x44\x1c\xff\x76\xfe"
+ "\x2e\xa0\x77\xad\x08\xf3\x47\xd6\x63\x89\x88\xed\xc6\x58\x0f\x61"
+ "\x68\x3f\x2d\xa2\x53\x2d\xcb\x79\xd3\x17\x4c\x86\x05\xd3\x66\x4e"
+ "\x9b\x0c\xb3\xef\x9c\x3a\x19\x4c\xb7\x8e\x37\xa5\x7c\xe7\xbb\xdf"
+ "\xe1\x37\xdf\xf9\x6e\xea\x77\x20\xf3\xfe\x79\x93\x21\x73\xce\x64"
+ "\x98\x8f\x57\xe6\xfc\xe9\xf3\xa6\x4d\x9f\x3f\x19\xb2\x67\xcc\xc4"
+ "\xa7\xa9\x93\x27\x99\xee\x1e\x9f\x39\x75\xe6\x74\x98\x9b\x75\x93"
+ "\xe9\xa6\x9b\xe0\xce\xe9\xb3\x26\x99\x4c\xf2\xef\x24\x13\x81\x3c"
+ "\x98\x3a\x7d\xfe\xf8\xcc\x35\xab\x0b\x57\x8f\x9f\x33\x73\x2a\xa5"
+ "\xc0\xf4\xe9\x93\x33\x03\xe2\xc8\x64\xdf\x17\x3e\xe2\xb7\x8b\x9d"
+ "\x4e\xa7\x7d\x8c\xa1\x0e\xf5\x00\xaf\x6e\xbe\x3f\x12\x5c\xff\xbb"
+ "\x3a\x92\x1f\xef\x0b\xae\x4b\xa0\xfe\xd4\x6d\xbd\x0e\xe5\xef\x31"
+ "\x13\x1f\x69\x2f\xe1\xe3\x30\x61\x1b\xe6\x8d\x94\xe3\x91\x48\xcc"
+ "\xf7\x04\xe6\x8f\xcd\xc1\xfc\xab\x69\xbf\x1d\x3b\x5e\xc8\x7b\x17"
+ "\xfa\x43\xe4\xb1\x13\x7a\x4a\xb2\x23\xf9\x7e\x87\x28\x77\xda\x87"
+ "\xc2\x6d\xbd\x3e\x45\x65\xf7\x9d\xb4\x5f\x05\xcd\x27\x9f\x82\xeb"
+ "\x63\x0f\x17\x9a\x69\x4f\x2a\xb0\x17\xca\x38\xce\xf4\xe3\x88\x96"
+ "\xf7\x4c\x74\xd4\xd1\x5e\x20\x02\x4f\xb1\xca\x47\x38\x08\x4f\x15"
+ "\xe6\xc9\xb8\xe6\x1e\x46\x5f\x81\xbe\xfc\x79\x7f\x49\x32\xb0\x68"
+ "\x4f\x8d\xbf\x2f\x19\xc4\xfc\xeb\xf5\xfb\x54\xba\xed\x6a\x29\x42"
+ "\xb8\x17\xd2\x35\xb4\x2f\x03\xdf\xa3\x01\xae\xb3\xa1\x8e\xbb\x7c"
+ "\x55\xba\x4f\xd9\x69\xbe\x2f\xe2\x10\x6c\xdf\x78\x6c\x5f\x92\xbf"
+ "\x4a\xe7\xe0\x7b\x8c\x72\xb8\xe4\x04\x46\xcf\x71\x08\xd7\xd7\x9f"
+ "\x76\x29\xa5\xb9\xe9\xfd\x0e\xda\x2c\x63\x3c\x3d\x02\xd3\x3f\x46"
+ "\xbf\xd6\x81\xb0\x0e\x82\x9d\xe8\x85\xa1\x7c\x3f\x94\x12\x0d\x1c"
+ "\x83\xe4\x1c\x7f\x9c\xee\x98\xaa\x3e\xc2\x93\x23\xfa\x31\x94\xc5"
+ "\x69\xc4\xd3\xc3\xd3\x25\x4c\xff\x05\xe2\xff\x1f\xf2\x97\xc2\x87"
+ "\x4f\xe0\xfb\x1e\xcb\x73\xf2\x03\xcf\xb4\xdf\xf3\x66\xf1\x7c\x00"
+ "\x79\x49\xef\x09\xe8\x1d\xbf\xdb\x9a\x8c\xf1\x4f\x52\xba\xe8\x2b"
+ "\x27\xf0\xfd\x6a\x69\x7f\x59\x16\xf3\x60\x03\xe2\xed\xb4\x6d\xec"
+ "\xe6\xe7\xe7\x38\x20\x39\xdf\x5f\x62\x81\x20\x9a\x92\x89\x7e\xf2"
+ "\x21\xc8\x8b\xf1\xa8\x07\x51\x6e\xeb\x58\x08\xd2\x83\x44\xc4\xf3"
+ "\x29\xd2\xd7\x81\x6d\xfa\x14\xf1\x24\xf9\x7b\x2c\x58\x2f\x8e\x17"
+ "\x99\x05\x63\xa5\x01\x1c\x72\x79\x73\x60\xf9\xeb\x3b\xa9\x1c\xc2"
+ "\x47\xba\x7b\x08\xfe\xfa\x2e\xe2\xb9\xac\x77\xa8\x97\x63\x0b\x82"
+ "\xf4\x72\x25\xd2\x72\x8b\x2a\xbf\x3a\x28\x7f\x2e\xe6\xdf\x2e\xe7"
+ "\xa3\xed\x8f\x6d\x0a\xa2\xf7\x10\xe6\x4f\x41\x7a\x5d\x68\xdb\x11"
+ "\x58\xdf\x9e\x3a\x39\x36\x91\xe1\x1d\x41\xf0\x5e\x84\x9f\x4a\x7a"
+ "\x43\xfd\x0e\xc1\xd7\xcb\xb6\x83\xf0\x3a\xb7\xf5\x06\x7d\x50\xfd"
+ "\x93\x10\x7e\xd6\x00\x7d\x37\x98\x02\xf3\x6f\xf0\x60\xfe\x5c\xd2"
+ "\x75\xfc\x7d\x88\x62\x7d\xf2\x27\xe4\xcb\x0e\xe4\x93\xbc\x6e\xc8"
+ "\x0d\x82\x2f\x45\xb8\x3c\x99\x47\x92\xcc\xa3\x3d\xf2\xd8\xfd\xa8"
+ "\x4c\xc3\x8e\xa0\x32\xfb\xb0\x4c\x3e\xf2\xf1\x53\x45\x2f\x43\x94"
+ "\x69\x0d\x2a\xd3\x45\x72\x64\xa2\x1e\xad\xbb\x6f\xa0\x8c\xec\x27"
+ "\xd5\x38\xa8\x6d\xc3\xdc\xd6\x1b\x63\x02\x71\x8c\xaf\xc6\x7a\x0b"
+ "\x2b\x85\xdf\x19\x86\x3a\x74\x13\xa6\x6d\x41\x9c\x9f\x91\x0d\x54"
+ "\x51\x3c\xe8\xf4\x00\x2b\x49\x8f\x11\xba\x7b\xe3\xca\x38\x2f\xd0"
+ "\xfd\x78\xba\x27\xdc\xcc\x3d\x4b\xb6\xc9\x1b\x57\xe2\x2f\xa5\xf3"
+ "\xfd\xe0\xc8\x0f\x33\xf7\xbd\x7e\x81\xf3\xc6\x1f\xd0\x39\x60\xf8"
+ "\xec\x93\xeb\xd8\x40\x7b\x88\x22\xfd\xc7\xb0\xdf\x01\xb6\x1e\xe1"
+ "\x36\xc2\x54\x4c\x7f\x08\xd3\x8e\xcb\x70\x03\xcf\xeb\xef\xf5\xca"
+ "\xf9\xe3\x45\x9d\xe9\xa4\xef\x29\xf8\x7c\xad\x8c\xef\x2a\xc2\x8f"
+ "\xf7\x93\xe4\x7b\x8d\x8f\x70\x9f\x56\x6c\x72\xbc\xd8\x53\x1e\xed"
+ "\x92\xd7\x87\xe5\x69\xff\x56\xb9\x0e\xa2\x7f\xe6\x71\x18\x77\x12"
+ "\x7f\xe7\xe2\xef\x6f\x69\x3f\xd5\x12\x1f\xb7\x4f\x7a\x7e\x07\x7f"
+ "\xe7\xe1\xef\x2e\xfc\x9d\x8f\xbf\x95\xf8\x7b\x17\xfe\xae\x20\x3b"
+ "\xa1\xbd\xe1\x69\x8f\x1b\xec\x6b\x85\xae\xd1\xbb\x40\x77\x3a\xe1"
+ "\x9c\x8e\x30\x9c\x17\x7e\xe1\x6f\x74\x42\xae\xe3\xf8\x3a\x6d\xd4"
+ "\x0f\x4a\x1b\x2a\xf4\x43\xa4\xf9\x14\xbf\x74\x7a\x20\x4d\xf6\x55"
+ "\xb2\x6d\xca\x69\x02\x7f\x26\xe2\x1f\x47\xb4\x32\x81\x2b\x52\xe8"
+ "\x80\x8c\x5f\x94\xd3\x86\xa8\x53\xa3\xae\x13\x7f\xf9\xfe\x48\x0e"
+ "\xb8\x91\xc7\x6b\x0e\x18\x9f\x48\x67\x24\xf9\x49\x26\x6b\x60\x16"
+ "\xca\xae\x95\x64\xa0\xe8\x14\x13\x3a\x3a\x84\xee\xfd\xeb\x1f\x43"
+ "\x1f\x85\xf9\xeb\x1f\xf3\xcb\x7a\xc8\x61\x78\x3e\xa7\x85\xef\xd5"
+ "\x81\x38\x6f\xac\x26\xf9\xf0\x7c\x91\x3e\x4e\xa5\x97\x23\xdc\xd6"
+ "\xf1\x7b\x82\xf4\xb2\x03\xf5\xf2\x19\xd2\x3f\x92\x19\xf1\x25\xae"
+ "\x80\xc7\x05\x52\x3f\xfe\xd3\x42\xbf\xeb\xe4\x75\x4e\xc2\x17\x8c"
+ "\xef\x0e\xb2\x6d\x1d\xe2\x29\x0f\xf2\x1d\xdd\x03\x7d\xe4\x84\xc4"
+ "\x20\xdf\xb6\x87\x55\x45\x65\x39\xd0\xb6\x64\x1f\xed\x8a\x28\x26"
+ "\xdb\x9b\x80\xe3\xdf\x93\x7c\x3f\x23\xa4\xe7\xaf\x84\xc7\x55\xc2"
+ "\xcf\x04\x70\x45\x14\x90\xcf\x98\x90\xa7\xe4\xf3\xbc\xd8\xcb\x9d"
+ "\x64\x53\x11\xf9\x3c\xaf\xd4\x01\xd7\xe8\x95\x3c\x10\x7b\xcd\xb9"
+ "\x22\x0a\x79\x5e\x6d\x3f\xde\x72\x4f\xb3\x8c\x37\x22\xe4\x19\x0f"
+ "\x65\x9e\x46\x54\x7e\xe9\x86\x52\x88\xb4\x7b\x8f\x40\x86\x97\xf9"
+ "\x6e\x2c\x85\x28\xbb\x77\x2f\x8c\x05\x18\x6e\xf7\xee\xa7\x05\xfe"
+ "\xa3\xed\xde\x1d\x18\xfb\x6c\xa5\xfc\xf7\xc7\x96\x6a\x34\xf8\x5b"
+ "\x72\x3d\x48\x1a\xbb\xb7\x16\xae\x03\x2d\xfe\x16\xc2\x8c\xa7\x99"
+ "\xdb\xee\xcd\x43\xb8\x7c\xc8\xf0\xb1\xd3\xd3\x22\xd9\x27\x8b\x7d"
+ "\xa0\x9f\xf5\x34\x2b\xb1\x7b\x71\x1c\xe2\x3d\x84\xe9\x7e\x96\xe1"
+ "\x3b\x8b\x97\x9b\xf9\xcb\x3c\xcd\x19\xbe\xd3\x6c\xea\xd3\xef\xe3"
+ "\xf3\x27\x6c\x6a\x64\x09\x43\x79\x32\xbb\x37\x0d\x0e\xbb\x5c\x08"
+ "\x9f\x02\x6c\x9b\xa7\x71\xd1\x19\x09\xfa\xe8\x1c\x86\x6d\x9e\x66"
+ "\x6c\x4f\x6b\x1f\xb6\x05\xfb\xf5\xdf\xf4\x3d\x89\xbf\xe5\x9e\x83"
+ "\xfc\x59\xe7\xe9\xc0\xb6\xb4\x8e\x2f\xc5\x31\x49\x11\xb6\xc3\xe7"
+ "\x64\x18\xef\x68\xed\x45\x47\x21\x6e\x0b\xc5\xf5\x69\x38\xae\xfb"
+ "\x8c\xf6\x70\x8e\x97\xf1\xb6\xd2\x78\x8e\x45\x61\xb9\x72\xcf\xc7"
+ "\x1c\x47\x99\xc7\x13\xaf\x61\x4e\xf4\xef\xf1\xc4\x0b\xbb\xf7\x28"
+ "\x5e\x9f\x01\xf1\x80\xf6\x14\xcf\xf0\x41\x3c\x96\xf3\xf4\x45\x79"
+ "\xba\xfa\xa2\xce\xea\xf0\x4a\x65\xd1\x67\xef\x61\xd6\x84\x5f\xd1"
+ "\x1e\x9c\xac\xec\x6c\x36\x3e\x5b\x5c\x7c\x3f\x6a\xa2\x01\x86\xb2"
+ "\x6d\x67\xb3\x51\xaf\xa6\xa1\x7e\x22\xad\x67\xcb\x78\x3d\xe5\x67"
+ "\xbf\xe7\x62\xd4\x86\xb3\xcf\x88\x36\x9c\x7d\x5a\xb4\xe9\x6c\xa3"
+ "\x6c\x6f\x94\xf6\x32\xde\x67\xb9\x09\xae\xec\x6c\x23\xd3\x9d\x6d"
+ "\xf6\xa0\x0d\x23\x5f\x4b\x89\x8f\xc8\xd7\x52\xe2\x25\xe2\x6f\xb4"
+ "\x17\x55\x60\x3b\xce\x36\x23\x3d\xad\x58\xee\x4f\x7d\x3c\xee\x39"
+ "\xdb\xe5\x12\x78\xfe\x8a\x78\x72\x38\x1e\xdd\xd9\x2e\xc4\xe5\xf1"
+ "\x59\x8d\x90\xb1\x81\x79\x32\xbc\x5b\xbc\x8b\x37\x40\xc4\x38\x28"
+ "\xd5\xd0\xb8\xc7\x5e\x94\x8f\xed\x6c\xc1\xdf\x69\x98\x0f\x97\x60"
+ "\x5d\xef\x23\xde\x2e\xaa\x0f\xeb\xf1\x20\xce\x33\x88\x2b\x8f\xe8"
+ "\xeb\xa5\xf3\xca\xa2\x7b\x75\xbd\x44\x7f\x59\x6f\x32\xd3\xf5\xa6"
+ "\xfb\x75\xbd\xa9\x8a\x0e\x91\xfe\x08\xbe\x91\xde\xbc\x88\xbd\x17"
+ "\xe8\x33\x8a\x98\x17\xf3\xf4\xf6\x22\x4a\xaf\x85\xc3\x05\x08\x53"
+ "\x44\xf9\x85\x78\x3f\x1b\xef\xb7\x02\xe9\xcf\x9c\x02\xd7\x96\x09"
+ "\xa5\x05\x1a\x84\x7f\x7f\xb1\x57\x07\x8b\x0a\xb4\xa5\x87\x0b\xba"
+ "\x31\xaf\x1b\x30\xad\xc4\x5e\x54\xcb\xc7\x69\x28\x57\xaf\x4f\xd7"
+ "\xdb\xea\x2b\xeb\x35\xc4\xb9\x4a\x98\xbd\xa8\x10\x61\x0b\x60\x6c"
+ "\xa9\x4e\xc3\xe1\x8b\xf2\x78\x7b\xfc\x55\xa5\x40\x65\xda\x2c\x7b"
+ "\x81\xc6\x7b\xd8\x76\x67\x5b\xf7\x56\xd2\x51\xbf\xbf\xac\xb7\x06"
+ "\xf5\xb3\xaf\xcd\xb2\x03\x66\x77\x97\x0e\x45\x7e\x68\x30\xdd\xd7"
+ "\xd6\xdd\x82\xb0\x87\x84\xce\x6e\xf0\xc6\xb7\x59\xb6\x82\x57\xd7"
+ "\xab\xf3\x96\xf5\x36\x66\x6c\xe8\x63\xb3\x2d\xec\xfd\x87\xba\x4b"
+ "\x51\x4f\xf7\xc2\xec\x93\xde\x88\xc3\x05\xa8\xf3\x1b\xdc\x98\xee"
+ "\xe5\xfa\x3f\xfb\x64\x0f\x9b\xf3\x38\x3b\x9d\xb1\xe1\x13\xd6\x66"
+ "\xc9\x83\x45\x2e\x88\x1b\xb6\x85\xf9\xc9\x2e\x0e\x75\xee\x85\x61"
+ "\x47\xbb\x80\x6c\x62\xd6\x12\x3f\x9b\x7d\xf2\x34\x5b\xf4\x38\x8e"
+ "\x71\x8b\xd2\x90\x46\xe4\x8b\x6b\x07\xf2\xbb\x37\xb9\xcd\xb2\x1f"
+ "\x69\x40\xbb\x29\x4a\xc1\xb4\x17\x11\xd6\x16\xff\xd0\x49\x3d\x1c"
+ "\xea\xdc\x01\xde\xa8\x5e\x9d\x6f\x5b\x2f\x8e\x53\x7b\x53\x59\x14"
+ "\xf2\x7e\x5b\x6f\x8d\x2f\xaa\xb7\xd5\xbb\xad\xb7\x91\x95\xf7\x19"
+ "\x50\x4e\x51\x24\xf3\x5e\x2b\x18\xf1\xf9\xb2\x5e\xae\x47\x7d\x28"
+ "\xa7\xbe\x74\x8c\xb3\x19\xf1\x92\x6d\xeb\x4b\x16\x36\xd0\x97\xde"
+ "\x17\xd5\x97\x8a\x70\xe9\x42\x0f\xfb\xb2\x49\x2f\xe9\x4c\x21\x4c"
+ "\xbb\xdf\x87\x65\x31\xdf\x82\x57\x11\x5e\x65\x98\xd6\x81\xf8\x87"
+ "\x13\x7e\x7f\x59\x5f\x17\xe2\xf4\x4c\x00\xd0\x1d\x76\x75\x02\xcd"
+ "\x73\xf0\x79\x81\xa2\x3f\x23\xcd\xa4\x53\x5e\xfc\xf5\xa2\x6d\xf4"
+ "\x75\xf8\xef\xa8\xe6\x36\x88\xf5\x79\x32\x7c\x53\xd8\xa2\x33\x64"
+ "\x4f\x98\xbe\x0d\x71\x44\x7b\x0d\x1e\xae\xaf\xde\xcb\x89\x86\xbe"
+ "\x27\x93\x09\x8f\x96\x6d\xf3\x26\x63\xda\xf3\x2e\x96\x0c\xfe\x32"
+ "\x6f\x8d\x5f\xe7\xf5\xb0\x32\x2f\xda\x83\xb7\xd9\x57\xe6\x6d\xbd"
+ "\x37\x92\x39\xc9\x7f\xf5\x3d\x03\x58\xcf\x3e\xf0\xde\xc1\xd8\xe1"
+ "\x82\xad\x78\xff\x1e\x70\x1b\x2e\x3a\xc2\xf5\xaa\xad\xfb\x08\xf2"
+ "\xf2\x35\x4c\x6f\xe1\x7e\x8c\x78\xcf\xa2\xbc\xcd\x8b\xce\x5c\x51"
+ "\x4a\xba\xb0\xa8\x00\x4a\xb1\xae\x46\xff\x36\x6f\x8d\x6f\x9b\xb7"
+ "\xd5\x1f\x85\xf5\x44\xb3\xdb\x3c\xdc\xae\x19\xea\xf5\x3e\x2c\xf3"
+ "\x1e\xd7\x27\xb6\x8d\xa5\x86\xf3\xa5\xe4\xd3\xc8\x87\x65\x78\x3d"
+ "\xa4\x5f\x7f\x25\xff\x47\xbe\x0c\x7d\xc1\x62\xc5\x97\x91\x1f\xa3"
+ "\xb1\x18\xf9\x32\xbf\xec\xcb\xfc\xb2\x2f\xf3\xab\x7c\x19\xf2\x5f"
+ "\x8b\xfa\xee\xe1\xfe\x0b\xf9\x49\xbe\x2b\xc3\x67\x62\xc1\xbe\x8b"
+ "\xca\xf8\xd0\x2f\xf9\xd1\x2f\xf9\xd1\x2f\xf9\x85\x5f\x4a\x97\xfd"
+ "\x92\xa4\xf8\x25\xc4\x47\x7e\xdb\x1f\xca\x2f\xf9\x65\xbf\xe4\x93"
+ "\xfd\x92\x5f\xf6\x4b\xfe\x73\xf9\x25\xdd\x59\x6c\xef\x59\xda\xbb"
+ "\x3e\x02\xed\xa6\x94\xe4\x9c\xb1\xc1\x5f\x8a\x3e\x03\xf9\x78\xb6"
+ "\xd9\x2f\xfc\x51\x07\x8e\xc3\x24\xf2\x47\x3e\x2c\xef\x57\xfc\x91"
+ "\x9b\xfb\x35\x0f\xf9\x24\x92\xdd\x62\xaf\x11\xc8\x17\x71\xbf\xe3"
+ "\x1d\xed\x25\xbf\x83\xfc\x9b\x12\xec\x77\x58\x79\x2f\xf6\x9b\xa0"
+ "\x17\xf5\xf7\xa6\xc6\xa3\x0f\x88\xf7\x96\xb0\x8c\x22\x17\xe7\xd1"
+ "\xe2\xa2\xc2\x52\xd2\x39\xf4\x09\xe9\xec\x70\x29\xa0\x4f\x32\xa0"
+ "\x8d\xa3\x9e\xfb\x00\x6d\xb7\x06\x6d\xb8\x15\xfd\x55\x23\xfa\x0d"
+ "\xdd\xec\xee\x1e\xfb\x9c\x02\x18\xba\xc8\x95\xac\x9f\x7d\x92\x39"
+ "\x91\x37\x8e\x45\x05\xa5\x30\xc7\x95\x8c\xfe\xe1\x3d\x98\xd5\xc9"
+ "\xfc\xb3\x72\x1d\x46\xb4\xc5\xc6\xd9\x2b\x6c\xf1\x74\xfe\xe7\x9c"
+ "\x33\xcc\x86\xfe\xe3\xbf\x67\x9f\xd4\xc7\xe7\x74\xc2\xa8\x59\x4b"
+ "\x98\x1f\xed\x0e\x79\x8e\xf5\xa0\xcd\xa2\x2d\xa6\xa2\x5d\xa6\xa3"
+ "\x1d\xd6\xa0\x8d\xb6\xaa\x6d\x11\xed\xea\x32\xbc\x37\xf2\x76\x94"
+ "\xf5\xa5\xa3\xdd\x24\xfb\x79\x7f\xd7\xc9\xc7\xbe\x68\x0b\xe9\xdc"
+ "\x7e\xa2\x30\x7d\x9b\xb0\x47\xbf\x28\x97\xed\x27\xde\x49\xc2\x1e"
+ "\x49\x26\x98\x6f\xc1\xab\x08\xaf\x00\x7b\x24\x3b\x63\x64\x67\x05"
+ "\x67\x06\xec\xec\x71\xd9\xce\xa2\x84\x9d\xf9\x30\xa6\xf1\x3d\x29"
+ "\x6c\x8d\xf0\xd3\xf8\xb8\xdf\xd6\xa2\xbd\x35\x74\x16\x81\xd0\x1b"
+ "\x6e\x6f\x64\x6b\xe8\x63\xbd\xcd\x68\x7f\x88\x8f\x39\xc9\x0e\x50"
+ "\x2f\xff\x42\xfd\xe1\x9c\x02\xf6\x97\xc5\xbe\x2b\x50\xe6\xde\x56"
+ "\xf4\x77\x9f\xcc\xee\x66\x7f\x41\x5f\xd7\x80\xb8\x6a\xd0\x86\x1a"
+ "\xd1\x96\x9a\xd1\xa6\xc8\x96\x52\x7d\x4f\x12\x4e\x96\xda\x8f\x83"
+ "\xf7\xa7\x81\xb6\x74\xae\x79\x5a\xb7\xf5\xbb\x85\x0e\xf0\x8a\x33"
+ "\xad\xac\xdf\xc5\xf8\xc7\x67\x90\xef\x2b\x1c\xf0\x97\x2c\x1e\xef"
+ "\xa0\x0d\x16\x6c\x86\x4b\x4f\x40\xaa\x19\xf5\x1d\xf0\x3e\x06\xef"
+ "\xa7\x65\x8c\x7d\x9f\xf9\x2b\xa6\x76\x60\xdd\x6e\xb2\x43\x66\x4d"
+ "\xa1\x78\xcf\x8c\x7a\xa8\x63\xee\xe4\x18\x16\x37\xec\x73\x3a\x2f"
+ "\x96\xce\x87\xc5\xe7\x38\xe4\x41\x12\xfe\x8e\xd8\xf9\x05\x24\xe0"
+ "\x65\xd8\x29\x9f\x4d\x8b\xf7\x26\xb6\xde\x10\x5d\xb5\x0e\xc6\xc5"
+ "\xbb\xc4\xb9\xb0\x74\x8e\x2d\xc6\xe9\x09\x74\xcf\xac\xc7\x8a\xea"
+ "\xbf\x90\xcf\x86\x8d\xc5\xfa\xe8\x6c\xd8\xb5\xc9\x50\xbf\x86\x9f"
+ "\xd3\x65\xa8\xb7\xb2\x26\x9f\x9b\xf8\xe0\x69\x54\x68\x21\xda\x90"
+ "\xce\xab\x90\xce\xac\xfb\x36\x98\xe1\x83\xa2\xd0\xfb\x3c\xba\xad"
+ "\xa9\xfd\xed\x0f\x93\xbf\x43\xe1\x49\x98\xfc\x7d\x0a\x9f\xc2\xad"
+ "\x25\xa5\xbe\xdc\xb7\x8e\x75\xd3\x9e\xe1\x34\x4f\x51\xe2\x65\xff"
+ "\x83\x7c\x2c\xdd\xec\x03\x5d\x46\x91\x87\xd9\xbb\x99\xcd\x5e\x74"
+ "\x12\xea\x69\x1f\xf3\x62\xec\x3f\x63\x87\x1d\x61\x95\xc3\xda\x7b"
+ "\xd6\x31\x2f\xcd\x33\xb9\xad\xb7\x1a\x1c\x90\xa3\x17\xb2\xe8\x4d"
+ "\xe6\xe3\xdb\x98\x61\xed\x88\x6b\x38\xe1\x6a\xc3\xf2\xbe\xca\x61"
+ "\xa8\xaf\xb7\x9a\x1d\x9a\x61\x7c\x4d\x3e\xda\x71\x72\xc1\x46\xb8"
+ "\xf2\x04\xdc\xca\xcf\x99\x64\x15\xc3\xba\xc8\x1f\x60\x9a\x1e\xd3"
+ "\xb6\x22\xfe\x6e\x84\x2f\x70\xc0\x17\xf2\xda\xb8\x5b\xb7\x2a\x70"
+ "\x78\x9f\x1d\xbc\x4e\x4e\xfe\x2a\xb3\x34\x60\xdf\x39\x0d\x04\xee"
+ "\xa2\x47\x3b\xd6\x99\x43\x67\x0f\xf8\xf3\xde\x46\x3a\xff\xab\x64"
+ "\x13\x24\xa2\x7c\x88\xbe\xb3\x38\xa6\x39\xce\xac\xb7\x56\xbf\xb0"
+ "\xd1\x83\xe3\x8e\xdb\xb4\x0e\x68\xd3\x85\xe3\xa7\xff\x0b\xd6\x89"
+ "\x38\xd2\xb7\xaf\x03\x20\xfe\x10\x3f\xd1\x6e\xfc\xc8\x87\x4f\xc9"
+ "\x1f\xd5\xaf\xa3\x71\xfe\x6d\xe9\x0a\xbf\xc2\xca\xa4\x62\x58\xa7"
+ "\x18\x0b\xdf\x86\x7a\xcb\xc0\x36\x8a\xde\x9b\xdc\xc6\xe7\x7b\xd0"
+ "\xde\x53\x7b\xd0\x8f\xd0\x1c\x36\x9d\xd5\xb5\xd6\xc0\x3c\x88\x13"
+ "\xe3\xff\xa9\xa9\xf2\xfc\x98\xcb\xee\x9d\x4e\xbe\x25\x64\x9f\xc5"
+ "\xf7\x48\xed\xc7\x7f\x7b\xeb\xe1\x44\x00\xee\x9b\x62\x0c\x29\x9b"
+ "\x85\xfc\x3d\x84\x97\xbe\x2d\xe9\xc4\xfc\xb5\x2e\xd6\xc5\x2a\x0c"
+ "\xc9\x34\xd6\xa0\xfd\x46\x31\xed\xb7\xa8\xd7\xcc\xb6\x86\x68\xba"
+ "\xfd\xb7\xb6\x51\xbd\x70\xbc\x08\x22\xea\xfb\xe7\xa5\x6e\xdf\x47"
+ "\xf3\x50\x62\xfe\xed\xf6\x14\x07\x4c\x3f\xa2\xd0\x45\x71\x08\xf2"
+ "\x56\x47\x71\x09\xc5\x23\xf4\x5e\x64\x6d\x31\xf3\x50\x5c\x82\xb0"
+ "\xb9\x4a\x1b\xa8\x7d\xa2\x5d\xb7\x17\xaa\xdb\x45\x6b\x05\xe2\x8b"
+ "\x05\x0f\xd6\x6e\x00\x1d\x3f\x3b\xc8\x47\xef\x55\xa6\xf3\xb6\x50"
+ "\x9b\x79\x5b\xb8\x8f\xa5\xf1\xc4\xcd\x38\xb6\xe3\xe9\xe9\x88\xcb"
+ "\xe6\x80\x69\x66\xa1\x4f\xb7\xa7\x84\xfb\x66\x06\xfb\x27\x0f\x8e"
+ "\x85\x47\x95\xf8\xd9\xb1\xe3\x90\x36\x5b\xcc\xe9\xa5\xcd\xf6\x53"
+ "\x2c\xee\x41\xdd\x8d\x19\x01\xd4\x17\xdb\x8b\xc9\xdf\x72\xd8\x4b"
+ "\x10\xb6\x13\x61\x26\xcb\xb0\x93\xf9\xf9\x88\xe2\x77\x28\xfd\x62"
+ "\x9f\x78\xc6\x01\x69\x59\x34\xcf\xcc\x62\x2e\x77\x2a\xcf\x0c\x9f"
+ "\xf1\x37\x86\x55\x8e\x08\x7d\xce\x1f\xc6\x3e\xd4\x97\xf9\xbe\x60"
+ "\xdd\x58\xcf\xe5\xa4\x47\x25\x1b\x60\x24\xea\xe4\xa7\x9b\x37\xc1"
+ "\xa5\xa4\x63\x2c\x76\x98\xcc\xf7\xb4\x06\x66\xc5\xb8\x17\x3d\x6a"
+ "\xc1\x3a\xb8\x12\x6d\xa8\xeb\x04\xa4\xbd\xb3\xb8\xd8\x88\xb4\x02"
+ "\x6c\x3f\x05\x14\x9f\x7c\x82\xf0\xdd\x34\xc6\xa9\x3f\x45\xba\x98"
+ "\x76\x44\xd1\x45\xbc\x77\x9c\xcb\x57\x20\x5f\x8b\xc4\x1c\xc8\xe4"
+ "\xd9\xf4\x0e\xe4\x18\x4c\x4e\xa5\xf6\x8a\x35\xd7\x93\xc7\xb2\x2f"
+ "\x58\x22\x13\x7d\x9a\xc5\x01\x93\xf3\xf0\xb7\x88\x5f\xe8\x4b\xe4"
+ "\x67\x0b\xc2\x19\xd8\x17\x3e\x82\x29\xc2\x34\x13\xb3\x6a\xc8\x4e"
+ "\x6a\xdd\xd6\xc9\x39\x0e\x58\x9c\x2c\x64\x33\x39\x99\x70\x85\xa1"
+ "\xc1\xc2\xf8\x7e\xbb\x9f\x63\x7b\x27\x7f\x60\xdc\x4c\x73\xaa\x93"
+ "\xf9\x3a\x6f\xc2\x55\x2f\x09\x9f\x8d\x31\x6a\x51\x9d\xd5\x6f\x41"
+ "\xff\x6c\xf1\x57\x25\xd8\xf8\xbd\x9c\xc7\xe4\x7e\x34\x24\xfe\x0a"
+ "\x43\x0a\x3f\xb3\x11\xee\x30\x72\x3c\xa8\xf7\xb6\x2b\x4e\xd0\x33"
+ "\xdf\x5b\xdb\x15\x73\xa9\xcd\x5e\x63\x16\xe7\x45\x22\x8c\x18\xeb"
+ "\xdf\x31\xba\x07\xeb\x70\x5b\xef\x30\x3a\xe0\x6e\xbd\x78\x1f\x74"
+ "\xa9\x2d\xec\xf7\x58\x68\x03\x64\x73\xc2\xa6\xa7\x9c\x69\x6b\xe0"
+ "\xf6\x97\x8d\x3a\x5f\x24\xfb\x5f\x9a\x2f\x8a\x39\x06\x53\x5c\x6d"
+ "\x06\xae\xdf\x12\x93\xee\x28\x0d\x38\x53\x0e\xf3\x06\x5f\x77\xec"
+ "\xc3\xab\x05\xaf\x76\xf9\xf9\x28\x5e\x4e\xbc\x47\xaf\x37\xa5\x93"
+ "\xf3\xee\xa7\x79\x1a\x07\xe6\xf5\x60\x5c\x4f\xcf\x0e\xb8\x63\x3f"
+ "\xfb\x69\x92\xa4\xdc\xd7\x3f\x47\x73\x09\x77\xa0\x8f\x9d\x2c\xbf"
+ "\x63\x25\x3c\xa0\x41\xda\x88\xef\xac\xa4\x86\x79\x5a\x36\xbb\x88"
+ "\x6e\x43\x4b\x8d\x0b\x8c\xd7\x51\xfb\xa7\x90\xdc\x19\xad\x99\xa1"
+ "\xdf\xb5\x35\xcc\x79\xa0\xd6\x0b\xf4\xee\xd0\x6d\x9d\x82\xf6\x5f"
+ "\x5f\x2b\xe6\x3b\x0c\xb9\x84\x4f\xd6\x09\xa6\xb4\x5f\xf0\xf9\x52"
+ "\x9b\x71\x9d\x86\x9e\xb7\xd4\xd1\x1c\x62\x55\x14\xda\x46\xb6\xbc"
+ "\x56\x62\x0a\x9d\x2d\x39\x85\xce\x9b\x3c\x05\x53\xde\x63\xc8\xeb"
+ "\x03\x16\x7e\x76\x95\x13\xfb\x9f\xee\x3a\xbe\xbe\x69\x0a\xfa\xbf"
+ "\xc9\x7c\xff\xf8\x4a\x4c\xe7\xbe\x06\x71\x56\x61\x1e\xf6\x47\xdd"
+ "\x6d\x16\x0f\xf8\xa8\xcd\x58\xf6\xbd\x2f\x3c\xda\xf8\x42\xd0\x6c"
+ "\x2e\x40\xbf\x83\x74\x30\x94\x95\xf0\x65\x53\x32\x37\x9d\x64\x1e"
+ "\xa5\xcd\x07\x1a\xc8\x3e\xa6\xb8\x1c\xf0\xea\xac\xb0\x36\xd1\xdf"
+ "\x8e\x3b\x87\x1f\x48\x12\x72\xf4\x23\xaf\x02\xe5\x78\xa7\x5e\xc8"
+ "\xd0\x3c\x2d\x50\x86\x77\x62\x8f\x64\xae\xc0\x6b\x0f\x5e\xfb\xc4"
+ "\xb3\xfa\x32\x17\xa9\xee\x51\xae\x66\xb4\x51\xf3\x56\xf4\x17\xdd"
+ "\x42\x36\x94\x8e\xfa\x4c\x7a\xf3\x77\xec\x7b\xfa\xb2\x81\xde\x2f"
+ "\x53\x3a\xe9\x38\xa5\xfb\x31\xbe\x71\x80\xb9\x06\xf3\xf5\x64\xbf"
+ "\x74\x0e\x98\x3a\xbf\xff\xbc\x07\x30\xff\x8d\x70\xc5\x6f\x29\x2b"
+ "\x23\xdd\xc5\x32\xb5\xf1\xde\xb2\x32\xac\xcf\xa5\xf0\x15\xd3\x8e"
+ "\x52\x3e\xe9\xa9\xdb\x7a\x67\x0c\xf2\x85\xf7\xe5\x2e\x1c\x27\x86"
+ "\x8e\x3d\xee\x34\xf5\xc7\x68\xba\xbe\x0e\x92\x65\x37\xdc\x95\x86"
+ "\x7e\x0c\xfb\xf1\x84\x66\xd1\xff\xdc\x35\x99\x9e\xd1\x7f\x7e\x8a"
+ "\xf7\xa9\x6d\xe8\xa7\x7a\xab\x74\xed\x7d\x12\x0c\xed\x95\xb0\xc1"
+ "\x55\x53\xbd\xde\x38\x38\x6a\xef\xda\x07\x87\xbd\x6f\x81\xf1\x51"
+ "\x8e\x63\x12\x9d\x47\x57\xb2\x81\xf9\xde\xe8\x6d\xd4\xda\xbd\xa7"
+ "\x6d\xfc\xec\x57\xb8\x8b\xf3\xe3\xfb\xc7\x30\x0a\x58\xc4\x71\x0b"
+ "\xfe\xc4\x4c\xed\xa8\x5a\xce\xbc\x55\xc7\x69\x8f\x7a\x43\x74\x65"
+ "\x2f\x8c\x7b\x7e\x23\x98\x6a\x7b\x21\xa9\xae\x17\x92\xd9\x5f\x93"
+ "\xa5\x5a\x8c\xe3\x16\x9d\xd1\xd3\x99\xe8\xd9\x71\x05\xa0\xab\xdb"
+ "\x88\xf1\x9c\x17\x34\xbe\x4a\x8c\xe7\xbc\x18\xcf\x9d\x4e\x26\x7f"
+ "\xd9\x1f\xcf\xf5\x51\xac\x5c\x11\x93\x23\xce\x2c\x8d\xc9\x89\xb5"
+ "\x80\x26\x26\x17\xf4\x48\x5f\xc9\x29\xb8\xf3\xf1\x98\x4e\x8c\x25"
+ "\xb1\xcd\x0e\xb9\xbd\xc8\xf3\xad\xf1\x16\x18\xca\xdb\x8a\x3e\x9c"
+ "\x55\x26\x34\x87\xed\x9b\x25\xd2\x29\x17\xd9\x12\xb5\x61\x1b\xbd"
+ "\xe3\xde\x77\x85\x47\xbb\xb6\x96\x79\x28\xbd\x70\x34\xf3\x60\x7a"
+ "\x01\xd5\xdd\x84\xe9\x6e\xeb\x5d\x35\x0e\xc9\x55\x1b\x4e\x47\x71"
+ "\xbc\x24\xfb\x9a\xa9\x23\x99\x54\x8a\x3a\xea\x35\x6c\xf2\x62\x3c"
+ "\x7e\x8a\xec\x78\xaa\x21\x23\x9f\x79\x8d\xab\x68\xbd\xc1\x54\x1d"
+ "\xad\x85\xa0\x77\xa0\xaf\x63\xac\xf3\x65\xeb\x1f\xa8\x0f\xa1\xf1"
+ "\x43\x7c\x3e\xe2\x2c\xf7\x1a\x58\x49\x72\x88\xfd\xc5\xc3\x7e\xff"
+ "\x1a\x23\xbe\x6d\x9d\x9a\xe5\x80\x55\x8d\x44\x3b\xff\x1e\x88\xfb"
+ "\xd3\x69\x29\x2e\xe4\x41\xa0\x0f\x98\xa6\xa3\xfd\xd2\x7b\x2a\xa2"
+ "\x72\x6c\xa3\xc8\xf7\x4f\xd3\x88\x78\x30\x2a\x5b\xf4\x05\x53\x3f"
+ "\x15\xef\x2b\xa6\xee\x71\xc0\x7c\xde\xc7\x17\x8c\x21\x9d\x98\x7a"
+ "\x94\xc5\x45\x2d\x24\xb8\x09\xa5\x50\xba\xda\x0b\xb9\xac\x32\x2a"
+ "\x9b\x71\x5b\x39\x05\xec\x27\x8f\xb9\xe9\x1b\x1f\xd7\xe5\x0b\xdd"
+ "\x18\x1b\xa4\x60\x5e\x0e\xd5\xe1\x44\x18\xe4\x7b\x94\x58\x2b\x31"
+ "\x15\x7d\xc2\x5c\xd9\x1f\x4e\x3d\x24\xe6\xa1\xa7\x1e\xea\xc1\xb2"
+ "\x18\x2b\x5e\xe2\xb6\x4e\xc3\xf8\xf7\xb1\x62\xf9\x9d\xba\xf3\x29"
+ "\xfe\x6d\xea\xb4\x71\x0e\xc8\xb7\x51\x5a\xe1\x68\x30\x14\x1a\x59"
+ "\x57\xd8\x58\x2f\xa0\x9d\xd3\xdf\xe4\xeb\xfe\x24\xb8\x1c\x71\x14"
+ "\x28\x78\xb1\xbf\x7d\xb5\x47\xba\xef\x3e\x4c\xdb\xaa\xe0\x45\x98"
+ "\x4b\xf1\x79\x47\x3f\x8c\x28\xb3\x47\x55\xe6\xbe\x1e\xe9\x86\x57"
+ "\x31\xad\x39\xa8\x4c\x6b\x50\x99\x0e\x55\x99\x52\xb9\x9e\xee\xa0"
+ "\x32\xde\xc0\x32\xd3\x63\x06\xd3\x36\xdd\x18\x58\x66\xba\x29\xa8"
+ "\x8c\x79\x30\x6d\xd3\xb3\x82\xca\xe4\x05\x95\x29\x54\xf1\x96\xd6"
+ "\x2f\x99\x30\xad\x2c\xa8\x4c\x4d\x50\x99\x46\xe5\x19\x63\xcf\x56"
+ "\x11\x1b\xa0\x3e\xa1\x4c\x51\xae\x39\x98\x8f\xed\xbf\xef\xe8\x39"
+ "\xe2\x6f\x1c\x1b\x46\x65\x95\xec\x14\xe7\xf7\x92\x5f\xa5\xf5\x0e"
+ "\xe4\xcf\xe9\x9d\x0c\xe9\x04\xc5\x9d\x54\xd7\x71\x98\x71\x86\x74"
+ "\xc8\x6d\x9d\x91\x38\x98\x1f\x33\x4c\x81\x74\xce\x30\x07\xd2\x39"
+ "\x23\x73\x30\x3f\x66\xe4\x05\x95\x29\x0c\x2a\xb3\x55\x55\xa6\x41"
+ "\xae\xa7\x26\xa8\x4c\x63\x50\x99\xe6\xc1\xfa\x39\xe3\x50\x50\x99"
+ "\xa3\x41\x65\xba\x07\x78\x78\x37\x19\xb1\x86\xec\xc1\x6d\xbd\x1b"
+ "\xc7\x3f\x59\xe3\xce\xc1\x3b\xbd\xa2\xcf\xca\xb7\xda\x42\xaf\xef"
+ "\xde\xb6\x43\x7c\xa7\xc7\xcf\x4a\xe8\x84\xbb\x95\xf3\x87\x9c\x2f"
+ "\xf4\x7a\x22\xe9\x1d\x2b\xf2\xb6\xeb\x40\x91\x07\xfb\xdc\xbb\x31"
+ "\x16\x99\xdd\xa0\xac\x65\xa1\xf5\x3f\xfc\xac\x1d\x3e\x1e\xb9\x3b"
+ "\x5d\xd8\xdf\xdd\xb5\xf2\x7b\x1f\x6a\x0f\x8e\x33\xee\xae\xfd\x6a"
+ "\x74\xa5\x4f\x26\xba\xe8\xcc\x09\xc4\xe1\xe8\x1f\x6b\xf4\xd3\x4a"
+ "\x75\xa6\xcf\x54\x68\xad\x17\x6b\x90\x68\x6d\xb2\x93\xce\x01\x71"
+ "\x5b\xd3\x13\x54\xe3\x13\xa2\xd5\xb5\x6f\xa3\x47\x1b\x44\xb3\x4b"
+ "\xd0\x9c\x9e\x2e\x7c\x54\x7a\xba\xe2\x4f\xc2\xea\x5f\x85\xc1\x70"
+ "\x18\x5b\x48\x6b\x2c\xda\x6a\x31\xde\xc4\x31\x16\xd1\x7d\x0c\xd2"
+ "\xab\x79\xfc\xbb\xaa\x17\xe8\xde\x5e\x7c\x1b\x5f\x83\x21\xb7\xa5"
+ "\x95\xce\x7b\xa6\xd8\xa7\xa5\xe0\x73\x5a\x07\xc8\xf8\xd9\x4f\x90"
+ "\x7e\xe6\x40\xb1\x93\x68\xb5\x29\xeb\x95\x90\x16\x11\xd7\x55\x18"
+ "\xf4\xb4\x3e\x84\xd6\x52\x1d\x70\xa5\x12\x4c\x27\xf2\xb6\x51\xe1"
+ "\x01\x9d\x1d\x8d\xb0\xb5\xe1\xc6\x4a\x6a\xbe\x0a\x1a\xee\x5d\x22"
+ "\xf4\x67\xe6\xb8\x40\x7b\x88\x44\x3d\x9d\x69\x0e\xd4\xb9\x99\x99"
+ "\x81\x3a\x37\x33\x37\xd0\x1e\x24\xb4\x87\x99\x85\x41\x65\xb6\x06"
+ "\x95\xd9\xa1\x2a\x53\x2d\xd7\xd3\x18\x54\xa6\x39\xa8\x8c\xda\xff"
+ "\x61\x9b\x67\x76\xf4\x8f\x3b\xb9\xbf\x9f\xd9\xa5\x7a\x96\x76\xf0"
+ "\x7e\x6a\xa6\x57\x49\x93\xbf\x83\xe6\x6b\xb3\x04\xbe\x7b\x0c\x41"
+ "\x3e\x0a\xe1\xef\x19\x17\x48\xc3\x3d\x69\x81\x34\xdc\x33\x4b\x79"
+ "\x96\xd7\x73\xfc\xfa\x38\xdc\xf3\x03\x59\xcf\x5c\xf1\x5b\x60\x6e"
+ "\xbc\x77\xde\x03\x14\x9b\x51\xff\xc4\xd7\xcc\x6d\xc2\x98\xf2\x0c"
+ "\xbd\x33\xf0\xc0\xf1\x42\x88\xa0\xf3\x68\x1c\x70\x6f\x0b\x8b\x8d"
+ "\xc9\xa6\x35\xf5\x18\x4f\x65\x20\x8e\x1c\xac\xbf\x06\xeb\x40\xde"
+ "\xdd\xd3\x14\x44\x83\x2d\x88\x86\x76\xd5\xb3\x1e\x9f\x1d\xaa\x76"
+ "\xeb\x69\x5f\x8a\x1f\xf1\xd8\xfa\x1e\x8f\x92\x4e\x73\x00\xd8\xc6"
+ "\xae\x12\x1e\x07\x98\x69\x9d\xe2\x88\x63\x70\xcf\x67\x34\x5f\x20"
+ "\x70\xde\x9b\xa4\xe6\xad\xe0\xc5\xbd\xa9\x81\x74\xdc\x9b\x1e\x48"
+ "\xc7\xbd\xd9\x03\xbe\xe6\x1e\x79\x2d\xcc\xbd\xf9\x0e\x58\x50\x43"
+ "\x69\xc8\x0b\x63\xbc\xd7\x78\x89\x6d\x0c\xc5\xa9\xf7\xfe\xc2\x85"
+ "\xed\x65\xcf\x48\x23\xe4\xe7\xf7\x18\xc6\x0c\x18\x8b\x65\xa3\x7f"
+ "\xa6\x6f\x75\xaf\xc6\xb4\x16\x21\xd7\x7b\xb1\xfd\xf3\x9b\x04\xde"
+ "\x7b\x5b\x78\x3f\x30\x86\xe2\xdf\x7b\xab\x59\xac\x21\x39\x9c\x3e"
+ "\xf7\xc4\x19\x8c\xca\x9a\x5e\xc4\xe1\x52\xec\xc1\x5f\x65\x30\xfa"
+ "\x2b\x2f\x29\x70\x5b\x67\xe9\x1c\x30\x13\xc4\x98\x66\xc4\x7e\xd4"
+ "\xfd\x1a\x94\x1f\x8e\x81\x67\xc9\x63\x19\x43\x0a\xad\x55\xa4\xfd"
+ "\x32\xd0\x67\xc6\x88\xb5\x20\xb3\xd2\x54\x76\xe5\x32\x6e\x9c\xc2"
+ "\x8e\xc1\x6c\xf2\xa9\x7a\xf2\x1b\xb4\xe6\xf1\x80\xd7\x09\x34\xcf"
+ "\x62\xf7\x9e\xe0\x31\x39\xe6\x83\x5c\xb6\x48\x55\xd6\x29\xcf\x83"
+ "\x74\x51\xde\x44\x2f\x68\x0f\xb8\x9c\x74\xb6\x6f\x82\x88\xe3\x67"
+ "\x6b\x0e\xa0\xbf\xc0\x32\x7b\x95\x32\x34\x67\xc2\xd7\x15\x14\x82"
+ "\x76\x42\x31\x68\x6d\x1b\x8f\x71\xdc\xca\xda\x21\x1a\x1f\xd9\x8b"
+ "\xbb\xc0\xee\xea\xa0\x39\x4d\xad\x58\x27\x36\x1b\x22\x3c\xa0\xeb"
+ "\xa9\x34\xe8\xd1\x17\x83\xaf\xd2\x60\x40\xda\xb0\x3f\x9b\x95\x44"
+ "\x3e\x50\xcd\xbb\xe9\xd3\x33\xe7\x65\xcc\x1e\x7f\xff\xbc\x99\x59"
+ "\xd3\x6f\x33\x66\xad\x58\xb9\x2c\x6f\xfc\xea\x27\x0a\x8d\xeb\xd7"
+ "\xac\x28\x5c\xb1\xea\x11\x7e\x1c\x99\x71\x49\xa1\xf8\x4d\xce\x5f"
+ "\xb2\xb6\x70\x32\xdd\x8e\x33\x16\xac\x59\xb6\x8e\xdf\x8e\x8d\x86"
+ "\x40\x24\x2b\x0a\x97\xad\x31\x5e\x9b\x37\xce\x38\x63\xc9\x8a\x7c"
+ "\xfa\x6a\x22\x14\xae\xdb\x8c\x6b\x96\xad\x59\xb6\x24\xcf\x38\xd9"
+ "\x68\x22\xcc\x6a\x74\x2a\x79\x9a\x14\xff\xb4\x16\xfb\x73\x8c\xa1"
+ "\xbb\xc8\x4f\x51\xbf\x7e\x1c\x32\x3e\xa3\x18\x8e\x9f\x1f\x86\x7a"
+ "\x88\x7d\x82\xc3\x6d\x9d\xdd\x39\xb8\x1f\x9f\xed\x09\xd4\xdf\x39"
+ "\xba\x40\xfd\x9d\x63\x18\xdc\x8f\xcf\x09\xb2\xff\x39\x41\xf6\x3f"
+ "\x67\xd6\xe0\x7e\x7c\x4e\x6e\x50\x99\x82\xa0\x32\xa5\xfd\x7e\x06"
+ "\x69\x7d\x8a\xfb\xa5\x39\x3b\x82\xca\xec\x09\x2a\xb3\x2f\xe8\xb9"
+ "\x45\xf5\x8c\xb1\xeb\x9c\x23\xea\xd8\x00\x9f\x3b\x15\x5b\x1f\xf0"
+ "\x6f\x73\x3c\x0a\x0c\xf5\x3d\xf4\x6d\x8d\x80\xcd\xd0\xab\x60\xbb"
+ "\x04\x6c\x46\xbf\xfd\x93\x4f\xa2\xb5\xa2\x22\x3e\xcf\xf8\xb1\xec"
+ "\xdb\x3a\xb7\x0f\xf4\xa1\x9d\x28\x8b\xab\x4f\x41\x06\xad\x03\x26"
+ "\x58\x27\xad\x1f\x66\x3f\x59\xe8\xae\x1f\x01\x3a\x2a\x4b\xe7\x67"
+ "\x31\xeb\x6c\xfe\x1d\x3d\xa6\xc5\xe0\x85\x7e\x2a\xa3\x4c\x59\xab"
+ "\xbf\x15\x61\x1c\xc0\x8f\xd5\xd1\x50\xb9\xad\x7c\x9d\x23\xd5\x97"
+ "\x49\xdf\xf9\xd0\xb7\xe7\xba\xed\x62\xcf\x8a\x4e\x3a\xd7\x8d\xea"
+ "\x46\x1c\x5a\x26\xcd\x9e\x2b\x9f\xcf\xa5\xc7\x2b\x01\x71\xf6\xaf"
+ "\xff\x77\x40\x06\xff\x4e\x88\x62\x3e\x8a\xf5\x44\xdc\x93\xe1\x55"
+ "\xe2\x0b\x1a\x2b\x84\xf2\x1d\xa1\xd7\x82\x43\xfc\x76\xab\xbf\xc3"
+ "\xb6\xb9\x93\x68\x1a\x47\x71\xa8\xdd\xe0\x85\xc3\xb5\x5e\x1c\xbf"
+ "\x82\x9e\x8f\xa7\x8a\x4e\x82\xbd\xc1\x0b\x34\x3f\xbc\xb8\x08\x4a"
+ "\xeb\x25\x7f\x07\xeb\x2f\x47\x63\xb4\x4c\xfe\x5d\xf8\x56\x4a\xc7"
+ "\xf2\x38\x96\x70\xd2\x9a\xf1\x30\xf3\x11\xf1\x04\x67\x1b\x43\xe3"
+ "\xbd\xcc\x5a\x39\xf6\x2d\xab\x47\x5c\x21\xd7\x33\x4b\x60\x77\x5b"
+ "\x33\xb1\xff\x2b\x32\x2b\x3e\xfb\x40\x0d\xf7\x7d\x12\xa6\x63\xdf"
+ "\x9f\x69\x0c\x17\xa7\xc8\xfe\xbd\x80\xd6\xb1\xb9\xad\x73\x13\xcf"
+ "\x05\x4b\x74\x1f\xc0\x76\xa3\x2d\xe6\xbe\xb0\xd9\x14\x29\xfb\x57"
+ "\x1d\x96\xcb\x52\xca\x9d\x4f\xfb\x28\x36\xa2\xfe\x18\x6d\xd5\x25"
+ "\xc6\x8a\xf3\x7e\xfb\x23\xbe\x46\x7a\x2e\xc6\x7f\x99\x8a\x1d\x0c"
+ "\xc3\x67\xf4\x7f\x73\xf9\x7c\x22\x5f\xfb\x83\xe3\xc9\xb5\x05\x18"
+ "\xb3\x19\x5c\xe8\x1b\xe7\xb6\x2a\x79\x7c\x9e\x88\xf2\x8a\x99\xe7"
+ "\x80\xa1\x93\xf2\x3a\xfb\xf3\xc4\x37\x0b\xec\x40\x91\x97\xd2\xbd"
+ "\x4a\xba\xe8\x5b\xe6\xc5\x04\x3d\x27\x2a\xcf\x78\x9f\x8c\xb4\x54"
+ "\xcb\xf8\x9d\xe8\x73\x35\x62\x8f\x87\x79\xdb\xea\xb8\xdd\xcc\x4b"
+ "\x57\xf2\xf9\x9c\xda\x2e\x7a\x37\xe6\x02\x7f\x5c\x54\x2e\x8f\xb9"
+ "\xb0\xcc\x1b\x9f\x7b\x22\x71\x8c\xa1\x61\x74\x96\x2b\xa6\x11\x1e"
+ "\xb2\x19\x3a\x57\x93\x62\x35\xc4\x95\x46\xdf\x55\x90\x8e\xac\xf7"
+ "\x42\x62\xc1\x1d\x34\xff\x3c\x8f\xeb\x2d\xa5\x11\x5e\xc2\x47\x7d"
+ "\x22\xe1\x26\x7c\x55\x14\xd3\xf2\xf5\x99\xf3\xb0\xfd\x99\x61\xcf"
+ "\x44\xc3\xfc\x2e\x15\x2f\x23\xf1\xd9\x13\xd8\xd6\xf9\xba\xa0\x67"
+ "\x83\xf2\x4c\x73\xbd\x42\xf7\xe6\xc7\xc8\x79\x29\xe7\xaa\x6b\x0c"
+ "\xff\x26\x67\x7e\x76\x60\x7d\xf3\x2d\x41\xf8\x8b\x82\x9e\xcb\x94"
+ "\xe7\x1d\xfc\x1d\xc3\xfc\x1a\xa5\x0e\x2e\x33\xd4\xb1\x3d\x9b\x9d"
+ "\x91\xe7\xda\x3b\x05\xcb\x1c\x52\xd5\x39\x04\x9f\x8f\x0e\xc8\x6f"
+ "\x7e\x97\x82\x0f\xef\x5d\x2a\x38\x8c\x4b\xb2\xb4\x0a\x9c\x78\xbf"
+ "\x91\x95\x30\x50\x2e\xcb\xf8\x25\x6d\x0d\xd2\xdd\xfb\x56\x0a\xdd"
+ "\xcd\xca\x0e\xa4\x25\xcb\xa2\xc2\x59\x38\x40\x4b\x56\xa9\x0a\x0e"
+ "\xed\x33\xab\x3a\x58\x57\xd7\x16\x91\x8e\x93\xbe\x66\xed\x0d\x91"
+ "\xe7\x91\xf3\x5a\x43\xeb\x78\x96\x43\x95\x2e\x8f\x8f\xee\x9b\x2e"
+ "\xc7\x09\xe4\x9f\x5d\x3d\x25\x59\xca\xb9\xae\x5c\x27\x69\xdf\xb2"
+ "\x89\xe2\x0c\x71\xd4\xeb\xfb\x8c\xc1\x78\xc5\xf7\x3e\x32\x8e\x7e"
+ "\x9c\x59\x4e\x11\xe3\xdd\x97\x39\xd0\xb6\xfb\x72\x1c\x30\x4f\x79"
+ "\x4f\xe4\x14\x73\x83\x59\xb3\xc2\x8d\x3b\x10\xbe\x22\x90\x67\xf7"
+ "\xd5\x0e\xf0\xec\xbe\x46\x15\xde\x7d\x2a\xb8\xdf\xe0\x73\x8b\x0a"
+ "\xae\xfd\xcb\x74\x53\xe8\xca\x7d\x9e\xc0\xba\x16\xe8\x06\x70\x2c"
+ "\x48\x18\xa8\x6b\x81\x51\x05\xd7\x81\xcf\xa6\xf0\xf2\x59\x30\x2b"
+ "\xbc\x7c\x16\x58\x42\xcb\x67\x41\xa9\xaa\xde\x8a\x2f\xb7\xab\x05"
+ "\x4d\x2a\x7a\xea\xf1\xd9\x16\x68\x47\x0b\xda\x83\x9e\xfb\xe5\xcf"
+ "\xd0\x77\xec\xd9\x68\x8e\xa4\xf4\xc2\xd1\xa0\x17\x76\x76\x3f\xa8"
+ "\xf3\xdf\xe8\x15\xf9\x44\x23\x7f\x07\x47\xef\x37\x05\x5c\x72\x30"
+ "\x1c\xc1\xa8\xf2\xd3\x15\xda\xb1\xbf\x0e\x79\x06\xa9\xd2\xff\xd9"
+ "\xfd\xd4\xff\xdd\xcf\xfb\x3f\x56\x19\xbd\x83\x59\xdf\xcf\x0e\xd7"
+ "\x97\x21\xde\x06\x07\xdc\x9f\x2d\xf8\x73\x3f\xea\xff\x6a\x1e\x9b"
+ "\xb0\x8a\xe8\x1d\xa8\x4f\xbd\xc7\x21\x7b\x3a\xfe\xf6\xe1\xef\xd8"
+ "\xc0\xfe\xf5\xfe\x16\x66\xd5\xcc\xaf\xb7\x06\xf7\xbb\xf7\x1f\xc5"
+ "\xb1\x47\x6f\xbc\xb7\x34\x3b\x44\x9e\x87\x59\x23\xe6\x0d\x4e\xcf"
+ "\xa6\xf7\x3b\xbd\x0e\xc8\x9e\x46\xf4\xaa\xd2\x93\x99\x35\x2e\x8b"
+ "\xe0\x1d\x54\x1f\x96\x09\x27\x37\xe5\xbb\x2b\xa1\x7b\xd9\x85\x41"
+ "\xed\x38\x8b\xb8\xfe\x2e\xda\xf1\xc0\xec\xa0\xba\x2b\x42\xb7\x23"
+ "\x7b\x0f\xb6\xe3\x6c\xe8\x76\x64\xdb\x38\x6f\x25\x6c\xcb\xa0\xb8"
+ "\x23\x9b\xbe\x61\x3a\xcb\xf9\x1e\x98\xee\x52\xc6\xa9\x25\x67\x71"
+ "\xfc\x2f\x01\x2f\x3b\xbf\x78\x40\x6e\x02\xee\x81\xc4\xf8\x1a\xc8"
+ "\x1c\x5c\xe7\x03\x29\xcc\x3a\x74\xbe\x03\x1e\xc8\x57\xfa\x2b\x39"
+ "\x7d\x96\xa0\x05\xf9\x24\x11\x9f\xb0\x3d\x58\x2e\x9c\xbc\x15\xfb"
+ "\x14\xef\x99\x1e\x40\xfb\xcf\xce\x54\xfa\x74\xec\xcf\x9d\x0a\x1f"
+ "\x31\xaf\x39\x28\xcf\xa3\xca\x3b\x12\x90\xb7\xa9\x3f\xbd\x5b\x49"
+ "\x3f\x3f\x39\x3d\x98\x18\x24\x27\x94\xcf\x83\xaf\x05\xb6\xfb\xc1"
+ "\x71\xa2\x7d\x28\xa3\x41\xbc\x7e\x30\x1d\x65\xd4\x17\x5a\x46\x0f"
+ "\xe6\x85\xd6\xb5\x07\x8b\x39\xbe\x11\x10\x0a\x1f\xad\xe9\xe9\xe3"
+ "\x3a\x28\xcb\x69\xb0\x7c\x1e\xdc\xaf\xc8\xe7\xfc\xda\xb8\x10\x82"
+ "\xda\xe8\x3b\x0e\x0b\x37\x89\xb6\x2e\x6c\x0b\xc4\xbd\xd0\x10\x5a"
+ "\x17\x17\x9a\xb0\x9d\xbe\xd0\xed\x5c\x38\x2b\xbc\x2e\x2e\xb4\x60"
+ "\x7b\x7c\x83\x75\x71\xa1\x78\xa7\x2b\xeb\x60\x50\x5e\x2d\xb3\x86"
+ "\xac\x67\x1f\xc5\x45\x0e\x58\xd8\x4d\xef\xe9\x54\xe9\x87\x02\xf5"
+ "\x0f\xdb\x40\xe5\x88\x7f\x5e\x31\x8e\x21\x39\x1c\x37\x82\xf4\x65"
+ "\x3a\xe9\xb6\xe6\x8c\x0b\xe2\xd5\xe9\xe3\x90\xf3\x5a\x8f\x24\xcd"
+ "\x10\xfc\x7a\xe8\xf1\x40\x9a\x72\xd2\x43\xf3\x2b\x27\x17\xf9\x75"
+ "\x3a\x34\xbf\x72\x8a\xc3\xf3\x2b\x87\xe4\x7f\x7a\x30\xbf\x72\x9a"
+ "\xd4\xfc\xf2\x5b\x45\xfb\xae\x31\xa0\x6e\xf4\x2d\x66\xf5\xc2\x97"
+ "\xeb\xe3\x51\x57\x44\x99\x6e\x2a\xd3\x19\xef\x11\x7a\x62\xbc\x02"
+ "\x74\xa7\x20\xe7\x90\x62\xff\x71\x35\x30\x94\xf5\x2d\xa4\x35\xdc"
+ "\x74\xb6\xb4\xde\x5e\x74\xda\x66\xf7\x9a\x80\xe6\x1b\x03\xeb\x7d"
+ "\x28\x39\xb4\x2f\x78\xc8\x8c\x3c\xfd\x61\x88\x74\xf9\x9b\x82\x87"
+ "\xaa\x03\x7d\xc4\x43\x05\x81\x32\xca\xa1\xb5\x1e\xf1\xd0\xbf\xdf"
+ "\xea\xb9\xaf\x73\xcb\xec\x21\xc7\x60\x99\x2d\xda\x22\xe4\xb5\x68"
+ "\x49\x10\x7d\x9e\xd0\xf2\x5a\xa4\x0f\x2f\xaf\x45\xe3\xc2\xcb\x6b"
+ "\x51\x3a\xc9\xcb\x01\x8b\x4a\x03\xfb\x8d\x45\xb9\x81\xed\xc5\x7a"
+ "\xb1\x1c\x93\x86\x5c\x42\xcf\xe7\xdb\x6e\xe5\x22\x1f\x47\xb2\xa2"
+ "\xfd\x06\x90\xfe\xd1\x44\xe3\x85\xe2\x08\x8b\x1b\x79\x58\xbd\x31"
+ "\xec\x79\xe5\x31\x87\x71\x5c\x49\xeb\xf3\x8c\xa3\x68\xae\x6c\xf1"
+ "\x7d\x7e\x49\x73\x1b\xde\x4b\xc7\x61\xc9\x68\xbf\x14\x51\x4a\x6b"
+ "\xc9\xf8\xb7\x8a\xfc\xfd\xc4\xe2\x7c\xb5\x2c\x68\x4d\x59\x95\xd8"
+ "\x3b\x92\xe6\x39\x3f\xc1\xf2\x67\x84\x5c\x96\x68\x02\xf9\xb8\xb8"
+ "\x3a\xb4\x5c\x16\x37\xa2\x5c\x3e\x09\x2d\x97\xc5\x2d\xe1\xe5\xb2"
+ "\xd8\x81\x72\xf9\x64\xb0\x1d\x2d\xf6\xc8\x76\xf4\x14\x95\x31\xae"
+ "\xa2\x78\x35\x77\x05\xc1\xe0\x3d\xda\x48\x2e\x3f\xb3\x7e\x7c\xb7"
+ "\x62\x47\x54\x26\x97\xc6\xff\xbc\x7e\x19\x26\x59\xc6\xa1\xc2\x9b"
+ "\x9b\x19\xdf\x1d\xca\x4e\x72\xe9\xec\x5a\xcd\x84\x02\xd0\x21\x0f"
+ "\xb3\x77\x12\x8e\x35\x00\x88\xe3\x3d\x82\xa3\x74\x3a\xeb\x59\x05"
+ "\x5f\xa3\xc0\xf1\x79\x51\x01\x5b\xcd\xdc\x16\x20\xb8\x20\xdc\x72"
+ "\xfb\x87\xf2\x7e\x84\xe0\x09\x2e\x08\xa6\x4b\xd8\xe3\x92\x71\x81"
+ "\xf6\xb8\x04\x02\xf5\x73\x31\xbd\x9f\x88\xf7\xa3\x9f\xc3\xfb\x2c"
+ "\x9f\x55\x73\xdb\xc5\xb1\xcd\x25\xc5\x41\xb6\x89\x3a\xf0\xf0\x55"
+ "\xb2\x0e\xf8\x02\x69\x5d\xb2\x23\xb4\x0e\x2c\xd9\x1b\x5e\x07\x96"
+ "\xb4\x86\xd7\x81\x25\xb4\xef\xcc\x27\x0e\x78\x38\x31\xd0\x36\x97"
+ "\x78\x03\xdb\xbe\x64\x87\xb0\x4d\x18\x7e\x21\xb6\x89\xb1\xd0\x25"
+ "\xe1\xec\x50\x8e\xff\x35\xf5\xbd\x00\x17\xc0\x33\x1d\xda\x15\xd2"
+ "\xf7\x70\x13\xbd\x43\x42\x1f\x6f\x21\x1e\xd6\xf1\x31\xda\xc3\x2d"
+ "\x6a\x3e\x56\x89\xb1\x56\xc9\x71\x58\x3a\x93\xd6\xec\x09\x7e\xe6"
+ "\x0d\x0f\x6c\xff\xc3\x9d\xa1\xf9\xf9\x30\xcd\xcd\x97\x84\xe6\xe7"
+ "\x52\x43\x78\x7e\x2e\x4d\xa1\x6f\xe3\x07\xdb\xd4\xd2\x59\xc6\x75"
+ "\x3c\x46\xe1\x65\x4e\xc1\xd2\x17\xcf\xaf\x7f\x5a\xba\x35\xb0\x7f"
+ "\x5a\x9a\x7f\xe1\xfd\xd3\xd2\xd6\xd0\xfd\xd3\x52\x47\xe8\xfe\x69"
+ "\xa9\x47\xd8\x43\x9e\x29\xd0\x1e\xf2\xf4\x81\x3a\x81\xbc\xbb\x68"
+ "\xfd\x53\x5e\x69\x90\x0d\x6c\x3f\x0e\xcb\x34\x18\x53\x3c\x2d\xe4"
+ "\xb6\xec\x83\x40\x1a\xf3\x6a\x43\xcb\x2d\x6f\x1f\xca\x6d\x7b\x68"
+ "\xb9\xe5\xb5\x87\x97\x5b\x1e\xbd\x13\xdd\x3e\x58\x6e\xcb\xb4\x17"
+ "\x1e\x53\x2c\x4b\x0d\x94\xd9\x32\xe3\x85\xcb\x6c\x59\x71\x68\x99"
+ "\x2d\xdb\x11\x5a\x66\xcb\xf6\x0a\x99\x2d\xeb\x0c\x94\xd9\xb2\x96"
+ "\x40\x99\x21\xdf\x2e\x9a\xcc\x96\xa7\x04\xc9\x6c\xf5\x71\x58\xfe"
+ "\x0e\xca\xac\x5d\xc8\xec\x91\x0d\x81\x34\x2e\xcf\x0c\x2d\xb3\xe5"
+ "\x16\x94\xd9\xea\xd0\x32\x5b\xbe\x35\xbc\xcc\x96\x37\xa0\xcc\x56"
+ "\x0f\x96\xd9\xf2\xe6\x0b\x97\xd9\xf2\xee\x40\x99\x2d\x3f\x72\xe1"
+ "\x32\x7b\xc4\x14\x5a\x66\x8f\xa4\x87\x96\xd9\x23\xb9\x42\x66\x8f"
+ "\xd4\x04\xca\xec\x91\xa2\x40\x99\x21\xdf\xbe\xa6\xcc\x50\x3e\x35"
+ "\x62\xbd\xee\x23\x67\x7b\xf8\x9c\xf6\x23\x38\x46\xb0\x34\x8b\x77"
+ "\x02\x16\xae\x3b\xb2\x0c\xdf\x40\x98\xce\xc1\x7d\xb7\x25\x46\x4e"
+ "\xbb\x7f\xb0\x1c\x2c\xc9\xd8\xaf\x76\xb7\x14\xf3\x75\x5d\x42\x86"
+ "\xc4\x73\x84\x13\x73\x64\x16\xbe\x36\x00\x65\xcc\x68\x1f\x63\xea"
+ "\x8b\x11\xde\x45\x78\x68\x1f\x97\x20\x5c\x85\x17\x12\x97\x85\x5f"
+ "\x63\x1e\x5d\x43\x67\x0d\x1c\x87\x15\xdb\x84\xae\x5a\x82\xe3\xdf"
+ "\x7a\xcc\x7b\x48\xe8\xe9\x63\x41\x73\x26\x96\x30\xf1\xef\x0a\x8a"
+ "\x7f\xeb\x43\xeb\xe9\x8a\x73\xc4\xbf\x2b\x28\xfe\xad\x57\x8d\x57"
+ "\x47\x2c\xf2\x3a\x82\xc6\xab\x2b\xf2\xe3\x5d\x42\x77\x78\x1c\x5b"
+ "\x19\x5d\xe3\xb6\xae\xd8\x11\x44\x33\xca\xe6\xd1\xe1\x32\xcd\x51"
+ "\x41\xe5\xf7\x86\xa1\xb9\x05\x69\x7e\x23\x0c\xcd\x8e\x73\xd0\x4c"
+ "\xf3\xdd\x6f\x0c\xb6\xad\x47\x13\x64\x3d\x08\x31\x2e\x7f\xd4\x14"
+ "\x5a\xfe\x8f\x06\xc9\x1f\xb2\x0b\x8b\x99\x93\x97\x0f\x84\x2b\x50"
+ "\xc3\xd1\x5a\x7d\x82\x25\x1d\x09\x01\x5b\x1b\x8c\x33\x0c\x5c\xcb"
+ "\x20\xdd\xa3\x6f\x0b\x42\xea\xde\xa3\x4e\x61\x8f\x8f\xa5\x07\xda"
+ "\xe3\x63\xba\x40\x7b\x44\x5e\x07\x94\x7b\x2c\x39\x30\xdf\xe2\xb9"
+ "\x78\x3e\xf6\xb1\x9a\x20\x1d\x78\xff\x38\xe4\x5f\x2a\x74\x20\x7f"
+ "\x65\x10\x1d\x4d\xa1\x75\xe0\xb1\x56\x6c\xff\xfb\xa1\x75\xe0\xb1"
+ "\xce\xf0\x3a\x90\x4f\xf6\xfc\xbe\x5a\x6f\xe7\x17\x9b\x87\x06\xc1"
+ "\x24\x85\xf6\x79\xf9\x69\xa1\xe7\x75\xf2\xb3\x04\x8f\xf3\x2b\x02"
+ "\x79\x9c\x9f\x1f\xc8\x43\x6c\xcb\xd7\xe7\x61\xff\xd9\x1c\x6e\x6b"
+ "\x7e\xb0\xfd\xdb\x8f\xc3\x4a\xd9\xfe\x57\xdd\x17\x44\xa3\x3c\xfe"
+ "\x09\x35\x97\xb5\x32\x01\x79\x69\x0f\xcd\xcb\x95\xa6\xd0\x6d\x5e"
+ "\x49\xdf\xa8\xda\xfd\x83\x6c\x69\x65\x2e\xa6\xcf\xa7\x77\x07\x34"
+ "\x87\x55\x87\xe9\xf3\xbd\xa0\xe3\xfd\x55\x7f\xbf\xb4\x72\x2b\xcd"
+ "\x91\xf3\x39\x66\xd4\xdf\xf8\x44\xc8\xa4\x3e\x88\xe8\x5a\x5c\x1c"
+ "\xfc\x4e\x74\x25\x9f\xff\xa0\x75\x2c\xf4\x5d\x4d\x7c\x11\x64\xda"
+ "\x5d\x5e\x50\xf4\x9d\xe0\x83\x70\x3b\xc8\x2e\x08\x5e\x81\x15\x73"
+ "\x9d\xa5\x41\xbe\x69\x95\x2e\xb4\x8c\x57\x19\xc3\xeb\xce\xaa\x34"
+ "\x21\xe7\x55\x05\x81\x72\x5e\x95\xe5\xb7\xc6\x65\x51\x5b\x51\x07"
+ "\x2e\xc8\x4e\xe8\xdd\x69\x58\x7f\xff\xd4\xc2\x8e\x82\xcd\x30\xea"
+ "\x04\xac\xe2\x63\x8d\xed\x12\xf3\xc4\x6f\xd1\x40\x0b\xf7\x01\xab"
+ "\xc5\x7e\x18\x08\xb3\xd8\x0b\x12\x7b\xea\xb1\x0e\xca\xab\xb7\x32"
+ "\x0f\x9d\x53\xa3\x9c\x39\x83\xba\x70\xc9\x31\x58\xf5\xf7\x80\xf2"
+ "\x18\xfd\xd9\x05\x8e\x71\x62\x7e\x7f\x75\xb2\x32\x0f\x1f\x6e\x7e"
+ "\x1f\x61\x66\x29\xeb\x7e\xc5\xbb\xb0\xd5\xe6\xb0\xfd\x32\xd2\x44"
+ "\xdf\x97\x13\x4d\xe7\xf6\x03\xab\x1b\x14\xfd\x15\xef\xe6\x56\x37"
+ "\x0d\x7c\xdb\xb2\x7a\x3f\xe6\xe5\x9d\x63\x3e\x57\x65\x07\xab\xbb"
+ "\xd4\x78\xc4\xf9\x34\xab\xbd\xca\xf7\x29\x6e\x6b\x81\xee\x4b\x70"
+ "\xc9\xf4\x14\x98\x02\xe9\x29\x30\x63\x6c\x99\x27\xe3\x98\xf5\x25"
+ "\x38\x12\xec\x7b\x6e\x83\x09\x7e\x88\x38\x01\x6b\x9e\xa3\xf3\x6e"
+ "\xec\xb5\x5d\x10\xe3\x05\xad\x18\xdb\x15\xec\xa2\x6f\x43\x18\xdf"
+ "\x77\x60\x8a\x8d\xde\xc1\xf1\x35\x04\x86\x29\xb6\xb6\x22\x9f\xbc"
+ "\xe7\x5b\xc1\x9b\xc4\xd3\x36\xcb\x69\x5b\xed\xb3\xac\x6b\x27\xdf"
+ "\xeb\xab\x20\x60\xfc\x57\x41\xeb\x7f\x68\x1d\xc6\x66\x98\x72\x1c"
+ "\x1e\x9f\x29\x6c\x7d\x4d\x50\x4c\x5a\x10\x66\xfc\x57\x40\xe3\xbf"
+ "\x29\xa1\xed\xfc\xf1\x73\x8c\xff\x1e\xa7\xf1\xdf\x14\x75\xbf\x29"
+ "\xde\xf3\x3c\x3e\x4b\x1d\x93\xd2\x7e\x5c\xc6\xe5\x14\x67\x3e\xfe"
+ "\xab\x1b\x77\x80\xde\x4b\xef\xb4\xd1\x36\xed\x5d\x2d\x64\xaf\xfa"
+ "\x36\x67\x33\xa0\xae\xea\xe2\x0a\x48\x17\xa9\x2f\x23\x7b\x7d\x9c"
+ "\xcf\x17\xc6\x7b\x85\x2d\x96\x14\x31\xe7\xb8\x4e\xd4\xa1\xd5\x16"
+ "\x05\x57\xf1\x26\x8b\xf8\xee\x23\xae\x13\x86\xda\xbb\x78\xbf\xa8"
+ "\xa1\x78\x95\xc7\xad\xde\x33\x40\x78\x0f\x14\xb7\x01\xe1\xf5\xf7"
+ "\xf7\x93\x1c\x77\x37\xd9\x38\xe1\x24\xdc\x87\x11\x8e\xf0\x12\x9c"
+ "\xd2\x0e\xf1\x6d\xcc\x9a\x04\x75\xdb\xf9\xfc\x0b\xd6\x8d\xe9\x73"
+ "\x69\x5e\xc5\x4e\xe5\x4a\x16\xb2\x09\x9d\xf4\xce\xec\xb4\x8d\x95"
+ "\x3c\xc6\x26\xac\xa1\x39\xb1\x35\xbb\xa8\xdc\x1b\x7f\x71\x44\x16"
+ "\x8e\x06\x9d\x9c\x96\xd3\x62\xf4\x80\x03\xd6\x34\x04\xfa\x88\x35"
+ "\x41\xf1\x6f\x01\x1f\x67\xe2\x6f\x21\xad\x4f\x94\xd7\xaf\x92\x3f"
+ "\x60\x76\xaf\x9b\xeb\xc7\xb9\xd6\x54\xd0\x3b\x69\x5a\x13\x25\xf6"
+ "\x9b\x5b\xd3\x15\x34\xf7\xe6\xac\xe2\xeb\x6a\xfe\x84\xf5\xae\x7d"
+ "\x42\xe8\x48\xe1\x13\x81\x32\x5d\xab\x2b\x39\x49\xef\x82\x44\x7f"
+ "\xb0\xc8\x1b\xec\x1f\xd7\x26\x2b\xb1\x5b\x50\xba\x59\xe9\x0f\x8c"
+ "\xab\x38\xde\xa0\x7e\x66\x2d\x8f\xff\x7d\x83\xfa\x85\xb5\xf4\x0d"
+ "\x51\x80\x4e\x1e\xe6\x3a\xb4\xb6\xba\xcd\x85\x7a\xb3\x86\xf4\xbf"
+ "\x30\x0a\x61\xb6\xd0\x37\x87\xf8\x3c\xf4\x14\xac\xb5\xf9\xac\xa0"
+ "\x6b\x73\xf2\x6f\xaa\xf4\xa8\x23\x5c\x6f\xa9\xdf\x98\x28\xd6\x23"
+ "\xb9\x82\xea\x38\xaa\xf0\x9c\x60\x0e\xaf\xf9\x13\x88\xf5\x14\xa4"
+ "\x0b\x6b\x9b\x68\x6d\xc6\xff\x27\xee\x6d\xc0\xa3\xaa\xae\xfd\xe1"
+ "\x3d\x93\x01\x06\x32\xc9\x84\x18\xc2\x80\x20\x83\x05\x1b\x2d\x68"
+ "\xaa\xf4\xfd\x53\x5f\x3e\x62\xc1\xfb\xc7\xfb\x80\xd0\x16\x7d\x52"
+ "\x4a\x0d\x91\xc4\x86\x8a\x90\x26\x43\x18\x30\x5f\x0c\x90\x86\x9a"
+ "\x2f\x35\x62\x84\x10\xa2\xc5\x5e\xac\xa8\x69\x8b\x6d\x6c\x51\x47"
+ "\x89\x35\xd6\x24\x13\x2d\x6d\x53\x1b\xda\x21\x0d\x21\xa4\x01\x06"
+ "\x32\x24\x43\x32\x73\xf6\xbb\x7e\x7b\x9f\x33\x33\x89\x09\xca\xbd"
+ "\xf7\x79\x5e\x9e\x27\xcc\x39\xfb\xec\xcf\xb5\xd7\x5e\x7b\xad\xb5"
+ "\xd7\x5e\x2b\xba\x57\xf8\xf6\x8a\xd1\x70\xc8\xe5\x6f\x63\x2d\xfe"
+ "\x91\x32\x8f\x6d\xce\xe8\x63\xb7\x61\xff\x7f\xc6\xcd\x6c\x95\xc3"
+ "\xe7\xd6\x26\xf6\x7f\xed\x5c\xc7\x4d\x30\x18\x51\xce\x36\x7c\xee"
+ "\xb3\x05\xac\xc7\xb4\xf1\x29\x99\x54\x4d\xf2\x4c\x8a\x57\xd8\x7b"
+ "\xd9\x68\xfd\x67\x35\x5c\x8f\x0e\x72\xd3\xa4\x6a\x85\xf2\xaa\x76"
+ "\xc1\x44\xb7\x6c\xbe\x61\x3a\xa3\x78\xa1\x33\x4a\xe9\x62\xdb\xd4"
+ "\xb3\x9f\x9c\xc5\xc3\xfb\xb7\x2d\x6e\x6c\xde\x60\x1b\xce\x7f\x52"
+ "\x46\xa7\x19\xdb\x56\x8e\xce\x1b\x6c\x4b\x53\xe9\x42\x0a\x8f\x1a"
+ "\x89\x07\xdb\x0a\x69\x8e\x45\x19\x4d\x86\x85\x2e\x74\x6c\x19\x76"
+ "\x5b\x5d\x50\x86\xcd\x02\x3d\xd8\x56\x15\x94\x61\x3d\xa3\xc9\xb0"
+ "\xee\x51\xe6\x73\x9b\x77\xf4\xf9\xcc\x31\x8d\x2e\xc3\xe6\xcc\x91"
+ "\xfb\x7c\x4e\xf2\xf0\x79\xce\x59\x14\x3a\x13\xde\x16\xf7\xbf\xc7"
+ "\x0f\xe7\x1c\xfd\x3c\x3f\xbc\x7d\xae\x9c\xab\xed\xe9\x23\xfa\xe6"
+ "\x1c\x9d\xb6\xe7\xb4\x8d\xcd\x0f\xe7\x78\xc7\xa6\xed\xdb\x63\x3e"
+ "\xcf\x0f\x5b\xc7\x8f\xc8\xb3\x20\xc8\x2b\x0d\xe3\xcd\xb6\xaf\x94"
+ "\x70\xda\x0e\x7e\x2e\x22\x2c\x7f\xda\x70\x7c\xa7\x3e\x53\x7d\x44"
+ "\xdb\x7a\x40\xd3\x34\x9c\x19\x0b\x26\xf0\xcf\xf4\x95\x4a\x36\x91"
+ "\xd6\xc0\xbb\x03\x8e\xed\x41\xfc\x87\x1d\x1f\xda\x01\x8d\x1c\xd3"
+ "\x9e\x4e\xaf\xf5\x4f\xf4\xa3\xf7\x7a\xe7\xa5\x11\x16\xb6\xe6\xd9"
+ "\xcf\xc1\xc3\x2e\xf8\x3f\xd4\x71\xfd\x39\xb3\xaf\x1f\xb1\xc6\xbc"
+ "\xd2\x0e\x77\xc7\xed\x72\xde\x76\x8c\x90\x65\xed\x76\x71\xa7\x6f"
+ "\x4c\x7a\x6b\xaf\x1a\x1d\x47\xed\x75\x41\x7a\x9b\x85\x7a\xed\xe7"
+ "\x47\x7c\x6f\x95\x73\xb0\x23\x41\x89\x0a\xd7\x75\xdb\xbb\x87\xd3"
+ "\x24\x7b\xeb\xf0\x72\x3b\x46\xc8\x7f\x76\x3b\xbe\x7f\xb9\xfd\x66"
+ "\x47\xf2\xd8\xfb\xcd\x8e\xb3\x72\xfc\x3b\x47\x9c\x2f\xef\xb0\x5f"
+ "\x7f\xbf\xd9\x31\xc6\xf8\x77\xd4\x0d\xdf\x6f\x76\x8e\x38\xa3\xdf"
+ "\xd1\x3a\xfa\x7e\xb3\xa3\x5b\xa3\x33\x92\x6e\xec\xbc\xef\xcb\xd1"
+ "\x9b\x9d\xd6\xe1\xf4\x66\xa7\xf1\x8b\xe8\xcd\xc9\xcf\xd1\x9b\x9d"
+ "\x69\xe6\xea\xd1\xc6\xb2\x33\x77\x74\x7a\xb3\xb3\x52\xce\x21\x31"
+ "\x2d\xc3\xe8\xcd\xce\x63\xc3\xe7\x70\xc7\x88\x39\xdc\x39\xe2\xfc"
+ "\x7b\x87\xfd\xbf\x4b\x93\x22\x22\x22\xf4\x11\x3a\xbd\x2e\x82\x3e"
+ "\xd1\xf0\xd8\x84\x08\x43\xc4\x38\xfa\x1b\xaf\xfe\x4e\xd0\x47\xe8"
+ "\x0d\xf4\x37\x4e\xfd\x1d\x3f\xe2\x7d\x02\xca\xd2\x9f\x41\xfd\x1d"
+ "\x37\xe2\x7d\xfc\x17\x7c\x9f\xa0\xb6\xab\xb5\x6f\x18\xf1\x3e\xee"
+ "\x0b\xbe\x8f\xff\x1f\x96\x67\x9f\x7b\x1f\x7e\x0f\xf2\x81\x2d\x39"
+ "\xa9\x9b\x37\xa5\x09\xbb\xf6\x74\x6b\xea\xc6\x8d\xe9\xd9\xd9\x56"
+ "\xdb\x56\xeb\xb7\xee\xfb\xce\xdd\xf7\x5a\xa5\x79\xfc\xe6\xc5\x73"
+ "\xd3\x26\xb1\x55\xdb\xb3\xf0\x61\xd5\x77\x1f\x48\xb6\xae\xf9\xd6"
+ "\x7d\xc3\x3f\x6a\xd5\x08\x33\xf8\xeb\xd5\x12\xb6\xf6\x92\xf6\xc5"
+ "\x33\x56\xb2\x5f\xd0\x9d\x4e\xdc\x3d\x97\xf2\xc4\xae\x07\x9a\x70"
+ "\x7f\x79\xb0\x80\xe3\x5e\x45\x07\xcb\xbd\x80\x41\xcc\xaf\x2d\x64"
+ "\x99\x8f\xc2\x9f\x4a\xde\x44\xfe\x8e\x87\x59\xff\x93\xe9\x3b\x58"
+ "\xd1\xf7\x1a\x56\x50\x5e\x7a\x77\xb9\xfd\xcc\x5a\x00\xde\xb6\xf0"
+ "\x1a\x7d\xd3\xf1\x25\x0a\xa5\x79\xd5\xfb\xf9\x85\x13\x45\xda\x3b"
+ "\x85\x5a\x3e\x73\x17\xcb\x7b\x8d\xbf\xc3\xc5\x3b\x7c\xd6\xc8\x7c"
+ "\x79\xbb\xb8\x3e\x37\x09\x74\xa1\x3a\x96\x19\x60\x97\xfd\x42\x2c"
+ "\x33\xbe\x10\x0f\x1f\xbf\x79\x36\xcd\x2e\x7b\x1f\xbd\xbb\x59\x51"
+ "\x32\xda\x46\x5e\x45\x9f\xfb\x23\xe4\xaf\x19\x9e\xff\x48\xc8\x8e"
+ "\x3b\x0f\xf1\xbd\x4c\xab\xcf\x30\xb3\x39\xc0\x2f\xfb\xa2\x59\xeb"
+ "\x9d\x2b\x88\x4f\xa3\xa9\x68\xf2\x17\x32\x79\x37\x2a\xef\xc2\x8e"
+ "\x00\xf7\xc3\x67\xc2\xaa\xde\x02\x5e\xfe\x04\x33\xd0\x7a\xd6\x39"
+ "\xb3\x70\x97\x22\xef\xd4\xe1\x74\x66\xa0\xf1\xcf\xe8\x61\x05\x06"
+ "\xeb\x83\xc4\x37\xae\x62\x86\x3f\xda\x0b\x19\x2f\x8b\xbc\x52\xf6"
+ "\x29\x33\xbc\x3a\x58\xa8\x1f\xe4\x16\x96\x6b\xe3\xdd\x1c\x7e\xbf"
+ "\xbd\xdc\x07\x7b\xdb\xa6\x0d\x01\xe4\xe9\x18\x28\xb0\xb0\x16\x9b"
+ "\x97\xe5\xb5\x73\x5f\xf1\xa7\xd2\x5f\x45\x73\xaf\x17\xf7\x67\x8d"
+ "\x79\xab\x58\x44\x57\x32\xd3\x37\x67\x54\x31\xd7\x7a\x2f\xcb\x6d"
+ "\xe7\xdd\x4d\x1b\xce\xb2\x96\x8c\x3a\x96\xd2\xc6\xf4\x4d\x9d\xa7"
+ "\x99\xf0\x5d\x5d\xb6\xcc\x93\x7f\x95\x59\xf2\x36\x21\xed\x2a\xdb"
+ "\x99\xc7\xa2\x76\xfe\x19\x72\x50\x1b\xb5\x73\x81\xad\x3b\xc5\x74"
+ "\x54\x9f\xfe\xc9\xd3\xcc\xf2\xe4\xf7\xc4\x3d\x73\x56\x9d\xcf\x70"
+ "\x1f\xd7\x34\x58\x90\x10\x33\xc8\x13\x62\x07\x0a\x12\xe2\x5a\x32"
+ "\x29\x7f\xe7\xdb\x2c\xba\x8d\xc5\xbd\xd3\xd3\xa6\xaf\xba\xc2\x66"
+ "\x60\x4c\x5d\x34\xb6\xea\x2b\x94\xbf\x6c\x5a\xa6\x42\x65\xc3\xcb"
+ "\xf8\xa3\xa6\x15\xbb\x92\x7d\x4c\xa1\xba\xaa\x06\xd9\x8c\xea\x41"
+ "\x66\x51\x4a\xa7\x65\xa2\x5c\x2f\x7c\xc8\x11\xc5\xc8\xcd\xe3\x81"
+ "\xa1\x32\x63\x2b\xd1\xc3\x09\x6f\x3c\x5a\x6f\x70\x35\xf5\xb2\x66"
+ "\xef\x20\x6b\x61\x9f\x31\x97\xfd\x9c\xf3\xd5\x47\xeb\xc7\x11\x3f"
+ "\xa9\x73\xee\x84\x0d\xbc\xc4\x9d\x82\x66\x66\x70\xd1\x1c\x94\xe7"
+ "\x33\x53\xe6\x4e\x36\xa1\x87\xd2\x05\xed\x29\x1e\x6a\x73\xf9\xcf"
+ "\x39\x77\x8a\xfb\xe0\x45\xc9\xf9\xcd\x2c\xa2\xc5\x5b\x85\x7b\xc7"
+ "\xfa\x40\xf4\x32\x8f\xcb\xdb\xca\x5c\x99\xff\x74\x2a\xa6\x65\x6d"
+ "\x25\x0a\x33\xbe\xd6\xdf\xaa\x77\x19\xfa\x99\x2b\xd9\xcb\xde\xa5"
+ "\xb6\x79\xd9\x32\xd8\x54\x27\xb5\x78\x7d\xf0\xbf\x93\xc8\xfb\x2c"
+ "\x93\xca\xb3\xd8\xbc\x9a\x2b\x6c\xce\xa1\x2b\x2c\x81\x0f\x24\xe8"
+ "\x71\xc7\x1b\x3e\xd5\x0e\xd1\xaf\x89\x64\x30\x1a\xbb\xb8\xeb\xcd"
+ "\xa3\xd4\xbb\xde\x43\x09\xec\xf0\x60\xe8\xae\xf7\x60\x5f\xe8\xae"
+ "\x37\xe1\x94\x1d\xf7\xbd\xdd\xac\xc0\x64\x6e\x62\x13\x3a\x58\x5e"
+ "\x22\xf0\xbb\xfc\x22\x33\xec\xbe\xc8\xd8\x9d\x85\x7a\xc8\x99\x06"
+ "\xc2\xfd\x0b\x2e\x9a\x1b\x3c\x77\xb0\xc2\x23\xf4\x6b\xa2\x3f\x92"
+ "\xe7\x0a\x85\xaf\x8a\x4e\x15\x8f\x29\x4d\x4f\x69\xa5\xf4\x1b\x41"
+ "\xbf\x7b\x0b\xaa\xb9\x87\xda\xaa\x23\x5e\x65\x12\xf0\x59\xbd\x5f"
+ "\x5e\x37\xe0\x28\xcc\x75\xb3\x63\x9d\x1a\x5e\x4b\xfa\x9e\x67\x7f"
+ "\xb7\xe3\x02\xfc\xcb\x7b\x44\xbf\x86\x32\x74\xf0\x35\xaf\xa6\xa3"
+ "\x0f\x67\xd1\x2e\xb5\xdf\x48\xbf\x66\x29\x83\x16\xae\xd7\xca\xf6"
+ "\x0d\x65\xa0\xcd\xd3\x94\xce\xb5\x74\x1a\xb7\x01\xdf\x7e\xdd\x71"
+ "\x41\x2f\xf3\x24\xe8\xa9\x4e\x9f\x5a\x3f\xad\xfd\xbc\x19\x58\xe3"
+ "\x7d\x7a\x33\x3f\xb9\x61\x01\xab\xde\xcf\x9b\x0e\xed\xe7\x0d\x72"
+ "\xed\xed\xb2\xba\xd9\xeb\xe2\x7e\x21\xed\xe1\x0d\x25\xf4\xed\x24"
+ "\x71\x3f\x80\x4b\x43\x1a\xec\x4b\x77\x25\xb9\xd9\xad\x71\xe1\x63"
+ "\xe0\x8e\x27\xad\xd8\x47\x5f\xcf\x6f\x1c\x47\x34\xc0\xda\xd2\xd9"
+ "\xcb\x5e\x1d\xec\x1e\x57\xf0\x11\xd3\xbb\xfc\x1d\xec\xae\x38\x19"
+ "\x97\xe7\xf0\x7e\xee\x7e\x16\xf1\x8a\xf7\xf3\x5e\xc2\x97\x99\x3d"
+ "\x6c\x57\xe9\xd7\xe2\x58\xdc\xc7\x24\x05\x4b\xfa\xb4\xeb\xe5\x30"
+ "\xfa\x34\xbf\xd9\x5d\x1f\x46\x9b\xf6\x9e\xfe\x3c\x6d\xda\xf3\x37"
+ "\x49\x9b\x68\xed\x0b\x5a\x14\x70\xab\xe9\x1f\x8c\x48\x57\xef\xaf"
+ "\xec\x79\x65\x44\xba\x4f\x4d\x7f\x6e\x44\xba\x47\xa6\xef\xfe\xb3"
+ "\x46\xfb\x5a\xd0\x8f\xed\xa0\x7d\xbb\xdf\x02\xed\x6b\xd9\xa0\xd2"
+ "\x3e\x41\x7f\x76\x1f\xe2\x2f\x11\x2d\xca\x01\xbd\xd9\xbd\x0d\xfd"
+ "\xe7\xef\x30\xad\xef\x13\x29\xed\x1b\x48\xab\xf8\x8c\x19\xe8\x4f"
+ "\xa3\x7b\x3f\x01\xdd\x03\xcd\x03\xed\x3b\x18\xcf\xdb\x0e\xee\xe7"
+ "\xa7\xaa\x85\x9f\x6c\x47\x90\xfe\x3d\x45\x69\x25\x94\xf6\x14\x7d"
+ "\x07\x1d\x04\x4c\x9a\x93\xeb\x99\x88\xa3\x53\x12\xe9\x51\xf4\x89"
+ "\xac\x8c\xe6\x1b\xfe\xaf\xf6\x10\x7c\xcd\x3a\x96\xe9\xb2\x79\xc5"
+ "\x3d\x14\xf8\x66\x6f\xb1\x75\x62\xdd\xc5\xef\x56\xa0\xa7\x38\xcb"
+ "\xf2\xbd\xbc\x07\x77\x55\xd0\x87\x94\x1d\xff\x09\xdf\xe2\xba\x86"
+ "\x0c\xc6\xe0\x97\x00\x34\x9b\xfa\x62\xa8\xa0\x3e\x49\x5f\xc6\xbb"
+ "\xe7\xb9\x59\xc7\x09\x39\xd7\x45\xc9\x88\x63\xd0\xc1\x1c\x99\xdc"
+ "\x41\xf4\x91\xc6\x66\x0e\x14\x32\xf8\x66\x41\x3c\x4f\xfc\x1e\xd4"
+ "\x2b\x19\x15\x9a\x7f\x16\x07\xd1\x06\xca\xe3\x6a\xf3\x31\xf4\xd9"
+ "\xcd\x1c\x27\x9a\x73\xeb\x51\x7e\x03\x60\xc3\x1d\x05\x5a\x1d\x3a"
+ "\x51\x87\x5e\xe8\x6e\x33\xdc\x6c\xf7\x1a\x51\x3e\xda\xd8\xda\xbc"
+ "\xde\xc3\x40\xf7\x5d\xdd\x54\x47\x6e\x87\xac\x83\xea\xe2\xb4\x07"
+ "\x0c\xfb\xa6\xd6\x1f\x95\xc7\x2f\x53\xfd\xf3\x30\x5f\xf0\xd3\x05"
+ "\x3b\x25\x82\x8b\x09\xbe\x1a\x24\x1f\xea\x78\xf3\xf0\x67\x8c\xa9"
+ "\xbe\xc6\x08\xdf\x1c\xc7\xe1\xcb\x0b\xfe\xc5\xae\xe7\x5b\x8c\x60"
+ "\x34\x47\xf3\x2f\xa6\x6c\xff\xdf\xf5\x2d\x46\x75\x5b\x6a\xf4\xbc"
+ "\x8e\xfa\x7f\x1c\xfe\xc5\xa8\xff\x71\xc0\x43\x75\x4c\xf5\xcf\xad"
+ "\x03\xcc\x77\xf9\x91\x56\xee\xe0\x8d\xda\xfc\x63\xbc\x18\x0b\x7d"
+ "\x73\x4b\xfe\x90\xb7\xba\xd9\x9e\x7a\x7c\xa7\xb4\x26\xe4\xbf\x8b"
+ "\xe8\x98\x8b\xf6\xb0\x37\x3a\x02\xfa\xf2\x9d\xcc\x20\x69\xda\xde"
+ "\x4f\x50\x5e\xd2\xb4\xbd\xc5\x21\x9a\xb6\x37\x4f\xd2\x34\x09\x63"
+ "\x49\xd3\xf6\xfe\x58\xd2\xb4\xbd\x9b\x84\x3d\x11\xd1\x34\x7c\x03"
+ "\x5d\xd3\x68\xda\xa1\x78\xde\x08\xda\x31\xe0\xd8\x9b\xac\xd1\xb6"
+ "\x52\x4a\x03\xed\x40\x1f\x25\x9d\xda\x5d\xc7\xff\x9e\xc0\xa4\xbd"
+ "\x26\x9e\x33\xe0\x3f\xa3\x5b\x7d\xa6\x79\xd9\xfb\x91\xa4\x71\x7b"
+ "\x8f\x85\x68\xdc\xde\xc4\x50\x59\xd0\xb8\xbd\xef\x49\x1a\x27\xd3"
+ "\x0f\xaf\x03\x8d\xdb\x5d\x07\x18\xa8\xf5\xeb\x71\x8e\xa6\xe6\x27"
+ "\x38\xee\xaa\x0f\xa7\x71\xc3\xd7\x57\x91\x41\xa3\x71\xa0\x6d\xf4"
+ "\x1e\xe7\x66\xb3\xc5\x19\x31\xd6\x59\x25\xc1\x5c\x5b\x77\x98\x03"
+ "\x8c\x19\xf1\x0a\x00\xb7\x65\x17\xd8\x04\xd5\x6f\x8d\x3a\xee\xa2"
+ "\x35\xda\x1d\x4d\x37\xdb\xfb\x79\x9f\x66\x2c\xe4\x97\x8c\xe6\x7a"
+ "\x16\x7c\x39\xba\x0a\x3b\x98\xab\x8a\x17\xb6\xf8\xdb\x99\xb2\xfb"
+ "\xf1\x33\x98\x57\x92\x37\xfe\x5f\xfc\x82\xee\xd0\x3e\xfa\x74\x8a"
+ "\x57\xe8\xef\xcf\x94\xeb\xe9\x9b\x7d\xd8\xb7\xd7\xd0\x06\xf4\x8a"
+ "\xf4\x6c\x1f\x4b\x8f\x70\x03\x6d\x05\xc6\x6e\xeb\x27\xd3\x44\x5b"
+ "\xc4\x4b\x91\xdc\x33\xf9\x22\x2b\x12\x67\x68\xc2\x6f\xf3\xa8\x75"
+ "\xfd\xe4\x01\xf5\x7b\xc4\x18\xdf\x37\x7d\x41\xf9\x7d\x5f\x50\xfe"
+ "\x15\xd0\x20\xdc\xc7\x0b\x38\x86\xd7\x13\xed\xd7\xf2\xf5\x20\xdf"
+ "\x27\xea\x39\xc8\x99\x82\xd9\x42\x2e\xb3\x68\x75\x02\xef\xca\x28"
+ "\x9f\xf0\x11\x4c\x34\x72\xf9\x0e\x06\xff\x9c\x61\x65\x8b\xa3\x42"
+ "\xf0\xfd\x89\xf3\x3a\x7a\x1a\x93\xab\x8a\x31\xc4\xb3\x3f\x49\xbc"
+ "\x28\xee\xd2\x54\x06\xcf\x1e\x8a\xd3\x88\x5e\x0a\x9f\x77\xea\xbd"
+ "\xdd\x5e\xa2\x6f\xb3\xa4\x6f\x64\xaf\x76\xd7\x62\x2a\xd1\xe5\x58"
+ "\xf8\x61\x81\xbe\x3a\x25\xb0\x46\x7f\x52\xf8\xfb\x2f\xae\xd5\xca"
+ "\x8e\xa5\xdb\x43\xbb\x6a\x9b\xe2\x1e\x12\x95\x39\xa5\x95\x41\xdd"
+ "\xb8\x7b\x43\xfb\xf1\x2c\xe1\xdf\xcc\xdf\x0b\x1a\x38\x95\x78\xd0"
+ "\x58\xd9\xce\x06\x26\xdb\xd9\x67\xa4\x32\xa7\xae\x77\xcf\x69\xec"
+ "\xf1\xed\x5b\x7e\xe3\xe3\x63\xea\xf8\xf6\x15\x7e\xc1\xf8\xae\xd7"
+ "\xee\x89\x1b\x6f\x37\x46\x6b\xd7\x77\xe3\x70\xfd\xe9\xbc\x2f\x0f"
+ "\xd7\x44\x15\xae\x3f\xdd\xf0\x05\x70\x1d\xad\x9d\xca\x2f\xdf\x8e"
+ "\x55\x6b\xa7\x71\xb4\x76\x98\xf8\x37\xa6\xbf\x1e\xa3\x16\x93\x46"
+ "\x8d\x83\x3c\x71\xc0\xf1\x54\x8c\x9b\xed\x8b\xd3\xce\xb7\x64\x7c"
+ "\xa6\xa7\xe6\xb8\xd9\x4f\x0d\xc3\xef\x71\x3d\x75\x5f\x4a\x2d\xf6"
+ "\x75\xae\xb8\xd9\x53\xcb\xa1\x6b\x5b\x9e\x27\xfd\x03\xaa\x65\x88"
+ "\xfe\xef\x2b\xb9\xde\x79\x9a\x88\xbd\xa1\xfa\xee\xc0\xfd\x54\x5e"
+ "\x66\x59\xd3\x57\x90\xc1\x64\x6c\xea\xa7\x5e\xc1\x3d\x24\x7a\x9e"
+ "\x80\x67\xfa\xa5\x3d\xa0\x44\xda\xe1\x21\xae\x81\xf4\x4d\x31\x9e"
+ "\xbe\x5d\x43\xdc\x0b\x79\x8f\xef\xa9\x26\xea\xa7\x88\x59\x2d\x7d"
+ "\xf9\x0b\x1f\x2f\x5e\xca\xa7\x47\x59\xe9\xdb\xe3\x29\x8f\x96\xc7"
+ "\xad\xd5\x17\xf4\x73\xf1\xd4\x7b\x72\x8f\x79\xca\xd9\x37\x46\xfc"
+ "\x24\xf8\x3b\x3b\x92\x9f\x38\xec\x1e\xe2\xfd\x59\x59\x5b\xb3\xee"
+ "\xb5\x66\x3f\xf1\xe8\xfc\x6c\x5b\xaa\x6d\x5b\xb6\xb8\xb0\x3e\x89"
+ "\x51\x82\xd5\xb6\xe9\x89\xf4\xad\xdb\x6c\x09\xdb\x53\x37\xc9\x0b"
+ "\xee\xb7\x53\xc6\xf0\x4c\x6c\x78\xbc\x4a\xa2\x45\xd0\xdf\xc0\x17"
+ "\x85\x88\x59\x09\x9f\x24\xda\xfd\xdd\x06\x8b\x88\xed\x45\xb4\xab"
+ "\xe4\xb8\x9b\x65\x26\x6b\xf3\x01\x3f\x89\xc4\xbf\x58\x7a\x58\xc9"
+ "\x27\xc0\xa1\xd5\xc4\x8a\x1e\x96\xfe\x25\x84\x8f\x00\x97\x8d\x12"
+ "\x5a\x98\xd1\x99\x03\x7d\x6c\xe9\x0a\xc5\x51\xb2\x50\xf8\x7d\xdc"
+ "\xd9\x83\xf7\x27\x34\x7e\x01\xe7\x4b\xf2\x3c\x78\xd6\xd2\x0e\x56"
+ "\x72\x08\xed\x62\xfd\xd5\x3c\x23\x63\x84\x73\x47\xc9\x1a\xdc\xd9"
+ "\xa6\x77\xe3\x80\xa3\x74\xa1\xc6\x93\x52\x7f\x4d\x3c\xca\x42\xf3"
+ "\x5d\xba\xf9\xfd\x18\x0f\x53\xef\x7c\x1b\x6b\xe4\xfd\x6e\x03\xe5"
+ "\x4d\x0b\xe6\x75\x50\xde\x52\x4b\x32\xed\x9f\xa3\x9e\x69\xf3\xe8"
+ "\x29\x6e\x65\x28\x79\x5c\xf8\x98\x49\xbe\xa6\xf9\x2b\x9b\x49\x63"
+ "\x8f\xd3\x70\x46\xce\x7d\xd9\x38\xe1\x7f\xb9\x6c\x0a\xd2\xc6\xd3"
+ "\xaf\xaf\x8f\xbe\xc1\x17\x02\x8d\x0b\x7a\x68\x5d\x4b\xee\x25\xe7"
+ "\x49\x4b\x07\xcd\x7b\x29\xf1\x17\x39\xd2\x4f\x29\xb5\xc1\xa9\x0d"
+ "\x57\xe1\x20\x6b\xb0\x72\xe8\x9d\x69\xce\xcb\x16\x34\x58\xbd\x8c"
+ "\x47\x7c\xff\x0c\xca\xd1\xfa\xb2\x14\xd8\xc1\x93\x50\xba\xb8\xa7"
+ "\x57\x96\xa0\xc1\xdc\x66\xe5\x17\x90\x67\x2c\xfd\x32\xf6\xcd\x72"
+ "\xb1\xa7\x5c\x61\xb0\xc5\xea\x64\x65\x9f\xbb\xf3\x38\x37\xed\x5e"
+ "\x6b\x5a\xaa\xcd\xba\x79\xd3\x96\x74\x6b\xda\xa6\x34\xeb\x96\xad"
+ "\x36\xeb\x0f\xb7\x42\xd1\x03\xd5\xce\x30\x9c\x50\x30\xbe\xed\xc9"
+ "\xe3\xb4\xb3\xec\xbe\xed\x19\xe3\x25\x4e\x97\xbf\xdc\x37\x90\x31"
+ "\x61\x38\x4c\xca\xd5\x3d\xb3\xac\x8d\xe6\x43\xf5\x09\x10\xd1\x4d"
+ "\xef\x18\x4b\xd2\xf0\x35\x5c\xfe\x67\x99\xb7\xdc\xa0\xe5\x15\x78"
+ "\x71\x6b\x4f\xf0\x5b\xb9\x8a\x8f\x87\xe5\x7d\x65\xe1\xff\xe6\xb0"
+ "\xb0\xe5\x2f\x5f\x38\x66\x19\xf8\xfc\xda\xc9\x36\x5e\x64\xe5\xb3"
+ "\xb9\xa3\x6c\xb3\x8a\x43\x46\xa5\x64\x8a\x47\xc5\x1f\xc2\x89\x72"
+ "\xfb\xe7\xf1\xa7\xfc\x14\xf0\x87\x0f\x24\x1b\x85\xdd\x87\xdf\x47"
+ "\xf4\x8e\xde\x69\x9f\xa6\xbe\xb7\x63\x1c\xde\xed\xc9\xc6\x82\x17"
+ "\x84\x1f\xbe\xf3\x38\x43\x45\x5c\x1c\xc2\x95\x89\x32\x7e\x67\x79"
+ "\x93\x36\x47\x5a\xfe\xd1\xd7\xb0\xc0\x97\xe1\x38\x26\xe0\x59\x31"
+ "\x57\xe0\x18\xf1\x09\xd4\x27\xbd\xe6\xef\x0f\x7b\x89\x9b\x55\x2c"
+ "\xb2\xe5\x71\x3e\xe0\xa8\x48\x0c\xc3\x83\x8b\xa3\xe1\x01\xcd\xed"
+ "\xc6\xcd\x5b\x37\x3e\x4e\x0b\x3d\x2b\xdd\xb6\x31\x03\x3e\x2e\x40"
+ "\x07\x84\x03\x8d\xb9\x69\xd6\x6d\xd9\xe9\x1b\x27\xb1\xd1\x72\x05"
+ "\x3f\x86\xcf\x7f\x8c\x42\xf8\xda\xd7\x97\x3c\x0e\x77\x2d\xe4\xdd"
+ "\x8a\xa7\xaf\xf6\x65\x93\x4c\x32\x6c\xde\x9f\x3e\xef\xb2\x24\x12"
+ "\x6f\x97\xc8\x04\x2f\x4e\x30\x93\xf6\x02\xcf\xcc\x07\x1c\xfa\xf4"
+ "\x3a\xda\x57\x2a\x7a\x35\x1c\xa0\x67\xda\xff\xca\xdd\x21\x5b\x8d"
+ "\x67\xe6\xf5\xe9\xc7\xb5\x83\xfe\x48\xbb\x90\x1e\xa2\x03\xe6\xc3"
+ "\x1d\xec\x69\x21\x7f\xd5\x88\x7d\xe9\xe9\x79\x5a\x99\xb2\xe0\x7d"
+ "\xe7\xa7\x2b\x35\x3c\x09\x2b\x33\x13\x69\xc2\xe7\x91\xa3\x62\x05"
+ "\xe6\x9c\xcb\xb9\x37\x68\xf9\x08\xae\xfc\xb0\xa0\x23\x4f\x17\x8e"
+ "\xa4\x0d\xef\xc7\xe0\x6c\x5c\xf6\x47\xe0\x9f\x69\x4a\xa3\xf0\x9f"
+ "\x42\x3c\x1f\xd5\x5d\xaa\xda\xa9\xb4\x0a\xde\xc0\x4e\x75\xf9\x64"
+ "\x5d\xd4\xd6\x16\xad\x2d\x1e\x35\xa5\xf1\xb0\xc0\xb3\xa7\xdd\x21"
+ "\xdd\xe1\xd3\x25\x90\x99\x79\x5f\xf2\x78\x9a\xcf\x26\x81\x5b\xf4"
+ "\x6c\x9b\x26\x7d\xb9\x01\xdf\x30\x4e\xe0\x55\x08\xa7\x9e\xb1\x6a"
+ "\xf3\x8d\x31\x53\xb9\x53\x56\xe1\xef\xf7\x99\x85\x1a\x2c\xc7\xf2"
+ "\x39\x23\xd6\xad\x89\xfa\x32\x20\xd7\xae\x90\xf7\xa4\x9f\x21\xdc"
+ "\x77\x89\xa0\x3e\x7a\xba\xd8\xb3\x0f\xc0\x86\xdf\xec\x83\xfc\x34"
+ "\xc5\x03\x1f\x0a\x72\x2f\x7b\xa6\x8a\xea\x2f\x09\xdd\x51\x7f\xe6"
+ "\x28\xb5\x5d\x22\xe7\xee\x99\xe3\x61\x6b\xcf\xa3\xda\x05\x4c\x00"
+ "\x8c\x40\xcf\x5c\xf6\xfb\xc5\x7a\x95\xf7\x7f\x9f\x71\x6b\xe5\x84"
+ "\xbf\x01\xc2\x0d\xd8\xc3\x5e\x64\xcf\x0a\x7e\x03\xfd\x23\x58\x17"
+ "\xa2\x7d\x8c\x0f\x7b\xb7\xc0\x1b\x0b\xe2\xa5\x3c\x3b\x63\x78\x1f"
+ "\x9e\x9d\xa7\xd5\x25\xeb\x7e\x76\x91\xf6\x0e\xff\x63\x6e\x56\xd9"
+ "\x88\xf8\x93\x27\xbd\x62\x0c\x91\x0d\x36\x5a\x5b\x5e\x91\x2f\x4d"
+ "\x83\x21\xa5\x17\xd2\xbb\x8d\xf6\x5e\xbb\x3c\x1b\xb2\x24\x4b\x5a"
+ "\x54\xd9\x00\xdf\x56\x05\x56\xf8\x27\x5c\x24\xe9\x8d\xf0\xa9\x23"
+ "\xbe\xed\x52\xd7\xec\x44\xdc\x15\x12\xf6\x31\x5e\xbf\xa0\x0d\xd2"
+ "\x07\x03\x7d\xa7\x35\x32\x80\xf8\x2f\x43\x19\x13\xd5\xbe\xb5\x05"
+ "\xdb\x40\x5c\x4c\x71\x16\xf9\x6c\xa3\xf4\x69\x32\x81\x64\xbe\x67"
+ "\x7d\xda\xfc\xed\xd9\x4f\x69\x88\xdb\xaa\x67\xc6\x06\xe1\x33\xac"
+ "\x32\x4e\xeb\xaf\xfa\x4d\x2f\xf0\x41\xc0\xa0\x32\xb8\xfe\xfb\x44"
+ "\x8c\xd1\xca\x24\xad\x1d\x91\x97\xf2\x21\x7f\xc3\x1c\xf1\x6d\x7d"
+ "\xb0\x1e\xe9\x4b\xc5\x28\xe2\x4c\xd7\x8a\x6f\xf6\x10\xad\x7a\x56"
+ "\xd8\x8c\x09\xfb\x35\x1a\x87\xe7\xc9\x8c\x89\x62\x0e\xac\x2c\x82"
+ "\xca\x20\x7e\xb1\x5e\xe2\x62\xe5\x31\xad\x4c\x84\x0e\x70\xac\x3c"
+ "\xa1\xb5\xad\xd5\x81\xfe\x5f\x97\xe6\xc9\xb1\x18\xb0\x46\xd4\x58"
+ "\xa1\x82\x5e\x48\x9e\xeb\xb9\xfb\x05\x0e\x8a\x71\x3e\x67\x09\x9f"
+ "\x6b\xc9\xd3\x3d\x37\x2f\x0c\x1f\xa8\x3f\xcf\x05\xe7\xdf\xcd\x9e"
+ "\x53\xe3\x76\x3e\xb7\x26\xac\x8f\x49\xf4\xbe\x21\x38\x0f\x65\x53"
+ "\x64\x7c\x21\x9e\x31\x6a\x9c\x49\xb1\x56\x28\x8f\xc2\x45\x3f\x31"
+ "\x1f\x24\x93\x2d\x64\x0d\xe0\x0d\x69\xad\x10\x4c\xd0\xc7\xb3\xc0"
+ "\x2b\xaa\xb7\x7e\x38\x6e\x3e\xd7\x18\xd6\x5f\x1d\xe8\x3a\xa5\xb5"
+ "\x6b\x79\xdc\x6c\xbf\x38\xa3\xd3\xe0\x49\xdf\x7c\xc1\x79\xbc\x1b"
+ "\x79\xf7\x1b\xb5\x7e\x7e\xc1\x9e\xa1\xc2\x6a\xff\x7d\xb2\x8d\xfd"
+ "\x49\x5a\x1b\xf4\xbc\x92\xd6\xc0\xe7\x78\xf0\x47\x77\xd8\xd2\xa5"
+ "\x93\x23\x6c\xf2\xa9\x1b\x1f\x4f\x4f\x9b\x67\x4d\x7d\x0c\xee\x90"
+ "\xb2\x37\xa7\xa7\x67\x8a\xc3\x9c\xe1\x7c\x60\x9c\x68\x8f\xe0\x20"
+ "\x7d\x4f\x3f\x0f\x7f\x28\x5e\x75\x1f\xc6\x7a\xf7\x60\xbd\x9f\xcc"
+ "\xbd\x22\x64\x1c\x57\xe1\xdd\xcc\xe5\xe3\x85\x90\x03\x04\xed\xc3"
+ "\xf8\x2d\x5e\xb9\x0f\xd0\x7c\x62\x8f\xa4\xbe\x75\x0f\x87\xd7\x7e"
+ "\xdf\xf0\xb5\xfc\xbc\x71\x74\x3a\xb1\xff\x15\x41\x27\x4a\x24\x5e"
+ "\x80\x3e\xe1\x0e\x00\xea\xa5\x32\x8b\x86\xd7\xf9\xfc\xca\x10\x8d"
+ "\x7a\x3e\x59\xa3\x51\x72\x9f\x78\x3e\x97\xf6\xa0\x0a\xb5\x2d\x5b"
+ "\x08\x6f\x9e\xf7\x4a\xbc\x79\xbe\xd8\xcd\x5e\x0b\xfa\xfb\x90\x7b"
+ "\xc7\xfe\x64\xf0\x8f\x32\xae\xf7\xf3\x47\xb5\xfa\x2a\x63\xb1\x6f"
+ "\x3c\x5f\xff\x79\xfe\xe1\xf9\x34\xf0\x0f\xb0\x4f\x04\x2c\x44\x1c"
+ "\x63\xb1\x6e\x9e\xef\x0c\xa3\x3f\x31\xf4\xee\x1d\x6d\xae\x1f\xc5"
+ "\x76\x3c\x1f\xc7\x6e\xf3\x37\x6e\xb1\x2d\x86\xab\xaa\x74\x7b\x66"
+ "\xfa\x46\x5b\x7a\xda\xc8\xf3\xb6\x04\x8d\x17\xc3\x59\x77\x25\xad"
+ "\x7b\x4f\x14\xe0\x51\x45\xe3\x3f\x60\xd3\xc6\x20\xe8\x14\xf1\x8e"
+ "\x2a\x8d\x33\x75\xb1\x03\xf7\xc9\x18\xe6\x55\x36\x0d\x4f\x90\x6f"
+ "\x99\x9d\x2b\x94\x46\xe3\xdf\x5f\xa8\xca\x5d\xa8\xab\x4a\x7b\x0f"
+ "\x95\xaf\x3a\x2d\xf6\xbe\xfd\x5c\xf5\xf3\xfe\xc2\xfa\x30\x7e\x0b"
+ "\xef\x0b\xd4\x77\xe1\x8f\x49\xc6\x63\xaf\xba\x2c\xe1\x5b\x45\xf3"
+ "\xff\x9c\x4a\x2b\x0e\x24\xc9\x7a\x18\xfb\x59\xbe\x67\xdc\x61\xa1"
+ "\xe7\x7f\xc1\xa8\xb5\x47\xe5\xdb\xc3\xdb\xc4\xbe\x35\xb2\x3e\x37"
+ "\xab\x12\x76\x54\xbb\x85\x2f\xb9\x17\x96\x8f\xd2\xd7\xc6\xf0\x7c"
+ "\x94\x27\x83\xf2\xc4\x69\x63\xfe\xae\x5d\xa4\xe5\x5e\x67\x8c\xbd"
+ "\xea\x18\x7d\xc0\x2d\xb4\x0f\xfc\x57\xfb\xd0\xae\xfa\x27\x71\x23"
+ "\x6e\x24\xfa\x2f\xfc\xa4\x59\xb0\xae\x5f\x68\xa5\xfd\x6c\xb9\x36"
+ "\x0e\x8c\xf1\x78\xbe\xc7\xa0\xf9\xa7\x92\xe5\x5f\x78\x73\x78\xdf"
+ "\x0e\x18\xc2\xca\x74\x3b\x6f\x85\x0e\xff\x85\x43\xdc\x51\x25\xe4"
+ "\x1f\xf8\xad\xaa\x0c\xe2\xe1\x81\xc4\xcf\xe3\xdd\x0b\xd5\xc0\xbb"
+ "\x70\x5c\xda\x74\xf7\x46\xc2\xa4\xec\x74\xdb\xbd\x82\xbb\x27\xc6"
+ "\x0e\xee\xcf\x52\x6d\x9b\xb6\x6e\xc9\x9e\x67\xcd\x4e\x4b\x55\x17"
+ "\xfd\xb0\x35\xef\x10\x3a\x00\xaf\xb6\xce\xa8\xad\xea\x10\x6d\x39"
+ "\x10\xc2\x7f\xd8\x6a\xdd\x0a\x1d\xed\x81\xcb\x72\x3d\x1d\x68\x08"
+ "\x5b\xbb\xa2\x3c\xd6\xe8\x61\xc1\xb3\x1d\x08\xdf\xff\xbd\x04\xd3"
+ "\x89\x17\xd9\x81\x52\x15\xa6\x5e\x09\xe3\x83\xdf\x14\xe3\x14\x7e"
+ "\xb9\x0e\xac\xc4\x38\x85\x1f\x18\xc1\x9f\x1d\xb4\x6a\xe3\x0d\xc9"
+ "\x0d\x07\x17\x0a\x3e\x4a\xe5\xd7\xbe\x48\xbe\x97\xfc\xe9\xc1\x53"
+ "\xaa\x0e\xae\x4d\x93\xf1\x34\xfe\x9a\xfa\x92\x26\x79\xd5\x83\xa5"
+ "\xab\x73\xf9\x50\x8a\x1d\xfe\xea\x30\x07\x07\xdf\xd2\x78\x4b\x61"
+ "\xc7\x57\x3a\x85\xf6\xed\x83\x75\xe1\x74\x82\x47\x3c\xde\xa6\xf2"
+ "\x88\xaa\x2d\x73\xe4\x6f\x3b\xa8\x2d\x9c\x41\x5c\xa7\x6f\x18\x17"
+ "\xd1\xbf\x3a\xe1\xfb\x0b\xfc\x35\xef\xb3\xa8\x31\x32\xab\x85\xbd"
+ "\x66\x0d\xd5\xed\xa1\xb9\x1d\x70\x54\x13\xff\x77\x50\xe0\x86\x42"
+ "\x38\x0a\x1b\x1e\xaf\xc6\x23\xb1\xea\x55\xd8\x8b\xe8\x99\xf0\xb6"
+ "\xba\x56\xe2\x54\x75\xad\x27\x3b\x81\xf5\xf5\x59\xf4\x7d\xd9\xc9"
+ "\x06\xe8\x0b\x00\x0b\x57\xb5\x8f\x49\xfc\xa9\xce\x24\xbc\xb3\x86"
+ "\xd7\xa7\xd6\x05\x98\x1a\xd0\x0f\x9e\x6d\xd1\x03\xbf\x81\xaf\xbc"
+ "\x2f\x81\x78\xe1\xea\x85\x3c\x3b\x41\x3f\x86\x0f\xae\xeb\x8d\xd3"
+ "\x84\x38\x93\x88\x3d\x0a\x7a\x25\xfd\xfc\x1f\x0a\x3c\x2b\x75\x03"
+ "\x6a\xbb\x87\x74\x5c\xff\xa2\xd8\x57\xca\xc4\xbe\xc2\x99\xf4\x9b"
+ "\x7e\xc8\x2a\xec\x69\x33\x5f\x14\xb1\x66\xd5\x7b\xda\x9e\x86\x4c"
+ "\xbf\x88\x6b\x57\x60\x03\x9f\xe6\xc7\xf9\x91\xb8\x87\x7c\xd2\xe6"
+ "\x67\xdf\xf5\x01\x27\x0f\xad\x81\xcf\x78\x19\x83\xfc\xd0\x7a\xcd"
+ "\x4f\x3c\x62\x57\x22\xee\x2a\x8d\x2b\x22\x14\x37\xb5\x06\x3e\xa1"
+ "\x99\x94\xc7\x2d\xac\x8c\x78\x7a\x39\x07\x87\x5e\x46\xdc\x3e\x29"
+ "\x2b\x74\xd0\xbc\x44\x9c\xeb\x60\x87\xde\x16\xf8\x13\xa4\x13\x35"
+ "\xdf\x80\x8d\xba\x5b\xad\x83\xda\xa2\xfd\xff\xa0\x5b\xb6\x45\xf5"
+ "\x0d\x68\xf3\x79\xe8\xe5\xcf\xeb\x37\x42\xf5\xb9\xd9\xa1\x23\x2a"
+ "\x5f\xc0\xa4\x0e\xec\x7d\xaa\xab\x26\x4e\xd3\x81\x85\x78\x9f\x9a"
+ "\x04\x4d\x07\x26\x7d\x50\x57\xf7\xa2\xfd\xb1\x74\x44\xbc\xe0\x7b"
+ "\x4c\xe8\xac\x88\x87\x1b\x93\x9f\xa0\xfd\x1d\x7d\xd7\xf8\x42\x39"
+ "\x3f\x35\xef\x81\x3f\x44\xac\x57\x8d\x97\x94\x3c\x40\x4d\x93\xdc"
+ "\xcb\x6a\xea\xb4\xbd\x8c\xca\x1e\x57\x69\x85\xba\xcf\xd5\x04\xe5"
+ "\xdf\xd1\xed\xf3\x6b\x7a\x35\x18\x69\x30\x97\x30\x3a\x7c\x7f\x5f"
+ "\x74\x64\x4c\x08\xb6\x87\x85\x6f\xa7\xb0\xef\x79\x61\xb0\xc7\x7b"
+ "\xae\xa4\x9b\x87\x69\xff\xaf\x3e\x26\xf7\x14\x99\xc6\xa3\x2d\xdf"
+ "\x17\xf1\xe2\x05\x0c\x36\x09\xdd\x8c\xa7\x20\x81\xfa\x76\x38\xc3"
+ "\xad\xbb\xc7\x2e\x69\xd9\x61\xda\xff\x6a\xd2\xd4\x72\x31\xe8\x4b"
+ "\x78\x7f\x1f\xda\xf2\xf8\x96\xad\xdb\xb7\x40\xa1\xb6\x2d\xdb\xba"
+ "\x71\x6b\x5a\xfa\xa4\x51\xf4\x21\x16\xc4\xd3\xf6\x56\x06\xfd\x4f"
+ "\xbd\x54\x08\x7b\x7a\x19\xbb\xe0\xa5\x5d\xd6\xdb\x80\x5f\x87\xcf"
+ "\x42\x57\x20\x62\x48\xc0\xd7\xaa\xd4\x1b\x74\xa3\xbc\x84\xf5\x4b"
+ "\x4f\xf4\x6d\xcf\x50\x79\xac\x97\x6e\x07\x1c\x55\x99\x83\x77\xb1"
+ "\xda\x54\x6d\x1f\x42\xff\x04\x6f\x3e\x94\x20\xe8\xa2\x32\x94\x61"
+ "\x10\xf0\x1a\x4a\xa0\xfd\xa6\x36\xc9\xad\xbb\x7b\xad\x1c\x57\xed"
+ "\x4a\x0d\x1e\x18\xff\x00\x62\x7a\xf2\x4d\x84\xa3\x2f\x15\xaa\x75"
+ "\x81\x7e\xa2\xee\x38\xcd\x9e\x1b\x3e\x45\x9d\x39\xf0\x27\xfc\xe2"
+ "\x2a\xa5\x14\xf4\xa6\xb6\x42\xa3\x4b\xd8\x8b\x14\xaa\xe7\x8d\x7e"
+ "\xcf\x38\x5a\x37\xf7\x51\xd9\xf8\x0e\xf6\x62\xbb\x8c\x3b\x50\x7b"
+ "\x62\x78\xdc\x81\x17\x89\x1b\x7d\xb1\x5d\xfd\xf3\x87\x3d\x5f\xef"
+ "\x4f\x2b\xd3\x18\x96\x66\x19\x91\x87\xc6\xf5\xe2\x9c\x20\xbf\x22"
+ "\xfd\x9a\xaa\x7e\x90\x11\x43\xe3\xc5\x54\xf8\x0e\x0d\xe1\x46\xed"
+ "\x5e\x95\x07\xe9\x06\xec\xb0\xdf\x52\x1e\x79\x97\xb5\x8c\x70\x83"
+ "\x27\x33\x8c\x89\x0f\x6c\x22\x9c\x78\x31\x37\x84\x07\x12\x46\x94"
+ "\x56\x11\xe2\x53\x5e\x4c\x43\x99\x70\x38\x50\x1b\xf7\x49\xd9\xf4"
+ "\xc5\x7a\x6d\xcf\x86\xdf\x54\x19\x87\xe2\xc5\x39\xc7\xf3\xbb\x49"
+ "\xe6\x7f\xf1\x54\x58\x1d\x73\x54\x5d\x84\x81\xeb\x0f\x17\x1f\x16"
+ "\x32\xdb\x8b\xde\x90\x4e\xe0\xc5\x39\xa0\xbb\xa2\x8e\x68\xcb\x06"
+ "\x97\x57\xc4\xaa\xd6\x69\xb1\xe9\x07\x1c\x2f\x59\x35\x1e\x45\xab"
+ "\xab\x41\xea\x9c\x84\xaf\x4b\x5a\x83\x15\x94\x67\x79\x50\x1f\x4b"
+ "\x69\x41\x19\xd0\x4e\xeb\x58\xf0\xde\x2f\xa5\x85\x64\xbd\x5a\x71"
+ "\xaf\x5a\xc8\x81\xb2\x1e\xe2\xbb\x5e\x4a\x1e\x29\xb7\x11\xff\x60"
+ "\xdd\xb4\x65\x13\xb1\x0f\x3f\xcc\xdc\xba\x98\x44\x87\x1f\x66\x6e"
+ "\x5a\x0c\xd3\xaf\x55\xcb\x1f\x10\xbf\xb4\x38\x16\x8f\xa2\x3f\x86"
+ "\xde\x5b\xc4\x83\x86\xce\x88\xe4\x5c\xe8\x4e\x07\x64\x5c\xd5\x09"
+ "\xea\xaf\x51\xfd\x1d\x4f\xfb\x9e\xaf\x8b\xfd\x6c\x1c\x62\xe0\xb8"
+ "\xd9\xcf\x2c\x8a\x43\xc6\x93\x55\xf7\x6c\xa2\xe5\x2f\x05\xb4\x73"
+ "\x33\x61\x0b\x0f\x7f\x86\x7d\x19\x42\x1f\x37\xe0\xf8\x59\x50\xff"
+ "\x21\xf5\x8b\xf2\xec\x8d\xd2\xd7\x68\xe9\x9a\x3e\x96\xd2\xd2\x34"
+ "\xdd\xab\xcc\xfb\x33\x5b\xa8\xec\x30\xdd\x76\x9c\x76\x2e\x47\x79"
+ "\xaa\x34\x98\x69\xf5\x14\x58\xf9\x45\x95\x4f\x8a\x10\x7c\xb5\xe3"
+ "\xa5\x12\xe1\x43\x14\xbc\xb8\xd0\x33\xff\xac\x49\x6b\x07\x32\x02"
+ "\xfa\xad\x9e\x01\x89\x75\x0f\x5f\xa1\xd2\xd7\xe8\xcf\x82\xf3\x3f"
+ "\x02\xe6\x09\xf7\xdc\x2e\xf4\xf2\x09\xd9\xc4\x9f\xdd\x3e\x42\x0f"
+ "\x07\x1c\xba\xab\x92\x4d\x14\x3a\x26\x29\xa7\x8f\x03\x8f\x40\x63"
+ "\x78\x91\xe6\x33\x02\xb4\x5c\xee\x7b\x47\xd6\x06\xf7\x78\x93\x25"
+ "\x99\x47\x47\x9a\xe0\x6f\x5e\xde\x5f\x38\xf2\x63\xe0\x9b\x67\xea"
+ "\xe3\x03\x1c\xb6\xca\xcf\x7f\x7f\x40\xea\xe1\x8f\xbc\x16\xd2\x99"
+ "\x1d\x61\xaa\x6f\x54\xd8\xc1\xd1\x7c\x1d\x09\xda\x7f\x20\xbf\xe0"
+ "\xbd\xa8\x4e\xdc\x55\x40\xfb\x37\x70\xde\x43\x72\xff\x62\x9f\x5c"
+ "\xa7\x2f\x2f\x14\x75\x10\xad\x96\xf7\x01\x5e\x26\x3c\x3c\x12\x27"
+ "\xf7\x06\xd4\x9d\xcc\xfa\xa2\x17\xbb\xfb\x1c\xcd\x89\x80\xa1\x37"
+ "\xfa\x61\xab\xf4\x45\xfc\xf2\x37\xbd\x0e\x03\xcd\xe9\xcb\x34\xff"
+ "\xaf\x8e\x79\xae\x35\x94\xc3\x1b\xfc\xfd\xbc\xbe\xec\x33\xa2\x73"
+ "\x8f\x31\xe6\xcf\xe1\x75\x43\xfd\xfc\xb8\x88\x7d\xfe\x28\x63\xa5"
+ "\xff\x60\x2c\x10\xf1\xfd\xf3\x83\x84\xab\x0f\x5e\x55\x2e\x22\x66"
+ "\xe0\x61\xca\xf7\xa0\xf7\x12\xaf\xa1\x32\x0f\x66\xf2\x8b\x35\x94"
+ "\x6f\xd5\x85\x8b\xfc\x10\xe5\x5d\x95\x41\xb8\x92\xc3\xfd\x81\x88"
+ "\xc7\xcf\x5b\x1f\x06\xed\x7e\xf9\x84\xa7\x34\x76\x21\x77\xe8\xcb"
+ "\xf9\xee\xaf\xdd\x41\xfd\x69\x0c\xc6\x2b\xa3\x7a\x81\x57\x88\x53"
+ "\x4a\xfc\xe1\x79\xc2\x83\xf3\x29\xc4\x77\x10\xde\x9e\xa7\x7c\x1e"
+ "\x37\x7b\x4a\xd0\x1c\x4f\xc4\x1d\xb1\xf4\x37\xaa\xcf\x68\xea\x6b"
+ "\x43\x20\x87\xd7\x97\x3f\x42\xfd\xef\xa1\xfe\xf7\xf3\x3a\x1a\xc3"
+ "\xf1\xb2\x2e\xc6\xd0\xff\x00\xea\x0c\x20\x5e\xa2\x6e\xf2\x61\xfa"
+ "\x9e\x62\x8f\x61\x87\x29\xef\x23\x5e\x36\xb9\x86\xf2\x3c\xf2\xe3"
+ "\xc9\x4c\xf4\xbf\x97\xfa\x1d\x15\xbb\x30\x40\x6d\xa3\xff\x03\x8e"
+ "\x9f\x67\x6a\xfd\xd4\xda\x47\x7f\xb5\x75\x9b\x02\x1d\x61\x74\xe4"
+ "\x5a\xf4\x5b\x9e\x7b\xfc\xfc\x6f\x9e\x6c\x9a\xe7\x88\xaf\xdd\x21"
+ "\x65\xec\x9f\xd7\x69\xfd\x1f\x7e\x0e\xf6\x73\x9f\xa4\x9f\x3f\x27"
+ "\xf9\xe7\x48\x9b\xa4\x35\x32\x0d\xe3\xf7\xd0\xba\x55\xef\x00\x9e"
+ "\xd7\x60\x46\xdf\x8f\x8c\x3c\xe7\x5a\xb3\x35\x4b\xe8\xa8\x53\x37"
+ "\xda\x36\xe5\xa4\x92\xe4\x3b\x89\x65\x22\x49\xc8\xc6\xe9\x69\xd6"
+ "\xad\x5b\xac\x8f\xa5\x6e\xda\xbc\x35\x27\x3d\x6b\x9e\x50\x67\x64"
+ "\xa7\x6f\x49\x83\xea\x3a\x2b\x35\x2b\x73\xd2\x08\x79\xa6\x24\x76"
+ "\x61\x0b\x62\xd1\xe4\x03\xbf\x7f\x71\x9f\xaa\xb7\xf5\x71\x47\x92"
+ "\x90\x8b\x25\x8d\xf9\xaf\xd7\xac\x3b\x93\xf0\xfd\x1b\x72\x1f\xff"
+ "\x45\x12\x2f\x8b\x7c\x88\x73\x11\xc3\x5b\x77\x91\xfd\x62\xbe\x80"
+ "\x47\xdf\x0a\xad\x1e\x21\xbb\x02\x67\x33\x77\x82\x0f\xfb\xaf\x53"
+ "\x1c\xdf\x87\xc1\xe2\x17\xe3\x24\x2f\x42\xe9\x43\x2b\x58\xc8\xee"
+ "\xfe\x17\xf7\x71\x3d\x8d\x9d\x60\x29\x65\x86\x78\xa6\xde\x7f\xfc"
+ "\xb0\x83\xbd\x02\x59\x0a\xe7\x36\xad\x82\x27\x17\xf7\xb4\x5e\x39"
+ "\xc3\x4b\xe3\x89\xce\x8c\x37\x01\x5e\x65\x52\xa6\xd7\x9b\x75\x88"
+ "\xb3\xdb\x81\x3b\xa3\x89\x38\xe7\x3d\xec\x50\x12\x43\x76\x4e\xff"
+ "\x65\x80\x7c\x21\xce\x39\x04\x4d\x3a\xba\x41\x5b\xbb\x7a\xdc\xc3"
+ "\xd9\x3d\xfd\x5e\xb9\xfe\x8e\xa6\x23\x3f\xcd\xff\xbd\x72\x7c\x22"
+ "\xde\x38\xf1\x06\xaf\xe4\xd1\xf8\x1f\xe6\x05\x2b\xd4\x33\xc9\x57"
+ "\xf2\x94\xe8\x75\xd6\x40\x36\xc9\x05\xa6\x75\xb5\xf4\x6d\x8b\x52"
+ "\x16\xf9\x48\x80\x78\x2a\x85\xe4\x04\x5e\xb6\xee\x67\x81\xb2\xc8"
+ "\x64\x65\x7b\x82\x1e\x7b\x6b\x81\x9d\xe0\xbb\x35\x63\x12\xbf\x94"
+ "\x11\x19\xd8\x9e\x00\x7b\xd5\x0d\x9c\x53\xd9\xe8\xc8\x4c\x11\xdb"
+ "\xb8\x2c\xf2\x51\xf5\x3d\x0b\xef\x0a\xf1\xc9\x94\x66\xa7\xf7\x9d"
+ "\x0a\x0f\xcb\x3f\x3c\x6f\x2e\xde\xcd\x3a\x61\x5f\x99\x48\x72\xc9"
+ "\x22\x8c\x5d\x1b\xb3\x90\xcf\xa0\x23\x0a\x8e\xed\x15\xbb\x96\x0e"
+ "\xb9\x41\xf2\xf0\x6c\x23\xc1\xb8\x44\xe2\x63\x30\xdf\xb7\x35\x18"
+ "\xc8\x58\xde\x91\x44\x37\x7f\x91\xa4\x20\x06\xfb\xee\x9b\xef\xe0"
+ "\xfa\xff\x9a\x0a\x9a\xb5\x3a\x20\x68\x21\x93\xe7\x4e\xaf\xd4\x69"
+ "\xf0\xc4\x7d\x02\xd0\x52\x9a\xb7\x84\x14\x0f\x9b\x24\xe9\xc0\x2b"
+ "\xad\x61\xf2\x61\x2f\xe6\xda\xcd\x5e\x11\x7e\x96\xb8\xde\xb8\x5b"
+ "\xbe\x1f\xb5\xca\xb5\xf2\x8a\x5f\xcb\x4b\x69\xd2\xdf\x49\x89\x69"
+ "\xc1\x76\x3f\x9b\x9e\xb9\x84\x77\x11\x6e\xb6\xca\x7c\xbf\x98\x13"
+ "\x5a\x53\x12\xdf\xe8\xb7\x0e\xf2\x35\xce\x1f\xf1\x5c\x33\xc6\x9d"
+ "\xd8\xfc\x6a\xce\xb1\x5f\x61\xff\xb4\x4e\x67\x22\x86\x2e\xe1\x61"
+ "\xe1\xc9\x6a\x2f\x13\xf3\x1c\x1d\xf9\x50\x1f\x62\xa5\x13\x2d\x1f"
+ "\xad\x3c\xca\x50\xfe\x13\x42\x4e\xa2\x75\xa1\xd0\xba\xa0\x32\x0f"
+ "\x03\xaf\xf3\xaf\x42\x7e\xf9\x85\xbf\x21\xb7\x1b\x3e\xfb\x09\x5f"
+ "\x7f\xe1\x07\x0c\xb1\x0e\xca\x1c\xe2\x3e\xa4\xd8\x27\x9d\x39\x0b"
+ "\x50\xc7\xf9\x68\x1f\x33\xb4\x10\x45\xa0\x79\xf1\x65\xe6\xb3\xc9"
+ "\x3d\x94\xdf\x60\x63\x46\xc8\xb0\xc3\xf7\x90\xd1\xf7\x8f\x3e\x53"
+ "\x7c\x62\x5f\x59\x3c\xed\x47\xaf\x2e\x70\xb3\x63\x63\xca\x19\xbb"
+ "\xe3\x89\xaf\xa1\x7c\x15\xd3\x71\x56\xfd\xea\x86\xeb\xe5\xd5\xee"
+ "\xe8\x02\x57\xee\xb2\x40\x9f\x12\x9f\x28\xce\xbc\xa3\xe3\x8d\x52"
+ "\x6f\xf9\x6a\xad\x56\x1e\x7a\x4f\xd8\x17\x94\x0f\x32\x4b\x79\x50"
+ "\x56\x7c\xb5\x51\xce\xd1\xab\x8d\x9a\x7c\x31\x5a\x3b\xb6\x23\x5c"
+ "\x29\x98\xcb\xf4\x2e\xab\x87\xdd\xe9\x63\xa6\x9a\x03\x8c\x55\xec"
+ "\xe4\xbe\x67\x77\x12\x1e\x11\x8c\xb9\xfe\xd5\x24\xd8\x61\x1c\xa6"
+ "\x3d\xba\x4c\x61\x2c\x82\xfa\xf2\x6c\x3f\xb5\x99\x2f\xf3\x71\xe9"
+ "\x5f\xcd\x42\xf9\x36\xd3\x6f\x1c\xd1\x11\x56\x99\xcf\x8c\x95\x0a"
+ "\x33\x54\xe4\xb3\x19\x94\x46\x7c\xc5\xb1\x95\x9a\x2c\x30\xea\xb9"
+ "\x70\x0d\xd1\x47\x6a\x77\x57\x3e\xf7\xbf\x4f\xd2\x92\x43\xe1\xbe"
+ "\x2f\x03\x77\x1a\xff\x31\x39\xc6\x63\xc7\x34\xd9\x80\x9e\xeb\x87"
+ "\xdf\xb5\x3e\x56\x3b\xf2\x8c\xf9\xd1\xad\x5b\x6d\x29\x59\xe9\xf8"
+ "\x49\x98\xbb\xed\xf6\x91\xbc\xa2\x49\xc6\xa5\x3a\xd6\x8a\xb5\x05"
+ "\xfe\x49\xde\x59\x7a\x2d\x26\x4c\xdf\x03\x9d\xf3\x52\xf0\x7d\xb0"
+ "\x39\xa1\x6f\xf3\xde\xcb\xcd\x13\xf2\xc6\x19\x23\xd3\x8f\x6c\xef"
+ "\xb1\x54\x5b\xea\xe6\x7b\xa5\x59\xc3\xe7\xdb\x79\x2d\x69\x44\x3b"
+ "\xc1\xf3\x5f\x55\x36\xf7\x0a\xfa\x58\xba\xae\x82\x47\x2d\x4d\x94"
+ "\x7b\xdd\x6b\xd5\x9a\x0d\xe1\xe8\xbe\x5d\x22\x9b\x02\x65\xd3\xea"
+ "\xb0\x46\x0a\xf2\x98\xfe\xd7\x3b\xdb\xf4\x90\x4b\xf2\xe9\x19\x36"
+ "\x5d\x42\xff\xad\xc6\x8c\x7c\xe7\x4a\x1b\xed\xa5\xaf\x79\x78\x69"
+ "\x24\xf1\x88\xaf\x75\x8f\x65\xc7\x15\x7e\x2f\x5e\x9e\xdd\xbf\x6e"
+ "\xbc\x8e\xcd\x97\xc8\xaf\xd9\x69\x8c\x28\x97\x27\xe7\xec\x75\xc2"
+ "\xff\x57\x2d\x1a\xfe\x6a\x79\xca\xe3\xb5\x58\x9c\xaf\xaf\x1d\xab"
+ "\x7e\x5e\x12\xbf\x50\xe2\xf8\xeb\x6f\x8b\x33\xea\xe9\xec\x27\x1d"
+ "\xec\xf5\xb7\x0c\x16\x66\xa1\xe7\xff\xa2\x67\xa1\xc3\xc0\xb7\x61"
+ "\x78\x34\xb3\xb7\xd6\x40\x14\x87\x28\x8f\x8e\xcb\x7f\xc4\xf8\xc9"
+ "\x7f\x11\xf4\xa7\xe7\x3a\x71\x7b\x25\x82\x66\x70\xc2\x78\x03\x33"
+ "\x47\x9b\x8c\xb3\x6e\x99\x61\x59\xba\x64\xd1\xc2\x82\xfc\x5c\x3b"
+ "\x57\xfc\x3e\x33\x0f\x8b\x9f\x5a\xb2\xa4\xed\xa1\xdb\x0b\x25\xff"
+ "\x50\xba\x64\xd4\x3b\x6f\xa5\x0e\x9e\x09\x99\x56\x89\x7e\x98\x15"
+ "\x6c\x63\xfa\x37\x06\xdd\x7a\xc8\x50\xe0\x61\x10\xe3\xbd\x83\xbd"
+ "\xf1\xc0\xbb\x94\x46\xf0\xb2\xf3\x92\x87\x99\xbc\x9b\xf4\xc6\x3e"
+ "\xa5\xec\x61\x16\xaa\xdf\xc0\x50\x3f\xc9\xe9\xfa\x23\xf9\xdd\x7a"
+ "\x97\x61\x09\x73\x59\xbd\xec\x5d\x7a\x1e\x75\xae\xa8\x4d\xe8\x84"
+ "\x51\x07\xed\xc1\xc5\x05\xd7\x68\x6f\xb6\x8b\xf3\x19\xfd\x45\xf6"
+ "\xc6\x7b\x75\x63\x94\x13\x67\xac\xd1\x93\xff\x3e\xe0\x78\x83\xe8"
+ "\xf9\xa3\x95\xaa\x1c\x42\x72\x52\x9d\x49\xdb\x0f\xe8\xfb\x67\xf2"
+ "\x9c\xa8\xce\xaa\xe5\x19\x75\x8e\x7e\x0a\x9b\x67\xee\x04\x1e\xf0"
+ "\xfe\xee\x6e\xf8\x60\x1c\x4b\x17\x07\x9b\xfb\x6c\x0b\x57\xf8\xf3"
+ "\x8f\x7b\xf3\xab\xb8\x2f\x7f\x06\xef\x2e\x98\x21\x6c\x65\x20\x57"
+ "\xc4\xf4\x4d\x7d\xfc\x72\xdf\xf3\x8f\xf7\x29\xcf\x3f\x7e\x85\x4f"
+ "\x7d\xfc\xaa\x32\xf5\xf1\x7e\xa9\x33\x64\xe6\x81\xe7\x1f\xc7\xd9"
+ "\xf0\x32\xea\xe7\x45\x9c\x43\x92\x9c\x41\xf2\x5c\xdd\x09\x4d\xce"
+ "\x18\x26\xc7\xa4\xd9\x52\x60\x54\x90\xfa\xc4\xf7\x13\x7f\xa0\x86"
+ "\xe5\xf8\xf1\xb6\xd4\xc7\xd3\x53\x48\xc2\x49\x51\xad\x8f\xa0\x7e"
+ "\x26\x66\x0e\x79\x71\xe2\x71\xaf\x75\x7b\x7a\x56\xd6\xfc\xad\x5b"
+ "\xee\xb5\x22\x98\x87\x48\x97\xf7\x98\x32\x52\xd3\x04\xcb\x97\xfe"
+ "\x39\x7d\x35\xc6\x82\xd8\x91\x34\x9e\x2b\xe1\x63\x50\xfb\x3c\x4b"
+ "\xf4\x99\xfa\x8b\x7e\xab\x7d\x26\xb9\xfd\x97\x41\xfd\x67\x48\x67"
+ "\xf0\x4b\x1f\xf6\x71\xad\x0e\x94\xa7\x72\x97\xc2\xca\xd1\x58\x7f"
+ "\x79\x34\x5c\x6f\x2a\x75\x97\xbf\x5a\x23\x74\xa6\xcf\x7f\xdf\x83"
+ "\x38\x3a\xc4\x0f\xea\x7a\xd8\xaf\x04\xdf\x04\x99\x4f\xc0\xdc\xaf"
+ "\xc5\x9b\xa8\x6b\x84\x0d\x8a\xec\xdb\x2f\xbd\x61\x3c\x19\xcd\xf9"
+ "\xaf\xd6\x43\x97\xd7\xcb\x7e\xf5\x0d\xca\x77\x99\xea\xf3\x2a\xcf"
+ "\x7f\xbf\x8f\xe4\x33\x9a\x83\xef\xf7\xc3\x8f\x08\xee\x9e\x20\xb6"
+ "\x43\x8b\xd7\x23\xe2\xe4\x89\x32\x24\xc5\xa2\xcf\xb2\xce\x5f\xad"
+ "\x08\xe9\x14\x7e\x65\xd4\xfa\xe5\x66\xbf\x44\xcc\x64\x4b\xf8\xfc"
+ "\x3c\xb0\x7c\xed\xfc\x2d\x5b\xe7\x6f\xdc\x66\x9b\x6f\xcb\xc8\xda"
+ "\xba\xed\x87\x19\xc3\xe8\xe5\x0a\x7f\x99\xf1\x2c\x3f\x97\xcc\xa2"
+ "\x77\xc5\x8c\x37\xeb\x12\x9f\x68\xde\x03\x9b\xd4\x29\xcc\x6c\xff"
+ "\x01\x74\x84\xec\xd0\x7e\xde\x0a\xdd\x04\xce\xc8\xcd\xbb\x12\x37"
+ "\x99\x76\x25\xa6\x2a\x8e\x45\xf7\xe0\x0e\x94\xd9\xff\x80\xce\xd4"
+ "\x79\x9f\x2e\xe0\x58\x70\x0f\x78\xb2\x6a\xa2\xe1\x15\xf1\xbc\x8d"
+ "\xca\xb4\x53\x19\x37\xfd\x75\x52\xb9\xa6\x2e\xf6\xeb\x89\xf4\xdb"
+ "\x68\xde\xc5\x0f\x9b\xfd\x5c\x99\x57\x48\xf2\x17\xd5\x8b\xbb\x1f"
+ "\x3c\xda\x08\xfb\x28\xe8\x6a\xc7\x85\x74\xb5\xbf\x9e\x47\x6b\x6d"
+ "\xfc\xaa\xbd\xfc\x5d\xaa\xab\x51\xe9\x57\x1a\x11\xf7\x58\x3d\xb3"
+ "\x38\x55\x42\x7f\x77\x56\x32\x0b\x6c\xec\x73\xcf\x32\x7d\x4b\x67"
+ "\x37\xee\x91\x38\xa9\xbd\x06\xca\x7f\x82\xfe\xea\xad\x5b\x58\xc4"
+ "\x45\xf6\xeb\x3c\xcd\x36\x4f\xf2\xff\x6f\x0a\x3e\x98\xca\x3b\x71"
+ "\x2f\x24\xef\x09\xa2\x1d\x5d\x1e\x3d\xea\xa7\xb4\x46\x57\x46\x37"
+ "\xf1\xe8\x4d\xb8\xbb\x03\x1d\x0d\xf2\x24\xf8\xe9\x1b\xf4\x34\x0a"
+ "\xb7\xe8\x89\x8e\x36\xd1\x3e\x55\x0f\x9b\xcf\x96\xdc\x36\xd6\x92"
+ "\xd9\xc8\x94\xbe\x84\x39\xa2\x3e\xea\x0f\x95\x39\xf5\xc6\x63\x3e"
+ "\x3d\xf0\x85\xf2\xb5\x82\x1f\x82\xaf\x07\x9e\x9d\x70\x1b\xe5\x69"
+ "\xa0\xef\xad\xfc\x9c\x45\x0f\xbb\xca\x8b\xec\xf8\x5e\xde\x97\x90"
+ "\x70\x57\xaf\x8c\x7f\xdb\xc1\x8e\xaf\xa7\xbe\x9e\x0b\xeb\xeb\x43"
+ "\x34\x06\xc2\x25\xe6\xa4\x76\x4f\xa0\x1f\x2d\x19\x8d\xac\xc5\x47"
+ "\xed\x7a\x1b\x61\x37\x3c\x87\x6f\xb7\x18\x60\x47\xcc\xb7\x27\x18"
+ "\xca\xaf\x30\x03\xd1\x4c\xe7\x61\xfa\xa5\xf1\x1f\x27\xf9\x6f\xc6"
+ "\x80\xe3\x78\xa6\xe6\x2f\x04\xf2\x06\xbd\x17\x6a\x34\xa7\x94\xf2"
+ "\x50\x7f\xea\x51\x77\x54\x2f\x83\x0e\x6a\x1c\xd1\xb3\x71\xd4\xe6"
+ "\x04\x82\x63\x3d\xc1\x2e\x95\xe6\xec\x04\x60\x4d\xf0\xe9\x56\xa8"
+ "\xbe\xf2\x7e\xea\x4f\xb6\xc5\x60\xea\x64\xba\xd5\xfe\x01\x4e\x30"
+ "\x3f\xb5\xda\x3e\xc0\x71\xbf\x00\xb6\xfa\x54\x66\x31\x8d\xd5\x20"
+ "\x6d\x1e\x8e\xf7\x6a\x6d\x05\x80\x63\x97\x92\x55\xfd\xee\x9b\xa5"
+ "\xb0\xa1\x0c\xd9\x41\xbe\x59\x42\xef\x5d\xe1\xef\xc0\x73\xc5\xf1"
+ "\xab\x8c\x1a\x81\xeb\x6f\x2e\x20\x5c\x37\xa9\xeb\x87\xea\x36\x18"
+ "\xfa\x1c\x1b\x90\xbe\x92\xf8\x93\xb5\x72\x0d\xbc\x29\x78\xfd\x2e"
+ "\x76\x3c\x41\xc6\x0a\x3e\x3e\x4f\xd5\x0b\x9e\x92\x75\xfe\x3a\x0f"
+ "\x73\x0d\x18\x12\x9e\x17\xb9\xba\x1b\x05\x8e\xbb\xd9\xaf\x6b\x6b"
+ "\x88\xa7\x1a\x83\xde\xfb\x5c\xb4\xd7\x29\xfd\xbc\x1b\xb2\xb4\xb4"
+ "\x79\x7c\xd3\x99\x62\x8f\x48\x22\xb9\x59\x4f\xb0\xc0\x1a\x8d\x27"
+ "\x79\x61\x29\x6c\x63\x09\x06\xe8\x93\xfb\x7a\x71\xb9\x69\x0e\x88"
+ "\x47\xfd\x8d\x81\xfa\x2b\xe2\x52\x21\x6e\xb1\xd4\xf7\xff\xc6\xa2"
+ "\xf9\x86\xe1\xfd\x3c\x17\x7c\x20\xb5\x5b\xb8\x27\x47\xb4\x81\x58"
+ "\xcd\xdd\x36\x2b\x3f\xd3\x60\xf5\x8c\x49\xef\xc3\x6c\x39\x3d\x6a"
+ "\xfc\x47\x61\xd7\x32\xdc\x96\xf3\x37\x85\x61\xba\x43\xd8\xb6\x14"
+ "\xc2\x7e\x47\xfa\xf0\xfa\x8d\xf0\xf5\xb5\xda\x2e\x7d\x15\xb9\x7c"
+ "\xbd\xaa\x0c\xfc\x9b\x66\x11\x13\x0e\xf2\x95\xb0\xff\xec\x51\x6d"
+ "\x36\x7f\x93\x8e\x36\x1a\x46\xc4\x9d\x4f\xdf\x92\xfa\xe8\xe6\x74"
+ "\xa9\x4e\x9f\xff\x23\x5b\xea\x0f\x87\xcb\xe9\x82\xee\x72\xc7\x6f"
+ "\xda\x24\x1d\xfb\x6d\x4c\x18\x6d\x34\x04\xcf\x17\xf4\xec\xb8\x3c"
+ "\x63\xf8\x6d\xe2\x68\x67\x0c\x0f\xfc\x70\xcb\xd6\x2c\xd1\x86\x30"
+ "\x6f\x4d\x97\x37\x55\x27\xb1\x87\x96\x3f\xb0\x7c\x7e\x76\xba\x4d"
+ "\x04\x7a\x92\x0a\xfd\xd4\xb4\xb4\x2c\xd5\xf8\x75\x13\x4a\xe1\xcb"
+ "\x63\xdb\x45\xd1\xcc\xc7\x6d\xd2\x6c\x36\x7b\x73\x6a\x4e\xba\x5a"
+ "\x45\x78\x5f\x67\x60\xef\x6e\xa8\x16\xfb\xc3\x24\x69\xab\xf3\x5b"
+ "\x67\xd8\xd9\x7e\xb8\x2e\x71\x1a\x7d\x6b\xd7\xbe\x65\xde\x0a\x5c"
+ "\xa9\x7f\xa2\xa5\x56\xd0\x2c\xc3\xc9\x97\x00\xdf\xfa\x07\x10\x9b"
+ "\x84\xf8\xac\x64\xc4\xd2\x56\xed\x60\x88\x77\xa8\x9f\x4b\x72\x7f"
+ "\x32\xc1\xd7\xbe\x3a\xa0\x70\xda\xdf\xed\x6e\x76\xc2\xa2\xea\xe7"
+ "\x8c\x8a\xfe\xb7\x8b\x60\xc3\x58\x23\x74\xc9\xf5\x49\x21\xba\x7f"
+ "\xc2\x02\x1e\x16\x34\x16\x7d\x43\x3f\xe9\xfb\x86\x30\xfb\xb1\x4e"
+ "\x37\xfb\xad\xd0\xc9\xc0\xce\x49\xc4\x0d\x22\x7a\xa4\xfa\x28\xd1"
+ "\xb7\xbc\x04\x9e\xe8\x77\xc5\xb0\x0f\x53\x4a\xe2\xd7\xc8\x3d\xee"
+ "\xad\x17\x79\xd9\xe4\x9e\xbb\xbc\x2c\x4e\xd2\xa4\xfa\x0b\x94\x7e"
+ "\x13\xf5\xb1\x91\xd2\xff\xfd\x46\x7e\xf7\x38\xf0\xe9\xf2\xbc\xb4"
+ "\xfe\x82\xaa\x5b\x06\x7c\xc6\x85\xf5\xa1\x33\xa4\x7f\x3e\x61\xf1"
+ "\x44\xc5\xaf\xd9\x23\xed\xc3\x84\x2d\x8c\xb4\x47\x7a\xcb\x18\xd4"
+ "\xb7\x52\xdb\xaa\xfd\x47\x5c\x17\xe5\x27\x58\xac\x51\x6d\x32\x30"
+ "\xf6\xb5\x18\xb7\xb4\xeb\x7d\x6b\x51\xb8\x2c\x2e\xe3\xb4\x4c\xee"
+ "\x51\xa4\x0d\x37\xfa\xbe\x49\xf0\xf4\xd0\x75\x0f\x02\xde\x6f\x11"
+ "\xed\x9f\x7c\x9e\xca\xd1\xce\xf9\x9b\x5e\xad\x3f\xe8\xb3\xcd\x4e"
+ "\x8c\x29\x95\x03\x1f\xd6\x27\xf6\xfb\xb7\xaa\x42\x7d\x7e\x4b\xca"
+ "\xef\x5c\xa3\x57\xbf\x33\xc9\x33\x87\xf8\x0d\x61\xf3\x66\xb8\xc8"
+ "\xde\xba\x40\x7d\xdd\xb0\x5b\xda\x61\x8d\xd3\xec\x9b\xa8\xae\x61"
+ "\xe3\x0f\x9d\x07\xfc\x36\x4b\x9e\x07\xfc\xce\x10\x9a\xc3\xb7\x1a"
+ "\x81\xf7\xb0\x61\xd3\xec\xd7\x30\x9f\x32\x86\xcd\xef\xe6\x69\xf5"
+ "\x28\xd1\xf1\x49\xd0\xd9\x94\x49\x5b\x0c\x9a\x97\xdf\x3d\x11\xa1"
+ "\x3b\x23\xf8\xfa\xbb\x7c\xac\x96\xd2\xc6\x53\x5a\x2a\xf2\xa1\x4d"
+ "\xa1\x37\x27\xd8\x60\x2c\x0a\xc9\xfb\x11\x96\xf1\x2b\xa9\xbe\x5c"
+ "\xa2\xc7\x2b\x43\xb8\xf1\xbb\xe5\xc2\x0e\x4c\x85\x35\x77\xfc\xf6"
+ "\x27\x21\x3d\xd2\xef\x8e\x06\x75\xc0\x54\x4f\x68\x4f\xfa\x5d\x33"
+ "\x60\x5c\x1e\xd4\x87\x9d\x60\xa2\x1f\xf2\x6c\xff\xfd\x2e\xf6\xfb"
+ "\xcb\x3c\x7a\xf2\x79\xec\xe7\xd0\x55\x60\xee\x85\xec\x21\x74\xb9"
+ "\xbf\x7f\xa5\x46\x9e\x9f\xed\xa7\xe7\xd7\x14\xfd\x68\xb8\xf3\x7b"
+ "\x6b\xb8\xad\xb9\x84\xff\xef\x33\x14\xd4\x49\xe3\x47\x5d\xb4\xc7"
+ "\xe9\x34\x1d\xbb\x5a\xef\xf7\xa8\xce\xe7\xbb\x54\x58\x8b\x73\xe5"
+ "\x32\x15\x0e\x98\x63\x01\xf3\xdf\xd3\x9a\xfa\x8d\x38\xbf\x29\xa8"
+ "\xe5\x17\xb6\x52\x1d\x32\xde\xf3\xef\xab\x38\x60\xab\xe6\xf7\x40"
+ "\x17\x44\x7d\x97\xf7\x74\x09\x17\x87\x32\xc4\x1d\x45\xa5\x2c\x7e"
+ "\x05\xfa\x8e\x33\xe5\x90\x7e\xef\xf7\xcd\x28\xeb\x79\x52\x96\x29"
+ "\x97\x67\xde\x34\x37\xbf\x1f\xc7\xb7\x67\x30\xf5\xac\x95\x68\xfd"
+ "\x5b\xa7\x80\xf7\xa8\xc7\x2b\xf4\x37\xbf\xef\x54\x08\x2e\x34\x27"
+ "\xe6\x01\xc7\x89\x18\x6d\x4e\x68\x3e\x9a\xae\x23\xfb\xd1\x9c\x9c"
+ "\x58\xa4\xf9\xfb\xc2\xde\x44\x6b\xb8\x50\xca\x35\x27\x02\xe6\x5d"
+ "\x4b\xb9\xd9\x7f\x0f\x78\x30\xef\x61\xbd\xd0\xcb\x6b\xb6\xd4\xb3"
+ "\x08\x4e\x97\xb4\xfb\x29\xca\xee\xef\xb7\xc1\x0e\xdd\xe5\x93\x76"
+ "\xe8\x48\x7f\xd0\xcb\x95\x16\x6f\x00\xf7\xb3\xda\xa8\x8d\x5a\x4d"
+ "\xe6\x07\x7d\x8b\xd8\xa5\x23\xd8\x9d\x38\xee\x66\x6f\x2c\x50\xe9"
+ "\xda\x04\x9a\xf3\xd3\x6a\xfd\xe1\x7d\x50\x7d\xed\x9f\xf0\x4b\x39"
+ "\xf4\x44\x37\xd1\x9e\x2a\xa9\x3b\x38\xe1\xd5\xfa\x4d\xdf\x9d\x23"
+ "\xc7\xb8\x66\xd9\x03\xe9\xd6\xcd\x20\xd1\x89\x77\xdb\xad\x09\x73"
+ "\xd3\xee\x12\x17\x17\xac\xff\xb1\xec\x5e\xeb\x9a\xc5\x73\xed\x19"
+ "\xf3\x1e\x94\x3f\xcb\xd6\xac\xc4\xef\x08\xb9\xc0\x3a\xe0\x78\x7b"
+ "\xed\x70\xdd\xc4\xfb\x6a\x1f\xde\xde\xec\xd6\xfd\xa7\x8c\xb1\x68"
+ "\x32\x19\x79\xf1\xe0\x0a\xda\x53\x7b\x21\xb3\xad\x0e\xfc\x93\xf3"
+ "\x7d\x83\x2b\x78\x94\xc9\xe8\x89\x5a\xd2\x46\x7f\xb5\x9e\xa8\xd8"
+ "\x98\x72\xa2\x81\xc4\xa3\xfa\xcc\xfe\x09\x92\x56\xd2\x3b\xf1\x3d"
+ "\xdd\xc4\x5b\x61\x2e\xd9\xfd\xb7\x17\xf0\xd5\x01\xee\x22\x1e\x8b"
+ "\xe0\xf2\x76\x93\xb6\x8f\x0b\x9d\x7a\x89\xc9\xb8\xda\xce\x87\x80"
+ "\x3b\xc4\x1f\x18\x79\x29\xb5\x19\x81\x33\x80\xb7\x69\xfc\x6f\x1c"
+ "\x95\xb0\x78\x87\xe6\xff\xc4\x1c\x15\xbe\x6b\xe8\x9d\xe6\x7f\x8d"
+ "\xe0\x6d\x14\x87\x45\xec\x15\xca\xee\x3b\xbe\x43\x72\x69\xad\x56"
+ "\x27\xd5\x65\x52\xef\x3b\x8a\xfa\xe4\xf9\xeb\x17\xff\x29\x65\x51"
+ "\x09\xd0\xa1\xe2\xae\xba\xd9\xae\x43\x4c\xb8\xe4\xa0\xde\x98\xbe"
+ "\x11\x1f\x04\x39\x36\x39\xda\xab\x2b\x44\x9e\x90\x7e\x55\x71\x97"
+ "\xeb\x15\x1f\xf1\x13\x31\xc0\x0f\xf0\xaa\xd2\xb6\xe7\x9d\x13\xc1"
+ "\xb3\xe2\x61\x73\xff\x8e\xc0\x87\x2b\x0e\x03\x8d\xed\xed\xe5\xb7"
+ "\xc6\x49\xde\x49\x71\xe8\x98\xf4\x5f\xf2\x8e\xf0\x21\xa7\xf2\x27"
+ "\xb3\x08\xbe\x1e\xd8\x71\x90\x1c\xe0\x01\x1f\xad\x44\x10\x4e\xb2"
+ "\x1e\xe6\xca\x1d\x28\x84\x0f\x85\x20\x5e\x66\x12\x5e\x66\x12\x5e"
+ "\xc2\xe6\x86\xda\xf7\x44\xdc\xb1\x81\xd6\x2c\xc9\x5c\xef\x14\xa2"
+ "\xff\x80\x8d\xe2\x60\x26\x85\x60\x25\x6c\xab\x01\x9f\xe8\xe8\xa3"
+ "\xb8\xfb\x8a\xb1\x9a\xfd\x34\xe6\xf0\x71\xe9\x15\x77\x99\x83\xc6"
+ "\xa5\xa7\x71\xd9\x2f\x08\xbd\x24\xee\x24\x13\x2d\x89\x0f\xc5\x15"
+ "\x7a\xb7\x36\x7c\x8c\x0a\x62\x91\x89\x31\xbc\xfb\xde\x68\x63\xe4"
+ "\x7a\x9d\xaa\x5b\x78\xf7\x39\xf5\xcc\x5d\xf4\x13\x74\xab\x97\xbd"
+ "\xbb\x36\x7a\x57\x21\xe2\x8a\x1a\x89\xb7\x5e\x86\x39\xac\x71\xf0"
+ "\x0a\xf4\x73\xb4\xf9\x42\x7d\xb2\x2e\xe7\x06\xf3\xae\xc2\x0d\x03"
+ "\x0e\xe7\xbc\xd1\xe1\xed\x5c\x75\x7d\x78\x3b\x67\xa3\x3c\xfa\x81"
+ "\x7b\xcd\x66\x38\xbd\x23\xfc\x26\xbe\xa2\x78\xb4\x76\xa3\x77\xd5"
+ "\xa2\x5f\xa3\x7e\x23\xdc\xef\x2d\xcf\x1a\xbe\x26\x94\x1a\x1f\x03"
+ "\xfc\xa0\xbb\x94\x67\x4c\xce\x53\xc1\xb3\xb0\x12\x53\xa2\x59\x67"
+ "\x8d\xc0\x1a\x13\x3c\x31\x8d\x77\xb4\x7a\xcd\xba\x0a\xf8\xcd\x5c"
+ "\x46\xb4\x6a\xd4\xef\xb4\x0e\xac\x7c\xf7\xd7\x6e\xe5\x25\x91\xde"
+ "\xe8\x5d\x3a\xee\x89\xf8\xda\xa4\x68\xaf\x7f\x0e\xe0\x4a\x7d\xb5"
+ "\xd3\x1a\x3f\x2f\xf6\x6e\xa1\xb7\x7b\x8f\xd6\x7f\x8b\x88\x85\xe7"
+ "\x89\x8a\xf4\x4a\x1b\xb5\xf7\x32\xdc\xec\x2f\xeb\x35\x3a\x46\xef"
+ "\x76\xb7\xee\x8e\xf5\x72\xad\xde\x7c\x80\xf6\xb4\x7a\xc5\x61\xe6"
+ "\xd6\x9d\x66\x4e\x75\x4d\x56\x78\x82\x9e\xf6\xad\xfa\x10\xee\xc8"
+ "\xbb\xd3\x1a\xee\x50\xf9\xfa\xd1\xf1\xe2\xbd\xbf\x5d\x1f\x2f\xde"
+ "\x7b\x4d\x3d\x73\xd8\x20\x65\xa2\xf7\x99\x26\x13\xf1\xdd\x37\x1f"
+ "\xb0\xe6\xa3\xfd\xf7\x2a\x65\xdb\x04\x13\x7f\x12\xe8\xcc\x4a\x82"
+ "\x5b\x21\xe5\x9d\xa7\xd1\x06\xe0\x90\x39\x00\x99\x8b\x09\x3c\xa7"
+ "\x6f\x2b\x88\xf6\xf4\xca\xfd\x39\xf6\x04\x78\x55\xc5\xf1\xb6\x91"
+ "\xf6\xaf\x83\x90\x99\xbc\x51\x26\x1b\xe5\x21\xfa\x37\x61\x86\x4a"
+ "\xff\x36\x53\x1d\x99\x95\xd2\x37\x8a\x51\xc4\xb1\xa4\x75\x8e\xd8"
+ "\x95\x58\xeb\x94\x16\x47\xfd\x86\x2e\x84\x64\x84\xf7\x83\xe7\xbf"
+ "\x8a\x23\x09\xf0\x3e\x8a\x31\xe8\xc1\x0f\x13\xec\x9e\xd3\x2b\x47"
+ "\xfb\xef\xb2\x30\x8c\xb9\x7f\xf7\xf4\xa3\x3f\xb9\x93\x19\xfe\x60"
+ "\x79\x94\x65\xde\xcd\xe2\x76\xfd\x3f\x06\xf6\xef\x85\x4c\x0f\x38"
+ "\xb8\xd9\xfb\xc7\x25\xec\xde\xf7\x6a\xf3\xe3\x66\xef\xad\xc7\x7c"
+ "\xe0\x8c\x70\xb5\x9f\xf7\xc9\x33\xd2\x93\x71\x6e\x76\x4c\xfd\xfe"
+ "\xf6\x86\x51\xf6\x87\xfb\xad\x9b\xb2\xad\x69\x5b\xb7\x6f\x99\x3d"
+ "\x7b\xd2\x28\xb2\xc4\xc9\x04\x29\x4b\x9c\x5c\x1f\x2e\x4b\xd0\xfb"
+ "\x66\xaa\x6f\xd1\x48\xd9\x61\x65\x8a\xea\xf2\x26\x25\x91\x85\x9e"
+ "\xbf\xce\x56\x7e\x3d\xec\xf5\x1e\xb6\xf2\xee\x7b\x52\xbe\x93\x9e"
+ "\x9a\xb6\x23\x2c\xf5\x1b\xe1\x3a\xed\xf2\x03\xd4\x76\xc4\xf4\x6f"
+ "\x11\xfd\xd0\x3d\xf8\x24\xf6\x9d\x86\x6f\xe7\xfb\xf9\x39\xc2\xdd"
+ "\x85\xf0\x33\xd7\x6c\xf3\xb3\x66\xa2\x6f\xfc\x66\xd0\xf5\x09\xd2"
+ "\xd7\x72\x80\x41\x67\x6c\xa6\xb1\x7b\x48\xa6\xbb\x2a\xef\x01\x35"
+ "\x6c\x6b\xa9\xf2\x11\x9d\x88\xb5\x48\x7e\xa7\x21\x91\xd2\x27\xd3"
+ "\xef\xf7\xe4\xf9\x62\xc3\x0f\x48\x26\x4f\x12\x7e\x75\x72\xe0\x57"
+ "\xa7\x41\xd8\x4b\xdd\xe9\x2d\x64\xd2\xbf\xe3\xc9\x6e\xc4\x5d\x70"
+ "\xb3\x86\x2a\xf0\x17\xc8\x4b\x65\xbe\x6e\xfd\x11\x4b\xc4\x2f\xf8"
+ "\x61\xfa\x96\xc8\x4b\x63\x2d\xfc\x60\x32\xec\xbb\xe6\x50\xfa\x73"
+ "\xe0\xdb\x22\x2c\xc6\x89\x03\x8e\x86\x4a\x8d\x07\xf1\x8e\x71\x0f"
+ "\x51\xc8\xe3\xea\x3e\x18\x4d\xf4\x3b\xda\x6b\xe6\x29\xf0\x53\xa5"
+ "\x63\x73\xb0\x3f\x98\xed\x6b\xc4\x7d\x57\xec\x8b\xa0\x09\x35\x82"
+ "\x96\x36\xf4\x6a\x74\xa1\x4c\xca\xa3\x93\x50\x9e\xf6\xcf\x4b\x72"
+ "\xff\xfc\x20\xa8\xff\xa4\x67\x8b\x86\xab\xc3\xee\x3a\x6e\xb1\xa5"
+ "\x67\xa5\xa7\x59\xe7\x66\x4f\x62\x61\x51\x81\x33\xd2\xb7\x58\xb3"
+ "\xd2\x7f\xbc\x2d\x3d\x5b\x08\x7a\xf8\x3a\x5c\x57\x48\x34\x28\x14"
+ "\xa3\x7d\x3a\x60\xfc\x41\x9e\xd4\x5f\xcd\x16\xe7\x7a\xf2\x3c\xf6"
+ "\x61\x0b\xed\x91\x49\x52\x87\xde\x43\x70\xfd\x83\x3c\xbf\x2e\x89"
+ "\x35\x82\x8f\xeb\x62\x7f\x78\x5a\xda\x6d\x7d\xf0\x91\x0a\xab\xa7"
+ "\xa9\x9f\xce\x10\xbf\xf6\xa1\x38\x1b\x96\xf6\xd3\x1f\xb4\xb9\xd9"
+ "\xc9\xfa\x10\x0f\xf2\xe1\x7d\xa0\x83\x82\x1e\x7e\x01\x2d\x54\x79"
+ "\x67\x6a\xe7\x0f\x7b\x79\x0e\xef\x2c\x1f\x64\x42\x37\x8d\x78\x1d"
+ "\x92\xbe\xfe\x61\x81\x06\x47\xe2\x5f\x3a\xa1\x77\xd0\xe4\xa3\xd5"
+ "\xfe\x6b\x3c\x7f\x07\xd3\x43\xf7\xc0\xa3\x63\x67\xbc\x9e\xe5\xd1"
+ "\x73\xc7\x07\x73\x88\x97\x11\x3c\x7a\x8d\x6a\x47\xcc\xa3\x62\x69"
+ "\x3d\xfc\x21\x37\x24\x77\x7c\x98\x24\xf8\xf8\x41\xe0\xcd\x1f\xac"
+ "\x29\xd8\x23\x24\xed\x8e\xfc\xa2\xfe\xf2\x49\xf2\x4c\x4f\xd2\xb7"
+ "\x3f\x9c\x50\xc7\xd0\x0b\x9a\xa5\xda\xa1\xeb\x25\x5e\x7f\x98\x44"
+ "\x38\x67\xc4\x5c\x10\x9d\x2f\xd6\xe0\x85\xf1\xa2\xef\x38\x43\x21"
+ "\xda\x35\xe3\x8d\x9d\x3e\xbd\x8c\xa7\xfb\x41\xa2\x94\x8f\x3e\x9c"
+ "\x13\x7e\x86\x2d\x65\xa1\x0f\x17\x86\x7c\xd7\x7c\x50\x35\x92\x46"
+ "\x6c\xdd\x82\xab\x8d\x8f\xa7\x6c\x87\xda\x79\x5b\xe6\x3c\xeb\xb6"
+ "\x2d\xc2\x84\x40\xa8\x01\x6c\xdb\x36\x3e\x6e\x05\x15\x49\x59\xbe"
+ "\x72\x65\xca\xb7\x1e\xfa\xee\xf7\x26\xb1\x6f\xa5\x52\x9a\x6d\xab"
+ "\x75\x65\xe2\x3c\xf9\xe9\x3b\xf7\x2f\x7b\x38\x65\xd9\xea\x87\x1e"
+ "\x5c\x3b\xca\xfd\x08\x13\xe1\x84\x81\xe6\x68\x5c\x07\xfb\xa8\x42"
+ "\xda\xc3\x7d\xd8\x34\xdc\x1e\xee\xc3\x4e\xc6\x70\x34\xd8\x48\x92"
+ "\xcc\x47\x76\xfa\x23\xd8\x7d\xb4\x47\xe2\xcd\xc4\x28\xea\xbf\x2f"
+ "\x84\x37\x1f\x09\xb8\x42\x77\x20\xcf\x01\x1a\x89\xfe\x7d\xb0\x26"
+ "\xfc\x5b\x88\x16\x7c\x24\x6c\x45\x35\xbc\x00\x3e\xa4\xf8\x8d\x02"
+ "\x37\x24\xbf\xd2\xb8\x46\xc3\x8d\x72\x79\x56\xc9\xa0\x97\xc3\x77"
+ "\xc2\x6f\x03\xce\x3a\x08\x17\x0c\xb0\xf3\x40\x3a\x8f\x7a\xd8\x20"
+ "\xeb\x6d\x2c\xc6\xd9\x07\xf8\x59\xf5\x7c\x36\xba\x87\x35\x7e\xc0"
+ "\x1d\x1f\xae\x94\xb2\xe0\x87\x79\x02\x6f\x76\x4f\xff\x96\x38\x0f"
+ "\x17\x77\xdb\x1a\x4f\x84\xf0\xe7\xa3\x0a\xcc\x4d\x48\x1f\xdd\xd8"
+ "\x36\x42\x8f\x13\x41\x69\xbd\x5a\xec\x03\xdb\x6c\xa6\x37\xcc\xae"
+ "\x60\x95\x7a\x5e\xe8\x66\x8d\xd5\xd2\x26\xfa\x23\x93\xc6\x3f\xd3"
+ "\x33\xad\x7f\xfd\xb1\x91\xfa\xaf\xb2\x30\xfd\x57\x7e\x26\x3f\xd3"
+ "\x92\xe9\x01\x8f\xec\x74\x79\x84\xcf\xdd\xa5\x2d\x99\x5e\xd8\x39"
+ "\x4d\x22\x38\xa5\x16\x04\xf8\x20\x3d\x4f\xa7\xb1\x89\x3d\xe4\x2e"
+ "\xa9\x53\x20\x79\xec\xa3\xa7\xa5\x6c\x22\xd3\x01\x77\x7a\x06\x5e"
+ "\x19\x30\x3f\x84\x97\xbd\x34\x47\x2b\x47\xa3\x7b\xd1\xbb\xf4\xaa"
+ "\x6f\xb3\x8f\xce\x42\x46\x05\xac\x9e\xd5\x2b\x19\xcf\x3a\xe8\x8f"
+ "\x7e\x41\xfb\x42\xfc\x25\x57\x6d\x9d\x3e\xea\x6c\xb0\xf7\x62\xdf"
+ "\xf4\x8d\x45\x4b\x69\x3e\xdb\xb5\xf9\x5c\x1d\xf0\x2c\xc5\x7c\x0d"
+ "\x38\xfe\x38\x43\x9b\xcb\xbe\xdb\x7e\xbb\x26\x62\x17\xb3\x9e\xac"
+ "\xbe\x1b\xe9\xb4\xfe\x3f\x12\x76\xcd\xf0\x45\x30\xb2\x2c\xd1\xe1"
+ "\x24\xb5\xfc\x7a\xad\xfc\x48\x9f\xd9\xe2\xb2\x38\x94\x5c\xf7\x4a"
+ "\x7b\x33\x35\xc4\xf9\x30\x7b\x33\x9c\x47\x37\x48\x9c\xd4\x74\x70"
+ "\x31\x72\x3c\x1f\x3f\xa4\x94\x4d\x86\xcd\x50\x87\xaa\x07\xa0\xb5"
+ "\xfd\xc7\x6b\x77\x32\xb6\xd9\xbb\x3d\x39\xa8\x43\x81\xee\x03\x7e"
+ "\x30\xa9\x1f\xe1\xf7\x5f\x82\xf6\xc2\x6e\xf6\xf1\x5a\xd8\x2f\x6a"
+ "\xba\x5f\xac\x2b\xa9\xb7\xf9\x38\xce\xe5\x65\x8c\xea\xdb\x22\x6c"
+ "\x31\x1c\x7f\xdc\x2c\x70\x8f\x64\x6d\x21\xe7\xe7\xf2\x73\xda\xb9"
+ "\x0a\x78\x17\x79\x37\xf4\xe3\xe0\xf9\x87\xbc\x27\xf9\xc7\x06\x9c"
+ "\xad\x50\xfa\x86\xd1\xf4\x85\x44\x1f\x32\x52\xb7\xa4\x6d\x7d\xec"
+ "\xb1\x2f\x26\x0d\xe1\xe7\xad\x15\x0e\xa5\x98\xea\x84\xfc\xeb\x96"
+ "\x78\xfa\x31\xd1\xff\x97\xea\x25\xff\xf6\xfd\xf3\xb4\x6e\x66\xf6"
+ "\xb0\xa6\x19\x1a\xff\x2e\xd7\x51\x53\x02\x77\x7c\xbc\x39\xb4\x36"
+ "\x3e\xf6\x7e\x7e\x6d\x34\x19\x47\x5f\x1b\x4d\xf3\x68\x9f\x6d\xa7"
+ "\xef\x09\x6e\xf6\x2b\x71\xff\x02\xef\x2a\x0f\xee\x34\xfb\x97\x0a"
+ "\x1e\x3c\x65\x07\xd3\x81\xff\x86\x6e\x1a\xfb\x41\x80\xe4\xda\x00"
+ "\xd1\x88\x14\x3f\x8b\xc1\x5e\x50\xbe\x05\x7a\xc7\x59\xdc\xdf\xcf"
+ "\xdd\x29\x3b\x88\x5e\xd0\x7b\x59\x8f\xb4\x07\x79\xe4\x2a\xc9\x21"
+ "\xf4\x5c\xde\x05\x5a\xa1\x20\x40\x07\x93\xfb\x75\x53\xb5\xc6\xe3"
+ "\x9a\x77\x59\x85\xdf\x76\xec\xdb\x01\x69\x5b\x57\x87\xbd\x9b\xda"
+ "\x39\x2e\x68\x50\xc0\x8c\x73\x06\x56\xfe\x23\xaa\x17\x36\x6a\x5b"
+ "\xd0\xbf\x88\x7b\xcc\xfe\x44\xe1\xd7\xe4\xf0\x8f\x84\x6d\xda\x3d"
+ "\xd2\x36\xed\x1e\x56\xb3\x05\x70\x68\xf2\x5f\x57\x37\x1e\xb5\xc4"
+ "\x19\x9e\x6e\x7f\x6c\x53\x4a\x66\xc6\x8e\x14\xd8\xa5\x8e\xd8\xdf"
+ "\xe5\x1a\x72\x34\x5b\x25\x7c\x9b\xd7\x86\x74\x55\xd2\x9e\x14\x34"
+ "\xf3\x2e\x9f\xf0\xab\xac\x9e\x27\xb5\x88\xfb\x0e\x05\xd7\xf0\x6e"
+ "\x24\x9c\x6b\xf9\x3a\xf1\xf0\xe3\xfb\x60\xc7\x75\x38\x99\x55\x38"
+ "\xb8\x13\x3a\x34\x4a\x9f\xa6\xf9\x77\xe8\xa3\x74\x5a\xfb\x48\x13"
+ "\x3e\x59\xa0\x9f\x93\xb8\xd7\xdc\xe0\x66\xe6\x05\x6a\x7b\xff\x82"
+ "\xad\xa8\xb8\xdf\x20\xf8\x8c\xe6\xcb\xf2\xbe\x60\x73\xb7\x06\x4b"
+ "\xe2\x7d\x17\xc1\xd7\x04\x6c\xc6\xfa\x38\xec\x53\x5b\x0c\x5a\x79"
+ "\x37\x6b\x16\x77\x82\x1e\xf4\x8a\xe7\xba\x47\xbc\xe1\xfe\x21\x9a"
+ "\xab\x25\xdd\x6a\xae\xa5\x74\xc2\x97\xe6\x3d\xd4\xe7\x68\xe9\xb7"
+ "\x42\xd4\xb3\x52\xb3\xcd\x0b\x87\xdb\xb2\xd4\x4c\x62\x96\x37\x3d"
+ "\xf6\x58\x7a\x56\xb6\x35\x55\xba\x81\x48\xd8\xba\x39\x6d\xb1\xea"
+ "\x0f\x62\x4b\xfa\xf6\x94\x4d\x69\xe2\xbe\x19\xa5\xca\xc7\x11\xf0"
+ "\x9d\x07\xf9\x46\xdc\xe1\x10\x63\xfa\xd3\xb6\x1a\x95\x8f\xea\x60"
+ "\xad\x06\x69\xfb\xe3\xfa\xb1\xdc\xdb\x22\x7f\x4e\xfd\x38\xa5\xed"
+ "\x6d\xd0\xb1\xf4\xb1\x6f\x56\xe0\x5c\x0e\xbe\x42\x0e\xed\xe7\x9d"
+ "\xd0\xb3\x50\x1e\xda\xff\x9a\x8d\xda\x7a\x2d\xa5\x74\xd8\x27\x38"
+ "\xb7\xc0\x26\xe1\x4f\xcf\x29\xa5\x91\x9d\x7c\x92\xaf\x82\xe8\x9a"
+ "\x88\xf9\x8d\xf3\x28\x19\x57\xc6\xb5\x1c\xf4\x1a\xba\x40\xe7\x16"
+ "\xd8\x76\xbb\xe2\x88\x3f\x89\x71\xb3\x3f\x55\x91\xac\xd7\xb9\x67"
+ "\x27\x33\x1e\x92\x67\x8c\x6e\xa9\x57\x76\x6d\x78\x2f\x97\x31\x75"
+ "\x3f\x74\x97\x0a\x3d\xa7\x4b\xc6\x8c\x29\x89\xf4\x71\xd3\x4d\x9b"
+ "\x21\x87\x4b\xff\x6f\xae\x4a\x5e\x4a\x69\xc5\x3e\xc4\x06\x18\xe0"
+ "\xfb\x7c\x6d\x94\x7e\x33\xa5\x4b\x1f\xa7\xc5\x83\x96\xd5\x88\x8d"
+ "\xb2\x6f\x10\x67\xbd\x33\x28\x5d\xc6\x77\x2b\x1e\x6a\x5b\x1d\xf0"
+ "\xc1\xa7\xcc\x2c\xbe\x6f\xa8\x8d\xda\xa4\xf1\x7f\xc5\x23\xc7\xef"
+ "\xab\x17\x38\x27\xe8\xa6\xcb\xc7\x7f\x7a\x6d\x85\xb0\xe5\xff\xa9"
+ "\xaf\x5e\xe1\x19\x11\x78\xa7\x7d\x6b\x12\xe1\xc4\x29\x5e\x90\xc0"
+ "\x54\xfb\xff\x88\x2e\xd6\xba\x0b\x3a\x65\xc2\xb5\x06\xc0\x95\x78"
+ "\x31\x83\xaa\xf3\xa1\x7d\xb7\x95\xe8\xff\x02\x26\xe9\x4f\x6b\x92"
+ "\xd6\x16\xad\x7d\x0f\xed\xed\x0c\xfb\x3b\xc1\xa2\x9d\xfe\xdc\x52"
+ "\x7f\xe5\x23\x39\x72\x56\x50\x7f\x25\x79\xc8\x56\xbb\xb6\xf6\xd0"
+ "\xb6\x84\x87\x09\x71\xdd\xe0\xf3\x56\xa7\xb6\xc5\xa0\x4b\xd1\xea"
+ "\xe4\x54\x27\xef\xef\xad\xa5\xbd\xd8\x48\x34\xc8\x13\xbd\x8b\xf6"
+ "\x5c\xb4\x01\x19\xc0\x3b\x8b\xd3\x9e\x1c\x48\x09\x18\xa4\x8f\x98"
+ "\x1d\x2c\x2a\x9c\xff\xa7\xf6\xba\x43\x3c\x2b\xd5\xd1\x4f\xb4\x3e"
+ "\x9f\x15\x76\xb2\x4f\x04\x0f\x89\xb3\x62\xe0\xc8\x20\xcd\x39\xcd"
+ "\x7b\x15\xb5\x53\x47\x72\x4b\x54\x17\xfb\x64\x2e\xe6\x1e\x36\x51"
+ "\x35\x83\x42\x96\x31\x53\xdf\x0c\x1d\xec\x93\xc9\x98\x77\xd4\xc5"
+ "\x8b\xaf\x65\xf8\x07\x92\xff\x2f\x7c\x34\x02\xd6\x79\xb9\xbc\xdb"
+ "\xfa\x18\xe0\xfd\xe9\x73\xe0\xf1\x49\xee\x11\xcf\x05\x69\x5c\x11"
+ "\x78\x23\xee\x04\x7c\xfa\x5c\x5e\x37\x57\xae\x39\x18\x6f\xa4\xbd"
+ "\xe6\x9a\x9e\xf9\x7d\x24\xa3\x53\xbf\xf5\x05\x17\xe0\x47\xb2\x96"
+ "\xe8\x56\x31\x6c\xb1\x8c\x65\x3b\x59\x0c\x7c\x70\x16\x64\x72\x5f"
+ "\x8b\xb7\x9a\xb5\x64\x56\xb3\x3f\xfa\x2b\x99\x33\x07\x3a\xdf\x3f"
+ "\x2d\xfa\xd8\x5e\x89\x3b\x58\x13\xa9\x8d\x80\xf5\x61\xb4\xf5\xc9"
+ "\xa9\x8f\x4f\x7d\xca\x3e\x76\x7e\xca\xac\xeb\xc4\x7b\x67\x53\xf2"
+ "\x1f\x59\x53\xd2\x1f\x59\x41\x27\x57\xc0\x2f\xe6\x3f\x81\x36\x8a"
+ "\xa9\xae\x5a\xf8\xab\x8c\x51\xfa\x2c\x93\x68\xfc\x86\xd5\x76\xd0"
+ "\x64\x0f\x73\x6e\xf9\x1d\xfa\x98\x5e\x73\x85\x19\x9d\x5b\xde\x17"
+ "\xcf\x42\xff\x42\xe3\x75\xa5\xb5\x09\xdb\x62\xf8\xea\x74\xd9\xbb"
+ "\xe1\xcb\x40\x29\x47\x1f\x03\xb2\xdf\x04\x2f\x83\x56\xfe\x70\x7e"
+ "\xb0\xbc\x88\x95\x73\x08\xf0\xa0\x3e\x35\xaf\x95\x30\x69\x6a\x23"
+ "\x98\x3e\xac\xc2\x27\x39\x1c\x3e\x9f\xec\x01\x7c\x70\xd7\x42\xc9"
+ "\xe9\xad\xa5\xbe\x25\x11\x0c\x14\xad\x0d\xe0\x00\xce\x05\x51\x7f"
+ "\xd9\x15\x66\x72\x6e\xc1\x5d\x8c\x4f\xcf\x9b\xd7\x18\x8c\x4a\xff"
+ "\x85\xba\xf2\xab\xcc\x80\x79\x03\x1f\x52\x2e\xbe\x0b\x98\x37\x61"
+ "\xce\x3c\x51\xc6\x56\xfa\x3b\x45\x7f\x6d\xc0\x3d\xfa\x6d\xa7\xf9"
+ "\x2a\xa6\x3e\xa4\xd1\x5c\xd5\xe2\x57\x5d\x6f\x46\xf8\x30\xc6\x5e"
+ "\x4f\xb8\x12\x4a\xff\xe9\xe0\x04\x3f\xad\x1d\x45\xc8\xb1\x9f\xa6"
+ "\x29\xa5\xf1\x0b\xa5\x5d\x7e\x4b\xf2\x21\x92\x1b\xaa\x9f\x11\xbe"
+ "\x5f\x4c\x24\xeb\x08\x5b\x8e\x03\xe2\x8e\xe8\x9f\x32\xb4\x3d\xe1"
+ "\xa7\xf1\xf0\xab\xf2\x69\xa5\x5e\xd8\x08\x47\xfa\x25\xae\x47\x12"
+ "\x8e\xfe\xa9\xc4\xcd\xee\x3c\x2e\xd7\x44\xab\xb8\xcb\x0a\x9a\x32"
+ "\x16\xcf\x46\xfb\x60\x13\x6c\xb3\xf9\xcd\xc9\xcc\xa4\xe3\x1e\xd3"
+ "\x06\x33\x77\xf9\x1b\x80\x43\x26\x81\xfb\xf2\x1b\xf1\xd9\x1e\x33"
+ "\xed\x93\xad\x94\x6e\xd0\xd2\xb1\x1f\x2b\x24\x7b\x43\xee\x5f\xbd"
+ "\xc3\xcc\xf3\xaf\xb2\x19\x42\x87\xa6\xa5\xef\xf0\x98\x5b\x2c\x0c"
+ "\xf7\xdb\xfc\xf0\x1d\x85\x32\x94\x1e\x41\xfb\xee\x09\x6a\xd7\x49"
+ "\xf9\xe3\xb4\xfc\xbc\x2f\xd9\xe0\xb2\x37\x88\x75\x06\xff\x82\x62"
+ "\xbf\x95\xe9\xe3\x56\xdb\x3d\x66\x31\x67\x5a\x5a\x76\xb2\xd8\xe7"
+ "\xe1\x5f\x86\xf8\x78\x2e\xfa\xd3\x25\xd2\x75\x24\x87\x0b\x1b\x93"
+ "\xb0\x34\x3d\x7c\xf9\xc0\x5f\x6c\x58\x5a\x04\xf5\x99\x05\xdf\xa9"
+ "\x6d\xec\xf9\x58\x77\xab\x77\xe0\x3c\x51\xee\xf5\xa2\xed\x1d\x9c"
+ "\x49\x1f\xd4\x32\x4d\xf2\x14\xa7\x3c\xe1\x3a\x00\x9c\xe1\xa0\x6d"
+ "\xa5\x2f\x59\x1f\xe8\x4b\x8e\x40\xfb\xa8\x0b\xfa\x5b\x1a\x23\xb5"
+ "\x0b\xfb\x8b\x36\xc6\x4b\xd7\x59\x39\xee\x33\x52\xbd\xa2\x3f\x76"
+ "\x1f\xd1\x9e\x75\xb5\xa3\xdb\xad\x2d\x6b\x73\xe6\xaf\x23\x9c\xfe"
+ "\xb3\x0f\x34\x25\x60\x8a\xb2\x58\x7f\x84\x3d\xff\xcf\x3f\xc6\x9c"
+ "\x06\x68\x9d\x07\xa2\xa2\x2c\x77\x75\x33\x5d\x3e\xad\x1d\x79\xce"
+ "\xf9\xe7\xa7\xc1\x73\x16\x28\x9c\xd3\xf3\x1e\xe0\xae\xb9\x17\xf6"
+ "\x66\x51\x33\x84\x8d\x57\xf4\xd2\x56\x97\xaf\x9b\x35\x15\x7e\xc6"
+ "\x9a\xfc\xae\xc2\x13\x57\x3c\x06\x69\xeb\x65\x40\xbd\x2f\xe3\x5b"
+ "\x01\xad\x97\x94\x40\xed\xd8\x72\x32\xc9\x5e\x04\xbb\x7f\xca\xbd"
+ "\xe0\xcf\x3e\x4d\xde\xba\xfe\x18\xfe\xb2\x06\x3e\x7f\x61\x07\xad"
+ "\x94\xcd\x84\xbe\xbc\x80\x0f\x24\xb0\xbb\x84\xad\xd1\x5f\x12\xa2"
+ "\xbd\x2c\x49\xad\xf7\x92\xac\x97\xf2\x5f\xa7\x5e\xe0\x6d\x53\x95"
+ "\xd0\xa9\xd3\x98\x66\x3a\x03\x54\x77\x20\xfa\x16\xf0\x17\x05\xc4"
+ "\x0b\x11\x6f\xf3\xd7\xe7\xa8\x1d\x67\x8b\xbf\x95\xc1\x6f\x78\x8d"
+ "\x42\x7b\xff\x25\x0b\x53\xed\xda\x0a\x2e\xb2\xbf\xec\x52\x78\x42"
+ "\x0c\xc9\x81\xd0\x25\x17\x80\xce\x42\x37\x9f\x1f\x60\xe3\x5d\x36"
+ "\x37\x83\xbf\x5b\xaa\x63\xdf\x07\xd0\xdb\x13\xad\x0a\x70\x8b\xfe"
+ "\xed\x7e\x37\x2b\x27\xfa\x2d\xfc\xdf\xee\xbe\xf9\x40\xf4\x2e\xb6"
+ "\x94\xeb\xcd\xc2\x2e\x52\x29\x5d\xdc\x46\x73\x9b\x20\xed\xe8\x4c"
+ "\xa6\x30\x1b\xba\x88\x8b\xec\xaf\xe3\x60\x43\xc7\x4d\x91\xb0\x0b"
+ "\xf2\x72\x9a\xb3\x01\xc7\x5f\x13\xdd\xec\xcf\xe2\xee\x4e\x09\x78"
+ "\x2c\x41\xe7\xff\x7a\xc8\x13\x35\xad\x16\x75\xc0\x0f\x9f\x92\xe3"
+ "\xaf\x2b\xbf\xcc\x54\xb9\xf6\xaf\x79\x2d\xbd\x03\x4e\x5e\x32\xad"
+ "\x16\xeb\x48\xad\xdb\x4c\x75\xaf\xe2\xa5\xd3\x6a\xdd\xec\xaf\xd5"
+ "\x72\x6e\xc4\x73\x06\xbe\xfb\x87\x70\xe7\xf5\x2f\x9d\xd5\x83\xe0"
+ "\xb1\xfe\x52\x41\x7c\xb3\xb3\xcf\x34\xad\xf6\xbb\x96\x42\xe2\x27"
+ "\xfe\x5a\xe7\xd6\xeb\xa4\xbe\x56\xf5\xe5\x3b\x52\xf7\x10\x9c\xc3"
+ "\x83\x96\x49\x2e\xaa\x84\x64\x80\xb8\x1e\xf6\xd9\xec\x41\x07\xd3"
+ "\x0f\xd1\xde\x3a\x48\x72\x14\x3f\x98\x6c\x2a\x9b\xce\x12\xe9\xdb"
+ "\xf4\x1e\xd6\x36\xce\xaf\x67\x71\xf4\x17\xe3\xb9\x39\x03\xf1\x45"
+ "\x92\xa0\x1f\x6e\xbe\x82\x33\xeb\x36\x41\xf7\xcb\x0f\xb0\x39\x0a"
+ "\xd5\x07\xbd\x74\xf9\x74\x36\x07\x3a\x69\x4a\x4b\x48\x09\xc8\x33"
+ "\x1b\x4d\xe6\xdc\x3d\x9d\xcd\x1b\xde\xee\x5f\x7b\x25\xcf\xf8\x99"
+ "\x15\xbf\xdb\x3d\xec\x96\xcc\x25\xbc\x83\xea\x45\x0c\x52\xce\x6f"
+ "\xb6\xe8\x25\x6f\xd9\xf6\x91\xb9\x4a\xe2\x9d\x38\xa3\x20\x7c\xc3"
+ "\x19\x90\xaa\xfb\xd6\x09\x1f\xc6\xd1\x93\x8f\xe2\xce\xa1\x48\xd3"
+ "\xc5\x00\x96\x31\xa2\x1f\xaa\xdf\xd1\xc0\xee\x3b\x36\xa0\x0e\xf4"
+ "\x27\x25\x55\xea\xcd\xe1\x93\xd4\xcd\xda\x84\x9e\xa7\xe4\x00\x33"
+ "\x3d\x75\x80\xc5\x34\x3f\x26\xc6\xe5\x93\x6b\xd1\xc0\xd0\x5f\xa5"
+ "\x04\xeb\x8c\x70\x82\xfa\x8d\xf6\x80\x1b\x2d\xfe\x4b\xce\x02\x1b"
+ "\x57\x9c\x3f\x82\xdf\x9d\xbf\x7d\xd3\x99\x75\x8c\xad\xee\xf4\x4b"
+ "\x3f\x7a\xeb\x99\xe7\x30\xd5\x77\x78\x3a\x8b\xe9\x62\x7f\xbb\xdf"
+ "\xb5\x19\xb4\xd6\x72\xab\x33\xeb\x38\xd5\xfd\xb7\xef\x61\x3f\x2a"
+ "\x25\xf8\xc8\x7d\xe9\x33\x93\xcb\xd7\xc6\x10\xc3\xe5\xc1\x4c\x1e"
+ "\x40\x3d\x94\xe7\x69\x31\xde\x83\x16\x6b\x8a\xf4\x1b\x2b\xc6\x1a"
+ "\x3c\x8f\x50\xc7\xe1\xba\x22\xea\x3b\xe2\xda\x40\xfc\xab\x3a\x26"
+ "\x0d\xd6\x12\xbf\xfe\x76\xc6\x99\x75\x84\x61\x7e\x90\x9f\xde\x5b"
+ "\x5d\x04\xf1\x94\x0b\xc3\xe7\x05\x79\xba\xd8\x67\xa8\xf7\xff\x84"
+ "\xce\xd9\x70\xfe\x13\xca\x53\x7d\x00\xb6\x80\x6d\xcb\x0f\x12\x8c"
+ "\xa4\xfe\xf1\x6f\x4f\xa0\xaf\x6e\xf6\xb7\xcd\x2e\xdb\x67\xa3\xdf"
+ "\xf5\xa5\xb5\x4f\x78\xbf\xab\x45\xe8\xde\x3e\xfb\xc1\x83\x7e\x85"
+ "\x4b\x7a\xf6\xf7\x18\xe2\xdd\x68\x7f\xfd\x7b\x0c\x68\x81\xa0\x27"
+ "\x77\xe2\x6c\xfc\xef\x93\xcd\x3a\x39\xbf\x18\x0b\x78\xa6\xd1\xe6"
+ "\x38\xec\xdc\x23\x06\x7d\xd5\xe6\x98\x9b\x96\xb5\x29\x38\xcf\x82"
+ "\xcd\xfa\x90\x85\x49\xfc\xe3\x15\x54\xaf\x4a\xe3\x4c\x6b\x54\xde"
+ "\x71\x4d\x5f\x54\xd4\x1c\xfe\xa4\x25\x68\x5f\x4b\xeb\xd7\x9a\x22"
+ "\x6d\xa2\x2d\xa0\x51\x87\xf5\x72\xed\xa0\x8f\x6a\xd9\x95\xf2\x9c"
+ "\xfd\xb3\x56\x2a\x3f\xaa\xfe\x85\x47\x10\xdd\x71\x10\x99\xa6\xf1"
+ "\x88\x3b\x78\x44\xab\x68\x3f\x18\xef\xf2\x0e\x32\x79\xf6\xff\x77"
+ "\xf8\x16\x18\x8f\xfb\xd7\x5a\xdf\x6e\xec\x8c\xe2\xef\xc9\xf2\x8c"
+ "\xe2\xef\x55\x9a\x3c\xce\x4d\x04\x63\x87\x59\xc4\xf3\x20\xbe\x4b"
+ "\xf1\x46\x2d\x73\x7b\xa2\x1e\x8e\x91\xeb\xe6\xef\x4e\x1e\x25\xe9"
+ "\x6d\x8a\x8f\x15\x62\x5c\xaa\x8e\x63\x3c\xc6\x4c\xf5\xb8\xb5\xb3"
+ "\x72\xad\xee\x31\x63\xe4\x68\x63\xa3\x31\x49\xbf\x1d\xcb\xda\xc4"
+ "\xd8\xe0\x7b\x4a\x8c\xad\xfd\x07\x28\x7f\x63\xe3\x69\x97\x31\x12"
+ "\x4b\x96\xb9\x9d\xd3\x51\xc7\xe9\xab\xe8\x1f\xe6\x84\xe8\xc3\xd4"
+ "\x1e\xd6\x5e\xc7\x27\x3d\x35\xe9\x06\xeb\x94\x77\xad\x4b\x1e\x8e"
+ "\x79\x8e\x68\xb0\xbc\x8b\x0b\xfb\x9f\xd3\xa7\x79\xe9\xc3\x31\x90"
+ "\x61\xfa\xa8\x3d\xc2\x8f\x30\x3a\x74\x7a\x03\xe6\xea\xce\x63\x2c"
+ "\x49\xe2\xe1\xe9\x87\x20\x3b\xcb\x18\x66\xa7\x49\xfe\xfd\x6b\xa3"
+ "\x3c\xd7\xd2\x6c\xb1\x75\xc2\x16\x3b\x9c\xc6\xde\x58\x1f\x4f\x0b"
+ "\x7a\xc7\xa3\x17\x13\xfd\x69\xf7\x0a\x1b\x27\xea\xef\x76\xbf\x46"
+ "\xff\xda\xbd\x1c\xba\xf3\x7c\x55\x87\x0a\x5a\x96\x2f\x7d\x60\x52"
+ "\x7f\x2a\x83\x3a\x54\xf8\x2a\x70\xf0\x46\xe4\xa3\xb9\xbf\x84\x3c"
+ "\xd2\xb7\x5e\x8f\x7a\x8f\xff\xf4\x2b\xea\x1d\xfd\x04\xd8\x7d\x51"
+ "\xd9\x56\xb7\x4e\x2f\xec\x84\x01\x03\xb4\x2d\xfa\xae\x87\xbe\xf4"
+ "\x74\x6f\x48\x67\xdd\x2e\x64\x47\xe9\x67\xe3\x1f\x06\x0d\x47\x68"
+ "\xbc\xe3\x65\xdc\x9a\xf6\x27\x4e\xce\x63\x02\x07\xfa\xb8\x65\xd2"
+ "\x57\xaa\x81\x93\xff\x98\x17\x0e\xa7\xd5\x7e\xa5\x40\xd2\xa0\xd3"
+ "\x71\x5c\xac\xf5\xd3\x71\x5f\xcc\x4f\xfc\x63\x97\xc6\x8b\x48\x38"
+ "\xc7\x10\x7d\x39\xb3\x52\xc0\xba\xf8\xda\x51\xf8\x95\x7e\x32\x1f"
+ "\x7e\xf2\xff\x79\x1f\xe2\x11\xf8\x8b\xaf\x35\x06\x0a\x2c\xf0\xbf"
+ "\xcc\x94\xe2\x6b\x6d\x5d\x99\x4c\x9f\x92\x09\x3d\xfd\xb4\x4c\xc8"
+ "\x78\x24\xb3\xc6\xf0\x68\xe2\x4f\x68\x9d\xe7\x6d\x62\xe6\x1f\x64"
+ "\x40\x5f\x91\x10\x87\x78\x01\x88\x15\x80\x58\x1f\x81\x82\x84\x58"
+ "\x7a\x8e\x27\x7e\x2e\x86\x1b\xaf\xd5\xe3\xac\x3f\xe0\xe0\x44\x8f"
+ "\xdb\x61\xcb\xac\x77\x79\x7c\x2c\xef\x02\x33\x22\x1e\x81\xbf\x74"
+ "\x5a\x71\x8b\xf7\xb4\x90\x6f\xa2\x33\x59\x1c\xf1\x1f\xb8\xdb\x62"
+ "\x51\xa2\xa6\x65\xd2\x1e\x6f\x93\xe3\xbe\xc4\xe5\xb8\x65\xbf\xd1"
+ "\x7f\x41\xe3\x48\x0e\xcf\x17\x7d\x77\x9f\xf5\x53\xfd\x4a\x09\x3b"
+ "\x15\x28\x61\xad\xd2\x57\x44\x13\xcb\xb7\xf1\x6e\x97\xb7\x89\x64"
+ "\xae\xab\x22\x36\x23\x6c\x09\x30\x46\x8c\x0f\x6d\x7f\x7c\xe5\x82"
+ "\x88\xaf\xe0\xa7\xf7\x82\xcd\x6a\x99\x5e\x2a\xd3\xdb\xc4\x06\x4b"
+ "\x98\x18\x7b\x8b\x57\x96\x4d\x11\xcf\x28\x1f\x06\x07\x75\xcc\x41"
+ "\x38\xd0\xd8\x31\x3e\x8c\xdf\x0f\x98\x10\x0c\xd4\xb1\x5a\x86\xd4"
+ "\x71\x62\x8c\x7f\x24\xaa\x70\x80\xc6\x49\x63\x15\xe3\x1c\xa2\x71"
+ "\x36\x66\x30\xe6\x2b\x5b\xe6\xb9\x16\xcd\x5a\x21\xa3\x16\x7c\x42"
+ "\x3c\x7c\x6e\x05\x23\x59\xd4\xf0\x5a\x7e\x85\xfe\xa7\xc4\x9b\xe4"
+ "\x7b\x48\x26\xf5\xf0\xee\x16\x1a\x93\x2b\x93\xfe\xfc\xd5\x0c\x3c"
+ "\x8e\xc6\xaf\xc3\x4e\xfc\x63\xe5\x2c\xcb\xef\xe6\xdd\xc4\x9b\xfa"
+ "\x60\xc7\xec\xca\xa0\xf1\x93\x0c\xdb\xa5\xf6\x1f\x79\xf3\x2e\xcb"
+ "\x71\x99\x37\xb3\xb8\x77\xd7\x15\xeb\x5d\x6d\xc5\x4c\x1b\xcb\x23"
+ "\x94\x8f\xc6\x63\xa1\xba\xa2\x30\x1e\x85\xc6\x79\x90\xfa\xe9\x0b"
+ "\x1b\x53\x73\xaf\x8f\xea\xfc\x33\x9b\xb4\x86\xe9\x0e\x5c\xa4\x71"
+ "\x5c\x64\x96\x8a\x7c\xe2\xbf\xbe\x03\x7e\xd1\x3d\x33\x32\x99\xcd"
+ "\x71\xb3\x7f\xce\x91\x32\x9d\xf0\x75\x3e\xa5\x87\x9d\xb9\x3f\xe8"
+ "\xcf\x1c\x31\x22\xa2\xa6\x95\x00\x8f\x84\x5f\x73\xec\x19\x03\x84"
+ "\x33\x38\xf3\xdf\x4e\x6d\x0c\x24\xc4\x8b\xfe\x38\x16\xc0\xae\xd9"
+ "\x44\xef\x88\x8d\x86\x7b\xd8\x3a\x2a\x57\xcc\x09\x66\xa8\x9f\xf8"
+ "\x39\x1b\x7e\x01\xc3\x51\xed\x77\x5f\x67\x0b\x79\x34\xf1\x98\x24"
+ "\x7f\xd7\xe5\x7b\xf4\x7b\x5f\x67\xf3\x6e\x8c\xa6\x9c\xb1\x8d\x45"
+ "\xbf\xa1\xeb\x45\x7d\x34\xb6\x58\xda\xb9\xbf\x37\x7c\x8d\x59\x05"
+ "\x2d\x93\x74\xb0\xc3\x0a\x5d\xea\x0d\xb6\x2b\x78\x38\xd8\x6b\xdc"
+ "\x58\xb9\x8e\x39\x5a\x3f\xa8\x0e\xf7\x58\x7d\xbf\x71\x38\x74\xe4"
+ "\x8e\x55\x57\xe9\x7e\x61\x6f\x59\x50\xb6\x9f\xe8\x05\xf1\x0a\x27"
+ "\x2d\x38\x97\xa1\xbd\xf3\x88\x97\x65\x1f\x62\x88\xe7\x17\xe5\xf2"
+ "\xaf\x62\x27\xab\x13\x59\xcd\x15\xf8\x42\x4c\x88\x7d\xf6\x0a\xcd"
+ "\xa5\x4a\x43\xc0\x93\x42\x27\xcd\xb3\x13\x62\xca\xf7\x6b\x3c\xfc"
+ "\xbf\xee\xcf\xbd\xca\xf4\xd6\x2d\xe2\x79\xf9\x72\x2b\xf7\x57\xea"
+ "\x95\x8c\x6a\xf8\xe9\x8f\x5e\x62\x85\x9f\x7e\xcd\xf7\xbd\xe0\x7d"
+ "\xec\xb4\xe6\xfa\x2c\x93\x4a\xb3\xd8\x3c\xc4\xeb\x30\x7b\x24\x2f"
+ "\x27\xf7\xeb\x7f\xd9\xa8\x7f\x31\xaa\x3f\xfc\x18\xe9\x0f\xff\xcc"
+ "\x09\xd8\xc8\xab\xdf\x5f\x0e\x90\x0c\x23\xea\xcd\x62\x73\xaa\xaf"
+ "\xb0\x04\xf0\x41\x29\x67\x25\xcf\x06\xb9\x70\x55\xaf\x99\x07\xfe"
+ "\x9d\xc0\x0e\xf5\x84\xe2\x79\x78\xb2\x11\x03\x84\x5b\xc6\xb2\xc5"
+ "\x2e\x8f\x17\xb6\x09\xc2\x97\x34\xce\x2c\xe8\x9d\x55\x3e\xc3\x0c"
+ "\x27\x61\xe7\x58\x2b\xef\x97\x9e\xf4\x4b\xdb\xe1\x01\x47\x67\x9c"
+ "\x16\xe7\x60\xcc\xb3\xf7\x12\x29\xef\x28\xe3\x49\xfe\xf2\x0c\x38"
+ "\xa5\x6f\xdd\xce\xf5\xae\x3d\x4a\x98\x8c\xd3\xb9\x18\xdf\x90\x06"
+ "\x7f\x85\x49\x02\x96\x9d\x7b\x20\xf7\xa8\x32\xe3\xbb\xd6\x60\x9a"
+ "\xe4\x61\x84\xfd\xb6\x45\x9e\x25\xd2\xde\x14\x4d\x7d\xa9\xd5\xf6"
+ "\x33\xec\xeb\xd2\x87\x71\xe7\x71\xb7\xde\xb0\xe0\x3a\xfd\x8b\x51"
+ "\xed\xcd\x71\x0e\x94\x44\xf9\x3b\xb5\xfd\x4d\x9c\x07\xef\x9e\xfe"
+ "\xad\xec\x1d\x6c\xc6\x77\xa7\x19\x19\xce\x12\x29\x6f\xb7\xdc\x77"
+ "\xcf\x9a\x42\xe7\x0d\x49\x02\xde\xf0\xbd\x21\x64\x0c\xf8\xb4\x95"
+ "\x31\x3b\x7a\x35\xdf\xb6\x72\xff\x3d\x7b\x7b\xa8\x9d\xb3\x2b\x83"
+ "\xfb\x28\xb5\x01\x7b\x76\xd4\x2f\x79\x93\xb3\xd2\xdf\x24\xe5\x93"
+ "\xfb\xeb\x59\x76\x1d\x5e\x2c\x01\xf0\x55\x54\x79\xd2\xd5\x7b\x4e"
+ "\xc2\xd7\xce\x22\x70\xa7\xe3\xdd\x7c\xb7\x21\x5a\xfa\xa0\x37\x53"
+ "\xfb\x87\xf0\x1d\xb8\xee\xbc\x13\xfa\xc0\xb3\xd7\xa0\x5d\xe6\x43"
+ "\xc9\xa6\x07\x21\xeb\x0b\x5e\xfc\x6c\xf7\x7c\x2a\x47\x69\xb1\xef"
+ "\x5c\xf4\x19\xca\x77\xb2\x79\xd2\x47\xf0\x59\x61\xdf\x09\x5f\x0c"
+ "\x5f\x89\x63\x96\xaf\x54\xb2\x84\x01\x47\x57\x8c\x5b\xaf\xcf\x14"
+ "\x7a\x52\xb4\x5f\xb6\x2e\x09\xf7\x52\xde\x18\x74\x8f\x93\x73\xd5"
+ "\xf5\x1a\xee\xa0\x84\xbd\x3f\xa0\x9e\x35\xb5\xba\x59\xd7\xb1\xc3"
+ "\x17\xa5\x5d\xbe\xd0\x2f\x95\x2c\x71\x86\x6c\x19\xba\x5e\x93\x7d"
+ "\xe9\x7a\xed\x64\xa6\xb8\xc3\x73\xaa\x46\xc4\x1e\xe8\x22\xfe\xa8"
+ "\xd3\xa9\xea\x63\x5a\x05\x5e\x81\xdf\x2d\x82\x0c\x76\xce\x59\x4a"
+ "\xf9\xb0\x4f\x10\x7f\x94\x24\x79\xf8\x25\x6d\x0a\xe1\x4f\x68\xfc"
+ "\x5d\xd3\xa0\x6f\x1c\x95\x26\x1e\x60\x4c\x94\x29\x5d\x12\x23\x6c"
+ "\x63\x4a\xd7\x55\xd1\xaf\x91\x97\x2e\x75\xd2\xaf\x89\xd2\x5b\xe9"
+ "\x37\x86\x7e\x1b\xe9\x97\x78\x98\x75\x85\xc0\x4b\x92\x61\x2d\x88"
+ "\xc1\xda\x17\xb5\xc4\x38\xd6\x7d\x3f\xc0\xc6\xb5\xe7\x61\x26\xed"
+ "\xff\xce\x55\x20\xfe\xe6\xea\x43\x8c\x65\xfb\xf9\xa0\xf5\x16\xc4"
+ "\xd0\x39\x57\x51\x70\x08\xe7\xf2\xe7\xd2\x86\x9f\xcb\x9f\xdb\x43"
+ "\x7f\x0d\x8c\x75\x13\x96\x77\xaf\xa0\xe7\x8a\xd0\x5f\xf7\x9e\x01"
+ "\xc7\xb9\x0a\x82\xa3\xe0\xb1\x6e\x8c\x26\x9e\x13\x3a\x9f\x72\xc8"
+ "\x45\x51\x33\xeb\xe4\x78\x1f\xf2\xd0\xbb\x91\x47\xad\x4b\x54\xc7"
+ "\xeb\xa6\xf7\x18\x6b\x01\xed\x6b\x51\x04\x93\xe9\x34\xe6\xa8\x75"
+ "\x55\x18\x2f\xfa\xdb\x17\xb5\xd4\x19\x7e\xd7\x11\x75\x62\xfc\x9e"
+ "\x28\x2a\x47\xb0\xe4\xb7\xfd\x76\x8d\x06\x4f\x15\x4e\xb8\xdf\xa3"
+ "\xef\xa3\x3a\x24\x1f\x74\x0e\x77\x57\x9d\x5a\xfe\x20\xec\xa7\x33"
+ "\x71\xee\x8f\xb6\x48\x26\x36\x6a\xf7\x28\x07\x1c\xdd\xb9\xef\x6d"
+ "\x96\x67\x23\x28\xeb\x0d\x2b\x0b\x5f\x21\xa3\x95\xa7\x36\x8d\xb2"
+ "\xcd\xa5\xce\x2e\x76\xee\x69\xd9\x6e\x77\xe6\x58\x6b\x29\x7f\x36"
+ "\xf1\x77\xd5\x6e\xdc\xe5\x02\x3f\xb4\xc8\x35\xc3\xcb\x5c\xd5\x0a"
+ "\xed\xf9\x4b\x3c\x49\xf9\x9c\xea\x38\xff\xf5\x16\x5f\xf7\x0d\xee"
+ "\x87\xdd\xc2\x9e\x97\x0f\x16\x32\x57\xee\xdd\xe2\x6c\xec\x22\xeb"
+ "\x49\x75\x79\x84\x2f\x05\x3c\x0b\x7b\x48\x9c\xc7\x63\x6f\x20\x19"
+ "\x3b\x18\x07\x46\xa1\xbc\x35\x48\xa7\x34\xdc\xe1\x3a\x1c\xf6\x8d"
+ "\x97\x2d\x6e\x94\x6b\xaa\x67\x1a\x78\x0b\xd1\x5f\xff\xff\x75\xa2"
+ "\xcf\x4a\xc9\xe2\x46\x8c\xa1\x80\xe4\x3f\xc4\xbe\xc5\x9a\xb0\xe6"
+ "\x40\x57\x78\xfe\x2a\xe1\x1d\x57\x4a\x17\x37\xde\xd8\x18\xce\x3b"
+ "\xd1\x66\x81\x9f\x5f\xf4\x44\x2d\x6e\x04\x4f\x52\x9e\x3f\xce\xb8"
+ "\xac\x9a\x3b\xfb\xa2\x97\x10\x2d\xec\xb1\xbc\x67\x97\x73\x73\x63"
+ "\xf5\xf6\x58\xb4\xb1\xd7\xa8\x63\xa7\xb6\x84\x3f\x84\xbb\xaa\x64"
+ "\x7c\x1c\xca\xb3\x66\x4c\x9d\x15\xcd\x33\xf8\x01\xda\x1b\xae\xa9"
+ "\xb0\xa8\x0d\xee\x0d\x37\xd6\x8f\xda\x2f\xd1\xc6\x90\x6c\xe3\xdf"
+ "\x86\xff\x5e\x1b\xff\x36\x5c\xaf\x0d\x79\x16\xff\xef\x8a\x1b\x97"
+ "\x1d\xff\x2d\xfc\x5a\x12\xfd\x74\x4b\x9a\x79\x41\x17\x20\xf9\xcd"
+ "\x6f\x7a\x08\xfb\x47\x01\xec\x6e\x11\x2b\xc8\x5f\x32\xb3\xae\xd9"
+ "\x3e\xc8\x9c\x39\x9f\xb2\x4e\xf6\xef\x8f\x50\xa6\xd9\x06\x99\x6d"
+ "\x5d\xe2\x50\xd9\xd2\xa4\x21\x7d\x8f\x1b\xf0\x3e\x44\xf3\x70\x30"
+ "\x0c\xcf\x5a\xbc\x9f\x32\xd7\x06\xe8\x57\x5b\xa1\xd7\x4e\xe4\x51"
+ "\x0f\x79\x14\xa2\x0d\xc4\xa3\x07\x04\x3c\x88\x7f\x11\xf2\x16\xc9"
+ "\x6c\x42\xde\xf2\x08\x5f\xe0\x51\x22\x06\x90\xe3\xf5\x5e\xe8\xbe"
+ "\x03\x43\xc9\xd6\x01\x07\x5b\x83\xd8\x40\xd0\x3b\x73\x53\x64\xf7"
+ "\x6a\x7f\x04\x17\xf2\x14\xf1\xfe\x88\x0d\xe4\xf2\xba\x59\x80\xf8"
+ "\xe8\xea\x7e\x16\x57\x4d\xbc\x27\xd1\xec\x18\xd0\xf5\xc3\x6a\x7c"
+ "\xa0\xd2\xfe\x50\x7c\xa0\x1a\xe8\x7a\xda\xe8\xb9\x9f\x19\x02\xa5"
+ "\xcb\xda\x0e\xf6\xb3\x39\x87\x72\x58\xc2\x41\xe8\xf2\xce\x4b\xde"
+ "\x47\xd8\xc9\x23\x56\xd0\xd6\x04\x9c\x25\x84\x78\x1f\xf8\xfe\x08"
+ "\xd1\x2d\x31\x97\x37\x06\xef\x5e\xb1\x0f\xfa\x4b\x96\xc4\xf8\x4d"
+ "\xeb\xaa\x08\x76\x4e\x4a\x63\x04\xbf\xdc\xd1\xe6\x56\xb3\xb7\xa9"
+ "\x0c\x8b\xef\xf4\xde\x1c\x49\xdf\xdd\xec\xc2\xf2\xb1\x70\x22\x70"
+ "\x30\x99\xdd\xd5\xcb\x12\xa5\x0d\xc0\x44\xda\x13\x2f\x1c\x85\x7d"
+ "\x64\xfe\x13\xcc\x12\x38\xb8\x5e\x57\xf0\x22\x8b\x70\xf9\x93\x18"
+ "\xfe\xf2\x2f\xf3\xee\xbb\x36\xb3\x44\x9c\x3f\xe0\xac\xc4\xfa\xa4"
+ "\xc8\xbf\x63\x4e\x2e\x4b\x0c\xaf\x7b\x85\x34\x22\x11\x41\x15\x76"
+ "\xc0\x82\x64\xfb\x26\x5b\x86\x75\xe3\xb6\xac\xac\xf4\x2d\x36\xeb"
+ "\xaa\x65\x6b\x46\xdc\x75\x2b\xa3\x7d\xc1\xbc\xeb\xfe\xb5\x66\xff"
+ "\x0a\xab\x8c\xcf\x75\x29\x11\xf6\xba\xbc\x20\xb9\x4a\xf2\x9f\x97"
+ "\xbe\x2e\x79\xf6\x58\xa7\xbc\x6b\x77\x29\x51\xbe\xdf\xb4\x99\xf0"
+ "\xf9\x96\x1e\x76\x51\xec\xf7\xca\x41\xcb\x11\xc2\x4d\x5d\x17\xbb"
+ "\x78\x06\x36\x0e\x12\x4f\x2f\xbe\x07\xbf\x11\xd2\x16\xe2\xc2\x71"
+ "\x69\x0b\x71\x31\xe8\xff\x45\xda\x7e\x2d\x71\xc3\xee\x01\xe7\xdb"
+ "\x72\xed\x5d\x2c\xd4\xd6\x1e\xe5\x2d\x21\xfe\x29\xe6\xc6\x69\xce"
+ "\xc5\x12\xa9\x33\xbb\xd8\x44\xf0\x4f\x56\x6d\x1e\x67\x75\x50\xdf"
+ "\xd1\x17\xfa\xbe\x06\xfd\x09\xdd\x19\xba\x34\x6d\xb8\xbf\x1c\x75"
+ "\x8c\x07\x2d\x3f\x97\xfa\xf0\x4b\x5f\xc7\x78\xa8\x5c\x52\x58\xfa"
+ "\x0c\x1a\x7b\x92\x9a\xee\x41\xf9\x51\xe7\xe1\x81\x2d\x1b\xb7\x3e"
+ "\x91\x99\x6a\xdb\xf4\xe8\xa6\xcd\x9b\x6c\x3b\x84\x3b\x88\x79\xe2"
+ "\xbf\xff\x98\x9b\xb6\x76\x64\x6c\x83\x04\xe8\x45\x54\x9f\xe8\x5e"
+ "\xd8\x34\x48\xdd\xd4\xa5\x0f\xfc\x0e\xb6\xf4\xc6\x60\x70\x49\xd0"
+ "\x99\x6a\xe1\x23\xe6\xd2\x29\xb7\x3e\x62\xb9\x7a\x46\xd1\x2b\xed"
+ "\x3f\xe5\xf7\x3e\xd3\xba\x42\xeb\x74\xb6\xa8\x83\xf5\x15\xe3\x6c"
+ "\x8a\xe6\xa4\x15\x7b\x58\xe9\x4e\xec\x35\xad\xac\xd9\x4f\xfb\x99"
+ "\x38\xaf\xf6\xbc\x85\x98\x67\xe0\xe3\x08\x46\x47\x3a\x98\x47\xcc"
+ "\x3b\xbf\x64\x39\x22\xfc\xbe\x5c\xb2\xfc\x1c\x78\x83\x3e\x2b\x3c"
+ "\xf9\x20\xe7\xc9\x07\x94\x4b\x19\x07\xf9\xa5\x8c\x03\x21\xbf\xaa"
+ "\x9e\xe3\x54\xf6\x58\x87\x5a\x57\xd9\x45\x76\x0c\xb4\x0a\xef\x66"
+ "\x5b\x0c\xc9\x67\x4b\x1a\xd1\x1f\x97\x27\x91\x49\x5f\x10\x9e\xe3"
+ "\x2e\xef\xdd\x8c\xf8\xbf\x56\x71\xdf\x53\x9c\xb1\x11\x8f\x46\xe5"
+ "\x5c\xd4\x2f\x97\x67\x10\xfc\x40\xa3\x42\x7c\x1a\x8d\xb7\x93\x68"
+ "\x96\x88\xcb\x86\x31\x1f\x22\x3e\x1d\x76\x17\x03\x0e\x0f\xf1\xa1"
+ "\x17\xda\xc2\x6d\x6f\x00\x83\x52\xfa\x0e\xdb\x0b\x39\xff\x9e\xab"
+ "\x98\x3f\x82\xf1\xff\x09\xe1\xc0\xe5\x89\x18\xdf\xca\x4e\xfe\x4f"
+ "\x5e\x7c\xcd\x27\xe7\xfb\xf2\x4c\x35\xed\x52\xc8\x17\xc5\xe5\xaf"
+ "\xd3\xfb\x10\xfd\x29\xbc\x78\xc8\x12\x76\x3e\x8c\x6f\x42\xee\x86"
+ "\x1d\x49\xe6\x4e\xac\x95\xcb\xe9\xf2\xbc\x78\x68\xaa\xa7\x20\x23"
+ "\x82\xca\x04\x70\x5f\x55\xc2\xf7\xf2\x5e\xd7\x9e\x8b\x9a\xbd\x05"
+ "\xf5\xe9\xca\x5c\xe7\x63\x7e\xd8\xa0\xc5\xb9\x3a\xfd\xc2\xbe\x51"
+ "\xf5\x3f\xa2\x53\x1c\x97\x16\xc1\x2e\x9e\x64\x34\xd3\xa1\x58\x19"
+ "\x57\x64\xc0\x71\x39\xe4\xff\xd9\x24\xf9\x36\xac\x2d\xc4\x8d\x14"
+ "\xb6\x23\xc4\x1f\xa1\x4f\x58\x5b\xd4\x56\x27\xce\x9a\xe5\x1a\xbb"
+ "\xec\xf9\xef\xad\xb1\xcb\x1e\x8c\x85\xea\xda\xc3\xf5\x05\xfc\xae"
+ "\x12\xb6\x41\xd8\x02\xf8\xbd\xb8\x67\x6c\x20\xfa\xdf\x2e\xe9\x47"
+ "\x5f\xaa\xb0\x17\xc9\xe9\xad\xc5\x5d\xde\xc3\x83\xcc\xa4\x94\x44"
+ "\xba\xc1\x2f\x37\xe7\x0a\x1b\x0a\x23\x95\xab\x83\x8d\x05\x6c\x06"
+ "\xa3\x45\x5c\xd2\x4f\xd9\xe1\xab\xcc\xd0\xc9\xae\x64\xe2\x4c\x27"
+ "\x04\xeb\x2b\x1f\xe0\x0c\x8f\xff\xd4\x57\x61\xce\xd5\x17\xa3\x0e"
+ "\xa5\xff\xc2\x42\xad\x1c\xf1\x88\x13\x50\xae\x83\x5d\x79\x45\x94"
+ "\x43\x5e\xe1\xa7\x26\x66\x3d\xed\x9d\x31\xc8\xef\xa7\xf7\x1a\x25"
+ "\x66\x0d\x27\xba\x1e\xc8\xf1\xd7\xd1\xb7\xb5\x4a\xc9\x52\x27\xa5"
+ "\x25\x8b\xb3\x84\x21\x0b\xce\x18\x09\xe7\xa6\xd5\xba\xdc\xe7\x9c"
+ "\xa2\x3f\xb8\x7b\x6c\xa3\x3d\x50\xc8\x17\x57\x02\x35\xe7\x99\x21"
+ "\xf3\x31\xcc\x67\x9f\xe4\xb1\x2f\xb2\xa3\xb2\x7f\x7d\x4f\xf7\x95"
+ "\xb1\xd6\x3e\xc2\x57\xaf\xde\xc8\x4e\x5a\x60\x33\xbf\xae\xf0\xa4"
+ "\x65\x90\xe6\xa7\x2f\xd9\xad\xf7\xa9\xbc\x6d\x5f\x70\x6d\x02\x47"
+ "\x23\x2c\x31\x05\xf4\xdd\xae\xd9\x28\x01\x2f\x4b\x44\xfc\x80\x2b"
+ "\x6b\x00\x37\x37\xf3\x18\x9b\x37\x87\xfc\x77\xf7\xc9\x7b\x7a\x31"
+ "\x54\x26\xe8\xff\x3e\xd0\xaf\x34\x51\x3f\xe0\xe7\xc8\x1e\xc8\x51"
+ "\xda\x71\x06\xfe\xe0\x55\x85\xe3\x0e\x03\xee\xa3\x40\x7e\x59\x6d"
+ "\xe7\x7d\x90\xc7\x70\xf7\x0b\xe7\xdf\xb8\x7f\x1f\x5a\x27\x7d\x3e"
+ "\xed\x1e\xbe\xb6\x36\x70\xbf\xab\xec\x47\x62\x9d\xc2\xa6\xd5\x24"
+ "\xce\x00\x22\x1e\x3f\xff\xa0\x97\xea\xbc\x28\xce\xae\xfa\x6a\xd4"
+ "\x7a\xe0\x8f\x6d\xc0\xe1\x5d\xa4\xd5\xa1\xc0\x1e\x38\x4b\xd8\xe3"
+ "\xb9\x65\x79\x69\xef\xf3\xa0\x57\x11\xf7\x72\x50\x5e\xda\xe1\x78"
+ "\x83\xfe\xdf\xe4\x5d\x19\x6f\xa1\x66\x33\x46\xcf\x25\xc1\xbb\x7e"
+ "\x04\xd3\xbe\x92\x25\x8d\x5e\xa2\x0f\xde\x92\x25\x46\xfa\x76\x94"
+ "\xd6\xf5\xe7\x7c\x7d\x0c\xd3\x49\x20\xbe\xe1\x36\xa6\x57\xa2\x4d"
+ "\x26\xf8\x5f\xc1\x1d\x56\x69\xc7\x7e\x75\xa2\xea\x8b\x25\xe2\x22"
+ "\xf3\x7e\x10\x3a\x0b\x0f\xa8\x7a\xdc\xab\x89\x52\x8e\xb8\x9a\x28"
+ "\xf4\xb8\x65\x4b\xea\x7e\xb6\xd3\xa7\xaf\xdb\xe9\xd6\x4b\xfb\xba"
+ "\xab\x73\x88\x93\x09\x8b\x81\xe1\xed\x44\x5d\xa3\xf3\x7d\xb1\x71"
+ "\xb2\xce\x7e\x11\x2b\x2e\x24\x97\xf7\x0b\x9e\x0e\xe7\xd6\x0a\x78"
+ "\xb8\xe8\x99\x4e\xd8\x29\xb9\x32\xaf\x40\x9f\x3b\x5e\xea\x08\x64"
+ "\x1e\xd5\x6e\xf3\xa6\x9e\xe1\xef\xb1\x78\x97\x30\xbb\x7a\x5c\x3b"
+ "\x1b\x2a\xd3\x2b\x88\x71\xc9\x0b\x6a\x89\x5e\x66\x7a\x85\x6f\x07"
+ "\x17\xf1\x84\xd4\x06\xcf\xcc\xc2\xdd\xc8\xab\xe7\x11\x37\x4b\xae"
+ "\xcd\x7e\x71\x7e\xa3\x38\x96\xf2\x02\xc8\x45\x9e\x5e\xe1\xff\x8d"
+ "\xf2\x4d\xa6\xba\xa7\x34\xe4\xf6\x12\xfe\x46\x9e\x42\xac\xe4\x4e"
+ "\xb5\x6d\x4f\x54\x6c\xdc\x57\x4c\x6c\xc3\x80\xa3\x3f\xc1\xcd\x3e"
+ "\xac\xbd\x71\xba\xd1\x9f\x70\x3d\x1e\x59\xf2\x6c\x49\x6c\x2c\x39"
+ "\x1b\x7a\x94\x3b\xa9\xfd\x55\x1c\xfd\x1f\x98\xe2\xa7\x35\x35\xa4"
+ "\x9f\xc0\xbf\x56\x68\x67\x7e\xc7\x04\x1e\xd8\x49\xf3\xd5\x67\x21"
+ "\x39\xac\x89\xb5\x48\xdb\x17\x9c\xdf\x9b\xf3\xbd\xfc\x8a\xcb\x7f"
+ "\x1c\x7a\x7c\x8f\xe4\x53\x06\xa2\x5c\xfe\xb7\x19\xec\xb5\x41\x6f"
+ "\x3a\x58\xff\x35\xf4\xeb\xce\xcc\x42\x36\xff\x22\xbe\xf7\xd7\x4b"
+ "\xfe\x6d\x20\x4e\xfe\xf6\x77\xc2\xf7\x74\x78\x9f\xfe\x63\xdb\x96"
+ "\x8d\x70\x60\x3e\x7f\x65\x7a\x4e\xfa\x66\xeb\x77\xe0\xde\x7c\xa4"
+ "\x1d\x68\x28\x96\xe6\x80\x1b\xfb\x2b\x78\x68\xc4\xd4\xbc\x5e\x3c"
+ "\x4d\x2d\x96\x26\xad\xb9\x39\xd0\x3b\xff\x6f\xc6\xd3\xd4\x78\x64"
+ "\xc4\xd2\x0c\x9d\xc1\xf8\x6a\x83\x6b\x40\x79\x77\x00\xef\x62\x4f"
+ "\x77\x0c\x58\xb1\x8e\xe4\xfe\xe2\xb3\x84\xfb\xc1\x12\xfe\x5c\x4a"
+ "\xa7\xd5\x52\x7a\xa2\x76\x87\x95\x70\xd1\x44\xef\x49\xa1\x3b\x33"
+ "\xbe\x95\x04\x37\xe9\xe7\xd4\x24\xf2\xae\xd7\x6c\x15\x84\x1f\x52"
+ "\xd5\xb6\x42\x29\x5a\x78\x4a\xea\x07\x7d\xa9\x35\xca\x04\xa3\x3c"
+ "\x9b\xf2\x15\x6b\x77\xb2\xe4\xda\x7c\x57\x5d\x9b\xbe\xda\xeb\xd9"
+ "\x93\x84\xd6\x86\xaf\x3d\xb4\xae\xff\xa9\x95\x6d\xff\x22\x5b\x14"
+ "\x55\x4e\x9b\xd2\xc3\x06\x2f\x43\x67\x28\xef\x60\x0f\x8a\x3b\x74"
+ "\xd2\xbf\xc6\xe0\x9b\xea\x33\xb5\x31\x78\x48\x7d\xbe\x99\x9e\xf7"
+ "\xaa\xcf\xc4\x2f\x0e\x3e\xa1\x3e\xd3\x9a\x1d\x7c\x48\x7d\x8e\xa3"
+ "\xe7\xc5\xea\x33\xed\x1d\x83\x73\xd5\xe7\x78\x7a\x8e\x52\x9f\xa7"
+ "\xf5\xb0\x6b\x57\xd5\x67\x5a\x83\xd7\x4e\xab\xe7\xfa\xc6\x2e\x76"
+ "\xed\xa3\x1b\x97\x1b\xaf\x55\x4a\x3e\xf8\xda\x29\xe2\x8f\x32\xe4"
+ "\xde\x13\x4c\xeb\x26\xdc\x5e\xa8\xc1\x97\xd2\x4b\xd0\xce\x80\x63"
+ "\x90\xf8\xd9\x4e\x6b\x58\xba\xea\xdb\x7a\xd0\x42\x74\xee\x78\x58"
+ "\x7a\xa6\x9a\x9e\x48\xf2\xe9\xf2\xb0\xf4\x34\x35\x7d\x05\xd1\xcf"
+ "\x45\x61\xe9\xea\x39\xf6\xe0\x06\x37\xfb\xc7\xda\xb0\xf4\x95\x6a"
+ "\xba\x5d\xb3\xa3\x51\xd3\x93\xd4\xf4\x0a\x37\xfb\x8b\x21\x2c\x7d"
+ "\x81\x9a\x4e\xf4\xdf\x77\x2c\x2c\x5d\xd0\x15\xe9\xef\xdf\xcc\x4f"
+ "\xe6\x62\x6d\x0d\x12\xff\xff\x77\x6f\x58\x9e\x19\x6a\xd9\x4e\x4a"
+ "\x9f\x11\x96\x1e\xa3\xa6\xfb\xdd\xba\x3b\xc2\xeb\x1c\x53\x9e\xd7"
+ "\x55\xb1\x0d\x63\xe9\xd6\x11\x03\x43\xd8\x26\x0b\x3e\xdb\xff\x4d"
+ "\xdc\xf1\x32\x1f\xe2\x1d\xd6\x7c\xce\x3b\x98\xdf\x2a\xed\x67\x23"
+ "\xc1\xd3\xf6\xca\xfb\x72\x7e\xa3\xea\x2b\xc1\x23\xee\xd0\xed\x44"
+ "\xda\x90\x88\xeb\x74\x97\xbd\x50\xfa\xa2\xd7\xe2\x1a\x41\xc7\xa4"
+ "\x9e\xbf\x53\x9e\x37\xa1\x73\x47\x3d\xd0\x43\xbb\x6c\x83\x32\x4e"
+ "\x01\xc9\xa2\x48\x83\xae\x05\xf0\x08\xd7\x29\x49\xba\xef\xff\xa6"
+ "\x32\x88\x7b\xaa\x52\x1f\x85\xb5\x88\xfc\xb0\x19\x0b\xcf\xeb\x66"
+ "\xfe\x85\xf8\x8d\xb0\x4c\xfe\xcb\x80\xc3\x6f\x09\xdd\x0f\x1a\xca"
+ "\x54\xd3\xff\x4c\xe9\x89\x61\xe9\xeb\xc7\xa4\xed\x44\x07\xb9\xd1"
+ "\xd7\x36\xd4\xcf\xbd\xfe\x7e\xee\x2b\xfb\x07\xf5\xfb\x31\x61\xa7"
+ "\x77\x4b\xa0\xd8\xd7\x8d\xfb\x33\x88\x43\xec\xcf\xe1\x1e\xd8\x25"
+ "\x52\x7a\xe4\x83\x5e\x0f\xf1\x18\x03\xbc\xf4\x51\xd8\xa0\x5e\x65"
+ "\x38\x1f\x2d\xe8\x45\x4c\x4b\x33\xc7\xbd\xec\xbc\x0b\xcc\x84\xfb"
+ "\x35\x35\x8f\xe1\xfb\x69\xb6\x2a\xc3\xc3\x9a\x33\x02\xac\x86\xea"
+ "\x3e\xf4\xa8\xc6\x5f\xf8\x5b\x83\x77\x7f\xa9\x0f\x68\xaf\x40\xc4"
+ "\x5d\x0f\x48\xbb\x9a\x5d\x38\xd7\x5f\x77\x94\xbf\x0f\xde\x78\x71"
+ "\xab\x79\x17\xb3\xd2\xde\x6e\xa2\x67\xa7\xfc\xa3\x6f\x94\x3e\xd6"
+ "\x98\xe4\x5a\x0e\xac\x90\x67\x89\xd7\x92\x25\xbd\x08\xac\xe0\x2f"
+ "\x41\x2e\x0c\xe0\x3c\xf8\x28\xf1\xe1\x47\x47\x2b\x9f\x77\x88\xe9"
+ "\x87\xca\x88\x37\xb9\x58\xaf\x97\xf4\x49\x59\xa8\xe8\x8d\xbb\xa0"
+ "\xef\x16\x31\x97\xcb\x4c\x33\x8e\x6d\xf1\xe9\x9b\x77\x76\xb2\x27"
+ "\xa7\x31\xcb\x7a\x9f\x9e\xf2\x04\xde\x8a\xb6\xc1\x5f\xfe\x92\x3a"
+ "\xe2\x67\xf5\xbf\xa6\xef\xef\x6c\xa9\xd7\xfb\x05\xbf\xa2\x2c\x14"
+ "\x3a\xd2\x92\x48\x0f\xf6\x10\x57\x5b\x00\xbc\xb8\x89\x78\x71\x37"
+ "\xd1\x7f\x63\x60\x7b\x46\xac\x3f\x3b\x23\xf2\x50\x16\x33\x05\xb2"
+ "\x13\xe2\x9e\xed\x67\x0b\xb5\xfd\xe7\x50\x0e\xed\x29\x03\x96\x49"
+ "\xe5\xb4\xa7\x40\xf7\x12\xad\x8b\x11\x67\xc1\x78\x56\xf4\x67\x36"
+ "\xd4\xe4\x5c\x3f\x7e\x7c\x60\x7b\x82\xf0\x1f\x81\xbe\x8c\x36\xd6"
+ "\x92\x03\xcc\x10\x50\xef\x99\xe6\x9f\x65\xf1\xc4\x3f\xeb\xa3\xaf"
+ "\x72\x67\xcf\x66\xa6\x47\xcc\xed\xfc\x74\xa1\xdf\x1c\xd7\x9c\xe1"
+ "\x67\x2e\xfb\x67\x2c\x3f\x0b\x73\xa4\x94\x82\x4f\x83\x4d\x31\xe5"
+ "\x8f\xe9\x61\xca\x21\xb3\x8f\xf6\x0c\x1f\xf1\xe4\x3f\x82\x5c\xac"
+ "\xfc\x52\xfa\xab\x50\xbc\xb8\x17\xea\xcc\xfa\x16\xd2\x9a\x0b\xce"
+ "\x0a\x5b\xfa\x53\x72\x6d\x29\x47\xf1\x5e\x80\x7b\xaf\xd1\x93\x13"
+ "\x5e\x1f\xf4\x8d\x93\xba\x09\xe5\x15\x75\x7f\xa8\x95\xb2\x9d\x72"
+ "\x74\x2c\xdc\x55\x8a\xfd\xf0\x4d\x33\xcb\x55\x0d\xfe\x95\xbb\xc5"
+ "\x39\x3b\x7c\x00\xd8\x49\xce\xea\xaf\x50\x7d\x13\xf1\x27\x94\x7d"
+ "\x7e\x9f\xf4\x4f\xca\x35\x1b\x39\x03\xdf\x17\x30\x8a\x33\x86\x7d"
+ "\x01\x8b\xd0\xb9\xef\x0b\x24\xec\x9e\x8e\xfb\x01\x7c\x73\xdf\xc4"
+ "\xc0\x42\xfa\x4d\xea\x8b\x8e\xcf\x18\x73\x3f\x2a\x1e\x4c\xb0\xde"
+ "\xc2\xe2\x70\xd6\x93\x12\x90\x7e\x7e\xc5\x1a\xd6\xb1\x4c\xbe\x4f"
+ "\x7c\x9b\xd5\x91\xc9\x22\xa4\x2f\x6d\xfe\xf6\x5d\xd5\x0c\x71\x2a"
+ "\xa2\xb8\xd1\xdf\x26\x6c\x0f\x8b\xfd\xdd\xae\x5e\xc4\x40\x0b\x30"
+ "\x71\x66\xa4\x63\xb9\x7c\xa2\xbf\x4d\xe4\xd7\xb1\xa8\x96\x5e\x1a"
+ "\x83\xd1\x7f\xd4\xe5\xbb\xc0\xd4\x7a\xa9\x8f\xfe\xa3\xbc\xd8\x5f"
+ "\x2f\xee\x8f\xeb\xd8\x0f\x34\xba\x2a\x70\x54\xc7\xbe\x2d\x71\x7d"
+ "\x30\x41\xc0\x8d\xea\x53\xf7\xab\x59\x78\xa6\xbd\x3b\x51\xd8\x90"
+ "\x14\xb1\x15\x1a\x8f\xec\x56\xf3\xa0\x0c\x3d\x8b\xbb\x0e\xf4\x3d"
+ "\x83\xc6\xce\xd4\xef\x26\xa4\xd1\xf8\x68\xcf\xe2\x47\x30\xae\xb1"
+ "\x68\xab\x80\x45\x2e\x8b\xa0\x3e\x37\xc2\xde\x1a\x7c\x8a\xcb\xbb"
+ "\xd4\xe9\xc2\x1c\xe8\xf4\x88\xdd\xd3\x8b\x76\xe0\x3f\x08\x74\x93"
+ "\xea\x34\xa0\xbe\xb0\xfe\x9f\xd7\xfa\x82\xf6\xf0\x8d\xc6\x7a\x54"
+ "\xc8\xd5\x34\x66\xe4\xc1\xbc\x76\x65\x42\xf7\x76\x95\x60\xe6\x45"
+ "\xbd\x71\x80\x89\x84\x99\xce\xa3\xca\xf4\xea\x3c\xe8\xce\x0e\x87"
+ "\x87\x7c\x57\x8c\x44\x1b\xb2\xd8\xd4\x1e\x9d\x3e\x4e\x85\x9f\x8c"
+ "\xdf\xa3\xd3\x09\x3f\x0d\xf2\x9b\x6e\x47\x58\xd9\x99\xc1\xbc\xd4"
+ "\x6f\xf0\x46\xb0\x0d\xc0\x59\x91\xc0\x57\x9d\xee\x48\x58\xb9\x23"
+ "\x29\x97\x89\x47\x26\x1e\x72\xf7\x7e\x11\x0f\x35\x71\xa0\x48\x57"
+ "\x1f\x82\xb7\xac\x67\x94\x36\x6e\xd1\xda\x70\xeb\x74\x76\xad\x9f"
+ "\xf4\x2c\xf7\xe0\x22\x9d\x3f\x34\x27\xba\x19\x5a\x39\xe8\x74\x68"
+ "\x8e\x1a\x11\xa3\x78\x8c\x98\x2b\x3a\x17\xe5\x6e\xf1\x2f\x75\x0a"
+ "\x7c\xd4\xe9\x6d\xb0\x15\x27\xb8\x36\x4a\x1c\xd2\x27\x8b\xbd\x90"
+ "\xd2\x51\x27\xce\xfb\x84\x2f\xdb\x22\xfd\x66\xaa\xb7\x58\xed\x73"
+ "\xa1\xec\x83\x9e\xe4\x3f\xfe\x39\xbf\xb5\xdf\x4a\x4d\xb3\xae\xf9"
+ "\xba\xb8\x43\x3b\x7f\x5b\x26\xae\xc7\xa6\x85\x5e\x86\xf3\xdc\x31"
+ "\x41\x9f\x65\x45\xfa\xa6\xa0\xcf\xb2\x92\x58\xa9\x43\xa0\x5d\x8b"
+ "\xf7\xf3\x4a\xdc\xdf\xe0\x39\xbc\xaa\x0c\xbe\x11\xaf\xb2\xa9\x88"
+ "\xbd\x9e\x9f\xc9\xcf\xb5\x64\x92\xcc\x6e\x32\x2d\xe2\x25\xa6\xa4"
+ "\xfc\xab\x6c\x02\x6c\x83\x40\x7f\x60\x7b\xcc\xa3\x28\xbd\xd4\x94"
+ "\x14\xbc\x57\xa7\x9b\x10\x83\xbb\xa0\xbc\x20\x99\x78\x69\xd3\x5a"
+ "\xe0\x03\xec\xc4\xbb\x74\xe3\x3d\x94\x6f\x2d\x7d\xb3\x95\x0a\x5d"
+ "\x82\xa9\x2a\x60\x8a\x8d\x29\xb8\xc0\xc6\x8b\xf8\x99\x76\x1f\x74"
+ "\x6a\xfa\x0e\x5d\xc4\x0e\xaa\xb3\x8a\xd2\xa3\x45\xba\xcf\x07\xdf"
+ "\x09\x55\xf4\x2d\x9a\xbe\xbd\x49\xbf\x0a\xd5\x61\x2f\xa3\x7e\xe7"
+ "\x5f\x60\xb7\x50\x5f\xba\xa9\x9d\x2a\xea\x67\x57\xc1\x13\x2c\xbe"
+ "\x25\xb3\x1b\xf2\x1d\xd5\xe7\x66\xaa\x7f\x91\xaa\x0e\x9d\x61\x22"
+ "\x8d\xcb\x0e\x9d\x08\xfd\xe6\x96\xd2\x6f\x7e\x80\x45\xe7\xe7\xd1"
+ "\xbe\x97\x47\xed\xe3\x9e\x2a\xd5\x03\x9f\x22\xb2\x2f\x34\x36\xe8"
+ "\xd5\xa8\xde\xbc\x5e\xde\x45\x75\x77\x37\xf7\x52\x7d\xf6\xb6\x60"
+ "\x9d\x2a\x4f\x4d\xeb\x7b\xfc\x79\x5e\x16\x5f\x48\x7d\xaa\x82\xfd"
+ "\x34\xa5\xc5\x50\x5a\x67\x90\x1f\xd6\x8d\x3f\xab\x3e\x4f\x0c\xe6"
+ "\x2d\x48\x66\xf9\xd7\x98\x45\xd8\x00\x6c\x8f\x60\x1d\xba\xf1\x36"
+ "\xf8\xb5\x0a\xd5\x69\xb8\x8c\xfa\x4a\xa8\xbe\x82\x74\x36\x91\x68"
+ "\xb5\x91\xfa\x88\x38\xe4\x67\x04\x9c\xc4\x1a\x33\x78\x68\x2c\xb8"
+ "\x7b\x85\xfb\x84\x95\xa5\xb4\x1e\x68\x3c\x3a\x1a\xcf\xc4\xbc\x40"
+ "\xf0\xee\x2d\xc6\x34\x19\xf2\x1c\xc6\xa5\xce\xe3\x71\x1a\xd7\x89"
+ "\xbc\x0c\x7e\x86\xc6\xd6\xdd\x9c\xd1\xc6\x68\xef\x31\xb7\x64\xb6"
+ "\xe2\x1e\xc3\x19\x09\xb7\x6e\xcc\xeb\x71\x1a\xe7\x89\xa0\x1f\x68"
+ "\xdd\xf8\x27\xa8\xef\xc5\xd4\xaf\x12\x75\x9c\x48\xcb\x08\xf2\xf4"
+ "\xba\xf1\x9b\xd4\xe7\x49\xc1\xbc\x9f\x1b\xe7\xb8\xf6\xb0\x71\x52"
+ "\xf9\x09\x93\x51\x9f\x3a\xce\x49\x34\xce\x89\x9f\x1f\x27\xe1\x53"
+ "\x0e\xdf\xa3\x8e\xb3\x58\x1d\xa7\x9e\xc6\x39\x89\xc6\x39\x3d\x6c"
+ "\x9c\xb1\x23\xc6\x59\x4f\xe3\x74\xd2\x38\x3b\xc2\xc6\x19\x33\xca"
+ "\x38\xeb\xdd\x68\xa3\xd4\xe4\x14\x7b\xcb\x78\x7d\x89\xb8\xcf\x5e"
+ "\x34\x2e\x78\xff\x53\xc1\x3d\xca\x7e\xe1\x53\xe8\x38\xf4\x37\xd0"
+ "\x1b\x41\xd6\xc3\x9d\xcd\x94\x1d\xc5\x85\x42\x77\x13\x2f\x75\xd3"
+ "\x82\xbf\x2a\x1a\x9f\x18\xbc\x3f\xb1\x5f\xc4\x45\xf2\x22\x5d\xf8"
+ "\x00\xc8\x62\x42\xf7\xb8\x7a\xc7\xf6\x02\x94\x47\x59\xca\xbf\x21"
+ "\x78\xcf\x4b\x37\x4e\x9c\x8d\x00\x7e\x78\x86\x6f\x2b\xd1\xaf\x22"
+ "\x7d\xb5\x38\x2b\x28\x1a\x5f\x12\xd4\x69\xe6\xf0\x06\xc0\x45\xdc"
+ "\x4f\x15\xf7\x3b\x59\x71\x8a\xbf\x58\xbb\x67\xde\x4b\x79\xeb\xc3"
+ "\xee\x99\xf7\x8a\x3e\x0c\x0a\x5f\x0e\xdb\x57\xfb\xb7\x8b\xfb\xe6"
+ "\x94\xa7\x3d\xd4\xb6\x61\xbd\xda\x76\x21\x9e\x3d\xd2\xd7\x1a\x74"
+ "\x6c\x56\x61\xf3\x52\x34\xc1\xa8\xd9\x99\xb8\x75\x11\xcb\xb1\x96"
+ "\x47\x8d\x21\x54\x34\x21\x71\x98\x6f\x27\x9d\x51\xc4\x30\xa1\xf4"
+ "\x15\xc1\xbb\xe3\x45\x13\xd6\x7e\xd1\xdd\xf1\x02\x0f\xcd\x13\xad"
+ "\x37\xa2\xd9\x3a\xc2\x15\x92\x71\x63\x63\x44\x1c\x1e\xdd\x04\x11"
+ "\x5f\xae\x43\x37\x01\xfa\x5b\xb3\xf0\xfb\xa0\x9b\xf0\x4b\x95\x36"
+ "\xaf\x58\x1d\xf0\x9b\xdd\xd4\xa6\xf0\x15\x15\x7c\x9f\x70\x14\xbe"
+ "\x2f\x28\xdf\x19\xe1\x43\x9f\xea\x1b\x9e\x5f\x7c\x2f\x1c\xf1\x9e"
+ "\x34\xe2\xdd\xea\x25\x9a\x35\x96\x3d\x4d\xe9\x74\xa1\xe3\xf5\x44"
+ "\xef\x62\x99\x05\xe7\x59\x04\xe1\xe2\x59\xf4\xad\xa5\x5b\xdc\xb5"
+ "\x33\x73\x47\x22\x73\x75\xfb\x25\xdf\x4e\xfc\x52\xc7\x1c\xca\x73"
+ "\x9e\xc5\xe3\xae\x07\xe2\x14\x51\xfe\x1e\x11\x9b\x48\x37\x71\xdf"
+ "\xfa\x6d\x93\x98\xf2\xc3\xe4\x48\xae\x7f\xd2\x8a\xf3\xfc\xd7\x06"
+ "\xdd\x88\xef\xa3\xcb\x7f\x81\xcd\x00\x9d\x22\x1c\xee\xe4\xfa\x5c"
+ "\x2b\x95\xe9\xfd\xd9\x60\xf7\x38\x97\xff\x33\x96\x49\xf4\xb3\x47"
+ "\x37\x31\xd7\x90\xcb\x0c\xe5\x5d\x2c\x86\xf0\xcc\x7f\x92\xc4\x15"
+ "\xcd\x77\x43\x75\xac\xf4\x09\x50\x4d\x38\x99\x6d\xe1\xbe\x81\x22"
+ "\xdc\xed\xfa\x57\xab\xa6\xbf\x28\x91\xbe\xdb\x0c\xd4\xfe\xfd\xc2"
+ "\xcf\x84\xe4\x0f\x08\xb6\x13\xa7\xc8\x7b\xa3\x71\x3f\x1c\x28\x9a"
+ "\x68\x0a\xca\x36\xba\x89\x55\xea\x39\xd8\x02\xb9\x8f\x4c\xac\x3a"
+ "\x49\x92\xee\x1e\x69\x97\x14\x47\x79\x17\x06\xed\x92\xa0\x13\xa4"
+ "\xef\x34\x87\x0b\x84\xdc\x63\x8a\x5d\x90\x12\x30\xaa\x6b\x9c\xd2"
+ "\x69\xdf\x46\x59\x2a\x67\x16\x31\x54\x8b\x26\xda\x42\xb8\x36\x71"
+ "\x11\xf6\x53\x1a\x93\x89\xe6\xb5\x0e\xe3\x02\x4c\xbc\xf0\xd3\xa6"
+ "\x33\x1e\x3f\x79\x64\x8c\x18\x5b\xc6\x6b\xc9\x7e\xa1\x5f\x5a\x72"
+ "\x94\xf0\xe9\x02\xcd\xc1\x4d\xf0\x55\xe5\xa2\x76\x9a\x6b\x06\x59"
+ "\xb3\xa5\x8f\xb5\xd0\x33\xee\x1f\x38\x7f\xf4\x2f\x92\xf0\x47\xdf"
+ "\xcb\x89\x1f\x68\xa3\x3e\x77\xa3\x2e\xd0\x1a\xd8\x6c\xc2\xa7\x60"
+ "\x0b\x71\x3d\x2e\xa2\xf4\xa8\xa3\x59\xe9\x66\xcd\x76\xc8\xb0\xeb"
+ "\x8e\xb6\xd4\x7c\xc6\x5a\x2c\x7f\x12\xed\x80\xdf\x76\x66\xf5\x5d"
+ "\xaf\x6e\x1f\xc9\x48\x46\xb5\xee\x5e\xaa\x3b\x6e\xec\xba\x17\xb7"
+ "\xde\x60\xdd\x37\xd0\xef\xc5\xce\x1b\xa9\xbb\xa0\x8a\x07\x88\x0e"
+ "\x47\x91\x4c\xe1\x86\xbf\x55\xdc\x33\x0d\xf4\xc3\xc7\xcc\x2c\x21"
+ "\xab\x77\xe9\x22\x7f\x0c\x7a\x23\x6c\x34\x4a\x23\xdb\xc5\x1d\x54"
+ "\xe8\xd9\xd5\xbb\xa7\x2e\xff\x59\x06\xbd\xfb\x40\x51\xe4\xfa\x90"
+ "\x1f\xaa\xe0\xf9\x74\x8c\x5b\x17\x29\xce\x3c\xa9\xfe\x76\x89\x5b"
+ "\x91\xdf\x40\x5d\xa3\xeb\x48\xa3\x2c\xc2\x6e\x5e\x17\xf9\x96\xa6"
+ "\xdf\xea\x8b\x8a\xb2\xa8\x75\x59\x47\xea\x4d\x55\xc7\x40\xd6\x74"
+ "\xbb\xcd\x2a\xfd\x57\xab\x17\xae\x27\xb1\xef\xa4\x6f\x4c\xdf\x94"
+ "\x93\x9e\x66\x5d\xbb\x2d\x6b\xcb\xfc\xad\x8f\x3d\x66\x5d\x95\x9e"
+ "\x9d\x9d\xfa\xc3\xf4\x49\x6c\x6d\x56\xea\x96\xec\x4d\xd0\x6d\x5a"
+ "\xad\xcb\xef\x49\xc9\xd8\x6a\x9b\xbf\x64\x79\xe2\x08\xdd\x26\xee"
+ "\x5f\xb7\x43\xc6\xa1\xfd\x29\x9e\x78\x8c\xc9\xf0\x33\x64\xde\xc1"
+ "\x9d\x4f\x92\x7c\x4d\x38\xd8\x83\xbd\x10\xfb\x0f\x64\x2f\xa2\xd1"
+ "\xa7\x68\xcf\x68\x3a\xb8\x9f\xb7\x76\xe9\x6e\xf9\x31\xf1\xed\x6d"
+ "\xf0\xb7\x4c\x7b\x46\x3b\x1f\x2c\xf0\x88\xb3\x67\xdd\x2d\xab\xe0"
+ "\x1f\xf9\x29\x4a\xf3\x44\xc5\x2e\x28\xff\x07\x33\x48\x1e\xc3\xd4"
+ "\xc4\xf5\x13\x78\x49\x3c\x6f\xe0\xff\xb2\x30\xd5\xff\xbe\xde\xe5"
+ "\xf6\xc1\x8e\xc7\xb8\xda\x5f\xc0\x41\x53\xe5\xfa\x32\x35\x4b\x5a"
+ "\xe7\xf7\x89\xfb\x04\xba\x5b\xe6\x43\x46\xdc\x8d\x98\x9e\x45\x26"
+ "\xa2\xff\xca\xf2\x10\xad\x8e\xd7\x78\xf3\x36\x82\xfb\xf6\x0e\x7a"
+ "\x17\xbe\x53\xc6\x47\x19\x87\xd9\x68\xe9\xa2\xbb\x99\x6e\xfa\x1a"
+ "\xf9\x47\x65\x74\xd3\xd7\xcb\x3f\x3c\x87\xff\xdd\x12\x23\xff\x46"
+ "\xa6\xff\x4f\xff\xb4\xf6\xff\xdb\x75\x34\x7d\xc1\xdf\x97\x68\x5f"
+ "\x8c\xfb\xff\xc7\xf1\xff\x8f\xea\x38\x75\xbd\x3f\xe0\x1b\xe1\x56"
+ "\xfb\x53\xff\x60\x46\xc2\xcf\xca\xd2\x47\x09\xa7\x4f\x33\x4b\xae"
+ "\x9f\x77\x16\xfc\x80\xcd\xc8\x3f\x4f\x3c\x18\xf1\x5a\x36\x3b\xef"
+ "\xcc\xef\xe7\x67\x08\x6f\x5e\x26\xfc\xad\x2f\xeb\x60\xa6\xd2\x0e"
+ "\xe2\xb3\x6c\x32\xae\x11\xce\x9b\x70\xd7\xca\x45\xef\x4d\x39\x3e"
+ "\xf6\xb1\xe7\x32\xec\x1a\x9d\x2d\x1b\x98\xf0\xa2\x00\xfc\x35\x6d"
+ "\x60\x71\xd5\xf1\xfc\x04\x77\xbc\xde\xce\xf5\xaf\x37\x51\xda\xa9"
+ "\x37\x94\xa4\x71\x6f\xec\x6c\x1c\x67\x7d\x14\xfb\xbc\xb9\x54\xc5"
+ "\xcd\x29\xe2\x2e\x21\xfd\x02\x07\xe1\xb7\x5b\x9c\x5b\xe8\xe2\x9f"
+ "\x96\x7b\x7a\x7c\xaa\xaa\xcf\xc3\xb3\x88\xef\x43\xe3\xa8\xe7\x8e"
+ "\x27\xad\xa8\xf3\x75\xa5\x7e\x1c\xf6\xcc\x37\x76\x26\x8d\xcb\x4d"
+ "\x65\xfa\x16\x77\x0f\x3b\x49\xb4\x10\xe7\xe3\xb4\xee\x8e\xd1\x3a"
+ "\xab\x3b\x14\xcf\x2b\xa8\x7f\x25\xc4\xcf\x15\x53\x9f\x8e\x0e\x14"
+ "\x99\xb1\xff\xf4\xaa\xbc\x9c\x93\xd6\xc5\xb1\x52\xca\xb3\x7a\x1b"
+ "\x9b\x55\x4a\xf9\x88\xb7\x2b\x86\x8c\x22\xfb\x77\xd3\x55\x82\xc1"
+ "\x71\x6a\xb3\xd5\xfa\x08\xde\x27\x0b\x1e\x03\x6d\xd3\x38\xac\x1d"
+ "\xba\xc9\x42\xe6\x47\x1b\x5a\xbb\x03\x45\x31\xeb\xdd\xba\x49\x47"
+ "\xd4\x33\xc6\x0a\x59\x4f\x4c\xb1\xa4\x63\xa6\x34\xc4\xa7\x55\xef"
+ "\x6a\xa5\x95\xee\xa4\x7d\x7d\x90\x19\xa9\x8d\x4a\x6a\xc3\x69\xde"
+ "\xc5\xb8\x19\xf7\x7c\xdb\xfd\x24\xd7\x28\xd2\x86\x56\x37\xf9\x09"
+ "\x59\x56\xf2\x21\x82\xf7\x08\x10\x7f\x2f\xf4\x33\xc4\x7f\x64\x10"
+ "\x9d\x20\x9e\x43\xdc\x91\x20\x7e\x03\xe9\xd4\x46\x25\xfc\x9e\x93"
+ "\xdc\x7c\x9c\xf6\xee\x3a\xf0\x0a\x8f\x5c\xfd\x4f\x86\x33\x0e\xf0"
+ "\x0b\xd9\x76\xee\x13\x31\xcb\x8a\x26\x1b\x35\x7e\x01\xf8\x01\x1e"
+ "\xa1\xf4\x11\x66\x18\xa2\x39\x26\x1c\x69\x24\xfe\x83\x78\xfa\xc9"
+ "\xcb\xd5\xb9\x69\x14\x7c\x81\x1a\xa3\x5c\xd2\xf0\xc9\xdf\xa6\xfd"
+ "\xdd\x44\x6d\x34\xba\x75\xb7\x08\x58\x48\x1a\x34\x79\x83\xb6\xd7"
+ "\x43\xe7\xe0\xa6\x3a\x38\xd1\x3a\x82\xdb\xf1\x79\x1b\x74\xcc\xad"
+ "\x8b\x39\x4a\x73\x71\x1c\x79\xa9\xbc\x81\xf2\x57\xd0\xbe\xaf\xf1"
+ "\xd7\xed\x24\x13\x10\x1f\x30\xd9\x82\x7e\x50\x99\x26\x82\x35\xe6"
+ "\xa2\x51\xa5\x63\xa7\x24\x0f\x73\xd3\x2f\x35\xd8\xd3\x5c\xef\x09"
+ "\xc1\x7f\x72\x7b\x38\xfc\x09\x16\x7b\xd4\xb9\xfc\x41\xd8\xdc\x91"
+ "\x5c\x7a\xd3\x02\xe8\xa1\xa9\xbd\x13\x42\x87\xa6\x8b\x9d\x02\x5f"
+ "\x6e\x84\x33\x27\x08\x16\x27\x28\x5f\x3d\x68\xf3\xee\x7f\x10\xcd"
+ "\x7d\x14\x3c\xd4\x4d\x33\x25\x8f\x1a\x7b\x02\x38\xdc\xa5\x8b\x15"
+ "\x31\x46\x3b\x75\x93\x67\xa0\x3e\x7a\x2f\xa5\x5f\xe2\x65\x63\xf7"
+ "\x16\x54\x23\x76\xb6\xa9\x0e\xbe\xd6\xd4\xb9\xae\x1b\x28\x8a\xb5"
+ "\x69\xf7\x90\x80\x03\x98\x7b\x1a\xe3\x0c\xa9\xa7\x88\xb5\x41\xd7"
+ "\x28\xca\x0d\x65\xa0\x8f\xed\x58\x9f\xda\x77\x4a\xef\x86\x0f\xdc"
+ "\x30\xd8\xcc\x50\xe7\xa4\x5e\xc4\xa1\xd5\xdd\x34\x45\xed\x1b\xce"
+ "\xfd\x8c\xd4\x07\x71\x0e\xd1\x37\x94\x11\x51\x8e\x32\xf9\xa1\x32"
+ "\x58\x3f\x84\xcb\x66\x2a\x13\x45\xbf\x5c\xcb\x0b\x5f\xfb\xd4\x8f"
+ "\xca\x67\xe1\x8b\x4c\x17\x7b\xac\x6f\x28\x41\x8f\xd8\x15\xd4\xae"
+ "\x1e\xb8\x01\xbc\xd0\xea\x28\x97\x30\x3a\x46\xf3\x27\xf0\xeb\xa4"
+ "\xbf\x9e\xe0\x7e\xd3\x5a\x37\x1b\x92\xbe\x56\xa8\x1e\xb5\x7f\x4e"
+ "\x71\x3e\x38\x3e\xb2\xa1\x46\xfa\x0d\x42\xbe\xdc\x90\x6d\x94\xc6"
+ "\x67\xc6\xc2\x2f\x80\x91\xea\x6a\x52\x71\xc2\x4c\xf9\x8e\x04\x71"
+ "\x08\x3e\x07\x74\x37\xcd\x01\xaf\xa9\xf6\x1f\xb8\x37\x53\xc2\x6e"
+ "\x72\x03\x70\x80\xf8\xf8\x05\x72\x9e\x27\xc3\x5f\x78\x9c\xc4\xc3"
+ "\x9b\xba\xb5\x3a\x84\xdf\x02\x82\xb3\x42\x75\x68\xb8\x12\x4e\x1b"
+ "\x06\x8a\xe2\xe2\x88\x2e\x04\xf1\x46\xa3\x05\xb2\xce\x29\xab\x54"
+ "\x3e\xe4\x28\xcd\x4d\xab\x88\x49\x00\xbf\x56\x02\x2f\xa7\x58\x4f"
+ "\x7a\xfd\xec\x29\xe0\xe5\x23\xa0\x09\x71\x79\x7d\xd1\xf1\x15\x21"
+ "\xdc\x8e\xdb\xac\xe1\x76\xd8\xbc\x0a\xdc\xde\x23\xe8\x51\x5c\x89"
+ "\x9b\xad\x58\xab\xe1\x3e\xd6\xb9\x42\xeb\xba\x3c\x47\x9c\x0f\x98"
+ "\xa1\x0f\x14\xeb\xde\xd7\x2b\x64\x0c\xcc\x67\x8b\xbd\x53\xf8\xbc"
+ "\xdf\xad\x20\x46\xc5\x59\xe8\x47\x7a\xb0\xfe\xb5\x35\x8e\xb9\xa1"
+ "\xb6\x9c\x88\x73\xb0\x87\x68\x20\xd6\xa0\x97\xfa\x24\x62\x61\xc4"
+ "\x32\x43\xc3\xfa\x24\x96\x4d\x73\x7b\x72\x03\xe6\x6d\x8a\x49\xbb"
+ "\xf7\x50\x2e\x69\x80\x49\xc5\x17\xd1\xc7\x11\x70\x35\x4b\xb8\x4e"
+ "\x49\x1a\xbe\xbe\x63\xdd\x58\xdf\xe1\x70\x05\x4c\x01\x5b\xca\x4b"
+ "\xe3\x9f\xb4\x42\x83\x6b\x18\x4c\x4f\xab\xf8\xa8\xd2\xd6\x29\xa3"
+ "\xd2\x56\xc4\x0e\x40\xac\x87\xdd\x18\x0b\xed\x29\x68\x5f\xc4\x5a"
+ "\x53\x65\x9f\x06\x0f\x70\x6a\x4a\xab\x9b\xe5\xd6\x69\x74\x8c\x70"
+ "\x25\x01\xf8\x84\xb9\xd2\x68\x07\x74\x65\x6a\xdf\xfd\xda\x7c\xa0"
+ "\xdf\xe1\x34\x81\xf6\x18\x61\xef\x15\x1a\x73\xfc\x7c\x2a\x17\x0b"
+ "\xda\x16\xe2\xaf\xe2\x17\x0d\x1f\x7b\xfc\x1c\x8c\x1d\x38\x91\x99"
+ "\x03\x7d\x99\xdc\xcb\xdc\x3a\x73\xdd\x70\x7a\x65\x7e\x59\xd8\x65"
+ "\xa8\xfc\x18\xe8\x7d\xe6\x23\x32\x3f\xf6\x37\xca\x2f\x74\xf3\xea"
+ "\x7e\x08\x7b\x0a\xa4\x55\xab\x30\x68\xa7\xfc\x0d\xb8\x4b\x0d\xdf"
+ "\x3c\x91\xed\x52\x16\x24\x1a\x7d\x82\xf6\x0e\x27\xe5\x5b\xdf\x42"
+ "\xd0\xf2\x8f\x67\xac\x5a\xe5\x37\x41\x27\xf8\xf6\xe4\xc8\xed\xdd"
+ "\x6c\x62\xe6\x12\xfe\xaf\x2e\xdd\xd4\xef\xd1\x3a\xf2\xc1\xff\x25"
+ "\xd5\x6d\xed\xd2\x4d\xff\x26\xb5\x1b\xa7\xfe\x5a\xe8\x77\x36\xfd"
+ "\x4e\xa3\xdf\x89\xf4\x7b\x73\x97\x6e\xda\x65\xca\xaf\xa8\xf9\x13"
+ "\xe9\xfd\x6f\x94\x7e\x8f\xfa\x4b\x7d\x9c\xba\x86\x7e\xd7\x3c\x05"
+ "\xbe\xf2\x11\x91\xfe\x1a\xde\xe9\xf7\x90\x3a\xee\x26\xb9\xb6\xa7"
+ "\xe6\x51\x3d\x76\xe4\xc3\xbe\x46\x69\x99\x94\x27\x15\x75\xc3\xb7"
+ "\x01\x3d\x4f\x09\xe3\x4f\xa9\x1e\x0b\x62\xde\x2e\xa0\x5f\xdc\xb5"
+ "\xb0\x51\xf9\x8f\x50\x2f\xc1\xa0\x35\x44\x2f\x26\xcf\x48\xb3\xcb"
+ "\xf9\xa4\xb9\xae\xc2\x7a\xd7\xe8\x01\xf0\x69\x58\xbe\xf5\x32\x9f"
+ "\x94\x5f\xa7\xfa\xb4\xb9\xf3\x4b\xbc\x3d\xe6\xa7\xb9\xa3\xfa\xef"
+ "\x43\x79\xfa\x5d\xa6\xfe\x26\xa9\xbf\xf7\xab\xbf\xff\x57\xfd\x5d"
+ "\xae\xfe\xae\x70\xeb\xa6\x36\xaa\xbc\x09\xc1\x6c\x6a\x23\x60\x42"
+ "\x34\x5f\xfa\x1c\xd2\x59\xfc\x90\xaf\x89\xfe\x7f\x03\x31\x42\x07"
+ "\x8a\x2c\x99\x9a\xde\x1a\xba\x9f\xa1\xa2\xc8\x7f\x1e\x14\xba\x1f"
+ "\x4b\x71\x18\x2d\x34\x98\x74\x49\x8c\x78\xa7\xf1\xd5\x7a\xe2\x1b"
+ "\x64\x3d\xc2\x6e\x14\xf2\x0f\x62\x0d\x21\x66\x2b\xfc\x0e\x0a\x39"
+ "\x2a\xea\x61\x0b\xd6\xab\xd0\xe9\x97\xc2\x4f\x50\xac\x91\xfe\xe2"
+ "\x48\xa6\xb0\x68\xf4\x1e\xf2\x92\x94\xf3\x27\xb4\x52\x5b\xde\x90"
+ "\x9c\x6f\x39\x22\xcf\x36\xa7\xfe\x78\xa0\x68\x5a\x98\xfc\x6f\xd9"
+ "\x80\x3e\x13\xac\xdb\x68\x3c\x0b\x3a\x74\xd3\x00\x9b\xbb\x3b\xe5"
+ "\x98\x13\xb5\x31\xab\x73\x95\xa9\xc1\xbc\x53\x37\xb5\x95\xe8\x61"
+ "\x16\xf0\xbb\x23\x48\x97\xa7\x8a\x38\x7a\x2a\xfe\xd0\x3c\x4f\x85"
+ "\x6f\xa5\x82\x30\x7a\x12\x17\xa2\xd3\xd3\x2a\x86\xcf\xcb\xe4\x0a"
+ "\xbf\xe4\x17\xda\x68\x5d\x02\x07\x92\x47\xac\xcb\x39\x58\x97\x6a"
+ "\xd9\xa6\xe1\x34\x3e\x7e\x0e\x68\xbc\xda\x47\xc2\xdb\xa9\x0b\x31"
+ "\x37\x6e\xdd\xb4\x63\xea\x9e\xd4\x46\x7b\xe4\x37\x28\xdd\x2a\xfb"
+ "\x29\xd3\xd5\xb6\x08\xff\xa6\x5a\x80\xff\x5a\xba\x8a\xdf\xa8\x07"
+ "\x77\xcf\xa7\x69\xe9\x6a\xfd\x84\xa7\x53\x8d\x58\x3f\x5a\xba\xc4"
+ "\xc9\xb8\x0d\xa0\x37\x28\xeb\x17\xb6\x8c\x24\x7f\x3f\xd2\x40\xfd"
+ "\x9e\x5e\x42\xfc\x45\x2d\xd6\xf3\xee\x9d\xcc\xb4\xbd\x8a\x45\xc9"
+ "\xb5\x39\xfd\x35\xad\xac\xd4\xe9\x4f\xaf\xd5\x68\x54\xb9\xa0\x67"
+ "\x53\xe2\x86\xd3\xca\x99\x8b\xb9\xc3\xec\xf7\x9b\x62\x59\xb3\x7f"
+ "\x81\xa0\xb9\xb4\xee\xab\xa9\x5c\x9b\x9b\xbd\x5e\xac\xee\x25\x4d"
+ "\xf2\x4c\xe5\xe6\xa8\xe6\x5a\x49\xbb\xd4\xba\x83\xf4\x2f\x8c\x0f"
+ "\x11\xb4\x1e\x6d\xa1\x2e\xda\x57\x62\xbc\x05\xc9\x91\x92\x7e\xdf"
+ "\x3c\xcf\xcd\x6e\x8d\xd3\x68\x2b\xf6\x27\xb3\x8e\x65\x96\x3d\x22"
+ "\xf7\x27\x05\x3a\xb0\x4c\xaf\xf0\x37\xd7\x92\xd9\xcb\xb0\x6f\xc2"
+ "\x9f\x77\xca\x8e\x49\xf0\x1b\x95\x4c\x7d\x9d\x4d\xfc\xd9\x11\xf5"
+ "\x6c\x86\xe4\xdc\x19\x9f\x40\x96\x55\xe1\x4a\xeb\x69\xc6\x9b\xea"
+ "\xbc\xb4\x53\x7f\x8e\x80\xb6\xef\xce\x91\xf1\xba\xa0\x0f\x12\xf1"
+ "\xe3\xc0\xb3\x5a\xb8\x4f\xc4\x26\x28\xba\xf9\x44\x98\x8e\xab\x56"
+ "\xae\x93\xe9\x2f\x8a\x98\x13\x25\xb1\x4c\xea\x13\x67\x3c\x20\xd3"
+ "\x67\xcc\x93\x76\x08\xb1\x06\xf5\xdd\x12\x61\x89\xff\xab\xd4\x0b"
+ "\x47\x0e\x4a\x7e\x64\x86\x29\xcc\xe6\x47\xc0\x5a\xf8\x2d\x2e\x9a"
+ "\x31\x27\xb4\x2e\x6e\xf6\xa1\x0c\x95\xed\xa1\xf4\x45\x5a\xba\xdc"
+ "\x6b\x26\xab\x7e\x14\x62\x0d\x91\xbb\x92\x18\xd1\xe6\xf1\x07\x1d"
+ "\xda\xfa\x9d\x51\x2d\xdb\x97\xeb\x17\x63\x04\x3e\x60\x0d\xfb\x85"
+ "\x6f\xaf\x87\x85\x4f\x06\x7a\x36\xfa\xb5\xb5\x2b\xf9\xbb\x38\xb1"
+ "\x76\xc5\xba\x9d\x71\x2c\xd4\x8f\x19\x69\x2a\xae\xb6\xf7\x6d\xb4"
+ "\x98\xe8\x1b\xf1\xdd\x91\xea\x59\xd6\xcd\x52\xc6\xd8\x37\x98\xa0"
+ "\xf4\x73\x1f\x74\xd3\xd0\x27\x40\x67\xa3\xda\xab\xe2\xac\xc4\x0b"
+ "\x7f\x65\x15\xb4\x1e\x42\x3e\xca\x62\x98\xe6\xa3\x6c\xa0\x68\xa6"
+ "\x25\xa4\x3b\xbe\xd9\xae\x8e\x0b\x3c\x78\xb5\x33\xff\x7d\xe0\xd2"
+ "\x26\xb9\xc6\x6e\xce\x00\x1e\xbb\x08\xf7\x68\xff\xa9\x3a\x99\x2b"
+ "\xca\xae\xd5\x70\x8f\xd6\x68\x1a\xcd\xfb\xd9\xca\x78\x5e\x45\x73"
+ "\x0a\x1b\xfb\xcd\xf4\xfe\x09\xfd\xa6\xc9\x5f\x5d\x0c\x7e\x55\x9c"
+ "\xaf\xa2\xb2\x15\x6e\x36\xbb\x5e\x9b\x03\x6f\xd4\x12\xab\xc0\xb1"
+ "\x7c\xd8\x37\x26\x8a\xb3\x7e\xe0\x18\xf0\x4b\x9c\xf9\x13\xae\x99"
+ "\x77\xfd\x27\x03\x9e\x09\xbf\x25\xf4\x8e\xfe\x02\xcf\xa8\xae\x76"
+ "\xcd\x87\xb1\x5b\x37\x53\x3d\x6f\x9b\xe9\xd1\x6c\xc3\x81\x87\xb6"
+ "\xd9\x6c\x0a\xd5\x6f\x6d\xb0\x7a\xa1\x3b\xff\xa7\xcb\x7f\x3f\x43"
+ "\x5e\xc0\x4e\xd2\xcb\xa9\x0d\x03\x45\xb7\x84\xcd\xff\x64\xe9\x2b"
+ "\x76\xbd\xd0\x67\xde\x44\xdf\x92\x86\xd3\x1c\x53\x93\xe0\x2b\x69"
+ "\x7f\xfe\x4a\x1c\xb3\x12\xde\xd2\x5e\x73\x4b\x9a\xc6\x0f\xdf\x45"
+ "\x69\x94\x07\xfd\x83\x0c\xde\x4a\xcf\x69\xd8\xa7\xc7\xd0\x3b\x43"
+ "\x2e\xf1\x80\x66\x40\xf7\x04\x3d\x18\xc1\xfa\x54\x97\x6e\xf6\xd9"
+ "\x66\xf8\x10\xda\xfa\x79\x3f\xd6\xf9\x76\x7e\x15\x3e\xad\xac\x59"
+ "\xec\xa6\x0e\xdd\xec\x46\xe8\x9d\x0a\x2e\x43\xc7\x73\x4b\xef\x70"
+ "\x1d\xcf\xac\x45\xea\xdf\x1a\xfa\x3b\x1e\xfa\xb3\x2e\x57\x9f\x9d"
+ "\xd7\xff\xb3\xae\x97\x79\xad\x19\xf4\x67\x93\xb0\xb2\xd0\x5a\x99"
+ "\xb5\x46\x83\x15\x68\x0a\x68\x2c\xec\x6c\xb0\xce\x75\x7e\x06\x9f"
+ "\x45\x34\x4f\xd4\xef\xdd\x77\x7c\xc7\xb9\x13\x32\xed\x2c\xe1\x0f"
+ "\x01\xfe\x88\x6f\xc8\xd6\x4b\x37\x4b\xcc\xa7\xf0\x17\xab\x9b\xb5"
+ "\x9c\xda\x8e\x2b\xbf\xc8\x0c\x99\x59\x6c\x26\x74\xe8\xe6\x00\x77"
+ "\x42\x06\x06\x4e\x20\xae\x59\x8f\xce\x7a\xbf\x2d\x8f\xe9\xe9\xfb"
+ "\x2c\x7a\x5e\xa0\xf1\x52\x54\x26\x26\xc2\xc7\xe2\xc0\x43\x2d\xcb"
+ "\x63\xb3\x06\x8a\xac\x31\xda\x5c\x81\xcf\x80\x1e\x4f\xd5\x45\xa0"
+ "\xaf\xc2\x16\x00\xbe\xf9\xdd\x80\x9b\x46\xab\x2e\x42\x77\x3d\xcb"
+ "\x1f\xe1\x65\x31\x72\x1f\xb2\xae\xa5\x79\x8d\x93\xf8\x62\xb5\x10"
+ "\xee\x9f\x0a\xeb\xe7\x7f\x84\x3d\x17\xa1\xbc\xd9\x0b\x1e\x6e\x2c"
+ "\xf8\x58\x5f\xd4\xe0\x53\x2e\x7c\x7a\xb2\x4c\x31\xdf\x7e\xde\x8b"
+ "\x38\x6e\x99\x3b\x99\xb1\x47\x37\xfb\x69\x1a\x23\xee\xe7\x36\x4a"
+ "\x1d\xff\xec\xbd\x9a\x9c\x2e\xfb\x3d\xfb\xdb\xe6\x5d\x11\x0c\xba"
+ "\x79\xf8\x80\x14\xb6\x98\x97\x2c\x42\x1f\xef\xf2\x2f\x62\xce\xfc"
+ "\x7b\x91\x67\xa6\xba\x97\xb5\xf7\x15\x58\xd8\x49\xcb\x22\x5a\xc7"
+ "\xb3\x67\xd0\x5a\x39\x76\xc3\x36\xaf\xba\xd9\x33\x54\xf8\x36\x09"
+ "\x5b\x11\x9d\xf5\x02\xf6\x12\xe8\x06\x68\x1f\x69\xc0\x7e\x4d\x75"
+ "\xdb\xb5\x75\x43\xfb\x44\x03\xc1\xa9\x57\xea\x31\x71\x3e\x6f\xed"
+ "\x86\xef\x18\x21\x3f\xc8\xfc\x26\x79\x6e\x30\xfb\x58\x90\xdf\xa6"
+ "\x7c\x28\x27\x6c\x08\x75\x56\x67\x4a\x00\xba\x04\xab\x13\x63\x53"
+ "\x71\x91\xf6\xab\xd9\xed\xa1\x75\x6b\x15\xf7\xf2\x4e\xf6\x86\xaf"
+ "\xcb\xd9\xfe\x90\x9c\x7a\x4b\xdd\xfc\x4a\x66\x1d\x6d\x1d\x66\x46"
+ "\x63\xaf\xba\xf5\x89\xf2\x72\x5e\x5b\xa1\x57\xbe\xb5\xbb\x8c\x99"
+ "\x74\x25\x04\x36\xac\xb3\x9c\x0d\x53\xba\x74\xb7\xe6\x99\x4d\x53"
+ "\xd7\x2c\xb3\x4d\xe0\xf9\x16\xa6\x2f\xbd\x32\xc1\x38\xdb\x37\xb5"
+ "\x96\x47\xdc\xf1\x9d\x55\x36\x9c\x7d\x57\xb0\x73\x9b\x59\xc4\xb2"
+ "\x00\xb5\x6d\x62\x99\x6e\xdd\x9c\x62\xdc\x35\x3f\x69\x02\x2f\x32"
+ "\xa7\x18\x75\xe6\x56\x33\x63\x6e\x27\xef\x2e\x79\x6c\x9c\x91\xf6"
+ "\xdf\x18\xda\x37\x8a\x23\x4d\x53\x6b\x87\xa8\x8e\xf7\x36\x88\x72"
+ "\x75\x63\xf7\xed\x2b\x13\x47\xef\x5b\x66\x7c\x97\xee\x2b\xd3\x6e"
+ "\xac\x6f\x73\x1b\x43\x7d\x9b\xdb\xf8\xbf\xd0\xb7\x97\xc3\xfa\x16"
+ "\x13\xea\x5b\x06\xfa\xf6\xe6\x8d\xf5\xed\xab\xc6\x50\xdf\xbe\x6a"
+ "\xfc\x92\x7d\x3b\x36\x76\xdf\xe6\xdc\x37\x7a\xdf\xec\x53\xbb\x74"
+ "\x73\xbe\x7d\x63\x7d\x4b\x58\x11\xea\x5b\xc2\x8a\xff\x49\xdf\xf2"
+ "\xab\xf9\xd9\x16\x5a\x41\xd0\xe7\x80\xce\x77\xe9\xe6\x3e\x94\x37"
+ "\x43\xd8\x71\xc7\xd2\xf3\xc4\x82\x6a\xfe\x2f\xc9\xdb\xcc\x69\x96"
+ "\x7b\xda\x1c\x5a\x3f\xb7\xa8\x76\x25\x73\x45\x8c\x07\x25\x62\xfa"
+ "\x51\xee\xe0\xfe\x3b\xbd\xb0\x19\xf4\xc3\xbf\x0a\x7c\xbb\x2f\x7a"
+ "\xa3\xdf\xa7\xe7\xd1\xb1\x2b\x0f\x5f\x31\xb0\x37\xfa\x3d\xfa\x81"
+ "\xa2\xb9\x4c\xf3\xcf\xaa\x95\x35\x57\x5d\x8f\x1e\xcd\xfd\xc6\xb2"
+ "\x0c\x66\x06\x3d\xc2\x2f\x62\xb5\x96\xe7\x4f\x30\x2e\xbb\x8c\x7d"
+ "\x7f\xee\x4a\xed\xce\xac\x56\xd7\xea\xee\x09\xdc\x9c\xcb\x22\x70"
+ "\x6f\x57\xf8\x5f\xb4\x78\xd8\x9c\x5c\x36\x6e\xb5\x9d\xea\xf7\xb1"
+ "\x0d\x66\x3b\xd5\x4d\xf0\x90\xbc\xfc\xdc\xa7\x23\x36\x33\x53\x25"
+ "\xd5\x8d\xdf\x65\x96\x02\xbe\xfb\x05\x66\xc0\xfd\x5e\xdc\xd3\x95"
+ "\x77\x74\xc7\x1b\xa9\x9d\xe3\x5a\x3b\x5f\x00\xbf\x68\x09\xbf\xdb"
+ "\x9e\x0b\xc1\xef\xb6\x07\x42\xf0\xbb\x2d\x4a\xc2\xef\x36\x43\x08"
+ "\x7e\xb7\x79\x6f\x0c\x7e\xb7\x25\x85\xe0\x27\xcb\x5e\x1f\x7e\xb7"
+ "\x6d\x1b\x1b\x7e\xb7\x95\x84\xe0\x27\xeb\x1a\x03\x7e\xe3\x47\x87"
+ "\xdf\x6d\x9f\x7c\x39\xf8\xdd\xe6\xfd\x92\xf0\x8b\x92\xf0\xfb\xea"
+ "\x9f\x43\xf0\xfb\xea\xbe\x10\xfc\xbe\xba\x4a\xc2\xef\xab\xcb\x43"
+ "\xf0\x4b\x58\x70\x63\xf0\xfb\x6a\x61\x08\x7e\xb2\xec\xf5\xe1\xf7"
+ "\xd5\x37\xc7\x86\xdf\x57\x9b\x42\xf0\x93\x75\xdd\x18\xfc\x12\x26"
+ "\x13\xdc\x62\x54\xf8\xc5\x8c\x0d\xbf\x84\x05\x5f\x12\x7e\x66\x09"
+ "\xbf\xdb\xa7\x84\xe0\x97\xf0\x51\x08\x7e\x09\xa5\x12\x7e\x09\x7b"
+ "\x42\xf0\xbb\xdd\x76\x63\xf0\x4b\x70\x86\xe0\x27\xcb\x5e\x1f\x7e"
+ "\x09\x57\xc7\x86\xdf\xed\xa6\x10\xfc\x64\x5d\x63\xc0\x6f\xc2\xe8"
+ "\xf0\xbb\xfd\xdb\x5f\x0e\x7e\xb7\xdb\xae\x07\xbf\x1b\xe3\x35\x6e"
+ "\x17\xb2\xce\xff\x42\x3d\xad\x63\xd5\x03\x18\xc2\x3e\x51\x29\xba"
+ "\xbd\xb5\x46\x19\x6f\x94\x77\x38\x6e\x2f\x26\x19\x66\x69\x87\xee"
+ "\x8e\x99\x35\xca\x38\x23\x77\x9c\x9b\xa7\x38\xba\x4f\xf1\x5d\xe3"
+ "\x0d\xca\xae\x09\x06\xf8\x14\x18\xad\x2e\x61\x2f\xab\xbb\x23\x2f"
+ "\x62\x1a\xbb\x05\xf7\xf5\x76\x13\xbf\x86\xe7\x81\xa2\x3b\x8a\x89"
+ "\x17\x89\x1b\x09\x93\xb4\x4d\xd9\x22\x78\x67\x56\x7a\xda\xb6\x2d"
+ "\x69\xa9\x5b\x6c\xd6\xd4\x8d\x8f\x67\x0f\xf7\x89\x2f\xe2\x5e\xee"
+ "\xc1\xfc\xdd\xd1\x14\xf4\xf3\xe2\xe0\x76\xf8\xcb\xcb\xbc\x15\xb6"
+ "\x69\x5f\x33\x89\x38\x05\xd1\xb1\x27\xf8\x50\xf2\x81\xa4\xaf\xf0"
+ "\x77\x85\x1f\xc0\xa1\x8c\x03\xbc\xc4\xb4\x1c\xbe\x5d\xd4\xb3\x09"
+ "\x92\xc1\xe7\xcf\xe5\x51\x53\x13\x61\xd3\x21\xee\x76\xe8\xbe\xa6"
+ "\xdd\xc1\x6a\xe4\x26\x53\xb5\x52\x32\x35\x91\x97\x4e\x4d\x00\x0c"
+ "\x5a\xe0\x83\x2d\x27\x62\x56\x87\xee\xce\x6e\x1e\x65\xaa\xa6\xba"
+ "\x6a\xd5\x7a\xa0\xd7\xf0\x26\xed\xe4\xff\x44\x7d\x2a\x2f\x88\x38"
+ "\x24\x4e\xc9\x0f\x7e\xed\x45\xf3\x2e\x6b\x04\xf2\xc2\x17\x22\x7c"
+ "\x04\x6a\xb1\xa7\xd0\x6f\xe4\x25\x7e\x7c\x29\x95\x5f\x8a\xd8\x9b"
+ "\xc1\x3a\x64\x9f\x6e\xa2\x3e\xb5\x89\xb1\x94\x98\x56\xf4\x3d\x99"
+ "\x7c\x40\xc4\x7f\x14\x70\xbd\xb3\x99\xda\x5e\x21\xe2\x76\xfa\x2f"
+ "\x89\xb8\x9d\x6a\x99\x99\x54\x46\xd0\x53\xf8\x3f\x95\x75\xdc\xf9"
+ "\xa6\xd6\x2f\xe2\xa1\x27\xd1\xfb\xa1\xb0\x36\x22\xe9\x7d\x6f\xd8"
+ "\x77\x13\xbd\x6f\x22\x3e\x74\xb2\xfa\x3d\x8a\xde\x57\x81\x2f\x95"
+ "\x31\x2f\x0b\xa5\x4d\xb4\xee\x4e\xd8\x02\xc7\xa8\x79\x26\x53\x9e"
+ "\x29\xe0\x75\xd5\x3a\x62\x7b\x74\xf3\xaf\x41\x66\x54\xbf\xc7\xd1"
+ "\xfb\x69\x9c\x0b\xa8\xdf\xa7\xd0\xfb\x7b\xff\x1f\x7b\xdf\x03\x17"
+ "\x55\x95\xf6\x7f\xe6\x32\xea\xa4\x33\x30\x2a\xd5\x58\x68\x53\x6b"
+ "\xbb\x53\x6b\x45\xc5\xb6\x54\x9a\x54\xda\x52\x99\x50\xab\x2d\x99"
+ "\x25\x26\xda\x58\xfe\x41\x24\x44\x45\xfe\x49\xac\xd2\x0c\x52\xeb"
+ "\xee\xa2\x01\xea\xbe\xc5\x9a\x7f\x8a\xdd\xad\xd6\xde\xb7\xb6\xe9"
+ "\x5d\xdd\xa8\x80\xa1\x5e\xfb\xbd\x94\x03\x4c\xec\xe0\x92\x2f\xda"
+ "\x04\x28\x23\xcc\xdc\xf3\x7b\x9e\x7b\xee\x65\x66\x60\x06\x66\x06"
+ "\x34\xdb\xe4\xf3\xb9\x9f\xcb\x3d\xf7\xcc\xb9\xe7\x3c\xcf\xf7\x3c"
+ "\xcf\x73\xfe\x3d\x0f\x3c\xff\x44\x7c\x0f\x76\xfd\x34\x16\xff\x46"
+ "\xa9\xdc\x8e\x6d\x02\xda\xab\x91\xee\x40\xeb\xed\x90\x36\x0b\xc6"
+ "\xab\x39\xc8\x47\x6c\xa7\x69\xc3\x09\xd2\x22\x9b\x86\xb1\x41\xc3"
+ "\x18\xaf\x2e\x8f\x66\x3e\x7a\xb8\x24\x48\x6f\xc7\x74\xdc\x5b\xce"
+ "\x1b\x2f\x57\xe3\xff\x40\xd3\xe7\x91\x86\xe2\xb7\x60\x4c\x74\x43"
+ "\xa4\xc8\x67\xa0\x1d\xfa\xd1\x25\xb9\xbb\x44\x5e\x40\xdd\xc6\xc0"
+ "\xfb\x35\xe2\xba\x47\x43\x82\xb3\x97\x9d\x2f\x92\xdd\x30\x3d\x24"
+ "\xbf\x11\xf0\x3b\x26\xf7\x6e\xc8\x92\x62\x12\x42\x1a\xf3\x95\x05"
+ "\xf8\xc4\xf9\x15\xbb\x4a\x19\x2d\xf8\x49\x01\x8c\x4a\x58\x41\x9c"
+ "\xd0\xd1\xd7\x6f\x67\x73\x35\x37\xf4\x9d\xff\xb5\xca\xa6\x75\x89"
+ "\x71\x1c\x08\x1b\x27\xdc\x70\xd4\xbd\xbf\x68\x9a\x20\x1f\x3c\xde"
+ "\xd9\x3d\xde\x65\x4a\xef\xd8\x1e\xb8\x1b\x95\x1e\xef\xf4\xfd\xde"
+ "\xe9\x3c\xde\x25\x79\x97\x79\xe3\x2c\x8f\x77\xf1\xfd\x7e\x97\xec"
+ "\xf1\x2e\xa6\xdf\xbb\x2c\x8f\x77\x53\xc5\x77\x61\x90\xbe\xbd\xcf"
+ "\x4f\xa1\x6c\x5a\xa4\x98\x0e\xb2\xfe\xc6\x03\x1e\xe9\x72\x31\x1d"
+ "\xbf\x7f\xd8\x4a\xbe\x14\xc7\x31\x0c\xe7\x80\xa3\x1f\x8b\xdf\xb0"
+ "\xba\xbf\xf1\x53\xc9\xcf\x7c\x34\xe3\xdf\x4f\xe7\x44\xc8\xb4\x63"
+ "\x10\x53\x11\x79\xb9\x18\x13\xa8\x84\xf9\xe4\x62\xfd\x50\x88\x5d"
+ "\x8d\xb1\x6f\x21\x9f\x3f\xd9\xe8\x37\x36\x66\xe1\x4d\x49\xd2\x59"
+ "\x56\x97\x41\x19\xc3\x1b\x26\xa6\x63\xac\x41\xf4\xdf\x95\xd3\x4e"
+ "\x79\x21\xc6\x20\xc6\x32\x24\x3d\xc4\x9c\xde\x9d\x0b\xb2\x21\x1c"
+ "\xf5\x1c\xae\xef\xd5\xc1\xf8\xb6\x2e\xf5\x24\x8b\x33\x88\xe7\x7b"
+ "\x8d\xca\x98\x75\xed\x24\x2a\xf5\x2e\x6a\xc3\x71\x1e\x93\x09\x37"
+ "\x55\x43\xde\x08\x51\xa6\xed\x60\x7b\xbd\xa3\x31\x36\x77\x84\xb9"
+ "\x5d\x98\x67\x56\x1c\x97\x45\x37\x48\xef\x59\x7b\xa3\x1b\x84\xb1"
+ "\xb4\x78\xae\x10\xea\xe8\xec\x8b\x83\x29\x8b\xb6\x9c\x56\x4d\x2a"
+ "\xed\x2e\x8c\x56\x7b\xef\x6f\x8c\xbe\x0e\xcb\xc4\x36\x58\x65\x37"
+ "\xd5\x60\xd9\x90\x27\xa6\x6f\x7f\xa3\x52\x19\x03\xef\x67\xb2\xfd"
+ "\xf8\xd1\x0d\x42\x0c\xa0\xc2\x68\x18\xff\xdf\x34\x4d\xdc\xc7\x59"
+ "\x40\x71\xef\x63\x0f\x21\xb8\xaf\x99\x86\x8f\xaf\xc9\xf9\x96\x4c"
+ "\xe8\xec\x4d\xc2\xbd\xaa\x2d\xc2\x3e\xec\x35\xe8\xff\xcf\x41\xe6"
+ "\xa6\x12\x16\xdb\x46\x16\xfd\x4e\x5d\x97\x95\x6c\xc6\x33\x89\x46"
+ "\x65\x75\x67\xf8\xf8\x2f\xa1\xcc\xbd\x56\xf2\xd4\x76\x71\x5e\x02"
+ "\xe3\xec\xd6\x58\xb1\x7d\x39\x7a\x02\x79\x0e\x43\x9e\x36\xc8\x53"
+ "\x23\xe5\xc1\xf7\xdd\x38\xc7\x4b\xf5\x04\xdb\x75\xda\x38\xb3\x1a"
+ "\xde\xb7\x5b\x39\x4b\x26\xdb\xa3\x19\xed\xb0\x92\xd6\x5c\x7f\x3a"
+ "\x58\x98\x17\x55\x5e\x1e\x4f\x0d\x97\x27\x82\xdc\x89\x63\xbe\x08"
+ "\x2e\x8f\x67\xf3\x09\x37\xcf\xc6\xf8\x66\x18\x7b\x1c\xd7\x3e\x99"
+ "\xec\xbb\x79\xab\x20\x3f\x20\x0d\xf8\xb3\x17\x74\x84\x30\x3f\x12"
+ "\x9c\x5c\xb8\x79\x9e\x50\xc6\x15\xcc\xff\x19\x9e\x23\xe9\x2e\xbc"
+ "\x79\x77\x5f\xfc\x88\xbe\x33\x0d\x37\x7f\x84\xf3\x8c\xdb\x78\x56"
+ "\xc7\xfe\x75\xc0\xfa\x42\x59\x7e\xfd\x90\xc0\x6f\xe2\x84\xb9\xd8"
+ "\xe2\x09\x0b\xd9\x7e\xb6\x5b\xc6\x87\x69\xae\x3c\xd3\x5d\x78\x4b"
+ "\xdf\xfa\x07\xe6\x41\x9e\xf1\x50\x7e\x5f\x3b\xd3\xf0\x1b\xb7\xc4"
+ "\xb0\xb5\x82\x5b\xe2\x41\x96\xc6\x6d\xeb\x21\x72\x31\x3d\xbe\xce"
+ "\xe9\xc0\xf3\xfd\x3e\x7d\x71\xa1\x9e\x16\xfc\x38\x15\x5f\x1e\x87"
+ "\x67\x38\x6e\x72\x48\x75\xbe\x35\x1e\xcf\x0e\x60\x9d\x19\x6d\x6f"
+ "\x9d\x21\xd1\xd1\xd8\x01\x65\x67\x7f\x49\x6c\xb2\x5b\x8e\xe0\x1e"
+ "\x1b\x81\x26\x1b\xa4\x7d\x5f\xb7\x08\xe7\xb8\x85\xef\xb3\x3c\xc2"
+ "\x9a\x29\xee\x39\x46\x3a\x55\x20\xd6\xa0\xcc\x62\xe0\x85\x10\x1b"
+ "\x57\x76\xab\x30\xd6\xd9\x0c\xef\x85\x76\x0b\x7b\xea\x6e\x5d\xc1"
+ "\xfa\xc1\xad\x30\xfe\xb9\x35\x93\xf5\x03\x96\x86\xb1\xeb\x71\x2f"
+ "\xc4\x29\xd9\x2d\xad\x18\x9f\x16\xe8\x91\x88\x3e\xec\xea\xba\xa0"
+ "\xbf\x66\xf6\x20\x16\x12\x31\x0e\x21\xd0\xc1\xc6\x74\x14\xd2\xfc"
+ "\x96\x6a\xfc\x3e\xd2\x16\x63\xf3\x86\x69\xa2\x40\x0e\xdc\x9a\xdc"
+ "\x17\xe3\xf8\x32\x3c\x57\x71\x8b\x5f\xdf\x85\x48\x23\x17\xd4\xb9"
+ "\x0e\x6c\x66\xd3\x15\x5f\x42\xfd\x62\xae\xe3\xc3\x2f\x8f\xc3\x3d"
+ "\x9c\x50\x57\xb6\xcf\xcd\xc0\x78\xc7\x70\x10\x23\x83\x6f\xdc\x54"
+ "\xc7\xb0\xc0\x62\xa3\xcb\x6e\xdd\x2b\xd2\x4f\x88\x7d\x51\x92\xc1"
+ "\xe8\x20\xe6\x5f\xc8\xe6\x86\xa2\x7e\x06\xf5\x72\xc7\xff\x82\x74"
+ "\x61\x5e\x4f\xdc\xe7\xdd\x5d\x18\x13\xe9\x51\xe7\x2e\xe1\x2c\x62"
+ "\x07\x8e\xeb\x6f\x7d\x17\xbf\x65\x44\x1f\x63\x88\x8b\x13\x9e\xf8"
+ "\xbf\xb5\x1c\xeb\x89\xfb\x03\x5d\xaa\x09\x0b\xa9\x71\x42\x32\xd2"
+ "\x19\x7e\x73\x14\xfa\x42\x9c\x9f\xd8\xf3\x42\xec\x2b\xf8\x5e\x81"
+ "\x47\x3c\x5f\xd0\xc5\x31\x6f\x49\xba\x16\xed\x04\xf4\x35\xd1\x97"
+ "\x66\x5c\xb0\x05\xe4\x77\xa6\x68\x67\x65\xfa\xf5\x77\x78\x23\x89"
+ "\xc6\xf3\xce\xb8\x57\x1c\xf1\x46\x95\x0b\x74\xe8\x43\x19\xfd\x41"
+ "\x9a\x36\xdc\x02\xf5\xfd\xd9\xd2\xdf\x5c\x26\x9c\xb1\xec\x32\xdd"
+ "\xd8\x81\xfb\x84\xda\x8f\x67\x09\x7e\x8e\x14\x09\x99\x4e\xba\x8b"
+ "\xc5\xf3\xb6\x53\xd5\x02\x1d\xbe\x13\x62\x08\x60\x99\xa1\xfa\x03"
+ "\x96\xfd\x2c\x5a\xb4\xa7\xda\xc1\x9e\xb8\x1c\xda\x23\xe8\x29\xf8"
+ "\xff\xb2\x13\xb2\xdb\x8c\x2c\x06\x25\xf3\x69\x2f\xee\x77\x1c\xcd"
+ "\x7c\x04\xd8\x89\x70\x66\x5b\x76\x9b\x4c\x7b\x3d\x21\xed\xb2\xdb"
+ "\x46\x09\xfe\xa5\x0d\xca\x2d\x22\x0d\xb6\x6c\x63\xf5\x8a\x58\x94"
+ "\xc9\x09\x75\xc4\xfa\x05\x59\xb7\x1a\x51\x97\x8e\xee\x2e\xbc\x4d"
+ "\x2d\xf9\x16\x10\xda\x2f\xfa\x9d\x36\x5d\x83\x63\xa7\xdb\x36\x89"
+ "\xfa\xd3\x20\x7e\xdb\x30\xfc\x6f\xdf\x16\x2f\x96\x99\x2c\xf8\xde"
+ "\x06\xba\x40\xb9\xc9\x50\x8f\x52\x49\xa7\x8b\xfb\xf4\xa7\x31\x5b"
+ "\xe3\xb6\x2a\xb7\x3e\x67\x34\xf4\x3a\x37\xb4\x7a\x75\xba\x16\x06"
+ "\x0d\xa9\x8b\xd3\x97\xe8\xb5\x4b\xd3\xd2\x56\xa7\x69\xd1\xe9\x4e"
+ "\xbf\x58\x4d\x0a\x5a\x78\xdb\x61\x31\x9e\xdc\xde\xbe\x78\x72\x85"
+ "\x3f\x57\x7a\xc6\xf9\xb3\xca\x7e\xae\x1e\x99\xb1\xd5\xcf\xa7\xf9"
+ "\x2b\xa7\x84\xe3\xab\xe0\x3a\x04\x97\x09\xae\x6a\x1c\x6b\x2d\x72"
+ "\x90\x38\xd0\xd1\xc2\x78\xcc\x7d\x66\xfe\x36\xf4\x5d\x13\xd7\x22"
+ "\xfb\xf9\xd6\x0a\x5e\x4e\x04\xdf\x2a\xf9\x3c\xee\x67\x41\x3f\xe9"
+ "\x87\xe0\x32\xc1\x55\x0d\x97\xf0\x3b\xfe\xbf\x85\xf3\xbe\x55\x9e"
+ "\xef\x70\x7d\x9c\xe6\xff\x1d\xfd\xad\xd7\xd3\x3c\xb9\xb0\x0e\xc2"
+ "\xbf\xc4\xf2\xf5\xab\x03\x47\x0b\x6f\x56\x8a\xf9\x04\x3b\x2b\x3c"
+ "\x8f\x68\x7d\xe4\x0b\xa3\x85\xd7\xbf\x29\xe6\x13\x62\x08\x4b\xed"
+ "\x41\x1f\xfe\x90\x5f\xca\x27\xa7\x85\x31\xd5\x62\x3e\xe1\xec\x1f"
+ "\x9f\xcf\xf9\xfa\xee\x28\x9a\xef\xb0\x8b\xf9\xd4\x9e\xe5\x79\xe4"
+ "\x19\xcd\x17\x5e\xa3\xc1\x3c\x7c\x9e\x5c\xb0\x0d\x69\xe1\xcf\xa7"
+ "\x41\x7e\x9f\xbe\x4f\x83\xe3\x53\xec\xd1\xfe\x7c\x4a\x5d\xb2\x7c"
+ "\xe9\x1d\xcb\x57\x65\x60\x74\xaa\xf4\xd5\xcf\xa5\xe3\x7d\xd5\xe2"
+ "\x67\x85\xdb\xea\x45\xcb\x96\xb0\x7f\xd2\x57\x44\xe3\x3f\x2b\x00"
+ "\x6f\x78\x4f\x79\x2e\x15\x6f\x4b\x56\xe3\x63\xa6\x7e\xda\x73\x4b"
+ "\xa4\x30\xe1\x5e\xbe\x9f\xba\x0b\x6f\x07\xfb\xf7\xe7\x2b\x98\x3d"
+ "\x72\xfb\x16\xab\xec\x7a\x61\xbd\x31\x22\xcf\x4a\x8e\xe8\x84\x78"
+ "\x82\x64\x80\xcf\x04\xd9\xed\xbf\x45\x9f\x09\x11\x79\xa9\x4b\x22"
+ "\x9c\xcb\x97\x82\x9c\x35\xc1\x6f\xc1\xfe\x7d\x55\x3c\x93\xaf\x2c"
+ "\x15\xfc\x87\x16\xde\x1e\x29\xed\x71\xe4\x0d\xca\x39\xe8\x17\x5f"
+ "\xd8\xf3\xf4\x12\xfa\xe3\x51\x66\xc2\xf3\xf6\x8a\x97\x84\xf8\x34"
+ "\x91\xf0\x3c\x0f\x9e\xcb\xe0\x59\x03\xcf\x51\xfc\x16\x67\x03\x9e"
+ "\x91\x84\x67\x8c\x67\x36\xb5\xbb\xf0\x8e\xbe\xf8\x97\x9e\xb4\x11"
+ "\x03\xd8\xdd\xe1\x73\x8c\xde\xcf\xef\x18\x94\xa1\x97\xe2\x03\x0b"
+ "\xb1\x80\x0b\xef\xc8\xec\x8b\x05\x2c\xc4\x74\x52\x0b\xba\x89\xe9"
+ "\xf6\x3b\x4e\x87\x69\x26\x17\xb0\xb1\xc0\x1d\xbb\x25\xbf\x10\xcc"
+ "\xd6\xbf\xa3\xca\x23\x8e\x32\x3e\x9b\xfa\xe2\x28\x33\x3f\x66\x3b"
+ "\x05\xdf\x4b\xb2\x3b\xa1\x8f\xdf\x11\xdd\x17\xf3\xae\xf0\x8e\x36"
+ "\xcf\x98\x77\x56\x78\x8f\x63\xac\xee\xc2\x3b\x89\x5b\x0f\xde\xb1"
+ "\x1d\xbf\xe9\x2b\x66\xf4\x36\x0e\xc6\x03\xeb\x61\x3c\x00\x77\x61"
+ "\x6c\x20\xda\xe1\x98\x4e\xf3\xe3\xd0\xc7\x8e\x16\xdf\xa1\xed\xe7"
+ "\x73\xde\x43\xb0\x6b\xef\xdc\x81\xfe\x77\xed\x39\x29\xb2\x1f\x55"
+ "\xe0\x3e\x28\x78\x66\xfe\x23\xe9\x29\xd9\x9d\xc2\x19\x33\xc9\xb7"
+ "\x9c\xe7\xb9\x7c\x9f\xe7\x1f\x3e\x93\xd6\xad\x57\xac\x8e\x70\x2e"
+ "\x5e\xca\xec\xb8\x3b\xcf\x8a\xeb\xd4\xb9\x4c\xdf\xdf\x69\xa3\x8f"
+ "\xb0\xb8\x27\x56\xd9\x74\x3d\x9e\x89\x8a\x90\xad\x58\x4d\xe1\xb7"
+ "\x11\x99\x8b\x97\x0a\x69\x90\x6f\x33\xd8\x5a\x62\xfd\x3e\x32\x47"
+ "\xb5\x11\x7a\xc6\xc5\xfc\x0d\xc8\xee\xac\x7e\x72\x72\x2e\x7e\x47"
+ "\x21\xd8\x11\x9f\x11\x25\xc6\x1f\xc4\xba\x55\x78\xf8\xbe\xdb\x06"
+ "\x69\xb8\x27\xac\xf3\x11\xa2\x44\x5f\xbf\x62\x5d\xaa\x85\xf8\x67"
+ "\x85\xd3\x93\x25\xbf\x3d\x40\xf3\xea\xfe\xed\x79\xe4\x97\x42\x0f"
+ "\xb9\x76\xc9\xb4\xc4\xd9\xf0\xdf\x34\x31\x74\xae\x27\x76\xa2\x3a"
+ "\xc3\x23\x0f\x75\x56\xfe\xf5\x57\x42\xec\xc9\xc2\xe9\x20\xff\xef"
+ "\x64\xfe\x24\x36\x3f\xfe\x35\xca\x16\x21\x26\x23\x9e\x6d\xe4\xf1"
+ "\xec\xee\xcc\x3d\x82\x9f\x5d\x8e\xd9\x8b\x42\x5c\xa6\xc2\xe9\xe9"
+ "\x34\x5c\x19\xcb\xe2\xce\x4e\x4c\x02\xfe\x09\x7a\x1f\xfb\x86\x70"
+ "\x86\x53\x8d\x6d\x9f\x81\xe7\x5a\xef\x85\xeb\x57\x2c\x4e\xcc\xe3"
+ "\x5f\x4b\xe5\xa2\x0f\x2b\xc0\x96\x09\xee\xea\xee\xc2\x19\xd1\x7d"
+ "\xfb\x94\xfa\xce\x85\xce\x78\x18\xfd\x6b\xb9\xcf\x08\xcf\x14\xe7"
+ "\x35\x67\x2c\xb4\x92\x1f\x97\xb0\xfe\x3d\x03\xf0\xff\x89\x78\x3e"
+ "\x6c\x46\xba\x95\x3c\x58\xdf\xaf\x8c\xf7\xa4\xf9\x17\xc6\xbb\x19"
+ "\xa5\x80\xc5\x7b\xe1\xfa\x15\xe4\x7f\x45\x8a\xbb\xbd\x99\x13\xce"
+ "\x37\x1d\x0f\xd3\xe0\x19\xe0\x19\xef\x4a\xe9\xa3\x64\x71\x40\x9b"
+ "\x19\x35\x92\x3c\xe9\x0c\x9f\xa0\x87\x67\x0b\xd8\x9b\xf3\xc4\x67"
+ "\xe8\x73\x33\xda\xa5\x67\xf8\xdf\x21\xc9\x1b\x1c\x23\x76\x6e\x4c"
+ "\xda\x81\x63\xcf\x25\x1a\xb0\xc9\x34\x38\xc6\xbb\x4b\x63\x25\x1f"
+ "\x17\xb0\xdf\xce\xb0\x76\xe6\xd7\x46\x77\x85\x3f\xaa\xed\x02\x19"
+ "\x0a\xef\x62\xac\x64\xff\x51\x56\xce\x5d\x71\x56\xae\x69\xba\x9b"
+ "\x1f\x61\x11\x40\xe3\x74\xd6\xa6\x99\x99\xf0\x7f\x26\xc6\x40\x87"
+ "\x7c\x7a\xe8\x5f\x89\x6c\x4c\xd8\xbe\xdb\xd0\xa3\x9e\x67\x2e\x00"
+ "\x9b\x75\x19\x62\x65\xa6\x10\x3f\xda\xb8\x41\x9d\x88\x36\x1f\xfa"
+ "\x42\x10\x7c\xa4\xa1\xef\x49\x27\x19\x2d\xf8\xfb\x37\xde\xd5\x20"
+ "\xf8\xb9\x5f\xa7\x53\x4a\x7e\x27\xa9\x61\x5c\x1b\xe5\x5e\x6f\x47"
+ "\x5f\x94\xc2\x7c\x5e\xb7\x2e\x5c\xf0\x3f\x29\xfa\x9d\x2c\xcf\x20"
+ "\x91\x65\x3c\xf3\x3b\x29\xf8\x49\x18\xc4\xf7\x24\xcd\x3f\x51\x20"
+ "\xf9\x9e\x04\x3a\xe0\xf9\x47\x1d\x3d\xe3\x74\xc0\x7d\xaa\x87\xbf"
+ "\x1d\xb9\x4f\x3f\x94\x1c\xc8\x4d\x8e\xf9\xa1\x0c\x4e\xdf\xcc\x9c"
+ "\xc5\x70\x32\xb3\x40\x8a\x0b\xee\x91\x56\x0a\x38\x7f\x85\xa5\xcd"
+ "\x48\x14\xd3\x0e\x58\xc9\x47\xf6\x3e\xdb\x0c\xe4\x1d\xce\x6b\x42"
+ "\x3f\x3e\x0a\xe3\xe0\x1d\x9e\xfd\x8a\x08\x7f\xa8\xba\x47\x81\x5e"
+ "\x1e\x0d\xd7\x18\xbc\xe2\xfb\xe4\xc7\x19\xda\x80\x63\x84\x08\x19"
+ "\xe8\x9b\xcc\x30\x9a\xe0\x74\x86\x2d\x72\xca\x8e\xa2\xed\x89\xe7"
+ "\xbe\x13\x5c\x4e\xf4\x3f\x20\x4f\x70\x75\x62\xcc\xce\xa3\x78\x9e"
+ "\x6d\xdb\x32\x3c\x5f\x79\x15\xc5\x78\x35\x09\xae\x6f\xe8\x2e\x76"
+ "\x6e\xb4\x5e\x8c\xc3\x59\xe3\xca\xa0\xd5\xc0\x07\x25\x8e\x3b\xd0"
+ "\x07\x58\xb8\xcc\x41\xc2\x53\xc3\xde\x9f\x7b\xfa\x7d\x8a\xfe\xbf"
+ "\x30\x56\x19\x5f\xe8\x00\x59\xa9\x95\x2d\x72\x86\xe5\x9a\x9d\x36"
+ "\x21\x5e\x40\x82\x6b\x0c\x4d\xc8\x9c\x41\x85\x18\x63\x19\xf4\x30"
+ "\xc8\xd9\x30\x21\x2e\xf7\x7a\xda\x09\xff\x2b\x12\xd6\x77\x52\x8c"
+ "\x19\x0a\x65\x57\x27\x38\xf9\x9e\x84\x4c\x3e\x67\x51\xa6\x0c\x7e"
+ "\xf7\x4f\xf8\xdd\x3f\xa1\x3e\xd1\x50\xa6\x1a\x9e\x67\xd2\x5d\xcb"
+ "\xf0\x1c\x56\xae\x30\xf6\x81\x36\x9a\xc4\xb3\xad\x87\x30\x4e\x28"
+ "\xfa\x1b\x5f\xe4\x34\xe5\xee\x12\xcf\xaa\x0a\xf1\x6a\x33\x7b\xa9"
+ "\xf8\x9d\xd8\x84\xf5\x64\xe6\xa2\xf5\x57\x09\x67\x5e\xf1\x3c\x57"
+ "\x82\x53\x0b\xdf\xcc\x45\x7a\x28\x85\x18\xe1\xc2\x99\xae\xbb\xa3"
+ "\x07\x8b\x19\x8a\x7b\x55\xd6\x4e\x22\x1c\x9e\x11\x71\x55\x54\xd6"
+ "\xa3\x3f\xb2\x1c\x3b\x75\xe0\xdc\xe3\xfb\x3d\x0d\x9c\x36\x43\x0e"
+ "\x72\xf5\xee\xf9\x75\xa9\xd1\xbe\xcf\xf5\x15\x45\x81\xfd\x7b\x2c"
+ "\x85\x16\x5d\x75\x18\xee\x36\x6a\x98\x88\x7e\x7a\x64\xb4\xe8\x9a"
+ "\xed\xd4\x68\x81\xf4\x6b\x53\xe0\x6e\xa3\x45\xba\x18\x6a\x6c\x84"
+ "\xe7\x9f\xca\xe1\x0e\xcf\xa3\x6a\x20\x7f\x32\x2d\x1a\x8d\xbf\xb3"
+ "\xd2\xa2\x31\xef\x42\x3e\x78\x56\xbc\x09\x77\x78\xbe\xe4\x00\xe4"
+ "\x83\xe7\xb1\xaf\x1c\x97\xdd\xa3\x85\xff\x21\xed\x86\xa3\xec\x5b"
+ "\xd1\x47\x85\x6f\x15\xe1\x58\x0d\xbf\x71\xdb\x51\xf6\x8d\xdb\x8f"
+ "\xb2\x6f\x4c\x3f\xca\xbe\x31\xae\x0c\xf2\xe9\x69\x91\x4a\x09\xf7"
+ "\x36\x5a\x14\x9e\x05\xf9\xe0\x39\xa2\x1d\xee\xf0\x3c\x1e\xc6\x7d"
+ "\x8d\xf0\x3c\x01\xea\xd2\x08\xcf\x91\xd3\x21\xdf\x0a\x5a\x74\x69"
+ "\x15\xdc\xdb\x69\xd1\xe5\x53\x21\x1f\x3c\x6b\x4a\xe1\x0e\xcf\x57"
+ "\x40\x39\x8d\xf0\x7c\x65\x2e\xdc\xe1\x79\x26\xd6\x23\x95\x16\xdd"
+ "\x0d\xe5\x1e\xb3\xd3\xa2\x7b\x31\x3f\x3c\xcf\x82\xf2\x2c\xf0\x7c"
+ "\x5f\x3a\xe4\x83\xe7\xf8\x28\xb8\xc3\xf3\xfd\xd8\xd6\x74\x5a\xf4"
+ "\x60\x2a\xdc\xbb\x68\xd1\x43\x90\x6e\x81\xe7\xb9\xd5\x70\x87\xe7"
+ "\x44\xcc\x0f\xcf\x8f\x60\x7b\xe1\xf9\x97\x48\xa3\x4c\x5a\xf4\xe8"
+ "\x34\xb8\x3b\x68\x51\x92\x01\xf2\xc1\xf3\x02\xac\x3f\x3c\x3f\x31"
+ "\x07\xf2\xc1\xf3\x22\xa4\x15\x3c\x3f\x85\xed\xcc\xa2\x45\x29\x58"
+ "\xbe\x93\x16\x2d\x43\xba\xc0\xf3\xf2\x58\xb8\xc3\xf3\xb3\x40\x8f"
+ "\x46\x78\x5e\x45\xe0\xee\x13\x0f\xb4\x28\xb5\x81\xe6\x8d\x26\xb4"
+ "\x68\x43\x24\xcd\x1b\x03\xf7\x8d\x87\x69\xde\x28\x1d\x2d\xca\x99"
+ "\x0a\xe9\x70\xcf\x2a\x83\xe7\x69\xe2\x33\xdc\x37\xa5\xc3\x73\xb4"
+ "\xf8\x0c\xf7\xec\x39\xf0\x1c\x23\x3e\xc3\x3d\xf7\x28\x3c\xc7\xd2"
+ "\xa2\xbc\x03\xf0\x8c\xf7\x38\x78\x9e\x2e\x3e\xc3\x7d\x73\x2a\xdc"
+ "\x9d\xf6\xc9\x95\x3a\xbb\x6a\x9f\xd5\xae\x6a\x4e\x44\x4c\xba\x8a"
+ "\x8f\x25\xf3\xe1\xc7\xd0\x4f\xeb\xe8\x9c\xd3\x64\xcc\x71\xd9\xac"
+ "\x93\xa8\x23\xcd\x59\x56\x21\xbe\x9d\xe8\x1f\x6f\x74\x8b\xec\xde"
+ "\xaf\xc1\x26\x88\xc5\x98\xe9\xd0\xe6\x32\x9a\x3f\xaa\x03\xda\x1a"
+ "\x45\xf3\xc7\xb5\xc0\x1d\x9e\xc7\x7f\x06\x6d\x85\xe7\xdb\x8a\xe0"
+ "\x0e\xcf\x8f\xdf\x43\x8d\x4d\x51\xdd\x85\xb3\xe2\xad\xb2\xbb\x85"
+ "\xf8\xc0\xb4\xf2\xaf\x89\x11\xce\x1c\x90\x29\x20\x73\x77\x1c\x57"
+ "\x47\x38\x93\x81\x3e\xcd\xf6\x08\x8c\x43\x51\x5e\xa9\xa7\xe1\xfb"
+ "\x85\x3a\x61\xac\x19\xda\x3b\x95\x63\xdf\x1e\x47\x5b\x64\xb3\x9e"
+ "\xc3\xf9\x57\x1a\xfe\x77\x7f\xef\x7f\x2b\xbc\xbf\xe2\xb8\x96\xbd"
+ "\x57\x10\xf7\xfb\xc7\xf1\xfd\x5b\x11\x38\x67\x3e\xa5\x42\x78\x6f"
+ "\xee\x6a\x13\xdb\x15\x86\xef\x3e\xc5\xbc\x56\xd9\xac\x2e\x36\x7f"
+ "\x75\xaf\x83\xe6\x87\x91\x4e\xe5\xc4\xac\xee\xc2\xd9\x60\x0f\xde"
+ "\x2d\xfa\xae\x02\x5b\x59\xa9\x4c\x64\xbe\x10\x2e\xf7\xe7\xa7\x45"
+ "\xc1\x1b\x6c\xf1\xc6\x7c\x5a\x8f\x63\x52\xd0\x23\x9c\x36\x7b\xea"
+ "\xa1\x16\xd9\x7d\xf5\xe5\xc2\x5c\x43\x6b\x1b\x9e\x57\x6a\x91\xcd"
+ "\xfe\x6d\x6f\xf1\xc4\x2a\xed\x86\x08\xf8\xfe\x7d\x9f\xe6\x38\xe8"
+ "\x69\x53\xf6\x3d\xa0\xef\x84\xf4\x76\xb6\x07\x5e\xf8\xbf\x81\xed"
+ "\x5b\x12\xfe\x3f\xcc\xe6\x6e\xef\xab\xc7\xdf\x7a\x8e\x01\x5c\x85"
+ "\xab\x0f\xf3\xe1\xad\x76\xb6\xee\x36\x7b\xc7\x7b\xbc\x95\x8b\x48"
+ "\x27\xa3\xb4\x1b\xde\x87\xf2\x67\x5b\xbd\xc7\x8b\x52\x5e\xe1\xdd"
+ "\x91\xbf\x41\xde\x97\x85\xb9\x9d\xd9\x76\x69\x5e\x9a\x42\x1b\x5e"
+ "\x60\xb6\x52\x1c\xea\x36\x66\xf3\xdd\x97\x8a\x7e\x3a\x9d\xca\xe6"
+ "\x7a\xa7\x61\x5f\xbd\xcb\xd0\xda\x46\x8b\x5b\xed\xe1\x4e\x19\x61"
+ "\xe7\x07\xee\x7b\xf5\x26\x07\xce\xb9\x7d\x8c\x79\x9f\xe0\x47\xaf"
+ "\x2f\xb8\x31\x93\x70\xa6\xb4\x2f\xf1\xb9\x9c\x16\xe6\x44\x99\xdb"
+ "\x1b\x88\x29\x4d\x28\xab\x8c\x16\x16\xd5\xf0\xa3\x0b\xaa\x2b\xd0"
+ "\x56\xcd\xc4\xb9\xa2\xcf\x30\xfd\x6a\xe0\x0b\x8c\x09\xee\xcb\x92"
+ "\xea\x82\x31\x03\x8c\x40\x3b\xb4\x23\xf1\xbc\xf7\x22\x97\x0b\x7d"
+ "\x53\xc1\x98\xe8\xbe\x7a\xc6\xaf\xfb\x92\x51\x6e\x8b\xdf\x7d\x8b"
+ "\x0f\x9f\x58\x56\xb7\x10\xd7\x76\x15\xe8\xeb\xe7\xb4\x70\x3e\xd4"
+ "\x89\x71\xfe\x50\x5f\xb2\xbc\x9e\xbc\x5b\xb9\x24\x75\xd1\x86\xd4"
+ "\xd5\x69\xe9\x8b\x9e\x4b\xbd\x43\x0b\x03\x39\xed\xea\x65\xda\x95"
+ "\x4b\x57\xae\x4e\x5b\xdf\xdf\xde\x54\x74\x17\xfe\x22\xd2\x2a\x9b"
+ "\x2d\xd8\xac\x1f\x81\x0d\xcb\xe6\xc1\xe3\x6d\xc8\xeb\x1d\xbf\x63"
+ "\x71\x25\x20\x4f\xac\x95\x54\x0a\x7e\xca\xf8\xd2\xe3\x0a\x5a\x56"
+ "\xa9\xdf\x8a\xe7\xdc\x9f\xc3\x31\x83\x9d\x98\x49\x07\xd4\x8d\xc5"
+ "\x18\xac\x43\x5f\x0c\x19\x59\xd4\x94\xd1\x81\xfd\xa0\x0d\xfa\x8b"
+ "\x03\xfa\x41\xd5\x59\xe3\xfe\xf8\x16\x59\x7c\xf5\x59\x63\x53\x9b"
+ "\x14\x07\xc8\x65\x68\x8e\xe7\x95\xb6\x64\x8c\x03\xd4\x4b\x35\xa4"
+ "\x16\x68\xd9\x63\x98\xb8\x05\xf4\x40\x41\x79\x3e\xe8\x31\x18\x6b"
+ "\x08\x3e\x20\x2a\xff\x1a\xed\xa2\x3a\xb9\x2b\x9f\x28\xe0\x1e\x4e"
+ "\xc3\x5b\x4b\x7a\x95\xcd\x56\x7c\x8f\xf1\x7f\x5c\xbd\x3a\x92\x7d"
+ "\x94\xf2\x0b\xf4\x80\x9b\x7c\x42\x85\x98\xab\xfa\x93\x04\xd2\xc7"
+ "\xf2\xc5\xcd\xa9\xc7\xe3\x09\x87\x79\xc1\x4e\x22\x0b\xe1\xff\xac"
+ "\xc5\x44\x05\xf9\x22\xb2\x3e\x82\xf4\x6e\xdd\x58\x67\x8e\x4e\xd1"
+ "\x93\xa3\x1b\xdb\x4b\x75\x4a\xb3\xcd\x41\x7a\xaf\xfd\x6b\xdc\x0d"
+ "\x76\x22\xdf\x01\xf6\x54\x39\x0f\x7d\xb0\xac\x32\xd1\xb5\x51\x37"
+ "\xda\xb9\x51\x27\xef\xed\xd5\x29\x9c\xeb\x74\xf2\x9e\x75\xba\xd1"
+ "\xbd\xdd\x3a\x85\x39\xc5\x4e\x3e\xb6\xef\x23\x75\xb6\x36\x61\x9e"
+ "\xb2\x57\xd5\x5a\xd6\xab\x6a\xce\x52\xda\x48\xe4\x8d\xa9\x60\x57"
+ "\x81\x9d\xb9\x13\x6c\x6a\xc0\x84\xd2\xf9\xea\x5f\xa3\xa9\xb1\x35"
+ "\x0e\xe8\x7b\x70\xf6\x75\xf4\x1b\x57\xe1\xdc\x5c\xed\x03\x20\xaf"
+ "\xf2\xe4\x51\x90\x06\xf8\x59\x60\xa7\x85\xbf\x8a\x85\xf1\xbd\x16"
+ "\xae\xa9\x56\xc6\x07\xb0\xe5\x1e\x8a\x81\xe7\x28\xcc\xcb\xf2\xfd"
+ "\xb2\xc0\x2a\xdc\x13\x8e\x0a\xb1\x51\x0b\xef\xb3\x94\x0b\xe3\xbe"
+ "\x78\xab\x64\xaf\x1f\x96\xfb\x3e\x4b\xdf\x5d\x78\xbf\xbc\x6f\xfc"
+ "\xcc\x83\xcc\x31\x1e\x4b\xf4\x29\xcb\x8b\xc7\xcd\xc3\x75\x56\x1e"
+ "\xe8\x76\x5c\x76\xff\x73\xe8\xff\x8a\xe6\xc4\x8b\x63\xd6\xfb\x85"
+ "\x79\x2c\x3c\x7f\x8e\xf3\x1a\x62\x1a\xf3\xe3\xce\xc5\xa1\xcf\xff"
+ "\x43\xe8\x73\x0c\xe7\x31\x00\xd7\xd5\x56\xd9\xfd\x5b\x80\x0e\xa3"
+ "\x60\xbc\x57\x05\xd7\x21\xb8\x4c\xbf\xc1\xf9\x8d\x7c\x32\x5b\x9a"
+ "\xfb\xf1\x53\x57\x18\xff\xfe\x71\x96\x7b\xfc\x7b\x3f\x8c\x7f\xef"
+ "\xd7\x04\xbf\x47\xf1\x7e\xd3\x20\xf3\xd0\x72\xf4\x9d\x4b\x8b\x8f"
+ "\xe5\x96\xf0\x7d\xbe\x76\x41\x37\x3c\x70\x29\xc8\x89\x5c\xe1\x9d"
+ "\xa1\xd9\x9e\xfd\x2d\x09\xc3\x77\x55\xb8\x27\x03\x9e\xb5\x69\x32"
+ "\x6a\xee\x72\x90\x12\x5c\x97\x88\xaa\xd4\x57\x9d\xb1\x73\xd8\x2f"
+ "\x70\x6d\x07\x7e\x7b\x43\xc9\x19\xb1\xdc\xd2\xe3\xea\x9c\x35\x44"
+ "\x88\x61\x82\x71\x90\xb0\xbf\x94\x64\xc3\xd8\x12\x63\x36\xa5\xa1"
+ "\xac\x7e\x60\x39\xfc\xaf\xc0\x7c\x54\xd9\x6c\xe7\xa1\x0c\xe8\x37"
+ "\x49\x54\xd5\xdc\xc0\x1b\x9b\x93\xa1\xef\x68\xe9\xe4\xca\x6a\x7e"
+ "\x47\xab\xa3\xbb\xf0\x01\x68\x7f\x3c\x8b\x3f\xad\x70\xec\xc5\xb9"
+ "\x13\x17\x8c\xe1\xeb\xf6\x3a\x09\xbd\xc7\x49\x8e\xa4\x9f\x26\x76"
+ "\xd5\x44\x83\x5d\x65\x8b\xb7\xab\x5a\xe3\x5c\x2a\x5b\x09\x5c\xdb"
+ "\x53\xd3\x70\x4d\xfb\xc1\x82\x3e\x1f\x9d\xdf\x0e\xee\xa3\x13\xca"
+ "\x9c\x2a\xf9\xe9\x74\xad\x0b\xde\x47\xa7\x8b\x6b\xc9\x2c\xcf\x18"
+ "\xda\x47\x27\xd8\xac\xf5\x60\xaf\x9a\x24\x7f\x2a\x2e\x61\x8f\x3c"
+ "\x51\xba\x54\xcd\xd5\x82\x4f\x96\x4c\x93\xe0\x57\x05\x6d\x57\xd4"
+ "\x35\xdd\x85\x0f\x9a\x24\x7b\x14\xe5\xa7\xcb\x38\xb1\x14\xae\xed"
+ "\x90\xde\x60\x95\x2d\x52\x4b\xb2\x15\x74\x2e\x71\x8d\x35\xc6\x0a"
+ "\x6b\x62\xbd\xfa\x99\x98\x17\xe8\x88\x73\xb7\x61\xae\x5e\xfd\x74"
+ "\xb8\x66\xc0\x75\x97\xcb\xd8\x64\x77\x19\x5b\xb5\x2e\xe3\x7e\x18"
+ "\x0b\xed\x57\xc0\xa5\x84\x4b\x0d\x57\x24\x5c\x1a\x6a\xdc\x1f\x05"
+ "\x77\x7c\x3f\x15\x2e\x1d\x5c\xd3\xe0\x8a\x86\x2b\xc6\xb5\x03\xbd"
+ "\xec\xc9\xa3\xe0\x9a\x0a\x17\xe4\xb1\x6d\x81\x2b\xc9\x65\x6c\xae"
+ "\x67\xe7\x51\xe7\xac\x90\xb0\xea\xdb\xd7\xc1\x0c\x16\x97\x61\x54"
+ "\x33\x8d\xc0\x98\xc1\x59\xa7\xd1\x47\x5f\xc3\x11\x5d\x57\x70\xf1"
+ "\x39\x64\x73\xca\xfc\x61\x1b\xcb\x07\x39\xd3\x1b\x64\x79\xed\x7e"
+ "\xe7\x61\x34\xc7\x15\xce\xa8\xca\x2a\x67\x3e\xc9\x05\xd9\x26\xab"
+ "\x4b\xb6\x91\x04\x3b\xc9\xa9\xb1\xf5\x90\x9c\x14\xea\x12\xe4\x40"
+ "\x16\xc6\x81\x79\xbd\x1d\x71\xee\xa2\x49\xda\x5e\x43\x93\xc3\xa5"
+ "\xb4\x69\xa9\xd2\x96\x24\xf8\xfd\x03\x79\x82\x71\xd0\xfa\xc6\xb5"
+ "\x88\x3b\x18\xdb\xd6\xb6\x9f\x26\x1b\x53\x28\x5f\xab\x07\x1b\xad"
+ "\x01\xc0\x27\x23\x7b\x04\xfc\x89\x63\xdb\x07\x2d\x34\x17\xf0\x74"
+ "\x89\x0b\xe8\xc6\xe3\x98\x16\xb0\xb7\x2b\x83\x44\x4b\xf8\x03\xbd"
+ "\xae\x96\x62\x47\xd1\xd1\x73\x72\xe1\x9d\x1c\x63\x4b\x95\xc1\xd8"
+ "\xb6\x2c\x83\x4c\x2d\x83\x77\x42\x1c\x50\xa8\xf7\xdc\xd4\x08\xca"
+ "\x3f\xab\x23\x15\xcf\x10\x85\xea\x24\x8b\x2d\xeb\x02\xda\xbb\xe3"
+ "\x2b\xec\x8f\x7f\xe8\xa4\x96\x1c\xd1\x35\x82\x7e\xae\x02\xbe\xec"
+ "\x8f\xef\x05\x1d\x06\xb4\x74\x05\x47\xcb\xb9\xb1\xe7\x8a\x96\xbd"
+ "\x51\x95\x89\x8c\x9e\xc9\x04\x69\xd6\x9f\x9e\x48\xe3\x0d\x36\xa0"
+ "\x27\xd0\xd5\x7c\xd4\x05\xe3\x53\xb2\x58\xa2\xe7\xcb\x40\x4f\xa0"
+ "\xa9\x06\x69\x0a\xf4\x10\x68\x4a\x45\x9a\x56\x78\xd0\x14\xe4\x97"
+ "\xe0\x23\x11\x69\xca\x03\x4d\x2b\xfc\xd0\xb4\x6f\x8e\x00\x68\xba"
+ "\x2b\x20\x9a\xee\x1d\x06\x4d\x13\x0c\xfe\x68\xea\x44\xdb\xa1\x78"
+ "\x7f\x1c\x05\xd9\x68\x76\x7e\x2c\xf8\xfb\x04\xbb\x6f\x3b\xd8\xaf"
+ "\x25\xbc\xb2\x39\x1e\x63\x85\x63\xbc\x33\x8c\x65\x26\xf8\xa7\xda"
+ "\x4b\xcf\xba\x8a\x5b\x77\x63\x1a\xc8\x36\xfd\x4d\xb8\xcf\x29\xd5"
+ "\x0a\xfa\x8b\x1e\xaa\x3b\x83\xf3\x6b\x8f\x1c\xe9\x41\xdb\xbb\xb8"
+ "\xb5\x99\xa7\x7a\x82\x72\xe5\xc9\xeb\x88\xbc\x07\x64\x47\x6a\x06"
+ "\xb9\xaa\x04\xe4\x61\x8f\xd1\xb6\xfd\x84\x2c\x31\x79\x76\x2a\x4f"
+ "\xe1\xca\x41\xbf\x95\x3c\xc8\x5d\x90\xe7\x02\x7f\x91\x67\xb8\x6e"
+ "\x58\xfb\x24\x9e\xa3\x79\xf8\xe1\x4f\x92\x9d\x24\x47\x3f\x90\xbf"
+ "\x7c\x4e\x92\xd6\x65\x18\xba\x9f\x60\x3c\xc5\xac\x36\xe4\x6b\x15"
+ "\x31\xdb\xdc\xfd\x84\x17\xe5\x34\xf2\x02\xfb\x05\xf6\x91\x6d\x1e"
+ "\xf2\x19\x64\xbf\xba\x5c\x8c\x2f\xe2\xca\x07\xf9\x8c\x7e\xec\x81"
+ "\x97\x18\x77\xc4\x67\xff\xd8\x08\xfd\x63\x83\x10\xfb\x49\x03\xf4"
+ "\xa8\xea\xe9\x66\x3c\x44\x9e\x99\x9d\xd5\x02\xff\x4a\x44\x7d\xc0"
+ "\xe8\x6e\x7b\x9c\xd2\x24\xb0\xe9\xee\x6d\xe0\x8b\x5b\x4b\x68\xb7"
+ "\x7e\x2c\xc6\xff\xda\x75\x0a\xf0\x94\x02\x36\xd4\x37\xa0\x2f\x56"
+ "\x01\xbe\x4e\x91\xa9\xbb\x56\x81\x5d\xd4\x8d\x31\xdc\xa0\x3e\xeb"
+ "\x59\xec\x5b\xbe\x70\x8e\x0d\xde\x09\x7e\x38\x79\xc9\x0f\x67\xa7"
+ "\x0e\xe7\x36\xdc\x73\x4e\xab\x75\x9c\xfb\x9b\x93\x52\x5d\xca\x7b"
+ "\x1b\xd8\xb9\xd9\x47\x04\xff\xe3\x54\xd1\x8b\xe7\x17\x49\xbb\xec"
+ "\x91\x39\x6c\x6e\x98\x58\x52\xb3\x71\x3f\xd3\x23\x32\x5a\xac\xa8"
+ "\x4f\xc5\x38\xde\xd2\xbb\x9c\x24\xa4\x43\xea\x8d\xb9\x24\xd7\x65"
+ "\xbc\xd7\x81\xf1\xdd\x71\x7f\x45\x70\x58\x7c\x44\x38\x67\xe0\x32"
+ "\x4c\x4a\x07\x3a\xc5\xf1\xc5\x93\xb2\x40\xa6\x44\xd3\x67\xa1\xad"
+ "\xcf\x40\x5b\x4f\x00\x5d\x4f\x40\x5b\xd7\x89\x6d\x15\xe3\xda\xf1"
+ "\x40\x7f\x78\xe7\x5b\x3f\x4a\x6d\x7d\x16\xe8\xbd\xc5\xb1\x77\xd3"
+ "\x49\x32\x91\x82\x4d\x5e\xdb\x2e\x9c\x59\xea\x36\x3b\x1b\x09\x7e"
+ "\x57\xd0\xdf\x86\xfd\x9a\xf9\x80\x47\xa4\x39\xd8\x0c\xb9\x34\xbc"
+ "\x39\x55\xe2\x03\xd6\x87\xf6\xea\xc7\x56\xac\x82\xfa\x20\xed\x4f"
+ "\x91\x69\xd8\x9f\x81\xf6\x53\x2b\x90\xfe\xde\xb1\xa5\x23\x05\x1e"
+ "\x8c\x06\x1e\xac\x12\x79\x60\x14\x79\x00\x36\x33\xe8\x62\x9c\xeb"
+ "\xd1\x54\xe4\x33\x1e\x04\x47\xa3\x5f\x4e\x1f\xe1\xfe\xfa\x8a\xff"
+ "\xfe\xfa\xe8\xfa\x1e\x36\x96\x96\xa1\x3f\x50\x18\x27\xfc\x93\xef"
+ "\x85\x7e\x5b\x2c\xf6\x5b\xaa\xbf\x4b\xea\xb3\xc7\x65\xf3\x2e\x0d"
+ "\xac\xcf\xce\x1f\xf5\x03\xed\xb3\x91\xe7\xb6\xcf\xce\xaf\xf5\xee"
+ "\xb3\x8f\x12\xef\x3e\x3b\xff\x2d\x77\x9f\x15\xdf\x8d\x48\x9f\x9d"
+ "\x5f\xf3\xdd\xf4\xd9\xf9\x35\x3e\xfa\x6c\x41\x00\x7d\x56\xe3\xa7"
+ "\xcf\x6a\xce\x5d\x9f\x7d\xd4\x7e\xfe\x74\xec\x82\x9b\x7b\x38\x1f"
+ "\x3a\x76\xa3\x87\x8e\x55\xa1\x8e\xfd\xd5\x61\x5f\xfd\xb5\xb7\x0c"
+ "\xfa\xab\x52\xec\xaf\x0b\xfe\x13\xca\x4b\x7a\xef\x63\xcb\xd0\xfd"
+ "\xd5\x59\xe6\xb6\x9f\xfc\xf6\x59\x3d\xf6\xd9\xbd\xc4\x6c\x15\xfa"
+ "\xec\x62\xa9\xcf\x96\x89\xe3\xa1\x41\xfa\x6d\xa4\xbf\x7e\x8b\xb1"
+ "\xbe\x30\xce\xd7\xa0\xfd\x56\xb4\x97\x7a\x27\x63\xbf\x35\x5d\x60"
+ "\xba\xf6\xb1\xe7\xbd\xfb\xed\x63\x87\xbc\xfb\xed\x63\x2b\xdd\xfd"
+ "\x56\x7c\x37\x22\xfd\xf6\xb1\x82\xef\xa6\xdf\x3e\x56\xf0\xfd\xd1"
+ "\xb5\x0b\xfc\xfa\xf9\x1e\x79\x5d\xfb\xc4\x49\xa1\xdf\xfa\xd3\xb5"
+ "\x39\xa2\xae\x55\xa1\xae\x7d\x3c\x2f\xb0\xbe\xbb\x70\xfd\x0f\xbc"
+ "\xef\x9e\x63\x9d\xfb\xc4\xdd\xde\x7d\xf7\x89\x74\xef\xbe\xfb\xc4"
+ "\x75\xee\xbe\x2b\xbe\x1b\x91\xbe\xfb\x44\xdc\x77\xd3\x77\x9f\x88"
+ "\xfb\xfe\xe8\xdc\x27\x53\xfc\xf5\x5d\xed\x14\x92\xdb\x22\x7b\xf2"
+ "\x3d\x73\x99\xb0\x37\x30\xd7\xec\xbc\x43\xdc\x3b\xfe\x64\xab\x59"
+ "\x13\x4b\xf8\xe2\x48\x21\xde\x05\xee\xa5\xf9\x8d\xc7\x5e\x15\xb6"
+ "\xb7\x62\xd1\x28\x69\xaf\xcd\x2e\x31\x26\xc6\x60\x7b\x6d\xa8\x61"
+ "\xe2\x76\xf1\x77\x71\x0c\x1b\x13\x4b\xa5\x67\xe6\x8f\x6b\xd1\x2c"
+ "\x6a\x9c\x58\x62\x57\x4d\x2c\xf1\xb7\x5e\x14\x9e\x47\x29\xc6\x92"
+ "\xea\x9c\xf2\xb6\xb5\xb3\x88\x90\x12\x61\x2d\x66\x51\x16\xb4\xf1"
+ "\x15\xb6\xc7\x62\x81\xa9\x33\x3f\x91\x40\x5a\x89\x94\x26\xc4\xd7"
+ "\xce\x0f\xa3\x3c\xbc\xa3\xc5\xfb\x0e\xec\xca\x26\x0a\xf4\x71\x7a"
+ "\xe3\x19\xc4\xe2\xa2\xdd\x20\x23\x22\x31\x1e\x15\xc6\x00\xa1\x97"
+ "\x5f\xd9\x55\xd1\x41\xe4\x75\x05\xc2\xfc\x33\xee\xd1\xd9\x5d\x8c"
+ "\xf8\x0f\xbb\xbe\x94\x72\x72\xc2\x97\x57\x1e\xa2\x2a\x5b\xa9\xb0"
+ "\x27\x18\xb0\x22\xed\xdb\xc1\x58\x6e\xfc\xe4\xca\x24\xc9\xc7\x26"
+ "\x85\xfa\xfd\x2d\xdb\xce\x61\x1c\xf4\x8a\x34\xa2\x86\x4b\x49\x8d"
+ "\xb6\xd2\xee\xc2\x64\x9d\x34\x9f\xe8\x77\x7f\x37\xc6\x08\xbe\x52"
+ "\x23\x17\xf7\x08\xe1\x59\x61\xc1\x87\xee\x36\x8e\xdf\xe2\x82\x74"
+ "\x9a\x9f\x23\xc4\x04\x8b\x00\x5a\xe0\x9e\x5c\x8c\xd5\xc4\x57\xbc"
+ "\x6d\xdd\x7c\x05\x21\xaf\x6f\x68\xe3\x70\x3f\x88\xeb\xf7\x57\x76"
+ "\x99\xb2\x6f\x11\x62\x65\xa3\xaf\xf2\xe3\xb2\xc5\xd7\x26\x7c\xcd"
+ "\xe2\x01\xc3\xff\x37\xe3\x1a\xcc\x43\xf0\x8c\xfb\x03\xf8\x4e\x8d"
+ "\x1c\xf3\x1e\x97\x25\x37\x9a\x32\xbe\x24\x11\xa9\x44\x51\x0c\x6d"
+ "\x63\x79\x93\x0f\x74\x09\xfe\x73\x16\x0b\xfb\x6e\xe1\xd9\x84\xeb"
+ "\x06\xf0\x3b\x05\xee\x83\xa2\x65\x95\x87\x04\xf9\x60\xb0\x95\x42"
+ "\xfb\x0f\xb1\xfd\xac\xb6\xd2\x6d\xd0\x66\xc8\xa3\xc4\x3d\x3f\xc2"
+ "\x3d\x9b\xa8\xb7\xa7\xa1\xcf\xd6\xc5\xd1\x70\x57\x9a\x56\xe1\x7e"
+ "\x95\xe4\x32\x2c\xdb\xff\xb9\x01\x5b\x29\xcd\x97\x13\x76\xfe\x48"
+ "\xf6\x69\x8b\x6c\x71\x7d\x84\x8c\x52\xf8\x66\xd2\x66\x9c\xe7\xc6"
+ "\xbd\xda\xc2\xfe\xf3\xc5\xaf\x41\xf9\xf2\x5d\xc2\x3c\xee\xe2\x2d"
+ "\x56\x59\x72\x4c\xdf\x3e\x7f\x61\xcd\x69\xb1\x15\xbf\x83\xbf\x11"
+ "\xf3\x8b\x7e\x48\x6c\x80\xbf\x30\x0a\xcf\x1f\xb1\xfd\xdc\x8a\x3f"
+ "\xc3\xef\xab\xdd\xfb\xd8\x84\xdf\x01\x96\x16\x5b\x80\x67\xc2\x9e"
+ "\x1b\x7c\xf6\xbb\x57\x5a\xe4\x5b\x2d\x8c\xdc\x07\xf0\x4e\xc2\x08"
+ "\xe0\x42\xc2\x08\xd6\xf7\x8d\x6c\x2b\xc7\xd6\x38\x9e\x12\xf6\xad"
+ "\x15\x03\x0f\x5d\x2f\x6b\xe4\x82\x2f\xf3\x5e\xe4\x0b\xee\xb9\x5f"
+ "\x72\x35\xf2\x65\x1b\xe8\x02\x31\xef\x2c\x77\xfd\xf1\x79\x89\xc0"
+ "\x4f\x1e\x78\xc1\xf6\xfe\x3f\x75\x5a\x88\x8b\x03\x32\x03\xf7\x9d"
+ "\x1f\x86\xd6\x52\xc4\x2d\x60\xe4\xf5\x34\x07\x57\x91\xc1\xd2\xff"
+ "\xd6\xe1\xe0\x70\x2f\x09\xce\x87\x1b\x9f\x21\x72\x9c\x57\xc7\x32"
+ "\x69\x54\x65\xd2\x4d\x12\x1f\x37\x00\xef\x32\x00\xbb\x40\xf3\x6d"
+ "\x40\xbf\x8a\x1e\x61\xcd\x2a\xa9\x82\x27\x4a\x1e\xf2\x59\x65\x4b"
+ "\xa2\xa1\x3c\x75\xf9\x65\xd4\x8e\x7b\xbd\x81\x86\xff\xe8\x2e\x5c"
+ "\xd2\x77\xfe\x01\xeb\x84\x7b\xb5\x8d\xc2\x9e\xfd\xa7\xb6\x30\x0c"
+ "\x3d\x95\x24\xb5\xd9\x1f\x3d\x8d\xaf\x93\x28\xe3\x8d\x24\x96\x57"
+ "\xce\x68\xa0\x61\x57\xee\xc6\xf9\xe6\xb9\xed\x84\xa0\xef\xfe\x84"
+ "\xe7\x9b\xa9\xd9\xee\x22\xbc\x6a\x46\x03\xae\x4f\xb8\x36\x5f\x3f"
+ "\x21\x61\x3d\x9e\xb1\x68\x72\xe4\x38\x88\xda\x9c\x6d\x67\xf1\xdb"
+ "\xc8\xb7\xc4\xb5\x16\x64\x38\xc8\x75\xd0\xa9\xf2\x9c\x6f\xc9\x24"
+ "\xa4\x17\xaf\x6a\x72\x00\xcd\xbe\x9a\x9f\x4e\x72\x83\x93\xa3\x4b"
+ "\x04\x7f\x4c\x68\x5f\x80\xcc\xe7\x70\x8f\x9e\xd9\x0e\xf6\x89\xb1"
+ "\xc9\x11\x64\x39\x03\xf6\x5b\x7b\xb6\x9b\xc7\x79\x68\xb1\xcd\x09"
+ "\xd8\xe6\x2e\x07\xc1\xb9\xfc\xb9\x6b\xd0\x47\xea\x69\xc2\x1b\x67"
+ "\x34\x60\x9b\xc1\xd6\xc9\x0c\x7e\x4e\x3f\xc5\x6f\x8c\x6f\xfc\x36"
+ "\x05\x7a\xf3\x9b\xaf\xdc\xcd\x2b\x6d\x99\xf8\x6d\xac\x03\x9e\xd9"
+ "\x99\x7b\x9a\x08\x74\x47\xfa\x9b\x1d\x2e\x42\x55\x9e\x75\x70\x06"
+ "\x5b\x07\xff\xed\xbf\x91\x44\x19\x5e\x67\x7c\x77\x6d\x16\x69\xa0"
+ "\xc7\x75\x32\x5b\x26\xfa\xee\x9f\x8b\x75\xb0\x9f\x24\x0f\x9d\x24"
+ "\x02\xff\xcd\xba\x76\xe2\x0a\xbb\x7e\x02\xee\xbd\x40\xfe\x67\x3b"
+ "\x81\xff\x67\x1c\xe8\xd7\xc4\x6e\xce\x3d\x4b\xd0\x7e\x71\x76\xea"
+ "\xb8\x81\xfc\x5f\xfa\xd5\xfc\xcc\x60\xf9\xbf\x74\x84\xf8\xbf\xf4"
+ "\x02\x68\xff\xb2\x10\xda\xbf\x6c\x84\xda\xbf\xec\x02\x68\xff\xd3"
+ "\x21\xb4\xff\xe9\x11\x6a\xff\xd3\x7e\xdb\x7f\xef\x24\x9e\x0a\x7b"
+ "\x72\xc2\x8f\x25\xa3\x0e\x60\xfa\x4a\xff\x05\xee\xbf\x11\xce\x68"
+ "\x89\xcf\x84\x9d\xd9\x52\xf4\x7b\x56\xf6\x7b\x56\xf7\x7b\x8e\xec"
+ "\xf7\xac\xe9\xf7\x1c\x25\x3d\x83\x1e\x19\x75\x4a\xa6\xbf\x1f\xec"
+ "\xd2\x5c\xab\x4c\x6f\x13\xdf\x4f\x45\xbf\x3f\xa0\xd3\xa7\xfa\x8b"
+ "\x21\xa8\x92\x11\xda\xcb\x51\x22\xc4\xf6\x93\x2d\x4f\xea\xc9\x27"
+ "\x94\x86\x5d\xa1\xc3\xf8\x6b\xbc\x61\xff\xd4\xb9\x20\xa7\xcd\x76"
+ "\x07\xd8\xf9\x9a\xd1\x50\xf6\xe5\x18\x57\x12\xf9\xaa\x4d\xc3\xfd"
+ "\x35\xcb\x67\x63\x3b\x6f\x4c\x35\x11\x3e\xec\x7a\x61\x7f\x03\x6f"
+ "\xdc\x3f\xd5\x1e\x76\xfd\x15\x74\xc7\x71\x62\xcc\xe7\x15\xe6\xf6"
+ "\xa3\xa4\x98\xe3\xb5\x59\x59\xc0\xdf\xf6\x37\xc9\xc6\x76\xda\x96"
+ "\xe5\xa4\x0e\xf3\x42\x13\xc9\xb1\x63\x5c\x96\x6a\x52\x67\x3f\x2a"
+ "\xc4\x66\x11\x62\xd0\xd8\xdf\x24\x68\xff\xe4\x60\x1e\x48\xab\xb3"
+ "\x1f\x20\xb5\xf0\x6c\x5a\xd5\x0a\xed\x5c\x7e\xda\xdc\x7e\x00\xc6"
+ "\x4b\xfb\xb5\xbc\x72\x3f\xd8\x1b\xfb\x15\xb5\xed\x18\xd3\x65\xbf"
+ "\x12\xeb\x5a\x07\xf5\x30\x3b\x0f\xe1\x38\x4b\x29\x94\xdb\x55\x2f"
+ "\x8c\x49\x71\xdd\x96\x57\x41\x7e\xd5\x7e\x05\xd6\x0f\xeb\xe6\xdb"
+ "\xde\x3d\xb6\x1d\xea\x7e\xc7\x7c\x9d\x9c\xe0\xb9\x8a\xe0\x30\xf2"
+ "\x8c\xc6\xbf\x1d\x6d\x89\x64\xe5\x2a\x42\x29\xd7\xaf\xfc\x87\x72"
+ "\xc5\xfa\xaa\x43\x29\x77\xc0\x9e\x74\x77\xb9\x8d\x62\x7d\xb5\x21"
+ "\x94\xfb\xac\x76\x90\x72\xc5\xfa\xc6\x85\x52\x6e\xa6\xff\x72\x9b"
+ "\xc4\xfa\xe6\x86\x52\xae\x7f\xff\x0f\x80\x87\xd0\xb0\xb0\x62\xea"
+ "\x60\x58\x08\x0d\x07\x2b\x06\x69\xbf\x65\x7b\x68\x18\x58\x51\x33"
+ "\x18\x06\x42\xe3\xff\xca\x41\xf9\x1f\x1a\xef\x57\xa6\x0f\xc6\xfb"
+ "\xd0\xf8\xbe\xd2\x2f\xfe\x71\x6c\x00\xbc\x4f\xa4\xe1\xad\x76\xbe"
+ "\x78\x7f\x22\x1f\x7e\xec\x91\xcd\x7c\x1c\xb9\x77\x13\x21\x11\xa5"
+ "\x64\xfc\xbd\xe5\xcd\x34\x4e\x18\x73\xaf\x4a\xde\x54\x46\x38\x18"
+ "\x43\x73\x07\x37\x34\x70\x66\x67\x2c\xca\x2d\xd7\x2b\x19\x0e\xd9"
+ "\x8f\x20\xfd\x03\xd0\x83\x5d\x60\xcb\xb2\xb2\xf6\x27\x16\x67\xc7"
+ "\x11\xe1\xcc\x1d\x8c\x23\xe6\xae\x69\xa6\x78\x96\x39\xe1\x5b\x90"
+ "\xaf\xa5\xe8\x83\x91\x8c\x87\xdf\x3a\x01\xc7\x50\x8e\x83\xbc\xc1"
+ "\xdb\x65\x73\xed\x42\x5e\x3b\xdb\xf3\x7e\xec\x11\x1c\x2b\xd0\x1c"
+ "\x1d\xfa\x53\xb3\xc3\xb7\x3f\x0d\xb3\x13\xae\x42\x88\x09\xb4\xaa"
+ "\xc6\x2a\x5b\xfd\xae\x78\x6e\xb5\x5d\xf0\xfb\x07\x75\x47\xbf\x7f"
+ "\x9b\x61\xdc\x80\xf9\x6f\x4c\x25\xdc\xdf\x05\x3f\xc9\xab\x1c\xe8"
+ "\x0b\x70\xb0\xf3\xdf\x2e\x83\x2d\x06\x7f\x0f\xb4\x75\x64\x9f\xc4"
+ "\x33\xea\x76\x02\x63\x8c\xaa\x62\x18\x9f\xcc\xbe\x0e\xe7\x53\x3a"
+ "\x48\xf6\x26\xca\xe3\xdc\x16\x55\x36\xb5\xe1\xfe\x43\xe6\xa7\x7e"
+ "\xf5\x76\x1c\xeb\x8b\xb1\xa0\xae\x38\x01\xcf\xc2\x18\x09\xf7\xe1"
+ "\x28\xf7\x35\xd0\x62\x55\x5c\x5d\x57\x07\x61\xbe\xd6\x57\xff\x16"
+ "\x7d\xb2\x75\x2a\x6d\xd1\x5d\x4a\x5b\x6c\x77\xe1\xea\x12\xa9\x0d"
+ "\xf8\x7d\x29\x1d\xc7\x84\x98\x0f\xde\x57\x49\xe7\xc1\xfd\xc4\x4b"
+ "\x9e\x90\xa0\xa1\x76\xa4\x2f\xab\xcb\x9a\x4b\x91\x07\x60\x87\xe8"
+ "\xba\x72\x74\x53\xd8\x1c\x49\xea\x74\x1c\x6b\x43\xbd\x23\xd9\xb8"
+ "\x77\x7f\xa4\x10\xcb\x04\xf4\xc1\x7c\x1d\x17\xa4\x4d\x9c\x2a\xcc"
+ "\x25\x98\xa6\xa0\xfe\x4d\x75\x41\xf9\x77\xb6\xc8\x52\x93\xd9\x38"
+ "\x6f\xbf\x8e\x9d\xe9\x5c\xed\x84\x6f\xe8\xa8\x61\x5f\x3d\xe6\x83"
+ "\xf7\xb9\xe2\xfb\x68\x8f\xf7\xd1\xb8\x1f\x55\x7c\xbf\x5b\x7c\x1f"
+ "\xe3\xf1\x3e\x26\x75\x0a\xce\x7b\xa4\x56\x63\x1b\x40\xe7\xa9\xe1"
+ "\xfd\x54\xc1\x77\x83\x10\xa7\x72\xbf\x5a\xcc\x37\xb5\x5d\x96\xfa"
+ "\x55\x27\x60\x0c\xde\x4f\xf3\xf8\xfd\xb4\xbf\x67\x46\x93\x7b\xcb"
+ "\x91\x86\xa9\x5d\x56\xae\x69\x3b\x1b\x2b\xa7\x0a\xba\x11\x75\xa8"
+ "\x67\x79\x90\x6e\x42\x3d\xd9\x05\x36\x1a\xfc\xbe\x0d\xbf\xe9\x49"
+ "\x6f\xe9\x64\xa9\x36\x65\xe5\x62\xed\x92\xd5\xcf\xad\xc2\x93\x81"
+ "\xde\x67\xde\xd4\x78\x76\x96\x37\x58\x35\xe6\x52\x3c\xcb\xa7\x16"
+ "\xce\x8d\x6f\xc7\x3d\x5a\xe1\xad\x89\xae\x62\x9b\x95\x0f\x6f\x26"
+ "\xa6\x0d\xf7\x90\x53\xb2\x35\xc2\xfa\x81\x19\x24\x86\x01\xde\x9b"
+ "\x36\x7c\x8c\x69\x3b\x84\xb4\x14\x76\x9e\x5d\xbb\x41\x41\x0e\x6b"
+ "\x3b\x84\x39\x05\x78\xf7\xa9\x30\x7f\x72\x9a\x70\xce\x7c\x05\xf9"
+ "\x4b\x76\x3d\xf7\x2e\x6f\xe5\xfe\xc2\x37\x08\x7b\xa1\xff\xae\xa9"
+ "\x26\x37\x65\x2a\x30\xce\x1d\xf7\x3e\x8c\xd3\xf1\x3d\xbe\x93\xce"
+ "\x16\x9d\x92\xa5\x5d\x2d\xec\x8b\xbe\x86\xfd\x9f\x53\x4a\xbf\xfa"
+ "\xbb\xc6\x2e\x9e\x29\x5f\xf3\x1c\xd6\x15\xf7\x39\xb6\xcb\xd6\xac"
+ "\xc7\xfa\x59\x65\x6b\x32\xc3\xca\x70\x1f\x35\x51\x42\xfe\xa5\xbc"
+ "\xd1\xaa\x41\xd9\xe0\x2c\x5c\x33\x8d\xe6\x2b\x7b\xf1\x5c\x61\xd9"
+ "\x4b\xd2\x19\xda\xb4\x44\x8f\x73\x76\xca\x4e\x8e\xcc\x84\xb4\x14"
+ "\xc9\x6f\x07\xc6\x4f\xf2\x27\x6b\x1c\x60\x3f\x9e\x8d\xaa\x04\x1b"
+ "\xda\x0a\xbc\xb0\x6a\xaa\x67\x11\x9c\xd3\x91\xe1\xbe\xe4\x76\x59"
+ "\xfa\x42\xaa\xb2\x2a\xb2\xb1\x4f\x17\x37\x93\x7d\x82\x1f\xa8\xd6"
+ "\xc4\x03\xb8\xc7\x10\x68\xf9\x1a\x3c\x7f\x1c\xbf\x97\x68\x1f\x41"
+ "\x7b\x2c\xed\xf3\x07\x53\xa8\xf3\xfa\x44\x13\xa9\xb1\xfd\x99\x7c"
+ "\x72\xb4\x9a\x28\x17\x92\xb0\x1c\x2b\x75\x09\x6d\x4c\x27\x5c\x82"
+ "\x95\x84\xa1\x4f\x29\xf4\x23\x8f\x67\x34\xea\x1c\xb5\x80\x83\xd7"
+ "\xdb\x0f\x66\xb7\x8d\xd2\xce\x25\x60\x5b\xb1\xf5\x6b\xe1\x0c\x92"
+ "\x5d\x38\x17\xae\xc2\xb9\x74\x8f\xb3\x47\xed\x59\xc9\x94\xdf\x74"
+ "\x92\x28\x6a\xf5\x8d\x24\x21\x39\x8c\x0a\x67\x8f\x32\x21\xa3\x1d"
+ "\x78\xbf\x8e\xed\x13\xdc\x71\x86\x44\xd6\xa5\x5b\x89\xb9\xbd\x9a"
+ "\xbc\x9c\x46\x22\x69\xb7\xfe\x92\x9a\xea\x8f\x09\x2d\x9e\x59\xff"
+ "\x46\xb6\x69\x94\x4b\xc9\xf6\x6e\x45\xe4\xc9\x70\xee\x34\xdc\x80"
+ "\x7b\xb8\xce\x90\xe8\x45\xad\xb9\xc2\x7c\x2f\xce\xad\x3b\xbb\x75"
+ "\xda\xde\x6e\xdd\x35\x3d\xeb\x74\x53\xa4\x39\xf9\x27\x4e\xaa\x71"
+ "\x0d\x22\x89\x16\xa6\x1c\xc2\x73\x4b\x68\x8b\x3a\x55\xf7\x36\xe0"
+ "\xfc\xbb\xe0\x23\x67\x9d\x2e\x8a\x5f\xa2\x23\x37\xd9\x85\x73\x51"
+ "\xb8\x26\xa0\xae\x78\x0a\xeb\xda\x41\x84\x7d\x48\x2a\xb6\x0f\xc9"
+ "\x81\xeb\xe1\x4a\xdb\x96\x87\x96\x6b\x49\xcf\xe4\xca\x58\x73\xe6"
+ "\x3e\x92\x73\x96\x7e\x25\x8c\x11\x32\x01\xb7\x85\x69\x59\x54\x65"
+ "\xdb\x72\x44\xf7\x39\xea\x96\xd8\xe0\xe5\x43\xba\x10\xa7\x19\x69"
+ "\x43\x8b\x81\x5f\x1d\xc8\xb7\x66\xb2\x3f\xcd\xce\x3d\x60\xa3\xce"
+ "\xda\x94\x7d\xe4\x93\x86\x7a\x2f\xfe\x08\xfc\x84\x7c\xc8\x27\xe4"
+ "\x11\xf2\xca\xcd\xa7\xcf\x05\x3e\x1d\xe0\x19\x9f\x7a\x94\xc7\x12"
+ "\x25\x5e\x39\xca\x2a\xe3\x03\xe1\x57\x8d\xcd\x37\xbf\x80\xce\x7d"
+ "\xfc\xda\xd9\x41\x22\xcd\xed\x60\x37\x03\xbf\x1e\x78\x98\x90\x07"
+ "\x5e\xa3\x7c\x6d\xfc\x67\x7d\x7c\x73\x1a\xfc\xf0\xed\x6b\x37\xdf"
+ "\x80\xff\x83\xf0\x6d\xe9\xf4\x60\xf8\x56\x63\x63\x7c\x73\x8a\xfb"
+ "\xc7\x74\x87\x09\xe7\x58\xa7\xe3\x4a\xcf\x90\x58\xe4\xdf\x9c\x56"
+ "\x2d\x39\x32\xaf\x16\x78\xf6\x67\x2f\xfe\xf1\x46\x9b\x0e\x78\x30"
+ "\x15\x79\x18\x5a\xbf\x5b\x77\x34\xf0\x7e\x97\xf1\xd0\xc5\x7e\x37"
+ "\x52\xfd\xee\xb9\xae\xe1\xf5\xbb\x75\xbb\x2f\xf6\xbb\xef\xba\xdf"
+ "\xad\x2b\xeb\xdf\xef\xfa\xec\x86\xb4\xa5\x2b\x17\x2f\x5f\xb5\x7c"
+ "\xd5\xd3\xda\xa7\xd6\xa7\x2f\x5d\xcb\xac\x07\x2f\xfb\x41\xe3\xca"
+ "\x8e\xe3\x30\xae\x7c\x4d\x69\x3d\x79\xe3\x8a\x7a\xce\xf5\x2f\x8d"
+ "\x9c\x1a\x16\x68\x79\xc3\x82\xdd\x18\x63\x1e\xfb\x27\xc6\x9e\x3f"
+ "\x2e\xcb\x8e\x47\x7f\x8b\xcc\x4f\x4c\x36\xf3\xa7\x11\x55\x59\x8d"
+ "\x6b\x41\x9b\x37\x10\xf9\x66\x3c\xf7\xed\xc0\x39\x17\x7c\xbf\xe9"
+ "\x4f\xe8\x1b\x8e\x96\x57\x56\xa3\xaf\x9e\x2e\xe5\x3e\x8c\x8b\x62"
+ "\xb7\xab\xac\x1a\xb9\x16\xcf\xb5\x6c\x00\x3b\x6a\x8d\x47\xcc\xb4"
+ "\x4d\xe9\x74\xf4\xfa\x14\x94\x0b\x78\x0e\xf1\x94\x6c\xc3\xec\xb3"
+ "\xb8\x8e\x02\xb6\xf4\xfc\xeb\xe0\x3b\x93\x2b\xe3\x05\xbf\x12\x20"
+ "\x23\xd8\xfb\x2c\x21\xce\xfa\x59\x43\xb3\x60\xb7\x74\x2a\x5b\x13"
+ "\x3b\x0d\x36\xeb\xc7\x59\xa5\xa2\x8c\xd8\xb0\xe6\x81\x52\x26\x23"
+ "\x6a\x35\x80\xc1\x39\x80\xc1\xa4\xa1\x64\x84\x07\xf6\xa6\x04\x27"
+ "\x23\x10\x6b\x88\x39\xc4\xdb\x38\xc0\x1b\x62\x50\xc2\xdc\x6f\x44"
+ "\xcc\x45\x58\x88\x5a\xc0\x9d\x93\xe1\x0e\xcf\x71\xd7\x66\xba\x31"
+ "\xe7\xea\x8f\xb9\x33\xfd\x30\xc7\x89\x98\x5b\xe7\x8d\xb9\xc7\x1b"
+ "\xd5\xe4\x65\x26\x2b\xdc\x98\x33\xde\xdb\x20\xe1\x0d\xb1\x87\x38"
+ "\xe3\x9f\xd6\x91\xda\xf6\x8e\x3e\xec\x55\x2c\x63\x6b\xb9\xc2\x5e"
+ "\x61\x8e\x56\x9d\x5d\x27\xca\x8a\x93\x92\xac\xd8\xe9\x47\x47\x37"
+ "\x86\x28\x2b\x36\x32\xff\x2f\xc0\xab\x1e\xe0\x1b\xf2\xeb\x01\x0d"
+ "\xc8\x08\xcd\x1f\xc8\x27\xf3\x2e\x10\xfe\xa4\x8d\x0c\x7f\x30\x2e"
+ "\x37\xd4\xc5\x07\x8f\x96\xcc\x1a\x8a\x47\xc8\x1f\xe4\x93\xc0\x1f"
+ "\xe0\x93\xb4\xde\x8e\xeb\xaf\xc8\x2b\xe4\xcf\x8d\x59\x84\x43\x7e"
+ "\x55\x64\x30\xf9\x80\x72\x40\xd8\xdf\xdd\x4f\xbe\x03\xcd\xab\x91"
+ "\x67\xc2\x18\x3b\x5f\x75\x68\xfb\x04\x77\x1c\x9f\xee\xc2\x4d\xdb"
+ "\x07\xda\xd0\x9b\xf6\xba\x7d\xdf\x6d\x60\xb1\xba\x0d\xcd\xd5\xcc"
+ "\x66\xcf\x3e\x2b\xf6\xf9\x2a\x1c\xab\x0a\xe3\x52\x17\x8c\x4b\x95"
+ "\x30\x2e\x35\x34\x09\x31\x9f\x99\x4f\x86\x4d\xa7\xd9\x9a\x1e\x8c"
+ "\x43\x55\x4d\x6d\xd4\xb8\xaf\x01\x69\x29\xac\x1f\xab\x6c\xd1\xb8"
+ "\xde\x45\x8d\x30\xe6\xfd\x03\x47\xe0\x39\xf6\x88\xce\x15\x24\x8e"
+ "\xb2\x23\xc5\xf5\xf1\x12\xe6\x33\x31\xdb\xc6\xea\xb7\x5e\xd8\xd7"
+ "\x28\xac\x2d\x72\xfc\x6e\xd7\x66\xef\xb5\x45\xcf\xb5\xe7\x37\xb2"
+ "\xed\xe2\xba\x62\x36\xf3\xef\x85\xe3\x25\x90\x7b\x07\x61\x0c\xe3"
+ "\x5e\x5b\xfc\x0c\xdf\xd7\x7a\xaf\x2d\x66\x0b\xfa\x0e\xea\xe0\xc0"
+ "\xfd\x34\xf0\xfc\x26\x4b\x5f\x5f\xe3\x99\xee\x5e\xbb\x67\xe9\x78"
+ "\x86\x4b\x9c\x1b\x68\x67\xf3\x02\x39\x6a\x69\xfc\xed\xc7\x5e\x0a"
+ "\x42\x2e\x6f\xee\x72\xcb\xe5\xcd\xcc\xff\xa6\xa6\xd5\x51\x3b\x40"
+ "\x2e\xa3\xaf\xaf\xcd\x4f\xcc\x45\xb9\x6c\x68\xb2\xb3\xfa\xe5\x94"
+ "\x03\x4d\xc2\x30\xfe\x1e\xa6\xe3\x59\x27\x94\xd1\xe5\x82\xcc\x6e"
+ "\x6d\x2b\x10\xf6\x0f\xe4\xbc\xeb\x2d\xab\x37\x6b\xbd\x65\x75\xce"
+ "\xb7\x83\xcb\xea\xbc\x83\x83\xcb\xea\xdc\xc9\x17\x65\xf5\x48\xcb"
+ "\x6a\xc9\xae\x0b\x55\x56\xe7\x65\x5e\x94\xd5\xe7\x5b\x56\xe7\xa5"
+ "\x7b\xc8\xea\x57\xbd\x65\xf5\xe6\xb8\x81\xb2\x7a\xf3\x3c\xb7\xac"
+ "\xce\xa9\xf6\x96\xd5\x05\xaf\x06\x26\xab\x37\xef\x39\xb7\xb2\x7a"
+ "\xb3\xc9\x5b\x56\x17\x88\x71\x7a\x72\x96\x06\x2f\xab\x0b\xd6\x0c"
+ "\x2e\xab\x0b\xd6\x7b\xcb\xea\x82\x39\x4c\x26\x17\xbc\xc2\x64\x75"
+ "\x41\x32\x4b\xcf\x49\xf1\x4c\x77\xcb\x6a\x96\x3e\x50\x56\x17\xbc"
+ "\x3b\x84\xac\xd6\xb9\x78\x49\x56\x37\x80\xac\x6e\xe0\xf8\xa7\xfd"
+ "\xc9\xea\xad\x8e\x5a\x94\xd5\x69\x28\xab\xb7\x3a\x06\x97\xd5\x5b"
+ "\x17\xa3\x4c\x16\x7c\x7d\xfe\x8e\xda\x04\x5f\x8b\xbf\xa3\x6d\x88"
+ "\xd3\xb9\x59\x90\x0e\x69\xe8\x93\x12\xf3\x31\x1a\x4b\x32\xfd\xf9"
+ "\x35\x7d\x32\x1d\xf2\xf1\x93\xdc\x32\x1d\xe5\x39\xca\xf5\xf2\xdf"
+ "\x51\x6b\xc5\xef\x30\x86\xca\xf3\xa5\x92\x6c\x37\x42\x1a\xc6\x49"
+ "\x41\x7f\x4a\xb8\xf7\x12\x68\x60\xdb\x0c\xdf\xc3\xfc\x90\xcf\xe4"
+ "\xad\x03\xb6\x4e\xf5\xd6\x01\xcf\x9f\x1e\x5c\x07\xfc\xfa\x4f\x83"
+ "\xeb\x80\xc2\xab\x2f\xea\x80\x0b\x4d\x07\xfc\x3a\xeb\xa2\x0e\x18"
+ "\x5a\x07\xf8\xe2\x51\x7f\x1d\x70\x83\xa8\x03\xca\x87\xd4\x01\xbf"
+ "\xce\xf4\xaf\x03\xb6\xce\x1a\xa8\x03\xb6\x26\xb9\x75\xc0\xf3\x35"
+ "\xde\x3a\xa0\xe8\xb5\xc0\x74\xc0\xd6\x57\xcf\xad\x0e\xd8\x7a\xd8"
+ "\x5b\x07\x14\x89\xfb\x5c\x9f\x1f\xef\xa9\x03\xf8\xb0\x40\x74\x40"
+ "\xd1\x73\x92\x0e\x40\x19\x7b\x10\xd7\x1b\xfa\x74\x00\xca\xc2\xa2"
+ "\x4d\xa6\x8c\x16\x0f\x1d\x50\x94\xc8\x64\x7d\xd1\x5e\x97\xa0\x03"
+ "\x8a\x52\x58\xfa\xf3\x6a\xcf\x74\xb7\x0e\x60\xe9\x2e\x4f\x1d\xd0"
+ "\x86\x3a\xa0\xc8\x34\x84\x0e\x88\x0e\x5c\x07\x94\x24\xba\x75\x40"
+ "\x49\xa2\xa4\x03\x50\xee\xa3\x0e\x40\x99\x8d\x7a\x40\xf0\x5b\x26"
+ "\xec\x37\xd9\xf6\x4e\x84\x9d\x28\xd0\x4f\x31\xce\xa9\xa0\xec\x2e"
+ "\xee\x60\xba\x40\xc8\xb3\x8a\xe5\x01\x79\x6e\x03\x19\xde\x06\x32"
+ "\xbc\xcd\x78\x8a\xc8\x21\x5f\x43\x31\xee\x5d\x84\x67\x94\xf5\x11"
+ "\xed\xa0\x37\x9c\x82\xde\x68\x40\x7d\xc3\xe8\xb5\xed\x1d\x6f\xdd"
+ "\xf1\xc2\x41\x5f\xe3\x81\x12\x0f\xdd\x51\x71\x19\x3d\xda\x5d\xf8"
+ "\x42\xbd\xa4\x0f\x8a\xe1\x19\x75\x46\x49\x87\xa0\x33\xac\xa0\x33"
+ "\x6c\x4c\x67\xbc\xd0\xd5\x97\x07\xea\x20\xe4\x61\x7a\xa5\x61\x33"
+ "\xc6\x9c\x13\xf2\x18\x34\xde\x7a\x65\x5b\x96\xb7\x5e\x31\x3c\x84"
+ "\x7a\x05\xda\x80\xf1\xd9\x64\xbc\xd1\xaa\x70\x95\x57\xc6\xa3\x8e"
+ "\x61\xef\x8b\x2f\xe9\xd3\x2b\x97\x79\xe8\x95\x4c\x49\xaf\x18\xd6"
+ "\x5f\xf0\x7a\x05\xb0\x5c\x9b\xf5\x43\xd2\x2b\xc6\xa3\x17\x82\x5e"
+ "\x41\xde\x8c\xf3\x98\x1b\xf6\xa7\x57\xd0\x87\x45\xed\x8a\xef\xbb"
+ "\x5e\x31\xd6\xfb\xd7\x2b\xdb\xca\x06\xea\x95\x6d\x55\x6e\xbd\x62"
+ "\x98\xea\xad\x57\x5e\x94\x05\xa6\x57\xb6\xb9\xfa\xeb\x15\xa4\x65"
+ "\x31\xdb\x63\xd1\x8e\xfa\xc4\x65\xb4\x45\xf3\xa8\x5b\x42\xd2\x2b"
+ "\x25\x51\xde\x7a\xa5\xa4\x5d\x94\x61\x97\x06\xaf\x57\x4a\x84\xb9"
+ "\xa3\x62\x49\xaf\x9c\xe9\xaf\x57\x4a\x3e\xf7\xd6\x2b\x25\x7b\x99"
+ "\xfe\x78\x91\x30\xbd\x52\xf2\x2e\x4b\x7f\x21\xd2\x33\xdd\xad\x57"
+ "\x58\xfa\x40\xbd\xf2\xa2\x66\x08\xbd\xa2\xec\x2d\xab\x8c\xef\x31"
+ "\xb4\x46\x3b\x5f\x79\xdb\x3a\x6d\xe1\x55\xae\xfe\x7d\x83\xf5\x09"
+ "\x17\x8b\x5d\x24\xad\x71\x3d\x4a\x48\xaf\xf2\x58\x22\x2f\x9e\x8f"
+ "\xee\x89\xaa\x8c\x3d\xbe\x02\xfa\x47\xbb\xff\xfe\x01\x7d\x43\x21"
+ "\xf5\x8d\x5a\x7d\x2b\x81\xfe\xc2\xe1\x1a\xd7\x4e\xe8\x17\xe6\xae"
+ "\x06\x41\x8e\x29\x6d\x5a\x82\xbe\x2e\x55\xed\x44\xad\x92\xc9\x46"
+ "\x3f\xf8\x18\xf4\x3f\xe8\x23\xb3\xaf\xa3\xfc\xf5\x16\x2d\x51\xe9"
+ "\x49\x38\xf6\x93\xd7\xc5\x35\x14\xf4\x6d\x81\x6b\x27\x80\xcf\xe8"
+ "\x45\x9f\xb2\xfe\xb1\x13\xae\x1e\xd6\x3f\xa6\xf4\x74\xeb\xae\xf1"
+ "\xb7\x76\x62\xce\xb4\x0a\x6b\x27\x78\xf6\x08\xcf\x7c\xf1\xd0\x3f"
+ "\x28\xae\x9d\x38\x58\x9f\x80\xfa\xaa\x77\x09\x6b\x27\x2d\x5e\x6b"
+ "\x27\x3f\xb5\x10\x0e\xfd\x5e\xbc\xec\xb9\x76\xa2\xab\x1d\xd0\x27"
+ "\xb0\xaf\x60\x9f\x08\x5e\x7e\xbd\xb4\x7d\xb0\xbd\x4c\x4e\xa0\xb5"
+ "\x4b\xd9\x1a\x4d\x77\x1e\xd7\xee\x6f\x71\xc8\xd0\xc7\xa8\x0b\x78"
+ "\xc7\x83\x9c\xa2\xca\x7e\x72\xaa\x57\xe4\x43\x2f\xe3\x03\xf0\x50"
+ "\xf1\x64\x17\xa1\x8b\x9c\x60\x6b\xf5\x8a\x7e\x46\x1d\x56\xc0\xa1"
+ "\x6e\x42\xf9\x06\xa4\xbb\x86\x94\x8b\xbe\x46\xf9\x8d\xfa\x4b\x78"
+ "\xa0\x35\xcd\xe7\xc8\xc1\x33\x0e\x61\xad\xd1\xd0\x43\xa6\x81\x5c"
+ "\x52\xa1\x5c\x02\xec\x8e\xdd\xd5\x03\x74\xff\x8a\xd1\x1d\xfd\xd8"
+ "\xe1\xdd\xb9\x51\xa7\x85\xb2\xaf\xe9\xed\x05\xb9\xe4\x60\xb4\x7f"
+ "\x72\x8d\x9a\x08\xfe\x49\x71\xbd\x11\x74\x7d\x1d\xf0\x1b\xe5\xd2"
+ "\xdc\xae\x08\x8a\xb1\x44\xf8\x7f\xe9\xd0\xa7\x57\xd4\x4d\x5d\x18"
+ "\x3b\x46\x87\xd8\x50\x57\x1c\xc7\xf5\xc6\x2f\xbd\xd6\x1b\xed\x1b"
+ "\xdd\xeb\x8d\x75\x7b\x3f\x67\xfb\x43\xbc\x74\xc7\x8b\xd3\x7a\xcb"
+ "\x2b\x63\x91\xee\x82\xee\x48\x0f\x96\xf6\xdb\xfd\xfa\x4a\x3f\xf7"
+ "\xb4\x57\x7f\xcf\x69\xff\x92\x65\x78\xb4\xff\xad\x5f\xff\x2f\xe7"
+ "\x9e\xf6\x8a\xef\x39\xed\xb7\x27\x0d\x8f\xf6\xbf\x57\x0c\x46\x7b"
+ "\x1c\x7b\x48\xe3\x0e\x69\xcc\x81\x7a\x8c\xe9\xe1\x1d\x65\xee\xf1"
+ "\xc6\x8e\x32\x69\xdd\x16\x68\x26\x37\x8a\xf3\x4d\xa9\xcb\x30\x1e"
+ "\xc6\x8e\xf1\xd2\x9a\x2d\xda\xfb\x02\x1f\x77\x02\x1f\x57\xe1\xd9"
+ "\x21\x91\x87\xa0\x73\x16\x75\x81\x5e\x98\x5c\x19\xef\x32\x82\x4e"
+ "\x7a\xf5\x6d\xab\x1f\x7e\x72\xa8\x4f\x54\xe9\x44\xfd\x64\xaa\x9b"
+ "\xaf\xfc\x46\xe0\x67\x0f\xd8\x59\x8e\x36\x82\xe7\x81\x23\xda\xc0"
+ "\xfe\xea\xd5\x5f\xb2\x10\xec\x79\x89\xa7\xaf\x67\x38\x04\x1b\xcb"
+ "\x27\x4f\x77\x78\xf3\xb4\xd3\x07\x4f\x9f\x58\x0e\xfd\x94\x13\xed"
+ "\x60\x81\xa7\xd6\x3e\x9e\x0a\x7a\x64\xa3\x2e\x0a\xf9\x2a\xf1\x14"
+ "\xf5\x88\xc0\xd3\x76\xa6\x47\xfa\x7c\x27\x6d\x74\xdb\xc1\x35\xc9"
+ "\x8d\x3e\x78\xfa\xdb\xa3\x5e\x3c\x4d\x0e\x96\xa7\xa5\x16\x6f\xbb"
+ "\x6a\xe7\xfd\x81\xd9\x55\x3b\x1e\x43\xdb\xc9\xd3\xae\xc2\xe7\x4e"
+ "\x18\xab\xbb\x54\xb6\x98\xae\x90\x6c\xa9\x1d\x7a\x6f\x5b\x6a\x67"
+ "\x0c\xab\xd3\xef\x9f\x0f\xde\x96\xda\x29\xd8\x5f\x07\x77\xb2\x31"
+ "\xb0\xb7\x1d\xb5\x73\xb2\xb7\x1d\xb5\xc3\xce\xec\xa5\x9d\xf1\x9d"
+ "\xf9\x68\x47\xed\x94\xb3\xf4\xdf\x17\x78\xa6\xbb\xed\x28\x96\xde"
+ "\x89\xfe\xe5\x0a\x77\xce\x0b\xce\x76\xba\xfc\x3b\xb6\x9d\x34\x83"
+ "\xd8\x4e\x9a\x1f\x88\xed\xf4\xb2\xdf\xfd\xff\x17\xf5\xf7\x50\x3a"
+ "\x64\xa7\x7e\x78\x3a\xa4\xdc\x6f\x7c\xb9\x8b\xfa\x7b\x28\xda\x97"
+ "\x69\x86\x47\xfb\x8a\x41\xcf\x3f\x0c\xae\xbf\xf7\x2c\x74\xeb\xef"
+ "\x3d\x0b\xfd\xeb\xef\xdd\x9f\x5e\xd4\xdf\xc1\xe8\xef\xf2\xed\xc3"
+ "\xd3\xdf\xbb\xcb\xbc\xf5\xf7\x1f\x2e\x09\x4c\x7f\xef\x99\x34\xf2"
+ "\xfa\x7b\x8f\xce\x5b\x7f\xef\x11\xe3\x7b\xec\x9a\x1d\xbc\xfe\xde"
+ "\xf3\xb9\x7f\xfd\xbd\xa7\xd1\x5b\x7f\xef\xa9\x62\x7a\xfa\x0f\x0a"
+ "\xa6\xbf\xf7\x1c\x66\xe9\xbb\x66\x79\xa6\xbb\xf5\x37\x4b\x67\xfa"
+ "\xfb\x0f\x91\xc1\xe9\xef\x88\xef\x58\x7f\xab\x07\xd1\xdf\xea\x1f"
+ "\x88\xfe\xfe\x8f\x92\x8b\x3a\x24\x54\x1d\xf2\x07\xdd\xf0\x74\xc8"
+ "\xab\xca\xd0\x75\xc8\x1f\x77\xbb\x75\xc8\x1f\x77\xfb\xd7\x21\x7f"
+ "\xbc\xf4\xa2\x0e\x09\x46\x87\xfc\x47\xc3\xf0\x74\x48\xa5\xd5\x5b"
+ "\x87\xec\x7d\x28\x30\x1d\xf2\xc7\x27\x46\x5e\x87\xfc\x71\x85\xb7"
+ "\x0e\xd9\x1b\xcb\xea\xf4\xea\xd6\xe0\x75\xc8\xde\x49\xfe\x75\xc8"
+ "\xde\xab\xbd\x75\xc8\x1f\xc5\x58\x19\x7b\xe7\x30\x1d\xb2\x57\x4c"
+ "\x7f\x75\x8b\x67\xba\x5b\x87\xb0\x74\xa6\x43\xf6\x26\x05\xa7\x43"
+ "\xc6\x7c\xc7\x3a\x44\x31\x88\x0e\x51\xfc\x40\x74\xc8\x6b\x03\xe2"
+ "\x1f\x06\x2e\xc7\x0e\xe8\xdd\x72\xec\x80\xde\xbf\x1c\xdb\xdf\x78"
+ "\x51\x8e\x05\x23\xc7\xf6\xae\x18\x9e\x1c\xdb\xbf\xd7\x5b\x8e\x1d"
+ "\xbc\x34\x30\x39\x76\xe0\xda\x91\x97\x63\x07\x62\xbc\xe5\xd8\x41"
+ "\xf1\xcc\xe9\xbe\x87\x83\x97\x63\x07\xbe\xf2\x2f\xc7\x0e\x7c\xed"
+ "\x2d\xc7\x0e\xbc\xcb\xe4\xd5\xc1\x48\x26\xc7\x0e\xd4\xb3\xf4\x7d"
+ "\x89\x9e\xe9\x6e\x39\xc6\xd2\x99\x1c\x3b\xa8\x1d\x4a\x8e\x61\xbf"
+ "\xa8\xd5\xf4\xeb\x17\xcf\x4a\xfd\xe2\x8d\x92\x4f\xca\xa4\x7e\xf1"
+ "\x86\x60\xa3\xf1\x65\x95\xd5\x2f\x64\x10\xb9\x01\x63\xe2\x80\x8c"
+ "\x48\x5d\x80\xfd\xe2\x8d\x51\xb8\xbf\x44\x69\x01\xb9\x67\x13\xe5"
+ "\x60\x26\xc8\x41\x1b\x3c\xa3\x9f\xb4\xc9\x95\xd5\x28\xbf\x70\x9f"
+ "\x06\x3e\x33\x79\x68\x1f\x85\x31\x79\x84\x75\x76\x8f\x7e\x23\xf4"
+ "\x95\x4e\xb1\xaf\x74\xb2\xbe\x22\x9d\x97\xcb\xb2\x51\xde\xb5\x56"
+ "\x37\x21\x21\x25\x8c\x62\xff\x11\xce\x61\x41\xff\xa1\x6b\x75\xe1"
+ "\x65\x69\xd0\x67\xec\x6d\x04\x7d\xe1\x63\x9f\x51\xe5\xc9\xc2\x69"
+ "\xa7\xfe\x12\x90\x89\x4c\xf6\xf1\xd5\xa3\x9c\xe8\xd7\x6a\x2d\xc8"
+ "\xbe\x0e\x90\x7d\x1d\xee\xbe\x82\x6b\xe7\x9d\x6b\x75\xda\xae\xb5"
+ "\xba\x29\xbd\x9d\x20\xfb\xec\xfd\xfb\xc9\x92\x59\xbb\x3a\x50\xf6"
+ "\xb5\x09\xfd\x44\x90\x7d\xd0\x37\xf8\x4e\x90\x7d\x4f\x8b\xb2\xaf"
+ "\x53\x87\xb2\x5e\xbd\x6b\x19\xc8\xbe\xe4\x13\x4c\xf6\x89\x36\xdc"
+ "\x8f\x50\xf6\xad\xd5\x71\xbf\xe9\x10\x65\xdf\x62\x94\x7d\x47\xa0"
+ "\x8f\xfc\xa7\xb7\xec\x53\x85\x2a\xfb\x5e\xaf\xf7\xee\x27\x55\x33"
+ "\x02\xeb\x27\x6f\x3c\xe4\xaf\x9f\xf4\x1a\x43\xed\x27\x6f\x2c\xf4"
+ "\xee\x27\x55\x3a\xb1\xef\x2e\x0f\xbe\x9f\x54\x5d\xd2\xd7\x4f\x9e"
+ "\xed\xdf\x4f\xaa\xc6\x7b\xf7\x93\x37\x6c\xac\x3f\x54\x4d\x67\xfd"
+ "\xe4\x0d\x07\x4b\x3f\xa8\xf7\x4c\x77\xf7\x13\x96\xce\xfa\x49\x55"
+ "\xfc\xc5\xf5\xf2\xef\x9b\xbe\xff\xd3\xe1\x8b\xeb\xe5\xa1\x8e\x19"
+ "\xab\x16\x0e\x6f\xcc\xf8\x97\xb8\x8b\xf3\xed\xa1\xd2\xfe\xcf\xca"
+ "\xe1\xd1\xfe\xcd\x77\x2f\xce\x95\x84\x4a\xfb\xbf\x6c\x19\x1e\xed"
+ "\xdf\xf6\x1b\xff\x67\x68\x5b\xea\x90\xad\xa6\x6f\x8c\x71\xc8\x26"
+ "\xed\xcf\x1d\x38\xc6\x38\xf4\x98\xf7\x59\xba\xb7\xbf\xee\xbf\x77"
+ "\x76\xa8\xb1\x87\xf3\xe2\xd8\x03\x78\xfd\x96\x7c\x78\x63\x8f\x43"
+ "\xfd\xf6\x27\xbe\xf3\x62\x60\x36\xd5\xa1\x3d\xfe\x6c\x2a\x67\xc8"
+ "\x63\x8f\x43\x55\xde\x36\xd5\x3b\x59\x22\x36\xde\x0a\xde\xa6\x7a"
+ "\xe7\x09\xff\x36\xd5\x3b\x4b\xbd\x6d\xaa\x77\x62\x99\xed\xf4\x4e"
+ "\x09\xb3\xa9\xde\x99\xc3\xd2\xdf\x7e\xd3\x33\xdd\x6d\x53\xb1\x74"
+ "\x66\x53\xbd\x53\x76\x71\x1d\xfd\xfb\x66\x53\xfd\x97\x5f\xff\x87"
+ "\x17\xf5\xfa\x50\xba\xe5\x9d\xaa\xe1\xe9\x96\x77\xbf\xc3\xfd\x9f"
+ "\xdf\x77\xbd\xfe\x5f\xc9\xc3\xa3\xfd\xdf\x06\xdd\xff\x39\xb8\x5e"
+ "\x37\xbd\xeb\xd6\xeb\xa6\x77\xfd\xeb\x75\xd3\xcd\xde\x7a\xfd\x6f"
+ "\x1f\x5c\xd4\xeb\xa1\xe8\xf5\x77\x2d\xc3\xd3\xeb\xef\x3b\xbd\xf5"
+ "\xfa\x07\xcb\x03\xd3\xeb\xa6\xf5\x23\xaf\xd7\x4d\x5b\xbc\xf5\xfa"
+ "\x07\xf3\x44\x6c\x18\x83\xd7\xeb\x1f\xfc\xcc\xbf\x5e\xff\x60\x86"
+ "\xb7\x5e\xff\x40\x3c\xa7\xf6\x81\x9e\xe9\xf5\x0f\xa6\xb2\xf4\xbf"
+ "\x19\x3c\xd3\xdd\x7a\x9d\xa5\x33\xbd\xfe\x41\xfa\xc5\xf5\xf5\xef"
+ "\x9b\x5e\xff\x6f\xbf\xf1\xbf\x2e\xea\x96\xa1\x74\xcb\x07\xc3\x1c"
+ "\x33\x1e\x5e\x11\xba\x6e\xf9\x50\xe3\xd6\x2d\x1f\x6a\xfc\xeb\x96"
+ "\x7f\x18\xbd\x75\xcb\x91\xc9\x17\x75\x4b\x28\xba\xe5\xef\xb1\xc3"
+ "\xd3\x2d\xff\x48\xf2\xd6\x2d\x1f\x1e\x09\x4c\xb7\xfc\xe3\xf3\x91"
+ "\xd7\x2d\xff\xb0\x79\xeb\x96\x0f\xab\x58\x9d\x0e\x7f\x1d\xbc\x6e"
+ "\xf9\xf0\x45\xff\xba\xe5\xc3\x1d\xde\xba\xe5\xc3\x15\x4c\x87\x7c"
+ "\x78\x98\xe9\x96\x0f\x73\x59\xfa\xe1\x36\xcf\x74\xb7\x6e\x61\xe9"
+ "\x4c\xb7\x7c\x58\x7f\x71\xdd\xfd\xfb\xa6\x5b\x3e\x1a\x74\xff\xef"
+ "\xe0\xf2\xed\x13\x87\x5b\xbe\x7d\xe2\xf0\x2f\xdf\x3e\x59\xe9\x2d"
+ "\xdf\x3e\x72\x5d\x94\x6f\xa1\xc8\xb7\x0f\x6d\xc3\x93\x6f\x9f\xc4"
+ "\x7a\xcb\xb7\x9a\x00\xfd\x01\x7d\xf2\xd6\xc8\xcb\xb7\x4f\xfa\xf9"
+ "\x7f\xa8\x11\x7d\x00\x7d\xf4\x51\xf0\xf2\xad\x66\x8d\x7f\xf9\x56"
+ "\xb3\xde\x5b\xbe\xd5\x88\xfe\x7f\x6a\x5e\x61\xf2\xad\x46\xf4\xff"
+ "\xf3\x51\xb5\x67\xba\x5b\xbe\xb1\x74\x26\xdf\x6a\xaa\x86\xb7\x1e"
+ "\x6f\x8e\x75\xaf\xc7\x9b\x05\x5e\xf0\xa5\xad\x8e\x81\xeb\xf1\x75"
+ "\x07\x71\x3d\xde\xdd\x5f\x6a\x6f\x16\xd6\xe6\xb1\xcf\x74\x31\xff"
+ "\x3d\x3e\xd7\xe9\x27\xb5\x3a\x2e\xae\xd3\x9f\xcb\x75\xfa\xba\x4c"
+ "\xef\xfe\x63\x6e\x0d\xac\xff\xd4\x9d\x1e\xf9\x75\x7a\xb3\xdc\xbb"
+ "\xff\x98\xeb\xc5\x3e\x7d\x36\xf8\xfe\x63\xfe\x93\xff\xfe\x63\x7e"
+ "\xc7\xbb\xff\x98\xc5\x31\xa6\xd9\xc6\xfa\x8f\x79\xb7\xd8\xaf\x1c"
+ "\x9e\xe9\xee\xfe\xc3\xd2\x59\xff\x31\xdb\x03\xb1\x0f\x9c\xca\xd6"
+ "\x18\xd4\xf7\xd3\x2c\x57\xb9\xfa\x70\x9e\x2e\xe2\xdc\x97\x7d\xf0"
+ "\x14\xd3\x17\x82\x6d\xf0\xca\xdb\xb6\x21\xed\x03\x9b\x68\x1f\xa4"
+ "\x0c\xb4\x0f\x24\xdb\xa0\x0c\xf0\xbd\x33\xa0\x35\x7a\x11\xef\x68"
+ "\x1b\x9c\x09\xd6\x36\x58\xe6\xb6\x0d\x8c\xfd\x6c\x83\xa7\xfb\xd9"
+ "\x06\x02\xde\x5b\xbc\xf0\x3e\xc0\x36\xe8\xc3\xfb\x48\xd9\x06\x9f"
+ "\xea\x2f\xae\xd1\x87\x3a\xee\xac\x97\x0f\x6f\xdc\xf9\x99\xed\xe2"
+ "\x5c\x7e\xa8\xb4\xff\x74\x98\x73\xf9\x47\x93\x2f\xce\xb7\x84\x4a"
+ "\xfb\xff\x19\xa6\x2f\x87\xcf\x2d\xa1\x8f\x47\x1a\xf6\xba\xc7\x23"
+ "\x0d\x7b\x25\xfb\x4a\xf2\x8d\x08\xf2\x59\x6e\x4c\x83\xeb\x0c\x21"
+ "\x2f\xa4\x09\x71\x06\x14\x66\xdb\xe7\x18\x77\x0d\x6c\xae\x86\xc9"
+ "\x09\x99\x9e\x36\xd7\xff\xdb\x23\xd9\x5b\x09\x68\x8b\x81\x6d\x85"
+ "\x76\x95\x34\x06\x41\xbf\x56\x83\xee\x1f\xbe\xf6\x6d\x1b\x8e\x59"
+ "\x7a\x55\xad\x31\x3f\xdc\xf1\xca\xd1\xbd\xc3\x1b\xaf\xfc\x6f\x9b"
+ "\xb7\xbd\xf5\xc5\xfc\xc0\xec\xad\x86\xa5\x23\x3f\x5e\x69\x48\xf7"
+ "\xb6\xb7\xbe\x88\x13\x71\xf2\x58\xf0\xf6\xd6\x17\x57\xfb\xb7\xb7"
+ "\xbe\xb8\xce\xdb\xde\x6a\x70\x32\xbb\xea\x8b\x79\xcc\xde\xfa\x42"
+ "\xcd\xd2\xff\x5f\x92\x67\xba\xdb\xde\x62\xe9\xcc\xde\xfa\x22\x39"
+ "\x40\x7b\x2b\x76\x18\xf6\x56\xdb\xf7\xc7\xde\x7a\xfa\x02\xb7\xb7"
+ "\xbe\x6c\x08\x40\xef\xc4\xf4\xd3\x3b\xb6\x8b\x7a\x07\x65\xcd\x17"
+ "\xe9\xc3\xd3\x3b\x96\x79\x43\xd2\xde\xe0\x41\x7b\x94\xf9\x22\xdd"
+ "\x5d\x53\xdf\xb6\x85\x4c\x7b\x90\xf5\xe5\xd9\xdf\x67\xba\x1f\xd3"
+ "\x0e\x8f\xee\x8d\x7e\xe3\x1f\x5e\xb4\xb5\x86\xa2\xbd\xa5\x6c\x78"
+ "\xb4\x6f\x8e\x0f\xdd\xd6\x6a\x89\xf9\xa4\xcf\xd6\x6a\x89\xe9\x6f"
+ "\x6b\xa1\x6d\xf5\x90\x83\xd9\x5c\x2f\x80\xad\x54\xb4\x0a\xec\xae"
+ "\x0c\x42\xcc\xb6\xf7\x88\x01\x6c\xaf\xa2\x53\x60\x7f\xad\x00\xfb"
+ "\xcb\xf9\xaa\x68\x7f\x7d\xf5\x9a\xb7\xfd\x65\xbd\xda\xa7\xfd\xa5"
+ "\x72\xdb\x5f\x4e\xb0\xad\x7a\x5f\x7d\xdb\x56\x72\xca\xc3\x16\x7b"
+ "\x66\xa0\x2d\xd6\x63\x6c\x8d\xed\xb9\xf6\xed\xb6\x5e\xb0\xc7\x06"
+ "\xb3\xc5\x04\x4c\xf8\xb0\xc7\xfe\x3d\x6c\xb1\xa6\xc8\xe1\xd9\x62"
+ "\x5f\xa5\x7b\xdb\x62\x2d\x5f\x05\x66\x8b\x7d\xf5\xad\xdf\xb9\xaf"
+ "\x90\x6d\xb1\x16\xe2\x6d\x8b\xb5\xd4\xb0\x3a\x35\x1f\x09\xde\x16"
+ "\x6b\x39\xe8\xdf\x16\x6b\x79\xcb\xdb\x16\x6b\x11\xcf\x9e\xb6\x58"
+ "\x99\x2d\xd6\x52\xc6\xd2\x9b\x0f\x7b\xa6\xbb\x6d\x31\x96\xce\x6c"
+ "\xb1\x96\xf6\x00\xd7\xc6\x62\x9c\xa0\xd3\xbf\xfb\xfd\x94\x83\xad"
+ "\x8d\x8d\xd4\x7e\xca\x65\x17\xf8\xda\x98\x6d\xe8\xf9\xaf\x8b\x36"
+ "\x81\x0f\x59\xf3\x4f\x32\x3c\xbd\xd4\x6a\xbd\x68\x13\x84\x4a\x7b"
+ "\xdb\x30\xe7\xbe\xfe\xb5\x30\x74\x9b\xe0\x84\xce\x3d\xff\x72\x42"
+ "\x17\xdc\xfc\xcb\xd7\xe5\xde\xfa\xbf\xcd\xb7\xfe\xbf\x38\xff\x12"
+ "\x84\xce\x3f\xae\x1b\x9e\xce\xff\x5a\xef\xad\xf3\x4f\x7c\x1e\x98"
+ "\xce\xff\xba\x75\xe4\xe7\x5f\xbe\xee\xf2\xd6\xf9\x27\x4c\xac\x4e"
+ "\xff\xfa\x22\x78\x9d\x7f\x62\x8f\x7f\x9d\x7f\xe2\x35\x6f\x9d\x7f"
+ "\x22\x8b\xe9\xf6\x13\x47\x99\xce\x3f\x51\xc2\xd2\xff\xd5\xe0\x99"
+ "\xee\xd6\xf9\x2c\x9d\xe9\xfc\x13\xd6\xe0\xd6\xbb\x22\x2e\xd0\xf5"
+ "\x2e\xf5\x0f\x64\xbd\xab\x3d\xe9\xa2\xde\x09\x55\xef\x9c\xe8\x1a"
+ "\x9e\xde\x39\x39\xa4\xff\x0f\xff\x7a\xc7\xbe\xdb\xad\x77\xec\xbb"
+ "\x83\xd3\x3b\xf6\x4b\xbd\xf5\xce\xa9\x1d\x17\xf5\xce\x70\xf5\x4e"
+ "\xfb\xee\xe1\xe9\x9d\x6f\xac\xde\x7a\xe7\xdb\x00\xfd\x1f\xd9\xfd"
+ "\xfa\x3f\x0a\x5d\xef\xd8\xfb\xf9\x3f\xfa\x56\xf4\x7f\x74\x2a\x04"
+ "\xbf\x21\xdf\x4e\xf2\xaf\x77\xbe\xed\xe7\xff\xc8\x2e\xfa\x3f\xfa"
+ "\x56\xf4\x7f\xf4\xad\x98\x7e\x2a\xd1\x33\xdd\xad\x77\x4e\x79\xf8"
+ "\x0d\xf9\xf6\xa2\xff\xa3\xef\xdd\x3e\xcc\x8e\x61\xc8\xbf\xd3\xb9"
+ "\x6e\xf9\x77\x3a\xd7\xff\x3e\xcc\xae\xd3\xde\xfb\x30\x3b\x9f\xbf"
+ "\xb8\x0f\x33\x14\xf9\xf6\xed\x30\xfd\x22\x75\x99\xbc\xe5\xdb\x99"
+ "\x1b\x02\x93\x6f\xa7\x67\x8c\xbc\x7c\x3b\x3d\xc7\x5b\xbe\x9d\xd1"
+ "\x88\xd8\x08\x41\xbe\x9d\x3e\xeb\x5f\xbe\x9d\x91\x79\xcb\xb7\xd3"
+ "\x47\x99\x1c\x3b\x33\x8d\xc9\xb7\xd3\x6d\x2c\xbd\x33\xd1\x33\xdd"
+ "\x2d\xdf\x3a\x3d\xe4\xdb\x99\xd8\xe0\xd6\x35\x43\xb2\xab\xcf\xc3"
+ "\xba\xe6\x48\xd9\xd5\x17\xfa\xba\x66\x77\xd5\xc5\x79\xb4\x50\x6c"
+ "\xea\x33\x73\x86\x67\x53\x9f\xd5\x85\xae\x53\x9c\x4a\xb7\x4e\x71"
+ "\x2a\xfd\xad\xef\x14\x01\xee\x0c\x60\x13\x6f\x3d\x45\xe4\x2f\xe0"
+ "\xfa\xce\xd1\x5a\x62\xc4\xf5\x9d\x55\xd2\xfa\x4e\xb9\x68\x67\xf7"
+ "\xe6\x79\xdb\xd9\x3d\x32\x5f\x76\x36\xda\xd7\x2e\xb0\x9d\x9d\xfd"
+ "\xd7\x75\x16\xf8\xd6\x45\x3d\xaa\xd6\xd8\xb3\xaf\xbe\xdd\x16\xac"
+ "\x2e\x7a\x79\x03\xd3\x45\x3b\xbf\xf7\xba\xa8\xdb\x31\x3c\x5d\xd4"
+ "\x3b\xc7\x5b\x17\x39\xdf\x09\x4c\x17\xf5\x7e\x34\xf2\xba\xa8\xb7"
+ "\xc1\x5b\x17\x39\x5f\x61\x75\x3a\xfb\x6a\xf0\xba\xc8\xf9\xbc\x7f"
+ "\x5d\xe4\x34\x7a\xeb\x22\x67\x32\xd3\x39\xce\x43\x4c\x17\x39\xd3"
+ "\x59\xfa\xd9\x57\x3c\xd3\xdd\xba\x88\xa5\x33\x5d\xe4\x3c\x1c\xdc"
+ "\x1c\xcf\x98\x0b\x74\x8e\x47\xf1\x03\x99\xe3\xe1\xa7\x87\x2c\x13"
+ "\x39\x19\xa9\x91\xce\x6f\x70\x32\x32\x60\x9e\x21\x03\xec\xed\x0e"
+ "\xb6\xce\xdd\x37\xcf\x60\x6d\x64\xf2\x8f\x23\xcf\x79\xcb\x3f\xea"
+ "\x57\xfe\x0d\xb6\x96\x8d\xf3\x0a\x2e\x90\x8d\xce\xf2\x61\xac\x65"
+ "\x67\x7c\xdf\x65\x9e\x73\x78\xfe\x95\x39\x12\xe7\x25\xf3\x38\xd9"
+ "\xc1\x80\x64\x1e\x47\xde\xf3\x2b\xf3\x42\x3d\xc7\xc1\x91\x1a\x2f"
+ "\x99\xc7\xc9\x44\x19\xc3\xbf\x13\xb4\xcc\xe3\x64\xeb\xfd\xca\x3c"
+ "\x4e\x96\xe7\x25\xf3\x38\x99\xb0\xdf\xc9\xca\xc9\x0e\x08\x32\x8f"
+ "\x93\xe9\x99\xcc\xe3\x0f\x79\xa6\xbb\x65\x1e\x4b\x17\x64\x5e\x91"
+ "\xec\xd0\x60\x32\x8f\x1a\xf6\xc7\x96\x70\x7c\x15\x5c\x87\xa0\x8e"
+ "\x93\x00\x1b\x26\xf8\xbf\x1a\x78\x3c\x01\xfe\xf7\x1b\xeb\xc5\xae"
+ "\xda\x1f\xcb\xe7\x43\x9d\x39\x22\x33\xdb\xbf\x31\x99\xae\x70\x42"
+ "\x3d\x39\xf1\xcc\xda\xfe\xd8\x08\xe7\x98\x78\x9e\xea\x09\xf0\x25"
+ "\x56\x88\x8d\x09\xf9\xf1\x7c\x90\x36\x83\x84\x9f\xe2\xb8\x24\x29"
+ "\x1f\xd4\x37\xbc\x85\xe3\x2e\xc5\x32\xba\x8b\xb8\x14\x68\xcb\x61"
+ "\xbf\x75\x85\xb2\x12\x5e\x9b\x42\x36\x39\xe9\xbf\x4c\xab\x3a\x88"
+ "\x8d\xe3\x0e\x46\xb4\x8f\x89\xa7\x39\x49\x04\x6d\xb9\xaa\x2b\xec"
+ "\x72\x2c\x13\xe3\xe9\xc2\xbb\x12\x7c\xe7\x82\x3a\x66\xaf\x24\x5c"
+ "\x71\xc7\x18\x05\xc8\x89\x51\x39\x5d\xb4\x6d\xb5\x13\xea\x0c\xd8"
+ "\x7c\x7f\x4a\x83\xfc\x8d\x9d\x90\xe6\x22\x1a\x8c\x4d\x8a\x65\x80"
+ "\x3d\x8b\xf5\xf9\x53\x05\xe4\xf7\x55\x87\xe7\x5f\x27\xd3\x46\x5d"
+ "\x47\xad\xc1\xe1\x26\x4c\xee\x8f\x8e\x11\x79\x53\x88\xe9\x7a\xa0"
+ "\x9d\x96\x70\xbe\xde\x07\xf9\x9d\xc1\xce\xbf\x2b\x30\xb6\x71\xce"
+ "\x0e\xc2\x6d\xe3\xc7\x28\xfe\x9e\x25\xc4\x1f\xb6\x77\x17\x85\x35"
+ "\x58\x65\xfa\x18\xa4\x39\xc6\xb5\xc4\xf8\xef\x80\x1b\x02\xe9\xf6"
+ "\x0f\x32\x09\xe9\xcf\x8b\xb4\x94\x95\x8b\xb5\xe9\xcb\x57\x2e\x5d"
+ "\xfd\x5c\xba\xf6\xda\x94\xb1\x64\xde\xea\xd5\xda\x95\x8b\x57\xad"
+ "\xd7\x7a\xbe\xb9\x43\x9b\xb2\x7c\xed\xe2\xa7\x56\x2c\xbd\x61\xe5"
+ "\x92\xd4\xb1\x28\x7c\x3d\xea\x11\x89\x75\xe1\x8b\xc2\x9c\x15\x2f"
+ "\x11\xf2\x9b\x09\x44\x8e\xf5\xea\x2e\x92\x27\x4b\x31\x4c\x31\x86"
+ "\x27\x07\x79\x72\x40\x3e\x6e\xcb\x1e\x83\x79\x57\xec\x82\x7a\x55"
+ "\x40\xbd\xa1\x8e\x50\x67\xb9\x41\xaa\xb3\x84\x89\x1c\xc4\x44\x76"
+ "\x07\x60\x50\x7e\x30\xc2\x31\xe6\x17\x94\x26\x61\xfb\xba\xa0\x9f"
+ "\xc8\x20\xcd\x25\xe8\x32\xe3\xfe\x58\xf8\x6d\xb5\x84\x31\xfc\x2d"
+ "\x2d\xde\x4f\xba\xb1\x9f\x50\xfd\x5d\xac\xaf\x8d\xda\x3d\x5f\x27"
+ "\x23\x42\x0c\xd5\x22\x79\x57\x5f\x0c\x55\x48\x47\xda\x42\x3d\xda"
+ "\xbb\x8b\x46\x29\xad\xb2\xdb\x53\x30\x1d\x63\xff\x62\x2c\x54\xac"
+ "\x33\xb4\x0b\x74\x29\x35\xd1\x7c\x11\xfb\x5b\x1c\x7b\x79\xc3\xa4"
+ "\xdd\x66\xf9\x19\x92\xe0\xa4\xbd\x74\xab\x63\x6f\x5d\x57\x17\x89"
+ "\xc8\x4b\x5d\x42\xc7\xca\x41\x66\x2f\x5f\x8a\x31\x5c\x79\xe3\xa4"
+ "\xdd\xd4\x38\xc1\x34\xff\x3a\xa2\x86\xb2\xf5\x1e\xb1\x5c\xe5\xc1"
+ "\xf1\x7f\x94\xc0\x7f\xe4\x23\xc6\x68\x65\x7c\x1c\x75\xe8\x83\xf4"
+ "\x81\x7c\xec\xc3\xdf\x6b\x3c\x39\x02\x58\xa0\xca\x63\xb9\x09\x2e"
+ "\x46\x47\xec\xbb\x9d\x39\x7a\x72\x93\x40\xbb\xd1\xa9\x7c\xf1\xb1"
+ "\x64\xde\x70\xac\x94\x1a\x8e\x15\x00\xcd\x34\xc5\x19\x44\xbb\xc8"
+ "\xa5\x26\xc6\x33\x24\xda\x6e\x3c\x96\xab\x92\xe5\xca\xc0\x1e\xe1"
+ "\x40\x9f\x44\x83\xcc\x88\x16\xfb\xbb\x06\xe9\xf8\x61\x3b\x21\x73"
+ "\xd7\x12\xf2\xaf\xe9\x24\xac\x02\x7e\x17\x5c\x7b\x46\x0b\xfa\x9f"
+ "\x16\x8d\xea\xda\x05\xbf\xc5\x18\xbd\x41\xfe\x3e\xcb\x6f\xbf\xeb"
+ "\x6b\xb7\x85\xf8\x6e\xf7\x18\x3d\xb4\xdb\xca\x1b\x2c\x1a\x6a\xb0"
+ "\xc8\x07\xb6\xdb\x42\x58\xbb\x47\x75\x8c\x7c\xbb\xc7\x30\xff\xd7"
+ "\x45\xa3\xdb\x43\x6b\xf7\x98\xf4\x00\xda\xed\x87\xdf\x8a\x64\xbe"
+ "\xd8\x02\xfc\xb6\x00\xbf\x2d\x3e\xf8\x6d\x11\xf9\x3d\xae\x65\xe4"
+ "\xdb\xad\x98\xc6\xda\x3d\xc6\x16\x5a\xbb\x15\x7e\xe5\x9f\xbb\xdd"
+ "\x8d\x7e\xf8\x7d\x49\x12\xb4\x1b\xf8\xdd\x08\xfc\x6e\xf4\xc1\xef"
+ "\x46\x91\xdf\xe3\x3f\x1b\xf9\x76\x5f\xc2\xfc\x1f\x16\x29\x2c\xa1"
+ "\xb5\xfb\x92\x94\x00\xda\xed\x87\xdf\x63\x13\xf9\xe2\x46\xe0\x77"
+ "\x23\xf0\xbb\xd1\x07\xbf\x1b\x45\x7e\xdf\x56\x34\xf2\xed\x1e\xcb"
+ "\xe2\x3f\x17\x5d\x72\x34\xb4\x76\x8f\xf5\xbb\xff\xc5\xdd\xee\x26"
+ "\x3f\xfc\x1e\x17\x0f\xed\x06\x7e\x37\x01\xbf\x9b\x7c\xf0\xbb\x49"
+ "\xe4\xf7\xe3\xf7\x8c\x7c\xbb\xc7\x45\xb2\x76\x8f\xad\x09\xad\xdd"
+ "\xe3\xfc\xee\x7f\xf7\x90\xe7\x5b\x40\x66\x0f\xe0\xb9\x39\x33\x96"
+ "\xdc\x78\x06\xdb\xaf\x3c\x44\x55\xc7\xb6\x8c\xcb\xcb\x95\x39\x95"
+ "\xc7\x0c\xe3\x60\x2c\xf7\x72\x3e\xaf\x8f\xb0\x92\x4b\xa0\xad\x7a"
+ "\x5a\x6c\xd5\xe2\x9d\x87\x72\x9c\x20\xfb\x5d\xca\x63\x05\x3d\x86"
+ "\xfd\x9a\x17\x96\x11\x6d\x8e\x9d\xa8\xeb\xb2\xad\x24\x3b\x95\xda"
+ "\xeb\xc8\x57\x44\x65\x25\x1c\xce\x97\x7d\xd2\x7e\x88\xac\x4a\xa3"
+ "\x14\xca\xde\x83\x63\xcc\xe2\xe3\x24\x1a\x6c\xe2\x5c\x0a\xfa\xa3"
+ "\x84\x27\x5a\x28\x3f\x1a\x69\x09\x65\x5f\x13\x31\x8f\xc8\xfe\xf6"
+ "\x94\x83\x20\x3d\x91\xb6\x30\x1e\x8d\x16\xe8\xda\x45\xc8\x83\x8f"
+ "\x33\xba\xbe\xbc\x2c\x58\xba\x2a\xc5\xf5\xbf\x63\xbb\xcd\xd6\x1e"
+ "\x8c\x19\xa0\xc6\x33\xf7\x90\xae\xab\x4b\xed\x20\xb4\x68\x5c\x0d"
+ "\x35\x1e\x2b\xe1\x41\x67\x05\x59\xae\x5f\xff\xd7\x1e\xf2\x54\x01"
+ "\x32\x73\x00\xd6\xdc\xf4\x0e\x87\x31\xb0\x45\xc1\xe8\x6d\x51\x8e"
+ "\xb3\x8c\xea\xf0\x4d\x6f\x8b\xc2\x09\x3a\xc7\xa5\xb4\xc8\x03\xa7"
+ "\x77\xf8\xf8\x7e\xf4\xb6\x9e\x1f\x7a\xab\xc4\xf8\xa7\x16\xad\x37"
+ "\xbd\x55\xa5\x8c\xde\xaa\xe9\xd4\x68\x51\xf3\xa0\x2b\x83\x2b\x37"
+ "\x3c\x26\x00\x7a\x03\xbe\x07\xea\x30\x37\xbd\x23\x4a\x81\xde\x22"
+ "\xbe\x2d\x80\xef\x71\x2d\x7e\xe8\x0d\xf8\xb6\x00\xbe\x2d\x41\xe0"
+ "\x3b\x22\xcf\x9b\xde\x96\xf3\x84\xef\x08\x71\xfe\xcf\xd2\x0f\xdf"
+ "\x11\x0a\x46\xef\xf0\x03\x40\x6f\xc0\xb7\x25\x48\x7c\x47\xbc\x12"
+ "\x80\xfe\x00\x7c\x0f\xd4\x9d\x6e\x7a\x8f\x57\x50\x55\xa3\x88\xef"
+ "\x46\xc0\xf7\xf8\xcf\x7c\xd3\xbb\x11\xf0\xdd\x08\xf8\x6e\x0c\x02"
+ "\xdf\xea\x6f\xfb\xd1\xfb\x3c\xe1\x5b\xcd\x7c\x4c\x1a\x1a\xfb\xe1"
+ "\x5b\x9d\xc9\xe8\xad\x8e\xa2\xc6\x46\xc0\x77\x63\x90\xf8\x1e\x1f"
+ "\x19\x00\xbd\x01\xdf\x03\x75\xb6\x9b\xde\x13\x32\x81\xde\x22\xbe"
+ "\x1b\x01\xdf\xb7\x15\xf9\xa1\x37\xe0\xbb\x11\xf0\xdd\x18\x04\xbe"
+ "\x27\x2c\xf6\xa6\x77\xe3\x79\xc2\xf7\x84\x69\x22\xbd\xfb\xe1\x7b"
+ "\x7c\x1b\xa3\xf7\x78\x03\xd0\x1b\xf0\xdd\x18\x24\xbe\x27\x14\x04"
+ "\x60\x27\x00\xbe\x07\xda\x0a\x6e\x7a\x4f\x6c\xa3\xaa\x26\x11\xdf"
+ "\x4d\x80\xef\xc7\xef\xf1\x4d\xef\x26\xc0\x77\x13\xe0\xbb\x29\x08"
+ "\x7c\x4f\xfc\xb4\x1f\xbd\xcf\x13\xbe\x27\x8a\xf1\x2f\x9b\xfa\xe1"
+ "\x7b\x62\x12\xa3\xf7\x04\x27\x35\x36\x01\xbe\x9b\x82\xc4\xf7\xc4"
+ "\xae\x50\xec\x93\xb5\xe5\x44\xe1\x4d\xf3\x4b\x17\x9e\x3b\x1b\xe5"
+ "\xd2\xd9\xdf\x8d\x8d\x72\xa9\xda\xb7\x8d\x12\x59\xc3\x68\x1e\x99"
+ "\x1a\x9a\x8d\x72\xa9\xdf\xf3\x0f\x83\xd9\x28\x03\x69\x7e\x59\xfd"
+ "\xb9\xb3\x53\x2e\x7b\xe7\xbb\xb1\x53\x2e\x2b\xf0\x6d\xa7\x5c\x16"
+ "\xc7\x68\x7e\xa9\x2d\x34\x3b\xe5\x32\xbf\xfe\x0f\x06\xb3\x53\x06"
+ "\xd2\x5c\x33\xeb\xdc\xd9\x2a\x9a\x1b\xbe\x1b\x5b\xe5\x72\x87\x6f"
+ "\x5b\xe5\xf2\x37\x19\xcd\x2f\x4f\x0a\xcd\x56\xd1\x24\x86\x62\xab"
+ "\x0c\xa4\xf9\xa4\x43\xe7\xce\x5e\x99\xb4\xe7\xbb\xb1\x57\x26\xad"
+ "\xf0\x6d\xaf\x4c\x12\xc7\x3f\x9a\x9a\xd0\xec\x95\x49\x01\x8c\x7f"
+ "\x06\xda\x2b\x03\x69\x7e\xe5\xb4\x73\x67\xb3\x5c\x79\xe9\x77\x63"
+ "\xb3\x5c\x61\xf5\x6d\xb3\x5c\x51\xc6\x68\x7e\x45\x5c\x68\x36\xcb"
+ "\x95\x7e\xe3\x9f\x0c\x66\xb3\x0c\xa4\x79\xd4\xee\x73\x67\xb7\x44"
+ "\x6d\xfd\x6e\xec\x96\xa8\x79\xbe\xed\x96\x28\x35\xa3\xf9\x95\x6f"
+ "\x86\x66\xb7\x44\x1d\x08\xc5\x6e\x41\x5a\x23\xcd\xd1\x56\x61\x34"
+ "\xbf\x2a\x95\x86\x1f\x4b\xee\x05\x7b\x44\x05\x74\x57\xb5\x13\xae"
+ "\x1c\x69\xde\xc0\x68\xee\x0a\xb7\x6a\x81\x3e\x7a\xa4\x99\xd0\x8e"
+ "\xff\xd3\x84\xbb\x0c\xc7\x0c\x94\x23\xd0\x16\x05\x39\xce\x4d\xde"
+ "\xe4\xcc\x27\xe1\xda\xec\x3c\xf8\xff\xaa\xc5\x98\x47\x9b\x5d\xd8"
+ "\x08\x6d\x0c\xc3\x35\x0a\xa7\x71\x9f\xc9\xa5\x6a\x8e\x3b\xce\x4d"
+ "\x79\x8f\x4e\xae\x34\xf5\x82\x2d\x41\x9f\xd5\x44\x9a\xdb\xab\x88"
+ "\xd9\xf9\x31\xa9\x6b\xf8\x4f\xc2\x87\x5b\xaf\xb9\xc9\x49\x74\xf4"
+ "\xff\x74\x91\x35\xe9\x56\xe2\x5a\xa2\x51\x9a\x33\xab\x01\x17\x7f"
+ "\x26\x09\x6d\xf4\x0c\xfd\xa7\x4e\xd9\xab\xb2\xe5\xba\x80\xa9\x2e"
+ "\x63\x6b\xbc\x53\x65\x4b\x3d\x98\x61\xe5\x94\x0e\xa2\x5b\x61\xa3"
+ "\xb4\xf8\x29\x22\x2f\x6e\x21\x8a\x6d\x4f\x11\xe5\xb6\x16\xa2\xae"
+ "\xb1\x35\x90\xda\x13\xd5\xa4\xb6\xe3\x0b\x52\x7b\x06\xae\x1e\xb8"
+ "\x78\xb8\x72\xbf\x20\x35\xed\x84\x3c\x74\x92\x90\x1c\x1b\xb5\xff"
+ "\xd4\x42\x22\x6b\x9c\x0d\x44\xfb\x24\x21\xa7\xb8\x29\x0f\x2b\x93"
+ "\x49\x24\xfd\xa7\x86\xd0\x25\x1a\x0e\xde\xc9\x31\xdd\xec\xb4\x93"
+ "\x1a\x9b\x03\xdf\x47\xc3\x7b\x79\x8e\x0d\xca\xe7\xab\xd1\x97\xa1"
+ "\xbd\x26\xf7\x23\x68\xdf\x82\x2a\xa0\x73\xa9\x64\x93\x15\xf7\x90"
+ "\xe8\x6d\xc0\x66\xc4\x4c\x02\x65\x98\xd9\xd5\x13\x2c\x66\xa6\x30"
+ "\xff\xef\xcf\x6a\x26\x00\xbd\xaf\xe0\x9f\x4d\x52\xcf\xfd\xa2\x99"
+ "\xe2\x7e\x30\x5c\x9f\xa9\xeb\xfa\x98\xe0\x9a\x75\xc2\x7a\x42\xe6"
+ "\xb8\x88\x40\x13\x5c\x4b\x9e\x9b\x4a\x22\x70\x9f\x1a\xff\x7f\xba"
+ "\x09\x66\x9b\x9d\x6c\x72\x42\x5d\x4f\x39\xfa\xea\x5a\x57\x50\x47"
+ "\xe0\xdd\x15\x75\x7a\x2b\x51\xa6\x12\x35\xd2\x19\x6c\xd1\x2d\x73"
+ "\xdb\xc8\x25\xab\xba\x28\x45\x1a\x23\x6d\x91\xce\x58\x9e\x44\x7b"
+ "\x73\x8a\x9d\xe4\x38\x88\xda\x9c\x0d\xf7\x4c\x6a\x37\x93\x6f\x09"
+ "\xd4\x31\x85\xaa\x16\x54\x01\x3e\xa6\x22\x26\xac\xdc\xe4\x74\xc0"
+ "\xc1\x04\x5a\x34\x59\x57\x01\xed\xc5\xb5\xfd\xe0\xda\x7c\x55\x20"
+ "\xeb\x1f\x03\x6c\x42\x37\x9e\x2d\x0a\x86\xe7\x6b\xe2\x00\xcf\xd6"
+ "\x5e\xb0\xf5\x18\x9e\x47\x75\x0c\x8d\x67\x8b\xd2\x8d\x67\xed\x43"
+ "\x6e\x3c\x5f\x73\xb3\x7f\x3c\x5f\x6d\x64\x78\xb6\x68\x2f\x4c\x3c"
+ "\x5f\x7d\xf5\xe0\x78\xbe\x9a\xf8\xc7\xb3\x45\x23\xd9\xbb\x23\x83"
+ "\xe7\xab\x93\xce\x1f\x9e\x2d\x8a\xd0\xf0\x7c\x75\x8c\x37\x9e\xb5"
+ "\xb3\x18\x9e\xaf\x72\x84\x86\xe7\x6b\xfc\xfa\x3f\x1e\xcc\xde\xf6"
+ "\xc0\xb3\x28\x9f\xaf\x55\xd3\x70\x0b\xc8\x67\x8b\x28\x9f\xc7\xb5"
+ "\x04\x80\x67\x0f\xf9\xfc\xa3\xc9\x6e\x3c\x5f\x2b\xf3\x8f\xe7\xa9"
+ "\x4f\x88\x78\xbe\x40\xe5\xf3\x8f\xbe\x1d\x1c\xcf\x3f\xaa\x1f\x04"
+ "\xcf\xa5\xd2\x58\x62\x64\xf0\x3c\x55\x77\x1e\xf1\x1c\xa2\x7c\x9e"
+ "\x2a\xf7\xc6\xf3\x8f\x22\x19\x9e\xaf\xa9\x0e\x0d\xcf\xd7\x46\x85"
+ "\x32\x96\x71\xe3\xb9\x51\x94\xcf\x3f\xb1\x02\x9e\x41\x3e\x37\x8a"
+ "\xf2\x79\xfc\x67\x43\xe3\xb9\xd1\x43\x3e\x5f\x7b\xd2\x8d\xe7\x9f"
+ "\x7c\xea\x1f\xcf\x3f\xb9\x81\xe1\xb9\xf1\x02\x95\xcf\x3f\xfe\x60"
+ "\x70\x3c\xff\x78\xb7\x7f\x3c\x37\x6a\xa4\x71\xda\xc8\xe0\xf9\xc7"
+ "\x8e\xf3\x87\xe7\xc6\x10\xe5\xf3\x8f\x8f\x7a\xe3\xf9\x5a\x1b\xc3"
+ "\xf3\xb5\xa5\xa1\xe1\xf9\x27\xed\xa1\x8c\x13\x3d\xf0\x2c\xca\xe7"
+ "\xeb\xab\x68\x78\x23\xc8\xe7\x46\x51\x3e\xdf\x56\x14\x00\x9e\x3d"
+ "\xe4\xb3\xee\x3d\x37\x9e\xaf\xdf\xe3\x1f\xcf\xd7\xb9\x44\x3c\x5f"
+ "\xa0\xf2\xf9\xba\x17\x07\xc7\xf3\x75\xa9\x83\xe0\xb9\x54\x1a\x03"
+ "\x8f\x0c\x9e\xaf\xab\x3e\x8f\x78\x0e\x51\x3e\x5f\xf7\x8a\x37\x9e"
+ "\x75\x6f\x32\x3c\xeb\xf4\xa1\xe1\xf9\x7a\xbf\xf1\x5f\x07\x1b\x83"
+ "\xbb\xf1\xdc\x24\xca\xe7\x1b\x72\x01\xcf\x20\x9f\x9b\x44\xf9\xfc"
+ "\xf8\x3d\x43\xe3\xb9\xc9\x43\x3e\xff\xd4\xe8\xc6\xf3\x0d\x6b\xfc"
+ "\xe3\x79\x5a\x2d\xc3\x73\xd3\x05\x2a\x9f\xa7\x2d\x1e\x1c\xcf\xd3"
+ "\xe2\xfc\xe3\xb9\x49\x23\xcd\x2f\x8c\x0c\x9e\xa7\x95\x9e\x3f\x3c"
+ "\x37\x85\x28\x9f\xa7\xa5\x7b\xe3\xf9\xa7\x05\x0c\xcf\x3f\x8d\x0d"
+ "\x0d\xcf\x37\x18\x46\x66\x7e\x23\x3a\x17\xe7\x37\x7a\x70\x7e\xc3"
+ "\xbd\xf7\x4f\x1f\x51\xcf\xf0\xdc\x0b\x78\x7e\xd9\x13\xcf\xc7\xfa"
+ "\xcf\x6f\xdc\xf8\x04\xdf\x87\xe7\xe8\x01\x78\xe6\x01\xcf\xbd\x02"
+ "\x9e\x6f\xda\x2a\xcd\x6f\x98\xdb\x77\x03\x4e\x4e\x10\x73\x22\x60"
+ "\xb9\x58\xc4\xf2\x31\xc0\x32\xd0\x90\x07\x1a\xd7\x58\x1a\x48\x82"
+ "\x9d\xd1\xb2\x07\x68\xcc\x7b\xe2\xb8\xa7\x8d\x43\xfc\x22\x6e\x25"
+ "\x0c\xd7\xae\x02\xec\xa6\x7d\x4a\x6a\x33\xe0\xda\x00\x57\x36\x5c"
+ "\xe4\x53\x52\xd3\x06\xd8\x5d\xee\x89\xdd\x7a\x11\xbb\x37\x4d\x1e"
+ "\x1c\xbb\x37\x3a\xcf\xdf\x5c\xc6\x4d\x6c\xfe\xeb\x58\x92\x3a\xe1"
+ "\xe1\x66\x6a\xce\x6c\x10\xf1\x79\x82\x24\x38\x49\x04\x7d\x5c\x37"
+ "\x41\x99\x44\xd4\x1b\x5d\x84\x33\x3e\x45\xd4\xc6\x2f\xa1\xdd\x52"
+ "\xff\x6d\x21\xca\x8f\x1d\xff\x49\x6a\x3a\x1a\x48\xcd\x99\x8f\x48"
+ "\x0d\x0f\xd7\x09\xb8\xa0\xae\x09\x4b\x3d\xdb\x6d\x17\xdb\x1d\x7d"
+ "\x29\x94\x35\xd5\x7f\xbb\x6f\xea\x12\xda\x9d\x02\xed\xee\x71\xb7"
+ "\xdb\x0c\xfd\x00\xf8\x73\x05\x2f\xce\x87\x24\xd8\xc9\x25\xab\x9d"
+ "\x94\xf6\x88\xf8\x47\xfe\x7c\x7c\xd4\x41\x12\x52\x81\x67\x4b\x00"
+ "\xff\xb6\xbd\x24\x27\x0b\xf0\xdf\xe3\x40\xdc\xd9\xcd\xb9\x67\x01"
+ "\xff\x37\x45\x53\xa0\x5f\x2f\xe2\xff\x18\xe2\xff\xc6\x79\xbc\x80"
+ "\xff\x1b\x15\xa1\xe1\x3f\x3a\x00\xfc\x07\x32\x1f\x72\x2b\xe2\xdf"
+ "\xda\x83\xf3\x21\xee\x3d\xa0\x43\xe0\xdf\x73\x3e\xe4\x66\x0f\xfc"
+ "\xdf\x3a\x08\xfe\x6f\xd9\x2a\xcd\x87\x7c\xf7\xf8\xbf\x65\x08\xfc"
+ "\xdf\x3c\x08\xfe\x47\x7a\xee\xe3\x96\xf3\x88\xff\x5b\x87\xc0\xff"
+ "\x2d\x01\xe0\xdf\xa2\x08\x0d\xff\xb7\xf4\xc3\xff\xcd\x22\xfe\x6f"
+ "\x0e\x11\xff\xb7\x06\x82\xff\x00\xe6\x4f\x6e\xcb\xc5\xf9\x93\x1e"
+ "\x9c\x3f\x71\xef\x05\x1e\x0a\xff\x1e\xf2\x3f\xc6\x03\xff\xb7\x0d"
+ "\x82\xff\x9f\x49\xf8\xbf\x00\xe4\xff\xcf\x86\xc0\x7f\xcc\x60\xf8"
+ "\x1f\xe1\xb9\x92\x9f\x9d\x47\xfc\xdf\x36\x04\xfe\x7f\x16\x08\xfe"
+ "\x43\x94\xff\x3f\xeb\x87\xff\x18\x11\xff\x31\x21\xe2\xff\xb6\x00"
+ "\xf0\x1f\xc8\x7c\xcb\xed\x88\x7f\x90\xff\x8d\x72\x8f\x3d\xe1\x43"
+ "\xe0\xdf\x73\xbe\xe5\xe7\x1e\xf8\xbf\x7d\x10\xfc\xc7\x6e\x95\xe6"
+ "\x5b\xbe\x7b\xfc\xc7\x0e\x81\xff\x9f\x0f\x82\xff\x91\x9e\x5b\x89"
+ "\x3d\x8f\xf8\xbf\x7d\x08\xfc\xc7\x06\x80\xff\xc6\x10\xe5\x7f\x6c"
+ "\x3f\xfc\xff\x5c\xc4\xff\xcf\x43\xc4\xff\xed\x81\xe0\x3f\x80\xf9"
+ "\x99\xe9\x38\x9e\x05\xf9\xdf\x58\xe0\x71\x36\x60\x28\xfc\x7b\xc8"
+ "\xff\x3b\x3c\xf0\x3f\x7d\x10\xfc\xdf\x29\xe1\xff\x02\x90\xff\x77"
+ "\x0e\x81\xff\x3b\x06\xc3\xff\x08\xcf\xc5\xdc\x79\x1e\xf1\x3f\x7d"
+ "\x08\xfc\xdf\x19\x08\xfe\x43\x94\xff\x77\xf6\xc3\xff\x1d\x22\xfe"
+ "\xef\x08\x11\xff\xd3\x03\xc0\x7f\x20\xf3\x39\x33\x85\xf9\x9c\x1e"
+ "\x9c\xcf\x71\x9f\x11\x19\x02\xff\x9e\xf3\x39\x33\x3c\xf0\x3f\x73"
+ "\x10\xfc\xdf\xb5\x55\x9a\xcf\xf9\xee\xf1\x7f\xd7\x10\xf8\x9f\x31"
+ "\x08\xfe\x47\x7a\xee\xe6\xae\xf3\x88\xff\x99\x43\xe0\xff\xae\x00"
+ "\xf0\xdf\x14\xa2\xfc\xbf\xab\x1f\xfe\x67\x88\xf8\x9f\x11\x22\xfe"
+ "\x67\x8e\xd0\xfc\xcf\xdd\x3a\x9c\xff\xe1\x95\xc7\x0a\x7a\xcb\x2a"
+ "\x4d\xbc\xc1\x96\x1b\x21\xd3\x12\xa7\xb2\x39\xce\x9c\xde\x45\xe6"
+ "\x9e\x06\x9e\xa4\x9e\x26\x4f\x9e\x56\x63\x2c\xcb\x54\x0a\xe3\x7f"
+ "\xaf\x33\xa2\x70\x39\x0d\x0b\xaa\xb6\xad\x22\x72\x57\xb8\xf5\x1a"
+ "\x4c\x33\x1f\x77\x10\x6c\xf3\x26\xa4\xc1\x09\x37\x0d\x70\x0e\x8e"
+ "\x7e\xa3\x53\x57\xe4\x43\x9e\x1e\x2b\xb1\x01\x5e\x6a\x6c\x56\xa0"
+ "\xfd\x06\x01\x5b\xc8\x8b\xe3\x5c\x5c\xf5\xae\x53\x44\xee\xfc\xa7"
+ "\xe6\x0a\xe0\x71\xa4\x6a\x1d\x91\x45\xd9\x28\x8f\xbc\x44\x1e\x21"
+ "\x5f\xb5\x1b\x70\xbf\xd2\xdd\x57\xd7\x01\xbe\x9d\xff\xd4\x5d\x51"
+ "\x01\xf9\x46\x7e\x5e\x26\xae\x9d\x9d\xc7\x8f\x33\xd5\x58\x80\x96"
+ "\x45\x71\x21\xf2\xe9\xee\x40\xce\xbf\x04\x30\x4f\x71\x4f\x3d\xce"
+ "\x53\xf0\x4a\x8b\x3c\x30\x3e\x59\x14\x5e\x67\x5a\x47\x9c\x4f\xf7"
+ "\xa4\x06\xc6\xa7\x7b\x3e\xf2\xe6\xd3\x48\xcf\x1f\xdc\xb3\x9d\xf1"
+ "\xe9\x1e\x3d\xe3\xd3\xdd\x55\xa1\xf1\xe9\x9e\x90\xf6\xff\x0e\x1c"
+ "\x4f\xcf\xca\xc4\xf1\x34\xf0\x29\xc0\xfe\x64\xd9\xe2\x75\x06\x77"
+ "\xc4\xf9\x34\x4b\x13\x18\x9f\x66\xad\xe9\xc7\xa7\x11\x1e\xe7\xce"
+ "\x9a\xce\xf8\x34\x4b\xcd\xf8\x74\x6f\x52\x68\x7c\x9a\x15\xc0\xf9"
+ "\x8f\x40\xc6\x7d\xf7\x69\x71\xdc\xc7\xc3\xb8\x2f\x30\x3e\x35\x2a"
+ "\xbc\xce\x0c\x8f\x38\x9f\x66\x9b\x02\xe3\xd3\x7d\x93\xbc\xf9\x34"
+ "\xd2\xe3\xb1\xd9\x36\xc6\xa7\xd9\x87\x18\x9f\x66\x93\xd0\xf8\x74"
+ "\xdf\xb4\x91\x19\x9f\xfc\xa2\x1a\xc7\x27\xc0\xa7\x00\xfb\x53\xe3"
+ "\x16\xaf\x33\xce\x23\xce\xa7\x5f\xe8\x03\xe3\xd3\x2f\x3e\xe8\xc7"
+ "\xa7\x11\x1e\x37\xfc\x82\xc5\x03\xe6\x7e\x91\xcc\xf8\x74\xdf\xde"
+ "\xd0\xf8\xf4\x0b\xbf\xfe\x4f\x83\xb3\xa3\xef\x4f\x45\x3b\x9a\x07"
+ "\x3b\x3a\x30\x3e\x35\x29\xbc\xce\x64\x8f\x38\x9f\xee\x57\x07\xc6"
+ "\xa7\xfb\x97\x7b\xf3\x69\xa4\xed\xdb\xfb\x63\x18\x9f\xee\x57\x30"
+ "\x3e\xc5\x27\x86\xc6\xa7\xfb\x03\xd8\xff\xe9\xfb\x1c\xd6\x40\x9b"
+ "\xef\xc1\xa8\x0b\xcb\xe6\x7b\xe0\xdd\xc0\x78\xf5\xe0\xa5\xe7\xd6"
+ "\xe6\x7b\xc0\xca\x78\xf5\xc0\x9b\x8c\x57\xf7\x3b\x43\xe3\xd5\x83"
+ "\x7e\xfd\x3f\x0e\x75\x7e\x6b\xa0\xdd\x37\xa7\xfa\xc2\xb2\xfb\xe6"
+ "\x04\x28\xff\xe6\x7c\x70\x6e\xed\xbe\x39\xa2\xfc\x9b\x23\xca\xbf"
+ "\x07\x43\x94\x7f\x73\x02\x90\x7f\xbe\xcf\x7d\x0d\xb4\xfd\xe6\xa6"
+ "\x5f\x58\xb6\xdf\xdc\xc8\xc0\x78\x35\x77\xe5\xb9\xb5\xfd\xe6\xc6"
+ "\x32\x5e\xcd\x55\x32\x5e\x3d\x34\x2f\x34\x5e\xcd\xcd\x0d\xf5\xbc"
+ "\xd8\x40\xfb\x2f\xf1\x02\xb3\xff\x12\x02\xb4\xff\x12\xcf\xb1\xfd"
+ "\x97\x20\xda\x7f\x09\xa2\xfd\x97\x10\xa2\xfd\x97\x18\x92\xfd\xd7"
+ "\x8f\x57\x62\xbf\x7a\xb8\xe6\xc2\xb2\x01\x1f\x5e\x11\x18\xaf\x1e"
+ "\x3e\x72\x6e\x6d\xc0\x87\x4b\x18\xaf\x1e\x4e\x61\xbc\x4a\x3c\x10"
+ "\x1a\xaf\x1e\xf6\x1b\xff\x76\xa8\xf3\x69\x03\xed\xc0\x5f\x66\x5e"
+ "\x58\x76\xe0\x2f\x03\x1c\xff\xfe\x72\xcd\xb9\xb5\x03\x7f\x29\x8e"
+ "\x7f\x7f\x29\x8e\x7f\x1f\x09\x71\xfc\xfb\xcb\x00\xc6\xbf\x81\xcc"
+ "\xfb\xcd\x6f\x40\x1b\xd0\x65\x38\x56\x10\x01\xf4\x8f\xc8\x24\x5c"
+ "\x4f\x14\xf0\x4b\x09\xfc\xca\xd3\x92\x5e\x03\xf0\xcb\xee\x24\x73"
+ "\xd7\x34\xd3\xba\x76\x17\xe9\x01\x5e\x9d\x05\x3b\xd0\x6c\x6f\xc3"
+ "\x33\x7a\x77\xb6\x70\xf3\xd7\x3c\xbe\x46\x4d\x90\x5f\x48\x7f\x97"
+ "\x72\x41\x15\x05\x7e\x09\xfc\x53\xb6\xc6\x3b\x0d\x56\xf2\xd0\xc9"
+ "\x66\xba\xda\x4a\x69\xad\xde\x01\x75\xda\x67\xaa\xd5\x37\x10\x90"
+ "\x2e\x97\x68\x1f\x41\xbe\xcc\xbf\x1a\xd3\xcd\xf6\x06\x82\x7e\x3f"
+ "\x85\x39\xf0\x66\x5d\xa4\xf3\x7f\x75\x4a\xf4\xdf\x84\xe7\x0a\x25"
+ "\x1f\x4d\xe6\x13\xa5\x02\xff\xfb\xcf\xa9\x0a\xfc\xff\x5f\x9d\xfa"
+ "\x65\x3c\x9f\x38\xe2\xb6\xe0\x3c\x61\xfe\x8f\x6f\xd6\x5c\x21\xd5"
+ "\x71\xf5\x0a\x4a\xa1\x8e\x13\xea\xba\xec\x04\xeb\x59\xd7\x65\x22"
+ "\x39\xe9\x44\x5d\xd7\xd3\x46\xb2\xbb\xa8\xbd\x2e\xf7\x6b\x92\x70"
+ "\x1a\xd7\x05\x10\x4f\xf3\x97\x33\x7e\xcf\xdb\xce\x37\xeb\xae\xb0"
+ "\x72\xf3\x93\xeb\xea\x09\x89\xc8\x03\x5a\x3b\x09\x27\x9c\xd7\xe4"
+ "\x88\x02\xe8\xa5\x37\xe7\xb6\x10\xa0\x5d\xae\xd9\xf9\x25\xd2\x53"
+ "\x0f\xef\xa7\xf7\xad\x37\x84\x5b\xf3\x31\x0d\x69\x8b\xfb\x4c\xcd"
+ "\xa9\x76\x21\x8f\xf4\x9e\xf1\x2e\x97\x98\x33\x7b\x48\x9d\x93\x10"
+ "\xf8\x5e\xdc\x27\x49\x0d\x80\xaf\x79\x21\xca\xed\xf9\xb6\x91\x99"
+ "\xaf\x4c\x8a\x45\xbb\xd5\x65\xb0\xc8\x59\x1d\x47\x75\x0c\x8d\x2f"
+ "\x8b\xc2\x8d\xaf\x5f\x7d\x3a\x3c\x7c\xfd\x2a\x6f\x64\xf1\x35\xd2"
+ "\xf6\xeb\xaf\xe6\x0c\x0f\x5f\xbf\xfa\x88\xe1\xeb\xd1\x2e\x86\xaf"
+ "\x5f\x99\xdc\xf8\x1a\xd5\x71\xee\xf0\xf5\xe8\x6e\x86\xaf\x47\x93"
+ "\x43\xc3\x57\xd2\xac\x91\x99\x67\x5d\x50\x8a\xb6\x36\xe0\x4b\x94"
+ "\x5f\xe3\x5a\x02\xc0\x97\x87\xfc\x5a\x70\xf3\xf0\xf0\xf5\xd8\x57"
+ "\x23\x8c\xaf\x11\xb6\xb9\x1f\x3b\x30\x3c\x7c\x2d\xb8\x8e\xe1\xeb"
+ "\xb1\x79\x0c\x5f\x0b\xb4\x6e\x7c\x8d\x6b\x39\x77\xf8\x7a\x8c\x30"
+ "\x7c\x25\x99\x42\xc3\xd7\x82\x90\xfc\x5f\x0d\x1c\x1f\x2c\x74\xe0"
+ "\xf8\xc0\x65\x68\x14\xe5\xd7\xf8\xcf\x86\xc6\x57\xa3\x87\xfc\x5a"
+ "\xf8\xe2\xf0\xf0\xb5\xf0\xee\x91\xc5\xd7\x48\x8f\x13\x16\x2a\x87"
+ "\x87\xaf\x85\x5b\x19\xbe\x1e\x7f\x93\xe1\x6b\x61\xae\x1b\x5f\xe3"
+ "\x3f\x3b\x77\xf8\x7a\x3c\x99\xe1\xeb\x71\x6d\x68\xf8\x7a\xc2\xbf"
+ "\xff\xe7\xa0\xe6\xb5\x17\x25\xe1\x98\x06\xf0\x25\xca\xaf\xdb\x8a"
+ "\x02\xc0\x97\x87\xfc\x7a\xf2\xdb\xe1\xe1\xeb\xc9\x3d\x23\x8c\xaf"
+ "\x11\x1e\xdb\x3c\xb9\x62\x78\xf8\x7a\xf2\x6b\x86\xaf\x27\x23\x19"
+ "\xbe\x9e\xb4\xba\xf1\x75\x5b\xd1\xb9\xc3\xd7\x13\x26\x86\xaf\x27"
+ "\x72\x43\xc3\xd7\xa2\x00\xfc\xbf\x06\x32\x1f\xbf\xf8\x10\x8e\xc3"
+ "\x5c\x86\x26\x51\x7e\x3d\x7e\xcf\xd0\xf8\x6a\xf2\x90\x5f\x8b\x1f"
+ "\x1e\x1e\xbe\x16\xcb\x46\x16\x5f\x23\x3d\x1e\x4b\xae\x19\x1e\xbe"
+ "\x16\xdf\xcf\xf0\x95\x9c\xce\xf0\xb5\x38\xce\x8d\xaf\xc7\xef\x39"
+ "\x77\xf8\x4a\xd6\x32\x7c\x2d\xb2\x86\x86\xaf\xc5\x01\xf8\xff\x09"
+ "\x74\x1d\x21\x25\x6a\x78\x63\xc8\x25\x6f\x0d\x0f\x63\x4b\x96\x5e"
+ "\xd8\x63\xc8\x25\xd1\xc3\xc3\xd8\x92\x83\x0c\x63\x4f\x35\x30\x8c"
+ "\x2d\x79\xe5\xfc\x8c\x21\x9f\x2a\x60\x18\x7b\x6a\x56\x68\x18\x4b"
+ "\x19\xc1\xf5\x8f\x65\xb9\xc3\x1b\x47\x2e\x9b\x34\x3c\x8c\x2d\xfd"
+ "\xe8\xc2\x1e\x47\x2e\xdd\x3e\x3c\x8c\x2d\x1b\xcf\x30\xb6\x74\x3a"
+ "\xc3\xd8\x32\xc5\xf9\x19\x47\xa6\xb4\x31\x8c\xa5\x84\xb8\x6e\xb3"
+ "\x2c\xa4\xf3\x2f\xbe\xd7\x6d\xf4\xb6\xe1\x8d\x25\xf5\x9b\x86\x87"
+ "\x31\xfd\x0d\x17\xf6\x58\xf2\x69\xc7\xf0\x30\xa6\x7f\x8e\x61\xec"
+ "\xe9\xdd\x0c\x63\xfa\x15\xe7\x67\x2c\xf9\xf4\x1c\x86\xb1\xa7\x95"
+ "\xa1\x61\x4c\x6f\x1f\xb9\xf5\xa6\x67\xe3\x87\x37\x9e\x7c\xe6\xab"
+ "\xe1\x61\xec\x99\x17\x2f\xec\xf1\xe4\x33\x0b\x87\x87\xb1\x67\xbe"
+ "\x60\x18\x7b\x46\xce\x30\xf6\x4c\xfd\xf9\x19\x4f\x2e\xaf\x62\x18"
+ "\x5b\x9e\x1a\x1a\xc6\x9e\x0d\xc0\xff\x7f\xa0\xeb\x64\x2b\x0f\x0c"
+ "\x6f\x4c\xb9\x72\xf6\xf0\x30\xb6\xe2\xf4\x85\x3d\xa6\x5c\x61\x1a"
+ "\x1e\xc6\x56\xce\x60\x18\x5b\xa1\x67\x18\x5b\x19\x73\x7e\xc6\x94"
+ "\x2b\x22\x19\xc6\x9e\x3d\x1a\x1a\xc6\x56\x1e\x1a\xb9\xf5\xbd\x54"
+ "\xf5\xf0\xc6\x95\xab\x5f\x1b\x1e\xc6\x56\x3f\x76\x61\x8f\x2b\x57"
+ "\x4f\x1d\x1e\xc6\x56\xef\x61\x18\x5b\x55\xc3\x30\xb6\xba\xf4\xfc"
+ "\x8c\x2b\x57\x65\x32\x8c\xad\x0a\xd1\x1f\x45\xea\x00\xff\x57\xcb"
+ "\x57\x65\x2c\x5e\xb1\x3c\x45\xbb\x7c\x55\x7a\xda\x1a\xed\xda\xe5"
+ "\x1b\x96\xce\xb8\xf6\xb9\x69\xda\xb4\x4c\x6d\xda\xf2\x55\x4f\x8b"
+ "\x09\x29\x63\xc9\x23\x4b\x57\x2c\xce\xc4\x14\xc8\xfd\xf4\xaa\x95"
+ "\x4b\x57\xa5\x6b\xd3\x96\xae\x79\x6e\x79\xda\x52\xfc\x7f\xad\x76"
+ "\xd9\xea\x34\x48\x58\xb2\x74\x79\xc6\x52\xed\x53\xcf\x2d\x5b\xb6"
+ "\x34\x6d\xed\x58\xf2\xd0\x73\x2b\xd2\x97\xa7\xae\x58\xaa\x9d\xf5"
+ "\xd0\xdd\x37\xcc\x9b\xfd\xcb\x79\x33\x67\x62\x70\x32\x8f\xd8\x64"
+ "\x51\xd4\xd0\x1a\x07\x98\x93\x1f\xe7\xd6\x1f\xa9\xd3\x10\x21\x3e"
+ "\xee\xb6\x0e\xa2\xde\x9a\x46\xe4\x5b\x3a\x88\xc2\xd8\x41\x94\xda"
+ "\x67\x48\x1c\x35\x4e\xae\x82\xf4\x48\x6a\x9c\x6f\xa7\xc5\xfb\xaa"
+ "\xa9\x71\x41\xb4\x5d\x75\x97\x15\xf3\x52\xe3\x5d\x6a\x7c\x07\xb4"
+ "\x95\x43\x7a\x69\x0b\xb7\xbe\xc0\xae\x9a\x69\xca\xf9\x9a\x70\x74"
+ "\xec\x9a\x39\xaf\xf3\x76\xee\x03\x8c\xd0\x04\x6d\x27\x5c\x5a\x0a"
+ "\x5c\x89\x84\x5b\x4b\xe0\x52\xc3\x15\x05\xd7\x2c\xb8\xe6\xc0\x95"
+ "\x0c\xd7\x0a\xb8\x60\x94\xbc\x36\x17\xae\x2d\x70\x95\xc0\x55\x4a"
+ "\xb8\xf4\x48\xb8\x62\xe0\x82\xbc\xe9\x0b\x59\x39\xe9\x7a\xb8\xb6"
+ "\xc3\x65\x21\xdc\x73\x50\x56\x86\x12\x2e\xa0\x76\x46\x03\x5c\x49"
+ "\x70\xa5\xc3\x95\x05\xd7\x6e\xb8\x0e\x43\xbe\x15\xec\xdd\x3a\x48"
+ "\x5b\x77\x88\x40\x3d\x87\xbe\xd6\x61\x7e\x2b\xe1\x32\xe5\x70\xc1"
+ "\x37\x33\xab\x21\x5d\xd3\x2f\x5f\xb2\xc7\xff\x59\x43\x94\x59\x16"
+ "\x91\x77\x95\x55\x88\x81\xc7\xa5\x7d\xe0\xca\x27\x61\x2e\xe3\x4c"
+ "\x53\xea\xf5\x44\x76\x82\x4b\x33\x9a\x0b\x50\xce\xcc\xb7\xb3\x98"
+ "\x8e\x69\x46\xa4\x59\x77\x51\x1a\xf4\xf8\x37\xd4\x18\xd3\x2c\x38"
+ "\xbc\xa5\x19\xc4\xdf\xd7\x58\x65\x0f\x08\x31\xd1\x68\xf1\x84\x77"
+ "\x69\x4e\xd2\xcb\x2c\xf6\x5b\x9a\x30\x8f\x46\x0d\x13\xd4\x54\xa9"
+ "\x4c\xc7\x3e\x6f\xda\x20\xd4\x6b\x29\xcd\x27\xe1\xf0\xfb\x14\x0a"
+ "\x75\xb3\xab\xf6\x55\x43\x3d\xe5\xf8\xec\x32\xde\x65\x3d\xab\xb2"
+ "\x69\xf1\x7f\x47\x79\x65\x22\x35\xd8\xe2\x71\x9c\x6d\xca\x7e\x89"
+ "\xb4\xc0\xef\xce\xaa\x5a\xdb\xb4\x0f\x44\xd0\x16\xfc\x6d\x3e\xfa"
+ "\xa8\x4d\x73\xb0\xbe\x9a\x96\x72\x56\xb5\xaf\xde\x55\x7a\x5c\x0d"
+ "\xe9\x72\x97\x71\x5f\x35\x2b\xff\x2e\x90\x93\xcd\x76\x2b\xb7\x76"
+ "\x9e\x90\x5e\x56\xa9\x97\xfe\x87\x7b\xa2\xab\xd8\x56\x82\x77\x55"
+ "\x1e\xe9\x12\x9e\xf3\xe3\x08\xbb\xab\x89\xf6\x01\x42\xda\xb9\xb5"
+ "\x67\x6f\xaa\x26\x32\xd3\x03\x58\xef\xb5\x87\x73\xaa\x29\xaf\xcd"
+ "\x0e\x83\xef\xaf\x3d\xd2\xf7\xdd\x49\xc7\x85\xf8\xa9\xb4\x28\x75"
+ "\xe1\xae\x97\x08\xc1\xdf\x62\xdd\x76\x4c\x20\xf2\xf2\x97\x88\x02"
+ "\xdb\xd8\x5d\xb4\xd6\x2e\xc5\xa1\xc3\xdf\x70\x90\xff\xfe\xfb\x73"
+ "\xa8\x47\xd9\xef\xb9\x58\x7b\x92\x19\x4d\xd3\xb5\x56\xd9\x7d\x4e"
+ "\xcc\xaf\xbd\x46\xa0\xe5\x52\xf1\x7d\x0a\xf2\x13\xcb\xa7\xc6\xd6"
+ "\x38\x7c\xc6\x38\x77\x11\x80\x1a\x6d\xf6\xd4\x43\x8c\x46\xb6\x78"
+ "\x2c\x07\xf3\xd3\xe2\x66\xf8\x7f\x2d\xf4\x1b\x81\xc6\x3a\xed\x2a"
+ "\x12\xd7\xc2\xa5\x1b\x5d\xc6\x89\x05\x50\x06\xf4\xbb\x89\x5b\x20"
+ "\x7f\xb2\x40\x6f\x63\xb3\xd5\xca\xa5\xe7\xc2\xbb\x2d\x7d\xb1\x2f"
+ "\x19\x9d\x65\x90\xaf\x14\xea\xf4\xa6\x55\xb6\x48\xc0\x09\xcd\xa0"
+ "\x47\x31\xc6\x66\x67\x06\x75\x26\x38\x9b\x79\x90\x55\x04\xde\x1f"
+ "\xb5\x92\x85\x6a\xa9\x8d\x8c\xf7\x7d\xe5\x2c\xc5\x67\xbb\x4a\x28"
+ "\xc7\xe9\xab\x1c\xf8\xf6\xe1\x45\x4e\xad\xac\xe7\x0c\xad\xdf\xf6"
+ "\x28\xd2\x91\xd0\x9e\x0c\x5a\xb3\x29\x9e\x3a\x8a\x3f\x23\xa4\x56"
+ "\x6f\x21\xd0\xe7\xa3\xc2\x65\xd4\x9e\xb0\x9e\x44\x84\xa7\x46\xd0"
+ "\x8f\xaa\x2d\x64\x63\x3c\x6d\xc3\xb8\xbf\x75\x5d\x36\x92\xf5\x05"
+ "\x51\xe6\xd4\x92\xc8\xac\x78\x6a\xaf\x49\xb6\x10\x96\x5e\x4b\x72"
+ "\xbe\x22\xf2\x8d\x87\xa9\x63\x2e\xc8\xff\x4f\x2c\x98\x6e\x23\x18"
+ "\xa3\x32\xa7\x8d\x3a\xb3\x9f\x20\x4a\xfc\xbf\xf6\x30\xa6\xb7\x92"
+ "\x9c\x93\x44\x9e\x90\x69\x8f\xa8\x80\x6f\xe2\xef\x77\x41\x5d\xf8"
+ "\x33\xf4\xdd\x6d\x67\x08\xd9\xf8\x18\xd1\x64\x2d\x26\xea\x04\x17"
+ "\xa1\x66\xe7\x5b\xa0\xab\x29\xe8\x97\x23\x64\xd3\x72\xa2\x48\x70"
+ "\xe2\x39\xb6\xcf\x09\xc6\xfd\xde\x05\x79\xa1\x6d\x26\x6c\xdb\xc6"
+ "\x46\xa2\xc1\x38\xe8\xec\x37\xef\x89\xbf\x69\x24\x48\xb3\xb3\xaa"
+ "\x05\x5a\x87\x71\xc1\x6e\x68\x7b\x35\xd2\x00\xbe\x53\xcf\xe3\xef"
+ "\xe0\xf7\xdb\xd2\x04\x1a\xc8\x16\x39\x89\xd2\x65\x6c\xae\x5e\x94"
+ "\x69\x12\xca\xb5\x72\x19\xf2\x5d\x69\x42\x9d\xbc\xf2\x26\x38\x69"
+ "\xa7\x5d\xd5\x0c\xb8\xcf\x98\x96\x90\x39\x93\xe2\x6f\x81\x97\xdb"
+ "\xbb\x8b\x32\x56\x48\xf4\x96\xf8\x02\x79\x92\x81\x17\xdb\xc3\x52"
+ "\x89\x1c\xde\x1b\xac\xb2\xc5\xed\x1e\x58\x73\x00\xcf\x47\x4b\x79"
+ "\xc5\x3c\x55\x56\x59\x72\x8c\x47\x1e\xc4\x57\x5f\x1e\x78\x5f\x0f"
+ "\x65\x4c\x67\xdf\xc8\x28\xc1\x3c\xa2\xec\x97\xf2\x86\x51\x83\x32"
+ "\xde\xa5\xb2\x25\x52\x8e\x3a\x00\x8f\x6d\xb4\x53\xa3\x9c\xeb\xa4"
+ "\x0e\xde\xd8\x84\x72\x5e\x89\x71\x5d\x59\xfe\x75\x8b\xe1\xbd\x5d"
+ "\x9b\x21\xfc\x9f\x8e\xdf\xa1\x86\x7d\xf6\xbe\x77\xf9\x64\x14\x2d"
+ "\xaf\x8c\x03\xdd\xa1\x4e\xa8\xa6\x0e\x97\x71\x7f\x5c\x71\x1a\xea"
+ "\x0e\x5b\x1c\xf6\x6b\x5e\xd5\xec\x70\xec\x68\xb5\xa3\x7c\xc2\x3e"
+ "\x42\x0d\x4d\x56\xb1\x1e\x67\xb1\xdf\x30\x59\xb3\x2e\xd6\x05\x65"
+ "\x40\x9d\xe6\xc0\xbb\x51\x2d\xdc\xba\x03\x78\x9e\x14\x9e\x0b\x58"
+ "\xdc\xcb\x75\x7f\x62\xf8\x55\xc6\x7b\x3d\x73\x48\x3b\xe8\x4f\x20"
+ "\xb3\x50\x3e\x40\xfa\xa7\xee\x3e\x2c\xd0\x8d\x63\xb2\xa8\xc9\xce"
+ "\xe4\x48\x18\x0f\xf9\x64\x2d\x62\x7f\x3c\xab\x9a\x68\xe8\x2e\x5a"
+ "\x07\xf8\xbf\x3b\xcb\xab\x9f\x14\x2b\xac\x18\x63\x13\xea\x12\x76"
+ "\x9c\xcb\xbc\x0e\xee\x63\xe0\x7e\xc3\xdf\xab\x91\xdf\x42\xb9\xe3"
+ "\xf0\xff\x1d\x97\x51\xfb\xac\xd9\x04\xe3\x69\x42\x7f\xcb\x9c\x65"
+ "\x25\x5b\x23\xb1\x9c\xad\x18\x67\x14\xd2\x30\x0f\xa4\x2f\xb4\x92"
+ "\x22\x39\x2b\x7f\xad\xbc\x0b\xea\xda\xaf\xfc\x3c\x56\x3e\x2b\x17"
+ "\xcb\x93\xca\x2e\xff\x1d\x6d\x17\xcb\xde\x2d\x95\x6d\x84\x34\xa9"
+ "\xfc\x59\x2b\xfb\xbe\x61\x82\xf7\x06\xcf\x36\x94\xfe\x8e\x76\xed"
+ "\x10\xe2\x89\x66\x5a\xac\xa4\x22\x0e\xdf\x6d\x81\x34\xfc\xad\x07"
+ "\xae\xc2\xfe\x1e\x0f\x65\x1c\xc6\x32\xd6\xcb\xad\xa4\xac\xba\x9f"
+ "\x8c\x53\x49\x32\x8e\x95\xb5\x5e\x27\x95\xe5\x51\x8e\x88\x27\x4d"
+ "\x92\xc8\x57\x2c\x57\x89\xe5\x42\xfe\x24\x2b\x31\x44\x79\xb6\x1d"
+ "\x68\x9e\x25\xbe\x4b\x07\xba\x4f\xf7\xee\x07\xe9\xc9\xb4\xd8\x96"
+ "\x84\x32\x4e\x2c\xcb\x88\xf2\x5a\x7a\x8f\x31\x48\x41\xae\x17\x60"
+ "\x5f\x12\x64\xbb\xb1\xb9\x1e\xca\x79\xb7\x9f\x2c\x97\x63\x3e\x57"
+ "\x51\xea\x3b\xe5\x18\x83\xf5\x32\xda\x06\x79\xac\x5e\x71\x47\x39"
+ "\x72\x17\xa4\xf5\xc5\x3f\x2d\x86\x3c\x60\xaf\xf9\xf5\xef\x98\x7d"
+ "\x35\xe1\xcc\x65\x56\xb4\xad\x11\x73\xd3\xcd\x51\x5d\xc4\x5c\xc6"
+ "\x13\xbe\xa2\x32\x35\x2e\x9b\x9a\x8e\x73\x1b\xd6\x60\x3c\xeb\xe0"
+ "\xf4\xf5\x06\x16\xff\xb3\x07\x6c\xce\xac\x5b\x08\xea\xe8\x53\xdc"
+ "\xc6\x3d\x66\x7b\x87\xd0\xef\xe0\x7f\xc1\x1e\xf8\x0d\xd8\xa8\x68"
+ "\xa7\xc2\xd8\x40\x5f\xc2\x31\x5b\x95\x87\xbc\x15\x98\x8e\x76\x2c"
+ "\xc8\xd0\x5d\x1e\xef\x68\x45\xa5\x8e\xd1\x6e\xe3\x63\x82\xae\xc0"
+ "\xfa\x3a\x7f\x61\xc2\x3a\xf3\x65\x95\x3a\x6c\x43\x4e\x26\xe5\xcd"
+ "\xce\x6e\x13\xca\x59\x6d\x06\xda\xd8\x1b\x7f\x96\x50\x4e\x28\x5f"
+ "\x5e\xa9\x0b\xae\x0d\x1b\x05\x3b\x0f\xc6\x11\xa7\xec\x93\x2b\x75"
+ "\x18\x07\x7a\x5b\xf6\x28\xc5\xbd\x65\xd4\xd4\x39\xa5\x32\xb5\xbb"
+ "\x68\x63\x92\x14\x67\x37\xc8\x72\x93\xa4\xb6\x57\x88\x6d\x07\x7a"
+ "\x09\x63\xb6\x9b\x4a\x85\xf8\xdf\xf0\xbc\xb1\xc4\x1f\xbf\xa8\xa1"
+ "\x39\x09\x7f\x0b\x6d\x8f\xdb\x25\xd1\xc9\x69\xc7\xf8\xe7\xe3\x4f"
+ "\x70\x59\xd7\x26\x64\x99\x88\xe0\xd3\xdf\xd8\x9c\x14\x64\xbd\x84"
+ "\xf9\xaf\x3a\x18\xc3\x24\x38\xdf\xa7\x4c\x26\x66\x3d\x34\x57\x2c"
+ "\x0f\xdf\x49\xbc\xaa\x10\xc7\x16\xc1\x7f\x23\xcb\xef\xfc\x87\x47"
+ "\xbb\xd4\x3e\xda\xe5\x0a\xbd\x5d\x59\xd5\x03\xdb\xb5\xe9\xda\x91"
+ "\x6d\xd7\x26\xbf\xfb\x9f\x3d\xda\xa5\x1d\xd8\xae\x4d\x9f\x87\xde"
+ "\xae\x4d\xbb\x7d\xb4\xcb\x35\xb2\xed\xca\xf6\xbb\xff\xc1\xa3\x5d"
+ "\xd1\x03\xdb\x95\x7d\x30\xf4\x76\x65\x67\x0e\x6c\x57\xf6\xe7\x23"
+ "\xdc\x2e\xbf\xe7\x7f\xfd\xca\xc3\x62\xdb\x6e\x26\x0f\x73\xf2\x82"
+ "\x97\x87\x39\x73\x06\xca\xc3\xdc\x3f\xb9\xe5\x61\x6e\x79\x48\xf2"
+ "\xb0\x78\x9f\x68\x6f\xe4\x2e\x1f\x20\x0f\x0d\xfb\xac\xbe\xe5\x61"
+ "\xee\x6c\x41\x1e\x1a\xf7\x05\x19\x0b\x3d\x57\xdd\x27\x0f\x55\xfb"
+ "\xac\x5e\xf2\x30\xdc\xb6\xbb\xbb\x28\x57\x1f\x9a\x3c\xcc\xd5\x0f"
+ "\x94\x87\x39\xd5\xde\xf2\x30\x77\xf7\x20\x38\x6c\xf0\x25\x0f\x13"
+ "\x9c\xdf\x50\x11\x1b\x0d\x41\xd6\xc7\x31\xc8\xb7\x92\x87\xf8\x56"
+ "\x72\x70\xdf\xca\xf3\xbb\xff\x03\xc6\xb1\x7a\xb0\x41\xd4\x9b\xf6"
+ "\x10\xee\x38\x8c\xc4\xeb\xa2\x1a\x60\x8c\xe0\x20\x37\xa6\x02\x26"
+ "\xf2\xc9\xf4\xba\xb2\x76\x52\x17\x75\x9c\x50\x95\x52\x4f\x2b\xdf"
+ "\xb6\xc7\xa5\x21\x36\xf3\x27\x9b\xd3\x1d\x41\x62\x33\xaf\x4d\xc2"
+ "\x66\x9d\x13\xb0\x99\x81\x78\xdc\xfc\x90\xb9\xfd\x84\x88\xcd\xcd"
+ "\xb7\xf7\xf1\x27\x9f\xe1\xd3\x27\x36\xa1\x4f\x78\x63\xb3\x39\x91"
+ "\x61\x73\xf3\xa8\x81\xd8\x6c\x4e\xf4\x8d\xcd\xfc\xaf\x18\x36\x9b"
+ "\x13\x83\x6b\x43\xfe\x01\x37\x36\x9b\x13\xbd\xb0\xf9\xe3\xb7\xc1"
+ "\xb6\xdb\x2c\x0f\x0d\x9b\x9b\xe5\x52\xdb\xcb\xc5\xb6\xc3\xb7\x52"
+ "\xbc\xb1\xb9\x79\xba\x5f\x1e\x6e\x71\xec\x05\x79\xa8\x3c\xc1\x15"
+ "\x28\x5d\x60\xd3\xf2\x86\x7b\x1b\x60\x4c\xd6\x8d\xf1\xe4\x29\x17"
+ "\x43\xe8\x3a\x9d\xb2\x1b\xc6\xc6\xdd\xdd\x7a\x05\x0d\x1f\xd7\x41"
+ "\x7b\x35\x04\xea\x1e\x41\xbb\x75\xe1\x40\xb3\xa9\x70\x9f\x50\x9e"
+ "\x41\x22\xe1\xd2\x94\x8b\x74\x85\xff\xa3\xe9\x3a\xcd\xd8\xe2\x0c"
+ "\x32\x2d\xa2\x8b\x28\xa0\x0e\x49\x11\x79\x6a\x12\xe1\x24\x91\xf8"
+ "\x3f\xcd\x6f\xc9\x84\xb1\x9b\x1c\xe7\x45\x79\x15\x7c\x2f\x33\x82"
+ "\xd2\xb5\x3a\x02\xe3\x38\x05\xf0\x40\xb3\x8b\xa3\x55\xae\x75\x3a"
+ "\x8e\x86\xdb\x1e\xa7\x60\x8a\x60\x9d\xf8\xa9\x7f\x8d\xa6\x95\x70"
+ "\xe5\xe8\xf1\xbb\x71\x18\xd7\x98\xfe\xf8\xaf\x31\xb4\x5b\x33\xd6"
+ "\x78\x86\x4c\xdb\x95\x41\xa6\x56\x64\x10\x1d\xed\xd5\x71\x40\x83"
+ "\xa4\x27\xd7\xa8\x91\xef\x49\x94\x83\x6f\x65\xc0\xb7\x9c\x38\xfe"
+ "\x83\x6f\x39\xe1\x5b\xdf\xc0\xb7\x4e\xc1\xb7\xf2\xe1\x5b\xf9\xec"
+ "\x5b\xc1\xd1\xbc\x20\x73\xb0\xf9\xeb\x84\x4d\x53\xd0\xcf\xee\xbf"
+ "\x22\x32\xc7\xc4\xe3\x5c\x76\xe7\x46\x7d\x90\x78\x2f\xf0\x7b\xfe"
+ "\x65\xdb\xeb\x24\x8a\x2a\x67\x34\xcc\x7d\xbe\x99\xe2\x18\xfb\xf9"
+ "\xd7\xc9\x34\xec\x73\x75\x8e\x93\xd0\xcf\x66\x34\x1c\xd1\xb5\x07"
+ "\xf9\xad\xe7\xfd\xee\x7f\x2e\xca\xa7\xf5\xbd\x51\x38\x2e\xb4\xe9"
+ "\xb7\x71\x34\xb3\x27\xaa\x32\xf9\xe3\xa3\x3d\x64\x51\x26\xce\x97"
+ "\xd3\x4c\xed\x02\xa2\x68\xe1\x5e\x70\xe4\x7c\x81\x73\x8f\xcf\x57"
+ "\x7b\xcf\x3d\x3e\xdf\x4e\xb8\x5f\x97\x10\x6e\x8b\x89\x70\x45\xf1"
+ "\x04\xf2\xf5\xbb\x72\x13\x5e\x9b\x42\xb2\x9d\xf4\x5f\xd4\xb0\x3f"
+ "\xb6\x18\xc6\xc1\x09\xd7\xc9\xac\xa6\x0c\x9c\x8b\xfb\xf5\x56\xa0"
+ "\xdf\xff\x81\x0e\x8a\xc0\xff\xb1\xbc\xd4\x34\x32\xf1\x04\xf7\xeb"
+ "\x2d\x11\x5d\x63\xe2\x9d\x4a\xdb\x16\x27\x8c\xdf\x7a\x35\xad\xf6"
+ "\xb3\x06\x5b\x5c\x2f\x8e\x69\x9f\x42\x39\x50\x98\x17\x21\xcb\x85"
+ "\x71\xeb\xbd\x0d\x94\x6a\x70\x7e\x39\xa9\x0c\x2e\xe4\xbd\xc0\xf7"
+ "\xf0\xf1\x7b\x11\x1f\x88\xc5\x5d\x2c\x5d\x8d\x78\xdc\x26\xea\x6c"
+ "\x7b\xd8\xf5\xc9\xd8\x07\x5c\xf0\xfb\x9c\x56\x12\x65\xb6\xb8\x08"
+ "\x60\x3a\x69\x91\x4b\x81\xfd\x28\xc9\xb4\xe0\x33\x72\x3c\x95\x70"
+ "\x39\xdf\x12\x15\x60\x48\x89\xfd\x81\x87\xfe\x90\x60\x89\x70\x40"
+ "\xbf\xe6\xb3\x4f\x93\x08\x94\x13\xe8\xc3\xd9\xdc\x6e\x25\xfc\x37"
+ "\xba\xf0\x97\x57\x91\x48\xe7\x37\xfa\x09\xf6\x6f\xf4\x13\x77\xf0"
+ "\x24\x32\x3c\x95\xa8\xcb\x57\x01\x76\x57\x43\xff\x38\x05\xfd\xa3"
+ "\x9d\xf5\x8f\x3e\xbc\x16\x71\x4e\x3c\x1f\x24\xf4\x0d\xa3\xd8\x37"
+ "\xd6\x01\x5e\x33\xdc\x7d\xc3\xb9\x5a\xc7\x95\x73\x94\x40\x1d\x81"
+ "\xee\x05\x87\x76\x65\x8f\x51\xe0\xb8\x9e\x4e\xa9\xac\x07\xb9\x0b"
+ "\x6d\xa5\xce\x37\x80\x17\xa3\xae\xe3\xb4\xd4\x68\xdb\xf2\x71\x62"
+ "\x1b\x71\x8f\xe9\x5e\x38\xdb\x33\xb9\x32\x59\xfb\x08\xfd\xa6\x85"
+ "\xfb\x75\x2e\xa4\x2b\xb4\x8f\xfe\x44\x0d\x7c\x3c\xcb\xc6\x80\x2f"
+ "\x38\x70\x3e\xc1\xca\xfd\x1a\xfd\x01\x11\x5c\x43\xf9\x44\x98\x3f"
+ "\xdd\x72\x08\xf2\x12\x17\xd0\xdc\xa9\xdc\x67\xe7\x95\xb6\x24\xd3"
+ "\x33\x3d\x42\xdf\xec\x05\x1e\x1c\x5f\x41\xb8\x45\xc0\x71\x90\x0d"
+ "\x2a\x90\x09\x28\x33\x12\x05\x99\x61\x18\xd7\x9e\x65\xa5\x7c\x42"
+ "\x4a\x18\x05\xba\x28\x70\x0e\xe9\xc9\x54\x42\x37\x9d\x04\x1a\x75"
+ "\x35\xa0\x7c\x09\xe7\xd7\x31\x19\xf2\x32\xd0\x47\xd5\x4e\xd4\xb4"
+ "\x78\x66\xfd\xeb\xd9\xd5\xa3\x5c\x80\x73\x94\x23\x11\x79\xb2\x4b"
+ "\x80\x57\xe1\x06\xec\xe7\xd0\xef\x23\xf2\x04\xb9\x26\xf0\xd6\xb9"
+ "\x4e\x77\x4d\xef\x3a\x9d\x16\xae\x29\x92\xac\xc1\xb8\x61\xe5\x28"
+ "\x67\x8a\x9e\xc7\xf8\xe7\x72\x73\xa6\x95\x38\x81\x96\xe1\xa8\x97"
+ "\xd6\xe9\xa2\x04\x9a\x3e\x0d\x34\x5d\x46\x14\x37\x39\x88\x0c\xea"
+ "\xa5\x86\x3a\x93\x5a\x7d\x0b\x41\x1a\xbb\xa0\x1f\x21\x9d\x7b\x51"
+ "\x06\x01\xd6\xc0\x4e\xb1\x3f\xb4\x5c\x4b\x8e\xe8\x3e\x27\xe8\x07"
+ "\x2a\xe7\x2c\xfd\x0a\xe7\x6f\xcd\x99\x4e\xe8\x73\xb6\x2d\x48\x5b"
+ "\xa0\x57\xd2\xc7\x89\x0e\xe2\x1f\xd3\x45\x77\xbb\x31\x5d\x74\xb7"
+ "\x1b\xd3\x45\x71\xc2\xfa\x87\x07\xae\xcf\x96\x02\xae\x95\x9e\xb8"
+ "\xde\xfa\xd8\x39\xc5\xf5\xdc\xe0\x71\xbd\xe3\x94\x07\xae\xb3\xbf"
+ "\x1b\x5c\x7f\x92\x24\xe0\x3a\xac\x77\xb2\x80\xd7\x85\x66\xe7\x9f"
+ "\x89\x95\x2b\x9a\x26\xe1\xf6\xa3\x7d\x88\xdb\x17\x52\x2f\x54\xdc"
+ "\x9e\xed\xd6\x69\xe1\x1a\x71\xdc\x42\x99\x01\xe3\xf6\x93\xa4\x1e"
+ "\x22\xd1\x0f\xf1\x4b\x0d\x33\x1a\xb4\x39\x64\x26\xd0\xcd\x11\x91"
+ "\x37\x85\xd4\x32\x1a\x3a\xb4\x8f\x52\x1e\x64\xc4\x6b\x88\xa7\x9e"
+ "\x7c\x4a\x79\x65\xb3\x23\xe7\x53\xa2\xe6\x0d\xfb\xe3\xcc\xce\x83"
+ "\x24\x22\x95\x08\xf3\xea\x54\xb5\xa0\x54\x58\xb3\xe2\x88\x9c\x37"
+ "\xde\xa5\xc6\xb9\x2b\x9c\x5b\x74\x19\x5b\xe3\x78\xe3\xe4\x2a\x5e"
+ "\x35\xdf\x8e\xeb\x59\x54\x75\x97\xb5\xbb\xe8\x05\x87\xb4\xd6\xe2"
+ "\xdb\xbe\x6c\x8d\x83\xfe\x22\x3f\xce\x19\x4e\xc3\x9d\x83\xfb\x8b"
+ "\x70\x0f\x83\xbb\x10\xb7\x2e\x38\x3d\x67\x10\xe3\x3f\xdb\xb6\x33"
+ "\x39\x68\xb8\x41\xe8\x83\xd7\x13\xd5\x09\xf1\xff\xee\x22\xc3\x16"
+ "\x69\xed\xc6\x9d\x5f\xa2\x87\x61\x2a\x7e\x1b\x68\x22\x67\xeb\x49"
+ "\xec\xd9\xa3\xbc\x6b\x85\x67\x22\xd7\xd2\xe2\xfd\x04\xd7\x7d\x01"
+ "\x4b\xb2\x6e\xaa\xbf\x4b\xbc\xcf\x40\xac\xe2\x1c\x2c\xda\x79\x4c"
+ "\xd6\xb2\x6f\x74\x17\x19\x01\xb7\xcf\x17\x78\x7e\xd7\x17\x3d\xac"
+ "\x9c\xd1\x6f\x4c\x9f\xe0\x68\x61\xf4\x1b\xff\x71\xb6\xce\x45\x83"
+ "\x2c\xcb\xef\xf9\x4f\x1a\x55\xa9\x4d\xd8\xeb\x32\xf1\xbd\x49\x11"
+ "\x47\xb2\x4e\x06\x69\x97\x18\xfd\x8e\x7f\x5d\x4a\xab\x3a\xe1\xba"
+ "\x29\xc4\x55\x56\xa9\xc5\xb9\x4e\xb4\xb5\xea\x74\x4e\x82\xf6\xd6"
+ "\x6b\xcf\x58\xb9\x5e\xb0\x19\xc3\xa1\x3f\xce\xed\x7a\x9f\x6e\x3b"
+ "\x01\x36\xea\xba\xa4\x88\xe2\x67\xc8\x74\xe7\x37\x9a\xb1\x2f\x80"
+ "\x0c\xea\x01\x79\xd0\xf3\x8d\x3e\xa2\x2e\xd5\x41\xf8\xf2\x4a\xad"
+ "\xd9\x59\x4d\x76\x41\x3e\x94\xbf\x58\xdf\xb3\xdf\x24\x85\x17\xad"
+ "\xc2\xf5\x8b\xd3\xc4\xf4\xd4\x3e\x90\xbf\xc5\x8d\xa3\x36\x81\xcc"
+ "\x01\x99\x21\xc8\xe1\x10\x64\x70\xcf\xe6\xeb\x93\x1f\x5a\x48\x1d"
+ "\x75\x96\xcf\x48\x4e\x2d\x51\xe7\x3c\x47\x54\x58\xbe\xd9\x59\xcb"
+ "\xe4\xf2\x63\x20\x97\xe1\xb9\xc2\x43\x2e\x0b\xfb\x0b\xfa\xc9\x65"
+ "\xb4\xbf\xeb\x6c\x6d\x24\xbc\x8b\x8c\x99\xdb\x15\xe1\xc8\xee\xa2"
+ "\x3c\xda\xe3\x66\xe7\x49\x3c\x7b\x1c\x2e\xc9\xe8\x9d\x60\x77\xf4"
+ "\xae\x66\xf2\xb9\x5c\x94\xcf\x3b\x4f\x0d\x5f\x3e\xef\xcc\x07\xf9"
+ "\x0c\xf6\xde\x0e\x94\xcd\x20\x97\x0f\x1c\xb7\x73\x4e\x90\xc5\xc1"
+ "\xf1\x76\x9b\xdf\xfd\x1f\x73\x41\x7f\x22\x4f\x11\x3b\xb5\x7b\x9d"
+ "\xb8\x1f\xe1\x5f\xae\xf0\x63\xc9\xa8\x1f\x7b\x40\x37\xbe\xf6\x4c"
+ "\x03\x17\x9e\x09\xbc\x4d\x7d\x9f\x3a\xd7\x26\x45\xd0\xde\x24\x95"
+ "\xcb\x60\x55\x3b\x7b\x35\x8a\xde\x5e\xe0\x2f\xc8\x0b\xd0\x57\x6a"
+ "\xfb\x46\xbd\x40\x13\x7e\x72\xa5\x96\x2f\x7c\x46\x01\xba\x29\xb6"
+ "\xe2\x14\x89\xa1\xc6\x63\xb9\x4e\xe3\x31\x43\xaf\xf1\x58\x01\xe0"
+ "\x32\x1c\xec\x47\xe0\xf9\x59\x13\x6f\x3c\xb6\x9b\x2f\x6e\x4a\x76"
+ "\xa9\xac\x6a\xbb\xea\xd8\x16\x78\x2e\xe5\x37\x02\x0e\x36\x10\x61"
+ "\x4d\x4b\x3b\x17\xf5\x70\x49\xab\x2f\x1c\xec\xc8\x0f\x4e\x17\x3f"
+ "\x94\x04\x38\x68\x00\x1c\x7c\xeb\x89\x83\xf7\x88\x33\x5f\xd4\xd1"
+ "\xf3\x19\x16\x80\xee\xc2\x58\xa6\x4f\x4f\x3f\xf2\xb1\x6f\x3c\x58"
+ "\x02\xc3\x43\xcf\x37\xde\x78\x28\x0b\x11\x0f\xa0\x5f\x35\x15\x30"
+ "\x6e\x3a\xfb\x8d\x8e\x2b\x43\x3c\x7c\xee\xc6\xc3\xfe\x26\x3b\xd7"
+ "\x1b\x34\x1e\x5e\xac\x0e\x12\x0f\xd6\x61\xe2\x21\xd9\x8d\x07\x0b"
+ "\xe8\x58\x8b\xb2\xd7\x68\x91\xbb\xf1\x70\x1a\xf0\x60\xd1\xba\xf1"
+ "\x60\x51\xc0\xb3\x66\x20\x1e\x5e\x3a\x7d\x7e\xf1\x30\xaa\xe3\x87"
+ "\x81\x87\xdf\xf8\x1d\xff\xfa\xc6\x83\x65\xb8\xf2\xe1\x90\x07\x1e"
+ "\x40\x3e\x58\x40\x3e\x58\x3c\xe4\xc3\x49\xc4\x83\x87\x7c\xb0\x80"
+ "\x7c\xb0\xf8\x90\x0f\xbf\x1d\x75\x7e\xf1\x30\xae\xe5\x87\x81\x87"
+ "\xdf\xb6\x05\x89\x87\x61\xca\x87\x67\xd5\x6e\x3c\x34\x82\x7c\x68"
+ "\x04\xf9\xd0\xe8\x21\x1f\x1a\x01\x0f\x8d\x1e\xf2\xa1\x11\xe4\x43"
+ "\xa3\x0f\xf9\xf0\xfb\x4b\xcf\x2f\x1e\xc6\x7f\xf6\xc3\xc0\xc3\xef"
+ "\xfd\xce\x7f\xfb\xc6\x43\xe3\x30\xe5\xc3\xb3\x7a\x0f\x3c\x80\x7c"
+ "\x68\x04\xf9\xd0\xe8\x21\x1f\xde\x43\x3c\x78\xc8\x87\x46\x90\x0f"
+ "\x8d\x3e\xe4\xc3\x8e\x6b\xcf\x2f\x1e\x6e\x2b\xfa\x61\xe0\x61\xa7"
+ "\x22\x48\x3c\x0c\x57\x3e\x98\xdc\x78\x68\x02\xf9\xd0\x04\xf2\xa1"
+ "\xc9\x43\x3e\x6c\x02\x3c\x34\x79\xc8\x87\x26\x90\x0f\x4d\x3e\xe4"
+ "\xc3\xcb\x3f\x3b\xbf\x78\x78\xfc\x9e\x1f\x06\x1e\xca\x34\x43\xe1"
+ "\x41\xc2\x02\xe2\x02\xb1\xd0\x9b\x93\x44\x70\x9c\xf1\xda\x09\x86"
+ "\x07\xc4\x81\x80\x89\xce\xa4\x08\x17\x60\xc1\xb9\x11\xb0\xd0\xc3"
+ "\xb0\x80\xb4\x40\x3c\xe0\xb8\x02\xc7\x13\x88\x09\x17\x8c\x29\x9c"
+ "\x2a\x18\x53\xe4\xc9\x35\x88\x83\x1e\xe5\x10\xe3\x8a\x1e\x22\x8c"
+ "\xfd\x70\x8c\x77\x8a\x2b\x9f\xe1\x0b\x07\x3b\x83\x9c\xe3\xeb\x1b"
+ "\x5f\x7a\xe1\xe0\x88\x1b\x07\x8f\xf9\x19\x57\x3c\xea\x07\x07\xd6"
+ "\x00\x70\x70\x6a\xe0\x38\x73\xb8\x38\xe8\x59\x2d\xe2\x00\xc7\x99"
+ "\xbc\x38\xce\x7c\x0a\xc6\x99\xaa\x60\x71\x50\xa1\x0d\x0d\x07\x16"
+ "\x6b\x70\x38\x78\x56\x8d\x76\x02\xc3\x41\xa3\xd2\xa9\x02\x5b\xc1"
+ "\x0b\x07\x83\xd8\x0b\x5e\x38\xd8\x35\xfb\xfc\xe2\xa0\x9f\xbd\xf0"
+ "\x6f\x8b\x83\xdd\x7e\xcf\xff\xf2\xc0\x77\x94\xf7\x38\x6f\x8f\xe7"
+ "\x4c\xc2\xed\x6c\xde\x08\xcf\x9b\x6c\x5b\x45\xa6\xa2\x8e\x70\xad"
+ "\x4b\x8a\x30\x9c\x22\xd3\xb7\xae\x22\x72\xe7\x5a\xe0\x7f\x1a\x91"
+ "\xf7\x70\x84\xf4\xac\xd5\x47\xd4\xd8\xec\x6c\x0e\x09\xf7\xa3\x42"
+ "\xfe\x5e\x03\x9b\x43\x72\x75\x26\x85\x6f\xed\x60\x7b\x60\x4d\x4f"
+ "\xfe\x01\x78\xbb\xe7\x6a\x5f\xbc\x7d\x39\x08\x59\xdf\xe3\x29\xeb"
+ "\x4f\x7a\xf3\xd6\x53\xce\x97\xe5\x7b\xcc\x21\xcd\xf5\x33\x87\x14"
+ "\x00\x4f\x85\xb9\xfd\x53\x4c\xce\xf7\xcd\x21\x0d\x73\x8e\xbf\x17"
+ "\x64\xfc\x4e\xce\x5b\xc6\x87\xc6\xd3\x3d\xce\xc1\xe6\x1d\xb1\x7f"
+ "\x63\xbf\x96\xfa\x74\x9f\x8e\xc7\x7e\x0c\xfc\x3e\x6b\x38\x96\x22"
+ "\xe8\xfa\x8d\xee\x3e\x8d\x7d\x19\xfb\x35\xf6\x63\x41\xd7\xa3\x4f"
+ "\xe2\xc2\x15\x9a\x0a\x8f\xb9\x23\x97\x4a\x94\xf3\x3e\x64\x3c\x3f"
+ "\xa8\x8c\xff\x0f\x9f\xfc\xff\x3e\xc8\x78\xc4\x81\xd4\xbf\x2f\xbc"
+ "\xbe\xfd\x8a\xff\xfd\x5f\x81\xe1\xc0\x16\x00\x0e\xac\x80\x83\x15"
+ "\x15\x1e\x73\x46\x2e\x95\x05\xe4\x3c\x9b\x33\x62\x38\x70\xcf\x19"
+ "\xf1\xfd\xe7\x8c\xbc\x70\xf0\xea\x75\xe7\x17\x07\xfd\xe6\x8c\xfe"
+ "\x6d\x71\x50\xa9\x1c\x1e\x0e\x2c\x01\xc8\x03\x0b\xca\x03\x93\x07"
+ "\x0e\x40\x1e\x58\x40\x1e\x58\x3c\xe4\x81\x7b\xae\x88\xef\x3f\x57"
+ "\xe4\x85\x83\x3f\xde\x7c\x7e\x71\xd0\x6f\xae\xe8\xdf\x16\x07\x7b"
+ "\x23\x87\x89\x83\x00\xe4\x81\x05\xe4\xc1\xca\xc8\x0a\x8f\x39\x22"
+ "\x97\x4a\xb4\xfb\x7c\xd8\x7c\xfc\xa0\x36\xdf\x6b\xb7\x7f\x5f\x6d"
+ "\xbe\x0b\x1b\x07\xfb\xfc\xae\x95\x06\x86\x83\xc6\x00\xe4\x41\x23"
+ "\xc8\x83\x95\x7a\x0f\x1c\x80\x3c\x68\x04\x79\xd0\xe8\x21\x0f\xdc"
+ "\x73\x43\x7c\xff\xb9\x21\x2f\x1c\xec\xbf\xfb\xfc\xe2\xa0\xdf\xdc"
+ "\xd0\xbf\x2d\x0e\x0e\x4c\x1d\x26\x0e\x02\x90\x07\x8d\x28\x0f\xde"
+ "\xad\xf0\x98\x13\x72\xa9\x9a\x40\x1e\x34\x79\xc8\x03\xf7\x9c\x10"
+ "\xdf\x7f\x4e\xc8\x0b\x07\x07\xef\x3f\xbf\x38\xe8\x37\x27\xf4\x6f"
+ "\x8b\x83\xd7\xfd\xee\xab\x90\x30\xd0\x37\x07\x40\xdd\x38\x10\x78"
+ "\xbf\x36\x29\xa2\x47\x79\x2c\x45\x1a\xff\x1b\x06\x8c\xff\x57\x68"
+ "\xfc\xce\x03\xf5\x5b\x5f\x16\xc6\x06\xc5\xc7\x92\xd9\x38\xc1\xaa"
+ "\x46\xfe\xbf\xb0\x81\x8d\x13\xb5\x8f\x22\xff\xdf\xf0\xcd\xff\x60"
+ "\xe7\x04\x53\x80\xff\xb6\x41\xf8\xff\x84\x9f\x71\xc2\x82\xe1\xf1"
+ "\x1f\xf7\x3b\xf6\x7e\x33\x82\xfc\x97\xe6\x04\x1b\x09\xb7\x73\x58"
+ "\xe3\xc5\x2a\xbf\xfc\xf7\xb9\x9f\x64\x2f\xdb\x4f\x82\x7b\x49\xea"
+ "\xda\xda\xc8\xd6\x33\x44\x1d\xbe\x82\x61\x42\xd8\x53\x02\x98\x30"
+ "\x9c\x20\xd3\x9d\xac\x6d\x7d\x7b\x4a\xd0\x87\x3b\x93\x0b\x26\x61"
+ "\x4f\x89\x34\x1f\xd0\xb7\x9f\xe4\x49\xdc\x4f\xf2\xa7\x1b\x86\x3d"
+ "\x17\x80\xfb\x49\xd2\x81\xc7\x5d\xc0\xe3\xd3\xc8\xdf\x23\x5e\xfd"
+ "\xda\x6b\x0e\xc0\xdf\x3e\x92\x40\xe6\x75\xce\xc1\x3e\x12\x61\x0e"
+ "\x60\x44\xfa\xf4\x9f\x89\x5f\xd9\x0e\x7c\x44\x7e\x9a\x75\x4e\x61"
+ "\x5e\x57\xea\xe3\xe6\xcc\x7a\xb2\xb5\x87\xa8\xa5\xf9\x7f\x89\xa7"
+ "\x28\xef\x29\xe0\x80\x7e\x93\xa4\x42\x9e\xbe\xb0\x0a\xe4\xfc\x6a"
+ "\xb7\x9c\xe7\x47\x3f\xa3\x28\xdf\x00\xf2\x7d\x03\x89\x11\x68\x14"
+ "\xde\x94\xcc\xe6\x03\xac\x6a\xec\xef\xd8\x9f\xa9\xea\x58\x69\xaf"
+ "\xd8\xdf\x19\xbf\x6b\x09\xf2\x99\xc5\xfa\xfc\xcb\xd5\xd8\xf7\x90"
+ "\xe7\xe1\x22\xcf\x2b\xfc\xf0\x5c\xe0\xb7\x4c\x8d\x7e\x43\xf0\x9c"
+ "\x59\x1f\xcf\x9d\x9b\x3d\xe6\x7f\x3c\x79\x2e\xce\xfb\xf0\xd0\x97"
+ "\x03\xda\x3f\x14\x20\xdf\x47\x6c\x7e\x1f\xf8\x5e\x21\xf2\xbd\x6f"
+ "\x7e\x7f\x58\x7c\xff\x8b\xff\xf3\x2f\xde\x7c\xb7\x8e\x00\xdf\x93"
+ "\x07\xf2\x1d\xc7\xff\xc8\x77\x8b\x1c\xc7\xf9\x54\x65\xd1\xf4\x8a"
+ "\xfb\x46\x06\xf2\xfd\xad\x49\xe7\x9e\xef\xa3\x3a\x7e\x18\x7c\x7f"
+ "\xcb\xaf\xff\x33\x6f\xbe\x5b\x46\xa2\xbf\x1f\xf2\xc1\x77\xb1\xbf"
+ "\x5b\x0a\x70\x5c\x0f\x7c\x17\xfb\xfb\x49\x1f\x7c\xff\xeb\xf8\x73"
+ "\xcf\xf7\x71\x2d\x3f\x0c\xbe\xff\xd5\xef\xfe\x8f\x7e\x7c\x1f\x81"
+ "\xfe\xfe\xac\x7a\x20\xdf\x1b\xc5\xfe\xde\x28\xc7\x71\x3c\x55\x35"
+ "\x8a\xfd\xbd\xd1\x07\xdf\xdf\xb9\xe4\xdc\xf3\x7d\xfc\x67\x3f\x0c"
+ "\xbe\xbf\x63\x0d\x8c\xef\x8d\x23\xd0\xdf\x9f\xd5\xfb\xe0\xbb\xd8"
+ "\xdf\x1b\x0b\x70\xdc\x0e\x7c\x17\xfb\xfb\x7b\x3e\xf8\xfe\x5f\xb2"
+ "\x73\xcf\xf7\xdb\x8a\x7e\x18\x7c\xff\x2f\xbf\xfb\xff\xfa\xf1\x7d"
+ "\x24\xfa\xbb\x69\x20\xdf\x9b\xc4\xfe\xde\x24\xc7\x71\x3a\x55\x35"
+ "\x89\xfd\x7d\x93\x0f\xbe\xbf\x7b\xf6\xdc\xf3\xfd\xf1\x7b\x7e\x18"
+ "\x7c\x7f\xaf\x7e\xa8\xf5\x7a\x89\xf7\xd2\x9c\x8d\xb0\x3e\x0b\xf6"
+ "\xbd\xc4\x6f\xc4\x01\xf2\x1c\xb1\xe0\xc9\x73\x61\x0f\xcf\x6a\xb6"
+ "\x87\x07\xed\x76\x0a\x63\x71\x3a\x5a\xd8\xbf\x51\x2a\x8c\xdb\x45"
+ "\x3b\x9e\xca\xe4\x1a\xb4\xe5\xfd\xdb\xf1\x7f\xfb\x5a\xe2\x77\xa8"
+ "\x63\xb7\xa1\xf8\xdd\x7f\x4c\x7e\xa1\xf0\xdb\x73\xfc\x36\x32\xfc"
+ "\x7e\xdf\x14\x1a\xbf\x2d\xd6\xe0\xf8\xdd\x48\x18\xbf\x85\x7d\x1a"
+ "\x1a\x37\xbf\x1b\xe5\x8c\xdf\x8d\x0a\xff\xfa\xdc\xf4\xc5\xb9\xe7"
+ "\xb7\xf7\x9c\xfc\xbf\x2f\xbf\x3f\xa8\x1a\x6c\x0e\x06\x79\x8d\x7c"
+ "\xdf\xf6\x0c\x99\xfa\xc2\x33\x6c\x6e\xc5\xf9\x8d\x06\x65\xbe\x1c"
+ "\xf9\x8f\x67\x7c\xc2\x01\x03\x9f\x24\xd9\x49\x4f\x77\x12\xc1\xb3"
+ "\x3c\xb8\xef\xa2\x4e\x6f\x25\xe6\xcc\x8f\xc9\xd6\x34\xa2\xae\x49"
+ "\xee\x20\x73\x81\x1b\x66\x8b\x09\xcf\x78\xcb\x4d\x1b\x3e\x26\x74"
+ "\xb5\x6e\xec\x93\x5d\x84\x3b\xc5\xfd\xb7\x1e\xf7\x6d\xdc\xd8\x05"
+ "\x34\xc1\xf3\x3e\xc0\xf3\xad\xa7\x08\x39\x92\x4e\x88\x76\x19\xf2"
+ "\xfa\xbf\x8f\x8c\x7a\xce\xc7\x39\x9f\x60\xe6\x65\x3c\xe7\x5e\x7d"
+ "\xf0\xfa\x65\x6e\x64\xf6\x66\x48\xfb\x32\xbc\xe6\x65\x86\x7b\xfe"
+ "\x72\xc4\xf6\x66\xfc\xbd\x74\xb0\xfd\x36\xc8\x4f\xec\xd3\xce\x62"
+ "\x36\x2f\x63\xce\xac\x26\xb8\xaf\x06\xfb\xb0\xab\x53\xa3\xd8\x98"
+ "\x0e\x7d\xbd\x81\xf5\xf5\x17\x3a\x20\x6f\xf2\x97\x04\xf1\xc1\x78"
+ "\xdb\xcb\x78\xdb\x81\xbc\xfd\x92\xd0\xb5\xba\xb1\xa7\xb8\xc3\x71"
+ "\xc8\x5f\xe4\x6b\xce\x17\x44\xbd\x08\xfd\xa2\xa0\x8c\x07\xf9\x0e"
+ "\x7c\x8e\xdd\xf5\x0c\x89\xc1\xfe\xef\x32\x1e\x2b\x70\x1a\xd9\x1e"
+ "\x0d\x94\xfb\xbd\x4a\xdb\x96\xa2\x34\x91\xff\x0b\x90\xff\x87\x7d"
+ "\xf2\xff\xe5\x50\xe7\xde\x45\xfe\x87\x7c\xae\xe7\xbb\xea\xef\xab"
+ "\x47\xaa\xbf\x1f\xd9\x1d\x20\x0e\xac\xc1\xe3\xa0\xdb\x07\x0e\xfe"
+ "\x11\x3f\x10\x07\x16\x02\x38\x48\xf6\xc6\x81\x45\xce\x70\x60\x01"
+ "\xfd\x6f\xd1\x0c\xc4\xc1\x3f\x6a\xcf\x0f\x0e\x02\x3c\xcf\xf3\xbd"
+ "\xc7\xc1\x87\x7b\x03\xc3\x81\x25\x04\x79\xf0\x8d\x0f\x1c\x54\x27"
+ "\xfa\xc0\x01\xca\x83\x43\xfd\x70\x20\xca\x03\x0b\xc8\x03\x8b\x0f"
+ "\x79\x50\xfd\xf9\xf9\xc1\x41\x80\xe7\x78\xbe\xf7\x38\xf8\xc8\xaf"
+ "\xfe\xef\x87\x83\x10\xe4\x41\xb3\x0f\x1c\x7c\x9c\x34\x10\x07\x60"
+ "\x0b\x82\x1d\xe8\x8d\x83\x46\x51\x1e\x34\x2a\xd0\x3e\x1c\x88\x83"
+ "\x8f\x1b\xcf\x0f\x0e\x02\x3c\xbf\xf3\xbd\xc7\xc1\x27\x7e\xcf\xff"
+ "\x7a\xe3\xa0\x31\x04\x79\xf0\xbe\x0f\x1c\xd4\x24\xfb\xc0\x01\xc8"
+ "\x83\x67\xf5\xfd\x70\x20\xca\x83\x46\x90\x07\x8d\x3e\xe4\x41\x4d"
+ "\xeb\xf9\xc1\x41\x80\xe7\x76\xbe\xf7\x38\xa8\xf5\x3b\xfe\xeb\x87"
+ "\x83\x10\xe4\x41\x8e\x0f\x1c\xd4\xe9\x07\xe2\xa0\x09\xe5\x81\xc9"
+ "\x1b\x07\x4d\xa2\x3c\x68\x02\x79\xd0\xe4\x43\x1e\xd4\x9d\x3c\x3f"
+ "\x38\x08\xf0\xbc\xce\xf7\x1e\x07\x66\xbf\xe7\xbf\x3d\x71\xd0\xdb"
+ "\x37\x5e\x38\x24\xe0\xa0\x68\x03\xc3\xc1\x26\xc4\x41\x1b\xdb\xbf"
+ "\x63\x10\x71\xd0\x37\x56\xb0\xf5\xc7\x40\xfd\x8a\x3e\x0c\x7c\xed"
+ "\x1e\x2b\xf4\x02\xbf\x85\xf9\x20\x71\x9c\x20\xcd\x03\x09\xe3\x04"
+ "\x18\x27\x16\x75\x88\xfc\x17\xe6\x04\xea\x7d\xf3\x3f\x88\x71\xa2"
+ "\xd7\x1e\x8d\xfe\xfc\xbf\xc0\xcf\xe9\x0c\x98\x17\xf8\x62\xb8\x7b"
+ "\x33\x3e\x0d\x90\xff\x92\x5d\x10\x28\xff\x9b\x7d\xf0\xff\x33\x1f"
+ "\xfc\x6f\x24\x8c\xff\xcf\xaa\x25\x7b\x40\x9a\x17\x12\xec\x81\x01"
+ "\xfc\xff\xec\x3c\xf1\xff\xc2\x3c\x9f\x33\xf2\xfc\xff\x1f\xbf\xfc"
+ "\x2f\xe1\xf8\x2a\xb8\x0e\xc1\x65\x82\xab\xda\xc5\x91\xd9\xe5\x1c"
+ "\x2f\xcc\x13\xa3\x0f\xf1\xf2\xfc\x01\xef\x47\xd3\xd1\xf7\xbf\x82"
+ "\x79\x80\x87\xc2\x5e\x60\xa9\x0c\x5a\x44\x90\x8e\x26\x95\x2c\x19"
+ "\xfd\x5f\x61\xde\x31\x52\x59\xaa\x3c\x12\x27\x95\x05\xed\xcb\x05"
+ "\xba\x9b\x22\xf2\xe2\x46\x43\xfe\x6a\x5a\x64\x8c\x85\xbc\x0a\xa1"
+ "\xcc\x3c\xb9\xb0\xaf\x54\xca\xeb\xca\x97\xa1\xcf\x26\x53\x84\x0c"
+ "\xf2\xb2\x32\x2f\x11\xf3\x69\xf9\x7c\x22\x9c\x3f\x73\x71\x1c\x7e"
+ "\xaf\x7f\x3d\xc7\x8a\xf9\xa6\x7a\xd6\x51\x95\x17\x27\x94\x27\xe6"
+ "\x19\x47\x47\x5f\xa3\x11\xdb\xa2\xf3\xcc\xe7\xba\x87\x60\x99\x52"
+ "\x3e\xa5\x58\xd6\x34\xaf\x3c\x7f\x20\x24\x42\xa6\x65\xf5\xcb\xe4"
+ "\x88\x58\x3f\x15\xe6\x75\x8d\x35\x28\x5d\x32\x79\x34\xcf\x91\x68"
+ "\xaf\xdf\x14\x12\x21\xbf\x98\x37\x5c\xc8\x3b\x7a\x35\xe6\x8d\x11"
+ "\x69\x2e\xf7\xa4\xb9\x98\x2f\x42\xa2\xa3\xe7\x3b\x57\x3e\x87\x65"
+ "\xe1\x7b\xe8\x5b\xab\xd4\xd0\x86\xe9\x52\x3e\xe9\x7b\x66\x3d\x21"
+ "\x42\x5e\x8e\xdc\x2c\xf2\x64\x3c\xb4\x23\x4e\xca\x87\x7e\xd4\xa4"
+ "\xbc\x80\xeb\x49\xbb\xdc\xb4\x99\xe0\x2a\x32\xd6\xb8\xf2\xe4\xb3"
+ "\xfa\x97\x19\x91\x27\xb3\x62\xbe\xda\x36\xa1\x6c\xe4\x5f\x2e\xe4"
+ "\x9f\x28\xd2\x28\x9e\xf1\x44\xdd\xc7\x13\x17\xe7\xc4\x77\xa6\x0a"
+ "\x56\xd7\x48\x31\xdf\x9c\x81\xf9\xe4\x9e\xf9\x2e\x65\x74\x2c\x4b"
+ "\x06\xda\x24\x0e\xcc\xab\xf0\xcc\x7b\x19\xcb\x5b\x42\x20\xef\xbc"
+ "\x81\x79\xd5\x9e\x79\x2f\x67\x79\x5f\x52\x43\xde\x24\x1f\x75\x9d"
+ "\xe0\x91\x57\xc3\xf2\x6e\xd7\x42\xde\x85\x03\xf3\x6a\x3d\xf3\x4e"
+ "\x62\x79\x2b\xf4\x90\x37\x79\x60\xde\x38\xcf\xbc\x57\xb0\xbc\xbf"
+ "\x8b\x86\xbc\x29\x03\xf3\xe6\x7a\xe6\xbd\x92\xe5\x2d\x8d\x83\xbc"
+ "\xfa\xfe\x79\x77\x31\xde\x5e\x23\xf2\x36\x8a\xe5\xdd\x99\x08\x79"
+ "\x57\xf8\x68\x5b\x98\x50\x2e\xcb\x3b\x99\xe5\x2d\x9e\x0a\x79\x53"
+ "\x7d\xf0\xc2\x33\xef\x14\x96\xf7\xf5\x74\xc8\x9b\xee\x83\x17\x9e"
+ "\x79\xaf\x62\x79\xff\x30\x0b\xf2\x66\xfa\xe0\x85\x3b\xef\xd8\x57"
+ "\xe6\x40\x9e\x2c\x68\x67\xbd\x0f\xda\x7a\x96\x79\x35\x2b\xb3\x72"
+ "\x1e\xe4\xcf\xfd\xff\xed\x3d\x0d\x58\x54\xd7\x95\xf7\x3d\xc6\x14"
+ "\x09\x04\x54\x82\x68\x30\x8e\x8a\x09\xa6\xfc\x0c\x88\x09\xb1\x26"
+ "\x21\x89\x49\xec\xd6\x24\x74\x97\x6c\xe9\x86\x6e\xa1\xa2\x81\x44"
+ "\x91\xe0\x0f\xa8\x28\x88\xda\xb5\xb3\x28\xd3\xc8\x12\xbb\x21\x0c"
+ "\x69\x88\x25\xd1\x36\x6e\x4b\xb2\xb4\x6b\xb3\x63\x99\x6e\x31\x21"
+ "\x42\xba\xa6\x4b\x76\x55\x06\x45\x1c\x7e\xc4\x91\x19\x99\x51\x61"
+ "\xee\x9e\x73\xef\x7d\xcc\x9b\x61\xb4\xe6\xb7\xdf\xb7\xcb\x4d\x1e"
+ "\xef\xdd\x73\xcf\x3d\x7f\xf7\xdc\x73\xcf\xbb\xe0\xbb\x7e\x6c\xab"
+ "\xc6\x9d\xcb\x71\x1b\x32\x01\x77\xa7\x1f\xdb\xaa\x71\xe7\x71\xdc"
+ "\xb7\x72\x00\x77\xf7\x78\x5c\x98\x6f\xdc\xbe\x49\xc2\xbe\xd1\x1c"
+ "\xff\xd0\x6a\xc0\xaf\xf0\x63\x5f\xa4\xa7\xcc\xd9\xf9\x1c\xb7\xae"
+ "\x00\x70\x0d\x7e\xec\xab\xc6\xbd\x8b\xe3\xbe\x17\x09\xb8\x55\x7e"
+ "\xec\xab\xc6\xbd\x9b\xe3\xfe\x72\x19\xe0\xee\xf7\x63\x5f\x35\x6e"
+ "\x0c\xc7\x6d\x44\xdf\xa9\xf1\x23\xef\x5c\x15\xee\x02\x8e\xfb\x6e"
+ "\x0a\xe0\xd6\xf9\x19\x0f\x35\xee\x3d\x1c\xd7\x14\x08\xb8\xf5\x7e"
+ "\xc6\x43\x8d\xfb\x75\x8e\xdb\x84\xbe\xde\xe0\x67\x3c\xc6\x70\x61"
+ "\x5d\x88\x1d\x0d\xfa\x4d\x8c\x11\xf1\x25\x0d\xfb\x9e\x2f\x95\xd9"
+ "\xfa\xce\x70\xc1\x4f\x4c\x22\xde\xc5\x71\x9a\x47\x70\x5e\xb2\x3d"
+ "\x0f\xc4\xf9\xd0\xc5\xe2\x11\xac\x2f\x23\x0b\x8d\x9e\xd8\x1d\xcf"
+ "\x71\x0f\xa3\xef\x36\xaa\x63\x28\x95\x35\x6a\xbc\x04\x8e\xd7\x8e"
+ "\x71\xa1\xc9\x1b\x2f\xd0\x83\x17\xd4\x6c\x81\xf6\x23\xb5\x3e\xf1"
+ "\x18\xe4\x54\xd3\x4a\xe4\xb4\x7e\x6f\x05\x5c\x93\x37\xde\x48\x92"
+ "\x0a\x2f\x89\xe3\xfd\xc1\x06\x78\x66\x6f\x3c\xad\x1a\x6f\x21\xc7"
+ "\xfb\x23\xca\xd6\xe2\x8d\x97\xaa\xc6\x4b\x1e\xd5\x1f\x73\x31\xdc"
+ "\xed\x9a\x56\x5f\xfb\x81\xad\x93\x54\x6b\xda\xa2\x51\x7d\x2b\x11"
+ "\xb8\xed\x8a\x0d\x99\x9d\xb9\xcf\xcb\xc2\xe7\xef\x1d\xd5\x1f\x0f"
+ "\x14\x78\x27\xd4\xeb\x80\x6a\xad\xbd\x8f\x06\x1d\x75\x89\x75\x94"
+ "\xfd\x6d\x01\xc4\xf7\x93\xfe\xf2\x8d\x82\x7b\xc8\xad\x7d\xf2\xc9"
+ "\x16\xbe\xf6\x28\xe7\x75\x9d\xe6\xe7\x26\xd7\x1c\x48\x7d\xda\x41"
+ "\x47\xd4\xb0\x4a\x99\xb6\x27\x38\x88\x06\xbf\x99\x4a\x43\xba\x73"
+ "\x2d\x00\xb7\xcd\x3a\x90\xe5\xd4\x9f\x3c\x61\x91\x72\x6d\xf8\x4d"
+ "\x3f\x78\xb6\x58\xc8\xcf\x96\xe2\x73\x65\x39\x75\x81\x4d\x24\x3c"
+ "\xdf\xc5\x08\xcf\x7b\xe1\x62\x67\xaa\x40\x5e\x47\x7f\x48\x52\x4d"
+ "\x1b\x47\x48\x4f\x31\x91\xdd\x7b\x0f\x12\x6d\x21\x7e\x57\xf0\x54"
+ "\x1c\x2d\xca\x5d\x02\xb2\x68\x81\x6f\xce\x19\xa8\x33\x59\x40\x7f"
+ "\x58\x1b\xa3\x4c\x85\xf8\x6d\xd1\x53\xd9\xb6\x90\x73\x5a\xba\xe3"
+ "\xd9\xde\x82\x6d\x64\x76\x9f\x7c\x2a\xcb\x0e\xb1\xc1\x5e\x94\xfb"
+ "\x20\xd2\x70\x87\x1c\x8c\x02\x79\xa3\xf0\x9b\x84\x74\x7f\x8f\x38"
+ "\x57\xe6\x14\xfb\x9e\x3b\xc8\xd3\x4e\xa3\x0e\xe8\xdc\x57\x77\x96"
+ "\xe1\xd9\x70\xa6\x6d\x7d\xe4\x8c\xaa\xcd\x36\xa3\x87\x7d\xcb\x10"
+ "\xf4\xd3\x8d\x56\x04\xa7\xb9\x83\x83\x97\xd3\x8a\xe9\xb9\x6d\xab"
+ "\x2d\x84\x9f\x05\x73\x3a\x91\xde\xf6\xdd\x36\x77\x45\x70\x32\xc0"
+ "\x33\xda\x1c\x57\x19\x1c\x68\x58\x31\xef\xb4\x07\x4f\x2b\xa1\x15"
+ "\xd3\xca\x4c\x33\xaf\x92\x6e\xf9\x94\x03\xe9\x22\x9c\xee\x99\xce"
+ "\x6c\xe5\xde\x33\x3d\x23\x20\x92\x68\xec\x21\xd3\x4a\x9c\xfa\xd3"
+ "\x81\xca\x99\x24\x0a\x2f\xa4\x6b\x11\xb4\xa0\x3d\xc6\x22\x7d\x33"
+ "\x92\x7f\x27\xf1\x54\xd6\x0d\xfe\x46\x24\x94\xee\x39\x98\x02\xf8"
+ "\x19\x16\xf9\x44\x20\x1f\x83\xd3\x39\x16\xe9\xa1\x6e\xf1\x5c\x60"
+ "\x91\x1e\x5d\x2e\x9e\x4b\x2c\xd2\xf7\xd3\xc4\xf3\xd8\xf7\x1f\xfd"
+ "\x7f\x8f\xf2\x60\x30\xd8\x3c\xda\xfd\x4a\x46\x20\xe6\xc5\x98\xeb"
+ "\xd3\x90\x83\xc1\xda\x3b\xf1\x1c\xc2\x4e\x2d\xf0\x8c\xe6\x67\x01"
+ "\x9c\x3e\x07\xf7\x50\x71\xb7\x89\x3b\x45\x1c\xe6\x57\x51\x07\x0e"
+ "\xd3\x8a\xd3\x2e\xb4\xf7\xb6\x51\xea\x06\xba\xcb\xc0\x76\x59\x6d"
+ "\xc5\x56\x61\xd3\x4e\x76\x06\x32\x1b\x53\x18\x77\x1a\x32\x3d\x8b"
+ "\xf1\xda\x73\x4e\xab\x96\x0b\xff\xf8\x59\x97\x98\xb4\x30\x79\xd1"
+ "\xbd\xf7\xa5\xdc\x9f\xfd\x83\x15\x39\x2b\x57\x3d\x97\x9b\xf7\xfc"
+ "\x0b\xab\xd7\xe4\xaf\x2d\x78\xb1\x70\xdd\xfa\x0d\x1b\x8b\x8a\x37"
+ "\x6d\x46\xbc\x31\x1d\x5e\x59\x2a\x39\x64\x02\x7c\x1e\x41\x3e\xbb"
+ "\x98\x3c\x00\xe3\x3e\xd1\xb9\x5e\xa3\xf5\x6f\xd3\xb6\x48\x78\xf7"
+ "\x99\x8b\x67\x80\x75\x7e\x84\x67\xdf\x80\xff\x49\x6d\x35\x4f\x98"
+ "\xf0\xec\xb4\x6e\xb9\xd3\x7c\xdc\xf6\x84\x09\xcf\xee\x6b\x8e\xb4"
+ "\x92\xe8\xb9\x78\xbe\x5a\xe7\x61\x6c\x37\xde\x45\x88\x19\xfa\xfa"
+ "\xa3\x39\x37\x8c\x44\xee\x8b\xa0\xb6\xaa\x08\x3a\x80\xf4\xab\xaa"
+ "\xa9\xd5\xb6\x25\x97\xec\x85\x3a\xf8\x6d\x58\x8f\x6c\xd9\xd5\x0c"
+ "\xd9\x36\xe4\xd1\x51\xb5\xd5\xb4\x7b\x67\x04\xed\xde\x51\x4d\x07"
+ "\x8c\x11\xd4\x12\x5d\x45\x82\x9d\x7a\x4b\x8a\x45\xee\x34\xb0\x79"
+ "\x05\xed\xee\xa0\x4e\x5d\x25\xb4\x25\x8c\x90\x00\x23\xd4\x01\xe6"
+ "\x68\xd6\x72\xb9\xdf\x1e\x72\x4d\x02\x7a\x51\xf4\xda\x6a\x69\x2f"
+ "\xf0\xe1\xe3\x64\x79\xd3\x0c\x19\x00\xf0\xb3\xb5\xb9\xce\x10\x8b"
+ "\x6c\x69\xc0\x33\xa5\x80\x5f\x68\xdb\xfe\x01\x82\xf4\x7e\x51\xe8"
+ "\x9a\xb4\x6e\x26\x1d\x01\xdc\xdd\xee\x2d\xab\x25\xc0\xc9\x01\xda"
+ "\x0e\xb5\x3e\x31\xab\xd6\xac\xd7\xe6\x6f\x58\xbd\x7a\x41\x10\x89"
+ "\x61\x77\xaf\x73\xff\xd6\xe3\xf7\x68\xf7\x55\x53\x33\xe8\x69\x02"
+ "\x7d\x5b\x3e\x84\x8c\x1f\x7c\x86\x80\x4e\x06\xa0\x3b\x0a\xf0\x23"
+ "\xf0\x7c\x04\x64\x6f\xe1\x67\xc5\x0d\x2d\xa0\x7a\x4b\x23\xc8\x89"
+ "\x6b\x0e\xbe\xff\x12\x7b\x51\xba\x04\x7a\x57\x01\x5e\x8b\x76\x26"
+ "\x99\xdf\x23\x77\xed\x02\x39\xea\xe1\x19\xf1\x13\x71\x1c\x01\xdf"
+ "\xcc\xf5\x1a\x9a\x81\x75\xb0\x95\xe9\xd5\x08\x5a\xe1\xd4\x77\x65"
+ "\xe1\x77\xb9\xd9\xf9\x45\x50\x07\xbb\xb4\x00\xae\xc1\x5e\x9a\x2e"
+ "\xc1\x7b\xa3\x64\xf4\xd0\xd4\xa1\x4c\x28\x07\xbe\x8b\x7e\x00\x99"
+ "\x9f\xfb\x5a\x06\x89\x73\x11\xe9\x83\x6e\x42\x6a\xaa\x69\x1d\x5c"
+ "\x35\x70\xed\x7f\x1f\xda\x8e\xc1\xd5\x02\xf0\x56\xb8\xbf\x0f\xf7"
+ "\x63\x70\xc1\xbb\x6c\x24\xca\xbd\xae\x84\x5a\x13\xf6\x93\x79\x48"
+ "\x1f\x7c\xeb\x3b\x67\xe4\x4b\x65\x28\x3b\x7e\xf7\x9e\x06\x75\x39"
+ "\xbc\xbf\x15\x7e\x36\x97\x40\x3b\xdc\x4b\xf8\x5d\x7d\x9d\x35\xc3"
+ "\xd5\xcd\x9f\xbb\x63\xe1\x39\x5d\x3c\xa7\xc2\xb5\xfc\xcf\x5f\xbe"
+ "\xf4\xae\x77\x75\x37\xdd\x3c\xee\x4d\x5d\x8e\x9b\xc3\xc3\xc8\x6f"
+ "\x6d\x21\x72\x2f\xf1\x86\x5b\x3b\x38\xec\x42\x3d\xaf\x5f\x38\x2c"
+ "\xee\x27\x89\x3c\x08\x76\x1a\x04\xfa\x17\x23\x39\xec\x62\x34\xdc"
+ "\x57\xc3\x55\xec\xcd\x7f\x08\xfa\x0f\x05\xe3\x78\x5e\x2b\x87\x35"
+ "\x03\xc6\xd2\x22\x77\x99\x71\x8c\x2a\xb9\x6f\x49\x6e\xca\x60\x26"
+ "\xf0\xad\x1a\x8f\xff\x9c\x7d\xc7\xdb\x7f\xce\xd6\xf9\xf8\x8f\x01"
+ "\xe3\x11\xf4\x0b\x36\x72\x7f\x39\x62\xdf\x92\x03\xf5\xb3\xf5\x40"
+ "\xe7\x08\xee\x91\xf4\xc8\xdd\xec\x1b\x3c\x95\x7d\x84\x84\xe4\x12"
+ "\x0d\xc6\x97\x01\xf9\xec\x65\xf4\x59\xe4\x2d\xf8\x72\x59\x40\x3e"
+ "\x80\xd5\xa1\x7c\x6b\x81\x2e\xd4\xeb\x01\xaf\xae\x8d\x0c\x29\xb2"
+ "\xb1\x3e\xfa\xe7\xc1\x1f\x85\xbc\x48\x13\xfb\x51\x8f\x5e\x26\xec"
+ "\x23\x78\xbf\x09\x70\x7c\xb7\xc5\x7f\xff\x14\xd0\x36\x62\x21\xe8"
+ "\x93\x78\x6f\x1b\xd1\xc1\x5c\x5a\x46\xdc\xce\x0c\x92\x10\x49\x74"
+ "\x30\xdf\x26\x9f\x91\xbb\x2b\xe2\x4b\x08\xc6\x8e\x16\x8c\xeb\x16"
+ "\xb9\x3b\xcd\x88\x73\x91\xd3\x12\xe7\x9f\x76\x99\xde\x2f\x20\x8c"
+ "\x4f\x2d\xca\x03\xed\x2a\xbe\x55\xf8\x1e\x5b\xb9\x99\xeb\x0a\xbc"
+ "\xd0\x0e\x87\x51\x77\xb4\x27\xb4\x37\x01\x1d\x2b\xb6\xb1\xb3\x83"
+ "\xb8\x3e\xf5\x78\xbe\x04\xda\x03\xf1\xf1\x2c\x4a\xfe\x9d\xf0\xae"
+ "\x10\x66\x37\xe8\x8f\xe3\x41\x81\x07\xd2\x28\x1d\xa1\x23\x14\xe2"
+ "\xd1\xeb\x9b\x5d\x90\x7b\xf4\x64\x7b\x8f\xcf\xb9\x54\xf5\xf8\x40"
+ "\xbf\xc3\xd0\xdf\x4c\x41\x47\x8c\x27\xc0\x33\x14\xf3\x0d\x80\x19"
+ "\xdc\x7a\xa0\xb1\xd1\xc5\xf6\x75\x80\xce\xb7\x41\x16\x03\xd2\x01"
+ "\x79\xcc\x82\x56\xc5\xd1\x12\xef\xb1\x16\xf4\xea\x71\xcc\xd9\x7c"
+ "\xde\xcc\x74\x82\xd8\xd5\x33\xa7\x96\xb7\x35\x01\x4e\x13\xbd\xb6"
+ "\x8c\xe0\x79\x0d\x7c\x2d\x61\x6d\x8d\xa5\x57\xd8\xf8\x9a\x79\x5c"
+ "\xeb\x79\x78\xdd\x56\x6a\x55\xc9\xed\x52\xce\xbc\x10\x72\x37\x22"
+ "\x3f\x5a\x94\xc9\xd6\x56\xe4\x81\xfd\x39\xbd\x73\x27\x90\x9e\x62"
+ "\xab\x78\x90\x83\xdb\xeb\x5c\x20\xc0\xeb\xd1\x17\x99\xdd\x20\x8e"
+ "\xda\x4b\xd1\x17\xcf\x8d\x40\xff\x23\x7b\xb1\x5e\xc4\xea\x06\x16"
+ "\x63\x3d\xed\x4b\xb1\xbd\xcd\x0a\xe3\xf6\x02\xf8\x92\x9b\x90\x79"
+ "\xe1\x44\xe7\x28\x67\xba\x1d\x72\x6c\x59\x2a\x35\x8f\x10\x82\x72"
+ "\x82\x8d\x9a\x9c\xfa\x1e\xe0\xd1\xc9\xf2\x07\x88\xd7\x8d\xf4\xf5"
+ "\x0c\x82\x32\x43\x3c\x13\xf2\x9d\xbf\x5d\x8c\x7d\x23\xea\x88\xf6"
+ "\x8c\xe7\xb1\x0f\xda\xac\xbf\x46\xd9\x3d\x7a\xf7\xd8\xd4\x36\x66"
+ "\x7a\xc3\x38\xe0\x78\xe1\xb8\x78\x68\xf6\xa0\xef\x1b\x80\xd6\x21"
+ "\x5e\xe7\xbe\x81\xb6\x36\x44\xd0\x56\xc4\xf7\xe0\x5a\x17\x60\xdb"
+ "\x36\xe0\x9d\x50\x00\x6b\x3a\xcc\x0b\x3c\xb7\x04\xe8\x1e\xc2\x73"
+ "\x46\x81\x46\x13\xda\x14\xf0\xb6\xa2\x3f\x42\xbd\x55\xc8\x5d\x02"
+ "\xeb\x79\x2c\x5c\x4b\x3c\xf3\xdf\xba\xc6\xdb\xbf\xce\xfb\xce\x7f"
+ "\x1c\x6f\x83\xbb\x74\x19\x61\xfe\x50\x48\xb4\x83\xb2\x75\xb2\x58"
+ "\x3b\xc4\x58\x5b\xbf\xd7\x0c\xf3\x45\x45\xa3\xdb\x67\xac\x9b\x98"
+ "\x3f\x16\x2d\x97\x50\x67\xe8\xdb\xc4\xe9\x9c\x67\x3a\x33\x7f\x2a"
+ "\x67\x3e\xd0\x4a\x8b\x40\xcf\x31\x3f\x38\x9f\x2a\xc6\xb9\xd5\xc7"
+ "\x26\x4a\xec\xaa\xc0\xf3\xe5\x30\x26\x39\xcb\xc9\x83\xce\x6b\x9e"
+ "\xb8\x84\x63\xef\x66\x63\x7f\xde\x6a\xe4\xeb\xad\x88\x5b\xe7\x79"
+ "\x7b\x84\x97\x0f\xa3\x4e\xb3\x98\xff\xa2\x2c\xa5\x99\x28\x4b\x13"
+ "\x93\xa3\x54\x4b\xa0\x8d\x7d\xf7\xdb\x22\x5b\xb5\x62\xbe\x0a\x5a"
+ "\x3d\x0e\xa4\xb5\x03\x62\x15\xca\x04\xbc\xcb\x58\xfc\x7b\x9c\xd9"
+ "\xe4\xb2\x90\xbd\xc5\x55\x8e\x7d\xcf\x5a\xaf\xc8\xac\x6f\x0b\x3c"
+ "\x67\xba\xf8\x19\x34\x41\xd0\xbf\x01\xbf\xfb\xdf\x23\x5f\x48\xc7"
+ "\x18\x8d\xbf\x73\x82\xe7\x07\xf0\xdf\x87\x42\x4c\xd1\x00\xbd\x40"
+ "\xf4\x51\xc5\x2f\x06\xe4\x0b\x71\xf8\x7d\x7c\xb0\xf5\x21\xc8\x91"
+ "\x1a\xd0\xde\xe8\xcb\x90\x23\x25\x3b\xf5\xbd\x99\x8a\xdf\x02\x9f"
+ "\x1a\xb4\x3d\x1f\x9f\xde\xd7\xc0\x8f\x9b\x3c\xbe\xd5\xfb\x9a\xb0"
+ "\x63\x03\xd8\x31\x10\xf8\xcd\x11\x7a\x35\x00\x3e\xe4\x62\x17\xa6"
+ "\x08\xd9\xc5\x19\xa6\xbd\xbf\x55\xc6\x41\xcc\xd5\xd6\xbd\x18\x7f"
+ "\xd9\x18\xf4\xa5\x8b\xbe\xf5\x9c\x57\xdf\x33\x0a\x2e\xe6\x88\xfc"
+ "\x6c\xa9\xbe\x67\x30\x0e\x26\xc0\xd8\xb3\xd8\xc7\xce\xe0\xe5\x30"
+ "\x9c\x3b\x9c\xc7\xc0\x28\xf3\x43\xc8\x7b\x3c\x7e\xd4\x17\xeb\x13"
+ "\x9f\x30\x16\x1b\x8e\x03\x0d\x8c\xa7\xe8\x4b\x18\x53\xf1\x3d\x06"
+ "\xe8\x69\xc4\xfc\x11\x32\xf7\xfd\xc4\xdb\x57\x06\x7a\xc1\x57\xe2"
+ "\x54\xb4\x77\xfb\x5b\xe7\x8c\x3c\x06\xd6\x08\xdd\x3e\x11\xba\x1d"
+ "\x12\xba\x7d\x22\x74\x6b\x00\x1e\x60\xb7\x81\x57\x55\x76\x04\xbb"
+ "\x0d\x4c\x16\xf8\x4d\x18\xcb\x3d\xf3\xb5\xff\x31\x65\x2e\x8f\x8f"
+ "\x17\xfd\x57\x70\x3e\x78\xe4\xea\xd7\xfa\xc4\x8b\x26\xff\xf1\xa2"
+ "\xcf\x26\xf4\xad\xf3\x99\x1b\xf5\x5c\x76\xb1\xb6\xc0\x38\x1c\x87"
+ "\xf7\x34\x7e\x8e\x52\x57\x08\xc6\x4f\xe4\xad\x5e\x83\x6a\xb9\x5d"
+ "\xc5\x5c\xee\x3f\x37\x7e\x1c\xfa\x1b\xd5\xf3\x19\xc7\x1a\x63\x02"
+ "\xd2\xc0\x31\x65\x79\x25\xc0\xf8\xb8\xf6\x57\x60\x6c\x50\xc7\x68"
+ "\xc0\xad\x72\x53\x9c\x2f\xfd\x4d\xde\x73\xb1\x3f\x5a\xcc\x45\xc1"
+ "\x7b\xe0\x47\x30\x46\x3a\x0f\xdf\x81\x58\x1f\xbe\x38\x36\x66\xb4"
+ "\x83\x18\xd3\x0d\xca\x9a\x86\xf8\xd0\xb7\x18\xfa\x64\xf9\xac\x8f"
+ "\x06\x94\xcf\x22\xf7\x75\xb0\x98\x55\xcd\x62\x45\xb1\x93\xc9\x33"
+ "\x90\x63\x14\xeb\x04\xc0\x74\x02\xa6\x13\x6b\x89\xe2\x37\x1f\xfb"
+ "\xc8\x64\xf2\x9f\x1f\xf5\x75\x28\xf9\x11\xa3\xc5\x62\xd1\x80\x59"
+ "\xe8\x87\xb0\x38\x0e\xeb\xc3\x35\x86\xad\x55\x00\xaf\xa2\x6c\xbd"
+ "\xea\xd3\x89\xf5\x0a\xe7\x97\x6c\x91\x7b\xeb\x70\x8e\x61\xdd\x22"
+ "\x5f\x88\x44\xfa\x6d\x65\x57\xf1\x1d\x62\x3f\xb4\x2d\xc1\x78\x80"
+ "\xf1\x02\xff\x8e\x95\xdd\x9f\x62\xf7\x95\x18\x77\x30\x0f\xc1\x76"
+ "\xc0\x8b\xc5\x58\x04\xf0\x4d\x78\x5e\x2b\xed\x0f\x04\xba\x17\x32"
+ "\x45\xdf\x3d\x2c\x57\xe8\x5f\x16\xa0\xc0\x94\x7e\x30\xd7\x1f\xc0"
+ "\x7e\xd8\x5f\x89\x5f\x18\xbb\x46\x30\x36\x71\x7e\x1f\x09\x1f\x67"
+ "\xef\x0d\x4a\x5e\x74\x4d\x56\xe1\xe2\xf9\x33\x2c\xa6\x0d\x46\xf1"
+ "\x78\x36\x18\x82\x7d\xd9\xf8\x41\xac\xdc\x76\x85\x76\x19\x0b\x89"
+ "\xa6\x76\x88\xe5\x58\xc1\x5c\xce\xc1\x5c\xae\xc7\x60\x22\xd3\x83"
+ "\xc7\x54\x03\x97\xa5\x2b\xb8\xf6\x2a\x6b\x7b\x12\x75\xc1\xb6\x4a"
+ "\x55\x1b\xbd\x16\x83\x6d\x79\x4c\x2e\x9f\x7e\xee\x6b\xb9\xe3\xf0"
+ "\xf1\xfc\x61\x88\xa1\x98\x4b\x88\xd8\x3b\x68\x15\x72\xbe\xa1\xc4"
+ "\x5d\xb0\x4b\x32\xc6\x5e\xd6\xb6\x4a\xe0\x3c\x25\xee\x2c\xbe\x0f"
+ "\x7e\xcc\xed\x1a\x29\x0b\x7b\x2f\x11\x7a\xf4\xb2\xf7\xec\xfe\x0c"
+ "\xb0\xed\x60\xab\x62\x5b\xf5\x33\xce\x1f\xe0\x1f\x86\x75\xe6\xf7"
+ "\x25\xec\x1d\xb6\x06\x71\x50\x26\xbe\x46\x5c\x30\xfb\xe6\xd4\x3d"
+ "\xf2\xa5\x6c\x5c\x97\x78\xae\x7a\xe9\x61\xb1\x37\x44\x4c\x85\x3f"
+ "\x85\x75\xe1\x62\x85\x12\x63\xa8\x73\x19\xbc\xf3\x9f\x01\x9c\x8b"
+ "\xec\x5c\x53\x3c\x53\x44\x8d\x83\xf1\xe9\xed\xab\x16\x41\xf3\x62"
+ "\xae\x12\x37\x30\x96\x1c\x77\x9c\x11\x39\x9d\x2d\xb2\x56\xc4\x92"
+ "\x41\xd9\x36\xc3\x3b\x0f\xb3\xcd\xf0\x8e\x19\x97\xe2\x7c\x63\x06"
+ "\xe4\xcd\x3b\x9d\xfa\x8b\x03\x5e\x79\x00\xc0\x6e\x1c\x3b\x2e\x9a"
+ "\x70\x8e\xe2\x99\x72\x2c\x3e\xb1\xfd\x2e\xdb\x76\x45\x66\x8c\x9b"
+ "\xf6\x2d\xca\xfe\xc5\xa5\x59\x98\xab\x79\xf3\xb3\x65\x7a\xc5\x4e"
+ "\xe4\xa7\xd0\xd3\x10\x3c\x93\x0c\xec\x80\x7b\x2e\xb6\x58\x11\xe7"
+ "\xeb\xbc\x62\xa5\x58\xc3\x30\x4e\x7a\xaf\x55\x5d\x21\xde\x6b\xd5"
+ "\xa5\xc9\xe3\x63\xa4\xad\xe3\xe6\xd7\x2a\xdb\x61\x8c\x5b\x4a\x8c"
+ "\xf4\x8e\x05\xb6\x93\xb5\x5e\xb9\xac\x2d\x47\xc9\x65\x3d\x71\xf4"
+ "\xa2\x03\x63\x14\xf0\x6f\xe2\xbc\x2f\xa5\xc3\xba\x9f\xa1\xf0\x86"
+ "\xf6\x8a\xe3\x90\xa9\x50\xbd\xc5\x04\xcf\x29\x22\x07\x64\x73\xf3"
+ "\x2a\x3b\xbf\x68\xb0\x0c\xfc\x2f\x08\xfd\xcc\x94\x3f\x44\xba\x3d"
+ "\x6b\x85\xd9\xbe\x76\xcc\xbe\xe7\xd4\x79\xe1\xab\xd5\x74\x37\xf0"
+ "\x39\xa2\xd6\x71\x0f\xc0\x2a\xc5\x1e\x02\xb3\x2d\xa3\x75\xc9\x60"
+ "\xac\xf6\xd6\x8d\xeb\x71\xc9\x8c\x7a\xe0\x3b\x11\xf0\xdf\x89\x79"
+ "\x0f\xe4\x7c\xf0\xdc\x8b\xf9\x4d\x83\x92\x17\x5d\x29\x57\xe7\x57"
+ "\x5d\x39\x18\x2b\xc5\xbb\x67\x0b\xe4\x3b\x06\xf5\x5e\xcc\x93\x8f"
+ "\xa6\x69\x0b\x0a\xf3\xf2\xd7\xaf\x4a\xd2\xe6\xe5\xe7\xad\xcf\xcb"
+ "\x5e\x9d\xb7\x39\x7b\x7d\xde\xda\xfc\xd8\x35\xd9\xcf\xe5\xad\xd0"
+ "\x16\x65\xaf\xd3\xea\x8a\xe7\x17\x07\x11\x0f\xea\x62\x6d\xf6\xba"
+ "\x75\x1b\xd6\xac\xcc\xd1\xe6\xe7\xad\x88\x2b\x5c\xb9\x6e\xe5\x7a"
+ "\x6d\x76\xe1\xda\x0d\xf9\x39\xda\xf9\x39\xf1\xf3\x75\xf7\xe6\x04"
+ "\xa9\xf7\xd0\xe6\x86\x91\x01\xf7\xb0\xd5\x5a\x39\x4c\x02\x43\xa5"
+ "\x82\xc2\xd0\xe2\xbc\x7c\xbe\x6f\x67\x8f\x4b\xa8\x22\x05\xd0\x1e"
+ "\x8c\xe7\x23\x53\xfd\x50\x2a\xdc\x35\x88\x07\x7a\x6a\xe1\x39\x10"
+ "\x64\x8f\x72\xea\x87\x6c\x16\x79\xb8\x83\x9d\x7d\x0c\x70\xd0\x2d"
+ "\x8a\x0e\xb7\x58\x21\x67\x2b\xc0\xdf\xaf\x1b\x87\x49\xb8\x61\x23"
+ "\xd1\xc0\x15\x0c\x57\x98\x1c\x86\x7b\x5d\xf6\x68\x8b\xec\x48\xe5"
+ "\x7b\x9f\x76\xb3\x2d\x24\xbc\x91\x56\x84\x37\xf2\x71\xb1\x1f\x55"
+ "\xf6\xa2\x9f\xde\x45\x9e\x46\xff\x3c\x23\xdb\xd9\xbe\xfe\x0e\xf0"
+ "\x65\xdc\xc7\xb5\xbf\xf7\x48\x2a\xe4\x83\x27\x71\x1f\x16\xda\x8e"
+ "\x3a\x64\x12\x0c\x72\x69\x9a\x4b\x74\x64\x1f\xf0\x5a\x17\x49\x29"
+ "\xf0\xd8\xad\xec\xa7\x81\x0e\x61\xa0\x4b\x87\xd0\xe3\x05\xa6\x47"
+ "\x35\x8d\xae\x9a\x0a\xf2\xbd\xc4\xe4\x69\x54\x74\x00\xb9\x3b\x40"
+ "\xa6\x48\x90\x33\x0c\xe5\xf2\xb7\xd7\x87\xfb\x5d\x20\xe7\xa8\x7b"
+ "\x23\xd8\xed\x4e\x7e\x26\x5e\x65\x2d\x9f\x7f\xa0\x57\xb2\x11\x9e"
+ "\xf7\x0e\x91\xe0\x3d\x78\x76\x79\xf9\x6c\xfa\xa1\x63\x84\xb4\xe5"
+ "\x76\x90\xd0\x4d\xd4\x46\xdf\xb5\x5a\xb9\x4e\x8e\x18\x8c\x0d\xbf"
+ "\x7a\xbe\x43\x83\x3a\xc1\x5a\x11\x6c\x1c\xba\xee\xde\xa2\x66\x5f"
+ "\x04\x75\xd0\x57\xd4\x39\x97\xe3\xc7\x68\x13\xcc\xb7\xec\xe5\x78"
+ "\x06\xb6\xa3\x18\xe4\x6e\x17\xb9\xb1\x83\x5e\xcb\x54\xe5\x52\x0e"
+ "\xf4\x33\xc7\x75\x68\x07\x2a\xb4\xf1\x9c\x74\xec\xc3\xc7\xdf\x31"
+ "\x0a\x7d\x6c\x2a\xfa\x1d\xbe\xf4\x91\x26\x3c\xdb\x14\x3e\xfc\x3d"
+ "\xdc\x81\x39\x81\x0d\x7c\xd9\x76\x1d\x7e\xd1\x2f\x55\xd3\x13\x6d"
+ "\x00\xaf\xbc\x42\x30\xa7\x3d\x61\xac\x46\xfa\x97\x53\x2c\xf2\x50"
+ "\x0d\xd2\xdf\x11\x41\xc8\x4e\xc0\xb1\xeb\xed\xed\x0e\x76\x66\xf9"
+ "\x65\x98\xff\x96\x16\xdf\xbd\x6c\xe1\xcf\x8b\x7d\xfc\x39\xf5\x25"
+ "\xcc\x09\xab\x80\x3e\xf8\x50\xe5\x65\x58\x87\xa1\x1e\x5f\x45\x62"
+ "\x90\x0f\x3c\xb7\xe3\x7e\x08\xd0\x6c\x50\xf8\x51\xf0\xff\xbd\x6e"
+ "\xbe\x07\x23\x7c\x2b\x16\xf7\xaf\x4b\x8b\x29\x6d\x86\xf8\x8e\x32"
+ "\xa2\x8f\x41\x9f\x93\x8a\x4f\x81\xaf\x9f\x60\x7e\x15\x4e\x62\xa8"
+ "\xfe\x72\x96\x71\x2a\xe0\x81\x5f\xd5\x82\x3f\xa1\x5f\x39\xf5\xc3"
+ "\x81\x8a\x4f\x81\xaf\xb5\x23\x1e\xc8\x10\x74\x78\x73\xaa\x06\x63"
+ "\x64\xb7\x3c\xbc\x15\x7d\x8c\xbe\xfc\xad\x0e\x3a\xfd\xd9\x0e\x3e"
+ "\x4e\xc3\x5b\xdb\x5c\x7c\x0c\x3c\x76\x1f\x4e\x53\xd9\xbd\x1d\xfc"
+ "\x38\x08\xed\xcc\xf7\xaa\x87\xb7\x82\x6c\xed\x2c\x17\xdf\x0a\x63"
+ "\xc0\xd6\xaa\xe1\x25\xd8\x5f\xd8\xb0\xd5\x63\xc3\xe1\xfd\xfe\x6c"
+ "\xe8\x63\x3b\x0d\x3f\x17\x7d\xb8\x1e\xe7\x0a\xf4\x69\x55\xce\x3a"
+ "\xf7\x37\x96\xc0\x43\xa3\xa9\x22\x81\xc8\xc3\x1c\xce\xf0\x47\x14"
+ "\x1e\x95\x60\x6b\x5b\x69\xee\x0d\xfd\xd9\x5c\x47\x08\xee\x89\x63"
+ "\xff\xe8\x70\xb4\xaf\x73\x89\xa7\x3f\x75\xf8\xf6\x9f\xbf\xc2\x4b"
+ "\x56\x76\x51\xbd\x33\x6d\xdf\x54\xf0\x23\x26\xaf\xb3\xe4\x46\xf2"
+ "\x46\x6b\xf9\x3a\x69\x9a\x8b\xfe\xed\x7c\xa7\x6d\x3f\x21\x08\x13"
+ "\xf5\x7a\x3b\xac\x3d\xbe\xfb\xfb\xd7\xff\x7d\x83\xf3\xb2\xf7\xef"
+ "\x1b\x9c\xdd\xd7\xfb\x7d\x83\x37\x5f\x57\x22\xf2\x75\x1b\xd3\x25"
+ "\x0f\x6f\x57\x94\xdb\x0f\x6f\xa5\x7f\x7c\x9d\xfa\x7d\xc6\xb5\x1d"
+ "\x65\x38\x0e\xeb\x14\xbd\x23\x5d\xa2\x40\xc7\xcc\xd6\x70\x57\x19"
+ "\xcf\x5f\x30\x2f\x72\x65\x21\x8e\xaf\x1e\x63\x25\x30\x1c\x63\x2c"
+ "\xb9\xc2\x2a\x93\x1e\x27\x78\xd2\x30\xb9\x2f\x4b\x69\x96\xbd\x90"
+ "\x09\xf5\x53\x81\xb5\x2f\x85\xe1\x53\x28\x1c\x24\xea\x36\x56\xd1"
+ "\x8c\xe1\x8f\xb5\x7f\x8e\x32\x99\xcb\xcb\xe8\xb9\x88\x24\xf8\x95"
+ "\xa9\x30\x96\xde\xa0\x37\x25\x4a\x17\x7f\xe5\x45\xb8\xca\xd2\x27"
+ "\x01\xbd\x3a\x86\x4c\xe9\x88\xa0\xaf\xd4\xa9\xba\x8e\x10\xef\x3a"
+ "\x94\x80\x4c\x15\x83\xd9\x01\x39\xec\x4f\xa5\xbe\x71\x62\x0c\x24"
+ "\xd7\x85\xa9\x59\x86\x91\xb2\x49\xec\x21\x14\x7f\xb8\x80\x5e\x0c"
+ "\xb4\xa7\x98\xc6\x10\xa6\x39\xb6\xab\xd0\x3f\xe0\xe2\x2f\xf6\xa2"
+ "\xf1\x39\xcb\x9d\xaa\xe7\xd9\xfc\x76\x7f\xfb\x17\x48\xff\xc6\x45"
+ "\xdb\x3e\x59\x79\xf4\xb8\xc7\xe2\x74\x7f\xa8\x1e\xfb\x2f\x6e\x54"
+ "\x40\x6a\x0f\xf5\xb4\x3f\xa8\xf3\xae\xa7\xfa\xb4\x3f\x92\xf6\x05"
+ "\x48\x4e\x4c\xf8\xa3\xd4\x32\x85\x90\x87\xa3\xc6\x80\xa1\x3e\x53"
+ "\x26\xd4\xe0\x33\x85\x3c\x45\x48\x13\x00\xf2\xd4\xab\xc0\x1a\xff"
+ "\xd8\x5f\x4e\x99\xb9\x5d\x4c\x88\xd9\xb6\xf1\x3e\xf5\x90\x0f\x0c"
+ "\xeb\xb7\x68\x05\x2c\xf1\xe8\x38\x7c\x06\xd3\xaa\xea\x52\x2a\xfc"
+ "\xa8\x23\x64\x49\xd6\x17\x20\xea\x44\xf9\xff\x58\x24\x9c\x1f\x13"
+ "\xe5\x4b\x2a\x94\xaf\xe2\x10\x89\xd8\x0d\xff\xa3\x63\x81\x92\x8a"
+ "\x06\x2a\x00\x54\x3c\x7c\x21\xeb\xf8\x44\x99\x28\x13\x65\xa2\x4c"
+ "\x94\x89\x32\x51\xfe\x0f\x14\x49\xfd\x62\x8d\xe7\xd6\x7d\x4d\xdc"
+ "\xd5\xef\x3f\x92\xb8\xd4\x30\xf9\xf3\xf4\xa3\xa2\x90\xb2\x54\x93"
+ "\xb6\x2e\xcb\x12\x66\x48\x6b\xd7\x1d\x2e\xb0\x05\xee\x5e\xd6\x12"
+ "\xd3\x90\x6b\x8d\xdc\x9f\xd1\x91\xd2\x54\xec\xd2\xec\x5c\x6a\x8e"
+ "\xae\xcf\xe9\x0e\xaf\x4a\x3f\x91\xdc\xb8\xde\x11\x5c\xb1\xbc\x35"
+ "\xf6\xd0\xea\x81\xa8\x9a\xcc\x93\x4b\x8e\x94\x8c\xc8\xe5\x8f\xfc"
+ "\x6e\xee\x4f\x7f\x70\x66\xea\x4b\x7f\xfd\xc7\xa4\x5f\x16\x0e\x05"
+ "\xe9\xff\xea\xfd\x7b\xde\x7a\xbe\x6f\xe6\x3f\xff\xdd\x7f\x2f\xfe"
+ "\xcd\xe6\xab\xb7\xfc\xf0\xf1\xff\xb8\xeb\xc0\xaa\x9e\x88\xea\xbf"
+ "\xfd\xd3\xbd\xef\x6e\x1c\xbe\x6d\xef\x53\xc7\xe3\x7f\x91\x3f\x78"
+ "\x67\xed\xdf\x9f\x7e\xf0\xbd\x6d\x6e\x69\xfb\xc3\x47\xe7\xbc\x96"
+ "\xdd\x35\xe5\xc7\xdf\xfe\x28\xf1\x5f\x5e\xbc\x34\xf9\x47\xdf\x3c"
+ "\xb6\xe0\xcd\xbc\xde\x19\x3f\xf9\xee\x27\xf7\xff\x7a\xd3\x95\x49"
+ "\xbb\x1e\xfb\xfd\xfc\x37\x56\x9e\xbb\xfd\x9f\x9e\xf9\x78\xd1\x3b"
+ "\x1b\x2e\x87\xec\x79\xf2\xc3\xb8\x9f\xaf\xb9\x30\xeb\xd5\xef\x9d"
+ "\x7a\xe0\xb7\x5b\x47\x03\x76\x3c\xda\x3c\xef\xf5\x15\x67\xa7\xed"
+ "\xfb\x9b\xff\x5c\xf8\xab\x75\xf6\x5b\xff\xf1\x5b\x1f\x7c\xfd\xe0"
+ "\x0b\xfd\x77\xbc\xf2\xec\xff\x7c\xe3\xdf\xb6\x5c\xfb\xda\x3f\x3c"
+ "\xf1\x87\xbb\x7f\xf6\xdc\xf9\xe9\x2f\x7f\xe7\xbf\xee\xfb\xd7\x22"
+ "\x67\x68\xe5\xd3\x6d\x09\x6f\xaf\xbd\x38\xdb\xf8\xfd\xce\x87\xfe"
+ "\xbd\x94\x7e\x1e\xfb\x91\x80\xc8\x47\xbf\xca\x71\xf3\x24\x8f\x08"
+ "\xae\xed\xf8\xcc\x74\x64\x49\x8c\x3f\x07\x94\x2d\x22\x52\x20\xb9"
+ "\x45\xf3\x19\xde\x18\x3e\xab\xde\xd7\x29\x5a\x75\xff\x9b\x29\xb8"
+ "\x5f\x81\x7f\xeb\xba\x10\xae\x3b\x18\xc4\xb3\x0b\x10\x7d\x93\x34"
+ "\xbe\xba\x22\x81\x0d\x02\x40\xc2\x49\xe4\x16\xb0\x5a\x20\x99\x4c"
+ "\x82\xc8\xad\x24\x98\x84\x90\xdb\x48\x28\x09\x23\x53\xc8\x54\x32"
+ "\x8d\x84\x93\xdb\x49\x04\x99\x4e\x22\xc9\x0c\x32\x13\xb4\x8a\x22"
+ "\xb3\xc8\x9d\x64\x36\x18\x67\x0e\x99\x4b\xe6\xf9\xd7\xab\x8c\xa4"
+ "\x46\xc2\x0f\xf8\x3f\x8d\xed\xda\x94\x91\xac\x09\xf8\x57\x0a\x37"
+ "\x09\x78\xbb\x80\x5b\x26\xe0\x5f\x29\x5c\xfb\x17\xbe\xcf\xf9\x8b"
+ "\xde\x25\x48\x23\x78\x26\xe1\x95\x4f\x8c\x15\x5f\xa8\x24\xca\x58"
+ "\x9d\xfc\x99\xfe\xe3\xe8\x79\xf7\xf7\x2d\xa9\x70\x25\xf3\xc7\x52"
+ "\x42\xc4\xef\x1e\xa8\xba\x8c\x0c\x7a\x95\x6a\xe9\x77\x9a\x29\x65"
+ "\xf8\x5b\x95\x40\x12\xce\x7e\xde\x44\xc1\xdf\x2c\x36\xef\x84\xcb"
+ "\x00\xd7\x3e\xb8\x8c\x70\xbd\xa9\xb0\x22\xd2\xdc\x48\x22\xcd\x4b"
+ "\x83\x7b\x23\xdc\x07\x88\x14\x5d\x46\xa4\xbb\x41\xf8\xf9\x26\x22"
+ "\xc5\xa4\x7a\x94\x49\xb4\x8c\x49\x2d\x25\x08\xb8\x16\x9e\x93\x73"
+ "\x7d\x18\x7e\xda\xf5\xce\xf4\x58\xfa\x32\x6d\x62\x7c\x72\xfc\xa2"
+ "\x45\xda\xb8\xb4\x38\x6d\x92\x2e\x31\x29\x41\x97\x9c\x90\x94\xa8"
+ "\xd5\x25\x2e\x4e\x4e\x59\xbc\x30\x59\xbb\x66\x53\x61\x5e\xa2\xee"
+ "\xb9\x95\xda\x55\x79\x85\x6b\x8a\xb2\x0b\x57\xde\x8c\xe6\x9f\xba"
+ "\x80\x3a\x64\xd6\x28\x17\x53\x3d\x6a\x12\x79\x08\xd6\xa4\x76\x12"
+ "\x10\xde\x44\xc6\x0d\xb3\x64\x10\x2a\xc5\x88\xcb\xa7\xf9\xe7\xc9"
+ "\x44\x7a\x2b\x8a\x48\x6f\xa4\x13\xc9\x18\x46\xa4\x97\xc1\xd6\xad"
+ "\x66\x22\x1d\xab\x22\x92\x19\x6c\xfe\x5e\x06\x91\xde\x2d\x1b\x0f"
+ "\xfb\x53\x34\x87\xd9\xa1\xef\x20\x5c\xe7\xeb\x89\xd4\x69\xe0\x30"
+ "\xf7\x4e\x22\x5d\x29\xf8\x52\x6c\xf0\xd9\xcb\xa7\x1d\x77\xe9\x7f"
+ "\x01\xaa\xe7\x10\x61"
;
diff --git a/sys/dev/mxge/rss_eth_z8e.h b/sys/dev/mxge/rss_eth_z8e.h
index e0dfade36187..acc0fbf44ccf 100644
--- a/sys/dev/mxge/rss_eth_z8e.h
+++ b/sys/dev/mxge/rss_eth_z8e.h
@@ -1,6 +1,6 @@
/*******************************************************************************
-Copyright (c) 2006-2011, Myricom Inc.
+Copyright (c) 2006-2012, Myricom Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -28,9874 +28,9502 @@ POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
***************************************************************************/
-static unsigned int rss_eth_z8e_uncompressed_length = 561364 ;
-static unsigned int rss_eth_z8e_length = 157863 ;
-static unsigned char rss_eth_z8e[157863 + 1] =
- "\x78\x9c\xec\xbd\x7f\x78\x54\xd5\xb5\x3f\xbc\x32\x19\x60\xc4\xc0"
- "\xcc\x84\x88\x53\x8b\xed\x60\x01\x47\xcb\x8f\x68\xb1\x8d\x16\x34"
- "\x08\x28\x58\x7e\x29\xd8\x46\x09\x04\x14\x68\xd0\x08\x11\x22\x0c"
- "\x10\x32\x61\x82\x36\x56\x20\x93\x18\x35\x42\x48\xf0\x8a\x2d\x6d"
- "\x69\xc5\x16\x2b\xde\x62\x1d\x4b\x7c\x5f\xda\x26\x19\xda\x97\x7e"
- "\x6f\x6e\x5f\x6c\x47\x1a\x69\xca\x0d\x30\x25\x03\x19\xc9\xcc\xd9"
- "\xef\x67\xed\x7d\x4e\x32\x33\x4c\x50\xee\xbd\xcf\xf3\xfe\xd3\x3c"
- "\xcf\xe4\x9c\xb3\xcf\xde\x6b\xaf\xbd\xf6\x5a\x6b\xaf\xbd\xf7\xda"
- "\xeb\x10\x5d\xfd\x5f\x90\x2c\x7c\x49\x23\xf3\xcd\xb6\x0f\xfe\x1b"
- "\xe5\xff\xf5\xf7\xaf\xbf\x7f\xfd\xfd\xeb\xef\x5f\x7f\xff\xfa\xfb"
- "\xd7\xdf\xff\xbf\x7f\xa1\x34\x9a\x78\xde\x64\xa6\xdf\xf8\x88\xba"
- "\xbd\x96\x11\x41\xd2\x8a\x5e\x79\x51\x44\xf1\x2a\x0d\xe3\xfc\x08"
- "\xbe\xf2\xaf\x06\x69\x26\x1f\x59\x6e\xb2\x91\x4d\xbc\xe2\x30\x4d"
- "\xdd\x4d\x54\x3b\x5c\x74\xbe\xf8\xb2\x08\x35\x95\x12\x1d\xd9\x8b"
- "\xe7\x97\x45\xc7\x8b\xc3\x45\x18\x70\x96\x04\xa9\xa0\x96\xe1\x54"
- "\xe0\xb9\x02\xe9\x48\x2b\x09\xd2\x92\xad\x9c\x56\x85\x72\x46\x7a"
- "\x60\xeb\x45\x6a\x72\x46\xa9\x8a\xe1\x38\x63\x34\x6d\xa4\xc4\x63"
- "\x0f\xf2\x66\x70\xde\x2d\xc3\x51\x6f\x16\x91\xf7\x65\x11\x89\xc3"
- "\xc1\xc2\xf5\x70\xdd\x7a\xfe\x63\x49\xf5\x85\x90\xd6\x6e\xd4\xd7"
- "\x0f\x0c\x1b\x97\xe7\x36\x38\xbf\x44\xe9\xa7\xe8\xda\xeb\x18\x26"
- "\xe3\x26\xbc\x64\x09\x5c\x8a\xd2\x29\xba\xc6\xd5\xe5\xa5\xf4\x23"
- "\xa0\xc6\x8e\x97\x65\x7a\x7a\x20\x1c\x25\x67\x19\xa5\xe1\xdd\x6c"
- "\x5c\x4d\x28\x37\x84\xe9\x33\xbf\x9e\x46\x71\xdd\x80\x6b\x16\x26"
- "\x7f\x5a\x63\x26\x11\xd3\x28\x6c\xa2\x9b\xc3\x5e\x4a\xeb\xf6\x5e"
- "\x83\xf6\x5b\x5c\xb2\xfd\xa8\x17\x65\xcd\xa7\x68\xf0\x3f\x4d\xc8"
- "\x8f\x3a\x43\xce\x8d\x8c\xc3\xe0\x0f\x85\xd7\x6f\x32\xe0\x68\x5e"
- "\xff\xb5\x0d\x35\x44\x5d\x5e\xd3\xcc\xb0\xc9\x2a\x74\x38\x87\x0d"
- "\x38\x9c\x0f\x75\x65\x70\x5d\x5d\x5e\x73\x4d\x5c\x9e\xa0\x91\x07"
- "\x78\x87\x26\x84\x29\x9d\x71\x3e\x49\x83\x73\xb8\x3e\xbd\x2d\x66"
- "\xae\x23\xb0\x2e\x4a\x01\xf4\x3d\xea\xce\x42\x5b\x9d\x47\x22\x44"
- "\x80\x69\x6f\x2c\x23\x62\xf8\xc0\xdf\xa9\x60\x0e\x9e\x68\xc0\x64"
- "\x18\xbd\x6d\xf5\xfa\x33\x1b\x25\x8e\xdc\x56\x0b\xe9\x79\x97\xc4"
- "\xe3\xc8\x70\xd1\x96\xeb\xb9\x2d\x4d\xe0\x28\x3d\xcf\xd6\x5e\x7a"
- "\xf4\xb6\xff\xda\xdc\x24\xd8\x0e\x05\x3b\x0d\xb0\xd3\xfc\x7a\xb9"
- "\xde\xf6\x07\x93\xf2\xab\xbc\xb6\x6b\xc2\x26\xa1\xd3\x61\x70\x47"
- "\x5f\xde\x6b\x6a\xe3\xf3\x02\x1f\x93\xa2\x2d\x99\x82\x34\xb8\x0d"
- "\xed\x4c\x47\x9e\x59\xe8\x47\xa7\xfe\xfe\x3a\xfd\xbd\x03\xef\xee"
- "\x51\xf0\xae\xcd\x89\x83\x67\x63\x78\xf1\xbc\xa5\x24\xca\x8c\xdf"
- "\x00\x18\xc8\x03\xf1\x1b\x64\x31\xf8\x6d\xad\x43\x68\x9e\x2f\xa0"
- "\x4d\x35\x56\xbf\xe6\x15\x14\x70\x47\xc8\x79\x03\x79\x4e\xd2\xb5"
- "\x07\x00\x9f\x76\x6c\x24\x8b\xa7\x58\x44\x02\xee\x4e\x6a\x0d\x75"
- "\x92\x27\x04\xd9\x88\x5e\xa0\xb2\x0b\xe0\xc5\xe8\x19\x2a\x7b\x9a"
- "\x1c\x4d\xa5\x9f\x50\x2a\x5e\xd6\x4c\x82\x3c\x23\xb8\x6c\x3b\xb5"
- "\xd6\xb7\x93\xa7\x3e\xb1\xac\xe7\x46\x72\xb4\xe0\x19\x7d\x6e\x65"
- "\x3c\x58\xde\xa2\x99\x56\x7f\xe9\xab\x64\xf6\x8c\x24\x53\xcb\x32"
- "\xbf\x8e\x4b\x86\x9b\x71\xd9\x7a\x9a\x2c\xaf\xaf\x00\x1f\x9e\x66"
- "\x7c\xaf\xf7\xbf\xb9\x31\x62\x3a\xe2\x98\x45\x47\x1c\x27\xa8\xc9"
- "\x31\x99\x9a\xdc\xd3\x68\xc7\x69\xca\x38\x12\x99\x44\x4d\xe6\xfb"
- "\xa8\x69\xd4\x34\x0a\x74\xe2\x1e\xf2\x7b\xc4\x11\x26\xe7\x3a\xe6"
- "\xa7\x8c\xc2\xda\x27\xc8\x12\x54\x30\x41\xbb\x8c\x92\x0f\x4a\x88"
- "\x98\x76\xfc\x9c\xaa\x1d\x6b\xbf\x40\x0e\xe0\xd7\x01\x5c\xee\x04"
- "\x2e\x3f\x1d\xe5\xa0\x6c\xe0\x3c\x28\x50\x17\x25\x73\x29\x5d\xd3"
- "\x8f\x1c\x67\x69\xe0\x3d\xc8\x6e\x67\x03\xf4\x09\xcb\x6f\xd7\xa6"
- "\x3c\xe8\x84\x0c\xc8\x7f\xc6\x56\x5d\x06\x3a\x3d\xaf\x91\xb9\x6b"
- "\x7d\x5e\x5a\xe3\xcb\xa2\xbd\xdb\x3b\x84\x8c\x77\x90\xc5\x76\xbc"
- "\xef\x98\x90\x45\xb6\x40\x34\x97\xde\xbf\xd4\xc1\xf2\xd8\x39\x34"
- "\x4c\x69\x0c\xcf\xea\x86\xec\xac\xa3\x01\xc0\xe7\x0f\x8d\x48\xff"
- "\x0a\xf2\xa1\x7c\x6e\x90\x5e\xea\xe4\xf2\xe2\xfa\x85\x61\xed\xfa"
- "\x85\x17\xb4\x57\x16\x76\x89\x57\x16\x9e\x8f\xbd\xb2\xf0\x9f\x9e"
- "\x0d\x64\x89\x5d\xbf\x30\xd4\x5a\x2c\xfb\xc0\xd6\x5a\x8c\x3e\x88"
- "\x91\x65\xf3\x19\xb2\x2d\x7e\x1a\x7d\x1f\xfd\x88\x36\xaf\x24\x87"
- "\x66\x1f\xee\x0e\x44\xff\x44\x8b\x4b\x49\xe0\xbe\x32\x55\xfb\xba"
- "\x32\x1d\xbd\xb2\x85\x7a\x0f\x05\xcd\x43\x0f\x71\xbd\x21\xbb\x93"
- "\xf0\x33\xe3\x67\xc1\x2f\x43\x64\x3a\x32\x40\x2b\xcf\xd0\x2d\x69"
- "\xd4\x70\x89\x68\x82\x46\x69\xa7\x69\xc8\x71\xe0\x6f\xeb\x87\x6e"
- "\x23\xb4\x9a\x85\xc1\x9b\xcb\xa9\xac\xbb\xbb\x90\x58\x17\xb2\xfe"
- "\x63\x7d\xd8\xed\x1d\xea\x44\x3d\x11\x29\xbf\x2f\x43\xc7\x64\x2e"
- "\x0c\x22\xbd\x23\xbc\xa9\x30\x2d\xb4\xa9\xd0\xd4\x95\xb9\xf0\x6f"
- "\xc8\x33\x2d\x68\xb6\x66\xeb\x34\xec\x60\x58\x90\xad\xd0\x90\x28"
- "\xa5\x03\x66\xf1\x3b\x17\xdb\xcc\xbb\x5f\x16\x27\x90\xaf\xa8\x17"
- "\x16\x60\x03\x0e\xe8\x3f\xb4\xdc\x48\x03\xad\xdb\xb7\x23\x1f\x97"
- "\x0f\x44\x72\x79\x4c\x09\x06\x8a\x3a\xc8\x1a\xa5\xc1\xa2\x47\xd5"
- "\x87\x3c\x1d\xac\xd3\x87\x44\x68\x60\xb7\x97\xe6\x31\x6c\x2e\x17"
- "\xe8\xec\x20\x94\xfb\x9b\xf0\x14\x9a\x90\x3e\xa7\x5b\x14\xa6\x6d"
- "\x45\xfa\x11\x94\xd7\xeb\xee\x30\x70\xe4\x3a\xb8\xaf\x25\x9e\xe0"
- "\x87\x23\x45\x11\x1a\x52\x47\xe9\x28\x37\x9f\xe1\x31\x2c\xf0\x41"
- "\x10\x6d\xfd\xdb\x91\xa2\x10\x69\x22\x01\x66\x50\xc1\xb3\xe6\x24"
- "\xc0\x43\xba\x00\x3c\xe6\xbf\x26\x94\x19\xb2\x47\xc2\x7b\xe8\x1d"
- "\x8d\xe1\x45\xc8\xec\x94\xf8\x7e\x9b\x61\x74\xb3\xfe\x00\x4c\xff"
- "\xba\x7b\xa9\x93\xac\x7b\x42\x9e\xc2\xf4\x56\x8c\x9b\x5c\xfe\xcd"
- "\xb2\x8e\x01\xa2\x2b\x2f\x9d\x79\x8e\xdf\x07\xa2\xe7\x39\xcf\x16"
- "\xd1\x55\x98\x3e\xa4\x13\xba\x08\x79\x50\xde\xcd\x78\xc6\xf7\xe5"
- "\x43\xd3\xbf\x3d\x99\xbe\x3d\x6d\xe6\xb4\xc9\x34\x7b\xca\xd4\xc9"
- "\x94\x7d\xe7\xb8\xec\x89\x5f\xfb\xc6\xd7\xe4\xcd\xd7\xbe\x91\xf3"
- "\x35\x9a\xf7\x9d\x87\x26\xd3\xbc\x39\x93\x69\x3e\x7e\xf3\xe6\x4f"
- "\x7f\x68\xda\xf4\xf9\x93\x29\xef\xbe\x99\x78\x9a\x3a\xf9\xb6\xec"
- "\xfb\xc7\xcd\x9b\x3a\x73\x3a\x3d\xb8\xe0\xf6\xec\xdb\x6f\xa7\x29"
- "\xd3\x67\xdd\x96\x9d\xad\x5f\x6f\xcb\xe6\x2c\x8f\xe6\x4c\x9f\x3f"
- "\x6e\xde\x9a\xd5\x25\xab\xc7\xcd\x99\x39\x95\x53\xa0\xdd\xe2\x78"
- "\xc8\x15\xbb\xa8\x31\xad\xc3\xe2\xdc\x0c\xd2\xa0\x3b\x1a\xc0\x03"
- "\xf8\x75\xfa\xcb\x4e\x42\x07\xd8\x9f\x69\xe0\xbe\x93\x63\x80\xf5"
- "\x30\xe4\xde\xdc\xed\xb5\x95\x82\x86\xc5\x4c\x43\xe7\x4d\xac\x27"
- "\xae\x7f\x17\xef\x3e\xd0\xc7\x9a\x01\x78\x5f\x9f\xf8\x7e\x18\xf8"
- "\xdf\xfa\x7f\xb7\x3a\x89\x02\xf8\x81\xee\x61\xe8\x42\xd0\x37\x44"
- "\x5d\x9e\xbc\x01\xe0\xef\x34\xd4\xd1\x0e\xd9\x3c\x86\xb2\x6d\x71"
- "\x32\xdf\x8e\xfe\x39\xc6\xe3\xca\x59\xb2\xbd\xd5\x5a\x92\x4b\xdc"
- "\x4f\x81\x12\x1d\xc6\x85\x5e\x18\x83\x25\x0c\xf4\x3d\xe0\x1c\x57"
- "\x70\xec\xce\x38\xfd\x10\x64\x38\x3b\xf0\x4e\x87\x75\xa1\x15\x7a"
- "\x02\x7a\xfc\x77\x9a\xc7\x45\x22\xd3\x7a\x54\xeb\x71\xc9\xb1\x12"
- "\xe5\xf2\xe2\xf8\x3a\xdc\xe4\x46\xbe\xd7\x67\xa4\x81\x0f\xd2\x30"
- "\xfe\xa2\x2d\xb6\x65\xe0\xef\x70\xac\xc6\x69\x17\xe7\xf2\xd8\x8e"
- "\x18\x78\x8a\x32\xff\x80\xf6\x35\x6b\x35\x4e\x9b\xe8\x96\x69\x4c"
- "\xb7\x43\x82\x9f\x33\x91\xaf\xa7\x37\xed\x5d\x4e\x03\x1f\xa4\xb3"
- "\xbc\x0a\x21\xd3\x31\x66\x66\x6e\x80\x4e\x6b\x43\x5e\x1b\xe7\x9d"
- "\x10\xa5\x41\xd0\x35\x0e\xa7\x27\x8d\x4e\x52\x26\x69\x99\xce\xcc"
- "\xb8\xfa\x00\x27\x93\x07\x29\xe6\x47\x73\xf7\x39\xc0\xe9\x92\xe9"
- "\xb0\x63\x32\x17\x01\xfe\x30\xd6\x95\x4a\x7f\x5f\xff\x9f\x9c\x4f"
- "\x1f\x9b\xfb\x9e\x21\xeb\x0a\xce\xf5\xff\x79\x04\xb4\x64\x7b\x81"
- "\xed\xbf\x6e\x6f\xe6\x82\x20\x0d\x09\xa9\xb1\xf1\xfa\x36\xce\xab"
- "\x01\x47\x61\x7b\xcd\x02\xb8\x59\xfe\x8d\x9d\x74\xaa\x98\xc7\xda"
- "\x4c\x9b\xe6\x29\xa4\x44\x9c\xec\xcd\x8c\x3f\xeb\x0f\xd0\xe2\x4f"
- "\xe0\x83\x6b\x00\x6f\x6f\x22\x1f\x64\xfa\x01\xc7\x0e\xfc\xda\xd0"
- "\x26\x7b\x90\xec\x47\xb5\xae\x42\xd4\x4b\x26\xc8\x15\xf4\x79\x1f"
- "\x0c\xbd\x7c\x7b\x62\x79\x7b\x25\x97\x43\xfe\x01\xdd\x5d\x32\xff"
- "\x36\xa6\xb9\xce\x77\xe0\xcb\x61\x59\x49\x7c\xb9\x1b\xb8\xfc\x25"
- "\xee\xfd\xc4\xa4\xf7\x5b\xf0\xfe\x6f\xfa\x7b\xc8\xfd\xb0\x05\x49"
- "\x7c\x5b\x8c\xf7\x7f\x07\xbe\x61\xc8\x35\x6c\x0b\xfb\x0c\xf0\x58"
- "\x28\x2e\xff\xd6\xa4\xfc\x7b\x90\xff\xbf\x98\x6f\x78\xcc\xe1\xfc"
- "\x8d\xba\xec\x20\xbf\x05\xf9\x0f\x26\xd5\xbf\x14\xf9\xc3\x71\xf8"
- "\x1d\x4f\x7c\x9f\x55\x8f\xf7\x9f\x32\xaf\xc3\x26\x1a\x80\x3c\x83"
- "\x58\x97\xb0\x1e\x3b\x52\xc4\xfd\x95\x65\x4e\xca\x3f\x0a\xf9\x32"
- "\x74\x1a\x99\x74\x1a\xcd\xe0\x7e\x44\x1d\x27\x14\x0e\x59\x39\x49"
- "\x65\xf2\x50\x26\x0b\x74\xb4\x1b\x7c\x99\xa2\x4c\x51\x52\x99\x6d"
- "\xdc\x8f\x42\xd5\x63\xee\xee\xe9\x2b\xa3\xeb\xc8\x78\x18\xdc\xb6"
- "\x6b\x01\xe3\x40\x22\x8c\xe1\x1d\xa8\x77\xc4\x76\xa5\x77\xae\x05"
- "\x0f\xdd\x8e\xb4\xff\x04\xcc\xeb\x58\x06\x20\xab\xe1\x40\x28\x42"
- "\xc2\x33\x23\x43\xf1\xee\x75\xf6\xa1\x51\xe2\xfb\x71\x7c\xcf\xb0"
- "\x45\xf7\x2c\x5d\x26\xaf\xb3\xe3\x8a\xf4\x2c\xb6\xdf\xd2\x58\x07"
- "\x8b\xee\x6f\x69\x0a\xe6\x75\x77\x08\x13\x99\xf0\x1c\xd3\xeb\xf8"
- "\x03\x9e\xd3\x80\x7f\x26\xc6\x1c\x12\xeb\x91\x6f\x23\x4d\x45\xfa"
- "\x07\x52\x56\x55\x3e\xf9\xac\xea\x98\xc1\xfc\x3d\x11\xcf\xef\xea"
- "\xe5\xdf\x62\x78\xb8\xbf\x4d\xbf\x4f\x8b\x31\xac\x73\x86\x0c\x0e"
- "\xff\x91\x2c\x07\x39\x94\xf0\x51\x5e\xac\x97\xef\x18\xe6\x4b\xb8"
- "\xce\xc4\x75\x0b\xae\x0f\xe2\xba\xc8\xf3\x29\x39\x3c\x31\x29\x8f"
- "\xfc\x3c\x13\xd7\x87\x70\xbd\x03\xd7\xf9\xb8\x8e\xc4\xf5\x5e\xb4"
- "\x21\xc6\x72\x81\x71\x94\xe7\x58\x61\x8c\xab\x8a\xb7\x78\x0e\xd0"
- "\x3d\x83\x69\x30\x1d\x79\x3a\xa4\xbc\x2a\xfd\x62\x51\xfd\x78\x5d"
- "\xa7\x4c\xcb\x94\x69\x83\x14\x3f\xa8\xb4\x98\xa1\x87\xce\xf5\xa5"
- "\xe9\xba\x49\x97\x45\x3d\x4d\xc1\x9f\x07\xf8\x7e\xc6\x55\x28\x58"
- "\x03\x54\x9f\xeb\xf0\x55\x39\x73\x8a\x3a\xd3\xe2\xeb\xc4\xb5\xd6"
- "\xe3\x16\x02\xd7\x72\xee\xa3\x20\x0d\x3f\x20\x24\xdf\x63\x8c\x55"
- "\xf0\xf2\xf5\x7c\x13\x99\xc6\xb2\xbc\x4c\xcf\x3a\x16\xc7\x4b\x99"
- "\xdd\xde\xe1\xd1\x24\x39\xca\x06\x2f\x8d\x67\x9e\x61\xba\x73\xdb"
- "\x86\x16\xcb\x71\x5c\xb6\x45\xc2\x3f\xa7\x78\xb2\x41\x9f\xb7\x2a"
- "\xf9\xbd\x7e\x5a\x92\x7e\x91\x3c\x9b\x24\xef\x9d\x4c\xf3\xf4\x52"
- "\x96\x83\xeb\x31\xff\x7b\x73\x84\xb4\x19\x6b\x9c\xc3\xf9\x7d\x18"
- "\x7d\xcc\xf5\xa6\x17\x73\x3b\xae\xaf\x35\xde\xcb\x77\xf6\xfc\x25"
- "\xcc\xdf\xe9\x45\xf2\xdd\x01\x8c\x47\x87\x8c\x77\x46\x3d\xe9\x25"
- "\xf2\x5d\x73\x1f\x5c\x6b\x87\x0e\x37\x3d\x95\xcd\x27\x7c\xd6\xb6"
- "\x71\x44\xa6\x5b\xcb\x69\x40\x20\x7a\x9c\xe6\x46\x45\x6c\x5c\x39"
- "\x5d\x13\x88\xee\xa7\x5b\x88\xec\x81\xe8\x09\xba\x95\x68\x64\x20"
- "\x5a\x0b\x1b\x64\x2f\xbf\x7f\xff\x66\x4a\x4b\xc3\xd5\x33\xa6\xdc"
- "\x94\x16\x88\x96\xd0\xa8\x72\x33\xae\x45\x74\xdf\x00\xd1\x1d\x88"
- "\xce\x42\xbe\x65\x34\x37\x26\xce\x4d\x1b\x20\xfe\x5a\x10\x23\xdb"
- "\xac\x67\x85\x27\x10\xc5\x7c\x20\xda\x8c\x74\x4d\xcc\x8d\x7d\x8a"
- "\x5f\xb7\xd0\x7c\xd6\x8e\xb9\xb1\x73\x62\xea\xb3\xef\xe3\xf9\xaf"
- "\x02\x7d\x24\x02\xd1\x49\xd4\x1a\x0e\x23\x9f\x47\x88\x6a\x6b\xdb"
- "\xe2\x0b\x26\xea\x81\x0d\xa1\x55\x5b\x3b\xd0\x96\x48\x0f\xda\x81"
- "\xf1\xb5\xbb\x67\x13\xae\x35\xd6\x8b\xf2\xd9\x67\xb3\x08\x9b\x35"
- "\x32\x1e\x93\x2b\x6e\x43\x20\xda\x4e\x05\x98\x1e\xcc\xdd\x10\x12"
- "\x8c\xff\xd0\x2d\x3c\xb7\x9a\x44\xe8\x03\xeb\xdc\x0d\x1e\x81\x77"
- "\x16\x61\xb7\x46\x02\xd1\x4e\x12\xd5\x28\x9b\x69\x1b\x20\xe1\xf9"
- "\x6c\x2e\xe4\x0d\x71\xbe\x78\x38\x0c\x83\xf3\xce\x8d\x91\x15\xf9"
- "\x5d\x3d\x76\x9b\x03\xbf\x1c\xfc\x0a\x51\x76\xa3\xf0\x66\x7d\x20"
- "\x30\xde\xa3\x7c\x25\x9e\xeb\x22\x90\x61\x49\xcb\x18\x0d\x42\xfe"
- "\x4a\xf0\xcb\x34\xf0\x1d\xf0\xb5\x1d\x92\xf8\xd6\xd8\xde\x89\xc8"
- "\x76\xd8\x7e\xa9\xda\x61\x7b\x9b\xd3\xbb\x60\xeb\xe0\xbe\xad\x4b"
- "\xbd\xfb\x0f\x94\x5b\x20\xcb\xf9\x6c\x6d\xc2\x66\xeb\x88\x40\xbe"
- "\x40\xd7\x72\xa6\x23\xe8\x5a\xce\xb4\x04\xfc\xb6\x80\x7b\x1b\x09"
- "\xbb\xad\x03\xf8\x44\x44\x8d\x7d\x70\x8f\xb4\x41\xec\x8e\x88\x84"
- "\x6d\xbf\x1e\x70\xf2\xc1\xb7\xe9\xc2\x66\x77\x08\x9f\xdd\xd5\xe3"
- "\x75\xd2\xdc\x0d\x22\x32\x37\xba\x25\x5a\xb0\x81\xd2\xc7\x52\x39"
- "\xf0\x7d\x0f\x34\x5a\x86\x76\x36\xe1\x3a\x0d\xef\x69\x18\xea\x7a"
- "\x5f\xd8\xed\x0e\xae\x4f\x54\xdb\x5d\x80\x39\x1a\xb0\x96\x31\x4e"
- "\x9f\x7a\x09\xb6\x88\x3d\xe7\x53\x89\x9f\x3d\x4f\xf3\xd9\xdd\x9a"
- "\xcd\x5e\x68\xf0\x10\xf3\x8f\xa2\x5b\x2d\xcd\x09\x8b\x68\x20\xba"
- "\x9b\xc0\x63\xb6\xd6\xf0\x09\x7e\x8f\xf9\xcf\x7e\xf4\x33\xf3\x54"
- "\x09\xae\x7b\x89\xf9\xa7\xb5\xf8\x59\xce\xfb\x3e\xf3\xd0\x9c\xe2"
- "\xf0\x96\x71\x54\x9c\x86\x67\x4f\x41\xd4\x42\x8b\x8b\xcd\xe5\x31"
- "\x9f\x7d\x46\x6b\x31\xf7\xcb\x71\x94\xe1\x72\x45\x64\x4d\xc3\x1c"
- "\x20\x4d\x44\xad\xee\x90\x79\x48\xa1\x47\xb4\x86\x67\x21\x6f\x31"
- "\x71\x7b\x98\x8f\x38\xff\xec\x4e\x11\x8c\xd9\xec\x11\x6e\x9b\x18"
- "\x5a\x4e\x2d\x9d\x77\x10\xcf\xc3\x5a\x3a\xf7\x32\x9f\x6a\xa0\xcb"
- "\x51\xf0\x68\xcf\xec\xce\xf2\x01\x8b\x2f\x50\x1a\xd2\x62\x2d\x85"
- "\xfb\xf1\xbe\x09\xf9\x9a\x25\xdf\xce\xb9\x10\xb5\x46\x6d\xf6\x9c"
- "\xa8\xcf\xde\x36\xe7\x42\x8f\x68\x29\xac\xa5\x45\x9d\xe5\xa0\xd5"
- "\x7e\x9a\x7d\x26\x9a\xde\x5a\xbc\x0c\x79\xba\x91\xbe\x57\xf2\xff"
- "\xec\x33\x5d\x62\xce\xd3\xe2\xdc\x9c\x0b\x7f\x15\xb3\x0b\xc5\xfb"
- "\x05\x6e\x1a\x7a\xed\x16\xa1\xb1\x5c\x34\xb7\xef\xa7\x6b\x4f\x04"
- "\x89\x65\x62\xd6\x52\x4d\xcc\x3e\x73\x4e\x2c\x7e\x9a\x69\x33\x89"
- "\x5a\x0a\x21\x3f\xee\x5a\xa6\x77\x5e\x4b\xe1\x61\xd4\x3f\x0d\x70"
- "\x3d\x22\xe0\xde\x8d\xbc\x7e\xeb\xa2\x33\x36\x6a\x6e\xaf\xa5\xa8"
- "\xdd\x9e\x13\xab\xb6\xcf\xd0\xec\xf6\x42\xad\xda\xee\x46\x3f\x1d"
- "\x8d\x56\xdb\xdb\x62\x76\x3b\x78\x20\x73\x06\xfa\xe9\x1a\xee\xf3"
- "\x4b\x5e\x72\xe2\xf9\xbe\x4b\xdc\xff\xbe\xcc\x3c\x61\xcb\x74\xc3"
- "\xe6\x15\x8a\xf7\x33\xf3\x78\x6d\x41\xd8\x33\xdd\x3d\xf6\xcc\x42"
- "\xe4\x73\x2b\xf9\xca\xac\x64\xbe\x44\x3e\x13\xd2\xbe\x87\x79\x4f"
- "\x3a\xde\xd7\xe1\xb7\x0f\x3f\xd8\xa1\xc3\xa0\xbb\xc8\x2e\x79\xca"
- "\x37\xcc\x22\xee\xf6\xc1\x86\xbe\x00\x38\xc3\x5c\x73\x63\xf7\x08"
- "\xd0\x10\x72\x32\xcc\xa2\x55\x0f\x83\x7e\x1f\x36\x23\x22\x79\x7f"
- "\xd8\xfd\x0c\xbb\x67\x93\x8b\xd7\x1c\xcc\x78\x9f\x87\xb4\xdf\x45"
- "\x98\x57\x6d\xc3\x8e\x6a\xb6\x2c\x17\x60\xb5\x7d\xeb\x59\x11\x8a"
- "\xf9\x86\x45\x34\xdf\xb0\x8e\xe8\x40\xd8\xe6\xee\xc3\xc4\xfa\x29"
- "\xfa\x6b\x01\x1a\x7c\x08\x7a\xec\x95\xfd\x1f\x70\x43\x06\x36\xdc"
- "\x50\xde\xd2\x09\x5e\x28\xfe\xa9\xd4\x4d\xad\xe1\xe3\x92\xa6\xc0"
- "\xe3\x28\xf3\x14\xf7\xef\xe2\x62\x2a\x47\x5d\x6d\xc0\xa5\x23\x56"
- "\x0d\xb8\x76\xd4\x93\x39\xfc\x89\x88\x94\xd7\xe1\xe0\xd7\xc3\x28"
- "\xf3\x21\x29\x1e\x1f\x5e\xd8\x9f\x8e\x64\x5d\xc5\xfa\x69\x6e\x34"
- "\xc2\x3c\xf3\x77\xd6\x6b\x4a\x4f\x51\x81\xa1\xa7\x58\x47\xf1\x7c"
- "\x87\xf5\x94\xa6\xeb\x29\x4d\xd7\x53\xf2\xd9\x66\x63\x58\x11\xd6"
- "\x47\x73\xdd\x4a\xcf\xcc\x8d\x65\x0b\xf0\x46\x06\x60\x44\x54\x5f"
- "\x20\x4f\x8d\x6d\x80\xcc\x2f\xe9\x64\x73\x69\xd0\x37\xf8\xe5\x68"
- "\x4a\xdf\xb8\x75\x7d\x63\x32\xf4\x4d\x0c\xe3\x1a\x64\x4a\x4b\xa5"
- "\x6f\x34\x5d\xdf\xc4\x84\xd2\x37\x9a\xae\x6f\x38\x3d\xa6\xeb\x9b"
- "\x58\x0a\x7d\xa3\xf9\x6c\xdc\xde\x74\x5d\xcf\x94\xb3\x9e\xe1\xf6"
- "\x6a\xd5\xb6\x0e\x4d\xe9\x19\x0b\xe6\x3a\x26\xd6\x33\x31\x94\xd1"
- "\x0c\x3d\xd3\x2d\xf5\x81\x8b\x75\x4d\xcf\x73\x04\xfd\xe9\x24\xd6"
- "\x31\x52\x9f\x44\x47\x46\x59\x9f\x80\x7e\xf7\x24\xeb\x13\xc0\xcb"
- "\xc1\xbd\x4d\xd7\x53\x85\x98\xe9\x46\xa1\x4f\x66\xcc\x75\x87\xd1"
- "\xd7\x1f\x61\xee\x0f\xbd\xed\x2e\x29\x0f\xb8\xa3\x04\x3d\xe0\x16"
- "\xad\xe5\x04\x9d\x03\xfe\x8d\x41\x57\x10\x41\x2e\x8f\x42\x3e\x23"
- "\xa8\xbb\xad\xb5\xf8\x4f\x04\x79\xcf\x99\xdd\xd9\x15\x58\x1c\x76"
- "\xd9\x66\x9f\x11\x21\xd0\x27\xb8\xb8\xb8\x1c\xfa\xc5\x15\x6a\xe9"
- "\x7c\x8f\x66\xb5\x0b\x6d\xd6\x92\xa0\x13\x78\xb4\xcd\x5e\xe9\xb7"
- "\x2e\x7e\xda\x06\x39\x13\x7e\xe8\xc5\xff\x67\xf6\x19\x9b\x35\xbf"
- "\x9d\xbe\x34\x6b\xa9\xd0\x20\x4f\xa0\x3b\xe4\x0c\xf2\x08\xdc\x0b"
- "\x21\x73\x6e\xc8\xd9\xd1\x68\x92\x9c\x41\x66\xee\xc3\xbd\x53\xd1"
- "\x2f\xd3\x0d\x39\xcb\xd3\xe4\x78\xd6\x2e\xe7\x98\x90\x35\x37\xaf"
- "\xc5\x41\xd6\xf2\xb4\x6a\x25\x6b\x9a\x2a\x57\xa9\x31\xfd\x4c\xba"
- "\xac\xa1\x2f\xf0\xbe\x0e\xbf\x7d\xf8\xa5\x96\xb5\xe2\x38\x59\x7b"
- "\x5a\x97\x35\xbb\x92\x35\xf4\x69\x7a\x6c\x93\x92\x37\x86\xcf\xf3"
- "\xd0\x5e\x79\xcb\x1c\x76\x14\xf7\x69\x8a\x77\x58\xe6\x86\x61\x5c"
- "\x19\x16\x81\xbc\x75\x68\xbe\x2c\xc0\x13\x21\xd6\x9b\xe0\xcd\xbf"
- "\xf0\x58\x37\xa7\x58\xfc\xa5\x20\x76\x43\x39\xea\x8a\x40\x97\xfd"
- "\x15\x7a\xf4\x2f\x8b\xc3\xb4\x07\xb0\x8e\xa2\xbe\x36\xc8\x53\x87"
- "\x56\x2d\xe5\xa9\x30\xb6\x89\x61\x0e\x2f\xec\x85\x21\xc7\xca\x44"
- "\x79\xea\x6f\x1d\xb4\xdb\xeb\x2c\x0d\xd2\xaf\xa4\xdd\x84\xfb\xca"
- "\x20\x1d\x9e\xa6\xdf\xc3\xfe\xd9\xe3\x90\x76\x0c\x64\xb0\xb8\x8c"
- "\xae\x3b\x4d\x23\x67\x80\xdf\x09\xf7\x19\xb8\x9f\x35\xf7\x96\xf7"
- "\x61\x47\x54\xe6\xa0\xde\x6e\x96\x43\xe1\x9d\xc8\xf6\x59\x2e\xf8"
- "\xd0\x22\xba\x5d\x19\xb0\x2f\x1b\x44\x8f\x83\xd7\xda\xac\x78\x1e"
- "\x8a\xf6\x8f\xc2\x35\x73\xf7\x45\xca\xc2\xcf\xb1\xdb\xab\x95\xb3"
- "\xed\x84\xfb\x6c\xb1\xde\x31\x78\xc7\x3a\x1a\x6b\x0d\x93\xa5\xd1"
- "\xab\xe5\x59\xb7\xd8\x78\xcd\x29\x8b\xef\x85\x77\xef\xa4\xc6\x8b"
- "\x64\xe6\x75\x01\xcd\x8e\xfa\xdc\x56\x21\xd6\xba\xa8\x71\x0d\xf4"
- "\x83\x97\x1c\x8d\x5e\x71\x20\xd6\xcd\x34\xb0\xb6\x19\xb8\x30\x6e"
- "\xc0\xf3\x46\xe0\x99\xff\xf0\x86\x5c\xfa\xd0\x4d\x29\xd7\x6a\xbb"
- "\xbd\x23\x7b\xdb\xdf\xcf\xfb\x7a\x83\x26\xfd\xbc\x3f\x6c\xd0\xa9"
- "\x9f\x75\x3d\x33\x8f\xd1\xb1\x75\x22\x54\xf5\x04\x31\x2d\x1c\x9e"
- "\xa8\xf8\x1b\xe8\x58\x5e\x16\xa3\x1b\xe7\x6e\xf8\xb2\x08\x74\x0a"
- "\x7f\xc0\x7d\x86\x1a\xf1\xbe\xac\x54\x68\x9a\xdd\x09\x99\x77\x96"
- "\x76\xad\x13\x51\x5e\xcb\xe9\xf6\xde\xe4\x0c\xd2\x37\xfd\xaa\x2f"
- "\xec\x79\x72\x0e\x69\x73\x96\x02\x96\x9d\x61\xb5\xa0\x7c\xac\xda"
- "\xb9\x15\xf9\x66\x04\xe9\xb7\x79\x32\x9f\xcd\x9e\x57\xbc\x91\xbe"
- "\x78\x9a\x6e\x92\x34\x16\x3e\x67\x2d\xeb\x03\xa4\xd9\x90\xb6\x0d"
- "\xf0\xeb\x90\xdf\x1d\xa4\xb7\x6b\x95\x1d\x7b\xd3\x36\x23\x1f\xee"
- "\x97\xf0\x7d\x02\xff\xa4\xc9\xc5\x74\xc0\x72\xf6\x6d\x56\xa5\xe9"
- "\xcb\xeb\xc6\x9f\x0d\xbf\xdc\xd4\xaf\xfb\xf4\xb9\xbd\x0d\xb6\x16"
- "\x79\x36\xd3\x08\xf4\x0f\xf0\xfb\x4a\x1a\xe6\x11\xa7\x84\xf7\xa6"
- "\xba\xd7\x37\x46\x30\x4f\xf8\x4a\x46\x90\x5e\x68\xea\x8f\x9e\x82"
- "\x6d\x9d\x8b\xa2\xa3\x6a\x5d\x2f\x2d\x3f\x9e\xbb\x41\x13\x7c\xcf"
- "\xfa\xa8\x11\xe9\x4c\x37\xc0\x59\x60\xd0\xac\xff\x7e\x71\xfa\xd4"
- "\x9c\xf3\x2b\x07\x85\x57\x90\xff\x4b\xbc\xc7\xf4\x95\xb7\x15\x1d"
- "\x32\x0b\xbb\xa0\x47\x78\x9d\x18\x73\xb3\xf0\x5a\x87\x88\x00\xe6"
- "\xbe\x20\x8d\x35\xd6\x58\xc3\x81\xe8\x74\xd6\x2d\x29\xc7\x2d\xde"
- "\x13\xeb\x83\x3f\xea\x78\xeb\x08\xe8\x21\xa9\x9b\xf2\xf7\x96\x29"
- "\xbc\x23\x0c\xd7\x5f\x76\x9e\xda\xf1\x7e\x6d\x58\x74\x08\x5f\x7e"
- "\x1d\xcf\x23\xfc\xeb\x2e\x71\xda\x9f\xc0\xdb\xc2\xbf\x86\x71\x1a"
- "\xf5\x27\xff\x97\x2e\xd1\x29\x37\xa5\x37\xf6\xae\xff\x8c\xf2\xf3"
- "\x7a\x8f\x5a\xe7\x1a\x95\x1b\xa4\x71\x11\x03\x2f\xb6\x31\x40\x5f"
- "\x0b\xdb\x1c\x6c\x6b\xf0\xde\xc3\xda\x52\x11\x61\x9b\x03\x79\x8b"
- "\x8c\x36\x70\xfb\x54\xbb\x46\x95\xc7\xb7\x8b\xf7\xa8\xac\xa5\x8a"
- "\x06\x6b\x37\x90\xc5\xa9\x68\x6d\xe1\xf6\x72\x5b\xb8\xcd\xb2\x2d"
- "\x52\xc7\x62\x8c\x88\xde\x81\xf9\x98\x4c\x77\x03\x16\xe6\x3f\x63"
- "\x75\x9e\x1a\x95\x9b\xcc\x47\xbd\xfd\x68\xb3\xbb\x30\x07\xfd\x92"
- "\x47\x13\x27\x4f\xd1\xe8\x47\xd4\xda\xd9\xe8\x47\x34\xb6\xb3\x23"
- "\xcc\xbf\x63\xdc\x3c\x26\x07\x4a\x59\xdf\xca\xbc\xc3\x90\xb7\x1d"
- "\x79\x66\xea\x79\x67\xaa\x3d\x3b\x79\x1d\xc4\x57\x8c\x63\xa3\x83"
- "\x34\x7a\x49\x48\x8e\xf7\xf9\x4b\x8c\x67\xcc\xdd\x31\xff\x1b\xed"
- "\x10\xd5\x63\xdc\xa9\x71\xc9\x72\xf1\x78\x16\xbb\x28\x3a\x51\xcf"
- "\xf5\xcc\x53\x9e\x0d\xf4\x05\xf0\xe5\xc7\x65\x9b\x69\x18\xf3\x93"
- "\xb0\x3b\xeb\x15\xdd\x47\xef\x17\x5e\xd8\x9e\xd0\xa8\xc5\xeb\xe8"
- "\x8b\x90\xa3\xda\xd3\x34\xfa\x83\x82\x52\x27\x70\x25\xaa\x3a\x4b"
- "\x24\x75\x90\xdd\x59\x17\x88\x7e\x42\x8d\x67\x79\x6d\x67\x74\xd0"
- "\xe0\x45\xdc\x77\x5e\x49\x5f\x80\xae\xfb\xd4\xda\xc3\x98\x47\x78"
- "\x9f\xe1\x24\x8d\x99\xc6\xed\x55\x7b\x9c\x63\xee\x10\x17\x45\xbe"
- "\x50\x63\x5a\x5d\x90\xc6\x14\xe3\xba\x4f\xfe\xbc\xb4\x44\x7f\xae"
- "\x43\xbe\x51\xe2\xa2\xc6\x79\xc0\xaf\x63\x26\x09\x6f\x1a\xcb\xc4"
- "\xe1\x6e\xef\x98\xc2\x20\xdd\xdd\xa6\xfa\x66\xcc\x44\x86\xd5\x0f"
- "\x0e\x75\xe8\x5b\x62\xde\x04\xac\x3f\x38\xcb\x78\xed\x72\xcc\x1b"
- "\x52\x2e\x00\xab\xd1\xa4\xf4\xb6\x06\x5c\x1b\xbc\x5a\x21\x74\x74"
- "\xa1\x56\xe3\x8a\xc8\x7b\xfd\x9d\xd0\xc7\xd1\xd4\xf0\xf3\xf7\xfa"
- "\x6f\x60\x1e\xbf\x79\xac\x82\x93\x5f\xe7\xbf\xe1\x34\x3f\x8f\xe3"
- "\xe7\xb0\xed\x96\x48\xa0\x2e\x17\xf5\x9f\x46\xbd\x37\x8f\x55\xf3"
- "\xf9\x9b\xc7\x75\xa1\x8e\x6e\xef\xcd\x63\x83\x34\xc1\xac\xf6\x5c"
- "\x6e\x89\xf4\xb7\x97\xcc\xb2\xc3\x32\xa7\x64\xda\x75\xa6\x65\x8f"
- "\x94\xbf\x4a\xf0\xfc\x3e\x5d\x6f\xf0\x3a\x4d\xc6\x49\x72\x75\xb6"
- "\x38\x24\x7f\x9b\x84\xe9\xe6\x6d\x3f\xd3\x42\x26\xde\x17\x53\xea"
- "\xcb\xd5\x79\xf9\xef\x66\x3f\x7e\xc7\xf0\x3b\xa1\x3f\x77\xe0\x17"
- "\xc5\xfd\x2c\xfc\x4e\x48\xda\xed\x5a\x96\x16\xc4\xbb\x2e\xd8\xec"
- "\xfc\x1c\xa4\x9b\x8f\x8a\x5d\xa3\x4c\xb0\x4b\xe4\x7d\xe3\x17\x78"
- "\x9d\xe0\xe6\x30\xfa\xa0\x54\xf5\x85\x4b\xae\xa9\x00\x37\xa6\xbb"
- "\xf0\xd4\x89\x48\x53\x59\x98\xf1\x1e\xd5\x54\x17\x26\xe7\x18\x6e"
- "\xbf\xcb\xc5\x6d\x0a\x83\xfe\x7c\x5d\x5b\x27\x42\x47\xea\xa3\xc4"
- "\xfb\x73\xdd\x5e\x17\xe4\x7f\xe5\x2c\xb5\xe6\x90\xef\x67\x78\x3a"
- "\x4f\x08\xa3\xfd\x4a\xa7\xdd\x12\xe1\xbe\xc4\xf3\x33\x68\xbb\xf5"
- "\x2c\xb9\xde\x16\x99\xae\xc8\x91\x42\xa2\xdd\xd0\x23\x18\x6b\xe4"
- "\x5e\x41\xa3\xf4\x0f\x70\x61\x1c\x18\x73\xc2\xd8\x4f\xda\x8e\xf7"
- "\x3b\xf0\x0e\x63\x4f\xa8\xa5\x30\x42\x0c\x2b\xc6\xed\x43\xf9\xf7"
- "\xb4\x90\x19\x63\x35\xfa\xfc\x96\x48\x59\x31\xf4\x4c\xaf\xde\x72"
- "\xe5\x6f\x3e\x23\x22\x46\xfb\x8e\xec\x61\x59\x70\x81\xff\x9f\x2c"
- "\xec\x97\xff\x7b\x71\xbe\xf5\x9a\x23\xa3\x54\x9f\x69\xa0\x4b\x62"
- "\x9f\xdd\x6a\x51\xfd\x75\xcb\xa4\xc4\xfe\xba\x15\xb6\xcd\x2d\x5b"
- "\xf1\xab\xc7\x6f\xbf\x7a\x8e\xff\xdd\x52\x1c\x77\x7f\x18\x3f\xe8"
- "\xce\x5b\x30\xfe\x8f\x8e\xa8\x7e\xe0\x74\xb4\x83\x79\xe4\x9f\x64"
- "\xd1\x7a\xf2\x88\xf7\x6b\x39\x9d\xf9\x99\xd3\x35\xd8\x33\x41\xba"
- "\xc5\x87\xf7\x36\x96\xd5\x2a\x8d\x12\xde\x07\x50\xbb\x7f\x23\x74"
- "\x35\xdd\xf2\x31\xc3\xb2\x6e\xa9\xac\x64\x3e\x45\x99\x5a\x6b\xb4"
- "\x12\xf3\x83\x5b\x3a\x0d\xba\x22\xed\x38\xbf\x67\x9e\xec\xf6\xde"
- "\x6a\x06\x5d\xf6\xc9\xfd\x58\xcc\xf7\x52\xdb\x1a\xb7\xba\x7a\x6d"
- "\x32\xdb\x30\x0b\xeb\xa3\x4e\xfa\xea\x44\xe8\x2c\xf4\xad\x2b\xa4"
- "\xc6\x9a\xaf\xde\xc1\xcf\xd0\x95\x1f\xe3\x3e\xbb\x05\x3a\xe9\x52"
- "\x8d\x93\xd7\x71\x06\x5d\x32\x51\x6e\xb4\xa6\x32\x3f\x9a\xe9\xc8"
- "\x08\x74\x1c\xa4\xd6\xe8\xcf\xc9\xf9\x84\x84\x71\x4b\x00\x3c\xe0"
- "\xd9\x20\x62\x6f\x5e\xda\x67\x0e\x44\xcf\xf9\x31\x36\x7f\xf9\x34"
- "\x7d\x55\xd2\xe3\x85\x93\x18\xf5\x17\x4b\xd8\x3a\x7d\x2a\x73\x76"
- "\xac\x10\xd1\x1d\xa7\x44\x18\xf6\xdd\xe0\xed\x97\x68\xec\xce\x8d"
- "\x94\x5d\x7f\x89\x46\x35\x5c\x22\x97\xf8\xbb\xcb\x54\x0f\xbb\x6d"
- "\xf1\x05\x1b\x41\x27\xe4\x0d\x2d\x26\x4b\xc3\x46\x92\x3c\x12\xab"
- "\x86\xfd\x16\x85\xfd\x76\xce\xc5\xba\xb1\xd7\x7e\xeb\x91\x76\xf1"
- "\x48\x9d\x8f\x46\x9a\x87\x14\x52\x5a\xc6\x12\xb2\x01\x3f\xcf\x59"
- "\xba\x75\x65\x06\x06\x44\x6e\x73\x50\x6f\x2f\x68\x5e\x6a\x2d\xa4"
- "\x41\xb2\xad\xd0\xd7\xa2\xda\x15\xea\x77\x1c\x36\x31\x4f\x85\x59"
- "\x6e\xb8\x0d\x5b\x78\xcf\xf8\xe0\x0d\x11\xf3\xda\x7a\x11\xe1\xf4"
- "\x92\x91\x22\x82\xf4\x42\xae\xfb\x00\xd2\xbb\xbd\x5f\xf5\x05\xcd"
- "\xd7\x36\xf7\xc7\xa3\x98\x1f\xe9\x7a\x65\xac\x5d\x98\xca\xc1\xa3"
- "\xc3\x66\x6c\x8e\xc2\xf6\x3e\xcb\x32\x3b\xd6\x36\xb7\x48\x44\x9d"
- "\xab\x78\xff\x7e\x2c\xb1\x6f\x01\xef\x29\xfe\x0c\xb6\xcd\x67\xf9"
- "\x13\xf0\x78\xc1\x73\x05\x6b\x11\x60\xd6\x0c\x9b\x21\x30\x3f\xff"
- "\xbc\xfe\x0c\x68\x67\xc6\x8b\xc3\xd9\xcf\x66\xec\xac\x20\xcd\xda"
- "\xcb\xb8\x4b\x5f\x1a\xe8\x4e\xd8\x5b\xc3\x80\x57\x65\x18\x74\xc0"
- "\x7b\x8c\xff\x33\xdd\xfa\xfe\x6f\x88\xf7\x5e\x91\x86\xf1\xff\x81"
- "\xc3\x9c\x56\x32\x92\x1c\x25\x4e\xd1\xd1\x9f\xcd\xc4\x7b\xd2\x80"
- "\x87\xf9\xe6\xd8\x83\x06\x1c\x8c\x53\x3f\xee\x32\x3d\xfc\x30\xd2"
- "\x8e\x1a\x70\x90\xe7\x3a\x3c\xb7\xf5\xe6\x51\x65\x3a\xe2\xca\x3c"
- "\xdc\x65\xba\xf5\xc7\x48\x8b\x26\x96\x19\x97\x91\x58\x66\xdc\x88"
- "\xb8\x32\xe5\xaa\x9e\x71\xd9\x49\x65\x72\x93\xca\xcc\xbb\x1c\xb7"
- "\x71\xcb\x92\xca\x94\x24\x95\xd9\x7a\x39\x6e\xe3\xea\x92\xca\xec"
- "\x4b\x2a\x73\x28\x8e\x96\xec\x57\x93\x8d\xb4\xe6\xa4\x32\x27\x92"
- "\xca\x74\x1a\xcf\xfd\xd0\x38\x63\xed\x6e\x72\x80\x37\xd9\x77\x2b"
- "\xf4\x22\xfa\xa7\xeb\x95\x27\xbb\x55\xd9\xf1\xae\xcb\xdb\x35\x7e"
- "\x52\x62\x7d\xe3\x67\x25\xd6\x37\x3e\xff\xf2\x76\x8d\x2f\x4e\x2a"
- "\x53\x9e\x54\xc6\x17\x57\x66\x8f\x5e\xcf\xde\xa4\x32\x07\x93\xca"
- "\x34\x5d\xce\x57\xe3\xdb\x92\xca\x74\x24\x95\x89\x7c\x06\x2d\x78"
- "\x1c\x57\x7e\x6d\xc3\xd9\x56\xbe\x17\x36\xc2\x84\xa5\xec\x1b\xc1"
- "\xfb\xa0\xaf\x5f\x8a\x0c\xe0\xfd\x39\x1e\xaf\x8e\xb8\x23\x18\x5b"
- "\x26\x60\xfe\x33\xd1\x6f\x8c\x59\xec\x37\xc2\x32\xad\x6c\xec\x09"
- "\xae\xfe\x6c\x51\xe9\x7b\xa6\xfb\xaf\x71\x5d\x47\x46\xf0\x38\x35"
- "\xa1\xb6\xd7\x26\x56\x3e\x68\xa4\xc3\xf9\x87\xb1\x0f\xdb\xa8\xfc"
- "\x51\xd2\xd8\x26\x3f\xe2\x96\x65\x8e\xc6\xd9\xd1\x5c\x7f\xf8\xe0"
- "\xc6\x88\x39\x09\x8f\x7d\x57\xc0\x23\x03\xb6\x51\x65\x2b\x46\x2f"
- "\xde\x5f\x6f\xa9\x87\x0d\x04\xbb\x9f\x71\x3b\x49\xd9\xd9\xd2\x26"
- "\x5b\x75\x89\xf8\x3e\x50\x7a\x97\xdc\x7f\x57\x36\x69\x76\x61\x13"
- "\xea\x67\xdb\xbd\xa9\xf8\x3c\xfb\xa7\x60\xfc\x65\xdb\x2d\xfb\xa5"
- "\x23\xa5\x21\xe0\x95\xbd\xc4\xf0\x53\x09\x52\x76\xad\xb4\x35\x7c"
- "\xf9\xe5\xec\x1b\xc0\x3e\x34\x47\xc2\x39\x9c\x07\xfc\x3f\xa1\xc8"
- "\x68\x2f\xc6\xfa\x10\xf2\x4e\xba\x12\xcd\x54\x1f\x66\x1f\x4e\xe4"
- "\xc9\x01\xe0\x95\xec\x63\x89\xfd\x9e\x1d\x4c\xec\xf7\xec\x50\x22"
- "\x4f\x9a\xc0\x93\xb7\x99\x13\xcb\xdc\x96\x95\x58\xe6\xb6\x51\x71"
- "\x65\x7c\xaa\x9e\xdb\x72\x92\xca\xcc\x48\x2a\x93\x17\xf7\x8c\x36"
- "\xde\x56\xd8\x3b\xf7\x91\x3e\x50\xb7\xb9\xe3\x9e\x4d\xb5\x52\x7f"
- "\xde\xb6\xcd\x48\xe3\xb5\xa3\x86\x97\x95\x0f\x8e\x0e\x6f\x5f\x92"
- "\xbc\x73\xfe\xc3\x49\x38\x34\x27\xe1\xd0\x2b\xff\xfa\xde\xfd\x6f"
- "\x4e\xd1\xed\x07\xf5\xbd\xfb\x4e\x8c\xd9\x73\xf9\x19\xb0\xea\x90"
- "\x1f\x74\xb8\x3d\x23\x11\xde\xed\x23\x12\xe1\xdd\x3e\x36\xee\xd9"
- "\x86\xe7\x49\x71\x6d\xb0\xa5\x3b\x28\x0d\xfc\x02\xfb\xed\xf6\x05"
- "\x46\x3a\xcf\x29\x81\x6f\x87\x47\x8e\x35\xb9\xec\x5b\x96\x79\x92"
- "\x6e\x9f\xc2\xf3\x4f\x1d\x66\xbc\xfc\x93\x6a\xd7\xed\xb5\x49\x78"
- "\xec\x4d\xc2\xe3\x60\x5c\xbb\xc2\xd6\x2d\xf4\xa0\x35\xfa\xd0\x23"
- "\x6c\xfb\xb0\x3f\xa5\xf4\xf1\xda\x0c\x9b\xed\x02\xd9\xd8\xb7\xee"
- "\x54\x09\xa5\x07\xdc\x1d\x98\xcb\x8d\x4c\xb9\x0e\x23\xf9\x29\x33"
- "\xdf\xa7\x7c\xab\xc8\xd9\xed\xfd\x5a\x96\xc1\x8f\x5a\x4d\xbe\x4f"
- "\xab\xbe\xb9\x09\x69\xd0\x7f\xd9\x7b\x94\x9d\x7b\xb3\x4d\x78\xf2"
- "\xea\x40\x4f\xcc\x8b\x26\x5e\xa7\xcf\x23\xf6\xb2\x8f\x18\xfb\xb1"
- "\x62\x8c\xcf\x50\xfb\xf0\x5f\xcb\x8f\xe3\xeb\xb0\x73\xe3\x3d\xe2"
- "\x24\x4d\x1c\xc9\x36\x00\xcb\x28\xfb\x9a\x1d\x89\x86\x88\xe7\xde"
- "\x81\xe8\x69\x69\xbb\xe1\xbd\x53\x2f\x5b\x17\x57\x36\xa4\xcf\x8d"
- "\x3b\xf8\xdd\x84\x28\x99\x8f\x84\x43\x04\x38\x59\xca\xde\x9b\x38"
- "\xf2\x08\xe4\x15\x65\x9a\x8d\x32\x3c\x8f\x96\x7b\xbc\x25\x64\x1e"
- "\x5f\x4a\x66\xff\xc6\x93\x12\xb6\xe1\xb7\x01\x5b\xba\x33\x50\xda"
- "\x41\x81\x70\x1b\xaf\x75\x99\x95\x8f\xce\x44\x67\x7a\x84\x2c\x5d"
- "\xd5\xf9\xe8\x93\x89\xce\x58\x75\x7e\x25\x70\xdb\x13\xa4\xaf\x4d"
- "\x63\x7d\x13\x4f\xbb\xe9\xd3\xe7\x3d\x34\x77\xf6\xb8\xef\x3c\x34"
- "\x73\xc1\xf4\xbb\x9c\x0b\x56\x3e\xb5\x7c\xd9\xb8\xd5\xcf\x94\x38"
- "\xd7\xaf\x59\x59\xb2\x72\xd5\x77\x9d\xd9\xee\xd1\x6e\xe7\xd2\x12"
- "\x75\x75\x15\x2d\x5d\x5b\x32\x99\x6f\xc7\x3a\x8b\xd7\x2c\x5f\x27"
- "\x6f\x6f\x19\x4c\x89\x40\x56\x96\x2c\x5f\xe3\x1c\xbd\x6c\xac\xf3"
- "\xbe\xa5\x2b\x8b\x9e\x59\xb3\x3c\x25\xac\xbb\x9c\x6b\x96\xaf\x59"
- "\xbe\x74\x99\x73\xb2\x33\x9b\x21\xc7\x83\x8b\xeb\xcf\x6c\x63\x1c"
- "\xe3\xf1\xab\xca\x2b\x8e\xe9\xe3\x59\x50\xf1\xcf\xc4\xf0\xe5\x63"
- "\xd9\x1d\x96\x44\x9e\xbb\xc3\x91\xc8\x73\x77\xb8\x2e\x1f\xcb\xee"
- "\x48\x1a\xff\xee\x48\x1a\xff\xee\xc8\xbf\x7c\x2c\xbb\x23\x69\xfc"
- "\xbb\x23\x69\xfc\xbb\xa3\x77\xfc\x03\x2f\x49\x3f\x3a\xa4\x25\x8d"
- "\x7f\x77\x24\x8d\x7f\x77\x34\x25\x3d\x1f\x8f\x7b\x1e\x86\xe7\xf6"
- "\xf8\xf1\x11\xcf\x61\x43\x3e\xfb\xf4\xcb\xd7\x2d\x46\x1e\xd6\xf5"
- "\xd0\xcd\xed\x2a\xef\xd7\x9d\x71\x79\x3b\xf4\xbc\x13\x7b\xe5\x8f"
- "\xf7\xb5\x91\xae\xe6\xeb\x5f\x7f\x95\x75\x3a\xfb\xe3\xf1\xd8\x04"
- "\xf9\xf8\xf2\x59\xfa\xba\x9d\x61\x31\x0f\xb3\x7f\xa6\x78\x65\x61"
- "\x77\x63\x26\x59\xb8\x4c\x63\x0d\xfb\xf5\x4e\x1c\xcb\xbe\xba\x48"
- "\x63\xdf\x65\xe8\x94\xaf\xc3\xfe\xcd\xa8\x57\xe3\xc5\xd7\x83\xd2"
- "\xe6\x47\x19\x1d\xbe\x9c\xd7\x00\x0e\xfb\x02\x5b\xaa\xd4\x58\xdc"
- "\x8e\xfb\x0c\xe6\x69\x94\x37\x0b\xd3\xc4\xa7\xd9\x07\x1a\x69\x36"
- "\xfc\xb2\x00\x2f\x68\xc0\xdb\x3a\x3c\xb5\x6d\x99\x6c\xe7\xf6\xce"
- "\x07\x4d\x64\xad\xf2\x6a\x6d\x01\x8d\x6d\xeb\x6f\x64\xa9\xb5\x05"
- "\xa7\x53\x78\xdf\xcf\x6b\x44\x7a\xea\x79\xd2\x37\x60\xff\x7d\xc3"
- "\xa2\xd6\x5b\xbe\x81\xfe\x9f\x3d\x51\xad\x9d\x3a\x9d\xd0\xb7\x97"
- "\x00\xe7\x02\xae\x3d\xb8\xfe\xa7\x01\xdf\x2f\xe7\xdb\xdf\x28\x11"
- "\xde\xb4\xf9\x0c\x37\x29\x7d\x1b\xf4\xdb\x25\x6b\xb4\x3c\x2f\xc5"
- "\x3b\xcc\xb3\xd3\x1f\x4a\x91\xee\x87\xcd\x70\x09\x78\x84\x19\xdf"
- "\xb8\xf4\x36\xe1\x1d\xba\x80\xf3\x07\xb9\x3e\x94\xe9\xcf\xd6\x36"
- "\xfc\x6f\x95\x0f\x7f\xce\xa8\xa4\x76\x7c\x7a\x8a\x72\x5e\x53\xed"
- "\xc8\x89\x25\xd6\x9d\x33\x29\x75\x3b\x72\x16\xa0\x1d\x9f\xa6\x6e"
- "\x47\x4e\xb1\xa4\xad\x09\x6d\x31\x5d\xf6\x6e\x1b\xda\xf2\xa9\xa4"
- "\x7b\x62\xfa\x5e\xdd\x16\x0a\x63\x1e\x66\xc3\x3b\x59\x76\x7e\x69"
- "\x5f\xbf\xe9\xf9\x9a\xad\x75\x34\x2f\x45\x9d\xed\xc2\x3b\x68\x7e"
- "\x90\xee\x94\xe7\x1a\xe2\xd2\xa3\x0a\x17\xd0\xc9\xc4\x74\x42\x7b"
- "\x50\xae\xbf\xfe\x36\xe6\x25\x6a\x2d\xe4\x4e\xc8\x7f\x0e\x19\x6b"
- "\x99\x6b\x4b\x45\xc8\xa0\x23\xde\x15\x26\xbd\x8b\xc4\xbd\xdb\x9a"
- "\xf0\x6e\x73\x6f\x7a\xbd\x91\xfe\xf9\xfa\xe9\xce\xe6\xa4\x7e\x42"
- "\xff\xdc\xb5\x28\xb1\xdd\x77\x9e\x50\xed\x43\x1f\x5d\x46\xeb\x3b"
- "\x23\xe8\xa3\x9e\xd4\x7d\x74\x57\x56\x6a\x5e\xbb\x4b\xae\xa3\x89"
- "\x4c\x4a\x01\xef\xae\x19\xe8\xbb\x1e\xc9\x83\x7a\x3f\x5d\xde\x3f"
- "\x77\x15\x19\xfd\xf3\xf9\xda\x78\xd7\x81\xa4\x36\xc6\x4e\xd1\x37"
- "\xc7\xa9\xb6\x7e\x73\x73\x12\xec\xa3\xa9\x79\xf1\xae\x20\xda\x19"
- "\xeb\xa7\x9d\xd1\xfe\x79\xf1\x9b\x0e\xb4\x27\x76\x39\x2f\x7e\x33"
- "\x5b\x95\xa1\x54\x65\x66\x09\x6f\xaa\x7a\xbe\xb9\xcc\x13\x65\x3b"
- "\xf7\x9b\xf5\xbc\xbe\x14\x97\x5e\x9a\xc8\x7f\x68\x03\x97\x63\xfa"
- "\x45\x95\x9e\xe5\x7e\x38\xe5\x24\xd3\x67\xf1\x64\xb7\xf7\x9b\x27"
- "\x92\x68\x75\xee\x14\x4d\x5a\xd4\x65\x4a\xdb\xab\xe8\x35\x79\x64"
- "\x12\x4e\x91\xd4\xf4\x9a\x64\x03\xbd\xce\xa5\xa6\xd7\xa4\xb1\xfd"
- "\xd3\x6b\x12\xf7\xff\xb9\xcb\xe9\x35\x69\x49\x3c\xbd\x60\xeb\xca"
- "\xf6\x7d\xc5\x01\xde\xe8\x29\x10\x8d\xdc\xd6\x18\xd9\xac\xe0\x15"
- "\x55\xa6\x93\xcb\xd4\x5a\x23\x8a\x4f\x60\x43\x5a\xce\xd2\xa4\x52"
- "\x43\xfe\x87\xd6\xd1\x20\xd1\xb3\x90\xfd\x88\xd2\xb8\x5c\xc0\x7d"
- "\xce\x1f\x88\x66\x13\xcf\x3f\x92\xea\x6d\x4b\xad\x0b\x26\x85\x40"
- "\xd3\x9a\xcb\xd3\x27\x5b\x94\x1f\xd9\xe4\xdc\x44\x1d\x31\xd9\x99"
- "\xd8\x47\xa0\x1b\xca\xe9\xdb\x4e\x9f\xf9\xbb\x72\x9f\x4d\xf6\x5d"
- "\xde\x67\x77\xdf\xa6\xfa\xeb\x6e\x7b\x12\x7e\xfb\x52\xf7\xd7\x64"
- "\x7f\xff\xfd\x35\xf9\x44\xff\xfd\x35\x99\xd7\x4f\xcf\x05\xe9\xee"
- "\xec\xc4\x71\xe3\x6e\x5b\x62\x7b\x51\x2f\xca\x09\xd3\xc0\x61\xfc"
- "\xfc\x79\xdb\x6d\xfc\x58\xc7\x71\x5f\xf1\xb9\x22\xe0\x3f\x92\x71"
- "\xbc\x5a\x18\xfd\xc2\x06\x0d\x7d\x1b\x53\xef\xb7\xf2\x1c\xb7\xb5"
- "\x8e\x88\xf7\x91\x9d\x5f\x62\xdb\xfd\x9e\x01\x9a\x89\xda\x70\x6f"
- "\x3a\x45\xb9\x7f\xd0\x4c\xa6\x52\xde\xf3\x94\x7e\xeb\x72\x0d\xe1"
- "\x9e\x11\xf1\x7d\xc1\x7b\x9f\x3c\x37\xdd\xa1\xe6\x4e\x7f\x45\xf9"
- "\x37\x54\xbf\xe4\xbe\x95\x48\xc7\x7b\x72\x53\xf7\xcb\x3d\x79\xe8"
- "\x97\xbf\xa6\xee\x97\x7b\x4a\xfa\xef\x97\x7b\x7c\xe8\x97\xbf\x5e"
- "\x2e\x47\xf7\xec\xd3\xe5\xa8\x82\xcb\x38\x57\xf1\x7c\x3c\xf7\x0b"
- "\x9c\x07\xf7\x90\x91\x5c\x49\x93\x71\x9d\x86\x1c\xc9\x32\x27\x00"
- "\x4b\xd6\xaf\xf2\xdc\xd3\xa6\xc3\x88\x83\x9b\x4b\xd6\xce\x54\x72"
- "\x92\xeb\xe0\xbc\xe3\x8b\xc9\x02\x1a\xe6\xed\x66\x18\x6b\x88\x50"
- "\xcf\x53\x9c\x8f\xd3\xc7\x87\xe3\xe5\x24\x77\x86\x91\x8f\x75\x9d"
- "\x9e\x37\x57\x74\x17\x12\xe7\x4b\x82\xad\xb7\x7f\x90\x1c\x47\x38"
- "\x3f\xe7\x4b\xca\x53\xa7\xe4\x31\xf7\x44\xa2\x3c\xe6\x1e\x48\xe4"
- "\x4f\xd0\x1f\xe5\x34\xe8\x39\xdc\x9b\x81\xc3\xe7\xe6\xaf\x2b\xcb"
- "\xe6\x94\xb1\x49\xb2\x09\x1e\x98\xd2\xa2\x78\x60\xca\x4f\x13\x71"
- "\x9d\x32\x2d\x35\x0f\x4c\xc9\xef\x9f\x07\xa6\xb8\xfb\xe7\x81\x29"
- "\xb5\xcc\x03\x41\x9a\xd2\x9c\x28\x9b\x53\xf6\x27\xb6\x1d\xf5\x4a"
- "\xd9\x24\xfb\xd5\xc8\x26\x6c\xa1\x61\xfd\xc9\x21\xcb\x14\xfb\x8f"
- "\x34\x5e\x32\xf6\x3a\x3e\x17\xcd\x2c\x90\x2b\xe0\x77\xef\x12\x5e"
- "\x53\x82\x8e\xcf\x61\x1a\x36\xc8\xf3\x98\xf7\x96\xc4\xd3\x71\x87"
- "\x3a\x03\xe9\x41\xde\x4f\x79\x5f\x59\xd1\x73\xea\x07\x89\xed\xbf"
- "\xb7\x36\x35\x3d\xef\xdd\x0f\x7a\x7a\x52\xd3\xf3\xde\xa3\xfd\xd3"
- "\xf3\xde\x76\x3e\x23\x75\xb9\x4c\xdd\x1b\x75\xae\x93\x36\x8a\x2c"
- "\x73\x96\xa6\x3e\xfc\xf9\xc6\xa7\xa9\x13\x13\xc7\xa7\xa9\x23\xae"
- "\x7e\x7c\x9a\xea\x4e\x3d\x3e\x4d\xf5\xa5\x1e\x9f\xa6\xee\x53\xf2"
- "\x30\x35\x98\x28\x0f\x53\xfd\x89\x3c\x01\xda\xfd\xaf\x8d\x4f\xd3"
- "\xb2\x93\x64\xa0\xea\x14\x4d\x7b\x0b\x36\x45\xb9\xea\xb7\xe9\xcf"
- "\x24\xe2\x38\x6d\x56\xea\x7e\x9b\xb6\x0c\xfd\x56\x95\xba\xdf\xa6"
- "\x95\xf7\xdf\x6f\xd3\xea\xd1\x6f\x55\x97\xf7\xdb\xb4\x83\x57\x6f"
- "\x53\x4c\xeb\x48\xec\xb3\x69\xc7\xae\xbe\xcf\xa6\x8f\x4d\xdd\x67"
- "\xd3\xa7\xa5\xee\xb3\xe9\xba\x6f\xfa\xf4\xda\xc4\x3e\x9b\x5e\x92"
- "\xd8\x67\xa0\xdb\xff\xb0\xcf\xd0\x3f\xa3\x94\x7f\xc2\xf4\x0b\x98"
- "\xb7\x0f\xea\xf6\x4e\xef\x0c\xd2\x7d\x07\xd5\xdc\xfa\x3e\x35\x76"
- "\xa8\x3e\x7c\x13\x79\x82\x97\x8f\x03\xf7\x59\xf4\xb4\xef\x5c\xde"
- "\x0f\xf7\x8d\x82\x8e\xee\x6c\x2a\x95\x7b\x5b\xaa\x0f\x99\xe6\xc8"
- "\xe7\xdf\xc8\xfb\x53\xf7\x4d\xe3\xb2\xe8\x63\x11\x88\x44\x89\xf5"
- "\x3a\xf2\x87\x19\x0e\x9f\x0d\x4d\x82\x55\x7c\x35\x63\xfc\x15\x7c"
- "\x6a\x46\xf9\xcb\x6e\x07\xbc\xfb\x9f\x55\xbc\x7a\x5f\xb2\xfd\xdb"
- "\x88\x77\x8f\x28\x3e\x9d\x39\x3a\x09\x87\x70\x6a\x3e\xbd\x3f\x03"
- "\x6d\x68\x4c\xcd\xa7\xf7\xbb\xfa\xe7\xd3\xfb\xd1\xff\xd4\x18\x37"
- "\xf7\xc9\x5c\x1c\x0d\x26\xcd\x7d\xee\x2f\xb4\x86\x15\xef\x48\x9b"
- "\xa8\xda\x39\xaa\xdb\x7b\x7f\xb2\xfd\x87\xbe\x99\x31\x44\xc7\x79"
- "\x40\x52\xf9\x7e\xec\xbf\xfb\xd9\xfe\x7b\xb3\x1f\x9c\xaf\x60\xff"
- "\xdd\xcf\xf6\xdf\x9b\x97\xcb\xd6\x0c\xdd\xfe\x4b\x35\xc7\x9b\x31"
- "\x36\x75\xff\xcf\x48\xea\x7f\xca\x2b\xc1\x7c\x58\x96\x4f\xcc\x57"
- "\x14\x9f\x8f\x7d\x93\x38\x2f\xf3\x48\x8a\xbc\x75\xc9\x30\xfb\xc9"
- "\xe7\xbf\x8c\xf7\xd8\x97\x2a\x25\xef\xcd\xd0\xcf\x94\xcc\x9c\x96"
- "\x28\x8f\x33\xcd\x89\xf2\x78\xff\xbe\xc4\x72\x33\x47\x25\xbe\xbf"
- "\x2f\xfc\xbf\xa7\x63\x67\xd6\x26\xf1\xc0\xfb\xa7\xe8\x01\xbb\xe2"
- "\x81\x07\x56\x26\xe1\xb1\x3f\x35\x0f\xcc\x6c\x42\xfb\xdf\x4f\xcd"
- "\x03\x33\x83\xfd\xf3\xc0\xcc\x28\x68\xf9\x7e\x3c\xdf\xce\x2f\xcd"
- "\x1d\x94\x98\xe7\x01\x67\x6a\x9d\xf7\x40\x4e\xea\x35\x82\x07\xe6"
- "\x29\x1a\x3f\x50\x99\x48\xe3\x07\x0a\x13\x69\x88\xb6\xfc\xcf\x69"
- "\xd8\x1b\x0f\xa2\xdb\xfb\x40\xb2\xfc\x07\x4e\xd1\xb7\x74\xf9\x9f"
- "\xf5\x60\x12\x8e\x61\x85\x4b\xaa\x75\x91\x6f\xf1\xfc\x37\x90\x9a"
- "\x96\xdf\x1a\x9b\xba\xcd\xdf\x9a\x86\x31\x28\xa0\x5d\x26\x4b\xdf"
- "\xca\x47\xfa\x7c\x5e\x0f\xe5\xf5\x90\x06\xa4\xcf\x8f\x92\x45\x8e"
- "\x57\xbd\xe3\xd2\xb7\xca\xd9\x17\x85\xe9\xcf\xfc\x6b\x1d\x41\xf3"
- "\x78\x0c\x62\xbc\x0a\x4a\xa5\xdf\x82\x75\x2b\xf3\xfa\x4d\xcc\xeb"
- "\xdf\x92\xf6\x1f\xef\xb3\xb0\x1f\xa1\xd5\x4d\xf3\x38\x2e\x85\xc1"
- "\xef\x9c\x3f\x09\xf6\x09\x96\x0b\xce\x6f\xe4\x55\xeb\x66\xe5\x49"
- "\xba\x69\x96\x39\x75\x1f\xcf\x1a\xd1\x3f\xef\xcc\xca\x51\xfd\x3c"
- "\xab\x28\xb1\x9f\x67\xcd\xd3\xbc\x43\x17\x70\x5b\xc1\x03\x57\x25"
- "\x27\x25\x4e\xd1\x9f\x6f\x85\x59\x54\x2c\x64\xdf\xe0\x2f\x9d\xa6"
- "\x59\xc7\x65\x7d\x26\x11\xb1\x6e\x49\xa3\x26\xa9\x03\x66\xdf\x22"
- "\xf1\x44\x9e\x82\x28\x99\x44\xc5\x93\x6d\xfc\xae\xd1\x2b\x22\xc8"
- "\x77\x8c\xf7\x04\xf8\x6c\x35\x78\x61\xd8\x49\x9a\x75\x26\xa1\x3c"
- "\x24\x3f\xa0\x60\xb8\x1a\xa5\x3c\xce\x1e\x65\xac\xe9\x6e\xc5\x73"
- "\xea\x75\xdf\xd9\x33\x0c\xdf\x07\xe5\x33\x36\xbb\xdf\xfd\x4b\xc6"
- "\x89\xcf\xca\x30\x4e\x57\xd6\x03\xb3\xeb\x0d\xfe\x55\xbe\x96\xb3"
- "\xf7\xf7\xf9\xf2\xcd\x3e\x84\x77\x4b\xae\xb0\x36\x18\x27\x07\xb3"
- "\xdb\xe3\xe1\xa8\x98\x28\xb3\x23\x86\x3f\x5e\xb7\x77\x8e\xf9\x33"
- "\x60\xe9\xf8\xcc\x19\x9b\x88\xcf\x9c\x49\xb0\x53\xb2\x74\x18\x33"
- "\xae\x04\x83\xfb\x5c\xf1\x2c\xf3\xc3\x9c\x25\x57\x5a\xf3\x4b\x77"
- "\xd0\xbc\x17\x2f\xe3\xad\x39\xd2\x5e\x62\x18\x9f\x81\xe3\xb1\x84"
- "\xb9\x85\xdc\xbb\xe7\xbd\xad\xb9\xbb\x95\xdc\xcf\x4d\x5a\x23\x9c"
- "\xd3\x29\xfd\xa9\x74\xb9\x5f\x1c\x4d\x96\x83\xb9\x19\xc6\x18\x9d"
- "\x94\x3e\xca\x90\x7b\xcc\x6b\x19\x6e\xd2\x3a\xeb\xdc\x69\x4a\x16"
- "\xe6\xd6\x6b\xf6\xf8\xf9\xda\x5c\x69\xff\x19\xeb\xa5\x78\x3f\x2d"
- "\xa9\x5c\xd2\xfa\xdf\x9c\x4e\xd1\xff\x3a\x7d\x06\xfa\x37\xcc\x7b"
- "\x5b\x2a\x56\xc3\xdc\xe6\xa4\xf5\x8a\xd0\x0e\x79\xfe\xfe\xcf\x80"
- "\x3b\x4f\xd7\x7b\x0f\x4e\x49\xaa\xaf\xd3\x73\xe6\x4a\xed\x9f\xd7"
- "\x4f\xfb\xe7\xf5\xb5\x7f\x95\x84\x9b\xb4\x96\x38\x4f\xb6\x3f\x76"
- "\x99\xfe\x9b\xc7\x3e\xa4\x06\xdd\x60\x73\xcf\x7b\xdb\xb0\xd5\x79"
- "\xfd\xa0\x7f\x5b\x7d\x5e\xdf\xfa\x9f\x2a\xd7\xb7\xfe\x17\x4a\x65"
- "\xab\x07\x49\xee\xad\x26\xd6\xdd\x66\xad\x4f\xd9\x96\x7e\xd6\xff"
- "\x1e\xd4\xd7\xff\x1e\x5c\x92\xa8\xcf\x1e\x74\x26\xf6\xe1\xbc\xa4"
- "\x3e\x7c\x30\x37\xb1\x0f\xe7\x76\xfe\x77\xc7\x35\x3c\x53\x7a\x7a"
- "\xba\x29\x3d\xcd\x94\x96\x8e\xd7\x68\x22\x0d\x4a\x37\xa7\x0f\xc0"
- "\x6f\xa0\x7e\x1d\x64\x4a\x37\x99\xf1\x1b\xa0\x5f\x07\x26\x3d\x0f"
- "\xe2\xb2\xf8\x99\xf5\xeb\x80\xa4\xe7\x81\x9f\xf1\x7e\x90\x5e\xaf"
- "\x51\xbf\x39\xe9\x79\xc0\x67\xbc\x1f\xf8\x3f\x2c\x4f\x97\x3d\x27"
- "\xfa\xa1\xcd\x5c\xb5\x6e\x69\xd1\xca\x65\x72\xbf\x78\xb9\x73\xe9"
- "\xe3\x8f\x2f\x5f\xbb\xd6\x59\xb2\xda\x79\xef\x94\x87\x6e\xbf\xcb"
- "\xa9\xb6\x9d\x8b\x26\x8f\x5e\x36\x98\x66\xaf\x5f\xc3\x2f\x66\xcf"
- "\x9f\x99\xe7\x9c\x77\xef\x94\xc4\x97\x06\x18\xb9\xbd\x7c\x25\x28"
- "\x71\xf2\x97\xfb\xfc\x70\xa2\x6d\x2f\x4b\xdd\xd3\xce\x7e\xbe\x6a"
- "\xcd\xe3\x3b\x1f\x34\xb3\xff\xe8\x25\x8f\xf0\xdf\xc4\x7b\xfa\xf3"
- "\x97\x73\x23\xc6\xed\x29\xa7\xe2\xc7\xf8\xfc\xca\xfc\x2d\xe2\xd7"
- "\x21\x72\x3e\x40\xa6\x93\x94\xff\x87\xa6\x19\xc8\x8b\xe7\x40\x30"
- "\x4a\x4e\x0f\x59\x50\xfe\x69\xbc\x4b\x13\x77\x6b\x48\x0b\xeb\xbe"
- "\xd0\xdf\xde\x22\xd3\x7e\x5d\x6e\xe4\xb3\x9e\xa2\x05\xa3\xc5\xaf"
- "\x85\x7c\xe6\xf3\x41\x2a\xdf\xfc\x4f\x85\xe9\xa1\x43\xac\x1b\xea"
- "\x33\xc9\xcc\x7b\xa1\xaf\x66\x92\xe5\xd5\xe1\x1c\xb3\x64\x7e\xa7"
- "\xb1\x17\xfa\x3c\x9e\x83\x94\x7f\x8c\xeb\xe6\xbc\x9a\xe9\xa1\x93"
- "\x9c\xbf\x21\x21\xff\x82\x11\x7d\x7b\xb1\xf3\x3b\x4d\xc8\x37\xf7"
- "\x63\xb2\x5a\x63\xe2\x9f\x91\x4c\x07\x8d\x9f\x41\x69\x01\x74\x45"
- "\x73\xb4\x9c\x94\xcf\xcf\x82\xe5\x1b\x62\x22\xca\xfe\xe9\xb3\x3b"
- "\x3d\xa2\xea\x29\x32\x43\xa6\xd3\xfc\x6b\xd8\x47\x61\xc1\xac\xc6"
- "\xe5\x64\x46\xfb\x47\x9c\xa6\x87\x4b\x9d\x73\x88\x3c\xb3\xc9\xfc"
- "\x3b\x37\xfb\x1b\x3a\x1b\x76\xfc\x91\xcc\x3f\xb9\x54\x6e\xba\x24"
- "\x1c\x54\x5a\x22\x3a\x04\xc7\x31\x0a\x8b\x08\xfb\xf8\x37\x2f\x89"
- "\x71\x9e\x1d\xdd\x1e\x07\xb5\x96\x84\x69\xf3\x09\x11\xa9\xfc\xa3"
- "\x3a\x1b\xd0\xd2\x19\x66\xff\x45\xcb\xe6\xd9\x94\x7e\x2a\x8f\x4c"
- "\x2d\x85\x75\x14\xc8\x0f\x53\xe9\x09\xd1\xd1\xbc\xe4\x13\x6a\x2d"
- "\x3c\x40\x05\x6d\x64\x6a\x6e\xff\x88\x64\x2c\x9e\x9a\xca\x79\x65"
- "\x17\xc8\xb1\x79\x25\xa7\x5d\xa0\x8d\x9b\x69\xc8\xc6\x3f\x91\x35"
- "\xd0\xd1\x86\x7a\xce\xd0\xa3\xc7\x29\x0d\xf0\x4c\x9b\x3e\x22\xc7"
- "\xa6\x47\xd8\xcf\x37\x97\xea\xcb\xc8\x21\x3c\xae\x8c\x4b\x1e\x97"
- "\xed\x92\x70\x65\x76\x7b\x5c\x59\xad\xc5\xc8\xdf\xfe\x1e\x0d\x6d"
- "\xa3\xac\x5f\x9f\x6e\x33\xd5\x9d\xa7\x11\xdc\xa6\x53\x68\x5b\xfd"
- "\x79\xe4\xaf\x59\x74\x4c\x43\xd9\xf8\x32\x51\xfb\xa2\x8e\x40\x5e"
- "\x84\x34\xc0\xaa\xbb\x44\x23\xea\x2f\x91\x43\xab\x5e\x74\x8c\xcb"
- "\x75\xd2\xb7\x37\x04\x9a\x89\x4a\x37\x8b\x58\x4f\x8d\x93\xd7\xcb"
- "\x06\xbd\xf9\xd8\x21\x73\xa0\xb9\x93\x5a\xc2\x97\xa8\x95\xfe\x4c"
- "\x01\xf7\xdf\xfd\x3f\x79\xec\x10\xaf\x59\xa7\xf9\x37\xb6\xa3\x2e"
- "\xc5\x3b\x9e\x16\x3e\xab\x5c\x4e\x55\x65\x94\x51\xbc\x91\x06\x9d"
- "\x46\xba\x9a\xdb\x0f\xb3\x04\xa2\x7f\xf7\x6f\x94\xfe\xb8\xf9\xc7"
- "\xca\x5a\x28\xbd\x35\x5c\xc7\x7e\x9f\xa6\x58\x66\x25\x6c\xbf\x63"
- "\x14\x28\xfe\xab\x5f\xb3\x55\xe6\x6c\xd3\xc8\xf2\xd3\x8b\xc7\x4c"
- "\x01\xf3\x45\x0a\xe4\x85\xe9\x7d\xd4\x2d\x6a\x2a\xf3\xa1\xb7\x72"
- "\x5b\xc3\x11\x3e\xef\x94\x2d\xba\x1c\x83\xab\xd6\xd0\xd8\x86\xf3"
- "\x34\x6a\xf7\x79\x72\x89\x6e\x97\x89\x7d\x6c\xf9\x6c\xea\x6e\x5c"
- "\x33\xda\xc9\x82\xb6\x2b\x3f\x5a\xbb\xee\x6b\xdb\xe3\xa2\xc6\x4b"
- "\x7d\xbe\xb6\x97\xba\xfa\x7c\x6d\xc1\x53\x21\xf6\xb7\x0d\xd2\xc3"
- "\x5b\xad\xcd\x34\x08\x72\xb2\x8f\xf9\xbb\xea\x2c\x99\x2b\xce\x12"
- "\x8d\x2f\x37\x91\x73\x05\x9f\xb3\xf8\xce\xf2\x00\xfa\x86\xef\x4f"
- "\xd2\x77\x46\xe0\x9a\x81\x5f\x1a\xd2\x65\xfc\x86\x76\x9d\x8f\x91"
- "\x66\x42\xda\x00\x5c\xd3\x21\x2f\x31\x4f\xbd\x08\xa1\xae\xbc\x2e"
- "\x13\x0d\x66\x7e\xd6\xfd\x7b\xf3\xba\xbd\xdf\x0e\x07\xe9\xa9\x4e"
- "\x83\xaf\x95\x8e\x9f\x1f\x7a\xff\xe4\x19\x8e\x97\x15\x92\x78\xf5"
- "\x14\xa6\x71\xec\x2c\x3d\x9d\x71\x58\xc4\xf5\xa2\xfe\x5c\x5c\xad"
- "\xf8\x41\x4e\xbf\x7d\xdc\x28\xdb\xd5\x53\x88\x3a\xbf\xf3\x30\xd2"
- "\x85\x91\x8e\x76\x9b\xf9\xdd\x2f\x4e\x9e\x31\xa9\x3c\x2e\x13\x60"
- "\x46\x74\xf8\x90\xfd\xf9\xb5\x2c\xe3\x5d\x26\xab\x38\xb2\x64\x22"
- "\xd5\xbf\x2c\x9a\x77\xbf\x2c\x9a\x94\xec\x7d\xa7\x2e\x48\xab\x7d"
- "\x8c\x23\xc6\xf1\xa6\x6d\x78\x77\x04\xa3\x0e\xd3\xa5\x69\x19\xfb"
- "\x93\x7d\x07\xf6\xdf\xb5\x87\xe3\xdb\x20\xbc\x0f\xd6\xf1\x58\xfa"
- "\xb3\xb2\xa3\x03\xa0\x03\xea\x5a\xdb\x3b\xe9\x27\x97\x3a\x06\x78"
- "\x7e\x4b\xa6\x40\xf4\x24\x4d\xc8\x22\x07\xdb\x83\x8d\x2f\x8b\xe0"
- "\x8b\x1c\x9f\xef\x65\xd1\x09\x7e\xb9\xf1\x34\xe5\x0d\xf8\x6a\x16"
- "\x65\xfd\xde\x4d\xba\x7e\xca\xbb\x31\x4e\x3f\xbd\xd1\x12\x3c\x14"
- "\xa7\x9b\xf2\x1f\xbe\x5c\x37\x2d\x7c\x50\xe9\x26\xc8\xbe\xd4\x45"
- "\xb1\xa0\x9e\x3e\x39\x29\x5d\xf7\x13\x59\x38\x32\x29\x3d\xa2\xa7"
- "\x0f\x49\x4a\x0f\xa9\xf4\x47\x67\x1b\xba\xaf\x95\xf1\x58\xcf\xba"
- "\xef\xd1\xdb\x58\xf7\xb5\x2e\xd1\x75\x9f\xd4\x3f\x8f\x5e\x27\xfe"
- "\x0d\xba\x68\x1d\xeb\x9b\x47\xce\x30\xfe\xe2\xd7\x64\xe0\x7e\x0d"
- "\xd2\x7e\xca\x69\xbe\x3f\x93\x19\x3f\x43\xef\x09\xd6\x7b\xac\xf3"
- "\x58\xf7\xed\x1a\x2e\xda\x76\xbd\x2c\x8e\xd7\xcb\xd8\x3f\x8f\xf4"
- "\xea\xbf\x17\x90\xb6\x0d\x69\x2f\xe0\x3d\xeb\x41\xa6\x49\x4b\xde"
- "\x21\x62\xff\x13\xd8\x5a\xf5\x9a\x29\x9b\x76\xa0\xbf\xf9\xbc\xe1"
- "\x56\xd0\xd7\x9a\x46\xc5\x81\x12\x3e\xc3\x1a\x63\x9f\xb4\xf6\xd6"
- "\x92\x76\x96\xbb\xe1\x15\x90\xb3\x80\xfb\x13\x2a\x0b\x8b\xd3\x7c"
- "\xee\x8e\x71\x28\xd8\xf0\x00\xc7\x4b\x4a\x6b\xc2\x6c\x98\xfd\xc2"
- "\x59\x67\x03\x17\xb3\x0f\x38\xa9\xf8\x2c\x8f\xec\x0d\xd2\xde\x72"
- "\xd5\xd7\xf9\xc7\x38\x2e\xdb\x49\xca\xeb\xc0\x7c\x2f\xc2\x6d\xb3"
- "\xc6\xca\x89\xcf\xc1\x70\xac\x42\xbe\xee\x32\x69\x85\x3e\xe3\x2c"
- "\x8c\x17\xba\x01\x79\x02\x6d\x11\x62\x9c\x83\xf4\xc8\xc4\x96\xd2"
- "\x43\x5c\xbe\x8d\x69\x23\xbc\x1e\x03\x46\x9a\x84\x61\x92\xf3\xc6"
- "\x42\xe4\x53\x6b\xe7\x99\x4e\x6a\xc9\x0f\x11\xeb\xfd\x40\x07\x60"
- "\x94\x9e\x54\x30\x00\x4b\x60\x0c\x48\x78\xa7\xc3\x1f\xb2\x59\xfc"
- "\x13\xf0\xf7\x72\x7f\xf1\xb9\x48\xde\x6f\x03\x5d\x32\xd8\x57\x5e"
- "\xd9\xa2\x8f\x8c\x6b\xfc\x33\x91\x7e\xb6\x13\xfc\xf6\xc8\x58\x3e"
- "\xb7\xc4\xe7\x39\xaf\x74\x96\x13\x34\x1a\x65\x9c\xe7\xd4\xd6\xff"
- "\xef\x9e\xe5\x04\x6c\x47\x83\x49\x1c\x00\xfe\x63\xf9\x3c\x27\xf0"
- "\xdf\xc6\x7c\xa8\xb7\x29\xfb\xa5\x47\x25\xcd\x4b\x38\x0d\x73\xc7"
- "\xa3\x46\xff\x73\x7b\xb9\x2d\x78\x97\xa7\x6c\x44\x81\xf9\xc7\xc2"
- "\x6c\x7e\x8f\xb4\x69\x9c\x7f\x02\xf4\x58\x00\x63\xd8\x9b\x27\x63"
- "\xa6\xaa\x8d\x64\x56\x3a\x2d\x7f\x26\x97\x57\x3a\x2d\x9f\xfa\x74"
- "\xda\xc2\x0b\x4a\xa7\x29\x1a\x2b\x9d\xb6\xf0\x1f\x4a\xa7\x2d\xfc"
- "\x58\xee\x8b\x41\xa7\xf1\x3b\xd6\x6b\x86\x4e\xdb\x3d\x5c\x1c\x65"
- "\xdd\xd1\xed\x5d\x78\xcc\xd0\x6d\xdb\x91\xc6\xba\x83\x71\x54\x7a"
- "\xea\x51\x97\xf8\x7f\x5d\xa4\xfc\x0e\xf8\xbe\x90\xcf\x2f\x74\xe8"
- "\xf7\x3c\x9e\x4c\x51\x3a\x2e\x7f\x54\x9f\x8e\x5b\xb8\xaf\xaf\x2c"
- "\xeb\xb8\xfc\x3b\x95\x8e\x53\xe9\x8d\x8f\xb2\x8e\x7b\xd4\xc5\x34"
- "\xd0\xe1\x9b\x78\x0d\x4f\xcf\xcf\x74\xcc\x8e\xd7\x71\x89\xf2\x95"
- "\x5f\x6a\xe8\x38\xd6\x6d\x78\xde\x06\x9d\x26\xe7\x90\x2c\x67\xb5"
- "\xa0\xb9\x21\x77\xdc\x07\xdc\x66\x8e\xbf\xc6\x74\x9b\x7a\x86\x06"
- "\xe9\x67\x87\xf4\x76\xe7\x1f\x35\x7c\x1f\x41\xff\x63\xa9\xec\xe8"
- "\xbe\x18\x89\xf4\x65\x3e\x3b\x1f\x28\x3f\x49\x81\x3a\x51\xde\x1a"
- "\x3d\x41\x05\x25\xd0\x15\xe9\x4f\x7e\xcc\x7d\x8b\x79\xc7\x37\xf9"
- "\xca\xba\xe7\x34\x2d\x1a\x52\x10\xa6\x81\x98\xab\x7f\x5c\x65\xc2"
- "\x3b\x77\xc2\x3b\xb9\xc6\x30\x7e\x0d\xc7\xd7\x83\x20\xf4\x33\xdf"
- "\xbf\xca\xfa\x36\x5f\xa1\xbe\x57\x65\x7d\xb0\xa9\x30\x07\xb2\x9f"
- "\xa5\x45\x72\x5e\x22\xe3\xdb\x54\xa4\x84\xf5\x5b\xfd\xfd\x80\x7e"
- "\xde\xff\xe3\xca\xe5\x17\x5f\x73\xe5\xf2\x8b\x6f\x61\x5d\x84\xf6"
- "\x59\x63\xde\x44\x38\x43\xa3\x46\xbe\xd3\x9c\xef\x41\x7d\x2d\xe6"
- "\x63\xcf\x48\x39\x47\x73\x18\x30\x99\xff\x76\x20\x9f\x8c\x19\x02"
- "\x5d\x39\x6d\x03\x71\xbc\x96\xf8\xb2\xdb\xfb\x68\xbc\x38\xf7\x0a"
- "\xeb\x7e\x19\x81\x3a\x92\x31\x63\x8f\xc0\x26\xe5\x98\x46\xb5\xbd"
- "\xeb\x1f\x8b\xdb\xa1\x37\x83\x71\x7e\xb1\x3c\x1f\xfb\x32\xc7\x35"
- "\x60\xfb\xb2\x4a\xcd\x37\xaf\x87\x7e\xce\xe4\xf3\x30\x7c\x36\xa6"
- "\x20\x36\xcf\x74\x44\xc6\x32\x2b\x70\x1a\x65\xfb\x5b\x67\xe1\x7a"
- "\xf5\x3a\xd9\xc7\x34\x8c\x32\x0b\x8c\x32\x0c\x9b\xfd\x14\x31\x2e"
- "\x7f\x59\x9e\x29\x8d\x76\xb2\x2e\xbc\x1e\xb6\x68\xa6\xaa\x67\x09"
- "\xe9\xf5\x54\x06\x69\xd1\xbc\x2b\x9d\xcd\xe8\xbf\x7d\x05\x4d\x57"
- "\xdf\x3e\xd2\xdb\xb7\x84\x3e\xa3\x7d\x57\xa8\x77\xc9\xa4\xab\xaf"
- "\xd7\x66\xd4\xeb\xbe\x7a\xba\x2e\xd9\xff\xf9\xe9\x9a\xad\xd3\x75"
- "\x49\xf0\x33\xe8\x9a\xa2\x9e\xa5\x59\x9f\xbf\x1e\xa7\x5e\xcf\xd2"
- "\x19\xa9\xea\x21\xf9\xd7\xef\xb9\x29\x8b\x11\x6b\xb3\x0b\xb2\xa3"
- "\x62\xd5\x2d\xf5\xc5\xc7\x2f\xee\x92\x72\xb5\x74\x6f\x6f\xbc\x64"
- "\xb5\x57\x0e\x5d\xbd\xf4\x83\x82\x3d\x3c\xbe\x0b\x2d\x48\x4b\x9b"
- "\x38\x8e\xeb\xb4\xcd\xea\x4c\xb6\x5e\xa6\xed\x4a\x71\x93\x39\x46"
- "\x17\xc7\xe4\x0b\x38\xd0\xf6\x3a\x8e\x5d\x92\x7f\x80\xfd\xef\x31"
- "\xa7\x82\x8e\x7f\xec\x46\x8e\x39\x86\xfb\x41\xb8\x77\x29\x1d\xf0"
- "\x98\x0b\xf5\xf4\x7f\x76\xb2\x26\xdf\xbf\xb7\x2c\x7b\x40\x7f\xfe"
- "\xf5\x28\x0f\x9b\xe2\x69\xb9\x36\xa5\x65\xde\x6a\xc1\x5c\x42\x8f"
- "\xf7\xb7\xec\x13\x19\x03\xce\x93\xc7\xe7\x49\x30\x2e\x2e\x1b\xa2"
- "\x9f\x03\x00\x3d\xca\x41\xd7\xc7\xf6\x18\xf4\x30\xd2\x91\x76\xd0"
- "\xa0\x07\xec\x9b\x8c\xc0\x9e\x28\x9f\xd3\x09\xab\x33\xd9\x8f\xfd"
- "\xa7\xa8\xce\x3f\xa4\x60\x3f\xae\xf6\x68\xb8\xbe\x9e\x3c\xb3\x9c"
- "\x37\x95\xf1\xbc\xe9\xf1\xc3\x21\x7b\xfe\x21\x03\x0f\xb1\xd6\x61"
- "\xe2\xb3\xdf\x13\x30\x96\xee\x50\x31\xf7\xd2\xf8\x9c\x9c\x7c\xbf"
- "\xd6\x65\x52\x34\x79\x7c\xb2\xe8\xe2\xd8\x31\x12\x76\x06\xf0\x6c"
- "\x67\xb8\x41\x5c\x43\x9b\x5c\x1c\xf7\x42\x6f\xcf\xe3\xa3\xb5\x9a"
- "\x5b\x2d\x5a\xb7\xc3\x64\xe0\xdb\x20\xcf\xb4\x3e\x8e\xf6\x2f\x51"
- "\x71\x62\x25\x3e\x0e\x13\xfb\xf3\x6b\x99\xf9\x7e\xb1\xc9\x41\x07"
- "\xd7\x74\xc8\x39\x11\xd7\x39\x01\xf5\x0b\x9e\x27\xc1\x36\x41\xb9"
- "\x3d\xbd\x74\x03\x5c\xd1\x6d\xd0\xed\xf1\x59\x6a\x5c\x56\x6d\x0c"
- "\x6f\x72\x98\x8e\x84\xe4\x79\x3b\x1a\xe5\xf4\x7c\xaa\x62\x61\x3f"
- "\x7e\xc2\xa0\x5d\x2f\x4e\xc0\x87\xf3\x28\xff\xa6\xc7\xa3\x06\x4e"
- "\x52\x76\x33\xf9\xfc\xee\x63\x21\x3e\x37\xa4\xe8\x7f\x24\xa3\xdb"
- "\xbb\xcc\x79\x39\xfd\x97\x4d\x8c\xa3\x7f\x3a\xf3\x1e\xd3\x9f\xd7"
- "\x3a\x40\x97\x45\xa0\xa5\x45\x9d\x77\x60\x7b\x66\xd9\x72\x3c\x67"
- "\x30\x9e\x5a\xb5\x41\xf3\x3c\xb3\x5a\x27\x5b\x56\x17\xd7\x0f\x68"
- "\xaf\x83\x6d\xb5\x34\xa3\xfd\x5c\x86\x69\xc0\x71\x25\xb9\x6e\xe0"
- "\x73\x2d\xea\x3e\x90\xdc\xa6\x0a\x75\x96\x84\x94\x6f\xc9\xb2\x63"
- "\x71\xb1\xc5\x43\x25\x4e\x11\x51\xe7\x92\x97\xb9\x0f\x96\x85\xcc"
- "\xfd\xe9\x00\xe6\x41\x19\xa3\xd2\x24\xd7\x15\x60\x73\xad\xf8\x50"
- "\x00\x37\xd5\xf7\x2b\x76\xab\xb4\xe5\xff\xc0\x15\x3c\xb6\x7c\x8a"
- "\x40\xdd\x21\x8f\x8c\xb1\x82\xb6\xad\x08\x32\xcf\x19\x7c\xc6\xeb"
- "\x90\xca\x67\x7c\xf9\x1b\xac\x53\x0c\x9a\x03\xff\xc1\xdd\xde\xe5"
- "\xc5\x06\xfe\x46\x7e\xee\x3b\xce\xc3\x7b\x36\x4d\xce\x88\xd4\xb5"
- "\xea\xcc\xd0\xf2\x7a\x43\x86\xb9\x0e\xee\x67\xd6\x35\x4c\x0f\x45"
- "\x8b\xe5\x87\x13\x61\x39\x4c\x2a\x6e\x26\xf3\x3c\xe4\x71\x63\x64"
- "\x00\xf2\x04\xfb\x60\x2c\xcf\x57\xef\x7a\xf1\x64\x3f\x7f\xe9\x8b"
- "\xa7\xfa\x63\xc5\x4c\x6e\x57\x1f\xbe\x2c\x7f\x2b\x7a\xfb\x9f\xdf"
- "\x85\x3d\x0e\x8e\xc1\x2b\x75\x4c\xc9\x48\xc6\x37\xc4\xb1\x6d\x25"
- "\xaf\x03\xbe\x8f\x71\xe7\x3c\x46\x9f\xf5\xf1\xe2\x8a\xc2\x78\x38"
- "\xc2\x23\x71\x95\x70\x94\xee\x08\xf1\xde\xb6\x53\xed\xb7\xac\xa8"
- "\x8d\x6b\x77\x86\x81\x4f\x9f\x4e\x58\x71\x30\x99\x27\xb9\x6e\x8e"
- "\xc5\xa7\xc3\x66\x5d\x62\x3b\x49\x2b\xf6\xe8\x78\x39\xb8\x1f\xfb"
- "\x1b\xdf\x38\xce\x25\xc7\x3e\x7d\x51\xe9\x10\xf4\x73\xe1\xc8\x17"
- "\xd5\x39\xa2\xb0\x8a\x7f\xfa\xdd\xd1\xc2\xf4\x1a\xd3\x8a\xd7\xd3"
- "\x43\x32\x5e\x87\x3c\x63\xfe\x5d\xde\xe3\x17\x43\x8b\x5f\x93\xb1"
- "\x6e\x75\xdf\xc0\x50\x53\x71\x54\xc6\xf2\xf3\x94\xf0\x99\xdb\x28"
- "\xcf\xf5\xa4\xef\xdb\x91\x92\x28\xcd\x8f\xb0\x4c\x7c\xb7\x84\xcf"
- "\xd2\xab\x38\xe2\xdf\x2d\x37\xce\xcf\x73\xec\x4c\x8e\xfb\x0a\x3d"
- "\x94\xde\x17\xb7\xb5\x30\x8f\x6d\x2c\xbd\x7f\x69\x87\x49\x1c\x53"
- "\xf2\xff\xdd\xdf\xf2\x79\x79\xb5\x8f\x75\x12\x3a\x21\xfd\xef\x27"
- "\xe9\xbb\x1f\xab\x75\x1f\x43\x47\x15\x3e\xc2\x7b\x59\x41\x1d\x06"
- "\xea\xea\x84\x7c\xcf\xbb\x5c\x97\x7c\xf7\xb7\xc6\xdc\x85\xcf\xdf"
- "\xa9\x7d\xb1\x3e\x78\x41\xfa\xae\x9c\x0b\xf6\xf5\xc1\x6f\x00\xab"
- "\x30\xe7\x72\xbd\x50\x38\xcb\x90\xbd\xe2\x9b\xf8\x0c\xf7\x77\x6d"
- "\x5c\x7f\x7f\xe3\x85\xf0\x3c\xc2\xfd\x64\x39\xe5\x4c\xdd\x37\xa9"
- "\xf7\xd9\x0a\x0f\x18\x6d\x30\x68\xa2\xda\xb0\xf2\x9a\xae\x4c\xe7"
- "\xd8\xbe\xb6\xaf\x94\xb6\x6b\xdc\xfb\x29\x71\xb4\xe1\xe7\x5c\x35"
- "\xae\xad\x04\x7d\x96\xe9\xb1\x6a\x55\x1a\x64\xe7\x57\x62\x53\x1e"
- "\x29\x1c\x57\x92\x21\xeb\xc8\x3b\x36\x48\x17\x1c\x6a\xbf\x6b\x25"
- "\xda\x5f\x58\xa9\xca\x15\x1e\x67\x5c\x52\xb6\x33\x11\xc7\x43\x6c"
- "\x6b\xa8\x98\x0a\x2b\xdf\x65\x7c\x9d\x63\xb8\x8f\x57\x3e\x2b\x75"
- "\x38\xc7\x57\xe8\x29\x1c\x10\xee\x71\x51\x57\x4f\x21\xf4\x82\xcb"
- "\x84\x7a\xa0\xff\xbb\xc2\x7a\x9d\xfb\x0d\x5c\x19\x37\x19\x9f\x53"
- "\xac\x4c\x4d\x5f\xae\x57\xc6\x7c\x2a\x1c\x84\x1f\x70\x28\x1c\xf8"
- "\x79\xed\x12\xd8\xe9\x1d\xa1\xea\x31\x07\xb4\x75\xe2\x28\xc7\x17"
- "\xc3\x5c\xa4\xa3\x0a\xfc\x3b\x74\x8b\x1f\xb6\xf9\x22\x53\xc1\x06"
- "\xca\xc5\x9c\x99\xc4\x45\x91\xd3\xa0\xe1\xba\x4e\x4c\xe4\x38\xe3"
- "\x78\xce\xd6\x9f\xc7\xf2\x73\xd7\x3a\x91\xdf\xed\x7d\x62\x89\xb1"
- "\x47\xa8\x62\xe3\x3c\x51\xdc\x1b\x4f\x28\x7d\x21\x9f\x27\xe2\xb8"
- "\x53\x1a\xe6\x42\x1d\x5c\x6f\x01\xcf\x67\x51\x1f\xf2\xd5\xc1\xde"
- "\x68\xe7\x7c\xa1\xf4\x5b\x33\xf1\x73\xf5\xb3\x97\xda\xc1\x78\x75"
- "\xd9\xc7\x1c\x30\x70\x1d\x1a\xce\x35\x7d\x4e\xdc\xa2\x06\x6e\x48"
- "\x3f\x5a\xa5\xd2\xa3\x1c\xff\x90\x7d\x1d\xbb\xbd\x4f\x8e\x30\x70"
- "\x35\x70\xe0\xfa\xf8\xfc\xa6\xc8\x74\xe6\x70\xec\x19\xae\x8f\xe3"
- "\xa9\x22\xef\x0c\x03\xdf\xcf\xcb\xcb\x65\xf5\x42\xf0\xf8\xc9\xfa"
- "\xd7\x79\x03\x51\x6b\x98\x75\xca\x93\xf5\x47\xea\xc3\xbc\xde\x7d"
- "\x17\xea\xb8\xb3\x4b\x14\x92\xd6\x53\x98\xb2\x8f\xb9\x0c\xf2\xb7"
- "\x49\xfd\x50\xe3\xbc\x53\x13\x33\xa0\x27\x50\xae\x67\x06\xaf\x35"
- "\x41\x6e\x8b\xcc\x4d\xa5\x1d\x7c\xe6\x12\x3a\xa7\xc8\x8c\x3c\x39"
- "\x6c\x67\x61\xbe\x15\x91\xdf\xaf\x80\x6e\xf2\xaf\x9b\x08\x18\x45"
- "\x03\xcc\x6e\x32\x37\x25\xc5\xa9\xea\x8f\x3f\xba\x6c\xb7\xe6\x76"
- "\xd5\xdc\x8a\x39\x5c\x11\xec\xff\xa7\xfa\xdd\xf3\xad\x18\x0e\x7a"
- "\x22\x9f\xef\x06\x9e\xef\x15\x15\x5e\x29\xaf\xb1\x5f\xcd\x3a\x68"
- "\x82\x83\x32\x84\xfd\xd6\x5c\xd6\xb7\x5d\x99\xb7\x3a\x78\x2c\x41"
- "\xf9\x7d\x46\x79\x1e\xd7\x79\xec\x40\x7f\x39\xaa\x7a\xf5\x61\xd1"
- "\x31\x25\xcf\x45\xc7\x0c\x19\x4d\x55\x4f\xc9\x5e\xa1\x79\x46\x93"
- "\x29\x80\x71\x6b\x7c\x84\x32\x1a\x76\x12\xf9\x36\x8a\xc8\x8b\x1b"
- "\x31\x87\xb9\x81\xbf\x77\x51\x34\x83\x65\x94\xf9\x7b\x07\xf8\x25"
- "\x1d\xb8\xbc\x78\x11\x75\x96\xa9\x7c\xba\xdf\xba\x03\xf9\x4a\x70"
- "\xcd\x12\x26\x13\xd5\x96\x91\xa5\x56\x23\xb3\xaf\x8c\x46\x20\x0d"
- "\xb6\xee\x53\x0b\x0c\x99\x4d\x85\x43\x55\x03\x51\x0d\xea\xdd\x52"
- "\x26\xa2\xbf\xc1\x78\xee\xd5\x44\xe4\xf3\xd0\x1d\xed\x3f\xa8\xda"
- "\xf8\xd4\x41\xc3\x26\xc4\xbd\x3f\xd1\xef\xe0\xa9\xcb\xce\x78\x3f"
- "\xb6\x7a\x75\x49\xc1\x9a\xe5\x7c\x71\x8d\x7e\xe6\x96\xc1\xf1\x6b"
- "\x21\x3c\xfe\xa9\x38\x15\x4f\xb5\xf1\xba\xe3\x8b\x99\xc6\x3e\xfa"
- "\x2a\x87\xb1\xf6\xa9\xfb\xeb\xdf\xc3\x73\x3a\x9e\xfb\xe0\xdd\xc4"
- "\x0f\x4a\x37\x33\x98\xb4\x8f\x2d\x64\x4a\xae\x6f\xc5\xd2\x92\xa5"
- "\x45\x77\xf1\x8e\xd9\xe0\x14\xf5\xac\x9a\x91\x54\x4f\x79\x6f\x3d"
- "\x6a\xfc\x09\x9b\x38\x5f\x75\x43\x48\xd8\x2b\x7c\xea\xac\xf4\xaa"
- "\xbd\xc6\x9a\x56\x3f\x7e\x8e\xee\x58\xcd\x62\x1b\xcb\x83\x67\x33"
- "\x99\x7e\xb1\xb1\xcd\xc4\x76\x64\x19\xee\x79\x6d\x41\xae\x91\xe9"
- "\xf1\xa2\x7e\x7d\xbe\x0d\xe3\xfb\xaa\x88\xa8\x76\x62\xfe\xb9\xaa"
- "\xdf\x35\x9b\x78\x1f\x11\xf6\x29\x6c\xa7\xd5\xb6\x2b\xf9\x1c\x71"
- "\x7e\x6e\x0f\xf3\x6c\x52\xb9\x67\x55\x9f\xad\x06\xff\x17\x39\x7b"
- "\xcf\xf3\xea\x79\xaa\x86\x1b\x71\xb8\x56\xe7\xf7\xeb\x2f\xe2\xbb"
- "\x75\x86\xe2\xf1\xd5\x1f\x36\x61\xbe\x86\x76\x7e\xef\x24\xad\xfe"
- "\xc0\xec\x80\x8d\x70\x03\xfd\x10\xf7\x1f\x72\x59\x7e\x97\xc0\x47"
- "\x37\x9e\xd9\x63\x86\x76\x81\x96\x49\x13\xea\x8f\xcc\xfa\x4d\x3a"
- "\x7e\x26\x91\x26\x77\x53\xd3\xd1\x83\x83\x06\x9a\xc9\x3a\x34\xc3"
- "\xf2\xe5\x2f\x8d\x70\xdc\x73\xf7\xa4\x1c\x4f\x59\x29\xb4\x72\x34"
- "\x62\x15\xf1\xf1\xd3\x2a\x72\x1e\xbe\xa5\x9c\xa4\x3f\x4d\x75\x45"
- "\x4e\x2a\x5c\xb7\x7b\x45\x31\x9f\x5d\xd7\x32\x77\x2e\xf1\x3c\x43"
- "\xa6\x37\x2f\x05\x4d\x1c\xa3\x99\xed\x67\xfe\xd6\xc5\x49\x2a\x7e"
- "\xf0\x7d\xa4\x81\x5e\x6e\xe1\xdb\xb9\x44\xd9\x9d\xc5\xd5\x5a\xcd"
- "\xce\x25\x7d\xf0\xcd\xc4\xf0\x3d\xaf\x92\x69\x6f\x59\x87\x29\x60"
- "\xbe\x9b\x02\xce\x30\xbd\x8f\xfb\x94\x7d\x85\x3a\xd9\x96\x65\x18"
- "\x8d\x5e\xad\xd2\xf3\x29\x99\xf4\xf3\xa7\xa6\xb3\x54\xfc\xdb\x03"
- "\xfd\x94\xe3\xf3\xde\x5d\x99\x63\xd6\x75\x7b\x9f\x36\x07\xe9\xde"
- "\x69\xba\x2d\x83\x31\xf7\x69\xcc\xff\x57\xcb\x38\x4f\x78\xff\x0c"
- "\x7f\x17\x06\x69\x2e\x23\x4f\xca\x3e\xfa\x3e\xaf\xc1\x0b\x3f\xf3"
- "\x81\xb8\xf8\x8f\x0e\x3e\xdb\xd2\x8f\x1f\xcc\xa0\x80\xfb\x76\xde"
- "\x8b\x1c\x30\x14\xfa\xc7\x73\x41\xf4\xc4\xbc\x94\x05\x71\x32\xc5"
- "\x4c\xf4\xe5\xe8\x45\x91\xd7\xd2\x79\x5e\xc6\x34\x65\x5d\xf3\xb3"
- "\x15\xbf\x31\x05\x22\xe7\xfc\x81\xad\x1a\xb5\xc2\xae\x0c\xd4\x9f"
- "\xf3\xab\xd8\xa7\x31\x6a\xa1\x3f\x53\x8b\xfb\x3f\xca\x03\xe5\x7f"
- "\x46\xba\x90\xb1\xb0\x7b\x2e\x8a\x05\x01\xf3\xff\x21\xfe\x4e\x11"
- "\x8f\x71\xa0\xbb\xf3\x2c\x3d\xfd\xcf\x5f\x03\xce\x9b\x7f\x01\x2c"
- "\x19\x33\x6d\x32\xbd\x8f\x7b\xb4\xa9\x77\xfc\x4b\x19\x6b\x26\xcd"
- "\xbf\xdd\xea\x5e\x64\xd2\x30\x96\x72\x6c\x3b\x8c\xa1\x13\xb9\x5d"
- "\x78\xce\xe6\x67\x5c\xc7\xf2\xd5\xba\xc5\xbf\xdb\x1a\x5d\xc4\x63"
- "\x6b\x1e\x8f\x9b\x48\x5f\xd0\x78\x51\x8e\xb5\xf3\xf4\xe7\x59\xfa"
- "\xf3\x0c\xfd\x79\x9a\xfe\x9c\xab\x3f\xf3\xba\xbc\x3e\x26\xaf\xf1"
- "\xf5\xda\x0b\xa6\x41\xc7\xf0\xbc\xc7\xe8\x0b\xe0\x33\xc4\xea\xde"
- "\x2c\xc7\x76\x1d\x8f\x89\x3a\x5e\xd9\xfa\xb3\x81\xcf\x8d\xd6\xe8"
- "\xe6\xff\x25\x7c\xd6\x3a\x13\xf1\x59\x9b\x1d\x87\x0f\x59\xdd\xb9"
- "\x9f\x07\x1f\x9b\x95\xbf\x13\xf1\x3f\xc0\x87\x71\xe1\x34\xd4\x7f"
- "\x20\x09\x1f\xbf\x81\x4f\x4a\x7e\x5b\x27\x3a\xd8\xae\x59\xfb\x05"
- "\x19\xd7\x79\x10\xdb\x2c\x8d\x97\x8c\x38\x85\x6b\xa3\x57\x8a\x53"
- "\x08\x59\xc0\xb8\x5d\x82\xf6\xaf\x6d\xd6\xed\xb7\xc3\xca\xce\x2f"
- "\x99\x68\xf8\x8e\xa1\xad\xfb\xaa\x54\x5b\xf7\x6f\xe5\x58\x7d\x1b"
- "\xe8\x8b\x1e\xb7\xe8\xc0\xbc\xfb\x6f\x3c\x37\x8c\x87\x5b\x54\xb2"
- "\x76\xed\x53\x77\x39\x8b\x96\xae\x5a\xee\x1c\xbd\xcc\xb9\xb6\x70"
- "\xe5\x8a\x92\xe5\x89\xfe\x14\x36\xfd\xfb\x3d\xf2\x9c\x08\xcf\xa5"
- "\xe4\x5c\x1a\xfc\x2f\xf5\xa4\xf4\xc9\x2b\xb9\x20\xbc\x25\x4b\x58"
- "\xe7\x36\xd4\xa8\xef\x3c\x01\x9f\x26\x63\x0c\x31\xe6\xbf\x3c\x86"
- "\x20\xfd\x04\xc6\xc9\xfc\xb8\x74\xce\x1b\x32\xd2\x18\xbe\xae\x9b"
- "\x06\x9d\xa4\x92\x6a\xae\x33\x25\x0d\x2f\x8a\x3d\xb0\x9b\xf8\x1b"
- "\x16\x26\xe8\x14\xc1\x71\xb7\xf8\xfc\x25\xca\x89\x53\xf4\x8c\x9c"
- "\x57\x2c\xc0\xb3\x9a\xb3\x09\xe0\xf8\xcc\xc3\x28\xb3\x17\x69\x66"
- "\xb6\x21\x30\x0f\xec\xe0\x72\x48\x7f\x8a\xe3\x60\x20\xdd\xa2\xc7"
- "\x13\xe3\xb4\x2d\x1c\xa7\x02\x69\xb6\xb8\xb4\x97\x90\xe6\x40\x9a"
- "\x53\x87\xf7\x06\xd3\x19\xcf\xb9\xfa\x3a\x19\xe7\x79\x57\xaf\xb7"
- "\x3c\x1e\x67\xfe\x86\xcb\xed\xe3\xb3\x9d\x0b\xe6\x7f\x7d\xf2\xdd"
- "\x8f\xaf\x5e\xb5\x62\x30\x49\xb2\xbb\x30\x1c\x67\xdf\xee\xbe\xe5"
- "\x2e\x67\xf1\xf2\xe5\x6b\x9c\xeb\x97\xaf\x2a\x71\x2e\x5d\xbf\x74"
- "\xc3\x60\x5a\xb1\x7a\xcd\xe3\x1c\x65\x81\xbb\x65\x6d\xc1\xe3\x2b"
- "\xbe\xcb\x4e\x2f\x2a\xf7\xe0\x04\x3b\x61\x01\xeb\x36\x3d\x2e\xc9"
- "\xd1\x2a\xb6\x21\xed\x5f\xb5\xe1\x9e\xe3\x75\x39\x70\x6d\xc2\xef"
- "\x30\x7e\x87\xf0\x3b\x8e\xdf\xb1\xd3\xb4\x69\x2b\xae\x07\xbb\xbd"
- "\xeb\x96\x19\xf6\x4a\x1f\x0f\xad\x73\x1b\x3c\x04\xfb\xe2\xa0\x1a"
- "\xdf\xd6\xed\x6b\x8d\x4a\xf9\xe9\xe5\xa9\xaa\x8b\x7d\x3c\xc5\xf1"
- "\x46\x5b\xd9\xa7\x6b\x1d\xde\x5f\x92\x6b\x95\xbc\x66\x72\x0d\xd3"
- "\xed\x14\x6d\xd8\xdd\xf8\xb2\x68\xe6\x58\x39\xb8\x36\x81\x5f\x9a"
- "\x55\x7c\x9a\xf5\xa3\x90\x6f\x24\xea\x38\xac\xea\xd0\x9f\x87\x8b"
- "\xa3\xfc\x0d\x97\x93\xfa\x33\xc3\x02\x8c\x3b\xf8\x9e\xaf\xfa\xde"
- "\xa9\x55\xff\xc6\x9b\xa9\xef\xdd\xfa\x16\xbd\x0e\x3f\x68\x51\xde"
- "\xe0\x95\x73\x29\x39\x77\xe6\x35\x62\x6b\xda\x3d\x02\xf8\x9c\xd3"
- "\xd2\x17\xb6\xc9\xf8\x97\xe5\x97\xa0\x23\xbe\xf6\xb5\x80\x5b\xe6"
- "\x4f\xe3\x35\xe4\x39\xc5\x42\xe3\x38\xe4\x5a\xfa\x93\x6d\x5c\x4e"
- "\xd8\xbe\x6a\xd3\x76\x0c\xc9\x55\x36\x03\xc7\x1d\x5c\xbf\x4f\x87"
- "\x19\x61\xda\x9e\xa6\x75\x8f\xa8\x79\xf8\xa6\xad\xca\x96\x58\x7f"
- "\xd0\xf0\xb5\x84\x8c\xba\xf0\xdc\x64\xe8\x80\x20\xad\xf7\xe9\x7e"
- "\x71\x7e\xbd\xfd\x51\xfd\xf9\x90\x8e\x63\x1a\xc7\x42\x01\xfe\xc7"
- "\xb8\xef\x60\xaf\x1c\xc2\xfd\x71\xd0\xa7\x59\xd1\xc7\x2d\xe3\x1c"
- "\xc0\x6e\xe2\xf7\xc7\xf9\x7b\x37\x78\x77\x5c\xc5\x19\x59\x3f\x91"
- "\xdb\xdc\xe7\x3b\x5b\x9f\x0b\x5c\xef\xe0\x3d\x66\xc8\xd2\xa1\xc0"
- "\x45\x96\xcf\xf5\xd9\x80\x77\xc0\xd0\x3b\xac\x67\x0a\x62\x90\x53"
- "\x39\x9f\x72\x17\x19\xfa\xa6\x8f\x0f\xdc\xe5\xa9\x74\x49\xaa\x7e"
- "\x57\xf4\x77\xff\x43\x78\x9f\x69\x02\x4e\x07\x64\x1f\x70\x3c\xd6"
- "\x8b\xbd\xf3\xb6\x1e\xa5\x23\xdd\xc7\x7b\xe7\x98\x3a\x1e\x1c\xdb"
- "\x3d\xc8\xb8\x5d\x92\xfb\xfe\xba\xde\x70\x47\x0d\xbd\x61\xc0\xb1"
- "\xa6\x09\xcd\xea\xc6\x3f\xdf\x48\x07\xef\x91\xf0\x78\x29\xed\x11"
- "\xc0\x19\x7a\x41\x9d\x81\xd3\xaa\x47\x3a\x82\xe4\x3e\xc8\xdf\x7c"
- "\x93\x36\xad\xf7\x99\xff\xe8\xd3\x45\x1b\xe6\xc5\xc3\x14\xb6\x91"
- "\x0e\x86\xcb\xfa\x88\x6d\x92\x82\x98\x99\xe3\xd0\x38\xf4\xf1\x05"
- "\x3a\x78\x43\xb9\x81\x2b\x68\x78\xd4\xc0\x57\xff\xe6\xd8\x51\xd4"
- "\x13\x9c\x1b\xeb\x61\x5f\xf0\x26\xd5\x9f\x9b\xa4\xbe\xc1\xbb\xfd"
- "\x28\x7b\x38\x48\xcf\xd8\x74\x19\x6a\x46\xf9\xfd\x47\xca\xa6\x21"
- "\xcf\x86\x36\xdd\x9f\xf9\x18\xfa\xf7\x78\x1f\xef\xaf\x6b\x89\x5b"
- "\xe7\x39\xae\xfa\xf0\xee\xf2\x93\xb4\xd1\x11\x97\xae\xf7\xed\x91"
- "\x79\x48\x6f\x51\x6b\x26\xce\x36\x55\x7e\xa3\xf2\x5d\xd5\x71\x64"
- "\x5d\xc0\xe7\xf5\x58\xc6\x25\xed\x65\x1f\x6f\x9c\x67\x8c\x17\x80"
- "\x75\x50\xd2\x7c\xb8\x38\xcc\x74\x52\xf1\x3e\x9e\xb9\xa8\xe8\xb4"
- "\xd1\x9d\x40\x7b\x1e\x37\x51\x0f\xd3\x69\xe8\x16\xa1\x0d\x0d\xa7"
- "\x89\x82\x0d\x66\x62\x79\x61\x19\xe7\xbd\x41\xf0\x87\xb4\xab\x14"
- "\xdd\x36\x1e\x32\xe8\x66\xf4\x1d\xd3\x29\x48\x1b\x5d\x4c\xdb\xc4"
- "\x36\x0e\x3a\x76\xd2\x68\x3b\x68\xca\x31\x4d\xf1\xdc\xac\xcb\x45"
- "\xb3\xff\x06\xf6\x1d\x59\xf7\x87\x23\xe6\xaf\xd3\x11\xf7\x44\x52"
- "\xb4\xdd\x84\x3e\x2e\x71\xc7\xcd\x4b\x8e\x32\x7d\x59\x56\x84\x6f"
- "\x64\x96\x1e\x7b\xeb\xa8\xf2\x63\x5a\xd7\x2c\xaa\x47\x66\x49\x59"
- "\x5e\x27\x63\xa4\x70\xdc\xde\x63\x4c\x23\xd6\x8b\x2c\x4b\x2c\x03"
- "\x2c\x4f\x8a\x46\x9b\x4a\xe2\x68\xd4\xc4\xf4\xd1\xe9\x74\x30\x49"
- "\x97\x2f\x77\x16\x4d\x56\xba\xd8\xe9\x1a\xbd\x6c\x82\x0c\x74\xe3"
- "\xbc\x6f\xea\x5d\xce\x79\x93\x47\xbb\x0b\xc7\xce\x51\x97\xa9\xf3"
- "\x66\xf1\x75\x70\xe2\xbc\xce\x89\x7a\x4e\x24\xce\x0d\xb7\x14\x2a"
- "\xfd\xb1\x29\x1c\x4c\xb3\x4a\xda\x71\xdc\xd9\xaa\x55\x44\x31\xe0"
- "\xbd\xe3\x34\xfa\xd4\xe6\x3c\xc8\x71\x8e\xe7\xba\x89\xe3\xa2\x7f"
- "\xda\x88\x77\x0d\x48\x1f\x5a\xcc\xdf\x47\xf8\xab\xd0\xec\xce\x83"
- "\xbc\x66\x23\xaa\xed\xee\x90\xbd\x22\x07\x3f\x0a\xd9\xc7\x54\x4e"
- "\xbf\xc5\x23\xba\xbd\xa5\xb3\x8c\x76\xf1\xda\x0e\xfa\xf3\xe0\x5c"
- "\xb7\x88\x31\x8d\x0a\xdc\x1c\x8b\x1c\xb0\xd3\x79\x6d\xa7\x14\xed"
- "\x2f\x3e\xa0\xe6\xaf\xa5\xe0\xff\x75\xba\x3d\x43\xf3\xf0\x0c\xfb"
- "\xef\xeb\x72\x8d\x4b\xf3\x3a\x64\x0c\x73\xad\xe2\xd6\x87\x30\x1f"
- "\x20\x03\x26\x60\x0d\x54\x7e\x0f\x0a\xde\xe7\xf5\xab\xd5\x6a\x46"
- "\x36\x59\xd3\x54\x5c\x48\xc8\x78\x79\xa3\x49\xcb\xeb\xf5\x93\xc1"
- "\xbb\xa1\x5b\x6c\xec\x47\x93\x07\xde\x2b\xe7\x3c\xc6\xbb\x2a\xaf"
- "\x16\xac\x32\x69\x11\xf4\xa3\x4d\xd9\xcf\x9d\xac\x3f\x31\x77\xdd"
- "\x3c\xc9\x18\xd7\xe4\x78\x68\xa2\x72\x35\x9f\xd9\xbc\x88\xcb\x9d"
- "\xf7\x9a\x09\x3a\xbb\xf9\xa6\x2c\x39\x47\x89\x68\xde\x34\x52\xbe"
- "\xcc\x9b\x6f\x33\x74\x2c\xef\x97\x5a\xb7\x88\x10\xaf\x11\x5b\xa3"
- "\x22\x24\x63\xed\xf3\xd8\x41\xa7\x29\x50\xda\x5d\x1e\x90\xdf\xe0"
- "\xe4\xef\x8a\x84\xf5\x71\x23\xa6\xc6\x0d\xd4\x1f\x4a\xbf\x75\x09"
- "\xc6\x87\xb4\xd3\x04\x5b\x17\xf8\x33\x6d\x78\xaf\x45\x03\xad\x02"
- "\x3c\x4e\x32\x7d\x32\xbf\x32\x8d\x7d\x60\xb8\xad\xd6\x28\xda\x1c"
- "\xdf\x2e\x93\x16\xdc\xe1\x45\xbb\x4c\x68\x97\xfb\x0c\xcb\x4c\x84"
- "\x7d\x93\x20\x6f\xc3\x65\x3c\x6b\x39\x3f\x2f\x73\xc6\xb7\x91\xf5"
- "\xbf\x6a\x43\xd9\x94\x54\x6d\x14\x26\x6e\x23\xd3\xa0\xec\x3a\x5d"
- "\xde\x24\x9e\xac\x3f\x3a\x69\xf3\xf1\xa1\x5b\xd8\x27\xc8\x79\x10"
- "\xfa\x6d\x2a\xf7\x21\xc6\x4f\x1f\xe3\x99\xaa\xbf\x18\x9e\x0e\x2b"
- "\x68\xdd\x52\xbe\x04\xb8\xec\x4f\x4d\xef\xb2\x96\x2b\xd3\xbb\xec"
- "\x35\x2e\xcf\x78\xf0\xfe\x8e\x35\x6a\x82\x0e\xae\xe0\xf9\x5a\x65"
- "\xaa\x7a\x87\x6e\xd9\xc3\x78\xa5\x7c\x27\x58\x5e\x74\x1d\x04\x3e"
- "\x14\x90\x13\xc1\x3a\xa9\xdb\xeb\x99\x61\xe8\x23\x6b\x9a\x33\x5d"
- "\xea\x07\x93\xf0\xa5\x82\x61\xdd\xe2\xe3\x7d\xae\xa9\xa8\x3f\xe5"
- "\x7b\x8d\xbf\xdd\xe1\x73\xee\xd1\x2a\xbe\x7a\x93\x35\x8d\xee\x09"
- "\xa5\x7f\x75\xb0\xd5\x1d\xe5\xb3\x9c\xe8\x47\xe1\x86\x1c\x3f\xcc"
- "\xf3\x54\xb5\x36\xe2\x81\xfd\x5f\x2d\xe3\x33\x85\xec\xce\x3d\x6a"
- "\xdf\xc8\x83\xf1\xaf\xce\x69\xac\xcd\xe3\xb9\x3d\x48\xff\x28\x54"
- "\x72\xf9\xc5\x9d\xa2\x66\xcc\x02\xcd\x6b\x15\xce\x8d\x56\xd8\x91"
- "\xe5\x9b\x35\xc1\xdf\x73\x18\xb3\xa0\x8f\x4f\x94\xbf\x94\xc1\x27"
- "\xdd\xde\xf2\x51\xa9\x79\xa0\x7c\xfa\x95\x79\xa0\xfc\x0b\xfc\x9e"
- "\xe9\xae\xe6\x2a\xe5\x45\x86\x9d\x22\x2a\xbe\xb8\xd3\x59\x26\xeb"
- "\x27\x55\x37\xd3\x24\x97\xf7\x8c\x66\x81\x2e\xe5\xc8\x5b\x67\xe8"
- "\x01\xe6\x17\x6b\x8c\xbf\x75\x41\x92\xa7\xf1\x0e\xe3\x4a\x89\x45"
- "\xad\x83\xdf\x6c\x93\xdf\xaf\xf4\x6e\xf2\x85\x3c\x85\xbb\xf8\x3b"
- "\xad\x61\xfb\xc8\x11\xc8\xd3\x16\xa4\x26\xb5\xdf\x6a\x1b\x99\x05"
- "\x9d\xed\xa8\x55\xfe\xd0\x16\x19\x2f\x0a\x32\xcd\x31\xa2\x58\xae"
- "\x91\xc6\xba\x9b\xe3\x45\x61\xbe\xb3\xc5\xd6\x3b\x2e\x79\x73\xa1"
- "\x2b\x84\xb4\xc5\x30\x2e\x8d\xe8\x02\xed\x5e\x32\x69\xfb\x2e\x4e"
- "\x70\x10\xb7\xf9\x62\xc5\x0d\xfb\xbe\x37\x9e\xcc\xff\x97\xe3\x31"
- "\x2a\xbe\x9d\xb2\xb6\x7c\xdd\x4c\xff\x95\x43\x26\xa6\x43\x90\xb6"
- "\x38\x15\xed\xb6\x2c\x31\xfa\x27\x48\x9e\xa3\x52\x77\x56\x2c\xec"
- "\x98\x1b\x15\x9f\xaa\x75\xee\x2d\xd0\x7f\x4f\xd5\xa9\xf7\x9b\x3a"
- "\x92\xd7\x80\xd8\x9e\x77\xae\x5c\xeb\x5c\xb6\x7a\xfd\xaa\x91\x23"
- "\x13\xe6\x4a\x66\xf5\x5d\xdc\x2d\xb5\x6a\x3c\xdd\x72\xd4\xc0\x9b"
- "\xed\x12\x3c\xa3\xfd\x9b\x2e\x8b\x65\x3f\xab\x40\x77\x73\x2f\xc8"
- "\xa6\xbe\xfb\xdb\x68\xd6\x6d\x71\x8f\x5f\xa3\x59\xb7\x7f\xad\xe0"
- "\xa1\xe5\x4b\x97\x6d\x88\x4b\xbd\x23\x7e\xdd\xb0\x6a\x27\xea\x4e"
- "\xbf\xe1\x5e\xe8\x8a\xb4\x39\x9b\x78\x6c\xf1\xbe\x57\x16\x15\x7f"
- "\x87\xbe\xce\x81\x8c\x15\xb4\x94\x44\xa9\x05\xba\x4c\x7c\x91\x75"
- "\xf8\x20\x75\xb6\x13\xf6\x14\x78\xcb\x8a\xb6\x87\x60\xd7\x5d\xe0"
- "\xf5\x19\x94\xfb\xb8\xb5\x8e\x63\x3a\x8f\xd1\xe3\xd5\x7b\x39\xd6"
- "\xb9\x1d\xd7\x0f\x71\x1d\x88\xeb\x6f\x9d\xab\x30\xef\x61\x5f\xfa"
- "\x75\xec\x4b\xef\x7d\x4b\xfa\x03\x85\xcb\x89\x7d\x82\xf0\x7e\x01"
- "\xdb\x20\x41\xaa\x30\xf3\x3a\x38\xe7\x45\xda\x6e\xe7\x13\x94\xcd"
- "\x57\x21\xf7\x06\xbd\xf5\xa2\x7a\x8c\x4f\xec\xca\xe3\xef\xad\x8d"
- "\x3a\x45\x15\x69\xe9\x69\x1f\x53\xba\xc3\x92\xd1\xed\xad\x40\xd9"
- "\x55\x0b\x98\x4e\xfd\x7d\x8b\x56\x7e\x03\x38\xc9\x3e\xec\xb3\x0d"
- "\xbf\x4f\xd2\xbe\xd5\xed\xb9\x06\x39\x2e\x54\x2c\x88\xb3\xe9\x78"
- "\x6f\x7a\xb0\xb2\x4f\x44\x4c\xd9\xa7\x15\x25\x86\x1c\xe0\xbe\xdc"
- "\xe0\xd3\x84\xf8\x7a\xab\x4a\x96\xaf\x59\xbe\xcc\x39\x7a\xed\x60"
- "\x8a\x8b\xae\x57\xb8\x7c\x95\x73\xcd\xf2\xa7\x9f\x59\xbe\x56\x46"
- "\xc6\xe3\xb7\x09\x63\x7e\x96\xc8\x1c\xd5\x64\x9c\xfb\x72\xde\xc0"
- "\xf4\xad\xf8\x84\x63\xb2\x89\x9a\xd1\x1c\xc3\xaf\x53\xcd\x37\x76"
- "\xba\x13\xe7\x1b\xcf\xaa\xb8\x13\xbe\x31\xe5\x6a\xae\xf3\xac\xfc"
- "\x8e\xf5\x49\xda\xea\xeb\x8b\xff\xbe\x75\x0a\x68\x69\xd2\xe9\x76"
- "\xa1\xdb\xbb\x35\xc7\xa0\x5b\x90\x9e\xf5\xeb\xb6\x54\xa7\xd4\x1f"
- "\x18\x63\xa1\xff\x12\xc6\x57\xf5\x0d\xda\xad\x1c\x97\x23\x5d\xae"
- "\x27\xdb\xc7\x6c\xe5\xba\x18\x26\xea\xf3\xa3\x7f\xca\xa1\x37\x59"
- "\xbf\x55\x1a\xf0\x50\xa7\x8b\xeb\xd3\xe7\x41\xd7\x9f\xa6\x67\xe5"
- "\x9a\xb3\xe6\x1b\xb3\x95\x75\x0a\xc7\x10\xd1\xaa\x01\x47\xee\xd1"
- "\x3e\xeb\x97\xeb\xb0\xfc\x0d\x02\xc0\xe2\x75\x60\xe8\xb9\x5a\xfe"
- "\x5e\x31\xa7\xa9\xd8\x70\x15\xdb\x78\xed\x19\x75\x95\x02\xff\x48"
- "\xdf\xd9\x86\x67\xfd\x6c\x77\x32\xdc\x20\x6d\x3d\xcc\xf0\x54\xec"
- "\xbb\x67\x47\x80\x77\x46\xf5\xd9\x4f\xcf\x2e\x89\x9b\x97\x31\x3e"
- "\x12\xcf\x30\x70\x91\x71\x56\x95\xaf\xa9\x6c\x37\xeb\xcf\x5a\xbd"
- "\xed\x46\x7b\x00\x0f\xfa\xaf\xc2\x66\xf8\x4d\x04\xf5\x76\x33\x7e"
- "\x8c\x7b\x3c\xce\x3a\xbe\x75\x8c\x2f\xca\xed\x8d\x93\x6d\x5e\x97"
- "\x19\x80\xb4\x43\x7d\x3e\xec\x5b\x29\x59\x6f\xac\x5e\xe5\x2c\x5a"
- "\xb9\xea\xc9\x82\xf5\x4b\x9f\x5c\x5e\xf0\x4c\xf1\x58\xe7\x33\xab"
- "\x1e\x2b\x5a\xfd\xf8\x93\xcc\x35\x6b\x4b\x9e\x79\xfc\x49\x27\x6b"
- "\x96\x82\x69\xb3\x66\x15\xdc\xfb\xf0\xfc\x47\x06\xd3\xbd\x4b\x91"
- "\x86\x99\xff\xac\xec\xb1\xea\xd5\x43\xd3\xa7\x7e\xbb\x60\xea\xdc"
- "\x87\xe7\x2c\x90\x87\x5e\x7a\xdf\x4f\x5b\x95\x3a\x43\x02\x1f\xda"
- "\xc0\x4b\xa5\xe8\xdf\x01\x27\xe9\xf9\x49\x2a\x5e\xfa\x73\x45\x89"
- "\xf1\xd2\x9f\x03\xd2\xcf\xed\xc1\xef\x30\xd1\xf7\x42\xf8\x41\xbb"
- "\x3f\x9f\xad\xf8\xeb\x9a\xc5\xdd\xde\xe7\xea\xfa\xf8\xeb\x79\x79"
- "\x96\x92\xfd\x94\xd4\xfa\xec\x73\xd0\xff\x15\x87\xe2\xdf\xf5\xcd"
- "\x27\x9f\x3b\xd6\x3b\x9f\xec\xd5\x29\xcf\xf5\xce\x2d\x91\x56\x89"
- "\x79\xe5\x35\x3c\xaf\x54\xeb\x49\xcf\x4f\x96\x3c\xd5\xaf\x7c\x5b"
- "\xc8\x98\x57\xb2\x6c\xcb\x3d\x29\x39\xff\xf8\x5e\x4e\xbc\x8c\xcb"
- "\x35\x7d\x5d\xc6\xb9\x9c\x5c\xbf\xb3\xed\x5c\xc6\x6b\xda\xb0\x8f"
- "\x4b\x61\x2b\x60\xfc\xea\x16\xc2\xbe\x73\x99\xc2\xe9\x7b\x6e\x5e"
- "\xe3\x66\xbb\x59\xe7\xa7\xa1\xa7\xe9\x7b\x6f\x0b\xef\xb3\xcd\x6a"
- "\x4e\xf9\x6c\x8c\xf5\xba\xa8\xb8\xe1\x5e\xf6\x2d\xe2\xb9\x13\xea"
- "\xdc\xdf\xc7\xb3\xcf\x4f\x62\x5e\xe8\x9b\xcb\x7e\x2f\x41\xff\x77"
- "\xc9\xef\x12\x7e\xef\x84\x11\xef\xa1\x64\x24\x99\xcc\x23\x7d\x54"
- "\x6b\x12\xd0\x37\xdf\xdb\xc6\x75\x30\x3d\x83\xf4\xdc\x3e\xe4\x35"
- "\xf7\xd1\xaf\xd2\xd6\x4b\x3f\x7d\x9d\xc5\x58\x63\x51\x78\x3f\x3f"
- "\xb9\x3f\x5a\xa5\xa6\x53\xe5\x92\xcf\xa4\x93\x97\x06\xb0\x4c\x1a"
- "\xf4\xba\x9c\x56\x95\x7b\x2f\xa7\x55\xe5\x85\x3e\x5a\x3d\x77\xe3"
- "\xe5\xb4\xaa\x6c\x8b\xdb\x57\xd2\xd7\x51\x9e\x9f\xcc\x34\x63\x1e"
- "\x43\xbb\xb7\x81\xcf\xea\xfa\xe8\xf7\xbc\xe5\x72\xfa\x3d\x3f\x22"
- "\x35\xfd\x2a\xf9\x7c\x55\x3c\x9c\x86\x54\xe3\xc6\xd0\x2d\x26\xfd"
- "\x3c\xd8\xf3\xd5\xfc\xad\x7b\xc6\xe3\x45\x93\x56\xf8\xa2\x17\x3f"
- "\x5c\x79\x1e\xd1\x67\x8b\x8b\x88\x4e\x5f\x5f\x13\xe6\xbc\xbc\xae"
- "\x74\x85\xb1\xe8\x84\xb1\xe6\x81\xfb\x36\x9e\x3b\xf3\x37\xa1\x38"
- "\x9d\xe9\xc9\xdf\x18\x03\xbf\xb7\x29\xbb\xf4\xf9\xde\xef\x7f\x74"
- "\x8d\x1f\xed\x4f\xdf\x42\xce\x23\xf5\xb7\x73\x7a\x04\x3c\x34\x83"
- "\xd3\xd9\x77\xab\x3f\x98\x05\xb1\x5c\x4a\x0d\xf7\xfb\xbd\xfc\xdf"
- "\xdf\x99\xe8\x24\x7d\x54\xb8\x74\xd5\xb2\xd5\x2b\x56\x7c\xb6\x2a"
- "\x8a\xdf\x57\xf3\x79\x35\xfe\xae\xd9\xc0\xee\x8a\x27\x36\xa2\x4e"
- "\xd8\xff\xc5\x1d\x6a\xdc\xfc\x3e\xf4\xdf\xca\x26\x65\x4b\x2e\xec"
- "\x50\xe7\xc0\x5f\xc8\x8a\xd3\xcf\xe0\x91\x17\x9c\xc2\xfb\xfd\xfc"
- "\xbe\x3e\xfe\x7e\xe7\xe5\x7d\xfc\x02\xa5\xee\xe3\x17\x46\x69\xeb"
- "\xf8\x1c\xce\x0b\x98\xff\xac\x91\xb6\x26\x3f\xb3\x1f\x04\xe6\xcc"
- "\x1d\x98\x2f\x77\xce\xdd\xe0\xbf\xa7\x60\x43\x9a\xdc\x2b\xe6\x6f"
- "\xaf\x44\x2f\x8a\x76\xf6\x45\xe0\xfd\x31\xfe\xf6\x0a\x7f\x73\x89"
- "\xbf\xff\x29\xf3\xe0\xbe\xea\x14\xc9\xb9\x23\xde\x3b\x1b\x4f\xc9"
- "\xef\x63\xc3\x56\x78\xa1\xdc\xb0\xad\xad\x30\x19\xf9\x7c\xfa\x0e"
- "\xd5\x1f\x6d\xdc\x17\x5c\x5f\xc1\x06\xbf\xaa\xe3\x22\x7f\x57\x8d"
- "\xac\xca\x86\x78\xe1\xd0\x15\xd7\xee\xed\x15\xce\xfe\xbf\x49\x50"
- "\x3e\xa8\x77\xaf\x52\xff\x0e\x31\xcb\x3e\xfb\x8f\x76\x7b\xb7\xd9"
- "\x92\xfd\x4f\x95\xef\xd0\x36\x97\xe1\x93\x55\x25\x7d\xa0\xc8\xca"
- "\xfa\x93\xe7\x39\xa7\x68\xdb\xac\x46\x39\x5e\x6e\x9b\x15\xbf\xc7"
- "\xe9\xdc\xb8\x65\xe0\x59\x7a\xe1\xc2\x15\xf6\x4d\x33\xfa\x7c\x5f"
- "\xcb\x07\xa1\xfc\xb6\x5e\x1f\x31\x6f\xf9\xa0\xc6\x38\xdc\xf0\x6e"
- "\x5f\x9c\xaf\x62\x88\xc7\x63\x9e\x3f\x36\xaa\xef\xaa\x86\x80\x43"
- "\x0b\xd2\x30\x9f\xd8\x2e\xe3\x11\xae\x8f\xd2\x88\xe2\xbb\xf9\x9b"
- "\x3d\xdb\x2e\xe8\xf3\xd0\x4e\x67\x19\xe3\xb3\xed\x25\x86\x1b\x44"
- "\x3e\x21\xf7\x03\xb6\x53\x2f\xce\x71\xf5\x19\xb0\x15\x4d\xb6\x8f"
- "\x32\xf0\x0a\xd2\x36\x19\x3f\x85\xbf\x73\x1d\xdf\x26\xf7\x8a\x95"
- "\x05\xc5\x85\x1b\x0a\x56\xae\x5a\x59\x32\x98\xdc\x4b\x9f\x59\x39"
- "\x01\x49\xce\xc7\x0b\x57\x16\x17\xac\x94\xd1\x8a\x65\x20\xe4\x92"
- "\x0d\xc5\xbc\xf7\x71\xd9\x1e\xbc\x4d\xda\xf2\xa6\xed\x93\xd4\x78"
- "\xbf\xbd\xd6\xe0\x53\xf9\xed\x6f\x91\x47\x7d\xbe\x57\xf2\x9b\xc1"
- "\xe9\x68\xe7\x07\xcc\xc3\x2a\xbe\xcf\x8e\x36\x65\x5f\x6c\x6f\xbe"
- "\xdc\x27\x6b\x7b\xd0\xf0\xc9\x02\x7f\xdb\x58\xd6\xe3\x60\x81\xff"
- "\x77\xd0\xe5\x65\x76\x64\xf5\xfa\x77\xea\xdf\x1d\xe7\xbe\x92\xf1"
- "\xee\x6b\x58\xdf\x6e\x7f\x20\xe0\x9e\xce\x31\x7b\x75\xb9\xda\x31"
- "\x2d\x0e\x5f\xe9\xcb\xcb\xb0\xf8\x9c\xd4\x84\x48\xbc\x2f\xdb\x8e"
- "\x0f\x31\xf6\x3a\x8c\x7a\x9c\x9b\x4c\xd0\x77\x3b\x5e\x0d\x9b\xfc"
- "\xe9\xd2\xff\x18\xe5\x00\xcb\x67\xf8\xd1\x04\x7b\xdb\xb5\x63\x6f"
- "\x32\x8e\xc0\x7d\x24\xd2\x0f\xf7\xf9\x09\xee\x28\x67\x18\x48\xc3"
- "\xf8\x5f\x35\x36\x3e\x2d\xbe\x9f\xa6\x4c\x9f\x05\x03\x7a\xed\x72"
- "\x74\xd2\xd4\xa5\x45\x45\xac\x83\x96\x2e\x2f\x7a\x66\xcd\xea\xb5"
- "\x7a\xd7\x4d\x59\xc1\x61\xa8\x65\x96\xbb\xf4\x37\xce\x55\xcb\x97"
- "\x2f\x53\x49\x7a\x47\x26\xee\x59\x29\x3f\x86\x2a\xcc\xff\xb7\x15"
- "\xf6\xd9\x8a\x55\x7b\x84\x69\x47\x3b\x7e\xe7\xa4\xfe\x91\xfd\x5a"
- "\x55\x94\x38\x47\xab\x2a\x35\x64\x5f\xf6\xb3\x87\x7d\xce\x9c\xf6"
- "\x2e\x21\xf7\x78\xd0\xaf\xbe\x3f\xa0\x9d\x03\x82\xe4\xe3\x33\x5f"
- "\x69\x71\x70\x0e\xf6\xd2\xbb\x62\x61\x5b\x85\xf2\x99\x30\xf3\x37"
- "\x6b\x39\xa6\x04\xde\x63\xfe\xff\xc2\x09\xa5\x27\xab\x82\xbd\x7b"
- "\x2f\xa6\x74\xcc\x37\xab\xc0\xfb\xab\xb3\x2f\x97\x6f\x9f\xe5\x72"
- "\xb9\x67\x5f\x4b\x9f\xd3\xa0\x71\xdc\x37\xe8\xc1\x7f\xbe\xf7\x8c"
- "\x35\xe3\x46\xfd\x9b\x08\x7c\xcf\x65\x79\x5e\x21\x86\x0e\xb9\x87"
- "\xfd\x1a\x4e\x92\x6f\x9b\xe2\x29\x5f\x61\x9c\x6f\xa0\xed\x34\xf9"
- "\x2a\x55\xdf\xfa\xca\x0d\xf9\x43\x3b\xa5\x2d\xc7\x30\xd4\xb8\x5e"
- "\x35\x40\xf1\x97\x6f\xaf\x41\x5b\x9e\xc3\xe3\xf9\x60\x9f\x1d\x54"
- "\xb5\x40\xfa\x8b\xa8\x98\x1a\x3d\xdc\x7e\xc0\x99\x68\xc0\x41\x5e"
- "\xb4\xdf\x12\x32\x68\x65\xe4\x89\xe7\x89\xa9\x4b\x8b\x31\xc1\x5e"
- "\xb9\x62\xc5\xf2\x35\x6b\x8d\x38\xe3\xae\xd5\x45\xcb\x54\x5c\xf1"
- "\xbb\xd0\xfd\xeb\x21\xc3\x93\x39\x34\x39\x52\xd5\x6d\x92\xbd\x3b"
- "\x96\xd7\x44\xa4\xff\xa8\x9c\x73\xbd\xf4\x5e\x83\x3e\xff\x3a\x49"
- "\x35\xf3\x94\xff\x55\x8d\x5d\xd9\xb6\xd7\xbe\xde\xed\xad\x2e\x31"
- "\x6c\x5b\x5e\x6b\xed\xa2\x9b\xf8\x5b\x9e\xf2\x2c\xc1\xee\x97\x45"
- "\x3b\xaf\xad\x22\x4f\x9d\xf1\x2d\x3a\xb6\x9b\xb6\xbf\xac\x62\x68"
- "\xfb\x57\xb1\xaf\xc8\x4b\x1f\x69\xd5\x4e\x9f\xc8\xb4\xfa\x61\x9f"
- "\x65\xb0\x4c\x0c\xe9\x64\x1f\x5e\x8e\x7d\x55\xdd\xce\x76\x1d\xeb"
- "\x32\xfe\x5e\x43\x3b\x55\x1f\x84\x8e\x86\x4e\x7f\x29\x18\xb2\x3b"
- "\x7d\x5b\x37\x92\x85\xeb\x80\xbe\x0e\x36\xed\x61\xda\xd6\xd0\x07"
- "\xd0\x65\xba\xce\x0e\x72\x3d\x41\xaa\x6e\xd6\xd7\xfd\xf7\xea\xeb"
- "\xac\x7b\x91\x0f\xfa\x7f\x48\x9d\xe2\x55\xfb\x37\x6e\x2e\x27\x37"
- "\x7f\x9b\x52\xc5\xad\xba\x75\x06\xda\xc1\xdf\x62\x0c\xc1\x16\xc4"
- "\x7c\xa7\xba\x04\x6d\xc8\xd1\x7d\xc0\xc1\x2b\x35\x2d\xca\xb7\xbf"
- "\x7a\x19\xd3\x00\x70\x0f\xe8\x70\x21\xaf\x35\xe8\xff\x1b\xf5\x78"
- "\xd9\x35\xdb\x8c\x3a\x30\xfe\x85\x60\x37\xbb\xd9\x76\x06\xde\x95"
- "\xf8\x6d\xab\x92\x7b\xe9\x41\xe8\x7d\xab\x60\xdf\xb5\xbe\xef\xed"
- "\xd5\x34\x19\x63\x21\xd7\xad\xe3\xce\xb1\x84\x2c\xbc\xce\xa7\xd7"
- "\xb5\x9f\xd7\x02\x0c\x98\x78\xae\xd4\x2e\x9e\xd9\x03\x98\x16\x8c"
- "\xeb\x21\xfd\x3b\x6b\xdb\xaa\xce\xb3\x9f\x63\x10\xe3\xf6\x97\x45"
- "\x41\xd4\xc6\x7b\x50\x43\x8c\xef\xd8\x35\x9e\x67\x7a\xbd\x98\xdd"
- "\xb7\xb7\x84\xf2\xa0\x3f\xe4\xa1\xbc\x9d\x5e\x9c\xc9\xf5\xb2\x2c"
- "\x70\x5f\x5e\x42\xdf\xa0\x7f\x8e\x8a\x8b\x67\x0e\x38\x57\xd1\x90"
- "\x53\xf4\xe2\x53\xdc\x47\xbc\x1f\xcc\xfe\x87\x48\xb3\x72\xdc\xfd"
- "\x93\xf4\xe2\x23\xdc\x3f\x8c\x8b\xf0\xd9\xea\xa2\xdd\x79\xf7\xf3"
- "\x99\x6b\xd6\x99\x9b\x4b\x61\x73\xaf\x60\x5d\x52\xfb\x11\xcf\xe1"
- "\xf9\x7b\x49\x7c\xef\x59\x26\x34\xd9\xbf\x1b\xb9\x7f\x6b\x3f\xda"
- "\xdc\x21\xb4\x4f\xbd\x24\x8e\x86\x89\x3e\x35\x51\x34\x62\x4a\x63"
- "\xbc\x4d\x9e\x33\x7c\x2e\x7c\x0f\x05\xdc\x95\xec\xcb\x66\xd9\xb1"
- "\x91\x6c\x7c\xa6\x9e\xbf\x05\xd4\x1a\xae\xa7\xd6\xe2\x7a\xfa\x5d"
- "\xb4\x96\xfc\xeb\x38\x3e\xca\x4b\x5b\x7f\xef\xae\xe5\x3d\xb6\x6b"
- "\x70\x3f\xdd\xf9\x6d\x59\xd7\x88\xdf\x1f\xff\x23\xfd\xde\xff\x47"
- "\x72\x3e\x2a\x9f\xc7\x36\xe7\xfd\x8e\x9a\x73\x7f\x47\x9e\x76\xa1"
- "\xf1\xbc\xae\xec\x29\xae\xa3\x12\xb0\xf6\xf0\xf9\x73\x9b\xd6\xe5"
- "\x18\x8c\xf6\x9b\x79\xff\xa0\x35\x1c\x22\xff\xaa\x7f\x67\x1c\x7f"
- "\xda\x70\x9e\x2c\xfe\x55\xbf\x91\xf7\x6a\xbe\x75\x66\x4f\x60\x59"
- "\x1b\xdb\x94\x51\x3e\x7b\xcf\x7b\x92\x98\x63\x68\x55\x8c\x63\x4c"
- "\xe1\x0d\x7a\x99\x8d\xf2\xb0\x39\x8d\xf2\x32\x56\xdc\x6e\xa6\x07"
- "\x70\x6a\x59\xa0\x68\xd2\x8c\x91\x42\xc7\xf9\x23\x4f\x5e\x3c\x7d"
- "\x5e\x6c\x66\xfa\x70\xcc\x56\x0d\xfd\x05\xdc\x72\x41\x03\xcd\xa8"
- "\x03\x38\x5b\xf4\x35\x5c\xcb\x8e\xf3\x94\xe1\x5f\xc5\xdf\x82\x7b"
- "\xe9\x36\xeb\x3c\xb3\x45\xbb\x78\xf6\x40\xd5\x05\x32\x73\xbf\xf1"
- "\xbe\x4d\x95\x7c\xcf\x30\x5f\xe2\xfd\x1f\x1b\x78\x92\xf0\x33\xe3"
- "\x67\x61\xbe\xc3\x95\xcf\x70\x56\x02\x87\xfd\xe8\xab\x3d\x7c\x55"
- "\xbc\x68\xcf\xe1\xb8\x24\xfa\x1c\xaa\x2f\x1d\x72\x14\x15\xf2\x7b"
- "\xcb\x90\x99\xda\xfd\x1a\xe4\x88\xd7\x70\x1a\x6a\x28\x43\xf3\xfa"
- "\x22\xbb\xa1\xeb\xea\x6b\xe4\xb9\x64\x1b\xaf\x6b\xee\x94\xdf\xd6"
- "\x78\xe9\x80\xa1\xfb\xbe\x3f\x9c\xcf\x6e\xd6\x9e\x30\xf1\xba\x8f"
- "\xcf\xb9\x4f\xe7\xf3\x7d\xc8\x03\xfd\x7f\xbd\x3e\x86\xd6\xc8\xf9"
- "\x05\xcb\x7e\x7f\xf3\x09\xd8\xb2\xcd\x62\x57\x1e\xf1\xfe\x4f\xc6"
- "\x16\x11\xca\x68\xb7\x8a\xd6\x70\xb3\x3c\xb3\xdb\x1a\x8e\xc9\xfd"
- "\x1f\xbc\x4f\x9b\x13\x0e\x59\x61\xfb\x1e\x63\xda\x19\xe9\xbc\x77"
- "\xc4\xeb\x6a\x73\xc2\x22\x34\x77\x83\x95\xbf\x85\x39\x42\xee\x1d"
- "\xe8\xe9\xad\x0e\xcc\x1b\x36\x84\xac\x68\x7b\xb4\x17\x56\x57\x5e"
- "\x3a\xcb\x1b\xf2\x66\xf5\xe6\xed\xca\x33\xf3\xb7\x9d\xb9\xce\xb8"
- "\xb4\x01\x73\xdd\x28\xcb\x7d\xa5\xa7\x29\x9b\xf9\xe5\x83\xbd\x73"
- "\x4a\x3e\xbf\xd0\x85\x71\x73\x6d\x5e\x9a\xd6\x95\x67\x8a\x01\x36"
- "\x78\xdf\x26\xbf\xc9\x19\x0d\xe9\xdf\xb8\xea\x80\xfc\xb6\x91\xa8"
- "\x6e\x28\x47\x3e\x33\xc3\xe5\x58\x10\xfc\x6d\x10\x61\x7f\x2d\xb5"
- "\xdf\xb6\xaf\x32\xc7\x5f\xf6\x28\xf8\xe9\x95\xc3\x2c\xcf\x31\xdb"
- "\xc8\x83\xce\x27\xd8\x86\x79\x45\xfa\x06\xc4\x20\x63\x31\xfb\xc8"
- "\x83\x13\x3a\x28\xad\x0c\x7c\xab\xd6\xa0\x5e\x79\x38\x00\x19\xf4"
- "\x68\x02\x76\xe8\x2b\x33\x98\x6f\xac\x9d\xec\x2b\x37\xf2\x90\xf4"
- "\x4f\xcb\xdc\x9a\x1d\x88\x74\x50\x73\xf9\x9f\xa9\x39\x1a\x28\x3f"
- "\x7c\x3e\x64\x56\x7e\x6a\x66\x86\xbb\x92\xdf\x79\xc0\xab\x05\xb1"
- "\x3d\xd4\xdf\xde\x00\xcf\x8f\x31\x86\xfd\x55\xcd\x15\x5f\x39\x6c"
- "\xcc\x8b\xaf\xdc\x86\xba\x2c\x8e\x9f\x21\x84\x83\xb4\x9a\xc7\xf8"
- "\x5b\x3e\x1e\xd1\xed\xa2\x09\x1b\x79\x4d\xee\x95\x4e\xcc\x51\x72"
- "\x75\xb8\xe7\x14\x5c\xe4\xbf\x02\x5c\xe6\x99\xe6\x3a\xb9\x2f\x85"
- "\x36\x3d\xe6\x8c\x01\x76\x2c\xf3\xb1\x25\xd0\xf1\x1e\xcf\xa7\xbc"
- "\x66\xfb\xea\x23\xa8\xc7\xd9\x1a\x3d\x46\x1c\x87\xa7\x41\xc3\xf8"
- "\x78\xce\x41\xba\x4f\x9e\xe7\x2c\xd5\x4d\xd7\x84\xcb\x86\xf9\x3a"
- "\xef\xc7\x78\x58\xc7\xf1\x5a\x40\x59\x8c\x06\x06\x30\x32\x72\xec"
- "\x08\xc0\x98\xfd\x21\xef\x7d\x41\x4f\xc4\x84\xc3\xf4\xde\x45\x8c"
- "\xf4\xd0\x9d\x32\x96\x44\xc5\x17\x77\x0e\xdd\x42\xf7\x08\x93\x55"
- "\xfa\x74\x6a\xd5\xde\x1c\xf4\x6d\xa5\xf2\x01\x74\x1e\x8a\xf3\xff"
- "\x4b\x47\x5d\xd2\xff\x4f\xd8\x9c\xa5\xf5\x72\xdd\x71\xe4\xc1\x6e"
- "\x6f\x5d\x38\x48\xaf\xc8\xf5\xd7\x6d\x7c\xc6\x43\xea\xd8\x57\x97"
- "\x86\xec\x8b\x65\x9b\xf8\x2c\xab\xb6\x2e\x76\xa0\xea\x9f\xd2\xbe"
- "\xe6\x77\x53\x5a\x3b\xbb\xfd\xc2\xb7\x58\x7e\x93\x4f\x87\x6d\x3d"
- "\x4b\xaf\xda\x45\xf5\x62\xd8\xcf\xaf\x2e\x51\x7d\x23\xef\xc7\xf2"
- "\xfb\x68\x8f\x0b\xf7\x75\xfb\xea\x2f\xf1\x5e\x40\xdd\x02\xe1\xfd"
- "\xb2\xbf\xcb\xb6\x98\xe6\x3b\xd8\xa6\x7a\xb5\x24\x68\xfa\x5d\x96"
- "\xbe\x0e\x28\xe3\x62\xf4\x37\x47\x12\xbb\x1c\x83\x03\x00\x82\xf9"
- "\x6c\xd6\x69\xda\xf5\xc9\x25\x2f\x99\x7a\x60\x0b\x5e\x32\x91\x0d"
- "\xf2\x95\xb1\xe3\x06\xca\xc6\xbb\x1b\x4e\xd3\xab\xbf\x8d\x9a\x28"
- "\x0b\x3f\x5b\xe8\x8b\x85\xd7\x00\x6e\x2e\xaf\x91\xb6\x9c\xe7\x35"
- "\xae\x9d\xf2\x9c\x72\xd5\x4e\x1a\xa5\x01\x1e\xef\xf7\x54\xdd\x40"
- "\xa3\x78\x9d\x12\x69\xae\x82\x98\xda\xf7\x34\xd6\x22\x2a\x6e\xa0"
- "\xb1\x89\xf5\xbe\x7a\x40\xad\x63\xee\x6a\x97\x73\xab\x10\x7d\x09"
- "\x73\xab\x93\x80\xbb\x57\x78\xd3\x85\xf8\xa2\xc3\xa4\x7c\x13\x76"
- "\x6e\xb7\xd6\x29\xbe\x93\xfb\x7c\xe0\x37\xde\x47\xd5\xf7\x94\xd2"
- "\x64\x3c\x90\xcc\x31\xd3\xf8\x3b\xd4\x71\xeb\xc4\x36\x89\x87\x7e"
- "\x86\x3f\x56\x71\x2b\xc7\x06\x93\x67\xf7\x0b\x96\xaa\xfd\x28\x3e"
- "\xdf\x1f\xa4\x9d\x32\x1e\xe3\xb6\x9d\x94\xf1\xc2\x4e\xb2\xb5\xac"
- "\x90\xed\x3a\xac\x64\xd1\x4c\x8c\xaf\xe6\x63\x39\x03\x4f\x00\x6f"
- "\xae\x8f\x79\xa3\x35\x7a\xce\xef\x29\x11\x9a\xff\x09\xb6\x45\x77"
- "\xc6\xfc\x6b\xf6\xd3\xdc\xf6\xa8\x3a\x8b\x9a\x4f\xa1\x46\xc0\x6b"
- "\xbc\x81\x6c\xa7\x68\xd7\x35\x81\x22\xe2\xfd\x8a\x9b\xfc\x6b\x0e"
- "\x02\xf6\xae\x1b\x79\x2c\xd8\x0e\xfa\xa8\x31\x61\xd7\xb1\x40\xa4"
- "\x8d\x5a\x20\xdf\x73\x8a\x85\x84\x83\x3c\x0f\xcb\xf6\xee\x72\x38"
- "\x0b\x54\x0c\x06\xd9\xd6\xde\x7d\x3e\xbd\x1d\x81\xf3\x12\x5e\x61"
- "\x00\x5c\x62\xb4\xc9\xa0\xb5\xe2\xaf\x5d\x6f\xf8\xd7\xec\x25\xee"
- "\x1f\xce\x8f\xe7\xda\x40\x27\xf2\x9e\x49\xec\x17\xce\x83\x77\x1f"
- "\x02\xee\x37\xfa\xf6\xaa\x79\x0f\xb5\x2f\x4f\xfd\x4e\x3e\x8f\xb6"
- "\xd3\xb2\x0b\x34\x52\x6b\xfb\xbb\x6e\x63\x5c\xd1\x77\xd9\x81\x92"
- "\x3f\xa7\xf6\x49\x85\xec\x83\xef\xb7\xb4\xca\x3d\xbb\xfa\x91\x73"
- "\xa2\x9a\x50\xfa\xac\xfe\xb8\x06\x3d\x10\xc4\x95\x75\x81\xd4\x27"
- "\xe3\xd9\x0f\xa8\xfe\x4f\xd6\x34\xd5\xbf\xdc\x16\xb6\x57\x52\xf5"
- "\x71\xdc\x7e\xa2\x8d\x71\x35\xfa\x98\xbf\xe1\xa8\xf1\x9e\x30\xfb"
- "\xdb\xf7\x38\x48\xf1\x9f\xf0\x01\xee\x87\xba\xed\x16\xd1\xc7\xb2"
- "\x48\x97\x7d\xa4\x3c\x1f\x69\xf8\x06\x43\x7e\x0f\x17\x28\x7f\x6e"
- "\x07\xeb\xa8\x46\x93\xd0\x79\xb3\xfe\xb8\x5e\x36\xac\x7c\x32\xea"
- "\x6b\x51\x3e\xe5\xba\x94\x48\x87\xde\xf1\x42\x4d\xa3\x3d\x6c\x47"
- "\x0a\xe8\x2a\x8c\x07\x03\x03\xe1\x4b\xfa\xf7\x33\x77\x3f\x08\x9b"
- "\x7a\x20\x9f\x8f\x32\x70\xbb\xba\xbd\xbf\xdd\x23\xd4\xdc\x66\x77"
- "\xbe\xb1\xb6\x24\x6c\xa0\xb1\xd7\x2a\xf8\xac\x24\x9f\x77\x09\xdb"
- "\x2b\x73\x43\xf6\x9d\xc5\x4a\x6e\x76\x6f\x85\x9d\x2a\xf5\x6d\x41"
- "\x84\xca\xb9\x5d\xbc\xb7\x8b\x79\xd3\x40\x6e\x33\xe0\x60\xfe\x53"
- "\x3c\x49\x8d\xe7\x0a\x76\xbf\x6b\x3b\x46\xdb\xd0\x26\xd9\x36\xb4"
- "\x51\xb6\x4d\xff\xbe\xd4\x29\x6a\x18\x29\xd7\xcb\xaf\xae\x3d\x2a"
- "\xbe\x8c\xaf\x32\x97\xbf\x9d\x7b\x8a\x1a\xdf\x95\x67\x60\xd0\x27"
- "\x6a\x1f\xa4\xa1\x44\x0c\x7e\x61\xf0\xd5\xc1\x6c\xc8\x55\x30\x77"
- "\x16\xbf\xc4\xb1\x28\xf5\x6f\xd4\x01\xf6\x6b\xa2\x7a\x67\xb1\x3c"
- "\x63\x88\xfa\xf8\x1b\x9f\x7d\x7a\xa8\x71\x14\xf7\xd5\xf8\xfd\x94"
- "\xab\xf8\xb0\xf1\x0b\xbc\xd6\xac\xe6\x79\x0d\x47\xa1\x7b\xb7\xa9"
- "\x39\x95\xe1\x47\x9e\x26\xfd\xc8\xe3\x75\xec\x55\xe2\x28\xf5\x9d"
- "\xc8\xdc\x82\x39\x64\xc3\x21\x79\x56\x12\xf8\xae\x8f\x1a\xfa\xaf"
- "\xe1\x10\xfb\x24\xf5\xfa\x03\x6c\x00\xaf\x94\xa9\x73\xe4\xdd\xde"
- "\xc6\x3c\xc3\x46\x91\xdf\x24\xf3\x8a\xa3\x9c\x6f\xee\x86\x73\xd2"
- "\x5f\xa0\x4a\xc6\x3c\x38\xad\x9f\xb3\x6b\x7c\x4a\x5f\xd7\x70\xb1"
- "\x0f\x3f\xca\xd6\x06\xe9\x03\x79\x26\x90\x69\xc0\x75\x4b\xdc\xe5"
- "\x77\xc1\x1a\x0f\xf4\xed\xfb\x34\xc8\xef\xa6\x2b\xbf\xd6\xc6\xa3"
- "\x06\x8f\xa0\xbd\x03\x55\x6c\xd0\x86\xdb\x8e\x8c\x25\xc9\x03\x5d"
- "\xc2\x31\xf8\x2b\xf5\xcc\x93\x8d\xa1\x78\x3a\xcd\x8d\x6a\x1e\xa5"
- "\x83\x1a\xda\x84\x94\xf5\x86\xb6\xcf\xb6\x27\xf6\x4c\x37\x6c\x11"
- "\x45\x67\x1b\xf4\xcb\xeb\x36\x49\x6b\x9f\xad\x8d\x63\xb4\x6c\x2a"
- "\xe3\x98\x53\xaf\x0d\xe0\xd8\x5e\x51\x9f\x2d\x12\xe3\x33\x99\x18"
- "\x67\x35\x9f\xdd\x72\xaa\x98\x4c\x05\xc5\xbc\xd7\xb5\xe8\x18\xcf"
- "\xaf\x84\x07\xb6\x40\x26\xec\x13\xc8\xf9\xe6\x95\x64\x5d\x54\x08"
- "\xd8\x1e\x57\x16\xc7\xde\xe2\xb8\x5b\x1c\x3b\x2f\xe6\x71\x65\xe2"
- "\x7e\x38\xec\x39\x9b\xb0\xd9\x3a\xd8\x5f\x26\xe6\x15\xd0\xc7\x27"
- "\x38\xfe\x97\x29\x10\x8a\xd0\xe6\x33\x64\xe1\xd8\x5e\xd1\xea\x45"
- "\x1d\xad\xe1\x8f\xe4\xdc\x62\x68\x31\xec\x69\x4d\x9e\xcb\x71\x68"
- "\xf6\x45\xc7\x42\xf6\x45\xc7\x55\xbb\xcf\x09\xd5\x6e\x85\x37\xe3"
- "\xaf\x74\xdc\x30\x4b\x99\xc4\xfd\xdf\x7e\x14\x05\x7c\xcd\xe7\x30"
- "\xc7\x7c\x0e\x52\x67\x39\x9b\xa9\xac\x44\x74\x04\x60\x1b\xb3\xff"
- "\x26\x9f\xd7\x65\x7f\x1c\x6e\x23\xb7\x8f\xeb\xfe\xfd\xf9\x33\x32"
- "\x56\x59\x14\xcf\x9e\x22\xbd\x4c\x27\xca\x74\x36\xd3\x25\x9f\x43"
- "\xb6\xbd\x35\xac\xca\x16\xc8\x7b\x2e\x1f\x47\x07\xbd\xcd\xbd\x74"
- "\x40\xdb\xb9\x7d\xdc\xfe\x28\xd3\x04\x34\xd0\xdb\xea\xe8\xd1\xdb"
- "\xc9\x6d\xfc\x1d\x46\x9d\x9d\x68\x27\xda\x2a\xdb\xd9\x83\x76\x1e"
- "\x2d\x24\x8a\xd4\x54\xce\xfb\x34\xd3\x41\x3c\x3f\xf4\xfc\x01\x76"
- "\x74\xa9\x8f\x30\x0f\x34\xff\xb4\xcc\x67\xfa\x3e\x6c\x93\xb2\x10"
- "\xe6\x83\x21\xd1\xc1\xf6\x7e\xa0\x18\xbf\x68\xbd\xb4\x71\xa4\x7d"
- "\xcc\xdf\x88\x7d\x1a\x6d\xd2\x3e\xa1\xb2\x0e\xd1\x01\xdb\x34\x12"
- "\x88\x22\x4f\x21\xda\x8f\xf9\xe3\x29\x1d\x7f\xce\xbb\xf9\x9f\xaa"
- "\x5d\xd6\x22\xca\x7a\xff\xd1\x4a\x53\xa0\xad\x92\x8c\xb6\x2c\x46"
- "\x3e\xb4\xc7\x01\x58\x43\xe4\x77\x19\xd0\xce\x5d\xc0\x33\x12\xd7"
- "\xa6\x96\xce\x08\x60\xfe\x89\x06\xcf\xa3\xb4\x9d\x67\xd1\x8e\xb3"
- "\xe4\xf0\x95\xc1\xfe\x7a\x88\xed\xc5\xd7\x3e\xbe\x36\x8f\x46\x05"
- "\x69\x4f\x87\xe2\x3b\x19\x37\xe8\xba\xd3\xf4\xfa\x35\xbd\xb1\x81"
- "\x38\xde\x9a\x7d\x51\x27\xf3\x91\x8c\x11\xc4\x63\x46\x37\x78\x86"
- "\x7d\x69\xd6\xa3\x8e\x6e\xd7\x70\x89\x8f\x77\x22\xe1\x39\x03\xcf"
- "\xfc\xcd\xa8\x2c\x5e\x13\x40\xb9\x0e\x01\x9a\x31\x7c\x51\xbd\xe8"
- "\x38\x5f\x99\x86\x29\xcf\x9a\xfc\x8c\x72\x50\xc7\x21\x9e\xfb\x1e"
- "\x28\x0b\x99\x9e\xfd\x19\x8d\xbd\x3a\x9d\xf2\x7a\x4e\x7f\xfa\x9b"
- "\xf7\x2d\x18\x1e\xda\x96\x79\x9a\xf6\xde\x98\x28\x63\x4e\xa9\xcb"
- "\x94\x1e\x7c\xbd\x9d\xf7\x0a\xae\xb2\x5e\xa9\xff\xd8\xe7\xe9\x2a"
- "\xcb\x75\x18\x78\xe0\x7e\x6f\x7f\xb8\x5f\x3d\x1d\xf6\xe6\xf6\x07"
- "\x6b\xfb\xcb\x32\x5e\x9c\x67\xc7\xcb\xec\x8f\x58\x99\x73\xc4\xc1"
- "\x31\xbc\x31\x76\xee\x0d\xd3\xda\xdd\x64\xf1\x9c\xe1\x35\x99\xd9"
- "\x74\xa4\x3e\x9b\x1a\x30\x27\x17\x5d\xae\xcc\x17\xcf\xb3\xef\x83"
- "\xd2\x21\x6c\x93\xf2\x59\x4a\xb1\xd6\x65\xab\x7a\xd9\xb0\xe1\xdf"
- "\xb8\xa6\xf4\x02\x99\xd4\x37\x52\xde\xb0\x4c\x73\x8a\x68\xad\x49"
- "\x2b\xac\xe7\x98\x57\x99\x5e\xde\xb3\x2f\x34\xe2\x48\x49\xdb\xc7"
- "\x0d\x99\xeb\x72\x0c\xde\xbe\x86\xc6\x72\xec\x3b\x6b\x48\xd9\x72"
- "\x6a\xbc\x7e\x83\xc7\x14\x9b\xbe\xdf\x6f\x53\xb1\xa5\x5e\x2f\x6f"
- "\x3c\x8f\xba\xd4\xfb\x95\x31\xcc\x61\x24\xdc\x35\x34\xaa\xfe\x3c"
- "\xb9\xd8\x0e\x2a\xf8\x44\xd9\x6c\x3c\x2f\x9c\xdd\x69\x15\xb1\xff"
- "\x72\xd1\xee\xd3\x7d\xb1\xf1\x42\x6b\x39\x9e\x9e\x70\xf4\xb7\x57"
- "\x52\x35\x5c\xfa\xfc\xc8\x78\x2c\xea\x1b\x7a\x44\xb5\x35\x64\xe6"
- "\x6f\xc6\xf2\x5a\x1e\xaf\x0d\xf3\xb9\x1f\x35\x86\xbc\xd1\x66\xc4"
- "\x0c\xeb\x77\x1f\xd1\xa7\xe6\x3b\xda\x40\xcc\xbf\x42\xdd\x7e\xff"
- "\x3a\x1e\x33\x7e\xe0\xe4\xb3\x46\x7d\x73\x9c\x1f\xa4\xf1\x3b\x4e"
- "\x63\x5f\xf8\x5c\x49\xcb\x1f\xcc\xe0\x79\x8f\x3e\x67\x7c\xdf\xd9"
- "\x9b\xa6\x6c\x18\x1e\xcb\x18\x87\x46\xb5\x8e\x3c\xb4\xdb\xfb\x83"
- "\x65\xc6\x78\xc6\xe3\xba\xfa\x5e\xed\x0f\xdc\x41\x53\xf3\xac\x2b"
- "\xe0\x67\xd3\xbf\xf7\xcc\xb1\x11\x72\x91\x7f\x9f\x31\xbe\xc9\xef"
- "\x91\x54\xdc\x70\xef\xda\x0d\x34\x62\xfe\x17\x2c\x32\xf6\x06\x7f"
- "\x77\x54\x8d\xbb\x3f\x38\xd6\xb7\x9f\x96\x2b\xe9\x2d\xbf\x35\xc8"
- "\x73\x0c\x13\xc6\x60\x15\xff\xae\x53\x8d\xbf\xc6\x39\xf7\x1f\x9c"
- "\xe9\xab\xe7\x87\xb6\xde\x71\x14\x75\xb0\x5f\x07\xc3\x57\xb6\xc9"
- "\x0f\x9a\xb8\x0e\x9e\x5b\xa9\xf1\xf5\x07\x4d\x57\xb0\xc5\x5c\x4c"
- "\x5f\x4d\x9f\x4f\x06\x3a\xff\xae\xe8\xeb\xa6\xf4\x09\xb5\xe4\x78"
- "\xbf\x2c\x68\x1e\xaa\xe2\x38\x59\x4f\xd2\x0f\x97\xf2\x7b\xe6\x75"
- "\xff\x78\x5e\x8b\xfb\xe1\x7b\x01\x1e\xb7\x7b\xf2\x32\xe6\xf0\x5c"
- "\x5f\xda\xe2\x3f\xdc\x3f\x0e\xe5\x90\x96\xf9\xeb\xb3\x11\x73\xd5"
- "\x46\x1a\xcb\xdf\xf4\x44\xba\x5c\x27\x08\x5d\xff\x64\xf7\x57\xb2"
- "\xc8\xf1\x95\x5a\x3e\x0f\xf0\xc3\xe3\x98\x5f\xca\xb3\xe9\xb2\xfe"
- "\x9a\x86\x3d\x1c\xfb\xef\xcd\x4b\xc1\x01\xaa\xaf\xf6\x3d\x8d\x67"
- "\x57\xdc\xf3\x10\x63\x2d\x3f\x48\xfb\x8a\xe5\xde\x25\xfb\x3c\xaf"
- "\xe2\xf1\xba\xc2\xd9\xe7\x27\xb4\xef\x69\x85\xcb\xbe\xa7\x8f\x14"
- "\x13\xaf\x55\x1f\x6f\x90\x71\xbc\xf6\x4d\x0b\xd2\x0f\xb6\xea\xeb"
- "\x31\xc7\x24\x5f\xb1\xbd\xfb\x1c\xcf\xc1\xfe\xee\xdf\x8e\x7c\x3c"
- "\x4e\x14\xb8\x29\x57\xd9\xf0\x15\x39\x1a\xf8\x27\xae\xfd\x1f\xf1"
- "\x5a\x5f\x4a\x9d\xb8\x93\x48\x96\xa9\xf6\x16\x4b\x9f\xb3\xea\xd7"
- "\x78\x9e\x64\x11\xd5\x5b\x9d\xb8\x66\x80\xe7\xb2\x71\xe5\x31\xdc"
- "\x85\x6b\x96\xa8\x6e\x08\x32\x5f\x62\x0e\xeb\xc0\x3c\xc1\xd2\x65"
- "\xf7\x16\xf6\x77\x56\x91\x69\x13\xd8\xfa\x6d\x52\x3e\xb4\x3f\x5a"
- "\xd0\x12\x82\x7d\xb6\x9b\x68\x6d\x54\x5c\x72\x7e\x89\xcf\x04\xfd"
- "\x68\x81\x67\x37\xfb\xae\xfc\xc8\x95\xe8\xbb\xf2\xa3\x19\xf8\x55"
- "\xe2\x77\x82\xe8\xc7\x19\xb8\x2e\xe8\xfb\xfd\x78\x46\xb7\xf7\x47"
- "\x0b\x40\x47\x69\x63\x5d\x9d\x4e\xe4\xf2\xe8\x07\x9e\x17\xd9\x1f"
- "\xb3\xa9\xf6\xee\x9c\x87\x67\x8b\xb0\x37\xf8\xf4\xf6\xe6\xe2\xd9"
- "\xe6\xf4\x60\x5c\xb3\x83\x26\x37\xa0\xcd\xf6\xd7\x88\xdb\xcb\xf8"
- "\x76\xd9\xb7\x3a\xe3\xcf\x69\x32\x4c\x6e\x7f\xc8\x8e\x72\xa0\xa5"
- "\x18\x3f\xda\x6f\xd0\x53\xa7\x13\xef\x1b\x99\xba\x00\x43\xd9\x41"
- "\xc8\x0f\x18\x46\xfe\x5e\xda\xdf\xc0\xdf\xd7\x40\x9f\x22\x1f\xe6"
- "\xc4\x16\xe3\x0c\x68\xb7\xf7\xc7\xb9\x1f\x14\xa9\xfd\x03\x2e\x1b"
- "\x8e\x2b\xcb\x31\x2f\x52\x95\x47\x9d\x16\x55\xe7\x56\xe7\x29\xfa"
- "\xd1\xc3\xaa\xde\x1f\x4f\xec\x4f\x96\xca\x46\xc2\xbe\xab\x0f\x72"
- "\x5c\x0c\xb6\x87\x26\x05\x46\x84\x29\x50\xaf\x61\xcc\xaf\x98\x97"
- "\x5b\x26\xfc\xa7\xe8\xc7\x17\x5a\x23\x1d\x57\x39\x1e\xfe\x58\xfa"
- "\x64\x89\x4b\xe5\x14\x28\xbd\x5d\x7e\xcb\xfa\x2c\xed\x1f\x1d\x08"
- "\xc9\x98\xf0\x7c\x2f\x63\x8b\xb2\x9f\x06\x8f\x0d\x98\x63\xf7\xc6"
- "\x54\xd4\x90\xb7\x81\xd3\x91\x16\x08\x87\x64\xec\xc5\x3e\x3f\x72"
- "\xaf\x4b\xc9\xd4\x4f\x3e\x92\xf1\x17\x18\xdf\xe8\xfd\x7e\xc6\x59"
- "\xf3\x79\x5d\xdc\x06\x0f\xe6\x7f\x81\x68\xb7\x9f\x65\xc2\xb9\x8e"
- "\xd7\x0a\x7f\xf2\x2e\xf8\x4e\x68\xd5\x5e\xd7\xd5\xb5\xe1\x27\xf2"
- "\x3c\x90\x27\x2a\xce\x86\xec\x5e\x17\xdb\x24\x55\x65\x03\x2c\x53"
- "\xeb\x85\xbf\x2b\xb3\x62\x5e\xb7\xf7\x27\x27\x3e\x70\xab\xbe\xb9"
- "\x4a\xb8\x27\x8c\xb6\x37\xe8\x6d\x47\x9a\xdc\x9b\x9b\x50\xa7\x62"
- "\x4d\x06\x69\x7f\x56\xbf\x6b\x56\xe8\x67\xb6\x07\xd8\xc7\x55\xd1"
- "\x62\xff\xb2\xde\xb1\xe1\xaa\xf0\xd8\xbf\xec\x73\xd4\xd1\xa3\xd7"
- "\x71\xf4\xbf\x59\xc7\xd1\x2b\xd5\x01\xdd\x70\xe3\x69\xfa\xe9\x82"
- "\xab\x9f\x3b\xfe\xd4\x29\x79\xc5\x57\x91\xab\x74\xe6\xcf\x3e\x8c"
- "\x61\xfe\x16\xb5\xed\x9c\x27\xbf\x3b\x65\xa2\x72\x8e\xbb\x19\xf5"
- "\x3d\x66\x6b\x71\x5f\x22\xff\xba\x3f\x52\x3b\xfd\x54\xc6\xba\x6b"
- "\x29\xe1\x39\x5b\x83\xaf\xa7\xa6\x62\x4f\x8f\x69\xff\x5e\xa6\xf7"
- "\x6e\xf4\xc3\xae\x38\x3e\x6b\x0d\xff\x91\x02\x4b\x78\x7d\xf5\x18"
- "\xaf\x6b\xfb\x84\x7d\xe7\x3c\x0d\xba\x01\x36\x7a\x4c\xd2\x03\xf6"
- "\x8b\x9a\x6f\x55\xe6\xc8\xf9\x56\x48\x9e\x4f\x1c\x22\xe3\x69\x7a"
- "\x57\x87\x79\xed\x3b\xd6\x93\xe7\xec\xf6\xd2\x3c\x8e\xb3\xc9\xeb"
- "\xce\xc2\xe6\xac\x9d\x1b\x4d\x17\x72\x3e\x05\xdb\x9f\xe3\x6c\x06"
- "\xc2\x41\x8a\xc1\x8e\xae\xbf\x48\x59\xf5\xb0\x3d\xa1\xb3\x6d\xac"
- "\xd7\x1b\xf5\x58\x9b\xdb\x2f\xf6\xc5\xda\x6c\xe0\xb5\x9e\x36\xdc"
- "\x5f\x24\x73\xac\xba\x32\x67\xd7\x45\x1a\xb5\x7b\x1d\xb9\x76\xf1"
- "\x5a\xde\x3f\x94\xed\xc3\x76\x85\x8c\xbb\xb9\xda\xc5\xeb\xf9\x7d"
- "\xb6\xcf\x7a\x8e\x0b\xdc\xab\xb7\xcc\x72\x0d\xe4\xaa\xe8\xfd\x33"
- "\x39\x0e\x46\x7d\xde\xe2\xa8\xed\x35\xea\xa9\xd9\xea\x44\x1f\x34"
- "\x81\x7e\xb9\xa9\xfa\xd6\xf0\xc3\xaa\x8d\x8b\x95\xfa\xc1\x28\xa5"
- "\xdf\x83\xf4\xa6\xa5\x3f\x9e\x88\xed\xca\xa3\x09\x9d\x94\xad\x7c"
- "\x1a\xae\xc1\x98\xf8\x66\x11\xef\x9f\x97\x3d\x45\x8e\xd8\xae\xfc"
- "\x34\xcf\x6b\x94\xce\xdf\x39\xe7\x5f\xd9\x3f\x45\xc7\x84\x22\xca"
- "\xe6\xfd\x07\xf6\x7b\x70\x6e\x92\xf9\x27\x8f\x2a\xa5\xec\x78\xd8"
- "\x33\x94\x63\xd4\x5d\xce\x99\xab\x1e\x5f\xfd\x54\xf1\xd2\x92\x95"
- "\x8f\xad\x2c\x5a\x59\xb2\x41\x86\x50\x18\x2b\xff\xdd\x37\x7a\xd9"
- "\x02\xb9\xe9\x1c\x67\x5f\x8c\xea\x5b\x8f\x7b\xf3\x42\x94\xd7\x0f"
- "\xae\x8a\x5e\x6f\x4a\xfd\x57\x0f\x5b\xaa\x5e\xfa\xee\x1c\xb0\x04"
- "\x4d\xbf\x97\xe7\x62\xb7\x21\x6d\x9b\xee\x63\x73\x4a\xcf\xa7\xf9"
- "\x1a\x82\xe0\xe3\x49\x27\xe9\xe7\x51\xde\x0f\x41\x5f\x65\x07\x4a"
- "\x4f\xf3\x5c\x72\x12\xaf\xf1\xb7\xf0\x5a\xc6\x1a\xce\x7f\x60\x33"
- "\xfb\x30\xb0\x3f\x14\xf8\x70\xef\x49\xfd\x59\xff\x66\xfa\xae\xe8"
- "\x6a\xc7\xde\xe8\x39\xc7\x0f\x84\xc8\xdb\x29\x56\x17\xee\x12\xe7"
- "\x0a\x77\xc6\xc5\x7f\x1b\x88\xf2\xd5\x90\x93\x6f\xe0\x77\xbd\xf0"
- "\xd9\x5d\x90\xbf\x11\xa7\xe9\xc0\x1b\x8c\xc3\xec\x42\x71\xae\x2f"
- "\x16\xc2\x81\x77\xf1\xdc\x83\x9f\x26\x7c\x99\x33\xe2\xf6\xd7\xf8"
- "\xdd\x47\x9c\xbf\x78\x05\xfb\x84\x1d\x38\xc3\x78\x89\x9a\xcc\xfb"
- "\x43\x9e\xc2\x74\xe4\x8f\x29\x3c\xdf\xba\x26\xb0\xb5\x95\x9c\x8f"
- "\xc9\x7b\x8b\xff\x09\xb6\xe7\xde\x7a\x4d\x98\x3c\x82\xf7\xe0\x02"
- "\x1d\x51\x52\xe7\xd5\xde\x74\xb3\x0f\x42\x03\xec\xed\xfa\x4c\xb2"
- "\xf9\x32\x29\xa3\xdb\xfb\xd6\xc4\x5e\xff\x0b\x9b\x1a\x6f\x79\xcc"
- "\xe3\xd8\xd9\xd0\x47\xdd\x3c\x7e\x32\x1e\xcc\xc3\x80\xb9\x84\xf7"
- "\xe7\xd4\xf9\xa8\xb7\x8a\x60\x5b\x3a\xae\x5e\x1f\xbf\x25\xbf\xa7"
- "\x32\x61\x1b\x2d\xe1\x35\x6d\xde\x77\xe6\xd8\xd2\x90\xd7\x4a\x35"
- "\xdf\xf8\xf9\x9f\xe4\xbe\x3a\x74\x0a\xef\x97\x34\x96\xc1\x4e\xb0"
- "\x39\xb7\xb1\x7d\x13\xf5\x52\x39\xef\x6d\x6a\x17\xcf\x1c\xe0\xfd"
- "\x68\x79\xb6\x50\xc6\x64\xff\x1d\x35\x5e\x20\x73\x3b\xbd\xc5\xdf"
- "\xea\xb6\xf5\xd1\xf5\xe7\x77\x32\x0c\x51\x63\xf5\x5b\x4b\x4d\x95"
- "\x0c\x43\xbb\x78\x36\xc7\x28\x07\xda\x0d\xe2\x72\xe0\x83\x1b\x65"
- "\x39\xce\x2b\x63\xa2\xd8\xf2\x85\xcd\x5b\x2c\xeb\x54\xcf\xf3\x04"
- "\xe4\x30\x7a\x31\x76\x00\xf7\x0b\x98\x4e\xb8\xe6\xc9\xb5\x5f\xcc"
- "\xd7\x65\x2c\x1e\xdb\x62\x0a\x04\xff\xee\x97\xf8\xb0\x2f\x6e\x09"
- "\x74\x96\xb4\x07\x7f\xfe\x74\xc3\x27\x64\x2e\x7e\x82\xfb\xef\x17"
- "\x72\xdd\x1f\xfc\xb4\x4f\xe1\xf7\x8b\x01\x5d\x35\x0e\xea\xb2\x55"
- "\x64\x87\x4d\x16\x3a\xe2\xe0\xb3\x03\x0d\xc1\x23\x8e\x4b\x98\x53"
- "\xfc\xbc\x39\x68\xb6\xea\x67\x2d\x54\x39\xde\x27\x86\x9d\xda\x91"
- "\xee\xb0\x79\xf0\xbe\xd3\xf0\xbb\x80\x4d\xda\xb1\x1d\xef\x40\xdb"
- "\x26\xa6\x5b\x90\x0e\xe4\xb6\x16\xa9\xb3\x19\x78\x1e\xc8\xe7\xed"
- "\x25\xad\x2b\x9e\xec\xb0\x6e\xf1\xf3\xf9\xcf\x1c\x6b\x34\xd7\xc4"
- "\xfb\xc0\x7c\xee\x9f\x63\x21\xf0\xd9\x7f\x5e\xcb\xd3\xdf\x67\x27"
- "\xbd\x1f\x6b\xbc\xef\xf6\xfe\x62\x99\x71\x66\x9f\x63\x2a\xb1\x8f"
- "\x41\x4c\xf7\x15\x94\xb1\x86\xce\xab\x7d\x54\xf6\x15\xe4\x75\x44"
- "\x3e\xf3\xc8\x7b\x9d\x28\x57\xdf\xeb\xbb\x29\xcf\xfa\xfc\x62\xbf"
- "\xe1\x1b\x85\xfb\x43\xbd\x7e\x3d\xa0\x45\x97\xaf\xc2\x15\xb6\x35"
- "\x04\xc3\x3e\x6f\x21\xde\x1d\x87\x3e\xec\x37\x16\x91\x9c\xfb\x71"
- "\x4c\xe6\x67\xc8\xa4\x65\x3a\x0f\x71\x8c\x8e\x23\x61\xd2\xcf\x39"
- "\x1f\xbc\x43\x3f\x13\x9f\x7e\x96\x7e\xf1\xcf\xbe\x3d\xc7\x98\xbe"
- "\x5e\x76\x30\x5f\xd9\x6b\x07\xf3\xe5\x7a\x59\x4d\x85\xed\xf5\x8d"
- "\x11\xd3\x81\x8d\x41\x93\x3a\xfb\x70\x70\x5e\x90\x0e\x6f\x35\xfc"
- "\x56\x90\xcf\xd6\x5f\xec\x35\xe1\x1b\xb3\x4d\xc1\x7c\x5b\xae\x27"
- "\xf6\xcd\x7f\xde\x96\xbe\x41\xbc\x3f\xa8\xf1\x58\x99\xf9\x98\x53"
- "\xfa\x60\x14\x9f\xe7\x75\xb3\x81\x6a\x2e\xf6\xb6\xfe\x2d\x29\xe9"
- "\xeb\x39\xec\x74\xe2\x73\x26\x3f\x2b\x9a\x1d\x0c\x1a\x6b\xf0\x3b"
- "\x4c\x1a\xc7\xe5\x16\x9e\x3d\x22\x1c\x28\x0e\x13\xec\xb0\x50\x00"
- "\x63\x2f\xea\x10\xc5\x6b\x38\x6e\xfe\xdb\xd7\x31\xed\x95\x4c\xbd"
- "\xfd\xbc\xc4\xc9\x7b\x8f\xf0\xb0\xfd\x19\x62\x1f\x90\xf3\x84\x7c"
- "\x76\xe4\x9b\xd2\x54\xda\xc9\x7e\x2c\xe5\x1c\xf3\xb0\x5d\xaf\x3b"
- "\x64\x1f\xb3\xed\x2b\x19\xb4\xa4\xdb\xfb\x36\xec\xff\xe7\x72\xaf"
- "\x5e\xce\xdf\x5e\x70\x25\x5b\x44\x8d\x8d\xb9\xd4\xdf\x7c\x86\xe7"
- "\xab\xe3\x51\xff\x6c\xc1\xf8\xff\x72\x4a\xd4\x14\xa1\x1e\xd3\x20"
- "\xf1\xd5\x72\x37\xf4\xc0\x20\x11\xdb\x88\xfe\xea\x72\xc0\xde\x6d"
- "\xa6\xd6\x68\x93\xf4\x11\x81\x0c\x5b\xcb\xc2\xe2\x7c\x20\x7a\x50"
- "\xfa\xf7\xaa\x73\xf0\xbf\xbc\x33\x10\x7d\x8f\x5a\x8b\x43\xe4\x5f"
- "\xf3\x47\x8c\x59\xbf\x1c\xcd\x78\x8d\x2f\x2e\xa7\x71\x67\xf9\xfd"
- "\xdb\xed\x6a\x9c\xfc\x65\xae\x7e\xb5\x71\x6c\xcc\x78\x9c\xee\x7b"
- "\x66\xd5\xe3\x25\x2b\x57\xaf\x1a\x37\x6b\xf9\xba\xe5\x45\xce\x87"
- "\x94\xcb\x5d\xc2\xf8\x65\xe9\x8b\xff\xfd\x4e\x06\x8f\x29\x6c\xab"
- "\x70\x1c\xf0\x2b\xc5\x00\x37\xe2\x7f\xc3\x6e\x18\xc5\xeb\x7b\xff"
- "\x9b\x31\xc0\x0d\x5b\x84\xe3\x7f\xf7\xad\x75\xbf\xd3\xdc\x2b\x03"
- "\xda\xfb\xdd\xfc\xcc\x67\x3f\x35\xef\x2f\x67\xb1\x1c\x35\x48\xff"
- "\xb4\x77\xa6\xc5\xc7\x4a\x62\x5f\x3c\x5e\x1f\x41\x7a\xbe\x71\xce"
- "\x16\xbc\x88\x71\xe3\x9d\xa2\xbe\x73\x3f\xef\xb8\xd1\xdf\x87\x94"
- "\xfc\xca\xbc\x95\xc6\x9e\xb0\xfe\xdd\x35\xb9\x87\xad\x79\x7b\x72"
- "\xd5\x3a\xcc\x3b\xdb\x1b\xb4\x41\x16\xb5\x07\xf0\xce\x41\xe3\x4c"
- "\x99\x92\xcd\xf7\x75\xd9\x7c\xa7\xf9\x4a\xfb\xf6\x7d\xb2\x71\xc8"
- "\xd2\x27\xd7\x7f\xd5\xcb\x1e\xb2\x7c\xd6\x9e\xbf\x6e\x0f\x5f\x77"
- "\x9a\xfe\xfd\x46\x5e\x9b\xc1\xfd\x97\x71\x3f\x40\x8e\xb5\xd2\xbf"
- "\xfe\xdd\x8f\xf5\x7b\xd4\xf1\xee\x6f\xf5\xfb\x2f\xe2\xfe\x2d\xfd"
- "\xfe\x06\xdc\xbf\xaa\xdf\x43\x66\xdf\xdd\xa2\xdf\x67\xe1\x7e\xa5"
- "\x7e\x0f\x9d\xff\xee\x83\xfa\xfd\x70\xdc\xdf\xa9\xdf\x7f\x01\xf7"
- "\x23\xf5\x7b\xc8\xe0\xbb\xd7\xe8\xfb\xa7\x16\xe0\x7e\xe1\xea\xed"
- "\xf3\x43\x7e\xb5\x47\xf7\x2e\xc1\x16\xda\xab\xc6\x8c\xde\xb4\x2c"
- "\xf0\xf4\x32\x83\xbe\x48\xe7\x98\x81\x16\xa4\x8f\x0d\xd2\x1b\xed"
- "\x71\xe9\xfb\xf4\xfc\xd3\x30\xde\x04\xe3\xd2\xeb\xf5\xf4\x7c\xd8"
- "\xa0\x96\xb8\x74\x9f\x9e\x5e\x02\xbd\x58\x18\x97\xae\xc7\x75\x78"
- "\x77\x5b\x90\xf6\x38\xe2\xd2\xdd\x7a\xfa\x5e\xc3\x5f\x41\x4f\x2f"
- "\xd2\xd3\x0f\x23\xfd\x68\x5c\xfa\x12\x3d\x1d\xfa\xff\x9d\xb6\xb8"
- "\x74\xb5\xae\x20\xcf\xa2\x59\xc5\x91\x52\x96\xad\x77\x23\x41\xda"
- "\x7d\x28\x2e\xcf\x0c\x55\xf6\xdf\x6d\x41\xaa\x8f\x6f\xcb\x24\x3d"
- "\xdd\x15\xa4\x7f\xec\x89\x4b\xcf\xee\x4f\x57\xa5\xd5\xd1\x92\xfe"
- "\xd6\x30\xf9\x3b\x55\xd2\x4f\x52\xda\x96\xbf\x5a\xce\xe7\xd4\xac"
- "\xbb\xc5\x49\x67\x99\x10\x27\xe9\x57\xb3\x74\xff\xc0\x52\xf6\xd7"
- "\x52\xe7\xfd\x7e\x35\x51\x9e\x01\x63\x9f\x73\x3e\x03\xb8\x91\xd3"
- "\xfe\x5d\xc6\x3e\x99\xe0\x2e\x57\x31\x39\x95\xff\x69\xa7\x9c\xcb"
- "\xeb\xfb\x9c\xc8\xf3\x31\xaf\x6d\x32\x1c\x5e\xef\x0b\x94\x5c\x92"
- "\x3e\x91\x3c\x97\xe2\x34\x9e\xd3\xca\x73\x61\x71\x73\x2a\xa5\xf7"
- "\x7f\xb5\x5c\xe3\x73\xfb\x5e\x35\xef\x67\x59\xe4\xfc\xec\x9b\x13"
- "\x9f\x37\x48\xbf\x92\x73\xd3\x74\x87\xfd\xff\x74\x7b\x7f\x35\xad"
- "\xef\xac\xd2\xbf\xd7\xeb\xe9\x7f\x42\x7a\x7e\x5c\x7a\x65\xff\xba"
- "\x1d\xfa\xce\x66\xb3\xf4\x5c\x14\xe1\xe8\x45\x11\xd9\xf1\x17\xe0"
- "\xbd\x42\x9e\xbb\xf9\x52\xcc\x67\x73\xe8\x31\x30\x3e\x8e\xae\x13"
- "\x21\xe8\x6c\xfe\xc6\xc4\xb5\x73\xc2\x21\x9a\x53\xdc\x2d\xb6\x3f"
- "\xc6\x7e\x76\x17\x64\x3c\x28\x4f\x27\xc7\xdf\x66\xdf\xad\x30\xef"
- "\x0f\x65\xb4\x62\x8c\x6b\x58\xc1\xef\x3f\xa2\xd9\x85\x21\x6a\x29"
- "\x8c\x51\x03\x60\xef\x7e\xcc\xf0\x9b\xfc\x55\x6f\xfc\x1f\xc6\x81"
- "\xeb\xf3\xc8\x6f\xc5\x1c\x1e\xc7\xb8\xf2\xb7\xf0\x44\xf5\x6b\x36"
- "\xf1\x1b\xb6\x65\xbd\xd9\xd6\x2d\x84\x39\xd5\xe1\x1c\xdc\x3b\xd5"
- "\x0f\xef\x90\xde\x5f\x9b\x94\x2c\x1f\xd6\xfd\x31\x6d\x95\x4a\x5f"
- "\x1c\x2e\x11\xff\xc6\xe7\x8e\x0e\xf3\xf9\x27\x0b\xec\xe6\x94\xfe"
- "\x57\x9b\x77\x93\xa9\xa7\x06\xb6\xc9\xd9\x43\x26\xa5\x9f\xde\x5b"
- "\xa6\x99\x2c\x5b\x78\x5d\x51\x7e\x27\xa2\xc6\x79\x74\xff\xaa\x88"
- "\xa9\x65\x63\x3b\x6d\xfa\x02\x39\xf2\x23\xec\x4b\x7e\xf8\x93\xa1"
- "\x25\x1c\x5b\xb4\xc2\x06\x3b\xd4\xf4\x0b\xbc\xff\xf5\xaa\x43\xa6"
- "\xa8\xb4\x57\xde\x5b\x26\xd7\xa2\x7c\xce\x7a\x1e\x43\x02\x6d\x31"
- "\x3e\x7b\x24\xed\x64\xe8\x7f\x4b\x6c\x7d\x61\x66\x74\x6d\xe1\xb5"
- "\xbb\xd7\x50\x46\x6c\xad\x2b\xeb\xc5\x8b\x94\x63\x8c\x3f\x98\xc3"
- "\x66\x8b\x6e\xc7\xe0\x2a\x8c\x29\x3c\xc7\x1d\x9a\x66\x93\x7b\x6e"
- "\x7c\xaf\x99\x5e\x1f\xd5\xb0\xee\xca\xdf\xbc\x89\x61\x6e\xcb\xb1"
- "\xa7\x19\x97\x54\x6d\xdd\xb6\x13\xf3\x65\xfd\x9c\x6c\xd9\x27\x34"
- "\x1c\xf3\x16\xd3\xd0\x0b\xc2\x7f\xba\x88\x4c\xfc\x9d\x90\xb2\xe5"
- "\x72\x1d\x69\x40\x4b\x61\x94\x02\xee\x3f\x53\xd9\x1a\xee\xa3\xf7"
- "\xde\x65\x3b\x8d\xfd\x26\x91\xdf\x76\x9a\xde\xfb\xad\x35\x82\x31"
- "\x23\x02\x5b\xfa\x09\x9e\x13\xbe\xf7\x51\x58\xc6\xbe\xfd\xb5\x93"
- "\x7d\xc7\xfd\x6b\xee\xe5\xb4\x4f\x3d\x9f\x48\x1f\x89\x72\x25\x5b"
- "\xef\x1d\xe7\x67\x0f\x9f\xdb\xcd\x1c\xdd\xf4\xb3\x4b\x91\x01\x6a"
- "\xad\xe2\xff\x63\xef\x7b\xe0\x9a\xb8\xb2\xfd\x6f\x02\x5a\x6a\x51"
- "\x02\x8d\x94\x2a\x6d\x63\xd7\x3f\xa9\xff\x4a\xf7\xd9\xb7\x6e\xab"
- "\x5b\x6a\x75\xd7\xf6\xf9\xaf\x5d\xed\xc6\xfa\x0f\x2d\x6c\xd1\xf5"
- "\x4f\x44\x44\x44\x04\x8c\x96\x47\xbb\x8a\xd1\xa2\x8b\x16\x11\xf7"
- "\xe9\x2e\xed\xfa\x87\xdd\x67\xdf\xd2\xae\xd5\xd8\x62\x0b\x16\x08"
- "\xb5\xd8\xa2\x05\x9b\x52\xb4\xc8\xa2\x8d\x10\x25\x60\x32\xf3\x3b"
- "\xe7\xde\x99\x4c\x26\x24\x60\xac\xd6\xee\xef\x3d\x3e\x1f\x3e\x93"
- "\x3b\x73\xe7\xce\x9d\x7b\xce\xfd\xde\x73\xce\x9c\x7b\xce\xfb\xa7"
- "\x85\xf5\x81\x30\xfd\xeb\xfd\x6a\x5f\xbc\xcb\x19\xd5\x5a\x1e\x63"
- "\xa3\xe7\x39\xc8\x14\x1b\x6f\xa1\xdf\x33\x31\x5e\x41\xf2\x53\x26"
- "\xfe\x9a\x91\xb0\x3d\x76\x47\x77\x70\x5b\xd4\x5a\x16\xaf\xf2\xe8"
- "\x16\xc2\x7c\x91\x60\x8d\x54\x8f\x66\xb6\x5c\xf5\x44\x66\xdb\x54"
- "\xeb\xd6\xf7\x43\x5f\xe5\xa3\xb9\xad\xa1\xea\x78\x38\x2e\x6e\x0d"
- "\x1b\x3a\xcd\xf7\x7a\x14\xaa\xd3\x3c\x48\xd4\x68\x53\x47\xbf\xe3"
- "\xdd\xcc\xdf\x18\x9e\x71\x2c\x8f\xdf\x42\xaf\x3d\x54\xaf\x27\x01"
- "\x4c\xdf\x3b\x7a\xf1\xd1\x3c\xa2\x81\xbe\xf6\xe6\x55\xea\x20\xea"
- "\xe3\x65\x54\x47\x98\x9b\x79\x13\xfa\x16\xb2\x6f\x1f\xc7\x0a\xf9"
- "\x50\x75\x10\xab\x7f\xec\xe7\x95\xcd\xf0\x0e\xaa\x7b\x6b\xcc\xf6"
- "\x4b\x82\x4c\x78\x0c\x78\xff\xde\x1a\xde\x78\x6f\x23\xdb\xff\x7e"
- "\xec\x35\x11\x57\x19\x8f\x1e\x5b\xcb\xc6\x2d\x54\xc7\xc6\xed\x58"
- "\xa1\xb0\x5e\x3d\x84\xbf\x61\xed\x8e\x62\xdf\xea\x8f\x25\x8a\x32"
- "\xb2\x45\xa8\x83\xf7\xc0\x6f\x1d\xc3\xda\x63\x39\xf0\xee\xc2\x1e"
- "\x86\x63\xf4\x7b\x21\xbc\x1f\xac\x59\x47\xab\xf0\xbd\x7c\x61\x2b"
- "\x1d\x8b\x54\x12\x00\x7d\xc6\x3d\xfa\xe8\x8b\x6c\x33\xdb\x9e\x32"
- "\xb1\x5c\x96\xc7\x1f\xa3\xfb\x80\xe1\x39\x40\x1f\x25\xe2\x26\xee"
- "\x5b\xc6\xf6\xa4\xfe\x9b\xfa\x8a\x7d\xc1\xe7\xe1\x35\x78\x57\xcc"
- "\x89\x07\x63\x75\x2f\xd5\xad\x91\xae\x17\xf4\x68\xe3\xb8\x0a\x63"
- "\x86\xfe\x42\xc7\xa3\x71\x4c\xd8\x98\x1d\x77\xe5\x3c\x67\xe3\x75"
- "\x3c\x54\x3e\x1e\xac\xcc\xa9\x00\x1b\x12\xd0\x6f\xe4\x78\xb4\x30"
- "\x7e\xcd\xc2\xf3\x69\x1e\x4e\x76\xcd\xb4\xcf\xed\xde\x07\x5c\x75"
- "\x59\xde\x54\x25\x7e\x83\x45\x9b\x3c\xe3\x57\x53\x95\xdb\x7d\x55"
- "\xf3\xae\xa0\x8c\x1c\x52\x83\x79\x2e\x71\xcc\xdb\x0c\xa6\x06\x69"
- "\xbc\x59\x3b\x5e\x9e\xf1\xa0\xf8\x0c\x0b\x31\xed\x15\xfb\x09\xbf"
- "\x85\x35\xf8\xb8\x56\xa2\x89\x69\xa2\x78\x5f\x3e\xdd\x4b\x74\xcc"
- "\x86\x7b\x20\xbd\xe2\x20\x7e\xfb\x81\x51\xa9\x74\x3c\x65\xa2\xfc"
- "\x48\x8e\x17\xa0\x4f\x2c\x8c\xab\x9d\xf1\xd0\xf1\x0d\x6c\x2d\x3c"
- "\x5e\x80\x6d\xe2\x77\x15\x16\xef\xf4\x78\x2e\xb4\x2b\xe4\xea\x3e"
- "\xbe\x5f\xe8\x03\xe8\x7f\x47\xf7\x7a\xea\x75\xe3\xe6\xc7\xd2\xcd"
- "\xbe\x23\x56\xea\x3d\xf7\x15\x05\x49\xfb\x3a\x8f\x37\xba\xed\x8b"
- "\x2d\x62\xe3\xfd\xc1\x28\xd0\x53\x0f\x67\xb3\xb8\xb8\xc5\xd9\x40"
- "\xb3\xf4\xab\xa4\x1f\xe6\x87\x49\xd3\xf3\x4d\x95\x7a\xd0\xad\x55"
- "\x1a\xcc\x6f\xd4\x98\x76\x95\xf4\x42\x9f\x0b\xc4\x1b\xb4\xf7\xf0"
- "\xa1\x70\x7e\x8b\xa6\x51\xda\x7b\x57\x62\x01\xdd\xb6\x70\x13\xe8"
- "\xb2\xe9\x97\x48\x3f\xe6\x43\xf1\xc1\x72\xc1\xee\xb3\x93\x33\x6a"
- "\x9a\x71\x5f\x67\x25\x68\x84\x7c\x7a\xfc\x4e\x6e\x8b\x06\x78\x51"
- "\xe3\x48\x5f\x42\xc2\x70\x7d\x43\x5f\x5d\xc6\x33\x25\x26\x68\x17"
- "\xf7\xeb\x16\x70\xbc\x4e\xc1\xab\x06\x44\x73\xaa\xc1\x59\x9b\x38"
- "\x42\x7d\xc4\x81\xcf\x94\xf5\xe4\x83\xe3\x7c\xe8\x80\x68\xcc\x5b"
- "\x89\x36\x1f\xb3\x1d\xfa\xb9\x65\x40\x34\x5c\xeb\x03\xd7\xd0\xde"
- "\xc3\x61\xfc\x35\x8c\xe7\x0e\xed\xd3\xf5\x93\x37\x0e\x88\x66\x7d"
- "\xb7\xd2\xba\xf5\xe4\xc3\x01\x58\x47\x8c\xeb\xc6\xa5\xeb\x02\xf0"
- "\x3a\xee\x13\x76\x62\x5e\x04\x90\xce\xd9\x3d\x35\xae\x7b\x04\xf9"
- "\x19\xe6\x72\xc9\xbb\xfc\xd6\xa1\xf1\x50\xb7\x18\x7d\x52\x99\x2c"
- "\x5b\x72\x58\x98\xeb\x20\x1f\x97\xbc\x23\xfc\x0e\x76\xd5\x4d\xd7"
- "\x91\xb4\x76\x12\x41\xbf\xab\xae\x0a\x00\xec\x2d\x09\xc6\x1c\x0b"
- "\x6e\x6d\x7e\x8d\xed\x6d\xc4\x78\x71\x71\x24\x18\x70\xf9\x1e\xe8"
- "\x37\xe6\x47\xf9\x1a\x6d\xb5\xc2\xd8\x58\x80\x4e\x45\x9b\x59\x4c"
- "\xc0\xc3\x9b\x80\xf7\xd3\xd6\x82\x3c\xb0\x96\x04\xaf\x75\x92\x48"
- "\x7c\x4f\xa0\x5b\x23\xfa\x55\xa3\xee\x86\x63\xc3\x68\x38\x60\x36"
- "\xbc\x4b\xec\xda\x78\xbe\x61\x6d\x33\xdf\x58\x11\x5f\x43\x60\x9d"
- "\x09\xab\xd4\x57\x61\x6c\xf2\xaf\xf1\x5d\xd1\x46\x09\x63\x0a\xf2"
- "\x0a\x3c\x63\xcb\x80\x58\xdc\x2b\x43\xed\x04\xca\xe3\xc5\xe2\xbe"
- "\xa2\x7c\xba\xf7\xa8\x24\xca\x65\xfb\x4a\xe2\x4b\x84\xbe\x94\x72"
- "\xf8\x3b\x89\xee\x4f\xec\x85\xfa\x0f\xda\x34\xe6\xad\x2e\x70\xed"
- "\xd1\x60\xb6\x81\x92\xc5\x6e\x71\xb9\xe8\xbd\x68\x23\xc0\x7b\xa7"
- "\x3a\xf8\xab\x9b\x85\xba\x78\xef\xd4\xd5\xf3\x78\xbc\x17\xee\x29"
- "\x70\xdd\x23\xdb\xe3\xf3\x21\x93\x2b\x60\x6c\xf1\xb7\x15\xc6\x52"
- "\xf0\xa1\xd2\xb0\xef\xdf\x25\x35\xe2\x37\x67\x0b\xf9\xc0\x88\xfc"
- "\xe4\x3d\x9e\xf8\x09\x22\x8f\x91\x74\xa2\x0a\xe3\x37\xc1\xf9\x08"
- "\x31\x96\x11\xfc\x1e\x08\x6d\x31\x39\xdb\x2d\x46\x59\xb6\x5b\xbc"
- "\xc3\x74\x2b\xff\x0d\xf2\x09\xe0\x4a\x40\x13\x39\xa1\xe7\xb7\x0c"
- "\xce\x62\xfb\xa4\x4e\x1c\xc7\x7e\xd6\x93\x13\xb8\x17\x3d\x84\xc5"
- "\x52\x38\xb1\x4e\xc0\x8f\xe4\xa9\x4e\x47\x88\x05\x9e\x89\x7b\x7e"
- "\xdc\xca\xc9\x80\x27\x2a\xa8\xf7\x57\x16\x0f\xf0\x84\xde\xa3\x3e"
- "\x5e\xcf\xf0\x28\x47\x7b\x94\x35\x36\x98\x37\xbe\xbe\xad\x6f\xea"
- "\x47\xed\x87\x79\x7d\xd6\x11\x7d\xfa\x45\x12\x00\xbc\x72\x1e\xfb"
- "\x56\xd9\xd8\x8c\xef\x14\xc2\x1b\xa2\x08\xda\x40\xa9\x6c\x09\x6b"
- "\x7a\xfd\x40\xa8\x73\x91\x84\xa3\xdf\x37\xe6\x48\x81\xfa\x4d\x2c"
- "\x8e\xf9\xc7\x33\x67\xaf\xec\x45\xb8\x57\x74\xf7\xf0\xca\xe7\x73"
- "\xf1\xdb\xde\x81\x0e\x4b\x0f\xfc\xce\x95\xb6\x03\x78\xd2\x49\xc2"
- "\x81\xc7\x1a\x30\x1f\x1d\xdc\xd3\xfc\x5f\x1d\x8d\x3d\xcc\x8e\xb3"
- "\x44\xbf\x88\x28\x9b\xc8\xc7\x93\x02\x53\x49\xe0\xe6\x0b\x44\x05"
- "\x74\x75\x7c\xe8\x18\x4d\xc4\x58\x08\x79\x61\x6c\x1f\x77\x1e\xe0"
- "\xeb\x8a\x08\xde\xde\x66\xf8\xa8\x10\x74\xaf\x1c\x51\xc7\xde\xc8"
- "\xf2\xa0\x04\xc2\xf3\xfb\x2a\x85\xb8\x0f\x6c\x6c\x3f\x3a\xcf\xf6"
- "\x59\xa9\x5f\x81\x7b\x6a\x25\xf9\xfb\x63\x96\x6b\xdc\x38\x78\x3f"
- "\xc3\xbe\x8f\xe3\x3f\x04\x09\x7e\x03\xf3\x51\x50\xb7\x19\x3e\x0e"
- "\x72\xf9\x28\x50\xbb\xd5\xc7\xf1\x40\xc3\xfd\x4c\x36\x1f\xbc\x7f"
- "\x9e\x33\x48\x98\x83\x78\x3e\xa4\x06\xef\x85\xfb\x42\x6c\xd4\xc6"
- "\xf4\xf1\x78\x89\xd7\x3e\x0e\x46\xcc\x87\x77\x0a\xb6\x90\x8f\x32"
- "\xf0\xbd\x70\x4c\xa0\x5e\x20\x94\x37\x7c\xb8\xd7\x47\x5c\x58\x95"
- "\x2a\xcb\x41\x6d\x20\xeb\x83\x80\x9f\x2e\x01\x0d\xee\xc5\xd8\x4f"
- "\x66\x78\x4e\x45\x7e\x07\xa9\x88\x68\x25\x95\xf0\x1b\x7d\x91\x4d"
- "\x8b\xbe\x21\x0d\x1a\xef\xeb\x0d\x07\x7a\x04\xc8\xda\x11\xd8\x16"
- "\x62\x01\xfa\x6f\x99\x53\x61\xfd\xb1\x42\x5b\x0d\x84\xb6\x51\xc1"
- "\x35\x92\x8a\x64\xd4\xb3\xf6\xa8\x2a\xf3\xcf\x92\xca\x88\xcf\xe8"
- "\x73\x50\x26\x34\x25\xb4\x76\xd5\xb6\x16\xda\x1e\x2d\xb4\xdd\x0c"
- "\x6d\xab\x7d\xb7\x6d\x88\xf2\xb3\x6d\x3f\xfa\x6d\xd0\xf8\xd3\x36"
- "\xac\x33\x1b\x31\xcf\x0d\xee\xeb\x4a\xbb\x9f\xf4\x76\x5e\xc3\xb8"
- "\x9f\x0f\xf1\xcc\x1f\xb6\x6c\x2c\xdd\xfb\x65\xa0\xfe\xc6\x59\x74"
- "\x0f\xd8\x65\x42\x7d\x1a\xd9\xbe\xaf\xf3\x04\xfd\x21\xda\x0c\x65"
- "\x5a\x49\x57\x72\x7d\xa7\x02\x59\xb5\x6c\x12\xf3\x7b\xd4\x64\x31"
- "\xbe\x2a\xc3\xb8\x91\x3e\xf4\xbc\x01\x87\x99\xff\x6c\xd9\xab\xa2"
- "\xfd\xa5\x35\x74\xc0\x61\xa1\x2d\x8d\xa7\x5d\x4f\x4c\x48\x1b\x97"
- "\x9c\x28\xe6\xb6\x4d\x14\xb6\x9f\xbe\x10\xf7\x72\xdc\xc2\xa4\xb8"
- "\x58\xcd\xf4\x95\x09\x4b\x47\x2c\xfb\xed\x6f\x35\x93\xe3\x56\xac"
- "\x98\xff\x4a\x5c\x2f\x32\x3d\x61\xfe\xd2\x15\x0b\xd1\xf6\xa6\xd1"
- "\x8c\xff\xb7\x79\xf1\xcb\x12\x47\xfc\x62\x7c\x94\x87\xed\x0d\xf7"
- "\x2a\xd6\xa2\x0c\x0e\x6b\x47\x78\x9a\x93\x84\x62\x1c\x9f\x90\xd5"
- "\xbc\x69\x0d\xe8\x7f\xc0\x7f\x4d\xb8\x4e\xe1\xda\x80\xba\x01\xc6"
- "\x10\x04\xfc\x2e\x7f\x73\x3b\x5f\x75\x81\x7c\xe9\x04\xb9\xb2\x66"
- "\x37\x8b\x87\x57\x0b\x3a\xb9\x95\xe5\x5b\xfc\xf2\x0c\xc6\xba\xfb"
- "\x3d\x9c\xb3\x86\x0e\xde\xbf\xf9\x1c\x09\x84\x75\x0d\xf4\x92\x93"
- "\xb9\xbc\xf2\x2e\x7e\x63\x38\x5f\xc2\x7f\x13\x41\x84\x18\xe2\x4a"
- "\xb3\xc5\x8e\xdf\xf3\x83\xa6\x3a\xd2\x79\xc4\x53\x36\xb7\x4e\xee"
- "\x60\xe3\xa2\xd6\x32\xbf\xe2\x2f\xdf\x45\x1d\x66\x3d\xcd\x87\x79"
- "\x12\xe6\xff\xfb\x7a\x09\xa7\x3f\x2b\x11\x64\x47\x8c\x4d\xb8\xaa"
- "\x1e\xca\x2c\xce\xc8\xc9\x6a\xb9\xaf\x46\x39\xac\xcb\x5f\x34\xb2"
- "\x7f\xbc\xa7\x26\x88\xfd\xe3\x6f\xf7\xff\x2f\xf3\xd8\xbf\xe7\xf9"
- "\xef\xfb\x2f\x3e\xff\x66\xef\xaf\x4e\xed\xfa\xff\x46\x9e\x8f\xc7"
- "\x3b\xf9\xfe\xdf\xe7\xfe\xea\x0d\x5d\xfd\x23\xbf\x01\x6f\xd5\xfe"
- "\xfe\x1c\x09\x02\xfe\xcc\xd9\xb4\x00\x78\xba\x8e\x44\xa4\x3a\xf8"
- "\x86\xf4\x39\x24\x32\xed\x22\xc1\x7c\x84\x8d\x89\xc9\x7c\x43\xda"
- "\x35\x94\x49\xab\x67\x00\xff\x16\x67\xd7\x93\xe0\x4d\xf5\x44\x55"
- "\x99\x88\xb9\x8a\x31\xd6\x17\xe0\x4c\x33\xfc\x43\xb9\x3c\xc9\x4e"
- "\x3e\xb1\x5e\x41\xff\x26\x53\x65\x0c\xe0\x4e\x2d\x21\xc8\xbf\xc1"
- "\x31\x44\x9d\x17\xce\x1f\xe1\x0d\xcb\x60\x3d\x5b\x86\x79\x09\xab"
- "\x0f\x71\xd1\x3d\x0e\xa5\x94\xf6\xd0\x2c\xc0\x35\xbe\x62\xa6\xc0"
- "\x9b\x27\xd8\x9e\xa2\xcf\xe8\x7e\x06\x98\x27\xd5\xcc\xae\x5e\xfd"
- "\x34\x5b\xcf\xab\x43\x05\x7b\x13\xfc\xfe\x8c\xca\x8a\xf0\x1e\xc5"
- "\x98\xbf\x15\xdb\x3c\xc8\x15\xd3\xfc\xad\x87\x52\xa2\x7b\xa4\xce"
- "\x27\xca\x4a\x4b\x13\xc1\xdc\x4e\x98\x0b\x14\xe6\xdd\x7e\x98\x67"
- "\x45\xbb\xc2\x79\x23\xf4\x6f\x63\x7e\x38\x9f\x05\x7d\x2a\x6c\x33"
- "\x54\x94\xc2\xda\x73\x44\xf8\xee\x62\x82\x79\xb1\x7f\x13\xd4\x99"
- "\xba\x92\x3c\xb4\x09\xea\x65\x43\x3d\x94\x93\x59\xff\x3e\xdd\x04"
- "\x63\x70\x18\x9e\x59\xa5\x99\x8b\x65\x33\xf5\xbd\xc1\x67\xc3\x7b"
- "\x68\xea\x89\x39\x02\xd6\xb6\x40\x7c\x86\xf8\xdc\x36\x43\x25\xe0"
- "\x5f\x69\x22\xfd\x76\x06\xe7\x59\x3b\x95\xd3\xd9\x7c\x1d\x80\xb1"
- "\x01\xc4\xfc\xba\xc1\x9b\x52\x60\x4d\xef\xa0\x31\x30\x73\xd0\xde"
- "\x82\x32\x06\x95\x2b\x9c\x24\x84\xd9\x07\x40\xb6\x88\x07\x1c\x00"
- "\x79\x82\xfa\x42\x83\x2c\x01\x7d\xc9\xc1\x3c\x8f\x78\x1d\xf4\xb6"
- "\xc3\xb0\x2e\x17\xa1\x1c\x30\xf7\xea\x73\x04\x6d\xec\x98\xa3\x75"
- "\xc5\x6c\xde\xce\x72\xe6\x54\x1e\x16\x65\x01\xc4\x20\x5c\xff\x41"
- "\x16\x0e\xbc\x0e\x34\x04\x1e\x28\x05\xd9\x22\xb4\x89\xae\x1c\x74"
- "\xec\x4b\xe9\x9a\x9f\x44\x63\x36\x07\x30\x8c\xae\x74\xc2\xfb\x05"
- "\xc3\x33\x60\xcc\x6a\xa9\x2d\x9c\x61\x8c\x39\x58\x5c\xc7\x51\xe7"
- "\xb5\x40\x1b\x3c\x60\x99\x70\x0d\xde\xff\x84\x98\xeb\x0e\xe4\x8a"
- "\xca\x23\xc2\x98\x95\xb3\x6f\xc8\x66\xaa\xfb\x83\xcc\xb5\x5f\x18"
- "\x9b\x52\x94\x2b\x84\x7b\x5d\xfe\x8f\xa8\x97\x73\x20\x57\xe0\x78"
- "\xe1\x38\x41\x3b\xa5\x02\x8e\x55\x33\xf9\xe5\xd3\x95\xc2\x77\x4b"
- "\x23\xd0\x7a\x83\x34\xfe\xe6\x42\xf7\xf1\x87\xfb\x05\xbd\xf1\xd3"
- "\x01\x6e\xb4\x03\xdd\xa8\xca\x8e\x76\x52\xe8\xe3\x11\x66\xe3\x31"
- "\x7f\x8d\xb1\xd2\x30\x36\x33\x8c\xf1\x91\x8d\x18\x07\x18\xb0\x79"
- "\xfd\x39\x82\xdf\xbe\x41\x7e\xaa\xfa\x9a\xc9\xa7\x55\x19\xc8\xc3"
- "\x50\xa6\x76\xf8\x06\xe8\x17\xb6\x07\xe5\xe7\xe1\x08\x72\x6c\xd5"
- "\xb3\xee\xf9\x94\xa5\x5c\xca\x55\xd1\xd2\x7e\x04\xf3\x62\xa6\x3f"
- "\x9b\x17\xa3\x0d\x8c\xd6\xbf\x1e\x8f\x7d\xab\xc5\x79\x29\xbe\x2b"
- "\xe6\x55\x86\xf3\x28\xfb\xd7\x22\xdd\xc4\xf3\x18\x43\x18\xe8\x14"
- "\x0c\xcf\x3a\x23\xf4\xe9\x30\x94\x83\xa0\x3c\x90\xda\xf7\xaf\xd3"
- "\xfd\xe6\xb5\x9b\xd2\xa4\x7b\x70\xde\x00\x0f\x87\x40\x9d\x4f\xe1"
- "\xc8\x8b\x75\x59\xee\xe5\x2a\xdd\x1b\x1d\x68\x03\xab\xd2\x8b\xb9"
- "\x97\x31\xef\x32\x62\xc6\xa6\xb9\xb2\xb1\xc7\xb1\x41\x3a\x53\xbe"
- "\xfb\xd0\x51\x0c\xe3\xfd\x29\xc8\xff\xef\xe9\xd8\x7b\x55\xe9\x84"
- "\xfe\x99\x58\xfc\x94\x32\x23\x8d\xf7\x4b\xf5\xa1\x4f\xa3\x5d\xfa"
- "\x90\x4b\xb6\xac\xd2\x21\x4f\x42\x5b\xe5\x48\x7f\x94\x13\xa1\x5e"
- "\xbc\x8b\xb7\xe8\x7e\xdf\xaa\x46\x94\x2f\x85\xfe\x23\xbf\x94\x09"
- "\x63\x67\x74\x9f\x77\xee\xf3\x1c\xda\x00\xfd\xff\x63\x17\x0f\x88"
- "\xf3\x9a\xf1\xc1\x29\x21\xf7\xd3\x7a\xcc\xbd\x56\x05\xed\x9a\x50"
- "\x06\x67\xeb\xea\xa9\xc3\x1f\xd6\x3a\xd0\x86\x5e\x0d\x65\x98\xdf"
- "\xa7\x8c\xad\x61\x43\xf5\x1b\x28\x6e\x9c\x82\xf1\x79\x94\xe6\x2a"
- "\xc1\x71\x11\xe7\xeb\xe6\xb9\xa8\xfb\x45\xb1\x39\x9b\x0c\xdc\x60"
- "\x6f\x26\x82\xaf\x3f\xcc\xd9\xf3\xf8\xed\xb4\x09\x78\x28\x08\xe7"
- "\x2f\xd0\x17\xf9\x19\x31\xa7\x6a\xc3\x76\x3a\x6f\x83\x71\xde\x5e"
- "\xc7\x18\x12\xf0\x9c\x92\x98\x68\xf2\x61\xb2\x89\xce\x63\x8c\x1f"
- "\xf2\x26\x8c\x1d\xe6\x39\x86\x67\xa7\x8a\x3e\xca\xc8\x23\x18\x2f"
- "\x44\xe0\x93\x12\x9c\xcb\xc2\xd8\x05\x42\xbd\xbd\xe2\xdc\x73\xa3"
- "\x3f\xad\xe3\x31\xdf\x42\xd8\x7c\x3b\x55\x2d\x8e\xb5\x83\xce\xe3"
- "\x2a\xbd\x03\xe6\xb1\xfb\x98\xe2\x78\xe2\xb8\xb6\x19\x3e\x83\xf7"
- "\x2f\x8d\x10\xc7\x54\x1a\xcf\xcf\x96\x0b\x34\xaf\x62\x36\xa6\xcf"
- "\x46\x09\xf6\x27\xd7\x18\x0a\xfc\x87\xeb\x40\xf1\x7a\x7c\x77\x58"
- "\x1b\xf0\xf9\xc8\x23\x6f\x0a\x98\x55\x62\x45\x1e\xf9\x0c\xe6\xff"
- "\xaf\xb5\x12\x76\x54\x25\x52\x9d\x05\xe8\xc4\xe8\xf3\xd9\x2e\x1a"
- "\x6f\xc3\x0b\x76\x58\xc8\xa7\xb3\x25\x7c\xfa\x6c\xbf\x38\x0e\x22"
- "\x4f\x8a\xf3\x1e\xda\x68\x97\xe3\xcf\x67\x75\xd0\x46\x18\xe2\x9b"
- "\x24\x43\x7d\xd6\x2c\xc7\xb7\xcf\xaa\x11\xdf\x90\xaf\xf5\x49\x68"
- "\x63\x63\xeb\x95\x85\x54\xa4\xca\x31\xa9\x62\x39\xf3\x0d\x60\x32"
- "\x17\xf2\x96\x7e\x2e\xab\x8f\x6b\x18\xd4\xa7\xba\xb8\xb0\xe6\x95"
- "\xe0\x1a\x07\xe7\xe2\x85\xf1\xaa\x85\xfa\x25\xb8\x6f\x12\x63\x25"
- "\xdc\x53\xcb\x74\x3d\xc0\xe9\x23\x18\xbf\x1b\xea\x69\x2b\xe1\x69"
- "\xd7\x33\x19\x76\x8b\x58\xc1\xbf\xac\xbb\x67\x55\x23\xb9\x5b\xff"
- "\x0b\xfe\x9b\x0b\xe4\x34\xee\x67\xb5\x63\x0c\x49\x68\x5b\x73\x81"
- "\x7c\xf1\x29\x3c\x57\x2d\x1c\x23\xe0\xf8\x2e\x1c\xef\x87\xe3\x1e"
- "\x38\xf6\x87\xe3\x6b\x50\x9f\x13\xea\x47\x41\x79\x39\x9c\xff\x37"
- "\xe1\x08\x7d\x3c\x8d\xf2\xe6\x34\x41\x76\xc4\xf3\x13\xb0\x0c\xc7"
- "\xc7\x05\x9a\x97\x33\x9a\x9f\x1e\x01\xed\x24\x43\xff\x6b\xcc\xb5"
- "\xb4\x2d\xfd\x05\xf2\xf9\x55\x6c\x1b\xf7\x31\xc3\xef\xb7\xdc\x64"
- "\x50\x68\xe7\xf4\x69\x38\x8e\x82\xe3\x0e\x38\x26\xc2\x71\x89\x30"
- "\x06\x55\x88\x0d\xb1\xc9\x74\xcc\xa9\x9e\xc0\x9e\xc7\xe6\x3c\xae"
- "\xc3\x12\x76\x54\x96\xc6\xce\x66\xf4\xb6\x90\x53\x94\x0f\xa0\xee"
- "\xd3\x58\x17\x8e\xcf\x08\xc7\x68\xe1\x38\x41\x38\xfe\x4a\x38\x8e"
- "\x17\x8e\x13\x2d\xe4\xb4\x5e\x90\x31\x60\x5c\x4e\xd3\x7d\x86\x30"
- "\xb7\x4b\xd8\x33\x3e\x37\xa2\x8e\x0c\x38\xfe\x38\xb4\x1f\xd0\x66"
- "\xf8\x3c\x50\xb4\x8f\xa2\xcd\xe7\xba\xa1\xec\x2f\x6f\xd2\xef\xda"
- "\x9f\x47\xba\x61\x5b\x6a\xb0\x22\x9a\x80\x0c\xd4\x37\x4f\xc9\x0b"
- "\x71\xf5\x3e\x4f\x54\x0a\xdf\x85\x85\xdc\x00\x01\x18\x2f\x8f\xea"
- "\x43\xa1\x3b\x93\x71\xae\x52\xdb\x31\xc6\x76\x0b\x1d\x9c\x01\xff"
- "\x1b\x41\x37\x30\x8a\xf8\x8d\x7a\x0f\xd3\xd5\xef\xfa\x0c\x9e\x95"
- "\x25\xe9\xea\x9f\x8f\x66\xdf\xd0\xee\x5b\x0e\xe7\x0b\xa4\xf3\xa7"
- "\x71\x3f\xc0\xe3\x30\x9e\x35\xf0\x3e\xa3\xea\xc9\xe7\x18\xc3\xff"
- "\xa7\x0d\xec\x9d\xa3\xc4\x77\x16\xe8\xa1\x17\xc7\xb7\x81\x9c\x4e"
- "\x06\x2c\x4c\x40\x1e\xae\x77\xe1\xec\x69\x6a\xd7\x15\x78\x04\x68"
- "\x79\xfa\x31\xa4\xa9\xdb\x1c\x74\xc7\x20\x75\x9b\xe1\x0b\xad\x1c"
- "\x53\xcc\x5a\xc4\x14\xe4\x0d\xc0\x6f\xa4\x75\x90\xc7\xfc\xab\xc6"
- "\xf9\xc7\xe6\xdd\x17\xb1\xf2\x7b\x3f\xab\x76\xb0\x79\x57\x03\x7c"
- "\x06\xfc\x59\x8d\xf9\x21\x00\x87\xbe\x18\x2f\xcc\xe9\x1a\x98\xd3"
- "\x8f\xc3\xf9\x2a\xd6\x57\x76\x5e\x78\x16\xf0\x59\x35\xbe\x77\x7f"
- "\xf1\xbc\xf0\xbe\xd8\x0e\xc6\xfc\xbf\x5f\x3c\x2f\xb4\x0f\xfc\x58"
- "\x5d\x8c\xf3\x44\x3c\x2f\xbc\x13\xc8\x51\x5f\x38\x44\x3c\xd9\xc8"
- "\xf8\x6d\x83\x78\x1f\xd2\x0d\xe3\x63\x31\x1b\xff\x17\xb8\xb7\xa2"
- "\x00\xd7\x87\xf5\x73\x49\xf0\xaa\x5c\xd2\x9b\xcd\xcb\x2f\x1a\xe5"
- "\x18\x79\xb6\x8c\x37\x84\x38\x78\xd5\xe0\xe4\x0a\xc7\x28\x51\x5e"
- "\xcd\x6b\x33\xd4\xc4\x8a\x79\xbe\xa5\x3c\x03\x35\x3b\x2a\x0a\x5c"
- "\xe3\x0b\x7d\xa9\xc9\x12\xfb\xe2\xb6\x3e\x53\x1a\x60\xdf\xb0\xad"
- "\xf5\x20\xaf\xdb\x00\x17\x18\x6e\xd7\x14\x5b\xc8\x3d\xa2\xbc\x4b"
- "\xd7\xad\x10\x05\xd1\x67\x27\xd1\xef\xa3\x21\xb8\x36\xa2\x8f\x0f"
- "\x87\x76\xac\x64\x27\xa9\xd4\x83\x2e\x9f\x7c\x9e\xcc\x5b\xdd\x0b"
- "\x63\xaf\xe8\xa0\xaf\x07\xa0\x6f\x7b\x9d\x68\xfb\x5f\x8a\x7a\xea"
- "\xd9\xf9\xce\x24\xde\x2e\x8c\x19\xcc\xa3\xb3\x13\x84\xb1\x45\xfc"
- "\xda\x8b\x98\xbe\x3e\x8d\xe5\x0c\x42\x5b\x0e\xce\x8f\x37\x70\x1d"
- "\x8b\xe0\xed\x25\x79\x38\x57\xce\x4c\x14\x65\x52\xe8\x6f\x01\x93"
- "\x09\x4f\xed\xa3\xb1\x89\x8c\x83\x93\x99\x2d\xf0\xcc\x69\xf6\xee"
- "\x67\x8e\xb0\xef\xdc\x34\x46\x26\x96\x0b\x03\x22\xc2\xbf\x60\x7e"
- "\x59\x65\x1f\x31\x9f\x92\x33\xb9\x2e\x9f\x12\x49\x56\x34\xb1\xb8"
- "\x51\x67\x0e\x4b\x73\xe2\xcc\x06\xbc\x0f\xee\x6f\x82\xf3\xe5\xd2"
- "\xf9\x53\x7b\x05\x7b\x57\x6a\x9f\x75\xd1\xe8\x5b\xd6\x17\x63\x6d"
- "\xb3\xe7\x9d\x1d\x4e\x9f\x4f\x6d\x1e\x30\x37\x85\xf9\x8b\xe3\x8c"
- "\x6b\x36\x9d\xc3\x30\x7f\x71\x1e\x5f\xdf\x32\x38\x03\xfe\xd9\xbc"
- "\x65\x6b\x33\xdd\x3f\xc0\xe6\xec\xd9\x31\x6e\xfd\xb0\x51\xbb\x17"
- "\xd2\x73\x4d\x44\x30\x5c\xd3\xc1\xba\x5a\x25\x5c\x63\x39\x25\x9a"
- "\x68\x8c\x3c\x2b\x7e\xdb\xc6\x6f\x9d\xb8\x47\x2b\x04\xb8\x1b\x63"
- "\x82\x88\xdf\xaa\x27\x37\xa7\xf3\x4e\xfc\xee\x74\x8d\xb7\x19\x5d"
- "\xb1\xfe\xcf\xee\x95\xe2\xfb\x9c\x09\x14\xde\x2b\x19\x9e\x95\xc7"
- "\x7c\xc1\x6a\xae\x32\x99\xaa\xc6\x86\x7c\x6a\x06\xde\x83\x63\x2e"
- "\xcb\xcb\x7c\xd6\x22\xf2\x1e\xcc\xcb\xd8\x0b\xe4\xcb\xe5\x39\xe1"
- "\x7c\x2e\xd0\x34\x17\xe6\xd2\x62\x28\xcf\x81\x63\x2c\x3b\x2a\x54"
- "\x78\x14\xe6\x48\x6e\x9b\xe1\xcb\x48\x31\x1f\x3d\x8e\x8d\x2d\xd4"
- "\x90\x81\x7c\x96\x0d\xe3\x80\xbc\x46\xbf\x23\x43\xbf\x91\xbf\x90"
- "\xcf\x90\xc7\x42\xd6\x3d\x47\xf9\x8c\xc6\x1f\x80\xf3\xd8\x5f\xe4"
- "\x33\x68\x2b\x5e\x8c\xf3\x6b\x21\x5f\x06\xb3\xef\x39\x5f\xa6\x8a"
- "\x3e\xb7\xf8\x2d\x29\x71\x00\xe9\x0b\xed\x02\x48\xd3\x58\x9a\x5f"
- "\x99\x1d\x13\x08\xd6\xc5\xef\x70\x0c\x27\xef\x2b\x81\x7b\x8a\xa4"
- "\x31\x37\xd3\xdc\xcc\x1f\xce\xa6\xb6\xc8\x7b\xe1\x5a\xb9\xbb\x9e"
- "\x61\x21\x27\x73\x51\xd7\x40\xdf\xbe\x9f\xa8\x09\x7e\x07\x06\x1c"
- "\xfb\xd2\x2a\xca\xb5\x8f\xaa\xf1\x7b\xfe\xc9\xf1\xd0\x3f\xd4\xa1"
- "\xab\xe0\x77\x14\xe8\x92\xa5\x3e\x6c\xc6\xa3\xd0\xd6\x23\xe4\xe7"
- "\xa9\x45\x3b\x16\xe6\x33\xb8\x40\xbe\x5a\x5e\x81\xb1\x40\x96\x75"
- "\x8e\xf3\x9c\x96\xcc\x5f\xc5\x58\xcf\x9a\x04\x72\x6f\x3d\xf9\x6a"
- "\x3a\xda\x8d\xd2\xaf\xa0\x8d\xa6\x36\x59\x6e\xa3\xa9\x2d\x15\xfe"
- "\x41\xd3\xae\x8b\x76\xfb\xaf\x12\x8e\x93\xba\xf9\x6f\x14\xea\xc2"
- "\x9b\x9e\x13\xd6\x94\x08\x98\x27\xb5\x2e\xfb\x2f\xf2\x25\xce\x6d"
- "\xf4\xe3\x40\x9b\x93\xc2\x41\x30\xf6\x08\xd0\x09\xfa\xbd\x7e\xe8"
- "\x0b\xa6\x14\xe4\xa3\x3a\xba\x0f\x0a\x63\x10\xfb\xe7\x4b\x54\x47"
- "\xe9\xc9\xe2\x81\xd6\x56\xc1\xb3\xd5\x9b\x2f\x93\x40\x7d\x02\x79"
- "\x00\xed\xdf\x21\x4e\xde\x84\x3a\xae\x10\x53\xb0\xaa\x89\xd4\x7d"
- "\x9a\xb8\x96\x28\xe1\xfa\x43\xf0\xdb\x24\xca\x49\x70\x8f\x2a\xc0"
- "\x4e\xd4\x28\x1f\x3d\xb3\x96\x3c\xd4\x66\xa8\xcb\x13\x69\x85\x32"
- "\x04\xda\xe1\x04\x5b\x02\xf4\xb5\x96\xfa\x38\x63\x9c\x7a\x0b\x1d"
- "\x37\x8a\xc3\xd8\x06\xe8\xb0\x75\x59\x01\x36\xa2\x62\x6b\x4f\x1d"
- "\xf0\x7f\x99\x20\x33\xd6\xed\x05\xde\xaf\x76\xeb\xe7\x2f\xdd\x7e"
- "\x67\xe2\xfd\x21\x36\x94\xcf\x7c\x8d\xcf\xb9\x11\xe2\xf8\xa0\xbf"
- "\x6a\x08\xe8\x09\x94\xde\x0e\xbe\x19\xfa\x56\xae\x4f\x21\x41\x4d"
- "\xe4\xab\x07\x76\x6f\xa7\xfb\xec\x4a\x99\x7d\xfe\xab\x50\x51\x0f"
- "\x67\xfd\x3e\x57\x17\xb2\x2e\x80\xa0\x5d\x1d\xe3\x9d\x51\x5f\xbf"
- "\xef\x22\xa8\x2d\xdd\xec\x18\x43\x4c\x69\x4f\x60\x1d\x51\xae\xaa"
- "\x6d\x4d\x8f\x20\x1f\x46\x8c\x81\x79\x7c\xae\x10\xe6\x4a\x89\xff"
- "\x3e\x95\xe7\x0a\x85\xf1\x2d\x67\xbe\x08\xe7\x56\xe3\x5a\x82\xba"
- "\x3f\xac\x23\x25\xb8\x46\xb7\x19\xbe\x0a\x14\xe7\x0d\xac\x1b\x25"
- "\x70\x8f\x10\x0f\x1b\xbf\xff\x9e\x4b\xc4\x18\x10\x54\x6f\x60\xf5"
- "\x83\x99\xcd\xff\xab\xd1\x2e\x59\x1a\xea\xe1\x7d\xcc\x47\xed\xdc"
- "\xa4\x79\x4e\x05\x8c\xe9\xb9\x49\xf8\x6e\x02\x2f\xc2\x7a\xf5\x55"
- "\xbc\x34\x6f\xeb\x28\x36\x7f\xd8\xec\x3e\x2f\xbf\xca\x92\xf4\xcd"
- "\xda\x31\x23\x72\x88\xd7\xf8\x9d\xfa\x3e\xb8\x56\x7d\xd5\xbe\x79"
- "\x33\x5f\x60\x54\x72\xe3\xd6\x67\x93\x60\xc5\x46\x18\x36\x9c\x67"
- "\x49\x31\x7d\x2f\x10\xcb\xdd\x21\xc1\xf7\x4d\x7b\x26\xf1\x2e\x3e"
- "\x2d\x82\x28\x37\xb5\xdc\x15\x34\xc0\x7e\x5f\x01\x1f\x30\xf4\x85"
- "\xc9\x89\x76\xa2\x59\x64\x24\xdf\x2e\x26\x01\xcf\x38\xe1\xd9\xc1"
- "\x44\x6f\x21\xf5\x6a\xdc\x33\xfa\x61\x30\xca\x1f\xf5\x6a\x6c\x33"
- "\x35\x8f\x04\xa5\x36\xf0\x8d\x1b\x7f\xdb\x23\x08\xd6\x03\xd5\x9b"
- "\xc0\x63\xf7\x04\xdf\x57\x70\x1d\xda\x38\x1e\x43\xef\x2b\xf2\xdd"
- "\x37\xcb\x36\xef\x7d\xd3\x87\x43\xdf\xf6\xf9\xd7\xb7\x6f\x0e\x4b"
- "\x7d\xfb\xe6\xf0\xf7\xef\xdb\xd7\x8f\xb9\xf5\x4d\x25\xf5\x2d\x1e"
- "\xfa\xf6\xf5\xd3\xfe\xf5\xed\xfc\x74\xa9\x6f\xe7\xa7\xdf\x60\xdf"
- "\xf6\x77\xd1\xb7\x0a\xef\x7d\x4b\xbe\x0f\xfa\x56\xe7\x5f\xdf\x2e"
- "\xd8\xa4\xbe\x5d\xb0\x7d\x9f\xbe\xa1\x2e\x9f\x16\xc9\x9f\xa7\xf1"
- "\xe4\x13\x58\xbc\xd6\x0b\xe4\x9b\xb1\x69\x79\xb4\x1c\x76\x81\xd4"
- "\xb7\x0b\xf3\xdb\x9a\x6e\xe3\xbf\x61\x72\x4e\x7d\xdc\x48\x3d\xfa"
- "\xbb\xd6\xcf\x06\x5e\x56\x33\x9e\xfe\x86\xfa\x37\xa4\x5b\x79\xc1"
- "\xdf\xb4\xfe\xd5\x7c\xea\x8f\x32\x2c\x42\x28\x97\xb6\x86\x0d\x3e"
- "\x8c\xbe\x20\x1c\xcc\x67\x3e\x6c\xb0\x09\xf3\x77\x1e\x4a\xb0\x2a"
- "\x79\x03\xc6\x0e\xc3\x78\x7f\x81\x84\xdf\x3a\xb8\xea\x50\x82\x9d"
- "\xe6\x0e\x5f\x4f\xf7\xfb\xd6\x9b\xc4\x3d\x6e\xe2\x33\xac\xa1\xc3"
- "\x22\xe0\x7c\x8d\x98\x07\x96\x57\xa2\x3c\x33\xb8\x18\xdb\x87\xf3"
- "\x56\x31\x37\x2b\xf0\xfb\x06\x01\x1b\x6c\x21\xf6\xae\x70\xef\x9b"
- "\x41\x22\xee\x3d\x93\x48\x42\x30\x2f\xe5\xe6\xb4\xbb\xf0\x9b\x23"
- "\xb4\x55\x7f\x18\xc7\x7d\xaa\xed\x2e\x3e\x24\x95\x04\xe0\xde\x3e"
- "\xf4\xd1\x33\x47\x58\xc9\xc0\x54\xd2\x63\x6a\x32\xb4\x69\x27\x31"
- "\x21\xc9\xd0\x1e\x8c\x35\xd3\x0d\xbe\xa1\x36\xbe\x1c\x68\x0f\xbf"
- "\x7f\x07\x24\x92\xe0\x67\x22\xd2\xf9\xf5\x3b\x48\x20\xee\x03\xc4"
- "\xfd\x7c\x6c\x2f\x5f\xcf\xa0\x36\xc3\x37\x05\xe2\xfb\xdd\x00\x7d"
- "\xfa\x30\xfa\x34\xd4\x49\xf4\x69\xd8\xd1\x99\x3e\x0d\x3d\x18\x7d"
- "\xbe\x71\x48\xf4\x39\x1f\x2d\xa7\x4f\xc3\x20\x39\x7d\x1a\xe2\x6f"
- "\x8e\x3e\x0d\x31\x12\x7d\xd8\x33\x18\x7d\x1a\x92\xbd\xd3\xa7\xc1"
- "\x28\xd1\xa7\x61\xe0\x8d\xd1\xa7\xe1\x84\x6f\xfa\x34\x4c\xef\x82"
- "\x3e\x3d\xbd\xd3\xe7\x7c\xdf\x1b\xa7\xcf\xf9\x68\x3f\xe8\xd3\x9b"
- "\xd1\xe7\xc2\x5a\x89\x3e\x17\x7e\xde\x99\x3e\xe7\xf7\x31\xfa\x9c"
- "\xcf\x93\xe8\x73\xc1\x22\xa7\xcf\xf9\x13\x72\xfa\x5c\x08\xba\x39"
- "\xfa\x5c\x20\x12\x7d\xd8\x33\x18\x7d\x2e\x44\x78\xa7\xcf\x85\x28"
- "\x89\x3e\xe7\x4b\x6e\x8c\x3e\x17\xe2\x7c\xd3\xe7\xbc\xcd\x7f\xfa"
- "\x5c\x78\xc7\x83\x3e\x2a\xdf\xf4\xb9\x60\xf1\x83\x3e\x21\x8c\x3e"
- "\x8d\x0f\x48\xf4\xf9\xf6\x4c\x67\xfa\x7c\x3b\x81\xd1\xe7\xdb\x31"
- "\x12\x7d\x1a\x33\xe4\xf4\xf9\x36\x4e\x4e\x9f\x6f\x0b\x6f\x8e\x3e"
- "\xdf\x16\x48\xf4\x61\xcf\x60\xf4\xf9\xb6\xd8\x3b\x7d\xbe\xad\x92"
- "\xe8\xf3\x6d\xec\x8d\xd1\xa7\xb1\x87\x6f\xfa\x7c\x9b\xd3\x05\x7d"
- "\xee\xf2\x4e\x9f\xc6\x19\x37\x4e\x9f\xc6\x8c\xae\xe8\xe3\x9f\xac"
- "\xd7\x98\x83\xcf\xbd\x05\xed\xd4\xfa\x6a\x07\xc7\x0e\xfd\x0f\x39"
- "\x43\x63\x6d\x3e\xd7\x33\x88\xed\xd1\x68\xcc\xd1\xa4\x90\xa7\xea"
- "\xc9\xc5\x47\xf2\xb9\x1e\x41\xbc\xa1\x10\xf4\xa4\xb7\x73\xf9\x75"
- "\x3d\x03\xb9\x75\x77\x05\xe2\xde\x6c\xdf\xf9\xdb\x2f\xbe\x16\x70"
- "\x3f\x79\x10\xf7\xd1\xad\x07\x79\x19\x7f\xb7\x19\x2e\xe6\x80\x2c"
- "\x18\xdd\xd5\xfe\x2d\xf4\x75\xfa\x70\x03\xea\xb7\x17\x4d\xae\xb8"
- "\x18\x06\x3e\x19\xe3\x8b\xe9\x1f\xc6\x7d\x16\x17\x1b\x73\x68\xbc"
- "\xaa\x01\xe3\xa3\x1f\xe6\xbf\x42\xdd\xe3\x02\x69\x3a\xcf\x6f\x19"
- "\x30\x1e\xf9\x01\x64\xf5\x7b\x9b\x48\x53\x94\xcb\x3f\x8f\xd7\xed"
- "\x14\x6c\x84\x56\x56\xb7\x79\x06\xbf\x45\x63\xc5\x3c\xa4\x2b\xd2"
- "\x30\xbf\x66\xf3\x58\x90\x7d\x07\xe3\x33\x30\x76\xd2\x6e\x38\xa2"
- "\x9f\x0c\xf3\xcd\x6c\x9a\x46\xe5\xe5\xf5\xfd\x77\x32\x5f\xb8\xe6"
- "\x41\x22\xdf\xc1\x73\x7a\x41\xb9\xb7\x20\xcf\x63\xfd\x7b\x9a\xc8"
- "\x3f\xaf\xba\x5d\x0f\x86\xf2\x19\x68\x3b\x54\xb8\xde\x1b\xca\xef"
- "\xa3\x9c\x4d\xe3\x7c\x64\x67\x08\x3e\xc4\xff\x2c\x80\x73\x2a\xa1"
- "\x4e\x28\xd4\x79\x15\x65\x77\xa1\x8d\x30\x28\x2f\x44\x1d\x58\xb8"
- "\xae\x86\xf2\x64\xfc\x76\x20\x5c\xef\x0b\xe5\xc7\xa0\x3c\x84\xed"
- "\x79\xb9\x2e\xcc\xd1\x26\xc7\xcd\xed\x19\x6f\xa2\x39\x35\x91\x06"
- "\x4c\x17\xf8\xa7\x9b\xff\x4f\x53\x83\xc7\xb5\x18\xb7\x6b\xd5\xe2"
- "\x35\xe6\xa3\xf6\xcf\x54\xb7\x6b\x25\x1e\xd7\x72\xdd\xae\x1d\xf6"
- "\x68\xf3\xb0\xdb\xb5\xbd\x1e\xf7\x55\xb9\x5d\x33\x7a\x5c\x6b\x76"
- "\xbb\x96\x21\x5c\x0b\x68\x33\x34\x07\x4a\xdf\xf0\x9a\xf4\xc2\x79"
- "\x25\x9c\x8f\x74\x3b\x1f\x23\x9c\x87\xe7\x37\x8f\xb2\x90\x37\xad"
- "\xc2\x79\x4a\x7b\xd6\x7e\xf3\x24\xb7\xf6\xa3\x98\x8d\xa3\x39\xc6"
- "\xe5\x3b\x17\x36\x44\xc5\x5d\xd7\xed\x84\x6b\x11\xc8\x57\xee\xbc"
- "\xbd\x34\x49\xb3\x60\xe5\x2b\x9a\x84\xb8\x44\x74\x5f\x59\xb2\x30"
- "\x51\xb3\x64\x59\x6c\x9c\x2c\xce\xba\x1a\x63\x0e\x62\x4e\x35\x8c"
- "\xdd\x42\xf3\x17\x6c\xe7\x1b\x5d\x39\x3f\x00\x57\xe1\x59\xe5\x16"
- "\x32\x81\x3e\x2b\x87\xc5\x23\x2f\xc5\xd8\x2f\x2c\xce\x0b\x79\xae"
- "\x9e\x34\x7f\x2a\xc4\x79\x31\x41\x5d\xbb\xef\x38\x2f\x97\xab\x69"
- "\x7c\x43\xa8\xc7\xe2\xbc\x5c\xae\x81\x79\xfe\x0c\xdf\x8b\xe5\xf0"
- "\x60\xb9\xcd\x2e\x89\xb2\x89\x75\x5e\x3b\x8d\x11\x98\xc1\x6c\x19"
- "\x9e\xf1\x5a\x07\x0c\xc4\xfb\x84\xef\xa5\x03\xdd\xee\x8f\x65\xd7"
- "\xc5\xf5\x41\x78\xa6\x71\x00\xc6\x8f\xe8\x55\x0f\x65\x6a\xbf\xa7"
- "\xd7\x2e\x31\x5b\xde\x96\x01\xc3\xf1\x9d\xf0\xbd\xe5\xef\xa6\xfc"
- "\x4d\x3d\xb9\x74\x40\x7a\xb7\x4b\xd5\x6e\xb1\xe0\x84\x77\xb8\xe4"
- "\x60\x73\xb4\xd3\xbb\x52\xff\x44\x5e\x35\x60\x38\x3e\x1b\xf1\x8c"
- "\xed\x65\x80\xf2\x96\x01\x5a\xb1\x3f\x6e\xfd\x1b\x8e\x7a\x3d\xf4"
- "\xef\x0c\x1d\x13\xa0\x29\x0f\x34\x15\xde\x61\x07\x6f\x68\x4e\x65"
- "\xb9\x0c\x60\x3d\xc1\x9c\x2c\x74\xad\xba\x1c\x2b\xda\x32\x71\x8d"
- "\x62\x36\xcc\xcb\x92\xfc\x87\x31\xba\xb6\x88\xeb\xd7\x65\x37\xf9"
- "\x8f\x3d\x13\xce\xed\x75\xe7\x21\xb7\xe7\x7d\x8a\xcf\x83\x7a\x93"
- "\xd8\x7e\x80\x01\x5a\x9c\xef\x50\x56\xa1\x2f\x26\xde\x8b\x7d\xf4"
- "\x95\x87\xcf\x57\x0c\x45\x69\x1c\xbf\x8b\x14\xc7\x31\x87\xee\x91"
- "\xff\x6e\xb8\x68\xaf\x13\x72\x60\x98\x72\x5c\x79\xa9\xbf\xd3\xd1"
- "\xdc\x6e\xc6\xfc\xc6\x47\x83\x49\x0c\x1b\xdb\xef\xe6\x23\xc6\xe3"
- "\x9c\x61\x58\xff\x9d\x89\xd1\x7c\xa8\x95\xf5\xff\xbb\xd7\xf0\xbc"
- "\xe4\x7f\xff\x9d\x45\xac\x27\xe2\x32\xfb\x5e\xf5\xdd\xbb\xb4\x1e"
- "\xcd\xdd\x35\xd4\xce\x68\x3e\x44\x55\x4f\xbe\x2b\x17\xea\x5f\xa4"
- "\xbc\x48\xe3\xf7\x7c\xd7\xc8\x6f\x19\x6a\x87\xbe\x82\xfe\xd3\x2c"
- "\xe4\xac\x60\xcf\x85\x63\x39\xf6\x05\xc7\x08\xf7\x92\xf3\x5b\xf2"
- "\x1b\xf9\xd0\xa1\xde\x73\x5e\x33\xbf\xee\x87\x9a\xc8\x15\x26\x43"
- "\x28\x79\x3b\xda\x58\xd9\xbb\x5e\x89\x73\xf3\x7d\x0e\x16\xeb\x30"
- "\xec\xa6\xd7\xa8\x4f\xb9\x3e\x09\xed\x41\xc2\xb5\x24\xdc\x5f\xeb"
- "\xfa\xdd\xd3\xed\x77\x0f\xfc\x4d\xfd\x9a\x53\xe8\xda\x1a\x28\xed"
- "\xe3\xbf\x12\x0b\xe5\x60\x8f\xb2\x5a\x56\x5e\xcd\xfc\x9e\x41\x36"
- "\x6b\xa0\x3e\xe4\xc2\x79\xa1\xed\xbb\x69\x7f\x92\xf8\xd1\xc0\x1b"
- "\xa3\x71\x4f\xb7\x30\x0f\x47\xe3\x9e\xed\x10\xc7\x1c\xba\x5f\x1b"
- "\xae\x8f\x12\x8e\x51\xc2\x71\x38\xcb\xd3\x7a\x25\x52\xca\xb5\x8e"
- "\x36\x9a\x2b\xc3\x7d\xe5\x7e\xc7\xfd\xe0\xc2\x31\x4a\x38\x0e\x17"
- "\x72\xd5\xce\x86\xfb\x5c\xfb\xbf\xbd\xfb\x20\x5f\xd9\x20\xee\xe5"
- "\x76\x1a\x35\xb5\x9c\x71\x48\x29\xe6\x05\xc5\x38\x61\xe9\xcd\x18"
- "\x2b\xc6\x46\xcc\xa4\x83\x98\x13\xdb\x32\x30\x37\x68\x25\xcb\x09"
- "\x8a\x7b\x60\x15\x68\x37\x47\xd9\xb1\x52\x7f\x89\xe6\x05\x5d\xd5"
- "\x2c\xe6\x3d\xb9\xd2\xe8\xdc\xa2\xa9\x15\xe6\xcb\x0e\xe6\xa3\xdf"
- "\x42\xed\xc5\x34\xaf\x75\x33\xfd\xee\x15\x74\x81\xb4\x24\x8b\x75"
- "\xd8\xd8\xb5\x50\xdb\xd7\x6e\x83\x98\xfb\xb1\x45\x23\xe6\x9a\xb6"
- "\x90\x96\xd4\xab\xa1\x73\x80\xb7\x5a\x46\xc9\x7d\xa6\x5b\x26\x63"
- "\x9b\xd8\x77\x0b\xb9\x62\xc5\xb6\xa1\x8e\xce\x35\x67\xe1\xfc\x2a"
- "\x07\xe9\x07\xfd\xba\x20\xb6\x0f\xd7\x61\xfe\x5b\xe9\x58\x62\x9b"
- "\x57\xb7\x6c\xd0\xc2\xb9\x8d\x96\x80\xd6\x52\xe6\x73\xdd\x02\xeb"
- "\xdf\x9f\xc7\x77\x25\x03\xf1\xaa\x61\x80\x4f\xc3\xa2\x38\xe3\x30"
- "\x0d\x8b\xe5\x3d\x4c\xcb\x6c\x8c\x2d\xe7\xd1\x3b\x7c\xf3\x35\x12"
- "\x88\x3e\x10\x8c\x67\x5b\x59\x0c\x64\x38\x07\x58\x5d\xc8\x6f\x19"
- "\x46\xd7\x27\xff\xd6\xfd\x16\x1b\x6d\xa3\x1f\x8b\x6d\x86\x7b\x97"
- "\xda\x0c\xad\xd1\xae\xfc\x09\xae\x79\xdc\xba\x10\xbf\x3d\xc0\xfc"
- "\xa0\x7d\xf4\xec\x03\xf6\x17\xda\x6a\xf0\x29\x63\xaa\x86\x69\xe8"
- "\xf7\x99\xad\x83\x2d\xcc\x47\xb5\xf5\xaf\x01\x11\xfd\x1b\xe1\x59"
- "\xfb\x5d\x79\x23\xa0\x4e\x36\xfa\xde\x43\xfb\xae\xf7\x4c\xa0\xcf"
- "\xa8\x66\x73\xbd\xb5\x91\xdb\x32\x4c\xb3\xb9\x83\x04\x0a\xe7\x1b"
- "\x2b\x1d\x76\xcc\x3d\xe0\x35\xce\x16\xcd\x9d\x87\x3e\xe1\x5b\x87"
- "\x69\x70\xdf\xd0\xa3\x76\xb1\xcf\xb6\x46\xdc\xaf\x82\x7d\x66\x63"
- "\x6b\xab\x13\xc7\x71\x53\x0b\xb4\x9d\x76\x96\x34\x10\x5b\x1c\xfa"
- "\xcd\xd1\x31\x49\x11\x7d\x39\x6d\x54\xe7\xa3\xcf\x67\x75\xa8\xee"
- "\x4f\xf3\x18\x41\xfb\xf9\x34\x17\x1b\xbc\x03\xd0\xc2\x94\x86\x7b"
- "\xfe\x6d\x34\x2f\xc0\x7a\x1a\xab\x03\xde\x9b\xfa\xc9\x5e\x15\xbe"
- "\x93\xd8\xf6\x8a\x6b\x85\x45\x38\xb7\x19\x9f\x9d\xd4\x41\x2e\x13"
- "\xdb\xab\x98\x63\x1d\xc6\x23\x0a\xe3\xd3\x55\xda\x60\x9e\x24\x77"
- "\x20\x2f\x44\x61\xee\x4e\x0b\xb1\x6d\x60\xeb\x1b\x8e\xb9\x2d\x1e"
- "\x9f\x8f\x63\x0b\xba\x99\x15\xc6\xf4\x5a\x9b\xe1\xaa\x2b\xff\x63"
- "\x76\x38\xea\x3b\xb6\x2e\xe3\xeb\x3a\xa1\xcf\x95\xb9\xb0\x76\xf6"
- "\x3b\x8b\xfd\x2b\xe3\xc2\x86\x69\xd0\x27\x1b\x7e\x2f\x11\xd6\x73"
- "\x4a\x3b\xc6\x07\x57\xf7\x04\x44\x44\x0e\xa8\x64\xbc\x40\x63\xa8"
- "\xc1\xb9\x89\xc2\xf8\xd1\x7c\x12\xc6\x24\x36\x0e\x42\x7d\x07\xb3"
- "\x17\x47\x0e\x81\x7e\xb9\xe5\xbf\xbb\x4a\xd7\x6e\x8c\x7d\x9f\x4f"
- "\x75\xc2\xab\x87\xdd\xfa\x6c\xa3\xfb\x5f\x5b\xd0\xd6\x77\x75\x36"
- "\x3e\x6b\x13\xc6\x0f\x43\xbe\x68\x72\xe7\xff\xab\x63\xb1\x9f\xe8"
- "\xf3\xeb\x0c\x1d\x6c\x81\xf5\xb6\x01\xc7\x19\xee\x49\x84\xb9\xe0"
- "\x33\x57\x14\xae\x17\x98\x4f\xa4\xcd\x70\x4d\x2b\xae\x85\xa0\x5f"
- "\xc0\xba\xd0\x36\x80\xea\x9d\x20\x4f\x9b\x39\x94\x67\xda\x28\xdf"
- "\x00\xce\x6a\x04\x8c\xd5\xc0\x3d\xb3\xc5\x6f\x5e\x4e\xdc\x37\x71"
- "\x99\x7e\xef\xb5\x89\xf9\xe4\x58\xbc\xbe\x6b\x19\xd2\x3e\x8b\x6b"
- "\x1b\x3b\xed\xb3\xc0\xbd\x3f\xdb\x69\xde\xb1\xfd\xb8\xa6\x54\x34"
- "\x37\xe0\x1a\x41\xef\xc7\xbd\x17\x69\xa0\x93\xb3\xfd\x43\x0d\x68"
- "\x9f\xa7\x39\x4f\xb0\x2f\x2c\xf7\x44\x3d\xfd\x0d\x7c\x1b\x88\x47"
- "\xc6\x4b\xd7\xac\xae\x9c\xe9\x40\x6f\xfc\xd6\xf6\x61\xe0\x2f\x89"
- "\xe9\x61\x5c\xaf\xdb\x06\x60\xfe\xef\x36\x43\x9b\x5a\xcc\xfd\x4d"
- "\x73\x7d\xb3\xf7\x51\xfb\x8c\xcb\x38\x92\x44\x61\xbc\x00\xdc\x5f"
- "\x47\xc7\x40\x95\x9f\x85\xb1\x9e\x31\x6e\xa5\x29\x05\x73\xb2\xb4"
- "\x7d\xfa\x46\x38\xdd\xa3\x6c\x33\x8d\x6c\x41\x3f\xac\xe6\x0b\xa9"
- "\x34\x1e\x53\xd0\xd4\x64\x07\x8f\xf7\x51\x79\x22\x34\x3f\x0b\xaf"
- "\xd1\x5c\x07\xd8\xe6\x4d\xc7\x2d\x6e\xcb\x13\x64\xd3\x66\xd0\x7d"
- "\xee\x03\x5a\x51\xd9\x1d\x7e\x87\x37\x11\x7b\x3b\xcb\x41\xcb\x62"
- "\xef\x0b\xfe\xd8\x3d\x59\x8c\x0d\x18\x33\x1a\xf3\xc0\xbe\x44\x33"
- "\x14\xf3\x35\xdb\x97\xd3\x38\xd8\xc6\x01\x51\xc2\x18\x44\x6d\x66"
- "\xfd\x0a\x99\x97\xac\xa4\x7d\xc4\xfe\xf9\xd7\x37\xfb\x68\x41\x8f"
- "\xe8\xd9\x66\xb0\xa7\x8a\xb1\x39\x98\x3c\xc5\xe2\x63\x33\x5a\xd8"
- "\x2f\x0a\xf2\xf3\x28\xe1\xd9\xa3\x6e\xc1\xb3\x0f\x0b\x6d\x06\xb1"
- "\x18\xe1\x6d\x20\x03\x0d\x00\x0c\x6f\x0f\x14\xf5\x19\x61\x0f\xd1"
- "\x70\xa6\x67\xb5\x47\x4a\xfa\x0c\x1b\x43\xd9\xbe\xbb\x65\xcb\x12"
- "\x35\xb1\x0b\x57\xe8\xe7\x27\xbe\x1c\xaf\x89\x4b\x48\x58\x96\xa0"
- "\xc1\x20\x4d\xee\xf3\x87\xe5\x31\x6a\x8f\x12\xf2\x13\x16\x4a\xf9"
- "\x09\xdb\x93\xdd\x73\x7a\x5a\x48\x7b\xea\xad\xb1\x5d\xb4\xe7\xfa"
- "\x6a\xc7\xa8\xe4\x8a\xe0\xbf\x18\xfe\x4d\xf0\x8f\x32\x06\x99\x67"
- "\x27\xd1\xb0\xd6\x53\x3f\x13\x29\xe6\x44\xfb\x34\xf4\x31\xaa\x27"
- "\xed\x57\xf3\xb9\x40\xd4\x83\x30\x6f\x78\x11\xd6\xdf\x0d\xf7\xc3"
- "\xbf\x09\xfe\x4b\xe1\x9f\xde\xc7\x7d\x40\xf7\xcb\x17\xb9\x5f\x63"
- "\xfe\x23\xeb\xf6\x63\x1d\x7e\x1d\x7e\xb2\xc7\xfc\xeb\xac\x9e\x47"
- "\x1f\x94\xbc\xa1\x45\xac\x47\xbf\xed\xf7\x59\x47\x34\x5e\xea\x05"
- "\xf0\x86\x8b\x85\x42\x3d\xea\x6b\x23\xbe\x0f\xe6\x1a\x80\xfa\x62"
- "\xbd\x40\xde\xd0\x36\x4a\xa8\x47\xd7\x0a\xce\xa0\xf4\xf6\xdc\x1e"
- "\xbc\xa1\x38\x52\xa8\xa7\x72\x6f\xcf\xad\x4e\x4f\xce\xf0\xd5\x5e"
- "\xac\xc3\xad\x0b\x54\x33\xd9\xa9\x3d\x17\xea\x7b\x8d\xd1\xea\x1f"
- "\x9d\xae\x47\x7b\xd2\x49\xff\xf2\xc2\xb8\x27\x16\x2e\x4d\xc2\x4c"
- "\x53\x89\xcb\x56\x26\xe2\x71\xe9\xfc\xdf\xd1\xc3\xb2\x79\xbf\x7d"
- "\x99\xfd\x48\x5c\x1c\x85\x3f\x16\x03\xbf\xe1\x31\x76\xa5\x1e\x0f"
- "\x2f\x2f\xc3\x62\x72\xfc\xf0\x95\x2f\xe3\xc1\x73\x1f\x28\xc8\x56"
- "\xd7\x1b\x81\x37\x6a\x18\xce\x5e\x07\x1d\xe9\x62\x24\x95\x63\xd7"
- "\x59\xc8\x09\xad\x83\x88\x76\x2d\x79\xcc\x11\x87\x02\x63\x8e\x84"
- "\xac\xd3\xbf\x1c\xe2\x58\x18\xc7\x6f\x19\x02\x32\xb0\x23\xca\x42"
- "\x16\x11\x01\x1b\xa3\x69\x9c\x53\xc3\xf5\x0c\xc1\xb7\x33\x90\x33"
- "\x6a\x6c\x18\xbf\x1f\xca\x34\xcf\x36\x07\xeb\x01\xd4\x1b\x03\x65"
- "\xcc\xaf\xad\x86\xeb\x78\xdf\x78\x28\x47\x40\x39\x92\x33\xaa\x83"
- "\x70\x8f\x31\x94\x35\x50\x1e\x08\xed\x1b\xc5\x79\xe1\x5d\x56\x76"
- "\x14\x89\xb9\xbf\x59\x9e\x6f\x87\xc9\x95\xe7\x1b\xf3\x39\xa5\xa9"
- "\x66\xd3\xf5\x97\xca\x20\x8e\x86\x80\x88\x07\x92\xa0\x4e\x83\xb8"
- "\x5e\x32\x7b\x87\xc3\x26\xc6\x4f\x61\xf6\x0c\x67\xa0\x5b\xbe\x74"
- "\x2c\xab\xc5\x7c\xe9\x68\xef\xa2\xf9\x1a\xe1\xc8\x1b\x30\x9e\x2c"
- "\x5f\xe8\xd5\x96\x47\xf3\x7c\x3a\x57\x63\x6c\x5e\x6b\x7a\xac\xe2"
- "\x27\xf9\x68\x43\x83\x32\x8b\x2d\xc9\x5f\x26\x4e\x9a\x1f\x4a\x8c"
- "\x3b\xe7\x1e\x4b\xc2\xeb\x7e\xa8\x53\x20\x33\xd0\x7c\x57\x8b\x97"
- "\x85\x38\xe6\xc7\x31\x39\xd0\x79\x86\xe1\xd7\x10\x21\xa6\xb1\xb3"
- "\x84\x7f\x81\xe5\x44\xb1\x10\x6e\x22\x8b\x3d\xb5\x78\x19\x0f\xf7"
- "\x86\x24\xcf\x8f\xa3\xe7\xa0\xde\x7a\x90\xd5\x84\xfe\xbd\x65\x8e"
- "\xc4\x3d\xae\x9c\x10\x23\xc3\x59\x38\xf7\x81\x0c\x7c\x4e\x10\x95"
- "\x43\x4e\x91\x60\xcc\xb7\x89\x7d\xcb\x77\x8b\x8b\xb7\x19\xce\xa1"
- "\x0f\x69\xeb\x0b\x24\x18\xe3\x00\x0b\x7d\x29\x64\xf9\xc3\xb8\x68"
- "\x31\xd6\x94\x05\xce\x79\xbe\xcf\x0b\xbf\xa6\x5c\x39\xe8\xe5\xe1"
- "\xd3\x26\xc0\xaf\xe1\x42\xca\x6a\x77\xde\x8c\x6c\x0d\xd3\x5a\x5b"
- "\x0f\x0e\xfa\x98\xe5\x25\xe5\x40\xff\x77\x52\x5d\x88\x43\x1d\xb8"
- "\x4d\x97\xcb\x7c\x50\xb9\x32\x8c\xbb\xcb\x19\x50\x9e\xc4\x7d\xd3"
- "\x1c\xcd\xa9\xc3\xab\x86\x04\xed\x5e\x8b\x31\x9e\x15\x30\xc6\xdc"
- "\x01\xbc\x26\xc4\xf0\x52\xd2\x18\x57\x4e\x12\x41\xf7\x08\x83\x8c"
- "\x82\x7b\x50\x2f\x28\x14\x15\x28\x77\xa0\x3d\x89\x33\x70\xd3\x91"
- "\x6f\x81\xc6\x18\x43\xc4\xc6\x87\x69\x2c\x7c\xe8\x90\xfd\xc8\xc7"
- "\x28\xeb\x9a\x55\x38\x66\x3c\xc6\x0c\x78\x06\xfe\x7f\xc3\x72\xcf"
- "\xcc\x6a\x14\xdb\x84\x72\x30\xe8\xe9\x6a\x38\xaa\xda\x0c\xfc\x44"
- "\xb7\x9c\x7c\xc2\x9e\x68\x7e\x21\xc6\x7e\xc3\xb6\xa9\xec\xac\x50"
- "\xbc\xcb\x64\x10\x3e\xd1\x42\x54\xa3\xd8\x5c\xc4\x5c\xa3\xaf\x67"
- "\x09\xbf\x41\xfe\xf9\xa9\xd5\xa3\x8d\xd3\xa2\xad\x94\xf1\x34\xac"
- "\x79\x4a\xf2\x0c\xfc\xff\x06\xea\x1f\xb1\x90\x7f\xa7\xf5\xd7\x2b"
- "\xe9\x3e\xc9\x0b\x01\x11\xb8\xdf\x9d\xaf\x16\xcf\xf7\x50\x44\xc3"
- "\x98\x62\x4e\x37\x36\xf7\x5b\xc3\x06\x37\x43\xd9\x26\xda\x58\xa8"
- "\xcd\x25\x13\xfd\xba\x5c\x65\x3b\x94\xd5\x62\x19\x7e\x6b\x44\xac"
- "\x40\x9b\x44\x6b\xba\x6e\x07\xea\x9d\x2f\x47\x80\x5c\x08\xf2\x0d"
- "\x5c\x07\xfa\xbf\x3e\x91\xdd\x6b\x88\x6e\x35\x6c\xd2\xdb\xc2\x76"
- "\x66\xd8\x00\xff\xe0\x1a\xc8\x7f\x8b\x6b\x85\x76\xe2\x2d\x01\x57"
- "\x33\xc4\x77\xe3\x0c\x01\x21\xdc\x96\x21\xa5\xf4\x1d\x15\x8a\xbd"
- "\xf0\xbb\xdc\x1a\xaa\x29\x80\x7a\x40\x7f\x87\xb0\xbf\xf8\x52\xc1"
- "\xc6\x0e\xd5\x74\x33\x48\xf0\xa6\xdf\x76\xe0\xf8\x51\x9f\xec\x4d"
- "\x29\xaa\x69\x28\x77\x62\x1c\x10\x9a\x13\x0d\xe3\x5b\x3a\x48\x4f"
- "\x9a\x53\x60\xcb\xfa\xd1\x34\x96\xfe\x2a\x6d\xb0\x18\xdb\x12\xf0"
- "\x28\x87\x57\x2e\xb3\x61\xbc\x4b\x9a\x3b\xa4\x4d\xdb\x87\xc6\xb8"
- "\x14\x62\x5b\xee\x4a\x22\xea\x3c\x8e\xc5\xb6\xa4\x31\x42\x7a\x82"
- "\x9e\x92\xe4\x3d\xbe\x25\x6f\xd8\x3f\x51\x8c\x6f\xc9\x5f\x73\xda"
- "\xe1\xf7\x40\x18\x0f\xcc\xff\xae\xa5\x65\x29\xde\x54\xa0\xd7\x78"
- "\x97\x4a\xc0\x3d\x25\x8b\x77\xe9\xd7\x7a\xa1\x50\x50\xbb\x6c\x5b"
- "\xa6\x02\xf0\x6f\x0d\xf5\x83\x71\x3b\x57\x02\x6f\x22\xc4\x37\xe0"
- "\xe3\x85\x73\x35\x16\xf2\x9a\x18\x93\xca\x8a\x3a\x7e\x0e\xb5\x8d"
- "\x71\xcd\xfc\xf5\xf8\x1d\xde\x30\xa7\x25\x6c\x0f\xf4\x03\xe6\x74"
- "\xa6\x32\xc2\xa2\x50\xa6\xe2\xbd\x54\x97\x54\x28\x23\x3c\xe7\xf5"
- "\x82\x97\x97\xc5\xc6\xcd\x5b\xb4\x44\xaf\x79\x61\xfa\x33\x34\x51"
- "\xe2\x70\xcd\xc2\xc4\x38\xba\x24\x69\x5e\x98\x30\x6e\xea\xd4\xe9"
- "\xf3\x7e\x3d\xfd\xe9\xe9\x33\x7e\x3d\x96\xed\x58\x9c\x9e\xb0\x1a"
- "\x93\x6d\x26\x2e\xd3\xe0\x4d\x0b\x84\x6c\xe2\x29\x71\x09\xcb\x3c"
- "\xf1\x40\x4d\xed\x5c\x4a\x6a\xd3\xb5\xe1\x6f\x6a\x4b\x53\x28\x0f"
- "\x8b\x36\x2e\x8a\x7d\x0a\xe5\x3e\x1c\x5b\x9a\x6b\x3c\x53\x39\x1c"
- "\xe5\x2b\x21\xcf\x3b\xae\x3b\x81\x38\xa7\x71\xfd\x81\x77\xb1\xb8"
- "\xc7\xe6\x62\xf7\x06\x04\x2a\xf1\x3e\x61\x2e\x0b\xe7\xee\xe7\xfb"
- "\xf5\x4b\xa7\xf1\xb5\x32\x03\xd4\xa2\xdd\x1b\xcf\x89\x7d\xa8\xc7"
- "\x3a\x99\xca\x39\xae\x7c\xc2\x99\x01\x63\xa4\x3c\x94\xf4\x4f\x36"
- "\x46\x84\xa0\x38\xd3\x03\x64\x95\x9e\xf0\x7f\x17\xfe\x4f\x74\xe1"
- "\x7b\x12\x5f\x83\x3a\x5b\x88\x02\xd6\xe0\xe4\x00\x96\xc7\x2a\xb3"
- "\x9a\xe6\x5e\x98\xea\x74\x04\xcc\x73\x2a\xe1\x18\xc0\xcf\x73\x06"
- "\x52\x3d\x91\x4f\xe2\xab\xe9\x5e\xfb\x24\xbe\x0a\xf3\xb5\x01\x1f"
- "\x67\x4d\x75\xa4\x65\x4d\x75\xf2\x8e\x79\x20\xbf\xc3\xf1\x5b\xdc"
- "\x33\x3e\xd5\xf9\x2d\x4f\x73\xd6\xe0\xde\x7a\x16\x67\xb0\x14\x7d"
- "\x28\xe7\x02\x0f\xe7\xb7\xb0\x9c\xc4\x53\x57\x7f\xf7\xd5\xbc\xd5"
- "\x16\x96\x93\xf8\x32\xcb\xe3\xcd\x72\x9d\x93\x34\x68\xa7\x6c\x9e"
- "\x33\x40\x33\xd5\x79\x9d\xa7\xfb\x5e\x33\x03\x35\x5d\xe5\x19\xf6"
- "\x6a\xbf\xc8\x1e\x19\xcc\x6f\x1b\x9a\xc3\x67\x47\x35\xf2\xdb\x86"
- "\xa9\x61\xbd\xaa\x45\x0c\xe7\xb3\xff\xad\x04\xca\x70\xfe\xdf\x0b"
- "\xf8\x6d\xc3\xd5\x7c\xf6\xcf\x53\xe1\x08\xe5\x31\x3a\x7e\xdb\x08"
- "\x28\xf7\x19\x0f\xf7\x19\xf9\xec\x90\xc3\x50\x4f\xc5\x67\x87\x0e"
- "\x84\x23\x94\xc3\x72\xa0\x1e\x94\xd5\x81\x70\x84\x72\xdf\xc4\x0b"
- "\x8a\xc0\x06\xb8\x07\xce\x3d\x35\x8a\x3d\x6b\x5c\x34\x7d\x56\xf6"
- "\x84\x49\xec\x19\x13\x75\xec\x19\xff\x11\xcb\x9e\x31\x45\xcf\x9e"
- "\x11\x0e\xf7\x0d\xcd\xe5\xb3\x23\xaa\xa0\x5e\x04\x9f\xdd\xef\x08"
- "\x1c\xa1\x1c\x59\x08\xf5\xa0\xfc\x20\x3e\x0b\xca\x9a\x0c\xa8\x0f"
- "\xe5\x87\x17\x43\xfd\x3c\x3e\x7b\xe0\x6c\xa8\x17\xc9\x67\x0f\xc6"
- "\xf6\xa1\xac\x1d\x03\xf5\xa0\x3c\x74\x38\x1c\xa1\x0c\xbf\xb7\x8d"
- "\x80\xf2\xf3\xf0\x4e\x43\x0b\xf8\xec\x5f\x47\x41\x3d\x0d\x9f\x3d"
- "\x1d\x9e\x37\x0c\xca\x2f\xe6\x42\x3d\x28\xeb\xe0\xfe\xe1\x50\x7e"
- "\x89\x40\x7d\x28\xcf\x82\x77\x1d\xba\x97\xcf\x9e\x03\xcf\x19\x36"
- "\x90\xcf\x9e\x87\xef\x0c\xe5\x98\x5a\xa8\x07\xe5\x05\xd8\x1f\x28"
- "\xc7\xc2\x7d\x23\xa0\xfc\x5b\x18\x83\xa1\x85\x7c\x76\x7c\x35\xd4"
- "\xd3\xf2\xd9\xbf\xdb\x0b\x47\x28\x2f\x4d\x84\x7a\x50\x5e\x0e\x63"
- "\x38\x1c\xca\x89\x6a\xa8\x0f\xe5\x24\x7c\xdf\xfd\x7c\xf6\xea\x62"
- "\xa8\x37\x9c\xcf\x4e\xdd\x08\x47\x28\xa7\xc7\x40\x3d\x28\x1b\x60"
- "\xfc\x86\x43\xf9\xd5\x20\xa8\x3f\xdc\x3b\x3d\xb3\x32\xf8\x75\x3d"
- "\x09\x9f\xfd\x86\x83\x5f\x77\x17\x1c\xb7\xed\xe7\xd7\xf5\x80\xb6"
- "\x77\xcc\x86\xf3\x70\xdc\x0e\x32\x71\x8f\xe1\x42\x19\x8e\x7f\xd8"
- "\x00\xe5\x28\xa1\x0c\xc7\x5c\x3d\x94\x47\x09\x65\x38\xee\xc2\xf2"
- "\x68\x3e\x3b\x1f\x8e\x3d\xe1\xb8\xcb\x0a\xe5\x31\x42\x19\x8e\x05"
- "\x63\xe0\xe8\xe0\xb3\xdf\xd4\xc2\xf9\x68\x38\x36\x42\x19\x8e\x79"
- "\x85\x50\x1e\x0f\xf5\x83\xa1\x3c\xde\x3a\xa8\x1f\xca\x03\x84\x0f"
- "\xbb\x32\x8d\x0b\x7f\x54\x95\x7e\x95\x28\x31\x26\x52\x51\x9a\x05"
- "\xe3\xc2\x3c\x54\xaf\xe8\x79\x1c\x73\x74\x60\x1d\xe7\xf6\xa1\x46"
- "\x2e\x7c\x18\xc6\xa2\xec\x09\xf5\xee\xba\xa0\xb8\xeb\x34\x62\x8c"
- "\x39\xd5\x42\x73\x03\x0a\x31\x2f\x7b\xc2\x3d\x17\x41\x66\xc2\xfc"
- "\x0e\x4a\x18\xb7\x72\xde\xd0\xa3\x05\xc6\x6b\x12\x6f\xb8\xa7\x1e"
- "\x8e\x50\x0e\x3d\x05\xe3\x05\xe5\x7f\x7f\x1d\x8e\x50\x9e\x35\x0e"
- "\xc6\x6d\x52\x5b\xe6\x5d\x13\x2d\x8a\x40\xfa\xcd\x96\x3f\x38\xc8"
- "\x14\xe2\xe0\xf9\xa9\x80\x9e\xfc\x9e\x99\xd1\x21\x0e\x13\xd0\x7a"
- "\x2c\xc6\x07\x25\xfc\xbe\xfe\xd1\x7c\x58\x47\x0c\xed\xb7\x01\x74"
- "\xeb\xeb\x03\x95\xec\xd9\xf7\xf0\xf5\x8a\xbb\x56\x62\x3e\x09\x3e"
- "\x3c\xcc\xd7\xf5\x6d\xf4\xfa\xc3\x33\x4d\xec\xba\x8a\x48\xd7\x7f"
- "\x83\xd7\xdf\x09\xc1\xb8\xec\x83\xef\x36\x59\x14\x77\xd5\x62\x1d"
- "\x8b\xa2\xa7\x9d\x37\x04\x10\xb3\xad\x51\x78\xc7\xbb\xb0\x5e\x1d"
- "\xde\xe7\xcb\xe6\xc3\xe5\x8c\x2b\xde\x04\x98\x87\x3a\x30\xac\x7d"
- "\x4a\x4d\xda\xc0\xe2\x7a\xc5\xdd\xfb\x77\xa1\x8c\xa4\xd6\x65\x30"
- "\x2c\x0c\x5a\x7e\x7d\xab\x56\xad\x49\x09\x81\xf6\xee\x3e\x90\x6e"
- "\xe7\x6d\xa6\xb4\x71\x80\xa3\xf4\xfc\x34\xba\x5f\x88\xfd\x1e\x43"
- "\xfd\x40\xd9\x6f\x2d\xb5\x39\x43\x5b\x78\xaf\xbb\xce\xe1\xcc\x2c"
- "\x4d\xe4\xc2\x75\x46\xfa\x1d\x5d\x11\xb4\xf2\x7d\xce\xa2\x0c\x49"
- "\x24\x3d\x34\x29\xc7\xa0\xfd\xa0\x23\x32\xfd\xd4\x55\x97\x5e\xdb"
- "\x73\x14\xea\xbe\x89\xb6\xa4\xcc\xa0\x72\x57\x3e\x65\x78\x87\xdf"
- "\xe3\xba\xa7\x24\xd1\xb8\x16\x53\x79\x57\x71\xf7\x24\xdc\xd9\xe4"
- "\x50\x3f\x59\xe0\x30\x5e\x89\x76\xe6\xe8\x32\xf8\xed\x3a\x63\x1f"
- "\x87\x82\xc5\x01\x56\xdc\xbd\xee\x51\x3b\xca\x97\x27\xb1\xee\xcf"
- "\xb9\x9e\xa7\x46\x8f\x4c\x26\x4a\x53\xc2\x59\x2c\xaf\xe6\x33\xeb"
- "\x86\x9b\x9b\x6b\x88\x29\x81\xb6\x95\xcc\x67\xb6\x9a\xb8\x9e\x8d"
- "\xa3\xf3\x51\x4e\x4f\x46\x3b\xdb\x29\x1c\x17\x27\x8c\x33\xac\x21"
- "\x77\xeb\xc4\xbe\xe0\xfa\xb1\x09\xc6\x0e\x65\x68\x8c\x7d\x31\xcf"
- "\xe9\xc4\x58\x72\x59\x16\x18\x07\xb6\xbe\xde\x8d\x31\x29\x89\xf0"
- "\xdc\x2d\x5c\x98\x96\x54\xce\xc6\x6f\x86\x2a\x8c\xcd\x65\xa3\xfb"
- "\xe5\x31\xd3\x31\x87\x6b\x3e\xab\xeb\x4e\xbb\x85\x42\x9c\x80\x85"
- "\x4b\x13\x13\x96\x6b\x56\x2c\x4c\x89\x1b\x3b\x68\xe5\x70\x4d\x42"
- "\xb2\x26\x01\x97\x5c\x76\x02\x96\xe5\x15\x8b\x97\x25\x6a\x30\x03"
- "\x79\xe7\xfc\xc5\x11\x20\x47\xd7\x50\xf9\x52\x11\x42\x65\x7e\xbe"
- "\x60\xe6\xe8\xc4\x54\x9e\xd3\x3c\x7c\x17\x7f\x59\xd1\x6b\x52\x7b"
- "\xcf\xbb\x8b\x71\xad\xe5\x0c\x1a\xaa\xe7\xc1\x3a\x1b\xbc\x23\x8c"
- "\xe0\x9e\xbe\xa0\xb6\xcc\x5e\xae\xf8\x97\x16\x45\xc8\x46\x6a\x3b"
- "\xc9\xec\xa5\x03\x1e\x74\x08\xdf\xce\x58\xbc\x3f\xe1\x1a\xfd\xb6"
- "\x9c\xd9\x2b\x19\xf4\xc8\xfd\x94\x56\x05\x54\xc6\x87\xeb\xbd\x58"
- "\x2c\x2c\xcd\xcc\xd1\xfc\xde\xfe\xd1\x20\xc7\x29\xe8\x77\x3c\xc7"
- "\x43\xbc\x99\xb4\xd0\xd8\x01\xfc\xb6\x31\x45\x18\xb3\xc3\xb9\x7d"
- "\x64\x14\x17\x3e\xa6\x88\xfb\x53\x24\x49\xdf\x43\x94\x87\x60\xce"
- "\x07\x6a\x80\xbf\x1f\x26\x0f\x1d\x4b\x6b\x54\x42\x9f\xdf\x3d\x96"
- "\x56\xa3\xe4\x73\x1e\x0d\x6a\x1d\xf8\x80\xc6\x2e\xe4\xb9\x36\x3b"
- "\xec\xe4\xe3\xf1\x04\xf5\xb8\x62\x5b\xdf\x09\x13\x6d\x7d\x47\x46"
- "\xd8\xb7\x4d\x2e\x32\x3d\xfc\x53\x32\xe1\x11\xfe\xbb\x8f\x4a\x08"
- "\x69\x56\x84\x24\x7e\x34\x9e\xea\x16\x55\x76\xd5\x90\x6a\xdb\xf6"
- "\x31\x51\x18\x2f\xab\x7d\xfb\x14\xd2\x11\x1e\x65\xfc\x10\xea\x9c"
- "\x04\xdd\xe7\x13\x0d\xf0\xef\x00\xa2\x6c\x1f\xdc\xcf\x78\xa8\xc3"
- "\xa8\x2c\x2d\x19\xc3\xec\xbe\x31\x30\x67\x28\x3f\xdd\x33\xe7\xa3"
- "\xc3\x25\x04\x9e\x4d\x0e\x75\x4c\x54\x7e\x3c\xba\xd3\xf5\xb5\x1f"
- "\x45\x95\x90\x36\x8c\xb1\x0c\xba\xe5\xd1\xb3\xb9\x84\xdf\xfe\x8c"
- "\xfe\x40\x8a\x5d\x09\x82\xb3\xb2\xa2\x26\x97\xa4\x9e\x27\xbd\x1d"
- "\xdf\x69\x03\xff\x02\xf7\xb7\x63\x0c\xd4\x4f\x22\x68\x2c\xc4\x34"
- "\x13\xcd\x61\x1b\x52\x09\xf2\x02\xf7\x9d\xb6\x67\xe5\x74\x13\x81"
- "\xeb\xd9\x8e\xff\x88\x20\x15\xf1\x56\x62\xd6\x15\x90\x76\x65\x34"
- "\x79\xf7\xa5\x02\xf2\x26\xe8\x29\x6f\x5e\x26\xc1\x54\xf6\xbd\xae"
- "\xed\xe9\xb8\xae\x0d\x74\xac\xd1\x62\x6c\x2a\x9e\xff\x4e\xdb\x0b"
- "\x65\x61\xc7\x32\x6d\x50\xa5\xb5\x80\x3c\xda\x48\xb4\xed\x4a\x12"
- "\xd2\xbe\x46\xdb\xab\x52\x9f\x0b\x6d\x81\x70\x0b\xe3\x8a\x71\xf1"
- "\x30\x5e\x1e\x8e\xd3\x3d\x3a\x32\xbd\x59\x71\xcf\xe3\xbd\xaa\x49"
- "\x5f\x8c\xcb\x8a\xf2\x25\xc6\x74\xe6\xd4\xcf\xe8\x9d\xea\x31\x51"
- "\x69\x57\xa1\x5f\x18\x77\xe8\xe0\xa0\x02\x94\xcf\x41\xf6\x50\xe0"
- "\x3b\x73\xbc\xb6\xd7\x3c\x3c\x6e\xd5\x64\xa3\x8c\xce\xb5\x45\x60"
- "\x7e\xa8\x20\xec\x27\xe6\x6a\x5e\xfb\x35\x8c\x65\xba\x36\x10\xea"
- "\x05\xc3\xf9\x3e\xe6\x66\x3b\x71\x8e\x18\x54\x34\x52\x4f\x73\xf0"
- "\xaa\xf3\xd3\x88\xca\x98\x46\xd4\x9a\x7f\xa7\xbc\x34\xc3\x79\x60"
- "\x50\x01\x9f\x19\x39\x10\xed\x31\xec\x5c\x9f\xc7\x35\xbf\x24\x44"
- "\xf3\x53\xfc\xdd\xbb\x4e\xf3\x04\xd0\x50\x3d\xae\x8a\xea\x0f\xa8"
- "\xb3\x2a\x7a\x7f\xca\x78\xbc\x77\x59\x7b\xcf\xdf\xc6\x73\x99\x3b"
- "\x36\x70\xeb\x02\x23\x31\x3f\xf7\x65\x45\xef\x03\x7c\xf6\xdb\xfb"
- "\xf9\x9c\xc9\x94\x17\xa1\xfc\x56\x7b\xcf\xfb\xca\xf9\xec\xbf\xa8"
- "\xa0\xfd\x31\xed\x8a\xc0\x6a\xf8\x17\xe6\x48\xef\x02\x7c\x6f\xe7"
- "\xde\xfe\x11\xf8\xde\x34\xa7\x10\xbc\xd7\x3c\xa0\x19\x1f\x3e\x2e"
- "\x83\xc6\xd9\xbf\x0e\xe3\x2b\xe4\x5c\xc5\xf1\xc0\x31\xe0\xae\x6b"
- "\x7b\xd1\x77\xbd\xae\x0d\x86\xf1\xc5\x18\xcc\x21\x69\xf3\xe1\x9e"
- "\xed\xe3\x72\xe0\x5a\x9f\x76\xf5\xb8\x52\xcc\xed\x65\xd6\x5b\x89"
- "\x73\xdb\x38\x23\xc6\x18\xdc\x91\x02\x73\xae\xef\x38\x90\x45\xc6"
- "\xe5\x09\x73\x8b\x60\x3f\xb9\xec\xbf\xcc\x6e\xc7\xbd\x75\xd0\x37"
- "\xe8\x5f\x35\xfc\xd7\x58\x14\xbd\x07\xb6\x0f\xea\xaf\xb5\x28\x82"
- "\xed\xd0\xd7\x48\x3e\x73\xd4\x74\xfc\x0d\xd7\x22\x61\x6c\x7a\xe3"
- "\x38\xe0\x78\xb0\xb1\xe8\xd3\x43\x1a\x8b\x18\x23\xd4\xb3\x71\x99"
- "\x39\x70\x6f\xef\x6a\x3e\xf3\x51\xb5\x5b\xbd\x11\x52\xbd\xc5\xa3"
- "\x58\xbd\xfc\x1a\x56\xef\xe7\x1b\xe1\x7a\x19\x1b\xef\x3e\xcb\x3b"
- "\x8f\x77\x9f\x85\xd2\xbd\xd3\x6b\xd9\xbd\xaf\xc5\xb3\x7b\x07\xe2"
- "\xbd\x7b\x3c\xfa\xb4\x43\xaa\x3f\x55\xc5\xea\x6f\x88\x60\xf5\x1f"
- "\xd2\xb9\xd5\x3b\x2e\xd5\x7b\x29\x8f\xd5\xcb\x2e\x62\xf5\x1e\x29"
- "\x86\xeb\x4e\x2f\x7d\xb9\x2a\xdd\x93\xac\x61\xf7\xbc\x55\xce\xee"
- "\x19\x3f\x11\xf8\x69\x84\xbc\x2f\x21\x83\xa4\xfa\x09\xc2\x7b\xef"
- "\x9d\xcd\xea\xff\xc2\xe6\x56\x6f\x32\xab\x87\xd7\x0f\x41\xbd\xde"
- "\xa5\xed\x3d\xd3\x02\x59\xbd\x67\x73\x90\x1f\xa1\xce\x12\x2e\xf3"
- "\x81\xc3\xed\x3d\xfb\x15\x40\x3b\x47\x80\x36\x11\x78\x04\xda\x45"
- "\x70\xc6\x21\x55\xf0\x7b\x14\x7e\xd7\x41\xcc\xb5\x28\x7a\xa9\x01"
- "\x77\x9d\x5e\x6d\x5f\x99\x21\xfb\x5d\xb6\x37\x0e\x64\x83\x6d\x43"
- "\x7d\xc5\x59\x0d\xa4\x31\xfa\xb7\x0f\x2d\x32\x72\x2c\x37\x3c\xf0"
- "\x28\xc8\x36\x21\xa7\x61\x2d\xcc\xa0\xb1\x96\x73\xc6\x46\x71\x03"
- "\xfb\x63\x0c\xb5\x00\x73\x6a\x23\x29\xe2\x1a\x95\xc6\x0e\x12\x58"
- "\x09\xeb\x0c\xd6\x2f\x82\x35\x55\xb3\x34\x00\xd6\xd7\x90\x4b\xc6"
- "\x6b\x42\x7b\x05\x33\xa3\xd3\x97\xb0\x7c\xd8\x28\x57\x21\x36\xc3"
- "\x7c\x0c\xa6\x79\xda\x96\xa2\x5c\xa1\x1a\x00\xbf\x31\xb6\x22\x69"
- "\x1f\x7c\xbf\xa9\xfd\x8f\x33\xa3\x3b\xc2\x1f\x35\x76\xfc\x29\xb2"
- "\xe0\x7a\xf8\xd8\xa8\xeb\xdb\x9f\x2c\x72\xfc\x51\x57\xe4\x18\xdc"
- "\x3f\xda\x19\x1e\xa5\x82\x67\x03\x6e\xe7\x2a\x0f\x72\x45\xca\x83"
- "\x69\x26\x25\xb6\x7b\x2c\xad\x40\x79\x34\xad\x4a\x79\x94\x2b\x56"
- "\x1e\x4b\x33\xc2\xb1\x10\x73\x76\x81\x2c\xa7\x5a\x7e\x34\xad\x14"
- "\xd6\x0d\x15\xd0\x39\x24\x57\xb4\x5d\xf2\xe3\x1c\xa4\xb2\xd0\x41"
- "\x4e\x24\x5e\x25\xd6\xd0\x21\x35\xf0\x5f\x6b\xed\x3b\xae\xd8\xda"
- "\x77\x72\x11\xed\x73\xf8\x78\xfa\x8e\xb8\x37\xf5\x28\xc7\xfa\x2c"
- "\x8c\x07\xb6\x79\x26\x1f\xbf\xd1\x8a\x71\xa8\x15\xa1\x39\x9d\xe2"
- "\x50\x2b\x59\xbe\x38\x57\x2c\xea\x1f\x22\x0e\xb5\x60\x23\xa0\x71"
- "\xa8\x41\xdf\xa3\x7a\x1f\xac\x5f\x34\xc7\xa4\x03\xe4\xb3\x6d\x4f"
- "\xaa\x50\xbf\x43\x79\xac\x2d\x33\xd4\x24\xea\x67\x28\x63\x38\xb7"
- "\x0c\x69\x84\xff\x06\x38\x0f\x73\xf4\x9d\x28\xf1\x3c\xbf\xb5\x65"
- "\x1a\xda\xd0\x9d\x7c\xfc\x2f\xda\x70\xbf\x25\x1f\xff\x94\x73\xdb"
- "\x48\x8d\x73\xdb\x64\x23\x9c\x1b\x03\xff\x63\x9d\x5b\x5a\xa6\xc3"
- "\xbf\x0e\xfe\x67\xc3\x7f\x0c\xfc\xc7\xc2\x7f\x3c\xfc\xeb\xe1\x3f"
- "\x11\xfe\x93\xe1\x3f\x15\xfe\x33\xe0\x7f\x03\x1f\xda\xb2\x18\xe3"
- "\x68\x42\xdb\x46\xa0\x7b\x84\xd8\xae\x34\xbe\x61\x63\xe1\x7d\x31"
- "\x6e\x5e\x15\x97\xfd\x36\xfd\x26\x80\x3c\xcf\xef\xeb\x37\x11\x71"
- "\x97\x1f\xf4\x80\xc6\x3a\x60\x66\x94\x75\x80\x2e\xd7\x1a\x3a\xcb"
- "\x04\xff\xa5\xf0\x5f\x65\xdd\x36\xae\x0a\xe8\x97\x6b\xed\xfb\x4c"
- "\x4c\x5b\x66\x18\xcc\x99\xfb\x53\x99\x0d\x29\x6c\x3f\xfc\xce\x13"
- "\x7e\x17\x5b\x14\xe1\xd4\x7f\xc0\xda\x77\xbc\x06\xca\xa5\x16\xc5"
- "\x7d\xb4\x5e\x6b\xf8\x38\x8b\xb0\x4f\x33\x03\xce\x83\xfe\xdf\xa7"
- "\x98\xd5\x7b\x52\x16\x03\x6e\xc9\xcb\xfa\x79\x4b\xe6\x27\xcf\x5b"
- "\xb1\x78\xe1\xcb\x71\x2b\x9e\xd0\x0c\x8a\xd5\x68\x17\x26\x2c\x9f"
- "\xb7\x7c\x65\xdc\xca\x38\x2a\x36\xc1\xa9\x47\xe4\x3e\x68\x98\x67"
- "\xc3\x01\xf2\x7d\x9f\x06\x9e\xc7\xf5\x6a\x92\x0d\x78\xec\xe1\x99"
- "\xd1\x47\x2e\x5b\x95\x4e\x90\x5b\x82\x1b\x32\x60\xde\x8d\x8d\x3a"
- "\x72\xd9\xae\x0c\x6e\xd0\x10\x1e\x78\x1d\xaf\x99\x1b\xaa\x04\x39"
- "\xe6\x14\x29\x47\x39\x06\xea\x1c\x5c\x6a\x57\x4e\xc1\xfb\xff\xd4"
- "\x3f\xfa\x10\xfc\xe6\xb7\x8f\x29\xc2\xfb\x78\x90\x6d\xe8\x11\x64"
- "\x1b\x56\x7e\xd4\x78\x94\x1e\x9f\x2c\x3a\x4a\xeb\x45\xa9\x8e\xe1"
- "\xf1\xda\x5a\xbe\x1c\xda\x45\xdb\x18\xff\xa7\xfb\x4d\x47\xd9\x3d"
- "\x05\xb4\x0e\xcc\xb3\x7a\x85\x3a\x11\xeb\x51\x5d\x01\xfa\x78\x08"
- "\xfa\x91\xbe\x92\x04\x8a\x73\x17\xf5\x01\xd7\xfc\x4d\x42\x39\xef"
- "\xde\x3a\x9c\xbf\xd8\x1f\x1e\xe6\xeb\x01\xb8\xf7\xe0\x52\xa6\x3f"
- "\x81\xce\x14\x80\xba\x12\x62\x04\x62\x83\x39\xb5\x8a\xde\x5f\xc4"
- "\x55\x81\xae\x15\x00\xf7\xaa\x1f\xc0\x6b\x34\x9f\x08\x95\xc5\xd5"
- "\x2e\xf9\x57\xcc\x27\x12\x1c\x03\x7c\xb1\x80\x3c\x04\xcf\x79\x0c"
- "\xc7\x0f\xc7\x0b\xbf\x9f\xf2\x99\x61\x56\x8c\x95\xb0\x2b\x8c\x04"
- "\x39\xfa\xea\xb2\x98\x6d\x45\xed\xda\xff\x6a\x53\xeb\x64\x71\xec"
- "\x18\xbd\x34\x71\x4b\xe7\x2f\x58\x1c\x17\x4b\x3f\xb9\xcd\x5f\xb1"
- "\x62\xe5\x92\x38\x4d\xdc\xfc\x97\xe3\x35\xf4\xb2\x66\xe5\x0a\xa8"
- "\xb2\x30\x71\x85\x66\xd9\xaa\xa5\x9a\x25\x2b\x16\xa2\x74\x1c\x97"
- "\x90\xb0\x52\x9f\xd8\x8b\xb0\x3b\x35\x4b\x56\x2e\x4e\x5c\xa8\x87"
- "\x1f\x2b\xe2\x96\xc6\x6a\x28\xd5\x57\x40\x53\x8b\x17\x6b\x84\x27"
- "\xac\x88\x9f\x9f\x80\x8c\xb0\xf4\x15\xa8\xe4\x76\xbf\x5c\x76\x0e"
- "\xc6\x78\x78\xe8\x87\x75\x59\xd1\xb7\xbd\x24\x10\xc6\x3a\x47\x97"
- "\x85\xfe\x0b\x50\xb6\x53\x7d\x2a\x53\x5d\x88\x76\xe6\x37\xe0\x1d"
- "\x5b\x81\xe7\xdb\x32\xfb\x26\x8a\xef\x46\xed\xce\x18\x23\x14\xe3"
- "\xcf\x2a\xfa\x9e\xa7\xfb\x85\x81\xff\xa9\x7f\x4b\xa6\xfa\x1f\x6c"
- "\x2c\xfa\xee\x75\xb7\x61\x31\x9b\x69\xdf\xf7\xd1\x8f\xce\x02\xcf"
- "\x40\x99\x40\xc8\xe9\xa0\x80\x7b\x2e\xe2\x3d\xdc\xb6\xc9\xb9\x70"
- "\x5f\xad\x24\x97\xf7\xa5\x7e\x77\xb4\x5e\x66\xdf\x9e\x7c\xdf\x71"
- "\xb0\xee\xf4\xcd\xc5\x7e\xf9\x58\x43\x34\xd7\xa0\xdd\x4f\x8a\x08"
- "\x19\xa6\x26\xda\x6b\x5b\x87\x45\xb7\x85\x0d\xb1\x76\x18\xc8\x5d"
- "\x1d\x30\x8f\xed\x4a\xf2\x50\x3b\xf0\xc5\xea\xc7\x48\xc0\xda\xc9"
- "\x44\x59\xb4\xa8\x08\x63\x1c\x93\xf2\x89\xb9\xc4\x1c\x03\x3a\xb5"
- "\x7d\x3f\x29\x37\xd5\x93\x0a\xc7\xdb\x2c\x6f\x48\x0a\xca\xd5\xf7"
- "\xcd\xc1\x98\x76\xe9\x6b\x79\xe7\xa1\xf7\xac\x3d\x0e\x36\x15\x61"
- "\xbe\x8f\x87\xcc\x8e\xaf\x4c\xe6\xd4\xbd\xc4\x9c\x6c\x36\x61\x3c"
- "\x91\xcb\x8a\xf0\x67\x8f\xc2\xb5\xbb\xcb\xe1\xbe\x29\xe4\x2e\x28"
- "\x8f\xc5\x67\x64\x6d\xe7\x6b\x5e\x0b\xe7\x6b\x5f\xdb\xce\x5b\x80"
- "\xa7\x1a\x36\x0a\x39\x3c\xd0\x3f\x00\xfd\x20\x90\x4f\xf5\x49\x24"
- "\xa2\x49\x11\x5e\x4d\x75\xfb\xf1\xb4\x7c\x3f\x94\xa9\xaf\x8d\x39"
- "\x79\x3b\x96\xfb\x41\xd9\xc6\xca\xf9\x58\xee\xdf\xa4\xb8\x2f\x90"
- "\x95\x3f\xc2\x72\x24\x94\xd5\xac\x5c\x49\x68\x5c\x0c\xc5\x7d\x03"
- "\x59\xf9\x73\x2c\xc3\xd8\xdf\x37\xca\x94\x84\xfd\x3d\x07\x34\xbb"
- "\xef\xe9\xf4\x3a\xd0\xcf\x92\x2f\xd0\xf9\x70\x2c\x2d\x1e\x6d\x0f"
- "\x30\x1f\xc2\x4f\xdc\x53\x8b\xba\xdd\x7d\xb1\x3d\xa3\xf0\x18\x1e"
- "\x1f\x62\x27\x77\x81\xac\x74\x0f\x5c\x7b\x1c\xc7\xce\xab\xad\xe5"
- "\xe0\x03\xcb\xa6\x3a\x78\x13\xbf\xaf\xff\x68\x7e\xdb\xd8\x22\x7e"
- "\x5f\x64\x06\x4f\xd7\xb1\xa1\xfa\xa2\x14\x3b\x8d\x33\x0d\xf2\x29"
- "\xcc\xa1\xfb\xf6\x60\x9f\xac\x20\xef\xf9\x88\x3b\xab\xe2\xb7\x8d"
- "\x2c\x02\x3d\x4a\x3b\x59\xeb\x40\x7f\x67\x90\x71\x23\x1e\x3f\x11"
- "\x8f\x72\xc1\xf8\x9f\x70\x7b\x23\x33\xb8\x74\x1d\xe1\x07\xf6\x1f"
- "\x3d\x39\x9e\x37\xc1\x1a\xa5\x60\xb6\x6a\xfe\x2b\x78\xfe\x57\xf4"
- "\xb9\x83\xfa\x8f\xe6\x56\xc5\x63\x9e\x28\x8a\x2f\x69\xb8\x5e\x27"
- "\x01\x9e\xac\xd1\x85\x38\xb7\x8d\xd7\x9c\x88\x3f\xef\x5f\xce\x21"
- "\x45\x84\xcf\x1c\x6f\xd8\x27\x8c\xbb\xea\x80\xe7\x38\xe0\x5d\x51"
- "\x36\x38\xc8\x95\x2a\x41\x46\x19\x7d\x60\x41\x4d\x0f\x7e\x95\x2e"
- "\x04\xde\xe9\x31\xb3\xf6\x2a\xa9\xec\xc0\xb9\x12\x61\x3b\x91\x4c"
- "\xc8\x84\x64\x87\x29\xc4\x4a\xe3\x63\xab\x30\x5f\x0c\xdf\x77\x64"
- "\x51\x93\xe2\xfe\xf1\x53\x52\xe1\x1d\xe0\xdd\x8f\xd6\xd7\x04\x72"
- "\xf0\x1e\x8f\xb2\x71\x83\xfb\xee\xd7\xc2\xd8\x6a\x45\xb9\xde\xcf"
- "\xfe\x53\xbe\xe1\x56\xe8\x08\xee\x63\x3e\x04\xf2\x08\x77\x5d\x17"
- "\xc2\xc1\xfa\x83\xd7\x4e\x68\x2f\x11\x7c\xa6\x30\xd6\xd4\xc7\x9d"
- "\x1f\x08\xe3\x0c\xcf\xc7\xb8\xdc\xe2\xb8\xc2\x1a\xa6\x75\x5e\x8f"
- "\xf7\x4e\xff\xed\xcf\x58\xa1\x7f\x1a\x7e\x4b\x8b\xd7\xbc\x55\xb0"
- "\xd6\x3e\xc4\xf8\xa3\x9f\x0e\xfe\xe3\xf9\x3d\xba\x02\xeb\xa0\x7e"
- "\xc9\x34\x8f\xe7\xf6\x27\x35\xa2\x8d\x04\xe6\x1b\xf0\xc8\xfd\x27"
- "\x8a\x40\x17\xf6\x1e\x8b\xd0\xc0\xf2\xa7\xf5\xf8\x8a\x0f\x71\x62"
- "\x5e\xe0\xab\x18\xe3\x7d\xf4\x09\xad\xcd\x4f\x9a\xf6\xf3\x99\x2b"
- "\x0b\xdb\x07\x9d\xfa\xba\x9f\xed\xe9\x7c\xf2\xc8\x5e\x18\x17\x55"
- "\x4b\x74\x07\x3f\x5e\xc1\x64\xef\xfe\x4e\x1c\x2b\x07\xac\x23\x29"
- "\xa7\x89\xd2\x0e\xeb\xe5\xdb\x2f\x66\x29\x87\xc3\x3a\xe3\x84\xb5"
- "\xbf\xac\xaa\x84\x4c\x9d\x44\xd2\x2b\xe2\x5b\x88\x98\x17\x8d\x0f"
- "\x1f\x53\xf4\xd6\x8b\x56\x25\x7e\x33\xc2\x3c\x68\x54\x4f\xdd\xfe"
- "\xb4\xf5\x2f\x9f\xdb\x51\x77\xb3\x1c\xf8\xdc\xaa\x74\xb4\xea\x34"
- "\x34\xc6\x3c\xe8\xe4\xe9\xf1\x3c\xe7\xfa\x8e\x84\x79\x48\x8c\x9a"
- "\x1c\xcc\x33\xfd\xc9\xb4\x2a\xba\xef\xff\x13\x5d\x09\xf9\xa4\x36"
- "\x97\x94\x37\xd4\xe1\x7e\xe8\x3d\x9f\xe8\x8c\x28\x2f\xf6\x71\x80"
- "\x4c\xf8\x26\xc8\x84\x30\x5f\xef\xe6\x54\x86\xd1\xe2\xb7\x24\xcc"
- "\x9b\x26\xca\x83\x0e\x98\xa3\x79\x42\x6e\x34\x47\xe6\xfd\xcd\x79"
- "\xc2\x77\x25\xcc\x99\xb6\x33\x89\x0c\xdc\xa9\xe4\x74\xde\xbe\x21"
- "\xf5\x59\x4e\x7d\xa6\x23\xb8\x50\xc3\x68\x31\x77\xda\x94\xe5\x1a"
- "\xf2\x0f\x78\xf7\x13\x5a\x7f\xe7\x64\x7f\x1a\x03\xcb\x01\x7c\xe7"
- "\x00\x9e\x73\xc0\x78\x02\x0d\x8a\x81\x6e\x5e\x75\x10\x91\x06\xd7"
- "\xd3\x45\x1a\x3c\xb0\x89\xd2\x00\x74\x97\x35\x33\x05\x1a\x9c\x05"
- "\x1a\x34\x00\x0d\x0c\x24\xe3\xe4\xf4\x72\x32\x75\x1a\xd0\xa0\xb9"
- "\x05\xf3\x13\xb0\xdc\x74\x89\x6c\xec\x29\x2d\xce\x5a\x95\x95\x36"
- "\x46\x83\xfd\x2f\x31\x1a\x1c\x7c\xc9\x0a\x72\x4c\x3f\xe3\x5b\x50"
- "\x76\xae\xd2\x69\x30\x67\x14\x6f\x88\xc1\x3c\xda\x8c\x16\xd7\x81"
- "\x16\xd7\x19\x2d\xd2\x96\x03\x2d\xaa\x6b\x68\x6c\xaa\x4f\x6a\xcb"
- "\x49\x79\x4c\x01\xa9\x00\x5c\x02\x5a\xcc\x47\xba\xa0\x5e\xed\x5c"
- "\xa3\x0d\x03\x3d\x5a\x9d\x97\x42\x22\x44\x7a\x80\xde\xde\x6b\x53"
- "\x0a\x41\x3f\xdf\x28\x98\x9b\x22\x3d\xd4\x94\x1e\x97\x04\x7a\x74"
- "\xa0\xaf\x1c\xd0\xa3\x03\xe8\xd1\x01\xf4\x30\x30\x7a\x20\xce\x4f"
- "\xb1\x85\xf0\xdc\x3f\xb5\x18\xbb\xa2\x33\x3d\xd6\x08\xf4\x38\x7b"
- "\x33\xf4\x78\x40\xd7\x99\x1e\x91\x63\xba\xa3\x87\x34\x27\x1e\x7a"
- "\x0c\xe9\x71\xbd\x40\x98\x13\x83\x71\x4e\x64\x28\x87\xc1\x5a\x84"
- "\x63\x5a\x56\x75\x84\xce\x09\xcc\x0b\xf6\xd6\x8b\x76\x65\x79\x03"
- "\xd0\x25\x16\xe8\x92\x22\xd1\x85\xd1\x63\x4c\x51\xe1\xe7\x6c\xfc"
- "\x35\xcf\xe1\x9a\x81\x73\x03\xe9\x03\x74\x82\xf9\xe3\x2d\xaf\xa0"
- "\xfb\xf7\x56\x68\x93\xc3\x79\x82\x73\x04\xe7\x43\x45\x7c\x1d\xcd"
- "\xd3\xfe\xc9\xb4\x52\x82\xdf\x5d\x3f\xd1\x1d\x01\x5a\xe5\x12\xe7"
- "\x2a\xa0\x4d\x12\xee\xed\x20\x03\x30\xbf\xe0\x27\xba\x2c\x94\x17"
- "\x54\xc0\xf3\x77\x3b\x81\x4e\xce\xb6\x88\x5e\x1b\x41\x87\xc2\xef"
- "\xb1\xee\xdf\x61\x31\x97\x32\xdf\xf3\xfe\x66\x38\x1f\xe8\x00\x1a"
- "\xc1\xdc\x91\xcd\x19\x57\x8e\xe5\x6f\xb4\x64\x57\x3d\x09\xea\xbd"
- "\x90\xd1\xc8\xe9\x36\x67\x26\x2f\xc4\x39\x93\x01\x34\x3a\xed\x27"
- "\x8d\x1e\x64\x7b\x29\xc2\x01\xab\x43\x5b\xa2\x61\x9d\x04\x1a\x3d"
- "\x50\xee\x8b\x46\xce\xbd\xfd\x74\x4e\xd5\x90\x6a\xcc\x93\xc0\x2d"
- "\x9b\xae\xe0\x40\x5f\xea\x00\xbd\xf4\x13\xab\x83\xa4\xce\x21\xca"
- "\x94\x3a\xd2\xd3\x3c\xfd\x14\x31\x5b\x8a\x69\x8c\x73\xb4\xf7\x62"
- "\xee\x11\xb3\xa3\x18\xf0\x6a\x8a\x0a\xcb\xbb\x68\xd9\x4a\xd6\xcc"
- "\x21\x01\x34\xef\xa8\xae\x80\x6c\x04\xfe\x3c\xf0\x52\x81\x92\xcb"
- "\x79\x34\x88\x57\x61\xce\x24\x62\xaa\xd4\x3b\x30\x46\x5b\x70\x45"
- "\x7c\x39\xc6\xb5\xfc\x0a\x63\x88\x57\xda\xa0\x4d\x2b\xdf\xe1\x84"
- "\x35\x23\xdf\xc0\x17\x63\x1e\x89\x47\x71\x8d\xc0\xb8\x73\x0a\x4d"
- "\x6f\x94\x45\xd0\xee\x65\x4a\xdb\x09\xb2\x97\x86\xc6\x6b\x80\x73"
- "\x8a\x8a\x45\x36\xb8\xfe\x93\x75\xd8\x2f\x66\x83\x66\xc7\x47\x31"
- "\x1e\x78\xf8\x94\x5f\xbf\x9f\x66\x0d\x34\x82\xbe\x0b\x32\x1a\xb6"
- "\x33\x87\x67\xba\x60\x96\xb9\xda\x4e\xed\x8f\xd6\xf4\xf8\x9e\xc6"
- "\x14\xf4\xc7\xc2\x9c\x14\xb8\x66\xff\xe4\x31\xf4\xe1\xe0\xf7\xc2"
- "\x7a\x15\xfe\xa4\xa6\x68\x81\x55\x29\xad\xcb\x9a\x2c\x58\xcf\x92"
- "\x27\x68\xf9\x74\xcc\xdd\x71\x14\xde\x0b\xf5\xa0\xb7\xeb\xed\x14"
- "\x53\xfe\xb2\x20\x4b\x89\xf6\x11\x3b\xe0\x43\xf9\xe7\x7f\xa3\xb9"
- "\x60\x2f\x28\x06\xec\x38\xa9\x73\x10\x7c\xfe\x8c\x47\xf0\x1b\x83"
- "\xa6\xbc\x5d\xb9\x77\x54\x7b\xcf\x7e\x13\xd3\x1b\xa4\x3c\x98\xee"
- "\xf9\x2e\x11\x67\x0e\x2c\x80\x36\x11\x67\xea\x33\x94\x0c\x5b\xa2"
- "\xd1\x46\x17\xe4\x89\x2d\x15\xcd\x97\x48\x1a\xf0\x71\x45\x7c\x01"
- "\xcd\xaf\xd2\x07\xf0\x9d\x5b\x03\x78\x72\x1d\xf4\x7d\xc0\x13\xc4"
- "\x81\x7c\xc0\x0f\x6e\x0d\xe8\xf9\x1d\xa0\xe7\x0b\x38\x82\xb2\x17"
- "\x1e\xe7\x00\x8f\x86\x94\xc2\x39\xa0\x13\x07\xb8\x0e\x78\xa2\x7d"
- "\x33\x85\x0c\x7c\x13\x78\x74\x17\xe2\x08\xc8\xc5\x53\xf4\x80\x23"
- "\xab\x00\x47\x92\x68\x3e\xe2\x88\x7c\x25\xc3\x8f\xf7\xea\xb3\x94"
- "\x46\x31\x1f\x39\x1d\xdf\x87\x47\x54\x22\x7f\xc4\x64\x60\x5f\x95"
- "\x4e\x5c\x9f\xd6\xe8\x02\x2a\x6d\xc0\x23\xdb\xa7\xd0\x73\x74\xde"
- "\xae\x8a\xef\xc5\x31\x5e\x8b\xc6\x31\xd9\x7d\x99\x44\xd1\x9c\x9d"
- "\xdf\x45\xf4\xda\xbc\x94\x0c\xcf\xbf\x4c\x06\xe6\x2f\x25\x5a\x98"
- "\xaf\xca\x7c\xe8\xc3\xdc\xe5\x2a\x42\xf3\x98\xf4\xec\x37\x0d\xce"
- "\x7b\xcd\x63\x02\x72\x75\x44\x3e\xce\x99\x65\x5a\x57\x9f\x1c\xc6"
- "\x39\x55\x4e\x18\x3b\x1a\xf3\x4d\xf1\x30\x8b\x67\xac\xba\x37\x88"
- "\xc9\xf9\x0f\x17\x33\x3f\xa5\x88\x60\xd0\x55\xee\x6a\x52\x3c\xbc"
- "\x84\xdf\xaa\x21\xfa\x14\xa2\x68\x12\xaf\x81\xec\xc9\x01\xad\x46"
- "\x66\x90\x0c\x2e\x34\x4b\x67\x4e\xbe\x84\x79\x01\xfc\x9c\x87\x0f"
- "\x53\xdf\x6e\xa7\x71\x0e\x7d\x5f\x6e\xeb\x9c\xda\xdd\x4d\x24\x8a"
- "\xff\x1d\xd0\x63\x11\xbc\x6b\x13\x19\x98\xd7\x04\xef\xba\x8a\xbd"
- "\xab\x98\x7f\x9d\x33\xec\x1d\x03\xd7\xba\xcc\x01\x66\xfd\x1d\xe6"
- "\x00\x0b\xa9\x01\x0c\xbb\x97\x7f\x18\xfd\x8e\x69\x4c\x9e\x36\xb3"
- "\xa3\x8e\xe0\x73\xd1\x36\x64\x6e\xa1\x3c\x3d\x1f\x79\x99\x2b\xd0"
- "\x15\xcc\xab\x05\xde\x6e\x8b\x27\x3c\xfc\x3e\x5a\x6f\xc5\x18\x38"
- "\x54\xe6\xb3\x28\x34\x46\x94\xd3\x8e\xc1\x39\xe4\x7d\x37\x9e\x37"
- "\x22\xcf\xe3\x75\xca\xf7\x70\x9f\xb9\xf6\x3c\xc1\xf6\xdc\xdb\x41"
- "\xfa\x8b\x6d\x5d\x50\x0c\x9c\x80\x6d\x21\x2f\xa0\x4d\x07\xe7\x1a"
- "\xa3\x7d\x31\xfa\x98\x47\xf0\xe1\x51\x46\x56\xb6\x62\x7e\x1b\x15"
- "\xf2\x00\xe5\x15\xc0\x6f\x8c\xb9\xcc\xf3\xba\x00\xe0\x33\xec\x67"
- "\x2f\xa0\x77\x94\xc8\x17\x70\x4e\xed\xc9\x1b\x7d\xd6\xa9\x50\xa7"
- "\x51\xe3\xef\x1b\xe5\x0f\xff\xe8\x37\x70\xbc\x4f\xff\xb7\x81\xfd"
- "\x70\x1e\x3d\x84\xb8\xe9\x6c\x75\xc3\xcc\x66\x86\x99\x88\x49\x22"
- "\x6e\x52\x6c\xa2\xb9\x1d\x8a\xd1\x3f\x35\x9e\xf6\xd1\x4f\xdc\xac"
- "\x68\x96\x70\x73\x8a\xde\x0d\x37\x9b\xf9\x0e\x6e\x90\x37\xdc\x1c"
- "\x34\x41\x8e\x9b\x83\x9e\x95\xe3\xa6\xf6\x80\x27\x6e\x76\xc6\xcc"
- "\x41\xaf\x79\xc3\x4b\xd0\x63\x1e\x6a\x52\x68\x67\xfb\xc6\xca\x41"
- "\x87\xfd\xc7\xca\xc1\x27\xe4\x58\x39\xc8\xfe\xff\x2f\x56\x0e\x99"
- "\x29\xc3\x4a\xd5\x0d\x62\x65\x13\xc5\x4a\x35\xff\x4f\x98\x13\x02"
- "\x7e\xe4\x2f\xf2\x81\x95\x8b\xba\x99\x0b\xbf\xf3\x85\x95\x43\xfe"
- "\x2a\xc7\xca\x21\x0d\x72\xac\x1c\xb2\x43\xc2\x4a\xe1\xda\x2d\xc1"
- "\xca\x21\x45\x77\x06\x2b\x87\x14\x51\xac\xbc\x8c\x58\xa9\xdd\xd4"
- "\x3d\x56\x0e\x3a\xe2\x1d\x2b\xe1\x3c\xc5\xca\x41\x47\x24\xac\xac"
- "\xeb\x06\x2b\x1f\x59\xee\x07\x56\xaa\x29\x56\xaa\x7c\x60\xe5\x22"
- "\x18\x2b\x81\x2f\x28\xef\x79\xf0\x86\x80\x95\x11\x2e\xac\xbc\x01"
- "\xfe\xf0\x8f\x7e\x8f\xe8\xbb\xc2\x4a\xce\xc8\xe4\x4b\xc4\x4a\x3e"
- "\x4c\xc0\xca\xc5\x0e\x92\x72\x06\x30\xb2\xba\x89\xe6\xb0\xa1\x7e"
- "\xbd\xf0\x9f\x3a\x13\xb1\x68\x4c\xd4\x41\x18\x2f\xb3\xa5\x88\x62"
- "\x13\xf5\x4f\x9d\x84\x58\x55\x04\x75\x73\x5d\x72\x27\xc5\xce\x33"
- "\x02\x76\xce\x16\xb0\x73\xee\xf7\xc0\xce\x97\x90\x96\x43\xd7\xb5"
- "\x2b\x45\xec\xdc\x0a\xd8\x39\x94\xca\x0f\xf8\x3d\x93\x61\xe7\x08"
- "\xa7\xd8\x2f\xb4\x69\x9a\x13\x77\x12\xd6\xaf\x96\xce\x38\xfa\x1c"
- "\x6d\xef\xb4\x69\x51\x33\x71\x61\xe9\x6c\x09\x4b\xa1\xad\x03\xbe"
- "\x71\x74\xa8\xc3\x85\xa3\x06\xc0\xd1\x73\x6e\x38\x0a\x7a\xd3\x5f"
- "\x10\xf3\x00\x47\xdb\x28\x8e\xbe\x27\xe0\xe8\xf0\xde\x27\x67\x03"
- "\x8e\x3e\x27\xe2\xe8\xb0\x68\xbb\x61\xef\x28\x7b\x66\xf7\x38\xda"
- "\x46\x71\x54\x7f\xfb\x71\xb4\xc4\x03\x47\x41\x77\xc5\x1c\xec\x5e"
- "\x71\x54\xe4\x47\x8a\xa3\x19\x12\x8e\xd2\x71\x1d\xfe\x56\x65\x0c"
- "\x8c\x7b\x8c\x9e\xea\x6e\x2e\x1c\xd5\x17\x31\x1c\x85\x73\xd4\x7e"
- "\xb2\x02\x70\x14\xf8\x2f\xbd\x02\x63\xfb\x91\x68\xe8\xa3\x0a\xf1"
- "\x75\x37\xcc\x19\x1c\x23\x17\x9e\x2e\x82\x39\x83\x18\xd3\x0a\x73"
- "\x06\x70\x74\xee\x55\x15\xa1\xf3\x25\x13\xe6\x4b\x93\x8f\x1c\x7a"
- "\xa2\xbf\xac\x4f\x3c\x1d\xa1\x90\xe3\xe9\x88\x51\x72\x3c\x1d\x7e"
- "\x51\xc2\x53\xe1\x1a\xe2\x29\xd0\x0c\xc6\x47\x87\x98\x7a\x73\x78"
- "\x3a\x82\xb8\xf0\x54\x29\xe0\xe9\xa2\xee\xf1\x94\x7e\xf7\xf3\x81"
- "\xa7\xee\xd8\xe0\x1b\x4f\x47\x10\x09\x4f\x47\xd4\xb9\xf0\xb4\xc6"
- "\x17\x9e\x0e\x0b\xf4\x8e\xa7\x70\x9e\xe2\xe9\xb0\x40\x17\x9e\xd6"
- "\x78\xc1\xd3\xe7\xdc\xf1\x74\x64\x05\xc3\xd3\x22\x8a\xa3\x88\xa9"
- "\x95\x36\xe0\x0f\x9c\x73\x89\xb9\x14\x53\x39\xc0\x54\xcc\x2b\x8c"
- "\x39\xa5\xd0\x2f\xde\x1b\xa6\x32\xcc\xb5\x10\xc4\x55\x9c\x9b\xe9"
- "\x93\x41\xdf\x85\xb5\x08\xc6\x84\xae\xbd\xe2\xf8\xed\x76\xc3\xd7"
- "\x79\xab\x55\x28\xdb\xc9\x78\x85\x13\x79\xa5\x55\x8b\x3e\xb2\x32"
- "\x5e\xf1\x8f\x96\x23\xcb\x7d\x61\xab\x2f\xdd\xfd\x24\xea\xee\x33"
- "\x88\x72\xcd\x0c\xc0\x57\x1d\xea\xee\x85\x1e\xba\x7b\x61\x67\xdd"
- "\xfd\x74\xd7\x38\xea\x97\xee\xfe\x22\xd2\xf0\xd1\x32\x39\x8e\x3e"
- "\x5a\x21\xc7\xd1\x7f\x7b\x16\xfb\xc5\x70\xbc\xd0\xbb\xee\x4e\xe7"
- "\x79\xd4\xfd\x2e\xdd\xbd\x46\x8e\x9f\x92\xee\xfe\xd3\x76\xdf\x38"
- "\x1a\x35\x5e\x26\x8f\xce\x15\x70\x74\x81\x80\xa3\x0b\x24\x1c\xfd"
- "\xe4\x94\x28\x8f\x3e\x36\xbf\xac\xc6\x1d\x47\xa3\xb2\x5c\x38\x5a"
- "\xdb\x19\x47\x45\x0c\x45\x3c\xc5\x76\xd0\x96\xb5\x1f\x70\xfa\xd0"
- "\x02\xbd\x92\xd9\x6a\x63\x70\xec\x82\x3c\x6d\xb5\x15\xcd\x57\x49"
- "\xda\x6c\xc4\xd3\x5c\x8a\xa7\x21\x0a\x32\x1f\xb0\xaf\x0f\xfa\xfd"
- "\xe7\xe1\x37\xfb\x24\x96\x93\x0d\xed\x4b\xdc\x2a\x96\xe3\x53\xb4"
- "\x33\xc1\xfb\xd2\x6f\xf5\x73\xea\x04\x4c\xbd\x06\xe3\x01\x3c\xf7"
- "\xe6\x35\xc0\xd4\x24\x2f\xb2\xe9\x1a\xc0\xd4\x14\x37\xd9\x14\xe6"
- "\xfe\x7b\x0b\x3c\x31\xf5\xb1\xab\x95\xc8\x2b\x88\xa9\x32\x3d\xbe"
- "\xf0\x47\xa0\xc7\xff\x74\xb2\x1c\x4b\x7f\x9a\x21\xc7\xd2\x9f\x3e"
- "\x2e\x61\xa9\x70\xed\x96\xc8\xa6\x3f\x9d\x74\x67\x64\xd3\x9f\x4e"
- "\x92\xf4\xf8\x7f\x7b\xc4\x85\xa5\xd5\xbe\xb0\x34\x6a\x92\x77\x2c"
- "\x85\xf3\x14\x4b\xa3\x26\xb9\xb0\xb4\xda\x8b\x1e\x2f\xc3\xd2\x51"
- "\xbd\x19\x96\x16\x32\xd9\xb4\x46\x94\x4d\x0b\xff\x05\xf5\xf8\x51"
- "\xc1\xfe\xea\xf1\x27\x9b\x19\x7e\x22\x3e\x89\x18\x2a\xe9\xf1\x85"
- "\xbe\xf5\xf8\x6e\x30\xd4\x2f\x59\x94\x62\xe8\xe3\xbd\xe5\x18\xfa"
- "\x78\xa8\x1c\x43\x47\xaf\xf3\xc4\xd0\xce\xf8\xf9\xf8\xf3\xde\xb0"
- "\x93\xe9\xf1\xa3\xa3\x7c\xe3\xe6\xe3\xa9\xfe\xe3\xe6\xbf\xef\x90"
- "\xe3\xe6\xe3\xa6\xff\x1d\xb8\xf9\xb3\x11\x32\xdc\x54\xdd\x20\x6e"
- "\xfe\x20\x3a\xfd\xcf\x3c\xec\x9f\x3f\xf3\xb0\x7f\xfe\xcc\xcd\xfe"
- "\xf9\xb3\x5b\x68\xff\xfc\xd9\x1d\xb2\x7f\xfe\x6c\x83\x24\x83\x8e"
- "\x9e\xdf\x3d\x6e\x3e\xbe\xc1\x3b\x6e\xc2\x79\x8a\x9b\x8f\x6f\x90"
- "\x70\xb3\x3b\x19\xf4\xe7\x13\xfc\xc0\xcd\x1f\xb9\x4e\xff\xf3\x2e"
- "\xed\x9f\xde\x74\x7a\xc4\x4d\x8a\x97\x35\x1e\x3a\xfd\x0c\x77\x9d"
- "\xbe\x50\xd2\xe9\x27\x32\xdc\x32\x3b\x8c\x72\x9d\xfe\x96\xe3\xe8"
- "\x13\x33\xec\x2e\x7b\xe8\xeb\x80\xa3\x4f\xcc\xc4\x77\xb3\xbb\xec"
- "\xa1\x63\xeb\xc4\x7e\x31\x9d\x7e\x2b\x61\xfd\xf2\xa2\xd3\x53\x9f"
- "\xd9\x27\xde\x72\xe9\xf4\x35\x9e\x3a\xfd\xd8\x4d\xbe\x31\xf5\x89"
- "\x2a\xaf\x3a\x3d\xea\xdf\x14\x53\xf5\x14\x53\xaf\x6d\x77\xc7\xd4"
- "\x27\x2f\x51\x4c\xfd\xa5\x88\xa9\x4f\xaa\xed\x30\x37\xed\x3d\xbb"
- "\xc7\x54\x6c\x47\xc2\xd4\xf8\x1f\x06\x53\x4d\x37\x8e\xa9\xee\xfb"
- "\x4d\xdf\x83\x77\x77\x61\x2a\x1d\xe3\x31\xaf\x55\xc6\x20\xa6\xc6"
- "\x7b\xe8\xf7\x85\xde\xf5\xfb\x32\xa2\xc4\xf1\x11\xf5\x7b\xa4\x01"
- "\xc5\x9b\xdb\xaa\xdf\x8f\xf9\x5a\x8e\xad\x63\xd5\x72\x6c\x1d\x53"
- "\x26\x61\xab\x70\xed\x96\xe8\xf7\x63\x2c\x77\x46\xbf\x1f\x63\x91"
- "\xb0\x75\xec\xfb\xdd\x63\xeb\x13\x35\xde\xb1\x15\xce\x53\x6c\x7d"
- "\xa2\xa6\x4b\x6c\xfd\xa5\x3b\xb6\xfe\xe2\x80\x88\xad\x92\x7e\x0f"
- "\xfc\x81\xf3\x2f\xd1\x78\xf3\xfa\xfd\xb3\x77\x5a\xbf\xff\xc5\x7e"
- "\xbf\xf4\xfb\xed\x80\xb3\xa0\x8b\xaf\xf9\x14\xf4\xfb\xe7\x05\xfd"
- "\xbe\xb6\xc0\x43\xbf\x2f\xe8\xa4\xdf\xa7\x3e\x2f\x60\x2a\xcc\x29"
- "\x8a\xa9\x0b\x0a\x6f\x5e\xbf\x7f\x01\x69\xf8\xd4\x5b\x72\x4c\x7d"
- "\xea\x80\x1c\x53\x9f\x19\x8b\xfd\x62\x98\x5e\xe0\x5d\xbf\xa7\xf3"
- "\xfc\xa9\x76\x99\x7e\x0f\xfd\xeb\xac\xdf\x8f\xbb\x24\xc3\xd4\xb9"
- "\xee\x98\x1a\x3d\x50\x26\xa7\xc2\x7b\x21\xa6\xbe\x75\x8e\x61\xea"
- "\xdb\xe7\xdc\x30\x75\xca\xdb\x02\xa6\x3e\x3d\xa3\x6c\xba\x3b\xa6"
- "\x46\xc7\x8b\x98\x4a\xf1\x72\xae\x5d\x99\xae\xeb\xec\x77\x42\xfd"
- "\x7d\xd0\x17\x08\xda\xc6\x3d\x52\xd8\xe6\x81\x73\xf1\xdd\xfb\x9b"
- "\xe8\xbc\xfb\x9b\x98\x13\x2d\xa4\xbc\xc1\x48\xfd\x4c\xf2\xd0\xcf"
- "\x64\x1d\x19\x90\xd7\xc1\xf6\xfa\xd3\x7c\x1c\xd7\xbc\xef\xf3\x9f"
- "\x33\x53\xc2\x59\xf4\xc9\x7a\x13\x7d\xb2\xae\x31\x1f\x20\xa0\x77"
- "\xe7\x7d\xfd\xa2\xdc\x04\x78\xf0\xee\x39\x4f\x9c\x7d\xfa\x62\x25"
- "\xf2\xcf\xec\x78\x0f\x9d\xbf\xe0\x47\xa0\xf3\x8f\x7b\x5a\x8e\xaf"
- "\xe3\x12\xe5\xf8\x3a\xee\x11\x09\x5f\x85\x6b\xb7\x44\x76\x1d\x17"
- "\x7d\x67\x64\xd7\x71\xd1\x92\xce\xff\xcc\x03\x2e\x7c\xad\x72\xc3"
- "\xd7\x73\xee\xf8\x1a\x3d\x9c\xe2\xeb\x39\x4f\x7c\x85\xf3\x14\x5f"
- "\xa3\x87\xbb\xf0\xb5\xca\x43\xe7\x3f\xe7\x89\xaf\xe3\x15\x14\x5f"
- "\x81\x17\xe4\xb2\x6b\x41\xf7\x3a\x7f\xed\x8f\x4d\xe7\x1f\x4f\xfc"
- "\xd2\xf9\x11\x53\x17\x33\x4c\x45\xcc\x12\x71\x55\xd2\xf9\x0b\x7c"
- "\xea\xfc\xdd\xe1\xaa\x5f\xb2\x2a\xc5\xd5\x09\x0a\x39\xae\x4e\xe8"
- "\x21\xc7\xd5\x89\xaf\x79\xe2\x6a\x67\x4c\x9d\x30\xc1\x1b\x9e\x32"
- "\x9d\x7f\xe2\x68\xdf\x58\x3a\x41\xef\x3f\x96\xfe\x72\x8f\x1c\x4b"
- "\x27\x1c\xfe\xdf\x8b\xa5\xbf\x7a\x5c\x86\xa5\xaa\x1b\xc4\xd2\x1f"
- "\xc4\x0e\xf0\xab\x4d\x72\x2c\xfd\x95\x49\x8e\xa5\xbf\x5a\x29\x61"
- "\xa9\x70\xed\x96\x60\xe9\xaf\x36\xde\x19\x2c\xfd\xd5\x46\x49\x56"
- "\x9d\xb8\xb0\x7b\x2c\x9d\x90\xec\x1d\x4b\xe1\x3c\xc5\xd2\x09\xc9"
- "\x12\x96\xd6\x75\x83\xa5\xcf\x4e\xf6\x03\x4b\xe5\x76\x00\x4f\x2c"
- "\xbd\xe3\x76\x80\x67\x27\xf9\x65\x07\x10\xb1\xf4\xf9\xce\x76\x00"
- "\xc4\x57\x6a\x07\x80\xf1\x12\x31\x8c\xda\x01\xc6\x33\x2c\x33\x3b"
- "\xb2\x64\x76\x80\x5b\x8f\xad\xcf\xcd\xb1\xbb\xec\xa9\x06\xc0\xd6"
- "\xe7\xe6\x53\x6c\x75\xd9\x53\x27\xb7\x8b\xfd\x62\x76\x80\xd7\x09"
- "\xeb\x97\x17\x3b\xc0\x38\xda\xde\x5f\x65\x76\x00\x37\xac\x85\xb6"
- "\xde\xf2\x8d\xb3\xcf\xd5\xc8\xec\x00\xf5\x12\xce\x5e\x43\x1f\x75"
- "\xc0\x41\x8a\xb3\xe1\xee\x38\x3b\xe9\x6e\x8a\xb3\xe3\x44\x9c\xfd"
- "\x8f\xc8\x36\x98\x9b\x6d\xfe\xe2\x2c\xee\x23\x38\x17\x73\x67\x70"
- "\xb6\xd8\x0f\x9c\x75\xb3\x0d\xbc\x0b\xe3\xe1\xc2\x59\x3a\xee\x93"
- "\xf6\x55\xce\x46\x9c\x8d\xf1\xb0\x0d\x14\x78\xb7\x0d\x9c\xb8\x13"
- "\xb6\x81\x49\x4e\x39\xde\x4e\x8e\x92\xe3\xed\xa4\xf3\x12\xde\x0a"
- "\xd7\x6e\x89\x6d\x60\x92\xe3\xce\xd8\x06\x26\x39\x24\xbc\x9d\x7c"
- "\xa6\x7b\xbc\x7d\xce\xe2\x1d\x6f\xe1\x3c\xc5\xdb\xe7\x2c\x5d\xe2"
- "\xed\x38\x77\xbc\x9d\x52\x26\xe2\xad\x64\x1b\x28\x10\x6c\x03\x59"
- "\xdd\xdb\x06\x6a\x7d\xd8\x06\x26\xdc\x69\xdb\xc0\x94\x52\x7f\x6c"
- "\x03\xed\xdb\x99\xdf\xfe\x1a\xf4\xdb\x9f\x03\xf8\x3b\xed\x14\x8c"
- "\x41\xf7\x7e\xfb\xa9\xa2\xff\x69\x4c\xae\x80\xb3\xb9\x5e\x6d\x03"
- "\x27\x1b\x7d\xdb\x06\x4e\x56\xbb\xfb\x9f\x4e\x3d\x21\xff\x6e\x35"
- "\xb5\x4c\xfc\x6e\x75\xf2\x73\xc4\xd9\x5f\x7f\x8a\x65\x2e\xe7\x99"
- "\x18\x16\x7b\xf0\xd7\x55\xd8\x4f\x6f\x7e\xfc\xef\x71\xee\xdf\xb2"
- "\xa6\x0d\x72\xd9\x0a\xaa\x10\x6f\x73\x09\xc7\xc7\xf7\xc4\xb8\xe1"
- "\xd4\x56\xf0\x22\xf2\xde\xaf\xd7\xb9\xe3\xee\xd1\xb3\xee\xb8\x3b"
- "\x6d\x9a\x88\xbb\x4e\xc0\xdd\xf7\xeb\x73\x99\xfd\xf5\x25\xe6\x9b"
- "\xba\xff\x25\x37\xdf\xd4\x53\x1f\x08\xb8\xfb\xfc\xe4\x32\x0b\xbc"
- "\x7f\x57\xfe\x53\x70\xff\xc1\xb3\x37\xea\x83\x9a\xeb\xd5\x77\x4a"
- "\xc0\x27\xaf\xfe\x53\xd0\x57\xd5\x2e\x61\xae\x3a\x61\x9e\xee\x72"
- "\xf3\x9f\xca\x4b\x81\xf9\x2c\xec\x2b\xe9\xd2\x0f\xf5\x25\xc9\x0f"
- "\x95\xcf\x19\x97\x87\xeb\x1b\xb7\xed\x99\x98\x0e\x3e\x3e\x80\x57"
- "\x8f\xcb\xc3\xe7\x5f\xbf\x0e\xeb\xce\x33\xba\x00\x41\xaf\xcb\x00"
- "\xec\xe9\xc3\xc6\xfd\xf9\x2c\x27\xac\x35\x4e\x58\x6b\xb8\x9c\x71"
- "\x19\x0e\x94\x4d\xb6\x8f\xdb\x90\x07\x7a\x9e\xc3\x40\xf3\xab\xf6"
- "\xca\x06\x5d\x6f\x37\xea\x79\x97\x61\x6e\xa4\x6b\x95\xd8\x1f\x11"
- "\x47\x43\x1a\xe1\x3d\x2e\x77\x2d\xcb\x39\xbe\x93\x70\xd4\xf4\xdc"
- "\x49\x78\xe6\x0b\x6b\x2b\x91\x77\x75\xd2\x9e\x02\x2a\x33\xfb\xf0"
- "\x95\xc5\xbe\xb0\x18\x89\xc0\x0b\xb7\xc0\x26\xe1\xde\x1f\x39\xae"
- "\xbf\x70\x5a\x8e\xeb\xbf\x0e\x92\xe3\xfa\x0b\xef\x4b\xb8\x2e\x5c"
- "\x03\x5c\x07\xba\x51\x39\x1a\xd6\xbe\x9b\x94\xa3\x5f\xa8\x16\x71"
- "\x9d\x13\x70\x3d\xff\x06\x70\xbd\x4b\x39\xda\x0d\x97\x7c\xe3\xfa"
- "\x0b\xd5\x92\x4d\xe2\xd7\x7f\xf5\xea\x23\x7b\xd6\x1d\xd7\xa7\xe9"
- "\x28\xae\x9f\xf5\xc4\xf5\x69\x3a\x86\xeb\xd3\x74\x3e\xf7\x13\x9c"
- "\xf5\xfc\x9e\x36\x7d\x1b\xc5\xf5\x1a\xc1\x47\xb6\xca\x8f\xfd\x04"
- "\x35\x0c\xd3\x45\x2c\x47\x7b\xd5\x9d\xb5\x49\x4c\xf7\x99\xff\xcb"
- "\x9b\x4d\x82\x62\x79\x33\xc3\x72\xc4\x46\x11\xcf\x6f\x64\x3f\x41"
- "\x77\x78\x2e\xca\xcd\x88\xe7\xbe\xe4\x66\x39\x9e\xcf\xd8\x26\xc7"
- "\xf3\x19\x3b\xe4\x78\x3e\x73\x9b\x1c\xcf\x67\xe6\x78\xe2\x79\x67"
- "\x2c\x9f\x71\xd1\x1b\x8e\xeb\x5f\x44\x1b\xc5\xcc\xf1\xbe\x31\xfc"
- "\x45\xb5\xff\x18\xfe\x9b\xd0\xff\x75\x18\xae\xf2\xc4\xf0\xdf\x4c"
- "\x42\x0c\x72\x66\x7a\x60\xf8\x22\x01\xc3\x05\x1c\xd9\xdd\x24\xc8"
- "\xc2\x9e\x18\xde\x0c\xef\xd1\x8d\x3e\xee\xf8\xa7\x27\x86\xeb\x9e"
- "\x96\x61\xb8\xaa\x1b\x0c\x5f\xc4\xec\x20\x32\xbf\x5c\x1f\xb6\x10"
- "\x78\x8f\x69\xbb\x7c\xc8\xe6\xe2\x98\xb9\xf7\x47\x8e\xe1\xba\x1d"
- "\x72\x0c\xd7\x95\xcb\x31\x5c\xb7\x4e\xc2\x70\xe1\xda\x2d\x91\xcd"
- "\x75\xb9\xb7\x5c\x36\x17\xf9\xa3\x4b\x0c\xd7\xe5\x4a\xb2\xf9\xcc"
- "\x95\xdd\x63\xf8\x8b\x91\xde\x31\x1c\xce\x53\x0c\x7f\x31\xd2\xe7"
- "\x3e\x87\x4e\x18\xfe\xd2\x0c\x3f\x30\x5c\x6e\x0b\x11\x31\x5c\xb0"
- "\x85\xec\x76\xb3\x85\x38\x0d\xcc\x16\xb2\xab\x89\xf1\x46\x1f\x05"
- "\xe3\x53\xe0\x9f\x88\x7c\x65\xd7\xba\xdb\xae\x9b\xb2\x83\xbc\x34"
- "\xdd\x1f\x3b\x08\xc5\x6f\xdc\xe3\x30\x13\x70\xbb\xea\x06\xf7\x38"
- "\x4c\x14\xf7\x38\x18\x7d\xec\x71\x10\xf0\x7c\xee\xf7\xc0\x73\xba"
- "\xc7\x61\x56\x9c\xdc\xc6\x3c\x6b\xa1\x68\x63\x66\x78\x3e\x6f\xb5"
- "\x1c\xcf\xe7\x25\xbb\xf6\x3c\x00\xe6\x9b\xf5\x5b\x3b\xed\x79\x70"
- "\x61\x3b\xb5\x83\xce\x2a\x33\xbd\xd8\x40\x5c\xf8\x3e\x5b\xc2\x77"
- "\x68\xeb\x11\x19\xb6\xd7\xbb\x63\xfb\x2c\xab\x0c\xdb\xcf\xe5\xca"
- "\xfd\x23\xea\xf5\x6e\xd8\x2e\xee\x79\x98\x7d\xa9\xac\xb6\x1b\x6c"
- "\x87\xfb\x6f\x7c\x8f\xd8\xad\xc5\x76\x71\x7f\x83\x57\x6c\x77\xdf"
- "\xdf\xe0\xe6\xff\x80\xd8\x4e\x73\x54\xf4\xf5\xc0\xf6\x35\xf1\x4a"
- "\xe7\x87\x30\x1f\x00\xd7\x71\x8e\x38\x79\xc0\x76\x3a\xde\x73\xb4"
- "\xee\xd8\x7e\xdd\xc0\xb0\xfd\xcd\xa6\xef\x8f\xed\x2e\x79\xd8\x1d"
- "\xdb\x7f\x89\xd8\x3e\x77\x10\xdb\x7f\x91\x71\x63\xfb\x2f\x3c\xfc"
- "\x33\xde\xbc\x01\xfb\x4b\x97\x18\xef\xa5\x5f\x72\x8c\x9f\xbb\x56"
- "\x8e\xf1\x73\x8b\xe4\x18\x3f\x37\x4e\xc2\x78\xe1\xda\x2d\x91\xd3"
- "\xe7\xa6\xde\x19\xfb\xcb\xdc\x54\x09\xe3\xe7\xcd\xec\x7e\xef\xc5"
- "\x2c\xbb\x77\xdf\x0c\x38\x4f\x31\x7e\x96\xbd\xcb\xbd\x17\x32\x7b"
- "\x77\xcc\xb3\x5e\xf7\x5e\x54\xfd\x70\xbe\x19\xee\xbc\xe2\x69\x7f"
- "\xb9\x79\xdb\x77\xcc\x44\x7f\xed\x2f\xb8\xf7\x62\xcd\x69\xb7\xbd"
- "\x17\xb5\xdd\xef\xbd\x48\x9d\x71\x83\xf6\x97\x2e\x7c\x33\x4e\x4e"
- "\x73\xf7\x77\x9b\x3f\x41\x8e\xef\xf3\x9f\x75\xe1\xfb\x0b\x88\xef"
- "\x71\x73\xe4\xf8\x1e\x37\x1b\xfb\xe9\x6d\x2f\xc6\x7b\xb2\xef\x8a"
- "\xf3\xf7\xc9\x7d\x35\x3c\xec\x2f\x2f\x20\xef\xc5\xf5\x96\xe1\xfb"
- "\x39\x77\x7c\x9f\x5f\xe5\x4d\x76\x47\xbb\x37\xf5\x29\x9e\xeb\xb6"
- "\xa7\x6d\x8a\xe8\xff\xb6\xe0\x4c\x99\x0e\xde\xdf\xe2\xc3\xd7\x6d"
- "\x2e\xf3\x75\xa3\xbe\x6d\x68\x07\x87\xb6\x0e\xcd\xd5\x2b\xd3\x62"
- "\x78\x0e\x7d\xdd\x3c\xfd\xdc\xd0\xf7\x0d\x7d\xdd\x2a\xe2\x8d\x3e"
- "\xfd\xdc\x90\x37\x7d\xf9\xba\x41\xbf\xd5\x14\xeb\xbf\x16\xb0\x5e"
- "\xf0\x75\xcb\x4b\x92\x7c\xdd\x64\x58\xef\xc5\x7f\xf8\xdd\x73\x19"
- "\xde\xe5\xf8\x74\x09\xeb\x3b\x50\x8e\x7f\xd2\xc3\x16\x43\x69\xf0"
- "\xb2\xfa\x07\xb5\xc5\x50\xac\x8f\xbd\xbb\x12\xf9\x78\xb6\xde\x8b"
- "\x2d\xa6\xb3\x8f\xf3\x0f\x67\x8b\x89\x9d\x2f\xc7\xf8\xd8\x1c\x39"
- "\xc6\xc7\x3e\x2b\x61\xbc\x70\xed\x96\x60\x7c\x6c\xcc\x9d\xb1\xc5"
- "\xc4\xc6\x48\xb6\x98\xb8\xb1\x5e\xfd\xef\x64\x36\xf6\xf9\x35\xde"
- "\x6d\xec\xf3\x05\xff\xbb\xf9\x35\x3e\xf7\x84\x74\xfa\xa6\xf9\xdb"
- "\x01\xcc\xc6\x7e\x13\x7b\x42\x6a\x7f\x6c\xb6\x98\xdf\x6a\xfc\xb5"
- "\xc5\x50\xdf\xe6\xd3\xe8\x1f\xe2\xdf\x9e\x90\xee\xb0\xdd\x25\xbb"
- "\x77\xf1\x0d\x53\x8e\xed\xaf\x0c\x90\x63\xfb\x2b\x83\xe4\xd8\xfe"
- "\xbb\x11\x72\x6c\xff\xdd\x70\x4f\x6c\xef\x8c\xeb\xaf\xac\xf4\x86"
- "\xe9\xfa\x17\xd0\x16\xb3\xa8\xd6\x37\x9e\xbf\x52\xe0\x3f\x9e\xc7"
- "\xbf\xf5\xbf\x1a\xcf\x55\x9e\x78\x1e\xdf\xf0\x83\xda\x65\x28\x9e"
- "\x2f\x3c\x23\xc3\x73\x55\x37\x78\xfe\x83\xd9\x65\x16\x3d\x26\xc7"
- "\xf3\x45\xb1\x72\x3c\x5f\x74\xbf\x84\xe7\xc2\xb5\x5b\x62\x97\x59"
- "\x14\x75\x67\xec\x32\x8b\xa2\x24\x99\xfd\x77\xbd\xbb\xc7\xf3\x57"
- "\x0a\xbd\xe3\x39\x9c\xa7\x78\xfe\x4a\xa1\x4f\x7f\xea\x4e\x78\xfe"
- "\xbb\x4b\x7e\xe0\xb9\x57\x1f\x95\x1f\x87\x5d\xe6\x77\xcd\xfe\xda"
- "\x65\x7c\xed\x53\x41\x7c\x97\xfc\x53\xdc\xf6\xa9\x44\x8b\xfb\x54"
- "\x32\xe4\xfe\x29\xb7\x1c\xdb\x17\x3b\xe5\xd8\xbe\x44\x21\xc7\xf6"
- "\xe5\x0f\xc8\xb1\x7d\x79\xa4\xd8\x4f\x66\x97\x31\x74\xda\xb7\x22"
- "\xc7\xf9\x25\xf3\x4d\x2f\x34\x10\x6f\x58\x7f\x41\xa1\xaf\xf0\x8d"
- "\xf3\x4b\xb2\x7c\xe1\x3c\xfa\xab\xfc\x65\x6e\xbc\x17\x9c\x5f\xba"
- "\xe5\xff\x07\x9c\xf7\xe5\x87\x42\xf5\x20\xc0\x78\xc4\x7b\x8a\xef"
- "\x02\xd6\x23\xce\x3b\xff\xe1\xcd\x46\xb3\xb4\xfc\x76\xe1\xbc\x6f"
- "\x1b\xcd\xb2\xb2\xca\xd9\x02\xce\xdf\xc8\x1e\x9a\xe3\x72\x1b\x4d"
- "\xde\xa2\xdb\x6d\xa3\xd1\x0f\x90\xe3\xbd\x7e\xba\x1c\xef\xf5\x77"
- "\x4b\x78\x2f\x5c\xbb\x25\xf2\xbb\x5e\x73\x67\x6c\x34\x7a\x8d\x84"
- "\xf7\x7a\x67\xf7\x78\xbf\xc4\xe8\x1d\xef\x97\x08\xb1\xd9\x96\x18"
- "\x6f\x1c\xef\x97\xbb\xf0\xbe\xf3\xfe\x99\x8c\x9b\xf7\x91\x79\xfa"
- "\x4e\xdb\x68\x96\xfb\xc4\xff\xae\xe2\x63\xdc\xbc\x8d\x46\xd8\x93"
- "\xb8\xc0\x7b\x7c\x8c\xb2\x2e\x7c\x64\xca\xca\xdd\xb1\x3e\xe1\xa2"
- "\xdc\x17\x31\xe1\x92\xe8\x8b\x58\x56\x89\x58\xbf\xaa\xaf\x1c\xeb"
- "\x57\xa9\x7d\xd9\x68\xde\xe5\xdc\x7d\x12\x57\x3c\x2b\xb7\xd1\x14"
- "\xc8\x6d\x34\x53\x90\xf7\x92\x4e\xf8\xc6\xfa\x15\x89\x72\x1f\x70"
- "\xb6\x47\xf1\xad\xb9\x82\x0f\xf8\x5c\x37\x1f\xf0\xe7\xfe\x28\x60"
- "\x7d\xe2\x96\xd2\x2a\x07\xf1\xc7\x0f\xf1\xfb\xfb\x7a\x67\x79\xf5"
- "\x41\xa4\x6b\x40\x17\x7e\x88\xf3\xce\xa8\xd0\xa7\x79\x4c\x7e\x92"
- "\x9b\x1f\x62\x17\xf1\x8c\x65\xf8\x3f\x57\xef\x13\xff\xdb\x79\x09"
- "\xff\xb9\x9f\x49\x76\x1b\x0e\xe5\x7c\x4a\x97\xc4\xf2\xdb\x65\xb7"
- "\xf1\x66\x27\x31\x8d\x43\xfc\x5f\x79\x9c\xc9\xf9\xf1\x3f\x32\xbb"
- "\x4d\xd2\xfd\x72\xdc\x4f\x9a\x24\xc7\xfd\x24\x85\x84\xfb\xc2\xb5"
- "\x5b\xe2\x8b\x9e\x14\x71\x67\xe4\xfc\xa4\x08\xc9\x6e\x93\x74\xb5"
- "\x7b\xdc\x5f\x91\xea\x1d\xf7\x57\xa4\x32\xdc\x5f\x91\xda\xa5\xdd"
- "\x46\xe6\x1b\xb9\xea\xcc\xf7\xb6\xdb\x88\x72\xfe\x1d\xdf\xd7\xb3"
- "\xaa\xc6\x1f\xbb\x8d\x6b\x4f\xfa\xf7\xb2\xdb\x78\xc7\x7b\x51\xb6"
- "\x2f\xeb\xe2\x9b\xab\x1c\xef\x93\xcf\xc8\xf1\x3e\xb9\x4e\x8e\xf7"
- "\xa9\xed\x72\xbc\x4f\xb5\x7b\xb3\xdb\xc8\xb1\x7e\xf5\x08\x6f\x38"
- "\xaf\x9f\x82\x76\x9b\xd4\x42\xdf\x18\xbf\x5a\xe7\x3f\xc6\xa7\xac"
- "\xfc\x3f\x8c\xf7\xc0\x78\x95\x27\xc6\xa7\x14\xfd\xa0\x32\x3e\xc5"
- "\xf8\x35\xfb\x64\x18\x7f\x0b\x6d\x39\x37\xb2\x9f\xc4\xb7\x6c\xbf"
- "\xc6\xc3\xff\x3d\xd5\xc3\xff\x7d\x8d\x9b\xff\x7b\x6a\xd4\xad\xc3"
- "\xf8\x35\xb7\xde\xff\xfd\x86\x30\x7e\x8d\x9b\xff\x7b\xea\x99\xee"
- "\x31\x7e\x75\x8c\x77\x8c\x87\xf3\x14\xe3\x57\xc7\x74\x29\xdb\xcb"
- "\x30\x7e\xed\xfb\xb7\xc3\x96\x73\x67\xf6\x1b\xad\x3d\xe2\x8f\x3d"
- "\xa7\xab\xb8\x23\x3e\xed\x39\xa3\x45\x7b\x8e\xde\x87\x3d\xe7\x56"
- "\x61\x7e\x5a\x85\x1c\xf3\xd3\x3e\x95\x63\xfe\x7a\x85\x1c\xf3\xd7"
- "\x13\xb9\x3d\x27\xa1\x93\x3d\x47\x8e\xff\xe9\x8f\x99\xa6\xb8\xdb"
- "\x73\x0a\xdc\xec\x39\x86\xbf\xfa\xc6\xff\x74\x9f\xf8\x7f\x8d\xe2"
- "\x7f\x8c\x17\xfc\xcf\xf8\x5f\x82\xff\x31\xdf\x03\xff\x33\xee\x00"
- "\xfe\xaf\x3b\xc0\x6c\x3c\x37\x18\x27\xe5\x5d\xff\x6d\x3c\xdf\x6f"
- "\x1d\x30\xf4\x90\xaf\x03\x86\xd1\xf2\x75\x60\xdd\x25\x69\x1d\x10"
- "\xae\xdd\x92\x75\xc0\x10\x78\x67\xd6\x01\x43\xa0\xb4\x0e\x18\xbe"
- "\xee\x7e\x1d\x48\xf7\xb1\x0e\xa4\x0b\xeb\x40\xba\x1f\xeb\xc0\xfa"
- "\x4f\x7d\xdb\x78\xf4\x37\x6f\xe3\xf9\xf9\x9d\xde\x07\xb5\xbe\xca"
- "\x2f\x1b\xcf\xf6\xf1\xd1\xe5\x18\x23\xe5\x6b\xa2\x5c\x33\x5f\xb4"
- "\xf1\x98\x3c\x6c\x3c\xa6\x4e\x36\x9e\xd5\x5f\x0b\xf8\x3f\x49\xd8"
- "\x6f\x3a\xe5\x7b\xc4\x48\xa1\x39\x94\x37\x54\xc8\xfd\xe6\x37\x50"
- "\xfc\x97\xe2\xf7\x65\xcd\xc1\x7e\xb1\xf5\xc7\xd4\x45\x0c\xd4\x57"
- "\x1f\x90\xd9\x74\x26\x79\x8b\x91\x92\x25\xf3\xbb\x91\xef\x37\x7d"
- "\x75\xa2\x0c\xef\xa7\xb0\xfd\xa6\x6f\x7b\xfb\x4e\xeb\x8a\xc9\x9f"
- "\x39\x93\xc6\xe4\x77\xc5\xf2\x7b\x75\xe3\x0d\xc5\x92\x9e\x2b\xc4"
- "\x92\x3e\x77\x07\x62\x49\xdf\x68\x4c\xfe\x73\x9e\xf1\xfb\x32\xaf"
- "\x9a\xcb\x4d\xa4\x12\x79\x64\xb6\x67\xec\x53\x93\xf7\xbd\xfb\x4a"
- "\x61\xef\xfe\xd2\xdb\x13\x07\x05\xfb\x43\xd7\xfc\xb0\xac\x69\x07"
- "\xd2\xac\xb4\x3f\x98\xaf\xfa\x82\xe2\x3f\x57\x97\x03\xaf\x72\x88"
- "\xa7\x09\x88\xa7\xff\xb9\x9f\xd6\xfd\x1a\x78\x21\x2c\x82\xca\x3f"
- "\xd9\x1c\x09\xd6\x27\x21\xb6\xfe\x27\xf5\xfb\x02\x31\x02\xb0\x95"
- "\xd5\x5b\xfb\x35\xef\x74\x86\x69\x30\xa7\xf5\x5d\x07\x97\x56\xf5"
- "\xa8\xb4\xd8\x60\x5e\x34\xe1\x9e\x58\x85\xd9\xd1\x66\x42\x5a\x1c"
- "\x5d\x5a\x15\xc8\x03\xfe\xee\xfe\x2d\x09\xf2\x6f\x9e\xfe\x67\x32"
- "\x95\x67\x70\xdd\x0b\xcb\x9a\x8d\x71\x40\x44\xd9\x8a\xfb\x4e\xb2"
- "\x6f\xed\x82\xf1\xe1\x78\xb6\xf6\xcd\x5b\xc8\x70\x03\x9e\x37\x06"
- "\xc6\x92\xfa\xd8\x22\x6e\xd0\x1c\x56\x80\x1b\xf9\x2d\xd2\x77\x6c"
- "\x6c\x1f\xc7\x88\xd9\x51\xb2\x24\xff\x17\x8b\x2f\x6c\x7d\x75\x9a"
- "\x77\x6c\x7d\x75\x1a\xc3\xd6\x57\xa7\xb9\xb0\xd5\xe2\xc5\x8e\x22"
- "\xf3\x63\x7f\x4d\xf0\x7f\x31\x79\xc8\xd8\xa6\x7f\xc1\xf8\x28\xaf"
- "\xf9\xe5\xff\x42\xf1\x74\x31\xc3\x53\xc4\x2b\x11\x53\x25\x3b\x8a"
- "\xc9\xa7\x1d\xa5\x3b\x4c\xf5\x6b\x0f\x3f\xc5\xd4\xd7\x07\xc8\x31"
- "\xf5\xf5\x41\x72\x4c\xdd\xb4\xcf\x13\x53\x3b\xe3\xe9\xeb\x71\xde"
- "\xb0\x94\xc5\x47\xd9\x34\xdd\x37\x8e\xbe\x6e\xf4\x85\xa3\xd4\x3f"
- "\x7d\xae\x9b\x7f\xba\x0b\x47\x7f\xbf\x47\x8e\xa3\xaf\x57\xdf\x28"
- "\x8e\xd2\xdc\x26\xe7\x7e\x80\xdc\x26\x37\x8d\xa3\x7a\x0f\x1c\xdd"
- "\x38\x56\xc2\x51\xcf\xfc\x26\xdd\xe0\xe8\xa2\xdb\x13\x03\x45\x86"
- "\xa3\x9c\x95\xf6\x47\xb3\x94\xf6\xf5\xb8\x1c\x47\x37\xda\x7c\xe3"
- "\xe8\xc6\x2d\x12\x8e\xb2\x7a\xb7\x17\x47\x37\x9a\x64\x38\xba\xc8"
- "\x0d\x47\xff\x29\xe9\x10\xe8\x63\xe1\xc2\xd1\x25\x6e\x38\xba\xa8"
- "\x3b\x1c\xdd\x68\xc2\x31\x62\x32\xea\xa6\x57\xbb\xc7\xd1\xd7\x73"
- "\xbd\xe3\x28\x9c\xa7\x38\xfa\x7a\xae\x84\xa3\x5e\x64\x54\x19\x8e"
- "\x66\x2f\xf4\x03\x47\x7f\xe4\xb1\x51\xb2\xe3\xfd\xb2\x55\x48\x7b"
- "\x3a\x3b\xc7\x48\x9d\xe3\xbe\x27\xa8\xd8\x23\xef\x49\x71\xa7\xbc"
- "\x27\xab\xc5\x3d\x9e\x13\x05\x5c\x7d\xee\x7b\xe0\x2a\xdd\xe3\xb9"
- "\x79\xb5\xdc\xf7\x64\xf3\x5a\xd1\xf7\x84\xe1\xea\x1b\xa1\x62\xbf"
- "\xa4\xbc\x27\xc5\x5d\xc4\x48\xdd\x5c\x21\x8b\x8d\x32\xd1\x3d\x36"
- "\xca\xd6\xe3\xbe\x63\xa4\x6e\xb6\xc9\x62\xa3\x9c\x2c\x74\xe5\x3d"
- "\xf1\x8c\x91\x2a\x61\xec\x96\x1e\x14\x63\x5d\x31\xa8\x8c\xa3\x5d"
- "\x31\x52\xbb\xd9\x17\x84\xed\x1c\xac\x8f\xbf\xfd\x18\x6b\xf2\x03"
- "\x63\x65\x79\x4f\x3c\x63\x4c\x6d\x79\xcb\x5c\x5a\x4c\x2a\x63\x8a"
- "\xbd\xc4\x46\x2d\xbe\xa3\xb9\x4f\xb0\x5f\xde\xb1\x76\xeb\x08\x39"
- "\xd6\x6e\x8d\xa1\x75\xeb\xbc\x61\xed\x16\xa7\x84\xb5\xac\xde\xda"
- "\x3a\x0f\xac\xad\xf5\x81\xb5\xb0\xae\xee\xbe\xe0\x2f\xd6\x6e\x1d"
- "\x4e\xb1\xd6\x20\x60\x6d\xd3\xad\xc6\xda\xad\xc3\x25\xac\xdd\x7a"
- "\xa5\xfb\x1c\x53\x9b\x1d\xde\xf7\xe5\x6c\x76\x30\xac\xdd\xec\xe8"
- "\x32\xc7\x94\xcc\xe7\xe3\x8d\xaf\xc5\x1c\x53\x92\x3d\xa0\x58\xb0"
- "\x07\xfc\x2b\xe7\x44\x79\xc3\xe2\xaf\x3d\xe0\x13\xd0\xdd\x71\xdf"
- "\xe5\x1a\xcc\x39\x35\x1b\x73\xa2\x14\x79\xd8\x03\x8a\x3a\xdb\x03"
- "\x66\x76\x8d\xb1\x7e\xd9\x03\xe8\xbe\xcb\x9c\x3a\x39\xc6\xe6\x7c"
- "\x2d\xc7\xd8\xdc\xd5\xe2\x3e\x4b\xec\x8f\xef\x98\xa9\xdb\x46\xb8"
- "\xec\x01\xb5\x72\x6c\x95\xec\x01\xb9\x8f\xf8\xc6\xd8\x6d\x72\xfb"
- "\xef\x73\x85\xb2\x7d\x96\x6f\xd7\xbb\xc7\xa1\x16\xe3\x4f\x6d\x5f"
- "\x59\x56\xed\x8e\xb1\xdb\xf2\xfe\x95\xe2\x50\xbb\x62\x4d\x75\xe3"
- "\xcb\xdd\x39\x0e\xf5\x1f\x42\xcd\xa5\x45\x04\xf7\xb6\x51\xbc\x95"
- "\xd9\x06\x8a\xee\x8c\x6d\xa0\xb4\xc8\x87\x6d\xe0\x0f\xdb\xe4\x38"
- "\xfb\x87\x52\x5a\xf7\x8c\x37\x9c\xfd\x43\x9c\x84\xb3\xac\xde\xda"
- "\x33\x1e\x38\x5b\x73\x2b\x65\xda\x3f\xe4\xdc\x5e\xdb\xc0\x1f\x72"
- "\x24\xdb\x40\xee\x0d\xec\x7f\xdc\x16\xe3\x1d\x67\xb7\x09\x76\xd7"
- "\x6d\x92\xdd\xb5\xc6\x4b\xbe\x14\x19\xce\xee\x18\x2b\xee\x7f\xa4"
- "\x32\x6d\xad\x28\xd3\x16\xfd\x0b\xe6\x4b\xd9\x31\xc6\x5f\xdb\x00"
- "\xee\x73\x47\x6c\x45\xec\x12\xf1\x55\xb2\x0d\x14\xf9\xb6\x0d\x74"
- "\x83\xaf\xfe\xe7\xee\xdb\x39\x56\x8e\xaf\x3b\x9f\x96\xe3\xeb\xae"
- "\x0a\x4f\x7c\xed\x8c\xad\x3b\xd7\x79\xc3\x55\x66\x1b\xd8\x95\xea"
- "\x1b\x53\x77\xee\xf7\x85\xa9\x34\xa6\x5f\xbd\xe4\x23\x2d\x61\xea"
- "\x9b\x65\x72\x4c\xdd\x69\xbd\x51\x4c\xbd\x23\xf9\x52\x6e\x1a\x53"
- "\xe3\x3d\x30\x35\x2f\x4e\xc2\x54\xcf\x9c\x29\xdd\x60\xea\xed\xb2"
- "\x13\xb8\x63\xaa\x4c\x76\xcd\xbb\x28\xc7\xd4\x5d\x91\xbe\x31\x35"
- "\xef\x5d\x09\x53\x59\xbd\xdb\x8b\xa9\x79\x8d\xb7\xd7\x4e\x90\xd7"
- "\x28\xc9\xae\xbb\x0e\x74\x8f\xa9\x3b\x0f\x7b\xc7\xd4\x9d\x87\x19"
- "\xa6\xee\x3c\x7c\xe3\x7b\xca\xf3\xb7\xf8\x81\xa9\x3f\xf2\x5c\x2a"
- "\xf9\x46\xbf\xed\x04\x68\x6f\x45\x2c\xad\xfd\x7e\xb1\x43\x92\xc5"
- "\xd8\x21\xe3\x05\x8c\xfd\xe5\xf7\xc5\xd8\xdd\x7b\xe4\x3e\x0d\xbb"
- "\xf7\x89\x3e\x0d\x0c\x63\xff\x6b\x82\x3c\x3f\x6a\xe7\x58\x21\xf2"
- "\x18\xaa\xbb\xaf\xba\xec\x04\x88\xb9\xe3\xdd\xed\x04\x7f\xbc\xea"
- "\x1b\x6f\x0b\x22\x65\x76\x82\x8f\xbc\xe3\xed\x35\x19\xde\xee\xf9"
- "\x39\xc5\x5b\x57\x0c\xd5\x82\x18\x31\x86\x6a\xb7\x32\xac\x0c\x6f"
- "\x63\x7e\x18\xbc\x2d\xbe\x71\xbc\x95\xe7\x52\xf1\x8c\x97\xba\xa7"
- "\xce\x5c\x02\x78\x4b\xe3\x75\x78\xc6\x4c\xbd\xb1\x78\x1d\xb7\x2b"
- "\x66\x2a\xf6\xcb\x3b\xee\xfe\x71\xbe\x1c\x77\xff\x98\x43\xeb\x7a"
- "\xc5\xdd\x3f\x3e\x26\xe1\x2e\xab\x77\xc3\xb8\x7b\x53\x36\x83\x3f"
- "\xc6\xdc\x5e\x9b\xc1\x1f\x63\x24\xdc\xfd\xaf\x41\xdd\xe3\x6e\xc1"
- "\x40\xef\xb8\x5b\x30\x90\xe1\x6e\xc1\xc0\x2e\x71\x57\xe6\x43\xb0"
- "\xb7\xaf\xd7\x58\x1e\xb5\xff\xea\x79\x56\xf6\xaa\x6f\xc6\x66\x00"
- "\x18\xac\x4c\xc5\x18\x4e\x31\xe8\x43\xd0\xbd\xcd\xa0\x3b\xbc\xf5"
- "\xdf\x66\xb0\x2f\x54\x8e\xb7\xfb\xfa\xca\xf1\xb6\xf0\x38\xf6\xab"
- "\x4b\x9b\x01\xc5\x80\x7d\xf3\x5d\x36\x03\x8b\x1c\x67\x25\x9b\x41"
- "\xe1\x72\xdf\xdf\xbe\xf6\x6d\x94\xc9\xb7\xbf\xf4\x88\x59\x3d\x57"
- "\xc2\xdb\x93\x95\xa2\xcf\xd8\x9f\xde\x2f\x9b\xe6\x8e\xb7\xfb\xaa"
- "\x3a\xc5\xac\x9e\x7e\x0b\x63\x56\x4f\xbf\xc5\x31\xab\x67\xc8\x63"
- "\x56\xef\xbc\x26\xf9\x91\xf9\x1f\xb3\xfa\xcf\x33\x29\x06\x23\x0f"
- "\x61\xdc\xea\x1b\xb1\x23\xdc\xe6\x5c\x2b\x32\xec\x95\xd9\x11\xfe"
- "\x5c\x27\xc7\xde\x42\x95\x6f\xec\xfd\xf3\x01\x09\x7b\x59\xbd\xdb"
- "\x2b\xf3\xfe\xb9\xf6\xf6\xda\x11\xfe\x5c\x2b\xd9\x11\x0a\xf7\x78"
- "\xc5\x5e\xd9\xb7\xb1\x7d\x39\xde\xbf\x8d\xc1\x79\x8a\xbd\xfb\x72"
- "\x7c\xda\x11\x3a\xf9\x6f\xbd\xf5\x2a\xfb\x36\x26\xc8\xbc\x16\x3f"
- "\xec\x08\x3f\x3a\x1f\x83\xb7\x36\xdc\x8c\x1d\x01\xf1\x16\xf1\x4c"
- "\xc4\xdc\x1b\xb1\x23\xdc\x7a\x19\xf7\xed\x57\xe5\x98\xfb\xf6\x6b"
- "\x72\xcc\x3d\xf8\x88\x27\xe6\x76\xc6\xdb\xb7\xcb\xbc\x61\x2d\xb3"
- "\x23\x1c\xa8\xf1\x8d\xb3\x6f\xdb\x7c\xe2\xac\x87\x6f\xae\x84\xb3"
- "\xfb\x07\xc9\x71\xf6\x2f\xa3\x6f\x0a\x67\x6f\x34\x07\xcb\x8f\x0a"
- "\x67\x63\x3c\x70\x76\xff\x71\x09\x67\x3d\xf3\xb0\x74\x83\xb3\xb7"
- "\x29\x0f\x8b\x6f\x19\xf7\xc0\x04\x39\xce\x1e\x48\xf6\x8d\xb3\x07"
- "\xfa\x4a\x38\xcb\xea\xdd\x5e\x9c\x3d\x30\xfe\xf6\xda\x16\x0e\x8c"
- "\x97\x64\xdc\x83\x77\x77\x8f\xb3\x6f\x3b\xbc\xe3\xec\xdb\xc2\x77"
- "\xb1\xb7\x1d\x3e\x65\xdc\x4e\x38\x7b\xf0\x92\x1f\x38\xfb\x23\xf7"
- "\x41\x38\xe8\x57\xfc\x0b\x37\x7b\x6d\x4f\xb3\xc5\x63\xbf\xc4\x19"
- "\xf7\xfd\x12\x6e\xb6\x85\xf1\xa2\x6d\x41\x9e\x9f\x25\x59\xb4\xdf"
- "\x46\x0b\xb8\x3b\xee\xfb\xe2\xee\x21\x67\x9b\x0b\x77\x13\x00\x77"
- "\x8b\xe8\xfe\x88\x36\x17\xee\xfe\xf7\x3b\x62\xbf\xa4\xfc\x2c\x3e"
- "\x6c\x0b\x4f\x60\x7b\x45\xcf\xbb\x6c\x0b\x88\xc3\xd1\xee\xb6\x85"
- "\xff\x8e\xf3\x8d\xc1\x45\xc9\x32\xdb\xc2\x07\xde\x31\xd8\x26\xc3"
- "\xe0\xbf\xbe\x45\x31\xf8\x09\x11\x83\x8b\x8e\x5c\x03\xdd\xf2\x5a"
- "\xa6\x7f\x18\x6c\xa3\x18\x3c\xf1\xce\x60\xf0\xe1\x5b\x80\xc1\x74"
- "\xdc\xff\x36\xd9\x6c\x02\x0c\x9e\x8d\x18\x3c\xf1\xc6\xec\x0d\x3f"
- "\x50\x8e\x16\xec\x97\x77\x2c\xfe\xdb\xa7\x72\x2c\xfe\xef\x40\x5a"
- "\xd7\x2b\x16\xff\x6d\x8f\x84\xc5\xac\xde\xed\xb5\x37\xfc\xad\xea"
- "\xf6\xda\x1b\xfe\x56\x25\x61\xf1\x7f\x6f\xeb\x1e\x8b\x8b\x32\xbc"
- "\x63\x31\x9c\xa7\x58\x5c\x94\xd1\x25\x16\x3f\xe1\x8e\xc5\x87\x5d"
- "\x32\xaf\xcc\xde\x60\xf9\x57\xcf\xdd\x72\xd8\xa7\xfc\xab\x79\x90"
- "\x64\xd4\x2b\x0e\xd7\x99\xf3\x08\x69\x35\x90\x0c\xb3\xe3\x09\x02"
- "\xe7\x60\xfc\xde\xe9\x61\x8e\x18\x4d\xb8\xad\x5a\x8a\xc7\x6f\xe0"
- "\x3f\xc8\xb8\x46\xa5\x30\xb7\xe8\x18\xbf\x43\xfd\x5d\xf1\x3c\x62"
- "\xef\x6e\xb7\xeb\xde\x9e\xc5\x1b\x87\x34\x08\xf7\xc5\xb0\x7d\x37"
- "\x43\x1a\xc5\x32\xf2\xa6\x45\xf1\x4e\x2c\xbf\x65\x88\xc5\x1a\x3a"
- "\xc4\xe2\xed\xfe\x87\x55\x24\xa8\xcf\x3a\x9e\xcf\xdf\xce\xdb\x5a"
- "\x07\x3f\x10\xd5\xfa\x3a\x21\xc6\xed\xbc\xb5\x2d\xf3\x9d\x3c\x78"
- "\xc7\x92\x3f\x40\xbd\xd6\xb0\x3d\x51\xad\x86\x69\x04\xce\x15\x89"
- "\xe7\x60\xdc\x08\x67\x08\xe0\x39\xb8\xc6\x6f\xbd\x12\xb9\x3b\x0d"
- "\xb0\x2a\x95\x90\x91\xd7\x70\xce\xbc\x63\x02\x9e\x51\x67\x43\x9b"
- "\x9b\xa1\x2d\xfe\xbe\xfe\x36\xe0\xc7\xc0\x4a\x18\x31\x78\xef\x2c"
- "\x78\xaf\x82\x6c\x1c\xfb\x80\xa1\xb9\xbc\x32\x90\x70\xfb\x22\xb3"
- "\xf8\xbe\x13\xa2\x81\x1e\xc4\x98\x40\x68\x4e\x8d\xcd\x50\x8f\x57"
- "\xa6\xf3\xdc\xa0\xfe\x2a\xb3\xc3\xc6\xe6\x34\xf4\xef\x28\xe8\xb1"
- "\x3c\x3c\x37\x3f\x81\xa8\xe0\x3f\x98\xdf\x36\x21\xba\x2d\xf3\x7f"
- "\x26\xc2\x7b\x46\x61\xbf\x7c\xbd\xe3\xe6\x9d\xb0\xee\xf4\x8f\xc0"
- "\xb5\x83\x3e\x1f\x9f\x4d\x9f\xa3\xe4\xb2\x9c\x70\x9e\x37\xa4\xf3"
- "\xe6\x64\x07\x09\x81\xb1\xd8\x0d\xfd\x46\x7e\xe4\xfe\xf4\x40\xd4"
- "\xfa\x7e\x84\x1c\x4c\x69\x54\x9a\xa1\xef\xce\x3f\xf4\xb7\x99\xd2"
- "\x7e\x4a\xe0\xba\x15\x75\x96\x0b\x8a\xbf\x4f\x98\x7a\x91\x10\xc4"
- "\x13\xf8\xfd\xbc\x0d\xd6\xb1\xc9\x50\xde\x0c\xef\xc1\xb5\x46\x04"
- "\x62\xdd\x0b\x8a\xff\x71\x9a\x92\xce\x92\x10\x3d\x09\xca\x86\x77"
- "\x63\x75\xff\xa7\x1c\xeb\x5a\x14\x7f\x9f\x86\x7d\x80\xb2\x05\xca"
- "\x78\x1f\xfa\x90\x11\x7e\x6f\x64\x16\xe5\xcd\x9c\x09\xd1\xdc\xa0"
- "\xc8\x2c\x8a\x7d\xf0\x9e\x9b\xe1\x9d\xa1\x4e\x30\xd4\x09\xa6\xc7"
- "\x34\xa2\xca\x81\x73\xd8\x0e\x1c\x83\x4d\x4b\x3b\xb0\xed\x23\xd8"
- "\xb6\x8f\x71\x08\xe4\xd5\x13\xa2\x79\xe0\x6d\x5c\x53\x35\x69\x8a"
- "\x4f\xeb\x15\x7f\xb7\x86\x28\x78\x9e\xdf\xdb\x5f\xb5\x3e\x8d\x04"
- "\x1b\x39\x42\x4c\xfd\xb0\x9d\xbf\x97\x41\xfb\x81\x38\x16\x6d\x99"
- "\x7f\x2f\xb4\x28\xfe\x67\x3a\x8e\x2f\xd0\xd3\xa6\x79\x18\xdf\xa1"
- "\x98\xe0\x73\xf0\x1e\xa1\x3e\x1d\x4f\xec\xb3\x26\x2d\x80\x87\xf2"
- "\xc5\x00\xc5\xd7\x24\x20\xa2\xf7\x40\xb8\xbf\xd1\x42\x96\xd2\xfb"
- "\x2d\xec\x3e\xe0\xa5\xbf\xc3\xef\x77\xf4\x78\x0e\xcb\x3e\xfa\x1b"
- "\x2c\xd2\xad\x22\x02\x78\xc3\x93\x76\x22\x8f\x00\x5f\x88\x3c\x82"
- "\xfd\x3d\x94\x66\x51\xd2\x75\x58\x51\x4c\xf5\xba\x6c\xa0\xa1\xf3"
- "\xcd\x88\xc0\xcd\x30\xb6\xdc\x75\xa4\x4b\x3d\x5c\x7b\xf7\x69\xa4"
- "\xcb\xe6\x14\x12\x24\xd4\x8d\x95\xfa\x8f\xe5\x77\x29\x3d\x39\xa0"
- "\x05\xdb\xbb\xf9\x6e\x5f\x7c\x9f\xcd\xd7\x80\x8e\xe1\xbc\xad\x24"
- "\x19\xfa\x85\x7c\x0b\x3c\x72\x30\xc1\xae\x44\xbf\x3e\x3c\x7f\xb4"
- "\xc5\xae\xdc\xdc\x44\x50\xae\x24\x9b\x00\x97\x77\x25\xc1\x98\x43"
- "\x9b\xfc\xc0\xfe\xaa\x47\x45\x3a\xa6\x00\xed\x92\x80\x77\x61\xcc"
- "\x37\xc3\xf8\xe5\x03\xe6\xe1\xef\x7c\x58\x7f\x38\xa8\x67\x51\xbc"
- "\x3b\x0d\xda\x53\xed\x0a\xe7\xad\xbb\xc3\xf9\x66\x18\xc3\xd1\x6d"
- "\x99\xef\x0e\x17\xc7\x10\xfb\xb4\x19\xce\x6f\x82\xeb\x30\x9e\x85"
- "\x8c\x87\x8a\x93\xc5\x77\xf6\x35\x9e\x1b\x0f\x92\xd1\x9b\x0e\x92"
- "\xc8\xd7\x0f\x92\x31\x6b\x1a\x60\x5e\x1a\x9e\xe2\x3f\x99\xed\x80"
- "\x35\xd1\x30\xba\x23\x7c\x64\x14\x7e\x7b\xe2\xd6\xf7\x2f\x78\xf5"
- "\x20\x19\x8e\x7b\x63\xa7\x82\xe4\x89\x6b\xf8\xd4\x1e\x5f\xf1\x66"
- "\xfd\x55\xc2\x85\x1a\x46\x3b\xd7\x0f\x0d\x9b\x72\x95\x90\x13\x5a"
- "\x1b\x49\x4b\x84\xb5\xbc\xa5\x91\xa4\xd9\x78\x6b\x65\xc6\x45\x02"
- "\xd8\x53\xc3\xc6\xee\xbd\xe6\xa9\x71\x84\xe0\x9e\x41\xee\x9f\x5a"
- "\xd2\x3b\x9e\x04\xa6\x9e\x21\x11\xe9\x0d\x7c\xa3\x73\xfb\x93\x9a"
- "\xb4\xb5\x44\x79\xb0\xa5\x86\xc9\x9e\x8a\xf7\xde\x7f\x1f\xf7\xa7"
- "\xb6\xe9\xc8\x3c\x87\xb0\x1e\xe5\x4c\x98\x98\xbe\x90\xdc\x8f\xef"
- "\x13\x42\x65\xaf\xf7\x66\xc2\xb8\x4d\xf4\x0f\x9f\xdf\x1b\x48\xe9"
- "\xb9\x7d\x4c\xd1\xc1\x05\x76\x90\xb7\x5a\xa2\xd3\xe3\xf8\x46\x94"
- "\xeb\x60\x7d\xa1\xb2\xa0\xb9\xd1\x01\xb2\x55\x2c\xac\xdf\x16\x72"
- "\xac\xbe\x40\xc9\x6d\x69\x89\xf6\xf3\x19\x59\x74\xdd\xc6\xb5\x14"
- "\xfa\x3e\x43\x4b\x32\x68\xff\x61\xcd\x0c\x49\x44\x79\x8a\xff\x0a"
- "\xfb\x7f\x14\xde\x95\x1f\xa0\x2b\x80\xfa\xc1\xb8\x7e\x4e\xad\x35"
- "\x91\x72\xbb\x93\xec\x6c\xa2\x63\xd4\x13\xc6\x28\x10\x68\x6e\x81"
- "\x71\x0a\xf2\x46\x37\xa4\x19\x67\x34\x8c\xe6\x02\x18\x6d\x28\x5d"
- "\x6c\x8c\x2e\x53\x96\x13\x58\x47\x81\x36\x5b\x18\x6d\xb8\xbe\xe3"
- "\xa3\x90\x36\xfe\xbd\xc7\x3f\xa6\xf9\x5a\x5f\xf0\xd9\x3c\xf0\x07"
- "\xf2\x05\xa7\x1e\x1f\x85\xcf\xc6\x3e\xe0\xf7\x33\xe4\x83\xa9\xaf"
- "\x7e\xc5\x57\xea\x1b\x89\x19\xde\x87\x0f\x75\xef\x83\xc3\xdf\x3e"
- "\x54\xfb\xea\xc3\xc6\x91\xc0\xb7\x23\x81\x6f\x47\x02\xdf\x5a\x18"
- "\xdf\x9e\xac\x65\x7c\xeb\x84\x7e\xb5\x83\xec\xbe\x66\x06\x51\x62"
- "\xbf\xf6\x9f\xc5\x18\x7d\xd0\xcf\x46\x89\x77\x27\x5f\x82\x31\x12"
- "\xf9\x37\x60\x68\x18\x8e\x4f\xa5\xad\x86\xa4\x23\xff\x76\x78\xe3"
- "\xdf\xf7\xf7\x4f\x9d\x0f\xb4\x79\x05\xf8\xf7\x5b\x2d\x09\x6e\x20"
- "\x81\x6b\x67\x00\xff\x36\x7a\xe3\xdf\xf7\xd7\x1e\x81\x67\x76\xe2"
- "\xdf\x38\x77\xfe\x7d\xff\x7e\xff\xf9\xf7\x48\x83\x8b\x7f\x5f\x12"
- "\xf8\x77\xa1\x07\xff\x36\xb8\xf1\x2f\xbe\xb7\xdf\xfc\xfb\xfe\x44"
- "\xff\xf8\xf7\x48\xb9\x8b\x7f\x41\x2f\xd9\xf9\x5b\x3a\x46\x3d\x61"
- "\x8c\x80\x7f\x8f\x14\xc0\x38\x79\xe5\xdf\x1f\x9e\x7e\xc7\x16\xdf"
- "\x38\xfd\x8e\x8d\xed\x9e\x7e\x47\xcf\xf8\x4f\xbf\xa3\x7b\x6f\x3f"
- "\xfd\x8e\x05\xf9\x47\xbf\xa3\x1b\x7d\xd3\xef\x68\xcc\x8f\x87\x7e"
- "\xc7\x87\xdf\x38\xfd\x4c\xce\xee\xe9\x67\xda\xe1\x3f\xfd\x4c\xb1"
- "\xb7\x9f\x7e\xa6\x52\xff\xe8\x67\x9a\xe4\x9b\x7e\x26\x8d\x2f\xfa"
- "\x3d\x73\x3f\xc7\x73\xe8\x37\x17\x3e\xd4\x88\x32\x10\x93\xd7\x8e"
- "\xb7\xa3\xce\x08\xe5\x40\xb1\x4c\x65\x2a\xd0\xab\x3d\xca\xc1\x1e"
- "\x65\x95\x47\x59\xed\x51\x8e\xf0\x28\x47\x8a\x65\xa0\x57\x8f\xcb"
- "\x8a\xe3\x0b\x41\x67\xcb\xb0\x28\x3e\x08\x14\xae\x0f\x9c\xe7\xd4"
- "\xa0\xde\x37\xd0\x5b\xdf\x37\x1b\x78\xbb\x3e\x8d\xf4\x6f\x52\x7c"
- "\xa0\xa7\xf4\x58\xdf\x4f\xcb\xa7\x64\x10\xa0\x47\xe2\x94\xb5\xc8"
- "\x57\x56\xc2\x5f\x8f\xe8\x09\xe3\x74\x1f\xe8\x9b\x56\xe4\x39\x4d"
- "\xc2\x31\xbe\x5e\xf1\xc1\x1c\x7c\xbf\x91\x7a\x13\xe1\x02\x86\x6a"
- "\x51\x17\x02\xfa\x24\x5a\x03\x86\xf6\xe3\xf7\xcc\x8c\xca\x56\x72"
- "\x41\xd9\x06\x4e\xb3\xd6\xca\x5b\x27\x5d\x81\x75\x0c\xd6\x32\x73"
- "\xb3\x1d\x78\x92\xb7\x9a\x12\x2e\x41\x7f\x3f\x38\x51\x91\x0a\x6d"
- "\xc3\x73\xe0\x59\x7a\x5e\xd5\x32\xdd\xec\xa8\x22\x3c\xb4\x51\x69"
- "\x2b\x05\xdd\xbf\x86\x08\x6d\xea\xf9\xd0\x96\xe9\xd8\xa6\x57\xfd"
- "\x2c\x67\x68\x09\x3c\xf3\x89\x19\xda\x40\xc2\xaf\x0b\x54\xfb\xc7"
- "\x1f\x1f\x34\xfa\xd4\xfb\x72\x86\x8d\x67\xed\x06\xdd\x44\xbb\x1f"
- "\x46\x77\xd1\xae\xd0\x5f\xd5\xcd\xb4\x9b\xeb\xbb\xdd\xe1\x42\x7f"
- "\x35\x37\xd3\xae\xb5\x8b\x76\x85\xfe\x46\xdf\x44\xbb\x25\x3e\xf3"
- "\x7f\xf0\x39\x23\x84\xfe\x66\xdc\x4c\xbb\x05\xbe\xdb\x1d\x5a\x72"
- "\x73\xbc\x50\x62\xeb\x8a\x17\x6e\x8e\x0f\x4e\x74\xf1\xfe\xc3\x4a"
- "\x6e\x8e\x07\x4e\xe4\x75\xc5\x03\x37\x47\xff\x13\x5d\xd2\xff\xe6"
- "\x68\xff\xd1\xf8\xae\x68\x7f\x73\x74\xff\xc8\x27\xff\xa3\x2e\x0b"
- "\xb4\x8f\xe1\xc3\x75\x46\x6e\x6b\x47\x0c\x17\x3e\x74\xc1\x7a\x2e"
- "\x9a\x3c\x03\x18\x16\x92\x4b\x42\xa3\xa9\x7d\xe8\xe3\xe1\x6b\xf3"
- "\x88\xd2\xa8\xe4\x94\x07\x52\x6a\x94\x66\xc7\x68\x92\xee\xe0\x9d"
- "\x7b\x93\xec\x8a\x9f\xc0\xf9\xe3\xf1\x84\xd8\x56\x68\x09\x6d\x27"
- "\xac\x23\x26\x3b\x2d\x9a\x4c\x75\x12\xb4\x47\xd8\x3e\x4c\x05\x0c"
- "\x03\x1c\x33\xe7\xda\x71\xcd\x0b\x85\xfb\x1c\xc0\xbf\xd0\x86\x9d"
- "\x1c\xe2\xac\x8a\xe8\x04\x5a\xcf\x0a\x7a\xa3\x95\xdf\x3e\x74\x01"
- "\x9f\xae\x25\x1b\xe0\x37\x3c\x73\x5b\x80\x95\x28\xf3\x41\x9f\x6c"
- "\xcb\xfc\xd8\x68\x51\x94\x2e\x46\x1d\x13\x74\xd9\xe6\xf4\x2b\x68"
- "\x73\xd7\x19\xd7\x83\x5e\x8b\x75\x0f\x72\x56\xe5\x48\x3d\x51\xe2"
- "\x6c\x84\xba\x47\x8e\x27\x12\xd2\x85\xcd\x25\x90\x53\x8f\xdb\x8b"
- "\xf7\x63\x3b\x68\xcb\xdc\xcc\xc1\xd8\xaa\x27\x4c\xc4\xfe\xf2\x39"
- "\x23\x23\x4c\x29\xb8\x2e\x94\x8e\x9f\xf0\x08\xdf\x26\xe0\x7c\xbf"
- "\x26\x28\x53\x9d\xdd\xc0\x57\xf1\xaa\x2b\x13\xf9\xec\xde\xd1\x95"
- "\xb6\x16\x62\x4a\xea\x20\xf5\x8a\xd2\x09\xf8\xec\x56\xf5\xb8\x02"
- "\x9b\x7a\x5c\x61\x5b\x66\x69\xb4\xd8\x5f\x7c\x96\x78\x1e\x6d\x14"
- "\xac\x8f\xa5\x31\xc7\x53\x7d\xf7\x11\xd6\x92\xb0\xa9\x11\xbc\x15"
- "\xc7\xd0\x94\xd6\x02\x7d\x29\x3b\x8d\xe3\xcc\xe7\x8c\xd3\xdb\xd2"
- "\xb5\x0f\x32\x9b\x5d\xa9\x03\x6d\x3f\xb0\x0e\xc4\x52\x3b\xcc\x96"
- "\x96\x58\xea\x67\x03\x78\x0f\x3a\xbb\x16\xe5\x95\xcb\x8a\x52\x9a"
- "\xff\x78\x86\x56\xe9\xa7\xce\x53\x4a\xd7\x7f\xd3\x83\x38\x0e\x65"
- "\xef\xc3\xf3\x9e\xac\x57\x94\x69\x98\x1d\xaf\x25\x19\x9f\x07\x75"
- "\xf6\xc3\x33\x93\x79\xe3\x95\x68\xac\x07\xd7\xa3\x85\xeb\x19\x6e"
- "\xd7\x33\xa0\xcf\xc5\xc2\x75\xc1\x0e\xd8\xb2\xc1\xed\xfa\x06\xfd"
- "\x83\x68\x97\x2b\xcb\xc2\x77\x82\xb5\x2c\x06\xd7\x35\xb4\xf9\x33"
- "\xbb\x7a\x4b\x8c\x50\x2f\xb1\x59\x51\xb6\xa7\x15\xf8\x0a\xae\xa7"
- "\xba\xdd\x9f\xfa\x61\x72\x14\x79\x66\x17\x8e\x69\xd9\x61\x4b\xc0"
- "\xd5\x1a\x66\xcb\x29\x2d\xa2\x63\xa1\x6a\xd1\xb9\xb7\x67\x51\x94"
- "\x65\x40\x9b\x3a\x1b\xc8\x7a\x50\x27\x17\x9f\xe9\x3e\xfe\x71\x09"
- "\x09\xcb\x12\x34\x83\x62\x35\xb1\x4b\xe6\x6b\x5e\x5e\xb6\x72\x69"
- "\xe2\xd8\x41\xb1\xbd\x08\x71\xe3\x1d\x15\x6f\x08\xe1\xb9\x9c\xb1"
- "\x8d\xe6\x5c\x90\xb1\x94\x2a\x58\x6f\x3b\x48\x0e\xd0\xd5\xb1\x7d"
- "\xb2\xc9\x19\x3e\x79\x9a\x73\xfb\x48\x53\xfa\x55\xa2\x4c\x8b\xe0"
- "\xbf\x36\xa5\x8c\x03\x1a\x9c\x9c\x8c\xeb\xbd\x19\x46\x6f\x23\xf0"
- "\xab\x29\xe5\x03\x3c\x47\xf7\xc0\x98\x63\xd8\xb9\xff\x4e\x2b\x55"
- "\x1e\x4b\xab\x51\x96\xc7\xb4\x90\x0f\x23\xac\xa4\x44\xd3\x42\xf2"
- "\xf0\x3c\x57\x45\xbf\xcd\x40\xfd\x77\xf0\x59\x68\xdf\xc2\xdf\xcc"
- "\x56\x77\xf2\xe7\xf8\x1c\x4d\x3f\xfc\x66\x70\x72\x2c\x3e\xcf\xa2"
- "\x38\x39\x26\x20\x8f\x28\x40\x9e\x09\x86\x7a\xed\xdc\xb6\xb1\x8d"
- "\x74\x7e\x67\x96\x35\x3b\x94\x61\x23\xf2\xb7\x92\xa0\xdd\x5b\x09"
- "\xc9\x0b\x23\x81\x6d\x99\x27\x1b\x2c\x81\xc1\x79\x38\x5e\xd0\x74"
- "\x70\xab\x92\x3c\x05\xe7\xec\x16\xb2\xa4\x19\xcf\xc1\xbc\xb2\xf9"
- "\xc2\x0b\xfc\x56\x66\xdf\xdb\x6f\x1a\xa7\x1e\x5b\xc3\xc3\x58\xd8"
- "\x07\xf6\xcb\x08\xd1\x03\xbf\xc0\xbc\xe1\xfb\x8e\xad\x69\x56\x94"
- "\xdb\x3e\x2a\x26\x24\x0d\xe7\x29\x8c\xc7\x5f\xae\xd9\x61\xbe\x4e"
- "\x36\xed\xbf\x66\x85\xf2\xe4\x69\x6f\x25\xd9\x95\x27\xc7\x17\x13"
- "\xcd\x0b\x28\x0f\x7d\xb2\xe4\x3f\x62\x79\xc7\xd0\x69\x20\x3b\x36"
- "\xfc\x8d\x7c\x52\x5b\x4a\x82\x67\x93\x00\x57\xfc\xf6\x44\xa2\x9c"
- "\x6a\x81\xf2\x4a\xa2\xac\x04\x5d\x1e\xed\xed\x69\x4f\xa3\xcd\xbd"
- "\x82\xa0\x1d\x9e\x57\x2e\xb3\x1d\x68\xb1\x03\x2e\x35\xf6\xc0\xfd"
- "\xde\x9c\x2a\x6b\x34\xde\x33\xcf\x26\x7c\xbf\x6a\x15\xbe\x5f\xb5"
- "\xd2\xef\x57\xb9\xf8\xed\x0a\xbf\x59\xa5\xc6\xf0\x9c\x73\x85\x36"
- "\x6c\x6a\x4c\x00\x8f\x6d\xe2\xf7\xac\xde\x20\xf7\xf3\x2b\xb4\x7d"
- "\x76\x24\x10\x75\xa5\xb5\x91\x98\x1b\x4b\xc9\x9b\x49\x44\xcd\xb7"
- "\xc6\xdf\x5d\x5e\x72\x92\xf0\x5b\x37\x44\x1d\x4a\x33\xf5\x70\xa2"
- "\xcd\xa3\x35\xa2\x57\xc8\x3a\x05\xda\xee\xfb\x6c\x4c\x20\xc3\x77"
- "\xb7\x90\xa8\x79\xe7\x33\x68\x2c\x27\xcc\xbb\xe7\x68\xd5\x6a\xae"
- "\xb7\x6a\x1f\xee\x58\xa1\x7d\x30\xc4\xca\xbe\x77\xcd\x59\xa8\x22"
- "\xf8\x4d\x8b\xcf\xfc\x47\xee\x6e\xb4\x3b\xdb\xac\xc4\x11\x9a\x35"
- "\x1a\xf9\x13\x9e\x1b\x89\xdf\x48\xd2\x57\x13\x15\xf7\x8d\x96\x54"
- "\x34\xb7\x90\x47\x81\x6f\xf0\x7b\x40\x7e\x3d\xfb\x1e\xe0\xdc\x62"
- "\x18\x8d\xdf\x04\xda\x56\x68\x95\x93\x2f\xc1\x7a\x95\xf9\x89\xaa"
- "\x63\x50\xbf\x69\x27\xb4\x75\xb8\x26\xb8\xcd\xfb\xf2\xe3\x37\x37"
- "\xef\xcb\x4d\x78\x1f\x7e\x23\x03\x3a\x99\xf6\xb7\x20\xdd\x80\x7e"
- "\x2d\x56\xe5\x73\x0d\xbc\xa3\xa2\xe1\x6d\xa0\x4f\x8d\x8c\x3e\x94"
- "\x9e\x09\x76\xe5\x85\x58\xa0\xcb\x79\x46\xab\x72\x1b\xd0\xe9\x38"
- "\xb6\x31\xce\x72\x00\x68\x0d\x3a\x8f\xb2\xdc\x5e\x47\x63\x51\x20"
- "\xbd\xf6\x77\x94\xf6\xe8\x50\x0f\x8d\xc1\x6f\x8d\x6d\x03\xfb\xe9"
- "\xdb\x73\xc6\x16\x5f\x57\x8f\x2d\xed\xe2\xbb\x63\x2e\xd2\x6b\xed"
- "\x42\x12\x54\xde\x70\x9a\x50\x9a\x2d\x17\x68\x86\xfe\x69\xab\xb4"
- "\x7d\x1c\x6d\xda\xb0\x1d\x40\xab\xca\x44\x0b\xd9\xd9\x42\xd4\xe6"
- "\xc6\x1a\xfc\x26\x73\xf7\x73\xcf\x13\xf2\xdc\x5b\x3c\x57\x51\x72"
- "\x96\xd2\xef\x20\xd0\xcf\x01\xf4\xc3\x6f\x91\x2e\xfa\x25\x01\xfd"
- "\xae\x01\xfd\x2e\x49\xf4\x73\xb6\x01\xfd\xda\x80\x7e\xab\x80\x7e"
- "\x36\x4f\xfa\x1d\x89\xc4\xef\x95\xf8\x5d\x08\xe9\x87\x3e\xd1\xdc"
- "\x2a\x6d\x24\xfd\x4e\xf9\xb2\x96\xec\x5e\x40\x82\x46\xd8\x89\x22"
- "\xfd\x38\x51\x41\x3f\x55\x43\x60\x7c\xa1\x3d\xe0\xef\x7a\x62\x2e"
- "\x76\x92\x35\x33\xc9\x83\x48\x4f\x87\x40\x4f\xb3\xe3\x1d\x72\xad"
- "\x4d\xab\x84\x36\x47\xef\xb8\x46\xc6\x4c\x3a\xaf\x21\x27\xa6\x57"
- "\x10\xa0\xc7\x7e\x6e\xdb\x38\xfd\xcd\xcf\xc3\xaa\xd4\x1b\x9f\x87"
- "\x95\x57\xff\x6f\x1e\xde\xec\x3c\xac\xcc\xf5\x3e\x0f\xab\x9e\xbd"
- "\xb9\x79\x58\x35\xf1\xff\xe6\xe1\x8f\x69\x1e\x56\x8d\xf2\x9c\x87"
- "\x2e\x59\x21\x21\x6e\xc9\xfc\x85\x4b\x17\x2e\x7d\x45\xb3\x60\x75"
- "\x62\xdc\x0a\x26\x31\xc8\x64\x06\xad\x93\x8b\x56\xbe\x01\xeb\xe9"
- "\x27\x11\x35\xe4\x50\xbf\x1a\x25\x37\x2b\x22\x90\x37\xe6\x67\x70"
- "\xc6\x3d\x41\x6f\x80\xec\x8b\xf3\x35\x07\xe4\xda\x0b\x8a\x5a\xdd"
- "\xc7\x91\x20\xf3\x25\x34\x11\xfc\xcd\xe4\xa5\x59\xa5\xb8\xb7\x30"
- "\x77\x3b\xdf\x88\x7b\x0b\x4f\x8e\xc7\xb5\xff\xd4\x99\x7b\x74\xb0"
- "\xae\xcf\x8a\x20\xed\xb3\x74\xca\xd7\xcf\x92\xa0\x90\x1a\x32\x89"
- "\xe3\x78\xde\x94\xd6\x04\xb2\xd6\x99\x02\xd3\x4b\x4d\x44\x93\x12"
- "\x04\x75\x6b\x14\x9a\x94\x75\x70\xfc\xe2\xbc\x26\x25\xf3\x2b\x38"
- "\xd2\x7d\x33\x20\x6f\x37\xf2\xdb\xc7\x46\x39\xff\x14\x59\x80\xdf"
- "\x14\x77\x87\xf3\x0d\x07\x41\xb6\x3f\xd8\x61\x57\xae\x4f\x40\xdf"
- "\xec\x87\x78\xfc\x36\x88\xdf\x1e\xd7\xb7\x80\xfc\xbe\x41\xb4\xcf"
- "\x7c\x11\x8a\xf3\x65\xe3\x76\xbe\xe1\xe8\x85\x1a\x25\xce\x1f\x9b"
- "\xea\x4a\xf4\x06\x78\x0f\xe8\xa3\x65\x67\x38\x5f\x6b\xed\x3b\xb6"
- "\x31\x50\x43\x94\x6d\x99\x9f\x4d\x04\x99\x24\x10\xe5\x89\x2c\xb8"
- "\xf6\x3a\x5c\x63\xdf\xe8\x3e\x2f\xe7\x7b\x9e\x8a\x40\xcc\x02\xde"
- "\x55\x5c\x56\x7c\xb6\xad\x1d\xde\x71\x23\xd3\x03\x1a\xed\xdb\xc6"
- "\x96\x3a\xf6\xf5\xd3\x3b\x50\x86\x1b\xd4\x2f\xa3\xa3\xef\xd8\x62"
- "\xc7\xb6\xb1\x35\x33\x1e\xa1\xdf\xa2\xa1\xfe\xe9\xe7\xf1\x1d\xae"
- "\xab\x47\x9a\xa0\xbe\xad\x55\x3d\xd9\xd4\x9a\x33\x79\xda\xc9\xe4"
- "\x22\x01\xcb\x3e\x3b\xfe\x5c\xae\x80\x65\xb9\x30\x57\x74\x80\x65"
- "\xba\xce\x58\xc6\xbe\xdd\x3b\x09\xc3\xb4\x0a\x02\x6d\x35\xe0\x5c"
- "\x41\xb9\xf0\x00\x8c\x03\xce\x03\xe4\x77\x8a\x6d\x80\x6b\xe2\x9c"
- "\xc0\xf9\x82\xf8\x45\xe7\xa7\xc7\xfc\xc0\x39\x71\x8f\x95\xa8\x70"
- "\x4e\x20\xbe\xe1\x9c\x40\x9f\x98\x37\xae\xb1\x39\x11\x52\x4b\x54"
- "\x74\x5e\x38\x4a\xe9\xbc\x40\x9d\xa0\xdc\xe1\x81\x69\x6e\x73\x62"
- "\x93\x38\x27\x44\x4c\x03\xbe\x77\xe0\x9c\x58\x25\x9f\x13\xb3\xea"
- "\x54\x84\xe2\x5d\xe6\x3f\x22\xf3\x60\x4e\x54\xea\xad\xc4\x29\x62"
- "\x1a\xcc\x09\xdc\xb3\x43\x31\xed\x77\x02\xa6\x59\xe1\x3c\xcc\x85"
- "\xfc\x45\x72\x4c\x6b\x6f\xeb\x4e\xb6\x38\xfd\xc0\xcd\x61\xda\xe9"
- "\x48\xbc\x0f\x69\x85\x74\x43\x7a\x21\x8d\xfe\x95\xe8\x83\x98\xe5"
- "\x54\xf9\xc0\x2c\x2f\xf4\x01\x7e\x6e\x86\xdf\x9d\x68\xc4\x67\xbe"
- "\x1b\xeb\x8e\x5b\x88\x57\x88\x5d\x88\x59\x88\x5f\x38\x0f\x10\xb7"
- "\x28\x66\x01\x9e\x43\xb9\xb1\x22\xbe\x9e\xe2\x59\xfa\x79\xa2\x4a"
- "\x9f\x40\x1e\x44\xfc\x32\x3b\xae\x12\xc4\x33\x4a\xbf\x50\x89\x7e"
- "\x88\x5f\x3b\x93\xc8\x98\xc9\x0b\x35\x04\x71\x0b\xc6\x3e\xe8\x84"
- "\xf6\x34\xa1\xba\x80\x41\x7d\xff\xee\x30\xd0\xb9\xb7\x92\xc0\x9c"
- "\x30\x12\xd4\x96\xf9\x79\x73\x67\x3d\xe0\x0b\x22\xea\x01\x38\x67"
- "\x71\xee\x5a\x14\x9f\xcd\x66\xdf\xa1\x9f\x54\x31\x5b\x78\xdd\xdd"
- "\xb4\x0c\x7a\xb3\xa4\x33\x7f\xf1\x34\xfb\xfe\x0d\x3a\x72\xdf\x91"
- "\x11\xfc\x96\x2b\x13\x71\xfc\xf0\x7d\xe6\x3d\x02\x7c\xb6\x6d\x5c"
- "\xc1\x66\x1c\x93\x6d\xa0\x7f\x6f\x1b\x57\x28\xf1\xd4\x17\xcb\x4f"
- "\x24\x13\x32\x23\xd9\x5f\x9e\xfa\x82\xd9\x5e\xbf\xd4\xdd\xcb\xcf"
- "\xd2\x05\x72\x5f\xea\x7a\x00\xfd\x23\x96\x39\x33\xc8\x35\xe3\x2c"
- "\x53\xba\x83\x6f\xd4\xa4\x90\xa1\xd0\xaf\x4f\x4f\x82\xbe\x7d\x32"
- "\x11\x70\x6c\xda\x62\xa0\xe5\xac\xe8\x43\x9c\x35\xd0\xa2\x38\x55"
- "\x03\x3a\x7f\x23\x60\x69\xa0\x3b\x96\x32\xdc\x3c\x45\x63\xfe\xdb"
- "\x8d\xb3\xaa\xb0\xad\xa9\xa5\x24\x44\xf3\x4b\xf4\xaf\x3b\xb3\x7c"
- "\xf5\x5a\x82\x7b\x46\x7b\xc0\xef\xb1\xed\x5b\x87\x45\xc3\xfd\x7d"
- "\xf8\x2f\xa7\x2b\xf4\xbf\x84\xf5\x64\xd6\x74\x05\x7e\xef\x7f\x3b"
- "\x2d\x57\xc9\xc1\x39\xe6\x3f\x94\x4b\xf0\xfa\xc6\x8e\x40\x2a\x37"
- "\x71\x50\xa7\xd2\x96\x4b\x36\x26\x05\x11\xac\xcf\x7c\xd2\x72\x09"
- "\xd6\xdf\x94\xa0\xa2\xfe\x02\xf4\x3e\x47\x2e\xc1\x7b\x9d\x70\xfe"
- "\xf7\x5c\x30\xc9\x4e\x51\x93\x93\xd3\x2a\x69\x1b\x27\xa7\x7d\x44"
- "\xb0\x0d\xe0\x73\xf8\x7d\x94\x6c\x4e\x8a\x80\x79\x9d\x0b\xd7\x3f"
- "\x27\x9b\x2f\x47\xc2\xf1\x02\xfc\x5f\x23\x4d\x8a\x1a\xcb\xc9\x69"
- "\x1c\x09\x59\xf7\x14\x0f\xfc\xca\x9b\x71\x1f\x62\x1a\xe9\x09\xeb"
- "\xc2\x45\x73\x8d\x11\xd6\xb6\x2f\xaa\x70\x9f\x3a\x9f\x3e\xab\x99"
- "\xe3\x67\x5d\xe2\xd2\x67\x5d\xc6\x67\x3b\xf9\x59\xdf\xe1\xb3\x37"
- "\xa5\x68\x04\x1f\xd5\x5c\xea\x3b\xb7\xf1\xda\x40\x82\x7d\xc5\xe7"
- "\xe2\xf3\x36\x27\x68\x85\x67\x0e\xa7\x7d\xc3\x67\x62\x9b\xee\xcf"
- "\xc4\x1c\xf0\x9a\x17\xf1\x99\x67\xe6\xc0\x31\x14\xe8\x51\x8d\x74"
- "\xc0\xe7\x73\xbc\xae\x07\x9f\xae\x0b\xa0\xf7\x24\x37\x7a\xbb\x67"
- "\x8b\x70\x0f\xf5\x45\xc3\x7b\x3a\x58\x7d\xda\x06\xac\x75\x74\x1f"
- "\xc8\x30\x9d\x89\x74\xa6\xe1\xd9\x67\xd9\xda\x77\xf6\x7e\xb6\xf6"
- "\x31\x9a\x52\x5e\x99\xa5\xeb\x01\x74\x53\xe1\x3a\x09\x6d\x5c\x71"
- "\xb5\xf1\xa5\x2e\x00\xe9\x8d\x7c\x23\xf2\x12\xf2\x91\xc8\x43\xb4"
- "\x9f\xc0\x75\xee\x3c\x03\xbf\x83\x58\x3b\x67\x7f\x2e\xb6\x03\x7d"
- "\x20\x22\x1f\x0d\x83\xeb\x9d\xf9\xa8\x36\x54\xe2\xa3\x2f\xff\x6a"
- "\x4f\xe3\x79\xe4\x23\xd3\x4b\x06\x6c\x67\x9d\xd4\x9f\xe9\x0a\xe4"
- "\xb1\x7f\x31\xde\xb2\x20\x9d\x86\xa5\x12\x35\x7b\x9f\x2f\xe9\x7a"
- "\x3d\x2c\xd5\xa4\xc6\xbe\x8a\xef\x81\x7d\xc8\xe6\x34\x44\x7c\x8f"
- "\xcd\x1d\x03\xa1\xdd\xcb\x44\xb8\xe7\x55\x6c\x5b\x1c\x03\xa0\x19"
- "\x11\xef\x11\xeb\x67\x73\x5a\xe8\xf7\x70\x7a\x0f\xe3\xb9\x0b\x5e"
- "\xf8\xe7\xcb\x4f\x3d\x79\xee\x9e\x54\x02\x82\x2b\xc8\x4a\x2f\xb5"
- "\xe0\x73\x2e\xb1\xbe\x1d\x73\x76\xc0\x33\x80\x06\x4a\x76\xbe\xb6"
- "\x87\x1b\x4f\x08\xed\xdb\xbd\xb4\x5f\xfb\x98\xac\x7d\x1d\xb4\x9f"
- "\x0c\xed\xa3\x2c\xf6\x12\xda\xbd\x6a\x27\xd3\x76\x92\x59\xfb\x22"
- "\xdf\xf2\xc6\x21\x16\x7d\x0a\xfa\x74\xd6\xda\x18\x9e\x9e\xa2\x34"
- "\xa7\xbe\x44\x4a\xae\x80\xf3\xf0\x25\x72\xf7\x35\x3b\x94\x66\x15"
- "\xfc\x88\x6a\x4f\x63\x1d\xc0\x57\x1b\xca\x94\x07\x40\x1e\x93\x7c"
- "\x89\xce\xe2\xf5\x3a\x53\x52\xbd\x9b\x2f\x51\x2d\xcd\x37\x6f\x51"
- "\xd4\x05\x81\xee\xa8\x84\x72\x09\x3b\x7f\x2a\xc3\xfd\xbc\xe4\xab"
- "\xc7\xce\xa3\x1f\xb4\x60\x6b\x6d\xfe\xb0\x18\x6d\x6d\x75\x1a\xd1"
- "\xbe\xe9\x43\x37\xf5\x43\xe6\xfd\x36\x56\x92\x79\xbf\x8d\xf5\x2d"
- "\xf3\xd6\x55\x74\x2d\xf3\x36\xec\x97\x64\xde\x6f\x7a\xb3\x79\x5f"
- "\x7f\x85\xcd\xfb\xfa\xbf\x52\xdb\x2d\xb4\xe7\xf8\xa3\xae\x88\xff"
- "\x53\xff\x68\xe4\xf3\x7c\x90\x61\x0f\x25\x95\x2a\x0f\x82\x6e\xe4"
- "\x04\x79\x77\x7d\x0a\x09\xc4\x18\x6a\xeb\x61\x0c\xcd\x8e\x5a\x52"
- "\x11\x88\x32\xef\x29\x6c\xe7\x81\x4a\xab\x9d\xc0\x3a\xa7\x61\xe3"
- "\x72\xee\x11\xa0\x45\x80\xd9\x6e\xa7\xf5\xf0\x1a\xac\x6b\x0d\x28"
- "\xf7\x1e\xe5\x4a\x95\xbb\xa0\x1d\x9b\x5a\x97\xe1\x2e\x13\xb7\x65"
- "\x9e\x9b\xee\x5d\x16\xfe\xba\xc6\x91\xe9\x2e\x0b\x9f\xdb\x83\xb2"
- "\x30\xda\xc3\x71\xdd\xe7\x98\x0c\xac\x07\x79\x38\x03\xe5\x62\x94"
- "\x85\x39\x99\x2c\x6c\x99\xd3\xb5\x2c\x7c\xae\xe2\xff\x64\xe1\xef"
- "\x2b\x0b\xfb\xd2\xef\x2d\x8f\xdc\x9c\x2c\x6c\xd1\xfe\x9f\x2c\x7c"
- "\xa7\x64\x61\x8b\x5a\x94\x85\x39\x83\xba\x67\xde\x56\x42\xf2\x5d"
- "\xb2\xf0\xd7\xf6\xce\xb2\x70\x7d\x70\x67\x59\xf8\x5c\xbc\x5c\x16"
- "\x6e\xec\xdb\x59\x16\xae\x9f\xec\x4b\x16\x06\x1c\x6a\x46\x59\x18"
- "\xf9\x08\xe5\x62\x94\x87\xa1\x6f\x85\x8c\xa7\xea\xd7\xde\x9c\x2c"
- "\x5c\x9f\x7a\x63\xb2\x70\x7d\x9d\x77\x59\xb8\xae\xdc\xb7\x2c\x5c"
- "\x57\xee\x5d\x16\x6e\x58\x2b\xc9\x30\x0d\xcf\xfe\xf8\x65\xe1\x6f"
- "\x9a\xbd\xcb\x2b\xdf\x5c\xfd\x7f\xec\x7d\x7d\x5c\x14\xd5\xfe\xff"
- "\x61\x16\x15\x0d\x64\x31\xf0\x22\xa9\xad\x25\x89\xb0\x24\x95\xd6"
- "\x76\xd3\x42\xc3\xc2\x7b\x45\xb0\xac\x8b\xcf\x68\x60\x68\xa8\xf8"
- "\x18\x1a\x22\x98\x76\xd1\x00\x97\x02\xaf\x1a\xf8\x70\xc3\x7e\x7a"
- "\x53\xc3\xd2\xef\xc5\xae\x16\x16\xf6\xc3\x42\xc0\xbe\x76\x2f\x76"
- "\xf1\xb6\x79\xd1\xd0\xd0\x56\x04\x79\xda\xdd\xf9\x7d\xce\x9c\x59"
- "\x66\x67\x77\x66\xd9\x99\x45\x82\x7e\xfe\xb1\x2f\x74\xe6\xcc\x99"
- "\x99\xcf\xfb\x7d\xce\x79\xbf\xcf\x9c\x07\xa2\x85\x2f\x55\x77\xbe"
- "\x16\xbe\x54\x2d\xac\x85\x6b\x16\x12\xdd\x70\x49\x67\xab\x85\xe1"
- "\x1a\x41\x2d\x5c\x93\xcf\x5e\x53\xcd\xd7\xc2\x24\x0f\x68\x03\x8f"
- "\x8b\x6b\xe1\xcb\x2f\x91\x36\xf1\xb2\x3f\x69\x13\x09\xa6\xb6\x5a"
- "\xb8\xc6\xd8\xb1\x16\x26\x1c\x62\x9e\x53\x54\x0b\x5f\x9e\x68\xab"
- "\x85\x2f\x96\x09\x6b\xe1\x9f\x86\x70\x3c\xba\x72\x92\xaf\x85\x2f"
- "\x67\xf6\x0c\x2d\x2c\xca\xad\x3a\xbe\x16\xbe\x32\x5b\xba\x16\xbe"
- "\x92\x2d\x4d\x0b\x63\xce\x09\x69\xe1\x2b\x17\xad\x39\xc7\xd7\xc2"
- "\x57\x5a\x84\xb5\xf0\x4f\x5e\x7c\x2d\x8c\xf3\x17\xd2\xc2\x3f\x8d"
- "\xe3\xe5\x6f\xa3\x85\x7f\x9a\xce\xd7\xc2\x24\x1d\xa7\x85\x6b\x11"
- "\xdb\xb7\xb0\x4a\xba\x16\xfe\xe9\x47\xfb\x5a\xf8\xa7\xab\x7c\x2d"
- "\xfc\xd3\x09\xa2\x79\x6b\xbd\x89\x16\xfe\xa9\x92\x1c\xbf\xb8\xd2"
- "\xf2\x38\xa7\x85\xc9\x71\x5b\x2d\x5c\xab\xee\x40\x0b\x6b\x1c\xd7"
- "\xc2\xf5\x75\xa5\xed\x5a\xb8\xbe\xce\xac\x85\x4d\x14\xb4\x51\xd0"
- "\xde\xc3\xaf\x16\xcf\x11\xc0\x65\x0e\xda\x9c\x8b\xf6\xf5\xb0\x3e"
- "\x80\xd3\xc3\x37\xd6\x90\xb2\x7f\x63\x36\x29\xfb\x37\x86\xb4\xf7"
- "\x01\x83\x16\xc6\x9a\x98\xed\x03\x3e\x9f\x05\xbf\x8f\xd6\x96\x32"
- "\x7a\xf8\x70\x7d\x33\x85\x35\xf1\x66\x88\x23\xd6\xc5\x5f\xb2\x9a"
- "\xb8\xa2\x41\xc3\xea\xe2\xeb\x9b\xa1\xcd\xd0\x65\xa5\x30\x73\x98"
- "\xdc\xe0\xf9\xaa\x18\x3d\xbc\xb2\x19\xbd\x7f\x5b\x43\x41\x7b\x57"
- "\x55\x9c\x42\xd2\xc1\x7b\x56\x73\xfa\xf9\xea\x42\x9e\x7e\x5e\xc9"
- "\xe8\xe7\xf3\x58\x3f\x7f\x09\xb5\xd2\x67\x29\x44\x43\x63\xfd\x8c"
- "\x75\x34\xe8\xe7\xca\xfc\x81\x74\x59\xd3\x5b\x57\xb7\x9b\x35\x74"
- "\x26\xfc\x1f\xb0\xd6\xe1\x11\x4d\xf9\x0b\x90\x2b\x60\x52\xf5\x26"
- "\xdc\x03\xa7\x87\x74\xc5\xe6\x74\xd0\x66\x57\x12\x9d\x7d\x3d\xdc"
- "\xc4\xeb\x73\xbe\xe6\x81\xd7\xf3\x67\xda\x63\x88\x03\xd6\x53\xe6"
- "\x3e\x67\x93\xbf\x5f\x2a\xed\x43\xb4\x36\xbf\xdf\xf9\xe7\x33\x66"
- "\xad\x9d\xc5\x6a\xed\x16\xac\xb5\x13\xcd\x5a\xfb\xda\x93\x32\xb5"
- "\xf6\x79\x46\xcb\x4d\xe9\x7c\x2d\xb7\xa3\x1b\x68\x6d\xac\xb3\xb1"
- "\xb6\xc6\x3a\x1b\xeb\x6e\xac\xb5\xb1\xee\x36\xb1\x5a\x1b\xaf\xd7"
- "\xd7\xf2\x3a\xab\xb5\x7b\x5b\x68\x6d\x17\x4b\xad\xfd\x73\xae\x3c"
- "\xad\xfd\x73\x8e\xa5\xd6\xc6\xfc\x96\xaa\xb5\x31\xc6\x36\xdf\x38"
- "\x01\x2b\x8c\x13\xc6\xc4\xee\xb7\x32\x16\x2f\x8c\x0f\xc6\x06\x63"
- "\xe4\x10\x3e\xc0\xaf\xb2\xe6\x5f\x4f\x6b\x07\x58\x69\x6d\xac\xad"
- "\x21\x76\x35\x58\x73\x57\x14\x43\x6c\x96\x81\xee\x06\xcd\xcd\xd3"
- "\xdb\xaf\x0b\xe9\xed\x9f\x53\xdb\xfb\x9e\x29\xef\xde\xbb\x70\xdf"
- "\xf3\x00\xb3\xde\xbe\x1e\x6f\xab\xb7\xaf\x27\x5b\xe8\xed\x4a\x9d"
- "\xcb\xd5\x4a\xbe\xd6\xbe\x95\x6f\xab\xb5\xaf\x1f\x17\xd5\xda\x03"
- "\x05\xb4\xb6\x8f\x59\x6b\x5f\xbf\x2a\x4f\x6b\x5f\xaf\x15\xd3\xda"
- "\x4d\x4a\x4b\xad\x7d\x63\x12\xa7\xb5\x57\x5a\x68\xed\xda\x6a\x71"
- "\xad\x5d\xcb\x68\x3b\x5a\x39\xb3\x12\xe7\x85\x35\x12\xfe\x36\xa7"
- "\x62\xe6\x8e\xff\xd2\x82\x75\x12\xee\x6b\x80\xe7\x07\xad\xf4\xcb"
- "\x69\x4b\xcd\x8d\xbf\xc9\xd9\xd3\x45\x89\x0b\xd0\x50\xac\x8d\xb0"
- "\x2e\x32\xeb\x58\x9c\x1e\xeb\xa3\x3b\xab\x8d\x7e\x89\x15\xd6\x46"
- "\xbf\x2c\x63\x74\x2f\x33\xe7\xf0\x46\x38\x6e\xe3\x3a\x57\x7b\xdf"
- "\x08\x17\xd6\xde\xbf\x5c\x26\x3a\xe5\xc6\x64\x8c\x0b\x5f\x7b\xc3"
- "\x35\x82\xda\x5b\x3f\x88\xbd\x26\x9c\xaf\xbd\x49\x1e\xd0\xde\x8e"
- "\x11\xd7\xde\xfa\x73\xa4\xfd\xd5\xef\x25\xed\x2f\x8b\xb1\x8d\xf6"
- "\xd6\xaf\xb1\xd4\xde\x18\x7f\x5b\xed\x4d\x38\xc5\x3c\xa7\xa8\xf6"
- "\xd6\x9f\xb2\xd5\xde\xb5\xd5\x58\x7b\x0b\xf3\xaa\x7e\x1f\x9f\x57"
- "\xf5\x13\x9b\x4d\x66\x0d\xbe\x05\xf2\xbb\xe9\x65\xad\xc1\x7b\x20"
- "\xd7\x62\x39\x1d\xce\xbc\xd3\x65\x69\x3a\x1c\x5f\x53\x3f\x48\x9a"
- "\x0e\xc7\xfc\x13\xd2\xe1\xf5\x71\xd6\xfc\xe3\xeb\xf0\xfa\x34\x61"
- "\x1d\x5e\xbf\x83\xaf\xc3\x71\xfe\x42\x3a\xbc\xfe\x34\x2f\x7f\x1b"
- "\x1d\x5e\xff\x23\x5f\x87\x93\x74\x9c\x0e\xbf\x95\xce\xf6\x6b\xc8"
- "\xe8\x93\xbe\xb5\xd0\xbe\x0e\xbf\xb5\x8c\xaf\xc3\x6f\x85\x11\xbd"
- "\x7d\x2b\xaf\x99\xd1\xe1\xb7\xa2\xc9\xf1\xda\x54\xcb\xe3\x9c\x0e"
- "\x27\xc7\x9b\x2d\x75\x78\x31\xd6\xe1\xb7\x8e\x76\xa0\xc3\x43\x1d"
- "\xd7\xe1\xa6\x13\x9c\x0e\x37\x9d\xb0\xaf\xc3\x1b\xe2\xec\xeb\xf0"
- "\xb6\x66\x4e\x87\xb7\xb2\xdf\xa3\x5a\x83\x49\x3d\xd0\x72\xdd\xdc"
- "\x2f\x8d\x75\xb8\xf1\x81\xe8\x42\xb6\x5f\xba\xf4\xf0\xea\x4a\xea"
- "\x23\x73\xbf\xf4\x72\xd0\xd7\x7a\xe4\xb6\xb9\x1e\x21\xac\xc1\xf1"
- "\x58\x8c\xb2\x66\x0d\x3b\x1e\xa3\x65\x7a\x1e\xd6\xe0\x57\x20\x4d"
- "\x0d\x68\x70\xd0\xd1\xef\xb7\x6a\x28\x78\x9f\x2a\x5e\xda\xd5\xed"
- "\x69\xab\xcd\x69\xb1\xf6\x86\xf4\x65\xe5\xa0\xc3\xf1\x35\x50\xfe"
- "\xcb\xca\xf0\x38\x8f\x94\xaf\x99\xb4\x90\x47\x25\xa7\xd9\x1b\x87"
- "\x30\x9a\x5d\xcf\x6a\x76\xb8\x06\x34\x4a\x69\xbb\x66\x6f\xad\xa4"
- "\xb4\xf5\x3c\xcd\x5e\xd2\xf4\x56\x63\xfb\xf8\x8f\xad\xac\x56\xd7"
- "\x9a\x18\xad\x7e\x1e\xb4\x7a\x15\xd1\xea\x8d\x09\xe6\x34\xc0\x99"
- "\x6a\x26\xcd\x15\x26\x4d\x19\xa4\xa9\x64\xd3\x68\x2d\xf4\x7c\x09"
- "\xd1\xf3\x2d\xbe\x7c\x3d\xdf\x78\x11\xeb\x79\x73\xbf\x39\xd6\x2a"
- "\x96\x7d\xe7\x26\x1f\xa1\xbe\xf3\xa6\x1d\xd6\x7d\xe7\x2d\xbc\xbe"
- "\xf3\xdb\x7d\xa5\xe8\x79\xb8\x67\xa9\x59\x33\xfe\x9a\x7a\xb1\x3b"
- "\xe9\x79\x93\x45\xdf\xb9\x89\xd7\x77\xde\x14\x27\x4f\xcf\x37\xc5"
- "\x5a\xea\xf9\x16\x79\x7d\xe7\xa5\xbf\xa6\xdf\xea\xd9\x7a\xbe\x29"
- "\xca\xb2\xff\x1c\xeb\x79\xae\xff\xbc\x45\x63\xab\xe7\x5b\x26\x5b"
- "\xe8\xf9\x12\x9d\x4b\xe3\x1e\xbe\x9e\xa7\x17\xdb\xea\xf9\x96\xcd"
- "\xf2\xf4\x7c\xcb\x71\x79\x7a\xbe\xa5\xc8\x31\x3d\xdf\x3a\x48\x58"
- "\xcf\x37\xc4\x8a\xeb\xf9\x06\x86\xaf\x26\x2d\xa7\xbb\xf0\x77\x47"
- "\xd5\x6a\xac\xbb\xda\xce\x30\xba\x8b\xe8\x30\xd0\x5d\x6d\xb9\x3d"
- "\x43\xcf\xb7\x8d\x16\xd6\x58\x6d\xe3\x39\x3d\xdf\xea\xdb\xf9\x7a"
- "\xbe\xd5\x57\x58\xcf\xb7\x1d\x23\x7a\xa7\x75\xb0\xad\x9e\x87\x6b"
- "\x04\xf5\x7c\xdb\x55\xf6\x1a\x5f\xbe\x9e\x27\x79\x5c\x72\x31\x70"
- "\xdf\xff\x6d\x30\x35\xec\x25\xed\xb8\x61\x19\x69\xc7\x09\xc6\xb6"
- "\x7a\xde\x30\xa9\x63\x3d\x4f\x38\xc5\x3c\xa7\xa8\x9e\x37\x64\xdb"
- "\xea\xf9\x86\x58\xac\xe7\x85\x79\x65\x5a\xc5\xe7\x95\xc9\x87\xaf"
- "\xe7\x0d\x3f\xf6\x1c\x3d\x2f\xca\xb5\xd1\x7c\x3d\x6f\x3c\x26\x5d"
- "\xcf\x1b\xaf\x4a\xd3\xf3\x98\x7f\x42\x7a\xde\x34\xc6\x9a\x7f\x7c"
- "\x3d\x6f\x9a\x2a\xac\xe7\x4d\x0b\xf9\x7a\x1e\xe7\x2f\xa4\xe7\x4d"
- "\xb9\xbc\xfc\x6d\xf4\xbc\xe9\x08\x5f\xcf\x93\x74\x9c\x9e\xa7\xa3"
- "\x49\x5d\xdb\xd0\x57\xba\x9e\xa7\x9f\xb4\xaf\xe7\xe9\xf1\x7c\x3d"
- "\x4f\x7b\x13\xdd\x4e\x27\x10\x3d\x4f\x07\x90\xe3\x0d\x6e\x96\xc7"
- "\x39\x3d\x4f\x8e\xdb\xea\x79\x7a\x63\x07\x7a\xde\xdd\x50\xe0\x97"
- "\xd8\x3a\xdc\x2f\xb5\xcd\x3b\x62\x4f\x50\xcd\x33\xc6\xf6\xb5\xf4"
- "\x63\xa0\xdd\xaf\x06\x1d\x30\x0f\x51\x78\x3e\x7a\xca\x39\x68\xdf"
- "\xe7\x91\x71\xf0\xb8\x8d\xc7\xe3\x3d\x0e\xad\x2d\xee\x85\xd7\xfe"
- "\x6b\xcd\x09\x8c\x31\xa8\x87\x68\x71\x5b\xdf\x52\xe0\x17\xd5\x9c"
- "\x33\xae\xa8\x05\x8f\x81\x4f\x40\xd4\xdc\x3a\x61\x9d\xf6\x46\x35"
- "\x6d\x02\xce\xbb\x45\xce\x22\x1a\xed\x6c\xfc\x65\x86\xc7\xb8\xfd"
- "\xc7\xf3\x14\x2a\x1a\xaa\x18\x3d\xe0\x1e\x13\x8a\xf2\x52\x90\xb7"
- "\x47\x1d\x52\x7a\xb8\xb8\xf4\xfe\xc3\x77\x08\x19\x41\x0b\x4c\x1c"
- "\x49\x9b\x82\x62\x43\xf1\xfa\x33\xfd\x89\x1e\x28\xea\x65\x60\xf5"
- "\xc0\xdb\xb7\x91\x3a\x7f\x35\xe8\x80\xb3\x9c\x0e\x68\x31\xeb\x34"
- "\x0b\x0d\x30\xfb\xba\x12\xe5\x6f\xe0\x8f\x81\x6f\xcb\xe6\x34\x00"
- "\x6e\xff\xe9\xb9\x01\x68\x54\x33\x19\xdb\xb0\x76\x2a\x19\x03\xaf"
- "\xae\x41\xd4\xee\x39\xc8\xad\x2c\xe6\x12\x9e\x27\xee\x5b\x56\xb3"
- "\x0f\xad\x99\x84\x86\x1a\x70\x9b\xbf\x81\x2e\x2c\xab\xc9\x45\x78"
- "\x6d\x3d\xd0\x7e\x9a\xed\xb7\xd1\x58\xdc\xce\x4e\x9e\x47\xda\x7e"
- "\xa6\x8d\xa5\x5c\x86\x9c\x0e\x38\x8d\x24\xeb\x36\xca\x85\x19\xff"
- "\x2b\x3a\x07\xb5\xc0\x2f\xd5\x30\xdc\x2f\xca\x08\x58\x92\x35\x15"
- "\x27\xe8\x4c\x7f\x9d\x5e\x7c\x18\x78\xf8\xe1\xa5\x5a\x17\xbc\x3e"
- "\x34\xde\x2b\xd1\x74\x70\x88\x96\x87\x4d\x1b\x8b\x4d\x1b\xc1\x06"
- "\xe3\x32\x27\x11\xe1\xb5\xf8\xfa\x63\x4c\x2a\x9a\xab\x90\xe9\x0d"
- "\xf3\x7e\x89\x21\x68\x97\x89\xe0\x61\x6c\x8b\xef\x6b\x82\xd8\xe3"
- "\x35\xa7\x80\x0f\x8c\x1e\xcb\xc0\x7b\x28\xa6\xb9\x78\x60\x3d\x06"
- "\xfc\xee\xb7\xbb\x15\x70\xf8\x91\xe0\x40\x6f\x50\x32\x7f\x0d\x6f"
- "\x04\xa8\x20\xef\x07\xda\xda\x00\x8b\x66\x6b\x2c\xfe\xb1\x1d\xef"
- "\xb5\x88\xd7\x83\x33\x64\x93\x35\xef\x18\x2c\xde\x08\x18\x8c\xd7"
- "\x8b\x60\xe6\x91\xb4\x05\xe0\xfa\x52\xb9\xeb\x0a\x9e\xff\x42\x30"
- "\x30\xb2\xb1\xc7\xfb\x2e\xe2\x78\x63\xad\x55\x01\x1a\x8b\x99\xd7"
- "\xf1\x16\xbd\xbd\x6d\x9f\x5f\x14\x1e\x77\x72\x83\xa2\x76\xc8\xd2"
- "\x37\x14\x65\x7f\xfe\x6f\x97\xc4\x5e\xd5\xf3\x62\xbf\xc5\x25\x96"
- "\x8b\xbd\xab\x8f\xbc\xd8\xbb\x8a\xae\xff\xdf\x75\xb1\x57\xf6\xc0"
- "\xd8\x53\x3a\x2e\xf6\xbd\xb2\xe5\xc5\xbe\x97\xe8\xfe\x37\x38\xf6"
- "\xb8\x3f\xc8\xdc\x17\x64\xee\x07\xc2\x6d\x1c\xe3\x41\x28\x8f\xf0"
- "\xf6\x71\x89\xf0\x6f\xcb\x71\x89\xdf\x94\xe0\x3e\x12\x76\x5c\x22"
- "\xd5\xdb\x7e\xff\x0f\xd5\x4f\xdb\xde\xff\x43\xb9\xdd\x64\x74\x23"
- "\xe5\xf6\x1d\xa3\x1b\x29\x37\xe6\x9b\xd6\xba\x8b\x88\x32\x3c\x34"
- "\x78\xcf\xe1\x25\xc5\x14\x9e\x93\x73\xf8\x46\x33\x95\x51\x0f\x3a"
- "\x90\xba\x9f\xc6\xfd\x3e\x99\xcb\xf1\x78\xc4\x06\x04\x1a\xec\xfe"
- "\x6b\x94\x9b\x07\x5e\x63\xeb\xb3\x1b\xc5\x4c\x7f\x0b\xfd\xc0\xf4"
- "\xe2\x83\x7e\x7a\x17\xdc\xb6\x1d\x5e\xd2\x4c\x99\xf9\x62\x9e\x7b"
- "\x07\x31\x4c\x35\xfa\x44\xec\xb9\xb5\xcf\x2f\xd1\x3c\x7e\xd0\x70"
- "\x68\x88\x56\x90\x43\x78\x4e\x1f\xf0\x08\x73\x06\xcf\xc1\x33\xf3"
- "\x09\xf3\xa8\xbc\xb9\x16\xe1\x3d\x64\x3c\x6b\xc1\xef\x03\x87\x66"
- "\x1e\x00\x7c\x2d\x79\xa4\x15\xe1\xd1\x0e\x3e\x8f\x6e\xb1\x3c\x02"
- "\x3e\x71\x3c\xe2\xe6\xe3\x0d\x96\xc4\xa3\x3a\x96\x47\xd9\x56\x3c"
- "\xba\xae\x42\xdf\x54\x5f\x64\x79\xe4\x3a\xcb\xe0\x6f\xe6\x51\x9f"
- "\x0b\xa7\x67\x01\x8f\x66\x49\xe5\x51\x9f\x2a\x9e\x67\xa5\x3c\x1a"
- "\x6d\x3c\x2b\xe5\x36\xce\xda\xb3\x9a\x3d\xea\x2d\x9f\x09\x7b\x6e"
- "\x81\x4f\x6d\x30\xfb\x54\xca\x6d\x9e\x3c\x3e\xbb\xc5\x38\x34\xc6"
- "\x8b\x72\x3b\x65\x3d\xc6\xeb\x43\xec\x53\xa9\xde\xf1\x98\x6b\x82"
- "\x3e\x95\x3d\x67\x33\x36\x87\xea\x37\xaf\x7d\x6c\x0e\xd5\x2f\xb8"
- "\xdb\x8f\xf1\xa2\xfa\x56\x0a\xfa\x05\xaa\xef\x05\x66\x8c\x17\xe5"
- "\x56\xdc\xe9\x63\xbc\x20\x4f\x41\x5f\x4a\xf5\x8b\x60\x74\x3b\xe5"
- "\x56\x62\x33\xc6\x0b\x5f\x23\xe4\x4b\xa9\x7e\x69\xec\x35\xc5\x3c"
- "\x5f\xca\xe6\x01\xf5\x49\xbe\xa8\x2f\xa5\xee\x79\x92\xd4\x2f\xf7"
- "\xf4\x25\xf5\x0b\xc1\xd4\xc6\x97\x52\xfd\x7e\xb4\xf4\xa5\x82\x63"
- "\xbc\x58\x0e\x31\xcf\x29\xe6\x4b\xa9\x7b\x46\xda\xf8\x52\xaa\x77"
- "\xac\xe0\x18\x2f\xca\xc3\x85\xe3\x91\xfb\x5e\xde\x18\x2f\xea\x9e"
- "\x65\x3d\x62\x8c\x97\x38\xb7\x2a\x79\x63\xbc\x28\xf7\xf1\x92\xc7"
- "\x78\x51\xee\xab\x24\x79\x51\x86\x73\x02\x5e\x94\x72\x3f\x65\xcd"
- "\x39\x9e\x17\xa5\xdc\x2f\x0a\x7a\x51\xca\xbd\x91\xe7\x45\x99\xfc"
- "\x05\xbc\x28\xe5\x31\x8c\x97\xbf\xb5\x17\xa5\x3c\xc6\xf1\xbc\x28"
- "\x9b\xae\xdd\x8b\x52\x1e\x3a\x52\x87\xf6\xf6\x90\xec\x45\x29\x0f"
- "\xe6\xbb\xe6\xa1\x9d\xe4\xdb\x0d\xcf\x87\x52\x1e\x67\x78\x3e\x94"
- "\xf2\x60\xd6\xfb\xd1\x51\x1e\x0d\xcc\xf8\x2e\xca\xa3\x90\x1c\xef"
- "\xed\x6e\x79\xbc\xdd\x87\xb2\xc7\xf1\xf8\x2e\x66\x5c\xd7\x96\xfe"
- "\xae\xd2\xfc\xe7\xa8\x6e\xe8\x3f\x43\xec\xf8\xcf\x90\x1e\xea\x3f"
- "\x3d\xf3\xe5\xf9\x4f\x4f\xd1\xf5\x9f\xee\x7a\x20\x7b\x3a\xbc\xbf"
- "\x2f\xa7\xc3\xbd\x06\xc9\xd3\x2d\x5e\xbe\xbf\x7e\xec\x7b\xa2\x07"
- "\xf2\xac\xe1\x62\x3f\x20\x57\x5e\xec\x07\xe4\xc8\xf7\x40\x7e\x93"
- "\x39\x0f\xe4\x37\x59\xdc\x03\xdd\xbb\xd0\xbe\x07\xfa\x5d\x0e\xe7"
- "\x81\x7c\x1a\x89\x46\xf1\xb9\x40\x34\x8a\xcf\x0e\xe9\x1e\xc8\xc7"
- "\xeb\xae\x07\x92\xe2\x81\xbc\x62\x38\x0f\xe4\x7d\x51\x9e\x07\xf2"
- "\xae\xe6\x7b\x20\xbf\x16\x5b\x0f\xe4\x63\x33\xff\x5b\xdc\x03\xf9"
- "\xc4\xc9\xe3\xb3\x4f\xac\x63\x1e\xc8\xe7\xb4\xb0\x07\xba\x37\x41"
- "\xdc\x03\x91\x73\xb6\xda\xf5\x77\x71\x9c\x76\xfd\xdd\x23\xdd\xdf"
- "\x03\x0d\x3c\x2f\xac\x53\x07\x5e\x24\x1e\xc8\xa7\xa4\xf3\x3d\x90"
- "\x4f\x89\xb0\x07\xfa\xdd\x54\xa2\x17\x7d\x4a\x6d\x3d\x10\x5c\x23"
- "\xe8\x81\x7e\xb7\x89\xbd\xa6\x84\xef\x81\x48\x1e\x50\x9f\xec\x15"
- "\xf7\x40\xbe\xe3\x48\xfd\xe2\xeb\x41\xea\x17\x82\xa9\xad\x07\xfa"
- "\xdd\xe5\x8e\x3d\x10\xe1\x10\xf3\x9c\xa2\x1e\xc8\x37\xd8\xd6\x03"
- "\xdd\x1b\x2f\xec\x81\xfc\x7a\x71\x3c\x1a\xb4\x8f\xef\x81\x7c\x57"
- "\xf5\x0c\x0f\x24\xca\xad\xf3\x7c\x0f\x34\x68\xa2\x74\x0f\x34\x68"
- "\x8d\x34\x0f\x84\x39\x27\xe4\x81\x06\x9d\xb6\xe6\x1c\xdf\x03\x0d"
- "\xfa\x51\xd8\x03\x0d\x6a\xe1\x7b\x20\x9c\xbf\x90\x07\xf2\xf3\xe7"
- "\xe5\x6f\xe3\x81\xfc\xc6\xf3\x3d\x10\x49\xc7\x79\x20\x3f\xb2\x37"
- "\x0a\x75\xaf\x97\x74\x0f\xe4\x77\x5a\xdc\x03\xf9\x9d\xe5\x7b\x20"
- "\xbf\x3d\xc4\xeb\xf8\x35\x13\x0f\xe4\x77\x94\x1c\xbf\x57\x69\x79"
- "\x9c\xf3\x40\xe4\x38\xe7\x81\xee\x73\x93\xe6\x81\xee\xef\x86\x1e"
- "\x48\x65\xc7\x03\xa9\x7a\xa8\x07\x1a\xbc\x57\x9e\x07\x1a\xbc\xe7"
- "\xae\x0e\x97\xa3\xc3\xef\x1b\xcc\xe9\xf0\xa1\x43\xe4\xe9\x96\xa1"
- "\x76\xbf\x7f\xda\xd7\xe1\xfe\xe7\x39\x1d\xee\x7f\x5e\x5c\x87\x0f"
- "\xbd\x69\x5f\x87\x3f\x38\x98\xd3\xe1\xc3\xd6\x91\x76\x72\xd8\x3c"
- "\xd2\x4e\x0e\x1b\x26\x5d\x87\xab\x76\xdc\xd5\xe1\x52\x74\xf8\xe0"
- "\x5a\x4e\x87\xab\xe2\xe4\xe9\x70\x55\x2c\x5f\x87\x3f\x94\x66\xab"
- "\xc3\x55\x67\x1c\xd7\xe1\xaa\xeb\xf2\xf8\xac\xaa\x73\x4c\x87\x0f"
- "\x8b\x10\xd6\xe1\x43\x1b\xc4\x75\x38\x39\x67\xab\x9f\x1e\xb8\xce"
- "\xe9\xa7\x07\x8e\x77\x7f\x1d\xfe\xc0\x2c\x61\xad\xf4\x40\x1c\xd1"
- "\xe1\xc3\x26\x77\xbe\x0e\x1f\x36\x59\x58\x87\x3f\x70\x81\x68\x96"
- "\x61\x51\xb6\x3a\x1c\xae\x11\xd4\xe1\x0f\x7a\xb0\xd7\x4c\xe6\xeb"
- "\x70\x92\x07\xd4\x27\x23\xc5\x75\xf8\x83\xa7\x49\xfd\xf2\x60\x2e"
- "\xa9\x5f\x08\xa6\xb6\x3a\xfc\xc1\xc5\x1d\xeb\x70\xc2\x21\xe6\x39"
- "\x45\x75\xf8\x83\xc7\x6c\x75\xf8\x50\xbd\xb0\x0e\xf7\xcf\xe4\x78"
- "\xe4\x1f\xcc\xd7\xe1\x0f\x1a\x7b\x86\x0e\x17\xe5\xd6\x2c\xbe\x0e"
- "\x1f\x7e\x56\xba\x0e\xf7\x77\x91\xa6\xc3\x31\xe7\x84\x74\xb8\x7f"
- "\x84\x35\xe7\xf8\x3a\xdc\x7f\xa1\xb0\x0e\xf7\x4f\xe3\xeb\x70\x9c"
- "\xbf\x90\x0e\xf7\x3f\xc4\xcb\xdf\x46\x87\xfb\x9f\xe1\xeb\x70\x92"
- "\x8e\xd3\xe1\x0f\x25\x90\x3a\x74\xe8\x0e\xe9\x3a\xfc\xa1\x08\x71"
- "\x1d\xfe\xd0\x4b\x7c\x1d\xfe\x50\x00\xd1\xdb\x0f\xa5\x12\x1d\xfe"
- "\xd0\x58\x72\x7c\xe8\x76\xcb\xe3\x9c\x0e\x27\xc7\x39\x1d\xfe\x90"
- "\x56\x9a\x0e\xf7\xec\x86\x3a\x5c\x69\x47\x87\x2b\x7b\xa8\x0e\x0f"
- "\x18\x29\x4f\x87\x07\x04\xc8\xd7\x82\xa3\x74\x9c\x16\x1c\xa5\x13"
- "\xd7\x82\x01\x46\xfb\x5a\x30\x98\x5b\x1f\x80\x0a\xda\x4c\xea\xea"
- "\xa0\xc5\xa4\xae\x0e\x0a\x96\xae\x05\x03\xf7\xdd\xd5\x82\x52\xb4"
- "\xe0\x43\x05\x9c\x16\x0c\x5c\x26\x4f\x0b\x06\x26\xf2\xb5\x60\x48"
- "\xa6\xad\x16\x0c\xfc\xce\x71\x2d\x18\xd8\x22\x4f\x0b\x06\x36\x3b"
- "\xa6\x05\x83\xa6\x0b\x6b\xc1\x91\x48\x5c\x0b\x92\x73\xb6\x6d\xb8"
- "\xba\x85\x6b\xc3\xd5\xa7\xbb\xbf\x16\x54\xc7\x0b\xb7\xd7\xea\x65"
- "\x44\x0b\x06\x45\x77\xbe\x16\x0c\x8a\x16\xd6\x82\x6a\x32\xff\x99"
- "\x0a\x9a\x65\xab\x05\xe1\x1a\x41\x2d\x18\x3c\x88\xbd\x26\x9a\xaf"
- "\x05\x49\x1e\x50\x9f\x88\xcf\x7f\xa6\x82\xc9\xfc\x67\x2a\x98\xcc"
- "\x7f\x66\x31\xb5\xd5\x82\xc1\x6b\x3a\xd6\x82\x84\x43\xcc\x73\x8a"
- "\x6a\xc1\x60\xdb\xf9\xcf\x54\x80\x41\x58\x0b\x8e\xda\xc1\xf1\x68"
- "\xd4\x93\x7c\x2d\xf8\x70\xdf\x9e\xa1\x05\x45\xb9\x15\xcf\xd7\x82"
- "\x0f\x5f\x90\xae\x05\x47\x79\x48\xd3\x82\x98\x73\x42\x5a\x70\xd4"
- "\x74\x6b\xce\xf1\xb5\xe0\xa8\x55\xc2\x5a\x70\x54\x26\x5f\x0b\xe2"
- "\xfc\x85\xb4\xe0\xa8\xe3\xbc\xfc\x6d\xb4\xe0\xa8\xef\xf8\x5a\x90"
- "\xa4\xe3\xb4\x60\x48\x12\xa9\x43\x03\xf6\x49\xd7\x82\x21\xd3\xc5"
- "\xb5\x60\xc8\x3c\xbe\x16\x0c\x19\x4d\x34\x5f\x48\x06\xd1\x82\x21"
- "\xe1\xe4\x78\x40\x81\xe5\x71\x4e\x0b\x92\xe3\x9c\x16\x0c\xc9\xeb"
- "\x48\x0b\xda\xd7\x0f\x1a\x0d\xa7\x1f\x34\x1a\x4b\xfd\x70\x86\xa7"
- "\x1f\x1e\x19\x67\x5f\x3f\x8c\x49\xe5\xf4\xc3\x63\x3f\x92\xf2\xfd"
- "\xd8\x69\x52\xbe\x1f\xdb\xc4\xe8\x87\x08\x68\xe7\x41\x3f\x1c\xba"
- "\x56\x48\xf4\xc3\xb5\x66\xea\xed\x1b\xac\x7e\xa8\x43\x6e\x19\x4b"
- "\x58\xfd\x30\x07\xeb\x87\x47\x8d\x58\x3f\xb8\xe7\x81\x56\xad\x61"
- "\xb5\x6b\x22\x68\xd7\x1a\xf8\x3f\x94\x9d\xcf\x20\x8f\x72\xd0\x97"
- "\x5a\x7c\x3d\xde\xcf\x00\xf2\x62\xe6\x65\x32\x73\x36\x75\xbd\xf0"
- "\x3e\x39\x58\x5b\xe0\x7d\x27\x3a\xdc\x73\xa2\x86\xdd\x73\x22\x96"
- "\xbf\xe7\x04\xde\x6b\x02\xef\x3b\x91\xb7\x1c\x79\xbf\xc7\x6a\x8a"
- "\xfe\x69\x2e\xfd\xf1\xbe\x13\xfd\x1b\x88\x3e\x3d\x64\x2a\x25\xfa"
- "\x74\x85\x6f\x3f\xd0\x42\xea\x5d\xf5\x9c\x96\x78\x17\xeb\x88\x15"
- "\x01\xaa\x86\x15\x01\x43\x6f\xdd\x0a\x78\xc0\x76\xbf\x89\xe3\xb1"
- "\x78\xbd\x7c\xbc\x47\x9f\x81\xd5\xa7\xf4\xab\x01\x68\xf7\x02\xe4"
- "\x06\xba\xd8\xe5\x61\xd0\xa7\x23\x06\xc3\xb3\x9f\x45\x4a\xe3\xad"
- "\x80\xc1\x96\x6b\x1b\xc2\xb3\x2b\x4d\xb7\x02\x50\x59\xcc\xf7\xcc"
- "\x1c\x4d\x03\x3b\x47\x53\xbf\x22\x00\xaf\xc1\xaf\xd9\xb9\xdc\x42"
- "\x9f\xfa\x98\xf5\xe9\xa3\x67\xe4\xe9\xd3\x47\x4b\xf9\xba\x42\x73"
- "\xd9\x56\x57\x3c\x16\xec\xb8\xae\x78\x6c\xaa\x3c\x5d\xf1\x58\x94"
- "\x63\xba\xe2\xb1\x23\xd6\xba\xe2\x00\xa3\x2b\x1e\x09\xc5\x1c\x14"
- "\xd6\x15\xe4\x9c\x6d\x7b\x30\x66\x2a\xd7\x1e\x8c\x19\xd2\xfd\x75"
- "\xc5\xe8\x62\xe1\xba\x7f\xf4\x19\xa2\x2b\x1e\x2b\xec\x7c\x5d\xf1"
- "\x58\xa1\xb0\xae\x18\x43\xd6\x7f\xa3\x1e\x3b\x6a\xab\x2b\xe0\x1a"
- "\x41\x5d\x31\x66\x19\x7b\x4d\x21\x5f\x57\x90\x3c\xa0\x9e\xc9\x14"
- "\xd7\x15\x8f\x8f\x24\xf5\xce\x98\x16\x52\xef\x10\x4c\x6d\x75\xc5"
- "\x98\x73\x1d\xeb\x0a\xc2\x21\xe6\x39\x45\x75\xc5\xe3\x83\x6c\x75"
- "\xc5\x23\x63\x85\x75\xc5\x13\x37\x39\x1e\x3d\x91\xcd\xd7\x15\x8f"
- "\xcf\xeb\x19\xba\x42\x94\x5b\xc5\x7c\x5d\xf1\xc4\x23\xd2\x75\xc5"
- "\x13\x71\xd2\x74\x05\xe6\x9c\x90\xae\x78\xe2\x88\x35\xe7\xf8\xba"
- "\xe2\x89\xb3\xc2\xba\xe2\x89\xcb\x7c\x5d\x81\xf3\x17\xd2\x15\x1a"
- "\x2f\x5e\xfe\x36\xba\x42\x13\xcc\xd7\x15\x24\x1d\xa7\x2b\x34\x95"
- "\xac\x37\xbb\x2c\x5d\x57\x68\x8e\x88\xeb\x0a\xcd\x71\xbe\xae\xd0"
- "\x64\x10\xfd\xa0\xa9\x21\xba\x42\xb3\x87\xd5\x1b\x35\x96\xc7\x39"
- "\x5d\x41\x8e\x73\xba\x42\xd3\x70\x77\xbe\x65\x77\xec\x63\xfa\x7d"
- "\xa6\xbc\x36\xfc\xf7\x19\xbf\xfe\xb7\xde\x1e\x38\xdf\x72\xcb\x93"
- "\x6e\xdc\xb7\xde\xb1\x7d\xe5\xe9\x96\xb1\x6e\xbf\x7e\xec\x7b\xe2"
- "\x58\xe3\xdf\x9f\xe7\x62\x3f\x6e\x93\xbc\xd8\x8f\xdb\xf8\xeb\xc7"
- "\xbe\x27\x8e\x71\x18\x1b\xc5\xc5\xfe\x19\x17\x79\xb1\x7f\x06\xc9"
- "\xef\xd7\x7e\xce\x62\x8c\xc3\x73\xe7\xc5\x7d\xe9\x33\xdf\xd9\xf7"
- "\xa5\x61\x16\x63\x1c\x26\xb0\x63\x1c\x26\xb0\x63\x1c\x26\x30\x63"
- "\x1c\x52\xb0\x2f\xfd\x6b\x74\xe1\x47\xcb\x8b\x28\xbc\xee\xd6\xa1"
- "\xe5\xcd\x14\x60\xe2\x6a\xc0\xbe\x14\x62\x9d\xc9\xec\xff\x50\xc2"
- "\xf6\x6b\x8f\xdf\x51\x5e\x6b\xb1\xf7\x03\x15\xea\xcf\xad\x5d\x5b"
- "\x82\xf0\xb9\xcf\xea\x8b\x28\x6d\xab\x55\x9f\x37\xe4\xa9\x5a\xc2"
- "\xef\xf3\xc6\x7d\xdd\x2d\x16\xfb\x38\x18\x73\x23\xf6\x74\xd4\xe7"
- "\x6d\xdd\xdf\x9d\xdf\x8a\xbc\x7b\x6e\x9f\xf7\xb8\x32\xae\xcf\x7b"
- "\xbc\xcc\xf1\x0f\xe3\xad\xc6\x3f\x3c\x2f\x30\xfe\x61\xbc\x84\xf1"
- "\x0f\xe3\x65\x8e\x7f\x18\xef\xe0\xf8\x87\x09\x36\xe3\x1f\x88\x37"
- "\x7d\xa6\x2a\x45\xd4\x9b\x92\x73\xb6\x9e\xe2\x59\x8b\xf1\x0f\xcf"
- "\xf6\x80\xf1\x0f\xcf\x8a\x7c\xa3\x7e\x96\x1d\xff\x30\xe1\x0e\x8c"
- "\x7f\x98\x20\x32\xfe\xe1\x59\x76\xfc\xc3\x04\x81\xf1\x0f\x13\x44"
- "\xc6\x3f\x84\xb1\xe3\x1f\x26\x58\x8d\x7f\x98\xc0\x8e\x7f\x08\xb3"
- "\x33\xfe\x21\x8c\x1d\xff\x10\xc6\x8e\x7f\x20\x98\xda\x7a\xd3\x30"
- "\x07\xc6\x3f\x4c\x60\xc7\x3f\x4c\xb0\x33\xfe\x21\x4c\x60\xfc\xc3"
- "\x33\xe7\x85\xbd\xe9\x73\x16\xe3\x1f\x9e\xb3\x1a\xff\x10\xd6\x43"
- "\xc6\x3f\x88\x72\xcb\x6a\xfc\xc3\x44\x19\xe3\x1f\x9e\x93\x38\xfe"
- "\x61\x82\xc8\xf8\x87\xe7\x22\xac\x39\xc7\xf7\xa6\xcf\x89\x8c\x7f"
- "\x78\xce\x6a\xfc\xc3\x04\x91\xf1\x0f\xcf\x1d\xe2\xe5\x6f\xe3\x4d"
- "\x9f\xb3\x1a\xff\x30\xc1\x6a\xfc\xc3\xf3\xec\xf8\x87\x67\xd6\x49"
- "\xf7\xa6\xcf\xdb\x19\xff\xf0\xbc\xd5\xf8\x87\xe7\xd9\xf1\x0f\xcf"
- "\xb3\xe3\x1f\x9e\x67\xc7\x3f\x3c\x93\x6c\x79\x9c\xf3\xa6\xe4\x38"
- "\xe7\x4d\x9f\x97\x38\xfe\xe1\xee\x5c\xcc\xae\xf1\xa6\x93\x64\x8e"
- "\x7f\x98\x64\x77\xfc\xc3\x5d\x7f\x24\xa6\xd1\x9f\x2f\xe0\x34\xfa"
- "\x1f\xf6\xc9\xd3\x2d\x7f\x28\xf8\xf5\x63\xdf\x13\xfd\xd1\xa4\x44"
- "\x2e\xf6\x93\x87\xc9\x8b\xfd\x64\x95\x7c\x7f\xf4\x62\x03\xe7\x8f"
- "\x5e\x6c\x10\xf7\x47\x93\x1b\xed\xfb\xa3\xa9\x63\x39\x7f\x14\x99"
- "\x4f\x34\x4a\x64\x1a\xd1\x28\x91\xe3\xa5\xfb\xa3\x29\xc7\xf9\xfe"
- "\x28\x62\xe2\x5d\x7f\x24\xd7\x1f\xfd\xa1\x8e\xf3\x47\x53\x36\xc9"
- "\xf3\x47\x53\x36\xf2\xfd\xd1\xb4\xbd\xb6\xfe\x68\xca\x55\xc7\xfd"
- "\x51\xa4\x87\x3c\xae\x47\xba\x3b\xe6\x8f\x22\x17\x0b\xfb\xa3\xc9"
- "\xcd\xe2\xfe\x88\x9c\xb3\xd5\xb5\x53\x3d\x38\x5d\x1b\x75\xa1\xfb"
- "\xfb\xa3\xa8\x64\x61\x0d\x1b\xb5\x89\xf8\xa3\xc8\x84\xce\xf7\x47"
- "\x91\x09\xc2\xfe\x28\xaa\x85\x68\xc9\xc8\x44\x5b\x7f\x04\xd7\x08"
- "\xfa\xa3\xa9\xc1\xec\x35\x09\x7c\x7f\x44\xf2\x80\xba\x66\x92\xb8"
- "\x3f\x9a\x7a\x99\xd4\x3d\x53\x8f\x91\xba\x87\x60\x6a\xeb\x8f\xa6"
- "\x66\x76\xec\x8f\x08\x87\x98\xe7\x14\xf5\x47\x53\xbf\xb3\xf5\x47"
- "\x93\x1b\x84\xfd\xd1\x8b\x87\x38\x1e\xbd\x18\xc1\xf7\x47\x2f\x0c"
- "\xe9\x19\xfe\x48\x94\x5b\xc9\x7c\x7f\xf4\xc2\x75\xe9\xfe\xe8\xc5"
- "\x61\xd2\xfc\x11\xe6\x9c\x90\x3f\x7a\x71\xb1\x35\xe7\xf8\xfe\xe8"
- "\xc5\xcd\xc2\xfe\xe8\xc5\xbd\x7c\x7f\x84\xf3\x17\xf2\x47\x2f\x9e"
- "\xe5\xe5\x6f\xe3\x8f\x5e\xbc\xca\xf7\x47\x24\x1d\xe7\x8f\xa6\x65"
- "\x90\x3a\x74\x72\xbe\x74\x7f\x34\x6d\xb1\xb8\x3f\x9a\xb6\x8a\xef"
- "\x8f\xa6\x85\x13\x1f\x34\x6d\x0f\xf1\x47\xd3\x66\x91\xe3\x93\xf3"
- "\x2c\x8f\x73\xfe\x88\x1c\xe7\xfc\xd1\xb4\xc2\xbb\xf3\x34\xbb\xa3"
- "\x3f\x7a\x79\x92\x3c\x7f\xf4\x72\xf8\x5d\x8d\x2e\x47\xa3\x4f\x2b"
- "\xe1\x34\xfa\x9f\x4e\xcb\xd3\x2d\x7f\x2a\x91\xaf\xd1\xe7\x6e\xe7"
- "\x34\xfa\xdc\xed\xe2\x1a\x3d\x7a\x87\x7d\x8d\x3e\x4b\xc7\x69\xf4"
- "\x99\xe3\x49\x3b\x39\x93\xec\xdb\x49\xcd\xb8\x2c\x5d\xa3\xcf\x98"
- "\xcd\xd7\xe8\xd1\x57\xef\x6a\x74\xb9\x1a\xfd\x65\x2d\xa7\xd1\x67"
- "\x8c\x94\xa7\xd1\x67\x04\xf0\x35\x7a\xcc\x44\x5b\x8d\x3e\x23\xd3"
- "\x71\x8d\x3e\xe3\x88\x3c\xae\xcf\x28\x74\x4c\xa3\xcf\xf4\x12\xd6"
- "\xe8\xd1\x79\xe2\x1a\x9d\x9c\xb3\xd5\x56\xb3\x8e\x70\xda\x6a\xd6"
- "\xba\xee\xaf\xd1\x67\xa9\x84\x75\xd4\xac\x91\x44\xa3\xcf\x54\x76"
- "\xbe\x46\x9f\xa9\x14\xd6\xe8\xb3\xc8\xfe\xbf\xd4\x4c\x6f\x5b\x8d"
- "\x0e\xd7\x08\x6a\xf4\x59\xe7\xd8\x6b\x94\x7c\x8d\x4e\xf2\x80\xba"
- "\xe6\xba\xb8\x46\x9f\xcd\xce\x0b\x9a\x3d\x9d\xd4\x3d\x04\x53\x5b"
- "\x8d\x3e\xfb\x91\x8e\x35\x3a\xe1\x10\xf3\x9c\xa2\x1a\x7d\xf6\x1a"
- "\x5b\x8d\x1e\xbd\x5d\x58\xa3\xcf\xb5\x18\xa7\x39\xe7\x26\x5f\xa3"
- "\xcf\x3e\xd5\x33\x34\xba\x28\xb7\x54\x7c\x8d\x3e\x27\x5b\xba\x46"
- "\x9f\x73\x5a\x9a\x46\xc7\x9c\x13\xd2\xe8\x73\xbd\xac\x39\xc7\xd7"
- "\xe8\x73\x83\x85\x35\xfa\xdc\x89\x7c\x8d\x8e\xf3\x17\xd2\xe8\x73"
- "\x97\xf1\xf2\xb7\xd1\xe8\x73\x33\xf9\x1a\x9d\xa4\xe3\x34\x7a\x4c"
- "\x08\xdb\xa6\x8d\x97\xae\xd1\x63\xbc\xc4\x35\x7a\xcc\x20\xbe\x46"
- "\x9f\x5b\x47\xb4\x78\x4c\x18\xd1\xe8\x31\x88\x1c\x8f\x0e\xb5\x3c"
- "\xce\x69\x74\x72\x9c\xd3\xe8\x31\xd3\xee\xce\xe1\xec\x8e\x1a\x7d"
- "\xde\x75\x79\x1a\x7d\x5e\x9d\x7c\x9d\xb8\xb0\x98\xd3\x89\x0b\x8b"
- "\xc5\x75\xe2\xfc\x53\xf6\x75\xe2\xab\x6e\x9c\x4e\x8c\x5b\x48\xea"
- "\xea\xb8\x08\x52\x57\xc7\x79\x48\xd7\x89\xb1\x9b\xf8\x3a\xf1\x15"
- "\xaf\xbb\x3a\x51\xae\x4e\x8c\x89\xe7\x74\x62\xec\x54\x79\x3a\x31"
- "\x36\x8a\xaf\x13\x17\xd9\xee\x95\x45\xc5\x1e\x73\x5c\x27\xc6\x5e"
- "\x90\xa7\x13\x63\xab\x1c\xd3\x89\x71\x4f\x0a\xeb\xc4\xf9\x25\xe2"
- "\x3a\x91\x9c\xb3\x6d\xdf\x17\x5c\xe0\xda\xf7\x05\xfb\xba\xbf\x4e"
- "\x5c\x10\x2e\xdc\x96\x2f\x98\x4a\x74\x62\x9c\xa6\xf3\x75\x62\x9c"
- "\x46\x58\x27\x2e\x60\xd7\x3f\x8b\x1b\x6b\xab\x13\xe1\x1a\x41\x9d"
- "\xb8\x80\xed\xff\x8d\xd3\xf0\x75\x22\xc9\x03\xea\x1a\x1f\x71\x9d"
- "\xf8\xea\x11\x52\xf7\xbc\xca\x7e\x47\x22\x98\xda\xea\xc4\x57\xa7"
- "\x77\xac\x13\x09\x87\x98\xe7\x14\xd5\x89\xaf\xee\xb5\xd5\x89\xf3"
- "\x8b\x85\x75\xe2\xc2\x35\x1c\x8f\x16\x0e\xe2\xeb\xc4\x57\xaf\xf6"
- "\x0c\x9d\x28\xca\xad\x70\xbe\x4e\x8c\x3f\x2e\x5d\x27\xc6\x5f\x97"
- "\xa6\x13\x31\xe7\x84\x74\xe2\xc2\x27\xad\x39\xc7\xd7\x89\x0b\x5f"
- "\x12\xd6\x89\x0b\x17\xf3\x75\x22\xce\x5f\x48\x27\x2e\xdc\xc1\xcb"
- "\xdf\x46\x27\x2e\x3c\xc6\xd7\x89\x24\x1d\xa7\x13\x17\x91\x3d\xb0"
- "\xa8\xf9\x0b\xa5\xeb\xc4\x45\x4f\x8a\xeb\xc4\x45\xfc\xfd\xaf\xa8"
- "\x45\x64\xff\x2b\x6a\x51\x02\xd1\x89\x8b\xc8\xfe\x57\xd4\xfc\x78"
- "\xcb\xe3\x9c\x4e\x24\xc7\x39\x9d\xb8\x28\xd9\xb9\xf9\x9d\xcb\x47"
- "\x73\xda\x62\xf9\x68\x71\x6d\xf1\xda\x10\xfb\xda\x62\x69\x32\xa7"
- "\x2d\x16\x5f\x24\xe5\x7b\xf1\x29\x52\xbe\x17\x33\xe3\x93\xd6\x9d"
- "\x05\x6d\xf1\x40\x74\xe1\xe1\x1b\x85\x8c\xb6\xf8\x68\x49\x33\x05"
- "\x7a\xcf\xd5\x84\xb5\x05\xe8\xba\x8c\xd5\x58\x5b\xd4\xb0\xf3\x3b"
- "\x13\x5a\xce\x26\x59\x6a\x8b\xd7\x96\x31\x73\x3d\xb1\xbe\x68\x68"
- "\x66\xd2\xe1\xf3\x42\x73\x3f\x4f\x2e\x61\xe7\x7e\x42\xde\x96\x73"
- "\x3e\x99\x79\xa0\x37\x40\x7b\xcc\x07\x3c\x2c\xb4\xc7\xdd\xb9\x9f"
- "\xb8\xad\x4f\x38\x2d\x4f\xd7\x26\x94\xf0\x35\xc7\xf2\x1f\x6d\x35"
- "\xc7\xe2\x91\x8e\x6b\x8e\xc5\x11\xf2\x34\xc7\xe2\xc9\x8e\x69\x8e"
- "\xc5\x87\x84\x35\xc7\x6b\x2a\xcc\x4f\x61\xcd\x41\xce\xd9\xb6\x15"
- "\x4b\x23\xb8\xb6\x62\xe9\xa0\xee\xaf\x39\x96\x9c\x10\x6e\x17\x96"
- "\x9c\x26\x9a\x63\xf1\xc1\xce\xd7\x1c\x8b\x0f\x0a\x6b\x8e\xa5\x6c"
- "\xfd\xbf\xb8\xd0\x56\x73\xc0\x35\x82\x9a\x63\x29\xfb\xfd\x6f\xf1"
- "\x41\xbe\xe6\x20\x79\x40\x1d\xb4\x59\x5c\x73\x24\xfa\x93\x3a\x69"
- "\x69\x23\xa9\x93\x08\xa6\xb6\x9a\x63\xe9\xd9\x8e\x35\x07\xe1\x10"
- "\xf3\x9c\xa2\x9a\x23\xd1\xc7\x56\x73\xbc\x36\x58\x58\x73\x2c\xb3"
- "\x18\xa7\xbd\x2c\x93\xaf\x39\x12\x67\xf7\x0c\xcd\x21\xca\xad\x13"
- "\x7c\xcd\xb1\x2c\x58\xba\xe6\x58\x36\x4f\x9a\xe6\xc0\x9c\x13\xd2"
- "\x1c\xcb\x0e\x59\x73\x8e\xaf\x39\x96\x9d\x11\xd6\x1c\xcb\x7e\xe4"
- "\x6b\x0e\x9c\xbf\x90\xe6\x58\xee\xc1\xcb\xdf\x46\x73\x2c\x1f\xc9"
- "\xd7\x1c\x24\x1d\xa7\x39\x96\x97\xb1\xbe\xed\xb4\x74\xcd\xb1\xfc"
- "\x90\xb8\xe6\x58\x7e\x8c\xaf\x39\x96\xa7\x13\x6d\xb1\x5c\x47\x34"
- "\xc7\xf2\x3c\x56\x8b\x94\x58\x1e\xe7\x34\x07\x39\xce\x69\x8e\xe5"
- "\x7a\x09\x7d\x53\x05\x52\xe6\x7e\x1e\xba\xcd\xef\x9b\x32\xf7\x4b"
- "\x19\xd4\x43\x72\xda\xfb\xa6\xa0\xad\x17\xdb\x13\x1d\xf7\x4d\xe1"
- "\xb6\x9b\xeb\x9b\xba\xc8\xd4\x55\x5c\xdf\x94\x8e\xe9\x9b\xc2\xfd"
- "\x52\xe0\xd9\xdb\xfb\xa5\x4c\xaf\xdb\xce\xfb\x3c\x64\x92\xde\x2f"
- "\x35\x67\x99\x12\xed\x62\xda\xef\x93\xd5\xa4\x5f\xaa\xaa\xbd\x5f"
- "\x0a\xb7\xdb\xc6\x26\xdb\x7e\x29\xdc\x5e\x73\xfd\x52\xdf\xcb\xec"
- "\x97\x5a\xb9\x49\x5e\xfb\xbd\xb2\x1b\xcc\x7f\xeb\x89\xf3\x3e\x57"
- "\xb8\x72\xdf\x8e\x57\xcb\x9c\xff\xb6\xda\xee\xfc\xb7\xbb\xe3\x9a"
- "\xc5\x62\xbf\xb2\x8c\x8b\xfd\xeb\xeb\xe4\xc5\xfe\xf5\xe4\x5f\x3f"
- "\xf6\x3d\x71\xcc\xc4\xea\x70\x2e\xf6\x49\x32\xd7\x7f\x4b\x6a\x96"
- "\xdf\x17\x9e\xaa\xe7\xfc\x6a\xaa\xde\xd2\xaf\x96\x86\x59\xfa\xd5"
- "\x35\x67\xed\xfb\xd5\x14\x0d\xe7\x57\x93\x77\x10\x6d\x98\xbc\x8e"
- "\x68\xc3\x64\x66\x4f\xb2\x75\xe3\x11\xe3\x53\x0d\xd8\xb3\x2e\x6a"
- "\xa6\x0e\x5f\x2b\xa6\x0c\x1b\x88\x57\xad\x30\x94\xa1\xb3\xfa\x66"
- "\xf4\xf6\x6a\xe4\xba\xf9\x06\x72\xfd\x5b\x7d\x33\xe5\x99\x80\xdc"
- "\xa0\x9d\x00\x2d\x55\x06\xda\x22\x1f\x25\xa6\x60\x1f\xfb\xc6\xb1"
- "\x8a\x44\xbd\x85\x8f\x5d\x3b\x86\xf3\xb0\x90\x2e\xb1\x19\x7d\xbe"
- "\xa8\x98\xc2\x5e\xb5\x2d\x37\x62\x4f\x5b\xf0\x10\x2d\xb3\x66\x91"
- "\x65\x7f\x39\xdc\x5b\x35\x87\xdf\x5f\xde\x9a\x1b\x51\xd0\x72\x68"
- "\x48\x0e\xb3\x1e\xa2\x3f\xd7\x6f\xee\x68\x7f\xf9\x7b\xad\xc8\xdb"
- "\xbc\x1e\x22\x6e\x17\x7b\x5e\x7f\xf9\xeb\x25\x5c\x7f\xf9\x1b\x69"
- "\xf2\xfa\xcb\xdf\x48\xe5\x7b\xd7\xb4\x7c\x5b\xef\xfa\xc6\x65\xc7"
- "\xbd\x6b\xb2\xcc\xf9\xff\xc9\x6e\x8e\x79\xd7\xe4\x85\xd6\xde\x75"
- "\x7f\x0a\xf6\xae\x6b\x2a\x31\x57\x85\xbd\x2b\x39\x67\xeb\x39\x52"
- "\xfa\x72\x9e\x63\xdd\x77\xdd\xdf\xbb\xae\x4b\x12\xf6\x17\xeb\xd2"
- "\x88\x77\x4d\x8e\xef\x7c\xef\x9a\x1c\x2f\xec\x5d\xd7\x35\x12\x9d"
- "\x9f\x1c\x6f\xf6\xa1\x9c\x77\x85\x6b\x04\xbd\x6b\xca\x48\xeb\x6b"
- "\x88\x77\x4d\x4e\x20\xde\x35\x65\xa2\xb8\x77\x4d\x61\xd7\x4b\x4b"
- "\x39\x42\xea\x27\x82\xa9\xad\x77\x4d\xd9\xdc\xb1\x77\x25\x1c\x62"
- "\x9e\x53\xd4\xbb\xa6\x9c\xb3\xf5\xae\x6b\xca\x84\xbd\x6b\xea\x01"
- "\x8e\x47\xa9\x93\xf8\xde\x75\xfd\xa0\x9e\xe1\x5d\x45\xb9\x95\xc4"
- "\xf7\xae\xeb\xaf\x4a\xf7\xae\xa9\x43\xa4\x79\x57\xcc\x39\x21\xef"
- "\x9a\xba\x90\xe5\x4f\x82\xb0\x77\x4d\xdd\x24\xec\x5d\x53\xf3\xf9"
- "\xde\x15\xe7\x2f\xe4\x5d\x53\xcf\xf0\xf2\xb7\xf1\xae\xa9\x97\xf9"
- "\xde\x95\xa4\xe3\xbc\x6b\x5a\x3a\xa9\x43\xd7\xac\x92\xee\x5d\xd3"
- "\x16\x8a\x7b\xd7\xb4\x65\x7c\xef\x9a\x16\x46\x3c\x6a\x5a\x1e\xf1"
- "\xae\x69\xd1\xe4\xf8\x9a\x95\x96\xc7\x39\xef\x4a\x8e\x73\xde\x35"
- "\xed\xa0\x04\xef\xba\xbf\x93\xbc\xeb\xf6\x9e\xe5\x5d\x3f\xcf\xeb"
- "\x5a\xef\xfa\xe6\x78\x79\xde\xf5\xcd\x50\x07\x35\x7c\x41\x07\x1a"
- "\x3e\xe7\xff\x2f\x0d\x9f\x56\xcc\x69\xf8\x8d\x27\xe5\x69\x96\x8d"
- "\x27\x7e\xed\xd8\xf7\xbc\xb8\xbf\x99\xce\xc5\xfd\xad\x31\xf2\xe2"
- "\xfe\xd6\xe8\xbb\xbe\x55\x4e\xec\x37\x59\xf4\xd7\xfc\x59\xe6\xf8"
- "\xe7\x3f\x17\xca\xf7\xad\x5b\xcb\x38\xdf\xba\xb5\xcc\xd2\xb7\x7e"
- "\xc5\xfb\xce\x9a\xbe\xc9\xbe\x6f\xcd\xf4\xe6\x7c\xeb\xdb\xab\x88"
- "\x2e\x7c\x9b\x1d\x6f\xfb\x36\xa3\xb7\x92\x8f\x11\xdf\x7a\x1b\xfb"
- "\xd6\x2b\xe0\x5b\x17\xc4\x50\x06\x76\x0d\x7e\x3c\x2e\xeb\x2c\x78"
- "\x4f\xec\x55\x2b\x92\xe0\xdf\x2b\xf5\xe8\xed\xe5\xc8\x75\x0b\x78"
- "\xce\x03\xd0\x7e\x1d\x58\xad\xa7\xd2\x17\x41\xdd\x5f\x75\x08\x79"
- "\xc6\x83\x9f\xad\xc7\x7e\xb6\x04\xbc\xea\x26\xd6\xcf\x6e\xc9\xae"
- "\x58\x69\xe9\x67\x37\xf7\x62\xfc\xac\x9e\x8c\xf9\xaa\x58\x09\x7e"
- "\x16\xee\x87\xd7\xf4\xb7\xf4\xb3\x2d\xe0\x57\x5b\xc1\xaf\x6a\xaf"
- "\x59\x79\xdb\x05\xb6\xde\xb6\xc5\x27\x62\x7f\x73\xf0\x90\xed\xd8"
- "\xdb\xde\xde\xf7\xff\xa3\xb7\x7d\x2b\x99\xf3\xb6\x5b\x66\xcb\xf3"
- "\xb6\x5b\x66\xf1\xbd\xad\x76\x8d\xad\xb7\xdd\x72\xca\x71\x6f\xbb"
- "\xe5\xb2\xbc\x32\xb3\xa5\xc6\x31\x6f\xfb\xf6\x44\x6b\x6f\xfb\x01"
- "\xf3\x5d\x36\x3d\x1d\xf3\x59\xd8\xdb\x92\x73\xb6\x9e\x24\xe3\x32"
- "\xe7\x49\x32\x8e\x74\x7f\x6f\x9b\x31\x4d\xd8\x7f\x64\xcc\x26\xde"
- "\xf6\xed\xb0\xce\xf7\xb6\x6f\x87\x09\x7b\xdb\x0c\x76\xfc\xff\xdb"
- "\x61\xb6\xde\x16\xae\x11\xf4\xb6\x99\xbd\xac\xaf\x21\xde\xf6\xed"
- "\x70\xe2\x6d\x33\x87\x89\x7b\xdb\xcc\x93\xa4\x0e\xcb\xcc\x24\x75"
- "\x18\xc1\xd4\xd6\xdb\x66\xc6\x75\xec\x6d\x09\x87\x98\xe7\x14\xf5"
- "\xb6\x99\x87\x6c\xbd\x6d\xfa\x46\x61\x6f\xbb\x75\x13\xc7\xa3\xad"
- "\xfe\x7c\x6f\x9b\xd9\xd8\x33\xbc\xad\x28\xb7\xa6\xf1\xbd\x6d\xd6"
- "\x69\xe9\xde\x36\xab\x45\x9a\xb7\xc5\x9c\x13\xf2\xb6\x5b\x27\xb2"
- "\xfc\x09\x17\xf6\xb6\x5b\xe7\x09\x7b\xdb\xad\x6b\xf8\xde\x16\xe7"
- "\x2f\xe4\x6d\xb7\xee\xe3\xe5\x6f\xe3\x6d\xb7\x9e\xe2\x7b\x5b\x92"
- "\x8e\xf3\xb6\xda\x58\x52\x87\xa6\x07\x4b\xf7\xb6\xda\x89\xe2\xde"
- "\x56\x1b\xc1\xf7\xb6\x5a\x15\xf1\xb0\xda\x24\xe2\x6d\xb5\xa3\xc9"
- "\xf1\x74\xb5\xe5\x71\xce\xdb\x92\xe3\x9c\xb7\xd5\xa6\x4b\xfb\x2e"
- "\xeb\xd4\xba\x47\x39\x5d\x3f\x67\xa0\xb3\xd6\x3d\x32\x7f\x9b\xed"
- "\xaa\x39\x03\xef\x0c\x93\xe7\x6f\xdf\x51\xdd\xf5\x58\x52\x75\xbe"
- "\x36\x8f\xd3\xf9\xef\xee\x90\xa7\x59\xde\xdd\x7e\xd7\x63\xc9\x89"
- "\xfd\x3b\xf1\x5c\xec\x73\x7d\xe4\xc5\x3e\xd7\x5b\xbe\xc7\xca\x77"
- "\xe7\x3c\x56\xbe\xbb\xf8\xb7\xc1\xdc\xab\xf6\x3d\xd6\xce\x69\x9c"
- "\xc7\xda\x7e\x8c\xe8\x93\xed\x3b\x88\x3e\xd9\x3e\xbd\xf3\xbe\x0d"
- "\xfe\xe5\x1c\xff\xdb\xe0\xb6\xa9\x77\xbf\x0d\x76\x86\x7f\x7a\x57"
- "\xc7\xf9\xa7\xbf\xe4\xcb\xf3\x4f\x7f\xc9\xe3\xfb\xa7\xfc\xe3\xb6"
- "\xfe\x69\xbb\x8b\xe3\xfe\x69\xbb\xbf\xbc\xf2\xb0\x7d\xb8\x63\xfe"
- "\x69\xfb\x26\xe1\x6f\x83\xb9\x75\xe2\xdf\x06\xc9\x39\x5b\xdd\xbb"
- "\xd3\x9f\xd3\xbd\x3b\x6e\x76\x7f\xff\xb4\x23\x47\x58\xe3\xee\xc8"
- "\x27\xfe\x69\xfb\xc6\xce\xf7\x4f\xdb\x37\x0a\xfb\xa7\x9d\xec\xfc"
- "\xd7\xed\x1b\x6d\xfd\x13\x5c\x23\xe8\x9f\x76\x4e\xb4\xbe\x86\xf8"
- "\xa7\xed\xe9\xc4\x3f\xed\x9c\x27\xee\x9f\x76\x1a\x49\xfd\xb4\xf3"
- "\x2c\xa9\x9f\x08\xa6\xb6\xfe\x69\xe7\xbe\x8e\xfd\x13\xe1\x10\xf3"
- "\x9c\xa2\xfe\x69\xe7\x75\x5b\xff\x94\x5b\x2b\xec\x9f\xf2\x4e\x73"
- "\x3c\xca\x8b\xe3\xfb\xa7\xf7\xc6\xf4\x0c\xff\x24\xca\xad\x1c\xbe"
- "\x7f\xca\xeb\x25\xdd\x3f\xe5\x3d\x29\xcd\x3f\x61\xce\x09\xf9\xa7"
- "\xbc\x4d\x2c\x7f\xd2\x85\xfd\x53\xde\x5e\x61\xff\x94\x77\x9c\xef"
- "\x9f\x70\xfe\x42\xfe\x29\xef\x32\x2f\x7f\x1b\xff\x94\xef\xc2\xf7"
- "\x4f\x24\x1d\xe7\x9f\xf2\x0b\x48\x1d\x9a\x9b\x2d\xdd\x3f\xe5\x6f"
- "\x12\xf7\x4f\xf9\x99\x7c\xff\x94\x1f\x43\x7c\x52\x7e\x11\xf1\x4f"
- "\xf9\x2b\xc9\xf1\x5c\xad\xe5\x71\xce\x3f\x91\xe3\x9c\x7f\xca\x2f"
- "\x95\xe6\x9f\x1c\x5f\x17\xe9\xd7\x1f\xd7\xaa\xea\xa1\xe3\x5a\x77"
- "\xcf\x96\xe7\x9d\x76\xcf\xba\xab\xe1\xe5\x68\xf8\xfc\x6a\x4e\xc3"
- "\xef\x91\x39\xff\x77\x4f\x95\x7c\x0d\xbf\xbf\x92\xd3\xf0\xfb\x2b"
- "\xc5\x35\xfc\xde\x43\xf6\x35\xfc\x07\xbe\x9c\x86\x2f\x58\x43\xda"
- "\xc8\x82\xd9\xa4\x8d\x2c\x18\xd2\x79\x1a\xfe\xfd\x5c\xbe\x86\xff"
- "\xab\xcf\x5d\x0d\xdf\x19\x1a\x7e\xb7\xc5\x7e\xc7\xef\xcf\x93\xa7"
- "\xe1\xdf\x8f\xe1\x6b\xf8\x03\xeb\x6c\x35\xfc\xfb\xa7\x1d\xd7\xf0"
- "\xef\x5f\x95\x57\x1e\xde\xaf\x75\x4c\xc3\x17\x4c\x12\xd6\xf0\x7b"
- "\x0b\xc5\x35\x3c\x39\x67\xab\xbd\xf6\x5d\xe5\xb4\xd7\xbe\x63\xdd"
- "\x5f\xc3\xef\x8b\x16\xd6\x59\xfb\xe6\x11\x0d\x5f\x10\xde\xf9\x1a"
- "\xbe\x20\x5c\x58\xc3\xef\xfb\x8e\xe8\x9d\x82\x70\x5b\x0d\x0f\xd7"
- "\x08\x6a\xf8\x0f\xfa\x5a\x5f\x43\x34\x7c\xc1\x64\xa2\xe1\x3f\xf0"
- "\x17\xd7\xf0\x1f\x9c\x22\xf5\xd3\x07\xd9\xa4\x7e\x22\x98\xda\x6a"
- "\xf8\x0f\x16\x76\xac\xe1\x09\x87\x98\xe7\x14\xd5\xf0\x1f\x1c\xb1"
- "\xd5\xf0\x7b\x0f\x0a\x6b\xf8\xfd\x9b\x39\x1e\xed\x1f\xc9\xd7\xf0"
- "\x1f\xb4\xf4\x0c\x0d\x2f\xca\xad\x68\xbe\x86\xff\x3f\x67\xa4\x6b"
- "\xf8\xff\x63\x94\xa6\xe1\x31\xe7\x84\x34\xfc\xfe\x49\x2c\x7f\x26"
- "\x0b\x6b\xf8\xfd\x71\xc2\x1a\x7e\xff\x3a\xbe\x86\xc7\xf9\x0b\x69"
- "\xf8\xfd\x07\x78\xf9\xdb\x68\xf8\xfd\xa7\xf9\x1a\x9e\xa4\xe3\x34"
- "\xfc\x81\x78\x52\x87\xee\x7d\x49\xba\x86\x3f\x30\x49\x5c\xc3\x1f"
- "\x98\xca\xd7\xf0\x07\x86\x13\xad\x7e\x20\x99\x68\xf8\x03\x1a\x72"
- "\x7c\xef\x34\xcb\xe3\x9c\x86\x27\xc7\x39\x0d\x7f\x20\xe3\xee\xba"
- "\x49\xdd\x71\xdd\xa4\x0f\xfd\xe5\xe9\xf8\x0f\x87\xcb\xd7\x92\x1f"
- "\x37\x73\x5a\xf2\xe3\x66\x4b\x2d\xc9\x5f\xdb\xe0\xc3\x16\xfb\x5a"
- "\xb2\x30\x94\xd3\x92\x87\xf7\x92\xba\xfa\xf0\x26\x52\x57\x1f\x66"
- "\xbe\xef\x49\x5b\x37\xe9\xd0\x49\xfe\xba\x49\x07\x27\xdd\x5d\x37"
- "\x49\xae\x4e\x3c\xb0\x87\xd3\x89\x87\x36\xcb\xd3\x89\x87\xd2\xf9"
- "\x3a\xf1\x93\x7d\xb6\x3a\xf1\xd0\x75\xc7\x75\xe2\x61\x2f\x79\x3a"
- "\xf1\xb0\xd2\x31\x9d\x78\x78\x99\xf0\x1a\x06\x1f\x1a\xc4\xd7\x4d"
- "\x22\xe7\x6c\xdb\xf7\x42\x2f\xae\x7d\xff\xe8\x62\xf7\xd7\x89\x1f"
- "\xa5\x0a\xb7\xe5\x1f\x6d\x26\x3a\xf1\x70\x62\xe7\xeb\xc4\xc3\x89"
- "\xc2\x3a\xf1\x23\x23\x69\x53\x0f\xaf\xb4\x5d\xc3\x00\xae\x11\xd4"
- "\x89\x85\x8f\xb0\xd7\x24\xf2\x75\x22\xc9\x03\xea\x9a\x08\x71\x9d"
- "\x58\x78\x95\xd4\x3d\x85\xc7\x49\xdd\x43\x30\xb5\xd5\x89\x85\xd9"
- "\x1d\xeb\x44\xc2\x21\xe6\x39\x45\x75\x62\xe1\x05\x5b\x9d\xf8\x61"
- "\xb3\xb0\x4e\xfc\xd8\x62\x9d\xd6\x8f\xa7\xf2\x75\xe2\x91\x61\x3d"
- "\x43\x27\x8a\x72\x2b\x95\xaf\x13\x8f\xdc\x94\xae\x13\x3f\xf6\x97"
- "\xa6\x13\x31\xe7\x84\x74\xe2\xc7\xcb\xac\x39\xc7\xd7\x89\x1f\x67"
- "\x0a\xeb\xc4\x8f\xf7\xf1\x75\x22\xce\x5f\x48\x27\x7e\x7c\x8e\x97"
- "\xbf\x8d\x4e\xfc\xf8\x3a\x5f\x27\x92\x74\x9c\x4e\xfc\x44\x4b\xea"
- "\xd0\x0f\xf7\x4a\xd7\x89\x9f\x2c\x13\xd7\x89\x9f\xac\xe1\xeb\xc4"
- "\x4f\x26\x13\x3d\xf8\x49\x01\xd1\x89\x9f\xc4\x90\xe3\x1f\xee\xb1"
- "\x3c\xce\xe9\x44\x72\x9c\xd3\x89\x9f\x1c\x95\x36\x0f\xa4\x53\xfa"
- "\x7a\xbb\x68\x1e\x48\x67\xf5\xf5\x76\xf5\x3c\x90\x63\x32\xd7\xbf"
- "\x3f\xe6\xe8\xfa\xf7\x77\xc7\xc9\xb4\xf7\xf3\x7e\x52\xca\xf5\xf3"
- "\xfe\xcf\x29\x79\x7a\xe5\x7f\x8a\xe5\x6b\xf3\xcf\x2c\xf6\xef\xfd"
- "\x8c\xb7\x7f\x2f\x7f\x3c\xfc\xdf\x73\xed\x6b\xf3\x13\x16\xfb\xf7"
- "\x7e\xca\xee\xdf\xfb\x29\xbb\x7f\xef\xa7\xc3\xe4\x8c\x87\xdf\x52"
- "\x8f\x5c\xdf\xb6\x1e\x0f\x7f\xfe\x24\x19\x0f\xbf\xdc\x7a\x3c\xfc"
- "\xf1\x1d\xfc\xf1\xf0\x45\x3e\x62\xe3\xe1\x71\xbf\x6f\xdb\xa1\x21"
- "\x39\x78\x2c\xbc\xe0\x38\xf8\x19\x9d\x3b\x0e\x1e\x73\xf3\xbd\xb5"
- "\x44\xdb\xef\xec\x91\xda\xfe\x98\xc5\xda\xf9\xc7\x65\xee\xff\x7b"
- "\xdc\x6a\xff\xdf\xcf\x05\xf6\xff\x3d\x2e\x61\xff\xdf\xe3\x32\xf7"
- "\xff\x3d\xee\xe0\xfe\xbf\x9f\xda\xec\xff\x4b\xc6\xc1\xff\x7d\xbb"
- "\xf8\x38\x78\x72\xce\x56\x93\xfd\xc3\x62\x5d\xa9\x7f\xf4\x80\xfd"
- "\x7f\xff\x21\xb2\x47\xeb\x3f\xd8\xfd\x7f\x3f\xbd\x03\xfb\xff\x7e"
- "\x2a\xb2\xff\xef\x3f\xd8\xfd\x7f\x3f\x6d\xdf\xcb\x97\xd3\xf6\x9f"
- "\x8a\xec\xff\x7b\xc2\xc3\xfa\x1a\xa2\xed\x3f\x65\xf7\xff\x3d\x61"
- "\x67\xff\xdf\x13\xec\xfe\xbf\x27\xd8\xfd\x7f\x09\xa6\xb6\xda\xfe"
- "\x84\x03\xfb\xff\x7e\xca\xee\xff\xfb\xa9\x9d\xfd\x7f\x4f\x08\xec"
- "\xff\xfb\xf7\x1c\x61\x6d\xff\x99\xc5\xfe\xbf\x9f\x59\xed\xff\x7b"
- "\xa2\x87\xec\xff\x2b\xca\x2d\xab\xfd\x7f\x4f\xca\xd8\xff\xf7\x33"
- "\x89\xfb\xff\x7e\x2a\xb2\xff\xef\x67\xec\xfe\xbf\x9f\x8a\xec\xff"
- "\xfb\x99\xc8\xfe\xbf\x9f\x59\xed\xff\xfb\xa9\xc8\xfe\xbf\x9f\x1d"
- "\xe2\xe5\x6f\xa3\xed\x3f\xb3\xda\xff\xf7\x53\xab\xfd\x7f\x3f\x67"
- "\xf7\xff\xfd\xfb\x38\xe9\xda\xfe\x73\x3b\xfb\xff\x7e\x6e\xb5\xff"
- "\xef\xe7\xec\xfe\xbf\x9f\xb3\xfb\xff\x7e\xce\xee\xff\xfb\xf7\xb1"
- "\x96\xc7\x39\x6d\x4f\x8e\x73\xda\xfe\x73\x29\xfb\xff\x16\x48\xe9"
- "\x03\xfe\xf5\xc7\x71\x28\x7b\xe8\x38\x8e\x53\x32\xfb\x7f\x4f\x39"
- "\xd1\xff\x7b\xc6\x9b\xd3\x98\x67\xbc\xc5\xc7\x12\x9c\xea\xa0\xff"
- "\xf7\xab\x59\x9c\xc6\x2c\x61\xe7\x2b\x95\xec\x25\xf5\x74\xc9\x3c"
- "\x47\xc7\x12\x6c\xb9\xcd\xea\x4a\xf3\x58\x82\xd5\xec\x58\x02\xd0"
- "\x96\x44\x4b\x7e\x79\x81\x3f\x96\xe0\x8b\x79\x62\x63\x09\x04\xc7"
- "\x10\x58\xe9\x47\xb3\xd6\x94\x3b\x86\xa0\xe7\xeb\xc7\xcf\x2d\xc6"
- "\x10\x7c\xb9\x4f\x9e\x7e\xfc\xb2\x80\xaf\x1f\xcf\x9c\xb2\xd5\x8f"
- "\x25\x7d\x1d\xd7\x8f\x25\xc1\xf2\xf4\x63\x89\xda\x31\xfd\x58\x92"
- "\x29\x3c\x86\xe0\x94\x41\x7c\x0c\x01\x39\x67\xdb\xee\x7f\x15\xcc"
- "\xb5\xfb\xa7\x5b\xba\xbf\x7e\x3c\x9d\x27\xdc\xc6\x9f\xde\x47\xf4"
- "\x63\x49\x46\xe7\xeb\xc7\x92\x0c\x61\xfd\xf8\xd5\x20\xd2\xd6\x96"
- "\x64\xd8\xea\x47\xb8\x46\x50\x3f\x7e\x15\x61\x7d\x0d\xd1\x8f\x25"
- "\x5a\xa2\x1f\xbf\x5a\x28\xae\x1f\xff\x6f\x2f\x52\x2f\x7d\xf5\x1d"
- "\xa9\x97\x08\xa6\xb6\xfa\xf1\xab\x43\x1d\xeb\x47\xc2\x21\xe6\x39"
- "\x45\xf5\xe3\x57\x8d\xb6\xfa\xf1\x94\x48\xdf\x70\xe9\x59\x8e\x47"
- "\xa5\x8b\xf9\xfa\xf1\xff\x8e\xeb\x19\xfa\x51\x94\x5b\x79\x7c\xfd"
- "\x58\xea\x21\x5d\x3f\x96\x8e\x97\xa6\x1f\x31\xe7\x84\xf4\x63\x69"
- "\x26\xcb\x1f\xad\xb0\x7e\x2c\x3d\x20\xac\x1f\x4b\x4f\xf1\xf5\x23"
- "\xce\x5f\x48\x3f\x96\x5e\xe7\xe5\x6f\xa3\x1f\xcf\xf4\xe5\xeb\x47"
- "\x92\x8e\xd3\x8f\x67\x0e\x92\x3a\xf4\x94\x8c\xbe\xe1\x33\x99\xe2"
- "\xfa\xf1\x4c\x2e\x5f\x3f\x9e\x61\xd7\xce\x3f\x53\x4c\xf4\xe3\x99"
- "\x64\x72\xfc\xd4\x1e\xcb\xe3\x9c\x7e\x3c\x65\xd5\x37\x7c\xa6\xd2"
- "\x9e\x7e\xa4\xb5\xf5\xe9\x5a\xca\x54\x08\x3f\xdc\x96\x0e\x82\x76"
- "\xac\x18\xfe\x5d\x0a\xed\x91\x12\xfe\x5d\x29\xa6\x57\xf4\x5e\xf5"
- "\xe9\x26\xd0\x1e\x26\xb8\x4f\x85\xfe\x97\xe2\x62\x3f\x03\xdc\xfb"
- "\x6b\xb2\x67\x0b\xe4\xe9\x69\xe8\x13\x6e\xa2\xe3\xa1\x0d\x87\x7f"
- "\x27\xc1\x31\x48\xdf\x1f\xda\x3d\xd5\x6a\xd4\xff\x06\xf5\x75\xa2"
- "\x39\x1d\x3c\x73\xff\x4b\xd4\xd7\xc1\x38\x8f\xa6\x2d\x5f\x27\xc3"
- "\xfb\x54\x8b\x3e\x2b\xe4\x15\x79\x60\x28\x5a\x67\xa0\x7f\x2a\x5e"
- "\x52\x8f\x6a\xa8\xaf\x4f\x7b\xd6\xf5\x09\x87\x7a\x08\x61\xbd\x57"
- "\xe8\xa7\x77\xc5\x79\x16\x2f\x69\xc5\xe7\xf6\xe3\x73\x46\x78\xc6"
- "\x94\xc5\x88\xca\xaa\xef\xe3\x06\xba\xaa\xd7\xfa\x06\xba\x76\xa9"
- "\x01\x9e\x39\xc9\x80\x3e\x1f\x5a\xe5\xfa\xd1\xce\x2a\xa6\xed\x29"
- "\x6f\x30\x32\x79\xa8\x96\x30\xcf\x73\x66\x17\xa4\x17\x7a\x86\x4d"
- "\x87\x91\xba\xd7\x48\x5a\x27\xad\xbd\xfb\x66\xb0\x58\x1c\x3d\xd3"
- "\x86\xa2\xe2\x40\x88\x9d\x0a\x51\x42\xe7\x25\xde\xc7\xde\xfa\xb7"
- "\x6e\xef\x0e\xa4\x1b\xd6\xef\x40\xd4\x56\x53\x1f\xb7\x2f\xa1\x4e"
- "\xdc\xbd\x8d\xd6\x37\x6d\xf9\x46\xaf\x73\x39\x35\x0d\xc7\xfc\x4d"
- "\x38\xbf\x75\x20\xad\xbf\xb5\x01\xf3\xa6\xcc\xed\x14\xb4\xed\xd6"
- "\x58\x2c\x8f\x5d\x3c\x4f\xb5\x72\xe1\xe2\xb8\xa5\xab\x56\xaa\xfc"
- "\x63\xfb\xa1\x69\x4b\x97\xaa\x16\xcf\x5b\xb2\x46\x65\x79\xe6\xf7"
- "\xaa\xd8\x85\x2b\xe6\xcd\x4f\x88\x0b\x5e\xfc\x4a\x62\x3f\x78\x26"
- "\x64\xf1\x1c\xde\xf8\x59\x4c\x5b\xca\xbc\x77\xbd\x83\xd0\xbb\x03"
- "\x90\x2b\x7e\x2e\xb8\x5f\x92\xce\xd5\x3d\x0f\xdf\x2f\x6b\x1b\xdd"
- "\x40\x41\x9a\xf5\x50\xa7\x6d\x4d\xe9\x03\x69\xbf\xd9\xb8\x1b\x9e"
- "\x6b\x17\x3c\x37\x3c\x23\x3c\x73\x59\x81\xf9\x99\xcd\x9c\x58\x8f"
- "\x39\x91\x52\x0f\x1c\x2c\x3b\xed\xd9\xdc\xe7\x79\x9a\x8e\xc6\xef"
- "\xd7\x00\x65\xc5\xe5\x0a\x75\x76\x36\xe3\x01\xb2\xeb\xd3\xe1\x5a"
- "\x9d\x99\x63\xa6\x9c\xa7\x54\xf4\x3b\xf5\x51\xa0\x1d\x5d\x9a\xe8"
- "\xf8\xa7\x81\x9b\x70\xfd\xd9\xe0\x51\x08\xa5\xd2\x4d\xd1\xcc\xfe"
- "\x03\x74\x13\x70\x98\xf0\x14\xce\x95\xa3\x5b\x14\x7a\xa6\x69\xcb"
- "\xd9\xe1\x3a\xb4\xb8\x0e\xe7\xa1\x83\x63\x38\xe6\xa6\x3d\xd1\x7b"
- "\x5e\x0a\x40\xa9\x23\x52\x51\x6a\x13\xbe\xa6\xc0\x2f\xc9\x73\x25"
- "\x72\x89\x4c\xa2\x7f\x80\x7a\xc7\x85\x1e\x16\xbd\x87\xde\xe7\x97"
- "\xa4\xa3\xce\xba\x99\x72\x9f\x52\xc1\xfb\xd4\x41\x3e\x09\x3a\xd4"
- "\x56\x89\xf3\xd9\xba\x8d\x89\x7d\x1d\x7e\x77\x88\x0f\x78\x19\xba"
- "\x98\xde\xc0\x96\x21\xad\x67\x95\x49\x3b\x07\x55\xb8\xde\x46\x91"
- "\x06\xba\x8d\xce\xf6\xac\x2a\x6f\x68\x80\x3a\x2d\xf1\x15\xba\x5f"
- "\x99\xbf\xa7\x61\x61\xdc\xee\x01\x50\x16\xb3\xe7\x20\x3a\x7b\x84"
- "\xf7\x4b\x23\x91\x12\xf2\x2e\x35\xc7\x13\x62\xe9\x2a\x8d\x47\x67"
- "\x99\x35\x5d\x30\x1f\xe0\x79\x58\x3e\x94\xfb\x9e\x5a\x69\xcb\x87"
- "\xf6\xb2\xb9\x2d\x50\x6b\xa0\xa3\x9f\x6f\xcb\x09\x2c\xa5\xbd\x03"
- "\x8f\xa6\x5c\x46\xbd\x71\x6c\xcb\x41\xef\x67\xad\x46\xbe\x99\x73"
- "\x90\x6a\xee\x1a\x25\xd2\xe7\x06\x16\x7a\xa6\xa5\xba\x40\x4c\x28"
- "\xa8\x5f\x42\xa0\xce\x0c\x69\x1b\xf8\x94\x2a\x39\x0e\x51\x87\x2e"
- "\x15\x52\x58\x27\xe3\x71\x21\x10\xeb\x0b\xbb\xe0\x3a\xfa\x97\x68"
- "\x84\xf1\x60\xb0\xf8\x25\x1e\x45\x80\x6a\xc0\xdf\x38\xae\x50\x15"
- "\x1e\xf9\x90\xa7\xb4\xf7\x2a\x67\xf4\xaf\x11\xb0\x1a\x05\x38\x55"
- "\xd4\x18\x99\x3c\x19\xac\x12\x38\xac\x4e\xc2\x73\x70\x78\x95\xe7"
- "\x60\x5c\x85\xdf\x39\x48\x49\xde\x39\x28\x9c\xf6\x0e\x1a\x2d\xfe"
- "\xce\x41\x21\xe4\x9d\x7b\xd5\xdb\x7f\xe7\x8a\xb3\xf6\xdf\xb9\xd2"
- "\x45\xfa\x3b\x57\x6c\x97\xfe\xce\x15\xe9\x76\xde\x99\xc5\x39\x08"
- "\x70\x0e\xb2\x83\x73\x10\x8b\xf3\x3d\x97\xec\xbf\x73\xe5\xa9\x0e"
- "\xde\xb9\x51\xfa\x3b\x57\x66\x48\x7f\xe7\xca\x64\xf1\x77\x56\xb3"
- "\x38\xab\x01\x67\xb5\x1d\x9c\xd5\x2c\xce\x5e\xdf\xda\x7f\xe7\x73"
- "\xc7\xec\xbf\xf3\xb9\xab\xd2\xdf\xf9\x5c\xaa\xf4\x77\x3e\x97\x68"
- "\xe7\x9d\x59\x9c\xd5\x80\xb3\xda\x0e\xce\x6a\x16\xe7\xc7\xb7\xd8"
- "\x7f\xe7\x6f\x0f\xd8\x7f\xe7\x6f\x2f\x4a\x7f\xe7\x6f\x57\x4a\x7f"
- "\xe7\x6f\x63\xc5\xdf\x39\x98\xc5\x39\x18\x70\x0e\xb6\x83\x73\x30"
- "\x8b\xf3\xcc\x09\xf6\xdf\xf9\x7f\xf3\xed\xbf\xf3\xff\x9e\x93\xfe"
- "\xce\xff\x1b\x2f\xfd\x9d\xff\x37\x5a\xec\x9d\x5b\xa1\xde\x76\x87"
- "\x77\x69\xfb\x57\xf4\xf3\x46\xef\xc0\x13\xee\x35\x88\xca\xdb\x60"
- "\x8a\xf7\xac\x45\x7d\xe1\xdd\xe2\xe9\x6d\xe3\xf4\xf8\xaf\xc9\x3b"
- "\xb0\xa8\xd5\x3b\xb0\xb4\x65\x40\x7d\xd4\x1b\xb3\x51\x6f\xac\xc7"
- "\x37\x9b\x90\xaf\x29\x27\xf0\x68\xc6\x0b\x48\xb5\x5e\x8f\x94\xe5"
- "\x29\x3a\x94\x92\x48\xeb\xcb\xd1\x8f\xc8\xa3\x16\x7b\xcf\xef\x51"
- "\x59\x5d\x29\x5a\xb2\x9c\xa6\xaf\x50\xdf\x0d\xc1\xdf\x80\x41\x27"
- "\xa7\x6a\xff\x89\x54\x70\x8f\x90\x5d\xf0\xc3\xf9\x78\x4e\x86\xf6"
- "\x73\xdb\xb8\xfa\xdd\x29\xc8\xf7\xb3\x45\xb5\x08\x1f\xcf\x87\x9f"
- "\x71\xdb\x53\xaa\x94\xd9\x88\x3a\x5c\x5f\x45\x91\xb6\xf9\xfc\x55"
- "\xeb\xb6\x79\xf2\x3c\x88\xe5\x7c\x7c\xee\xbb\x31\x79\x2f\x48\x8d"
- "\xe5\xf9\xa3\xe6\xb6\x9b\x89\x65\xb5\x91\xb4\xf7\x56\x6d\xf7\x67"
- "\x70\x7f\x2e\x96\xe7\x0b\x70\x2c\xe9\x9c\xc0\xca\x8a\xda\x56\xec"
- "\x9b\x94\x57\x92\x10\x05\xc7\xa7\x95\x27\xd6\x23\xe1\x18\x07\x29"
- "\xb9\x18\x07\x8d\x75\xaf\xe9\x55\x2f\x1c\xe3\x20\x4d\xab\x77\x50"
- "\xb8\x6d\x8c\x83\x46\x3b\x16\xe3\x7f\xa6\x39\x1f\xe3\x7f\x46\x88"
- "\xc7\xf8\x9f\x3b\xa4\xc7\xf8\x9f\xbe\xd2\x63\xfc\x4f\x37\x12\xe3"
- "\xa0\x28\x7e\x8c\xbf\x2b\xb2\x13\x63\x0b\x1e\x07\x01\x8f\xef\xb9"
- "\x24\x12\x63\xe0\x71\x90\x00\x8f\x83\x1c\xe4\xf1\xbf\x2e\x3b\x1f"
- "\xe3\x7f\x1d\x11\x8f\xf1\xbf\x8c\xd2\x63\xfc\xaf\x64\xe9\x31\xfe"
- "\x57\x02\x1b\x63\x2b\x1e\xff\x6b\xb0\x78\x8c\xd5\x16\x3c\x56\x03"
- "\x8f\xbd\xbe\x15\x8e\xb1\x1a\x78\xac\x16\xe0\xb1\xda\x41\x1e\x5f"
- "\x98\xe4\x7c\x8c\x2f\xf8\x88\xc7\xf8\xc2\x3c\xe9\x31\xae\xd2\x49"
- "\x8f\x71\x55\x25\x89\xb1\xda\x8a\xc7\x55\xa9\x76\x62\x6c\xc1\x63"
- "\x35\xf0\xf8\xf1\x2d\x22\x31\x06\x1e\xab\x05\x78\xac\x76\x90\xc7"
- "\xdf\x1f\x72\x3e\xc6\xdf\xaf\x11\x8f\xf1\xf7\xa7\xa5\xc7\xf8\xfb"
- "\x30\xe9\x31\xfe\x7e\x34\x1b\x63\x2b\x1e\x5f\xa8\x11\x8f\x71\xb0"
- "\x05\x8f\x83\x81\xc7\x33\x27\x08\xc7\x38\x18\x78\x1c\x2c\xc0\xe3"
- "\x60\x07\x79\x5c\xed\xe5\x7c\x8c\xff\x7d\x51\x3c\xc6\xd5\x23\xa5"
- "\xc7\xf8\xdf\xfb\xa5\xc7\xf8\xdf\xdb\x49\x8c\x83\xad\x78\xfc\xef"
- "\x70\xb1\x18\xb7\x81\x07\xf4\x80\x18\x7b\xd4\x21\x2a\x1f\xc7\xb6"
- "\x8a\xc4\xd6\x38\x70\x9c\x3e\x9f\x32\xc5\xe3\x98\x30\x7d\x40\x3f"
- "\xfb\xf6\x37\xe6\x04\x9e\xa0\x29\x78\xa7\x14\xdc\xef\x5a\x9d\x6d"
- "\xd8\x80\xfa\xab\x52\x70\xff\xef\x7f\x98\xf1\x01\xaa\x94\xb7\x2e"
- "\xc2\xfd\x14\xb8\xdf\xcb\x90\x7d\x33\xc4\x08\x25\xfb\x0a\x75\xf1"
- "\x0c\xed\x3f\x58\x0b\x7e\xb3\x92\x7e\xcd\xd7\xbb\xa2\xae\x10\xe2"
- "\xf3\x35\x2a\xaf\xfa\x14\x99\x06\x8e\xab\x1f\x65\x40\x01\xf4\xcf"
- "\x01\xde\x65\x2b\x75\xc8\xf8\x8a\xaf\x7b\x45\x52\x29\xaa\x48\xfa"
- "\x18\x45\xd6\xd2\xb7\xe9\xff\x06\xb8\xb7\xf9\x84\x69\x8c\x3e\xe3"
- "\x2a\x8d\xb9\x11\x45\x06\x9f\xb0\x80\x43\xab\x75\x94\x7b\x33\x0a"
- "\x48\xa8\xa1\xe9\xac\xf9\xc8\x35\xeb\x12\x72\xdb\x3a\x1f\xb9\x6f"
- "\xbd\x84\x94\x65\x35\x55\xe8\xec\xb5\x52\x74\xb6\xfe\x02\x3a\x7b"
- "\x1b\x7e\xad\xf0\x33\xc1\x2f\xf5\x02\x60\x8d\x50\xc4\x75\x84\xf7"
- "\x6e\xd4\x07\x55\x23\xef\x32\x43\x15\xc2\xf3\x5f\x6f\x50\x17\xe3"
- "\xdc\x63\x90\x37\xfd\x5f\x5f\x44\xbf\xe2\x4b\xc1\x39\x57\x7c\xbc"
- "\xc2\xa0\x47\x65\x35\xcd\xf8\x7c\x18\x9c\x77\x5d\x5f\x03\xf9\x9b"
- "\x4a\xf1\xde\x8c\xfa\xb2\xd4\x33\xf0\x7e\x7b\x55\x34\xf6\xd0\x03"
- "\x03\xb5\x5a\x08\xb5\x89\xf6\x7d\x80\xf0\xe0\x3f\xeb\x76\x99\xa4"
- "\x62\x7d\x31\x87\x89\xf1\x6b\xbe\x03\x20\xce\x7e\xa6\xd7\xa2\x95"
- "\x53\x2e\xfc\x40\x97\x37\x54\x31\x7d\x09\xe5\x0d\x5f\xa3\x8a\x8d"
- "\x26\x14\xb9\x06\xa1\xc9\x46\x84\x70\x2c\x2a\x92\x6a\xd1\x94\x44"
- "\xe4\x89\xfb\x9f\x4d\x3f\x07\x0c\xa8\xa8\xd1\xa3\x75\x06\x78\xc6"
- "\x1b\xcd\xed\xcf\x58\xbe\xb1\x1c\xc1\x39\xbf\xf2\x78\x1d\x72\x4f"
- "\x44\x4a\x1c\x5f\x43\x4e\x60\xd1\x14\x28\x3f\x4b\x1a\x68\x1a\xc7"
- "\x16\xc7\x14\xc7\x17\xe7\x67\x8e\x79\x45\xac\x1e\xad\x6f\x46\xca"
- "\x8a\x14\xf8\x9b\x44\xeb\x2b\xd0\x4d\x04\xcf\x98\x44\x7b\xed\x55"
- "\x01\x2f\x1a\x30\x17\x74\x54\x75\x3a\xe0\x3f\x40\x98\x53\x41\xa3"
- "\x09\xa7\x7a\xd5\x77\xcc\xa9\xa0\xb1\x1c\xa7\xfe\x73\x99\xe3\x94"
- "\xee\x94\x38\xa7\x74\x43\x08\xa7\x82\xa2\xba\x27\xa7\x7e\x38\x6e"
- "\x9f\x53\x3f\x6c\x17\xe7\x54\x50\x38\x3d\x30\x48\xc9\xe7\x94\xee"
- "\x9c\x74\x4e\xfd\x50\xdb\x75\x9c\x0a\xd2\xc8\xe3\xd4\x0f\x65\x7c"
- "\x4e\xfd\xa7\xda\x0e\xa7\xd8\x7a\xea\x9e\x4b\x0e\x70\xca\xa2\x9e"
- "\xfa\xf1\x49\x8e\x53\xff\xf5\x11\xe7\xd4\xa5\x65\x2c\xa7\xba\x69"
- "\x3d\x75\xc9\xc3\x3e\xa7\x7e\xac\xb3\xc3\x29\xa8\xa7\x82\xac\xea"
- "\xa9\xff\xfa\x4b\xe7\xd4\xa5\xb1\x5d\xc8\x29\x99\xf5\xd4\x25\x15"
- "\x9f\x53\x3f\x86\x88\x73\x4a\xcd\xd6\x53\x5e\xdf\x76\xcc\x29\xb5"
- "\x45\x3d\xf5\xdf\x4c\x8e\x53\x97\x17\x8a\x73\xaa\xe6\x34\xe1\x94"
- "\xba\x9b\xd6\x53\x35\xf3\xec\x73\xaa\x26\x54\x9c\x53\x6a\xa8\xa7"
- "\xd4\x56\xf5\xd4\xe5\x35\xd2\x39\x55\xa3\xed\x3a\x4e\xa9\x65\xd6"
- "\x53\x35\x2b\xf9\x9c\xfa\xef\x46\x3b\x9c\x62\xeb\xa9\xc7\xb7\x38"
- "\xc0\x29\x8b\x7a\xea\xf2\x8f\x1c\xa7\x7e\x3a\x29\xce\xa9\x9f\x06"
- "\xb1\x9c\xea\xa6\xf5\xd4\x95\x63\xf6\x39\x75\x25\xc7\x0e\xa7\xa0"
- "\x9e\x52\x5b\xd5\x53\x3f\x9d\x95\xce\xa9\x2b\x35\x5d\xc8\x29\x99"
- "\xf5\xd4\x95\x52\x3e\xa7\x2e\x57\x89\x73\x2a\x98\xad\xa7\x66\x4e"
- "\xe8\x98\x53\xc1\x16\xf5\x54\xed\x18\x8e\x53\xd7\xbc\xc4\x39\x75"
- "\x75\x31\xe1\x54\x70\x37\xad\xa7\xae\xf6\xb5\xcf\xa9\xda\x5a\x71"
- "\x4e\x05\x43\x3d\x15\x6c\x55\x4f\x5d\x1b\x26\x9d\x53\x57\x35\x5d"
- "\xc7\xa9\x60\x99\xf5\xd4\xd5\xc1\x7c\x4e\xd5\xaa\xc5\x38\xd5\x8a"
- "\x7d\x9f\x0b\x70\x2a\x1e\x7c\x1f\x70\xc8\xb3\x92\x70\xaa\x0d\x38"
- "\xf5\x9e\x25\xa7\xfe\x6d\xed\xfb\xae\x6d\x36\xb5\x73\xaa\x2e\xd7"
- "\x9a\x53\x26\xe0\x54\x1b\xc3\xa9\x9f\x0f\x99\x7d\x5f\x45\xdd\x1e"
- "\xc0\xea\x1a\xaa\x88\x02\x3e\x6d\x63\xf9\xf4\x6f\xe0\x13\xbc\x8f"
- "\x09\xde\xb7\xac\xba\x0a\x45\xea\xc9\x7b\xb5\xc2\xfb\x9a\x2c\xb9"
- "\xd4\x5a\x4b\x61\x0e\x61\xee\x98\x79\x74\x76\x09\xf0\x67\xf9\x39"
- "\x74\x76\x35\xfc\xd6\xc2\x2f\x05\x7e\xe8\x1c\x2a\x03\xc5\x8b\xfb"
- "\xec\x39\xfe\x54\xb2\xfc\xf9\x79\x92\x7d\xfe\xfc\x1c\x20\xcd\xe3"
- "\xd5\xed\x93\xce\x9f\x9f\x93\xd8\xb1\x74\xca\xc8\xa9\x3f\xd0\x78"
- "\x0c\x2c\xe1\xc8\x35\x14\x69\x40\x9e\xf4\xcc\x80\x01\xee\xd1\x48"
- "\xf9\x86\x11\x51\x99\xf3\x91\x32\xf3\x7b\x78\x5f\x73\xd9\xb9\x84"
- "\xdc\xbf\x6e\xfe\x14\x95\xd5\x57\xa1\xb2\xdb\x67\x50\x99\x09\x7e"
- "\xd7\xe0\x07\xcf\x18\x19\x67\xf9\xbe\x7a\xf6\x7d\xeb\x9e\x84\xbc"
- "\x86\x8b\xbf\x6f\x9d\x2f\xf3\xbe\xb1\xf0\xbe\xad\xdc\xfb\x56\x00"
- "\x17\x01\x17\x3f\x13\xeb\x13\x23\xf5\xa8\xef\x52\x03\x4d\xb7\xb2"
- "\x1c\xc4\xb8\x7c\x7d\xbe\x19\x45\x26\x02\x56\xaf\x00\x07\x6b\xf6"
- "\xa3\xf5\xc9\xc0\xc1\xd6\x66\xfc\x5d\x5f\x5f\x91\xda\x02\x1c\xfc"
- "\x79\x16\x0d\x71\x6b\xc3\x1c\xfc\x37\xe6\xe0\xb5\x54\x93\x28\x07"
- "\xc1\x27\x32\x1c\x04\x9f\xd8\x21\x07\x2d\x7d\xe2\x75\x0f\x8e\x83"
- "\xbf\x0c\x12\xe7\xe0\x8d\x47\xcc\x3e\xf1\xd7\xe7\xe0\xf5\xb3\xf6"
- "\x39\x78\xfd\xa0\x34\x4f\xf8\xcb\x48\xe9\x1c\xbc\x6e\xe8\x3a\x0e"
- "\xde\x38\x69\x9f\x83\x37\xf2\x3a\xe6\x60\x90\x46\x1e\x07\xaf\xeb"
- "\xf8\x1c\xbc\xee\x6a\x87\x83\x6c\x3d\x08\xbe\xb2\x63\x0e\x5a\xd4"
- "\x83\xbf\x64\x73\x1c\xbc\x99\x2f\xce\x41\xfd\x31\xb3\xaf\xfc\xf5"
- "\x39\xa8\x9f\x6a\x9f\x83\xfa\x10\x69\x1e\xf2\xe6\x21\xe9\x1c\xd4"
- "\xa7\x76\x1d\x07\x6f\x8e\xb7\xcf\xc1\x9b\x2a\x07\x38\x28\xb3\x1e"
- "\xd4\xc7\xf2\x39\xf8\x4b\xba\x38\x07\xd5\x6c\x3d\x08\x3e\xb4\x43"
- "\x0e\x5a\xfa\xd0\x7a\x1f\x8e\x83\x0d\xc3\xc4\x39\x78\xeb\x49\xb3"
- "\x0f\xfd\xf5\x39\x58\xff\x9d\x7d\x0e\xd6\x1f\x95\xe6\x39\x1b\x1e"
- "\x91\xce\xc1\x5b\xae\x5d\xc7\xc1\x5b\xa7\xed\x73\xf0\x56\x41\xc7"
- "\x1c\x54\xcb\xac\x07\xeb\x6b\xf9\x1c\xac\x77\xb7\xc3\x41\xb6\x1e"
- "\x04\xdf\xda\x31\x07\x2d\xea\xc1\x86\x1d\x1c\x07\x6f\xef\x13\xe7"
- "\x60\xe3\x49\xb3\x6f\xfd\xf5\x39\xd8\x38\xdd\x3e\x07\x1b\x35\xd2"
- "\x3c\xea\xed\x63\xd2\x39\xd8\x98\xde\x75\x1c\xbc\x3d\xc9\x3e\x07"
- "\x6f\x07\x38\xc0\x41\x99\xf5\x60\x63\x02\x9f\x83\x0d\x5a\x71\x0e"
- "\x06\xb3\xf5\x20\xf8\xdc\x0e\x39\x68\xe9\x73\x9b\x86\x70\x1c\x6c"
- "\x19\x29\xce\xc1\xe6\xf1\x66\x9f\xfb\xeb\x73\xb0\xe9\xa2\x7d\x0e"
- "\x36\x9d\x90\xe6\x69\x5b\x9e\x94\xce\xc1\x66\xf7\xae\xe3\x60\xf3"
- "\x59\xfb\x1c\x6c\x3e\xd8\x31\x07\x83\x65\xd6\x83\x4d\x7a\x3e\x07"
- "\x9b\xbc\xc5\x38\x68\x02\x5f\xdc\x56\x30\x58\x6b\xca\x09\xd3\x78"
- "\xba\xa8\x90\xc1\x7b\x14\xaa\x58\xd9\x80\xa6\x34\x42\x7c\x12\x1b"
- "\xd1\x9c\x46\x25\x32\xe6\x84\x05\x80\x2f\x2c\xb2\xf0\xcf\xcc\xd8"
- "\x32\x83\x76\xaf\x6a\xeb\x12\xe4\x0a\xfe\x1b\xfb\x99\x90\x8a\x2b"
- "\xcd\x08\xdf\x7f\x1d\x7e\x9e\x6b\xdc\xf3\xe0\x7e\x02\xfa\x97\x00"
- "\x25\xf3\x8d\xb9\x55\x87\x6a\xc6\x22\x45\x59\x8d\x0e\xe2\xb0\x96"
- "\xc1\x17\xc7\xe5\x0a\xd5\xea\xbe\xfb\x06\x72\x35\xfc\xd7\xd7\x0f"
- "\xe2\xed\xed\xf1\x3a\x72\x19\x5c\x43\x9b\x70\x5c\x71\xbc\x70\x8c"
- "\x55\x6b\xf1\xb7\xeb\xd6\xd9\xe5\xc0\x31\xc3\x7f\x03\xfc\x76\x41"
- "\x3a\x61\xbf\xda\x1a\x27\x9d\x1b\xad\xec\x7c\xd8\x56\xd7\xb2\x6a"
- "\x24\xf8\xed\xd8\x04\xfe\xcd\xb1\x58\x05\x69\x2c\x7c\xde\x1d\x88"
- "\x55\x9b\xc6\xb1\x58\xb5\x6d\xe6\xc7\x4a\xc8\x57\xb5\x65\x4b\x8f"
- "\x55\x1b\xbb\x4e\x64\x5b\x88\x9d\x58\x39\xc8\xab\xa0\x22\x0b\x3f"
- "\x72\x07\x62\x65\x88\x75\x2c\x56\x86\x63\x56\xb1\x12\xd0\xff\x86"
- "\x93\xd2\x63\x65\x48\x25\xb1\x32\xcc\x12\x8f\x95\xda\x41\x5e\xa9"
- "\x35\x16\xba\xf9\x0e\xc4\xca\xa8\x75\x2c\x56\xc6\x1f\xf9\xb1\x12"
- "\xd2\xa9\xc6\xab\xd2\x63\x65\x3c\x48\x62\x65\x4c\xb7\x13\x2b\x07"
- "\x79\xa5\x2e\xb2\xd0\x77\x77\x20\x56\xa6\x13\x8e\xc5\x8a\xf6\xb0"
- "\x8a\x95\x80\x9e\xa2\x7d\xa4\xc7\xca\x54\x45\x62\x65\x3a\x2a\x1e"
- "\xab\x60\x07\x79\x15\xac\xb1\xd0\x21\x77\x20\x56\x74\xad\x43\xb1"
- "\x52\xa0\x27\xf9\xb1\x12\x68\xf7\x15\x68\xbc\xe4\x58\x29\x90\x2b"
- "\x89\x15\xad\x13\x8b\x95\x31\x27\xf0\xa8\x27\xc4\xa0\x65\x5b\xa0"
- "\xd6\x33\x09\x51\xad\xc3\x21\x6e\xde\x10\xb7\x34\x15\x6a\xcb\x81"
- "\xb8\xe9\x0d\x68\xca\xb2\x1f\xe8\xf2\x3a\x23\x6a\x85\x98\xb5\x78"
- "\x07\x16\x55\xe8\x6b\xf1\x98\xa3\xa7\x2e\x29\xa8\x61\x33\x97\x29"
- "\x11\x8e\x1b\x8e\x03\x8e\x1d\x0d\x71\x63\xe2\xe8\x1d\x51\x64\xf4"
- "\x1e\x57\x19\x71\xfd\x07\x7a\xa9\x8e\xa6\xf1\xfb\xd2\xca\x9b\x21"
- "\xf8\xbb\x40\x64\x2d\xea\xab\x7a\x01\xbf\x93\xcb\x39\x7c\xbc\x42"
- "\x5f\x05\xfa\xa0\x1e\x31\xda\xec\x87\x00\x6f\xe3\x9f\x02\xdc\x8d"
- "\x15\xd1\xcf\xd3\x03\xea\xa3\x0c\x03\x9f\x52\xad\xbf\x8e\x7a\x63"
- "\xfd\x90\x65\x42\xbe\xeb\x16\x23\xea\xf0\xa2\x62\x8a\x99\xbb\xb6"
- "\x9c\xc9\x23\x1f\xe2\xe2\x4b\xdf\xb2\x18\xd3\x7d\x2b\x1e\x55\x5c"
- "\xd1\x32\xb8\x59\x6b\x04\x06\xb7\x7f\x05\x28\x41\x67\x86\xd0\xde"
- "\x81\xa5\xda\x72\xa4\xa2\xdb\x20\xc6\x78\x3e\x91\x82\xda\xbc\xbb"
- "\x55\x6a\x8c\x5d\x98\xf1\xdf\x26\x15\x3b\x7e\x0b\xe2\x84\xef\xcf"
- "\x8c\xdf\x4a\xb4\x18\xbf\x05\xcf\xdc\x3e\x7e\x4b\xe1\xa2\xc6\xe3"
- "\xb7\x4c\x3f\xf8\xfa\x99\xdf\x7d\x69\x02\x4d\xc3\xbb\x0f\x28\x6f"
- "\xd0\x23\xfc\xfe\xe5\x0d\xc5\x68\xfd\x4a\xa4\x2c\x6f\xad\x45\x29"
- "\x0d\xb4\xbe\x3c\xf5\x2a\x8a\x6c\xc4\x3a\x18\xf3\x85\x62\xfa\x42"
- "\x01\xdf\x3a\xd3\x0f\x01\x7e\x3a\x05\xa5\x2c\xaf\x44\xc8\x62\x1e"
- "\x4f\x3c\x68\x66\x37\xc0\x21\xbe\x22\xf5\x12\xa2\x07\x3e\x1d\x55"
- "\x61\xf8\x1e\xe3\x14\x0f\xe7\xc7\xb6\xeb\xeb\x81\x4f\xbf\x80\x8f"
- "\x61\xcc\xf0\xf7\x26\xbc\x3e\xc0\x6e\x0b\xfd\x8d\x79\xe1\x99\x94"
- "\x8a\x2a\x92\x5a\x51\xb9\x01\x21\xb8\xdf\xf6\x6f\xa2\xab\x44\x78"
- "\x14\x34\x9a\xf0\x28\x48\xe9\x99\xd4\xab\xbe\x63\x1e\x05\x69\x38"
- "\x1e\xb9\x2e\x74\x8e\x47\xae\x83\x9c\xe7\x91\xe2\xb2\x7c\x1e\x05"
- "\x85\xf3\x79\xe4\x7a\x4e\x3a\x8f\x14\x85\xd2\x79\xa4\x58\xe9\x1c"
- "\x8f\x5c\xe7\x11\x1e\x29\x46\x13\x1e\xb9\x46\x73\x3c\x62\xe6\x46"
- "\xdd\x21\x1e\x51\x3a\x3b\x3c\x62\xeb\xa3\x20\xa8\x8f\xee\xb9\xe4"
- "\x00\x8f\x2c\xea\xa3\xde\x47\x9c\xe3\x51\xef\x79\xce\xf3\xa8\x77"
- "\xb0\x13\x3c\xb2\xaa\x8f\xfa\x0c\x92\xce\xa3\x5e\xcd\xd2\x79\xd4"
- "\xeb\x84\x73\x3c\xea\x7d\x80\xf0\xa8\x57\x32\xe1\x51\xef\x3d\x1c"
- "\x8f\x98\xf9\x66\x77\x88\x47\xbd\x02\xc4\x79\xa4\x66\xeb\x23\x35"
- "\xd4\x47\x5e\xdf\x76\xcc\x23\xb5\x45\x7d\xe4\xd6\xe2\x1c\x8f\xdc"
- "\x0e\x38\xcf\x23\xb7\x55\xf2\x79\xa4\xb6\xaa\x8f\xfa\xce\x93\xce"
- "\x23\xb7\x50\xe9\x3c\x72\x73\x75\x8e\x47\x6e\x37\x09\x8f\xfa\x94"
- "\x10\x1e\xb9\xd5\x72\x3c\x62\xe6\xf0\xdd\x21\x1e\xf5\x49\xb4\xc3"
- "\x23\xb6\x3e\x52\x43\x7d\xf4\xf8\x16\x07\x78\x64\x51\x1f\xdd\x33"
- "\xde\x39\x1e\xf5\xbb\xe9\x3c\x8f\xfa\x9d\x74\x82\x47\x56\xf5\xd1"
- "\x3d\x07\xa4\xf3\xa8\x5f\xba\x74\x1e\xf5\x9b\xec\x1c\x8f\xee\x79"
- "\x92\xf0\xa8\x9f\x3b\xe1\xd1\x3d\x21\x1c\x8f\x98\x79\x91\x77\x88"
- "\x47\x7d\x8b\xc4\x79\x14\xcc\xd6\x47\xc1\x50\x1f\xcd\x9c\xd0\x31"
- "\x8f\x82\x2d\xea\x23\x8f\xcd\xce\xf1\xc8\xe3\x49\xe7\x79\xe4\xd1"
- "\x4b\x3e\x8f\x82\xad\xea\x23\x8f\x9b\xd2\x79\xe4\x5e\x29\x9d\x47"
- "\xee\x39\xce\xf1\xc8\x23\x8d\xf0\xc8\x7d\x1a\xe1\x91\x47\x12\xc7"
- "\x23\x66\xae\xe9\x1d\xe2\x91\x3b\x12\xe3\x11\x5e\x8b\xe0\x5d\xb2"
- "\x2e\x44\xc3\xd6\xb5\x48\xb3\x1b\xff\x6d\x45\x21\x4d\x59\xfd\x03"
- "\x4e\x25\x93\xf5\x00\x74\x8a\xfe\x4c\x7f\xaf\xd0\xf5\xf7\x1c\x00"
- "\x5c\xbc\x03\x0b\x23\x2f\x92\x35\x1a\xf0\xba\x20\xb7\xd6\xc7\xa3"
- "\x51\x78\x5d\x06\x85\x67\x0c\x5e\xc7\xaa\x7d\xed\x00\x6f\x91\xb5"
- "\x03\x66\x88\xaf\x1d\xd0\xba\xcd\x3c\xef\x76\x3f\x37\xef\x56\xe1"
- "\x19\x6c\x77\xde\xad\xc2\xd3\x27\x7f\x86\x54\x3e\xf4\xd7\xe1\x77"
- "\xbc\x35\x30\x50\xdb\x94\xe5\x39\x1c\xb0\x31\x90\x77\xf7\xdc\x83"
- "\x1c\x9a\x8f\xbb\xdf\x82\x27\xfd\x2b\x5f\x9a\x85\x52\xe9\x2d\xe5"
- "\xc3\x69\x9f\xc0\x42\x3a\x37\xb0\x58\xda\xb3\x40\xce\x76\xe3\x1d"
- "\x14\x22\x1c\x6f\x65\x25\x89\x37\xbb\x6e\x81\xb7\xc8\xba\x05\x33"
- "\xc4\xd7\x2d\x10\x8e\xb7\xd2\xfe\x3c\x67\x85\x72\x93\xf4\x78\x2b"
- "\xa3\x48\xbc\x83\x94\x4d\x59\xca\x1c\x2e\xde\x5e\x4a\xe9\xf1\x56"
- "\x86\x92\x78\x57\xf8\xd2\x3e\x41\x21\x74\x6e\x50\xa8\xc4\x67\xa9"
- "\xee\x20\xde\x22\xfc\x1e\x10\xca\xc6\x9b\xe5\xb7\xc8\x9a\x09\x33"
- "\xc4\xd7\x4c\x10\x8e\xf7\x00\x0f\xfb\xf1\xf6\x6a\x94\x1e\x6f\xaf"
- "\x62\x36\xde\xc0\xef\x01\xae\x5c\xbc\x07\xa4\x4a\x8f\xb7\x57\x21"
- "\x89\x77\xa5\x3b\xc4\x1b\xf8\x1d\x24\x91\xdf\x03\x26\xdb\x8f\xb7"
- "\x5a\x84\xdf\xf7\x16\x92\x78\xb3\xeb\x35\x78\x8b\xac\xd7\x30\x43"
- "\x7c\xbd\x06\xe1\x78\xdf\xbb\xce\x7e\xbc\xef\x8d\x93\x1e\xef\x7b"
- "\x43\x48\xbc\xd5\xc0\xef\x7b\x57\x72\xf1\xbe\x57\x2f\x3d\xde\xf7"
- "\xaa\x48\xbc\xcf\x21\xda\x47\x0d\xfc\x56\x4b\xe4\xf7\xbd\x27\x3a"
- "\x88\xb7\x08\xbf\x7d\x54\x6c\xbc\x59\x7e\x8b\xac\x15\x31\x43\x7c"
- "\xad\x08\xe1\x78\x7b\x5f\xb7\x1f\x6f\xef\xef\xa4\xc7\xdb\x7b\x0f"
- "\x1b\x6f\xe0\xb7\x77\x0d\x17\x6f\x9f\x18\xe9\xf1\xf6\xd6\xb2\xf1"
- "\x6e\x80\x78\x03\xbf\xd5\x12\xf9\xed\xa3\xb6\x1f\xef\x60\x11\x7e"
- "\x0f\xd4\x92\x78\xb3\xeb\x54\x78\x8b\xac\x53\x31\x43\x7c\x9d\x0a"
- "\xe1\x78\x0f\x9c\x6d\x3f\xde\x03\x27\x4a\x8f\xf7\x40\x25\x89\x77"
- "\x30\xf0\x7b\xe0\x34\x2e\xde\x03\x2b\xa5\xc7\x7b\x20\x22\xf1\xfe"
- "\xb6\x96\xf6\x09\x06\x7e\x07\x4b\xe4\xf7\xc0\x3c\xb1\x78\x7b\x42"
- "\xbc\x4f\x83\x8e\x01\xdd\x51\x64\xca\x01\x9d\x62\xe4\xc7\xbd\x22"
- "\x49\x83\x1e\xbe\x8d\x63\xef\x9b\x0c\x6d\x75\x51\x97\xad\x97\xa1"
- "\xf0\x8d\x73\x7a\xee\xb0\xc2\xf7\x11\xd1\xb9\xc3\x0a\xdf\x41\x92"
- "\xe7\x0e\x2b\x7e\x57\xc3\x69\x20\xdf\x00\x0e\x53\x5f\xa6\xfe\x90"
- "\x34\xa7\x58\xf1\xbb\xf3\x82\xeb\x68\x28\x7e\xb7\x11\xcf\x29\xa6"
- "\xb7\xfc\x6f\xb5\x29\x57\x8e\x36\xf2\x4d\xef\x18\xeb\x20\x8d\x29"
- "\x07\x34\x92\x28\xd6\x7e\xf1\xd0\x6e\x69\xba\x6c\xdd\x0e\x85\xdf"
- "\x54\xe7\xb1\xf6\x1b\x22\x8e\xb5\x5f\x2f\xe9\x58\x0f\xaa\xe4\xf4"
- "\x97\x9f\x37\x87\xb5\x9f\xf4\xf9\xe3\x8a\x41\xc5\x82\xeb\x79\x28"
- "\x06\x25\x12\xac\xbf\x0b\x35\xe5\xca\xd1\x65\x7e\x2b\x1d\xc0\x1a"
- "\xca\x75\x90\x9d\x72\x3d\x78\x1a\x60\x5d\xd4\x65\xeb\x87\x28\x06"
- "\x8f\x73\x1e\xeb\xc1\x7d\xc5\xb1\xbe\xef\xa6\x74\xac\xef\x3b\xc1"
- "\x69\xbf\xc1\x88\xc3\x7a\x70\x8e\x74\xac\xef\x3b\x28\xb8\xae\x88"
- "\xe2\xbe\x59\x04\xeb\x7f\x16\x00\xd6\x32\x34\xe1\xe0\x98\x8e\xb1"
- "\x56\x43\xb9\x56\xdb\x29\xd7\x43\x43\xa1\xbd\xd6\x74\xd9\x3a\x26"
- "\x8a\xa1\x23\x9d\xc7\x7a\x48\xa3\x38\xd6\x43\x2e\x4a\xc7\x7a\xc8"
- "\x7e\x4e\x77\x0e\xa9\xe3\xb0\x1e\x9a\x2a\x1d\xeb\x21\xdb\x05\xd7"
- "\x37\x51\x0c\x09\x27\x58\x57\xb9\x99\x72\xe5\xe8\xd1\xa1\xa2\xfa"
- "\xdf\x02\x6b\x28\xd7\x6a\x3b\xe5\x5a\xa5\x06\xac\x8b\xba\x6c\x3d"
- "\x15\x85\xca\xc7\x79\xac\xef\xff\x51\x1c\xeb\xfb\xcf\x48\xc7\xfa"
- "\xfe\x1c\x4e\xf3\xde\x5f\xc5\x61\xad\x4a\x90\x8e\xf5\xfd\x1b\x05"
- "\xd7\x59\x51\xdc\x3f\x9a\x60\x7d\x21\x01\xb0\x96\xa1\x85\x55\x9a"
- "\x8e\xb1\x0e\x86\x72\x1d\x6c\xa7\x5c\x3f\x00\xbe\x3e\x58\xd3\x65"
- "\xeb\xba\x28\x1e\x70\x71\x1e\xeb\x61\x67\xc5\xb1\x1e\x76\x4c\x3a"
- "\xd6\xc3\x52\x39\xbd\x3d\xac\x84\xc3\xfa\x81\x68\xe9\x58\x0f\x4b"
- "\x14\x5c\xef\x45\x31\x4c\x45\xb0\xfe\xbe\xd2\x94\x2b\x47\x87\x3f"
- "\x20\xba\xff\x81\x3d\x1d\xbe\x22\x1f\xb9\xf1\xf1\x1e\xee\xd6\xb5"
- "\x5a\xfc\xc1\x9b\xce\xe3\xfd\xe0\x49\x71\xbc\x1f\xdc\x27\x1d\xef"
- "\x07\x13\x39\x2d\xfe\xe0\x51\x0e\xef\xe1\xe1\xd2\xf1\x7e\x30\x46"
- "\x58\x8b\x3f\xa8\x74\x4e\x8b\x0f\xf7\x96\xa3\xc5\x6d\xf1\xf6\x6f"
- "\xee\x5a\x3d\xee\xff\xa3\xf3\x78\xfb\x1f\x12\xc7\xdb\x3f\x57\x3a"
- "\xde\xfe\x31\x9c\x1e\xf7\x2f\xe0\xf0\x7e\x48\x23\x1d\x6f\xff\x28"
- "\x61\x3d\xee\x8f\x9c\xd3\xe3\x0f\xb9\xca\xd1\xe3\xb6\x78\x8f\xa8"
- "\xed\x5a\x4d\x3e\xe2\x9c\xf3\x78\x8f\xc8\x17\xc7\x7b\xc4\x26\xe9"
- "\x78\x8f\x88\xe2\x34\xf9\x08\x8b\xfe\xef\x80\x00\xe9\x78\x8f\x08"
- "\x15\xd6\xe4\x0f\xe9\x9d\xd3\xe4\x23\x1a\xe4\x68\x72\x5b\xbc\x47"
- "\x56\x75\xad\x2e\x1f\x79\xca\x79\xbc\x47\x66\x8a\xe3\x3d\x72\x95"
- "\x74\xbc\x47\x86\x72\xba\x7c\xe4\x46\x0e\xef\x40\xe9\xeb\x67\x2a"
- "\x46\x86\x08\xeb\xf2\x00\x9d\x73\xba\x7c\x64\x8d\x1c\x5d\x6e\x8b"
- "\x77\x50\x69\xd7\x6a\xf3\xa0\x23\xce\xe3\x1d\xb4\x4e\x1c\xef\xa0"
- "\x38\xe9\x78\x07\x85\x70\xda\x3c\xc8\xa2\xff\x5f\xed\x26\x1d\xef"
- "\x20\x95\xb0\x36\x0f\xac\x74\x4e\x9b\x07\x9d\x97\xa3\xcd\x6d\xf1"
- "\x0e\x2e\xea\x5a\x7d\x1e\xbc\xd7\x79\xbc\x83\x17\x8b\xe3\x1d\xfc"
- "\x92\x74\xbc\x83\x55\x9c\x3e\x0f\x8e\xe5\xf0\x0e\x6e\x96\x8e\x77"
- "\xb0\x52\x58\x9f\xab\x8b\x9d\xd3\xe7\xc1\x25\xce\xf7\x93\x87\xe4"
- "\x60\x6d\x2e\x75\xfd\xc7\x8a\x95\xec\x9c\x3b\xc5\xc3\xdc\xfa\x8f"
- "\x8a\x90\x4d\x48\x6c\x6d\x19\xc5\xa8\x1f\xbb\xf5\xfa\x8f\x8a\x51"
- "\xf6\xd7\x7f\x54\x8c\x92\xb6\xfe\xa3\x62\xd4\x19\xe9\xe3\xf1\x47"
- "\xe5\x70\x1e\x61\x94\x85\xff\x0f\x21\x7b\x14\x77\xe7\x75\x21\x15"
- "\xa3\xf8\xeb\x42\x2a\x1e\x66\xd6\x85\xa4\xb7\x54\x8f\x96\xe7\x45"
- "\x42\xf6\x38\xff\x5d\xe0\xb1\x44\xec\x43\xa4\xae\x43\xc9\x71\xfb"
- "\x91\xc5\x1c\xb7\x1f\x9b\x27\xce\xed\x47\x4f\x76\xeb\x75\x28\x15"
- "\x8f\x8e\xb7\xcf\xed\x47\x55\x92\xd6\x1c\x51\x3c\x2a\x7d\xdd\x1b"
- "\xc5\xa3\x89\x9c\x1f\x7a\xd4\xc2\xff\x3e\x56\xd8\x75\xdc\x96\xb9"
- "\x3e\xa5\xe2\xd1\x69\x7c\x6e\x3f\x12\x4b\xb8\xfd\x9f\x74\x79\xbe"
- "\xeb\xb1\x64\xe7\xbf\x83\x3c\x3e\x19\x7b\x2e\xa9\xeb\x61\x72\xdc"
- "\x1e\x3d\x89\xe3\xf6\xe3\xe3\xc4\xb9\x3d\x66\x47\xb7\x5e\x0f\x53"
- "\x31\x66\x88\x7d\x6e\x8f\x36\x48\x5a\xcb\x44\x31\x26\x4d\x3a\xb7"
- "\xc7\x4c\xe6\xbc\xdf\x18\x2d\xc7\xed\xc7\x33\xba\x90\xdb\x32\xeb"
- "\xed\x31\x21\x7c\x6e\x8f\x0e\x25\xdc\xd6\x55\xcb\xf3\x98\x8f\x47"
- "\x3b\xff\xdd\xe7\xc9\x00\xec\x2f\xa5\xae\xcb\xc9\x71\xfb\x09\x7f"
- "\x8e\xdb\x4f\xda\xac\x0b\xc5\x71\x5b\xb3\xaa\x5b\xaf\xcb\xa9\x78"
- "\xa2\xc5\x3e\xb7\x9f\xa8\x92\xb4\x46\x8a\x42\x33\x5b\x3a\xb7\x35"
- "\x01\x9c\xcf\xd5\x24\x70\xdc\x7e\x32\xbe\xeb\xb8\x2d\x73\xbd\x4e"
- "\x85\xc6\x9d\xcf\xed\x27\x06\x13\x6e\xff\x37\x44\x9e\x9f\x7e\x72"
- "\xb4\xf3\xdf\xb9\xc6\xba\x62\x2f\x2d\x75\x7d\x50\x8e\xdb\xbf\x77"
- "\xe1\xb8\xfd\x54\xa3\x38\xb7\x9f\x9a\xda\xad\xd7\x07\x55\xfc\xde"
- "\xfe\xfa\x3f\x8a\xdf\xdb\x5b\xff\xc7\x76\xae\xb0\xe2\x29\xe9\xeb"
- "\x5e\x28\x9e\x72\xe5\x3c\xfd\x53\xe1\x1c\xb7\xc7\x86\x75\x21\xb7"
- "\x65\xd6\xdb\xbf\xaf\xe5\x73\xfb\xc9\x66\xc2\xed\xcb\x1b\xe5\xf5"
- "\x1d\x8c\x55\x3a\xff\x5d\xef\x69\x1d\xee\x37\x90\xba\x4e\x29\xc7"
- "\xed\xb1\x17\x39\x6e\x3f\x7d\x4e\x9c\xdb\x4f\x07\x77\xeb\x75\x4a"
- "\x15\xe3\x8e\xd8\xe7\xf6\x38\xad\xa4\x35\x5d\x14\x4f\x4b\x9f\x07"
- "\xaf\x18\xa7\xe3\xfa\x2f\x9e\xb6\x18\xff\xfe\x8c\xaa\xeb\xb8\x2d"
- "\x73\xfd\x52\xc5\xb8\x12\x3e\xb7\xc7\x9e\x27\xdc\xfe\xa9\x4a\x5e"
- "\x3f\xc9\xd3\x75\xce\xf7\x93\x8c\xaf\x63\xbe\x61\x4a\x5c\x2f\x95"
- "\xe3\xf6\x33\xc7\xdb\xd7\x26\x52\x8c\xbf\x68\xcd\xed\xf6\xb5\x89"
- "\x14\xa1\x8d\xdd\x66\xbd\x54\x45\xe8\x1a\xfb\x3c\x0e\x8d\x96\xd6"
- "\x27\x12\x7a\x51\x3a\x8f\x43\xf7\x73\x7d\x22\xa1\x16\xe3\x5f\x26"
- "\x98\xf7\x24\xbf\xf3\x6b\x16\x29\xc6\xa7\xd9\x5d\xb3\x48\x31\x3e"
- "\xe6\x8e\xad\xa3\xaa\x08\xcd\xe0\xad\x59\xa4\x78\xa6\xd0\xc4\x94"
- "\x85\x6b\x6a\x79\xfd\x2a\xe3\x9b\x9d\xef\x57\x09\x23\xdf\x77\x25"
- "\xae\xdb\xca\x95\x85\x09\xa7\xb9\xb2\x10\x76\x55\xbc\x2c\x84\xb9"
- "\x74\x9b\x75\x5b\x15\xcf\x6e\xb2\x5f\x16\x9e\x8d\x95\xd6\x87\xf2"
- "\xac\xf4\x75\x60\x14\xcf\x1e\xe5\xfa\x50\x9e\x6d\xe6\xca\xc2\x44"
- "\x4d\xd7\x95\x85\xb0\x4c\xfb\x65\x21\x2c\xe1\x8e\xad\xe7\xaa\x78"
- "\x76\x3b\xbf\x2c\x4c\x38\x41\xca\x42\x5d\xa1\xbc\x7e\x98\x89\xb2"
- "\xbe\x7f\xf3\xcb\x42\xb8\x2b\xf3\xed\x5b\xe2\xfa\xb1\x5c\x59\x98"
- "\x78\x8e\x2b\x0b\xcf\xdb\xe8\x79\xae\x2c\x3c\xef\xd1\x6d\xd6\x8f"
- "\x55\x3c\x97\x6d\xbf\x2c\x3c\x97\x28\xad\xcf\xe5\xb9\x46\xe9\x65"
- "\xe1\x39\x8b\xf9\x4f\xcf\x5b\xcc\x7f\x0a\x0f\xeb\xba\xb2\xf0\xfc"
- "\x0e\xfb\x65\xe1\xf9\xa4\x3b\xb6\xae\xac\xe2\xb9\x02\x7e\x59\x98"
- "\x58\x4a\xca\xc2\x2f\xa3\xe5\xf5\xdb\x84\x3b\xa0\xff\x3b\xea\xb7"
- "\xf9\xa3\x92\x19\x17\x20\x71\x1d\x5b\xae\x2c\x84\x5f\xe4\xca\xc2"
- "\x1f\x5d\xc4\xcb\xc2\x1f\x06\x75\x9b\x75\x6c\x15\x93\xf2\xed\x97"
- "\x85\x49\xc9\xd2\xfa\x68\xfe\xe0\x22\xbd\x2c\x4c\x2a\xe3\xfa\x68"
- "\xfe\xa0\xe4\xca\xc2\x1f\xa3\xba\xae\x2c\xfc\x61\x9f\xfd\xb2\xf0"
- "\x87\x8d\x77\x6c\x7d\x5b\xc5\xa4\x42\x7e\x59\x08\x3f\x4f\xca\xc2"
- "\xcd\x22\x79\xfd\x3c\x7f\x1c\xec\x7c\x3f\xcf\x94\xc1\xcc\x98\x09"
- "\x89\xeb\xe9\x72\x65\xe1\x8f\x57\xb9\xb2\x30\xc5\x43\xbc\x2c\x44"
- "\xf8\x77\x9b\xf5\x74\x15\x93\x0f\xd8\x2f\x0b\x93\xd3\xa5\xf5\xe9"
- "\x44\x78\x48\x2f\x0b\x93\xab\xb8\x3e\x9d\x88\xc1\x5c\x59\x98\x32"
- "\xab\xeb\xca\x42\xc4\x11\xfb\x65\x21\x42\x7b\xc7\xd6\xd9\x55\x4c"
- "\x3e\xc1\x2f\x0b\x7f\xd4\x91\xb2\xd0\x30\x56\x5e\xbf\xd0\x94\x00"
- "\xe7\xfb\x85\xa6\x06\x30\xe3\x49\x24\xae\xeb\xcb\x95\x85\x29\x8d"
- "\x5c\x59\x98\x2a\xbe\xcf\x83\x22\xea\x91\x6e\xb3\xae\xaf\x22\xd2"
- "\xfe\xfe\x47\x8a\x48\x3b\xfb\x1f\x09\xf5\x01\x45\x0d\x92\x5e\x16"
- "\x22\x6b\xb8\x3e\xa0\x28\x8b\xf9\x7f\x53\xe3\xbb\xae\x2c\x44\xd9"
- "\xdf\xff\x41\x11\xe5\xc0\xfe\x0f\x32\xd7\xfb\x55\x44\x96\xf2\xcb"
- "\xc2\x94\x3a\x52\x16\x6e\x17\xcb\xeb\x47\x9a\xda\x61\xff\x3f\xf6"
- "\xf9\x6d\xde\xb6\xfd\x48\x65\x35\x1a\x14\x34\x03\x97\x85\x17\xaa"
- "\x0d\xb9\x81\x45\x78\x7d\x61\xe3\x70\x76\x0d\xca\x34\x76\x8d\x97"
- "\x06\x03\x59\x83\x52\x6f\x6c\x5f\x83\x92\xac\xfd\x81\x28\x3c\x17"
- "\x18\xcf\x09\x36\x28\xc9\xfa\x93\x34\x1e\x13\x85\xc7\x48\x5d\x2a"
- "\x65\xd6\x57\x49\x36\xc0\xbb\x5f\xe9\x60\xfd\xc9\x18\x1d\x2a\x8b"
- "\x59\x8b\x0c\x5e\x7b\x55\x64\x9e\xf0\x0b\x09\xcc\xfa\x93\x73\x7d"
- "\xfd\xb2\xfe\x83\xbc\x3d\xf1\xfa\x93\x31\xb4\x69\xbd\x8e\xd6\x97"
- "\x37\x23\x48\x0b\xf1\x9d\x67\x5e\x83\xf2\x85\xef\xf0\xbb\x1b\xe6"
- "\x06\xf8\xed\xfa\x8f\xc8\xfa\xc2\x8a\x17\xa4\xaf\x03\xab\x78\x21"
- "\x9d\xeb\xdf\x79\xa1\x8c\xe3\xe8\x8b\x4c\x1b\x0c\xe7\x63\xcb\xa2"
- "\xa1\x8e\xd9\xd2\x12\xd6\x26\x6b\xed\x8d\x17\x6a\x3b\xc6\x8c\x19"
- "\x23\x62\x53\x7f\x71\x98\x4d\xd3\x1a\x72\x83\x34\x78\x9d\x63\xc7"
- "\x31\xeb\x55\x7f\x67\x30\x9b\xa6\x72\x1c\xb3\x69\x9b\xf9\x98\x09"
- "\xf5\x43\x4c\x5b\x26\x1d\xb3\x69\x63\xb9\x7e\x88\x69\xa9\x1c\x66"
- "\xd3\x2a\x09\x66\xd3\x7c\x09\x66\xad\x89\x6d\xb2\xd6\xef\x98\xd6"
- "\xe1\xfc\x6f\xec\x9b\xda\xbc\x6d\x7d\x39\x87\xd9\xcb\x61\x80\x59"
- "\x11\x5e\x6f\xd9\x71\xcc\xee\xb9\x74\x67\x30\x7b\xe9\xbc\xe3\x98"
- "\xbd\x3c\xce\x0a\x33\x01\xbf\xfc\xb2\xf4\x3d\x3b\x15\x2f\xe9\x39"
- "\xbf\xfc\xf2\x68\x0e\xb3\x97\x37\x12\xcc\x5e\x2a\x23\x98\xb5\xe5"
- "\xb5\xc9\x5a\x03\xe4\xe5\xa8\x8e\x31\x63\xbe\xe9\xdb\x29\x67\x7f"
- "\x6a\x36\xe4\x82\xc7\x04\xff\xe8\x38\x66\x5e\xdf\xde\x19\xcc\xfe"
- "\x94\xee\x38\x66\x7f\xba\xc9\xc7\x4c\xc8\xd7\xfd\xe9\x82\x74\xcc"
- "\xfe\x54\xc0\xf9\xba\x3f\xd5\x72\x98\x45\x6b\x08\x66\x7f\x4a\x25"
- "\x98\x19\x4a\xdb\x64\xad\x23\x12\xdd\x61\xff\x17\xd6\xa1\x6d\xde"
- "\xb6\x3e\x87\xc3\x6c\xfa\x41\xc0\xac\x08\xaf\x3f\xed\x38\x66\x8f"
- "\x6f\xb9\x33\x98\x4d\x1f\xeb\x38\x66\xd3\xf7\x59\x61\x26\xe0\x3f"
- "\xa6\x67\x4a\xc7\x6c\x7a\x34\xe7\x3f\xa6\xe7\x71\x98\x4d\xaf\x23"
- "\x98\x4d\x1f\x4d\x30\x33\x36\xb4\xc9\x5a\x8b\x64\x7a\x51\xc7\x98"
- "\x31\xdf\x60\xed\x94\xb3\x99\x31\x86\x5c\xd0\xec\xa0\xc7\x1d\xc7"
- "\x6c\xe6\x84\x3b\x83\xd9\x0c\xbd\xe3\x98\xcd\x9c\xce\xc7\x4c\x48"
- "\x27\xcf\x94\xb1\x0e\xf6\x4c\x77\x4e\x27\xcf\x8c\xe2\x30\x9b\xb9"
- "\x87\x60\x36\xa3\x96\x60\x46\xab\xda\x64\xad\x67\x32\x53\x74\xfd"
- "\x2f\x7b\xba\xd1\x3c\x2e\x9f\xc3\x6d\xb6\x6f\xf7\xd1\x8e\xb3\xf6"
- "\x3b\x8e\xdb\x6c\xaf\x8e\xb5\xe3\xac\x16\xe9\xb8\xcd\x2a\xe1\xb4"
- "\xe3\x6c\x37\x0e\xb7\xd9\xd1\x04\xb7\x59\x7b\x9c\xd3\x8e\xb3\x3b"
- "\x9c\xff\x2a\xa4\x1d\x6d\x71\x9b\x53\xd9\x7d\xf4\xe3\x9c\x18\xc7"
- "\x71\x9b\x73\xa6\x63\xfd\x38\xe7\x88\x74\xdc\xe6\x24\x73\xfa\x71"
- "\x4e\x31\x87\xdb\x5c\x25\xc1\x6d\x4e\xb4\x73\xfa\x71\x8e\xe8\xfa"
- "\x6f\xf6\xf4\xa3\x2d\x6e\x31\xe9\xdd\x47\x43\xc6\xf8\x3a\x8e\x5b"
- "\x4c\x5a\xc7\x1a\x32\x66\xa1\x74\xdc\x62\x46\x73\x1a\x32\x26\x89"
- "\xc3\x2d\xa6\x94\xe0\x16\xa3\x74\x4e\x43\xc6\xe4\xc8\xd1\x90\xb6"
- "\xb8\xcd\x0f\xed\x3e\x3a\x72\x5e\xa5\xe3\xb8\xcd\x7f\xb2\x63\x1d"
- "\x39\x5f\xfa\x9e\xc5\x8a\x79\x75\x9c\x8e\x9c\x1f\xc2\xe1\x36\x3f"
- "\x95\xe0\x36\xaf\xd4\x39\x1d\x39\xbf\xc3\xf5\x3f\x84\x74\xa4\x2d"
- "\x6e\xaf\x34\x77\x1f\x2d\xf9\x8a\x04\xfd\xff\x8a\xb5\xfe\x17\xd0"
- "\x92\xaf\xc8\xd0\xff\xaf\x98\xf5\x3f\x94\xb7\x57\x2c\xf4\x7f\x2c"
- "\xab\xff\x5f\x49\x75\x4e\x4b\xc6\x3a\xa0\xff\x6d\xb5\xa4\x2d\x6e"
- "\x71\x85\xdd\x47\x4f\xc6\x85\x3a\x8e\x5b\xdc\x81\x8e\xf5\x64\x9c"
- "\xf4\x7d\xa0\x14\x71\xb3\x38\x3d\x19\xb7\x87\xc3\x2d\x4e\x4f\x70"
- "\x8b\xd3\x38\xa7\x27\xe3\x44\xd7\x7f\x34\xe3\x66\xf4\x0e\x2c\xa2"
- "\x05\xfa\x21\xcf\xc6\x6b\xd8\xb5\x09\xe3\x53\x8d\x3e\x81\x45\x52"
- "\xf7\x77\x31\xaf\x39\x7d\x26\x1e\xa1\x4b\x8a\xf8\x41\xce\xad\x3b"
- "\xfd\xea\x19\xe7\xd7\x9d\x7e\x35\xb7\xf3\xf6\x77\x79\x75\x9d\xf4"
- "\x75\xa7\x5f\x0d\xe7\x34\xe8\xab\x19\x1c\xd6\xf1\xcc\xf8\x04\x69"
- "\xeb\x51\xbf\xea\xee\xdc\x7a\xd4\xf1\x5e\x84\x5f\x0b\xca\xc8\x7a"
- "\xd4\xf1\x6e\x5d\xb3\xef\xcb\x82\x24\xbc\x1e\x35\x9d\x85\x26\xcb"
- "\x5b\x1f\x39\x3e\xa3\x63\x3e\x07\x69\x68\x81\x3e\x5a\x8e\xcf\xaf"
- "\x45\x19\x7d\x82\x34\x52\xf7\x99\xe1\xf3\x79\xd1\x55\xe7\xf8\xbc"
- "\x68\x87\xf3\x7c\x5e\x14\xd7\x79\xfb\xcc\x2c\x8a\x90\xce\xe7\x45"
- "\xbe\x9c\x36\x5f\x34\x8b\xe3\xf3\x6b\x5a\xe9\x7c\x5e\x58\xed\x1c"
- "\x9f\x17\xfd\x48\xf8\xbc\x30\x8f\xf0\x79\x51\x55\xd7\xec\x3f\xb3"
- "\x30\x9c\xf0\x99\xca\x91\xb7\xfe\xf4\x6b\xb3\x1c\xe0\x73\x11\x2d"
- "\xd0\x7f\xcd\xf1\x79\x89\x0a\xf8\x5c\x24\x75\xbf\x1b\x3e\x9f\x17"
- "\x1f\x77\x8e\xcf\x8b\x17\x3a\xcf\xe7\xc5\x63\x3a\x6f\xbf\x9b\xc5"
- "\x43\xa4\xf3\x39\xa1\x96\xf3\x2c\x8b\xd5\x1c\x9f\x97\xc4\x48\xe7"
- "\x73\xc2\x41\xe7\xf8\xbc\xf8\x08\xe1\x73\x42\x02\xe1\xf3\xe2\xfd"
- "\x5d\xb3\x0f\x4e\x82\x2f\xe1\xb3\x6b\xb5\xbc\xf5\xbd\x97\x88\xae"
- "\x7f\xcc\xf1\x59\xad\xa1\x05\xfa\xf6\x39\x3e\x27\xea\x8d\x3e\x6a"
- "\x8d\xd4\x7d\x77\xf8\x7c\x4e\x74\x72\x9f\x8b\xc4\x4e\xd8\xe7\x22"
- "\xd1\x89\x7d\x2e\xac\xf7\xdd\x59\x7a\x5d\x3a\x9f\x97\x16\x71\x5e"
- "\x6e\xa9\x81\xe3\xf3\xb2\x10\xe9\x7c\x5e\x9a\xec\x1c\x9f\x13\xd9"
- "\xfd\x2f\x96\x8e\x25\x7c\x4e\x4c\xea\x9a\xfd\x78\x96\xd4\x12\x3e"
- "\xf7\x19\x2e\x6f\xfd\xf4\x44\x83\x03\x7c\x2e\xa2\x05\xbe\x7b\x70"
- "\x7c\x5e\x51\x0c\x7c\x2e\x92\xba\xff\x0f\x9f\xcf\x2b\xa6\x3b\xc7"
- "\xe7\x15\x7d\x9d\xe7\xf3\xf2\xef\x3a\x6f\xff\x9f\xe5\x27\xa5\xf3"
- "\x79\x79\x3a\xe7\x71\x97\x5b\x7c\xff\xc7\x4b\x05\x4b\xe5\xf3\x72"
- "\x27\xf7\x05\x5a\x31\x95\xf0\x79\x39\xbb\x2f\xd0\x8a\xf0\xae\xd9"
- "\x17\x68\x59\x11\xe1\x73\xdf\x04\x79\xeb\xd3\xaf\x28\xeb\x98\xcf"
- "\xc1\x1a\x5a\xe0\x9b\x10\xc7\xe7\xd5\x5a\xa3\x4f\xb0\x46\xea\x3e"
- "\x44\x7c\x3e\xaf\x1e\xe9\x1c\x9f\x57\x5d\x70\x9e\xcf\xab\xf6\x75"
- "\xde\x3e\x44\xab\x32\xa5\xf3\x79\x55\x34\xe7\xfd\x57\x59\x7c\xff"
- "\x5b\x2d\x63\x7f\xa2\x55\x83\x9d\xe3\xf3\xea\x61\x84\xcf\x2b\xab"
- "\x09\x9f\x57\xfb\x76\xcd\xfe\x44\x2b\xd3\x09\x9f\xef\x39\x2a\x6f"
- "\xfd\xff\xd5\x1d\x8e\xff\x10\xea\xdf\x30\xf7\x4b\x71\x9c\x5e\x13"
- "\xeb\x7c\x1f\x47\x92\xd1\x39\x4e\x27\x1d\x72\x9e\xd3\x49\x6b\x3a"
- "\xaf\x8f\x23\x49\xc6\x5e\x7f\x49\x6a\xae\x8f\x23\x29\x91\xe3\xf4"
- "\x9a\x02\xe9\x9c\x7e\x5d\xef\x1c\xa7\x93\x1a\x09\xa7\x5f\x2f\x24"
- "\x9c\x4e\xaa\xeb\x9a\x3e\x8e\xd7\x67\x39\xd7\xc7\xb1\x26\x51\x4e"
- "\x1f\x87\x2d\xa7\x93\x35\xce\xf7\x73\xbc\x71\xce\x39\x4e\xbf\x91"
- "\xe6\x3c\xa7\xdf\x88\xe8\xbc\x7e\x8e\x37\xc6\x48\xe7\xf4\x1b\x88"
- "\xeb\xe7\x78\x23\x8c\xe3\x74\x72\x92\x74\x4e\xaf\x2d\x71\x8e\xd3"
- "\x6f\x9c\x21\x9c\x5e\xbb\x91\x70\xfa\x8d\xe2\xae\xe9\xe7\x58\x1b"
- "\xe2\x5c\x3f\x47\x72\x98\x9c\x7e\x0e\x5b\x4e\xaf\x77\x77\xbe\xaf"
- "\x23\x65\x9f\x73\x9c\x4e\x79\xc9\x79\x4e\xa7\x0c\xeb\xbc\xbe\x8e"
- "\x94\xbe\xd2\x39\xbd\xee\x3c\xd7\xd7\x91\xe2\xcb\x71\x7a\xfd\x64"
- "\xe9\x9c\x5e\xb7\xdd\x39\x4e\xa7\xe4\x13\x4e\xaf\x8b\x26\x9c\x4e"
- "\xc9\xe9\x9a\xbe\x8e\x75\xae\xce\xf5\x75\xac\xf7\x95\xd3\xd7\x61"
- "\xcb\xe9\x34\x9d\xf3\xfd\x1d\x69\x6b\x9c\xe3\x74\xda\x48\xe7\x39"
- "\x9d\xda\xd8\x79\xfd\x1d\xa9\x17\xa5\x73\x3a\xd5\x62\xff\x8b\x54"
- "\x8b\xf9\xff\x1b\x54\xd2\x39\x9d\x9a\xe0\x1c\xa7\xd3\x96\x11\x4e"
- "\xa7\xaa\x09\xa7\xd3\xe2\xbb\xa6\xbf\x63\x7d\x95\x73\xfd\x1d\x69"
- "\x1d\xae\x7f\x21\xd4\xdf\x61\xcb\xe9\x8d\x47\x9d\xef\xf3\xd8\x18"
- "\xe1\x1c\xa7\xdf\x34\x3a\xcf\xe9\x37\xcf\x74\x5e\x9f\xc7\x9b\x47"
- "\xa4\x73\xfa\xcd\x64\xae\xcf\xe3\x4d\x8b\xf1\x4f\x1b\x1b\xa4\x73"
- "\xfa\xcd\x50\xe7\x38\xbd\x71\x22\xe1\xf4\x9b\x88\x70\x7a\xe3\xd8"
- "\xae\xe9\xf3\xd8\x70\xd0\xb9\x3e\x8f\x8d\xc5\x72\xfa\x3c\x6c\x39"
- "\xfd\xe7\x74\xe7\xfb\x3d\xfe\x3c\xcc\x39\x4e\xbf\x75\xce\x79\x4e"
- "\xbf\x95\xdf\x79\xfd\x1e\x6f\x6d\x92\xce\xe9\xb7\xa2\xb8\x7e\x8f"
- "\xb7\x2c\xd6\xbf\xff\x73\xa9\x74\x4e\xbf\xe5\xed\x1c\xa7\xff\x3c"
- "\x88\x70\x7a\xd3\x79\xc2\xe9\x3f\x2b\xbb\xa6\xdf\x63\x53\xaa\x73"
- "\xfd\x1e\x7f\xb6\x19\xff\xb6\x22\x6e\x49\xac\x6a\xe9\x82\x05\x2b"
- "\xe2\x56\xaa\x56\x24\x2c\x7c\x25\x6e\x9c\xbf\xf9\xff\xe3\x42\x92"
- "\xfc\x93\xfa\xa1\xd8\xc5\xf3\xe6\xae\x7e\x94\x3b\x99\x10\xb7\x04"
- "\xfe\xf4\x43\xf1\xf3\x56\xc4\xab\x56\xae\x49\x8c\x53\xe1\xff\x2d"
- "\x7e\x25\x11\x92\x2c\x5d\xc9\x1d\x79\x21\x2e\x61\x5e\xd2\xc2\x25"
- "\xaf\xaa\xe6\x25\x2c\x7c\x75\xc9\xe2\xb8\x25\x2b\x55\xcb\xe3\x96"
- "\xad\x5a\xb8\x3c\x0e\xff\x7b\x85\x6a\xc1\xd2\xe5\x70\xe0\x95\xb8"
- "\x85\xab\xe3\x54\xf3\x57\x2d\x58\x10\xb7\x7c\x45\x3f\x14\xb1\x2a"
- "\x61\xe5\xc2\xc4\x84\x38\x55\x58\xc4\xf8\xe0\x69\x13\x5f\x9c\xf6"
- "\xcc\x33\xfd\x90\xc5\xde\xd3\x2a\x3a\x27\xa2\x10\x38\xe4\x7a\x45"
- "\xf1\xee\xa1\x72\x50\x52\x99\xc0\xcd\xad\xcb\x91\x72\xcb\x72\xe4"
- "\xba\xb9\x1e\xb9\x65\xd6\x23\x77\xd3\x3b\x37\x35\xaa\x45\x28\x94"
- "\xf6\x9a\xaf\xdc\x5a\x8f\xbc\x4d\xd9\xbb\xb4\x74\xf6\xce\x28\xbd"
- "\xd7\x9b\xa1\x38\x2d\xed\xb5\x21\x11\x1f\x07\x2c\x5c\xe9\xec\xbd"
- "\x50\xbe\xde\x4d\xd0\x7b\x6d\x54\xad\xbf\x8a\x28\xba\x7f\x7a\xc3"
- "\x61\x93\x9e\x3a\xc5\x74\x0f\x23\x17\xa4\xd8\xe2\x8e\x14\x9b\x9b"
- "\xe1\xef\x7e\xf8\x15\x21\xc5\xdb\xae\xf0\x53\xc3\x6f\x34\xfc\xf6"
- "\xc0\xaf\x06\x29\x32\xbc\xe1\xa7\x82\x1f\x1c\xcb\x08\x87\x5f\x14"
- "\xfc\xe0\x78\x26\xa4\xcd\x84\x73\x99\x6a\x92\x4f\x26\x9c\xcf\x3c"
- "\x0a\xbf\x6a\xf8\x35\x20\x45\x16\xe4\x99\x55\x8a\x14\x5b\xa7\xc1"
- "\x5f\x1d\xfc\xea\xe0\x07\xc7\xb7\x2a\xe1\x87\xd3\x6a\xc8\x39\x2d"
- "\x82\xdf\x58\xf8\xcd\x82\x5f\x12\xfc\x0e\xc2\xaf\x18\x7e\x65\xf0"
- "\x3b\x0f\x3f\x78\xbe\x6c\x48\x93\x0d\xf7\xca\x86\x73\xd9\x70\x8f"
- "\xec\x2a\xa4\x78\x27\x04\x7e\x39\xf0\xab\x45\xf0\x8e\xec\x2f\xc4"
- "\xe2\xdf\xf8\x17\x6b\xf5\x7f\xeb\xdf\x46\xcf\xb4\xfb\x75\xc5\x81"
- "\x06\x28\xb7\x5b\x16\xd2\x1b\x90\x82\xce\xde\xa8\x4a\x0c\x44\x2e"
- "\xd7\x14\x5b\xc6\x54\x6c\x44\x50\xdf\xec\x8c\x2a\x5e\xdb\x8a\xcf"
- "\x8f\xc1\x31\x6b\xca\xda\x32\x5a\x87\x12\x7d\x71\xf9\x94\xc6\xcf"
- "\x2d\xa3\xd9\xeb\x57\xea\x5c\x3c\x8b\xf1\xf5\xf4\x3b\x23\x94\xf4"
- "\xfa\xe8\xf7\xf0\x3c\x5c\xc8\xdf\x1d\xcf\xd3\xa5\xb5\x0f\xa5\xd3"
- "\xca\x61\x83\x71\x1d\x53\xbc\x96\x79\x2e\x0f\x52\x1e\xe1\x3c\x3c"
- "\x9b\xde\xeb\xa6\x06\xca\x9f\x2b\xfe\x3f\x0d\x98\xd3\x7b\xa2\xb7"
- "\x93\x7a\x67\x0b\xe3\x5f\x5a\x7d\xc6\xeb\xf1\xb9\x96\x7d\x7e\x5a"
- "\xba\x60\x88\xaa\x78\x49\x2b\xaa\x51\x6c\xe9\x0b\xef\x46\x41\x1d"
- "\x48\xd1\x0f\xf9\x69\x4d\xdb\xc6\xeb\x8f\x03\x0f\x70\xba\x4f\x53"
- "\x6a\xf1\x5f\x37\x7c\x9e\xce\x99\x50\x84\xfb\x81\x8a\x53\xfe\x0a"
- "\xbc\xd9\xe2\xd1\xea\x13\x9d\xaa\x7a\xc1\x93\xbe\x44\x9e\x0d\xa7"
- "\xdb\x63\x7e\x96\x56\xaf\x9b\xa1\x38\x7f\x5a\x35\x3d\x14\xce\xb9"
- "\x9a\xb2\xdf\x0c\x85\xe7\x70\xb9\x01\xd7\xd1\xf0\x8c\xc5\x2f\xe0"
- "\xfb\xbe\xbd\x03\x9e\x95\x5a\x3f\x15\xf2\xfe\xeb\xf4\xd0\x8f\xd6"
- "\x36\x53\xf8\x9c\x49\x7b\x53\x03\x7c\x77\xa7\xb3\xfe\x7c\x7e\xe7"
- "\x00\xe4\xba\xfb\x1d\x84\x76\xbd\x83\xdc\x9a\xb2\xde\xd6\xea\x5c"
- "\xdd\xf3\x48\xdd\xb7\xc5\x9d\x82\x34\x3a\xc5\xdb\x09\x34\xf0\x97"
- "\xb9\x97\xf7\xb8\x10\x3b\xf7\xba\xd8\x7e\xaf\x6d\xe3\x42\xf0\xbd"
- "\x48\x8c\x6e\x6a\xc8\x5f\x92\x87\xa9\xe0\xbe\x50\x1c\x3f\x1c\x3b"
- "\x73\x1e\xa6\x6c\x73\x1e\x5b\x8c\xf8\x7a\xb8\x67\x25\xfd\xc1\x7d"
- "\xa1\xa6\x6d\x61\xa1\x70\xed\x41\x7c\xde\x33\x0d\x35\xd0\xf0\x17"
- "\xdf\x9f\x60\x01\xb1\xa7\x52\x11\xce\x9f\x66\x8f\xd1\x70\x4c\xa7"
- "\xc8\xf0\x35\x81\xbc\xc6\x6d\x53\x9d\x22\x83\xe9\x9b\xa0\x95\x23"
- "\xaa\x08\xc6\x19\xcb\xd6\x54\xd2\x26\xf8\x19\x47\x55\x22\x97\xe2"
- "\x17\x30\xbe\x19\x5a\xd5\x94\x3e\x10\xe3\x8c\xec\xf6\xd8\x0e\x9b"
- "\x8e\xe3\xa3\xdc\x3d\x00\xca\xfb\x5b\x7d\x8b\x68\x4a\x85\x30\x3e"
- "\x38\x56\x10\x27\x04\xc7\xdd\x30\x4f\x9b\xb2\x32\x8a\xad\xe2\xa5"
- "\xfc\xc3\xd4\xf5\xb4\x45\xde\x9b\x69\x82\x9b\x3b\x9b\x5e\xaf\x73"
- "\xe9\xab\xc7\xe9\x55\x0f\x30\x9c\xf1\x60\x71\x65\xb8\x85\xe3\x47"
- "\xfb\x44\x14\xe2\xff\xbf\x34\x12\x29\x3d\x2b\x11\xa5\x4a\x19\x5e"
- "\x44\xb8\x30\xa1\xc8\xcc\x13\xe6\x1d\xb7\x8d\x72\x33\x6e\x80\xb6"
- "\xb6\x9d\x7f\x99\x09\xc6\xec\x11\x95\xad\x3e\xcf\x26\xb6\xe4\x8e"
- "\x0d\xa1\xb5\x23\x2a\xf1\xfc\xf3\x4b\x8a\xcc\x38\x26\x06\x1b\xdc"
- "\x10\x79\x8e\x11\xe7\x53\x12\x68\x7d\xca\x4d\xb8\xd7\xc0\x67\x13"
- "\x3f\x5d\xad\x07\xbc\xc6\x86\x60\x3e\x1c\xbf\xdd\x4c\xe1\x35\x01"
- "\xe9\xfe\x7f\xbe\xbd\x0b\xde\x35\x1f\x38\x01\xef\x8a\x70\xbe\x4d"
- "\x59\x99\x07\xb9\x77\xcd\x8c\xc2\xdc\x80\x7b\xd4\xb2\xdc\x77\x87"
- "\xe7\x72\x81\xbc\x6b\x21\xdd\x79\x9d\xcb\xb1\x10\x73\x4c\x98\x7b"
- "\x73\xe9\xd8\xb2\x94\x59\xaa\xf7\x1a\x51\xdb\xb6\x9a\xae\xdc\xfa"
- "\x3d\xe4\xbf\x01\xd1\xad\xb7\xe9\xb2\xe4\x28\xba\x39\xeb\x65\x3c"
- "\xce\xb1\x1a\xad\x9f\x87\x06\xdf\x93\x46\xeb\x23\x8d\xc8\xf3\x9e"
- "\x6a\x4f\xfa\x6c\x54\x35\xb3\x37\x42\x72\x25\x5d\x5b\x9e\x78\x02"
- "\x25\x5f\x46\xee\xeb\x16\x22\xef\xf5\x51\xf0\x2e\x65\x74\x73\x45"
- "\x52\x35\x2a\x6f\x80\x5f\xe2\x59\x48\xf7\x1d\xfc\x4e\xa0\xf5\x6b"
- "\x90\xeb\x14\x68\xf7\x52\x1a\x91\x7b\x79\x62\x23\x1c\xbb\x8e\x92"
- "\x63\x68\xc3\xd9\x32\x9c\xee\x34\x8a\x34\xe8\x3d\xd7\x5d\x07\x4c"
- "\x5f\xc6\x73\xba\x2f\xa2\xdd\xf0\x2c\xad\x5e\xbb\x52\x5b\xb2\xf7"
- "\xba\xdd\x5a\x4d\x1b\x9a\xb2\xb2\xf6\xe8\xd0\x53\xc5\xbc\x77\xc1"
- "\xcf\xdc\x8a\x10\xe0\xe6\x82\xd3\x98\x72\x9f\x52\xce\x35\xe0\xfa"
- "\x25\x2b\x07\x74\x07\x32\x9f\xc7\xe7\xf4\x3e\x4f\x29\xe1\x78\x71"
- "\xa4\x81\x6e\xc2\xf1\xc1\xef\x0d\x31\xaa\x61\xdf\xbf\x46\x91\x88"
- "\x5c\x9b\xb2\xb6\xba\xea\x5c\x8a\xdc\xf1\x3d\x20\xcf\xde\x70\x9f"
- "\xed\x98\x1b\xec\x39\x95\xce\xe5\x7f\xa6\x71\x7c\x79\xbb\x1a\x38"
- "\xd2\xdb\xfc\x2c\x70\x3e\x54\xe7\xf2\xf7\x59\x16\x7c\xc2\xfc\x68"
- "\x3f\xcf\xb6\x67\xf8\xf8\x1e\x13\xae\x5b\x95\x2a\xbd\xd1\x67\x42"
- "\x31\x94\x99\x4a\xfa\x96\xaf\x3b\x4d\xd1\xcd\x53\x0c\x74\xb3\x29"
- "\xf7\x61\xdc\x96\xb9\x57\x18\x1a\x10\x49\xbf\xf5\x32\x94\xb5\x2a"
- "\x32\x86\x74\xeb\x59\x9c\x27\x68\x9b\x98\xac\x7a\xa4\x8c\xac\xa4"
- "\x9b\x71\xf9\x35\x65\xb7\x46\x65\x2d\x47\xde\x74\xee\x84\x42\x93"
- "\xcf\xb8\xe2\x96\xbd\xd1\x5a\x5c\xc7\x62\xfe\xd2\x5a\xb8\x96\xcd"
- "\x07\xee\xdb\x4b\xa7\xd8\x5a\x60\x82\xeb\xe9\x9c\x87\x95\xec\xf3"
- "\x30\xf5\x21\xa9\x47\xb7\x16\xd0\xfe\x70\x4e\xab\x6a\x80\x73\xbd"
- "\x2e\x29\xb4\x21\x70\x1c\xd1\xda\x61\xea\xe2\x94\x7a\x48\xab\x1d"
- "\x43\x38\xa4\xd2\xf3\xfe\x4f\xe1\x78\x66\x04\xe0\xf2\x4f\x74\xa8"
- "\xf6\x25\xae\xdc\x31\xef\xcb\x94\xab\x56\x9f\x87\xa1\xdc\x69\xe3"
- "\x75\x2e\xf7\xfa\xb2\x31\x76\x69\x20\x75\xd2\x41\xd3\xde\xe8\xed"
- "\x5f\x82\xf2\xfb\xb2\x0c\x21\x48\x93\xa1\x73\xf1\x51\x73\xb1\xd4"
- "\xee\xc3\x69\x99\xe7\x84\xb2\x69\xda\xc0\xb6\x01\x70\x0d\x94\x9b"
- "\x18\x5c\xe7\x90\xba\x4d\xbb\x07\xd7\x3b\x50\x3e\x4b\x49\xbd\x7f"
- "\x9f\x2f\x3c\x97\x86\x1e\x30\x33\x14\x9e\x2b\xf5\x12\xfb\x2c\x96"
- "\xcf\x66\xae\x67\xe8\xec\x99\xc5\x24\xed\x08\x7d\x53\x56\xb6\xbb"
- "\xce\x65\xa0\xab\x25\xd7\xc8\x7b\x65\xa7\x8d\x2a\x83\x7f\x83\x2e"
- "\x31\xe7\x05\x65\xd5\x0d\xb4\x44\x7f\xcc\x29\x5c\x3e\x77\xbc\x83"
- "\xb5\xc6\xcc\xd2\x96\xec\x99\x50\x4e\xb3\xa7\x99\xcb\xa9\x69\x35"
- "\x5d\x05\xb8\x22\xd3\x6d\xfa\xfc\x56\xc0\x32\xd2\xa8\xa0\xe7\x1a"
- "\xd5\x08\x74\xab\x61\x37\x1c\xdf\xbd\x1a\xeb\xbe\x2c\x2d\x94\x65"
- "\x37\xe1\xb4\xae\x08\xa7\x63\xd2\xb3\x69\x5b\xbd\x66\x96\x32\xcf"
- "\x4c\x29\x4c\xf0\x7c\x2e\xe6\x67\x6a\xf5\x1a\x51\x0d\xf7\xae\xd4"
- "\xb9\xb8\x86\xf2\xca\xcb\x3b\x2a\x25\x4d\x47\x63\x5e\x29\xe0\x5d"
- "\x1a\xe1\x6f\x1f\x96\xc7\xf7\x7c\x09\xba\x36\x2c\x02\xca\x0a\xe0"
- "\xbd\x73\x20\x0d\x31\x78\x47\xa9\x43\x73\x73\xf0\xf5\x5b\xe0\xff"
- "\xf8\x38\x4e\x03\xc7\x03\x74\x28\x66\x23\xc9\x37\x63\x2c\xc6\x8f"
- "\x9f\xef\x3b\x11\x24\x5f\xe6\x59\xee\xc1\x79\xe2\xeb\x70\x9e\xf9"
- "\xdb\xe8\x3a\x9c\x0f\xe4\x91\x60\xce\x3b\x13\x8e\x99\xf3\x0f\x5b"
- "\xdc\x7e\x8f\x0c\xb8\x87\xbb\xe5\xb3\xef\xd8\x46\x37\xb0\xcf\xb5"
- "\x5f\x87\xe2\x63\xf1\xb9\xcd\x70\x0c\x5f\x4b\x38\xf2\xce\x69\xcc"
- "\x1f\x1d\x79\x1f\x05\xe1\xd1\x3b\xe7\x75\x68\x41\x9d\x65\x1d\x0f"
- "\x38\x79\x98\xdb\x00\x36\xbf\x66\x73\x7e\x5c\x5e\x24\x0f\x5a\x3b"
- "\xab\x88\x2d\x23\xb8\x2c\xbb\xe3\xfc\x9b\xb2\xde\x85\xf7\x9f\x3f"
- "\x9a\x7d\xff\x80\x06\xc2\x79\x88\x3d\x73\x0d\xe1\x43\x56\xfa\x60"
- "\x73\x5b\x0e\x58\x54\xc1\x35\xb3\xac\xda\x26\x37\xd2\x6e\x4c\xd0"
- "\x61\xde\xb0\xf7\x18\x83\x9f\xc9\xfc\xbe\x90\x8f\x2b\xe4\xf3\x30"
- "\xe6\x3a\xce\x07\xea\xb6\x3d\x90\x4f\x81\x55\x3e\xae\x38\x9d\x29"
- "\x2b\xfd\x15\xdc\x16\xbe\x3b\x90\x86\x3a\xff\xdd\x52\x73\x1a\x7c"
- "\x1e\xe2\xfa\x34\x1c\xab\xd6\xa1\xc5\x4c\x1c\xb2\x20\x8d\x4e\x91"
- "\x2e\x3a\x3f\x26\x65\x18\xa2\x2a\xf2\x74\xd8\x3b\xe2\x72\x3d\xb6"
- "\x62\x70\x03\xaa\xc8\x33\x21\xd3\x07\xf7\x15\x87\xa6\xd0\xc5\x57"
- "\x14\x39\xd3\xcb\x9b\x6b\x91\x34\xbd\x97\xc3\xcc\x7f\xa3\x5b\xc1"
- "\xe3\x24\x3f\x8a\x70\xfb\x7f\x43\x91\xbb\xb9\x42\x5f\xcf\xd4\x71"
- "\xf0\xef\x55\xf8\xfc\xbb\xe0\x89\xb0\x2f\x02\xef\x1b\xaf\xa5\x88"
- "\x37\x32\x41\xda\x5d\xf8\x38\xf6\x4d\xe0\xd9\x76\x5b\x9c\xa3\x3f"
- "\xf0\x0b\x25\xb1\xcb\x1d\xcf\xb4\x79\xf8\x79\x0d\xcf\x17\xe3\x67"
- "\x36\x15\xf8\x85\xe2\x77\x58\x9f\x44\x9b\x2a\x0c\x4d\xc5\xe5\x0d"
- "\x46\xa4\x5a\x8d\x3d\x5d\xee\x90\xc8\x7c\x44\x43\x1d\x28\xd1\x53"
- "\xe5\x30\xe3\xff\xc0\xf7\xde\xd0\xfb\xfb\x85\xae\x37\x22\x6a\x6b"
- "\x4a\x2f\xb7\x67\xf3\xe8\xe2\x5b\x0f\xdd\x57\xdc\x94\x95\x1b\x7a"
- "\x2a\x09\x21\xe9\x5a\x38\x37\xd4\xfc\xee\xbb\xd8\x77\x87\x7b\x31"
- "\xf5\xd2\xa8\xed\xa9\xcc\xfb\x42\x9a\x24\x31\xbc\xe8\x0d\x9e\xf4"
- "\x97\x79\x06\xb4\x22\x8f\x6e\x5d\x91\x8f\x28\xe3\xb6\x51\xda\x8f"
- "\x76\x55\xe1\xfa\x3c\xd4\x1c\x4f\x26\x76\xe0\xf7\x13\x53\x90\xf2"
- "\x9a\x62\xdb\xb0\xc8\xe4\x54\x66\x8f\xa4\xcf\x21\x9d\xc4\x67\x65"
- "\xfa\xff\xca\xc1\x47\x47\x1a\xd6\xd3\xa4\x4d\xda\x36\x69\x0a\x9b"
- "\x1f\x3e\x67\xc6\x6f\x17\xeb\x6f\xa5\xdf\x63\x9b\xe8\xfc\x7f\x3b"
- "\xef\xaa\x14\x7e\xd7\xbf\x78\xc8\x7f\xd7\x6d\x55\xb6\xef\xfa\x97"
- "\x31\x9d\xfb\xae\x7f\x19\x2b\xe3\x5d\x55\x22\xef\xda\x22\xff\x5d"
- "\xff\x52\x62\xfb\xae\xdb\x87\x75\xee\xbb\x6e\x17\x5d\xff\xc9\xce"
- "\xbb\x86\x08\xbf\xeb\xf6\xcb\xf2\xdf\x75\x7b\xa1\xed\xbb\xee\xf0"
- "\xe8\xdc\x77\xdd\x21\xba\xff\x29\x4d\x79\xd2\xb8\x7e\x82\x7a\xa9"
- "\x35\xa5\x05\xb4\xdc\xb6\x89\x51\xeb\xf6\x22\xaa\xac\xa1\x19\x95"
- "\x0f\xae\xc2\x3a\x99\x7a\x38\x11\xea\xbd\x0d\x68\x2c\xfd\xce\xcd"
- "\xa8\xf2\xbc\x3a\x38\x7e\x05\x9d\x4d\x6a\x46\xa1\xcb\x71\xfd\xbb"
- "\xe3\x42\x45\xac\xd4\xfa\x77\x47\x41\x7b\xfd\x6b\x78\x94\xad\x73"
- "\xdf\xeb\x55\x5e\xd7\x8a\xf0\xfb\xdf\x50\xec\xbc\xd9\x5e\xff\x6e"
- "\x20\xf1\xb6\xae\x7f\x71\x3c\x2a\x9a\x9b\x79\xf5\x2f\x99\x27\xb5"
- "\xf3\xa4\x75\xdd\x9b\x75\x0d\x21\xe1\xba\x77\xe7\x0e\x5c\xf7\xee"
- "\x82\xf3\xd2\x9e\x7f\x67\xac\xb9\xee\xd5\xc2\x3d\x2d\xeb\xde\x2f"
- "\x63\x71\x9b\xbc\xf3\x84\xbc\xba\x77\xe7\x09\xf3\x7b\xe7\xb3\xef"
- "\x0d\xc7\x54\xfc\xba\x77\xa7\xe8\x5e\x97\x96\xbc\xa5\xb7\x05\x26"
- "\x7e\x34\xb4\xb9\x97\xa9\x60\x70\x2a\x6e\xdf\x9a\x20\x26\x7f\xdf"
- "\xd5\xec\x7a\x45\xf1\xde\x4a\xa6\x3f\xb3\x29\xd6\x85\x2e\xb8\x2f"
- "\x20\x72\x25\xfd\x03\xed\x3f\x38\x15\xf7\x55\x62\xcf\x0d\xe7\x0f"
- "\xd0\xfb\xee\x0b\x90\xf6\xdc\x24\x4f\xfa\x83\x41\xc5\x29\x50\x5e"
- "\x3e\x5a\xdd\x4c\x99\xde\x88\xf6\x04\x1c\x94\x74\xee\xc3\x85\xf4"
- "\x5b\xbe\xc9\xb7\x72\xc3\x54\xa7\x03\x2e\x23\x9c\x96\x4e\x73\x1d"
- "\x2b\xff\xf9\xf3\x46\xdb\x7f\xfe\xbc\x85\xd2\x9f\x9f\xe4\xe9\xd8"
- "\xf3\xe7\x8d\x76\xe8\xf9\x07\xc2\xf3\xb7\x6a\x7a\x81\xff\xa3\x3e"
- "\x6f\xd5\xb8\x4a\x7c\x1e\xd1\xfd\xef\x3a\xef\x1e\xf9\x0e\xd7\x7f"
- "\xf4\xc0\xa7\x0a\x3f\xda\xa5\xa7\xa0\x0e\x60\xda\x70\x5c\xf6\x48"
- "\xfd\x57\x0b\x75\xd6\x0f\x34\xa9\x93\xf4\x12\xeb\xa4\xfc\xfd\x8e"
- "\xdf\x3f\x44\xd9\xf9\xf7\xdf\x25\xfe\xfe\xd6\x75\xe2\xe1\x21\x7b"
- "\x44\xeb\xc4\x6d\xa3\x94\xb6\x75\xe2\xae\xeb\xd2\xeb\xc4\x5d\x45"
- "\xb6\x75\xe2\x9e\x41\x5c\x9d\xb8\xa7\x97\xfc\x3a\x71\xf7\x39\xc7"
- "\xeb\xc4\xdd\x87\xe4\xd5\x89\xbb\x93\xec\xd7\x89\xbb\x2b\xe5\xd5"
- "\x89\xbb\x2b\x6d\xeb\xc4\xdd\xa3\xf9\x75\xe2\x1e\x37\x51\x2c\xb5"
- "\x9e\x55\xd0\x46\xbb\x5f\x53\xec\xa9\x32\x6c\x00\xdf\xa2\x4d\xd7"
- "\x44\x1a\xe9\x26\x3a\xdb\xb3\xca\x44\x8d\xc6\xf5\x4a\x68\x53\x53"
- "\xbc\x9b\xe9\xf5\x00\x77\x7a\x80\x6a\x17\xdd\xe6\x8b\x20\x4e\xc3"
- "\xe1\xf9\x3d\xe9\xa6\x80\xfe\xf4\xeb\x01\x03\xf2\x6e\x23\x6f\xf8"
- "\xf9\xe6\xb1\xed\x31\xfc\x3b\x84\x7e\xdd\xb7\x5f\xd6\x6a\xa4\xf6"
- "\x6c\x40\x6e\xf0\x0c\xd1\x9e\x69\x4a\x04\x75\x90\x37\xfe\x37\xbd"
- "\xa1\x60\xec\xee\xdb\xc8\xd5\x33\x09\xb0\xf1\x82\xfb\x25\x79\xd2"
- "\xf4\x8a\x00\xb4\x7b\x39\x78\x69\x0a\xf9\xee\xa2\xe8\x42\x43\x53"
- "\x00\x65\xf4\x9e\x50\x49\xf0\xd9\x9b\x41\x0f\x04\xef\x95\x33\x21"
- "\xcf\x34\x70\xc2\x46\xe3\xfa\x78\x05\xfd\x46\xb4\x02\x3f\xab\x31"
- "\x67\x42\x2a\xbd\x0d\x7e\xeb\xe3\xfb\x63\x0d\x0d\x5e\x3b\x84\x6e"
- "\xf2\xed\x07\x3e\x5c\xbd\x6b\x35\x1a\x9e\x7f\x1b\x05\xd0\xb7\x02"
- "\x28\xc0\x3f\x1a\xef\x35\x0a\x31\x8a\x36\x51\x05\x63\xe1\x9c\x2b"
- "\xae\x13\x69\x7c\x7f\x03\xdc\xbf\x0d\xee\xdf\x8a\xb9\x8d\x7c\x77"
- "\xc3\xfd\x8d\xaf\x07\x48\x2c\x2f\x7b\x99\xf1\xbf\xe6\xe7\x32\xa9"
- "\xfd\xf7\xd0\x87\xe1\x87\x9f\x0b\x62\xb8\x1b\xc7\xe4\x61\xff\x02"
- "\xfc\x6c\x99\xb7\x91\x1a\x9e\x73\x38\x3c\x43\x00\xdc\x17\xaf\xd3"
- "\x12\x3d\x67\x99\x12\x73\x94\xf7\x6c\xc6\x6c\xf6\xd9\x7e\x81\x67"
- "\xbb\xc1\x3d\x1b\xbe\x17\x8e\x8f\xd8\x37\xd0\xc8\x75\x43\x71\xd9"
- "\xfc\xc9\x33\xa9\x4f\x38\xfe\x1e\x7a\xeb\x8d\x78\x89\x5c\xfd\xab"
- "\xe8\xfa\x27\x5b\x0f\xa3\xc1\xb4\x72\x83\x66\xca\xa6\x1f\xe8\x48"
- "\x03\x42\x9b\x0e\x23\x75\x05\x94\xeb\xf2\xe6\xeb\x88\xf6\xda\xa0"
- "\x39\x1d\x50\x27\xf5\x5e\x5a\xb1\x7b\x6d\xd9\x40\x57\x9a\xbc\x27"
- "\x14\xd3\xde\x61\xbe\x5b\x37\xd0\x49\x6d\xc3\xfd\x62\x5a\x87\xdf"
- "\x17\x32\xd7\xa0\x04\x5e\xd3\x49\xaa\xe5\x48\x75\x45\xb1\xff\xbb"
- "\xaf\xcf\x83\x2f\x9d\x81\xdc\x2e\x29\x0e\xb8\xaf\xbf\x80\xbf\x15"
- "\xbd\xaf\xe2\x7f\x2b\x7a\x3f\x0c\x29\x0a\x8e\x22\xc5\xbe\x12\xa4"
- "\xf8\xa0\x16\x41\x3a\xfe\x6f\xbf\x2b\xc9\xab\x20\x3b\xf2\xc0\x50"
- "\x94\x62\xa0\x7f\xa2\xb5\xf5\xe9\x59\x14\xdd\x1c\x39\xd2\x45\x57"
- "\xbc\x1a\x7f\x43\x29\xd8\x0c\x31\xfd\x19\xda\x5a\x4f\xf8\xf7\x4b"
- "\x80\x29\x4a\x5c\x8e\xee\xbd\xa6\x28\x98\x86\xcb\x8d\x67\x43\x9f"
- "\x70\xe3\xfa\x68\x64\x50\x45\x6b\xdb\x72\x26\x14\x1a\x73\x1e\x56"
- "\x9a\x94\xe9\x9a\xf5\x57\xd1\x60\xfc\xed\x13\xca\x46\xf4\x5c\xa3"
- "\x1b\x2e\x8f\xd1\xc5\xf3\xbf\x46\x57\x56\x22\x6a\x7d\x23\xf2\x00"
- "\x6e\xb6\x97\xab\x88\x3a\xcf\xe6\x75\x75\xb4\x09\x97\x2d\xdc\xa7"
- "\x0a\xe7\xfa\xa7\x34\x82\xbf\xd7\xd7\xa2\xbc\xe5\xc8\xdb\xb8\x22"
- "\x7e\x80\xfe\x56\xfc\xbd\xef\x99\x90\x77\xff\x06\xa4\xcc\xab\x07"
- "\x4e\xad\x00\x3e\xd5\x43\x39\xd3\x93\x72\x86\xe7\xda\xef\xc2\x65"
- "\x6c\xcb\x37\xde\xbb\xeb\x49\x19\x63\x78\x84\xcb\xd8\x52\xe0\xd1"
- "\x12\xdc\x7e\x00\x8f\x36\x40\x19\x83\x72\x41\x67\xfd\xd5\x35\x6f"
- "\x03\x8d\xd6\x2d\x44\xd4\xee\x6b\x7d\xf0\x39\x97\x5e\x23\x29\xd5"
- "\xd7\x51\xcd\x88\xeb\xeb\x38\xe0\xd1\xea\x7f\x5f\x88\xea\x05\xfa"
- "\x97\x4b\x8a\x82\x54\x38\xee\xa6\x7a\x79\x84\x12\xe2\xcd\xf6\x49"
- "\x1f\x70\xc7\x7d\x9c\x3a\x88\x05\x8e\x8b\xea\x05\x34\xe2\x92\xe2"
- "\xfd\x97\x70\x1c\x5f\xdf\x8f\x14\x89\x4f\xd3\x35\x10\xb3\x59\xa4"
- "\x1f\xf7\xfd\x69\xcc\x37\xd4\x34\x15\xfa\x86\xf9\x76\x45\xae\x31"
- "\x42\xdc\x0c\xca\x9b\x55\x80\xb7\xae\x78\x51\x2b\x53\x0f\xe1\x38"
- "\x5e\x49\x40\xd4\xdc\x3a\x88\x95\x11\x62\xd5\x14\xe0\x0e\xf5\x51"
- "\x14\xae\x8f\x68\xad\x6a\x7b\xb2\x8e\x36\x45\xc6\x2a\xe8\x94\x65"
- "\xc8\xad\x22\xc9\x88\xe6\x24\x22\x7a\xdd\x75\x88\x57\x43\x15\x82"
- "\x7a\xa9\x3f\xd4\x59\x03\xf2\x57\x23\x6f\x1c\x2f\x8f\x3a\xd0\x2a"
- "\xef\x6c\x0c\x39\x9c\x52\xda\xcb\x08\xfc\xc5\xf5\x93\x67\x9a\x4b"
- "\x5f\x28\x67\xfd\x33\x70\x79\x84\xf2\xe9\x99\xc6\xd4\x97\xd1\x79"
- "\x50\x0e\x0d\xaf\x07\x3c\xd0\xf6\x7a\x80\x0a\x7e\x43\xcd\x75\x98"
- "\xb9\xfe\x80\x98\x25\xe0\xfa\xab\x22\x49\x87\x0c\x10\xdb\xfe\xb8"
- "\xad\x7b\x3d\x60\x30\x13\xe3\x57\x03\xd0\xa8\x66\xe4\x02\xcf\xa4"
- "\x84\xe7\x45\xbb\x17\x20\xb7\xb3\xf1\x97\x90\x11\xca\x86\x39\xee"
- "\x11\x0b\x55\x08\xf2\xa5\x4e\x07\x7c\x87\xd8\x98\xb9\x88\xf3\xee"
- "\x83\x1f\x39\xde\x7d\xc0\xcc\x8b\x25\xbc\xfb\x40\xf7\x5b\xe4\xdd"
- "\x37\xd1\x0c\xef\x14\x6d\xfe\x0c\x9f\x66\x55\x18\x3e\x86\x18\x7d"
- "\x50\x86\x39\x82\x39\x73\xe6\x6f\x98\x33\xff\xa7\xa1\xbb\x72\xa6"
- "\xa5\x29\x40\x05\xbf\x3b\xc2\x19\xc8\x97\xe1\x0c\x8e\xd5\x37\xd1"
- "\xad\xc8\x1c\x23\xa6\xac\x6a\x37\x68\x54\xeb\xd1\x33\x50\x56\xdd"
- "\x3d\xd3\x86\xa2\xb3\x4c\x9c\x0e\xb8\xab\x5e\xa6\x4d\x97\x14\xfb"
- "\x83\xd7\x9f\x43\xca\xd6\x0d\x34\x5d\x61\x38\x84\x4c\xde\xe3\x8a"
- "\x99\xef\x81\xda\xd6\x28\xf0\xac\x1a\x1a\x7f\x87\xdf\x00\x98\x25"
- "\xe2\xbe\xf0\x37\x43\x8d\xb9\x11\x85\xa6\xec\x0d\x89\xb4\xd7\x5e"
- "\x64\x84\x72\x6d\xca\x9e\xaf\x34\x79\xed\x8c\x6a\xca\xda\xbf\x52"
- "\x87\x4e\x95\x32\xdf\x7f\x73\x26\x14\x43\xdd\x80\xeb\x5f\x66\xbc"
- "\x27\xfe\x4e\x0f\xe7\x73\xcc\xdf\x97\x71\x9d\xc0\x7e\x7b\x60\xbf"
- "\x4d\xec\xc7\x18\xf6\xc3\xdf\x26\x48\x9d\xb2\x7f\x93\xf9\xdb\x84"
- "\xf9\xff\xf8\xbc\x4e\xb1\x3f\x1d\xf7\xab\x72\xd7\x1d\x70\x25\xe9"
- "\xcc\xd7\xbd\xdf\x17\xd7\xf5\xdc\x75\xe4\xff\x50\xaf\xb8\xb6\x51"
- "\xc8\x4d\x50\xe3\x78\x47\x14\x42\xf9\x01\x6f\xf4\xb7\x4d\xf0\x97"
- "\x82\xb8\xec\x83\xbf\x0a\xf8\xcb\xf4\x63\x4a\x6b\xaf\x0e\x84\x92"
- "\xef\x43\x61\x61\x6c\xdd\x38\x9e\x29\x93\x81\xc8\xe3\x1a\xfb\xef"
- "\xa6\xac\x03\x79\xe6\xef\xe4\xed\xe9\x39\x7c\x34\xf8\xde\x80\x91"
- "\x2b\xf9\x76\x4f\xfe\x8f\xc7\xc5\xb0\xf9\x31\xff\x37\x0d\x1f\xa2"
- "\x2a\x4e\xb9\x84\xea\x14\x7f\x73\xab\x80\x36\xdc\xb4\x2d\x2c\x6c"
- "\xeb\x6d\x28\x03\x49\xed\x75\xf2\x78\x28\x8b\x6e\xc5\x6b\x71\x9a"
- "\x03\xcc\x5e\x3a\xa6\x9c\xa7\x54\xf4\x3b\xf5\x51\xd8\x0b\x36\xd1"
- "\xf1\x4f\xb3\x7f\xc7\xe1\xf2\x44\xfa\x4d\xfe\xf6\x12\x0d\xd8\xe2"
- "\xbd\xd2\xdb\xc7\x0a\xe1\x3d\xcc\x53\x5d\x07\x9f\x4a\x26\x6d\xa5"
- "\xf9\x79\xf1\x3e\xe7\x78\x2c\xce\x88\x54\x94\xda\x24\xb0\xcf\x39"
- "\x37\x66\xe7\x6f\xa1\xa6\xdc\xa7\x00\xfb\xbf\x69\xa1\x2d\xaf\xb4"
- "\x7c\x67\x21\x2c\x20\xfd\x41\xb1\x73\xd2\x70\xf8\x5b\xa9\x58\x3e"
- "\x13\x03\x8c\xb4\xb4\xbc\x3e\x14\xef\xff\x19\x3e\xa8\x38\x72\xbf"
- "\xb1\xd8\xd4\x16\xed\x79\x3a\xf9\xba\x44\x6d\xf3\xa1\xe8\xfa\x7f"
- "\xc6\x9c\x71\xba\xb6\x87\x06\x15\xe3\xef\x14\xc6\xa5\xd1\xcf\x97"
- "\xef\x37\xa0\x03\x4b\x6a\x29\x5c\x1f\x1e\xbc\x56\x48\x45\x8e\x64"
- "\x35\x5c\x0d\x52\xe2\x7e\x2f\xac\xe5\xb2\x6e\xa0\xe1\xad\xeb\xa3"
- "\x3d\x5b\xdb\xa2\xd1\xdb\x37\xd0\x58\xd3\xab\xbe\xfd\x32\x16\x20"
- "\xd7\x16\xa8\x0b\x5b\x7e\x8a\xf7\xfc\xa6\xba\x16\x7d\x0e\xd7\x96"
- "\x37\xe8\xd0\x2e\x48\x4b\xff\x14\xdd\xff\x8f\x31\x74\x73\x59\xcc"
- "\xc7\x28\x32\xc0\x58\x9c\xf2\x23\xf2\x80\x3a\x51\x59\x91\xb4\x8f"
- "\xf9\x9e\xdb\x6b\x0d\xa5\xaa\x30\x5c\x46\x99\x0b\xa0\x2e\x85\xba"
- "\x73\xfd\x4b\xd0\x66\x00\x27\xde\xb3\x6c\x33\x16\xed\xe4\xda\x8c"
- "\x5f\xa0\xcd\x78\x07\xda\x8c\xf5\xbe\xa8\x3c\xb1\x18\x41\x1d\xd6"
- "\x67\x4a\xa2\x67\x73\x4a\x22\xb4\x1d\x6b\xa0\xed\x48\xba\x8c\x98"
- "\x76\xa3\xae\x16\x41\x9d\xdf\x3f\x7f\x09\xf2\x6e\xfd\x05\xda\x8e"
- "\x5f\xa0\xed\x48\x21\x6d\xc7\x8e\x1b\xd0\x76\x2c\x05\x6f\xb0\x04"
- "\xda\x8e\x3a\x81\xb6\xe3\x86\xb0\x2f\x30\xd7\x83\x2d\xbf\x04\x50"
- "\x3b\xa0\xdd\x58\xfb\x1d\xa2\x76\xbc\xdc\x47\x22\x67\x0e\x8a\xce"
- "\xff\xa5\xb7\x85\x3d\x68\xa2\xa3\x11\x8e\xfb\xda\x66\x68\x87\x01"
- "\x97\x8a\x00\x03\xf2\x3c\xdf\x27\xbc\x05\x8e\xb7\x0d\x0c\xd4\xee"
- "\xff\x5e\x4f\xd1\x39\x0f\x17\xb6\x00\x6e\x6b\x57\x21\xaa\x0d\x30"
- "\x3c\xf8\x82\x96\xc2\x3e\xd1\x94\x1b\x78\x9e\x78\xd2\x8f\x7c\x70"
- "\x9f\x88\xa7\x8e\xe0\x66\xa0\xa3\x3d\xe9\x57\xa2\x3d\x32\xe7\x23"
- "\x57\xe3\x7f\x7d\xfb\x99\x5e\xf1\x75\x4b\xf9\x0e\x29\xf5\xaf\xc4"
- "\x43\xbc\xae\xa3\xcf\xbf\xd5\x52\xbb\x67\x20\x15\x5e\x17\x91\x7e"
- "\xeb\x8b\xaa\xdd\x73\x90\x66\xf7\x7f\xd0\xe8\x5d\x33\x90\x3a\xff"
- "\x7b\xbc\x7e\x3a\x60\x58\x4b\x37\x9f\x8d\xff\x14\x7f\x63\x0f\xa5"
- "\xb7\x05\x6b\x69\x9f\x71\x3a\xf8\xb7\x46\x3b\x03\xfc\x03\x9c\x8f"
- "\x0c\x68\x29\xae\x48\x3a\x8b\x32\x2e\x21\x94\x72\x95\xc5\xb8\x1d"
- "\xdf\x8b\xc8\x40\x41\xfd\x81\x35\x41\x04\xc1\x17\x7f\xf7\xc2\x9e"
- "\xa3\x1d\xe3\x05\x5f\xf0\x75\x01\x8b\xf1\xd9\xba\x4a\x04\x6d\x60"
- "\x9f\x76\x7d\xc0\x60\x7c\x11\x99\xb5\x01\x60\xd3\x1f\xb4\x80\x77"
- "\xcb\x2d\x2b\x7d\xb0\x5c\xa6\x3e\x60\xfd\x8d\x61\x45\x00\x95\x47"
- "\xd1\x68\xfd\x59\x44\x6d\x37\x49\xc5\xf8\xb0\x8e\xa9\x6f\x0b\xee"
- "\x0b\x20\x63\x64\x0e\xed\xc0\x58\xe8\x14\x87\xb6\xbf\x14\xe0\x82"
- "\xe4\x61\x1f\xa4\xb4\x8f\x7d\xd0\x34\x82\xfd\x11\x2f\x79\xd8\x07"
- "\x29\xe9\xb7\xbe\x0c\x91\x87\x7d\xa3\x44\xec\x99\xf5\x25\x7f\xa3"
- "\xd8\x17\x56\xf3\xb1\xff\x28\x97\x60\xff\x51\x8e\x13\xd8\x77\x50"
- "\xee\x83\xd8\x72\xff\x89\x87\x4c\xec\xa1\xdc\x7f\x99\x2e\x0f\xfb"
- "\xeb\x12\xb1\x67\xd6\xa8\xfc\x8d\x62\xff\x71\x15\x1f\xfb\x23\xd9"
- "\x04\xfb\x23\x5a\xf9\xd8\xab\x3b\x28\xf7\x6a\xb6\xdc\x1f\xeb\x2b"
- "\x0f\x7b\x35\x2e\xf7\x3a\x79\xd8\x5f\x94\x88\x3d\xb3\xce\xe5\x6f"
- "\x14\xfb\xa3\xe7\xf9\xd8\x7f\x92\x49\xb0\xff\x24\xc3\x09\xec\x3b"
- "\x28\xf7\x6a\xb6\xdc\xff\xbd\x97\x4c\xec\xa1\xdc\x97\x68\xe4\x61"
- "\x7f\x52\x22\xf6\xcc\x5a\x99\xbf\x51\xec\xff\xa7\x92\x8f\xfd\xb1"
- "\xcd\x04\xfb\x63\xe9\xf2\xb1\x0f\xee\xa0\xdc\x07\xb3\xe5\xfe\xb8"
- "\x8b\x3c\xec\x83\xa1\xdc\x97\x68\xe5\x61\xbf\x4e\x22\xf6\xcc\x7a"
- "\x9b\xbf\x51\xec\x8b\xca\xf8\xd8\xff\x7d\x13\xc1\xfe\xef\x1b\x1d"
- "\xc1\xfe\x0d\x4b\xec\xab\xfb\x84\x83\xb7\x62\x74\xfe\x81\x19\x2c"
- "\xf6\x1f\x00\xf6\xf0\xfe\x07\x5f\xde\x6e\xa5\xf1\x3f\x6d\x64\x70"
- "\x8f\x01\xdc\x93\x00\x77\xf0\x86\x66\xcc\x01\x23\x0f\x8c\x3b\xc6"
- "\x3c\xe5\x22\x52\x7e\x0e\xd7\x62\x7c\x30\xc6\x80\xa3\x8a\xc1\xb9"
- "\xf7\x17\x55\xb4\x8b\xab\x37\xc6\x13\xeb\x7e\x8c\x79\x47\xda\x1e"
- "\x73\xa2\x43\xcc\xa7\xde\x19\x7d\xdf\x6a\xdd\xff\xd7\x59\x98\x9f"
- "\x03\x0f\x97\x22\x15\xf3\x4f\x8b\xf9\x98\x1f\x5f\x87\x71\xd0\x29"
- "\x8e\x27\xcb\xc7\x5c\xad\x14\xc7\xdc\xdc\xc6\x9f\xb8\xea\x1c\xe6"
- "\x5f\xea\x38\xcc\xd5\x4a\xfb\x98\x5f\x94\x81\x79\xe7\xb6\xef\xdd"
- "\x0b\xf3\x13\x47\xf9\x98\xff\x63\x19\xc1\xfc\x1f\x89\x62\x98\x9b"
- "\xa0\xbe\xc6\x7d\xea\x78\xfe\x9f\xb1\x29\xfa\xf9\x36\xc0\x15\xcf"
- "\x03\xc4\x7d\xbd\x87\x96\x14\x51\x6d\x80\xfb\xd6\xd5\x68\x78\xc6"
- "\x6a\x34\xd6\xb3\x96\xd4\xdf\xad\x50\x7f\x6f\xbe\x8d\x5c\x4d\xaf"
- "\xf9\xf6\xcb\xb8\x86\x5c\x5b\x21\xc6\xad\xaf\xc5\x7b\x96\xc5\xe8"
- "\xd1\xe7\x37\x8a\x28\xdc\x77\x8b\xbf\xdb\xd1\x3f\x47\xf7\x9f\x14"
- "\x4b\x37\x97\xd5\xbc\x43\xfa\x55\x2e\x9b\xfb\x55\x0e\xf1\xfa\x55"
- "\xde\xbe\xc6\xf6\xab\x4c\x27\x18\xe5\x59\xe2\x33\xe7\xaf\x22\xfd"
- "\x2a\xa5\x1d\xf6\xab\x30\xfd\x29\x37\x90\x77\xdb\xd2\xf8\x01\x3b"
- "\xd8\x7e\x95\x9d\x4b\x9c\xeb\x57\x69\x5d\x1a\x40\xed\x04\x7c\xde"
- "\x98\x0e\xf8\x7c\x2f\x15\x9f\xcf\xa6\x39\xda\xaf\x62\x6e\x63\xcd"
- "\xed\x2a\x2e\x73\xb8\x6d\x6d\xce\x09\xcc\xb1\xee\x4b\xc1\xe5\xed"
- "\x86\xa2\x38\x0e\xd7\xc9\xf2\xfa\x53\x4a\x6a\x7b\x5a\x7f\x0a\x2e"
- "\x73\xe6\x76\xb6\x7b\xb4\xb1\xc5\x21\xfc\xb2\xf7\xd9\x55\xd2\xc6"
- "\x7e\x56\xeb\xa8\xbe\x12\xc7\x3c\xc8\xdb\xba\x0f\x85\x60\xfe\xc5"
- "\x74\xdc\xe7\x22\xaf\x1f\xe5\xf4\xd8\x9e\xd6\x8f\xd2\xfd\x30\xff"
- "\x62\x38\x1f\xf3\xe2\x8b\x04\xf3\xe2\xea\x4e\xc0\x3c\xc7\xba\xef"
- "\x84\x60\x5e\x12\x81\xfb\x5a\xe4\xf5\x9f\x9c\x96\xa9\xa5\x7f\xbd"
- "\xfe\x93\xee\x87\x79\x89\x2f\x1f\xf3\x2f\xce\x11\xcc\xbf\xa8\x74"
- "\x1e\x73\xb5\xb7\x75\x9f\x09\xc1\xfc\xab\xf1\x58\x7b\xc9\xeb\x37"
- "\x39\x5d\xd3\xd3\xfa\x4d\xba\x1f\xe6\x5f\xb9\xf3\x31\x2f\x39\x4d"
- "\x30\x2f\x29\xe9\x04\xcc\x73\xac\xfb\x4a\x08\xe6\xa5\x63\x70\xdf"
- "\x8a\xbc\xfe\x92\xaf\x7a\x5c\x7f\x49\xf7\xc3\xbc\x14\xf1\x31\xff"
- "\xea\x38\xc1\xfc\xab\x22\xe7\x31\x0f\xf6\xb6\xee\x23\x21\x98\x7f"
- "\x3d\x12\xf7\xa9\xc8\xeb\x27\xf9\x2a\xa3\xa7\xf5\x93\x74\x3f\xcc"
- "\xcf\x34\xf0\x31\x2f\x3d\x44\x30\x2f\x3d\xe8\xa8\x67\x36\x7b\x65"
- "\xb3\x3f\x66\xbc\xb2\x37\x68\x76\xab\xbe\x11\x82\x77\x99\x0f\xa3"
- "\xd9\x65\x7b\xe5\x92\xda\x9e\xd2\x3f\x62\xc6\x1a\xfb\xe5\xee\xe1"
- "\x95\xbf\xb1\xfa\xfe\xf9\x75\x3e\xf1\xca\x5f\xe7\x89\x61\x2d\x34"
- "\x16\xa1\x1c\xbc\xa6\x79\x2c\xc2\xe6\xd5\x80\x23\xf0\x00\x8f\x45"
- "\xc0\x63\x12\x84\xc6\x23\xe0\x71\x08\xe6\x31\x09\x96\xe3\x11\xc2"
- "\x75\x74\x33\x1e\x93\x80\x7d\x72\x59\xcc\x16\x64\x1e\x9b\x80\xc7"
- "\x20\xac\xff\x11\x79\x60\x8c\xf0\xf8\x03\xec\x97\xef\xf4\x18\x84"
- "\xed\xa6\xee\x30\x06\xe1\x6c\x6a\x47\x5e\x39\xe2\xc0\x50\x04\x7c"
- "\x6b\xef\xa7\x6a\xdb\x16\xa8\xc5\x65\x0e\x63\xe4\x59\x47\xca\xe1"
- "\xa1\x97\x0b\xa9\x8a\xa4\x22\xb4\x79\x2d\x52\x9a\xfb\x2f\x70\x19"
- "\x84\x7a\xd9\xd3\x00\x78\x66\x2c\x22\xfd\x18\xa6\x9f\xa3\x3d\xf4"
- "\xaf\xc5\xe3\xb9\xfa\xca\xcf\xff\x59\x48\xe1\xbe\xc7\xdd\x0b\xd0"
- "\xe8\xf7\xae\x20\x4d\x79\xc3\x45\xc4\x94\xa9\xdc\xc0\x52\xb8\xb6"
- "\xb0\x2d\x77\x9c\xce\xe4\x13\x78\x54\xef\x13\x58\x84\x71\xcb\xb8"
- "\x86\x10\x2e\x5f\x18\xb7\x8a\xa4\xfc\x76\xbc\x18\xac\x28\xb6\x6f"
- "\x43\xb4\x4c\x7d\x2b\x1b\xb3\xbc\x1b\x80\xd9\x52\x3e\x66\xf9\x72"
- "\xfb\x37\xcc\xe3\xb9\x97\x06\x50\xf9\x50\xa6\xd6\x4e\x05\xcc\x5e"
- "\x90\x8a\x59\x85\xe8\xfe\xef\xe2\x98\x05\x29\x1d\xc3\x2c\x68\x5a"
- "\xc7\x98\x7d\x19\x62\x8b\x59\x50\x38\x5c\x1b\x42\x30\x0b\x1a\xad"
- "\xf7\x09\xd2\x70\x98\x35\x3a\x88\x99\xb5\x87\xfd\x2d\x61\x56\x29"
- "\xba\xff\xbb\x1d\xcc\x1c\x2c\x67\x41\x0e\x94\xb3\x2f\xd3\x05\x30"
- "\x83\x72\x16\xc4\x96\xb3\x20\x28\x67\x41\x16\xe5\xec\xba\x83\x98"
- "\x59\x7b\xd0\xdf\x12\x66\xdf\x8a\xae\xff\x2d\x8e\x99\xda\xc1\x72"
- "\xa6\x76\xa4\x9c\xe9\x6c\x31\x53\x43\x39\x53\xb3\xe5\x4c\x0d\xe5"
- "\x4c\x6d\x51\xce\x2e\x3a\x88\x99\xb5\x87\xfc\x2d\x61\x76\x5e\x7c"
- "\xfe\xb7\x38\x66\x0e\x96\x33\xb5\x03\xe5\xac\x44\x23\x80\x19\x94"
- "\x33\x35\x5b\xce\xd4\x50\xce\xd4\x16\xe5\xec\xa4\x83\x98\x59\x7b"
- "\xc0\xdf\x12\x66\xff\x14\xdd\xff\x51\x1c\xb3\x60\x07\xcb\x59\xb0"
- "\x03\xe5\xac\x44\x6b\x8b\x59\x30\x94\xb3\x60\xb6\x9c\x05\x43\x39"
- "\x0b\xb6\x28\x67\xeb\x1c\xc4\xcc\xda\xc3\xfd\x96\x30\xfb\x97\xe8"
- "\xfe\xef\x62\x98\x31\x78\x81\x76\x14\xc4\xac\x95\xaf\x1b\x0d\xa0"
- "\xe3\xf1\x37\x2f\x41\xbc\xde\xfa\xa2\x8a\x4e\x73\xf5\xc6\x58\x61"
- "\x3d\x88\xf1\xaa\x48\x3a\x8d\x84\x74\x23\xfe\x2e\x06\xb8\x23\xfc"
- "\x6d\x6c\xfd\x65\x09\x7a\x71\xbe\x18\x56\x1d\x7f\x0f\xcb\x5b\xc2"
- "\x61\x65\xfe\x1e\xd6\xa9\x58\x7d\x2b\x15\xab\x0b\xb1\xf2\xb0\x52"
- "\x2b\x3b\xc6\x4a\x3d\xcd\x3e\x56\x5f\xea\x38\xac\x2e\x5a\x60\x65"
- "\xdb\x8e\x39\x8e\x95\x55\xfb\xf5\x9b\xc2\xea\xdf\x4a\x31\xac\x0c"
- "\xde\xe3\x74\x78\xce\xfb\x14\xf0\xbe\xf4\x2b\xd1\xcf\x67\x5d\x42"
- "\xc3\xb7\x5c\x42\x63\xf1\xfc\xe6\x43\x6b\x9b\x29\x78\xc7\x9f\xbe"
- "\x3e\x5f\x8b\xda\x7e\xf6\xed\x87\xe7\xcf\x30\xf5\xe4\x6b\xbe\x6e"
- "\x15\x31\x7a\xa6\x4e\xcc\x04\x8c\xca\x1b\x8a\x20\x26\x7d\xc2\xcb"
- "\x1b\x3e\x46\xad\x2b\xa2\xd1\x37\xd5\xd7\x00\x17\xba\xad\xa2\xae"
- "\x08\xed\x86\xf3\xc5\xab\x3f\x46\xa6\x9f\x03\xfa\xcd\x4d\x42\xd4"
- "\x0d\xc5\xbf\xcf\x63\xef\x3c\x2a\x09\x29\x27\xd7\xd1\xcd\xe5\x75"
- "\x5f\xa3\xf7\xe6\xa3\xe1\xa7\x93\x10\xc2\xb1\x66\xbc\xf2\x22\xec"
- "\x95\x4f\xf2\xf0\xd9\x69\xe1\x95\x99\xf9\xb2\x89\x80\xcd\x4d\x2b"
- "\x6c\xc0\x8b\x43\xac\xfb\x4c\x69\x00\x6c\x1a\xcc\xd8\x5c\x47\x29"
- "\xcb\x30\x36\x3a\xce\x2b\xb3\xd8\xe4\xe1\x3a\x2f\xd1\xc2\x2b\xdf"
- "\xb0\xc0\x86\x9d\xab\xca\xc3\xc6\xdc\x97\xf1\x7a\x00\xfe\x46\x6e"
- "\xe3\x95\xe5\xf5\x65\x54\x8b\xce\x15\x61\xca\x11\x94\x91\x29\x50"
- "\x8e\x92\x57\x32\xe5\x88\xc4\x7f\x60\x20\xf0\xbd\x10\x79\xea\xfa"
- "\x84\x6f\x01\x0c\x5a\xa1\xac\xe1\xb6\x68\x3d\xbc\x27\xc6\x12\xe3"
- "\x36\x65\x7f\x5b\xdb\x9c\x06\x44\x41\x9d\x75\x1e\x63\x67\xfc\xd9"
- "\xd7\x2d\x0b\xda\xaa\x8a\x59\xdf\x03\x3e\xf5\xa8\x42\xcf\x62\xb3"
- "\xf6\x7b\x74\x43\x71\x31\x9e\x7e\x2d\xa0\xdf\xc3\xc0\x53\x68\x7b"
- "\xf0\x7a\x75\x2e\x50\xef\x15\xbe\xb7\x00\x69\x26\x27\xd2\xcd\xcc"
- "\x58\x1e\x28\x63\xb8\x3d\xc3\xf5\x61\x79\xe2\x17\xc8\x98\x1b\x78"
- "\xb4\xcd\x67\x9c\xee\xf4\x4a\x84\x70\x9d\x88\xb1\xe8\xb5\x8a\xc3"
- "\x0e\xcf\xdb\xb3\xec\xeb\xb0\xa9\x0b\x17\x7d\x2d\x5c\xbe\x66\xe9"
- "\x24\xf5\x77\xe4\xb1\xe5\x2b\x4f\x6e\x7f\x87\xb9\x3f\x0a\x30\xc4"
- "\x73\xf5\xd6\x7f\x87\xa8\x9d\x92\x31\xfc\x8f\xe8\xfe\x27\xe2\x18"
- "\x06\x29\x3b\xc6\xb0\x89\xc5\x30\x68\x5a\xc7\x18\xfe\xa0\xb6\xc5"
- "\x30\x28\x84\xc3\xf0\xcb\x10\x0e\xc3\xa0\x70\x82\x61\xd0\x68\x0e"
- "\xc3\x20\x4d\xc7\x18\x5a\x79\xe9\xdf\x14\x86\x3a\xfb\xfd\x1f\xc2"
- "\x18\x3a\x50\x0e\x7f\x31\x63\xe8\x40\x39\xd4\xe9\x05\x30\xb4\x28"
- "\x87\x5f\xa6\x5b\x60\xc8\x96\xc3\x20\x8b\x72\x18\xe4\x40\x39\xb4"
- "\xf2\xd6\xbf\x29\x0c\x7f\x6c\x96\x8e\xa1\xda\x81\x72\xf8\x03\x8b"
- "\xa1\xda\x81\x72\x78\xe9\xa8\x2d\x86\x6a\xcb\x72\xa8\xe3\x30\x54"
- "\xb3\xe5\x50\x6d\x51\x0e\xd5\x0e\x94\x43\x2b\xad\xf2\x9b\xc2\xf0"
- "\xbf\xa2\xfb\xbf\xdb\xc1\xd0\x81\x72\xf8\xb9\x19\x43\x07\xca\x61"
- "\x4d\x92\x00\x86\x16\xe5\xb0\x44\x63\x81\x21\x5b\x0e\xd5\x16\xe5"
- "\x50\xed\x40\x39\xb4\xf2\xde\xbf\x29\x0c\x2f\xdb\xef\xff\x17\xc4"
- "\x30\xd8\x81\x72\xb8\x9e\xc5\x30\xd8\x81\x72\x78\x65\xac\x2d\x86"
- "\xc1\x16\xe5\xb0\x44\xcb\x61\x18\xcc\x96\xc3\x60\x8b\x72\x18\xec"
- "\x40\x39\xb4\xf2\xe2\xbf\x29\x0c\x7f\x12\xdd\xff\xca\x12\x43\xd0"
- "\xd9\xb6\xba\xb4\x81\xc3\xd0\x12\x3f\x6b\x2d\x1a\x09\x1a\x15\x63"
- "\x37\xcb\x80\x28\x5b\xfc\x7e\x32\x60\xfc\xd4\xf8\x7b\x5c\x23\xa7"
- "\x49\x19\xec\xd8\xef\x39\x18\xb3\xd3\xe0\x42\xb1\x3e\x35\xeb\x51"
- "\xfc\x4d\xb5\x5d\x8f\xc6\xfd\xff\xaa\x47\xaf\x22\xe9\xd8\xb1\xed"
- "\xa0\x28\x76\xfc\xb6\x2f\x12\xda\x44\x71\xec\xae\x16\xd9\x62\xa7"
- "\x0e\xe1\xb0\x23\xed\x1e\xc1\xee\x4b\x9d\xb9\xfd\x23\xd8\xb1\xed"
- "\x9f\x5d\xec\x7e\xcb\xed\xdf\x35\xd1\xf6\xcf\xb8\x01\x51\xf9\x1b"
- "\x4c\x85\x5a\xca\x54\x04\xbf\x62\xf8\x95\xc2\xb1\x5e\x70\x8c\x99"
- "\x1f\x04\xff\x67\xce\x99\xfa\x31\x6b\x81\x15\x7b\xba\xc4\xe0\x3d"
- "\x3d\x70\x9a\xde\xe6\x34\x9e\x69\x28\x74\x37\x9b\x07\x1c\x4f\x85"
- "\xe3\xc5\xfd\x5d\x42\x7b\x43\xfa\x52\x3a\xeb\x6f\x38\x6d\x1f\x9c"
- "\x96\x4e\x73\x25\x63\xe5\x28\x0a\xe7\x61\x7d\x4f\x37\x36\xcd\x60"
- "\xcb\xfb\x7a\xa4\x85\xe2\x75\x40\xcc\x69\xfa\x9a\xa8\x1f\x0a\x70"
- "\x3a\x93\x8b\x2b\x5e\x1f\x5b\x65\x99\x96\x9e\x80\x70\xbe\xe6\xb4"
- "\xfd\xd8\xfc\x86\x5b\xa6\x31\xfe\x15\xa1\xfe\x2e\x2a\x26\xcf\xfe"
- "\x89\x14\x7e\x27\x9c\xf6\x1e\xba\xff\x01\x15\x93\xde\xc5\x35\x80"
- "\x97\xfe\x2d\xc4\xa4\x65\xd3\xb9\xd3\xbd\xff\x6f\x25\x9b\x8e\xd9"
- "\xe3\x13\x8e\xb9\x5a\xc6\x8f\x4d\xe7\x61\x8e\x0d\x5e\x6f\xdc\xf2"
- "\x5d\x8d\x1b\x28\x9c\x1f\x4e\xd3\xdf\xd4\xfb\x2b\x1d\xfb\x2e\xa3"
- "\x2d\xef\x89\xd3\xc1\x75\x8f\xb0\x71\xf6\x84\x77\xd0\xb4\xe7\xa7"
- "\xad\x4f\x37\xa7\x5b\x6f\x44\x83\x76\x73\xb1\x51\xd2\x59\x1f\xce"
- "\xc2\x6b\x08\x5a\x63\xd7\xdf\xc5\x45\x87\xb1\xab\xa8\x43\x08\xa7"
- "\xa5\xfb\x7f\xa8\x84\xf4\x5e\xec\x7b\x84\x92\xf7\x60\xd6\x5b\x21"
- "\x58\x53\x86\x7b\x77\x31\xcf\xea\xa2\x62\x9f\x75\x00\xa4\x0b\x33"
- "\xe7\x6b\xa2\x98\x7e\x0c\x36\xad\x2b\x93\xb6\x3c\x01\xaf\xa9\xdf"
- "\x9e\xfe\x5e\x9c\xd6\x98\x75\x5c\x6d\x4c\x73\x0d\xb7\xce\xdf\xb8"
- "\xc1\x0d\x9f\xb7\xcc\xdf\x9b\xa4\x3f\x14\x06\xe9\x27\xdb\xa6\x57"
- "\x5a\xa7\xf7\x21\xe9\x3f\x0a\x85\xf4\x51\xb6\xe9\x0d\x03\xac\xd2"
- "\x0f\x24\xe9\x8f\x8c\x85\xf4\xd3\x6c\xd3\xab\xac\xd3\xff\x8e\xa4"
- "\xff\x87\x0a\xd2\x47\xdb\xa6\x0f\xb5\x4e\xef\x4b\xd2\x7f\xa2\x81"
- "\xf4\xb3\x6c\xd3\xa7\x5a\xa7\x1f\x44\xd2\x1f\x1b\x0d\xe9\x63\xac"
- "\xd3\xef\x66\xd2\xa2\x07\xd8\xb4\x7e\x24\xed\xdf\x43\x20\x6d\xac"
- "\xc0\xbb\x2a\xd8\xbc\x43\xd8\xf4\xf7\x91\xf4\x1f\x1e\x85\xf4\xf1"
- "\xb6\xe9\x5d\xad\xd3\x0f\x26\xe9\xbf\x9e\x06\xe9\x13\x04\xb0\xb2"
- "\x4e\x3f\x84\xa4\xff\x2c\x0f\xd2\x27\x0a\x60\x65\x9d\x7e\x28\x49"
- "\x5f\xac\x85\xf4\x2b\x05\x62\x6f\x9d\xfe\x7e\x92\xfe\x8b\x8d\x90"
- "\x3e\x49\x20\xf6\xfc\xf4\x59\x25\x49\x90\x2e\x79\x17\xcb\x4d\xab"
- "\xb8\x5b\xe7\x3d\x8c\xe4\xfd\x55\x02\x5c\x93\x6a\x9b\x1e\xb9\x90"
- "\xf4\xe8\x51\x36\xfd\x03\x24\x7d\x69\x0c\xa4\xdf\x28\x10\xfb\x07"
- "\x71\xfa\xdd\x24\xed\x83\x24\xed\x49\x6f\x48\x9b\x2e\x10\x77\xcb"
- "\xb4\xc3\x49\xda\x2a\x04\x69\x33\x04\x62\x6e\x99\xd6\x9f\xa4\x3d"
- "\x5b\x0a\x69\xb5\x02\xf1\xb6\x4c\xfb\x10\x49\x5b\x91\x0c\x69\x73"
- "\x04\x9e\xf7\x01\x8b\xb4\x23\x48\xda\x73\x98\x57\xdb\x05\x70\xb1"
- "\x4c\x1b\x40\xd2\x5e\x38\x08\x69\xf3\x04\x30\xb1\x4c\x3b\x92\xa4"
- "\xfd\xb6\x06\xd2\xee\x11\xc0\xc4\x32\x6d\x20\x9d\x75\x7e\x3b\x5b"
- "\x4f\x17\x58\xa7\xdd\xc5\xd5\xbb\x41\xa6\xfe\xff\x9c\xcc\xd6\x95"
- "\xcc\xfa\x9e\xf4\x06\xbc\x96\x5d\xfb\x7b\x3d\x66\x6e\x23\x4c\x14"
- "\x52\xd3\x59\x65\xa1\x70\x1d\xce\xf3\xa0\x6d\xdd\xe6\xfa\xd8\x2e"
- "\xae\x8d\x08\xa6\xb3\x7e\xca\x60\xef\x5f\x68\x9b\xd6\xcd\x32\xed"
- "\xc3\x74\x56\x75\x03\x9b\xf6\xa8\x6d\x5a\xa5\x65\xda\x51\x74\xd6"
- "\x7f\x8a\xd8\xb4\x45\x02\xf5\xeb\xa3\x16\x69\x43\xe8\x2c\x5d\x32"
- "\xa4\x3b\x21\x54\xbf\xd2\x1b\x54\x8f\xe2\xfa\xc0\x5c\x77\x43\xfa"
- "\x47\x48\x7c\xaf\x86\x43\x7c\x99\x39\x7d\xe6\xb4\x80\xc3\xa3\x16"
- "\x6d\xe5\xa3\xa6\xfe\x97\x42\xd9\x98\x95\xd8\x3e\x43\xaa\xe5\x33"
- "\x3c\x46\xf2\xac\x71\x85\x3c\x4b\xad\x9f\x81\xad\x8f\xb0\x4e\xc0"
- "\xf1\x1d\x6d\xcc\xba\x5c\x8a\xe3\x0b\x69\xcb\x78\x1a\x81\x72\x51"
- "\xe0\x3c\x59\x6c\xc7\xd0\x59\xff\x8e\x66\x63\xc0\x6b\x8f\xa0\x3c"
- "\x32\xf5\x21\xe0\x5b\x4a\xbf\xf5\xbb\x32\x48\xfb\x38\x9b\xee\xbc"
- "\x75\x3b\xc8\x3e\xdf\x13\x70\xae\xaa\xbd\x0d\x74\x71\xad\x16\xd2"
- "\x32\x89\x81\xe8\x9e\x6b\x8a\x06\xa2\x31\xda\xf7\xd5\x6a\x64\xea"
- "\x1c\x53\x81\x5f\x4c\x64\x03\x6d\xb0\x3c\xb6\x95\xa2\x2b\x47\x35"
- "\x20\x57\xbc\x06\x1f\xed\x13\xe6\xab\x83\xe3\x7a\xff\xfb\x42\x9a"
- "\xb2\x1a\x86\xeb\x5c\xbe\x50\xe2\x35\x99\xe0\xdf\x21\x3a\xf4\x1a"
- "\xb3\x1f\xca\xd6\x0d\x74\x33\xde\xa7\xc0\xf8\x4e\x7d\x54\x85\xa9"
- "\x0e\xaf\xa5\xd8\x0c\x79\x34\x5f\x49\x44\x0a\xbc\xa7\x1c\x5e\xd7"
- "\xb5\x22\xa9\x0e\x5d\x51\x34\xac\xa2\x97\xc6\x8f\x85\x67\xd0\xc2"
- "\xfd\x62\x2f\xc1\xff\x49\x4c\x41\xfb\x6a\xeb\x13\x8a\x97\xe3\xf5"
- "\xe9\x1a\x4e\xea\x7d\x22\xb4\xf4\x9b\x33\x6b\x13\x53\xd0\xfd\xf0"
- "\xdc\x27\xcc\x6b\x51\x31\xeb\x4f\xfd\x12\xff\x34\x59\x7b\xaa\x71"
- "\xa2\xc9\xab\x3e\xc1\x66\xed\xa9\x3d\xd3\x43\xc8\x7a\x56\x8d\x4c"
- "\xde\xf0\x6c\x95\xf4\x70\xbf\x70\x53\xeb\xc6\x54\xbc\xff\x5b\x71"
- "\xca\x35\x74\x89\x3d\x87\xf3\x64\xf3\xf2\xc1\x79\xe0\xbc\xcc\xf9"
- "\xe0\xeb\xf4\xc3\xa6\x87\xe0\x77\x87\x38\x84\x3b\xbe\x7e\x55\xa3"
- "\x2b\x5e\xbf\xca\xf1\xf4\x0d\x27\x70\x7a\xe1\x75\x79\x41\xe3\x64"
- "\xd7\xa7\x37\x65\x35\xe6\x81\x56\x35\x90\xb8\x37\xee\xd7\xb9\x28"
- "\x62\xd9\x7f\x1f\xd5\xb9\xf4\x66\xf1\x68\x2c\xd6\xb9\x1c\x4b\x64"
- "\xff\x5d\x66\x5e\x2f\x4c\x30\x5f\x65\xfd\x2c\x88\xf7\x4a\xd3\x7b"
- "\xd1\x6e\x58\x5b\x93\x75\x4b\xeb\x67\xa9\x86\xe2\xf5\x9c\x6f\x47"
- "\xc1\x3d\x57\x92\xb8\xdc\x1e\x09\x7f\x3d\xd9\xbf\x7a\xf6\x2f\x8d"
- "\xd3\x30\x5c\xf2\x9e\x18\x4e\x6b\x83\x34\x64\x2f\x98\xdb\xcc\x5a"
- "\x65\x0c\x76\x80\x2f\xed\x15\xa4\x61\xf2\xcd\x8d\xd0\x5a\x3e\x03"
- "\x36\x4b\x21\x8f\x3c\xfa\xd8\xe8\x31\x8f\x3f\xa1\x79\x72\xde\xfc"
- "\x57\x62\xe3\x16\xbc\x1a\xbf\xf0\xff\xb1\xf7\x3e\x70\x51\x56\xd9"
- "\xc3\xf8\x99\x3f\xc8\xa8\x28\x03\x91\xa1\x99\x8d\x86\x85\x25\x3a"
- "\xb5\xb6\x6b\x2e\x26\x25\x16\x26\x08\x29\x15\x25\x0a\x24\x28\x24"
- "\xea\x04\xa8\x68\x28\x38\x6a\xd9\xa6\x32\x10\x19\x26\x02\x16\xbb"
- "\x6b\xad\xfb\xcd\xfd\x7e\xdd\x77\xdd\xf7\x63\xdb\x14\x64\xd4\x0a"
- "\xc3\xee\xd7\x3e\x2f\xbb\xaf\xbb\x4d\x7e\xc9\x25\xbf\xa8\x53\x8c"
- "\xce\x24\x33\x73\xdf\x73\xee\x7d\x1e\x66\xe6\x61\xb0\x7a\xb7\xf7"
- "\xfd\xfe\x3e\xbf\xb7\xd1\x87\xe7\x79\xee\x3d\xf7\xdc\x73\xcf\x39"
- "\xf7\xdc\x73\xef\x73\xff\x3c\xb3\xa6\x78\xed\xba\xf5\xa6\x67\x4b"
- "\x4a\xcb\x36\x6c\xdc\x54\xbe\x79\x0b\xc1\x0d\xd2\x7b\x30\x59\xe5"
- "\x54\x03\xca\xee\x41\xca\xe7\xb7\x3c\x6f\x0c\x13\x72\xbe\xda\xa2"
- "\x35\x84\xf6\xe1\x6d\xa8\xf1\x74\x9e\x47\x9f\xc6\xa5\xa2\xf3\x45"
- "\x50\xcf\x54\xb6\x86\x87\xad\x74\x86\x59\x8f\xe6\xaa\xb3\xd3\xf1"
- "\xb0\x95\xce\xdc\x6b\x8d\xed\x85\xb8\x29\x74\xce\xd9\x55\x3b\xc5"
- "\x37\xdd\x0e\x40\xab\x57\x42\xe1\x9c\xa2\x87\xd8\x97\xc7\x31\x47"
- "\xdd\x38\xd6\x47\xf8\xeb\xf6\xb3\x5e\xc7\x73\x85\xb0\x0f\xdf\x51"
- "\xd7\xf5\xe7\x35\xae\xdf\xb6\x4e\xe4\x67\x12\x4d\x6c\xdc\xcf\x7a"
- "\x76\x8e\x63\x3d\x3b\xf6\xb3\xbe\xa6\x71\xcc\x1e\x57\x07\x11\xae"
- "\x7d\xae\x42\xbb\xe6\x2a\x97\x4d\x35\xc6\xfb\xc6\x5e\xcd\xad\xc6"
- "\xb8\x99\x1e\xd0\x34\xe1\x3b\x86\x39\x5b\x0d\x82\xee\xb7\xbf\x72"
- "\x87\x21\xbe\x54\x36\x50\xac\xda\x87\xf9\x08\x99\xb8\xfe\xd2\x86"
- "\xad\x3f\xe6\xe7\xb0\xb9\xcf\x81\x5d\xe3\xea\x6e\xba\xca\xf3\x8b"
- "\xb4\xd5\xf7\x01\xe1\xfb\x97\x12\x77\x58\xe9\x04\xe6\x41\xd8\x13"
- "\xbe\xe7\x8a\x55\x08\x53\x87\xb8\x9d\x81\xe5\x89\x5f\xb5\xb6\xcc"
- "\xb0\x6e\x43\x71\xf1\xb4\x51\x10\xcf\xef\x10\x78\xfe\x5e\x19\xe2"
- "\x83\x97\xf7\xb3\x36\x2c\xa7\x15\xcb\xdb\xde\x81\xbd\x05\xd4\x0f"
- "\xc0\x32\x59\xce\x6b\xdc\x09\x18\x7e\x12\x9f\x4f\x22\xed\xed\xfc"
- "\x3c\x2f\xed\xc8\x27\xd9\x3e\x57\x0f\xd2\xd9\x4e\x67\x14\xd0\x7e"
- "\x8a\xfd\x9b\x32\x55\x58\xee\x3a\x84\x6b\x37\x4c\x80\xa9\x98\xee"
- "\xb7\x48\x47\x0b\x3e\x13\x7c\x1e\xc9\x11\xe1\xdb\x78\xb9\xb4\x23"
- "\x17\xd2\x3b\xf2\xca\x7a\x68\x1c\xdb\xe3\xda\xe7\xb6\xd0\x7e\xab"
- "\xfc\x8c\x18\x7c\x47\xbe\xb4\x23\xac\xa5\xbf\x32\x53\x45\x67\x55"
- "\x36\xf9\x71\xe6\x12\x4d\x44\x07\xf5\x5d\xff\x88\x9e\xa0\x6f\x20"
- "\x0b\x12\xdc\xa0\xfa\x63\x0f\x40\xc3\x7e\xd6\x8c\x57\x03\x5e\xf5"
- "\x1f\x63\xdc\x47\x78\xb5\x63\xf8\x69\xbc\x7f\x8c\xf7\x8f\x7a\xf8"
- "\xb7\xd0\x58\xa2\xbb\xb4\x82\xf5\xce\xac\x87\xdb\xf8\x59\x98\xdb"
- "\xe0\x89\x73\x5a\xdd\x31\xa2\x9d\xf6\x56\x66\x63\xbf\x8e\x0b\xde"
- "\x03\xf6\x5a\x3d\x60\x3c\xde\x8f\xf2\x7b\xe0\xa5\xb9\xe6\x04\xcd"
- "\x40\x8c\x78\x1e\xc8\xc6\xf7\x9d\xd2\x33\x5a\xc4\x81\x8a\x6f\xbc"
- "\x94\xf8\x86\xbb\x34\x03\xbd\xdf\x1a\xf6\x5b\x5d\x23\xe3\xbe\x5d"
- "\xbe\xde\x66\xd0\x60\x5d\xd6\x82\x31\x38\x0e\x74\x22\x0c\xdb\x2b"
- "\xfe\xae\xb5\x8b\x7b\x58\x04\x5e\xc8\xa7\x11\x88\x7f\x44\x8a\x08"
- "\x1b\x91\x89\xf7\x06\xbc\x8e\x04\xe7\x3f\x12\xd3\x8f\x4c\x24\x79"
- "\x0e\xa0\xbd\x27\x59\xda\x35\x6e\x27\xc9\xa8\x5a\xe8\x96\x8a\xe6"
- "\x3b\x60\x98\x03\x75\xab\x61\x50\x7f\x34\xd7\x3e\x0f\xd6\x9f\x6b"
- "\x5d\x0a\xfd\xb1\x90\x3d\xc2\x74\x89\x4d\x42\x5f\x4e\xf6\x3f\x97"
- "\x8f\xef\xd7\xce\x20\x9e\x93\x86\x15\x84\x63\x80\xf7\xc9\xaa\x2f"
- "\x00\x8c\x29\x04\x2d\xd9\x97\x3e\xcd\xc0\x54\xd2\x59\xca\x5b\xca"
- "\x57\xd0\x82\xf4\x61\x58\x33\xd1\xb7\x1e\xf1\xe2\x7b\x0b\xc2\x35"
- "\xdb\xe0\x2b\x99\x36\x9e\xe6\x67\xcf\xa0\x3e\x4a\xf4\x12\x4e\x4a"
- "\xc7\xfc\xe5\x72\x50\x1a\x29\xef\xbf\x60\xb8\x11\x6d\x14\x54\x7e"
- "\x09\x1a\x9b\xc7\x0e\xa4\x93\x74\xb7\x79\x8c\x58\x97\x52\xc0\x47"
- "\x6d\x5d\x2c\x18\xb1\xbe\x8d\x3c\xa7\x19\x38\x39\xa3\x02\x8c\x84"
- "\x8f\x6c\xb8\x5d\x33\x50\xd5\x44\x75\x51\xe0\xfa\x13\xf0\xbd\x17"
- "\xdd\x8e\x8f\x4d\xc0\xf3\x69\x24\x7a\x30\x3e\x20\xdf\x3a\x1b\xf6"
- "\x82\xaa\xb7\x88\xb2\x62\x5e\x2d\x98\xfe\x18\x95\x9d\xf8\x89\xf1"
- "\x27\xce\x6b\x3c\xb1\x14\x47\xe7\xab\x48\xe5\x69\xa1\xb5\x19\xc4"
- "\x0f\x82\xa7\x33\x21\xc5\x9e\xb2\xee\xb9\x9c\x6f\x98\x9e\xe4\xc1"
- "\x30\x0f\xc2\x51\xe9\x61\x1e\x86\xf6\xe8\x8d\x2d\x74\x8e\x80\xb7"
- "\x26\x58\x3e\x1e\x53\xa0\x7c\x30\xdd\x31\x4c\xdf\x46\x6d\x30\xd9"
- "\x13\xcc\x33\x92\xce\x40\xc3\x30\x8b\x6f\x1f\xe2\xd8\xe8\xe6\xe3"
- "\x40\x88\x67\x3b\xd2\x62\x21\x3c\x48\x4f\x9b\x84\xeb\x24\xed\x37"
- "\x19\x28\x6b\x09\x5f\x0b\xc9\x9c\xd7\xe7\x2d\xbc\x4c\x68\xbb\xbc"
- "\x8f\x36\x8a\xb8\x13\x08\x73\x82\xa1\xc8\xd9\x73\x59\xd2\x59\x6b"
- "\x3c\xee\x78\xe5\xd7\x5c\xbe\x6d\xe2\x9c\x42\xef\xb3\xa5\x5b\x59"
- "\xaf\x9f\x6e\x6f\xbc\xbc\xaf\xba\x44\xf7\x71\xca\x8f\x6d\xca\xe6"
- "\xed\x28\xe5\x41\xe9\x25\x7c\x5a\xc2\x27\xf3\x6a\x06\xd2\x21\xf8"
- "\xe5\x99\x8d\xe1\x2d\xa4\x8b\x9c\x6f\x68\x47\xfb\x2b\x49\x17\xbd"
- "\xd3\x31\xfd\xc9\x7d\xf4\xbe\x89\xde\x3d\x56\x6e\x63\x07\xe3\x3d"
- "\x65\x14\x6f\xeb\x45\xb9\xad\x41\x5d\xf2\x01\xdc\x16\x03\x46\xa7"
- "\x99\x97\xed\xa8\xf3\xb9\x64\x55\xab\x07\x80\xe8\x44\x1e\x9d\x40"
- "\x5a\xcf\xa0\xed\x8f\x21\x5a\xd1\x5e\x1f\x67\x6f\x64\x01\xd1\x8c"
- "\xf6\x4c\xa2\xcf\xb7\x40\x92\xfd\x71\x2a\x23\xf1\x73\x86\xb0\x7d"
- "\x18\xc7\xbe\x20\xda\xfd\xe5\xf6\x19\x02\x79\xcc\xcb\x8d\x72\x20"
- "\x79\x91\x5c\xfc\x38\xbd\xa4\xfb\x16\xc4\x75\x54\xbc\x0b\xdd\x20"
- "\x5e\x5b\xc6\xb1\xd3\x04\xef\x87\x65\x4f\x52\xdc\x36\xcc\x7b\xa6"
- "\x89\x9f\xef\xa6\xa2\xbd\xf1\x11\xef\x51\x3a\xef\x13\x71\xd0\x19"
- "\x9c\x28\x73\xf6\x6b\xd2\x47\x7c\x3f\x2d\xd1\x7d\x14\xdb\xf3\xe9"
- "\x78\x25\xfa\xeb\x3f\x3b\x14\xac\x5f\x3e\x65\xfd\x27\x79\x5b\x7c"
- "\x95\x29\x20\x9d\x75\x6c\xb8\xa4\x61\xf7\x49\x6d\x87\x24\x6b\xb6"
- "\xb7\x15\xeb\x8b\x1f\x07\x8b\x51\xc8\xfa\x04\xd7\xc7\x4d\xa9\x2a"
- "\x2a\x33\xa6\x3d\x21\xf0\xf8\x78\x99\xb9\x3e\x99\xb9\x0e\x9c\x66"
- "\x9b\xb0\x9c\x83\x7a\xe0\x33\x49\x72\x3e\xad\xe0\x89\x6c\xbb\x4e"
- "\xd2\x39\x5d\x64\x93\xd0\xc7\xbd\xdf\x35\xe0\xb7\x4b\x24\x7b\x1f"
- "\x97\x3d\x8b\x6d\x12\xed\xad\x64\xb7\x7c\x22\x7e\x5c\x90\x0e\x53"
- "\x99\xd2\xb8\xfe\x12\x2d\x95\xd9\x44\xcb\x09\x4e\x47\xa5\x01\x30"
- "\xae\x8d\xf2\x47\x5c\x19\x52\x7d\x95\x71\xc5\x11\xae\x1d\x68\xab"
- "\x88\x26\xcc\xfb\x18\xb7\x7f\x0f\x51\xbb\x0c\x53\x25\xda\xdb\xdd"
- "\x66\x4a\x3b\x10\xfb\xb5\x9a\xa7\x6d\x47\xb8\x3d\x6e\x71\xce\xc1"
- "\x28\x4c\x7f\xc4\xf0\x34\xc1\x6b\x77\x92\x8d\x36\x3c\xc5\x9f\xd7"
- "\x1a\x1e\x47\x5d\xbd\x00\x5a\xc4\xa7\x23\x1d\x95\xf5\xa2\x4f\xab"
- "\x5d\x4e\x7d\x06\xe4\xf5\x51\xf4\x91\x8e\x10\xbf\x49\x97\xd1\x47"
- "\x9a\xe5\xaa\x85\x3d\xb2\xde\x62\x3e\x0d\xc4\x7b\xe1\x63\xc0\x9f"
- "\x50\x8f\x4f\x0c\xea\x16\xbe\x4b\x7c\x3c\x82\x7c\xd4\x61\x7e\x8f"
- "\x4a\xe5\x3a\x82\xf0\x7a\x7c\x7f\x40\xa2\xbd\x5e\x82\xbf\x28\xcb"
- "\x41\xaa\xab\xa7\xf7\x91\xfd\xe5\xfe\x87\x6a\xa7\x94\xb6\x45\xe4"
- "\xa5\xda\x25\xc3\x92\x8f\xc8\xcf\x2c\xc3\x30\xb2\x83\x33\x51\xf6"
- "\xdc\xf6\xd1\x59\xb8\x52\x18\xd5\x1d\x91\x87\x36\x81\xeb\x21\xfa"
- "\x3d\x83\x7a\x54\xab\xca\x56\xd8\x27\xb2\xc5\x96\xce\x9d\xe2\x4c"
- "\x08\xd2\x25\xb2\xa9\xd4\x37\x41\x7c\xb3\xa4\xfa\x23\xd1\xac\xfa"
- "\x28\xd8\x4f\xd2\x8e\x47\x5d\x49\x08\xc0\x7d\x22\x54\x3b\xd7\x24"
- "\x6c\x60\x83\x48\xa3\x1e\x29\x95\xed\xa8\x28\x9b\xf4\x4e\x7c\xdb"
- "\x46\x7c\xd3\x74\x04\xf0\x11\xf9\xa6\xb9\x4f\x82\x3f\x41\xb6\x7c"
- "\xb0\xbe\x6a\xd5\x1b\xe4\xba\x3c\xc4\x5e\x68\x35\xd3\xa8\x3e\xf8"
- "\xe9\x52\x67\x28\xec\xc5\x89\x90\xf6\x42\xab\x36\x48\xe5\x6d\x56"
- "\xd4\x8d\x16\x51\x37\xa4\xb6\x05\xe5\xd0\xe9\x94\xcf\xe6\x70\xcf"
- "\x25\xfb\x49\x79\x07\xb6\x41\x8d\x82\xaf\xa2\x2e\x6b\x35\x37\x0e"
- "\x95\x83\xba\x27\xb0\x3e\x93\xac\xc9\x26\x10\x0e\x92\x29\xf7\x2b"
- "\x31\x4c\xc8\x55\x4d\xfe\xad\x25\xd0\x46\x23\x6c\x9d\x8f\x61\x7d"
- "\xd1\xaa\x7b\x83\xea\xa2\x56\x9d\x29\xd5\x45\x39\xef\xdf\xa3\x8c"
- "\x8c\xfe\x7c\x35\xd9\x8a\x7c\x49\x36\x6d\x7c\xef\x65\x2e\x1f\xcd"
- "\xcf\xe5\x36\x8d\xe0\x31\x6d\x39\xa6\xb1\x28\xda\x47\x0b\xd1\x87"
- "\x79\xe9\xb8\xcd\xda\xcf\x6d\x45\xb9\x8b\xd3\xa3\xa9\x6b\x92\xda"
- "\x09\x0c\x33\x4a\x61\xb9\x52\x5b\x22\xeb\x4d\x98\x82\x26\x47\x48"
- "\xff\x08\xf1\xcb\xfe\x11\xc7\x35\xc0\x71\x39\xa5\xf2\x51\x58\x82"
- "\x08\x53\x9d\xa4\xb0\x7d\x82\x0f\x75\x6c\x13\x0f\xcb\x95\xda\x2b"
- "\xaa\x5f\x6a\xbb\x16\xba\xa8\x8e\xd1\xbb\x5d\xab\x4d\x21\xfc\xb6"
- "\xaa\x6b\xd4\x87\xa8\xc7\xb8\x62\xb2\x07\x64\x2f\x0c\xab\x84\xdd"
- "\x30\x2c\xe6\xf7\x57\xc8\xee\x90\x1f\x42\xf1\x08\x97\x4d\xb6\x08"
- "\xc3\xdf\x34\x3c\x82\x7e\xc1\x7f\xea\x10\xaf\x76\x8f\x94\xf6\x1d"
- "\xee\x2b\xfc\x67\x8a\x46\x0e\x93\xd3\x61\x5d\x5f\x4b\xe9\x28\xbd"
- "\x6c\xbf\xc8\x76\x79\xc8\x36\xf1\xfc\xc2\x54\x92\x8e\xf3\x7e\x83"
- "\xec\x17\x0d\xa8\x03\x60\xe9\xbc\x02\x6e\xd3\xc2\x52\x85\x3d\x0b"
- "\x9b\x4b\x69\xb9\xfc\xd0\x56\x6e\xfb\x9a\x7d\xd6\x54\x02\xda\xc6"
- "\xaf\xb8\x8f\x95\x28\xe8\x0c\xab\x17\xe5\x08\xcb\xe3\xe5\x10\x36"
- "\xd5\xc2\x69\x41\x98\xc6\x6b\x3c\x6e\x2b\x95\x85\xe2\xaa\x03\xe2"
- "\xe8\xcc\x10\x8c\x3b\xc0\xe9\x52\xa4\xf3\x0d\x14\x0e\x81\x6f\x12"
- "\x67\xdf\x92\x3e\x48\xb6\x77\x44\xac\x44\xe7\x27\xb2\xdd\x45\xbe"
- "\xe4\x93\xed\xe5\x71\xab\x24\x98\xc5\xd2\x9d\xdb\xf7\x11\x61\x82"
- "\xaf\xb1\x6a\x89\xdf\xc5\xa2\x1c\x23\xc6\xf3\x7e\xf6\x7f\x66\x21"
- "\x6f\xc3\x3c\x32\x6f\x03\x9f\xa9\xfe\x60\xfe\x7a\x7a\xe7\x7a\x5f"
- "\xc1\xfb\xb0\x0d\x04\x43\x34\xf1\x36\x42\xab\x75\x2a\x7d\xea\xf3"
- "\x5a\x5d\x0d\xb5\x4b\xdc\x57\xd5\xea\x9e\x95\xc6\x80\xc0\x5a\xf2"
- "\x3a\xb6\x0b\x23\x4e\xca\x36\x86\xb9\x52\x80\xf6\x2c\x47\x5a\xde"
- "\xa1\x30\xda\xe3\x3e\x10\x86\xec\xd3\xdb\xd7\xec\x12\xce\x11\xf5"
- "\xb2\xdd\x20\x5b\xd2\xe9\x3c\x27\x7c\x3a\x6d\x78\x4a\xa3\x64\x4b"
- "\x2e\x69\xc3\x17\x06\xf9\x61\xf8\x1e\x6c\x33\x74\xcb\x95\x36\x03"
- "\xfd\xe6\x9d\xae\xda\xf0\x89\x41\x7e\x00\x86\x5d\xdf\x76\x8c\x70"
- "\x50\x1d\xa5\x33\x8b\xb8\x7d\x2a\xe1\x79\xfd\x46\xa6\x99\xec\x66"
- "\xff\x73\xd2\xf8\x85\x56\x97\x46\xbe\x9a\x22\xbf\x3d\x41\xb6\x93"
- "\xf2\x93\xf1\x69\x81\xce\xbd\x41\x3e\x7c\x45\x38\xb3\x25\x3b\xdf"
- "\x1c\x64\x2b\xa5\x36\x8c\xec\x64\x50\x5b\x85\xef\xc1\x6d\x95\xee"
- "\xbe\xa1\x36\x52\xa7\xfb\xf6\x6d\x55\xb8\x9d\xec\x96\x6c\x23\x83"
- "\x6d\x81\x2e\xa2\x31\xd0\x97\xd5\x86\xd7\xc9\xbe\xac\xdf\x8e\x86"
- "\xc7\x91\x8d\xc2\xfc\x4f\x48\x79\xef\xb4\x6b\xae\xee\x96\xf3\xb6"
- "\xa3\x9c\x3b\x0d\xa8\x9b\xfb\x5c\x0e\x7c\x2e\x94\x7c\x40\x5e\x37"
- "\xaf\xd1\xd9\x1f\xda\xb0\x63\xa8\x7f\xa3\x48\xcf\xac\xeb\xbe\x82"
- "\x1e\x7f\x5b\xd1\xd6\xbf\x5e\xe6\xef\xc8\x1b\x03\xfd\xc2\x43\xfb"
- "\xd9\x6e\xcc\xa7\x2f\xb0\x8c\x7b\x31\xac\x5a\x1a\x43\xe0\xbc\x25"
- "\x5c\x5a\x9d\xb5\x69\x7f\x70\xd9\x44\x39\x74\x4e\x2a\x07\xf5\x89"
- "\x30\xff\xe3\xe4\xf7\xd0\xb9\x65\x58\x6f\x66\x37\xc9\x3a\x8f\x7e"
- "\xd1\xd7\xe6\x40\xff\xca\x5d\x47\xb6\x52\xea\x7b\xb6\xa3\xbf\x13"
- "\x34\x26\x96\x36\x3f\xc3\x60\x2a\x29\x5a\x57\xb6\xea\x1e\x43\xd1"
- "\xba\xa2\xb2\xa2\xbc\xe2\xa2\x2d\x79\x65\x45\xeb\xd7\x4d\x5f\x9b"
- "\xb7\xba\x68\xa5\x61\x53\x5e\xa9\xc1\x58\x3e\xb5\x7c\x14\xf8\x41"
- "\xe7\x18\xf2\x4a\x4b\x37\xac\x2d\xc8\x37\xac\x2b\x5a\x99\x50\x52"
- "\x50\x5a\x50\x66\xc8\x2b\x59\xbf\x61\x5d\xbe\x61\x6a\xfe\x8c\xa9"
- "\xc6\x1f\xe7\x8f\x0a\x1c\x43\x9b\xa2\x87\x3e\xdf\xd5\x2f\x7a\xab"
- "\xaf\x82\x2e\x52\x65\x2a\x89\x2c\x2f\x5a\xc7\xc7\xed\xb4\xa3\x96"
- "\xcf\xac\x03\x13\x9d\x39\x4e\xe7\xcc\xb2\xda\x91\x26\xbc\x6b\x09"
- "\x0e\xcb\x69\x68\xa2\x73\xc7\xc7\xb1\x89\xae\xda\x51\x06\xbb\x76"
- "\xac\x8e\x9f\x21\x8b\xe1\x58\xb6\x89\xec\xea\x47\xbd\xe8\xb3\x99"
- "\x68\x7e\x76\xd3\x55\x88\xb1\x6c\x04\x2d\x5e\x11\x78\xe9\xe9\x4c"
- "\x72\x4c\x93\x69\xd7\x8e\xe6\x63\x92\x76\xed\x28\xa7\x23\x2a\xbe"
- "\x97\x59\xe2\xc5\xf9\xe3\xda\x51\x5f\xca\x63\xcd\xe9\xbb\x20\x9d"
- "\xf4\xf3\x9c\x76\x94\x83\xcb\x0a\x75\x99\xc6\x5f\xfb\xff\xf0\x60"
- "\x12\xfa\x83\x67\xad\x13\x78\xdc\x97\x4e\x35\x44\x20\x5d\xda\xd6"
- "\x0a\x23\xbc\x8c\x79\x95\xc6\x32\x86\x79\x9c\x90\xc7\xd3\xe8\x9c"
- "\x78\x2c\x4b\xb7\x54\x8e\x83\xbc\x1c\xfb\x59\x5c\x5d\x34\xd2\x57"
- "\xcb\xe9\xe9\x91\xcb\x80\x74\x77\x23\x4d\x29\x74\x4e\x3c\xd1\x15"
- "\x6a\xac\x8f\xc6\xbb\xce\x6b\x47\x27\xf8\x36\x22\xdf\x26\x89\x73"
- "\x8f\xaa\x1b\x45\xfd\xc3\x72\xe5\x37\xe1\xf3\xbe\xaf\x20\x62\x2f"
- "\x9d\xbd\x6d\xbe\x95\x75\x38\x3d\x60\x2b\xec\x86\xc8\xcd\xcc\xc1"
- "\xfe\xdb\x17\xbd\xa2\x4c\xa3\xb3\xc8\x36\xfc\xdb\x33\xdd\x5a\x2a"
- "\x13\xb6\x15\x11\x74\x8e\xf3\x30\x63\x8b\xda\x97\xc7\x31\x27\x3b"
- "\x18\xe8\x73\x8d\x7e\x8f\x78\x42\xfe\x56\x3f\xb6\x53\xae\xda\xd1"
- "\x47\x30\x6f\x90\x7c\x63\x27\x1b\xc8\x0e\xf0\xa5\x46\x93\x9e\x39"
- "\x87\xc1\xad\x93\x71\xd3\x99\xde\x94\x46\xc8\x3f\x22\x01\xd3\x38"
- "\xfc\xf8\x23\x74\x4a\xfc\x84\x13\x9f\x1d\x72\x3e\xbc\x1f\xae\x1d"
- "\x4d\x3e\x81\x03\x75\xd9\x31\x4c\x7e\x71\xb5\xfb\xd9\x19\x1b\x86"
- "\x57\x7f\x0d\x5a\x84\x3d\xd3\xb4\x9f\xe3\x2f\xb4\x6b\x47\x9e\x26"
- "\xfc\x3b\xc6\x01\xec\x44\x98\xfe\xda\xd1\x40\xe3\xbb\x18\x87\xf5"
- "\xdf\xe5\x56\x8e\x5b\x4b\xfa\x3c\x47\xa1\xcf\x49\xb5\xe4\x13\xd6"
- "\x21\x7e\xd4\xa1\xea\x2b\x40\x7d\xed\xd3\x33\xea\x20\x9e\xf2\xc1"
- "\xe7\x2e\x1a\x0f\x41\x9c\xdd\x72\x7e\x0c\xf5\x7f\x9f\x4f\x8c\xc1"
- "\x48\xba\x35\xdd\x56\xde\x4b\xdf\x27\x58\x2b\xda\x77\xa2\x91\x74"
- "\xcc\x55\x3b\x26\x42\xd6\x29\xd4\xf5\x33\x5c\xaf\x62\x20\x9e\xd5"
- "\x46\x58\xe8\x8c\x6f\xd2\xab\x46\xd4\x27\xd2\x2b\x84\x9d\x2d\xeb"
- "\x14\xea\x5a\x17\xc1\x21\x0d\xa3\x8e\x6d\x49\xd2\x92\x8d\xec\xd1"
- "\x8e\xf9\x35\xe9\x18\x7b\x75\x51\x37\xbb\x69\x99\x38\x8b\x1d\xc3"
- "\x6c\x6e\x21\x03\x3f\xdf\xc7\x54\x05\xf0\xbd\x0b\xf5\x78\x14\xf1"
- "\x99\x8f\x55\x23\x3c\xd2\xd6\xc5\x7d\xf1\xad\x28\x03\xde\x56\x8d"
- "\x29\xa6\xf4\x12\x0f\x4f\xfb\x79\x38\xa6\x3d\x14\x0f\x15\xbc\xe3"
- "\xe7\x46\xb3\xda\x31\x67\xa8\xae\x60\x1a\x8f\x7c\x66\x74\x28\x59"
- "\x62\x1e\x5a\x6d\x1d\xe8\x28\x8f\xb6\x18\x82\x1f\x3b\x5d\xce\xa3"
- "\x1a\x79\xed\xa8\x2c\xbc\xae\x3e\xb7\x35\x03\xd0\x98\x38\xa5\x8f"
- "\x8b\x21\xfe\x8e\x2d\xf6\xa7\x67\x4e\x65\xfa\xa9\x2b\x83\x68\xe5"
- "\x17\xab\x1d\x5b\xf5\xb2\x74\xa6\x36\xa6\x3f\x7a\x3d\x7a\xe3\x0c"
- "\xa2\x9d\xb4\x4e\x21\xfd\x1e\xfb\xb9\x0d\x3d\x03\x0a\x93\xde\xcf"
- "\xf4\x63\xdb\xa3\x1c\xdf\x1f\xf6\x7b\x83\x36\x72\x6a\xd0\xf7\x06"
- "\x6d\x64\xcc\x70\xdf\x1b\x82\xf3\x8d\xcc\xa3\x7c\x7d\x4d\x99\x2a"
- "\x7f\xde\x91\xa9\xbe\x10\x79\xcb\xe9\x67\x34\x07\xf4\x67\xb4\x91"
- "\xbf\x21\x1a\x3a\xb1\x9d\x62\x37\x67\xaa\x18\xe2\x69\xe3\xbe\x45"
- "\xe4\x31\xe1\xbf\x90\x5f\x14\x69\x21\x18\x65\x39\x06\x7f\xba\x18"
- "\xb2\x1d\xf0\x35\x7f\x09\x7b\x08\x68\x65\x12\x18\x0a\xe5\x68\x75"
- "\x10\x30\xb0\x10\x2f\x11\x00\x93\x39\x3c\xc3\x9f\x08\x92\xde\x1d"
- "\xfc\x45\x3b\x08\x3f\x18\xff\x4f\xfc\x46\x0a\x7a\x39\x3e\x37\xa8"
- "\xa4\xfc\x76\x07\x40\x24\x5f\x27\x35\x03\x39\x49\xa8\x1f\x79\x99"
- "\x55\x99\x61\x88\xef\x08\x07\x66\xcc\x23\xe1\x97\xdf\x59\xe0\x3b"
- "\x85\x04\xbf\xe3\x4f\x93\x1d\x90\xc1\xad\x9a\x7c\x3e\xcd\x2a\xce"
- "\x3e\x18\xa4\x6e\xd6\x07\x66\xa9\x87\xaa\x30\xfe\x10\x49\x7f\xdc"
- "\x88\x2f\x1e\xe3\x27\xb7\x0f\x02\xdc\xe0\xdc\x1e\x00\xfe\x47\x41"
- "\xfe\x6d\xb1\xd7\x29\xe3\x77\xfd\x4d\x0a\x78\xbe\x55\xdc\xa6\x74"
- "\x7f\x8f\xf8\xaf\xff\x33\x74\x8d\x94\x1f\xfd\xea\x71\x5b\x6e\x28"
- "\x50\x3f\xff\x6f\xb3\xca\x41\x81\x1a\xea\x8f\xbf\x23\x31\xf8\x3d"
- "\xde\x1d\xfc\x7e\x57\xca\x3f\x4f\x38\xd6\x41\xfa\x53\x69\x8f\x02"
- "\xb8\x33\x66\x30\x30\x52\x51\x65\x22\x2d\x8a\x2a\xe4\xff\x49\xd4"
- "\x68\x90\x9e\x86\x80\x60\x6d\x68\xe8\xff\x33\xbf\x09\xdb\xa5\x0a"
- "\x71\xab\x43\x3f\x24\x72\x9e\x22\x8c\xde\x47\x18\xa4\xb0\xbb\xdf"
- "\x1b\x02\xcf\xc3\x0c\x01\xef\xaa\x24\xfc\xd3\x0c\x30\xb5\xf8\xfb"
- "\xa0\xf5\x87\xdf\xff\x83\x3f\x15\xd5\x8f\x1f\x7e\xff\x87\x7e\x4c"
- "\xb4\xe2\x68\x89\xf8\x8d\xfe\xb1\x41\x43\xc9\xa4\x08\x26\x05\x30"
- "\xe9\xe1\x7b\x69\xc7\x7f\xf8\xfd\xf0\xfb\xe1\xf7\xc3\xef\x87\xdf"
- "\x0f\xbf\x1f\x7e\xff\x3f\xf8\xa9\x78\x3f\x82\x49\xbf\xc1\xe7\xc1"
- "\x78\xea\x06\x15\x36\x30\xb5\x0a\x58\x40\x44\xd5\xbd\xa0\xd2\xc1"
- "\x08\xed\xf7\xe7\xe5\x19\x06\x09\xfa\x96\x09\xe8\xac\x81\xbb\xf1"
- "\xfa\x11\x5e\x37\x07\x84\x4f\xf9\xbe\x28\xfa\xa7\x7f\x2a\x64\x9e"
- "\x06\xfb\x85\x61\x30\x02\xc2\x41\x07\x23\x61\x14\x8c\x86\x08\x18"
- "\x03\x63\xb1\xbf\xa9\x87\x28\x88\x86\x1b\x20\x06\x6e\x84\x71\x70"
- "\x13\xc4\xc2\x78\x98\x80\x25\x99\x08\xb7\x60\xdf\xfe\x56\x64\xc8"
- "\xe4\xd0\x65\xa9\x82\xa4\x58\xfc\x83\xff\x33\x20\x89\xbf\xe7\xfe"
- "\x10\xfe\x7f\x35\xdc\x2a\x85\x77\x49\xe1\xf6\x1f\xc2\xff\xaf\x86"
- "\x1b\xfe\x8b\xef\x93\xff\x4b\xef\x2a\x34\xd9\xc2\x6a\xab\x42\xda"
- "\x4a\x65\xa8\x4a\xfa\x0d\xbe\xc3\x37\xa4\x1f\x82\x2f\x38\xbd\xf2"
- "\x97\x84\xd7\x2c\xf1\x58\x09\x20\xc6\x79\x59\xe0\xcf\x33\x5c\x4a"
- "\xf9\xb7\xbd\x07\x2f\x07\x5e\x08\xb9\x1d\x5b\x18\xf3\x68\xbc\x6e"
- "\x94\xf1\x08\x18\x1d\x5e\x97\x30\xfe\xd3\x16\x00\xfb\x59\xbc\x30"
- "\xdb\xcf\xca\x01\xce\x45\x00\x7c\x9e\x0a\xf0\x1f\x47\x01\xce\xf7"
- "\xf9\x71\xf6\x57\xf9\xa9\xfb\xd2\x24\x9e\x0d\x78\x5d\x25\x44\x60"
- "\x57\x0d\x0e\xef\x59\x17\x64\xa6\x18\xee\x9e\x31\x6b\xc6\xbd\x3f"
- "\xca\x33\x24\x24\x18\xee\x31\xde\x7d\xf7\x4c\xe3\x8f\x67\xde\xfd"
- "\x13\xc3\x3d\xf7\xcc\xb9\xdb\x38\xc7\x68\x34\xac\xdd\x5c\x52\x74"
- "\xb7\x71\x75\x81\x61\x5d\x7e\x51\xa9\x61\x55\x51\xc9\xda\x4d\x79"
- "\x25\x05\xdf\x54\xac\xef\xfa\x23\xf2\x6e\xf1\x01\x97\x40\x30\xb7"
- "\xe7\x01\x2d\x23\xd6\xc6\x3b\x60\xa8\x78\xe2\xa5\x2b\xe4\x6f\xed"
- "\x53\x8f\xff\x75\xea\xb2\xb1\xef\x3f\xb0\x7a\xea\xdc\xf9\x6f\x54"
- "\x1f\x03\xb5\x11\xaf\x78\x13\xa8\x27\xe5\x83\x3a\xfa\x2c\xa8\xc3"
- "\xba\x41\xfd\x8c\x05\xd4\x4f\xcf\x02\x75\x56\x04\xa8\x53\x0b\x41"
- "\x3d\x2f\x65\x68\xd8\xe6\x24\x11\xf6\xab\x62\x50\x1f\x36\x80\xfa"
- "\x95\x6c\x50\xbf\xe0\x16\x61\xef\x61\xd8\xef\x74\xdf\x2f\x33\xfe"
- "\xe9\xdf\xb7\xf5\x23\x86\xfc\xec\x5c\xd7\x30\xbd\xb6\xe0\x4c\x88"
- "\xc1\xd2\x1f\x7e\x3f\xfc\x7e\xf8\xfd\xf0\xfb\xe1\xf7\xc3\xef\x87"
- "\xdf\xff\xc7\x7f\x0e\x15\xcc\xfa\x4a\xad\x85\xf7\x2d\x00\x2e\xb3"
- "\x6e\xa2\x5d\x75\xdf\x2c\x9a\x5b\x02\xb4\x86\x0a\x74\x7c\xdf\x15"
- "\x71\x69\xf1\x16\x86\x0d\xff\x08\xbc\xc2\x75\x81\x73\x54\x68\x0e"
- "\x52\x6b\xac\x11\x34\xb1\x20\xe6\x4b\x99\x59\x97\x58\x6f\x7c\x0f"
- "\xf4\x81\x8e\xef\x39\x40\xeb\x46\x11\x7f\xb9\x1d\xde\x6a\x96\xe7"
- "\x57\xc9\x70\x34\xbf\x8a\xe6\x63\x21\xec\x5a\x82\x1d\x66\x3e\x8d"
- "\x9e\xbd\x1a\xab\x9e\x7f\x08\x80\xd6\x9f\xbe\xbc\x9f\x39\xda\x2a"
- "\x00\x5a\x5b\xc4\x3a\x54\x9a\x6b\x83\xf8\xbb\xed\xb0\xbb\x45\xcc"
- "\xaf\x62\xce\x1d\x18\x8e\x61\x7d\x76\x78\xb1\x4e\xca\xb3\x4f\x0e"
- "\xb7\xed\xbc\x0a\x6d\x06\xbe\xce\xc6\xd1\x66\xf0\x42\xf2\x64\x2a"
- "\xff\xc8\x58\x84\x9d\x38\xdc\xdc\x1a\x79\x1e\x19\xe5\x2d\xc1\xa7"
- "\x28\xf2\xc3\x32\x8e\xcc\x96\xf3\x1b\x06\x47\x04\xa5\x95\xf1\x20"
- "\xed\x7d\x98\xc6\x22\xe3\x41\x7a\x64\x1a\x1d\xc9\x5b\x79\x1e\x47"
- "\x43\xd1\x64\xf8\x20\x31\xac\xe0\xc7\x33\x7b\x12\xcf\xac\x8a\x33"
- "\xdc\x78\xf7\x82\x82\xb8\x3b\x98\x31\x72\xfa\x4b\xc6\xd1\x49\x23"
- "\x93\xc6\xce\x5c\x62\x54\xeb\xd5\x53\xd4\xc6\x68\xbd\xfa\xf6\xa7"
- "\xe9\x6f\xd7\xa4\x78\x7e\x37\x68\x13\x77\xe6\xff\xd8\x10\x3e\xef"
- "\x85\xe7\x37\x26\xfd\xee\x97\x0f\x25\x3d\xfc\x78\xe9\xb4\xf7\x8d"
- "\xea\x1b\xfe\xfc\xd2\x3b\xf1\x5f\x11\xc4\xe4\x29\xf4\x37\xbb\x55"
- "\x13\x33\xcd\x4c\x58\xba\xc6\x1b\xde\xa7\x90\x3b\xb5\x89\x65\xf9"
- "\xf7\xce\x6c\xa1\x1c\x1f\x5b\x99\x60\xa6\x34\x0f\xa5\x89\x34\x02"
- "\x62\xe6\xf1\xc0\xb8\x19\xff\x4a\xa9\x0d\x9c\x06\xd0\x0a\x5c\x83"
- "\xb8\x6f\x12\x14\x8a\xd0\x29\x1d\xc6\x5b\xa4\xbc\x5f\xa7\xbf\x4f"
- "\xbd\x31\x43\x8d\x18\xa2\x13\x1e\xa4\xd8\x99\x2e\xa3\xcb\xd0\x96"
- "\xa8\x5d\x1d\x17\x1f\x7e\xf7\x2f\xf1\x29\x6e\x75\x9c\x5e\x8d\xcf"
- "\x2f\x88\x67\xe2\x41\xfe\x4f\x04\x84\x5e\x3d\x35\x26\x31\x3f\xff"
- "\xc7\x9f\x3a\xf3\x7f\xac\x57\x27\xb5\xe4\x27\x26\x8d\xdb\x53\x7c"
- "\x57\x5c\x62\x5c\xfe\xbd\x7a\x35\xbf\xcf\x49\x9a\xfa\xb3\xa7\xf4"
- "\xea\x3b\xde\x33\x46\xe9\x55\x1f\x36\xab\xe0\x03\xf5\xd2\xa3\x1f"
- "\x68\x3e\xf9\xe4\x14\xdc\xb9\xf6\x94\xea\xce\xd4\x53\x6a\x55\xd4"
- "\xa9\x88\x27\xe1\x43\x7d\x38\x7c\x18\x8b\x97\xe1\x61\x68\x57\x55"
- "\x66\xb4\xab\x37\xe5\xb6\x6b\x2a\x3b\xdb\xb5\x4f\x40\x7b\x58\x4e"
- "\x54\xfb\x88\x87\x1f\x6d\x0f\x7f\xe2\xb3\x76\xdd\x1d\xd0\x3e\x12"
- "\xa0\x7d\x32\xa8\xdb\xa7\x40\x4c\xfb\x3d\x51\xcf\xb7\x3f\x3c\x49"
- "\x6d\xbd\xa1\xff\x01\xeb\x04\xed\x43\xd6\x38\x3d\x58\xa7\x8e\x02"
- "\xeb\xed\x11\x11\xd6\x3b\xf0\x9a\x06\xcd\x56\x23\xbe\x27\xc2\x44"
- "\x6b\xd8\x96\x11\x00\x82\x96\x53\x06\x80\x53\x93\x61\xde\xa9\x29"
- "\x78\xbf\x0d\xaf\x38\xbc\xa6\xe2\x75\x07\x5e\xd8\x7f\x39\x45\x7b"
- "\x0b\x41\xfc\x88\xc4\xff\xf6\x5e\x5e\xde\xac\xbc\x7b\x33\xe7\x6b"
- "\x34\x05\x71\x30\x1a\xb9\xa6\x4d\x8c\x9b\x1c\x36\x3b\xac\x20\xee"
- "\x53\x67\x12\xfe\xd5\xab\x97\xff\xbb\x66\xc4\x4c\xd7\x6c\x57\xee"
- "\xef\x3e\xf5\xc2\x28\xe4\x3f\x28\x75\xb8\xdf\x0c\x2a\x27\xd2\xe8"
- "\x34\xf7\x3f\xe0\x32\x47\xe8\xed\x30\xb2\x50\xd6\x63\x11\xf7\xbe"
- "\xde\x69\xae\x42\xfd\x8b\x98\x1e\x3a\x6e\x3b\xc5\xa5\x5c\x27\x5d"
- "\x7e\xe8\x38\xd2\xe9\x88\x2a\x39\xae\x5f\xdd\x9a\x81\xef\xa8\xff"
- "\xba\xd9\xc1\xb0\x56\x8d\xd3\xac\xda\x8e\x71\x47\x87\xe2\xb1\x22"
- "\x9e\xe4\x9f\x61\x5c\x7b\x88\xb8\x47\x9c\xe6\x25\x94\x47\x8f\x22"
- "\x0f\xa7\x9c\x07\xad\xef\x6e\xc4\xfa\x45\x76\xc7\x67\x1e\x79\x82"
- "\xd2\xda\xdc\x0e\x68\xf1\xf5\xaa\xb4\xe5\xa7\x81\xf0\xb8\xcc\x63"
- "\xe2\xe4\xf4\x04\x47\xfb\x11\xd0\xba\x3c\x3e\xff\x13\xc6\x3c\x46"
- "\xf3\x3f\xf7\x21\x0e\xc3\x46\xd5\x4d\xe7\x20\xc2\x4b\x69\xec\x30"
- "\xa6\xd0\xa9\xfe\x18\xf3\x1e\x93\x2b\xdb\x39\x0c\xe3\x73\xa8\x29"
- "\x0f\x2c\x7b\x15\xc6\x55\x0c\xa5\xf9\xe3\x68\xc1\x97\x31\xf5\x72"
- "\xdc\xf5\xe6\x14\x8a\x34\x8c\x39\xcd\x1f\xfb\x30\xcd\xe9\xa1\xf8"
- "\x58\x95\xd3\xac\x7e\x1e\xe3\x7a\x43\xc4\x6d\x17\x79\x8d\xd5\x86"
- "\x88\x33\x63\x9c\x1a\xe3\x0c\xc3\xc4\x69\x30\x2e\x31\x54\x5c\x5b"
- "\x03\xc7\x99\x35\xc8\xf3\xb1\x63\x92\xf0\xbd\x50\xe6\xf9\x37\x97"
- "\x87\xe4\x7d\x37\xf2\x7d\x6c\x83\x12\x3f\xe1\x76\xaa\x3b\x08\xdf"
- "\x89\xa1\x79\x9f\x56\x39\xcd\x29\xa8\x0b\x63\xcf\x0c\x8d\xfb\xe3"
- "\xcd\xc8\x07\xa2\xcb\x11\x22\x6e\x22\x96\x07\xed\x75\x64\x44\x08"
- "\x9c\x23\x30\xce\x8e\x71\xf1\xdf\x20\x0f\x3d\xb7\xe1\xb4\xff\xc1"
- "\x24\x08\x3b\x0f\xd1\x73\xa9\x3c\x42\x2f\x60\xc4\x79\x88\xea\xe8"
- "\x17\x73\xe1\x1d\x86\x2d\xa0\xc1\xf7\xc3\xcc\x6c\xbd\x11\xe3\xfb"
- "\x50\x9f\x74\xb6\xab\x1e\x38\x0f\x91\x7b\x10\x46\x43\x6b\x57\xa9"
- "\x7d\xc2\x70\x8d\xcd\xed\xa1\xf5\x1b\xa8\x67\x91\xbf\xc1\xbb\x1a"
- "\xd3\xf1\x75\x31\x4b\x1b\x20\x8e\x68\xe4\xf3\x57\xcd\x56\x15\xcd"
- "\x07\xa5\xf6\xd0\xa9\x86\x3b\x9c\x5c\x67\x23\xb1\xfd\xd3\x35\x4b"
- "\x73\x77\x89\x06\x2d\xa6\xdd\xaa\xd6\xf3\xb9\xe0\x0e\xc4\x45\x34"
- "\x3c\xea\x33\x5b\xd5\x83\x78\xd4\xd6\xd1\x34\xaf\xb7\xdf\xac\x5e"
- "\xe8\x54\x47\x32\x81\x47\x6f\x90\xf1\x10\x1c\xe6\xc5\xe7\xc7\xf7"
- "\x9b\xb5\xb5\x01\x30\xc9\x81\x79\xcd\x74\x82\x86\x68\x3e\x07\xfa"
- "\x06\xca\x4f\x2a\x23\x9f\x6b\x6b\xdb\xe8\x01\x1b\xfa\x17\xe7\x41"
- "\x5f\x8e\x65\x35\xb4\xba\x69\x8d\xb3\x35\xaa\x69\x1b\x00\xaf\x17"
- "\x6a\x30\x48\x38\xeb\x65\x9c\x84\x23\xa0\xac\xd1\x22\x7f\x2a\xab"
- "\x0e\x24\xd8\xb6\x40\x1a\x09\x2f\x96\xeb\xa6\x46\x84\x6b\x43\xaf"
- "\x45\x82\xe9\x95\x61\x02\x64\x30\x59\xa2\x8f\xf8\x43\x32\xcb\x96"
- "\xeb\xa7\xcb\x1c\x85\xed\xff\xe8\x5e\x51\x6f\xfd\xe1\x12\x0d\xb1"
- "\x82\x06\x15\xd2\xa0\xb2\x0a\xfc\x51\x29\x32\x7e\x3b\xe8\xdd\x81"
- "\x34\x37\x72\x58\xfd\x48\x51\x4f\x39\x6c\x99\x1f\x36\x32\x08\x16"
- "\x79\xa1\x16\x32\x00\xb5\x1d\xa2\xf2\x91\x1f\x1a\x84\x39\x86\xf2"
- "\x36\xc8\x30\x52\xf9\x63\x31\x6e\x9e\x84\xaf\x2d\x00\x5f\x19\xe1"
- "\xa3\xf9\xb0\xc2\xf6\x46\xd9\xfd\xb6\x0f\xda\xf1\xdd\x31\xd4\xbe"
- "\x52\x7d\x8d\xd6\x21\x5c\x1c\x85\x9b\xa6\x80\xfe\x02\x44\x7d\xde"
- "\xaf\xd6\xf4\x0a\x5e\x44\xa3\xfd\x1b\x33\xe8\xdb\xe0\xfb\x2c\x3b"
- "\x18\xdc\x52\x7e\xf9\xc4\x1b\xbf\xbd\xa5\x3c\xa3\x33\xe5\x3c\xe5"
- "\xf8\xc0\x3a\x93\x34\x72\x26\xfa\x27\x49\x6f\x25\x4d\x4c\x9a\x24"
- "\xfb\x2e\x73\xdb\x56\xc5\xcd\x74\xce\x6d\x33\xdc\x6b\xfc\x79\x41"
- "\xdc\x74\xde\xf6\xdf\x71\xce\x38\x05\x5b\xf7\x3f\xf3\xbf\xb5\x14"
- "\x12\xc7\x43\x30\x9c\x9e\xa7\xd0\xb3\xe4\x2f\xe0\xd3\x63\x4b\x35"
- "\xe1\x53\x4b\xe8\x49\x78\x0e\x49\xe3\x56\xac\xd4\x24\x4b\xcf\x63"
- "\x45\xcc\x5d\xdc\xe7\x88\x7f\x90\x9e\x6f\xe7\xb8\x66\xb6\x50\xce"
- "\x33\x5e\x32\xfe\xf4\xf1\x7f\xd3\x9c\x7a\x7e\x4d\x52\xc4\x1d\x66"
- "\x82\x99\xbe\xc8\x78\x10\x43\x5a\x29\x64\xca\xeb\x9c\x82\xc0\x54"
- "\xc7\x29\x95\x14\x3f\x71\xfa\x02\xe3\x2b\xcb\x96\xde\xf6\x67\x63"
- "\xf4\x0d\xef\x67\xb7\x52\xfa\x1b\xa2\x83\x72\x9a\xe2\xa7\xea\xe9"
- "\xea\x69\xbb\x7e\xf4\x73\x81\xe5\xf1\xa5\x9a\x3f\x27\x4d\x5a\x5f"
- "\x42\xa1\xb7\x71\x5f\x8c\x7c\x95\x99\x57\x8c\x61\xcf\x3f\xfe\xe9"
- "\x7f\x7f\xfc\x8d\xae\xa7\xa6\x61\x49\x6f\xa8\xed\x7a\xea\xf1\x37"
- "\x3e\xfd\xef\x9a\x1d\x04\x79\x67\xbe\x31\xc6\x10\x36\x77\x43\xdb"
- "\xa3\xd3\x38\x55\x37\xed\x89\xad\x1f\xdf\x32\xe1\xd8\xcd\x27\x27"
- "\xb6\xdf\xf2\xef\x93\xfe\x7e\xeb\x17\x06\xe7\x64\x86\x7e\xc4\x03"
- "\xc6\xc9\x83\x7e\x04\xa0\x1f\x71\x0e\xfd\x88\x4a\xf4\x23\x3a\x03"
- "\xfd\x88\x8f\x46\xcd\xa9\x10\xbe\x84\x80\x17\xfe\xcf\xf4\x7f\x47"
- "\xff\x67\x1d\xfa\x3f\xd3\x4f\x85\x3d\xf6\xc4\xa9\x88\x4c\xe1\xff"
- "\x44\x45\x8e\xe0\x3e\xd0\x78\xbc\xa3\x1f\xf4\xe1\x64\xbc\xc7\xe3"
- "\xfb\xb4\xe8\xf0\x60\x9f\x68\xc9\xd8\xf6\xb0\x6c\xf4\x89\x12\xd1"
- "\x27\x4a\xca\x6b\xd7\x2d\x7c\xaf\x7d\xe4\xec\xa4\xf6\x51\x83\x7e"
- "\xd1\x43\xed\xc9\xb1\x33\xdb\x17\x6a\xa1\xfd\x11\x10\xbe\xd1\x4e"
- "\x30\x7e\xa4\x8d\x51\xfd\x31\x02\xb4\x7f\x1c\xdb\x3c\xea\x8f\x91"
- "\x56\xeb\x1f\xf5\x78\x45\x41\xf3\x1f\xa3\x21\xfc\xfd\x07\x9a\xe1"
- "\xfd\xf9\x95\xf6\x53\x5a\x18\x7b\x6a\x24\x5c\x39\x15\x85\xf7\xdc"
- "\xfd\x70\xea\x05\xd0\x9e\x1a\xa5\xbd\xe2\x2f\x6f\xcc\xe7\xa7\x26"
- "\x7f\x30\xf7\xd4\x94\xc4\x3f\x9c\xba\x2d\x79\xc9\xa9\xb8\x0f\x3e"
- "\x38\x35\xd5\x3e\x29\xd0\x6f\xa2\x32\x03\xdc\xb5\x93\x3c\x58\xe4"
- "\xf7\xbd\xf1\x23\x8c\x23\x76\x15\x70\x7f\xf0\xc7\x92\x5f\xf8\xe3"
- "\xa4\x05\xcf\x3f\xfe\xf8\x4a\x8d\x3a\x69\x12\xf7\x2e\x25\x4f\xd3"
- "\xef\x7d\x06\xfb\x9c\x73\xdb\xfc\x3e\x67\x9c\xd3\xef\x73\x1a\x46"
- "\xcc\xdd\x18\xe4\x9f\x0d\x60\xd8\x99\xc4\x38\xc3\x54\x23\xf7\xcc"
- "\xba\xc6\x2b\xbd\xb5\x19\x7b\x8d\x73\xe3\x74\xf7\x76\xa3\xcf\x16"
- "\xbe\xfb\x85\x95\xbf\xa4\x0b\xbd\xb6\xaf\xf5\xea\xe7\x9f\xc9\x9b"
- "\x9d\xb5\xe3\x4e\x94\xf9\x0d\xe4\x05\x87\xbf\xb0\xeb\xc4\x0b\x2f"
- "\x3c\x7f\xe2\xd4\x53\x4b\xa7\xfd\x2b\x86\xbd\x1f\x57\x86\xfa\xf3"
- "\x3f\xf2\xff\xc7\xcc\x2b\x89\x61\x2f\x3c\x71\xe2\xf9\x57\x57\xaf"
- "\x6e\x23\x7d\x21\xd9\xca\x6d\x54\xbf\x39\x1a\x7d\x12\xd5\xef\x5c"
- "\xe6\x1b\xd1\xff\x19\xdf\xae\x6c\xcb\x7e\xa8\x97\x3f\xd4\xcb\x1f"
- "\xea\xe5\x7f\x45\xbd\x1c\x07\xa2\x5e\x8e\xdf\x13\xaa\x5e\x2e\x5c"
- "\xfc\x50\xfa\x1c\xc3\x86\x95\x06\x53\xc9\xfa\xd5\x25\x79\x6b\x0d"
- "\xc5\xeb\xf3\xf2\x0b\xf2\x47\xc1\x60\x44\xde\xca\xb2\xa2\x8d\x79"
- "\x65\x05\x43\xd6\x3a\xc6\xca\x3e\xe9\x50\xdf\x7a\xbc\x7b\x78\xdf"
- "\x7a\x42\x4c\xe8\x7e\x89\x0a\xdb\xf6\x09\xc6\x10\x71\x53\xa4\xb8"
- "\xd4\x10\x71\x0f\x4a\x71\x85\x21\xfa\x80\x63\x44\x1f\x63\xc2\xce"
- "\x50\x71\x18\xde\x20\xfb\x24\xd8\x4f\x53\xb7\x4d\xe9\x03\xf2\x49"
- "\xce\xc3\x84\x0f\xb0\x4c\xbd\x18\x7f\x52\xf6\x65\xec\x30\x61\xa7"
- "\xec\xa3\x49\xfd\x90\x78\xa7\x39\x09\xcb\x39\xc1\x1e\xa2\x8f\x72"
- "\xa7\x94\xaf\xc7\xef\x1b\x2d\x36\xb8\xcc\x37\x47\x0c\xf5\x8d\xba"
- "\x40\xf4\x21\x6f\x8e\x57\xc0\xce\x96\x61\xd1\x9f\xa4\x3d\x20\xfa"
- "\x68\x8d\x5a\x1f\xdc\x7c\x92\x99\xc7\xd7\x93\x4f\x49\xfd\x48\xc2"
- "\x23\xfa\x92\xdd\xbc\x2f\x89\x7d\xc5\x1e\x4c\x5b\x16\xd0\x9f\xec"
- "\x41\xdf\x38\x9c\xfa\x93\xe7\xe1\xe6\xc3\xd4\xa7\xdc\xc7\x71\x5d"
- "\x20\x5c\x69\x84\xcb\x0e\x37\x5b\xb9\xdf\x27\xd2\x1e\x0b\x18\x37"
- "\xc3\x7e\xed\xcd\x7c\x2f\x51\xd9\x2f\xc4\xf8\x2e\xbb\x36\x65\xd0"
- "\x57\x23\x5f\x50\x2a\x47\x95\x90\xc3\xcd\x21\xfa\x3f\x5d\xb5\xa2"
- "\x1f\x38\x71\xb0\xff\x43\xf8\x7c\xe6\xf1\xbf\x69\xe4\x38\x27\xc6"
- "\xc9\x38\x03\xf5\x72\xe5\xfa\x75\xab\x8a\x56\x6f\x28\x29\x30\x94"
- "\xa6\xa6\x1a\xd6\xae\xcf\x2f\x98\x31\x63\xc6\xa8\x20\xfd\x8b\x10"
- "\x3e\xed\xc7\x49\xa4\x87\xe4\xd7\x4a\x7a\x98\x84\x3e\xa7\xe4\x37"
- "\x4f\xac\x0a\xee\x5f\x7c\x9c\x24\xf9\xb7\x7a\x84\x31\x4a\x30\x2d"
- "\x41\x30\x88\x4f\xf2\x91\xc9\xcf\x1d\x2b\xc1\xb4\x2b\xf1\x60\x1c"
- "\xef\x17\xd1\xba\xbb\x7e\x51\xbe\x3e\x05\x9e\x07\xa4\xfe\x0e\xea"
- "\xfd\x08\xa9\x9f\x70\x8b\x5e\x81\xe7\x01\x7f\x7f\x43\x25\xc3\xcc"
- "\x0a\xec\x9b\xe0\x7b\xb2\x2c\x13\xbf\x1f\xdf\xda\x2b\x70\xab\xf4"
- "\x7e\xbf\xff\x96\x62\x45\x5f\x6a\x9c\x1f\x37\xe8\x25\x18\x4b\x30"
- "\x8d\xad\x17\xa4\xb2\xea\x02\xf0\x1c\x0f\xc6\xd3\xfa\x9f\x12\x1e"
- "\x4d\x00\x4c\xb7\x82\xc6\xde\xa1\x34\x5a\xc7\x0a\xdc\xcd\x98\xbf"
- "\x5d\x2a\xdb\x24\x45\xf9\x11\x86\xe3\x8e\x41\x98\x89\x32\xcc\xac"
- "\xc0\xbe\x14\xf5\xe7\xf8\x5a\x4c\x98\x94\x4a\xfa\x84\xd7\x08\xa4"
- "\xfb\x1f\x01\x7d\xba\x70\x29\x9d\xb2\xfc\x63\xfa\xb1\xbf\xd0\x14"
- "\xd4\x4f\x9b\xa4\x28\x3f\xf6\x0d\xa3\x65\x1e\x69\x65\x18\x65\xf9"
- "\xed\x82\xc6\xa8\x28\x7f\xf9\x27\x75\x2b\xf0\x8c\x23\x9d\x22\x5c"
- "\x01\x79\x79\x14\x78\xce\x49\x7c\x0c\xe0\xf5\xad\x06\x85\x3c\xfe"
- "\x43\xa2\x27\x80\xd7\xb7\x26\x2b\xf0\x5c\xa6\xf8\xe0\x72\xdd\x5a"
- "\xa8\xc0\x73\xd9\x5f\x2e\xd4\x63\x01\xb3\x47\xd1\x8f\x55\x33\xf3"
- "\xfb\x63\x14\x78\x8e\xc9\x30\xfd\x23\x9e\x6f\x16\xb2\xbd\xb5\x4d"
- "\xb6\x45\x42\xae\x13\x8d\x84\x1b\xc3\xcf\x06\xda\x02\xa4\xab\x77"
- "\x28\x9f\x0c\xa0\xe4\x53\x00\x5d\x52\x5f\xdc\x10\xa7\x28\xdf\x05"
- "\x89\x4f\xa3\x02\xf0\xa4\x28\xca\xf7\x9f\x12\x9e\xb0\x00\x18\x85"
- "\xfc\x5b\xfb\x24\x3c\xda\x00\x18\xa5\xfe\x5f\x94\xf0\x04\xe6\x75"
- "\xfc\x9b\xf9\x64\x08\xd2\x7f\xe2\x15\x86\xf5\x7d\xc3\x18\x94\x4e"
- "\x7c\x3b\x98\x8c\xed\xdf\x1b\x7c\x5d\x2d\x8b\x5e\x91\x4c\x7b\x4a"
- "\xa1\x8d\x4e\xe2\x63\x83\xd7\xc8\x4e\x4f\x2e\x6f\x42\x7b\x26\xca"
- "\x00\x46\x61\xbb\x27\xf3\x7d\x1c\x31\x6d\x86\x1d\xc6\x96\x05\x7e"
- "\x07\xb0\xc3\xe4\x3d\x52\x1c\x96\xff\xc6\x6e\x39\x8e\xc2\xc5\xf8"
- "\xe2\x64\x6c\xff\xc6\x8b\xfd\x01\x60\x72\xb1\x04\x8b\x76\x7f\x62"
- "\x4a\xa8\xf5\xcb\xc3\x7d\x7f\x29\x8d\x65\xbe\xca\xf1\xb4\x9e\x79"
- "\x51\xbb\xcf\xcc\xc0\x56\xee\x06\xc3\x04\xa8\x3c\x07\x53\x74\xd4"
- "\xc7\xdf\xb7\x05\x74\x95\x26\xe6\xa6\x3d\x68\x3b\x1d\x7d\x50\xe9"
- "\x60\xbd\xb4\xcf\xeb\xb6\x2b\xa0\xb3\x79\xf8\x99\x75\xb1\x6d\x15"
- "\x9f\x87\x5c\x93\xeb\x53\x33\xa8\x9c\x48\x69\x7b\xa0\xb3\xa1\x07"
- "\x2a\x1b\x82\xd3\x56\xde\x02\xb1\x1d\xb4\x67\xac\x19\x22\x89\x0e"
- "\xfa\x9e\xe2\x89\x5e\xd4\x5e\x71\x00\xb4\x95\xe8\x5d\x76\xe4\x5b"
- "\x65\x5a\xba\x88\x96\x9d\x17\x40\xf7\xc6\x2a\xab\x7a\xc7\x05\xa2"
- "\x77\x69\xfb\xdb\x5b\xdc\xea\xd6\xd8\x54\x68\x8d\x3d\x0b\x6d\xb1"
- "\x73\xa1\xad\x3c\x19\xf6\x5d\x80\x88\x56\x77\x22\xb4\x69\x1f\x82"
- "\xb6\xb8\x64\xb0\xf5\xe1\xb3\xc1\x8b\x30\x4e\xbe\xff\xd1\x79\x98"
- "\x62\xad\x7b\x06\x74\x76\x81\x13\x79\x36\xe5\xb4\xbc\x97\x0f\xbd"
- "\x87\x2a\x47\xe9\x78\x88\x45\xfa\x7a\x91\x96\xfb\xce\xc1\x6d\x61"
- "\x71\xb1\x60\xa4\xf6\xd7\x56\xef\x01\x6d\x05\x8c\x1c\x46\x2f\x62"
- "\xf8\x3e\xa0\xe8\x47\x35\xee\xc7\xb6\x1e\xef\xfd\xa8\x13\x2e\xf3"
- "\x6d\x89\x98\xf7\x59\x69\xdc\xab\xaf\xf2\x30\xea\xd9\xa6\x2c\xda"
- "\x17\x04\xdb\xe9\xdb\xb2\xe4\x38\xda\xdf\x94\xf6\x2d\x9d\x19\x03"
- "\x7a\x9b\x27\x09\xde\xbd\xd6\x4b\x6b\xef\xfb\x68\x3f\x04\xc2\x87"
- "\x6d\xbe\x86\xc6\x9f\x90\x9e\x69\xd8\xc6\xf7\xdd\x86\x70\x98\x1e"
- "\xe5\xdf\xc5\xf7\x15\x66\x37\x2d\x73\xfa\x6e\x5a\x76\xc5\xf7\xea"
- "\xb2\x7e\xf6\xea\xb2\xaf\xbc\xaf\x2e\xfb\xb2\x72\x33\xe8\xbc\x37"
- "\x2d\x73\x74\x9a\xb8\x0c\xf4\x9d\xa6\x8b\xb4\x8e\x5e\x47\xe7\x55"
- "\xae\x78\x16\x65\xef\xf9\x1b\x6c\x2d\x82\x58\x5f\xd4\x92\x2a\x9b"
- "\xe7\x13\x58\x51\x01\x0c\x9f\x2d\xa1\xca\xd7\x1f\x9d\xa9\x93\xc7"
- "\xd3\x5c\xe6\x38\xbd\x5d\xfb\x08\x5f\xf3\xef\x88\xca\xd6\xe1\x15"
- "\x81\x97\x1e\xaf\x18\x16\x9d\x19\x83\xbc\xaa\x1c\xbb\x5d\x05\xb4"
- "\x7f\xcf\x4c\x1f\xa8\x2e\x40\xdc\x74\xa4\x5f\x3f\x0c\xdf\x26\xfa"
- "\x6a\x0f\x1a\xee\xa8\x82\x6d\xb4\xf7\x2f\xf9\x00\x54\xbf\xc8\x1f"
- "\xc5\x7c\xca\xed\xda\x45\x5c\x56\x58\x47\x9c\x2c\xfa\xa0\x81\x7c"
- "\x3a\xe7\x73\x85\x2a\xc7\x73\x85\xea\xfe\xe8\x83\xb7\x21\x4c\x03"
- "\xc2\xcc\x96\x78\xd8\x4b\xb8\xb0\xde\x38\xc6\x78\x40\x83\x38\x4d"
- "\xbf\xbb\xda\xad\x3d\xb4\x9f\x9d\x45\xb8\xb6\x41\x5c\x88\xbb\x8e"
- "\xfb\x49\x71\xdd\x72\x18\xf9\x49\x7b\x11\x8e\xd2\xdb\xdc\x49\xf4"
- "\xcd\xd0\x6e\x2b\xee\xa5\xfd\x2b\x46\xb1\x01\x91\x1f\xf9\x70\x54"
- "\x57\xc7\xb8\x61\x84\xcb\x0c\x19\x84\x9b\xd2\xd1\x99\x1d\x98\xee"
- "\x36\x56\x59\x88\xfe\x22\x2c\x76\xb1\x42\x15\xed\x65\xdb\x8a\xe9"
- "\x45\xde\x53\x93\x64\x1a\x29\x0f\xbe\x97\x2d\xd1\x89\xfa\xd0\x5a"
- "\xec\x86\x31\xf5\x34\x4e\x0e\x4b\x09\x1f\xe1\x42\x3d\xb0\x63\x59"
- "\x6f\x6b\x2d\x76\x80\x8f\x05\xe1\xb4\x4b\xf8\x2c\x41\xf8\x30\x9c"
- "\x21\x3e\xd2\xbf\x36\x4c\x33\xa6\x99\xe3\x5b\xf2\x3b\x1f\xe1\x73"
- "\x83\xd6\xc0\xe9\x7d\x9c\x70\xf0\x7d\xa1\x11\xa7\x75\xe3\x83\xe8"
- "\x3b\x4e\x75\x3b\x2a\x0b\x35\x7c\xdd\x3c\xa6\x7f\x7b\x5b\x6f\x18"
- "\xeb\xcf\xd2\x8c\xe5\x6b\xe6\x1f\x04\xfa\xd6\x8a\x30\x7f\x61\xfd"
- "\x85\x9a\x31\x7d\xe8\xeb\x21\x0c\xed\xa3\x45\x74\x06\xca\x72\xc9"
- "\x82\xc7\xe7\xc2\xe3\xc9\x0b\x93\xe7\x42\xda\x03\xf3\xe7\x82\xf1"
- "\xbe\x04\xe3\xac\x1f\xfd\xe4\x47\xfc\xe1\x47\x3f\x99\xfd\x23\xc8"
- "\x78\x62\xc9\x5c\xc8\x58\x3c\x17\x96\xe2\x95\xb1\x74\xc1\x92\xe4"
- "\x05\x4b\xe7\x42\xd6\x43\x0b\xf1\x6d\xfe\xdc\xbb\x8d\x0f\x27\x64"
- "\xcc\x5f\xb8\x00\x1e\xcd\xbc\xc7\x78\xcf\x3d\xf0\xc0\x82\xd4\xbb"
- "\x8d\x46\xe9\x7e\xb7\x91\x40\x9e\x9a\xbd\x60\x69\x42\x46\xc9\xfa"
- "\xb2\xf5\x09\x8b\x17\xce\xa7\x10\x58\xb0\x60\x6e\x46\x90\x1f\x19"
- "\xef\xbd\xea\x25\x7e\x3b\xd9\xe5\x14\xda\xbf\x18\x1a\x51\x0f\xf0"
- "\xea\xe3\xfb\x22\xc1\x1d\x7f\x6a\x24\xf9\xf1\xb6\xe0\xf6\x18\x6a"
- "\x4f\x5d\xe6\xdb\x49\xfe\xe5\xc4\x47\xda\x43\xf8\x3c\xcc\x98\x8b"
- "\x71\xe3\x25\x7f\x24\x0c\xe3\xdd\xc1\xf1\xd3\xb2\x31\xfe\x56\xda"
- "\x67\xc7\x86\x17\xf2\xde\x89\xf6\x10\x79\xec\x80\xfe\xca\xac\x30"
- "\xbe\xcf\x21\xca\x9d\xf6\x9f\x70\x99\xef\x98\x15\x50\xef\x7b\x68"
- "\x9f\x0a\x1a\x4f\xbe\x04\x77\x8c\xe9\x2c\x4b\xa2\xbd\xa8\xc0\x56"
- "\x26\xe1\xb8\x32\x88\x63\x94\xb4\x57\xa2\xbd\x91\xf6\x00\x11\x78"
- "\x2a\x02\x6c\x84\x9d\xf0\xec\xc3\x38\x09\xd7\xa3\x9d\x68\x2b\xd0"
- "\x96\xff\xd9\x57\x19\x0f\x2c\x7a\x51\x97\x6f\x20\x1e\xc4\xf8\xeb"
- "\x1d\xc7\x03\x74\xdb\xd9\x56\x8e\x70\x6f\xa4\xa8\x68\x3f\x06\xbe"
- "\x37\x03\xdc\x6e\x45\x1d\x77\x7a\x6b\xb3\xc7\xb3\xcb\x7c\x3f\xc4"
- "\x11\x58\xbe\x04\x2c\x5f\x9c\xaf\x36\x3b\x96\xef\x2d\xca\xe1\xe2"
- "\x63\x18\xbd\x47\x23\xdc\xc0\x60\xd8\x8d\x14\xe6\xa2\xef\x3b\xb4"
- "\x5f\x37\xe3\xe1\x1a\x0c\xff\x04\xed\x5a\x37\xc2\xc6\x12\xec\x4c"
- "\x0f\x84\xf3\x7d\x50\x2a\x55\x70\x0e\xe2\xb3\x7d\xd1\xd9\x13\x02"
- "\xf2\x23\x3c\xd9\xa2\x1d\x43\x59\x5c\x46\x3c\xfd\x3c\x5c\x8d\xe1"
- "\xbf\x47\xfc\x37\x93\xbd\x14\x36\x7c\x06\xdf\x6b\x4a\x1a\x93\xf7"
- "\xbf\xd3\x3e\xcf\xdb\xc4\x7b\x2b\xf2\x92\xbe\x13\xd0\x37\x7e\x97"
- "\x39\x1e\xfd\x9f\xb8\x14\xd1\x56\xce\xe0\x79\xd0\xbe\xb2\x4c\xff"
- "\xf7\x0c\xc4\x3b\xd1\xba\xa5\x8f\x9f\xd3\x6a\x87\xf8\x62\x5f\x65"
- "\x21\x28\x68\x8a\x27\xfa\xc9\x86\x20\x2f\x12\x50\x0f\x46\xba\xcc"
- "\xd3\x40\xa1\x07\x13\x11\xcf\x78\xa4\xaf\x1b\xcb\x34\x1e\xf1\xc4"
- "\xf9\xfa\x0b\x31\x5f\xec\x2f\xb2\x42\xf4\x95\xfc\x38\xa4\xf4\x49"
- "\xc1\xe9\xef\xe8\xa1\x74\x08\x1f\xe6\xea\x27\xf8\x3b\x7a\x89\xe7"
- "\x92\xde\xa1\x5e\x4e\x33\x29\xf4\x72\x32\xd2\xf2\xe3\x80\x78\x8b"
- "\x22\x3e\x0c\xe3\x7f\x2a\xc5\x63\xdd\x9f\x76\x4c\x41\xef\x69\x8c"
- "\x9f\x87\xf4\x3a\xb1\x6e\x6b\x30\xbf\x96\x46\xc9\x37\x91\xe0\xed"
- "\x0a\x78\x0f\xc2\xcf\x27\xbd\xa1\x76\x87\xe0\x9b\xa4\xba\x83\xf0"
- "\x3a\x97\xf9\x4e\x7d\x30\x7c\xc2\xe7\x08\x9f\xea\xa7\xef\x4e\x63"
- "\x70\xfc\x9d\x6e\x8c\x7f\x94\x74\x1d\xef\xcb\xc9\xd7\x27\x7b\x42"
- "\xb6\xac\xb5\x98\xe4\x75\x67\xae\x02\xbe\x0a\xe1\xf2\x25\x1e\xa9"
- "\x25\x1e\xb5\x48\x7d\xf7\xb3\x12\x0d\x75\x8a\x34\xc7\x31\x4d\x31"
- "\xf2\x71\xbc\xac\x97\x21\xd2\xb4\x2b\xd2\xf4\x92\x1c\x99\xc8\x47"
- "\xeb\x1a\xf0\xa7\x91\xec\x64\x20\x0e\x2a\xdb\x68\x97\xf9\xae\x08"
- "\x45\xd9\x93\x31\xdf\xb2\xbd\xc2\xee\x8c\x46\x1d\xba\x07\xc3\xee"
- "\x45\x9c\xb7\x50\x1d\xd8\x47\xfe\xa0\xc3\x0d\xac\x32\x25\x42\xe8"
- "\xee\x5d\x6b\xc7\x7a\x80\x9e\x13\xe8\x99\x70\x33\x57\xaa\x54\x27"
- "\xef\x5a\x8b\x77\x0a\xe7\xe7\xcb\x90\x1d\x66\xae\x45\x3e\x81\xf3"
- "\xae\x1a\x3a\x1b\x0c\xdf\xbd\x52\x1e\x09\xb4\x77\x28\xd2\x3f\x01"
- "\xdb\x1d\x60\x9b\x10\x6e\x0b\xcc\xc7\xf0\x5b\x78\x5d\x15\x70\xfc"
- "\x5d\xe4\x91\x42\xfa\x3d\x0b\xdf\x6f\x94\xd2\x8f\x21\x7c\xf8\x7c"
- "\xb7\xf4\xac\xf2\x12\xae\xcb\x72\x1d\x4c\x08\xe3\xe9\xb0\x1e\x72"
- "\xfc\x98\x9e\xf6\x69\x15\x38\xa7\x7f\x89\xf7\x85\x78\xff\x1b\xde"
- "\x1f\xc5\xfb\xef\x69\xdf\xd4\x4a\x2f\xaf\x8f\xf4\xfe\x73\xbc\x2f"
- "\xc1\x7b\x0d\xde\x97\xe2\x7d\x2b\xde\x1f\xc4\xfb\x93\x54\x2f\x68"
- "\x0f\x78\xda\xcb\x06\xdb\x56\xa1\x5b\xf4\xed\xcf\x95\x42\x3c\x58"
- "\x80\x30\xc9\xbc\xbe\x0a\xfb\xa2\x13\x72\x9c\xce\xf7\x9a\x46\x7d"
- "\xa0\xb0\x70\xa1\x0f\x22\xcc\x2b\xdb\xa1\xcb\xfe\x30\xc9\x36\x49"
- "\x75\x51\x0a\x13\xf8\x33\x10\xff\x44\xa2\x95\x09\x5c\x61\x42\xe6"
- "\x12\x7e\x91\x4e\x1b\x22\x4f\x55\x60\x9e\x76\xb8\xcb\x41\xfb\x20"
- "\xe1\xfd\x2c\xdf\x67\x12\x12\x22\x18\xd7\x7b\x6c\x67\x39\xbe\xbb"
- "\x4e\x48\x70\x16\xe2\x31\x4f\x2f\xc2\xa7\x07\xe8\x52\xb4\xcb\x9c"
- "\x90\xa5\xd0\x25\xf4\xf5\x6f\x7f\x9e\x74\x86\xf8\x4e\x65\x1b\x6b"
- "\xe2\x6d\x39\x2f\x0b\xc7\x7f\x59\xe8\x64\xa3\x34\x37\x49\xd4\xdf"
- "\x84\x66\x05\x9e\x93\x88\xe7\x67\x8a\xfa\xde\xe7\x6f\xd7\x12\xba"
- "\x14\xf6\xa8\x05\xf3\xc3\x7e\xe5\x9d\xbd\x92\x5d\x75\x6a\x2a\xa8"
- "\xbe\x24\xb8\xed\x70\x81\xef\xd7\x84\xf1\x93\x08\x8f\xb3\x92\xef"
- "\xdf\xef\xd4\x98\xa8\xbc\x33\x62\xe5\x78\x1e\x17\x75\xb0\x99\xea"
- "\x81\xa6\x98\xc7\x61\xfb\x77\x9b\x5e\x8e\x03\xb1\x2f\x9c\x53\x53"
- "\xc6\xe3\x32\xfc\x78\x17\x39\x24\xbc\x9a\x90\xe7\x2f\x58\x16\xd9"
- "\x13\x00\xd4\x77\x56\x41\x98\xcd\x73\x06\xd2\x3d\xcc\x9b\x50\x05"
- "\x23\x6d\x9e\xa3\x30\x0d\x20\xca\xe6\x39\x0b\x77\x02\x4c\xb6\x79"
- "\xea\xd0\x5f\x69\xa1\xf8\x77\xef\x00\x95\x0a\xef\x95\xb7\x57\xa9"
- "\x55\x36\x4f\x19\xc4\x55\x69\xf1\x5e\x0c\x0f\x85\x31\x97\xcd\x93"
- "\x8a\x70\xf9\x90\xee\x65\x97\x93\xc3\xd8\xa7\x39\x5e\xd0\xa7\xee"
- "\x62\x95\x36\x0f\xf6\x1d\x3c\xa7\x31\xdc\xc7\xd2\xbd\x5f\xe3\xe5"
- "\x62\x3e\xcb\x22\x47\xba\xf7\x32\x9b\xbf\xeb\x5d\x7c\xff\x94\xa1"
- "\x2c\x99\xcd\x93\x08\x9d\x4e\x27\xc2\x55\x32\x56\xb3\xc8\xbe\xe2"
- "\x8a\x1a\x06\xe8\xbc\x84\x9a\x45\x0e\x56\x9b\x0a\x03\x58\x0e\x6c"
- "\x87\xd9\xc0\x73\x78\xaf\x5d\xe4\xe3\xef\x96\x54\x3d\xd3\xa7\xc2"
- "\x0c\xec\x88\x51\x19\x6c\x9e\x1e\xc8\xc1\xae\x44\xfa\x66\x07\x23"
- "\xfa\xc7\x6e\xa7\x7e\x58\x22\xed\xb5\x1c\x99\xbe\xb9\x92\x61\x9c"
- "\x8e\x45\x11\x9d\x7d\xc0\x6a\x30\x6d\x74\xea\x18\x8e\xcf\x92\x6a"
- "\x44\x58\x07\xc1\x05\xe2\x21\x1c\x04\x9b\xee\xa5\x33\x30\x52\x8d"
- "\x03\x51\xa9\x06\xbc\x92\xf0\x32\x61\x5a\x33\x33\xc7\xbc\x47\xfb"
- "\x65\x62\x7a\x0b\xbe\x37\xbb\xe9\x6c\x07\xe2\xa5\x17\xc2\x11\xde"
- "\x82\x7a\x95\x8c\xfa\x89\xf4\xa6\x5a\x39\xbd\xb5\xa9\xef\xba\x79"
- "\x39\x52\xff\x20\xca\x91\xfa\x0e\x85\xf7\xa3\xee\xe0\xb3\xbd\x5f"
- "\xc4\x7d\x8a\xe9\x32\x79\x3a\x4b\xaa\x1d\xcb\xe7\x70\x63\x3d\x44"
- "\xbe\x56\x11\x1f\x91\xaf\x55\xc4\x4b\xc4\x6f\xb7\x95\xef\x01\x2c"
- "\x8f\x63\x20\x2a\x0d\x7d\x95\xb4\xe8\x01\xee\xab\xa4\x19\xdc\x1c"
- "\x77\xda\xad\x88\x27\x1b\xf5\x5b\xc3\xf4\x69\x06\x66\x49\x33\x0e"
- "\x98\x0d\x90\xbe\x99\xb9\xd3\x3d\xdb\x3d\x39\x9b\x41\x33\x1d\xaa"
- "\x54\x74\xde\x9e\xad\x3c\x1f\xcb\xd9\x86\xf7\x64\x8c\x87\x1b\x30"
- "\xaf\x77\x59\x54\x9a\x81\xf2\x63\x35\x69\x46\xc4\x99\x80\xb8\xf2"
- "\x89\xa6\xaf\xe9\x2c\xb3\xe8\xb4\xa4\xaf\x39\x7d\x69\xb9\x3e\x4b"
- "\x5a\x95\x4f\x9f\x66\x92\x75\x88\xf4\x47\xf0\xad\x0e\x16\x3b\x99"
- "\xc7\xe6\x39\x84\xad\x0e\xf6\x91\x9c\x67\x29\x1e\xfb\x4a\x47\x51"
- "\xce\xa4\x53\x65\x78\x6f\x01\xd2\x9f\x4e\xd3\x2e\x82\x7d\x97\x74"
- "\x68\xb1\xc9\xb9\x3d\x01\x4c\x2a\x7c\xaf\xcc\xf1\xe8\x60\x85\x49"
- "\x5b\xe5\xb5\xa4\x65\x74\x9a\x48\x2e\x67\x30\x0d\xa5\x2b\x86\x48"
- "\x15\xf6\x17\x54\xcc\x13\x59\xee\xd0\x8e\x29\xac\x64\x9d\xce\x54"
- "\x84\x35\xf1\xf3\x03\x49\x8f\x08\x3e\xad\x8f\xd9\xbd\xfa\xc5\xbc"
- "\x6c\x6c\x6c\x15\x74\xf4\xdd\x0b\xd4\x67\xeb\xe8\x6b\x21\x3d\xf5"
- "\x21\x5f\xba\x50\x47\x07\xd2\xfa\xaa\xc2\x56\x5c\x01\x15\x86\x79"
- "\x3b\x0a\x8f\x62\x7c\x1b\xc2\x9d\xe6\x7a\xbb\xf8\x8a\x27\xd2\xa3"
- "\x4f\x4b\xf2\x58\xd2\xec\x8b\xaf\x0c\xb0\x8e\xc2\x3a\x58\xde\x57"
- "\x85\xbc\x3a\x0a\x69\x17\x3d\x9a\x4e\x53\x3e\xc2\xb8\x30\xbc\x85"
- "\xeb\x7f\xda\xc5\x7e\xb6\xf8\x59\x76\x79\xf1\x95\x4f\x59\x5a\x21"
- "\x7b\x37\xa7\x1c\xc6\x8e\xde\xce\x7c\x54\x2f\x4e\xf7\x1c\x85\xd1"
- "\x67\x69\x2f\xfd\x64\x48\xcd\xf3\xb1\xb4\x8b\x97\xd9\x8a\x67\x89"
- "\x37\x89\xd0\x51\x88\x7a\x59\x5e\x47\xfc\xce\xed\x28\x3c\x89\xf9"
- "\x27\x23\xde\x4a\x66\x2b\x3f\x84\xb0\xd6\xc8\xe5\x17\xf5\x70\xba"
- "\xa7\x0e\x3c\x51\x69\x49\xde\x9a\xb4\x0c\x5f\x54\x9a\xc9\x57\x93"
- "\x56\x85\x72\xea\xf2\xd4\xa4\xd9\xbd\x51\x8b\x51\x07\x16\x67\xa0"
- "\x9c\x46\x92\xcc\xaf\x99\xc1\x80\xef\x8b\xaf\x91\xfc\x2d\x8b\x73"
- "\x99\x7e\x71\x15\xfa\xc6\x4c\xe8\xfe\xe2\x5c\x1a\x87\x60\x51\x8b"
- "\xab\x06\xa2\x16\x9b\x10\xae\x4a\xd4\xaf\xc5\x16\xd2\x4b\x1a\xef"
- "\xc7\xb0\x6a\xec\x23\x69\x30\xbe\x19\xaf\x63\x78\x59\x59\x6d\x3a"
- "\xf6\x8d\x21\x8a\xeb\x94\x25\x5d\xcf\xee\xb7\xa0\xaf\x7d\x05\xf1"
- "\xa4\x1b\xd3\xbd\xf3\x18\xf2\x10\xeb\x49\xba\xde\x57\x93\x6e\x60"
- "\xd1\xe9\x19\x6e\xae\xfb\xe9\xe9\x84\x7b\xe0\xb9\x78\x1a\x9f\xd0"
- "\x62\x7c\x2e\x86\xfd\xd9\x4d\xba\xaa\x4f\xef\xf2\xe9\x33\x8c\x88"
- "\xcb\xbe\x68\x17\x73\x78\x2d\x19\xe0\xb3\xa4\x3b\x3c\x23\xd0\x87"
- "\x2f\x3f\x09\x64\x9f\x3c\x7f\x60\xc8\x83\x0f\x90\x1f\x2d\x5c\xfe"
- "\xb6\x72\xac\x03\x9b\x27\x54\x75\xf4\xa1\x2e\x98\x7e\xcd\x6d\x53"
- "\xa7\xf3\x0c\xe7\x29\xd2\xd1\x45\x3a\x45\xf2\x5d\x61\x82\x2a\xcc"
- "\xcb\x8e\xb4\x38\xbc\x35\x88\x37\x0a\xf3\x89\x5e\x52\xe2\xe6\xf5"
- "\x75\x09\xea\xeb\x49\x4c\xf3\x01\x08\x1d\x5f\x62\x1a\xce\x46\x92"
- "\xad\x22\xfb\x94\xee\x71\x93\xce\xfc\x83\xec\x9a\xb0\x53\x90\x23"
- "\xdb\x29\xb2\x51\xd4\x2f\x22\x3b\xe5\x93\xec\x94\x4f\xb2\x53\xfc"
- "\x5d\x8f\xb6\xc6\x92\xca\xed\x51\x7a\xb9\xb0\x33\xe9\x5e\x23\x43"
- "\xdd\x88\xc0\x7a\x0c\x42\x16\x08\x53\x9b\x3a\x86\xc3\x73\x3e\xa5"
- "\x1a\x7d\x68\x6f\xf0\x4a\xf2\x09\x7b\x53\x25\xd9\x1b\xb5\x6c\x6f"
- "\xe8\x4c\x34\xac\x53\xbe\x50\xf6\xc6\x27\xd9\x1b\x2f\x13\xf6\xc6"
- "\x27\xd9\x1b\x0a\xf7\x4a\xf6\xc6\x1b\xc2\xde\xf8\x2c\xa9\x54\x5e"
- "\x8d\x64\x67\xaa\xc8\xce\x50\x79\x7d\x35\xa9\x0e\x9f\xb0\x33\x7a"
- "\xec\x13\xa9\xc9\xce\x78\x31\x8d\x4f\xb6\x33\x2e\x6e\x0f\x8c\x64"
- "\x6b\x06\x9e\x07\xb4\x9f\x06\x20\x1b\xc3\xed\x89\x67\xb2\x87\xec"
- "\x09\xf2\x6f\x9e\xd2\x9e\x20\xbe\x24\x7c\xd6\x4b\x76\xca\x14\xb9"
- "\x9d\x79\xd0\x9e\x64\xa4\x97\x3b\x91\x2f\x7f\x83\x48\x0f\xda\xed"
- "\xf2\xb2\x2a\x5b\xb9\x07\xd0\x0e\x54\xb1\xce\x2a\xd4\x91\x34\xd4"
- "\x5f\x2f\xda\x0a\x00\xac\x97\x5d\x1e\xac\xe3\x98\xb7\xbd\xd3\xf4"
- "\x09\x78\xb1\xae\xa6\xf5\xf5\xdb\x56\x38\xe3\xf5\x69\x17\x99\x03"
- "\xf9\x63\x5f\x61\xaa\x42\xfb\x12\xef\xe8\xe8\x7b\x07\x52\x7b\x98"
- "\x2f\x35\xd7\x6e\x40\x3a\xec\x69\x45\xd6\xc8\x15\xcf\xea\xb1\x9e"
- "\x31\x2b\xda\xc5\x7f\x4f\xbb\xa8\x8f\xcc\xee\x81\x49\xa9\x79\xcc"
- "\xe7\xc5\x7a\x86\xe5\xcd\xc0\x3a\x96\x8b\xb4\x9b\xb0\xce\x55\x61"
- "\x3d\xeb\xf2\x28\xea\x19\xd6\x99\xc5\xf8\x6c\x10\xfc\x5b\x5c\x85"
- "\xf5\x2c\xd7\xc7\xdb\xb3\x1e\xde\x17\xc5\xba\x56\x45\xe3\x76\x58"
- "\xd7\x72\x7d\x35\xa2\xae\xf9\x44\x3a\x8b\x8f\xf8\xa7\x96\xea\x1a"
- "\xca\x02\xe3\x9b\xf1\x3a\x86\x57\xe8\xba\x66\x0a\xa8\x6b\xcf\x4a"
- "\x75\x2d\x4a\xd4\x35\x94\xa9\xc6\xfb\x9c\xa8\x6f\x84\x9f\xfa\xab"
- "\x83\xf5\x2d\x3a\xbd\x8b\xce\x04\x10\xba\x43\x75\x2e\x1d\xdb\x95"
- "\x0c\xe4\x67\xba\xc3\x67\xc9\x40\x7c\xcc\x41\x76\x13\x75\xf3\xef"
- "\xd4\xd6\x21\x95\x7f\xcf\xf1\x4e\x40\xdb\x92\x01\x68\xcb\x3e\x45"
- "\x3b\xfa\xf7\x15\x4e\x68\x46\x5c\x5d\x98\x9f\xdd\x8b\x75\xca\x57"
- "\xc3\xeb\x93\xc9\xfb\x1c\xe1\x5c\x62\x1a\xc4\xc1\xdb\xca\xe0\xfa"
- "\x74\xbd\x71\x53\x97\xf9\x27\x5a\x3b\x7c\x2d\xce\x8c\x32\xff\x44"
- "\x6f\x87\x6b\xc9\xd2\xf3\x44\x3b\xfc\x4f\x2d\xf7\x65\xb0\x1e\x9a"
- "\xb6\xc1\x8d\x17\xe0\x27\x5d\xa8\xf3\x80\xcf\x11\xf8\x7c\x26\x7d"
- "\xda\xbb\xe8\x4b\x7c\xb8\x1b\xf3\x76\x51\x5d\x64\xe6\x59\xe4\xcb"
- "\x25\xa1\x2e\xea\x98\x2b\x3e\x82\x45\xe7\xdc\xc9\x06\x62\x69\x6c"
- "\x2e\x12\xdf\xc7\x22\x0f\xe2\xf0\x1e\x7d\xe8\x2a\xc4\xe0\x45\xe7"
- "\x42\x56\x91\xff\x84\xcf\x46\xb6\x29\x76\xd4\xbe\x8d\x30\x3d\xd2"
- "\x29\xce\x7f\x8d\xdc\xae\xa7\x31\xaa\x18\x7a\x66\xe6\x4f\xe3\x9b"
- "\xae\xca\x67\xc0\x62\x7e\x81\x67\xc0\x9a\x21\xb6\xc9\xcc\x8e\x79"
- "\x5d\xc4\x87\x45\x76\x99\x16\xa2\x0d\xe9\xbc\x05\xe9\xec\x79\x6c"
- "\x73\x12\x7c\x50\x1e\x7a\xbf\x45\x97\x79\xf6\x60\xf9\x87\x89\x8f"
- "\x93\x79\x32\x4c\x7c\xb2\xcc\xa7\xe1\xe6\x76\x52\x3b\xed\xdd\xc8"
- "\xfa\x68\xef\x6e\x1a\x37\xa8\xf4\xb0\xff\xa0\xb3\x60\xb7\x79\x41"
- "\x97\x5e\xee\x66\xb6\x3e\x66\xb5\x95\x5f\x84\x26\xda\x4f\xbc\x82"
- "\xf9\x7c\x51\x39\x68\x97\x72\x74\xfd\x1b\x99\x87\xc6\x7d\x30\x8f"
- "\x23\x76\x58\xd6\x2c\x64\x91\x96\xcb\xfb\x9b\xfa\x1c\x1d\xe2\x8a"
- "\x22\x5c\x1d\x98\xde\x5b\x93\x83\xfa\x3a\xbb\xcb\xae\xd2\x9d\xe0"
- "\x70\xfa\xb4\x5c\xd3\x16\xb8\xf9\x02\xdc\xa7\xe3\xfd\x04\x4b\x8e"
- "\x81\x6c\x02\x86\xe9\x31\x2c\x06\xf1\xc7\xb9\xcc\xf7\xa1\xcf\xdd"
- "\x5f\x27\x7c\xd9\xfb\x62\x64\x38\x3b\xcc\xee\x55\xce\x5b\x93\x56"
- "\x49\x56\x05\xed\xff\xa6\x82\xe0\xdd\xec\x68\xe7\xb8\xa4\xd0\xd1"
- "\x7e\x9b\x9e\x66\xa7\x73\xb8\x2a\xb7\xc2\x44\x94\x0f\xd1\xf7\x22"
- "\xf6\x39\xce\x33\xf3\x7d\x86\x37\xb6\xb8\xb1\x4f\x71\x5f\x9d\x1d"
- "\x3e\x1e\x96\x9f\xbe\xab\xac\x07\x71\x54\x55\x6f\x04\x20\xfe\x10"
- "\x3f\xb1\xde\xf8\x90\x0f\x9f\x91\x4d\x6a\xda\x48\xfd\xee\xfb\xba"
- "\x65\x7e\x0d\x2f\x93\x9c\x89\xa2\x6f\x3a\x67\x36\x33\x33\xb0\x4e"
- "\xa2\xef\x18\x73\xee\x13\x3c\x58\x6c\xea\x47\x3b\x42\x63\xca\x74"
- "\x66\x56\x69\x2c\x73\xbb\xcc\x73\xa6\xdb\xe1\xc1\x76\x69\xbc\xca"
- "\x69\xf3\x2c\x20\xdb\x12\xb2\xdd\xe2\x7b\x95\x0e\xe2\xff\x69\x56"
- "\xe7\x44\xb4\x43\xdc\x36\x1d\xec\xd9\x26\xe4\xef\x26\xbc\xb4\xd6"
- "\xa3\x07\xe3\x4b\x9d\xac\x97\x59\x0e\x76\x53\x3f\x82\xf6\xfd\xc4"
- "\xb0\x27\x51\xaf\x99\xb5\x84\x68\xfa\xe9\x93\xd6\x49\xd7\xe0\x7c"
- "\x39\x68\x9a\x06\xc7\x89\x7e\x9a\x4c\xe3\x42\x62\x3c\x6c\x4e\x9b"
- "\x1d\x16\xe4\xcb\x74\x91\x8f\x81\xbc\xd5\x91\xcf\x41\xbe\x06\x7d"
- "\xa7\x28\xad\x60\x6e\xf2\x39\x10\xd6\x21\x97\x81\xca\x27\xca\xf5"
- "\x53\x6d\x60\xb9\xe8\xdb\x7d\x64\x85\xe0\x41\xe9\x66\xd0\xf1\x33"
- "\x7c\xbc\xf4\x9d\x63\x01\x2f\x0b\x95\x99\x97\x85\xdb\x58\x6c\x23"
- "\x3c\xf7\xa2\x0e\xf1\xf0\x2a\xc4\x85\xfd\x9f\xf9\x5d\x42\x9f\xe6"
- "\xb4\x0d\xb7\x86\x05\x75\xd3\x88\x7d\xd5\x49\x95\x3e\x76\x0e\x71"
- "\xfe\x4d\x8c\xb1\xfd\xf4\x6f\x3e\xf2\xb3\xdd\xa4\xbb\x05\x13\xa9"
- "\x4d\xb6\x55\x90\xbd\xe5\xb0\x37\x20\x6c\x0f\xc2\x74\x48\xb0\x1d"
- "\xfc\xac\x42\x71\x0f\xa7\x3b\xb6\x63\x09\x48\x47\x8f\x83\xb7\xf7"
- "\x07\x9b\xe5\x77\xec\xe3\x63\x3f\xf1\xa7\x0d\xac\xa6\x60\x62\x68"
- "\x5a\x32\x8c\xd4\x9e\x79\xaf\xb2\x3e\xcc\xe7\x26\xd2\xa3\xca\xcd"
- "\x30\x1e\x75\xf2\xb3\x6d\x5b\xe1\x46\xd2\x31\x16\x95\x13\x2f\xf8"
- "\x9e\x68\x64\x66\xf4\x3d\xd1\xa2\x9a\x36\xc2\xcd\x58\x87\x0c\x17"
- "\x20\x71\x41\x4e\x85\x01\x69\x05\xa8\xbe\x04\xe4\xa3\x7c\x8a\xf0"
- "\x71\x36\xcf\xe7\xd0\x74\x89\x74\x31\x31\x5f\xd6\x45\x7c\x36\x5d"
- "\xcf\x56\x20\x5f\x8f\x89\x31\x8a\xc4\xbf\xd1\x37\x89\x73\x90\xd8"
- "\x4e\xe5\x15\x73\xa0\x13\x7f\xcf\xae\xb2\x89\x4c\xb4\x69\xcd\x76"
- "\x48\x74\xe2\xfd\x18\xbf\xd0\x96\x48\xef\xcd\x08\x77\x84\x5d\xf5"
- "\x12\xcc\x31\x0c\xb3\x32\xb3\x8a\xea\x49\x03\xe6\xdd\x67\x87\x15"
- "\x27\x84\x6c\x12\x4f\x10\xae\x61\x68\x68\x66\x7c\xdf\xdb\xaf\xb0"
- "\xbc\x73\x1f\x33\x6c\xa3\x31\xce\xb9\xd3\x78\xbd\x40\x5c\x4d\x6a"
- "\x61\xb3\x7d\x48\x6b\xa3\xd9\x57\x88\xf6\xb9\xd0\x57\xbb\xba\x97"
- "\x3f\x4b\x71\x4c\x6a\x47\x43\xe3\x3f\xd8\x43\x7b\x79\xf7\xc0\xdc"
- "\x63\x02\xcf\xc1\x6e\xeb\x84\x0b\xf4\xce\xf7\xc6\x77\xea\x0b\x7b"
- "\x6d\xf5\x49\xe2\x8c\x46\x84\x11\xfd\xf8\xb9\xbf\xe9\xc7\x3c\x5c"
- "\xe6\xb9\x58\xa6\x87\x9a\xc5\xf7\x99\xc2\x90\xfb\x75\xf3\xf5\x51"
- "\x58\x07\xa8\xce\x89\x3a\x3d\x6f\x57\x47\x33\xaf\x7f\x16\xd4\xf9"
- "\x63\x92\xfd\xa5\xf1\x9c\x88\x73\x30\x6f\x67\x47\x2c\xd7\x6f\x35"
- "\x53\xdf\xaf\x0f\x3a\xdb\x0d\xe3\x86\x5e\xf7\x27\xe3\x95\x89\x57"
- "\xae\xf4\x5e\x8c\x17\x96\xf9\xfe\x2e\x7c\x2f\xe3\xbc\x3b\x98\xaf"
- "\xb2\x63\x5c\x3f\xfa\xec\xf4\x6e\x87\xfb\x53\xd9\xc1\x38\xb5\xfc"
- "\xdc\x74\x80\xc6\x09\xee\x2f\xb7\xc3\x5c\x10\xb2\x98\xc7\xe7\xee"
- "\x20\x6d\xc4\x77\x56\x59\xcf\xdc\x6d\xdb\x9c\x48\xf7\xfd\x47\xda"
- "\xea\x9d\x60\xb8\x9d\xca\x7f\xff\x51\x2a\x13\xcd\x61\xa1\x7b\x69"
- "\x3d\x73\xb4\x36\x78\x80\xbe\xe5\x21\x2e\xac\xff\x4d\x71\x62\xcc"
- "\xa1\x41\x4f\xf8\x24\x9d\x60\x72\xf9\x05\x9f\x0b\x7b\x0d\x1b\x55"
- "\xf4\x1e\xd5\xb8\x9f\x8f\xc3\xec\x61\x95\x59\xd2\xdc\x85\x79\x23"
- "\xb1\x9e\xcf\xa3\x73\x1e\x2f\xc1\xbc\x34\x86\xbc\x6e\x2d\xe4\x67"
- "\x48\x39\xb0\xfd\xe9\x6b\xe4\xf3\x8d\xe6\xa1\xfd\x9b\x9b\xcb\xbf"
- "\xcd\x60\x38\xb7\x35\x88\x73\x1f\xc6\x61\x7b\xd4\xd7\x51\xe8\x06"
- "\x2f\x95\x19\xd3\xbe\x73\xd5\xad\xa5\x73\x2e\xb7\xd1\xf9\xf3\x48"
- "\x07\x43\x59\x09\x5b\x76\xbf\x7d\xeb\x45\xe6\x96\xcb\xdc\xda\x4c"
- "\xf5\x63\xde\x4e\x3b\xbc\x79\x66\xd8\x3a\x31\x58\x8e\xa4\xc3\xad"
- "\x71\x42\x8e\x3e\xe4\x55\xb0\x1c\x93\x9a\x85\x0c\xe7\x9d\x09\x96"
- "\x61\x12\xe6\x90\x84\x9a\x90\x34\x0b\xaf\x64\xe9\x3d\xf0\xd2\x05"
- "\x3c\xa3\x5c\x93\xf6\xb8\xcc\x49\x31\x58\x3f\x2a\x84\x6c\x28\x1c"
- "\xf5\x99\xf4\xe6\x4b\x6c\x7b\x06\xe8\x6c\xd0\x8b\x40\xe1\xa4\xe3"
- "\x14\xee\x43\xff\x06\xdf\xe3\x31\x5e\x4f\xf5\x97\xce\xe3\x0a\x8c"
- "\x1f\x3c\x77\x01\x92\x36\x13\xae\xc8\xed\xbb\x77\x93\xee\x22\xcc"
- "\xf4\x48\xcf\xee\xdd\x98\xdf\x4e\x99\xaf\x18\x56\x4c\xf1\xa4\xa7"
- "\x18\xde\x60\x87\xb7\xf8\xf9\x47\x4e\xec\x03\x86\xf6\x3d\x92\xac"
- "\x83\x3e\x9a\x3e\x5d\x4f\xb2\xec\x83\x07\x4e\xa3\x1d\x43\xfb\xbd"
- "\xda\x2e\xda\x9f\x07\x3a\xe8\x1d\xed\xe7\x67\xf8\xdc\xde\x81\x76"
- "\xea\x5a\x6d\xb6\x6e\x40\x0d\xe1\xd7\xd4\x90\xe4\xa9\xfd\xf0\xa8"
- "\x27\x3a\x33\xc6\xd6\x7b\x1c\x3a\x3d\xff\x0a\x86\x67\x38\x8e\xf7"
- "\xe8\x5c\xb8\xca\xcd\xcc\xfb\xf6\xb5\x23\x5a\x9b\xe7\xb2\x95\x9f"
- "\xc3\x0a\x0f\x70\x7e\xbc\x74\x0e\xbd\x80\x15\x1c\xb7\xc4\x9f\x0f"
- "\x77\xef\x5b\xc5\x3c\xfb\xce\xd3\x5e\xf1\xb1\xa3\xf6\x5e\x83\xe9"
- "\xaf\x6d\x01\x63\xc3\x35\x88\x6b\xbc\x06\xf1\xec\x1f\xf1\xea\x06"
- "\xf4\xe3\x56\x5c\xd1\x03\xda\x89\xac\xb1\x26\xd0\x35\x6e\x41\x7f"
- "\xce\x03\x2a\x6f\x0d\xfa\x73\x1e\xf4\xe7\x2e\xc7\x93\xbd\x1c\xf4"
- "\xe7\x06\xb8\xaf\x9c\x53\xc7\xcf\x0f\xad\xc9\xa9\x1b\x53\x08\xaa"
- "\x88\x5c\xd0\x23\x7d\x95\x97\xe0\x01\x55\x44\x0f\xfa\x92\x58\x66"
- "\xbb\x54\x5e\xbc\xc7\x44\x16\x42\x38\x2f\x2b\xda\x70\x56\xb3\xda"
- "\x3e\x6c\xdb\xac\x26\x9d\x72\x52\x5d\xc2\x32\x3c\x38\x9e\xbe\x39"
- "\x1f\x9f\xe0\xd6\x96\x36\x30\x37\x85\x97\x4d\x66\x6e\x0c\xe7\x7b"
- "\xfc\x1f\xc3\x70\x97\xf9\xc1\x78\xbb\xf6\xe1\x61\x75\x14\xfb\x4c"
- "\x92\xad\x79\xf0\x4d\xa6\xae\x42\x1d\x4d\xcf\xd8\xea\x41\x7f\xfc"
- "\x12\xd5\xe3\x07\x8f\xa4\x17\x33\x8f\x61\x1d\x7d\xff\x7f\xb0\x9e"
- "\xe6\x26\xd0\x37\xc9\x7f\x41\x5f\xe7\x9b\xe6\x23\x50\x1b\x42\xfd"
- "\x87\xc8\x62\xc4\x59\x9b\x9e\xc1\xb0\xcf\xfe\x6d\xfd\x7a\x9a\x7f"
- "\x26\xd6\x9a\x3e\xd8\x63\x87\x75\xfc\x9b\x2a\x5f\x9f\xc3\xed\xe9"
- "\xfc\x36\x27\xf2\x20\xd8\x06\xcc\xaf\xa7\x7d\xcb\xfb\x2d\xd9\x75"
- "\xd6\x49\x64\xfb\xe7\xd7\x08\x5f\x28\xdb\x22\xda\x82\xf9\xcf\x8a"
- "\xef\x07\xf3\x67\xd9\x61\x09\x6f\xe3\x4d\x53\x48\x27\xe6\x17\xb3"
- "\xe8\xec\x97\x09\x6e\x46\x15\x54\xad\xf7\x40\x2e\xab\xc9\xb6\x30"
- "\x5e\x57\x2e\x01\x7b\x75\x8d\x8b\xd6\xdc\x38\x6f\x5a\xe6\x42\xdf"
- "\xa0\x0d\xe3\xea\x28\x0f\x07\xc2\x20\xdf\x47\x8a\xb9\x0b\xf3\x77"
- "\xdb\xe1\x51\xc9\x1e\xce\xcf\x16\x63\xcc\xf3\xb3\xfb\x31\x2d\xfa"
- "\x8a\x37\x60\x3c\xfa\xbf\x6b\x22\xa4\x6f\xdc\x8e\x1d\x7c\xad\xe8"
- "\xfc\x93\x76\x28\xce\xa0\xb0\xb2\xc9\x10\x5b\x66\x60\xc3\xb5\x07"
- "\xda\xe0\x72\x2e\x78\x80\xcf\xc3\x53\xc3\x4d\x2e\x73\x32\xc8\x78"
- "\xb1\xbd\x7d\xab\x5f\xfd\xd8\x63\x18\x16\x23\xe3\x45\x98\x1b\xf1"
- "\x3d\x6e\x10\x46\xa4\x99\x15\x90\xe6\xb1\x7e\xf5\x9d\x6f\x61\x58"
- "\x8a\x22\x4d\x96\x22\x4d\x61\x40\x9a\x2a\x29\x9f\x0a\x45\x9a\x3d"
- "\x8a\x34\x0d\x21\x68\x3b\xa6\x48\x63\x55\xa4\xe9\x0a\x41\x5b\x8f"
- "\x22\x8d\x33\x38\xcd\x02\x6d\x00\x6f\x69\x3e\x91\x11\xc3\x62\x83"
- "\xd3\x2c\x88\x57\xa4\x99\x2d\xbf\xa3\xef\x99\x25\x7c\x03\xd4\x27"
- "\x94\x29\xca\xb5\x0e\xe3\xb1\xfc\x8f\x15\x5f\xc7\xff\xc6\xbe\x61"
- "\xf6\x9e\xca\x43\xe2\x1c\x5d\xb2\xab\x34\xff\x80\xec\x39\x7d\x33"
- "\x21\x9d\x20\xbf\x93\xf2\x3a\x0f\x0f\xed\x22\x1d\x42\x9c\x47\x87"
- "\xf2\x63\x81\x55\x41\x67\x97\x82\x4e\xfb\x50\x7e\x2c\x70\x06\xa7"
- "\x79\x48\x1b\x9c\xe6\xa1\x98\x80\x34\xcd\x22\x9f\x87\xe2\x15\x69"
- "\x66\x2b\xd2\xa4\x0c\xd5\xcf\x87\xb2\x15\x69\x8a\x15\x69\x2a\xfc"
- "\x3c\x7c\x88\xaf\x0d\xa7\xfa\x80\xe1\xd8\xff\x59\x7a\xf2\x3a\xbc"
- "\xd3\xcb\xfa\x2c\xaf\x9d\x16\x7a\xfd\xf0\xf8\x3a\xb1\x6e\x8e\x9f"
- "\x59\xd0\x03\x0f\x27\xc8\xdf\x96\xdf\xb8\xe6\x0e\xa3\x6f\x9e\xc8"
- "\xdb\xde\xd6\x72\x37\xb6\xb9\x0f\x61\x1b\x9c\x66\x94\xe7\x96\xd0"
- "\x7c\x1c\x7e\xe6\x0d\xef\x8f\x3c\xd4\x2d\xea\xdf\xc3\xf2\x37\x1d"
- "\x2a\x0f\xf6\x33\x1e\x9e\xfe\xbf\x49\x57\x07\xd1\x45\x67\x3f\x20"
- "\x0e\xd3\x60\x5f\x63\x90\x56\xca\xf3\xe1\xbf\xc8\xb4\x36\x89\x39"
- "\x41\x34\x57\xd8\x41\xe7\x71\x60\x9a\x96\x80\xfe\x09\xd1\xea\x3c"
- "\xbe\xc5\xad\x0d\xa6\xf9\xe1\x9d\x12\xcd\xdd\xc2\x46\x3d\xdc\x2d"
- "\xdb\x93\x61\xf5\xcf\x72\xb0\xbd\xb3\x01\x80\xe6\x3c\x74\x34\xa0"
- "\xbf\x89\x7d\x2c\xa2\xfb\x1c\xa4\x18\xb8\xff\xbb\xee\x1a\xd0\xb3"
- "\xad\x62\x0e\x9f\x13\x21\xca\x92\x92\x45\xe7\x2e\x93\xef\xd3\x66"
- "\xfa\x8a\xe6\xe5\x31\x7e\x06\x13\xa4\xec\x6a\xad\x70\x20\xad\x29"
- "\x19\xf2\xfc\x21\x3b\xa4\x08\xbf\xce\x72\xd0\x4a\xf3\x35\x68\x6e"
- "\x53\xab\x73\x36\xc1\x94\x21\x9d\xf2\xdc\xe9\x3e\x3a\xc3\x19\x61"
- "\xa7\x0f\xd7\x57\x0a\xe4\xab\xa0\xe1\x91\x2f\x85\xfe\xa4\x9c\x0c"
- "\xae\x0f\x61\xa8\xa7\x29\x5d\xc1\x3a\x97\x62\x0f\xd6\xb9\x14\x47"
- "\x70\x7d\x50\x63\x7d\x58\xa8\x0d\x4e\xb3\x30\x26\x38\xcd\xc2\xb8"
- "\x80\x34\x16\x91\xcf\xc2\xd9\x8a\x34\x29\x8a\x34\x81\xf6\x0f\xcb"
- "\xbc\xb0\x70\xb0\xdf\xc9\xed\xfd\xc2\xf2\x80\x77\x75\x1d\x6f\xa7"
- "\x16\xee\x91\xc3\xa4\x75\xc9\x7c\xae\x94\x84\xef\x88\xc2\x46\x11"
- "\xfc\x49\x05\x0d\xa7\x15\x34\x9c\x95\xdf\xa5\xf9\x15\xef\x23\xef"
- "\x26\x4b\x7a\xe6\x8c\xdc\x0e\x8f\x46\x7a\x96\x3c\x49\xbe\x19\xb5"
- "\x4f\x7c\x0e\xdb\x56\xf4\x29\xaf\x80\x9e\xe6\x0e\x9e\x2f\x03\x0d"
- "\x9d\x0b\x63\x87\x45\x99\xd8\x9f\xa3\xb3\xf6\xfa\xd0\x9f\x4a\x3f"
- "\x0f\x0b\xfb\x30\xff\x7a\xcc\x03\x79\xf7\x48\x52\x30\x0d\x8f\x64"
- "\x04\xd3\xf0\x48\x6e\xc0\xbb\x1e\xdf\x4d\x01\xe5\xd6\xd3\x3e\x11"
- "\x2f\x73\xdf\xfa\x91\xdd\x72\x38\x8d\x01\x60\x19\x7b\x2b\xb9\x1f"
- "\x90\x44\xf3\x06\xa3\xcf\xc1\x23\x1b\x68\xbc\x40\xc2\x79\x3c\x90"
- "\xb7\x82\x17\x8f\xb4\x2b\xe8\xe8\x56\xd0\xd1\xeb\xb7\x35\x0b\xfb"
- "\x44\x1d\x79\x04\x9f\x1f\x8f\xa7\x30\xe4\x85\x21\xd2\x63\xb8\xc1"
- "\x3a\x85\xfc\xd4\x45\x0b\x9d\x58\x5e\xf6\xbc\x3a\x5a\x7a\x4f\x63"
- "\x53\xc8\xef\xce\xb1\xa0\x7d\xa6\xb5\xb3\xb7\x62\x58\xa6\x90\xeb"
- "\x22\x2c\xff\xd2\x24\x81\x77\x11\xff\xb6\x4f\xb0\xf8\x6c\x60\x51"
- "\x07\xbb\x87\xd3\xe7\xfe\xe8\x83\x5d\xf2\x1c\x5b\xc4\xb1\x53\xae"
- "\x0f\xbe\xda\x83\x5d\xbe\x9a\x55\xe8\x13\x2f\xaa\xc7\x3a\x61\x11"
- "\x7d\x9a\x82\x33\xa8\xfb\xf5\x28\x3f\xec\x03\xa7\x4a\x7d\x99\x83"
- "\x3d\x34\x77\x90\xf6\xaf\x40\x9b\x19\x21\xe6\x66\x2c\x3a\x1d\x50"
- "\xaf\x9c\x86\x2d\xf3\xd8\x39\x48\xad\x21\xdf\x8e\xec\x06\xcd\x41"
- "\x6c\xf5\x38\x80\xc6\x59\x6c\x9e\x0b\xdc\x27\xc7\x78\x8b\x48\x9b"
- "\xaa\x0b\x48\xeb\x90\xc6\x41\x7a\x29\x6e\xa6\x07\xb4\xad\x4e\x07"
- "\x9d\xb1\x1b\x23\xfc\xf8\xd4\x9a\x56\xb4\x17\x98\x26\x51\x4e\x43"
- "\x63\x26\xfc\xbb\x7f\x19\x68\x67\x54\x80\xd6\xba\xe5\x1c\xc7\x2d"
- "\x7d\x73\xe6\xfd\x23\x5b\x45\x2f\xd8\x9c\xdd\xe4\x53\x6a\xc5\xbc"
- "\xad\x54\x8b\xc6\x0d\xba\xfe\x9a\x83\xd8\x86\xa5\x5a\xbc\x35\x07"
- "\xdb\x91\x36\xac\xaf\x8b\x8e\x93\x0d\x0c\xe4\xdd\x82\x05\x19\x4b"
- "\xd2\xd3\x12\x9e\x58\xb2\x30\x73\xc1\x1c\x43\x66\xd1\xda\x82\xfc"
- "\x84\xf5\x1b\xca\x0c\x9b\x4a\x8a\xca\x8a\xd6\xad\xe6\xc7\x82\x19"
- "\xf2\xca\xc4\x3d\xbe\x38\xaf\xb4\x6c\x2e\x3d\x4e\x37\x98\x4a\x0a"
- "\x36\xf2\xc7\x69\xa3\x20\x18\x49\x51\x59\x41\x89\x61\x6a\xfe\x74"
- "\xc3\x43\x79\x45\xc5\xb4\x8a\x21\x14\xae\x39\x86\x92\x82\x92\x82"
- "\xbc\x7c\xc3\x5c\x83\x91\x30\x07\xa2\x0b\x90\xa7\x51\xb6\x4f\xa5"
- "\xd8\x9e\xa3\x0f\xdd\x4b\x76\x8a\xda\xf5\xf3\x90\xbe\x81\x7c\x38"
- "\x7e\x8e\x17\xea\x21\xb6\x09\x76\x97\x39\xad\x6c\x68\x3b\x9e\xb6"
- "\x3b\x58\x7f\xd3\xea\x83\xf5\x37\xed\xc8\xd0\x76\x3c\x4d\x51\xff"
- "\xd3\x14\xf5\x3f\xed\xec\xd0\x76\x3c\xcd\x11\x9c\x66\x31\x04\xa7"
- "\x59\xac\x1f\xb4\x33\x48\xeb\x0e\x6e\x97\x16\xc7\x29\xd2\xcc\x52"
- "\xa4\x49\x56\xbc\x67\x06\xbc\xa3\xef\xba\x38\x3f\xd0\x37\xc0\xf7"
- "\x32\xb9\xae\xfb\xed\xdb\xe2\xdd\x32\x0c\xb5\x3d\xb4\xd6\x45\x82"
- "\x6d\x0e\x80\xed\x95\x60\x07\xeb\x3f\xd9\x24\x9a\xbb\x29\xfc\xf3"
- "\xf4\xa9\x92\x6d\xeb\xa9\xf6\xb7\xa1\x3d\x28\x8b\x5b\x2f\xc1\x62"
- "\x3a\x6b\x91\x60\x1d\x34\x9f\x97\xbd\xba\xcc\xd5\x14\x0d\x3a\x4a"
- "\x4b\xe7\x58\x31\x73\x6a\x03\xcd\x1f\xc7\xb0\x08\xbc\xd0\x4e\xa5"
- "\xc7\xca\x73\xe7\x77\x22\x8c\x1d\xd2\xb9\x2e\x53\xba\x9d\x7c\xde"
- "\x21\xcf\xaf\x86\xd6\x58\xd1\xd9\x70\xd5\x62\x0f\x89\x1e\x3a\x5f"
- "\x8d\xf2\x46\x1c\x5a\xa6\x4e\xfd\x4c\x3a\x27\x4b\x8f\x57\x0c\xe2"
- "\x2c\x96\x71\x22\xbe\x58\x10\xe7\xf1\xd1\x3c\x32\xc9\xef\x49\xdf"
- "\x23\xfb\x17\xd4\x57\x08\x65\x3b\x42\xcf\xcd\x86\xc8\x6a\xb3\xaf"
- "\xdb\xba\xad\x87\x68\x3a\x49\x7e\xa8\x2d\xd6\x03\x9d\x0d\x1e\xec"
- "\xbf\x82\x9e\xf7\xa7\xca\x2f\x82\xad\xd9\x03\x34\x3e\x9c\x53\x0e"
- "\x55\x4d\x6a\x5f\x37\x1b\x4c\x47\x7d\xb4\x74\x7e\x3e\xe5\x4e\x0a"
- "\xc7\xf4\xd8\x97\x70\xd0\x1c\xee\x61\xc6\x23\x22\x09\xce\x3a\x85"
- "\xfa\x7b\x19\xd3\x25\xdf\x77\x77\x13\xe2\x0a\x39\xbf\x58\x0d\x36"
- "\x97\x39\x03\xdb\xbf\x4d\x5d\xb2\xcd\x6e\xad\xe7\xb6\x4f\x8d\xe1"
- "\x55\xc8\x8b\x63\xc3\xf9\x29\x92\x7d\x37\xd1\xbc\x32\x84\x3d\x7a"
- "\x3d\x58\xa2\xbb\x15\xcb\x8d\x75\xb1\xfe\x8d\x6d\xc6\x30\xc9\xbe"
- "\xea\x30\x5d\x8f\x9c\xee\xdb\x94\x8f\x7c\x23\x6a\x8f\xb1\xae\x3a"
- "\x45\x5f\x71\xc9\x93\x2f\xf3\x39\xcb\x8f\xa2\xff\x97\x21\xd7\x83"
- "\xd1\xf8\x8e\xf6\x2f\x83\x8f\x27\xf2\x79\x3d\xd8\x9f\x2c\x35\xa1"
- "\xcf\x16\xeb\x44\xdb\xf8\x68\x96\x1c\xc7\xc7\x89\x28\xae\x82\xb9"
- "\x5b\x63\x7b\x28\xae\x6c\x30\x4e\xac\x21\x60\xad\xe5\x1e\x0a\xdf"
- "\x23\x87\x8b\xb6\xe5\xd1\x06\xc5\xfb\x51\xf9\x1d\x9f\x4f\xe0\xb3"
- "\x41\xc2\xef\x40\x9b\xab\x12\x7b\x2e\x2c\x19\xdf\xc8\xeb\xcd\xa3"
- "\xdd\x72\x3c\x1f\x53\x3b\x4c\xdf\xc6\x9c\xe0\x8b\xce\xae\xe7\x3e"
- "\x17\xa6\x79\xfb\x2b\x77\x18\xf6\x31\x54\x8c\xce\x54\xc5\x30\xc2"
- "\x43\x75\x86\x9f\x6d\x8f\xef\xe7\xe0\xd1\xd3\xb4\xce\x81\x74\x64"
- "\x93\x07\x26\x9a\xee\xa7\xf1\xe7\x25\x5c\x6f\x29\x8c\xf0\x12\x3e"
- "\x6a\x13\x09\x37\xe1\xdb\x47\x3e\x2d\x9f\x2f\xb9\x84\xca\xbf\x67"
- "\x38\x59\x61\x7c\x79\x00\x2f\xc3\xf0\x7d\x77\x70\x59\x97\xd4\x2b"
- "\xde\x8f\xc8\xef\x34\xd6\x2b\x74\x6f\x49\x83\x14\xd7\x76\xbd\xbc"
- "\xa6\xf0\x35\x32\x4b\x7a\x15\xf9\xb9\x83\xf1\x2f\xd5\x29\xde\x63"
- "\xe5\xf7\x3a\xfe\x8d\x61\x69\xbc\x9c\x47\xb5\x98\xc3\x55\xdf\xb2"
- "\xcd\x11\x76\xbd\xbd\x4c\x30\x4d\x76\x40\x9e\x23\xf0\xbd\xd8\x2f"
- "\xbf\xa5\xe5\x32\x3e\x7c\xde\x19\x00\x87\x7e\xc9\xd2\x3a\x19\x4e"
- "\x7c\xdf\x58\xda\x12\x90\xee\xd8\x37\x94\x55\xa1\xbb\x99\x5e\xa1"
- "\xbb\x4b\x7b\x15\xb4\xb8\xfd\x38\x33\xb5\x7e\x5a\x32\xf5\x01\x70"
- "\x58\x3f\x33\x0d\x4a\x5d\x2d\x2d\x27\x1d\x27\x7d\xcd\x4c\x0c\x11"
- "\xe7\x96\xe2\xb2\x42\xeb\x78\xa6\x29\x20\x5c\xea\x1f\x65\x7e\x22"
- "\xf9\x09\x64\x9f\x9d\xfd\x95\x99\xf2\xf9\xaa\x5c\x27\x69\x1f\xb1"
- "\x99\xe2\x2c\x6f\xd4\xeb\xcc\x63\x4a\xbc\x62\xfd\x8d\x84\xc3\x8f"
- "\xb3\x4a\xf8\x78\x99\xf6\x80\xb2\xf5\xd9\x61\x89\xfc\x9d\xc8\x21"
- "\xc6\x06\x97\x9e\x1d\xae\xdf\xe1\x32\x3f\x36\x31\x98\x67\x8f\x4d"
- "\xf7\xf3\xec\xb1\xd9\x7e\xbc\x8f\x25\x07\xc0\x7d\x88\xef\x99\x01"
- "\x70\xb9\xdf\xa4\x9b\x42\x57\x1e\xdb\xad\xc8\xab\x3e\x00\x47\x4b"
- "\x40\x5e\xc7\x02\xe0\xba\xf1\xdd\x3a\xbc\x7c\x1e\x3b\x3b\xbc\x7c"
- "\x1e\x73\x87\x96\xcf\xe3\x7a\x7f\xbe\x8f\x4f\xfc\xe6\x7a\xf5\x78"
- "\x52\x00\x3d\x4d\xf8\x9e\x11\x5c\x8f\x1e\xcf\x55\xbc\x0f\xca\x9f"
- "\xa1\xed\x68\xd9\x92\x44\xe7\x71\x43\xd9\x64\xd0\x8b\x7a\xf6\xb8"
- "\x25\x30\xfe\xed\x6b\x22\x9e\x68\xe4\xdf\xe0\xe8\xfb\xa6\x80\x3b"
- "\xa1\x84\x23\x98\x80\xf8\x6e\x99\x76\x6c\xaf\x43\x9e\x05\x2a\xb7"
- "\x7f\x36\x1f\xb5\x7f\x8f\x3b\xc5\x77\x9b\xe5\xa7\x99\xf9\xdd\xac"
- "\xe1\xda\x32\x97\xf9\x09\x23\xf6\x19\x7a\x05\x7f\x9e\x40\xfd\x5f"
- "\xc7\x7d\x13\x66\x59\x7e\x1a\xf5\xe9\xda\x79\x78\xe2\x13\xbc\x0f"
- "\xe0\xfd\xf7\xc1\xed\xeb\x13\x99\xcc\xac\x5a\xda\x64\x56\xb6\xbb"
- "\x4f\x14\x63\xdf\xe3\x5a\xa4\xa7\x2a\x2b\x44\xdc\x6e\x66\xd6\x2c"
- "\x09\x11\xde\x8c\xf2\xba\x66\x87\x27\xce\x10\xbd\x01\xe1\x27\x98"
- "\x79\x6c\x26\xc1\xdb\x29\x3f\x4c\x33\x9c\xdc\xe4\x75\x50\x42\xf7"
- "\xb2\xb4\x8a\x72\x7c\x7d\x1e\xb2\xb6\x8b\x72\x64\xfd\x2d\x38\xef"
- "\xac\x89\xa1\xcb\x91\x35\x0b\xcb\xf1\x75\xe8\x72\x64\x65\x70\xde"
- "\xaa\xb1\x2c\x43\xfc\x8e\xac\x62\x2c\xcb\xd7\x9c\xef\xc1\xe1\x3b"
- "\xe5\x7e\x6a\xe5\xd7\xd8\xff\x57\x03\x4f\xbb\xb4\xc2\x2f\x37\x09"
- "\xee\x68\x64\x3d\x64\x84\xc8\xb3\x8d\x99\xc3\x97\xda\x21\xcb\x23"
- "\xb7\x57\x52\xf8\x59\x41\x0b\xf2\x49\x4d\x7c\xc2\xf2\x60\xba\xe1"
- "\xe4\x2d\xd7\x4f\xf1\x9d\xe9\x49\xac\xff\x4f\xd8\xe5\x36\x1d\xdb"
- "\x73\x87\xcc\x47\x8c\x4b\x51\xc4\xb9\x03\xe2\xf2\x83\xe2\xb6\x0e"
- "\x86\x57\xc8\xe1\xdf\x4e\x4e\x4f\x1e\x55\xc8\x09\xe5\xf3\xd4\xdc"
- "\xe0\x72\x3f\x79\x52\x94\x0f\x65\x34\x84\xd7\x4f\x76\xa3\x8c\x06"
- "\x42\xcb\xe8\x49\x67\x68\x5d\x7b\x2a\x82\xe3\x8b\x86\x10\xf8\x9e"
- "\x8a\x47\xd9\x0d\x70\x1d\x94\xe4\x34\x54\x3e\x4f\xa5\xca\xf2\xf9"
- "\x76\x65\x7c\xca\xa2\x28\xa3\xf7\x3c\x2c\x1b\x23\xca\xba\x6c\xb9"
- "\x02\xf7\x91\xd0\xba\xf8\x94\x15\xcb\xe9\x0d\x5d\xce\xa7\xce\x0e"
- "\xaf\x8b\x4f\xd1\xb7\x3a\xef\x50\x5d\x5c\xa6\x17\x69\x20\x44\x9a"
- "\x65\xd3\x99\x39\x54\x3e\xcb\x92\xc9\x2f\xb2\xc3\xb2\x0a\xfa\x4e"
- "\x17\x10\x9e\x1d\xac\x7f\x58\x06\x4a\x47\xfc\xf3\x88\x7e\x0c\xc9"
- "\xe1\xbc\x01\xd4\xdf\xa4\x93\x2e\xf3\xb2\x93\x0a\x5e\x5d\x3e\x0f"
- "\xd9\x73\xfb\xd5\xea\x87\x04\xbf\x96\xab\x14\x34\x75\x87\xe6\xd7"
- "\x32\x07\xf2\xeb\x72\x68\x7e\x65\x47\x0c\xcf\xaf\x6c\x92\xff\xe5"
- "\xa1\xfc\xca\x4e\x0a\xe4\x97\xcf\x2c\xca\x77\x5b\x2c\xea\xc6\x40"
- "\x0e\x6b\x12\xb6\x5c\x1f\x89\xba\x22\xd2\xf4\x51\x9a\xb2\x48\xb7"
- "\xd0\x13\xc3\x04\xd0\x5d\x82\xec\x6c\xb9\xfe\x8f\xad\x87\x70\x36"
- "\xb0\x8c\xe6\x68\xd3\x19\xcf\x7a\x5b\xf9\x65\xab\xcd\x63\x04\x1a"
- "\x6f\x54\xe4\x7b\x22\xb4\x2d\xc8\xee\x42\x9e\xd6\x86\x08\xef\x15"
- "\x63\xa6\xcb\x0d\xc1\x36\x62\x39\x04\xcb\x68\x19\x4f\x07\x83\xfb"
- "\x9f\x5e\xff\xba\xbe\xcc\x96\x9b\x86\xca\x6c\x45\x94\x24\xaf\x2f"
- "\x83\xe9\x5b\xbe\x3b\xb4\xbc\x96\x37\x0f\x2f\xaf\xe5\x27\x87\x97"
- "\xd7\x72\xea\xfb\x5c\xb6\xc3\x0a\x7d\x70\xbb\xb1\xdc\x11\x5c\x5e"
- "\xcc\x17\xd3\x31\xf5\x88\x1b\xe8\xfd\xdb\x96\x5b\xbe\xc8\xc6\x91"
- "\xac\x68\xfd\x3f\xd2\x3f\x99\x68\xfc\xae\x38\x86\xc5\x8d\x3c\xb4"
- "\x6c\x19\xf6\xdc\xf0\x88\x4e\xec\x57\xd2\xfc\x3c\xc3\x24\x1a\x2b"
- "\x5b\xf1\xb9\x4f\xad\x9a\x83\xcf\xea\xf3\x90\xfb\x1b\x9f\x5a\x53"
- "\x45\x73\xc9\xf8\xda\x41\xfe\x7d\x62\x85\x27\x50\x16\x34\xa7\x6c"
- "\x9f\xd8\xcb\x91\xc6\x39\x3f\x3d\x0f\x39\xbb\x84\x5c\x72\x6b\x82"
- "\xf9\x98\x63\x08\x2d\x97\x9c\xd9\x28\x97\x4f\x43\xcb\x25\x27\x73"
- "\x78\xb9\xe4\x98\x50\x2e\x9f\x0e\xad\x47\x39\xbb\xa5\x7a\xb4\x83"
- "\xd2\x18\xd6\x91\xbf\x9a\xf3\x35\xc1\xe0\x33\xd6\x91\x9c\xcf\x28"
- "\x3e\xa1\x4f\xae\x47\x3c\x0d\xf5\xff\x79\xfe\x12\xcc\x09\x09\x47"
- "\x20\x5e\x7b\x64\x5f\xa8\x7a\x92\x43\xdf\x53\x55\x33\x4c\xa0\x43"
- "\x1e\x66\x1d\x22\x1c\x25\x00\x97\x20\x37\x8d\xe0\x28\x9c\xce\x5c"
- "\xf6\xc3\xe7\xc6\xcb\x70\x7c\x5c\x54\xc0\x1a\x98\xab\x10\x08\x2e"
- "\x18\x77\xae\x54\xfe\x70\xde\x8e\x10\x3c\xc1\x29\x60\xca\x45\x7d"
- "\xcc\x3d\x19\x5c\x1f\x73\x2d\xc1\xfa\x99\x43\xdf\x27\x22\x7d\x68"
- "\xe7\x50\x97\x7b\xbc\x66\xd5\x9c\xef\xa7\x6e\xe6\x45\x28\xea\x26"
- "\xea\x40\xde\xaf\x85\x0e\xe4\xed\x0d\xa6\x35\x2f\x2e\xb4\x0e\xe4"
- "\x25\x0e\xaf\x03\x79\x59\xc3\xeb\x40\x5e\x19\xe9\x80\x1d\xf2\x8e"
- "\x06\xd7\xcd\xbc\x3d\xc1\x65\xc7\x7c\x79\xdd\x84\xa8\xef\x52\x37"
- "\xd1\x17\xba\x61\xb8\x7a\x28\xf9\xff\xaa\xa6\x6b\x00\xdf\x81\x67"
- "\x3a\xac\x57\x48\xdf\xd3\x49\xf4\x0d\x09\x6d\x7c\x21\xf1\xb0\x91"
- "\xf7\xd1\x9e\xce\x0c\xe4\xe3\x3e\xd1\xd7\xaa\x44\xd8\xbf\xd0\x9c"
- "\x3d\xc1\xcf\x95\x87\x83\xcb\xff\x74\x59\x68\x7e\x3e\xbd\x07\xf9"
- "\x59\x19\x9a\x9f\x4f\x1f\x19\x9e\x9f\x4f\xb7\xd1\x5a\xf5\xa1\x75"
- "\xea\xe9\xb3\x86\x8d\xdc\x47\xe1\x69\x2e\xc1\xca\x7b\xbf\x5d\xfb"
- "\xb4\x32\x26\xb8\x7d\x7a\xda\xf3\xdd\xdb\xa7\x95\x59\xa1\xdb\xa7"
- "\x95\xa6\xd0\xed\xd3\xca\xdd\xa2\x3e\xac\xb4\x06\xd7\x87\x95\xcd"
- "\xc1\x3a\x81\xbc\xfb\xde\xda\xa7\x7c\xbd\xa2\x0e\x54\x9f\x87\xfc"
- "\x1a\xf4\x29\x24\x5b\x58\xf0\x58\x30\x8d\xf9\xd3\x43\xcb\x2d\x3f"
- "\x19\xe5\x56\x1d\x5a\x6e\xf9\xb9\xc3\xcb\x2d\xbf\x02\xe5\x56\x3d"
- "\x54\x6e\xf9\x75\xdf\xdd\xa7\xc8\x6f\x0f\x96\x59\xfe\xb1\xef\x2e"
- "\xb3\x82\x88\xd0\x32\x2b\x88\x0b\x2d\xb3\x82\x44\x21\xb3\x82\xb2"
- "\x60\x99\x15\x64\x06\xcb\x0c\xf9\xf6\xbd\xc9\xac\xa0\x4d\x21\xb3"
- "\xf5\xe7\x61\xd5\x02\x94\x59\x97\x90\xd9\xea\x91\x0a\x1a\xed\xa1"
- "\x65\x56\xe0\x46\x99\xad\x0f\x2d\xb3\x55\x31\xc3\xcb\x6c\x15\xed"
- "\xa1\xb1\x7e\xa8\xcc\x56\xa5\x7c\x77\x99\xad\xaa\x08\x96\xd9\xaa"
- "\xfc\xef\x2e\xb3\x55\xd6\xd0\x32\x5b\xd5\x1d\x5a\x66\xab\x1c\x42"
- "\x66\xab\xe3\x83\x65\xb6\x5a\x17\x2c\x33\xe4\xdb\x3f\x29\x33\x94"
- "\x4f\x97\x98\xaf\xbb\xfa\xc5\x7e\x3e\xa6\xbd\xba\xca\x0e\x85\xd2"
- "\x7a\xf6\x42\xae\x3b\x92\x0c\xdf\x46\x98\xb2\xa1\x6d\xf7\xea\x06"
- "\x29\xec\x89\xa1\x72\x58\x7d\x02\xdb\xd5\xbe\xb6\x0a\x3e\xaf\x4b"
- "\xc8\x90\x78\x8e\x70\x62\x8c\x6c\x35\xb7\xff\x28\x63\x46\xfb\x0a"
- "\x53\x5b\x8c\xf0\x4e\xc2\x43\xfb\xaa\x04\xe3\x2a\xd4\x7e\x17\xbf"
- "\x6c\xf8\x39\xe6\xcb\xbb\x68\xef\xff\xf3\x50\x34\x5e\xe8\x6a\xa1"
- "\xd2\xff\x6d\xc2\xbc\x2e\x0a\x3d\x7d\x46\x31\x66\x52\x38\x8c\xff"
- "\x5b\x48\xfe\x6f\x53\x68\x3d\x2d\xbc\x8e\xff\x5b\x48\xfc\x68\x0a"
- "\xe8\xaf\x46\xa3\x07\xa8\xe8\xaf\x16\x7a\x22\x9d\x42\x77\xb8\x1f"
- "\x5b\xb3\xbc\xcb\x65\x2e\x8a\x53\xd0\x8c\xb2\x29\x3a\x2c\xd1\x7c"
- "\x20\x38\x7d\x51\x62\x68\x9a\x8b\x32\x91\xe6\xb7\x43\xd3\x5c\x64"
- "\x1a\x9e\xe6\xa2\x3d\x48\xf3\xdb\x43\xeb\x56\x51\x8b\xa4\x07\x21"
- "\xfa\xe5\x45\xd6\xd0\xf2\x2f\x52\xc8\x1f\xb2\xca\x2a\x98\x83\xa7"
- "\x0f\x82\x7b\x06\x02\xe1\x68\xae\x3e\xc1\x92\x8e\x84\x80\x9d\xae"
- "\xc4\x39\x0c\x5c\xe6\x10\xdd\xa3\xb5\x05\x21\x75\xef\x99\x2a\x51"
- "\x1f\x9f\xe9\x0e\xae\x8f\xcf\xd4\x07\xd7\x47\xe4\x75\x70\xba\x13"
- "\xc1\xf1\x85\xbb\xbf\x3f\x1b\xbb\x26\x5e\xa1\x03\xef\x9e\x87\x35"
- "\x3f\x17\x3a\xb0\xc6\x1b\x4c\xc7\x9a\xa4\xd0\x3a\xb0\x26\x0b\xcb"
- "\xff\x6e\x68\x1d\x58\x53\x36\xbc\x0e\xac\xb1\x20\x2f\xdf\x0d\xd4"
- "\xdb\xa5\x15\x49\xe1\x0a\x98\xe3\xa1\x6d\xde\x9a\xd3\xa1\xc7\x75"
- "\xd6\xf4\x08\x1e\x17\x4f\x0c\xe6\xf1\x1a\x4f\x30\x0f\xb1\x2c\xff"
- "\x3c\x0f\x07\xcf\xca\x70\x99\x8b\x95\xf5\xdf\x76\x1e\x8a\xa5\xfa"
- "\xbf\xf6\xf3\x60\x1a\x8b\xa5\xfe\x4f\xa8\xb1\xac\xe2\x16\xe4\xa5"
- "\x2d\x34\x2f\x8b\xad\xa1\xcb\x5c\x4c\x6d\x90\xcd\x37\xa4\x2e\x15"
- "\x3b\x30\x7c\x29\x7d\x3b\xa0\x31\xac\x46\x0c\x5f\xea\x01\x1d\x6f"
- "\xaf\x06\xdb\xa5\xb5\xb4\xf7\x11\xe3\x63\xcc\xa8\xbf\x91\x13\x21"
- "\x83\xda\x20\xa2\x2b\xa7\x42\xf9\x4d\x74\x6d\x12\xd1\x4d\xf3\x58"
- "\x68\x5d\x4d\x64\x39\x64\xd8\x9c\x1e\x90\xf5\x9d\xe0\x15\xb8\x4d"
- "\x54\x2f\x08\x5e\x86\x15\x63\x9d\x55\x0a\xdb\xb4\xb6\x3e\xb4\x8c"
- "\xd7\x1e\x1b\x5e\x77\xd6\x9e\x16\x72\x5e\x07\xc1\x72\x5e\xdb\xe3"
- "\x33\x8f\xcd\xa4\xb2\xa2\x0e\x7c\xa7\x7a\x42\xdf\x4e\x87\xb5\xf7"
- "\x3b\x96\x75\x9b\xb6\xc1\xa4\x0b\xb0\xae\x90\xe7\xa7\x66\xe8\x53"
- "\xa8\xa0\x8d\xdb\x80\x75\xef\x70\x3a\x11\x26\xc7\x03\x6a\xb6\x63"
- "\x4d\x37\xc5\x35\x99\x99\x9b\xce\x8d\x91\xcf\x80\x41\x5d\xb8\xe1"
- "\x1c\xac\xdb\x1e\x94\x1e\x5b\x23\x9b\xc0\x71\x52\x8c\xef\xaf\x3b"
- "\x21\x8f\xc3\x0f\x37\xbe\x8f\x30\x67\xe5\x79\xbf\xe2\x5b\xd8\xba"
- "\xae\x61\xdb\x65\xa4\x89\xd6\x8e\x13\x4d\xd7\xb7\x03\xeb\x8d\xb2"
- "\xfe\x8a\x6f\x73\xeb\x93\xfc\x6b\x5b\xd6\xa7\x62\x9c\xf3\x3a\xe3"
- "\xb9\x01\xf5\x60\x7d\x79\x20\x1e\x71\x5e\xcc\xfa\x3d\xf2\xfa\x14"
- "\x7c\xae\xff\x06\x5c\x32\x3d\x56\x05\x3d\x5d\xd8\x5f\x70\x4a\x38"
- "\xce\x7e\x03\x8e\x18\x5b\xcb\x1c\x98\xe1\x03\xcd\x05\x28\x99\x46"
- "\xe7\xcf\xd8\x1a\x7a\x21\xc2\x03\x5a\xd1\xb7\x33\xdd\x4d\x6b\x43"
- "\xa8\x6f\x68\xf3\xcc\xb3\xd2\x37\x38\x3e\x87\x20\x76\x9e\xb5\xa3"
- "\xdc\x2b\xed\xc1\x66\x7a\x80\x78\xda\x51\x78\xd9\xda\xb0\x9f\xf5"
- "\x1e\xe2\x7b\x6f\x99\x82\xfa\x7f\x7b\x68\xfe\x0f\xcd\xc3\xd8\x06"
- "\xf3\x10\xfe\x2f\xa2\xae\x97\x28\x7c\x52\xd3\x30\xfd\x3f\x13\xf5"
- "\xff\xe6\x85\xae\xe7\xa6\xeb\xf4\xff\x4c\xd4\xff\x9b\x17\xd8\x6e"
- "\x8a\xef\x3c\xa6\xb3\x81\x3e\x29\xed\x8f\x65\x58\x45\x7e\xe6\xb3"
- "\x8f\xde\x55\x07\x7a\x0f\x7d\xd3\xc6\xba\x69\xeb\x6d\xa3\xfa\xaa"
- "\xef\x70\x9c\xa0\x7d\x18\x74\x63\x4d\xa4\x8b\xd4\x96\x51\x7d\x7d"
- "\xd6\xc0\xdb\x32\x8f\xa8\x8b\x95\xe5\xcc\x31\xbd\x07\x75\x68\x7d"
- "\xa1\x8c\x2b\x62\x6b\xa1\x58\xf7\x31\xb6\x07\xc2\x6d\xbd\xbc\x5d"
- "\x54\x91\xbf\xca\xfd\x56\xcf\x15\x20\xbc\xad\x15\x1d\x40\x78\x7d"
- "\x83\xed\x24\xc7\x5d\x41\x75\x9c\x70\x12\xee\x4e\x84\x23\xbc\x04"
- "\x27\x97\x43\xac\x8d\x79\xb6\x25\xb0\xec\x7c\xfc\x05\xf3\xc6\xf0"
- "\xcf\x68\x5c\xc5\x46\xe9\x2a\x97\xb1\x19\x3d\xf4\xcd\xec\xb2\x95"
- "\x55\xae\x61\x33\x4a\x68\x4c\xac\x84\xce\x81\x56\xbd\xfd\x77\x7b"
- "\x58\xd9\x64\xd0\x89\xb0\x67\xfb\xda\x0c\x6e\xb0\x43\x89\x31\xd8"
- "\x46\x94\x28\xfc\x5f\x13\xef\x67\xe2\x5d\x4b\xf3\x13\xa5\xf9\xab"
- "\x64\x0f\x98\xcd\xe3\xe2\xfa\x71\xbd\x39\x15\xf4\x4d\x9a\xe6\x44"
- "\x89\xfd\xdf\x4a\xca\x15\x63\x6f\x8e\x7d\x7c\x5e\xcd\x5f\x31\xdf"
- "\xd2\x30\xa1\x23\x65\x61\xc1\x32\x2d\xa9\xaf\xbc\x48\xdf\x82\x44"
- "\x7b\xb0\xc2\xa3\xb4\x8f\x25\x27\x64\xdf\x4d\x11\xde\x25\xb7\x07"
- "\x86\x75\x84\xb7\x54\xd1\xce\x94\x70\xff\xdf\x3b\xa4\x5d\x28\x25"
- "\xbb\x1e\xa4\x93\x9d\x5c\x87\x4a\x0d\x1d\x4e\xd4\x9b\x12\xd2\xff"
- "\xd2\x03\x08\xb3\x9d\xd6\x1c\xe2\x7b\xf8\x25\x28\xcd\xf0\x9a\x41"
- "\xd7\xe1\xe0\x6b\xaa\xf4\xa8\x23\x5c\x6f\xa9\xdd\x98\x29\xe6\x23"
- "\x39\x15\x79\x14\xcb\x3c\x27\x98\xce\x92\xbf\x82\x98\x4f\x41\xba"
- "\x50\x9a\x44\x73\x33\xc6\xf6\xf1\xbd\xb6\xf4\xb2\x0e\xd9\x3c\xdd"
- "\xd0\xe9\x51\xf6\x79\x4a\x8f\x87\x2e\x7b\x29\xb5\xff\xb5\x76\x28"
- "\x8b\x0b\x96\x6d\x29\x6f\xff\xe5\xef\x3a\x28\x7b\x47\x70\xba\x32"
- "\x6d\xb0\xec\x4b\xea\x29\x7e\xd8\x39\x3e\x96\xe5\x67\xb0\x3f\x93"
- "\xe3\xe4\xf3\xbd\xca\xb0\xfe\x97\x64\x5e\xcf\x0e\x32\xfd\xf2\x33"
- "\x3e\x84\x95\xe6\x05\xa3\xdd\x2a\xdb\x1d\x34\x66\x34\x8e\x8f\x19"
- "\xe5\x9c\x87\x0d\xd2\xb7\x9f\x0d\x1d\x0a\xfa\x5a\x86\xf7\x0d\xca"
- "\xe8\xfb\x4f\x4e\x68\x9b\x51\x76\x36\xb4\x6f\x50\xe6\x94\xec\x42"
- "\x0e\x8b\x52\xea\xc1\x06\x5a\x4f\xc7\xd3\xc8\x7d\x58\x1a\x0b\x1d"
- "\xbe\x0f\xbb\x21\x69\xb0\x0f\x5b\x42\xf6\x60\x43\xfc\x60\x1f\xd6"
- "\x11\xaa\x0f\x6b\x0f\x21\xcf\x0d\x3b\x43\xcb\x73\x43\x43\xe8\x3e"
- "\xec\x86\xe3\xa2\x9d\xdf\xd0\x1b\x2c\xe7\x0d\xa7\xfd\xdf\x84\xcb"
- "\x5a\xbe\x3f\x7f\x78\xe3\xec\xa1\xfe\xf0\xc6\xdf\x0a\x59\x6d\xbc"
- "\x12\x4c\xdb\xc6\x8c\xd0\xb6\x7d\x63\xe1\xf0\xfe\xf0\xc6\x9d\xc3"
- "\xdb\xf6\x8d\xcd\x43\xfd\x61\xc3\x08\x05\x4c\xdb\xa0\xaf\x14\xe4"
- "\x9b\x6d\x3c\x2b\xf8\xb4\x89\xfc\x39\x4d\x00\xbc\x33\x58\xdf\x91"
- "\x66\xc4\x87\xb6\xed\x02\xd9\x34\x59\x67\x86\xe3\x09\xed\xbd\x74"
- "\x5b\x1d\x8c\xc4\x3a\xf0\xae\xcb\xbc\x69\x50\xff\x69\x1e\x1f\xe5"
- "\x43\x36\x72\xd8\xf9\x74\x6a\x99\x3e\xa2\x63\x53\xc5\xf5\xbe\x97"
- "\x6a\x62\x21\xe3\xe5\x21\xfc\xd8\xc4\xfd\x3f\xc2\x71\x7d\x99\x6d"
- "\xea\x53\xd4\x31\xa7\x98\x87\x5b\xfe\x7b\x21\xb7\x72\x45\x5f\xb6"
- "\x5c\xc7\xd7\xf4\x0d\x6b\x6f\xcb\xe3\x43\xeb\x68\x79\xd2\xa0\xbd"
- "\x2d\xe1\x78\x37\x2b\xe2\x73\x85\x0c\xca\x4f\xf8\xa2\x02\xc7\xba"
- "\xcb\xcb\x83\x6d\x52\x79\xae\x22\x9d\xa2\xff\x57\xce\xe9\xf9\x76"
- "\xed\x4d\x79\xef\xf0\xed\xcd\xe6\x0d\xa2\xfc\x5b\x14\xdf\x97\x37"
- "\xeb\xae\xdf\xde\x6c\x1e\xa6\xfc\x9b\x93\x82\xdb\x9b\x2d\x8a\x6f"
- "\xf4\x9b\x73\x43\xb7\x37\x9b\xcb\x65\x3b\x23\xec\xc6\xe6\x3f\x7d"
- "\x3b\x7b\xb3\xf9\x58\xb0\xbd\xd9\x5c\xff\x4d\xf6\xa6\x75\x88\xbd"
- "\xd9\xec\x8c\x6c\x08\x55\x96\x2d\x11\xa1\xed\xcd\x96\x38\x21\xc3"
- "\x2d\x15\xc1\xf6\x66\x4b\x62\xb0\x0c\x37\x2b\x64\xb8\x45\xf1\xfd"
- "\x7b\xb3\xee\x7f\xd7\x26\x69\x34\x1a\xb5\x46\xa5\x56\x69\x30\x0a"
- "\x8b\x07\xe1\x1a\xad\x26\x0c\xaf\x11\xd2\x3d\x5c\xad\x51\x6b\xf1"
- "\x0a\x93\xee\x23\x14\xef\xe1\x94\x16\x2f\xad\x74\x0f\x53\xbc\x8f"
- "\xf8\x86\xf8\x70\x29\x5f\x39\x7f\xad\xe2\x3d\xec\x1b\xe2\x47\xfc"
- "\x93\xe9\x61\xc8\x7b\xf0\x3a\xc8\x85\xeb\x36\xe6\x15\x17\xe5\xf3"
- "\x79\xed\x05\x86\xbc\x95\x2b\x0b\x4a\x4b\x0d\x65\xeb\x0d\x0f\x3e"
- "\xb0\xe4\x9e\x39\x06\x31\x3d\xbe\x78\xee\xd4\xfc\x51\x90\xb6\xa9"
- "\x84\x22\xd2\x96\x2e\xcc\x32\x64\x3c\xf8\x40\x70\xa4\x8c\x86\x4f"
- "\x83\xbf\x1e\x96\x80\xba\x97\xf4\xe2\x38\x80\x3d\xfb\xb9\xdd\xe9"
- "\xa1\xb5\xe7\xa2\x3f\x51\xf5\x97\xd3\xb4\x7e\xf9\x5a\x25\xa3\x75"
- "\x15\xe7\xa0\x62\x2b\x15\x22\xa1\xb9\x0a\x4c\x4f\xd3\x7e\x2a\x15"
- "\x07\xd8\x1f\x1c\x60\x78\x04\xd4\xe7\x60\xd7\x17\x6d\x29\x08\x8b"
- "\xef\x36\xbb\x07\x0c\x95\xe4\xdb\x56\xbd\x88\x71\x2a\x76\xbf\x0f"
- "\xc3\x9c\xd2\xfa\xfc\xca\x03\x3c\xec\x0f\x55\x32\x5c\xe4\x79\xd8"
- "\x3a\x97\xfd\x81\xf1\x77\xda\xb3\x46\xc0\x6d\x8d\x62\xea\xe7\xba"
- "\xc8\x2e\x34\x44\x83\x96\xe6\x65\x1f\x88\x06\xdd\x81\x71\xb4\xe7"
- "\xee\x56\xad\x3c\x2f\xfb\x45\x7c\xb7\xc3\xae\x5e\xca\x9b\x60\x7d"
- "\xea\xe7\xae\x11\x7c\x63\x30\xfc\x2c\xff\x3c\xee\xad\x5a\x35\xc2"
- "\xa5\x7f\x06\x91\x91\x5e\xf6\xa5\x3b\x3a\x53\x37\x23\x05\xfd\x34"
- "\x14\xc5\x69\x4f\x15\x88\xb5\x51\x5b\xb7\x6e\xf6\x32\x0f\xed\x99"
- "\x90\xd6\x57\xc9\xaa\xd7\x82\x16\xeb\xb3\xca\x5a\x42\x6b\x29\xb6"
- "\xe6\x37\x15\x80\x16\xcb\x3f\xf1\x02\x6c\xab\x33\x2c\x46\xbf\x31"
- "\x0d\xb4\x1f\x97\xd3\x7a\xd7\x9c\x3b\xf7\xfd\x19\xb4\xbf\xba\x56"
- "\xa5\xbe\xc6\x62\xa1\xa2\x8c\xf5\x32\xda\x87\xdb\xc9\xdc\x34\xdf"
- "\xf6\x74\xae\x97\x60\x26\xb8\x2a\x63\xa1\x13\xdd\x97\xad\x67\x99"
- "\x7b\xf7\x9f\xc5\x7e\x15\x1d\x7d\x4e\x5a\x3f\xab\xdb\x9a\x06\x9a"
- "\xf3\x59\xa0\xee\x28\xac\x07\x5b\xb6\x13\x2a\xce\xb2\xde\xd3\xb9"
- "\x9f\x43\x67\xe1\x31\xc8\xe9\x06\xf5\xe9\x9e\xbf\x01\xdf\x4b\xba"
- "\xf6\xc3\xe6\x6d\x57\x20\x76\x6b\x11\x85\x5d\x81\x2d\x5b\x61\xcc"
- "\x96\x4f\xa8\x1f\xd4\x8d\xf9\x5c\x84\xa7\xce\x80\x0a\xf1\xa9\x9f"
- "\xfb\x1b\xc4\x3e\xf7\x24\xad\x33\x4f\x82\x86\x6d\x10\xcb\x2a\xe3"
- "\x23\xae\x55\xc6\xeb\xaf\xb1\xf8\x68\x57\x65\x7c\x4c\xa7\x09\xe1"
- "\x7b\xde\x81\xb1\xdd\x10\xf3\x87\x0b\xdd\xea\xfa\xaf\x60\x22\x95"
- "\xe9\x3c\x96\xad\xe1\x2b\x84\xaf\x3d\x64\xf0\x61\xda\xc0\x34\x9e"
- "\xa8\x43\xb3\x6d\x59\x6e\xf0\x21\xae\xfa\x6b\x30\xb1\xe1\x1a\xc4"
- "\xfa\x6a\x0e\x19\x28\x5d\x1f\x54\xd6\xd8\x4e\x03\x6a\x0a\xf3\x0e"
- "\xd4\x66\xd3\xb8\x49\xf8\xdb\x4f\x9f\xd0\xda\x4e\xf7\x41\x87\xf3"
- "\x1a\x74\xc2\x5f\xc1\x56\xfe\x0f\xeb\xaf\x9e\x3e\x11\x86\xfe\xa4"
- "\xca\xba\x85\xe6\xc0\x0b\xdd\xa9\xec\xa0\xfd\xf3\xaa\xa0\x7a\x1b"
- "\x44\x98\xb6\x40\xf8\x05\x0c\xe7\xb6\xc7\x92\x8e\x7d\xb0\x7f\x58"
- "\xb7\xf0\xf5\xe0\xbb\x7a\xb7\x75\x80\xa6\xd3\x59\x4f\xeb\x8e\xd5"
- "\xde\xe8\x0f\x9b\x6d\xce\x2e\xb0\x99\x3e\xb5\xfa\xf4\x1f\xee\xde"
- "\xe3\x03\xdd\xaf\xaf\x76\xa9\x6d\xda\xab\x60\xcb\x72\xc2\xbb\x98"
- "\x37\xab\xfd\xf0\x28\xda\xac\xa4\x4e\xa7\x9b\xf6\xdf\x31\xb2\xfe"
- "\xd8\x51\xd5\x25\x30\xbd\xf1\x2b\x88\x3b\xf4\x15\xc4\x33\x57\xbc"
- "\x9a\xd6\x78\xd3\x7e\x69\x87\xf0\x1e\x81\x7d\x30\x2c\x3b\x5f\xeb"
- "\xcd\xa2\xa4\xb5\xde\x03\xf1\xd0\x74\xcd\xbf\xd6\xfb\x5a\xbf\x7f"
- "\xad\x37\xea\x94\x8e\xd6\x7b\xdb\x61\x5b\x43\xe4\x69\x08\xc7\x7a"
- "\x62\x25\xfd\xae\xbe\x04\xda\x1d\x97\x00\x66\x54\xa9\xa9\x9f\xa9"
- "\xc5\xfa\xb0\xd5\x86\xb2\xa1\xe7\x73\x50\x35\x0b\xef\x11\x78\x61"
- "\x7f\xae\x8a\xef\x55\xd1\x23\xe9\x31\x86\xa9\x31\xec\x16\xbc\x6b"
- "\xf0\x7e\x63\x65\x03\x73\x60\x5e\xb4\x96\x62\x14\xe9\xb3\xb4\xbe"
- "\xbc\xd7\x65\xae\x8a\xb0\xc3\xd1\x62\x59\xaf\x85\x7d\xdf\xaa\x7b"
- "\xf7\xdc\x45\xda\xef\xdd\xc1\xe9\x1a\x28\x54\xd1\xde\xef\x52\x38"
- "\xd1\xb0\x81\xf2\xc5\xfc\xb3\xf0\x1e\x29\xfa\xa0\x95\x7d\x72\xda"
- "\xfe\x81\x42\xca\x73\x2d\x86\x33\x39\x1c\xcb\xad\xa5\xb8\x7f\x3b"
- "\x77\x51\x2d\x60\xe2\xd5\x88\xd3\x2d\xe1\xc7\xba\x5f\x71\x94\xea"
- "\x78\xbf\x3a\x92\xb5\xe6\xce\x82\x86\xfd\xec\xf4\xa1\xfd\xac\x4d"
- "\xd4\xbd\xaa\x63\x76\xf8\x17\xbe\xf7\x24\xb6\xe1\x6d\x7b\x30\xae"
- "\x15\x7b\xe3\xc4\x97\xb6\x7c\x9a\x5f\x5a\xd5\x65\x87\x29\x31\x81"
- "\x65\x60\xe6\x2d\xc7\xa8\x1d\xfd\x97\x6d\xed\xd8\x9f\x7c\xee\x58"
- "\x67\x4f\x1f\xfc\xea\x5a\x6f\x58\xe5\x47\xa0\xb6\x79\xce\xc1\xcc"
- "\x18\x71\x4e\x4e\xd3\x7e\x66\x7f\x99\xce\x0f\xde\xcf\xfa\x50\x5f"
- "\x6e\xb9\x00\xdb\x6f\xb9\x2b\x06\x62\xfe\x88\x5e\x89\xb0\x4f\xdb"
- "\xef\x0d\xb0\x4f\xef\x74\xd8\x4f\x04\xd8\xa6\x5d\x6b\x87\xda\xa6"
- "\x9d\x45\xc2\x36\x61\xdd\xe7\xb6\xc8\x6b\x97\xc2\x1f\x53\x84\x4b"
- "\xeb\x57\x76\xde\xa7\x08\x77\x4b\xe1\x53\x15\xe1\x0e\x11\xbe\xa3"
- "\x40\xb6\x7d\x9d\x44\xc7\x26\xb2\x7d\x3b\x16\x92\xed\xeb\xcc\x95"
- "\x6c\x1f\xb7\x3f\x3b\x12\xd8\xeb\x68\x8b\x36\x92\xbd\xd9\x11\x46"
- "\xf4\xb3\x3f\x80\x4c\xfb\xc8\xf3\x60\xfe\x80\xc2\x2c\x7f\x05\x2d"
- "\x5e\x92\xdd\xab\xb8\x89\xec\x1e\xd9\x3c\xb2\x7d\x07\xc7\xb1\xee"
- "\x83\xfb\xd9\x99\x06\xbe\x6f\xb5\x79\xd0\xfe\xbd\x84\x61\x7b\x30"
- "\xec\x25\x8c\x27\x3b\x48\x3c\xe9\xc8\x3a\x01\xfc\x5c\x1b\x4b\x4e"
- "\xbc\x4f\x6d\x84\x7d\x28\x6f\xda\xff\x6a\x27\xf2\x37\x52\x05\x26"
- "\x5b\x99\x93\xaf\x43\xa1\xbd\xd2\x3b\xcb\x7a\xa8\xde\x8d\xdb\xe1"
- "\xa3\x71\x8a\xcf\x61\x9b\x93\x5d\xa0\xb5\x2a\x44\x43\xce\xe6\x47"
- "\x68\xaf\x6f\x55\x5b\x21\x00\xed\x4b\x40\x36\x1b\x69\xd1\x5a\x90"
- "\x26\xb1\xb7\xb0\xf9\xa4\x1d\x3e\x95\xf4\x75\x17\xad\x55\xc3\x36"
- "\x05\x3b\xe2\x66\xb4\x8f\x58\xb6\x48\x6f\x15\xd0\xde\x2c\x74\xbe"
- "\x26\xdd\x0f\xaa\x7d\x85\x16\x79\x7f\x16\x33\xda\x06\x84\xb1\x75"
- "\xbb\x81\x68\xb6\x83\x39\xb5\xa3\xe2\x04\xa6\xdf\xee\x20\xde\x30"
- "\x73\xa5\x8c\x43\xc5\x71\xa8\xf9\xd8\x6d\x21\xc2\xd9\x85\x7f\x93"
- "\xad\xeb\xc8\x76\x00\xd9\x7d\x5b\x2f\xe2\xa8\x38\x27\x70\x20\x2e"
- "\x86\x6d\x40\x50\x9c\x84\x7f\xcc\x56\xf6\x25\xe2\x3f\x49\xf2\xa2"
- "\x7d\xba\x68\x9e\x12\xf2\x25\x82\xf6\x6a\x10\x7e\xa8\x79\x41\xd3"
- "\x5f\x01\xa4\xbd\xc6\x50\xdf\xcc\xc9\xb4\x97\x17\xed\x2f\x76\xbd"
- "\xbd\xc5\x90\x47\x71\xf2\xfe\x62\xbe\x4d\xdf\xef\xde\x62\x88\x3b"
- "\xb6\x51\xcd\xb0\xce\x99\x93\x69\x7f\x31\xa4\xbf\x85\xf4\x50\x2a"
- "\x53\xca\x2b\x4f\x11\xcf\xb7\xef\xa1\xb0\x6a\x33\x6b\x97\xe5\x4f"
- "\xe5\xa5\xb2\x60\x9c\x49\xf8\x87\x0c\xeb\xe5\xce\x14\x8a\xc7\xb0"
- "\x6c\x82\x9f\x89\x76\xcc\x86\x6d\xd8\xdb\xe7\xbc\xea\xea\x2d\xa0"
- "\x15\x36\x6d\x57\x1e\xa5\x17\x36\x6d\x57\xac\xdf\xa6\xed\x1a\x23"
- "\x6c\x9a\xe0\xb1\xb0\x69\xbb\x54\xc2\xa6\xed\xfc\x9a\xcf\x27\x42"
- "\x9b\x46\x71\x64\xd7\x64\x9b\x76\x68\x1c\x6b\x27\xdb\xe1\x32\xef"
- "\xec\x95\x6d\xdb\x5e\x0c\x23\xdb\x41\x34\x0a\x3b\xb5\x23\x89\xfd"
- "\xcf\x78\x10\xf3\x35\xe9\xb9\x90\xf6\xcf\xe8\x95\x9e\xa9\x3d\x79"
- "\x52\xd8\xb8\x5d\x89\x7e\x1b\xb7\xd3\xea\x4f\x4b\x36\x6e\xd7\xa3"
- "\xc2\xc6\x89\xf0\xa6\xa7\xc8\xc6\xed\x48\x22\x1e\x48\xf8\xd5\xf4"
- "\x1d\x4d\x82\x27\x3e\xa6\x04\xda\xb8\xe0\xfa\xb5\xab\x4e\xb6\x71"
- "\x64\xdb\xf0\xbd\xc5\x0e\x93\xf9\xb8\x30\xd5\xb3\x3a\xe4\xb9\x5c"
- "\xef\x48\x06\x54\x66\x3a\x3f\x80\xf8\x36\xff\x22\x84\x4b\xfb\xd6"
- "\x48\xe5\xde\x65\x97\xd7\x68\x22\xff\x87\xee\x69\x06\xfe\x7d\xc9"
- "\x50\xd6\xb7\xd2\x7e\x8e\xb6\xaa\x73\x60\xab\x67\x55\x9d\x9e\xb3"
- "\xe0\xdb\xb1\xe6\x33\x92\x2b\xf6\x37\x7e\x4a\x77\xb2\x3b\x17\xe0"
- "\xf9\xc9\x39\x4e\x3e\x7e\xff\x59\xb5\x1a\xe3\xca\x83\xe2\xe6\x52"
- "\x1e\x34\xae\x88\xcf\xba\xe1\xc6\x11\xbe\x43\x5e\x7b\xaf\x93\xd7"
- "\x9b\x3c\x2f\xf4\xa5\xb0\xdf\x13\x75\x09\x9e\xe7\xdf\xd0\xf8\x9e"
- "\xcc\xa1\x71\xfd\x45\x8a\xd7\x0c\x13\xff\xf5\xf5\xd3\xbf\x30\xfe"
- "\xfa\xe9\x5f\xb8\x8f\x6c\x10\xad\xc7\xf3\x9a\x83\xf1\x8c\xf5\xc8"
- "\x70\x17\x08\x2e\x4f\xfa\x0e\xf2\x59\xe5\x64\xde\x2f\x8b\x95\x71"
- "\x92\xde\xed\x43\x38\xbe\x7f\x2d\xda\xc8\xe4\xcd\x40\x7b\x07\x07"
- "\xa6\x3d\xe4\xe7\xef\x0b\x19\xd7\x19\xa7\x89\xb0\x61\x2f\x90\xce"
- "\x97\x6f\xc5\x56\x90\xd6\xd2\xd4\x0d\x7e\x7b\x78\xc1\x89\xf6\x92"
- "\x9f\xdf\x2a\xad\xdb\xed\x43\xfb\x76\x2b\xed\xb1\x49\x7e\xa5\xb4"
- "\xd6\xe2\x26\xb4\xcb\xd1\xb4\x0f\x0b\x8d\x57\xe7\x78\x33\xd4\xad"
- "\x7c\xff\xfd\xdd\x46\x39\xed\x70\x63\x7b\x94\xaf\x94\x27\x5f\x87"
- "\x84\x69\xf2\xe5\x34\x84\x9b\xd6\xde\x60\x7b\x7c\x2b\xdf\xdf\xcc"
- "\xd3\x47\x36\xf0\x26\xf4\x41\xa3\x45\x3e\xb9\x20\xe5\x53\x6f\x87"
- "\xe7\xf3\xaf\xb7\xce\x69\xf8\xf2\xed\x3e\xf3\xdd\xcb\x07\x52\xf9"
- "\x5e\xd4\x7f\x43\xf9\xae\x93\xef\x8b\xa9\xdf\x3d\x5f\xbd\x9c\xef"
- "\xee\xef\xce\xd7\x17\x4f\x7e\x7b\xbe\x1a\x25\xbe\xbe\xe8\xf8\x06"
- "\xbe\x86\xc8\xe7\x67\x71\xdf\x3e\x1f\x83\x94\xcf\xcf\xb2\x42\xe5"
- "\x03\xfc\x37\xec\x7e\x3d\x3a\xf9\x8c\x18\xe9\x5c\xe2\x91\x88\xa7"
- "\xd9\x0e\xbb\x07\xcf\xb0\x12\xe7\x25\xfd\xec\xb8\x1d\x5e\xac\x0b"
- "\x5e\xc7\xf5\xb3\x3f\xe5\x34\x53\xbb\xce\x7c\x76\xf8\xd9\x19\x1a"
- "\x6b\x4b\xde\x2a\xf6\x07\x94\xd2\xa0\x3d\x7f\x71\xe2\xf5\xbe\xa7"
- "\xf1\xb3\x30\xa4\xbd\x3b\x68\x7d\x2a\xab\x6d\x80\xfe\xca\x42\x10"
- "\x67\x45\xbf\x74\x37\xad\x43\xc2\xe7\x70\x7c\x16\xe3\x50\x74\xbe"
- "\x80\xd8\x93\x62\x04\x86\x6d\xa7\xf3\x27\xc4\xfa\xbd\x97\x32\x91"
- "\x06\xbe\x07\xbb\xd8\x63\x9f\xef\xed\xe2\x44\x38\x35\xa5\x15\x7b"
- "\x7a\xbc\x54\x2e\xc3\xd8\x65\x7c\x83\xfb\x5b\xbc\xb4\x50\xb4\x2d"
- "\x2f\xa5\xf4\x0f\x73\x8e\x11\xed\x73\xd6\xb2\xcd\x18\xb4\xfe\x70"
- "\x41\x49\xc9\xfa\x92\x39\x86\xd2\xb5\x4f\x27\x94\x96\xe5\x95\x6d"
- "\x28\xe5\x0b\xd5\x47\x01\x06\x18\xca\x8a\xd6\x16\xac\xdf\x50\x16"
- "\xbf\x29\xaf\x48\x2c\x6c\x9f\x86\x80\x81\x40\x10\x7c\x6e\x24\xda"
- "\xa0\x2e\xa6\xe6\x7b\x50\xf0\xb3\x23\x69\x2f\x12\x79\xdd\x6e\x5b"
- "\x2c\x3f\x63\x0b\x6d\xd6\x9e\x44\x3b\xac\xef\x95\xe5\x40\xfb\x23"
- "\xa2\xdf\x12\x7b\x01\xf6\x3c\x49\xba\x93\x8e\x2e\x68\x93\xd8\x57"
- "\x82\xef\x0d\x60\x2b\xc3\x80\x4e\xd0\x59\x37\xd2\x38\xec\x9e\x2e"
- "\x9f\xf9\x25\x2b\xdf\xef\x71\xcb\x05\x7a\xbf\x22\xfb\x09\xf4\x5d"
- "\x49\x7c\x07\xbe\x75\xde\x39\xd8\x33\x95\xf2\xa5\x7a\xd7\x58\x2b"
- "\xce\xea\x66\xe6\x97\xba\x69\xad\x36\xbe\xeb\x90\x06\xab\xec\x8b"
- "\x22\xbd\x11\x2c\xaa\x41\x67\x87\x3d\xce\xf7\xf5\x0e\x90\xd6\x7a"
- "\xeb\x1a\xc5\xba\x6e\x2d\xc2\xf6\x0d\xc2\x9a\x69\xdf\xe3\x06\x1d"
- "\xb6\x9b\x21\xbf\x65\xb3\xe8\x22\xda\xeb\x2c\x2c\xb0\xcc\xd8\xaf"
- "\x46\xf9\xed\xfd\x39\x96\x3d\x46\xd6\x15\x21\xfb\xbd\x7b\xc5\xde"
- "\xcb\x45\x3a\x0c\x1b\x81\x77\x43\x3f\xc6\xd1\x1e\x08\x18\x97\x4b"
- "\xdf\xc8\x3a\x2b\x2e\x5b\x5b\x63\xcf\xa1\xdc\xf7\x9a\xec\xb0\x71"
- "\xa2\x58\xb7\x86\xf0\x98\x87\xad\xea\x1a\xb4\x19\x98\x95\xc6\xe8"
- "\xec\xb0\xf7\x64\x9b\xc1\x09\x4c\xb3\xec\x33\x4a\x87\xf5\x2a\xb6"
- "\xb2\x9c\x7c\x11\x0c\xe7\xeb\xf3\xf6\x1e\x93\x79\x5e\x66\x60\x17"
- "\x09\x66\xb8\x71\x65\x6a\x2f\xab\x79\x5b\xf2\x15\xd0\x1c\xac\x1e"
- "\xd8\x7b\x46\xd9\x5e\x4c\xcd\x9f\x63\xc8\xcf\x2b\x33\x14\x17\xad"
- "\x2b\x30\xe4\x17\xe5\x1b\xd6\xad\x2f\x33\xac\x5e\x4f\x03\x3c\x34"
- "\xa4\x13\xa4\x13\x3e\x2a\xdf\xa6\xac\x30\xf9\x1b\x76\xff\xa6\xc2"
- "\x11\x42\xa7\xab\x13\xfa\x5d\x85\xe1\xc1\x3c\xa9\x8e\x12\x6d\xe5"
- "\xbe\x5c\xa4\x5d\x2b\xd6\xff\x69\xb0\x8f\xb9\x0f\xcb\xbf\xb7\x3d"
- "\xb8\xee\x56\x2f\x97\x60\xf7\xc8\xb0\x5c\x2f\xa6\x5c\x18\x8c\xab"
- "\x96\xf4\xb1\x49\xac\x53\xe6\xfb\xde\x34\xf1\x39\xfc\xfb\xac\xc3"
- "\xa6\xa1\xbd\xbe\xb6\xc0\xca\x4b\xb0\xef\x4d\x66\xde\xeb\x94\x74"
- "\x48\xe7\xb3\x14\xc5\x4a\xfa\x83\x3a\x51\x0d\x43\xf5\xa7\x3a\x9b"
- "\xf4\x87\xb9\xb2\x74\x7c\xbe\x87\xc7\x8d\x76\x0e\xdf\xb1\x7d\xb6"
- "\xc3\xbe\x7c\x2a\x87\x73\x53\x96\xae\xf2\x00\xdf\x7f\xef\x0b\xfa"
- "\x76\x4a\xe7\xd3\xa0\xae\x8c\x14\xe7\x68\x56\x67\xca\x32\x92\xe1"
- "\x43\xd7\x61\xae\x2f\xc1\x3a\x26\xf8\xf9\x6b\xae\x63\xe8\x1f\x20"
- "\x4d\x6a\x79\x9f\x3f\x6a\x43\x90\xb6\xb6\xb2\xad\x8c\x61\x1e\x27"
- "\x02\xf4\xe0\x52\x28\x3d\x40\xd9\xae\x2c\x5e\xbf\x72\x0d\x56\xf4"
- "\x92\x82\xb2\x95\x85\xb4\xb7\x05\xd9\x01\xbe\x71\xc6\xd4\x7c\xc3"
- "\x86\xd2\x82\x95\xa3\x20\x14\xd4\x60\x64\xa0\xfc\xf5\x3e\xd4\xd7"
- "\xfe\xfe\xac\x30\x5a\x63\x21\xd6\x54\xd4\x6c\xed\x2f\xc5\xbe\x48"
- "\x90\xdc\x6b\x9e\xb5\xc5\x1a\xd1\xa7\x33\xf2\xbd\xe3\x88\x67\x62"
- "\x9e\x40\xcd\x6f\x89\x0f\xfd\x6a\x15\xb6\x27\x96\x32\x59\x07\xf0"
- "\xb9\x0a\xcb\x54\xe8\x9f\xa3\x51\x73\xbc\x5f\x1d\x76\x96\xec\x8f"
- "\x98\x0f\x72\x01\xed\x40\x64\xd3\x39\xb0\xf0\xb9\x60\x8d\xbc\x3d"
- "\xb2\x1c\x97\xd3\xec\x1b\x5c\xe7\x5c\x33\x51\xd6\x93\x80\x34\x3f"
- "\xa7\x30\xbe\xd7\x91\xb9\xba\x8b\x64\xce\x84\xec\xb5\x32\x1c\xf2"
- "\x95\x35\x71\x3b\x52\xa3\x53\xda\x86\xf7\xf5\xf4\x4d\x5c\xd0\xc3"
- "\xf5\x4f\x5f\xe8\xe0\xfb\xa6\xa0\xaf\x77\x0e\x6a\x6e\x94\xe6\xa7"
- "\xf0\x31\x45\x5b\x39\xe2\x72\x0b\x5c\x98\xd7\x55\x39\x2f\x16\x55"
- "\xe8\x68\xe2\x7a\x56\x53\xe8\x1f\x33\xac\x89\xa1\xbe\x32\xeb\xcf"
- "\x1a\x61\x07\x4b\x26\xd7\x2d\x7c\x2e\x1b\x2f\xf6\x70\x23\x7d\xa3"
- "\x72\x92\x5e\xf9\x75\xaa\xe6\x88\x2c\x6f\x2a\x33\xa6\xcb\x36\xf0"
- "\x7d\x7e\x6b\xac\x32\x2f\x87\xdb\x6b\x86\xd7\x5b\x7d\x11\x9d\xfb"
- "\xc4\xeb\x2e\xef\xe7\x89\xfd\x85\x68\x9d\x8b\x86\x45\x15\xc5\x9e"
- "\x87\xda\x3f\xd1\xdc\xfd\x48\x37\xf5\x9b\x8a\x62\x69\xef\x04\xd1"
- "\x96\xd5\x1a\x50\x87\x63\xfc\x6b\xd3\x6b\xd1\xff\xb3\xc4\x08\xd9"
- "\xd5\x26\x06\xd4\x3d\x87\x34\x1f\x20\x9c\x78\x44\xf6\xcc\x56\xbe"
- "\x80\xd7\x57\xb1\xee\xb7\xb6\x50\x4e\xc7\xf7\x19\x40\xdd\xa0\x79"
- "\xb0\x97\xa0\x76\x37\xb5\x11\x44\x9f\x1d\x6a\x75\x94\x3f\x95\x8f"
- "\xda\x6c\xae\x37\xb1\x74\x06\x4a\x6d\x8b\x82\x86\xe3\x32\x2e\x09"
- "\x77\x9b\xfc\x4e\xfb\x8e\xd9\xa1\x2e\x83\xce\x81\x6c\x75\xf2\x32"
- "\x8c\x6e\xc3\x5e\x41\x9b\x93\xc3\xf5\xc9\x3c\xc4\xf0\x2a\x7c\x47"
- "\x59\xec\x01\xf1\x4d\xa8\x41\x27\x6c\x51\x1d\x9d\x61\xca\x2a\x0d"
- "\xb4\x2f\x61\xa2\xb0\x37\x7c\x2f\x1d\x1e\x37\x52\xaa\xb3\x23\x69"
- "\x8d\x10\x9f\x17\xe3\xf4\x70\xdb\x20\xf6\x5e\xc0\x78\xac\x23\x2e"
- "\x3a\xd3\x65\xa0\x70\xa4\xa0\xed\xe5\xdc\xc1\x3c\xe8\x7c\x4a\xfe"
- "\x0d\xf2\xe5\x0c\xb1\x97\x49\x38\xf6\xf5\x5e\xae\x92\xe5\xb7\x73"
- "\x3f\x86\xd1\xf9\xa9\x6a\xd0\xb5\xf1\xbd\xc2\x5e\x6e\x90\xe9\x95"
- "\xe2\xd4\x5c\x1f\x38\x0f\x5e\x1e\xac\xff\xfd\xfc\xac\xcf\x97\xdb"
- "\xe5\x7c\x38\x2c\xc2\x11\x7c\x5b\x1c\x8f\xeb\x19\xc4\x23\xf6\x50"
- "\xd1\xf1\xf3\x9e\x9b\x29\xae\x0e\xfc\xb6\xaa\x96\xef\x57\xcc\xe7"
- "\xad\x61\x39\x1c\xcf\x15\x8e\xe4\x32\x30\x00\x9d\x0f\x42\xe7\x08"
- "\xab\x85\x2e\xd6\xcd\x92\xd3\x68\x54\xc4\xc7\xba\x64\x39\x6f\x19"
- "\x07\xd1\x7f\x5d\x9b\x27\xca\xa2\xa5\x3a\x22\x9d\xd9\xc9\xed\x85"
- "\xf0\xb5\xea\x3a\xb8\x0e\xf2\x72\xd6\x35\x07\xca\x5a\xf8\x72\x75"
- "\xc7\x03\xf4\x81\xe8\x19\x94\x3f\xca\xde\x29\xda\x92\xba\xee\x00"
- "\x1a\x93\xf0\xbd\xd7\x2f\x07\x2e\x23\x3a\x03\x2a\xe4\x79\x8f\xbc"
- "\xae\x20\x8c\x8f\x71\x3a\x49\x1e\xd8\x17\x9b\x0d\x6d\xe4\x13\x62"
- "\x5d\x41\x9e\x20\x8d\xaf\xac\x25\xbd\x72\x99\x5f\x49\x0a\xd6\xcd"
- "\x57\x32\x02\xe8\x55\x91\x5d\xc7\xb0\x7c\x19\xc6\x0e\xaf\xf0\xb5"
- "\x4c\x32\x3f\x31\xae\x6a\x50\x8e\xf7\x70\x58\x8b\x4c\xe7\x37\xb4"
- "\x19\x12\xaf\x5e\xf9\x48\xca\xa3\x5d\xce\x03\x9f\xb1\xff\x53\x97"
- "\xad\xc4\xf1\xf4\xe6\xb2\x02\xb1\xb9\x11\x35\xf2\x79\x2b\xd7\x14"
- "\xe4\x4f\x37\xe4\xad\xa2\x6d\x90\x4a\x8b\x0b\x0a\x4c\xfc\x23\x4e"
- "\xb0\x1f\x18\xc3\xf3\x43\x3e\x88\x3d\xa7\x5f\x7d\xf4\x65\x31\x7f"
- "\x85\xea\x05\xd5\x77\x07\xd5\xf7\xd6\x8a\xaf\x78\xdf\xc6\x56\x75"
- "\x0f\xd8\xdc\xac\x8a\xfc\x7f\x6e\xfb\xa8\xfc\xb1\x4e\xd1\x0e\xa0"
- "\x3c\xa9\x8d\x74\x99\xf7\x9b\x82\xf9\xb5\xbf\x2a\xb8\x2e\xef\xb7"
- "\x84\xb6\x13\xfb\xef\xe6\x76\xc2\x22\xf4\x82\xec\x13\xcd\xfd\x27"
- "\xbc\x98\xa6\x4d\x81\xf3\x8c\xdf\x46\xed\xb7\xcb\x36\x4a\xb4\x13"
- "\xaf\x6a\xb1\x0d\xb2\x48\x79\x79\xfc\x7a\xf3\x6a\x85\xd0\x9b\x57"
- "\xb1\xff\xf7\xeb\x9d\x72\x5f\x47\xb4\x1d\xaf\xd8\xc9\x7f\x14\xe7"
- "\x6b\xbf\x6a\x94\xf1\xd5\x45\x53\xbb\xf1\x6a\xd2\x50\xff\x61\x7f"
- "\x1f\xf9\x0f\x34\x2f\x91\x78\xc1\xcf\x13\xe6\xf5\xe6\xd5\xe2\x00"
- "\xfb\xa3\xc7\xf7\x8a\x50\xb2\x7e\x9a\x9a\xe3\x04\xfa\xdc\x96\xb0"
- "\x72\x5d\xd9\x5c\xda\xa2\xaa\xa0\xdc\x54\xb0\xb2\xac\x20\x5f\xf9"
- "\x9d\x2d\x5e\xf6\xc5\xe8\x1b\x77\x1d\xd6\x7b\x47\x14\xf1\xe3\x55"
- "\x2c\xff\x01\x8f\x5c\x06\x6e\xa7\xd0\x77\x94\x6c\x5c\xc4\x79\x38"
- "\xf0\x91\x38\x4b\xfc\x55\x8f\xac\x27\x04\x37\xbf\x9c\xf9\x5c\xe6"
- "\x7a\x2c\xff\x7e\x9d\xd4\xdf\xc2\x3e\x6d\xbd\x41\x7e\xf7\xa7\xaf"
- "\x2f\xe0\x6d\xdf\x7e\x3e\xa7\x0f\x79\x5a\xdf\x13\xe0\x6f\xd1\xfb"
- "\x49\xe9\x9d\xef\xc3\x24\xce\x45\xaf\xdf\x2c\xf8\x5b\x8f\xf2\x7f"
- "\x45\xb2\x15\x07\xda\x05\x1e\x80\x37\xb6\x39\xc2\x9a\xf8\xf8\x7e"
- "\xbd\x45\xce\x0f\xd3\x9f\x0d\xcc\x93\xda\x2d\x25\x3e\x3b\xd4\xf3"
- "\xf5\x21\x3b\xf8\x1e\x72\xf5\xa7\x43\xd0\x9a\x11\x08\x87\x30\xd8"
- "\xff\x7d\xa5\x41\x2e\xf3\xd2\x72\x0a\x3b\xa0\xbd\x4e\x19\xfb\x44"
- "\x19\x0f\x54\x91\x6e\x51\xfe\xa4\xff\x12\x0d\xf9\xd2\xbe\x24\x76"
- "\x3a\xbf\x91\xe8\xe7\xfb\xa3\xc5\x52\xbd\x3e\x80\xfd\xdf\x9a\xd3"
- "\x72\x39\xa8\x8c\xc7\xb7\x39\xb4\xf2\xbe\x54\x22\xfd\x81\xb9\xc1"
- "\xb4\x1d\xd8\x13\x90\xa6\xd7\x3a\x85\xc6\xee\x0f\x4c\x65\xe6\x57"
- "\x77\x93\x1e\xd2\x7e\x55\x75\x83\x7a\x78\xe0\xc4\x50\xbd\x3b\x10"
- "\x47\x7a\x17\xa8\x4b\x45\xf7\xac\x44\x4d\x2a\x2d\x28\x9b\xc3\xbd"
- "\x7b\x74\xec\x68\xdb\xb3\xbc\xb2\xa2\xf5\xeb\x4a\xa7\x1b\x4a\xf3"
- "\xf3\xa4\x4a\x1f\x54\xe7\xcd\xbc\xef\xef\x94\xeb\x99\xcb\xfc\x5a"
- "\x9c\xdf\xb6\xbc\xe6\xd7\x7f\x9a\xa3\x35\x85\xc6\x66\x5f\xdb\x2c"
- "\xea\xd3\x6b\xa9\x01\x75\x97\xa7\xa7\x3a\xda\xc4\x7d\xb6\xd7\x02"
- "\xdb\x7f\x27\xf2\x74\xe4\x25\x78\xed\x46\x89\xa7\x4e\xc1\xe3\xd7"
- "\xde\xe3\xe5\xe4\xfb\x71\x1d\x38\x43\xe5\xe4\xfb\xbf\x70\xff\xec"
- "\xb5\x23\x72\x79\xfd\xfd\x86\xd7\xac\xdc\x8f\x92\xfc\xb5\x6f\xea"
- "\xd7\x0b\xff\xf4\x60\xb6\x34\xf6\xd6\x2d\xf7\xf1\x64\xff\x1a\x69"
- "\xc9\x17\xbe\xea\xc1\x1b\xd3\x2b\xd8\x40\x4e\x39\xed\x53\x47\x32"
- "\x38\xf8\x80\xec\x5b\xf2\xf9\x7b\x35\x85\x6e\x97\xf9\xe0\xec\x40"
- "\x3b\xc1\x34\x6b\xba\x25\x1f\xd1\x2d\xfa\xae\xa3\x7f\x77\x0e\xf3"
- "\xa2\x6f\x0f\xd7\xa1\x0d\xcb\x75\x10\xed\xdf\xdb\xc7\x09\x0f\xf9"
- "\xd7\xac\x3f\x56\x3a\xab\xb2\x81\x7f\xc3\x6b\x44\xdc\x0e\x94\x2d"
- "\xc2\xa1\xff\xf7\x1a\xd7\x0d\x1f\xea\x28\xcd\xdd\x71\xca\x3e\x12"
- "\x1c\xfc\x84\xda\x22\x7c\x46\xbd\x6d\x88\x17\x3a\xd5\x10\xef\x28"
- "\x8d\x87\xfe\xfe\x58\x75\x7f\x69\x96\x96\xc6\x0b\x88\x17\xb6\x06"
- "\x37\x08\xfd\x39\xe8\x46\x9b\x77\x24\x10\x9f\x84\x8b\x78\xaa\x25"
- "\x3a\x58\x69\xac\x9a\xf4\x9b\xf4\x95\xf5\xc7\xa3\x9f\x70\xd0\xca"
- "\x4a\xe3\xd5\xc3\xec\xbd\x75\xbd\x72\x46\xd0\x79\x8f\x74\x06\x28"
- "\xd9\x2b\xb1\xbf\xff\xa1\x5d\x2f\x8b\xb1\x01\x29\xdf\x86\x17\x99"
- "\xfa\x30\x6f\x57\xf6\xf1\x76\x85\x81\xd8\x2f\xbd\xe1\x08\x9f\x47"
- "\x6b\x3a\xcc\xcf\x7c\x95\xd6\x67\x3b\xda\x4c\x1e\x7e\x56\x5d\x65"
- "\x19\xf9\x69\x1e\xfa\x6e\xc4\xd7\x1f\xb7\x96\x79\x60\xa9\x9b\x74"
- "\xb2\xa1\x9b\xf6\x8a\x17\x67\x81\x37\xf4\xc8\xfb\xc3\xd3\x19\x92"
- "\x74\xfe\x29\x96\x4b\xe3\x3f\xbf\xf4\xd0\x49\x1a\xb7\x15\xfd\xf1"
- "\x58\xd8\x87\x3e\xbd\x90\xc1\xa1\x04\x3a\x8b\x4f\xf4\x15\xce\xa1"
- "\x5c\x34\xff\x40\xd8\x05\xe2\x1b\xb2\x6c\x27\x0e\xbd\x43\x73\xd3"
- "\xed\x12\x0e\x97\xf9\x10\xb6\xff\x07\x0b\x45\x5e\x88\xcf\x25\xcb"
- "\xf3\x50\xc2\xd0\xf1\x0d\x3f\x3e\x4c\x3f\x5d\xf2\x0b\x40\x8c\x7d"
- "\xbd\x4f\xb8\x1a\xe4\xb1\x2f\xbf\xef\x73\xe8\x98\x3c\xf6\x25\xf6"
- "\x9e\x6e\x28\xa3\xfc\x87\x1b\x23\x62\x95\x4f\x92\xde\xeb\xc8\x87"
- "\x1b\xd6\x9f\xc0\xf6\x9d\x68\x97\xfd\x42\x21\x9f\xc6\x85\xe4\x1f"
- "\xd2\x99\xab\xb2\x2f\x29\x7c\x80\xc6\x4c\xd1\x96\x35\xce\x96\xdb"
- "\x32\x4c\x7b\x5c\xb2\x15\x52\x3b\xd7\x38\xd8\xff\x0d\x3d\x2f\xbf"
- "\xb1\x4c\xe6\x91\xcc\x73\xc1\xa3\xc6\x8e\xfe\xe8\x15\x29\x7e\xde"
- "\x36\x76\x70\x5e\x0f\xc6\x37\x85\x05\xf0\x9e\xde\xb5\xc2\x6e\x36"
- "\x62\xfb\xdf\x30\x4b\xb4\x29\x22\x8c\x45\x37\x8c\xe6\xe7\xb6\x73"
- "\x1e\x14\xf1\xb1\x19\x47\x65\x3c\xd1\xe6\xb0\xab\x8c\x06\x61\xcb"
- "\x1a\x11\xfe\x50\x9f\x48\xd7\x58\x4f\xb4\x04\xd2\xfb\xd8\xba\x35"
- "\xeb\xd6\x6f\x5a\x47\x03\x6a\x1b\x4a\x0d\x2b\xd7\xe7\x17\x8c\x0a"
- "\x31\x1e\x12\x4b\xe7\x5a\x3b\xeb\x06\xf7\x9d\x7a\x5d\x47\xf3\xe8"
- "\xc5\x99\x05\xaf\x8f\x34\xdc\x4e\xfa\xd5\xb4\x96\xc6\x0a\xf8\xd9"
- "\x11\xb4\xc7\xaa\x18\x37\xe8\xa5\xf4\x82\xd7\x87\xaf\xf4\x6f\x2a"
- "\x94\x7c\xac\xc3\xbf\x21\x3e\x4a\x7d\x0e\x86\x65\xfc\x42\x6e\x87"
- "\x88\x3e\xee\x9b\x0f\xc4\x73\xbb\xe8\x1b\x28\xd4\x72\x7e\x0d\xc4"
- "\x63\x7b\xd3\xd4\x6e\x57\xcd\xf0\x88\x72\x35\x9d\x91\xf9\x41\xe5"
- "\x77\xd1\x59\x9b\xac\x08\x75\xf4\x75\x9d\x84\x8b\xec\x27\xe1\x6e"
- "\x90\xe7\x71\xd3\x5e\xa2\xd6\x8d\xb4\x8f\x70\xf3\x27\xbe\x1a\xb2"
- "\x37\xcd\xb1\xb2\x5d\xa2\xb6\xc8\x87\x78\xde\xbe\xea\x08\xc3\x7a"
- "\xf3\x00\xa6\x1d\x77\x0e\x0e\xe7\x8b\xf3\x06\x9a\x93\x83\xcf\x1b"
- "\x38\x6c\xc0\x2b\x5f\xba\x76\x06\x3c\x5f\xef\x92\xd3\x64\xf8\xc3"
- "\x9a\x9b\x15\x30\x3b\x91\xa6\xa3\x83\xfe\x8a\xd8\xcf\x54\xda\xff"
- "\x98\xce\xce\x68\xfe\x82\xf6\x0c\xf5\xeb\x46\xf3\x18\xc9\x07\xe9"
- "\x25\xde\x51\x7b\xdb\x03\x87\xc5\x5e\x26\xb5\xa8\x1b\x2c\x0b\xa8"
- "\x4c\xcc\x55\x84\x3a\x71\x58\xeb\xd7\x03\xc1\x23\x0c\x8b\xf5\xfb"
- "\x29\xcd\x7d\x94\x26\x90\x0f\x98\xc7\x03\xa2\x6f\x7a\x38\x49\x6e"
- "\xb3\x69\xbf\x54\x71\xfe\x44\xf3\xd1\xe3\xdb\x7a\xb1\xcf\x7f\x38"
- "\x3b\x00\xc7\x51\x69\x2c\x42\xcb\xd4\x4d\xfa\x26\xde\x67\x3b\x5c"
- "\xe1\x1f\x13\x68\x3e\x4a\x76\x97\xe3\x88\x6e\xd0\xdb\x9c\xfc\xcc"
- "\x68\x95\x7c\x46\x3c\xc2\x1e\x91\x7d\x14\x19\x57\x9b\x18\x73\xe2"
- "\x7b\x5c\x62\x1d\xb4\x20\xcc\xe9\xc1\xf1\x58\x0c\x1b\xec\x03\x96"
- "\x63\x3d\xe6\xbe\xf7\xe1\x3e\x7f\x5f\xaf\x89\xef\x2b\xc0\xfb\x81"
- "\x02\x0f\xfa\x0f\x87\xed\xca\x7e\x1b\xfa\x0f\x86\xa2\x75\x45\xe8"
- "\x3e\xac\x36\xad\x9f\x8b\x5d\x87\xd5\xa6\xa2\xb9\x34\xe5\x2b\x2d"
- "\x79\x21\xbf\x63\xe5\x98\x1b\x62\xfc\x98\xc6\xbd\xf9\xb9\xcc\x34"
- "\x66\x84\xfd\x5c\x1a\x3b\x75\x89\xb3\x52\xc3\xa5\xbb\x4e\xba\x8f"
- "\xc0\x76\xcf\x80\x75\x65\x2f\x9d\x7d\x83\xfc\x6f\xf6\x99\xc5\x39"
- "\xaf\x52\x9b\x8d\xb6\xfc\xf5\x5d\xf2\xf7\x32\x3e\x07\x9e\xf6\x31"
- "\xec\x2f\xe4\xe3\x71\x2e\xf3\xeb\x83\xe3\x1f\x62\x7c\x51\x7c\x73"
- "\xc3\xf0\x6e\x39\x5c\x1e\x8f\xc5\xb0\x3e\x79\xec\x55\xc0\xbe\xee"
- "\xf1\xa7\x0d\x1a\xdb\x8e\x91\xbf\xc7\xb9\xcc\x6f\x18\x64\x9e\xc9"
- "\x78\x2a\x0d\xec\x92\xe4\x27\x69\xb8\x5f\x6d\x7e\x3d\x86\xef\x1d"
- "\x4a\xbe\x38\x1f\x67\x7e\x23\x53\xce\x87\xfa\x08\x44\xb7\xf4\xed"
- "\x87\xd7\x7b\xda\x23\x54\xec\x31\xfa\xc6\xa0\xfc\x15\x3c\x8f\xff"
- "\xd1\x34\x3e\x2e\x1f\x5f\x8a\xfe\xd9\x34\xc5\x38\x1c\xe9\xd0\xcc"
- "\x3a\x18\xc9\xc7\x98\x44\x3f\x3d\x8c\x7c\x04\x2c\xc3\x61\x94\xa7"
- "\x86\x6c\xb9\x68\xf7\xde\x38\x3b\xd8\xc6\xeb\x1b\x74\x2c\x7a\x45"
- "\x32\xed\x33\x2f\xd6\x2d\xbc\xf1\x35\xe9\x9b\xe3\xa6\x35\x2e\x46"
- "\x73\x94\x5f\x5d\xe6\x12\xe3\xf0\x2d\xf7\xfa\xc7\xcc\xde\xd8\x2d"
- "\xed\x89\x4a\xf3\xdf\x50\x5e\x2d\xd3\x07\x7d\x4e\x84\xe7\xbe\x17"
- "\xe2\xa4\x35\x0a\x94\xff\x77\xf8\xce\x83\xfd\xfe\xf7\x8e\x88\x7a"
- "\xda\x62\xe5\x38\xd0\x56\x8b\x75\x00\x2d\xe8\xff\xbf\xd1\x20\xda"
- "\x06\xc2\x9d\x05\xfd\xd1\xef\x59\xfa\xcd\x1f\x4f\x27\x1e\x3a\xa3"
- "\xff\xd2\x25\xf6\x20\x6e\x79\xcf\x69\xd6\xa2\x4c\x5b\x50\xfe\xbf"
- "\x1a\xd2\xd7\x95\xf3\x1a\xd8\xc8\xda\x3c\x57\xd9\x89\x7d\x7f\x45"
- "\x3b\xb7\x0a\xc0\xb3\x91\x1d\x1b\xb8\xca\x8e\xf3\x33\xc8\x9f\x06"
- "\xd8\xfb\x77\x00\xaf\x66\xd9\x17\xd7\x50\x57\x17\x5f\xf1\x5d\xa2"
- "\xf3\x02\x9b\x10\x6e\xb1\xf3\x32\x6b\xc4\x34\x8b\x4d\xec\x52\x23"
- "\xc2\xa5\x5d\xbc\xc4\x0e\x21\x6c\x5a\x21\xea\xca\x46\xe6\xf1\x6a"
- "\xd6\x7c\x61\x78\x9c\x6c\xf7\xcf\x93\x1d\x35\x05\x99\xcc\xac\xae"
- "\x66\x3b\xee\xba\xd3\x65\xfe\x79\xc6\xe0\x39\x65\x88\x97\xf4\x2a"
- "\xbd\x9c\x9e\xd7\x7c\x81\x7a\xf0\x45\x0e\xfa\x1d\xa8\xb7\x5f\x20"
- "\x1c\x7d\xff\xe1\x6b\xb3\x1c\x9a\x3b\xa3\xf1\x8a\x0f\x49\xff\x55"
- "\xd6\xe6\xdd\xc8\x4e\x54\xaf\x40\xfa\x2f\x20\xfd\x57\xd9\x31\x2c"
- "\xc3\xf1\x7d\xe7\x01\x88\x7e\x2f\xe1\xf4\x82\x26\x67\xb3\x2a\xaa"
- "\x09\xe3\x73\xca\xf5\xd0\x84\xb0\x2b\x9c\x10\xd5\x88\x30\x2b\x9e"
- "\x8d\x02\x4e\x7f\x1f\xd2\x1d\x55\x90\xe9\xc5\xbc\x89\x7e\xcc\xdf"
- "\x2d\xd3\x29\xe7\x4f\xf4\xca\xf5\x36\x87\xc6\x08\xa3\x57\xec\x21"
- "\xba\xc5\x77\x8f\x5f\xe4\x39\x4a\x51\xce\x9a\xbb\xee\x14\x7d\xec"
- "\x5f\xcc\x96\xe9\x0f\xfe\x0e\xf6\x8b\x2a\x61\x3f\x7f\x81\xfd\x9f"
- "\x16\xe9\x4c\x17\x11\x46\xe5\x77\x60\xbd\x95\xd6\xfe\x7d\x21\xf3"
- "\x0c\xe3\xa7\x2b\xbf\x73\x65\xac\x2f\xe1\x63\xd4\x79\x2b\xcb\x8a"
- "\x36\xe6\x61\xcf\x77\x14\x98\x28\x88\xf7\x8d\x0b\xf2\x0d\xeb\xd7"
- "\x19\x56\xe5\x15\x15\xaf\xdf\x58\x50\x32\x9d\x0f\x67\x94\x16\xac"
- "\xcb\xa7\xa1\xeb\x92\xbc\x12\xd3\x28\x45\x7f\xc6\x52\x90\xd9\x49"
- "\x67\xd0\x6c\x23\xfd\x7e\xf3\x23\x69\xdc\xd6\xcd\xcc\x49\xbc\x5f"
- "\x2c\x6c\xcc\x2f\xef\x35\x6c\x49\xa2\xf8\x77\x44\x3b\xfe\x66\x3b"
- "\xab\x5d\xb1\x97\x31\x7e\xb6\xb6\xea\x12\xbc\xf9\x5b\xce\x8f\xfe"
- "\x14\x19\x0f\xef\xbb\x92\xce\x9a\xb6\x90\x1f\xf6\xcb\x6c\x46\xf1"
- "\x41\xbc\x78\x73\xaf\xf0\x45\x30\x7c\x20\x05\xfc\xf3\xed\xdf\xfc"
- "\x88\xa9\xb1\xec\xc8\x4b\xd1\x67\x28\x8a\x97\xd6\x3d\x7e\x78\x0e"
- "\xde\xa4\xbe\x14\x7d\xb7\xe9\xe2\x3e\x39\x5f\x9f\xf5\x66\x11\xab"
- "\x29\x8a\x67\xe6\x11\x11\xc4\xaf\x7d\xa2\x4f\xaf\x8e\x54\xd1\xd9"
- "\xb9\xe7\x68\xad\xa8\x91\xbe\xef\x36\x99\x7d\x46\xff\xfc\xa6\x5f"
- "\xec\xa1\xfe\x05\xff\xce\xc1\x6d\xd2\x2f\x7b\xe5\xba\xab\xa6\xf5"
- "\x37\x3b\x26\xcc\x11\xf5\xef\x97\x17\x09\x1e\xe5\x3f\x47\x94\x8f"
- "\x9f\x03\x8e\xbe\xc1\x9b\x61\x58\xfe\x7d\xac\x32\x45\xfa\x26\xf9"
- "\x66\x98\x2f\xfa\x6f\x5d\xde\x52\xec\x17\xe8\xff\x9e\x81\x71\xbf"
- "\xf0\xd5\xae\xd8\xef\x45\x9f\xca\x87\xfd\x04\x56\xfb\xf7\xa5\xde"
- "\xda\x15\x16\xdf\xa6\x78\x35\xb5\xad\x95\xe5\xc8\xdf\xf5\x85\xa3"
- "\xd8\xe5\xc2\xd1\xde\x4d\xf1\xe8\x7f\xad\xa8\x67\x0c\xd3\x46\xaf"
- "\x38\xc2\xcf\x2b\xae\x5d\xf1\x9a\xf4\xfe\x16\xbd\xfb\xd0\x4f\xc6"
- "\xb0\x63\xf8\xfe\xaf\x3e\x16\x00\x1f\x0c\x7b\x9c\xde\x23\x55\x7c"
- "\x5e\xa5\x11\xfb\x25\x89\x54\x76\xb9\xcc\xbc\x7f\x46\x63\x44\x83"
- "\x65\x7b\x13\xe4\x70\xea\x37\x08\x1f\x1e\x56\x22\x8f\xc5\x5e\x16"
- "\x83\x70\x47\xfe\x22\xf3\x40\x9c\xcf\xbd\x02\xfb\xe1\x6f\xb6\xfb"
- "\xe8\x6c\xf4\x1d\x37\xdf\xc9\xd4\xbf\x68\x22\x9b\x95\xee\xe5\xb6"
- "\x10\xc4\x77\xa7\x37\x67\xcb\xfc\xa4\x75\x04\x64\x4b\x51\x6e\xf1"
- "\x39\x0e\x18\x25\xec\xc0\x9b\x59\x01\xfd\xc3\x3e\x92\xb5\x1d\x8e"
- "\x48\xfb\x6c\xe9\x76\x88\xf7\x5f\x1e\x11\x75\xe5\xcd\x9d\x32\x2c"
- "\x86\x89\xfd\x7e\x2c\x39\xc5\x9b\x3c\x30\xc1\x74\x3f\x3b\x8f\x32"
- "\xca\x92\xe0\x8e\xfa\xeb\x94\xd0\x37\xbc\xcf\xa6\xfe\x35\x7d\x7f"
- "\xa4\xe7\xc6\x61\xd6\xc2\x6e\x6b\x60\x8c\xda\x2b\x6a\x3f\x0d\x13"
- "\x00\x3a\x9d\xd4\xb7\x7a\x4b\xd7\xda\xe0\x04\x2e\xe7\xe8\x15\x7b"
- "\xfb\x59\x21\xa0\x4f\x19\xb2\x2f\x41\x69\x10\x3e\x99\xf7\x93\xb0"
- "\x5e\xf8\xb0\x5e\x60\x9a\x7d\xa4\xd7\xdb\xae\x50\xff\xe5\xad\x9d"
- "\x6d\x15\xbd\xb4\x57\x3f\xea\xeb\x5b\x3b\x89\x87\x54\x0f\xf6\x99"
- "\xf9\x3a\x48\xde\x4e\x5a\x37\xce\x22\x1c\xcf\x8e\x75\x83\xb6\x13"
- "\x5b\x08\x94\x8b\xdb\xb4\x0d\xa2\x2e\x20\xbc\xb6\x0c\x74\xd4\x87"
- "\x0d\x6e\x43\x42\xb7\x1f\xfd\xfa\xa2\xac\xfe\xda\x22\xa3\xcb\xfc"
- "\xd6\x49\xb4\xfd\xc3\xee\x9f\xb8\x63\x1c\xfa\x35\x08\x67\x99\x40"
- "\xdf\xaa\xdf\xea\xbd\x1e\xac\xbc\x36\x97\x74\x65\x66\x2c\x8d\xa7"
- "\x14\x65\xf1\x6f\xde\xd1\x45\x46\x31\x6e\xf9\xab\x78\x39\x3d\x8d"
- "\x7b\xd2\xbc\x82\xea\x6b\x10\x5b\x3d\xd8\x57\xfc\x55\x86\x90\xd1"
- "\xaf\x32\xe4\xfe\x45\xa8\x7c\xca\x5a\x98\xaf\x72\x2a\xa8\x6d\x06"
- "\x07\xcc\x70\x43\x44\xe3\x6b\x00\x96\xff\x45\xdc\xdb\x80\x47\x55"
- "\x5d\xfb\xc3\xfb\x4c\x86\x10\x30\x64\x26\x31\xe0\x88\x41\x06\x0d"
- "\x36\x6a\x80\xa8\xd8\xa2\x7f\xac\x51\xa0\xc5\x0a\x26\xb5\xd8\xc6"
- "\x16\x3b\x41\x12\x4c\x90\x8f\x31\x04\x18\x62\xc8\x17\xdc\xfc\x53"
- "\x0b\x61\xc0\xc0\x45\x09\x10\x7b\xb1\x2f\xde\x8b\x10\x5b\x6c\x63"
- "\x8b\x30\x40\xd4\xa8\x21\x93\xda\x68\x83\x17\x75\x88\x01\x23\x0d"
- "\x30\x92\x81\x0c\xc9\xcc\xd9\xef\x6f\xed\x7d\x4e\x66\x82\x09\x2d"
- "\xbd\xf7\x79\xdf\x3c\xcf\xe4\x9c\xbd\xcf\xfe\x5c\x7b\xef\xb5\xd7"
- "\x5a\x7b\xed\xb5\x0a\xb8\xff\xc5\x02\xcc\x23\xc0\x98\x1b\xfe\xb3"
- "\x81\xf4\x2f\x76\x62\x8f\xae\x54\x19\x8b\x40\x5b\x5e\xbc\x84\x3a"
- "\x8b\x64\x3a\x2e\xed\xaa\x59\x90\xce\x87\x67\x3c\xf0\x08\xab\x2a"
- "\x62\x51\x55\x2a\x33\x3a\x8b\x58\x02\xe2\x40\x57\xfc\x57\x8b\xce"
- "\x0b\x0c\x78\x2e\xbc\x03\xf8\x11\xf5\x96\x16\xf1\xc0\x11\xf0\x77"
- "\x65\x2a\xf7\xff\x33\x70\xf7\xb0\x3d\x93\x65\x1f\xf7\x4c\xd6\x79"
- "\x03\xbc\xa7\xf6\xbf\x63\xbd\x27\xe9\xca\x33\xe6\xa7\x97\x2e\xcd"
- "\xb7\xe5\x65\xd3\x23\x69\xfc\xf2\xdb\xaf\xa4\x15\xa3\xa5\x3f\xaa"
- "\x3d\x19\xb4\xb6\x88\x7e\x92\x77\x95\xf6\x6c\x0d\x93\xf7\x90\xcc"
- "\xf9\x41\xa2\xfb\x48\xd7\x04\xdf\xf6\x1f\x16\x57\x07\x98\x72\x32"
- "\x8a\x19\xae\xac\x6f\xc1\xbc\xfc\x79\x8b\xee\x97\x6a\x0d\x03\xd4"
- "\xd3\xd0\xbf\x9e\xd7\xfb\xce\x7f\x35\xde\xdc\x27\xf0\xe3\xc6\xcf"
- "\x53\x79\xec\x11\x8f\xdc\xeb\x5e\x4f\xd4\x75\x07\x07\xb6\xe9\x62"
- "\x33\x06\x37\x6d\xcf\xa4\x35\x52\xbc\x9a\x19\x7e\x5f\xd0\x6a\x20"
- "\xbe\xa4\x08\xef\xa4\xcb\x25\xe4\xdf\x9a\xaf\xc8\x83\x17\x5a\xb1"
- "\x97\xbe\xee\xe0\x1b\x6d\xe0\x39\x5e\xb7\x0f\xa6\xbf\x15\x7e\x1f"
- "\x5e\x9e\xdd\xbf\xee\xbc\x8a\xae\x97\x48\xaf\xeb\x69\xf4\xcf\xb7"
- "\x77\x88\x1c\xb3\xd7\x31\xff\xff\xb3\x46\x9f\xbf\x7a\x9a\x0d\xa3"
- "\x74\x1f\x9c\xaf\x0f\x6a\x07\x99\x3b\x73\x33\xe5\x1c\xdf\x3b\x43"
- "\x9c\x51\x8f\x66\xff\xb7\x8d\xed\x7d\xc8\x68\x61\x16\xbc\xff\x3f"
- "\x78\x17\x32\x0c\xfa\xd6\x6f\x1e\x8d\xe9\xac\x31\x02\xe3\x00\xf3"
- "\x28\x5c\xfe\x81\xf0\x93\x7f\x11\xf8\x19\xb8\x22\x6e\xad\x44\x60"
- "\x04\x87\x46\x1a\x99\x29\x26\x3a\x6a\xec\xcd\x09\x96\x07\xbf\x3f"
- "\x75\x4a\x71\x51\xa1\x83\xab\x01\xbf\x89\x87\xfb\x4d\x3d\x52\xf1"
- "\xc4\xed\x25\x92\x7e\xd8\x78\xa4\x62\xa0\xb6\xae\x2f\xe3\x76\xe2"
- "\x69\xd5\xb8\xe3\xb5\xc5\xcb\x99\x61\x5f\x8f\xc7\x40\x3c\x14\xd1"
- "\x30\xee\xc0\x67\xe0\xc5\xf7\xfe\xe5\x10\xe2\x00\x2f\x07\x77\x1e"
- "\xaf\x95\x77\x92\xf6\xc5\xaa\x9b\x8e\xd7\x86\xca\x37\x32\x2a\x1f"
- "\x7c\xba\x61\x57\x51\x87\xc1\x6d\xfc\x3e\x73\x5b\x7d\xec\x10\xde"
- "\x07\x1c\x2b\xd4\x49\x32\x61\x2a\x03\x7b\x70\x45\xf1\x65\xec\xcd"
- "\x0e\x71\x3e\x63\x38\xc7\xf6\x3d\x52\x3b\x48\x3e\x71\xc6\x1a\x97"
- "\x1d\xd9\x5d\xb6\x0f\xf8\xff\xe9\x44\x8d\x0f\x01\x9f\xb4\xaf\x4a"
- "\xdf\x0f\xf0\x7d\x88\x3c\x27\xda\xb7\x5b\x4f\x33\xe0\x18\xbd\x40"
- "\xba\xce\xdc\x45\xf3\x80\x5f\xea\xe8\x20\xdb\x8b\x83\xcc\x95\xe9"
- "\xa0\x51\xc6\x10\x6e\x1e\x51\x6a\x8e\x8c\x29\x4d\x59\xdc\x08\xda"
- "\x68\x44\xe7\x48\x16\xe3\x7b\x8a\xda\x4c\xfa\xf6\xcd\xdb\xc1\x73"
- "\xd2\xf9\xb0\x49\x49\xc9\x35\x95\xa6\xcc\x0b\x96\x4d\xbd\x87\x68"
- "\x28\x93\xe3\x11\xc5\x14\x78\x48\x09\x94\x4d\xbe\x67\xa7\xf4\x55"
- "\xe4\x73\x8e\xe2\xad\xc8\x73\x02\x79\x3c\xf8\x91\x5f\x92\xc6\xd3"
- "\xac\x36\x17\xcf\x06\x93\xc2\x77\x9a\x30\x92\x93\x4a\x84\xef\x56"
- "\xda\x9f\x1b\x79\x1c\x78\xbb\x5e\x21\x83\x1b\x12\x92\xc1\xd5\xae"
- "\xc3\xb8\x45\xce\xfa\x37\x7e\x08\x65\x35\x04\x2f\xa9\x0d\x3b\xce"
- "\x11\x3e\x14\x7c\x55\x0b\x70\x40\x4b\x72\x15\xb3\x68\x3a\xd3\x86"
- "\xc6\x40\x03\xed\xc3\x64\x73\xa0\x1e\x75\x1e\xc0\xaf\xce\xba\x84"
- "\x45\x9c\x63\xb5\x9f\xe9\x3a\x57\x92\xae\xfb\xdd\x13\x9a\x1c\xc0"
- "\x35\x11\xf9\x57\x2f\xa6\x39\xd1\x61\x08\xa0\x7c\xf0\xda\x0d\xee"
- "\x9c\x06\xa1\xc3\x46\x77\x12\x28\x0d\xea\x48\x72\xfb\x1b\x98\xca"
- "\x2d\x06\x84\xeb\xe8\x7e\x01\x47\xda\x26\x47\x2b\x6b\xb2\xfb\xb1"
- "\x6f\x36\x82\xf7\x4c\x4a\x44\x7b\x44\x79\xf8\xde\xb2\x0f\xe3\x6b"
- "\x05\xcf\x80\xf2\x9a\x49\x27\x8e\xee\xee\xf3\x65\x49\xb7\x21\x7f"
- "\x3d\xef\xb5\x18\xa8\xfc\x73\xec\x8d\x53\xbc\x2b\x29\x69\x52\xa7"
- "\xf4\x65\xda\xc6\xde\x38\x80\x76\xde\x1c\xd6\xce\x19\x68\xbf\x11"
- "\x7b\xa5\x0b\x65\x1e\xe0\x2b\x50\x67\x3b\xea\xf4\x79\x49\xff\x33"
- "\x91\xaf\xb4\x18\xa9\xcd\x4d\xd4\x5e\x47\x90\xf1\x95\x49\xc6\x0d"
- "\x17\x98\x11\x6b\xc1\xb5\x13\x4f\xf4\x7f\x3f\xe8\xfa\x84\xee\xb2"
- "\x37\xfa\xec\x3f\x10\x1d\x89\xb0\x47\x9f\x4b\xeb\x91\x06\x6d\xac"
- "\x43\xbb\x0e\x8c\xe8\x64\x24\x5b\x18\x82\x79\x3a\x04\xf5\x0e\xc5"
- "\x58\xd5\x01\x76\x87\x01\xeb\x03\xd4\x27\xf5\x92\xda\xa1\xa2\xbc"
- "\x0d\x97\xd0\xa6\x65\x16\x63\x74\x3b\xf9\x79\xef\xe6\x80\x77\x4b"
- "\x9a\xa3\x9b\x93\xbe\x38\xe9\x5e\x23\xcf\x76\xf4\x15\xb8\xec\x77"
- "\x85\xc4\xe7\x9f\x66\x6f\xac\x95\xbe\x58\xdf\xa8\xd0\xce\x92\x5b"
- "\xa4\x7c\xb7\xf6\x33\x82\x3d\xf5\x2b\xba\xd4\x5c\xee\xee\xf0\xb2"
- "\xe8\xf6\x91\xa0\x59\xde\x60\xd5\x2a\xd1\xa7\xbf\xab\xd0\xdb\x39"
- "\xc8\x1a\xf3\xbb\x81\x5f\xd4\x4b\xbc\x83\xf8\x17\xa9\x67\xf6\xbb"
- "\x03\x36\x47\x44\x2a\x78\x15\x03\xda\x49\xf7\x98\x46\x81\x46\x7b"
- "\x90\xf4\x10\xd1\x3e\xec\xd9\xbf\x3b\x71\x35\x1f\xc8\x80\x0f\xe8"
- "\x82\xdf\xa3\x0d\xbf\x13\xf2\x54\xf2\x11\x2b\x65\xac\xbf\x8f\xd7"
- "\xed\x70\xf0\x4b\xbc\x90\xf6\x5e\xd4\x5b\xb2\x76\x85\xa8\x83\xfc"
- "\xe2\x76\xe4\x5b\xf9\xc9\x7a\xab\x77\x50\x5b\x07\x61\xfa\x73\x5e"
- "\xcd\xd7\x9e\xd0\x25\xe8\xaf\x3f\xf7\xfb\xc2\x30\x79\x0d\xe9\x13"
- "\x94\x90\xce\x84\xb4\x97\xf4\x7b\xa1\x13\x98\xe6\x90\x76\x61\xdc"
- "\xfe\x4e\x8d\xef\xf8\xfd\xfb\xc2\xff\x16\xd1\xb4\x42\xe7\xee\x8c"
- "\xa6\x27\xf7\xfb\x79\x54\x47\xfd\x15\x3e\xbe\xb3\x97\xcc\x7b\x7a"
- "\x51\xb6\x14\x61\x4e\x58\x98\x3f\xef\x99\xfe\xbc\x91\x51\xf0\xe2"
- "\x65\xbf\x6f\x91\x67\x02\xfb\xa3\xc3\x78\x04\x63\x9f\x4c\xd7\xc0"
- "\xf6\x4b\xb9\xee\xfe\xe4\x81\xe4\xba\x8f\x3c\xb3\x64\x69\x9e\xa8"
- "\x43\xa8\x14\x66\xcb\x5b\x81\xc3\xd9\x13\xd3\x1f\x99\x3e\x61\x59"
- "\x76\xbe\x70\xaa\x23\x85\xa8\xf3\xb2\xb2\xf2\x34\x85\xc3\x5c\xca"
- "\x45\x5f\x16\xac\x14\x59\xed\xcf\xe6\x4b\x55\xc5\x65\x8b\xe6\xad"
- "\xc8\xd6\x8a\x08\x6f\x6b\x02\xe1\xcb\xfa\x6a\x21\xab\x1a\x2e\xf5"
- "\x23\xf6\x1f\x08\x3b\x4f\x0d\x97\xdf\xdc\x88\x6f\x7d\xe7\xff\xf6"
- "\x5b\x68\xae\xbc\x99\xdb\x54\x23\x6c\x99\x18\x8f\xfe\x86\xe0\xfb"
- "\xe6\x0c\xf2\x03\x81\xbd\xad\x84\xfc\x16\x6b\xba\x07\xc0\xd7\x6f"
- "\x8e\x03\xaf\x55\x02\xf8\x3a\xd2\x82\x2a\x07\x4e\x05\x9f\xfe\x56"
- "\xbc\x26\x13\x89\x52\x0d\xfb\xa7\x90\xde\xd8\x0e\x21\xbf\x7b\x73"
- "\x6a\x48\x7e\xf7\x16\xe9\xf4\x44\x61\xbc\xdb\xa9\x6d\xd4\x4e\x7c"
- "\x9f\x1b\xa6\xb3\xd3\xee\x01\x18\xa9\x1c\xd2\x2d\x11\x3e\x5a\x40"
- "\x13\x6b\xf6\x20\x0c\x4d\xbf\xa1\x7d\xe8\x8f\x6b\x09\xe7\xaa\xce"
- "\x5c\x87\x5c\x33\x7f\xd8\xce\x37\x65\x0f\x9d\xe4\x63\xf1\x12\x67"
- "\xbc\x49\xbc\xf8\xf5\x68\x63\x3d\xe2\xa3\x80\x77\x86\x10\x6d\x24"
- "\xcf\xa8\xde\xfc\x5a\x93\xe7\x11\x7c\x86\x84\xb5\xc1\x13\x92\xf9"
- "\xbd\x15\xef\x8d\xcd\x75\xac\x95\x3a\x39\x42\xff\x40\xea\x80\xfc"
- "\xc1\xd8\x27\xe3\x42\xdd\xda\x99\x7b\xfc\x69\xa4\x07\x2c\x1c\xda"
- "\x39\x38\xf5\x3d\x9d\xfa\x2d\x75\x29\xff\xd0\x8f\xff\x91\x3e\x31"
- "\xb2\x87\xaa\x52\x5f\x96\xda\x9e\x2d\xe8\x28\x92\x2f\xf6\x10\xbc"
- "\xff\xb0\x0a\xdf\xb1\xd7\xfd\xc1\xee\x61\xbf\xef\x6b\x0f\xb5\x39"
- "\xdf\x01\x62\x00\xf9\x68\xef\x43\x9b\x86\x22\x4d\x55\xa8\xcd\x7f"
- "\x10\x67\xa3\xc4\x53\x4a\x1a\xe4\x8f\x51\x52\xce\x9b\x5b\x11\x36"
- "\x6e\xc6\x73\xec\x0f\x5f\xa3\xad\x15\x6b\xa4\xee\xcb\x10\x5d\xa7"
- "\x04\x65\xf5\xeb\x7f\x48\x06\xbb\x7f\x89\x94\xc1\xfe\x91\x85\xc6"
- "\xf0\x0f\xf5\x34\xef\x49\x6f\x48\xd7\x19\xa2\xf1\x94\xfe\x42\xfe"
- "\x98\xa4\x97\xa3\xc6\xe5\xe6\x10\x9f\x5c\x29\xcf\xbf\x31\x2e\x7f"
- "\xcc\x8d\x50\x4e\x0a\x5a\x6a\x92\x9f\xd5\x20\x2e\x12\x71\x4f\x51"
- "\x3a\xaa\x53\xc8\x2a\x01\x1b\xea\x8b\x0a\x1e\x2b\xc2\x12\x99\x86"
- "\xf2\x30\xaf\xf6\xb4\x84\xe6\xc6\x1f\x53\x05\xbe\xd4\x60\xcd\xcb"
- "\xf6\xaf\x09\xf1\xee\x7f\xdc\xd5\x27\x77\x43\x39\xa1\x3d\xe3\x8f"
- "\xef\x13\x8c\x37\xf4\xc9\x20\xea\x02\xa2\x1d\xf2\x3c\xf5\xc8\x69"
- "\x56\x77\x96\x83\xbe\xa0\xbd\x96\xf8\x43\x1a\x7b\x41\xef\x09\xf9"
- "\x59\xdd\xab\x3b\xe4\x99\xc5\x16\xbc\xbf\xa6\x1a\x06\x9a\x3b\x75"
- "\x09\xe1\xfa\xbd\x12\xfe\x75\x59\x2a\x95\x89\xfe\x53\x59\xd8\x7f"
- "\x14\x5d\xae\xa9\x95\xfb\x04\xca\xfc\xf7\xd3\x1a\xac\xc5\x59\xde"
- "\x26\x0d\x0e\x34\xc6\x02\xe6\x75\xf9\x98\x03\xc2\x67\x5a\x71\x0d"
- "\x3f\xbb\x14\x65\x48\xdf\xba\x75\x55\x9c\x60\xab\xa5\xf7\x12\xff"
- "\x8d\xb6\xcb\x3b\x91\x98\x8b\xe0\x4d\xa9\x9d\xea\xa6\x5c\x3b\xb5"
- "\x9d\xce\xf1\x42\x32\x95\xba\xf7\x29\xaf\xf7\x79\x99\x67\x83\x3c"
- "\x67\xc4\xd8\xd4\x29\x7c\x65\x0e\xd3\xce\xb7\x30\xcf\xff\x40\x7e"
- "\xd7\x0c\x54\x8e\x4f\xf0\xcc\x75\x1e\x15\x70\xc1\x98\xc4\x75\x97"
- "\xbd\x15\xad\x8f\x09\xc6\xa3\xe1\x2a\xf4\x36\xc6\xe4\xad\x29\xba"
- "\x6d\x25\xda\x9b\xb0\x86\x4b\x24\x2d\xf9\xd6\x65\x53\xe9\x83\xdc"
- "\x14\xb8\xe7\x1e\xa2\x8d\x76\x1a\x84\x2c\x54\xd7\x5f\x1d\x0b\x38"
- "\x9d\xd7\xef\x02\xa8\x6b\x7e\xd1\x4a\xba\xbf\x6e\xbf\xd4\xfd\xa5"
- "\xf8\xc7\x7c\x5c\x6d\xf2\x05\xe9\x2e\x4c\x2b\xea\xa8\xd6\xf9\x2c"
- "\xc2\x6f\x11\xa5\x0a\x60\xf7\x16\xdd\x7f\x3c\xa0\xe1\xb5\xa1\x67"
- "\xd8\x5b\xc7\xb5\xf2\xc3\xdb\x30\x47\x9e\x29\xbe\xe5\x97\xb4\xff"
- "\x5b\x84\x7b\xaa\x24\xbf\xf6\x96\x57\x6f\x37\xbe\x1f\xb8\xb2\x8f"
- "\xe9\xd3\x1e\xc9\xb6\x2e\x22\x14\x9d\x72\xb7\xc3\x9a\x34\x3e\x6b"
- "\x92\x50\x16\xb7\xfe\x60\xda\xfd\xd6\xf4\x07\xc6\x3b\x72\x92\x1f"
- "\x93\x8f\x69\xe9\xb3\xe8\x79\x85\xee\x80\xb5\xbb\xec\x4f\xe9\xfd"
- "\xf9\xc1\x43\x5a\x1b\xfe\x94\xe3\x51\x7e\x24\x64\x17\xdc\x6c\x4b"
- "\xe5\xce\xd9\x25\xd8\x53\x3b\x89\x4e\x4e\x0b\x7e\xc1\xf9\xc6\xd9"
- "\x25\x3c\xd6\x96\xea\x8d\x3d\x52\x81\x5f\xba\x37\x36\x3b\x79\x03"
- "\x70\xa0\xa9\x94\xfb\x4d\x81\xa1\x12\x57\x22\x0c\x9a\xa4\x03\x74"
- "\x0f\x8d\x25\x9b\x71\x7b\x31\x4f\x0b\x72\x37\xe8\x1f\xc0\xe5\x4f"
- "\x0d\xfa\x3e\x2e\xe4\x98\x4e\x5b\x6a\x9a\x83\xf7\xd2\xdc\x01\x7d"
- "\x40\xf7\x69\x53\x49\x96\x89\x74\xe8\xff\xbe\x14\x09\x8b\x3f\x11"
- "\x0c\xac\x1a\x7c\xd3\xbb\xcb\xfe\x8c\xf1\x4f\x13\xb2\x67\xb5\xcc"
- "\x22\xf6\x0a\x75\xcd\x1d\x8f\x83\x17\x48\xd7\xcb\x44\x59\xd1\xda"
- "\xdd\x32\x51\x1e\x0b\xb3\x4d\x70\xb5\x9f\xba\x29\x73\x0e\xc9\xad"
- "\xe8\x5e\xb0\xc9\xa1\x90\xff\xad\x8c\x3e\x59\x1d\xbe\xc5\x94\x9a"
- "\x49\x7e\x97\x11\xe3\x53\x4a\x28\x4d\x48\xa6\xa5\x7a\x36\x18\x54"
- "\x3f\xe8\x09\x33\xcd\x0f\x41\xab\x0a\x7d\x8a\x3f\xd7\xf5\x9d\xcf"
- "\xf5\x1b\xfb\x3f\x8b\xf9\x70\xa1\xcc\x88\xb9\xfd\xa7\xd4\x5b\xe2"
- "\x25\xed\xa4\x96\x29\x4c\xda\x8a\xf8\xf3\xeb\x62\x5d\x6a\xf3\x11"
- "\xf0\xf5\xd2\xd9\xb9\x29\xc0\xbd\x74\x4f\x45\x8d\xc0\x9c\x64\x67"
- "\x98\xbb\xb0\xbb\x84\xee\xab\xf7\xcd\x4b\x3b\xe6\xa5\x1d\xf3\x92"
- "\xf4\x1c\x50\xbf\x37\xe2\x8e\x4c\xac\x59\xe5\x0c\xfb\x73\x21\xb5"
- "\x9f\x60\x03\xfa\x3d\x5a\x05\xac\x84\x3e\x2b\xc1\x27\x6e\x5e\x0b"
- "\xdd\x33\xa4\xbe\x9a\x02\xe8\x73\x78\xbf\x0c\xaa\xa7\xb2\x0c\xfd"
- "\x32\xa0\x5f\x8e\xb3\x42\x16\x44\xf7\x3f\x81\x4b\x46\x85\x7c\xb8"
- "\x1c\xa8\x0e\xef\xa3\x4a\x7e\x9f\x44\x1f\x0e\xbc\x3d\x50\x1f\xb9"
- "\x81\xfa\x48\x30\x38\xb0\x51\x3b\xe7\x14\xed\x24\xbc\xd5\xc9\x0e"
- "\xa4\xc7\x94\xd2\xbd\x4b\x5b\x2a\xe8\xde\x69\x34\x86\x3b\xca\xb8"
- "\x93\xda\x39\xd0\x78\x51\x79\xb2\xac\xb7\xe7\x9a\x4a\x4b\x32\xbb"
- "\xcb\xde\x4e\x1a\x18\xde\x6f\x3f\x72\x75\x78\xbf\x3d\x86\xf2\x53"
- "\x3b\xe8\x0e\xa9\x89\x0c\x8c\x61\x7e\x83\xae\xa8\x18\xa8\xde\x98"
- "\xd2\x1a\x6a\xd7\x80\xdf\x30\xf7\x3b\x37\xe4\xf5\x5f\x13\xea\x0e"
- "\x3f\x23\xf8\x91\xbc\x48\xca\xf5\xdf\x6e\xee\x3b\x7f\x70\xda\x72"
- "\x4c\x8a\x35\x82\xd6\x98\xa0\x89\xd1\xdf\x81\xca\x35\x29\x4e\xb2"
- "\x51\x38\x0d\xb8\x6a\xc0\xef\x58\x07\x56\xbe\xe6\xce\x5b\x50\x5e"
- "\x72\x4c\xa9\xc2\xbd\x11\x77\x0e\x8f\xf1\x05\x12\x09\xae\x68\xab"
- "\x03\x6b\xfc\x94\xd8\xbb\x85\xac\xe4\x20\xd6\xff\x87\xc2\xef\x8e"
- "\x37\xd6\x96\x2c\xf5\x82\x0e\x66\x79\xd8\x5f\xc3\x7c\xa1\x1e\xcc"
- "\xf7\x28\xdf\xa9\x90\x6b\xf5\xa6\x97\xf9\xa6\xac\x76\xb5\xcc\xc4"
- "\xad\x05\x26\x8e\xb2\x46\xa8\x3c\xc9\xc0\xe3\xb2\xda\x43\x73\x47"
- "\xde\x53\xd5\xe7\x0e\xf2\xef\x1f\x78\x5e\x1c\xfc\xf8\xea\xf3\xe2"
- "\xe0\x6b\x9a\x9c\x37\x53\xea\xde\x1e\x0c\xe8\x3c\x07\x5f\x73\xd3"
- "\xcb\xd6\x22\xaa\xff\xa0\x53\xd6\x0d\x98\x04\x52\x09\xcf\xcc\x02"
- "\xdc\x4a\xba\xcb\x0e\x25\xe9\xb8\x81\xe6\x90\x29\x48\xfc\x10\x13"
- "\xf3\x1c\xdf\xa6\x03\xf7\x68\x67\x84\xd9\x2d\x44\xab\xaa\x65\x7f"
- "\x32\x62\xff\xda\x46\x77\x4f\x7c\xb1\xb6\x3d\x48\x03\xfc\x67\x9c"
- "\xa9\xe1\xbf\x5d\x28\x63\x77\x95\xb4\x43\x11\x25\x7c\x06\x62\x9d"
- "\x93\x9f\x40\x5a\xeb\x88\x8b\x47\xbb\xc9\x67\x20\x78\x84\x43\x35"
- "\xfa\xde\xaf\x96\xa5\x12\xbc\x85\xcc\xd8\x40\xf4\x30\x60\xb7\xd9"
- "\xa0\xee\xbe\x34\xc9\xc2\xa8\xcf\x97\xd6\x8c\xde\xfd\x7f\x27\x32"
- "\xe3\xbb\x96\xa7\x99\xfd\x6e\x16\x5f\xfa\x5d\x23\xfb\xfb\x14\x66"
- "\x20\x38\x78\xd8\xa1\x5a\x09\xbb\x43\x5e\x7d\x7c\x3c\xec\x60\x06"
- "\x8d\x07\x9d\xcb\xa4\x05\x78\x97\x3c\x97\x72\x99\xb1\x07\x5a\xe4"
- "\xf7\x3f\xcd\x1d\x60\x7f\x98\x61\xcd\x5d\x66\xcd\x5a\xba\x72\xc9"
- "\xb8\x71\xc3\x07\xe0\x25\x5c\x89\x92\x97\x70\x65\x84\xf3\x12\x08"
- "\x63\x4f\xff\xd3\x94\x2b\x79\x87\x59\x36\xcd\xbc\x88\x2d\x85\x85"
- "\xde\xef\x62\xb3\xee\x0a\x0b\xde\xc3\x66\xdd\x7d\x8f\xed\xf1\xec"
- "\x79\x59\xab\xc2\x62\xef\x0d\x97\x23\x6e\x78\x19\x75\x47\x8c\x7e"
- "\x18\xf8\x43\x79\xec\x79\xda\x77\x0e\xcf\x2e\x0a\xf0\xaf\x30\x77"
- "\xa7\x90\x4d\xaf\x63\xf9\x01\x76\x0c\xf8\x8d\xdf\x44\x78\x7d\xa8"
- "\xb4\x6b\x1b\x64\x24\xa7\x33\xa1\xef\x5e\xf0\x74\x17\xe5\xdd\x8b"
- "\xc3\xcf\x35\x6d\xf5\x03\x4f\x64\x4f\x96\xf4\xce\xe1\x64\xc4\xc7"
- "\xe2\xf9\x84\x3c\xd3\x39\xfc\x24\xf8\xe5\x54\x61\xc3\x64\x05\xd9"
- "\x30\x39\x2c\x74\xc3\x26\xfa\x4a\x98\xb4\xa5\xe7\x6a\x27\x1b\xf7"
- "\x1e\x76\xb8\x8a\xe8\x0b\x4a\x8b\x3c\x13\xac\x0b\x59\x0a\x3d\x89"
- "\x1e\xc6\xb7\x64\xbe\x31\x7b\x32\xdf\x96\x41\x3a\x35\x89\x88\xdf"
- "\x48\x74\x5b\x84\x25\x2a\xba\xbb\xec\xb0\x53\xa7\x41\x7c\x83\xdc"
- "\xfd\x22\x38\xeb\xfb\x60\x0c\xf0\x77\x8c\xcf\xc4\x6d\x64\x13\x48"
- "\x61\x89\xb4\x3f\x98\x1c\xe9\xe2\x6e\x21\xed\x8b\x84\x13\x76\x08"
- "\x5c\x7a\xb8\x43\xc7\x0b\x95\x92\x1f\x1d\x4e\xf9\xb1\x7f\x9e\x97"
- "\xfb\xe7\x91\x28\x7d\x2d\xe0\x3d\x5e\x9f\xab\xfd\xee\x97\x2d\xc9"
- "\xcf\xce\xcb\xce\xb2\x8e\x5f\x36\x9c\x85\x79\x60\xcd\xc9\x5e\x62"
- "\xcd\xcb\x7e\x6e\x79\xf6\x32\xc1\xe8\xd1\xd7\xfe\xe7\x6f\xc0\x41"
- "\x21\x7f\xd8\xa3\x09\xc6\x47\x56\x11\x2f\x6c\x2a\x1d\x27\xce\x52"
- "\xe4\x19\xd8\xf1\x06\xb5\x72\x44\xaa\x94\x5b\x9e\x01\x5c\x8f\x4a"
- "\x7b\x5c\xce\x6c\xc2\x33\x80\xeb\xd1\xf5\x52\x57\xe6\xc8\x3b\x1a"
- "\xac\xaa\xd0\xce\x03\x21\x7a\xad\x5e\xd8\x1d\x92\x3a\xab\x47\x5a"
- "\x3c\xcc\xb5\x3f\x44\x83\xd4\x3f\x40\x78\x50\xe0\xc3\x7f\x80\x0b"
- "\x35\xda\x19\xf5\x1c\x2d\xe5\x2b\x78\xfb\x86\x1e\x26\xe4\x81\xe4"
- "\x1b\x41\xe2\xd7\xa3\x29\x3a\x1c\x41\xbf\xb4\x93\xdc\x41\xe7\x8f"
- "\xd2\x02\x97\x79\xd1\x2a\x66\x20\xd9\x03\xe8\xee\x29\x7b\xf3\xbc"
- "\x06\x5e\x76\xc4\x0a\x5a\x26\x91\xd2\xec\xd0\x74\x37\x79\x6c\x36"
- "\xe8\xa4\xa3\x8e\x10\xdf\x51\x3f\x55\xd0\xf1\x3d\x34\x6f\x8e\x26"
- "\xd8\x68\x8f\x90\xb8\xfb\xba\x7f\xd4\x5e\x3e\x5c\x9e\xa3\x48\xfc"
- "\x76\xb4\x4e\xeb\x43\x27\xe1\x2c\x4d\xf7\xd7\x20\xe7\x75\xfd\x54"
- "\xcc\xb9\x44\x1a\x0b\xe0\xf9\x0a\x1d\x5e\xd4\x5f\x6a\x3b\xc9\xad"
- "\x81\xbb\xa6\xec\x2b\xf0\x1b\xa4\xef\xd2\x23\xc9\x92\x3f\xaa\xb7"
- "\x86\x9f\x1b\x4a\x5e\xa8\x7e\x72\xc8\x4e\xc8\x91\xaa\x2b\x71\xc4"
- "\xd2\x25\x74\x9d\xec\x59\xdb\xca\x79\xcf\x66\xdb\x96\xdb\x93\xad"
- "\xcb\x97\x88\x63\x5b\x21\x06\xc8\x5f\x3e\xff\x59\x2b\x61\x11\xdb"
- "\xf4\x59\xb3\x6c\x0f\x3f\xf1\x93\x27\x87\xb3\x87\xe7\x21\x2e\x7f"
- "\xa9\x75\x56\x4a\xb2\xfc\xf4\xf8\x8c\x69\x3f\xb5\x4d\x4b\x7b\xe2"
- "\xb1\x39\x03\xe8\xa4\x47\x63\x4e\x58\x31\x46\x43\xda\xd8\xbb\xeb"
- "\xa4\x0e\x52\x7d\x43\x7f\x1d\xa4\x7a\x0f\x7e\xc0\xce\xef\x58\x18"
- "\x7b\x17\xb1\xef\xae\xc3\xaf\x44\xce\x9b\x61\x66\xb4\xdf\x17\x9a"
- "\x37\xef\x8a\xf3\x36\x92\x1d\x48\xd9\xeb\x3b\xc0\x7f\x47\x66\x85"
- "\x7f\x0b\xe1\x82\x77\x82\x02\x5f\x6a\xf3\x82\xe6\x83\x2d\x10\x25"
- "\xe6\x86\xa4\x57\xde\x99\xa5\xcf\x8d\x0d\xf2\x7c\x88\x91\xcc\x8c"
- "\xbe\x63\x7e\xef\x27\xf9\x32\xe6\x82\x95\xce\xd6\x29\x9e\xc7\x1e"
- "\xdf\xaf\x95\xbb\x96\xe4\xcd\x44\xcf\x6a\x67\x62\x31\x67\xd8\x3b"
- "\x87\x79\x59\xfd\x4c\xc9\x0b\xd6\xaf\x12\xf3\x66\xcd\xe8\x87\xc5"
- "\x19\xa4\xb8\x4f\xf4\x4e\x5d\x68\xfe\xbc\xbb\x8e\xc6\x86\xf0\x82"
- "\xc4\xbd\xef\xb4\x5c\x21\xc7\x89\x40\x5c\x87\x6e\x67\x3e\x7f\x1c"
- "\x33\x18\xc7\x39\x59\x95\x81\x97\x78\xd8\x3b\x5b\xa5\x1e\xea\xbb"
- "\x51\x3a\xfd\x8c\xf7\x78\x0f\xe3\xad\x57\xca\xbf\x2a\xc3\xe4\x5f"
- "\x45\x76\x7e\xb2\xc9\xee\x25\x1a\xd9\xe5\xf6\x0a\xfb\xa6\x0f\x36"
- "\xd9\x7d\xa4\x5b\x32\xfc\x34\x7b\xf7\xa9\xe2\x20\xef\xc1\xfb\x68"
- "\xf4\x4d\xec\x21\x93\xa4\x4c\x01\xfc\xd8\xbb\xeb\x25\x6f\x22\xe3"
- "\x09\xee\x78\xa7\x36\x1a\x69\x7c\x30\x2f\x3b\x30\x46\x69\x03\xe1"
- "\xbd\x98\x52\x83\x66\x47\xea\xdd\x93\xc4\xa3\x12\xac\x5e\x34\xa8"
- "\x39\x2f\x96\xe1\x87\x27\xe1\xbe\x10\x7d\xc9\xfd\x12\xb6\xef\x7a"
- "\xea\x1d\x9d\xb4\x6f\xfa\x07\xc3\xa5\x18\xcf\x13\xfa\x78\xa6\x05"
- "\xbd\x0f\xd2\x78\x75\x97\xbd\x67\xd1\xc7\xb2\x6b\xe2\x7c\xf0\x5e"
- "\xcc\x7a\xb4\xfa\x6e\x8a\xc7\xfa\x7f\x77\xab\xd0\xed\xa1\xf5\x75"
- "\x45\x5e\xe0\xe1\x54\x2d\x7f\x86\x9e\xff\x4a\xfb\xc4\xe2\x82\x2e"
- "\x09\xb9\xee\x97\x3a\x3e\x9a\x3b\xe9\x7e\x3a\x3e\x74\x06\x58\x2f"
- "\xe7\xa4\x2e\x83\x33\xcb\xfe\x34\xfc\x58\xdd\x04\xfe\x7b\xd3\xdc"
- "\xd1\x9a\x1c\x00\x6b\xfb\xbd\x8b\x13\x19\x5b\xe4\x5b\x99\xd1\x27"
- "\x43\x21\xd9\x07\xd9\x1c\x44\x3b\x3c\x61\x32\xb2\x3e\x1d\x4d\x0f"
- "\x6b\x48\x27\x9d\x31\xba\xb3\x4c\xe5\xd0\xba\x92\x72\x9b\x06\xb3"
- "\x1b\x98\x17\xe5\x2d\x11\xe7\xdf\x65\xef\xe5\x88\xb9\x07\x5e\x5b"
- "\xf0\xf9\x85\xfc\x2b\x4d\x87\x49\xd0\x2e\xf2\x3e\x5e\xc3\xf4\x3e"
- "\x59\x90\xb8\x9b\xf6\x9e\xd0\xcb\x46\xfc\xdc\x81\xe4\x85\xc0\x0f"
- "\x39\xf3\x96\x64\x2d\x5d\xb0\xe0\x1f\xa3\x86\xf0\x33\x2e\x67\x99"
- "\x5a\x81\x32\xc1\xff\xee\xcb\x91\xf3\xb4\x01\xf8\xff\x37\xa9\x92"
- "\x7e\xfb\xc5\xd7\x58\x37\x63\xce\xb0\xf7\x2d\x3a\xfd\x2e\xd7\xd1"
- "\xfb\x89\xbc\xac\x21\x27\xb4\x36\x1a\xbc\xdf\x5e\x1b\xef\x1b\x07"
- "\x5e\x1b\xef\x27\x61\x9f\x3d\x81\xef\x89\xa8\xf3\x84\xc0\xf9\x34"
- "\xde\x92\x06\x77\x99\x02\x0f\x0a\x1a\xdc\xb6\x8a\x29\x44\x7f\x93"
- "\x6c\x9a\xf6\x83\x20\xf8\xda\x20\x70\x84\x2d\xc0\xcc\xb4\x17\x6c"
- "\x58\x42\x72\xc7\xb1\x3c\x70\x89\x7b\x6c\xab\x80\x2f\x10\xae\x3c"
- "\x23\xcf\xe0\x7f\x79\x11\x7c\x08\xde\x37\x9c\x26\x5c\xa1\x92\x33"
- "\x04\x26\xf7\xeb\xf7\xb7\xea\x34\xae\xa9\xd4\x2a\x6c\x64\xd3\xbe"
- "\x1d\x94\xfa\x4c\xb5\xb4\x77\xa3\x9e\xfd\x02\x07\x05\x4d\x74\x06"
- "\xc0\x36\x2c\x44\xb9\xa4\x17\xb4\x84\xda\x17\x71\x8f\x29\x90\x22"
- "\xce\x0a\x76\x2e\x14\xfa\x40\xf7\x48\x7d\xa0\x7b\xd8\x8e\x25\x04"
- "\x87\xf7\xfd\x57\x95\x8d\xc7\x1e\xb1\x87\xc7\x3b\x16\xe4\xda\xec"
- "\x39\xab\x6c\xa4\x0b\x78\xc5\xfe\x2e\xd7\x50\xd9\x07\x09\x12\xbe"
- "\x1f\xa4\x87\x64\x55\x52\x87\x8f\x70\xe6\x24\xbf\xb0\x61\xab\x9d"
- "\xf5\x7c\x38\x99\x60\x5f\x7c\x99\xc2\x51\x98\x73\x1f\x4e\xa0\xb3"
- "\x9f\x2e\xd2\x9d\xd9\x99\xc1\x9c\x65\xdc\x45\x32\x34\xc4\x8f\xd4"
- "\xef\xd4\x77\x21\x1e\x6b\x9f\xe2\x86\x89\xb3\xc6\x7c\x21\x9b\x03"
- "\x9c\x3e\x70\x79\x98\x49\xd3\x75\x9d\x7b\x13\xe9\xe7\x09\x9d\x72"
- "\x41\x67\x7c\x70\x56\xde\xd1\xfa\xa0\x5d\x87\x25\x68\xdf\x29\x74"
- "\xaf\x9f\xf4\x74\xba\x38\xe9\x04\x7e\xc8\xf4\xfc\x1e\xf6\x81\xb8"
- "\x63\xfa\x98\x4f\xbc\xef\xf9\xa5\x2f\xfc\x4e\xfe\x07\x5b\x25\xde"
- "\xfa\xa0\x1a\xf1\xc0\x95\x1f\x94\xa0\xcd\x31\xd2\x46\x80\x28\x67"
- "\xa6\xae\x0f\x15\x0e\xb7\x69\xf3\xec\x20\x96\x73\x17\x2c\xc8\xce"
- "\x5b\xa6\xfb\x94\x4f\x5a\xba\x28\xeb\x01\xed\x0e\xfe\x92\xec\x95"
- "\xb6\xdc\x2c\x71\xc7\x07\xb1\xf2\xf5\x0a\xf8\x26\x13\x7f\x23\xf4"
- "\xe6\x45\x9f\x9a\xc7\xef\xd0\xe8\xa8\x36\xd6\xb8\x5f\xea\x5b\x34"
- "\x2e\x96\x7b\xdb\x75\xff\x81\x76\x34\xeb\x7b\x1b\xc9\x58\xba\xd8"
- "\x7d\x56\x3a\x33\x23\xbb\x0c\x74\x36\x47\x72\x16\xa4\xc1\x1a\xfd"
- "\xa0\xef\xce\xf4\x7a\xc4\xd3\x99\xb0\x6b\x09\x9d\x03\x37\xcf\x50"
- "\x37\xda\x12\x78\xdc\xa3\x0d\xc0\x6b\xd1\x34\x76\x74\x56\x24\x7d"
- "\x78\x34\xa6\x12\xbe\x26\x59\xa0\x6b\x09\xe9\xd3\x36\x9a\x41\x9f"
- "\x60\xbf\x6c\x9e\x09\x5e\x2f\x61\x6d\x01\x8b\xa2\x3a\xb0\x17\x7a"
- "\xa4\x5c\xb9\x71\xee\xe1\x42\xc6\xb4\xfd\xd0\xb3\x5e\xc8\x39\x1b"
- "\x93\xe4\x9e\x6a\x4b\xd1\xe4\x28\x29\x48\xb7\xd6\xc3\x6e\xf5\xca"
- "\x36\x3f\xea\x15\xf3\x44\xe0\xba\xc6\xdd\x7c\xd3\xac\x12\xa1\xf3"
- "\xbc\xe9\x51\xaf\xca\x73\x22\x28\x8c\xbd\x66\x38\xc6\xb1\x99\x17"
- "\x27\x31\x4d\x4f\x3a\xe2\x34\x3b\x76\x17\xc9\x81\x31\x3f\x5c\x04"
- "\x0b\x94\x3f\x55\x2b\x7f\x2a\xca\x47\xbd\xf7\x68\xfe\x73\x1b\xbd"
- "\x7a\x5d\x58\xaf\x5e\xec\xc7\x09\xb4\x27\xa3\xfd\xf1\xf8\x59\xa4"
- "\xcc\xc9\x0f\xde\x6f\x6c\x9f\xcc\x49\xd2\x7d\xc7\x92\xf4\xf5\x42"
- "\x75\x6b\x7d\x98\xa2\x96\x09\xfb\xad\x8a\x56\xd7\x14\x92\x7f\xe8"
- "\x65\x72\x94\xc9\x2f\x75\xd6\x60\xff\x8c\x02\xde\xf0\xc6\x94\x62"
- "\x9f\xa4\x3a\x88\x6e\xf7\x8d\xe5\xd8\x47\x83\xb6\xa0\x51\xda\xd0"
- "\x58\xc5\x46\x84\xd3\xec\xa8\x6f\x6b\x88\xce\x44\x19\x97\x80\x9f"
- "\x8b\x58\x49\x3b\x3b\xf6\x06\xd5\x4d\x7a\x4e\x34\xae\x3d\x18\x27"
- "\x8c\x55\x33\xea\xa9\x05\xaf\x31\x02\x70\xf8\x98\xc6\x8b\x74\x47"
- "\x76\xf4\x08\xfe\xc3\x84\xb6\x19\xdb\xd8\xb1\xc3\x34\x56\x54\x16"
- "\x77\xce\xaa\x09\x74\x67\xfc\x90\x6c\xd8\x11\xac\x57\x17\xf2\x0e"
- "\x3a\xbf\x3c\xcd\xdc\x33\x88\x2e\x07\xaf\x22\xde\x8b\xb3\xb8\x2a"
- "\xc6\x5a\xe8\x4e\xbb\x67\xac\xee\xe0\xea\xe5\x32\xc6\x1b\xb0\x3f"
- "\x5c\x36\xb0\x80\x1f\x7c\x35\xda\x6d\x28\x3e\x4b\x76\xf6\x6a\x80"
- "\x6b\x2a\x48\x67\x25\xaa\xb2\x80\x99\xc9\x46\x61\xb1\x9d\xfb\x9b"
- "\x7c\xd5\xac\xc9\x5e\xcd\x3e\x08\x54\x31\xd7\x0a\x92\xd3\xba\x3b"
- "\x3f\x74\x54\xd1\x5d\x95\x61\x78\x7f\xdd\xfa\x53\xaa\xab\x69\xed"
- "\x87\x2d\x1f\x61\xe4\x3e\x62\xd6\x9f\x8b\x70\x55\x63\xc6\x07\x98"
- "\x6d\x1f\xb0\xe2\x76\xae\x12\x8d\x57\xb4\x98\xea\xa8\x40\x59\x35"
- "\x64\xcf\xcf\xac\x76\x59\x86\xa3\xff\xc6\x34\x07\x13\x67\xa4\xae"
- "\x25\x7f\xa2\x36\x8e\xdc\x71\x81\x45\xb9\x96\x1c\x11\xef\x42\x66"
- "\x82\xfe\xba\xb3\x5a\x85\x0e\x26\xd9\x32\x74\x3b\x3a\xe8\xce\xb7"
- "\xba\x81\xda\x18\x94\xed\x06\xbc\x8c\x7a\xfe\x9d\x45\x7a\xfe\x26"
- "\x81\x0b\xb6\x13\x3c\xd0\xa6\x63\x73\x24\x4c\x1a\x11\x2b\xdb\x0c"
- "\xf8\x64\x84\xc3\xa7\x69\x32\xc1\x87\x74\xd2\xd5\x15\x9d\x35\x68"
- "\x5b\x2a\x60\xa0\xea\x75\xd0\x1c\xa0\xb3\x3c\x2a\xbf\xf2\x02\x8b"
- "\x76\x2d\x21\x9d\x75\xf7\x4b\xa6\x74\x63\x94\x7a\xe9\x6c\xed\x86"
- "\x8b\xcc\x48\xe3\x46\xb4\xc3\x06\xf1\x5d\xc0\xbc\x90\xc6\xcc\x1b"
- "\x3b\x37\x0a\xbf\x68\xfc\xcc\x34\xf7\xf0\x8c\xc7\x78\x55\xa0\x0d"
- "\xf1\x18\xab\x1a\x7a\xca\xf9\x38\x9b\xc6\xd3\x4c\xfb\x33\xe6\x4a"
- "\x28\x7e\xd3\xec\x07\x03\x58\x3b\xaa\xe0\x3d\xdd\xf1\xea\xc6\xdc"
- "\x4c\xa9\xbf\xfc\xe1\x9c\xed\xa0\xf5\xab\x37\x09\x1b\x19\xd1\xe0"
- "\x4f\x48\xe6\xc0\x5e\x16\x77\xe9\x9a\x2d\x3a\x1e\x7f\x61\x14\xd9"
- "\x9f\x70\x4f\x37\x08\x5d\x4a\xdb\x64\x6d\xae\x4f\x46\x9a\xa9\x1e"
- "\x36\x31\x47\xae\x89\x46\x71\x07\x90\xf0\xc0\x60\x74\x16\xf6\xae"
- "\x46\xd2\x61\xe5\x37\x65\xb0\x68\x85\x7b\xa3\x33\x4d\xdc\x1d\xa8"
- "\xa7\x39\x14\x2d\xe6\xbe\xfc\x06\xda\xd8\x6b\xc2\xde\xd6\x8c\x78"
- "\xa3\x1e\x4f\x7b\xa8\x0a\x7e\x99\x78\xf5\xb4\x55\x26\x5e\x74\x91"
- "\x25\x08\xb9\x97\x1e\xbf\xca\x6b\x6a\xc2\xce\x5f\x04\xdc\x4d\xb6"
- "\x75\x28\x0f\xe2\x23\xb0\x57\x1e\x40\xbd\x2e\xa4\x8f\xd7\xd3\xf3"
- "\xae\x0c\xa3\xdb\x51\x2f\xd6\x19\xd9\x5f\x13\x7b\xa4\x8c\x1f\x92"
- "\xe6\xf0\x9a\xc4\x98\xe9\x71\xcb\x32\xc4\xde\x4c\x76\x38\x40\x7b"
- "\x73\xd1\x9e\xd3\x22\x5e\x01\xef\x4c\xf1\xe6\xb0\x38\x03\xd9\x3c"
- "\x21\x7b\x9a\x61\x71\x11\x68\x33\xeb\x0b\xa3\x6e\xda\xa7\x69\xdd"
- "\xa5\xad\xa2\x33\x40\xb9\x3f\x8b\xba\x57\x71\x26\x6d\xf4\xca\x38"
- "\x49\x07\xfc\xa5\x26\x9c\x6f\xa7\x73\x17\xaa\x5b\xed\xca\x30\x04"
- "\xbb\x32\x22\xa8\x7e\x2a\x8b\x64\xae\xe8\x23\xea\xed\x60\x64\x1f"
- "\x9e\x6f\xfc\xac\x99\xd3\xbd\x2f\x94\x2b\xda\xe3\xf0\x03\xf7\x7c"
- "\x9e\x3e\xb0\x7e\xcf\x7b\x15\xae\xa2\x9f\x63\x4e\x7f\xb4\x9b\x70"
- "\x4a\xd0\x9c\x39\xdd\xba\x90\xf6\xe9\x8f\xc6\xd1\x98\x06\xb1\xce"
- "\x83\xb1\x99\xd3\x27\x75\x30\xa5\x08\x6b\x47\x9e\x4d\x7e\xf4\x10"
- "\xd1\x89\xc5\x2a\xe7\x78\x9f\x4c\x73\xd7\xd4\x49\x7a\x39\x99\x33"
- "\x85\x2e\x4c\xdc\xd1\x12\xb7\xbf\x83\x35\x96\x7c\xca\x1a\x03\xee"
- "\x92\x03\x17\xbc\x46\xa9\x13\x63\xa4\x72\x9f\xa0\x6f\xc5\x58\x2f"
- "\xb6\x60\xcd\xe0\xbc\x2d\xf8\x25\xc0\xee\x0b\xb9\x17\x7c\xb4\x5b"
- "\xe7\x91\xae\xde\x87\xbf\x0a\x9b\xa8\xa4\x2f\xaa\x6e\x7a\x85\xf6"
- "\x8a\x62\xde\x9d\xc4\x26\x15\x90\xac\xfa\xa3\xd6\x18\x1f\x4b\xd5"
- "\xca\x3d\x2f\xcb\xfd\x2b\xbb\x5a\xb9\x34\x6f\x1b\xb7\x4a\x3d\x14"
- "\x35\xee\x15\x7b\x10\x65\x07\xe3\x5e\xa9\xc5\x5e\x53\x0c\xfa\x05"
- "\xf4\x48\xcb\x0c\xd4\x63\x6f\x0a\x34\x33\xb2\xab\xbc\x43\xc5\x7e"
- "\x7d\xde\xc2\x34\xfd\x9f\xe2\x73\xec\xaf\x77\xa9\x3c\xc9\x0c\xde"
- "\x8d\xe4\xbf\xc5\x84\x67\x49\x9e\x5e\x14\x64\x91\xee\x7c\x70\x59"
- "\xb1\xef\x61\x1d\xb7\xdc\xf7\x0e\xc9\xda\x81\xab\x82\xdc\x62\x78"
- "\xfb\x92\x87\x6d\x00\xfe\x16\xf6\x41\xd7\xdc\xf4\x72\x4c\x29\x7b"
- "\x90\x1b\x4c\x42\x7f\x4c\xdd\x78\xb8\x02\x63\xdb\x2a\xf5\x8d\x6c"
- "\xd3\xc3\x74\x8d\x22\x50\xd7\x9b\xa4\x6b\xc4\xcd\xb6\xa8\x6a\xda"
- "\x33\x31\x66\xdd\x65\x7f\x05\xfd\xff\x17\xb1\xdf\xad\x23\xba\x48"
- "\xe0\xf9\x96\xd9\xde\xd8\xed\x64\xdf\x9c\x7c\xa5\x2a\xea\x8a\x40"
- "\xed\x86\x6f\x98\x51\xc2\xa3\x65\x42\x53\x67\xb7\x8b\x3b\xb7\xa7"
- "\xd3\x3a\xd2\xca\x36\xa1\xec\x20\xdf\x48\x77\xdb\x5a\x66\xc9\xb1"
- "\x11\xef\x16\xfa\x1e\xe8\xa5\xbb\x81\x7f\xad\xaa\xee\x21\xba\xe8"
- "\xaf\xa9\xa0\x75\x5d\x5d\xe6\xed\xe9\x3f\xb1\x94\x80\x06\x68\xc9"
- "\xf4\x44\x0c\x11\xe7\x2d\xba\xad\xd3\xc1\xce\xd5\xf8\x36\xcb\x70"
- "\x37\x0a\x01\xdd\x1e\x7f\x86\x7d\xf2\x97\x9e\x32\x66\xe8\xc5\xde"
- "\xda\x03\xde\x87\x6f\xcb\x88\xae\x1c\xcd\x52\xf0\x6d\xf4\x19\xd6"
- "\xf2\x66\xc0\xc0\xe2\xf1\x33\x7b\x6f\xca\x19\x86\x72\x53\x49\xa6"
- "\x7b\xec\x02\x9d\x33\x7f\x2c\xed\x72\xbc\xcc\x12\x55\x94\x47\xb2"
- "\xe4\x0d\xa3\x59\x22\xc9\x91\x11\x97\x64\x0b\xca\x73\x16\x9d\x4f"
- "\x5c\x33\x9a\x25\xf7\xaf\xb7\xa5\x5a\xd2\x79\x9f\x88\x3d\x7e\xa5"
- "\x97\xdd\x6c\xff\x3e\x6f\x43\xb9\x4e\x5e\x16\xc1\xf9\x4d\x16\x83"
- "\xa4\x07\x3f\x5e\x65\xda\x2a\xe7\x9d\x38\x57\xc0\x7c\xa3\x73\x1b"
- "\x4d\x5e\xad\x08\x1b\xaf\x71\x59\x2d\x74\x37\x4b\xc4\x29\x66\x82"
- "\xa5\x59\xb4\x43\xb3\xcb\x18\x5c\x73\x47\x26\x95\x41\xed\xb1\xcd"
- "\x93\xb2\x6e\xb2\xd9\x08\xb8\x0a\x3d\xe1\x75\x2f\xb3\xe8\x5f\xbf"
- "\xcc\xcc\xc7\x16\x88\x7e\xed\x96\x6b\xd1\xc8\xa8\xbd\xaa\x93\xd6"
- "\x19\xe6\x04\xda\x4d\xf5\xd1\xdc\x68\x0a\x9c\x77\x15\xe7\x73\xd5"
- "\xb5\x90\xec\x93\x7c\xfc\xb5\x2b\x6f\x0f\x4b\x6b\x0f\x48\x3b\x63"
- "\x73\x99\x77\x27\xca\xdb\x39\x9a\x99\x51\xd6\x45\xf7\x22\xc2\xb5"
- "\x96\x5b\x5c\x79\xfb\x51\xf6\x27\xc3\x68\x3f\x5a\x0f\xf8\xc8\x7d"
- "\xe9\x93\x03\x6e\x7f\x2b\x23\x1f\x17\x8f\xd9\x79\x90\xca\x41\x9a"
- "\x87\x44\x7f\xb7\x59\xac\x36\x69\x57\x53\xf4\xb5\xef\x0c\x41\xeb"
- "\x87\xfb\x82\x28\x6f\x8e\x3b\x13\x34\xa7\xd6\x27\x1d\xd6\x72\x7e"
- "\x7d\xb2\xd1\x95\xb7\x8b\xd1\xf8\x50\x7a\x84\x4b\xdc\x9d\x48\x7b"
- "\xb6\xff\xb8\x50\x1a\x7c\x7b\x03\xe5\x7e\x2f\x74\x36\x46\x67\x36"
- "\xa1\x34\xd5\xe8\x0f\x60\xe5\xdb\x06\x18\x49\x99\xe1\x27\x63\xa8"
- "\xad\x18\xbb\x04\x77\xfe\xa7\x03\xdf\x89\xc4\xda\xc7\xbc\x2f\x6d"
- "\x12\xf2\xb2\xbf\x8d\x78\x2c\xa0\x72\x89\xcf\xfe\xe6\x02\xed\x56"
- "\xe1\xc1\x93\x70\x81\xc0\x27\x13\xe9\x3c\xfb\x6f\x87\x4d\x8a\x1c"
- "\x5f\xea\x0b\xd1\x4c\x03\x8d\x71\xd8\x59\x85\x99\xda\xaa\x8f\x31"
- "\x37\xbf\x57\xa1\xd2\x19\x14\xe9\xf6\xf6\x5a\x98\x9c\x7f\xdc\x89"
- "\x72\xdf\xd0\x68\xc8\x0a\x6d\x3f\xad\xe8\x8a\xcd\x4c\xe7\xcf\x5b"
- "\x98\xae\x87\x88\xf5\x3b\xcb\x26\x75\x47\x2d\x84\xa3\x76\x1a\xe4"
- "\xda\xa1\x36\x6a\x79\xd7\xca\xb3\xf1\xbf\x95\x20\xff\xda\x01\xfb"
- "\x1b\x31\x9a\xec\x4f\x15\x93\x0d\x51\x71\x57\x09\xb8\x0a\xfb\x41"
- "\xa4\xdb\xd7\xc3\xe4\x79\x7d\xeb\x03\xa0\xf1\x23\xe9\x9e\xaa\xde"
- "\xb6\x6b\x3b\x57\x68\xd5\xee\xcb\xb5\xce\xd4\x79\x68\x6e\x06\x8c"
- "\xcb\x4c\xc2\xdf\x01\xe8\x2e\xd5\x17\xfb\x9e\xd3\x1b\x7b\xdc\x25"
- "\xd7\x4d\xab\x9d\xc7\x4a\x7c\x6b\xf3\xb3\x12\xea\x97\x26\x97\x88"
- "\xa4\x3e\xa3\x1c\xa7\x7e\xbe\xad\x97\x3d\xa8\x0f\x11\xbd\x6f\xe8"
- "\x93\xb4\x6f\xf0\x5e\x85\xe8\x1b\xd9\xe8\x11\x7d\x3b\x2e\xee\x00"
- "\x5e\x63\x7f\x5a\x25\x6c\xdf\x73\xba\x46\x53\x19\x9f\xbe\x4a\xed"
- "\xa3\x31\x01\x7e\xb8\xe1\x0c\x3b\x9e\xc9\x87\xff\x7a\xf8\xb5\x95"
- "\x79\x3c\x59\x96\x79\xdc\xb5\x19\x38\x58\xde\x59\x24\x9d\x9d\x4f"
- "\xd7\xf3\x8d\xc7\x5d\xc4\xc3\x74\xa1\x3e\xcc\x8f\x30\x3c\xf4\xa9"
- "\x99\xc6\x6a\xe2\x1e\x96\x2a\xe7\xe1\xa7\x43\x88\xdf\x95\x3e\x9e"
- "\x8e\xef\xc7\xbc\x97\xf6\xe5\xfa\x74\x56\x15\xb1\x8f\x85\xe3\xd8"
- "\x6b\x6c\xa3\xe4\x69\xe2\x0e\xa7\xe0\x7d\x97\xd0\x4b\x42\x7b\x57"
- "\x06\x74\xfc\x77\x7c\x17\x27\x79\x77\x91\x26\xf7\x24\x5c\x56\x24"
- "\x6d\x04\x76\x97\x7d\x3a\xbd\x4f\xee\x49\x77\xba\xcb\x78\x03\xa5"
- "\xc3\xd8\x9f\xa7\x34\xd2\x06\xd9\x19\xed\xbe\xf3\xa7\x4f\x6a\x77"
- "\x99\x93\x48\x57\x0b\x79\x81\xef\xb8\x90\xb7\x12\x0c\xa8\x6e\xd1"
- "\x76\x03\xc9\x38\x3f\xad\x0e\xc9\x99\x8f\x0b\xdf\x10\xd2\x1e\xc1"
- "\xa7\xfb\xf5\x39\x82\xfe\x46\x4a\xbf\x1e\xc7\xc7\x1c\x4d\x66\x62"
- "\x0e\x74\x71\xcb\xf0\x5b\xab\x69\x4e\x7e\x7a\x22\x1c\x4e\x69\x01"
- "\xb5\x58\xe2\xa0\xe3\xf5\x5c\xac\xf5\xe3\xf5\xff\x98\x9e\xf8\xef"
- "\xbb\x74\x5a\x44\xc2\xd9\x0c\xfc\xf2\x59\x40\xc0\xda\x39\xcb\x43"
- "\x76\x77\x9f\x2f\x22\x3b\xe2\xff\xfd\x0d\xd9\x6b\x0f\x38\x67\xb3"
- "\x60\xb1\x85\xec\xd3\x32\xd5\x39\xdb\x7c\xda\xce\x0c\x36\x3b\xc9"
- "\xd6\xb7\x5b\x89\xc7\x03\xcf\x6a\xe6\x71\xa0\x4f\xb0\xce\x57\xe7"
- "\x32\xd3\x53\x39\x24\x63\x48\x8a\x27\x7b\xea\x64\x4b\x9d\x7c\x21"
- "\x04\x8b\x93\xe2\xf0\x3e\x0a\xf4\x9c\x99\x9b\x67\x89\xf3\xf9\x60"
- "\x19\x07\x3e\x3e\x41\x36\xdd\x0d\x6e\xaf\x9f\xad\x3e\xcb\xa2\xc8"
- "\x5e\x7b\x60\xe3\xf6\x29\x4d\xbe\xcf\x04\x7f\x13\x63\x67\xf1\xa0"
- "\x3f\xe8\x0e\x80\x45\x8d\xdd\x0e\x9e\x76\x7b\xa2\xec\xf7\x79\x2e"
- "\xfb\x2d\xdb\x4d\xed\x97\x38\x2e\xcd\x5c\x24\xda\xfe\xd9\xe6\x00"
- "\xca\x57\x9d\x73\xa2\x83\xce\x39\x51\xf2\x4e\x7d\x23\x2b\xca\xe7"
- "\x1d\x6e\x5f\x23\x78\xae\x8b\xc2\x77\x1d\x9d\xff\x53\x1f\xa9\x7f"
- "\x54\xf7\x87\x17\xce\x0a\x5a\x2b\x80\x70\xf1\x22\x2d\x4f\x27\xf2"
- "\x74\x36\xb2\x1e\xe7\x1c\xd1\xf7\x26\x9f\xcc\x6b\x13\xef\x94\x3f"
- "\x0c\x0e\x5a\x9f\xfb\xe0\x80\xbe\x53\xff\xa8\xff\x01\x82\x09\x60"
- "\xa0\xf5\xd5\xd2\xab\xf5\x93\xfa\xf8\x01\x76\x9d\x97\xd1\x4f\xf4"
- "\x55\xf4\xb3\x17\xfd\x6c\xc8\x61\xcc\xbf\xe9\xbd\x9a\xcb\x71\x73"
- "\xa2\x88\x47\x2d\xfe\x0b\x68\xf8\x42\x27\x03\x2f\x6a\x7c\xbd\xc8"
- "\x69\x78\x01\xb4\x49\x91\x17\x3c\xa9\x97\x77\x90\x0e\xaf\xdb\x8e"
- "\x5f\xa0\x9a\x11\x8d\xa3\xd3\xeb\xa8\xdb\xf2\xa1\x7a\x8a\x15\x75"
- "\xf0\x0e\xd0\xa6\x7e\x77\x00\x69\x72\xd0\x7f\xf0\xb0\xa7\xb5\xf6"
- "\x53\xda\xd5\xdf\xc8\x7e\x99\x16\xb1\xf8\x43\x3f\xaf\x30\xb8\x5b"
- "\x2b\x98\xde\x97\x5f\x22\x1d\xfa\x63\x41\x59\x23\xa8\x3f\x2a\xfa"
- "\xb9\x0d\xed\xf4\x87\xf5\xe9\x58\x27\xe9\x11\x7f\xcc\x86\xa7\x33"
- "\xe5\xe5\x73\xe8\xc7\x39\x66\x71\x16\x81\xfe\x7a\x9c\xe8\xc5\x13"
- "\xc7\xae\xcb\x60\x89\x1e\xf6\xdf\x2d\x72\xde\x09\x5b\xd0\x23\xcf"
- "\xb0\xcf\x2e\xf6\xd9\x7b\x26\x1b\xfa\xb1\xdb\xa7\xd2\x3c\x12\x76"
- "\x9f\x69\xcf\xe8\xc6\x9c\xa1\x73\xfa\x95\xa8\xa3\x3b\x69\x94\x68"
- "\x4f\xd9\x64\xd2\x13\x8e\x46\x98\x7c\x47\xd1\x7d\x55\x05\xf9\xa6"
- "\x70\xc0\x8c\xca\x07\x3d\x27\xea\x21\x18\x0e\xa8\x73\xbb\x97\x4d"
- "\x41\x1d\xd3\x89\xff\xae\x2d\xf2\x1a\xfe\x6d\x2f\x4b\xbe\x36\x9c"
- "\xf2\x79\xe2\x60\xf8\x9b\xe4\xb3\x54\x1e\xfa\x16\x77\x86\x7d\x31"
- "\xac\xff\x1a\xb3\x0a\x5c\x26\xf1\xe0\xe7\xcd\x24\xff\xbc\xc6\x7a"
- "\x05\x0d\x47\x3a\x16\xd7\x98\xaf\x45\x6f\x07\xde\x07\xbd\x6f\x71"
- "\xed\x70\xf8\x22\x79\xb0\xb2\xd6\x6f\x11\x3a\x92\xc5\x95\x5b\x80"
- "\x2f\x40\x2b\x1c\xb5\xd0\x59\x0a\xf6\xce\x5d\x3e\xb6\x6c\x3b\x23"
- "\xff\x33\x23\xdc\x81\xd9\xec\x68\x75\x0a\xdb\x71\x81\x6c\xc6\x25"
- "\xc5\xbd\x78\x01\x63\xa9\xe1\x10\xa2\x49\x49\x8e\xcc\x97\x25\x99"
- "\x37\x6c\xd1\x69\xf8\x2f\x2e\x16\x5e\x64\x06\xeb\x12\xf1\xee\x9b"
- "\x6e\xe5\x81\x2a\x83\x9a\x53\x4d\x76\xcc\xe3\x0e\x37\x93\x1d\x73"
- "\xdd\x36\xb8\xa0\x7d\x1c\x58\x73\x5d\x96\xe1\xeb\xf3\x58\x32\xf9"
- "\x33\x30\x79\x25\x2d\x27\xf7\x6b\x4f\x22\xda\x67\xd6\xec\x85\x9b"
- "\xa5\xbd\xf0\xcf\x17\x91\xce\xb9\xf6\xfd\x89\x20\x78\x18\x51\x6e"
- "\x1e\x4b\xac\xbe\xc0\x92\x88\x0e\xb2\x9d\x92\x34\x1b\xf1\x85\xb3"
- "\x3b\x4d\x3c\xf8\xf7\x24\xb6\xfd\x4c\xc8\xdf\x81\x77\x19\xf9\x48"
- "\xe0\x96\xc1\xf4\xa7\x37\x8c\x12\xfa\x04\xc2\xd6\x2e\x9d\x33\x20"
- "\xcc\xaa\x36\x31\xe3\x51\xd2\x4d\xac\x91\xf7\xf0\x8e\x06\xa4\xbe"
- "\x6f\x77\x99\xa7\x5e\xb7\x03\x3f\xe8\x79\xb9\x53\xf2\x3b\x6a\x24"
- "\xf8\x2f\x6f\xb7\x4b\xda\x20\x3d\x19\xed\x5e\xab\x86\xf1\x38\x9e"
- "\xb3\xf4\x8d\xe2\xc8\xae\x5b\xaa\x80\xe5\xc9\xc9\xc4\xf7\x68\x3c"
- "\xe3\x21\x6b\x5f\x9c\xa4\x61\x84\xce\xb5\x45\x9e\xff\x61\x6f\x8a"
- "\xe9\x2e\x3b\x99\xae\xef\x67\xb4\xaf\x4b\x5b\xaf\x27\xb3\x3c\x11"
- "\x43\x73\xae\xd2\x3e\xb3\xa6\x23\x4e\x67\x37\xa9\x48\x5f\xa5\xef"
- "\x6f\xe2\x0c\x77\xcd\xe8\x87\x97\xad\x62\x09\x3f\xb9\x31\x8a\xd1"
- "\xf9\x1f\xd2\x76\xc8\x7d\xf7\xe4\x81\xd0\x19\x41\xaa\x80\x37\xd9"
- "\x28\x10\x3c\x06\xd9\xfe\x94\x3e\x0d\x3a\x75\x1b\xa0\x72\xff\x3d"
- "\x79\x3c\xac\x9e\x40\xdf\x3e\x8a\x3a\x48\x07\x9d\xca\x97\xb4\xc9"
- "\xc9\x5a\x71\x97\x12\xe9\xe4\xfe\x7a\x72\x50\xbe\x8d\xec\x50\x11"
- "\x7c\x55\x8d\x9f\x74\x77\x7e\x25\xe1\xeb\x60\x11\x93\xaa\x98\xe5"
- "\x50\x91\xc7\x18\x23\x6d\x74\x9b\xda\x58\xdb\x6c\xfa\x4e\x73\xdd"
- "\x35\x91\xe4\x81\x6d\xaf\xb9\x69\xdf\xee\xcd\x88\x7e\x8c\x78\x7d"
- "\x41\x8b\xb7\x6d\x9d\x80\x7c\x88\x8b\x3b\x78\xce\x6f\xdc\x50\xc0"
- "\x92\xa5\x2d\xd5\x36\x61\xa3\x8b\xee\xac\xdf\x1a\xcf\x2c\xb7\x56"
- "\xb1\xa4\xee\xb2\x36\x17\xf8\x4b\xa9\x1f\x43\xf5\x6f\xfa\xcc\x4b"
- "\xfe\x1c\xf6\xf5\x78\x86\xc8\xb1\xfa\xf2\x29\x84\x93\x42\xe1\xb6"
- "\xcb\xda\xf9\x50\xb3\x87\x7d\x39\x77\xe7\x39\xa9\x4b\x2f\xe4\x4b"
- "\xce\x23\xf6\x90\xfe\xc1\x97\x4f\xc9\xb6\x7c\xf9\xd4\x51\x3b\x23"
- "\xd9\x79\xcb\x0e\x61\x9b\xfd\x4b\xd0\x47\x27\xed\x9a\x3c\xa6\x59"
- "\xcc\x2b\xa2\x77\xcb\x89\x07\xfb\xca\xb5\x1e\xe9\x68\x9f\x00\x7d"
- "\x94\x2a\x69\xf8\x23\x15\x2a\xe6\x4f\x58\xff\xdf\x27\x79\xe3\x80"
- "\x38\xf1\x65\xc6\x44\x9e\x8d\x87\x5d\x42\x9f\x65\xe3\xe7\x33\xf1"
- "\x8c\xe2\x1b\x8f\xda\xf1\x8c\xc6\x9c\x2b\xc1\xd3\x8c\xa7\x03\xcf"
- "\x78\x7c\x4f\xa1\x79\x09\x1e\xd6\x42\x3e\x2a\xbb\x62\x0f\xd7\x0d"
- "\x76\x2f\x8a\x60\xe3\x5e\xfb\x53\x26\x75\xf6\xda\x53\xc9\x3f\x61"
- "\xda\x76\xc6\x96\x05\x78\x8f\xf5\x66\xf2\x31\xd2\x9e\x5a\xbc\x9d"
- "\xce\xd2\xdb\xe3\xfb\x9f\xa5\xb7\x4f\xc6\x0f\xa1\xf6\x06\xfc\xfc"
- "\xf8\xa5\x86\x7e\xa7\x26\x77\x97\xb5\xa7\x02\x8e\x82\xc6\xba\x36"
- "\x9c\x48\xf9\x31\x0e\xc4\x17\xc5\xbe\x92\x29\xfb\x7b\xbc\x06\xe1"
- "\x28\x1e\xfb\x99\x47\xeb\xaf\x13\x61\xb3\xb5\x18\xfb\x5a\x2c\x60"
- "\x32\x1a\x7d\x8e\xfd\x7c\x26\xf5\x97\xda\xdb\x15\x7b\xd4\x1e\x7e"
- "\x27\x8c\xca\xa4\xfe\x7b\x63\x91\x0f\xb0\xe4\x13\xe7\xf7\xc1\x53"
- "\x83\x13\xdd\x97\x31\x74\xa1\x0c\x49\x07\x21\x3d\xca\xd0\xd3\xf7"
- "\xc1\x7e\x34\xd9\x27\xc0\x98\x22\x1d\x78\xe2\x28\xfd\xbe\x59\x77"
- "\xd9\xa9\xe4\xc3\x8b\x98\x66\xcf\xa3\x3d\xd5\x17\x96\x97\x6c\x2a"
- "\x0c\x94\x1f\x75\x46\xc9\x3a\x8f\xda\x4f\xb3\xf6\x87\x64\xbd\xa7"
- "\xac\x83\xad\xa5\xa2\x71\xa0\xef\x40\xf5\x4e\x92\x7c\xdf\x54\x77"
- "\x82\x8f\xb9\xab\x55\xec\xf9\x47\x6a\x52\x8b\xb8\xeb\x34\x3b\x75"
- "\xb2\xc9\xdf\x71\x8d\xfb\xe1\x29\x61\x2f\x84\xf7\x94\x30\x77\xe1"
- "\xdd\xe2\x3c\xeb\x1c\xfb\x2a\xd6\xed\x15\x77\xce\xf1\x7e\x3a\x48"
- "\xdf\xe9\x0c\x9d\xf6\x06\xf0\xd8\x7d\x7e\x32\x54\xa4\xdd\x41\xf1"
- "\x88\x23\x9b\x24\x3b\xc3\xbe\xf1\x4d\x87\x1d\x72\x4d\x9d\x7e\x9f"
- "\x68\x0b\xd1\xde\xc0\x0f\x5d\xd4\x66\xd5\x79\xd8\x41\x7d\x28\x06"
- "\xff\x47\xbe\x41\x69\x4d\x58\x57\x90\xac\xf0\xf4\xab\x98\x77\x5c"
- "\xdd\x78\xd8\x71\x6d\x7d\x38\x2d\xee\x4a\x16\x07\xf8\x39\x6f\xec"
- "\x61\x07\xd1\x24\x1b\x8a\x86\x44\x4d\xab\xe6\xae\xae\xb8\x23\x35"
- "\xdd\x65\xa7\x1b\x0e\x3b\xe4\xd8\x5c\x63\xb9\x0d\x7a\xdf\x77\x68"
- "\x7d\x47\x9c\x38\xa3\x9a\xb4\x55\xfa\x0f\xf1\xb0\xaf\xd8\xa0\x32"
- "\x2b\x8c\x33\xd1\x03\xd8\x1b\x2e\x4b\x58\x7c\x95\xde\xb7\x37\x5c"
- "\x53\x3b\xbe\x1a\xd4\x96\x7f\x58\x1d\xbd\x5a\x1d\xfb\xff\xc5\x3a"
- "\xf6\x5f\xad\x0e\x79\x7e\xde\x91\x7a\xed\xbc\x63\x87\xb0\xab\x03"
- "\xfc\xe9\x94\x38\xf3\xeb\x37\x82\xe0\xdf\x02\xe6\xe3\xe4\xa7\xb1"
- "\x98\x74\x65\xc9\x97\x4a\xc0\xf9\x4a\xe6\x31\x47\x0f\x73\xad\xf8"
- "\x88\xb5\xb3\x0e\x61\xbf\xef\x58\x3e\xf1\x6c\x9f\x79\x7a\x37\x1d"
- "\xf1\xf6\x1a\xbe\x72\x12\xbc\xb7\x63\x1c\xb6\x85\xcd\xb3\x26\xdf"
- "\x47\xcc\x9d\x49\xf2\xd5\x66\x92\x6b\x7b\x78\xec\xf1\x1a\x15\xb8"
- "\x01\x34\x7a\x50\xc0\x03\xf4\x8b\xe4\xb7\xde\xab\x10\xfc\x96\x57"
- "\xd8\x4c\x1e\x21\x7c\xa4\x94\xed\xcd\x27\xd9\x77\xb0\x37\xc3\xda"
- "\x5d\xc6\xd2\xc9\x77\x0a\xc9\x9d\xb9\xd9\x66\x4d\x0b\x44\x70\xc1"
- "\x4f\x81\xf6\x27\xdf\x29\x6e\x9f\x87\x05\x41\x47\x57\x5f\x62\xf1"
- "\xd5\xa0\x3d\x81\xb3\xcd\x84\xd7\x77\x6a\xfe\x53\xd6\x5f\x0a\xf9"
- "\x4f\xd9\x41\xb2\x9e\x56\xbc\x5f\x62\xc6\xe0\xc6\xf7\x2a\xb6\x5d"
- "\x62\x89\xdb\x57\xb0\xa4\x6d\x24\xcb\xfb\x5a\xd2\x3e\x42\xb7\x9d"
- "\x7c\xa9\x2c\x4d\xa2\xb3\x84\x10\xed\x43\x36\x12\x42\x78\xcb\x28"
- "\x64\x20\xd7\x04\xef\xaf\xc5\x3e\x18\x70\x1e\x76\x05\xcc\x9f\xcf"
- "\xec\xdd\x74\xd4\x8e\x31\xa8\x05\xfc\x92\x07\x1a\x5b\x5d\x47\xa6"
- "\x2a\xcc\xff\xcd\xe1\x44\x89\xdf\x51\x96\x6f\xb0\x39\x11\xdc\x96"
- "\xc1\x26\x75\xb2\x14\x79\x6e\x3f\x0c\x7b\xe2\x99\x0c\xd2\x69\x2c"
- "\x5a\xcc\x2c\xc1\x6d\x73\x95\xe2\x57\x58\x84\x3b\x90\xca\xe8\x57"
- "\xf4\x0d\xef\x98\xb4\x88\xa5\xd0\xf9\x03\x9d\x95\x58\x9f\x17\xe9"
- "\x6f\x4f\x2c\x64\x29\xe1\x65\x2f\x5e\x95\x97\x7b\x57\xca\x33\xd9"
- "\xd6\x05\xb9\x79\x8b\x57\xce\xcb\xcb\x66\x33\xa5\x2a\x88\x30\x47"
- "\xbf\x8a\xf4\x40\x56\xe6\xe6\xe7\x58\xe7\x2f\xcf\xcb\xcb\x5e\x92"
- "\x6f\x9d\x3d\x2d\xfd\xdb\x36\x49\xb7\x59\x76\xd1\x59\x8f\xd4\x0b"
- "\xec\x1c\xc6\xff\xfd\xce\x4b\x95\xe4\x5f\xab\x74\xc6\x1c\x53\x60"
- "\xa6\x55\xfa\x39\xea\x9c\x4b\xba\xb8\xbc\x38\x63\xab\xa4\x53\x3b"
- "\x9f\x92\xb4\x7d\x76\xab\xbc\x47\xd7\x29\xed\x00\x76\xcd\x4c\x90"
- "\x6b\xea\xef\x0f\x44\xd8\x19\xbd\x2f\xa6\x77\x93\x9d\x55\xb8\x46"
- "\xd3\x79\xf8\xdf\x85\x8d\x46\xbe\x6d\x96\xa2\xa7\xd3\xd3\x68\xdf"
- "\x85\xdd\xe9\x1d\x64\x57\xb7\xec\x4c\x16\xe0\x13\xd7\x5d\xf6\xf7"
- "\x39\x1e\xe3\xa3\x0e\x8d\x46\xe8\x90\x3a\x88\x9d\x73\xc9\x46\x27"
- "\xff\xf7\x9b\x2e\x69\xe5\xac\x43\x7d\xd7\x21\x6d\x89\x87\x9d\x89"
- "\xd2\x74\x15\xc7\xb6\x69\xed\x92\x3a\x15\x67\x56\x48\x9d\x8a\xbf"
- "\xef\x0a\xbb\x0b\x2f\x6c\x4d\xd0\xde\xa8\xd1\xa4\xdd\x5a\x79\x0d"
- "\x3a\x4e\x40\xfa\x16\xd0\x75\x5b\xaf\x1d\x17\xfe\x5d\xf2\x3f\xfd"
- "\x6c\x2f\x75\xce\xe8\x6f\xd3\x44\x87\x9b\xe5\xb7\x52\x16\x2f\xe1"
- "\x8a\x3e\x1c\x90\x70\x12\xf1\x09\x67\x10\xa6\x7c\x1e\xd6\x99\x70"
- "\xe5\xfc\xea\x1b\xf1\x47\x96\xcc\x5f\xba\xd8\x3e\x2f\x3f\xf7\xe9"
- "\xdc\x45\xb9\xf9\xab\xc4\x95\xfd\x64\xf1\xef\x07\xe3\xb3\xe6\x5c"
- "\x69\x7f\x3e\x89\x64\x32\x9a\xdd\x6a\x1f\xe9\x40\x48\xb9\x58\xe7"
- "\x37\x81\x32\xf6\xe0\xb5\xf5\xb3\x53\xb4\xb5\x5a\xd8\xf1\x38\xcb"
- "\x3c\x11\x91\x0e\xed\x7c\xa4\x53\x1b\x2b\xf1\xbd\xcb\xfc\x79\x8a"
- "\x75\x34\x9b\xda\xc6\xbc\xfb\xe9\x5c\x0c\xf0\x2e\xa1\xfd\x73\x7d"
- "\x01\xed\x73\xcd\xec\x58\x00\x7b\xa9\x38\x2b\x3f\x37\x82\x60\x46"
- "\x34\x24\x60\xb4\xab\x8d\x9d\x5d\x2e\x60\x71\xde\xb2\x4b\xd8\xe6"
- "\x38\x6f\xf9\x2d\xcd\x45\x6a\xb3\xca\x33\xb6\x71\x9e\xf1\xb2\x7a"
- "\x3e\x67\x1b\x3f\x9f\xf3\x72\xc8\xf6\xe5\x59\x0f\xf2\xee\x41\xde"
- "\x53\xe4\xdb\xaa\xf2\x1c\xdb\x43\x78\x92\xc2\xa6\x7c\x33\x78\xc3"
- "\x23\x0e\x6a\x8f\xdb\x9b\xc2\xe4\x7d\xfd\xb3\x1e\xb7\xef\x6e\x06"
- "\xda\x53\xe8\x47\xc8\xf3\x3d\xd0\x87\xc8\xe7\x46\xbb\xdc\xde\x1e"
- "\xe2\xa1\x1d\x2a\x68\x44\x0f\x3b\x6b\xc6\x7e\x5b\x47\xe5\x52\x9f"
- "\xb7\x63\x4e\x92\x9e\x06\xfa\x0e\x3a\xe6\x4c\xb5\x76\x37\xb8\x7d"
- "\x3d\xe2\x09\x06\xfd\xc7\xff\xdc\x38\x1a\x47\xc0\xf8\x7b\xa1\x39"
- "\x70\x4e\xd8\x88\x9a\xd5\xce\xbf\xe0\xce\xd9\x29\x72\xbc\xcf\x3d"
- "\xa2\xc5\x9d\x0f\xd9\x0b\x38\xf7\x14\xc2\xbd\xf8\xa9\xdc\xf9\x58"
- "\x7a\xd8\xd9\x34\x7d\x13\x36\xbd\x48\xef\xc4\x5e\xc0\x6e\x46\xfe"
- "\x8d\x72\xee\x3d\x96\xe6\x2d\xce\x89\x40\x9e\x20\xdd\x6f\xd5\xe0"
- "\xfb\x86\x7b\xed\x39\x5d\xd7\x03\x6d\x3a\xff\x63\xd7\x82\x00\x13"
- "\xfe\xeb\xdb\x03\x42\x1f\x52\xb3\x11\xa1\xa8\x65\x9d\xa4\xaf\x46"
- "\xf6\xd5\xa2\xb7\xc7\x49\xdf\x0f\xdd\x65\xe7\xda\xfb\x74\x92\xcc"
- "\x92\x66\x24\xba\x8d\x7c\xfa\xd1\xfa\x21\x1a\x90\xda\x44\xeb\x07"
- "\x65\x9b\xe9\x9c\x5b\xae\xa3\xf3\x09\xff\xda\x3a\x3a\x2f\xe6\x3c"
- "\xda\x5d\xcb\x0d\xc5\x7c\xd2\x3a\x96\x29\xf4\x10\x02\x3e\xba\x97"
- "\x6c\xc4\xde\x13\x2f\x71\x92\x77\xbd\xd0\x55\x59\xd1\x49\xfb\x64"
- "\xc9\xce\x1e\x16\xad\x3a\x6d\x16\xa2\xd5\x8f\x15\x0a\xfd\x8d\x28"
- "\xe4\xab\x25\xfd\x0e\xd2\x31\x8c\x11\x3e\x23\x3f\x62\x3b\x2f\x32"
- "\x63\x3b\x3b\x5f\x4d\xe7\x49\x21\x58\x9f\xff\x86\xce\x0f\xf9\xa6"
- "\x47\x1b\x4c\x85\x86\x0a\x2a\x43\xbd\x74\x76\x8a\x9e\x8f\x7c\x93"
- "\x53\xbe\x36\x76\xfe\x63\x91\x8f\xd2\x0a\x5b\x22\xe6\xb9\xa0\xd5"
- "\x5c\x94\x3e\x80\xf0\x0e\xd5\x0c\x7e\xe6\xf3\x99\xc1\x15\x81\x5a"
- "\x7c\x9b\xa3\x3a\x8f\xda\x11\x97\x21\xce\x31\x7a\x2d\x74\xbe\x89"
- "\x39\xb7\x3d\xdd\xed\xf9\xca\x25\xda\x43\x77\x95\xf3\xb1\xff\x0a"
- "\xde\xc6\x7b\xfb\x8e\xaf\x99\xd1\xbe\x80\xc6\xd3\x2b\x6d\x00\x9f"
- "\x63\x9a\x9d\x2f\xef\xdb\x5d\x9b\xe6\x44\x75\x61\xbe\xfa\x0c\x51"
- "\xec\xa8\x85\x74\xec\x3f\x4f\x39\x6a\xe9\xc1\xf8\x78\xd7\x02\x5f"
- "\x6a\x3e\xaa\xbc\x7d\x6b\x93\xe6\x68\x84\xc5\x5c\x8c\xef\xbb\x74"
- "\x9d\x26\x9a\xa7\xeb\x84\x8d\xf7\xf3\x85\x04\x37\xcc\xed\xc9\xc7"
- "\x16\x85\x6c\x2c\x77\xc9\x7b\x7d\x66\xe4\xe9\xbb\xff\x1b\xbc\xa4"
- "\x36\xa2\x1d\x64\x8b\xc6\x11\x5c\xa1\x9e\xa0\xf3\xf7\xc7\x2e\xaa"
- "\x9c\xee\x3c\xd0\xfd\x15\xe2\x9d\xd2\x1c\xbc\x8b\x78\x41\xba\x2b"
- "\x46\x67\xef\x74\x97\x3e\xb4\x4e\xbe\x49\xd4\xef\xd4\xd3\x1a\xa1"
- "\x36\xd0\x7d\xb0\xca\x85\x62\x9d\x92\x0e\x6c\xb4\x38\x7f\x88\x78"
- "\xf6\xeb\xc7\x7c\x28\xf3\x9c\x38\x37\xeb\xda\xa1\x95\x43\x36\xb3"
- "\x50\x46\x8e\x5e\x86\x4a\xfa\xc3\x79\x42\x7f\xcf\x23\xf3\x4b\x5d"
- "\xa3\xc7\x7c\xaa\xb8\xc7\x43\xf9\xa5\x0e\xd0\x37\xd5\x7d\x3a\xa8"
- "\xe2\x6e\xcd\x37\x7b\x74\x1d\x33\xbc\xf7\xdd\xff\x22\x98\x76\x39"
- "\x8f\x38\x7c\xc0\x0f\x3e\xe7\xe1\x3a\x7c\x03\xfe\xff\xba\xf9\xaa"
- "\xf2\x10\xb2\xa3\xb0\x9c\x19\xd4\x38\xdb\x74\xb2\x91\x41\xda\xf6"
- "\x52\xef\xfd\xc2\xbd\x9a\xbd\x8c\x88\x73\xec\x9b\x6f\x42\xe7\xf0"
- "\x41\x4d\x86\x7c\x61\xae\xe4\x61\x2e\xcc\x15\x32\xe4\x4d\x47\x32"
- "\xff\xa3\xc0\x6f\xa8\x2d\xf0\x18\xa4\x3e\xde\x85\x74\x0f\xeb\x59"
- "\x1b\xd2\x05\xbd\x60\xa6\xb2\x06\xa6\x39\xb3\x53\x64\x99\x5d\xc2"
- "\x7e\x48\x48\x26\xd0\x25\xee\x3f\xd1\x99\xb9\x4a\xf4\x63\xdc\x2b"
- "\x76\xd2\x91\x72\xdb\x2f\x90\x2c\x39\x52\xca\x27\x64\x1a\x4d\xcf"
- "\xf3\xfa\x33\xfd\xc3\x71\x14\x96\x30\xbb\xe0\xd1\xcf\xa5\x2a\x0d"
- "\x2a\xf9\x1f\xe4\xc5\x35\xc0\x97\x76\x9f\xb0\xd3\xe0\x06\x3d\x8a"
- "\x3a\xb8\x3d\x8f\xee\x52\x76\x8d\x24\xfb\x0d\x72\x6d\x76\xfd\x4a"
- "\xb4\xa9\xec\x41\x5e\x4c\x3c\x99\x97\x7c\x1d\x5d\x60\x48\x17\x8b"
- "\x74\x0f\xd5\x17\x76\x92\x8e\x59\x34\xf9\xb1\x6d\xd7\xea\xf6\xc6"
- "\x66\xa7\xdc\x1a\xcd\x32\xbb\xcb\xba\xe6\x78\x58\x7d\xf5\xb5\xe3"
- "\x8d\xae\x39\x57\xa3\xcf\x25\xbd\x98\xca\x06\xe3\xf1\x49\x86\x33"
- "\x11\xf5\xcf\xe6\xd4\x7e\xdf\x43\x01\x83\x9f\xf5\x1a\x86\xf2\x3b"
- "\x4b\x1c\x2c\x50\x36\x94\x07\x0b\x30\x5e\x5d\x16\xf0\x80\x8d\xac"
- "\x49\xea\xdd\x90\xee\x80\xa9\xc8\xc7\x2f\xb8\x03\xfb\xe9\x0c\xc1"
- "\x8b\xb1\x02\xde\xf2\xdd\xe7\x0e\xbc\xcd\x48\xbf\x9b\xf0\x4d\x1b"
- "\xf3\x8d\xa7\x76\x4d\xb4\x97\xb0\x09\xe7\xe8\x7b\x57\xbb\xdc\xf3"
- "\x7d\xa9\xda\xd3\x4c\xf6\x81\xc3\xdb\xf4\x83\xe5\x4b\xe6\x93\x91"
- "\xe9\x09\xb3\xb2\x57\x64\x2f\xb2\x3e\x4e\x26\xa8\xaf\xd4\x1b\x0d"
- "\xf9\x39\xbc\x18\x4d\xfb\x2b\xd1\xef\xe4\xef\xf0\x6a\xbe\x0e\x75"
- "\x3f\x87\x58\x73\x89\x24\xf3\xfe\xdf\xf4\x75\xa8\xd3\xe7\xe4\xe7"
- "\x30\x74\xfe\x73\xb1\xb1\x6f\x0d\xa8\x87\xba\x29\x2c\xf6\xf4\x32"
- "\xdf\x2c\x5a\x47\x72\x7f\xb9\x38\x3d\xdc\x56\x91\xa4\xcf\xb6\xa7"
- "\x23\x7e\xae\x7e\xe7\x15\x73\x31\x1a\xe1\x45\xa1\x3b\x36\x17\x1d"
- "\x18\xef\x3a\xb9\x7e\x45\xda\x0a\x5d\x4f\x42\xf3\x69\x2f\xf4\x3a"
- "\xd4\xf2\x7b\x0b\xa5\x6c\xf2\xe2\xfa\x1d\xea\xd0\x28\x79\x2e\x76"
- "\x71\xbf\x7e\x87\x4b\xae\xcd\x43\xda\xda\xbc\xd8\x78\x35\x5d\x96"
- "\xd0\xda\xb8\x14\x15\x5a\xd7\x5f\x68\x79\x2f\x45\xfd\x23\x3d\x18"
- "\x8d\x47\x1c\x79\x86\xf9\xc7\x90\xbc\x52\xde\xd9\xf6\x0b\xfb\x42"
- "\xd2\x1e\x47\xf7\x49\xed\x1d\x75\x74\xbf\xaf\xbd\xdf\x84\xf7\x37"
- "\xb4\x77\xd0\x8b\xdd\x2f\x69\xef\x58\xb3\xdd\xa5\xda\x7b\x3c\xde"
- "\x73\xb5\x77\xec\x1d\xdd\x3f\xd6\xde\x47\xe1\xfd\x3e\xed\xfd\x46"
- "\xbc\x8f\xd3\xde\xb1\x06\xbb\xc5\x99\x01\xda\x1e\x85\xb6\x5f\xbc"
- "\x76\x9e\xf5\x92\x4b\x9e\x5b\x77\x33\xd0\x83\x55\x72\xef\xe9\x8b"
- "\x8b\xc7\x9c\xce\xd2\xe1\x8b\xf8\x3a\xaa\x07\xf1\xc9\x1e\xe6\x69"
- "\x0e\x8b\xd7\xec\xb7\x75\x4f\xf7\xb0\x6f\x3c\x61\xf1\xd5\x5a\xfc"
- "\x5c\xf0\xdc\xbe\xb0\x78\xa7\x16\x9f\x0f\xbc\x98\x13\x16\xbf\x56"
- "\x8b\x5f\xe7\x61\xff\x6d\x0c\x8b\x77\x68\xf1\xbb\x74\x1d\x1e\x2d"
- "\x7e\x91\x16\x7f\xc0\xc3\x3e\xda\x1f\x16\x9f\xa9\xc5\x03\xff\x5f"
- "\x6c\x0d\x8b\x17\x78\x45\xda\x64\x37\xf1\xa3\x85\xb4\xb6\xba\xfd"
- "\x1e\xd6\xba\x2b\x2c\xcd\x4c\x99\xd7\x6f\xf6\xb0\xbf\x35\x86\xc5"
- "\x4f\xd5\xe2\x93\x3c\xca\x77\xc2\xcb\x4c\x19\x0c\x57\x29\x5b\x59"
- "\xe6\x60\x72\x7d\xe2\x81\x84\x2e\xb3\xa0\xb3\x2f\x67\xd3\x9d\x30"
- "\xd3\x76\xde\x66\x2d\xe2\xbc\x8d\x5d\x9e\xa5\xe9\xee\x92\x9d\xe3"
- "\x4e\x79\xbf\xee\xf2\x64\xcd\xb6\x82\x57\xdc\xb9\x2b\xa0\x38\xff"
- "\x5b\x42\x3e\xe3\x28\x91\xf6\xc2\x75\xdf\x33\x24\xdf\xd2\xce\xfe"
- "\x91\x86\x6c\xc5\x92\x2e\x78\x27\xc9\xc0\xdd\xf9\x3d\xd2\x96\x3c"
- "\xf8\x60\x8a\x23\x39\x0f\xc1\x23\x5c\x9e\x25\xf1\xfe\xe5\x6c\xb5"
- "\x87\xee\xb5\x4a\x59\x18\xad\x45\x4a\x4f\xfa\x6a\xe1\x69\x3d\xec"
- "\xb2\xb0\x4b\x11\x61\x89\xfd\xa4\xbb\xec\xf2\xf4\xd0\x7d\x22\x7f"
- "\xb5\x16\xff\x31\xe2\xe7\x86\xc5\x57\x0c\x8e\xdb\x81\xef\xcc\xb3"
- "\xcc\xbd\x97\xb8\x2f\x70\x89\xfb\x2b\x3f\x47\xbb\x17\x08\x1d\xc1"
- "\x9b\x83\xce\x59\x56\xba\x6f\x43\x3e\x62\x03\x2b\xb8\x97\x74\x22"
- "\x11\x7f\xdd\x63\x3e\x2f\x68\x8c\x6e\xbe\xfe\x69\xd2\x7f\xbd\xc8"
- "\xe8\x6c\xb6\xb8\x93\xfc\x0d\x9a\x38\xdd\xe3\x5e\x7d\x96\x45\xd3"
- "\x7d\x9c\x1d\x0b\xe8\xfb\x67\x6c\x76\x8e\x97\x1d\xcb\x09\xb2\x1d"
- "\x28\x7b\xfb\xd3\x3a\x7d\x71\x39\x10\xba\x2b\xfc\x28\x9d\x65\xdf"
- "\x5c\x2c\x7c\x62\xf7\x08\x5b\xe5\xa6\x52\xd2\x29\xf8\x3c\x83\x1f"
- "\x21\xda\xf8\x70\x89\xa9\x94\x59\xb1\xb7\x4f\xc1\xbb\x5d\xfe\xf0"
- "\x0d\xf1\x83\xf5\x49\xae\xe5\x9e\x7c\x89\x6b\x66\x39\x25\xbe\xe8"
- "\xc9\xe7\xbf\xa1\xfb\x27\x3d\x0e\xe0\x9b\x0c\xd0\xe1\x19\x03\xe5"
- "\x5f\xbd\x9d\x19\x7a\x37\x81\x36\x39\x57\x67\x90\xf8\xa9\x37\x4b"
- "\x35\x44\x95\x92\xac\x5d\xf8\xc3\xdd\x64\x9b\xb3\x67\x89\xdf\x70"
- "\xac\xa0\x9d\x3d\x7f\x23\xb3\xcc\xf5\x1b\x90\xa6\xe7\x54\x4c\x3e"
- "\xd9\x34\x3f\x92\x09\x7a\xd6\xf0\x7b\x7c\x3f\xb8\xa4\xce\x10\x10"
- "\xf4\x4a\x6f\x96\x90\xcf\x3a\x6d\x49\xb4\x87\xb8\x5b\x83\x44\x8b"
- "\x47\x83\x16\xb7\x00\xff\x47\x05\x57\xe6\xc4\x05\x96\xe5\x5c\xb7"
- "\x3d\x8f\x45\x07\x97\x25\xc5\xbf\x78\x89\x4d\xd1\xf7\x9f\xed\x2b"
- "\xb0\xa7\x74\x5b\x86\x6f\xc0\x9e\x42\x72\x9f\x18\xc5\x2c\xce\xa1"
- "\xe9\x5d\x35\x7c\x6e\xde\xb1\xe2\xea\xbe\xbd\x83\x2b\x93\x84\xbd"
- "\x09\x6a\xcb\x40\x7d\x5d\xf7\x32\x33\x06\xb5\x7b\xa9\x45\xa7\xd8"
- "\x28\xd0\xcf\x86\x98\x8b\xdc\x75\x66\x11\x33\x90\x3f\xe4\xa2\x6c"
- "\x21\x5b\x1d\x72\x2c\x27\xc0\xdc\x8e\x4f\x59\x51\x1e\x8d\x51\xef"
- "\x5b\x44\xa7\x91\x3e\x33\xd2\x9b\xcf\xb0\xde\xf7\x4d\x7e\xec\x19"
- "\x7e\xd0\xe4\x0b\x89\x2f\xee\xfd\x4c\xda\xb7\x08\x58\xe9\x1e\xa9"
- "\x2b\xef\x61\x8a\xbb\x5c\x7c\x4a\xe8\x0d\x45\xcb\xb5\xd5\xdb\x42"
- "\xe1\x62\xba\x27\x1b\x97\x35\x67\x6f\x8f\x7f\x88\x94\xdf\xf5\x7e"
- "\xac\xed\x0f\xe9\x92\xb7\xeb\x6d\x19\x6c\xee\xaa\xce\xf4\x14\x4e"
- "\xbe\x20\xab\x89\x7e\xe5\x1e\x71\xc6\x4f\x36\x03\x1c\x0f\xba\x38"
- "\xd0\x9d\xb4\x65\x14\x78\x49\xdd\x98\x9e\x22\x6d\x48\x06\xe4\xdd"
- "\x7c\x21\xef\x4f\x4f\x95\xe7\x1b\xe9\xe9\x52\xde\x9f\x9e\xb9\x66"
- "\x34\xdd\x27\x08\x6c\xed\x8a\x4d\xb7\xe3\xb9\xa8\x2b\x2e\xd7\x39"
- "\xf8\x7e\x34\x3b\xd3\x7a\x33\x8b\xa7\x73\x26\x5b\x50\xda\x62\x95"
- "\x6b\x38\x58\xcd\x37\x8a\x6f\x63\xdb\xec\x2c\x42\xda\x3b\x0e\x7c"
- "\x3d\xa9\x9a\x59\xd1\xd6\x11\xdc\x9c\x6e\x16\x7a\x8f\xce\x74\xab"
- "\xbb\x93\xfc\x54\x05\x99\x3c\x0f\x0c\xee\xe6\xb1\xe9\x66\x99\x3e"
- "\x78\x5f\x53\x27\xfa\x60\x4e\xf3\xb8\xfd\x67\x35\x9a\x30\x88\xb9"
- "\x9f\xe6\xe1\xce\x34\xaf\xbc\x6f\x1e\xfc\x95\x8e\x57\xe5\x1c\x0d"
- "\xae\x96\x70\x9b\x9d\x29\xe1\x16\xdc\xad\xed\x57\x63\xe9\x1d\x7b"
- "\x77\x8a\xd4\x5f\x09\xe6\xeb\x34\xb2\x47\x4b\x43\x79\xf0\xae\xd9"
- "\xf9\x0c\x56\xa1\xef\xc9\xda\xf7\x29\x14\x87\xfe\x61\xcf\x0a\x34"
- "\x53\xbf\x06\xc3\xad\x02\x16\x85\x2c\x02\xfd\x23\x9a\x96\xee\x08"
- "\xf8\xdc\xbe\x07\x5d\x6e\x31\x06\xfc\x2e\xd2\xed\xa7\x7a\xc8\xde"
- "\x10\xe1\x4d\x94\x69\xa4\xf2\x42\xed\x57\x47\xea\x6d\xa1\xfa\xe8"
- "\x1b\xfa\xea\x11\x7c\x35\xfa\x4c\x69\x68\x5c\x4f\xdb\x49\xee\x77"
- "\x11\x30\x23\x1d\x3a\x9e\x4a\x30\x91\x30\xe3\x09\x1a\x4f\xaf\x8d"
- "\x03\x8f\xed\x0f\x0f\x19\x56\xcd\xc0\x0d\x79\xa4\x4b\xc5\x53\x35"
- "\xf8\x69\x3e\x56\x54\x61\x8b\x56\x7e\x53\x5f\x0d\xcb\x3b\xa6\x2f"
- "\x2d\xda\x4d\xb4\x11\xe9\x25\xd0\x39\x95\x9c\xaf\x6a\x73\x58\xbe"
- "\x66\xdb\x37\x44\x23\x3f\xea\x59\xb3\x45\xf8\xac\x4c\xe9\x2e\x53"
- "\xdb\x43\xf0\x96\xe5\x0c\x50\xc7\xcd\x7a\x1d\x1e\xa6\xee\xd2\xdb"
- "\x89\x77\x6d\x0f\xe6\x49\xa1\x31\x51\x67\xea\xf9\x48\xa6\x83\x31"
- "\xf2\x91\xff\xd8\x41\xfc\x62\x28\x6e\x40\xa5\x29\xf0\xa0\x4b\xcc"
- "\x47\xc6\x6b\x48\x76\xc9\x9d\xe9\x9a\x7d\x08\xbe\x56\xee\x85\xbc"
- "\x86\xca\xa4\xb3\x46\x69\x6f\x94\x6f\x45\xb9\xda\x9d\x25\xbe\x47"
- "\x6b\x03\xf8\xbf\xc0\xb7\xec\x85\x3f\x3c\x2f\xcb\x9a\x7e\x97\xb8"
- "\x73\x3b\x61\xb9\x9d\xae\xd3\x66\x85\x02\xfd\x69\x6e\x73\xc8\xc6"
- "\x19\xf9\xa2\xd6\x6c\x9c\x39\xb3\xe7\x08\xf8\x2b\x6c\x3a\xbf\xc4"
- "\xab\xe8\xee\x08\x5f\xc1\xb7\x56\x62\x0c\x8b\x2f\xb2\x1b\xc8\x2f"
- "\x76\x91\x9d\x7f\x45\xf6\xef\x80\x2f\xf3\x81\x3f\x1c\x45\x17\xd9"
- "\x50\xd2\x4b\x22\xfc\x43\x7a\xcf\x3c\x16\xf1\x1b\x6d\x8e\xbe\x7b"
- "\x78\x8a\x71\x2a\xdd\x1d\xe5\xc5\x19\xa0\xa5\x6d\xeb\x68\x3e\x90"
- "\x8e\xfa\x69\xc5\x98\x80\x74\xeb\xf0\x2d\x7f\xbd\x90\x25\xd8\x9a"
- "\x83\xe6\xec\xe4\xe2\xb3\x2c\x52\xf8\x38\x74\xf8\x49\xa6\x66\x68"
- "\x53\xd8\xab\x28\xb3\x19\xf1\x31\x22\xde\xef\x27\x5b\x0b\xcd\xf8"
- "\x16\x83\x6f\x27\xf1\x54\x51\x86\xa3\x12\xed\x2e\x3a\xcb\x6e\x46"
- "\x5b\x3a\x50\x4f\x33\xda\x79\xba\x78\x31\x1b\xd5\x64\xef\x20\xfe"
- "\x0e\xe5\x79\x98\x66\x8f\xa4\xb9\x4d\x51\xee\x45\xbf\x1c\x24\x13"
- "\xc1\xb3\x70\x3d\x9e\x45\x41\x16\x53\xb4\x1a\xfb\xde\x6a\xd4\x4f"
- "\xf7\x5a\x51\x0e\xd9\x20\x91\x6d\x41\xdf\x48\xae\x86\x72\x57\x77"
- "\xf2\xd3\x28\xbb\xe3\x58\x27\xca\x73\xb4\xf6\x95\xa9\xd1\xd4\x63"
- "\xd1\xdf\x91\x7c\x53\xee\x6e\xb4\x69\x2b\xe9\x6e\x23\xce\x8c\x38"
- "\x73\x1f\x3d\xac\x18\x63\xb5\xf7\x61\x7d\x69\x8b\x33\x58\xd1\x65"
- "\x26\x74\xa8\xad\x2b\x23\x58\x9b\x12\x51\x43\x76\xb0\x42\x65\x1a"
- "\xc6\x50\x79\xeb\x50\x5e\x71\x36\x1b\x06\x5c\x1d\x85\x36\x92\x8f"
- "\xe8\x93\x02\x4e\xb4\xc6\x14\x43\x02\xfa\xe2\xa4\x3e\xa9\x18\xbb"
- "\xf5\x58\x0f\xe8\x8f\x82\xfe\x0c\x5b\x1d\xec\xbb\xab\x4b\x7d\x8a"
- "\x25\x7e\x8e\xfa\xa5\x8d\x23\x70\x81\xcd\xb7\x3a\x87\x9f\x44\xdf"
- "\x3a\x8e\xe5\xb4\x32\xec\x3d\xa6\x26\x7b\x33\xdd\xa1\x38\x29\xe1"
- "\xd6\x41\xe3\xda\x89\x7e\xfa\xfa\x6c\xf5\x2a\x11\x2f\xa1\xed\xb5"
- "\x68\xd7\x3a\xad\x9f\x14\x57\xd5\x47\xd3\x2b\x11\x9b\xb5\xf7\xe1"
- "\x7d\x69\xbf\xdd\xcf\xa8\xb0\x7e\x22\xbf\xf1\x01\x2a\x4f\xeb\xe7"
- "\x70\xf4\x73\xd8\xb7\xfb\x89\xf9\xb4\x82\xaf\xd5\xfa\x59\xa1\xf5"
- "\xd3\x80\x7e\x0e\x47\x3f\x47\x87\xf5\x33\xee\x8a\x7e\x92\x5f\x78"
- "\x3f\xfa\xd9\x16\xd6\x4f\xf3\x00\xfd\xf4\x7a\xa8\x8e\x8d\x36\xbf"
- "\xb4\x0f\xc6\xeb\xc4\xfd\xf7\xf2\x88\xbe\xfb\xef\x2a\xdd\xbb\xbc"
- "\x24\x6c\x10\xed\x27\xf9\x0d\xc9\x8d\x88\xd7\xa3\x3b\x9e\xb6\x55"
- "\x15\x25\x42\x76\x33\x4a\xca\xa6\x05\x7d\x55\x1e\x31\xb7\xef\xee"
- "\xc6\x16\xe1\xbb\xc6\x47\xf1\xc2\x66\x40\x1e\x13\xb2\xc7\xb4\x55"
- "\x2b\x8b\x29\x3f\xe5\x45\xfa\x75\x7d\x77\xcc\x14\x83\x5d\xca\x43"
- "\x73\x6b\xe9\x9d\x6c\x61\xc9\x33\x01\xde\x20\xce\x04\xca\x23\x42"
- "\xfe\x9f\x56\xf0\x7a\x82\x8b\xb8\xcf\x2a\xee\x83\xb2\x0a\x5b\xa0"
- "\x42\xbf\x97\xde\x89\xb4\xed\x61\xf7\xd2\x3b\x45\x1b\x7a\x84\xed"
- "\x87\x95\x69\x81\x95\xe2\x7e\x7a\x77\xb9\x31\x2a\x54\xb7\x52\xa1"
- "\xd5\xbd\x9b\xde\xbd\xd2\x36\x1b\xc9\xd8\xac\x42\xdf\xa6\xdc\x38"
- "\x59\xd7\x71\xf1\x28\xcc\x4e\x6b\x79\x40\x3f\x2f\xe5\xc6\xb9\xfd"
- "\x6c\x41\x29\x43\xc8\x1e\x0c\xc5\xe7\xf7\xdd\x35\x2f\x37\x96\xfc"
- "\xa3\xbb\xe6\xc5\x5e\x8c\x13\xd6\x9b\x9d\x7c\x9e\x2b\x46\xf0\xb8"
- "\xd9\xc9\xc2\x57\x8a\x32\x64\x0c\xb5\xb3\x4d\x31\xd2\xfe\x61\x12"
- "\xe7\x41\x8a\xf1\x33\x0d\x37\x97\xa4\x05\x03\x26\x0f\xea\x14\xb6"
- "\xa5\xfa\xc2\xc6\x16\xb2\x95\x81\xbc\x23\x84\x9d\x73\x94\xd7\x3f"
- "\xbd\xf8\x7e\x65\xfa\xd4\x2b\xc2\x56\x1f\x70\xd6\x60\xba\x3c\xeb"
- "\x47\x0b\x19\x6f\x52\x4c\x29\xb3\x17\x7f\xcd\x22\x30\x17\x4f\x51"
- "\xdb\x9a\x3a\xc4\x3d\x3f\x13\x2f\x4b\x61\xee\x8e\x80\xa4\xdb\x41"
- "\x2f\xb5\x25\x22\xcd\xd7\x6c\x14\xdd\x33\x21\x5f\x32\x48\x7f\x46"
- "\xf8\x8f\x51\x22\xdf\x9c\xbb\x7c\x38\x53\x9f\xc9\xb8\x8e\x1b\x0a"
- "\x6a\x49\x97\xe0\xf5\x1e\x0f\xf9\x60\x51\x8a\x5e\x62\x09\x84\xa7"
- "\x30\x87\xdb\xb9\xe1\xf9\x5a\xe4\xe9\xfc\x8f\x9e\x8e\x21\xee\xc0"
- "\xa7\xcc\x0e\xfc\x79\x46\x89\xdc\x6d\x2c\x64\xc6\x0d\xa7\x99\x19"
- "\xf3\x2c\x70\x34\x30\x85\xe9\xb6\x1e\xaa\xe3\xa4\x0d\x81\x6a\xcc"
- "\xc9\x65\x16\xee\xef\x2e\x8f\x34\x82\xaf\x2d\xd1\xe5\x17\xeb\xa4"
- "\xad\x37\x23\xea\x7f\x4e\xd8\xa5\x90\xf4\x01\x60\x1b\xf9\x90\xbc"
- "\x67\x1a\xff\x0c\xf2\x4c\xe9\xe3\x6d\x94\xc8\x7a\xed\x6c\x2d\x5d"
- "\xee\x23\x91\xf5\x47\xc1\x1d\xad\x95\x3a\x51\xf1\x48\x9b\xd5\xa7"
- "\x13\x45\x32\x41\x7c\xc7\x18\xa6\x4b\xbe\x27\x3b\xdd\x16\x8c\xd2"
- "\xd6\x38\xc5\x3f\xea\xa1\xbc\xc8\x67\x12\x7e\x2e\xcb\x23\x6b\x42"
- "\x73\x2d\x32\x87\xf6\x53\xf4\x29\x1a\xe3\x7a\x82\xfa\x45\x30\xf1"
- "\x91\x5d\x37\x65\x88\xe7\xe8\xae\x41\xfc\x20\x99\x67\x39\x03\x42"
- "\xbe\x74\x24\x03\xf3\xe9\x2c\xc6\xe0\x7a\xb2\x6d\xe5\x46\x3d\xc7"
- "\x76\xf4\xb0\x63\x96\x2e\xd6\x84\x77\xba\xfb\xe0\x5a\xf8\x25\x6b"
- "\xb7\x0e\xbc\x97\xab\xe0\xd1\xc0\xc7\x58\xa9\x2c\xc2\x35\xa4\x2f"
- "\x4a\x36\x08\x9b\xbc\x28\xab\x9d\x89\x32\x8e\xa9\x1d\xec\x98\x83"
- "\x78\xd8\xcf\x33\x9a\x76\x7c\xca\x9a\x2c\x7f\x15\xf5\x10\xbd\xed"
- "\xca\xeb\xba\x5a\xd9\x29\x28\x3b\x55\x2b\xbb\x13\x65\xc7\x0f\x5e"
- "\xf6\xe1\x92\x6b\x2c\xfb\x1a\xda\x7d\xd8\x7e\x2d\x65\x17\x6f\xe5"
- "\x41\xe0\xe1\x11\xc0\xb1\x16\xb2\xcf\x4a\x77\x5c\x83\x97\xc8\x26"
- "\xcd\x58\xc1\xab\x9f\x56\xa2\xb6\x13\xbe\x11\xfa\x21\x1b\x6d\xf1"
- "\xe2\xfe\x2b\xc9\xd9\xb5\x7b\xaf\xee\xc0\x29\x46\x72\xf7\xee\xf2"
- "\xa8\x8a\x10\x2f\xda\x77\x36\x6e\xf6\x28\x51\x7b\xa4\xae\xb5\x2d"
- "\x5e\xce\xad\xa8\x79\x54\xd6\xc0\x3c\x67\xe6\x74\xa1\xb3\xaf\x44"
- "\x9d\xd2\xe5\x5b\x5d\xb1\x99\xd3\xb5\xb2\xac\x57\xca\x4d\x35\x43"
- "\x42\xd6\x6c\x47\xbe\x75\x65\x5e\x6e\x7e\xb6\x7e\x41\x7b\x38\x7b"
- "\x3c\x7b\x7e\x76\xee\x8a\xec\x2c\xeb\x9c\xe5\x79\x4b\x26\x2c\x5d"
- "\xb0\xc0\x3a\x3b\x7b\xd9\xb2\x79\xcf\x64\x0f\x67\x73\xf2\xe6\x2d"
- "\x59\x96\x4b\xb2\x4d\xab\x75\xfa\x3d\xb6\x9c\xa5\xf9\x13\xbe\x3f"
- "\x3d\xe5\x0a\xd9\x26\xdd\xd7\x3e\x41\x3c\x0e\xf6\xa7\x51\xa0\x31"
- "\x62\xc9\x2e\x91\x69\x15\x77\x3d\x0f\xfe\x1a\x73\xf0\x0c\xed\x85"
- "\xb4\xff\x10\xef\x45\xf6\x8d\xc9\x66\xf2\xb6\x2d\xbc\xf9\xb4\x72"
- "\xd3\x76\xd0\xed\xad\x88\x23\xfb\xc4\x27\x78\x4f\xb1\x57\x9c\x67"
- "\x2b\x37\xad\x42\x9a\xfa\x5f\x23\xce\x1b\x9b\x9d\xbe\xe1\x73\x66"
- "\x94\x34\xc6\x30\x3f\x37\x0c\xe5\xeb\xc8\xd6\xf0\x97\x16\xa6\xd9"
- "\x48\x37\xb8\x3d\x7e\xd2\x21\x8a\x4a\x0b\x14\x73\xc2\xa9\x72\x7d"
- "\x0d\xbb\x2c\xe1\x92\x9e\x22\xee\x32\x28\x37\x3d\x49\x3c\xe2\x1a"
- "\xf2\xbb\x58\x3e\x1c\xf8\xbf\xd7\x1e\xc2\xd5\xd7\xeb\xb4\x79\x2b"
- "\xe0\xbe\xb2\x0d\x61\x61\x6b\x25\x72\xf8\xe4\x7e\xfa\x61\x4a\x74"
- "\x3c\x53\x6e\x28\x94\x3f\xe4\x51\x6e\xa8\x90\x3f\x7a\x0f\xff\xdd"
- "\x34\x55\xfe\xae\x8c\xff\x9f\xfe\xf4\xfa\xff\xe5\x32\xfc\xff\xe0"
- "\xf7\x4f\xd4\x2f\xfa\xfd\xff\x63\xff\xff\x27\xf9\xb1\x18\xae\xf2"
- "\xa3\xf9\x86\xb9\x75\xe2\xd7\x9f\xb3\x28\xcc\xcf\xaa\xf5\x4f\x63"
- "\x4e\x7f\xc6\x2c\x85\x01\xde\x5e\xfc\x14\x4b\x28\xfa\x1a\x34\x18"
- "\x68\xad\x7c\x07\x6f\x2f\xba\xc4\x4f\x62\xde\xfc\x05\xf3\xb7\xae"
- "\xb2\x8d\x45\xaf\x6f\x03\x9d\x95\x2f\x7d\xcf\xd0\x79\x13\xdd\xf3"
- "\x72\x23\xdc\xb8\xc2\xcf\x3e\xf4\x7e\x43\x3a\x95\xae\xa6\x4c\xe0"
- "\x9e\x13\x8c\xd1\xfc\x8d\xce\x64\xf1\xd5\xa3\xf8\x01\x5e\xb6\x37"
- "\x8b\x1b\xf6\xce\x41\x5c\xcb\x3e\x35\x75\xc8\xbe\x82\x86\x21\xd6"
- "\xa7\x69\x9f\x8f\x7e\x4b\x9b\x9b\x0f\x89\x7b\x8c\x78\xd2\x1c\xd4"
- "\x6c\x4c\x63\x7f\xba\xfe\x6d\xb9\xa7\x5f\xbf\x5e\x93\xe7\xd1\xbb"
- "\xb8\xbf\x81\x7e\xd4\xf1\xb2\x82\x5a\x2a\x73\xaf\x5a\x37\x84\xf6"
- "\xcc\x7d\x05\xa9\x43\x0a\xe7\x31\x43\x93\xe7\x0c\x3b\x0a\x5c\x48"
- "\xe7\xe3\x58\x77\x7b\xb0\xce\x6a\xb7\x8f\xe2\x4e\xb4\x6f\x1d\xe8"
- "\xb9\x0a\xb4\x69\x77\x77\xf9\x88\x24\x8f\x32\xd4\xa2\xd1\x72\x2e"
- "\xac\x8b\x3d\xeb\x91\x26\x6d\x39\x1b\xbb\x1e\xe9\x40\xdb\x55\x10"
- "\x8f\x22\xdb\x17\x3b\x0e\x30\xd8\x8f\x3a\x9b\xad\xbf\xa4\x70\x8c"
- "\xa0\x31\xa8\x6e\xf4\xc3\xda\xa6\xc4\x08\x9e\x9f\xea\xd0\xeb\x45"
- "\xf9\x15\x28\xbf\x59\x3b\x63\x74\xca\x72\x46\xec\x97\xeb\xd5\x56"
- "\x4d\x3e\x44\xb5\x7b\x62\xd5\xeb\x0b\xb0\xaf\xf7\x30\xb2\x83\x5b"
- "\x85\x3a\x5c\xa6\x52\xc6\x4d\x74\xc7\xf8\x44\x00\x7c\x8d\x2a\xf5"
- "\x77\x95\x98\x97\xb4\xbc\x82\x0e\x11\xb4\x47\x10\xf4\xbd\x90\xcf"
- "\x80\xfe\xc8\x01\x9e\x00\xcd\x21\xee\x67\x80\xde\xa0\x78\xd4\x51"
- "\x85\x7e\x35\x83\x6f\xde\x8f\xbd\xbb\x96\x68\x85\x5f\x5e\xfc\x11"
- "\xa3\x33\x0e\xa2\x17\x96\x39\xb8\x5f\xf8\x95\x2a\x8f\x99\xac\xd3"
- "\x0b\x34\x3f\x88\x46\x58\xff\x4b\x66\xec\xc5\x18\x63\x8e\x34\x80"
- "\xfe\x00\x4d\x1f\x63\xd7\xc6\xa6\x41\xd0\x05\x9a\x1f\x69\x89\xc3"
- "\x63\x56\x63\x7f\x8f\x46\x1d\x0d\x1e\xe5\x26\x01\x0b\x89\x83\x62"
- "\xd6\xe9\x7b\x3d\xc9\x1c\x3c\x28\x83\x03\xd7\x01\x6e\xfb\x93\x33"
- "\x15\xe6\x51\x46\xb4\x60\x2c\xf6\x53\x5a\xe4\x37\x22\xfd\x01\xec"
- "\xfb\x53\xb5\x31\x39\x01\x9e\x00\x74\x40\xcc\x74\x6a\x07\xf2\x34"
- "\x02\xd6\xa8\xcb\xec\xd3\xf0\x58\x8b\xa4\x61\xcc\x9f\xe9\xb0\xc7"
- "\x58\xaf\x0d\xc1\xdf\x14\x15\x0e\x7f\xc0\x42\xf2\xe5\x8a\xf9\x57"
- "\x61\x63\x07\xbe\xd4\x9c\x49\x72\x68\xd4\x77\x40\xc8\xd0\x14\xd3"
- "\x43\x64\xfb\x0d\x73\xe6\x00\x60\x71\x00\xe9\xea\x08\x37\xaf\xf9"
- "\x1c\x38\xf7\x69\xa2\xa1\xcc\x8f\x48\x1a\xd5\xd4\x41\x73\xf8\xb4"
- "\x62\xfa\x0b\x85\xdb\x95\x98\x99\x54\x1e\xc2\x6f\xe1\x09\x5a\xd6"
- "\xf4\x46\x71\x35\xf9\x37\xb6\x91\xfd\xe2\xe1\xda\x58\x77\xa0\x5d"
- "\x35\xfa\x1d\x28\x9a\x03\x34\xf6\xe8\xa3\x90\x3f\x78\x14\x53\x0d"
- "\xc9\x1a\x45\xbe\xde\x1c\x6a\xe3\x09\x5a\x9f\xfa\x77\xc4\x77\x90"
- "\xcd\xdc\x30\xd8\xcc\xd4\xc6\xa4\x4e\xf8\x0a\x55\xcc\x0f\xc9\xb6"
- "\x99\x13\x10\x8e\x42\x1b\xc4\x39\x44\x57\x6f\x4e\xc4\x06\xca\x53"
- "\x14\xca\x43\xeb\x07\x73\xd9\x84\x3c\xf7\xe1\xc9\xf5\xb4\x64\x37"
- "\x1f\xed\x70\xbd\x48\xb6\xcb\x14\x53\x6b\x57\x6f\x92\x01\xf5\xfa"
- "\x51\xaf\x81\xe6\x06\xcd\x0b\xbd\x8c\x0d\x12\x46\x7b\x30\x7e\x62"
- "\x7e\x1d\x0d\xd4\x01\xee\x66\xd0\xff\xfe\x0c\x49\xdf\x99\x5c\x5a"
- "\xfb\x5c\xe2\x7c\x30\x32\xca\xbb\x43\xda\x19\xa2\x74\x7d\xfe\x5f"
- "\x43\x74\xa6\x89\xec\x0c\x45\xa1\xac\x46\x6d\x4e\x98\x90\xae\xb9"
- "\x6f\x0e\x91\xbd\x03\xc5\x9c\x4e\xb4\xa6\xd6\x7e\x9a\x7b\x8f\x48"
- "\xd8\xc5\x78\x69\x0e\x80\x8e\x4f\x97\xe3\x1c\x33\x93\x68\x55\x39"
- "\x0f\x63\xe3\xf5\x32\x84\xcd\x04\xc0\x59\x45\x19\xfa\x5c\x09\xc7"
- "\x0d\x48\x9b\x0a\xba\xb4\x6f\xde\xe8\xb8\x40\x96\x19\xb7\x4a\xa3"
- "\x43\x32\x30\x36\x64\xaf\xdd\x25\xec\x60\x89\x79\x19\x37\xeb\xa8"
- "\x2f\x40\xf8\xb5\x05\xed\x02\x4e\x88\x7d\xad\x2b\x2e\xb7\x2e\x34"
- "\xb7\x63\xb7\xea\x73\x3b\x6c\x5c\xc5\xdc\x5e\x2b\xf0\x51\x6c\x9d"
- "\x87\xfd\xb0\x5d\x9f\xfb\xb4\xce\x55\xac\xeb\x0d\x2b\xc4\xf9\x80"
- "\x89\xe4\x81\x62\xdd\xfb\x3b\x05\x8f\x41\xe3\xd9\xe4\x68\x17\x36"
- "\xf2\xd7\xa8\x2c\xaa\xc9\x77\x8a\xe4\x23\x67\x68\xfd\xeb\x6b\x9c"
- "\xc6\x06\x75\xb9\xc8\x8f\xc1\x5a\xe0\x40\x5a\x83\x3e\xb4\x09\xdf"
- "\xa2\xc8\x26\x5c\xfd\xdc\x54\xb6\x0c\x63\x7b\x34\x93\xc6\x2d\x6e"
- "\x8a\x7e\xe7\x62\x83\xc4\x01\xd1\xda\x7c\x11\x6d\xbc\x02\xae\x26"
- "\x09\xd7\xb8\x45\xfd\xd7\xb7\x39\x9a\xd6\x77\x38\x5c\x09\xa6\x04"
- "\x5b\xa4\x45\xff\x87\xe6\xeb\x70\x0d\xc1\xf4\xfa\x61\xda\x7c\xd4"
- "\x70\x6b\xdc\x80\xb8\x75\x83\xf4\x19\x51\xb7\x86\xfa\x82\x3d\x85"
- "\xea\x17\xfe\xb0\x34\xde\xa7\xde\x4b\x73\x2a\x2e\xe0\x61\x85\xa9"
- "\x3a\x1e\x43\x7b\xe6\xd0\x7c\xa2\xb1\xd2\x71\x07\xc9\xca\x64\xdb"
- "\xaf\x4f\xd2\xc7\x83\xda\x1d\x8e\x13\xd0\x26\xa1\xef\x15\xea\xf3"
- "\xf5\x4f\x22\x5f\x1c\xe1\xb6\x10\x7d\x75\x7d\x4e\xff\xbe\x5f\x9f"
- "\x4e\x7d\xa7\x39\x61\x5f\x41\xf2\x32\xb9\x97\x79\x94\xe8\x13\xfd"
- "\xf1\x55\xf4\x5f\x84\x5e\x86\x46\x8f\x11\xbe\xb7\xff\x52\xa6\xa7"
- "\xfd\x0d\xe9\x85\x6c\x5e\xdb\x0f\x53\x69\xff\x43\x5c\x83\x06\x83"
- "\x13\x48\x5f\x4f\xf7\xb8\xc9\x96\xcf\x75\x27\x24\x2f\x08\x1c\x7d"
- "\x80\x7c\x67\x20\x5d\x45\x13\xf8\x80\x40\x24\x63\xd5\x1a\xbd\x49"
- "\x78\x82\xaf\xcc\xb8\x6e\x65\x07\x1b\x66\xff\x3e\xff\xf2\xb4\x12"
- "\xff\x6f\x58\x47\x7e\xb2\x97\x89\xb2\xad\xa7\x95\x1b\xb2\x51\x6f"
- "\xbc\xf6\xb4\xe0\x39\x1b\xcf\x1b\xf1\xbc\x17\xcf\x9b\xf0\x1c\x83"
- "\xf4\xaa\x96\x3e\x05\xe1\x21\x88\xbf\x47\x7b\xa2\x8d\xf1\x74\x9e"
- "\x4d\xeb\xb1\x15\xe3\x87\xf8\x51\xc7\x29\x8c\xe7\xfb\x5a\xbf\x1b"
- "\xe5\xda\x8e\x7f\x0d\xe5\x38\x28\x1d\xed\x6b\x88\xb3\x23\xcd\x7a"
- "\x2a\x9b\xec\x2a\xe0\xfd\xa1\x30\xfa\x14\xe5\x8c\x5c\x8c\xe7\x64"
- "\x3c\xef\xc2\x33\x1f\xf9\xc9\x9e\x67\x3a\x60\xd0\x1c\xc2\x17\x31"
- "\x33\xb3\x1c\x72\x3c\x31\x86\xf5\xb4\xde\x75\x7c\x40\xf3\xa9\x5f"
- "\xba\xb9\x32\x9d\xe4\x5f\x47\x26\xea\x63\x17\x10\x63\x67\x6a\x0d"
- "\x60\xec\x50\xfe\x43\x94\x1f\xcf\x69\xda\x33\x55\x7b\xce\xd0\x9e"
- "\x3f\xd4\x9e\xd3\xb5\xe7\x4c\x8f\x12\xef\xd3\x68\x13\xc0\x2c\x5e"
- "\xc8\xc9\xb1\x76\xb5\x7a\x47\x25\x11\x7f\x0d\xfc\x7f\x2f\xf9\x71"
- "\x44\xbd\xd5\xba\xdc\x9a\x64\x3f\xbd\xe5\xc3\xae\xdb\x26\x64\x3f"
- "\x23\xf7\x87\xe1\x42\x6b\xb4\x92\xca\x40\x3b\x45\x56\x1b\x40\x37"
- "\xc8\x72\xa2\x0d\xda\x79\x3d\xf9\x83\x21\xbf\x9a\x64\xa7\x50\xf0"
- "\x51\xb1\xc7\xe9\x5e\xd0\x09\x21\xd3\xdf\x48\x36\x8a\xb2\x13\xf1"
- "\x4b\x01\x4f\x31\x59\xc7\xf7\xc4\x2f\x49\x3e\x7f\xe8\x5f\xbb\xcb"
- "\x47\x59\x43\x7c\xfe\xc8\x66\x79\xb6\x79\xc3\x73\x88\x0f\xe3\xff"
- "\x47\xae\xa3\x36\x03\xd6\xad\xe8\xcf\xe4\x36\x65\x54\x26\x9e\x77"
- "\xb7\xcb\x3e\xa7\xe8\x7d\xd6\xc6\xca\xae\xc3\xbc\x5d\x89\x0f\x00"
- "\x1f\xe6\xd1\xfc\x6e\xeb\xc3\xcb\xf1\x01\x7a\x6a\xf3\x07\xe3\x1c"
- "\xff\x3a\x8d\x77\x18\x3e\x49\x0d\xe1\xe9\x51\x07\xfa\x8f\x4b\xcc"
- "\x81\x80\xa4\x17\x5a\xb1\x2e\x69\x0e\xac\xbd\x62\x5d\xa6\xd3\xba"
- "\xd4\xf2\xfa\xfb\xe3\xf8\xeb\xd3\x09\xc7\x6b\x6d\xc4\xbc\x8d\xcf"
- "\xa2\xb1\xf1\x28\xa3\x5a\xb5\x3d\xa9\x15\x7b\xe4\xbd\x88\x9f\x25"
- "\xdb\x29\xe3\xb5\xba\x30\xff\xe2\xa7\xd3\xfc\xd7\xe3\xb5\xf9\x4d"
- "\xe5\x4c\xa5\xb1\xd6\xe3\xb5\xf2\x31\x4f\xe3\x27\xd3\xfa\xd1\xe3"
- "\xe5\x9c\x8c\x5d\x47\xf8\x86\xf2\x06\x84\x2e\x23\xf8\xef\x5f\xd6"
- "\xa3\xdd\x37\xd4\x81\xbe\xa8\xa1\xf5\xbc\xa6\x80\x45\xaf\xdc\xca"
- "\x46\xc8\xb5\x79\xc3\x71\x3d\xaf\x90\xe9\x97\xdf\xd0\xa8\xe3\xa8"
- "\x0d\x02\x9f\xc5\xa5\xf6\xc7\x95\xa3\x73\x79\x99\x29\x10\x30\x67"
- "\x27\x1c\x0b\x4c\x16\x38\x17\xeb\xbe\xba\xbb\xdc\x62\xf4\xb0\xbd"
- "\x66\x6d\x2f\x69\x14\xb4\x9a\x62\xb9\xef\x58\x8d\xc4\x5d\xb2\x6c"
- "\x4b\x1f\xfe\x0b\xa3\x43\x04\xae\xa7\xba\xa8\x2c\xec\x2b\x66\x5f"
- "\x71\xc6\x75\x12\x7f\x5b\x32\x3c\xec\x96\x78\x1d\xb7\xd2\xfe\x64"
- "\x52\x98\xbd\xf2\x97\x72\x7f\x52\x49\x06\x66\xf7\x09\xfb\x74\x4d"
- "\xf6\x4e\x46\xfb\x26\xd9\xff\xb6\xad\x1a\x4e\x36\xab\x32\xd0\xd6"
- "\xd9\xa0\xcf\x76\x69\x67\x33\xe0\x73\x6f\x0c\x12\x2f\xab\xc1\x15"
- "\xeb\xe9\xc6\x93\xda\xb8\x9c\x40\x7b\x76\x11\x6e\x5f\xb3\x42\xfa"
- "\x54\x22\x79\x90\xf0\xf1\x45\x34\xab\x85\xfb\x85\x2f\x83\x72\x4b"
- "\x47\x98\x8c\xab\x46\xae\x93\x1b\x8e\x09\x1f\x15\xce\xec\x04\x29"
- "\x4f\xbc\x71\xb9\x8c\xbf\x31\x43\xea\x21\x08\x3b\xa3\x14\x9e\x1e"
- "\x61\x19\xf5\x37\x21\x7f\x8d\x1c\x76\x9b\xa4\x47\x6e\x9c\x12\xa6"
- "\xf3\x23\x60\x2d\xec\x1c\x97\xdf\x98\x1e\x5a\x17\x37\x26\x52\x1e"
- "\xe4\x3d\x83\xf8\x1c\x3d\x5e\xee\x35\x31\x53\x35\x99\x99\xf5\xba"
- "\xd2\x54\x06\xdc\x1c\xb9\xad\x4c\x5f\xbf\x37\x36\xc8\xfa\xe5\xfa"
- "\xa5\x3e\xd2\x7c\xa0\x35\x1c\x10\x76\xc5\x8e\x0b\x5d\x6f\xbc\x27"
- "\x06\xf4\xb5\x2b\xe9\x3b\x71\xe7\x4c\xae\xdb\x1b\x5b\xc3\xda\xe1"
- "\xd4\xe6\xea\x89\xae\xf9\x96\x68\x7c\xf3\x79\x94\x28\x79\x96\xa5"
- "\x58\x24\x8f\xb1\x71\x76\xa6\x7a\x89\xfb\x49\x36\x4d\xf2\x04\x92"
- "\xd9\x68\xfa\xaa\x74\x56\xe2\x23\x5b\x69\x4e\xac\x87\x90\x7d\x34"
- "\x33\xd3\xed\xa3\x75\x97\x8f\x9e\x1e\x92\x1d\x5b\x76\x69\xfd\x4a"
- "\x40\x7d\xd5\xae\xa2\x23\x34\x97\x36\xcb\x35\x66\xa9\xa2\x79\xec"
- "\xc6\xdc\xc3\xfe\xb3\xf5\x68\xa1\xc8\x5b\xa2\xcf\x3d\xac\xd1\xac"
- "\xd3\xca\x4d\xb1\x55\xa3\xf8\x56\x8c\x29\xe9\xed\x2f\xc2\x3c\x08"
- "\xe2\x99\x25\x9f\x8a\x99\x9e\xda\x9c\xdf\x8a\xbc\x58\xff\xe3\xea"
- "\xf4\x31\xf0\xc5\x1e\x6e\x16\x73\xac\x88\xf4\x1b\x53\xc4\x59\x3f"
- "\xcd\x31\x9a\x5f\xe2\xcc\x1f\x73\xcd\x54\xfa\x23\x46\xf3\x4c\xd8"
- "\x4c\x41\x98\xda\x4b\xf3\xac\xbb\xfc\xa6\x28\xdd\xe6\xb1\x47\x19"
- "\x2d\xcf\xdb\xca\x6f\x4a\xd0\x75\xc3\x69\x1e\xe6\x8f\x63\x23\x51"
- "\xbe\xb5\xde\xea\x23\xd9\xf9\x17\xee\xc0\x0c\x46\x69\x09\x76\x12"
- "\x5f\xde\x50\x8f\x3c\x61\xe3\x1f\x23\x74\x59\x8f\xce\x15\xf2\xcc"
- "\xeb\xf1\x6d\x51\x7f\x9c\x33\xcc\x2f\xe8\x4a\x60\xc7\x5b\xe3\x19"
- "\x9d\xd3\x63\xaf\xb9\xc9\xa9\xd3\xc3\x93\x10\x87\x34\xd4\x3e\xe2"
- "\xc1\x9b\xf1\xee\xa4\x7d\x7a\x10\xb9\xf3\x64\x92\x15\x11\xce\x20"
- "\xd9\x13\xc9\xc1\x00\xeb\x96\xd3\xca\xd8\xd8\x63\x64\xbf\x68\xe9"
- "\xb7\xed\x5e\x17\x39\xf8\x45\xb2\xa7\x65\xcd\x63\xd7\xb7\x29\x37"
- "\xfb\x48\xee\x54\xfc\x0d\xc9\x78\x12\x2c\xfd\x65\x3c\x09\x39\xda"
- "\xaf\x10\x3f\x4f\xe8\x37\xc6\xae\xbd\x77\x5e\xfd\x37\xa6\x42\xa6"
- "\x1d\x53\x85\x5f\x8d\x84\x95\x05\x6b\x25\xa1\x50\x87\x15\xe1\x14"
- "\xc2\xb1\xa4\x67\x43\xeb\x5c\x09\x30\x3a\xa7\xc6\x38\xa1\xdd\x6b"
- "\xee\x78\xdc\x55\x40\x3c\x6d\x82\xf0\x5d\x40\xf6\x8b\xaf\x49\xd7"
- "\x4b\x49\x10\xe3\x29\xec\xcb\x2a\x09\x76\xd4\x1d\xbf\xe1\x1c\x33"
- "\xda\xf3\xd8\x18\x92\xa1\x9b\x82\xdc\x45\x3c\x30\xcd\x09\xc0\xa0"
- "\xf9\x8c\x32\xe6\xb9\xfc\xd5\xcc\x80\xef\x63\xf1\x9e\xa9\xd3\x52"
- "\xc8\x63\x8e\xf0\xb3\x78\xa2\xa1\xa6\xad\x66\x63\xbb\xcb\xc7\x4c"
- "\xd5\xc7\x8a\xe8\x0c\x92\xe3\xf5\xf9\xbb\x52\x12\x84\x2e\x00\xd9"
- "\xf2\xf7\x10\xdc\x74\x5c\x75\x8e\x64\xd7\x63\x92\x22\x7c\xcc\x2c"
- "\xf7\xa1\x31\x25\x18\xd7\x54\x39\x5f\xc6\x4c\xc7\xdc\x6f\x09\x6b"
- "\xe7\x0f\xc2\xde\xcb\x29\xbf\xc9\x47\x34\xdc\x60\xf0\x19\x73\x4c"
- "\x87\xcf\x06\x61\x03\x94\xd9\xc5\x78\x07\x78\x27\xda\xd6\x68\x2f"
- "\x60\x51\x67\x94\x9b\xdf\x46\x1f\x89\x06\x68\x90\x32\xfe\x9b\xdf"
- "\xd0\xf9\x74\xd9\xee\x9b\x57\x9b\x4a\x23\x18\xc9\xe6\xc9\x66\xa4"
- "\xd0\xc5\x3c\x6f\x11\xf2\x78\x77\x60\x2a\x73\x15\xdd\x4f\x69\x1e"
- "\xd1\xf6\xb2\x13\x5d\xc5\x16\x76\xd4\x32\x15\xeb\xf8\xe6\x99\x58"
- "\x2b\x9e\x6b\xd6\x79\x55\x6e\x9e\xa9\xc1\xb7\x51\xe8\x8a\x28\x37"
- "\xdf\x48\x7b\x09\xc9\x06\xb0\x8f\x10\x8d\x16\x87\xb2\x77\xe9\xeb"
- "\x06\xfb\x44\x3d\xf2\x58\x24\x8e\x79\xd4\x83\xf7\x78\xb2\x5b\x23"
- "\xf8\x07\x99\x3e\x5a\x9e\x1b\xdc\xdc\xda\x47\x6f\x23\x1d\xe5\x13"
- "\x3a\x84\xca\x98\x4e\x5b\x90\x64\x09\x63\x3a\xa9\x6f\xda\x5c\xc4"
- "\x7e\x35\x36\x2a\xb4\x6e\xc7\x4c\x17\xeb\xb6\x33\x7c\x5d\x8e\x4d"
- "\x0a\xf1\xa9\x37\x9d\x98\x50\xc5\x06\xb4\x99\x60\x8f\xa1\xbd\x6a"
- "\xec\x4b\x1b\x36\xf0\x1a\xa7\x41\x7d\x78\x4d\x25\x8b\x56\xd6\x01"
- "\x6c\xb4\xce\x56\x64\x8e\xc4\x7a\x7c\xcd\x14\x7d\x43\xfa\xb4\xfc"
- "\xa1\xbc\xc8\xc2\x0c\xeb\x2f\x0c\x8d\x1a\xe7\xbf\xa1\x86\x47\xdc"
- "\xf1\xf8\xec\x7c\x3a\xfb\x76\xb2\xaf\x16\xb1\x88\x69\xc0\x72\xb7"
- "\x46\x33\xbb\x47\x19\xb7\x9f\xee\xb9\x1f\x8d\x26\x5a\x64\xdc\x7e"
- "\x2a\xb3\xb0\x9a\x45\x15\xb6\xf3\x8e\x75\x0b\x86\x44\x61\xff\x35"
- "\x63\xdf\xa8\xb8\x2e\xfa\x86\x9a\x5e\x94\x71\x38\x53\xe4\xab\x1d"
- "\xbc\x6d\xd6\x7b\x07\x6e\x9b\x7d\xd4\x69\xc5\x3a\xe3\xda\xda\x76"
- "\x8b\x2f\xd4\xb6\x5b\x7c\xff\x0b\x6d\xfb\x4b\x58\xdb\xcc\xa1\xb6"
- "\xe5\x50\xdb\x4e\x5e\x5b\xdb\x12\x27\x87\xda\x96\x38\xf9\x9f\x6c"
- "\xdb\x9e\xc1\xdb\x36\x6e\xf1\xc0\x6d\x73\xdc\x70\x5a\x19\xb7\xfa"
- "\xda\xda\x36\x3e\x3f\xd4\xb6\xf1\xf9\xff\x93\xb6\x15\x55\xf3\x53"
- "\x4d\x09\x8c\xec\x69\x46\x13\x9e\x3f\xad\xdc\x52\xba\x3a\x41\xe8"
- "\x71\xc7\xe1\xfd\xde\xe2\x6a\xfe\xa5\xa4\x6d\xc6\x5d\x96\x7b\xda"
- "\x38\x2f\xe6\xaf\xd4\x2b\x51\x6e\xf1\x08\x3d\x97\x88\xd1\xbb\x79"
- "\x19\x0f\x4c\xf4\x91\xce\x60\x80\x6c\xbb\x90\x2d\xf8\x8c\x7d\x97"
- "\xfc\x06\x1e\x97\x9d\xb3\xf3\x82\x91\xed\xbb\xe4\x35\x74\x97\xdf"
- "\x92\xac\xdb\x73\xd5\xf3\x9a\xb6\x5e\x0d\x1f\xdd\x32\x6f\x5a\x0e"
- "\x33\x11\x3e\xa2\x27\xf9\xd3\xdc\x50\x34\x34\x6a\xda\x37\xb4\xef"
- "\xdf\xe2\xd0\xef\xeb\xea\x65\xa5\x75\x0c\xe5\xa6\x42\x16\x41\x77"
- "\x86\x85\xed\x47\x8b\x97\x25\x16\xb2\x21\x69\x0e\x94\xef\x67\x99"
- "\x26\x07\xca\x06\x3c\x24\x2d\x7f\xcb\xdb\x11\x8b\x58\x74\x15\xca"
- "\xa6\xe7\x34\x4b\x31\x5f\xf3\x12\x33\xd2\xdd\x62\xba\x23\x2c\xef"
- "\x07\x47\x46\xa1\x1e\x8f\x5e\xcf\x3f\x80\x5f\x8c\x84\xdf\xad\x87"
- "\x43\xf0\xbb\x75\x79\x08\x7e\xb7\xde\x27\xe1\x77\x6b\x4a\x08\x7e"
- "\x89\xd6\x6b\x83\xdf\xad\x8b\x42\xf0\x93\x79\xaf\x0e\xbf\x5b\x5f"
- "\x19\x1c\x7e\xb7\xd6\x85\xe0\x27\xcb\x1a\x04\x7e\x91\x03\xc3\xef"
- "\xd6\xe0\x3f\x07\xbf\x44\xeb\x3f\x09\xbf\x11\x12\x7e\xe3\x95\x10"
- "\xfc\x12\xdf\x0c\xc1\x2f\x71\x95\x84\x5f\xa2\x3d\x04\xbf\xf1\x99"
- "\xd7\x06\xbf\xc4\x3d\x21\xf8\xc9\xbc\x57\x87\x5f\xe2\xc9\xc1\xe1"
- "\x97\xe8\x0f\xc1\x4f\x96\x75\x6d\xf0\x1b\xff\x00\xe0\x66\xd6\xe0"
- "\x67\x1e\x1c\x7e\xe3\x33\xff\x49\xf8\x99\x24\xfc\x6e\x7b\x28\x04"
- "\xbf\xf1\x17\x43\xf0\x1b\xff\x96\x84\xdf\xf8\xda\x10\xfc\x6e\xab"
- "\xb9\x36\xf8\x8d\xef\x0c\xc1\x4f\xe6\xbd\x3a\xfc\x6e\x1b\x37\x38"
- "\xfc\x6e\x9b\x12\x82\x9f\x2c\x6b\x10\xf8\x0d\x1d\x18\x7e\xb7\xad"
- "\xfe\xe7\xe0\x77\x5b\xcd\xd5\xe0\x77\x6d\xb4\xc6\x6d\x83\xde\x7f"
- "\xbf\xc6\x72\x02\x83\x95\x43\x30\x24\xfd\x44\xb5\xfc\xb6\xc0\x0e"
- "\x35\x32\x4a\xde\xe1\xb8\x6d\x3f\x78\x98\x07\xdb\x94\xef\x3c\xb2"
- "\x43\x1d\x12\xc5\xcb\xbe\x3c\xa1\x96\x9d\x5a\xcb\x4b\x23\x8d\x6a"
- "\xe9\x50\x23\xd9\x33\x18\xd4\xe7\xba\xf2\x9d\xd7\x22\x6e\x64\x37"
- "\xd3\x7d\xbd\x35\xa0\xd7\xe8\xbd\xbb\xfc\x3b\xfb\x41\x8b\xa4\x5e"
- "\x09\x93\xac\xdc\x65\xc2\xd9\x67\x5e\x76\xd6\xf2\x25\x59\xf3\x96"
- "\xe4\x5b\xe7\xcd\x7f\x76\x59\x7f\x1b\xfa\xc2\x4f\xe6\x5a\x1a\xbf"
- "\xef\xf8\xfb\x6c\xcc\x94\x71\x07\xd9\xea\xb3\xdf\x42\xba\x69\x49"
- "\x53\x84\x5f\x83\xb8\xec\x16\xde\x9b\xf1\x72\xea\xad\xfc\x90\xb0"
- "\x41\xd8\x9b\xf3\x32\xf8\xa9\x42\xb2\x2b\xa3\x9d\x4d\x14\x9e\x56"
- "\xee\xf8\x31\x8f\x5d\x98\x41\x3a\x1d\xe2\x6e\x87\x92\xa4\xdf\xc1"
- "\x6a\xe0\x66\x5b\x8b\xea\x5c\x98\xc1\x37\x2e\x4c\x27\x18\x34\x91"
- "\xfd\xb7\x15\x11\x63\xdb\x94\x64\xd2\x01\x68\x41\x59\xad\x5a\x39"
- "\xad\xa4\x2f\x9a\x5a\xc0\xbf\xa0\xf2\x34\x5a\x90\xfc\x96\xb8\x24"
- "\x3d\x98\x74\xcc\x54\x6a\x8d\xa0\xb4\x64\x87\x91\xec\x13\xea\xbe"
- "\xaa\xa8\xdd\x94\x16\xf4\xf8\x83\xc8\xff\x20\xf9\xea\xec\x2b\x43"
- "\xb6\xe9\xfa\x33\xca\xed\x46\xd1\x17\xa7\xad\xa4\xeb\xf9\x8c\x97"
- "\x85\xbf\x48\x01\xd7\x3b\x2f\xa3\x6e\xe9\xe7\x33\x70\x5e\xf8\xf9"
- "\xd4\xf2\x8c\x41\x1e\x81\x4f\xc9\xf6\xaa\x2c\xe3\xce\x93\x7a\xbb"
- "\x40\x43\x0f\x47\xf8\xfd\xb0\x3a\xae\x43\xf8\x8d\xb0\xef\xd1\x08"
- "\x6f\x06\x1d\x1a\xab\x7d\x1f\x81\xf0\x2a\xa2\x4b\x45\xbf\x2a\x4b"
- "\xa4\x4e\xb4\x72\xe7\x5c\xc4\x99\xb5\x34\xb1\x48\xf3\x10\xd1\xba"
- "\x5a\x19\x71\x08\x8f\x27\x9e\x51\xfb\x1e\x8f\xf0\x30\x3a\x17\xd0"
- "\xbe\x8f\x3c\xa3\xdc\x71\x16\xe1\xef\x68\xdf\x41\xd7\xdf\x21\x6c"
- "\x6d\x01\xee\x8d\xd4\x27\xc0\x7e\x0a\xc1\x1d\xb0\x6e\x44\x5c\x21"
- "\xf8\xd5\x62\x1a\x47\xea\xa7\xab\xe0\x0c\x6b\x53\xee\xb8\x91\xee"
- "\xe5\xc9\xb1\x5a\x98\x21\xed\x03\x19\x32\x10\x6f\xa1\x78\xd2\x2d"
- "\x57\x37\x2e\x9c\x42\xef\x80\xe9\x1b\x04\x43\xad\x2e\xf0\x44\x77"
- "\xa4\x6a\xe3\x0c\xd8\x91\x0d\x5f\x56\xb2\x53\x1b\x0b\xb4\x6d\x28"
- "\xbe\x6f\xd7\xce\x3d\x2a\xd2\x02\xbd\xf2\x7e\x91\x72\x47\xce\xbf"
- "\x64\xb3\x02\xf9\x24\xde\xbb\x63\xb7\xee\xc3\x10\x71\xc2\x56\x06"
- "\xcd\x4f\x92\xaf\x78\x63\x6d\x39\xc2\x46\x0b\xe6\xa8\x3e\x57\x68"
- "\x9e\xf0\xc8\xef\xb8\xa4\xac\xe6\x8e\xbe\xfb\xbf\xc8\x6b\xd5\xfc"
- "\x3e\x30\xc9\x27\xdc\xc9\x42\xfa\x45\xb7\x0b\xfc\x10\xf6\x2d\x21"
- "\xec\x9b\x6e\x97\x50\xda\x9c\x2a\xbf\x73\x4a\xd8\xb7\xaa\x2b\xbe"
- "\xcd\x09\xfb\xb6\xf6\x8a\x32\xed\x61\xdf\xf2\xaf\xc8\xb7\x2e\xec"
- "\x5b\xe6\x15\xdf\x76\x87\x7d\x4b\xd7\xbe\x45\x20\xde\xd5\x67\x23"
- "\x51\xb9\x3d\x55\x8b\x07\xae\xbf\xb3\x35\x2c\x3e\x45\x8b\xa7\xfa"
- "\xbd\x1e\xf6\xc9\x09\x2d\x5e\xcc\x73\xcc\xa3\xdb\x64\x1d\xc9\xd1"
- "\x61\x75\x30\x39\x86\xb6\x1c\x39\x7e\x49\x0e\x93\x62\x1d\x4a\x73"
- "\xca\x54\x5a\x42\x3e\x84\x9c\xd2\x1e\x98\x5c\x87\xc2\x0f\x35\xf9"
- "\xca\x45\xba\xc1\x70\xe3\xc0\x3a\x82\xc9\x25\xfa\x3d\xd6\xa0\xd3"
- "\xb6\x48\x75\x2e\x58\x47\x7e\x09\xc9\x6e\x58\x71\x27\xd9\x8e\xd1"
- "\x7d\x12\xf6\x30\x77\x7e\x77\x49\x93\x5f\xdc\xb7\xa5\xfb\x10\x31"
- "\x64\xf7\xac\x49\xc8\x77\xce\x4a\xbf\x84\x74\xbf\x77\xa3\x6d\xd1"
- "\xca\x4e\x96\x60\xff\x3e\x6f\x27\x3e\x4f\xe2\x84\x64\xc2\x27\x26"
- "\x0d\xa7\xbd\x24\x74\xbd\x95\x09\x74\x6f\xc1\xe4\xee\x14\x72\xe6"
- "\xa8\xd3\xca\x84\x12\xfd\xbb\xec\xef\x84\x12\xc1\x4b\x6b\xf7\x0a"
- "\xbb\xcb\x27\x24\xf5\xf9\xcd\x54\x26\xac\xbd\x18\xbb\x7d\x26\xe2"
- "\xa6\xf6\xd7\x6f\x9c\xf0\x04\x95\x49\xfd\xf0\x28\xc9\x7e\x2a\x1b"
- "\x69\x32\xfb\xf4\x1b\x11\xbf\x32\xc0\x46\xa3\x6d\xa7\xf5\xf2\xf1"
- "\x1d\xfc\x7f\xb2\xe0\x2b\xa9\xcc\x8b\x1b\x8f\x3a\x10\x57\xe5\x31"
- "\x4e\xda\x2d\xf5\x23\x27\xd4\x78\x58\x5b\xca\x60\xfb\x9f\x90\x49"
- "\x9a\x17\xda\xb9\x73\x21\xad\xf9\x1c\x69\x07\x60\xa1\x5d\xf2\xf2"
- "\x13\xce\x92\x2f\x32\xf2\xe1\x4d\xe7\x8e\x12\xef\x4c\x14\xfa\x10"
- "\x14\x07\xd8\xec\x06\x7e\x96\x76\x35\xaf\x69\x4d\x4e\x10\xfb\x1f"
- "\xd9\x6e\xa2\x3b\x17\x74\x87\xa3\xbb\x7c\xe2\xcc\x3e\x5f\x0f\xfa"
- "\x7d\x02\x65\xe2\x73\x24\xe3\xdb\xa0\xca\x36\x5e\xd9\x06\x6a\x2f"
- "\xca\xea\x1c\x74\x2f\x35\x2f\xcc\x11\x72\xd0\x4d\xd9\x0e\xa9\x4b"
- "\x36\xf1\xad\x08\xcb\x4d\x1d\xa8\x6b\x7f\x9f\x8f\x0b\xa4\xa9\x24"
- "\x9d\x60\x94\xdf\xd7\xcf\x3c\x51\xc7\x09\x29\xa7\x9f\xe8\x05\x1e"
- "\xcb\xd9\xd0\xc3\x8c\x5a\xbc\xb7\x29\xe0\xa7\xbb\xf5\x03\xda\xe0"
- "\xa2\x3d\x52\xd8\x6f\xda\xb4\x30\x87\xee\x4f\x4c\xf2\xeb\x6d\x9e"
- "\xe4\x25\xbd\x7d\x6a\xb3\x84\xed\xa4\x53\x3a\x1c\xd7\x5f\x40\xd9"
- "\x45\x9f\xb2\x76\x65\xd2\x62\xd2\x6f\x11\x30\x29\xd0\x75\xae\x26"
- "\x2d\x16\xe9\x7a\xfa\xd2\x08\x79\x07\xe9\xfb\x12\x9c\x76\x90\xdd"
- "\x01\x94\x59\x89\xb1\x10\x7e\x6c\x95\x49\x6f\x0a\xf9\x26\xbe\x8b"
- "\x7e\x0b\x7d\xb6\x94\x78\x39\x57\x26\xed\xf1\x28\x29\x56\x39\x07"
- "\x65\x1c\xf9\x80\x27\x3d\x84\x73\xca\xa4\xf5\xe4\x4b\x16\xf0\x70"
- "\x90\xed\xba\x26\x1f\xd6\x8b\xa3\x87\xe6\x82\x83\x7c\x06\x7a\x94"
- "\x49\xd2\x97\x95\x99\x60\x3e\xc9\x4e\xf5\x13\x6c\xc9\x8f\x2e\x60"
- "\x7a\xa9\xbb\x3c\xa5\x4f\xfe\x41\x3e\x7b\x91\x66\x50\xdb\x8d\x04"
- "\xa3\x20\xda\xdc\x04\x7a\xd5\x35\xfa\x53\x6a\xdf\x5f\xd4\xb8\x85"
- "\x39\xa4\x3f\x89\x77\x69\xfb\xc2\x29\xc7\x4e\xce\x83\x94\xd7\x22"
- "\x2c\x09\xe3\x9a\xe4\x5c\x90\x7e\xcc\x95\x94\x74\x0d\x7e\xc2\xe7"
- "\x85\x73\x85\x84\x83\x4c\x7f\x97\x51\xca\x65\x12\xbe\x83\x76\xd5"
- "\x84\xe4\x32\x77\x19\x85\x4c\x4d\xd3\xb1\xc6\xb7\x03\x61\x6d\xf6"
- "\x89\x7b\x80\x17\x88\xa7\x4e\xc9\xa2\xba\xd6\x93\x6d\x31\x9a\x17"
- "\x67\xc2\xe7\x7f\xca\x0c\x6a\x27\xe9\xe6\x05\x63\xb3\x1d\x7c\x63"
- "\x76\x21\xc1\x19\x79\x0a\xb1\x16\x72\x06\xf1\x13\x2f\xfc\x54\x75"
- "\x97\xdf\x95\x1c\xe6\x7b\x17\xfb\xe0\x5d\x4f\xe9\xfb\x1c\xed\xd1"
- "\x64\xe7\xa1\x2f\x6e\xe3\xe7\x53\xb0\xde\x6b\x35\x1a\x67\x40\x99"
- "\x87\xb0\x73\x38\x91\xa5\xd0\x5d\x63\xd2\xd3\xa6\xf9\xc6\xcd\x9f"
- "\xb5\x92\xed\x64\xb2\x03\xe9\x2a\xb8\x1b\xed\xbd\x7b\xc4\x8b\xa3"
- "\xc4\xfd\x46\x9f\x6b\xe2\x05\xd2\xd1\xe9\x3c\x5d\x28\xec\x1b\x45"
- "\xa5\x39\x02\x7c\xa7\xf4\xbd\xed\xe5\xb1\x9f\x11\x1d\xd5\x29\x7c"
- "\x07\x50\x99\xff\xaa\x1d\x60\xe5\xae\x56\x8d\x96\xe9\xc4\x5e\x7e"
- "\x03\xfa\x23\xee\x33\xe2\x7d\xd4\x19\xe5\x9e\x7b\xa5\xbf\x48\x69"
- "\xcb\x5e\xd3\x35\x8c\x94\xf7\xf3\xbd\x4c\xdc\x97\x56\xee\x7e\xcd"
- "\x7a\x07\x63\x9d\xca\xdd\xaf\x0b\xbb\xd2\x4e\x9b\x4b\x83\x81\x6b"
- "\x83\x6c\x97\xc9\xe6\x30\x88\x36\x52\xfb\xae\xad\x6d\x77\xeb\xfb"
- "\x65\x64\x77\xf9\xdd\x75\xfa\xbd\x7e\xd1\x7f\xcd\xde\xb4\xeb\x16"
- "\xe2\x5b\xee\x19\xaf\xed\x5d\xf5\x5a\xdd\xf5\xff\x0b\x75\x7b\xb5"
- "\x32\xb7\x0a\x9b\xdb\x80\x0b\xca\xdd\xda\x5d\x7e\x4f\xaa\xbe\x9f"
- "\x6a\x3a\xf2\xc9\x72\x9f\xbf\x27\x23\xb4\x97\x4a\x18\xf6\xbb\xb3"
- "\xb3\x74\x69\xbe\x15\x04\xbb\x7d\x5e\xfe\xfc\x1c\x6b\x76\x5e\xde"
- "\xd2\x3c\x2b\x19\xbc\xb9\xc2\xaf\x52\x14\x2f\xbf\x67\x91\xe6\xfb"
- "\x6d\x77\x9f\xef\xb7\xf2\x7b\xf6\x87\xfb\xe4\xf3\x28\xf7\xd4\xfd"
- "\xef\xf0\x35\xf7\x0c\x7a\xcf\xcf\x69\x50\x6b\xf1\xab\xc3\xcf\x85"
- "\x5f\x03\xf1\x39\x36\x3f\x4b\xc5\xfe\x28\xce\x84\x43\xf7\xd5\xef"
- "\xa1\xbb\x3e\xa9\x6d\xca\xe4\xbb\x76\xa8\x46\x26\xec\x9a\x94\xa9"
- "\xa4\x4b\x42\xf6\xd1\xeb\xf0\x73\xe1\xd7\x80\x9f\xc8\xa7\x1e\x11"
- "\x77\x6d\x6b\xc3\xbf\xd1\xd9\x34\x2f\x73\x4d\xa5\x34\xbc\xd4\x28"
- "\xe8\x10\x75\x93\x4c\x77\x45\x1b\x0c\xbc\x7c\xc2\x7e\x2d\x9d\xc0"
- "\x0d\x31\xa5\xcc\x3a\x40\xba\x08\x5e\xfe\x1d\x8f\x96\x4e\xdc\x7d"
- "\xd7\xfb\x43\xb6\xfb\x91\x5e\x4f\x67\xe4\xe5\x77\xd9\xb5\x74\xd2"
- "\xa6\x59\x99\x61\xa0\x7a\x87\xf0\xb2\x4b\x09\x5a\x3a\x73\x78\x79"
- "\x61\x69\x22\xd5\xf2\xb1\xd3\x29\x8d\x5a\x6a\x94\x7e\x58\xca\xef"
- "\x69\x41\xfa\x01\x6d\x9e\x5e\xdb\x38\xdd\x5b\x78\xe5\x38\xd9\xe7"
- "\xe7\x66\xdf\x9f\xbb\x64\x05\x79\x92\xca\x5f\xba\x3c\x9f\x9e\x4b"
- "\xe6\x3d\x2b\x1e\x4b\x6d\x0b\xe6\xcb\x97\xfc\x45\x29\xf4\xb2\x08"
- "\xf3\x8d\x9e\x59\xcb\xed\xf4\x98\xbf\x94\x82\x8e\x9c\xe4\xe5\xf3"
- "\x75\x97\xde\xfd\xec\x2e\x75\x97\x7f\x37\xd1\xa3\x4c\x8e\x97\xf4"
- "\xc8\x77\x53\x3c\xca\x77\xc4\x39\xb0\xa9\xd4\xc3\xde\x49\x12\xbe"
- "\xff\xd8\xb7\xec\x15\x28\xdf\x7d\x80\xec\x15\x98\x4a\xed\xf3\x4d"
- "\x81\xdc\x6c\xe0\xd9\x56\xe4\x5d\xe4\x61\xbb\xb4\xbb\xe5\xb6\x66"
- "\x61\x37\xb4\xfc\xde\x03\xba\x7e\xa1\xea\xb4\xad\x25\x7b\xf8\x42"
- "\xdf\x68\x93\xb0\x85\x53\x8b\x70\xe3\x8e\x4d\xc2\x2f\x4d\x3c\xc2"
- "\xeb\x10\x6e\x41\xd8\x82\x70\x82\xea\x4c\x37\xd3\xfd\x44\x84\xad"
- "\x08\x27\xa2\xfc\x46\x7d\x5d\x84\xc3\x46\x73\x36\x77\xff\x80\xfc"
- "\x71\x7f\x1b\x53\x58\x5b\xdf\x33\xeb\xbe\x7c\x85\xdf\xde\xf2\xef"
- "\x59\xfb\xfc\xf6\x0a\x5f\x4e\xe6\xb9\x62\x5f\x13\x7b\xfb\xf7\xb6"
- "\x47\x58\xc6\xac\x90\x74\xf8\xf7\x66\xea\x36\x19\x24\x9d\xfd\xbd"
- "\x8c\x30\x9f\xc7\x14\xce\xe9\xf3\x79\x2c\xed\x92\xbd\x2c\xec\x1e"
- "\x29\xdf\xab\xe5\xe5\xdf\x6d\xed\xf3\x4f\x57\xfe\x3d\x67\xb8\x7f"
- "\x3a\x0f\xbe\x13\x7f\x83\xf8\xdd\xa1\x7d\xf0\x7b\x53\xa9\xce\x81"
- "\xfc\x3b\x83\x3f\x77\xd8\x56\x81\x16\xc7\x53\xd0\xe5\x1a\x0d\x4c"
- "\xf1\xbc\x2c\x95\xec\xdb\x58\xe9\x1b\xd1\x7e\x03\xca\x1c\xc8\xbf"
- "\xa2\x32\xe5\x21\xb2\xbb\xeb\x2d\xce\x52\x6e\xdd\x41\x3a\x48\x08"
- "\x4b\xbb\x91\xfc\x9c\x32\x45\xdc\x63\xd3\x6d\xca\x85\xdf\x89\x1f"
- "\xf0\xee\xc1\x47\xfa\x99\xf1\xa2\xa5\xa6\xc0\xbc\x6c\x49\xc7\x4d"
- "\x79\x45\xe2\xd2\xec\x6a\xb9\xdf\x4f\x59\xc7\x1f\x97\xfe\x4e\x3c"
- "\xca\x7d\x66\xba\x8f\x64\x52\x16\x2d\xe5\xc8\x6b\x72\xcc\xcb\x16"
- "\x71\x48\xb7\x06\xb4\x96\xd6\xbe\xe7\xdc\x09\x1d\x8c\x5f\x0a\xca"
- "\xbb\xfe\xca\x14\xfb\x2f\xc7\x94\x50\x3d\x51\x82\x8e\xf8\x88\x45"
- "\x93\xaf\x40\x6a\xdb\x8e\x30\x9b\x77\x1b\x10\x47\xfa\x58\x5d\x8f"
- "\x33\x61\xf7\x57\x6b\x8b\x5d\xf8\x2a\x2b\xbf\x2f\x4a\xb7\x99\xe3"
- "\x41\xdc\x95\xfd\x79\xfc\x27\x62\x85\x8c\x9f\x9f\x9c\x3e\x03\x6f"
- "\xc9\x9a\x9b\xdb\xf0\xb9\x93\xd0\x15\xf7\x8c\xa7\x6b\xef\xfc\xa1"
- "\xc2\x4f\x64\xf9\x7d\x19\x18\xa7\x80\x18\xef\x35\xbf\xf8\x9a\x70"
- "\x8b\xf0\x9f\x48\xf7\x0a\x55\x1f\xea\x9d\xfa\x88\xb0\xaf\x6b\x90"
- "\xf4\xa2\xb0\x6b\x57\x7e\x5f\x02\x8f\xb3\xd9\xa5\x8f\xd8\x05\x76"
- "\x8c\x9f\xd8\xf7\x69\x6d\x88\xfb\x93\x66\xea\xfb\x7d\xb5\xc0\xa9"
- "\xd3\xf0\xfb\x99\xf4\x0f\xf3\x8b\xaf\xf5\x72\xc9\x7e\x14\xe6\x56"
- "\x2b\x9e\x66\xd4\xdf\xda\xa7\x23\xd4\x77\x27\xf3\xbe\xcb\x64\xdb"
- "\xaa\xef\x7e\xae\x32\xf5\x5e\x49\x57\xde\x6f\xf4\xb0\xdb\x9c\x72"
- "\x7d\xdf\x8f\xf9\xdf\xa0\xdd\xcd\xba\x1f\xfc\xef\xa3\x99\xfd\xcb"
- "\xb8\x3f\x5b\x97\x7d\xc8\xb1\xbb\x3f\x15\x73\x71\x1a\x7e\x3f\x43"
- "\xfa\x59\xba\x8f\xec\x35\x06\x71\xb7\xe8\x74\x84\x85\xa5\x20\x3e"
- "\x4b\x8f\x1f\xa2\xa4\x02\x36\xf7\xe7\xeb\xf8\xa4\x2b\x2e\x7b\x2d"
- "\xc2\x6b\x41\xa7\x07\xb4\xb0\x13\xe1\x2a\x3d\x8c\xf7\x1a\x1d\xdf"
- "\x10\x7f\xd6\xf5\x7c\xc6\x4b\xc4\xff\xcd\xb7\x80\x26\xb3\x10\x7f"
- "\x75\x3f\xf8\xdf\xf7\x4a\x64\xde\xc3\xce\xae\xb2\x0f\x92\x7d\x71"
- "\xc7\x9b\x7d\xc0\xa1\xf8\x76\xc2\xc3\xfe\x6b\xae\x56\x4e\x87\xc7"
- "\x78\x57\x45\x68\x3c\x22\x4c\x80\xf1\x3a\xd9\xa7\xa9\x56\xbc\x3b"
- "\xc9\x5f\x79\x77\xf9\xff\x31\x7b\x94\xef\xfa\x45\xba\x15\x9d\x35"
- "\xeb\x7a\xcc\x73\xdc\xe0\xe0\x5d\x0b\x68\xae\xfc\x1f\x71\x3f\x79"
- "\x7d\x81\x59\xd8\x83\x26\x3b\x04\xc2\x3e\x19\xd9\x9c\x0c\xb0\x48"
- "\x61\xe7\x7f\xe3\x91\x0a\x61\xdf\x7e\x65\x52\xb4\x6e\x6f\x12\xeb"
- "\xd4\xca\x0d\x7b\xf3\xc9\x06\xa5\x90\xa5\x75\x27\xc5\x08\xbb\x93"
- "\x9a\xbd\xc9\xed\x2b\x58\x7c\xb5\x2a\xed\x4d\x0a\x1b\x05\x57\xb1"
- "\x39\xc9\xcb\xbe\x9a\xac\xdb\x9c\x04\x1c\xe8\xee\x61\x12\xbf\x14"
- "\xf0\xe3\x99\x18\x66\xeb\xc6\x38\xa0\xfd\x49\x03\xf0\xa6\x41\xda"
- "\x9f\xbc\xb6\xfd\xe6\xff\x74\xca\x79\x32\x35\x59\xf7\xe1\x1d\x16"
- "\x97\x8a\xf5\xa2\xd1\x39\xf7\xf9\xb5\xb8\x39\x1e\xf6\x6e\x67\x1f"
- "\x6d\x06\x7c\x47\x32\x45\x7c\x2f\xe4\xc5\x39\x2f\x85\xaf\x2b\x26"
- "\xfe\x68\xeb\x1e\x82\x7d\x39\x12\xbf\xa1\xf4\x9b\xd9\x87\x3f\x2e"
- "\xf1\x56\xe2\x11\x4c\x0a\xf6\x1b\x47\x04\x4f\x0b\x04\x22\x6c\x01"
- "\xa5\x85\x68\x4f\xba\x73\x9d\x16\x0c\xd0\xdd\x7f\x63\x5a\xb0\x8b"
- "\xfc\x6b\xb6\xd0\x5d\xb2\x0d\x0b\xe8\x6e\xe3\x58\x4e\x7e\x6a\xd2"
- "\x82\xe7\xf9\x4e\x79\x67\xb3\x59\xf3\x99\xd9\x18\x5c\xc1\x1b\x30"
- "\x0e\xd1\xc4\x77\x90\xfd\xad\x18\xc5\xcf\x62\xec\x11\x87\x1e\xbb"
- "\x78\x88\x93\xed\x2d\xf2\x51\xa6\x96\xfb\x81\x2b\xad\x8a\x2d\x10"
- "\x51\xe2\x0e\xb4\x0b\x3f\x01\x69\xc1\xa1\x3c\xcd\xf1\x00\x17\xbe"
- "\xc5\x56\xf0\x7a\xe0\xd9\x08\xe1\x43\x7b\x15\xef\xc2\x7b\x54\xda"
- "\xaa\x2e\x4e\xfe\x3d\x51\x76\x43\x5a\x40\xed\x49\x73\xa8\xc5\x36"
- "\x87\x82\x7c\x5f\x22\xdf\x97\x68\x4f\x0a\xca\x34\x23\xfc\x20\xdf"
- "\xb9\x80\xee\x40\x95\x08\xde\x07\x7d\x74\x69\xf7\x4a\xeb\xc8\xa7"
- "\x27\xd9\x19\xb7\x05\x5c\x25\x3b\xb5\x7b\xa2\xc2\xb7\xac\xa3\x97"
- "\x6b\xf5\x4c\x49\x5b\xc5\x1e\xb4\xad\x1a\x2b\xee\x9b\xd2\x5d\xaa"
- "\xb4\x80\x15\x75\x96\x10\x3c\xa2\x85\x3f\x6f\x71\x9f\xea\x81\xd6"
- "\xab\xf9\xf7\x1c\x90\xdf\xae\xcc\x4d\xe2\x9b\x9f\x69\xe1\x95\x8b"
- "\x8c\x7c\x73\xce\x1c\xee\x5c\x40\x7a\x52\x0a\xaf\x5c\xe2\x41\x18"
- "\xf1\xcf\x1d\xe0\x9b\x73\xe7\xf0\xca\xfc\xad\x78\x22\xbc\x32\x9f"
- "\x6f\x5e\x88\xf0\x23\x99\xc8\xd7\xcc\x2b\x7f\xd4\x8c\x74\xe9\xbc"
- "\x72\x56\x2a\x9e\x08\xcf\xae\x45\x3a\x84\xd3\xac\x78\x22\x9c\xee"
- "\x3c\xad\x7c\xbf\x1a\x79\x10\x57\x90\x2e\xeb\x5a\x3d\x57\xd4\x55"
- "\x59\x92\x23\xeb\x58\x93\x2f\xeb\x28\x2f\x91\x75\xfc\x6a\x9d\xac"
- "\xe3\x71\x86\xf4\xad\xbc\xf2\x27\x9d\x48\x97\xc1\x2b\x9f\x68\xc5"
- "\x13\xe1\x9f\xd5\x23\x1d\xc2\x4f\x52\x5d\x08\xff\x82\xca\x47\xf8"
- "\xa9\x0a\xa4\x3f\xc1\x2b\x6d\x0e\xa4\x9b\xcb\x2b\xe7\x51\xf9\x08"
- "\xcf\xcf\x40\x3a\x84\xb3\x67\xe2\x89\xf0\x33\x53\x90\x1e\xe1\x75"
- "\xe8\xd3\x33\x1e\x5e\x59\x39\x0b\xe9\x32\x79\xa5\x13\xf5\xe5\x20"
- "\xbc\x71\x3f\xd2\x21\xfc\x22\xf2\xe7\x22\xbc\x39\x01\xe9\x11\xde"
- "\x82\xbe\x3e\xd3\xce\x2b\xb7\xa2\x9e\x9c\x2c\x5e\xf9\x32\xf5\x19"
- "\xe1\x6d\x7e\xa4\x43\x78\x3b\xb5\x07\xe1\x9d\xc8\xb7\x10\xe1\x57"
- "\x00\x83\x67\x3a\x78\xe5\x7f\x78\x91\x2e\x87\x57\xfe\xd6\x85\x27"
- "\xc2\xaf\x39\x91\x0e\xe1\x3d\x80\x61\x2e\xc2\xfb\x52\x90\x1e\xe1"
- "\xdf\x51\x7f\x3b\x79\xe5\xfe\x16\xa4\x5b\xc4\x2b\xff\xb8\x1b\x4f"
- "\x84\xff\x54\x88\x74\x08\xbf\x0d\xf8\xe5\x22\xec\x4a\x44\xfa\x45"
- "\x03\x8f\xe7\xd1\x6a\x5e\x1a\xc9\x78\xa5\xbb\x96\x97\x0e\xc5\xf3"
- "\x2f\x99\xbc\x74\x48\x12\xaf\xfc\xd8\x8c\x78\x3c\x3f\x9a\x85\x70"
- "\xb2\x16\xc6\xf3\xaf\x53\x10\x4e\xd1\xc2\x78\xb6\x24\x22\x3c\x59"
- "\x0b\xe3\x79\x9c\xc2\x53\x78\xe5\xa7\x78\x46\xe2\x79\x7c\x17\xc2"
- "\x53\xb5\x30\x9e\xff\xed\xc5\x33\xc0\x2b\x3f\x39\x81\xf8\x54\x5e"
- "\xf9\x37\xaa\x1f\xcf\xd6\xb9\x08\x4f\xc7\xd3\x85\xf0\x74\xef\xf8"
- "\x9f\x91\xef\x54\xc6\x47\x4d\x74\xaa\xa3\x16\xa5\x17\x5f\x64\x06"
- "\x92\x37\xd7\x16\x79\xc8\x9e\xc3\xd8\x36\x25\x75\x15\xf9\x9b\xa0"
- "\x34\xc1\x2d\xcf\x34\xab\xa3\x72\xe8\xfe\x48\x24\xd2\x0d\x3d\xad"
- "\x3c\xb4\x9e\xf6\x4c\x77\xa1\x47\xf8\xb9\xd3\x6c\xd5\x45\x22\xcf"
- "\x2b\xa0\x11\xa6\x90\xbf\x73\xc0\x29\x9a\x97\x0d\xb9\x80\xe7\x3a"
- "\x5e\x76\x5d\x1b\xe0\x84\x70\xec\x47\x78\x22\xfc\xdd\x17\x00\x2f"
- "\x84\x7f\xf1\x30\x9e\xeb\xba\xcb\x1f\x62\x1e\xe5\x01\x89\xef\xf7"
- "\xce\x07\xee\xe4\xc0\x31\x68\xdb\x2b\x5b\x4a\x4c\x01\x17\xc6\xa0"
- "\xc0\x6e\x22\x9b\x6b\xaf\x66\x94\xf0\x51\xdf\xab\x11\xed\x2e\x03"
- "\x5f\xdb\x9b\x68\x90\x75\x5f\xc7\xdb\x94\x87\x26\x90\x2c\x94\x8f"
- "\x4a\x1b\xec\xfb\x6c\xf1\xfd\x96\x7f\x67\xf2\xbb\x99\x85\xbe\xff"
- "\x8c\xbe\x2f\x36\x91\xfc\xfa\xb6\x1f\xa2\x2d\x0f\x55\x51\x1a\x8f"
- "\x92\x8a\x7d\x3e\x82\xb9\x7d\x1d\x5a\x1f\x87\x52\xba\xcd\x94\x6f"
- "\x30\x99\x8c\x5a\x55\xec\x5f\x5f\xc6\x9b\x89\xff\xc4\x9e\x61\xb0"
- "\x16\x25\xd6\xb5\x29\xd3\xb2\xb6\x93\x5c\x21\x7e\xb3\x8b\xee\x05"
- "\xb5\x29\x0f\xdf\xde\xbb\x69\x41\x8b\xb5\xc0\x84\xf2\xa6\x65\x17"
- "\xfb\xb9\xcf\x55\xf4\x30\xf6\x36\x8a\x7f\xc6\x2c\x75\xcd\x45\x9a"
- "\x80\xd4\x0f\x12\xef\x1d\x52\x46\x3a\x2d\x8b\xf2\x86\xd3\xfb\xc1"
- "\x17\x22\x30\x86\x9b\x9b\xe5\xf9\xd6\xc3\x13\xde\x56\x3d\x06\x53"
- "\x3e\x1b\x62\x2d\x38\x84\xf2\x1f\xce\xef\xc7\x1b\xf6\xa5\x15\xdf"
- "\x9e\x3c\x88\xb4\xdb\x84\x1c\xe7\xe1\xb5\xba\x0c\x98\xa3\x0f\xbf"
- "\x96\x74\x51\x2a\xed\x63\x92\xbe\x9b\x66\x24\x7b\x98\x81\x78\x87"
- "\x27\x50\x35\xb1\x24\x58\xb5\xd9\xc5\xb7\x6c\x6e\x8e\x09\x28\x4c"
- "\xea\xe9\x4f\xbb\x6f\x92\x9f\xe4\x6b\x1f\x50\xff\xbe\x51\x87\x8f"
- "\x98\x33\xd1\xc1\x0c\xae\xbc\x4f\x29\xef\x5d\xfc\x05\xcb\x4c\x77"
- "\x67\x2b\x73\xe5\x89\xb2\x52\xf8\x0b\x13\x4f\xa8\xc3\x6f\x9d\xb3"
- "\x83\xe8\x52\x07\xc9\x85\x3e\xa2\x7c\x6f\x02\xce\xa0\xff\xa7\x99"
- "\xf5\xb6\x90\x5f\x80\xf5\x80\x1d\xd1\x8c\x74\xaf\xda\x16\x0c\x92"
- "\x0d\xa8\x0a\x0f\xe0\x20\x65\x8b\x0f\xfb\x08\x47\xcb\x7a\xa7\x3d"
- "\xa2\xc6\x2d\x70\x35\xcd\xa5\x33\x54\x33\xd9\xd4\xf1\x89\x7b\x98"
- "\x01\xf2\xe5\x47\x7b\xa3\x4c\x1b\x3e\x76\xb9\xda\xfd\xd3\xdc\x25"
- "\xf9\x79\xcf\x59\x97\xe5\x16\x64\x3f\x30\x7e\x79\xb2\x35\xcf\x61"
- "\xcd\x13\xfe\xb0\x45\x44\x56\xb2\x75\xd9\xa2\xa5\xf9\xd6\xfc\x55"
- "\xf6\xec\x6f\xfb\x06\xb6\x70\xf3\x82\x6a\x49\xcb\x3d\x22\xec\xc4"
- "\xf0\x9a\x2d\x8e\xfc\x42\xae\x5a\x6f\x19\x0a\x5a\x7d\xba\xf1\x72"
- "\xe4\x34\x3b\xdd\x49\x57\xcb\xac\x4c\xf3\xd9\x1d\xfd\x52\x1c\xa3"
- "\xfb\x1e\x51\xe8\x6b\x20\x74\x2e\xf2\xc8\x74\x29\xb7\x98\x0e\xfa"
- "\xe7\x21\xd1\xff\x2a\xdd\x4e\x97\xf6\x4d\x9e\x2b\x4c\x4f\xf1\xb0"
- "\x57\xa5\xed\xb9\x9a\xcd\xad\x92\x06\x9c\x2e\xce\x2a\xb8\x75\x8b"
- "\x83\xef\xca\x28\x01\xfd\xa3\x90\x3c\x48\xf8\xd0\x65\x17\xc4\x9d"
- "\x54\xbe\x79\x95\x97\xee\x83\x07\xb7\x3c\x6b\x57\x47\xad\xf2\xaa"
- "\xbf\x7d\x32\xb5\xf8\x15\x66\xd8\x87\x35\x6f\xb4\x62\x7e\xdf\xc2"
- "\xc6\x1e\x2a\xea\x30\xa0\xcd\xcf\x1d\x2a\x6a\x35\xf0\xaa\x45\x33"
- "\xbb\x12\x7f\x9e\xe9\x2f\x13\xf6\x3c\x51\x86\x9f\xbd\x37\x9d\x11"
- "\x2f\x53\xe7\x1b\x59\x56\xe1\x1b\xf9\x6c\x86\x7f\xf3\x0b\x5e\xd7"
- "\x2d\x77\xb3\x19\xb7\xf3\xf3\xef\xd6\x93\xcc\xe9\x91\xe4\x77\xa7"
- "\x93\xcc\x6f\x41\x95\xdf\xbc\x60\xab\x6f\xcb\x2a\x3b\xd9\xb9\xb9"
- "\xbc\xe5\xd7\xa9\x3d\xa3\x16\x37\x1f\x45\x9a\x0f\x40\xeb\x7f\x68"
- "\xc5\xfc\x1d\xc7\x0c\x97\x6f\xfb\x59\xf3\xbe\x1e\xa7\xa1\xa1\x7e"
- "\xaa\x94\x53\x66\x62\xcd\x88\xf9\x34\x63\xe4\xbb\xfb\xeb\x19\xea"
- "\x66\xfb\x7a\x66\x1a\xde\x9b\xf2\xad\xef\xf7\xbe\x9b\x52\xcf\xba"
- "\xc9\xc6\x2a\x78\xaa\x83\x9f\x6e\x65\x7c\x4b\x49\xed\xeb\x05\x7e"
- "\xc3\x5c\x0f\x33\x1c\x6b\xdd\xca\x0a\x4f\xb1\x11\x81\xf3\x49\xc6"
- "\xff\x42\xfe\xcb\x64\xbb\xf0\x43\x8b\xb0\x61\x56\xe4\x12\x3e\x61"
- "\x4d\x4d\xa0\x27\xd4\xf3\x49\x91\x4d\x73\x5c\x0c\xdf\x47\x07\x1e"
- "\xb5\xb0\x63\x39\x5e\xe6\xce\xa8\x61\x97\x0d\xa9\xec\xad\x9f\xd7"
- "\xb0\x6d\xa0\xe7\xb7\x9d\x63\xd1\xf2\xfc\x35\x29\x32\xd0\x9b\x64"
- "\x0c\x3c\x9f\x44\x36\x65\x38\x3f\x9f\x34\x9c\x68\xc8\xc0\xd2\xa4"
- "\xa8\x26\x6f\x0d\x9b\xd4\xc1\x92\x2e\x1b\x98\xe9\xf2\xf3\x49\xc3"
- "\x9b\xec\x5b\x51\x16\x88\x43\xc0\x95\xec\x59\x91\x9d\x2b\x82\xd3"
- "\x75\x19\x6c\x4e\xa7\x32\xfd\xec\xf0\x16\x36\x92\xec\x29\x92\x3d"
- "\x34\xb2\xe9\xaa\xc6\x97\xd4\x06\xe3\x57\xd9\x8b\x2e\x92\xfd\x0f"
- "\x3f\xe3\x7b\x9f\xf6\x58\xa5\xcf\x70\x85\xfa\xac\xf2\xa4\xe1\x36"
- "\x7a\x6e\xb2\x8d\x26\xda\x56\xed\xb6\x90\xaf\xa3\x28\x6a\x27\xd6"
- "\x69\xd4\xea\x93\x80\x65\x71\x92\x11\xe9\xa2\x11\x1f\xe3\xee\xf4"
- "\xb3\xe0\x84\xa7\xbd\x13\xed\xc2\xa7\x6d\xfc\x8e\x22\x66\x76\x16"
- "\xb1\x78\xeb\x77\xc5\x5c\x1a\x11\x7c\xfd\x69\x0f\x2f\xff\x69\x3b"
- "\x2f\x35\x26\xc8\xb8\x1f\x9e\xb5\xfe\x80\x31\xeb\xdd\xe2\x7d\xb3"
- "\xf5\x7e\x8c\x61\x7c\x89\x59\xd0\xdd\x82\x47\xfb\xe1\xaf\xe4\x1c"
- "\xff\x61\xe9\xe5\xc8\x57\x92\xd4\xf2\x96\xe9\x6a\xa9\xd1\x4a\xbe"
- "\xaf\xcf\x29\x3f\xcc\xe6\x95\xa7\x33\x79\xd5\x0b\x62\x2e\x22\x3c"
- "\xef\x72\xe4\xe3\xeb\x10\x57\x8f\xf2\x53\x2f\x2b\xc6\x56\xfc\x4e"
- "\x68\xf9\x33\xa8\xdf\xc1\x5d\x19\x19\xd4\x6f\xe1\x1f\x07\xfd\xb2"
- "\x61\xcc\xf8\xa8\x62\x97\xb0\x19\xdf\x0b\xf8\x6a\xfe\x43\x09\x1e"
- "\x04\x03\xb5\x37\x69\xb8\xe8\x6b\x6f\x52\x34\xe0\x4b\xb6\x53\x4d"
- "\x45\xf3\x90\x67\x4b\x71\x0b\xbe\xc5\x5c\x8e\x2f\x89\x22\x3f\x55"
- "\x6e\xbb\x97\x05\x37\x17\x37\x93\x6d\xb0\x97\x0a\xb0\xe6\x46\x16"
- "\x63\x8f\x2f\x3e\xa1\xad\x2d\x46\xed\x54\x2b\xbf\x32\x5f\x26\xdd"
- "\x7e\xb4\x0d\xed\x6b\xc5\x0f\xdf\x7f\x70\xe2\xf2\xf8\x8c\x1c\x3c"
- "\x6b\xd1\x56\x2b\x2f\x5f\x1a\x4f\xef\xf8\x66\x45\x9b\xdf\x21\x38"
- "\x10\x3c\x34\x58\xbc\x1d\x82\xc5\xb6\x74\xa4\xdb\xa3\x96\x37\x75"
- "\x78\x94\x1f\xae\xe3\xe5\xa0\x97\x42\xe9\x4e\x85\xd2\xfd\xd6\x27"
- "\xd3\x1d\xdf\x2a\xd3\xe5\xcf\x3a\xad\xcc\x2c\x95\xf0\x9e\x79\xfb"
- "\xb7\xe1\x3d\x73\x5c\x28\xef\x86\x6a\x99\xb7\x3e\x49\xe6\xb5\x51"
- "\xde\x27\xfb\xb7\x69\xe6\x8f\x43\xe9\x7f\xd5\x2c\xd3\x1f\x6c\x95"
- "\xe9\x7f\x6e\x09\x4b\xb7\x2a\x94\x6e\xf3\x5c\x99\xee\x7d\xbb\x4c"
- "\x97\xe5\xc0\xf7\x37\x07\x68\xcb\xeb\xa1\x3c\xbf\xf3\xc8\x3c\xed"
- "\xeb\x64\x9e\x62\xec\x49\x33\x4f\x5d\xd1\x96\xcf\x42\xe9\xf7\x68"
- "\xfd\xfe\x22\x41\xa6\x5f\xb5\x3f\x94\xee\x11\xed\x3e\x12\x7d\xff"
- "\x1a\xe9\x7e\x58\x72\x39\xb2\xae\x5e\xa6\x5b\x3b\x87\xe6\x23\xd2"
- "\x8c\x57\xcb\x33\xf2\x2f\x47\x3e\x91\x89\x72\xf2\x31\x36\x09\xf4"
- "\xc4\xd8\x25\xa8\xce\x05\xe0\x51\x67\x74\xd2\x39\x04\xe1\x5c\xec"
- "\x09\x8d\xc0\xbb\xc1\x81\xcf\x38\x1f\xc9\xea\x93\x7b\xa9\xa0\x0d"
- "\x36\x3f\x53\x33\x20\xbd\xb6\xe9\x97\xeb\x48\x37\x81\x70\x0a\xea"
- "\xfe\x98\x6c\xc6\xf1\xe2\x99\x9a\xac\xe9\x11\x71\xaf\x8d\x6c\x36"
- "\x90\x3c\x52\x8b\x13\xfa\xe5\x2a\xe6\x26\x78\xc3\x3a\xb2\xd3\x47"
- "\xf2\x47\xec\x51\x0d\x98\x73\x1d\xc0\x13\x43\x5e\x34\xa8\xb5\xf8"
- "\xd5\xe1\xe7\x7a\x91\xe4\x92\x65\x6c\x86\x2e\xb3\x1d\xb8\xad\x3f"
- "\xc2\xfe\xf7\xdb\xc6\x90\xdc\xea\x47\x56\x94\x75\xed\xfe\x5d\x94"
- "\x1f\x59\xaf\x72\x7e\x64\x14\xf6\xd4\xb7\x3c\xe3\x75\xaa\xd2\xbf"
- "\x3c\xd6\x22\x68\xb8\x1f\x2d\xc7\x9e\x5f\x22\x6c\xc1\x56\x15\xd8"
- "\xd5\x44\xec\x25\x67\x59\x84\xbb\xb0\x83\xd5\xaa\x1d\x06\x67\x0f"
- "\x33\x36\x61\x3f\xa5\xf4\xb5\xa0\x1d\xac\x4b\x22\x40\x47\xfc\x68"
- "\xbd\xf3\x92\x56\x5e\xcd\x96\x92\xe2\xc5\xd2\x8f\x36\xd1\x8f\xb4"
- "\x07\x01\xef\x44\x0b\xdf\x6a\x4b\x88\x7e\xfa\xd1\x61\xbc\x47\x51"
- "\x5a\xe0\x7e\x76\xf9\x37\x5b\x4a\x7a\xb6\x2c\x6a\xee\xb9\xed\x49"
- "\x4f\xef\xa8\x02\x7b\xef\x16\x87\x37\xf0\x9b\xcd\xde\xc0\x6d\x19"
- "\x25\xc1\x51\x8b\xd3\x51\x37\xf6\xa7\xad\x86\xbd\x6a\xad\x61\x6f"
- "\x91\xcb\x40\xe5\x1e\x2a\xda\x6d\x38\x58\xd4\x6c\x38\xa8\xd6\x19"
- "\x0e\x15\x39\xf1\xac\x21\x3f\x5b\xa0\x59\x1f\x8d\x3d\x58\xd4\x80"
- "\xfd\xf1\x51\xac\xc9\x47\xd2\x75\xf9\x28\x7f\x38\xc0\x9a\x76\x07"
- "\xd8\x3b\xf9\x17\x99\x37\x76\x41\x35\x7e\x35\xde\x91\xc5\x7e\xef"
- "\xc8\x17\x84\xff\x76\x3e\xaa\x54\xf4\x91\xee\x68\x1d\x54\x65\x9b"
- "\x35\x78\x50\x99\xab\x76\xd0\xd9\xa9\x6e\x27\x57\x99\x35\xf9\x5b"
- "\x76\x72\x0d\xd2\xc7\x5b\x9f\xad\xdc\xff\x2f\xec\xe4\x6a\x72\x04"
- "\xb2\x93\x0b\xde\xb5\x59\xe3\x5d\x5d\x9a\x4d\xa4\x68\xe2\x57\x85"
- "\x4d\x24\x87\x4b\xd8\x35\x12\xe7\xf5\x9b\x1d\xe9\x44\x87\x76\x97"
- "\xcf\xb2\xeb\x7c\x29\xd1\x56\xc1\x8d\x0b\xf6\xe0\xb7\x1b\xf1\xa0"
- "\xab\xce\x7b\xf5\x78\xbe\x65\x92\x93\x60\x12\xe4\x39\xdf\xef\xa6"
- "\xfb\x47\x3c\xe7\xc1\xe0\xe6\x67\x33\x83\x9b\x5f\x68\x46\xdc\x54"
- "\xfc\x1e\x08\x6e\x9e\x54\x85\xdf\x56\xfc\xaa\xf1\xab\xc1\x6f\x17"
- "\x7e\xbb\xf1\xab\xc5\x6f\x3f\x7e\x75\xf8\x1d\xc0\xcf\x85\x5f\xbd"
- "\xba\x79\xd2\x1e\xb2\xfb\x87\xb2\x9b\x31\x0f\x2c\x7a\xb9\x21\x78"
- "\xcf\x3a\x8b\xfe\xa7\x12\xdd\xc7\x63\x4e\x17\x72\xb2\x55\xf6\xea"
- "\xcf\x2a\x44\xfb\x09\x2f\xbf\xfa\xf3\x4c\xef\xb8\x2d\x76\xef\xb8"
- "\xcd\xad\xde\xd8\x6d\x51\xf8\x99\xf1\xb3\x78\x37\x97\x98\x31\x9e"
- "\xad\xde\x91\x25\x35\xdd\xe5\xb3\x31\xfe\x73\xa6\x4a\x99\xd3\x6c"
- "\xe0\xb8\x39\x9a\xfc\x69\x36\xf0\x7b\x7a\x3d\xbd\x7b\x47\x96\x66"
- "\x22\x0c\x9c\xf1\xb8\x48\xd7\x35\xaa\xc4\xaa\xdd\x5b\x2a\x41\xbc"
- "\xd3\x63\xfc\x91\x4b\xa6\x73\x78\xe8\x4c\x09\x71\xbb\xf4\x35\xd8"
- "\xcf\x97\xc6\x7c\xbb\x6d\xf1\x3c\x87\x6d\xd9\xa2\xdc\xf9\xd9\xcb"
- "\xee\xb7\x8e\xcf\xb2\x26\xe5\xe6\x3d\x67\x7b\x6e\x79\xf6\xf2\x6c"
- "\x41\x3e\x22\xea\xf6\x7e\x67\x4a\xe4\x33\x99\x05\xc0\xe7\xc4\xb4"
- "\x73\x4e\xfb\xf6\x2c\x1f\xc6\xe7\x96\x2d\x25\x07\xce\x79\x0d\x41"
- "\xd0\x6f\xd1\xed\x25\x58\x97\x05\xf6\x03\xe7\xfc\x86\xe8\x76\x2b"
- "\xe3\x58\x0b\xf4\xcd\xdd\xde\xac\xd1\x73\x1f\xb1\x46\xa2\xe7\x90"
- "\x66\xef\x12\xbf\xe1\x31\xca\xff\xdb\x8c\x92\x7d\x78\xe7\x5b\x56"
- "\x79\x29\x1f\x07\x8d\x27\x9e\xa0\xf1\x64\x78\x51\xf3\x41\xf1\x74"
- "\x78\x0f\x8a\x74\x8b\xd3\x0f\xd1\xf3\x52\x21\x6f\x44\xb9\x24\x5b"
- "\xe3\xbf\xfd\x19\x3b\x28\xf3\x78\x44\x1a\xac\xc3\x36\x25\x6d\x32"
- "\xa5\x13\x3c\x13\xda\xb8\x0f\xed\x28\x5e\xce\x8c\xfa\xda\x26\xbe"
- "\xa8\x6f\x7d\xaf\x20\x7a\xf7\xb1\xed\xb4\xbe\xa9\x3d\x1c\xeb\xf9"
- "\x75\xe4\xdd\xbb\x44\xf2\x91\xe0\x1d\x23\x88\x67\x24\x1c\x42\xb8"
- "\xc3\x5d\xd8\x2c\xf2\xd7\xaa\xcd\xe0\x39\x23\x28\xef\x67\xf4\xad"
- "\x1a\x34\x6a\xb5\xe0\x49\xd2\x2c\x3a\x1f\xb0\x6e\x94\xb4\x89\x14"
- "\x9d\xc9\xe8\xee\xf6\xd8\x73\xca\xec\x6f\x08\x7e\x04\x2f\x3a\xc3"
- "\xe5\xe5\xb3\x6b\xab\xe3\x98\x91\xfc\x0d\x04\x46\x6e\xd6\xec\x73"
- "\xa5\x65\xe8\xb4\xb5\x2f\x7e\x73\xbf\x3b\x3b\x72\xbc\xac\xd9\x4b"
- "\xe8\x34\x22\x4b\x1c\xfb\xcd\x5b\xb6\x6c\xf9\xe2\x6c\x6b\xf6\xbc"
- "\xf9\x39\x56\xf1\xd9\xba\x7c\x19\x92\xe4\xe6\x2f\xb3\x2e\x5d\xb9"
- "\xc4\xba\x78\x59\x2e\x71\x09\xd9\x79\x79\xcb\xed\xf9\xc3\x99\xcc"
- "\x69\x5d\xbc\x7c\x51\x7e\xae\x1d\x2f\xcb\xb2\x97\x64\x59\xc5\xa8"
- "\x2f\x43\x51\x8b\x16\x59\xb5\x1a\x96\xe5\xcc\xcb\xa3\x89\xb0\xe4"
- "\x19\x24\x0a\xcb\xdf\x9f\x87\x88\x26\x9b\x53\xb4\xef\x9c\x53\xd2"
- "\xdf\xaa\x37\x02\xd6\x55\x9b\x1b\x48\xef\x00\xe1\x3a\xc1\x57\x96"
- "\xa7\xe5\xd0\x19\xcd\x8b\xe8\x63\xd7\xf8\x9f\x63\xee\xa6\x4f\xd6"
- "\xfb\x46\x36\xde\x85\x8d\x43\xb2\x9f\xa9\xa4\xbf\x2a\xee\xd3\x61"
- "\x3d\x08\xbd\x94\xf2\xb4\xe7\x25\x2c\xd2\xb3\xc2\xed\x63\x4b\xfd"
- "\x9b\xf4\xd5\xf2\x7c\x23\xbd\x8e\x68\x23\xcd\x26\xbd\x82\x3c\xaf"
- "\x51\x1e\x75\xf3\x0b\xad\xc8\x57\x1d\xe2\x4f\xd2\xf3\x29\xbd\x48"
- "\x57\x9e\xf6\x2e\x1f\x59\x02\x3e\x25\x3d\x83\xda\x35\xc8\x1e\x63"
- "\xbd\x84\x72\x3f\xac\x65\xec\xce\x78\x96\x74\x69\xd3\xc2\x8a\xee"
- "\xb8\x05\xb5\x3d\x65\x6c\x68\x0f\xf6\x35\xbf\x81\x8d\xbd\x8c\x79"
- "\xb1\xea\x2e\x16\xb1\x7a\x36\x33\xd4\x2e\xac\x25\x1b\xad\xac\x71"
- "\xe6\x56\xe6\xce\xf4\x30\xb7\x7f\x0f\x6b\x74\xb5\xb1\x63\x81\xff"
- "\x94\xfe\x13\x0a\x88\xbf\x78\x7c\x0c\xd9\x8d\x2a\x5e\xcd\x83\xfb"
- "\xfe\xe4\x1d\xb2\xf7\x4c\x2d\xf9\x3d\x18\xeb\x0e\x7c\xe1\x72\x17"
- "\xee\x62\x6e\x87\xdb\x45\xf7\xe9\xcf\x29\x3f\x1e\x76\x10\xdf\x86"
- "\x35\x22\xdf\x63\x6c\x28\xe0\x18\xa4\x3a\x2a\xb6\xf0\xd6\x5f\x8d"
- "\xe2\x27\x7e\xb5\x85\x7b\x30\xa7\xc8\x8f\x41\xc7\xfa\x51\xbc\x73"
- "\xbd\x66\x1b\x8e\xe6\xa9\x7d\x05\xb3\x9c\x51\x7e\x5c\x25\x64\x1c"
- "\xd3\x45\xf8\x46\x84\x85\xee\x99\xdb\xb1\x85\xc2\xa3\x11\xde\x2f"
- "\xc3\x3b\x28\x7c\x13\xc2\xf5\x32\xfc\x2e\x85\x13\x10\x6e\x91\xe1"
- "\x26\x26\xef\x96\xff\xb8\x5d\x86\x3f\xa1\x30\x60\xff\x63\x9f\x6b"
- "\x05\xb5\xf7\x73\x8c\xd9\xe3\x4a\xf1\x67\xe0\x53\x1d\xa7\xc5\x7a"
- "\x38\x54\x94\x43\x32\x18\xac\x87\x1f\xff\xdb\x75\x27\x88\xc7\x7d"
- "\x3c\x31\x32\x85\x9e\x3f\x4e\x32\xf9\xd9\x50\xd0\x8c\xd7\xa1\x3f"
- "\x17\x09\x76\x03\xd2\x30\x7b\x7f\xbe\x2f\x2d\xc0\x5d\xfc\xd5\x0c"
- "\x07\xdf\x5c\xe0\xe5\xaf\x3e\xe9\xe2\x62\x9f\x7b\xa6\xb6\xb6\xc0"
- "\x2f\xec\xe4\x82\x4e\xc7\x1a\x7a\x7c\x1e\xb5\xc9\x0b\xba\x77\x10"
- "\xbb\x99\x66\xbe\xf9\x59\x2f\xf8\xc9\x9c\xd9\x49\x01\xd2\x21\x04"
- "\xad\xff\xf8\xc5\x77\x72\x88\x6e\x28\x9d\xaf\xee\x7a\xd2\xa5\x16"
- "\x67\x30\x9e\x98\xe1\x98\x9d\xc3\x5d\xd8\xc3\x14\x29\xef\xe6\x5f"
- "\xa0\xfe\x2f\x44\xbd\xe3\x33\x1c\xea\xca\x1c\xf2\xfd\x24\xf0\x4b"
- "\x11\xed\xe7\x2b\x80\x4f\x9e\xcf\x30\x05\x37\x97\x66\xbe\x93\x73"
- "\xea\xda\xfc\xa8\x29\x8f\x0f\xea\x2b\x89\xda\x14\xe4\x19\x2c\x80"
- "\x7a\x02\xe8\x2b\xd1\x0e\x7b\xd5\x06\x03\x68\x18\xc7\xeb\x4f\xb7"
- "\x0e\xe1\x2b\x33\x4c\xe8\xd3\x5d\xee\xa4\x8b\xac\xa9\x87\xd6\xca"
- "\x4f\xf6\xbf\xe3\x60\x6c\x86\x23\xe0\x32\x79\x85\x3e\x9b\xd9\xbe"
- "\x90\xdd\xcc\x47\x3e\xeb\x3d\xa3\xcc\x31\x3e\x56\x88\x3e\xa0\xef"
- "\x07\xdb\x5a\x8d\x2a\xfa\x31\x49\xc2\x8d\xf2\x75\x00\xb6\x39\x3a"
- "\x7f\x73\x6d\xed\xff\x89\x98\x37\xea\xb2\x0c\x46\xf7\xfc\xf6\x81"
- "\x5e\x51\x7b\x33\x4c\x2a\xf6\x23\xfa\xf6\x4e\xd2\x59\x46\x75\x4a"
- "\x58\xff\x44\xe8\x21\xf1\x44\xc0\x19\xf5\x93\x5d\x61\x1d\xae\x48"
- "\xdb\x11\xec\xcd\x19\x78\xfc\xb7\x94\xa6\xa0\x7d\x99\x7c\xf3\xa4"
- "\x81\xed\x42\x6f\x99\x64\x93\xf3\xe3\x67\x5b\xf1\xdb\xcd\x5f\xd9"
- "\xec\xf1\x8e\xff\x59\x9d\xf0\xcd\xb9\xc5\x91\xa9\xcb\x8a\xb0\xde"
- "\x30\x47\xe6\xfc\x5b\x6d\x51\xc7\xc0\x76\x55\x9d\x87\xa5\x4f\xb4"
- "\x21\x5f\x70\x53\x90\x7c\xfd\x5e\x24\x1b\xd5\x15\xef\x24\xf9\xae"
- "\x71\x4c\xe7\x34\x0c\x36\xa6\x54\xfe\x8c\xdb\x79\xef\xb5\x95\xf7"
- "\x84\x65\xd0\x39\xb2\x0b\x70\x89\x9f\x54\xd2\xc3\xa7\x2b\x92\x07"
- "\xf9\xe9\xdb\x04\xab\x00\xf6\x91\x82\x8f\x99\xc1\x8f\xfd\xf2\x3f"
- "\x7f\x5a\x61\x48\xc6\x3e\x13\x04\x2d\xf0\x7e\x73\x3d\x4b\x9b\xc5"
- "\x8a\x8f\xe5\x5c\x60\xba\xaf\x33\x3e\x6a\x95\xf7\xb5\x9f\x7a\x0d"
- "\x74\xe6\x44\xbe\xcd\x04\xbf\xbe\xa5\x38\xe5\xbf\x3e\xc1\x9e\x09"
- "\x3a\xe2\xf5\x4f\xbc\x86\x40\x57\x86\x55\xd8\xc8\x06\x1f\x51\x9c"
- "\xc3\xd5\xbe\x73\x28\xf2\xa3\xe0\xb4\x59\xc9\x77\xf4\x87\xe9\xcd"
- "\xe2\xee\xf5\x87\x19\xf5\xec\xc3\x13\x5b\x59\x63\xfb\x67\x74\x5f"
- "\xf0\x95\x0f\x33\x9c\x44\x4f\xc6\x04\x40\x33\x6e\x03\xcd\x88\xf5"
- "\x3a\x4c\x35\x1f\xae\xd0\xcf\xa2\xe8\x5c\x4a\xa7\x17\x03\x58\xa3"
- "\xd5\x9a\xbf\xb3\x40\xf9\x9c\x3d\xd5\xda\xb9\x14\xf9\x41\x7b\x79"
- "\x05\x4b\x7c\xd9\xa0\x66\x0c\x74\x0e\x15\xf3\x9c\xb0\xcd\x62\x51"
- "\x63\x0f\x57\xe8\xfe\xd0\x1e\x7b\xce\xca\xfe\x8c\xbe\xbf\x93\x74"
- "\xad\x6b\xf2\xa7\x42\xe7\x3c\x80\x79\x17\xc0\x9c\x0b\x00\x9e\x18"
- "\x03\x07\xc6\x6d\x40\x5e\x4c\x1f\x83\xde\x62\x7d\x0c\x32\x66\x8b"
- "\x31\x00\x0f\xf7\xfc\x93\xda\x18\x7c\x8a\x31\x68\xc7\x18\x94\xb1"
- "\x92\x0f\xe6\x34\xb2\xb4\x74\x8c\x41\xe7\x05\xb2\xaf\x2e\xfd\xcd"
- "\xe5\x4b\xd8\x8b\xb1\xf8\xd4\x6b\x68\xf2\xc9\x31\xd8\xf3\x73\x39"
- "\x06\x7b\x7f\xee\x05\x1d\xf3\xb3\xe6\xd7\x10\x0e\xae\xcc\xb0\x92"
- "\xef\x1c\x5e\x96\x49\xbe\xb1\xe5\x58\xf4\x62\x2c\x7a\xe5\x58\x14"
- "\x3d\x87\xb1\x68\x69\x15\x36\x5a\x3e\x3c\xd1\xc8\x1a\x33\x6b\xd8"
- "\x31\xe0\x25\x8c\xc5\x3c\x1a\x17\x92\x2f\x04\x9f\x4f\x8a\x7b\xa9"
- "\x80\xc5\x57\x17\x30\x8b\x3e\x1e\x6a\x2f\xc6\xa3\x00\xe3\xd1\x83"
- "\xf1\xf0\xf7\x8d\x47\xbc\x18\x8f\xb3\xda\x78\xf4\x90\x8e\x1b\xc6"
- "\xa3\x07\xe3\xd1\x83\xf1\x28\x93\xe3\x41\x78\xfe\x31\x9f\x89\xab"
- "\x7f\x4f\x62\x3b\xce\x0c\x30\x1e\xcf\x6b\xe3\xf1\xe9\xbf\x32\x1e"
- "\x19\x96\x6f\x8f\xc7\x4f\x03\xff\x68\x3c\x42\x6b\xe2\xc9\x6f\x68"
- "\x3c\x7a\x6b\xb4\x35\x71\x1b\xad\x89\x12\xc3\x9d\xff\x2f\x7b\x5f"
- "\x1f\x17\x55\x95\xff\x7f\x18\xa0\xb0\x50\x47\x17\x0c\x4b\x0b\x4d"
- "\x77\xb1\x7c\xaa\xaf\x96\xb6\xf6\x4d\x4b\x4b\x5b\x1f\xb0\x24\x51"
- "\xd1\xd0\x7c\x18\x48\x8d\x14\x0d\x1f\x78\x4c\x5b\x24\x1f\xb0\xc0"
- "\x50\x41\xb1\x2f\xee\x17\x4b\x8c\xf6\xab\x1b\xb6\x5a\xb8\x69\xa1"
- "\xf1\x64\xe9\x86\x2e\xea\x68\xe8\xa2\xa1\x4d\x88\x32\xe0\xcc\xdc"
- "\xdf\xe7\x73\xcf\x1d\xee\x3d\x33\xf7\xce\xcc\x1d\x51\xe4\xb7\xfe"
- "\xc1\x4b\xe7\xde\x3b\x67\xce\xfd\x7c\xde\xf7\x7d\xde\x9f\xcf\xfd"
- "\x9c\x73\x60\x2c\x42\x9b\x1e\x2e\xdf\xc7\x3f\x13\x70\xaf\x09\x3b"
- "\x5e\x33\x6a\x8a\xab\xc0\x2f\x33\x39\x33\x1f\x0f\x0b\x7e\xa1\xfe"
- "\x58\x62\xc8\xfd\x27\xb5\x7f\xe0\xcb\x38\x66\xe0\xb3\x81\xfe\x01"
- "\x3f\xc1\xf3\x23\xb7\x57\xa0\xf4\x7d\x2d\xb4\x69\xc1\xe7\x04\x9f"
- "\x11\x7c\x1e\x4a\x74\xa7\xf8\xbd\xd7\xbf\x0f\x2e\x22\xf8\xde\xf6"
- "\xfb\xd0\x7d\xe0\xab\x0c\x62\x7e\x07\x7c\xb3\x18\x9e\x13\x0f\xd2"
- "\x0d\xf7\x0c\xfc\x3e\x34\x19\xf5\x82\x16\x30\xdf\xc6\x0c\x7e\x32"
- "\xd7\x07\xdc\xb7\x1a\x62\xac\xad\x8b\xc5\xe7\x66\x8b\xb0\x3f\x32"
- "\x77\xcf\x84\x9d\x70\xdc\xcb\x04\x3e\x82\x67\x87\x79\x66\x9a\xf6"
- "\x4d\xfe\x39\x88\x64\x9d\x23\x3e\x6d\x23\xa8\x8f\xcc\x92\x67\x66"
- "\x4c\x04\x3e\x33\x09\xe0\xa3\xe3\x2a\x7d\x34\x89\xee\xd5\xd6\x09"
- "\xb8\xda\xbf\x5f\x02\x8c\x93\xe0\xa3\xd0\xd5\x4a\x3e\x32\xe7\x4c"
- "\xcc\x30\x6b\x67\x67\xe0\x3a\xef\x96\xb7\x26\x78\x58\x20\x7e\x6a"
- "\x84\xb8\xf5\x7b\x83\x89\x2c\x9f\x4a\x34\x4b\x4f\x91\x7b\xca\x26"
- "\xfc\x40\xca\xf4\x05\x04\xd7\x4c\xc6\xbc\x37\xee\x9d\x50\x66\x2a"
- "\x00\xbe\x7a\x1f\xf7\xfd\xd2\x64\xf1\x9f\x0d\x64\xd9\x54\xe2\xc9"
- "\xef\x25\x1a\x9a\x4d\x56\x03\x3e\xf3\x26\x67\x6b\x2c\x69\x73\x47"
- "\x72\x5a\xdc\xf3\x85\x14\xe2\xfc\xa5\xf8\x25\xc4\xb7\x44\x57\x8c"
- "\xeb\xc6\x9d\xc1\x75\x80\x4b\xeb\xa0\x4d\x03\xd7\x68\x86\x31\x63"
- "\x4b\x12\x57\x80\xeb\xe0\xf7\xc3\x31\x82\x5f\xd3\x62\x72\x09\x6a"
- "\x11\xcc\xff\x15\xc6\x6d\x02\xed\x35\x99\x5f\x5f\x0b\x8e\x79\x94"
- "\x44\x62\x9d\xc5\xb4\x61\xd8\x2f\x9a\x8b\xa7\xff\xf6\xc3\x3d\x17"
- "\x3b\xbd\xff\xe1\xfe\x38\x83\x57\x2a\xc4\xc3\xa0\xd1\xe0\xba\x29"
- "\x5d\x39\x1a\x1b\x16\x95\x1d\x33\xf2\x79\x58\x43\xbc\xee\x9e\xd4"
- "\xa5\xb8\xe6\x2e\xae\xa9\x8f\x63\xf6\xd4\xdf\x70\x3f\x64\x2e\x07"
- "\xc6\xab\x4e\x31\xe1\xf9\x33\x0c\x1a\x71\x5c\x9e\x32\x12\xc6\xb3"
- "\x82\x11\x41\x5c\x3c\xee\x3d\xf0\x15\xdc\x17\xc6\x41\x9f\x9c\x33"
- "\xf2\x9c\xf2\xe9\x8c\x64\x0d\xe6\x89\x8c\xc0\x0f\xc5\xff\xfc\x2b"
- "\xbf\xbf\xeb\x05\x8f\xb0\x49\x47\x42\x4d\x04\x7f\x3f\xa4\x17\xbe"
- "\x6b\x99\xb2\xba\x41\x73\x26\xb0\xe1\x9e\x10\x9f\xf8\x2a\x71\x6f"
- "\x4b\xe9\x1e\x96\xc8\x33\x79\x33\xa0\x4d\xe4\x99\x73\x09\x1a\xca"
- "\x2d\x43\x31\x57\xe9\x63\xcb\x2d\x25\x35\x97\x49\x1c\xe0\xb8\x44"
- "\x97\xcd\xef\x0f\xd1\x0e\xf8\xdd\xb2\x0c\xf8\xe4\x46\x50\xc7\x2c"
- "\xe0\x13\xe4\x81\x2d\xc0\x1f\x96\x65\x01\xf7\xad\x6d\x24\xbd\xad"
- "\x3c\x82\xda\x0b\xff\x9d\x0a\x18\x6d\x5f\x04\xc7\xc0\x4f\x16\xe0"
- "\x75\xe0\x93\xa0\xcd\x4b\x49\x8f\xcd\x80\xd1\x2c\xe4\x11\xd0\xc5"
- "\x63\xa3\x80\x47\xde\x01\x1e\x59\xcc\xef\x31\x1c\xb0\x45\x43\xf9"
- "\xe3\xcb\x73\xc9\x9a\x54\xeb\x1e\xe3\xbc\x7d\xc3\x2e\x97\x22\x3e"
- "\xc2\x13\xf8\xf9\x69\x66\x1c\x9f\x96\x85\x7a\x96\xd6\x01\x46\x36"
- "\xbc\x3f\x14\x8f\xf1\xcf\xed\x3b\xba\xfb\x2c\x14\x6b\x43\xd1\x26"
- "\x5b\xaf\x90\xfe\xfc\x3e\x9c\xbf\x06\xdc\xb7\x6e\x3e\xe9\xbd\xe5"
- "\x0a\xe9\xb1\x65\x3e\x09\x82\xe7\x55\xb3\x05\xfa\x30\xed\x6d\x2d"
- "\xe1\xf7\x61\xb8\x27\x44\x0b\xc7\x65\xf7\x61\x00\x5d\x1d\xb0\x05"
- "\x9f\x99\xb7\x82\x9a\xfa\x64\x4a\xcd\x0a\x34\x83\xed\xe8\xba\x49"
- "\x53\x47\xd0\xda\xe8\x71\x5a\xaa\xf3\xa7\xc6\xd0\xfa\xa4\x09\x7e"
- "\x10\xab\xdc\x7b\xc9\x63\x6a\x1f\xee\x83\x30\x9f\xa8\xa5\xb8\xfe"
- "\xb0\x70\x0e\xb4\xa7\x05\x7c\xd5\x37\x81\x24\x58\x3a\x7c\x97\x5b"
- "\x16\x03\xda\x09\xd7\x49\x56\xf5\x1c\x4e\xe5\xe7\x99\x9b\x53\xb3"
- "\x70\x8f\xf5\xa1\x96\x0f\xb2\x7a\x6f\xbd\x44\xfa\x73\x6f\x82\x3f"
- "\x22\xe1\x5e\x2f\x91\x1e\x99\x97\xe0\x5e\xdf\xa1\xf7\x6a\xdd\x53"
- "\xdd\x92\x74\x26\x08\xce\x39\xdc\xc3\xc8\xf0\x26\xee\x61\xf4\x27"
- "\x3d\x70\xd8\xef\xb8\xee\x84\x94\xd4\xf0\x6b\x56\xd4\x97\x99\x4e"
- "\x11\xfc\x5d\xcc\x1d\x95\xd5\x22\xa6\xa7\x75\x43\x2c\x5b\xb2\xd3"
- "\xf5\xaf\x57\x02\xb6\xeb\x75\x84\x83\xff\x7f\x75\xce\x80\x6b\x44"
- "\xf0\x9a\x4f\xef\x31\x25\x18\x75\xda\xd7\x70\x0c\xb1\x2f\xc1\x7c"
- "\x30\x62\x1e\xcf\xf3\xb8\x87\xef\x95\x55\x9e\x27\xd8\x9e\xb4\x1d"
- "\xf4\xbf\xb5\xad\x0b\x1e\xaf\x7b\x63\x5b\x88\x05\xcc\xf1\xe0\xb3"
- "\x46\x7d\x5f\x80\xb5\xe1\x01\x5c\xa7\x79\xe5\xf4\xb3\x01\xd7\x1e"
- "\xd1\x22\x06\x78\xac\x00\x7f\xe3\x9a\xa6\x1c\x17\xea\x09\x38\xc3"
- "\x7e\xde\x07\xfe\xee\x6f\xc5\x05\x1c\xf3\xb3\xc5\x46\xbb\x44\x2d"
- "\xc6\x34\x7e\xf8\x7f\x57\xf1\xa1\xce\x7f\xaf\x7b\x29\xd6\xbd\xf5"
- "\x98\xc8\xf3\x25\xf2\xa6\xf9\xaa\x84\x33\x6b\x28\x67\x22\x27\x59"
- "\x79\x93\xe7\x26\x7e\x1d\xfd\x02\xac\x91\xd5\xf1\x7d\x54\xc9\x9b"
- "\x25\x35\x22\x6f\x8e\x8d\x92\xf0\x66\x0d\xd7\x68\xe9\x29\xc7\x9b"
- "\xe1\xde\x2c\x6f\x86\xb7\x61\x79\xf3\x8d\x79\xb6\xbc\x69\xcf\x99"
- "\xe1\xa3\xe4\xf8\x12\xe2\x98\x47\x2e\x79\xbc\xd1\x45\x99\x2b\xc3"
- "\xa3\xd5\x73\xe5\xf4\x95\x2c\x57\x86\x17\xfc\xff\xcb\x95\x33\x3a"
- "\x33\x5c\xa9\x75\x91\x2b\x2f\xf1\x5c\xe9\xc7\xfd\x02\xcf\x84\xc0"
- "\x1f\x5b\x22\x15\xb8\x32\xd2\xc9\xb3\xf0\xa6\x12\x57\xce\x78\x9b"
- "\xe5\xca\x19\x39\x2c\x57\xce\x98\x24\x72\xa5\x70\xae\x59\xb8\x72"
- "\x46\x54\xcb\x70\xe5\x8c\x28\x9e\x2b\xaf\x20\x57\xbe\x31\xc6\x39"
- "\x57\x86\x2f\x97\xe7\x4a\x38\xce\x73\x65\xf8\x72\x91\x2b\x4f\x39"
- "\xe1\xca\x99\x4f\xa8\xe0\x4a\x3f\x9e\x2b\xb5\x0a\x5c\x19\x09\xb6"
- "\x12\x70\xc1\x63\xcf\x06\x1b\x02\x57\x06\x34\x71\xa5\x0b\xf8\x50"
- "\xe7\xbf\x99\x8a\xfb\x85\x21\x57\x5a\x52\xa9\xbe\x44\xae\xe4\x3a"
- "\x09\x5c\x39\xd7\x44\x96\x9e\x00\x8e\x3c\x76\x89\xdf\x6f\x83\xaf"
- "\xe7\x85\xbf\xe5\x93\x90\x8b\x96\x44\xed\x02\x7b\x95\xe9\xf3\x79"
- "\x6e\xe2\xe7\x64\x8d\x46\xae\xca\x87\x6b\x33\x9a\x74\x27\xcf\x9d"
- "\x27\x04\xee\x0c\x13\xb8\x73\xda\x4d\x70\xe7\x64\xf4\xe5\xac\x61"
- "\x0d\x1a\x2b\x77\x7e\x00\xdc\x39\x8b\xd7\x0f\xf8\x5e\x97\x72\xa7"
- "\x6e\xbf\xb5\x5f\x98\xd3\x2c\x8b\xde\x44\x68\xbf\x6a\xed\x79\xf4"
- "\x65\xbe\xbd\xf4\xc2\xc8\x1a\xd2\xc4\xa5\x61\x22\x97\x42\x5b\xf3"
- "\x94\x79\x74\xd6\xbe\x26\x1e\x4d\x02\x1e\x3d\x2d\xe1\x51\x88\x9b"
- "\x3e\x45\xce\x03\x1e\xad\xe7\x79\xf4\x4b\x81\x47\x67\x97\x1c\x09"
- "\x03\x1e\x7d\xd9\xca\xa3\xb3\x89\x31\xe9\x4c\xa0\xf1\x3d\xe7\x3c"
- "\x5a\xcf\xf3\x68\xd4\xad\xe7\xd1\x83\x36\x3c\x0a\xb1\x2b\xee\xab"
- "\x2e\xcb\xa3\x56\x3c\xf2\x3c\x9a\x20\xf2\x28\x6f\xd7\x39\x11\xa5"
- "\xe1\x60\xf7\xf0\x28\x3e\x76\x6b\xe2\xd1\xa8\x7c\xca\xa3\x70\x8c"
- "\xcf\x9f\x2c\x04\x1e\x05\xfc\xc5\x97\xc0\x7d\xc3\xf3\x02\x7d\xd4"
- "\x22\xbf\x6e\x85\x67\x06\x6d\xd4\xc4\xa7\x91\xf0\xcc\x20\xc7\x5c"
- "\x85\x67\x06\x78\x74\xda\x35\x2d\xe1\x9f\x97\xf7\xe0\x79\xb9\xa4"
- "\xb0\x07\x98\xb5\xe6\x56\x91\x4f\xe7\x1c\x60\xf9\x74\x4e\x1d\xcb"
- "\xa7\x73\x76\x88\x7c\x2a\x9c\x43\x3e\x05\x9f\x81\x7d\x72\x91\x53"
- "\xdd\xe3\xd3\x39\x85\x4d\x7c\xaa\x11\xf8\x34\xd2\x39\x9f\xf2\xef"
- "\x05\x15\xf8\x54\xca\x0d\xca\x7c\x3a\xa7\x50\xe4\x53\x5d\x56\x13"
- "\x9f\x56\x28\xf1\xe9\xac\x83\xf2\x7c\x0a\xc7\x79\x3e\x9d\x75\xb0"
- "\x89\x4f\x2b\x64\xf8\xf4\x65\x29\x9f\x46\xac\xa1\x7c\x9a\x4f\xd7"
- "\xc8\x00\x4e\x2d\xad\x03\x7c\xe0\x33\x17\x9d\xc1\x73\xaa\x05\x38"
- "\x15\xf7\x45\xc5\x7d\x61\xb0\x8e\x5e\x8e\x53\x29\xe7\xea\x09\xf2"
- "\x2a\x3e\x9b\xf1\x63\x20\xde\x85\xb1\x08\x6c\xc2\x8f\xbd\x56\xfb"
- "\x6d\x95\xf0\xeb\xeb\x4b\xb4\xa8\xed\x18\xac\x58\xac\x58\xb9\x1a"
- "\x84\x75\xc0\x0c\x56\xd4\xf9\x32\x62\xb5\x12\xb7\x2a\xc5\xee\x47"
- "\x30\x76\x0f\x21\x9a\x65\x21\xc0\xaf\xa1\x18\xbb\xe7\xda\xc4\xee"
- "\xb9\xf6\xb1\xfb\x71\xc7\x3c\xaa\x2a\x76\x7f\x0d\x7d\x18\xb9\x8a"
- "\xe5\xd1\xc8\x35\x2c\x8f\xce\x6f\x83\xfd\xa2\x3c\x9e\x2b\x1f\xbb"
- "\xf3\xcf\x79\xe4\x89\xa6\xd8\xbd\x82\xe5\x4f\x31\x76\x9f\xb7\x57"
- "\x99\x47\xdf\xf4\x62\xf4\xe8\x34\x81\x47\x67\x08\x3c\x3a\x43\xe4"
- "\xd1\xef\x7f\xb0\xea\xd1\xb9\xdd\x0e\x57\x48\x79\xf4\xcd\x91\x4d"
- "\x3c\x5a\x69\xcf\xa3\x56\x0e\x45\x3e\xc5\x76\x30\x97\xb5\x13\x78"
- "\xfa\xb3\x19\x51\x1a\x9a\xab\x0d\x47\xdb\xf9\xd8\xe6\x6a\x4b\x6a"
- "\xae\x91\xb8\x30\xe4\xd3\x0c\x9e\x4f\xdb\x7b\x90\xe9\xc0\x7d\xed"
- "\x70\xde\x40\x26\xbe\xd3\x5f\x4c\xf7\x55\xc2\xfc\x92\xe5\x1d\xba"
- "\x47\xa1\x35\xcf\x04\xf7\xcb\xbf\xcb\x9f\x7a\x4a\xe0\x54\xdc\x7b"
- "\x1c\x30\xb7\xf9\x3a\x70\xea\x62\x19\x6d\xba\x0c\x38\x75\xa9\x44"
- "\x9b\xc2\xb3\xff\xe5\x0c\x5b\x4e\x9d\xbb\xa7\x14\xb1\x82\x9c\xca"
- "\xc4\xf1\xb9\x77\x40\x1c\x3f\xaf\x2d\xcb\xa5\xf3\x86\xb2\x5c\x3a"
- "\xf7\x9a\xc8\xa5\xc2\xb9\x66\xd1\xa6\xf3\x7c\x5b\x46\x9b\xce\xf3"
- "\x15\xe3\xf8\x79\x17\x9b\xb8\xf4\x98\x12\x97\xbe\xe9\x2b\xcf\xa5"
- "\x70\x9c\xe7\xd2\x37\x7d\x9b\xb8\xf4\x98\x4c\x1c\xcf\x70\xe9\xfc"
- "\x12\xca\xa5\xb9\x54\x9b\x56\x58\xb5\x69\x6e\x2b\x8c\xe3\xe7\x17"
- "\xab\x8d\xe3\x8f\xd4\x50\xfe\x44\x7e\xb2\x72\xa8\x18\xc7\xe7\x2a"
- "\xc7\xf1\x4e\x38\x54\x95\x16\xe5\x39\xf4\xad\x12\x96\x43\xdf\x3a"
- "\xca\x72\xe8\xc2\x61\xb6\x1c\x6a\xcf\x9f\x51\x1d\xe4\xb8\x93\xc6"
- "\xf1\x0b\x0c\xca\xbc\x19\x35\x44\x3d\x6f\xbe\x3d\x89\xe5\xcd\xa8"
- "\x84\xff\x0c\xde\x7c\xfb\x32\xc3\x9b\x5a\x17\x79\xf3\xb6\xc4\xf4"
- "\x0b\x6c\xf2\x9f\x0b\x6c\xf2\x9f\x0b\x24\xf9\xcf\x05\xcd\x98\xff"
- "\x5c\xd0\x42\xf9\xcf\x05\xc3\x45\x0d\xba\xb0\x9b\x73\xde\x8c\x1a"
- "\x2e\xcf\x9b\x70\x9c\xe7\xcd\xa8\xe1\x22\x6f\x3a\xd3\xa0\xd1\xde"
- "\x2a\x78\xf3\x0e\x8f\xe9\xa3\x1d\xe6\x3f\xe5\x62\x7a\xe4\x4d\x9e"
- "\x2f\x2b\x6c\x62\xfa\x10\x69\x4c\x9f\x2b\xc6\xf4\x23\x29\x6f\x95"
- "\x99\x52\xd9\x98\xbe\xd9\x79\x74\x91\xbf\xb1\x29\x1f\x9a\x02\x3c"
- "\xba\xa8\x33\xde\x9b\xb1\x29\x1f\x1a\x93\x65\xed\x17\x8d\xe9\x3f"
- "\x20\xb4\x5f\x32\x31\x3d\x5f\x3b\xbc\x28\xa2\x29\xa6\xaf\xb0\x8d"
- "\xe9\x63\xc6\x28\x73\xea\xa2\x54\xd9\x98\x1e\xe3\x6f\x9e\x53\xa3"
- "\x78\x4e\xbd\xbe\x41\xca\xa9\x8b\xf3\x78\x4e\x7d\xd1\xca\xa9\x8b"
- "\x8e\x19\xe1\xd9\x34\xde\xe3\x9c\x53\xb1\x1d\x91\x53\x75\xb7\x87"
- "\x53\x0b\x5d\xe7\x54\xe9\x9c\xd5\x2f\xe1\xde\x9b\x38\x95\xb7\xf1"
- "\x3b\xa3\x4a\xc3\x91\x53\x75\x36\xf1\x7d\xae\x7c\x7c\x7f\x98\x68"
- "\xd0\x3e\xd6\xf8\x1e\x7d\xc0\xf3\xcd\x2d\x8d\xef\xdf\xd9\xc6\x72"
- "\xeb\x3b\xc7\x58\x6e\x7d\x67\x95\xc8\xad\xc2\xb9\x66\x89\xef\xdf"
- "\xc9\x6e\x99\xf8\xfe\x9d\x6c\x91\x5b\x63\x62\x9d\x73\xeb\xa2\x0c"
- "\x79\x6e\x5d\x94\x41\xb9\x75\x51\x86\x43\x6e\x7d\x51\xca\xad\x4b"
- "\xe6\x59\xb9\x55\x8c\xef\x01\x1f\xf8\xfc\x45\xa7\xba\x1f\xdf\x8f"
- "\x6a\xe9\xf8\x7e\xc9\x5c\x55\xf1\xfd\x06\xe0\x59\x88\xc5\x97\x1d"
- "\x85\xf8\x7e\xbc\x10\xdf\x57\x66\xdb\xc4\xf7\xd9\x76\xf1\xfd\xf2"
- "\xf1\x02\xa7\xc2\x33\xc5\x73\xea\x8c\x5c\xf7\xe3\xfb\x57\xd0\x87"
- "\x4b\x23\x58\x4e\x5d\x3a\x8f\xe5\xd4\x58\x33\xf6\x8b\x72\x7a\xb6"
- "\x7c\x7c\xcf\x3f\xe7\x4b\xf7\x32\xf1\x3d\xf4\xcf\x3e\xbe\x8f\xcd"
- "\x63\x38\x75\x9a\x94\x53\x97\x56\x31\x3a\x15\xee\x0b\x39\x75\xc7"
- "\x69\xca\xa9\x9f\x9c\x96\x70\xea\xd8\x4f\x04\x4e\x5d\xee\x7f\x78"
- "\x82\x94\x53\x97\x05\x59\x39\x95\xe7\xcb\x69\x46\x4d\x7c\xa8\x7d"
- "\xdd\x09\x5f\xef\x83\xb5\x40\xd0\x36\xce\x15\xc3\x36\xf3\x4e\xeb"
- "\x9c\xd7\x9b\x84\xca\xd7\x9b\x94\x45\xeb\x49\x71\x55\x2a\x5f\x67"
- "\x92\x89\x75\x26\x89\xa4\x5b\x66\x23\x5d\x2b\x80\x5f\xe7\x50\x61"
- "\x9d\x80\xa9\x93\x44\x9e\xc5\x9a\xac\xcd\x58\x93\x75\x9d\xd6\x00"
- "\x81\xbf\xed\xd7\x06\xb0\xea\x26\xe0\x83\xbd\xa7\x6d\x79\x76\xf9"
- "\x8e\x52\xc4\x4f\x98\xce\x26\xe6\xcf\xbe\x03\x62\xfe\x58\x0f\x96"
- "\x5f\x63\x07\xb0\xfc\xba\xfc\xa2\xc8\xaf\xc2\xb9\x66\xd1\xae\xb8"
- "\xbc\x7f\x4b\x68\xd7\x58\x22\xc6\xfc\xb1\xa7\x9a\xf8\xb5\x5c\xc2"
- "\xaf\xa7\xa5\xfc\xba\xb4\x86\xe7\xd7\xd3\xb6\xfc\x0a\xc7\x79\x7e"
- "\x5d\x5a\xd3\xc4\xaf\xe5\x36\x31\xff\x69\x5b\x7e\x8d\x3b\xc0\xf3"
- "\x6b\x65\xb6\x8d\x76\xcd\x76\x1e\xf3\x57\xde\x69\x31\x7f\x5c\xa1"
- "\xaa\x98\x1f\x39\x75\x2e\xe5\x54\xe4\x2c\x2b\xaf\x8a\x31\x7f\xb6"
- "\x62\xcc\xef\x8c\x57\x55\x69\x55\x9e\x57\xe3\x0f\xb0\xbc\x1a\x7f"
- "\x88\xe5\xd5\x77\x47\xd9\xf2\xaa\x3d\xa7\x26\x78\xcb\xf1\x29\x8d"
- "\xf9\x93\x8c\xca\x5c\x9a\xd0\x5f\x3d\x97\x26\x4e\x67\xb9\x34\x21"
- "\xfa\x3f\x97\x4b\x13\xaf\x31\x5c\xaa\x75\x91\x4b\x6f\x4b\x1e\x20"
- "\x69\x0c\xcb\xa5\x49\x09\x2c\x97\x26\x0d\x14\xb9\x54\x38\xd7\x2c"
- "\x5c\x9a\x34\xba\x65\xb8\x34\x69\xb4\xa8\x55\xdf\xed\xe5\x9c\x4b"
- "\x13\x06\xc9\x73\x29\x1c\xe7\xb9\x34\x61\x90\xc8\xa5\xa7\x9c\x70"
- "\xe9\x8a\xb6\x2a\xb8\x94\xcd\x03\xd8\x72\x69\x8b\xe7\x01\x56\xf8"
- "\xaa\xca\x03\x58\xb9\x74\xbc\x7d\x1e\x00\xf9\x95\xcf\x03\x80\xbd"
- "\xac\x1c\xc6\xe7\x01\x86\x53\x2e\x2b\x33\x25\x33\x79\x80\xe6\xe7"
- "\xd6\x95\x5d\x8d\x4d\xf9\xd4\x24\xe0\xd6\x95\xdd\x78\x6e\x6d\xca"
- "\xa7\x26\xef\xb5\xf6\x8b\xe6\x01\x52\x08\xed\x97\x4c\x1e\xe0\x79"
- "\xbe\xbd\xb7\x99\x3c\x80\x84\x6b\xa1\xad\x08\x65\x9e\x5d\x99\xc1"
- "\xe4\x01\xce\x89\x3c\x7b\x1d\x6b\xd4\x81\x07\x79\x9e\xed\x24\xe5"
- "\xd9\xf7\x0e\xf3\x3c\xfb\xbc\x95\x67\x57\x56\xd6\xc3\xb3\x59\xaf"
- "\x96\x67\x71\x1e\xc1\xe9\xf0\x96\xe1\xd9\x02\x15\x3c\x2b\xc9\x0d"
- "\xec\x05\x7b\x34\xf1\x2c\x6f\xf7\x3f\xcf\x2a\x0d\x43\x9e\x0d\xb7"
- "\xc9\x0d\x64\xcb\xe7\x06\x0e\xb5\x44\x6e\xe0\xcf\xfb\x59\xbe\xfd"
- "\xb3\x81\xe5\xdb\x3f\x6f\x17\xf9\x56\x38\xd7\x2c\xb9\x81\x3f\xef"
- "\x6b\x99\xdc\xc0\x9f\xf7\x89\x7c\x9b\xbc\xd1\x39\xdf\xae\xcc\x96"
- "\xe7\x5b\x38\xce\xf3\xed\xca\x6c\x87\x7c\xfb\xbc\x94\x6f\x57\xad"
- "\xb2\xf2\xad\x98\x1b\xc8\x16\x72\x03\xc9\xce\x73\x03\x95\x0a\xb9"
- "\x81\x11\x2d\x9d\x1b\x58\x95\xac\x26\x37\xd0\xb0\x81\xd6\xed\x2f"
- "\xc3\xba\xfd\xa9\xc0\xbf\xc1\x3f\x80\x0d\x9c\xd7\xed\x2f\xb7\xd6"
- "\x9f\x86\x67\x08\x3c\x9b\x21\x9b\x1b\x38\x52\xad\x9c\x1b\x38\x72"
- "\x4c\x5a\x7f\x9a\xb2\x92\x7d\x6f\x95\xb2\xca\xfa\xde\xea\xc8\x3f"
- "\x91\x67\xd7\xae\xc7\xcf\x96\xb4\x84\x6c\xba\xde\xf6\xda\x54\xec"
- "\xa7\x5c\x1d\xff\x97\x16\xe9\xbb\xac\x94\xf3\x4d\xb9\x82\x72\xe4"
- "\xdb\x0c\x62\xe1\x74\xf7\xe0\x7a\xdf\x7c\xae\xe0\x35\xc4\xde\xda"
- "\x61\x52\xde\xfd\xea\xa4\x94\x77\xdf\xd7\x5a\x79\xd7\x0c\xbc\xbb"
- "\xff\x5c\x06\xcd\xbf\x4e\xa6\xb5\xa9\x3b\x27\x4b\x6a\x53\x7f\xf8"
- "\x87\xc0\xbb\xab\xdb\x1e\xd6\xc3\xfd\x3b\xaa\x9f\x82\xef\xef\x3a"
- "\xe9\x6a\x0d\x6a\x86\x6c\xed\x94\xc0\x4f\xb2\xf5\x53\xd0\x57\x6d"
- "\x96\xf0\xac\x9a\xe1\x39\xcd\x92\xd4\x4f\x65\x2e\x85\xe7\x59\x98"
- "\x57\xe2\xb0\x0e\x75\xb2\x58\x87\xca\xa5\xc5\x57\xe2\xf8\x66\x49"
- "\x4f\xc8\x6e\xe4\x74\x9e\x9c\x5f\x7c\x25\xfe\xfe\x8d\x1b\x30\xee"
- "\xbc\x10\xea\x49\xe3\xba\xf8\x42\xe0\x9e\x76\xd4\xee\xab\x47\x9a"
- "\x61\xac\x31\xc3\x58\x63\x49\x8b\x2f\x34\xa1\x36\xd9\x10\x7f\x30"
- "\x13\xe2\x3c\x53\x12\xbf\xff\xe0\x7d\x6b\x21\xd6\xdb\x8a\x71\xde"
- "\x15\x78\x36\xe2\x83\x34\xd8\x1f\x2b\x8f\xb6\xaf\x86\xfb\xb8\xe2"
- "\x58\xcb\x99\x7e\x15\x79\xb4\xf0\xe5\x23\xf0\x9b\x6b\x9e\x2d\x45"
- "\xec\x86\x8a\x73\x0a\x78\xcd\xac\x50\x2b\x8b\x7d\xa1\x6b\x2c\x02"
- "\x16\x9a\x21\x27\x21\xed\x0f\xcb\xeb\x6b\xd2\x59\x5e\x5f\x53\xc4"
- "\xf2\xfa\x9a\x58\x91\xd7\x85\x73\xc0\xeb\xe0\x37\x5e\x47\xc3\xd8"
- "\xe7\xa6\x8e\x5e\x93\x66\xe5\x75\x8b\xc0\xeb\x5b\x5c\xe0\x75\x87"
- "\x3a\x5a\xc2\x4b\xca\xbc\xbe\x26\x4d\xcc\x49\xac\x7d\x5b\xb6\x46"
- "\xf6\xa4\x94\xd7\xdf\x0f\xe0\x79\xfd\xa4\x2d\xaf\xc3\x71\x9e\xd7"
- "\xdf\x0f\x50\x9c\x4f\x70\xd2\xf6\x7d\xda\xba\x10\x9e\xd7\x2b\x84"
- "\x1a\xd9\x72\x15\xf3\x09\x2a\x28\xa7\x5b\xb9\x1c\xf3\x55\x2d\x9b"
- "\x93\x58\x37\x41\x4d\x4e\x82\xe7\xf2\x1a\xca\xe5\xc8\x8d\x56\x3e"
- "\x77\x65\x3e\x81\x33\x3e\xb7\xea\x66\xe4\x73\x25\xdd\xcc\xf2\x79"
- "\x6a\x08\xcb\xe7\xa9\x93\x58\x3e\x4f\x0b\x61\xf9\x3c\x6d\x82\x2d"
- "\x9f\xdb\x73\x79\xea\x0e\x39\x1e\x8f\x7a\x0d\x73\x14\x69\x5e\xca"
- "\x1c\x9e\x7a\x4c\x3d\x87\xaf\x3f\xfa\x1f\xc7\xe1\x5a\x5b\x0e\xff"
- "\xc0\x17\x39\xc8\xfc\x9e\x0d\x87\x47\x0a\x1c\x2e\xf0\xc8\xd6\x4b"
- "\x82\x16\xb6\xe5\xf0\x1a\xb8\x0f\x27\xf1\xb8\xe9\x17\x5b\x0e\xff"
- "\xd0\x83\xe1\x70\xad\x13\x0e\x8f\xa4\x79\x10\xa6\x2e\x57\x21\x17"
- "\x02\xf7\xa1\xcd\x52\xd0\xe6\x56\x9b\x49\xfb\xc3\x72\xf8\x87\x93"
- "\x58\x0e\xff\x70\x35\xcb\xe1\x1f\x0e\x13\x39\x5c\x38\xd7\x2c\xda"
- "\xfc\xc3\xd0\x66\xd7\xe6\x56\x7c\x38\xe4\xf0\x0f\x43\x45\x6d\x9e"
- "\x36\xd0\x39\x87\xa7\x56\xca\x73\x38\x1c\xe7\x39\x3c\xb5\x52\x71"
- "\x9e\x83\x1d\x87\xa7\xfb\xab\xe0\x70\x36\x17\x62\xe5\x70\x21\x17"
- "\xb2\x55\x92\x0b\x31\x27\xd1\x5c\x48\xd6\x25\x8a\x8d\x76\x1e\x14"
- "\xa7\x80\x9f\x80\x2d\x1a\xc7\xb1\x5b\x96\x5b\x79\x90\x74\x3f\x35"
- "\x79\x10\x9e\xbf\x71\x8e\xc3\x24\xe0\xed\x72\x17\xe7\x38\x8c\xb4"
- "\xce\x71\x48\x55\x98\xe3\x20\xf0\xf9\xb4\x9b\xe0\x73\x7e\x8e\xc3"
- "\x86\x9e\x6c\x8e\x79\x43\x2f\x6b\x8e\x99\xf2\xf9\xa6\xc1\x2c\x9f"
- "\x6f\x1a\xd4\x34\xe7\x01\x38\xbf\x2c\xea\x03\xbb\x39\x0f\x4d\xdc"
- "\xce\xe7\x41\x37\xac\x2a\x7c\xad\x8a\x34\xf1\x7b\x98\xc8\xef\x17"
- "\x3c\x36\x5e\x64\xb8\xfd\x9c\x94\xdb\x37\xe4\x33\xdc\x7e\x3a\x83"
- "\xad\x8f\x38\x17\x25\xe1\x76\xeb\x9c\x87\x8f\xf2\x0e\x57\x3a\xe1"
- "\x76\xf8\xbe\xeb\x73\xc4\x9a\x97\xdb\xad\xf3\x1b\x64\xb9\x5d\x3a"
- "\xbf\x41\x52\xff\x80\xdc\xce\xef\x93\xe1\x6f\xc3\xed\xcb\x74\x1a"
- "\xf3\x37\xf0\x3c\x00\xaf\xe3\x33\x62\xe6\x80\xdb\x79\x7b\x7f\x54"
- "\x2d\xe5\xf6\x1b\x49\x94\xdb\x37\x5f\xba\x79\x6e\x6f\xd2\xc3\x52"
- "\x6e\x7f\x11\xb9\x3d\xe3\x3c\x9d\x7f\x91\xe0\xda\xfc\x0b\x9b\xfa"
- "\x8c\xcd\x2e\xe4\x5f\x1c\x72\xbc\x4c\xbf\x58\x8e\xdf\xf8\x2c\xcb"
- "\xf1\x1b\xa3\x58\x8e\xdf\xd8\x53\xe4\x78\xe1\x5c\xb3\xe8\xf4\x8d"
- "\x43\x5a\x26\xff\xb2\x71\x88\xc8\xf1\x9b\x3a\x3b\x9f\x7b\xb1\xa1"
- "\x40\xbe\x36\x03\x8e\xf3\x1c\xbf\xa1\xc0\xe1\xdc\x0b\x26\xdf\xbd"
- "\xb9\x8d\xec\xdc\x8b\xf2\xdb\x57\x9b\x21\xc5\x8a\x6d\xfe\xc5\xfd"
- "\xdc\xf7\x66\x1f\xb5\xf9\x17\x9c\x7b\xb1\xec\xb8\x64\xee\x45\xa5"
- "\xf3\xb9\x17\xcb\x43\x5c\xcc\xbf\x38\xa8\xcd\x38\x12\x2c\xad\x77"
- "\xcb\xf4\x66\xf9\x3d\xb3\x4d\x13\xbf\xbf\x82\xfc\x9e\xdd\x95\xe5"
- "\xf7\xec\x2e\xd8\x4f\xb9\xb9\x18\x5f\x32\xef\x15\x33\x67\xb1\xb5"
- "\x1a\x36\xf9\x97\x57\x10\x7b\x5b\x4b\x18\x7e\x3f\x2d\xe5\xf7\xcc"
- "\x54\x39\xed\x8e\x79\x6f\xbe\xa6\x78\x9a\x64\x4e\xdb\x58\x6b\xfd"
- "\x5b\xd6\xc6\xc3\xa1\x70\xff\x7a\x85\x5a\xb7\x69\xb4\xd6\x8d\xaf"
- "\x6d\xc3\x3c\x38\xb4\xf5\xd9\xb4\x28\x4d\x5c\x38\x67\xc1\x5a\x37"
- "\xdb\x3a\x37\xac\x7d\xc3\x5a\xb7\x12\x5d\xaa\x62\x9d\x1b\x62\x53"
- "\xa9\xd6\x0d\xfa\xed\xc7\x73\xfd\x59\x81\xeb\x85\x5a\xb7\xcc\xc5"
- "\x62\xad\x1b\xc3\xf5\x32\xf5\xc3\x7b\x4f\x27\xc8\xeb\xf8\x78\x91"
- "\xeb\x1b\x51\xc7\xff\xd1\x26\x17\xc3\xfb\x20\xeb\xd8\x6d\xcd\xc5"
- "\xf0\x5c\xbf\xe5\x70\x29\xe2\x38\x2c\x4a\x26\x17\x63\x5f\xe3\x7c"
- "\xfb\x72\x31\x5b\xbb\xb1\x1c\xbf\x75\x02\xcb\xf1\x5b\xdb\x88\x1c"
- "\x2f\x9c\x6b\x16\x8e\xdf\x1a\xd8\x32\xb9\x98\xad\x81\x62\x2e\x66"
- "\xab\x59\xb6\xfe\x8e\xc9\xb1\x67\x66\xc8\xe7\xd8\x33\x85\xfa\xbb"
- "\xcc\x0c\xc5\x39\x21\x76\xef\x34\xb3\xcf\xd2\x1c\xbb\x1b\x73\x42"
- "\x2a\xef\xb4\x5c\x4c\xb6\x5e\x6d\x2e\x86\xaf\x6d\x3e\x8e\xf5\x21"
- "\xea\xe6\x84\x38\xe3\xf6\x26\xed\xee\xe0\x1d\x26\xcb\xed\xdb\xce"
- "\xb2\xdc\xbe\xed\x3c\xcb\xed\xdb\x2f\xb3\xdc\xbe\xbd\xc6\x96\xdb"
- "\xed\x79\xfd\xe3\x81\x72\x9c\x1e\xf5\x0a\xe6\x62\xb6\x67\x2a\xf3"
- "\xf9\xc7\xe1\xea\xf9\xfc\x7f\x22\xfe\xa3\xf9\x5c\x6b\xcb\xe7\xff"
- "\x93\x73\x5b\xf3\x32\x3c\x9f\xe7\x6c\x64\xf8\x5c\xeb\x84\xcf\x6f"
- "\x5b\x5e\x26\xe7\x37\x96\xcf\xb7\xf7\x60\xf9\x3c\xe7\x84\xc8\xe7"
- "\xc2\xb9\x66\xc9\xcb\xe4\x18\x5a\x26\x2f\x93\x63\x10\x35\xfb\xf6"
- "\x12\xe7\x7c\xfe\xb1\x4e\x9e\xcf\xe1\x38\xcf\xe7\x1f\xeb\x14\xeb"
- "\xa9\xed\xf8\xfc\x2f\x79\x2a\xf8\x5c\xb6\x46\xe5\xce\xc8\xcb\xfc"
- "\x65\xa7\xda\xbc\x8c\xd2\x3c\x15\xe4\x77\xb1\x3e\x45\x32\x4f\x65"
- "\xa8\x75\x9e\x4a\x02\x5b\x9f\xd2\xec\xdc\xfe\xbf\xfb\x59\x6e\xff"
- "\xdf\x03\x2c\xb7\x7f\x7a\x8a\xe5\xf6\x4f\x2b\xad\xfd\xa4\x79\x99"
- "\x24\xbb\x79\x2b\x2c\xcf\xe7\x76\x2b\x7c\xa5\x8a\xc8\x71\x3d\xb4"
- "\xb5\x46\x99\xe7\x73\x47\x2a\xf1\x3c\xd6\xab\x7c\x3a\x4d\x27\xc3"
- "\xf3\x3b\xc6\xff\xff\xc0\xf3\x4a\x75\x28\x7c\x1c\x04\x1c\x8f\x7c"
- "\xcf\xf3\xbb\xc0\xf5\xc8\xf3\xe6\xbf\xcb\xe5\x68\x76\xac\xbe\x55"
- "\x3c\xaf\x9c\xa3\xf9\x64\x55\x69\x98\xc0\xf3\xae\xcc\xa1\x39\xc0"
- "\xe6\x68\x32\x23\x6f\x75\x8e\xe6\x93\xb3\x2c\xdf\x7f\xea\xc7\xf2"
- "\xfd\x27\x87\x45\xbe\x17\xce\x35\x8b\x7e\xff\x44\xdf\x32\x39\x9a"
- "\x4f\xf4\x22\xdf\x7f\xba\xdf\x39\xdf\xe7\x06\xcb\xf3\x7d\xae\xb0"
- "\x36\x5b\x6e\xb0\xeb\x7c\xbf\xb3\x89\xef\xed\xe7\xcf\x24\xb8\x5f"
- "\x23\x33\xac\xa5\x73\x34\x3b\x15\xf9\xdf\xd1\xfa\x18\xee\xe7\x68"
- "\x84\x39\x89\x33\xe4\xd7\xc7\x38\xec\xa0\x46\xe6\x70\xb1\x94\xeb"
- "\xf3\x76\xb0\xb5\x88\x79\x79\xd6\x5a\xc4\xc3\xa5\xc8\xf5\x9f\x1f"
- "\x67\xb9\xfe\xf3\x63\x4a\x39\x9a\xbd\x16\x69\x4d\xe2\xae\x36\x6c"
- "\x8e\x26\x9b\xcd\xd1\x8c\x45\xec\x7d\xbe\x52\x99\xeb\x77\x0d\x60"
- "\x6b\xc0\xe9\x1c\xc5\x1d\xd3\x84\x1a\xf0\x69\x92\x1a\xf0\x97\x3f"
- "\x16\xb8\xfe\xb3\xf1\x45\xe5\x26\xa2\xa6\x0e\xf1\xe6\x6b\xbd\x93"
- "\x65\x6b\x10\xf9\x31\xc0\x41\x1d\xe2\xeb\x27\xb4\x58\xd3\x1c\xb4"
- "\x65\xb1\xa4\x0e\xd1\xc1\x7a\xc6\x0c\xff\x4f\x8b\x52\xe4\xff\x06"
- "\x4e\xe4\x7f\xcb\xd3\x62\xde\xc6\x82\x3a\x9f\xf7\xcb\x67\xab\x6f"
- "\x55\xde\x46\x2e\x4f\x52\xf8\x3c\xf2\x7f\x7e\x22\xd5\xf9\xba\x3b"
- "\x2c\x6f\x93\x7f\x82\xe5\xfd\xcf\x7d\x59\xde\xcf\x3f\x20\xf2\xbe"
- "\x70\xae\x59\x6a\xd1\xf3\x2b\x5a\x46\xe7\xe7\x57\x88\x79\x9b\xcf"
- "\xf7\x38\xe7\xfd\x5d\x43\xe4\x79\x7f\xd7\x10\xca\xfb\xbb\x86\x38"
- "\xcc\xdb\x30\xb5\x91\x7f\xdd\x78\xd3\x79\x1b\xab\xce\x6f\xf1\x79"
- "\x3d\x7f\xcd\x50\x93\xb7\x69\x9a\x93\x7e\x53\x79\x1b\x79\xbe\xb7"
- "\x6a\xfb\xc3\x0e\xde\xb9\xb2\x7c\xff\x7f\x1b\x59\xbe\xff\xbf\x2c"
- "\x96\xef\xbf\xd8\xcb\xf2\xfd\x17\x05\x72\x79\x1b\x96\xeb\xff\xef"
- "\xb2\x1c\xcf\x47\x8d\xc5\xbc\xcd\x17\x3a\x65\x8e\xdf\x1d\xa0\x9e"
- "\xe3\xf7\x0c\xbc\xcb\xf1\x36\x1c\xaf\xb5\xe5\xf8\x3d\x51\xb7\x55"
- "\xe3\xf3\x1c\xff\xb7\x59\x0c\xc7\x37\x63\x2e\xc7\x95\xf9\x24\xca"
- "\xda\xfe\x6f\x36\xf5\xef\x7f\xb3\xa9\x7f\xff\x9b\xa4\xfe\xfd\x6f"
- "\x86\xe6\xe3\xf8\xbf\x35\x7f\xfd\xbb\x4b\x1c\xff\x37\x49\xfd\xfb"
- "\x17\x1b\x9d\x73\xfc\xee\x40\x79\x8e\x87\xe3\x3c\xc7\xef\x0e\x74"
- "\xa8\xed\x19\x8e\x2f\x88\xbd\x15\xb9\x9c\x96\x99\x6f\x54\xb0\x5c"
- "\x4d\x3e\xc7\xd1\xba\x23\x8a\xf9\x9c\x41\xd6\x7c\x4e\x94\x42\x3e"
- "\xa7\xb9\x38\x7f\xef\x1a\x96\xf3\xf7\xae\x67\x39\x7f\xff\x01\x96"
- "\xf3\xf7\x17\xb2\xf9\x9c\x05\x76\xf9\x1c\x96\xff\xf7\xfe\x56\x38"
- "\x56\x9a\xcf\xc9\x96\xe4\x73\xf6\xbf\xad\xcc\xff\x5f\x2a\xf2\xff"
- "\x75\x9e\xff\xc3\x65\xf8\xff\xef\xff\x21\xfc\x1f\x7e\x13\xfc\xff"
- "\xf7\x16\xe0\xff\x7d\xf3\x68\x8e\xc7\xc5\x75\x52\xf6\xaa\xcf\xf1"
- "\xdc\xdc\x38\xb0\xef\x10\x3b\x0e\xec\x33\xb2\xe3\xc0\xbe\x3c\x71"
- "\x1c\x10\xce\x35\xcb\x38\xb0\xef\x60\xcb\x8c\x03\xfb\x0e\x8a\xe3"
- "\xc0\xfe\x6d\xce\xc7\x81\x2f\x15\xc6\x81\x2f\x85\x71\xe0\x4b\x15"
- "\xe3\xc0\x57\xeb\x95\x73\x3c\x51\xee\xe7\x78\x06\xb7\xf4\x3c\xa8"
- "\xaf\x52\x55\xe5\x78\x36\x24\x26\x14\xe3\x1a\x29\x67\x89\x66\xd9"
- "\x74\x6b\x8e\xa7\xd0\x26\xc7\x53\x68\x97\xe3\x59\x72\x56\xe0\xff"
- "\xd1\xc2\x7c\xd3\xb1\x37\xb1\x46\x0a\xbf\x97\xf4\xd7\x6b\xd8\xba"
- "\xf9\xaf\x79\xfe\x17\xd7\xef\xfb\xa6\x2b\xf6\x8b\x8e\x3f\x85\x0e"
- "\xd6\x40\xfd\xfa\x14\x93\xd3\x19\x2d\xb7\x46\xca\x3f\x98\xba\x1b"
- "\x76\xbe\x69\xa1\x0f\xc3\xf7\x63\xe9\x7c\xd3\x4f\xe4\xde\xd3\x36"
- "\xad\xc9\x7f\xa0\x33\xbf\x26\x7f\xd3\x5a\x7e\x85\xa3\x5d\x5a\x4b"
- "\x7a\x9a\xb0\x96\xf4\xe9\x16\x58\x4b\xda\xd5\x35\xf9\x4f\xdb\xae"
- "\xdf\x77\x60\x4f\x59\x71\x21\x29\x45\x8c\x84\xd9\xae\x7d\x5a\x28"
- "\x3f\x77\x5f\x23\xcc\xdd\x9f\x7f\x6b\xd6\x41\xc1\xfe\xf0\x63\x7e"
- "\xc7\xef\xb2\xf3\xe2\x0c\x7c\x7f\x70\xdf\x6e\xf0\xf3\xe0\x62\xc0"
- "\xaa\x05\xf9\x74\x01\xf2\xe9\x3f\xe6\xf2\xd7\x9e\x05\x2c\x74\x9c"
- "\xe0\x83\x38\x5e\x6b\x21\xbe\x51\x8b\x91\x5b\xff\xc1\xd7\x7d\x81"
- "\x8c\x00\x6e\xa5\xd7\xc5\x9e\xe5\xcc\xe6\x8e\x61\xf8\x2c\xde\xbb"
- "\x6b\x7e\xb9\x77\xa9\xbe\x0e\x9e\x8b\x4b\xfc\x3e\xae\x65\xa6\xfa"
- "\x42\xf4\xc5\x57\xf3\xcb\xbd\x38\xe0\xdf\xad\xb3\x89\x8f\xba\xe7"
- "\xf4\x1f\xfc\x3e\xf5\xfc\xdc\xf5\x8e\xdf\xed\xc4\x75\x40\xac\xda"
- "\xca\xf2\xab\x98\xdf\xca\x02\xfb\x58\x38\x3a\xf6\xbd\x1e\x41\x79"
- "\x03\x7e\x2f\x08\x6c\xc9\xd7\xd8\x22\x6f\xf0\x7b\x58\x01\x6f\x6c"
- "\xa9\x15\xdf\x63\x63\xfb\x68\x23\x9a\x47\xf9\x87\x58\xff\xa2\x57"
- "\xe2\xd6\x42\xad\x3c\xb7\x16\x6a\x29\xb7\x16\x6a\x9b\xb8\x55\x2f"
- "\x93\x47\x61\xea\xd8\xbf\x11\xea\x5f\x0a\x6d\x34\x76\x61\x2b\x5c"
- "\x1f\xe5\x1b\x55\xf5\x2f\x3c\x9f\xce\xa5\x7c\x8a\x7c\x65\xe5\x54"
- "\x31\x8f\x52\xa8\x98\x47\x71\xc6\xa9\xaa\xe6\xf0\xf3\x9c\x7a\xf0"
- "\x2c\xcb\xa9\x07\xcf\xb3\x9c\x5a\x34\xcb\x96\x53\xed\xf9\xf4\x50"
- "\x4f\x39\x2e\xa5\xeb\xa3\x14\xf9\x29\xf3\xe8\xa1\x60\x25\x1e\xe5"
- "\xeb\xd3\xa7\x49\xea\xd3\x9b\x78\xf4\xdb\xe9\x2c\x8f\x1e\x4a\x73"
- "\x95\x47\xf9\xbd\x4d\x4e\xdf\x86\xbd\x4d\xdc\xe6\xd1\x28\x1b\x1e"
- "\xfd\xd6\x2c\xf2\xa8\xed\xfe\x26\x4e\x78\x34\xf2\xd6\xac\x81\xc2"
- "\xf0\xa8\xc5\xc0\xf7\x27\x70\x3e\xf6\xf5\xbb\x44\x96\x47\xbf\xdb"
- "\xad\xcc\xa3\xdf\x8d\x17\x79\x94\x5e\x77\x6b\x79\xf4\xbb\x04\x86"
- "\x47\x23\x25\x3c\xfa\x8b\x18\x43\x60\x8d\x45\x13\x8f\xce\x93\xf0"
- "\x68\xa4\x33\x1e\xfd\x2e\x01\x6d\x44\x35\x6a\xd1\x08\xe7\x3c\x7a"
- "\x28\x54\x9e\x47\xe1\x38\xcf\xa3\x87\x42\x45\x1e\x95\xd1\xa8\x0c"
- "\x8f\x1e\xee\xa5\x82\x47\xef\xf0\xb5\x51\x0e\x07\xa9\xca\x55\x88"
- "\x73\x3a\xed\xd7\x48\x9d\x2a\x9d\x13\x54\x60\xb3\xef\x49\x81\xdd"
- "\xbe\x27\x4b\xac\x73\x3c\x47\x0a\xbc\xfa\xf2\x4d\xf0\x2a\x3f\xc7"
- "\xf3\xc8\x60\xb6\xf6\xe4\xc8\xb3\xd6\xda\x13\xca\xab\x25\x47\xad"
- "\xfd\x12\xf7\x3d\x29\x70\xb0\x46\xea\x91\x35\xcc\xda\x28\x23\xa5"
- "\x6b\xa3\x94\x24\x2a\xaf\x91\x7a\x64\x37\xb3\x36\xca\x91\xdc\xa6"
- "\x7d\x4f\x6c\xd7\x48\x15\x39\xf6\xfb\x43\x3c\xc7\x36\xad\x41\x75"
- "\xc4\xd8\xb4\x46\xaa\x93\x79\x41\xd8\xce\xae\x73\xba\x5b\xcf\xb1"
- "\x85\x2a\x38\x96\xd9\xf7\xc4\x76\x8d\xa9\xe2\x88\xb2\xa2\x02\x52"
- "\x1a\x5e\x20\xb3\x36\x6a\x41\x8b\xee\x7d\x82\xfd\x92\xe7\xda\xe2"
- "\xcb\x2c\xd7\x96\x04\xf2\xd7\x9e\x92\xe3\xda\xe2\xfd\x22\xd7\xd2"
- "\xeb\x62\x4f\xd9\x70\x6d\xa5\x02\xd7\xc2\xb8\xba\xf5\x82\x5a\xae"
- "\x2d\xae\xe1\xb9\x36\x49\xe0\xda\x4b\xcd\xcd\xb5\xc5\x35\x22\xd7"
- "\x96\x7c\xee\x7c\x8f\xa9\x23\xfb\xe4\xe7\xe5\x1c\xd9\x47\xb9\xf6"
- "\xc8\x3e\x87\x7b\x4c\x31\x35\x1f\xa5\xdb\xac\x7b\x4c\x89\xf9\x80"
- "\x02\x21\x1f\xd0\x9a\xf7\x44\x29\xcd\x56\x9b\x0f\xf8\x1e\x62\x77"
- "\x9c\x77\xb9\x0c\xf7\x9c\x0a\xc3\x3d\x51\xf2\x6d\xf2\x01\xf9\xf6"
- "\xf9\x80\x49\x8e\x39\x56\x55\x3e\x80\x9f\x77\x59\x96\xc5\x72\x6c"
- "\xd9\x36\x96\x63\x7f\x1c\x6c\x9d\x67\x89\xfd\x51\x5e\x33\xb5\xec"
- "\x72\x53\x3e\xa0\x92\xe5\x56\x31\x1f\xf0\xc3\x45\x65\x8e\x2d\x67"
- "\xf3\xbf\x2f\xe7\x32\xf3\x2c\x3f\x39\x27\x5d\x87\xda\xba\xfe\xd4"
- "\xd1\x81\x87\x8f\x49\x39\xb6\x3c\xac\x35\xad\x43\xdd\xb4\xd6\x94"
- "\x93\x5a\x6e\xfb\x75\xa8\x8f\x1e\x2d\x2b\xca\x27\x38\xb7\x8d\xe7"
- "\x5b\x26\x37\x90\xdf\x32\xb9\x81\xa2\x7c\x85\xdc\xc0\x0f\x21\x2c"
- "\xcf\xfe\x90\xcc\x5f\x7b\x42\x8e\x67\x7f\xe8\x29\xf2\x2c\xbd\x2e"
- "\xf6\x84\x0d\xcf\x56\x34\xa7\xa6\xfd\x61\xc2\xad\xcd\x0d\xfc\x30"
- "\x41\xcc\x0d\xfc\xe8\xc2\xfc\xc7\xf2\x40\x79\x9e\x2d\x17\xf2\xae"
- "\xe5\x62\xde\xb5\x42\x66\xbf\x14\x86\x67\x7f\x34\x5b\xe7\x3f\xf2"
- "\x9a\xb6\xd2\xaa\x69\xf3\x5b\xe1\x7e\x29\x3f\x9a\xd4\xe6\x06\x70"
- "\x9e\x3b\x72\x2b\x72\x97\x95\x5f\xc5\xdc\x40\xbe\x72\x6e\xc0\x09"
- "\xbf\xaa\xdf\xbb\xef\x98\x99\xe5\xd7\xe3\x1e\x2c\xbf\x56\xac\xb1"
- "\xe5\x57\x7b\x6e\x3d\x3e\x4c\x8e\x57\x69\x6e\xa0\x62\x88\x32\xa7"
- "\x1e\x9f\xab\xc4\xa9\xfc\x9a\x7e\xe7\xc4\x1a\x69\x91\x53\xff\xb9"
- "\x8a\xe5\xd4\xe3\xf9\xae\x72\x6a\x8b\xec\x97\xe2\x36\xa7\xea\x6c"
- "\x38\xf5\xa7\x9e\x22\xa7\xda\xee\x99\xe2\x84\x53\x6f\x55\x9e\x40"
- "\xca\xa9\x8c\x76\xfd\x69\x07\xcb\xa9\x3f\x55\x2a\x73\xea\x4f\x4b"
- "\x44\x4e\xa5\xd7\xdd\x5a\x4e\xfd\x29\xf7\xd6\xe6\x09\x7e\xca\x15"
- "\xb5\x6b\xc5\x3c\xe7\x9c\x7a\x3c\x5a\x9e\x53\x8f\x47\x53\x4e\x3d"
- "\x1e\xed\xfa\x9c\xf2\x13\xe3\x55\x70\xea\x1d\xbe\x97\xca\x89\x60"
- "\xd5\x79\x02\xcc\xb7\x22\x97\x56\xde\xdc\xda\x21\x31\xd6\xb5\x43"
- "\x86\x0b\x1c\xfb\xe2\xcd\x72\xec\xc9\xe9\x6c\x4d\xc3\xc9\x59\xd6"
- "\x9a\x06\xca\xb1\xa7\xbd\xd9\xfd\x51\xed\xd7\x0a\x61\xd7\x50\x3d"
- "\xb9\xa7\x29\x4f\x80\x9c\x3b\x5c\x9a\x27\x38\xb5\x47\x99\x6f\x4f"
- "\x56\x32\x79\x82\x6f\xe5\xf9\xf6\x3a\xc3\xb7\xff\x6a\xe0\xf9\xb6"
- "\x69\x0d\xd5\x7f\x05\x5a\xd7\x50\x75\xaa\x61\x19\xbe\x0d\xbf\x3d"
- "\x7c\x5b\xe0\x3a\xdf\xb2\x7b\xa9\xd8\xae\x97\x5a\x99\x55\x76\x10"
- "\xf8\x96\x5f\xaf\xc3\x76\xcd\x54\xd7\xd6\xeb\xb8\x55\x6b\xa6\x62"
- "\xbf\xe4\x79\xf7\x54\x37\x96\x77\x4f\x4d\xe0\xaf\x95\xe5\xdd\xca"
- "\xdf\x44\xde\xa5\xd7\xb9\xcc\xbb\x6e\xe5\x0c\x4e\x05\xde\xda\x9c"
- "\xc1\xa9\x40\x91\x77\x4f\x9d\x77\xce\xbb\x27\xab\xe4\x79\xf7\x64"
- "\x15\xe5\xdd\x93\x55\x0e\x79\x97\xa9\x21\x38\x7d\x5c\x76\x2d\x8f"
- "\xca\xd6\xbe\xcf\xca\xe9\x63\xee\xe4\x0c\x80\x83\x35\xcb\x71\x0d"
- "\xa7\x70\xac\x21\x70\x9e\x33\x70\xc6\xb7\xea\x73\x06\x67\x8e\xb2"
- "\x7c\x7b\xe6\x38\xcb\xb7\x3f\x27\x62\xbf\x1c\xe6\x0c\x78\x0e\xd0"
- "\x77\x6b\xca\x19\xe8\x59\x9e\x15\x73\x06\x3f\x3f\xa1\xfc\xee\x4b"
- "\x3f\x9a\xd1\xb7\x2f\xda\xac\x59\x3d\x4d\xe4\xdb\x23\xa5\xd6\x9a"
- "\xb1\xb3\xb1\x87\x83\xa5\x7c\xab\x4f\xb5\x5b\xb3\x7a\x42\x33\xae"
- "\x59\x3d\xa1\x99\xd7\xac\x0e\x61\xd7\xac\xde\x74\x5d\xac\x23\x53"
- "\xbf\x66\xf5\xb9\xce\x3c\x07\x23\x86\x70\xdd\x6a\x57\xf2\x08\xb7"
- "\x78\xaf\x15\x86\x7b\x99\x3c\xc2\xb9\x2c\x96\x7b\xcf\x95\x2b\x73"
- "\xef\xb9\x79\x22\xf7\xd2\xeb\x6e\xad\xe6\x3d\x97\x79\x6b\xf3\x08"
- "\xe7\x32\xc5\x3c\xc2\xcf\xd3\x65\xb9\x97\x79\x37\xa6\x9f\x20\xff"
- "\x6e\x0c\x8e\xf3\xdc\xab\x9f\xa0\x98\x47\xb0\xab\xdf\xaa\x1a\x41"
- "\xdf\x8d\x09\x9a\x57\xaf\x22\x8f\x70\xc7\xd5\x18\x54\x0d\x77\x27"
- "\x8f\x80\x7c\x8b\x7c\x66\xe5\x5c\x57\xf2\x08\xcd\xaf\x71\xcf\x8f"
- "\x60\x39\xf7\xfc\x28\x96\x73\xab\x2f\xda\x72\xae\x3d\xdf\x9e\x5f"
- "\x25\xc7\xb5\x34\x8f\x50\x9d\xa1\xcc\xb3\xe7\x77\x2b\xf2\xac\x4d"
- "\x6d\xae\xc8\xb3\x17\xce\xb3\x3c\x7b\xde\xe8\x16\xcf\xba\xba\x07"
- "\xcb\x1d\xc5\xb3\xe1\x36\x3c\xfb\xef\x44\x91\x67\x6d\xf7\x61\x71"
- "\xc2\xb3\xb7\x68\x1f\x16\x65\x8d\x5b\xed\xcd\xf2\x6c\xf5\x20\x65"
- "\x9e\xfd\xf7\x71\x91\x67\xe9\x75\xb7\x96\x67\xab\xbd\x6e\x6d\x6e"
- "\xa1\xda\x4b\xd4\xb8\xd5\x87\x9d\xf3\xec\xf9\x7d\xf2\x3c\x7b\x5e"
- "\x78\x2f\x76\x7e\x9f\xa2\xc6\xb5\xe3\xd9\x8b\x79\x2a\x78\xf6\x0e"
- "\xaf\x41\xb8\xa8\x6a\xfd\x0b\x49\xbe\xf6\x9e\x32\xbd\xcd\x7c\x89"
- "\x13\xd2\xf9\x12\x92\xdc\xc2\x70\x6b\x6e\x81\xdd\x9f\x25\xc6\x9a"
- "\xbf\x1d\x2a\xf0\xee\xf3\x37\xcb\xbb\x97\xf6\xd7\x37\xf1\xee\x02"
- "\xe0\xdd\x4b\xfc\xfc\x88\xfa\x26\xde\xbd\xb2\xc8\xda\x2f\x71\x7f"
- "\x16\x85\xdc\xc2\x33\xd8\xde\x2f\x1d\x9a\x72\x0b\xc8\xc3\x43\xa5"
- "\xb9\x85\x2b\x3d\x95\x39\xf8\x97\x41\x4c\x6e\xe1\x1f\xf2\x1c\x5c"
- "\xc7\x70\x70\x4d\x04\xcf\xc1\xcf\x58\x39\xf8\x97\xe5\xd7\x21\xb6"
- "\xbc\xfe\x9e\x3a\x0e\xae\xe3\x39\x78\x64\xcb\x70\xf0\xee\x66\xe0"
- "\x60\xde\xee\x97\xdb\x96\x15\x02\x07\x87\x21\x07\x8f\x74\x2d\xdf"
- "\x70\x9b\xf6\x68\xc1\x7e\xc9\x73\xf1\xe5\xf5\x2c\x17\x5f\x3e\xc8"
- "\x5f\x2b\xcb\xc5\x97\xa7\x8b\x5c\x4c\xaf\xbb\xb5\xf9\x86\xcb\xa9"
- "\xb7\x36\xdf\x70\x39\x55\xe4\xe2\x2b\x21\xce\xb9\xf8\x97\xa1\xf2"
- "\x5c\x0c\xc7\x79\x2e\xfe\x65\xa8\x43\x2e\x7e\x46\xca\xc5\xbf\x36"
- "\x69\x5e\x26\xdf\xa0\x6f\xed\x7b\xb7\xfc\xaa\xa8\x7f\x03\x1f\x26"
- "\x09\xe7\x3c\x7e\xcd\x2a\x83\x48\xe6\x6a\x12\x49\x28\x33\x3d\x43"
- "\xe0\x18\xd8\xef\xd7\x43\x65\x01\x83\x88\xe5\x83\x39\x41\xc8\xc7"
- "\x1f\xe2\x1f\x68\xdc\x54\x8d\xf0\x6c\xf1\x36\xfe\x95\xaf\x77\xc5"
- "\xe3\xc8\xbd\x5b\x25\xe7\xe5\x7e\x8b\x4b\x9d\x9d\x4b\xbf\x67\x08"
- "\xa4\xf3\x6e\x66\xef\xb4\x7e\x46\x6c\xea\x3d\x0c\x3d\xb8\xf5\xb3"
- "\x73\x0c\x1d\x66\xe7\xc8\x7d\xbf\xbb\x96\xf8\xb4\x4b\xe4\xb8\x2d"
- "\x1b\xb8\xba\xab\xbf\x9f\x1c\x75\x35\x85\x90\xd4\x0d\x9c\xa1\xfe"
- "\x3d\x43\x18\xdc\xe3\x8a\x8f\xe0\xba\xab\x1d\x4f\x47\x5d\x4d\x0a"
- "\x26\x70\x2c\xca\x7a\x0c\xec\x46\x2c\x49\x9e\x9c\x05\xce\x71\x1b"
- "\xfa\x86\x6d\x8d\x03\xae\x5a\x4e\x48\xdf\xeb\xf8\xcc\x18\x12\x00"
- "\x33\x7e\x6b\xa1\xcd\x75\xd0\x16\xf7\xc0\x43\x75\x80\x47\xaf\xd2"
- "\x15\x04\x9f\xe9\x64\xb8\xaf\xec\xb5\x68\x7b\xcf\xc7\x32\x38\x8d"
- "\x17\xb1\x6c\x9f\x54\xc4\xf9\x27\x25\x80\x3f\x48\xea\x02\xc2\xaf"
- "\xc9\xba\x0e\xae\xe3\x34\xf1\x9c\xa5\x67\x68\x70\x99\xa9\x8e\x3e"
- "\xd3\xd0\xbf\xaf\x20\x8e\xe5\xe0\x77\xb7\x2c\x20\x5a\xf8\xf3\xe5"
- "\xd2\x93\x12\xea\xdf\xfb\x0d\xfd\x61\xc0\x7e\x29\xdd\xe3\xba\x4d"
- "\x30\xee\x3c\x14\x80\x63\x07\xff\xfb\xf8\xdb\xfc\xef\x68\x2c\xc9"
- "\x66\x38\xce\x25\xc5\x73\x65\x31\x26\xd2\x1e\x6c\xb1\x15\xfa\x8d"
- "\x78\xb4\xfc\x65\x72\xd4\xbb\x0f\x12\xb2\x6b\x69\xb5\xa6\x0c\xfa"
- "\x6e\xfe\xe8\xa1\xba\xc2\xb8\x27\x09\x9c\x37\x60\xcc\x72\xc1\xa3"
- "\xd6\x7b\xdc\x45\x42\x90\x4f\xe0\xff\x1d\xea\x60\x1c\x1b\x03\x9f"
- "\xd7\xc1\x7d\x58\xae\x06\x78\xe1\xb5\x17\x3c\x7e\xdb\x5f\xb8\xf8"
- "\x24\x69\x1f\x45\x7c\xd6\xc2\xbd\xd1\x6b\x7f\x5b\x8d\xd7\xea\x3d"
- "\x6a\xb5\xd8\x07\xf8\x9c\x0d\x9f\xf1\x7b\x58\x43\x46\xb8\x9c\x49"
- "\x45\x3c\x36\xd3\x92\x12\x2c\x3d\x27\x15\xf1\xdc\x07\xf7\xb9\x0e"
- "\xee\x19\xae\xf1\x85\x6b\x7c\xf9\x7f\xe3\x88\x36\x0d\x8e\x61\x3b"
- "\xf0\xaf\x6f\xe1\xfc\x46\x6c\x7b\x39\xb6\xad\x60\x07\x2f\xce\x2f"
- "\x29\x81\x03\x6c\xe3\x98\x1a\x18\xe7\x71\xf4\x9c\x47\x6d\x7e\x7b"
- "\x0f\x8e\xe3\x72\x42\x83\xdf\x8d\x23\xbe\xa9\x16\x42\x0a\x1f\xc4"
- "\x76\x6a\x57\x41\xfb\x5e\x68\x8b\xfa\xf7\x6a\x75\x7a\x8f\xdf\xfc"
- "\xd0\xbe\xe0\xcf\xba\xc0\xee\xfc\xfd\x16\xe2\xef\xe0\x77\x84\xeb"
- "\xf9\xb5\xef\xb1\xcf\x81\x71\x9e\x1c\x7c\xde\xe1\xe9\x71\x96\x78"
- "\x06\xb4\xed\x01\xdf\xcf\xd5\x93\x9d\xc7\xf0\xfb\x7a\xfa\x3d\xc0"
- "\x52\xed\x3e\xc0\x66\x7f\x3c\x86\x9f\x15\xfa\xeb\x6b\xf5\x5b\x49"
- "\x00\x60\xc3\xd6\x77\x56\x8c\x00\x2e\xac\x18\xc1\xfe\x7e\x16\xa7"
- "\xd7\xf0\xe3\xb0\xc7\x55\x3e\xae\x5b\x0b\x3e\x34\x6f\x0e\xf0\x5a"
- "\x07\xb6\xb5\xdc\x40\xbf\x9c\x83\x73\x75\x1e\xe8\x97\x75\x4b\xc1"
- "\x27\xf4\xda\x1e\x62\xff\xf1\x73\x1d\xef\x4f\x0b\xf8\x82\xce\xdd"
- "\xbc\x7a\x1c\xef\x67\xdd\x75\xf0\x63\x27\xae\xee\x60\x0c\xf4\x0b"
- "\x71\x0b\x18\xd9\xb5\xc0\xa8\xc1\xba\x3e\x3c\xfe\x55\xad\x51\xb3"
- "\xee\x12\x41\x5d\x49\xd6\x00\x2f\x67\x2d\x06\x9b\x43\x9b\x5c\x8f"
- "\xd0\xe0\x7e\x56\x3f\x2e\x05\xdf\x2d\x06\xec\x82\xcd\xd7\x81\xfd"
- "\xb6\x00\xe7\xe1\xff\xb7\xc0\xf8\x63\x81\xeb\xf4\x1e\x75\x5a\x68"
- "\x4f\x9b\xd5\x89\x33\x6c\xed\xc4\xd5\x80\x0d\x07\xd5\xbf\x77\xb5"
- "\xc6\x6a\x43\xec\xd3\x3a\x38\xbe\x06\xce\xeb\x3d\xae\xea\x28\x86"
- "\xae\x0e\xb2\xde\xb3\x92\x3d\x57\xef\x22\x83\xd6\xec\x22\x5d\x52"
- "\x76\x91\x21\xcb\xaa\xe0\xb9\x4c\x7a\x8e\xfb\x3e\xcc\x04\x63\xe2"
- "\x81\xe4\xc6\x4e\x6f\x46\xe1\xbb\x27\xcb\xbb\x0f\x65\xaf\xdc\x45"
- "\x7a\xe3\xdc\xd8\x71\x35\x84\xe0\x18\x3e\xce\xfb\x0c\x57\x16\x75"
- "\x8d\x58\x3a\x1c\x48\x36\xbf\xfb\x58\xc7\xb1\xd7\x08\x39\x14\x54"
- "\x47\xe2\xa2\x61\x2c\xaf\xad\x26\x71\x75\x9c\xa1\x34\xe1\x22\x01"
- "\xee\xc9\xa4\xb6\xbb\xb6\x73\xdc\x2c\x42\x70\xce\xa0\xe5\x97\x20"
- "\xd2\x56\x47\xbc\x96\x9f\x20\x01\xf1\x55\x5c\xb5\x79\x43\x4c\x78"
- "\x5c\x2c\xd1\xec\xaa\xad\xa0\xda\xd3\xe3\x5a\xec\x7e\x9c\x9f\x5a"
- "\x1f\x4a\x5e\x37\x09\xe3\x51\x5a\x52\x72\x7c\x04\xe9\x8c\xf7\xd3"
- "\x9e\xd7\x5e\xd7\x3a\x83\xdd\x92\xd5\xf1\x73\x5d\x15\xef\xcf\x0d"
- "\x4b\x0c\xbb\x66\x18\x41\xb7\xf6\x4b\x88\x9f\xc5\x55\xa3\xae\x83"
- "\xf1\x85\xd7\x82\x65\xd5\x26\xd0\x56\x33\x61\xfc\xd6\x93\xaf\xcf"
- "\x65\x6b\x2c\xe9\xfd\x12\xd4\xfd\xc6\xb5\x91\xfc\xb8\x8d\x63\x29"
- "\xf4\x3d\x24\x88\x24\xf0\xfd\x87\x31\xb3\x7d\x34\xea\x29\xee\x0c"
- "\xf6\xff\x2b\xb8\x57\xae\x5b\xba\x1e\xfa\x54\x8c\xe3\xe7\xb8\xca"
- "\x42\x52\x6c\x34\x93\x4d\x97\x78\x1b\xdd\x03\x36\xf2\x82\x73\xd9"
- "\x60\x27\x1f\x39\xbf\xa1\xcf\x2c\xa9\x07\x92\x2d\x9e\xd4\x37\xbc"
- "\x5f\xea\xa8\x5f\xc6\xbe\x4d\x60\x1c\x05\xdf\xac\xa7\xbe\xb1\xf8"
- "\x27\x46\xa1\x6f\xd4\xdd\xc7\x75\xad\xd2\xf8\x82\xbf\xcd\x01\x3e"
- "\x10\x17\x16\xbf\xc4\x28\xfc\x6d\xec\x03\xbe\x3f\x43\x1c\x8c\x5b"
- "\x79\x86\x2b\x8d\xaa\x26\x65\x70\x3f\x5c\x07\x69\x1f\x4c\x6a\xfb"
- "\x90\xa6\xd4\x87\xd5\x7d\x01\xb7\x7d\x01\xb7\x7d\x01\xb7\x7a\x8a"
- "\xdb\x23\x95\x14\xb7\x66\xe8\x57\x03\x68\xf7\x65\x21\x44\x83\xfd"
- "\xda\x79\x12\xd7\xe8\x83\x7e\x56\x8b\xd8\x1d\x73\x19\x6c\x64\xc5"
- "\xaf\xe7\x63\x1d\xd1\x3e\xa5\x75\x15\x24\x1e\xf1\xdb\x28\x87\x5f"
- "\xe3\xdc\x71\xa0\x00\x4d\x73\x00\xbf\xff\x0e\x22\xbe\x55\xc4\x2b"
- "\x36\x04\xf0\x5b\x2d\x87\x5f\xe3\xb3\xfb\xe0\x37\xed\xf0\x3b\x4b"
- "\x8a\xdf\xfa\x13\xea\xf1\x5b\x9f\xd3\x84\xdf\xc9\x02\x7e\x23\x6c"
- "\xf0\x5b\x25\xc1\x2f\xde\xb7\x6a\xfc\x1a\x7d\xd4\xe1\xb7\x7e\x75"
- "\x13\x7e\x21\x2e\xd9\x34\x9b\xb7\xd1\x3d\x60\x23\xc0\x6f\x7d\x38"
- "\xd8\x49\x16\xbf\xb7\xdf\x7f\x8d\xbd\x5d\xf7\x5f\x83\xd9\xb9\xff"
- "\x1a\x36\xaa\xf7\x5f\xc3\xcc\x5b\xef\xbf\x86\x22\x75\xfe\x6b\x18"
- "\xad\xec\xbf\x86\xc0\x3b\xc7\x7f\x37\x6a\x5c\xf7\xdf\x8d\xfd\xce"
- "\xfd\x77\x63\x92\x7a\xff\xdd\xe8\x71\xeb\xfd\x77\x23\x59\x9d\xff"
- "\x6e\xf8\x2a\xfb\xaf\x51\xaf\xe4\xbf\x17\x3a\x5b\x38\x0b\xd6\xcd"
- "\x75\x9a\x53\x8e\x1a\x88\xea\x35\xd3\x5e\x8c\x19\xe1\xb3\x97\xf5"
- "\x33\xaf\xa9\x20\xae\xb6\xf9\xec\x6b\xf3\x59\x6b\xf3\xd9\xcf\xe6"
- "\x73\x80\xcd\xe7\x2e\xd6\xcf\xe0\x2f\xef\x2b\x1e\xa6\x5e\x10\xb3"
- "\x25\xe8\x3d\x4c\x07\x85\xf3\x3d\x5e\x37\x07\x62\xdc\xd7\x43\xae"
- "\xef\xeb\x92\x38\x63\x5b\x0f\xc2\xdd\xd0\x70\x24\x2a\x8e\x3c\x74"
- "\xc9\xc3\x3c\xa8\x31\x09\x42\x42\xcf\x07\x83\xb8\xc6\x04\x02\x7e"
- "\xd9\x3d\x76\x09\xe0\xcb\x00\x71\x62\x7c\xc0\x3d\xd0\xf6\x03\x60"
- "\x37\x43\x69\x94\x01\x74\xf9\xd7\xdc\x39\x0f\x73\x4f\xbc\xcf\xbe"
- "\x51\x85\xc4\xe2\xf9\x58\x10\xc7\xaf\xdd\xdc\x6f\xb7\xc1\xf3\xb1"
- "\x07\xb9\x6d\x1b\xa2\xd6\x24\x59\x7c\xca\x6a\x8e\x91\xb5\x1a\x4b"
- "\xe0\xf2\xe5\xa0\xeb\x6b\x76\x93\x65\x35\x5c\xf5\x72\x13\x67\x2c"
- "\x0b\x2b\xc4\xf7\xb6\xd5\x65\x31\x45\xa4\xd4\x70\x8c\xe0\x98\x87"
- "\x58\x2d\x33\xec\xa6\xef\x89\xf1\x1a\x38\x56\x6a\xd8\x49\x4a\xe0"
- "\x73\xe1\xfc\xf3\x70\x9f\xe6\xe3\x65\x35\x3b\x89\x39\xad\x5f\xbe"
- "\xc5\xaf\x5f\x1a\xe7\xd7\x2f\xa3\xa4\x06\xfa\x96\xd6\x2f\x13\xfb"
- "\x5a\x0a\xfd\xe0\xf7\xe8\x4c\xef\x97\xc9\xb7\x5b\x57\xce\xe7\x10"
- "\xcc\xe9\x70\xbd\x3f\x5c\xef\xdf\x2f\x03\xfb\x87\x7d\x93\x8d\xf7"
- "\xd2\x74\x5e\xd0\xf7\x67\x42\x82\xbc\x08\x97\xe8\x15\xa0\x0e\x6f"
- "\x66\xa3\x62\x1c\x99\xa6\x5b\x41\xdb\xf5\x71\xa3\x5d\x8b\x62\xfd"
- "\x13\x97\x16\x21\xf4\x57\xeb\x4e\xbb\xb9\x0e\xda\x15\xfa\x1b\xe8"
- "\x46\xbb\x1c\x51\x6e\x37\x52\xe8\xef\x50\x77\xda\x0d\x75\xd0\xae"
- "\xd0\xdf\x04\x77\xda\xcd\x77\xe0\x37\x2f\xb7\xb0\xa0\x21\x5e\x8e"
- "\xb0\xe0\x16\x0e\x34\xc4\xc1\xfd\x47\x78\xb9\x85\x01\x0d\x51\xcc"
- "\x7f\x23\x06\xdc\xf2\xbf\xc6\xc3\xa1\xff\xdd\xf2\xbd\xc6\x43\x71"
- "\xff\x47\xf4\xbd\x5b\x7e\xd7\x78\x28\xe2\x1f\x63\x63\x2e\x6d\x4e"
- "\x36\xd7\x29\xbd\xdc\xb2\xe1\xe9\x6c\x4b\xa7\x39\x1f\xbf\x6b\x19"
- "\x4a\x5e\x88\x85\x31\x2f\x83\x74\x78\x21\xeb\x0c\x37\x14\x73\x4e"
- "\x1a\xcd\xd0\xd8\x4c\xa2\x49\xd5\x58\x34\x79\x4b\x2b\x34\x65\xa6"
- "\x41\xc8\x5b\xe6\x9c\xc5\x46\x8f\x47\xe1\xf8\x01\x88\x1e\xeb\x16"
- "\x06\x11\xda\xd6\xd3\xd9\x6b\xe3\x86\x92\x71\x66\x82\x39\x8e\xba"
- "\xb1\x6f\x9f\xe1\xbe\x59\x0e\x1a\xff\x37\xe0\xd7\x0c\x23\x8e\xa5"
- "\x1d\xe0\xbb\x26\xc0\x31\xb4\x63\x24\x9f\x59\x0c\x1e\x63\x0d\xfc"
- "\xb5\x06\x88\x47\x0d\xdc\x86\x39\x1f\xe3\x98\xcc\xc5\x07\x91\x15"
- "\xf0\x19\x7e\xfb\x73\x4f\x03\xd1\x6c\x81\x58\xb5\x3e\x45\xb3\x53"
- "\xaf\xf1\x4c\xc6\xf8\x15\xe2\xe4\x9a\xf8\xdf\x30\x9f\x9f\x5e\xbe"
- "\xcb\x62\xd0\xbc\x0b\x71\x33\x5e\xdf\x37\x8a\x68\xbe\x81\xf6\xe0"
- "\xda\x8a\x03\xd1\x84\x38\xc8\xe7\x78\x59\xfc\x20\x9a\x84\xef\x63"
- "\x3b\x98\x27\x5d\x67\x01\x3b\xfb\x25\x25\x63\xbf\xb9\xb4\x37\x43"
- "\x0b\x97\xc2\x98\xa3\xf1\x0c\x1f\xd1\x8b\xab\xc7\x31\x04\xc6\x8e"
- "\x07\x2f\xc1\x67\x3e\x1f\x90\xc4\x95\x73\x7e\x7d\x93\xb9\xb5\x6d"
- "\x87\x96\xd6\xd5\x92\xc2\xc5\x8d\xe4\x9c\xc6\x73\x3a\xfe\xf6\x55"
- "\xbf\x78\x7d\x9d\x5f\x7c\x75\x7d\x8a\x67\x98\xb5\xbf\xf8\x5b\xd6"
- "\xe3\x98\xff\xa0\x7d\xf4\x5c\x7e\x60\xb9\x72\x1f\xb9\x77\x1f\xec"
- "\x38\x2e\x80\x33\xa0\x2d\x0b\xe3\x6a\xa1\x2f\x5e\xbf\xa1\xbd\xb9"
- "\xb4\xf8\xfc\xba\xf8\xa0\x87\xf9\x7c\xa0\xc6\x2b\x00\xf3\x4a\x30"
- "\x36\xe4\xd0\x1c\x4f\xbf\x1c\xbe\x86\x07\xb8\x9f\xcb\x09\xd5\xa1"
- "\x16\xba\xa2\xf1\xe4\xf3\x81\x21\x41\x1a\x75\xf1\x94\xc6\x93\x8f"
- "\x7f\x0b\x1f\x46\x3b\x78\x9d\x80\xdf\xfb\xe3\x39\x8d\xd7\x10\x9a"
- "\xe3\xe8\x57\x80\xbf\x07\xd7\x14\xc1\x6f\x16\x70\x69\x7d\x13\xf0"
- "\x3a\x38\x1f\x26\x9c\x2f\x94\x9c\x2f\x84\x3e\x1b\x85\xf3\xcb\x85"
- "\xf3\x07\x25\xe7\x0f\x46\x3d\x4c\x3c\x2e\x69\xbc\x72\xf0\x9e\x60"
- "\xbc\xcb\x86\xf3\xbb\xf1\x7d\x02\x7f\x4f\xfe\xfd\xb2\x85\xeb\x76"
- "\xd7\x68\xbc\xf6\x5f\x05\x7c\xc1\xf9\x7d\x92\xef\xef\xfb\x26\xa6"
- "\x3f\x79\x21\x0b\x6d\xea\x55\xae\xf7\x7a\x42\xcf\xe7\x89\x34\x9e"
- "\xc5\xbc\x2d\x60\xfc\x94\xb6\xa7\xd7\x78\x65\xe2\x18\x59\x07\x3a"
- "\x12\xae\xd9\x8d\xbf\x29\xb5\xff\xac\x05\x0b\xde\x5a\x10\xd8\x73"
- "\x66\xe0\xcc\x79\xd3\x03\xdf\x78\x6b\xd1\xfc\xe8\x67\x7b\xce\xbc"
- "\x8f\x10\x09\x76\xb4\x5c\x52\x7b\xce\x92\xb6\x2c\xa8\x2c\x03\xf4"
- "\x9b\x46\x0b\x63\x79\x23\x49\x03\xbf\x9a\x36\xbc\x4f\xcc\x9d\x52"
- "\x52\xcd\x1b\xe6\x92\xf8\x6b\x44\x13\x17\xc0\x9d\x2d\x5c\xfa\x3c"
- "\xf8\xc0\x3b\x02\x35\x44\x59\x20\x21\xab\x01\xab\x85\x4b\xff\x81"
- "\xc7\x12\xf9\xf7\x0d\xe1\xf4\xd8\xff\xc5\x15\x69\xbe\x8e\xab\xd0"
- "\x14\x87\xd7\x92\x6f\x02\x0c\xe4\x60\x60\x2d\xc9\xc4\xe3\x96\x72"
- "\xfe\xbd\x0f\x5c\x7f\x14\x7f\x0b\x73\x67\xf8\x7f\x3e\x0f\xa8\xf1"
- "\x0e\xc1\xdf\x09\x7c\x90\x90\x1a\x8d\xf7\x24\xfc\x3d\xbd\xc6\x3b"
- "\xd4\x33\x93\x78\xc0\x73\xe4\x7b\x45\x73\x8f\xbf\x25\x7d\x59\x10"
- "\xff\xac\xa7\x78\xfb\x98\x34\x1d\xfb\x6c\xf9\x80\xf8\x6c\xfd\x80"
- "\x90\xcc\x8e\xc4\xab\x3e\xe5\x1e\xa2\xf7\x1a\x99\x83\xf6\x82\xa6"
- "\x7d\xaf\x6a\xc8\x73\x70\xcc\x4f\x4f\x76\xce\xc5\x63\xf0\x4c\xd5"
- "\x29\x71\x07\xbe\x87\x33\xe6\x4c\x4c\xb5\xf8\x2d\x0b\xe0\xc0\x16"
- "\xc6\x1e\x13\x0b\xdb\x47\x01\x5e\xe0\xb9\xe1\xfc\x97\x05\xd4\x68"
- "\x7c\xb4\xdf\x16\x10\x12\x87\xcf\x29\xd8\xe3\xd3\xeb\x46\x7c\xff"
- "\x46\x76\x5e\x37\xc0\xe7\x94\xd4\x1d\x8b\x8d\x9a\x23\xc3\x0b\x48"
- "\xe0\x2b\xa0\xb1\x34\xf7\xac\xfa\xd3\x4c\xce\xf4\x58\x30\xe8\xd2"
- "\xaa\xbf\x92\xef\x2b\x8b\x88\x6f\x18\xf1\x6c\x5a\x1b\x3e\x9a\x68"
- "\xc6\xe9\xe1\xf3\x22\xa2\x29\x35\x9a\xf9\xf7\x00\x71\xc3\x30\x9f"
- "\x5f\x42\x30\xc7\xcf\x69\x76\x45\xe7\xd5\x1a\x81\x9f\xaa\xbd\x71"
- "\x2e\xb9\x45\xfb\x5d\x32\x7e\xe7\xf5\x3a\xe1\xdd\xd8\x55\xe1\xdd"
- "\xd8\x55\xfe\xdd\x58\x0f\x7c\x2f\x86\xef\xc3\x96\x87\x73\x16\xf3"
- "\xc2\xa0\x8e\xe3\xc2\x3d\x39\x6c\x13\xdf\x95\xb5\x85\x98\x82\x5b"
- "\x18\xd4\x6e\xe3\x02\xe2\x57\x6a\xa8\x26\x65\xd5\x45\x64\xf3\x62"
- "\xe2\xc7\x5d\xd5\xb5\x29\x3e\x78\x84\x70\x1f\x7c\x93\xf0\x59\x5c"
- "\xa1\xb7\x19\xf3\x29\x57\x03\xee\x6b\x9f\xe8\x81\xef\x05\xda\xad"
- "\x5e\x40\x7a\x6f\xad\x25\xfd\x5f\x3f\x9f\xc0\xaf\x13\x85\x7b\xfa"
- "\x99\xae\x06\x05\xde\xb8\x1a\xd4\xbd\x71\x61\xd0\xc3\xed\x0d\xf4"
- "\x5d\xda\xd4\x08\x2d\xc1\xf7\x65\xdc\x7b\xd7\x43\xb7\x62\x4e\xbb"
- "\xce\x40\x4c\x1d\xbe\x4b\x46\x7c\xc2\xef\x76\xc1\xf7\x2f\xf1\x4b"
- "\x88\xd6\xf2\x73\x10\x29\xa9\xa9\x25\xfd\x00\x37\xf8\xae\x61\xcb"
- "\x39\xfa\xae\xc1\xbc\xfe\x40\x32\xbe\x6f\xa8\x5f\x18\xa4\x19\x73"
- "\x19\xc6\xae\x94\x7b\x7a\x37\xf6\x9c\x98\x7a\x28\xe8\x14\x8e\x0f"
- "\x03\xc4\xe7\xfe\xde\x53\xee\x3d\xf7\xf7\x56\xe2\xf7\xf0\xfd\x1b"
- "\x07\x78\xde\x59\x8b\x7e\x03\xff\xd5\x1a\x34\x2f\x57\x71\xa6\x92"
- "\xaa\x4f\xc0\x3f\x15\x8c\x7f\x78\x7f\x2e\x30\x6a\x2e\xcc\x04\xbf"
- "\x9c\xa7\xbe\x2a\xae\x03\x3f\x1d\xc0\x36\x12\x02\xf3\xc0\xd7\x10"
- "\x4f\x69\x8a\x8d\xa7\xf8\x75\x2e\xd0\x5f\x3b\x1b\x8b\xbc\x1b\xfd"
- "\xe6\x64\xe3\x7b\xcc\xfa\x1e\x13\xf3\x1b\xd2\x96\x1a\x6f\xf8\x2d"
- "\xf3\x71\xf0\x4e\xb3\x07\xfa\x2b\x36\x82\xf8\x14\x57\x1d\x27\xbc"
- "\xcf\xde\x16\x7c\x86\xb5\x6f\xef\x04\xb5\x33\xd5\x07\x75\xdc\x08"
- "\xbe\x2a\x8d\xd6\x93\x4d\xb5\xc4\xaf\xac\xba\x02\xdf\xf7\xb4\x79"
- "\x79\x3c\x21\x2f\xef\xe0\x2c\x25\x07\x4f\xf2\xfe\xdb\x05\xfe\x33"
- "\x81\xff\xf0\x3d\x67\x93\xff\x16\x83\xff\xae\x83\xff\x2e\x8b\xfe"
- "\x33\xd7\x83\xff\xea\xc1\x7f\xef\x80\xff\xea\xec\xfc\x57\x89\xef"
- "\x42\xf1\x9d\x13\xfa\x0f\xeb\xad\x2d\xef\x04\x75\xe1\xdf\x81\xbe"
- "\x11\x44\xb6\xce\x20\x3e\x7d\x8c\xc4\x23\xfe\x00\xd1\x42\x3f\xb5"
- "\x7f\x00\xfb\x42\x7b\x80\xef\x73\xa4\xac\xc0\x4c\x96\x4d\x22\x0f"
- "\xa3\x3f\x4d\x82\x3f\xcb\x4c\x7b\xc8\xf5\xfa\x20\x0d\xb4\x39\x68"
- "\xe3\x75\x32\x64\xf4\xf9\x40\x72\x68\x42\x09\x01\x7f\x14\x59\xd2"
- "\xe3\xf3\xdd\x7f\x0e\xef\xcf\x70\xfd\x39\xbc\xaf\xc3\xdd\xe7\xd0"
- "\xdd\xe7\xb0\xcd\x6e\xf9\xe7\xf0\xfe\x59\xee\x3d\x87\xf7\xcf\xbc"
- "\xfb\x1c\xde\x49\xcf\xe1\xfd\xc1\xb6\xcf\x61\x93\x56\x58\x30\x6b"
- "\xde\xf4\x88\xf9\x11\xf3\xe7\x04\xce\x58\x12\x3d\x6b\x21\x55\x0c"
- "\x8c\x66\x08\x32\x5b\x86\x6a\x3e\x84\xf1\xf4\xfb\x80\x0a\xf2\xd9"
- "\x83\x15\x1a\xcb\x94\x00\x2f\x2e\xf5\x54\xb9\x25\xf5\x74\xf0\x87"
- "\xa0\x7f\xf1\x79\x4d\x03\x5d\x7b\x41\xf3\x40\xf4\x77\x5d\x40\xf3"
- "\x2d\xb8\x44\xf0\xff\xf4\x9d\xec\x66\x2d\xce\x5b\xcc\xd8\xc0\x55"
- "\xe3\xbc\xc5\x23\xc3\x71\xec\x6f\x7b\xed\xfe\x50\x18\xd7\xa7\x04"
- "\x90\x86\x29\xa1\x9a\x94\x93\xc4\xa7\x7d\x05\x19\x6d\xb1\x70\x5c"
- "\x61\xdc\x25\xd0\x5a\x7e\xfb\x0a\x27\x5f\x22\x81\x4b\x7d\xe0\xda"
- "\xdf\x75\x0d\x5c\x9a\x88\xff\x7a\x04\x2e\x7d\xef\xcc\x05\x4d\x47"
- "\xbe\x6e\x06\x34\x77\x35\xb7\x61\x69\x94\xf9\x2f\x93\xf4\xf8\xbe"
- "\x72\x6b\x27\xae\x6a\x17\x68\xfc\x5d\x8d\x46\xcd\xbb\x0b\xb0\xee"
- "\xfb\x11\x0e\xdf\x3b\xe2\x7b\xcd\x77\x6b\x41\xc3\xaf\x10\x72\x3f"
- "\xa0\x23\xf0\x79\x59\xbd\x81\xab\xfa\xea\x42\x85\x06\x9f\x9f\x3a"
- "\xbf\xbe\x09\x2b\xe0\x3e\xa0\x8f\xfa\x4d\x9d\xb8\x4a\x83\xff\xb2"
- "\x20\xaf\x40\xa2\xa9\x4f\x69\x37\x13\x34\x49\x20\xea\x89\x64\x38"
- "\x97\x02\xe7\xf8\xf7\x7f\x9a\x0e\xd5\xdc\x7d\x6d\x07\x20\x67\x01"
- "\x76\x3d\xae\x68\xda\x7d\xde\x00\xf7\xb8\x9a\xc6\x02\xd5\xc6\xf4"
- "\x65\x3e\xa6\xed\x13\xf3\x4d\xa8\xe1\x7a\x4e\x2c\x6c\xf4\x5f\x6a"
- "\x34\xa5\x2f\xc3\x3d\x5c\x3c\xe8\xf5\x5a\xbe\xae\xf8\x86\xdf\x5c"
- "\x02\xd7\xd7\x5d\xf5\x7b\x9f\x5c\x4d\x4b\x49\x3d\x12\x93\x2f\x70"
- "\x59\xbb\x53\x2f\x67\x08\x5c\x96\x01\xcf\x4a\x28\x70\x59\xa8\x3d"
- "\x97\xd1\xba\x00\x33\xa1\x9c\x56\x82\x6d\x55\xe1\xb3\x82\xba\x30"
- "\x0f\xec\x80\xcf\x01\xe2\x9d\xe7\x36\xe0\x35\xeb\x33\x81\xcf\x0b"
- "\xf2\x17\xff\x7c\xda\x3c\x1f\xf8\x4c\xdc\x6f\x20\x5a\x7c\x26\x90"
- "\xdf\xf0\x99\xc0\x7a\x9b\x0f\xaf\xd3\x67\xa2\x7d\x25\xd1\xf2\xcf"
- "\x85\xa9\x88\x7f\x2e\x30\x26\x28\x36\xd9\x70\x9a\xe4\x99\x58\x63"
- "\x7d\x26\xac\x9c\x06\xb8\x37\xe1\x33\xf1\x0e\xfb\x4c\x4c\x39\xa5"
- "\x25\x3c\xdf\xbd\x77\xad\x32\x13\x9e\x09\xcc\x61\x99\xad\x9c\x06"
- "\xcf\x04\xce\x07\xe2\x39\xed\x4d\x81\xd3\x0c\x70\x1c\x9e\x85\x2d"
- "\x91\x2c\xa7\x35\xd4\x3b\xd3\x16\xda\xc1\xee\x71\x9a\x96\x5f\xff"
- "\x0d\x7d\x85\x7e\x43\x7f\xa1\x8f\x5a\x93\x7f\x90\xb3\xcc\x5a\x05"
- "\xce\x92\xf1\x0f\xe0\xb9\x06\xfe\x6f\xe7\x23\xee\xbd\xba\x1e\x52"
- "\xde\x42\xbe\x42\xee\x42\xce\x42\xfe\xc2\xe7\x00\x79\x8b\xe7\x2c"
- "\xe0\x73\xf8\x5c\x5d\xa2\x3b\xc7\xf3\x59\xfc\x79\xa2\x8d\x1f\x41"
- "\x1e\x46\xfe\x2a\x33\x5d\x23\xc8\x67\xbc\xff\x3a\x88\xfe\x43\xfe"
- "\xda\xb4\x98\x0c\x19\x13\x11\x48\x90\xb7\xc0\xf6\x3d\x0e\x05\x1d"
- "\x27\x7c\x2c\x90\xe4\xd7\x79\x6b\x47\x88\xbb\x3f\x20\x5e\x69\x1d"
- "\x89\x4f\x7d\x4a\x47\x1f\xfb\x38\xa0\x63\x17\x6b\x1c\x80\xcf\x2c"
- "\x3e\xbb\x7a\x4d\xbb\x18\x1a\xbf\xc5\x04\xf3\x3e\xd2\x04\xf0\x6b"
- "\x04\x60\xdc\x2c\xc6\xcc\x1d\xa7\xd2\x77\xeb\x10\x23\xfb\xbf\x19"
- "\xca\xa5\xf7\x4d\x46\xfb\xe1\xfd\xbc\xde\x0b\x70\x96\x1e\xaf\x5f"
- "\x87\x36\x49\x87\xf8\x3b\x3d\xbe\x5a\xc4\x54\xc7\x35\x87\xa0\xf5"
- "\x90\x18\xb5\x98\xea\xb8\x9a\xef\xc3\xbf\x42\x7f\xc7\x4d\x09\xf5"
- "\xb2\xfc\x2b\xd4\x1b\xfc\x1f\xf0\x96\x39\x81\x5c\x4f\xdd\xec\x13"
- "\x6f\xe2\xaa\x03\x97\x92\xc7\xa0\x5f\x97\x8f\x40\xf4\x79\x04\x18"
- "\xb5\x2c\x78\x2e\xf8\x72\x53\xf2\x67\x16\x83\x97\x5e\xd3\xb6\x0e"
- "\x62\xfe\x6a\xe0\x52\x2f\x29\x97\x52\xde\x6c\x5b\xc7\xd7\x75\xa7"
- "\x6e\x0e\xc0\xb6\xc6\x15\x91\xf6\x81\x2f\x12\xaf\x0b\x1a\xbf\x35"
- "\x4b\x62\x09\xce\x47\xf5\x86\xff\x4f\x6a\xf8\x20\x32\x19\xbe\xdf"
- "\x8e\xfb\xd7\x04\x8f\xa8\x17\x61\x3c\x99\x32\xc1\x03\x6b\x09\x3e"
- "\x89\xcb\xd0\x58\xe0\x18\xad\x4d\xca\x20\x78\x7e\x75\xa3\x17\xaf"
- "\x9b\x2c\x70\x4d\x69\x5d\x06\x59\xbd\xd8\x87\xe0\xf5\xb4\xde\x2d"
- "\x83\xe0\xf5\x6b\x16\x68\xf9\x5a\x04\xfe\x7b\xa6\x0c\x82\xdf\x35"
- "\xc3\xf1\xf7\x2d\xbe\x64\xed\x52\x3f\x72\x24\xb8\x94\x6f\xe3\x48"
- "\xf0\xb7\x04\xdb\x00\x9c\xc3\xff\xbf\x22\xeb\x16\x07\xc0\x73\x9d"
- "\x01\xe7\xff\x49\xd6\x5d\xe9\x02\xff\x5e\x80\xbf\xeb\xe4\x92\xe6"
- "\x77\xa6\x23\xc1\x16\xd2\x3e\xf1\x39\x0e\xf0\xca\x95\xe1\x1c\xc7"
- "\x38\x72\x0f\xf4\xdd\xbb\xac\x22\x15\xc6\xb6\x8e\x35\x38\x07\x9e"
- "\x8b\x9f\x52\x63\xe1\xa6\x5c\xb6\xc4\x4f\xb9\x82\xbf\x6d\xe6\xa6"
- "\xfc\x8a\xbf\xbd\x66\x69\xa0\x50\xff\x9a\xc1\xd7\xea\xad\xbe\xde"
- "\x83\x60\x5f\xf1\x77\xf1\xf7\xd6\x2d\x08\x12\x7e\xb3\x37\xdf\x37"
- "\xfc\x4d\x6c\x53\xfa\x9b\xb8\xbf\x7c\xe0\x6b\xfc\x6f\x2e\x81\x7f"
- "\x3b\x80\x3f\x0c\xe8\x07\xfc\x7d\x0b\x17\xea\xcd\xc5\x87\x7a\xf2"
- "\xdf\x89\xa9\x96\xfb\x4e\x9e\xf0\x1d\x7e\x2d\x1e\xfc\x4e\x23\xbd"
- "\x9e\x6f\x03\xc6\xba\xc3\x78\xfc\xf1\xd0\x42\x62\xef\x43\xff\x59"
- "\x74\xec\xf3\x1f\x48\xc7\x3e\xea\x53\x1e\x2b\x53\x42\xbd\xc1\x6f"
- "\x5a\x1c\x27\xcf\x69\xfc\xdb\x36\xb5\xf1\xaf\x50\x4f\xf4\x37\xe2"
- "\xc6\x8a\x25\xc4\x91\x15\x43\x7c\x3f\xa3\x08\x91\x62\x06\xfe\xef"
- "\x23\xb4\x13\x62\x6d\x07\xfa\x40\xac\x38\x7a\x1c\xce\xdb\xe3\xe8"
- "\x81\x3e\x22\x8e\x3a\x95\x18\xe3\x38\x0e\x71\x54\x38\x39\x09\xdb"
- "\xc9\x12\xfb\x33\xc1\x03\x31\xd6\xba\xb0\xf5\x3b\x13\xfa\xe9\xf1"
- "\xe5\xc4\x8f\xde\x4f\x27\x7e\xbc\x7e\x7c\x79\xa1\x1f\xf6\xd5\x7a"
- "\x1f\xd8\x87\xb5\x96\x40\x62\xbd\x8f\x75\x8d\x3d\xa0\xdd\x2b\x44"
- "\xf8\xce\x36\x6c\xdb\x6a\x03\xf0\x19\xb1\x7e\xc7\x7a\xfd\x5a\x4b"
- "\x10\xf4\xbb\x37\xff\x1d\x8a\xb9\x0b\x32\xf8\xe9\x74\xd9\x16\x73"
- "\xf7\x2f\x27\x20\x5c\x41\x2b\x4d\xae\x85\xdf\x79\xa0\x0d\xed\xdb"
- "\xd7\xe6\x46\xf8\x0d\xf0\x81\x46\x38\xde\x4d\x82\x09\xa1\x7d\xa3"
- "\x4c\xfb\x0f\x8c\x61\xda\x0f\x85\xf6\x63\xa0\x7d\xd4\x62\x93\x31"
- "\xef\xf5\x40\x04\xdf\x4e\x0c\x6d\xdf\x8a\x5b\x2e\x75\x76\x4e\xd4"
- "\x52\x72\xef\x25\x4d\x80\x96\xf2\x69\x5b\xde\xe7\x7c\x9d\x92\xc6"
- "\x92\x6d\xb1\xa9\x53\x92\xd6\xb1\x7d\x16\x67\xa0\x35\x4a\x9a\x07"
- "\xf8\xb9\xad\xc0\xaf\x75\xa8\x29\xf3\x40\x8f\x89\x75\x4a\x27\xf1"
- "\x7c\x43\xe1\xe2\x73\x62\x9d\x92\xe6\x81\x62\xbc\x5e\xaf\x09\xe8"
- "\x01\xb1\xa3\x06\x3e\xeb\xe9\xf1\xb6\x99\xd2\xe3\x4d\x75\x80\xc2"
- "\x71\xac\xb1\x16\xf2\xac\x35\xdf\x14\x60\xae\x2d\x60\x88\x35\xbf"
- "\xa9\x10\x9b\xaa\xd0\xbc\xdd\x13\x44\xcd\xdb\x3d\x41\x59\xf3\x06"
- "\x5c\x74\xac\x79\x1f\x29\x12\x35\xef\xc3\xbd\xe8\x73\xff\x70\x5b"
- "\xfa\xdc\x77\x2d\xe1\x73\xb7\xd0\x9e\xe9\xe3\x74\x03\xf7\x97\xd0"
- "\x04\xc4\xf9\x16\xd0\xb0\x9f\x2d\x2e\xd2\xec\x82\xd8\xc8\x0c\x7a"
- "\xf7\xdd\xa5\xc4\x0b\xd7\x67\x7b\x17\x6c\x58\x66\xaa\x24\x25\x5e"
- "\xa8\x79\x7f\x80\x76\xba\x0e\x2e\xc5\x77\x84\x69\x6f\x86\x53\xbb"
- "\x74\x1e\x01\xbe\xf0\x2c\x33\x1a\xf9\xeb\xf0\x1c\x8c\x6b\x55\xa8"
- "\x7b\xbf\xb2\x14\x69\xb2\x96\xa2\x26\x4e\x2f\x94\x6a\xe2\xfa\x94"
- "\xce\x51\xf2\x5a\xb8\x4b\x9d\x29\x45\xaa\x85\x3b\xef\x47\x2d\x8c"
- "\x39\x71\x1c\xf7\x2d\x54\x03\xe7\x83\x1e\x2e\x44\x5d\x8c\x5a\xd8"
- "\xc2\x68\xe1\x87\x96\x38\xd6\xc2\x9d\x2f\xde\xd5\xc2\x37\xab\x85"
- "\x95\xe2\xfb\x87\x46\xb8\xa7\x85\x1f\x1a\x7e\x57\x0b\xb7\x94\x16"
- "\x7e\xa8\xbf\x55\x0b\x5b\x92\xfc\xee\xc9\xfc\x80\x90\x2d\x4d\x5a"
- "\xb8\xab\x9f\xbd\x16\xee\x1a\x64\xaf\x85\x3b\xaf\x60\xb5\xf0\xa3"
- "\x4f\xd8\x6b\xe1\xae\x11\x4a\x5a\x18\x78\xa8\x06\xb5\x30\xe2\x08"
- "\x75\x31\xea\x61\xe8\x5b\x35\xc5\x54\xd7\x8d\xee\x69\xe1\xae\x19"
- "\xae\x69\xe1\xae\x0d\xf2\x5a\x38\xa0\x5a\x59\x0b\x07\x54\xcb\x6b"
- "\xe1\x47\x36\x8a\x1a\xe6\x91\x59\x77\xbe\x16\x7e\xc4\x47\x5e\xaf"
- "\x3c\xd2\x81\x6a\xe1\xae\xc6\xe6\xd7\xc2\x5d\x8d\xf2\x5a\xf8\x91"
- "\x95\x54\x37\x74\x35\xd9\x6b\x61\xf8\x8e\xac\x16\x7e\x64\xaf\xf0"
- "\x1d\x23\xab\x85\x69\x1b\x30\x06\x1e\x57\xd6\xc2\x81\x6f\xd3\x31"
- "\x31\x70\x18\x1d\x13\xa9\x4f\xed\xb5\x70\x60\x67\xe7\x5a\x98\x62"
- "\x88\xef\xa7\xa2\x16\x0e\x9c\x6e\xaf\x85\x03\xaa\xe5\xb5\x70\xf7"
- "\xc1\x22\x8e\xba\x9d\x60\xb5\x70\xe0\x8e\xd6\xa1\x85\x15\xb1\xe5"
- "\xc3\x6a\xe1\x6e\x4b\xd4\x6b\xe1\x6e\x79\xea\xb4\x30\x62\x4e\x4e"
- "\x0b\x77\x6b\xb0\xc5\x1c\xab\x85\xbb\xfb\xcb\x6b\xe1\xee\x7d\x58"
- "\x2d\x8c\xed\xcb\x69\xe1\xee\x93\x98\xf6\xed\xb4\x70\xf7\x45\xac"
- "\x16\xa6\xd7\x89\x5a\xf8\xd1\x2e\x42\x6e\x61\xbd\x7a\x2d\xdc\xdd"
- "\xec\x58\x0b\x3f\xea\xcd\x6a\xe1\xee\x15\x54\xf3\x3e\xda\x9f\x6a"
- "\xe1\xee\x35\xf4\x78\x40\xaa\xf4\xb8\xa8\x85\xe9\x71\x7b\x2d\xfc"
- "\xe8\x48\x27\x5a\x78\x90\xeb\x5a\xb8\xaf\x4f\x51\x93\x16\xee\xeb"
- "\x63\xd5\xc2\x16\x0d\x8c\x51\x30\xde\xc3\x5f\x35\xce\x3f\xc0\x67"
- "\x0e\xee\xa7\xc1\xb1\x1e\x7e\x7c\xb8\xa8\x87\x7b\xa5\xd3\x67\xbf"
- "\xd7\x12\xfa\xec\xf7\x1a\xdc\x94\x03\x06\x2d\x8c\x9a\x58\xc8\x01"
- "\x1f\x5b\x0b\x7f\x9f\x2d\x2d\xe2\xf5\xf0\xae\x5a\xa3\x06\x35\xf1"
- "\x2a\xb0\x23\xea\xe2\x6f\x04\x4d\x5c\x56\x37\x48\xd0\xc5\x41\xdb"
- "\x61\xcc\xd0\xaf\x8d\xe3\xe7\x47\xf9\x40\xff\x2a\x78\x3d\x1c\x6d"
- "\x24\xff\x73\x7d\x90\x06\xc6\xbb\x8a\xc2\x38\x7a\x1d\xdc\x67\xa5"
- "\xa8\x9f\x7b\xac\x64\xf4\x73\x34\xaf\x9f\x8f\xa1\x7e\xfe\x06\x22"
- "\x94\xaf\xe2\xa8\x86\x46\xfd\x8c\x3a\x1a\xf4\x73\x79\x56\x27\xae"
- "\xb8\x3e\xa5\xc7\x6e\xab\x86\x5e\x03\x9f\xc1\xd7\xfa\x83\xd9\x84"
- "\x64\xcd\x26\x5e\xe0\x93\x8a\x77\xe1\x37\xf0\x7a\xb8\xae\xd2\x7a"
- "\x1d\x8c\xd9\xe5\x54\x67\x07\xcd\xb4\x30\x39\xe7\x9e\xbd\x70\xaf"
- "\x00\x7e\x3c\x06\x3b\xa0\x9e\xb2\xe6\x9c\x2d\x3d\x27\x16\x72\xfe"
- "\x54\x6b\xb3\x79\xe7\xdf\x9f\xb7\x6a\xed\xb5\x82\xd6\x6e\x40\xad"
- "\x1d\x65\xd5\xda\x3d\x43\xdc\xd4\xda\xc7\x78\x2d\x37\xb6\xf9\xb5"
- "\xdc\xc6\x3b\x40\x6b\xa3\xce\x46\x6d\x8d\x3a\x1b\x75\x37\x6a\x6d"
- "\xd4\xdd\x16\x41\x6b\xe3\x5a\x80\x0d\xef\x08\x5a\xfb\x3e\x89\xd6"
- "\xf6\x90\x6a\xed\xdf\x7f\xee\x9e\xd6\xfe\x7d\xbe\x54\x6b\x23\xbe"
- "\xd5\x6a\x6d\xf4\xb1\xdd\x3b\x4e\xf0\x15\xfa\x09\x7d\xe2\xf0\x5d"
- "\x99\xe0\x2f\xf4\x0f\xfa\x06\x7d\xe4\x92\x7f\x00\x5f\xc5\xc6\x96"
- "\xd3\xda\x41\x36\x5a\x1b\xb5\x35\xd8\xae\x0a\x35\x77\x59\x21\xd8"
- "\xe6\x6d\xd0\xdd\xa0\xb9\x19\xbd\xfd\x8e\x9c\xde\xfe\x7d\x66\x53"
- "\xee\x59\xe3\x77\xcf\x16\xcc\x3d\x77\xb4\xea\xed\xa0\x15\xf6\x7a"
- "\x3b\x28\x43\xa2\xb7\xcb\xf5\x9a\x1e\x35\xac\xd6\xee\xbb\xd7\x5e"
- "\x6b\x07\x1d\x57\xd4\xda\x9d\x64\xb4\xb6\xbf\x55\x6b\xf7\xf2\x76"
- "\x4f\x6b\xf7\xf2\x52\xd2\xda\xf5\x5a\xa9\xd6\xee\x35\x4b\xd4\xda"
- "\xd1\x12\xad\xfd\xa8\x51\x59\x6b\x3f\x4a\xf7\x39\xd3\x6e\x0e\xc0"
- "\xb6\x50\x23\xe1\xbb\xb9\x40\x9c\x97\xae\x79\xdc\x1f\x75\x12\xe6"
- "\x1a\xa0\xff\xa0\x95\x1e\x3b\x2b\xd5\xdc\xf8\x4e\xce\x91\x2e\x8a"
- "\x9a\x4d\x1e\x46\x6d\x84\xba\xc8\xaa\x63\xf1\x7a\xd4\x47\xb7\x56"
- "\x1b\x3d\x96\x20\xaf\x8d\x1e\x5b\xc3\xeb\x5e\x9c\xcf\xa8\xe9\x35"
- "\x13\xc7\xb8\xe6\xd5\xde\xbd\x66\xca\x6b\xef\xc7\x3d\xa8\x4e\xe9"
- "\xa5\x43\xbf\xb0\xda\x1b\xbe\x23\xab\xbd\x1f\x1f\x28\x7c\x67\x26"
- "\xab\xbd\x69\x1b\x30\xde\x8e\x57\xd6\xde\x8f\x5f\xa6\xe3\xef\xe3"
- "\xfb\xe9\xf8\x2b\xf8\xd8\x4e\x7b\x3f\x9e\x2e\xd5\xde\xe8\x7f\x7b"
- "\xed\x4d\x31\xc5\xf7\x53\x51\x7b\x3f\x7e\xca\x5e\x7b\x3f\x6a\x44"
- "\xed\x2d\x8f\xab\x3e\x07\x58\x5c\xf5\x99\x6e\xb4\x58\x35\x78\x0a"
- "\xb4\xd7\xbb\x8f\xad\x06\x6f\x85\x58\x4b\x10\x75\x38\xde\x53\x1f"
- "\x0f\x75\x3a\x9c\xff\xce\x40\x75\x3a\x1c\xf1\x27\xa7\xc3\xfb\x24"
- "\xda\xe2\x8f\xd5\xe1\x7d\xb2\xe4\x75\x78\x9f\x3d\xac\x0e\xc7\xf6"
- "\xe5\x74\x78\x9f\xb3\x4c\xfb\x76\x3a\xbc\x8f\x99\xd5\xe1\xf4\x3a"
- "\x51\x87\xf7\xcd\x11\xf2\x1a\x6e\xe4\xa4\xfb\xae\x74\xac\xc3\xfb"
- "\xae\x61\x75\x78\xdf\x70\xaa\xb7\xfb\x16\x18\x79\x1d\xde\x37\x9a"
- "\x1e\x7f\x34\x53\x7a\x5c\xd4\xe1\xf4\xb8\x51\xaa\xc3\x0b\x51\x87"
- "\xf7\x2d\x77\xa2\xc3\x87\xba\xae\xc3\x07\x57\x88\x3a\x7c\x70\x85"
- "\x63\x1d\xde\x2f\xd1\xb1\x0e\x7f\xda\x4f\xd4\xe1\x03\x85\xf7\x51"
- "\x03\x47\x51\x1e\x18\xd8\xc6\x9a\x97\x46\x1d\x6e\xee\x9e\x6e\x10"
- "\xf2\xd2\x45\xbb\x16\x97\x6b\x3e\xb3\xe6\xa5\x17\x80\xbe\x36\x10"
- "\x9f\x55\xb5\x84\xa0\x06\xc7\x5a\x8c\x62\xe3\x20\xa1\x1e\x63\xc0"
- "\xa2\x4c\xd4\xe0\x17\xe0\x9a\x2a\xd0\xe0\xa0\xa3\xff\xa7\x71\x90"
- "\x06\xee\xa7\x82\xb9\x76\x71\xd3\xb5\x95\xd6\x6b\x51\x7b\xc3\xf5"
- "\xc5\xa5\xa0\xc3\xf1\x3b\xf0\xfc\x17\x17\x63\x9d\x47\xdc\x11\xfe"
- "\x5a\x68\xa3\x5c\xd4\xec\xfd\x07\xf3\x9a\xdd\x20\x68\x76\xf8\x0e"
- "\x68\x94\xa2\x26\xcd\xde\x58\xae\x49\xad\x65\x34\xfb\xc1\xfa\x94"
- "\xfe\x4d\xf5\x1f\xeb\x04\xad\x9e\x6a\xe1\xb5\xfa\x31\xd0\xea\x15"
- "\x54\xab\xf7\x4f\xb6\x5e\x03\x98\xa9\xe4\xaf\xb9\xc0\x5f\x53\x0c"
- "\xd7\x94\x0b\xd7\xec\x94\xe8\xf9\x83\x54\xcf\x0f\x18\xc0\xea\xf9"
- "\xfe\x0d\xa8\xe7\xad\x79\x73\xd4\x2a\xd2\xdc\xb9\xc5\x5f\x2e\x77"
- "\xfe\xe4\x1e\xdb\xdc\x79\x03\x93\x3b\x7f\xa2\xa7\x1a\x3d\x0f\xbf"
- "\x59\x64\xd5\x8c\x2d\xa9\x17\xef\x24\x3d\x6f\x91\xe4\xce\x2d\x4c"
- "\xee\xfc\xc9\x44\xf7\xf4\xfc\x93\x09\x52\x3d\xdf\xe0\x5e\xee\xbc"
- "\xa8\x25\xe3\xad\xd6\xad\xe7\x9f\x9c\x2b\xcd\x9f\xa3\x9e\x17\xf3"
- "\xe7\x03\x26\xd8\xeb\xf9\x01\x3a\x89\x9e\x3f\xa8\xd7\xf4\xdf\xc7"
- "\xea\xf9\x67\x56\xd9\xeb\xf9\x01\xdb\xdd\xd3\xf3\x03\x8e\xbb\xa7"
- "\xe7\x07\x1c\x73\x4d\xcf\x0f\x1c\x28\xaf\xe7\xfb\x25\x28\xeb\xf9"
- "\x7e\x3c\x5e\x2d\xa9\xa2\xee\xc2\xf7\x8e\x81\x8b\x51\x77\x3d\x75"
- "\x9e\xd7\x5d\x54\x87\x81\xee\x7a\xea\xf3\xd6\xa1\xe7\x9f\x0a\x96"
- "\xd7\x58\x4f\x4d\x15\xf5\xfc\xc0\x01\xcd\xaf\xe7\x07\x0e\x90\xd7"
- "\xf3\x4f\x1d\xa5\x7a\x67\xe0\x20\x7b\x3d\x0f\xdf\x91\xd5\xf3\x4f"
- "\x7b\x0b\xdf\x19\xc0\xea\x79\xda\x06\x8c\xdb\xe2\xfb\x7f\x3b\x9f"
- "\x3e\xbd\x9f\x8e\xe3\x4f\xaf\xa1\xe3\x38\xf5\xb1\xbd\x9e\x7f\x7a"
- "\x96\x73\x3d\x4f\x31\xc5\xf7\x53\x51\xcf\x3f\x9d\x67\xaf\xe7\xfb"
- "\x25\xa0\x9e\x97\xc7\xd5\xe0\xf5\x2c\xae\x06\x3f\xc1\xea\xf9\xa7"
- "\xcd\xad\x47\xcf\x2b\x62\x2d\x98\xd5\xf3\x83\x8e\xaa\xd7\xf3\x83"
- "\xbd\xd5\xe9\x79\xc4\x9f\x9c\x9e\x1f\x3c\xde\x16\x7f\xac\x9e\x1f"
- "\x3c\x4f\x5e\xcf\x0f\x5e\xc9\xea\x79\x6c\x5f\x4e\xcf\x0f\xfe\x9c"
- "\x69\xdf\x4e\xcf\x0f\x2e\x61\xf5\x3c\xbd\x4e\xd4\xf3\xcf\x44\x53"
- "\xae\xed\xd7\x53\xbd\x9e\x7f\x26\xc4\xb1\x9e\x7f\x66\x2a\xab\xe7"
- "\x9f\xe9\x4f\x75\xfb\x33\xc9\x54\xcf\x3f\x33\x9c\x1e\xef\xd7\x43"
- "\x7a\x5c\xd4\xf3\xf4\xb8\xbd\x9e\x7f\x26\xdb\x89\x9e\xf7\x35\xe5"
- "\x4c\xcc\x6f\xec\x31\xb1\xf0\x86\x5f\x8a\xfe\xf1\xaa\xe7\xcc\x4d"
- "\xeb\xf4\x87\xc3\xb8\x5f\x09\x3a\x60\x3a\xd1\xe0\x5c\xf7\xb8\xa3"
- "\x30\xbe\x4f\xa7\x75\xf0\x38\xc6\x63\xbd\x47\xde\xd2\x42\x6f\x5c"
- "\x57\xb0\x31\x6d\x4e\xb6\xa9\xf7\xe4\x72\x1c\xeb\x1b\x72\x26\xa6"
- "\x1a\xd3\x96\x1a\x1b\xb0\x06\x7e\x2e\xd1\xbc\x5e\x23\xaf\xd3\x96"
- "\x55\x72\x16\xc0\xbc\xcf\xb8\x30\xaa\xd1\x4a\x74\xe7\x79\x1c\xe3"
- "\xf8\x8f\xf3\x14\xca\xea\x2a\x78\x3d\xe0\x1b\x3e\x94\x64\xc6\x11"
- "\xbf\xb6\x35\x44\xdb\xd6\xc3\xe3\x9e\x97\x8f\x13\x62\x06\x2d\x30"
- "\xa2\x17\x67\x79\x7c\xe6\x50\x5c\xdb\xa6\x1d\xd5\x03\x05\xde\x26"
- "\x41\x0f\xbc\x7f\x9d\xf4\xce\x5a\x0c\x3a\xa0\x44\xd4\x01\x0d\x56"
- "\x9d\x26\xd1\x00\x53\x2f\x6b\x49\x56\x12\x5b\x03\x7f\x63\xbd\xa8"
- "\x01\x70\xfc\xe7\x5e\x0f\x22\xfd\x8c\xb4\xb6\x61\xe9\x78\x5a\x03"
- "\xdf\xbb\x8a\x68\xb6\x4e\x23\x3e\xc5\xe1\xe7\x70\xee\x78\x40\x71"
- "\xd5\x76\xb2\x64\x14\x79\xd8\x84\x63\x7e\x12\x97\x5f\x5c\x95\x4e"
- "\x70\xdd\x3e\xd0\x7e\x83\x32\xae\x93\x21\x38\xce\x8e\x9e\x4e\xc7"
- "\x7e\x3a\xc6\x0e\x19\x7c\x28\xe8\x10\x51\xaf\xdb\x86\xf0\xf5\xbf"
- "\x8a\xf3\x51\x73\x26\x16\x9a\x7a\x4c\x4c\x35\x83\x2f\xe9\x7a\x8d"
- "\x09\x81\x96\x8f\x3f\x22\xbb\x00\x87\x9f\x9e\xab\xf6\xc0\xb5\xa7"
- "\x71\x1f\x46\xcb\xce\xc9\xe5\x8c\x6f\x6e\x08\xbe\xb9\x41\x7d\x83"
- "\x7e\x99\x16\x45\x70\x9d\xbf\x76\xe8\x93\x32\x63\x05\xb1\x2c\xb3"
- "\xee\xc5\xd8\x9f\x6c\xb1\x50\x7f\x98\x6f\xe8\xda\x58\xc0\xf6\xb8"
- "\x9e\x15\xe0\x81\xd7\x63\xab\x71\x7f\xc6\x44\x8f\xb6\xa8\xc7\x00"
- "\xdf\xf7\x6d\x6d\x04\x3f\x9c\xa5\x7e\xe0\x92\xb4\xfc\xbf\x26\x08"
- "\x37\xa0\xed\xee\x37\x6e\x80\x2f\x8c\x76\xbe\x08\xc5\x7d\x1c\x71"
- "\xad\x39\xd3\x7a\xba\x9e\x1e\xef\x8b\x65\x41\x5d\x70\x2d\x0a\x7e"
- "\x1e\xc9\x8d\x20\xe4\x4b\xed\x96\x0b\x38\xff\x85\xfa\xc0\x2c\xd8"
- "\x1e\xf7\x74\x44\x7b\xa3\xd6\x2a\x03\x8d\xc5\xcf\xeb\x48\x79\x66"
- "\xf7\x8d\xed\x13\x53\xb1\xee\xe4\x8a\xe6\xd9\x3d\xee\xe9\x9b\x67"
- "\x77\xb7\xbc\xed\x03\x5b\xa1\xed\x87\x24\x88\xb6\x7f\xee\x09\xf7"
- "\x6c\xff\x5c\xff\x96\xb7\xbd\xb6\x15\xda\xfe\x59\x93\x68\xfb\xa1"
- "\x79\xee\xd9\x7e\xa8\xe2\xfc\x7f\xb4\x3d\xe6\x83\xac\xb9\x20\x6b"
- "\x1e\x08\xc7\x38\x1a\x83\x8c\x9c\x29\xd6\x25\x8e\x9c\x29\xad\x4b"
- "\xfc\xfe\x20\xe6\x48\xac\x75\x89\xc3\x9c\xe4\x7f\x46\xec\x14\xf3"
- "\x3f\xc3\xdb\x52\xdd\xf8\xc2\x6f\x54\x37\xbe\xc0\xbf\xd3\x8a\x3d"
- "\x45\x34\xa6\xdf\x4f\xd2\xef\x9a\x5f\xa8\xc1\x39\x39\xbb\xae\x18"
- "\x35\xab\x6b\x41\x07\x6a\x1e\xe1\x30\xef\xb3\x66\x01\xd6\x23\xd6"
- "\x11\xd0\x60\x8f\x5c\xd2\xbc\xd0\x0b\xd7\xef\xfa\xea\x4a\x21\x9f"
- "\x6f\xe1\xba\x7f\x44\x76\x3e\x68\xf0\xc0\xb1\x6d\xd7\x7c\xa3\xc6"
- "\x8a\x17\xeb\xdc\x3b\xb0\x61\xa1\xd9\x3f\x45\x7f\x75\xfb\xc4\x7c"
- "\x6b\xfd\xa0\x29\x6f\x72\xb9\x2c\x86\x70\x4e\x1f\xe0\x08\x31\x83"
- "\x73\xf0\xac\x78\x42\x1c\x95\x1a\xab\x09\xee\x4f\xd3\xbe\x1a\xe2"
- "\x7d\xc0\xd0\x94\x1d\xe0\x5f\x29\x8e\x52\x15\x70\xb4\x91\xc5\xd1"
- "\x55\x01\x47\x80\x27\x11\x47\x4d\xf3\xb9\xae\x55\xaa\xc2\x51\x8d"
- "\x80\xa3\xf5\x36\x38\xba\x1c\x48\xbe\xaf\x3c\x25\xe0\xe8\xb9\x18"
- "\x53\x4f\x2b\x8e\x9e\xbf\x76\x28\x0c\x70\x14\xa6\x16\x47\xcf\xd7"
- "\xb1\x31\xeb\xa8\x0e\xf6\x31\xeb\x0b\x93\x6c\x63\x56\x6b\x8c\x7a"
- "\xd5\x3f\x5e\x7f\x15\xe2\xd4\xba\xa6\x38\xf5\x85\x58\xf7\xf0\xfc"
- "\xc2\x72\xd7\x6a\xbc\x5e\x38\x65\x5b\xe3\xf5\x29\x1f\xa7\x0e\x5b"
- "\x81\x58\x93\x8f\x53\xe9\x39\xfb\xda\x9c\x11\xb1\x62\x6d\xce\x88"
- "\x51\x77\x7e\x8d\xd7\xf0\x1a\xf9\x78\x61\xf8\x35\x5a\xe3\xf5\x42"
- "\x65\xf3\xd7\x78\xbd\x50\x29\x1f\x97\x8e\x88\xa0\xba\xfd\x05\xbd"
- "\x7d\x8d\x17\x7c\x47\x36\x2e\x1d\x91\x25\x7c\xa7\x92\x8d\x4b\x69"
- "\x1b\xc0\x27\x7b\x95\xe3\xd2\x17\x43\x28\xbf\xbc\xd8\x93\xf2\x0b"
- "\xf5\xa9\x7d\x5c\x3a\xc2\x2c\x8d\x4b\xe5\x6b\xbc\x28\x86\xf8\x7e"
- "\x2a\xc6\xa5\x2f\x8e\xb0\x8f\x4b\x87\x25\xc8\xd7\x78\x8d\xec\x2a"
- "\xe2\xe8\xa5\xfd\x6c\x8d\xd7\x8b\x6b\x5a\x47\x8d\x97\x22\xb6\x6a"
- "\xd8\x1a\xaf\x97\xa6\xaa\xaf\xf1\x7a\x69\xbd\xba\x58\x14\x31\x27"
- "\x17\x8b\xbe\x74\xca\x16\x73\x6c\x2c\xfa\x52\x83\x7c\x2c\x3a\xb2"
- "\x03\x1b\x8b\x62\xfb\x72\xb1\xe8\xc8\x67\x99\xf6\xed\x62\xd1\x91"
- "\x93\xd8\x58\x94\x5e\x27\xc6\xa2\x23\x4d\x94\x43\x87\xf5\x52\x1f"
- "\x8b\x8e\xe4\xdf\x6b\xe6\x6d\xa2\xef\x6e\xd8\x38\x74\xe4\x79\x36"
- "\x0e\x1d\x59\x40\xe3\xcd\x51\x5a\x5a\xdf\x35\xb2\x98\x1e\x1f\x16"
- "\x24\x3d\x2e\xc6\xa1\xf4\x38\xd6\x77\xd1\xba\xae\x51\x81\xea\xe2"
- "\xcf\x7e\x77\x60\xfc\xd9\xdf\x41\xfc\xd9\xbf\x95\xc6\x9f\x2f\xef"
- "\x75\x2f\xfe\x7c\xb9\xa0\xe5\x75\x78\x6b\x8c\x81\x46\x0d\x10\x75"
- "\xf8\xe8\x81\xee\xe9\x96\xd1\x03\x5a\xde\xf6\xad\x31\x06\xfa\x13"
- "\x11\x6d\x3f\xe6\x73\xf7\x6c\x3f\x46\x71\xfd\x37\xe7\x31\x50\x88"
- "\x4e\x8c\x81\x42\x74\xca\x31\xd0\xd8\x95\x8e\x63\xa0\x57\xf2\xc5"
- "\x18\x68\x7c\x07\xaa\x51\x82\xaf\x51\x8d\x12\xbc\x47\x7d\x0c\x14"
- "\xdc\xe7\x6e\x0c\xa4\x26\x06\x1a\xbd\x5c\x8c\x81\xc6\x35\xb8\x17"
- "\x03\x8d\x33\xb2\x31\xd0\x6b\xfe\xf6\x31\x50\xb0\xdd\xfc\x6f\xe5"
- "\x18\x28\x38\xd1\x3d\x3c\x07\x27\xb8\x16\x03\x05\x9f\x95\x8f\x81"
- "\xc6\x26\x2b\xc7\x40\xf4\x9c\xbd\x76\x7d\x25\x51\xd4\xae\xaf\x8c"
- "\xb9\xf3\x63\xa0\xf1\x06\x79\x9d\x3a\xbe\x81\xc6\x40\xc1\xfa\xe6"
- "\x8f\x81\x82\xf5\xf2\x31\xd0\x2b\xf3\xa8\x5e\x0c\xae\xb2\x8f\x81"
- "\xe0\x3b\xb2\x31\xd0\x2b\xdb\x84\xef\xe8\xd9\x18\x88\xb6\x01\x7c"
- "\xb2\x5f\x39\x06\x7a\x75\x12\xe5\x97\x57\x7b\x51\x7e\xa1\x3e\xb5"
- "\x8f\x81\x5e\xf5\x70\x1e\x03\x51\x0c\xf1\xfd\x54\x8c\x81\x5e\x1d"
- "\x65\x1f\x03\x8d\x5d\x21\x1f\x03\x85\x74\x13\x71\x34\xe1\x00\x1b"
- "\x03\xbd\xba\xbe\x75\xc4\x40\x8a\xd8\x32\xb0\x31\xd0\x84\xe9\xea"
- "\x63\xa0\x09\xe9\xea\x62\x20\xc4\x9c\x5c\x0c\x34\xe1\xac\x2d\xe6"
- "\xd8\x18\x68\x82\x59\x3e\x06\x0a\xf1\x67\x63\x20\x6c\x5f\x2e\x06"
- "\x0a\x19\xc6\xb4\x6f\x17\x03\x85\x4c\x65\x63\x20\x7a\x9d\x18\x03"
- "\xbd\x46\x28\x87\x8e\xed\xa3\x3e\x06\x0a\x39\xab\x1c\x03\x85\x5c"
- "\x64\x63\xa0\x90\x7d\x34\xd6\x79\xcd\x8f\xc6\x40\x21\xe5\xf4\xf8"
- "\xd8\xde\xd2\xe3\x62\x0c\x44\x8f\x8b\x31\xd0\x6b\x3d\xd4\xc5\x40"
- "\x8f\xdc\x81\x31\x50\xa0\x83\x18\x28\xb0\x95\xc6\x40\x13\xf7\xbb"
- "\x17\x03\x4d\xdc\x77\x57\x87\xbb\xa3\xc3\x5f\x1b\x24\xea\xf0\x49"
- "\x83\xdd\xd3\x2d\x93\x1c\xbe\xff\x74\xac\xc3\xc3\x0d\xa2\x0e\x0f"
- "\x37\x28\xeb\xf0\xc9\x6d\x1d\xeb\xf0\x69\x83\x44\x1d\x1e\xb6\x91"
- "\x8e\x93\x61\xb1\x74\x9c\x0c\x7b\x56\xbd\x0e\x9f\xb2\xe7\xae\x0e"
- "\x57\xa3\xc3\x43\xbd\x44\x1d\x3e\x25\xd1\x3d\x1d\x3e\x25\x81\xd5"
- "\xe1\xd3\xb3\xec\x75\xf8\x94\xf3\xae\xeb\xf0\xb0\x36\xee\xe1\x39"
- "\xcc\xc7\x35\x1d\x1e\x16\x21\xaf\xc3\x27\x6b\x95\x75\x38\x3d\x67"
- "\xaf\x9f\xa6\xb5\x11\xf5\xd3\xd4\xe3\x77\xbe\x0e\x9f\x1a\x23\xaf"
- "\x95\xa6\x26\x52\x1d\x1e\xa6\x6b\x7e\x1d\x1e\xa6\x93\xd7\xe1\x53"
- "\xaf\x51\xcd\x12\x36\xd7\x5e\x87\xc3\x77\x64\x75\xf8\xb4\x5e\xc2"
- "\x77\x74\xac\x0e\xa7\x6d\x00\x9f\x8c\x50\xd6\xe1\xd3\xce\x52\x7e"
- "\x99\xf6\x39\xe5\x17\xea\x53\x7b\x1d\x3e\x6d\x95\x73\x1d\x4e\x31"
- "\xc4\xf7\x53\x51\x87\x4f\x3b\x6a\xaf\xc3\x27\xfb\xca\xeb\xf0\xf0"
- "\x1d\x22\x8e\xc2\x47\xb1\x3a\xfc\xf5\xce\xad\x43\x87\x2b\x62\x2b"
- "\x86\xd5\xe1\xaf\x5f\x54\xaf\xc3\xc3\xbb\xaa\xd3\xe1\x88\x39\x39"
- "\x1d\x1e\x1e\x61\x8b\x39\x56\x87\x87\xaf\x94\xd7\xe1\xe1\x59\xac"
- "\x0e\xc7\xf6\xe5\x74\x78\xf8\x61\xa6\x7d\x3b\x1d\x1e\x7e\x9e\xd5"
- "\xe1\xf4\x3a\x51\x87\x4f\x4f\xa6\x1c\x3a\x69\x8f\x7a\x1d\x3e\x3d"
- "\x42\x59\x87\x4f\x7f\x9b\xd5\xe1\xd3\x87\x53\xbd\x3d\x3d\x93\xea"
- "\xf0\xe9\xa1\xf4\xf8\xa4\xdd\xd2\xe3\xa2\x0e\xa7\xc7\x45\x1d\x3e"
- "\x7d\xa7\x3a\x1d\xde\xfe\x0e\xd4\xe1\x5a\x07\x3a\x5c\xdb\x4a\x75"
- "\xf8\x1b\x23\xdc\xd3\xe1\x6f\x28\xee\xff\xe9\x5c\x0b\x46\x9a\x44"
- "\x2d\x18\x69\x52\xd6\x82\x33\x3b\x3b\xd6\x82\x3a\xc9\xfa\x00\xb3"
- "\xb7\x53\xae\x9e\xbd\x8a\x72\xf5\xec\x51\xea\xb5\xe0\xac\x03\x77"
- "\xb5\xa0\x1a\x2d\x38\xbd\x50\xd4\x82\xb3\xd6\xb8\xa7\x05\x67\xad"
- "\x66\xb5\xe0\x9b\x3b\xec\xb5\xe0\xac\xdf\x5c\xd7\x82\xb3\xfd\xdd"
- "\xd3\x82\xb3\xfd\x5c\xd3\x82\xb3\x17\xc9\x6b\xc1\x99\x5d\x94\xb5"
- "\x20\x3d\x67\x3f\x86\xeb\xfc\xc5\x31\x7c\xce\xd9\x3b\x5f\x0b\xce"
- "\x59\x21\x3f\x5e\xcf\x59\x43\xb5\xe0\xec\xe8\xe6\xd7\x82\xb3\xa3"
- "\xe5\xb5\xa0\x4e\x98\xff\x3c\x3b\xc6\x5e\x0b\xc2\x77\x64\xb5\xa0"
- "\x4e\x98\xff\x3c\x3b\x9a\xd5\x82\xb4\x0d\xe0\x13\x07\xf3\x9f\x75"
- "\xc2\xfc\x67\x9d\x30\xff\x99\xfa\xd4\x5e\x0b\xea\xd2\x9d\x6b\x41"
- "\x8a\x21\xbe\x9f\x8a\x5a\x50\x27\x33\xff\x79\x66\x80\xbc\x16\x8c"
- "\xdc\x23\xe2\x28\x32\x84\xd5\x82\x11\x3d\x5b\x87\x16\x54\xc4\xd6"
- "\x0a\x56\x0b\x46\x5c\x53\xaf\x05\x23\x7b\xa9\xd3\x82\x88\x39\x39"
- "\x2d\x18\xb9\xc8\x16\x73\xac\x16\x8c\x5c\x2f\xaf\x05\x23\x77\xb0"
- "\x5a\x10\xdb\x97\xd3\x82\x91\xc7\x99\xf6\xed\xb4\x60\xe4\x6f\xac"
- "\x16\xa4\xd7\x89\x5a\xf0\xcd\x34\xca\xa1\x6f\x1c\x50\xaf\x05\xdf"
- "\x5c\xa4\xac\x05\xdf\x8c\x65\xb5\xe0\x9b\xc1\x54\xf3\xbd\x99\x4b"
- "\xb5\xe0\x9b\x33\xe9\xf1\x37\x0a\xa5\xc7\x45\x2d\x48\x8f\x8b\x5a"
- "\xf0\xcd\x02\x67\x5a\xd0\xb1\x7e\x58\x38\x41\xd4\x0f\x0b\x27\x48"
- "\xf5\xc3\x61\x46\x3f\xcc\x9d\xe4\x58\x3f\x44\x65\x8a\xfa\x61\xbe"
- "\x99\x3e\xdf\xf3\xcf\xd2\xe7\x7b\xfe\x36\x5e\x3f\x8c\x81\x71\x1e"
- "\xf4\x43\xde\xa5\x7c\xaa\x1f\x2e\x19\x35\xef\x5f\x11\xf4\x43\x0d"
- "\xf1\x59\x3d\x5f\xd0\x0f\xd3\x50\x3f\xcc\xef\x8c\xfa\xc1\x37\x13"
- "\xb4\x6a\x95\xa0\x5d\xa3\x40\xbb\x56\xc1\x67\x78\x76\xbe\x82\x36"
- "\x4a\x41\x5f\xa6\xe2\xf7\x71\x3f\x03\x68\x8b\x9f\x97\xc9\xcf\xd9"
- "\xd4\x7b\xe3\x3e\x39\xa8\x2d\x70\xdf\x09\xa7\x7b\x4e\x54\x09\x7b"
- "\x4e\xcc\x64\xf7\x9c\xc0\xbd\x26\x70\xdf\x89\xcc\x05\xc4\x6f\xb3"
- "\xa0\x29\xda\x25\x7a\xb4\xc3\x7d\x27\xda\xd5\x51\x7d\x9a\x67\x29"
- "\xa2\xfa\x74\x61\xc0\x7d\xa0\x85\x7a\x6f\xa9\x15\xb5\xc4\x87\xa8"
- "\x23\x16\x06\x05\xd6\x2d\x0c\x7a\xf8\xea\xd5\xa0\xee\xf6\xfb\x4d"
- "\xd4\xf5\xc0\xf5\xf2\xcb\x62\x2a\x78\x1d\xc1\xef\x53\x30\x27\x88"
- "\x6c\x9d\x4d\x7c\x40\x17\x7b\xf4\x05\x7d\xfa\x87\x2e\xd0\xf7\x12"
- "\xa2\x35\x5f\x0d\xea\x22\x5d\xdb\x10\xfa\xae\xb5\x5c\x0d\x22\xc5"
- "\xe1\x27\xf9\x39\x9a\x26\x61\x8e\xa6\x61\x61\x10\xae\xc1\x3f\x68"
- "\xd3\x02\x89\x3e\xf5\xb7\xea\xd3\x79\xe7\xdd\xd3\xa7\xf3\xaa\x58"
- "\x5d\x11\xed\x61\xaf\x2b\xe6\x8f\x72\x5d\x57\xcc\x9f\xe7\x9e\xae"
- "\x98\x3f\xd7\x35\x5d\x31\xbf\xc4\x56\x57\xec\xe0\x75\xc5\xdc\x30"
- "\xc4\xa0\xbc\xae\xa0\xe7\xec\xc7\x83\xa8\x79\xe2\x78\x10\x35\xf8"
- "\xce\xd7\x15\x6f\x55\xca\x73\xff\x5b\xe7\xa9\xae\x98\x5f\xdc\xfc"
- "\xba\x62\x7e\xb1\xbc\xae\x88\x12\xd6\x7f\x9b\x5f\x6e\xaf\x2b\xe0"
- "\x3b\xb2\xba\x22\x6a\x8d\xf0\x9d\x62\x56\x57\xd0\x36\x80\x67\x76"
- "\x28\xeb\x8a\xb7\x47\x50\xde\x79\xdb\x9f\xf2\x0e\xf5\xa9\xbd\xae"
- "\x88\xba\xec\x5c\x57\x50\x0c\xf1\xfd\x54\xd4\x15\x6f\x0f\xb4\xd7"
- "\x15\x73\x43\xe5\x75\xc5\xc2\xb6\x22\x8e\x16\xe4\xb1\xba\xe2\xed"
- "\xd8\xd6\xa1\x2b\x14\xb1\x55\xc9\xea\x8a\x05\x63\xd4\xeb\x8a\x05"
- "\x89\xea\x74\x05\x62\x4e\x4e\x57\x2c\x28\xb1\xc5\x1c\xab\x2b\x16"
- "\x5c\x94\xd7\x15\x0b\x3d\x58\x5d\x81\xed\xcb\xe9\x8a\x85\x7d\x98"
- "\xf6\xed\x74\xc5\xc2\x51\xac\xae\xa0\xd7\x89\xba\x62\x61\x0d\xe5"
- "\xd0\xb9\x1e\xea\x75\xc5\xc2\x12\x65\x5d\xb1\xf0\x38\xab\x2b\x16"
- "\xe6\x52\xfd\x10\x4d\xa8\xae\x58\xb8\x8f\x1e\x47\x0a\x15\x8f\x8b"
- "\xba\x82\x1e\x17\x75\x45\xb4\xf6\xee\x7c\xcb\x3b\x31\xc7\xb4\x68"
- "\x87\x7b\x63\xf8\x22\xc7\xfb\x7f\xde\x9d\x6f\xa9\xf0\xae\x37\xba"
- "\x87\xf8\xae\xf7\x9d\x9e\xee\xe9\x96\x77\x7a\xb4\xbc\xed\x5b\x63"
- "\xad\xf1\x22\x83\x68\xfb\x98\x6d\xee\xd9\x3e\x26\xbb\xe5\x6d\xdf"
- "\x1a\x6b\x1c\xde\x99\x2b\xda\x7e\x69\x57\xf7\x6c\xbf\xb4\x8b\xfb"
- "\x79\xed\x44\x49\x8d\x43\xa2\x41\x39\x2e\x5d\xfa\x9b\xe3\xb8\x34"
- "\x5e\x52\xe3\x10\x2b\xd4\x38\xc4\x0a\x35\x0e\xb1\x7c\x8d\x43\x1c"
- "\xc6\xa5\x1f\xa7\x1b\x3e\x5b\x50\xa0\xc1\x75\xb7\xf2\x16\x18\x35"
- "\xe0\x13\x2f\x13\xc6\xa5\x60\xeb\x35\xfc\xfe\x0f\x07\x85\xbc\xf6"
- "\xf2\x3d\xa5\xd5\xd2\xbd\x1f\x96\x0d\x13\xd7\xae\x3d\x48\xf0\xdc"
- "\x57\xb5\x05\x9a\xd4\x46\x9b\x9c\x37\xb4\x19\x38\x9f\xcd\x79\x63"
- "\xae\xbb\x41\xb2\x8f\x83\x39\x3d\x45\xef\x2c\xe7\x6d\x9b\xef\xce"
- "\x6a\x24\x7e\xad\x37\xe7\x1d\x53\x2d\xe6\xbc\x97\xbb\x59\xff\xb0"
- "\xdc\xa6\xfe\x21\x49\xa6\xfe\x61\xb9\x8a\xfa\x87\x58\x37\xeb\x1f"
- "\x62\x5d\xac\x7f\x88\xb5\xab\x7f\xa0\xb1\xe9\xd2\xba\x38\xc5\xd8"
- "\x94\x9e\xb3\x8f\x29\xe2\x25\xf5\x0f\x71\xad\xa0\xfe\x21\x4e\xe1"
- "\x1d\x75\x9c\x50\xff\x10\x7b\x0b\xea\x1f\x62\x15\xea\x1f\xe2\x84"
- "\xfa\x87\x58\x99\xfa\x87\x58\x85\xfa\x87\x78\xa1\xfe\x21\xd6\xa6"
- "\xfe\x21\x56\xa8\x7f\x88\x77\x50\xff\x10\x2f\xd4\x3f\xc4\x0b\xf5"
- "\x0f\xd4\xa7\xf6\xb1\x69\xbc\x0b\xf5\x0f\xb1\x42\xfd\x43\xac\x83"
- "\xfa\x87\x78\x99\xfa\x87\xa5\x06\xf9\xd8\x34\x51\x52\xff\x90\x68"
- "\x53\xff\x90\xd0\x4a\xea\x1f\x14\xb1\x65\x53\xff\x90\xe0\x46\xfd"
- "\x43\xa2\xca\xfa\x87\x58\x85\xfa\x87\xc4\x08\x5b\xcc\xb1\xb1\x69"
- "\xa2\x42\xfd\x43\xa2\x4d\xfd\x43\xac\x42\xfd\x43\xe2\x61\xa6\x7d"
- "\xbb\xd8\x34\xd1\xa6\xfe\x21\xd6\xa6\xfe\x21\x49\xa8\x7f\x58\xba"
- "\x51\x7d\x6c\x9a\xe4\xa0\xfe\x21\xc9\xa6\xfe\x21\x49\xa8\x7f\x48"
- "\x12\xea\x1f\x92\x84\xfa\x87\xa5\x19\xd2\xe3\x62\x6c\x4a\x8f\x8b"
- "\xb1\x69\x92\xca\xfa\x87\xbb\x73\x31\x6f\x4f\x6c\xba\xc2\xcd\xfa"
- "\x87\x15\x0e\xeb\x1f\xee\xc6\x47\x4a\x1a\x3d\xa9\x50\xd4\xe8\x2b"
- "\x0f\xb8\xa7\x5b\x56\x16\xb6\xbc\xed\x5b\x63\x7c\xb4\x62\xb5\x68"
- "\xfb\x3f\x3f\xeb\x9e\xed\xff\x3c\xc4\xfd\xf8\x68\x9d\x56\x8c\x8f"
- "\xd6\x69\x95\xe3\xa3\xe4\x0e\x8e\xe3\xa3\xd5\xa1\x62\x7c\x94\xb2"
- "\x97\x6a\x94\x94\x2c\xaa\x51\x52\xa6\xaa\x8f\x8f\x56\x1d\x67\xe3"
- "\xa3\xe4\xe9\x77\xe3\x23\x77\xe3\xa3\xf7\x7c\xc4\xf8\x68\xd5\x36"
- "\xf7\xe2\xa3\x55\xd9\x6c\x7c\xb4\x6e\xbf\x7d\x7c\x94\xe2\xed\x7a"
- "\x7c\x94\xd2\xcb\x3d\xac\xa7\x04\xb9\x16\x1f\xa5\xac\x92\x8f\x8f"
- "\x92\xfd\x94\xe3\x23\x7a\xce\x5e\xd7\xae\xee\x25\xea\xda\xf7\xaf"
- "\xdd\xf9\xf1\xd1\xfb\x19\xf2\x1a\xf6\xfd\x6d\x34\x3e\x4a\x49\x6e"
- "\xfe\xf8\x28\x25\x59\x3e\x3e\x5a\xed\x4f\xb5\x64\xca\x6a\xfb\xf8"
- "\x08\xbe\x23\x1b\x1f\xad\x1e\x25\x7c\x27\x99\x8d\x8f\x68\x1b\xc0"
- "\x35\xb3\x94\xe3\xa3\x35\x1e\x94\x7b\x56\x1f\xa5\xdc\x43\x7d\x6a"
- "\x1f\x1f\xad\xde\xe1\x3c\x3e\xa2\x18\xe2\xfb\xa9\x18\x1f\xad\xfe"
- "\xcd\x3e\x3e\x4a\xd6\xca\xc7\x47\x6b\x0f\x8b\x38\x5a\x1b\xc1\xc6"
- "\x47\x6b\x06\xb7\x8e\xf8\x48\x11\x5b\x19\x6c\x7c\xb4\xb6\x8d\xfa"
- "\xf8\x68\xed\xb3\xea\xe2\x23\xc4\x9c\x5c\x7c\xb4\x76\x95\x2d\xe6"
- "\xd8\xf8\x68\xed\x76\xf9\xf8\x68\xed\x7e\x36\x3e\xc2\xf6\xe5\xe2"
- "\xa3\xb5\x17\x99\xf6\xed\xe2\xa3\x75\xde\x6c\x7c\x44\xaf\x13\xe3"
- "\xa3\x75\xb9\x94\x43\xff\xbc\x57\x7d\x7c\xb4\x6e\x95\x72\x7c\xb4"
- "\x6e\x3d\x1b\x1f\xad\x9b\x49\xe3\xa0\x75\xfb\x68\x7c\xb4\x2e\x86"
- "\x1e\xff\x73\x81\xf4\xb8\x18\x1f\xd1\xe3\x62\x7c\xb4\xae\xf8\xee"
- "\x3c\xcd\x3b\x31\x3e\x5a\x3f\xcb\xbd\xf8\x68\xfd\xcc\xbb\x1a\xdd"
- "\x1d\x8d\xbe\x4e\x2f\x6a\xf4\x0f\xce\xba\xa7\x5b\x3e\xd0\xbb\xaf"
- "\xd1\x37\xed\x16\x35\xfa\xa6\xdd\xca\x1a\xfd\xc3\x3d\x8e\x35\xfa"
- "\x47\x26\x51\xa3\x6f\x98\x4a\xc7\xc9\x0d\xc2\xbe\x9d\x1b\x3c\xd4"
- "\x6b\xf4\xf4\x25\xac\x46\x4f\xf3\xbe\xab\xd1\xdd\xd5\xe8\xeb\x77"
- "\x8a\x1a\x3d\x7d\x84\x7b\x1a\x3d\x7d\x38\xab\xd1\x37\x4f\xb7\xd7"
- "\xe8\xe9\x3b\x5c\xd7\xe8\xe9\x25\xee\x61\x3d\xbd\xd8\x35\x8d\xbe"
- "\xa1\x8f\xbc\x46\xff\xb0\x40\x59\xa3\xd3\x73\xf6\xda\xea\xa3\x12"
- "\x51\x5b\x7d\xb4\xf1\xce\xd7\xe8\x1f\x0d\x91\xd7\x51\x1f\x8d\xa0"
- "\x1a\x7d\x43\xef\xe6\xd7\xe8\x1b\x7a\xcb\x6b\xf4\x8f\x84\xfd\x7f"
- "\x37\xf4\xb7\xd7\xe8\xf0\x1d\x59\x8d\xfe\xd1\x65\xe1\x3b\xbd\x59"
- "\x8d\x4e\xdb\x38\xa7\xc9\x68\xa3\xac\xd1\x33\x84\x79\x41\x19\x8b"
- "\x28\xf7\x50\x9f\xda\x6b\xf4\x8c\x31\xce\x35\x3a\xc5\x10\xdf\x4f"
- "\x45\x8d\x9e\x91\x6e\xaf\xd1\x3f\xdc\x2d\xaf\xd1\x37\x49\xea\x34"
- "\x37\xb5\x65\x35\x7a\xc6\xa9\xd6\xa1\xd1\x15\xb1\x35\x84\xd5\xe8"
- "\x1b\xf3\xd4\x6b\xf4\x8d\x67\xd5\x69\x74\xc4\x9c\x9c\x46\xdf\xd4"
- "\xc7\x16\x73\xac\x46\xdf\x34\x4a\x5e\xa3\x6f\x9a\xce\x6a\x74\x6c"
- "\x5f\x4e\xa3\x6f\x5a\xc3\xb4\x6f\xa7\xd1\x37\xed\x60\x35\x3a\xbd"
- "\x4e\xd4\xe8\x9b\x47\x53\x0e\xfd\x70\xaa\x7a\x8d\xbe\xb9\x8f\xb2"
- "\x46\xdf\x3c\x90\xd5\xe8\x9b\x7d\xa8\x16\xdf\x1c\x4e\x35\xfa\xe6"
- "\x2e\xf4\xf8\x87\x61\xd2\xe3\xa2\x46\xa7\xc7\x45\x8d\xbe\x39\xea"
- "\xee\x1c\xce\x3b\x51\xa3\x67\xb5\x71\x4f\xa3\x67\xf9\xb8\xaf\x13"
- "\x73\x2a\x45\x9d\x98\x53\xa9\xac\x13\xb3\x4e\x39\xd6\x89\x1f\xf7"
- "\x10\x75\x62\xf6\x4a\xca\xd5\xd9\x11\x94\xab\xb3\x7b\xa9\xd7\x89"
- "\x5b\xb7\xb1\x3a\x71\x4b\x9f\xbb\x3a\xd1\x5d\x9d\xb8\x79\x85\xa8"
- "\x13\xb7\xce\x73\x4f\x27\x6e\x9d\xcb\xea\xc4\xed\x32\x7b\x65\x6d"
- "\x3d\xea\xba\x4e\xdc\x7a\xcd\x3d\x9d\xb8\xb5\xce\x35\x9d\x98\x1d"
- "\x22\xaf\x13\xb3\xf4\xca\x3a\x91\x9e\xb3\x1f\xdf\xb7\x5d\x13\xc7"
- "\xf7\x6d\x07\xee\x7c\x9d\xb8\x6d\xa6\xfc\x58\xbe\x6d\x1e\xd5\x89"
- "\xd9\x13\x9a\x5f\x27\x66\x4f\x90\xd7\x89\xdb\x84\xf5\xcf\xb2\x43"
- "\xed\x75\x22\x7c\x47\x56\x27\x7e\x2c\xe4\x7f\xb3\x27\xb0\x3a\x91"
- "\xb6\x01\x5c\xf3\x84\xb2\x4e\xfc\xb8\x84\x72\xcf\xc7\xc2\x7b\x24"
- "\xea\x53\x7b\x9d\xf8\xf1\x22\xe7\x3a\x91\x62\x88\xef\xa7\xa2\x4e"
- "\xfc\x78\xbf\xbd\x4e\xcc\xaa\x94\xd7\x89\x39\xe9\x22\x8e\x72\x06"
- "\xb2\x3a\xf1\x7f\xbc\x5b\x87\x4e\x54\xc4\xd6\x4c\x56\x27\xfe\xcf"
- "\x71\xf5\x3a\x31\xa7\x8d\x3a\x9d\x88\x98\x93\xd3\x89\x39\x21\xb6"
- "\x98\x63\x75\x62\xce\xdb\xf2\x3a\x31\x67\x15\xab\x13\xb1\x7d\x39"
- "\x9d\x98\xb3\x87\x69\xdf\x4e\x27\xe6\x1c\x65\x75\x22\xbd\x4e\xd4"
- "\x89\xdb\x85\x3d\xb0\xb2\x56\xaa\xd7\x89\xdb\x43\x94\x75\xe2\x76"
- "\x9b\xfd\xaf\xb6\x0b\xfb\x5f\x6d\x4f\xa6\x3a\x71\xbb\xb0\xff\x55"
- "\xd6\x0a\xe9\x71\x51\x27\xd2\xe3\xa2\x4e\xdc\x9e\x71\x73\xf3\x3b"
- "\xf3\x82\x45\x6d\x91\x17\xac\xac\x2d\xfe\x32\xd8\xb1\xb6\xf8\x24"
- "\x43\xd4\x16\xb9\x0d\xf4\xf9\xce\x3d\x45\x9f\xef\x5c\xbe\x3e\x29"
- "\xb6\x04\xb4\x45\xf7\x74\xc3\xae\x2b\xf9\xbc\xb6\xf8\x6c\xbe\x51"
- "\x03\x7a\xcf\xcb\x82\xda\x02\x74\xdd\xea\xc5\xa8\x2d\xaa\x84\xf9"
- "\x9d\xb9\xfe\x25\x31\x52\x6d\xf1\x97\x35\xfc\x5c\x4f\xd4\x17\x75"
- "\x46\xfe\x3a\x3c\x2f\x37\xf7\x73\xff\x7c\x61\xee\x27\xb4\x2d\x9d"
- "\xf3\xc9\xcf\x03\xbd\x02\xda\x63\x06\xf8\x43\xa2\x3d\xee\xce\xfd"
- "\xc4\xb1\xfe\x7f\xcf\xba\xa7\x6b\xff\x57\xcf\x6a\x8e\x3c\xb3\xbd"
- "\xe6\xc8\x1d\xe1\xba\xe6\xc8\x8d\x70\x4f\x73\xe4\xea\x5c\xd3\x1c"
- "\xb9\x87\xe5\x35\xc7\x5f\x86\x20\x3e\xe5\x35\x07\x3d\x67\x3f\x56"
- "\x7c\x12\x21\x8e\x15\x9f\x0c\xbc\xf3\x35\xc7\x8e\x0a\xf9\x71\x61"
- "\xc7\x59\xaa\x39\x72\x8b\x9a\x5f\x73\xe4\x16\xc9\x6b\x8e\x4f\x04"
- "\xfe\xcf\x2d\xb6\xd7\x1c\xf0\x1d\x59\xcd\xf1\x89\xf0\xfe\x2f\xb7"
- "\x88\xd5\x1c\xb4\x0d\xe0\xa0\xed\xca\x9a\xe3\xd3\x61\x94\x93\x3e"
- "\xed\x40\x39\x89\xfa\xd4\x5e\x73\x7c\x72\xd1\xb9\xe6\xa0\x18\xe2"
- "\xfb\xa9\xa8\x39\x3e\x7d\xc2\x5e\x73\xfc\x65\x90\xbc\xe6\xc8\x93"
- "\xd4\x69\xef\xdc\xc1\x6a\x8e\x4f\x97\xb4\x0e\xcd\xa1\x88\xad\x0a"
- "\x56\x73\xec\x1c\xa5\x5e\x73\xec\x8c\x55\xa7\x39\x10\x73\x72\x9a"
- "\x63\xe7\x61\x5b\xcc\xb1\x9a\x63\xe7\x79\x79\xcd\xb1\xd3\xcc\x6a"
- "\x0e\x6c\x5f\x4e\x73\xe4\xf5\x62\xda\xb7\xd3\x1c\x79\x23\x58\xcd"
- "\x41\xaf\x13\x35\x47\x5e\xb5\x10\xb7\x9d\x55\xaf\x39\xf2\x0e\x2b"
- "\x6b\x8e\xbc\xa3\xac\xe6\xc8\xcb\xa1\xda\x22\xcf\x44\x35\x47\x5e"
- "\x81\xa0\x45\xf4\xd2\xe3\xa2\xe6\xa0\xc7\x45\xcd\xb1\xcb\x57\x45"
- "\x6e\xaa\x4a\xcd\xdc\xcf\xbc\xeb\x6c\x6e\xca\x9a\x97\x32\xf5\x9e"
- "\x7c\xac\x29\x37\x05\x63\xbd\xd2\x9e\xe8\x98\x9b\xc2\xb1\x5b\xcc"
- "\x4d\x9d\xe2\xb9\x4a\xcc\x4d\xe9\xf9\xdc\x14\xe6\xa5\x20\x66\x6f"
- "\xca\x4b\x59\xde\xb1\x9f\xf7\x99\x67\x51\x9f\x97\x9a\xf6\xb6\x96"
- "\x6c\xe1\xc7\x6f\x63\x26\xcd\x4b\x55\x34\xe5\xa5\x70\xdc\x36\xd7"
- "\xdb\xe7\xa5\x70\xbc\x16\xf3\x52\x27\xdd\xcc\x4b\x7d\xb6\xcd\xbd"
- "\xf1\xfb\xb3\x3b\x60\xfe\x5b\x6b\x9c\xf7\xb9\x2b\x50\x7c\x77\xfc"
- "\xb9\x9b\xf3\xdf\x3e\x77\x38\xff\xed\x6e\x5d\xb3\x92\xed\x3f\xab"
- "\x16\x6d\xff\xd7\x8d\xee\xd9\xfe\xaf\x19\x2d\x6f\xfb\xd6\x58\x33"
- "\xf1\xf9\x4c\xd1\xf6\xbb\xdd\x5c\xff\x6d\xb7\x9f\xfb\xb9\xf0\x7d"
- "\xbe\x62\xbc\xba\xcf\x57\x1a\xaf\x16\x0d\x97\xc6\xab\xbb\x2f\x3a"
- "\x8e\x57\xf7\x4e\x10\xe3\xd5\x2f\xf6\x50\x6d\xf8\xc5\x46\xaa\x0d"
- "\xbf\xe0\xf7\x24\x8b\x1d\x46\xf8\x38\xd5\x84\x31\x6b\xa4\x51\xb3"
- "\xeb\x52\xa1\xc6\x94\x44\x63\xd5\x32\x53\x31\x29\x31\x18\xc9\xfb"
- "\x8b\x89\xd7\xaa\x2b\xc4\xeb\x93\x5a\xa3\xa6\xfd\x5c\xe2\x03\xe3"
- "\x04\x68\xa9\x62\xd0\x16\x59\x24\x2a\x0e\xe3\xd8\xbf\x1d\x2d\x8b"
- "\x32\x48\xe2\xd8\x3d\xe3\xc5\x18\x16\xae\x8b\x32\x92\xaf\x23\x0b"
- "\x35\x18\xab\xde\x48\x4f\xd1\xdf\xe8\x33\xb9\x9c\x5f\xb3\x48\x9a"
- "\x2f\x87\xdf\x0e\x9c\xc6\xe6\xcb\x1b\xd3\x53\xaa\x1a\xf2\x26\x1f"
- "\xe3\xd7\x43\xec\x29\xe6\xcd\x5d\xcd\x97\x6f\x6e\x24\x7e\xd6\xf5"
- "\x10\x71\x5c\x6c\x7d\xf9\xf2\xbf\xea\xc5\x7c\xf9\xdf\xb2\xdc\xcb"
- "\x97\xff\x2d\x93\x8d\x5d\xf7\xed\xb5\x8f\x5d\xbf\xf0\x70\x3d\x76"
- "\xfd\xc2\xcd\xf9\xff\x5f\xf4\x70\x2d\x76\xfd\x62\xa5\x6d\xec\x9a"
- "\x1b\x87\xb1\xeb\xee\x1a\xc4\xaa\x7c\xec\x4a\xcf\xd9\xc7\x1c\x7b"
- "\x7b\x8a\x31\x47\xc1\x6f\x77\x7e\xec\x5a\x90\x26\x1f\x5f\x14\x64"
- "\xd1\xd8\xf5\x8b\x15\xcd\x1f\xbb\x7e\xb1\x42\x3e\x76\xdd\xdb\x81"
- "\xea\xfc\x2f\x56\x58\xe3\x50\x31\x76\x85\xef\xc8\xc6\xae\x7b\x47"
- "\xd8\x7e\x87\xc6\xae\x5f\x24\xd3\xd8\x75\xef\x74\xe5\xd8\x75\xaf"
- "\xb0\x5e\xda\xde\x12\xca\x4f\xd4\xa7\xf6\xb1\xeb\xde\xed\xce\x63"
- "\x57\x8a\x21\xbe\x9f\x8a\xb1\xeb\xde\xcb\xf6\xb1\xeb\xee\x6a\xf9"
- "\xd8\xf5\xef\x87\x44\x1c\xfd\x7d\x16\x1b\xbb\x7e\x39\xb0\x75\xc4"
- "\xae\x8a\xd8\x4a\x63\x63\xd7\xbf\x7b\xab\x8f\x5d\xff\x3e\x58\x5d"
- "\xec\x8a\x98\x93\x8b\x5d\xff\xbe\x52\xc0\x4f\xb2\x7c\xec\xfa\xf7"
- "\x6d\xf2\xb1\xeb\xdf\xf7\xb2\xb1\x2b\xb6\x2f\x17\xbb\xfe\xfd\x3c"
- "\xd3\xbe\x5d\xec\xba\xcf\x83\x8d\x5d\xe9\x75\x62\xec\xba\x2f\x87"
- "\x72\xe8\xee\xf5\xea\x63\xd7\x7d\x2b\x95\x63\xd7\x7d\x6b\xd8\xd8"
- "\x75\x5f\x38\x8d\x51\xf7\x15\xd0\xd8\x75\x5f\x34\x3d\xbe\x3b\x55"
- "\x7a\x5c\x8c\x5d\xe9\x71\x31\x76\xdd\x57\xa4\x22\x76\xad\x6e\xa6"
- "\xd8\xb5\xa2\x75\xc5\xae\x8d\x61\xb7\x37\x76\xfd\x6a\xaa\x7b\xb1"
- "\xeb\x57\x61\x2e\x6a\xf8\x2a\x27\x1a\xfe\xd8\x7f\x96\x86\xdf\x57"
- "\x29\x6a\xf8\xaf\x4f\xb8\xa7\x59\xbe\xae\x68\x69\xdb\xb7\x3e\xbb"
- "\x7f\x95\x23\xda\xfd\xc0\x78\xf7\xec\x7e\x20\xf8\x6e\xdc\xea\x8e"
- "\xed\x0b\x25\xf9\x9a\x7f\xb8\x59\xff\xfc\x8f\x62\xf7\xe3\xd6\x23"
- "\xd5\x62\xdc\x7a\xa4\x5a\x1a\xb7\x7e\xcb\xbc\x67\xfd\x66\x9b\xe3"
- "\xb8\xb5\xa8\xbf\x18\xb7\x7e\xbb\x9e\xea\xc2\x6f\x85\x7a\xdb\x6f"
- "\x79\xbd\xb5\x7c\x0f\x8d\x5b\xaf\x63\xdc\x7a\x01\xe2\xd6\xd9\xe1"
- "\x1a\x93\xb0\x06\x3f\xd6\x65\x95\x40\xec\x89\xb1\x6a\x59\x0c\xfc"
- "\x3f\xda\x40\xde\x5f\x40\xbc\x52\x20\xe6\xdc\x01\xe3\xd7\x8e\xc5"
- "\x06\x4d\x72\x24\x70\x7f\x45\x1e\x69\xaf\x83\x78\xb6\x16\xe3\xd9"
- "\x83\x10\xab\xae\x14\xe2\xd9\x43\x79\x65\xd1\xd2\x78\xf6\x60\x37"
- "\x3e\x9e\x35\xd0\x9a\xaf\xb2\x68\x88\x67\xe1\xf7\x70\x4d\x7f\x69"
- "\x3c\xdb\x00\xf1\x6a\x23\xc4\xab\xa9\x97\x6c\x62\xdb\xd9\xf6\xb1"
- "\x6d\x83\x7f\x4a\xb5\xb1\xcf\xe4\x0a\x8c\x6d\xaf\x6f\xff\x4f\x8c"
- "\x6d\x0f\x64\x88\xb1\xed\xa1\x25\xee\xc5\xb6\x88\x70\x69\x6c\xfb"
- "\x7d\xba\x7d\x6c\x7b\xe8\x94\xeb\xb1\xed\xb7\x1e\xee\x3d\x33\xdf"
- "\x12\xd7\x62\xdb\x6f\xa7\xdb\xc6\xb6\x7f\xe1\xdf\xcb\x7e\x93\x83"
- "\x78\x96\x8f\x6d\xe9\x39\xfb\x98\xa4\xc8\x43\x8c\x49\xbe\x2b\xb9"
- "\xf3\x63\xdb\xef\xa2\xe4\xe3\x8f\xef\x96\xd0\xd8\xf6\xdb\xf0\xe6"
- "\x8f\x6d\xbf\x0d\x97\x8f\x6d\xbf\x13\xea\xff\xbf\x0d\xb7\x8f\x6d"
- "\xe1\x3b\xb2\xb1\x6d\x51\x37\xdb\xef\xd0\xd8\xf6\xdb\x99\x34\xb6"
- "\x2d\x7a\x56\x39\xb6\x2d\x3a\x41\x39\xac\x68\x07\xe5\x30\xea\x53"
- "\xfb\xd8\xb6\x28\xd1\x79\x6c\x4b\x31\xc4\xf7\x53\x31\xb6\x2d\x3a"
- "\x6c\x1f\xdb\x7e\x93\x2d\x1f\xdb\x1e\xd9\x26\xe2\xe8\xc8\x30\x36"
- "\xb6\x3d\xdc\xa1\x75\xc4\xb6\x8a\xd8\x8a\x62\x63\xdb\xc3\x67\xd5"
- "\xc7\xb6\x47\xfc\xd5\xc5\xb6\x88\x39\xb9\xd8\xf6\xc8\x74\x01\x3f"
- "\x33\xe5\x63\xdb\x23\xb1\xf2\xb1\xed\x91\x74\x36\xb6\xc5\xf6\xe5"
- "\x62\xdb\x23\x07\x98\xf6\xed\x62\xdb\x23\xa7\xd8\xd8\x96\x5e\x27"
- "\xc6\xb6\xdf\x27\x50\x0e\xfd\x66\x94\xfa\xd8\xf6\xfb\xe9\xca\xb1"
- "\xed\xf7\x11\x6c\x6c\xfb\xfd\x10\x1a\xc3\x7e\x9f\x46\x63\xdb\xef"
- "\x83\xe9\xf1\x6f\x46\x4a\x8f\x8b\xb1\x2d\x3d\x2e\xc6\xb6\xdf\xe7"
- "\xa8\x7b\x2f\x7b\x53\xeb\x1e\x1d\xbb\xfd\x73\x06\x9a\x6b\xdd\x23"
- "\xeb\xbb\xd9\xdb\x35\x67\xa0\xe4\x59\xf7\xe2\xdb\x12\x87\xeb\xbf"
- "\xdc\x8d\xb1\xe4\x74\xfe\xf7\x05\xa2\xce\x2f\xdd\xe3\x9e\x66\x29"
- "\xdd\x7d\x37\xc6\x72\xc7\xf6\x25\x2b\x44\xdb\x97\x3f\xe1\x9e\xed"
- "\xcb\xfb\xbb\x1f\x63\x55\x04\x89\x31\x56\x45\x90\xf2\xbb\xc1\xa3"
- "\xde\x8e\x63\xac\xe3\x51\x62\x8c\xf5\xe3\x51\xaa\x4f\x7e\xdc\x43"
- "\xf5\xc9\x8f\x8b\x9a\xef\xdd\xe0\x0f\x97\xd9\x77\x83\x47\xe7\xdd"
- "\x7d\x37\xd8\x1c\xf1\x53\xa9\x49\x8c\x9f\x7e\xd8\xeb\x5e\xfc\xf4"
- "\x43\x01\x1b\x3f\x55\x1c\xb7\x8f\x9f\x7e\xec\xea\x7a\xfc\xf4\xe3"
- "\x30\xf7\x9e\x87\x1f\x87\xba\x16\x3f\xfd\xb8\x4d\xfe\xdd\xe0\x51"
- "\x1f\xe5\x77\x83\xf4\x9c\xbd\xee\x3d\x3e\x4c\xd4\xbd\xc7\xdb\xde"
- "\xf9\xf1\xd3\xb1\x7c\x79\x8d\x7b\x6c\x2f\x8d\x9f\x7e\xcc\x6e\xfe"
- "\xf8\xe9\xc7\x6c\xf9\xf8\xe9\xb8\x30\xff\xf5\xc7\x6c\xfb\xf8\x09"
- "\xbe\x23\x1b\x3f\x1d\x9f\x6e\xfb\x1d\x1a\x3f\xfd\x98\x43\xe3\xa7"
- "\xe3\xb1\xca\xf1\xd3\x3f\x3b\x53\x7e\x3a\x7e\x91\xf2\x13\xf5\xa9"
- "\x7d\xfc\x74\xfc\x80\xf3\xf8\x89\x62\x88\xef\xa7\x62\xfc\xf4\xcf"
- "\x36\xf6\xf1\xd3\x51\x2f\xf9\xf8\xe9\xa7\xb3\x22\x8e\x7e\x4a\x64"
- "\xe3\xa7\x7f\x8e\x6f\x1d\xf1\x93\x22\xb6\xf2\xd9\xf8\xe9\xa7\x6e"
- "\xea\xe3\xa7\x9f\x42\xd4\xc5\x4f\x88\x39\xb9\xf8\xe9\xa7\x6d\x02"
- "\x7e\x72\xe4\xe3\xa7\x9f\xf6\xcb\xc7\x4f\x3f\x1d\x67\xe3\x27\x6c"
- "\x5f\x2e\x7e\xaa\xf0\x60\xda\xb7\x8b\x9f\x2a\xba\xb2\xf1\x13\xbd"
- "\x4e\x8c\x9f\x2a\x0a\x29\x87\x96\xe7\xa9\x8f\x9f\x2a\xb6\x29\xc7"
- "\x4f\x15\x3b\xd8\xf8\xa9\x62\x39\x8d\x93\x2a\x8e\xd1\xf8\xa9\x22"
- "\x95\x1e\x2f\xdf\x29\x3d\x2e\xc6\x4f\xf4\xb8\x18\x3f\x55\x54\xa9"
- "\x8b\x9f\x5c\x5f\x17\xa9\xe5\xeb\x5a\x03\x5b\x69\x5d\xeb\xc9\x25"
- "\xee\xc5\x4e\x27\x63\xee\x6a\x78\x77\x34\x7c\x85\x51\xd4\xf0\xff"
- "\x72\x73\xfe\xef\xbf\xea\xdc\xd7\xf0\x3f\xd7\x88\x1a\xfe\xe7\x1a"
- "\x65\x0d\x5f\x79\xd8\xb1\x86\x3f\x3b\x40\xd4\xf0\x67\xd2\xe9\x18"
- "\x79\x66\x09\x1d\x23\xcf\x0c\x6e\x3e\x0d\x7f\xfa\x73\x56\xc3\x9f"
- "\x7a\xe2\xae\x86\x6f\x0e\x0d\x7f\x52\xb2\xdf\xf1\xe9\x58\xf7\x34"
- "\xfc\xe9\xe5\xac\x86\xaf\xda\x68\xaf\xe1\x4f\x9f\x75\x5d\xc3\x9f"
- "\xf1\x76\xef\x79\x38\xe3\xe5\x9a\x86\x3f\x33\x4b\x5e\xc3\x57\x16"
- "\x2b\x6b\x78\x7a\xce\x5e\x7b\x9d\xf5\x16\xb5\x97\xfe\xe8\x9d\xaf"
- "\xe1\xf5\xd1\xf2\x3a\x4b\x1f\x4b\x35\xfc\x99\x99\xcd\xaf\xe1\xcf"
- "\xcc\x94\xd7\xf0\xfa\xdf\xa8\xde\x39\x33\xd3\x5e\xc3\xc3\x77\x64"
- "\x35\xfc\xd9\x9e\xb6\xdf\xa1\x1a\xfe\x8c\x8e\x6a\xf8\xb3\xc3\x94"
- "\x35\xfc\xd9\x53\x94\x9f\xce\xe6\x51\x7e\xa2\x3e\xb5\xd7\xf0\x67"
- "\x57\x3a\xd7\xf0\x14\x43\x7c\x3f\x15\x35\xfc\xd9\x12\x7b\x0d\x5f"
- "\x59\x24\xaf\xe1\x7f\xde\x2e\xe2\xe8\xe7\x11\xac\x86\x3f\xe7\xdf"
- "\x3a\x34\xbc\x22\xb6\xa2\x59\x0d\x7f\xee\xbc\x7a\x0d\xff\x73\x67"
- "\x75\x1a\x1e\x31\x27\xa7\xe1\x7f\x9e\x25\xe0\x47\x27\xaf\xe1\x7f"
- "\x4e\x94\xd7\xf0\x3f\x6f\x64\x35\x3c\xb6\x2f\xa7\xe1\x7f\x3e\xc4"
- "\xb4\x6f\xa7\xe1\x7f\x3e\xcb\x6a\x78\x7a\x9d\xa8\xe1\xab\x56\x50"
- "\x0e\xad\x7c\x5b\xbd\x86\xaf\x9a\xa5\xac\xe1\xab\xe6\xb1\x1a\xbe"
- "\x6a\x28\xd5\xea\x55\x19\x54\xc3\x57\x4d\xa0\xc7\x2b\xa3\xa4\xc7"
- "\x45\x0d\x4f\x8f\x8b\x1a\xbe\x2a\xf7\xee\xba\x49\x77\xe2\xba\x49"
- "\x17\x86\xb9\xa7\xe3\x2f\x0c\x75\x5f\x4b\x5e\xf1\x13\xb5\xe4\x15"
- "\x3f\xa9\x96\x64\xd7\x36\xf8\xb7\xbf\x63\x2d\xf9\x4b\x98\xa8\x25"
- "\x2f\xee\xa7\x5c\x7d\x71\x1b\xe5\xea\x8b\xfc\xfb\x3d\x75\xeb\x26"
- "\x55\x9f\x60\xd7\x4d\xfa\xf7\xac\xbb\xeb\x26\xb9\xab\x13\xab\xf6"
- "\x89\x3a\xb1\x7a\xbb\x7b\x3a\xb1\x3a\x87\xd5\x89\x57\x0e\xd8\xeb"
- "\xc4\x8b\x6d\x5c\xd7\x89\x17\xfb\xb8\xa7\x13\x2f\xf6\x76\x4d\x27"
- "\x5e\x5c\x23\xbf\x86\xc1\xbf\x03\x94\xd7\x4d\xa2\xe7\xec\xc7\xf7"
- "\x5f\xfa\x88\xe3\xfb\xa5\x86\x3b\x5f\x27\x5e\xca\x94\x1f\xcb\x2f"
- "\x6d\xa7\x3a\xf1\xe2\xea\xe6\xd7\x89\x17\x57\xcb\xeb\xc4\x5f\x3a"
- "\xd3\x31\xf5\x62\xaa\xfd\x1a\x06\xf0\x1d\x59\x9d\xf8\xcb\x18\xe1"
- "\x3b\xab\x59\x9d\x48\xdb\x00\xae\x89\x50\xd6\x89\x35\xde\x94\x7b"
- "\x7e\x39\x4e\xb9\x87\xfa\xd4\x5e\x27\xfe\x92\xe7\x5c\x27\x52\x0c"
- "\xf1\xfd\x54\xd4\x89\xbf\x5c\xb3\xd7\x89\xff\xf6\x93\xd7\x89\x97"
- "\x25\xeb\xb4\x5e\x9e\xc7\xea\xc4\x9a\x67\x5b\x87\x4e\x54\xc4\x56"
- "\x26\xab\x13\x2f\xb7\x55\xaf\x13\x2f\x0f\x53\xa7\x13\x11\x73\x72"
- "\x3a\xf1\xf2\x1a\x5b\xcc\xb1\x3a\xf1\xf2\x0e\x79\x9d\x78\xf9\x00"
- "\xab\x13\xb1\x7d\x39\x9d\x78\xf9\x32\xd3\xbe\x9d\x4e\xbc\xd2\x86"
- "\xd5\x89\xf4\x3a\x51\x27\x5e\x11\x74\xd9\x85\xfd\xea\x75\xe2\x95"
- "\x35\xca\x3a\xf1\x4a\x3a\xab\x13\xaf\xe8\xa8\x1e\xbc\x52\x48\x75"
- "\xe2\x95\xe5\xf4\xf8\x85\x7d\xd2\xe3\xa2\x4e\xa4\xc7\x45\x9d\x78"
- "\xa5\x5c\xdd\x3c\x90\x66\xc9\xf5\xde\xa6\x79\x20\xcd\x95\xeb\xbd"
- "\xdd\xf3\x40\x0c\x6e\xae\x7f\x6f\x70\x75\xfd\xfb\xbb\x75\x32\x4d"
- "\x79\xde\x2b\x55\x62\x9e\xf7\xb7\x53\xee\xe9\x95\xdf\x2a\xdd\xd7"
- "\xe6\x0d\x92\xfd\x7b\x1b\x98\xfd\x7b\xd9\x7a\xf8\xda\xcf\x1d\x6b"
- "\xf3\x7a\xc9\xfe\xbd\xd7\x84\xfd\x7b\xaf\x09\xfb\xf7\x5e\x7b\xd6"
- "\x9d\x7a\xf8\x94\x5a\xe2\xf5\xbe\x6d\x3d\xfc\xb1\xfd\xb4\x1e\x7e"
- "\x81\x6d\x3d\x7c\xdd\x1e\xb6\x1e\xfe\xea\x13\x4a\xf5\xf0\x98\xf7"
- "\xbd\x91\x37\xf9\x18\xd6\xc2\xcb\xd6\xc1\x4f\x6e\xde\x3a\x78\xc4"
- "\xe6\xe6\xa5\x54\xdb\x6f\x6a\x95\xda\xde\x20\x59\x3b\xbf\xce\xcd"
- "\xfd\x7f\xeb\x12\x58\x6d\xdf\x28\xb3\xff\x6f\x9d\x8a\xfd\x7f\xaf"
- "\xb9\xb9\xff\xef\x35\x17\xf7\xff\xbd\x66\xb7\xff\x2f\xad\x83\xaf"
- "\xdd\xad\x5c\x07\x4f\xcf\xd9\x6b\xb2\x7a\xc9\xba\x52\xd7\x5b\xc1"
- "\xfe\xbf\xd7\x15\xf6\x68\xbd\x2e\xec\xff\x7b\xed\x16\xec\xff\x7b"
- "\x4d\x61\xff\xdf\xeb\xc2\xfe\xbf\xd7\x9a\xf6\xf2\x15\xb5\xfd\x35"
- "\x85\xfd\x7f\xeb\x7b\xd9\x7e\x87\x6a\xfb\x6b\xc2\xfe\xbf\xf5\x0e"
- "\xf6\xff\xad\x17\xf6\xff\xad\x17\xf6\xff\xa5\x3e\xb5\xd7\xf6\xf5"
- "\x2e\xec\xff\x7b\x4d\xd8\xff\xf7\x9a\x83\xfd\x7f\xeb\x65\xf6\xff"
- "\xad\xcd\x97\xd7\xf6\x0d\x92\xfd\x7f\x1b\x6c\xf6\xff\x35\xb6\x92"
- "\xfd\x7f\x15\xb1\x65\xb3\xff\xaf\xd1\x8d\xfd\x7f\x1b\x54\xee\xff"
- "\x7b\x4d\x61\xff\xdf\x06\x61\xff\xdf\x6b\x0a\xfb\xff\x36\x28\xec"
- "\xff\xdb\x60\xb3\xff\xef\x35\x85\xfd\x7f\x1b\x0e\x33\xed\xdb\x69"
- "\xfb\x06\x9b\xfd\x7f\xaf\xd9\xec\xff\xdb\x28\xec\xff\x5b\x3b\x49"
- "\xbd\xb6\x6f\x74\xb0\xff\x6f\xa3\xcd\xfe\xbf\x8d\xc2\xfe\xbf\x8d"
- "\xc2\xfe\xbf\x8d\xc2\xfe\xbf\xb5\xa1\xd2\xe3\xa2\xb6\xa7\xc7\x45"
- "\x6d\xdf\xa8\x66\xff\xdf\x2a\x35\x39\xe0\x96\xaf\xe3\xd0\xb6\xd2"
- "\x3a\x0e\x93\x9b\xf9\x5f\x93\xfb\xf9\x5f\x4f\xaf\xfe\x4d\x1a\x13"
- "\xfe\xaf\x5c\x4b\x60\x76\x9c\xff\xf5\xf4\x88\x11\x35\x26\x27\xcc"
- "\x57\xe2\xf6\x53\x9e\xe6\x62\x5d\xad\x25\x48\xb9\x2e\xe8\x4a\x6b"
- "\x2d\xc1\x62\xa1\x96\x00\xb4\x25\xd5\x92\x96\x6b\x6c\x2d\x81\x39"
- "\x56\xa9\x96\x40\xb6\x86\xc0\x46\x3f\x5a\xb5\xa6\xbb\x35\x04\xad"
- "\x5f\x3f\x36\x4a\x6a\x08\x2c\x07\xdc\xd3\x8f\x96\x42\x46\x3f\x7a"
- "\x7a\x9d\xb2\xd7\x8f\x5c\x4f\xd7\xf5\x23\x37\xca\x3d\xfd\xc8\x8d"
- "\x74\x4d\x3f\x72\x3b\xe4\x6b\x08\xcc\x01\xca\x35\x04\xf4\x9c\xdd"
- "\xb8\xef\xe9\x31\xaa\x69\xdc\xf7\xf4\xf0\xbf\xe3\xf5\xa3\x27\x29"
- "\x90\x1d\xe3\x3d\xc9\x01\xaa\x1f\xb9\xdc\xe6\xd7\x8f\x5c\xae\xac"
- "\x7e\xf4\xf4\x18\x48\xc7\x5a\x2e\xd7\x5e\x3f\xc2\x77\xe4\xf4\xa3"
- "\xa7\x47\x84\xed\x77\xa8\x7e\xe4\x76\xf2\xfa\xd1\xd3\x63\xa5\xa2"
- "\x7e\xf4\xd4\x74\xe3\x79\xc9\xd3\xe3\x37\xca\x4b\xd4\xa7\x76\xfa"
- "\xd1\xd3\xe3\xb0\x73\xfd\x48\x31\xc4\xf7\x53\x49\x3f\x7a\x6a\x3a"
- "\xd8\xeb\x47\xb3\x7c\x6e\xd8\xd3\xf3\xa2\x88\x23\xcf\x55\x8c\x7e"
- "\xf4\xd4\x4c\x6a\x15\xfa\x51\x19\x5b\x05\x8c\x7e\xf4\xf4\xec\xa5"
- "\x5a\x3f\x7a\x7a\x4e\x55\xa7\x1f\x11\x73\x32\xfa\xd1\xd3\x73\x87"
- "\x80\x9f\x9d\xb2\xfa\xd1\xd3\xf3\x90\xac\x7e\xf4\xf4\x3c\xc5\xea"
- "\x47\x6c\x5f\x46\x3f\x7a\x7a\xb5\x61\xda\xb7\xd5\x8f\x9e\x5e\x3d"
- "\x59\xfd\x48\xaf\x6b\xd2\x8f\x9e\x5e\x45\x74\x5c\x33\xa9\xcf\x0d"
- "\x7b\x7a\xed\x50\xd4\x8f\x9e\x5e\x9f\x33\xfa\xd1\xd3\x8b\xae\x9d"
- "\xef\xe9\x55\xc9\xeb\x47\x4f\xaf\x0c\xaa\x1f\x4d\xfb\xa4\xc7\x45"
- "\xfd\x68\x62\x73\xc3\x6b\xbd\x6a\x1c\xe9\x47\x2e\xad\x5f\x51\xaa"
- "\xc6\x92\x0f\x7f\x05\xd0\xcf\xce\x30\x8e\x15\xc2\xff\x8b\x60\x3c"
- "\xea\x00\xff\x2f\x57\xd2\x2b\x06\xff\x7e\x45\x16\xd0\x1e\x16\xf8"
- "\x9d\x32\xc3\xaf\x85\x85\x0f\x9a\xa0\xaf\xde\xc2\x9e\x2d\xfd\x8a"
- "\xda\x9b\xee\x1d\x69\xe1\x74\x84\xf3\x83\xff\xc7\xc0\x31\xb8\xbe"
- "\x1d\x8c\x7b\x81\x8b\x49\xbb\x2b\x9e\xde\xab\xad\xd7\x41\x9f\xdb"
- "\x9d\xf3\xf4\x1e\x85\x6d\xd4\xaf\xf5\xce\x80\xfb\x31\x2a\xf6\x15"
- "\xda\x1a\xb7\xe3\x61\x12\x6b\xe2\xfe\x5d\x38\xbf\x96\x54\x79\x7a"
- "\x9f\x6d\x5f\x73\xef\x48\xe0\x21\x82\x7a\x2f\xff\x41\x83\x17\xb6"
- "\x59\x38\xbf\x11\xcf\x1d\xc4\x73\x66\xe8\x63\xdc\x3c\xa2\x59\x5b"
- "\x7b\xaf\x0f\xe8\x2a\xef\xf8\x3a\xae\xfa\x2d\x13\xf4\x39\xc6\x44"
- "\xbe\x7e\xb8\xc2\xeb\xb3\x4d\x15\xfc\xd8\x53\x5a\x67\xe6\xdb\x08"
- "\x9c\xcf\xf7\xe7\xfc\x16\xb8\x5e\xae\x0f\x2b\x77\x91\xde\xde\xbd"
- "\x38\xbd\xaa\xf1\xce\xf3\x9e\x41\x4a\x76\x6c\x9f\xf8\x30\x29\x7c"
- "\x0c\x6c\x17\x48\x34\x72\xe7\x55\xfe\x4e\xb6\x03\x7d\xe9\xf3\x61"
- "\x27\xae\x2e\x7e\x23\xd1\xac\xb3\xdc\xeb\xf3\x0d\x70\xe2\xd6\x0d"
- "\x9c\xa1\x7e\xed\xbd\xbe\x7a\x0f\x93\x1f\xda\xfc\x5d\x38\xbf\xae"
- "\x13\x67\xb8\x9a\x84\xb8\xb9\xb7\xc7\x01\x18\xdb\x6d\x7d\xb1\x60"
- "\xe6\xbc\xe9\x81\xd1\x11\xf3\x66\xbd\xb5\x28\x3a\xb0\xe7\xcc\xfb"
- "\xc8\x84\xb7\xde\x0a\x9c\x37\x7d\xfe\x92\x40\xe9\x99\x67\x02\x67"
- "\x46\x2c\x9c\x3e\x63\xee\xac\x3e\xf3\xde\x88\xba\x0f\xfa\x44\x24"
- "\xfd\xf0\xc3\xbe\x58\xd6\xde\xdb\x7f\xcb\x07\x84\x7c\xd8\x91\x78"
- "\x61\xbf\xe0\xf7\xd2\xf4\x5e\x23\x73\xf0\xf7\xd6\x6e\xe0\xea\x34"
- "\x70\x4d\x3c\x70\xda\xba\xb8\x7b\xe1\xda\x7b\xb2\xb7\x42\xbf\xb6"
- "\x40\xbf\xa1\x8f\xd8\xe7\x42\x6b\x9f\xad\x98\x88\x47\x4c\xc4\xd5"
- "\x02\x06\xef\x3d\xdb\xde\x78\xef\x4b\x1c\x17\x8a\xf7\x57\x07\xcf"
- "\x8a\xc7\x05\x4f\x9f\x25\x7c\x0c\x90\xde\xaf\x08\xbe\x6b\xb2\x62"
- "\xcc\x92\x16\x13\xce\x6d\xe8\x97\x0a\xda\xd1\xa3\x9e\xd3\xfd\x37"
- "\x60\x13\xbe\xef\x33\xaa\x1f\x21\x09\x5c\x7d\x28\xbf\xff\x00\x57"
- "\x0f\x18\xa6\x38\x85\x73\x6d\xba\x5c\xd5\x90\xe7\xea\xd7\xfa\x0c"
- "\xd5\x93\x9d\x73\xb1\x0d\x3d\x1c\x43\x9b\x5b\xb2\xd3\xf5\x21\x41"
- "\x24\xe1\x0f\x09\x24\xa1\x1e\xbf\x93\x33\xb1\xa0\x7d\x34\xf1\x18"
- "\x17\xc3\x9d\x01\xde\xf1\xe0\xba\xa5\xeb\xb9\xed\x13\x0b\xf4\x9e"
- "\x3e\x3d\x2c\xe9\x31\xe1\x70\x3f\x35\xd0\x4e\xb2\xde\xe3\x29\x5f"
- "\x6c\x67\xdd\x06\xde\xf6\x35\x78\xef\x60\x1f\x88\x65\xb8\x42\x2e"
- "\x49\x78\x86\x52\xff\xa4\xb7\xa4\x66\x05\x97\x79\x5d\x27\xe3\x4c"
- "\xdc\x0d\x6e\xfd\x9f\xf4\xa5\x75\x75\xc0\x69\x51\x6f\x70\xed\xee"
- "\x1d\xd6\xde\x14\x31\x6b\x6b\x47\x78\x16\xd7\x67\x05\x73\xeb\x67"
- "\x55\x84\xf4\x22\x5a\x68\xbb\xca\x6a\x4f\xb0\xa5\x97\x3a\x1c\xf9"
- "\xf0\x6b\xba\x20\x1e\xa0\x3f\x02\x1e\xda\x0c\x38\x10\x6d\x8f\x87"
- "\xa6\x67\x73\xc3\x9c\x72\x13\x17\xfa\xd2\x8d\x34\xd0\xe0\x7e\x73"
- "\xea\xe2\xce\x93\x7b\xd0\xb6\xa5\xa0\xf7\xd7\x2e\x26\x01\x6b\xa6"
- "\x91\xc0\xd7\x97\x68\x89\x21\x7d\x8e\xa1\x7d\x62\x82\x07\xd8\x44"
- "\x03\xfc\xd2\x1f\x38\xb3\xff\x8d\x4e\x31\xe1\xcb\x67\x11\x4d\xde"
- "\xb9\x7c\x0d\xea\x64\xac\x0b\x01\x5b\x5f\xdb\x02\xdf\xe3\x7e\x0d"
- "\x25\xe8\x0f\xde\x17\xbf\xea\xc8\x18\x88\xbc\xf1\x1d\xc7\x05\xcf"
- "\xfb\x7a\x65\x41\x9b\xea\xee\xab\x0d\xaf\x7f\xcd\xe0\xab\x7e\xe0"
- "\xa7\xb2\x2a\x33\xdf\x26\xef\xab\xb9\xa2\xaf\xf6\x43\x3f\x44\x7f"
- "\xb5\xc9\x47\xbf\xca\xdf\xb3\x2e\x58\xb8\xe7\x64\xce\x4f\x17\xad"
- "\x7c\xcf\xba\x28\x7a\xcf\xde\xb5\x8e\xef\xf9\xbe\x8b\x8e\xef\xf9"
- "\xfe\xae\xea\xef\xf9\xbe\xdd\xea\xef\xf9\xbe\x1c\x07\xf7\x2c\xf8"
- "\x39\x02\xfc\xac\x73\xe0\x67\x9d\xe0\xe7\xfb\xcf\x39\xbe\xe7\xfb"
- "\x4f\x39\xbe\x67\xdf\x0e\xea\xef\xf9\xfe\x5c\xf5\xf7\x7c\x7f\x86"
- "\xf2\x3d\x47\x08\x7e\x8e\x00\x3f\x47\x38\xf0\x73\x84\xe0\xe7\x0e"
- "\x3f\x38\xbe\x67\xdf\xa3\x8e\xef\xb9\xad\xb7\xfa\x7b\xf6\xcd\x54"
- "\x7f\xcf\xbe\xab\x1d\xdc\xb3\xe0\xe7\x48\xf0\x73\x84\x03\x3f\x47"
- "\x08\x7e\x7e\x2a\xc5\xf1\x3d\xb7\x3d\xe4\xe4\x9e\x1b\xd4\xdf\x73"
- "\xdb\x54\xf5\xf7\xdc\x36\x41\xf9\x9e\x23\x05\x3f\x47\x82\x9f\x23"
- "\x1d\xf8\x39\x52\xf0\xf3\x94\xe7\x1d\xdf\x73\xbb\xbd\x8e\xef\xb9"
- "\xdd\x65\xf5\xf7\xdc\x6e\x85\xfa\x7b\x6e\x17\xad\x74\xcf\x8d\xc0"
- "\xdb\xbe\x70\x2f\x37\x7e\x0a\x7d\xc9\xec\x37\xc7\xe4\x5b\x45\x34"
- "\x99\x49\x16\x5d\xfb\x6a\xd2\x06\xee\x4d\xc7\x6d\x58\xd6\x1f\xff"
- "\xb5\xf8\xcd\x31\x36\xfa\xe9\x7c\x1a\x3a\xf5\x4b\x5d\x36\x95\xdc"
- "\x83\x7a\x7c\x95\x85\x04\x58\xd2\xe6\xd4\xad\x7e\x85\x04\xc6\x1b"
- "\x88\xb6\x34\x4e\x4f\xe2\xa2\x38\x43\x29\x39\x4b\xda\x56\x63\xec"
- "\x79\x92\x14\xd7\x14\x91\xf9\x0b\x38\xee\x82\xa7\x76\x30\xbe\x03"
- "\x06\x9d\x9c\x90\xfa\x4f\x12\x08\xbf\xd1\x7f\x0b\xfc\x61\x3b\xed"
- "\x47\xc3\xf8\xb9\x61\xd9\x93\x5b\xe3\x48\xc0\x57\x91\xd5\x04\x8f"
- "\x67\xc1\x9f\x79\x43\x4c\x78\xdc\x54\xa2\xd9\x55\x5b\xa1\xa1\x63"
- "\xb3\xd6\xdb\x76\x6c\x1e\x3d\x1d\x6c\x39\x83\x3f\x37\x3e\xf3\x15"
- "\xb5\xb6\x6c\x5f\x6e\x1d\xbb\x79\x5b\x56\x9a\xe9\x78\x6f\x33\x76"
- "\x7f\x05\xbf\x2f\xda\xb2\x7d\x21\xda\x92\x4b\xd3\x69\xcb\xaa\x1b"
- "\x31\x6e\xd2\x5e\x88\x21\x1a\x38\x1e\x55\x1a\x55\x4b\xe4\x6d\xac"
- "\x0b\x16\x6d\xac\x5b\xee\x5b\xe5\x5d\x2b\x6f\x63\x5d\x0c\xd8\x38"
- "\xd9\xde\xc6\xba\x68\xd7\x6c\xdc\x21\xeb\xe6\x6d\xdc\x21\x42\xd9"
- "\xc6\x1d\xf6\xa8\xb7\x71\x87\x01\xea\x6d\xdc\xa1\x87\x60\xe3\x54"
- "\xd6\xc6\xda\x63\x0e\x6c\x2c\xc1\xb1\x0e\x70\x7c\xff\x39\x05\x1b"
- "\x03\x8e\x23\x64\x70\xac\x73\x11\xc7\xbf\xf3\xb8\x79\x1b\x77\x2c"
- "\x51\xb6\xf1\xef\x3a\xab\xb7\x71\xc7\x0c\xf5\x36\xee\x98\x4c\x6d"
- "\x1c\x61\x83\xe3\x8e\x83\x94\x6d\x1c\x21\xc1\x71\x04\xe0\xb8\xc3"
- "\x0f\xf2\x36\x8e\x00\x1c\x47\xc8\xe0\x38\xc2\x45\x1c\xfb\xcd\xba"
- "\x79\x1b\xfb\x3d\xa1\x6c\x63\xbf\x58\xf5\x36\xfe\x9d\x49\xbd\x8d"
- "\x7f\x57\x23\xd8\xd8\x06\xc7\xbf\xcb\x74\x60\x63\x09\x8e\x23\x00"
- "\xc7\x4f\xa5\x28\xd8\x18\x70\x1c\x29\x83\xe3\x08\x17\x71\xec\x7f"
- "\xf8\xe6\x6d\xec\x9f\xae\x6c\x63\xff\xb3\xea\x6d\xec\x1f\xae\xde"
- "\xc6\xfe\xc1\xd4\xc6\x91\x36\x38\xf6\x27\xca\x36\x8e\x94\xe0\x38"
- "\x12\x70\x3c\xe5\x79\x79\x1b\x47\x02\x8e\x23\x65\x70\x1c\xe9\x22"
- "\x8e\x1f\xe8\x73\xf3\x36\xee\xd4\xa0\x6c\xe3\x07\x46\xa8\xb7\x71"
- "\xa7\x83\xea\x6d\xdc\x69\xb7\x60\x63\x1b\x1c\x77\x9a\xa9\x64\xe3"
- "\x1b\x10\x03\xb6\x05\x1b\xb7\xad\x21\x9a\x2c\xb4\x6d\x05\xb5\xad"
- "\xb9\xd3\xb2\xfe\x59\x1a\x8b\x0e\x6d\xc2\xe7\x80\x7e\x09\x68\x67"
- "\x4e\x9b\x63\xe2\x34\x70\x4f\x71\x98\xfb\x7d\x20\xcf\x94\x44\xda"
- "\x05\xc6\x61\xfe\xb7\x33\x5f\x1f\x10\x18\xf7\xde\x29\xf8\x3d\x4f"
- "\xcc\x7b\x99\xd2\xfb\x46\x99\xfd\xe7\x0e\xbd\xe0\x19\x70\x9e\xeb"
- "\x39\xa9\x1c\x62\x2f\x2d\xf7\x66\x80\x5f\x59\x4d\x3e\xd8\xe7\x08"
- "\x29\xad\xf8\x92\x58\x3a\x2d\x7b\xb2\x9f\x89\x04\x71\xbf\x04\xf9"
- "\x15\x47\xeb\x89\xf9\x8d\x00\xdf\xb2\x98\x22\x52\x16\xf3\x57\x32"
- "\xae\x9a\xbb\xce\xfd\x1c\xe4\x7b\xc3\x3f\x31\xc6\xec\xbf\x4c\x6b"
- "\x4e\x4f\x31\x9a\xfc\x13\x75\x79\x8b\xf5\x1a\x5f\x23\x09\x9a\x5b"
- "\xc5\x71\x6b\x67\x10\xaf\xb5\xe7\x88\xcf\xba\x19\xc4\x77\xdd\x39"
- "\xa2\x2d\xae\xaa\x20\x25\x97\x8a\x48\x49\xed\x09\x52\x72\x1d\xfe"
- "\x1a\xe1\xcf\x02\x7f\x09\x27\xc0\xd7\x84\x8c\xb9\x4c\x70\xef\x46"
- "\xc3\xe3\x95\xc4\xaf\xd8\x54\x41\x70\xfe\xeb\x15\xcf\x80\x44\xdf"
- "\x70\xe2\xc7\xfd\x1c\x40\xb8\x37\x02\x34\x70\xce\x0b\x8f\x97\x99"
- "\x0c\xa4\xb8\xca\x88\xe7\xc3\xe1\xbc\x57\x7c\x15\xb4\x6f\x29\xc2"
- "\xbd\x19\x0d\xc5\x09\x87\x89\x69\xfd\xe9\x70\x0e\x63\xe8\x4e\x73"
- "\xca\x53\xc1\xd4\x16\x2e\xa0\x3b\xc5\x41\xe7\x8d\x5b\x2c\x6a\x7d"
- "\x1d\x90\xcf\xdb\xf8\xcd\x80\x8e\x60\xe7\x07\x2d\x6f\x86\x6a\xc7"
- "\x9e\x38\xc3\x95\xd6\x55\x10\xcc\x25\x94\xd6\x1d\x21\x65\x2b\x2c"
- "\x64\xdc\x12\x42\x46\x9b\x09\x41\x5b\x94\xc5\x54\x93\xb1\x51\xa4"
- "\x3d\xe6\x9f\x2d\xbf\x04\x75\x2c\xab\x32\x90\x58\x13\xf4\xf1\x8a"
- "\xb1\xa9\x8f\xa5\x2b\x4a\x09\x9c\x7b\xb0\x54\xa7\x27\xbe\x51\x44"
- "\x8b\xf6\x35\xa5\xcd\x31\x8e\x85\xe7\x67\x7e\x1d\xc7\xa1\x6d\xd1"
- "\xa6\x68\x5f\x6c\xcf\x6a\xf3\xb2\x99\x06\x12\x6f\x24\xda\xb2\x38"
- "\xf8\x37\x86\x33\x94\x91\xdf\x08\xf4\x31\x8d\xeb\x70\x3a\x1c\x70"
- "\x31\x00\xb1\xa0\xf7\x7c\x20\x07\xfc\xdf\x51\x1e\x53\xba\x68\x8a"
- "\x29\xef\x5a\xe7\x98\xd2\x2d\x17\x31\xf5\xa0\x87\x88\xa9\x87\x4e"
- "\x29\x63\xea\xa1\xc1\x02\xa6\x52\xef\x4c\x4c\x3d\x78\xdc\x31\xa6"
- "\x1e\xdc\xed\x00\x53\xc9\x5c\x27\x5d\x30\x8b\xa9\x87\x2e\xab\xc7"
- "\xd4\x43\x5e\xb7\x0f\x53\xba\x18\xf7\x30\xf5\x60\x35\x8b\xa9\xce"
- "\x46\x07\x98\x12\x78\xea\xfe\x73\x2e\x60\x4a\xc2\x53\x5d\x42\x44"
- "\x4c\x3d\xfc\x84\x32\xa6\xba\xae\xa1\x98\x8a\xb8\x43\x79\xaa\x6b"
- "\x2f\xc7\x98\xea\xea\xa3\x8c\xa9\x08\xe0\x29\x9d\x0d\x4f\x3d\x3c"
- "\x4c\x3d\xa6\xba\x86\xde\x46\x4c\xb9\xc9\x53\x5d\x87\xb0\x98\xea"
- "\x32\x5a\x19\x53\x11\x02\x4f\x75\xf8\xc1\x39\xa6\x22\x24\x3c\xf5"
- "\xf0\x0e\x11\x53\x81\x2b\x95\x31\xf5\xc8\x59\x01\x53\x77\x28\x4f"
- "\x3d\x12\xeb\x18\x53\x8f\x84\x39\xc0\x14\xf0\x54\x84\x0d\x4f\x05"
- "\xa6\xab\xc7\xd4\x23\x3b\x6f\x1f\xa6\x22\xdc\xe4\xa9\x47\x52\x59"
- "\x4c\x3d\x9c\xed\x00\x53\x02\x4f\x3d\x95\xe2\x02\xa6\x24\x3c\x15"
- "\x68\x16\x31\xd5\xfd\x84\x32\xa6\xba\x0f\xa4\x98\x8a\xbc\x43\x79"
- "\xaa\xdb\x51\xc7\x98\xea\x96\xaf\x8c\xa9\x48\xe0\xa9\x08\x1b\x9e"
- "\xea\x7e\x51\x3d\xa6\xba\x93\xdb\x88\x29\x37\x79\xaa\x5b\x15\x8b"
- "\xa9\xc0\x3a\x65\x4c\x45\x0a\x3c\x35\xe5\x79\xe7\x98\x8a\x94\xf0"
- "\xd4\xa3\xe3\x45\x4c\xf5\xec\xa3\x8c\xa9\x1e\xab\x04\x4c\xdd\xa1"
- "\x3c\xd5\xa3\xa7\x63\x4c\xf5\xf0\x72\x80\x29\xe0\xa9\x48\x1b\x9e"
- "\xea\xf9\xac\x7a\x4c\xf5\x98\x70\xfb\x30\x15\xe9\x26\x4f\xf5\x18"
- "\xc4\x62\xea\xd1\x91\x4a\x98\x6a\xc4\xb8\xcf\x03\x30\xa5\x83\xb8"
- "\x0f\x30\xd4\xbe\x9c\x62\xea\x06\x60\x6a\xb3\x14\x53\xff\xb2\x8d"
- "\xfb\x7a\x6e\xb7\x34\x61\xea\x0f\x9f\xdb\x62\xca\x02\x98\xba\xc1"
- "\x63\xea\xf7\x87\xad\x71\x5f\x59\x4d\x36\xf8\xea\x12\x29\x0b\x06"
- "\x3c\x6d\x10\xf0\xf4\x2f\xc0\x13\xdc\x8f\x05\xee\xb7\xb8\xb2\x82"
- "\x8c\x33\xd0\xfb\x6a\x84\xfb\xb5\x48\xb1\xd4\x58\xad\x41\x0c\x21"
- "\x76\xac\x38\x2a\x99\x0f\xf8\x59\x70\x94\x94\x2c\x86\xbf\xa5\xf0"
- "\x17\x07\x7f\xe4\x28\x29\xae\x26\x7c\xce\x5e\xc4\x4f\xb9\x80\x9f"
- "\xdf\xcf\x72\x8c\x9f\xdf\x0f\x57\x17\xe3\xfd\xe1\x80\x7a\xfc\xfc"
- "\x3e\x4d\xa8\xa5\xd3\x8e\x1b\x7f\x86\xc3\x1a\x58\x8a\x91\x4b\x64"
- "\x9c\x89\xb4\xe7\xa6\x04\x75\xf4\x0d\x25\xda\x65\x66\xa2\x59\x33"
- "\x83\x68\xd7\x9c\x84\xfb\xb5\x3e\x3b\xe7\x88\xef\x11\xe3\x97\xa4"
- "\xb8\xb6\x82\x14\x5f\x3f\x4c\x8a\x2d\xf0\x77\x09\xfe\xa0\x8f\xe3"
- "\x66\x49\xef\xd7\x20\xdc\xef\x1f\x42\xa0\xad\x1e\xca\xf7\xfb\x87"
- "\x01\xfc\xfd\xce\x84\xfb\x6d\x14\xef\xb7\x0c\xb0\x08\x7e\x79\xd0"
- "\x22\xc4\x89\xe3\x0c\xa4\xcd\x5b\x26\x8e\x6b\x14\x30\x88\x7e\x39"
- "\x72\xcc\x48\xc6\x45\x81\xaf\xde\x00\x0c\x56\xe5\x92\xf8\xe5\x80"
- "\xc1\x46\x23\xbe\xd7\x37\x94\x25\x34\x00\x06\x7f\x1f\xc3\x81\xdd"
- "\x6e\x20\x06\xff\x85\x18\xec\x99\x69\x51\xc4\x20\xc4\x89\x3c\x06"
- "\x21\x4e\x74\x8a\x41\x69\x9c\x18\xd4\x4b\xc4\xe0\x63\x03\x95\x31"
- "\xd8\x6b\x8c\x35\x4e\x6c\x79\x0c\x06\x5d\x74\x8c\xc1\xa0\x22\x75"
- "\x31\xe1\x63\x23\xd4\x63\xb0\x57\xc0\xed\xc3\x60\xaf\x13\x8e\x31"
- "\xd8\xab\xc0\x39\x06\x75\x31\xee\x61\x30\xc8\xc4\x62\x30\x28\xd0"
- "\x01\x06\x05\x1e\x84\xb8\xd2\x39\x06\x25\x3c\xf8\x58\x9e\x88\xc1"
- "\xde\x7b\x95\x31\xf8\xf8\x51\x6b\x5c\xd9\xf2\x18\x7c\x7c\x9e\x63"
- "\x0c\x3e\x3e\x5a\x5d\x0c\xd9\xfb\xb0\x7a\x0c\x3e\x9e\x79\xfb\x30"
- "\xd8\x7b\xaa\x63\x0c\xf6\x1e\xe2\x02\x06\xdd\xe4\xc1\xc7\x13\x58"
- "\x0c\x3e\x96\xa3\x8c\xc1\x08\x81\x07\x21\x0e\x75\x8a\x41\x69\x1c"
- "\xda\xe7\x09\x11\x83\xfd\x9e\x55\xc6\x60\xdf\x10\x6b\x1c\xda\xf2"
- "\x18\xec\xf3\x9b\x63\x0c\xf6\x29\x57\x17\x73\xf6\x1b\xa3\x1e\x83"
- "\x7d\x03\x6f\x1f\x06\xfb\x9e\x75\x8c\xc1\xbe\x85\xce\x31\x18\xe1"
- "\x26\x0f\xf6\xf5\x62\x31\xd8\x27\xc8\x01\x06\x05\x1e\x84\xb8\xd5"
- "\x39\x06\x25\x3c\xd8\x6f\x8f\x88\xc1\x27\x0e\x28\x63\xb0\xff\x09"
- "\x6b\xdc\xda\xf2\x18\xec\xbf\xc8\x31\x06\xfb\x4f\x50\x17\xa3\x3e"
- "\x71\x54\x3d\x06\xfb\xe7\xdc\x3e\x0c\x3e\x31\xcb\x31\x06\x9f\x18"
- "\xee\x02\x06\xdd\xe4\xc1\xfe\xc9\x2c\x06\xfb\xed\x54\xc6\x60\xa4"
- "\xc0\x83\x10\xe7\x3a\xc5\xa0\x34\xce\x7d\x72\xb0\x88\xc1\x01\x23"
- "\x94\x31\xf8\x5f\x53\xad\x71\x6e\xcb\x63\xf0\xc9\x06\xc7\x18\x7c"
- "\xb2\x42\x5d\x4c\x3b\x20\x44\x3d\x06\xff\x2b\xe8\xf6\x61\xf0\xbf"
- "\x2e\x3a\xc6\xe0\x7f\x15\x39\xc7\x60\xa4\x9b\x3c\xf8\x5f\xbe\x2c"
- "\x06\x9f\xec\xaf\x84\x41\x0b\xc4\xc5\x37\x72\x26\x95\x5b\xd2\x12"
- "\x63\xda\x7b\x04\x12\x93\xdf\xdc\xa1\x65\xd1\x75\x64\xec\x35\xb0"
- "\x4f\xd4\x35\x32\xed\x9a\x96\x98\xd3\x12\x75\x1c\xc4\x47\x92\xf8"
- "\x99\xaf\x2d\x33\xa5\x9e\x0e\x5f\x37\x9f\x78\x41\xfc\xfd\x24\x1e"
- "\x2b\xbb\x60\x24\xf8\xfb\xb1\xd8\x9f\x4b\x62\x7f\x30\x4f\xc0\xfd"
- "\x1a\xa4\xe5\xdf\x31\x37\xea\x49\xd5\x10\xe2\x59\x5c\xa5\x07\x3b"
- "\x2c\xe5\xfd\x8b\x76\xb9\xe0\x39\x30\x68\xeb\x15\xe2\x65\xfa\x39"
- "\xe0\x41\xb0\xb7\x5f\xdb\x77\x88\x47\x97\x2a\xce\x82\x76\x45\x7b"
- "\xa1\x8d\x03\x97\xe2\xbb\xeb\x81\x4b\x4a\x01\x63\xa6\x9f\x83\x1e"
- "\xdc\x02\xd7\xc9\xc7\xab\x03\x13\xd5\x63\x63\x20\x9d\x0f\xeb\x39"
- "\x30\xb0\xb8\x92\xc8\xbe\x3b\xb6\x40\xfc\xe6\x9a\xad\x74\x31\x92"
- "\x38\xef\x16\xd8\xea\xa9\x09\xae\xd9\xea\xa9\xed\x36\xb6\x92\x89"
- "\xab\x9e\xca\x53\x6f\xab\xa7\xe8\x3a\x91\x9e\x4f\x8d\x76\x60\x2b"
- "\x17\x71\xa5\x33\x4a\xe2\x91\x5b\x60\xab\xa7\x13\x5c\xb3\xd5\xd3"
- "\x47\x59\x5b\xc9\xe9\xff\xa7\x4f\xa8\xb7\xd5\xd3\x99\xd4\x56\x4f"
- "\xc7\x28\xdb\x2a\xc2\x45\x5c\x45\xc4\x48\x74\xf3\x2d\xb0\xd5\xa0"
- "\x9d\xae\xd9\x6a\x90\xd9\xc6\x56\x32\x3a\x75\xb0\xb7\x7a\x5b\x0d"
- "\x2a\xa2\xb6\x1a\x94\xe3\xc0\x56\x2e\xe2\x2a\xc2\x28\xd1\x77\xb7"
- "\xc0\x56\x83\x2b\x5c\xb3\xd5\x33\xbd\x58\x5b\xc9\xe9\xa9\x67\x9e"
- "\x50\x6f\xab\xc1\x75\xd4\x56\x83\xcb\x95\x6d\x15\xe9\x22\xae\x22"
- "\x63\x24\x3a\xe4\x16\xd8\xea\x8f\x5e\xae\xd9\xea\x8f\x21\x36\xb6"
- "\x92\x19\xf7\xff\x38\x55\xbd\xad\xfe\x18\x48\x6d\xf5\x8c\x49\xc9"
- "\x56\xe6\xb4\x39\x75\xed\xc1\x06\x0d\x1b\xe6\x94\xb7\x8f\x21\x9a"
- "\xc6\x1e\x60\x37\x3f\xb0\x5b\x62\x20\xb9\x91\x06\x76\x33\x98\xc8"
- "\xd8\xb7\xcf\x70\xa5\x35\x66\xd2\x08\x36\x6b\xf0\x9b\x63\x2c\x33"
- "\x54\x63\xcd\xd1\x1f\xcf\x79\x3e\xfb\xec\x94\xb7\xb5\x04\xed\x86"
- "\x76\x40\xdb\x71\x60\x37\xde\x8e\x7e\x29\x46\xb3\xdf\x32\xed\x98"
- "\xcb\x67\xb8\xb7\xf4\x1c\x87\xf7\xcb\xf9\xf5\x8d\xc2\xf7\x02\xe3"
- "\xaa\x49\x9b\xc0\x57\xf0\x9e\x86\x5c\xc6\xe3\x65\x86\x0a\xd0\x07"
- "\xb5\x84\xd7\x66\x67\x82\xfc\xcc\x13\x83\x7c\xcd\x65\xa1\x2f\x71"
- "\x9d\xfa\xa5\x9a\x3a\xc5\x84\xc7\x5f\x26\xf7\xa0\x7e\x58\x6b\x21"
- "\x01\xb1\xf3\x88\x66\x57\x64\xa1\x86\x9f\xbb\xb6\x80\x6f\x63\x2f"
- "\xd8\x25\x80\xbb\x2a\xa9\xe9\xbe\xaa\x23\x65\x17\x52\x79\xbf\xd9"
- "\x6a\x04\xde\x6f\x3f\x05\x69\x41\x67\xf6\xe7\xfc\x74\x3e\xa9\xa5"
- "\x24\x90\xbb\x01\x36\xe6\xe7\x13\x3d\xbb\x7d\x6b\xa3\x5a\x1b\x0f"
- "\xe1\xeb\xbf\x2d\x81\x42\xfd\x16\xd8\x09\x7f\x9f\xaf\xdf\x8a\x92"
- "\xd4\x6f\x41\x9f\xc5\xfa\xad\x21\x23\xb1\x7e\xcb\x72\x26\xe0\x41"
- "\xeb\xbd\xbf\x35\x97\xe3\xe0\xde\x3b\x96\xd6\x19\x08\xde\x7f\x69"
- "\x5d\x21\x89\x8f\x26\xda\xd2\xc6\x6a\x12\x57\xc7\x19\x4a\x13\x2e"
- "\x92\x71\xd7\x50\x07\x23\x5e\x9e\x1d\x48\xfd\x3a\xc4\xc7\x72\x26"
- "\xe8\x41\xbd\xe7\xb3\xbd\x4b\xcb\x09\x91\xcc\xe3\xd1\x81\x66\xf6"
- "\x01\x3f\xe8\xca\x12\xce\x11\xf0\x49\x6a\x99\xe9\x24\xfa\x49\x07"
- "\xe7\x87\x34\xe9\xeb\x4e\xcb\x3e\xc0\x63\xe8\x33\x7c\xdf\x84\xeb"
- "\x03\x6c\x95\xe8\x6f\xc4\x45\xfb\x98\x04\x52\x16\xd3\x48\x4a\x4d"
- "\x04\xf4\xd5\x1f\x77\x7f\x1f\x5a\xa1\x80\x23\x5d\x34\xc5\x91\x2e"
- "\xb8\x7d\x8c\x77\xad\x73\x1c\xe9\x62\x44\x1c\x3d\xb7\xf2\xe6\x70"
- "\xf4\xdc\xc0\x9b\xc7\xd1\x73\x1e\x37\x81\xa3\x64\x16\x47\xcf\x5d"
- "\x56\x8f\xa3\xff\x2e\x56\x8f\xa3\xff\x4e\xbd\x39\x1c\x3d\x17\x4b"
- "\x71\xf4\xdf\xc1\x14\x47\xcf\x45\x8b\x38\xe2\xe7\x46\xdd\x22\x1c"
- "\x3d\x6b\x72\x80\x23\x81\x8f\x74\xc0\x47\xf7\x9f\x73\x01\x47\x12"
- "\x3e\x1a\x56\x72\x73\x38\x1a\x16\x7b\xf3\x38\x1a\x36\xca\x7d\x1c"
- "\x45\xd8\xf0\xd1\xf3\x03\xd5\xe3\x68\x98\x9f\x7a\x1c\x0d\xad\xb8"
- "\x39\x1c\x0d\x3b\x44\x71\x34\x34\x83\xe2\x68\xd8\x3e\x11\x47\xfc"
- "\x7c\xb3\x5b\x84\xa3\xa1\xc3\x95\x71\x14\x21\xf0\x51\x04\xf0\x51"
- "\x87\x1f\x9c\xe3\x28\x42\xc2\x47\xc3\xfd\x6f\x0e\x47\x2f\x1c\xba"
- "\x79\x1c\xbd\xb0\xfe\x26\x70\x64\xc3\x47\xc3\x63\xd5\xe3\xe8\x85"
- "\x30\xf5\x38\x7a\x21\xf0\xe6\x70\x34\xbc\x2d\xc5\xd1\xf3\x7a\x8a"
- "\xa3\xe1\x5e\x22\x8e\xf8\x39\x7c\xb7\x08\x47\xcf\xaf\x76\x80\x23"
- "\x81\x8f\x22\x80\x8f\x9e\x4a\x71\x01\x47\x12\x3e\x7a\x71\xea\xcd"
- "\xe1\xe8\xc5\xb6\x37\x8f\xa3\x11\x27\xdc\xc7\x51\xa4\x0d\x1f\xbd"
- "\x78\x48\x3d\x8e\x46\xe4\xa8\xc7\xd1\x08\xdd\xcd\xe1\xe8\xc5\x10"
- "\x8a\xa3\x11\x41\x14\x47\x2f\x8e\x16\x71\xc4\xcf\x8b\xbc\x45\x38"
- "\x1a\x7e\x4c\x19\x47\x91\x02\x1f\x45\x02\x1f\x4d\x79\xde\x39\x8e"
- "\x22\x25\x7c\x34\x72\xfb\xcd\xe1\x68\x64\xc8\xcd\xe3\x68\x64\xb7"
- "\x9b\xc0\x91\x0d\x1f\x8d\x6a\xab\x1e\x47\x2f\xd5\xa8\xc7\xd1\x4b"
- "\xf9\x37\x87\xa3\x91\x59\x14\x47\x2f\x45\x51\x1c\x8d\x4c\x13\x71"
- "\xc4\xcf\x35\xbd\x45\x38\x7a\xa9\x8b\x12\x8e\x70\x2d\x82\x0f\xe9"
- "\xba\x10\x75\xeb\x96\x92\x41\x5b\xf1\xdf\x46\xd2\xbf\x7e\xed\xa8"
- "\xe1\x07\x96\xd3\xf5\x00\xf4\x9e\xa3\xf8\x7c\xaf\xdc\xf7\xef\xdf"
- "\x01\x7e\xf1\x9b\x63\x18\x77\x8a\xae\xd1\x80\xeb\x82\x5c\x8d\xd7"
- "\x91\x7e\xfc\xba\x0c\x2f\x2f\xc7\x75\xac\x9a\xd6\x0e\xf0\x53\x58"
- "\x3b\x60\xb2\xf2\xda\x01\x8d\x1b\xac\xf3\x6e\x73\x25\xf3\x6e\x5f"
- "\x1e\xe5\x78\xde\xed\xcb\x4f\x64\x4d\x56\x8b\x87\x51\xfc\xfc\xaf"
- "\xab\x9d\xe6\x94\xd7\xaf\x7d\x79\x28\x7c\x0e\xa0\xf7\xfe\x32\xbf"
- "\xde\x8a\xf3\xf9\xb8\xb9\x12\x9c\x8c\xaa\x09\x09\x23\x09\xdc\xda"
- "\x36\x43\x39\xff\x39\x06\x2e\x5d\xa7\x6e\xfd\x2c\xcf\x97\x93\x1d"
- "\xdb\x5b\x17\x25\x6f\xef\x3f\xd5\x50\x7b\x0b\xeb\x16\xf8\x29\xac"
- "\x5b\x30\x59\x79\xdd\x02\x79\x7b\xff\xc9\xc9\x3c\xe7\x3f\x6d\x53"
- "\x6f\xef\x3f\xcd\xa5\xf6\xd6\x05\xd7\xaf\xfd\x53\xbe\x68\xef\xd1"
- "\xbd\xd5\xdb\xfb\x4f\x61\xd4\xde\xf7\x0d\xe0\xfc\x75\x51\x60\xef"
- "\x04\x95\x7d\x31\x3a\xb1\xb7\x02\xbe\xc7\x84\x09\xf6\x16\xf0\xad"
- "\xb0\x66\xc2\x64\xe5\x35\x13\xe4\xed\x3d\xa6\x97\x63\x7b\x8f\xe9"
- "\xa0\xde\xde\xa3\x2b\x05\x7b\x03\xbe\xc7\x04\x8a\xf6\x1e\xe3\xe2"
- "\xba\x02\x52\x7b\x8f\x2e\xa6\xf6\xbe\x3f\x08\xec\x0d\xf8\x8e\x50"
- "\x89\xef\x31\x3a\xc7\xf6\x8e\x50\xc0\xf7\xd8\x62\x6a\x6f\x61\xbd"
- "\x06\x3f\x85\xf5\x1a\x26\x2b\xaf\xd7\x20\x6f\xef\xb1\x1b\x1d\xdb"
- "\x7b\x6c\xa2\x7a\x7b\x8f\x1d\x4d\xed\x1d\x01\xf8\x1e\x9b\x2a\xda"
- "\x7b\x9c\xaf\x7a\x7b\x8f\x1d\x42\xed\xed\xdb\x85\xf3\x8f\x00\x7c"
- "\x47\xa8\xc4\xf7\xd8\x0a\x27\xf6\x56\xc0\x77\xf0\x10\xc1\xde\x02"
- "\xbe\x15\xd6\x8a\x98\xac\xbc\x56\x84\xbc\xbd\x83\xdb\x38\xb6\xf7"
- "\xb8\xdf\xd4\xdb\x7b\xdc\x3e\xc1\xde\x80\xef\x60\x22\xda\x3b\x78"
- "\xb9\x7a\x7b\x8f\xdb\x49\xed\xdd\x56\x0b\xf6\x06\x7c\x47\xaa\xc4"
- "\x77\xf0\x48\xc7\xf6\x8e\x54\xc0\xf7\xf8\x9d\xd4\xde\xc2\x3a\x15"
- "\x7e\x0a\xeb\x54\x4c\x56\x5e\xa7\x42\xde\xde\xe3\x97\x38\xb6\xf7"
- "\xf8\xe9\xea\xed\x3d\xbe\x37\xb5\x77\x24\xe0\x7b\x7c\x94\x68\xef"
- "\xf1\x35\xea\xed\x3d\xbe\x0b\xb5\x77\x3b\x2f\xce\x3f\x12\xf0\x1d"
- "\xa9\x12\xdf\xe3\x0b\x94\xec\xdd\x1e\xec\x7d\x08\x10\x00\xba\xc3"
- "\x68\x49\x03\x9d\x62\x66\xed\x5e\x16\x33\x88\xf4\xbd\x8e\xb6\x7f"
- "\x35\x03\xc6\x6a\xe3\xed\x5b\x2f\xe3\xd5\xc4\x9b\x9f\x3b\xfc\xea"
- "\x18\xe5\xb9\xc3\xaf\x0e\x54\x3f\x77\xf8\x55\x22\x6a\xa0\x57\x87"
- "\x8b\x3e\x7d\x95\xe7\x0f\x75\x73\x8a\x5f\x31\xc8\xaf\xa3\xf1\x4a"
- "\x36\xce\x29\x06\x5f\x1b\x2d\xe9\xee\x68\xa3\x57\x73\x9c\xfb\x5a"
- "\x17\x63\x49\x03\x8d\xa4\xe8\xeb\x90\x15\x30\x6e\xc5\xdc\xbe\x75"
- "\x3b\x42\xe6\xdd\xbc\xaf\x43\x06\x2b\xfb\x3a\xa4\x9b\x7a\x5f\x4f"
- "\xa8\x11\xf5\x57\x48\x7f\xd1\xd7\x21\x6e\xcc\x1f\x9f\x50\x29\xbf"
- "\x9e\xc7\x84\xd5\xd4\xd7\xda\x30\x4b\xba\x3b\xba\x2c\x24\xd5\x05"
- "\x5f\xc3\x73\xad\x73\xf0\x5c\x4f\x8c\x02\x5f\x1b\x6f\xdf\xfa\x21"
- "\x13\x27\xdd\xbc\xaf\x27\xf6\x54\xf6\xf5\xc4\xb6\xea\x7d\xfd\x5a"
- "\x85\xa8\xfd\x26\x76\x11\x7d\x3d\x31\x5f\xbd\xaf\x5f\x2b\x92\x5f"
- "\x57\xe4\xb5\x18\xea\xeb\x0e\x85\xe0\x6b\x37\x34\xe1\xc4\xe5\xce"
- "\x7d\x1d\x01\xcf\x75\x84\x83\xe7\x7a\x52\x18\x8c\xd7\x31\xb7\x6f"
- "\x1d\x93\x49\x23\x6e\xde\xd7\x93\x3a\x28\xfb\x3a\xb4\x41\xbd\xaf"
- "\x43\x0f\x8a\xba\x73\x92\x8f\xe8\xeb\x49\x99\xea\x7d\x1d\xba\x5b"
- "\x7e\x7d\x93\xd0\x99\xd4\xd7\xbf\xeb\x61\x49\x77\x47\x8f\x4e\x52"
- "\xd4\xff\x12\x5f\xc3\x73\x1d\xe1\xe0\xb9\x9e\x32\x12\x7c\x6d\xbc"
- "\x7d\xeb\xa9\x4c\x79\xe2\xe6\x7d\x3d\xd9\xac\xec\xeb\xc9\xe7\xd5"
- "\xfb\x7a\x72\xbe\xa8\x79\x27\xd7\x89\xbe\x9e\x92\xac\xde\xd7\x93"
- "\xb3\xe5\xd7\x59\x99\x1c\x4c\x7d\xed\x97\x0c\xbe\x76\x43\x0b\x4f"
- "\x99\xe0\xdc\xd7\x91\xf0\x5c\x47\x3a\x78\xae\xa7\x42\x5c\x1f\x19"
- "\x73\xfb\xd6\x75\x99\xda\xf5\xe6\x7d\x1d\x76\x51\xd9\xd7\x61\x47"
- "\xd5\xfb\x3a\x2c\x53\xd4\xdb\x61\x7a\xd1\xd7\x53\xa3\xd5\xfb\x3a"
- "\x6c\xb5\xfc\x7a\x2f\x61\x43\xa8\xaf\xfd\x6b\x2c\xe9\xee\xe8\xf0"
- "\xa9\x43\xdd\xd1\xe1\x0b\xb3\x88\x0f\xeb\xef\xd7\xff\x5f\x7b\xdf"
- "\x03\x10\x55\x95\xfd\x7f\xe7\x8f\x89\x86\x32\x1a\xb8\xd4\x5a\x4d"
- "\x2d\xee\x52\x5f\x52\x34\x4a\x2c\x4d\x54\x4c\x2c\x4d\xda\xaf\x5b"
- "\xd4\xba\x89\x8a\x38\x83\xa8\xa8\xa8\xa3\x22\x20\x69\x4b\x86\x80"
- "\x04\x2c\x26\xff\x2c\x6c\x69\xc3\xa2\xcd\x5a\xdc\xb5\x1a\x15\x37"
- "\x54\x04\x6a\xad\xaf\x95\xd6\xe4\xa2\x91\xa1\x4d\x8a\x32\xc0\xcc"
- "\xdc\xdf\x39\xef\xbe\xc7\x9b\xbf\x30\x7f\x94\x75\xfd\x35\xfa\x98"
- "\x79\xf7\x9d\xfb\xf7\x73\xce\xb9\xe7\x9e\xf7\xde\xb9\x41\x7d\x6b"
- "\x8b\xcf\x1d\xe4\x3d\xde\xcf\x7d\xe1\x1c\xef\xe7\xf6\xbb\x8f\xf7"
- "\x73\x59\xa2\x2d\xfe\x5c\x93\x88\xf7\xdc\x38\xf7\xf1\x7e\x2e\xc5"
- "\xb1\x2d\xfe\x5c\x88\x77\xb6\xf8\xdc\x50\x4f\x6c\x71\x7b\xbc\xe7"
- "\xf9\xf7\xad\x3d\x1e\x6b\xf2\x1e\xef\xd8\xc3\xce\xf1\x8e\x7d\xc7"
- "\x7d\xbc\x63\x53\x44\x7b\x3c\x56\x2b\xe2\x3d\x6f\xb6\xfb\x78\xc7"
- "\x26\x3a\xb6\xc7\x63\x87\x7b\x67\x8f\xcf\x53\x7a\x62\x8f\xdb\xe3"
- "\xbd\x40\xde\xb7\x36\xf9\xfc\xf3\xde\xe3\x3d\x7f\xaf\x73\xbc\xe7"
- "\xef\x74\x1f\xef\xf9\x89\xa2\x4d\x3e\xdf\xc2\xff\xbd\x20\xd2\x7d"
- "\xbc\xe7\xcf\x71\x6c\x93\xcf\xf7\xf5\xce\x26\x5f\xa0\xf0\xc4\x26"
- "\xb7\xc7\x3b\xae\xad\x6f\xed\xf2\xb8\x53\xde\xe3\x1d\xf7\x86\x73"
- "\xbc\xe3\xb6\xb9\x8f\x77\xdc\x1c\xd1\x2e\x8f\x2b\x17\xf1\x5e\xe8"
- "\x41\xfc\xcc\xb8\x19\x8e\xed\xf2\x05\x46\xef\xec\xf2\x85\xc4\x13"
- "\xbb\xdc\x1e\xef\xf8\xe6\xbe\xb5\xcd\xe3\x8f\x79\x8f\x77\xfc\x76"
- "\xe7\x78\xc7\x6f\x74\x1f\xef\xf8\x19\xa2\x6d\x1e\x6f\xe1\xff\x5f"
- "\x14\xe4\x3e\xde\xf1\xe3\x1d\xdb\xe6\x0b\x5b\xbd\xb3\xcd\xe3\xf5"
- "\x9e\xd8\xe6\xf6\x78\xab\x8e\xf7\xad\x7d\xae\xfa\xc0\x7b\xbc\x55"
- "\x2f\x3a\xc7\x5b\xb5\xdc\x7d\xbc\x55\xe3\x45\xfb\x5c\x95\x2e\xe2"
- "\xad\xf6\x77\x1f\x6f\x55\x88\x63\xfb\x7c\xd1\x49\xef\xec\x73\x95"
- "\xce\x7b\x3f\xf9\xe2\x6a\xb4\xcd\xdd\x8d\xff\xd8\x98\x2c\xbc\x73"
- "\xa7\xb6\x88\xff\xb8\x78\x27\x71\x1a\x5b\x26\xc1\x74\x7d\xc7\x7f"
- "\x4c\xe8\x25\xfe\x63\x82\x9b\xf1\x1f\x13\xce\xb8\xff\x3c\x7e\x42"
- "\xb5\xb8\x46\x48\xb0\x58\xff\x2f\x66\x7b\x14\x5f\xd7\x71\x21\x13"
- "\x6c\xe2\x42\xaa\xb9\xb8\x90\x34\xfb\x17\xd1\x9e\xad\x45\x16\xef"
- "\xf3\xfe\xbe\xc0\xd2\x2c\x5c\x87\xb8\x1b\x87\x52\xe4\xed\xc4\x17"
- "\x45\xde\x5e\xba\xc1\x39\x6f\x2f\xf9\xe2\xfa\x8e\x43\xb9\xe4\x0f"
- "\x3d\xf3\xf6\x92\xf1\xee\xc5\x1c\x59\xe2\x41\xdc\x9b\x25\x59\xe2"
- "\x7a\x68\x89\xc5\xfa\x77\x69\x7d\xdf\xf1\xb6\xa7\xf1\x29\x97\x24"
- "\x59\xf3\x76\x62\x3a\xe3\xed\x5b\x2b\x3c\x5b\x77\x2d\x2d\xf2\xfe"
- "\x3e\xc8\x72\x15\xae\xb9\xdc\x8d\x87\x29\xf2\xf6\xb2\x85\x22\x6f"
- "\x2f\x7f\xc6\x39\x6f\x27\xbd\x77\x7d\xc7\xc3\x4c\x1a\xd7\x33\x6f"
- "\x27\x05\xba\x17\xcb\x24\xa9\xc4\x7d\xde\x4e\x52\x89\x6b\xbf\xa4"
- "\x2a\x91\xb7\x97\x57\xf6\x21\x6f\x7b\xa8\xb7\x93\x66\x58\xf3\xf6"
- "\xb2\x39\x8c\xb7\x7f\x69\xf0\x6c\x8d\xb9\x3c\xd9\xfb\xfb\x3e\xc9"
- "\x91\xb8\xbe\x74\x37\x2e\xa7\xc8\xdb\x2b\x26\x89\xbc\x9d\x6c\x17"
- "\x17\x4a\xe4\xed\x95\xdb\xae\xef\xb8\x9c\x2b\x03\x7a\xe6\xed\x15"
- "\x6d\xee\xc5\x48\x59\xb9\xd6\x7d\xde\x5e\x19\x29\xae\x73\x57\x66"
- "\x8a\xbc\x9d\xbc\xa9\xef\x78\xdb\xd3\x78\x9d\x2b\x83\xad\x79\x7b"
- "\x45\x38\xe3\xed\x3b\x66\x78\xb6\x9e\x4e\x8e\xf6\xfe\x3e\xd7\x1a"
- "\x25\xae\xa5\xdd\x8d\x0f\x2a\xf2\xf6\xaa\xdb\x45\xde\x5e\x33\xc4"
- "\x39\x6f\xaf\x5e\x72\x7d\xc7\x07\x5d\xd5\x4b\xfc\x9f\x55\x3d\xc4"
- "\xff\x71\xf4\xae\xf0\x6a\x0f\xe2\x5e\xac\x56\x8a\x6b\xfa\xd5\x71"
- "\x22\x6f\xaf\x89\xed\x43\xde\xf6\x50\x6f\xaf\x96\x5b\xf3\xf6\x2a"
- "\x7f\xc6\xdb\xca\x72\xcf\x7c\x07\x6b\x42\xbc\xbf\xaf\xb7\xd6\x88"
- "\x7e\x03\x77\xe3\x94\x8a\xbc\xbd\xa6\x43\xe4\xed\xb5\xe7\x9d\xf3"
- "\xf6\xda\xe9\xd7\x77\x9c\x52\xcd\xb1\x9e\x79\x5b\x53\xe5\x5e\x4c"
- "\x97\xb5\x1e\xbc\x07\xaf\x31\x8a\xfe\x8b\xb5\x16\xcf\xbf\xaf\x1b"
- "\xdf\x77\xbc\xed\x69\xfc\x52\x8d\xce\x9a\xb7\xd7\xe8\x19\x6f\xdf"
- "\xdd\xe6\x99\x9f\x64\x9d\x8f\xf7\x7e\x92\x0d\x3e\xdc\x3d\x4c\x37"
- "\xe3\xa5\x8a\xbc\xbd\xee\x33\x31\x36\x51\x4a\x87\x2d\x6f\x8b\xb1"
- "\x89\x52\x86\x5c\x3f\xf1\x52\xd7\x17\xf4\xcc\xc7\xeb\x93\xdd\xf3"
- "\x89\xac\xef\x70\x9f\x8f\xd7\xd7\x8a\x3e\x91\x14\x8b\xe7\x5f\x36"
- "\x08\x7b\x92\xf7\x41\xcc\xa2\x94\x92\x9e\x63\x16\xa5\xa4\x5c\xbb"
- "\x38\xaa\xeb\x2b\xad\x63\x16\xad\xab\x37\x73\xb2\x30\x22\xca\x33"
- "\xbf\xca\x06\x7f\xef\xfd\x2a\xe9\xec\xfe\xae\x9b\x71\x5b\x45\x59"
- "\xd8\xf0\xad\x28\x0b\xe9\xfd\x9c\xcb\x42\xda\xed\xd7\x4f\xdc\xd6"
- "\xd4\x9d\x3d\xcb\x42\x6a\xba\x7b\x3e\x94\x34\x0f\xe2\xc0\xa4\x36"
- "\x89\x3e\x94\x34\x7f\x51\x16\xd2\x67\xf7\x9d\x2c\xa4\xbd\xd1\xb3"
- "\x2c\xa4\x65\x5e\xbb\x78\xae\xa9\x7b\xac\x65\x61\xc3\x09\x26\x0b"
- "\xbf\xa9\xf7\xcc\x0f\x93\xee\xd1\xfd\x6f\x6b\x59\x78\x5e\xc9\xdd"
- "\xfb\x76\x33\x7e\xac\x28\x0b\xe9\xe7\x45\x59\x78\xde\xce\x9e\x17"
- "\x65\x21\xe3\x9e\xeb\x27\x7e\xec\xc6\xdd\x3d\xcb\xc2\xc6\x2c\xf7"
- "\x7c\x2e\x19\x43\xdc\x97\x85\x8d\x16\xef\x3f\x65\x58\xbc\xff\xf4"
- "\x7c\x6c\xdf\xc9\x42\xc6\x7b\x3d\xcb\x42\x46\xfe\xb5\x8b\x2b\xbb"
- "\x51\x6b\x2d\x0b\xe9\xcd\x4c\x16\xee\x8d\xf6\xcc\x6f\xf3\xbc\x0b"
- "\xf6\x7f\x6f\x7e\x9b\x17\x42\xb8\xe7\x02\xdc\x8c\x63\x2b\xca\xc2"
- "\xf3\x1d\xa2\x2c\xbc\x70\xbb\x73\x59\xd8\xfc\xc0\xf5\x13\xc7\x76"
- "\xd3\xde\x9e\x65\x61\x53\x91\x7b\x3e\x9a\xcd\xb7\xbb\x2f\x0b\x9b"
- "\x5a\x44\x1f\xcd\xe6\x10\x51\x16\x5e\x48\xec\x3b\x59\xd8\xbc\xbf"
- "\x67\x59\xd8\x5c\x7e\xed\xe2\xdb\x6e\xaa\xb7\x96\x85\xe7\xf5\x4c"
- "\x16\x42\x8e\x7b\xe6\xe7\x79\x21\xdc\x7b\x3f\xcf\x8b\xe1\xdc\x33"
- "\x13\x6e\xc6\xd3\x15\x65\xe1\x8f\xfd\x44\x59\x78\xf1\x1e\xe7\xb2"
- "\x90\x39\xe9\xfa\x89\xa7\xfb\xc7\x43\x3d\xcb\xc2\x1f\x2b\xdc\xf3"
- "\xe9\x64\xde\xe3\xbe\x2c\xfc\xb1\x4d\xf4\xe9\x64\x86\x8b\xb2\xf0"
- "\xa2\xa6\xef\x64\x21\xf3\x58\xcf\xb2\x90\x59\x75\xed\xe2\xec\xfe"
- "\xf1\x84\xb5\x2c\xbc\x60\x64\xb2\x30\x2a\xc6\x33\xbf\xd0\x8b\x91"
- "\xde\xfb\x85\xb2\x22\xb9\xe7\x49\xdc\x8c\xeb\x2b\xca\xc2\x96\x21"
- "\xa2\x2c\x64\xf5\xb0\xcf\xc3\x4b\x33\xaf\x9f\xb8\xbe\x5b\x7a\xd9"
- "\xff\x68\x4b\x4f\xfb\x1f\x39\xf0\x01\xbd\xf4\x80\xfb\xb2\xf0\x12"
- "\x11\x7d\x40\x2f\x59\xbc\xff\x97\xb5\xa9\xef\x64\xe1\xa5\x5e\xf6"
- "\x7f\x78\xc9\x85\xfd\x1f\x3c\x8d\xf7\xbb\xa5\xd9\x5a\x16\xb6\xf8"
- "\x30\x59\x18\x7d\xd2\x33\x3f\x52\x56\xaf\xfe\x7f\x5c\xe7\x77\xf9"
- "\xdb\xfb\x91\xea\x9b\xc3\xc9\xff\x3c\x8b\xb2\xb0\xd5\x60\x2c\x58"
- "\x64\xc0\xf8\xc2\xa6\x20\x3e\x06\xe5\x46\x3e\xc6\x4b\x9b\x91\xc5"
- "\xa0\xd4\x9b\xba\x63\x50\xb2\xd8\x1f\x44\x8a\xef\x02\xe3\x3b\xc1"
- "\x46\x05\x8b\x3f\x49\xf1\x99\x28\x7c\x46\xea\x74\x1d\x17\x5f\x25"
- "\xc5\x08\x7d\x3f\xdb\x4b\xfc\xc9\x58\x1d\xa9\x8f\x5d\x47\x8c\x43"
- "\xbe\x8e\x65\xef\x09\x6f\xcd\xe4\xe2\x4f\xce\x0d\xbc\x2d\xfb\x6b"
- "\xe2\xef\x87\xf1\x27\x63\xa9\x39\x4d\x47\xf5\x0d\x06\x02\xb4\x30"
- "\xbe\xf3\x84\x18\x94\x5b\x7f\xc2\xbe\x1b\xe7\x06\xdf\x56\xfa\xb5"
- "\xb3\xf8\xc2\x5b\x3d\x88\x03\xbb\xb5\x42\xf4\xef\x6c\x6d\x11\x79"
- "\x34\x9b\x9b\x83\xe1\x7a\x7a\x7d\x0c\xe8\x98\xec\xb0\xd8\x2e\x8f"
- "\x62\x6f\x64\xcb\x7b\xc7\x8c\x7b\x46\xc4\x4e\x7f\x89\x98\xe5\x54"
- "\x19\x0b\x54\x1a\x8c\x73\xec\x3a\x66\xfd\x2e\x5e\x1b\xcc\x72\xc6"
- "\xbb\x8e\x59\xce\x2e\x1b\xcc\x1c\xf8\x21\x72\xb6\xba\x8f\x59\x4e"
- "\x8c\xe8\x87\xc8\x29\x16\x31\xcb\x69\x65\x98\xe5\x84\x31\xcc\x1e"
- "\xc8\xea\xf2\x28\x7e\x47\x4e\xaf\xef\x7f\xe3\xba\xa9\xcb\xdf\x7e"
- "\x5d\x2e\x62\xb6\x2d\x16\x30\x33\x60\xbc\x65\xd7\x31\xbb\xf9\xf4"
- "\xb5\xc1\x2c\x57\xef\x3a\x66\xdb\x9e\xb1\xc6\xcc\xd1\x7a\x79\x9b"
- "\x07\x7b\x76\x6e\xf3\x15\xd7\xcb\xdb\xa2\x45\xcc\xb6\x95\x33\xcc"
- "\x72\x5b\x18\x66\x0f\xd6\x74\x79\x14\x03\x64\x5b\x62\xef\x98\x71"
- "\xf7\xf4\x7b\x90\xb3\x97\xfd\x8d\x05\xb0\xc6\x84\xf5\xa3\xeb\x98"
- "\x0d\xf9\xf4\xda\x60\x96\x57\xe1\x3a\x66\x2f\x0f\xb2\xc1\xcc\xc1"
- "\xba\x2e\xef\xb2\xfb\x98\xe5\x69\xc5\x75\xdd\xcb\x72\x11\xb3\x97"
- "\x67\x33\xcc\xf2\x8a\x19\x66\x63\x9b\xbb\x3c\x8a\x23\xf2\x72\xaf"
- "\xfe\x2f\xb4\x43\xbb\xfc\xed\xd7\x39\x22\x66\xf9\x75\x80\x99\x01"
- "\xe3\x4f\xbb\x8e\xd9\x83\x5b\xae\x0d\x66\xf9\x31\xae\x63\x96\xbf"
- "\xdf\x1a\x33\x47\xeb\x8f\xfc\x37\xdc\xc7\x2c\x3f\x59\x5c\x7f\xe4"
- "\xd7\x88\x98\x15\xf8\x30\xcc\xf2\xa3\x19\x66\xe3\x14\x5d\x1e\xc5"
- "\x22\xc9\x3f\xde\x3b\x66\xdc\x3d\xd8\x1e\xe4\xac\x30\xc5\x58\x00"
- "\x36\x3b\xd8\xe3\xae\x63\xf6\xfb\xc9\xd7\x06\xb3\x42\x5f\xd7\x31"
- "\x2b\x5c\x65\x83\x99\x03\x3b\xb9\xd0\x83\x38\xd8\x85\xc1\xa2\x9d"
- "\x5c\x98\x28\x62\x56\xb8\x8f\x61\x56\x28\x67\x98\x3d\x34\xbe\xcb"
- "\xa3\x78\x26\x85\x4e\xe3\x7f\xf5\x64\x37\x0a\xcf\xe5\x8b\xb8\x15"
- "\x85\x5d\x3f\xb6\xe3\x9f\x6a\x5d\xc7\xad\xe8\xbe\xde\x6d\xc7\xa2"
- "\x00\xf7\x71\xfb\x93\x4e\xb4\x1d\x8b\x82\x44\xdc\x8a\x92\x19\x6e"
- "\x7f\xda\xe7\x9d\xed\x58\x14\xe1\x89\xed\x68\x8f\xdb\xf6\xd6\xeb"
- "\xc7\x7e\xdc\x9e\xe2\x3a\x6e\xdb\xcf\xf4\x6e\x3f\x6e\x3f\xe6\x3e"
- "\x6e\xdb\x8b\x44\xfb\x71\xfb\x49\x11\xb7\x57\x42\x18\x6e\xdb\x93"
- "\xbd\xb3\x1f\xb7\x3b\x8d\xff\xd6\x93\xfd\x68\x8f\xdb\x8e\x8a\xeb"
- "\xc7\x86\xdc\x11\xe6\x3a\x6e\x3b\x4a\x7a\xb7\x21\x77\x6c\x76\x1f"
- "\xb7\x1d\xd1\xa2\x0d\xb9\x23\x5f\xc4\x6d\x47\x33\xc3\x6d\x47\x88"
- "\x77\x36\xe4\x8e\x6a\x4f\x6c\x48\x7b\xdc\x4a\xe6\x5c\x3f\x76\x64"
- "\x71\xab\xeb\xb8\x95\xfc\xae\x77\x3b\xb2\xc4\x83\x3d\x8b\x4b\x7c"
- "\x44\x3b\xb2\x64\x86\x88\x5b\x09\xbf\x07\x4b\x71\xb3\x77\x76\x64"
- "\x49\xaf\xf1\x3f\x1c\xd9\x91\xf6\xb8\x95\xf9\x5f\x3f\xb6\x64\xa9"
- "\x1b\xf6\x7f\xd9\xa0\xde\x6d\xc9\x52\x0f\xec\xff\x52\xc1\xfe\x07"
- "\x79\x2b\xb3\xb0\xff\xcb\x78\xfb\xbf\xb4\xd8\x3b\x5b\xb2\xcc\x05"
- "\xfb\xdf\xde\x96\xb4\xc7\xad\xbc\xfe\xfa\xb1\x27\xcb\xe7\xb8\x8e"
- "\x5b\xf9\xa1\xde\xed\xc9\x72\x0f\xf6\x81\x2a\xd7\x88\xf6\x64\xf9"
- "\x3e\x11\xb7\x9d\xbe\x0c\xb7\xf2\xd9\xde\xd9\x93\xe5\x4e\xe3\x3f"
- "\x0a\xb8\x99\xfc\x17\x19\xa8\x03\x3f\xe4\x31\x55\x38\x1f\x9b\xf0"
- "\xb5\x62\x53\xc0\x22\x83\xbb\xfb\xbb\x08\x31\xa7\x0f\x83\xc4\x9f"
- "\x96\xbd\xf6\x80\x77\x71\xa7\x5f\x3d\xe3\x7d\xdc\xe9\x57\xdf\xb9"
- "\x7a\xfb\xbb\xbc\xba\xdd\xfd\xb8\xd3\xaf\xc6\x89\x36\xe8\xab\x95"
- "\x22\xd6\xaf\x71\xcf\x27\xb8\x17\x8f\xfa\xd5\x60\xef\xe2\x51\xbf"
- "\x76\x1f\xe3\xaf\x9d\x2d\x2c\x1e\xf5\x6b\x41\x7d\xb3\xef\xcb\xce"
- "\x7c\x8c\x47\x4d\xb3\x1f\x56\x79\x16\x1f\xf9\xb5\xca\xde\xf9\x59"
- "\xa5\xa1\x0e\x7c\xb4\x22\x3f\xbf\x9e\x68\x0a\x50\x69\xdc\xdd\x67"
- "\xc6\x9a\x9f\x5f\xef\xe7\x1d\x3f\xef\x7a\xcf\x7b\x7e\xde\xb5\xf1"
- "\xea\xed\x33\xb3\x4b\xed\x3e\x3f\xef\x0a\x13\x6d\xf3\x5d\x1a\x91"
- "\x9f\x5f\xaf\x72\x9f\x9f\x2b\x0c\xde\xf1\xf3\x2e\x13\xe3\xe7\x8a"
- "\x1a\xc6\xcf\xbb\xda\xfa\x66\xff\x99\x8a\x38\xc6\xcf\x13\xaa\x3d"
- "\x8b\x3f\xfd\xba\xc6\x05\x7e\x36\x50\x07\xfe\x6b\x91\x9f\xdf\x18"
- "\x0f\xfc\x6c\x70\x77\xbf\x1b\x6b\x7e\xae\xfc\xcc\x3b\x7e\xae\xdc"
- "\xec\x3d\x3f\x57\x3e\x79\xf5\xf6\xbb\xa9\x1c\xe7\x3e\x3f\x57\xca"
- "\xc5\x35\x4b\x65\x94\xc8\xcf\x6f\xa4\xb8\xcf\xcf\x7f\xae\xf3\x8e"
- "\x9f\x2b\x8f\x31\x7e\xfe\x73\x26\xe3\xe7\xca\xda\xbe\xd9\x07\xe7"
- "\xcf\x61\x8c\x9f\x27\x1a\x3c\x8b\xef\xfd\x86\xd3\xf8\xc7\x22\x3f"
- "\xab\x35\xd4\x81\x6f\x5f\xe4\xe7\x2a\x5f\x53\x80\x5a\xe3\xee\xbe"
- "\x3b\xd6\xfc\xfc\xa6\x97\xfb\x5c\xbc\x79\x15\xf6\xb9\x78\xd3\x8b"
- "\x7d\x2e\x6c\xf7\xdd\x79\x73\x80\xfb\xfc\xfc\x97\xe3\xe2\x5a\xee"
- "\xcd\x40\x91\x9f\xab\x66\xb8\xcf\xcf\x7f\x29\xf2\x8e\x9f\xdf\xe4"
- "\xf7\xbf\xf8\x4b\x0c\xe3\xe7\x37\xf3\xfb\x66\x3f\x9e\xbf\xc8\x19"
- "\x3f\x4f\x8e\xf0\x2c\x7e\x7a\x55\xa0\x0b\xfc\x6c\xa0\x0e\xee\x7b"
- "\x88\xfc\xfc\xd6\x49\xe0\x67\x83\xbb\xfb\xff\x58\xf3\xf3\x5b\xab"
- "\xbc\xe3\xe7\xb7\x46\x78\xcf\xcf\xbb\x7f\xba\x7a\xfb\xff\xec\xfe"
- "\xc2\x7d\x7e\xde\x5d\x21\xae\x71\x77\x5b\xdc\xff\x7f\x7b\xb8\xfb"
- "\xfc\xbc\xdb\xcb\x7d\x81\xde\x5a\xc2\xf8\x79\x37\xbf\x2f\xd0\x5b"
- "\x71\x7d\xb3\x2f\x50\xd5\x71\xc6\xcf\x91\x99\x9e\xc5\xa7\x7f\xab"
- "\xa5\x77\x7e\x4e\xd0\x50\x07\xf7\x84\x44\x7e\x7e\xa7\xca\x14\x90"
- "\xa0\x71\x77\x1f\x22\x6b\x7e\x7e\x67\xaa\x77\xfc\x5c\x7d\xd9\x7b"
- "\x7e\xae\xde\x7f\xf5\xf6\x21\xaa\x7e\xc3\x7d\x7e\xae\x4e\x16\xd7"
- "\xfe\xd5\x16\xf7\xff\xde\xf1\x60\x7f\xa2\xea\x70\xef\xf8\xf9\x9d"
- "\x09\x8c\x9f\xdf\x36\x30\x7e\x7e\x27\xac\x6f\xf6\x27\x7a\xbb\x82"
- "\xf1\xf3\xa3\x4d\x9e\xc5\xff\x7f\xa7\xd7\xe7\x3f\x1c\xf9\x37\x04"
- "\xbf\x94\xc8\xd3\x7b\xd2\xbd\xf7\x71\xec\xb9\xd5\x3b\x9e\x7e\xf7"
- "\xb0\xf7\x3c\xfd\x6e\xc1\xd5\xf3\x71\xbc\xeb\xc1\x5e\x7f\xef\x46"
- "\x89\x3e\x8e\x77\xb3\x44\x9e\xde\xa3\x75\x9f\xa7\xdf\xf5\xf5\x8e"
- "\xa7\xf7\x0c\x61\x3c\xfd\xd7\x7a\xc6\xd3\x7b\x7c\xfa\xc6\xc7\xf1"
- "\x57\x8d\x77\x3e\x8e\x3d\x59\x9e\xf8\x38\xec\x79\xfa\x6f\xb3\xbd"
- "\xf7\x73\xbc\x7f\xde\x3b\x9e\x7e\xbf\xc4\x7b\x9e\x7e\x5f\x7d\xf5"
- "\xfc\x1c\xef\x3f\xe9\x3e\x4f\xbf\x3f\x5c\xf4\x73\xbc\x1f\x2b\xf2"
- "\xf4\xdf\xf2\xdd\xe7\xe9\xf7\x74\xde\xf1\xf4\xfb\x67\x18\x4f\xbf"
- "\x57\xce\x78\xfa\xfd\x93\x7d\xe3\xe7\x78\x6f\x86\x77\x7e\x8e\xbf"
- "\xc5\x7a\xe2\xe7\xb0\xe7\xe9\xbf\x07\x7b\xef\xeb\xd8\xbb\xdf\x3b"
- "\x9e\xde\xbb\xdc\x7b\x9e\xde\x3b\xe1\xea\xf9\x3a\xf6\x8e\x70\x9f"
- "\xa7\x6b\xf4\xa2\xaf\x63\x6f\x98\xc8\xd3\x7f\x57\xb9\xcf\xd3\x35"
- "\x7b\xbc\xe3\xe9\xbd\x7b\x19\x4f\xd7\x24\x33\x9e\xde\x5b\xdd\x37"
- "\xbe\x8e\x1a\xa5\x77\xbe\x8e\xbf\x87\x79\xe2\xeb\xb0\xe7\xe9\x7d"
- "\x46\xef\xfd\x1d\xfb\x0a\xbc\xe3\xe9\x7d\x53\xbd\xe7\xe9\x7d\x43"
- "\xae\x9e\xbf\xe3\x1f\x1d\xee\xf3\xf4\x3f\x2c\xf6\xbf\xd8\x67\xf1"
- "\xfe\xff\x07\xe3\xdd\xe7\xe9\x7f\x64\x7a\xc7\xd3\xfb\xb6\x32\x9e"
- "\xfe\x47\x14\xe3\xe9\x7d\x9b\xfa\xc6\xdf\xf1\xf7\x36\xef\xfc\x1d"
- "\x1f\xf4\x1a\xff\xc2\x91\xbf\xc3\x9e\xa7\x3f\x6a\xf2\xde\xe7\xf1"
- "\x91\xda\x3b\x9e\xfe\xe8\x56\xef\x79\xfa\xc3\x33\x57\xcf\xe7\xf1"
- "\xe1\x31\xf7\x79\xfa\xc3\x22\xd1\xe7\xf1\xa1\xc5\xf3\x4f\x5a\x85"
- "\xfb\x3c\xfd\xe1\x1c\xef\x78\xfa\xa3\x79\x8c\xa7\x3f\x1c\xce\x78"
- "\xfa\xa3\x98\xbe\xf1\x79\x7c\x50\xe7\x9d\xcf\xe3\xa3\x93\x9e\xf8"
- "\x3c\xec\x79\xfa\x40\x85\xf7\x7e\x8f\x03\x13\xbc\xe3\xe9\xfd\xe7"
- "\xbd\xe7\xe9\xfd\x7b\xaf\x9e\xdf\x63\xff\x4e\xf7\x79\x7a\x7f\xa2"
- "\xe8\xf7\xd8\x6f\x11\xff\xfe\x40\xb3\xfb\x3c\xbd\x3f\xd4\x3b\x9e"
- "\x3e\xf0\x00\xe3\x69\xad\x9e\xf1\xf4\x81\x90\xbe\xf1\x7b\x68\x8b"
- "\xbd\xf3\x7b\x1c\xb0\x7b\xfe\x6d\xe5\xc2\xa5\x71\xca\x65\xf1\xf1"
- "\x2b\x17\x26\x2b\x57\x26\xaa\x17\x2c\x9c\x30\x42\x38\x9f\x10\xaa"
- "\x19\xa1\x19\x48\xe2\x96\xcc\x9b\xbb\x7a\x8c\x78\x31\x71\xe1\x52"
- "\xf8\x1a\x48\x54\xf3\x56\xaa\x94\xc9\x6b\x93\x16\x2a\xf1\x6c\xc9"
- "\x82\x24\x20\x59\x96\x2c\xa6\xfc\x76\x61\xe2\x3c\x8d\x7a\xe9\x22"
- "\xe5\xbc\x44\xf5\xa2\xa5\x4b\x16\x2e\x4d\x56\xae\x58\xb8\x7c\x95"
- "\x7a\xc5\x42\xfc\xbd\x52\x19\xbf\x6c\x05\x24\x2c\x58\xa8\x5e\xbd"
- "\x50\x39\x7f\x55\x7c\xfc\xc2\x15\x2b\x07\x92\x99\xab\x12\x93\xd5"
- "\x49\x89\x0b\x95\x91\x33\x27\xdd\x37\x7b\xea\xff\xce\x9e\x38\x71"
- "\x20\xb1\xd8\x7b\x5a\x49\xf3\xb7\xe8\x81\x87\xe4\x67\x65\x8d\xf3"
- "\x1a\x02\x09\xd9\x0a\xbc\x99\xb3\x82\x28\x5e\x5c\x41\xe4\x99\x17"
- "\x89\xcf\xd6\x8b\xc4\x57\x99\x40\x22\xe8\x90\x9d\xb1\x39\x17\x89"
- "\x3f\x1d\x36\x52\x43\xb7\x7d\x51\x4e\x87\x9c\xd2\xe9\x87\x1c\xc8"
- "\x85\x34\x05\xdd\xb6\x5f\x8b\xd7\x00\x0b\x39\xdd\xf6\x75\xd4\x69"
- "\x59\xa3\x52\x3f\xe4\x60\x52\xda\xf7\x44\x4a\x07\xd7\x2a\xde\x32"
- "\xeb\xa5\xfb\xd1\xcb\x06\x63\x45\x64\x87\x82\xe1\xf0\x87\xa3\x16"
- "\x8e\xe3\x44\xf6\xcf\xe1\x70\x44\xc2\x31\x03\x8e\x1a\x22\xfb\x98"
- "\xc0\x11\x0a\x07\xa4\x7d\x1c\x03\x47\x1c\x1c\x89\x44\x56\x07\xe9"
- "\x75\x4a\x38\xe0\x5a\x5d\x14\x2b\xa7\x2e\x1a\x8e\x26\x22\x3b\x1c"
- "\x08\x07\xe4\x3f\x02\xe9\x47\x92\x89\xec\x28\xd0\x1d\xc9\x87\xa3"
- "\x1a\x0e\x28\xf3\xc8\x49\x48\xc3\xfc\xb3\xd9\xb5\xa3\xf5\x44\x56"
- "\xef\x03\x07\x94\x51\x0f\xf5\xd4\x6b\xe0\xc8\x82\xa3\x08\x8e\x72"
- "\x38\xa0\x6d\xf5\x48\xa3\x23\xb2\x63\xd0\x86\x63\xb1\x70\x6c\x82"
- "\x03\xca\x69\x80\x3a\x1a\x8a\x09\xf4\x91\x1d\x0d\xcd\xe2\x6f\xee"
- "\x08\xb4\x39\xb7\x3d\xc2\xfd\x36\xde\xa9\xd3\xde\x6b\x04\xb9\x3d"
- "\xb4\xd9\x94\x41\x64\xa6\x6d\x07\x93\x92\xee\x25\x92\x73\xb2\x43"
- "\x4f\x36\x6e\x22\x84\x2a\xbe\x28\xd7\xae\xeb\xc4\xeb\x4f\xe2\x98"
- "\xb5\x67\x1f\x8a\xd6\x91\xb7\x8a\x50\x3e\xdd\xe3\xcf\x43\xd1\x7c"
- "\xfe\x5c\x9d\xe4\xb1\x58\xcc\x4f\xf3\x16\x1e\xa7\x69\x31\x3b\xf0"
- "\x3d\xdc\xb3\x38\x86\x28\x37\xb9\x0b\x43\xa8\x62\x6e\x15\xea\x18"
- "\xed\x3a\xae\x5d\xf7\x80\xbc\x0d\x86\xfc\xc1\x14\x70\xd4\x07\x00"
- "\xe6\x19\x44\xce\x9d\x6f\x3b\x90\x4b\xcb\x0b\x4e\x30\xbd\x73\x88"
- "\x5b\xbf\x74\x04\xa4\x85\xe2\x35\xc3\xae\xa7\x9b\x68\xc5\xb3\xb1"
- "\xda\xa5\x9d\xa4\x59\xf6\xcf\x00\xd0\x7f\x52\xfa\xeb\xa7\x9b\xcc"
- "\x85\x69\xa1\x35\xc0\x03\x48\xb3\x37\xb5\x05\xbf\x83\xa0\xdf\x52"
- "\x9a\x9f\x66\x40\x1f\x90\x36\x35\x0f\x74\xf2\xa1\x7b\x3a\x02\x0a"
- "\xb4\xca\xc7\xfc\xe8\x69\xac\x47\x8a\xf1\xd6\x0f\xf1\xcf\xf3\x1f"
- "\x0a\xee\x08\x18\x99\x8e\x65\x9b\xca\x0b\xd3\xe1\x9a\x9c\x02\xef"
- "\x41\x1b\x24\x17\x20\x9f\xa9\x60\xa4\x46\xfb\x18\x57\xe7\x3b\xd0"
- "\x4e\x69\xda\x74\x28\xfb\xd5\xc2\xf4\xb7\xd7\x19\xa4\x14\xdb\xee"
- "\x3f\x52\x03\xbc\xee\x6b\xca\x3e\xa0\xdf\x3e\x94\xc8\x4b\xf2\x08"
- "\x29\x1b\x4a\x7c\xda\xb3\xff\x59\xa9\x93\x47\x55\x30\xbd\x77\x28"
- "\x58\x0a\x34\x3a\xd9\x3f\x37\x51\xc0\x83\xab\x2b\x7f\x5d\x52\x0f"
- "\x75\x75\x74\xd7\x55\xb8\x2e\x09\xeb\xe2\xc6\x87\x8d\x15\xfb\x2d"
- "\x94\x53\x11\xd3\x53\x9b\x2f\x63\x19\x50\x6f\x0b\x7d\x3d\x26\xdd"
- "\x54\xb8\x31\x1d\xaf\x21\x3d\x1b\xff\x03\xb9\x7e\x1b\x49\x1b\x85"
- "\x34\x13\x8f\x81\x09\x31\x90\xa6\x83\xfe\x3a\x54\x87\xf5\xe9\x64"
- "\x1f\x87\x99\x32\x94\x44\xf9\x18\x21\xad\xb2\x8f\x39\xdf\x04\x55"
- "\xc4\x17\x33\x8c\x3f\xde\xaa\xa9\xa3\x66\x38\x4c\xa3\xea\x88\x44"
- "\xfb\x18\xe2\xfb\x71\x95\xf2\xd1\xfe\x30\xce\x1f\xef\xee\x1e\xdf"
- "\xbb\x0a\x71\x8c\x14\x30\x2e\xbe\xa6\x17\xa6\x40\xbf\x95\x04\xfb"
- "\x61\x39\x5e\xd8\x9f\xf6\xec\x8f\x4f\xda\x8c\x99\x62\xfa\xf4\x34"
- "\x6a\x51\xf6\x2e\xcb\xfe\xb7\x67\xd7\xf9\xea\x24\x53\x2a\x91\x5e"
- "\x79\x37\xc7\x33\xf7\x98\xf8\xeb\xc8\xf7\x88\x33\x0d\xd8\xa2\xc7"
- "\xf3\xdf\xdd\x43\x14\x7e\x75\x44\xaa\x4c\x0d\xaa\x61\xfc\x90\x66"
- "\x80\x71\x31\xb0\xf2\xa0\x8f\x85\x89\x51\x90\x37\x58\xe4\xbf\xba"
- "\x4c\xd3\xb6\xf8\xfc\x8e\x80\xf4\x6a\x43\xc1\xda\x24\x9a\x1b\x9f"
- "\x8f\xef\x9f\x9f\x96\xd5\x6d\xe4\xc6\x20\xc3\x87\xb0\x76\xc4\x17"
- "\xa5\x26\x52\x7d\xea\x4f\x50\xd7\xb0\xf4\xea\xbd\xab\xf5\x80\xd9"
- "\xda\x24\xe4\x89\x9a\x2b\x06\x29\xc6\x04\xa4\x83\x0f\x0e\x2d\x65"
- "\x7d\xf5\x81\xbe\x12\x2c\x17\xda\x5e\x27\xf6\xb5\x2e\x11\xf9\x03"
- "\xea\xa8\xe2\x79\x3f\x18\xda\x25\x81\xb2\xab\x80\x4e\xaf\x93\xfc"
- "\xa8\xe7\xe4\x6b\x35\x3d\x9e\xd3\x49\xc8\xa5\xd5\xd4\x38\xcb\xf8"
- "\x8d\x19\xe6\x65\xd2\x9e\x7d\x58\xa1\x23\xbf\x2f\x17\xc6\x8c\xc9"
- "\x5c\x77\x39\x5c\xac\x08\xfd\x10\x2c\xe7\x70\xb8\xa3\x72\x74\xb2"
- "\xc3\x64\xae\x51\x29\xe9\xbc\x42\x9b\x72\x9e\x82\xb6\x65\x10\xda"
- "\xb9\x9a\xd6\x6f\x88\xa2\x86\xec\x4f\x09\xd8\x46\x27\x09\xe8\xda"
- "\xe1\x83\x25\x54\x3f\x6b\x2d\xf1\x1b\x9c\xe4\x47\x0f\xd7\x9d\x24"
- "\xeb\xa3\x68\x4b\xa3\xc6\x44\x1a\xda\x9a\x49\xca\x17\xc4\x37\xed"
- "\x18\xf1\x4f\x89\xa2\xfa\xfa\xd8\x93\x84\xa5\x1f\x23\x69\xdf\x12"
- "\xf9\xfa\x5a\x6a\x78\x02\xe6\xe9\xa3\x27\x31\xbd\x19\xd2\x4d\x24"
- "\xad\x85\x1a\x53\xff\x40\x7c\xf1\xf7\xb1\x5a\x4c\x3f\x43\x40\x9e"
- "\xe5\xb3\x34\x7a\xbf\x52\xa8\x13\xf3\x97\x41\x5b\xcc\x57\xe8\xbe"
- "\x9c\x2b\x84\xac\x7f\x86\x04\xa6\xcc\x23\x8a\x59\x60\x2e\x34\x1a"
- "\xdf\x23\xb3\x4c\x14\xec\x80\x43\x64\x83\x9a\xf8\xcc\x32\xe2\xfb"
- "\xe3\x9f\xc1\x51\x42\xca\x80\x16\xfa\xa6\xc5\xbe\xad\x3f\x05\x76"
- "\xd1\x79\x21\xcf\x07\x7c\x9e\x53\x04\xc7\xac\x63\xc8\xa9\x26\xc3"
- "\xb6\xaf\xa3\xa1\xef\x72\x1c\x03\xa8\xa7\xc9\x8c\xf9\xae\x70\xf3"
- "\x13\x8e\x81\x64\xae\x11\x78\xb5\x40\x13\x3d\x57\xa3\xe5\xca\xd5"
- "\xc9\x8e\x44\x94\xad\xe0\xda\x64\x45\x3b\xcb\x48\x2f\xe9\x03\x34"
- "\x50\xd6\x11\xd5\x2c\xcd\x44\xca\xe3\x56\xd9\x9e\x7d\xa4\x52\x18"
- "\x6f\x01\x17\xa0\x29\x06\x2c\x2a\x65\x49\x44\x0e\xd7\xeb\x74\x92"
- "\x8b\xf5\x16\xbc\x8b\x7a\xeb\x26\x81\x96\xa7\x69\xd5\x49\x7e\xf2"
- "\xb7\xa0\xd9\x07\x3c\xdd\x4d\xd3\x9e\x7d\x14\xf8\xff\xe2\x70\xf1"
- "\x3a\xc7\xcf\xdd\xd7\xf9\xf9\x57\x28\x5b\x06\x7a\x38\xdd\x14\x90"
- "\x4e\x68\xc0\x28\x05\xbd\x14\xe8\x4b\xa5\x80\x8d\x91\x1a\xcc\x05"
- "\x8b\xa3\x61\x8e\xf5\x6d\x34\xb6\x11\x46\x7f\xf4\x1d\x5a\x30\x2a"
- "\x90\x3d\xf3\x7a\x74\x3b\x96\x09\xb6\x58\x39\xcc\xd7\x8a\x59\x75"
- "\xd4\x80\xfa\xc3\x54\x30\x36\x37\x7b\x05\xcc\xd9\x05\x69\x7a\x73"
- "\xc0\x7a\x62\xd8\x59\xd0\x84\x73\x02\xca\x1b\xcd\x87\xbc\x7c\x39"
- "\x50\x6f\x3f\x9d\xec\x68\x92\x09\xf2\xd3\xfc\xc5\xd1\x2c\x9d\xe9"
- "\x37\xa6\x87\x8e\x26\xd1\x11\x70\x2d\x77\xee\x26\xb8\xd6\xef\xb4"
- "\xec\xa8\x11\xd2\x09\x9c\xef\xd3\xa6\x5e\x04\xda\x7a\x09\xe3\xe9"
- "\xb9\xe9\x56\xe7\x52\x1c\xcf\x8f\x67\xa0\x8e\x42\xdd\x04\xe9\x77"
- "\x89\x7a\x82\xcd\x01\x4c\xb7\x2f\x8e\x6d\xcf\xae\x0f\xd3\x49\x66"
- "\x9e\xc0\x71\x42\x6c\xdb\x98\x5e\x0b\x37\xed\x2c\x38\x71\x30\x8a"
- "\x90\x83\xb5\x28\x47\xf5\x31\x3a\xc9\xac\x56\x71\x2c\xeb\x97\x23"
- "\x2d\xd7\x4e\xd0\x25\xf8\x9b\xd3\x2b\x90\x07\xe4\xbc\x1c\xe7\x2c"
- "\xa6\x1f\xeb\x13\x71\xde\x02\x3d\xe1\xc3\xe6\xa9\x98\x18\x28\x7b"
- "\x0e\x1d\xfa\x4a\x26\xb4\x2b\xfd\x34\xdf\x16\xcb\xb6\x09\x7a\x91"
- "\x6e\xdb\xe1\xc3\x68\xe3\xab\xa1\xfe\x13\x3a\x49\x74\xad\x25\xbf"
- "\xb0\x7e\x1d\x9b\x04\x3c\x7d\x62\x54\x2d\x9c\x83\x2d\x25\x94\x07"
- "\xfa\xc5\x07\xf4\xca\xbd\xc8\x6f\xa8\x53\x8a\xf2\xd0\x3e\xda\xa1"
- "\x30\x6c\xdb\x11\xd8\x9e\x7d\x2c\x48\xd0\x2d\x98\x17\xe5\x01\xf4"
- "\x8b\x0f\xa7\x37\x4c\x46\x19\x27\xf3\x26\x12\xd2\xad\x4b\x20\xad"
- "\x63\xc8\x0e\x05\x9f\x2e\xe7\xda\x24\x95\x99\xa1\x7e\x89\x50\x5f"
- "\xc7\x90\xf8\x72\x28\x37\x45\x27\x99\x60\xb0\xd2\x35\x79\x73\x02"
- "\x29\x8d\x41\xbe\x91\x41\x5b\x77\xc2\x77\x7f\x9e\x4f\x6f\x3e\x08"
- "\x66\x55\xe4\x54\xa8\x03\xf0\xdc\x3e\x8c\xea\x21\xff\x3e\x1d\xc9"
- "\xe4\xda\xf5\x22\x9c\x63\x3a\xd2\x40\xfa\x71\x1d\x79\x31\x9f\x2f"
- "\xb7\x0e\xf1\xb1\x2e\xb7\x41\xc2\xca\x6d\xe8\x87\xe5\xf1\x73\xfc"
- "\xcd\xf8\x1b\xf3\x63\xd9\x25\x85\xb4\x15\xcb\x6b\xcf\x6e\x50\x0a"
- "\x75\x6c\x85\x34\xa1\x9e\xc8\x25\x42\x5d\x0d\x11\x50\xd7\x70\xcb"
- "\x3e\x14\x15\xd2\x36\xd6\xbe\x86\x39\x3a\x52\x52\x87\xd7\x32\x21"
- "\x0d\xf3\x32\x5e\x68\x58\x8b\x7c\xa2\x63\xfd\x92\x31\x7e\x69\xc8"
- "\xd4\x91\xe2\x68\xcb\xb9\x07\xb0\x18\x24\xcc\x4d\x7c\x79\x55\x42"
- "\x79\x62\x59\xac\x0c\x9a\x5b\xec\xc3\xcb\x02\xca\xac\x2f\x96\x0f"
- "\xf4\x27\x75\xe4\x25\x7e\x4e\xf8\x78\x46\x1b\xe3\x6d\xc4\x00\xf3"
- "\x30\xcc\xb3\x0f\x86\xe3\xbc\x59\x96\x87\x7a\x2c\xbe\xb8\x3d\xbb"
- "\x51\x61\x33\x67\xfa\xb0\xf9\x2c\x5d\x89\xbc\xc1\xcb\xff\x93\xd8"
- "\x26\xa1\xbf\x50\x8e\x1c\xca\x79\x0c\x79\x1a\xcb\x01\x3d\xa7\x83"
- "\x72\x62\x6c\xca\x91\x23\x9d\x29\xfb\x60\x1a\xce\xd1\x2f\x0f\xa3"
- "\x2d\x40\x93\x22\xd0\xe0\x75\x18\xd7\x47\x20\x2d\x57\x47\xaa\x12"
- "\x31\x2d\x1b\x68\x74\xb2\x83\x4e\xdf\xdb\x49\xbd\x8b\x48\x1b\x8b"
- "\x75\xb8\xa6\x45\xf9\x1d\xdf\x38\xbc\x8d\x34\x16\x9b\x89\xf9\xf5"
- "\x67\x48\x44\x2a\xd5\x9e\x95\x35\x0d\x6a\x30\xb4\xb8\xb9\xf6\x6f"
- "\xe4\x9e\x7f\xa7\x9d\xb0\xf6\x4a\x19\x43\xd0\x2e\xb9\x20\xfb\x64"
- "\x42\xa3\xfe\x22\xa7\xcb\xe0\x37\x37\x07\xbe\x0c\x6b\x35\x5c\xaf"
- "\xc1\x9a\x5c\x95\x2b\x65\x6b\x36\x33\xd0\x96\x62\x3a\xae\xe7\x60"
- "\x8e\x2a\xb3\xb8\x46\x5f\x7f\x3a\x9d\x8d\x5d\xd3\x65\x4e\xa7\x63"
- "\x7b\x8d\xd3\xb4\xd8\x66\x73\xc5\xd3\xe9\xd8\x87\x34\x0d\x35\x37"
- "\x1a\xdb\xb5\x38\x8f\x29\x57\xe3\x5a\xb3\xe9\x93\x59\x25\x84\x9a"
- "\x77\x3d\xed\xe6\x5a\xaf\x89\x7b\xf7\x06\xd6\xe3\x17\xf4\x23\x9e"
- "\x4e\x4f\x33\x11\x69\x4e\x6a\x3f\x9f\x29\xc5\x54\x7b\xe9\xd7\xcf"
- "\x00\x5f\x34\xb5\xed\xd7\x10\xe2\xbe\x8d\xde\xd4\x26\xf4\xbd\x94"
- "\xef\x3b\xa4\x71\xef\x8b\x8c\x2a\x4a\xe7\xfa\xab\x93\x7d\xe2\x34"
- "\xd6\x1b\xcd\xf0\xa3\x07\x8b\x8d\x64\x65\x31\xed\x5c\x59\x42\xa4"
- "\x60\x23\x35\xbd\x5d\x7a\x02\xf5\x76\x84\x30\x9e\xdc\xd8\x19\xf5"
- "\x24\x29\x95\x28\xce\xc9\x3e\xf9\x6c\x56\x4a\x3a\xb7\x77\xd3\x47"
- "\x40\xe7\x5e\x5b\x3f\x29\xc7\x76\x34\xc0\xfa\x7e\x96\x31\x8d\xb2"
- "\xb9\xe7\x13\xd3\x13\x7c\x79\x78\x4d\xc0\xaf\x94\x5f\x77\xbb\x5f"
- "\xc7\xa7\x4e\xe3\x7f\xf4\xd0\x57\x85\xe3\xbe\x7e\xba\xdf\xf3\xbe"
- "\x7e\x9a\x65\xdf\xd7\x4f\xbf\xbf\xca\x7d\x75\xba\xff\x57\x0f\x7d"
- "\x55\x3a\xee\xeb\xbf\x76\x7b\xde\xd7\x7f\x69\xec\xfb\xfa\xaf\xcf"
- "\xae\x6e\x5f\xff\xe5\xd4\xff\xd7\x43\x5f\x43\x1d\xf7\xf5\xf8\x76"
- "\xcf\xfb\x7a\x3c\xce\xbe\xaf\xc7\xf7\x5f\xdd\xbe\x1e\xaf\x73\xda"
- "\x57\xa9\x1f\x45\xfd\x04\x7a\xa9\x33\xb5\x03\x6c\xb6\xc2\x8c\xdc"
- "\x0d\x3b\x89\xb4\xbe\xcd\x40\x1a\x86\x9f\x20\x69\x6b\x89\x74\x64"
- "\x12\xe8\xbd\x0c\x32\x9e\x16\x8e\xcc\x6d\x28\x6e\x85\xf4\xb3\xe4"
- "\x98\xc6\x40\x22\x56\xa0\xfe\xfd\x6c\x6b\x63\x9c\xbb\xfa\xf7\xb3"
- "\x98\x6e\xfd\x6b\x1c\xc3\xeb\xdc\xcf\xf7\x36\xb4\x76\x12\xec\x3f"
- "\xfc\xde\xd5\xad\x7f\x33\xd8\x78\xdb\xea\x5f\x1c\x8f\x46\x83\xc1"
- "\x4a\xff\xb2\xf7\xb7\x3e\x5f\x6e\xab\x7b\xb3\xcf\x11\xe2\x58\xf7"
- "\x7e\x3e\x13\x75\x6f\x29\x5c\x77\xaf\xfd\x9f\x07\x0a\xba\x37\x17"
- "\xea\xb4\xd4\xbd\x07\xe3\x70\x4e\xfe\x3c\xc9\x33\xdd\xfb\x79\x92"
- "\xd0\xef\x12\xbe\xdf\x30\x56\xc7\xad\x75\xef\xe7\x4e\xdf\x75\xb1"
- "\xe4\x5b\x5a\xb8\xa8\xfa\xed\x3b\x0c\xfd\xcc\x15\xcf\x68\x71\x7e"
- "\x6b\x87\x31\xf9\x5b\xa9\x41\x7e\x56\xf6\x7f\x2c\x56\x41\x7b\x9c"
- "\x84\x56\xc4\xa8\x66\x25\xd3\x6f\xe8\x88\x67\xb4\xe8\x43\x45\x5f"
- "\x00\x5c\xff\x03\xdd\x15\xa3\x72\xaf\xdd\xac\x4c\x98\xff\x48\x2a"
- "\xc8\xcb\xdb\xab\x0d\x52\xf3\xfa\x18\x3f\xc0\x41\x41\x0b\x16\xeb"
- "\xe9\x0b\xff\x3b\xfe\x52\xc1\xc6\xd8\x43\xc1\x67\x08\xd2\xd2\x8d"
- "\xf2\x08\x2f\xda\xdf\xd2\x73\xfb\x4f\xdc\xee\x41\xfb\x5b\xdc\x68"
- "\x7f\x8b\x4b\xed\x1f\x06\xed\xef\x0c\xef\x07\x6b\x42\xe9\x47\x9d"
- "\xe1\x72\xf7\xda\x73\xc2\xe9\xfb\x1f\x57\xb1\x0e\x97\xf5\x1f\x1d"
- "\xa6\xd1\xbf\x5d\xaa\x97\x82\x0e\xe0\xe6\x70\x94\x3d\xa6\xff\x5a"
- "\x40\x67\x7d\x43\x99\x4e\xd2\xbb\xa9\x93\xbe\x98\xe3\x7a\xfd\x4b"
- "\xa2\xaf\x41\xfd\xce\xfb\x6f\xab\x13\xdf\x7a\x56\xe7\x5c\x27\x26"
- "\x46\xdb\xeb\xc4\x2f\x77\xba\xaf\x13\xbf\x4c\xb4\xd7\x89\x5f\x1d"
- "\x13\x75\xe2\x57\x7b\x3d\xd7\x89\x5f\x6d\x76\x5d\x27\x7e\x35\xcf"
- "\x33\x9d\xf8\x55\x48\xcf\x3a\xf1\xab\x4d\x9e\xe9\xc4\xaf\x36\xd9"
- "\xeb\xc4\x2f\x5b\xac\x75\xe2\x57\x4e\xf7\xfa\xa3\xb9\x8f\xeb\x60"
- "\x8e\xf6\x3d\x27\x3b\x99\x65\xcc\x20\xc4\x9c\xfb\x71\xe6\x2c\x13"
- "\x6d\xa7\xdb\x1e\xd7\x99\xa5\x61\xa8\x57\x22\xda\xdb\x55\x3e\xe6"
- "\x35\xc1\xbe\x74\xe8\xdc\x7b\x69\x57\x20\x81\x71\x0a\x82\xf6\xfb"
- "\xd1\xf6\xe0\xc1\x74\x4d\xf0\xd0\xe2\x2b\xc4\x1f\x8e\xc0\x62\x7e"
- "\x3e\x86\xdf\xa1\x74\x4d\xe0\xc0\xec\xd5\x24\xc4\xaf\x8d\xf8\x40"
- "\x1b\x62\xfc\x36\x2a\x08\xe8\x20\x7f\xfc\x4d\x33\xbe\x09\x2e\xbb"
- "\x42\xe4\x7e\x1a\xc0\x66\x08\xd4\xa7\xf1\xa3\x74\x65\x30\x29\x5b"
- "\x41\x7c\xcc\x52\x12\x58\x2a\xa5\xd5\xc6\xf6\x60\xa9\xc9\x3f\x5d"
- "\xc1\xf0\x39\x15\x41\x87\xc1\xda\x2b\x3f\xed\xa4\x79\x58\x5a\xad"
- "\x29\x4d\x25\xa3\xeb\x63\x64\xd8\x56\x53\x7e\x9a\x96\x16\xc2\x91"
- "\xa6\x1a\x8c\x36\x74\xd9\x6a\xa8\xbb\x3d\x70\x60\x0e\xd4\x5d\xba"
- "\x9a\x04\x95\x5c\x21\xc1\xf4\x52\xb0\x14\xf0\x8f\xc1\x3d\x50\x61"
- "\x8c\x62\xcc\xd2\x6f\x82\xe1\x9a\x1c\x75\x22\xc5\xfa\x8d\x50\x7f"
- "\x57\x30\xfa\xb1\x80\xb7\x49\x60\x19\xd4\x6f\x5a\x13\xec\xa6\xbc"
- "\x9c\xe2\xde\x3d\x16\xda\x65\x0e\x99\xaf\xa3\x6f\xc1\x81\xed\x82"
- "\x31\x2c\xc3\x31\x19\x39\xbf\x19\xdb\xb6\xf5\x0a\x09\x81\x76\x06"
- "\x41\x1b\x82\xa1\x5e\x8c\x1f\x13\xf3\xdc\x72\x05\xf2\xa8\x55\xdb"
- "\x4c\xdb\xf8\xb6\xfd\x08\x6d\xbb\x20\xb6\x0d\xeb\xc2\xf1\x71\x76"
- "\x6f\x76\xd6\x86\x3b\x50\x36\xbf\xf3\xd3\xf4\x8f\xc2\xfb\xb4\x97"
- "\xd6\xbb\xfb\x2c\xe5\x29\xa7\xef\x3f\xe7\xbc\x45\x86\x53\xc5\xfe"
- "\xcc\x27\x36\x7f\x43\xd1\x4f\xb8\xf9\x2d\x12\xd2\x08\x72\xdd\x60"
- "\x38\x4f\xe8\x90\xfd\x99\x87\x82\x5b\xdd\xac\xeb\x6b\xa7\xf1\x4f"
- "\xb7\x64\xd0\x26\xb3\x7f\x3a\xa1\xfe\x1b\x63\x72\x32\xa8\xa6\x2b"
- "\xe8\xe9\xf2\xce\xa0\x98\xa4\xb9\x46\x05\xf0\x35\xd5\x28\x57\x10"
- "\xe5\x59\x59\xf3\x8b\x47\x8e\xc3\xba\xf4\x59\xe2\x73\x5a\xd6\xac"
- "\x4d\xfb\x02\xef\x61\x7d\x7d\xdc\xfa\x1e\xd6\xd7\x06\x22\xd3\xa9"
- "\x88\xec\x5b\x0d\x91\x9d\x2e\x26\x40\x67\x7d\xfc\xbb\x86\x95\xa5"
- "\x9b\x3a\xeb\x8d\x3b\x48\xaa\x91\x7e\x47\xf3\x47\xd5\x65\x4b\xa9"
- "\x61\xd6\x3d\x12\x9d\x76\x35\xde\xdb\xd1\x4d\x80\x31\xfd\x01\xe6"
- "\x5a\x3f\xf8\x3d\x00\x30\x25\x49\x2b\xc8\x2d\xe7\x64\x3a\x1f\x94"
- "\x1b\xbf\xb6\xfe\x51\xa6\xb4\x18\x62\x54\x16\x34\x75\xe5\xa7\xe9"
- "\x4d\xf9\x8b\xa3\xcd\x8a\x8f\x33\xd1\xcf\x8b\xf7\x64\x41\x36\x62"
- "\xe6\x9a\x7c\x50\x1e\x63\xb4\xf3\x8f\x90\xb3\xc9\x44\x9a\x76\x99"
- "\x0c\x02\xde\xec\x96\xab\x99\xad\x7e\x86\x0d\xad\xd4\x8c\xb2\x85"
- "\x7e\x55\xb8\x36\x38\xf5\x32\xac\xef\xf5\x2d\xa4\x78\x05\xf1\x37"
- "\xad\x54\x0d\xd5\x5f\x52\xdd\xb2\xc3\x4c\xfc\x07\xb7\x11\x45\xf1"
- "\x45\xe0\xa9\x95\xc0\x4f\x17\x41\xce\xf4\x4c\xce\x30\x06\x40\x29"
- "\xca\x58\xf6\x4d\xa1\x65\x17\x99\x8c\x71\x7c\x84\x32\xb6\x0c\xf8"
- "\x68\x29\xce\x1f\xc0\x47\x19\x20\x63\x20\x17\x34\xfb\x54\x4d\x71"
- "\x06\x45\xbf\xaf\xb4\xec\x5c\x7f\xbc\x26\xe9\x77\x8f\x54\x79\x24"
- "\xda\x40\x44\x5f\x47\xf3\xfe\xce\x11\x31\x49\xca\xdf\xd2\x1f\x4f"
- "\xcb\x74\x61\x90\xee\xa3\x7c\xea\x37\x0a\x18\xef\xfd\xcc\xef\xd6"
- "\xac\x45\x5f\xa6\x0e\xc6\x02\xc7\x45\xf9\x5b\xf2\x9b\xd3\xb2\x6f"
- "\x06\xe0\x38\xae\xa9\x24\xb2\xa4\x47\x68\x33\x8c\x99\x82\x72\xfe"
- "\xbe\x6f\xb8\x67\x65\xf0\xbe\xff\x51\xee\x9e\x1a\xcb\x63\x82\x71"
- "\x33\xfa\x8f\x0a\x04\xbc\x95\xda\x84\x4e\x4e\x0f\xe1\x38\x9e\x4d"
- "\x24\xd2\xb9\xad\x30\x56\x26\x18\xab\xf6\x60\x5f\xd0\x47\xd1\xa8"
- "\x8f\x68\xee\xdc\xa0\x14\x1d\x35\xcf\x8a\x93\xd1\xd4\xe5\xc4\x07"
- "\xfd\xdb\xcf\x25\x11\xba\xe1\x3c\x8c\x57\xdb\x09\x02\x7a\x69\x30"
- "\xe8\xac\xa1\x25\xab\x89\x3f\x8e\xd7\xa0\x56\xb0\x55\xf2\x0e\xa6"
- "\xbf\x95\x5a\xd7\xcf\x04\xfc\x8b\xfa\xc9\x6f\xa3\x64\x00\xc8\xd9"
- "\xe0\x2c\x94\x47\x90\x4f\xbf\x8d\x9c\xbe\x8c\x29\x06\x39\x34\xae"
- "\x09\xbe\xbb\x6b\x4d\xb0\x12\x8e\x3b\x04\x1d\x26\xe8\x0f\x9a\xfd"
- "\xb5\x12\xf5\x57\xa3\x46\x47\x8c\x30\xb6\x83\x71\xae\x5b\x13\x3c"
- "\x9c\x1b\xe3\x45\xc1\x64\x94\x81\x48\xa0\x4d\x0a\x68\x2f\x29\x8b"
- "\x27\x3e\xc7\x54\xa7\x89\x09\x64\x43\x18\xf7\x99\x6a\x25\x81\x72"
- "\xa5\x87\x82\x3f\x23\xfc\x98\x49\x9c\xf3\xdd\xe9\x02\x91\xef\x4e"
- "\x17\xe0\xd8\x31\xbe\x3b\x9d\x7f\x23\xf2\xdd\xd1\x18\x8e\xef\x64"
- "\x5d\x23\x38\x7e\x52\x34\x1a\xff\x0a\x63\x74\x3a\x1d\x79\x04\x79"
- "\xe6\xf0\x5f\x90\x67\xfe\x5d\x79\xbd\xf2\x4c\x47\x7b\xb0\x12\x8e"
- "\x6b\xc2\x33\x50\x2e\xc7\x33\x38\x56\x47\x63\x3a\x89\x30\x46\x9c"
- "\xac\xe6\xee\xcf\x54\xa6\x91\x89\x20\xab\x5a\xbf\x8d\x77\x90\x63"
- "\xdc\x38\x35\x6b\x95\x4f\x51\xf3\x69\xd9\xbf\xbf\x4d\xfb\x84\x28"
- "\x3a\x33\x28\x6d\x34\xee\x26\x66\xff\xf5\x04\xef\x4f\x9a\xf3\xc7"
- "\xe6\xc2\x9a\x55\x43\xb7\x9d\xd2\xa1\xef\xdd\x2f\x09\xfd\xdd\x07"
- "\x72\x4d\x05\x5b\xf4\xe6\x6d\xfb\xb5\x74\xc8\xd7\x51\x78\x8f\xc1"
- "\xbc\x6d\x67\xac\x79\xc8\x17\xe5\xed\xd9\xcd\xc1\x3a\x42\x39\x9f"
- "\x3f\xcd\x4f\x47\x1b\x0c\xf5\xef\x93\xec\x7e\x18\xde\x3b\x6c\x8e"
- "\x12\xee\x7b\xa3\x4e\xe0\xef\x31\xf0\xf7\x20\x9a\x11\xc3\x81\x78"
- "\x0f\x82\xd7\x29\xe3\x84\x7b\x10\xc2\x39\x5e\x87\x7c\xe3\xb9\xfb"
- "\xb0\x62\xbe\x1a\x9e\x8e\xcf\xf7\xf5\x07\xa8\xeb\xc5\x7c\xec\x1c"
- "\xe6\x91\x9a\x2e\x29\xf1\x71\x68\xe3\xf8\x6f\xd1\x83\xfc\xc0\xda"
- "\xe8\xec\x38\xf8\x96\x9e\x95\x9d\x79\x06\xbe\x65\xf0\xcd\xf9\x31"
- "\xdd\x9b\xaf\x9a\xdb\xd8\x7d\xa0\x8d\x9b\xf8\x76\x5f\xe6\x64\xf2"
- "\x5e\x32\xe8\x1c\xff\xbb\x3d\xfb\x4c\xb4\x70\xff\xbe\x9b\x5e\xc4"
- "\xa7\x15\xeb\x06\x8c\xe4\xec\x99\x02\x76\x8e\xcf\xeb\xf0\xe5\x71"
- "\xe7\xe6\xa0\x67\x63\xb5\xa9\xa7\x49\xab\xec\xcc\xbe\x46\x98\xc3"
- "\xcd\x85\x1b\x37\xe1\xfd\x31\x94\x2b\xa1\x5e\x90\x45\x1f\xed\x3a"
- "\x8e\x86\x7b\x4f\xd4\x9c\xaf\x89\xa5\x85\xa3\x72\x71\x2d\xd8\x4e"
- "\x55\x8f\xf0\xdf\x13\x50\x9e\x98\xdf\xe4\xec\x00\x0a\xd8\xe2\x1e"
- "\xee\xdd\xcf\x30\xe1\xde\xea\xe9\x72\xe5\xfe\x14\x36\x57\x0a\xed"
- "\xc5\xfd\xd7\xf1\x19\xa1\xdf\xa4\x93\xf4\x76\x07\xfb\xaf\x8b\xcf"
- "\x12\x9d\x69\x33\x17\x68\x62\xdb\xb3\xcf\x46\x02\x06\x9b\x2c\xfb"
- "\xec\x08\x0b\x9d\xec\x6c\xac\xb3\x6b\xee\xe1\x70\x36\xc5\x59\x39"
- "\x53\x83\x4d\xd4\xcd\xb2\x9c\xfb\x7f\x82\x9e\x26\xb3\x2a\x4d\x5a"
- "\x73\x57\x8c\xdf\xa1\x94\xf3\x6e\xda\x36\xdf\x29\x9d\x95\x6b\xca"
- "\x5f\xaf\xec\xfa\xf5\xd3\x28\xcb\xbe\xa6\x65\x31\xd3\x1a\x2a\x8d"
- "\xe4\x8d\xa5\x2d\x52\xd4\x87\x55\xe7\xaa\xa5\xb3\xee\xe1\x6d\xb8"
- "\x66\xa2\x40\xbf\x17\xda\x72\xd9\x17\x48\x50\x67\x5a\x8c\x5f\x67"
- "\x57\x0c\x79\xe9\x02\x19\x6f\x5e\x14\x38\x30\x2b\x9e\xc8\x3b\x40"
- "\x17\x76\x7c\xa7\xf2\x3b\x7a\xb2\x85\x7c\x04\x79\x1b\xda\x74\xa4"
- "\x14\x68\xe9\x77\x31\x83\x1f\x8f\xa5\x86\xfa\xd8\xbf\x92\x59\xc1"
- "\x26\x6d\xea\xb7\x64\x10\xe8\x44\x45\xa3\x66\x17\xac\xa1\xce\x93"
- "\x7e\x6b\xa5\xca\x46\xe3\x19\xb2\x35\x1e\x74\x29\xe8\xce\xb4\xdf"
- "\xc1\x9c\x01\x3c\xb1\xc3\x72\xce\x48\x78\x45\x9c\x33\x7e\x84\x39"
- "\x23\x0f\xe6\x8c\xb4\x40\xd2\x90\xa4\x25\xa0\xc3\xfa\x3f\x91\xe4"
- "\x67\x48\x4d\x82\xb9\x63\x2d\xcc\x1d\x9a\x33\x84\x9b\x37\x5a\x5b"
- "\x08\xe8\xfc\xc1\x25\x4b\x89\x7f\xe7\x8f\x30\x77\xfc\x08\x73\x47"
- "\x2a\x9b\x3b\xb6\x5f\x80\xb9\x63\x19\xac\x0d\x96\xc2\xdc\xd1\xea"
- "\x60\xee\xb8\xe0\x78\x5d\x20\xe8\xc1\x8e\x1f\x83\xa5\xdb\x61\xde"
- "\x58\xf7\x19\x91\x6e\x7f\xaa\xbf\x9b\x3c\xd3\xe2\xf4\x3e\x0a\x2d"
- "\xdc\xb8\xc0\x4c\x63\x08\x8e\xfb\x3a\x03\xcc\xc3\x80\x4b\x63\xb0"
- "\x91\xf8\x1d\xef\x1f\xd5\x01\xe9\x5d\xc3\x16\x35\x55\x7e\xa9\x97"
- "\xd2\xfc\xc5\xfa\x0e\xc0\x6d\xdd\x2a\x22\xed\x02\x0c\xab\x7e\x9b"
- "\x2b\xc5\x75\xa2\xb9\x40\xe5\xcf\xd6\xa4\xe7\x0e\xa3\x4f\xc4\x4f"
- "\xc7\x70\x33\xd2\x18\x3f\xba\x20\x66\xd0\xd6\xf9\x44\x6e\xfa\x77"
- "\xe0\x40\xf3\x82\x40\x9f\xd4\xcf\x88\x42\xbf\x40\x05\xe3\x75\x9e"
- "\x7c\xf4\x69\xae\xb4\xec\x59\xa2\xc4\x78\x8d\xf4\x05\x53\x4b\xd9"
- "\x73\x24\xbc\xec\x6b\x12\x56\xfa\x2c\x09\x29\xf9\x12\xe3\xba\x03"
- "\x86\x2d\xd4\x70\x4c\xf5\x77\x52\xf6\x25\x89\xa0\x85\x09\x4d\x34"
- "\x60\xbd\x12\x7e\x87\xe7\x3e\x0b\xeb\x07\xb8\x3e\x2b\xb8\x43\xdb"
- "\xa8\x39\x46\xb2\x4e\x13\x92\xfa\x3d\x8f\x71\x37\xbe\xa7\x88\x51"
- "\x0a\xfa\x03\x6d\x82\x99\x0c\x5f\xbc\xef\x85\x6b\x8e\x6e\x8c\xe3"
- "\x0f\x58\xdb\x05\x3c\xc6\xc7\x5a\x9b\x08\xcc\x81\xfd\xbb\xed\x03"
- "\x0e\xe3\x53\x44\xb0\x0d\x00\x9b\xc1\x60\x0b\xf8\x77\x5c\xb2\xb1"
- "\x0f\x56\x78\x68\x1f\xf0\xeb\x1b\xe3\xca\x60\x69\xb1\x94\x92\xb4"
- "\x63\x44\x5a\x64\x76\x17\xe3\x73\xdc\xfb\x45\xe8\xfb\x62\xcf\xee"
- "\x7c\x3f\x13\xb1\xd0\xc9\xbe\x9f\xf1\xbb\x60\x09\xf1\x0c\x7b\x55"
- "\x74\x2f\xd8\xe7\x33\xec\x5b\x0f\x79\x86\xbd\x2a\x9a\xbe\x60\x8e"
- "\xf0\x0c\xfb\xcb\x6e\x62\xcf\xc5\xbd\xbc\x41\xb1\x6f\xcd\xb5\xc6"
- "\xfe\x87\xe9\x0c\xfb\x1f\xa2\xbc\xc0\xbe\x17\xb9\x57\xf3\x72\x7f"
- "\x61\xbf\x87\xd8\x83\xdc\x9b\x8b\x3c\xc3\xfe\xbc\x9b\xd8\x73\xb1"
- "\x33\x6f\x50\xec\x2f\x64\x59\x63\x7f\x7e\x2a\xc3\xfe\x7c\xa4\xe7"
- "\xd8\xab\x7b\x91\x7b\x35\x2f\xf7\xfa\x0f\x3c\xc3\x5e\x8d\x72\xaf"
- "\xf7\x0c\xfb\x53\x6e\x62\xcf\xc5\xdf\xbc\x41\xb1\xd7\x67\x5a\x63"
- "\xff\xe3\x24\x86\xfd\x8f\x11\x5e\x60\xdf\x8b\xdc\x27\xf0\x72\x7f"
- "\x71\xaf\x87\xd8\x83\xdc\xd3\x28\xcf\xb0\xff\xc0\x4d\xec\xb9\x18"
- "\x9e\x37\x28\xf6\x17\x37\x59\x63\xff\xd3\x04\x86\xfd\x4f\xe3\x3d"
- "\xc7\x3e\xa1\x17\xb9\x4f\xe0\xe5\xbe\xed\x3d\xcf\xb0\x4f\x00\xb9"
- "\xa7\xe5\x9e\x61\xbf\xc1\x4d\xec\xb9\x38\xa0\x37\x28\xf6\x6d\xe9"
- "\xd6\xd8\x5f\x1a\xc7\xb0\xbf\x14\xee\x0a\xf6\xeb\x2d\xb1\x3f\xd9"
- "\x3f\x0a\xd6\x56\x9c\x9d\xff\xc6\xb3\x3c\xf6\xaf\x03\xf6\xd0\xff"
- "\xaa\xa7\x8a\x6c\x6c\xfc\x2b\x6f\x70\xb8\xc7\x02\xee\x1a\xc0\x1d"
- "\xd6\x86\x02\xe6\x80\xd1\x20\xc4\x1d\x31\x4f\x3d\x45\x14\x1f\x41"
- "\x5e\xc4\x07\x31\x06\x1c\x95\x1c\xce\x37\x99\x5a\xa8\x44\x1e\x88"
- "\x78\xa2\xdd\x8f\x98\xf7\x66\xdb\x23\x4f\xf4\x8a\xf9\x93\xd7\xc6"
- "\xbe\xef\xb4\xf5\xff\x5d\x2d\xcc\x3f\x81\x35\x5c\xaa\xbb\x98\x5f"
- "\x49\xb6\xc6\xfc\xf2\x68\xc4\x41\x27\xbb\x1c\xea\x39\xe6\xea\x68"
- "\xe7\x98\x0b\x73\xbc\xa1\xc4\x3b\xcc\xcd\x7a\x11\x73\x75\x74\xcf"
- "\x98\x9f\xf2\x00\xf3\xab\x3b\xbf\x5f\x5f\x98\x1b\x54\xd6\x98\xb7"
- "\x8f\x60\x98\xb7\x07\x39\xc3\xdc\x0c\xfa\x1a\x7d\xea\xf8\x5e\xa2"
- "\xa9\x3d\x66\x5a\x17\xe0\x8a\xef\x27\xa2\xaf\x77\xf7\xd2\x1a\x69"
- "\x17\xe0\x9e\xb3\x9a\x04\x65\xad\x26\xe3\xfd\x5a\x98\xfe\xee\x04"
- "\xfd\xfd\xe2\x15\x22\x37\x2f\x0e\x1c\x98\x75\x8e\xc8\x3b\x61\x8c"
- "\x3b\x17\xab\xfc\xea\x63\xf5\xe4\xa3\x0b\x35\x52\xf4\xdd\xe2\x7d"
- "\x3b\xfa\x43\xcc\xe0\xe9\x71\xd4\x50\xdf\x9c\xc7\xfc\x2a\x67\x04"
- "\xbf\xca\x6e\x2b\xbf\xca\x4b\xe7\x78\xbf\xca\x33\x0c\xa3\x62\x4b"
- "\x7c\x9e\x7b\xd5\x89\x5f\xa5\xae\x57\xbf\x0a\xe7\x4f\xb9\x40\xfc"
- "\xbb\x96\xa9\x86\x6e\xe7\xfd\x2a\xaf\x2c\xf5\xce\xaf\xd2\xb9\x2c"
- "\x58\xfa\x0a\xe0\xb3\xfe\x19\xc0\xe7\x4b\x77\xf1\xe9\x74\xfa\xfe"
- "\xb3\xed\x5c\x2b\xcc\xb1\xc2\xbc\x8a\x32\x87\x73\xab\x21\x7f\xd1"
- "\x71\x5b\x5f\x0a\xca\xdb\x05\x99\xf1\x56\xd4\xc9\x9e\xf9\x53\x40"
- "\xc6\xfe\xcb\xfc\x29\x28\x73\xc2\x3c\x7b\x7d\xcc\xb1\x5d\xcd\xd6"
- "\xb2\xd7\x59\xc2\xe6\xd8\xce\x62\x57\xed\x2b\xe7\x98\xab\x66\xdb"
- "\xfa\x50\x18\xe6\xe6\x41\xe8\x73\xf1\xc8\x8f\xb2\x85\xcc\xf8\x6f"
- "\xf3\xa3\x5c\x7f\x98\x9b\x4e\x58\x63\x6e\xdc\xc6\x30\x37\xe6\x5e"
- "\x05\xcc\x8f\xdb\xfa\x4e\x38\xcc\xe5\x44\x82\xbe\x16\x8f\xfc\x27"
- "\x5b\x88\x87\xb6\xf4\x7f\xce\x7f\x72\xfd\x61\x4e\xeb\xad\x31\x37"
- "\x6f\x66\x98\x9b\x37\x79\x8f\xb9\x7a\xb6\xad\xcf\x84\x61\x2e\xb9"
- "\x8c\xb6\x97\x47\x7e\x93\x2d\xa4\xed\xbf\xcd\x6f\x72\xdd\x61\x2e"
- "\x97\x68\xad\x30\x97\x93\xb5\x1c\xe6\x72\xa2\xb9\x0a\x98\x1f\xb7"
- "\xf5\x95\x30\xcc\x65\xdf\xa3\x6f\xc5\x23\x7f\xc9\x16\xc9\x7f\x9d"
- "\xbf\xe4\xfa\xc3\x5c\xb6\xc7\x1a\x73\xe9\x12\x86\xb9\x34\xd1\x7b"
- "\xcc\x13\x66\xdb\xfa\x48\x18\xe6\xfd\x4e\xa1\x4f\xc5\x23\x3f\xc9"
- "\x16\x49\xf1\x7f\x9b\x9f\xe4\xfa\xc3\xbc\x5f\xa5\x35\xe6\xf2\x79"
- "\x0c\x73\x79\xac\xab\x6b\x66\x61\xad\x2c\xac\x8f\xb9\xb5\xb2\x3f"
- "\xd8\xec\x36\xbe\x11\x86\x77\xff\xc3\x9c\xcd\xee\xf1\x5a\x99\x1a"
- "\xfe\x5b\xfc\x23\x02\xd6\xb8\x5e\xbe\x2e\xd6\xca\xf2\xfe\xd6\xf7"
- "\x3f\xe5\x37\x3d\xc9\xad\x95\xe5\x37\x45\x3b\xc3\xda\xd1\xb3\x08"
- "\x0d\xb0\xd6\x14\x9e\x45\x78\x71\x35\xe0\x08\x7c\x80\xcf\x22\xe0"
- "\x33\x09\x8e\x9e\x47\xc0\xe7\x10\x84\x67\x12\x2c\x9f\x47\x88\xd2"
- "\x51\x03\x3e\x93\x80\xeb\xe4\xfa\xd8\x2d\x44\x78\x36\x01\x9f\x41"
- "\x48\xfb\x96\x0c\x42\x8c\xf0\xf9\x03\x5c\x2f\x5f\xeb\x67\x10\x8a"
- "\xcc\xd7\xc1\x33\x08\xf2\x01\x4e\xe3\xdf\x09\x32\x37\xf3\x8d\x3b"
- "\x08\xf0\x5b\xb7\x9f\xaa\xab\x70\x51\x13\xca\x1c\x62\xe4\xd7\xca"
- "\xe4\x70\xf7\x53\xd5\xd2\x46\x4d\x0d\x79\x71\x1d\x51\x08\xfe\x0b"
- "\x94\x41\xd0\xcb\x7e\x46\xc0\x33\x2b\x81\xf9\x31\xcc\x3f\xc4\x0c"
- "\xd2\x2f\x56\xf9\xe1\x7b\xfb\x1f\x7d\x5e\x2d\x45\xdf\x63\x59\x3c"
- "\x09\xdb\x71\x96\x84\x37\xb4\x9d\x22\x9c\x4c\x15\xa8\x7c\xcc\x05"
- "\x8b\xf4\x5d\x05\xeb\x95\xe6\x80\x45\x6d\xfa\x80\x45\x06\xc4\x2d"
- "\xeb\x1c\x21\x28\x5f\x88\x5b\xa3\xa6\xa4\x1b\x2f\x0e\x2b\x29\xef"
- "\xdb\x70\x2a\x53\x9f\x7a\x8c\x59\xf1\x05\xc0\x6c\x99\x35\x66\x25"
- "\x9e\xfa\x37\x84\xe7\xb9\x97\x05\x4b\x4b\x40\xa6\xd6\x3d\x09\x98"
- "\xfd\xd6\x5d\xcc\x06\x3a\x8d\xff\xed\x1c\x33\x55\xb4\x8b\x98\xe5"
- "\xf7\x8e\x99\x39\xc2\x01\x66\x99\x90\x37\x89\x61\xa6\x4a\xd6\x07"
- "\xa8\x34\x22\x66\x97\x5d\xc4\xcc\x76\x0d\x7b\x23\x61\xe6\x5b\xec"
- "\x01\x66\x2e\xca\x99\xda\x05\x39\x33\x17\xd9\x63\xa6\x06\x39\x53"
- "\xf1\x72\xa6\x02\x39\x53\x59\xc8\xd9\x79\x17\x31\xb3\x5d\x83\xde"
- "\x48\x98\x0d\x8e\x76\x1f\x33\xb5\x8b\x72\xa6\x76\x45\xce\xf4\x0e"
- "\x30\x03\x39\x53\xf3\x72\xa6\x06\x39\x53\x5b\xc8\xd9\x29\x17\x31"
- "\xb3\x5d\x43\xde\x48\x98\x29\x9c\xbf\xff\xed\x1c\x33\x17\xe5\x2c"
- "\xc1\x05\x39\xa3\x51\xf6\x98\x25\x80\x9c\xa9\x79\x39\x53\x83\x9c"
- "\xa9\x2d\xe4\xec\x03\x17\x31\xb3\x5d\x03\xde\x48\x98\x0d\x71\x1a"
- "\xff\xdf\x39\x66\x09\x2e\xca\x59\x82\x0b\x72\x46\xcb\x1d\x60\x06"
- "\x72\x96\xc0\xcb\x59\x02\xc8\x59\x82\x85\x9c\x6d\x70\x11\x33\xdb"
- "\x35\xdc\x8d\x84\xd9\x2d\x89\xee\x62\xc6\xe1\x05\xb6\xa3\x43\xcc"
- "\x3a\xad\xed\x46\x23\xd8\xf1\x78\xcf\xcb\x21\x5e\x2f\x98\xf0\x9d"
- "\xde\x40\xc4\x0a\xed\x41\xc4\xab\x51\x73\x88\x38\xb2\x1b\xf1\xbe"
- "\x18\xe0\x4e\xf0\xde\x58\xda\x19\x37\xec\xc5\xf9\xce\xb0\xea\xfd"
- "\x7e\x58\xf1\x52\x11\x2b\xe1\x7e\xd8\x55\xc5\xea\x53\x77\xb1\x0a"
- "\x70\xba\xff\x51\xcf\x58\xa9\xa3\x7b\xc7\x4a\x9d\xdf\x33\x56\x66"
- "\xbd\x88\xd5\x29\x0b\xac\xec\xe7\x31\xd7\xb1\xb2\x99\xbf\x6e\x28"
- "\xac\x86\xd5\x3a\xc3\xca\xe8\xbf\x5e\x89\xef\xbc\x3f\x01\x6b\x5f"
- "\xba\x20\x66\x5a\xf6\x69\x12\xb4\xe5\x34\x19\x8f\xef\x37\xef\x5e"
- "\x67\x90\x42\x1f\xbf\x3b\x72\xbc\x85\x74\xfd\x10\x38\x10\xdf\x9f"
- "\xe1\xf4\xe4\xe2\x40\x9f\xc6\x58\x3d\xa7\x13\xb7\x02\x46\x0d\x6d"
- "\x35\x30\x26\xfd\xa3\x1a\xda\xfe\x4a\x3a\x57\xc6\x90\xa3\x27\xcf"
- "\x01\x2e\xb4\xab\xb1\xb5\x86\x94\xc1\x75\xed\xea\xbf\x12\xf3\x0f"
- "\xc1\x03\xe7\x6a\x88\xf4\x82\xfc\x17\x99\xb8\x76\x1e\xa5\x21\x8a"
- "\x19\xad\xd4\xd0\xd0\x7a\x84\xec\x98\x4f\x82\x0e\x69\x08\xc1\xb1"
- "\xe6\xd6\xca\x09\xb8\x56\xfe\xc0\x0a\x9f\x57\x2c\xd6\xca\xdc\xfb"
- "\xb2\x49\x80\xcd\x4f\x36\xd8\xc0\x5a\x1c\xc6\xba\xff\x13\x6d\x80"
- "\x4d\x9b\x80\xcd\x79\x92\xba\x1c\xb1\xd1\x89\x6b\x65\x1e\x9b\x62"
- "\xd4\x79\x49\x16\x6b\xe5\x0b\x16\xd8\xf0\xef\xaa\x5a\x61\x23\xf8"
- "\x32\xd6\x04\xe3\x3d\x72\xbb\xb5\xb2\x67\xbe\x8c\x40\xa7\xef\x8a"
- "\x70\x72\x04\x32\xf2\x04\xc8\x51\x4a\x32\x27\x47\x6c\xfc\x87\x2d"
- "\x02\x7e\xaf\x26\x7e\xba\xfe\x51\x5b\x00\x83\x4e\x90\x35\x9c\x8b"
- "\xd2\xa0\x9f\x88\x25\xe2\xf6\x44\x65\x57\xd7\x73\x6d\x44\x0a\x36"
- "\xb8\x3f\x62\x67\xfa\x21\xd0\x27\x1b\xe6\xaa\xc6\x39\x5f\x02\x3e"
- "\x17\x49\xa3\x9e\xc7\x66\xdd\x97\xe4\x82\xfc\xd6\xe1\x74\x71\xf0"
- "\xc0\x91\xc0\xa7\x30\xf7\x28\xe6\xe2\xbb\x2f\xa0\xf3\x76\xc4\x93"
- "\xf0\x19\x49\xd4\xc0\x3d\xcb\x03\x32\x86\xf3\x19\xea\xc3\x86\xa4"
- "\x03\xc4\x54\xb0\xa8\xad\x2b\x60\xbd\xf2\x50\x32\x21\xa8\x13\x11"
- "\x8b\x7e\xab\x44\xec\xf0\xbd\x3d\x4b\x5f\x87\x9d\x2e\x4c\x38\xe2"
- "\x58\xbe\xe6\xe8\xdc\xf2\x77\x14\xf3\xf2\x55\xec\xa9\xbf\x43\xf0"
- "\x47\x01\x86\xf8\xae\x5e\xda\x67\x44\xfa\x8a\xdb\x18\xde\x16\xe4"
- "\x3e\x86\xaa\xe8\xde\x31\x6c\x17\x30\xcc\xef\x1d\xc3\xdb\x74\xf6"
- "\x18\xaa\x92\x44\x0c\xcd\x11\x16\x18\x66\x32\x0c\x55\xc9\x22\x86"
- "\x2a\x4d\xef\x18\xda\xac\xa5\x6f\x28\x0c\x7f\xd9\xb3\xff\xc3\x31"
- "\x86\x2e\xc8\xe1\x8f\x3c\x86\x6a\x17\xe4\x70\x78\x85\x03\x0c\x2d"
- "\xe4\xd0\x5c\x24\x62\xa8\xe6\xe5\x50\x65\x21\x87\x2a\x17\xe4\xd0"
- "\x66\x6d\x7d\x43\x61\x78\x7b\x95\xfb\x18\xaa\x5d\x90\xc3\x6f\x04"
- "\x0c\x5d\x90\xc3\x3b\x54\xf6\x18\xaa\x2d\xe5\x50\x6f\x81\x21\x2f"
- "\x87\x6a\x0b\x39\x54\xbb\x20\x87\x36\xb6\xca\x0d\x85\xe1\x9d\x49"
- "\x1e\x60\xe8\x82\x1c\x7e\xc4\x63\x98\xe0\x82\x1c\x2a\x43\x1c\x60"
- "\x68\x21\x87\x34\x4a\xc4\x30\x81\x97\x43\xb5\x85\x1c\xaa\x5d\x90"
- "\x43\x9b\xb5\xf7\x0d\x85\xe1\x5d\x3d\xfb\xff\x1d\x62\x98\xe0\x82"
- "\x1c\xa6\x09\x18\xba\x20\x87\x77\xe9\xed\x31\x4c\xb0\x90\x43\x5a"
- "\x6e\x81\x21\x2f\x87\x09\x16\x72\x98\xe0\x82\x1c\xda\xac\xc5\x6f"
- "\x28\x0c\xef\x36\xb8\x82\x21\xd8\xd9\xf6\x76\x69\x9b\x88\xa1\x25"
- "\x7e\xb6\xb6\xe8\x2c\xb0\x51\x11\xbb\x39\x46\x22\xb5\xc7\xef\x57"
- "\xd5\x88\x5f\x08\xde\x8f\xbb\x2c\xda\xa4\x1c\x76\xfc\xfd\x1c\xc4"
- "\xec\x50\x1c\x21\x68\x9f\x0a\xf6\x28\xde\x53\xed\xb6\x47\x17\xfe"
- "\xff\x6a\x8f\x06\xed\x71\x1f\x3b\x7e\x1e\x74\x8a\x9d\xf5\xdc\x37"
- "\x0b\xe6\x44\xe7\xd8\x8d\x48\xb4\xc7\x4e\x9d\x24\x62\xc7\xe6\x3d"
- "\x86\x9d\x59\x2f\xcc\x7f\x0c\x3b\x7e\xfe\xeb\x11\xbb\x1b\x79\xfe"
- "\xfb\xb5\xd3\xf9\x2f\x57\x6a\xae\x86\xa3\x06\x0e\x2d\x1c\x75\x26"
- "\x29\x99\x5a\x22\x35\x37\x11\x16\xd7\x1a\xf9\xd9\xf6\xfa\x4d\xf4"
- "\x85\xc7\xe4\x48\x43\x37\xca\xfd\x91\x4e\x28\xc3\x34\x90\x10\x48"
- "\xd7\xfa\x49\x62\x71\x3f\x12\xa4\xed\x2f\x94\xe5\xb7\x91\x44\x40"
- "\x9f\x19\x9d\x94\xa4\x33\xba\x88\x9b\x90\x8e\x66\x9f\x4d\x81\x34"
- "\x1f\xbe\x4c\x6e\xff\x43\x93\x54\x8a\x65\xd9\xd6\x3d\x80\xa7\x51"
- "\x9a\x32\x88\xd2\xb2\x6e\x28\x0b\xeb\x14\xe8\x06\x22\x9d\xe9\xa6"
- "\x3b\x23\x4d\x12\x79\x90\x25\x1d\x9d\x4c\x2c\xe9\x6e\xe6\xcb\x0b"
- "\xb6\xea\xc7\xdd\x84\xf8\x49\x94\xac\x2f\x1a\xa9\xd0\x17\x5f\xae"
- "\xcc\xc1\xcd\xc7\xa1\xcc\x10\xab\x32\x6f\x22\x64\x10\xd0\x63\xb9"
- "\x83\x54\x5c\xbb\x91\x7e\x10\x1d\x28\x6d\xe5\xca\x97\xc8\x43\xcd"
- "\x52\x12\xca\xfa\x45\xe4\x25\xdd\x6d\x56\x92\x5c\xeb\x3a\x06\x0b"
- "\xe3\x65\x49\x87\x34\x54\xda\x4d\xe3\xc7\xb5\x63\xa0\x44\x0f\xed"
- "\x08\xb7\x6c\x07\xa3\x23\xa3\x79\x3a\x05\xf4\x6b\x7c\x37\x96\xf9"
- "\xa3\xea\x04\xba\x34\x13\xb9\x15\xb0\xd0\x36\xaa\x08\xe1\xc7\x61"
- "\x08\xcd\xfe\x4e\xc1\x8f\x45\x84\x65\x99\x83\x24\x12\x5d\x09\x3f"
- "\x5e\xe6\xec\xb3\xb5\x40\x3b\xd4\xbc\x51\x1e\xd9\x5d\x6e\x06\xc6"
- "\x94\xe2\xc7\x21\xc3\x78\x0b\x57\x2e\xac\x7a\x4c\x52\x89\x92\x1f"
- "\x87\x5b\x90\x16\xf2\x44\xb1\x7e\x29\xba\x71\x35\x49\xe5\x78\x4d"
- "\x6b\x41\xeb\xcf\xc6\xb8\x4d\x07\x7d\x9b\x61\x4f\xef\x63\x4b\x1f"
- "\xc0\xe8\x5b\x0c\x40\x1f\x6d\x4f\xaf\xb0\xa5\x1f\xc6\xe8\xcf\xb5"
- "\x01\xfd\x6c\x7b\x7a\xe3\x50\x1b\xfa\x5f\x30\xfa\x56\x1c\xeb\x18"
- "\x7b\x7a\xa5\x2d\x7d\x20\xa3\xbf\x82\x3c\x32\xc7\x9e\x3e\xc2\x96"
- "\xfe\x56\x46\x7f\xa1\x15\xe8\x63\xed\xe9\xd3\x6d\xe9\x6f\x63\xf4"
- "\xfa\x16\xa0\x8f\xb3\xa5\x2f\xe3\x68\xc9\xdd\x3c\xed\x2f\x19\xed"
- "\xc5\x66\xa0\x55\x39\xe8\xab\x8c\x2f\x3b\x94\xa7\x1f\xce\xe8\xbf"
- "\x53\x01\x7d\xa2\x03\xac\x6c\xe9\x6f\xe7\xe8\x87\xde\xe4\x03\xf4"
- "\x49\x0e\xb0\xb2\xa5\xbf\x83\x95\xdf\x19\x0d\xf4\xc9\x0e\xb0\xb2"
- "\xa5\xbf\x93\xd1\x1b\x51\x86\x35\x0e\xc6\xde\x9a\x7e\xb0\x39\x1c"
- "\xe8\x52\x4a\x32\x04\xf9\xb1\x1a\x77\xdb\xb2\xef\x62\x6d\x27\x21"
- "\x90\x27\xdd\xc1\xb8\xdb\xd2\xdf\xcd\xe8\xa5\x4a\xa0\xdf\x64\x4f"
- "\x4f\x24\x8c\x9e\x8c\xe1\xe9\x7f\xc5\xe8\xe5\xfe\x40\x9f\xe9\x60"
- "\xec\xf1\xba\x96\x97\xd3\x20\xd6\x4f\x43\x1d\xd0\x66\x39\x18\x77"
- "\x4b\xda\x11\xac\xdc\x5b\xf6\x00\x6d\xae\x83\x31\xb7\xa4\xfd\x35"
- "\xa3\x1d\x90\x02\xb4\xf9\x0e\xc6\xdb\x92\xf6\x37\x8c\xf6\xe6\x50"
- "\xa0\x2d\x72\xd0\xde\xbb\x2d\x68\x83\x19\xad\x2f\xf2\x55\xb1\x03"
- "\x5c\x2c\x69\xef\x61\xb4\x01\xb1\x40\x5b\xee\x00\x17\x4b\xda\x7b"
- "\x19\xed\xe0\x22\xa0\xad\x70\x80\x89\x25\xed\xff\xd0\xa1\x8a\x19"
- "\xbc\x6e\xad\xb4\xa5\x05\x1e\xd0\x82\x1e\xaa\x03\x5d\x18\x42\xf3"
- "\x86\xa2\xde\x44\xbd\xc6\xad\xe3\x05\x1a\x2a\x35\xde\x6f\x31\x0f"
- "\xdc\x47\xf3\xfa\xb7\xf1\xfa\xaf\xda\xb6\x3c\x2a\x95\x5b\xd2\x8e"
- "\xa4\x79\xbf\x8a\xe0\x69\xf7\xd8\xd3\xfa\x58\xd2\x8e\xa2\x79\x81"
- "\x95\x3c\x6d\x8d\x3d\xad\xa2\x9b\x96\xe6\xdd\x96\x08\x34\xfb\x4a"
- "\x79\xbd\x6a\xd1\xce\x31\x16\xe5\x8d\xa6\x79\xc3\x43\xf9\xf2\xb4"
- "\xf6\xe5\x29\x2d\x69\xc7\xd0\xbc\x20\x23\x4f\x5b\x6b\x4f\x1b\x61"
- "\x49\x7b\x3f\xcd\xbb\x5d\xe8\x7f\x9d\x3d\x6d\xba\x25\x6d\x18\xcd"
- "\xbb\xb3\x86\xa7\xad\xb7\xa5\x2d\x65\x73\x90\x94\xc7\xe9\x01\x9a"
- "\x77\x57\x0a\x4f\xdb\x64\x35\xc7\x4a\x25\x9c\x8c\x95\x32\xba\x07"
- "\xe9\xd0\x5f\xf8\xf2\x78\x1e\xb7\x9a\x5b\x33\x24\x43\x71\x4e\x29"
- "\x41\x3c\x5f\xf8\x6d\x16\xd0\x8e\xe5\xcb\x3b\x61\x3b\xf7\xf1\xed"
- "\x0b\x87\x6b\x27\x85\xf9\x09\xe6\x1d\x9d\x23\xbb\x27\xe9\x5e\x72"
- "\xf3\x39\xf9\x28\x03\x9b\x1b\xf9\xbd\xc1\xe4\xa3\xb9\xd8\x48\xe6"
- "\x8a\xa7\xcb\x67\xb5\x51\xa3\x65\x5a\x8e\x94\x36\x8d\x6a\x23\x72"
- "\x8c\xd7\x47\x03\x36\xc6\xe8\x20\x5d\x3f\x22\x26\xa9\x3d\x2f\x54"
- "\xae\x93\x18\x9b\x30\x7e\x13\xfc\x56\xe8\xc8\xeb\xdc\x3e\x2a\x39"
- "\x19\xb8\x37\x49\x84\xc4\x54\x38\x2a\x17\xf7\x32\x29\x83\xf3\x6c"
- "\x38\xb8\x7d\x43\x92\xc0\x06\x7e\x81\x44\x68\x57\x1b\xc9\x59\x0d"
- "\x91\x72\xfb\xe4\xc9\x43\xff\x40\x97\xa9\xc6\x43\x5b\x9a\xa0\xde"
- "\xb8\xd3\x70\xce\xb5\x05\xf7\x0d\xca\x1f\x55\xa5\x5d\xd1\x89\x34"
- "\xef\xe8\x03\xb6\x34\xd1\xe7\x7f\xff\x7d\x52\x2a\xb9\xf3\x9c\x3c"
- "\xb4\x5a\x88\x5f\xc5\xc5\xac\xfa\x51\xf5\x08\x17\xaf\x4a\x3e\x7a"
- "\xa6\x39\x60\x54\x95\x6d\xbc\x2a\x56\xcf\xe8\xf0\x4b\xa0\xaf\x68"
- "\x79\x61\x12\x17\x0f\x4b\x3e\x7a\x03\xd7\xbf\x0c\xda\x44\x83\x9e"
- "\xce\x34\x77\x6e\x4a\xc7\x7d\xed\xb4\xa9\xe7\xc8\x69\xfe\x1a\x96"
- "\xcf\x97\x3b\x00\xcb\xc3\x72\x85\x32\x31\x9f\xfe\xae\xc2\x24\x1c"
- "\x0f\x18\x9b\x4c\x97\xe3\x5f\xc9\x43\x0d\x5c\xfc\xab\xbc\xd1\x91"
- "\x3a\xc9\x74\x0d\x17\xff\x4a\xe8\x8f\xeb\x65\x54\x60\x19\x8e\x63"
- "\xfd\x12\x3f\x5a\x30\xaa\x0e\xca\xaf\x00\xfb\xb7\x9a\xe1\x33\xba"
- "\x5a\x27\x19\x9f\xc5\xff\xde\xa7\x93\x4c\xac\xe3\x7f\xd7\xe9\x24"
- "\xfa\x50\xfe\xf7\x71\x21\x06\x99\xe3\x98\x68\xa3\x8a\x01\x8f\x3d"
- "\xe6\x1d\x31\x3e\x68\xaf\x73\xed\x09\x18\x55\xac\xbc\x83\x48\xce"
- "\xca\xc7\xc4\x40\x9d\x7b\xd8\x58\x8d\x19\x0d\xdf\x7e\xfc\xb7\x9e"
- "\xff\xa6\x48\xc3\xf1\x9c\x7f\x46\x26\xcd\x4d\x60\xfb\xc8\xc8\xc7"
- "\x4c\xc7\x34\x0e\x5b\xc0\x9f\x0e\x49\x48\xe7\xca\x2d\xd8\xd2\x64"
- "\xd9\x06\x0c\x34\x16\x3a\x7a\xcc\xfd\x61\x0f\x3c\x38\x36\x7c\xdc"
- "\xbc\xf9\x0b\xe2\x16\xc6\x2f\x52\xa9\x13\x16\x27\x2e\x59\xba\x2c"
- "\x69\xf9\x8a\x95\xc9\xab\x56\xaf\xd1\xac\x5d\x87\x74\xdd\xed\xdd"
- "\x11\x29\x69\x93\x12\xc0\x73\x32\xd6\xf3\x01\x57\x37\xa4\x31\xec"
- "\xc7\x54\xc9\x95\x8e\xd7\x05\x8d\x81\x84\xe0\x1e\x21\xad\xf2\xfb"
- "\x07\xe0\x9e\x25\xc0\x87\x92\xc6\xe2\x69\x5a\xdc\xaf\xad\x59\x3e"
- "\xc6\xd8\xa0\x9f\xa6\xc5\xfd\x05\x0f\x06\xb6\x90\xa0\xbb\x89\xe4"
- "\x9c\x7c\x4c\x0b\x5e\x2f\xfb\x35\x21\xb5\x90\xd7\x51\x99\x77\x2b"
- "\x48\xe0\xcb\xc3\xa8\x3e\x7f\x18\x6d\xc5\xf2\xf3\x0b\x69\x8b\x7e"
- "\xbd\x8a\x64\xc3\x39\xf0\xa6\xe2\xac\xfc\xfe\x0f\x0e\x82\xf5\x6f"
- "\xce\x20\xc3\x4b\x0b\x69\xf3\xa6\x61\xb4\xf9\xf9\x42\xda\x5a\x36"
- "\x8c\xea\x82\xf2\x89\x6f\x7b\xde\xfd\xc0\x67\x63\x38\xcc\x72\xe0"
- "\xba\x79\xe8\x18\x55\x0e\x5c\x1b\x65\x24\xb2\x32\x38\x87\xb4\xb6"
- "\x83\x4a\xd6\xee\xb7\x2f\x1a\xfa\x41\x79\xb3\x69\x57\xa2\x24\x1b"
- "\xea\x61\x98\xdc\xff\x6d\x2d\x58\x12\x50\x9f\xbe\xd1\x70\x9a\xe8"
- "\xe4\xf7\xeb\x70\x3f\x25\xa8\xcf\xaf\xb1\xa8\x95\x60\x79\x6f\xad"
- "\x30\xf4\x5b\x79\x1b\x35\x02\xad\xd6\xbc\x3e\x51\x02\x34\xc5\x50"
- "\x76\x9b\x65\x7f\x82\xe3\x97\x24\x2b\x97\xae\x4a\x4c\xbc\x67\x20"
- "\x09\xe6\xbe\x89\xe5\x5e\x83\xc9\x50\x1e\x79\xb9\x90\xd6\x42\x3f"
- "\xb5\xd0\xdf\xba\x63\xb0\x02\x01\xfe\x20\xd0\xa7\xdc\xb3\xf2\xb0"
- "\x07\x20\x7d\x1f\xfc\xde\x07\x6d\xaf\xe3\xf6\x2e\x93\x4f\x9d\x47"
- "\xf3\xee\x6f\x85\x76\xe2\x9c\x85\x7b\xa5\x90\x4b\x6b\x66\x4b\xa0"
- "\xdf\xf9\x40\x57\xa7\xbc\x8d\x8c\x80\x7c\x1f\x40\x3b\x2a\xe0\x37"
- "\xd2\xab\x11\x47\xa0\xaf\x65\xfd\x9a\xca\xc5\x12\x84\xb1\xd2\x96"
- "\x0c\xa3\x59\xed\x79\x61\x45\x18\xc3\x95\xdb\x77\x06\xce\x61\x5c"
- "\xea\x80\x36\xf7\x52\xda\x6c\x09\xee\xcb\x59\x26\x96\xa9\xc2\x36"
- "\x61\x3b\x70\x3d\x7c\x14\x2c\x4a\x73\x57\x0c\xb9\xcf\x40\x24\x47"
- "\x9b\x09\x29\x2e\xa4\xe5\x70\x14\xc3\x51\x74\x04\xae\x1d\x86\xa3"
- "\x0e\xd2\xeb\xe1\xfb\x08\x7c\x1f\x6e\xe6\xee\xaf\x06\x62\xbb\x57"
- "\xa6\xd0\x96\x51\x45\xe4\x57\xdc\xbe\x9f\xa9\xe4\xe9\xd3\xf2\xc8"
- "\x1a\x6c\x3b\xc6\x6b\xa6\x43\x1f\x08\xb1\x8a\x2b\x2b\x7f\xb0\x9c"
- "\xc0\x75\xf8\xde\xc3\xbe\x2d\x8f\x07\x8d\x44\x3e\x76\x38\xfb\x3d"
- "\x36\x0e\xce\xb3\xf8\xdf\x1a\x38\x36\xf5\x7e\xd8\x96\xe7\xec\x18"
- "\xab\x77\x9d\xd6\x95\x63\x6a\x88\x6b\x74\xe3\x2a\x89\x7c\x3c\x81"
- "\x23\xdc\x3a\x7d\xbc\x82\xa5\x45\x9c\x64\xe7\x11\x2d\xec\x7b\x92"
- "\x3f\x1c\x30\x4e\x93\xa1\xfc\xc9\xd1\x2c\x6d\xf2\x1c\xf8\xae\x80"
- "\xa3\xda\xba\xfe\xa9\x90\x7f\x6a\x24\xe2\xd9\x05\xf3\x01\x62\xa9"
- "\x93\x87\x19\x11\xa3\x1c\xc6\x5b\x12\x7c\x86\x02\xd2\x0c\xc0\x5b"
- "\xc5\x22\xff\x3c\x78\xde\x9a\x7f\x1e\x3c\x61\xc3\x3f\xb9\xa8\x8f"
- "\x20\x5f\x64\x19\xe3\x97\x7d\x97\xd6\xc7\xc1\xf9\x83\x27\xa1\x9c"
- "\x7d\xca\xe7\xb0\x8c\xb1\xdc\xfa\x2b\xe7\x1c\xac\x85\x55\x44\x8e"
- "\xfa\xa5\x55\x3e\xf6\x3e\xe4\x59\xac\x9b\xaf\x97\xb5\x05\xda\x07"
- "\x69\xe5\xd8\xbe\x65\x50\x2e\x9c\x57\x00\x5d\x79\x23\xb9\x28\xb4"
- "\x8d\xcb\xb3\x25\x01\xf8\x91\x6f\x2f\x96\x89\xf9\xa8\xd8\x2f\x03"
- "\xe6\xe1\xeb\xfe\x16\xd2\x71\x8d\x4d\xd2\x7e\x22\xb2\x46\xa3\x8e"
- "\x20\x4f\xe2\x77\xa3\x31\x14\x64\x29\x8a\x98\x71\x2e\x0c\x24\xa1"
- "\x20\x6f\x03\x4e\xcb\xc7\xd6\x8e\x4c\x21\xa1\x58\x1e\xea\x70\x9d"
- "\x7c\x6c\x66\x19\xca\x22\x2b\xeb\x0b\xec\x07\x96\x7f\x04\x56\x35"
- "\xf8\x5d\x8a\xed\x81\xeb\x16\xf5\xe6\xe3\xda\x39\x67\x1d\xeb\x2b"
- "\xd4\x55\x01\xf9\xab\xb1\xef\x38\x9e\x70\xbd\xe6\xac\x3c\x5c\x89"
- "\xd7\x70\xcf\x16\xbe\x3f\x15\xf8\xbe\x07\x8e\x07\xd2\xe3\xfe\x97"
- "\x5c\x9c\x5a\x79\xd8\x54\x6e\xdc\x20\x3f\xe2\x41\xa1\x0e\x2c\x23"
- "\xcd\x48\x8d\x14\xf4\xd1\x6b\xeb\x0c\x60\x83\x8c\xdb\x6e\x8d\x4f"
- "\xb8\xc6\x12\x1f\xc8\x57\x0d\xf9\x6b\x71\x5e\x46\x7d\x02\x75\xfa"
- "\xa1\xcd\x01\x69\xb9\xe6\x3c\x28\x63\xb5\x81\xf3\x2d\x41\x39\x2f"
- "\x42\x5b\x72\xb1\x1c\x68\x4f\x2d\x5f\x56\x2d\xc6\xb0\xb4\xc4\x9a"
- "\x2f\xaf\x02\x31\xe7\xe4\x79\x1d\xd7\x27\xd0\x5d\xe3\x9e\x29\x65"
- "\xd7\x6a\x80\xa6\x86\x76\x45\x11\xba\x3e\x86\xed\xd3\xc6\xae\xed"
- "\x49\xeb\xe0\xf0\xad\x65\x7a\x6d\xdc\xda\x95\x1b\x68\x8b\xd8\xee"
- "\x71\xa1\x42\xac\x76\xbe\xdd\x7b\xb0\x3e\xba\x66\x0e\x37\x8f\x62"
- "\x1d\x98\x9f\x2f\xcf\x17\xcb\x13\xc6\x6a\x24\xb4\x83\x8d\x57\x78"
- "\x04\xa4\x57\x20\x2f\x72\xe3\x06\x7a\xf4\x52\x1a\xf2\xe2\xb8\x30"
- "\xc8\xbf\x2f\x1b\xcf\xd7\xe0\x79\x78\x1d\xa7\x63\xbb\xaf\x87\xa7"
- "\xe0\x75\xf4\x4d\xe4\x2c\x06\x5e\x32\x13\xf2\x2b\x7f\x12\xda\x96"
- "\xc1\xf5\xad\xaa\x6d\x7d\xa4\xe4\xa0\x91\x10\x6c\x27\x8c\x51\x0d"
- "\xb4\xf5\x24\xe8\x7e\x6e\x6f\x2e\xd0\xd7\x7b\xe8\x6b\x31\x04\xdb"
- "\x0c\xfa\x8c\x6f\xdf\x43\x33\x79\xec\xf7\x60\x1f\x71\x3c\x47\x32"
- "\xdd\x07\xd7\x1e\xfe\x09\xdb\x2e\xf6\xfb\xa1\x60\xcb\x31\xe6\xfa"
- "\x0d\x38\x20\x5e\x88\x8b\x58\xe6\x38\xe4\xfd\x5c\x28\x8b\xed\x99"
- "\xc8\xf3\x06\x8e\x75\xee\x30\x5a\x8f\xf4\x22\xed\xc3\xdc\xfe\xd8"
- "\xa9\x50\xf7\xa8\x24\x6e\x6f\x38\x09\xc6\xdb\x87\x72\xab\x70\x6f"
- "\x53\x28\xa3\x06\xc7\x14\xe8\xde\x43\x7e\x84\xf3\x7a\xbe\xdd\x7b"
- "\x60\x3e\x0f\x81\x63\xbc\x28\xff\x0f\xef\xb2\xe6\xaf\x87\x6c\xe5"
- "\x1f\xf1\xce\x35\xa7\x45\x11\x7e\x5f\x67\xe5\x05\xf9\xc3\x93\xf8"
- "\xb9\x83\xc7\xfa\xe1\x82\x83\x20\x2f\x62\x19\x0f\x0f\xb7\xc1\xba"
- "\x86\xe3\xc7\x35\x33\x24\xd8\x67\xc8\x5b\xc3\xca\x79\x88\xeb\x33"
- "\xc7\x4f\x19\x1c\x0f\xd4\xd3\x35\xd0\xcf\x6e\x3e\x78\x48\xc3\xe3"
- "\x5c\x6f\x33\x26\x82\xee\xaa\xc5\xbd\xbf\x50\x27\x81\x0d\xfc\x48"
- "\x7b\x97\xa8\x97\x10\x7b\x33\x87\xfd\xc3\xca\x32\x36\xdf\xf2\x7a"
- "\xeb\x21\x76\x7d\x98\x15\x0f\x63\x9f\x7e\xc7\xf1\x2f\xb6\x25\x6d"
- "\x0e\xb6\xa5\x86\x6b\x47\x9a\x92\xc0\x35\xae\x7e\x28\x2b\x86\x97"
- "\x57\xa1\xac\x10\x2c\xeb\x79\xd0\x55\xd8\x26\xa8\xbb\x86\xd3\x7f"
- "\x8f\x62\xdb\xc6\xdf\xc7\xb7\xbd\xce\x90\x81\x79\xc7\x2a\x3b\xa4"
- "\x5c\xde\x3a\xa0\xcb\x37\xb0\xbd\x13\x06\x42\xfe\x4a\xe5\x7c\xa4"
- "\x8f\xc8\x42\x1d\xad\x7c\x96\xfb\xbd\x4a\xf9\x14\xf0\xea\x39\x22"
- "\x87\xf2\x7c\x90\x47\x05\xbe\x68\x95\x47\x2c\x04\x1b\x03\xf1\xaa"
- "\x02\x1b\xa9\x12\xc7\x1b\x79\x19\x6c\xa4\xb0\xf6\xbc\xf1\xf9\x02"
- "\xdf\x42\x3d\xc5\x38\xf6\x0c\x9f\xf1\x5f\x00\x1f\xd7\x88\xbc\x35"
- "\xfe\x0b\x7e\x1c\x2b\x61\x1c\x7d\xa0\xbe\x67\xf8\x7e\x55\x02\x3d"
- "\xd8\x62\x11\xd3\xf9\xb6\x17\xf1\xf4\x97\x05\x1c\x78\x59\xad\xcf"
- "\x46\xfd\xcb\x61\x30\x21\x8b\xcf\x5b\xc1\xea\x9a\xb0\x55\xa0\x45"
- "\x1b\x91\xdb\x07\x0d\xd2\x50\x0f\x8e\x02\xec\x39\xdd\x87\xfb\xfe"
- "\xf2\x69\x28\x3b\xac\x8e\x08\x6e\x7f\xec\xe7\xc1\xee\x11\xf9\x68"
- "\x42\x9c\x8d\x7e\x42\x5d\x9c\xdb\xb0\x89\xed\x33\x81\xbc\x84\x3a"
- "\x15\xd7\x2b\x50\xde\x78\x5e\x7e\xf8\x36\x4f\xf8\xc4\x9a\x57\x22"
- "\xee\x02\x5e\xb9\xcf\xa2\x6c\xad\xa3\x79\xae\x8c\xe9\xc0\x62\x96"
- "\xe7\x91\x21\x7c\xdf\xaa\x58\xdf\xf8\x73\x1c\xb7\x54\x1c\xb7\x89"
- "\x9f\x59\x8c\x23\x8c\xdb\xc4\x49\x3c\x7d\x0d\xea\x72\x51\x5e\x1f"
- "\xd9\x20\xc8\xb2\xbd\xbe\x98\x38\x1a\xe5\x41\x6c\xd7\x23\x31\x36"
- "\xfa\xa2\xc6\xb1\xbe\x78\x24\x98\xef\x6f\xb9\x8d\x6c\x54\xb0\xb6"
- "\xf3\x73\x0b\xe0\xd0\xd0\xc6\xef\xf7\x01\x69\xa8\x3f\xb1\x6e\xcb"
- "\x39\xa8\x94\x8d\x2b\x2f\xcb\x13\x6f\xb7\xc7\xe1\x91\x56\x4b\x79"
- "\x46\xac\x51\x27\x60\x19\x88\x29\x67\x57\x42\x1a\xc3\xf5\x91\x5a"
- "\xd4\x0d\x96\x3a\x1a\x68\xf3\xcd\x14\xe5\xe5\x11\xbd\xb5\x2c\x3e"
- "\x32\x87\x97\x45\xa1\xee\xfd\x80\x51\xa8\x58\xef\xc4\x38\x9b\x7a"
- "\x11\x9b\x5a\x2e\x9e\x33\xd7\xc7\x89\xbb\x85\x39\x0d\xe9\x21\xaf"
- "\x06\xf2\x14\xd9\xcc\x8f\xb9\xd8\x3e\xa8\x4b\xc1\xe9\xac\x42\x4e"
- "\x57\x68\xda\xb9\xf6\x4c\x2c\x2e\xe3\xe7\x09\x48\x0b\xe5\xd3\x54"
- "\xfc\x5c\x22\xf0\xcd\x20\x9b\x36\x19\x1c\xdb\x47\x8f\x28\x04\xfb"
- "\x88\x2b\x8b\xd3\x45\x13\x8d\x7c\xff\x30\xed\x3e\x96\x36\xa1\x16"
- "\xd3\xb2\xd9\x38\xe4\x53\x6e\xbe\x9a\xa0\xe2\xe7\x2b\x94\x2f\xa9"
- "\x4e\x3e\xfe\x04\xca\x18\x9e\xeb\xe4\x11\xd1\x58\x7e\x63\x7a\x27"
- "\xae\x21\x8a\xe0\x5a\x32\xea\x03\xd4\x17\xca\x78\xa6\x37\x94\x4f"
- "\x70\xdf\x25\xa8\x77\xd0\x0e\xc1\xeb\x40\x17\x87\xba\x08\xd2\xdf"
- "\xc1\xfd\x3b\xe9\x0f\x3e\x50\x6e\x44\x3e\x9f\xf7\x10\x67\x2b\xfc"
- "\x10\x25\x13\xd2\x84\x7c\x20\xeb\xab\x30\x1f\xe6\x17\xf4\x17\xea"
- "\x2e\x23\xea\x26\xae\xbe\x49\x03\x78\x1e\xe7\xd6\x0d\x82\x5d\xd4"
- "\x25\xb5\xa0\xc5\x3d\x10\x38\x9d\x36\x69\x36\xd3\x67\x93\xa6\x62"
- "\x5e\x0e\x3f\xd0\x95\xa9\x1d\xf4\xdb\xb2\x15\x44\x5e\x7a\x91\xb3"
- "\xb1\x22\x59\x3b\x27\x95\xb3\x7e\x4c\x52\x73\xfd\x60\x3a\x35\x97"
- "\xb5\x25\x2c\xb2\xb4\x93\xbb\xb6\x19\xfb\x82\xd7\x72\x2c\xae\xe1"
- "\x3e\x24\x70\x6d\x27\xd7\x2e\x9b\x7c\xe6\x2e\x95\x1d\x3d\xee\xbd"
- "\x0b\x3a\xd4\xa7\xb4\x50\xd0\xbd\x93\x95\x7c\x3b\x4f\x09\x7a\x17"
- "\xc6\x25\x11\x75\x2f\x77\x2d\x9e\xa7\x79\x82\xff\xe6\xf4\xfb\xe4"
- "\x41\x6c\x5c\x03\xa5\xfc\x78\x27\xb3\x7e\x4c\xbe\x8b\x5b\x67\xff"
- "\x10\x03\x63\x3b\x59\x2e\x8c\xad\xe5\x6f\x94\x1f\xa8\x1f\xf9\x85"
- "\xe9\x95\x14\x6e\x0d\x5b\x8c\x34\xd8\x26\x36\x47\x44\x18\x6d\x6d"
- "\xea\xb3\xf2\xc8\xed\x38\x2f\x31\x5b\x35\x72\x2d\xef\x23\x22\xda"
- "\x15\xaf\xc2\xbc\x30\xb9\x56\xd0\x31\xb4\x3d\x8a\x60\x1c\x74\x68"
- "\xcb\x21\x4c\xc3\xb8\xf9\x96\x34\xa8\x9f\xde\xee\xd4\xf1\x65\x4e"
- "\x2e\x17\xf4\x06\xea\x92\x86\xb6\xd3\xbc\x4d\x37\x25\xba\x94\xd7"
- "\x25\x17\xe4\x53\x9e\xb4\xb6\xc3\xa6\x3c\x69\xad\x33\x22\x17\xda"
- "\xea\x0c\xb0\x9b\x37\xb5\xe7\x4d\x09\xb2\xb2\x03\x20\xad\x67\xdd"
- "\x31\xd9\x80\x32\x8a\xfb\x20\x71\xfa\x89\xf3\x7b\x4d\xd9\x2b\xb4"
- "\x19\xf5\xe6\xa5\xf5\x82\xff\x22\xf2\x77\x68\xab\xd9\xd4\x97\x6f"
- "\xa5\x3b\xb1\x3e\xa1\x3c\x39\xc1\xbd\x74\x60\x1c\xd0\xe7\x32\x25"
- "\x8e\xd7\xf3\xe5\x56\xba\x92\x9f\xc3\x50\x4f\x5a\xcf\x55\x61\x53"
- "\xad\xe7\xaa\xc8\x49\xf6\x3a\x32\x52\xe1\xfa\x5c\x35\xa5\x05\xf5"
- "\x96\xa0\x23\xad\x75\x41\xa4\x7f\xa9\x95\x2d\x3b\xa5\x58\xb0\x65"
- "\x45\x3d\x3a\x25\x04\x75\x14\xd4\x5f\xc3\xd7\x9d\xa5\x93\x8f\xc9"
- "\x15\xea\x06\x3e\xaa\x6d\x50\x02\x6f\xe6\xdd\x6f\x80\xdf\x49\xbc"
- "\x0d\xc8\xc9\x66\x27\xee\x27\x22\x9f\x54\x03\xfc\x37\x10\xf9\x4c"
- "\xbb\xf4\x22\x69\x16\xe7\x8a\xda\x4b\xcb\x84\xf1\x9d\x7a\xbb\xa5"
- "\x5d\x58\x52\x48\x33\xa1\x9e\x36\xcb\x3e\x6e\x85\xb4\x1c\xde\x87"
- "\xc0\x8d\x2d\x57\x56\x64\x5d\x59\xa1\x75\xdf\x58\x3f\x22\x8d\xd8"
- "\x0f\x5c\x13\x41\xfd\xfb\xd0\xee\xc1\xbd\xd0\x40\x6e\x22\xca\xba"
- "\x79\xfe\xc1\xfc\x8e\x0c\x4b\xfb\x2a\xac\x18\x75\x25\xbf\xf6\xac"
- "\x03\x7b\x27\xd7\xd2\x17\x33\x73\x4a\xb4\x32\x69\x85\x7a\x69\x72"
- "\xfc\x18\xa5\x7a\xa9\x3a\x59\x3d\x2f\x51\xbd\x6e\x5e\xb2\x7a\xd9"
- "\xd2\x90\x25\xf3\x16\xa9\x17\x28\xd7\xcc\x5b\xa9\x0c\xd5\x8c\xd0"
- "\x0c\x24\x22\xe9\x43\xca\x79\x2b\x57\xae\x5a\xb2\x30\x4e\xb9\x54"
- "\xbd\xe0\xbe\x15\x0b\x57\x2e\x4c\x56\xce\x5b\xb1\x6c\xd5\xd2\x38"
- "\xe5\x88\xb8\x91\x23\x42\x1f\x8c\x1b\x68\xe9\x43\xbb\x5b\x41\x5a"
- "\xcd\x57\x5a\x5a\x72\xae\x10\x1f\x3f\x49\xd2\x0a\x3f\x8d\x7a\x29"
- "\xf3\xdb\x3d\xba\x70\x54\x3e\xe1\xf6\x57\xc7\xbd\x6b\x69\xde\x54"
- "\x0d\x7c\xcb\x91\x0e\xfa\xa9\x2c\xc3\x3d\xd6\x87\xd1\xe1\xed\x79"
- "\x8f\x06\xeb\xe4\x8f\x29\xb8\x7d\x69\x21\x1d\xfa\x36\x9c\x5e\xa9"
- "\x6b\x01\x9b\x2d\x09\x9f\xf9\x2e\xbb\x42\xfc\x73\x57\x13\x39\x1c"
- "\xbe\x70\x28\x70\xff\x75\xc8\x33\x47\x27\x9f\xc6\xfb\x45\x1f\x35"
- "\xea\x87\x2c\x3a\x49\x73\x17\x9d\x64\xb8\x3c\xda\x21\xf8\xa4\x67"
- "\x6d\x26\xb3\x90\x3f\x4f\xcb\x1f\xe5\x7c\xd9\xcf\x03\x2f\xa3\x4f"
- "\xf6\xd2\x87\x93\x23\xc0\x1e\x3c\xa9\xbd\x8d\xbb\xd6\xd1\x26\x25"
- "\xbe\xd0\x2e\xf9\xc1\x94\x50\xf2\x32\xd4\xb5\x32\x90\x52\xa8\x43"
- "\x2b\xf8\xd3\xa0\x0f\x0a\xe8\xcb\x09\xbe\x1f\xaf\x71\xfd\x28\xa4"
- "\x41\xf9\x43\xa1\x7d\x79\x5c\x7b\x5a\x85\x3e\x40\xbb\x4f\x40\x9b"
- "\xa2\xa1\x9d\x0a\x6c\x97\x23\x5f\x1f\xfa\xbb\xce\xca\xa7\x3d\x60"
- "\x5e\x0d\xe3\x76\x07\xdb\x4b\x29\xa7\x94\xc9\x1f\xf4\x2b\xb1\x0c"
- "\x7e\x67\x5f\x24\xbe\x5b\x71\xdf\xee\x8c\x3b\xe9\xb1\x36\x23\x69"
- "\x54\x9d\x20\x7e\x6b\xa9\x9e\xbe\xdf\xd2\xc2\xfa\x34\x2d\x16\x75"
- "\xc3\xbb\x09\x27\xe4\xd8\x27\x98\x2b\x7c\xcb\x2e\x3a\xf5\x2d\xca"
- "\x5f\x1e\x46\xdb\xe8\x0e\x4b\x9b\x6b\xda\x61\x1c\x13\xb4\xb7\x2e"
- "\xc1\x3c\xd5\x9e\x37\xad\x1a\xea\xf6\xe1\x6d\xe3\x36\xda\x35\xc7"
- "\xc2\x96\x9a\x86\x7c\xd6\xe6\xa4\x6c\x1f\xa1\x6c\xdc\x0f\x1c\xf3"
- "\x30\xfc\xa3\x1e\x80\x3c\x7a\xb1\xfc\x28\x85\x6d\xf9\x58\x26\xfc"
- "\xd6\x0b\xf5\xb0\x75\xf8\x34\xb4\x09\xf4\xc0\xcb\x7a\x27\xf5\x05"
- "\xe5\x15\xd2\xe3\x8d\x90\x9e\xd3\x41\xe4\x40\x7b\xbc\xac\x90\x2b"
- "\x3f\x49\x27\x9f\x7a\x1c\xcb\x7f\x7e\x18\x21\x9b\x80\xe6\x52\xde"
- "\x34\x1f\xf4\xef\xc2\x35\x90\xf9\x30\x62\xeb\xb7\xe6\xf9\xf9\x21"
- "\x1b\x7e\x8e\xc8\x43\x9b\x30\x1f\xca\x07\x1e\xca\xb9\x4c\x70\xce"
- "\xa9\x1f\x99\x4f\x82\xb1\x1e\xf8\xdd\x84\xfe\x10\x28\x53\x27\xd4"
- "\x47\x81\xff\xb3\xcd\xcc\x07\xc3\xf3\x56\x48\xa3\xa6\x05\xf7\x5a"
- "\xa0\x07\x41\xbf\x63\x1b\x91\xc7\xda\xf3\xa6\xfb\x0b\x3c\x05\xbc"
- "\x7e\x9c\xe3\x2b\x7f\x12\x4c\xf3\xa2\x8a\x70\x6f\x70\xe4\xab\x52"
- "\xe0\x27\xe4\x2b\xa0\x8d\x10\x78\x0a\x78\xad\x09\xe9\xa0\x0d\x03"
- "\xab\xd7\x45\xc8\x51\x47\x36\xcb\xa7\xbf\x87\x3c\x46\xff\xf4\xf8"
- "\x09\xfa\x8b\xdf\x9f\x60\x38\x4d\x7f\xaf\xd1\xc0\x30\x10\xc7\x7d"
- "\x7a\xa6\xc5\xb8\x37\x01\x1f\x0f\xc4\x71\x66\xbe\xea\xe9\xef\x41"
- "\xdb\x9a\x38\x5b\x7c\x03\x60\xc0\xcd\x55\xd3\x93\x31\x3f\x3f\x86"
- "\xf5\xe2\x18\x4e\x6f\x72\x34\x86\x36\x63\xc7\xed\x45\x4d\xf3\xa6"
- "\x9f\x44\x59\x69\xcf\x7b\x4c\x2e\xec\x43\xed\x08\x4b\xa8\x43\x2e"
- "\xcf\x27\x3e\x58\x47\xad\x3f\x47\x1f\x26\xd4\x91\x03\x63\xad\x4f"
- "\x53\xf5\xc8\xcf\xb5\x30\x33\xa3\x4f\x1c\xf3\x07\xf9\xe3\xf8\x3e"
- "\x96\x2c\xe6\xa7\x6d\xb6\xf9\x47\x2c\xb0\x6a\x2b\x77\xd0\xbc\xc7"
- "\x32\x5f\xe6\xf7\xe9\x86\xfc\x7b\x7a\x6a\x6f\x90\x92\xcd\x93\xda"
- "\xbb\x91\xbf\x1f\x3b\xdf\x58\x44\x08\xa6\xf1\xe7\x27\x2f\xc1\xdc"
- "\x63\xeb\xdf\x77\x7e\xbf\xe1\xf1\xfb\xac\xef\x37\x3c\x3e\xdc\xd9"
- "\xfd\x06\xeb\x7a\x1f\x57\x63\xbd\xe6\xb2\xd9\x12\xb1\xee\xc7\x67"
- "\x9b\x1d\xd4\x2d\xe4\x1f\x59\x6e\xb9\x9e\x79\x7c\x2f\xb6\xa1\x01"
- "\xe6\x29\xfa\xcb\xd9\x12\x0a\xe5\xd4\x72\x73\xf8\xe3\x35\xcc\x7e"
- "\x41\xbb\xe8\xf1\x22\xa4\xb1\xed\x47\xf7\xc7\xc7\x1f\xf7\xe8\x22"
- "\x1d\xdc\x49\xbf\x47\x89\x02\xbf\x1f\xd4\x0b\x97\xa5\x56\xc4\x84"
- "\x3a\x38\xf1\x25\x64\x2c\x47\x4f\xe1\xc3\x92\xf8\x73\x56\x8a\xbc"
- "\x9b\xbe\xfb\xba\x17\x9f\x01\xac\xbd\x5c\x79\x06\x22\x61\xbf\xc2"
- "\x15\x16\x14\x91\x3d\xe4\xa6\x44\xc8\xe2\xe8\xb3\x1c\x8e\xf4\xd9"
- "\xfd\xa0\xbc\x50\x8e\x98\x52\x23\x5f\xbe\x70\x4e\x2d\xcf\x31\xc5"
- "\xfa\x1c\x3e\xb2\x39\x16\x15\xdc\x29\x8b\xe3\x1e\xdf\x7a\x38\xae"
- "\x3b\x49\x5a\x6e\xd9\x56\x18\xee\xf4\x7e\xdc\x0f\x3f\xfc\x63\x80"
- "\xf2\x82\xe1\x7a\x78\x74\x37\xc1\x2d\x6d\x1b\x2d\xc8\x8f\xb2\xe6"
- "\x8f\x2b\xef\xa1\x8f\xee\x7e\xee\xb0\xf8\x7d\x27\xfb\x1a\x17\x7b"
- "\x15\xcb\xef\xf9\xa3\x6c\x1a\x20\xfc\x14\xd9\x63\x5c\xb3\x23\x52"
- "\x71\xfc\x1f\x12\x30\xa6\x96\x1c\x2a\x5e\x9f\xa0\xb5\x3e\x9f\x98"
- "\x6b\x7d\x3e\x49\x77\x15\x5a\x4e\xb8\x4a\xd2\x74\x43\x08\x89\xa8"
- "\xea\x4e\xf4\xb3\x11\x19\xbf\x5c\x1b\x11\x12\x3f\x7c\x6b\x64\x84"
- "\x4c\x0e\xb3\x48\x96\x3b\xa6\xbe\x36\x9f\xdb\x36\xf2\x02\x71\xa7"
- "\x5e\x61\x77\x71\xa2\x4d\x1a\x9e\xdf\xa4\xe4\xd3\x46\xef\xb7\xa3"
- "\xe7\xd2\x94\x16\xe7\x92\x08\xf8\x53\x0e\xfc\xaf\xb7\xa7\xfd\xf9"
- "\xf3\xf3\xc7\x85\x8f\x04\xe5\xe3\xe7\xcf\x35\xfa\x50\x36\x8b\x83"
- "\x26\xe2\xbe\xf0\x1f\xed\x56\x94\x94\xbf\x40\xf9\x04\xca\xff\xb8"
- "\x2a\xf3\xf8\xcf\x9f\x9f\x3f\x3f\x7f\x7e\xfe\xfc\xfc\xf9\xf9\xf3"
- "\xf3\xe7\x06\xf8\x48\x2c\x17\xd6\xb8\xdf\x43\x7f\xfe\xdb\x72\xfd"
- "\x23\xe1\x0f\xcb\x34\xa9\x37\xf9\x28\xff\x21\xe9\x11\x5a\x65\x79"
- "\xac\x4e\x91\x1b\xdd\x14\x5a\x9d\xa4\xf7\xc9\x8c\xaa\x0b\xae\x54"
- "\xb5\x04\x16\xc5\x9c\x08\xaf\xd1\x18\xe4\x9b\x22\x6b\x83\x2a\xe2"
- "\x9a\xfd\xf3\x67\x1f\x0f\xdb\x93\xdc\xe6\x9b\x35\xa3\x3e\xa4\x2a"
- "\xb1\x75\x78\xf1\x9c\x93\xe3\xf7\xa5\x18\xa5\x19\x93\x0f\xdc\xfd"
- "\xea\xfc\xd3\x43\xf3\x7e\xfb\xe9\x98\xbf\xae\xb8\x38\x70\xcb\x63"
- "\x47\xee\xfd\x4b\xc2\xb9\xdb\x5e\x79\xf6\xcb\x87\xfe\xbe\xae\xf3"
- "\xa6\x17\x1e\xfd\xe7\xaf\x5f\x8f\x3f\x3b\xac\xf0\xa9\xcf\x1f\x7c"
- "\x7f\xf5\x95\xc1\xd9\x4f\x34\x8c\x7c\x6b\xe9\x85\x3b\x4a\x9f\xfb"
- "\xfa\x91\x0f\x53\xcd\x92\x8d\x93\xf6\xdf\xb5\x73\xde\xb7\x43\xb6"
- "\x3d\xf9\xc9\xe8\x77\x96\xff\x34\xe0\xc5\xe9\x87\xef\x79\x43\xfd"
- "\xfd\xad\xdb\x9f\xf9\x62\xdc\xde\xb5\x1d\xfd\x36\x4f\x3d\x34\x62"
- "\xd7\xc2\x33\x01\x05\xbf\xfb\xec\x81\xf7\x56\x5d\x1e\xb4\x75\xe6"
- "\xb1\xfb\x76\x2f\x39\x7f\x7b\xc9\x1f\x4e\x4d\xf8\x60\x83\x49\xf6"
- "\xfc\x94\x83\xbf\x7a\x6d\xc1\xbf\x6f\x79\xf9\x7f\xff\x75\xff\xbb"
- "\x2b\x2f\xdd\xfc\xd2\xe3\x47\xff\xe7\xcd\xc5\x3f\xfc\x72\xc7\xef"
- "\xbf\x7a\xf8\x1f\xeb\xbb\xfa\xff\x71\xda\xc7\xbf\xf9\xf3\xa2\xef"
- "\x7e\xf1\xa7\xa7\xff\x6f\xec\xdf\xd6\xb4\xfb\xe5\xcc\x6a\x1c\xf5"
- "\xf6\xb2\x1f\xef\x2c\x9b\xfb\xcd\xc4\x8f\xd2\xa8\x37\xe3\x47\xe4"
- "\x3b\x2e\xf5\x25\x6e\xa2\xf1\x88\xc9\xa5\xb1\x1e\x97\x23\x95\xf0"
- "\xf8\xb3\x84\xf4\x07\x88\xc4\x87\xdc\x24\xf7\x60\xc5\xe0\x69\xbf"
- "\x9d\x7c\x94\x96\xf9\x5d\xf9\xa0\xff\x68\x34\x1c\xf7\xc3\xf1\x4b"
- "\x2e\x45\xf4\x02\xdc\xed\x62\x19\xd7\xfe\x23\x81\xbe\xcb\xa0\x65"
- "\xfd\xc8\x4d\x30\x5a\x3e\x64\x00\x19\x48\x6e\x26\xbe\x64\x10\x19"
- "\x4c\xfc\x88\x82\x0c\x21\x43\xc9\x2d\xc4\x9f\x04\x90\x61\xe4\x17"
- "\x24\x90\xdc\x4a\x6e\x83\xde\x0c\x27\xb7\x93\x3b\xc8\x9d\x30\x28"
- "\x77\x39\xee\x4b\x3a\x89\x08\x84\x3f\xf0\x3f\x9a\x44\x70\xe7\xb1"
- "\x3f\xa7\xf7\x69\xba\x96\x4f\x6f\xe2\xd3\x75\x3f\xa7\xf7\x69\xba"
- "\xf2\x3f\xfc\x7d\xd7\x7f\xf4\x5b\x02\xa6\x03\xb3\x1e\xac\x6c\x88"
- "\xee\x8f\x6d\xaa\x84\xff\x74\x9f\x93\x5e\xf2\xdb\x95\x67\x9d\xdf"
- "\xf6\x13\x01\x07\xef\x90\x4d\x23\x84\xdd\x6f\xa0\x96\x1f\x63\xa1"
- "\xe4\x80\x7c\x48\x3a\xde\x3a\xf1\x21\xfe\xdc\xdf\xde\x3f\xda\x64"
- "\x38\xd2\xe1\xc8\x82\x23\x07\x8e\x1d\x70\xec\x12\xca\x26\x92\x3b"
- "\x23\x89\x44\x99\x02\xdf\x3a\x22\xb9\x2b\x10\x8e\x2a\x22\x09\x0a"
- "\x21\x92\xbb\x5b\x89\x64\x44\xa2\xd8\xf8\x91\x99\xdd\xad\x94\x84"
- "\xf0\xe9\x4a\xf8\x3d\xda\xd2\x57\xeb\xee\x7c\xa6\x9d\x3a\x3b\x4a"
- "\x39\x7a\x64\xd8\xc8\x07\xee\x9f\xa7\xbc\xef\x3e\xe5\x98\xd0\xd1"
- "\xa3\x47\x85\x3e\x38\x6a\xf4\x58\xe5\x98\x31\x0f\x8d\x0e\x7d\x28"
- "\x34\x54\xb9\x64\xed\x0a\xf5\xe8\xd0\x45\x0b\x95\x4b\xe3\xd4\x2b"
- "\x95\xf1\xea\x15\x4b\xd6\xcc\x5b\xb1\xd0\x85\x9e\xbb\xf5\x81\xae"
- "\x90\xdb\x4d\xac\x99\x96\x08\x49\xc8\x44\x22\x9f\xed\x43\xe4\x8b"
- "\x74\xc4\x1e\xd2\x60\xfe\xb0\xfb\x2c\x79\xf6\xa9\x2f\x47\xfc\x7e"
- "\xf0\x81\x49\x8b\x46\x4c\x98\xf2\x5a\x4e\x35\x91\x2e\xae\x27\xd2"
- "\x05\x59\x44\xfa\x4c\x3a\x91\xce\x34\x10\x69\x44\x1b\x91\xee\xaa"
- "\x22\xd2\x92\x68\x22\x7d\x39\x98\x48\xff\xb8\x89\x48\xd7\xc5\xd9"
- "\xa7\xed\x99\xc3\xd2\xce\x66\x12\xe9\xc9\xf1\x44\xda\xa4\x21\xd2"
- "\x83\xfe\x2c\xcd\x08\x69\x17\x83\xae\xf6\x50\x5c\x85\x8f\xbb\x7c"
- "\x20\xf9\x7f\xee\x2b\xa9\x0f"
+static unsigned int rss_eth_z8e_uncompressed_length = 534724 ;
+static unsigned int rss_eth_z8e_length = 151912 ;
+static unsigned char rss_eth_z8e[151912 + 1] =
+ "\x78\x9c\xec\xbd\x7f\x7c\x94\xc5\xd5\x37\x7c\xb2\x59\x24\x60\x92"
+ "\x0d\x18\x71\x4b\xb1\xae\x16\x74\xb1\xfc\x08\x8a\x95\x5a\xd0\x28"
+ "\xa0\x51\x81\x44\x49\xdb\xa8\x68\x40\x01\x03\x46\x88\x10\x61\x81"
+ "\x90\x0d\x0b\xb6\xb1\xe6\x17\x3f\xc4\x08\x81\xc4\xa7\xd8\xd2\x16"
+ "\x6b\x6c\x69\x8b\x2d\x6a\x2c\xe9\xfb\xd0\x36\xc9\xd2\xbe\xf4\x79"
+ "\x72\xd7\x20\x6b\x8c\x31\x37\x2e\xb0\x92\x85\xac\xc9\xee\x35\xef"
+ "\xf7\xcc\x5c\x57\xb2\xbb\x6c\x50\xee\xfb\xfe\x7c\xde\x7f\x9a\xcf"
+ "\x67\x73\x5d\xd7\xfc\x38\x33\x73\xe6\x9c\x33\x67\x66\xce\x9c\x21"
+ "\xba\xfc\x3f\x0f\x25\xf0\x23\x8e\xe2\xcf\x1d\x7d\xff\xbf\x90\xff"
+ "\xdf\x7f\xff\xfe\xfb\xf7\xdf\xbf\xff\xfe\xfd\xf7\xef\xbf\x7f\xff"
+ "\xfd\xff\xfb\xe7\x8b\xa3\xa9\xe7\x4c\x66\xfa\x53\x15\x51\x8f\x2b"
+ "\x61\x8c\x27\x2e\x6e\xce\x2b\xdb\x45\x10\x51\x71\x18\xe7\xc7\xf0"
+ "\x93\x7f\xdb\x10\x66\xaa\xa2\x84\x1b\x52\x28\x45\xbc\x62\x35\xcd"
+ "\xdc\x43\xb4\x63\x94\xf0\x6e\xdf\x29\x7c\x8d\x45\x44\x47\xf6\xe1"
+ "\x7b\xa7\xe8\xda\x3e\x4a\xf8\x01\x67\xa1\x87\x16\x9a\x19\xce\x66"
+ "\x7c\x6f\x46\x38\xc2\x0a\x11\xe6\xe7\xb0\x4a\xe4\x33\xc2\xdd\x5b"
+ "\x2e\x50\xa3\x2d\x48\x95\x0c\xc7\x16\xa2\x59\xd7\xcb\x7a\xd4\x21"
+ "\x6d\x11\xa7\xdd\x34\x0a\xe5\xa6\x12\xb9\x76\x8a\x40\x58\x1d\x12"
+ "\xb8\x1c\x2e\x5b\x4f\x7f\x2c\xaa\x3c\x1f\xc2\x3a\x8c\xf2\x06\x81"
+ "\x91\xc2\xf9\xb9\x0d\xb6\x6f\x50\x7c\x27\x5d\x79\x35\xc3\xe4\xba"
+ "\x09\x17\x25\xb8\x7b\x83\xd4\x49\xc3\xec\xdd\x2e\x8a\x3f\x02\x6c"
+ "\x54\xec\x94\xe1\xf1\x6e\x7f\x90\x6c\xc5\x14\x87\xb8\xb9\x78\x9a"
+ "\x90\x2f\x89\xf1\x33\xbf\x86\xc6\x72\xd9\x80\x6b\x16\xa6\x86\xb8"
+ "\xda\x91\x44\x8c\x23\xbf\x89\x6e\xf2\xbb\x28\xae\xc7\x35\x0c\xed"
+ "\x4f\xb0\xcb\xf6\xa3\x5c\xe4\x35\x77\xd2\xf0\xcf\x4d\x48\x8f\x32"
+ "\x7d\xb6\xf5\x5c\x87\xe1\x7f\x16\xae\x06\x93\x01\x47\x73\x35\x5c"
+ "\xb9\x77\x1b\x51\xb7\xcb\x74\xbf\xdf\x64\x11\x3a\x9c\xc3\x06\x1c"
+ "\x4e\x87\xb2\x12\xb9\xac\x6e\x97\x79\x5b\x58\x1a\x8f\x91\x06\xf5"
+ "\xf6\x4d\xf6\x53\x3c\xd7\xb9\x9d\x86\x4f\xe3\xf2\xf4\xb6\x98\xb9"
+ "\x0c\xf7\x9a\x20\xb9\xd1\xf7\x28\x3b\x15\x6d\xb5\x1d\x09\x10\x01"
+ "\xe6\x88\xda\x62\x22\x86\x8f\xfa\xdb\x14\xcc\xe1\x53\x0d\x98\x0c"
+ "\xa3\xbf\xad\xae\x86\x91\xb5\xb2\x8e\xdc\xd6\x04\xd2\xd3\x2e\x0c"
+ "\xaf\x23\xc3\x45\x5b\xae\xe1\xb6\x34\x82\xa2\xf4\x34\x5b\xfa\xf1"
+ "\xd1\xdf\xfe\x2b\xd3\xa3\x60\x5b\x15\xec\x38\xc0\x8e\x6b\xd0\xf3"
+ "\xf5\xb7\xdf\x13\x95\x5e\xa5\x4d\x19\xe6\x37\x09\x1d\x0f\xc3\xbb"
+ "\x06\xd2\x0e\xdb\x11\x9e\x16\xf5\x31\x29\xdc\x92\xc9\x43\xc3\x5b"
+ "\xd1\xce\x78\xa4\x99\x83\x7e\xb4\xe9\xf1\x57\xeb\xf1\x56\xc4\xdd"
+ "\xa5\xe0\x5d\x39\x2d\x0c\x5e\x0a\xc3\x0b\xa7\x2d\xc5\x51\x66\xfc"
+ "\x86\x40\x41\xbe\x02\xbf\xa1\x09\x06\xbd\xad\xb6\x0a\xcd\xf9\x35"
+ "\xb4\xa9\xe2\x83\x85\x9a\x4b\x90\xdb\x11\x20\xdb\x68\x72\xb6\xd3"
+ "\x95\xf5\x80\x4f\x15\xeb\x29\xc1\x59\x20\x02\x6e\x87\x97\x5a\x7c"
+ "\x5e\x72\xfa\xc0\x1b\xc1\xf3\x54\x7c\x1e\xb4\x18\x3c\x4d\xc5\xcf"
+ "\x91\xb5\xb1\xe8\x13\x8a\x45\xcb\x9a\x49\x90\x73\x0c\xe7\xed\xa0"
+ "\x96\x9a\x0e\x72\xd6\x44\xe6\x75\x5e\x4b\xd6\x66\x7c\xa3\xcf\x2d"
+ "\x5c\x0f\xe6\xb7\x60\xf2\x07\x0b\x8b\x5e\x25\xb3\xf3\x7a\x32\x35"
+ "\x2f\x6e\xd0\xeb\x92\xe8\xe0\xba\x6c\x39\x45\x09\x3f\x59\x0a\x3a"
+ "\x3c\xc5\xf5\xfd\x78\xe1\x9b\xeb\x03\xa6\x23\xd6\x39\x74\xc4\xda"
+ "\x46\x8d\xd6\x19\xd4\xe8\x98\x45\x15\xa7\x28\xf1\x48\x60\x3a\x35"
+ "\x9a\xef\xa5\xc6\xb1\xb3\xc8\xed\xc5\x3b\xf8\xf7\x88\xd5\x4f\xb6"
+ "\x35\x4c\x4f\x89\x79\x3b\x96\x53\x82\x47\xc1\x04\xee\x12\x0b\xdf"
+ "\x2f\x24\x62\xdc\xf1\x77\xac\x76\xac\xfe\x1a\x59\x51\xbf\x2e\xd4"
+ "\xe5\x3b\xa8\xcb\x1b\x63\xad\x94\x86\x3a\x0f\x75\x57\x07\xc9\x5c"
+ "\x44\xc3\x06\xe1\xe3\x54\x0d\xb4\x07\xde\xf5\xee\x85\x3c\x61\xfe"
+ "\xed\xde\x90\x03\x99\x90\x08\xfe\x4f\xdc\xa2\xf3\x80\xd7\xf9\x1a"
+ "\x99\xbb\xd7\xe6\xc4\xd5\xee\x14\x1d\x3d\xae\x24\x32\xe2\xc0\x8b"
+ "\x1d\x88\xef\x9a\x9c\x4a\x29\xee\x60\x3a\xbd\xd7\xdb\xc5\xfc\xe8"
+ "\x4d\xf6\x53\x1c\xc3\xb3\x38\xc0\x3b\x6b\x68\x08\xea\xf3\xf7\x5a"
+ "\x84\x7f\x13\xe9\x90\x3f\xdd\x43\x3b\xeb\x39\xbf\xb8\xe6\x31\xbf"
+ "\x76\xcd\x63\xe7\xb5\x57\x1e\xeb\x16\xaf\x3c\x76\x2e\xf4\xca\x63"
+ "\x9f\x3b\xd7\x51\x42\xe8\x9a\xc7\x7c\x2d\x05\xb2\x0f\x52\x5a\x0a"
+ "\xd0\x07\x21\x4a\xd8\x78\x9a\x52\x9e\x78\x0e\x7d\x1f\x3c\x41\x1b"
+ "\x97\x91\x55\x4b\x6a\xb7\xba\x83\xff\xa4\x27\x8a\x48\xe0\xdd\x1e"
+ "\xab\x7d\xdd\xc9\x1f\xd7\x19\xbc\x85\x72\x0f\x79\xe2\xff\x95\xc3"
+ "\xe5\xfa\x92\x3e\xab\xc3\x6f\x1f\x7e\xfb\xf1\x3b\x20\x92\x3f\x3e"
+ "\x00\x5c\x39\x93\x37\xc5\xd1\xde\x5e\xa2\xc9\x1a\xc5\x9d\xa2\xa4"
+ "\xe3\xa8\x7f\xca\x20\x78\x1b\xa3\x6d\xbb\xa9\xea\xa6\x12\x2a\xee"
+ "\xe9\xc9\x23\x96\x85\x2c\xff\x58\x1e\xf6\xb8\x92\x6d\x28\xa7\x5a"
+ "\xf2\xef\x4e\xc8\x98\x91\x37\x55\x21\xbc\xcb\xbf\x21\x2f\xce\xb7"
+ "\x21\xcf\xd4\x3d\xf2\xa6\xed\x48\x33\x0b\x69\x8e\xe9\x38\xec\x62"
+ "\x58\xe0\x2d\x5f\x52\x90\xe2\x01\xb3\xe0\xf7\x17\x5a\xcd\x7b\x76"
+ "\x8a\x36\xa4\xcb\xef\x87\x05\xd8\x80\x03\xfc\x27\x97\x18\x61\xc0"
+ "\x75\x47\x39\xd2\x71\x7e\x77\x20\x9d\xc7\x14\x8f\x3b\xbf\x8b\x2c"
+ "\x41\x1a\x2e\xfa\x54\x79\x48\xd3\xc5\x32\x3d\x29\x40\x57\xf4\xb8"
+ "\x28\x8b\x61\x73\x3e\xb7\xb7\x8b\x90\x6f\xbb\x70\xe6\x99\x10\x3e"
+ "\xaf\x47\xe4\xc5\x6d\x41\xf8\x11\xe4\xd7\xcb\xee\x32\xea\xc8\x65"
+ "\x70\x5f\xcb\x7a\x82\x1e\x8e\xe4\x07\x28\xa9\x9a\xe2\x91\x6f\x3e"
+ "\xc3\x63\x58\xa0\x03\x0f\xda\xba\xfd\x48\xbe\x8f\x34\x11\x01\xd3"
+ "\xa3\xe0\x59\xa6\x45\xc0\x43\xb8\x00\x3c\xa6\xbf\x46\xe4\x49\xaa"
+ "\x93\xf0\x1e\xfe\xbd\xc6\xf0\x02\x64\xb6\xc9\xfa\x7e\x9f\x61\xf4"
+ "\xb0\xfc\x00\xcc\x86\x35\xf7\x90\x97\x2c\x75\x3e\x67\x5e\x7c\x0b"
+ "\xc6\x4d\xce\xff\x66\x71\xd7\x10\xd1\x9d\x13\xcf\x34\xc7\xf1\xee"
+ "\xe0\x39\x4e\xb3\x49\x74\xe7\xc5\x27\x79\x21\x8b\x90\x06\xf9\x1d"
+ "\x5c\xcf\xf0\xbe\x7c\x78\xf6\xf7\x67\xd0\xf7\x67\xdd\x3f\x6b\x06"
+ "\xcd\xbd\x7b\xe6\x0c\x4a\xfb\xce\xc4\xb4\xa9\xb7\xde\x7e\xab\x7c"
+ "\xb9\xf5\xf6\x69\xb7\x52\xd6\x0f\x1e\x9e\x41\x59\xf3\x66\xd0\x7c"
+ "\xfc\xb2\xe6\xcf\x7e\x78\xd6\xec\xf9\x33\x28\xe7\xde\xfb\xf1\x35"
+ "\x73\xc6\x94\xb4\xfb\x26\x66\xcd\xbc\x7f\x36\x3d\x94\x7d\x4b\xda"
+ "\x2d\xb7\xd0\xdd\xb3\xe7\x4c\x49\x4b\xd3\x9f\x53\xd2\x38\xc9\xa3"
+ "\xd3\x66\xcf\x9f\x98\xb5\x6a\x65\xe1\xca\x89\xf3\xee\x9f\xc9\x21"
+ "\x90\x6e\x61\x34\x64\x0f\x5d\xd0\x18\xd7\x7e\x71\x36\x83\x34\xc8"
+ "\x8e\xbd\xa0\x01\xfc\xbc\x0d\xc5\xed\x90\x01\x23\x9e\xdf\xcb\x7d"
+ "\x27\xc7\x00\xcb\x61\xf0\xbd\xb9\xc7\x95\x52\xe4\x89\xff\x20\x85"
+ "\x71\x68\xbb\x81\xe5\x84\x75\x08\xe2\xde\xd7\xc7\x9a\x21\x88\xaf"
+ "\x89\x8c\xbf\x0a\x32\xd8\xf2\xbf\x5b\x6c\x44\x6e\xfc\x80\x77\x3f"
+ "\x64\x21\xf0\xeb\xa3\x6e\x67\xce\x10\xd0\x77\x1c\xca\xe8\x00\x6f"
+ "\x1e\x43\xde\xd6\x30\x9e\xef\x40\xff\x1c\xe3\x71\xe5\x0c\xa5\xbc"
+ "\xd5\x52\x98\x4e\xdc\x4f\xee\x42\x1d\xc6\xf9\x7e\x18\xc3\x25\x0c"
+ "\xf4\x3d\xe0\x1c\x57\x70\x46\xd8\xc2\xe4\x83\x87\xe1\x54\x20\x4e"
+ "\x87\x75\xbe\x05\x72\x02\x72\x7c\xb9\xe6\xb4\x93\x48\xfe\x20\x4f"
+ "\xeb\xb3\xcb\xb1\x12\xf9\x72\xc2\xe8\xda\xdf\xe8\x40\xba\x9f\x64"
+ "\xc4\x81\x0e\xe2\x30\xfe\xa2\x2d\x29\x8b\x41\xdf\xfe\x50\xc5\x67"
+ "\x6f\x89\xb3\x39\xac\x47\x5c\xd1\x49\x23\xff\x8e\xf6\x35\x69\x15"
+ "\x9f\xd5\x8b\x1e\x19\xc6\x78\x3b\x24\xf8\x3b\x19\xe9\xfa\xfa\xc3"
+ "\xde\xe6\x30\xd0\x41\x3c\xf3\xab\x10\x32\x1c\x63\xe6\xc8\x75\x90"
+ "\x69\xad\x48\x5b\xcf\x69\x27\x07\x69\x28\x64\x8d\xd5\xe6\x8c\xa3"
+ "\x76\x1a\x49\x5a\xf2\x67\xbf\x0e\x2b\x0f\x70\x46\xf2\x20\xc5\xf4"
+ "\x68\xee\x39\x0b\x38\xdd\x32\x1c\x7a\xcc\xc8\xc7\x01\xff\x37\x2c"
+ "\x2b\x95\xfc\xb6\x8e\xe3\x74\xfa\xd8\x3c\xf0\x0d\x5e\x57\x70\xac"
+ "\xe3\x8e\x00\x97\xac\x2f\xb0\xfe\xd7\xe3\x1a\x99\xed\xa1\x24\x9f"
+ "\x1a\x1b\xad\x63\x39\xad\x86\x3a\x8a\x94\x7c\x6e\xcb\xc1\x86\xf5"
+ "\x5e\xea\x2c\xe0\xb1\x76\x64\x8a\xe6\xcc\xa3\xc8\x3a\x8d\x68\xe2"
+ "\xfa\xb3\xfc\x00\x2e\xfe\x09\x3a\x18\x06\x78\xfb\x22\xe9\x60\x64"
+ "\x03\xe0\xbc\x85\xfa\xb5\xa2\x4d\x6f\x79\x68\xc4\x51\xad\x3b\x0f"
+ "\xe5\x92\x09\x7c\x05\x79\x3e\x00\x43\xcf\xdf\x11\x99\x7f\x44\x29"
+ "\xe7\x43\xfa\x21\x3d\xdd\x32\x7d\x19\xe3\x5c\xa7\x3b\xd0\xe5\x55"
+ "\xa9\x91\xe9\xaf\xf9\x4f\xd4\xe5\xc3\xb0\xf8\xa9\x51\xf1\xcd\x88"
+ "\xff\x58\x8f\x07\xdf\x5f\x95\x1d\x45\xb7\x05\x88\xff\x14\xf5\xf5"
+ "\x83\xaf\xa1\x5b\x8c\xc8\x00\x8d\xf9\xc2\xd2\x6f\x89\x4a\x0f\x39"
+ "\x6f\xf9\x8c\xe9\x86\xc7\x1c\x4e\x5f\xab\xf3\x0e\xd2\x27\x20\xfd"
+ "\xc1\xa8\xf2\xdf\x40\x7a\x7f\x58\xfd\x8e\x47\xc6\xa7\xd6\x20\xfe"
+ "\x0b\xa6\x75\xe8\x44\x43\x90\x66\x28\xcb\x12\x96\x63\x47\xf2\xb9"
+ "\xbf\x52\xcd\x51\xe9\xc7\x22\x5d\xa2\x8e\x23\x93\x8e\xa3\x0c\xee"
+ "\x47\x94\xd1\xa6\xea\x90\x3a\x2d\x2a\x4f\x0e\xf2\xa4\x02\x8f\x6f"
+ "\x19\x74\x19\x23\x4f\x7e\x54\x9e\x32\xee\x47\xa1\xca\x31\xf7\xf4"
+ "\x0d\xe4\xd1\x65\x64\x38\x0c\x6e\xdb\x95\x80\x51\x1f\xd5\xf6\xa9"
+ "\x28\x77\x4c\xb9\x92\x3b\x57\x82\x86\x6e\x41\xd8\x38\xc0\xfc\x2d"
+ "\xf3\x00\x78\xd5\xef\xf6\x05\x48\x38\x33\x12\x15\xed\x5e\x3d\x22"
+ "\x39\x48\xfc\x3e\x91\xdf\x19\xb6\xe8\x99\xa3\xf3\xe4\xd5\x23\xf0"
+ "\x44\x78\x2a\xeb\x6f\x71\x2c\x83\x45\xcf\x83\x9a\x82\x79\xf5\x6d"
+ "\xc2\x44\x26\x7c\x87\xf4\x32\xae\xc5\x77\x1c\xea\xff\x6b\x8c\x39"
+ "\x24\xd6\x22\xdd\x7a\x9a\x89\x70\x0e\xfb\x9d\x9e\x6e\xe0\x7b\xed"
+ "\x83\x41\x15\x3f\xea\xef\xaa\xcc\x0c\xa6\xf7\xa9\xf8\xfe\x8b\x82"
+ "\x37\xea\x7d\x86\x8f\xf7\x29\xfa\x7b\x5c\x88\x61\x9f\x35\x78\x72"
+ "\xd4\xdb\x32\x1f\xf8\x52\x96\x87\xfc\x62\xad\x8c\x63\x98\xaf\xe3"
+ "\x79\x3f\x9e\x5b\xf1\x7c\x08\xcf\x67\x9d\x5f\x90\xd5\x19\x92\xfc"
+ "\xc9\xdf\x8f\xe0\xf9\x30\x9e\xb3\xf1\x9c\x8f\xe7\x14\x3c\xef\xc1"
+ "\x33\x89\xf9\x04\xe3\x2a\xcf\xb9\xfc\x18\x67\x15\xad\xf1\x9c\xa0"
+ "\x27\x83\x71\x32\x1b\xed\x96\xb8\xd0\x94\xbc\x49\x50\xfd\x7a\xb5"
+ "\x9c\x13\x82\x3e\x38\x6c\xa8\xa2\x0f\x15\x16\x32\xe4\xd2\xd9\x81"
+ "\x30\x5d\x56\xe9\xbc\xa9\x87\x29\xf8\x59\x80\x7f\x8c\xeb\x2a\x14"
+ "\xac\x21\x8a\x06\x74\xf8\x2a\x9f\x39\x46\x99\x71\xe1\x65\xe2\xb9"
+ "\xcf\xe9\x10\x02\xcf\x2a\xee\x33\x0f\x8d\x6a\x00\xfe\xcc\x1a\xf7"
+ "\xc9\x2a\x9a\x83\x32\xf2\xb9\x0f\x0c\x9a\x12\x8a\x46\xaf\xe0\x77"
+ "\x6d\xed\x33\x90\x51\x88\x5f\xfb\x8c\xa6\xd3\xa1\x4c\x23\xe3\x55"
+ "\x5d\x16\xe8\x65\x4c\xe5\xfe\x91\xf1\x32\x3c\xf5\x58\x18\x5d\x8e"
+ "\xec\x71\x5d\x93\x11\x45\x97\x45\xa0\xcb\x49\x4c\x7f\xdc\x67\x8c"
+ "\x97\xe4\x02\xa9\x13\x98\xfa\xe1\x9f\x55\xf4\xbd\x57\x9f\x03\x2b"
+ "\x59\x70\x4d\x55\x94\xac\x92\xf4\x1f\x25\x3b\xbc\xdc\x5f\xf1\x45"
+ "\xcc\x53\xd7\x34\x78\xe8\x4d\x8f\xd4\x3f\x2b\x3e\xfb\x3d\xc7\xfb"
+ "\x41\x1f\x5c\x6e\x7c\x01\xcb\x82\x6b\x3c\x46\xbc\x8c\x1b\x61\x4f"
+ "\x61\x5e\x89\xcf\x97\x71\x08\x4b\x3c\x64\xc4\x19\xe5\xc4\x17\x72"
+ "\x9c\xd5\x3a\x00\xf7\x83\x52\x1d\x6e\x7c\x2c\xfd\x51\x94\x7d\xe0"
+ "\x98\x48\x64\xba\xb9\x84\x86\xb8\x83\xc7\x29\x33\x28\x42\xdf\x2a"
+ "\xa1\x61\xee\xe0\x01\x1a\x4f\x34\xc2\x1d\x3c\x4c\x76\xa2\xeb\xdd"
+ "\xc1\x1d\xd0\x67\xb6\x70\xfc\x7b\xe3\x4b\xe2\xe2\xf0\x74\xde\x44"
+ "\xa6\x38\x77\xb0\x86\x6e\x24\x33\x9e\x85\x74\xef\x0b\xa2\xc7\x1d"
+ "\x5c\x8c\x74\xf9\x94\x19\x12\x67\x67\x0d\x11\x27\x73\x43\x94\x32"
+ "\xe7\x05\xe1\x74\x07\x31\xb7\x08\x36\x21\x5c\x13\x99\xa1\x2f\xf0"
+ "\xeb\x11\x5a\xd9\x07\xa5\x99\xa1\xb3\x62\xe6\x0b\xef\xe1\xfb\xa4"
+ "\x98\x39\xc4\x29\xd0\x4f\xc2\x1d\x9c\x4e\x2d\x7e\x3f\xd2\x4f\x25"
+ "\x51\xfe\x81\xe3\x89\xf3\x26\xea\x83\x4e\xa2\x95\x7f\x50\x8a\xf6"
+ "\x54\xf7\xa1\x2d\x18\xaf\x5f\xe9\xdb\x80\x67\xc5\x07\x3b\xe5\x77"
+ "\xe2\x07\xfb\xd1\x96\xea\x89\x25\x98\x67\x38\xd0\x8e\x90\x4f\x40"
+ "\x8f\x31\xbb\x1d\x6d\x94\xbc\x89\x75\xf5\xe9\x98\xab\x7d\x42\xe8"
+ "\x07\x8b\x0e\xb7\x9a\xe7\x68\x22\x09\xf9\x2a\x3e\x78\x5d\xc2\x28"
+ "\xfb\xe0\xa8\x25\x4e\xf8\x20\xb7\x2d\x8c\x0b\x77\xb0\x0d\xbf\x4f"
+ "\x88\x71\xe0\x0e\xfa\x01\x93\x2c\xc8\x77\xb4\x2f\xe9\x83\x43\xf8"
+ "\xb5\xf6\x25\xb5\x25\x88\xe4\xb6\xd1\xc2\x95\xfa\xbe\x80\xee\x20"
+ "\xca\xda\xec\xf8\x9e\xc6\x73\x4c\x89\xcb\x10\x0d\x15\xe5\x6d\x76"
+ "\xd0\xcb\x2c\xd0\x1d\xea\xda\x96\x23\xcb\xa9\x68\xfb\x81\x5f\x70"
+ "\x1b\xda\xbe\xaf\xda\xd0\xf6\x3d\xd5\xa6\x36\x87\xce\x47\x1c\xb6"
+ "\x16\xef\xd9\x3d\x9c\xae\xac\xcd\x21\x12\xdb\x4a\x03\xe0\x4d\xe0"
+ "\xb5\x84\xf1\x08\xbc\x96\x30\x2e\x01\xdf\xe1\x76\x94\xa1\x1d\x6d"
+ "\xa5\xa8\x4f\x35\xf2\xfd\xa2\x4f\xea\x33\x6d\x87\xfc\x0a\xce\xef"
+ "\x01\x67\x81\x84\x93\xd8\x76\x08\xb0\x8e\x86\x5c\x36\xca\x5c\x27"
+ "\x02\x99\xc1\x4d\xc1\xdc\x75\x14\x3f\x81\x4a\xe2\x78\x2e\xe3\x76"
+ "\xe4\xa3\x9d\x8d\x78\xce\x42\x3c\x5d\x85\xb2\xde\x03\xdc\x43\x5c"
+ "\x1e\xca\x39\x0a\x98\x7f\x06\xac\xc5\x5c\xbf\x5e\x13\xa5\xe0\xbb"
+ "\xb5\x77\x83\xac\x5f\x40\x24\x9e\xb0\x6a\x89\x27\x12\x0c\x1a\x62"
+ "\xfa\x51\x78\x63\xba\x79\x9d\x40\x5f\x29\x99\x0e\x11\x44\x5c\x8a"
+ "\xdb\xc1\xe1\x35\xd4\x52\x80\x34\x0e\x8e\x2f\xc4\xfb\x5c\xbc\x6f"
+ "\x21\xa6\x9f\x79\x05\xfe\x4d\x93\x4a\x0a\xe2\x90\xfe\xbd\xdc\x60"
+ "\x02\x3d\x51\x60\x2e\x69\x29\xf0\x22\xce\x4b\x08\x73\xba\x1d\x35"
+ "\x72\xee\x85\x7e\x0d\x86\x12\x4f\x54\x87\xca\xda\xba\x92\xfd\x4e"
+ "\xe1\x76\x14\x22\x6d\x01\x8d\x2f\x49\x88\x93\xe9\x1d\x8b\x65\x7b"
+ "\xb4\x8a\x12\xe2\x3c\xcd\x79\x07\x88\xe7\x70\x68\xbb\xaf\xd9\xbb"
+ "\x85\x69\x54\xd3\xca\x4e\xe4\x81\x3e\xfb\x9a\xf3\x76\xd0\x5c\x6f"
+ "\xc9\x50\xe0\x23\x0e\xe1\xa1\x66\x6f\x23\xd2\x36\x29\x9a\x5d\x17"
+ "\xb4\x34\xe7\x6d\xa1\x60\x62\x5b\x6b\xb0\xec\x84\x23\x73\x5d\x9f"
+ "\x98\x9b\x27\xde\x7b\xdc\x5b\x02\x3a\x3d\x40\x73\x4f\x07\xe3\x5b"
+ "\x0a\x40\xf3\xeb\x7a\x10\x1e\x94\xf4\x3f\xf7\x74\xb7\x98\xf7\x9c"
+ "\x38\x9b\xb9\xee\xa4\x68\xce\x5b\x4c\x4f\xf8\x29\xf9\xca\x4d\x42"
+ "\x63\xbe\x68\xea\x38\x40\x57\xb6\x75\x11\xf3\xc4\x9c\x45\x9a\x98"
+ "\x7b\xfa\xac\x78\xe2\x39\xcc\x5b\x1d\xd3\x51\x47\xe0\xc5\xbf\x83"
+ "\xf1\x1d\x68\xce\x3b\x8c\x3a\x80\x6f\x1c\x53\x11\xf6\x3a\xd2\x36"
+ "\x58\x1e\x3f\x9d\x42\x4d\x1d\x3b\x28\x98\xd4\xd6\x1a\x2a\x6f\xeb"
+ "\xd2\x92\x4e\x24\x88\x24\xe0\xbe\xfc\x44\x5e\x28\xe9\x44\x75\xb0"
+ "\xfc\x84\x43\x54\x9c\xe8\x42\x3f\x0d\xe3\x3e\xef\x75\x91\x0d\xdf"
+ "\x9d\xbd\x92\x8e\x4e\xa0\x9f\x3e\xb4\x42\x7f\x16\x8c\x4b\x51\x7e"
+ "\x22\xa0\x78\xe0\x43\x6b\x5f\xd2\x87\x09\xa2\x02\x4f\x49\x87\x1f"
+ "\xda\x99\x2e\x43\x90\x77\x08\xbb\x29\x84\xbc\x88\x9f\x86\x5f\x06"
+ "\x7e\x39\x08\xdb\x0f\xf8\x23\x18\xbe\x56\xf6\xe1\x21\xc0\x3c\x3a"
+ "\x89\x28\xa1\xc5\xdf\x41\xbc\x76\x21\xe7\xfa\x8e\x13\xa8\x33\xd3"
+ "\x54\x10\xcf\x20\x78\xe3\xc3\xfd\xda\x9d\x55\x92\x07\x51\xde\xd1"
+ "\xcc\xd0\x5d\xe2\x89\xf3\xcc\x4f\x08\x2f\x07\x8c\xe4\x0f\xbb\x02"
+ "\x92\x5e\x3f\xfc\x94\xeb\xd0\xb7\xc1\xce\x70\xcc\x88\x0f\x88\x8a"
+ "\x93\xcb\xfd\xc2\x4e\x5a\xd9\xc9\x3c\x2d\xf1\xe4\x51\x51\x76\x12"
+ "\xfc\x70\xb2\x34\x54\x76\xb2\xfa\xc1\x21\xc2\xc7\xf2\xab\xef\x87"
+ "\x84\x72\x0e\x52\xf0\x4e\x21\x5a\x0a\xb6\xe0\xfd\x1d\x92\x3c\xec"
+ "\x38\x2e\xe9\xaa\xd9\x7b\x1c\xb8\x7c\x03\xe1\x8d\x52\x8e\x31\xee"
+ "\x45\xd2\xc9\xd2\x27\xce\x8f\x2e\x61\x5a\x78\xa2\x80\x4a\x44\xf9"
+ "\x49\x87\x56\x7e\x32\x2f\x54\x7e\xb2\x5a\x4b\x42\x39\xc9\xed\xc3"
+ "\x03\x92\xaf\xdb\x41\xd7\x07\x91\xe7\x1d\x49\x4f\xa2\xbc\x3d\x61"
+ "\x30\x59\xca\x32\x8d\x65\x58\x66\x30\xc0\xf4\xf5\x29\xcb\x3f\x96"
+ "\x65\x90\x05\xb9\x86\x2c\x63\x39\xc6\x73\x2c\x96\x65\x9a\x2e\xcb"
+ "\x34\x5d\x96\x69\x61\xb2\x0c\xf8\x37\x83\xde\x03\x52\x7e\x01\x9f"
+ "\x2c\xbb\x32\x43\x69\x22\x5a\x76\x71\x9e\x10\xe4\x92\x06\xb9\x84"
+ "\x5f\xab\xa6\xe4\x92\x55\x97\x4b\x26\x43\x2e\x01\x1e\xcb\x6d\x2d"
+ "\x96\x5c\xd2\x74\xb9\x14\xd2\xe5\x92\xa6\xcb\x25\xed\x52\x72\x29"
+ "\xb1\x0d\xed\x6d\x2b\xe5\xf5\x54\xf0\x4d\x09\xf7\x73\xe6\x3a\xad"
+ "\x04\x32\x03\x78\x6c\x2b\xd5\x94\x3c\xda\x8f\xf9\x95\x89\xe5\x51"
+ "\x08\xf9\x35\x43\x1e\xf5\x48\xb9\x71\x94\x65\x12\xf7\x5d\x6e\xd0"
+ "\x46\x2c\x8b\xa4\xdc\x09\x5e\x1f\x64\xb9\x03\xfc\xdd\x15\x2d\x77"
+ "\x00\xaf\x15\xef\x29\xaa\xfc\x13\x09\x98\x5d\x07\x2d\x41\xa7\xc8"
+ "\x74\xf8\x25\x8e\x72\x1d\x85\x25\x4c\x73\xa1\xb2\x13\x56\xd1\x52"
+ "\x42\x5a\x22\x78\x04\xf2\xc9\xed\x08\x11\x78\x37\x2f\x08\x79\x01"
+ "\x3e\x70\x84\xc0\xcb\x73\xbd\xdd\xee\x79\x05\x34\xf4\x09\xbf\x3d"
+ "\x65\xee\x69\xe1\x03\x6e\x3c\x4f\x14\x94\xd0\x3c\xbf\x1d\xf2\xe1"
+ "\x1d\x9a\xd3\x21\xb4\x39\x0b\x3d\x36\xf0\x89\x63\xee\xb2\x06\xcb"
+ "\x13\xcf\xa5\xd0\xbc\xf3\xa2\x01\xf2\xe3\xff\x9d\x7b\x3a\xc5\xb2"
+ "\xa0\x83\xbe\x31\x67\x91\xd0\x42\xe0\x45\xb4\xb5\x0b\x6d\x0e\x80"
+ "\x17\x13\x42\xe5\x27\xac\xe0\xc3\xbc\x20\xf8\x31\x9c\x17\x45\xf2"
+ "\x89\x4e\xbc\xdb\x64\x3b\xca\x3e\xb4\xa2\xfe\x01\x4d\x8e\x77\x1d"
+ "\x72\x4e\x0b\x5a\xb7\x4a\xfe\x49\x42\x78\xb9\xe2\x47\x4d\x28\x7e"
+ "\xd4\x18\x77\x26\xc5\x8f\xdc\x27\x88\x9f\x86\x5f\x06\x7e\x11\xfc"
+ "\xc8\x7c\x26\x98\xcf\x0a\xce\x0f\xf0\xd9\x73\x3a\x9f\x25\x29\x3e"
+ "\x0b\x41\x57\x09\x6d\x50\xbc\xc6\xf0\x79\xde\xdb\xcf\x6b\xc9\x27"
+ "\xf3\xf0\x1e\xa7\xe8\x46\xf2\x1b\xf3\x1a\x64\xec\xc9\x52\xf0\x1f"
+ "\xe0\x09\x1f\xf3\x01\xe8\xf2\x43\x1e\x0f\xe7\x15\x88\x0f\x73\x43"
+ "\xa3\xd1\xe7\x27\xab\x21\xef\x4e\xce\xf5\x8a\x0f\x21\xeb\xea\xc0"
+ "\x4b\x79\xe0\x21\x07\x78\xa9\x14\x3c\xc5\xbc\x94\x10\xda\xc0\x30"
+ "\xdb\x13\xfa\x61\xc8\xf1\x34\x92\x97\x06\x5b\x77\xed\x71\xd9\xbc"
+ "\x1e\x7a\xa7\x89\x75\x1a\xbc\x07\x3c\xf4\x6e\x9d\x7a\xbf\xde\xec"
+ "\xa1\xba\x36\xa9\xeb\x80\xff\x0a\x8a\xe9\xea\x53\x74\xfd\x21\xd0"
+ "\x3a\xe1\x3d\x11\xef\x87\x33\xc7\xbf\x27\xb4\xaa\xf9\x5d\x28\xb7"
+ "\x87\x79\x50\xb8\xa6\xb2\x0e\x97\x0e\x1a\x4c\x10\x3d\xf6\x44\x91"
+ "\xec\xbd\x53\xf4\x59\x79\x6d\xcf\x82\xef\x64\xb4\x7f\x2c\x9e\x23"
+ "\xf7\x5c\xa0\x54\xfc\xac\x7b\x5c\x5a\x09\xeb\x57\x78\x4f\x13\x6b"
+ "\xad\xc3\x2b\xd6\xd0\x04\x8b\x9f\x12\x6a\x5d\x5a\x8e\x65\x53\x0a"
+ "\xaf\x71\xa5\xf2\xbb\x70\xbd\x4e\xb5\x17\xc8\xcc\xeb\x10\xda\x08"
+ "\x94\xe7\xb0\x08\xb1\xda\x4e\xb5\xab\x20\x1b\x5c\x64\xad\x75\x89"
+ "\xfa\x50\x0f\xe3\xe0\x03\x87\x51\x17\xae\x1b\xea\x79\x2d\xea\xd9"
+ "\xf4\xbd\x75\xe9\xf4\x67\x07\xc5\x5c\x1b\x46\x3b\xfb\xdb\x1f\x3b"
+ "\xfe\x86\x44\x03\x27\x83\xc4\x4f\x30\xf0\x34\xc8\x3a\xa2\x99\xc7"
+ "\xf1\xd0\x1a\xe1\xab\x5c\x4e\x8c\x0b\xab\x33\x28\x3e\x06\x1e\x4b"
+ "\x8a\x43\x74\x6d\xe6\xba\xeb\x84\xdb\x2b\x1a\xdc\x8e\xd3\x54\x8b"
+ "\xf8\xe2\x22\x8c\x9d\x49\x5e\xf0\x86\x77\x4c\xf7\x1a\x11\xe4\xb5"
+ "\x23\x94\x51\xe5\xa1\xe9\x69\xaa\x2f\xda\x02\x72\xce\x9a\xe8\x1d"
+ "\x03\x58\x23\x18\x56\x33\xf2\x87\xca\xbd\x63\x91\xee\x90\x87\xfe"
+ "\x76\x50\xa6\x4b\x6c\x0b\x14\xac\xa7\xaf\x9f\xa2\x1b\x7c\x72\x6e"
+ "\x51\xe6\x9d\xca\xb2\x00\x61\x29\x08\x0b\x02\xfe\x34\xa4\xef\xf2"
+ "\xd0\xef\xf5\x35\x89\x1b\x82\x46\x3a\xbc\x4b\x3d\x3e\x82\x7e\xe2"
+ "\xe4\xe2\x3d\xfa\xcb\x36\xb0\x39\x16\xa7\x2f\xe7\x1b\x7f\x29\xf8"
+ "\xa5\xc7\x8e\x1e\x90\xe5\x27\x1c\xdd\x90\xd1\xce\x8d\x34\x06\xfd"
+ "\x83\xfa\x7d\xf3\x39\xcc\x53\x3a\x85\xeb\x9b\x09\x3f\x59\x1f\xc0"
+ "\x5c\xe2\x9b\x45\x1e\x2a\x9b\x3e\x18\x3e\x91\xdf\xaa\x5d\x10\x5d"
+ "\x95\x6b\xfa\x71\xf9\x11\x64\xa3\xe0\x77\x96\x45\xb5\x08\x67\xbc"
+ "\x01\x4e\xa3\x81\xb3\xc1\xfb\xc5\x9b\xa6\xe6\xb8\x63\xc7\x0a\x97"
+ "\xa0\x86\x6f\xf0\x9e\xd6\xd8\x71\x0a\x0f\x1f\x26\x74\x43\x8e\xf0"
+ "\xba\x34\xe6\x7e\xfe\xd5\x56\x11\xe8\x71\x8d\x85\xfe\x3f\xa1\x4e"
+ "\x5f\xf7\xf2\xbb\x83\xb3\x59\xb6\xc4\x1c\xb3\x78\x0f\x6e\x00\xfe"
+ "\xb8\x59\x2d\x63\x88\xa4\x6c\x4a\xb1\x67\x17\xab\x7a\x07\x18\x6e"
+ "\x43\xf1\x39\xea\x40\xfc\x6a\xbf\xe8\x12\x55\xf6\x0c\x9e\x6b\x34"
+ "\xac\xe9\xe5\xb0\xd9\xa0\x6d\xd1\xb0\x8a\xeb\x34\x6e\x76\xc3\x37"
+ "\x7a\xa9\xd3\x41\xf1\xb5\xfd\xeb\x4d\xe3\xd2\x78\x7d\x49\xad\xab"
+ "\x8d\xad\xf7\xd0\xa4\x3c\xa3\x5e\xac\x87\x00\xbf\x8c\xab\x00\xeb"
+ "\x23\xbc\xd7\xb1\xba\x48\x04\x58\x2f\x41\xda\x36\xa3\x0d\xdc\x3e"
+ "\xbd\x5d\xbe\xf0\x76\xf1\x9e\x98\xa5\x48\xe1\x60\xf5\x3a\x4a\xb0"
+ "\x29\x5c\x27\x70\x7b\xb9\x2d\xdc\x66\xd9\x16\x29\x63\x79\x3e\x71"
+ "\x1b\xe6\x6c\x32\xdc\xda\xe3\x1a\x37\xdd\x43\x13\xcd\x8a\xa6\xc6"
+ "\xd6\x47\xd3\x51\x7f\x3f\x26\xb6\x1d\xc5\x1c\xf7\x1b\x4e\x4d\xb4"
+ "\x03\xe6\x5f\xd4\x5a\xdd\xb8\xbf\x68\xac\x8b\x07\x98\x7e\xcf\x4d"
+ "\xe5\xb1\xd8\x5d\xc4\xf2\x56\xa6\xbd\x0a\x69\x3b\x90\xe6\x6d\x3d"
+ "\xed\xdb\x6a\x8f\x50\x3e\x87\xf2\x13\x63\xd8\x9f\x51\x8f\x63\xbc"
+ "\x76\x0c\x3c\xa7\x18\xdf\x02\xdf\x78\x96\x8a\xf2\x73\x53\x63\xd7"
+ "\xe5\xe4\x51\x1e\xcb\x42\x17\x84\x17\xe5\x5c\xc3\x34\xe5\x5c\x47"
+ "\x5f\x03\x5d\x7e\x54\xbc\x91\xae\x62\x7a\x12\x49\xde\xe9\x0a\xef"
+ "\x37\x8e\x11\x2e\xe8\xbd\x90\xa8\x05\x6b\xe8\xeb\xe0\xa3\xa9\xa7"
+ "\xe8\xc6\x29\xb9\x45\x36\xd4\x95\xa8\xf2\x0c\x91\x94\x41\x49\xde"
+ "\x69\x3c\xc7\xa9\x3d\xc3\x6b\x49\x37\x66\x19\xb4\x88\xf7\x05\x97"
+ "\x92\x17\xc0\x6b\x86\x5a\xdb\xb8\xf1\x2f\xbc\xaf\xd1\x4e\x37\x1e"
+ "\xe4\xf6\xaa\x3d\xd5\x1b\x5f\x17\x17\xc4\x02\xa1\xc6\xb4\x69\x1e"
+ "\xba\xd1\x83\x67\x86\xfc\xb9\x68\xa1\xfe\x3d\x0d\xe9\x76\x88\x0b"
+ "\x1a\xa7\xc9\x40\xd8\x01\xe1\x8a\x63\x9e\x38\x8c\xb2\x5b\x3d\x74"
+ "\x57\x86\xea\x9b\x1b\xf7\x31\xac\x41\xea\x30\x0d\x7d\x4b\x4c\x9b"
+ "\x9d\x74\xd3\xdd\xb6\x62\x5e\x2b\xbd\xe9\x6a\xc9\x17\x80\x55\x6b"
+ "\x52\x72\x1b\x3a\x6a\xc6\x5e\x97\x96\x07\x19\x9d\xa7\x55\xf8\xeb"
+ "\xe5\xbb\x1e\x27\xf4\x71\x34\x26\xfc\x2a\x7b\x76\xc3\x68\xa6\xf1"
+ "\x9b\x6a\x24\x1c\xd0\x7d\xc3\xe8\x53\xfc\xbd\x87\xbf\xfd\x89\xe7"
+ "\xeb\xdd\xd5\xe9\x28\xff\x14\x97\x5b\xa3\xe6\xfc\x37\xed\xe9\x46"
+ "\x19\x3d\xae\x9b\x6a\x3c\x34\xb9\x50\xed\xf1\x9c\xaf\x1f\x6c\xef"
+ "\x9a\x79\x87\x79\x4e\xf1\xf4\xf8\xc7\x9b\xeb\x24\xff\xd9\xbb\x13"
+ "\x3f\xcc\xd0\xe5\x06\xaf\x03\x25\xb6\xd3\xf8\x05\xcd\x56\x49\xdf"
+ "\x26\x61\xba\x29\xf8\x2b\xcd\x67\xe2\x7d\x38\x25\xbe\xc6\x2f\xb8"
+ "\xf8\x67\x4f\xc3\x0f\x52\xce\x3e\x47\xff\xce\xc1\x2f\x1f\xbf\xc3"
+ "\xf8\x9e\x23\x71\xb7\x7b\x71\x9c\x07\x71\xdd\xd0\xeb\xf9\xdb\x43"
+ "\x76\x84\x8d\x35\x41\x9f\x97\xef\xb5\x5f\xe3\xb5\x04\xfb\x62\xf4"
+ "\x81\x57\xf5\xc5\x78\xb9\x9e\x82\xba\x31\xde\x85\xb3\x5a\x04\x1a"
+ "\x8b\xfd\xa8\xb7\x7d\x47\x63\xb5\x9f\x6c\x37\x72\xfb\xed\xd5\xdc"
+ "\x26\x3f\xf0\xcf\xcf\xd5\xd5\xc2\x77\xa4\x26\x48\xbc\x1f\x08\x58"
+ "\xe0\xff\x65\x8d\x52\xee\x6f\xb3\x17\x30\x3c\x9d\x26\x84\xd1\x7e"
+ "\x25\xd3\xce\xd7\x73\x5f\x02\xd6\x27\x68\xbb\xe5\x0c\x8d\x1f\x27"
+ "\x92\xfd\xf5\x47\xf2\x88\xf6\x40\x8e\x60\xac\x91\x7b\x13\xb5\xd2"
+ "\x1e\x61\x3c\xc6\xff\x9b\xe6\x18\xfb\x57\xe5\x88\xaf\x40\x1c\xc6"
+ "\x1e\x5f\x73\x5e\x80\x18\x56\x88\xdb\x87\xfc\xef\x68\x3e\x33\xc6"
+ "\x6a\xf4\xf9\xf9\xfa\xe2\x02\xc8\x99\x7e\xb9\x65\x6f\xda\x78\x5a"
+ "\x04\x8c\xf6\x1d\xa9\x63\x5e\x18\x0f\xfa\x7f\xc6\x33\x28\xfd\xf7"
+ "\xd7\xf9\xe6\x75\x47\xc6\xaa\x3e\xd3\x80\x97\xc8\x3e\xbb\xd9\xa1"
+ "\xfa\x6b\xfc\x81\xc8\xfe\xba\x19\xa3\xfc\x78\x3f\x9e\x89\xf8\x8d"
+ "\x51\xdf\xe1\xbf\xf1\x9e\xb0\xef\x09\xf8\x2d\x46\x7d\x30\xfe\xdf"
+ "\x98\xa7\xfa\x81\xc3\xd1\x0e\xa6\x91\xcf\x29\x41\xeb\xcb\x21\xde"
+ "\x1f\xe6\x70\xa6\x67\x0e\xd7\xa0\xcf\xe0\x9b\x10\x9f\xc2\xbc\x5a"
+ "\xa9\x51\x44\xbc\x7b\x0b\x68\x6e\x7d\x2f\xd7\xff\x21\x86\x65\xd9"
+ "\x54\x5a\xca\x74\x8a\x34\xc0\x51\x69\x69\x8f\xeb\xe6\x05\x06\x5e"
+ "\x11\x36\x8b\xe3\x99\x26\x11\x5e\xe8\xa1\x7c\x9b\xdc\xff\xc5\x9c"
+ "\x30\xb6\xae\x71\x73\x75\xbf\x4e\x96\xf8\xe1\x7e\x96\x47\x5e\xfa"
+ "\xd6\x3e\xc8\x2c\xf4\xad\x7f\xbf\x1a\x6b\xbe\xf5\x3a\x7f\x43\x56"
+ "\x7e\x84\xf7\xba\x66\xc8\xa4\xde\x8a\xcf\xea\xfa\x4c\x34\xb4\xd7"
+ "\x44\xe9\xc1\x6d\xd9\x89\xc1\xe4\x8f\x0f\xb8\xbb\x0e\x52\x4b\xf0"
+ "\xd7\x64\x5b\x2e\x61\xbc\xea\x06\x0d\x38\xd7\x89\xd0\x9b\xbd\xfb"
+ "\xcd\xee\xe0\xd9\x06\x8c\xcd\xd7\x9d\xa2\x6f\x49\x7c\xbc\xd4\x8e"
+ "\x51\xff\x09\x09\x5b\xe1\x27\x65\x7e\x57\xc5\x52\x11\xac\xe8\x14"
+ "\x7e\xe8\x77\xc3\xcb\x7b\x69\xc2\xae\xf5\x94\x56\xd3\x4b\x63\xf7"
+ "\xf6\x92\x5d\x7c\x6a\x37\xd5\x40\x6f\x7b\xe2\x7c\x0a\x41\x26\xe4"
+ "\x24\x17\x50\xc2\xde\xf5\x24\x69\x24\xb4\x15\xfa\x5b\x10\xfa\xdb"
+ "\x59\x3b\xcb\xc6\x7e\xfd\xad\x4f\xea\xc5\xde\x7d\x8a\x8e\xbc\xfb"
+ "\x92\xf2\x28\x2e\x71\x21\xa5\xa0\x7e\xce\x33\x74\xf3\x7f\x24\x76"
+ "\x40\x77\x44\x9b\x3d\x7a\x7b\x81\x3b\xaf\x25\x8f\x86\xca\xb6\x42"
+ "\x5e\x8b\x72\xff\xfe\x41\xc7\x61\x13\xd3\x94\x9f\xf9\x86\xdb\xf0"
+ "\x39\xef\x51\x1f\x1c\x1d\x30\xaf\xae\x11\x01\x0e\x2f\xbc\x5e\x04"
+ "\x10\xde\xca\x65\xd7\x23\xbc\xc7\x35\x81\x3c\xf1\xff\x37\x7f\x30"
+ "\x1a\xc5\xdc\x48\x97\x2b\x13\x36\x09\x53\x09\xd3\x68\xd7\xc6\x20"
+ "\x74\xef\x33\xcc\xb3\x13\x4a\x32\xf3\x45\xd0\xb6\x82\xed\x05\x26"
+ "\x14\xb0\x2d\x03\xef\x61\xfe\x0a\xba\xcd\x97\xd9\x2f\xf0\x78\xc1"
+ "\x73\x05\x4b\x3e\x60\x56\x7c\xd8\x25\x9c\x76\xfa\xaa\xf6\x13\x68"
+ "\x67\xe2\xf6\x51\x6c\xd7\x33\xe1\xb0\x87\xe6\xa6\x72\xdd\xa5\xed"
+ "\x0e\x64\x27\xf4\xad\xab\x50\xaf\x80\x1f\x78\x40\x3c\xc6\xff\xfb"
+ "\xbb\xf4\xfd\x66\x1f\xef\xf5\x22\x0c\xe3\xff\x83\x13\x38\xac\xf0"
+ "\x7a\xb2\x16\xda\x44\xd7\x60\x3a\x13\xef\x81\x03\xde\x35\x3d\xae"
+ "\x89\x63\x0d\x38\x18\xa7\x7e\xd1\x6d\xfa\xde\xf7\x10\x36\xcd\x80"
+ "\x83\x34\x57\xe3\x3b\xa3\x3f\x8d\xca\x93\x13\x96\xe7\x7b\xdd\xa6"
+ "\x9b\x7f\x81\xb0\xfc\xa8\x3c\x45\x51\x79\xca\xc2\xf2\x94\xe8\xe5"
+ "\xd4\x45\xe5\xa9\x8f\xca\xd3\x10\xa3\x6e\xc7\xa3\xf2\x74\x44\xe5"
+ "\xf1\x5f\x5c\xb7\x49\x09\x91\x79\x26\x59\x23\xf3\x4c\xb2\x87\xe1"
+ "\x92\xed\x78\xd2\x10\x36\x3d\x2a\xcf\x9c\xa8\x3c\x0b\x8c\xef\x41"
+ "\x70\x9c\xb8\x7a\x0f\x59\x41\x9b\x6c\x2b\xe6\xdb\x8e\xfe\xe9\x7e"
+ "\xe5\x99\x1e\x3d\x6f\xf5\xc5\xed\x9a\x74\x20\xaa\xbc\xc3\x51\xe5"
+ "\x35\xc5\x68\x97\x27\x2a\x8f\x2f\x32\xcf\x64\x0a\xcb\x53\xa7\xca"
+ "\x99\x9c\x1a\x99\x67\xf2\xd8\xa8\x3c\x53\x2f\xa6\xab\xc9\x19\x51"
+ "\x79\x72\xa2\xf2\xe4\x7d\x09\x2e\x78\x1c\x57\x76\x74\xa3\x58\x57"
+ "\xbe\x07\x3a\xc2\xe4\xbf\xb3\x2d\x06\xef\xbb\xfe\xa4\x37\x30\x84"
+ "\xf7\x03\x79\xbc\x3a\xe2\x08\x60\x6c\x99\x8c\xf9\xcf\x6d\x69\xc6"
+ "\x98\xc5\x76\x2a\xcc\xd3\x4a\xc7\x9e\x5c\x3d\x98\x2e\x2a\x6d\xdd"
+ "\x74\x7b\x39\x2e\xeb\xc8\x18\x1e\xa7\xd2\xcc\xfd\x3a\xb1\xb2\x79"
+ "\x23\x05\x27\xed\x11\x63\xdf\xb7\x56\xd9\xbf\xc4\xb1\x4e\x7e\xc4"
+ "\x21\xf3\x4c\x0b\xd3\xa3\xb9\x7c\xff\xc1\xf5\x01\x73\x64\x3d\xd2"
+ "\xac\x97\xa8\x47\x22\x74\xa3\x69\x2d\xd0\x8a\x78\x3f\xbf\xb9\x06"
+ "\x3a\x10\xf4\x7e\xae\x5b\x3b\xa5\xd5\x49\x9d\x6c\x45\x2f\xf1\xbb"
+ "\xbb\xe8\x0e\xb9\xdf\xaf\x74\xd2\xb4\xd6\x46\x94\xcf\xba\x7b\x63"
+ "\xc1\x39\xb6\xc9\xc2\xf8\xcb\xba\xdb\x94\x21\x47\x8a\x7c\x5c\xaf"
+ "\x63\x86\x5d\x8c\x87\xa6\x98\xa5\xae\x51\x65\x4f\x63\x5b\x04\xb6"
+ "\xd9\x39\xe2\x9f\xc6\x69\x40\xff\x93\xdb\x8c\xf6\x62\xac\x07\x4d"
+ "\xa4\x1d\xb8\x14\xce\x54\x1f\x4e\x99\x10\x49\x93\x43\x40\x2b\x53"
+ "\xd2\x23\xfb\x7d\x4a\x56\x64\xbf\x4f\x59\x18\x49\x93\x26\xd0\xe4"
+ "\x94\xc2\xa8\x3c\x5b\xa2\xf2\xec\x08\xcb\x53\xa5\x97\xb3\x3f\x2a"
+ "\xcf\xa1\xa8\x3c\x47\xc3\xbe\xd1\xc6\x29\xad\xfd\x73\x1f\x69\x73"
+ "\x35\xa5\x2b\xec\xdb\xb4\x43\xca\xcf\x29\x41\x23\x8c\xd7\x8e\xf6"
+ "\xee\x54\x36\x3f\x0a\xde\x2d\xd6\x28\x7e\x47\xfa\x5b\x26\x44\xd6"
+ "\xe1\x96\xe9\x91\x75\xb8\xa5\x9f\xff\x75\x5b\x81\x3f\x75\xd2\xad"
+ "\x63\x75\x5b\x01\x2f\xc6\xec\x4c\xfe\x06\xac\x6a\xa4\x07\x1e\x6e"
+ "\x29\x8a\x82\x57\x16\x05\xaf\x26\xec\x3b\x05\xdf\x07\xc2\xda\x90"
+ "\x12\x6f\xa5\x38\xd0\x0b\xf4\xb7\x5b\x1a\x8d\x70\x9e\x53\xa2\xbe"
+ "\x5d\x4e\x39\xd6\xa4\xb3\x2d\xdb\xc8\x76\xba\xe5\x2d\x9e\x7f\xea"
+ "\x30\xc3\xf9\x9f\x54\xbb\x6e\x35\x47\xd6\xe3\xd6\xd4\xc8\x7a\xdc"
+ "\x3a\x36\xac\x5d\x7e\xcb\x26\x7a\xc8\x12\x7c\xf8\x11\xd6\x7d\xd8"
+ "\x7e\x53\xda\x94\x6d\x84\xce\x76\x9e\xd7\xdf\x03\xd4\x59\x48\xf1"
+ "\x6e\x47\x17\xe6\x72\xde\xba\x41\xe9\x69\xa4\x3d\x5d\xd9\x72\x91"
+ "\x0d\xf0\xb7\x18\xf4\xa8\x6d\xb3\xa7\x6b\xe5\xdd\x45\x08\x83\xfc"
+ "\x9b\x92\xa2\xf6\xdf\xce\x1d\x15\xce\x9c\x6a\xe0\x13\xf3\xa2\xa9"
+ "\x2f\xe8\xf3\x88\x6c\xb6\x49\x63\xbb\x59\x8c\xf1\x89\x6a\xdf\xff"
+ "\xd6\xa6\x30\xba\xf6\xdb\xd6\xdf\x25\xda\x69\xea\x56\xd6\x01\x98"
+ "\x47\xd9\xb6\xed\x48\xd0\x47\x3c\xf7\x76\x07\x4f\x49\xdd\x0d\xf1"
+ "\x55\x2a\xef\xd4\x84\xb0\xbc\x3e\x7d\x6e\xdc\xc5\x71\x93\x83\x64"
+ "\x3e\xe2\xf7\x11\xe0\xa4\x2a\x7d\x6f\xea\xd6\x23\xe0\x57\xe4\x99"
+ "\x6e\xe4\xe1\x79\xb4\xdc\x43\x2e\x24\xf3\xa4\x22\x32\x37\xac\x6f"
+ "\x97\xb0\x0d\x3b\x11\xe8\xd2\x5e\x77\x51\x17\xb9\xfd\xad\xbc\xd6"
+ "\x65\x56\x36\x41\x53\xab\xe2\x03\x94\xd0\xbd\xd5\x9e\xe6\xc1\x7b"
+ "\x68\x2b\xe6\x0e\x55\x76\xf0\xcf\xad\x07\x59\xde\x84\xe3\x6e\xf6"
+ "\xec\xac\x87\x33\xe7\x4e\xfc\xc1\xc3\xf7\x67\xcf\xbe\xc3\x96\xbd"
+ "\xec\xd9\x25\x8b\x27\xae\x7c\xbe\xd0\xb6\x76\xd5\xb2\xc2\x65\x2b"
+ "\x9e\xb6\xa5\x39\xc6\x39\x6c\x8b\x0a\xd5\xd3\x9e\xbf\x68\x75\xe1"
+ "\x0c\x7e\x9d\x60\x2b\x58\xb5\x64\x8d\x7c\x1d\x3f\x9c\x22\x81\x2c"
+ "\x2b\x5c\xb2\xca\x36\x6e\xf1\x04\xdb\xbd\x8b\x96\xe5\x3f\xbf\x6a"
+ "\x49\x4c\x58\x77\xd8\x56\x2d\x59\xb5\x64\xd1\x62\xdb\x0c\x5b\x1a"
+ "\x43\x0e\x07\x17\xd6\x9f\x69\xc6\x38\xc6\xe3\x57\xa5\x4b\x1c\xd3"
+ "\xc7\x33\x8f\xa2\x9f\xdb\x16\x5f\x3c\x96\xdd\xe6\x88\xa4\xb9\xdb"
+ "\x4a\x23\x69\xee\xb6\xea\x8b\xc7\xb2\xdb\xa2\xc6\xbf\xdb\xa2\xc6"
+ "\xbf\xdb\x9a\x2e\x1e\xcb\x6e\x8b\x1a\xff\x6e\x8b\x1a\xff\xbe\xdd"
+ "\x3f\xfe\x81\x96\x3c\x9b\xa5\x5c\xf8\x76\xd4\xf8\xf7\xed\xa8\xf1"
+ "\xef\xdb\x53\xa3\xbe\x67\x85\x7d\x5f\x85\xef\xec\xf0\xf1\x11\xdf"
+ "\x8b\x0d\xfe\x1c\x90\x2f\xdf\x76\x18\x69\x58\xd6\x43\x36\x77\xe8"
+ "\x69\xab\xc2\xd2\x76\xe9\x69\xf7\xf5\xf3\x1f\xef\x7d\x23\x5c\xcd"
+ "\xd7\x6f\x1f\xc6\x32\x9d\xed\xff\x78\x6c\x02\x7f\x5c\x77\x86\xbe"
+ "\xbd\x89\x61\x31\x0d\xb3\x3d\xa8\x78\xe5\xb1\x9e\xda\x91\x94\xc0"
+ "\x79\x6a\xb7\xb1\x1d\xf1\xd4\x1a\xb6\x0d\x46\x18\xdb\x4a\x43\xa6"
+ "\xdc\x0e\xfd\xb7\x75\xba\x1a\x2f\x6e\xcf\x92\x3a\x3f\xf2\xe8\xf0"
+ "\xe5\xbc\x06\x70\xd8\xf6\x38\xa1\x52\x8d\xc5\x1d\x78\x4f\x64\x9a"
+ "\x46\x7e\xb3\x30\x4d\xfd\x88\x6d\xae\x11\x96\x82\x5f\x2a\xe0\x65"
+ "\x19\xf0\xb6\x8c\x8a\xad\x5b\x46\xeb\xb9\xfd\xf3\x41\x13\x59\x2a"
+ "\x5d\x5a\xab\x5b\x63\xdd\xfa\xf6\x2d\x6a\x6d\xe1\xb3\x06\xe1\x7a"
+ "\x2f\xa7\x16\xe1\xb1\xe7\x49\xb7\x43\xff\xbb\xdd\xa1\xd6\x5b\x6e"
+ "\x47\xff\xcf\xdd\xa7\xd6\x4e\x3f\x6b\x80\xbc\xed\xed\xa4\x69\x4b"
+ "\xf0\xec\xc3\xf3\x7e\x03\x7e\x83\x9c\x6f\xdf\xde\x21\x5c\x71\xf3"
+ "\x19\x6e\x54\x78\x10\xf2\xad\xd7\x12\x2c\xc9\xb9\x38\x6e\x9a\x55"
+ "\xb8\xe2\x1f\x8e\x11\xce\xb6\xb9\xbd\x1e\x9a\xb6\x98\xeb\x1b\x16"
+ "\x8e\x79\x79\x72\x36\xa7\xf7\x70\x79\xc8\x33\x98\xae\x6d\xd8\xfb"
+ "\xaa\x33\x03\xd3\x76\x44\xb5\xe3\x8b\x4e\xfa\xce\x08\xd5\x8e\xef"
+ "\x3c\x1b\x55\xf6\x81\xd8\xed\x98\xd6\x88\x76\x7c\x31\x48\x3b\x3c"
+ "\x12\xb7\x26\xb4\xc5\x74\x51\x5c\x10\x6d\xf9\x42\xe2\x3d\x22\xfc"
+ "\x3b\xa9\xba\x2e\xe4\xc7\x3c\x2c\x05\x71\x32\xef\xfc\xa2\x81\x7e"
+ "\xd3\xd3\x4d\xb7\x54\x53\xd6\xc5\x65\x7e\x27\x5b\xb8\x86\xce\xf7"
+ "\xd0\x77\xca\x24\x9c\x81\xf0\x7c\x55\x17\xe0\xc9\xc4\x78\x42\x7b"
+ "\x90\x6f\xb0\xfe\x36\xe6\x25\x6a\x2d\xe4\x3b\xe0\xff\x69\x05\xc6"
+ "\x5a\xe6\xea\x22\xe1\x33\xf0\x88\xb8\xd6\xa8\xb8\x40\x58\x9c\x3f"
+ "\x22\x6e\xa3\x11\x7e\x47\xa2\x11\xfe\xd5\xfa\xe9\x8e\xe9\x51\xfd"
+ "\x84\xfe\xb9\xa3\x39\xb2\xdd\x77\xcc\x51\xed\x43\x1f\x5d\x84\xeb"
+ "\x3b\xf2\xd0\x47\x7d\xb1\xfb\xe8\x8e\x2d\xb1\x69\xed\x0e\xb9\x8e"
+ "\x26\x46\x52\x2c\x78\x87\xd0\x77\x7d\x92\x06\xf5\x7e\xba\xb8\x7f"
+ "\xee\x68\x33\xfa\xe7\xab\xb5\xf1\xbb\xb6\xa8\x36\x86\x3a\xe9\xbb"
+ "\x7b\x54\x5b\xbf\x7b\x3a\x12\xf6\x77\xa7\xc5\xa6\xc5\xef\x66\xa1"
+ "\x9d\xa1\xd8\xed\xfc\x6e\xfe\xe0\xb4\xf8\x5d\xde\x17\x0d\x5d\x4c"
+ "\x8b\xdf\xad\x53\x79\x28\x56\x9e\xc3\xc2\x15\xb3\x9c\xe3\xce\x20"
+ "\xeb\xb9\xd3\x13\x79\x7d\x29\x2c\xdc\x1b\x49\x7f\xdf\x9d\x26\xf3"
+ "\x31\xfe\x82\x4a\xce\x72\x3f\x74\xda\xc8\xf4\x65\x34\xd9\xe3\x9a"
+ "\x3e\x27\x0a\x57\x67\x3b\x69\x7a\x73\xb7\x29\x6e\x9f\xc2\xd7\x8c"
+ "\xad\x91\x75\x9a\x9e\x17\x1b\x5f\xd3\x4b\x80\xaf\xb3\xb1\xf1\x35"
+ "\xbd\x66\x70\x7c\x4d\xe7\xfe\x3f\x7b\x31\xbe\xa6\x1f\x0b\xc7\x17"
+ "\x74\x5d\xd9\xbe\x6f\x5a\x41\x1b\x7d\xb9\xa2\x96\xdb\x1a\xa2\x14"
+ "\x0b\x68\x45\xe5\xf1\x22\xcf\x0c\xb3\x25\xa0\xe8\x04\x3a\x64\xc2"
+ "\x19\x9a\xee\x35\xf8\x3f\xb9\x9a\x86\x8a\xbe\xc7\xd8\xce\x28\x8e"
+ "\xf3\xb9\x1d\x67\x1b\xdc\xc1\x34\xe2\xf9\x47\x64\xb9\x33\x32\x62"
+ "\xcb\x82\x19\x0b\x81\xd3\x6d\x31\xc2\x1d\xca\xd6\x6c\x46\x7d\xa4"
+ "\x8c\x98\x51\x15\xd9\x47\xc0\x1b\xf2\xe9\xdb\x4e\x5f\xfa\xbb\x74"
+ "\x9f\xdd\x49\x17\xf7\xd9\x9d\xaf\xa9\xfe\xba\x73\x53\x64\xfd\xee"
+ "\xb4\xc6\xee\xaf\x3b\xd3\x06\xef\xaf\x3b\xe7\x0c\xde\x5f\x77\xf2"
+ "\x3e\xf1\x59\x0f\xdd\x59\x17\x39\x6e\xdc\x59\x12\xd9\xde\x3b\x79"
+ "\xff\xc5\x22\x4c\x57\x5c\xc5\xdf\x5f\xb5\xdd\xc6\x8f\x65\x1c\xf7"
+ "\x15\x9f\x63\x42\xfd\xaf\xe7\x3a\x5e\x2e\x8c\x41\x61\x03\x87\x55"
+ "\xeb\x63\xef\xb7\xf2\x1c\xb7\x05\x33\x71\xde\x47\xb6\x7d\x83\x75"
+ "\xf7\xbb\x9e\xd7\x4c\xd4\x8a\x77\x53\x27\xdd\x7d\xb7\x66\x32\x15"
+ "\xf1\x9e\xa7\xb4\x93\x97\x6b\x08\x77\x95\x85\xf7\x05\xef\x7d\xf2"
+ "\xdc\xb4\x42\xcd\x9d\x4e\x76\x52\xfa\xd5\xaa\x5f\xee\xbe\x3e\x12"
+ "\x8f\x77\xd5\xc7\xee\x97\xbb\x8e\xa2\x5f\x4e\xc6\xee\x97\xbb\x3a"
+ "\x06\xef\x97\x74\x5e\x3f\x3c\x79\x31\x1f\xa5\x5b\x75\x3e\xda\xcc"
+ "\x79\x6c\x2b\x78\x3e\x9e\xfe\x22\xa7\xc1\x3b\x78\x24\xfd\x39\x8e"
+ "\x9f\xe8\x35\xf8\x48\xe6\x99\x03\x58\xb2\x7c\x3d\x4d\x86\x0e\x23"
+ "\x1c\x6e\x81\xc5\x1b\x8b\x4f\xd2\x4b\x39\xed\xa4\x02\x4a\x00\x0e"
+ "\x73\xf6\x30\x8c\x55\x44\x80\x71\x82\xd3\x71\xf8\x24\x7f\x38\x9f"
+ "\xa4\x1f\x32\xd2\xb1\xac\xd3\xd3\xd6\x8b\x9e\x3c\xe2\x74\x51\xb0"
+ "\xf5\xf6\x0f\x95\xe3\x08\xa7\xe7\x74\x91\x69\xee\x4e\x50\xfc\x78"
+ "\xf7\x9c\x48\x7e\xbc\xdb\x16\x49\x9f\xc0\x3f\xf2\x69\x90\x73\x78"
+ "\x2f\x44\x1d\xbe\x32\x7d\x5d\x9a\x37\xef\xae\x89\xe2\x4d\xd0\xc0"
+ "\x3d\x33\x14\x0d\xdc\x73\x6d\x54\x5d\x0f\xc6\xa6\x81\xbb\x9b\x06"
+ "\xa7\x81\xbb\xbb\x06\xa7\x81\x7b\xcc\x4c\x03\x1e\xba\x67\x7a\x24"
+ "\x6f\xde\x33\x26\xb2\xed\x28\x57\xf2\x26\x8d\xb8\x1c\xde\x84\x2e"
+ "\x74\xd5\x60\x7c\xc8\x3c\xc5\xf6\x23\xb5\xbd\xc6\x5e\xc7\x57\xc2"
+ "\x59\x02\xf8\x8a\xeb\x77\x8c\xd7\x94\x20\xe3\xa7\x31\x0e\xf7\xca"
+ "\xf3\x9f\xf7\x74\x84\xe3\xb1\x42\x9d\xb9\x74\x76\xd2\xcc\x65\xbc"
+ "\xaf\xac\xf0\x39\x6b\x4a\x64\xfb\x67\x9a\x63\xe3\x73\xe6\x18\xe0"
+ "\xd3\x19\x1b\x9f\x33\xa7\x0d\x8e\xcf\x99\xd9\x7c\x26\xeb\x62\x9e"
+ "\x9a\x99\x6f\x5b\x23\x75\x14\x99\xe7\x0c\xcd\xfc\xf3\x57\x1b\x9f"
+ "\x66\xee\x8b\x1c\x9f\x66\x96\x5d\xfe\xf8\x34\xb3\x2b\xf6\xf8\x34"
+ "\x8b\x62\x8f\x4f\xb3\xac\x8a\x1f\x66\x65\x45\xf2\xc3\xac\xb4\x48"
+ "\x9a\x00\xee\xfe\xc7\xc6\xa7\x59\x75\x51\x3c\x50\xd9\x49\xb3\xaf"
+ "\x87\x4e\x51\xa2\xfa\x6d\xf6\x27\x51\x75\x3c\x1c\xbb\xdf\x66\x1d"
+ "\x47\xbf\x55\xc6\xee\xb7\x59\xbe\xc1\xfb\x6d\x76\x22\xfa\xad\xf2"
+ "\xe2\x7e\x9b\x3d\xf6\xf2\x75\x8a\xd9\x39\x91\x7d\x36\x3b\xfd\xf2"
+ "\xfb\x6c\x76\x4d\xec\x3e\x9b\x7d\x30\x76\x9f\xcd\x6e\x52\x7d\x76"
+ "\xaf\x39\xb2\xcf\x66\x77\x44\xf6\x19\xf0\xf6\xdf\xec\x33\xf4\x4f"
+ "\xa3\xb2\x4f\xb8\x77\x09\xe6\xed\x43\x7b\x5c\xf7\x2e\xf0\xd0\x7d"
+ "\x63\xd5\xdc\xfa\x3e\x35\x76\xa8\x3e\x7c\x13\x69\xb2\x2e\x1e\x07"
+ "\xee\x75\xe8\x61\x3f\xb8\xb8\x1f\xee\xdd\x01\x19\xed\x6d\x2c\x92"
+ "\x7b\x5b\xaa\x0f\x19\xe7\x48\xd7\xb0\x9e\xf7\xa7\xee\x3d\xc8\x79"
+ "\xd1\xc7\xc2\x1d\x08\x12\xcb\x75\xa4\xf7\x33\x1c\x3e\x8b\x1a\x05"
+ "\xcb\x73\x39\x63\xfc\xe0\x36\x35\x9f\x35\x36\x14\xdf\x02\x78\xf7"
+ "\x9d\x57\xb4\x7a\x5f\xb4\xfe\x5b\x8b\xb8\xbf\x28\x3a\xbd\xff\xe5"
+ "\xc8\x3a\xdc\xb7\x38\x36\x9d\xde\x57\x84\x36\xd4\xc6\xa6\xd3\xfb"
+ "\xaa\x07\xa7\xd3\xfb\xd0\xff\x54\x1b\x36\xf7\x19\xf9\x44\xd0\x13"
+ "\x35\xf7\xb9\xaf\xd5\xe2\x57\xb4\x23\x75\xa2\xf2\xcf\x1a\x7b\x5c"
+ "\x19\xd1\xfa\x1f\xfa\x26\x63\xa3\x5e\xe7\xe7\x23\xf3\x67\x0c\xa2"
+ "\xff\x65\xb0\xfe\xf7\x66\xec\x3a\x67\x5c\x42\xff\xcb\x60\xfd\xef"
+ "\xcd\x8b\x79\x2b\x43\xd7\xff\x62\xcd\xf1\x32\x6a\x62\xf7\x7f\x46"
+ "\x54\xff\x53\x4e\x21\xe6\xc3\x32\x7f\x64\xba\xb6\xf0\x74\x6c\x9b"
+ "\xc4\x69\x99\x46\x2e\x4e\x7b\x7f\x42\x34\xcc\x41\xd2\xa5\x5d\x44"
+ "\x7b\x6c\x4b\x15\x93\xf6\xee\xd7\xcf\x93\xdc\x7f\x30\x92\x1f\xef"
+ "\x2f\x8c\xe4\xc7\x0c\x6b\x54\xbe\x1d\x91\xf1\xa0\x9f\xff\x31\x19"
+ "\xfb\x80\x39\x8a\x06\xde\xeb\xa4\x07\x36\x29\x1a\x78\xe0\x3f\x22"
+ "\xeb\xf1\xc0\x98\xd8\x34\xf0\xc0\x54\xb4\xff\xbd\xd8\x34\xf0\x40"
+ "\xd6\xe0\x34\xf0\x40\x3e\x70\xf9\x5e\x38\xdd\xce\x2f\x4a\x1f\x1a"
+ "\x95\xa6\x2a\xb6\xcc\x7b\x60\x7f\xec\x35\x82\x07\x1a\x14\x8e\x1f"
+ "\x08\x44\xe2\xf8\x81\xd6\x48\x1c\xa2\x2d\xff\x7d\x1c\xf6\xfb\x9f"
+ "\xe8\x71\x3d\x18\xcd\xff\xee\x4e\x7a\x50\xe7\xff\x39\xef\x47\xd6"
+ "\xf1\xc1\xc5\xaa\x2e\xb1\xd6\x45\x1e\xe4\xf9\xaf\x3b\x36\x2e\x1f"
+ "\xac\x89\xdd\xe6\x07\x0f\x62\x0c\x72\x6b\x17\xf1\xd2\x83\x4d\x08"
+ "\x9f\xcf\xeb\xa1\xbc\x1e\xb2\x17\xe1\xf3\x83\x94\x20\xc7\xab\xfe"
+ "\x71\xe9\x41\x1f\xdb\xa2\x30\xfe\x99\x7e\x2d\x63\x28\x8b\xc7\x20"
+ "\xae\x57\x6e\x91\xb4\x5b\xb0\x6c\x61\x5a\xbf\x81\x69\x7d\x8e\xd4"
+ "\xff\x78\x9f\x85\xed\x08\x2d\x0e\xca\x62\x3f\x18\x06\xbd\x73\xfa"
+ "\x48\xd8\x73\xe6\x30\x5f\x70\x7a\x23\xad\x5a\x37\x2b\x89\x92\x4d"
+ "\x73\x0a\x63\xf7\xf1\x9c\xb2\xc1\x69\x67\xce\x7e\xd5\xcf\x73\xda"
+ "\x22\xfb\x79\x4e\x83\xe6\x4a\xce\xe6\xb6\x7a\x80\xe7\xcb\xe9\xe3"
+ "\x42\x9b\xf0\x0d\x2a\xef\x37\x3f\xd6\x5a\x50\x4c\xdf\x38\x45\x73"
+ "\x67\xc9\xf2\x4c\x22\x60\xd9\x14\x47\x8d\x52\x06\xcc\x7d\x55\xd6"
+ "\x13\x69\x72\x83\x64\x12\x9b\x9f\x69\xe5\xb8\x5a\x97\x08\x20\xdd"
+ "\x31\xde\x13\xe0\xb3\xdc\xa0\x85\xab\xda\x69\xee\xe3\x11\xf9\x31"
+ "\x32\xbb\x15\x8c\xea\x5a\xc9\x8f\x73\x77\x18\x6b\xba\x5b\xf0\x1d"
+ "\x7b\xdd\x77\xee\x21\xc3\xf6\x41\xd9\x8c\xcd\x1d\x74\xff\x92\xeb"
+ "\xc4\xe7\x69\xb8\x4e\x97\x96\x03\xf3\x12\x0d\xfa\x55\xb6\x96\xf3"
+ "\xc6\x0c\xd8\xf2\xcd\xb3\x23\xee\xd8\x25\xd6\x06\xc3\xf8\x60\x5e"
+ "\x76\x38\x1c\xe5\x83\x65\x5e\x9e\x61\x8f\x87\xf7\xc2\x2f\x81\x65"
+ "\xd4\xa7\x26\xaa\x3e\x07\xa0\xa7\x6c\xd1\x61\x1c\xba\x14\x0c\xee"
+ "\x73\x45\xb3\x4c\x0f\xf3\x8e\x5d\x6a\xcd\x2f\xde\x4a\x59\xdb\x2f"
+ "\xa2\xad\x4c\xa9\x2f\x31\x8c\x4b\xd7\x31\x33\x3d\x62\x6e\x21\xf7"
+ "\xee\x79\x6f\x2b\x2b\x49\xf1\x7d\x66\xd4\x1a\x61\xe6\x02\x69\x4f"
+ "\xa5\xf3\xfd\x13\xc1\x68\x3e\xc8\x2c\x32\xc6\xe8\xa8\xf0\x1d\x06"
+ "\xdf\x63\x5e\xcb\x70\xa3\xd6\x59\x33\x0f\x2a\x5e\xc8\x4a\xd4\x92"
+ "\xc2\xe7\x6b\x99\x52\xff\x33\xd6\x4b\x3d\x48\x17\x95\x2f\x6a\xfd"
+ "\x2f\x73\x81\x18\x7c\x9d\x3e\x11\xfd\xeb\xe7\xbd\x2d\xe5\x1b\x22"
+ "\x6b\x7a\xd4\x7a\x85\xaf\x42\x9e\xf7\xff\x17\xb7\x5f\x97\x7b\x0f"
+ "\xbd\x15\x59\x5e\xd6\x02\xe7\xe9\x4b\xb5\x3f\x6b\x90\xf6\x67\x0d"
+ "\xb4\x7f\x85\x84\x1b\xb5\x96\x98\x25\xdb\x1f\xba\x48\xfe\x65\x35"
+ "\x41\x7e\x19\x78\x83\xce\xfd\xd0\x38\x43\x57\xe7\xf5\x83\xc1\x75"
+ "\xf5\x87\x06\xd6\xff\x64\xbe\xac\x81\xf5\x3f\x5f\x2c\x5d\xdd\x43"
+ "\x72\x6f\x35\xa2\xec\x87\x32\x2c\x35\xb1\xda\xf2\xd0\x20\xeb\x7f"
+ "\x0f\xe9\xeb\x7f\x0f\x1d\x8b\x94\x67\x0f\x55\x45\xf6\x61\x56\x54"
+ "\x1f\x3e\x54\x1f\xd9\x87\x59\x0b\xfe\xab\xe3\x1a\xbe\x29\x3e\x3e"
+ "\xde\x14\x1f\x67\x8a\x8b\x47\x34\x9a\x48\x43\xe3\xcd\xf1\x43\xf0"
+ "\xbb\x42\x7f\x0e\x35\xc5\x9b\xcc\xf8\x0d\xd1\x9f\x57\x44\x7d\x0f"
+ "\xe5\xbc\xf8\x99\xf5\xe7\x90\xa8\xef\x2b\xbe\x24\x7e\xa8\x5e\xae"
+ "\x51\xbe\x39\xea\x7b\xc8\x97\xc4\x5f\xf1\xdf\xcc\x4f\x17\x7d\x47"
+ "\xda\xa1\xdd\xbf\x62\xcd\xa2\xfc\x65\x8b\xe5\x7e\xf1\x12\xdb\xa2"
+ "\xa7\x9e\x5a\xb2\x7a\xb5\xad\x70\xa5\xed\x9e\xbb\x1f\xbe\xe5\x0e"
+ "\x9b\xda\x76\xce\x9f\x31\x6e\xf1\x70\x9a\xbb\x76\x15\x47\xcc\x9d"
+ "\x7f\x7f\x8e\x2d\xeb\x9e\xbb\x23\x23\x0d\x30\x72\x7b\xf9\x52\x50"
+ "\xc2\xf8\x2f\xfd\xc5\x51\x44\x65\x3b\xa5\xec\xe9\x60\x3b\x5f\xb5"
+ "\xe6\x91\x33\xa5\x89\xed\x47\x7b\x9d\xa2\xe1\x06\xde\xd3\x9f\xff"
+ "\x4f\x6e\xc4\xc4\xba\x12\x2a\x78\x92\xcf\xaf\xcc\xff\x5c\xbc\xeb"
+ "\x23\xdb\x03\x64\x6a\xa7\xc7\xef\x6e\xcc\x40\x5a\x7c\xbb\x3d\x41"
+ "\xb2\x39\x29\xa1\x93\x7e\xf0\x11\xe2\xe2\xc4\x9d\x1a\xc2\xfc\xba"
+ "\x2d\xf4\xf7\x3f\x97\x61\xef\x96\x18\xe9\x2c\x9d\x94\xfd\xb2\x78"
+ "\x57\xc8\x6f\x3e\x1f\xa4\xd2\x65\x2f\x13\xa6\xf9\x76\x96\x0d\x35"
+ "\x23\xc9\xcc\x7b\xa1\xaf\x8e\xa4\x84\x57\x47\xb1\x8f\x94\xec\x05"
+ "\xc6\x5e\xe8\x8b\xf8\xf6\xd0\xe3\xe9\x5c\x36\xa7\xd5\x4c\xf3\x1f"
+ "\xe6\xf4\x7b\x23\xd3\x97\x0d\xec\xc5\x66\x2f\x30\x21\x5d\xe6\x47"
+ "\x64\xb1\x84\xc4\xe7\x81\xe4\x8f\xeb\x26\x65\x50\x9c\x1b\x5d\xd1"
+ "\x14\x2c\x21\x65\xf3\x93\xfd\xcf\x75\x21\x11\x64\xfb\xf4\xb9\x5e"
+ "\xa7\xa8\x7c\x96\xcc\xe0\xe9\xb8\x86\x55\x6c\xa3\x90\x7d\xb8\x76"
+ "\x09\x99\xd1\xfe\x31\xa7\xe8\x7b\x5e\xdb\x3c\x22\xe7\x5c\x32\xff"
+ "\xd5\xc1\xf6\x86\xde\x3b\x2b\xfe\x41\xe6\x5f\xf6\x96\x98\x7a\x85"
+ "\x95\x8a\x0a\x45\x97\x60\xbf\x49\x7e\x11\x60\x1b\xff\xa6\x85\x21"
+ "\x4e\x33\xa9\xc7\x69\xa5\x96\x42\x3f\x6d\x6c\x13\x81\xd2\x7f\xa8"
+ "\xb3\x01\xcd\x5e\x3f\xdb\x2f\x26\x6c\x9c\x4b\xf1\x9d\x39\x64\x6a"
+ "\xce\xab\x26\xf7\x02\x3f\x15\xb5\x89\xae\xa6\x85\x9f\x50\x4b\x5e"
+ "\x3d\xe5\xb6\x92\xa9\xa9\xe3\x04\x49\xdf\x3f\xdb\xb2\xd9\xee\xd1"
+ "\xba\x71\x19\x87\x9d\xa7\xf5\x1b\x29\x69\xfd\x3f\xc9\xe2\xee\x6a"
+ "\x45\x39\xa7\xe9\xd1\xe3\x14\x07\x78\xa6\x0d\x27\xc8\xba\xe1\x11"
+ "\xb6\xf3\x4d\xa7\x9a\x62\xb2\x0a\xa7\x3d\xb1\xd7\x69\x4f\xe9\x15"
+ "\xf6\x91\x3d\x4e\x7b\x6a\x4b\x01\xd2\x77\xbc\x43\xc9\xad\x94\xfa"
+ "\xee\xa9\x56\x53\xf5\x39\x1a\xc3\x6d\xea\x44\xdb\x6a\xce\x21\xfd"
+ "\xb6\xf1\x25\x1a\xf2\x86\xe7\x09\x8e\x18\x5f\xed\xce\x09\x90\x06"
+ "\x58\xd5\xbd\x34\xa6\xa6\x97\xac\xda\xd6\xf1\x25\x9c\xcf\x4b\xdf"
+ "\xff\x4f\x37\x46\x86\xa2\x8d\x22\xd4\x57\xf1\x59\x1d\x64\xe2\xd0"
+ "\x37\x9f\x3c\x64\x76\x37\x79\xa9\xd9\xdf\x4b\x2d\xf4\x2f\x72\x3b"
+ "\x3e\x6d\xf8\xe5\x93\x87\x86\x68\x60\x82\x86\xf5\x1d\x28\x4b\xd1"
+ "\x8e\xb3\x99\xcc\x6e\xf4\x41\x65\x31\x25\x16\xac\xa7\xa1\xa7\x10"
+ "\xae\xe6\xf6\x1f\xee\x77\x07\x3f\x6d\x58\x2f\xed\x71\x1f\x4f\x2f"
+ "\x6e\xa6\xf8\x16\x7f\x35\xb7\xdf\x14\x1a\x99\x4d\x6e\xff\x31\x72"
+ "\x17\x9c\x6c\xd0\x52\xe6\x77\x95\x69\x94\xf0\xc6\x85\x63\x26\xb7"
+ "\xf9\x02\xb9\x73\xfc\xf4\x1e\xca\x16\xdb\xb2\x13\x21\xb7\xd2\x5b"
+ "\xfc\x01\x3e\xef\x94\x26\xba\xad\xc3\x2b\x57\xd1\x84\xbd\xe7\x68"
+ "\xec\x9e\x73\x64\x17\x3d\x76\x13\xdb\xd8\xf2\xf9\xd5\x3d\x78\x26"
+ "\x76\x50\x02\xda\xae\xec\xb1\x47\xe8\xb6\xb6\x7d\x76\xaa\xed\x1d"
+ "\xb0\xb5\xed\xed\x1e\xb0\xb5\x05\x4d\x2d\x64\x7b\x5b\x0f\x7d\xcf"
+ "\x6f\x69\xa2\xa1\xed\x94\x6d\x65\xfa\xae\x3c\x43\xe6\xcd\x67\x88"
+ "\x26\x95\x98\xc8\xb6\x94\xcf\x59\xfc\xe0\x9f\x6e\xf4\x0d\xbf\xb7"
+ "\xd3\x0f\xca\xf0\x4c\xc4\x2f\x0e\xe1\x9b\xb8\x9d\x1d\x3a\x1d\x23"
+ "\xcc\x84\xb0\xe7\xf1\x8c\xc7\xf3\x59\x67\x8d\xf0\xa1\xac\x40\xb7"
+ "\x89\x86\x33\x3d\xeb\xf6\xbd\x81\x1e\xd7\x0f\x16\x7b\x68\xc5\x62"
+ "\x83\xae\x95\x8c\xcf\x5e\xf8\x5e\xfb\x69\xf6\xcf\xe5\x93\xf5\xea"
+ "\xcb\x8b\x63\x5f\x5d\x7a\x38\xd7\xa1\x99\xcb\x45\xf9\xf5\x78\x5a"
+ "\xf0\x63\x3e\x9d\x65\xe4\xed\xee\xcb\xe3\x32\xff\x8c\x70\x61\x84"
+ "\xa3\xdd\x66\x8e\xfb\x4d\xfb\x69\x93\x4a\x63\x37\x01\x66\x40\x87"
+ "\x0f\xde\xcf\x36\x33\x8f\x77\x9b\x2c\xe2\xc8\xc2\xa9\x54\xb3\x53"
+ "\x34\xed\xd9\x29\x1a\x15\xef\xe5\x24\x78\xa8\x20\x81\xeb\x88\x71"
+ "\xbc\xb1\x0c\x71\x47\x6c\x44\x8c\x97\xc6\xc5\x6c\x4f\x96\x03\xfd"
+ "\xef\xca\xc3\xe1\x6d\x10\xae\x87\xa5\xae\xff\xab\xe2\xa3\x43\x20"
+ "\x03\x12\x5a\x3a\xbc\xf4\xcb\xde\xae\x21\xce\xbf\x90\xc9\x1d\x6c"
+ "\xa7\xc9\xa9\x64\x65\x7d\xb0\x76\xa7\xf0\x6c\x67\x7f\x80\x3b\x85"
+ "\x17\xf4\x72\xed\x29\xca\x79\xfe\x5b\xa9\x94\xfa\x37\x8c\x76\x4a"
+ "\x3e\xe5\x94\x87\xc9\xa7\xab\x9b\x3d\x87\xc2\x64\xd3\x82\x3f\x5f"
+ "\x2c\x9b\x1e\x7b\x5f\xc9\x26\xf0\xbe\x94\x45\x21\x8f\x1e\xfe\x46"
+ "\x54\xb8\x6e\x27\xf2\xd8\xd6\xa8\xf0\x80\x1e\xbe\x31\x2a\xdc\xa7"
+ "\xc2\x1f\x7d\xc7\x90\x7d\x2d\x5c\x8f\xb5\x2c\xfb\x1e\x7d\x8d\x65"
+ "\x5f\xcb\x42\x5d\xf6\x49\xf9\xf3\xe8\x0b\xe2\x7f\x41\x16\xad\x61"
+ "\x79\xf3\xe8\xe3\x5c\x7f\xf1\x2e\x19\x75\x1f\x86\xb0\x6b\x39\xac"
+ "\xea\x5f\x64\xc6\xcf\x90\x7b\x2b\x59\xee\xb1\xcc\x63\xd9\xb7\x7b"
+ "\x94\x68\xdd\xbd\x53\x1c\xaf\x91\xbe\x86\x1e\xe9\x97\x7f\x2f\x21"
+ "\xac\x0c\x61\x2f\x21\x9e\xe5\x20\xe3\xa4\x39\xe7\x10\xb1\xfd\x09"
+ "\x68\x6c\xba\x66\x4a\xa3\x0a\xf4\x37\x9f\x37\xdc\x02\xfc\x5a\xe2"
+ "\xa8\xc0\x5d\xc8\xe7\x57\x43\x6c\x93\xd6\xd1\x52\xd8\xc1\x7c\x37"
+ "\x6a\x33\xf8\x8c\xcf\x4b\x17\xfb\xc5\x29\x3e\x77\xc7\x75\xc8\x5d"
+ "\xf7\x00\xfb\x67\x8a\x6b\xcc\x23\x62\xbb\x70\x96\xd9\xa8\x8b\xb9"
+ "\x0a\x75\x52\xfe\x60\x1e\x4d\xf5\xd0\xeb\xb3\x54\x5f\x3f\x9e\xce"
+ "\x7e\xe0\xda\xe9\x91\x1c\xcc\xf7\x02\xdc\x36\x4b\xa8\x84\xf8\x1c"
+ "\x0c\xfb\x46\xe4\xe7\x6e\x93\x96\x57\x65\x9c\x85\x71\x41\x36\x20"
+ "\x8d\xbb\x35\x40\x5c\x67\x0f\x3d\xb2\xaf\xb9\xe8\x10\xe7\xcf\x60"
+ "\xdc\x08\x97\xd3\x80\x11\x27\x61\x98\xe4\xbc\x11\x73\x83\x47\xd5"
+ "\xda\x79\xf2\x67\x75\xcd\x0b\x7c\xc4\x72\xdf\xdd\x05\x18\x45\xed"
+ "\x0a\x06\x60\x09\x8c\x01\x11\x71\x3a\xfc\xa4\x8d\xe2\x73\xc0\x4f"
+ "\xe5\xfe\xe2\x73\x91\xbc\xdf\x06\xbc\x24\xb2\xad\xbc\xd2\x45\x1f"
+ "\xd9\x53\xfb\x2f\x22\xfd\x6c\x27\xe8\xed\x91\x1a\x3e\xb7\xc4\xe7"
+ "\x39\x2f\x75\x96\x13\x38\x1a\x6b\x9c\xe7\xd4\xd6\xfe\xcf\x9e\xe5"
+ "\x04\x6c\xeb\x5e\x93\xa8\x47\xfd\x6b\xf8\x3c\x67\x3b\xe5\x04\x99"
+ "\x0e\xf5\x36\xd5\xbd\xfc\x28\xe3\x3c\xa7\x83\xc3\x30\x77\x3c\x6a"
+ "\xf4\x3f\xb7\x97\xdb\x82\xb8\xa3\x4a\x47\x14\xc7\x3c\xf4\x58\x1d"
+ "\xc7\x23\xec\x20\xa7\x9f\x0c\x39\xe6\xc6\x18\xf6\x66\x7b\xc8\x54"
+ "\xb9\x9e\xcc\x4a\xa6\x2d\x78\x9b\xf3\x2b\x99\xb6\xa0\x60\x40\xa6"
+ "\x2d\x58\xa2\x64\x9a\xc2\xb1\x92\x69\x0b\x1e\x51\x32\x6d\xc1\x43"
+ "\x72\x5f\x0c\x32\x8d\xe3\x58\xae\x19\x32\x6d\xcf\x28\x71\x94\x65"
+ "\x47\x8f\x6b\x41\xba\x21\xdb\xca\x11\xc6\xb2\x83\xeb\xa8\xe4\xd4"
+ "\xa3\xd5\xe2\x03\x3b\x29\xbb\x03\x7e\xcf\xe3\xf3\x0b\x5d\xfa\x3b"
+ "\xfa\x65\xc1\x5b\x4a\xc6\x2d\xd8\x31\x20\xe3\x16\x58\x07\xf2\xb2"
+ "\x8c\x5b\xf0\x73\x25\xe3\x54\x78\xed\xa3\x2c\xe3\x1e\xad\x66\x1c"
+ "\xe8\xf0\x4d\xbc\x86\xa7\xa7\x67\x3c\xd6\x85\xcb\xb8\x48\xfe\x5a"
+ "\xe0\x35\x64\x1c\xcb\x36\x7c\xb3\xdf\xc8\x85\x92\xdf\x90\x6e\x07"
+ "\x70\x6e\xf0\x1d\xf7\x01\xb7\x99\xfd\xbd\x31\xde\x66\x9e\xa6\xa1"
+ "\xfa\xd9\x21\xbd\xdd\x8f\x4f\x33\x6c\x1f\x3d\xb4\x20\x3d\x96\x1e"
+ "\x3d\xe0\x93\x91\xae\xe3\x73\xf3\xee\x92\x76\x72\x57\x8b\x92\x96"
+ "\x60\x1b\xe5\x16\x42\x56\xc4\x3f\xf3\x11\xf7\x2d\xe6\x1d\xdf\xe5"
+ "\x27\xcb\x1e\x8c\xa5\x1b\x73\xfd\x74\x05\xe6\xea\x1f\x55\x9a\x10"
+ "\xe7\x88\x88\x93\x6b\x0c\x93\x56\xb1\x3f\xbf\xc7\x17\x0e\x36\xdf"
+ "\xbf\xcc\xf2\x4e\x0f\x5e\xde\x13\xc3\x64\x79\xd0\xa9\x30\x07\x1a"
+ "\x71\x86\x1e\x97\xf3\x12\xe9\x03\x67\x73\x2c\x58\x4f\x7c\x47\x8f"
+ "\x1f\x32\x48\xfc\x23\x5f\x92\x7f\xdd\x97\xe4\x7f\x95\x65\x11\xda"
+ "\x67\x09\xb9\x22\xe1\x24\x07\x8d\x74\xa7\x38\xdd\xfb\xfa\x5a\xcc"
+ "\x47\xce\xeb\xe5\x1c\xcd\x6a\xc0\x64\xfa\xab\x40\x3a\xe9\x97\x05"
+ "\xb2\x72\x16\x4a\x4c\xf6\x47\xe4\x0d\x0d\xe0\xf8\x89\x41\xcf\x74"
+ "\xb2\x1c\x75\x57\x93\xf4\x51\x7b\x04\x3a\x29\xfb\x4c\xda\xd1\xbf"
+ "\xfe\x91\x9b\x0d\xb9\x99\x15\x66\x17\xeb\x85\x9c\xbb\x4e\xf9\xa3"
+ "\xf1\x53\xa5\x9a\x6f\x5e\x03\xf9\x3c\x92\xcf\xc3\xf0\xd9\x98\xdc"
+ "\x50\x96\xe9\x88\xf4\x9d\x96\x5b\x65\xe4\x1d\x6c\x9d\x85\xcb\xd5"
+ "\xcb\x64\x1b\x53\x3f\xf2\x34\x1a\x79\x18\x36\xdb\x29\x62\x5c\xbe"
+ "\x4e\x9e\x29\x0d\x7a\x59\x16\x5e\x03\x5d\x74\xa4\x2a\x67\x21\xe9"
+ "\xe5\x80\x67\x1e\x6f\xb8\xd4\xd9\x8c\xc1\xdb\xb7\x70\xea\xe5\xb7"
+ "\x8f\xf4\xf6\x2d\x2c\xf8\x92\xf6\x5d\xaa\xdc\x03\x97\x5f\x6e\x8a"
+ "\x51\x6e\xd7\xe5\xe3\x75\xd1\x98\xaf\x8e\xd7\x34\x1d\xaf\x8b\xb2"
+ "\xbe\x04\xaf\xb1\xca\xd9\xf2\xd5\xcb\xb1\x19\xe5\x1c\x8a\x55\x0e"
+ "\xc9\xbf\x41\xcf\x4d\x25\x18\xbe\x3d\xbb\xc1\x3b\xca\x37\xde\x93"
+ "\x14\xee\x2f\xb9\x5b\xf2\xd5\x93\xa9\xfd\xfe\x99\xd5\x5e\x39\x64"
+ "\xf5\x93\x53\x72\xeb\x78\x7c\x17\x9a\x87\x9e\x9c\xca\x7e\x63\x67"
+ "\x6d\x54\x67\xb2\xf5\x3c\x19\x97\xf2\xd3\xcc\x3e\xc0\xd8\x07\xa0"
+ "\x1b\x52\xfc\x48\x35\xfb\xba\xb4\x2f\x64\xfb\x7b\xcc\xa9\x20\xe3"
+ "\x9f\x7c\x99\x7d\x9a\xe1\x7d\x28\xbf\xf3\x7e\x38\x9e\x75\x4a\x16"
+ "\x3c\x59\xe7\xa1\x45\xad\x83\xc2\xdd\x66\x2f\xd8\x57\x9c\x36\x64"
+ "\x30\x3b\x7b\xe4\xf7\x78\xe8\xb9\x03\xd2\xb6\x3e\xf9\x7c\x03\xe6"
+ "\x14\xba\x9f\xc1\x25\x8f\x4b\xdf\x73\xce\x1c\x3e\x57\x82\xf1\x71"
+ "\xf1\x0b\xfa\x79\x00\xe0\xa5\x04\xf8\x7d\xca\x6a\xe0\xc5\x08\x47"
+ "\xd8\x04\x03\x2f\xd0\x73\x12\xdd\x75\x41\x3e\xaf\xe3\x57\x67\xb3"
+ "\x9f\x7a\x48\x6c\xb5\xe7\x29\xd8\x4f\x29\x1b\x35\x2e\xaf\x2f\xc7"
+ "\x2c\xe7\x4f\xc5\x3c\x7f\x5a\x3c\xd5\x37\xc2\x9e\x67\xd4\x43\xac"
+ "\xb6\x9a\xf8\x0c\xf8\x64\x8c\xa9\x15\xca\xd7\x5f\x1c\x9f\x97\x93"
+ "\xf1\xab\xed\x26\x85\x9b\xa7\x7e\x2b\xba\xed\x6c\xb3\xcf\xb0\x13"
+ "\x51\xef\x05\x0c\xd7\x83\xa7\x6f\x83\x9d\xfd\x5f\xe8\xed\x79\x6a"
+ "\x8f\x56\x71\xbe\x41\xeb\xb1\x9a\x8c\xfa\xee\x95\x67\x5b\x9f\x42"
+ "\xfb\x17\x2d\x90\x75\x96\xf5\xb1\x9a\xd8\xae\x5f\x1b\x69\x2f\x10"
+ "\x1b\xac\x74\x70\x55\x97\x9c\x3f\x71\x99\x93\x51\xbe\xe0\xf9\x12"
+ "\x74\x94\x1e\xd7\x62\x6b\x3f\xde\x00\x57\xf4\x18\x78\x7b\xaa\x51"
+ "\x8d\xcf\xaa\x8d\xfe\x0d\x56\xd3\x11\x9f\x3c\x77\x47\x63\x6d\xce"
+ "\x2f\x94\x0f\xee\xc5\xd9\x06\xee\xfa\xeb\x84\xfa\x70\x1a\x65\xe7"
+ "\xb4\xb8\xd0\xa8\x93\xe4\xe1\x91\x7c\x8e\xf7\xa9\x3c\x3e\x3f\xa4"
+ "\xf0\x7f\x24\x11\x69\xaa\x2f\xc6\xff\xe2\x03\x61\xf8\x8f\x67\x1a"
+ "\x64\xfc\xf3\x9a\x07\x70\xfb\x4f\xe0\x32\x41\x9d\x7b\x60\xbd\x66"
+ "\xf1\x09\x7c\x27\x72\x3d\xb5\xad\x06\xce\x73\xcc\x6a\xbd\x6c\x49"
+ "\x4a\x58\x3f\xa0\xbd\x56\xd6\xd9\xe2\x8c\xf6\x73\x1e\xc6\x01\xfb"
+ "\xb3\xe4\xb2\x51\x9f\x2b\x7b\x5c\x4b\xec\xd1\x6d\xda\xac\xce\x94"
+ "\x90\xb2\x31\x59\x92\x11\xe6\xd3\xdc\x57\x68\x13\x01\x75\x3e\x79"
+ "\xb1\xef\x60\xb1\xcf\x3c\x98\x2c\x60\x1a\x94\xbe\x31\x4d\x72\x7d"
+ "\x01\xba\xd7\xd3\x33\x04\xea\xa6\xfa\xfe\xe9\xab\x55\xd8\xd2\x45"
+ "\x78\x82\xc6\x96\xbc\x2d\x50\xb6\xcf\x29\x7d\xad\xa0\x6d\x4f\xe7"
+ "\x30\xcd\x19\x74\xc6\xeb\x91\xca\x76\x7c\xe9\xb5\x2c\x5b\x0c\x9c"
+ "\xa3\xfe\xc3\x51\xbf\x2e\xa3\xfe\x46\x7a\xee\x3b\x4e\xc3\x7b\x37"
+ "\x8d\xb6\x80\x94\xb9\xea\xec\xd0\xd2\x54\x83\x97\xb9\x0c\xee\x67"
+ "\x96\x39\x8c\x0f\x85\x8b\xa5\x53\x23\x61\x59\x4d\xca\x5f\x27\xaf"
+ "\x51\x82\x1f\xd7\x07\x86\x20\x4d\xce\x00\x8c\x25\xc7\x65\xdc\x40"
+ "\x3d\xd9\xde\x5f\xda\xe4\xa9\xfe\x58\xfa\x3e\xb7\x6b\xa0\xbe\xcc"
+ "\x7f\x4b\xfb\xfb\x9f\xe3\xfc\x4e\x2b\xfb\xfe\x95\xb2\xa6\xf0\x7a"
+ "\xae\xaf\x8f\x7d\xea\x4a\x5a\xf7\xd0\xd2\x04\xae\x3b\xa7\x31\xfa"
+ "\x6c\x80\x16\x97\x7a\xc2\xe1\x08\xa7\xac\xab\x84\xa3\x64\x87\x0f"
+ "\x73\x57\xb2\xa9\x7d\x97\xa7\x13\x07\xea\xbc\x74\x8b\x51\x9f\x01"
+ "\x99\xf0\xf4\x84\x68\x9a\xe4\xb2\xd9\x6f\x9f\x0e\x9b\x65\x49\x4a"
+ "\x3b\x3d\x6d\x55\xf5\x5a\x52\xc5\xfd\x38\xd8\x38\xc7\xfe\x35\xd9"
+ "\xe7\xea\x76\x25\x43\xd0\xcf\x79\xaf\x6e\x57\xe7\x89\xfc\xca\xef"
+ "\xea\xd3\x7b\x84\xe9\x35\xc6\x15\xaf\xab\xfb\xa4\xdf\x0e\x79\xd6"
+ "\xfc\xe9\xc3\xbc\x5f\x97\x5c\xf0\x9a\xf4\xb1\xab\xdb\x08\xfa\x1a"
+ "\x0b\x82\xd2\xef\x9f\xb3\x90\xcf\xde\x06\x79\xce\x27\x6d\xe0\x8e"
+ "\x14\x06\x69\x7e\x80\x79\xe2\x69\x2f\x9f\xa9\x57\xfe\xcb\x9f\x0e"
+ "\x18\xe7\xe8\xd9\x67\x27\xfb\x9b\x85\x1c\x8a\x1f\xf0\x17\x9b\x77"
+ "\x8c\x75\x2d\xbd\x7f\xa9\xc2\x24\x8e\x29\xfe\xcf\xbb\x9b\xcf\xcd"
+ "\xab\xfd\xac\x76\xc8\x84\xf8\x4f\x91\x56\xea\x75\x03\x32\x2a\xef"
+ "\xef\xbc\xa7\xe5\xd1\x61\xf4\xb8\xf2\x16\x63\xcc\x38\x7a\xb1\x2c"
+ "\xc9\xbb\xdb\x98\xc3\xf0\x39\x3c\xb5\x3f\x36\x00\x0f\xf9\xa5\x5e"
+ "\x3d\xd0\x07\x7f\x62\x58\xf5\x17\xcb\x85\xbc\x46\x83\xf7\x0a\x6e"
+ "\xe0\xb3\xdc\x4f\x97\x72\xf9\x83\x8d\x17\xc2\xf9\x08\xf7\x53\x42"
+ "\xa7\x2d\x76\xdf\xc4\xde\x6f\x5b\x66\x37\xda\x60\xe0\x44\xb5\x61"
+ "\xd9\xa6\xee\xe4\xcf\x9a\x06\xda\xbe\x4c\xae\x11\x85\xc5\xbf\x1d"
+ "\x86\x1b\xfe\x3e\xa4\xc6\xb5\x65\x0e\xd0\x87\x7e\x16\x5f\x85\x81"
+ "\x77\x9e\x11\x1b\x72\x48\xd5\x71\x19\x19\xbc\x8e\xb4\xfb\x3c\xd4"
+ "\x13\x50\xfb\x5e\xcb\xd8\xff\x01\xe9\xf9\xe6\x70\x5d\x62\xb6\x33"
+ "\xa2\x8e\xcb\xd3\x58\xe7\x50\xbe\x15\x96\x4f\xe1\xfa\xda\x6e\xe4"
+ "\x3e\x5e\x26\x75\x5d\xe9\x67\xa1\x2f\x6f\x88\xbf\xcf\x4e\xdd\x7d"
+ "\x79\x90\x0b\x76\x53\x8f\x6b\x39\xe4\xff\x85\xe3\xaa\xcc\xe5\x63"
+ "\x8d\xba\x72\xdd\xa4\x1f\x50\xb1\x2c\x36\x7e\xb9\x5c\xe9\xfb\x29"
+ "\x6f\x28\x7e\x09\xf8\x5d\xf1\x55\xf5\x13\xe8\xeb\x5d\xbe\xf2\x73"
+ "\xf9\xda\x1a\x71\x94\x7d\x8c\x61\x4e\xd2\x55\x09\xfa\x4d\xde\xd4"
+ "\x00\x1d\xfd\x71\x53\xee\x3a\x4a\xc7\xdc\x99\xc4\x05\x31\x6d\xaf"
+ "\x86\xe7\x1a\x31\x95\xfd\x9b\xe3\x3b\x4d\xff\x9e\xc0\xdf\xdd\x6b"
+ "\xc4\x02\xd4\xb9\xd5\xd8\x2b\x54\x3e\x72\x96\x77\xf5\xfb\x15\x8a"
+ "\x7f\x8c\xcf\x15\xb1\xff\x29\x0d\x73\xa2\x2e\x2e\x37\x97\xe7\xb5"
+ "\x28\xaf\xc7\xf5\x4c\x0a\xfa\x39\x9b\xd3\xf9\xe2\x6f\x1e\x89\x5f"
+ "\x4c\x5f\xec\x9c\x87\xeb\xd5\x9d\x74\x2e\xdf\xa8\x6b\xb2\x3f\xdd"
+ "\xf4\xd5\xea\xf6\x4c\xa1\x51\x37\x84\x1f\xad\x54\xe1\x41\xf6\x95"
+ "\xc8\x36\x8f\x88\xdf\x61\xd4\xd5\xa8\x03\x97\xc7\xe7\x38\x45\xf2"
+ "\x67\xad\xec\x83\x86\xcb\x63\xbf\xad\x48\xdb\x60\xd4\xf7\xab\xd2"
+ "\x72\x71\x8d\x10\x3c\x7e\xb2\xfc\xb5\x8d\x26\xe9\x5b\xaf\x93\xf2"
+ "\x53\x8f\xd4\xf8\xd9\x37\xea\xbf\x50\xc6\x7f\x74\xb3\x6f\xd4\xbe"
+ "\xbc\x98\x7d\xcc\x79\x90\x3e\x4b\xca\x87\x8a\xcf\xfe\x43\x13\x19"
+ "\x90\x13\xc8\xd7\x97\xc1\x6b\x4e\xe0\xdb\xfc\xa2\xc6\xa2\x2e\x3e"
+ "\x7b\x09\x99\x93\x5f\x84\x34\xad\xac\x67\x61\xde\x15\x90\xf7\x66"
+ "\x40\x36\x35\xac\x99\xca\x30\x36\x9a\x1d\x64\x6e\x8c\xf2\x57\x35"
+ "\x18\x7d\x74\x27\x9e\x0f\x74\x57\x9c\xc7\x3c\x3e\xff\xa0\x87\x9e"
+ "\x1d\x54\x27\xdc\x3c\x0a\xf8\x44\xba\xaa\xd1\x3c\xef\xcb\xf7\x5c"
+ "\x2a\xad\xb1\x6f\xcd\x32\x68\xb2\x95\x12\x45\xd2\xf9\x00\xcb\xdb"
+ "\xee\xe4\xf3\xc7\x78\x2c\xe9\x71\x3d\x6b\x33\xf2\xf3\xb8\xce\x63"
+ "\x07\xfa\xcb\x5a\xd9\x2f\x0f\x9f\xd5\xfd\x15\x3f\x9b\x61\xf0\x68"
+ "\xac\x72\x0a\xf7\x09\xcd\x39\x8e\x4c\x6e\x8c\x5b\x93\x02\x94\xb8"
+ "\x77\x17\x51\xd5\x7a\x11\xd8\xbe\x1e\x73\x99\xd1\x7c\xcf\x46\x7e"
+ "\x03\xf3\x28\xd3\x77\x05\xe8\x25\x1e\x75\xd9\x7e\x01\x65\x16\xab"
+ "\x74\xba\xfd\xba\x15\xe9\xbc\x78\xa6\x0a\x93\x89\x76\x14\x53\xc2"
+ "\x0e\x8d\xcc\x55\xc5\x34\x06\x61\xd0\x75\x9f\x6d\x32\x78\x36\x56"
+ "\x1d\x2a\xf7\x12\x6d\x43\xb9\x9b\x8a\x45\xf0\x4f\x18\xcf\x5d\x9a"
+ "\x08\x7c\x15\xbc\x7b\x68\xc5\x04\xd5\xc6\x15\x13\x0c\x9d\x10\xef"
+ "\xd3\x22\xed\x0f\x56\xd8\xa2\xe7\xca\x4f\xae\x5c\x59\x98\xbb\x6a"
+ "\x09\x3f\xec\xe3\x9e\x1f\x3f\x3c\x7c\x4d\x84\xc7\x3f\xe5\xaf\x62"
+ "\x45\x16\xaf\x3f\x6e\x1f\x69\xec\xa7\xaf\xa8\x32\xd6\x40\x75\xbb"
+ "\xfd\xbb\x78\x6e\xc7\x73\x20\xc4\x1d\x78\xbf\x68\x23\x83\x89\xfb"
+ "\x28\x81\x4c\xd1\xe5\x2d\x5d\x54\xb8\x28\xff\x0e\xde\x39\x1b\x1e"
+ "\xab\x9c\x86\xa8\x72\x02\xfd\xe5\xa8\xf1\xc7\x6f\xe2\x74\x5b\x97"
+ "\xd7\x89\x11\x99\xe9\xea\xcc\xf4\xca\x31\xc6\xda\x56\x6c\x7b\x47"
+ "\xaf\x35\xb4\x6d\x7c\x03\xf3\x83\x73\x23\x99\x7e\xb3\xbe\xd5\xc4"
+ "\x7a\x64\x31\xde\x79\x8d\x41\xae\x95\xe9\x7e\xa3\xde\x3d\xd7\x8a"
+ "\xf1\x7d\x65\x81\x28\xf7\x42\xae\xae\xcc\x1b\x6c\x5d\x21\xdc\x56"
+ "\x84\x6d\x0b\x3b\x68\x65\xe9\xa5\x6c\x8f\x38\x3d\xb7\x87\x69\x36"
+ "\x2a\x5f\x48\xf5\xd9\x4a\xd0\x7f\xbe\xe1\x87\xbe\x3f\x4d\xe5\x28"
+ "\xc3\x1f\xd7\xca\xe3\x83\xda\x8d\x94\x5d\xd0\xc7\x8f\x82\x19\x8d"
+ "\x98\xb7\xa1\x9d\x3f\x6a\xa7\x82\xef\x98\xad\xd0\x11\x46\xd3\xcf"
+ "\xf0\xce\x57\x00\xc4\x71\x5c\x04\x1d\x5d\x7b\xba\xce\x0c\xe9\x02"
+ "\x29\x13\x27\xd4\x1f\x99\xf5\x97\x78\xfc\x4c\x22\x4e\xee\xaa\xc6"
+ "\xa3\x07\x87\x5e\x61\x26\x4b\x72\x62\xc2\x75\xdf\x18\x63\xbd\xeb"
+ "\xce\xe9\xd3\x9c\xc5\x45\x90\xca\xc1\x80\x45\x84\x9d\x8b\xac\x9a"
+ "\xd7\xf5\xbd\xf1\x25\x24\xed\x6a\xb6\xce\x8b\x79\xa6\xb2\xdc\x25"
+ "\x0a\xf8\x0c\xbb\x36\x72\x69\x8a\xf3\x79\x32\xbd\xd9\xeb\x31\xb1"
+ "\x2f\x68\xd6\x9f\xd9\xcf\x2b\xea\xfa\x97\xf7\x10\x06\x7c\x39\x44"
+ "\xd5\xd2\x14\xa5\x77\x3e\x37\x4c\xdb\xb6\x34\x65\x00\xbe\x99\x18"
+ "\xbe\xf3\x55\x32\xed\x2b\xee\x32\xb9\xcd\x77\x92\xdb\xe6\xa7\xf7"
+ "\xf0\x1e\xb3\xaf\x50\x26\xeb\xb2\x0c\xa3\xd6\xa5\x95\x3a\xbf\x20"
+ "\x93\x7e\x0e\xd5\x74\x86\x9e\xbb\xbb\x7e\x90\x7c\x7c\xee\xbb\x3b"
+ "\xf9\xdc\x37\x7b\x5c\xcf\x15\x79\xe8\x9e\x83\xba\x2e\x83\x31\xf7"
+ "\xb9\x32\xd0\x86\xd4\x3f\x11\x7f\x03\xdf\x47\x83\xb0\x3a\x23\x4d"
+ "\xcc\x3e\xfa\x31\xaf\xc5\x8b\x06\xa6\x03\x71\xe1\x3f\xbb\xf8\x8c"
+ "\xcb\x20\xf6\x30\x43\xdd\x8e\x5b\x78\x4f\x72\x48\x32\xe4\x8f\xf3"
+ "\xbc\xe8\x0b\xb9\x28\x15\xec\x64\x0a\x99\xe8\xba\xe0\x05\x91\xd3"
+ "\xec\x3d\x87\xb1\xe0\x38\xcf\x45\xe2\x7e\xb5\xf4\x4f\x26\x77\xe0"
+ "\x6c\x83\x7b\x8b\x46\x2d\xd0\x2b\xdd\x35\x67\x1b\x94\xff\xd3\x10"
+ "\x35\xd3\xbf\xa8\xd9\xf1\x7f\x4b\xdc\x25\xff\x42\xb8\x28\x61\x3c"
+ "\xf7\x5d\x10\xd9\x6e\xf3\xff\x21\xbe\x1f\x89\xc7\x38\xe0\xdd\x76"
+ "\x86\x56\x2d\x7b\x17\x70\xde\xfc\x10\xb0\xa4\xef\xb4\x19\xf4\x1e"
+ "\xde\x7b\x5c\xab\xfa\xc7\xbf\x98\x3e\x67\xe2\x1a\xca\x2d\x8e\xc7"
+ "\x4d\x1a\xc6\x52\xf6\x71\x87\x31\x74\x2a\xb7\x0b\xdf\x69\xfc\x8d"
+ "\xe7\x04\x7e\x5a\x36\x35\xec\xb1\x04\x1f\xe7\xb1\x35\x87\xc7\x4d"
+ "\x84\x67\xd7\x5e\x90\x63\x6d\x96\xfe\x3d\x47\xff\xce\xd0\xbf\x67"
+ "\xe9\xdf\xe9\xfa\xf7\x74\xfe\x56\x63\xf2\xea\x84\x7e\x7d\xc1\x34"
+ "\x14\x63\xcc\x6a\xab\xd1\x17\xa8\x4f\x92\xc5\xb1\x51\x8e\xed\x7a"
+ "\x3d\xa6\xea\xf5\x4a\xd3\xbf\x8d\xfa\x5c\x6b\x09\x6e\xfc\x9f\xaa"
+ "\x4f\x75\x54\x7d\xf6\x87\xd5\x87\x2c\x8e\xf4\xaf\x52\x9f\x14\x0b"
+ "\xdf\x4f\xf1\xdf\xa8\x0f\xd7\x85\xc3\x7a\x5c\x85\xf6\xc8\xfa\x14"
+ "\x4e\x33\xea\x13\x93\xde\xd6\x88\x2e\xd6\x6b\x56\x7f\x4d\xfa\x80"
+ "\x1e\xca\x3a\x4b\x6d\xaf\xe1\xaf\xb0\xb0\xf0\x52\xfe\x0a\xc1\x0b"
+ "\x18\xb7\x0b\xd1\xfe\xc2\x59\xba\xfe\x76\x58\xe9\xf9\x85\x07\x0c"
+ "\x1b\x32\xb4\x75\x7f\xa5\x6a\xeb\x81\x2d\xec\xb3\x6f\x1d\x7d\xdd"
+ "\xe9\x10\x5d\x98\x77\x7f\xcc\x73\xc3\x70\xb8\xf9\x85\xab\x57\x3f"
+ "\x7b\x87\x2d\x7f\xd1\x8a\x25\xb6\x71\x8b\x6d\xab\xf3\x96\x2d\x2d"
+ "\x5c\x12\x69\x57\x91\xa2\xdf\x1b\x24\xcf\x8b\xf0\x5c\x4a\xce\xa5"
+ "\x41\xff\x52\x4e\x4a\xdb\xbc\xe7\x9f\x15\xae\xc2\x56\x96\xb9\x7b"
+ "\xb7\xa9\xfb\xa5\x7a\x5c\xcf\x4f\x37\xc6\x10\x63\xfe\xcb\x63\x08"
+ "\xc2\xb3\x31\x4e\x1e\x0f\x0b\xe7\xb4\x79\x46\x18\xc3\xd7\x65\xd3"
+ "\xd0\x76\x7a\x7e\x18\x97\x19\x13\x87\x17\x44\x1d\xf4\x26\xbe\x3b"
+ "\xc3\x04\x99\x22\xd8\xff\x16\x9f\xc3\x44\x3e\x81\xfa\xc8\x79\x45"
+ "\x36\xbe\xd5\x9c\x4d\x70\x1d\x9b\x91\x67\x1f\xc2\xcc\xac\x43\x60"
+ "\x1e\xd8\xc5\xf9\x10\xfe\x09\xfb\xc3\x40\x78\x82\xee\x57\x8c\xc3"
+ "\xbe\x60\x7f\x15\x08\x4b\x19\x08\x5b\x93\x84\x30\x2b\xc2\x6c\x0a"
+ "\xde\x9a\x6b\x19\xcf\xf8\x4e\xd7\xd7\xc9\x38\xcd\x14\xbd\xdc\x92"
+ "\xf0\x3a\xf3\xdd\x31\xb7\x4c\x4a\xb3\x65\xcf\xff\xf6\x8c\x3b\x9f"
+ "\x5a\xb9\x62\xe9\x70\x92\x68\xb7\x63\x38\x4e\xbb\xc5\x31\xfe\x0e"
+ "\x5b\xc1\x92\x25\xab\x6c\x6b\x97\xac\x28\xb4\x2d\x5a\xbb\x68\xdd"
+ "\x70\x5a\xba\x72\xd5\x53\xec\x6d\x81\xbb\x65\x75\xee\x53\x4b\x9f"
+ "\x66\xe3\x17\x95\x7a\x78\x84\x9e\x90\xcd\xb2\x4d\xf7\x4f\x72\xb4"
+ "\x92\x75\xc8\xa4\x0b\x47\xf1\xce\x7e\xbb\xac\x78\x36\xe2\x77\x18"
+ "\xbf\x43\xf8\x1d\xc7\xef\xd8\x29\xda\x10\xc4\xf3\x60\x8f\x6b\x4d"
+ "\x9b\xa1\xaf\x0c\xd0\xd0\x1a\x9f\x41\x43\xd0\x2f\x0e\xaa\xf1\x6d"
+ "\xad\xad\x25\x28\xf9\xa7\x9f\xa6\x2a\x2f\x0c\xd0\x14\xfb\x1d\x6d"
+ "\x61\xdb\xae\x35\x88\xef\x95\x6b\x96\xbc\x66\x32\x8c\xf1\xd6\x49"
+ "\xeb\xaf\xae\xdd\x29\xd8\xc6\x8c\xd7\x73\x1b\x41\x2f\x4d\xca\x4f"
+ "\xcd\xda\x1a\xa4\xbb\x1e\x65\x1c\xd6\xcb\x50\xdf\xa3\xc4\x51\xbe"
+ "\x3b\xa6\x5d\xff\x66\x58\x9d\xb4\xee\x0d\x7e\xe7\xa7\xbe\x87\x6a"
+ "\xd1\xef\x96\x33\x0d\xc4\x39\x66\xeb\x65\x34\x00\x17\x25\x7b\x5d"
+ "\x22\x60\xcc\x9d\x79\xad\xd8\x12\x77\x97\x40\x7d\xce\x6a\xf1\x8f"
+ "\xb5\x4a\x3f\x98\x25\xbd\x90\x11\xb7\xde\xea\x76\xc8\xf4\x71\xbc"
+ "\x96\x3c\xaf\x40\x68\x7c\x0f\x95\x16\xff\x4c\x2b\xe7\x13\x89\x17"
+ "\x8e\x6a\x15\x49\xe9\x4a\x67\x60\xff\x83\x0e\x9b\x0e\x33\xc0\xb8"
+ "\x3d\x45\x6b\xfe\xae\xe6\xe1\x1b\x82\x4a\x97\x70\x4c\x30\x6c\x2e"
+ "\xc1\xa3\x76\x7c\x4f\x37\x64\x80\x87\x1c\x09\xba\x7d\x5c\x83\x6a"
+ "\xbf\xa3\x50\xff\x3e\xa4\xd7\x31\x8e\x7d\xa2\xa0\xfe\xc7\xb8\xef"
+ "\xa0\xaf\x1c\xc2\xfb\x71\xe0\xa7\x49\xe1\xc7\x21\xed\x7c\xa1\x37"
+ "\x71\xfc\x71\xbe\x67\x07\x71\xc7\x95\xbf\x91\xb5\x07\xb8\xcd\x03"
+ "\x36\xb4\x35\xe9\xc0\xdf\x1b\xbc\xd7\x0c\x5e\x3a\xe4\xbe\xc0\xfc"
+ "\xb9\x76\x3f\xe0\xd5\x1b\x72\x87\xe5\x4c\x6e\x08\x7c\x2a\xe7\x53"
+ "\x8e\x0e\x43\xde\x0c\xd0\x81\x23\x10\x4b\x96\xc4\xea\x77\xbd\x6f"
+ "\x16\x09\xd7\x9a\xe9\xa8\x53\xbd\xec\x03\xf6\xcb\x7a\xa1\x7f\xde"
+ "\xd6\xa7\x64\xe4\xba\x39\xfd\x73\x4c\xbd\x1e\xec\x07\xde\xc3\x75"
+ "\xeb\x95\xfb\xff\xba\xdc\x58\x57\x68\xc8\x0d\x03\x8e\x25\x4e\x68"
+ "\x16\x07\xfe\x95\x79\x0f\xf1\x5e\x09\x8f\x97\x52\x1f\x01\x9c\xe4"
+ "\xf3\xea\x2c\x9c\x56\xee\x3d\xe4\xa1\x75\x13\xf8\xae\x39\xa9\xd3"
+ "\xba\xd6\x64\x0e\xc8\xa2\x75\x47\xc3\x61\x8a\x44\xef\x21\x86\xcb"
+ "\xf2\x88\x75\x92\xdc\x90\x99\xfd\xd1\x1c\xd2\xc7\x17\xc8\xe0\x75"
+ "\x01\xa3\xae\xc0\xe1\x51\xa3\xbe\xfa\x5d\x67\x47\x51\x4e\x4e\x66"
+ "\xa8\x8f\x6d\xc2\x1b\x55\x7f\x6e\x90\xf2\x06\x71\x07\x7a\x5c\xeb"
+ "\xa7\x7a\xe8\xf9\x52\x9d\x87\x9a\x90\xff\xc0\x91\xe2\x59\x48\xb3"
+ "\x3e\x4b\xb7\x6b\x3e\x86\xfe\x3d\x1e\x46\xfb\xb3\xc3\xd6\x79\x8e"
+ "\xab\x3e\xbc\xb3\xa4\x9d\xd6\x57\x85\x85\xeb\x7d\x7b\x24\xab\x9d"
+ "\x36\xcc\x56\xf6\x44\x5e\x87\xca\xbf\x5e\xea\xa8\x46\x1d\x59\x16"
+ "\xf0\xb9\x3d\xe6\x71\x89\x7b\xd9\xc7\xeb\x8f\x1a\xe3\x05\x60\x1d"
+ "\x94\x38\x1f\x25\x0e\x33\x9e\x94\xdf\x8f\x35\x2b\x14\x9e\xd6\xfb"
+ "\x22\x70\xcf\xe3\x26\xca\x61\x3c\x25\x6f\x12\x5a\xb2\x3f\x4e\xe4"
+ "\xae\x33\x13\xf3\x0b\xf3\x38\xef\x11\x82\x3e\xa4\x5e\xa5\xf0\xb6"
+ "\x21\xcd\xc0\x9b\xd1\x77\x8c\x27\x0f\xad\xaf\x63\xdc\x46\xb6\x71"
+ "\xe8\xb1\x76\xa3\xed\xc0\x29\xfb\x36\xc5\xf7\x2c\x9d\x2f\x9a\x1a"
+ "\x46\xb3\x0d\xc9\xda\xfb\x8f\x98\xbf\x4d\x47\x1c\x53\x49\xe1\x76"
+ "\x43\x15\xda\xe1\x0b\x9b\x97\x1c\x65\xfc\x32\xaf\xa0\x9e\x07\x75"
+ "\x1f\x5c\x47\x95\x3d\xd3\xda\x59\x98\x4f\x1c\x94\xbc\xbc\x46\xfa"
+ "\x4a\x61\xff\xbd\xc7\x18\x47\x2c\x17\x99\x97\x98\x07\x98\x9f\x14"
+ "\x8e\x36\x78\xc3\x70\xd4\xc8\xf8\xd1\xf1\x74\x30\x4a\x96\x2f\xb1"
+ "\xe5\xcf\x50\xb2\xd8\x66\x1f\xb7\x78\xb2\x74\x78\x63\xbb\x77\xe6"
+ "\x1d\xb6\xac\x19\xe3\x1c\x79\x13\xe6\xa9\xc7\xcc\xac\x39\xfc\x1c"
+ "\x1e\x39\xaf\xb3\xf5\xb8\x8a\xb2\x23\xe7\x86\x9b\x3c\x4a\x7e\x14"
+ "\xe5\x7b\xe2\x46\xca\xb5\x0a\xf6\x3f\x5b\xb9\x82\x28\x84\x7a\x57"
+ "\x9c\x42\x9f\x26\x7a\xb3\xd9\xdf\x71\xa6\x83\xd8\x3f\xfa\x17\xb5"
+ "\x88\xdb\x8b\xf0\xe4\x02\xbe\x4b\xe1\xa4\xd0\x92\xbc\xd9\xbc\x66"
+ "\x23\xca\x4f\x58\x7d\x23\xe6\x75\xe1\x57\xef\x4b\x3a\x37\x6b\xf6"
+ "\x78\xa7\x00\xdc\x46\xa3\x5d\xbc\xb6\x03\x3c\x65\x67\x3a\x44\x88"
+ "\x71\x94\xeb\x60\x9f\xe4\x80\x1d\xcf\x6b\x3b\x45\x68\xff\x73\x76"
+ "\x35\x7f\x2d\x02\xfd\xaf\x29\xd3\x65\x59\x56\x8f\x6b\x23\xf4\xbf"
+ "\xdb\xa5\x2d\x80\xe6\xb2\x4a\x5f\xe6\xda\xe6\x9b\x1f\xc6\x7c\xa0"
+ "\xde\x80\x09\x58\x57\xe8\xf6\x0f\x12\xde\x57\xb5\xaf\xd5\x2a\x4e"
+ "\x17\x58\xe2\x94\x7f\x48\xf0\x78\x49\xad\x49\xcb\xe9\xb7\x97\x41"
+ "\x5c\xf2\xa6\x14\xb6\xa7\xc9\x01\xed\x95\x70\x1a\x23\xae\xd2\xa5"
+ "\x79\x2a\x4d\x5a\x00\xfd\x98\xa2\xf4\x67\x2f\xcb\x4f\xcc\x5d\x37"
+ "\x1e\x34\xc6\x35\x39\x1e\x9a\xa8\x44\xcd\x67\x36\x4a\xbb\xcf\x73"
+ "\x2e\x33\x79\xa8\x68\xd6\x0d\xa9\x72\x8e\x12\xd0\x5c\x71\xa4\x6c"
+ "\x9a\x37\xfe\xdc\x90\xb1\xbc\x6f\x6a\xd9\x24\x7c\xbc\x46\x6c\x09"
+ "\x0a\x1f\xef\xa1\xca\xb1\x83\x4e\x91\xbb\xa8\xa7\xc4\x2d\xef\xfe"
+ "\xe4\x3b\x48\xfc\xfa\xb8\x11\x52\xe3\x06\xca\xf7\xc5\xdf\xbc\x10"
+ "\xe3\x43\xdc\x29\xda\xe8\xe0\xfa\x33\x6e\x78\xaf\x45\x03\xae\xdc"
+ "\x3c\x4e\x32\x7e\x92\xcf\xf8\xd8\x16\x86\xdb\x6a\x09\xa2\xcd\xe1"
+ "\xed\x32\x69\x9e\x0a\x17\xda\x65\xe2\x7b\x3c\x4e\x33\xcf\x04\xd8"
+ "\x46\x09\xfc\x36\x4a\xfa\xb5\x96\xf3\xf3\xe2\xea\xf0\x36\xb2\xfc"
+ "\x57\x6d\x28\x7e\x3b\x56\x1b\x85\x89\xdb\xc8\x38\x28\x2e\xd7\xf9"
+ "\x4d\xd6\x93\xe5\x87\x97\x8a\xe7\x24\x6f\x62\xdb\x20\x6f\x36\xe4"
+ "\xdb\x4c\xee\x43\x8c\x9f\x55\x5c\xcf\x58\xfd\xc5\xf0\x14\x2c\x67"
+ "\x8e\x65\x53\xc9\xc2\x1e\x97\x73\x6c\x6c\x7c\x3b\x67\x5f\x1a\xdf"
+ "\xce\xaf\x71\x7e\xae\x07\xef\xef\x58\x82\x26\x12\xa0\x5b\xcc\xd7"
+ "\x4a\x63\x95\x9b\xbc\xa9\x8e\xeb\x15\x33\x4e\x30\xbf\xe8\x32\x08"
+ "\x74\x28\xc0\x27\x82\x65\x12\xea\xd6\x60\xc8\x23\x4b\x9c\x2d\x5e"
+ "\xca\x07\x93\xa8\x8a\x05\xc3\xb2\xa9\x8a\xf7\xb9\x66\xa2\xfc\x98"
+ "\xf1\x1a\xdf\xf3\x51\xe6\x4d\xd7\x36\x7f\xeb\x06\x4b\x1c\xdd\xe5"
+ "\x8b\xff\xd6\x70\x8b\x23\x38\x96\x71\x08\x98\x0e\xf0\x71\x33\xcf"
+ "\x53\xd5\xda\x48\x09\xf4\xff\xad\xfb\xe5\x1a\x65\x92\x37\x5d\xed"
+ "\x1b\x95\x60\xfc\xab\xee\x30\xd6\xe6\xf1\xbd\xc0\x43\x9f\x29\x5f"
+ "\xbd\xf1\x5f\xdf\x25\x2a\xce\x41\x76\x5b\x84\x6d\xbd\x05\x7a\x64"
+ "\xc9\x79\x4d\xf0\x9d\x0e\xe7\x68\x80\x4e\x94\xdd\x94\x41\x27\xc8"
+ "\x5f\x13\x9b\x06\x4a\xde\xb9\x34\x0d\x94\x6c\xe5\x78\xc6\xbb\x9a"
+ "\xab\x94\x74\x18\x7a\x8a\xd8\xfc\xf5\x5d\xb6\x62\x59\xbe\x43\x95"
+ "\xcd\x38\x49\xe7\x3d\xa3\x39\xc0\x4b\x49\x8f\x6b\x53\x8a\x21\x07"
+ "\x98\x5e\x2c\x21\xbe\xef\x82\x24\x4d\x23\x0e\xfa\x4f\x61\x89\xda"
+ "\x4b\x3a\x77\x54\xde\x9b\xe9\x2a\x4a\xf0\x39\xf3\x76\xf3\xfd\xb0"
+ "\xfe\x24\xef\x61\xa4\xc9\xf2\xd0\xff\x56\x7a\x45\xa2\xf7\x20\x60"
+ "\x1c\xda\xa1\xec\xa2\x13\xa4\xdf\x28\xf0\x34\xfb\x8a\x62\xbe\x46"
+ "\x58\x2a\xea\xcd\x7e\xa3\x30\xdf\xd9\x54\xda\x3f\x2e\xb9\xd2\x21"
+ "\x2b\x84\x3c\xdb\x84\x71\x69\x4c\x37\x70\xf7\xb2\x49\xdb\x7f\x61"
+ "\xb2\x95\xb8\xcd\x17\x36\x8f\xde\xff\xa3\x49\x64\xfe\x7f\xac\x4f"
+ "\x52\xc1\x2d\x94\xba\xe9\xdb\x66\xfa\x6c\x1a\x99\x18\x0f\x1e\xda"
+ "\x54\xad\x70\xb7\xa9\xd5\xe8\x1f\x0f\x95\xc8\xfe\xe1\x35\xe4\xcc"
+ "\xa0\xf8\x42\xad\x73\x6f\x82\xfc\x5b\x91\xa2\xe2\x8b\x16\x46\xaf"
+ "\x01\xb1\x3e\x6f\x5b\xb6\xda\xb6\x78\xe5\xda\x15\xd7\x5f\x1f\x31"
+ "\x57\x32\xab\xfb\x78\x5d\x89\x6a\x3c\x75\xa5\x1b\xf5\x66\xbd\x04"
+ "\xdf\x68\x7f\xd1\x45\x3e\xed\xe7\xe4\xea\xe6\xee\xb9\x69\x34\xf0"
+ "\x3e\x85\xe6\x4c\x09\xfb\xbc\x95\xe6\xdc\x72\x6b\xee\xc3\x4b\x16"
+ "\x2d\x5e\x17\x16\x7a\x5b\xf8\xba\x61\xe5\x2e\x94\x1d\x3f\xfa\x1e"
+ "\xc8\x8a\xb8\x79\x1b\x78\x6c\xd9\x7c\x5b\x71\x50\x7c\x0a\x79\xcd"
+ "\x7e\x6b\x72\x9b\x0b\x83\xd4\x0c\x59\x26\xbe\xce\x32\x7c\xa8\x3a"
+ "\xe3\x09\x7d\x0a\xb4\x65\x41\xdb\x7d\xd0\xeb\xce\xf3\xfa\x0c\xf2"
+ "\x3d\xd2\x52\xcd\xbe\x9d\xcf\xcd\x51\x3a\xc6\xe6\x54\x84\x8f\xc0"
+ "\x73\x06\x9e\x57\xe0\x79\xb7\x6d\x05\xe6\x3d\x6c\x53\xbf\x86\x6d"
+ "\xea\x37\x8f\x97\x76\x41\xfe\x12\x62\xdb\xa0\x4e\x72\x35\xb1\x0e"
+ "\xe2\xa1\xcd\x45\xbc\x0e\xce\x69\x91\xe7\x6a\xdb\x72\x4a\xe3\xa7"
+ "\x90\x7b\x83\x9b\x53\x45\xf9\xb9\x39\x62\x77\x0e\xdf\xeb\x36\x16"
+ "\xe1\xeb\xe2\xe3\x3e\xa2\x78\x6b\xc2\xb0\x1e\xd7\x66\x07\xf0\x2f"
+ "\xef\x62\x18\xec\x0e\x5c\x79\xf7\x70\x94\x7e\x38\xa0\x1b\xfe\x98"
+ "\xa4\x7e\xab\xeb\x73\x7b\xe5\xb8\xb0\xb9\x29\x4c\xa7\xe3\xbd\xe9"
+ "\xe1\x4a\x3f\x11\x21\xa5\x9f\x6e\xf6\x1a\x7c\x80\xf7\x80\x41\xa7"
+ "\x11\x7e\xf6\x56\x14\x2e\x59\xb5\x64\xb1\x6d\xdc\xea\xe1\x14\xe6"
+ "\x65\x2f\x6f\xc9\x0a\xdb\xaa\x25\xcf\x3d\xbf\x64\xb5\xf4\x90\xc7"
+ "\xb1\x11\x63\x7e\xaa\x48\xf6\x15\x18\xe7\xbf\x6c\xa3\x19\xbf\x5b"
+ "\x1e\x67\xdf\x6c\xa2\xc2\xc7\xf6\xbf\x72\xbf\x50\xa4\x2c\xb5\x47"
+ "\xce\x37\x5e\xd0\xef\x6b\x38\x37\x5d\xcd\x75\x5e\x90\xbe\x0d\x11"
+ "\x9e\x30\xe0\x07\x7e\xcb\xdb\xc0\xa5\x49\xc7\xdb\xb9\x1e\xd7\x96"
+ "\x7a\x03\x6f\x1e\xfa\xe1\x34\x5d\x97\xf2\x4a\xf9\x81\x31\x16\xf2"
+ "\x2f\x62\x7c\x55\x77\xdf\x6e\x39\x04\xda\x88\x97\xeb\xc9\x49\xe7"
+ "\xd2\xb9\x2c\x86\xd9\x89\xfc\xe8\x9f\xe9\x90\x9b\x2c\xdf\x4a\x0d"
+ "\x78\x28\xb3\x8e\xcb\xd3\xe7\x41\xd7\x9c\xa2\x17\xe4\xb9\x1c\xad"
+ "\xec\x5c\x3a\xcb\x14\xf6\x25\xa2\x95\x03\x8e\xdc\xa3\xfd\xe1\x34"
+ "\xb9\x0e\xcb\x77\x11\x00\x16\xaf\x03\x43\x36\x64\xf1\x3d\xc9\x1c"
+ "\xa6\x7c\xc4\x6d\x91\xe7\x22\x50\xd6\xb4\x1e\xd7\x0b\x05\x03\x67"
+ "\x1c\x7e\xc8\x77\x70\x27\x30\x5c\x0f\xbd\x30\x95\xe1\x29\x1f\x78"
+ "\x2f\xec\xf0\x90\xab\x66\x40\x7f\x7a\xa1\x35\x6c\x5e\x86\xfa\xa8"
+ "\x7a\xfa\x51\x17\xe9\x6f\x55\xd9\x9c\xca\x76\xb3\xfc\xdc\xa1\xb7"
+ "\xdd\x68\x0f\xe0\x41\xfe\x6d\x2e\x35\xec\x26\x3c\x7a\xbb\xb9\x7e"
+ "\x5c\xf7\xf0\x3a\xeb\xf5\x4d\xe1\xfa\xf6\xb8\x7e\x38\x26\x8c\xb7"
+ "\x79\x5d\x66\x08\xc2\xd2\x06\x6c\xd9\xb7\x38\xa2\xe5\xc6\xca\x15"
+ "\xb6\xfc\x65\x2b\x9e\xc9\x5d\xbb\xe8\x99\x25\xb9\xcf\x17\x4c\xb0"
+ "\x3d\xbf\xe2\xc9\xfc\x95\x4f\x3d\xc3\x54\xb3\xba\xf0\xf9\xa7\x9e"
+ "\xb1\xb1\x64\xc9\x9d\x35\x67\x4e\xee\x3d\xdf\x9b\xff\xc8\x70\xba"
+ "\x67\x11\xc2\x30\xf3\x9f\x93\x36\x41\x45\x3d\x3c\x7b\xe6\xf7\x73"
+ "\x67\x66\x7e\x6f\x5e\xb6\x3c\xfc\xd2\x1f\x3f\x6b\x45\xec\x04\x11"
+ "\x74\x98\x02\x5a\x9a\x86\xfe\x1d\xd2\x4e\x2f\x1e\x54\x7e\xd3\x7f"
+ "\xd8\x11\xe9\x37\xfd\x87\x90\xe6\x3f\xb2\xe2\x37\x95\xa8\x34\x0f"
+ "\x3f\xc4\xbc\xb8\x5f\xd1\xd7\xb0\xc7\x7a\x5c\x3f\x4a\x19\xa0\xaf"
+ "\x17\xe5\x99\x32\xb6\x57\x52\xeb\xb3\x3f\x82\xfc\xdf\x92\x16\x1e"
+ "\x37\x30\x9f\xfc\x51\x46\xff\x7c\xb2\x5f\xa6\xfc\xa8\xd0\x98\x5b"
+ "\x22\x6c\x16\xe6\x95\xc3\x78\x5e\xa9\xd6\x93\x5e\xfc\xad\xa4\xa9"
+ "\x41\xf9\x3b\x81\x8c\x79\x25\xf3\xb6\xdc\x93\x92\xf3\x8f\x1f\xd5"
+ "\x87\xf3\xb8\x5c\xd3\xd7\x79\x9c\xf3\xc9\xf5\xbb\x94\xa5\xa9\xbc"
+ "\xa6\x0d\xfd\x78\x1a\x74\x05\x8c\x5f\x3d\x42\x8c\x58\x9a\xaa\xd7"
+ "\xc9\xc7\x6b\xdc\xac\x37\xeb\xf4\x94\x7c\x8a\x4a\x27\x0a\xd7\x0f"
+ "\x67\xa9\x39\xe5\x0f\x9f\x67\xb9\x2e\x36\x8f\xbe\x87\x6d\x8b\x78"
+ "\xee\xd4\xe3\x2a\x1d\x3b\x40\xb3\x2f\x1e\x64\x5a\x18\x98\xcb\x96"
+ "\x46\xc8\xff\x6e\x79\x87\x61\x69\xb6\xe1\xf7\xa1\xf0\x7a\x32\x99"
+ "\xaf\xaf\xa2\x1d\x26\x51\xe2\xa1\x52\x39\x6f\x65\x7c\x7a\xe8\x47"
+ "\x36\xa4\x35\x0f\xe0\xaf\xb4\xb4\x1f\x7f\xfa\x3a\x8b\xb1\xc6\xa2"
+ "\xea\xfd\xe2\x6f\x07\xc3\x55\x6c\x3c\x95\xb6\x7e\x29\x9e\x5c\x34"
+ "\x84\x79\xd2\xc0\xd7\xc5\xb8\x7a\x71\xcc\xc5\xb8\x7a\xf1\xd9\x30"
+ "\x5c\xbd\x7c\x31\xae\x5e\xcc\x0a\xdb\x57\xd2\xd7\x51\x5e\xfc\x2d"
+ "\xe3\x8c\x69\x0c\xed\x36\x83\xce\x5e\x1e\xc0\xdf\x8b\x25\x17\xe3"
+ "\xef\xc5\x1d\xb1\xf1\xf7\x62\xda\x0d\x91\x70\x76\xc7\x1a\x37\x92"
+ "\x37\x99\xf4\x73\x61\x3f\x1e\xd6\x38\x46\xce\x49\x03\xdb\x4d\x5a"
+ "\xde\x76\x17\x7e\x78\xf2\x3c\x62\x40\x17\x17\x01\xd5\xd6\x1f\x27"
+ "\x34\x62\xce\xcb\xeb\x4a\x97\x18\x8b\xda\x8c\x35\x0f\xbc\xb7\xf2"
+ "\xdc\x99\xef\x86\xe2\x70\xc6\x27\xe6\x5c\x3e\xd0\x7b\xab\xd2\x4b"
+ "\x7f\x9c\xd3\xbf\xe6\x72\xb3\xaf\x2e\x7e\x13\xd9\x8e\xd4\xdc\xc2"
+ "\xe1\x05\x68\x87\xb4\x5b\x64\xdb\xad\xc1\x60\xe6\x86\xd2\x69\x10"
+ "\xb8\xfd\xf4\x3f\xd8\xd9\xe8\x28\x79\x94\xb7\x68\xc5\xe2\x95\x4b"
+ "\x97\x7e\xb9\x28\x0a\xdf\x57\xab\x72\x69\xa5\x3d\x7c\x47\xe7\xe6"
+ "\xe5\xeb\x7b\x5c\x2f\xb1\xfe\xbf\x50\x8d\x9b\x2f\x41\xfe\x2d\x9f"
+ "\xae\x74\xc9\xc7\xba\xd4\x79\xf0\x97\xca\xc2\xe4\x33\x68\xe4\xa5"
+ "\x6a\xe1\xfa\xf1\xf1\x81\x3e\x7e\x69\xf1\xc5\x7d\xfc\x92\x23\x76"
+ "\x1f\xbf\x54\xa3\xad\xe1\xf3\x38\x2f\x61\xfe\xb3\x4a\xea\x9a\xfc"
+ "\xcd\x76\x10\x98\x33\x77\x61\xbe\xec\xcd\x5c\xd7\x70\x57\xee\xba"
+ "\x38\xb9\x57\xcc\x77\xb0\x04\x2f\x88\x0e\xb6\x45\xe0\xfd\x31\xbe"
+ "\x83\x85\xef\x5e\xe2\xbb\x42\x65\x1a\xbc\x57\x76\x92\x9c\x3b\x22"
+ "\xde\x56\xdb\x29\xef\xe5\x86\xae\xf0\x52\xc0\xd0\xad\x2d\x9b\x6c"
+ "\xf2\x9c\x7a\x85\xea\x8f\x56\xee\x0b\x2e\x2f\x77\x5d\x83\x2a\xe3"
+ "\x02\xdf\xad\x46\x16\xa5\x43\x94\xa5\x5d\x72\xed\x7e\xc4\xbc\x63"
+ "\x83\xdf\x4d\x50\x32\xb4\x7f\xaf\x52\xbf\xff\x98\x79\x9f\xed\x48"
+ "\x01\xb7\x34\xda\x0e\x55\xd9\x0e\x95\xd5\x19\x36\x59\x95\xd2\x06"
+ "\x8a\x2c\x2c\x3f\x79\x9e\xd3\x49\x65\xbc\x86\x81\xf1\xb2\xac\x31"
+ "\x7c\x8f\xd3\xb6\x7e\xd3\x15\x67\xa8\xec\xd9\x4b\xec\x9b\x26\x0e"
+ "\xd8\xc0\x96\x0c\xed\x71\x95\x9b\xfb\x6d\xc4\x5c\x25\x43\x6b\xc3"
+ "\xea\x86\x38\x5b\x98\xad\xa2\x8f\xc7\x63\x9e\x3f\xd6\xaa\x3b\x58"
+ "\x7d\x9d\x54\x3e\x1b\x61\x98\x4f\x94\xcb\x33\x0f\x6b\x83\x34\xa6"
+ "\xe0\x4e\xbe\xbb\xa7\xfc\x59\x7d\x1e\xea\xb5\x15\x73\x7d\xca\x93"
+ "\x18\xae\x07\xe9\x84\xdc\x0f\x28\x77\xf4\xd7\x39\xac\x3c\x03\xb6"
+ "\xc2\x49\x79\x8d\x51\x2f\xe4\x93\x73\x55\xbe\x5f\x3b\xbc\x4d\x8e"
+ "\xa5\xcb\x72\x0b\xf2\xd6\xe5\x2e\x5b\xb1\xac\x70\x38\x39\x16\x3d"
+ "\xbf\x6c\x32\x82\x6c\x4f\xe5\x2d\x2b\xc8\x5d\x26\xbd\x16\x4b\x87"
+ "\xc8\x85\xeb\x0a\x78\xef\xe3\xa2\x3d\xf8\x14\xa9\xcb\x9b\xca\x0f"
+ "\xaa\xf1\xbe\x22\xd1\xa0\x53\x79\xe7\xb8\xc8\xa1\x01\xdb\x2b\x79"
+ "\x37\x71\x7c\x27\x55\x7c\x87\x69\x58\xf9\xf9\xa9\xcc\x52\xfa\x45"
+ "\xc5\xac\x8b\x6d\xb2\x2a\x72\x0c\x9b\x2c\xd0\x77\x0a\xf3\x7a\x18"
+ "\x2c\xd0\x7f\x85\x23\x46\x9e\xb2\x7e\xfb\x4e\xfd\xbe\x73\xee\x2b"
+ "\xe9\xf7\x7e\x1b\xcb\xdb\xf2\x3f\xb9\x1d\xb3\xd9\x77\xaf\xce\x57"
+ "\x15\x87\xc3\xea\x2b\x6d\x79\x19\x16\x9f\x97\x9a\x1c\x08\xb7\x65"
+ "\xab\x9c\x81\xb1\xd7\x6a\x94\x63\xdb\x60\x82\xbc\xab\x1c\xe1\x37"
+ "\x35\xc4\x4b\x3b\x64\xe4\xeb\x71\x55\x26\x18\x76\x34\x9e\xfe\x76"
+ "\x55\x8e\x89\xae\x23\xea\x7e\x3d\xc2\xa7\x0e\xd8\x09\x56\xb0\x9d"
+ "\xe7\x42\x84\x61\xfc\xaf\xdc\x17\x1e\x16\xde\x4f\x77\xcf\x9e\x03"
+ "\x05\x7a\xf5\x12\x74\xd2\xcc\x45\xf9\xf9\x2c\x83\x16\x2d\xc9\x7f"
+ "\x7e\xd5\xca\xd5\x7a\xd7\xdd\xbd\x94\xdd\x51\xcb\x24\x77\xe8\x31"
+ "\xb6\x15\x4b\x96\x2c\x56\x41\x7a\x47\x46\xee\x59\x29\x3b\x86\x4a"
+ "\xcc\xff\xcb\x3c\x03\xba\x62\x95\x55\x98\x2a\x17\xe0\xf7\xb4\x94"
+ "\x3f\xb2\x5f\x2b\x3b\x22\xe7\x68\x95\x7e\x83\xf7\x65\x3f\xa3\xfd"
+ "\x8c\xbf\x6e\x21\xf7\x78\xd0\xaf\x5b\xef\x47\x3b\x87\x60\xfe\x98"
+ "\xc1\x73\x93\x01\x38\x55\x13\xfa\xf1\xbd\xf9\xb1\xd6\xcd\xca\x66"
+ "\xc2\x0c\xd9\x60\x66\xdf\x12\x88\xc7\xfc\xbf\x2c\x5b\xc9\xc9\xaa"
+ "\x9c\xfe\xbd\x17\x53\x3c\xe6\x9b\x55\x79\x98\x7b\xec\xbf\x98\xbf"
+ "\xab\x4a\x2e\xe6\x7b\xb6\xb5\xac\xaa\x36\x70\x6c\xd0\x82\xa2\xbf"
+ "\xad\xb7\x19\x6b\xc6\xb5\xfa\xdd\x08\xfc\xce\x79\x79\x5e\x21\x92"
+ "\x93\xee\x62\xbb\x86\x76\xda\x6a\x56\x34\x55\xe5\x09\xb3\x0d\x4c"
+ "\x39\x45\x5b\x49\xf5\x6d\x55\xc0\xe0\x3f\x0f\x55\x49\x5d\x8e\x61"
+ "\xa8\x71\xbd\x72\xa3\xa2\xaf\xad\x63\x0c\xdc\xf2\x1c\x1e\xdf\x13"
+ "\x06\xf4\xa0\xca\x26\x69\x2f\xa2\x7c\x6b\xf4\x71\xfb\x01\xe7\x80"
+ "\x01\x07\x69\xd1\xfe\x04\x9f\x81\x2b\x23\x4d\x38\x4d\xcc\x5c\x54"
+ "\x80\x09\xf6\xb2\xa5\x4b\x97\xac\x5a\x6d\xf8\x1b\xb7\xaf\xcc\x5f"
+ "\xac\xfc\x8b\xdf\x81\xee\x5f\x0b\x1e\x9e\xc1\x2e\xca\x11\xaa\x5e"
+ "\xa3\xf4\xdd\x09\xbc\x26\x22\xed\x47\xe5\x9c\x6b\xe7\xa6\xbd\xfa"
+ "\xfc\xab\x9d\xb6\xa7\x2a\xfb\xab\x6d\x2f\x2a\xdd\xf6\xca\x9f\xa2"
+ "\x4e\x5e\x43\xb7\xe5\xb5\xd6\x6e\xfa\x26\xfb\x55\x94\x67\x0a\xf6"
+ "\xec\x14\x1d\xbc\xb6\xda\xe3\xda\x96\x62\xdc\x49\xc7\x7a\x53\xf9"
+ "\x4e\xe5\x4b\xbb\x61\x05\xdb\x8a\xec\x7c\x4d\x2b\xf7\xa6\x89\xe4"
+ "\x0f\x16\x42\x3f\x4b\x64\x9e\x48\xf2\xb2\x0d\x2f\xfb\xc0\xda\xb6"
+ "\x80\xf5\x3a\x96\x65\x7c\x6f\x43\x07\x6d\x9b\x00\x19\x0d\x58\x3b"
+ "\xf7\xf9\x92\xbc\x69\x5b\xd6\x53\x02\x97\x01\x79\xed\x69\xac\x63"
+ "\xdc\x6e\x73\xbc\x0f\x59\xa6\xcb\x6c\x0f\x97\xe3\xa1\x6d\xb3\xf4"
+ "\x75\xff\x59\x22\xb1\xdb\xc1\xb2\x50\x9d\x17\xdd\x76\x40\x94\x23"
+ "\xac\xec\x83\xfd\xc0\x23\xdf\x79\xb8\x5f\xdd\xf7\xb7\xad\x51\xa5"
+ "\x6f\xe3\x75\x8d\x80\x28\x6f\xeb\x42\xf8\x18\x84\x7b\x54\xf8\x87"
+ "\xfb\x33\x43\x01\x9e\x27\x5f\xc7\x77\x57\xa2\x4c\xb4\x3f\xa9\x5a"
+ "\xd1\x7d\xdb\xff\xbd\xa9\x84\x1c\x7c\xdf\xa5\xf2\x85\x75\x81\xef"
+ "\x5e\x6e\xe5\x7b\x25\x91\x1e\x73\xa7\xad\x5e\xc0\x6b\xd5\xed\xc9"
+ "\x41\x77\xdb\xb7\xaa\x73\x02\x5b\xdb\x18\x9f\xa8\x63\x96\xbe\x16"
+ "\x9c\xd5\xe3\xda\x0e\xf9\x77\xad\x3e\xaf\xde\x9e\x65\x94\x81\xb1"
+ "\xd4\x07\x1d\x7c\x2a\xeb\xe1\xc0\x81\x1d\xbf\x09\x95\x72\x5f\xde"
+ "\x83\x31\xc4\x22\xd8\x0e\x6e\xe0\x0e\xbf\xed\xa5\xc6\xb8\xca\x65"
+ "\xeb\x78\x98\xc3\xeb\x86\xbc\x66\xa8\x97\xc5\xbe\x34\xe3\x0c\x98"
+ "\xf8\xb6\x6b\x17\x4e\xd7\x01\x66\x02\x74\x04\x9f\x7e\x77\xdb\x84"
+ "\xca\x73\x6c\x33\xe9\x81\x0e\x70\x9d\xc8\x0d\xa6\xf0\x7e\x56\x92"
+ "\x71\x37\x5e\xed\x39\xc6\xfd\x76\xff\xc0\x3e\x15\xf2\xa3\x2f\xc1"
+ "\x5b\x25\x1d\xb4\x23\x89\xcb\x65\xbe\x62\xba\xe8\x45\x3f\xa3\xaf"
+ "\xf3\xc4\x85\xd3\xf5\xb6\x15\x94\xd4\x49\x3b\xa6\x70\x7f\xf3\xde"
+ "\x32\xdb\x32\x22\xcc\xc2\xbe\xfc\xdb\x69\xc7\xb5\xdc\xd7\x5c\x17"
+ "\xe0\x70\x5a\xb0\x27\xe7\x3e\x3e\xc7\xcd\xf2\x77\x63\x11\xf4\xf7"
+ "\xa5\x2c\x97\x5e\x7e\x8d\xd7\x03\xf8\x0e\x26\x7e\x77\x2e\x16\x9a"
+ "\xa4\x95\xf5\x4c\x2b\x2f\xbf\xb6\xb1\x4b\x68\x5f\xb8\x48\x1c\xf5"
+ "\x13\x7d\x61\xa2\x60\xc0\x14\xc7\xf5\x36\x39\x4f\xf3\x59\xf3\x3a"
+ "\x72\x3b\x4a\xd9\x2e\x2e\xa1\x62\x3d\xa5\xf0\x39\x7d\xbe\x5f\xa8"
+ "\xc5\xcf\xf7\x3f\xd7\xd0\x5f\x83\x3b\xa8\x61\x0d\xfb\x5c\xd9\x99"
+ "\xf1\x37\xc7\x0e\xde\xaf\x1b\x86\xf7\x61\xb6\xef\x73\x59\x3b\x3c"
+ "\x7f\x3b\xfe\x0f\xfa\x5b\xc3\x3f\xc8\xf6\xa8\xfc\xf6\x35\xe5\xfc"
+ "\x95\x9a\xd2\xff\x4a\xce\x0e\xa1\xf1\x1c\xb1\xf8\x59\x2e\xa3\x14"
+ "\xb0\xea\xf8\x4c\x7b\x8a\xd6\x6d\x1d\xae\xee\xcd\x65\xdb\x48\x1f"
+ "\x35\xac\xf8\x03\xd7\xf1\xb9\xbd\xe7\x28\xa1\x61\xc5\x9f\xe4\xbb"
+ "\x9a\xbb\x9d\xae\x73\x2f\x6e\x65\xfd\x34\xc8\xe7\xf9\x79\x7f\x13"
+ "\xf3\x15\xad\x92\xeb\x18\x52\xf5\x06\xbe\xcc\x46\x7e\xe8\xaf\x46"
+ "\xfe\xa9\x9c\x7f\x0f\xe3\x03\x75\x6a\xce\x56\x38\x69\xc2\x2c\x5f"
+ "\xd5\x19\xf8\xc9\x09\xc7\xcf\x8e\x2a\xc6\x0f\xfb\x81\xd5\xd0\x5f"
+ "\xa8\x5b\x3a\x70\xa0\x19\x65\xa0\xce\x09\xfa\x7a\x70\x42\xc5\x39"
+ "\x4a\x6c\x58\xc1\xf7\xcb\xbd\x7c\xde\x92\x65\x4e\xd0\x2e\x9c\xa9"
+ "\xaf\x3c\x4f\x66\xee\x37\xde\x03\xaa\x94\xf1\x12\xe7\xad\xdc\x67"
+ "\xbe\xa4\xcf\xea\xf0\x03\x8f\x7e\xb6\x9f\xe9\x0e\xcf\x03\xe8\xaf"
+ "\x52\xd4\xa1\x00\x7d\x55\xc7\x4f\x9d\xc7\x5a\xd9\xd7\x89\x3e\x1f"
+ "\x1b\x08\x07\x1f\x05\xf9\xfe\x57\xb9\xde\xf5\x72\x81\x06\x3e\xe2"
+ "\xf5\xa0\xbd\xdb\x28\x51\x73\x6d\x2d\xd8\x03\xb9\x59\xb3\x4d\x9e"
+ "\x75\x4e\xe1\x35\xd2\x5d\xf2\xbe\x8e\x9d\xfd\xfb\x9f\x3f\x1e\xc5"
+ "\xe7\x41\x5f\xae\x33\xf1\x1a\x52\x99\x37\x43\xa7\xf3\x0c\xa4\x81"
+ "\xfc\xb7\xea\xfc\xb0\x5d\xca\x05\x96\x23\x83\xcd\x4d\xa0\x17\x37"
+ "\x89\xdd\x39\xc4\x7b\x49\x89\x9b\x84\x2f\xb1\xc3\x22\x5a\xfc\x4d"
+ "\xf2\x1c\x70\x8b\x3f\x24\xf7\x92\x10\x1f\x37\xcf\xef\xb3\x40\x8f"
+ "\x3e\xc6\xb8\x33\xc2\x79\x1f\x8a\xd7\xe8\xe6\xf9\x85\x2f\x73\x9d"
+ "\x85\xef\xd7\x1c\x23\xf7\x21\xf4\xf0\x16\x2b\xe6\x20\xeb\x7c\x16"
+ "\xb4\x3d\xd8\x0f\xab\x3b\x27\x9e\xf9\x0d\x69\x53\xfb\xd3\x76\xe7"
+ "\x98\xdd\x0e\x55\x66\x58\xd8\x90\x4c\x07\xf2\x72\x5f\xe9\x61\x4a"
+ "\xff\x7e\xc5\xd1\x3f\x3f\xe5\xb3\x10\xdd\x18\x83\x57\xe7\xc4\x69"
+ "\xdd\x39\xa6\x10\x60\x83\xf6\x53\xe4\x3d\x9f\x41\x9f\x7e\x6f\x16"
+ "\xdf\xf5\xdd\x4a\x62\xeb\xf2\x34\xa4\x33\x33\x5c\xf6\x2f\xc1\xf7"
+ "\x8d\x88\x11\xf9\x87\x62\xdf\x3d\x38\xbf\xab\xa1\xf8\x51\xd0\x53"
+ "\x75\x09\xf3\x73\x28\xf1\xf4\x42\xdb\x72\xd6\x87\x5e\xf9\x82\xf1"
+ "\x19\x02\x8f\x85\x92\x4e\x2f\x9c\xdc\x45\x71\xc5\xa0\x5b\xb5\x9e"
+ "\x55\xfd\x35\x37\x78\xd0\xa9\x09\xe8\xb4\xd5\x89\x4c\x37\x16\x2f"
+ "\x99\x44\xf9\xe9\xc5\xd2\xd6\x6d\x64\xa6\xc7\x1d\xe8\xa2\xa6\x92"
+ "\x7f\x51\x53\xd0\x5d\x72\xf8\x9c\xcf\xac\x6c\xde\xcc\x80\x5b\x3d"
+ "\x91\xe3\x9c\xa0\xd5\xdc\x50\x1d\x0d\xb6\xcf\xc0\x73\x6d\xc8\xeb"
+ "\x93\x6a\xde\x59\x5d\x62\xcc\xb1\xbf\xa4\x0d\xad\xec\x93\x43\x08"
+ "\x2b\x69\xdb\x26\x7a\x50\x17\xa7\xe8\xb1\xd3\xe4\xf5\xbc\xbe\x57"
+ "\x5d\x8f\xf9\x4e\xba\x0e\xf7\xac\x0e\xb7\xf5\x52\x70\x99\x66\x9a"
+ "\xaa\xe5\x1e\x17\xda\x34\xf1\x58\x08\xb0\x43\x23\x27\xa5\x40\xc6"
+ "\x3b\x9d\x5f\xf0\xfa\xef\xae\x6b\x51\xce\xb1\x96\xe0\x31\x62\xdf"
+ "\x3e\x7b\x35\x8c\xb5\x67\xad\xa4\xdb\xf7\x39\xcf\xd0\xab\xc3\x34"
+ "\x61\x4f\xc1\xdc\x9f\xf7\x76\x9c\x2c\xe3\x78\x5d\xa1\x38\x44\x57"
+ "\xb8\x0b\x3d\xc4\xfe\x28\x00\x63\xc4\x9f\x79\x1f\x0d\x72\x22\x24"
+ "\xac\xa6\x77\x2e\x40\x6b\x80\xec\x94\xfe\x29\x36\x7f\x7d\x57\xf2"
+ "\x26\xba\x4b\x98\x2c\xd2\x3e\x54\xdb\x3a\xb7\x0b\x7d\x2b\xef\xa2"
+ "\xd4\x2a\xbc\x39\x61\xb6\x84\xf1\x28\xab\x9c\x6d\x09\x45\xa2\x77"
+ "\x4c\x8d\x5c\xc3\x3c\x0d\x7d\xf3\xd5\x43\x1e\x7a\x45\x9e\x47\x28"
+ "\xe3\xf3\x22\x52\xc6\xee\x1a\xe7\x1b\x31\x9e\x7d\x11\xb3\xcf\xe9"
+ "\x38\x6d\x4d\xa8\xbe\xf2\x73\xa9\xab\x73\xdc\x90\x16\x6f\x4f\x83"
+ "\xa8\x1a\x5f\xcf\x67\x23\x75\xd8\x16\xc0\xfe\xa7\xd8\x3a\x1e\x73"
+ "\xea\x5d\xca\x9f\x69\x15\xbf\xbf\xea\xe3\xf8\x60\x9f\x9d\xf0\x9e"
+ "\x5f\xd3\xcb\xfb\x0a\xaf\x5a\x85\xeb\xba\x86\xee\x94\xf1\xf5\xf3"
+ "\xad\xac\x9f\xed\x9a\xe6\x31\xed\x9c\xaa\xaf\x29\x4a\x5f\x1b\x83"
+ "\xcd\xb7\xc4\x6e\xeb\x70\x37\x80\x60\x6e\x9c\x7a\x8a\x6a\x7e\xde"
+ "\xeb\x22\x53\x1f\xf4\xca\x5e\x13\xa5\x80\xbf\x12\x2b\x46\x53\x1a"
+ "\xe2\x46\x9f\xa2\x5d\xe5\x41\x13\xa5\xe2\x97\xe2\xfb\x7a\xde\x30"
+ "\xc0\x95\xeb\xad\xcd\xe7\x78\xbd\x6c\xd7\x69\xa9\xf7\xed\xa2\xb1"
+ "\x1a\xe0\xf1\xde\x51\xe5\x68\x1a\xcb\x6b\x9e\x08\xb3\xe7\x86\xd4"
+ "\x1e\xaa\xb1\xae\xb1\x79\x34\x4d\x88\x2c\x77\x57\xa1\x5a\x13\xad"
+ "\x91\xfb\x2a\x6b\x7d\xf4\x0d\xcc\xd3\xda\x3b\x69\x77\x9e\x70\xc5"
+ "\x0b\xf1\x75\xab\x49\xd9\x39\xec\x7e\xc8\x52\xad\xe8\x4e\xee\x19"
+ "\x82\xde\x78\x4f\x56\xdf\x9f\x8a\x93\x3e\x46\x92\x3f\xf7\xf1\xdd"
+ "\xd6\x61\x6b\xce\x29\xb2\x1e\xba\x5f\x80\xd0\xe6\x9b\x17\x32\x0c"
+ "\xae\x4f\xee\x22\xb5\xb7\xc5\x3e\x03\x80\x63\x79\x66\xbf\x6c\x17"
+ "\x25\xbe\xb4\x8b\x52\x9a\x97\x72\xbb\x76\xab\x3c\x26\x33\x71\x7d"
+ "\xb5\x32\xe6\x33\xd0\x04\xea\xcd\xe5\x31\x6d\xb4\x04\xcf\x36\x38"
+ "\x0b\x85\xd6\xb0\x9c\xf5\xda\xdd\xef\x37\xac\x3a\x40\x99\x1d\x41"
+ "\x75\xbe\x75\x01\xf9\x6a\x01\xaf\x76\x34\xa5\x00\x56\xb3\x3b\x9f"
+ "\x78\xef\xe3\x86\x86\x55\x07\x19\xf6\x47\x3c\x16\x94\x03\x3f\x6a"
+ "\x4c\xa8\xd9\xe1\x0e\xb4\x52\x33\xf8\x7b\x5e\x81\x08\x31\x9c\x4e"
+ "\xaa\xf9\x9a\x6c\xef\x6e\xab\x2d\x57\xf9\x75\x90\x6d\xed\xdf\x33"
+ "\xd4\xdb\xe1\x3e\xc7\xf0\x6a\x26\xb8\x17\x42\x5f\xd4\xdb\x64\xe0"
+ "\x5a\xd1\x57\xcd\xb2\x86\x55\xfb\x88\xfb\x87\xd3\xe3\x3b\xc7\x0d"
+ "\x2d\x26\xf7\x74\x64\xbf\x70\x1a\xc4\xbd\x08\xb8\xb7\x0f\xec\x7b"
+ "\xf3\x7e\xec\x40\x9a\x9a\x5d\x7c\xb6\x6d\x57\xd3\x6e\xe0\x48\xed"
+ "\x13\xec\x3e\xcf\x75\xf5\xd0\x6e\xbf\xbb\xf0\x5f\xb1\xed\x5b\xc1"
+ "\xfb\xa0\xfb\x4d\x2d\x72\xff\xaf\xe6\x93\x79\x41\x4d\x28\x79\xb6"
+ "\xa7\x5a\x83\x1c\xf0\xe0\xc9\xb2\x40\xca\x93\x49\x6c\x53\xb4\xe7"
+ "\x55\x4b\x9c\xea\x5f\x6e\x0b\xeb\x2b\xb1\xfa\x38\x6c\x6f\x92\x6d"
+ "\x7c\xfb\xfb\x98\xef\x85\xd4\x78\x7f\x99\x6d\xf7\xfb\xac\xa4\xe8"
+ "\x4f\x54\x01\xee\x8b\xba\xee\x56\xad\x8f\x65\xd5\xdd\x49\xa7\xf3"
+ "\xf9\xac\xa5\x61\x67\x0c\xfe\xcd\xcb\x55\xb6\xe1\x56\x96\x51\xb5"
+ "\x26\xc5\x3b\x5c\x47\x3d\xef\x0e\x65\xdf\xb1\x27\x07\xf9\x77\xc4"
+ "\x6c\x6f\x3c\xe4\x8e\x0b\x62\x1a\xed\x61\x3d\x52\x40\x56\x61\x3c"
+ "\xb8\xc2\xed\xef\xd5\xef\xe4\xdc\x7b\x35\xf4\xf3\x2b\xf8\xac\x95"
+ "\x51\xb7\xcb\xdb\x47\xdc\xe3\x51\xf3\xa4\xbd\x36\x63\x9d\x4a\xa4"
+ "\x00\xc7\x2e\x8b\xe0\x73\x97\x7c\x76\xc6\x3f\x62\xbe\xcf\x37\x62"
+ "\xa9\x4d\xf1\xcd\xde\x0c\xe8\xa9\x52\xde\xe6\x06\x48\xca\x74\xde"
+ "\x27\xc6\x1c\xec\x0a\x6e\x33\xe0\x60\xfe\x57\x70\x50\x8d\xe7\x0a"
+ "\xf6\xa0\xeb\x44\x46\xdb\xd0\x26\xd9\x36\xb4\x51\xb6\x4d\xbf\xb3"
+ "\x0a\x65\x7d\x22\xd7\xde\x2f\xab\x3d\x7b\x95\x8f\xb4\xaa\xf9\x3e"
+ "\xbe\x8f\xb7\x93\xea\x36\xca\xf3\x34\xe8\x13\xb5\xa7\x52\x3b\x4d"
+ "\x0c\x7f\x69\xf8\xe5\xc1\xac\x35\x2b\x98\x4b\x6d\x2f\xb3\x7f\x4b"
+ "\xfd\xde\x3b\xc0\x5e\x22\xb6\x2e\xb5\xc9\xf3\x8a\x28\x8f\xef\x0d"
+ "\x1d\x90\x43\xb5\x5d\xdc\x57\x93\x0e\x50\xba\xa2\xc3\xda\x13\xbc"
+ "\x6e\xad\xe6\x8c\xb5\x65\xa0\x7b\x79\x0e\x7c\xc0\x26\x3d\x4e\xda"
+ "\xa4\x87\xcb\xd8\xcb\xac\xa3\x94\x77\x62\xe4\xdc\x2a\xbc\x17\xc9"
+ "\x73\x97\xa8\xef\xda\xa0\x21\xff\x6a\x8b\xd8\xbe\xa9\xdf\xb6\x60"
+ "\x1d\x68\xa5\x58\x9d\x4d\xef\x71\xd5\xf5\xfb\x7f\x94\xf7\x9c\xb9"
+ "\xc4\x51\x4e\x97\xb9\xee\xac\xb4\x3d\xa8\x94\x7e\x14\x4e\xe9\x67"
+ "\xf6\xea\xa6\xe8\x6b\x24\x76\x3e\x0f\x80\xbc\x98\xff\x1e\x91\xf3"
+ "\x7d\xc6\x01\x97\x2d\xeb\x2e\xef\x1a\xab\x2b\x1c\xd8\x43\xaa\x95"
+ "\x6b\x2d\xca\x46\xb6\xae\xcc\xa0\x11\xb4\xf7\x0a\xe5\x6f\x74\xef"
+ "\xf9\x23\x13\x48\xd2\x40\xb7\xb0\x0e\xff\x66\x0d\xd3\x64\xdd\xc1"
+ "\x70\x3c\x65\x06\x35\xa7\x92\x41\xb5\x35\x42\xf2\x7a\x6d\xcd\x97"
+ "\xeb\x13\xaf\x0d\x33\x74\x11\x85\xe7\x14\xc8\x97\x9f\x1c\x97\xb8"
+ "\x2e\x6b\xe3\x3b\x77\x2d\x1b\x8a\xd9\x8f\xd5\x6b\x7f\x61\x7f\x61"
+ "\xc1\xb2\xb6\xea\x10\x9f\xef\xc4\x38\xab\x95\xb5\xed\xef\x2c\x20"
+ "\x53\x2e\x7e\xec\x77\x8b\xe7\x57\xc2\x09\x5d\x20\x19\xfa\x09\xf8"
+ "\x7c\xe3\x32\xb2\x3c\x9e\x07\xd8\x4e\x7b\x2a\xfb\xf3\x62\x5f\x5e"
+ "\xec\x8f\x2f\xe4\xb4\x8f\xc4\xfb\x28\xe8\x73\x29\x22\xb1\xad\x94"
+ "\x6d\x6f\x42\x2e\x01\x79\xdc\xc6\x3e\xc5\x4c\x6e\x5f\x80\x36\x9e"
+ "\xa6\x04\xf6\x17\x16\xdc\x3a\xbe\xba\xc5\x7f\x42\xce\x2d\x92\x0b"
+ "\xa0\x4f\x6b\xf2\x8c\x8f\x55\x1b\x31\xbe\x04\x63\xfc\x16\xd5\xee"
+ "\xb3\x42\xb5\x5b\xd5\x9b\xeb\x2f\x65\x1c\xe6\xbd\xc5\xb2\xee\x3f"
+ "\x79\x36\x08\xf8\x5a\xd9\xc7\xfb\x42\x65\x1f\xd7\xa9\x73\xa1\x4d"
+ "\x54\x5c\x28\xba\xdc\xd0\x8d\xd9\x16\x94\xcf\xfe\xb2\x6d\x0f\xb7"
+ "\x91\xdb\xc7\x65\xff\xed\xdc\x69\xe9\xff\x2c\x88\x6f\x67\xbe\x9e"
+ "\xc7\x8b\x3c\xde\x26\xea\x2d\xfb\x58\xb6\xbd\xc5\xaf\xf2\xe6\xca"
+ "\x77\xe4\x0f\xc7\x83\xde\xe6\x7e\x3c\xa0\xed\xdc\x3e\x6e\x7f\x90"
+ "\x71\x02\x1c\xe8\x6d\xb5\xf6\xe9\xed\xe4\x36\xfe\x15\xa3\xce\x2e"
+ "\xb4\x13\x6d\x95\xed\xec\x43\x3b\x8f\xe6\x11\x05\xb6\x65\xd3\x17"
+ "\xc9\x1f\xd7\xf1\xfc\xd0\xf9\x77\xe8\xd1\x45\x55\x84\x79\xa0\xf9"
+ "\x8d\xe2\x2a\xd3\x8f\xa1\x9b\x14\xfb\x30\x1f\xf4\x89\x2e\xd6\xf7"
+ "\xdd\x05\xf8\x05\x6b\xe4\x5d\xc6\x52\x3f\xe6\x7b\x67\x9f\x43\x9b"
+ "\xb4\x4f\xa8\xb8\x4b\x74\x41\x37\x0d\xb8\x83\x48\x93\x87\xf6\x63"
+ "\xfe\xd8\xa9\xd7\x9f\xd3\x6e\xfc\x5c\xb5\xcb\x92\x4f\xa9\xef\x3d"
+ "\x5a\x6a\x72\xb7\x96\x92\xd1\x96\x27\x90\x0e\xed\xb1\x02\x56\x92"
+ "\xbc\xeb\x01\xed\xdc\x8d\x7a\x06\xc2\xda\xd4\xec\x0d\x00\xe6\x3f"
+ "\x69\x78\x16\xc5\xed\x3a\x83\x76\x9c\x21\x6b\x55\x31\xf4\xaf\x87"
+ "\x59\x5f\xfc\x5f\xaf\x5f\x99\x43\x63\x3d\xf4\xda\x01\x25\xe3\xa5"
+ "\x2f\xa2\xab\x4f\xd1\x4f\x9a\xfb\xfd\x0d\xb1\x0f\xb7\x11\xe3\x6b"
+ "\x98\x8e\xa4\xdf\x21\x1e\x33\x7a\x40\x33\x6c\x97\xb3\x16\x65\xf4"
+ "\xd8\x47\xc9\xfa\xb8\xa6\x12\xbe\x13\xf1\xcd\xf7\x50\xa5\xf2\x9a"
+ "\x00\xf2\x55\x0b\xe0\x8c\xe1\x43\x9f\xdb\xc2\x4f\xc6\x61\xcc\x73"
+ "\x2b\xbf\xa2\x69\x28\x23\x87\xe7\xbe\xf5\xc5\x3e\xd3\x0b\xbf\xa2"
+ "\x09\x97\x27\x53\x7e\x12\x1c\x4c\x7e\xf3\x1e\x08\xc3\x43\xdb\x46"
+ "\x9e\xa2\x7d\x1f\x45\xf2\x98\x4d\xca\x32\x25\x07\xf7\xed\xe7\x7d"
+ "\x87\xcb\x2b\x77\x9f\xd4\xe1\xd8\x7e\xea\x32\xf3\x1d\x30\xea\x81"
+ "\xf7\x41\xcf\x5e\x5d\x3e\x1e\x5e\x37\x0f\x06\xab\x7c\xa7\xf4\x41"
+ "\xe7\xac\xd8\x09\x79\x01\x5d\xe1\x88\x95\xfd\x82\x63\xec\xdc\xe7"
+ "\xa7\xd5\x7b\x28\xc1\x79\x9a\xd7\x64\xe6\xd2\x91\x9a\x34\xda\x8b"
+ "\x39\xb9\xe8\xb6\x8f\xdc\x7e\x8e\xed\x28\x94\x0c\x61\x9d\x94\xcf"
+ "\x65\x8a\xd5\xf6\x94\xca\x9d\x86\x0e\xff\x7a\x73\xd1\x79\x32\xa9"
+ "\x7b\x57\x5e\x6f\x9a\x65\x13\xc1\x1d\x26\x2d\xaf\x86\xfd\x68\x8d"
+ "\x9c\x97\xc6\x7e\xb4\x0c\xdf\x54\x52\xf7\x71\x80\xe7\xba\xad\xc3"
+ "\xcb\x57\xd1\x04\xf6\xa7\x67\xf1\x29\x5d\x4e\x8d\xd7\xaf\xb3\x8c"
+ "\x4d\xd1\x6d\x07\x52\x94\xbf\xaa\x7d\xb3\x6a\xcf\xa1\x2c\x19\xff"
+ "\xd3\x89\x21\xcc\x61\x24\xdc\x55\x34\xb6\xe6\x1c\xd9\x59\x0f\xca"
+ "\xfd\x44\xe9\x6c\x3c\x2f\x9c\xeb\xb5\x88\xd0\x67\x76\xda\x73\x6a"
+ "\xc0\xdf\x9e\x6f\x35\xfb\xe8\x13\xd6\xc1\xf6\x5d\x2a\x47\x49\xfb"
+ "\x21\xe9\xe3\x45\xdd\xcb\x47\xb4\x63\x1b\x99\xf9\x1e\x5a\x5e\x17"
+ "\xe4\x75\x66\x3e\x43\xa4\xc6\x90\x9f\xd6\x18\x7e\xc8\x06\xdd\x93"
+ "\xac\x52\xf3\x1d\xed\x0a\xcc\xbf\x7c\x3d\x0d\x0d\x6b\x78\xcc\xf8"
+ "\x69\x07\x9f\x5b\x1a\x98\xe3\xfc\xf4\xcf\x1c\xc7\x61\x6c\x57\x9f"
+ "\x2e\x71\xf9\xb3\x44\x9e\xf7\xe8\x73\xc6\xf7\x6c\xfd\x61\x4a\x87"
+ "\xe1\xb1\x8c\xeb\x50\xab\xd6\xa4\x93\x7b\x5c\x3f\xb3\x1b\xe3\x19"
+ "\x8f\xeb\xea\x0e\xdc\x9f\x4d\xf7\x98\xaa\x07\xbd\x3b\xdb\x58\xa3"
+ "\x97\x36\x73\xec\x5f\xcc\xf5\xb3\x7c\x63\x7c\x93\x77\x9c\x6c\x1e"
+ "\x7d\xcf\xea\x75\x34\x66\xfe\xd7\x12\xa4\x1f\x0f\xbe\xcb\x54\x8d"
+ "\xbb\x3f\xdb\x31\xb0\x37\x97\x2e\xf1\x2d\xef\x2f\xe4\x39\x86\x09"
+ "\x63\xb0\xf2\xa9\xe7\x55\xe3\xaf\x71\x66\xfe\x67\x6f\x85\x95\x73"
+ "\xbc\x7f\x1c\x45\x19\x6c\x23\xc2\xf0\x95\x6e\xf2\xb3\x52\x2e\x83"
+ "\xe7\x56\x6a\x7c\xfd\xd9\xa5\xce\x17\xda\x19\xbf\x9a\x3e\x9f\x74"
+ "\x7b\x3f\x55\xf8\x75\x50\xfc\xe4\x1d\x64\x7d\xaf\xd8\x63\x4e\x56"
+ "\xbe\xa1\x2c\xed\xb4\x7f\x1c\xc7\x33\xad\x37\x4c\xe2\xb5\xb8\xfd"
+ "\x9b\xdc\x3c\x6e\xf7\xe5\x24\xce\xe3\xb9\xbe\xd4\xc5\xf7\x17\x4c"
+ "\x44\x3e\x84\x8d\x7c\xf7\x4c\xc0\x5c\xb9\x9e\x26\xf0\x3d\xa1\x08"
+ "\x97\x7b\x5b\xbe\x6b\x9e\xe9\xf9\x66\x2a\x59\xbf\xb9\x83\xcf\x16"
+ "\xec\xaf\xc6\xfc\x52\xe2\x5b\x96\xbf\x6d\x79\x16\xfb\x13\x7c\xb3"
+ "\xd7\x33\x44\xf5\xd5\xcf\x6f\xc3\xb7\x7d\xe0\x7b\xff\xdf\x8d\x7d"
+ "\x01\x0f\xfd\x7c\xaa\xdc\x07\x65\xfb\x69\xf0\x8a\x56\x35\xef\xd8"
+ "\x80\xcd\xd1\xcf\x6f\x53\x75\xf9\xf9\x6d\x47\x0a\x88\xd7\xbd\x8f"
+ "\xef\x95\xbe\xc1\x7e\x0e\x7e\xfe\x59\x86\xbe\x1e\x73\x4c\xd2\x15"
+ "\xeb\xbb\x3f\xe4\x39\xd8\xa7\xec\xdb\xf8\x38\x8f\x13\xb9\x0e\x4a"
+ "\x97\x3a\x3c\x74\x5d\x0d\xf4\x13\xd6\xfe\xd7\x78\xad\x2f\xa6\x4c"
+ "\xdc\x45\x24\xf3\x6c\x9d\x67\x93\xf6\x6b\x5b\xf3\xeb\xf1\x4c\x10"
+ "\x5b\x33\x8f\xe1\xc9\x34\xe7\xc1\x33\x05\xcf\x56\x3c\x53\xc5\xd6"
+ "\xe5\x55\x4c\x97\x98\xc3\x5a\x31\x4f\xe0\x3d\x55\xeb\x60\xe7\x1e"
+ "\x19\x37\xee\x2d\xdf\x27\x65\x8f\xfb\x0b\x6b\xb3\x0f\xfa\xd9\x1e"
+ "\xa2\xd5\x41\xd1\x6b\xfb\x06\x9f\x2f\xfa\x85\xd5\xb9\x87\xed\x60"
+ "\x7e\xee\x8d\xb4\x83\xf9\x45\x22\x7e\x73\xf0\x03\xd7\xfd\xe2\x18"
+ "\x7e\xd6\x81\xdf\x2f\x13\x7b\x5c\xbf\xb0\x02\x8f\x52\xc7\xba\x3c"
+ "\x99\xf8\x0b\xe9\xa7\xad\x92\xe7\x45\x23\x26\x36\xa8\xf6\x2e\x25"
+ "\x7c\x27\x88\x11\xcb\xd3\xf5\xf6\xfa\xf0\x9d\x62\x73\x62\x5c\x1b"
+ "\x01\x9c\x8c\x46\x9b\x47\xe4\xd7\x73\x7b\xb9\xbe\xdd\x23\x32\x8f"
+ "\x85\x9f\xf9\x64\x98\xdc\x7e\xdf\x08\xe4\x03\x2e\xc5\xcd\xbe\x3a"
+ "\x03\x9f\x3a\x9e\x78\x0f\xca\xd4\x0d\x18\x4a\x0f\x42\x7a\xc0\x30"
+ "\xd2\xf7\xe3\x1e\xe9\xe4\x3c\x11\xe9\x30\x27\x4e\x30\xce\x93\xf6"
+ "\xb8\x7e\x69\x7e\x3f\x9f\x74\x9f\x0a\xbf\xb0\xfa\xc3\xf2\xb2\xff"
+ "\x8c\x58\xf9\x51\x66\x82\x2a\x33\xf3\x58\x27\xfd\xe2\x6b\x7a\xb9"
+ "\x81\xc1\x78\xa9\xf8\x7a\xe8\x77\x90\x66\x93\xd5\xbc\x6f\xba\x7b"
+ "\x8c\x9f\xdc\x35\x1a\xc6\xfc\x4c\xc8\x23\xd1\xd0\x49\xbf\x7c\xbb"
+ "\x25\xd0\x75\x99\xe3\xe1\x2f\xd5\x1d\xa1\xbd\x25\xe4\x2e\xba\x45"
+ "\xde\x8f\x7d\x86\x0e\xfc\xa7\xdb\x27\xfd\xcc\xf3\xbb\xb4\x07\x67"
+ "\x9b\x0f\x1e\x1b\x30\xc7\xee\xf7\xd3\xa8\x21\xed\x5e\x0e\x47\x98"
+ "\xdb\xef\x93\xfe\x1c\xfb\x6d\xd2\xb7\xcd\x6d\x55\x3c\x75\xe0\x35"
+ "\xe9\xcb\x81\xeb\x1b\xbc\xaf\x81\xeb\xac\x55\xcd\x6d\xe5\x36\x38"
+ "\x31\xff\x73\x07\x7b\x1a\x98\x27\x6c\x6b\x78\xad\xf0\xc0\x46\xd0"
+ "\x9d\xd0\xb6\xce\x6d\xbd\xbc\x36\x1c\x90\xe7\xe7\x9d\x41\x71\xc6"
+ "\x37\x62\x2e\xaf\x31\x9b\x2a\x8b\x87\x24\xcc\xac\x11\x0d\xdd\x23"
+ "\x33\x21\x63\x0f\xd4\xbd\xef\x50\x7d\x73\x99\x70\xeb\x8c\xb6\xef"
+ "\xd5\xdb\x8e\x30\x49\xfb\x93\xab\x95\xff\x4a\x7c\xb7\x0e\xba\x66"
+ "\x85\x7e\x66\x7d\x80\xed\x65\x15\x2e\xde\xb0\xf7\x8f\x0d\x97\x55"
+ "\x8f\x37\xec\x5f\xa1\x8c\x3e\xbd\x8c\xb2\xff\x62\x19\x65\x97\x2a"
+ "\x03\xb2\xe1\xda\x53\xf4\x2b\xeb\xe5\xcf\x1d\xdf\x90\x77\x04\x41"
+ "\x7e\xfa\x94\xcc\x7c\xf3\xc5\x10\xe6\x6f\xc1\x94\xa5\x24\xef\xb2"
+ "\x32\x51\x09\xfb\xf2\x0c\x56\x4d\x6c\x68\x76\xf4\x52\xc3\x9a\x7f"
+ "\x50\x07\xfd\x4a\xde\x99\xdb\x5c\xc8\x73\xb6\xe5\xe9\x7d\xdb\x32"
+ "\xb3\xfa\x4c\x6f\x48\x3a\xdb\x83\x7e\xd8\x1d\x46\x67\x2d\xfe\x7f"
+ "\x90\x7b\x21\xaf\xaf\x1e\xe3\x75\xed\x74\x31\x62\x29\x69\x90\x0d"
+ "\xd0\xd1\x43\x12\x1f\xd0\x5f\xe4\x7c\x0b\x73\x36\x39\xdf\xf2\xc9"
+ "\xb3\x8e\x49\xd2\x47\xa7\xab\x20\x9f\xd7\xbe\x43\x7d\x39\xb6\x1e"
+ "\x17\x65\xb1\xef\x4e\x5e\x77\x16\x89\xde\xa9\x99\xc1\x78\x21\xe7"
+ "\x53\xd0\xfd\xd9\x77\xa7\xdb\xef\xa1\x10\xf4\xe8\x9a\x0b\x94\x5a"
+ "\x03\xdd\x13\x32\x3b\x85\xe5\x7a\xad\xee\xbf\xb3\xfc\xc2\x80\xff"
+ "\xce\xbd\xbc\xd6\xd3\x8a\xf7\x0b\x64\x0e\x6d\x9d\xdf\xb5\xfb\x02"
+ "\x8d\xdd\xb3\x86\xec\xbb\x79\x2d\xef\x3f\x95\xee\xc3\x7a\x85\xf4"
+ "\xe5\xb9\xd2\xce\xeb\xf9\x03\xba\xcf\x5a\xbb\x29\x4c\x6e\x99\xe5"
+ "\x1a\xc8\x65\xe1\xfb\x4d\x39\x0e\x06\xab\xe6\xd9\x82\x29\xf9\xf5"
+ "\xc0\x1d\xc6\xb2\x5f\x95\x02\x7f\x31\xc7\x15\xc3\xa6\x6b\x47\x98"
+ "\xff\xd5\xf7\xc7\x2a\xf9\x0e\x58\x4d\x83\xd1\x44\x68\x77\x0e\x4d"
+ "\xf6\x52\x9a\xb2\x8f\x18\x86\x31\xb1\x3e\x8d\xf7\xe2\x8b\x9f\x25"
+ "\x6b\x68\xf7\x82\x38\xe7\x6b\x14\xcf\x77\xa7\xf3\xaf\xf8\x73\xd1"
+ "\x35\x39\x9f\xd2\x78\xff\x81\x6d\x28\x6c\x1b\x64\xfa\xb8\xb1\x45"
+ "\x14\xb1\x17\x93\xa1\x8c\xac\xee\xb0\xad\x2e\x5c\xb4\x8e\xad\x1b"
+ "\xd6\x2e\x2b\xcc\xb3\x3d\xf5\xfc\xaa\x55\x7c\xe2\x73\xee\xcc\xac"
+ "\xc8\x33\x9d\xe6\x0a\x8c\x0b\x96\x4d\xb3\xb3\x2d\xc1\x0c\x9b\xf2"
+ "\x9f\xfb\x56\x75\xd8\x3d\xe7\xfc\xad\xee\xd3\x28\x3b\xd7\xc4\xe3"
+ "\x36\xc7\xab\xef\x6e\x87\xb2\xb9\xaa\x97\xe3\xbd\xb6\xdb\xba\x4f"
+ "\x9d\xa1\x7c\xeb\x7e\xb6\x65\x50\x74\xaa\xf2\x2a\x3b\xf5\xfa\xe9"
+ "\x6a\x2f\xbf\xbe\xab\xdf\x76\xa1\x4a\x8d\x25\x6c\xbb\xc0\xfb\xc9"
+ "\x8a\xf7\xde\x4a\x30\x78\xaf\xc7\xf5\x56\x2a\xf4\xa7\xaa\xcb\x97"
+ "\x39\x6f\xa5\xca\x3a\xaa\xb3\xb2\x5c\xa7\x4d\x61\x3e\xe6\xae\xe8"
+ "\x6f\xc3\x6e\xeb\x4f\xd5\x7a\xf7\x5b\xaf\x72\x7d\x3d\x54\x7f\x34"
+ "\x2c\x7c\x0c\xda\x76\x54\x85\xbf\x95\xc3\xf9\x63\xe2\xf9\xfe\x15"
+ "\x4f\xad\x7c\xb6\x60\x51\xe1\xb2\x27\x97\xe5\x2f\x2b\x5c\x27\xdd"
+ "\x5e\x4c\x90\xff\xee\x1d\xb7\x38\x5b\x1a\x0a\x84\xeb\x71\xbc\xee"
+ "\x61\xf8\xdd\x52\xeb\x4e\xbf\x1e\x2f\x6d\x25\x2f\xaf\x7d\x7e\xb5"
+ "\x26\xf8\xeb\xa9\x1e\xd3\x2b\x45\x03\x36\x27\x2a\xbc\x3b\x65\x79"
+ "\x95\x6d\x34\x4d\x6f\xa7\xdf\xe6\xf0\x7e\x13\xf0\xec\xe1\x71\xa9"
+ "\xa2\x97\xc7\x8f\x2e\x6a\x0e\xde\x42\xaa\x7f\x7e\xfd\x3a\xfb\x19"
+ "\x66\xdb\x35\xe0\x7e\x5f\x3b\xbe\x65\xfb\xcf\x5a\xf7\xf1\xf9\x26"
+ "\xb1\xd2\xfa\x53\xa6\x05\xae\x1f\x70\xb7\x5b\x88\x9c\x5d\x62\x65"
+ "\xde\x6e\x71\x36\x6f\x17\xf4\xb5\xae\xbd\x3b\x45\x07\xea\x70\x08"
+ "\x78\x5b\x18\x6e\xfb\x53\xae\xee\xb8\xef\x50\xb8\xfe\xf5\x7f\x40"
+ "\x56\xdd\x8e\xdf\x35\xa2\xac\xed\xa8\xc2\xeb\xaf\xe5\x1e\xc2\xdc"
+ "\x3c\x71\x76\xc0\xb7\xc5\x6f\xf8\xbb\x0f\x3f\x4d\x94\x9d\xe8\x0a"
+ "\xdb\xe3\xe4\xb8\x89\xa2\xe2\xc4\xa7\xac\x6f\x2b\x9a\xfb\xcd\x6d"
+ "\x6a\xcf\xf3\xc4\xa7\x3e\x67\x5e\x3c\xf2\x84\xa4\xbd\x99\x6c\xd3"
+ "\x6f\x16\xb9\xb7\x5c\x60\xfb\x07\xbf\x9e\x77\x21\x7f\x37\x2c\x67"
+ "\x1d\xfb\x37\x21\x61\x72\x0a\xde\x17\x75\x77\x05\x49\xb7\x67\x02"
+ "\x6d\xbe\xb5\x8f\xef\x20\x67\xfa\xdc\xbb\x8d\x12\xaa\x46\x12\xf4"
+ "\xae\xdf\xf4\xfb\x3f\x11\x29\x4a\x0f\x62\x5a\x65\x3f\xe9\xd2\xf6"
+ "\x01\xfa\x06\xc3\x67\x5a\x05\xdc\xc3\xbc\x6f\xaa\x68\xf6\x37\x47"
+ "\xff\x6b\x34\xfb\x1b\x49\x7b\x93\xcb\x68\x21\xef\x35\xb0\x3d\x00"
+ "\xfb\x11\x87\x1c\xb5\x2b\x3e\xfc\xed\x14\x69\xef\x00\x59\xcf\xfb"
+ "\x58\xb5\xc5\xd0\xdf\x12\xbd\x13\x58\xef\x0c\xba\xa8\x84\xf7\x9c"
+ "\xb5\x0b\xa7\xeb\xd9\x4e\x40\x9e\x1f\x95\xfe\xf7\xff\x4a\xb5\xe7"
+ "\xc9\xdc\x41\x07\xd3\x79\x6f\x64\x00\xd7\x07\x5f\x66\x18\xa2\xe2"
+ "\x83\x85\x96\x22\x53\x29\xc3\xd0\x2e\x9c\x99\x66\xe4\x83\xae\x35"
+ "\x94\xf3\xb5\xd3\xc1\x75\x32\x1f\xa7\x95\x7e\x6f\x52\x16\x40\x17"
+ "\xb7\xc9\x32\xd5\x77\x96\x80\x7c\x0c\x5e\x08\xd5\xe3\x3d\x9b\xf1"
+ "\x84\x67\x8e\x5c\x93\xef\xb3\x92\xf4\xb7\x94\x32\xbe\xde\xed\xf9"
+ "\xb4\x41\xd6\x87\xed\xad\x0b\x31\x96\x48\x3d\xfd\x60\xf3\xde\x4f"
+ "\xc8\x5c\xb0\x9c\xfb\xf3\xb7\x0b\xa5\xae\x7a\x86\xf6\xab\xfa\xfd"
+ "\x76\x51\x77\xc5\xc7\x75\xdd\x29\xf3\x3c\x7e\x53\x02\x1d\xb1\x06"
+ "\x78\x0c\xab\x3a\x62\xed\x85\xfc\xf8\xad\xdd\x13\xff\xaf\x63\x4a"
+ "\x47\x54\xf9\x78\xff\x9e\xe9\x31\xde\x9a\xe2\x44\x7c\x86\x61\x5b"
+ "\xc3\x74\x58\x8e\x38\x0f\x1d\xb4\x31\xde\x3c\xf4\xeb\xc5\x2d\x5e"
+ "\x75\xfe\x06\xdf\x57\xb0\x4f\x05\x89\xeb\xcd\xcf\x74\x59\x36\x35"
+ "\xf0\x19\xdf\x69\x96\x60\xba\x89\xf7\xe7\xd9\xb7\x03\xfb\xbb\x60"
+ "\xff\x0e\xbc\xc6\xaa\xc7\xa7\x45\xc5\x4f\x30\xe2\x51\x6e\x83\xe1"
+ "\x97\x81\xfd\x66\xb1\xed\x47\x48\xb7\x07\x95\xfe\xa4\xce\xa9\xfd"
+ "\x6d\xb6\x07\xe5\xf5\x5d\x3e\xd7\xca\x7b\xd0\xc8\xd7\x7f\xfe\x57"
+ "\x9d\xe7\xfa\x5d\xbf\xfd\x1b\xde\x53\xfb\x6d\xb7\x80\x8b\xee\xaa"
+ "\x79\xad\x7e\xf0\xb6\xbf\x6a\x9e\x15\x71\x69\x18\x5b\xf6\x5f\x72"
+ "\x4e\xce\xfe\xb7\x9f\x27\x93\x96\xec\xcd\x61\x3f\x2c\x47\xfc\xa4"
+ "\x9f\x65\xff\xdd\x56\xdd\xef\x41\xfc\x19\xfa\xdd\xdc\x81\xbd\xe0"
+ "\x90\xbe\x8e\xf9\xbb\x43\x4a\x8f\xfe\xdd\x21\xb9\x8e\xb9\x6d\x5e"
+ "\xc3\x4f\xd6\x07\x4c\xf5\xeb\x3d\x26\x75\xbe\xe5\x77\x07\x3c\xf4"
+ "\xae\xc7\xb0\x4d\x42\xba\xfc\xc1\xfc\xeb\x61\xdc\xc8\x50\x30\x7f"
+ "\xff\x9a\x1c\x27\xfa\xe7\xa5\xbf\x57\xf7\x1e\x6e\x1e\xbd\x50\x63"
+ "\x1d\x66\xe4\xc4\x63\xd2\x36\xa6\xe0\x1c\xaf\x67\x5e\xa1\xe6\xc8"
+ "\x2a\x8d\x6e\xcf\x7b\xd5\xa9\xc8\xef\x91\xfc\xad\x70\xf6\xfb\xe9"
+ "\xc6\xde\x48\x85\x49\x63\x1f\xec\xc2\x59\x27\xfc\xee\x02\x3f\x41"
+ "\x3f\xf6\xb9\xa1\x13\xa1\x0c\x51\xb0\x8a\xef\x48\xf8\xfd\x73\x8c"
+ "\x7b\xc5\x53\xbf\x97\xfb\x17\x9a\xeb\x2e\xe1\xe4\x79\x81\x8f\x6d"
+ "\x73\xce\x11\xd2\x8d\x40\xba\x3d\x8d\x45\x5e\xb6\x2f\xb2\xb1\x5f"
+ "\xcb\x0e\xbd\x6c\x5f\xd2\xb9\x8c\x6f\x26\xd2\x42\x94\x59\xef\xa1"
+ "\x1f\x1e\xba\x7c\x3e\xff\xfd\xe0\xfb\xb3\xfd\x3a\x4b\x3a\x0d\x36"
+ "\xcf\xe4\x75\x84\x49\x28\x7f\xae\xe0\xfa\x1f\xda\x13\x34\x05\xa8"
+ "\xcf\x34\x54\x7c\xab\xc4\x01\x39\x30\x54\x84\xd6\xa3\xbf\xba\xad"
+ "\x98\x87\x34\x51\x4b\xb0\x51\xda\xee\x80\x87\x2d\xc5\x7e\x71\xce"
+ "\x1d\x3c\x28\x6d\xb8\xd5\x38\x7d\xe8\x65\x77\xf0\x1d\x6a\x29\xf0"
+ "\x51\xc3\xaa\x7f\x40\x97\x38\x24\xfd\xe5\x4d\x2a\x28\xa1\x89\x67"
+ "\x64\x7c\xba\xd2\x5f\x0e\xd5\xe8\xcf\x7c\xf6\x7f\x1a\x5e\xa7\x7b"
+ "\x9f\x5f\xf1\x54\xe1\xb2\x95\x2b\x26\xce\x59\xb2\x66\x49\xbe\xed"
+ "\x61\x65\x56\x19\x31\xde\x25\x0c\xf8\x7a\x7f\x3b\x8f\xc7\x22\xd6"
+ "\x21\xd9\xe7\xfb\xa5\xfc\xbd\x1b\xbe\xde\xa1\xcf\x8d\xe5\x75\xd7"
+ "\xff\x49\x7f\xef\x86\x8e\xc8\xbe\xde\x07\xf6\x20\xfe\x60\xef\xe7"
+ "\x01\xed\xbd\x1e\xfe\xe6\xf1\x4f\x73\x1d\xda\xcf\x7c\xb4\x57\xea"
+ "\x2d\x6f\xd7\x85\xfb\xc3\x62\x9d\x85\xd7\xad\x10\x7e\xc8\x38\x4b"
+ "\x0d\x5a\xc4\xb8\xf1\xf6\xd1\x81\xb3\x5d\x6f\x1f\x07\xde\x52\x15"
+ "\xff\xca\xb4\x1d\xc6\x5e\xbd\x7e\xc7\x9e\xb4\x2d\xd0\x5c\x9a\x4d"
+ "\xad\x8f\xbd\xfd\x9f\x7b\xb5\xa1\x09\x6a\x6f\xe6\x0f\x29\xc6\xb9"
+ "\x41\xc5\x9b\xef\xe9\xbc\xf9\x07\xfb\xa5\xec\x29\x06\x78\xe3\x0f"
+ "\x8b\x07\xf8\xfa\xa4\x91\x77\xf1\x97\xd9\x62\xe8\xf3\x94\xab\x4f"
+ "\xd1\xe1\x75\xbc\x66\x86\xf7\xeb\xf0\xbe\x88\x61\xa9\x33\x14\x87"
+ "\x67\xe8\xef\x28\xe3\xf0\x38\xfd\xfd\xeb\x78\x4f\xd2\xdf\xa1\x4f"
+ "\xfd\xf1\xbc\xfe\x0e\x9e\xfd\xe3\x09\xfd\x3d\x15\xef\x7f\xd6\xdf"
+ "\x21\xf3\xff\xf8\x86\xfe\x3e\x0a\xef\x2f\xeb\xef\x5f\xc3\xfb\x46"
+ "\xfd\x1d\x3c\xf8\xc7\x25\xfa\xbe\x76\x42\x27\xfd\xf1\xa1\xcb\x9f"
+ "\x37\xfd\x71\x8c\xd2\x93\xfe\xb8\x00\x3a\x93\x3e\x66\xf4\x87\x15"
+ "\xa0\x6f\x1a\x0c\xfc\x22\x9c\xcf\x9a\x24\x20\xbc\xd4\x43\x3f\xdd"
+ "\x1f\x16\x6e\xd6\xd3\xd7\x41\xce\x4d\x1f\x08\xff\x43\x40\x0f\x87"
+ "\xfe\xf3\x46\x53\x58\xb8\x57\x0f\xc7\x9c\xe1\x77\x8d\x61\xe1\xfa"
+ "\x3e\xee\x1f\xf1\x5e\xd7\x16\x16\x7e\x5c\x85\x1f\x26\xc3\x8e\x44"
+ "\x0f\x3f\xaa\x87\x5b\x3d\x54\x5d\x16\x16\x7e\x58\x0f\x87\xfc\xff"
+ "\xc3\xd4\xb0\x70\x75\x57\xbd\x3c\x6f\x68\x11\x47\x8a\x98\xb7\x0e"
+ "\x67\x7b\x68\x6f\x51\x58\x9a\x7d\x7a\xde\x7c\x0f\xed\xd9\x17\x16"
+ "\xae\x9f\x55\x3d\xbc\xc5\x43\x9f\x05\xc3\xc2\x07\x9d\xcf\xc6\x55"
+ "\xd3\xc2\xc1\xd6\x96\xf9\x4e\x32\x69\x0b\x2b\x75\xd2\x77\xde\xe7"
+ "\xb3\x88\x96\x3d\xa2\xdd\x56\x2c\x44\x3b\xbd\xb3\x5f\xb7\xdb\x1c"
+ "\xc3\x76\x74\xea\x4c\xe7\x3b\x55\xf2\x9c\x1f\xeb\x99\x7c\xce\x73"
+ "\xbd\x0c\xbb\x5a\xea\x43\x8e\x12\xe5\x77\x55\xd9\x18\x7b\xe5\x1a"
+ "\x8b\xbe\xff\x8c\x34\x33\x58\x97\x66\x38\xbc\x0e\xeb\x2e\xec\x95"
+ "\x76\xaf\x3c\xc7\xe5\x30\x5e\x6b\x90\x67\xff\xc2\xe6\xba\x4a\xee"
+ "\xbf\xf3\xbe\xc6\xbe\x19\x5c\x6a\x3d\x86\x79\x91\xd3\xb3\xcd\x54"
+ "\x78\x5a\x0f\xbd\xd3\xc0\xcf\x78\xeb\x88\xff\xd3\xe3\x7a\xa7\x6e"
+ "\xe0\x3c\xda\xe1\x80\x1e\xfe\x4f\x84\x1f\x0a\x0b\xef\x18\x54\xb6"
+ "\x43\x0e\x8a\xc4\x0f\xf6\xf7\x5d\x10\xfe\xe0\x05\x11\xa8\xf8\x10"
+ "\xf5\x5e\x2a\xcf\x56\x7d\x23\x54\xf6\xc1\x21\xdd\xcf\xc9\x47\xc1"
+ "\x35\xc2\x07\x99\xcd\xf7\x89\x5c\x39\xcf\xef\xa3\x79\x05\x10\x95"
+ "\x4f\xb2\xfd\xe3\x79\xe9\xf3\xcb\xe9\x65\x5f\xeb\x6c\x53\xe7\xe7"
+ "\x7d\xbb\xc4\x16\x8c\x71\x7b\x97\x72\xfc\x09\x9a\x9b\xe7\xa3\xe6"
+ "\xbc\x10\xed\x05\xec\x3d\x4f\x1a\xf6\xac\xef\xf6\x9f\xff\xe1\x3a"
+ "\x70\x79\x4e\x79\x2f\xd0\xbb\xd2\x3e\x82\xef\x3d\x14\x5b\xf3\x1b"
+ "\xc4\x9f\x58\x97\x9d\xeb\xf9\xff\xd8\xfb\x1e\xb8\xa8\xaa\x6d\xff"
+ "\x3d\xc3\xa0\x64\xfc\x19\xb9\x68\x53\x59\x8d\x46\xef\x4e\x65\x45"
+ "\xf7\xda\xbb\xd6\xb3\x17\x95\xf6\xac\xeb\x1f\xea\x69\x97\x8a\x14"
+ "\x4d\x0a\xbd\xa8\x93\x22\x21\x22\x20\x1a\xd7\xbc\xfc\xd3\x8b\x5e"
+ "\x2c\xd4\xb1\x57\xef\x51\xf9\x87\xde\xb3\x77\xa9\xeb\x9f\x31\xb1"
+ "\x50\xf9\xa7\x69\xa1\xa1\x8e\x04\x88\x34\xda\x08\x23\x0c\x30\x73"
+ "\xce\x6f\xad\xbd\xcf\x99\x33\x67\x98\x01\x86\x34\xeb\xf7\x2e\x9f"
+ "\x0f\x9f\x33\xfb\x9c\x7d\xf6\xd9\x67\xaf\xb5\xbf\x7b\xad\x75\xd6"
+ "\x5e\x2b\x64\x05\xd1\xc2\xda\x5e\x00\xbf\x6b\xd8\x3f\x5c\x83\xf3"
+ "\xde\xde\x89\xcd\xe5\xbd\x35\x4c\x27\xac\xd3\x31\xbc\xd8\x5b\xc3"
+ "\xbf\x8b\x7a\xd3\x5e\xfc\x1e\x5a\x0a\x72\xb3\x47\xbf\xb8\xe5\x9b"
+ "\x88\xb2\x3b\x17\x64\x93\x4b\xa5\x4a\x86\x4f\xfb\x8c\x9c\x32\x60"
+ "\x05\xda\x7b\x69\x4e\x90\x5c\x73\xfc\xb6\x05\x36\x65\x65\x4a\x03"
+ "\x59\x76\x33\xd1\xc4\xd8\x70\xbf\xc0\xbe\xc7\x83\x13\x31\x7e\xec"
+ "\x14\xa8\x4b\x94\xff\x03\xd7\xf7\x2e\x28\x55\xda\xa9\xbc\xb2\xcf"
+ "\x48\x6d\x84\xd9\xe6\x71\xb8\x86\x54\xd7\x3a\x70\x1d\xa0\x72\x32"
+ "\xe0\x7f\x80\xe3\x8d\xf8\x50\xfb\xe2\xf8\x1b\x37\x2d\x22\x81\x8e"
+ "\xc5\xba\xb0\xbf\xb4\x93\xb1\xe2\xfa\xb3\x29\x09\xd6\x94\x0e\xcd"
+ "\x90\x3c\x58\x53\xd0\xf6\x10\xac\x50\xd3\x6f\xa1\xf8\x9b\x53\xfe"
+ "\x47\xf3\xe6\xa4\xde\xf3\x1b\x39\xde\xd0\x29\x31\xbe\x38\xf6\xc5"
+ "\xd3\xbb\x66\x83\x9e\xed\x10\xf6\x42\xa7\x35\x92\xe1\xfa\x57\x89"
+ "\x32\xf8\x0a\x6f\x6c\x49\x20\x4a\xcc\x09\x93\x16\x47\xed\x7b\xfe"
+ "\x95\xf1\x76\x52\x9d\x7c\x8a\xa4\x2d\x42\x1a\x19\x87\xa1\x9c\x86"
+ "\xfe\xac\x50\x5f\x0d\x5c\x7f\x57\x88\x0d\xd6\x0c\x1b\xc8\xd2\xf3"
+ "\x50\x77\x34\x3e\x6c\xa5\xf1\x8d\x8d\xb8\xf7\x19\xe4\xfd\x27\xf0"
+ "\xdc\xf4\xf4\x46\xea\xbb\xa2\x65\x73\xcb\x18\x81\xe5\x74\xdc\x9b"
+ "\x1d\x7c\x59\xbf\xa3\xcb\xe6\xcf\xf4\x24\xe3\x83\xc2\xfa\x50\xc2"
+ "\x74\x32\x63\x84\x37\xde\xe5\xb2\xcf\x96\xf3\x18\x07\xbf\xc8\x4e"
+ "\xa6\x58\x79\x13\xfd\xce\x8c\x31\x29\x92\x1f\x33\xf2\xed\xf9\x84"
+ "\xed\xa3\x34\x5e\xe1\x72\xce\x96\xb3\x98\xa4\x46\xd1\x47\x4c\xc5"
+ "\xe7\x9c\xad\xa5\x36\xf6\x9c\xb3\xcd\xd4\xe6\x9c\x73\xd6\xb6\xf2"
+ "\x16\xf4\x47\x37\x5a\xdb\x82\x4c\x80\xd1\xc6\xf2\xb6\xe0\x76\x8f"
+ "\xf1\x51\x59\x6e\xe7\x3a\x9b\xf6\x76\x12\x86\xdf\x3a\xd0\x1f\x7c"
+ "\x0b\xf3\x03\x87\x67\xec\x47\x3f\x73\xbc\x76\x47\xbd\x9e\xf8\xa1"
+ "\x7d\x18\xce\x4d\x78\xa0\x88\x68\xa1\xaf\x41\x7c\xe0\xd9\x62\xea"
+ "\x7b\x97\x7d\xb6\xb4\xda\xcc\x1b\xd1\xe7\x93\x7d\x93\xfa\x5c\xc5"
+ "\x07\x9d\x2d\x16\xea\xaf\xaf\x32\xc3\x3b\x04\x9e\x4d\xae\xb6\x5d"
+ "\x14\x64\xc2\xfd\x05\xd0\xc7\x64\x3e\xfb\xec\x6a\x16\xe3\x60\x7f"
+ "\xa3\x88\xab\x8c\x47\xf7\x9f\x14\x78\xdd\xc6\xc6\xed\x73\x95\xb0"
+ "\x5e\xdd\x81\xbf\x61\xed\x8e\x60\x3e\x14\xfb\x6b\x44\x19\xd9\x24"
+ "\xd4\xc1\x7b\x4c\x64\xff\x2e\x86\xb5\xfb\x2d\xf0\xee\xab\xd9\xf5"
+ "\xfd\x05\x78\x0e\xde\x0f\xc6\x63\xff\x68\x7c\x2f\x6f\xd8\x4a\xc7"
+ "\x22\x95\xf8\x41\x9f\x0b\xd1\xd7\x17\xe5\x94\x6a\xeb\x63\x46\x96"
+ "\xb7\xf4\x40\x0e\xdd\xeb\x0d\xcf\x01\xfa\x28\x11\x37\x71\x6f\x3a"
+ "\xb6\x27\xf5\xff\xf3\xd7\xc5\xbe\xe0\xf3\xf0\x1a\xbc\x6b\x32\xd2"
+ "\x13\xc6\x6a\x35\xd6\x41\xba\x36\xe9\xd1\xf6\x74\x05\xc6\x0c\xfd"
+ "\xb8\x0e\x14\xe1\x98\xb0\x31\x3b\x40\xf7\x1a\xe7\x39\xe9\x70\x60"
+ "\xbe\x7c\x3c\x58\x99\x0b\x04\x6c\x58\x84\xfe\x3c\x07\x8a\x84\xf1"
+ "\x33\xb3\xe7\x1f\x78\x9a\x8e\x17\xbb\xa6\x70\xb9\xf7\x36\x67\x5d"
+ "\x96\x23\x57\x89\xdf\xc6\xf1\x5b\x09\xe3\xd7\x03\xa3\x5d\xee\x1b"
+ "\x3d\xf3\x32\xc8\xc8\x20\x43\x62\x4e\x53\x1c\xf3\x8e\xcc\x03\x91"
+ "\xd2\x78\xb3\x76\x3c\x3c\xe3\x76\xf1\x19\x50\x87\x88\xfd\x04\xfa"
+ "\x08\x6b\xf0\x81\x55\x12\x4d\x3e\x7f\x4f\xbc\x6f\x33\xdd\x2f\xf6"
+ "\x79\x14\xee\x73\xf5\x88\x83\xf8\x4d\x0e\xa4\x8a\x2a\xfb\x63\x46"
+ "\xca\x8f\xe4\x80\x1d\x7d\x95\x61\x5c\x0b\x19\x0f\x1d\x30\xb1\xb5"
+ "\xf0\x00\xfd\x5e\x8f\xdf\xbb\x58\x4c\xdb\x03\xa0\x3b\x7d\x2e\xc4"
+ "\x7e\x28\x0b\x60\x7d\x28\x43\x1e\x20\xee\x7a\xdd\x13\xb3\xe6\xd0"
+ "\x0d\xdd\xf7\x2d\xd1\xbb\xef\x1d\x0b\x90\xf6\xee\x96\x8d\x77\xd9"
+ "\xfb\x9c\xc0\xc6\xbb\x2c\x1f\xf4\xd4\x5d\xb9\x2c\xf6\x71\x69\x2e"
+ "\xd0\x2c\xfd\x0a\xb9\x05\x73\x01\xa5\xe9\xf9\x96\x2a\x3d\xe8\xd6"
+ "\x81\xe6\x55\x80\x17\xab\xd3\xae\x90\x21\xe8\x0b\x83\x78\x83\xbe"
+ "\xb6\x7c\x10\x9c\xcf\x31\xaf\x96\xf6\x57\x7e\x39\x0e\x74\xdb\xe2"
+ "\x1c\xd0\x65\xd3\x2f\x92\x5b\x98\x6f\x4b\x59\xa5\x60\x2f\x7c\x9b"
+ "\xcb\x36\x67\xe3\xde\xdd\x2a\x78\x2b\x3e\x3d\xfe\x6d\x2e\xc7\x9c"
+ "\x0d\xed\x16\xa5\xcf\x27\xa1\xb8\xbe\xa1\x0f\x35\xe3\x99\x2f\x47"
+ "\x40\xbb\x45\x18\x57\x8f\xe3\xa3\x15\xf0\x7c\x13\x17\xd8\x3a\x3e"
+ "\x87\x23\xd4\x77\x1f\xf8\x4c\x59\x4f\x0e\xde\x06\xcf\x37\x61\x8e"
+ "\x52\xb4\x03\x55\xdb\x6c\x18\xfb\xc3\x04\xd7\x82\xe1\xda\xd3\x70"
+ "\xe4\x30\xc6\x1e\xc6\xec\x87\xf6\x35\xd8\x3e\x3c\xcb\xc4\xfa\x4e"
+ "\x63\xdf\x98\xa0\xde\x72\xac\x23\xc6\xee\xe3\xd2\xa3\xfd\xf0\x3a"
+ "\xee\x05\x77\x60\x0e\x0c\xa0\x3c\xbb\xa7\xd6\x79\x8f\x20\x3f\xc3"
+ "\x5c\xfe\x72\x18\x9f\xdb\xae\x85\xba\xa5\xe8\x2b\xcc\x64\xd9\x2f"
+ "\xd5\xc2\x5c\x07\xf9\xf8\xcb\xa1\xc2\xef\x40\x67\xdd\xf4\x68\x92"
+ "\xd6\x49\x34\xf4\x7b\xf7\x1b\x7e\x80\xbd\x5f\xc4\x63\x3e\x0d\x97"
+ "\x36\x1f\xc5\xf6\xb2\x31\x26\x60\x1c\x09\x04\x5c\xbe\x11\xfa\x8d"
+ "\xb9\x70\xce\xa1\x0d\x5d\x18\x9b\x71\x40\xa7\x92\x3c\x16\xf7\x71"
+ "\x57\x0e\xf0\x7e\xda\x72\x90\x07\x96\x93\xc0\xe5\x0e\x32\x02\xdf"
+ "\x13\xe8\x86\xf6\xb1\x30\xd4\xdd\x70\x6c\x04\x1a\x02\xcd\x2f\xaa"
+ "\x96\xc7\xf3\x0d\xcb\xcd\x7c\x73\x65\x7c\x2d\x81\x75\x26\xb4\x4a"
+ "\x5f\x83\xf1\xe7\xcf\xe1\xbb\xa2\xed\x0f\xc6\x14\x28\x0b\xcf\xc8"
+ "\xb9\x48\xf3\x28\x53\x3b\x81\xb2\x2c\x4c\xdc\x3b\xb6\x99\xee\x2f"
+ "\xfb\xc2\x99\xff\x0c\xfa\x52\x26\xf4\xa5\x9c\xc3\xdf\x49\x74\x0f"
+ "\xea\x10\xd4\x7f\xd0\xa6\x31\x73\xa9\xc1\xb9\x77\x86\xd9\x06\xbe"
+ "\x28\x77\x89\xbd\x46\xef\x45\x1b\x01\xde\x3b\xd5\xce\x5f\xc9\x13"
+ "\xea\xe2\xbd\x53\x97\xce\xe4\xf1\x5e\xb8\xc7\xee\xbc\x47\xb6\x8f"
+ "\xeb\x20\x93\x2b\x60\x6c\xf1\xb7\x05\xc6\x52\xf0\x6d\xd3\x32\xbf"
+ "\x84\x2f\xc7\x88\xbe\x00\x30\x7f\xcc\xc8\x4f\x9e\x63\xc6\x7f\x19"
+ "\x23\x8f\x83\x55\x3e\x1a\x63\x74\xc1\xf9\x44\x31\x5e\x15\xfc\xce"
+ "\x80\x36\x98\x7f\xa5\x4b\x1c\xba\x5c\x97\x98\x96\xe9\x16\xfe\x3b"
+ "\xe4\x13\xc0\x15\x3f\xa0\x65\x05\x9f\xd3\x3a\x9e\xed\x85\x2b\xbf"
+ "\x0d\xfb\x59\x4f\xbe\x44\x8c\x0b\x61\xf1\x32\xbe\x3c\xcd\xf0\xe3"
+ "\xb4\x66\xaa\xc3\x1e\x62\x82\x67\xe2\xbe\x2e\xa9\xfc\xe5\x71\xc0"
+ "\x13\x35\xdc\x1b\xc4\x62\x3e\x7e\x59\x21\xaf\x4f\xaf\x67\xb8\x95"
+ "\x23\xdd\xca\x5a\x2b\xcc\x1b\x6f\x3e\x0f\x39\xb7\x50\xfb\xe1\xb8"
+ "\xe0\x15\x44\x9f\x7e\x81\xf8\x01\xaf\x34\x62\xdf\xaa\x9a\xcd\xf8"
+ "\x4e\x21\x7c\x66\x04\x41\x3b\x28\x95\x2d\x61\x4d\xaf\x0f\x87\x3a"
+ "\x17\xc8\x70\xf4\xc7\xc7\x7c\x38\x50\xbf\x85\xc5\xaa\x3f\xf4\x49"
+ "\xcc\x92\x21\x84\x7b\x2d\xfa\x46\x5e\xf9\x5c\x00\x7e\x73\xdd\xde"
+ "\x65\xf2\xc7\xef\x8f\x69\x1b\x81\x27\x1d\x64\x38\xf0\x58\x03\xe6"
+ "\x1e\x84\x7b\xcc\xff\xd1\xd5\xec\x5f\x6d\x3f\x45\xf4\xf3\x88\xb2"
+ "\x85\x1c\x2a\x56\xa5\x12\x55\x5e\x13\x51\x03\x5d\xed\x07\xec\x63"
+ "\x89\x18\xef\xa2\x28\x94\xed\xd5\x2f\x02\x7c\x5d\xac\xe1\x6d\x1d"
+ "\x99\x87\x54\xa0\x7b\x45\x8b\x3a\x76\x36\xcb\x79\xa3\x82\xe7\xbf"
+ "\xae\x14\x62\x7b\xb0\xb1\x3d\xf4\x38\xdb\x4b\x17\xf6\x1a\xdc\x33"
+ "\x56\x92\xbf\x0f\x09\xfb\xd0\x5a\x85\x18\xff\x87\xca\x0e\x80\x16"
+ "\xbc\x8a\xf9\x8e\x84\x41\xdd\x39\x4e\xdf\x11\x6a\xb7\x3a\x54\x06"
+ "\x34\x8c\x67\xb2\x79\x6b\xfc\x4c\x47\x80\x30\x07\xf1\xfc\xb7\xc9"
+ "\x78\x2f\xdc\x17\x62\xa5\x36\xa6\x43\x06\x89\xd7\x0e\x61\xce\x3d"
+ "\x05\xbc\x53\x20\xd0\xb5\x0e\xdf\x0b\xc7\x04\xea\x41\xff\xcb\x4d"
+ "\x07\xde\xf3\x12\xfb\x37\xb0\x4e\x67\xa7\x36\x90\x29\x28\xef\x5f"
+ "\x04\x1a\xfc\x0a\xe3\x7b\x55\xc3\x73\x2a\x37\x77\x91\x4a\x4d\x1b"
+ "\xa9\x82\xdf\xe8\x23\x6e\x9c\xf7\x1d\x69\xd0\x7a\x5e\x6f\x60\xcd"
+ "\x2a\x86\x3e\x97\x62\x5b\x88\x05\xe8\x57\x57\x9d\x0a\xeb\x8f\x05"
+ "\xda\x02\x0d\x04\xdb\xa8\xe4\x9a\x49\x65\x32\xe8\x59\xf9\x09\xc6"
+ "\xaa\xcd\xa7\x48\x95\xe6\x2b\xfa\x1c\x94\x09\x8d\x8b\xda\x7a\x6b"
+ "\xbb\x1c\xda\xae\x15\xda\x36\x43\xdb\x61\xde\xdb\x9e\x6c\xf2\xb1"
+ "\x6d\x1f\xfa\x3d\xb9\xc6\x97\xb6\x01\xc7\x47\x63\x4e\x23\xdc\x6f"
+ "\x97\x76\x33\x09\x72\xb4\x63\x6c\xd7\x3b\x78\xe6\xa7\x7c\x64\x23"
+ "\xdd\x93\x97\x49\xfd\xc0\x75\x74\x6f\xde\x25\x42\x7d\x4d\xd9\x7e"
+ "\xbc\x46\x82\x7e\x2a\x1d\x99\x47\x56\x39\x71\x48\xfa\x7e\x08\xb2"
+ "\xea\x91\x62\xe6\x8f\x6a\xd6\x31\xbe\x3a\xf2\x32\xb6\xe5\xb9\x1f"
+ "\x17\x63\x99\x5f\xf3\x11\xa7\xcf\x5d\x5b\xd0\xc5\x58\xa1\x2d\xad"
+ "\xbb\x5d\x4f\x4c\x3e\x1c\x97\x9c\x28\xe6\x31\x4e\x14\xb6\x18\x3f"
+ "\x17\xf7\x4a\xdc\xdc\xa4\xb8\x39\xda\x69\x4b\x16\x2d\xb8\x6f\xe1"
+ "\xab\xaf\x6a\x27\xc7\x2d\x5e\x3c\xeb\xb5\xb8\x21\x64\xda\xa2\x59"
+ "\x0b\x16\xcf\x45\xdb\x9b\x56\x3b\xfe\xb7\x33\xe3\x17\x26\xde\xf7"
+ "\xaf\xe3\x23\xdc\x6c\x6f\xb8\x1f\xb5\x0e\x65\x70\x58\x3b\x86\xa7"
+ "\x39\xc8\x50\x8c\xd5\x14\xb2\x94\x37\x2e\x03\xfd\x0f\xf8\xaf\x05"
+ "\xd7\x29\x5c\x1b\x50\x37\xc0\x38\x91\x80\xdf\x15\xef\x6c\xe0\x6b"
+ "\x9a\xc8\x99\x17\x40\xae\xac\xdd\xc2\x62\x1e\xd6\x81\x4e\x6e\x61"
+ "\xdf\x06\xcf\x3c\x84\xf1\x0c\xff\x0c\xe7\x2c\x41\xad\xf1\x79\x67"
+ "\x88\x0a\xd6\x35\xd0\x4b\x2a\xac\xbc\x72\x30\x9f\x3d\x9c\x2f\xe3"
+ "\xbf\xd3\x10\x21\x4e\xbc\xb2\xda\x64\x43\x3f\x8b\x80\xa9\xf6\x74"
+ "\x1e\xf1\x94\xcd\xad\x8a\x2b\x6c\x8e\x9e\x2d\x67\xfe\xde\x67\x86"
+ "\xa1\x0e\xb3\x92\xe6\x3e\xad\x84\xf9\xb3\xaf\x42\xc2\xe9\xaf\xb5"
+ "\x82\xec\x88\x7e\x10\x6f\xd4\x43\x99\xc5\x92\xa9\x8c\x90\xfb\xd0"
+ "\x54\xc3\xba\x7c\x6a\x3c\xfb\xc7\x7b\x4e\xcd\x61\xff\xf8\xdb\xf5"
+ "\xff\xb4\x8d\xfd\xbb\x9f\xff\xb1\xff\xe2\xf3\x07\xdc\x46\x6d\x1f"
+ "\xff\xfd\x78\x3e\x7d\xef\xeb\xf8\xfe\x3f\xaa\x0d\x53\x6f\xff\xc8"
+ "\x6f\xc0\x5b\x75\x7f\x3e\x43\x02\x80\x3f\x0b\x72\x66\x03\x4f\x9f"
+ "\x26\x9a\x54\x3b\xdf\x90\xfe\x32\x19\x91\x76\x81\x60\xee\xc9\xe6"
+ "\xc4\x64\xbe\x21\xad\x1d\x65\xd2\xaf\x3f\x06\xfe\x2d\xcd\xad\x27"
+ "\x81\x39\xf5\x44\x5d\x95\x88\x79\xa9\x31\x9e\x1b\xf4\xd4\x0c\xff"
+ "\x50\xae\x48\xb2\x91\x23\x96\xcb\xe8\x77\x66\xac\x8a\x05\xdc\xa9"
+ "\x23\x04\xf9\x37\x30\x96\x84\x15\x0d\xe7\x77\xf3\x99\xfa\x18\x5e"
+ "\xa9\x9f\x04\xe7\x8e\xef\xe4\x22\xfd\x77\xa6\x94\xfb\x6b\x67\xe3"
+ "\x1a\x5f\xfd\x89\xc0\x9b\x23\xd9\x5e\xaf\xaf\x47\x22\x0f\xc2\x3c"
+ "\x39\xce\xec\xea\x5f\x6f\x62\xeb\xf9\xd7\x54\x0f\x62\xb1\x9a\xbf"
+ "\xa6\xb2\x22\xbc\x47\x29\xe6\xea\xc5\x36\x77\x70\xa5\x34\x57\xef"
+ "\xce\x94\x48\xff\xd4\x59\x44\x59\x65\x02\xcd\x04\x70\x10\xbf\xc7"
+ "\xc2\xbc\xdb\x06\xf3\xac\x64\xd3\x70\x3e\x1f\xfa\x97\xbd\x79\x38"
+ "\xbf\x1a\xfa\x54\xdc\x91\x59\x13\x6e\x22\x87\x35\xc2\x77\x17\x23"
+ "\xcc\x8b\x6d\x39\x50\x67\xea\x12\x72\x47\x0e\xd4\xcb\x85\x7a\x28"
+ "\x27\xb3\xfe\x7d\x75\x01\xc6\x60\x17\x3c\xb3\x46\x3b\x03\xcb\x47"
+ "\xe9\x1e\x40\x7c\x36\xbc\x87\xb6\x9e\x1c\x4d\x84\xb5\x4d\x85\xcf"
+ "\x10\x9f\x0b\xed\x03\xfe\x1d\xa6\x76\x52\x6c\x97\xb5\x53\xc3\xf6"
+ "\x6b\x64\x9b\xb7\xe5\x49\xb9\x94\xb7\xe5\xa4\xc0\x9a\xde\x45\xe3"
+ "\x9c\x16\xa0\xbd\x05\x65\x0c\x2a\x57\x38\x48\x08\xb3\x0f\x80\x6c"
+ "\x11\x0f\x38\x00\xf2\x04\xf5\x51\x07\x59\x02\xfa\x52\x80\x39\x3d"
+ "\xf1\x3a\xe8\x6d\xbb\x60\x5d\x2e\x41\x39\x60\xc6\x95\x67\xf0\xbb"
+ "\x2b\xc1\x7c\xbc\x8b\x63\x78\x1b\xcb\x8b\x74\x54\x2d\xca\x02\x88"
+ "\x41\xb8\xfe\x83\x2c\xac\xea\x06\x1a\x02\x0f\x94\x83\x6c\x31\xb4"
+ "\x85\x1c\x9d\x24\x8c\x7d\x39\x5d\xf3\x93\x68\x5c\x6e\x3f\x86\xd1"
+ "\x47\x5f\x80\xf7\x0b\x84\x67\x80\x3c\x7a\x86\xda\xc2\x19\xc6\x1c"
+ "\x8d\x17\xd7\x71\xd4\x79\x4d\xd0\x06\x0f\x58\x26\x5c\x83\xf7\x2f"
+ "\x17\xf7\xdc\xd7\xc1\x35\x8d\x30\x66\x15\x30\x66\xd8\x26\xd5\xfd"
+ "\x41\xe6\x8a\x67\x63\x73\x34\x1c\xe5\x0a\xe1\x5e\xa3\xd8\x2e\xea"
+ "\xe5\x1c\xc8\x15\x38\x5e\x38\x4e\xd0\x4e\xb8\x80\x63\xc7\x99\xfc"
+ "\xf2\x15\xf5\x99\xc0\xb1\x07\x5a\xaf\x92\xc6\xff\x98\xca\x75\xfc"
+ "\xe1\xfe\x55\x02\x2d\x97\xbb\xd0\x0e\x74\xa3\xaf\xa6\xa1\x9d\x14"
+ "\xfa\xb8\x9b\xd9\x78\x8e\x3d\x8a\xf1\xf0\x30\xfe\x36\x8c\xf1\xee"
+ "\x6c\x8c\xf5\x0c\xd8\xbc\xf2\x0c\x60\xee\x6c\x94\x9f\xbe\x7a\x94"
+ "\xc9\xa7\xc7\xea\x90\x87\x9b\xc8\x31\x6a\x87\x6f\x80\x7e\x61\x7b"
+ "\x50\xde\x0e\x47\x90\x63\x8f\xbd\xef\x9a\x3b\x5b\xca\x9b\x7d\xac"
+ "\x48\xda\x27\x72\x94\xda\xa5\xf1\x88\x36\x30\x5a\xbf\x3b\x1e\xfb"
+ "\x56\x87\xf3\x52\x7c\x57\xcc\xa1\x0d\xe7\x51\xf6\xaf\x43\xba\x89"
+ "\xe7\x31\x4e\x34\xd0\x29\x10\xfa\xf4\x10\xeb\xd3\x57\x6a\x96\x67"
+ "\xf0\x58\x06\x96\x31\x9f\x76\x1e\xde\x93\x26\xdd\x83\xf3\x06\x78"
+ "\x38\x04\xee\xb9\x0f\x8e\xbc\x58\x97\xe5\xd9\x3e\xb6\xeb\x2f\x5d"
+ "\x68\x03\x3b\x56\x21\xe6\xd9\xc6\x1c\xdb\x88\x19\x39\x33\x64\x63"
+ "\x8f\x63\xb3\x0d\x68\x45\xf9\xee\x80\xbd\x14\xc6\xfb\x2b\x90\xff"
+ "\x77\x0b\x7b\xa1\x8e\xed\x12\xfa\x67\x64\x31\x72\x8e\x98\x69\x4c"
+ "\x67\xaa\x0f\x7d\x55\xe4\xd4\x87\x9c\xb2\xe5\x31\x1a\x7f\x0b\xda"
+ "\xaa\x40\xfa\xa3\x9c\x08\xf5\xca\x9c\xbc\x45\xf7\x61\x7f\x35\x1e"
+ "\xe5\x4b\xa1\xff\xc8\x2f\x77\x09\x63\x67\x76\x9d\x77\xae\xf3\xbc"
+ "\x23\xf3\x38\xe8\xff\x87\x9c\x3c\x20\xce\x6b\xc6\x07\x27\x28\x1d"
+ "\x41\xa6\x28\xc5\x38\xcd\xd0\xae\x11\x65\x70\xb6\xae\x9e\x50\x1f"
+ "\xa8\xa3\x3e\x0d\xc7\xa1\x0c\xf3\xfb\xb8\xb9\x2d\xb8\x5d\xb7\x8a"
+ "\xe2\xc6\x71\xd0\x7f\x22\x28\xfd\x70\x5c\xc4\xf9\x9a\x37\x03\x75"
+ "\xbf\x08\x36\x67\x93\x1b\x48\x95\xcd\x4c\x84\x3d\x18\x30\x67\x1b"
+ "\xf1\xdb\x69\x0b\xf0\x50\x00\xce\x5f\xa0\x2f\xce\x7f\xc4\x9c\x9a"
+ "\x55\x1b\xe8\xbc\x0d\xc4\x79\xdb\x8d\x71\x42\xe0\x39\x65\xb1\x91"
+ "\xe4\x40\xb2\x91\xce\x63\x8c\x11\xf3\x0e\x8c\x1d\xe6\xb4\x86\x67"
+ "\xd7\x8a\xbe\xe3\xc8\x23\x18\x13\x46\xe0\x13\x2d\xce\x65\x61\xec"
+ "\x54\x1d\x99\x27\x88\x38\xf7\x5c\xe8\x4f\xeb\xb8\xcd\xb7\x10\x36"
+ "\xdf\x4e\x44\x88\x63\x6d\xa7\xf3\xf8\x58\x85\x1d\xe6\xb1\xeb\x98"
+ "\xe2\x78\xe2\xb8\x42\x5d\x78\xff\xc3\x89\xe2\x98\xba\x8c\x67\xa5"
+ "\x40\xf3\x1a\x66\x63\x3a\xc1\xe2\x60\xbb\x8c\xa1\xc0\x7f\x98\x8b"
+ "\xb8\x74\x25\xbe\x3b\xac\x0d\xf8\x7c\xe4\x91\x77\x04\xcc\x2a\xb3"
+ "\x20\x8f\x9c\x80\xf9\xff\xef\x85\x12\x76\x1c\xab\xa1\x3a\x0b\xd0"
+ "\x49\xa0\x4f\x27\x8d\xa9\xe2\x01\x3b\x80\x4f\x4a\x25\x7c\xfa\x3a"
+ "\x40\x1c\x07\x91\x27\xc5\x79\x0f\xeb\xc8\x74\x39\xfe\x7c\xfd\x30"
+ "\xb4\x11\x8a\xf8\x26\xc9\x50\x5f\x4f\x94\xe3\xdb\xd7\x11\x88\x6f"
+ "\xc8\xd7\xfa\x24\xb4\xb1\xb1\xf5\xca\x44\xaa\x6b\xe5\x98\x54\x5d"
+ "\xc9\x7c\x03\x98\xcc\x85\xbc\xa5\x9f\xc1\xea\xe3\x1a\x06\xf5\xa9"
+ "\x2e\x2e\xac\x79\x5a\x5c\xe3\xe0\x5c\x99\x30\x5e\x75\x50\xbf\x0c"
+ "\xf7\xb3\x62\x0c\x8b\x1b\xeb\x98\xae\x07\x38\xbd\x1b\x63\xb4\x43"
+ "\xbd\x55\x55\x20\xe7\x77\x67\x31\xec\x16\xb1\x82\x7f\x25\xfa\xc6"
+ "\x37\x9a\xc9\x0d\xfa\x7f\xe5\xbf\x6b\x22\xdf\xc4\xc1\x9c\xb1\x61"
+ "\x9c\x50\x68\x5b\xdb\x44\x4e\xdd\x07\xcf\x0d\x13\x8e\x1a\x38\x0e"
+ "\x83\xe3\xcd\x4d\xe4\xa4\x03\x8e\xb7\xc2\xb1\x11\xea\x73\x42\xfd"
+ "\x08\x28\x57\xc2\xf9\xdf\x0a\x47\xe8\xe3\x37\x31\x70\x8c\x12\x64"
+ "\x47\x3c\xbf\x15\xcb\x70\x5c\x2b\xd0\xbc\x82\xd1\xfc\x9b\xb7\xa0"
+ "\x9d\x64\xe8\x7f\x6d\x75\x1d\x6d\x4b\x0f\x75\x9e\xc5\xb6\x71\x7f"
+ "\x39\xfc\xf6\x27\x92\x0c\x0a\xed\xd4\x3e\x08\xc7\x31\x70\xdf\x15"
+ "\x38\x26\xc2\xf1\x90\x30\x06\x35\x88\x0d\x73\x92\x71\x6c\x4f\x34"
+ "\x68\x99\xbc\x1b\x25\xce\x79\x5c\x87\x25\xec\x38\x1a\x3e\x27\x86"
+ "\xd1\x1b\xea\x52\x3e\x80\xba\x8f\x63\x5d\x38\x3e\x29\x1c\x23\x85"
+ "\xe3\x04\xe1\xf8\x6f\xc2\x71\xbc\x70\x04\x3a\x7f\x53\x21\xc8\x18"
+ "\x30\x2e\xdf\xd0\x7c\x07\x30\xb7\xe7\xb0\x67\xd4\x9a\x51\x47\x06"
+ "\x1c\x7f\x08\xda\xf7\xeb\xc8\xac\x8d\x15\xed\xa3\x68\xf3\xe9\xce"
+ "\xac\x18\xfc\x0e\xfd\xae\x5d\x9b\xec\x82\x6d\x63\x03\x15\x91\x04"
+ "\x64\xa0\x61\x45\x4a\x58\xff\x59\x3b\x35\x4a\xe1\xbb\xb0\x90\xff"
+ "\xc1\x0f\x63\x22\x52\x7d\x68\xe8\xab\x3a\x9c\xab\xd4\x76\x8c\xf1"
+ "\xfb\x82\x5a\xc7\xc1\xff\x44\xd0\x0d\x26\x89\xf8\x8d\x7a\x0f\xd3"
+ "\xd5\x31\xfe\x6f\x6d\x83\xa4\xab\xd7\x52\x9b\xb7\x9f\xe6\xa6\xd7"
+ "\xe1\xbc\xdd\xe5\x7c\x14\xf6\x19\xc6\xb3\x16\xde\x67\x4c\x3d\x39"
+ "\x19\x0e\xc7\xdf\x34\xb0\x77\x8e\x10\xdf\x59\xa0\x87\x5e\x1c\xdf"
+ "\x06\xf2\xcd\x71\xc0\xc2\x45\xc8\xc3\xf5\x4e\x9c\xfd\x86\xda\x75"
+ "\x05\x1e\x01\x5a\x7e\x93\x83\x34\x75\x99\x83\xae\x18\x14\xd6\x91"
+ "\x79\x72\x95\x1c\x53\x8e\xae\x42\x4c\x41\xde\x00\xfc\x46\x5a\xcf"
+ "\x71\x9b\x7f\x68\xeb\x0f\x65\xf3\xee\xa4\x51\x7e\xef\xd7\x11\x76"
+ "\x36\xef\x6a\x81\xcf\x80\x3f\xbf\x19\x8f\xf4\x31\x91\x93\x06\x61"
+ "\x4e\xd7\xc2\x9c\x7e\x08\xce\x8f\x66\x7d\x65\xe7\x85\x67\x01\x9f"
+ "\x7d\x83\xef\x7d\xab\x78\x5e\x78\x5f\x6c\x67\x04\xd2\x5b\x3c\x2f"
+ "\xb4\x8f\xfc\x88\x3c\xa4\x11\xcf\x0b\xef\x04\x72\xd4\xa9\x68\x11"
+ "\x4f\xb2\x29\xbf\x1d\x37\x89\xf7\x21\xdd\x30\x06\x1a\xb3\xf1\x9f"
+ "\x1a\x0f\x73\xd5\x80\xeb\xc3\xca\x19\x24\xf0\x8d\x42\x12\xc4\xe6"
+ "\xe5\xa9\xf1\x72\x8c\x3c\x7d\x17\x9f\x19\x62\xe7\x03\x5b\xc7\x54"
+ "\xda\xc7\x88\xf2\x6a\x11\x3c\xc7\x28\xe6\x74\x97\x72\x49\x9c\xba"
+ "\x52\x69\x70\x8e\x2f\xf6\xa5\x41\xec\x8b\xcb\xfa\x4c\x69\x80\x7d"
+ "\xc3\xb6\x56\x82\xbc\x6e\x05\x5c\x60\xb8\xfd\x6d\x98\x89\xdc\xb8"
+ "\x5b\xc4\x54\x5c\xb7\x42\x14\x44\x9f\x9b\x44\xbf\x8f\x86\xe0\xda"
+ "\x88\x3e\x3e\x1c\xda\xb1\x92\x1d\xa4\x4a\x0f\xba\x7c\x72\x23\x99"
+ "\xb9\x74\x08\xc6\xc4\x89\x86\xbe\xde\x00\x7d\x7b\xcf\x81\xb6\xff"
+ "\x05\xa8\xa7\xd6\xed\x71\x24\xf1\x36\x61\xcc\x60\x1e\xd5\x6d\x15"
+ "\xc6\x16\xf1\xeb\x3d\xc4\xf4\x95\x69\x2c\x2f\x14\xda\x72\x70\x7e"
+ "\xfc\x05\xd7\x31\x0d\x6f\x2b\x2b\xc2\xb9\xf2\xed\x7b\xa2\x4c\x0a"
+ "\xfd\x35\x30\x99\xf0\x04\xcd\x35\x03\x73\x67\x0c\xb3\x05\xd6\x3d"
+ "\xc8\xde\xbd\x4e\xc3\xbe\x73\xd3\x38\xa8\x58\x56\xf9\x69\x86\x7f"
+ "\xc3\xfc\xb2\x2a\x46\x31\x9f\x92\x6f\xad\x4e\x9f\x12\x49\x56\x1c"
+ "\xc1\x62\x83\xd5\xb9\xc4\x3f\xfd\xd6\x84\xf7\xc1\xfd\x2d\x70\x5e"
+ "\x27\x9d\xc7\x6d\x05\xd4\xde\x35\x36\x78\x45\x24\xfa\x96\x0d\xc3"
+ "\x78\xea\xc2\xf3\x56\xd3\xe7\x53\x9b\x07\xcc\x4d\x61\xfe\xe2\x38"
+ "\xe3\x9a\x4d\xe7\x30\xcc\x5f\x9c\xc7\xdd\x39\xad\xe3\xe0\x9f\xcd"
+ "\x5b\xb6\x36\x8f\xa0\xf3\x96\xce\xd9\xba\x42\xe9\x79\x75\x51\xd4"
+ "\xee\x85\xf4\x5c\xa6\x09\x84\x6b\xbb\x4c\xe4\xc8\x68\xa1\x8f\x34"
+ "\x0e\x0d\xc6\x7d\xb1\xb7\xf3\x16\xfc\xb6\x8d\xdf\x3a\x71\xef\x5c"
+ "\x08\x70\x37\xc6\x6a\x11\xbf\x55\x4f\x36\xa7\xf3\x0e\xfc\xee\xd4"
+ "\xce\x5b\xf3\x9d\xf9\x1c\x4e\x13\x29\xee\xd2\xb7\xb1\xc2\x7b\x8d"
+ "\x81\x67\x15\x31\x5f\xb0\x6f\x9f\x65\x32\xd5\xb7\x51\xc8\xa7\xd5"
+ "\xc0\x7b\x70\x2c\x64\x39\xb8\x4f\x8f\x13\x79\x0f\xe6\xe5\x1c\xa0"
+ "\x7b\x65\xc1\x70\xbe\x10\x68\x5a\x08\x73\x29\x01\xca\x9f\xc2\x71"
+ "\x0e\x3b\x2a\xd4\x78\x14\xe6\x48\x21\xdc\x9b\x0c\x3c\x16\x2b\xce"
+ "\x0f\xeb\xd0\x29\x11\xc8\x67\xb9\x30\x0e\xc8\x6b\xf4\x3b\x32\xf4"
+ "\x1b\xf9\x0b\xf9\x0c\x79\x2c\x64\xc5\x33\x94\xcf\x68\x5c\x08\x38"
+ "\x8f\xfd\x45\x3e\x83\xb6\xca\xc4\x58\xce\x26\x72\x9a\xee\x6f\x84"
+ "\x73\xb5\xa2\x8f\x2e\x7e\x4b\x4a\x1c\x49\x86\x41\xbb\xda\x32\x2d"
+ "\x8d\x97\x7a\xb6\xda\x3e\x81\x60\x5d\xfc\x0e\xc7\x70\xf2\xa6\xb2"
+ "\x8e\xcc\x33\x81\xd2\x98\x1f\xa5\x7b\x4b\x0e\xc4\x50\x5b\xe4\xaf"
+ "\xe0\x9a\xce\x55\xcf\x30\x91\x0a\x8c\x77\x1c\x8f\xbe\x7d\x77\x86"
+ "\x11\x2d\xf0\x2d\xe0\xd8\x99\x49\xa2\x5c\xfb\x40\x18\x7e\xcf\xaf"
+ "\x30\x40\xff\x50\x87\xae\x81\xdf\xd9\xa0\x4b\x96\x7b\xb1\x19\x8f"
+ "\x41\x5b\x8f\x90\x83\xa9\x0e\xed\x58\x98\xb3\xa2\x89\x9c\xab\xac"
+ "\xc4\x18\x2d\x0b\x7b\xc6\xf2\x4e\x4b\xe6\xaf\x60\x3c\x6f\xed\x22"
+ "\xf2\xab\x7a\x72\x0e\x73\xb2\xd4\xa6\x5f\x46\x1b\xcd\x99\xe3\x72"
+ "\x1b\xcd\xd9\x70\xe1\x7f\x2c\xfc\x17\x49\xff\xa6\xd1\xc2\xef\xe2"
+ "\xde\xff\x4d\xe3\x59\x5d\x53\x14\xfc\xc7\xb0\xb1\xd2\xc0\x3c\x39"
+ "\xeb\xb4\xff\x22\x5f\xe2\xdc\x46\x3f\x0e\xb4\x39\x29\xec\x04\x63"
+ "\xc2\x00\x9d\xa0\xdf\x2b\xef\x79\xce\x98\x82\x7c\x74\x76\x2e\xd5"
+ "\x1d\x94\xbe\xee\x5d\x3d\x4b\xe9\xc9\x62\xbe\x9e\x1d\x0d\xcf\x0e"
+ "\xcb\xbb\x44\x54\xfa\x45\xe4\x36\xb4\x7f\x87\x38\x78\x23\xea\xb8"
+ "\x42\xdc\xc8\x9a\x16\x62\xba\x2f\x71\x39\x51\xc2\xf5\x3b\xe0\xf7"
+ "\x08\x51\x4e\x82\x7b\xd4\x7e\x36\x12\x86\xf2\xd1\x93\xcb\xc9\x1d"
+ "\xd0\x7f\x9b\x48\x2b\x94\x21\xd0\x0e\x27\xd8\x12\xb0\xaf\x0f\xe3"
+ "\x7d\x98\x8b\xc0\x44\xc7\x8d\xe2\x30\xb6\x01\xfc\x71\xb6\xc1\xcf"
+ "\x4a\xd4\x6c\xed\x31\x01\xff\x57\x08\x32\xa3\x09\x73\x71\x1f\x77"
+ "\xe9\xe7\x53\x2e\xbf\xb3\xf0\xfe\x10\x2b\xca\x67\xde\xc6\xc7\xf4"
+ "\x96\x38\x3e\xe8\xaf\x1a\x02\x7a\x02\xa5\xb7\x9d\x37\x43\xdf\x2a"
+ "\xf4\x29\x24\xa0\x85\x9c\x5b\xba\x65\x03\xdd\xff\x58\xce\xec\xf3"
+ "\xe7\xe6\x8b\x7a\x38\xeb\xf7\xb9\x87\x43\x56\xf8\x11\xb4\xab\x63"
+ "\x4c\x3b\xea\xeb\xf7\x83\x86\xda\xd2\xab\xed\xe3\x88\x31\xed\x11"
+ "\xac\x23\xca\x55\x75\x6d\xe9\x1a\x72\x40\x33\x0e\xe6\xf1\x39\x15"
+ "\xcc\x95\x06\xdf\x7d\x2a\xcf\xa9\x84\xf1\xad\x60\xbe\x08\xa6\x13"
+ "\xb8\x96\xa0\xee\x0f\xeb\x48\x19\xae\xd1\xd0\x76\xac\x38\x6f\x60"
+ "\xdd\x80\x79\x6a\x62\xb9\x6c\xb2\xf1\xfb\xaf\xa9\x06\x63\x73\x50"
+ "\xbd\x81\xd5\x0f\x64\x36\xff\x73\x05\x4e\x59\x1a\xea\xe1\x7d\xcc"
+ "\x47\xcd\x54\x3c\xd3\xa1\x80\x31\x35\x15\xe3\xbb\x09\xbc\x08\xeb"
+ "\xd5\xb9\x32\x69\xde\x9a\x28\xdf\x1f\x30\xbb\xce\xcb\x73\x0d\x92"
+ "\xbe\x79\xa6\xf0\xbe\x02\xa2\xf5\x34\x0f\xf5\xc1\xb8\x56\xd5\x4f"
+ "\xcf\xcb\xe3\x0d\xf9\x4a\xee\x89\x95\xb9\x24\x50\x91\x0d\xc3\x86"
+ "\xf3\x2c\x29\x76\x58\x13\xa9\x8f\x0b\x09\xbc\x29\xea\xc9\xc4\xc1"
+ "\x7c\x9a\x86\x28\x73\x5a\x07\x07\x8c\xb4\xdd\x64\xe0\xfd\xee\x79"
+ "\x6e\x72\xa2\x8d\x68\xe7\xe5\x93\xf3\x09\xc4\xef\x49\x07\x3c\x3b"
+ "\x90\xe8\x4d\xa4\x41\x8f\x5f\x9e\x0f\x04\xa2\xfc\xd1\xa0\xc7\x36"
+ "\x53\x8b\x48\x40\x6a\x03\xdf\x9c\xfd\xaa\x7f\x00\xac\x07\xea\x77"
+ "\x80\xc7\x6e\x0c\xbc\xc9\xd0\x0d\x6d\xec\x8f\xa5\xf7\x95\xf4\xd2"
+ "\xb7\xcb\x9e\xfb\xa6\x1f\xde\x44\xbe\x53\xf8\xd6\xb7\x26\xb5\xd4"
+ "\xb7\x26\xf5\x8f\xef\xdb\x77\x39\x2e\x7d\x53\x4b\x7d\x8b\xc7\xbe"
+ "\x6d\xf2\xad\x6f\xe7\x4b\xa4\xbe\x9d\x2f\xe9\x67\xdf\xb6\x79\xef"
+ "\x5b\xc3\xdd\x9e\xfb\x96\x7c\x53\x13\x69\x78\xd8\xb7\xbe\x5d\x88"
+ "\x92\xfa\x76\x21\xea\xc7\xf4\x0d\x75\xf9\xb4\x11\x7c\x23\xcd\x19"
+ "\xb0\x88\xc5\xe4\x6d\x22\x8d\x1b\xd3\x8a\x68\x39\x14\x7e\x4f\x17"
+ "\xe6\xb7\x25\xdd\xca\x7f\xc7\xe4\x9c\x86\xfd\xf7\xeb\xd1\xdf\xb5"
+ "\xa1\x14\x78\x59\xcf\x78\xba\x91\xfa\x37\xa4\x5b\x78\xc1\xdf\xb4"
+ "\xe1\xdc\x66\xea\x8f\xd2\x2e\xe4\xe8\x6d\x0c\x6f\x0b\x6e\xd5\xa3"
+ "\x2f\x08\x07\xf3\x99\x0f\x6e\x4d\xc5\x1c\xad\x3b\x17\x59\x94\x7c"
+ "\x26\xc6\x74\xc3\x38\x8c\x2a\xc2\xe7\xb6\x66\xef\x5c\x64\xa3\xf9"
+ "\xe1\x57\xd2\x7d\xd8\x8d\x23\xc4\xbd\x87\xe2\x33\x2c\x41\xed\x20"
+ "\x9b\x34\x8e\x11\x73\xfd\xf2\x4a\x90\x67\x82\x5a\x13\xb1\x7d\x38"
+ "\x3f\x49\xcc\xbf\x0b\xfc\x6e\x12\xb0\xc1\x1a\x62\xeb\x0d\xf7\x1a"
+ "\x57\x88\xb8\xf7\x64\x22\x09\xc1\xdc\xa3\x79\x69\x83\xf1\x9b\xa3"
+ "\x05\x9e\xa9\xc6\x71\x9f\x6a\x1d\xcc\x87\xa4\x12\x3f\xdc\x73\x89"
+ "\x3e\x7a\xd5\x1a\x0b\x09\x4f\x25\xfe\x53\x93\xa1\x4d\x1b\x89\x0d"
+ "\x49\x86\xf6\x60\xac\x99\x6e\xd0\x48\x6d\x7c\x05\xd0\x1e\x7e\xff"
+ "\xf6\x4b\x24\x81\x4f\x6a\xd2\xf9\x95\x1b\x89\x0a\xf7\x67\xe2\x3e"
+ "\x4b\xb6\xc7\x72\x50\x00\xf4\xd7\x2e\xbe\x5f\x3f\xe8\x13\xcc\xe8"
+ "\x73\xfe\x61\x89\x3e\x4d\x57\x7a\xd2\xa7\x69\x16\xa3\x4f\x53\xb4"
+ "\x44\x9f\xf3\x45\x72\xfa\x34\xad\x90\xd3\xa7\xa9\x6c\x60\xf4\x69"
+ "\xda\x2d\xd1\x87\x3d\x83\xd1\xa7\xe9\xb8\x67\xfa\x34\x99\x25\xfa"
+ "\x34\x65\xf4\x8f\x3e\xe7\x47\x7a\xa7\x4f\x53\x49\x2f\xf4\x19\xe4"
+ "\x99\x3e\xe7\x5f\xef\x3f\x7d\xce\x17\xf9\x40\x9f\x20\x46\x9f\xe6"
+ "\x93\x12\x7d\x9a\xd7\xf7\xa4\x4f\xb3\x82\xd1\xe7\xbc\x4d\xa2\xcf"
+ "\x85\x71\x72\xfa\x34\x8f\x94\xd3\xa7\x79\xce\xc0\xe8\xd3\x1c\x23"
+ "\xd1\x87\x3d\x83\xd1\xa7\x39\xd1\x33\x7d\x9a\xb3\x25\xfa\x34\x6b"
+ "\xfb\x47\x9f\xe6\xfd\xde\xe9\xd3\x1c\xe5\x3b\x7d\x2e\x0c\x75\xa3"
+ "\x8f\xda\x3b\x7d\x2e\x8c\xf3\x81\x3e\x21\x8c\x3e\x2d\x4b\x25\xfa"
+ "\xb4\x3c\xd4\x93\x3e\x17\xb6\x32\xfa\x5c\x28\x94\xe8\xd3\x52\x27"
+ "\xa7\xcf\x85\xfd\x72\xfa\xb4\xa8\x06\x46\x9f\x0b\x76\x89\x3e\xec"
+ "\x19\x8c\x3e\x2d\x61\x9e\xe9\xd3\x32\x5a\xa2\xcf\x05\x63\xff\xe8"
+ "\xd3\x32\xcb\x3b\x7d\x2e\x58\x7a\xa1\xcf\x60\xcf\xf4\x69\xf9\xb8"
+ "\xff\xf4\x69\xa9\xeb\x8d\x3e\xbe\xc9\x7a\x2d\x34\x57\xcd\x8f\x6f"
+ "\xe7\xfb\xb1\xde\xda\xc1\xb1\x43\xff\x43\x2e\xf3\xfb\xb1\x9b\xb9"
+ "\x41\x01\x6c\x8f\x46\x8b\x45\x9b\x42\x1e\xab\x27\xdf\xbf\xb9\x99"
+ "\xf3\x0f\xe0\x33\x3f\xd8\xc5\x65\x7e\x14\xc3\xaf\x18\xa4\xe2\x56"
+ "\x0c\x56\xe1\x9e\x79\x4f\x6d\x31\x7f\xd8\xef\x1b\xfd\x6e\x26\xb7"
+ "\xe3\x3e\xba\x95\x20\x2f\xe3\xef\x8e\xcc\xef\x61\xdc\x77\x17\xf5"
+ "\xb6\x7f\x0b\x7d\x9d\x0e\xac\x42\xfd\xd6\x3c\xc2\x19\xaf\x24\x93"
+ "\x4f\xc6\xb8\x6f\xfa\x51\xb8\xcf\xc2\x3c\x1e\xe3\xb9\x83\xbe\xda"
+ "\x10\x39\x8a\x3f\x8b\xba\x47\x13\xb9\xf8\x38\x9f\x63\xc6\x58\xd1"
+ "\x56\x90\xd5\x7f\x05\x75\xb2\x9d\xfe\x79\x7c\xf4\xdb\x82\x8d\x30"
+ "\x9f\xd5\xbd\xf4\x31\xd4\xcd\xc7\x5c\xb3\x8b\xd3\x30\x87\xea\xa5"
+ "\x8d\x20\xfb\xfe\x13\x3e\x03\x63\x5a\x6d\x81\x23\xfa\xc9\x30\xdf"
+ "\x4c\x33\x8b\xdd\xb3\xf2\xd6\xb7\x99\x2f\xdc\xa5\x15\x22\xdf\xc1"
+ "\x73\x86\x40\x79\xae\x20\xcf\x63\xfd\x1b\xa1\xfc\xac\xcb\xf5\x40"
+ "\x28\xa3\x1d\x72\xa8\x70\x3d\x08\xca\x37\xa3\x9c\x4d\xe3\xaf\xe4"
+ "\x66\x08\x3e\xc4\x17\xed\x70\x4e\x2d\xd4\x19\xda\x42\x2e\x9e\x43"
+ "\xd9\x5d\x68\x23\x14\xca\x07\x51\x07\x16\xae\x87\x41\xf9\x03\xfc"
+ "\x76\x20\x5c\x1f\x06\xe5\x1c\x28\xff\x9a\xed\x79\xe9\x16\xe6\xe8"
+ "\xc5\xe8\x81\xed\xe5\xbf\x48\x63\x2f\x22\x0d\x98\x2e\x70\xd1\xc5"
+ "\xff\xe7\x62\xa4\xdb\xb5\xdd\x2e\xd7\x22\xc4\x6b\xcc\x47\xed\x62"
+ "\xad\xcb\x35\xad\xdb\x35\xab\xcb\x35\xb5\xbc\xcd\x4b\x6a\x97\x6b"
+ "\x44\x7e\xdf\xa5\xd1\xd2\x35\xb3\xd9\xed\xda\x44\x97\x6b\x75\xc2"
+ "\x35\x3f\x38\x1f\x2b\x7d\xc3\x33\x57\x08\xe7\x95\x70\x3e\xd9\xe5"
+ "\xfc\x6e\xe1\x3c\x3e\x3f\xdf\x44\x8a\x04\x5d\x85\xd1\x5e\x68\xbf"
+ "\xd8\xa5\xfd\x6c\x66\xe3\xb8\xb4\xdb\xe9\x3b\x17\xdc\x5a\xce\x75"
+ "\x47\xbf\x0d\xd7\x12\x91\xaf\x5c\x79\x7b\x41\x92\x76\xf6\x92\xd7"
+ "\xb4\x8b\xe2\x12\xd1\x7d\x65\xfe\xdc\x44\xed\xfc\x85\x73\xe2\x64"
+ "\xb1\xf4\xc3\x30\x16\x24\xe6\xcd\xc3\x98\x3a\x34\x47\xc5\x06\xbe"
+ "\xd9\x99\xd7\x05\x70\xb5\x23\xf3\x07\x9d\x89\x3c\x35\x16\x9f\x55"
+ "\xc0\x62\xce\x97\x63\x4c\x1e\x16\x7f\x87\x3c\x53\x4f\x7e\xb8\x4f"
+ "\x88\xbf\x63\x84\xba\xd3\xbc\xc7\xdf\xb9\x1c\x41\xe3\x4e\x42\x3d"
+ "\x16\x7f\xe7\xf2\x18\x98\xe7\x4f\xf2\x43\x58\x9e\x16\x96\xbf\xee"
+ "\x07\x51\x36\xb1\xcc\xec\xa4\xb1\x1b\x33\x98\x2d\xc3\x2d\x8e\x6e"
+ "\xb6\xb9\x0c\xef\x13\xbe\x97\x96\xb9\xdc\x6f\x64\xd7\xc5\xf5\x41"
+ "\x78\x66\xb6\x19\xf5\xe6\x21\xf5\x50\xa6\xf6\x7b\x7a\xcd\xc2\x6c"
+ "\x79\x39\xe6\x0a\x7c\x27\x7c\x6f\xf9\xbb\x29\xff\x50\x4f\x2c\x37"
+ "\x48\xef\x66\x89\x70\x89\xd1\x27\xbc\x83\x25\x9a\xcd\xd1\x1e\xef"
+ "\x4a\xfd\x13\xf9\x40\x73\x05\x3e\x1b\xf1\x8c\xf6\x35\x08\xca\x39"
+ "\xe6\x72\xb1\x3f\x2e\xfd\x43\xfb\xad\x0a\xfa\xf7\x10\x1d\x13\xa0"
+ "\x29\x0f\x34\x15\xfa\x79\x85\xcf\xbc\x54\xcb\xf2\x55\xc0\x7a\x82"
+ "\x79\x77\xe8\x5a\x65\x31\x8a\xb6\x4c\x5c\xa3\x98\x0d\xd3\x22\xc9"
+ "\x7f\x18\x3b\x2d\x47\x5c\xbf\x2c\x2e\xf2\x1f\x7b\x66\x47\xe6\x65"
+ "\xe2\xca\x43\xd2\xf3\x2e\xdf\x87\xcf\x33\x11\x4b\x31\xdb\x0f\x60"
+ "\xc6\x31\x81\x79\x63\x49\x40\x5f\x4c\xbc\x17\xfb\xe8\x2d\xd7\xa2"
+ "\xb7\xd8\x96\xd2\x38\x5e\x4e\x16\xc7\xb1\x80\xe6\x30\xb9\xbc\x5a"
+ "\xb4\xd7\x09\x79\x4e\x8c\x05\xce\xdc\xe3\x97\x77\xd1\xfc\x7d\xf9"
+ "\xf3\x0a\x1f\x08\x24\xb1\xc2\xd8\xee\x41\x8c\xc7\x39\xc3\xb0\xbe"
+ "\x75\x84\x40\x73\x61\x2f\xf3\xe5\x46\x3c\x2f\xf9\xdf\xb7\x8e\x13"
+ "\xeb\x89\xb8\xcc\xbe\x57\xb5\x0e\xa3\xf5\x58\x3e\xe8\x12\x46\xf3"
+ "\x5f\xab\xeb\x49\xab\x4e\xa8\xef\xcc\xdd\x6b\x22\xad\xe3\xf9\x9c"
+ "\xf6\x92\x8e\xcc\x56\xd0\x7f\x2e\x59\xd8\x38\xb2\xe7\xc2\x51\x87"
+ "\x7d\xc1\x31\xc2\xbd\xe4\xfc\xda\x79\x85\x40\x9f\x62\xcf\x7b\x49"
+ "\xa9\x5f\xf7\x1d\x2d\xa4\x8d\xc9\x10\x4a\xde\x86\x36\x56\xf6\xae"
+ "\x6d\xfb\x5d\x7c\x9f\x03\xc5\x3a\x0c\xbb\xe9\x35\xea\x53\xae\x4f"
+ "\x42\x7b\x90\x70\x2d\x09\xf7\xd7\x3a\x7f\x0f\x72\xf9\xed\x8f\xbf"
+ "\xa9\x5f\x73\x0a\x5d\x5b\x55\xd2\xde\xfe\x36\x23\x94\x03\xdd\xca"
+ "\x61\xb2\xf2\x52\xe6\xf7\x0c\xb2\x59\x03\xf5\x21\x17\xce\x0b\x6d"
+ "\xdf\x40\xfb\x93\xc4\x8f\x05\xde\xc0\x9c\x39\x31\xc2\x3c\xac\xc5"
+ "\x3d\xdb\x21\xf6\x97\xe9\x7e\x6d\xb8\x3e\x46\x38\x46\x08\xc7\xd1"
+ "\x2c\x17\x6f\x5b\xb2\xb8\x6f\xbb\x8d\xda\x68\xda\x56\x8b\xfb\x37"
+ "\x71\x8f\x37\xee\xef\x86\x77\x1d\x8b\x7b\xbc\x71\x3f\xb8\x70\x8c"
+ "\x10\x8e\xa3\x85\x7c\xc4\x31\x70\x9f\x73\xff\xb7\xb7\xf5\x1c\xea"
+ "\x34\x88\xfb\xb9\x1d\xd9\xe6\x54\x2e\xbb\x2d\x03\xf3\xbf\x62\x0c"
+ "\xb7\x74\x33\xcf\xb1\x9c\xe1\x56\x52\x4d\xba\x48\x75\x62\x47\x06"
+ "\xd0\x22\xb8\x4a\x6f\xa7\x36\xfc\x2a\x9b\x9d\x54\xe9\x2f\xd2\xdc"
+ "\xaf\x6f\x98\xc5\xdc\x36\xd6\xf1\x8e\x1c\x73\xaa\x30\x5f\x36\x32"
+ "\x1f\x7d\x2b\x8b\x45\x84\xb6\x36\x33\xfd\xee\x15\xd0\x44\xae\x44"
+ "\x8b\x75\xd8\xd8\x5d\xa1\x38\xb1\x25\x53\xcc\xef\x69\x4d\x15\xf3"
+ "\x89\x9b\xc8\x95\x98\x2b\x43\xef\x2e\x86\x73\xf9\x72\x9f\x69\xeb"
+ "\x07\xd8\x26\xf6\xdb\x44\xac\x93\xb0\x6d\xa8\xb3\xcb\x39\x67\x03"
+ "\xa1\x1f\x99\xe4\x31\xb6\x0f\xe5\x4a\x34\xcb\x1d\x6b\x85\xf9\xdf"
+ "\x1a\x2b\xf8\x82\x97\xf0\xe8\x4f\x8d\xfe\xe0\x38\x76\xc1\xad\x61"
+ "\xe9\x97\x49\x58\x5b\x77\x34\xfa\xa7\x37\xd0\xfd\x08\xaf\x63\x2c"
+ "\x78\x1b\x99\xa2\x27\x42\xde\xac\x2b\x0f\xe3\x5e\x82\x95\x34\xa7"
+ "\xdf\x45\x35\x60\xc7\xa8\x8e\xcc\x2b\x80\xff\x4f\x48\xb1\xdb\x72"
+ "\x5b\x41\x46\x86\xf7\x4b\x8f\x27\x50\x27\x10\xea\x44\x40\x9d\x49"
+ "\x62\x1d\xbc\xde\x81\xdf\x9e\xf8\x78\x82\xef\x75\x65\xed\xd4\x5a"
+ "\xb8\x9e\x60\xf2\xdb\x97\xc0\xfc\xbe\xaf\x00\xfd\x8b\x03\x7a\xa3"
+ "\x1b\xcc\x47\x13\xcc\xe7\x66\x2e\xbb\xbd\x96\xc6\x79\x0f\x6a\x37"
+ "\x31\x3b\xe7\x95\x83\x98\x7b\x32\xaf\x9d\xa8\xd0\x0f\x83\xcd\x9b"
+ "\x76\x1a\xcf\x14\xcf\xc1\x7a\x51\x0c\xf3\x94\xe6\x27\xf6\x4d\xf6"
+ "\xb8\x42\x6d\x93\x18\xbb\x0b\xc7\x11\xf7\x4f\x75\x64\xb6\x6b\x9d"
+ "\x79\x3a\x9c\x58\xd2\xfe\x34\x7e\xff\x80\x39\x4a\xfb\xe8\xde\x07"
+ "\xec\x2f\xb4\x55\xe6\x55\xce\x0d\x6c\xaf\xa5\xdf\x88\x72\x5b\x8b"
+ "\x98\x9f\x6c\xfb\x5a\x3f\xcd\xad\xed\xf0\xac\x6c\x67\x7e\x12\xa8"
+ "\x83\x34\xe3\xa0\x7d\xe7\x7b\x2e\xa2\xcf\xd8\xc5\xf0\xa6\xbd\x9c"
+ "\xcb\x69\xaf\xcd\xeb\x22\x2a\xe1\x7c\x79\x95\xdd\x86\x79\x29\x3c"
+ "\xc6\xca\xa1\x39\x1a\xd1\x2f\x3d\xb7\xbd\x16\xf7\x2e\x3d\x60\x13"
+ "\xfb\xdc\x51\x8e\x7b\x66\xb0\xcf\x6c\x6c\x3b\xf6\x88\xe3\x98\xd3"
+ "\x0a\x6d\xa7\x9d\x22\x0d\xa4\x63\x02\xfa\xee\xd1\x31\x49\x11\xfd"
+ "\x49\x3b\x18\x2e\x76\x39\xeb\x50\x19\x8b\xe6\xcb\x82\xf6\x37\xd3"
+ "\x9c\x7f\xf0\x0e\x40\x0b\x63\x1a\xc6\x1d\xe8\xa0\x79\x89\x57\xc2"
+ "\x75\xfa\xde\xd4\x57\xb7\x43\xd8\xb3\xdb\xb1\x4a\x5c\xaf\x4c\xc2"
+ "\xb9\x3c\x7c\x76\x52\x17\xb9\x44\x3a\xe2\xaa\x33\xba\x08\x8c\x47"
+ "\x33\xc6\x2e\xac\xb2\xc2\x1c\x4d\xee\x42\x5e\x68\xc6\x1c\xb1\x50"
+ "\x9f\xed\xb7\x0e\xc4\x31\xef\x98\x88\xcf\xc7\xb1\x05\xfd\xd0\xe2"
+ "\xa7\x19\x01\x73\xbf\xc3\x24\x8e\x69\xee\x70\xd4\xb9\xda\xbd\xc6"
+ "\xee\xc4\x31\x72\x40\x9f\xab\x0a\x61\xfd\xbe\xe5\x14\xf4\xcf\xf6"
+ "\x01\x17\xdc\x5e\x8b\x7e\xe1\xf0\x7b\xb2\xb0\xbe\x50\xda\x31\x3e"
+ "\xb0\xad\x80\x67\x3c\x50\xc5\x78\x81\xb0\x38\x3d\x36\x9d\x30\x7e"
+ "\x34\xd7\x48\x7e\x12\x1b\x07\xa1\x7e\x1d\xb3\x59\x8f\x78\xa8\x23"
+ "\xd3\x96\x2c\xd9\xac\x6d\x54\x5e\xc4\xbc\x08\x9b\xa9\x5e\x6a\x2b"
+ "\x70\xe9\xb3\x95\xee\xc1\x6d\x45\x7b\xa3\x6d\x1c\x3e\x2b\x07\x63"
+ "\xcb\x21\x5f\xb4\xb8\xf2\xbf\xed\x36\xec\x27\xfa\x1d\x3b\x82\x5a"
+ "\x8b\x60\xcd\x37\xe0\x38\xc3\x3d\xd3\x60\x2e\x78\xd4\x91\x84\xf5"
+ "\x98\xe6\x77\xec\xc8\xec\x0c\x10\xd7\x63\xd0\x71\x60\x6d\xea\x52"
+ "\x50\xdd\x17\x64\xfa\x6a\x0e\x65\xaa\x2e\x9a\x7b\x1b\xb0\xde\x28"
+ "\xe0\x3c\xac\xe1\x9d\xe3\xc4\xef\x6e\x0e\xdc\xbb\x71\x89\x7e\x73"
+ "\xb6\x8a\x79\x0b\x59\x2c\xc7\xce\x58\x69\xaf\x47\x67\x42\x8f\xbd"
+ "\x1e\xb8\xff\x68\x03\xcd\x6f\xb7\x0d\xd7\xb5\x4a\x73\x03\xae\x53"
+ "\xf4\x7e\xdc\xff\x01\x18\xf5\x1d\xdb\xc3\xd4\x80\xdf\x08\x68\x6e"
+ "\x1d\xec\x0b\xcb\x4b\x52\x4f\x7f\x03\xdf\xaa\xf0\xc8\x78\xa9\x13"
+ "\xd6\xe9\x25\xab\x45\x39\x02\xbf\xf7\x1d\x50\x3d\x45\x8c\xa3\x50"
+ "\x66\xe8\x52\x60\x9e\x79\xa8\x63\x15\x73\xcc\xd3\x9c\xf2\xec\x7d"
+ "\x76\x79\xb3\x61\xe4\xdd\x4f\x22\x30\x66\x01\xee\xf1\xa3\x63\xa0"
+ "\x9e\x37\x16\xe3\x80\x63\x4c\x53\x63\x0a\xe6\xfe\xe9\xfa\xf8\x2f"
+ "\xc3\xe9\x3e\x69\xab\xf1\xfe\x56\xf4\x05\x33\x37\xa5\xd2\x58\x5d"
+ "\x01\x53\x93\xed\x3c\xde\x47\x65\x9a\xa1\xf3\xc6\xe2\x35\x9a\x07"
+ "\x03\xdb\x1c\x70\x4c\xeb\xae\x54\x41\x3e\x36\x83\xfe\x75\x13\xd0"
+ "\x8a\xea\x45\xf0\x7b\x78\x0b\xe9\x3e\xc9\x72\x1d\xb3\xbc\x0c\x82"
+ "\x4f\xf8\x20\x16\xe7\x03\xc6\x8c\xc6\x5d\xe8\x9e\xac\xbd\x07\xf3"
+ "\x82\x77\x3f\x4b\x63\xa4\x67\x9b\x6b\x84\x31\xa8\xc9\x63\xfd\x0a"
+ "\x99\x99\xac\xa4\x7d\xc4\xfe\xf9\xd6\xb7\x6e\x8d\xa0\xcb\x0c\xea"
+ "\xc8\xec\x8e\x11\xe3\x83\x30\x99\x8e\xc5\x4e\x67\xb4\xe8\x3e\x24"
+ "\xc8\xf0\xc7\x85\x67\x1f\xbf\x0a\xcf\x2e\x10\xda\x2c\x66\xf1\xe3"
+ "\xbb\x22\xa1\x5d\x58\x53\xbb\x1b\x44\x9d\x4a\xd8\xc7\x34\x9a\xe9"
+ "\x7a\xdd\x76\x49\xa7\x62\x63\x28\xdb\xfb\xb7\x70\x61\xa2\x76\xce"
+ "\xdc\xc5\xfa\x59\x89\xaf\xc4\x6b\xe3\x16\x2d\x5a\xb8\x48\x8b\x81"
+ "\xa5\x5c\xe7\x0f\xcb\x97\x65\x57\x0b\x79\x30\x8b\xa5\x3c\x98\xf6"
+ "\x68\xd7\xdc\xb1\x26\x62\x8f\xb9\x3a\xf6\x13\x7b\x8f\x9c\xb3\x62"
+ "\x3b\xf9\x4a\x0e\xbf\x95\x94\xc2\xbf\x11\xfe\xcb\xd1\x9e\x32\xd3"
+ "\x46\x22\x41\xde\xa0\x3e\x64\x52\xdc\x0b\x7b\x04\xfa\x39\xd5\x13"
+ "\xfb\x89\xcd\x9c\x0a\xe5\x1c\xcc\x4f\x4f\xe3\xc8\x6e\x81\xfb\xe1"
+ "\xdf\x08\xff\xe5\xf0\x4f\xef\xe3\x3e\xa7\x7b\xf6\x4b\x5c\xaf\x31"
+ "\x1f\x96\x4c\xcc\x3f\x51\xc3\xaf\x50\xd1\xb9\xc7\xad\x63\xf5\xdc"
+ "\xfa\xa0\xe4\x33\xaf\x64\x0b\xf5\xe8\xf7\xc2\xe0\x15\x44\xeb\xa1"
+ "\x9e\x1f\x9f\x69\x56\x09\xf5\xe8\x9e\x4c\xf1\x7d\x30\x0f\x05\xd4"
+ "\x17\xeb\xa9\xf8\xcc\xae\x30\xa1\x5e\x20\x7d\x6e\xa6\xd2\xd3\x73"
+ "\xfd\xf9\xcc\xcf\x92\x85\x7a\x6a\xd7\xf6\x5c\xea\x0c\xe2\x32\xeb"
+ "\xf1\x9d\x6b\xb8\x15\x2a\x16\xbb\x2c\xd3\x9e\x0c\xf5\x3d\xc6\xef"
+ "\xf5\x8d\x4e\x9c\xd6\x9d\x4e\xfa\x57\xe6\xc6\x3d\x32\x77\x41\x12"
+ "\x66\x34\x4b\x5c\xb8\x24\x11\x8f\x0b\x66\xfd\x91\x1e\x16\xce\x7c"
+ "\xf5\x15\xf6\x23\x31\x21\x02\x7f\x24\x00\xbf\xe1\x71\xce\x12\x3d"
+ "\x1e\x5e\x59\x88\xc5\xe4\xf8\xd1\x4b\x5e\xc1\x83\xfb\x5e\x54\x5d"
+ "\x47\x26\x57\x0e\xbc\x51\xca\x70\x96\x03\xf9\xef\xfb\x64\x2a\x4b"
+ "\xaf\x30\x91\x83\x3a\x3b\x11\x6d\x6b\xf2\xb8\x27\xdc\x39\x8c\x7b"
+ "\x12\xb2\x42\xff\x4a\x88\x7d\x6e\x1c\xac\x19\x15\x1d\x99\xbc\xda"
+ "\x44\xe6\x25\x0b\xd8\x68\xa2\x31\x70\x33\xb9\x58\xc1\xbf\x54\xc5"
+ "\x65\x9b\xd1\xef\xbc\x10\xe3\x75\x61\x3e\x77\x28\x1b\xa1\x5c\x07"
+ "\x65\x9c\x03\x61\x50\x2e\x42\xbb\x18\x94\x35\x50\x1e\xc1\x65\x9f"
+ "\x2d\xc6\x7d\xce\x50\xd6\x42\x39\x1c\xda\x77\xe6\x7f\xf6\xbc\x67"
+ "\x90\xcf\x17\x73\xcc\xb3\x7c\xf2\xbc\xc1\x99\x4f\x1e\x73\x7d\xa5"
+ "\xa9\xa9\x0f\x02\x93\x41\xf8\x32\x3f\xcd\x6d\xab\xa0\x8e\xf3\xfb"
+ "\x2f\xb3\xb9\xf0\xc7\xc5\x18\x2e\xcc\xa6\x82\xb9\xd5\x0a\x1b\x5c"
+ "\xca\x80\xff\xdf\x97\x89\x76\x3d\x9a\x17\x14\x8e\x7c\x26\xc6\x1a"
+ "\xe6\x3d\xea\x6c\x54\x2e\x56\x90\x17\x30\x6e\xb3\x25\x7d\x8e\xe2"
+ "\xce\xcd\x44\x41\xcb\x2c\xee\x28\x7f\x49\x41\x68\x7e\x74\x31\x26"
+ "\xa1\x6b\x3c\x0b\x8f\x7b\xb2\x8e\x81\xcc\x40\x73\xa1\x25\x2c\x0c"
+ "\xb1\xcf\x8a\xa3\x72\xa0\x82\x7c\xca\xf0\xab\xd5\x48\xe5\x05\x05"
+ "\x79\x8f\x7f\x8e\xe5\xcb\x31\x29\x14\x3a\x16\xff\x2a\x61\x21\x0f"
+ "\xf7\x86\x24\xcf\x8a\xa3\xe7\xa0\xde\x4a\x90\xd5\x84\xfe\xbd\x55"
+ "\x3d\x02\xf7\xd9\x72\x2c\x4e\x87\x82\xac\x9e\x71\x5b\x06\x3e\x27"
+ "\x80\xca\x21\xc7\x48\x20\xe6\x75\xc5\xbe\x6d\x76\x89\x99\x98\x07"
+ "\xe7\xd0\x8f\xb5\xed\x39\x12\x88\x31\xa2\x85\xbe\xac\xa6\x79\xea"
+ "\xb2\x14\x5a\x31\xde\x95\x09\xce\xb9\xbf\xcf\x73\xff\x4e\xb9\xf2"
+ "\xae\x57\x46\x47\x4d\x80\x5f\xa3\x85\xd4\xe8\xae\xbc\x39\xa2\x2d"
+ "\xd8\x5a\xdc\xf6\xa1\xe5\xbf\x68\xfe\xdb\x2c\x85\x1e\xda\xa1\xfa"
+ "\x0d\x87\x7a\x78\x47\x74\x21\xf5\x83\x55\x28\x50\xcf\x89\xe4\x32"
+ "\x51\x9e\x34\xc3\xf3\x15\x85\xc8\xb3\x7c\x60\x6b\xd9\x96\xe5\x18"
+ "\xff\x5b\x01\x63\xac\xc8\xc1\x6b\x42\x1c\x31\x25\x8d\xb3\xe5\x20"
+ "\x1a\xba\x4f\x19\x64\x14\xdc\x07\xdb\xa4\x50\x6d\x47\xb9\x03\x6d"
+ "\x5a\x5c\x96\x62\x0c\xf2\x2d\xd0\x18\xe3\x98\x58\xf9\x60\x73\x06"
+ "\x1f\xd4\x36\x07\xf9\x18\x65\x5d\xdc\x3d\xd3\xa4\x50\x22\xfe\x3d"
+ "\x09\xff\x7f\x60\x79\x89\x5e\x6a\x16\xdb\x84\x72\x20\xc8\x50\x15"
+ "\x70\x54\x77\x64\x29\x75\x2e\xb9\x1f\xd9\xbe\x6c\x85\xf2\x69\x8c"
+ "\x3f\x87\x6d\x53\xd9\x59\xa1\xa2\x71\x17\xa1\xee\x34\x13\x51\xd3"
+ "\x18\x31\xf0\x1b\xe4\x9f\x3f\x13\xe1\x37\xc8\x3f\xbf\x8d\x75\x6b"
+ "\xe3\x13\xd1\x5e\x4b\x79\x5a\xa1\xcc\x07\x1e\x7d\x12\xfe\xff\x00"
+ "\xf5\x41\x7e\xfb\x1d\xad\xbf\x52\x49\xf7\x6a\x36\xf9\x69\x48\x04"
+ "\x9c\xdf\x25\x9e\xf7\x57\x44\xc2\x98\x2a\xcb\xc4\xb9\x0f\x7a\x58"
+ "\x31\x94\x8f\x8b\x76\x1e\x6a\xf7\xc9\x52\x36\xb8\x94\x77\x41\xd9"
+ "\x2a\x96\x3b\xb2\xfc\x88\x88\x15\x68\x17\x69\x4b\x8f\xde\x88\x7a"
+ "\xef\x2b\x1a\x90\x0b\x41\xbe\x81\xeb\x40\xff\x35\x34\x5e\x4f\x5b"
+ "\xe8\x64\x4b\x5b\x66\x4e\xb3\x35\xf4\xd5\x08\x2b\xe0\x1f\x5c\x03"
+ "\xf9\x6f\xfe\x34\xa1\x9d\x89\x26\xbf\xfd\xe1\xe2\xbb\x71\x99\x7e"
+ "\x21\x5c\x4e\x5b\x06\x7b\x47\xd5\x2a\xf8\xbd\xca\x12\x64\x8e\x84"
+ "\x7a\x7a\x13\xe1\x99\x5f\x56\xd2\x45\x43\x76\x97\x7a\x5a\x35\x68"
+ "\xce\xc6\x57\x91\xe7\x54\xd4\x76\x9d\x93\xa2\x8e\x42\xb9\x13\x63"
+ "\x91\xd0\x7c\x79\x18\xfb\xd4\x4e\x06\xd1\x7c\x13\x6b\xa7\x34\xd3"
+ "\x3c\x0b\x6f\xe8\x02\xc5\xb8\xa7\x80\x37\x63\x78\xa5\x3e\x01\x63"
+ "\xa1\xd2\xbc\x32\x1d\xba\x60\x1a\xff\x54\x88\x7b\xba\x29\x89\x84"
+ "\x15\x71\x2c\xee\x29\x8d\x53\x32\x08\xf4\x94\x24\xcf\xb1\x4f\xf9"
+ "\xcc\xed\x81\x62\xec\x53\xbe\xdd\x61\x83\xdf\xe1\x30\x1e\x2a\x38"
+ "\xea\x68\x59\x8a\x79\xa5\xf2\x18\x0b\x55\x09\xb8\xa7\x64\xb1\x50"
+ "\x7d\x5a\x2f\x14\x2a\x96\x73\x35\x4b\x05\xf8\x97\xca\x7c\x8a\xa4"
+ "\x73\xef\xc1\x9c\x61\xb6\x62\x85\x72\xa2\x70\xae\x14\xe8\x12\x26"
+ "\xe8\xa5\x16\xb4\x33\xa0\xbd\x0c\x30\xa1\x82\xef\x8e\xdf\xe8\x09"
+ "\x73\x5a\x43\x13\x4a\x5a\x31\x46\x46\x96\xca\x66\x52\xf8\xd3\x9c"
+ "\xbe\x54\x97\x54\xa8\x7a\xc4\x6d\x9e\xfd\xca\xc2\x39\x71\x33\xe7"
+ "\xcd\xd7\x6b\x9f\x9b\xf6\x24\x4d\xc8\x39\x5a\x3b\x37\x31\x8e\x2e"
+ "\x49\xda\xe7\x26\x3c\x31\x75\xea\xb4\x99\xff\x3e\xed\xf1\x69\xd3"
+ "\xff\xfd\x51\xb6\x6b\x72\xda\x22\x1a\xf6\x34\x71\xa1\x16\x6f\x9a"
+ "\x2d\x64\xad\x4f\x89\x5b\xb4\xd0\x1d\x0f\xc2\xa8\xad\x4d\x49\xed"
+ "\xca\x56\xfc\x4d\xed\x79\x0a\xff\x02\xd1\xce\xc6\xb0\xcf\xff\x4d"
+ "\x1c\x5b\x9a\xd3\x3e\xcb\x3f\x10\xe5\x2b\x1a\x53\x28\x94\xae\x3b"
+ "\x2a\x9c\xd3\xb8\xfe\x74\x64\xf9\x1b\x5d\xe3\x83\x09\xf7\x36\x28"
+ "\xf1\x3e\x61\x2e\x0b\xe7\x3a\xf9\x5b\x6e\x49\xa7\x31\xbe\xb2\xfc"
+ "\xad\xa2\xed\x1d\xcf\x89\x7d\xa8\xc7\x3a\x59\xfe\x8f\x3a\xf3\x56"
+ "\x67\x0d\x1a\x21\xe5\x3b\xa5\x7f\xb2\x31\x22\x04\xc5\x19\x7f\x90"
+ "\x55\x06\xc1\xff\x60\xfc\x9f\xe8\xc4\xf7\x24\xbe\x16\x75\xb6\x10"
+ "\x05\xac\xc1\xc9\x7e\x2c\xc7\x59\xd6\x71\x9a\x97\x63\xaa\xc3\xee"
+ "\x37\xd3\xa1\x84\xa3\x1f\x3f\xd3\xa1\xa2\x7a\x22\x9f\xc4\x1f\xa7"
+ "\xfb\xfd\x93\xf8\x1a\xcc\xe5\x07\x7c\xbc\x7a\xaa\x3d\x6d\xf5\x54"
+ "\x07\x6f\x9f\x09\xf2\x3b\x1c\xcf\xe3\xbe\xf5\xa9\x8e\xf3\x3c\xcd"
+ "\x67\x84\xf6\x1c\x16\xeb\xb0\x1c\xfd\x38\x67\x00\x0f\x6f\x6e\x65"
+ "\xb9\xaf\xa7\x2e\xfd\xe1\xec\xcc\xa5\x26\x96\xfb\xfa\x12\xcb\x17"
+ "\x8f\xcf\x87\x36\xd3\xa0\x9d\x43\x33\x1d\x7e\xda\xa9\x8e\x6e\x9e"
+ "\xee\xbd\xcd\x1a\x4c\x7a\xcb\x67\xed\xd1\x7e\xb1\xa6\x6b\x34\xbf"
+ "\xb6\x7d\x1a\xbf\xc6\x11\x00\xc7\xe3\x7c\x76\x5b\x01\x62\x38\xbf"
+ "\x86\x6f\xe0\xd7\x76\x4c\xe3\x73\x95\x46\x38\x1e\xe7\x73\xfd\x8b"
+ "\xf8\xb5\xa0\x7f\xe6\x06\x24\xc3\xf1\x38\xbf\xe6\xd4\x1c\xa8\x1f"
+ "\xc5\xaf\xf9\xf6\x38\x1c\x6b\xf8\x35\xa7\xc7\x43\x3d\x28\x9f\xd9"
+ "\x05\x47\x28\x9b\xc2\xa1\x1e\x94\xcf\x15\x34\x29\x06\x97\xc1\xef"
+ "\x1a\x3e\xf7\xc6\x69\xf4\x59\xb9\xc1\xb1\xf4\x59\xb9\x43\x13\xd8"
+ "\x33\xc2\x92\xd9\x33\x6e\x5a\xc5\x9e\x71\x4b\x3e\x7b\xc6\x77\x2a"
+ "\xa8\x17\xcd\xaf\x69\xb0\xc0\xb1\x96\x5f\xd3\x54\x07\xf5\xa0\xdc"
+ "\x5c\x0e\x47\x28\xb7\xc0\xb3\x6c\x50\x36\x1b\xe0\x08\xe5\x4b\xd9"
+ "\x50\x2f\x86\x5f\x63\x49\x85\x63\x1d\xbf\xa6\x15\xdb\x87\xb2\x35"
+ "\x06\x8e\x50\x6e\x9f\x04\xf5\xa0\x6c\x1b\x07\xc7\x3a\x3e\xf7\x36"
+ "\x78\xa7\xf6\x58\x3e\xf7\x8e\x28\x38\x9a\xf8\xdc\x91\xf0\xbc\x0e"
+ "\x28\x8f\x2a\x85\x23\x94\xc3\xe1\x7e\x1b\x94\xff\x49\x0b\x47\x28"
+ "\xff\x1a\xdf\x75\x0e\x9f\x7b\x37\x3e\xa7\x81\xcf\xbd\x17\xdf\x19"
+ "\xca\xa3\xed\x70\x84\xf2\xfd\xd8\x1f\x28\x47\xe0\x7d\x50\xfe\x0d"
+ "\x8c\x41\x7b\x3c\x9f\x3b\xc6\x0a\xc7\x66\x3e\xf7\x77\x30\x0e\x1d"
+ "\x50\x7e\xa4\x00\x8e\x50\x7e\x14\xc6\xd0\x06\xe5\xc8\x31\x70\x84"
+ "\xf2\x93\xf8\xbe\x09\x7c\xee\x84\x5a\x38\x9a\xf9\xdc\x89\xdb\xa0"
+ "\x1e\x94\x7f\x9f\x01\x47\x28\x4f\x81\xf1\xb3\x41\xf9\x59\x1d\x1c"
+ "\xcd\x1e\xe9\x99\x3b\x2d\x81\x5f\x31\x88\xf0\xb9\x33\x0d\xfc\x8a"
+ "\xc1\x70\x9c\x15\xc5\xaf\xf0\xd7\xf1\xb9\x71\x04\xce\xc3\x71\xf6"
+ "\x38\x28\x8f\x16\xca\x70\x7c\x45\x07\xe5\x08\xa1\x0c\xc7\x39\x61"
+ "\x50\x1e\x23\x94\xe1\x38\x17\xcb\x63\xf9\xdc\x79\x70\x1c\x04\xc7"
+ "\xb9\x05\x50\x1e\x27\x94\xe1\xf8\x47\x13\x1c\x61\xbd\x79\xb5\x02"
+ "\xce\x47\xf2\xb9\xaf\x65\x43\x19\x8e\xf1\x93\xa0\x3c\x1e\x8e\x25"
+ "\x50\x1e\x6f\x19\xd9\xa8\xc5\x35\x9e\x0f\xdd\xa3\xe6\x42\xbb\xf0"
+ "\x7b\xa9\x12\xe3\x32\x95\xa4\x99\x30\x36\xcd\x1d\xf5\x8a\x1b\xb6"
+ "\x62\xfe\x16\xac\xe3\x58\xd7\x1e\xc5\x85\xb6\xa3\xaf\xfc\x20\xa8"
+ "\x37\xb8\x49\x31\xe4\x13\xc4\x98\xea\x54\x13\xcd\x1b\x29\xc4\xdd"
+ "\x1c\x04\xf7\x1c\x02\x99\x09\xf4\x77\x5c\x4b\xda\xb3\xf9\x4c\xff"
+ "\x56\x18\xa7\x40\x3e\xf3\xc6\x7a\x38\x42\x79\xe8\x31\x18\x27\x28"
+ "\xff\xf3\x1a\x38\x42\xf9\xa5\x27\xf8\xb5\x9d\x80\x33\x43\x74\x26"
+ "\xc5\x60\x2d\xc5\x8c\x0f\x2d\x86\x10\x3b\xcf\x4f\x05\xf4\xe4\xb7"
+ "\x86\x6b\x43\xec\x46\xc2\xaf\x0f\x80\x73\x91\x50\x6e\xd2\xf2\xa1"
+ "\x5f\xb0\x7e\x67\x82\x6e\xdd\x1d\xae\x64\xcf\xbe\x91\xaf\x57\x0c"
+ "\x99\x8e\xb9\x46\xf8\xd0\x33\xde\xae\x2f\xa1\xd7\x47\x85\x1b\xd8"
+ "\x75\x35\x91\xae\xff\x01\xaf\xaf\x0f\xc1\x98\xfd\xa3\x8e\x1b\x4c"
+ "\x8a\x21\xbb\xb1\x8e\x49\x71\x43\x2d\x9f\xe9\x47\xaa\xad\xcd\xc2"
+ "\x3b\x0e\xc6\x7a\x7b\xf0\x3e\x6f\x36\x1f\x2e\x2c\x58\x93\x03\x98"
+ "\x87\x3a\x70\x88\x05\xf3\x9a\x87\x97\xd6\x2b\x02\x23\x36\xa1\x8c"
+ "\x14\x76\x67\x2c\xc3\xc2\x1b\x9f\xb5\xe7\xb6\x55\x68\x53\x42\xa0"
+ "\xbd\xc0\x07\xd3\x6d\xbc\xd5\x98\xf6\x04\xe0\x28\x9e\xb7\x06\xd0"
+ "\x3d\x4b\xac\x8e\x95\xfa\xa2\xb2\xdf\x26\x6a\xf7\x86\xb6\xf0\x5e"
+ "\x2a\x9f\x09\x34\x73\x64\x1d\x51\xf3\xc3\xef\xd4\x03\x0d\x1e\x83"
+ "\xb6\xa7\xef\xe1\x2c\xca\x60\x0b\xf1\xd7\x26\xed\x83\xf6\x6f\x64"
+ "\xfe\x51\x42\x5d\x7e\xd0\x11\x35\x47\xeb\xd2\x6b\x2b\xf6\x01\xbd"
+ "\x31\x56\x45\x47\xd6\x8d\xdb\x9c\x79\xbb\x0b\x82\x35\x18\xa7\x02"
+ "\x9e\x11\x89\x6b\x31\xdd\x8f\xa9\x08\x0c\xac\x04\x9a\x38\xd4\x7b"
+ "\xc8\x03\x89\x44\x15\x62\x53\x2b\xd2\x96\xd0\x3d\xca\x56\x63\xca"
+ "\x31\xea\x3b\x8d\xed\x43\x9b\x57\xf8\xe0\xb6\x52\x8c\x6f\x80\x36"
+ "\x91\x3c\x0e\xda\x83\xe7\x19\x93\x4e\xe1\x7b\x57\xee\x6b\xb5\x28"
+ "\x3b\xb2\x02\x35\xe2\xb3\x70\x7d\xc8\x81\xb1\x41\x19\x19\xe3\x6b"
+ "\xcc\x74\x38\x30\x5e\xdd\x6a\xd7\xf1\x9d\x2b\xc4\x13\x98\xbb\x20"
+ "\x71\xd1\xeb\xda\xc5\x73\x53\xe2\x1e\xbd\x6b\xc9\x68\xed\xa2\x64"
+ "\xed\x22\x5c\x16\xd9\x09\x58\x3a\x17\x27\x2c\x4c\xd4\x62\x36\xfa"
+ "\x9e\xb9\xac\x35\x5c\x60\x5b\x3e\x8d\xf5\xa4\x08\xa5\xba\x28\x67"
+ "\x08\xd7\x24\x26\xf2\x1c\xbf\x2e\xa1\x96\x4f\x9f\xc8\x74\x1e\x45"
+ "\xe0\x27\xda\x51\x83\x41\x16\x1e\x7a\xa1\x73\x50\xe0\x38\xe8\xa7"
+ "\x11\x78\xa1\x4e\xf8\x8e\xc6\x62\xff\x29\x42\xd1\xef\x95\x7d\x67"
+ "\xce\x0a\x34\x99\xc8\x1f\x99\x5c\x66\xb8\x33\x99\xad\x85\x41\x54"
+ "\x1f\xe6\xb5\xe1\x1a\xde\xd0\xa4\x05\x79\x4a\x41\xbf\xe9\xd9\xef"
+ "\xe0\xab\x49\x2b\x8d\x23\x00\xfc\xac\xc5\xf8\x1d\x8e\x75\x9d\x16"
+ "\x6e\x78\x80\x96\x7b\xb7\xc9\x94\xbe\x95\x28\x77\x02\x2d\x54\x5a"
+ "\xe0\xb3\x51\xe4\x8e\x7d\x69\xcd\xca\x4b\x8a\xa0\x91\xfb\xd2\x6a"
+ "\x95\x7c\x7e\x57\x46\x9b\xb6\x99\xd8\x84\xbc\xe6\xd5\x76\x1b\xf9"
+ "\x72\x3c\x41\x7d\xaa\xd4\x3a\x4c\x5d\x6c\x1d\xda\x59\x6b\x5b\xaf"
+ "\xa9\x31\x8e\xfa\x0d\x99\x70\x37\xff\xc3\x17\x65\x84\x98\x15\x43"
+ "\xeb\xbe\x18\x8f\x32\x7e\xdb\x6a\x5b\x60\x5b\xb6\x75\xc3\x60\xf4"
+ "\x97\xb7\x74\x6e\xd0\x98\xba\x42\xed\xea\x03\x50\xe7\x30\xe8\x20"
+ "\x47\x40\x93\xc6\x38\xb1\x9d\xa3\x1a\xf5\x3b\xbb\xf2\x95\xe5\x65"
+ "\xe3\x98\xfd\x35\x16\x78\x77\x36\x7d\x9f\x83\x5f\xec\x2a\xc3\x67"
+ "\x93\x9d\x5d\x13\x95\x5f\x8e\xed\x71\xbd\xf1\x8b\x88\x32\xd2\x81"
+ "\xf1\x96\x41\xc7\xdb\x7b\xaa\x90\xf0\x1b\x82\x6b\xb6\xa7\xd8\x94"
+ "\x31\x26\xa2\xac\xac\x2d\x24\xa9\x8d\x24\xc8\xfe\x83\x4e\xf5\x11"
+ "\xdc\xdf\x89\xf1\x50\x8f\x68\x68\x5c\xc4\x34\x23\xcd\x33\x1c\x52"
+ "\x05\xeb\x36\xf7\x83\x6e\x50\xd5\x34\x23\x81\xeb\xf7\xdb\x7f\xaf"
+ "\x21\x95\xf1\x16\x52\x1d\x6d\x20\x9d\xca\x48\xf2\xe9\x8b\x06\xf2"
+ "\x0e\xe8\x0b\xef\x5c\x22\x81\x54\x06\xed\xd6\x0d\xb2\x77\xeb\x54"
+ "\xf6\x65\x3a\x8c\x53\xc5\xf3\x3f\xe8\x86\xa0\x4c\x6a\x5f\xa8\x0b"
+ "\xa8\xb2\x18\xc8\x03\xcd\x44\xd7\xa9\x24\x21\x9d\xcb\x74\x43\xaa"
+ "\xf4\x85\xd0\x16\x08\x99\x30\xae\x18\x23\x0f\x63\xe7\xe1\x38\xdd"
+ "\x18\x4d\xa6\x99\x15\x41\x9b\x86\x1c\x27\xc3\x30\x46\x2b\xca\x79"
+ "\x18\xdf\x19\xe6\x6f\x8d\x23\x6c\xb0\x21\xed\x0a\xf4\x0b\x63\x10"
+ "\x7d\x68\xc9\x40\x39\x19\x64\x00\x05\xbe\x33\xc7\xeb\x86\xcc\xc4"
+ "\x63\xae\xf9\x7e\x94\x95\xb9\x0e\x0d\xe6\xf0\x0a\xc0\x7e\x62\x3e"
+ "\xed\xe5\xe7\x60\x2c\xd3\x75\x2a\xa8\x17\x08\xe7\x83\xab\xcd\x36"
+ "\xe2\xb8\xdb\x92\x7f\xbf\x9e\xe6\x49\x0e\xdb\x9c\x46\xd4\xf9\x69"
+ "\x24\x4c\xfb\xcf\x38\x76\x43\xf7\x38\x3e\xb0\x64\xf0\x59\xb7\x1b"
+ "\xd1\x2e\xc2\xce\xa9\x37\x69\x9f\x22\x44\xfb\x1b\xfa\x7b\x82\xf6"
+ "\x11\xa0\x61\x58\x70\x04\x95\xe3\xa9\xee\xa8\x7e\x98\xf1\xaa\xfa"
+ "\xc1\xce\x41\x73\x55\x5c\x56\x91\x96\x5b\xa1\x1a\x81\xf9\xd8\x2f"
+ "\x29\xd4\xc3\xf8\xdc\xa4\x28\xbe\x40\x53\x4a\x73\x74\x28\xd4\x43"
+ "\x3b\x07\xdd\x02\xeb\x59\xd2\x2e\x68\x7f\x5c\xa7\x42\x75\x1c\xfe"
+ "\x6b\x85\xfb\x03\xf0\xbd\x1d\x86\x46\x1b\xbe\x37\xcd\xfb\x04\xef"
+ "\x35\x13\x68\xc6\x0f\x0f\x32\xd1\x5c\x08\xdd\x30\xbe\x42\x5e\x5c"
+ "\x1c\x0f\x1c\x03\xae\x5b\x37\x84\xbe\x6b\xb7\x2e\x10\xc6\x17\xe3"
+ "\x31\x87\xa4\xcd\x82\x7b\x36\x04\x59\xe1\x5a\x70\x67\x58\xb0\x0e"
+ "\xf3\xaf\x55\xeb\x2d\xc4\xb1\x3e\xc8\x82\xf1\x06\x37\xa6\x10\x35"
+ "\x37\x2c\xc8\xc4\xaf\x0f\x02\x19\x9b\xce\x1f\x82\xfd\xe4\x72\xdf"
+ "\xc0\x7c\xdc\x0a\xe8\x3f\xac\x81\xaa\xe3\xf0\x5f\x6b\x52\x84\x64"
+ "\x77\x8e\x6c\x02\x99\x3d\x24\x16\xfa\x3a\x82\xcf\xfa\x67\x0b\xfe"
+ "\x86\x6b\x23\xa0\xcf\x4b\x70\x1c\x70\x3c\x84\xb1\x98\x2f\x8d\xc5"
+ "\x2b\xa3\xa1\x5e\x0c\x97\xb5\xa1\xcc\xa4\x50\x8f\xe3\xb3\x1e\x2c"
+ "\x71\xa9\xb7\x5e\xaa\xb7\xa0\x86\xd5\xdb\x9a\xc8\xea\x8d\xd3\x01"
+ "\x1d\x1e\x14\xc6\xfb\xa4\x87\xf1\x3e\x2a\xdd\xfb\x87\x64\x76\x6f"
+ "\xb6\x8a\xdd\xfb\x6b\xbc\xf7\x06\x79\x9f\x86\x2a\xa4\xfa\xcf\x6e"
+ "\x63\xf5\xb3\x76\xb1\xfa\x23\xad\x2e\xf5\xee\x96\xea\xbd\x3c\x96"
+ "\xd5\x5b\x3b\x89\xd5\x1b\x3d\x0d\xae\xc7\xf5\xec\xcb\xd0\x97\xa5"
+ "\x7b\x52\x76\xb3\x7b\xb6\xc5\xb3\x7b\x9e\x6a\x80\xeb\xeb\xdd\xfa"
+ "\x92\x23\xd5\x4f\x14\xde\xfb\x3f\x6d\xac\xfe\xe3\xf9\x2e\xf5\x3e"
+ "\x61\xf5\xf0\xfa\xc7\x50\x4f\x1d\xd1\x39\x28\xc3\xc0\xea\x4d\x8a"
+ "\x40\x7e\x84\x3a\x27\xb8\x2c\x6d\x54\xe7\xa0\xdb\xc6\x41\x3b\xe1"
+ "\x40\x1b\x0d\x1e\x81\x76\x1a\x2e\xbb\x6d\xb5\x49\x11\x5c\xb4\x99"
+ "\xd9\x06\x30\x17\x37\xf0\x85\x96\x6c\x0e\x25\x81\x1b\x43\x59\xfc"
+ "\xf9\x8e\xac\xd0\x40\xa7\xbc\x2f\x60\x28\x62\xb0\x49\x11\x58\x08"
+ "\x38\xec\xf0\x68\xaf\xca\x0a\x8d\x74\xda\xcb\x38\x58\xcf\xd7\xb6"
+ "\x7b\xdc\x5b\x40\x73\x74\xe3\x9a\xbe\xae\x5d\x9f\xcf\x11\xcc\x8b"
+ "\xae\x00\x7e\x06\x79\x24\x74\x2e\xac\x5f\x34\x3f\x35\x57\x10\x60"
+ "\xe0\xb4\x80\xc7\x17\x89\x5f\x75\x6a\x33\x29\xe1\x9a\x95\xf9\x5d"
+ "\x44\x55\x05\xda\x07\xd6\x2f\xe1\x40\xee\x59\xe0\x07\x6b\x62\xe8"
+ "\x8a\xfc\x76\xa1\x3d\x43\xb8\x36\x7d\x3e\xcb\x6f\x8e\xb2\x10\xe2"
+ "\x38\xcc\xdd\x40\x9a\x77\x6f\x01\xca\x02\xa1\x9f\xc0\xef\x00\xac"
+ "\xdb\x39\xaa\xc1\xd0\xf9\x6e\xb8\xb6\x2b\xb4\x5b\xdd\xf5\xee\xf9"
+ "\x8c\xee\xe1\x01\x86\xee\x0d\x83\xb5\xf6\x77\xef\xcc\xb7\x8f\x6a"
+ "\xd2\x3a\x42\xbb\xf3\xe1\xd9\x80\xf1\x85\xca\x1d\x5c\x89\x72\x47"
+ "\x9a\x51\x89\xed\xee\x4b\x33\x28\xf7\xa6\xd5\x28\xf7\x72\xa5\xca"
+ "\x7d\x69\xf9\x70\x2c\xc6\x1c\x6c\x20\x7f\xfd\xca\x7f\x6f\x5a\x39"
+ "\xac\x31\xbf\x1a\x0f\xe3\x35\x5a\xb4\x37\xf2\x4f\xd8\x49\x55\xb1"
+ "\x9d\x1c\x4c\xbc\x42\x2c\x41\x6d\xf9\xf0\x5f\x60\x19\x16\xac\xb1"
+ "\x0c\xd3\xd4\xd0\x3e\x0f\x0f\x31\xe0\x3b\xe2\x9e\xd6\xbd\x1c\xeb"
+ "\xb3\x30\x1e\xd8\xe6\xfc\xcd\xf8\x5d\x55\x8c\x5f\xad\x08\xd3\xf5"
+ "\x88\x5f\xad\x64\xf9\xff\x9c\x31\xac\x7f\x8a\xf8\xd5\x82\x5e\x4f"
+ "\xe3\x57\x83\x8e\x46\x75\x35\x58\xeb\x68\xce\x50\x3b\xc8\x54\xeb"
+ "\x07\xe5\xa3\x4e\x86\x32\x54\x47\x56\xd8\x34\x51\xa7\x42\xb9\xc1"
+ "\x91\xd3\x66\x80\xff\x22\x38\x9f\x60\x52\xfc\x4d\x8c\x91\x6f\xe5"
+ "\xd7\xed\xc5\xfc\x85\x7e\x0e\x3e\xfe\x5f\x85\x6f\xe5\x8f\x39\xd6"
+ "\x76\x9a\x1c\xeb\x35\x25\x70\x6e\x1c\xfc\x3f\xea\x58\xbb\x37\x0c"
+ "\xfe\x35\xf0\x3f\x02\xfe\xb5\xf0\x1f\x0e\xff\x3a\xf8\x8f\x80\xff"
+ "\x31\xf0\x3f\x16\xfe\xc7\xc1\x7f\x24\xfc\x8f\xe7\x87\xee\x1d\x8d"
+ "\xf1\x37\xa1\xed\x28\xa0\xbb\x46\x6c\x57\x1a\xdf\xb0\xa3\xf0\xbe"
+ "\x91\x28\xd3\x70\xb9\x49\x09\xd4\x8e\xbf\xb5\x51\x47\xe7\x08\xe0"
+ "\x17\x3f\xb2\x99\x58\x46\x86\xab\x2d\x23\xef\x4c\xb6\x0c\xfd\x35"
+ "\xfe\x67\xc0\xff\x6a\xcb\xfa\xe0\x08\xa0\x5f\x29\xd0\xd1\xd8\x91"
+ "\x35\x6c\x8c\x49\x31\x42\xc3\xec\x3e\xc3\x22\xe1\xf7\x58\xe1\x37"
+ "\x60\x83\xc6\x80\xbf\x2d\xc3\x42\x32\xa0\x1c\x63\x52\xdc\x42\xeb"
+ "\xb5\x0d\x0f\x8e\x14\xf6\x77\xe2\xf9\x44\x93\xdf\x29\xba\x9f\x13"
+ "\x65\x1b\xd1\x4f\xc0\x75\xde\xcc\x7f\x45\x3f\x73\xfe\xac\xe4\x99"
+ "\x8b\x13\xe6\xbe\x12\xb7\xf8\x11\xed\x5d\x73\xb4\xba\xb9\x8b\x5e"
+ "\x9f\xf9\xfa\x92\xb8\x25\x71\x54\x9c\x82\x53\x77\xcb\x7d\xd8\x70"
+ "\x3f\xab\x1d\x64\xf3\xe0\x39\x3c\xbf\xfc\x65\xa2\x9c\x64\x01\x5e"
+ "\x1b\x15\xae\x0d\x6a\xd8\xc2\xef\x6e\xb1\x28\x27\x99\x4d\xc4\x8e"
+ "\x32\xcf\x86\x00\x43\x70\xc3\x63\x70\xce\xa6\x9c\x84\x31\x13\x81"
+ "\xf7\xab\x1b\x8c\x04\xeb\x30\x19\xe8\x73\x52\x81\x32\xd0\x86\x00"
+ "\x2d\xd6\xe1\x41\xf6\xa1\xc7\xd0\x4e\xcb\x64\x68\x83\x87\x39\x83"
+ "\x75\xf7\xc0\x39\xf4\x99\xe0\x61\x3e\xf1\xed\xcb\xf9\x0a\x68\x63"
+ "\xef\x3c\x8b\x12\x6d\x59\x53\xb0\x5d\x98\x4f\xfc\xbb\x0d\x86\xbd"
+ "\x50\x77\xef\x3c\xb8\x7f\xd4\xf9\x0c\x1e\xe6\xda\x1e\x28\xd7\x2b"
+ "\x6e\x52\xef\x85\xfb\xa9\x9c\x0f\x7d\xdc\x09\xe7\xd2\x97\x10\x95"
+ "\x38\x87\x51\x4e\x75\xce\xe3\x24\x94\xf7\x86\x2f\xc5\x79\x0c\x7d"
+ "\xd1\xf2\x30\x6f\xb7\xc3\xbd\x3b\xe6\x31\xdd\x07\xe4\x66\x3f\xd4"
+ "\x73\x10\x2b\x10\x23\xaa\x53\x99\xbe\x53\xc2\xd5\x82\x9e\xe4\x87"
+ "\xf7\x7e\x8a\xd7\xde\x01\x9e\x63\x72\xf4\x70\xab\x28\xdb\xfe\x59"
+ "\x88\xf7\x76\x63\x1d\xf0\xc7\x0c\x72\xc7\x25\xc5\xb0\x4a\x1c\x3f"
+ "\x1c\x27\xfc\xf6\xc9\x67\x0d\xcb\xc6\x98\x12\x45\xa1\x24\xa0\x7b"
+ "\xfd\x9d\xf1\xcc\x2e\x72\xd3\x18\x11\x27\xad\x61\x77\xc6\xbb\xd2"
+ "\x8d\xd1\x4b\x1b\xb7\x60\xd6\xec\x84\xb8\x39\xf4\x73\xd9\xac\xc5"
+ "\x8b\x97\xcc\x8f\xd3\xc6\xcd\x7a\x25\x5e\x4b\x2f\x6b\x97\x2c\x86"
+ "\x2a\x73\x13\x17\x6b\x17\xbe\xb1\x40\x3b\x7f\xf1\x5c\x94\x9a\xe3"
+ "\x16\x2d\x5a\xa2\x4f\x1c\x42\xd8\x9d\xda\xf9\x4b\x12\x12\xe7\xea"
+ "\xe1\xc7\xe2\xb8\x05\x73\xb4\x94\xea\x8b\xa1\xa9\x84\x04\xad\xf0"
+ "\x84\xc5\xf1\xb3\x16\x21\x23\x2c\x78\x0d\x2a\xb9\xdc\x2f\x97\xa9"
+ "\x03\x31\x9e\x1e\xfa\x71\x5d\x52\x68\xd6\x97\xa9\x60\xac\x0b\xee"
+ "\x8c\x47\xdf\x03\x28\x17\x50\x5d\x28\xeb\xa6\xf1\x68\x23\xfe\x4b"
+ "\x28\x51\xb5\x01\xef\x77\x64\x69\xd4\xe2\xbb\x51\x9b\x31\xc6\x18"
+ "\xc5\xf8\xb5\x0a\xcd\x0a\xba\xdf\x18\xe6\x01\xf5\x4d\xc9\xba\xe9"
+ "\x0f\x6c\x2c\x34\x91\xae\xf6\x27\x66\xef\xd4\xbc\x80\x7e\x78\x30"
+ "\x17\x0a\x50\x8e\x10\x72\x42\x28\xe0\x9e\x37\xf1\x1e\x6e\xbd\xa6"
+ "\x14\xee\x4b\x96\xd6\x1a\x4d\x14\xd6\xa7\xf5\xb2\x6e\x7a\x97\x1f"
+ "\x16\x1c\x01\xe7\xa8\xed\xda\xcb\x5a\xa2\x6d\x87\x76\x8f\x94\x10"
+ "\x72\x6f\x18\xd1\xb5\xe7\xb6\xdb\x3a\x82\xdb\x8a\xbb\x32\xc9\xe0"
+ "\x2e\x98\xcf\x36\x25\xb9\xa3\x13\xf8\x62\xe9\x83\xc4\x6f\xf9\x64"
+ "\xa2\x2c\x99\x57\x82\x31\x92\x49\xc5\xc4\x42\x52\x1d\x0b\xfa\xb0"
+ "\x6d\x1b\xa9\x30\xd6\x93\x4a\xfb\x87\x2c\xef\x48\x0a\xca\xe2\x37"
+ "\x77\x62\x4c\xbc\xf4\xe5\xbc\x63\xe7\x67\x16\xff\x1d\x2d\x25\x98"
+ "\x2f\xe4\x8e\x6a\xfb\x59\x63\x75\xea\x7b\xa4\x3a\xb9\xda\x88\xf1"
+ "\x48\x60\xdc\x1a\xf7\xc2\xb5\x1b\x2a\xe0\xbe\x29\x64\x30\x94\x4f"
+ "\xe2\x33\x56\x6f\xe0\x6b\xdf\x1a\xce\xd7\xbd\xb5\x81\x37\x65\x0f"
+ "\xe7\x1b\xb2\x85\x1c\x20\xf8\x6d\x1f\x7d\x18\x90\x4f\xf5\x49\x44"
+ "\xd3\xa2\xb8\x59\x4f\xf5\xf2\xf1\xb4\x7c\x33\x94\x29\x36\x57\x27"
+ "\x6f\xc0\xf2\x2d\x50\xce\x67\xe5\xcd\x58\xbe\x15\xca\x06\x56\xfe"
+ "\x02\xcb\x23\xa0\x5c\xc2\xca\x55\x84\xc6\xd5\x50\xdc\x6c\x64\xe5"
+ "\xaf\xb1\x0c\x63\x7f\x73\x8d\x31\x09\xfb\x7b\x06\x68\x76\xf3\xe9"
+ "\xf4\xd3\x44\x59\x9d\xdc\x44\xe7\xc3\xbe\xb4\x78\xb4\x1b\xc0\x7c"
+ "\xb8\x79\x16\xf2\x3b\x60\x13\x19\x14\x81\xc7\x9b\x41\x57\x24\x83"
+ "\x41\xbe\xba\x11\xde\xe7\x28\x8e\x9d\x47\x3b\xc9\x87\xcd\x53\xa7"
+ "\xda\x79\x23\xe8\xf8\x1a\x7e\xfd\x0d\x5a\x7e\xeb\x79\xcc\xd3\x0d"
+ "\xf3\xbc\x3d\xa2\x24\xc5\x46\xe3\x54\x83\x4c\x0b\x73\xe8\x16\x1a"
+ "\x2f\xc6\x02\x32\xa2\x97\xb8\xb5\x6a\x7e\x6d\x97\x1e\x74\xaf\x80"
+ "\xc9\x3a\x3b\xfa\x4b\x83\x5c\x7c\xcb\xd1\x83\xf1\xd0\xd6\x86\x90"
+ "\x95\x9c\xe1\x7c\x2c\x97\x1e\x4d\x78\x6d\x93\x66\x72\x3c\x6f\x84"
+ "\xb5\x4a\xc1\xec\xcc\xfc\x59\x78\xfe\x59\xfa\xdc\x91\x4d\x1a\xee"
+ "\x8d\x78\xcc\xff\x45\x10\x63\xd2\x70\xdd\x4e\x02\x3c\x59\x16\x1d"
+ "\xe2\x58\x1f\x92\x71\x30\xbe\xd1\xb7\x5c\x7a\x8a\x5b\x6a\xbc\xfa"
+ "\x2b\x41\x9f\x30\x6e\xab\x1d\x9e\x63\x87\x77\x45\x19\x61\x07\x57"
+ "\xae\x04\x59\x45\xb3\x7d\x76\xad\x3f\xff\x46\x74\x08\xbc\xd3\x83"
+ "\xd5\xba\x2b\xa4\xaa\x0b\xe7\xca\xad\xf9\x07\x93\x09\x99\x90\x6c"
+ "\x37\x86\x58\x68\x7c\x6d\x35\xe6\x9b\xe1\x87\x76\xe9\x5b\x14\xb7"
+ "\x9a\xa6\xa4\xc2\x3b\xc0\xbb\xef\xad\xaf\x55\x71\xf0\x1e\x0f\xb0"
+ "\x71\xc3\xfb\xca\x60\x6c\x03\x44\x5d\xc0\xb7\xfe\xdf\x4a\xf9\x86"
+ "\x5b\x1c\x4d\x70\x1f\xf4\x4e\x90\x4b\xb8\xee\xe8\x10\x0e\xd6\x21"
+ "\xbc\x76\x50\x77\x91\xe0\x33\xd9\x58\xdf\xba\x96\xe9\xbf\x30\xce"
+ "\xf0\x7c\x8c\xeb\x2d\x8e\x2b\xd4\x2d\x73\x74\xc7\x7b\xa6\xff\x86"
+ "\x90\x28\xe8\x1f\xe1\xd7\xee\xf5\x7c\x7d\xdd\x9e\xb3\x8c\x3f\x1a"
+ "\xc7\xc2\xff\x44\x7e\xeb\x9d\x19\x96\x91\x8d\xd1\x34\x3f\xeb\x86"
+ "\x41\x06\xf1\xfb\x2b\xcc\x37\xe0\x91\x11\xb3\x4a\x40\x7f\xf6\x9c"
+ "\x8f\x64\x32\xcb\x8b\xe7\x7f\x96\x0f\x71\x60\xbe\xe7\x2b\x18\x23"
+ "\xbe\xf9\xa0\xce\xea\x23\x4d\x47\xbc\xe7\x8d\xa6\xd8\x3e\xe8\xe1"
+ "\xdd\x3e\xb6\x67\xf5\xca\x23\x06\x18\x17\xf5\x5e\xd2\xc5\x8f\x57"
+ "\x30\x79\xfd\xf6\x8d\x38\x56\xb8\x8e\xa4\x9c\x20\x4a\x1b\xac\xa1"
+ "\x1f\x3e\xbf\x5a\x39\x3a\x96\x28\x1c\x20\x03\x1c\xaa\x29\x23\x53"
+ "\x27\x91\xf4\xca\xf8\x56\x22\xe6\xbb\x83\x75\x4d\xfb\xc1\xf3\x16"
+ "\x25\x7e\xef\xc1\xfc\x76\x54\xb7\xdd\x10\x14\xf5\xd1\xd7\xb0\x76"
+ "\x82\xfc\xb0\xfd\x6b\x8b\xd2\xde\x16\xad\xa5\x31\xea\x41\x8f\x4f"
+ "\x8f\xe7\x39\xe7\x37\x20\xcc\x63\x92\x6d\x1e\x83\xf9\xc3\x8f\x44"
+ "\xd5\xd0\xb8\x01\x47\xa2\xcb\xc8\x91\xba\x42\x52\xd1\x70\x1a\xf7"
+ "\x53\x6f\x3d\x12\x9d\x8f\x72\x63\xb0\x1d\x64\xc3\x77\x40\x36\x84"
+ "\xf9\x7a\x03\xa7\x9e\xdc\x2c\x7e\x07\xc2\x7c\x78\xa2\x5c\x68\x87"
+ "\x39\x5a\x24\xe4\xbc\xb3\x67\x8d\x58\x5d\x24\x7c\x13\xc2\x5c\x78"
+ "\x6f\x27\x91\xf0\xb7\x95\x5c\xb4\xa7\xef\x3f\xc1\xaf\x53\x9f\x6b"
+ "\x0d\x37\x74\x72\xb3\x98\x13\x6f\xca\xeb\x5a\xf2\x77\x78\xf7\x83"
+ "\x3a\x5f\xe7\xe4\xed\xd4\xb7\xcd\x0e\x7c\x67\x07\x9e\xb3\xc3\x78"
+ "\x9a\x14\xb7\x4d\x03\xba\x79\xd4\x45\x44\x1a\x74\xa7\x8b\x34\xd0"
+ "\xde\x4d\x69\x00\x3a\xcc\xb2\x17\x04\x1a\x9c\x02\x1a\x34\x00\x0d"
+ "\x32\x49\xc6\xe1\x69\x15\x64\x6a\x14\xd0\xc0\xdc\x8a\xf9\x0d\x58"
+ "\xce\xc1\x44\x36\xf6\x94\x16\xa7\x2c\x4a\xf4\x0b\x45\x1a\x6c\x7b"
+ "\x91\xd1\x60\xc7\x8b\x16\x90\x87\x1a\xf5\x1f\x40\xd9\xf1\x46\xb4"
+ "\x16\x73\x4e\xf1\x99\xb1\x98\x1f\x9d\xd1\xa2\x1b\x68\xd1\xcd\x68"
+ "\x91\xf6\x3a\xd0\xe2\x78\x2d\x8d\x6d\x75\xa4\xae\x82\x54\xc4\x1a"
+ "\x48\x25\xe0\x12\xd0\x62\x16\xd2\x05\x75\x71\xc7\x32\x5d\x28\xe8"
+ "\xde\x61\x45\x29\x44\x23\xd2\x03\x74\xfd\x21\x39\x29\x04\xfd\x84"
+ "\x23\x60\x6e\x8a\xf4\x08\xa3\xf4\xb8\x28\xd0\x03\xe4\x19\xcc\xcf"
+ "\xbc\xa9\x0b\xe8\xd1\x05\xf4\xc8\x64\xf4\x40\x9c\x9f\x62\x0d\xe1"
+ "\xb9\xef\x75\x18\xfb\xa2\x27\x3d\x96\x09\xf4\x38\x35\x10\x7a\xdc"
+ "\x61\xed\x49\x8f\xdb\x6b\xfb\xa2\x87\x34\x27\x46\x56\x22\x3d\xba"
+ "\x0d\xc2\x9c\x18\x85\x73\x22\x43\x79\x2f\xac\x45\x38\xa6\x87\x6a"
+ "\x76\xd3\x39\x81\x79\xc5\x3e\x78\xde\xa6\xac\x68\x00\xba\xcc\xe1"
+ "\x1d\x54\xef\x15\xe8\xc2\xe8\x11\xa0\x2d\xfe\x9a\x8d\xbf\xf6\x19"
+ "\x5c\x33\x70\x6e\x20\x7d\x80\x4e\x30\x7f\x3c\xe5\x8b\x74\xfd\x56"
+ "\x0a\x6d\x72\x38\x4f\x70\x8e\xe0\x7c\xa8\x8c\x3f\x8d\x39\xe2\x95"
+ "\x47\xa2\xca\x09\x7e\x33\x3d\x12\xbd\x1b\x68\x55\x48\x1c\x6f\x00"
+ "\x6d\x92\x70\x6f\x08\x19\x89\x79\x23\x8f\x44\xaf\x46\x79\x41\x0d"
+ "\x3c\x7f\x83\x03\xe8\xe4\xe8\xd0\x0c\xc9\x06\x5d\x0a\xbf\xa5\xba"
+ "\x7e\x43\xc5\x1c\xd9\xfc\xa0\x11\xab\xe1\xbc\xca\x0e\x34\x82\xb9"
+ "\x23\x9b\x33\xce\xdc\xd9\xdf\xe9\xc8\xa6\x7a\x12\x10\x34\x97\xd1"
+ "\xc8\xe1\x32\x67\x26\xcf\xc5\x39\x93\x01\x34\x3a\xe1\x23\x8d\x46"
+ "\xb2\x1c\x83\xc3\x01\xab\x87\xee\x25\xb0\x4e\x02\x8d\xb4\xf1\xde"
+ "\x68\xe4\x30\x34\x8e\x75\x04\xb6\x65\x63\x9e\x05\x6e\xe1\x34\x05"
+ "\x07\x7a\x53\x17\xe8\xa7\x47\x2c\x76\x92\x0a\x3a\x44\xca\x69\x32"
+ "\xa8\x7a\xda\x31\x52\x6d\x2a\xa5\x31\xd2\xd1\x86\x8c\xb9\x4b\xaa"
+ "\xed\xa5\x80\x57\x1a\x0b\x96\x37\xd1\xb2\x85\x2c\x7b\x99\xf8\xd1"
+ "\x7c\xb2\xd1\x06\x92\x0d\xfc\xb9\xfd\x45\x03\xd0\xa2\x2b\x83\x0f"
+ "\xc4\x9c\x4b\xc4\x88\x3e\xe5\xe9\x4b\x49\x60\x65\x7c\x05\xc6\xc5"
+ "\x3c\x8b\x31\xc8\xab\xac\xd0\xa6\x85\xef\x72\xc0\x9a\xb1\x39\x93"
+ "\x2f\xc5\x3c\x14\x0f\x24\x53\x59\x1c\xf8\x65\xd4\x07\x28\x8b\xa0"
+ "\xad\xcc\x98\xf6\x36\xc8\x5e\xa3\x68\xee\x1e\x38\xa7\xa8\x9c\x67"
+ "\x85\xeb\xff\x74\x1b\xf6\x8b\xc6\x7c\xb5\xb3\xe3\x03\x18\x4f\x7c"
+ "\xf8\xcd\xbf\xdd\x93\x66\x51\xe5\x83\xde\x0b\x32\x1a\xb6\xd3\xc9"
+ "\x33\x9d\x70\x62\xf5\x71\x1b\xb5\x59\x5a\xd2\xe3\x07\xe5\xa7\xa0"
+ "\x2f\x15\xe6\xb4\xc0\x35\xfb\xae\x4a\xf4\xbf\xe0\x0d\xb0\x5e\x0d"
+ "\x1f\x64\x28\x99\x6d\x51\x4a\xeb\xf2\x9d\xe1\xb0\x9e\x45\x4f\xd0"
+ "\xf1\xe9\x98\xfb\x63\x2f\xbc\x17\xbf\xae\xd3\xf2\x61\xbd\x8d\x62"
+ "\xca\x47\xb3\x57\x2b\x79\xe0\x69\x1b\xe0\x43\xc5\xd7\xff\x4d\x73"
+ "\xfc\x36\x29\xc2\x1f\x3a\x1c\x6d\x27\xf8\xfc\xe9\x77\xe3\xf7\x81"
+ "\x3b\xe3\x3b\x95\xef\xd9\x3a\x07\x8d\x68\x48\x6f\x90\xf2\x9b\xba"
+ "\xe6\x31\x45\x9c\xd9\x3e\x1b\xda\x44\x9c\xa9\xcf\x50\x32\x6c\x89"
+ "\x44\xbb\x5e\x80\x3b\xb6\x54\x9a\x2f\x92\x34\xe0\xe3\xca\x78\x03"
+ "\xcd\xcf\x12\x0c\xf8\xce\x2d\x03\x3c\xe9\x06\xbd\x1f\xf0\x04\x71"
+ "\x60\x33\xe0\x07\xb7\x0c\xf4\xfd\x2e\xd0\xf7\x05\x1c\x41\xd9\x0b"
+ "\x8f\x2f\x03\x8f\x86\x94\xc3\x39\xa0\x13\x07\xb8\x0e\x78\xa2\x7b"
+ "\x27\x85\x84\xbf\x03\x3c\xba\x09\x71\x04\xe4\xe2\x29\x7a\xc0\x91"
+ "\x37\x00\x47\x92\x68\x9e\x69\xcd\x66\x25\xc3\x8f\xcf\xea\x57\x2b"
+ "\xf3\xc5\x3c\xf3\x74\x7c\xc3\x0f\x55\x21\x7f\xc4\x66\x60\x5f\x95"
+ "\x0e\x5c\x9f\x96\x45\xfb\x55\x59\x81\x47\x36\x68\x4c\x78\x8e\xce"
+ "\xdb\x37\xe2\x87\x70\x8c\xd7\x22\x71\x4c\xb6\x5c\x22\x11\x34\x17"
+ "\xeb\x0f\x9a\x21\x79\x0b\xc8\xe8\xcd\x97\x48\xf8\xe6\x05\x44\x07"
+ "\xf3\x55\xb9\x19\xfa\x30\xe3\x75\x35\xa1\x79\x50\x06\x8d\x30\xc3"
+ "\x79\x8f\x79\x50\x40\xae\xd6\x6c\xc6\x39\xb3\x50\xe7\xec\x93\x3d"
+ "\xff\xee\x0c\x07\x8c\x1d\x8d\x19\xa7\xb8\x6b\x24\xf3\x8f\x3e\x53"
+ "\xcc\xe4\xfc\xbb\xa6\x31\x1f\xa3\xef\xb6\x81\xae\x32\xb8\x45\x71"
+ "\xd7\x0d\x7c\xee\xf7\x06\x7d\x0a\x51\xb4\x88\xd7\x40\xf6\xe4\x80"
+ "\x56\xf7\x67\x90\x0c\x6e\xe8\x34\xc0\x89\x8b\x98\x57\xc0\xc7\x79"
+ "\x78\x17\xf5\x7f\x73\xe4\xdf\xbd\x8a\xfa\xf5\xac\xbb\x3b\x7b\x4b"
+ "\x0b\x89\xe0\xff\x08\xf4\x98\x07\xef\xda\x42\xc2\x8b\x5a\xe0\x5d"
+ "\xdf\x60\xef\x8a\x98\x81\x74\xe1\x32\xdf\x47\xdc\xee\x35\x87\x98"
+ "\xe5\x8f\x3a\x25\xda\x87\x00\xc3\x7e\xc5\x8f\x42\x9f\x61\x1a\xd3"
+ "\xa7\xa3\xda\x7e\x9a\xe0\x73\xd1\x46\x54\xdd\x4a\x79\xda\x81\xbc"
+ "\xcc\x19\xee\xcc\x98\x59\x07\xbc\xdd\x11\x0f\x32\xe0\x9d\x19\x7b"
+ "\xeb\x51\xcf\x67\x32\x9f\x49\x71\xe7\x68\x94\xd3\xf6\xc1\x39\xe4"
+ "\x7d\x17\x9e\x1f\x8d\x3c\x8f\xd7\x29\xdf\xc3\x7d\xd5\x75\x8d\x04"
+ "\xdb\x73\x6d\x07\xe9\x2f\xb6\x05\xf3\xf1\x1c\xb6\x85\xbc\x80\xb6"
+ "\x1d\x9c\x6b\x8c\xf6\xa5\xe8\x1f\xae\xe1\x43\xed\x6a\x56\xb6\xa0"
+ "\x9d\x49\x8d\x3c\x40\x79\x05\xf0\x1b\x63\x36\xf3\x7c\xb4\x1f\xf0"
+ "\x19\xf6\x73\x08\xd0\x3b\x42\xe4\x0b\x38\x17\xe6\xce\x1b\xc1\x2b"
+ "\xd4\xa8\xd3\x84\xe1\xef\xfe\xf2\x87\x6f\xf4\xfb\x27\x93\x57\xdf"
+ "\x35\x6d\x23\x7e\x3f\xbd\x03\x71\xd3\xd1\xe6\x82\x99\x66\x86\x99"
+ "\x88\x49\x22\x6e\x52\x6c\xa2\xb9\x21\x4a\xd1\xcf\x32\x9e\xf6\xd1"
+ "\x47\xdc\xac\x34\x4b\xb8\x39\x45\xef\x82\x9b\x66\xbe\x8b\x1b\xe9"
+ "\x09\x37\x7f\x7d\x4e\x8e\x9b\xbf\x6e\x94\xe3\xe6\xbd\x4f\xbb\xe3"
+ "\x66\x4f\xcc\xd4\xdd\xe5\x09\x2f\x41\x8f\xb9\xa3\x45\x71\x8f\xcd"
+ "\x3b\x56\xea\xa2\x7c\xc7\xca\xbb\x67\xc9\xb1\x52\x57\xf0\xff\x2f"
+ "\x56\xde\x7d\x45\x86\x95\xea\x7e\x62\x65\x0b\xc5\xca\x30\xfe\x7b"
+ "\x98\x13\x02\x7e\x6c\x9e\xe7\x05\x2b\xe7\xf5\x31\x17\xfe\xe8\x0d"
+ "\x2b\xef\x99\x2c\xc7\xca\x7b\x32\xe4\x58\x79\xcf\x43\x12\x56\x0a"
+ "\xd7\xae\x0a\x56\xde\x33\xe9\xfa\x60\xe5\x3d\x93\x28\x56\x5e\x42"
+ "\xac\xbc\xf7\xee\xbe\xb1\x52\x17\xed\x19\x2b\xf1\x3c\x62\xa5\x2e"
+ "\x5a\xc2\xca\xd3\x7d\x60\xe5\xe8\x20\x1f\xb0\x32\x8c\x62\xa5\xda"
+ "\x0b\x56\xce\x83\xb1\x12\xf8\x82\xf2\x9e\x1b\x6f\x08\x58\xa9\x71"
+ "\x62\x65\x3f\xf8\xc3\x37\xfa\x8d\x0e\xec\x0d\x2b\xb9\x6c\x26\x5f"
+ "\x22\x56\xf2\xa1\x02\x56\x26\xd8\x49\xca\x49\xc0\xc8\xe3\x2d\xd4"
+ "\x07\x81\xfa\xe4\xc2\x7f\xea\x0b\x88\x45\x83\x0d\x3b\x60\xbc\xaa"
+ "\x4d\x25\x14\x9b\xa8\x6f\xe9\x24\xc4\xaa\x12\xa8\x5b\xe8\x94\x3b"
+ "\x29\x76\x9e\x14\xb0\x33\x46\xc0\xce\x19\x3f\x02\x3b\x5f\x44\x5a"
+ "\xde\x77\x5b\xa7\x52\xc4\xce\x75\x80\x9d\xf7\x51\xf9\x01\xbf\x81"
+ "\x32\xec\x8c\xd8\x28\xf6\x0b\x6d\x9a\xd5\x89\x6f\x13\xd6\xaf\xd6"
+ "\x9e\x38\xfa\x0c\x6d\xef\x75\xe3\x3c\x33\x71\x62\x69\x8c\x84\xa5"
+ "\xd0\xd6\xd3\xde\x71\xf4\xbe\x42\x27\x8e\x66\x02\x8e\x9e\x71\xc1"
+ "\x51\xd0\x9b\x3e\x42\xcc\x03\x1c\xed\xa0\x38\xfa\x99\x80\xa3\xf7"
+ "\x7f\x70\x38\x06\x70\xf4\x19\x11\x47\xef\xab\xb3\x65\xbe\x67\xb3"
+ "\x65\xf5\x8d\xa3\x1d\x14\x47\xf5\xd7\x1e\x47\xcb\xdc\x70\x14\x74"
+ "\xd7\x77\x32\xbd\xe0\xa8\xc8\x8f\x14\x47\x33\x24\x1c\xa5\xe3\xfa"
+ "\xc0\x84\xaa\x58\x18\xf7\x58\x3d\xd5\xdd\x9c\x38\xaa\x2f\x61\x38"
+ "\x0a\xe7\xa8\xfd\x64\x31\xe0\x28\xf0\x5f\x7a\x25\xc6\x06\x24\x91"
+ "\xd0\x47\x35\xe2\xeb\x16\x98\x33\x38\x46\x4e\x3c\x9d\x07\x73\x06"
+ "\x31\xa6\x0d\xe6\x0c\xe0\xe8\x8c\x2b\x6a\x42\xe7\x4b\x16\xcc\x97"
+ "\x16\x2f\x39\xf8\x44\x5f\x57\xaf\x78\xfa\xc0\x26\x39\x9e\x3e\x50"
+ "\x23\xc7\xd3\x07\xde\x94\xf0\x54\xb8\x86\x78\x0a\x34\xe3\xd6\x4e"
+ "\x0b\x40\x4c\x1d\x18\x9e\x3e\x50\xe4\xc4\x53\xa5\x80\xa7\xf3\xfa"
+ "\xc6\x53\xfa\xfd\xcf\x0b\x9e\xba\x62\x83\x77\x3c\x7d\xa0\x48\xc2"
+ "\xd3\x88\xa5\x4e\x3c\xad\xf5\x86\xa7\xf7\x19\x3c\xe3\x29\x9e\x47"
+ "\x3c\xbd\xcf\xe0\xc4\xd3\x5a\x0f\x78\xfa\x8c\x2b\x9e\x3e\x38\x97"
+ "\xe1\x69\x09\xc5\x51\xc4\xd4\x2a\x2b\xf0\x07\xce\xb9\xc4\x42\x8a"
+ "\xa9\x1c\x60\x2a\xe6\x25\xc6\x9c\x54\xe8\xd3\xee\x09\x53\x19\xe6"
+ "\x9a\x08\xe2\x2a\xce\xcd\xf4\xc9\xa0\xef\xc2\x5a\x04\x63\x42\xd7"
+ "\x5e\x71\xfc\xb6\xb8\xe0\xeb\xcc\xa5\x6a\x94\xed\x64\xbc\xc2\x89"
+ "\xbc\xd2\xa6\x43\xff\x56\x19\xaf\xf8\x46\xcb\x07\xe3\xbd\x61\xab"
+ "\x37\xdd\xfd\x30\xea\xee\xd3\x89\x72\xd9\x74\xc0\xd7\x68\xd4\xdd"
+ "\x8b\xdd\x74\xf7\xe2\x9e\xba\xfb\x89\xde\x71\xd4\x27\xdd\xfd\x79"
+ "\xa4\xe1\x6f\xe2\xe4\x38\xfa\x9b\xb9\x72\x1c\x7d\xa8\x11\xfb\xc5"
+ "\x70\xbc\xd8\xb3\xee\x4e\xe7\xf9\x6f\x3e\x71\xea\xee\xb5\x72\xfc"
+ "\x94\x74\xf7\x87\xd6\x7b\xc7\xd1\xdf\x98\x64\xf2\xe8\x0c\x01\x47"
+ "\x67\x0b\x38\x3a\x5b\xc2\xd1\x23\xc7\x44\x79\xf4\xb7\x8e\x43\xb5"
+ "\xae\x38\xfa\xdb\x70\x27\x8e\xd6\xf5\xc4\x51\x11\x43\x11\x4f\xb1"
+ "\x1d\xb4\x65\x6d\x03\x9c\xde\x39\x5b\xaf\x64\xb6\xda\x58\x1c\xbb"
+ "\x00\x77\x5b\x6d\xa5\xf9\x0a\x49\x8b\x41\x3c\x2d\xa4\x78\x1a\xa2"
+ "\x20\xb3\x00\xfb\x82\xd1\x67\xbf\x08\xbf\xdd\x27\xb1\x9c\x6e\x68"
+ "\x5f\xe2\xde\x60\x39\x42\x45\x3b\x13\xbc\x2f\xfd\x66\xff\xf2\x69"
+ "\x01\x53\xdb\x61\x3c\x80\xe7\xde\x69\x07\x4c\x4d\xf2\x20\x9b\x2e"
+ "\x03\x4c\x4d\x71\x91\x4d\x61\xee\x7f\x36\xdb\x1d\x53\xc7\xac\xad"
+ "\x42\x5e\x41\x4c\x95\xe9\xf1\xc5\x3f\x03\x3d\x7e\xcc\x05\x39\x96"
+ "\x3e\x34\x42\x8e\xa5\x63\x8e\x4a\x58\x2a\x5c\xbb\x2a\xb2\xe9\x98"
+ "\xe6\xeb\x23\x9b\x8e\x69\x96\xf4\xf8\x87\x0e\x3a\xb1\xf4\xb8\x37"
+ "\x2c\xfd\x4d\xb3\x67\x2c\xc5\xf3\x88\xa5\xbf\x69\x76\x62\xe9\x71"
+ "\x0f\x7a\xbc\x0c\x4b\xff\xf9\x03\x86\xa5\xc5\x4c\x36\xad\x15\x65"
+ "\xd3\xe2\x5f\xa0\x1e\xff\xcf\xc5\xbe\xea\xf1\x87\xcd\x0c\x3f\x11"
+ "\x9f\x44\x0c\x95\xf4\xf8\x62\xef\x7a\x7c\x1f\x18\xea\x93\x2c\x4a"
+ "\x31\xf4\x77\x1f\xc8\x31\xf4\x77\xdb\xe5\x18\xfa\x2f\xb7\xb9\x63"
+ "\x68\x4f\xfc\xfc\xdd\x45\x4f\xd8\xc9\xf4\xf8\x47\x2a\xbc\xe3\xe6"
+ "\x58\x8d\xef\xb8\xf9\xf0\x43\x72\xdc\x1c\x1b\xf3\x7f\x03\x37\x1f"
+ "\x3e\x24\xc3\x4d\x75\x3f\x71\xf3\x27\xd1\xe9\x1f\x71\xb3\x7f\x3e"
+ "\xe2\x66\xff\x7c\xc4\xc5\xfe\xf9\xc8\x55\xb4\x7f\x3e\x72\x9d\xec"
+ "\x9f\x8f\x68\x25\x19\xf4\x11\x47\xdf\xb8\x39\x56\xeb\x19\x37\xf1"
+ "\x3c\xe2\xe6\x58\xad\x84\x9b\x7d\xc9\xa0\xff\x72\xce\x07\xdc\xfc"
+ "\x99\xeb\xf4\xff\xd2\xab\xfd\xd3\x93\x4e\x8f\xb8\x49\xf1\xb2\xd6"
+ "\x4d\xa7\x9f\xee\xaa\xd3\x17\x4b\x3a\xfd\x44\x86\x5b\xd5\xf6\x7c"
+ "\xb9\x4e\x7f\xd5\x71\x74\xdc\x65\x9b\xd3\x1e\xba\x06\x70\x74\x1c"
+ "\x8d\x5b\x6b\x73\xda\x43\x23\x97\x8a\xfd\x62\x3a\xfd\x3a\xc2\xfa"
+ "\xe5\x41\xa7\xa7\x7e\xb6\x8f\x4e\x70\xea\xf4\xb5\xee\x3a\x7d\xe4"
+ "\xdd\xde\x31\xf5\xd1\x04\x8f\x3a\x3d\xea\xdf\x14\x53\xf5\x14\x53"
+ "\xdb\x37\xb8\x62\xea\xbf\xbe\x45\x31\xf5\x29\x11\x53\x1f\x2d\xb1"
+ "\xc1\xdc\xb4\x0d\xea\x1b\x53\xb1\x1d\x09\x53\xe3\x7f\x1a\x4c\x35"
+ "\xf6\x1f\x53\x5d\xf7\x8a\x7e\x06\xef\xee\xc4\x54\x3a\xc6\x8f\xdd"
+ "\x55\x15\x8b\x98\x1a\xef\xa6\xdf\x17\x7b\xd6\xef\x0f\x11\x25\x8e"
+ "\x8f\xa8\xdf\x23\x0d\x28\xde\x5c\x53\xfd\xfe\xb1\xe5\x72\x6c\x7d"
+ "\xac\x44\x8e\xad\x8f\xc5\x49\xd8\x2a\x5c\xbb\x2a\xfa\xfd\x63\xa9"
+ "\xd7\x47\xbf\x7f\x2c\x55\xc2\xd6\xc8\x17\xfa\xc6\xd6\x47\x13\x3d"
+ "\x63\x2b\x9e\x47\x6c\x7d\x34\xb1\x57\x6c\x7d\xca\x15\x5b\x1f\x7f"
+ "\x5a\xc4\x56\x49\xbf\x07\xfe\xc0\xf9\x97\x98\x3f\x70\xfd\xfe\xe9"
+ "\xeb\xad\xdf\x3f\x3e\xd1\x27\xfd\x7e\x03\xe0\x2c\xe8\xe2\xcb\x8e"
+ "\x82\x7e\xff\xac\xa0\xdf\xd7\x19\xdc\xf4\x7b\x43\x0f\xfd\x3e\xf5"
+ "\x59\x01\x53\x61\x4e\x51\x4c\x9d\x5d\x3c\x70\xfd\xfe\x39\xa4\xe1"
+ "\x13\x13\xe4\x98\xfa\xc4\xd3\x72\x4c\x9d\x70\x12\xfb\xc5\x30\xdd"
+ "\xe0\x59\xbf\xa7\xf3\xfc\x89\xf5\x32\xfd\x1e\xfa\xd7\x53\xbf\x9f"
+ "\xf0\x96\x0c\x53\x67\xb8\x62\xea\x13\x46\x99\x9c\x0a\xef\x85\x98"
+ "\xfa\xc1\x19\x86\xa9\x1f\x9e\x71\xc1\xd4\x29\x1f\x0a\x98\xfa\xe4"
+ "\xe5\x43\xd3\x5c\x31\xf5\x49\x95\x88\xa9\x14\x2f\x67\xd8\x94\xe9"
+ "\xd1\x3d\xfd\x4e\xa8\xbf\x0f\xfa\x02\x41\xdb\xb8\xaf\x0a\xdb\xdc"
+ "\x7e\x26\xbe\x6f\x7f\x93\x68\xcf\xfe\x26\xd5\x89\x26\x52\xd1\x90"
+ "\x4f\xfd\x4c\x8a\xd0\xcf\x64\x05\x19\x59\xd4\xc5\xf6\xe9\xd3\x7c"
+ "\x1e\xed\x9e\xf7\xe8\xbf\xfc\x82\x84\xb3\xe8\x93\xf5\x0e\xfa\x64"
+ "\xb5\x33\x1f\x20\xa0\x77\xcf\x3d\xf9\xa2\xdc\x04\x78\xf0\xe9\x19"
+ "\x77\x9c\x1d\xff\x66\x15\xf2\x4f\x4c\xbc\x9b\xce\x6f\xf8\x19\xe8"
+ "\xfc\xe3\x4f\xcb\xf1\x75\x82\x5a\x8e\xaf\xe3\x0f\x4a\xf8\x2a\x5c"
+ "\xbb\x2a\xb2\xeb\xf8\xba\xeb\x23\xbb\x8e\xaf\x93\x74\xfe\x09\x9f"
+ "\x3a\xf1\xb5\xc6\x05\x5f\xcf\xb8\xe2\xeb\x13\xe5\x14\x5f\xcf\xb8"
+ "\xe3\x2b\x9e\x47\x7c\x7d\xa2\xdc\x89\xaf\x35\x6e\x3a\xff\x19\x77"
+ "\x7c\x7d\x6a\x13\xc5\x57\xe0\x05\xb9\xec\x6a\xe8\x5b\xe7\xaf\xfb"
+ "\xb9\xe9\xfc\x4f\x15\xf9\xa4\xf3\x23\xa6\x26\x30\x4c\x45\xcc\x12"
+ "\x71\x55\xd2\xf9\x0d\x5e\x75\xfe\xbe\x70\xd5\x27\x59\x95\xe2\xea"
+ "\xbf\x6d\x92\xe3\xea\xbf\x6d\x95\xe3\xea\xef\xef\x72\xc7\xd5\x9e"
+ "\x98\xfa\x6f\xe7\x3c\xe1\x29\xd3\xf9\x9f\x39\xee\x1d\x4b\x27\x06"
+ "\xfa\x8e\xa5\x4f\x3f\x2a\xc7\xd2\x89\x51\xff\x77\xb1\xf4\xe9\xa3"
+ "\x32\x2c\x55\xf7\x13\x4b\x7f\x12\x3b\xc0\x33\x77\xcb\xb1\xf4\x99"
+ "\x18\x39\x96\x3e\x33\x54\xc2\x52\xe1\xda\x55\xc1\xd2\x67\x74\xd7"
+ "\x07\x4b\x9f\xd1\x49\xb2\xea\xef\xfd\xfb\xc6\xd2\x89\x61\x9e\xb1"
+ "\x14\xcf\x23\x96\x4e\x0c\x93\xb0\xf4\x74\x1f\x58\xfa\xfb\x0b\x3e"
+ "\x60\xa9\xdc\x0e\xe0\x8e\xa5\xd7\xdd\x0e\xf0\xfb\x66\x9f\xec\x00"
+ "\x22\x96\x3e\xdb\xd3\x0e\x80\xf8\x4a\xed\x00\x30\x5e\x22\x86\x51"
+ "\x3b\xc0\x78\x86\x65\xd5\xf6\xd5\x32\x3b\xc0\xd5\xc7\xd6\x49\x9d"
+ "\x36\xa7\x3d\x35\x13\xb0\x75\x92\x83\x62\xab\xd3\x9e\x1a\xb5\x5e"
+ "\xec\x17\xb3\x03\xac\x21\xac\x5f\x1e\xec\x00\x4f\x60\x7b\x93\x27"
+ "\xcb\xec\x00\x2e\x58\x0b\x6d\x4d\xf0\x8e\xb3\x93\x13\x65\x76\x80"
+ "\x7a\x09\x67\xdb\xd1\x47\x1d\x70\x90\xe2\xec\x70\x57\x9c\x9d\xf2"
+ "\x3e\xc5\xd9\x27\x44\x9c\x9d\x5c\xda\x01\x73\xb3\xc3\x57\x9c\xc5"
+ "\x7d\x04\x67\x62\xaf\x0f\xce\x96\xfa\x80\xb3\x2e\xb6\x81\x4f\x61"
+ "\x3c\x9c\x38\x4b\xc7\x7d\xea\xe3\x55\x31\x88\xb3\xb1\x6e\xb6\x01"
+ "\x83\x67\xdb\xc0\xc1\xeb\x61\x1b\x98\xba\x51\x8e\xb7\x53\x2b\xe4"
+ "\x78\x3b\x75\x85\x84\xb7\xc2\xb5\xab\x62\x1b\x98\x5a\x78\x7d\x6c"
+ "\x03\x53\x0b\x25\xbc\x8d\x5a\xd2\x37\xde\x4e\x4e\xf5\x8c\xb7\x78"
+ "\x1e\xf1\x76\x72\x6a\xaf\x78\xfb\x84\x2b\xde\x3e\x1b\x27\xe2\xad"
+ "\x64\x1b\x30\x08\xb6\x81\xd5\x7d\xdb\x06\xea\xbc\xd8\x06\x26\x5c"
+ "\x6f\xdb\xc0\xb3\x73\x7c\xb1\x0d\x74\x6e\x60\x7e\xfb\xcb\xd0\x6f"
+ "\xff\x65\xc0\xdf\xa8\x63\x30\x06\x7d\xfb\xed\xa7\x8a\xfe\xa7\xb1"
+ "\x85\x02\xce\x16\x7a\xb4\x0d\x1c\x6e\xf6\x6e\x1b\x38\x7c\xdc\xd5"
+ "\xff\xf4\xb9\x59\xf2\xef\x56\xcf\xc5\x89\xdf\xad\x0e\x7f\x8d\x38"
+ "\xfb\x3c\xcd\xdb\xc8\x15\x04\x1b\x59\xdc\xc0\xe7\x13\xb0\x9f\x9e"
+ "\xfc\xf8\x3f\xe3\x5c\xbf\x65\x3d\xb7\xdf\x69\x2b\xa8\x41\xbc\x2d"
+ "\x24\x1c\x1f\x3f\x08\x63\x7e\x53\x5b\xc1\xf3\xc8\x7b\xcf\xdf\xe6"
+ "\x8a\xbb\x7b\x4f\xb9\xe2\xee\x73\x66\x11\x77\x1d\x80\xbb\x7b\xea"
+ "\x0b\x99\xfd\xf5\x45\xe6\x9b\xba\xed\x45\x17\xdf\xd4\x63\x9f\x0b"
+ "\xb8\xfb\xef\x17\x0e\x99\xe0\xfd\x7b\xf3\x9f\x82\xfb\x77\x9c\xea"
+ "\xaf\x0f\x6a\xa1\x47\xdf\x29\x01\x9f\x3c\xfa\x4f\x41\x5f\xd5\x9b"
+ "\x84\xb9\xea\x80\x79\xba\xc9\xc5\x7f\xaa\x28\x05\xe6\xb3\xb0\xaf"
+ "\xa4\x57\x3f\xd4\x17\x25\x3f\x54\xbe\x20\x88\xe6\x70\xe5\xd6\x07"
+ "\x1b\xbb\xf8\x78\x3f\x3e\x2c\xc8\x8e\xcf\xef\xee\x86\x75\xe7\xc9"
+ "\x68\x3f\xa6\xd7\x05\x99\x00\x7b\x82\xd9\xb8\x4f\x0b\x77\xc0\x5a"
+ "\xe3\x80\xb5\x86\x2b\x08\x32\xd9\x51\x36\xd9\x10\xd4\x50\x04\x7a"
+ "\x9e\x3d\x93\xe6\x67\x1d\x92\x0b\xba\xde\x16\xd4\xf3\x2e\xc1\xdc"
+ "\x48\xd7\x29\xb1\x3f\x22\x8e\x86\x34\xc3\x7b\x5c\xea\x5d\x96\xb3"
+ "\xff\x20\xe1\xa8\xf1\x99\xc3\xf0\xcc\xe9\x37\x57\x21\xef\x46\x4b"
+ "\x7b\x0a\xa8\xcc\xec\xc5\x57\x16\xfb\xc2\xe2\x1b\x02\x2f\x5c\x05"
+ "\x9b\x84\x6b\x7f\xe4\xb8\x3e\xfd\x75\x39\xae\x4f\x7f\x4f\x8e\xeb"
+ "\xd3\x5f\x90\x70\x5d\xb8\x06\xb8\xee\xc8\x64\x72\xb4\x63\xed\x40"
+ "\xe5\xe8\xe9\x7a\x11\xd7\x39\x01\xd7\x37\xf7\x03\xd7\x7b\x95\xa3"
+ "\x5d\x70\xc9\x3b\xae\x4f\xd7\x4b\x36\x89\xe7\x27\x7b\xf4\x91\x3d"
+ "\xe5\x8a\xeb\xcf\x59\x29\xae\x9f\x72\xc7\x75\x3c\x8f\xb8\xfe\x9c"
+ "\xd5\xeb\x7e\x82\x53\xee\xdf\xd3\xfe\xf0\x20\xc5\xf5\x5a\xc1\x47"
+ "\xb6\xc6\x87\xfd\x04\xb5\x0c\xd3\x45\x2c\x47\x7b\xd5\xf5\xb5\x49"
+ "\xfc\x21\xc2\x17\x9b\x04\xc5\x72\x33\xc3\x72\xc4\x46\x11\xcf\xfb"
+ "\xb3\x9f\xa0\x2f\x3c\x17\xe5\x66\xc4\x73\x6f\x72\xb3\x1c\xcf\xa3"
+ "\x1f\x94\xe3\x79\xf4\x43\x72\x3c\x8f\x79\x50\x8e\xe7\x31\x11\xee"
+ "\x78\xde\x13\xcb\xa3\xdf\xf4\x84\xe3\xfa\xe7\xd1\x46\xf1\x92\xc9"
+ "\x3b\x86\x47\x97\xf8\x8e\xe1\x2f\x6c\xff\x3f\x87\xe1\x6a\x77\x0c"
+ "\x7f\xa1\x19\x31\xc8\x91\xe5\x86\xe1\xf3\x04\x0c\x17\x70\x64\x4b"
+ "\x8b\x20\x0b\xbb\x63\xb8\x19\xde\xa3\x0f\x7d\xdc\xfe\xbd\x3b\x86"
+ "\xbf\x78\x5a\x86\xe1\xea\x3e\x30\x7c\x1e\xb3\x83\xc8\xfc\x72\xbd"
+ "\xd8\x42\xe0\x3d\xcc\x9b\xbc\xc8\xe6\xe2\x98\xb9\xf6\x47\x8e\xe1"
+ "\x2f\x3d\x24\xc7\xf0\x97\xe2\xe5\x18\xfe\xd2\x6d\x12\x86\x0b\xd7"
+ "\xae\x8a\x6c\xfe\xd2\x98\xab\x2e\x9b\x8b\xfc\xd1\x2b\x86\xbf\x34"
+ "\x46\x92\xcd\x63\x86\xf6\x8d\xe1\xd1\xa5\x9e\x31\x1c\xcf\x23\x86"
+ "\x47\x97\x7a\xdd\xe7\xd0\x03\xc3\x63\x2e\xfb\x80\xe1\x72\x5b\x88"
+ "\x88\xe1\x82\x2d\x64\x8b\x8b\x2d\xc4\x91\xc9\x6c\x21\x9b\x5a\x18"
+ "\x6f\x04\x2b\x18\x9f\x02\xff\x68\x36\x2b\x7b\xd7\xdd\x36\x0d\xc8"
+ "\x0e\x12\xe3\x35\xff\xa3\x27\x3b\x08\xc5\x6f\xdc\xe3\xf0\x02\xe0"
+ "\x76\x4d\x3f\xf7\x38\x4c\x14\xf7\x38\xe4\x7b\xd9\xe3\x20\xe0\xf9"
+ "\x8c\x1f\x81\xe7\x74\x8f\xc3\x0c\x85\xdc\xc6\x3c\xc3\x5f\xb4\x31"
+ "\x33\x3c\x9f\x3d\x4c\x8e\xe7\xb3\xc3\x9c\x7b\x1e\x00\xf3\xab\xf5"
+ "\xeb\x7a\xec\x79\x70\x62\x3b\xb5\x83\xce\x88\x33\x3e\xdf\x40\x9c"
+ "\xf8\x1e\x23\xe1\x7b\x93\x62\xd6\x41\x19\xb6\xd7\xbb\x62\xfb\x8c"
+ "\x6c\x19\xb6\x9f\x29\x94\xfb\x47\xd4\xeb\x5d\xb0\x5d\xdc\xf3\x30"
+ "\xf3\xad\x43\x75\x7d\x60\x3b\xdc\xdf\xff\x3d\x62\x57\x17\xdb\xc5"
+ "\xfd\x0d\x1e\xb1\xdd\x75\x7f\x83\x8b\xff\x03\x62\x3b\x8d\x4b\x35"
+ "\xcc\x0d\xdb\x97\xc5\x2b\x1d\x07\x60\x3e\x00\xae\xe3\x1c\x71\xf0"
+ "\x80\xed\x74\xbc\x67\x96\xb9\x62\x7b\x77\x26\xc3\xf6\x77\x5a\x7e"
+ "\x3c\xb6\x3b\xe5\x61\x57\x6c\x7f\x0a\xb1\x3d\x76\x3f\xdb\x7f\x91"
+ "\xd1\xbf\xfd\x17\x6e\xfe\x19\xef\xf4\xc3\xfe\xd2\x2b\xc6\x7b\xe8"
+ "\x97\x1c\xe3\x67\xdd\x2c\xc7\xf8\x59\x93\xe4\x18\x3f\x4b\x21\x61"
+ "\xbc\x70\xed\xaa\xc8\xe9\xb3\x34\xd7\xc7\xfe\x32\x4b\x23\x61\xfc"
+ "\xac\x2b\x7d\xef\xbd\x98\x51\xe0\xd9\x37\x03\xcf\x23\xc6\xcf\x28"
+ "\xe8\x75\xef\x85\xcc\xde\x3d\xbb\xd1\xe3\xde\x8b\x9a\x9f\xce\x37"
+ "\xc3\x95\x57\xdc\xed\x2f\x03\xb7\x7d\xcf\x6e\xf0\xd5\xfe\x82\x7b"
+ "\x2f\x96\x9d\x70\xd9\x7b\x51\xd7\xf7\xde\x8b\xd4\xe9\xfd\xb4\xbf"
+ "\xf4\xe2\x9b\x71\x38\xca\xd5\xdf\xed\x95\x73\x72\x7c\x7f\xa5\xd1"
+ "\x89\xef\xcf\x21\xbe\xbf\xd6\x29\xc7\xf7\xd7\x6c\xd8\x4f\x4f\x7b"
+ "\x31\x3e\x93\x7d\x57\x9c\xf3\xb8\xdc\x57\xc3\xcd\xfe\xf2\x1c\xf2"
+ "\xde\x6b\x1f\xc8\xf0\xfd\x8c\x2b\xbe\xcf\x49\xf0\x24\xbb\xa3\xdd"
+ "\x9b\xfa\x14\xcf\x70\xd9\xd3\x36\x45\xf4\x7f\x8b\x5b\x72\x28\x1a"
+ "\xde\xdf\xe4\xc5\xd7\x6d\x06\xf3\x75\xa3\xbe\x6d\x68\x07\x87\xb6"
+ "\x76\xce\xd0\x2b\xd3\x62\x79\x0e\x7d\xdd\xdc\xfd\xdc\xd0\xf7\x0d"
+ "\x7d\xdd\x2a\xe3\xf3\xbd\xfa\xb9\x21\x6f\x7a\xf3\x75\x83\x7e\x87"
+ "\x51\xac\x3f\x27\x60\xbd\xe0\xeb\x56\x94\x24\xf9\xba\xc9\xb0\xde"
+ "\x83\xff\xf0\xa7\x67\x32\x3c\xcb\xf1\xe9\x12\xd6\x77\xa1\x1c\xff"
+ "\x2f\x6e\xb6\x18\x4a\x83\xb8\x92\x9f\xd4\x16\x43\xb1\xfe\xd5\xf7"
+ "\xab\x90\x8f\x63\xf4\x1e\x6c\x31\x3d\x7d\x9c\x7f\x3a\x5b\xcc\xab"
+ "\x0e\x39\xc6\xbf\x16\x21\xc7\xf8\x57\x1b\x25\x8c\x17\xae\x5d\x15"
+ "\x8c\x7f\xd5\x7e\x7d\x6c\x31\xaf\xda\x25\x5b\xcc\x6b\x27\x3d\xfa"
+ "\xdf\xc9\x6c\xec\x73\x12\x3d\xdb\xd8\xe7\x08\xfe\x77\x73\x12\xbd"
+ "\xee\x09\xe9\xf1\x4d\x33\x7e\x0f\xb3\xb1\x0f\x60\x4f\x48\xdd\xcf"
+ "\xcd\x16\x13\xbf\xdb\x57\x5b\x0c\xf5\x6d\x3e\x81\xfe\x21\xbe\xed"
+ "\x09\xe9\x0b\xdb\x9d\xb2\x7b\x2f\xdf\x30\xe5\xd8\x3e\x77\x8f\x1c"
+ "\xdb\xe7\xee\x97\x63\xfb\xfc\x43\x72\x6c\x9f\x5f\xee\x8e\xed\x3d"
+ "\x71\x7d\xde\x50\x4f\x98\xae\x7f\x0e\x6d\x31\xf3\x93\xbd\xe3\xf9"
+ "\xbc\x71\xbe\xe3\xf9\x1f\x27\xfc\x9f\xc6\x73\xb5\x3b\x9e\xff\x31"
+ "\xe3\x27\xb5\xcb\x50\x3c\x4f\x58\x22\xc3\x73\x75\x1f\x78\xfe\x93"
+ "\xd9\x65\x12\x2a\xe5\x78\x8e\x9f\x89\x5c\xf1\x3c\xe1\x13\x09\xcf"
+ "\x85\x6b\x57\xc5\x2e\x93\x50\x71\x7d\xec\x32\x09\x15\x92\xcc\x3e"
+ "\xff\x83\xbe\xf1\x7c\xde\x78\xcf\x78\x8e\xe7\x11\xcf\xe7\x8d\xf7"
+ "\xea\x4f\xdd\x03\xcf\x17\xbc\xe5\x03\x9e\x7b\xf4\x51\xf9\x79\xd8"
+ "\x65\x16\xf4\xc8\xc9\xd6\x97\x5d\xc6\xdb\x3e\x15\xc4\x77\xc9\x3f"
+ "\xc5\x65\x9f\x4a\xa4\xb8\x4f\x25\x43\xee\x9f\x72\xd5\xb1\x7d\xe1"
+ "\x46\x39\xb6\x2f\xdc\x24\xc7\xf6\xc5\x9f\xca\xb1\x7d\x71\xa9\xd8"
+ "\x4f\x66\x97\xc9\xec\xb1\x6f\x45\x8e\xf3\x0b\x1d\xc6\xe7\x1a\x88"
+ "\x27\xac\x87\xb6\xe6\x7a\xc7\x79\x7d\xb8\x37\x9c\x47\x7f\x95\x8f"
+ "\x66\xc4\x7b\xc0\xf9\xd7\xef\xfb\xff\x01\xe7\xbd\xf9\xa1\x50\x3d"
+ "\x08\x30\x1e\xf1\x9e\xe2\xbb\x80\xf5\x88\xf3\x8e\xbf\x7b\xb2\xd1"
+ "\xbc\x1e\x7f\xad\x70\xde\xbb\x8d\x66\x51\x5c\x55\x8c\x80\xf3\xfd"
+ "\xd9\x43\xb3\x5f\x6e\xa3\x29\x9a\x77\xad\x6d\x34\x8b\xf6\xc8\xf1"
+ "\x7e\x91\x45\x8e\xf7\x8b\xde\x97\xf0\x5e\xb8\x76\x55\xe4\xf7\x45"
+ "\xbb\xaf\x8f\x8d\x66\xd1\x6e\x09\xef\x17\x6f\xec\x1b\xef\xf5\xa3"
+ "\x3d\xe3\xbd\x5e\x88\xcd\xa6\x1f\xdd\x7f\xbc\x4f\x74\xe2\x7d\xcf"
+ "\xfd\x33\x19\x03\xf7\x91\x79\xfc\x7a\xdb\x68\x12\xbd\xe2\x7f\x6f"
+ "\xf1\x31\x06\x6e\xa3\x11\xf6\x24\xce\xf6\x1c\x1f\xe3\x50\x2f\x3e"
+ "\x32\x87\x2a\x5c\xb1\x7e\xc9\x9b\x72\x5f\xc4\x25\x6f\x89\xbe\x88"
+ "\x87\xaa\x10\xeb\x97\x7e\x2c\xc7\xfa\xa5\x25\xde\x6c\x34\x9f\x72"
+ "\xae\x3e\x89\x4b\x1a\xe5\x36\x1a\x83\xdc\x46\x33\x05\x79\x6f\xe9"
+ "\x2c\xef\x58\x9f\xa4\x96\xfb\x80\xb3\x3d\x8a\x1f\xcc\x10\x7c\xc0"
+ "\x67\xb8\xf8\x80\x3f\xf3\xae\x80\xf5\x6f\xdc\x57\x5e\x63\x27\xbe"
+ "\xf8\x21\xfe\x78\x5f\xef\xd5\x1e\x7d\x10\xe9\x1a\xd0\x8b\x1f\xe2"
+ "\xcc\x93\x6a\xc2\x29\xdf\x47\xfb\xbb\xe4\x87\xd8\x4b\x3c\x63\x19"
+ "\xfe\xcf\xd0\x7b\xc5\xff\x4e\x5e\xc2\x7f\xee\x77\x92\xdd\x86\x43"
+ "\x39\x9f\xd2\xe5\x8d\xf8\x6b\x65\xb7\xf1\x64\x27\x31\x3e\x81\xf8"
+ "\x9f\xfc\x32\x93\xf3\xe3\x7f\x66\x76\x9b\xe4\x4f\xe4\xb8\x9f\xdc"
+ "\x2c\xc7\xfd\xe4\x4d\x12\xee\x0b\xd7\xae\x8a\x2f\x7a\xf2\xae\xeb"
+ "\x23\xe7\x27\xef\x92\xec\x36\x4b\xd7\xf6\x8d\xfb\x49\x1a\xcf\xb8"
+ "\x9f\xa4\x61\xb8\x9f\xa4\xe9\xd5\x6e\x23\xf3\x8d\x4c\x59\xf2\xa3"
+ "\xed\x36\xa2\x9c\x7f\xdd\xf7\xf5\xa4\x24\xfa\x62\xb7\x71\xee\x49"
+ "\xff\x51\x76\x1b\xcf\x78\x2f\xca\xf6\x87\x7a\xf9\xe6\x2a\xc7\xfb"
+ "\x65\x4b\xe4\x78\xbf\x6c\xa9\x1c\xef\xd3\xd7\xcb\xf1\x3e\xbd\xc0"
+ "\x93\xdd\x46\x8e\xf5\xcb\x0e\x79\xc2\x79\xfd\x14\xb4\xdb\xa4\x8f"
+ "\xf7\x8e\xf1\xcb\xac\xbe\x63\xfc\xf2\xa1\xff\xc0\x78\x37\x8c\x57"
+ "\xbb\x63\xfc\xf2\x49\x3f\xa9\x8c\x4f\x31\x3e\xed\x71\x19\xc6\x5f"
+ "\x45\x5b\x4e\x7f\xf6\x93\x78\x97\xed\xd3\xdc\xfc\xdf\xd3\xdc\xfc"
+ "\xdf\xd3\x5c\xfc\xdf\xd3\x2a\xae\x1e\xc6\xa7\x5d\x7d\xff\xf7\x7e"
+ "\x61\x7c\x9a\x8b\xff\x7b\xfa\x92\xbe\x31\x7e\x99\xdd\x33\xc6\xe3"
+ "\x79\xc4\xf8\x65\xf6\x5e\x65\x7b\x19\xc6\x67\xbc\x70\x2d\x6c\x39"
+ "\xd7\x67\xbf\x51\x46\xb4\x2f\xf6\x9c\xde\xe2\x8e\x78\xb5\xe7\x8c"
+ "\x15\xed\x39\x7a\x2f\xf6\x9c\xab\x85\xf9\x2b\xe6\xca\x31\x7f\xc5"
+ "\x7c\x39\xe6\xbf\xb9\x49\x8e\xf9\x6f\x16\xc9\xed\x39\x8b\x7a\xd8"
+ "\x73\xe4\xf8\xbf\xa2\xd2\x38\xc5\xd5\x9e\x63\x70\xb1\xe7\xbc\x39"
+ "\xd9\x3b\xfe\xaf\xf0\x8a\xff\xed\x14\xff\x63\x3d\xe0\xff\xca\xff"
+ "\x23\xf8\x1f\xfb\x23\xf0\x7f\xe5\x75\xc0\xff\x55\x4f\x33\x1b\x4f"
+ "\x3f\xe3\xa4\x7c\xea\xbb\x8d\xe7\xc7\xad\x03\xab\xb6\xca\xd7\x81"
+ "\x55\xc7\xe5\xeb\xc0\xaa\xb7\xa4\x75\x40\xb8\x76\x55\xd6\x81\x55"
+ "\x86\xeb\xb3\x0e\xac\x32\x48\xeb\xc0\x9b\xcb\xfb\x5e\x07\x56\x78"
+ "\x59\x07\x56\x08\xeb\xc0\x0a\x1f\xd6\x81\xac\xf9\xde\x6d\x3c\xfa"
+ "\x81\xdb\x78\x1e\xbe\xde\xfb\xa0\xb2\x12\x7c\xb2\xf1\x6c\x08\x31"
+ "\x54\x60\x8c\x94\x73\x44\xb9\x6c\x96\x68\xe3\x31\xba\xd9\x78\x8c"
+ "\x3d\x6c\x3c\x4b\xcf\x09\xf8\x3f\x49\xd8\x6f\x3a\xe5\x47\xc4\x48"
+ "\xa1\x79\x97\xff\x34\x57\xee\x37\xff\x27\x8a\xff\x52\xfc\xbe\x35"
+ "\x9d\xd8\x2f\xb6\xfe\x18\x7b\x89\x81\xfa\xa7\x4f\x65\x36\x9d\x49"
+ "\x9e\x62\xa4\xac\x91\xf9\xdd\xc8\xf7\x9b\xfe\xa9\x41\x86\xf7\x53"
+ "\xd8\x7e\xd3\x0f\x3d\x7d\xa7\x75\xc6\xe4\x5f\x7d\x85\xc6\xe4\x77"
+ "\xc6\xf2\x5b\xad\xeb\x57\x2c\xe9\x19\x42\x2c\xe9\x33\xd7\x21\x96"
+ "\x74\x7f\x63\xf2\x9f\x71\x8f\xdf\xf7\xd6\xda\xea\x0a\x23\xa9\x42"
+ "\x1e\x89\x71\x8f\x7d\x6a\xf4\xbc\x77\x5f\x29\xec\xdd\x5f\x70\x6d"
+ "\xe2\xa0\x60\x7f\xe8\x9a\x1f\x3a\x8d\x6c\x4f\xb3\xd0\xfe\x60\x8e"
+ "\x6b\xa0\xf3\xb0\x0a\xe0\x55\x0e\xf1\x74\x11\xe2\xe9\x9a\x89\xb4"
+ "\xee\x39\xe0\x85\xe0\xef\x0c\xc8\xc7\xb9\x1c\x09\xd4\x27\x21\xb6"
+ "\xbe\x45\xfd\xbe\x40\x8c\x00\x6c\x65\xf5\x96\x9f\xe3\x1d\x8e\xe0"
+ "\xef\x0d\xd0\xff\xc1\x3b\x16\xd4\xf8\x57\x99\xac\x30\x2f\x5a\x70"
+ "\x4f\xac\xa2\xda\xde\x61\x44\x5a\xec\x5d\x50\xa3\xe2\x01\x7f\xb7"
+ "\xbc\x4a\x02\x7c\x9b\xa7\x6b\x58\xde\x76\x5c\xf7\x42\xa7\x05\x62"
+ "\x1c\x10\x51\xb6\xe2\x7e\x90\xec\x5b\x9b\x60\x7c\x38\x9e\xad\x7d"
+ "\x33\xe7\x32\xdc\xe0\x61\xbd\x86\xb1\xa4\x3e\xb6\x88\x1b\x34\x87"
+ "\x15\xe0\xc6\xe6\x56\xe9\x3b\x36\xb6\x8f\x63\xc4\xec\x28\x6b\x24"
+ "\xff\x17\x93\x37\x6c\xfd\x93\xd9\x33\xb6\xfe\xc9\xcc\xb0\xf5\x4f"
+ "\x66\x27\xb6\x9a\x3c\xd8\x51\x64\x7e\xec\x7f\x16\xfc\x5f\x8c\x6e"
+ "\x32\xb6\xf1\x17\x18\x1f\xe5\xcf\x3e\xf9\xbf\x50\x3c\x4d\x60\x78"
+ "\x8a\x78\x25\x62\xaa\x64\x47\x31\x7a\xb5\xa3\xf4\x85\xa9\x3e\xed"
+ "\xe1\xa7\x98\x9a\xbd\x47\x8e\xa9\xd9\xfb\xe5\x98\x9a\xff\xb8\x3b"
+ "\xa6\xf6\xc4\xd3\x1c\x8f\x58\xca\xe2\xa3\xe4\x59\xbc\xe3\x68\xce"
+ "\x68\x6f\x38\x4a\xfd\xd3\x67\xb8\xf8\xa7\x3b\x71\x34\xf7\x51\x39"
+ "\x8e\xe6\xe8\xfb\x8b\xa3\x34\xb7\xc9\x99\x9f\x20\xb7\xc9\x80\x71"
+ "\x54\xef\x86\xa3\xb9\x27\x25\x1c\x75\xcf\x6f\xd2\x07\x8e\xce\xbb"
+ "\x36\x31\x50\x64\x38\xca\x59\x68\x7f\xb4\x0b\xb0\xaf\x79\x2f\xcb"
+ "\x71\x34\x2f\xdf\x3b\x8e\xe6\xdd\x27\xe1\x28\xab\x77\x6d\x71\x34"
+ "\x2f\x46\x86\xa3\xf3\x5c\x70\xf4\x7b\x49\x87\x40\x1f\x0b\x27\x8e"
+ "\xce\x77\xc1\xd1\x79\x7d\xe1\x68\x5e\x0c\x8e\x11\x93\x51\xf3\x47"
+ "\xf6\x8d\xa3\x39\x63\x3c\xe3\x28\x9e\x47\x1c\xcd\x19\x23\xe1\xa8"
+ "\x07\x19\x55\x86\xa3\x6b\xfd\x7d\xc0\xd1\x9f\x79\x6c\x94\xb5\x2a"
+ "\x9f\x6c\x15\xd2\x9e\xce\x9e\x31\x52\x5f\x76\xdd\x13\x54\xea\x96"
+ "\xf7\xa4\xb4\x47\xde\x93\xa5\xe2\x1e\xcf\x89\x02\xae\x3e\xf3\x23"
+ "\x70\x95\xee\xf1\x5c\x37\x4c\xee\x7b\xb2\xee\x66\xd1\xf7\x84\xe1"
+ "\xea\xfa\xed\x62\xbf\xa4\xbc\x27\xa5\xbd\xc4\x48\x5d\x37\x57\x16"
+ "\x1b\x65\xa2\x6b\x6c\x94\xf5\x2f\x7b\x8f\x91\xba\x2e\x5f\x16\x1b"
+ "\xe5\x70\xb1\x33\xef\x89\x7b\x8c\x54\x09\x63\xff\xb2\x95\x62\xac"
+ "\x33\x06\xd5\xba\xe3\xce\x18\xa9\x7d\xec\x0b\xc2\x76\x76\xd4\xc7"
+ "\x5f\x7b\x8c\x35\xfa\x80\xb1\xb2\xbc\x27\xee\x31\xa6\x0a\x26\x54"
+ "\x97\x97\x92\xaa\xd8\x52\x0f\xb1\x51\x4b\xaf\x6b\xee\x13\xec\x97"
+ "\x67\xac\x2d\x38\x24\xc7\xda\x02\x3b\xad\x7b\xda\x13\xd6\x16\x6c"
+ "\x94\xb0\x96\xd5\x5b\x7e\xda\x0d\x6b\xeb\xbc\x60\x2d\xac\xab\x5b"
+ "\x9a\x7c\xc5\xda\x82\x72\x8a\xb5\x99\x02\xd6\xb6\x5c\x6d\xac\x2d"
+ "\x28\x97\xb0\x76\x7d\x4e\xdf\x39\xa6\xd6\x15\x7a\xde\x97\xb3\xae"
+ "\x90\x61\xed\xba\xc2\x5e\x73\x4c\xc9\x7c\x3e\x36\x2c\x17\x73\x4c"
+ "\x49\xf6\x80\x52\xc1\x1e\xf0\x4b\xce\x89\xb2\x21\xd5\x57\x7b\xc0"
+ "\x11\xd0\xdd\x71\xdf\xe5\x32\xcc\x39\x15\x83\x39\x51\x4a\xdc\xec"
+ "\x01\x25\x3d\xed\x01\x2f\xf4\x8e\xb1\x3e\xd9\x03\xe8\xbe\xcb\xbf"
+ "\x2e\x95\x63\xec\x5f\x97\xcb\x31\xf6\x9d\x61\xe2\x3e\x4b\xec\x8f"
+ "\xf7\x98\xa9\x7f\x3d\xe4\xb4\x07\xd4\xc9\xb1\x55\xb2\x07\xbc\x7d"
+ "\xd0\x3b\xc6\xfe\x55\x6e\xff\x7d\xa6\x58\xb6\xcf\xf2\xc3\x7a\xd7"
+ "\x38\xd4\x62\xfc\xa9\x8d\x43\x0f\x1d\x77\xc5\xd8\xc2\xb1\xbf\xa4"
+ "\x38\xd4\xce\x58\x53\x7d\xf8\x72\xf7\x8c\x43\xbd\x71\x7b\x75\x79"
+ "\x09\xc1\xbd\x6d\x14\x6f\x65\xb6\x81\x92\xeb\x63\x1b\x28\x2f\xf1"
+ "\x62\x1b\x78\xfb\x41\x39\xce\xbe\x3d\x87\xd6\x3d\xe9\x09\x67\xdf"
+ "\x56\x48\x38\xcb\xea\x2d\x3f\xe9\x86\xb3\xb5\x57\x53\xa6\x7d\x3b"
+ "\xe2\xda\xda\x06\xde\x8e\x90\x6c\x03\x6f\xf7\x63\xff\xe3\x5f\xed"
+ "\x9e\x71\xf6\xaf\x82\xdd\xf5\xaf\x92\xdd\xb5\xd6\x43\xbe\x14\x19"
+ "\xce\xbe\x73\x52\xdc\xff\x48\x65\xda\x3a\x51\xa6\x2d\xf9\x05\xe6"
+ "\x4b\x79\xa7\xd6\x57\xdb\x00\xee\x73\x47\x6c\x45\xec\x12\xf1\x55"
+ "\xb2\x0d\x94\x78\xb7\x0d\xf4\x81\xaf\xbe\xe7\xee\x2b\x3a\x29\xc7"
+ "\xd7\xa2\xd3\x72\x7c\x35\xcc\x75\xc7\xd7\x9e\xd8\xba\xe9\x36\x4f"
+ "\xb8\xca\x6c\x03\x06\x8d\x77\x4c\xdd\x34\xd1\x1b\xa6\xd2\x98\x7e"
+ "\xf5\x92\x8f\xb4\x84\xa9\x9b\xe3\xe4\x98\xba\x29\xbb\xbf\x98\x7a"
+ "\x5d\xf2\xa5\x0c\x18\x53\xe3\xdd\x30\x75\x8b\x42\xc2\x54\xf7\x9c"
+ "\x29\x7d\x60\xea\xb5\xb2\x13\xb8\x62\xaa\x4c\x76\xdd\xf2\xa6\x1c"
+ "\x53\xb7\x94\x7a\xc7\xd4\x2d\xd3\x25\x4c\x65\xf5\xae\x2d\xa6\x6e"
+ "\x59\x75\x6d\xed\x04\x5b\x56\x49\xb2\xab\xe1\xe9\xbe\x31\x75\x53"
+ "\x94\x67\x4c\xdd\x14\xc5\x30\x75\x53\x54\xff\xf7\x94\x6f\xbd\xcf"
+ "\x07\x4c\xfd\x99\xe7\x52\xd9\x3a\xda\x67\x3b\x01\xda\x5b\x11\x4b"
+ "\xeb\x7e\x5c\xec\x90\x64\x31\x76\xc8\x78\x01\x63\x9f\xfa\xb1\x18"
+ "\xfb\xee\xa3\x72\x9f\x86\x77\x1f\x17\x7d\x1a\x18\xc6\xbe\x7f\x4e"
+ "\x9e\x1f\xb5\x67\xac\x10\x79\x0c\xd5\x77\xd7\x3a\xed\x04\x88\xb9"
+ "\xe3\x5d\xed\x04\xef\xaf\xf5\x8e\xb7\xef\x96\xca\xec\x04\x5f\x78"
+ "\xc6\xdb\x76\x19\xde\xfe\xc7\x09\x8a\xb7\xce\x18\xaa\xef\xda\xc5"
+ "\x18\xaa\x7d\xca\xb0\x32\xbc\x8d\xfd\x69\xf0\xb6\xb4\xff\x78\x2b"
+ "\xcf\xa5\xe2\x1e\x2f\xf5\xbd\xa5\xd5\x65\x80\xb7\x34\x5e\x87\x7b"
+ "\xcc\xd4\xfe\xc5\xeb\xb8\x56\x31\x53\xb1\x5f\x9e\x71\xf7\x3d\x87"
+ "\x1c\x77\xdf\x8f\xa0\x75\x3d\xe2\xee\x7b\x95\x12\xee\xb2\x7a\xfd"
+ "\xc6\xdd\x01\xd9\x0c\xde\xb3\x5f\x5b\x9b\xc1\x7b\x76\x09\x77\xdf"
+ "\xdf\xdf\x37\xee\xbe\x6b\xf4\x8c\xbb\xef\x1a\x19\xee\xbe\x6b\xec"
+ "\x15\x77\x65\x3e\x04\xff\xf9\xb1\xc7\x58\x1e\x75\xbf\xf4\x3c\x2b"
+ "\xff\x59\x32\x10\x9b\x01\x60\xb0\x32\x15\x63\x38\xc5\xa2\x0f\x41"
+ "\xdf\x36\x83\xbe\xf0\xd6\x77\x9b\xc1\x7f\x6d\x97\xe3\xed\x7f\x7d"
+ "\x2c\xc7\xdb\x8f\x5e\xc6\x7e\xf5\x6a\x33\xa0\x18\xf0\x5f\x0e\xa7"
+ "\xcd\xc0\x24\xc7\x59\xc9\x66\xf0\x51\x90\xf7\x6f\x5f\xc5\x3a\x99"
+ "\x7c\xfb\x94\x5b\xcc\xea\x19\x12\xde\x1e\xae\x12\x7d\xc6\x3e\x78"
+ "\xe1\x50\x94\x2b\xde\x16\x27\xf4\x88\x59\x3d\xed\x2a\xc6\xac\x9e"
+ "\x76\x95\x63\x56\x4f\x97\xc7\xac\x7e\xbb\x5d\xf2\x23\xf3\x3d\x66"
+ "\xf5\x07\x57\x28\x06\x23\x0f\x61\xdc\xea\xfe\xd8\x11\xae\x71\xae"
+ "\x15\x19\xf6\xca\xec\x08\x1f\x2e\x95\x63\xef\x87\xdb\xbc\x63\xef"
+ "\x87\x4f\x4b\xd8\xcb\xea\x5d\x5b\x99\xf7\xc3\xe4\x6b\x6b\x47\xf8"
+ "\x30\x59\xb2\x23\x7c\xf4\xa8\x47\xec\x95\x7d\x1b\x2b\x8e\xf0\xfc"
+ "\x6d\x0c\xcf\x23\xf6\x16\x47\x78\xb5\x23\xf4\xf0\xdf\xda\x36\x92"
+ "\x7d\x1b\x13\x64\x5e\x93\x0f\x76\x84\x9f\x9d\x8f\xc1\x36\xed\x40"
+ "\xec\x08\x88\xb7\x88\x67\x22\xe6\xf6\xc7\x8e\x70\xf5\x65\xdc\xed"
+ "\x23\xe5\x98\xbb\xfd\x2e\x39\xe6\x96\x1c\x74\xc7\xdc\x9e\x78\xbb"
+ "\x3d\xce\x13\xd6\x32\x3b\x42\x49\xa2\x77\x9c\xdd\x9e\xef\x15\x67"
+ "\xdd\x7c\x73\x25\x9c\xdd\xb1\x5f\x8e\xb3\xdb\x8f\x0f\x08\x67\xfb"
+ "\x9b\x83\xe5\x67\x85\xb3\xb1\x6e\x38\xbb\xf3\x65\x09\x67\xdd\xf3"
+ "\xb0\xf4\x81\xb3\xd7\x28\x0f\x8b\x77\x19\x77\xe7\x39\x39\xce\x96"
+ "\x84\x79\xc7\xd9\x9d\x1f\x4b\x38\xcb\xea\x5d\x5b\x9c\xdd\x69\xba"
+ "\xb6\xb6\x85\x9d\x26\x49\xc6\x2d\x79\xbf\x6f\x9c\xdd\x5e\xe8\x19"
+ "\x67\xb7\x0b\xdf\xc5\xb6\x17\x7a\x95\x71\x7b\xe0\xec\xc7\x6f\xf9"
+ "\x80\xb3\x3f\x73\x1f\x84\x8f\x7d\x8a\x7f\xe1\x62\xaf\x1d\x54\x6d"
+ "\x72\xdb\x2f\x71\xd2\x75\xbf\x84\x8b\x6d\x61\xbc\x68\x5b\x90\xe7"
+ "\x67\x49\x16\xed\xb7\x91\x02\xee\x3e\xf1\x63\x71\xf7\xbf\x37\x76"
+ "\x38\x71\x77\x11\xe0\xee\x7f\xd3\xfd\x11\x1d\x4e\xdc\xfd\xdf\x67"
+ "\xc5\x7e\x49\xf9\x59\xbc\xd8\x16\x1e\xa1\xed\x5d\x74\xda\x16\x10"
+ "\x87\x23\x5d\x6d\x0b\xff\xab\xf0\x8e\xc1\xff\x13\x26\xb3\x2d\x7c"
+ "\xee\x19\x83\xad\x32\x0c\xde\x35\x81\x62\xf0\x23\x22\x06\xff\x4f"
+ "\x74\x3b\xe8\x96\xed\x59\xbe\x61\xb0\x95\x62\xf0\xc4\xeb\x83\xc1"
+ "\xbb\xae\x02\x06\xd3\x71\xdf\x75\xa1\xda\x08\x18\x1c\x83\x18\x3c"
+ "\xb1\x7f\xf6\x86\x9f\x28\x47\x0b\xf6\xcb\x33\x16\x7f\x32\x5f\x8e"
+ "\xc5\x9f\x18\x68\x5d\x8f\x58\xfc\xc9\xa3\x12\x16\xb3\x7a\xd7\xd6"
+ "\xde\xf0\x49\xc2\xb5\xb5\x37\x7c\x92\x20\x61\xf1\xff\x3e\xd8\x37"
+ "\x16\xff\xcf\x08\xcf\x58\x8c\xe7\x11\x8b\xff\x67\x44\xaf\x58\xfc"
+ "\x88\x2b\x16\xff\xcd\x29\xf3\xca\xec\x0d\xa6\x5f\x7a\xee\x96\xbf"
+ "\x79\x95\x7f\xb5\xb7\x93\x8c\x7a\xc5\xdf\x96\x56\x17\x11\xd2\x96"
+ "\x49\x32\xaa\xed\x8f\x10\x38\x07\xe3\xf7\xb7\xad\xd5\x9a\xb1\x84"
+ "\xcb\xb5\x6a\x11\x8f\xff\x82\xff\x20\xe3\xe6\x2b\x85\xb9\x45\xc7"
+ "\xf8\x6f\xd4\xdf\x15\xcf\x23\xf6\x6e\x71\xb9\xee\xe9\x59\x7c\x76"
+ "\x5b\x91\x70\x9f\x9d\xed\xbb\x69\x33\x88\x65\xe4\x4d\x93\xa2\x94"
+ "\xf0\x39\x6d\x85\x96\xa0\xb6\x42\x4f\xf7\x8f\x52\x93\x80\xe0\x15"
+ "\x3c\xbf\x79\x03\x6f\x6d\x1b\xd5\xac\x6e\x5b\x43\x48\xfe\x06\xde"
+ "\xd2\x91\x55\x3a\x16\xde\x31\xf6\xaf\x50\xaf\x2d\x34\xc1\xd2\x96"
+ "\x19\x45\xe0\xdc\x24\xf1\x1c\x8c\x1b\xe1\x32\xfd\x78\x0e\xae\xf1"
+ "\xeb\x76\xd7\x6d\x49\x03\xac\x4a\x25\xe4\xfe\x76\x9c\x33\xa5\x31"
+ "\xc0\x33\x61\xb9\xd0\x66\x1e\xb4\xc5\xdf\x74\xab\x15\xf8\x51\x55"
+ "\xb5\x8a\xe0\x9c\x5e\x0d\xef\x65\xc8\xc5\xb1\xf7\xbb\xa7\x90\x57"
+ "\xaa\x08\xb7\xf5\x7c\x3c\x3f\x4c\x6d\x00\x7a\x90\xfc\x45\x24\x00"
+ "\xdf\x23\x0f\xea\xf1\xca\x74\x1e\xd6\x11\x4b\xb5\xdd\xca\xe6\x34"
+ "\xf4\x6f\x2f\xe8\xb1\x3c\x3c\x77\xf3\x22\xa2\x86\xff\x40\x7e\xbd"
+ "\xda\x00\xfd\x6a\x80\x7e\x55\x60\xbf\xbc\xbd\x63\xde\xdb\xb0\xee"
+ "\xdc\xaa\xc1\xb5\x83\x3e\x1f\x9f\x4d\x9f\xa3\xe4\x56\x3b\xe0\x3c"
+ "\x9f\x99\xce\x57\x27\xdb\x49\x08\x8c\xc5\x16\xe8\x37\xf2\x23\xf7"
+ "\x6e\xb3\x7a\xe5\x2d\x84\xec\x48\x69\x56\x56\x43\xdf\x1d\x7f\xbd"
+ "\xd5\x6a\x4c\xfb\x0d\x81\xeb\x16\xd4\x59\x9a\x14\x9f\x9e\x9b\x7a"
+ "\x81\x10\xc4\x13\xf8\x7d\xd1\x0a\xeb\xd8\x64\x28\xe7\xc1\x7b\x70"
+ "\x6d\x1a\x15\xd6\x85\xf3\x1b\x8d\x49\xa7\x48\x88\x9e\x04\xe4\xc2"
+ "\xbb\x09\x75\xe3\xb1\xae\x49\xf1\xa9\x19\xfb\x00\xe5\x54\x28\xe3"
+ "\x7d\xe8\x43\x06\xf3\xe8\x7c\x3c\xe5\xcd\x02\xb5\x81\x1b\x79\x9e"
+ "\xe9\x44\xf0\x9e\x79\xf0\xce\x50\x27\x10\xea\x04\xd2\x63\x1a\x51"
+ "\x17\xc0\x39\x6c\x07\x8e\x81\xc6\x05\x5d\xd8\x76\x34\xb6\xed\x65"
+ "\x1c\x54\x7c\x98\xda\xc0\x03\x6f\xe3\x9a\xaa\x4d\x53\x1c\xad\x57"
+ "\x7c\x96\x1d\xa2\xe0\x79\x98\xe7\x96\x95\x69\x24\x30\x9f\x23\xc4"
+ "\x78\x0b\xb6\xf3\x59\x1c\xb4\xaf\xc2\xb1\xe8\xc8\xfa\x6c\x3c\xf0"
+ "\x91\x05\xc7\x17\xe8\x69\xd5\x8e\xc2\x77\xf8\xac\x08\x9f\x83\xf7"
+ "\x08\xf5\x69\xec\x7b\xec\xb3\x36\xcd\x8f\x87\xf2\x9b\x7e\x8a\x73"
+ "\xc4\x4f\x13\xb4\x13\xee\x5f\x65\x22\x0b\x28\x7d\x4c\xec\x3e\xe0"
+ "\xa5\xcf\x0a\xa1\xcd\x40\x3c\x87\x65\x2f\xfd\x0d\x14\xe9\x56\xa9"
+ "\x01\xde\x70\xa7\x9d\xc8\x23\xc0\x17\x22\x8f\x60\x7f\x77\xa6\x99"
+ "\x94\x74\x1d\x56\xfc\x9d\xea\x75\xb9\x40\x43\xc7\x3b\x1a\x55\x1e"
+ "\x8c\x2d\xd7\x8d\x74\xa9\xc7\x6b\xa7\x91\x2e\x79\x29\x40\x13\x56"
+ "\x97\x48\xfd\xa7\x65\x4a\x4f\x0e\x68\xc1\xf6\x6e\xfe\xfd\x63\x7c"
+ "\x9f\xbc\x76\xa0\xe3\x70\xde\x5a\x96\x0c\xfd\x42\xbe\x05\x1e\xd9"
+ "\xb1\xc8\xa6\x44\xbf\x3e\x3c\xbf\xb7\xd5\xa6\xcc\x6b\x21\x28\x57"
+ "\x92\x1c\xc0\xe5\x4d\x49\x30\xe6\xd0\x26\xaf\x6d\xb4\x3c\x20\xd2"
+ "\x31\x05\x68\x97\x04\xbc\x0b\x63\x9e\x07\xe3\xb7\x19\x30\x0f\x7f"
+ "\x6f\x86\xf5\x07\x64\x3a\x8b\x49\xf1\x77\x33\xb4\xa7\xde\x34\x9c"
+ "\xb7\x6c\x19\xce\x9b\x61\x0c\x0f\x74\x64\xfd\xbd\x5c\x1c\x43\xec"
+ "\x53\x1e\x9c\xcf\x81\xeb\x50\x77\x3c\xe3\xa1\xbf\x87\x89\xef\xec"
+ "\x6d\x3c\xb3\x77\x90\xb1\x39\x3b\xc8\x88\x35\x3b\xc8\xb8\x65\x0d"
+ "\x30\x2f\x33\x1f\xe3\x8f\xc4\xd8\x09\xa7\x9e\xdc\xdc\x15\xda\x69"
+ "\xc1\x6f\x4f\xdc\xca\x5b\x0d\x6f\xee\x20\xa3\x71\x6f\xec\x54\xe0"
+ "\x4e\x5c\xc3\xa7\xfa\x9f\xe5\xab\xf5\x57\x08\x37\x74\x72\xb3\x63"
+ "\xe5\x3d\xa1\x53\xae\x10\x72\x50\x67\x25\x69\x89\xb0\x96\xb7\x36"
+ "\x93\x34\x2b\x6f\xa9\xca\xb8\x40\x00\x7b\xf2\xd9\xd8\xed\x59\x3d"
+ "\x35\x8e\x10\xdc\x33\xc8\x7d\xaf\x23\x41\xf1\x44\x95\x7a\x92\x68"
+ "\xd2\x1b\xf8\x66\xc7\x86\x41\x86\xb4\xe5\x44\xb9\xa3\xb5\x96\xc9"
+ "\x9e\x8a\x3d\x2f\xec\xc1\xfd\xa9\x1d\xd1\x64\xa6\x5d\x58\x8f\x0a"
+ "\xd4\xc5\xe9\x73\xc9\xcd\xf8\x3e\x21\x54\xf6\xda\x7d\x05\xc6\xad"
+ "\xd8\x37\x7c\xde\x6d\xa4\xf4\xdc\x10\xa0\xdd\x31\xdb\x06\xf2\xd6"
+ "\x5e\x92\x1e\xc7\x37\xa3\x5c\x07\xeb\x0b\x95\x05\xab\x9b\xed\x20"
+ "\x5b\xcd\x81\xf5\xdb\x44\xf6\xd5\x1b\x94\xdc\xda\xbd\x3e\xee\x41"
+ "\xdc\x13\x4e\xd7\x6d\x5c\x4b\xa1\xef\xd3\x75\x24\x83\xad\x83\x8d"
+ "\xd1\x21\x89\x28\x4f\xf1\x67\xb1\xff\x7b\xe1\x5d\xf9\x91\x77\x66"
+ "\x40\x9f\x8a\x71\xfd\x9c\x5a\x67\x24\x15\x36\x07\x79\xbb\x85\x8e"
+ "\xd1\x20\x18\x23\x15\x5c\x4b\x85\x71\x0a\xf0\x44\x37\xa4\x19\x97"
+ "\x3f\xb9\x99\xf3\x63\xb4\xa1\x74\xb1\x32\xba\x4c\x79\x9d\xc0\x3a"
+ "\x0a\xb4\x59\xcb\x68\xc3\x0d\x0b\xc9\x47\xda\xf8\xf8\x1e\x66\x6f"
+ "\xeb\x0b\x3e\x9b\x07\xfe\x40\xbe\xe0\xc2\x42\xf2\xf1\xd9\xd8\x07"
+ "\xfc\x7e\x86\x7c\x30\xf5\xcd\xb3\x7c\x95\xbe\x99\x54\xc3\xfb\xf0"
+ "\x43\x5d\xfb\x60\xf7\xb1\x0f\x7b\xf5\xde\xfa\x90\x7d\x3f\xf0\xed"
+ "\xfd\xc0\xb7\xf7\x03\xdf\x9a\x18\xdf\x1e\xae\x63\x7c\xeb\x80\x7e"
+ "\x75\x82\xec\xbe\x6c\x3a\x51\x62\xbf\xb6\x9d\x2a\x54\x72\x05\xd0"
+ "\xcf\x66\x89\x77\x27\x5f\x84\x31\x12\xf9\xd7\xef\x9e\x50\x1c\x9f"
+ "\x2a\x6b\x2d\x49\x47\xfe\xed\xf2\xc4\xbf\xc6\x89\x53\x67\x01\x6d"
+ "\x5e\x03\xfe\x3d\xaf\x23\x81\x0d\x44\xb5\x7c\x3a\xf0\x6f\xb3\x27"
+ "\xfe\x35\xde\xbc\x1b\x9e\xd9\x83\x7f\xe3\x5c\xf9\x77\xdf\x27\xbe"
+ "\xf3\xef\xbe\x0c\x27\xff\xbe\x28\xf0\xef\x5c\x37\xfe\x6d\x70\xe1"
+ "\x5f\x7c\x6f\x9f\xf9\x77\x5f\x83\x6f\xfc\xbb\x2f\xde\xc9\xbf\xa0"
+ "\x97\xbc\xfd\x2a\x1d\xa3\x41\x30\x46\xc0\xbf\xfb\xc6\xc1\x38\x79"
+ "\xe4\xdf\x9f\x9e\x7e\x9f\x07\xf4\x9f\x7e\xfb\x4f\xf6\x4d\xbf\xfd"
+ "\x4b\x7c\xa7\xdf\xfe\xc8\x6b\x4f\xbf\xfd\xef\xf9\x46\xbf\xfd\x3a"
+ "\xef\xf4\x33\xda\x7f\x3e\xf4\x3b\x50\xde\x7f\xfa\x1d\xd8\xd8\x37"
+ "\xfd\x0e\x3c\xe4\x3b\xfd\x0e\x90\x6b\x4f\xbf\x03\x73\x7c\xa3\xdf"
+ "\xe7\xcd\xde\xe9\xf7\xf9\x6e\x6f\xf4\x7b\xf2\x66\x8e\xe7\xd0\x6f"
+ "\x2e\xb4\x3d\x0a\x65\x20\x26\xaf\x95\xad\x47\x9d\x11\xca\x2a\xb1"
+ "\x4c\x65\x2a\xd0\xab\xdd\xca\x81\x6e\x65\xb5\x5b\x39\xcc\xad\xac"
+ "\x71\x2b\x8f\x10\xcb\x40\x2f\xff\x4b\x8a\x32\x7f\xd0\xd9\xe0\x5d"
+ "\xca\x0c\xc2\xf5\xf0\x99\x0e\x2d\xea\x7d\xe1\x9e\xfa\x9e\x97\xc9"
+ "\xdb\xf4\x69\xe4\xd6\x16\xc5\xc1\x40\x4a\x8f\x95\xb7\xe8\xf8\x94"
+ "\x0c\x02\xf4\x18\x33\x65\x39\xf2\x95\x85\xf0\xdd\x9a\x41\x30\x4e"
+ "\x37\x81\xbe\x69\x41\x9e\xd3\x2e\xda\xc7\xd7\x2b\xca\x3a\xf1\xfd"
+ "\xee\xd7\x1b\x09\xe7\x77\x8f\x0e\x75\x21\xa0\xcf\x18\x8b\xdf\x3d"
+ "\xb7\xf0\x5b\xc3\xd5\xb9\x4a\x2e\x20\x37\x93\xd3\x2e\xb7\xf0\x96"
+ "\x49\x97\x61\x1d\x83\xb5\xac\xda\x6c\x03\x9e\xe4\x2d\xc6\x45\x17"
+ "\xa1\xbf\x07\x67\x55\xa6\x42\xdb\xf0\x1c\x78\x56\x04\xaf\xde\x1b"
+ "\x56\x6d\xaf\x21\x3c\xb4\x51\x65\x2d\x07\xdd\xbf\x96\x08\x6d\x46"
+ "\xf0\x43\xf7\x86\x61\x9b\x1e\xf5\xb3\xfc\xf6\x55\xf0\xcc\x47\xa6"
+ "\xeb\x54\x84\x5f\xa1\x0a\xf3\x8d\x3f\x0e\xae\xf2\xaa\xf7\xe5\x77"
+ "\xa8\x58\xbb\x01\x03\x69\xb7\xae\x97\x76\x85\xfe\xaa\x07\xd0\xee"
+ "\x17\x63\xbc\xb7\x6b\x13\xfa\xab\x1d\x48\xbb\xd9\xbd\xb4\x2b\xf4"
+ "\x37\x72\x20\xed\x7a\xcd\xff\xc1\xe7\x77\x0a\xfd\xcd\x18\x40\xbb"
+ "\x5f\x8e\xf3\xde\x6e\xfb\xaa\x81\xf1\xc2\x97\xf9\xbd\xf1\xc2\xc0"
+ "\xf8\xe0\xcb\x5e\xde\xbf\x63\xd5\xc0\x78\xa0\x7c\x6c\x6f\x3c\x30"
+ "\x30\xfa\x97\xf7\x4a\xff\x81\xd1\xbe\xdc\xd4\x1b\xed\x07\x46\xf7"
+ "\x43\x5e\xf9\x1f\x75\x59\xa0\xbd\x96\x1f\x7e\xa7\x9e\x5b\xf7\x85"
+ "\x96\x0b\x6d\x1f\xb5\x92\x8b\x24\x4f\x02\x86\x85\x14\x92\xa1\x91"
+ "\xd4\x3e\x74\xa8\x7c\x79\x11\x51\xe6\x2b\x39\xe5\xf6\x94\x5a\x65"
+ "\xb5\x7d\x2c\x49\xb7\xf3\x8e\xf7\x92\x6c\x8a\x3b\xe1\xfc\xfe\x78"
+ "\x42\xac\x8b\x75\x84\xb6\x13\xfa\x85\x36\x37\x2d\x92\x4c\x75\x10"
+ "\xb4\x47\x58\x0f\xa4\x02\x86\x01\x8e\x55\x17\xda\x70\xcd\x1b\x0a"
+ "\xf7\xd9\x81\x7f\xa1\x0d\x1b\xd9\xc9\x59\x14\x91\x8b\x68\x3d\x0b"
+ "\xe8\x8d\x16\x7e\x5d\xfb\x28\x3e\x5d\x47\x56\xc1\xef\x26\xc5\xe1"
+ "\x07\xfd\x2c\x44\xb9\x19\xf4\xc9\x8e\xac\xc3\xa3\x4d\x8a\x23\x01"
+ "\xa8\x63\x82\x2e\x6b\x4e\xbf\x8c\x36\xf7\x3b\xf5\x2b\x41\xaf\xc5"
+ "\xba\x3b\x38\x8b\xf2\x7e\x3d\x51\x1e\xb0\xa0\xfe\x7e\x38\x7a\x7f"
+ "\x22\x21\xbd\xd8\x5c\x54\x5c\x58\xb0\x0a\xef\xc7\x76\xd0\x96\x99"
+ "\xc7\xc1\xd8\x86\xa9\x8b\xb1\xbf\x30\xc6\xb5\xc6\x14\x5c\x17\x0e"
+ "\x9b\x26\xdc\xcd\x77\x08\x38\x7f\x4b\x0b\x94\xa9\xce\x9e\xc9\xd7"
+ "\xf0\xea\x3d\x01\x7c\x6e\x50\x64\x95\xb5\x95\x18\x93\xba\x48\xbd"
+ "\xe2\xf0\x39\x7c\x76\x5b\x58\x30\xb1\x86\x05\x07\x40\x1f\xea\xc4"
+ "\xfe\xe2\xb3\xc4\xf3\x68\xa3\x10\xfa\x68\xdf\x9f\xea\xbd\x8f\xb0"
+ "\x96\x84\x4e\xd5\xf0\x16\x1c\x43\x63\x5a\x2b\xf4\xa5\xe2\x75\x1c"
+ "\x67\xbe\x20\xa8\xc6\x9a\xae\xbb\x9d\xd9\xec\x8e\x14\xa2\xed\x07"
+ "\xd6\x81\x70\x6a\x87\x59\xbb\x37\x9c\xfa\xd9\x00\xde\xf3\x86\xa6"
+ "\x00\x94\x57\x2e\x29\x8e\xd0\xfc\xc7\xd3\x75\x4a\x1f\xd7\xff\x23"
+ "\x74\xfd\x37\xde\x8e\xe3\x50\xf1\x02\x3c\xef\x5f\xea\x15\x47\xe8"
+ "\xde\x7d\x78\xde\x58\x7c\x1e\xd4\x99\x08\xcf\x1c\xcb\xe7\xef\x21"
+ "\x58\x0f\xae\xd7\x09\xd7\x23\x5d\xae\x47\xf2\x05\xc1\x1a\xe1\xba"
+ "\x5d\xb8\x3e\xde\xe5\xfa\x78\xfd\xed\x68\x97\xab\x08\xc7\x77\x82"
+ "\xb5\x4c\x8b\xeb\x1a\xda\xfc\x99\x5d\x7d\xaf\x56\xa8\x37\xc6\xac"
+ "\xa8\x78\xb4\x0d\xf8\x0a\xae\x8f\x73\xb9\x7f\xdc\x81\xe4\x08\xf2"
+ "\xe4\x26\x1c\xd3\x8a\x28\x93\xdf\xfe\x54\x66\xcb\x39\x32\x89\x8e"
+ "\x85\x7a\xaf\xc6\xb5\x3d\x93\xa2\x62\x04\xb4\xa9\xb1\x82\xac\x07"
+ "\x75\xc6\xe0\x33\x3d\x8d\xbf\xdd\xd0\x18\xd5\xa5\x6d\x8c\xed\x0e"
+ "\xd3\x18\xef\x6d\x78\xcc\xe1\xf4\xd1\x8c\x25\xca\xa9\x75\xc4\x2f"
+ "\x7d\x16\x51\xa2\x9c\x93\x76\x94\x28\x53\xe1\x37\xda\x83\x79\xa5"
+ "\x3e\x61\x47\x92\x0d\xe6\x87\xd1\x1f\xbf\x29\x75\xc1\x5c\xb0\xeb"
+ "\x9a\xf5\xf8\x3d\xa5\xd3\xd0\x18\x61\x2b\xb8\x41\xd7\x19\x76\xc3"
+ "\xd8\xa6\x04\xa2\x9c\x69\xf6\xf8\x6d\x65\xec\xb2\x3a\x9e\x4b\x7b"
+ "\x9d\x04\x4c\x8d\xf1\xe3\xf1\xfb\x4a\x65\x7c\x23\x59\x7e\x91\x28"
+ "\xf1\x9b\xca\x3b\x49\x24\xac\x1a\x64\x53\xfc\xe6\x12\x18\x1b\x49"
+ "\x8a\xd2\x48\x58\x90\x99\xa8\x83\x14\x8a\x41\xcf\x9c\x20\xc4\xd1"
+ "\x11\x7f\x03\xf0\x2b\x77\xef\x9c\x48\xb4\x6b\x04\xf3\xeb\xa6\x9a"
+ "\x76\xa4\x95\xfa\xdb\x41\x16\xc6\xef\x2e\x7f\x6e\x27\xa3\x37\x25"
+ "\x91\x88\x99\x95\x19\x34\xde\x10\xee\x01\xed\xec\xd0\x69\xbb\xdf"
+ "\xd0\x8d\xea\xea\xd0\xdd\x2e\x7e\x93\x79\xf9\xa2\x9a\xa0\x9f\x27"
+ "\x9f\xb5\xb7\x14\xbf\xc9\xa0\xed\xbb\x7b\x2d\x8b\x47\x84\xbe\x9f"
+ "\xdc\x1b\xba\x11\xfc\x4c\x1d\x79\xc0\x06\xe3\xdb\xa1\x23\x29\xcf"
+ "\x12\x35\xf4\x59\x3d\xba\x81\x28\xb7\xcc\x20\x01\x15\xb1\xf5\x28"
+ "\x7f\x68\x2a\x1a\xde\x27\x4b\x9f\x26\xb7\xdb\x41\xb6\x46\x5b\x7f"
+ "\x45\xc3\x7a\x82\xdf\x6c\x8a\xda\xc9\xd8\xc2\x76\x32\x0e\x79\x74"
+ "\xd2\x2c\x2d\xe1\xd6\x07\xd5\x30\x5e\xad\x1a\x7a\x50\x77\x90\xf8"
+ "\xce\xab\x55\x6a\xaf\x78\x69\x68\x8c\xb5\x6b\x1b\x23\x1c\x40\x47"
+ "\xf6\x9d\x2e\x38\x92\x7b\x37\xdc\xb0\x23\xcd\xa2\xfc\xa8\xbe\x59"
+ "\x81\x3e\x47\xb8\xff\x96\x2b\x6e\xd6\xcb\xe8\xd2\x2d\xd0\xa5\x9b"
+ "\xd1\x05\x69\x32\x43\x4f\xf0\xfb\x4e\x30\xd2\xa3\xda\x56\x4b\xb8"
+ "\x65\xe2\x1e\xdc\x08\xb2\x99\x63\xb4\x70\x74\xc7\xdf\xc0\xc1\xb8"
+ "\xa3\x1d\x13\x78\xc1\xdf\x01\x63\x9f\x8d\xfb\x72\x57\x28\x82\x80"
+ "\xff\x82\xb9\x6e\xcd\x10\x90\x27\x23\x66\x9e\xcb\x10\x62\x3e\xb1"
+ "\xd8\x4f\xf6\x65\x3a\x2d\xb4\x3d\xaa\xbb\x1b\xe8\x60\xeb\x41\x87"
+ "\x31\xb8\x7f\x17\xbf\x31\xd8\xd7\xb2\xef\x28\x94\x0e\xcb\x74\x23"
+ "\x50\x07\x79\x00\x64\x49\xfc\xee\x84\x34\xd8\xdc\x44\x02\x2a\xe3"
+ "\xd9\xf8\x3b\x84\x71\xc7\xbd\xbc\x38\xd6\x93\xe7\x6a\x49\xb5\xee"
+ "\x04\xc1\xb1\xe6\xb3\x2a\xf2\xbb\xb7\x36\x46\xc0\x3a\x12\x71\x49"
+ "\x51\xfd\xd6\xc1\x64\x42\xa6\x27\xfb\x3a\xee\xd5\x5e\xbf\xff\xfe"
+ "\x34\xe3\xae\xfd\x05\x8e\x7b\x55\xb4\x34\xee\x47\x15\x03\x1b\xf7"
+ "\xa3\xe4\xfa\x8e\xbb\xfa\x17\x38\xee\xd5\x35\xd2\xb8\x1f\x5b\x3a"
+ "\xb0\x71\x3f\x96\xec\xd5\x8f\x97\x8b\x54\x1e\xd1\xd4\x92\x9d\xb7"
+ "\x80\x3e\x9c\x3f\x2f\x82\xcb\x4f\x28\xe5\x5e\xd2\xa8\x98\x1c\x71"
+ "\x6a\xf4\x97\x23\x60\x1d\x5f\xd4\x42\x7f\xb3\x35\xf0\xd7\x19\xb8"
+ "\x5f\xec\x48\x19\xae\xef\x6b\xc8\xe1\xf1\xb8\x9e\x7f\xf5\xf4\x8d"
+ "\xd1\x20\x8b\xbd\xa4\x21\x9d\x2f\x45\x2b\xd7\x9c\x22\x01\x21\xb5"
+ "\x64\x12\xc7\xf1\xbc\x31\xad\x05\xd6\xcf\x6f\x12\x8d\x2f\xb6\x10"
+ "\x6d\x4a\x00\xd4\x3d\x71\x42\x9b\xb2\x02\x8f\x9f\x6a\x53\xb2\xce"
+ "\xc2\x91\xc6\xf4\x5d\x7e\x9a\x28\xed\xa3\xce\x67\xec\x58\x60\x84"
+ "\x35\x29\xc0\xb0\xe3\x92\x4d\x99\xdd\x4a\x54\xbc\xf2\x0e\x3e\xc4"
+ "\x42\x02\x72\x40\xd6\xc2\xef\x11\xfa\x57\xd1\x17\xec\xf8\x65\xb4"
+ "\xd5\xee\xbd\x64\x54\xe6\x63\x9d\x51\xe1\x86\x6d\xb7\x58\x14\xb8"
+ "\x96\xed\x58\x60\x53\x8a\xbc\x82\x3e\x03\x33\xad\x44\x09\xe3\x17"
+ "\xeb\x18\xa6\x31\xb6\x6d\x6d\x8c\xb2\xad\xbf\x61\x6c\xd7\xb0\x1b"
+ "\x74\xf6\x0f\x9a\xf5\x1e\xf9\xe7\x0a\x51\x22\x0f\x21\xbf\x04\x25"
+ "\x12\xb5\xc8\x4b\xc8\x43\x55\xb6\x66\x82\x7b\x11\x42\x9a\x89\x9a"
+ "\x07\xfe\x79\xe9\x03\xa0\xad\x2b\x0f\xe5\x7b\xe1\xa1\x8d\x72\x1e"
+ "\x6a\x13\x78\x08\x78\x49\xe2\xa1\xb9\xc0\x43\xf8\xed\x39\x6b\x4f"
+ "\xa9\x4f\x3c\x64\x16\x78\x68\xad\x1b\x0f\x5d\xd4\x92\x23\x75\xa7"
+ "\x05\x1e\x3a\x3a\xd1\x3e\x52\xe4\xa1\xe3\x7b\x0e\xc6\x00\x0f\xc5"
+ "\xf8\xca\x43\xc7\x99\x0c\x55\x30\x48\xb0\x27\x9d\x3a\x49\xcb\x20"
+ "\x7b\x4a\x72\xe7\x89\x91\xec\x1b\x12\xc8\x99\x43\x3b\x6b\xf9\xb5"
+ "\x20\x6b\x42\x5f\x66\xde\x4d\x02\xda\x86\x05\x93\xb6\xf5\xc1\x2a"
+ "\xeb\xb0\x60\x41\xbe\x3b\x31\x61\x60\xbc\x7c\x82\x7e\x9b\xe1\xbf"
+ "\x8d\xfe\x15\xff\x52\xb4\x8a\xfb\x36\xda\x1f\xe8\xa8\x59\xe8\xc8"
+ "\x20\xed\xf9\xbf\x4e\x06\x19\xbd\x59\x9b\x42\xee\x81\xbe\xbc\x7f"
+ "\x18\xe4\xd4\xc3\x20\x4f\x57\x47\x25\x10\x7e\xdd\x3f\xd9\x3e\xe2"
+ "\x2c\x2a\x93\xe2\xab\x49\xc8\x6b\xc0\xaf\x2a\x57\x7e\x65\xbc\xc9"
+ "\xae\xd9\xf2\x7f\xbd\x1a\xdb\x9a\x5a\x4e\x42\xb4\x4f\xa1\x5f\xca"
+ "\x37\x13\x96\x2e\x27\xb8\xd7\xca\x1f\x7e\x0f\xed\xcc\x6d\xb7\xc1"
+ "\xfd\xc1\xfc\xb7\xd3\x14\xfa\xa7\xc8\xed\xfc\x4b\xd3\x14\x88\x59"
+ "\x1f\xa6\x15\x2a\x39\x38\xc7\xbe\xbb\x17\x12\xbc\x9e\xdd\xa5\xa2"
+ "\xdf\xe8\x39\xa8\x53\x65\x2d\x24\xd9\x49\xa0\x53\xc2\x6f\xe6\xcb"
+ "\x51\x48\xb0\x7e\xce\x22\x35\xfd\xce\x46\xef\xb3\x17\x12\xbc\xd7"
+ "\x01\xe7\xff\xcc\x05\x92\xdc\x94\x30\x72\x38\xaa\x8a\xb6\x71\x38"
+ "\xea\x0b\x82\x6d\x20\xae\x1d\x8e\xda\x4b\xf2\x92\x34\xa4\xd2\x5c"
+ "\x08\xd7\xbf\x26\x79\x97\x46\xc0\xb1\x09\xfe\xdb\x49\x8b\xe2\xeb"
+ "\x5d\x87\xa3\x38\x12\xb2\xe2\x31\x1e\xf8\x90\xaf\xc6\xfd\x3b\x69"
+ "\x64\x50\x93\xe2\xeb\x3d\xd5\xb5\xf9\x04\xc6\xf0\x3d\xdc\xdf\xc9"
+ "\xa7\xbf\x64\xe6\xf8\x97\x2e\x72\xe9\x2f\x5d\xc2\x67\x3b\xf8\x97"
+ "\x7e\xc0\x67\xe7\xa4\x68\x05\xdf\xae\x42\xea\x87\x92\xdd\x1e\x4e"
+ "\xb0\xaf\xf8\x5c\x7c\x5e\xde\x22\x9d\xf0\xcc\xd1\xb4\x6f\xf8\x4c"
+ "\x6c\xd3\xf5\x99\x98\x3b\x59\xfb\x3c\x3e\xf3\x9b\x07\xe1\x38\x14"
+ "\xe8\x51\x8c\x74\xc0\xe7\x73\x7c\xb4\x3f\x9f\x1e\xed\x47\xef\x49"
+ "\x6e\xf6\x74\x4f\x9c\x70\x0f\xb5\xc5\xe2\x3d\x5d\xac\x3e\x6d\x03"
+ "\xf0\x64\x05\x9e\xbf\x37\xda\x48\x7a\xd2\xb0\xf6\x36\x86\x2f\xdf"
+ "\x5c\x64\xf8\xc2\x68\x4a\x79\xe5\xa5\x68\x7f\xa0\x9b\x1a\xb1\x08"
+ "\xda\x38\xe8\x6c\xe3\xdb\x68\x3f\xa4\x37\xf2\x8d\xc8\x4b\xc8\x47"
+ "\x22\x0f\xd1\x7e\xea\x09\x71\xe5\x19\xf8\x1d\xc0\xda\xa9\x0d\x12"
+ "\xdb\x81\x3e\x08\x18\xf7\xd5\xc4\x7b\xe1\x7a\x4f\x3e\x3a\xd9\x28"
+ "\xf1\xd1\xc9\x37\x6d\x69\x3c\x8f\x7c\x64\x7c\x31\x13\xdb\x99\x2e"
+ "\xf5\x67\x9a\x02\x79\xec\x17\xc6\x5b\xbb\x90\x4e\xf7\xa6\x92\x30"
+ "\xf6\x3e\x27\xe9\x77\xe2\x7b\x53\x8d\x61\xd8\x57\xf1\x3d\xb0\x0f"
+ "\xb9\x9c\x96\x88\xef\x91\xd7\x15\x0e\xed\x5e\x22\xc2\x3d\x2f\x60"
+ "\xdb\xe2\x18\x00\xcd\x88\x78\x8f\x58\x3f\x97\xd3\x41\xbf\x47\xd3"
+ "\x7b\x18\xcf\x35\x79\xe0\x9f\x93\xef\xbb\xf3\xdc\x8d\xa9\xc4\x8f"
+ "\x87\xf1\x36\xbe\xd8\x8a\xcf\xd9\xcf\xfa\xb6\xcf\xd1\x05\xcf\x00"
+ "\x1a\x28\x85\xf3\x27\x5d\x78\x42\x68\xdf\xe6\xa1\xfd\x53\xfe\xb2"
+ "\xf6\xa3\xa1\xfd\x64\x68\x1f\xd7\xbb\x17\x51\x5f\x3c\x45\x71\xf0"
+ "\xde\x64\xd6\xbe\xc8\xb7\x7c\x76\x5b\xa1\x3e\x05\x7d\xa1\x4e\x95"
+ "\x31\x0c\x3d\x76\x19\xeb\xd1\x6f\xf0\x4a\xce\xc0\xb9\x7d\x83\x77"
+ "\xf5\xd1\xd8\x09\x72\x10\xfb\x16\x7d\xea\x7d\xac\xb3\xfd\xed\x5a"
+ "\x25\xae\xd3\xd2\xf7\xf7\x53\x78\x6d\xbb\x31\xa9\xde\xe5\xfb\xfb"
+ "\x29\xfa\xbd\xcb\xa4\x38\x55\xdb\xa1\x24\x4a\x28\x17\xb0\xf3\xc7"
+ "\x2c\xae\xe7\x25\xff\x16\x76\x1e\x7d\x07\x0f\x94\xa2\x5e\x7a\xaa"
+ "\x59\xb4\x05\xf4\xad\x6b\x3e\xf0\x33\xd4\x35\x23\x7a\xd1\x35\x23"
+ "\x7e\xa1\xba\x66\xdd\xf2\x81\xe9\x9a\x75\x5e\xe3\xbf\xfc\x43\xe7"
+ "\xf1\x26\x7b\x9f\xb2\x4b\xb2\xf7\xe9\x2b\x03\x93\x57\x4e\x5b\xff"
+ "\xa1\xf3\xf8\x3a\xee\x75\x65\xd2\xb8\x9f\x9d\x3f\xb0\x71\x3f\xeb"
+ "\x3d\xfe\x71\xaf\x3a\xcf\x79\xad\xa4\xf3\x9c\xd7\x7a\xd7\x79\x4c"
+ "\x8f\xf6\xae\xf3\x34\xc4\x4b\x3a\x4f\xfd\x21\x26\x93\xd4\x6f\x67"
+ "\x32\x49\xfd\x7c\xdf\x75\x9e\x73\x8d\xff\xd0\x79\x7c\xd1\x79\xce"
+ "\x8c\x93\x74\x9e\x73\x1f\x0f\x4c\xe7\x39\x57\x22\xd7\x79\xce\x57"
+ "\xf6\xd4\x79\xea\x87\xf5\x5f\xe7\xa9\x7f\x78\x60\xbc\x5c\x3f\xb6"
+ "\x7f\x3a\x4f\xfd\x46\xcf\x3a\x8f\x29\xd2\xbb\xce\xc3\xae\xf5\x94"
+ "\x55\x1b\x1e\x96\x64\xd5\x06\xff\x9f\xbf\xce\xf3\x5d\xb1\x67\xb9"
+ "\xf4\xbb\x8f\x99\xce\x53\x5f\x78\xf5\x75\x9e\xfa\x42\xcf\x3a\x4f"
+ "\xc3\x5d\x4c\x3e\xac\x2f\xea\xa9\xf3\xc0\x3d\x1e\x75\x9e\x86\x17"
+ "\x84\x7b\x0a\xe5\x3a\x0f\x6b\x03\xf0\x64\x89\x77\x9d\xa7\x71\x28"
+ "\xc3\x97\x86\x73\x0c\x5f\x18\x4d\x7b\xea\x3c\x0d\x9f\xf6\xad\xf3"
+ "\x30\x1e\xa2\xfd\xf4\xaa\xf3\x34\x2a\x7a\xea\x3c\xa6\x71\x9e\x75"
+ "\x9e\xa6\x93\x12\x1f\x35\x2d\x95\xeb\x3c\x8d\x4f\xff\x32\x74\x1e"
+ "\xaf\xbc\x55\x2c\xd7\x79\x9a\x6e\xf6\x5d\xe7\x69\x9a\xec\x9b\xce"
+ "\x83\x3c\xe7\x49\xe7\x69\xda\xe8\xce\x73\x72\x9d\xa7\xe9\x13\xcf"
+ "\x3a\x4f\x53\xa5\x5c\xe7\xc1\xf6\x3d\xe9\x3c\x4d\x9d\xb2\xf6\x7b"
+ "\xe8\x3c\xe7\x87\xc9\x75\x1e\x56\x4f\xd2\x79\xce\x97\x32\x0c\x3d"
+ "\xdb\xe8\xbb\xce\x73\x7e\xa3\x77\x9d\xe7\xfc\x56\xb9\xce\x73\x3e"
+ "\x91\xe9\x36\xe7\x2b\x98\xce\x73\x7e\x35\x3b\x7f\xb6\xc1\xf5\xbc"
+ "\xa4\xf3\xb0\xf3\x92\xce\x73\xbe\xae\xff\x3a\xcf\x1d\x3f\x43\x9d"
+ "\x47\xdb\x8b\xce\xa3\xfd\x85\xea\x3c\x17\x5e\x1f\x98\xce\x73\xc1"
+ "\xab\xff\xeb\x3f\x64\x6f\x6f\xb2\xf7\x79\x8b\x24\x7b\xb7\x5c\x18"
+ "\x98\xbc\xd2\xd2\x3c\x30\xd9\xbb\xb5\x48\x92\xbd\x5b\x8b\xbc\xcb"
+ "\xde\xdf\x7f\xda\xbb\xec\xfd\x43\x83\x24\x7b\x5f\x9a\xc0\xd6\xc6"
+ "\x4b\x77\xb3\xb5\xf1\xe2\x05\xdf\x65\xef\x8b\xb3\xfe\x21\x7b\xfb"
+ "\x22\x7b\x5f\x28\x95\x64\xef\x8b\xf7\x0d\x4c\xf6\xbe\x38\x5a\x2e"
+ "\x7b\xb7\x3d\xdd\x53\xf6\xbe\xb8\xb6\xff\xb2\xf7\xc5\x4f\x06\xc6"
+ "\xcb\x17\x77\xf5\x4f\xf6\xbe\x34\xcc\xb3\xec\xfd\xfd\x6e\xef\xb2"
+ "\x37\xbb\xd6\x53\x66\xfa\xe1\x13\x49\x66\xfa\x61\xc5\xcf\x5f\xf6"
+ "\xfe\x21\xdc\xb3\x7c\xf4\xc3\x7d\x4c\xf6\xbe\x14\x76\xf5\x65\xef"
+ "\x4b\x61\x9e\x65\xef\x1f\xb6\x32\x39\xe5\x92\xa6\xa7\xec\x0d\xf7"
+ "\x78\x94\xbd\x7f\x38\x21\xdc\x13\x26\x97\xbd\x59\x1b\x80\x27\x97"
+ "\xbd\xcb\xde\x96\x1c\x86\x2f\x96\x97\x19\xbe\x30\x9a\xf6\x94\xbd"
+ "\x2d\x0f\xf5\x2d\x7b\x33\x1e\xa2\xfd\xf4\x2a\x7b\x5b\x96\xf7\x94"
+ "\xbd\xbf\x2f\xf5\x2c\x7b\xb7\x4e\x97\xf8\xe8\xf2\x15\xb9\xec\x6d"
+ "\x39\xf8\xcb\x90\xbd\xbd\xf2\x56\xb8\x5c\xf6\xbe\xbc\xde\x77\xd9"
+ "\xfb\xf2\x21\xdf\x64\x6f\xe4\x39\x4f\xb2\x77\xeb\x30\x77\x9e\x93"
+ "\xcb\xde\xad\x0f\x7a\x96\xbd\x5b\x9f\x96\xcb\xde\xd8\xfe\xff\x63"
+ "\xef\x7b\xe0\x63\x38\xf3\xff\x9f\xcc\x2c\x42\x23\xd9\x68\xb8\x68"
+ "\x71\x4b\xe3\x44\x1b\x15\x2d\x4a\x4b\xab\x3d\xae\xd1\x13\x89\x1e"
+ "\x15\xa4\x6d\xb4\xe1\x42\x83\x45\xb0\x34\x92\x50\x7a\xaa\x11\x1b"
+ "\x0d\x47\x1b\x12\x3d\xee\x1b\xfd\xd2\xa6\x77\x7a\x17\xf7\x45\xa3"
+ "\x42\x43\xf3\x8f\x72\x17\x2d\xd7\xad\x0b\x0d\x0d\x5d\xb2\xb2\x9b"
+ "\x64\x77\xe7\xf7\x79\xe6\x99\xcd\xec\xec\xce\x6c\x76\x66\xc9\x45"
+ "\x7f\xbc\x5e\xf3\x8a\x9d\x79\xe6\x99\xe7\xf9\xbc\xdf\xcf\xe7\x79"
+ "\x7f\x9e\x79\xe6\x79\xc4\xb4\xf7\xcd\x25\x82\xfc\xdd\xb4\xf7\xcd"
+ "\x6c\xa1\xf6\x26\xe9\x78\xed\x5d\x3f\x94\xf8\xd0\x1f\x67\xca\xd7"
+ "\xde\xf5\xdd\xa5\xb5\x77\x7d\x6f\xa1\xf6\xbe\xc9\xbd\x57\xa8\x8f"
+ "\x22\xda\xbb\x5e\x45\xce\xff\x98\xe0\x7c\x9e\xd7\xde\xe4\x3c\xaf"
+ "\xbd\xeb\xe3\xbc\xd7\xde\x41\xed\x50\x7b\xab\x3d\x68\x6f\xf5\x5d"
+ "\xaa\xbd\x4d\xd7\x94\x69\x6f\x93\xe4\xf7\x6f\x9e\x35\xa0\x35\x9f"
+ "\xd7\x80\xd6\x7c\x69\x0d\x78\xeb\x90\x67\x0d\xd8\x58\xcb\x6b\x40"
+ "\xcb\x78\xe2\xa3\x2d\x83\x88\x8f\x36\x5f\x93\xaf\x01\xcd\xb3\xee"
+ "\x69\x40\x39\x1a\xb0\x3e\x99\xd7\x80\xe6\x21\xca\x34\xa0\x39\x52"
+ "\xa8\x01\x6d\xd1\xee\x1a\xd0\xbc\xd9\x7b\x0d\x68\x3e\xa0\x4c\x03"
+ "\x9a\x8b\xbc\xd3\x80\x96\x9e\xe2\x1a\xf0\x56\xb1\xb4\x06\x24\xd7"
+ "\xdc\xfb\xee\xc6\x03\x7c\xdf\xdd\xb8\xb6\xfd\x6b\xc0\xc6\x70\xf1"
+ "\x7e\xba\x71\x08\xd1\x80\x96\xd0\xdb\xaf\x01\x2d\xa1\xe2\x1a\xb0"
+ "\x91\x7b\xff\x6f\xe9\xe5\xae\x01\xe1\x1e\x51\x0d\xd8\x78\x8e\xbb"
+ "\x27\x54\xa8\x01\x49\x1e\xe0\x4f\x6e\x49\x6b\xc0\xa6\x6c\xe2\x5f"
+ "\x9a\x66\x12\xff\x42\x30\x75\xd7\x80\x4d\x23\x5b\xd7\x80\x84\x43"
+ "\x6c\x39\x25\x35\x60\xd3\x2a\x77\x0d\x78\xeb\xa0\xb8\x06\xb4\x4e"
+ "\xe3\x79\xd4\xdc\x28\xd4\x80\x4d\x27\xee\x0e\x0d\x28\xc9\xad\x70"
+ "\xa1\x06\x6c\xde\x26\x5f\x03\x36\x97\xcb\xd3\x80\x98\x73\x62\x1a"
+ "\xd0\xda\xd3\x95\x73\x42\x0d\x68\x1d\x26\xae\x01\xad\xd1\x42\x0d"
+ "\x88\xf3\x17\xd3\x80\xd6\xe5\x82\xfc\xdd\x34\xa0\x75\xb3\x50\x03"
+ "\x92\x74\xbc\x06\xb4\x8d\x20\x3e\xf4\xd6\x2c\xf9\x1a\xd0\xd6\x53"
+ "\x5a\x03\xda\xfa\x0a\x35\xa0\xd5\x44\xb4\x9e\x6d\x02\xd1\x80\x36"
+ "\xee\xfc\xad\x44\xe7\xf3\xbc\x06\x24\xe7\x79\x0d\x68\x8b\xf7\xa4"
+ "\x01\x3d\x6a\x07\x4a\x65\x6a\xd1\x0e\xf0\x7f\x67\xed\x70\x42\xa0"
+ "\x1d\x6c\x8d\x1e\xb5\x03\x45\x8d\x6a\xd1\x0e\x14\xda\xce\xb6\x6d"
+ "\x0a\xad\x62\xdb\x36\x85\xd8\xb5\xbb\x57\x46\x43\x1f\x0f\xda\x61"
+ "\xdf\xd5\x42\xa2\x1d\xae\x5a\xa8\x77\xaf\x73\xda\xa1\x0e\xf9\x67"
+ "\xce\xe7\xb4\xc3\x2b\x58\x3b\x30\x07\xb0\x76\x08\xc8\x05\x8d\xea"
+ "\xd8\x5b\x4b\x0b\x9a\xb5\x06\x7e\x43\xbb\x39\x0c\x79\x54\x80\xae"
+ "\xd4\xe3\xfb\xf1\x5a\x56\x90\x17\x6e\x4f\x58\xbb\xee\x5b\x61\xe8"
+ "\xc0\xee\xe1\x08\xba\xc2\x0e\xfa\x02\x6b\x0b\x56\x43\xd4\x73\x1a"
+ "\xa2\x9e\x68\x08\xbc\xae\x15\x5e\xcf\x2a\xb5\x86\xb1\xdb\x16\x87"
+ "\x77\x8b\x49\x04\xea\xdd\xc2\xfc\x85\xc4\xf8\x9b\x60\x63\x2d\x62"
+ "\x16\x87\x07\xe6\x2e\x42\x21\x1f\x70\x7a\x22\x70\x95\x5f\x20\x53"
+ "\x9f\xd4\x39\xd0\x44\x74\xe9\x3e\x7b\x29\xd1\xa5\x8b\x43\xbb\x80"
+ "\x0e\x8a\xd8\x71\x93\xd7\x11\xef\x61\x0d\xb1\x38\x5c\x63\x5a\x1c"
+ "\xde\xa7\xbe\x3e\xbc\x1f\xd6\x47\x42\x0d\x71\x10\xaf\xfd\xa3\xc2"
+ "\xdf\x70\x5a\x39\x5d\xca\xfc\x3e\x1c\xe1\x35\xf4\x40\x0f\xfb\x3d"
+ "\x0a\xba\x74\x40\x2f\x28\x7b\x39\x52\xdb\xea\xc3\x7b\xa5\x8f\x43"
+ "\x7d\x2a\x8b\x6c\x60\xa3\x5b\xb8\xfd\xab\xf1\xfa\x4a\x65\x09\xdf"
+ "\x20\xbc\x76\x10\xab\x4d\xf1\xfa\x41\x8b\xc3\x29\xc8\x73\xc4\xfb"
+ "\x8b\x9c\x74\x69\x77\x87\x2e\x65\xd6\x2a\xd3\xa5\xcc\x1a\x81\xa6"
+ "\xa0\x3a\xec\x74\xd7\x14\xcc\x15\xaf\x35\x05\x85\xba\x2a\xd2\x14"
+ "\x14\x0a\xf0\x4a\x53\x50\x68\x9e\xab\xa6\xd8\xc3\x6a\x0a\x9b\x15"
+ "\x73\x50\x5c\x53\x90\x6b\x6e\x7d\x01\x45\x75\x6d\xe9\x0b\x28\xbf"
+ "\x73\xed\x5e\x53\x50\x7e\xa9\xa2\x7e\x9f\xf2\x5b\xcb\x6a\x0a\x0a"
+ "\x25\xdf\x76\x4d\x01\x79\x8a\x6a\x0a\xca\x8f\xbc\xff\xa2\x90\xd6"
+ "\x4d\x53\xe0\x7b\xc4\x34\x05\x45\x0d\xe2\xee\x49\x16\x68\x0a\x2e"
+ "\x0f\xf0\x33\xe3\x25\x35\x05\x45\x5d\x22\x7e\x87\xfa\x8c\x68\x0a"
+ "\x82\xa9\x9b\xa6\xa0\xa8\x0d\xad\x6a\x0a\x8e\x43\x6c\x39\xa5\x34"
+ "\x05\x45\x9d\x75\xd7\x14\x36\x8b\xa8\xa6\xa0\x54\xfb\x78\x1e\xa9"
+ "\xa2\x05\x9a\x82\xa2\x7b\xdf\x15\x9a\x42\x9a\x5b\xa9\x02\x4d\x41"
+ "\xd1\xd7\x64\x6b\x0a\x4a\xd5\x57\x96\xa6\x60\x39\x27\xa2\x29\x28"
+ "\xd5\x3c\x57\xce\x09\x34\x05\xa5\x7a\x47\x54\x53\x50\xaa\x9d\x02"
+ "\x4d\xc1\xe6\x2f\xa2\x29\x28\x55\xb9\x20\x7f\x57\x4d\x41\xa9\xae"
+ "\x08\x34\x05\x97\xae\x45\x53\x50\x1d\x32\xb9\xb8\x6c\xa7\x6c\x4d"
+ "\x41\x75\x98\x27\xa9\x29\xa8\x0e\x4b\x04\x9a\x82\xea\x10\xc5\x6a"
+ "\x07\xaa\x43\x3e\xab\x29\xa8\x0e\xf1\x9c\x2e\xc9\x77\x3e\xcf\x6b"
+ "\x0a\x72\xbe\x45\x53\xac\xef\x50\xe8\xfd\xb8\xd2\xbd\x6f\x26\xdb"
+ "\x64\x5c\x89\xea\x34\x4e\x51\xff\x4d\x75\x1a\x7b\xef\x9b\x49\x99"
+ "\xef\x74\xd7\x77\xe0\xe7\x53\x52\xfe\x87\x94\xe9\x15\x7f\xc9\xfd"
+ "\xcf\xef\xcd\x1f\x96\xb2\x7b\xa7\x4c\xde\xee\x5d\x86\x29\xb3\x7b"
+ "\x17\xe9\xf5\x3f\xee\xcd\x61\x90\xb0\x7b\x67\x15\x6f\xf7\xfb\xf6"
+ "\x29\xb3\xfb\x7d\x7b\x15\x8d\x5f\x53\xf7\xa7\xf2\x31\xe8\xfd\xa9"
+ "\x92\x31\x28\x15\xb0\xd2\x73\x0c\xaa\x2e\xe1\x63\xd0\xa0\xfe\x44"
+ "\x0b\x06\x75\x26\x31\x68\x20\x3b\x6e\x93\x86\x63\xd0\x0f\x1f\xd2"
+ "\x7f\xb2\xa8\x88\x62\x3e\xbc\xac\xd9\xb7\xc8\x42\xe1\x35\xa5\xad"
+ "\x38\x06\x05\x3b\x6f\x68\xc2\x31\x68\x09\x19\xbf\xa6\x02\x9f\xad"
+ "\xa8\xb5\x20\x88\x71\x0c\x24\xee\x09\x28\x07\x2e\xd0\x95\x16\x0b"
+ "\x9b\x06\x5f\x3b\x7c\xb3\x88\xd2\x37\xb9\x8c\x6d\x43\x9e\x78\xad"
+ "\x5f\xe7\xb1\x6d\x3c\xa6\xdd\xb8\xf3\x52\x82\x63\x5c\xdb\xb6\x39"
+ "\xb4\xb8\xb5\xb1\x6d\xd7\x71\xed\xed\x4d\x28\xe4\xae\x1d\xdb\x5e"
+ "\xdf\x25\xb5\x65\x6c\x9b\x0a\xec\xaa\x68\x6c\x9b\x0a\x0c\x10\xc6"
+ "\xa1\x21\x03\xdd\xe2\x50\x2a\x70\xa1\xf7\x71\x68\xe0\x66\x65\x3c"
+ "\x0f\xcc\xf1\x2e\x0e\x0d\xbc\x25\x1a\x87\x52\x01\x19\x69\x52\x71"
+ "\x28\x77\xcd\x3d\x7e\x50\x6f\xe6\xe3\x07\xf5\xcc\xf6\x1f\x87\xaa"
+ "\x55\xe2\xb1\x82\xba\x2b\x89\x43\x03\x4d\xb7\x3f\x0e\x0d\x34\x89"
+ "\xc7\xa1\xea\x55\x44\xb3\x07\x5a\xdc\xe3\x50\xb8\x47\x34\x0e\x55"
+ "\x7f\xc6\xdd\x63\x12\xc6\xa1\x24\x0f\xf0\x35\xa7\xa4\xe3\xd0\xe0"
+ "\x79\xc4\xf7\x04\x8f\x26\xbe\x87\x60\xea\x1e\x87\x06\x77\x6f\x3d"
+ "\x0e\x25\x1c\x62\xcb\x29\x19\x87\x06\xbf\xec\x16\x87\x52\x01\xa9"
+ "\xe2\x71\xe8\xfd\xc3\x78\x1e\x75\x3b\x2b\x8c\x43\x83\x77\xdf\x1d"
+ "\x71\xa8\x24\xb7\x54\xc2\x38\xb4\xdb\x12\xf9\x71\x68\xb7\x3d\xf2"
+ "\xe2\x50\xcc\x39\xb1\x38\xb4\xdb\x2d\x57\xce\x09\xe3\xd0\xfb\x83"
+ "\xc5\xe3\xd0\xfb\x07\x0a\xe3\x50\x9c\xbf\x58\x1c\x7a\xff\x14\x41"
+ "\xfe\x6e\x71\xe8\xfd\x0b\x85\x71\x28\x49\xc7\xc7\xa1\x21\x21\x5c"
+ "\x9f\xd6\x5f\x7e\x1c\x7a\xff\x2d\xe9\x38\xf4\x7e\x9b\x30\x0e\xbd"
+ "\xbf\x8a\xc4\x9b\x21\xe1\x24\x0e\xbd\xbf\x86\x9c\x0f\x08\x73\x3e"
+ "\xdf\x12\x87\x72\xe7\xf9\x38\x34\x64\xc4\xbd\xef\x29\xdb\x5b\x1c"
+ "\xda\xbd\x5c\x59\x1c\xda\xbd\xec\x5e\x3c\x24\x57\x97\x87\x4c\xe0"
+ "\x75\xf9\x2f\x94\xad\xff\x40\xfd\xe2\xbf\x1c\xff\xdf\x8d\xf1\x50"
+ "\x8f\x10\xde\xee\xa1\x0a\xe3\xff\x50\xc9\xf8\xdf\x73\x3c\xa4\xc9"
+ "\xe4\xe3\x21\x4d\xa6\x74\x3c\xd4\x73\x83\xe7\x78\xa8\xf7\x19\x3e"
+ "\x1e\xea\x35\x8c\x68\x92\x5e\x3d\x89\x26\x79\xf0\x9c\xfc\x78\xe8"
+ "\xc1\x49\xc2\x78\xa8\xe7\x85\x7b\xf1\x90\xd2\x78\xe8\x17\x99\x7c"
+ "\x3c\xf4\x60\x6f\x65\xf1\xd0\x83\xbd\x84\xf1\x50\xdf\x91\xee\xf1"
+ "\xd0\x83\xab\xbc\x8f\x87\x1e\xdc\xad\x8c\xe7\x0f\xee\xf2\x2e\x1e"
+ "\xea\xd5\x41\x3c\x1e\xea\xa9\x97\x8e\x87\xc8\x35\x77\x1d\xdb\x7b"
+ "\x37\xaf\x63\x7b\x2f\x6c\xff\xf1\x50\xef\x10\x71\xcd\xda\xbb\x37"
+ "\x89\x87\x7a\xa9\x6e\x7f\x3c\xd4\x4b\x25\x1e\x0f\xf5\xce\x26\xda"
+ "\xb1\x97\xbf\x7b\x3c\x04\xf7\x88\xc6\x43\xbd\x8f\x71\xf7\xa8\x84"
+ "\xf1\x10\xc9\x03\x7c\xcd\xf7\xd2\xf1\x50\x9f\x95\xc4\xf7\xf4\x89"
+ "\x26\xbe\x87\x60\xea\x1e\x0f\xf5\xe9\xdf\x7a\x3c\x44\x38\xc4\x96"
+ "\x53\x32\x1e\xea\x33\xcf\x3d\x1e\xea\x99\x29\x1e\x0f\x69\xf8\x75"
+ "\x8a\xa8\x5f\x5e\x12\xc6\x43\x7d\x3e\xbb\x3b\xe2\x21\x49\x6e\x85"
+ "\x08\xe3\xa1\x5f\xae\x95\x1f\x0f\xfd\xf2\x80\xbc\x78\x08\x73\x4e"
+ "\x2c\x1e\xd2\x74\x70\xe5\x9c\x30\x1e\xd2\xf4\x15\x8f\x87\x34\x23"
+ "\x85\xf1\x10\xce\x5f\x2c\x1e\xd2\xcc\x12\xe4\xef\x16\x0f\x69\x56"
+ "\x09\xe3\x21\x92\x8e\x8f\x87\xfa\x86\x71\x7d\xda\x30\xf9\xf1\x50"
+ "\xdf\x0e\xd2\xf1\x50\xdf\xae\xc2\x78\x48\x63\x20\x71\x4f\xdf\x11"
+ "\x24\x1e\xd2\x98\xc8\xf9\x9e\x43\x9d\xcf\xf3\xf1\x10\x39\xcf\xc7"
+ "\x43\x7d\xa3\xee\x7d\x6b\xd9\xde\xe2\xa1\x7e\x17\x94\xc5\x43\xfd"
+ "\xa4\xd7\x3f\xbf\xa7\xcb\x25\x74\x79\xdf\x78\x5e\x97\x87\x4d\x51"
+ "\xa6\x57\xc2\x26\x2b\xd3\xe5\x11\x61\xbc\x2e\x8f\x08\x93\xd6\xe5"
+ "\xfd\xfb\x7b\xd6\xe5\x03\x93\x79\x5d\x3e\xa0\x9c\xf4\x8d\x03\x3e"
+ "\x25\x7d\xe3\x80\x85\xf2\x75\xf9\xaf\xae\x08\x75\x79\xff\x25\xf7"
+ "\x74\xb9\x52\x5d\xfe\x50\x18\xaf\xcb\x7f\xf5\x99\x32\x5d\xfe\xab"
+ "\xfd\x42\x5d\x1e\x71\xca\x5d\x97\x0f\xe8\xe9\xbd\x2e\x1f\x30\x5a"
+ "\x19\xcf\x07\x8c\xf2\x4e\x97\x0f\xd8\x2e\xae\xcb\xfb\x87\x4b\xeb"
+ "\x72\x72\xcd\x5d\x4f\x0d\x1c\xcd\xeb\xa9\x81\x9d\xdb\xbf\x2e\x0f"
+ "\xdf\x2b\xae\x9d\xc2\x3f\x23\xba\x7c\x40\xee\xed\xd7\xe5\x03\x72"
+ "\xc5\x75\xf9\xc0\x81\x44\xc3\x0c\xc8\x77\xd7\xe5\x70\x8f\xa8\x2e"
+ "\x1f\xf8\x32\x77\x4f\xae\x50\x97\x93\x3c\xc0\xd7\x2c\x97\xd6\xe5"
+ "\x0f\x77\x27\xbe\x67\xe0\x25\xe2\x7b\x08\xa6\xee\xba\x7c\xe0\xa1"
+ "\xd6\x75\x39\xe1\x10\x5b\x4e\x49\x5d\xfe\x70\x07\x77\x5d\xde\x3f"
+ "\x4c\x5c\x97\x3f\x72\x81\xe7\xd1\x23\x2b\x85\xba\xfc\xe1\xe8\xbb"
+ "\x43\x97\x4b\x72\x6b\xaf\x50\x97\x3f\xd2\x5b\xbe\x2e\x7f\x64\x92"
+ "\x3c\x5d\x8e\x39\x27\xa6\xcb\x1f\xd9\xee\xca\x39\xa1\x2e\x7f\xe4"
+ "\x80\xb8\x2e\x7f\xe4\x94\x50\x97\xe3\xfc\xc5\x74\xf9\x23\x36\x41"
+ "\xfe\x6e\xba\x3c\xa2\xa7\x50\x97\x93\x74\xbc\x2e\x8f\x38\x48\x7c"
+ "\x68\x58\xb9\x7c\x5d\x1e\xb1\x5d\x5a\x97\x47\xec\x16\xea\xf2\x08"
+ "\x1d\xd1\xdf\x11\x55\x44\x97\x47\x64\x92\xf3\x61\x65\xce\xe7\x79"
+ "\x5d\x4e\xce\xf3\xba\x3c\xc2\x70\xef\x3b\xcc\xf6\xa6\xcb\x1f\x5d"
+ "\xa2\x4c\x97\x3f\x9a\xa2\x4c\x1f\x0e\x1f\xcb\xeb\xc3\xe1\x63\xa5"
+ "\xf5\xe1\xe0\x71\x9e\xf5\xe1\xe3\x99\xbc\x3e\x1c\x72\x8d\xf8\xe8"
+ "\x21\xa7\x88\x8f\x1e\x92\x2d\x5f\x1f\x0e\xe9\x2c\xd4\x87\x83\x37"
+ "\xdf\xd3\x87\x4a\xf5\x61\x84\x89\xd7\x87\x91\x67\x95\xe9\xc3\xc8"
+ "\x33\x42\x7d\x38\xfc\x86\xbb\x3e\x1c\x32\xd2\x7b\x7d\x38\xe4\x65"
+ "\x65\xfa\x70\x48\xbc\x77\xfa\x70\xc8\x21\x71\x7d\x38\x38\x4a\x5a"
+ "\x1f\x92\x6b\xee\xfd\xfa\xe3\x2f\xf3\xfd\xfa\xe3\x03\xdb\xbf\x3e"
+ "\x7c\xac\x4c\xbc\x0f\x7f\xec\x2c\xd1\x87\x43\x0e\xde\x7e\x7d\x38"
+ "\xe4\xa0\xb8\x3e\x7c\x7c\x3c\xe9\x4b\x87\x14\xbb\xeb\x43\xb8\x47"
+ "\x54\x1f\x3e\xbe\x92\xbb\xe7\xa0\x50\x1f\x92\x3c\xc0\xd7\x6c\x93"
+ "\xd6\x87\x43\xb9\x77\x46\x43\x3b\x10\xdf\x43\x30\x75\xd7\x87\x8f"
+ "\x5f\x68\x5d\x1f\x12\x0e\xb1\xe5\x94\xd4\x87\x43\xfb\xbb\xeb\xc3"
+ "\xc1\x63\xc5\xf5\xe1\x30\x1b\xcf\xa3\x61\xdb\x85\xfa\x70\xe8\xbc"
+ "\xbb\x43\x1f\x4a\x72\xab\x4c\xa8\x0f\x87\x8d\x96\xaf\x0f\x87\x2d"
+ "\x94\xa7\x0f\x31\xe7\xc4\xf4\xe1\xb0\x43\xae\x9c\x13\xea\xc3\x61"
+ "\xe7\xc4\xf5\xe1\xb0\x1b\x42\x7d\x88\xf3\x17\xd3\x87\xc3\x7b\x0b"
+ "\xf2\x77\xd3\x87\xc3\x47\x0a\xf5\x21\x49\xc7\xeb\xc3\xe1\xe7\x89"
+ "\x0f\x7d\xf4\x9a\x7c\x7d\x38\xfc\x90\xb4\x3e\x1c\x7e\x4c\xa8\x0f"
+ "\x87\x6f\x25\x3a\x70\xb8\x91\xe8\xc3\xe1\x7b\xc9\xf9\x47\xeb\x9c"
+ "\xcf\xf3\xfa\x90\x9c\xe7\xf5\xe1\x13\x48\xf9\x37\x9a\x4f\xef\xe7"
+ "\x75\xc5\xd3\xfb\xa5\x75\xc5\x13\xdb\x3d\xeb\x8a\xa7\xac\xbc\xae"
+ "\x78\xf2\x65\xd2\xb6\x9f\x7c\x96\xb4\xed\x27\xd9\xf5\x29\x57\x96"
+ "\xe3\x6f\x34\x1f\xd2\x7f\x7c\xbd\x90\xd5\x15\x9f\xcc\xb7\x50\xa0"
+ "\xf3\x54\x76\xac\x2b\x40\xcf\x65\x2e\xc5\xba\xa2\x86\x7c\xa3\x49"
+ "\x8d\x5c\x5e\xae\x73\xd6\x15\x4f\xdc\x60\xbf\xd7\xc4\xda\xc2\x64"
+ "\x61\xd3\xe1\xeb\x62\xdf\x6f\x1e\x9a\xcf\x7d\xbf\x09\x79\x3b\x7f"
+ "\xb7\xc9\x7e\xcb\x79\x1d\x74\xc7\x6b\x80\x85\x93\xee\xb8\xf7\xfd"
+ "\x26\xee\xe7\x47\x2a\xfc\xfe\x63\xe4\x58\xa1\xde\x78\x66\xa6\xbb"
+ "\xde\x18\xb9\xc7\x7b\xbd\x31\xb2\x5c\x99\xde\x18\x59\xe6\x9d\xde"
+ "\x78\x72\x90\xb8\xde\x78\x22\x1f\xf3\x53\x5c\x6f\x90\x6b\xee\xfd"
+ "\xc4\x53\xe5\x7c\x3f\xf1\xd4\xb6\xf6\xaf\x37\x9e\x1a\x25\xde\x27"
+ "\x3c\x35\x8e\xe8\x8d\x27\x23\x6e\xbf\xde\x78\x32\x42\x5c\x6f\x3c"
+ "\x75\x80\xf8\xe6\x27\x23\xdd\xf5\x06\xdc\x23\xaa\x37\x9e\xba\xc6"
+ "\xdd\x13\x21\xd4\x1b\x24\x8f\x8b\xd4\xa8\xce\xd2\x7a\x63\xd4\x6e"
+ "\xe2\x93\x46\x2d\x21\x3e\x89\x60\xea\xae\x37\x46\x45\xb7\xae\x37"
+ "\x08\x87\xd8\x72\x4a\xea\x8d\x51\x9b\xdd\xf5\xc6\x13\xb9\xe2\x7a"
+ "\xe3\xe9\x79\x3c\x8f\x9e\xee\x2a\xd4\x1b\xa3\x2e\xdc\x1d\x7a\x43"
+ "\x92\x5b\xa3\x84\x7a\x63\xf4\x3e\xf9\x7a\x63\xf4\xf7\xf2\xf4\x06"
+ "\xe6\x9c\x98\xde\x78\x7a\x90\x2b\xe7\x84\x7a\xe3\xe9\xf1\xe2\x7a"
+ "\xe3\xe9\x99\x42\xbd\x81\xf3\x17\xd3\x1b\x4f\x6f\x10\xe4\xef\xa6"
+ "\x37\x9e\xde\x23\xd4\x1b\x24\x1d\xaf\x37\x9e\x99\xc0\xf5\x75\xe3"
+ "\xe4\xeb\x8d\x67\x06\x49\xeb\x8d\x67\x86\x09\xf5\xc6\x33\xfe\x44"
+ "\x57\x3c\x93\x40\xf4\xc6\x33\xbd\xc8\xf9\x27\xc6\x3a\x9f\xe7\xf5"
+ "\x06\x39\xcf\xeb\x8d\x67\xb4\x5e\x8e\x47\x95\xc8\xf9\x7e\x73\x5f"
+ "\x83\x70\x3c\xca\x31\x16\x65\x0d\xaf\x4d\x69\x19\x8f\x82\x7e\xfe"
+ "\x55\xa3\xf4\x78\x14\xee\xb7\xf9\xf1\xa8\x0b\xac\x9f\xe2\xc7\xa3"
+ "\x0c\xec\x78\x14\x1e\x8b\x82\x58\xbd\x65\x2c\xca\xbe\xcc\xfd\xdb"
+ "\xcd\x7d\x76\xf9\x63\x51\xaf\x2c\x54\xa3\x1d\x6c\xdf\x5d\xac\x23"
+ "\x63\x51\xd5\x2d\x63\x51\xb8\xcf\xb6\x99\xdd\xc7\xa2\x70\x5f\xcd"
+ "\x8f\x45\x7d\xa3\x70\x2c\xea\x59\x3f\x65\x7d\x37\x5e\x3a\xe3\xde"
+ "\xb7\x9b\xf2\xde\x11\x3f\xb3\x86\x7f\x47\xfc\x9c\xb2\xfd\xff\xa8"
+ "\xe7\x24\xf7\xff\xbb\x37\x57\x59\xca\xee\xcf\x46\xf1\x76\xff\xf5"
+ "\x0d\x65\x76\xff\xb5\xf1\xde\x9c\x08\xb9\x76\x7f\xae\x98\xb7\xfb"
+ "\xb8\x39\xca\xec\x3e\x2e\x49\xd9\x98\x77\x74\x3c\x1f\x9b\x46\xc7"
+ "\x3b\xc7\xa6\xa5\x63\x9d\x63\xd3\xdf\x8c\xf4\x1c\x9b\xbe\xb0\x8b"
+ "\x8f\x4d\xc7\x77\x20\x3a\x30\xea\x0a\xd1\x81\x51\x6c\x9f\xbc\xf2"
+ "\x59\xc4\xc6\xa4\x56\x1c\x9f\xce\xb5\x50\x1f\x5f\x2d\xa6\xac\xab"
+ "\x49\x5c\x5a\x69\x2d\x43\xe5\x46\x0b\x7a\x77\x29\x52\xbd\x73\x1d"
+ "\xa9\x3e\xba\x69\xa1\x82\x92\x91\x3f\xf4\x0b\xa0\x9b\xca\x40\x47"
+ "\x6c\x47\xda\x34\x1c\xb3\x46\xf5\xad\xd4\x1a\x9d\x62\xd6\xdf\xec"
+ "\xe4\xe3\x55\x48\xa7\xb5\xa0\xcf\xe7\x16\x53\x38\x2e\x6d\xde\x1c"
+ "\x5a\xdc\x3c\xb0\x56\xcb\xae\x31\xe4\x3c\x2e\x0e\xcf\xd6\xbc\x22"
+ "\x1c\x17\x6f\xda\x1c\x5a\xd2\xb8\xa7\x36\x85\x5d\xbb\xb0\x2f\x3f"
+ "\x3e\xee\xed\xb8\xf8\x07\x4d\x28\xc4\xb1\x76\x21\xee\x07\xef\xbe"
+ "\x71\xf1\xb1\x23\xf8\x71\xf1\xe7\xaf\x29\x1b\x17\x7f\xbe\x4e\x18"
+ "\xa7\x4e\xec\xec\x1e\xa7\x46\x4d\xf2\x3e\x4e\x8d\x5a\xa2\xac\x2d"
+ "\x44\xa5\x78\x17\xa7\x46\x9d\x75\x8d\x53\x0b\xd2\x70\x9c\xfa\x9b"
+ "\x51\x98\xab\xe2\x71\x2a\xb9\xe6\x1e\x5f\xbc\xb0\x84\x8f\x2f\x5e"
+ "\x78\xb6\xfd\xc7\xa9\xe3\x6b\xc4\x63\x89\xf1\xd7\x48\x9c\x1a\x75"
+ "\xe6\xf6\xc7\xa9\x51\x67\xc4\xe3\xd4\x17\x66\x12\x4d\x1f\x75\xc6"
+ "\x11\x73\xf2\x71\x2a\xdc\x23\x1a\xa7\xbe\xb0\xd9\xf5\x1e\x12\xa7"
+ "\x46\x55\x93\x38\xf5\x85\x4f\xa5\xe3\xd4\xdf\x46\x13\xff\xf4\xdb"
+ "\xde\xc4\x3f\x11\x4c\xdd\xe3\xd4\x17\x6e\xb5\x1e\xa7\x12\x0e\xb1"
+ "\xe5\x94\x8c\x53\x7f\x3b\xda\x3d\x4e\xfd\xcd\x08\xf1\x38\x35\xba"
+ "\x3b\xcf\xa3\x09\x9f\x09\xe3\xd4\xdf\xae\xbd\x3b\xe2\x54\x49\x6e"
+ "\xd5\x08\xe3\xd4\x09\x53\xe4\xc7\xa9\x13\xde\x91\x17\xa7\x62\xce"
+ "\x89\xc5\xa9\x13\xce\x72\xfc\xa9\x16\x8f\x53\x27\xdc\x10\x8f\x53"
+ "\xa3\x3b\x0b\xe3\x54\x9c\xbf\x58\x9c\x1a\x3d\x4c\x90\xbf\x5b\x9c"
+ "\x1a\x3d\x49\x18\xa7\x92\x74\x7c\x9c\x1a\x6d\x22\x3e\x74\xdc\xf7"
+ "\xf2\xe3\xd4\xe8\xb3\xd2\x71\x6a\xf4\x05\x61\x9c\x1a\x5d\x48\xe2"
+ "\xd1\x89\xfe\x24\x4e\x8d\x2e\x21\xe7\xc7\x19\x9c\xcf\xf3\x71\x2a"
+ "\x39\xcf\xc7\xa9\x13\x43\xbd\x8c\x53\x4b\x6f\x53\x9c\xaa\xbb\xbb"
+ "\xe2\xd4\x2f\x46\xb4\x6d\x9c\x1a\xb3\x47\x59\x9c\x1a\x53\xe0\x85"
+ "\x6e\x2f\x69\x45\xb7\xa7\xfc\xff\xa5\xdb\x27\x46\xf0\xba\x7d\x52"
+ "\x5f\x65\x5a\x65\x92\xe6\xbf\x69\xf7\xbb\xcf\xe6\x31\xfc\x5e\x3d"
+ "\xd4\x8b\x0a\xd7\xff\x78\x31\xe7\x5e\x8c\x2a\xd7\xee\x93\x92\x78"
+ "\xbb\x4f\x56\xb8\xfe\xe7\xe4\x00\x65\x31\x6a\xbc\xd3\xbc\xfd\x78"
+ "\xc1\xbc\xfd\xe3\x82\xf7\xa7\x93\x2f\x78\x8e\x51\xa7\x39\xcd\xdb"
+ "\x9f\xca\xcd\xdb\x9f\xca\xcd\xdb\x9f\xca\xce\xdb\x4f\xfd\x8c\xc4"
+ "\xa8\x0d\x38\x46\xbd\x0c\x31\xea\xec\x04\xca\xca\xad\x8d\x8f\xe7"
+ "\x5a\x95\x43\x9c\x89\xe3\xd2\x4a\x1d\xfc\x3f\xc5\x88\xde\x5d\x84"
+ "\x54\xeb\x21\xbe\xdc\x03\xfd\xd5\x9e\xa5\x46\x6a\xdd\x5c\xf0\xf5"
+ "\xd5\xfb\x50\x50\x12\xc4\xae\x37\x71\xec\x5a\x02\x71\xe9\x5a\x2e"
+ "\x76\x7d\xe9\x4a\x65\x8a\x73\xec\x3a\xe5\x65\x36\x76\x35\x92\x79"
+ "\x5c\x95\x29\x10\xbb\xc2\xf3\xf0\x5a\xfb\xce\xb1\x6b\x23\xc4\xa6"
+ "\x4d\x10\x9b\xea\xaf\xba\xc4\xb1\xb3\xdd\xe3\xd8\xc6\xee\xa1\xa5"
+ "\x96\x81\xb5\x3a\x1c\xc7\x36\xec\xfc\xff\x31\x8e\x7d\xf1\x3c\x1f"
+ "\xc7\xbe\xa4\x70\xfe\xff\x4b\x2e\xf3\xff\xe3\x45\xe6\xff\x4f\x95"
+ "\x31\xff\x7f\xaa\xc2\xf9\xff\x53\xbd\x9c\xff\x3f\xd5\x6d\xfe\xff"
+ "\x9f\xd9\xf7\xad\x93\x0d\x98\xcf\xe2\x71\x2c\xb9\xe6\x1e\x7f\x4c"
+ "\x73\x9a\xff\x3f\xed\x2e\x98\xff\x1f\x27\x31\x47\x3b\x8e\x9b\xff"
+ "\x3f\xf5\x0e\xcc\xff\x9f\x2a\x31\xff\x7f\x1a\x37\xff\x7f\x6a\xae"
+ "\x7b\x1c\x3b\x55\x62\xfe\xff\xb4\x97\x5d\xef\x21\x71\xec\x54\x6e"
+ "\xfe\xff\x34\x0f\xf3\xff\xa7\x73\xf3\xff\xa7\x71\xf3\xff\x09\xa6"
+ "\xee\x71\xec\x34\x2f\xe6\xff\x4f\xe5\xe6\xff\x4f\xf5\x30\xff\x7f"
+ "\xba\xc8\xfc\xff\xc9\xe7\xc5\xe3\xd8\x19\x4e\xf3\xff\x67\xb8\xcc"
+ "\xff\x9f\x7e\x97\xcc\xff\x97\xe4\x96\xcb\xfc\xff\x19\x0a\xe6\xff"
+ "\xcf\x90\x39\xff\x7f\xaa\xc4\xfc\xff\x19\xdc\xfc\xff\xa9\x12\xf3"
+ "\xff\x67\x48\xcc\xff\x9f\xe1\x32\xff\x7f\xaa\xc4\xfc\xff\x19\x36"
+ "\x41\xfe\x6e\x71\x6c\xbc\xcb\xfc\xff\xa9\x2e\xf3\xff\xe3\xb9\xf9"
+ "\xff\x93\xd7\xca\x8f\x63\xe3\x3d\xcc\xff\x8f\x77\x99\xff\x1f\xcf"
+ "\xcd\xff\x8f\xe7\xe6\xff\xc7\x73\xf3\xff\x27\xaf\x71\x3e\xcf\xc7"
+ "\xb1\xe4\x3c\x1f\xc7\xc6\x7b\x3b\xff\xbf\xc4\xc7\x75\x8a\x52\xda"
+ "\x7e\xfe\xff\xed\x5a\xa7\xc8\xf1\xce\xb5\xad\xe6\xff\xbf\xa2\x70"
+ "\xfe\xff\x2b\x92\xf3\xff\xef\xc5\x54\x62\xda\x3e\xde\xc4\x6b\xfb"
+ "\x57\x95\xed\x7f\x4a\xbd\x2a\xb9\xff\xe9\xbd\x98\x4a\xca\xee\xaf"
+ "\x1c\xe4\xed\x3e\x73\xa6\x32\xbb\xcf\x4c\x50\x16\x53\xcd\x99\xcc"
+ "\xc7\x54\x73\x26\x4b\xbf\xf7\x7b\x6d\x88\xe7\x98\x6a\x76\x2e\x1f"
+ "\x53\x25\xda\x88\x1e\x49\x24\x7b\xb2\x53\x89\x3b\x6f\xdf\x7b\xbf"
+ "\xc4\x9e\xc2\xf7\x7e\xaf\x6d\xbb\xf7\xde\xef\x76\xc4\x4b\x09\x91"
+ "\x7c\xbc\xf4\xfa\x25\x65\xf1\xd2\xeb\x35\xc2\x78\x69\xae\x9f\x7b"
+ "\xbc\x94\x38\xde\xfb\x78\x29\x71\x9e\xb2\xb6\x90\x98\xec\x5d\xbc"
+ "\x94\x58\x2e\xfe\xde\xef\xb5\xa1\xd2\xef\xfd\xc8\x35\x77\x9d\x3b"
+ "\xdb\x69\x5e\xe1\xec\x91\xed\x3f\x5e\x9a\x75\x5e\x5c\xd3\xce\xba"
+ "\x44\xe2\xa5\xc4\xb2\xdb\x1f\x2f\x25\x96\x89\xc7\x4b\xb3\xa7\x11"
+ "\x6d\x99\x58\xe6\x1e\x2f\xc1\x3d\xa2\xf1\xd2\xec\x0d\xae\xf7\x90"
+ "\x78\x29\xb1\x8a\xc4\x4b\xb3\xf7\x48\xc7\x4b\xbf\x27\xfb\x62\x53"
+ "\xbf\xef\x4e\xfc\x13\xc1\xd4\x3d\x5e\x9a\x7d\xad\xf5\x78\x89\x70"
+ "\x88\x2d\xa7\x64\xbc\xf4\xfb\x61\xee\xf1\xd2\x6b\x91\xe2\xf1\xd2"
+ "\x1c\xa7\x7d\x6a\x92\xf6\x09\xe3\xa5\xdf\xaf\xbc\x3b\xe2\x25\x49"
+ "\x6e\x9d\x17\xc6\x4b\x49\xd1\xf2\xe3\xa5\xa4\x55\xf2\xe2\x25\xcc"
+ "\x39\xb1\x78\x29\x89\xdb\xff\x83\xf0\xc5\x3d\x5e\x4a\xba\x22\x1e"
+ "\x2f\xcd\xf1\x13\xc6\x4b\x38\x7f\xb1\x78\x69\xce\x20\x41\xfe\x6e"
+ "\xf1\xd2\x9c\xf1\xc2\x78\x89\xa4\xe3\xe3\xa5\x39\x75\xc4\x87\xce"
+ "\x3c\x27\x3f\x5e\x9a\x53\x2e\x1d\x2f\xcd\x39\x2b\x8c\x97\xe6\x14"
+ "\x90\xb8\x68\x2e\x22\xf1\xd2\x9c\x83\xe4\xfc\xcc\x6a\xe7\xf3\x7c"
+ "\xbc\x44\xce\xf3\xf1\xd2\x5c\xb5\xf7\xf1\x92\xf7\xeb\x18\xfd\xf7"
+ "\xe7\xa7\x6a\xee\xd2\xf9\xa9\x6f\xec\x54\x16\x2b\xbd\x91\x7f\x4f"
+ "\xb7\xcb\xd5\xed\x73\xc3\x78\xdd\x3e\xaf\xa7\x32\xad\x32\x2f\x54"
+ "\x99\x6e\x5f\x12\xc0\xeb\xf6\x25\x01\xd2\xba\x7d\xde\x15\xcf\xba"
+ "\x7d\xd1\x64\x5e\xb7\x6b\x3f\x23\xfd\xa2\x76\x1b\xe9\x17\xb5\xd3"
+ "\x6e\x9f\x6e\x5f\x70\x4a\xa8\xdb\xe7\x4f\xba\xa7\xdb\x6f\x87\x6e"
+ "\x7f\xa3\x96\xd7\xed\x0b\xb6\x2b\xd3\xed\x0b\x72\x85\xba\x7d\xc9"
+ "\x01\x77\xdd\xae\xf5\xf3\x5e\xb7\x6b\xfb\x2b\x6b\x0b\xda\x30\xef"
+ "\x74\xbb\x76\xad\xb8\x6e\x9f\x57\x27\xad\xdb\xc9\x35\x77\xbd\xb5"
+ "\xa8\x3f\xaf\xb7\x16\xde\x68\xff\xba\x7d\x61\x8e\xb8\xb6\x5a\xb8"
+ "\x9d\xe8\x76\xed\x9a\xdb\xaf\xdb\xb5\x6b\xc4\x75\xfb\xa2\x60\xa2"
+ "\x71\xb4\x6b\xdc\x75\x3b\xdc\x23\xaa\xdb\x17\x8d\x73\xbd\x87\xe8"
+ "\x76\xed\x3a\xa2\xdb\x17\xcd\x94\xd6\xed\x8b\xb8\x71\x85\x45\xe5"
+ "\xc4\x3f\x11\x4c\xdd\x75\xfb\xa2\xdd\xad\xeb\x76\xc2\x21\xb6\x9c"
+ "\x92\xba\x7d\xd1\x35\x77\xdd\x3e\xaf\x56\x5c\xb7\xa7\x1c\xe3\x79"
+ "\x94\x32\x4b\xa8\xdb\x17\x0f\xbb\x3b\x74\xbb\x24\xb7\x72\x84\xba"
+ "\x3d\xa5\x83\x7c\xdd\x9e\x32\x52\x9e\x6e\xc7\x9c\x13\xd3\xed\x29"
+ "\x6b\x39\xfe\xac\x13\xd7\xed\x29\x3b\xc5\x75\x7b\xca\x01\xa1\x6e"
+ "\xc7\xf9\x8b\xe9\xf6\x94\x4b\x82\xfc\xdd\x74\xfb\x12\x3f\xa1\x6e"
+ "\x27\xe9\x78\xdd\xbe\x64\x17\xf1\xa1\xf3\xb2\xe5\xeb\xf6\x25\x6b"
+ "\xa5\x75\xfb\x92\x0d\x42\xdd\xbe\x24\x81\xe8\xf3\x25\x45\x44\xb7"
+ "\x2f\x49\x21\xe7\xe7\xe9\x9d\xcf\xf3\xba\x9d\x9c\xe7\x75\xfb\x92"
+ "\xd2\x7b\xeb\x1c\xb5\xb7\x75\x8e\x96\xbd\xac\x4c\xbb\x2f\x8b\x57"
+ "\xa6\x21\xd3\x23\x78\x0d\x99\x1e\xe1\xac\x21\x85\xeb\x11\xe8\x06"
+ "\x79\xd6\x90\xa9\x29\xbc\x86\x5c\x71\x96\xf8\xe8\x15\x07\x88\x8f"
+ "\x5e\xc1\xbe\xb7\x96\xb7\xce\xd1\xf2\x1b\xc2\x75\x8e\x74\x2b\xef"
+ "\xad\x73\xa4\x54\x1f\x2e\x71\x9a\x07\xb3\xfc\x90\x32\x7d\xb8\xfc"
+ "\xa0\x50\x1f\xa6\x9f\x73\xd7\x87\x2b\xfa\x7a\xaf\x0f\x57\x28\xdc"
+ "\xff\x62\xc5\x58\xef\xf4\xe1\x8a\xdd\xe2\xeb\x0e\xe8\x22\xa5\xd7"
+ "\x39\x22\xd7\xdc\xfb\xf5\x54\xa7\x75\xc5\x53\x83\xdb\xbf\x3e\x7c"
+ "\x73\xbf\x78\x1f\xfe\xe6\x21\xa2\x0f\x57\xec\xba\xfd\xfa\x70\xc5"
+ "\x2e\x71\x7d\x98\x3a\x84\xf4\xa5\x2b\x0a\xdc\xd7\x1d\x80\x7b\x44"
+ "\xf5\x61\x2a\xb7\xfe\xf7\x8a\x5d\x42\x7d\x48\xf2\x00\x5f\xb3\x4a"
+ "\x5a\x1f\xae\xec\x4d\x7c\x4f\xea\x35\xe2\x7b\x08\xa6\xee\xfa\x30"
+ "\xf5\x58\xeb\xfa\x90\x70\x88\x2d\xa7\xa4\x3e\x5c\xd9\xd5\x5d\x1f"
+ "\xea\x22\xc4\xf5\x61\xda\x25\x9e\x47\x69\x6b\x85\xfa\x70\xe5\x94"
+ "\xbb\x43\x1f\x4a\x72\x6b\xbf\x50\x1f\xa6\xf5\x97\xaf\x0f\xd3\xa6"
+ "\xc9\xd3\x87\x98\x73\x62\xfa\x30\x6d\xb7\x2b\xe7\x84\xfa\x30\xed"
+ "\x88\xb8\x3e\x4c\x3b\x27\xd4\x87\x38\x7f\x31\x7d\x98\xde\x41\x90"
+ "\xbf\x9b\x3e\x4c\xef\x2b\xd4\x87\x24\x1d\xaf\x0f\xd3\x4b\x88\x0f"
+ "\x5d\x76\x56\xbe\x3e\x4c\xdf\x2d\xad\x0f\xd3\xf7\x09\xf5\x61\x7a"
+ "\x06\xd1\x81\xe9\xd5\x44\x1f\xa6\xe7\x90\xf3\xcb\xce\x38\x9f\xe7"
+ "\xf5\x21\x39\xcf\xeb\xc3\xf4\x5a\xef\xbf\xe7\xb8\x2d\xe3\xba\x6d"
+ "\xf4\x3d\xc7\xed\x1a\xd7\x6d\xeb\xef\x39\x56\x2d\x57\xa6\x0d\x57"
+ "\x79\xf3\xfd\xfb\xbd\x39\x30\x2d\x63\xba\xe9\x56\x7e\x4c\x77\xf5"
+ "\x35\x65\x3a\x65\x75\x9d\x32\x3d\xbe\xde\xca\xeb\xf1\xf5\x56\xe9"
+ "\xf9\xed\x6f\x1d\xf2\xac\xc7\xd7\x8d\xe5\xf5\xf8\xdb\xdc\x5a\x3c"
+ "\x6f\xbf\x43\xfa\xc4\xb7\xc7\x2b\x99\xdf\xbe\xfe\x26\x52\xbd\xeb"
+ "\x3a\xbf\xfd\xcc\x21\x32\xbf\x7d\x91\xeb\xfc\xf6\xb5\x47\x84\xf3"
+ "\xdb\xd7\x8c\x96\x9a\xdf\x8e\xc7\x78\x9b\xf7\xd4\xa6\xe0\xb9\xed"
+ "\xa2\xf3\xda\xa7\xdf\xde\x79\xed\x98\x97\x1f\xac\x20\x7a\xfe\xfd"
+ "\xbb\x52\xcf\xaf\x2a\xe6\xf5\xfc\xda\x0d\xca\xf4\xfc\xda\x4c\xa1"
+ "\x9e\x7f\x77\x8f\xbb\x9e\x5f\x7b\xc3\x7b\x3d\xff\x76\x77\x65\xed"
+ "\xe4\xed\x10\xef\xf4\xfc\xdb\x4b\xc4\xe7\xb5\xbf\x55\x2c\x3d\xaf"
+ "\x9d\x5c\x73\xd7\x61\xeb\x9c\xbe\xab\xfd\xc3\xf7\xed\x5f\xcf\xff"
+ "\x61\x8d\xb8\xe6\xfa\xc3\x06\xa2\xe7\xdf\x4e\xb9\xfd\x7a\xfe\xed"
+ "\x14\x71\x3d\xbf\xce\x8f\x68\x9f\xb7\x53\xdc\xc7\x7b\xe1\x1e\x51"
+ "\x3d\xbf\x6e\x98\xeb\x3d\x44\xcf\xbf\xad\x23\x7a\x7e\xdd\x24\x69"
+ "\x3d\xbf\x8e\x5b\x33\x79\xdd\x21\xe2\xbb\x08\xa6\xee\x7a\x7e\xdd"
+ "\xe6\xd6\xf5\x3c\xe1\x10\x5b\x4e\x49\x3d\xbf\xee\x82\xbb\x9e\x7f"
+ "\xeb\xa0\xb8\x9e\x5f\xff\x19\xcf\xa3\xf5\x53\x84\x7a\xfe\x9d\xfe"
+ "\x77\x87\x9e\x97\xe4\xd6\x1a\xa1\x9e\x7f\xe7\x96\x7c\x3d\xbf\x7e"
+ "\xa0\x3c\x3d\x8f\x39\x27\xa6\xe7\xd7\x2f\xe1\xf8\xa3\x13\xd7\xf3"
+ "\xeb\xb3\xc5\xf5\xfc\xfa\x3d\x42\x3d\x8f\xf3\x17\xd3\xf3\xeb\xcf"
+ "\x0a\xf2\x77\xd3\xf3\xeb\x6f\x08\xf5\x3c\x49\xc7\xeb\xf9\x77\x73"
+ "\x88\x0f\x7d\x6b\x96\x7c\x3d\xff\xee\x12\x69\x3d\xff\xee\x4a\xa1"
+ "\x9e\x7f\x37\x96\xe8\xf6\x77\x0b\x88\x9e\x7f\x37\x91\x9c\x7f\x2b"
+ "\xd1\xf9\x3c\xaf\xe7\xc9\x79\x5e\xcf\xbf\x5b\xe4\xfd\x3c\x0d\xef"
+ "\xc7\x7b\xff\xfb\xf3\x34\xd4\x77\xe9\x3c\x8d\x0d\xe3\x95\xe9\xf9"
+ "\x0d\x51\xca\xb4\xe5\xe6\xa1\xbc\xb6\xdc\x3c\x54\x7a\xbe\x40\x56"
+ "\x4f\xcf\xda\x72\x53\x2a\xaf\x2d\xf5\x17\x88\x7f\xd6\x1f\x21\xfe"
+ "\x59\xbf\xca\xdb\xf9\x02\xeb\x1b\x38\x3d\xe9\x98\x2f\xb0\x94\x9b"
+ "\x2f\x00\x9a\x92\x68\xc8\x8d\x8d\xc2\xf9\x02\x59\xab\xa4\xe6\x0b"
+ "\x88\xce\x13\x70\xd1\x8d\x0e\x8d\xa9\x74\x9e\xc0\xdd\xaf\x1b\xdf"
+ "\x2d\xe3\x75\xe3\xc6\x63\xca\x74\xe3\xc6\x12\xa1\x6e\xdc\xfc\xbd"
+ "\xbb\x6e\xd4\x0f\xf4\x5e\x37\xea\xa3\x95\xe9\x46\xfd\x04\xef\x74"
+ "\xa3\x7e\x9f\xf8\x3c\x81\xac\x5e\xd2\xf3\x04\xc8\x35\xf7\xfe\x7e"
+ "\x53\x34\xdf\xdf\x6f\xea\xd9\xfe\x75\x63\xf6\x41\xf1\xbe\x3d\xfb"
+ "\x18\xd1\x8d\xfa\xbd\xb7\x5f\x37\xea\xf7\x8a\xeb\xc6\x4d\x23\x49"
+ "\x1f\xab\xdf\xeb\xae\x1b\xe1\x1e\x51\xdd\xb8\x69\x9e\xeb\x3d\x44"
+ "\x37\xea\x0b\x89\x6e\xdc\xf4\x8e\xb4\x6e\x7c\xaf\x3f\xf1\x4b\x9b"
+ "\x6e\x11\xbf\x44\x30\x75\xd7\x8d\x9b\xca\x5b\xd7\x8d\x84\x43\x6c"
+ "\x39\x25\x75\xe3\x7b\xdd\xdd\x75\x63\x56\xa8\xb8\x6e\xcc\xb9\xc6"
+ "\xf3\x28\x67\x83\x50\x37\xbe\xf7\xf2\xdd\xa1\x1b\x25\xb9\x75\x50"
+ "\xa8\x1b\x73\x06\xc9\xd7\x8d\x39\x33\xe5\xe9\x46\xcc\x39\x31\xdd"
+ "\x98\xb3\x8f\xe3\x4f\xa1\xb8\x6e\xcc\x39\x21\xae\x1b\x73\xbe\x17"
+ "\xea\x46\x9c\xbf\x98\x6e\xdc\xdc\x55\x90\xbf\x9b\x6e\xdc\x3c\x50"
+ "\xa8\x1b\x49\x3a\x5e\x37\x6e\x2e\x23\x3e\x74\xc3\x11\xf9\xba\x71"
+ "\xf3\x3e\x69\xdd\xb8\xf9\x33\xa1\x6e\xdc\xbc\x8e\xe8\xc3\xcd\x06"
+ "\xa2\x1b\x37\xe7\x92\xf3\x1b\x8a\x9d\xcf\xf3\xba\x91\x9c\xe7\x75"
+ "\xe3\x66\xa3\x27\xdd\xc8\xe8\x0f\x47\xe9\x29\x7b\x21\x1c\x45\x50"
+ "\xce\x9e\xd0\x8f\x15\xc3\xff\x4b\xa1\x3f\x52\xc3\xff\xab\xa4\xb4"
+ "\x8a\x31\xf8\x70\x94\x1d\xb4\x87\x1d\x9e\x53\x69\xfc\xa9\xb8\xf8"
+ "\x01\x2b\x3c\x7b\x8b\x96\xe8\x92\xc3\x51\x41\xd6\x4e\x51\x76\x26"
+ "\x09\xfa\x70\xf8\xbf\x0e\xce\x41\xfa\x40\xe8\xf7\x34\x4b\x51\xe0"
+ "\x75\x6a\x8b\xde\x91\x0e\xca\x1c\x78\x91\xda\x12\x8d\xf3\x30\xaf"
+ "\xdf\x92\x0b\xf5\xb1\x4a\x96\x15\xf2\x8a\xd9\xd3\x07\xad\xb4\x32"
+ "\x3f\x14\xcf\xbf\x89\x6a\xa8\x2d\x97\x82\xea\x3a\x45\x81\x1f\x42"
+ "\x58\xeb\x15\x3e\x60\x54\xe1\x3c\x8b\xe7\x37\xe1\x6b\xa5\xf8\x9a"
+ "\x0d\xca\x98\x36\x0f\x51\x59\x37\x3b\xf9\x83\xae\xea\x90\x6e\x62"
+ "\x6a\x17\x58\xa1\xcc\x3a\x2b\xfa\xbc\x4f\xb5\xea\x93\xf7\xab\xd9"
+ "\xbe\xa7\xc2\x64\x63\xf3\xd0\xcc\x67\xcb\x73\x65\x07\xa4\x17\x2b"
+ "\xc3\xda\x8f\x51\x44\x87\x81\x8c\x41\x5e\x7f\xf7\xc7\x51\x52\x76"
+ "\x0c\x5a\xd5\x07\x15\x3f\x0c\xb6\xd3\x20\x4a\xec\xba\xcc\xe7\xec"
+ "\x92\x7a\x4e\x3f\x35\xf2\x7f\xaf\x07\x63\x4a\xdf\x86\xa8\x8d\xf6"
+ "\x4e\xfe\x47\xc1\x27\xe6\x6d\x61\x8c\xe6\xf5\x5b\xd5\x06\xbf\xa3"
+ "\x46\x6c\xf3\xb7\xe0\xfa\xc6\x1e\x8c\xb1\x7e\x35\xe6\xcd\xd6\xf0"
+ "\x23\xd0\xb7\xbb\x62\xb1\x28\x71\xde\x4c\x4d\xca\x9c\x79\xb3\x16"
+ "\x2c\x49\xd1\xf4\x4f\xec\x82\x26\x2f\x58\xa0\x99\x37\x73\xfe\x72"
+ "\x8d\xf3\x95\x27\x35\x89\x73\x16\xcf\x7c\x2d\x79\xd6\xa0\x79\xaf"
+ "\x6b\xbb\x40\x99\x90\x53\x39\x42\x70\x59\xec\xeb\xb7\x0e\xdd\xb1"
+ "\x09\xa1\xf7\xba\x21\x15\x2e\x17\x3c\x6f\xab\x81\xae\x1e\x85\x9f"
+ "\x97\xb5\x85\x31\x51\x90\x26\x1d\x7c\xda\xc6\xb4\x4e\x90\xf6\x8f"
+ "\xbb\xf2\xa0\x5c\x3b\xa0\xdc\x50\x46\x5c\xe6\x12\x47\x99\x1d\x9c"
+ "\x48\xc7\x9c\x48\xbb\x09\x1c\xdc\x7a\x29\xc8\xd2\xe9\x79\x86\x89"
+ "\xc3\xf5\xc3\x7b\xfa\xfa\x5d\xa6\xb6\xad\x64\xf5\x7f\xf6\xe1\x28"
+ "\xf3\xfa\x6d\xc8\xc1\x31\x7b\x4e\xc7\x7c\x66\xd3\x61\x35\x68\x47"
+ "\x3f\x33\x93\xf4\x34\x70\x13\xee\xdf\x16\x3d\x18\xa1\x0c\xc6\x1c"
+ "\xc7\xee\x0f\xc0\x98\x81\xc3\x84\xa7\x70\xed\x7d\x4d\x3d\x85\x9e"
+ "\x81\x3c\xc6\x1a\xd0\xfc\x44\x9c\x87\x01\xce\x61\x9b\xdb\xf3\x1f"
+ "\xca\x98\x12\x8e\x32\x06\x64\xa0\x0c\x33\xbe\x27\xff\x52\x5c\x50"
+ "\x0a\xf2\x8b\xd1\x31\xdf\x81\xdf\xf1\x63\xfa\x3e\x94\xc1\xec\xbc"
+ "\x14\x67\xa0\xb6\x85\xdb\x37\x77\xcc\x87\xfa\xd4\x41\x3e\x99\x06"
+ "\x64\x2f\xc4\xf9\x6c\xdc\xc2\xda\xbe\x0e\xd7\x1d\xec\x03\x71\x0c"
+ "\x53\xcc\xac\xe6\xda\x50\xe6\xb7\x3a\xbb\x7e\x60\x61\xa5\xaa\x01"
+ "\xc5\x58\x99\x66\x66\xc3\xb7\xba\x0a\x93\x09\x7c\x9a\xf6\x75\xa6"
+ "\xcb\xd6\x71\x41\xd6\x39\xb3\xf2\xba\x41\x5b\xcc\x1e\x58\xc8\x6c"
+ "\xb8\x59\x36\x65\x20\x52\x43\xde\xb5\x0e\x7b\x82\x2d\x55\xf2\x78"
+ "\xb4\x8d\x1d\xff\xc6\x7c\x80\xf2\x70\x7c\x78\x7f\xc4\x91\x14\x77"
+ "\x3e\xb4\xb4\xcd\x4d\x0d\xb1\x56\x26\xee\xf9\x66\x7d\xc3\x3a\x46"
+ "\xdd\x90\x92\x76\x09\x75\xc4\xb6\xad\x00\xbd\x9f\xb5\x14\x85\x6e"
+ "\x78\x05\x69\x5e\x5d\xae\x46\xc6\xec\x06\x6d\xd0\xaa\x0c\x3f\xb0"
+ "\x09\x05\xfe\x25\x12\x7c\x66\x64\x73\x8f\x8e\xf9\xa9\xb3\x10\xb5"
+ "\xef\x62\x21\x85\x75\x32\x9e\x03\x02\xb6\x6e\xdc\x01\xf7\x31\x3f"
+ "\xc5\x21\x8c\x07\x8b\xc5\x4f\x49\x28\x7a\x0e\xf4\xcf\x73\xf1\xf5"
+ "\x0f\x06\x6d\x87\x3c\xe5\xd5\xeb\x7d\x56\xff\xda\x00\xab\xc1\x80"
+ "\x53\x65\x8d\x8d\xcd\x93\xc5\x2a\x99\xc7\xea\x10\x94\x83\xc7\xeb"
+ "\xfd\xfd\x18\x57\x89\x3a\x57\x91\x3a\x9b\xc1\x37\x35\x98\x3c\xd4"
+ "\xd9\x48\xea\xdc\xe1\xa6\xe7\x3a\x7f\x70\xcd\x73\x9d\x73\xfb\xca"
+ "\xaf\xf3\x07\x45\xf2\xeb\xfc\x41\x81\x74\x9d\xcd\x1c\xce\x66\xc0"
+ "\xd9\xec\x01\x67\x33\x87\xf3\x7d\x17\x3d\xd7\x39\xf7\x7b\xcf\x75"
+ "\xde\xde\x5d\x7e\x9d\x73\xf7\xca\xaf\x73\x6e\xae\x87\x3a\x73\x38"
+ "\x5b\x00\x67\xb3\x07\x9c\xcd\x1c\xce\xc1\xa7\x3d\xd7\x79\xfb\x59"
+ "\xcf\x75\xde\xd1\x59\x7e\x9d\xb7\xe7\xcb\xaf\xf3\x76\xbd\x74\x9d"
+ "\x2d\x1c\xce\x16\xc0\xd9\xe2\x01\x67\x0b\x87\xf3\xf0\xf5\x9e\xeb"
+ "\xbc\xe3\x44\x2b\x75\xb6\xc9\xaf\xf3\x8e\x1c\xf9\x75\xde\xb1\xc6"
+ "\x43\x9d\x39\x9c\x1b\x01\x67\x8b\x07\x9c\x2d\x1c\xce\x33\x9e\xf3"
+ "\x5c\xe7\xbc\x43\x9e\xeb\x9c\x77\x43\x7e\x9d\xf3\xd6\xc9\xaf\x73"
+ "\x9e\x4e\xaa\xce\x4d\xe0\xb7\x03\xa0\x2e\xcd\xff\x8a\x7b\xde\xa6"
+ "\x6e\x48\x0d\xa8\x41\x54\xee\x6a\x7b\x52\x50\x2d\xea\x0c\x75\x4b"
+ "\x62\xb6\x74\x8e\xc5\x7f\xed\xea\x06\x5d\x93\xba\x61\x5d\x63\xb7"
+ "\xc3\xea\x37\x5f\x46\x1d\xb1\x1e\x7f\xc7\x8e\x42\xed\xfa\x86\x94"
+ "\xcc\x17\x91\x26\xdd\x88\xd4\x15\x69\x06\x94\xa6\x65\x8c\x15\xe8"
+ "\x7b\xd4\xb5\x16\xc7\x9e\xdf\xa0\xb2\xba\x52\x34\x7f\x11\xc3\x5c"
+ "\xa6\x76\x8e\xc6\xef\x7d\x41\x27\x67\xe8\xff\x89\x34\xf0\x8c\xc8"
+ "\x1d\x70\xe0\x7c\x82\x26\x40\xff\xb9\xa5\xf3\x8b\x79\x69\x28\xf4"
+ "\xf0\xdc\x5a\x84\xcf\x6f\x87\xc3\xb6\xa5\x63\x7e\xda\xcb\x88\xfa"
+ "\xf8\x66\x35\x45\xfa\xe6\x9d\x9d\x5d\xfb\xe6\x09\x33\xc1\x96\xaf"
+ "\xb1\xd7\xa6\xe4\xbe\x28\xd7\x96\xf9\x67\x1c\x7d\x37\x6b\xcb\xf3"
+ "\x36\xd2\xdf\xbb\xf4\xdd\x87\xe1\xf9\xbc\x2d\xf3\x4b\xb0\x2d\x19"
+ "\x7d\x83\xbe\xb2\xb6\x09\xc7\x4d\xea\xcb\x3a\x44\xc1\xf9\x94\x0a"
+ "\xed\x4d\x24\x61\xe3\x2a\x27\x1b\x5b\x03\x6a\x3a\xdc\x94\xb0\xb1"
+ "\xa5\x49\x6d\xf6\x17\xb1\xb1\xc9\x3b\x1b\x7f\xb8\xd3\x77\x1b\x7f"
+ "\x38\x4f\xda\xc6\x1f\x1e\x90\x6f\xe3\x0f\x47\xc8\xb7\xf1\x87\xe1"
+ "\xc4\xc6\x66\xb5\xd0\xc6\x3b\xab\xa5\x6d\x6c\x76\xe2\xb1\x19\x78"
+ "\x7c\xdf\x45\x71\x1b\x9b\x81\xc7\x66\x11\x1e\x9b\xbd\xe4\xf1\xae"
+ "\x0e\xbe\xdb\xf8\x4f\xa7\xa4\x6d\xbc\xab\xb7\x7c\x1b\xff\x29\x57"
+ "\xbe\x8d\xff\x94\xc9\xd9\xd8\x85\xc7\x7f\x1a\xe5\xc1\xc6\x4e\x3c"
+ "\x36\x03\x8f\x83\x4f\x4b\xd8\x18\x78\x6c\x11\xe1\xb1\xd9\x4b\x1e"
+ "\xef\x9e\xe3\xbb\x8d\x77\x0f\x93\xb6\xf1\xee\x55\xf2\x6d\x8c\xa7"
+ "\x6e\xc9\xb5\xf1\x2e\x23\xb1\xb1\xc5\x85\xc7\xbb\xf2\xa5\x6d\x6c"
+ "\x71\xe2\xb1\x05\x78\x3c\x7c\xbd\xb8\x8d\x2d\xc0\x63\x8b\x08\x8f"
+ "\x2d\x5e\xf2\xf8\xcf\xe5\xbe\xdb\xf8\xcf\xdb\xa4\x6d\xfc\xe7\x4b"
+ "\xf2\x6d\xfc\xe7\x44\xf9\x36\xfe\xf3\x64\xce\xc6\x2e\x3c\xfe\xb3"
+ "\xca\x83\x8d\x9d\x78\x6c\x01\x1e\xcf\x78\x4e\xc2\xc6\xc0\xe3\x46"
+ "\x11\x1e\x5b\xbc\xe4\x71\xc1\x10\xdf\x6d\xfc\x3f\x36\x69\x1b\x17"
+ "\x8c\x97\x6f\xe3\xff\x29\x95\x6f\xe3\xff\x29\x22\x36\x6e\x74\xe1"
+ "\xf1\xff\x24\x49\xd9\xb8\x19\x62\xc0\xae\x60\xe3\xae\x75\x88\xda"
+ "\x8e\x6d\x5b\x4d\x6c\x6b\xeb\xd1\x39\x76\x3b\x65\x4f\xc2\x36\x61"
+ "\xc7\x80\x7e\x0c\x0d\xb4\xe9\x1b\x52\x19\x0a\xea\x94\x86\xc7\x5d"
+ "\x0b\x3e\xb5\xae\x46\x81\x9a\x34\x3c\xfe\xfb\xd1\x06\x9c\x46\x93"
+ "\xf6\xf6\x05\x78\x1e\x8d\xc7\xbd\xac\xd9\x07\x8d\xb6\xe0\x26\xdd"
+ "\x65\x6a\xcf\x15\xa6\xef\x0f\x5a\x88\x37\xf5\xcc\x1b\xa1\x21\x95"
+ "\x75\x85\x60\x9f\x93\xa8\xa2\xfa\x1f\xc8\xde\xa3\xf3\x8b\x83\xad"
+ "\x28\x9c\xf9\x31\x3c\xa4\x2c\xc5\x80\x6c\xaf\x87\x06\x54\xea\x4a"
+ "\x51\xa5\xee\x2f\x28\xa6\x96\x69\x60\xfe\x13\x1e\xd0\xdc\x3d\x68"
+ "\xab\xad\x7b\xe7\x31\xb6\xcd\xa1\xd5\xd6\xee\x41\xeb\xf6\x2d\x35"
+ "\x50\x01\x16\x14\x9e\x5c\xc3\x30\x59\xaf\x21\x55\xd6\x45\xe4\xbf"
+ "\xf1\x35\x14\xb0\xf1\x22\x52\x97\xd5\x54\xa3\xf2\xab\xa5\xa8\xfc"
+ "\xe6\x39\x54\xde\x00\x47\x13\x1c\x76\x38\x32\xce\x01\xd6\x08\x45"
+ "\x5f\x43\x78\x6f\x45\xe3\x23\xe7\x51\x48\x99\xb5\x1a\xe1\x6f\x5c"
+ "\xaf\x53\x7b\xd6\x06\x24\xa0\x10\xe6\x3f\xa1\x88\x79\x3d\x94\x82"
+ "\x6b\x2a\x7c\xbe\xd2\x6a\x44\x65\x35\x16\x7c\x3d\x11\xae\xab\xd2"
+ "\x6b\x20\x7f\x7b\x29\xde\x3b\xd1\x58\x96\x71\x02\xea\x97\x5c\xc5"
+ "\xe0\x18\xba\x5b\x43\xac\x1e\x4c\x6d\x67\x42\xfb\x11\x1e\x7c\xb4"
+ "\x7d\x87\x5d\x2e\xd6\x7b\xc8\xfa\x97\x6f\x84\x76\x03\x3b\x3f\x60"
+ "\x7f\x23\x4e\x3d\xf1\xdc\x77\x4c\x85\xa9\x1a\xe1\xb1\x84\x0a\xd3"
+ "\x49\x54\xb9\xc6\x8e\x62\x96\x23\x34\xc1\x86\x10\xb6\x45\xa5\xae"
+ "\x16\x4d\xd4\xa2\x20\x3c\xfe\x6c\xff\x31\xbc\x5b\x65\x8d\x11\xad"
+ "\xb4\x42\x19\xaf\x5b\x5a\xca\x58\xb1\xa6\x02\xc1\xb5\x07\x2a\x92"
+ "\x0c\x28\x40\x8b\xd4\xd8\xbe\x56\x7d\x83\x6e\x22\xb4\x9f\xf9\x26"
+ "\x86\xc1\xb6\xc5\x36\xc5\xf6\xc5\xf9\x39\x6c\x5e\x99\x68\x44\xe9"
+ "\x16\xa4\xae\x4c\x83\xbf\x3a\xc6\x58\x89\x6e\x20\x28\xe3\x56\x26"
+ "\x38\xb9\x0a\x78\x31\x19\x73\xc1\x40\x15\x14\x00\xfe\xdd\x24\x38"
+ "\x65\x22\x9c\xea\x70\xd3\x0b\x4e\x59\x79\x4e\xfd\x6f\x07\x9e\x53"
+ "\x7b\xbf\x97\xe6\xd4\xde\xd1\x84\x53\x66\x75\xfb\xe4\xd4\xff\x9e"
+ "\xf3\xcc\xa9\xff\x2d\x92\xe6\x94\xd9\x1f\x38\x55\x25\xe4\xd4\xde"
+ "\x1b\xf2\x39\xb5\xd7\xbf\x0d\x39\x65\x51\xc6\xa9\xff\xad\x13\x72"
+ "\xea\x23\xab\x34\xa7\xcc\x9c\x9f\xba\xef\x62\xeb\x9c\x32\x3b\xf9"
+ "\xa9\x7d\xd3\x78\x4e\x7d\x32\x4c\x9a\x53\x1f\x67\x73\x9c\x6a\xa7"
+ "\x7e\xea\xe3\x41\x9e\x39\xf5\x71\x80\x07\x4e\x81\x9f\x32\xbb\xf8"
+ "\xa9\x4f\xc6\xc9\xe7\xd4\xc7\xf1\x6d\xc7\x29\xb3\x42\x3f\xf5\xf1"
+ "\x18\x21\xa7\xf6\xc5\x7a\xe0\x14\xe7\xa7\x82\x4f\x7b\xc1\x29\x27"
+ "\x3f\xf5\xc9\x3e\x9e\x53\x9f\xbe\x23\xcd\xa9\xc2\x4b\x84\x53\x96"
+ "\x76\xea\xa7\x0a\x57\x79\xe6\x54\x61\x82\x34\xa7\x2c\xe0\xa7\xcc"
+ "\x2e\x7e\xea\xd3\x6d\xf2\x39\x55\x58\xd8\x86\x9c\x52\xe8\xa7\x0a"
+ "\x73\x84\x9c\xfa\x64\x97\x34\xa7\x2c\x9c\x9f\x1a\xbe\xbe\x75\x4e"
+ "\x59\x9c\xfc\xd4\x5f\xfc\x78\x4e\xfd\xf5\x82\x34\xa7\xfe\x3a\x92"
+ "\xe3\x54\x3b\xf5\x53\x7f\x39\xeb\x99\x53\x7f\xd9\xef\x81\x53\xe0"
+ "\xa7\x2c\x2e\x7e\xea\xaf\xd7\xe4\x73\xea\xaf\xaa\xb6\xe3\x94\x45"
+ "\xa1\x9f\xfa\x4b\xad\x90\x53\x9f\x5a\x3c\x70\x8a\xf3\x53\x33\x9e"
+ "\xf3\x82\x53\x4e\x7e\x6a\xff\x14\x9e\x53\x7f\x1b\x22\xcd\xa9\xcf"
+ "\x36\x10\x4e\x35\xb6\x53\x3f\xf5\xd9\x40\xcf\x9c\xfa\xcc\x5f\x9a"
+ "\x53\x8d\xe0\xa7\x2c\x2e\x7e\xea\x6f\xcf\xca\xe7\xd4\x67\x71\x6d"
+ "\xc8\x29\x85\x7e\xea\xb3\x51\x42\x4e\xed\x9f\x20\xc5\xa9\x26\x1c"
+ "\xf7\xf9\x01\xa7\x92\x20\xee\x03\x0e\x05\x55\x11\x4e\x35\x03\xa7"
+ "\x3e\x70\xe6\xd4\xb7\xae\x71\xdf\xdf\xf6\xd8\x5b\x38\x55\xf4\x99"
+ "\x2b\xa7\xec\xc0\xa9\x66\x96\x53\x7f\x2f\x77\xc4\x7d\x95\x75\xf9"
+ "\x80\xd5\x55\x54\x19\x0b\x7c\xda\xc2\xf1\xe9\x5b\xe0\x13\xd4\xc7"
+ "\x0e\xf5\x2d\x3b\x5f\x8d\x62\x8c\xa4\x5e\x4d\x50\x5f\xbb\x33\x97"
+ "\x9a\x6a\x29\xcc\x21\xcc\x1d\x07\x8f\xca\xe7\x03\x7f\x16\x9d\x42"
+ "\xe5\x4b\xe1\x58\x01\x47\x1a\x1c\xe8\x14\x2a\xab\x45\xec\x98\x3d"
+ "\xcf\x9f\x2a\x8e\x3f\x7f\x9f\xe3\x99\x3f\x7f\x8f\x92\x17\xe3\x15"
+ "\x1d\x93\xcf\x9f\xbf\x6f\xe5\xe6\xd2\xa9\x63\x26\x7d\xc7\xe0\xf9"
+ "\xaf\x84\x23\x57\x51\x8c\x15\x05\x31\x33\xc2\xbb\x05\xc4\x21\xf5"
+ "\x9b\x36\x44\x6d\x78\x0d\xa9\x37\x7c\x03\xf5\x75\xb4\x9d\x8b\x28"
+ "\xe0\xa4\xe5\x1f\xa8\xec\x66\x35\x2a\x6b\x38\x81\xca\xec\x70\x5c"
+ "\x85\x03\xca\x18\x33\xcb\xb9\xbe\x46\xae\xbe\x45\xd3\x20\xaf\x30"
+ "\xe9\xfa\x16\x8d\x60\xeb\x9b\x08\xf5\x6d\xe2\xeb\x5b\x09\x5c\x04"
+ "\x5c\x1e\xb0\x73\x71\x62\x8c\x11\x75\x5e\x60\x65\x98\x26\x8e\x83"
+ "\x18\x97\x93\x67\x2c\x28\x46\x0b\x58\xbd\x0e\x1c\xac\x29\x40\xe9"
+ "\xa9\xc0\xc1\x26\x0b\x7e\xaf\x6f\xac\xcc\x68\x04\x0e\xfe\x3d\x95"
+ "\x01\xbb\x35\x63\x0e\x7e\x8b\x39\xf8\xb7\x7c\xbb\x34\x07\x4d\x84"
+ "\x83\x10\x27\xb6\xce\x41\x27\xbf\x76\x60\x10\xcf\xc1\xff\x1b\x29"
+ "\xcd\xc1\x7f\x4c\x72\xc4\x89\xff\x7d\x0e\x1e\xb8\xe6\x99\x83\x07"
+ "\xca\xe4\xc5\x84\xff\x37\x5e\x3e\x07\xff\xd1\xab\xed\x38\xf8\x8f"
+ "\x0b\x9e\x39\xf8\x8f\x83\x5e\x70\xd0\xa2\x8c\x83\xff\x40\x42\x0e"
+ "\x1e\x08\x93\xe6\xa0\x99\xf3\x83\x10\x57\xb6\xca\x41\xe7\xb8\xf2"
+ "\xff\x3e\xe5\x39\x78\xe8\x90\x34\x07\x0f\x9e\x75\xc4\x95\xff\x7d"
+ "\x0e\x1e\x5c\xe8\x99\x83\x07\x63\xe5\xc5\x90\x87\xca\xe5\x73\xf0"
+ "\x60\x7e\xdb\x71\xf0\xd0\x4c\xcf\x1c\x3c\x34\xa6\x75\x0e\x9a\x15"
+ "\xfa\xc1\x83\x6b\x84\x1c\xfc\xbf\x02\x0f\x1c\xe4\xfc\x20\xc4\xa1"
+ "\xad\x73\xd0\xc9\x0f\x1e\x1e\xc6\x73\xb0\xf8\x59\x69\x0e\x7e\x3e"
+ "\xcd\x11\x87\xfe\xf7\x39\x78\xf8\x96\x67\x0e\x1e\x3e\x23\x2f\xe6"
+ "\x2c\x9e\x24\x9f\x83\x9f\x87\xb5\x1d\x07\x3f\xbf\xe4\x99\x83\x9f"
+ "\x97\x78\xc1\x41\x85\x7e\xf0\x73\x7f\x21\x07\x0f\x47\x48\x73\xd0"
+ "\xc2\xf9\x41\x88\x5b\x5b\xe5\xa0\x73\xdc\x5a\x7c\x80\xe7\xe0\x17"
+ "\xc7\xa4\x39\x78\xe4\x82\x23\x6e\xfd\xef\x73\xf0\xc8\x72\xcf\x1c"
+ "\x3c\x12\x27\x2f\x46\xfd\xe2\xac\x7c\x0e\x1e\x29\x68\x3b\x0e\x7e"
+ "\x31\xc7\x33\x07\xbf\x88\x6a\x9d\x83\x16\x85\x7e\xf0\x48\xa6\x90"
+ "\x83\xc5\x85\x1e\x38\xc8\xf9\x41\x88\x73\x5b\xe7\xa0\x93\x1f\x3c"
+ "\x3a\x9a\xe7\xe0\xb1\xf1\xd2\x1c\x2c\x99\xe9\x88\x73\xff\xfb\x1c"
+ "\x3c\x6a\xf3\xcc\xc1\xa3\xe7\xe5\xc5\xb4\xc7\xa6\xc9\xe7\x60\x49"
+ "\x44\xdb\x71\xb0\xe4\x9a\x67\x0e\x96\x94\x79\xc1\x41\x85\x7e\xb0"
+ "\x44\x2d\xe4\xe0\xd1\xa1\x52\x1c\xb4\x43\x5c\xdc\x9c\xff\x83\xd6"
+ "\x9e\x13\xb4\x35\xc8\x4f\x83\xac\xea\x26\x5d\x65\x8a\x09\x4d\xbc"
+ "\x05\xf6\xd1\xde\x42\xaf\xdc\x52\x23\x5b\x4e\xd0\x3a\x88\x0b\x75"
+ "\x4e\xf1\x33\x3b\xb7\xcc\xaa\x4f\xae\xda\x38\x1f\xa9\x20\xfe\x7e"
+ "\x11\x9f\xab\xbc\x6c\x41\xf8\xf9\x2b\x71\x79\xae\xf2\xe5\xc1\xe3"
+ "\x04\xcc\x4f\xe1\x6a\xf6\x1d\x73\x93\x01\xd5\x8c\x42\x74\x59\x8d"
+ "\x01\xec\xb0\x82\xc5\x17\xdb\xe5\x32\x75\x3c\x22\xef\x3a\x52\x59"
+ "\xff\x13\xfa\x00\xd8\x3b\xa4\xeb\x32\xe4\xd7\xab\x86\xb1\x63\xbb"
+ "\x62\x7b\x61\x1b\x6b\x56\xe0\x77\xd7\xc7\x57\x56\x00\xc7\xac\xff"
+ "\x09\x7f\x60\x07\xa4\x13\x8f\x57\x8f\xaf\x95\xcf\x8d\xe3\x51\xe4"
+ "\xbb\x85\xe3\x61\x65\xe7\x91\xe8\xbb\x63\xb0\x95\xc9\x4b\x5b\x59"
+ "\x9c\xe2\xbc\x3b\x60\xab\x2f\xe3\xbc\xb3\xd5\x97\x7b\x84\xb6\x12"
+ "\x8b\xab\xbe\xfc\x54\xbe\xad\xbe\x4c\x21\xb6\xfa\x32\x56\xda\x56"
+ "\x66\x2f\x79\x65\xd6\x39\xc5\x23\x77\xc0\x56\xa5\x6b\xbc\xb3\x55"
+ "\xe9\x59\x17\x5b\x89\xe8\xff\xd2\x0b\xf2\x6d\x55\x9a\x4f\x6c\x55"
+ "\x9a\xea\xc1\x56\x5e\xf2\xca\x6c\x71\xd2\xcd\x77\xc0\x56\x27\x0a"
+ "\xbd\xb3\xd5\x49\x3f\xa1\xad\xc4\x74\xea\xc9\xce\xf2\x6d\x75\xa2"
+ "\x8c\xd8\xea\x44\x81\xb4\xad\x2c\x5e\xf2\xca\xa2\x73\xd2\x77\x77"
+ "\xc0\x56\x27\xcf\x7b\x67\xab\xaf\x06\xb9\xd8\x4a\x44\x4f\x7d\x35"
+ "\x4c\xbe\xad\x4e\x5a\x88\xad\x4e\x9e\xf1\x60\x2b\x2f\x79\x65\xb1"
+ "\x38\xe9\x90\x3b\x60\xab\x32\x7f\xef\x6c\x55\x36\x4d\x68\x2b\xb1"
+ "\x7e\xbf\x6c\xa6\x7c\x5b\x95\x85\x11\x5b\x95\x21\x29\x5b\xd9\xf4"
+ "\x0d\x29\x41\x60\x83\xc6\x4d\x0d\xb1\x41\x3a\x44\x35\x69\xc0\x6e"
+ "\x21\x60\xb7\x55\x1a\xd4\xac\x07\xbb\x19\xad\x68\xe2\xc2\xef\x98"
+ "\x8a\x3a\x1b\x6a\x02\x9b\x35\xaa\x1b\xe0\x5c\x2d\x9e\x73\xf4\xd4"
+ "\x45\xaa\xe2\xd9\x19\x0b\xd5\x08\xdb\x0d\xdb\x01\xdb\x8e\x01\xbb"
+ "\xb1\x76\x0c\x09\xad\xb6\x85\x74\x1e\x13\x7d\xed\x3b\x66\x81\x81"
+ "\x61\x70\x7d\x19\xf5\x41\x23\x7e\x2f\x10\x53\x8b\x3a\x6b\x5e\xc4"
+ "\x75\x2a\xbf\x81\xcf\x57\x1a\xab\x41\x1f\xdc\x44\xac\x36\xfb\x2e"
+ "\x3c\xc4\x36\x35\x3c\xc0\x56\x19\xf7\x3c\xd3\xed\xb0\xda\xda\xa3"
+ "\x63\x7e\xfa\x35\xd4\x11\xeb\x87\x2c\x3b\x0a\x5d\x39\x0f\x51\x1f"
+ "\xcf\x2d\xa6\xd8\x6f\xd7\x16\xb1\x79\x1c\x02\xbb\x84\x32\xf5\x4e"
+ "\x73\xba\xeb\x93\x50\xe5\x65\x3d\x8b\x9b\xab\x46\x60\x71\xfb\x57"
+ "\xb8\x1a\x74\x66\x24\xa3\x6e\x58\xa7\xaf\x40\x1a\xa6\x19\x6c\xcc"
+ "\x7e\x4f\x54\xb1\x27\xaf\x49\xae\x8d\xcb\xd9\xf9\xdf\x76\x0d\x37"
+ "\x7f\x0b\xec\x84\x9f\xcf\xce\xdf\xd2\x3a\xcd\xdf\x82\x32\xf3\xf3"
+ "\xb7\xca\x27\xe0\xf9\x5b\xf6\xef\x42\x1f\x70\xd4\x7d\x41\x32\xc3"
+ "\x40\xdd\xbb\x55\x98\x8c\x08\xd7\xbf\xc2\x54\x8c\xd2\x53\x90\xba"
+ "\xa2\xa9\x16\xa5\x99\x18\x63\x45\xc6\x15\x14\x73\x0b\xeb\x60\xcc"
+ "\x97\x8a\x91\x04\xd7\xf2\x00\xfb\x77\xe1\x0f\x18\xa8\x8a\xc8\x8a"
+ "\x2a\x84\x9c\xbe\xe3\x49\x02\xcd\xec\x0f\x38\x24\x55\x66\x5c\x44"
+ "\x80\x49\x61\xa5\xf5\x1b\x8c\x53\x12\x5c\x1f\xd5\xa2\xaf\x7b\x74"
+ "\xfe\x0b\x3e\x87\x31\xc3\xef\x9b\xf0\xfa\x00\x79\x4e\xfa\x1b\xf3"
+ "\x22\x48\x97\x81\x2a\x75\x4d\xa8\xc2\x8a\xbf\xd9\x2d\x2b\xfa\x2a"
+ "\xae\x5a\x8a\x47\x26\x8e\x47\x55\x41\xba\x0e\x37\xbd\xe0\x91\x85"
+ "\xe7\x51\xd5\x3b\xbe\xf1\xa8\x6a\xa4\xef\x3c\xaa\xea\xa0\x9c\x47"
+ "\x66\x7f\x21\x8f\xaa\x6e\xc8\xe7\x51\x65\x95\x7c\x1e\x55\xe6\xf8"
+ "\xc6\xa3\xaa\x55\x84\x47\x95\x93\x09\x8f\xaa\x74\x3c\x8f\xd8\x6f"
+ "\xa3\xee\x10\x8f\x2a\x91\x34\x8f\xcc\x9c\x3f\x32\x83\x3f\xba\xef"
+ "\x62\xeb\x3c\x32\x3b\xf9\xa3\xd3\xa7\x7c\xe3\xd1\xe9\x55\xbe\xf3"
+ "\xe8\x74\xb4\x0f\x3c\x72\xf1\x47\x5f\x8f\x94\xcf\xa3\xd3\xa1\xf2"
+ "\x79\x74\xea\xbc\x6f\x3c\x3a\x7d\x82\xf0\xe8\x54\x2e\xe1\xd1\xe9"
+ "\x62\x9e\x47\xec\xf7\x66\x77\x88\x47\xa7\xa2\x3c\xf0\x88\xf3\x47"
+ "\x66\xf0\x47\xc1\xa7\xbd\xe0\x91\x93\x3f\x3a\xdb\xd3\x37\x1e\x9d"
+ "\x39\xe1\x3b\x8f\xce\x6c\x56\xce\x23\x8b\x8b\x3f\x3a\xbb\x4a\x3e"
+ "\x8f\xce\x24\xc8\xe7\xd1\x99\x30\xdf\x78\x74\x36\x98\xf0\xe8\xeb"
+ "\x1a\xc2\xa3\xb3\xfe\x3c\x8f\xd8\x6f\xf8\xee\x10\x8f\xbe\xd6\x4b"
+ "\xf3\xc8\xc2\xf9\x23\x0b\xf8\xa3\xe1\xeb\x5b\xe7\x91\xc5\xc9\x1f"
+ "\xfd\x6b\xa6\x6f\x3c\xfa\x57\xb0\xef\x3c\xfa\xe7\x05\x1f\x78\xe4"
+ "\xe2\x8f\xfe\x75\x42\x3e\x8f\xfe\x59\x20\x9f\x47\xff\x4c\xf6\x8d"
+ "\x47\xff\x9a\x46\x78\xf4\xcf\x08\xc2\xa3\x7f\xc5\xf2\x3c\x62\xbf"
+ "\x8b\xbc\x43\x3c\x3a\x5b\xed\x81\x47\x9c\x3f\xb2\x80\x3f\x9a\xf1"
+ "\x9c\x17\x3c\x72\xf2\x47\xe7\xf6\xf8\xc6\xa3\x73\xd3\x7c\xe7\xd1"
+ "\xb9\xfe\xca\x79\xd4\xe8\xe2\x8f\xbe\x09\x96\xcf\xa3\x6a\xa3\x7c"
+ "\x1e\x55\xef\xf7\x8d\x47\xe7\x76\x12\x1e\x55\xa7\x10\x1e\x9d\xdb"
+ "\xca\xf3\x88\xfd\xd6\xf4\x0e\xf1\xa8\x5a\x23\xc5\x23\xbc\x16\xc1"
+ "\x7b\x64\x5d\x08\xd3\xc6\x15\x68\x44\x1e\xfe\xdb\x84\x22\xcd\xeb"
+ "\xbf\x89\x3a\x92\x4a\xd6\x03\x30\x50\xdf\xb0\xe3\xbd\x62\xf7\xdf"
+ "\xb7\x07\x70\x51\x37\x68\x63\x2e\x90\x35\x1a\xf0\xba\x20\xf5\xe9"
+ "\x49\x68\x30\xbb\x2e\xc3\xb7\x19\x78\x1d\xab\x96\xb5\x03\xd4\x12"
+ "\x6b\x07\x4c\x97\x5e\x3b\xa0\x69\x8b\xe3\xbb\xdb\x02\xa7\xef\x6e"
+ "\xbf\x8d\xf6\xfc\xdd\xed\xb7\xc3\xb6\x4f\x97\xcb\x87\x6f\x11\xae"
+ "\x63\x7d\xb7\x86\x58\xf3\xfa\x6f\xc7\x42\x9d\x7b\x91\xba\x7f\x5b"
+ "\x8c\xbc\xfa\x1e\xb7\xc0\x89\x27\xdf\x18\xa7\xc4\xa3\x0c\x66\xfd"
+ "\xfb\x63\x99\xe0\x06\x2d\x93\xdd\x90\x21\xb3\x2c\x99\xad\xd8\xdb"
+ "\x28\x6e\xef\xf3\x46\xce\xde\xe4\x3b\x67\xb5\xc4\xba\x05\xd3\xa5"
+ "\xd7\x2d\x10\xb7\xf7\xf9\x56\xbe\x73\x3e\xbf\x5b\xbe\xbd\xcf\x6b"
+ "\x39\x7b\x57\x99\xd7\x9f\xdf\xcf\xdb\xfb\x42\xa4\x7c\x7b\x9f\x4f"
+ "\x20\xf6\xfe\x60\x04\xd8\xdb\xc8\x64\x9b\x65\xae\x57\x76\xde\xea"
+ "\xd9\xde\x66\x09\x7e\xff\x3b\x81\xd8\x9b\x5b\x33\x41\x2d\xb1\x66"
+ "\xc2\x74\xe9\x35\x13\xc4\xed\xfd\xef\x41\x9e\xed\xfd\xef\xee\xf2"
+ "\xed\x7d\xc1\x40\xec\x6d\x06\x7e\xff\x3b\x8c\xb7\xf7\xbf\xf3\xe5"
+ "\xdb\xfb\x42\x15\xb1\x77\x6e\x04\x13\x6c\x06\x7e\x9b\x65\xf2\xfb"
+ "\xdf\xc9\xad\xd8\x5b\x82\xdf\xdf\x55\x71\xf6\xe6\xf8\x2d\xb1\x5e"
+ "\xc3\x74\xe9\xf5\x1a\xc4\xed\xfd\xdd\x76\xcf\xf6\xfe\x6e\xad\x7c"
+ "\x7b\x7f\x17\xcb\xd9\x1b\xf8\xfd\x5d\x0e\x6f\x6f\x83\x5a\xbe\xbd"
+ "\xbf\x1b\x43\xec\xbd\x5d\x03\xf6\x06\x7e\x5b\x64\xf2\xfb\xbb\xf3"
+ "\x9e\xed\x6d\x91\xe0\xf7\xf7\x63\x88\xbd\xb9\xb5\x22\xd4\x12\x6b"
+ "\x45\x4c\x97\x5e\x2b\x42\xdc\xde\xdf\x77\xf5\x6c\x6f\xc3\x2d\xf9"
+ "\xf6\x36\x14\x13\x7b\x5b\x80\xdf\xdf\xab\x78\x7b\x7f\x9f\x21\xdf"
+ "\xde\x86\x42\x62\xef\x1d\x21\x4c\xb0\x05\xf8\x6d\x91\xc9\xef\xef"
+ "\x27\xb4\x62\x6f\x09\x7e\x5f\x2c\xe4\xec\xcd\xf1\x5b\x62\x9d\x8a"
+ "\xe9\xd2\xeb\x54\x88\xdb\xfb\xe2\x4a\xcf\xf6\xbe\x38\x4b\xbe\xbd"
+ "\x2f\x46\x72\xf6\x06\x7e\x5f\x4c\xe1\xed\x7d\xd1\x28\xdf\xde\x17"
+ "\x35\xc4\xde\x79\xfe\x60\x6f\xe0\x77\xa3\x4c\x7e\x5f\x3c\x28\x65"
+ "\xef\x20\xb0\xf7\xb1\x54\xbc\xd6\x68\x83\xce\xae\x07\x9d\x62\x13"
+ "\xda\xbd\x52\x37\x02\x3d\xda\x80\x6d\x5f\x93\x0b\x7d\x87\xae\xed"
+ "\xd6\xcb\xa8\x59\xeb\xfb\xb7\xc3\x35\x93\xa4\xbf\x1d\xae\x19\x29"
+ "\xff\xdb\xe1\x1a\x15\xaf\x81\x6a\xa2\x78\x4c\x6b\x58\xff\x21\xef"
+ "\x9b\xe2\xff\x98\xc4\xd7\xd1\xf8\xcf\x2e\xfc\x4d\x31\x60\x6d\xb5"
+ "\x67\x2b\xd1\x46\x35\x05\x5e\x60\x6d\x01\x1c\x8c\xd2\x58\x5f\x5e"
+ "\x07\x58\x5b\xda\x6e\xdd\x8e\xcb\x0b\x7d\xc7\xfa\xf2\x68\x69\xac"
+ "\x2f\xf7\x97\x8f\xf5\x25\x23\xaf\xbf\x2e\x0f\xe5\xb1\xbe\xac\xe0"
+ "\xfb\xf1\x4b\x06\xf1\xf5\x3c\x2e\xe9\x09\xd6\x3b\x13\x00\x6b\x05"
+ "\xba\xec\x72\x4e\xeb\x58\x9b\xa1\x5d\x9b\x3d\xb4\xeb\xda\x14\xe8"
+ "\x33\x75\x6d\xb7\x7e\x48\xed\xcb\xbe\x63\x5d\x3b\x50\x1a\xeb\xda"
+ "\x60\xf9\x58\xff\x70\x9e\xd7\x7e\xb5\x1a\x1e\xeb\xda\xfd\xf2\xb1"
+ "\xfe\xa1\x4c\x7c\x5d\x91\x1f\x52\x09\xd6\x1f\x96\xd8\xb3\x95\x68"
+ "\xc2\xda\x0c\x2f\xb0\x86\x76\x6d\xf6\xd0\xae\xaf\x26\x00\xd6\x96"
+ "\xb6\x5b\xc7\xe4\xea\x78\xdf\xb1\xbe\xda\x5d\x1a\xeb\x2b\x36\xf9"
+ "\x58\x5f\x29\xe5\x75\xe7\xd5\x00\x1e\xeb\xab\xf9\xf2\xb1\xbe\x52"
+ "\x24\xbe\xbe\xc9\x95\x24\x82\xf5\xae\x70\xc0\x5a\x81\x1e\xbd\x2a"
+ "\xa9\xff\x79\xac\x2d\xd0\xae\x2d\x1e\xda\x75\xdd\x04\xd0\x0a\xba"
+ "\xb6\x5b\x4f\xa5\x6e\x98\xef\x58\xd7\xf9\x49\x63\xfd\xe3\x15\xf9"
+ "\x58\xff\xb8\x9f\xd7\xbc\x3f\x5a\x78\xac\xeb\x32\xe5\x63\xfd\xe3"
+ "\x2e\xf1\x75\x56\x7e\x9c\x4c\xb0\xde\x9d\x69\xcf\x56\xa2\x85\xeb"
+ "\xe2\xbc\xc0\x1a\xda\xb5\xc5\x43\xbb\xbe\x0e\x71\xbd\xc5\xd2\x76"
+ "\xeb\xba\x5c\xef\xeb\x3b\xd6\xd7\xae\x49\x63\x7d\xed\xac\x7c\xac"
+ "\xaf\xe5\xf3\x7a\xfb\x5a\x0d\x8f\xf5\x75\x9d\x7c\xac\xaf\xe9\xc5"
+ "\xd7\x7b\xb9\x36\x86\x60\xfd\x67\x23\x60\xad\x40\x87\x5f\x1f\xab"
+ "\x44\x87\x2f\xde\x8e\xfc\x85\x78\x1b\xc3\xdb\x56\x8b\x1b\x83\x7d"
+ "\xc7\xfb\xa7\x0b\xd2\x78\xff\x74\x4c\x3e\xde\x3f\xe9\x79\x2d\xfe"
+ "\xd3\x19\x1e\x6f\x63\x92\x7c\xbc\x7f\xca\x10\xd7\xe2\x3f\x45\xfa"
+ "\xa6\xc5\x8d\x43\x95\x68\x71\x77\xbc\x6f\x86\xb6\xad\x1e\xbf\xe9"
+ "\xe7\x3b\xde\x37\xca\xa5\xf1\xbe\xf1\x99\x7c\xbc\x6f\x64\xf0\x7a"
+ "\xfc\x46\x09\x8f\xf7\xcd\x38\xf9\x78\xdf\xd0\x8a\xeb\xf1\x1b\x1a"
+ "\xdf\xf4\xf8\xcd\x30\x25\x7a\xdc\x1d\x6f\x93\x7f\xdb\x6a\xf2\xfa"
+ "\x1b\xbe\xe3\x5d\x7f\x48\x1a\xef\xfa\xdd\xf2\xf1\xae\xd7\xf2\x9a"
+ "\xbc\xde\x69\xfc\xdb\x14\x25\x1f\xef\xfa\x04\x71\x4d\x5e\xaf\xf6"
+ "\x4d\x93\x9b\x42\x94\x68\x72\x77\xbc\x6f\x59\xda\x56\x97\xdf\xfa"
+ "\xde\x77\xbc\x6f\xed\x93\xc6\xfb\xd6\x66\xf9\x78\xdf\x4a\xe0\x75"
+ "\xf9\xad\x5d\x3c\xde\x0d\x0a\xd6\xcf\xbc\x15\x2b\xae\xcb\x6f\x21"
+ "\xdf\x74\x79\x83\x4a\x89\x2e\x77\xc7\xdb\x5c\xdb\xb6\xda\xdc\x7c"
+ "\xca\x77\xbc\xcd\xdb\xa5\xf1\x36\xaf\x95\x8f\xb7\x39\x96\xd7\xe6"
+ "\x66\xa7\xf1\x7f\x4b\xb8\x7c\xbc\xcd\x63\xc4\xb5\x79\x83\xd1\x37"
+ "\x6d\x6e\x36\x29\xd1\xe6\xee\x78\x37\x56\xb7\xad\x3e\x6f\x3c\xe2"
+ "\x3b\xde\x8d\x1b\xa4\xf1\x6e\x5c\x22\x1f\xef\xc6\x31\xbc\x3e\x6f"
+ "\x5c\xc3\xe3\xdd\x14\x2a\x1f\xef\xc6\x48\x71\x7d\x6e\x31\xf8\xa6"
+ "\xcf\x1b\x6b\x7c\x1f\x27\xb7\xee\xc7\xda\x5c\xee\xfa\x8f\x95\x29"
+ "\x8e\x6f\xee\x9a\x9c\xd6\x7f\xb4\xb2\xfb\x65\x8b\xaf\x2d\x63\xf5"
+ "\x6b\xdf\xeb\x3f\x36\xb7\xb2\xfe\x63\xb3\xcc\xf5\x1f\x9b\xaf\xc8"
+ "\x9f\x8f\xdf\xbc\x9f\x8f\x11\x9a\x9d\xe2\x7f\x2b\xdb\xae\xdb\xf7"
+ "\xba\x90\xcd\x2e\xeb\x42\x36\xb1\xeb\x42\x32\xeb\x0b\x26\x2b\x8b"
+ "\x45\xac\xc5\xbe\xbf\x17\x60\xf4\x38\x0e\x91\xbb\x0e\x25\xcf\x6d"
+ "\xdb\x06\x9e\xdb\xcc\x2a\x69\x6e\xdb\x2f\xb4\xef\x75\x28\xed\x33"
+ "\x3d\x73\xdb\x3e\x46\xde\x9a\x23\x76\x05\xeb\xde\xd8\xf5\x7c\x3c"
+ "\x64\x77\x8a\x7f\x99\xaa\x36\xe4\xb6\xc2\xf5\x94\xec\x29\x42\x6e"
+ "\xdb\xd6\x10\x6e\x7f\x54\xa0\x2c\xee\x62\x72\x7d\x7e\x0f\x42\x53"
+ "\xc9\x38\xe6\x92\xbb\x1e\x66\x0b\xb7\x69\x34\xa7\x85\xdb\x34\xf5"
+ "\xb2\x24\xb7\x69\xbf\x03\xed\x7a\x3d\x4c\xda\x6f\xb4\x47\x6e\xd3"
+ "\x7e\xbd\x64\xad\x65\x42\xfb\xed\x94\xcd\x6d\xda\x2f\xb9\x25\xf6"
+ "\xcb\xf2\x2b\x6c\xe1\x36\x4d\xed\x6d\x3b\x6e\x2b\x5c\x27\x93\xf6"
+ "\x8b\x15\x70\x9b\x46\x09\x84\xdb\x7b\xad\x8a\x62\x4c\x9a\xd2\xf9"
+ "\xfc\xde\x87\xee\x10\x85\xe3\x4b\xb9\xeb\x72\xf2\xdc\xa6\xc7\xf1"
+ "\xdc\xee\xe0\xb6\x2e\x14\xcf\x6d\xd5\xe6\x76\xbd\x2e\x27\xad\xea"
+ "\xe9\x99\xdb\xb4\x45\xd6\x1a\x29\xb4\x6a\xa5\x7c\x6e\xab\xa2\x5a"
+ "\xe2\xdc\x2c\x55\x26\xcf\xed\x0e\xeb\xda\x90\xdb\xca\xfc\x36\xad"
+ "\x8a\x10\x72\x9b\x1e\x45\xb8\xfd\x49\xac\xa2\x78\x9a\xee\x30\xd9"
+ "\xe7\xf7\x5c\xb4\x7f\x18\x8e\xa5\xe5\xae\x0f\xca\x73\xbb\x63\x5f"
+ "\x9e\xdb\xfe\xdd\xa5\xb9\xdd\x69\x61\xbb\x5e\x1f\x94\xee\xe8\x79"
+ "\xfd\x1f\xba\xa3\xa7\xf5\x7f\xdc\xbf\x15\xa6\x3b\xc9\x5f\xf7\x82"
+ "\xee\x14\xd6\x12\xd3\x67\x75\x4a\xe2\xb9\xed\x9f\xd8\x76\xdc\x56"
+ "\xb8\x6e\x28\xdd\xc9\x5f\xc8\xed\x8e\xa1\x84\xdb\x9f\xee\x52\x34"
+ "\x76\x40\xfb\x47\xfa\xfc\x5e\x8f\xbe\x0f\xe1\x71\x03\xb9\xeb\x94"
+ "\xf2\xdc\xf6\xb7\xf1\xdc\xee\x72\x43\x9a\xdb\x5d\xa2\xdb\xf5\x3a"
+ "\xa5\x74\xe7\x53\x9e\xb9\xdd\xb9\x50\xd6\x9a\x2e\x74\x17\xf9\xdf"
+ "\xc1\xd3\x5d\x50\xcb\xf8\x45\x56\x17\x7e\xfe\x3b\x7d\xdf\x98\x36"
+ "\xe4\xb6\x42\xbf\xdd\xb9\x46\xc8\x6d\x7f\x13\xe1\xf6\x5f\x2d\x8a"
+ "\xc6\x49\xe8\xfb\x02\x7c\x1e\x27\xa1\x03\x03\xd8\x77\x98\x32\xd7"
+ "\x4b\xe5\xb9\x7d\xdf\xb9\x96\xb5\x89\xe8\xae\x36\x57\x6e\xb7\xac"
+ "\x4d\x44\x77\xed\xde\x6e\xd6\x4b\xa5\x03\xb6\x79\xe6\x71\x80\x4e"
+ "\xd6\x98\x08\x1d\x60\x93\xcf\xe3\x80\xd2\x96\x31\x91\xac\xae\xfc"
+ "\xfc\x17\x3a\xd0\xb1\x27\xf9\x9d\x5f\xb3\x88\xee\xba\xd3\xe3\x9a"
+ "\x45\x74\xd7\x8c\x3b\xb6\x8e\x2a\x1d\xb0\x57\xb0\x66\x11\x7d\x5f"
+ "\x95\x9d\x6d\x0b\x7f\x9b\xa0\x68\x5c\x85\x0e\x0c\xf5\x79\x5c\x85"
+ "\x0e\x26\xef\x77\x65\xae\xdb\xca\xb7\x85\xc0\x4b\x7c\x5b\x08\xee"
+ "\x2c\xdd\x16\xd4\x7d\xdb\xcd\xba\xad\x74\xd0\x6e\xcf\x6d\x21\x68"
+ "\x8d\xac\x31\x14\x5a\x2d\x7f\x1d\x18\x3a\xe8\x4c\xcb\x18\x4a\x96"
+ "\x3a\x94\x6f\x0b\xc1\x71\x6d\xd7\x16\xd4\xfb\x3c\xb7\x05\x75\xe6"
+ "\x1d\x5b\xcf\x95\x0e\x2a\x12\xb6\x85\xc0\xf3\xa4\x2d\x14\x55\x29"
+ "\x1a\x87\xa1\x83\x15\xbd\xff\x16\xb6\x85\x90\x30\xf6\xdd\xb7\xcc"
+ "\xf5\x63\xf9\xb6\x10\x7c\x83\x6f\x0b\x21\x6e\x7a\x9e\x6f\x0b\xf7"
+ "\x0f\x6a\x37\xeb\xc7\xd2\xdd\x3e\xf5\xdc\x16\xba\xe9\xe5\x8d\xb9"
+ "\xdc\xdf\x5d\x7e\x5b\xe8\xc6\x7f\xff\x94\x75\x3f\xff\xfd\x13\x1d"
+ "\x92\xd8\x76\x6d\xe1\xfe\x03\x9e\xdb\xc2\xfd\x5b\xef\xd8\xba\xb2"
+ "\x74\xb7\x12\x61\x5b\x08\xae\x25\x6d\xe1\xff\x26\x2b\x1b\xb7\x09"
+ "\xf1\x42\xff\xb7\x36\x6e\xf3\x8b\x48\x76\x5e\x80\xcc\x75\x6c\xf9"
+ "\xb6\x10\x62\xe3\xdb\xc2\x2f\xfa\x4a\xb7\x85\x1e\x23\xdb\xcd\x3a"
+ "\xb6\x74\xf7\x43\x9e\xdb\x42\xf7\x5c\x79\x63\x34\x3d\xfa\xca\x6f"
+ "\x0b\xdd\xeb\xf8\x31\x9a\x1e\x91\x7c\x5b\xf8\x85\xb6\xed\xda\x42"
+ "\x8f\x63\x9e\xdb\x42\x8f\x5d\x77\x6c\x7d\x5b\xba\x7b\x95\xb0\x2d"
+ "\x84\x98\x48\x5b\x38\x54\xad\x6c\x9c\xe7\x17\xa3\x7c\x1f\xe7\x79"
+ "\x60\x14\x3b\x67\x42\xe6\x7a\xba\x7c\x5b\x08\xed\xcc\xb7\x85\x07"
+ "\x06\x49\xb7\x85\x9e\xe3\xda\xcd\x7a\xba\x74\xe8\x09\xcf\x6d\x21"
+ "\xb4\x40\xde\x98\x4e\xcf\x41\xf2\xdb\x42\xa8\x85\x1f\xd3\xe9\x39"
+ "\x8a\x6f\x0b\x0f\xa4\xb6\x5d\x5b\xe8\x79\xca\x73\x5b\xe8\x59\x78"
+ "\xc7\xd6\xd9\xa5\x43\xcf\x0b\xdb\x42\x28\x22\x6d\xa1\x38\x5e\xd9"
+ "\xb8\xd0\x03\x51\xbe\x8f\x0b\xf5\x8e\x62\xe7\x93\xc8\x5c\xd7\x97"
+ "\x6f\x0b\x0f\x76\xe7\xdb\x42\x6f\xe9\x7d\x1e\xe8\x5e\x93\xda\xcd"
+ "\xba\xbe\xf4\x83\x9e\xf7\x3f\xa2\x1f\xf4\xb0\xff\x91\xd8\x18\x50"
+ "\xaf\x91\xf2\xdb\x42\x2f\x15\x3f\x06\xd4\x8b\xff\xfe\x8f\xee\xbd"
+ "\xae\xed\xda\x42\x2f\xcf\xfb\x3f\xd0\xbd\xbc\xd8\xff\x41\xe1\x7a"
+ "\xbf\xf4\x83\xb5\xc2\xb6\xf0\x60\x00\x69\x0b\x5f\x18\x94\x8d\x23"
+ "\xf5\x6e\x75\xfc\x1f\xc7\xf9\xcd\x6a\xf7\x71\xa4\xb2\x9a\x11\xe8"
+ "\x91\xe9\xb8\x2d\xf4\xb1\x5a\xb3\x1b\x74\x78\x7d\x61\x9b\x86\x5b"
+ "\x83\x72\x15\xb7\xc6\x8b\xc9\x4a\xd6\xa0\x34\xda\x5a\xd6\xa0\x24"
+ "\x6b\x7f\x20\x0a\x7f\x0b\x8c\xbf\x09\xb6\xaa\xc9\xfa\x93\x0c\x9e"
+ "\x13\x85\xe7\x48\x5d\x2c\x65\xd7\x57\x49\xb5\x42\xdd\x2f\xb7\xb2"
+ "\xfe\x64\x82\x01\x95\x25\xac\x40\xd6\xe0\xe4\x2a\xf6\x3b\x61\xba"
+ "\x4f\x26\xbb\xfe\xe4\xab\xa1\x0f\x64\xfd\x1b\x85\x04\xe1\xf5\x27"
+ "\x13\x18\x7b\xba\x81\x31\x56\x80\x17\x2d\x4b\x00\xfb\xce\xe4\xd6"
+ "\xa0\xa4\xfb\xdc\xc2\x75\xb7\xbe\x1a\xfe\xc0\x8e\x7f\x4b\xac\x2f"
+ "\x4c\xf7\x91\xbf\x0e\x2c\xdd\xa7\x80\x1f\xdf\xe9\x53\xc7\x73\xf4"
+ "\x97\x6c\x1f\x0c\xd7\xd7\x94\x41\x74\xcb\xac\x3f\x96\xd8\xac\x64"
+ "\xed\x0d\xfa\x97\xfe\x5e\x60\x86\xe7\x88\xb8\xf9\x2f\x1e\x33\x4d"
+ "\x21\x60\x66\xc1\xeb\x1c\x7b\x8f\x59\x87\x9b\x77\x06\x33\xcd\x18"
+ "\xef\x31\xd3\xec\x11\x62\x26\x36\x0e\xa1\xc9\x96\x8f\x99\x26\x9e"
+ "\x1f\x87\xd0\xe4\xf3\x98\x69\x8c\x04\x33\xcd\x08\x82\xd9\x71\x7d"
+ "\xb3\x92\xf5\x3b\x68\x4d\xab\xdf\x7f\xe3\xb8\xa9\x59\xed\x1e\x97"
+ "\xf3\x98\xf5\x4b\xb4\x66\x43\xec\x0e\x71\xb9\xf7\x98\xdd\x77\xf1"
+ "\xce\x60\xd6\xd7\xe4\x3d\x66\xfd\x5e\x76\xc1\x4c\x24\x5e\xee\x27"
+ "\x7f\xcf\x4e\xba\x9f\x9a\x8f\x97\xfb\x4d\xe6\x31\xeb\xb7\x8b\x60"
+ "\xd6\xb7\x8e\x60\xf6\xe5\xc1\x66\x25\x6b\x80\xd0\xfd\xb4\x5e\x60"
+ "\x86\xdf\xe9\x7b\x68\x67\x61\xa1\x80\x99\x05\xaf\xfb\xec\x3d\x66"
+ "\xc1\xa7\xef\x0c\x66\x0f\x15\x78\x8f\x59\x58\xb0\x10\x33\xb1\xb8"
+ "\xee\xa1\x46\xf9\x98\x3d\x54\xc2\xc7\x75\x61\xfe\x3c\x66\x61\x71"
+ "\x04\xb3\x87\xf2\x09\x66\xa5\xb5\xcd\x4a\xd6\x11\xa1\xc3\x5a\x1d"
+ "\xff\xc2\x3a\xb4\x59\xed\x1e\xe7\xf0\x98\xf5\x2f\xb3\x66\x43\x2c"
+ "\x04\x71\x8e\xf7\x98\x0d\x5f\x7f\x67\x30\xeb\x1f\xef\x3d\x66\xfd"
+ "\x8f\xb9\x60\x26\x12\x7f\xf4\xdf\x27\x1f\xb3\xfe\x3a\x3e\xfe\xe8"
+ "\x7f\x90\xc7\xec\x57\x01\x04\xb3\xfe\x93\x09\x66\x27\x43\x9a\x95"
+ "\xac\x45\x42\xf7\xaf\xf6\x02\x33\xfc\x0e\xd6\x43\x3b\x1b\x90\x01"
+ "\x98\x59\xf0\x3a\xd8\xde\x63\x36\xe3\xb9\x3b\x83\xd9\x00\xb5\xf7"
+ "\x98\x0d\x58\x2e\xc4\x4c\x4c\x27\x0f\x90\xbf\x0e\x36\x3d\x20\x82"
+ "\xd7\xc9\x03\xb4\x3c\x66\x03\x8a\x09\x66\x03\xfc\x09\x66\x5f\x8d"
+ "\x69\x56\xb2\x9e\x09\x3d\x40\x72\xfd\x2f\x4f\xba\xd1\x31\x2f\x9f"
+ "\xc7\x6d\xe0\x88\xf6\xa3\x1d\xc3\x4b\xbd\xc7\x6d\xe0\x90\xd6\xb5"
+ "\xe3\xc0\x9e\xf2\x71\x0b\xaf\xe1\xb5\xe3\xc0\x70\x1e\xb7\x81\x3a"
+ "\x82\x5b\x78\xb1\x6f\xda\x71\x60\xab\xdf\xbf\x8a\x69\x47\x77\xdc"
+ "\x1e\x36\xb6\x1f\xfd\xf8\x70\x86\xf7\xb8\x3d\x7c\xa5\x75\xfd\xf8"
+ "\xf0\x29\xf9\xb8\x3d\x9c\xcb\xeb\xc7\x87\x0d\x3c\x6e\x8f\x44\x12"
+ "\xdc\x1e\xd6\xf9\xa6\x1f\x1f\x96\x5c\xff\xcd\x93\x7e\x74\xc7\x2d"
+ "\xa2\xa0\xfd\x68\xc8\x88\x11\xde\xe3\x16\xb1\xb3\x75\x0d\x19\xf1"
+ "\x8e\x7c\xdc\x22\x26\xf3\x1a\x32\x62\x2b\x8f\x5b\x44\x2d\xc1\x2d"
+ "\x22\xd2\x37\x0d\x19\xb1\x5f\x89\x86\x74\xc7\xed\xd1\x84\xf6\xa3"
+ "\x23\x07\x19\xbd\xc7\xed\xd1\x69\xad\xeb\xc8\x47\xe5\xef\x59\x4c"
+ "\x3f\x1a\xc0\xeb\xc8\x47\x63\x79\xdc\x1e\xcd\x27\xb8\x0d\xaa\xf5"
+ "\x4d\x47\x3e\xda\xea\xfa\x1f\x62\x3a\xd2\x1d\xb7\xc8\xd0\xf6\xa3"
+ "\x25\x07\xcb\xd0\xff\x91\xae\xfa\x5f\x44\x4b\x0e\x56\xa0\xff\x07"
+ "\x97\xf0\x5a\x32\xd2\x49\xff\x47\x72\xfa\x7f\x70\xbe\x6f\x5a\x32"
+ "\xd2\x1b\xfd\xef\xa6\x25\xdd\x71\x1b\x52\xd5\x7e\xf4\xe4\x90\x04"
+ "\xef\x71\x1b\x72\xa2\x75\x3d\x39\x44\xfe\x3e\x50\xf4\x90\x54\x5e"
+ "\x4f\x0e\x29\xe6\x71\x7b\x4c\x4d\x70\x1b\x12\xe7\x9b\x9e\x1c\x22"
+ "\xb9\xfe\xa3\x03\x37\x9b\xba\x41\xc7\x88\x8c\x43\x96\x27\x8d\x20"
+ "\x6b\x13\xd2\x43\xf3\x6d\xc1\x0d\x3a\xb9\xfb\xbb\x38\xd6\x9c\x3e"
+ "\x91\x84\xd0\x45\x7a\xe8\x48\x9f\xd6\x9d\xa6\x1f\xbf\xe2\xf3\xba"
+ "\xd3\xf4\xe3\x9f\xdd\xb6\xfd\x5d\xe8\xc7\xb7\xcb\x5e\x77\x9a\x7e"
+ "\x3c\x89\xd7\xa0\x8f\xef\xe5\xb1\x1e\xca\xce\x4f\x90\xb5\x1e\x35"
+ "\xfd\x78\x84\x4f\xeb\x51\xd3\x43\x87\x10\x7e\x3d\x56\xc7\xae\x47"
+ "\x4d\x0f\x0d\x6f\x93\x7d\x5f\xe8\xc7\xb6\xe2\xf5\xa8\x99\xf5\x65"
+ "\xc9\x8a\xd6\x47\xa6\x87\xee\xf5\x82\xcf\x16\x46\x64\x8c\x96\xe7"
+ "\xf3\x13\x5a\xe0\xb3\x45\xee\x3e\x33\x42\x3e\x3f\xd1\xd9\x37\x3e"
+ "\x0f\x3f\xe0\x3b\x9f\x87\xaf\xbd\x6d\xfb\xcc\xd0\xc3\xe7\xc9\xe7"
+ "\xf3\xf0\x11\xbc\x36\x1f\x9e\xca\xf3\xf9\x89\x42\xf9\x7c\x1e\x66"
+ "\xf5\x8d\xcf\x4f\xf8\x11\x3e\x0f\x3b\x48\xf8\x3c\xdc\xd2\x26\xfb"
+ "\xcf\xd0\xc3\x92\x08\x9f\x2b\xf6\x2b\x5a\x7f\x9a\x7e\x22\xb5\x75"
+ "\x3e\x9b\x75\x8c\xc8\xf8\x35\xcf\xe7\x27\xc7\xd8\x82\xcd\x3a\xb9"
+ "\xfb\xdd\x08\xf9\x3c\xf2\x9c\x6f\x7c\x1e\xf9\x8e\xef\x7c\x1e\x39"
+ "\xe5\xb6\xed\x77\x43\x8f\x1c\x2d\x9f\xcf\x23\xfd\xf9\x98\x65\xe4"
+ "\x04\x9e\xcf\x4f\x66\xc8\xe7\xf3\x88\x32\xdf\xf8\x3c\xf2\x14\xe1"
+ "\xf3\x88\x4c\xc2\xe7\x91\xa5\x6d\xb2\x0f\x0e\x3d\x62\x04\xe1\x73"
+ "\x95\x55\xd1\xfa\xde\xf4\x93\x92\xeb\x1f\x3b\xf1\xd9\xc2\x88\x8c"
+ "\xed\xf3\x7c\x1e\xad\x06\x3e\x5b\xe4\xee\xbb\x23\xe4\xf3\x28\xdf"
+ "\xf6\xb9\xa0\x47\xf9\xbe\xcf\x05\x3d\xca\x87\x7d\x2e\x5c\xf6\xdd"
+ "\xa1\x47\x75\x95\xcf\xe7\xa7\xaa\xf9\x58\x6e\x54\x2f\x9e\xcf\xa3"
+ "\x63\xe5\xf3\xf9\xa9\x5c\xdf\xf8\x3c\x8a\xec\x7f\x41\x3f\x15\x4f"
+ "\xf8\x3c\x6a\x6b\x9b\xec\xc7\x43\x3f\xe5\x4f\xf8\xfc\xf5\x58\x45"
+ "\xeb\xa7\xd3\xa3\x7b\xb5\xce\x67\x8b\x8e\x11\x79\xef\xc1\xf3\xf9"
+ "\x19\x83\x2d\xd8\xa2\x93\xbb\xff\x8f\x90\xcf\xcf\x2c\xf7\x8d\xcf"
+ "\xcf\x0c\xf4\x9d\xcf\x4f\xdf\xba\x6d\xfb\xff\xd0\x4f\x5f\x90\xcf"
+ "\xe7\xa7\x0b\xf8\x18\xf7\x69\xa7\xf7\xff\x63\x34\xf2\xf9\xfc\xb4"
+ "\x6f\xfb\x02\xd1\xcf\x2c\x24\x7c\x7e\x9a\xec\x0b\x44\x3f\x93\xd4"
+ "\x26\xfb\x02\xd1\xa3\xab\x09\x9f\xcf\x66\x2a\x5a\x9f\x9e\x7e\xa6"
+ "\xce\x0b\x3e\x5b\x18\x91\x77\x42\x3c\x9f\x9f\x2b\x04\x3e\x5b\xe4"
+ "\xee\x43\x24\xe4\xf3\x73\xe3\x7d\xe3\xf3\xb3\x8d\xbe\xf3\xf9\xd9"
+ "\x63\xb7\x6d\x1f\x22\xfa\xd9\x7d\xf2\xf9\xfc\xac\xe3\xfd\x1f\xf8"
+ "\xe7\x67\x9d\xde\xff\x3d\x27\x7f\x7f\x22\xfa\xd9\x51\xbe\xf1\xf9"
+ "\xb9\x67\x09\x9f\xc7\x58\x09\x9f\x9f\x1b\xd1\x26\xfb\x13\xd1\x63"
+ "\x0a\x08\x9f\xff\x75\x46\xd1\xfa\xff\xf4\x73\xad\xce\xff\x10\x1b"
+ "\xdf\x70\x8c\x4b\xf1\x9c\x1e\xb7\xc6\xf7\x31\x8e\x71\xbd\x7d\xe3"
+ "\xf4\xd8\x72\xdf\x39\x3d\x76\xdb\xed\x1b\xe3\x18\x2b\x7f\xaf\x3f"
+ "\x7a\xec\x04\x7e\x8c\x63\xac\x9e\xe7\xf4\xb8\x12\xf9\x9c\x1e\xab"
+ "\xf6\x8d\xd3\xe3\xba\x13\x4e\xff\xba\x8a\x70\x7a\x5c\x40\xdb\x8c"
+ "\x71\xfc\x3a\xd5\xb7\x31\x8e\x71\x7a\x25\x63\x1c\xee\x9c\x8e\x8a"
+ "\xf3\x7d\x9c\xe3\xf9\x1b\xbe\x71\xfa\xf9\x9d\xbe\x73\xfa\xf9\x79"
+ "\xb7\x6f\x9c\xe3\xf9\x29\xf2\x39\xfd\xbc\x86\x1f\xe7\x78\x3e\x91"
+ "\xe7\x74\xd4\x56\xf9\x9c\xfe\x4d\x8d\x6f\x9c\x7e\xfe\x0a\xe1\xf4"
+ "\x6f\x76\x11\x4e\x3f\x6f\x68\x9b\x71\x8e\xdf\xc4\xfa\x36\xce\x11"
+ "\x95\xa8\x64\x9c\xc3\x9d\xd3\xbf\x8d\xf0\x7d\xac\xe3\x85\x63\xbe"
+ "\x71\xfa\x85\x25\xbe\x73\xfa\x85\x67\x6f\xdf\x58\xc7\x0b\x03\xe5"
+ "\x73\x7a\xbc\x89\x1f\xeb\x78\x61\x04\xcf\xe9\xdf\x26\xcb\xe7\xf4"
+ "\xf8\x22\xdf\x38\xfd\xc2\x21\xc2\xe9\xf1\x3a\xc2\xe9\x17\xf6\xb7"
+ "\xcd\x58\xc7\xf8\x30\xdf\xc6\x3a\x7e\x3b\x42\xc9\x58\x87\x3b\xa7"
+ "\x27\x22\xdf\xc7\x3b\xa2\xb7\xf9\xc6\xe9\xe8\xf1\xbe\x73\x3a\xba"
+ "\xfb\xed\x1b\xef\x98\x60\x93\xcf\xe9\x09\xfc\xfe\x17\x59\xd1\x4e"
+ "\xdf\xff\x4f\x1c\x23\x9f\xd3\x13\x32\x7d\xe3\x74\x74\x36\xe1\xf4"
+ "\x84\x09\x84\xd3\xd1\xeb\xda\x66\xbc\xe3\xb7\x16\xdf\xc6\x3b\x26"
+ "\xb6\xba\xfe\x85\xd8\x78\x87\x3b\xa7\x63\xcf\xf8\x3e\xe6\x11\x3b"
+ "\xcf\x37\x4e\xc7\xf6\xf6\x9d\xd3\x31\x57\x6e\xdf\x98\x47\xcc\x29"
+ "\xf9\x9c\x8e\xc9\xe5\xc7\x3c\x62\x9c\xe6\x3f\x4d\x0a\x91\xcf\xe9"
+ "\x98\x04\xdf\x38\x1d\x3b\x8b\x70\x3a\x46\x43\x38\x1d\x1b\xdf\x36"
+ "\x63\x1e\x13\xcb\x7c\x1b\xf3\x88\x35\x28\x19\xf3\x70\xe7\xf4\xef"
+ "\x0a\x7c\x1f\xf7\xf8\xdd\xb3\xbe\x71\xfa\xc5\x1b\xbe\x73\xfa\xc5"
+ "\x43\xb7\x6f\xdc\xe3\xc5\xdd\xf2\x39\xfd\xa2\x96\x1f\xf7\x78\x91"
+ "\x5f\xff\x9e\xfe\x5d\xad\x7c\x4e\xbf\x38\xd4\x37\x4e\xff\x6e\x24"
+ "\xe1\xf4\x24\x13\xe1\xf4\xef\x22\xdb\x66\xdc\x63\x52\xbe\x6f\xe3"
+ "\x1e\xbf\x73\x9b\xff\xb6\x78\xd6\xfc\x44\xcd\x82\xd9\xb3\x17\xcf"
+ "\x4a\xd1\x2c\x4e\x9e\xf3\xfa\xac\xd1\xfd\x1d\xbf\x47\x47\xea\xfa"
+ "\xeb\xba\xa0\xc4\x79\x33\x5f\x5d\xfa\x18\x7f\x31\x79\xd6\x7c\xf8"
+ "\xd3\x05\x25\xcd\x5c\x9c\xa4\x49\x59\xae\x9d\xa5\xc1\xbf\xe6\xbd"
+ "\xae\x85\x24\x0b\x52\xf8\x33\xd1\x4b\x92\x53\xe6\x68\x93\x67\x69"
+ "\xc6\x46\x3f\x3b\x68\xf2\xb8\xdf\x4d\x7e\xe6\x99\x2e\x08\x39\xed"
+ "\x23\xad\x61\x72\x42\xab\x80\x0f\xaa\xcb\xf4\xab\x93\x2a\x42\x11"
+ "\xda\x00\x3c\xdb\xb8\x08\xa9\xd7\x2f\x42\xaa\x77\x6e\x22\xff\x0d"
+ "\x37\x51\x80\x7d\xd3\x41\x8b\x66\x2e\x1a\xc1\x04\x0f\x2a\xde\x78"
+ "\x13\x85\xd8\xb3\xe7\x8e\x61\xb2\x67\x23\x63\xf0\x44\x23\x4e\xcb"
+ "\x04\x4f\xd4\xe0\xf3\x60\x57\x15\x93\x9d\x5c\x78\x91\x7e\x35\xd2"
+ "\x18\x1c\x53\x95\x7e\x05\x51\x4c\xe0\x64\xc3\xc7\x76\x23\x75\x24"
+ "\x05\xe1\x7f\x7e\x88\x9e\x52\x0d\x47\x09\xa2\x5f\x4a\x81\x63\x0d"
+ "\x1c\x55\x70\x58\x10\x3d\x15\xc1\x91\x0c\x47\x21\x1c\x06\x38\xea"
+ "\x10\x1d\x07\xe7\xe2\x42\xe0\xe8\x05\x07\x9c\x8f\x83\xb4\x71\x70"
+ "\x2d\xce\x42\xf2\x99\x06\xd7\xa7\x65\xc0\x51\x00\x47\x31\xa2\xa7"
+ "\x43\x9e\xd3\x73\x10\x3d\x43\x03\x7f\xf7\xc2\x51\x04\x07\x3e\x7f"
+ "\x1e\xce\xe1\xb4\x2a\x72\x6d\x46\x19\xa2\xe3\xfd\xe1\x08\x87\x63"
+ "\x2c\x1c\x3a\x38\x32\xe1\xd8\x0a\x47\x3e\x1c\x50\xbe\x78\x9c\x06"
+ "\x9e\xf5\x32\x5c\x7b\x19\x9e\xf1\xf2\x2e\x38\xac\x88\x7e\x25\x01"
+ "\x8e\xfd\x08\xea\x48\x8e\x57\xac\xfc\xff\xd9\x23\x2a\x68\xd5\x2f"
+ "\x0d\xc5\x0f\x5b\xa1\x8d\xbd\x34\x8c\x59\x8d\x68\x26\x3b\xa6\x4a"
+ "\xfb\x30\xf2\xbb\x4a\xbf\xe4\x57\xb9\x06\x7f\x4b\x3b\x1b\x15\xaf"
+ "\x68\xc2\xd7\xd9\x77\xdf\xe6\xac\x97\x90\x01\x69\xf5\xb8\x2d\xc9"
+ "\xe3\xd2\x4b\x88\xbb\x7f\x8c\xc1\xaf\xdb\x64\x7c\x3f\x93\x75\xb3"
+ "\x94\x49\x8f\xfb\x00\x7f\x33\x7b\x19\x6c\x84\xbf\xa9\x65\x32\x6f"
+ "\x8e\x65\x02\xea\x0e\x62\x7f\x50\xbc\x02\x97\x6b\xca\x39\xd2\x76"
+ "\xe0\x3a\x94\xcd\x18\x7c\xd0\x02\x6d\x45\x85\x7f\x03\x96\x46\x26"
+ "\xff\x21\x1d\xf1\x11\x2f\xe5\xe3\x74\x4d\xdd\xbb\xc6\xe2\x6b\x8d"
+ "\x3b\x2f\x69\x99\xfc\x5a\x54\x3c\xbf\x09\xd5\xd0\x53\xce\x42\xdd"
+ "\x28\xf0\x57\x14\xd3\xef\x92\xd6\xbe\xa5\x6b\xec\x01\xc0\x19\xa7"
+ "\xfb\x47\x5a\x2d\xfe\x7b\x06\x5f\x67\x72\x02\x43\xf1\x98\x4d\x71"
+ "\xda\x87\xe0\x43\xa7\x9c\x6b\xea\xfe\x50\x82\xe6\xc5\x20\xe6\x22"
+ "\x29\x1b\xa4\x7b\x29\xd9\x51\x96\xa6\xe0\x43\x08\xe7\xcf\x68\xc2"
+ "\x34\x70\x4d\x65\xcf\x9e\x68\x84\x72\xf8\x5d\x87\xfb\x18\x28\x63"
+ "\xf1\x8b\xf8\xb9\x53\x67\x41\x59\xa9\xf4\x49\x90\xf7\x87\x61\x9a"
+ "\x4f\x56\x58\x28\x7c\xcd\xae\x3f\x68\x01\x3e\x07\x30\x59\xbf\x33"
+ "\xbd\xdf\x0d\xa9\xf2\x36\x21\xb4\x63\x13\xf2\x37\x67\x4d\x8d\x37"
+ "\xd0\xd5\xa3\x88\x9f\x9a\x52\x4d\x41\x1a\x03\x3d\x15\xb8\x1c\x53"
+ "\xc5\x3e\x2b\xc4\x3f\xdf\xc3\xb3\xf6\xb4\x3c\x6b\x8b\x7f\x3e\x7e"
+ "\x16\xb1\xd1\x41\x0b\xf9\x4b\xf2\xb0\xe7\x5f\xd6\x60\xfb\x61\xdb"
+ "\x39\xf2\xb0\x67\x3b\xf2\x78\xe9\x04\xbe\x1f\x9e\x99\xcb\x7c\x78"
+ "\x59\x63\xdf\x12\x94\x0f\x75\xd6\xe1\xeb\x41\xab\x90\x89\x81\xbf"
+ "\xf8\xf9\x04\x0b\xb0\x3d\x95\x81\x70\xfe\x0c\x77\x8e\x81\x73\x70"
+ "\x6f\x8d\x7d\xb5\x06\xe1\x7e\xa4\x8e\x8e\xdb\xcc\x6c\x4a\xae\x66"
+ "\x02\xea\xf5\x04\xe3\xb8\xd1\xcb\xab\x18\x3b\x1c\xb6\xc1\x55\xc8"
+ "\xaf\xf8\x45\x8c\x6f\x5c\xbc\x66\x62\x27\xb0\x71\xdc\xcb\x2d\xb6"
+ "\xed\x1b\x16\x0a\xf6\x51\xe7\x75\x83\xf6\xfc\x76\xc0\x28\x86\xd2"
+ "\x20\x8c\x0f\xb6\x15\xd8\x09\xc1\x79\x7f\xcc\x53\x73\x56\x5c\xa6"
+ "\x8b\xbd\xd4\x2f\x4c\x4a\x67\x06\xc7\xe2\xbc\x4d\x38\xef\x29\x46"
+ "\xe8\x5b\x1d\xf8\x42\xfa\x83\x06\xbf\x80\x14\x9c\x5e\xd3\x8f\xe5"
+ "\xdc\x39\x82\x2b\xe1\x16\xb6\x1f\xd3\x3d\xb4\x0a\xff\x9e\x32\x10"
+ "\xa9\x83\xaa\x10\xa5\x49\x0b\x2b\x22\x5c\x08\x0c\x75\xe4\xc3\xd6"
+ "\x71\x53\x53\x86\x6d\x35\xf4\x8b\x2d\xfc\x9b\x36\xc2\xb6\xa1\x7e"
+ "\x1d\xa4\xab\x6a\xdc\xdc\x29\x9f\xc9\xac\x5f\x87\xbf\x15\xbf\x48"
+ "\x4f\x63\xe7\x40\x31\xab\xfd\x11\x6b\xa3\x0d\xf5\x99\x69\xc9\x8c"
+ "\x31\xed\x06\x3c\xab\x47\x60\xd5\x3f\x96\x1a\x01\xaf\x4e\xf9\x98"
+ "\x0f\x07\x1a\x2c\x14\x5e\xbf\x0f\xfc\x50\x8f\x1d\x50\xd7\xed\xc0"
+ "\x09\xa8\x2b\xc2\xf9\x9a\xb3\xa6\xe9\xf8\xba\x4e\xeb\x85\xb9\x01"
+ "\xcf\xc8\x27\xcf\x86\x7c\x57\xc3\x33\x36\xd4\xe7\x43\xba\x7c\x83"
+ "\xdf\xdf\xcb\x1c\x36\x61\x9f\xcd\xa7\xe3\xda\xd2\xb4\x1c\x63\xd7"
+ "\xfa\xfc\xe6\xa5\x4c\xd5\xc6\x6f\x20\xff\xd5\x88\x69\x6a\x60\xca"
+ "\x52\x63\x19\x0b\x34\x6f\x54\x96\x70\x1e\xa5\xcf\x44\xbd\xee\x5b"
+ "\xc5\x80\x56\x41\x41\xf7\x9d\x0f\x62\xca\x63\xcf\xb3\xfb\x18\xa4"
+ "\x56\x31\xb5\x15\xda\x83\x28\xf5\x12\x0a\x58\x39\x07\x85\xa4\xc7"
+ "\x42\x5d\xca\x18\x4b\xa5\xee\x3c\xaa\x30\xc1\xa1\x2d\x87\x74\x67"
+ "\xe1\x38\x88\xd2\x97\x23\xd5\x44\xe8\xa3\xd2\x6e\xa1\x80\x0a\xed"
+ "\x2d\x38\x77\x0d\xa5\x26\x30\xd6\xf2\x32\x9c\xee\x18\x8a\xb1\x1a"
+ "\x83\x56\x5e\x03\x4c\x5f\xc2\xdf\x5f\x5f\x40\x79\x50\x96\xa6\xe0"
+ "\xb9\x91\x8d\xd9\xc9\x45\xf5\x4b\x19\xab\x39\x6b\x7a\xb2\x01\x8d"
+ "\x8a\x14\xd4\x05\x97\xb9\x09\xe1\x35\x04\xfc\x70\x1a\xfb\xe6\x8e"
+ "\xfa\x57\xad\xd8\xbf\x4c\x4f\x00\x8d\x80\x1c\xd7\xf1\x35\x63\xf7"
+ "\x8e\x7a\x38\x9f\x19\x63\x65\xcc\xd8\x3e\xb8\xde\x60\xa3\x5c\xae"
+ "\xfe\xb9\xb4\x16\xa9\xe0\x19\x55\x06\xbf\x7f\x14\xe0\x67\x40\x9e"
+ "\x1d\x81\xef\x89\x98\x1b\xdc\xb5\x3a\x83\x5f\x91\x91\xe7\xcb\xd4"
+ "\x02\xe0\x48\x47\x47\x59\xcc\x59\x33\x02\x0c\x7e\x07\x2c\x4e\x7c"
+ "\xc2\xfc\x68\xb9\xce\xf5\x57\xd8\x37\x25\xdb\xb1\x6f\x0d\xa8\xd3"
+ "\xdb\xba\x07\x6a\x98\xe0\x43\x7a\xa6\x3e\x34\x80\xa1\x18\xcb\x44"
+ "\x2b\x63\xb1\x67\x37\x56\x41\x9f\x14\x50\x69\x35\x21\x92\x7e\xc6"
+ "\xa7\x4c\xf6\xa1\xad\x64\xbe\xe7\x8c\x6d\x38\x4f\xd0\x21\x63\xb2"
+ "\x6e\x22\x35\xb0\x94\xf5\x7f\xf6\xec\xe3\xea\xac\x45\x28\x84\xd9"
+ "\x1c\xa8\xb6\x77\xef\x1c\xd9\xb8\xf3\x21\x2d\xf6\xb1\x98\xbf\x8c"
+ "\x1e\xee\xe5\xf2\x81\xe7\x76\x30\xd0\x33\xb4\x76\xb8\x9f\xd1\x37"
+ "\x72\xe5\x21\xfe\x90\xf8\xd1\x19\x5a\xa6\x2f\x5c\xcb\xac\xcb\x81"
+ "\x6b\x1d\x2e\xd2\x33\xac\x70\x1e\xc1\xef\xb2\xe2\xb4\x9b\x90\x36"
+ "\xde\x8f\x70\xa8\x4e\x2f\xf8\x4d\x61\x7b\x4e\x35\xe1\xf6\x4f\x34"
+ "\x63\x7c\x5f\xbe\x4d\xb3\xf5\xa5\x88\x9f\x6c\x34\x98\xb3\xe2\x87"
+ "\x1a\xfc\xba\xef\xe7\x6c\xec\x67\x62\x7d\x12\xf8\x95\x9d\x0f\xe9"
+ "\x8e\xc6\x22\x74\xb4\x0c\x21\x48\x13\x67\xf0\xfb\x45\x29\x6f\xcb"
+ "\xf8\x85\x38\x2d\x5b\x4e\x68\x9b\xf6\xd5\x5c\x1f\x00\xf7\x40\xbb"
+ "\x29\xc6\x3e\x87\xf8\xb6\xf8\x64\xec\x77\xa0\xdd\x85\x73\x7e\x1f"
+ "\xce\xc5\xa9\x98\x6e\xbf\xc2\xe5\xca\xb8\xc8\x95\xc5\xb9\x6c\x0e"
+ "\x3f\xc3\x64\x0f\xd0\xb1\x69\x03\xeb\x0b\xe0\xf9\xd5\x06\xbf\xd0"
+ "\x7c\x67\xae\x91\x7a\xbd\x1c\x3d\xb8\x0c\xfe\x0f\xba\xc3\x91\x17"
+ "\xb4\x55\x7f\x68\xa3\x8f\x62\x4e\xe1\xf6\xb9\x6d\x13\xd6\x12\x03"
+ "\x32\x1a\xb3\x07\x40\x3b\x7d\x59\xe3\x68\xa7\xf6\xa5\x4c\x35\xe0"
+ "\x8a\xec\x0d\xcc\x99\x8d\x80\x65\x8c\x8d\x66\x5e\xb5\x45\x20\xd0"
+ "\x98\xd6\x3c\x38\x9f\xb7\x14\x6b\xb4\xe9\xf1\xd0\x96\xfd\xc5\xd3"
+ "\xaa\x10\x4e\xc7\xa6\xe7\xd2\x36\x05\x0f\xc8\x60\xcb\x4c\xd1\x76"
+ "\x28\x9f\x9f\xa3\x4c\x4d\x5d\xeb\x73\xe0\xd9\xb9\x06\xbf\x4e\x1a"
+ "\x41\x7b\xc9\xfa\xb1\x90\x61\xe2\x30\xaf\x68\xa8\xcb\x11\xf8\xdb"
+ "\x89\xe3\xf1\x7d\x47\x41\x83\x8e\x8d\x86\xb6\x02\x78\xbf\xdf\x83"
+ "\x31\xc2\xfd\xe7\x0d\x28\x41\x85\xef\x5f\x0f\xbf\xf1\x79\x9c\x06"
+ "\xce\x9b\xe0\xbc\x89\xe4\x1b\xe7\x8f\xf1\x13\xe6\xfb\x4a\x4f\x92"
+ "\x2f\x5b\x96\xfb\x70\x9e\xf8\x3e\x9c\xe7\xf6\x2d\x4c\x1d\xce\xc7"
+ "\x9c\xf5\xca\x08\x47\xde\x1b\xe0\x9c\x23\xff\xb1\xf3\x1c\xcf\x78"
+ "\x05\xc4\x52\x42\xaa\x73\xd9\xb7\x6d\x61\x4c\xa4\x5c\xaf\xa4\x18"
+ "\x50\xd2\x79\x7c\xed\x1d\x38\x87\xef\x25\x1c\x79\x25\x1b\xf3\xc7"
+ "\x40\xea\x43\x13\x1e\xbd\x92\x6f\x40\xbf\x4f\x74\xf6\xf1\x80\x53"
+ "\x57\x82\x77\x4c\x15\x97\x5f\x89\x23\x3f\x3e\x2f\x92\x07\xa3\x0f"
+ "\x4f\xe2\xda\x08\x6e\xcb\x01\x38\x7f\x48\x0f\xf5\x7f\x6d\x2f\x29"
+ "\xdb\x54\x93\x89\x70\x1e\x6c\xcf\xde\x43\xf8\x90\x35\x79\x94\xa3"
+ "\x2f\x07\x2c\xf4\xe6\xac\x57\xc3\x5d\xfa\x26\x7f\xcc\x17\xce\x1f"
+ "\xf8\xe1\xb2\x38\xea\xc9\xf6\x27\x5b\x02\xc7\x40\x3e\x2a\x7b\xd6"
+ "\xe4\x89\xb8\x8f\x7b\xaf\x07\x53\x0b\x79\x24\x3b\xf2\x80\xfb\x55"
+ "\x60\xaf\xa7\xe1\x5c\x86\x01\xcd\x67\xeb\x97\x05\x69\x0c\xf4\xe4"
+ "\x0c\xa9\xb8\x33\xad\x2f\xa2\x2a\x73\x0d\x38\x7e\xc3\xed\x75\x54"
+ "\x65\x2f\x13\xaa\xcc\xb5\x23\xfb\x87\x97\xf3\xc7\xa4\x31\xc5\xa0"
+ "\xa3\x6d\x15\x96\x5a\x99\x31\xc1\xab\xec\xf8\x17\xd3\x04\x71\x46"
+ "\xea\x63\x08\xf7\xeb\xd7\xe9\x99\x83\x2a\x8d\x37\x59\xdf\x05\xff"
+ "\xef\x89\xaf\xbf\x07\x71\x09\x8e\x4d\x20\xfe\x4c\xd2\x53\x24\x3e"
+ "\xb1\x43\xda\x1d\xf8\x3c\x8e\x5d\x20\x6e\xca\x73\xba\xc6\x7c\x78"
+ "\x49\x43\x6c\x93\x70\x89\xed\xcb\x70\x79\xad\xcf\x17\xe3\x32\xdb"
+ "\xf3\x2f\x69\x70\x1d\xd2\x75\x8c\xbd\xd2\x6a\x2e\xae\x30\xd9\x90"
+ "\x66\x29\x8e\xab\x12\x8e\xc4\x6c\x47\x0c\xf8\x36\x99\xb1\x61\x02"
+ "\xfb\xfd\x23\xc4\x9e\xd7\x8d\x7d\x2f\x69\xd2\x6d\x88\xda\x98\xd6"
+ "\xc1\xff\xd7\xb9\x4c\x71\x7d\xbf\xcb\xd0\x87\x26\xd4\x1c\xd1\x21"
+ "\x24\x5f\xe3\x26\xd4\x38\xea\xbe\x83\xab\x3b\x9c\x63\xbf\xd9\x1b"
+ "\xbc\x35\x83\xad\xaf\x81\x9e\x29\x39\xd7\x87\x59\x1d\xc4\x1c\xcd"
+ "\xb5\xa2\xc5\xb9\x4c\xd3\xe2\xed\x88\xb2\x6d\x6a\x56\x7f\xb2\xa3"
+ "\x1a\xfb\xe9\x31\x0e\x7b\xb2\xb6\x83\x98\x5b\x9b\x86\xd4\x57\xe9"
+ "\x99\xc7\x62\x52\x33\xd8\x7d\x8a\x3e\x87\x74\xf2\xca\x3a\x93\x7d"
+ "\xff\x57\x01\xb1\x6c\x8c\x35\x9d\x21\x7d\xcd\xcc\x6b\x13\xb9\xfc"
+ "\xf0\x35\x07\x7e\x3b\xb8\x18\x53\xc1\x33\x24\xf7\x7f\xf2\x50\x57"
+ "\xb5\x78\x5d\x5f\xfb\x54\x79\x5d\x5f\x4b\x75\xaf\xeb\x6b\xe7\x6e"
+ "\x6f\x5d\x5f\x93\x1c\xff\xf1\x50\x57\x8d\x78\x5d\x5f\xdf\xae\xbc"
+ "\xae\xaf\x27\xb9\xd7\xf5\xf5\x63\xb7\xb7\xae\xaf\x97\x29\xa8\x6b"
+ "\xa4\x78\x5d\x13\xdf\x51\x5e\xd7\xc4\xc9\xee\x75\x4d\xfc\xf4\xf6"
+ "\xd6\x35\xb1\x48\xb2\xae\x54\x10\x83\xfd\x13\xf8\xa5\xa6\xb4\x46"
+ "\xd0\x68\x5b\xd4\x85\x2b\x77\x22\xaa\xcc\x64\x41\x15\xbd\xaa\xb1"
+ "\xfe\xa5\x1e\xd5\x82\xdf\x5b\x8d\x46\x31\x9b\x0e\xa9\x2b\x72\xeb"
+ "\xe0\xfc\x65\x54\xae\xb3\xa0\x31\x8b\xb0\xff\x9d\xb5\xb2\x32\x51"
+ "\xae\xff\x9d\x15\xd5\xe2\x7f\xad\x8f\x71\x3e\x77\xf6\x9e\x8a\xba"
+ "\x26\x84\xeb\x0f\xff\xdf\xdc\xe2\x7f\x57\x13\x7b\xbb\xfa\x5f\x6c"
+ "\x8f\x4a\x8b\x45\xe0\x7f\xc9\xb7\x4a\xb3\x67\xba\xfa\xde\xac\xab"
+ "\x08\x89\xfb\xde\xd9\xa3\xb1\xef\xdd\x01\xd7\xe5\x95\x7f\xb6\xbf"
+ "\xc3\xf7\xea\xe1\x99\xce\xbe\xf7\x68\x22\xee\x6b\x67\x27\x28\xf3"
+ "\xbd\xb3\x13\x1c\xf5\xde\xce\xd5\x1b\x6c\x55\x22\xf4\xbd\xb3\xb7"
+ "\x7a\xc3\x5b\x66\x53\x43\xe4\x27\x7d\x2c\x1d\xec\xf9\x3f\x24\xe0"
+ "\xfe\xcd\x0c\x36\xf9\xfb\x0e\x8b\xea\x32\xfd\x7b\x76\xad\xe2\x7a"
+ "\x73\xa2\x1f\x93\x7f\xd9\x3f\x26\x85\xf9\x8e\xe9\xfb\x43\x02\x1e"
+ "\x2f\xc4\xb1\x34\x5c\x8f\x66\x76\x5e\xf6\x97\x57\x6e\x92\x27\xf3"
+ "\x61\x4d\x7e\x1a\xb4\x97\x4f\x96\x5a\x28\xfb\x9b\x71\x41\x80\x83"
+ "\x9a\xc9\x6e\xd2\x32\x6f\x3f\x18\x5a\xbf\x39\x28\xe3\x58\xf8\x25"
+ "\x84\xd3\x32\xab\x54\xa3\x7c\x28\x7f\xb5\xe7\xf2\x27\x75\x55\x50"
+ "\xfe\x6a\x19\xe5\xaf\xf6\xaa\xfc\xdd\xa0\xfc\x4d\x23\x3a\x40\x5c"
+ "\x47\x7d\xde\x34\x42\x25\xaf\x3c\x49\x49\x5e\x61\xec\xdb\x33\xbc"
+ "\xf6\x7f\x4c\x8f\x4e\x9a\x4f\x76\x18\x29\xf0\x01\x6c\x1f\x8e\xdb"
+ "\x1e\xf1\x7f\xb5\xe0\xb3\xbe\x63\x88\x4f\x32\xca\xf4\x49\x73\x24"
+ "\xe7\xbf\xbb\x3d\xbf\x5b\xb3\xfe\x0e\x3c\x5f\xba\xfe\xae\x3e\xf1"
+ "\xa3\xda\x0c\x69\x9f\xd8\xa4\x77\xf7\x89\x73\xb3\xe5\xfb\xc4\xb9"
+ "\xf1\xee\x3e\xf1\x8d\x43\xbc\x4f\x7c\x63\x8f\x72\x9f\xf8\xc6\x12"
+ "\xef\x7d\xe2\x1b\x93\x94\xf9\xc4\x37\x7a\x79\xf6\x89\x6f\xa4\x28"
+ "\xf3\x89\x6f\xa4\xb8\xfb\xc4\xb9\xd5\x42\x9f\xf8\x86\xe4\xb7\x6e"
+ "\x4c\xe6\xb7\x3a\xe8\xa3\x03\xae\xd2\xc9\xa9\xd6\xd5\x10\x9b\xea"
+ "\x7f\x57\x1b\x63\x63\xcc\xcc\x86\x6f\x75\x76\x6a\x28\xf6\x2b\x63"
+ "\xcc\xe6\x24\x7f\xfb\xb2\xf0\x00\x26\xb0\xee\x69\xa6\x39\x14\x81"
+ "\x9d\xc2\xa0\xfc\x41\x8c\x39\x3c\x90\x59\x16\xde\x2d\xb7\x01\x85"
+ "\xc0\x11\x9a\xcb\xf5\xc7\xf0\xff\x48\x66\x59\x68\x97\xac\xa5\x28"
+ "\x22\xc8\x84\xfc\xa1\x0c\x71\x41\xab\xd4\x08\x7c\x50\x08\xfe\x3f"
+ "\xb3\x7a\x37\xca\x6b\x40\xaa\x20\x1d\x60\x13\x0c\xcf\xd3\x05\x31"
+ "\xcc\xe2\x70\x94\xb7\x08\x62\x64\x0a\x85\xee\xa0\x98\x42\xab\x39"
+ "\x9c\xb2\x85\x04\x46\x12\x7c\xe6\x45\x32\x3d\x02\xc7\x30\x39\x5d"
+ "\xad\xf6\x1e\x5d\x6b\x6c\xe9\x49\x34\xf3\x66\x1c\x8d\xcb\x6a\xcb"
+ "\xe9\x6a\x60\xb6\xc0\x91\x9e\x14\x88\x35\x34\xc4\xd0\x91\x8c\x39"
+ "\xb4\x0b\xc4\xd7\x11\x3b\x96\xa2\xb0\xed\x0d\x28\x9c\xa9\x0f\xa7"
+ "\x00\xff\x38\xbc\xdf\x27\xd8\x28\xce\x4e\xed\x46\x70\x4d\x85\x7d"
+ "\x22\x83\x9f\x6f\x85\xe7\x37\xc3\xf3\x9b\x30\xb7\x51\x68\x1e\x3c"
+ "\xdf\xb6\x2c\x5c\x66\x7b\x49\x66\xd7\x7f\x70\x94\xcb\x1e\x6e\xcc"
+ "\x60\x3e\x82\x03\x97\x0b\x6c\x98\x87\x6d\xf2\xb0\x71\x0d\x2e\xdb"
+ "\x86\x06\x14\x01\xe5\x0c\x83\x32\x84\xc3\x73\xf1\x5a\x29\x71\xaf"
+ "\x2c\x54\x63\x8e\x0a\xca\x66\xcb\xe6\xca\xf6\x13\x94\xed\x3a\x5f"
+ "\x36\xfc\x2c\x6c\x1f\xa9\xf7\x90\x31\x2b\xfb\xe0\xb6\xf9\x43\x90"
+ "\xae\x53\x14\x7e\x27\x59\xff\x66\x92\x4c\xae\xce\x2b\x95\xe2\xcb"
+ "\xc6\x8f\x51\x2f\x46\x1d\x5d\x3b\x71\xed\x77\x4c\x0c\xd4\x78\xed"
+ "\xc7\x28\xa2\x12\xda\x75\x85\xe5\x1a\x62\x82\xa3\x6b\x8f\x85\xd7"
+ "\xc9\x7c\xd6\x7c\xc9\xfd\xdf\xd7\xaf\x66\xaa\xec\x21\x81\x1a\x26"
+ "\x24\x48\xb7\x71\x35\xa3\x6b\xd6\x5c\x1a\xd3\xa4\xb9\xac\x7e\xd5"
+ "\xaa\x06\x5e\x33\x3a\xcd\x22\xa4\xb9\x4c\xa7\x2c\x3f\x79\x06\xe2"
+ "\xd2\xe9\xc8\xff\x22\x9d\x52\x98\x7e\x0e\xbf\xe3\x99\x5f\x22\x7c"
+ "\xc7\x33\xbf\x16\xd1\xda\x38\x44\x2f\x4c\x42\xf4\xa2\x4c\x04\xe9"
+ "\x84\xc7\xe2\x02\x92\x97\x76\x58\xcc\x9e\x3e\x28\xcd\xca\xfc\xc0"
+ "\xe8\x0f\x47\x65\x51\x8c\x25\x66\xa0\x9f\xa1\x78\x29\x7e\x37\xa2"
+ "\x1d\x04\x36\xfd\x11\xfa\xda\xa0\xcb\xf4\x82\x46\xc0\x14\x69\x17"
+ "\xa1\xfb\xaf\xd2\x0b\x2c\xb8\xdd\x04\x99\x3a\x45\xd9\xd2\xe3\x90"
+ "\x55\xf3\x90\xb6\x39\x27\x50\x6d\xd3\x37\x56\xd9\xd5\xbf\xab\x4d"
+ "\xbf\x82\x7a\xe1\xf7\x8f\xd0\x36\xe2\x5e\xb5\xf9\xe3\xf6\x18\x57"
+ "\xfc\xda\x49\x74\x39\x05\x51\xe9\xb7\x50\x57\xe0\x66\x4b\xbb\x8a"
+ "\xae\x0b\xb2\xac\xac\x63\xec\xb8\x6d\xe1\xb1\x52\xb8\x16\x98\x76"
+ "\x0b\xe2\x7b\x63\x2d\xca\x5d\x84\x42\x6c\x8b\x93\xba\x19\xeb\x93"
+ "\xee\xff\xc0\x8e\x42\x02\x4d\x48\x9d\x7b\x13\x38\xb5\x18\xf8\x74"
+ "\x13\xda\x99\x91\xb4\x33\xfc\xbd\xfb\x0e\xdc\xc6\xd6\xff\x71\x68"
+ "\xde\x4d\xd2\xc6\x58\x1e\xe1\x36\xb6\x00\x78\x34\x9f\x1d\xa3\x08"
+ "\x05\xfb\x15\x5a\xa1\x5d\x30\x59\xf3\x0a\x72\x57\x33\x68\xe5\x1c"
+ "\x44\xe5\x5d\xed\xc4\x8e\x5f\x74\x18\x48\x69\x4e\xc6\x5a\x10\x3f"
+ "\x96\x91\xf2\x69\x53\xdf\xcb\x6a\xcd\x8b\xcc\x4f\x17\x69\x6d\x18"
+ "\x9c\xf7\xd7\xbc\x34\x40\x0d\xf6\xfe\x94\x8c\x6d\xa4\x14\xe2\xb1"
+ "\x4b\x03\xd8\x02\xdb\x45\xf3\x22\x1a\x70\x91\x9e\xdf\x88\xed\xb8"
+ "\xac\x00\x2c\xff\x34\x53\x03\xf6\x43\x64\x7c\x76\x3e\xbb\x56\x2e"
+ "\x7e\xc7\xfd\x15\xfb\x4e\x8a\xdc\x63\x03\xbb\x59\xd5\x87\xb6\x02"
+ "\xde\x63\x8a\xe7\x36\xb1\x7e\x08\xdb\xf1\x72\x32\xa2\x5e\xad\x03"
+ "\x5b\xd9\xc0\x56\xe6\xf0\x00\xf0\x47\xb1\xd8\x1f\x31\x99\x75\x23"
+ "\x52\x0d\x8c\x3d\x26\x91\x66\xd2\x16\x22\xff\x4a\x9d\x0d\xbd\x02"
+ "\x8f\x58\x79\x0d\xec\x65\xaa\x46\xe0\x97\x02\xc1\x67\x75\xdb\xbe"
+ "\x14\x85\x60\x7b\x75\xad\x03\xad\xb2\x29\xc6\xf0\x71\x5a\x69\x07"
+ "\x1b\xf0\x17\xfb\xa7\xa0\x55\x7e\x9d\xa1\x9d\x05\x66\xe2\xf6\x08"
+ "\xed\x33\x68\x15\xeb\x2f\xe3\x72\xa1\x1d\x5a\x97\x85\xf7\x6b\x5e"
+ "\x16\xae\x81\xa3\x8f\xc3\x87\x39\xfc\x07\x93\x35\x5f\x8d\xfd\x57"
+ "\xa5\xce\x80\xac\x60\xdb\x40\xdc\xd7\x2d\x0b\xef\xc5\xda\xf8\xf7"
+ "\xe1\x68\xb0\x05\xf9\x41\x99\xd4\x50\x5e\x94\x37\x1b\xf9\x97\x27"
+ "\x5d\x44\x36\x68\x1b\x0e\xbb\x47\xcf\xd1\x20\xc8\x97\x3a\x16\x7e"
+ "\x16\x71\x36\xf3\x93\xe6\xdd\xa2\xb5\x3c\xef\x16\xad\xc5\xb6\x23"
+ "\xbc\x5b\xb4\xe6\xe7\xc8\xbb\xaf\xe2\x58\xde\xd1\xcd\x7d\x31\x9f"
+ "\xb4\xd0\xd7\xff\x05\x6c\xb4\x48\x8b\x39\x82\x39\x73\xe2\x23\xcc"
+ "\x99\xc5\x5b\xdb\x2b\x67\x1a\xcd\xe1\x1a\x38\xee\x08\x67\x20\x5f"
+ "\x96\x33\xd8\x56\x5f\xc5\x35\x21\x87\x8d\xd8\xb6\xaa\x8f\xae\xd5"
+ "\xa4\xa3\x67\xa0\xad\x16\x06\xad\xea\x83\xca\x59\x3b\xa5\x14\x6a"
+ "\x5e\x62\xec\x17\xe9\xc5\xa7\xd2\x4f\x21\x75\xd3\x6a\x86\xa9\xb4"
+ "\xee\x43\xf6\x90\xce\x91\xec\x7b\x3e\xfd\x71\xa8\xdf\x41\x0b\x83"
+ "\xdf\x9f\xaf\x06\xcc\xb4\x78\x8c\x7b\xa2\xd1\xb6\x39\xb4\xca\x9e"
+ "\x3d\x51\xc3\x04\x27\x17\xda\xa0\x5d\xdb\xb3\x07\x15\xdb\x83\x67"
+ "\x83\x46\x49\x09\x35\xa0\x92\x30\xf6\xbd\x6e\x4e\x20\x1e\xcb\xc3"
+ "\xfe\x97\xfd\xde\x03\xbf\x5f\x87\xeb\x23\x1c\xef\x8d\xb1\x4f\xe0"
+ "\xde\x29\x70\xef\x1c\x52\x30\x86\x5d\xf0\x3b\x07\xce\xa7\x0c\x74"
+ "\xbc\x73\x70\xfc\xc6\xd7\xe1\xbe\x08\x3c\x6e\xea\x74\x5f\x01\x97"
+ "\x8e\xbb\x6f\xfe\x3e\xec\xeb\xf9\xfb\xc8\x6f\xf0\x2b\x05\xcd\x14"
+ "\xf2\x17\xd5\x38\x21\xa1\x55\xd0\x7e\x20\x36\x5a\x3a\x10\xfe\x52"
+ "\x97\xe9\x25\xe3\xe1\x2f\x0d\x7f\xd9\x71\x4c\x79\xfd\x55\x4a\x0d"
+ "\x79\xef\x13\xb4\x8b\x2b\xf7\x25\xb6\x4d\x3e\x8c\xba\x5e\xe5\xfe"
+ "\x6f\xce\x5a\xd2\xf2\xfe\xbb\x25\x3d\x8f\xcf\x79\xfc\x6c\xc0\x48"
+ "\x45\xde\xc9\x93\xdf\x78\x6e\x0a\x97\x1f\xfb\xdb\xae\xa9\x45\xc5"
+ "\x69\x17\x51\x1d\xbd\x64\x6f\x25\xf4\xe1\xf6\x2d\x41\xbb\x36\x36"
+ "\x40\x1b\xd0\xb5\xf8\xe4\x4b\xd0\x16\xfd\x8b\x57\xb0\x69\x36\xb0"
+ "\x3a\x37\xa7\x63\x3e\xb3\xe9\xb0\x1a\xc7\x82\x66\x26\xe9\x69\xee"
+ "\xef\x68\xdc\x9e\xc8\xb8\xc9\x92\x46\x06\xb0\xc5\xfb\x95\xb7\xcc"
+ "\xd7\xc1\xfb\x88\x67\xa8\x7a\x1d\x49\x25\x7d\xa5\xa3\xbc\x78\xaf"
+ "\x71\x3c\x1f\x66\x40\x06\xca\x30\x8b\xec\x35\xce\xcf\x9b\x59\x52"
+ "\x63\xdf\xdc\x31\xdf\x9c\xb5\x74\x28\x60\x90\xe2\x5c\x67\x31\x2c"
+ "\x0c\xf4\xd2\x58\xa9\x6b\xf2\x70\x58\x2a\xb9\xfe\xcf\xb8\x70\x1b"
+ "\x23\x33\x2f\xe9\xf1\x1f\x4d\x4d\x7e\x4c\x81\xad\xd8\xde\x1c\x17"
+ "\x74\x2c\xf5\x9a\x4c\x6d\xb3\x4c\x2d\x95\xaf\x2d\xa7\x73\x54\x73"
+ "\xbf\x9a\x7c\xfc\xfe\xc1\xb6\x20\xee\xf9\x8a\x02\x2b\xda\x33\xbf"
+ "\x96\xc2\xfe\x70\xef\xd5\x42\x2a\x66\x20\xa7\xe1\x6a\x90\x1a\x8f"
+ "\x7b\x61\x2d\x97\x75\x1d\x85\x35\xa5\xc7\x05\x35\x35\xc7\xa1\x77"
+ "\xaf\xa3\x51\xf6\xdf\x87\x76\xc9\x9c\x8d\x54\x8d\xe0\x0b\x1b\x7f"
+ "\x48\x0a\xfa\xea\x7c\x2d\xfa\x1c\xee\xad\x30\x19\xd0\x0e\x48\xcb"
+ "\xfc\x10\x17\xf8\xdb\x04\xc6\x52\x96\xf0\x17\x14\x13\x6e\x2b\x4e"
+ "\xfb\x1e\x75\x05\x9f\xa8\xae\xd4\xed\x66\xdf\xd3\x76\x58\x4e\x69"
+ "\x2a\xad\x97\xd0\x86\xd9\xe0\x4b\xc1\x77\xa6\x4f\x81\x3e\x03\x38"
+ "\xf1\x81\x73\x9f\x31\xf7\x7d\xbe\xcf\xf8\x09\xfa\x8c\x2c\xe8\x33"
+ "\xd2\x43\x51\x85\xb6\x18\x81\x0f\xeb\x34\x51\x1b\x64\x49\xd3\x42"
+ "\xdf\xb1\x1c\xfa\x0e\xdd\x25\xc4\xf6\x1b\x75\xb5\x08\x7c\x7e\xe0"
+ "\xf6\xf9\x28\xa4\xe9\x27\xe8\x3b\x7e\x82\xbe\x23\x8d\xf4\x1d\xdb"
+ "\xae\x43\xdf\xb1\x00\x62\x83\xf9\xd0\x77\xd4\x89\xf4\x1d\xd7\xc5"
+ "\xe3\x02\x87\x1f\x6c\xfc\x29\x9c\xda\x06\xfd\xc6\x8a\xb3\x88\xda"
+ "\xf6\x52\x27\x99\x9c\xd1\xe5\x4b\xe2\xbc\x25\xe8\x2d\x3b\x13\x87"
+ "\xb0\xdd\x57\x58\xa0\x1f\x06\x5c\x2a\xc3\xad\x28\xe8\x4c\xa7\xa8"
+ "\x46\x38\xdf\xdc\xad\x21\xb6\xe0\x1b\x23\xc5\xe8\x9b\xb4\x8d\x80"
+ "\xdb\x8a\x25\x88\x6a\x06\x0c\xf7\xbe\xa8\xa7\x70\x9c\x68\xcf\x6e"
+ "\xc8\x21\x31\xe9\x8a\x03\x78\x4c\x24\xc8\x40\x70\xb3\x32\x71\x41"
+ "\xcc\xeb\x71\x5d\x37\xbc\x86\x54\xb6\xff\x84\x76\xb1\xbf\x1e\xea"
+ "\x9f\x76\x16\xa9\x8d\xaf\x27\x81\xbd\xae\xa1\xcf\x4f\xeb\xa9\xbc"
+ "\xe9\x48\x83\xd7\x26\x64\xde\x3e\x96\x92\xf7\x0a\x1a\x91\xf7\x6f"
+ "\x34\x74\xc7\x74\x14\xb1\xfd\x1b\xbc\x86\x39\x60\x58\xcb\x58\xca"
+ "\x93\xfe\x81\xdf\x9d\x8f\x61\x36\x35\xc6\x32\xdd\x3b\x47\xc1\xff"
+ "\x47\xe8\xa7\x43\xfc\x00\xd7\x63\xc2\x1b\x8b\x2b\x75\xe5\x28\xf3"
+ "\x22\x42\x69\x57\x38\x8c\x5b\xf0\xbd\x80\xac\x14\xf8\x0f\xac\x09"
+ "\xa2\x09\xbe\xf8\x7d\x16\x8e\x39\x5a\x30\x9e\xfd\x85\x50\x17\x70"
+ "\x18\x97\xd7\x55\x21\xe8\x03\x3b\xb5\xe8\x03\x16\xe3\x0b\xc8\xa1"
+ "\x0d\x00\x9b\x40\xd0\x02\x21\x8d\xf5\x2e\xfa\x60\x91\x42\x7d\xc0"
+ "\xc5\x37\xd6\xc5\xe1\x54\x2e\xc5\xa0\xf4\x72\x44\x6d\xb5\xcb\xc5"
+ "\x78\xc5\x1a\xd6\xdf\xe6\x5f\xf6\x27\x73\x5f\x96\x8f\xc6\x58\x18"
+ "\xe8\xe5\xa3\xa6\x84\xfb\x21\x85\xd8\x57\x79\xc6\xde\x1c\x42\xb0"
+ "\x4f\xfd\x4c\x21\xf6\x55\x80\x7d\x99\x32\xec\x6f\xc9\xc4\x9e\x5d"
+ "\xe3\xf1\x67\x8a\x7d\x6a\x86\x10\xfb\x37\x47\x12\xec\xdf\x1c\xa1"
+ "\x1c\x7b\x73\x2b\xed\xde\xcc\xb5\xfb\xb4\x4f\x95\x61\x6f\x86\x76"
+ "\x7f\x3c\x4c\x19\xf6\xd7\x64\x62\xcf\xae\x13\xf9\x33\xc5\x3e\x2d"
+ "\x55\x88\xfd\xca\x61\x04\xfb\x95\x43\x7d\xc0\xbe\x95\x76\x6f\xe1"
+ "\xda\x7d\xc6\x3e\x85\xd8\x43\xbb\x3f\x9e\xaa\x0c\xfb\x0b\x32\xb1"
+ "\x67\xd7\x9a\xfc\x99\x62\x9f\xa1\x13\x62\x9f\x3e\x84\x60\x9f\x1e"
+ "\xa9\x1c\x7b\x4b\x2b\xed\xde\xc2\xb5\xfb\xd5\x7b\x94\x61\x6f\xc1"
+ "\xed\xfe\x8c\x32\xec\x0f\xc9\xc4\x9e\x5d\xaf\xf2\x67\x8a\xfd\xea"
+ "\x14\x21\xf6\xab\x06\x11\xec\x57\x45\xf8\x80\x7d\x2b\xed\xbe\x91"
+ "\x6b\xf7\x6b\x76\x2b\xc4\x1e\xda\xfd\x97\x11\xca\xb0\x5f\x29\x13"
+ "\x7b\x76\xcd\xcb\x9f\x29\xf6\x6b\xb4\x42\xec\xdf\x1a\x48\xb0\x7f"
+ "\x2b\xdc\x1b\xec\xdf\x74\xc6\xfe\x7c\xa7\x28\x88\xad\x58\x9d\xbf"
+ "\x67\x3a\x87\xfd\x87\x80\x3d\xd4\x7f\xef\x4b\x5b\x5d\x34\xfe\xdb"
+ "\xdb\x58\xdc\x13\x00\x77\x1d\xe0\x0e\xb1\xa1\x03\x73\xc0\xa8\x2b"
+ "\xc6\x1d\x63\x9e\x76\x01\xa9\x3f\x87\x7b\x31\x3e\x18\x63\xc0\x51"
+ "\xc3\xe2\xdc\xf1\x58\x0a\xe3\xa7\x0a\xc1\x78\x62\xdd\x8f\x31\x6f"
+ "\x4d\xdb\x63\x4e\xb4\x8a\xf9\xa4\x3b\xa3\xef\x9b\x5c\xc7\xff\x6e"
+ "\x17\xe6\xa7\x20\x86\x4b\x93\x8b\xf9\xdb\x89\x42\xcc\xd7\xf6\xc5"
+ "\x38\x18\xe8\xb5\x1a\xe5\x98\x9b\xab\xa4\x31\x77\xf4\xf1\xeb\x36"
+ "\xf8\x86\xf9\xf1\x54\x1e\x73\x73\x95\x67\xcc\x2f\x28\xc0\xfc\xf6"
+ "\xf6\xef\xed\x0b\xf3\x75\x71\x42\xcc\xff\xd0\x9d\x60\xfe\x87\x10"
+ "\x29\xcc\xed\xe0\xaf\xf1\x98\x3a\xfe\x06\xcf\x66\x8e\x7b\xbe\x19"
+ "\x70\xc5\xdf\xe2\xe1\xb1\xde\x7d\xf3\x8b\xa8\x66\xc0\x7d\xe3\x52"
+ "\x14\x96\xb9\x14\x8d\x0a\xaa\x25\xfe\xbb\x09\xfc\xf7\x3b\x0d\x48"
+ "\x65\x7f\x23\xb4\x4b\xe6\x55\xa4\x6a\x02\x1b\x37\xbd\x91\x14\x54"
+ "\x96\x60\x44\x9f\x5f\x2f\xa2\xf0\xd8\x2d\x7e\x6f\xc7\xfc\x18\x17"
+ "\x38\x3e\x91\xb1\x94\xd5\x6c\x22\xe3\x2a\x97\x1c\xe3\x2a\xfb\x04"
+ "\xe3\x2a\xef\x5e\xe5\xc6\x55\xa6\x11\x8c\x72\x9d\xf1\x79\xe5\x43"
+ "\x89\x71\x95\xd2\x56\xc7\x55\xd8\xf1\x94\xeb\x28\xa4\x79\x41\x52"
+ "\xb7\x6d\xdc\xb8\xca\xfb\xf3\x7d\x1b\x57\x69\x5a\x10\x4e\xbd\x0f"
+ "\xf8\xbc\x39\x0d\xf0\xf9\x46\x2e\x3e\xef\x58\xbc\x1d\x57\x71\xf4"
+ "\xb1\x8e\x7e\x15\xb7\x39\xdc\xb7\x5a\xf4\x0d\x93\x5d\xc7\x52\x70"
+ "\x7b\xbb\x4e\x67\x76\xc6\x3e\x59\xd9\x78\xca\x97\x6b\xee\xb6\xf1"
+ "\x14\xdc\xe6\x1c\xfd\x6c\xfb\xe8\x63\xdf\x3d\x23\x6c\x7b\xeb\x37"
+ "\x90\x3e\x76\x7d\xa6\xb7\xfa\xca\x03\xe6\x67\x5c\xc7\x50\x08\xe6"
+ "\x1b\x6c\x78\xcc\x45\xd9\x38\xca\x97\xd5\x77\xdb\x38\x4a\xfb\xc3"
+ "\x7c\x43\xa9\x10\xf3\xcc\x55\x04\xf3\xcc\x0c\xdf\x31\x37\x4f\x76"
+ "\x1d\x3b\x21\x98\x6f\xbc\x81\xc7\x5a\x94\x8d\x9f\x94\x2a\xd4\xd2"
+ "\xff\xbd\xf1\x93\xf6\x87\xf9\xc6\x83\x42\xcc\xb3\x96\x10\xcc\xb3"
+ "\x52\x6e\x03\xe6\x67\x5c\xc7\x4c\x08\xe6\xd9\x97\xb0\xf6\x52\x36"
+ "\x6e\x52\x9a\x71\xb7\x8d\x9b\xb4\x3f\xcc\xb3\x0b\x85\x98\xeb\xe7"
+ "\x10\xcc\xf5\x49\xbe\x63\x6e\x99\xec\x3a\x56\x42\x30\x7f\xef\x1c"
+ "\x1e\x5b\x51\x36\x5e\x52\x7a\xd7\x8d\x97\xb4\x3f\xcc\xdf\xdb\x25"
+ "\xc4\x7c\xd3\xcb\x04\xf3\x4d\xf1\xb7\x01\xf3\x33\xae\x63\x24\x04"
+ "\xf3\xcd\xe5\x78\x4c\x45\xd9\x38\xc9\x89\xf0\xbb\x6d\x9c\xa4\xfd"
+ "\x61\xbe\x79\xab\x10\xf3\x9c\x49\x04\xf3\x9c\x58\x6f\x63\x66\x47"
+ "\xac\xec\x88\x8f\xd9\x58\x59\x0d\x9a\xdd\x65\x6c\x84\xe0\xfd\xc7"
+ "\x03\xac\x66\x57\x1c\x2b\x7f\xb9\xe6\x6e\x19\x1f\x71\x60\x8d\xe3"
+ "\xe5\xf6\x11\x2b\xff\xd1\xe5\xfd\xe7\x96\x67\x49\xac\xbc\x65\x8c"
+ "\x14\xd6\x62\x73\x11\x2a\x20\xd6\x74\xcc\x45\x78\x67\x29\xe0\x08"
+ "\x3c\xc0\x73\x11\xf0\x9c\x04\xb1\xf9\x08\x78\x1e\x82\x63\x4e\x82"
+ "\xf3\x7c\x84\x28\x03\x63\xc1\x73\x12\x70\x9c\x5c\x96\xb0\x1e\x39"
+ "\xe6\x26\xe0\x39\x08\xe9\xdf\xa3\xae\x18\x23\x3c\xff\x00\xc7\xcb"
+ "\x77\x7a\x0e\xc2\x56\x7b\x7b\x98\x83\xb0\x4d\x72\xff\x23\x47\x9b"
+ "\x8b\xde\xd3\x07\x01\xdf\x5a\xc6\xa9\x9a\x37\x35\xc4\xe2\x36\x87"
+ "\x31\x0a\xaa\x23\xed\x70\xdf\x4b\x85\x54\xa5\xae\x08\xbd\xb3\x02"
+ "\xa9\x1d\xe3\x17\xb8\x0d\x82\x5f\x0e\xb2\x02\x9e\x99\x73\xc9\x38"
+ "\x86\xfd\xc7\xb8\xae\xc6\x37\x92\xf0\x37\xf8\xea\xcf\xff\x59\x48"
+ "\xe1\xb1\xc7\xbc\xd9\x68\xe8\x07\x97\xd1\x88\x0a\xd3\x05\xc4\xb6"
+ "\xa9\xec\x86\x75\x70\xaf\xb6\x79\x73\xe7\x28\x7b\x70\x43\x8a\x31"
+ "\xb8\x41\x87\x71\xcb\xbc\x8a\x10\x6e\x5f\x18\xb7\x4a\xdd\xf6\x16"
+ "\xbc\x58\xac\x28\x6e\x6c\x43\xb2\x4d\x9d\x56\x8c\x59\xee\x75\xc0"
+ "\x6c\x81\x10\xb3\xed\x4a\xc7\x37\x1c\xf3\xb9\x17\x84\x53\xdb\xa1"
+ "\x4d\xad\x98\x04\x98\xbd\x28\x17\xb3\xf7\x25\xf7\x3f\xf5\x80\x59"
+ "\x95\x77\x98\x99\x43\xbc\xc0\xac\xcc\x1d\x33\xb3\x3f\x60\x66\xe4"
+ "\x30\x33\x01\x66\x16\x1e\xb3\x5b\x5e\x62\xe6\x1a\xc3\xfe\x9c\x30"
+ "\xcb\x95\xdc\xff\x54\x1a\x33\xb3\x97\xed\xcc\xec\x45\x3b\x3b\x1e"
+ "\x26\x82\x19\xb4\x33\x33\xd7\xce\xcc\xd0\xce\xcc\x4e\xed\xec\x9a"
+ "\x97\x98\xb9\xc6\xa0\x3f\x27\xcc\x76\x8c\x51\x80\x99\x97\xed\xcc"
+ "\xe2\x45\x3b\x3b\x9e\xea\x8e\x99\x05\xda\x99\x99\x6b\x67\x66\x68"
+ "\x67\x66\xa7\x76\x76\xc1\x4b\xcc\x5c\x63\xc8\x9f\x13\x66\x79\xd2"
+ "\xdf\x7f\x4b\x62\x66\xf1\xb2\x9d\x59\xbc\x69\x67\x67\x44\x30\x83"
+ "\x76\x66\xe1\xda\x99\x05\xda\x99\xc5\xa9\x9d\x1d\xf2\x12\x33\xd7"
+ "\x18\xf0\xe7\x84\xd9\xce\x02\x05\x98\x79\xd9\xce\x1a\xbd\x68\x67"
+ "\x5f\x46\xb8\x63\xd6\x08\xed\xcc\xc2\xb5\x33\x0b\xb4\x33\x8b\x53"
+ "\x3b\x5b\xe9\x25\x66\xae\x31\xdc\xcf\x09\xb3\x3f\xc5\xcb\xc5\x8c"
+ "\xc5\x0b\xb4\xa3\x28\x66\x4d\x42\xdd\x68\x05\x1d\x8f\xdf\x79\x89"
+ "\xe2\xf5\xf6\xb1\x14\x66\x95\x2a\x04\x63\x85\xf5\x20\xc6\xab\x52"
+ "\x77\x0c\x89\xe9\x46\xfc\x5e\x0c\x70\x47\xf8\xdd\x58\xfa\x25\x19"
+ "\x7a\xf1\x35\x29\xac\x5a\x7f\x1f\x96\x3b\x9f\xc7\xca\xf1\x3e\xec"
+ "\xb6\x62\x75\x5a\x2e\x56\xbb\xfd\x95\x61\x65\xae\x6a\x1d\x2b\x4b"
+ "\x88\x67\xac\x8e\xa7\xf2\x58\x5d\x70\xc2\xca\xbd\x1f\xf3\x1e\x2b"
+ "\x97\xfe\xeb\x67\x85\xd5\x9f\x25\xf7\x7f\xb6\x86\x74\x8e\xc2\xdf"
+ "\xbc\x4f\x84\xd8\x97\x79\x3d\xee\xf9\xac\x8b\x28\x6c\xfd\x45\x34"
+ "\x0a\x7f\xdf\xbc\x6f\x85\x85\x82\x3a\xfe\x70\xf2\x4c\x2d\x6a\xfe"
+ "\x31\xb4\x0b\xfe\x7e\x86\xf5\x93\x6f\x84\xfa\x57\x26\x18\x59\x9f"
+ "\xb8\x01\x30\xaa\x30\x15\x81\x4d\x3a\x45\x55\x98\xfe\x82\x9a\x16"
+ "\xc7\xa1\xaf\xce\x5f\x05\x5c\x98\xe6\xca\xba\x22\x94\x07\xd7\x8b"
+ "\x97\xfe\x05\xd9\x7f\x0c\xef\xf2\xaa\x0e\x51\xd7\xe9\xff\xd1\xe1"
+ "\xd8\x79\xb0\x0e\xa9\x27\xd4\x31\x96\x8a\xba\x93\xe8\x83\xd7\x50"
+ "\xd8\x31\x1d\x42\xd8\xd6\x6c\xac\x3c\x17\xc7\xca\x87\x04\xf8\xbc"
+ "\xef\x14\x2b\xb3\xdf\xcb\x6a\x01\x9b\x1b\x2e\xd8\x40\x2c\x0e\xb6"
+ "\xee\x34\xd1\x04\xd8\x98\x1c\xd8\x5c\x43\x69\x0b\x31\x36\x06\x3e"
+ "\x56\xe6\xb0\xc9\xc5\x3e\x4f\xeb\x14\x2b\x5f\x77\xc2\x86\xfb\x56"
+ "\x55\x80\x8d\x63\x2c\x63\x59\x38\x7e\x47\xee\x16\x2b\x2b\x1b\xcb"
+ "\x28\x90\xfc\x56\x84\x6d\x47\xd0\x46\x26\x42\x3b\x4a\x4d\x61\xdb"
+ "\x11\xb1\x7f\xb7\x06\xe0\x7b\x21\x0a\x32\x74\x8a\x5a\x0f\x18\x34"
+ "\x41\x5b\xc3\x7d\x51\xfa\x42\xbc\x3e\x63\x4d\x3e\xc6\x6d\x62\x41"
+ "\x73\xf3\x2b\x26\x44\x81\xcf\xca\xc1\xd8\xd9\x7e\x0c\xf5\xcf\x82"
+ "\xbe\xaa\x32\xfe\x1b\xc0\xe7\x26\xaa\x34\x72\xd8\xac\xf8\x06\x5d"
+ "\xa7\xf7\x04\x30\x6f\x84\x77\x79\x14\x78\x0a\x7d\x8f\xfa\x55\xfc"
+ "\xed\x0b\xf8\xbc\x0f\x66\xa3\x11\x13\xb4\x8c\x85\x9d\xcb\x03\x6d"
+ "\x0c\xf7\x67\xd8\x1f\x56\x68\xbf\x40\xb6\xec\x86\x94\xe6\xee\x9d"
+ "\xa3\x8e\xa5\x20\x84\x7d\x22\xc6\xa2\xc3\x12\x1e\x3b\xfc\xdd\x9e"
+ "\xf3\x58\x87\x9b\x2f\x9c\x7b\x52\xbc\x7d\xc5\x1b\x64\x8d\x77\xe4"
+ "\x72\xed\x2b\x57\xe9\x78\x87\x63\x3c\x0a\x30\xc4\xdf\xea\xa5\x9f"
+ "\x45\xd4\xfb\xb2\x31\xfc\x28\x44\x01\x86\x55\xad\x63\x68\xe6\x30"
+ "\x34\x87\xb4\x8e\xe1\x47\x55\x22\x18\x1a\x9d\x30\x2c\xe3\x31\x34"
+ "\xfb\x73\x18\x9a\x9c\x30\xb4\xb4\x8e\xa1\x4b\x2c\xfd\xb3\xc2\xf0"
+ "\x7f\x3d\x8f\x7f\x88\x62\x68\xf6\xa2\x1d\xfe\xe4\xc0\xd0\x8b\x76"
+ "\xb8\x37\xc7\x1d\x43\xb3\x53\x3b\x3c\x1e\xe6\x84\x21\xd7\x0e\xcd"
+ "\x4e\xed\xd0\xec\x45\x3b\x74\x89\xad\x7f\x56\x18\xee\xcb\x55\x80"
+ "\xa1\x17\xed\xf0\x3b\x0e\x43\x8b\x17\xed\xf0\xe3\x38\x11\x0c\x9d"
+ "\xda\x21\x68\x97\x16\x0c\x2d\x5c\x3b\x34\x3b\xb5\x43\xb3\x17\xed"
+ "\xd0\x45\xab\xfc\xac\x30\xfc\x24\x41\x3e\x86\x16\x2f\xda\xe1\xe7"
+ "\x0e\x0c\xbd\x68\x87\x85\xbd\xdc\x31\xb4\x38\xb7\xc3\x33\x4e\x18"
+ "\x72\xed\xd0\xe2\xd4\x0e\x2d\x5e\xb4\x43\x97\xd8\xfb\x67\x85\xe1"
+ "\xa7\x9e\xc7\xff\xc5\x31\xf4\xa2\x1d\xa6\x73\x18\x36\x7a\xd1\x0e"
+ "\x3f\x35\x88\x60\xe8\xd4\x0e\xbf\x8c\xe0\x31\x6c\xe4\xda\xa1\xc5"
+ "\xa9\x1d\x5a\xbc\x68\x87\x2e\xb1\xf8\xcf\x0a\xc3\xbf\xd4\x7a\x83"
+ "\x21\xe8\x6c\x77\x5d\x6a\xe2\x31\x74\xc6\xcf\x55\x8b\xc6\x80\x46"
+ "\xc5\xd8\xc5\x5b\x11\xe5\x8e\xdf\x5f\xf3\x31\x7e\x11\xf8\x7d\xdc"
+ "\x2d\x5e\x93\xb2\xd8\x71\xef\x73\x30\x66\xc7\x12\x11\xc2\xfa\xd4"
+ "\xa1\x47\xf1\x3b\xd5\x16\x3d\x3a\xeb\xff\x57\x3d\xba\x7f\x97\x7c"
+ "\xec\xb8\x7e\x50\x12\x3b\x61\xdf\x17\x03\x7d\xa2\x34\x76\x9f\xc5"
+ "\xbb\x63\x67\x36\xf2\xd8\x91\x7e\x8f\x60\x77\x3c\xd5\xd1\xff\x11"
+ "\xec\xb8\xfe\xcf\x23\x76\x3f\xe7\xfe\xef\x6f\x92\xfd\x9f\x6d\x35"
+ "\xa2\xb6\xaf\xb6\x17\xea\x29\x7b\x11\x1c\xc5\x70\x94\xc2\xb9\x0e"
+ "\x70\xae\x0a\xdf\x03\xbf\xd9\x6b\xf6\x2e\xec\x5a\x60\xc5\x41\x7e"
+ "\x09\x78\x5f\x0d\x9c\xa6\xa3\x23\x4d\xd0\x2a\x34\x26\x8f\xcb\x03"
+ "\xce\x67\xc0\xf9\xe2\x40\xbf\x31\x1d\x21\x7d\x29\x93\xb5\x34\x19"
+ "\xce\x75\xc2\x69\x99\x55\x2a\xb2\x9e\x1f\x45\xe1\x3c\x5c\x9f\xe9"
+ "\xcf\xa5\xe9\xe5\xfc\xdc\xae\xab\xc6\xe0\x75\x40\x1c\x69\x3a\xdb"
+ "\xa9\x8b\xf8\x77\x95\xdd\x4f\x85\xf7\x16\xd0\x38\xa7\x65\x9e\x43"
+ "\x38\x5f\x47\xda\x2e\x5c\x7e\x61\xce\x69\x6c\x1f\x22\x14\xe8\xa7"
+ "\x61\xf3\x0c\xd4\x52\xb8\x4e\x38\xed\x7d\x4c\x60\x4a\x09\x9b\xde"
+ "\x4f\x15\x2e\x48\xff\x36\x62\xd3\x72\xe9\x02\x98\x8e\x27\x93\xb9"
+ "\x74\x11\x38\x1d\x9c\x53\x39\xdb\x8f\x4b\xd7\xd5\x61\x1b\xbc\x8e"
+ "\xb8\x73\x5d\x6d\xab\x29\x9c\x1f\x4e\x13\x68\xef\x78\x22\x95\xab"
+ "\xcb\x50\xe7\x67\xe2\x74\x70\xdf\x10\xce\xce\x41\x50\x87\x11\x2d"
+ "\xf9\xe9\x0f\x47\x39\xd2\xa5\xdb\x50\xcf\x3c\xde\x36\x6a\x26\x6b"
+ "\x19\xc2\x6b\x08\xba\x62\x17\xe8\xe7\x67\xc0\xd8\x55\xd6\x21\x84"
+ "\xd3\x32\x81\x4b\xf7\x43\xfa\x60\xae\x1e\x63\x48\x3d\xd8\xf5\x56"
+ "\x08\xd6\x94\xf5\xfe\x1d\x6c\x59\xfd\x34\x5c\x59\xbb\x41\xba\xb1"
+ "\x8e\x7c\xed\x14\x3b\x8e\xc1\xa5\x55\xb1\x69\x2b\x92\xf1\x5a\xf9"
+ "\x2d\xe9\xef\xc7\x69\x6d\x59\x6b\xaa\x6c\xab\x54\x51\xae\xf9\xdb"
+ "\x56\xfb\xe3\xeb\xce\xf9\x87\x90\xf4\xba\x5a\x48\x3f\xc1\x3d\xbd"
+ "\xda\x35\x7d\x77\x92\x7e\x45\x0d\xa4\x8f\x75\x4f\x6f\xed\xe6\x92"
+ "\xbe\x07\x49\x9f\x6a\x80\xf4\x93\xdd\xd3\x6b\x5c\xd3\xff\x82\xa4"
+ "\x7f\xbb\x04\xd2\xc7\xb9\xa7\x1f\xe3\x9a\x3e\x94\xa4\x4f\x3b\x0f"
+ "\xe9\xe3\xdd\xd3\x67\xb8\xa6\xef\x49\xd2\x67\x54\x43\xfa\x04\xd7"
+ "\xf4\x79\x6c\x5a\xd4\x8f\x4b\xfb\x00\x49\xbb\xfa\x0c\xa4\x4d\x14"
+ "\xa9\x2b\xcd\xe5\x1d\xc9\xa5\x7f\x90\xa4\x5f\x16\x07\xe9\x93\xdc"
+ "\xd3\xab\x5c\xd3\xf7\x22\xe9\x37\x5b\x20\x7d\xb2\x08\x56\xae\xe9"
+ "\x7b\x93\xf4\xeb\xc7\x40\x7a\xad\x08\x56\xae\xe9\xfb\x90\xf4\x99"
+ "\x43\x21\x7d\x8a\x88\xed\x5d\xd3\xff\x92\xa4\xcf\x0a\x87\xf4\x3a"
+ "\x11\xdb\x0b\xd3\x67\xe9\x7b\x41\xba\xd4\x1d\x1c\x37\x5d\xec\xee"
+ "\x9a\x77\x5f\x92\xf7\x26\x35\xdc\x93\xe1\x9e\x1e\xf9\x91\xf4\xe8"
+ "\x31\x2e\x7d\x3f\x92\x3e\x47\x05\xe9\xd7\x88\xd8\xfe\x21\x9c\x3e"
+ "\x8f\xa4\x7d\x88\xa4\x5d\x57\x04\x69\xd7\x89\xd8\xdd\x39\x6d\x18"
+ "\x49\xfb\xa7\x5d\x90\x36\x53\xc4\xe6\xce\x69\xfb\x93\xb4\xdb\x92"
+ "\x21\xad\x5e\xc4\xde\xce\x69\x7f\x45\xd2\x7e\xa0\x81\xb4\x39\x22"
+ "\xe5\xed\xe7\x94\x76\x00\x49\x9b\x8b\x79\xb5\x55\x04\x17\xe7\xb4"
+ "\xe1\x24\xed\xee\x58\x48\x9b\x2b\x82\x89\x73\xda\x81\x24\xed\x8e"
+ "\x75\x90\x36\x5f\x04\x13\xe7\xb4\x0f\x33\x59\xf9\xa3\x38\x3f\xbd"
+ "\xcb\x35\xed\x0e\xde\xef\x3e\x62\x0f\xdc\x69\xe4\x7c\x25\x59\xd7"
+ "\x68\x35\x5e\xcb\xae\xa5\x5e\x8f\x3b\xfa\x08\x3b\x85\x22\x98\xac"
+ "\x3f\xd6\xc0\x7d\x38\xcf\xbd\xee\xbe\x4d\xf5\xf8\x0e\xbe\x8f\x18"
+ "\xc4\x64\xfd\x35\x92\x7b\x7e\xa1\x7b\x5a\x7f\xe7\xb4\x8f\x32\x59"
+ "\x05\x5b\xb9\xb4\xfb\xdd\xd3\xaa\x9d\xd3\x0e\x66\xb2\x3e\x8a\xe7"
+ "\xd2\x16\x89\xf8\xd7\xc7\x9c\xd2\x46\x32\x59\x7b\x35\x90\xee\xa0"
+ "\x98\x7f\x65\x56\x6b\x1e\xc3\xfe\xc0\xe1\xbb\x21\xfd\x10\x62\xdf"
+ "\xfd\x75\x60\xdf\x62\x9c\xde\x91\x16\x70\x78\xcc\xa9\xaf\x7c\xcc"
+ "\x1e\xb8\xaf\x86\xb3\x59\x89\x7b\x19\x32\x9c\xcb\xf0\x38\xc9\xf3"
+ "\x93\x02\xc8\xb3\xd4\xb5\x0c\x9c\x3f\xc2\x3a\x01\xdb\x77\xa8\x2d"
+ "\xeb\xd3\x64\x6c\x5f\x48\x5b\x26\xd0\x08\x94\x1f\x8d\xf3\xe4\xb0"
+ "\x1d\xc6\x64\xfd\xd9\xca\xd9\x40\xd0\x1f\x41\x7b\x64\xfd\x21\xe0"
+ "\x5b\xca\xbc\xfd\x40\x12\xa4\x1d\xce\xa5\x3b\xe3\xda\x0f\x72\xe5"
+ "\x7b\x02\xae\x55\xb7\xf4\x81\x7e\xaa\xf3\x62\x5a\x46\xfb\x30\xba"
+ "\xef\x2a\xfd\x39\x99\x8f\xdf\xb2\x1f\xd6\x91\x50\xb2\x2e\xd3\xa5"
+ "\x31\x31\x26\xc6\xea\x7c\x6e\x23\xc5\x54\x0d\x36\x21\x15\x5e\x83"
+ "\x8f\xe9\x1e\xa4\x33\xc0\x79\x63\xdf\xcb\x6a\x73\xd6\xe7\xa5\x06"
+ "\xbf\x12\x76\x4f\x03\xf8\xff\x19\x03\x7a\x83\xdd\x33\x66\xe3\x6a"
+ "\x06\xef\xf1\xe3\x67\xdb\x74\x58\x5d\x69\xaf\xc3\x6b\x29\x5a\x20"
+ "\x0f\xcb\x65\x2d\xa2\xf1\xbe\x6e\x78\x5d\xd7\x4a\x5d\x1d\xba\x4c"
+ "\x17\xf7\x64\x16\x24\x8d\x82\x32\x14\xc2\xf3\x12\x2f\xc2\x6f\x62"
+ "\x53\x3c\xff\xf3\x70\x44\xf1\x22\xbc\x3e\x5d\xf1\x4c\x63\xf7\xd0"
+ "\x42\xe6\xad\x19\xb5\xda\x34\xf4\xcb\xab\x74\x71\x82\x63\x2d\x2a"
+ "\x76\xfd\xa9\x9f\x92\x9e\x26\x6b\x4f\x15\x5f\xb1\x07\x1f\x8e\x70"
+ "\x5b\x7b\x2a\x3f\x4c\x4d\xd6\xb3\x3a\xc2\xe6\x0d\x65\xab\x62\x34"
+ "\x97\xc2\xed\x4d\x6b\x32\xf0\x1e\x6c\xc5\x69\x57\xd1\x45\xee\x1a"
+ "\xce\x93\xcb\xeb\x00\xce\x03\xe7\xe5\xc8\x07\xdf\x67\xec\x1b\xa6"
+ "\xc6\x75\x07\x3b\x84\x7b\xbf\x7e\x55\x71\x01\x5e\xbf\x4a\x46\xfa"
+ "\x04\x9c\x5e\x7c\x5d\x5e\xd0\x38\xd9\x87\xa3\xcc\x59\x47\xc6\x80"
+ "\x56\xcd\x27\x76\x3f\x32\xc1\xe0\xd7\x71\x2c\xf7\xff\x38\x83\x9f"
+ "\xbf\x91\xfb\x7f\xa2\xc1\xaf\x28\x80\xfb\xbf\xd6\xb1\x5e\x98\x68"
+ "\xbe\xea\xc3\xbd\xc0\xde\x43\xed\x1f\xc4\xf9\x63\x6d\x4d\xd6\x2d"
+ "\x3d\xdc\x4b\xd3\x07\xaf\xe7\x7c\xc4\x04\xcf\x1c\x4a\xec\x72\xa4"
+ "\x1c\xfe\x06\x71\x7f\x8d\xdc\x5f\x06\xa7\x61\xb9\x14\xa2\x2e\x60"
+ "\x32\x1b\x8c\x64\x8f\x97\x23\xec\x5a\x65\x2c\x76\x80\x2f\xd3\xb5"
+ "\xc1\xc8\xe6\xbb\x39\xb4\xd0\xb9\x0c\x91\x43\x1e\x7b\x7c\xe8\xb0"
+ "\xe1\x4f\x8c\x18\x39\xf3\xb5\xd7\x13\x67\xcd\xfe\x7d\xd2\x9c\xb9"
+ "\x6f\x24\xcf\x9b\xbf\x40\xbb\x70\xd1\xe2\x94\x25\x4b\x97\xe9\x96"
+ "\xaf\xc0\x0b\x87\xb5\x94\xf5\x83\xb1\x7e\x26\x0a\x01\x6e\xcf\xc1"
+ "\x33\xbe\x98\xc2\x3e\x17\xce\x11\x8c\xbf\x18\xab\xd2\x88\xeb\xf7"
+ "\x4a\x60\x32\xde\xa3\xa3\x8e\xfe\x62\x27\xde\x33\x04\x38\xe6\x57"
+ "\x99\xfb\x7c\x31\xde\x97\xac\x86\xfe\x22\xa7\xc2\xf8\x7c\x31\xde"
+ "\xf3\xee\x68\x68\x2d\x0a\xeb\x87\xf7\x2e\xfb\x22\x03\x5f\xcf\xfb"
+ "\x15\x42\x25\x70\xaf\x58\x9e\xfd\xd4\x28\xf4\xbd\x1e\x8c\x31\xa7"
+ "\x07\x53\x87\xf3\xcf\xd9\xc2\xd4\x1a\xdf\x4c\x42\x59\xf0\x1b\x78"
+ "\xae\xbe\x4c\x1f\x9d\x72\xb4\x17\xbb\xcf\x50\xaf\x1d\x5b\x98\x9a"
+ "\x35\x3d\x98\x9a\xb7\xb6\x30\x75\x79\x3d\x18\x43\x58\x0e\x0a\x30"
+ "\x67\x1d\x85\x98\xe3\x8b\x04\xb6\xcd\xc0\x75\x7b\xe0\x17\x68\x23"
+ "\x5c\x1b\x6c\x45\x74\x1e\xfc\x86\x73\xa6\xa3\x1a\x52\xee\x4f\x6e"
+ "\x5a\x3a\x40\xfd\xea\x98\xe6\x64\xbf\x2c\x78\x0e\xc1\xe3\xe8\xf2"
+ "\x12\xe8\xf9\xe1\x79\xc6\x4a\xcb\x45\x64\xa0\x8f\xea\xf2\x1a\xd8"
+ "\xe7\x05\x55\x6e\xad\x43\x38\xbf\x8f\x17\x59\x3a\x2c\x7e\x80\xb1"
+ "\x42\xda\x38\xfb\x9b\xc9\x7e\x90\x66\x28\xe4\x6d\x72\xae\x4f\xf8"
+ "\xec\x79\x29\x9a\xf9\x4b\x92\x93\x07\x76\x41\xe1\xec\x5f\xc1\x9e"
+ "\x79\x29\x90\x1f\x7a\x6f\x0b\x53\x02\xf5\x2c\x86\xfa\x96\x96\x43"
+ "\xa4\x00\xdc\x40\x50\x27\x3d\xe4\x5b\x0e\xe7\x0f\xc2\xff\x0f\x42"
+ "\xd9\x4b\xc9\x1e\x5d\x67\x1a\x99\xac\xa3\x6b\xa0\x9c\xa5\x78\x7f"
+ "\x02\xbc\x96\x62\xfd\xb2\xc9\x7e\x50\xef\x1c\x48\x57\xaa\x79\x00"
+ "\xf5\xbf\x4c\x97\x4c\x81\x72\xec\x82\xff\x43\xfa\xb3\xec\x7e\x40"
+ "\x90\xbe\x84\xd4\xeb\x0c\xbb\x77\x38\xd8\xaa\x78\x7b\x0f\x26\xd3"
+ "\x9c\x55\x12\x89\xd7\x5a\x65\xf7\x7d\x81\xdf\x60\x97\x52\x48\xab"
+ "\xaf\x4f\x9f\xec\x87\xf7\x8a\xcc\xe3\xf3\x64\xcb\x84\xcb\x81\xe3"
+ "\xd6\xaf\x40\x05\xda\x9b\xe3\xd0\x20\x0b\xf2\xfb\xaa\x06\xa1\xdc"
+ "\x2d\x4c\x3e\x1c\xb9\x70\x6c\x3d\x09\xd7\x4e\xc0\x51\x0a\xe7\xcb"
+ "\xe0\xef\x49\xf8\x7b\xa2\x86\x7d\x0f\x1a\x8a\xcb\xbd\x38\x95\xa9"
+ "\x1d\xbc\x15\x3d\xc4\xee\x45\x99\x86\xa6\x5e\xa4\xcf\xc4\xe2\xb2"
+ "\xe3\x75\x95\x99\xc0\x12\x97\xf5\x5f\x8f\x8f\x40\x70\x1d\xfe\x4e"
+ "\x20\x7f\x9d\x8f\xe3\x39\x70\xec\xe7\xfe\x0f\xc8\x1e\x0f\x23\xff"
+ "\xff\x52\x0d\x47\xaf\xd6\x0f\xd7\xfc\xa4\x8e\x2f\xd7\x79\x9f\xd6"
+ "\xab\xa3\xc4\xbb\x74\x27\xc6\x20\xfa\xab\xad\x70\x54\x09\xcf\x7f"
+ "\x55\x40\xce\x55\xa5\x90\xdf\x55\x19\xdc\xdf\xbd\x88\x3e\x05\x76"
+ "\x3a\x05\xf9\x9f\xaa\x25\xe7\x4e\x99\xe0\xef\x28\x38\xa2\x5c\x9e"
+ "\x8f\xf3\x3c\x8f\xf1\x6c\x06\x5f\x8f\xb1\x34\xd0\x25\x39\x18\xa3"
+ "\x8d\x84\x5b\x7e\x78\xae\x03\x9c\xd3\x03\xb7\x72\x79\xfe\x1c\x5f"
+ "\x2b\xe4\xcf\x71\xad\x0b\x7f\xf4\xd8\x17\x41\x5b\x38\x9f\x47\xf8"
+ "\x72\xb0\xfe\xcd\x44\xf8\x7d\x3c\x05\xf2\x39\xa8\x79\x85\xcd\x83"
+ "\x1d\x83\xdb\x78\x15\xa1\xae\x49\x48\x85\xfd\x4b\x1d\x7d\xfc\x18"
+ "\xe6\x2c\x7e\x36\xf7\x5c\x52\x16\x28\x1f\x9c\xcb\xc7\xe5\x5b\x00"
+ "\xf9\xc2\xef\x5d\x90\x2e\xbf\x12\xdd\x74\x94\x8d\xbd\x67\xfd\x5c"
+ "\xe0\x23\x57\x5e\x9c\x27\xbe\x8f\xe1\xeb\xa5\xc7\xf7\x90\x67\x7f"
+ "\xb9\x1c\xce\x47\x82\x8f\x42\xe9\x37\x10\x5d\x69\x35\x20\xcc\x49"
+ "\xfc\xb7\xd2\x1a\x09\x6d\x29\x0a\xd9\x71\x3f\x17\x8a\x22\xa1\xbd"
+ "\x75\xbe\x48\x7f\x19\xff\x68\x2a\x8a\xc4\xf9\x61\xff\x6d\xa0\xbf"
+ "\xd4\xe4\xe1\xb6\x48\xf2\x5a\x48\xd6\x5d\x2c\xd1\x9f\xd4\x22\xf6"
+ "\x39\x3b\x70\x79\xe0\xba\xd3\x73\x73\x2a\x21\x02\xda\xb8\x82\xd4"
+ "\x15\x9e\xb5\x0b\xee\x2f\xc4\x75\xc7\xf6\x84\xeb\x45\x90\x4f\x11"
+ "\xbe\x86\xf7\x56\xe1\xea\xb3\x0b\x7f\x97\x81\xed\x81\xd3\xe3\x7d"
+ "\x1e\xc9\x7a\xb2\x47\x2f\xb0\x76\x83\xfb\x31\x1e\x0c\x3c\x03\xe7"
+ "\x91\x6e\x65\xac\x0c\xf8\xa3\x3f\xad\xc0\x7b\x08\x9c\x18\x22\xc4"
+ "\xa7\x54\xed\x8c\x0f\xdc\x57\x08\xf7\x97\xe0\xfe\x17\xfb\x13\x78"
+ "\x66\x10\xde\xd7\x0c\xce\xe9\xed\x59\x90\xc7\x52\x0b\x3b\x06\x04"
+ "\xf9\xf4\x85\xb2\xe8\x71\x3e\x50\x9e\x12\x2e\xaf\x78\xbc\xd6\xa4"
+ "\x33\xd6\x5c\x7e\xbb\x30\xe6\x6c\x7b\x5e\xc1\xd6\x09\x7c\x57\xe9"
+ "\x8d\x1d\xe4\x5a\x11\xa4\x29\x62\x9a\xa3\x10\xf3\x66\x1c\xb7\x7f"
+ "\x1a\x7b\x6d\x7f\x7a\x23\x8b\x6f\x09\xf1\x6b\x27\x82\x17\xaf\x64"
+ "\x6a\x9d\xca\x5d\xea\x58\x53\x9d\x2b\xf7\x7e\xfc\x3c\x66\x59\x3c"
+ "\xdb\x87\xe2\x67\xe0\xfb\xb9\xfc\x76\xe1\xfc\x1c\xb6\x7a\x14\xca"
+ "\x41\xec\xf5\x65\x35\x9c\xdf\x85\xb9\xc8\xda\x0d\xfc\x68\x7d\x3a"
+ "\xe6\x62\x69\x19\xdc\x7f\x30\x0b\xff\x5e\xc6\xfe\x4e\x60\x7d\x2c"
+ "\x7f\x3d\x04\x5f\xaf\x04\x96\x6e\x7c\x03\xb8\x64\x47\xe8\xa1\x10"
+ "\x14\x69\x5a\xcd\xd6\x6d\xaf\xe9\xcd\xb1\x7e\x47\xad\x08\xe1\x72"
+ "\x82\x8d\x8a\xcc\x59\x27\x52\xa0\xaf\x61\xf7\x4f\x03\x7f\xbd\x9f"
+ "\xf9\x53\x1c\xc2\x65\x06\x7f\xc6\x95\xef\xc4\x25\x0e\xfb\xfd\xb8"
+ "\x8e\xd8\x9e\x8f\x12\xdf\x07\xd7\xbe\x7a\x07\x97\x9d\xaf\xf7\x89"
+ "\x62\x67\x1b\xb3\xf5\x06\x1c\x30\x5e\x18\x17\xa7\x3c\x31\xf7\xf5"
+ "\x90\xd7\x5e\xf2\x9b\x70\x03\xdb\x5a\xdf\x83\x29\xc3\xe9\xf9\xb4"
+ "\x27\x1b\xf1\xb5\x34\x78\xf6\x60\x2d\xbb\x67\x9b\x1f\x5e\x17\x1f"
+ "\xf2\xdd\x8b\xf7\xf0\x84\x3c\x8a\xb0\x4d\xa1\x2c\xd1\x98\x8f\xf0"
+ "\x9b\x5b\xaf\xf5\xe4\x04\xe8\xcf\x23\xe0\x18\xc5\xb7\xff\xaf\x46"
+ "\x0b\xf9\x75\xd2\xb5\xfd\x63\xbc\xf5\xf6\xf4\x28\xc4\xed\x35\xac"
+ "\xb9\x4e\x9f\x3c\xc7\xf5\x1d\x1c\xd6\x5f\x0d\x3a\x0a\xed\xc5\x29"
+ "\x8f\xfd\x2e\x58\x17\xb1\x7c\x5c\x36\xc1\x0f\xd7\x19\xee\x2d\xe2"
+ "\xf2\x61\xeb\xcc\xf2\x69\x35\xcb\x81\x32\x66\x19\xd4\xb3\x85\x07"
+ "\x27\xd5\x1c\xce\x65\x2e\x36\x71\xf8\xae\x78\xbc\x47\x17\xf6\x49"
+ "\xa0\x6f\x9f\x36\x37\xf3\x7e\x09\x63\x6f\x67\xb1\x3f\x59\x94\x47"
+ "\xfa\x5b\xce\x6f\x9d\x24\xd7\x7b\x08\x38\x8c\xcb\x72\x8d\xe5\x2f"
+ "\x2e\x4b\x7a\x3c\x2e\x4b\x11\x5b\x8e\x74\x0d\xba\x4e\x7f\x95\x88"
+ "\x9f\x0f\xf7\x1a\xb9\xf6\xca\xe5\x75\xa2\x04\xe7\xf5\x16\xf8\x2a"
+ "\x5c\x26\x78\x76\x2c\xeb\xff\x7e\xc3\xda\xe4\x18\x57\xf6\x52\xcb"
+ "\x6a\x7c\xef\xf1\xa2\x46\x8a\xbd\xb7\x14\xfe\x1f\x61\x21\x7b\x1c"
+ "\x74\x81\xfb\x0b\x34\xaf\xe1\xf4\x55\x61\xd8\x47\x6b\xa6\xb3\xff"
+ "\xef\xaa\x79\x09\xb8\x7a\x15\xa9\x20\x3f\x7f\xcc\x51\x07\x2f\xea"
+ "\xe8\x4a\x1b\x8e\x17\xc0\xd6\x7b\x41\x23\x15\x60\x7b\x63\x2e\x83"
+ "\x46\x1a\x6a\xce\x2a\x8b\x70\xf0\x16\x9e\x93\x8b\x6d\x4f\xf0\x29"
+ "\x5b\x08\x3c\x2e\xe2\xb9\x55\xb6\x90\xb3\x63\x01\xd8\xd1\xff\x32"
+ "\x5d\x79\x83\xab\x57\x01\xa4\x07\x2d\x56\xf9\x3d\x57\x76\x6e\x5f"
+ "\xc3\xb2\x0d\x0e\x1c\xb8\xb6\x5a\x96\x85\xfd\x2f\x8b\x41\x79\x18"
+ "\x77\xef\x2e\xf2\xac\xf2\xfe\x8e\xb4\x58\x23\x92\xfd\xca\xca\xfb"
+ "\x63\x3f\x38\x18\xb0\x67\x7d\x1f\xbb\xbf\x2d\x39\x87\xdb\x0e\x79"
+ "\x46\x65\x39\xcb\x43\xd0\x3d\x3c\x8f\xca\xac\x2e\xfe\x09\xfb\x62"
+ "\x7d\xc5\x1a\xb2\x1f\x04\xe6\x12\xf6\xa9\x38\x2e\x81\x32\x9e\xe1"
+ "\xda\x0f\x57\xe6\xf2\x39\x42\xae\x54\x1e\x00\xae\x0c\xe2\xf3\x2e"
+ "\x8f\x13\xeb\xe7\xf2\x88\x0f\xcc\xe5\xea\xb6\x87\xab\xdb\x5e\xae"
+ "\x6e\x7b\xb8\xba\x15\xc0\x33\xb0\xdd\xe6\x39\xd9\x11\xec\x56\x71"
+ "\x8e\x4b\x5f\x84\x7d\x39\xdf\x5e\x2b\xba\x3b\xda\xb2\xbb\xbf\xa8"
+ "\x38\x81\xdb\x83\x53\xb9\x8c\x2e\xfe\xa2\x48\xdc\x5f\x94\x17\x73"
+ "\xf5\xcd\x77\x69\x1b\xbb\x38\xbd\x7b\xc1\x81\x43\x85\xc9\xb1\x2f"
+ "\xc7\xd1\x0b\xd8\x7f\xe2\x67\x3b\xf7\x41\x3b\x88\x5d\xb9\xb6\x5c"
+ "\xf1\x99\x3b\x0e\x15\x6b\x9c\xdb\x33\xc6\x1a\xfb\x04\x9c\x07\xc6"
+ "\x94\xd5\x95\x70\x8e\xe0\x5a\x11\x8f\x7d\x83\xb3\x8f\x86\xb4\x39"
+ "\x76\x06\xb7\x97\x8a\x75\xc2\xb6\x58\x6e\xe2\xda\x22\xf7\xec\xca"
+ "\x69\x80\x51\xa4\xd3\x73\xad\x2e\xcf\xc5\xd8\x94\xb0\xeb\x2e\x13"
+ "\x4c\xc7\x39\xfa\x34\x9c\x1e\xee\xd5\x99\xb3\x2a\x23\x5d\xfa\x47"
+ "\x3d\x2e\x1f\x3c\xab\x80\xf5\x59\x5b\x58\x5f\xa1\x33\xb3\xe5\xa9"
+ "\x1c\x9a\xc7\xf5\x13\x70\x2e\x92\x3b\x87\xb8\xbe\xc4\xc1\x9b\xdd"
+ "\xc2\x32\x55\xea\xc5\xf5\x51\x79\x81\x43\x1f\xb1\x79\xb1\xbe\xa8"
+ "\x32\x87\xab\x1f\x3e\x37\x88\x9c\x2b\x8f\xc7\xe7\xb2\x88\x1d\x72"
+ "\x18\xb6\xbf\x2a\x47\x5c\x7f\x85\xdb\x17\x65\xa0\xcb\xb4\xb8\x8d"
+ "\xe1\xdf\x90\x47\x2d\xce\xbf\x32\xa3\x09\xa7\xd9\x0a\xd7\x02\xb0"
+ "\x3f\xc0\xfe\x42\x33\x9b\xf8\x0d\xcd\x44\xf6\xef\x30\xec\x77\xb0"
+ "\x0e\xc1\xd7\x0d\xf4\x57\x56\xec\x8b\xe0\xfc\x78\xcd\x0b\xa0\x0b"
+ "\x7e\xf4\x87\x7c\xab\x22\xb8\x7b\x5f\x66\xb5\xc2\x8f\x51\xb4\xe3"
+ "\x9c\xe3\x3e\x68\x47\x5d\xf1\x7d\xf8\x7e\x87\xff\xc2\xbe\xcb\x8a"
+ "\x7d\x13\x79\xde\x4e\x8e\xe3\x6c\xdc\xe0\xd0\x45\xcd\x94\x53\x5a"
+ "\xbc\x57\x01\xf1\x69\x75\x9c\x3f\xbb\x80\xef\x65\xf1\x03\x5f\x99"
+ "\xd6\xc8\x7c\x9f\xb7\x08\xa9\x76\xdc\xc4\x7e\xf1\xe8\x79\x52\xce"
+ "\x53\x23\x48\x3d\x4e\xf9\xb1\xf5\x20\x3e\x55\x4f\xca\x72\xf4\xfc"
+ "\x8e\x26\xf6\x5a\x6f\x5c\x17\x7c\x6d\xa3\xd3\x35\xbc\x5f\x08\x5c"
+ "\x63\xf7\x7c\x77\xbd\xcf\xde\x9c\xe4\x96\x3e\x8f\xec\x67\xeb\xbf"
+ "\x63\x8b\xc3\xf7\x9e\x2a\x22\xe5\x3c\xb5\xc4\xe1\x77\xc1\x2e\xac"
+ "\xef\x65\xaf\xcd\xe6\xd2\x4c\xe4\xfe\xb2\xfe\xfd\xd4\x6e\x62\xd7"
+ "\x50\x8a\xd8\xbb\x2c\x80\xab\xc7\x01\x36\xce\xfe\x31\x0e\x6c\x7b"
+ "\x2a\xd7\x61\x5b\xe7\xff\xe3\xf6\x03\xcf\x57\xe3\xdf\x2c\xef\x53"
+ "\xd9\x18\x36\x17\xa7\xc1\x65\x22\x7d\x44\x55\x8e\xab\xa6\x86\x58"
+ "\x6f\x08\xee\x97\x88\x56\x3d\x13\xcc\x8d\xff\xa0\xe2\x45\x1f\x42"
+ "\xbf\x70\x3a\xde\xe1\x63\x18\x73\x14\xbb\x5e\xf9\x65\xfa\x34\xbb"
+ "\xc7\x33\x5e\xdf\xde\x39\x0d\xf6\x4f\x9f\x34\x19\xb8\x3c\x4f\x8f"
+ "\x70\xf8\x0d\xec\x4b\x2a\x4c\x17\x39\x4d\x77\xba\x76\x07\xe7\x4b"
+ "\xae\xd3\xa7\xaf\x08\x75\xd8\xe9\x2b\x42\x9f\xf1\xb5\xcd\xd5\x67"
+ "\x80\x6e\x5e\x63\xce\x3a\x7d\x50\xa0\x03\xe0\x9c\x67\xdf\x71\x5a"
+ "\x8f\xdb\x28\xde\xaf\x88\xf5\x4f\xec\x98\xd6\xd7\x93\x1c\x65\xc6"
+ "\x7e\xb3\xfe\x4d\xc7\xf8\xc5\xd7\xd7\xb0\x56\x13\x3e\xef\xeb\x08"
+ "\x81\xef\xc4\xcf\x73\xe4\xa7\x42\x78\xcf\x1b\xb0\x03\x1e\x6f\x39"
+ "\x6d\xe5\xfc\x7c\xbe\xc0\x57\x72\x7d\x18\xf6\x93\xc2\xbe\xea\xe8"
+ "\x05\x61\x5f\xf5\xf5\x39\x77\x1f\xf9\x75\x81\xf7\x7d\xd5\xd7\x19"
+ "\xd8\x6f\x39\x7c\xa4\xd0\x17\x7c\xbd\x77\x87\x40\xcb\x7e\x3d\xd4"
+ "\xa1\x65\x79\x3f\x7a\xba\x04\xfb\x28\x78\x7e\x11\x79\xf6\x99\x30"
+ "\xe8\xf7\xc3\x1d\xcf\x86\xeb\xf1\x15\x1a\xe0\x66\xd6\x51\x78\xc6"
+ "\x69\x7f\x4e\x03\xb2\x6d\xb3\x89\xdd\xf7\xe3\x54\x2c\xf0\xaf\x0b"
+ "\xe6\x59\xf1\xfc\x9b\xa8\x86\xef\x2b\x4a\xea\x17\x38\xec\x7b\xe6"
+ "\x33\x67\x5d\xb8\x7d\x0b\xb3\x0e\x9e\x93\xe9\x5c\xc7\x0d\x70\x6e"
+ "\x23\x37\x86\xc0\xda\x96\xcd\xeb\x4c\x42\xde\x16\x61\xdd\x48\x3d"
+ "\xce\xe0\xf1\x8c\x83\x38\x26\x82\xe7\x4f\xc6\xba\x07\xef\x59\x06"
+ "\x7e\xa6\x3a\xaf\x85\xf3\xc7\x23\x1a\x57\x3b\xeb\xab\x92\xa1\xd8"
+ "\x57\x72\xb1\x67\x29\xe8\x1d\xbd\xf3\x58\x4c\xf4\xaf\x63\x35\xda"
+ "\x45\x73\xe6\xa7\xcc\x7e\x4c\x33\x67\xfe\x9c\x94\x39\x33\x93\xe7"
+ "\xac\x98\x99\x32\x67\xc1\xfc\x88\x79\x33\x7f\x3f\xe7\x75\xcd\xb2"
+ "\x99\x8b\x35\x91\xba\xfe\xba\x2e\x88\x4f\xfa\xa4\x66\xe6\xe2\xc5"
+ "\x4b\xe6\xcd\x4a\xd4\xcc\x9f\xf3\xfa\xa0\x45\xb3\x16\xcf\x4a\xd1"
+ "\xcc\x5c\xb4\x60\xc9\xfc\x44\x4d\xff\xc4\x47\xfb\x47\x0e\x4f\xec"
+ "\xe2\x3c\x86\xd6\x4f\x8d\xea\xec\x0d\x57\x6a\x37\x36\x20\xff\x20"
+ "\x3f\xed\xa2\x20\xdd\x9c\xf9\x64\xcc\xee\xac\x6d\x70\x0e\xd2\xe2"
+ "\x7d\xc4\xf1\x1e\xb4\x4c\xd6\x59\x35\xfc\x55\xe1\x74\x50\x4f\x4d"
+ "\x1e\xde\x4b\xbc\x07\xd3\xcb\x9c\x75\xb6\xd8\x40\x9f\x63\xf7\xbb"
+ "\x06\x5b\x68\xa0\x6e\xbd\x98\x86\x13\xb5\xa0\xd9\xb4\x78\x6e\x76"
+ "\x5e\x03\x0a\xd1\x2f\x45\x2a\x38\x02\xe0\x50\xe3\x7d\xc6\xe1\x1e"
+ "\x93\x81\xfe\x97\x9a\xac\xdf\xff\xcf\x1c\x63\x57\x53\x3e\x93\x69"
+ "\xe2\xfa\xf9\x7f\x66\x3b\xc6\x99\x63\xd6\xa2\x18\xcc\xcf\x8b\xf4"
+ "\x3f\xd9\x77\x38\x6f\x01\x97\xf1\xd8\x6b\xfd\xe1\xe7\xc6\x80\x1e"
+ "\x3c\x5f\xfc\x00\x7b\x2d\xdb\x44\xa1\x00\x28\x97\xea\x68\x6a\x24"
+ "\x7a\x0f\x9e\xb5\x38\x94\x61\xcc\x59\xff\x8c\x73\x8c\xa7\xe1\xbd"
+ "\xdf\xa1\x2e\xd5\x5c\x3d\x9e\x62\xeb\xb1\x85\x09\xcb\xe9\x06\xe5"
+ "\xdb\x84\xcb\xf3\xcf\x35\x8e\x3a\x40\xb9\xab\x0d\xf4\xd9\x5a\xbc"
+ "\xf7\x3b\x2e\x97\xd8\x58\x1f\x1e\xef\x82\x72\x96\xdb\x97\x82\xdd"
+ "\xfa\x90\x3d\x8f\x36\xee\x20\xed\x0f\xea\xa5\xca\x83\xff\x67\xdd"
+ "\x44\x01\x1b\xf0\x7e\xda\xab\x7f\xc9\x94\x9b\xac\xa8\x32\xa9\x1a"
+ "\x05\x2d\x67\x8c\xcc\xdf\xae\xd4\x72\x75\xb2\x60\xdf\xf0\xd7\xff"
+ "\xc7\xde\xfb\xc0\x37\x59\x25\x0b\xc3\x93\x34\xa5\x01\x0b\x4d\x6b"
+ "\x95\x14\x2a\x06\x2c\x6b\x80\x02\x45\x61\x17\xd9\x22\x45\x40\x8b"
+ "\xf2\xa7\xf2\xcf\x2a\x08\x54\x5a\x48\xa5\x40\x6d\x03\x04\xb6\xd0"
+ "\x12\x40\x71\x05\x5a\x0a\x42\xd5\xd2\x16\xc5\x5d\x54\x5c\xbb\x2e"
+ "\xae\x75\x17\xb5\xda\xca\x76\x77\xa1\xe1\xee\x65\xdf\xed\x7a\xd9"
+ "\x35\x72\x6b\xb7\x72\x0b\x44\x1b\x48\x84\x24\xe7\x9b\x39\xe7\x79"
+ "\x92\x27\x69\x02\xfa\x5e\xdf\xf7\x7e\xbf\xef\xb3\x1a\x9e\xe7\x39"
+ "\x67\xce\x9c\x39\x33\x73\xe6\xcc\xf9\xff\x64\x9b\x86\xca\x84\x6d"
+ "\x45\x2c\xdd\xcd\x1c\x61\x6c\x51\xb3\xf7\x56\xe6\x64\x2f\x29\x7d"
+ "\xae\xbf\xe5\x10\x4f\xc8\xdf\xea\xb6\xd2\x9d\x5e\x7f\xcb\x44\x5e"
+ "\xd6\x49\xbe\xb1\x93\x5d\x5b\xa4\xf0\xa5\xfe\x46\x7a\xe6\x8c\x80"
+ "\x5b\x2b\xe3\xa6\x7b\xba\x29\x8d\x90\xff\xdf\x4e\x61\x1a\x87\x02"
+ "\xff\x91\x50\xfc\x84\x13\xdf\x1d\x72\x3e\xa2\x1f\xfe\x37\xf2\x09"
+ "\x1c\xa8\xcb\x8e\x08\xf9\xa5\x54\xee\x67\x67\x6c\x18\x5e\xfe\x0d"
+ "\x68\x10\xf6\x4c\xed\x7e\xc2\xdf\xa6\x45\xbe\x17\x10\xfe\xad\xb7"
+ "\x02\x6c\x43\x98\xee\xdd\xff\xab\xce\xc9\xef\x7a\x6e\xc3\xfa\xdf"
+ "\x54\x15\x3a\x66\x2d\xe9\xf3\x84\x10\x7d\xce\xa8\x24\x9f\x10\x5b"
+ "\x17\xd2\xa1\xf2\xcb\xd8\x0e\xe3\xf7\xa8\x7d\x60\xa4\x7c\xf0\xfd"
+ "\x34\x8d\x87\x20\x4e\x8b\x9c\x1f\x43\xfd\xdf\xed\x13\x63\x30\x92"
+ "\x6e\xa5\xda\x2c\x9d\x34\x37\xc1\x9a\xd0\xbe\x13\x8d\xa4\x63\x98"
+ "\xe6\xa8\xac\x53\xa8\xeb\x67\xb8\x5e\x25\x82\x91\xed\x6e\x4b\xa3"
+ "\x7b\xbb\x49\xaf\x6a\x50\x9f\x48\xaf\x10\xb6\x4d\xd6\x29\xd4\xb5"
+ "\xd3\x04\x87\x34\xf4\xa9\xdf\x98\xa1\x21\x1b\xd9\x1e\xf5\xf7\x99"
+ "\xa4\x63\xec\xc0\x43\x6d\xac\xff\xc2\x36\x21\xa7\xbf\xcf\xb4\xb9"
+ "\x85\x0c\x02\x7c\xff\xbb\x41\xc1\xf7\xd3\xa8\xc7\x7d\x88\xcf\x62"
+ "\xac\xfa\xef\x33\x91\xb6\xd3\xdc\x17\xdf\x84\x32\xe0\x6d\xd5\xdf"
+ "\x63\x29\xbd\xc4\xc3\x93\x01\x1e\xfe\xdd\x14\x8e\x87\x21\xbc\xd3"
+ "\xd0\x8f\xed\xfe\xbb\x99\xea\x0a\xa6\xa9\x96\xef\x8b\x0e\x27\x4b"
+ "\xcc\x43\xa3\xd9\x07\x5a\xca\xa3\x39\x91\xc3\x9f\x94\xf3\x28\x47"
+ "\x5e\x3b\x4a\x4d\xd7\xd5\xe7\xe6\x3a\x00\x1a\x13\xa7\xf4\x29\x89"
+ "\xc4\xdf\x4f\x63\x03\xe9\x99\x33\x34\xfd\xd0\x65\x41\xb4\x6a\xc5"
+ "\x3d\xd9\x9f\x1a\xf6\x4a\xf7\x64\x63\xfa\x19\xd7\xa3\x37\xc5\x20"
+ "\xda\xc9\xc6\x21\xa4\xdf\x9f\x6e\xb7\x55\x01\x50\x98\xf4\x6d\xee"
+ "\xc6\xb6\x27\x74\x7c\x3f\xf2\x7c\xc3\xa7\x9f\x04\xcf\x37\x7c\x7a"
+ "\x2c\xd2\x7c\x43\x70\xbe\xff\xa1\xa2\x7c\x7d\xb5\xf3\x54\x8a\xbc"
+ "\xbb\x7c\x61\xf2\x96\xd3\x8f\xaa\x53\xf6\x67\xfe\xe3\x61\xa2\xa1"
+ "\x15\xdb\x29\x36\x70\x9e\x8a\x21\x9e\x66\xde\x86\xff\x47\x96\xf0"
+ "\x5f\xc8\x2f\xfa\x8f\x34\x82\x09\x2d\x87\xff\x4f\x9b\xf8\x11\x3d"
+ "\xbe\xe1\x1f\xd1\xf7\x03\x8d\x42\x80\xa1\x4d\x8e\x56\x07\x01\x03"
+ "\x0b\xf3\x11\x0b\x30\x98\xc3\x33\xfc\x13\x41\xd2\xb7\x83\x7f\x68"
+ "\xfc\xf0\xfe\xf8\xff\xc6\x5f\x6f\x41\x2f\xc7\xe7\x06\x95\x94\x9f"
+ "\xb2\x4c\x53\xaf\x93\x9a\x81\x9c\x24\xdc\x1f\x8d\x14\x94\xcd\x8b"
+ "\x06\x18\xa2\xe7\xc0\x8c\x79\x44\x84\xff\x9b\x29\xbf\x29\x24\xf8"
+ "\x1b\xff\xa2\x16\x29\x32\xb8\x3d\x2a\x97\x2f\xb1\x1a\x9a\xe5\x0f"
+ "\x52\xd7\xe9\x94\x59\xea\xa0\x2c\x9a\xbf\xc4\xd1\x3f\x6e\xc4\x67"
+ "\xc4\xf8\x21\xe3\xfd\x00\x37\x3b\xb7\x28\xc0\xff\x2c\xc8\xbf\x63"
+ "\xc7\x75\xca\xf8\x5d\xff\x06\x29\xde\x6f\x17\x8f\x3b\x32\xbf\x47"
+ "\xfc\xd7\xff\x33\x9c\xee\x2d\xbf\x06\xd4\xe3\x8e\xd3\xe1\x40\x03"
+ "\xfc\x4f\x49\x93\x83\x94\x1a\x1a\x88\xbf\xf3\x68\xf0\xf7\x30\x53"
+ "\xf0\xf7\x88\x86\xef\x83\xf4\x46\xfa\xa7\xd4\x8e\x7d\x93\xe1\xdb"
+ "\xfc\x81\x71\x21\x55\x26\xae\x22\xa4\x0a\x05\xfe\x24\x6a\xa2\x00"
+ "\x52\x63\x15\xc1\x9a\xf0\xd0\xff\x67\xfe\x06\x6c\x91\x2a\xc4\xed"
+ "\x0e\x5d\x8f\xc8\x49\x21\x61\xf4\xdd\xcb\x20\x85\x8d\xf9\xa8\x07"
+ "\x3c\x0f\x33\x28\xbe\x55\x19\xf8\x4f\x1d\xea\xff\xd9\xef\x83\xd6"
+ "\x1f\xfe\xfe\x7f\xf8\xa7\xa2\xfa\xf1\xc3\xdf\xff\xa1\x3f\x26\x5a"
+ "\x71\xb4\x44\xfc\x41\xff\x31\xbf\xa1\x64\x52\x04\x93\x02\x98\xf4"
+ "\xf2\xbd\xb4\xe3\x3f\xfc\xfd\xf0\xf7\xc3\xdf\x0f\x7f\x3f\xfc\xfd"
+ "\xf0\xf7\xc3\xdf\xff\x07\xfe\x54\xbc\x1f\xc1\xa4\x3f\xff\xbb\x3f"
+ "\x9e\xba\x41\xf9\x89\x4c\xad\x02\xa6\x88\x28\x1b\x07\x2a\x2d\xf4"
+ "\xd2\x7c\x7f\x5e\x9e\xc1\x4f\xd0\xb7\x4c\x40\x7d\x49\x5a\x77\x74"
+ "\x37\xfe\x06\x2a\xc2\x53\xbe\x2f\x8a\xbe\xb7\x3f\x15\x32\x31\x0a"
+ "\xfb\x87\xd1\xd0\x0b\x62\x40\x0b\xbd\xa1\x0f\xdc\x04\xb1\xd0\x17"
+ "\xfa\x61\xbf\x53\x07\xf1\x90\x00\x37\x43\x22\xdc\x02\xb7\x42\x7f"
+ "\xd0\x43\x12\x0c\xc0\x12\x25\xc3\x6d\xd8\xc7\xbf\x1d\x19\x33\x18"
+ "\x86\xc0\x1d\xe1\xcb\x55\x06\x19\x7a\xfc\x07\xff\xcf\x82\x0c\xfe"
+ "\xbd\xf4\x87\xf0\xff\xab\xe1\x8d\x52\xf8\x69\x29\xdc\xfe\x43\xf8"
+ "\xff\xd5\x70\xc3\xff\xf0\x73\xf0\xff\xe8\x53\x85\xe6\x5b\x58\x70"
+ "\x55\x58\xbb\x19\x1a\xaa\x92\xfe\xfc\xdf\x70\x83\xf4\x3d\xf0\x05"
+ "\xa7\x0f\xfd\xcb\xc0\xdf\x58\xf1\x5a\x0a\x20\x8d\xf9\x32\xe5\x9f"
+ "\xe7\x62\xd0\x5f\x24\x44\xfe\x3f\xeb\x22\xfc\x99\xf0\x67\xc6\xdf"
+ "\x7a\xfc\x6d\xc5\xdf\x2e\x19\xad\x80\xa1\xe3\xd3\xbe\xca\x06\x38"
+ "\x87\xcf\xff\x1c\x8f\xcf\x6a\x7c\x9e\x01\x68\xc7\x74\xff\x3a\x02"
+ "\xd0\x81\x00\x5f\x2a\xc6\x46\xaf\x2c\x0d\x50\xdb\x7d\x52\xbc\x1b"
+ "\xf0\xe7\xa6\x35\xc2\x60\x57\x69\xec\xf8\x68\x9c\x36\x2f\xd3\x30"
+ "\x66\xd4\xd8\x51\xe3\xc6\x19\x46\x8e\x34\xdc\x95\x36\xe6\xae\xd1"
+ "\x69\x63\x47\xdf\x35\xc6\x90\x36\x66\xc2\xd8\xf1\x13\xee\x1e\x6b"
+ "\x58\xb5\xa1\x28\x7f\x4c\xda\x8a\x3c\xc3\xea\xdc\xfc\x62\xc3\xf2"
+ "\xfc\xa2\x55\xeb\x73\x8a\xf2\x6e\x58\xa4\xef\xfa\x47\xa4\xdd\xe6"
+ "\x03\x2e\x8d\x60\xce\x4f\x82\xa8\xff\xac\x83\x28\xe7\x11\xe8\x29"
+ "\x2a\xa3\xf4\x0b\xfb\xb7\xea\xb1\x05\x9f\x0e\x5d\xd8\xef\xe3\xc9"
+ "\x2b\x86\x4e\x9c\xf2\x4a\x79\x3d\xa8\xbc\x85\xa0\xba\x3c\x16\x54"
+ "\xff\x95\x06\xaa\xcf\x8e\x81\xea\x2f\x8d\xa0\xfe\x49\x22\xa8\x47"
+ "\x1d\x07\x75\x4a\x35\xa8\x93\x34\xa0\xbe\xc9\xd9\x33\x6c\x5a\xbd"
+ "\x08\x5b\x7f\x18\xd4\xab\x96\x82\x3a\xe7\x08\xa8\xe7\xcd\x13\x61"
+ "\xbb\x2a\x40\xbd\x75\xec\xf7\xcc\x8d\xff\xee\xdf\xb7\xf5\x2f\x7a"
+ "\xfc\xd9\xb9\x9e\x61\x7a\xcd\x5d\xb1\x61\x06\x51\x7f\xf8\xfb\xe1"
+ "\xef\x87\xbf\x1f\xfe\x7e\xf8\xfb\xe1\xef\x87\xbf\xff\x97\xff\x39"
+ "\x54\x30\xf6\x6b\xb5\x06\x3e\xae\x00\x70\x59\xb5\xc9\x76\x55\xfa"
+ "\x4e\x5a\x73\x02\xb4\xb7\x0a\xb4\xfc\x2c\x16\xf1\xd3\xe0\x23\x1a"
+ "\x1b\xfe\x5e\xf8\x8b\xd1\x2a\xd7\xae\xd0\xda\xa4\x26\x7d\x1a\x44"
+ "\xe9\x41\xac\xa3\xb2\xb2\xd3\x62\x0f\xf2\x5d\xd0\x05\x5a\xbe\x36"
+ "\x96\xf6\x93\x22\x7e\x8b\x1d\xde\xd0\xcb\xeb\xae\x64\x38\x5a\x77"
+ "\x45\xeb\xb4\x10\x96\xaf\xd1\x8f\xb0\xce\x46\xc7\x0e\xe8\xd5\x53"
+ "\x0e\x02\xd0\xbe\xd4\xbd\xfb\x99\xa3\xb9\x04\xa0\xe9\xb0\xd8\x9f"
+ "\x4a\x6b\x70\x10\x7f\x9b\x1d\x9e\x4d\x14\xeb\xae\x98\x73\x2b\x86"
+ "\x63\x58\x97\x1d\x7e\xae\x91\xf2\xec\x92\xc3\x6d\xdb\xae\x40\xb3"
+ "\x81\xef\xbf\x71\x34\x1b\xbc\x30\x75\x30\x95\xbf\xb7\x1e\xd3\xef"
+ "\x8c\xb4\xe6\x46\x5e\x5f\x46\x79\x4b\xf0\x99\x21\xf9\x61\x19\x7b"
+ "\x2f\x92\xf3\x8b\x80\x23\x96\xd2\xca\x78\x90\xf6\x2e\x4c\x53\x21"
+ "\xe3\x41\x7a\x64\x1a\x1d\x53\x37\xf1\x3c\x8e\x86\xa3\xc9\xf0\x49"
+ "\x7a\x74\xde\x8f\x47\xb7\xa7\x9f\x59\x9e\x62\xb8\x65\xcc\xb4\xbc"
+ "\x94\x3b\x59\x5a\x5c\xea\x73\x69\x37\x65\xf4\xce\xe8\x37\x7a\x4e"
+ "\x9a\x5a\xa7\x1e\xa2\x4e\x4b\xd0\xa9\x7f\xf4\x04\xfd\x7b\x7a\x90"
+ "\x91\x3f\x0d\x9a\xf4\x6d\xb9\x3f\x36\xc4\x4c\x7a\xe6\xe9\x75\x19"
+ "\xef\xfe\xf2\xfe\x8c\x07\x16\x14\x0f\xfb\x38\x4d\x7d\xf3\x5f\x9e"
+ "\x7b\xdf\xf8\x35\x41\x0c\x1e\x42\xff\x2e\x6a\x8a\x4a\x1c\x66\x25"
+ "\x2c\xa7\x93\x0c\x1f\x53\xc8\x70\x4d\xba\x39\x77\xdc\xe8\xc3\x94"
+ "\xe3\xfc\x65\x23\xad\x94\xe6\xfe\x99\x22\x8d\x80\x18\x7d\x4c\x19"
+ "\x37\xea\x6d\x4a\x6d\xe0\x34\x80\x46\xe0\xf2\xe3\xee\x2f\x28\x14"
+ "\xa1\x43\x4e\xa5\xdd\x26\xe5\xfd\x32\xfd\xfb\xd8\x2b\xa3\xd4\x88"
+ "\x21\x61\xe4\x7d\x14\x3b\xda\x95\xe6\x32\x34\xa7\x6b\x56\xa4\x18"
+ "\x63\xc6\xfc\x12\xdf\x52\x56\xa4\xe8\xd4\xf8\xfe\x8c\x78\x27\x1e"
+ "\xe4\xfe\x44\x40\xe8\xd4\x43\x13\xd3\x73\x73\x7f\xfc\x99\x33\xf7"
+ "\xc7\x3a\x75\xc6\xe1\xdc\xf4\x8c\x5b\x77\x16\x8c\x48\x49\x4f\xc9"
+ "\x1d\xa7\x53\xf3\xe7\x84\x8c\xa1\x3f\x7f\x4c\xa7\xbe\xf3\xa3\xb4"
+ "\x78\x9d\xea\x0f\x75\x2a\xf8\x44\x3d\xf7\xe8\x27\x51\x7f\xfd\xeb"
+ "\x09\x18\xbe\xea\x84\x6a\xf8\x8c\x13\x6a\x55\xfc\x89\xd8\x47\xe1"
+ "\x0f\xba\x18\xf8\x83\x1e\x7f\x86\x07\xa0\x45\x55\x9a\xd5\xa2\x5e"
+ "\xbf\xb4\x25\xaa\xb4\xb5\x45\xf3\x08\xb4\x44\x2f\x89\x6f\xe9\xf5"
+ "\xc0\xc3\x2d\x31\x8f\x7c\xde\xa2\xbd\x13\x5a\x7a\x03\xb4\x0c\x06"
+ "\x75\xcb\x10\x48\x6c\xb9\x2b\xfe\xe9\x96\x07\x06\xa9\x1b\x6f\xee"
+ "\x9e\xdc\x38\x40\x73\x7f\x63\x8a\x0e\x1a\x87\xf6\x81\xc6\x1f\xc5"
+ "\xc6\x36\xde\x89\xbf\x61\x50\xd7\x98\x86\xdf\xe9\x90\xdc\x18\xbd"
+ "\xb1\x17\x80\xa0\xe5\x84\x01\xe0\xc4\x60\x98\x74\x62\x08\x3e\xef"
+ "\xc0\x5f\x0a\xfe\x86\xe2\xef\x4e\xfc\x61\xff\xe5\x04\x9d\x37\x04"
+ "\xc6\x5e\xe9\xbf\xfd\x28\x27\x67\x6c\xce\xb8\x79\x53\xa2\xa2\xf2"
+ "\x52\xe0\x26\xe4\x9a\x26\x3d\x65\x70\xf4\xf8\xe8\xbc\x94\xcf\x9c"
+ "\x19\xf8\xaf\x4e\xfd\xf8\xbf\x47\xf5\x1a\xed\x1a\xef\x5a\xfa\xee"
+ "\x67\x5e\xe8\x83\xfc\x87\x50\x1d\xee\xb6\x82\xca\x89\x34\x3a\xad"
+ "\xdd\x93\x5d\xd6\x58\x9d\x1d\x7a\x9b\x64\x3d\x16\x71\x1f\xeb\x9c"
+ "\xd6\x32\xd4\xbf\xd8\xd4\xf0\x71\x5b\x28\x2e\xf3\x3a\xe9\x72\xc3"
+ "\xc7\x91\x4e\xc7\x96\xc9\x71\xdd\xea\xa6\x2c\xfc\x46\xfd\xd7\x8e"
+ "\x0f\x86\x6d\x8c\x72\x5a\x55\x5b\x30\xee\x68\x4f\x3c\x8d\x88\x67"
+ "\xea\xcf\x31\xae\x25\x4c\xdc\x83\x4e\xeb\x1c\xca\xa3\x3d\x24\x0f"
+ "\xa7\x9c\x07\xed\xfb\xae\xc1\xfa\x45\x76\xc7\x67\xed\xdd\x40\x69"
+ "\x6d\x6e\x07\x1c\xf6\x75\xaa\x34\x96\x93\x40\x78\x5c\xd6\xbe\x29"
+ "\x72\x7a\x82\xa3\x33\x0a\x68\xbf\x1e\x5f\x17\x0a\x7d\xe7\xd3\xba"
+ "\xd0\xdd\x88\xc3\xb0\x4e\xd5\xff\x1c\xc4\x7a\x29\x8d\x1d\xfa\x9a"
+ "\x9c\xea\x3f\x61\xde\x7d\x97\xca\x76\x0e\xc3\xd2\x41\xac\x3f\x77"
+ "\x62\xd9\xcb\x30\xae\xa4\x27\xcd\x7f\x4a\x10\x7c\xe9\x5b\x25\xc7"
+ "\x5d\x6f\xad\xa1\x48\xc3\x98\xd3\xfa\x27\x1f\xa6\x39\xd9\x13\x1f"
+ "\x2b\x73\x5a\xd5\x4f\x63\x5c\x67\x98\xb8\x2d\x22\xaf\x7e\x9a\x30"
+ "\x71\x56\x8c\x53\x63\x9c\x21\x42\x5c\x14\xc6\xa5\x87\x8b\x6b\xae"
+ "\xe6\x38\xb3\xfd\x3c\xef\xd7\x37\x03\xbf\x4d\x32\xcf\x6f\x5c\x1e"
+ "\x92\xf7\x18\xe4\x7b\xbf\xea\x50\xfc\x84\xdb\xa9\x3e\x45\xf8\x1a"
+ "\x7a\xe6\x7d\x52\xe5\xb4\x66\xa2\x2e\xf4\x3b\xd3\x33\xee\xcf\x03"
+ "\x91\x0f\x44\x97\x23\x4c\x5c\x32\x96\x07\xed\x75\x5c\x6c\x18\x9c"
+ "\xbd\x30\xce\x8e\x71\xc6\x1b\xc8\x43\xc7\x6d\x38\x9d\x8b\x30\x08"
+ "\xa2\x3b\x20\x61\x22\x95\x47\xe8\x05\xf4\xea\x80\xf8\x53\xdd\x62"
+ "\x8d\xbc\xc3\xb0\x11\xa2\xf0\xfb\x10\xb3\x36\xde\x82\xf1\x5d\xa8"
+ "\x4f\x5a\xdb\x15\x0f\x74\x40\xdc\x4e\x84\x89\xa2\x3d\xad\xd4\x3e"
+ "\x61\x78\x94\xcd\xed\xa1\x7d\x1d\xa8\x67\x71\xbf\xc6\xa7\x1a\xd3"
+ "\xbd\x40\x3a\x34\xb7\x1a\x52\x88\x46\xbe\xae\xd5\xda\xa8\xa2\x75"
+ "\xa2\xd4\x1e\x3a\xd5\x70\xa7\x93\xeb\x6c\x1c\xb6\x7f\xda\x3a\x69"
+ "\x4d\x2f\xd1\xa0\xc1\xb4\x9b\xd4\x3a\xbe\x46\xdc\x81\xb8\x88\x86"
+ "\x87\x7d\xd6\x46\xb5\x1f\x8f\xba\xf1\x26\x5a\xef\xdb\x6d\x55\x4f"
+ "\x77\xaa\xe3\x98\xc0\xa3\x33\xc8\x78\x08\x0e\xf3\xe2\xeb\xe6\xbb"
+ "\xad\x9a\x4a\x05\xcc\x54\x65\x5e\xa3\x9d\x10\x45\x34\x9f\x03\x5d"
+ "\x35\xe5\x27\x95\x91\xaf\xc1\xb5\xad\xf3\x80\x0d\xfd\x8b\x0e\xd0"
+ "\x59\xb0\xac\x86\x26\x37\xed\x7d\x6e\x8c\xaf\xdd\x0c\xc0\xeb\x85"
+ "\x1a\x0c\x12\xce\x2a\x19\x27\xe1\x50\x94\x35\x41\xe4\x4f\x65\xd5"
+ "\x82\x04\xdb\xac\xa4\x91\xf0\x62\xb9\xfa\xd7\x20\x5c\x33\x7a\x2d"
+ "\x12\x4c\xa7\x0c\xa3\x90\xc1\x60\x89\x3e\xe2\x0f\xc9\x6c\x91\x5c"
+ "\x3f\x5d\xd6\x78\x6c\xff\x6f\xea\x14\xf5\x36\x10\x2e\xd1\xa0\x17"
+ "\x34\xa8\x90\x06\x55\xa3\xc0\x1f\x9f\x29\xe3\xb7\x83\xce\xad\xa4"
+ "\xb9\x86\xc3\xea\x7a\x8b\x7a\xca\x61\xcd\x01\xd8\xb8\x20\x58\xe4"
+ "\x85\x5a\xc8\x00\xd4\x76\x88\xcf\x45\x7e\x44\x21\x4c\x3d\xca\xdb"
+ "\x20\xc3\x48\xe5\xd7\x63\xdc\x24\x09\x5f\xb3\x02\x9f\x99\xf0\xd1"
+ "\x3a\x59\x61\x7b\xe3\xed\x01\xdb\x07\x2d\xf8\xed\xe8\x69\x5f\xa9"
+ "\xbe\x26\x68\x11\x2e\x85\xc2\x0b\x87\x80\xee\x3c\xc4\x7f\xd1\xad"
+ "\x8e\xea\x14\xbc\x48\x40\xfb\xd7\xf7\xb0\x9c\x06\xbf\xc7\xda\xc1"
+ "\xe0\x96\xf2\xcb\x25\xde\x04\xec\x2d\xe5\x99\x30\x4f\xce\x53\x8e"
+ "\x57\xd6\x99\x8c\xde\xa3\xd1\x3f\xc9\x78\x3d\x23\x39\x63\x90\xec"
+ "\xbb\x4c\x6c\x5e\x9e\x32\xda\x39\xb1\xd9\x30\x2e\xed\xd5\xbc\x94"
+ "\x54\xde\xf6\xdf\x79\x2e\x6d\x08\xb6\xee\x7f\xe1\xff\x56\x52\x48"
+ "\x0a\x0f\xc1\x70\x7a\x1f\x42\xef\x92\xbf\x80\x6f\xf3\xe7\x46\xc5"
+ "\x0c\x2d\xa2\x37\xe1\x39\x64\xdc\xba\x78\x59\xd4\x54\xe9\xbd\x9f"
+ "\x88\x19\xc1\x7d\x0e\xe3\x7d\xf4\xfe\x23\x8e\x6b\xf4\x61\xca\x79"
+ "\xd4\x73\x69\x3f\x5d\xf0\x9b\xa8\x13\x4f\xaf\xcc\x88\xbd\xd3\x4a"
+ "\x30\xa9\x0f\xa5\xbd\x84\x21\x4d\x14\x32\xe4\x65\x4e\x81\x32\xd5"
+ "\x31\x4a\x25\xc5\x27\xa7\x4e\x4b\x7b\x7e\xe1\xdc\x3b\xfe\x92\x96"
+ "\x70\xf3\xc7\x8b\x9a\x28\xfd\xcd\x09\x41\x39\x0d\x09\x50\xf5\x44"
+ "\xf9\xb0\xed\x77\xbf\x2a\xb0\x2c\x98\x1b\xf5\x97\x8c\x41\x6b\x8a"
+ "\x28\xf4\x0e\xee\x8b\x91\xaf\x32\xfa\x72\x5a\xf4\xd3\x0b\x3e\xfb"
+ "\xdd\x82\x57\x4e\x3f\x36\x0c\x4b\x7a\x73\xe5\xe9\xc7\x16\xbc\xf2"
+ "\xd9\xef\xa2\xb6\x12\xe4\xf0\xdc\xb4\x44\x43\xf4\xc4\xb5\xcd\x0f"
+ "\x0f\xe3\x54\xf5\xdf\xa9\xaf\x4a\x3a\x3c\xa0\x7e\xe0\xf1\xe4\x96"
+ "\xdb\xfe\x7d\xd0\x3f\x6f\xff\xd2\xe0\x1c\xcc\xd0\x8f\x98\x9c\x36"
+ "\xd8\xef\x47\x00\xfa\x11\xe7\xd0\x8f\x28\x45\x3f\xa2\x55\xe9\x47"
+ "\xfc\xb1\xcf\x84\x12\xe1\x4b\x08\x78\xe1\xff\xa4\xfe\x3b\xfa\x3f"
+ "\xab\xd1\xff\x49\x3d\x11\x3d\xff\x91\x13\xb1\xf3\x84\xff\x13\x1f"
+ "\xd7\x8b\xfb\x40\x49\xf8\x44\x3f\xe8\x0f\x83\xf1\x69\xc4\xef\x61"
+ "\x09\x31\xc1\x3e\xd1\x9c\x7e\x2d\xd1\x8b\xd0\x27\x4a\x47\x9f\x28"
+ "\x23\xa7\x45\x3b\xfd\xa3\x96\xde\xe3\x33\x5a\xfa\xf8\xfd\xa2\xfb"
+ "\x5b\xa6\xea\x47\xb7\x4c\xd7\x40\xcb\x83\x20\x7c\xa3\x6d\x90\xf6"
+ "\x47\x4d\xa2\xea\xcf\xb1\xa0\xf9\x73\xbf\xba\x3e\x7f\x8e\x6b\x6c"
+ "\xfc\xb3\x0e\x7f\xf1\x50\xf7\xe7\x04\x88\xf9\x78\x72\x1d\x7c\x3c"
+ "\xa5\xd4\x7e\x42\x03\xfd\x4e\xf4\x86\xcb\x27\xe2\xf1\xb9\x74\x3f"
+ "\x9c\x78\x06\x34\x27\xfa\x68\x2e\x07\xca\x9b\xf8\xc5\x89\xc1\x9f"
+ "\x4c\x3c\x31\x24\xfd\x83\x13\x77\x4c\x9d\x73\x22\xe5\x93\x4f\x4e"
+ "\x0c\xb5\x0f\x52\xfa\x4d\x54\x66\x80\x11\xdb\xc8\x83\x45\x7e\x8f"
+ "\x33\xf6\x4a\xeb\xb5\x3d\x8f\xfb\x83\x3f\x96\xfc\xc2\x1f\x67\x4c"
+ "\x7b\x7a\xc1\x82\x65\x51\xea\x8c\x41\xdc\xbb\x94\x3c\xcd\x80\xf7"
+ "\x19\xec\x73\x4e\x6c\x0e\xf8\x9c\x29\xce\x80\xcf\x69\xe8\x35\x71"
+ "\x5d\x90\x7f\x76\x0d\xc3\xce\xa4\xa7\x18\x86\xa6\x71\xcf\xec\x74"
+ "\x52\xa8\xb7\x36\x6a\x57\xda\xc4\x14\xed\xb8\x36\xf4\xd9\x62\x76"
+ "\x3c\xb3\xec\x97\xf4\x43\xaf\xed\x1b\x9d\xfa\xe9\x27\x73\xc6\x67"
+ "\x6f\x1d\x8e\x32\xbf\x99\xbc\xe0\x98\x67\xb6\x37\x3c\xf3\xcc\xd3"
+ "\x0d\x27\x1e\x9b\x3b\xec\x6d\x0c\xfb\x38\xc5\x8c\xfa\xf3\xb7\xdc"
+ "\xbf\x8d\xbe\x9c\x1e\xfd\xcc\x23\x0d\x4f\x1f\x58\xb1\xa2\x99\xf4"
+ "\x85\x64\x2b\xb7\x51\xdd\xd6\x04\xf4\x49\x54\xef\xba\xac\xb7\xa0"
+ "\xff\x93\xd4\x12\xda\x96\xfd\x50\x2f\x7f\xa8\x97\x3f\xd4\xcb\xff"
+ "\x89\x7a\x79\x2b\x88\x7a\x99\xb4\x33\x5c\xbd\x9c\x3e\xeb\xfe\xd9"
+ "\x13\x0c\x6b\x97\x19\x0a\x8b\xd6\xac\x28\xca\x59\x65\x28\x58\x93"
+ "\x93\x9b\x97\xdb\x07\xfc\x11\x39\xcb\xcc\xf9\xeb\x72\xcc\x79\x3d"
+ "\xf6\x40\xea\x65\x9f\xb4\xa7\x6f\x9d\xe4\x8e\xec\x5b\x0f\x48\x0c"
+ "\xdf\x2f\x51\x61\xdb\x3e\x20\x2d\x4c\xdc\x10\x29\x6e\x46\x98\xb8"
+ "\xfb\xa4\x38\x53\x98\x3e\x60\x5f\xd1\xc7\x18\xb0\x2d\x5c\x1c\x86"
+ "\x57\xcb\x3e\x09\xf6\xd3\xd4\xcd\x43\xba\x80\x7c\x92\x0e\x18\xf0"
+ "\x09\x96\xa9\x13\xe3\x8f\xcb\xbe\x8c\x1d\x06\x6c\x93\x7d\x34\xa9"
+ "\x1f\x62\x74\x5a\x33\xb0\x9c\x03\xec\x61\xfa\x28\xc3\xa5\x7c\x3d"
+ "\x01\xdf\x68\x96\xc1\x65\x1d\x18\xdb\xd3\x37\x3a\x0d\xa2\x0f\x39"
+ "\xd0\x18\x02\x3b\x5e\x86\x45\x7f\x92\xce\x86\xe8\xa2\xbd\x6b\x5d"
+ "\x30\xf0\x38\xb3\x26\x55\x91\x4f\x49\xfd\x48\xc2\x23\xfa\x92\x6d"
+ "\xbc\x2f\x89\x7d\xc5\x76\x4c\x6b\x56\xf4\x27\xdb\xd1\x37\x8e\xa1"
+ "\xfe\x64\x07\x0c\x3c\x44\x7d\xca\xdd\x1c\xd7\x79\xc2\x35\x93\x70"
+ "\xd9\x61\x60\x23\xf7\xfb\x44\xda\x7a\xc5\xb8\x19\xf6\x6b\x07\xf2"
+ "\xf3\x45\x65\xbf\x10\xe3\x4f\xdb\x35\x89\xc7\xe5\x32\x90\x2f\x28"
+ "\x95\xa3\x4c\xc8\x61\x60\x98\xfe\xcf\xe9\x4a\xd1\x0f\x4c\xf6\xf7"
+ "\x7f\x08\x9f\xcf\x9a\xf4\xeb\x1a\x8e\x33\x39\x45\xc6\xa9\xd4\xcb"
+ "\x65\x6b\x56\x2f\xcf\x5f\xb1\xb6\x28\xcf\x50\x3c\x63\x86\x61\xd5"
+ "\x9a\xdc\xbc\x51\xa3\x46\xf5\x09\xd2\xbf\x58\xe1\xd3\xfe\x29\x83"
+ "\xf4\x90\xfc\x5a\x49\x0f\x33\xd0\xe7\x94\xfc\xe6\xe4\xb2\xe0\xfe"
+ "\xc5\x9f\x32\x24\xff\x56\x87\x30\x69\x12\xcc\xe1\x20\x18\xc4\x27"
+ "\xf9\xc8\xe4\xe7\xf6\x93\x60\x5a\x42\xf1\x60\x1c\xef\x17\xd1\x7e"
+ "\xbc\x6e\x51\xbe\xae\x10\x3c\x93\xa5\xfe\x0e\xea\x7d\x2f\xa9\x9f"
+ "\x70\x9b\x2e\x04\xcf\xe4\x40\x7f\x43\x25\xc3\x8c\x55\xf6\x4d\xf0"
+ "\x7b\xaa\x2c\x93\x80\x1f\xdf\xd4\x29\x70\xab\x74\x01\xbf\xff\xb6"
+ "\x82\x90\xbe\xd4\xad\x01\xdc\xa0\x93\x60\x2a\x82\x69\x6c\x3a\x2f"
+ "\x95\x55\xab\xc0\x73\x2c\x18\x4f\xd3\x7f\x49\x78\xa2\x14\x30\x6d"
+ "\x21\x34\x76\xf6\xa4\xb1\xb1\x9f\xc0\x5d\x87\xf9\xdb\xa5\xb2\x0d"
+ "\x0a\x29\x3f\xc2\x70\xdc\x89\x08\x93\x2c\xc3\x8c\x55\xf6\xa5\xa8"
+ "\x3f\xc7\xf7\x68\xc2\xa0\x19\xa4\x4f\xf8\xeb\x85\x74\xff\x4b\xd1"
+ "\xa7\x8b\x91\xd2\x85\x96\xbf\x6f\x37\xf6\x17\x6a\x83\xfa\x69\x83"
+ "\x42\xca\x8f\x7d\xc3\x04\x99\x47\x1a\x19\x26\xb4\xfc\x76\x41\x63"
+ "\x7c\x7c\xa0\xfc\x83\xda\x42\xf0\xdc\x4a\x3a\x45\xb8\x14\x79\x79"
+ "\x42\xf0\x9c\x93\xf8\xa8\xe0\xf5\xed\x86\x10\x79\xfc\xa7\x44\x8f"
+ "\x82\xd7\xb7\x4f\x0d\xc1\x73\x89\xe2\x83\xcb\x75\xbb\x29\x04\xcf"
+ "\xa5\x40\xb9\x50\x8f\x05\xcc\xce\x90\x7e\xac\x9a\x59\x3f\xee\x1b"
+ "\x82\xa7\x5e\x86\xe9\xee\xf5\x74\x9d\x90\xed\xed\xcd\xb2\x2d\x12"
+ "\x72\x4d\xe6\xfb\x76\x31\xfc\xac\xd2\x16\x20\x5d\x9d\x3d\xf9\x64"
+ "\x80\x50\x3e\x29\xe8\x92\xfa\xe2\x86\x94\x90\xf2\x9d\x97\xf8\xd4"
+ "\x47\x81\x27\x33\xa4\x7c\xff\x25\xe1\x89\x56\xc0\x84\xc8\xbf\xa9"
+ "\x4b\xc2\xa3\x51\xc0\x84\xea\xff\x05\x09\x8f\x32\xaf\x63\x37\xe6"
+ "\x93\x21\x48\xff\x89\x57\x18\xd6\x75\x83\x31\x28\xad\x98\x3b\x18"
+ "\x8c\xed\xdf\x61\x3e\x06\xcf\x12\x86\x2f\xa2\xb3\xa6\xd0\x46\x67"
+ "\xf0\xb1\xc1\xab\x64\xa7\x07\x5b\x6a\xd1\x9e\x89\x32\x40\x9a\xb0"
+ "\xdd\x83\xf9\xbe\x75\x4c\x9b\x65\x87\x7e\x66\xe5\x3c\x80\x1d\x06"
+ "\xef\x94\xe2\xb0\xfc\xb7\xb4\xc9\x71\x14\x2e\xc6\x17\x07\x63\xfb"
+ "\x97\x54\x28\xda\xb1\xc1\x05\x12\x2c\xda\xfd\xe4\xcc\x70\xfb\x9a"
+ "\x23\xcd\xbf\x14\xeb\x99\xaf\x34\x09\xe5\x5f\xd9\xdf\xee\xb3\x32"
+ "\xb0\x59\xdc\x60\x18\x00\xa5\xe7\x60\x88\x96\xfa\xf8\xbb\x37\x82"
+ "\xb6\xb4\x90\xb9\xe9\x5c\xda\x56\x47\x17\x94\x3a\x58\x27\x9d\xfd"
+ "\xba\xf9\x32\x68\x6d\x1e\x7e\x8f\x9d\xbe\xb9\xe4\x8b\xb0\x7b\x75"
+ "\x7d\x6a\x06\xa5\xc9\x94\xb6\x1d\x5a\xab\xdb\xa1\xb4\x3a\x38\x6d"
+ "\xe9\x6d\xa0\x3f\x45\xe7\xc8\x5a\x21\x8e\xe8\xa0\xf9\x14\x4f\x42"
+ "\x7f\x7b\xc9\x0b\xa0\x29\x45\xef\xf2\x54\x6e\xa3\x4c\xcb\x69\xa2"
+ "\x65\xdb\x79\xd0\xbe\xb2\xbc\x51\xbd\xf5\x3c\xd1\x7b\xbb\xfd\xad"
+ "\x8d\x6e\x75\x93\x7e\x06\x34\xe9\xcf\x42\xb3\x7e\x22\x34\x5b\xa6"
+ "\xc2\xee\xf3\x10\xdb\xe4\x4e\x87\x66\xcd\xfd\xd0\x9c\x32\x15\x6c"
+ "\x5d\xf8\x6e\xf0\x22\x8c\x93\x9f\x8b\xd4\x01\x43\x1a\xf7\x3d\x09"
+ "\x5a\xbb\xc0\x89\x3c\x1b\x72\x52\x3e\xe3\x87\xbe\xc3\x95\xa3\x38"
+ "\x09\xf4\x48\x5f\x27\xd2\x72\xcf\x39\xb8\x23\x3a\x45\x0f\x69\xd4"
+ "\xfe\xda\xaa\x3c\xa0\x29\x81\xde\x11\xf4\x22\x91\x9f\x0f\x8a\x7e"
+ "\x54\xcd\x7e\x6c\xeb\xf1\xd9\x8d\x3a\xe1\xb2\xde\x91\x8e\x79\x9f"
+ "\x95\xc6\xbd\xba\x4a\x0f\xa1\x9e\xad\xcf\xa6\xf3\x42\xb0\x9d\xbe"
+ "\x23\x5b\x8e\xa3\x73\x4f\xe9\x3c\xd3\xd1\x89\xa0\xb3\x79\x32\xe0"
+ "\xc3\xab\x9d\xb4\x27\xbf\x8b\xce\x49\x20\x7c\xd8\xe6\x47\xd1\xf8"
+ "\x13\xd2\x33\x0c\xdb\xf8\xae\x3b\x10\x0e\xd3\xa3\xfc\xff\x9d\x8f"
+ "\xb9\xb0\xfe\x0b\x9d\xbe\xfe\x0b\x2f\xfb\x0e\x2c\xec\x66\x07\x16"
+ "\x7e\xed\x3d\xb0\xf0\xab\xd2\x0d\xa0\xf5\xf6\x5f\xe8\x68\x2d\xe4"
+ "\x32\xd0\xb5\x16\x5e\xa0\xfd\xf5\x5a\xba\xc3\x72\xf1\x53\x28\x7b"
+ "\xcf\x3f\x60\x53\x3e\xe8\x7d\xf1\x83\xaa\x6c\x9e\xbf\xc2\xe2\x12"
+ "\x60\xf8\x7e\x24\x5c\xf9\xba\x13\x0c\x06\x79\x3c\xcd\x65\x4d\xd1"
+ "\xd9\x35\xb7\x72\x1d\x75\xc4\x1b\x0d\xf8\x4b\xc1\x9f\x11\x7f\xa9"
+ "\x2c\xc1\x90\x8a\xbc\x2a\xed\xb7\x45\x05\x74\xae\xcf\x68\x1f\xa8"
+ "\xce\x43\x4a\x2a\xd2\xaf\x8b\xc0\xb7\x64\x5f\xe5\x8a\xa5\x77\x96"
+ "\xc1\x66\x3a\x0f\x98\x7c\x00\xaa\x5f\xe4\x8f\x62\x3e\x16\xbb\xa6"
+ "\xbf\x68\x8f\xf6\x63\x3d\x4a\x58\xb1\x94\x7c\x3a\xe7\xcf\x4c\x2a"
+ "\xc7\xcf\x4c\xea\xee\x84\x15\xcb\x10\xa6\x1a\x61\xb2\x24\x1e\x76"
+ "\x12\x2e\xac\x37\x8e\xbe\x1e\x88\x42\x9c\x85\xef\x5e\x69\xd3\x1c"
+ "\xdc\xcf\xce\x22\x5c\xb3\x1f\x17\xe2\xde\xc7\xfd\xa4\x94\x36\x39"
+ "\x8c\xfc\xa4\x5d\x08\x47\xe9\x6d\xee\x0c\x9a\x33\xb4\xdb\x0a\x3a"
+ "\xe9\x5c\x8b\x3e\xec\x9a\xc8\x8f\x7c\x38\xaa\xab\x7d\xdd\xd0\xcb"
+ "\x65\x85\x2c\xc2\x4d\xe9\xe8\x1e\x0f\x4c\xb7\x8c\x95\x9a\xd0\x5f"
+ "\x84\x59\x2e\x66\x52\xd1\x19\xb7\x4d\x98\x5e\xe4\x3d\x34\x43\xa6"
+ "\x91\xf2\xe0\x67\xdc\x12\x9d\xa8\x0f\x4d\x05\x6e\xe8\x5b\x45\xe3"
+ "\xe4\x30\x97\xf0\x11\x2e\xd4\x03\x3b\x96\x75\x59\x53\x81\x03\x7c"
+ "\x2c\x08\xa7\x5d\xc2\x57\x11\x84\x0f\xc3\x19\xe2\x23\xfd\x6b\xc6"
+ "\x34\x7d\xeb\x38\xbe\x39\xef\xfa\x08\x9f\x1b\x34\x06\x4e\xef\x02"
+ "\xc2\xc1\xcf\x8a\x46\x9c\x8d\xeb\xee\x43\xdf\x71\xa8\xdb\x51\x6a"
+ "\x8a\xe2\xfb\xe9\x31\xfd\x5b\x9b\x3b\xa3\x59\x77\x76\x54\x3f\xbe"
+ "\x97\xfe\x3e\xa0\xb9\x56\x84\xf9\x3b\xeb\x36\x45\xf5\xed\x42\x5f"
+ "\x0f\x61\xe8\x7c\x2d\xa2\x53\x29\xcb\x39\xd3\x16\x4c\x84\x05\x53"
+ "\xa7\x4f\x9d\x08\x33\x27\x4f\x99\x08\x69\xf7\x8c\x4c\x1b\x7b\xf7"
+ "\x4f\xee\xe6\x2f\x77\xff\x64\xfc\xdd\x90\xf5\xc8\x9c\x89\x90\x35"
+ "\x6b\x22\xcc\xc5\x5f\xd6\xdc\x69\x73\xa6\x4e\x9b\x3b\x11\xb2\xef"
+ "\x9f\x8e\x5f\x53\x26\x8e\x49\x7b\x60\x64\xd6\x94\xe9\xd3\xe0\xe1"
+ "\x79\x77\xa5\xdd\x75\x17\x4c\x9e\x36\x63\x4c\x5a\x9a\xf4\x1c\x93"
+ "\x46\x20\x8f\x8d\x9f\x36\x77\x64\x56\xd1\x1a\xf3\x9a\x91\xb3\xa6"
+ "\x4f\xa1\x10\x98\x36\x6d\x62\x56\x90\x1f\x69\xf4\x5e\xf1\x12\xbf"
+ "\x9d\xec\x52\x26\x9d\x6b\x0c\x35\xa8\x07\xf8\xeb\xe2\xe7\x25\xc1"
+ "\x9d\xff\x56\x43\xf2\xe3\x6d\xc1\x8f\x12\xa9\x3d\x75\x59\x7f\x44"
+ "\xf2\xaf\x20\x3e\xd2\xd9\xc2\x1d\x30\xea\x59\x8c\x4b\x92\xfc\x91"
+ "\x68\x8c\x77\x07\xc7\x0f\x5b\x84\xf1\xb7\xd3\xf9\x3b\x36\xfc\x21"
+ "\xef\x9d\x68\x0f\x91\xc7\x0e\xe8\x2e\xcd\x8e\xe6\xe7\x1f\xa2\xdc"
+ "\xe9\x5c\x0a\x97\xf5\xce\xb1\x8a\x7a\xdf\x4e\xe7\x57\xd0\x78\xf2"
+ "\x45\xb8\xb3\x6f\xab\x39\x83\xce\xa8\x02\x9b\x59\xc2\x71\xd9\x8f"
+ "\xa3\x8f\x74\x86\xa2\xbd\x86\xce\x06\x11\x78\x4a\x14\x36\xc2\x4e"
+ "\x78\x76\x63\x9c\x84\xeb\xe1\x56\xb4\x15\x68\xcb\xcf\xfb\x4a\x8d"
+ "\xc0\x12\xfa\x77\xfa\xae\x19\x41\x8c\xbf\xde\x79\x4c\xa1\xdb\xce"
+ "\x66\x0b\xc2\xbd\x92\xa9\xa2\x73\x1a\xf8\x99\x0d\xf0\xa3\x46\xd4"
+ "\x71\xa7\xb7\xd2\x38\x86\x5d\xe2\xe7\x24\xf6\xc2\xf2\x8d\xc4\xf2"
+ "\xa5\xf8\x2a\x8d\x69\xfc\xcc\x51\x0e\x67\x4c\x64\xf4\x9d\x80\x70"
+ "\xd7\xfc\x61\xb7\x50\x98\x8b\xe6\x77\xe8\x0c\x6f\xc6\xc3\xa3\x30"
+ "\xfc\xaf\x68\xd7\xda\x10\x36\x8d\x60\x47\x7b\x20\x86\x9f\x8f\x52"
+ "\xaa\x82\x73\x60\x5c\xe4\x4b\x30\xde\xa5\xc8\x8f\xf0\x2c\x12\xed"
+ "\x18\xca\xe2\x12\xe2\xe9\xe6\xe1\x6a\x0c\x7f\x0f\xf1\xdf\x4d\xf6"
+ "\x52\xd8\xf0\x51\xf2\x59\x7d\x0e\xe1\x43\x8e\x92\xcf\xea\xeb\x14"
+ "\x78\x46\xbd\xd6\x84\xbc\xa4\x79\x02\x9a\xe3\x77\x59\x8d\xe8\xff"
+ "\xa4\x64\x8a\xb6\x72\x14\x5f\xe3\x49\xe7\xcd\x32\xdd\xeb\x15\x88"
+ "\x77\x6c\xe3\xc6\x2e\x7e\x77\xab\x1d\x8c\x05\xbe\x52\x13\x84\xd0"
+ "\x64\x24\xfa\xc9\x86\x20\x2f\x46\xa2\x1e\xf4\x76\x59\x87\x41\x88"
+ "\x1e\x24\x23\x9e\x31\x48\x5f\x1b\x96\x69\x0c\xe2\x49\xf1\x75\x9b"
+ "\x30\x5f\xec\x2f\x32\x13\xfa\x4a\x01\x1c\x52\xfa\x8c\xe0\xf4\x77"
+ "\xb6\x53\x3a\x84\x8f\x76\x75\x13\xfc\x9d\x9d\xc4\x73\x49\xef\x50"
+ "\x2f\x87\x15\x86\xe8\xe5\x2a\xa4\xe5\xc7\x8a\xf8\x8a\x90\xf8\x87"
+ "\x31\xfe\xa7\x52\x3c\xd6\xfd\x61\xf5\x21\xf4\x9e\xc4\xf8\x49\x48"
+ "\xaf\x13\xeb\x76\x14\xe6\x47\x67\xb0\x3a\x14\xf0\xf6\x10\x78\x0f"
+ "\xc2\x4f\x21\xbd\xa1\x76\x87\xe0\x6b\xa5\xba\x83\xf0\x5a\x97\x75"
+ "\xb8\x2e\x24\xff\x31\x08\x3f\x23\x40\xdf\xf0\xb4\xe0\xf8\xe1\x6e"
+ "\x8c\x7f\x98\x74\x1d\x9f\x8f\x93\xaf\x4f\xf6\x84\x6c\x59\x53\x01"
+ "\xc9\x6b\xf8\xd2\x10\xf8\x32\x84\xcb\x95\x78\xa4\x96\x78\x74\x58"
+ "\xea\xbb\x9f\x95\x68\xd8\x17\x92\xe6\x18\xa6\x29\x40\x3e\x8e\x91"
+ "\xf5\x32\x4c\x9a\x96\x90\x34\x9d\x24\x47\x26\xf2\xd1\xb8\xae\x05"
+ "\xd2\x48\x76\x52\x89\x83\xca\x76\x93\xcb\x3a\x22\x36\x18\xc7\xc8"
+ "\x0a\xcc\xd7\xbc\x4b\xd8\x9d\x9b\x50\x87\xee\xc2\xb0\x2d\x88\x73"
+ "\x1c\xd5\x81\xdd\xe4\x0f\x3a\xdc\xc0\x4a\x33\x63\x85\xee\x8e\x58"
+ "\xd5\xcf\x03\xf4\x3e\x92\xde\x09\x37\x73\xcd\x90\xea\xe4\x88\x55"
+ "\xf8\xa4\x70\x7e\xe7\x0c\xd9\x61\xe6\x7a\xc8\x27\x70\x8e\xd8\x43"
+ "\xf7\x85\xe1\xb7\x57\xca\x63\x03\x9d\x29\x8a\xf4\xdf\x85\xed\x0e"
+ "\xb0\xf5\x08\xb7\x11\xa6\x60\xf8\xe3\x18\xf6\x63\x09\x2e\xf0\xbd"
+ "\xfe\x21\x8f\x14\x3f\x52\xe4\x99\x49\xfa\x3e\x16\xbf\x87\x4a\xf8"
+ "\x6e\x23\xfc\xf8\x3e\x46\x7a\x57\x79\x09\xf7\x25\xb9\x4e\x8e\xe4"
+ "\xe7\x5c\x52\xbd\xe4\xf9\x61\x7a\x3a\xcf\x55\xca\x83\xe8\x9f\xde"
+ "\x01\xa9\x17\xf0\xf9\x30\x3e\xff\x48\xe7\xab\x96\x7a\x79\xfd\xa4"
+ "\xef\x77\xf0\x39\x07\x9f\x87\xf0\x39\x17\x9f\xbb\xf0\x79\x1f\x3e"
+ "\xf3\xa9\x9e\xd0\x59\xf1\x74\xe6\x0d\xb6\xb5\x42\xd7\x68\x2e\xd0"
+ "\x95\x49\x38\xa7\x21\x0c\xe7\x85\x4f\xd8\x1b\xad\x90\x6b\x2a\xbf"
+ "\x63\x07\xf5\x83\xc2\x62\x84\x7e\x88\x30\xaf\x6c\x97\x2e\x05\xc2"
+ "\x24\x5b\x25\xd5\x4d\x29\x4c\xe0\xcf\x42\xfc\xa9\x44\x2b\x13\xb8"
+ "\xa2\x85\x0e\x48\xf8\x45\x3a\x4d\x98\x3c\x55\xca\x3c\xf1\xc9\xcf"
+ "\x4b\xb2\xc3\x08\xee\xaf\xd9\x61\x64\x32\xdd\xe3\xe4\x23\x99\x14"
+ "\xc1\x0c\x94\x5d\x0b\xc9\x40\xd6\x29\x26\x74\xb4\x17\xbd\xfb\xd6"
+ "\xaf\x44\x1b\x85\xf1\xeb\x57\xfa\x24\x3d\xe4\x30\x3c\x9e\xd3\xc2"
+ "\xcf\xee\x40\x9c\x23\x2a\x48\x3e\x3c\x5e\x84\xa7\x2a\xf4\x32\xc1"
+ "\x65\x1d\x79\x38\x44\x2f\xdb\x50\x2f\x9f\x26\xfd\x23\x99\x11\x5f"
+ "\xfa\x15\x72\xbf\x40\xed\xc7\x7f\x49\xe8\x77\x8d\xb4\xce\x49\xd8"
+ "\x82\x91\x5d\x21\x75\x5b\x8b\x78\x7e\x1e\x62\x3b\xba\x02\x6d\xe4"
+ "\xa8\xe4\x10\xdb\x76\x18\xf3\x3b\x6c\xc7\xba\x25\xd9\x68\x67\x54"
+ "\x09\xd5\xbd\x51\xd8\xff\xbd\x90\xcd\x7d\xd5\x4a\xe3\x4f\x08\x8f"
+ "\xb3\x94\xdf\x11\xe0\x8c\x2a\x24\x9b\x31\x2a\x57\x8e\xe7\x71\xf1"
+ "\x2b\xec\x54\xa7\xa2\x0a\x78\x5c\x99\x1d\xee\xd0\xc9\x71\x20\xce"
+ "\x9e\x73\x46\x99\x79\x5c\x75\x00\xaf\x5e\x2b\xe1\x8d\x0a\x7b\xbf"
+ "\x43\x45\x7f\x37\x2a\xbf\x7a\x78\x19\x44\xdb\x3c\x67\x60\xb6\x87"
+ "\x79\x47\x94\x41\x6f\x9b\xe7\x28\x0c\x03\x88\xb7\x79\x8e\xd3\xc2"
+ "\xff\xc1\x36\xcf\x3e\xf4\x7d\xb6\x51\xfc\x87\xc3\xca\x54\x2a\x7c"
+ "\x96\xde\x09\x6a\x95\xcd\x53\x0d\x3f\x02\x0d\x3e\xcd\x70\xff\x76"
+ "\xe6\xb2\x79\x72\x11\xae\x00\x66\x7b\xd9\xa5\xa9\xd1\xec\xb3\x25"
+ "\x5e\xd0\xcd\xd8\xce\x4a\x6d\x1e\xec\x87\x78\x4e\x62\xb8\x8f\xcd"
+ "\xf6\x7e\x83\x3f\x17\xf3\x55\xe8\xb5\xb3\xbd\x97\xd8\x94\xed\x1f"
+ "\xe2\xf7\x67\x6c\x4a\x74\x29\x43\x79\x32\x9b\x27\x1d\x5a\x9d\x4e"
+ "\x84\x1f\x0b\x6c\x4f\x7f\xf7\xe2\xcb\x6a\xb8\x46\xf7\x32\xec\xd1"
+ "\x6b\xb1\x3c\xfa\x6b\x58\x16\x96\xa0\xef\x7f\xed\x67\xf8\xac\xd4"
+ "\xdf\xca\xbf\x75\x7a\x23\xab\xd0\xeb\x47\x96\x61\x9f\xc4\x82\xe5"
+ "\xf0\x3a\x18\xfa\x3b\x1a\x9b\xe5\x2c\xf4\xdb\x42\x7e\x7d\x3a\xd0"
+ "\x1d\x73\x28\xaf\x38\x81\x57\xaf\xa7\xfe\x1c\x8b\xc7\x74\x95\xfa"
+ "\xa1\x1c\x47\x85\x3e\x33\x4e\xc5\x1c\x68\xdf\xe3\x88\x17\x36\xcf"
+ "\x59\xa0\x3b\xe9\x89\x07\x74\xc6\xf8\x6c\x2f\xdd\xb1\xa1\xcf\xbc"
+ "\x16\xaf\x1f\x8f\xbf\x6c\xfc\xed\x40\x3a\x5e\x64\xd6\xc4\x8f\xe8"
+ "\x4c\x4e\x4c\x7f\x04\xbf\x1b\x9c\xfc\x7c\x6a\xa2\x01\x62\x10\xfe"
+ "\x08\xea\xd5\x54\xd4\x4f\xa2\xb5\x8d\xe7\x53\xa9\xff\x9b\x93\xf1"
+ "\x32\xfc\x2f\xa9\x0c\x7f\x95\xca\xe4\x96\xea\x1b\x85\xb9\xf0\x7d"
+ "\x9e\x8b\x71\xba\xdc\x4c\x97\xa4\x75\x63\x1d\x46\xbe\x96\x11\x1f"
+ "\x91\xaf\x65\xc4\x4b\xc4\x8f\x7d\xcb\x9d\x58\x8e\x24\xed\xb5\xf8"
+ "\x24\x3d\xab\x4c\x1a\x7e\x8d\xfb\x3d\x49\xe3\x9d\x1c\x4f\xd2\x4f"
+ "\x10\xcf\x22\x8e\x47\x97\x34\x9e\x55\x24\x65\x7a\xad\x06\x98\xbd"
+ "\x81\xb9\x67\x7b\xb6\x78\x96\x6c\x80\xa8\x54\x28\x53\x51\xbf\xc7"
+ "\x66\x29\xc0\x72\x36\xe3\x73\x2a\xc6\xc3\xcd\x98\xd7\x87\x88\x77"
+ "\x3c\xe5\xc7\xf6\x24\x65\x22\xce\x69\x88\x2b\x97\xe8\xbb\xaa\x06"
+ "\x1d\x7e\x67\x5f\x25\xfa\x2b\x92\x2c\x88\xbb\xca\xa7\x4b\xda\x21"
+ "\xeb\x10\xe9\x8f\xe0\x1b\xe9\xcd\xab\xd8\x7a\x81\x6e\xb6\x85\x79"
+ "\x30\x4e\x67\xb3\x50\x78\x35\xb4\x16\x22\x8c\x85\xe2\xcd\xf8\x3e"
+ "\x13\xdf\xb7\x01\xe9\xcf\xac\x42\xe7\x96\x51\x65\x85\x74\xff\xc9"
+ "\x87\x4b\x3c\x5a\x58\x5c\xa8\x29\x6b\x2d\xec\xc2\xb8\x2e\xc0\xb0"
+ "\x52\x9b\xa5\x9a\xf7\xd3\x50\xae\x1e\xaf\x6e\x80\xde\x5b\x91\x64"
+ "\xea\xe7\x2c\x65\x36\x8b\x19\x61\x0b\x61\x58\x99\x56\xc5\xe1\x2d"
+ "\xb9\xbc\x3c\xbe\xdd\x65\x40\x69\x4e\x99\x8e\x02\xf5\xf7\xb0\xec"
+ "\x8e\x53\x5d\xdb\x48\x47\x7d\xbe\x8a\xa4\x4e\xd4\xcf\x6b\xa7\x4c"
+ "\xfb\x60\x66\x57\x59\x0c\xf2\x43\x85\xe1\xde\x53\x5d\xcd\x08\x7b"
+ "\x52\xe8\xec\x06\x4f\xdc\x29\xd3\x36\xf0\xe8\x92\xb2\x3d\x15\x49"
+ "\xee\xd9\x1b\xae\xb1\x99\x26\xf6\xe1\xe3\x5d\x65\xa8\xa7\x47\x61"
+ "\xe6\x05\x4f\x54\x6b\x21\xea\xfc\x06\x17\x86\x7b\xb8\xfe\xcf\xbc"
+ "\xd0\xcd\x66\x3d\xc5\x2e\xcd\xde\xf0\x19\x3b\x65\xca\x85\xc5\x4e"
+ "\xe8\x77\xd3\x16\xe6\xa3\x7a\x71\xb2\xfd\x28\xdc\x74\xb6\x13\xa8"
+ "\x4e\xcc\xc8\xf1\xb1\x99\x17\x2e\xb1\xc5\x4f\x61\x1f\xd7\x92\x8e"
+ "\x34\x22\x5f\x9c\xfb\x88\xdf\x96\x53\xa6\xe3\x48\x03\xd6\x1b\xcb"
+ "\x58\x0c\x7b\x15\x61\x1b\xe3\x1e\xbf\xa0\x83\x93\xed\xfb\xc0\x13"
+ "\x9f\x94\xed\xdd\x93\x64\xf2\xc5\x27\xed\x40\x19\x55\xf9\xf6\x24"
+ "\x75\x7a\xe3\x07\xe8\x3d\x7b\x92\xdc\xac\x72\x80\x09\xe5\xd4\x9b"
+ "\x64\x7e\xd5\x0a\x06\xfc\x5e\x7e\x95\xeb\xd1\x00\x94\xd3\x80\x2a"
+ "\xf4\xb3\x19\xf1\x92\xed\x19\x60\x11\x75\x60\x40\xd5\xb5\xf8\x01"
+ "\x3b\x10\xae\x4a\xe8\xe1\x80\x23\xa4\x97\x74\x5f\x11\x86\xfd\xd2"
+ "\x8b\x69\x31\xbe\x01\x7f\x2d\xf8\x6b\x63\x95\x03\x8d\x88\x3f\x9e"
+ "\xf0\xfb\x2a\x06\x8e\x67\xba\x81\x99\xa3\x00\xb4\xad\xce\x76\xa0"
+ "\x71\x0e\x3e\x2e\x60\xf9\x07\xd2\x4c\x3a\xe5\xc1\xa7\x07\xeb\xc6"
+ "\x40\xa3\xef\xde\x0a\x5e\x07\x59\xfc\xc0\xcc\xd9\xde\x49\x6c\xf1"
+ "\x65\xaa\x4f\x18\xbe\x07\x71\x24\x0c\x34\xb9\xb9\xbe\x0e\x5c\x41"
+ "\x34\x5c\xfb\x99\x91\xf0\x68\x30\xde\x82\x61\xe7\x9d\xcc\x08\x98"
+ "\x57\xa7\x4f\x97\x9c\x89\xb8\xb0\x3e\x24\x6b\xbd\x15\xc9\xfa\x87"
+ "\xa2\x99\x83\xec\xd7\xb5\xa7\x01\xf3\x39\x06\x9e\x7b\x19\x6b\x2d"
+ "\xdc\x86\xef\xef\x03\xaf\xc3\x96\x33\x5c\xaf\x4e\x75\x9d\x41\x5e"
+ "\xbe\x89\xe1\xcd\xdc\x8e\x11\xef\x59\x7c\xb2\x76\xf1\xe5\x01\x65"
+ "\xa4\x0b\x8b\x0b\xa1\x0c\xf3\x72\x23\x2d\x9d\xde\x3d\xc9\xd8\xff"
+ "\xc7\x7c\x12\x06\xfd\xdc\xcd\xeb\xf5\x20\xd4\xeb\x63\xfc\xce\x4b"
+ "\xd2\x27\xb6\x67\xd0\x8e\x48\xb6\x94\x6c\x1a\xd9\xb0\xd9\x1e\x37"
+ "\xe9\xd7\xbf\xc8\xfe\x91\x2d\x43\x5b\xb0\x44\xb6\x65\x64\xc7\xa8"
+ "\x2f\x46\xb6\xcc\x27\xd9\x32\x9f\x64\xcb\x7c\x0a\x5b\x46\xf7\x22"
+ "\xa2\xbe\xbb\xb9\xfd\x42\x7e\x92\xed\x9a\xed\x4d\x63\xa1\xb6\x8b"
+ "\xd2\x78\xd1\x2e\xf9\xd0\x2e\xe1\x2f\xdb\x27\xec\x52\x95\x64\x97"
+ "\xd4\xb2\x5d\xa2\xbb\xd9\xb0\xfe\xf9\xc2\xd9\x25\x9f\x64\x97\xbc"
+ "\x92\x5d\x92\xe8\xf9\xab\xef\x7a\x76\x49\xa7\xc7\xf2\x26\xd1\xdd"
+ "\x43\x51\x58\x6f\xca\x48\xce\xb3\x37\xf8\xca\x90\x2e\xe4\x63\x92"
+ "\xd6\x27\xec\x91\x11\xfb\x61\x6a\xb2\x47\x5e\x4c\xef\x93\xed\x91"
+ "\x8b\xdb\x8d\x4c\xb2\x49\x24\xbb\x25\x1e\x03\x90\x2d\xe2\x76\xc7"
+ "\x33\xd8\x43\x76\x07\xf9\x37\x29\xd4\xee\x20\xbe\x6c\x7c\xd7\x49"
+ "\xf6\x6c\x47\x1c\xda\x80\x38\x4f\x29\x9b\x6d\x71\x72\x1e\x2d\xb1"
+ "\x98\xcb\x48\xe7\xd0\x26\x54\xb1\xd6\x32\x40\x9b\x64\x42\x1a\x51"
+ "\xcf\xbd\x80\x75\xb7\xd3\x83\xf6\x02\xf3\x75\x7b\xb1\x2e\xcf\xec"
+ "\xea\xb6\xcd\x2a\x84\x98\xc5\x4e\xa3\x6e\xe6\x05\xe6\x40\xde\xd8"
+ "\x17\x17\x96\xc1\x2c\xa7\x11\xed\xc3\xfb\x30\xa3\x9d\xf9\x66\x2c"
+ "\xb5\x1b\x90\x06\xf7\xcc\xfc\xc6\xb8\xc5\x4f\xe9\x60\xd6\x65\xd6"
+ "\x88\xf6\xe3\xdf\x67\x5e\xd0\xc5\x2d\x6a\x87\x41\x33\x72\x98\xcf"
+ "\x8b\x75\x11\xcb\x6a\xc2\x32\x5b\x90\xee\x1d\x58\x2f\xab\xb0\x1e"
+ "\x76\x7a\xb0\x3e\x2a\xeb\x22\xd6\xab\xe5\xf8\x6e\xe0\xe5\xa8\x18"
+ "\x50\x85\x75\xd1\xe2\xe3\xed\x5d\x3b\xef\xfb\x62\x7d\xac\xe2\xf5"
+ "\x27\x1e\xc3\xf7\x88\xfa\xe8\x13\xe9\x8e\xf8\x88\x77\x6a\x51\x1f"
+ "\x49\x26\x18\xdf\x80\xbf\x16\xfc\x05\xd5\x47\xaa\x67\x8c\xea\x59"
+ "\xe1\xe5\x40\x3d\x7b\x4a\xaa\x67\xf1\xa2\x9e\x79\xd1\xa7\xf1\xfe"
+ "\x4c\xd4\x35\xc2\x4f\xfd\x63\x7f\x5d\x4b\x18\xd8\x49\x77\x13\x08"
+ "\xbd\xa1\xfa\xc6\xeb\x1a\xda\xd8\x64\xad\xaf\x22\x19\xf1\x31\x07"
+ "\xd5\x03\xd4\xcb\x7f\x52\x7b\x38\xab\x90\xfd\x73\x89\x77\x00\xca"
+ "\x3c\x59\x8f\xf6\xee\xb3\x99\x5d\xec\x9f\x68\xeb\xea\x10\x57\x27"
+ "\xe6\xe7\xc6\xba\xa4\xf5\xed\xe1\x75\x69\x87\xf7\x67\x84\x73\xd0"
+ "\x0e\x3f\x0e\xde\x9e\x06\xd7\xa5\xeb\x8d\xd3\xba\xac\x3f\x31\xdb"
+ "\xc1\x23\xee\xb3\xb2\xfe\x04\xfd\x1f\xaf\x5e\x7a\xdf\x69\x87\x7f"
+ "\xf2\x3b\xac\xa8\x0e\x16\x6e\x86\x5b\xce\xc3\xf8\x0c\xd4\x77\xc0"
+ "\xf7\x58\x7c\x9f\x3a\x7b\xd8\x87\xe8\x6f\xec\x6d\xc1\xbc\x5d\x54"
+ "\x0f\x99\x75\x2c\xf9\x7b\x19\xa8\x87\x5a\xe6\x32\xc6\xb2\x84\x11"
+ "\xf7\xb1\x6b\x7a\x1a\x0b\x8c\xc3\xef\x7e\xc8\x83\x14\x7c\x26\x1c"
+ "\xbc\x02\x89\xf8\xa3\xbb\x29\xcb\xc8\xc7\xc2\xf7\x34\xb6\x5e\xdf"
+ "\x67\xf7\x3a\x48\x8d\x73\x8a\x3b\x68\xe3\xb6\xe8\x68\x4c\x2c\x91"
+ "\xde\x99\xf5\x1c\xdd\xb3\x24\xdd\x43\x8b\xf9\x29\xef\xa1\xb5\x82"
+ "\xbe\xd6\xca\xea\xbd\x2e\xe2\x43\x7f\xb7\x4c\x0b\xd1\x86\x74\xde"
+ "\x86\x74\xce\x9b\xbf\x21\x03\x3e\xb1\x84\x3f\xf7\xd1\x65\x1d\xef"
+ "\x2f\x7f\x84\xf8\x7d\x32\x4f\x22\xc4\x1f\x93\xf9\x14\x69\x2d\x29"
+ "\xb5\xe5\xde\x75\xac\x8b\xce\x10\xa7\x71\x8a\x52\x0f\xfb\x4f\xba"
+ "\x8f\x76\xb3\x17\xb4\xb3\x2d\x6e\x66\xeb\x62\x8d\x36\xcb\x05\xa8"
+ "\xa5\x73\xcd\x4b\xb0\xfd\x8c\x1f\x91\xc2\xf6\x8c\x30\x74\xaf\x63"
+ "\x1e\x1a\x67\x72\x59\xef\xd1\xdb\x61\x91\x4e\xc8\x22\xc9\xc2\xfb"
+ "\xb7\xba\x11\x06\xc4\x15\x4f\xb8\x4e\x61\x7a\xef\x9e\x11\xa8\xaf"
+ "\xf7\x64\xd8\x55\x37\xf1\x35\xf9\x58\x8f\x2d\x85\x1b\x61\xe0\x79"
+ "\xb8\x87\xdf\x55\xc9\x2a\x46\x8c\x27\x7b\x80\x61\x3a\x0c\xdb\x86"
+ "\xf8\xd3\x11\xbe\xd0\x0e\x57\xa4\xb5\x71\xf7\x6c\x93\xe1\xf0\x3d"
+ "\x3b\x74\x9d\x9c\xb4\x2b\xb3\x2c\xe8\x1c\x3a\x15\x04\x9f\xaa\x47"
+ "\x27\xd8\x65\x84\x8f\x0e\xd8\xf3\x24\x37\xdd\x07\x56\xba\x09\x92"
+ "\x51\x3e\x44\xdf\x37\xd8\xa7\xe9\x60\xd6\x7b\x2a\x5e\xd9\xe8\xc6"
+ "\x7e\xc7\x04\x8d\x1d\x4e\x69\x23\xf1\xd3\x77\x85\xb5\x23\x8e\xaa"
+ "\xf2\x75\x00\xc4\x1f\xe2\x27\xd6\x1b\x1f\xf2\xe1\x73\xb2\x47\xb5"
+ "\xeb\xa8\x9f\x3f\x21\x53\xe6\x57\x64\x99\x8c\x18\x2b\xfa\xc2\x13"
+ "\x8e\x30\x2b\x83\xc6\x41\x34\x6f\x32\xe1\x35\xc1\x83\x01\x3b\xba"
+ "\xd1\x8e\xd0\x18\x36\xdd\xdd\x55\xac\x67\x68\xab\x27\xa0\xff\x3f"
+ "\x65\xbc\x34\x3e\xe6\xb4\x79\xa6\x91\x6d\x09\xdb\x66\xf1\x33\x53"
+ "\xfd\xf8\x7f\xda\xd2\x9a\x8c\x76\x88\xdb\x26\x53\xca\x66\x21\x7f"
+ "\x37\xe1\xa5\xbd\x25\xed\x18\x5f\xec\x64\x9d\xac\xc2\x44\xf7\x60"
+ "\x39\xe9\xfc\x51\x0c\xfb\x23\xea\x35\x6b\x2c\x22\x9a\x7e\xfa\xc7"
+ "\xc6\x41\x57\xa1\xc3\x02\x51\xb5\xfe\x71\xa9\x9f\x1e\xa3\x71\x28"
+ "\x31\xfe\xf6\xd3\xb1\x76\x98\x76\x46\xa6\x8b\xfc\x10\xe4\xad\x96"
+ "\xfc\x12\xf2\x47\x68\x5e\xa4\xb8\x84\xb9\xc9\x2f\x41\xd8\xa5\x72"
+ "\x19\xa8\x7c\xa2\x5c\x3f\x35\x2b\xcb\x45\x6b\x05\xe2\x4a\x04\x0f"
+ "\x8a\x37\x80\x96\xdf\x25\xe4\xa5\x79\x95\x69\xbc\x2c\x54\x66\x5e"
+ "\x16\x6e\x63\xa9\x3f\x31\x0e\xfb\x76\x3c\xbc\x0a\x71\x35\xda\x61"
+ "\x6a\x86\xd0\xa7\x9f\x8e\x8d\xb4\x67\x06\x75\x33\x13\xfb\xc2\x83"
+ "\x4a\x7d\xec\x5c\x07\xa4\xcf\x14\x63\x7a\xe9\x33\x7d\xe4\x8b\xbb"
+ "\x49\x77\xc7\x64\x51\x5b\x6c\x2b\x21\x7b\xcb\x61\x6f\x46\xd8\x76"
+ "\x84\x99\x28\xc1\x4e\xe4\xf7\x25\x8a\x67\x0c\x3d\xb1\x0d\x9b\x66"
+ "\x87\xf4\x79\x0e\xde\xd6\xaf\xb0\xcb\xdf\x0c\xbf\xf1\x19\xcb\xf6"
+ "\x8c\xc9\x0a\x4f\x4b\x72\x26\xb5\x65\xde\x2b\xac\x0b\xf3\xe9\x4f"
+ "\x7a\x54\xba\x01\x92\x50\x27\x3f\xdf\xbc\x09\x6e\x21\x1d\x63\xf1"
+ "\x23\x32\x04\xdf\xd3\xeb\x98\x15\xfd\x5e\xb4\xa8\x85\xeb\x60\x20"
+ "\xd6\xa1\xf1\xe7\x21\xfd\x9d\x25\x25\x06\xa4\x15\xa0\xfc\x22\x90"
+ "\x7f\xf2\x19\xc2\xa7\x53\x1f\xa7\xf6\x22\xe9\x62\xfa\x19\x59\x17"
+ "\xf1\xdd\x7e\x3d\x5b\x81\x7c\x6d\x11\x63\x20\x13\x67\xd2\x1c\xc8"
+ "\x39\x98\x38\x9e\xca\x2b\xd6\x5c\x4f\x1c\xc6\xae\xb0\x64\x26\xda"
+ "\xb4\x06\x3b\x4c\xcc\xc5\x67\x0b\xff\xa1\x2d\x91\xbe\x1b\x10\x4e"
+ "\xcf\xae\x78\x09\xa6\x05\xc3\xd2\x98\x55\x45\xf5\xa4\xda\x65\x9d"
+ "\xb8\xc8\x0e\x4b\x8c\x42\x36\x13\x8d\x84\x2b\x02\x0d\x0d\x8c\x9f"
+ "\xbf\xfb\x35\x96\x77\xe2\x27\x86\xcd\x34\xa6\x3a\x91\xaf\xf3\x26"
+ "\x5c\xb5\x6a\x61\xb3\x7d\x48\x6b\x8d\xd5\x67\x42\xfb\x6c\xf2\x55"
+ "\x8e\x35\xf0\x77\x29\x8e\x49\xed\x68\x78\xfc\xa6\x14\x3a\x53\xbc"
+ "\x1d\xee\x35\x08\x3c\x26\x7d\xe3\x80\xf3\xf4\x4d\x07\x26\xa8\x9c"
+ "\xba\x71\x06\x5b\x55\x86\xb8\x27\x12\x61\x44\x5f\xff\xde\xc1\xdd"
+ "\x98\x87\xcb\x7a\xaf\xc1\x0e\x0f\xe8\xc4\x7c\xd0\x38\x43\xc4\xfd"
+ "\x58\x58\x07\xa8\xce\x89\x3a\x3d\xe9\xf2\xa9\x3a\x5e\xff\x8e\xa0"
+ "\xce\xb7\x48\xf6\x97\xc6\x8b\x62\xcf\xc1\x24\xe7\x29\x3d\xd7\x6f"
+ "\x35\x53\xdf\x5b\x16\x74\xc7\x1c\xc6\xf5\xfc\xdd\x7b\x0c\x7f\xcd"
+ "\xf8\x3b\x2d\x7d\x9f\xc5\x9f\x03\xdf\xd1\xea\x4d\x6a\xe7\xbc\x7b"
+ "\x29\x57\x65\xc7\xb8\x6e\xf4\xeb\xe9\xdb\x0e\xf7\x1e\x67\x2f\xa5"
+ "\xa8\xe5\xf7\xda\x17\x68\x2c\xe1\xde\x4e\x94\x81\x34\xc7\x3a\x89"
+ "\xdf\xe5\x88\xb4\x11\xdf\x59\x69\x15\x73\x37\x6f\x76\x12\xdd\xfa"
+ "\xe6\x2a\x27\x18\x7e\x44\xe5\x9f\x44\x72\x67\xb4\x66\x86\x9e\xc5"
+ "\x55\xcc\xd1\x54\xed\x01\x9a\x3b\x74\x59\x27\x61\xfd\xaf\xad\x16"
+ "\xe3\x12\xa6\x2c\xc2\x27\xe9\x04\x93\xcb\x2f\xf8\x3c\xce\x60\x58"
+ "\xa7\xa2\xef\x2d\x35\xfb\xf9\x58\xcd\x61\x56\x9a\x2d\xad\x95\x98"
+ "\xb4\x01\xeb\xf9\x24\xba\x6b\xf2\x22\x4c\x7a\x9f\x21\xaf\x9b\x4c"
+ "\xfc\x2e\x2b\x07\xb6\x3f\x5d\x35\x7c\x7d\xd3\x24\xb4\x7f\x13\x4f"
+ "\xf3\xb9\x20\x0c\xe7\xb6\x06\x71\xee\xc6\x38\x6c\x8f\xba\x4e\x99"
+ "\xdc\xe0\xa5\x32\x63\xda\xf7\xaf\xb8\x35\x74\xd7\xe6\xe6\x42\xb4"
+ "\x3b\x48\x07\x43\x59\x09\x5b\x36\x29\x6b\xd3\x05\xe6\x96\xcb\xdc"
+ "\x54\x47\xf5\x63\x92\xd3\x0e\xaf\xcf\x88\x58\x27\xfc\xe5\x98\x1c"
+ "\xdf\x94\x22\xe4\xe8\x43\x5e\x05\xcb\x71\xb2\x4e\xc8\x30\x63\x6a"
+ "\xb0\x0c\x27\x63\x8b\x94\xb1\x13\x7f\x87\xf1\x77\x4c\x7c\x2b\x7f"
+ "\x19\x16\xc5\x3b\xca\x35\x03\xeb\x68\xc6\x36\xb4\x17\x5d\x42\x36"
+ "\x93\xf9\xdd\x51\x8c\xf4\xe6\x2b\x6c\x7b\xae\xd1\xfd\xa4\x17\x80"
+ "\xc2\x49\xc7\x29\xdc\x87\xfe\x8d\x1d\x32\xaa\x30\x5e\x47\xf5\x97"
+ "\xee\x05\x53\xc6\xfb\xef\x7f\x80\x0c\x7e\xc7\x62\xdc\x96\x1d\x3b"
+ "\x48\x77\x31\x4d\x75\x9c\x67\xc7\x0e\xcc\xcf\x29\xf3\x15\xc3\xce"
+ "\x52\x3c\xe9\xa9\xcb\x3a\x39\x16\xf9\xc2\xdb\x72\x27\xf6\x13\xc3"
+ "\xfb\x1e\x93\xd3\xfc\x3e\x9a\x6e\xa0\x91\x64\xd9\x05\xf7\xa5\xa3"
+ "\x1d\x43\xfb\x3d\x56\x9c\x4b\x0f\xf7\x4d\xa4\x6f\xb4\x9f\x9f\xe3"
+ "\xfb\xf8\x53\x68\xa7\xae\x56\x1a\x0d\xd7\xd4\x10\x73\x55\x8d\x05"
+ "\xae\xdc\xdb\xe5\x49\x30\xa4\xda\x3a\x8f\x41\xab\xe7\x6d\x30\x3c"
+ "\xc9\x71\x8c\xa1\xfb\xe9\x4a\x37\x30\xef\x5b\x57\x8f\x68\x6c\x9e"
+ "\x4b\x8d\xfc\x2e\x58\xb8\x8f\xf3\xe3\xb9\x73\xe8\x05\x2c\xe6\xb8"
+ "\x25\xfe\xec\x6d\xd9\xbd\x9c\x79\x76\x77\xd0\x99\xf5\xfa\x3e\xbb"
+ "\xae\x42\xea\x8b\x1b\x21\xad\xfa\x2a\xa4\xd4\x5c\x05\x23\xfb\x97"
+ "\x51\x5d\x8d\x7e\xdc\xe2\xcb\x3a\x40\x3b\x91\xdd\xaf\x10\xb4\x35"
+ "\x1b\xd1\x9f\xf3\x80\xca\xbb\x07\xfd\x39\x0f\xfa\x73\x97\x8c\x64"
+ "\x2f\xfd\xfe\xdc\x35\xee\x2b\x8f\x38\xca\xef\x30\xdd\x33\xe2\x68"
+ "\x5f\x13\xa8\x62\x97\x82\x0e\xe9\x2b\xbd\x08\x93\x9f\x8a\x6d\x47"
+ "\x5f\x52\x47\xeb\xe0\x44\x79\x91\xe7\xdb\xe2\x4c\x10\xc3\xcb\x8a"
+ "\x36\x9c\xed\x19\xab\x8f\xd8\x36\xab\x49\xa7\x9c\x54\x97\xa8\x0c"
+ "\xcf\xd2\x1c\xf7\xb1\x01\x6e\x4d\x71\x35\x73\x53\xb8\x79\x30\x73"
+ "\x63\x78\x21\xe5\x5d\x8f\xe1\x2e\xeb\x7d\x55\x76\xcd\xcd\x5d\x91"
+ "\x74\x14\xfb\x4b\x92\xad\x99\x92\xc4\xd4\x65\xd4\x2f\x37\x6d\xf2"
+ "\xa0\x3f\x7e\x91\xea\xf1\x14\xfd\xec\x02\xe6\x31\xac\xa6\xf5\x06"
+ "\x53\xb4\xb4\x16\x82\xe6\x40\x7f\x85\xbe\xce\x8d\xd6\x3f\x50\x1b"
+ "\x42\xfd\x87\xb8\x02\xc4\x59\x39\xd0\xc4\x4a\x8d\x61\xce\x1b\x8f"
+ "\xb8\xff\x35\x56\xec\x6d\x9d\x32\xcf\x0e\xab\xf9\x19\xf9\x7c\x3f"
+ "\x10\xb7\xa7\x53\xc7\x3a\x91\x07\xc1\x36\x60\xaa\x96\xce\x4f\xef"
+ "\xae\x30\x1e\x6d\x1c\x44\xb6\x7f\xaa\x4a\xf8\x42\xc6\x23\xa2\x2d"
+ "\x98\xf2\xb9\x98\xaf\x98\x72\xd8\x0e\x73\x79\x1b\x5f\x38\x84\x74"
+ "\x62\xca\x59\x96\x60\x7c\x83\xe0\x46\x95\x41\xd9\x1a\x0f\x2c\x65"
+ "\x7b\x8c\x47\x18\xaf\x2b\x17\x81\x1d\x58\xe9\xa2\x3d\x3e\xce\xfe"
+ "\x0b\x5d\xe8\x1b\x8c\xc5\xb8\xa3\x94\x87\x03\x61\x90\xef\xbd\xc5"
+ "\x5a\x89\x29\x68\x13\x1e\x96\xec\xe1\x94\x93\x62\x1c\x7a\xca\xc9"
+ "\x6e\x4c\x8b\xbe\xe2\xcd\x2e\xeb\x54\xf4\x7f\x57\x96\x48\x73\xea"
+ "\x8e\xad\x7c\x6f\xea\xd4\x54\x3b\x14\x34\x52\x98\x79\x30\xe8\xcd"
+ "\x06\xd6\x19\xd1\xd7\x0b\x2a\xe7\xb4\x5f\xf3\x75\x7f\x6a\xe8\x8f"
+ "\x38\x0a\x65\xbc\xd8\xde\xbe\xde\xad\x9e\x3f\x1f\xc3\xb6\xc9\x78"
+ "\x11\xe6\x16\xfc\xde\xe7\x87\x11\x69\x0e\x2b\xd2\xcc\xef\x56\x0f"
+ "\x7f\x1d\xc3\x1a\x42\xd2\xb4\x84\xa4\x69\x53\xa4\x29\x93\xf2\xe9"
+ "\x0a\x49\xe3\x09\x4e\x33\x2d\xb6\x27\x6d\xd3\x0c\xc1\x69\xa6\xa5"
+ "\x85\xa4\xc9\xe8\x49\xdb\xb4\x79\x21\x69\x72\x43\xd2\x98\x15\xbc"
+ "\xa5\xf5\x4b\x69\x18\xb6\x23\x24\x4d\x55\x48\x9a\x23\xf2\x37\xfa"
+ "\x9e\x2d\xc2\x37\x40\x7d\x42\x99\xa2\x5c\x8f\x62\x3c\x96\x7f\xfe"
+ "\xd9\xeb\xf8\xdf\xd8\x37\x34\x1e\x2e\x3d\x28\xee\xf3\x25\xbb\x4a"
+ "\xeb\x1d\xc8\x9e\xd3\x9c\x0c\xe9\x04\xf9\x9d\x94\x57\x07\xdc\x7f"
+ "\x99\x74\xc8\x65\xbd\x3f\xb9\x27\x3f\xee\x4f\x0b\xa6\xf3\xfe\x8c"
+ "\x60\x3a\xef\xcf\xea\xc9\x8f\xfb\x73\x43\xd2\x98\x43\xd2\x6c\x53"
+ "\xa4\xa9\x93\xf2\xa9\x0a\x49\x73\x24\x24\x4d\x43\x4f\xfd\xbc\xff"
+ "\x64\x48\x9a\xb3\x21\x69\xba\x02\x3c\x7c\x80\x2a\xb1\x8a\xea\x83"
+ "\xcb\xfa\x00\xf6\x7f\xe6\xa5\x5e\x87\x77\x3a\x59\x9f\xe5\xbd\xda"
+ "\x42\xaf\x1f\x78\x76\x9f\xd8\xa7\xc7\xef\x4e\x68\x87\x07\x0e\xca"
+ "\x73\xd9\xaf\x5c\x75\x47\xd3\x1c\x2b\xf2\xb6\xb3\xc9\xe2\xc6\x36"
+ "\xf7\x01\x93\x1d\x66\xd6\xc9\x6b\x59\x68\xfd\x0f\xbf\x7b\x87\xf7"
+ "\x47\x1e\xc8\x14\xf5\xef\x81\x6a\x69\xde\x87\xca\x83\xfd\x8c\x07"
+ "\xaa\xff\xf7\xe8\xca\x9c\x48\x74\xd1\x1d\x14\x88\xc3\xee\xef\x6b"
+ "\xf8\x69\xa5\x3c\x33\xa7\xcb\xb4\xd6\x8a\x35\x48\xb4\x36\xd9\x41"
+ "\xf7\x82\xb8\xac\x99\x89\x8a\xfe\x09\xd1\xea\x3c\xb6\xd1\xad\x09"
+ "\xa1\xd9\x29\x68\xce\xcc\x14\x36\x2a\x33\x53\xb6\x27\x11\xf5\xaf"
+ "\xc2\xa4\x6d\xc5\x12\xd2\x1a\x8b\x53\xd5\xe8\x6f\x62\x1f\x8b\xe8"
+ "\x3e\x07\x99\x15\xdc\xff\x5d\x7d\x15\xe8\xdd\x56\x32\x81\xaf\xc1"
+ "\x90\xca\xd2\x42\xf7\x3f\x93\xef\xd3\x5c\xf8\x35\xad\x03\x64\xfc"
+ "\x2e\x28\xc8\xbc\xdc\x54\xe2\x20\x5a\x1b\xe5\xf5\x4a\x48\x8b\xf0"
+ "\xeb\x2a\x4c\x7c\x7d\x08\xad\xa5\x6a\x72\x8e\x27\x98\x76\xe4\xed"
+ "\x11\x99\x07\x74\x97\x34\xc2\x56\x47\xea\x2b\x29\xf9\x2a\x68\x78"
+ "\x28\x47\xe8\xcf\xf4\xd4\xe0\xfa\x10\x8d\x7a\x3a\x3d\x23\x58\xe7"
+ "\xa6\x67\x05\xeb\xdc\xf4\xa5\xc1\xf5\x41\x8d\xf5\x61\xba\x39\x24"
+ "\xcd\xb6\x90\x34\xfb\x14\x69\x2a\xa4\x7c\x8e\x84\xa4\x69\x08\x49"
+ "\xa3\xb4\x7f\x58\xe6\xe9\x6d\xfe\x7e\x27\xb7\xf7\xd3\x3b\x15\xdf"
+ "\xea\x7d\xbc\x9d\x9a\xee\x91\xc3\xa4\x7d\xd0\x7c\x6d\x96\xc0\xf7"
+ "\xa0\x3e\xc4\x46\x21\xfc\x83\xa9\xc1\x34\x3c\x98\x1e\x4c\xc3\x83"
+ "\x33\xe4\x6f\x69\x3d\xc7\xc7\x1d\xf0\xe0\x1e\x49\xcf\x9c\x71\x5b"
+ "\xe0\xe1\x38\xcf\x9c\x47\xc9\x37\xa3\xf6\x89\xaf\x99\xdb\x84\x3e"
+ "\xe5\x65\x9a\x33\x70\x43\x87\x19\xa2\xe8\x7e\x1a\x3b\x3c\xd4\x8c"
+ "\xfd\xb9\x23\xb4\xa6\x1e\xfd\xa9\xd9\x88\x63\x11\xe6\x5f\x85\x79"
+ "\x20\xef\x1e\xac\x0f\xa1\xa1\x31\x84\x86\xd3\x8a\x6f\x1d\x7e\xdb"
+ "\x15\xe5\xd6\xd1\xb9\x14\x7b\xb9\x6f\xfd\xa0\x5b\x0e\xa7\x31\x00"
+ "\x2c\x63\x67\x29\xf7\x03\x32\x68\x9d\x62\xc2\x39\x78\xf0\x0b\x1a"
+ "\x2f\x10\x38\x1f\x4a\x51\xf2\x56\xf0\xe2\xa1\xf1\xc1\x74\x3c\x94"
+ "\x19\x4c\xc7\x43\xd9\x01\x5b\xf3\xa0\xb4\x16\xe6\xa1\x02\x3b\x2c"
+ "\xe0\xf7\xc0\x20\x2f\x0c\x71\x1e\xc3\xcd\x8d\x43\xc8\x4f\x7d\xe8"
+ "\x3d\x27\x96\x97\x3d\xad\x4e\x90\xbe\xdf\x67\x43\xc8\xef\x1e\x71"
+ "\x04\xed\x33\xed\xd5\xbd\x1d\xc3\x9a\x85\x5c\x1f\xc2\xf2\xcf\xad"
+ "\x17\x78\x1f\x6a\xe6\xed\xc0\x10\xf2\x7f\x1f\xaa\x60\xf1\xa6\x48"
+ "\xfe\x97\xae\x3b\xc1\xa4\x93\xd7\xf4\x22\x0e\xa7\x5c\x1f\x7c\x95"
+ "\x26\x9d\x6f\xcf\x5d\x8d\x2e\xeb\x0c\xad\x1d\xa6\x83\xe8\xd3\xdc"
+ "\x15\x8b\xba\x5f\x85\xf2\xc3\x3e\xf0\x0c\xa9\x2f\x63\x4a\xa1\xb5"
+ "\x8a\x74\x5e\x06\xda\xcc\x58\xb1\x16\x64\x46\xba\xa2\x5e\x39\x0d"
+ "\x1b\x27\xb1\x73\x30\x93\x6c\xaa\x8e\xec\x06\xad\x79\x6c\xf2\x38"
+ "\x80\xc6\x59\x6c\x9e\xf3\xdc\x27\xc7\x78\x90\xd2\x5a\x14\x69\x1d"
+ "\xd2\x38\x48\x27\xc5\x8d\xf6\x80\xa6\xc9\xe9\xa0\xbb\x7e\x13\x85"
+ "\x1f\x3f\x53\xd5\x84\xf6\x02\xd3\x1c\x95\xd3\xd0\x98\x09\x5f\x57"
+ "\x60\x06\xcd\xa8\x12\xd0\x34\x6e\x3c\xc7\x71\xcb\x6b\x87\xa8\x7f"
+ "\x64\x2b\xe9\x04\x9b\xb3\x8d\xc6\x34\x35\x62\x9d\xd8\x4c\x88\x72"
+ "\x83\xb6\x7b\x0f\xcd\x8d\xcf\x04\xef\x1e\x13\xf5\x8d\xb1\x7d\x9f"
+ "\x91\x42\x36\x50\xc9\xbb\x69\xd3\xb2\xe6\xcc\x9e\x39\xf2\x91\x39"
+ "\xd3\xe7\x4d\x9b\x60\x98\x97\xbf\x2a\x2f\x77\xe4\x9a\xb5\x66\xc3"
+ "\xfa\xa2\x7c\x73\xfe\xea\x15\xfc\x7a\x32\x43\x8e\x59\x3c\x8d\x05"
+ "\x39\xc5\xe6\x89\xf4\x9a\x6a\x28\x2c\xca\x5b\xc7\x5f\x87\xf5\x81"
+ "\x60\x24\xf9\xe6\xbc\x22\xc3\xd0\xdc\x54\xc3\xfd\x39\xf9\x05\xb4"
+ "\x6b\x22\x1c\xae\x09\x86\xa2\xbc\xa2\xbc\x9c\x5c\xc3\x44\x43\x1a"
+ "\x61\x56\xa2\x53\xc8\x33\x4d\xb6\x4f\xc5\xd8\x9e\xa3\x0f\xdd\x49"
+ "\x76\x8a\xda\xf5\x0e\x98\xfd\x05\xf9\x70\xfc\x3e\x31\xd4\x43\x6c"
+ "\x13\xec\x2e\xeb\xcc\xf6\x9e\xed\xf8\x4c\x77\xb0\xfe\xce\xd2\x06"
+ "\xeb\xef\x2c\x7d\xcf\x76\x7c\x56\x48\xfd\x9f\x15\x52\xff\x67\xcd"
+ "\xe8\xd9\x8e\xcf\x5a\x1a\x92\xa6\x30\x24\x4d\x99\xdf\xce\x20\xad"
+ "\x5b\xb9\x5d\x9a\xb5\x2f\x24\xcd\xe1\x90\x34\xc7\x42\xbe\x9b\x15"
+ "\xdf\xe8\xbb\xce\x3a\xa3\xf4\x0d\xf0\xbb\x5d\xae\xeb\x01\xfb\x36"
+ "\xcb\x2d\xc3\x50\xdb\x43\x7b\x6b\x04\xec\x6c\x9d\x02\xb6\x53\xc0"
+ "\xce\xf6\xd7\x7f\xb2\x49\xb4\x56\x54\xf8\xe7\xb3\x9f\x97\x6c\x5b"
+ "\x7b\x79\xa0\x0d\x6d\x47\x59\xdc\x7e\x11\x66\xd3\x3a\x60\x82\x75"
+ "\xd0\xfa\x61\x76\x60\xa1\xab\x36\x01\xb4\x94\x96\xee\xd3\x62\xd6"
+ "\x99\x7c\x1f\x3d\x86\xc5\xe2\x0f\xed\xd4\xec\x1d\xf2\x5a\xfd\x6d"
+ "\x08\x63\x07\x7e\xcd\x8e\x8a\xd2\x6d\xe3\xeb\x1c\x29\xbf\x2c\xda"
+ "\xe7\x43\x7b\xcf\xb5\xe5\xe2\xcc\x8a\x76\xba\xe7\x8d\xf2\x46\x1c"
+ "\x1a\xa6\x9e\xf9\xb0\x74\x5f\x17\xdd\x69\x97\x88\x38\xfd\xeb\xff"
+ "\xed\x30\x9b\xef\x13\x22\x9f\x8f\x7c\x3d\xe1\xf7\xcc\xf6\xc8\xfe"
+ "\x05\xf5\x15\xc2\xd9\x8e\xf0\x6b\xc1\x21\xae\xdc\xea\x6b\x6b\xdc"
+ "\xdc\x4e\x34\xd1\x9a\x60\x66\xd3\x7b\xa0\xb5\xda\x83\xfd\x57\xd0"
+ "\xf1\xfe\x94\xe5\x02\xd8\xea\x3c\x40\xe3\xc3\x4b\x2c\x50\x56\xab"
+ "\xf6\xb5\x31\x7f\x3a\xea\xa3\x65\xf1\x7d\xe1\xdb\x28\x1c\xd3\x63"
+ "\x5f\xc2\x41\x6b\xc6\x23\x8c\x47\xc4\x11\x5c\xe3\x10\xea\xef\x65"
+ "\x55\x4b\xbe\xef\x8e\x5a\xc4\x15\x76\x3d\xb3\x1a\x6c\x2e\x6b\x16"
+ "\xb6\x7f\x96\x0c\xd9\x66\x37\x55\x71\xdb\xa7\xc6\x70\x6c\xfb\xb3"
+ "\x0c\x91\xfc\x14\xc9\xbe\x17\xd2\x3a\x36\x97\xf5\xe1\xe4\xeb\xc1"
+ "\x12\xdd\x4d\x58\x6e\xac\x8b\xf5\xaf\x6c\x4e\x8b\x96\xec\xab\x16"
+ "\xd3\xcd\x93\xd3\x7d\x9b\xf2\x91\x6f\x44\xed\x31\xd6\x55\xa7\xe8"
+ "\x2b\xce\xf9\xe3\x5e\xbe\x46\xfa\x61\xf4\xff\xb2\xe4\x7a\x70\x13"
+ "\x7e\xa3\xfd\x7b\x98\x8f\x27\xf2\xb5\x3f\xd8\x9f\x2c\x2e\x44\x9f"
+ "\x4d\xef\x44\xdb\xf8\x70\x8b\x1c\xc7\xc7\x89\x28\xae\x84\xb9\x9b"
+ "\xf4\xed\x14\xd7\xee\x8f\x13\x7b\x16\x58\x93\xc5\x43\xe1\x1e\x39"
+ "\x5c\xb4\x2d\x73\x62\x43\xbe\x93\xe5\x6f\x7c\xc7\x7e\x7f\x56\x85"
+ "\x84\xdf\x81\x36\x57\x25\xce\x78\x98\xf3\x6c\x0d\xaf\x37\x73\x32"
+ "\xe5\x78\x3e\xa6\x76\x88\xe6\xc6\x9c\xe0\x4b\x30\xd6\x73\x9f\x0b"
+ "\xd3\xbc\xf5\xb5\x3b\x1a\xfb\x18\x2a\x46\x77\xbb\x62\x18\xe1\xa1"
+ "\x3a\x43\xf7\x6c\x92\xaf\x86\xb8\xd2\x69\x5f\x05\xe9\xc8\x7a\x0f"
+ "\x24\x17\xde\x4b\xe3\xcf\x73\xb8\xde\x52\x18\xe1\x25\x7c\xd4\x26"
+ "\x12\x6e\xc2\xb7\x9b\x7c\x5a\xbe\x3e\x73\x0e\x96\x3f\xcb\x13\x49"
+ "\x56\x18\xdf\xa9\xe0\x65\x34\x7e\xbb\x83\xcb\x3a\x57\x1b\xf2\xad"
+ "\x97\xbf\x69\xac\x57\xe8\xde\xdc\x58\x29\x6e\xec\xf5\xf2\x1a\xc2"
+ "\xf7\xe4\xcc\xcd\x0e\xce\x6f\xae\x29\x04\xbf\x25\xe4\x7b\x87\xfc"
+ "\xbd\x8f\xcf\x31\xcc\xad\x92\xf3\x28\x17\xeb\xbc\xea\x0f\x6f\x76"
+ "\x44\x5f\xef\xec\x14\x4c\x73\x52\x91\x67\x2f\xfc\x3e\x1b\x90\xdf"
+ "\xdc\x4e\x19\x1f\xbe\x3b\x15\x70\xe8\x97\xcc\xd3\xc8\x70\x62\x7e"
+ "\x63\x5e\x62\x20\xdd\x3c\xc3\x0d\xca\x1a\xa2\xbb\xf3\x57\x09\xdd"
+ "\x9d\x97\x1d\x4c\xcb\x3c\x93\x02\xa7\x39\x40\xcb\xbc\x32\x05\x1c"
+ "\xd6\xcf\x79\x15\xa1\xba\x5a\x6c\x21\x1d\x27\x7d\x9d\x77\x34\x4c"
+ "\x9c\x5b\x8a\x6b\x09\xaf\xe3\xf3\xec\x8a\x70\xa9\x7f\x34\x7f\x9a"
+ "\xe4\x27\x90\x7d\x76\x76\x97\xce\x93\xef\x79\xe5\x3a\x49\xe7\x96"
+ "\x8d\x16\x77\x8a\xa3\x5e\xcf\x37\x84\xe2\x15\xfb\x7d\x24\x1c\x7e"
+ "\x9c\xf3\x1c\xc2\xc7\x9b\x9f\x15\x28\xdb\xfc\x45\x76\x98\x23\xcf"
+ "\x13\x39\xc4\xd8\xe0\xbc\x19\x91\xfa\x1d\x08\xbf\x33\x98\x67\xf3"
+ "\xab\x03\x3c\x9b\x7f\x44\x81\xf7\x98\x02\xee\x0f\xf8\xdd\xac\x80"
+ "\x3b\x7d\x23\xdd\x14\xba\x32\xdf\x1d\x9c\xd7\x02\x6d\x00\xc7\x82"
+ "\xc4\x40\x5e\x0b\x0c\x0a\xb8\x36\xfc\x4e\x8b\x2c\x9f\x05\x33\x22"
+ "\xcb\x67\x81\x29\xbc\x7c\x16\x94\x29\xf2\xdd\x79\xe3\x7a\xb5\xa0"
+ "\x5e\x41\x4f\x2d\x7e\x37\x06\xd7\xa3\x05\xa7\x43\xbe\xfd\xf2\x67"
+ "\x68\x3b\x0e\x6f\xcc\x88\xa6\x70\xf3\x60\xd0\x89\x7a\xf6\x08\x28"
+ "\xe3\xdf\xba\x2a\xe2\x89\x46\x3e\x07\x47\xf3\x9b\x02\xce\x18\x0a"
+ "\x47\x30\x8a\xf8\x4c\x99\x76\x6c\xaf\xc3\xde\x49\x2a\xb7\x7f\x36"
+ "\x1f\xb5\x7f\x8f\xe4\x8a\x79\x9b\x61\xed\xcc\xfa\x61\x76\xa4\xb6"
+ "\x0c\xf1\xd6\xd9\xe1\x91\x6c\xc1\x9f\x47\x50\xff\xd7\x70\xdf\x84"
+ "\x55\x0c\x6b\x47\x7d\xba\xda\x01\xd9\xd3\xf0\x79\x0d\x9f\xc3\x82"
+ "\xdb\xd7\x47\x9a\x99\x55\x35\xb7\xd6\x1a\xda\xee\x3e\x72\x16\xfb"
+ "\x1e\x57\xe3\x3c\x65\xd9\x61\xe2\xdc\xcc\x1a\x35\xa7\x67\x78\x36"
+ "\xcd\xef\x5c\xb5\x43\xf6\x54\xa2\x57\x11\x6e\x64\xd6\x7e\xf3\x08"
+ "\xde\x4e\xf9\x61\x9a\x48\x72\x93\xf7\x5d\x09\xdd\xcb\x36\x87\x94"
+ "\xe3\x1b\xc4\xf5\x95\x28\xc7\xa3\x33\x43\xf2\xde\x19\xbe\x1c\xd9"
+ "\x87\xb1\x1c\xdf\x84\x2f\x47\x76\x23\xe7\xad\x1a\xcb\xd2\xc3\xef"
+ "\xc8\x3e\x8b\x65\xf9\x86\xf3\x3d\x38\xdc\x29\xf7\x53\x4b\xbf\xc1"
+ "\xfe\xbf\x1a\x78\xda\xb9\x25\x01\xb9\x09\xb8\x47\x93\xe3\xaa\x20"
+ "\xab\x67\x9e\x8f\x8e\x65\xd6\x98\xb9\x76\x78\xb4\x40\x6e\xaf\xa4"
+ "\xf0\x19\x82\x16\xe4\x93\x9a\xf8\x84\xe5\xc1\x74\x91\xe4\x2d\xd7"
+ "\x4f\x31\xcf\xf4\x28\xd6\xff\x6c\x79\xff\x93\x13\xdb\x73\x87\xcc"
+ "\x47\x8c\x6b\x08\x89\x73\x2b\xe2\xce\x04\xc5\x6d\xf2\x87\x77\xc9"
+ "\xe1\xdf\x4e\x4e\x8f\x25\x87\xc8\x09\xe5\xf3\xd8\x9b\xc1\xe5\x7e"
+ "\x2c\x55\x94\x0f\x65\xd4\x83\xd7\x8f\x65\xa2\x8c\xae\x85\x97\xd1"
+ "\x63\xb9\xe1\x75\xed\xb1\x12\x8e\x2f\x01\xc2\xe1\xab\x42\xd9\x5d"
+ "\xe3\x3a\x28\xc9\xa9\xa7\x7c\x1e\x3b\x2e\xcb\xe7\xdb\x95\x71\x21"
+ "\x84\x94\xd1\xdb\x01\x0b\x37\x89\xb2\x2e\x3c\x15\x8c\x7b\xa1\x3e"
+ "\xbc\x2e\x2e\x4c\xc3\x72\x7a\xc3\x97\x73\xe1\x8c\xc8\xba\xb8\xd0"
+ "\x84\xe5\xf1\xf6\xd4\xc5\x85\x62\x4e\x57\xd2\xc1\x90\xb8\x6a\x66"
+ "\x0d\x9b\xcf\x31\xf2\x8b\xec\xb0\xb0\x8b\xe6\xe9\x14\xe1\x27\x83"
+ "\xf5\x0f\xcb\x40\xe9\x88\x7f\x1e\xd1\x8f\x21\x39\x74\x18\x40\x7d"
+ "\x23\x9d\x74\x59\x17\xa5\x86\xf0\xea\x52\x07\x2c\x7a\xb3\x5b\xad"
+ "\xbe\x5f\xf0\xeb\xf1\xa7\x82\x69\x5a\x94\x19\x9e\x5f\x8b\x96\x22"
+ "\xbf\x2e\x85\xe7\xd7\xa2\x92\xc8\xfc\x5a\x44\xf2\xbf\xd4\x93\x5f"
+ "\x8b\xea\x95\xfc\xf2\x59\x45\xf9\xee\xd0\xa3\x6e\x5c\x5b\xc2\x6a"
+ "\x85\x2d\xd7\xc5\xa1\xae\x88\x34\x5d\x94\xa6\x3d\xce\x2d\xf4\xc4"
+ "\x30\x00\xb4\x17\x61\xd1\x49\xb9\xfe\xf7\xab\x82\x18\x76\x6d\x21"
+ "\xad\xe1\xa6\xbb\xa6\x75\x36\xcb\xa5\x46\x9b\x27\x0d\x68\xbc\x31"
+ "\x38\xdf\xc7\x8d\xe1\x6d\xc1\xe3\x19\xc8\xd3\xca\x30\xe1\xd2\x9e"
+ "\x82\xc7\x2b\x82\x6d\xc4\xe3\x85\xc1\x32\x42\xbe\xa9\xf9\x2d\xaa"
+ "\xaa\x6f\xf3\xbb\xbe\xcc\x1e\xb7\xf7\x94\xd9\xe2\x2d\x42\x5e\x8b"
+ "\x73\x42\xe8\x73\x87\x97\xd7\x62\x5d\x64\x79\x2d\x4e\x8d\x2c\xaf"
+ "\xc5\x99\x24\x2f\x3b\x2c\x2e\x0b\x6e\x37\x16\x2f\x0d\x2e\x2f\xe6"
+ "\x8b\xe9\x98\xba\xd7\xcd\xf4\xfd\x6d\xcb\x2d\xff\xc8\xc6\x91\xac"
+ "\xe8\xbc\x01\xa4\x7f\x30\xd1\xf8\x5d\x71\x44\xc4\x8d\x3c\xac\xd8"
+ "\x18\xf1\xfe\xf2\xd8\x56\xec\x57\xd2\xfa\x3c\xc3\x20\x1a\x2b\x5b"
+ "\x32\xdf\xa7\x56\x4d\xc0\x77\x75\x07\xe4\x0c\xf6\xa9\xa3\xca\x68"
+ "\x2d\x19\xdf\xab\xc8\xe7\x27\x96\x14\x28\x65\x41\x6b\xca\x76\x8b"
+ "\xb3\x23\x69\x9c\xf3\x33\x4c\x7f\x59\xc8\x25\x47\x15\xcc\xc7\x25"
+ "\x15\xe1\xe5\xb2\xe4\x08\xca\xe5\xb3\xf0\x72\x59\xd2\x1c\x59\x2e"
+ "\x4b\xec\x28\x97\xcf\x7a\xd6\xa3\x25\x6e\xa9\x1e\x6d\xa5\x34\x86"
+ "\xd5\xe4\xaf\x2e\xcd\x27\x18\x7c\xc7\x3a\xb2\xf4\x61\x8a\x1f\xd9"
+ "\x25\xd7\x23\x4a\xb3\x94\xfa\xff\x3c\x7f\x09\xc6\x28\xe1\x50\xe0"
+ "\x5d\x9a\x15\xd7\x15\xae\x9e\x2c\xa5\xbb\x6c\x55\xa3\x0a\x41\x8b"
+ "\x3c\xcc\x3e\x48\x38\x8a\x00\x10\xc7\xfb\x04\x47\xe1\x74\xf7\xb3"
+ "\x02\xbe\x4a\x86\xe3\xe3\xa2\x02\xb6\x82\xb9\x4c\x40\x70\x21\xb8"
+ "\xa5\xf2\xc7\xf0\x76\x84\xe0\x09\x2e\x04\xa6\x53\xd4\xc7\x9c\xd4"
+ "\xe0\xfa\x98\x03\xc1\xfa\xb9\x84\xe6\x27\xe2\x7c\x68\xe7\xf0\x7d"
+ "\x9e\xd7\xaa\x9a\xf0\xfd\xd4\xcd\x9c\x92\x90\xba\x89\x3a\xf0\xc4"
+ "\x6d\x92\x0e\x78\x83\x69\xcd\xd9\x17\x5e\x07\x72\x8e\x46\xd6\x81"
+ "\x9c\x96\xc8\x3a\x90\x43\xe7\xce\x7c\x66\x87\x27\x92\x83\xeb\x66"
+ "\x8e\x27\xb8\xec\x98\x2f\xaf\x9b\x10\xff\x5d\xea\x26\xfa\x42\x37"
+ "\x47\xaa\x87\x92\xff\xaf\xaa\xbd\x0a\xf0\x1d\x78\xa6\xc5\x7a\x85"
+ "\xf4\x3d\x51\x4f\x73\x48\x68\xe3\x4d\xc4\xc3\x1a\xde\x47\x7b\xa2"
+ "\x59\xc9\xc7\xdd\xa2\xaf\x55\xda\x01\xcb\xa6\xd3\x9a\x3d\xc1\xcf"
+ "\xdc\xf8\xe0\xf2\x3f\xd1\x1e\x9e\x9f\x4f\xd0\xd8\x7c\x69\x78\x7e"
+ "\x2e\xd3\x47\xe6\xe7\xb2\xb1\xb4\x37\xbe\x67\x9d\x5a\x36\xc3\xb0"
+ "\x8e\xfb\x28\x3c\xcd\x45\x58\xf6\xea\xb7\x6b\x9f\x96\x6d\x0b\x6e"
+ "\x9f\x96\x15\x7c\xf7\xf6\x69\x59\x4b\xf8\xf6\x69\x99\x3d\x7c\xfb"
+ "\xb4\xcc\x2d\xea\x43\x6e\x5a\x70\x7d\xc8\xd5\x05\xeb\xc4\x13\xed"
+ "\xdf\x5f\xfb\x94\x5b\x16\x52\x07\xca\x3b\x20\x4f\x85\x3e\xc5\x76"
+ "\x21\xb7\xbc\x4f\x82\x69\xcc\xad\x0e\x2f\xb7\xdc\x63\x28\xb7\xf2"
+ "\xf0\x72\xcb\x3d\x1d\x59\x6e\xb9\x34\x27\x5a\xde\x53\x6e\x79\x9a"
+ "\xef\xee\x53\xe4\x8d\x0f\x96\x59\x9e\xe1\xbb\xcb\x2c\xaf\x24\xbc"
+ "\xcc\xf2\xf6\x85\x97\x59\xde\x51\x21\xb3\xbc\xf6\x60\x99\xe5\x35"
+ "\x07\xcb\x0c\xf9\xf6\xbd\xc9\x6c\xf9\xd8\x10\x99\xad\xe9\x80\xe5"
+ "\xef\xa0\xcc\x4e\x0b\x99\xad\xd8\x10\x4c\xe3\xf2\xac\xf0\x32\x5b"
+ "\x6e\x42\x99\xad\x09\x2f\xb3\xe5\xdb\x22\xcb\x6c\x79\x1d\xca\x6c"
+ "\x4d\x4f\x99\x2d\x6f\xf8\xee\x32\x5b\xde\x15\x2c\xb3\xe5\x67\xbe"
+ "\xbb\xcc\x56\xa4\x85\x97\xd9\x8a\xcc\xf0\x32\x5b\xb1\x54\xc8\x6c"
+ "\x45\x55\xb0\xcc\x56\x58\x82\x65\x86\x7c\xfb\x6f\xca\x0c\xe5\xd3"
+ "\x29\xd6\xeb\xae\xf8\xa6\x9b\x8f\x69\xaf\xc0\x3e\x82\xa9\x41\xcc"
+ "\x09\x98\xb8\xee\x48\x32\x7c\x0b\x61\xda\x7b\xb6\xdd\xa6\x58\x29"
+ "\xec\x91\x9e\x72\x30\x19\xb1\x5d\xed\x6a\x2e\xe1\xeb\xba\x84\x0c"
+ "\x89\xe7\x08\x27\xc6\xc8\x4c\x7c\x6d\x00\xca\x98\xd1\x39\xc6\xd4"
+ "\x16\x23\xbc\x93\xf0\xd0\x39\x2e\x21\xb8\xcc\xdf\xc5\x2f\x8b\xbc"
+ "\xc6\x7c\x58\x27\xdd\x35\xd0\x01\xf9\xcf\x0a\x5d\x35\x85\xfa\xbf"
+ "\xb5\x18\xf7\xb8\xd0\xd3\x95\x21\x63\x26\xa6\x08\xfe\x6f\x3e\xf9"
+ "\xbf\xb5\xe1\xf5\x34\xff\x3a\xfe\x6f\x3e\xf9\xbf\xb5\x8a\xfe\x6a"
+ "\xc2\x62\x8f\x3d\xa4\xbf\x9a\x5f\x10\xe7\x14\xba\xc3\xfd\xd8\x3d"
+ "\xc3\xb0\x9f\x9e\xbf\x2f\x84\x66\x94\xcd\x93\xf1\x12\xcd\xbd\x43"
+ "\xd2\x1f\x8d\x40\x73\x33\xd2\xfc\x56\x04\x9a\xed\xd7\xa1\x99\xc6"
+ "\xbb\xdf\xea\x59\xb7\x9e\x4c\x94\xf4\x20\x4c\xbf\xfc\xc9\xb4\xf0"
+ "\xf2\x7f\x32\x44\xfe\x90\x6d\x2e\x61\x0e\x9e\x3e\x18\xae\x50\x09"
+ "\x47\x6b\xf5\x09\x96\x74\x24\x0c\x6c\x75\x28\xce\x08\x70\xcd\x3d"
+ "\x74\x8f\xf6\x16\x84\xd5\xbd\x27\x1d\xa2\x3e\xae\xcc\x0c\xae\x8f"
+ "\x2b\xb5\xc1\xf5\x11\x79\x1d\x94\x6e\xa5\x31\x38\xde\xe4\xfe\xfe"
+ "\x6c\xec\xca\xaa\x10\x1d\xf8\xb0\x03\x0a\x6e\x11\x3a\x50\xb0\x2a"
+ "\x84\x8e\xfa\xf0\x3a\xb0\xb2\x05\xcb\xff\x61\x78\x1d\x58\xd9\x1e"
+ "\x59\x07\x0a\xa8\x3e\x7f\xa8\xd4\xdb\xb9\x25\x19\x31\x21\x30\x29"
+ "\xe1\x6d\x5e\x41\x7a\xf8\x71\x9d\x82\x79\x82\xc7\x05\x3b\x83\x79"
+ "\x5c\x50\x10\xcc\x43\x2c\xcb\x7f\x9f\x87\xfe\xbb\x39\x5c\xd6\x82"
+ "\xd0\xfa\x6f\xeb\x80\x55\x52\xfd\x5f\x3d\x3f\x84\x46\xa9\xff\x13"
+ "\x6e\x2c\x6b\x55\x22\xf2\xd2\x16\x9e\x97\xab\xd2\xc2\x97\x79\x55"
+ "\x26\xb6\x41\x36\x5f\x8f\xba\xb4\x8a\xce\xf3\x99\x4b\x73\x07\x34"
+ "\x86\x55\x83\xe1\x73\x3d\xa0\xe5\xed\x95\xbf\x5d\x5a\xb5\x8d\xc6"
+ "\xc8\xf9\x18\x33\xea\x6f\x5c\x32\x64\x51\x1b\x44\x74\x2d\x29\x09"
+ "\x9d\x13\x5d\xc5\xc7\x3f\x68\x1d\x0b\xed\xab\x89\xb3\x40\x96\xcd"
+ "\xe9\x01\x59\xdf\x09\x3e\x04\xb7\x9d\xea\x05\xc1\xcb\xb0\x62\xac"
+ "\xb3\x2c\xc4\x36\xad\xd6\x86\x97\xf1\x6a\x43\x64\xdd\x59\x9d\x2e"
+ "\xe4\xbc\xba\x30\x58\xce\xab\xe7\xf9\xac\xfd\xe6\x51\x59\x51\x07"
+ "\xbe\x53\x3d\xa1\xb9\xd3\x88\xf6\x7e\xeb\xc2\xb6\xc2\xcd\x30\xe8"
+ "\x3c\xac\xe6\x7d\x8d\x72\x35\x73\xc7\x6d\x51\x41\x33\xb7\x01\x6b"
+ "\xc4\x79\x18\x08\xb3\xc4\x03\x6a\xb6\x75\x65\x1b\xc5\xd5\x5a\x99"
+ "\x9b\xee\xa9\x91\xef\x9c\x41\x5d\xb8\xf9\x1c\xac\xfe\x2a\x28\x3d"
+ "\x7a\x7f\x36\x81\x23\x55\x8c\xef\xaf\x31\xca\xe3\xf0\x91\xc6\xf7"
+ "\x11\x66\x86\xbc\xee\x57\xcc\x85\xad\xc9\x88\xd8\x2e\x23\x4d\xb4"
+ "\xbf\x9c\x68\xba\xbe\x1d\x58\x53\x27\xeb\xaf\x98\x9b\x5b\x53\x1f"
+ "\xd8\xdb\xb2\xe6\x38\xc6\xe5\x5e\x67\x3c\x57\x51\x0f\xd6\x74\x2a"
+ "\xf1\x88\xfb\x69\xd6\x78\xe4\xfd\x29\x2e\x6b\xa1\xf6\x06\xb8\x24"
+ "\x7a\x0a\xd3\x82\xe9\x29\xcc\x40\xdf\x32\x57\xc2\x31\xe3\x06\x38"
+ "\x12\x6d\x87\x27\xc0\x28\x1f\x44\x9d\x87\xa2\x17\xe8\xbe\x1b\x5b"
+ "\x75\x27\xc4\x7a\x40\x23\xfa\x76\x85\x87\x68\x6f\x08\xe3\xe7\x0e"
+ "\x4c\x6a\xa4\x39\x38\xbe\x86\x40\x3f\xa9\xf1\x94\xc5\x2b\x9d\xf9"
+ "\x56\xf8\x6b\xe2\xe9\x29\xd3\xa5\xc6\xea\xfd\xac\xf3\x20\x3f\xeb"
+ "\xab\x30\xa8\xff\xb7\x93\xd6\xff\xd0\x3a\x8c\xcd\x30\xa9\x03\x9e"
+ "\x9a\x2e\xea\x7a\x51\x88\x4f\x5a\x18\xa1\xff\x57\x48\xfd\xbf\x49"
+ "\xe1\xeb\xf9\x53\xd7\xe9\xff\x3d\x45\xfd\xbf\x49\xca\x76\x53\xcc"
+ "\xf3\x3c\x35\x43\xe9\x93\xd2\x79\x5c\x86\xe5\xe4\x67\x3e\xf5\xd1"
+ "\x88\x7d\xa0\xf3\xd0\x9c\x36\xd6\x4d\x5b\x67\x33\xd5\x57\xdd\x29"
+ "\x47\x03\xa0\xae\x6a\xfb\x15\x92\x2e\x52\x5b\x46\xf5\xf5\x29\x3e"
+ "\x5e\x18\xe7\x11\x75\xb1\xd4\xc2\x1c\xa9\xed\xa8\x43\x6b\x4c\x32"
+ "\xae\x92\x4d\x26\xb1\xef\xa3\x5f\x3b\xc4\xd8\x3a\x79\xbb\xa8\x22"
+ "\x7f\x95\xfb\xad\x9e\xcb\x40\x78\x9b\x4a\x4e\x01\xe1\xf5\xf9\xdb"
+ "\x49\x8e\xbb\x8b\xea\x38\xe1\x24\xdc\xad\x08\x47\x78\x09\x4e\x2e"
+ "\x87\xd8\x1b\x53\x94\xa8\x2c\x3b\x1f\x7f\xc1\xbc\x31\xfc\x61\x1a"
+ "\x57\xb1\x51\xba\xd2\x85\x6c\x54\x3b\xcd\x99\x5d\x6a\x64\xa5\x2b"
+ "\xd9\xa8\x22\x1a\x13\x2b\x3a\x44\xe9\xde\xfa\xa7\x3d\xda\x3c\x18"
+ "\xb4\x52\xd8\xa2\x66\x83\x1b\xec\x50\x54\x17\x6c\x23\x8a\x42\xfc"
+ "\xdf\x42\xce\x4b\x7c\x9a\x69\x7d\xa2\xb4\x7e\x95\xec\x01\xb3\x79"
+ "\x5c\x5c\x3f\xae\xb7\xa6\x82\xe6\xa4\x69\x4d\x94\x38\x6f\xae\xa8"
+ "\x33\x64\xec\xcd\xb1\x9b\xaf\xab\xf9\x14\xf3\x2d\x5e\x2b\x74\xc4"
+ "\xbc\x36\x58\xa6\xc5\xda\xd2\x0b\x34\x17\x24\xda\x83\xc5\x9e\x50"
+ "\xfb\x58\x6c\x94\x7d\xb7\x90\xf0\x0c\xb9\x3d\x30\xac\xe6\x78\x43"
+ "\xda\x99\x62\xee\xff\x7b\x7b\xb4\x0b\xc5\x16\x2c\x5f\x90\x4e\xb6"
+ "\x72\x1d\x2a\xae\x38\xe5\x44\xbd\x29\x22\xfd\x37\xf7\x46\x98\x2d"
+ "\xb4\xe7\x10\xbf\x63\x2e\x42\x71\xa3\xd7\x0a\xda\x53\x0e\xbe\xa7"
+ "\x4a\x87\x3a\xc2\xf5\x96\xda\x8d\xd1\x62\x3d\x92\x33\x24\x8f\xb3"
+ "\x32\xcf\x09\xa6\xb5\xe8\x53\x10\xeb\x29\x48\x17\x8a\xeb\x69\x6d"
+ "\x46\xbf\x2e\x7e\xb6\x97\x4e\xd6\x21\x9b\xa7\x0d\x5a\x3d\xa1\x7d"
+ "\x1e\x73\x4a\xf8\xb2\x9b\xa9\xfd\xaf\xb4\x83\x79\x5f\xb0\x6c\xcd"
+ "\xbc\xfd\x97\xe7\x75\xec\xc8\x83\x90\x74\xe6\x60\xd9\x17\x73\x5e"
+ "\x47\x5c\xe3\x53\x31\x8c\xd6\x71\x2d\x71\xf2\xf5\x5e\x66\xac\xff"
+ "\x45\xcd\xd7\xb3\x83\x4c\x37\xac\xcb\x87\xb0\xd2\xba\x60\xb4\x5b"
+ "\x66\x77\xd0\x98\xd1\xad\x7c\xcc\x68\x49\x07\xac\x95\xe6\x7e\xd6"
+ "\x4d\x0c\xa6\x6f\x6d\x62\x64\xdf\x60\x2d\xcd\xff\x2c\x09\x6f\x33"
+ "\xd6\xce\x08\xef\x1b\xac\xcd\x95\xec\xc2\x12\x16\x1f\xaa\x07\x6b"
+ "\xcb\x50\xc6\x3c\x8d\xdc\x87\xa5\xb1\xd0\xc8\x7d\xd8\xb5\xf5\xfe"
+ "\x3e\x6c\x11\xd9\x83\xb5\x55\xfe\x3e\xac\x23\x5c\x1f\xd6\x1e\x46"
+ "\x9e\x6b\x9d\xe1\xe5\xb9\x2e\x36\x7c\x1f\x76\x5d\x8a\x68\xe7\xd7"
+ "\x65\x07\xcb\x79\x5d\x7a\x60\x4e\x78\x6d\xe2\xf7\xe7\x0f\xaf\x3b"
+ "\xd2\xd3\x1f\x5e\x3f\x54\xc8\x6a\x7d\x5e\x08\x6d\x8d\xe1\x6d\xfb"
+ "\xba\xb6\xc8\xfe\xf0\x3a\x67\x64\xdb\xbe\x5e\xd7\xd3\x1f\x36\xf4"
+ "\x0a\x81\x19\xeb\xf7\x95\x82\x7c\xb3\xf5\x33\x04\x9f\xd6\x93\x3f"
+ "\x17\xa5\x80\xcf\x0d\xd6\x77\xa4\x19\xf1\xa1\x6d\x3b\x4f\x36\x4d"
+ "\xd6\x99\x48\x3c\xa1\xf3\x99\xee\xd8\x07\xbd\xb1\x0e\x7c\xe8\xb2"
+ "\xae\xf7\xeb\x3f\xad\xe3\xa3\x7c\xc8\x46\x46\x5c\x4f\xa7\x96\xe9"
+ "\xe3\x74\x74\x5d\x6f\xbe\x34\x4a\x0f\x59\x7b\x7b\xf0\xc3\xc2\xfd"
+ "\x3f\xc2\x71\x7d\x99\x59\x16\x85\xd4\x31\xa7\x58\x87\xbb\x61\x98"
+ "\x90\xdb\x86\x90\xbe\xac\xc5\xc2\xf7\xf4\x45\xb4\xb7\x96\xaa\xf0"
+ "\x3a\x6a\xa9\xf7\xdb\xdb\x22\xc2\x6b\xf9\x32\x24\xfe\xb4\x90\xc1"
+ "\x06\xa3\x2f\x5e\x39\xd6\x6d\xe9\x0c\xb6\x49\x96\xd3\xc1\xe9\x36"
+ "\x84\xf4\xff\x2c\x16\x8a\xff\x76\xed\xcd\x86\xec\xc8\xed\xcd\x86"
+ "\x2f\x44\xf9\x37\x86\xcc\x2f\x6f\xb0\x5c\xbf\xbd\xd9\x10\xa1\xfc"
+ "\x1b\xea\x83\xdb\x9b\x8d\x21\x73\xf4\x1b\x4e\x87\x6f\x6f\x36\x74"
+ "\xca\x76\x46\xd8\x8d\x8d\x93\xbf\x9d\xbd\xd9\x68\x08\xb6\x37\x1b"
+ "\xb5\x37\xb2\x37\x4d\x3d\xec\xcd\xc6\xdc\xb8\xea\x70\x65\xd9\x58"
+ "\x12\xde\xde\x6c\xdc\x27\x64\x88\x4e\x4b\x90\xbd\xd9\x78\x34\x58"
+ "\x86\x1b\x42\x64\xb8\x31\x64\xfe\x7b\x83\xe5\x7f\xd7\x26\x45\x45"
+ "\x45\xa9\xa3\x54\x6a\x55\x14\x46\x61\xf1\x20\x26\x4a\x13\x15\x8d"
+ "\xbf\x5e\xd2\x33\x46\x1d\xa5\xd6\xe0\x2f\x5a\x7a\xf6\x0a\xf9\x8e"
+ "\xa1\xb4\xf8\xd3\x48\xcf\xe8\x90\xef\x5e\x37\x88\x8f\x91\xf2\x95"
+ "\xf3\xd7\x84\x7c\x47\xdf\x20\xbe\xd7\x7f\x33\x3d\xf4\xf8\x0e\xde"
+ "\x07\x39\x7d\xf5\xba\x9c\x82\xfc\x5c\xbe\xae\x3d\xcf\x90\xb3\x6c"
+ "\x59\x5e\x71\xb1\xc1\xbc\xc6\x70\xdf\xe4\x39\x77\x4d\x30\x88\xe5"
+ "\xf1\x05\x13\x87\xe6\xf6\x81\x99\xeb\x8b\x28\x62\xe6\xdc\xe9\xd9"
+ "\x86\xac\xfb\x26\x07\x47\xca\x68\xf8\x32\xf8\xeb\x61\x51\xd4\xbd"
+ "\x8c\x67\x6f\x05\xd8\xb9\x9f\xdb\x9d\x76\xda\x7b\x2e\xfa\x13\x5b"
+ "\xa6\x9f\xa4\xfd\xcb\x57\x4b\x19\xed\xab\x38\x07\x25\x17\xa8\x10"
+ "\x23\xeb\xca\xa0\xf0\x09\x3a\x4f\x65\x53\x6f\xf6\x81\x03\x0c\x0f"
+ "\x82\xfa\x1c\x3c\xfd\x68\x73\x26\xc2\xe2\xb7\xcd\xee\x01\x43\x29"
+ "\xf9\xb6\x65\xdf\x60\x9c\x8a\xdd\xeb\xc3\x30\xa7\xb4\x3f\xbf\xac"
+ "\x37\x0f\xfb\xa0\x4c\x86\x8b\xeb\x80\x4d\x6f\xb2\x0f\x18\xff\xa6"
+ "\x33\x6b\x04\xdc\xa6\x2d\x4c\x5d\x92\x41\x76\xa1\x3a\x01\x34\xb4"
+ "\x2e\xfb\x85\x04\xd0\xbe\x70\x2b\x9d\xf1\xbb\xc9\x2c\xaf\xcb\x7e"
+ "\x16\xbf\xed\xf0\x74\x36\xe5\x4d\xb0\x3e\x75\xc9\x93\x04\x5f\x13"
+ "\x0c\x7f\x38\xb0\x8e\x7b\x13\xdd\xef\x15\x3b\xfb\x73\x88\x8b\xf3"
+ "\xb2\xaf\xdc\x09\x06\xc3\xa8\x4c\xf4\xd3\x50\x14\x27\x3d\x65\x20"
+ "\xf6\x46\x6d\xba\xb0\xc1\xcb\x3c\x74\x66\xc2\xcc\xae\x52\x56\xbe"
+ "\x0a\x34\x58\x9f\x55\x8d\x45\xb4\x97\x62\xd3\x99\xda\x3c\xd0\x60"
+ "\xf9\x93\xcf\x43\xa9\xc6\x30\x0b\xfd\xc6\x99\xa0\xf9\x93\x85\xf6"
+ "\xbb\x8e\xb8\x6f\xf7\x5f\x40\xf3\xc6\xd5\x32\xf5\x55\xa6\x87\x12"
+ "\x33\xeb\x64\x74\xee\xb7\x93\xb9\x69\xbd\xed\xc9\xa5\x5e\x82\xb9"
+ "\xcb\x55\xaa\x87\x56\xb3\x13\x36\x9d\x65\xee\x1d\x7f\x11\xe7\x55"
+ "\x9c\xea\x72\xd2\xfe\x59\xed\xa6\x99\x10\xd5\x91\x0d\xea\x53\xa6"
+ "\x2a\xb0\x2d\x72\x42\xc9\x59\xd6\x79\x72\xe9\x17\xd0\x6a\xaa\x87"
+ "\x25\x6d\xa0\x3e\xd9\xfe\x0f\xe0\x67\x57\x57\xee\xb5\x6f\xbe\x0c"
+ "\xfa\x4d\xf9\x14\x76\x19\x36\x6e\x82\xbe\x1b\xff\x4a\xfd\xa0\x36"
+ "\xcc\xe7\x02\x3c\x76\x06\x54\x88\x4f\xfd\xb3\x7f\x80\xfe\x67\x8f"
+ "\xf2\x7d\xe6\x50\xbd\x19\xf4\xac\xd4\x18\x7b\xb5\xd4\xa8\xbb\xca"
+ "\x8c\x09\xae\x52\x63\x62\x6b\x21\xc2\xb7\xbf\x0f\xfd\xda\x20\xf1"
+ "\x83\xf3\x6d\xea\xaa\xaf\x21\x99\xca\xd4\x81\x65\xab\xfe\x1a\xe1"
+ "\x2b\xf3\x97\xfa\x30\xad\x32\x8d\x27\x3e\xdf\x62\xcb\x76\x83\x0f"
+ "\x71\x55\x5d\x85\xe4\xea\xab\xa0\xf7\xed\xc9\x5f\x4a\xe9\xba\xe8"
+ "\x0c\x39\xb4\x18\x25\x9b\x98\xf7\x5a\xa5\xd1\x80\xf6\x30\xe6\xad"
+ "\x27\x1a\x34\xb6\x93\x5d\x70\xca\x79\x15\x5a\xe1\x53\xb0\x59\xfe"
+ "\xd5\xf8\xc6\x13\x0d\xd1\xe8\x4f\xaa\x1a\x37\xd2\x1a\x78\xa1\x3b"
+ "\xa5\xa7\x40\x63\x43\x19\x94\x6f\x86\xd8\xc2\x8d\x10\x73\x1e\xc3"
+ "\xb9\xed\xa9\x18\x68\xb4\x79\xfe\xd5\xb8\x91\xef\x07\x7f\x3a\x7b"
+ "\xf3\x29\x88\x6a\x75\x56\xd1\xbe\x63\xb5\x37\x61\xaf\xdd\xe6\x3c"
+ "\x0d\xb6\xc2\xcf\x1a\x7d\xba\xbd\x2d\x3b\x7d\xa0\x7d\xf3\xca\x69"
+ "\xb5\x4d\x73\x05\x6c\xd9\x4e\xf8\x10\xf3\x66\x95\x7b\xbb\xd0\x66"
+ "\x65\xb4\x3a\xdd\x74\xfe\x4e\x1a\xeb\xd6\xf7\x29\x2f\x82\xd4\x9a"
+ "\xaf\x21\xe5\xe0\xd7\x60\x64\x2e\xa3\x9a\xf6\x78\xd3\x99\x6a\x07"
+ "\xf1\x19\x8b\x7d\x30\x2c\x3b\xdf\xeb\xcd\xe2\xa5\xbd\xde\xd7\x8c"
+ "\x50\x7b\x35\xb0\xd7\xfb\x6a\x77\x60\xaf\x37\xea\x94\x85\xf6\x7b"
+ "\xdb\xa1\x34\x36\xee\x24\xc4\x9c\x83\x4d\x69\xa4\xdf\xe5\x17\x41"
+ "\xb3\xf5\x22\xc0\xa8\x32\x35\xf5\x33\x35\xa8\xfb\x17\x6c\x28\x1b"
+ "\x7a\x3f\x07\x65\x87\xf1\x19\x8b\x3f\xec\xcf\x95\xf1\xb3\x2a\xda"
+ "\x25\x3d\xc6\x30\x35\x86\xed\xc2\x67\x14\x3e\xb7\x97\x56\x33\x07"
+ "\xab\x48\xa5\xbd\xa5\x7d\x48\x9f\xc5\xfe\xf2\x54\x70\x59\xcb\x4a"
+ "\xec\x70\xb4\x5d\xd6\x6b\x61\xdf\x37\x59\x3e\x3c\x77\x81\xce\x97"
+ "\x77\x70\xba\xae\x99\x54\x74\xd6\xbc\x14\x4e\x34\x7c\x41\xf9\x62"
+ "\xfe\x2d\xf8\x8c\x13\x7d\xd0\xb2\x45\x72\xda\xee\x6b\x26\xca\xf3"
+ "\x1f\x18\xce\xe4\x70\x2c\xb7\x86\xe2\x7e\x73\xee\x82\x5a\xc0\x18"
+ "\xd5\x88\xd3\x2d\xe1\xc7\xba\xbf\x29\x99\xea\x78\xb7\x3a\x8e\x35"
+ "\x2d\x1d\x0b\xd5\xfb\xd9\xc9\x83\xfb\x59\xb3\xa8\x7b\x5b\x0c\x76"
+ "\xf8\xd5\x0e\xa2\x11\xdb\xf0\xe6\x9d\x18\xd7\x84\xde\x0f\xf1\xa5"
+ "\x39\x97\xd6\x97\x6e\xc9\xb0\xc3\x90\x44\x65\x19\x98\xf5\x67\xa4"
+ "\x37\x71\xbf\xda\xdc\x12\x8d\x36\xc0\xd0\xda\xde\x05\x6f\x5c\xed"
+ "\x8c\x2e\xfd\x23\xa8\x6d\x9e\x73\x30\x3a\x51\xdc\xcb\x53\xbb\x9f"
+ "\xd9\xf7\xd2\x7d\xc5\xfb\x59\x17\xea\xcb\x6d\xe7\x61\xcb\xae\x11"
+ "\x89\x90\xf8\x67\xec\x05\x0b\xfb\xb4\xe5\x55\x85\x7d\x1a\x79\xca"
+ "\xde\xa0\xb0\x4d\xdb\xff\xd1\xd3\x36\x6d\xfb\xbb\xb0\x4d\x58\xf7"
+ "\xb9\x2d\xf2\xda\xa5\xf0\x4f\x42\xc2\xa5\xfd\x2b\xdb\x5e\x0b\x09"
+ "\x77\x4b\xe1\xcf\x87\x84\x3b\x44\xf8\xd6\xbf\xca\xb6\xaf\x95\xe8"
+ "\x58\x4f\xb6\x6f\xeb\x7b\x64\xfb\x5a\x97\x4a\xb6\x8f\xdb\x9f\xad"
+ "\x07\xd9\xcb\x68\x8b\xd6\x91\xbd\xd9\xba\x96\xe8\x67\x1f\x80\x4c"
+ "\x7b\x6f\x0c\x1b\x47\x61\x15\x9f\x82\x06\x7f\xb2\xdd\x7b\x86\xec"
+ "\x1e\xd9\x3c\xb2\x7d\x2f\xdd\xca\xda\x5e\xda\xcf\xce\x54\xf3\x73"
+ "\xb2\xad\x7e\xfb\xf7\x1c\x86\xed\xc4\xb0\xe7\x30\x9e\xec\x20\xf1"
+ "\xe4\x54\x76\x03\xf0\x7b\x74\x2a\x46\x64\xf8\xd4\x69\xb0\x1b\xe5"
+ "\x4d\xe7\x5f\x6d\x43\xfe\xc6\xa9\xa0\xd0\x66\x76\xf2\x7d\x28\x74"
+ "\x36\x7b\xab\xb9\x9d\xea\xdd\xad\x5b\x7d\x34\x4e\xf1\x05\x6c\x76"
+ "\xb2\xf3\xb4\x57\x85\x68\x58\xb2\xe1\x41\x3a\x5b\x5c\xd5\x6c\x02"
+ "\xa0\x73\x09\xc8\x66\x23\x2d\x9a\x0a\xa4\x49\x9c\x65\xbc\x35\xd5"
+ "\x0e\xe7\x24\x3b\xfc\x74\x36\xdd\x63\x70\x0e\xac\x85\xcc\x8a\xf6"
+ "\x11\xcb\x16\xe7\x2d\x03\x3a\x9b\x85\xee\xf3\xa4\xe7\x4b\x6a\x9f"
+ "\xa9\x42\x3e\x9f\xc5\x8a\xb6\x01\x61\x6c\x6d\x6e\x20\x9a\xed\x60"
+ "\x3d\x7e\xaa\xa4\x81\xd2\x2f\x25\xde\x30\x6b\xa9\x8c\x43\xc5\x71"
+ "\xa8\xf9\xd8\xad\xc9\x0e\x5b\xb3\x84\x7f\x63\x34\x9c\x5a\xe4\x00"
+ "\xb2\xfb\xb6\x4e\xc4\x51\x72\x4e\xe0\x40\x5c\x0c\xdb\x80\xa0\x38"
+ "\x09\x7f\xdf\x4d\xec\x2b\xc4\x9f\x4a\xf2\xa2\x73\xba\x68\x9d\x12"
+ "\xf2\x25\x96\xce\x6a\x10\x7e\xa8\xf5\x9d\xda\x4f\x01\xa4\xb3\xc6"
+ "\x50\xdf\xac\xc7\xe8\x2c\x2f\x3a\x5f\xec\x7a\x67\x8b\x21\x8f\x52"
+ "\xe4\xf3\xc5\x7c\xeb\xbf\xdf\xb3\xc5\x10\xb7\xbe\x46\xcd\xea\x91"
+ "\xfe\x63\x74\xbe\x18\xd2\x9f\x48\x7a\x28\x95\xa9\xe1\xf9\xc7\x88"
+ "\xe7\x5b\x3c\x14\x56\x6e\x65\x2d\xb2\xfc\xa9\xbc\x54\x16\x8c\xb3"
+ "\x0b\xff\x90\x9d\xb6\xc3\xb6\x06\x8a\xc7\xb0\x93\x04\x3f\x1a\xed"
+ "\x98\x0d\xdb\xb0\xb7\xce\x79\xd5\xe5\x1b\x41\x23\x6c\xda\xf6\x7f"
+ "\xa3\xf4\xc2\xa6\x6d\xdf\x11\xb0\x69\xdb\x37\x09\x9b\x26\x78\x2c"
+ "\x6c\xda\xf6\xa7\x84\x4d\xdb\x9e\xcf\xd7\x13\xa1\x4d\xa3\x38\xb2"
+ "\x6b\xb2\x4d\x3b\x78\x2b\x6b\x21\xdb\xe1\xb2\x6e\xcf\x96\x6d\xdb"
+ "\x2e\x0c\x23\xdb\x41\x34\x0a\x3b\xb5\xb5\x9e\xfd\x87\x11\xc4\x7a"
+ "\x4d\x7a\x37\xd1\xf9\x19\x9d\xd2\x3b\xca\x65\xfb\x1f\x85\x8d\xdb"
+ "\x7e\x34\x60\xe3\xb6\xa7\x05\xd2\x92\x8d\xdb\xfe\x91\xb0\x71\x22"
+ "\xbc\xf6\x31\xb2\x71\x5b\xeb\x89\x07\x12\x7e\x35\xcd\xa3\x49\xf0"
+ "\xc8\xc7\x2d\x0d\x4a\x1b\x17\x5c\xbf\x9e\xd6\xc8\x36\x8e\x6c\x1b"
+ "\x7e\x27\xda\x61\x30\x9f\x23\xa6\x7a\xb6\x0f\x79\x2e\xd7\x3b\x92"
+ "\x01\x95\x99\xee\x2b\x20\xbe\x4d\xb9\x00\x31\xd2\xb9\x35\x52\xb9"
+ "\x9f\xce\x92\xf7\x68\xda\x61\x7b\xcf\x33\xcd\x20\x70\x2e\x19\xca"
+ "\xfa\x76\x3a\xcb\xd1\x56\x76\x0e\x6c\x55\xac\xac\xd5\x73\x16\x7c"
+ "\x5b\x57\x7e\x4e\x72\xc5\xfe\xc6\x4f\xe9\x49\x76\x07\xdb\xd1\x3d"
+ "\x4b\x9c\x7c\xfc\xfe\xf3\x72\x35\xc6\x59\x82\xe2\xde\xa4\x3c\x68"
+ "\x5c\x11\xdf\x2d\x91\xc6\x11\xbe\x43\x5e\xde\xc8\x79\x3d\x93\xc4"
+ "\xf3\x42\x5f\x0a\xfb\x3d\xf1\x17\xe1\x69\x3e\x87\xc6\xcf\x6d\x0e"
+ "\x8b\xeb\x99\xe9\x52\x7c\x54\x84\xf8\xfc\x1b\xa4\x7f\xf6\x06\xe9"
+ "\x5f\x23\x1b\x44\xfb\xf1\xbc\xd6\x60\x3c\xfd\x3c\x32\xdc\x79\x82"
+ "\xfb\x37\x69\x1e\xe4\xf3\xd2\xc1\xbc\x5f\xa6\x97\x71\x92\xde\xed"
+ "\x46\x38\x7e\x46\x30\xda\xc8\xa9\x1b\x80\xce\xe7\x54\xa4\xdd\xd1"
+ "\x37\xc0\xdf\x67\x1a\xaf\x33\x4e\x13\x6b\xab\x02\xa0\xfb\xec\x9b"
+ "\xd0\x17\xa5\xbd\x34\xfb\xfc\x73\x0f\x3b\x72\xd1\x5e\xf2\x33\xef"
+ "\xa4\x7d\xbb\xe4\xcf\xdc\x2e\xce\x46\x76\xca\x7b\x2d\xfa\xa3\x5d"
+ "\x4e\xa0\x73\x58\x68\xbc\x7a\x89\x37\x4b\xdd\xc4\xcf\xfb\xdf\x51"
+ "\x27\xa7\x8d\x34\xb6\x47\xf9\x4a\x79\xf2\x7d\x48\x98\xe6\x8c\x9c"
+ "\x86\x70\xd3\xde\x1b\x6c\x8f\x6f\xe7\xe7\x9b\x79\xba\xc8\x06\xf6"
+ "\x47\x1f\x34\x41\xe4\xb3\x14\x44\x3e\xcf\x6a\x31\xcd\x99\xeb\xed"
+ "\x73\x8a\x5c\xbe\x67\xa7\x7e\xf7\xf2\x81\x54\xbe\x67\xcb\x6e\x50"
+ "\xbe\xeb\xe5\x7b\xfc\xbb\xe7\xab\x93\xf3\x75\x7f\x77\xbe\xfe\x3c"
+ "\xf5\xdb\xf3\x35\x4d\xe2\xeb\xcf\x97\xde\x80\xaf\xe1\xf2\xd9\xf7"
+ "\xed\xf3\x31\xc8\xf9\xb4\x84\xcb\x07\xf8\x5f\xc4\xf3\x7a\xb4\xf2"
+ "\x9d\x34\xd2\x3d\xc8\xbd\x5d\xd6\xe7\x74\x76\x78\x36\x51\x9e\xdf"
+ "\x12\xf7\x33\x3d\x97\x62\x87\x9f\x6b\x82\xf7\x71\x3d\x37\x79\x49"
+ "\x1d\xb5\xeb\xcc\x67\x87\xe7\xa6\xd2\x58\xdb\xd4\x4d\xe2\x7c\x40"
+ "\x29\x0d\xda\xff\x67\x77\x5e\x6f\x3e\x8d\xdf\xbd\x21\x9d\xdd\x41"
+ "\xfb\x53\x59\xa5\x29\xa3\xbb\xd4\x04\xe2\x6e\xea\xe7\x5e\xa3\x7d"
+ "\x48\xf8\x1e\x43\xef\xf8\xc4\x36\x60\xa7\x58\x87\x47\xf7\x1a\x88"
+ "\xb3\x29\x7a\x61\xdc\x37\x74\xef\x85\xd8\xc7\xf7\xdc\x49\xa4\x93"
+ "\xdf\x59\x2d\xce\xf2\xe7\x67\xbc\x38\x11\x4e\x4d\x69\xc5\xd9\x1e"
+ "\xcf\x39\x64\x18\xbb\x8c\xcf\x7f\xce\xc5\x73\x1f\x89\x36\xe6\xb9"
+ "\xc6\xee\x08\xf7\x27\xd1\x79\x67\x87\x37\xa7\x05\xed\x43\x9c\x56"
+ "\x54\xb4\xa6\x68\x82\xa1\x78\xd5\x13\x23\x8b\xcd\x39\xe6\xb5\xc5"
+ "\x7c\xc3\x7a\x1f\xc0\x00\x83\x39\x7f\x55\xde\x9a\xb5\x66\xe3\xfa"
+ "\x9c\x7c\xb1\xc1\x7d\x18\x02\x2a\x81\x20\xf8\xbe\x4a\xb4\x45\x34"
+ "\x7e\x43\x67\x51\xf0\x3b\x2b\xe9\x4c\x12\x79\xff\x6e\xb3\x9e\xdf"
+ "\xed\x85\xb6\x6b\xe7\x31\x3b\x14\x66\xcb\xf2\xa0\x73\x12\xd1\x7f"
+ "\xd1\x9f\x87\x9d\xff\x46\x3a\x34\x1b\x5d\xd1\x5a\x71\xbe\x04\x3f"
+ "\x23\xc0\x66\xc6\x80\x56\xd0\x36\xae\xa3\xf1\xd8\x5d\x99\x3e\xeb"
+ "\xce\xf1\xfc\xdc\xc7\x8d\xe7\xe9\x7b\x95\xec\x2f\xd0\xfc\x92\x98"
+ "\x0f\xbe\x7d\xd2\x39\xd8\x79\x90\xf2\xa5\xfa\x57\x53\x29\xee\x08"
+ "\x67\xd6\x9d\x59\xb4\x67\x1b\xbf\xb5\x2e\xeb\xae\xf1\xb2\x4f\x8a"
+ "\xf4\xc6\xb2\x78\x53\xa6\x1d\x76\x15\x7c\xac\x73\x80\xb4\xe7\x5b"
+ "\x5b\x23\xf6\x77\x6b\x10\x36\xd7\x0f\x6b\x45\xd8\x3d\xa6\x4c\x6c"
+ "\x3f\xc3\xce\x69\xb3\x84\x71\x19\xbe\x6b\xd9\xd1\xca\x32\x63\xff"
+ "\x1a\xe5\xb7\xfb\x36\x2c\x7b\xa2\xac\x33\x42\xf6\xbb\xa3\xc5\xf9"
+ "\xcb\xe3\x32\x30\xac\x17\x3e\xb3\xbb\x31\x8e\xce\x42\xc0\x72\xd1"
+ "\x38\xb4\xaa\xb5\xe4\x52\x63\x93\xfe\x1c\xca\x7d\x17\xfa\x17\xeb"
+ "\xc4\x39\xa5\x98\x07\xc3\x3c\x6c\x65\x57\xa1\xd9\xc0\x68\xdc\x19"
+ "\x65\xbe\x7b\x6c\xb3\xc1\x09\x2c\x6a\xe1\xe7\x94\x0e\xeb\x97\xbe"
+ "\xd4\x42\x3e\x09\x86\xf3\x7d\x7a\xbb\x8d\x32\xcf\xcd\x06\x76\x81"
+ "\x60\x22\x8d\x2f\x53\xbb\x59\xce\xdb\x94\xaf\x81\xd6\x62\xb5\xc3"
+ "\xee\x1e\x7b\x1e\x87\xe6\x4e\x30\xe4\xe6\x98\x0d\x05\xf9\xab\xf3"
+ "\x0c\xb9\xf9\xb9\x86\xd5\x6b\xcc\x86\x15\x6b\x68\xa0\x87\x86\x76"
+ "\x82\x74\xc2\x47\xe5\x5b\x9f\x1d\x2d\xcf\x65\x77\xaf\x37\xf5\x12"
+ "\x3a\x5d\xfe\x6a\xb7\xcb\x14\x13\xcc\x93\x72\xa9\xcd\xdc\xdd\x86"
+ "\xf2\x90\xce\x04\x88\xea\xc4\x6f\x2a\x4b\x46\x70\x1d\x2e\xff\xab"
+ "\x80\x2d\xd7\xc8\xb0\x5c\x2f\x86\x9c\xf7\xc7\x95\x4b\xfa\x58\x2b"
+ "\xf6\x2b\xf3\xf3\x6f\x6a\xf9\x5a\xfe\xf2\xf1\x11\xd3\xd0\x99\x5f"
+ "\x1b\x61\xd9\x45\x28\x1f\xcc\xac\xbb\x0b\x24\x1d\xd2\xfa\x2a\xc6"
+ "\xc9\xfa\x83\x3a\x51\x6e\xe9\xa9\x3f\xe5\x67\x48\x7f\x98\x2b\x5b"
+ "\xcb\xd7\x7d\x78\xdc\x68\xef\xf0\x1b\xdb\x69\xa4\xfd\x2c\x95\xc3"
+ "\xb9\x3e\x5b\x5b\xfa\x02\x3f\x87\xef\x4b\x9a\x43\xa5\x7b\x71\x50"
+ "\x57\x7a\x8b\xfb\x3b\xcb\x4f\xca\x32\x92\xe1\xc3\xd7\x61\xae\x2f"
+ "\xc1\x3a\xc6\xf9\x59\x31\x94\xeb\x18\xfa\x09\x48\x93\x5a\x3e\xef"
+ "\x8f\xda\x12\x3b\x54\xa4\x9b\x37\x31\xe6\xb2\x56\xa4\x29\xf4\xe0"
+ "\x62\x38\x3d\x40\xd9\x2e\x2b\x58\xb3\x6c\x25\x56\xf4\xa2\x3c\xf3"
+ "\x32\x13\x9d\x71\x41\x76\x80\x1f\xa0\x31\x34\xd7\xb0\xb6\x38\x6f"
+ "\x59\x1f\x08\x07\xe5\x8f\x54\xca\x5f\xe7\x43\x7d\xed\xee\xce\x8e"
+ "\xa6\xbd\x16\x62\x6f\xc5\x9e\xcb\xdd\xc5\xd8\x27\x09\x92\xfb\x9e"
+ "\x2f\x6d\xfa\x34\xf4\xed\xd2\x80\xfb\xe2\xc8\x33\xb1\x5e\xa0\x72"
+ "\x24\xf1\xa1\x5b\xad\xc2\x76\xa5\xa2\x4b\xd6\x01\x7c\xc7\xf6\xaf"
+ "\xdc\x1e\x58\xab\x51\x99\xda\xad\x8e\x3e\x4b\xf6\x47\xac\x0b\x39"
+ "\x8f\x76\x20\xae\xf6\x1c\xec\xe1\xfd\xaf\x1a\xde\x2e\xed\x49\x95"
+ "\xd3\xec\xf6\xef\x77\xde\xb3\x4f\xd6\x13\x45\x9a\xdb\x28\x8c\x9f"
+ "\x79\x64\xad\xc8\x24\x99\x33\x21\x7b\x8d\x0c\x87\x7c\x65\xb5\xdc"
+ "\x8e\xec\x29\x0b\xb5\x0d\x1f\xeb\x68\x6e\x5c\xd0\xc3\xf5\x4f\x37"
+ "\xce\xc8\xcf\x4f\x41\x9f\x0f\x71\xef\x92\xd6\xa9\x9c\xe6\xbe\x81"
+ "\x05\x71\xb9\x05\x2e\xcc\x6b\xb5\x9c\x17\x8b\x1f\x67\xac\xe5\x7a"
+ "\xb6\xc7\x1e\x18\x3b\xdc\xb3\x93\xfa\xcc\xac\x3b\xbb\x17\xca\xf3"
+ "\x24\xd7\x2d\x7c\x37\x27\x89\xb3\xdc\x48\xdf\xa8\x9c\xa4\x57\x01"
+ "\x9d\xaa\x34\xc8\xf2\xa6\x32\x63\xba\x33\x06\x7e\xde\x6f\xe5\x78"
+ "\x99\x97\x91\xce\x9c\xe1\xf5\x56\x87\xb4\xb8\x44\xdd\xe5\xfd\x3d"
+ "\x71\xce\x10\xed\x77\x89\x42\x1a\xb3\x3a\x60\xef\x74\x5a\xc3\x1f"
+ "\xe7\xa6\xfe\xd3\xb8\x2c\x3a\x43\x41\xb4\x65\x95\x55\x88\x7f\x67"
+ "\x60\x8f\x7a\xe5\x11\xcc\x7b\xa7\x90\x5d\xe5\x31\x45\xdd\x73\x48"
+ "\xeb\x02\x62\x88\x47\x64\xcf\x6c\x96\x69\xbc\xbe\x8a\xfd\xbf\x95"
+ "\x76\x39\x1d\x3f\x6f\x00\x75\x83\xd6\xc3\x5e\x84\xbd\xdc\xdf\x20"
+ "\xfa\x90\xd7\x65\x94\x3f\x95\x8f\xda\x6e\xae\x37\x7a\xba\x2f\x65"
+ "\x6f\x72\x30\x0d\x7b\x53\x65\x5c\x02\xf7\xde\x74\xf9\x9b\xce\x1f"
+ "\xb3\xc3\xbe\x16\xba\x7f\xb2\xc9\xc9\xcb\x70\x53\xb3\x19\xeb\x96"
+ "\x93\xc3\xe5\xca\x3c\xc4\xf0\x32\xfc\x36\x63\xdb\x6b\x11\x73\x43"
+ "\xa6\x4c\x61\x8b\xf6\x35\xd3\xd9\x56\xa5\x06\x3a\x9f\x30\x5d\xd8"
+ "\x1b\x7e\xa6\x0e\x8f\xdb\x22\xd5\xd9\xde\xb4\x57\x88\xaf\x8f\x71"
+ "\x7a\xb8\x6d\x10\x67\x30\x60\x3c\xd6\x11\x17\xdd\xff\x72\xcd\xd4"
+ "\x5b\xa2\xad\xcd\x9f\x07\xdd\x8b\xc9\xe7\x22\xf7\xb6\x88\x33\x4d"
+ "\x62\xb0\xcf\xb7\xd7\x2d\xcb\x6f\xdb\x7e\x0c\xa3\x7b\x5b\xd5\xa0"
+ "\x6d\xe6\x67\x86\xed\x4b\x94\xe9\x95\xe2\xd4\x5c\x1f\x38\x0f\xf6"
+ "\xf9\xeb\x7f\x37\xbf\x63\x74\x5f\x86\x9c\x0f\x87\x45\x38\x82\x6f"
+ "\x4e\xe1\x71\x8b\xfc\x78\xc4\x59\x2a\x5a\x7e\xcf\x74\x1d\x8f\xb3"
+ "\x04\x6c\xd5\x5e\xbe\x66\x8c\xaf\x5f\xc3\x72\x38\x7e\x66\xea\xcd"
+ "\x65\x60\x80\x28\x4c\x43\xf7\x17\xab\x85\x2e\xee\x3b\x2a\xa7\x89"
+ "\x52\x11\x1f\xf7\x1d\x97\xf3\x96\x71\x10\xfd\xd7\xb5\x79\xa2\x2c"
+ "\x1a\xaa\x23\xd2\x5d\xa1\xdc\x5e\x08\x9f\xeb\xf9\x69\x5c\x07\x79"
+ "\x39\x9f\xd7\x2b\x65\x2d\x7c\xba\xe7\x53\x15\xfa\x80\xf4\x3c\xef"
+ "\x97\xbf\x1d\x9e\x97\xee\xed\x7c\x3e\x4b\x41\x23\xca\xe4\xf9\xa5"
+ "\x01\x39\x70\x19\xd1\x1d\x40\x61\xef\x99\xe4\x75\x05\x61\x7c\x8c"
+ "\xd3\x49\xf2\xc0\x3e\xd9\x78\x68\x26\xdf\x10\xeb\x0a\xf2\x84\x68"
+ "\xfc\x82\xf4\x0a\xf1\x36\x04\xeb\xe6\xf3\x2d\x0a\x7a\x55\x64\xd7"
+ "\x31\xec\xac\x0c\x63\x87\xfd\x7c\x8e\x4e\xe6\x27\xc6\xb9\xfd\x72"
+ "\xbc\x8b\x60\xf7\x6b\x65\x3a\x6f\xd0\x66\x48\xbc\xda\x3f\x59\xe4"
+ "\xb1\x3f\x43\xce\x03\xdf\x67\x60\x1d\xe8\xe1\x83\x3f\xb1\xc1\x9c"
+ "\x27\x0e\x39\xa2\x46\x3e\x67\xd9\xca\xbc\xdc\x54\x43\xce\x72\x3a"
+ "\x0e\xa9\xb8\x20\x2f\xaf\x90\x4f\xe6\x04\xfb\x81\x89\x3c\x3f\xe4"
+ "\x83\x38\x7b\xfa\x00\x9d\x87\xe2\x94\xda\x61\xaa\xef\x0e\xaa\xef"
+ "\x4d\x25\x5f\xf3\x3e\x8e\xad\xec\x2e\xb0\xb9\x59\x19\xf5\x03\xb8"
+ "\xed\xa3\xf2\xeb\x9d\xa2\x1d\x40\x79\x52\x1b\x89\xb4\x75\x06\xf3"
+ "\x6b\xbf\x3b\xb8\x2e\x1f\xd0\x86\xb7\x13\xfb\x5f\xe3\x76\xa2\x42"
+ "\xe8\x05\xd9\x27\xda\x03\x40\x78\x31\x4d\x7a\x30\xce\x03\x33\x02"
+ "\x36\xea\x40\xb6\x6c\xa3\x44\x3b\x71\xa0\x04\xdb\xa0\x0a\x29\x2f"
+ "\x73\x40\x6f\x0e\x38\x85\xde\x1c\xd8\x61\x87\x37\xfd\xe7\x7d\x88"
+ "\xb6\x63\x7f\x36\xf9\x8f\xe2\x5e\xef\x03\x47\x64\x7c\xfb\x12\xa8"
+ "\xdd\x38\xd0\xd0\xd3\x7f\x38\x90\x4b\xfe\x03\xad\x4f\x24\x5e\xf0"
+ "\x7b\x8c\x79\xbd\x39\xd0\xae\xb0\x3f\x3a\xfc\x76\x86\x93\xf5\x13"
+ "\xd4\x1c\x8f\xa4\x69\xb7\x91\xcb\x56\x9b\x27\xd2\x51\x55\x79\x96"
+ "\xc2\xbc\x65\xe6\xbc\xdc\xd0\xf9\x36\xa3\xec\x8b\xd1\x5c\xf7\x3e"
+ "\xac\xf7\x8e\x78\xe2\x47\x15\x96\xff\x45\xb3\x5c\x06\x6e\xa7\x2c"
+ "\x74\x67\x0a\xb7\x71\xb1\x1d\xf0\xe2\x64\x71\x87\x79\x95\x59\xd6"
+ "\x13\x82\x9b\x62\x61\x3e\x0c\xc3\xf2\xef\x2f\x93\xfa\x5d\xd8\xb7"
+ "\xad\xaa\x92\xbf\x03\xe9\xab\xfe\xc1\xdb\xbe\xfd\x7c\x6d\x1f\xf2"
+ "\xf4\x85\x45\x0a\x7f\x8b\xbe\xc7\x4a\xdf\xfc\x3c\x26\x71\x1f\x7b"
+ "\xd5\x57\x82\xbf\x55\x28\xff\xe7\x25\x5b\xf1\x62\x86\xc0\x03\xf0"
+ "\xca\x66\x47\x74\x2d\x1f\xe7\x7f\x41\x2b\xe7\x87\xe9\xcf\x2a\xf3"
+ "\xa4\x76\x2b\x14\x9f\x1d\xaa\xf8\x3a\xaa\xad\xfc\x2c\xb9\x17\xa6"
+ "\x86\xa1\xb5\x45\x09\x87\x30\x26\x84\x49\x94\xcb\x3c\xd7\xc2\xc3"
+ "\x4a\xae\x53\xc6\x2e\xa9\x8c\x74\x76\x3f\xcf\x9f\xf4\x5f\xa2\xe1"
+ "\xac\x74\x3e\x89\x9d\xee\x8d\x24\xfa\xf9\x39\x69\x7a\xaa\xd7\x2f"
+ "\x9c\xc6\xf6\x6c\xaa\x5c\x0e\x2a\xe3\xb1\xcd\x0e\x8d\x7c\x3e\x95"
+ "\x48\xff\xc2\x3b\xc1\xb4\xbd\xa8\x51\xa4\xe9\x6c\x1c\x42\x63\xf8"
+ "\x2f\x1c\x64\xd6\x2a\xde\xff\xa1\x73\xab\xf6\xf9\xf5\xf0\xc5\xb4"
+ "\x9e\x7a\xf7\x42\x35\xe9\x9d\x52\x97\xf2\xef\x5a\x86\x9a\x54\x9c"
+ "\x67\x9e\xc0\xbd\x7b\x74\xec\xe8\xf8\xb3\x1c\x73\xfe\x9a\xd5\xc5"
+ "\xa9\x86\xe2\xdc\x1c\xa9\xd2\x07\xd5\x79\x2b\x1f\x03\x70\xca\xf5"
+ "\x0c\xf3\xaa\x0e\xd8\x96\x17\x03\xfa\x4f\x6b\xb5\x86\xd0\x18\xed"
+ "\x8b\x5f\x89\xfa\xf4\x62\xb3\xa2\xee\xf2\xf4\x54\x47\x6b\xb9\xcf"
+ "\xf6\xa2\xb2\xfd\x77\x22\x4f\x7b\x5f\x84\x17\x77\x49\x3c\x75\x0a"
+ "\x1e\xbf\x74\x0f\x2f\x27\x3f\x97\xeb\xc5\x19\x54\x4e\x7e\x0e\x0c"
+ "\xf7\xcf\x5e\x32\xc8\xe5\x0d\xf4\x1b\x5e\x1a\xcf\xfd\x28\xc9\x5f"
+ "\xbb\x51\xff\x5e\xf8\xa7\x2f\x9d\x91\xc6\xe0\xda\xe4\x3e\x9e\xec"
+ "\x5f\x23\x2d\xb9\xc2\x57\x7d\x69\xd7\xec\x12\x76\x6d\x89\x85\xce"
+ "\xab\x23\x19\xbc\xf4\x9e\xec\x5b\xf2\x75\x7c\x7b\xc6\xa5\x21\x3d"
+ "\xf5\x4a\x3b\xc1\xa2\x56\xb6\x49\x3e\x62\x9a\xe8\xbb\xde\xf4\xee"
+ "\x39\xcc\x8b\xe6\x20\xae\x43\x1b\x95\x0b\xed\x5f\x3d\x3f\xfb\x8b"
+ "\xfc\x6b\xd6\xad\x97\xee\xc8\xac\xe6\xeb\x35\x6b\x10\xb7\x03\x65"
+ "\xeb\xb2\x56\xa3\xff\xf7\x12\xd7\x0d\x1f\xea\x28\xad\xe1\x71\xca"
+ "\x3e\x12\x54\xcf\xa4\xb6\x08\xdf\x51\x6f\xab\xeb\x84\x4e\x55\xd7"
+ "\x39\x8a\x8d\xd0\xdd\xad\x57\x77\x17\x67\x6b\x68\xbc\x80\x78\x61"
+ "\xab\x76\x83\xd0\x9f\xea\x42\xd4\x3b\x83\x12\x9f\x84\x8b\x78\xaa"
+ "\x21\x3a\x58\xb1\x5e\x4d\xfa\x4d\xfa\xca\xba\x8d\xe8\x0b\x57\x8f"
+ "\x67\xc5\x46\x75\x84\x33\xb8\xae\x57\xce\x58\xba\x67\x92\xee\x1e"
+ "\x25\x7b\x25\xce\xf9\x3f\xe8\xdd\x2b\xc6\x06\xa4\x7c\x0f\xaa\x98"
+ "\xfa\x10\x6f\x57\x76\xf3\x76\x85\x81\x38\x37\xfd\xa0\x81\xaf\xa7"
+ "\x2d\x3c\xc4\xcf\x12\x95\xf6\x69\x3b\x9a\x0b\x3d\xfc\x5e\xbb\x52"
+ "\x33\xf9\x69\x1e\x9a\x3f\xe2\xfb\x90\x9b\xcc\x1e\x98\xeb\x26\x9d"
+ "\x3c\x98\x45\x67\xc6\x8b\x3b\xc8\x0f\x2e\x92\xcf\x89\xa7\xbb\x2b"
+ "\xe9\xde\x55\x2c\x57\x54\xe0\xde\xd4\x1a\x3a\x13\x1a\x44\x7f\x5c"
+ "\x0f\xbb\xd1\xa7\x17\x32\x38\xf8\x2a\xdd\xdb\x27\xfa\x0a\xe7\x50"
+ "\x2e\x51\xff\x3a\x07\x07\xdf\x17\x73\xc9\xb2\x9d\xa8\x19\x47\x6b"
+ "\xd4\xed\x12\x0e\xcc\x0b\xdb\xff\x97\xec\x22\x2f\xc4\xe7\x92\xe5"
+ "\x79\xf0\xd5\x9e\xe3\x1b\x01\x7c\x76\x38\x78\x58\xf2\x0b\x40\x8c"
+ "\x81\x7d\x8c\xb8\x6a\x12\xe5\x31\xb0\x80\xef\x53\x63\x94\xc7\xc0"
+ "\xc4\x19\xd4\xd5\x5d\x94\x7f\xa4\x31\x22\x56\xfa\x28\xf0\x31\x2b"
+ "\xf4\xe1\x22\xfa\x13\xd8\xbe\x13\xed\xb2\x5f\x28\xe4\x53\xf3\x11"
+ "\xf9\x87\x74\xd7\xab\xec\x4b\x0a\x1f\xa0\xe6\xa4\x68\xcb\x6a\xea"
+ "\xe5\xb6\x0c\xd3\x1e\x93\x6c\x85\xd4\xce\xd5\xf8\xfb\xbf\xe1\xd7"
+ "\xe7\xd7\x74\xc9\x3c\x92\x79\x2e\x78\x54\x3b\xad\x3b\x61\xf8\xd2"
+ "\x00\x6f\x6b\xf9\xd9\x4e\x8a\xf8\x4d\x0a\xde\xd3\x77\x89\xb0\x9b"
+ "\xb5\xd8\xfe\x57\x1f\x15\x6d\x4a\xad\x74\x6e\x89\xe9\x21\x7e\x5f"
+ "\x3c\xe7\x41\x3e\x1f\x9b\x71\x94\x1a\x91\xb6\x5a\x93\x5d\x75\xb7"
+ "\x45\xd8\xb2\x5a\x6c\xff\x6a\x72\xa5\x74\x3a\xa2\x45\x49\xef\xfc"
+ "\xd5\x2b\x57\xaf\x59\xbf\x9a\x06\xd4\xd6\x16\x1b\x96\xad\xc9\xcd"
+ "\xeb\x13\x66\x3c\x44\x4f\xf7\x69\x3b\xf7\xf9\xcf\x9f\x7a\xb9\x8c"
+ "\xd6\xd3\x8b\xbb\x0b\x5e\xde\x62\xf8\x11\xe9\x57\xed\x17\x34\x56"
+ "\xc0\xef\x90\xa0\xb3\x56\xc5\xb8\x41\x27\xa5\x17\xbc\x7e\x79\x55"
+ "\xf7\x7a\x93\xe4\x63\xbd\x3c\x8c\xf8\x28\xf5\x39\x58\x07\xd4\xe5"
+ "\xc8\xed\x10\xd1\xc7\x7d\xf3\x6b\x46\x6e\x17\x7d\xd7\x4c\x1a\xce"
+ "\xaf\x6b\x46\x6c\x6f\xea\x32\xec\xaa\xbb\xe6\x89\x72\xd5\xcd\x90"
+ "\xf9\x41\xe5\x77\xd1\x9d\x9e\x2c\x1f\x75\xf4\xe5\x32\x09\x17\xd9"
+ "\x4f\xc2\x9d\x28\xaf\xe7\xa6\x33\x45\x1b\xd7\xd1\x79\xc2\x87\x66"
+ "\xfa\xf6\x90\xbd\xa9\xab\x90\xed\x12\xb5\x45\x3e\xc4\xf3\xd6\x15"
+ "\x47\x34\xd6\x9b\xc9\x98\xf6\xd6\x73\x70\xe8\xac\xb8\x77\xa0\xee"
+ "\x78\xf0\xbd\x03\x87\xd0\x1b\x3d\x74\x56\xfa\x79\x14\xef\xd7\xfb"
+ "\xc9\x69\x5a\x14\x61\xfa\x10\x18\x2c\xd7\xa1\x14\xbf\xbf\x22\xce"
+ "\x35\x95\xce\x41\xa6\x3b\x34\x0e\xe5\xd0\xd9\xa1\x01\xdd\xa8\xdb"
+ "\x2e\xf9\x20\x9d\xc4\x3b\x6a\x6f\x11\x46\xec\x65\xad\x44\xdd\x60"
+ "\xd9\x40\x65\x62\xae\x7c\xd4\x89\x43\x25\x01\x3d\x10\x3c\xc2\xb0"
+ "\x8a\x80\x9f\x72\x28\x97\xd2\x28\xf9\x80\x79\x4c\x16\x7d\xd3\x43"
+ "\x0d\x72\x9b\x4d\xe7\xa6\x8a\x7b\x28\x0e\xa5\x1c\xdb\xdc\x89\x7d"
+ "\xfe\x43\x67\x14\x38\x52\xa4\xb1\x08\x0d\x53\xd7\xee\xa8\xe5\x7d"
+ "\xb6\x43\xce\xc0\x98\xc0\xa1\x14\xb2\xbb\x1c\x47\x82\x29\xcb\xe6"
+ "\xe4\x77\x55\xab\xe4\xbb\xe9\x5d\xd6\x97\x0d\xb2\x8f\x22\xe3\x6a"
+ "\x16\x63\x4e\xfc\xac\x4b\xac\x83\x15\x08\x33\xd5\x3f\x1e\x8b\x61"
+ "\xfe\x3e\xa0\x05\xeb\x31\xf7\xbd\x5f\xce\x0d\xf4\xf5\xea\xf8\xbe"
+ "\x6a\xde\x0f\x14\x78\xd0\xef\x7a\x39\x3b\xb4\xdf\x86\xfe\x83\x21"
+ "\x7f\x75\x3e\xba\x0f\x2b\x0a\xd7\x4c\xc4\xae\xc3\x8a\xc2\xfc\x89"
+ "\xb4\xf4\x6b\xe6\xd4\xe9\xfc\x89\x95\x63\x62\x98\xf1\x63\x1a\xf7"
+ "\xe6\xf7\x41\xd3\x98\x11\xf6\x73\x69\xec\xd4\x25\xee\x55\x8d\x91"
+ "\x9e\x5a\xe9\xd9\x0b\xdb\xbd\xec\x0e\x78\x25\x9a\xee\xc0\xb1\xc3"
+ "\x2b\x7a\x9f\x55\xdc\x27\x2b\xb5\xd9\x68\xcb\x5f\xf6\xca\xf3\x66"
+ "\x7c\x2d\x3c\x9d\x67\xd8\x6d\xe2\xe3\x71\x2e\xeb\x2b\xfe\xf1\x0f"
+ "\x31\xbe\x28\xe6\xde\x30\x3c\x4b\x0e\x97\xc7\x63\x31\x2c\x57\x1e"
+ "\x7b\x15\xb0\xaf\x98\x03\x69\x83\xc6\xb6\x13\xe5\x79\x39\x84\xa9"
+ "\x92\x79\x26\xe3\x29\x35\xb0\x8b\x92\x9f\x14\xc5\xfd\x6a\xeb\xcb"
+ "\x3b\xf9\x19\xa2\xe4\x8b\xf3\x71\xe6\x57\x4e\xca\xf9\x50\x1f\x81"
+ "\xe8\x96\xe6\x80\x78\xbd\xa7\xb3\x42\xc5\x59\xa3\xaf\xf8\xe5\x1f"
+ "\xc2\x73\xe3\xdd\xc3\xf8\xb8\xbc\xb1\x18\xfd\xb3\x61\x21\xe3\x70"
+ "\xa4\x43\xa3\xf7\x41\x6f\x3e\xc6\x24\xfa\xe9\xd1\xe4\x23\x60\x19"
+ "\x0e\xa1\x3c\xa3\xc8\x96\x8b\x76\xef\xf0\x3c\x7f\x1b\xaf\x33\x65"
+ "\xb2\x84\xe1\x8b\xe8\xbc\x79\xb1\x7f\xe1\xf0\x53\xa4\x6f\x8e\xfe"
+ "\x2b\x5d\x8c\xd6\x2a\x1f\x58\xe8\x12\xe3\xf0\x87\xdf\x0c\x8c\x99"
+ "\x1d\x06\xe9\x6c\x54\x5a\x07\x87\xf2\x3a\xec\x5f\xff\x41\xf0\xdc"
+ "\xf7\x42\x9c\xb4\x57\x81\xf2\xff\x0e\xf3\x3d\xd8\xef\xdf\x25\xdd"
+ "\x2b\xfe\xea\x78\x8e\x03\x6d\xb5\xd8\x0f\xf0\x2a\xea\xe1\xe1\x44"
+ "\xd1\x36\x10\xee\x6c\xe8\x4e\xd8\x75\xba\xdb\x7a\x2a\x8d\x78\xe8"
+ "\x4c\xf8\x85\x4e\x9c\x45\xfc\xea\x3d\x4e\xab\x06\x65\xfa\x2a\xca"
+ "\xff\x8d\x88\xf3\x5a\xd7\xd6\xb1\x66\xcf\x15\xd6\xb0\xfb\x53\xb4"
+ "\x73\xcb\x01\x3c\xeb\x58\xfd\xb5\x2b\xec\x18\xbf\xfb\xfc\x09\x80"
+ "\x5d\xff\x04\xf0\x46\x2d\xfc\xf2\x2a\xea\xea\xac\xcb\xbe\x8b\x74"
+ "\x67\x60\x2d\xc2\xcd\x72\x5e\x62\x35\x98\x66\x56\x21\xbb\x58\x83"
+ "\x70\x33\x2f\x5c\x64\x07\x11\x76\xa6\x09\x75\x65\x1d\xf3\x78\xa3"
+ "\x56\x7e\x69\x58\x40\xb6\xfb\xd5\xe3\x8e\x3d\x63\x76\x30\xab\xba"
+ "\x9c\x6d\x1d\x31\x1c\xe9\x69\xf1\xdf\x57\x86\x78\x49\xaf\xe8\x9e"
+ "\x52\xf4\x0f\xbf\x44\x3d\xf8\x72\x09\xfa\x1d\xa8\xb7\x5f\x22\x9c"
+ "\xc3\x0e\xcf\x71\x9b\xe3\x88\x1a\x9e\x80\x3f\x63\x58\xfa\xaf\xb0"
+ "\x66\xef\x3a\xd6\x50\xbe\x18\xe9\x3f\x8f\xf4\x5f\x61\xf5\x58\x86"
+ "\x63\xbb\x3b\x00\x88\x7e\x2f\xe1\xf4\xd2\x7d\x89\xaa\xf8\x5a\x8c"
+ "\x5f\x62\xd1\x41\x2d\xc2\x2e\x76\x42\x7c\x0d\xc2\x2c\x7e\x2a\x1e"
+ "\x38\xfd\x5d\x48\x77\xfc\x98\x1d\x5e\xcc\x9b\xe8\x77\x59\x7f\x51"
+ "\x28\xd3\x29\xe7\x4f\xf4\xca\xf5\x76\x09\x8d\x11\x26\x0c\x3f\x4c"
+ "\x74\x8b\x79\x8f\x5f\xfc\xdd\x51\x8c\x72\x8e\x1a\x31\x5c\xf4\xb1"
+ "\x7f\x51\x2f\xd3\x1f\x3c\x0f\xf6\x0b\xb7\xb0\x9f\xbf\xc0\xfe\xcf"
+ "\x61\xe9\x3c\x78\x11\x46\xe5\x77\x60\xbd\x95\xf6\x00\x7e\x29\xf3"
+ "\x0c\xe3\x0f\x87\xce\x73\x65\xad\x29\xe2\x63\xd4\x39\xcb\xcc\xf9"
+ "\xeb\x72\xb0\xe7\xdb\x07\x0a\x29\x88\xf7\x8d\xf3\x72\x0d\x6b\x56"
+ "\x1b\x96\xe7\xe4\x17\xac\x59\x97\x57\x94\xca\x87\x33\x8a\xf3\x56"
+ "\xe7\xd2\xd0\x75\x51\x4e\x51\x61\x9f\x90\xfe\x4c\xc5\x98\x1d\xad"
+ "\x74\x17\xcd\x66\xd2\xef\xd7\x27\x4b\xe3\xb6\x6e\x66\xcd\xe0\xfd"
+ "\x62\x61\x63\x7e\xf9\xa6\x61\x63\x06\xc5\x8f\x13\xed\xf8\xeb\x19"
+ "\xac\x72\xf8\xab\x8c\xf1\x3b\xbc\x55\x17\xe1\xf5\x91\x9c\x1f\xdd"
+ "\x99\x32\x1e\xde\x77\x25\x9d\x2d\xdc\x48\x7e\xd8\x2f\xcf\x30\x8a"
+ "\x0f\xe2\xc5\xeb\xd1\xc2\x17\xc1\xf0\x6b\x99\x10\x58\x77\xff\xfa"
+ "\x64\xa6\xc6\xb2\x23\x2f\xa5\x3e\xc3\x52\x69\xff\xe3\x1f\xce\xc1"
+ "\x6b\xd4\x97\xa2\x79\x9b\xd3\xdc\x27\xe7\xfb\xb4\x5e\xfb\x1c\xfb"
+ "\x1c\x4b\x99\xb5\x57\x2c\xf1\x6b\xb7\xe8\xd3\xab\xe3\x54\x74\xcf"
+ "\xee\x39\xda\x33\x9a\x46\xf3\xbc\xb5\x56\x5f\x5a\x60\x9d\xd3\x2f"
+ "\x35\xd4\xbf\xe0\xf3\x1c\xdc\x26\x1d\x59\x2a\xd7\x5d\x35\xed\xc3"
+ "\xd9\x3a\x60\x82\xa8\x7f\x47\xf2\x08\x1e\xe5\x3f\x41\x94\x8f\xdf"
+ "\x37\x8e\xbe\xc1\x6b\x9b\xb0\xfc\xbf\x60\xa5\x99\xd2\x9c\xe4\x6b"
+ "\x9b\x7c\x09\xaf\xeb\xbc\xc5\xd8\x2f\xd0\xbd\x5e\x81\x71\x1f\xf8"
+ "\x2a\x87\xff\xca\x8b\x3e\x95\x0f\xfb\x09\xac\xf2\xf5\xbd\xde\xca"
+ "\xe1\x47\x7c\xeb\x8d\x6a\x6a\x5b\x4b\x2d\xc8\xdf\x35\xa6\x3e\xec"
+ "\x92\xe9\x26\xef\x7a\x23\xfa\x5f\xc3\xeb\x19\xc3\xb4\x09\xc3\x1b"
+ "\xf9\xdd\xc6\x95\xc3\xdf\x96\xbe\x3f\xa6\x6f\x1f\xfa\xc9\x18\xd6"
+ "\x82\xdf\x7f\xf2\x31\x05\x7c\x30\xec\x49\xfa\x8e\x53\xf1\xf5\x95"
+ "\x69\xd8\x2f\x49\xa7\xb2\xcb\x65\xe6\xfd\x33\x1a\x23\xf2\x97\xed"
+ "\x35\x8b\x1c\x4e\xfd\x06\xe1\xc3\xc3\x32\xe4\xf1\x4e\xa1\x8f\x7e"
+ "\xb8\x87\x65\x1e\x88\xbb\xbc\x87\x1f\xb6\xa3\x7c\x7d\x74\x07\xfb"
+ "\xd6\x81\xc3\x99\xfa\x97\xfd\xc9\x66\xcd\xf6\x72\x5b\x08\x62\xde"
+ "\xe9\xb5\x7a\x99\x9f\xb4\x9f\x80\x6c\x29\xca\xcd\xb8\xc4\x01\x7d"
+ "\x84\x1d\x78\xed\xb4\xa2\x7f\xd8\x45\xb2\xb6\xc3\x6b\xfc\x9c\x25"
+ "\xa6\xd6\x6e\x15\xdf\x47\x0c\xa2\xae\xbc\xe6\x91\x61\x31\x4c\x9c"
+ "\x77\x52\x31\x62\xdb\x7a\x0f\x0c\x28\xbc\x97\x75\xa0\x6e\x9e\x16"
+ "\x70\xaf\xa7\x04\xea\x94\xd0\x37\x7c\xd6\x53\xff\x9a\xe6\x1f\xe9"
+ "\xbd\x26\xc2\x9e\xd8\xcd\xd5\x8c\x51\x7b\x45\xed\xa7\x61\x00\xf0"
+ "\x3b\x74\x51\x0f\xcb\x9a\xaa\x9d\xc0\xe5\x9c\x30\xfc\xd5\x6e\xba"
+ "\x2b\x1d\x6d\x79\xb8\xf4\x94\x06\xe1\x8f\xf3\x7e\x12\xd6\x0b\x1f"
+ "\xd6\x0b\x4c\xf3\x0b\xd2\xeb\xcd\x97\xa9\xff\xf2\xba\xa7\xb9\xa4"
+ "\x93\xce\xec\x47\x7d\x7d\xdd\x43\x3c\xa4\x7a\xb0\xdb\xca\xf7\x43"
+ "\xf2\x76\xb2\x71\xdd\x58\xc2\xf1\x65\x3f\x37\x68\x5a\xd1\x22\xa0"
+ "\x5c\x68\xbd\x5b\xfc\x79\x84\xd7\x98\x41\x4b\x7d\xd8\xe0\x36\x24"
+ "\x7c\xfb\xd1\xad\x1b\x57\xd1\x5d\x39\xce\xe4\xb2\xbe\x31\xd6\x0e"
+ "\x47\x23\xf6\x33\xb6\xde\x8a\x7e\x0d\xc2\x55\x0c\xa0\xb9\xea\x37"
+ "\x96\x5e\x0f\x56\xde\xa3\x4b\xba\x32\x5a\x4f\xe3\x29\xe3\x2a\xf8"
+ "\x9c\x77\xc2\x38\x93\x18\xb7\x7c\xa3\x4e\x4e\x4f\xe3\x9e\xb4\xbe"
+ "\xa0\xfc\x2a\xe8\xcb\xfd\x7d\xc5\x37\x5a\x84\x8c\xde\x68\x91\xfb"
+ "\x17\xe1\xf2\x31\x1f\x66\xbe\xd2\xa1\xa0\xb6\x19\x1c\x30\xca\x0d"
+ "\xb1\x35\x2f\x02\x54\x6c\x64\xee\xbd\x1b\x51\x8f\x90\xc7\x4c\xfd"
+ "\x46\x06\xad\xc3\xa8\xc5\x36\x7a\xb7\x0f\x20\x0a\x69\xd9\x7b\x05"
+ "\xf3\xdc\x2c\xe0\x98\x38\x5f\x4d\x8f\x70\x05\xf8\x4c\x44\x3b\x02"
+ "\xfb\x36\x83\x76\x9f\x0f\x34\x15\x9b\x21\x19\xc3\xd0\xaf\x38\x3a"
+ "\x43\xee\x0b\x84\x9d\x17\xae\x41\xfb\x88\xf9\x6e\xd9\xcc\x3c\x1f"
+ "\x63\x6f\xc9\xea\x63\xee\x6f\xc3\x77\x2c\xff\x51\x51\xc6\xa3\x47"
+ "\xe5\xbe\x01\xbe\x37\x04\xef\xb5\x3e\x5a\x17\x3a\xc7\xfc\xc4\x9a"
+ "\x35\xe6\x25\x45\x79\xf4\x30\x0e\x5d\x3b\x2c\xd4\x57\x8c\x15\xf7"
+ "\x52\x1d\x3d\x4d\x75\x8b\xfc\x27\xb1\x67\xe9\x4d\x9d\x62\xbc\x87"
+ "\xc6\x9c\x27\x91\xdf\x47\x6b\x4e\x30\x2e\xf5\xa3\x92\x4d\xbc\xbf"
+ "\xf1\xb9\x16\xd4\xa1\xf9\x2d\xcf\x31\xe7\x14\x4c\x10\xcb\x1a\x7a"
+ "\xe6\xf3\x66\x46\x48\x3e\xfe\xf9\x5f\xa9\x6f\xee\xe4\xf6\x71\xcf"
+ "\xeb\x65\x2c\xbe\xdc\x20\xda\xba\x37\xab\xe5\x35\x84\xe1\xcf\x76"
+ "\x19\x91\xec\xad\xcc\xaf\xa3\x3a\x52\xba\x09\xd4\xbf\xd9\xd8\xa6"
+ "\xa6\x7e\xc9\x66\x7c\xa7\x35\x5d\x7c\xfc\x5b\xba\x33\xf2\x83\xaf"
+ "\xdb\xb0\x2d\x7d\xd3\xc1\xf6\x8c\x48\xc6\x3a\xdf\x19\x69\x1d\x97"
+ "\x72\x5f\xbc\x98\xbb\xff\x95\xf6\x3a\x6b\xbe\x38\xbc\xbc\x4e\x23"
+ "\x24\xdd\x26\x21\xb3\x5f\xa1\xfe\xbf\xa1\x97\xf5\x57\x86\x29\xbf"
+ "\x55\xbe\x8b\xf3\x57\xf3\x22\xe1\x67\x15\xe3\xaa\x84\x8e\xff\xea"
+ "\x7d\x3e\x47\x3d\x00\x9e\x39\x07\xbf\x7a\x4f\xa3\x07\x3d\xbe\xff"
+ "\x12\xdf\xf9\x18\x06\xc5\x05\xe9\xd1\x6d\x5d\x75\x1a\xb4\x38\x68"
+ "\x79\x54\x4c\xfc\xa1\xe3\x27\xfe\xa2\xf0\xa7\x66\x2a\xbe\x7b\x25"
+ "\x0a\x25\x18\xd3\x4b\x03\x71\xfd\x62\xb5\xb7\x0f\x4a\xd6\x4f\xba"
+ "\x37\x7d\x7c\xe9\xe6\x12\x0b\xf3\x79\xdc\x71\x4c\x79\x7f\xea\xee"
+ "\x96\xf9\xc3\xca\x84\xff\xb0\x67\x77\xd8\x3b\x16\x77\x59\x59\x21"
+ "\xf5\x69\x7d\x09\xaf\x3a\x4a\xd7\x82\xfa\xad\xab\x76\x35\xf5\xa1"
+ "\xc8\x87\xa1\x3b\xde\xcf\xc1\x5b\xd3\x3f\xc4\x30\xe4\x97\x85\x55"
+ "\xbc\xea\x10\x7b\x93\xde\x7a\xd6\x57\xf9\xaa\x23\x80\x5f\x03\x84"
+ "\x1f\xfb\xe9\xea\xc3\x9b\x3b\xd5\x36\xcd\xbd\x60\x33\x38\xe1\x43"
+ "\x7c\x0f\x2b\x2b\xcc\x93\xc6\x84\x09\x07\xb6\xc1\x3b\x4a\xbf\xc1"
+ "\xb6\xd9\xc2\xe7\x67\xd4\x17\xe1\xad\x8f\xea\x23\xa4\xe3\x73\xac"
+ "\x09\x63\x46\xb8\xac\x6f\xa1\x3d\x7f\x62\x9f\xd4\x0f\xc1\x7e\x52"
+ "\x7d\xac\xdc\x1e\x60\xfc\x70\x31\x4f\x54\x6f\x90\x61\xc2\xca\xe8"
+ "\xe7\xb4\xe6\x99\x35\x92\x1e\xb0\x2b\x9d\x9d\x74\x06\x63\xa4\xb1"
+ "\x38\x5a\x73\x5f\xac\x67\x3e\x76\x60\xa5\x73\x73\x15\x73\x6f\x4e"
+ "\x66\x9d\xa5\xc9\x7c\xad\x0c\xf5\x2b\x74\xdd\xfd\x57\x7e\xd5\x7d"
+ "\x60\x65\xb7\xef\xc0\xca\xaf\x59\xff\x95\x97\x7d\xfd\x57\x5e\x11"
+ "\x63\x86\x10\xe7\x3a\xb0\xd2\x81\xf4\x4c\x41\x3a\x2f\xd2\x3c\x24"
+ "\xf6\x33\xb0\x3f\x57\x7f\x5c\xee\x67\x04\xf5\x63\x72\xcd\x4b\x68"
+ "\x51\x41\xce\xaa\x85\x69\x8f\x4b\xd7\x72\x3c\xb5\x36\x67\x65\xde"
+ "\x12\xec\xe1\x2c\x91\x56\x1f\xd1\xf0\x33\x3a\x73\x04\x4b\x33\x1e"
+ "\x13\x0c\xeb\xf3\x8a\x8a\x46\xae\x59\x3d\xc1\x40\x97\x79\xf0\x70"
+ "\xb1\x8f\xc9\x94\x93\xcb\x5d\xbe\xbc\x1e\xe3\xd5\x54\x16\xba\x3b"
+ "\x12\xcb\xf3\xb5\xb2\x0c\x12\xcd\xb7\x73\x9a\x91\x5e\xa2\x5b\xa2"
+ "\x19\xfb\xed\xbf\xf6\x8f\x7f\x06\xc6\x0c\x7e\xed\xa6\x76\x5c\xc6"
+ "\x41\xe9\x31\xdd\x25\x45\x3a\x2c\xeb\xaf\x8f\x28\xc7\x4d\xc5\xd8"
+ "\xe5\xdb\x59\x7c\xcc\xf4\xc0\x42\x07\xdd\xa3\x83\xfe\xa0\xea\x3c"
+ "\xbc\xcd\xfd\x26\xea\xf3\x71\x9e\x7b\xe4\xfb\x26\xea\x5b\x68\x0d"
+ "\x8a\xa0\xed\xd7\x4e\x85\x4f\x86\x32\x7f\x7b\x11\x8d\xe5\x75\xc1"
+ "\xdb\xe3\x10\xee\x2b\xc4\xe7\xf4\x1d\x58\xd8\x8d\xfd\x33\x94\xc1"
+ "\xc2\x2b\x74\x8e\x08\xed\x3d\xa1\xbb\x1d\x5a\x9d\x0e\x7e\x4f\x1e"
+ "\x4f\x83\xbd\x58\xa2\x59\xe0\x7c\x3b\x33\x30\xa6\xf0\xb6\x56\xa6"
+ "\xcb\x0e\xbf\x3e\x4d\xb4\x28\xe5\x33\x7d\xea\xbc\x91\xab\xd7\x8c"
+ "\x5c\xb6\xd6\x3c\xd2\x6c\x2a\x5a\xb3\x76\x85\x29\xc8\x5e\x66\x7a"
+ "\x2a\x8d\xe3\xd8\xbf\xb2\xa1\xdf\x16\x5d\xaf\x38\x55\xda\xaa\x53"
+ "\xdb\x68\x4d\xea\x2d\x10\x67\x79\x9c\xc6\x08\xe1\xe0\x7e\x76\x9a"
+ "\xc6\x26\x68\x8e\x3c\x6e\x4b\x5a\x7e\xec\x96\xb4\x1c\x9f\x35\xfd"
+ "\x6e\xda\x03\x15\xe7\x99\xae\x8a\x6d\x9f\xac\xf2\x5a\xc7\xde\x4d"
+ "\x3e\x59\x35\xda\xf0\x8a\x5b\x59\x1b\xa6\x39\x8b\x69\xec\xf8\x6b"
+ "\xc7\x74\x27\x3b\xe0\x37\xbd\xf1\xd9\x12\xb7\x85\xd5\xc6\x79\x98"
+ "\x2f\xb5\x0c\xfb\x5f\x88\x97\xf6\x7e\xb0\x04\x63\x1a\xf5\xff\x46"
+ "\x7b\x20\x3a\x30\x56\xfb\x9b\x54\xac\x6b\xbd\x66\x6e\x67\x1f\x22"
+ "\xae\x16\xdf\x15\x5f\x0b\xdd\x7b\x2c\xcd\x59\x9c\xd9\x89\xbf\x51"
+ "\xfb\x80\xee\xba\x87\x92\x2f\x40\xdd\xda\xde\x49\xfb\x48\x1a\x31"
+ "\xbf\x66\x84\x3f\x8e\xbf\x06\xc3\x6a\x88\xba\x08\xbf\xd9\x24\xaf"
+ "\xcd\x13\xfe\xff\x3b\xdc\x0f\xc6\xf4\x8d\xb4\x2f\x64\xd3\x2a\xb4"
+ "\x1d\x1d\x0e\x35\xe1\xc7\xb0\x16\x9b\xa9\x13\x6c\x9e\x93\xb4\x77"
+ "\x87\xc6\x68\x08\xc6\xe8\xc1\x38\x1a\xa7\xf1\x31\xbd\x1a\xed\xe8"
+ "\x49\x6c\xa7\x1a\x68\xcd\x67\x6b\x49\x1b\xb4\x16\xb6\x80\xaf\xdb"
+ "\x98\xc2\xf1\x21\x3d\x98\xe6\xcc\x5b\xcb\xdd\x6a\xd2\x17\x84\x3b"
+ "\x4d\xfe\x10\x9d\xf5\xc0\x8a\x8d\x3f\x42\x98\x66\x8c\x3f\xcd\xfe"
+ "\xa5\x57\xd3\xba\xca\x8b\x70\x6c\x3b\xeb\x36\x1a\x47\x77\x89\xfb"
+ "\x6f\xcf\xc1\xb1\x45\x48\xeb\x4f\x14\xb4\xce\xc7\x32\xa0\x2e\x41"
+ "\x23\xe6\x7b\x9c\xe8\x68\x35\xb5\x40\xab\x1b\xf3\x75\xb6\xd0\xba"
+ "\xe1\x14\xb6\x5e\xaf\xa1\x75\xc4\x6c\xbd\x51\x53\xfe\x35\x68\xd0"
+ "\x66\x36\xd6\xe2\x13\xcb\x7f\x0c\xfb\x7f\xc9\x2e\xeb\xb1\x42\xf9"
+ "\xbc\x10\xea\x6f\xe0\x77\x99\x6c\x73\x76\x21\x0c\xd2\xd3\x40\xb8"
+ "\xfb\x76\x01\x8d\x41\x45\xa3\x3d\x8b\xc6\x3c\x63\x90\x8f\x0d\xc8"
+ "\xbb\x1c\x94\xd9\x71\xe2\x35\xf2\xa7\xd3\x87\xf8\xca\xaf\x20\x3d"
+ "\xc5\x7a\x4d\x6c\x3b\xa8\x66\x7b\x5c\x0c\x79\x7e\x66\xb6\xc5\xc5"
+ "\x68\x7f\x01\xad\xd5\xc7\x34\x13\xb1\xac\x1a\xb1\xe6\xe1\x58\x97"
+ "\x9c\x97\x97\x74\xec\x52\xb6\x34\xbe\xfb\xce\x2e\x5a\x43\x19\x58"
+ "\x07\xf9\xce\x4e\xfc\xfe\xb1\xf2\x9b\xf4\xdc\x67\x7d\xdb\x54\xc3"
+ "\x75\xfd\x9d\xb1\xa8\xeb\x8b\xa4\xfa\x83\xb8\x35\x9a\x6e\xeb\x52"
+ "\x0a\x9f\x81\xfe\xc9\x3c\x51\x07\xde\xe1\xbe\x7e\x07\x1c\x33\x8a"
+ "\xbb\x82\x8f\xa5\x4a\xe3\x82\x67\x04\xce\xdf\x6c\x22\x59\x13\x0f"
+ "\x51\xcf\x9f\xb6\x75\xb6\x70\x1d\xb7\xc3\x6f\xea\x6a\xd0\xa7\x8a"
+ "\x60\xef\xdd\x36\x6c\xeb\x7c\x57\x58\x27\xf5\xa5\xc5\x9a\xc7\x77"
+ "\x1a\x97\x58\xa2\x32\xb0\xdf\xac\x46\x5e\x50\x1d\xbd\x15\xfb\x0b"
+ "\x93\x68\x6d\x2c\xf2\x80\x68\xb2\x5f\xef\x5e\x6e\x94\x01\xfa\xa8"
+ "\xbf\xd5\x20\xbd\xfc\x5e\x2a\xba\xb7\x58\x8c\xf7\xff\x56\x2f\x9f"
+ "\x0d\xc3\xae\xb0\x12\xf2\x03\x31\xdf\xb2\x6d\xeb\x78\x1e\x74\x57"
+ "\x73\xa7\xd9\xc0\x3e\x6f\x36\x38\x22\xda\x7b\xc5\x5a\x4e\x87\x74"
+ "\xff\x23\x5f\xd7\x12\xbc\x96\xf3\xb7\x65\x8a\xb1\x43\x5a\xdb\x52"
+ "\x46\xeb\x77\xc4\x19\x5e\xbf\xe5\x67\x7d\xcd\xb6\x88\xb3\x8a\x6c"
+ "\xee\x2e\xa9\x0f\xfc\xdb\x53\xfc\x4e\x38\xea\x5f\xf1\xf5\x9f\xe7"
+ "\xa5\x35\x9b\xbf\xcd\xa3\x3c\x9a\x43\xee\x9d\xcf\x5b\x9d\xf3\x44"
+ "\x41\x9e\x18\x4e\x1f\xf9\xa4\x39\x67\x45\x70\x3f\x9d\xdb\x5d\x66"
+ "\xfd\x6d\x9b\xb0\x63\xef\xea\x14\xb6\x51\xe3\x9f\x5f\x50\xc3\x31"
+ "\x31\xc7\xf0\x6e\x5a\xb8\x39\x86\xe9\x2b\x56\xaf\x29\xe2\x79\xf0"
+ "\xe5\xad\x79\x62\xa7\x6a\x1f\x98\x3f\x75\xfa\xd4\x91\xc5\x79\x66"
+ "\x7e\xd1\x93\x18\xd0\xcf\xc9\xcd\x2d\x92\x16\xbf\xe6\x53\x2a\x8a"
+ "\x59\xbe\x9e\x27\x2d\x5c\x69\x16\xcb\x66\x8b\x0b\x72\xd6\xe5\x49"
+ "\x28\x94\xb4\x26\x53\xdb\xdd\x5c\xcd\xdb\x87\x3e\x62\xad\xce\xbb"
+ "\x8d\x8a\xb9\x7d\xe5\x58\x62\x12\xc6\x9d\x95\xe3\x0a\x87\x90\xae"
+ "\x34\xac\x6a\xad\xe3\x36\x4b\xd3\xf4\x32\xf1\xb7\x61\x3a\xdd\x4d"
+ "\x82\x7e\x56\x03\xdd\xa5\x2d\xad\x83\x41\xdf\xa1\x61\x28\xf6\xfb"
+ "\x1b\x90\xbf\x96\xd9\x5e\x1f\xc3\xf6\xdd\x62\x87\xe3\x7a\x69\x7c"
+ "\x4e\xeb\x53\xbf\x9b\x4e\x6b\x18\x6b\xf8\x58\x72\x43\x46\xc0\xee"
+ "\x1f\xd7\x93\x0f\x4b\x36\x96\x68\x23\x3a\x31\x7e\xa9\x62\xfd\x58"
+ "\xbb\x1d\xde\xe5\x63\x32\xb4\xce\x89\xdf\x1b\x84\xf6\x48\x3a\xa3"
+ "\x44\xdd\xfa\x32\xf9\x44\xbf\xdb\x41\xeb\xc3\x7c\x15\xe3\xea\x45"
+ "\x1b\xf7\xde\x21\x56\x39\x66\xc2\x68\x27\x24\x0a\x9b\xd4\x70\x01"
+ "\xc3\x6f\x46\x1a\x5b\x30\xfc\xa7\x6f\x6d\xee\x8c\x26\x3f\x5d\xcc"
+ "\x97\x36\x5c\x90\xc6\x96\x89\x3f\xd1\x0a\x1a\xda\x03\xe3\xcf\xc7"
+ "\xf5\x8e\xf8\x71\xf5\xdb\xc4\xfa\x30\xbe\x16\x46\xac\x47\x7a\x4f"
+ "\xeb\x1f\x6f\xc5\xbc\xa5\xf5\x1f\x89\x1d\x08\x8f\xbc\xa8\x97\xd6"
+ "\x64\x50\xd9\xe7\x51\xb9\xc5\xba\xde\xf7\xd2\x95\x7d\x71\x71\x4f"
+ "\xcb\x98\x09\x3e\xb1\x86\x9b\x68\xcf\xe7\x3e\x3d\x8d\x75\x5f\x25"
+ "\x7e\xbf\x87\xb6\x7f\xcc\x3d\x98\x0e\x5b\xce\xdf\x76\xc9\xf4\x10"
+ "\xcd\x66\x0b\x3a\xa6\x98\x8e\xfc\xb0\x6e\xde\xde\xbf\x57\x15\xa0"
+ "\xf9\x3d\xd1\x7f\x67\xb2\xbd\xfa\x5d\xac\x98\x73\x18\xd7\xa8\x90"
+ "\x9b\xe6\x22\xbc\x77\x01\x69\x6d\xdc\x2a\xd6\x61\x45\xcb\xeb\x9b"
+ "\x10\x57\x50\xf9\x03\xf3\x01\xef\x16\x89\xf9\x80\xdf\x69\x02\x32"
+ "\x7c\xaf\x85\xf4\x9e\xd6\xb0\xc9\xeb\xd7\x48\x9e\xe2\x0e\x9b\xdf"
+ "\xa5\xca\x78\x7c\x09\xe3\xea\x68\xcc\x66\xb7\x58\x8b\x81\x72\xf9"
+ "\xdd\xaa\x28\xd5\xe7\xdc\xaf\x1f\xed\x86\x3a\x0c\xeb\x85\x61\x39"
+ "\x04\x47\x79\xf2\x71\x73\xe4\x0d\x95\xc5\x87\xfd\xfd\x28\x7d\xaf"
+ "\x19\x88\xaf\x04\xed\xf1\x8c\x80\x6e\xfc\x6e\x2a\x5f\x07\x26\xf1"
+ "\x9a\x59\xdf\x7d\x26\x30\x8e\xf4\xbb\x23\xfe\x31\x60\xc4\x13\x68"
+ "\x93\x7e\x77\x8a\x78\x5c\xee\x1f\x0f\x3b\x0e\x9c\x0e\x31\xb7\xff"
+ "\x71\x07\xfc\xfe\x2b\x96\x30\xe6\x1e\x6a\xcf\x69\xac\x82\x64\xcf"
+ "\xfb\x1e\x7c\x2c\xf7\xf7\xaf\xd5\x88\xf9\xb3\xfd\xf8\xfe\xa6\x4f"
+ "\x1d\x4e\x77\x7e\x6f\x50\xae\x35\x17\xfc\xff\xbd\xc9\x47\x38\xb1"
+ "\xfc\x84\x0b\xdb\x38\x95\x3c\xc6\x2e\xe1\x7d\x14\x71\x1e\xe8\x90"
+ "\x78\xcd\xe7\x95\x2b\x25\x3e\x90\x8c\x39\xcf\x7f\x8f\x75\xea\xb7"
+ "\x7c\xfe\xa6\xb4\x8e\x5d\x58\x83\x38\xc4\x7d\xcf\xbf\xaf\x62\xc4"
+ "\x5b\x09\xde\x41\x63\x41\x48\xbb\xd8\xa7\x8b\xba\x78\xcd\xc4\xf7"
+ "\x28\xfa\x2a\xc7\x1d\x21\xda\x69\x4e\x39\x30\xbe\xf7\xfb\x53\x94"
+ "\xd6\xf1\x33\x91\xa6\x5c\xcc\x79\xa3\x6c\x7e\x1f\xcd\xd6\x9b\x40"
+ "\x9a\x6b\x45\x5b\xff\xde\x19\xd2\x7b\xc2\xe3\xe4\xe3\x37\xbf\x6f"
+ "\xf7\x21\x5f\x50\x26\x71\x2e\xeb\x71\x9d\x2c\x13\x94\xc7\xc9\xeb"
+ "\xf4\xfd\x50\x26\xc7\xd3\xe5\xf3\xbe\xa8\x6d\xc2\x3a\x5c\x26\xfa"
+ "\x35\xc7\xbd\x71\x5b\x26\xb1\x38\xcf\xdd\xe4\x83\x39\x6b\xd5\x7c"
+ "\x5c\x5e\x5e\x4b\x7d\x3b\xf2\xe9\x92\xbc\x3f\xc5\xb7\x75\x61\x1b"
+ "\xad\x43\xb7\xb9\xc5\x3a\x74\x0a\x9f\xe5\x64\xbe\x56\xa7\x97\xf6"
+ "\x67\xb5\x61\x1e\x75\x72\x9f\x9f\xec\x5b\xd4\x16\x15\xf2\xee\xf8"
+ "\x31\x3b\xbc\x35\x56\xb2\x6b\x31\x28\xf3\x7f\x48\xf8\x95\x34\x48"
+ "\x67\xed\x1f\xf7\x88\x7e\xe8\xf1\x4e\xb4\x3d\x55\x62\xec\xe0\xb8"
+ "\x53\xa6\x1b\xe3\x1b\x43\xcb\x98\x35\x65\x7a\x9e\xa1\x80\x4c\x74"
+ "\xda\x5d\x16\x83\x71\x68\xee\x68\xbe\x71\xc1\x70\xff\x94\x09\x86"
+ "\xac\x89\x43\x2d\xa6\xd4\x59\xe2\x31\x25\x6b\x06\x3d\x43\xfa\x05"
+ "\x06\x97\xf5\xfd\x79\xc1\x63\x13\x1f\x4b\x34\xbc\x5f\x60\x57\xcd"
+ "\x2c\xe0\x3a\xac\x1b\x91\xcd\x2a\x92\xaa\xb0\x4d\xed\xa2\x3e\xdb"
+ "\x6c\xef\x67\x8c\xed\x49\xaa\x62\xf1\x23\xb2\x1d\xf1\xbb\x5b\xf0"
+ "\x57\xe1\x88\x1f\xb3\xb4\x1c\x6d\x20\xfa\xa8\xee\x38\x4f\x8c\xb0"
+ "\x95\xf8\x8d\x7e\x4f\x27\xfa\x56\x24\x4b\x98\x36\xac\x94\xcd\xf6"
+ "\x32\x1b\xfa\x58\xc8\x97\xf7\x4f\xca\xed\x38\x1f\x53\xaf\x18\x91"
+ "\x3d\xdb\xc2\xae\x91\xee\xa0\x7f\xa0\xc5\xbe\x7f\x36\x8d\xab\x23"
+ "\x1c\x96\xff\xad\x23\x82\x17\x1f\xa0\xfc\x8f\xa7\x48\xfc\xcd\xc2"
+ "\x6f\x94\x7f\x56\x2c\xaf\xe3\x56\x3d\x6f\x2b\x7c\x5b\x87\xcf\xc1"
+ "\x7e\x69\x85\x8c\x13\x71\xc5\x4a\x77\x84\x73\x7c\x62\xfe\xf5\xc6"
+ "\x3f\x5f\x65\xaa\x85\xc6\x50\x69\xaf\x7a\x9c\x45\x45\x77\xc2\x65"
+ "\xfb\xc7\x8d\x31\x0e\xfd\x20\x1a\x4b\xce\xee\xe7\x54\x95\x11\x4c"
+ "\x60\x7c\xd5\x67\x2f\x57\xfb\xdc\xe8\x4f\xe8\x48\x3f\xc8\x57\x15"
+ "\x6b\x7b\x3e\x38\xee\x9f\x2b\x0e\x92\xfd\x07\x5c\x1f\xbe\xb6\x6a"
+ "\xb0\x6c\xef\x4f\x1d\x92\x28\x7c\x27\x9f\x55\x05\xe2\xfc\x92\x0f"
+ "\xf8\x19\x72\x92\x7f\x72\x3b\xf2\xd7\x41\xeb\x38\xb0\x1f\xe0\x20"
+ "\x3f\xda\x17\x85\x3a\x09\xe7\xc1\x56\xe2\x2a\xa3\x33\x14\xfc\x7a"
+ "\x59\x88\x7a\x59\x88\x7a\xf9\xff\x90\xf7\x3e\x60\x51\x56\x69\xff"
+ "\xf8\x79\x06\x44\x54\x72\x06\x42\x1c\x95\x72\x2c\x6c\xa7\x20\x45"
+ "\x33\xb3\xd6\x56\xb6\xb4\x75\x4b\x93\x2d\x6b\x69\xd7\x04\x52\x5b"
+ "\x74\x51\x27\x45\x45\x44\x40\x34\x5e\xf6\x5d\x81\xc1\xd4\x8b\x12"
+ "\x91\xde\xd7\xfa\xb9\xbd\x56\xec\xfb\x75\xaf\xcb\xdd\xaf\xd5\xb4"
+ "\x6a\x61\x02\x43\xad\xdb\xb2\x2d\xd6\xc4\xa2\x11\x8b\x3a\x09\xca"
+ "\x08\x33\xcf\xf9\x7d\xee\x73\x9e\x67\x66\x20\xb0\xd8\x77\xbf\xef"
+ "\xbe\xdf\xdf\x8f\xeb\x1a\x9e\xe7\x9c\xe7\xfc\xbd\xcf\x39\xf7\xb9"
+ "\xef\xfb\xdc\xe7\xbe\x49\xe7\x06\xf5\xbb\x43\xee\x48\xc3\x9a\x05"
+ "\xcf\xf5\x76\x01\xb5\x9f\x60\xa3\x16\xb2\x08\x15\xb0\x12\xba\xd5"
+ "\x04\x9f\xa8\x3b\x3d\x74\xf7\x95\xfa\x6a\xf4\xa2\xcf\xc1\xfd\x32"
+ "\xa8\xae\xd2\x42\xf4\xcb\x80\x7e\x65\x5f\x10\x72\x49\xba\x93\x0c"
+ "\x5c\x12\x13\xf0\x2b\xf4\x4e\x75\x70\x1f\x55\xf2\x45\x26\xfa\xf0"
+ "\xce\xbb\x03\xf5\x91\x1b\xa8\x8f\x04\x83\x77\xf6\x68\x67\xee\xa2"
+ "\x9d\x84\xb7\x3a\xd8\x3b\x8b\x47\x6f\xa3\xbb\xc0\xf1\x80\x31\x7b"
+ "\x90\xc6\xb0\xaa\x90\xdb\xa9\x9d\x03\x8d\x17\x95\x27\xcb\x72\xa4"
+ "\x19\xb7\x15\xa4\x75\x17\x3a\x12\x06\x86\xb7\x63\xe1\xf5\xe1\xed"
+ "\x98\x44\xf9\xa9\x1d\x74\xaf\xd9\x48\x46\xef\x30\xbf\x41\x57\x14"
+ "\x0f\x54\xef\xe8\x6d\xd5\xd4\xae\x01\xbf\x61\xee\x77\x94\xad\xeb"
+ "\xbb\x26\xd4\x2a\x0f\x23\xf8\x91\xec\x52\x9e\x31\x39\xce\xf8\xcf"
+ "\xc2\xec\xf1\x05\x46\xc5\x12\x42\x6b\x4c\xd0\xc4\xe8\xef\x40\xe5"
+ "\x1a\x15\x3b\xd9\xcd\x7c\x10\xb8\x6a\xc0\xef\x58\x07\x16\xbe\x3d"
+ "\xfe\x16\x94\x37\x77\xf4\x36\x85\xbb\x43\xe2\x47\x8e\xee\xf2\xc6"
+ "\x11\x5c\xd1\xd6\x6c\xac\xf1\x2f\xc5\xde\x2d\xe4\x76\xef\x62\xfd"
+ "\x37\x08\x5f\x78\xee\xc8\xf8\xb9\x52\x47\xed\xdd\x0c\x17\xfb\x78"
+ "\x89\x8e\xc7\x10\xce\x76\x29\x77\x2c\x91\x6b\x75\xc2\x4b\xd8\xd3"
+ "\xc2\xd5\x42\x23\xb7\xe4\x18\x39\xca\x8a\x54\xb9\xd5\x80\x7d\x2b"
+ "\x3c\x30\x77\xe4\xdd\x69\x7d\xee\x20\xff\xd1\x81\xe7\xc5\xbb\x7f"
+ "\xbe\xfe\xbc\x78\xf7\x75\xed\xcc\x21\x4d\xf2\x44\xbf\x67\x3a\x4f"
+ "\xc4\xb7\x4f\x78\xc9\x92\x47\xf5\xbf\xbb\x5b\xd6\x0d\x98\x78\x93"
+ "\x08\xcf\x2c\x00\xdc\x0a\x90\x36\x41\xc7\x0d\x34\x87\x8c\x3e\xe2"
+ "\xb9\x98\x98\xe7\xf8\x36\x1f\xb8\xa7\x43\xee\xcf\xd3\x49\xe6\x19"
+ "\xab\x16\xbe\x15\x8e\xfd\x6b\x1f\xf1\x4c\x5d\x91\xf1\x27\x90\x06"
+ "\xf8\x6f\x78\xac\x86\xff\x8e\xa1\x0c\xc7\x6e\x69\x1b\x25\x5c\xf8"
+ "\xb1\xc4\x3a\x27\xdf\x95\xb4\xd6\x11\x17\x8d\x76\x93\x2c\x04\x3c"
+ "\xc2\xef\xfd\xe7\xbf\x6a\x61\x12\xc1\xfb\x10\xf5\xc1\x40\xf4\x30"
+ "\x60\xb7\xc7\xa0\x1e\xba\x3a\xd5\xcc\xa8\xcf\x57\xb7\x8f\x3f\xf4"
+ "\x2f\x53\x58\xe8\x7b\xe6\x67\x98\x6d\x3a\x8b\xde\x36\x33\x94\xfd"
+ "\x6d\x16\x33\x10\x1c\x5c\xec\xf7\x47\x24\xec\x7e\xdf\xa5\x8f\x8f"
+ "\x8b\xbd\xbb\x84\xc6\x83\xce\x08\x17\x79\x79\xa7\x3c\x23\x3d\x1e"
+ "\xed\x62\x87\xb5\xef\x6f\xa5\x0d\xb0\x3f\xcc\xb3\xac\x5c\x6f\x59"
+ "\xbe\x76\xd3\x9a\x49\x93\x46\x0e\xc0\x4b\x1c\xb7\x4a\x5e\xe2\xf8"
+ "\x92\x60\x5e\x02\xe1\x4c\x94\x37\xbb\x3f\xef\xb0\x20\x55\x33\x79"
+ "\x93\x9a\xc8\x02\xef\xd3\xd8\x82\x69\x41\xc1\xbb\xd8\x82\xe9\x77"
+ "\xa5\x3e\xb6\x22\x7d\xf9\xe6\xa0\xd8\xbb\x83\x65\xda\x65\x2f\xa1"
+ "\xee\x90\xf1\x0f\x00\x7f\x28\x8f\x6e\xa1\x7d\xe7\xc4\x8f\xf2\xbc"
+ "\xfc\x0b\xcc\xdd\x59\x64\x67\xae\x3e\xcb\xcb\xea\x81\xdf\xf8\x04"
+ "\xc2\xeb\xc3\xa5\xad\x65\x1f\x23\x99\xb1\x11\x7d\x77\x83\xa7\xbb"
+ "\x22\xef\x01\x9d\xd8\xd0\x50\xe1\x01\x9e\x98\x96\x21\xe9\x9d\x13"
+ "\x89\x88\x8f\xc4\xf3\x29\x79\xbe\x78\xe2\x69\xf0\xe4\x49\xc2\xae"
+ "\xce\x46\xb2\xab\x73\x42\xe8\x4b\x4d\xe9\x2a\x60\xd2\xbe\xe3\xf1"
+ "\x36\xf2\xbb\xe0\x62\x27\x2a\x88\xbe\xa0\xb4\xc8\x33\xcd\xb2\x8a"
+ "\x25\xd2\x93\xe8\x61\x7c\x4b\xe4\xe5\xd3\x32\xf8\xbe\x14\xd2\xef"
+ "\x8a\x43\xfc\x1e\xa2\xdb\x42\xcc\xe1\x23\xba\x0b\x4f\xec\xd6\x69"
+ "\x90\xae\x41\xee\x21\x0a\x7e\x5c\xdb\x07\x47\x03\x7f\x8f\xee\x32"
+ "\xf2\x54\xb2\x53\xa5\xb0\x38\xda\x1f\x8c\xd9\xc9\xe2\xbe\x2b\xed"
+ "\x8b\x84\x13\xaa\x04\x2e\x3d\xd1\xa1\xe3\x85\x52\xc9\x8f\x8e\xa4"
+ "\xfc\xd8\x3f\x2f\xc9\xfd\xf3\xa4\x5f\xfe\x89\x77\xb3\x3e\x57\xfb"
+ "\xdc\x75\x5c\x93\xb5\x62\xdd\x8a\xe5\x96\xc9\xeb\x47\xb2\x20\xaf"
+ "\xc0\x19\x2b\xd6\x58\xd6\xad\x78\x6e\xc3\x8a\xf5\x82\xd1\xa3\xaf"
+ "\x7d\x65\x85\xc0\x41\x01\x1f\xed\xe3\x09\xc6\x27\xb7\x4a\xf9\xd5"
+ "\x24\x71\xae\x27\xcf\x63\x5f\x0d\x57\x4b\x6f\x48\x92\x32\xf4\x76"
+ "\xc0\xf5\x3d\x79\x7e\x6d\x9f\x96\x42\x74\xdc\x79\xf6\x5e\xb9\xd4"
+ "\xdb\x3a\x79\x4a\x83\x55\x39\xda\xe9\x08\xd0\x6b\xef\x8b\xb3\x61"
+ "\xa9\x3f\x7d\xb2\xc9\xc5\x8e\x1f\x0d\xd0\x20\xef\x7f\x9f\xf0\xa0"
+ "\xc0\x87\xdf\x80\x0b\x35\xda\x19\xf5\xbc\xf7\x3c\xdf\xc8\x5b\xcb"
+ "\x7a\x98\x90\x4d\x93\xbf\x0e\x89\x5f\xdf\x9b\xa1\xc3\x11\xf4\x4b"
+ "\x2b\xc9\x1d\x74\xfe\x68\x91\xf7\x1a\xcf\xdb\xcc\x0c\x24\x7b\x00"
+ "\x0e\xc9\x7c\x63\x9d\xdb\xc0\x0b\x4f\xc6\x81\x96\x49\xa1\x34\x55"
+ "\x9a\x1e\x31\x8f\x9c\xb6\x18\xe5\xe4\x06\xf8\x8e\xf7\x93\x04\x1d"
+ "\xdf\x43\xf3\xe6\x3d\x4b\x2a\xed\x11\x12\x77\x8f\xfa\xa6\xf6\xf2"
+ "\x91\xf2\x4c\x4f\xe2\xb7\xf7\x8e\x69\x7d\xe8\x20\x9c\xa5\xe9\xa1"
+ "\x1b\xe4\xbc\x7e\x3f\x09\x73\x2e\x85\xc6\x02\x78\xbe\x58\x87\x17"
+ "\xf5\x97\xda\x4e\x67\x28\xc0\xc3\x99\x6f\xe6\x78\x0c\xd2\x9f\xee"
+ "\xc9\x44\xc9\x1f\xbd\x1f\x17\x7c\x86\x2d\x79\xa1\xf7\x67\x05\x6c"
+ "\xd7\x9c\xac\xe8\x8f\x23\xd6\xae\xa1\xab\x8d\x3f\x4f\xdd\x44\x62"
+ "\xe7\x0d\xb6\x04\xcb\x86\x35\x42\x85\x40\x88\x01\xb2\x36\x2c\xfb"
+ "\xb9\x85\xb0\x48\xea\xdc\x05\x0b\x52\x1f\x78\xe2\xf1\xa7\x46\xb2"
+ "\x07\xd2\x11\x97\xb5\xd6\xb2\x20\x31\x41\x7e\x7a\x6c\xde\x83\x4f"
+ "\xa6\x3e\xb8\xe8\x89\x47\x17\x0f\x70\x3f\x22\x02\x73\x62\x31\xc6"
+ "\x68\x58\x0b\x3b\x65\x97\xfa\x70\xef\xd7\xf5\xd5\x87\x7b\xbf\x95"
+ "\x31\x3a\x1a\xac\x05\x27\x73\x2a\x1b\x3f\xc0\xee\xd4\x0e\x39\x6f"
+ "\x46\xdc\x80\xf6\x7b\x02\xf3\xe6\x94\x80\x2b\xc9\x0e\xe4\x39\x40"
+ "\x2d\xf0\xdf\xc9\xe4\xe0\x6f\x01\x5c\x70\x4a\xe8\x8a\xea\xf3\x82"
+ "\xe6\x43\xaa\x37\x5c\xcc\x0d\x49\xaf\xd4\x26\xeb\x73\xa3\x4c\x9e"
+ "\x55\x32\x92\xcb\xd1\x77\x6e\x7a\xa5\x8b\xce\x3a\x30\x17\x16\x93"
+ "\x9e\x07\xc5\xf3\xc8\x57\x34\x1d\xec\xda\x62\x3a\xfb\x20\x7a\x56"
+ "\x3b\x9f\x1d\xdd\xce\x6a\x4f\xf2\xc2\xf7\x17\x48\x5e\xf0\xfd\xad"
+ "\x62\xde\x6c\x1f\xff\x80\x38\x0f\x17\x77\xdb\x6a\x8f\x05\xe6\xcf"
+ "\x29\x3b\x8d\x4d\x40\x1e\x5d\xdb\xd4\x4f\x8e\x13\x82\xb8\x0e\xdd"
+ "\xf7\x41\xd6\x24\x66\x08\x9d\x64\x67\xbb\x0d\xbc\xc0\xc5\x6a\x2b"
+ "\xa5\x4e\xf4\xa9\x08\x9d\x7e\xc6\x3b\xd6\xbf\xe1\x70\x7f\xf9\x57"
+ "\x69\x90\xfc\x2b\xcf\xc6\x3f\x6f\xb0\xb9\x89\x46\x76\x38\xdd\xc2"
+ "\xe6\xee\x9c\x06\x5b\x17\xe9\x39\x8d\x04\x9c\xd2\xf3\x7d\xbc\x07"
+ "\xef\xe3\xd1\x37\xb1\x87\x4c\x95\x32\x05\xf0\x63\xa7\xca\x25\x6f"
+ "\x22\xe3\x09\xee\x78\xa7\x79\x15\x4a\xe3\x83\x79\xd9\x81\x31\x5a"
+ "\x30\x10\xde\x1b\xbd\xcd\xa0\xd9\x36\x3b\x75\x8e\x78\x54\x82\xd5"
+ "\x0b\x06\x35\xe3\x85\x42\xfc\xf0\x24\xdc\x17\xa0\x2f\xb9\x47\x1b"
+ "\xb3\xd6\x13\xd9\x1d\xb4\x6f\x7a\x06\xc3\xa5\x18\xcf\x66\x7d\x3c"
+ "\x17\xf9\xdc\x73\x68\xbc\xba\x0b\x3f\x88\xd5\xc7\xb2\x73\xca\x14"
+ "\x5b\xc8\x36\x66\x39\x5e\x39\x9d\xe2\xb1\xfe\x4f\x09\xbd\x66\xb2"
+ "\x45\xd0\x3f\x2f\xf0\x70\x92\x96\x7f\x89\x9e\xbf\xbf\xcd\x6c\x71"
+ "\x59\x9c\x84\x5c\xf7\x49\x7d\x33\xcd\xc5\x79\x1f\x7d\x33\x3a\x8f"
+ "\x3e\x21\xe7\xa4\x2e\x83\x33\xc9\xfe\x9c\x7e\x42\xdd\x05\xfe\x7b"
+ "\x97\x75\xba\x26\x07\xc0\xda\xfe\xe0\xda\x14\xc6\x32\xbb\x36\xa5"
+ "\xf8\x65\x28\x24\xfb\x20\x3b\x98\x68\x47\xf0\xfd\x17\xbf\xbe\xb0"
+ "\x8b\x9d\x5e\x4c\xfa\x8b\xba\xec\x97\xd6\x95\x94\xdb\x9c\x8e\x76"
+ "\x76\x31\x86\xf2\xd6\x08\x5d\x8c\xc2\x0f\x32\xc5\xdc\x03\xaf\x2d"
+ "\xf8\xfc\x5c\xfe\x85\x7e\xae\x42\xb4\x8b\xbc\x1b\x7a\xda\x7f\xfe"
+ "\x21\xef\x49\x7e\x70\x82\xce\x56\x10\x9f\x36\x90\xbc\x10\xf8\x21"
+ "\x23\x7d\xcd\xf2\xb5\xcf\x3e\xfb\xcd\xa8\x21\xf8\xbc\xd5\x5e\xa8"
+ "\x16\xa3\x4c\xe2\x7f\x5d\x72\x9e\x9e\x06\xfe\xff\xb7\xa3\x92\x7e"
+ "\xfb\xe9\x97\x58\x37\x37\xb5\xb3\xba\x58\x9d\x7e\x97\xeb\xa8\xce"
+ "\xca\x0b\x4f\x67\x06\xd6\xc6\xe9\xae\xaf\xaf\x8d\xba\xf0\x81\xd7"
+ "\x46\x5d\x02\xf6\xd9\x66\x7c\xb7\xba\xd8\x7f\x8a\xfb\x17\x14\xd6"
+ "\x68\x70\x87\xd1\x3b\x47\xd0\xe0\xa9\x9b\x99\x42\xf4\x37\xc9\xa6"
+ "\x69\x3f\xf0\x81\xaf\xf5\x01\x47\xa4\x7a\x99\x89\xf6\x82\xb2\x35"
+ "\x24\x77\x9c\xc8\xbd\x57\xb9\x2b\x75\x33\xf0\x05\xc2\xa5\xed\x52"
+ "\x1f\x64\xe9\x15\xf0\x21\x78\x2f\x3b\x4f\xb8\x42\x25\x07\x1d\x4c"
+ "\xee\xd7\x75\x95\x3a\x8d\x6b\xdc\x66\x11\x76\xdb\x69\xdf\xf6\x49"
+ "\xdd\xba\x1a\xda\xbb\x51\xcf\x11\x81\x83\x7c\x46\x3a\x67\x60\x65"
+ "\xab\x50\x2e\xe9\xa8\xad\xa1\xf6\x85\xdc\x65\xf4\x26\x0a\xbb\x26"
+ "\x07\x56\x09\xdd\xb4\xbb\xa4\x6e\xda\x5d\xac\x6a\x0d\xc1\xa1\xce"
+ "\x7b\x5d\xd9\x78\x64\x69\x4d\x70\x7c\xf6\xb3\x2b\x53\x6d\x19\x9b"
+ "\x53\x49\x2f\xb5\xdf\xfe\x2e\xd7\x50\x61\xbd\x45\xc2\xb7\x7e\x71"
+ "\x40\x56\x25\xf5\x49\x09\x67\x4e\xf5\x08\xbb\xca\xda\x79\x52\x83"
+ "\xb8\xef\x90\x7f\x8d\xc2\xe1\x98\x73\x0d\xd3\x40\xc3\x87\x75\x92"
+ "\x1e\xd7\x81\x14\x66\x2f\xe4\x0e\x92\xa1\x21\x7e\x9c\x6e\xdf\xa1"
+ "\x13\xf1\x58\xfb\x14\x27\x6c\xb2\x90\x7c\x4e\xce\xbd\xfa\x13\x2e"
+ "\x66\x9c\xa1\xd5\x77\x17\xe9\x8a\x8a\xfb\x0d\x82\xce\xa8\xff\x4a"
+ "\xde\x17\xac\x6f\xd3\x61\x09\xda\x77\x36\xd9\x9a\x20\x9d\xb1\x4e"
+ "\x4e\xfa\xa9\x0d\xa1\x7a\x7e\x17\xab\x17\x77\x82\x1e\xed\x12\xef"
+ "\x35\x4b\xbb\x82\xed\x43\xd4\x57\x4a\xbc\x55\x5f\x8d\x78\xcc\x97"
+ "\xfa\x1d\x68\xf3\x68\x69\xb7\x42\x94\xb3\x40\xd7\xcd\x0b\x86\xdb"
+ "\x83\xe9\x36\x10\xcb\x2b\x9f\x7d\x76\xc5\xba\xf5\x96\x74\x69\x06"
+ "\xc2\xba\x36\x73\xf9\xfd\x9a\x3d\x88\x35\x2b\x36\xa5\xae\x5c\x2e"
+ "\xee\x9b\x21\x56\xbe\xf6\x83\x6f\x02\xf1\x37\xe2\x0e\x87\xe8\xd3"
+ "\x1f\x36\x54\x69\x74\x54\x0b\x6b\x0c\x95\xba\x3f\xce\xe7\xe4\xde"
+ "\x36\xea\x55\xb4\xe3\x8c\xbe\xb7\x91\x8c\xa5\x93\xdd\x6b\xa7\x73"
+ "\x39\xb2\x15\xb2\x7f\x2f\x6f\x25\x39\x0b\xd2\x60\xff\xab\x0f\xd7"
+ "\xd7\x6b\x09\xe2\x49\x3f\xc1\xb1\x86\x74\x12\xfe\xb0\x47\x2d\x8f"
+ "\x9f\xc1\xa3\xc6\xba\x80\xd7\x84\xcf\x6f\x3a\x8f\x92\x7e\x65\x9c"
+ "\x73\x09\x5f\x93\x2c\xd0\xb1\x86\x74\xbb\x9d\xd1\xa0\x4f\x4c\x2e"
+ "\xf6\x87\x0a\xf0\x7a\x33\x76\xe4\xb0\xf0\xfd\xf2\x8c\xd1\x25\xe5"
+ "\xca\xce\xb4\x77\x73\x19\xd3\xf6\x43\x57\x89\x90\x73\x3a\xa5\xcf"
+ "\x18\x7b\xfc\x7c\x6e\x9a\x7e\x8c\xf8\x70\x69\xff\xcd\xb9\x1b\xbc"
+ "\xd4\x7c\x6e\x37\x5b\x41\x8f\x77\xf3\x72\xb3\x15\xf1\x13\x10\xaf"
+ "\xf9\xe9\x19\x97\xb1\x88\x7c\xa3\x94\x8f\xcb\x40\x7c\x2c\xe2\xa5"
+ "\x7f\x37\xfb\x04\xeb\x22\x9f\x87\x6c\xca\x4c\xe4\xe5\x13\xac\xa8"
+ "\x13\xfd\xbf\xd5\x2d\xfb\x6f\x0e\x17\x73\x4e\xe0\x4d\xa7\x87\xef"
+ "\x32\x57\x08\x5d\xfe\x5d\xe6\x70\x95\x67\x84\x50\x18\xfb\xd6\x48"
+ "\xcc\x89\x33\x3c\xdf\xca\x34\xfd\xff\x90\xf3\xac\x71\x1b\xc9\x94"
+ "\x31\xd7\x4e\x10\x5c\xd1\xd6\xc5\x9a\xcc\x07\x74\x5b\x23\xf0\xff"
+ "\x0c\x26\xf1\x4f\x63\x92\x5e\x17\xd6\xbe\x1b\x7b\x7b\x32\xed\xef"
+ "\x80\x45\x02\x7e\x89\x52\x7e\xe5\x01\x1f\x39\xd1\x2f\xbf\x92\x34"
+ "\x64\x63\xb6\xbe\xf6\xa8\x6e\x0d\x1e\xc9\x6a\xa1\xb0\x4f\xac\x68"
+ "\x75\x25\x93\x2c\x45\x2f\x93\xa3\x4c\x7e\xb5\xa3\x1a\x7b\x71\x38"
+ "\x70\x90\x7b\xf4\x36\xec\xb9\x54\x07\xf1\x00\x5d\x13\x39\xf6\x64"
+ "\x5f\xaa\x2f\x54\xda\x88\xd9\xcc\x6e\x08\xa6\xff\x51\x5f\x5b\x80"
+ "\x66\x45\x19\x57\x81\xeb\xf3\x58\x41\x2b\xfb\x50\xd0\x90\x74\x56"
+ "\x4c\x73\xa4\x07\x63\x8e\x71\x6f\x43\x3d\x35\xe0\x5b\x6e\x38\xcf"
+ "\x3e\x9c\x4c\x63\x4f\x3a\x51\x55\x3d\x82\x97\x31\xa2\x6d\xa1\x2d"
+ "\xec\xc3\x48\x1a\x77\x2a\x0b\x30\x3e\xea\xed\x4e\xf9\x01\xd9\x68"
+ "\x24\x58\x6f\xcd\xe5\x6d\x96\x67\x09\xde\x1f\xed\x21\x1a\x1f\x7c"
+ "\x8f\x78\xcf\x5f\xce\x55\x31\x6f\xc4\x9d\x80\x8f\xf6\x6c\x6d\xe3"
+ "\xea\xb5\x42\xc6\x6b\xb1\xd7\x5c\x33\x30\xaf\x07\x3c\x3a\xda\x6d"
+ "\xc8\xbf\x40\x76\x24\xab\x81\xb7\x8a\x49\x17\x2b\xbc\x34\x87\x99"
+ "\xc8\x06\x67\xbe\x8d\x7b\x1a\xba\x2a\x59\x83\xad\x92\x7d\xe0\xdd"
+ "\xcd\x1c\x1b\x49\xe6\xfb\x87\xd9\xa7\xb3\x77\xd3\x1d\xac\x11\xa8"
+ "\xc3\x67\x79\x92\xea\xfa\xf0\xcc\xe9\x33\x1f\xb1\xd3\x8e\x8f\x98"
+ "\xe5\x27\x22\xdc\x5a\x97\xf2\x01\xab\x4b\xfa\x80\xe5\xb7\x72\x95"
+ "\xe8\xc5\xbc\xd5\x54\x47\x31\xca\xaa\x26\x7b\x95\x26\xb5\xd3\x3c"
+ "\x12\xfd\x0f\x5d\x94\x4d\x38\xd9\xcd\x1c\x6b\x7e\x47\x6d\x5c\x51"
+ "\x75\x99\x85\x3b\xd6\xfc\x5e\xbc\x0b\xf9\x0b\xfa\xeb\x5c\xde\x24"
+ "\x74\x8b\xc9\x56\xa7\x33\xbb\x8d\x6c\x19\xa8\x65\xd4\x46\x9f\x6c"
+ "\x37\xe0\x15\xaa\xe7\x3f\x90\xe7\xcf\x2f\x7c\xe5\xec\x27\x78\xa0"
+ "\x4d\xf5\x8b\x25\x4c\xea\x9a\x00\xd3\x27\x35\xf8\xa4\x04\xc3\xe7"
+ "\xc3\x1d\x04\x1f\xba\x6b\xa1\x6e\xec\xa8\x46\xdb\x92\x00\x03\x55"
+ "\xaf\x83\xe6\x00\x9d\x0b\x52\xf9\xa5\x97\x59\x84\x63\x0d\xdd\xc5"
+ "\xf8\xe8\x4b\x63\x72\x68\xb8\x7a\xf5\x42\x4d\xd9\x15\x16\x4a\xe3"
+ "\x46\x74\x48\x99\xf8\x2e\x60\x5e\x47\x63\xe6\x8e\xb4\x5a\xf0\x03"
+ "\x4f\x62\xb5\xd2\xdc\xc3\x33\x01\xe3\x55\x8c\x36\x2c\xc7\x58\x55"
+ "\xd3\x53\x5b\x6f\x29\x64\xc3\x98\xf6\x7a\xcc\x95\x40\xfc\xae\x71"
+ "\x3f\xf6\x62\xed\xa8\x82\x8f\xfd\x68\xb9\x5a\x7e\x77\x85\xd4\xcb"
+ "\x6f\x48\xd9\x0f\xbe\xa1\x72\x97\xb0\xfd\x12\x01\x5e\x47\xe8\x72"
+ "\xbc\x24\xee\x88\xfe\x21\x43\xdf\x13\xfe\x35\x86\xec\xaa\x7c\xb4"
+ "\xdb\x20\x74\x84\xe3\x17\x68\x73\x7d\x01\xd2\xec\x74\xb1\x29\x47"
+ "\xe4\x9a\x68\x14\x77\x59\x09\xa7\x0c\x46\xb3\x61\x1f\xac\x23\xdd"
+ "\x6c\x3e\x21\x85\x45\x28\xdc\x1d\x91\x66\xe4\x4e\xef\x09\x9a\x43"
+ "\x11\x62\xee\xcb\x6f\xa0\xb3\xdd\x46\xec\x93\x8d\x88\x0f\xd5\xe3"
+ "\x69\x3f\x56\xc1\x7b\x13\xdf\xbf\x68\xb3\x91\xe7\x5d\x61\xb1\x42"
+ "\x86\xa6\xc7\x6f\x76\x1b\x1b\xcc\x8c\xee\xb7\x79\xc9\x76\x14\xe5"
+ "\x41\x7c\x08\xf6\xdd\x63\xa8\xd7\x81\xf4\xd1\x7a\x7a\xde\x99\x12"
+ "\xea\xcc\x3e\x21\xd6\x19\xd9\x17\x14\xfb\xad\x8c\x1f\xb6\x28\xdb"
+ "\x6d\x14\x63\xa6\xc7\xad\x4f\x11\xfb\x3c\xd9\x97\x01\x1d\xcf\x45"
+ "\x7b\xce\x8b\x78\x05\x7c\xb8\xd0\x31\x09\x8a\x33\x90\x2d\x1f\xb2"
+ "\x17\x1b\x14\x17\x82\x36\x33\x7f\x18\x75\xd3\x9e\x4f\xeb\x6e\xd1"
+ "\x66\x3a\x4f\x94\x7b\xbd\xa8\x7b\x33\x67\xd2\x06\xb5\x8c\x93\x34"
+ "\xc5\x19\x77\xb0\x0c\x80\xce\x70\xa8\x6e\xb5\x33\xc5\xe0\xeb\x4c"
+ "\x09\xa1\xfa\xa9\x2c\x92\xdf\xa2\x8f\xa8\x97\xf4\x2f\x9a\x18\x2f"
+ "\x7f\xcd\xc4\xe9\x3e\x23\xca\x15\xed\xc9\xf6\x00\xf7\xbc\x66\x1f"
+ "\x58\x6f\xed\x85\x5a\x47\xde\x4f\x30\xa7\xff\x28\x6c\x2e\xfa\x4c"
+ "\x09\x19\x96\x55\xb4\xe7\xff\xf1\x39\x1a\x53\x1f\xd6\xb9\x2f\x32"
+ "\x21\x63\x6a\x1b\x53\xf2\xb0\x76\xe4\x39\xe7\x1f\xcb\x89\xe6\xcc"
+ "\x57\x39\xc7\xfb\x0e\x9a\xbb\xc6\x0e\xd2\x37\x4b\xc8\x14\x3a\x5e"
+ "\x51\x65\x0e\xa7\xa7\x8d\xd5\x15\x7c\xc2\xea\xbc\xce\x82\x63\x97"
+ "\xdd\xa1\x52\xd7\x2b\x94\xca\x7d\x85\xbe\xe5\x63\xbd\xa4\xfa\xaa"
+ "\x07\xe7\x93\xc1\x7b\x01\x76\x9f\xc9\xbd\xe0\x8f\x1e\x9d\xdf\xba"
+ "\x7e\x1f\x3e\x4e\x26\x9b\xbf\xa4\x07\xad\xee\x5a\x4d\x67\x34\xf9"
+ "\xbc\xdb\xca\xa6\x0a\x5d\xa3\x8f\xad\xa3\xbb\x58\x92\x56\xee\x25"
+ "\x59\x2e\xd2\x5f\xa7\x5c\x9a\xb7\x75\x15\x42\xa6\x8e\x3e\xad\xae"
+ "\xf1\xa1\x6c\x5f\xd4\x6a\x3a\x83\xcb\x07\x2d\x04\xda\xe6\x4f\x7b"
+ "\x50\x4f\x4d\x83\xb7\x91\x91\xdd\xf0\x2a\x15\x7b\xff\x25\x33\xd3"
+ "\xf4\xda\xf2\x2f\xb2\x8f\xb7\xa9\xdc\x6a\x02\x1f\x48\xb2\xe4\x7c"
+ "\xc2\xb3\x24\x9b\xcf\xf3\xb1\x30\x67\x96\x8b\x91\xbd\x5b\x94\xf1"
+ "\x8b\x93\x24\xb7\x07\xae\xf2\x71\xb3\xe1\xad\xab\x2e\x56\x06\xfc"
+ "\x2d\xec\xdf\x6e\x9f\xf0\xd2\xe8\x6d\x6c\x0e\x37\x18\x85\x5e\xa4"
+ "\x5a\x5e\x52\x8b\xb1\x35\x4b\x3d\xba\xf8\x25\x41\x3a\x74\x21\x17"
+ "\xd9\x9f\x86\x91\x0e\x1d\x37\xc5\x5b\x48\x8f\x88\x63\xcc\xba\x0b"
+ "\xff\x94\xe8\x62\x7f\x14\x77\x77\x76\x12\x8d\x25\xf0\xfc\x9f\xf6"
+ "\xbb\x23\x57\x92\x8f\x58\xf2\x05\xac\xa8\x1b\xbd\x35\x65\x5f\xb1"
+ "\x50\x09\x8f\x3f\x6d\x6d\xe8\xe8\x76\x70\xfb\x4a\x3b\xad\x23\xad"
+ "\x6c\x23\xca\x5e\xc8\xcb\x57\xda\x5d\xec\x4f\x95\x72\x6c\xc4\x7b"
+ "\x06\x7d\xf7\xf6\xd2\x9d\xd7\x8f\x5b\x2b\x7b\x88\xc6\xfa\xd8\x0e"
+ "\xba\xd9\xd1\x69\x5a\x69\x7f\xdc\x5c\x00\x7a\xe2\x4f\x35\x2e\xc3"
+ "\x87\xb5\x62\x6f\xd7\x6c\xf9\xf6\x97\x3d\xf8\xc7\x70\x9f\x79\xa4"
+ "\x13\x85\x80\x07\x88\x6e\x67\x9f\x4c\xea\x29\x64\x86\x5e\xec\xad"
+ "\x3d\xe0\xa3\xf8\xbe\x94\x88\xd2\xf1\x2c\x11\xdf\xc6\xb7\xb3\xa6"
+ "\x61\x5e\x03\x8b\xc6\xcf\xe4\x9e\x90\x41\xfe\x45\x92\x48\x3e\x5c"
+ "\x7f\x99\xce\xac\x9b\x04\xde\x2f\x7b\x89\xc5\xa9\x28\x8f\xe4\xd2"
+ "\x65\xe3\x59\x1c\xc9\xa4\x11\x67\x4d\xf5\xc9\x33\x1b\x9d\xe7\xdc"
+ "\x3e\x9e\x25\xf4\xad\xf7\x4f\x1d\x92\x66\xfc\xc4\x42\xcf\x4d\x6e"
+ "\x76\xb3\xed\x7b\xbc\x05\xe5\x92\x0f\x52\xce\x27\x98\x0d\x92\xb6"
+ "\x6c\x3a\x65\xac\x90\xf3\x4e\x9c\x51\x60\xbe\xd1\x19\x90\x26\xfb"
+ "\x56\x84\x0d\xe3\xa8\x44\x0f\xdd\x39\x14\x71\x8a\x89\x60\x69\x12"
+ "\xed\xd0\xec\x8e\xfa\xb6\xdf\x91\x46\x65\x50\x7b\x52\xd3\xa5\xdc"
+ "\x9c\x6c\x92\xba\x58\x93\x90\xf3\xec\x7c\x89\x45\xfc\xf2\x25\x66"
+ "\xaa\x7f\x56\xf4\xcb\x23\xd7\x62\x28\xa3\xf6\xaa\x76\x5a\x67\x98"
+ "\x13\x68\x37\xd5\x47\x73\xa3\xc1\x7b\xc9\x91\x9f\xc5\x55\xc7\x2a"
+ "\xb2\xbb\xf3\xe7\x7b\x1d\xeb\x0e\xb3\x45\xad\x5e\x69\x47\x6f\x09"
+ "\x73\x1f\x40\x79\x07\xc6\x33\xd3\x79\xf6\xe7\x79\xce\x4c\xc2\xb5"
+ "\xe6\x5b\x1c\xeb\x8e\xa0\xec\x3f\x3f\x45\xfb\x51\x09\xe0\x23\xf7"
+ "\xa5\x4f\x22\x9c\x9e\x26\x46\x3e\x5c\x1e\xb5\x71\x1f\x95\x83\x34"
+ "\xe5\xa2\xbf\xfb\xcc\x96\x54\x69\x37\x56\xf4\xd5\x7f\x1e\xa1\xf5"
+ "\xc3\x79\x59\x94\x77\xd0\x99\x06\xfa\x55\xeb\x93\x0e\x6b\x39\xbf"
+ "\xfe\xfc\xb9\x63\xdd\x41\x46\xe3\x43\xe9\x11\x6e\x74\x02\xe2\xa9"
+ "\x17\xfa\x8e\x0b\xa5\x39\xcf\x3e\xa1\x72\xef\x09\x9c\xb3\xd1\xf9"
+ "\x4f\x20\x4d\xe5\x4b\xa4\x0b\xd8\x34\x77\x1f\x60\x24\xe5\x8f\x7f"
+ "\x5e\x4d\x6d\x75\xb1\x3f\x67\x3a\xb3\x3e\x19\xf8\xae\x2f\xd6\x3e"
+ "\xe6\xfd\xb6\x06\x21\x7b\xfb\xe4\xe9\x47\xbd\x2a\x97\xf8\xec\x2f"
+ "\x26\xd0\x6e\xb5\x2e\x3c\x09\x17\x08\x7c\x32\x85\xce\xc6\xff\x12"
+ "\x69\x54\xe4\xf8\x52\x5f\x88\x66\x1a\x68\x8c\x83\xce\x3d\x4c\xd4"
+ "\x56\x7d\x8c\xb9\xe9\x85\x5a\x95\xce\xb3\x48\x67\xbd\xd7\xcc\xe4"
+ "\xfc\xe3\x76\x94\xab\xe1\xb8\xf8\x6a\x6d\x3f\xad\xee\x8c\x4c\xc8"
+ "\xe2\x5b\xcc\x4c\xd7\xaf\xc5\xfa\xb5\xa5\x4a\x9d\x68\x33\xe1\xa8"
+ "\x03\x06\xb9\x76\xa8\x8d\x5a\xde\x4a\x79\xce\xfe\x49\x23\xf2\x57"
+ "\x0e\xd8\xdf\x10\xe0\x9d\x42\xa0\x69\xf4\x47\xdc\xc1\x03\xae\xc2"
+ "\x7e\x10\xe6\xec\xea\x61\xf2\xec\xff\x2f\x64\x5b\x20\x8c\xee\x5f"
+ "\xeb\x6d\x1b\xda\x19\xc5\x5f\x52\xe4\x19\xc5\x5f\x2a\x74\x7e\x9c"
+ "\x9b\x00\xe3\x42\xa3\xf0\xe7\x01\xba\x4b\xed\x8a\x7c\xa1\xd1\x1d"
+ "\xf9\xaa\xc6\x93\xfd\xc5\xc1\x23\x25\xbe\x4d\xf5\xb0\x02\xea\x97"
+ "\x26\xe3\x08\xa3\x3e\xa3\x1c\x97\x7e\x56\xae\x97\x3d\xa8\x8f\x1c"
+ "\xbd\x6f\xe8\x93\xb4\xdb\xf1\x42\xad\xe8\x1b\xd9\x9e\x12\x7d\x6b"
+ "\x7e\x9a\xf2\x0f\xad\x3f\xcd\xd2\x47\xa2\xfd\x85\x46\xc7\x78\x2a"
+ "\xe3\xec\x15\x6a\x1f\x8d\x09\xf0\xc3\xd8\x76\xd6\x5c\xc3\x47\xfe"
+ "\x72\xe4\x10\xcb\x94\x77\xad\xed\xaf\xb2\x3d\xc0\xc1\xf2\x2e\x2e"
+ "\xe9\xff\x9c\x3d\xcb\xcb\x5f\x15\x3c\x4c\x27\xea\xc3\xfc\x08\xc2"
+ "\x43\x67\xd3\x68\xac\xa6\x1c\x66\x49\x72\x1e\x9e\x7d\x82\x78\x67"
+ "\xe9\xc3\xec\x2c\xf8\xdf\x3f\x49\x9c\xea\xd7\xc5\x56\x84\x2e\x76"
+ "\x30\x8e\x1d\x5a\x1b\xcf\x0a\x7c\xc7\xa3\x4a\x6c\x68\x6f\x97\xd0"
+ "\x71\x42\x7b\x37\x79\x75\xfc\xd7\xdc\xc5\x49\x76\x9e\xa7\xc9\x50"
+ "\x09\x97\xe5\x49\x1b\x98\x68\xcf\x6e\xbf\x0c\x95\x6c\x15\x14\xf2"
+ "\x5a\x4a\x87\xb1\xbf\x44\x69\xa4\x6d\xbd\x76\xed\x1e\xff\xd9\x5f"
+ "\x69\x77\xf4\xad\xa4\xf7\x85\xbc\x8d\x2e\xc5\x20\xf4\x84\x09\x06"
+ "\x54\xb7\x68\xbb\x81\xe4\xa5\x67\x3b\x02\x32\xeb\x66\xc1\x3b\x4a"
+ "\x3b\x1b\x9f\x86\xea\x73\x04\xfd\x0d\x93\x7e\x6b\x9a\x57\x1f\x4f"
+ "\x60\x62\x0e\x74\x72\xf3\xc8\x5b\x2b\x69\x4e\x7e\x9a\x10\x0c\xa7"
+ "\x45\x5e\x35\x5f\xe2\xa0\xb3\xd1\x5c\xac\xf5\xb3\xd1\xdf\x4c\x4f"
+ "\x7c\xba\x4d\xa7\x45\x24\x9c\x4d\xc0\x2f\x9f\x2f\x10\xb0\xb6\x9b"
+ "\x3d\x64\x57\x7a\x4b\x1e\xd9\xc9\xff\xec\xfb\xe4\x8f\xc0\x6b\x1f"
+ "\x67\xf6\xe5\x9b\xc9\xfe\x32\x53\xed\xe3\xac\xe7\x6d\xcc\x90\x6a"
+ "\x23\x39\xfd\xca\x34\xe2\xf1\xc0\xb3\x9a\x78\x14\xe8\x13\xac\xf3"
+ "\xad\x2b\x99\xf1\xe9\x0c\x92\x57\x58\xa3\xc9\x5f\x00\xf9\x0a\x20"
+ "\x5f\x1f\xbe\x7c\x6b\x14\xde\x63\x40\xcf\x99\xb8\x69\x5c\x38\x9d"
+ "\xf5\xfb\x0a\x39\xf0\x71\x33\xe9\x32\x1b\x9c\x6e\x0f\xdb\x7a\x81"
+ "\x85\x93\x3f\x02\x6f\xf9\xca\xec\x86\xae\xb3\x82\xbf\x19\x6d\x63"
+ "\xd1\xa0\x3f\xe8\x6e\x8b\x59\x8d\x5c\x99\x86\x3d\x7e\xb9\xec\xf7"
+ "\x25\x2e\xfb\x2d\xdb\x4d\xed\x97\x38\x6e\x82\x35\x4f\xb4\xdd\x75"
+ "\xce\x8b\xf2\x55\xbb\x25\xce\x67\xb7\x58\xa4\xad\x88\x3a\x96\x97"
+ "\xc5\xdb\x9c\x5d\x75\xe0\xb9\xae\x08\xdf\x8c\xa4\x4b\x40\x7d\xa4"
+ "\xfe\x51\xdd\xa7\x2f\x5f\x10\xfe\x15\xbc\x08\xe7\x67\x6a\x79\x3a"
+ "\x90\xa7\xa3\x8e\xf5\xd8\x2d\xa2\xef\x0d\x5d\x32\x6f\xaa\x78\xa7"
+ "\xfc\x41\x70\xd0\xfa\xec\x87\x03\xfa\x4e\xfd\xa3\xfe\x7b\x09\x26"
+ "\x80\x81\xd6\x57\x73\xaf\xd6\x4f\xea\xe3\x07\xc0\x0a\x2f\xa1\x9f"
+ "\xe8\xab\xe8\x67\x2f\xfa\x59\x9b\xc1\x18\x06\xcf\x75\x2d\xca\x62"
+ "\x21\x1e\x35\xff\x43\xd0\xf0\xb9\x76\x06\x5e\x34\xf4\xf5\x3c\xbb"
+ "\xe1\x5f\x41\x9b\xe4\xb9\xc1\x93\xba\x79\x5b\x03\xfa\xe4\xb4\xe1"
+ "\xe7\xad\x64\x44\xe3\xe8\xf4\x3a\xe9\x89\x9f\x56\xcf\xb1\xbc\x36"
+ "\xde\x06\xda\xd4\x43\x7a\xcc\xce\x0c\xf4\x1f\x3c\xec\x79\xad\xfd"
+ "\x94\x76\xeb\x57\xb2\x5f\xc6\x4c\x16\xfd\xce\x4f\x8a\x0d\xce\xa6"
+ "\x62\xa6\xf7\x65\x29\xd2\xa1\x3f\x66\x94\x75\x03\xf5\x47\x45\x3f"
+ "\xf7\xa1\x9d\x9e\xa0\x3e\xd5\x77\x78\x50\xe6\x1f\xd9\xc8\x64\xa6"
+ "\xbc\x74\x11\xfd\xb8\xc8\xcc\xf6\x3c\xd0\x5f\x8f\x11\xbd\xe8\xba"
+ "\x69\x54\x0a\x8b\x73\xb1\xcf\xe2\xe4\xbc\x13\xb6\xce\xc7\xb4\xb3"
+ "\xcf\xe7\xf9\xed\x99\x93\x8f\x88\xc8\x95\xb9\x34\x8f\x84\x5d\x73"
+ "\xda\x33\xba\x31\x67\xe8\xcc\x7f\x13\xea\xe8\xb6\xc6\x88\xf6\x14"
+ "\xce\x20\xbd\xe6\x08\x84\xc9\x37\x1a\xdd\xc3\x56\x90\x2f\x9b\x03"
+ "\x66\x54\x3e\xe8\xb9\xe5\xf4\x24\x18\x0e\xa8\xbf\xfb\x06\x9b\x85"
+ "\x3a\x96\x10\xff\x5d\x93\xe7\x36\x3c\xff\x06\x4b\x18\x1a\x4e\xf9"
+ "\x3c\x6b\x30\xfc\x4d\xb2\x5e\x2a\x0f\x7d\x8b\xc2\xce\xfd\x54\xdf"
+ "\x35\x66\x11\xb8\x4c\xe2\xc1\x16\x0b\xc9\x52\x87\x58\xaf\xa0\xe1"
+ "\x48\x5f\x63\x68\xf9\x5a\xe2\xf4\x76\xa0\x0c\xd7\x60\x6d\x1f\x3a"
+ "\x1c\x5a\x72\x07\x2b\xab\x64\xaf\xd0\xb7\xcc\x2f\xdd\x0b\x7c\x01"
+ "\x5a\xe1\xb8\x99\xce\x65\xb0\x77\x1e\xec\x62\xeb\xf7\x33\xf2\xe7"
+ "\x77\x83\xd3\xbb\x90\x1d\xaf\x4c\x64\x55\x97\xc9\x16\xa2\x35\xea"
+ "\x85\xcb\x18\x4b\x0d\x87\x10\x4d\x4a\x32\x69\xbe\xde\x6a\x2a\xdb"
+ "\xab\xd3\xf0\x7f\x9d\x97\x7b\x85\x19\x2c\x6b\xc4\xfb\xdc\xb9\x16"
+ "\xee\xdd\x6d\x50\x33\x2a\xc9\x4e\x7f\x54\x29\xd1\xa0\x19\xba\xed"
+ "\x7b\x41\xfb\x64\x63\xcd\x75\x9a\x47\x96\xac\x63\x09\xe4\xaf\xc3"
+ "\xe8\x96\xb4\x9c\xdc\xaf\xff\x9a\x85\xf6\x99\x34\x7b\xf8\x26\x69"
+ "\x0f\xff\xf3\x63\xa4\x23\xaf\x7d\x7f\xc5\x07\x1e\x46\x94\xbb\x8e"
+ "\xc5\x55\x5e\x66\x56\xa2\x83\x52\xcf\x49\x9a\x8d\xf8\xc2\x85\x1d"
+ "\x46\xee\xfb\x9b\x95\xed\x6f\x0f\xf8\xf3\x70\xaf\x27\x1f\x20\xdc"
+ "\x3c\x98\x2e\x76\x59\x8c\xd0\x4d\x10\xb6\xa4\xe9\xcc\x02\x61\xb6"
+ "\x7b\x17\x0b\x3d\x4e\x7a\x8e\xd5\xf2\x7e\xe9\x71\xaf\xd4\x1d\xee"
+ "\x2e\x6c\x8d\xd6\xfd\x1c\x0c\x7a\xf6\x6e\x97\xfc\x8e\x1a\x06\xfe"
+ "\xcb\xdd\xed\x90\xb6\x75\x5b\x97\x38\x77\xa8\x41\x3c\x4e\xeb\xfd"
+ "\xf4\x8d\xe2\xc8\x5e\x61\x92\x80\x65\xeb\x0e\xe2\x7b\x34\x9e\xf1"
+ "\x1d\x8b\x3f\x4e\xd2\x30\x42\x7f\xdb\x2c\xcf\x12\xb1\x37\x8d\x46"
+ "\x5b\xaa\xf5\xfd\x8c\xf6\x75\x69\xc3\xb8\xf5\x88\xcb\x70\x86\x5d"
+ "\xa7\x7d\x26\x4d\xdf\x9c\xce\x81\x92\x90\xbe\x55\xdf\xdf\xc4\x79"
+ "\xf0\xf6\xf1\x0f\xac\xdf\xcc\x62\x1f\x1f\x17\xce\xe8\x2c\x11\x69"
+ "\xdb\xe4\xbe\x7b\x2e\x22\x70\xde\x90\x24\xe0\x4d\xb6\x37\x04\x8f"
+ "\x41\x36\x6d\xa5\xcf\x8e\x0e\xdd\xb6\xad\xdc\x7f\xcf\xdd\x1e\xa8"
+ "\xe7\xdc\x02\xff\x3e\x8a\x3a\x48\x9f\x9d\xca\x97\xb4\xc9\x39\x69"
+ "\x6f\x12\xe9\xe4\xfe\x7a\x8e\x5d\x87\x16\xb3\x12\x7c\x55\x8d\x9f"
+ "\x74\x76\x7c\x21\xe1\x9b\xcd\x42\xe8\x4e\xc7\x3b\x79\xae\xd0\xd1"
+ "\xd2\x06\xbd\x11\xf5\xef\xa7\xef\x34\xd7\x1d\x53\x48\x1e\x78\xee"
+ "\x1a\x49\x97\x79\x6f\x4a\xc4\xa3\xc4\xeb\x0b\x5a\xfc\x5c\xdb\x9d"
+ "\xc8\x87\xb8\xa8\xb7\x2f\x7a\x42\xcb\x72\x58\x82\xb4\x11\x7c\x4e"
+ "\xe8\x77\x92\x2d\x86\x5b\xa3\x99\xf9\xd6\xdd\xcc\xda\x5d\x78\xde"
+ "\xe4\x32\x7c\x24\x74\x54\x44\xfd\xbb\x5e\x4b\xa4\x7b\x29\x6f\xf6"
+ "\xb8\x86\xc9\xb1\x3a\xff\x3a\xdd\x41\x09\x0a\xff\x50\x3b\x6b\x02"
+ "\xad\x71\xfe\xf0\x81\x8b\x52\x2f\x5f\xc8\x97\xec\xa5\x35\x01\x5d"
+ "\x86\xf3\xaf\xcb\xb6\x9c\x7f\xfd\xb8\x4d\xdc\xe1\x39\x53\x25\x7c"
+ "\x0f\x9c\x07\x7f\xd6\xea\xd0\xe4\x31\x8d\x62\x5e\x11\xbd\x5b\x44"
+ "\x3c\xd8\x17\x8e\x12\xa4\xa3\x7d\x02\xf4\x51\x92\xa4\xe1\x4b\x6b"
+ "\x55\xcc\x9f\x40\xff\xcf\x8f\x23\x79\xe3\x80\x38\xf1\x25\xc6\x44"
+ "\x9e\xf2\x52\x26\x74\x63\xca\x5f\x2b\xc6\x33\x9c\x97\x97\xd5\xe0"
+ "\x19\x81\x78\x07\x9e\x26\x3c\x8f\xe2\x09\x1a\xe6\x35\x1b\xcd\x4b"
+ "\xf0\xb0\x66\xf2\xc1\xda\x19\x59\xe2\x19\xec\xbe\x1f\xc1\xc6\xb9"
+ "\xe3\x49\x26\xf5\xff\xbe\xb0\x93\xff\xcd\x45\xfb\x19\x5b\xef\xe5"
+ "\x3d\x96\x9b\xc9\x87\xce\x17\xf6\xfc\xfd\x74\x2e\xff\xc5\xf2\xbe"
+ "\xe7\xf2\x5f\xec\xc0\xef\x04\x63\x6d\x98\xe5\x6d\xf3\xf1\x6e\x0f"
+ "\xfc\xda\x76\x74\x17\x7e\x61\x07\x1c\x05\x8d\x35\x34\x9c\xf8\x85"
+ "\x90\xf9\x94\x11\x5f\x14\xb9\xba\x5a\xf6\xf7\x15\x17\xc2\xe1\x3c"
+ "\xf2\x35\x8b\xd6\xdf\x46\x84\x4d\x96\x7c\xec\x6b\x91\x80\xc9\x78"
+ "\xf4\x39\xf2\xb5\x62\xea\x2f\xb5\xb7\x33\xb2\xac\x26\xf8\xae\x23"
+ "\x95\x49\xfd\x77\x47\x22\x1f\x60\xc9\xa7\x4c\xb1\xe9\xf0\xd4\xe0"
+ "\x44\xf7\x7b\x0c\x9d\x28\x43\xd2\x41\x48\x8f\x32\xf4\xf4\x7e\xd8"
+ "\x8f\x27\xbb\x1b\x18\x53\xa4\x03\x4f\x1c\xae\xdf\xa3\xec\x2e\x6c"
+ "\xcb\x7d\x37\x53\x9e\x8d\x50\xde\xae\xa0\xbc\x64\x2b\x64\xa0\xfc"
+ "\xa8\x33\x5c\xd6\x59\x56\x73\x9e\x7d\x51\x2e\xeb\x6d\xb3\x0d\xb6"
+ "\x96\xf2\x26\x81\xbe\xab\x74\xd1\x5d\x2e\xa2\x87\x66\x3b\x63\xbb"
+ "\x98\xb3\x52\xc5\x9e\x5f\xea\x4a\xca\xe3\x8e\xf3\xec\xcb\x69\x0d"
+ "\x9e\xb6\x21\xee\x87\x6d\x42\x9f\x97\xf7\x14\x30\x67\xee\x74\xc1"
+ "\x87\x5d\x64\xed\xe9\x4e\xb7\xb0\xa5\x40\xef\x42\x1f\x92\xce\xe3"
+ "\x69\x6f\x00\x8f\xed\xf7\x03\xa3\x22\x6d\x15\xc5\x23\x8e\xee\x70"
+ "\x1d\x08\xfa\xc6\x77\x95\x1c\x95\x6b\xaa\x7d\x1c\xd1\x16\xa2\xbd"
+ "\xde\x1f\x38\xa8\xcd\xaa\xbd\xe4\x28\xf5\x21\x1f\xfc\x1f\xf9\xbe"
+ "\xa5\x35\x61\xd9\x48\xb2\xc2\x2f\xaf\x60\xde\x71\xb5\xbc\xe4\xe8"
+ "\xd0\xfa\xf0\xa5\x83\xea\xcc\xf7\xf2\x8b\xee\xc8\x92\xa3\x44\x93"
+ "\x94\xe5\x0d\x0b\x7f\xb0\x92\x3b\x3a\xa3\x4a\x5d\xdd\x85\xed\xe6"
+ "\x77\xb3\xe5\xd8\x0c\xad\xdc\x76\xb3\xde\xf7\x2a\xad\xef\xa8\x4b"
+ "\xd8\x43\x98\x5a\x21\xfd\xe3\x20\x4d\xf2\xa0\x32\x2b\x8c\x33\xd1"
+ "\x03\xd8\x1b\xae\x69\xb0\xa8\xf6\xef\x0d\x43\x6b\x47\xf5\xb7\xa8"
+ "\xa3\x57\xd6\xf1\xb7\xd0\xbf\xaf\x8e\xbf\x85\x5e\xaf\x0e\x79\x16"
+ "\xff\x37\xfb\xd0\x79\xc7\xbf\x09\xbb\x96\xc0\x9f\x8d\x12\x67\x5e"
+ "\x50\x7c\xe0\xdf\xbc\xa6\x57\x5c\x44\xdb\x90\xde\x2d\xf9\x0a\xf2"
+ "\xda\x57\x57\xd7\x67\xf7\x30\xc7\xc6\x8f\x58\x2b\xfb\xdb\x29\xca"
+ "\x53\x9f\x45\x3c\xdb\x6b\x96\xde\x5d\x65\x89\xbd\x86\x76\x17\xc1"
+ "\x7b\x3f\xc6\x61\x5f\xd0\x3c\x6b\xe8\xfa\x88\x39\xd3\x48\xbe\xda"
+ "\x48\x72\x6d\xe0\x82\x57\x5c\x2a\x70\x03\x68\x74\x9f\x80\x07\xe8"
+ "\x17\xc9\x6f\xbd\x50\x2b\xf8\x2d\xb7\xb0\x05\x7e\x83\xf0\x01\x54"
+ "\xf8\x46\x07\xc9\xbe\x7d\xbd\x29\x96\xee\x42\x96\x4c\xbe\x81\x48"
+ "\xee\xcc\x4d\xf1\xb3\x16\x79\x43\xb8\xe0\xa7\x40\xfb\x93\x6f\x20"
+ "\x67\x97\x8b\xf9\x40\x47\x57\x5e\x65\xd1\x95\xa0\x3d\x81\xb3\x4d"
+ "\x84\xd7\x0f\x68\xfe\x81\x4a\xae\x06\xfc\x03\x55\x91\xac\xa7\x09"
+ "\xef\x57\x59\xa8\xaf\xfc\x85\xda\x7d\x57\x59\xdc\xfe\x8d\xcc\xba"
+ "\x8f\x64\x79\x5f\x4a\xda\x47\xe8\xc9\x93\xaf\xa0\xb5\x56\x3a\x4b"
+ "\x08\xd0\x3e\x64\xfb\x23\x80\xb7\xc4\x58\x0e\x0d\xde\x1d\x62\x1f"
+ "\xf4\xda\x4b\x99\xd7\xf4\x5a\x31\x60\x57\x83\x38\x06\xf8\xe5\x0e"
+ "\x34\xb6\xba\xbe\xcd\xee\x20\xff\x4e\xef\xc6\x49\xfc\xee\x62\x17"
+ "\xe6\x0e\x36\x27\x7c\xfb\x52\xd8\xd4\x0e\x96\x28\x75\x00\x46\x60"
+ "\x4f\xbc\x70\x88\xf4\x23\xf3\x56\x33\xb3\x6f\xdf\x12\x25\xff\x65"
+ "\x16\xe2\xf4\x26\x31\xfa\xe5\x7d\xc5\xdb\xa6\x66\xb2\x44\x3a\x7f"
+ "\xa0\xb3\x12\xcb\x16\x91\x7e\x73\x5c\x2e\x4b\x0c\x2e\x7b\xbe\x54"
+ "\x22\x11\x4e\x15\x36\x93\x06\xc9\xa6\x95\x59\x19\x96\x65\x1b\xd6"
+ "\xad\x5b\xb1\x26\xcb\xb2\xf0\xc1\xe4\x7e\x77\xdd\x4a\xb1\x2f\x18"
+ "\xb7\xcd\x5b\x6c\xf4\xce\xb7\x48\xff\x5c\x97\x12\x49\x5f\x97\xe7"
+ "\xa7\x54\x48\xfa\xf3\xd2\x34\x49\xb3\x4f\x37\xc9\xbb\x76\x97\x12"
+ "\xb5\xf0\x31\xcc\xe7\x9b\xdb\xd9\x45\xb1\xdf\xab\xfb\xcc\x07\x31"
+ "\x37\x95\xf3\xec\xe2\xe7\xa4\xe3\x20\xe7\xe9\xc5\x77\xc9\x6e\x84"
+ "\xd4\x85\xb8\x70\x44\xea\x42\x5c\xf4\xdb\x7f\x91\xba\x5f\xa5\x8d"
+ "\xa4\xf7\x40\xe7\xdb\x72\xed\x5d\x2c\xd0\xd7\x1e\xd2\xee\x04\xfd"
+ "\x64\x1a\x3a\xce\xb9\xb8\x53\xca\xcc\x2e\xd6\x01\xfe\x29\x9a\xce"
+ "\xe3\xc4\x16\xb4\x9d\xda\x82\xef\xc9\xd4\x9e\xc0\x9d\xa1\x4b\xe3"
+ "\xfa\xda\xcb\xd1\xfa\xb8\xcf\xfc\xaa\x94\x87\x5f\x9a\x46\xfd\x41"
+ "\xbe\xa4\xa0\xf8\x58\xf4\x3d\x49\x8b\x77\x53\xfe\x01\xc7\xe1\x87"
+ "\x6b\x96\xad\x5d\x6d\x4b\xcf\x5a\xf9\xcc\xca\xcc\x95\x59\x9b\x85"
+ "\x39\x88\x04\xf1\xef\xa1\xc9\xcb\x17\xf7\xf7\x6d\x60\x25\xb9\x88"
+ "\x66\x13\xbd\x8b\x74\x1a\xa4\x6c\xea\xd2\x49\x6f\x21\x9b\x33\x34"
+ "\x18\x5c\x12\x78\xa6\x52\xd8\x88\xb9\x74\xc6\x65\xf8\x83\x49\x3b"
+ "\xa3\xe8\x90\xfa\x9f\xf2\x7b\xa7\xe9\x35\x9b\x65\x3c\x9b\xdd\xc2"
+ "\x3a\x8b\xe9\x6c\x0a\x63\xe2\xa0\x3d\xac\x24\x87\xf6\x9a\x46\x56"
+ "\xef\xc5\x7e\x26\xce\xab\xdd\xbf\x25\x9f\x67\x44\xc7\x01\x46\x07"
+ "\x5b\x98\x5b\x8c\x3b\xbf\x64\x3e\x28\xec\xbe\x5c\x32\xbf\x4a\xf3"
+ "\x86\xda\xac\xf2\x94\x7d\x9c\xa7\xbc\xa4\x5e\xca\xd8\xc7\x2f\x65"
+ "\xbc\x14\xb0\xab\xea\x3e\x82\xbc\x87\x5b\xb4\xb2\x4a\x2f\xb2\xc3"
+ "\x84\xab\x28\x6c\xcc\x32\x81\x3f\x2b\x3d\x4a\xed\x71\xba\x13\x99"
+ "\xb4\x05\xe1\x3e\xe2\xec\x9a\xce\x40\xff\x39\xc4\x7d\x4f\x71\xc6"
+ "\x06\x1a\x0d\xf9\x9c\x68\x97\xd3\xdd\x43\xf4\xc0\x51\x15\x74\x1a"
+ "\xfa\xdb\x8a\x3d\xcf\x43\xe5\x52\x9f\xf7\x83\x4e\x27\xbd\x8b\xee"
+ "\x42\x37\xe8\xd0\x0b\x4d\xc1\xba\x37\x04\x83\x12\x7c\x27\xdd\x0b"
+ "\x39\xfe\xee\x2b\x34\x7e\x80\xf1\x3d\x81\x39\xf0\xd5\x08\xea\xdf"
+ "\x82\x56\xfe\x19\xb7\x8f\x9b\x2f\xc7\xfb\xab\x9b\xb4\xb8\x4b\x01"
+ "\x5b\x14\x5f\x4d\x43\xb8\x17\x3f\x95\xdb\xc7\x67\x04\x9d\x0f\xd3"
+ "\x37\xc1\x77\x93\x1e\x89\x2d\x87\xd6\xca\x57\x2b\xe4\xbe\x3e\xfe"
+ "\x67\xee\xfc\x8c\x10\xe4\xf1\xd1\x7d\x55\x09\xdf\xaf\x9e\x77\xee"
+ "\xb8\xa8\xeb\x5b\xa0\x4d\x97\x27\x3b\x9e\xf5\x92\x0e\x5a\xb4\xb3"
+ "\xd5\x2b\xf4\x1b\x35\xfb\x23\x8a\x5a\x78\x69\x36\xe9\xc5\x83\x47"
+ "\x8b\xd8\x1f\x25\xfd\x8a\x74\x17\x7e\x15\xb0\xff\x6c\x92\x74\x1b"
+ "\xad\x2d\xf2\x1b\x29\x74\x47\x40\x1f\x51\x9b\x68\x6d\xa1\xae\x56"
+ "\x3a\x6b\x96\x6b\xec\x2b\xf7\xdf\xb7\xc6\xbe\x72\x53\x5f\x50\xd6"
+ "\x0e\x6e\xc8\xe7\x53\x77\xb2\x34\xa1\x0b\xe0\xed\xa2\x7b\xc6\xa1"
+ "\xc0\xff\x09\x12\x7f\x74\xa6\x0b\x7d\x91\x8d\x1d\xd5\x74\x97\xf7"
+ "\x40\x0f\x8b\x50\xed\xf1\x89\x44\x2f\xd7\xe7\x0a\x1d\x8a\x70\xe4"
+ "\xab\x21\x1d\x0b\xd2\x19\x1c\x2d\xfc\x92\x7e\xc4\x0e\x5c\x61\xa1"
+ "\xad\xec\xb2\x8d\xce\x74\x02\xb0\xbe\x7c\x92\xce\xf0\xf8\xae\xb1"
+ "\x2e\x63\xae\xa1\x98\xca\x50\xaf\x5e\x98\xa5\xe7\x03\x8d\x38\x9c"
+ "\xf2\xb5\xb0\xcb\xbf\x12\xf9\x28\xad\xb0\x53\x63\x5a\x82\xbd\x53"
+ "\xdc\xf7\xf3\x22\x5c\xa5\x9a\x92\x39\xf0\xba\x6f\xa3\xb7\x06\xdf"
+ "\x16\xab\xf6\xb2\x1a\xc4\xa5\x88\xb3\x84\x5e\x33\x9d\x31\x62\xce"
+ "\xad\xb4\x3b\x5d\x5f\x38\x44\x7b\xe8\xee\x71\x16\xf6\x40\xc1\x5f"
+ "\x5c\xf6\x55\x7d\xc9\x42\x6d\xcf\xd2\x78\x76\x4a\x1a\xfb\x22\x3b"
+ "\x24\xdb\xd7\x59\xde\xb9\xcb\x62\xe9\xc4\x7c\xed\x32\x84\xb3\xe3"
+ "\x66\xd2\x99\x7f\xcd\x76\xdc\xdc\x83\xf1\xe9\x4c\x71\x85\x8e\xd5"
+ "\x74\x68\x3b\xfd\x6b\x93\xe6\x68\x88\xd9\x94\x8f\xef\xd9\xba\x8e"
+ "\x12\xcd\xcb\x9d\xc2\x7f\xc0\xe5\x64\x82\x9b\x8b\xb9\xc3\xeb\x33"
+ "\x03\xf6\xbb\x3b\xe5\x3d\x3d\x13\xf2\xf8\xed\xdf\xfb\xae\xaa\x75"
+ "\x68\x07\xd9\x39\xca\xf6\x6d\x54\x9b\xe9\x0c\xfc\xd1\x2b\x2a\xa7"
+ "\x3b\x0c\x74\x1f\x85\xf8\x97\x45\xd9\xbc\x93\xf8\x31\xba\xfb\x45"
+ "\xe7\xdf\x74\xff\x3e\xb0\x4e\x3a\x3d\xfa\x3d\x7c\x7d\x6d\xd0\xfd"
+ "\xae\xd2\x55\x62\x9d\x92\x4e\x6b\x84\x38\x03\x08\xf9\xf9\x97\x8f"
+ "\x76\xa1\xcc\x8b\xe2\xec\xaa\xb3\x4a\x2b\x87\xec\xb1\x75\x17\x76"
+ "\xcd\xd6\xcb\x50\x49\x1f\x78\x9d\xd0\xc7\x73\xc9\xfc\x52\xdf\xe7"
+ "\xd1\x2e\x55\xdc\xcb\xa1\xfc\x52\x0f\xa7\xcb\x6f\xff\x4d\xde\x95"
+ "\xe9\x2a\xd0\x75\xc6\xf0\xbe\xd3\x7f\xd7\x0f\x30\xed\xb4\x97\x1e"
+ "\xed\x02\x7e\xe8\xb2\x97\x78\xf0\xed\x10\xd6\xf5\xd7\x6c\x7d\xf4"
+ "\x91\x49\x90\x7f\xc3\x0d\xcc\xa0\x46\xc5\x2f\x21\xfb\x2b\x74\x87"
+ "\x55\xea\xb1\x5f\x19\xa1\xd9\x62\x09\xb9\xc8\xba\x4e\x06\xce\xc2"
+ "\x7d\x9a\x1c\xf7\x4a\xa2\xe4\x23\xae\x24\x0a\x39\xee\xae\xd2\xea"
+ "\x7f\xcf\xf1\x18\x6a\x72\x5c\x06\xa9\x5f\x77\x25\x0e\x94\x4c\x90"
+ "\x0f\x8c\xae\x56\x2a\x6b\x60\xba\x6f\xda\x72\x59\xe6\x55\xe1\x2b"
+ "\x2e\xc0\x97\x5f\x15\x34\x1d\x9d\x5b\xab\x44\xc3\x45\xad\xae\x21"
+ "\x3d\x25\xa7\xed\x32\xc9\x73\xc3\xa4\x8c\x40\xa6\xd1\xf4\x36\x6f"
+ "\x6c\xef\x1b\x8e\xa2\xb0\x84\xd9\x95\x23\xfa\xd9\x50\xa9\x41\x25"
+ "\x1f\x97\x3c\xbf\x1a\xf8\xd2\xd6\x25\x6c\x3b\x38\x41\x13\xa2\x0e"
+ "\x6e\x5b\x47\x77\x23\xaf\x7c\x49\x7e\xb3\xe4\xda\xbc\x2a\xce\x6f"
+ "\xd4\xc2\x39\x3c\x9f\xf8\x22\x37\xf9\xd3\xba\xcc\x90\x2e\x12\x65"
+ "\x8f\x39\x91\xdb\x41\x7a\x5e\x71\xe4\x2b\xb9\x55\xab\xdb\x1d\x39"
+ "\x6d\xf9\xad\x11\x2c\xad\xbb\xf0\xaa\xd5\xc5\xde\xaf\x1e\x3a\xde"
+ "\xb8\x6a\xbd\x1e\x8d\x2c\x69\xb6\x24\x36\x18\x9f\x4d\x72\x94\x29"
+ "\xa8\x7f\x21\xa7\xf6\x77\x8f\xf1\x1a\x3c\xa0\xcb\x86\xf3\xf8\x82"
+ "\x6c\xe6\x2d\x1c\xce\x7d\x39\x18\xaf\x4e\x33\xf8\xb0\x3a\xd6\x20"
+ "\x75\x5f\xe8\xfc\xde\x98\xd7\xc5\x2f\x3b\xbd\x47\x48\x8e\xef\x96"
+ "\x74\x4a\xf7\x0d\x4e\xef\x5b\x8c\xf4\xb5\x09\xdf\xb4\xb0\xab\xd7"
+ "\xa8\x5d\x53\x6c\x05\xec\xce\x8b\xf4\xfd\xea\x51\x49\xbf\x75\x47"
+ "\xcb\xe7\xd5\x56\xb2\x3d\x1d\xdc\xa6\x87\x36\xac\x59\x46\x06\xcc"
+ "\xef\x5c\xb0\x62\xe3\x8a\x4c\xcb\x63\x64\xde\xbc\xbf\x1e\x68\xc0"
+ "\x97\x66\xb7\x8b\xf6\x57\xa2\xa1\xc9\xa7\xe6\xf5\xfc\x69\xea\xbe"
+ "\x34\xb1\xe6\xe2\x48\xee\xfc\x8f\xf4\xa7\xa9\xd3\xc8\xe4\x4b\x33"
+ "\x70\x06\xe3\xa9\xf6\xaf\x01\xf5\x9d\x6e\x0a\x8b\x3d\xbd\xb0\xdb"
+ "\x42\xeb\x48\xee\x2f\x1e\x73\xb0\x1d\x2c\x61\xcf\xa5\x7c\xa5\x1d"
+ "\xf1\x89\xfa\x1d\x56\xcc\xc5\x08\x84\x93\x02\x77\x66\x3c\x0b\x00"
+ "\x37\x69\xe7\xd4\x24\xd2\x2e\xd1\x75\x15\x84\x1d\x52\x4d\xb7\x42"
+ "\x2d\x9a\x75\x46\xca\x07\x3d\xe9\x55\xea\xf0\x70\x79\x36\xe5\x29"
+ "\xd6\xef\x64\xc9\xb5\xf9\x8e\xb6\x36\x3d\xd5\xd7\xd3\x27\x09\xac"
+ "\x0d\x4f\x73\x60\x5d\x7f\xa6\xe7\x6d\xfe\x26\x5d\x14\x8d\x4f\x1b"
+ "\xd3\xce\x7a\xbe\x22\x99\xa1\xbc\x83\xdd\x23\xee\xd0\x49\xfb\x1a"
+ "\x3d\xbf\xd1\xde\x51\x47\xcf\x7e\xed\x7d\x02\xde\x9f\xd7\xde\x41"
+ "\x2f\xf6\xac\xd6\xde\xb1\x66\x7b\x9e\xd0\xde\xa3\xf1\x7e\xbf\xf6"
+ "\x8e\xbd\xa3\x67\xb2\xf6\x1e\x83\xf7\x1b\xb4\xf7\x71\xed\xec\xda"
+ "\x15\xed\x1d\x6b\xf0\xda\x59\xed\x5c\x3f\xfc\x3c\xbb\x76\x6a\xe8"
+ "\x7c\xe3\xb5\xdd\x92\x0e\xbe\x76\x06\xf4\x51\x86\xdc\x7b\xfc\x71"
+ "\x6d\x98\xdb\xb3\x74\xf8\x22\x7e\x27\xd5\xd3\x5d\xd8\x03\x7a\xb6"
+ "\xd5\x12\x14\xaf\xd9\xb6\xee\x31\x03\xcf\x1d\x09\x8a\xb7\x69\xf1"
+ "\x89\xe0\x4f\xe7\x06\xc5\x2f\xd7\xe2\xe7\x03\x7f\xce\x0e\x8a\xd7"
+ "\xce\xb1\x7b\xd2\x5c\xec\xd3\xc5\x41\xf1\x0b\xb4\xf8\x6c\x5d\x8f"
+ "\x46\x8b\x4f\xd2\xe2\xed\x2e\xf6\x71\x68\x50\xfc\x0c\x2d\x1e\xf8"
+ "\xdf\x73\x38\x28\x5e\xe0\x15\x69\xef\xdf\xc8\x8f\xe7\xd2\xda\xea"
+ "\x01\xfd\xff\x97\xae\xa0\x34\xb1\x5a\xde\x56\xc4\xc7\x06\xc5\x9b"
+ "\xb4\x78\xaf\x4b\xb9\x23\xb8\xcc\x41\xf9\x79\xa5\x82\x0d\x78\xa6"
+ "\x43\x32\x75\xf2\x81\x21\x74\x93\x05\x9d\xed\xbd\x97\xee\x78\x19"
+ "\xf7\xf3\x16\x4b\x1e\xe7\x2d\xcc\x6b\xd1\xf4\x67\x2d\xa4\xcb\x28"
+ "\xef\xcb\x79\xc3\x35\x5b\x09\x6e\x71\x87\x2e\x87\xe2\x7a\x85\x5f"
+ "\xa7\xa9\xd9\x05\xd2\x16\xbd\xee\xd7\x88\x64\x4c\xda\xf9\x3b\xd2"
+ "\xfc\x86\x64\xee\x54\x0e\xc9\xa1\x9d\x59\x3d\xd2\x4f\x01\x78\x51"
+ "\x8a\x23\x59\x0b\xc1\x23\x58\xa6\x24\xf1\xbe\xf7\x5e\xb5\x87\xee"
+ "\xa9\x4a\x79\x14\xad\x45\x4a\x4f\x3a\x63\xc1\x69\x5d\xcc\x3b\x8b"
+ "\x9e\x21\xe6\xc8\x8f\xbb\x0b\xbd\xe6\xc0\xfd\xa0\x5e\x9b\x16\xff"
+ "\x47\xc4\x27\x06\xc5\x2f\x19\x1c\xb7\x03\xdf\x99\xcc\xd6\xde\xab"
+ "\xbc\xcb\x7b\x95\x7b\x4a\x3f\x45\xbb\x9f\x15\x7a\x7a\x37\xfb\xec"
+ "\xe6\x59\x74\x7f\x86\xfc\x10\x7b\x37\x72\x37\xe9\x25\x22\x7e\xd4"
+ "\xa3\x5d\x6e\xd0\x18\xdd\xbc\xe4\x19\xd2\x41\xbd\xc2\xe8\x7c\x34"
+ "\xbf\x83\x7c\x5a\x1a\x39\xdd\xcb\xde\x7a\x81\x45\xd0\xfd\x9a\xaa"
+ "\x67\xe9\xfb\x59\xb6\x30\xc3\xcd\xea\x33\x7c\xac\x0a\x65\xef\x7f"
+ "\x46\xa7\x2f\xbc\x8d\x81\xbb\xbf\x63\xe9\x3c\xf9\xe6\x7c\xe1\x77"
+ "\xdd\x27\xf5\x6a\xb6\xd1\xb9\xfe\x6b\x15\xfc\xf7\x44\x1b\x97\x38"
+ "\x8c\xdb\x98\x05\x7b\x7b\x04\xde\x6b\xe4\x0f\xdf\x10\x3f\x58\x9f"
+ "\xe4\x5a\xf6\xcd\x97\xb8\xc6\x7c\x48\xe2\x0b\xdf\x7c\xfe\x6f\xc4"
+ "\x17\xfa\xe8\x3c\xb8\x02\x74\x78\xc5\x40\xf9\xb7\xee\x67\x86\xde"
+ "\x5d\xa0\x4d\x2e\x1e\x35\x48\xfc\xa4\xce\x52\x0d\xe1\xdb\x48\xde"
+ "\x2d\x7c\x2e\xef\x8a\xcf\x3c\xbc\xc6\x63\xa8\xcf\x69\x65\x5b\xc6"
+ "\x31\xf3\x12\x8f\x01\x69\x7c\xbf\x1d\x9d\x45\xf6\xf2\x4b\xab\x41"
+ "\xcf\x1a\xfe\x17\xbe\xbf\xbd\xe6\xa8\xc1\x2b\xe8\x15\x75\x96\x90"
+ "\x91\xda\xe3\x49\xef\xd8\xe8\x6c\xf2\x11\x2d\x1e\x01\x5a\x3c\x11"
+ "\xf8\x3f\xdc\xb7\x29\x23\xca\xbb\x3e\x63\xd4\xfe\x75\x2c\xc2\xb7"
+ "\xde\x1a\xfd\xc2\x55\x36\x4b\xdf\x7f\xf6\x6f\xc4\x9e\xd2\x6d\x1e"
+ "\x59\x86\x3d\x85\x64\x2f\xa3\x15\x93\x38\x0b\xa6\x77\xd5\xf0\x79"
+ "\x5a\xd5\xc6\xeb\xfb\x8f\xf7\x6d\xb2\x0a\xfb\x11\xd4\x96\x81\xfa"
+ "\xba\xf3\x25\x16\xea\xd3\xee\x99\xe6\x9d\x63\x31\xa0\x9f\x0d\xa3"
+ "\xaf\x70\x47\x7b\x26\x33\x90\xcf\xed\xbc\x15\x42\xbe\x39\xac\x3e"
+ "\xc3\xcb\x9c\xd9\x9f\xb0\xbc\x75\x34\x46\x6a\x09\xd1\x69\xa4\x53"
+ "\x8c\xf4\xa6\x76\xa6\xee\x37\x7a\xb0\x67\x78\x40\x93\xaf\x22\xbe"
+ "\x58\xfd\xb5\xb4\x57\xa1\x76\xd1\xbd\x50\xc7\xba\x07\x28\xae\x3e"
+ "\xff\x9c\xd0\xdd\x89\x93\x6b\x4b\x3d\x44\xe1\x7c\xba\xf7\x1a\x95"
+ "\x98\xfd\x46\x8f\x67\x98\x94\x4d\xa8\xbf\xd2\xf6\x07\xbb\xe4\xed"
+ "\xd4\x43\x83\xcd\x5d\xd5\x1e\x3b\x9f\x93\xbf\xd1\x4a\xa2\x5f\xb9"
+ "\x4b\x9c\xb3\x93\x0d\x80\xec\x39\x0e\x7e\xd5\xae\xd9\x26\xe2\xab"
+ "\xd5\xf2\xd8\xf9\xd2\x3e\x29\xd7\x75\xe4\xb0\x47\xc6\xa6\xc8\x33"
+ "\x86\xd8\x0c\x29\x73\x8f\xcd\xde\x3e\x9e\xee\x07\xf0\xcc\xce\xc8"
+ "\x58\xec\x71\x3c\xa9\x33\xea\xee\x01\x69\x1d\xb9\x1f\x8d\xcb\xb6"
+ "\xdc\xcc\xa2\xe9\xac\x27\xd5\x27\xed\xfc\x8a\x35\xac\x30\x1b\x2f"
+ "\x17\xdf\x26\xb6\xd8\x58\x88\xb4\xa5\xcd\xdf\x9a\x5a\xc9\xc8\x4f"
+ "\xc5\x0d\xdc\x14\x6b\x15\xba\x87\xf6\xd8\x59\xce\x0e\xf2\x81\xe6"
+ "\x63\xe2\xcc\x48\x61\xb9\x3c\x32\xd6\x2a\xd2\x2b\xec\x86\x86\x0e"
+ "\xf4\xc1\x34\xc1\xe3\xf4\x5c\x60\x5a\xb9\x68\xe3\x04\x0f\xb7\xc7"
+ "\x86\x8b\xfb\xe3\x0a\x7b\x5a\xc7\xab\x62\x8e\x2a\xec\x47\x12\x6e"
+ "\xe3\xb2\x05\xdc\x50\x9e\xb6\x5f\x4d\xa4\x77\xec\xdd\x89\x42\x87"
+ "\xa4\x88\xcd\xd7\x69\x64\x97\x96\x86\xf2\xe0\x5d\xdc\x75\xc0\xf7"
+ "\x0c\xf4\x9d\x69\xdf\x23\x28\x0e\xfd\xc3\x9e\xc5\x0f\x52\xbf\x06"
+ "\xc3\xad\x02\x16\xb9\x2c\x04\xfd\x13\xf6\xd9\x89\x4e\x71\x76\xcd"
+ "\x71\x38\x69\x0c\x14\x03\xf9\xee\xe9\xa0\x7a\xc8\x7e\x10\xe1\x4d"
+ "\x94\x19\x4a\xe5\x05\xb5\xff\x4b\xbd\x2d\x54\x1f\x7d\xe3\xf6\x09"
+ "\xc2\x9e\x29\x60\x15\x4e\x69\x68\x5c\xcf\xdb\x48\xf6\x76\x05\x30"
+ "\xeb\xa2\x72\xa3\x09\x26\x12\x66\x8a\x5b\xe3\xe9\xb5\x71\x50\xce"
+ "\xf5\x85\x87\x0c\xab\x26\xe0\x86\x75\x6c\x6c\xbb\x62\x88\xd6\xe0"
+ "\x27\xfd\xf7\x28\x8a\xb0\xd3\x20\xbf\x29\x9b\x83\xf2\xde\xe4\x4f"
+ "\x8b\x76\x13\x6d\x44\xba\x01\x74\x56\x24\xe6\xab\xa2\x1c\x0c\xca"
+ "\x77\x30\xf5\x2b\xa2\x91\xc7\x7a\xb6\xef\x15\xfe\x50\x13\xbb\x8b"
+ "\x94\xa3\x01\x78\xcb\x72\x06\xa8\xe3\x66\xbd\x0e\x97\xa2\x64\xeb"
+ "\xed\xc4\xbb\xdc\x83\x8b\x14\x6f\x60\x4c\x94\x58\x3d\x1f\xc9\x74"
+ "\x30\x46\xb5\xe4\xa3\x78\x10\x9f\x2b\x8a\x13\xa9\x1b\xbc\x73\x1c"
+ "\x62\x3e\x2a\x86\x2c\xd2\x15\xc7\x1c\x32\xcb\x39\x64\x48\x11\x7b"
+ "\x21\xe2\xa9\x4c\x3a\xef\x13\xb6\x6c\x8b\x0c\x99\x28\xb7\x58\x6b"
+ "\x73\x81\x6c\x83\x01\xfc\x1f\xff\x9a\xdd\xda\x07\xd2\x97\x5b\x92"
+ "\xa7\x89\x3b\xb4\x77\x6e\xb0\xd1\xf5\xd8\xe5\x81\x40\x5f\x9a\xdb"
+ "\xe4\xb7\x59\x56\x64\xa8\xf3\xdb\x2c\xb3\x4f\x2b\x96\xf0\x0f\x31"
+ "\xf3\xab\x7c\x37\xdd\xdf\xe0\x1b\x79\x45\x29\xd9\x46\xbc\xc2\xc6"
+ "\x92\xef\xf5\x3c\x1b\xff\xa2\xc1\x06\x9e\xdd\x14\xbf\x13\xf8\xc3"
+ "\x9e\x77\x85\x0d\x27\xdd\x20\xc2\x3f\xa4\x7b\xcc\x23\x11\x5f\x1e"
+ "\x6f\xf7\xdf\xab\x53\x86\x9b\xe8\x2e\x28\xcf\x4f\x01\x2d\x1d\x7f"
+ "\x90\xe6\x03\xe9\x89\x9f\x57\xc2\xc8\xae\xea\x41\x7c\xcb\x2a\x11"
+ "\xb2\x84\xf8\x36\x9f\x69\x5a\x5a\xfe\x05\x16\x26\xfc\x67\x66\x7b"
+ "\x48\xa6\x66\x68\x51\x42\x36\xa3\xcc\x36\xc4\x8f\x16\xf1\x1e\x0f"
+ "\xd9\x4e\x68\xc3\xb7\xd1\xf8\xf6\x1b\x3c\x55\x94\x91\x5d\x8a\x76"
+ "\xe7\x5d\x60\x37\xa3\x2d\x6d\xa8\x87\xee\x99\x9e\xcf\x5f\xcd\x62"
+ "\x1a\x6c\x6d\xc4\xdf\xa1\x3c\x17\xd3\xec\x8b\xb4\xb5\x28\xa1\x23"
+ "\xd0\xaf\x6c\x92\x89\xe0\x99\x5b\x82\x67\x9e\x8f\x8d\xce\xdb\x8a"
+ "\x7d\x6f\x2b\xea\xa7\x7b\xaa\x28\x87\x6c\x8a\xc8\xb6\xa0\x6f\x24"
+ "\x57\x43\xb9\x5b\x3b\xf8\x79\x94\xdd\x56\xdf\x81\xf2\xb2\x9b\xfc"
+ "\x65\x6a\x34\x35\xd6\x77\xd8\x97\x7c\xd7\xdd\x2e\xb4\xa9\x82\xf4"
+ "\xa7\x11\x67\x42\x5c\xab\x9f\x1e\x56\xc2\xce\x69\xef\x23\xfc\x69"
+ "\xf3\x53\x58\xde\x35\x66\x16\x3a\x00\x9b\x42\x58\x8b\x12\x96\x45"
+ "\x76\xad\x02\x65\x86\x7e\x45\xe5\xed\x44\x79\xf9\x2b\xd8\x08\xe0"
+ "\xea\x70\xb4\x91\xfc\x90\x7f\x2e\xe0\x24\xd6\x58\xa8\x1b\x7d\xb1"
+ "\x53\x9f\x54\x8c\x5d\x09\xd6\x03\xfa\xa3\xa0\x3f\x23\xb6\xfa\xfc"
+ "\x77\x6f\xa9\x4f\x91\xc4\xcf\x51\xbf\xe4\x38\x26\x00\x7f\x26\x44"
+ "\x6c\xcd\xe0\x9f\xa3\x6f\x6d\xf5\x19\x4d\x0c\x7b\x8f\xb1\xc1\xd6"
+ "\x48\xf7\x18\x3e\x97\x70\x6b\x23\x3d\x50\xe0\x88\x84\x08\xbf\x1d"
+ "\x68\x25\x6c\x35\xda\xde\x86\x76\xed\xd4\xfa\x49\x71\x19\x7e\x9a"
+ "\x5e\x09\x5b\xa9\xbd\x8f\xf4\xa7\xfd\x5a\x3f\x87\x35\x07\xf5\x13"
+ "\xf9\x87\x47\x52\x79\x5a\x3f\x47\xa2\x9f\x23\xbe\xde\x4f\xcc\xa7"
+ "\x8d\x7c\x87\xd6\xcf\x62\xad\x9f\x06\xf4\x73\x24\xfa\x39\x3e\xa8"
+ "\x9f\x51\xfd\xfa\x09\x5a\x24\xc1\x84\x7e\xb6\x04\xf5\xd3\x34\x40"
+ "\x3f\xc3\x5d\x54\x47\x79\x82\xf0\xdd\xc0\xc3\x0c\x3b\xc5\x7d\xf6"
+ "\xa2\x61\xfe\xfb\x9f\x2a\xdd\xa3\xbc\x2a\x6c\x0a\x1d\x21\xf9\x0d"
+ "\xc9\x8d\x88\xd7\xa3\x3b\x9b\xa9\x9b\x8b\x0b\x84\xec\x26\x46\xca"
+ "\xa6\x05\x7d\x55\x14\x96\xe8\xbf\x3f\xb1\x57\xf8\x45\xea\xa2\x78"
+ "\x61\x03\x60\x1d\x13\xb2\xc7\x45\x9b\x37\xe5\x53\x7e\xca\x8b\xf4"
+ "\x69\xfe\x7b\x5e\xca\xb0\xb9\x52\x1e\x7a\x77\x1b\xbd\x93\x6d\x2b"
+ "\xd1\xae\x22\x43\xa5\x38\x2b\x28\x0a\xdb\xe9\x97\x69\x6e\xe4\x27"
+ "\x08\x2e\xe2\x7e\xaa\xb8\xdf\xc9\x8a\x53\xbd\xc5\xfa\x3d\xf3\x0e"
+ "\xa4\x3d\x1a\x74\xcf\xbc\x43\xb4\xa1\x47\xd8\x72\xd8\xb4\xc8\xbb"
+ "\x49\xdc\x37\x47\x9a\xe6\x40\xdd\xa1\x4b\xb4\xba\x5d\xf4\xee\x96"
+ "\xb6\xd6\x48\xc6\x66\x11\x3a\x2f\x45\xc3\xc3\x75\x3d\x13\x97\x12"
+ "\x32\x97\xd6\xf2\x80\x3e\x84\x8a\x86\x27\xf6\xb1\xed\xa4\x84\x0b"
+ "\x1f\x26\x88\x9f\xef\xbf\x3b\x5e\x34\x7c\xf1\x37\xdd\x1d\xcf\x77"
+ "\x63\x9c\xb0\xde\x80\xb3\x15\xcc\x15\xf0\xb8\xd3\xd2\x84\x1f\x1e"
+ "\x65\xb8\xf0\x2f\xd7\xa2\x0c\xa7\xfb\x9f\x46\x61\xf7\x41\x19\xfe"
+ "\x6b\x0d\x37\x57\x2c\xf2\x79\x8d\x2e\xd4\x29\x6c\x45\xf9\xc3\xc3"
+ "\x0f\x91\xed\x0b\xa4\xfb\x5c\xd8\xd0\x47\x79\x7d\xd3\x8b\xef\x05"
+ "\xfd\xc2\x49\xfd\xc2\x96\x2e\xe0\xac\xc1\xf4\x69\x4a\xc6\x0b\x19"
+ "\x6f\xd2\xe8\x6d\xcc\x96\xff\x25\x0b\xc1\x5c\x3c\x47\x6d\x6b\x68"
+ "\x13\x77\xed\x8c\xbc\x30\x91\x39\xdb\xbc\x92\x6e\x07\xbd\xd4\x12"
+ "\x87\x34\x5f\xb2\x18\xba\xeb\x41\x7e\x8a\x90\xbe\x5d\xf8\x26\x52"
+ "\x46\xfc\x62\xc9\x86\x91\x4c\xfd\x59\xca\x28\x6e\xd8\x62\xa1\xf3"
+ "\xfc\xd7\x7b\x5c\xe4\xdf\x47\xc9\x7b\x91\xc5\x12\x9e\xc2\x1c\x6e"
+ "\xe5\x86\x5c\x0b\xf2\x74\xfc\x7b\x4f\xdb\x30\xa7\xf7\x13\x66\x03"
+ "\xfe\x6c\x57\x46\xe4\x86\xe6\xb2\xd0\xb2\xf3\xcc\x84\x79\xe6\x3d"
+ "\x0e\x76\x45\xb7\xdd\x50\x19\x25\x6d\x02\x54\x62\x4e\xae\x37\x73"
+ "\x4f\x77\x51\x78\x93\x8b\xfd\xb5\x51\x97\x5f\xec\x94\xb6\xdb\x42"
+ "\x51\xff\x3c\x61\x67\x42\xd2\x07\x80\xed\x88\x31\xf2\xde\x68\xf4"
+ "\xcf\xba\x8b\x46\x44\xf8\x79\x1b\x65\x44\x85\x84\xe1\xb4\x1d\x72"
+ "\x1f\x19\x51\x71\x1c\x9c\xee\x0e\xa9\x97\x14\x8d\xb4\xb3\xfc\x7a"
+ "\x49\x24\x13\xc4\x77\x8c\xe1\x0e\xc9\xf7\x4c\xdb\x91\xea\x0b\xd7"
+ "\xd6\x38\xc5\x8f\xf5\x50\x5e\xe4\x33\x0a\x1f\xaa\x45\x23\xb2\x02"
+ "\x73\x6d\xc4\x6c\xda\x4f\xd1\xa7\x08\x8c\x6b\x0d\xf5\x8b\x60\xd2"
+ "\x45\x76\xda\x94\xf0\x23\xc7\x0f\x0e\xe2\x63\xcb\x64\x3e\xe4\x15"
+ "\xf2\xa5\xd2\x0a\xcc\xa7\x0b\x18\x83\x1b\xc9\x56\x95\x13\xf5\xd4"
+ "\x57\xf5\xb0\x7a\x73\x27\x6b\xc0\x3b\xdd\x3f\x70\xac\xfa\x2b\x38"
+ "\xfc\x81\xf7\x72\x15\x3c\x1a\xf8\x98\x59\x54\x16\xe1\x1a\xd2\xd9"
+ "\x24\x9b\x82\x0d\xa0\x7a\x9c\xc0\xf4\x54\x46\xbd\xda\xc6\xea\xb3"
+ "\x89\x87\x7d\xad\xa2\xa1\xea\x13\xd6\x60\xfe\x83\xa8\x87\xe8\x6d"
+ "\xc7\xba\xce\xeb\x95\x4d\x77\x59\x53\xb4\xb2\x3b\x50\x76\xf4\xe0"
+ "\x65\x97\x38\x86\x58\xf6\x10\xda\x5d\x52\x33\x94\xb2\xf3\x2b\xb8"
+ "\x0f\x78\xf8\x06\xec\x91\x89\x64\x6f\x95\xee\x99\xfa\xae\x92\x8d"
+ "\x99\x89\x82\x57\x3f\xaf\x8c\x7a\x8e\xf0\x8d\xd0\xd1\x28\x8f\x4f"
+ "\x10\x77\x50\x49\xce\xae\xdd\x3d\x75\x7a\xcf\x31\x92\xbb\x77\x17"
+ "\x8d\x5a\x12\xe0\x45\xfd\xe7\xd3\x26\x97\x32\xaa\x40\xea\x3b\xc7"
+ "\x27\xc8\xb9\x35\xea\x6e\x2a\x6b\x60\x9e\x33\x21\x43\xe8\xcd\x2b"
+ "\xa3\x7e\xab\xcb\xb7\x3a\x23\x13\x32\xb4\xb2\x2c\xfd\xe5\xa6\x9a"
+ "\x61\x20\xcb\x8a\xec\x2c\x8b\xb4\x5f\xad\x5d\xb8\x1e\xc9\x1e\x5b"
+ "\xb1\x6c\xc5\xca\x8d\x2b\x96\x5b\x16\x6f\x58\xb7\xe6\xce\xb5\xcf"
+ "\x3e\x6b\x59\xb8\x62\xfd\xfa\xf4\x9f\xad\x18\xc9\x16\xaf\x4b\x5f"
+ "\xb3\x7e\x25\xc9\x36\x2d\x96\xb9\x77\xa5\x66\xac\xcd\xba\xf3\x7b"
+ "\x73\x13\xfb\xc9\x36\xe9\xfe\x75\x33\xf1\x38\xd8\x9f\x62\x40\x63"
+ "\x44\x92\x9d\x21\xe3\x66\xee\xd8\x02\xfe\x1a\x73\xb0\x9d\xf6\x42"
+ "\xda\x7f\x88\xf7\x02\x8e\x3e\x83\x3d\xa3\x6e\xdf\x5e\xde\x78\x5e"
+ "\xb9\xf9\x39\xd0\xed\x4d\x64\x6f\x19\x7b\x46\x33\xef\xc9\x77\x8b"
+ "\xb3\x67\xe5\xe6\x85\x64\x1f\xf9\x97\x88\x73\x47\x4e\xdb\x51\xf6"
+ "\x29\x0b\x95\x34\x46\x44\x1d\x37\x0c\xe7\x3b\x63\xf8\x09\xfe\x57"
+ "\x33\xd3\xec\xef\x1b\x9c\x2e\x0f\xe9\xf1\x84\x2f\xf2\xe6\x73\xc2"
+ "\xa9\x72\x7d\x45\xd4\x4b\xb8\xc4\xce\x17\xf7\x09\x94\x9b\xef\x24"
+ "\x1e\x71\x3b\xf9\xf4\x2c\x8a\x00\xfe\x57\xe7\x06\x70\x75\x8c\x4e"
+ "\x9b\x37\x01\xee\x9b\x5a\x10\x16\xb6\x53\xc2\x6e\x08\xef\xa3\xa3"
+ "\xa5\x8c\x6e\x63\xca\xf8\x64\xf9\x43\x1e\x65\xfc\x12\xf9\xa3\xf7"
+ "\xe0\xdf\xcd\x26\xf9\xeb\x1f\xff\x5f\xfd\xe9\xf5\xff\xdd\x65\xd4"
+ "\x7d\xc3\xef\x5b\xd4\x2f\xfa\xfd\x4f\xec\xff\x7f\xa9\x8c\x33\xd7"
+ "\xfb\xd1\x7c\xc3\xdc\x6a\xfe\xe5\xa7\x2c\x1c\xf3\x73\x77\xc9\x33"
+ "\x98\xd3\x67\x99\x39\xd7\xcb\x5b\xf3\x9f\x66\xb1\x79\x5f\x82\x06"
+ "\x03\xad\x95\x95\xcd\x5b\xf3\xae\xf2\xcf\x31\x6f\x5e\xc1\xfc\x3d"
+ "\x5a\xda\xc2\x22\x4a\x5a\x40\x67\x65\x49\xbf\x46\x74\xde\x44\x77"
+ "\xad\x9c\x08\xd7\x6d\xf4\xb0\xd3\xee\xaf\x48\xaf\xd1\xd1\x90\xc6"
+ "\x84\x15\x05\x9a\xbf\x11\x69\x2c\xba\x32\x86\x1f\xe3\x85\x6f\x34"
+ "\x73\xc3\x1b\x75\x88\x3b\xf3\xa6\x9a\x34\xec\xcd\x9c\xda\x61\x96"
+ "\x67\x68\x9f\x37\x96\x68\x73\x73\x8c\xb8\x4b\x88\x27\xcd\x41\xb2"
+ "\xdb\x2d\xce\x2d\x94\x98\x72\xb9\xa7\xc7\xa4\x6b\xf2\x3c\x7a\x17"
+ "\xfe\x7d\xd0\x8f\xa3\xbc\x70\x8b\x85\xca\x7c\x43\x3d\x3a\x8c\xf6"
+ "\xcc\x37\x73\x92\x86\xe5\xa6\x33\x43\x83\xab\x9d\x1d\x07\x2e\xa4"
+ "\xf3\x71\xac\xbb\xc3\x58\x67\x35\xfb\x63\xb8\x1d\xed\xdb\x09\x7a"
+ "\xae\x18\x6d\x3a\xd4\x5d\x64\xa4\xfd\xa7\x43\xa3\xe5\x1c\x58\x17"
+ "\x87\x4b\x90\x66\xd1\x06\x36\xb1\x04\xe9\x40\xdb\x15\x13\x8f\x22"
+ "\xdb\x77\xe3\x15\xc0\xe0\x08\xea\x6c\xb4\x2c\xa5\x70\xa4\xa0\x31"
+ "\xa8\x6e\xf4\xc3\xd2\xa2\x44\x0a\x9e\x9f\xea\xd0\xeb\xed\x2e\x32"
+ "\x2d\x71\x29\x23\x0f\x6a\x67\x8c\x76\x59\x8e\xa9\x58\xae\xd7\xf8"
+ "\x23\xe4\x9f\x56\xbb\xab\x75\xa4\x24\x07\xfb\x7a\x0f\x0b\x47\x1d"
+ "\xbb\x51\x07\xc9\xe5\xb8\x91\xee\xf9\x36\x7b\xc1\xd7\xa8\x52\x87"
+ "\x56\x89\x5c\xad\xe5\x15\x74\x88\xa0\x3d\x7c\xa0\xef\x85\x7c\x06"
+ "\xf4\x47\x06\xf0\x04\x68\x0e\x71\x47\x02\xf4\x06\xc5\xa3\x8e\xdd"
+ "\x64\xf7\x1c\x7c\xf3\x11\xec\xdd\x35\x44\x2b\x2c\xbd\xf2\x30\xa3"
+ "\x33\x0e\xa2\x17\xd6\x67\x73\x8f\xf0\x59\x56\x14\x19\xae\xd3\x0b"
+ "\x34\x3f\x88\x46\x28\x59\xca\x42\x7b\x31\xc6\x98\x23\xb5\xa0\x3f"
+ "\x40\xd3\x47\xce\xd5\xc6\xa6\x56\xd0\x05\x9a\x8f\x72\x89\xc3\x23"
+ "\x7f\x84\xfd\x3d\x02\x75\xd4\xba\x94\x9b\x05\x2c\x24\x0e\x8a\x4c"
+ "\xd3\xf7\x7a\x92\x39\xb8\x50\x06\x07\xae\x03\xdc\x8e\x24\xa4\x29"
+ "\xcc\xa5\x98\x0e\x61\x2c\x8e\x50\x5a\xe4\x0f\x45\x7a\x3b\xf6\x7d"
+ "\x9d\xbe\x6e\x06\x4f\x00\x3a\x20\xd2\x4c\xed\x40\x9e\x3a\xc0\x9a"
+ "\xc6\xa2\x56\xc3\x63\x67\x24\x0d\x73\xe3\xaf\x75\xd8\x63\xac\x77"
+ "\x04\xe0\x1f\xd9\x1c\x0c\x7f\xc0\x62\x87\x36\x96\x4f\x07\x8d\x1d"
+ "\xf8\xd2\x1b\x67\x90\x1c\x1a\xf5\x1d\x13\x32\x34\x25\x6a\x0c\xd9"
+ "\x72\xc3\x9c\x39\x06\x58\x1c\x43\xba\xa3\x84\x9b\xb7\x7f\x0a\x9c"
+ "\xfb\x0c\xd1\x50\x37\xde\x24\x69\xd4\xa8\x63\x34\x87\xcf\x2b\x51"
+ "\xc2\xc7\x68\xab\x12\x19\x4b\xe5\x21\x5c\x82\x27\x68\xd9\xa8\xe7"
+ "\xf3\x2b\xc9\x77\x76\x82\xb0\x57\x2d\xc7\x3a\x01\xed\x8a\xca\xd2"
+ "\xef\x21\xd1\x1c\xa0\xb1\x47\x1f\x63\xa5\x9c\x22\x2a\x8b\x64\x8d"
+ "\x22\x5f\x6f\x06\xb5\xb1\x99\xd6\xa7\xfe\x1d\xf1\x6d\x64\x03\x37"
+ "\x08\x36\xb1\xda\x98\x1c\x15\x7e\x68\x95\x1b\xc7\x68\x6d\xa3\x73"
+ "\xbf\x70\xb4\x41\x9c\x43\x74\xf6\x66\x84\x94\x51\x9e\xbc\x40\x1e"
+ "\x5a\x3f\x98\xcb\x46\xe4\xb9\x01\x4f\xae\xa7\x25\x5b\xfb\x68\xc7"
+ "\xee\x17\xc8\x16\x99\x12\x75\xb8\xb3\xd7\x6a\x20\xdf\x15\xa8\xd7"
+ "\x40\x73\x83\xe6\x85\x5e\x46\x99\x84\xd1\x61\x8c\x9f\x98\x5f\xc7"
+ "\xbd\x47\xd1\xbf\x1b\x17\xbb\x58\xaf\xb4\xb5\x82\x72\xb4\xf6\x39"
+ "\xc4\xf9\x60\xd8\xa8\x13\x55\xd2\x6e\x10\xa5\xcb\x0d\xe8\x46\xe9"
+ "\x74\x66\x14\xd9\x05\x08\x47\x59\x75\xda\x9c\x30\x22\xdd\x41\xff"
+ "\x1c\x22\x9b\x03\xca\x8d\x71\x44\x6b\x6a\xed\xa7\xb9\x77\x93\x84"
+ "\x5d\xe4\x09\x9a\x03\xa0\xe3\xb5\x71\x8e\x24\x7b\xe1\xd1\x72\x1e"
+ "\xde\xd8\xa6\x97\x21\xec\x16\x00\xce\x2a\xca\xd0\xe7\x4a\x30\x6e"
+ "\xe8\x2e\x8a\x8e\x06\x5e\xf0\xcf\x1b\x1d\x17\xc8\x32\xc7\x2c\xd4"
+ "\xe8\x90\x0a\x8c\x4d\xa3\xf0\x49\x40\x76\xad\xc4\xbc\x1c\x63\x39"
+ "\xde\xe5\x65\xbf\xa4\x79\xb9\x94\x70\x42\xf4\xd6\xce\xa8\xbb\xdd"
+ "\x81\xb9\x1d\x9d\xa9\xcf\xed\xa0\x71\x15\x73\x7b\x87\xc0\x47\xd1"
+ "\x3b\x5d\x6c\xfe\x62\x7d\xee\xd3\x3a\x57\xb1\xae\xcb\x36\x8a\xf3"
+ "\x01\x23\xc9\x03\xc5\xba\xf7\x74\x08\x1e\x83\xc6\xb3\x21\xbb\x55"
+ "\xd8\xbc\xdf\xae\x92\x8f\x8a\x73\x24\x1f\x69\xa7\xf5\xaf\xaf\x71"
+ "\x1a\x1b\xd4\x45\xfa\x44\x8d\x3b\x80\x03\x69\x0d\x76\xa1\x4d\xc2"
+ "\x17\x46\x14\x0b\x3d\xb1\x24\x89\xad\xc7\xd8\x1e\x4f\xa3\x71\x1b"
+ "\x13\xa1\xdf\x7b\x28\x93\x38\x20\x42\x9b\x2f\xa2\x8d\xfd\xe0\x6a"
+ "\x94\x70\x1d\x93\xd4\x77\x7d\x47\xb9\x68\x7d\x07\xc3\x95\x60\x4a"
+ "\xb0\x45\x5a\xf4\x7f\xe4\x7c\x1d\xae\x41\x30\x3d\xab\xcd\x47\x0d"
+ "\xb7\x8e\x19\x10\xb7\x92\xef\x00\xf2\xf5\xb0\x9d\xfa\x82\x3d\x85"
+ "\xea\x17\xbe\xd6\x34\xde\xe7\x84\x9b\xe6\xd4\x98\x46\x17\xcb\xad"
+ "\xd1\xf1\x18\xe6\x8a\x95\xe6\x13\x8d\x95\x8e\x3b\x48\x56\xa6\xb5"
+ "\xdd\xab\x8f\x07\xb5\x3b\x18\x27\x60\x8f\x11\xfa\x5e\x81\x3e\xc7"
+ "\xdc\x89\x7c\x51\x84\xdb\x02\xf4\x55\xcc\xec\xbe\x7d\x8f\x89\xa3"
+ "\xbe\xd3\x9c\xb0\x6d\x24\x79\x99\xdc\xcb\x5c\x8a\xb1\xa6\x2f\xbe"
+ "\x32\xbe\x22\xf4\x32\x34\x7a\x8c\xf0\xbd\x6d\xa9\x4c\x4f\xfb\x1b"
+ "\xd2\x0b\xd9\xbc\xb6\x1f\x92\xdd\x77\x8a\xab\xd4\x60\xd0\x8c\xf4"
+ "\x27\xe8\x2e\x35\xd9\xe6\x19\xd5\x2c\x79\x41\xe0\xe8\x63\xd8\x3b"
+ "\x1c\x48\xb7\xa4\x01\xd0\xf2\x86\x31\x56\xa9\xd1\x9b\x84\x27\xf8"
+ "\xa6\x94\x51\x9b\xda\xd8\x08\xdb\xf7\xf8\x5f\xcf\x2b\x63\x9f\xc2"
+ "\x3a\xf2\x90\xfd\x4b\x94\x6d\x39\xaf\x8c\xbf\x17\xf5\x46\x6b\x4f"
+ "\x33\x9e\x93\xf0\x1c\x87\xe7\x08\x3c\x27\x9c\x57\xc6\x7d\x85\xf4"
+ "\xaa\x96\x3e\x11\xe1\x3f\x23\xfe\x2e\xed\x89\x36\x8e\x4d\xc6\x33"
+ "\xf9\x97\x44\x57\x2e\x15\xf1\xaf\x53\x18\xcf\xfd\x5a\xbf\xeb\xe4"
+ "\xda\x1e\xbb\x15\xe5\x64\x53\x3a\xda\xd7\x10\x67\x43\x9a\x74\x2a"
+ "\x9b\x6c\x1b\xe0\x7d\x4c\x10\x7d\x8a\x72\xcc\xe4\xf3\x76\x06\x9e"
+ "\x74\xd7\x22\x0b\xf9\x4f\x51\xb9\x80\x41\x63\x00\x5f\x44\xc6\x2e"
+ "\xcf\x96\xe3\x89\xb1\xae\xa0\xf5\xae\xe3\x03\x9a\x4f\x7d\xd2\x2d"
+ "\x91\xe9\x24\xff\x4a\x72\x60\x39\x76\x5e\x39\x6f\x0f\x7b\x31\x76"
+ "\x28\xff\xfb\x94\x1f\xcf\x07\xb5\x67\x92\xf6\x9c\xa7\x3d\x7f\xa0"
+ "\x3d\xe7\x6a\xcf\xf9\x2e\x65\x6c\xad\x46\x9b\x00\x66\x63\x6b\x09"
+ "\x26\x58\xbb\xd2\x5e\xa0\x62\xf6\x12\x7f\x0d\xfc\x7f\x37\xf9\x08"
+ "\xed\x2e\x32\xdb\x74\xb9\x35\xc9\x7e\x7a\x8b\x46\x7d\xb6\x4f\xc8"
+ "\x7e\xcc\xc5\x41\xb8\x70\x71\x84\x92\xc4\x40\x3b\x85\x55\x1a\x40"
+ "\x37\xc8\x72\x5c\x06\xed\xbc\x9e\x7c\x0d\x91\xcf\x56\xb2\x3b\x28"
+ "\xf8\xa8\xc8\x57\x89\x9f\x6f\x16\x32\xfd\x72\xb2\x13\x34\x2d\x05"
+ "\xbf\xe5\xe0\x29\x32\x74\x7c\x4f\xfc\x92\xe4\xf3\x87\x37\xa2\xae"
+ "\xae\x00\x9f\x6f\x3e\x28\xcf\x36\xc7\x3e\xd7\x5d\x34\x2e\x88\xff"
+ "\x37\xa7\x51\x9b\x01\xeb\x26\xf4\x67\x46\x8b\x32\x6e\x06\x9e\xd3"
+ "\x5b\x65\x9f\x13\xf5\x3e\x6b\x63\x65\xd3\x61\xde\xaa\x8c\x6d\x04"
+ "\x3e\x5c\x47\xf3\xbb\xc5\x8f\x97\xc7\x0a\x3f\x7a\xda\xfc\xc1\x38"
+ "\x8f\x25\xdb\x4a\xf9\x41\xf8\x24\x3a\x80\xa7\xc7\xd9\xfb\x8e\x4b"
+ "\xa4\xdd\x2b\xe9\x85\x26\xac\x4b\x9a\x03\x29\xfd\xd6\x65\x1c\xad"
+ "\x4b\x2d\x6f\x5d\x5f\x1c\x1f\x13\x47\x38\x5e\x6b\x23\xe6\xed\xd8"
+ "\x59\x34\x36\x2e\x65\xdc\x61\x6d\x4f\x6a\xc2\x1e\x79\x37\xe2\x2d"
+ "\xb2\x9d\x32\x5e\xab\x0b\xf3\x6f\xac\x99\xe6\xbf\x1e\xaf\xcd\x6f"
+ "\x2a\xc7\x44\x63\xad\xc7\x6b\xe5\x63\x9e\x8e\x0d\xa7\xf5\xa3\xc7"
+ "\xcb\x39\x19\x9d\x46\xf8\x86\xf2\x7a\x85\x2e\x23\xf8\xef\xa5\x27"
+ "\xd0\xee\xf1\x3b\x41\x5f\x54\xd3\x7a\xde\x9e\xc3\x22\x36\x55\xb0"
+ "\x1b\xe4\xda\x1c\xff\xba\x9e\x57\xca\xf4\xc7\x57\xeb\x38\xaa\x4c"
+ "\xe0\xb3\x31\xd1\x7d\x71\xe5\x4d\xf7\xf3\x42\xa3\xd7\x6b\x9a\x96"
+ "\x5c\xef\x9d\x21\x70\x2e\xd6\x7d\x25\xf2\x35\xb9\xd8\x1b\xc5\xda"
+ "\x5e\x52\x27\xcf\x54\x26\xdc\x50\x5f\x2d\x71\x97\x56\xb6\x1f\xff"
+ "\x05\xd1\x21\x02\xd7\x53\x5d\x54\x16\xf6\x15\x53\x57\x7e\xca\x28"
+ "\x89\xbf\x27\x24\xb8\xd8\x2d\xd1\x3a\x6e\xa5\xfd\xc9\xa8\x30\x5b"
+ "\xe9\x52\xb9\x3f\xa9\x24\x03\xb3\x75\x09\x7b\x73\x0d\xb6\x0e\x46"
+ "\xfb\x26\xd9\xf3\x4e\xdd\x3c\x92\xec\x46\xa5\xa0\xad\x93\x40\x9f"
+ "\x1d\xd4\xce\x66\xc0\xe7\xc6\x7e\x48\xbc\xac\x06\x57\xac\xa7\xd8"
+ "\xdf\x68\xe3\xd2\x8c\xf6\x1c\x24\xdc\xbe\x7d\xa3\xf4\xd7\x45\xf2"
+ "\x20\xe1\x3f\x8e\x68\x56\x33\xf7\x08\xdf\x04\x45\x13\x8e\x05\xc9"
+ "\xb8\xaa\xe5\x3a\x19\xff\xb2\xf0\x39\x61\x9f\x96\x2c\xe5\x89\xb1"
+ "\x3f\x94\xf1\xb1\x09\x52\x0f\x41\xd8\x0d\xa5\xb0\x39\xc4\x1c\xf3"
+ "\x27\x29\x17\x1e\xd5\x23\xe9\x91\xd8\x88\x20\x9d\x1f\x01\x6b\x61"
+ "\xb7\xb8\x28\x36\x2e\xb0\x2e\x26\x78\x28\x0f\xf2\xb6\x23\x7e\xb6"
+ "\x1e\x2f\xf7\x9a\x48\xcd\x8e\xc2\xb4\xc5\xa3\xb6\x25\x31\xe0\xe6"
+ "\xb0\x7d\x85\xfa\xfa\x8d\xad\x94\xf5\xcb\xf5\x4b\x7d\xa4\xf9\x40"
+ "\x6b\xd8\x2b\x6c\x7b\xbd\x1a\x4e\x6b\x19\xef\x29\x5e\x7d\xed\x4a"
+ "\xfa\x2e\x5a\xac\x5d\xb1\x6e\x63\x0f\x07\xda\x11\xbb\x5c\x9b\xab"
+ "\xcd\x9d\xcb\xcc\x11\xf8\x06\xba\x7b\x94\x76\x96\x35\x41\xf2\x18"
+ "\xe5\xe3\xb2\xd5\xab\xdc\x43\xb2\x69\x92\x27\x90\xcc\x46\xd3\x57"
+ "\xa5\xb3\x92\x2e\xb2\x57\x66\xc7\x7a\x08\xd8\x28\x33\x31\xdd\x46"
+ "\x59\x77\xd1\x4d\xe6\x80\xec\x78\x42\xb6\xd6\xaf\x64\xd4\x57\xe9"
+ "\xc8\xfb\x3d\xcd\xa5\x95\x72\x8d\x4d\xc8\xa0\x79\xec\xc4\xdc\xc3"
+ "\xfe\x53\x71\x3c\x57\xe4\x5d\xac\xcf\x3d\xac\xd1\xe5\x18\xf7\x73"
+ "\xbb\x63\x78\x05\xc6\x94\x74\xec\x33\x11\xfe\x10\xcf\xe5\xf2\xa9"
+ "\x98\xe8\xa9\xcd\xf9\x0a\xe4\xb5\xbb\xd8\xa4\xa3\xfa\x18\x74\x45"
+ "\x96\x9a\xc4\x1c\xcb\x23\xfd\xc6\x44\x71\xd6\x4f\x73\x8c\xe6\x97"
+ "\x38\xf3\xc7\x5c\x33\x6e\x7b\x98\xd1\x3c\x13\x76\x4b\x10\xa6\xf6"
+ "\xd2\x3c\x43\x59\xcd\xba\x0d\x63\x97\x72\x93\x76\xde\x76\x93\x5b"
+ "\xd7\x0d\xa7\x79\x98\x35\x89\x8d\x41\xf9\x96\x13\x96\x2e\x92\x9d"
+ "\x7f\xe6\xf4\xce\x63\x94\x96\x60\x27\xf1\xe5\xd8\x13\xdd\x45\x37"
+ "\x07\x8d\x7f\xa4\xb4\x15\xbb\x44\xc8\x33\x6f\xc4\xb7\xa4\xbe\x38"
+ "\x27\xa2\x4e\xd0\x95\xd8\x9f\x6f\x8d\x66\x16\xcc\x5b\xec\x35\x37"
+ "\x2f\xd7\xe9\xe1\xa9\x88\x43\x1a\x6a\x1f\xf1\xe0\x8d\x78\x5f\x4e"
+ "\xfb\xf4\x20\x72\x67\xe2\x4b\xdc\x84\x33\x48\xf6\x44\x72\x30\xc0"
+ "\xfa\xcc\x79\x65\xd2\xb9\x7a\xb2\x21\xb4\xf6\xeb\x76\xac\xf3\xb2"
+ "\xf9\x15\xb2\x69\x65\x59\xc7\x6e\x6c\x51\x26\xd5\x92\xdc\x29\xff"
+ "\x2b\x92\xf1\xdc\xdc\xd1\x57\xc6\x33\x71\xb6\xf6\x4b\xc6\xef\x48"
+ "\xe0\x67\x99\xab\xbd\x3b\xae\xff\xb3\x2c\x91\x69\x2d\x19\xf8\x65"
+ "\x49\x58\x99\xb1\x56\x26\x26\xeb\xb0\x22\x9c\x42\x38\x96\xf4\x6c"
+ "\x68\x9d\x2b\x5e\x46\x36\x8b\x30\x4e\x68\xf7\xf6\x3b\x1e\x73\xe4"
+ "\x10\x4f\x3b\x51\xd8\x43\x20\x7b\xc4\x43\xd2\xf5\x52\x26\x8a\xf1"
+ "\x14\xf6\x62\x95\x89\x73\x51\x77\x74\xd9\x45\x16\x6a\x5b\xc7\x6e"
+ "\x22\x19\xba\xd1\xc7\x1d\xc4\x03\xd3\x9c\x20\xbf\x66\xed\x8a\x65"
+ "\x5e\xd6\x56\x66\xc0\xf7\x89\x78\x9f\xa1\xd3\x52\xc8\x63\x0a\xf1"
+ "\xb0\x68\xa2\xa1\x1e\xdc\xca\x26\x76\x17\x59\x4c\xfa\x58\x11\x9d"
+ "\x41\x72\x3c\x4d\x16\x41\x6d\x15\xba\x00\x64\x9b\xdf\x45\x70\xd3"
+ "\x71\xd5\x45\x92\x5d\x4f\xf4\x86\x74\x31\x93\xdc\x87\x2c\x8b\x31"
+ "\xae\xd1\x72\xbe\x58\xcc\x98\xfb\x67\x82\xda\xf9\x50\xd0\x7b\x11"
+ "\xe5\x37\x76\x11\x0d\x37\x18\x7c\x2c\x2f\xeb\xf0\x29\x13\x36\x3d"
+ "\x99\x4d\x8c\xb7\x97\x77\x90\x1f\x37\x5b\x0e\x0b\x6f\x57\x26\x95"
+ "\xa3\x8f\x74\x3f\xb7\x56\xca\xf8\x27\x3d\xaf\xf3\xe9\xb2\xdd\x93"
+ "\x7e\x64\xdc\x16\xc2\x48\x36\x4f\x36\x20\x85\x2e\xe6\x25\xb3\x90"
+ "\xc7\x3b\xbd\xb3\x99\x23\xef\x3e\x4a\x73\x93\xb6\x97\x35\x77\xe6"
+ "\x9b\xd9\x71\xf3\x6c\xac\xe3\x49\xb1\x58\x2b\xd9\x43\xd6\x79\x55"
+ "\x26\xc5\x6a\xf0\xad\x13\xba\x22\x8a\xe5\x02\xed\x25\x24\x1b\xc0"
+ "\x3e\x72\x82\xf6\x6b\x94\x9d\xad\xaf\x1b\xec\x13\x27\x00\xa7\x0e"
+ "\x89\x63\x88\x2e\xb3\xb4\x91\xed\x18\xc1\x3f\xc8\xf4\x11\xf2\xdc"
+ "\x60\xd2\x61\x3f\xbd\x8d\x74\x94\x4f\xe8\x10\x2a\x16\x47\xaa\x8f"
+ "\x64\x09\x16\x07\xf5\x4d\x9b\x8b\xd8\xaf\x26\x35\x07\xd6\xad\x45"
+ "\xdc\xcb\x3b\xde\x11\xbc\x2e\x27\x79\x03\x7c\xea\xcd\x35\x77\xee"
+ "\x66\x96\x81\xd6\xa1\x6d\x34\xed\x55\xb7\xac\x2e\x2b\xe3\xd5\x76"
+ "\x83\xfa\xc0\xf6\x52\x16\xa1\xec\x04\xd8\x68\x9d\x6d\x4c\x1b\x73"
+ "\x5e\xb9\x65\xab\x31\x62\x6c\xf2\x83\x59\xc3\x79\x9e\x99\x19\x4a"
+ "\x2e\x0f\x0f\x9f\xe4\x19\x5b\xcd\x43\xee\x78\x6c\x61\x16\x9d\x7d"
+ "\xdb\xd9\x17\x99\x2c\xe4\x41\x1f\xea\x8e\x60\x36\x97\x12\x57\x4c"
+ "\x77\xcd\x8f\x47\x10\x2d\x12\x57\x4c\x65\xe6\x56\xb2\xf0\xdc\x56"
+ "\xde\xb6\xf3\xd9\x61\xe1\xd8\x7f\x4d\xd8\x37\x8a\x47\x45\x8c\xad"
+ "\xee\x45\x19\xef\xa6\x89\x7c\x35\x83\xb7\xed\xd6\x11\x03\xb7\xcd"
+ "\x16\x73\x5e\xb9\x75\xdc\xd0\xda\x36\xb9\x36\xd0\xb6\xc9\xb5\xff"
+ "\x80\xb6\xbd\x12\xd4\x36\x53\xa0\x6d\x19\xd4\xb6\xdf\x0c\xad\x6d"
+ "\xdf\x09\x0f\xb4\xed\x3b\xe1\xdf\xb2\x6d\x87\x07\x6f\x5b\xdc\xf7"
+ "\x07\x6e\x5b\xf6\xd8\xf3\x4a\xdc\x8f\x86\xd6\x36\xeb\xfc\x40\xdb"
+ "\xac\xf3\xff\x2b\x6d\xcb\xab\xe4\xe7\x1a\xb0\x82\x48\x9e\x43\x78"
+ "\xfe\xbc\x32\xf9\x89\xad\xb1\x42\x8f\x3b\x0a\xef\x23\xf2\x2b\xf9"
+ "\x5f\x25\x6d\x13\x57\x2f\xf7\xb4\x38\xac\x9f\x9b\x35\xbd\x92\xc9"
+ "\xc2\xc7\x83\x1a\x32\xfe\x10\x2f\xe4\xde\x29\x5d\xa4\x33\xe8\x25"
+ "\xfb\x2a\x64\xdb\x7d\xe7\x9b\x57\x3d\xe4\x57\xa3\xf2\xc0\xe5\x50"
+ "\xf6\xe6\x55\xb7\xa1\xbb\x68\x32\xd3\xed\xb3\xea\x79\x8d\x15\xd7"
+ "\xc3\x47\x93\xef\x7e\x30\x83\x19\x09\x1f\xd1\x93\x7c\xb5\x96\xe5"
+ "\x0d\x0f\x7f\xf0\x2b\xda\xf7\x27\x2f\xd0\xef\xcc\xea\x65\x2d\x6a"
+ "\x1b\xce\x8d\xb9\x2c\x84\xee\xed\x0a\xfb\x8b\x66\x37\x8b\xcb\x65"
+ "\xc3\x16\x65\xa3\x7c\x0f\x4b\x33\x66\xa3\x6c\xc0\x43\xd2\xf2\x93"
+ "\xcb\x43\x32\x59\xc4\x6e\x94\x4d\xcf\x07\xcd\xf9\x7c\xfb\x8b\x2c"
+ "\x94\xee\xf7\xd2\x3d\x5d\x79\x47\x37\x2c\x1c\xf5\x1c\xd1\xeb\xf9"
+ "\x06\xf8\x8d\x96\xf0\xbb\x6d\x4f\x00\x7e\xb7\xfd\x30\x00\xbf\xdb"
+ "\x6e\x90\xf0\xbb\x2d\x34\x00\xbf\xdb\xba\x86\x06\xbf\xdb\x92\x02"
+ "\xf0\x93\x79\xaf\x0f\xbf\xdb\x36\x0c\x0e\xbf\xdb\x76\x06\xe0\x27"
+ "\xcb\x1a\x04\x7e\x61\x03\xc3\xef\xb6\x0f\xbf\x1d\xfc\x6e\xeb\xfa"
+ "\x96\xf0\xbb\x41\xc2\xef\x3b\x7f\x0c\xc0\xef\x3b\xbf\x08\xc0\xef"
+ "\x3b\x0b\x25\xfc\xbe\x33\x37\x00\x3f\xeb\x8c\xa1\xc1\xef\x3b\x05"
+ "\x01\xf8\xc9\xbc\xd7\x87\xdf\x77\x7e\x33\x38\xfc\xbe\x53\x17\x80"
+ "\x9f\x2c\x6b\x68\xf0\xb3\x46\x02\x6e\x26\x0d\x7e\xa6\xc1\xe1\x67"
+ "\x9d\xf1\x2d\xe1\x67\x94\xf0\xbb\x7d\x4c\x00\x7e\xd6\x53\x01\xf8"
+ "\x59\x4b\x24\xfc\xac\x3b\x02\xf0\xbb\x3d\x6b\x68\xf0\xb3\x3a\x02"
+ "\xf0\x93\x79\xaf\x0f\x3f\xeb\x95\xc1\xe1\x77\x7b\x44\x00\x7e\xb2"
+ "\xac\x41\xe0\x37\x7c\x60\xf8\xdd\xfe\xa3\x6f\x07\xbf\xdb\xb3\xae"
+ "\x07\xbf\xa1\xd1\x1a\xb7\x0b\x5e\xe7\x1f\x50\x4e\xe3\x60\xe5\x10"
+ "\x0c\x49\x3f\x51\x2d\xba\xbd\xb1\x4a\x0d\x0b\x97\x77\x38\x6e\x2f"
+ "\x06\x0f\x33\xa7\x45\xb9\xe3\xa6\x2a\x75\x58\x38\x2f\xfc\x22\x41"
+ "\x2d\x6c\x3b\xc3\xb7\x85\x85\xaa\xdb\x86\x87\x92\x4d\x81\x81\xca"
+ "\x12\xfa\xb2\xca\x1d\x5b\x43\xc6\xb1\x9b\xe9\xbe\xde\x76\xd0\x6b"
+ "\xf4\xde\x5d\x74\x47\x31\x68\x91\xe8\xfe\x30\x59\xbe\x72\xbd\x70"
+ "\xde\xb9\x6e\xc5\xf2\x0d\x6b\x96\xa7\xaf\xc9\xb2\xa4\x2f\xfb\xf9"
+ "\xfa\xbe\x36\xf1\x85\xdf\xcb\x1d\x34\x7e\x77\xd4\xf9\xed\xbc\x14"
+ "\xf2\x6c\xb2\x97\x67\xbb\x85\x74\xd3\xe2\x23\x84\x9f\x82\xa8\xe9"
+ "\x11\xbc\x37\xe5\xa5\xa4\x5b\xf9\x3b\xc2\x0e\x60\x6f\xc6\x4b\xe0"
+ "\xa7\x76\x93\x6d\x17\xed\x1c\x6a\xf7\x79\xe5\xce\xc9\x3c\x72\xa6"
+ "\x9d\x74\x3a\xc4\xdd\x0e\x25\x5e\xbf\x83\x55\xcb\x4d\xf1\x1d\xaa"
+ "\x7d\xa6\x9d\x97\xcf\x2c\x26\x18\x34\x90\x0d\xb6\x8d\x21\x13\x5b"
+ "\x94\x29\x6d\x3c\x32\xbe\x03\x65\xb9\xb5\x72\x48\x77\xbf\x2b\x29"
+ "\x87\x7f\x46\xe5\x69\xb4\x20\xf9\x21\x71\x48\x7a\x30\xfe\x65\xe3"
+ "\x36\x4b\x08\xa5\x25\x5b\x88\x64\x23\x50\xf7\x3d\x45\xed\xa6\xb4"
+ "\xa0\xc7\xe7\x20\xff\x1c\xf2\xbd\xe9\x2f\x43\xb6\xe9\x46\xb4\xa9"
+ "\x49\xf4\xc5\x1e\x5f\xd1\xb9\x25\xe5\x25\xe1\xff\x51\xc0\x75\x4a"
+ "\x3d\xea\xae\x10\x7e\x3b\xbd\x97\x84\xdf\x4e\x2d\xcf\x4d\xc8\x23"
+ "\xf0\x29\xd9\x3f\x95\x65\x4c\xf9\x8d\xde\x2e\xd0\xd0\x23\x11\xde"
+ "\x1f\x54\xc7\x28\x84\x9f\x0f\xfa\x1e\x81\xf0\x4a\xd0\xa1\x91\xda"
+ "\xf7\x1b\x10\x5e\x48\x74\xa9\xe8\x57\x69\x81\xd4\x89\x56\xa6\x90"
+ "\x2e\xb0\x49\x4b\x13\x89\x34\x63\x88\xd6\xd5\xca\x88\x6a\x57\xee"
+ "\xbc\x46\x3c\xa3\xf6\x3d\x1a\xe1\xb3\x74\x2e\xa0\x7d\x1f\x83\xf0"
+ "\xbb\x08\x7f\x47\xfb\x0e\xba\x3e\x41\xfa\xbf\x31\xc5\xb7\x52\x9f"
+ "\x00\x7b\xba\x1f\xaa\x00\xd6\xad\x88\xdb\x0d\x7e\x35\x9f\xc6\x91"
+ "\xfa\xe9\xc8\x69\x67\x2d\x4a\x02\xf9\x06\x0d\x91\x63\x35\xd3\x2e"
+ "\x6d\xf4\x18\x52\x10\xdf\x41\xf1\xa4\x5b\xae\x96\xcf\xb4\xd1\x3b"
+ "\x60\xfa\x3c\xc1\x50\xab\x0b\x3c\xd1\x9d\xd1\xda\x38\x03\x76\x64"
+ "\x47\x97\x15\x1c\xd0\xc6\x02\x6d\x1b\x8e\xef\xcf\x69\xe7\x1e\xb5"
+ "\x8b\xbc\xbd\xf2\x7e\x91\x72\xe7\xec\xbf\xcb\x6e\x04\xf2\x49\xbc"
+ "\x77\x67\xae\xee\x93\x10\x71\xd2\x56\x16\xe6\x27\xc9\x57\xdc\x91"
+ "\xf1\x05\xc2\x4e\x0a\xe6\xa8\x3e\x57\x68\x9e\xf0\xb0\x3b\x76\x4b"
+ "\x59\xcd\x9d\xfe\xfb\xbf\x2e\x25\xa1\x4b\xf3\xe3\xc0\x24\x9f\x70"
+ "\xe7\x99\x80\x7e\x51\x82\xc0\x0f\x41\xdf\xdc\x41\xdf\xb2\xf5\x6f"
+ "\x52\x07\x6e\x4a\x44\xd0\xb7\x8c\x7e\xdf\xac\x41\xdf\x52\xfa\x96"
+ "\x39\x65\x6e\xd0\xb7\xf9\xfd\xf2\xa5\x05\x7d\x9b\xd1\xef\x5b\x6e"
+ "\xd0\xb7\x38\xed\x5b\x08\xe2\x77\xfb\xed\x14\x2a\x09\xd1\x5a\x3c"
+ "\x70\xfd\x94\xc3\x41\xf1\xa1\x5a\x3c\xd5\x7f\xc2\xc5\x3e\xd1\xf8"
+ "\x18\x39\xcf\x31\x8f\x6e\xd3\xea\x70\x05\xea\x88\xd7\xed\xcc\x17"
+ "\xc8\xf1\x8b\x5f\x60\x54\x2c\xc3\x69\x4e\x19\xb7\x15\x90\x4f\x20"
+ "\xbb\xb4\xc9\x25\xd7\xa1\xf0\x5d\x4d\xbe\x6f\x91\x6e\x30\xdc\x38"
+ "\xa8\x6f\xcc\xa2\xa9\x29\xfa\x5d\x56\x9f\x3d\x7e\x87\x6a\x9f\x7e"
+ "\x82\x7c\x0d\x92\xfd\xae\xfc\x0e\xae\x0a\x1f\x83\xe4\xcb\x90\xf5"
+ "\x30\x67\x56\x77\x01\x70\xc3\x68\xda\xe7\xe8\x7c\xaf\x01\xfc\x6d"
+ "\x83\xed\x82\xf4\x33\x48\xf7\x7b\xcb\xe3\x77\x6c\xea\x60\xb1\xb6"
+ "\xef\xf1\x56\xe2\xf3\x24\x4e\x98\x4a\xb6\x29\x8d\x1a\x4e\x7b\x51"
+ "\xea\x7a\x27\x92\x6f\x6e\xa3\xb3\x43\xc8\x99\xc3\xcf\x2b\x89\x4d"
+ "\xfa\x77\xd9\xdf\xc4\x26\xc1\x4b\x6b\xf7\x0a\xd1\x46\xaf\xdf\x0f"
+ "\xa6\x92\xd8\x7c\x25\x72\x65\x71\x77\x51\xa2\xa9\xaf\x7e\x63\xe2"
+ "\xed\x54\x26\xf5\xc1\xa5\x4c\xad\xa3\xb2\x91\x66\x86\x5f\xbf\xd1"
+ "\x14\xbf\x03\xdf\xe7\x48\x7d\xfc\xc4\x26\xe1\x03\xa8\x28\x11\xfc"
+ "\xff\xd4\x04\x4d\x8f\x73\x07\x27\xdd\xc7\x1e\xc6\x48\xaf\x19\x7b"
+ "\x77\x6c\xfe\x57\x2c\xaa\xb3\x37\x85\x74\x55\x5b\x84\x1e\xf6\x73"
+ "\x64\xff\xcf\xc3\x1e\xb5\x31\xe9\xdb\x46\x49\xfc\x6d\x43\x97\x8b"
+ "\x6d\xa7\x3b\x89\xe5\x09\xe6\xce\xa8\x69\x77\xa0\xcc\x43\x2e\xf6"
+ "\xcc\x6e\x4d\x2e\x41\x7e\x76\x63\x5d\xd4\xbf\xfc\x0c\x86\x34\xd1"
+ "\x48\x33\x0b\x69\xea\xf4\x34\xf4\xbd\x9b\x64\xbc\x3c\x83\x51\xbf"
+ "\xae\x94\x97\x1d\xc5\xf7\x0e\x57\x48\xef\x09\xa9\xa3\x99\xe8\x71"
+ "\xb1\x73\x05\x83\xed\xc1\x42\x2e\x6a\x9a\x79\x88\xdb\x67\xd6\x00"
+ "\xef\x54\x4b\x5b\x04\x33\x0f\x49\x79\xc2\xb4\x79\xe4\xdf\x8c\x7c"
+ "\x8f\xd3\xd9\xa7\xc4\x7d\xd3\x7e\x21\xf0\x07\xe2\x30\x3e\x87\xb0"
+ "\x47\x0c\xdd\x66\xa8\x32\x6d\xb1\x28\x63\xbc\xb4\x7f\x46\xf7\x48"
+ "\xba\x8b\xa6\x55\xfb\xfd\x47\xf8\xef\x34\x4c\x3b\x45\x72\xc6\x32"
+ "\x55\xb6\xb1\x7f\x1b\xa8\xbd\x28\x6b\x50\x3b\x24\xc8\x53\x2d\x64"
+ "\xb1\xbb\xa6\x1d\x96\xfa\x6c\xd3\x23\x43\xcc\x13\xae\x76\x17\x4d"
+ "\xf7\x9f\x7f\x50\x1a\x1a\x33\x15\xe5\xfb\xfb\xb9\x8e\xea\x98\x3e"
+ "\x43\x9e\x15\x4c\x9f\x0f\x5c\x5a\x5d\xd6\xc3\x42\xb5\xf8\xf9\x0d"
+ "\x5e\x0f\xdd\xef\x1f\xd0\x16\x17\xed\xd3\xc2\x8e\xd3\xae\x99\xe2"
+ "\xae\xe9\x54\x8f\xde\xe6\xbb\xe6\xd3\xdd\x01\x6a\xb3\x84\xed\x5d"
+ "\xf7\xeb\x70\x2c\xb9\x8c\xb2\xf3\x3e\x61\xad\xca\xf4\x93\xa4\x63"
+ "\x23\x60\x92\xa3\xeb\x7d\x4d\x17\xf7\xb8\x45\xfd\x32\x8d\x38\x33"
+ "\x25\x9d\x63\x82\x53\x15\xcd\x35\x94\x59\x8a\xb1\x10\xbe\x71\x95"
+ "\xbb\x04\xaf\xb3\x1d\xdf\x45\xbf\x85\x4e\xdd\x5d\x99\x72\x1d\xdc"
+ "\x05\xfe\xe7\xae\x6c\xb9\x0e\x64\x1c\xf9\xae\x27\x5d\x88\x8b\xca"
+ "\xf4\x73\xe4\x9f\x16\xf0\xa8\x21\x1b\x76\x0d\x5d\x58\xaf\xd9\x3d"
+ "\x34\x17\x6a\xc8\x0f\x21\xe0\xd0\x2a\xf7\x28\x82\xf9\xf4\x5a\xaa"
+ "\x9f\x60\x4b\xbe\x79\x43\xcc\xb1\xc0\x03\x77\xa5\xf9\x7d\x1c\xc7"
+ "\xd0\xbd\x8a\xe9\x83\xda\x2e\x24\x18\xf9\xd0\xe6\x06\xd0\xcc\x8e"
+ "\xf1\x9f\xa0\x7d\x33\x6e\x57\xa3\x66\x56\x93\x0e\x27\xda\xaa\xe9"
+ "\xb9\xc9\xb1\x93\xf3\x60\x86\x82\x3a\xa6\x36\xc8\xb9\x20\x7d\xa3"
+ "\x2b\x77\x1d\xd2\xe0\x27\x7c\x5f\xd8\x37\x4a\x38\x68\xe9\x97\x48"
+ "\xd9\x50\xec\xdd\x68\x57\xc0\xff\x17\xe2\x85\x5c\x4f\xd3\xf3\xee"
+ "\x2e\x9a\x11\x1d\xd4\xe6\x2e\x71\x17\xf1\x32\xf1\xf5\x77\x1d\xa3"
+ "\xba\x4a\xc8\xc6\x18\xcd\x8b\xf6\xe0\xf9\x7f\xd7\x7e\x6a\x27\xe9"
+ "\x07\xfa\x22\xa7\x1d\xe6\xe5\xd3\x6a\x08\xce\xc8\x73\x06\x6b\xa1"
+ "\x7a\x10\xdf\xf3\xc2\xf7\x15\xea\xdb\x11\xe4\xcf\x17\x7b\xf1\x8c"
+ "\xdf\xe8\x7b\x2d\xd1\x09\x64\x6b\xc2\x1f\x57\xfe\x1a\xf9\x59\xd5"
+ "\xe9\xb5\xc1\xe4\xc6\x11\x65\x53\x58\x22\xdd\x77\x26\x5d\x71\x9a"
+ "\x6f\xdc\xf4\x9a\x99\x6c\x28\x93\x3d\x48\x47\xce\x74\xb4\xf7\xee"
+ "\x15\x2f\xc4\x88\x3b\x96\x5d\x8e\x29\x97\x49\x4f\xa8\xe3\x7c\xae"
+ "\xb0\x73\x14\xbe\x28\xdb\xcb\x0f\x48\x7f\xde\x6e\x1e\xf9\x9a\x99"
+ "\xbe\x09\x1f\x02\x54\xe6\xdf\x6b\x0f\x58\xb9\x3b\x51\xa3\xa7\x3a"
+ "\x40\x4f\x8c\x45\x7f\xc4\x3e\x85\xf7\x98\x76\x65\x66\x89\xf4\x41"
+ "\x29\x6d\xda\x6b\xfa\x8e\x61\xd2\x46\x80\x9b\x89\x3b\xdb\xca\x4c"
+ "\xc5\x72\x07\x63\x1d\xca\xcc\x61\xc2\xbe\xb4\x3d\xbe\x49\x83\x41"
+ "\x53\x99\x6c\x97\x31\x35\xdb\x20\xda\x48\xed\x1b\x62\xdb\xea\xb4"
+ "\xbd\x34\xac\xbb\x68\xa6\x49\xb7\x2d\x20\xfa\xaf\xd9\x9d\x76\xdc"
+ "\x42\xbc\xd3\xcc\xad\xda\xfe\xa9\xeb\x6d\x35\xff\xd7\xeb\x9e\xa9"
+ "\xdd\xa5\x8c\x17\x3e\xd7\x31\x17\xbb\x50\x6e\x0d\xda\x51\xa1\xef"
+ "\xe9\x9a\x9e\x7e\x82\xa4\x35\x66\xd6\x04\xf6\x73\x09\xc3\x3e\xf7"
+ "\x86\xd6\xae\xcd\xb2\x80\x69\xb0\xa5\x67\x2d\xcb\xb0\xac\x58\xb7"
+ "\x6e\xed\x3a\x0b\x19\xdd\xe9\xe7\xab\x29\x9c\x17\xcd\x3c\xa1\xf9"
+ "\x93\x3b\xe4\xf7\x27\x57\x74\x4f\x44\xb0\x9f\x3f\x97\x72\x8f\xe9"
+ "\x1f\xc3\x5b\xdd\x93\x30\x58\x39\x76\x83\x5a\x83\xdf\x51\xfc\x1c"
+ "\xf8\x91\x2d\x75\x96\xea\x61\x49\xd8\xa3\x05\x3f\x16\xb8\x33\x3f"
+ "\x93\x6c\xd7\x24\xb5\x28\xf7\xfc\xa2\x4a\x0d\x65\xc2\xb6\x4a\xa1"
+ "\x4a\xfa\x2c\x64\x27\xfd\x28\x7e\x0e\xfc\x6a\xf1\x13\xf9\xd4\xdf"
+ "\x8b\xfb\xbe\x35\xc1\xdf\xe8\x7c\x9c\x17\x1e\x27\x7b\xeb\x8d\x7c"
+ "\x5b\xa8\x38\x07\x51\x77\xc9\x74\xfd\xda\x60\xe0\x45\xd3\x22\xb4"
+ "\x74\x82\xce\x1a\xbd\x8d\x59\x06\x48\x17\xc2\x8b\xee\x38\xa2\xa5"
+ "\x0b\xa7\x74\x7a\x7f\xc8\x86\x3f\xd2\xeb\xe9\x42\x79\xd1\x8c\x5a"
+ "\x2d\x9d\xb8\xfb\xa7\x16\x1a\x06\xaa\x77\x18\x2f\xf4\xb8\xb5\x74"
+ "\xa6\xe0\xf2\x82\xd2\x84\xa9\x45\xb7\x98\x29\x8d\xba\x2d\x54\xd0"
+ "\x86\xbc\xe8\x9e\x04\xa4\x1f\xd0\xf6\xe9\xd0\xc6\x69\xd6\x99\xfe"
+ "\xe3\x64\x5b\xb6\x72\xc5\x7d\x2b\xd7\x6c\x24\xef\x54\x59\x6b\x37"
+ "\x64\xd1\x73\x4d\xfa\xcf\xc5\x63\x6d\xea\xb3\xcb\xe4\x4b\x56\x66"
+ "\x22\xbd\x64\x62\xbe\xd1\x73\xf9\x06\x1b\x3d\x96\xad\xa5\x60\x76"
+ "\x46\xc2\x86\x65\xba\x9b\xf0\x3e\xb6\x9f\xba\x8b\xee\x05\xfd\x7b"
+ "\x4f\xa6\xa4\x47\xee\x2d\x76\x29\x77\x88\x73\x39\xe3\x36\x17\x3b"
+ "\x69\x15\xfe\x04\xd9\xd7\x6c\x26\x28\xf7\xee\x21\x9b\x09\xc6\x6d"
+ "\xb6\x65\x46\xef\xca\x15\xbc\x7c\xba\x09\x79\x41\xff\xbe\xa2\xdd"
+ "\xc9\x8f\x6f\x13\xf6\x43\x8b\xee\x8d\xd6\x75\x1c\x55\x7b\x7c\x25"
+ "\xd9\xc5\x17\x3a\x4f\xbb\x84\x3d\x1e\xd2\x3d\x6f\xad\xda\x25\xfc"
+ "\xd3\x44\x23\x7c\x10\xe1\x0e\x84\xcd\x08\xc7\xaa\xf6\x58\x2b\xdd"
+ "\x91\x44\x98\xfc\x99\xc5\x75\x17\xdd\xe7\xf7\x7f\x19\x0c\x1b\xcd"
+ "\x81\xdd\x7d\x03\xf2\xe8\xfd\xec\x8e\xa1\x8c\x0c\xdd\x3f\xb0\xf0"
+ "\x05\x5c\x74\x5f\xb6\xdf\x17\xb0\xf0\xe9\x64\x12\x7b\x93\xdc\xdb"
+ "\xef\xbb\x12\x62\xbe\x69\x87\xe4\x05\xee\xab\xd6\xed\x42\x48\x5a"
+ "\xff\xbe\x9a\x20\x3f\xca\x14\x76\xf8\xfd\x28\x4b\x3b\x66\x2f\x09"
+ "\xdb\x4b\xca\x77\xb1\xc6\xef\x4b\xf4\xfb\xbc\x2b\xba\xaf\x2d\xd8"
+ "\xe7\x9d\x0b\xdf\x89\xc7\xea\x2e\xfa\x2e\x0b\xec\x83\xf7\xed\xa6"
+ "\x3a\x07\xf2\x19\x5d\x66\x00\x3f\xb0\x19\xfc\x00\x9e\x82\x37\xd0"
+ "\xe8\x70\x8a\xe7\x85\x49\x64\x63\xc7\x42\xdf\x88\xf6\x1b\x50\xee"
+ "\x21\xe8\xda\xef\xbe\x48\xf6\x77\xdd\xf9\xcb\x95\x5b\xab\x48\x0f"
+ "\x0a\x61\x69\x3f\x92\x5f\x54\xbe\x2b\xee\x98\xe9\xb6\xe5\x82\xef"
+ "\xe5\x0f\x78\xff\xe1\x23\xfd\xdc\x3a\x73\xad\xd1\x9b\xbe\x42\xd2"
+ "\x71\xdf\xbd\xa6\x9d\x53\x37\xca\xfd\xfe\xbb\xad\xfc\x31\xe9\xf7"
+ "\xc4\xa5\xcc\xce\xa0\x3b\x51\x46\x25\x73\x2d\x47\x5e\x63\x76\xfa"
+ "\x0a\x11\x87\x74\xdb\x41\x6b\x69\xed\x3b\xe5\x8c\x6d\x63\xfc\xaa"
+ "\x4f\xda\x1b\x50\xbe\x5b\xbb\xf4\xa6\x02\xaa\x27\x5c\xd0\x11\x1f"
+ "\xb1\x08\xf2\x3f\x48\x6d\xab\x0a\xb2\x7d\x57\x86\x38\xd2\x09\xeb"
+ "\x7c\x8c\x45\x90\xad\x5f\xad\x2d\xb5\xc2\xff\x59\xd1\xec\x34\xdd"
+ "\x6e\x0f\x60\x5e\xdb\xbf\x3f\x8f\x3d\x2e\x56\xc8\xe4\x65\x09\xc9"
+ "\xf3\xf0\x96\xa0\xb9\xce\x0d\x9e\x3b\xb1\x9d\x51\x33\xcc\x9d\x6f"
+ "\x4c\xd9\x24\x7c\x4f\x16\xcd\x06\xfe\xff\xae\xb4\x27\xb1\xfd\xa7"
+ "\x5f\x12\x6e\x11\x3e\x19\xe9\x6e\xa3\x4a\x77\x77\xe7\xbc\x2c\xec"
+ "\xec\x1a\x24\xbd\x28\xfc\x32\x15\xcd\xce\xe2\x51\xf1\xc5\xd2\xef"
+ "\xec\xf4\x43\x18\x3f\xb1\xef\xd3\xda\x10\x77\x38\x4d\xd4\xf7\xfb"
+ "\xe9\x5e\xeb\x83\xf8\xfd\x58\xfa\x89\xf9\xe9\x97\x7a\xb9\x64\xc3"
+ "\x0a\x73\xcb\x84\x27\xd6\xda\xfd\x89\x7e\x3d\x25\xff\xbd\xd0\xfb"
+ "\x7f\x44\xf6\xb5\x02\x77\x84\xe7\x68\x72\xcd\xfb\x97\xb8\xd8\x6d"
+ "\x76\xb9\xbe\xef\xc7\xfc\x3f\xad\xdd\x0f\xbb\x3f\xcb\xc5\x1e\x69"
+ "\xec\x57\xc6\x5b\xba\xfc\x45\x8e\xdd\xfd\x15\x98\x8b\x0f\xe2\xf7"
+ "\x63\xa4\x3f\xa8\xfb\xdd\xde\x6e\x10\xf7\x9b\xce\x87\x98\xe9\x0e"
+ "\xf0\xfd\xc7\xf4\xf8\x61\x4a\x12\x60\x73\x7f\x9d\x8e\x4f\xc0\x0f"
+ "\x81\xdf\xb9\xbf\x19\xf4\xe6\x62\x2d\x8c\x35\x77\x7f\x87\x1e\xc6"
+ "\xbb\x47\xc7\x37\xc4\x23\x76\x6e\x49\x79\x91\x78\xcf\x65\x66\xd0"
+ "\x64\x66\xe2\xf1\xbe\x67\x76\xb1\x0f\x76\xc8\xbc\x25\x8d\x9d\x85"
+ "\xf5\x89\x5d\x51\xaf\x9a\xba\x80\x43\xf1\x6d\x86\x8b\xfd\xc7\x19"
+ "\x59\xce\xf7\x92\x5c\x21\xbe\x83\x81\xf1\x08\x31\x02\xc6\x27\x64"
+ "\x9f\xe6\x64\xe3\xbd\x96\x7c\xa0\x23\x5d\x06\xd6\x57\xb2\xe4\x09"
+ "\x3b\xaa\x77\xf6\x98\x16\x3b\x77\x80\x66\x7d\x96\xe6\xca\x1c\xe1"
+ "\x3f\xba\x24\xc7\x94\x4c\x34\x1f\xd9\x42\x10\x36\xd2\xc8\xf6\xa4"
+ "\x97\x85\x09\x7b\xff\xe5\xa5\xb5\xc2\xce\xfd\x26\x6b\x84\x6e\x77"
+ "\x12\xeb\x74\x16\x37\xbc\xd1\x41\xb6\x28\x85\x3c\xaf\xdb\x3a\x5a"
+ "\xd8\x9f\xd4\xec\x4e\xee\xdf\xc8\xa2\x2b\x55\x69\x77\x52\xd8\x49"
+ "\xb8\x8e\xed\x49\x5e\xd8\xbe\x43\xb7\x3d\x09\x38\xd0\xfd\x47\x2b"
+ "\xbf\xea\xf5\xe0\x19\x17\x64\x6f\x27\x74\x40\x3b\x94\x06\xe0\x4d"
+ "\x83\xb4\x43\x39\xb4\xfd\x66\xce\x5c\x39\x4f\xe6\xec\xd0\xfd\x82"
+ "\x07\xc5\x55\x60\x9e\x1f\x94\x71\xf7\x27\x6b\x71\x87\x5d\xec\x94"
+ "\xdb\x4f\x9b\x01\xdf\x91\x5c\x13\xeb\xf8\x0c\xf8\xe0\x17\x83\xd7"
+ "\x15\x13\x7f\xb4\x75\x0f\xc3\xbe\x1c\x86\xdf\x70\xfa\xcd\xf7\xe3"
+ "\x8f\xab\xbc\x89\x78\x04\xa3\x82\xfd\x26\x3b\x84\x2f\xf2\x7a\x43"
+ "\x52\xbd\xca\x19\xa2\x3d\xe9\xde\xf7\x22\x9f\x97\xec\x0f\x84\x2e"
+ "\xf2\x75\x92\xcf\xce\x33\x74\x9f\xad\xec\x59\xba\x5f\x39\x91\x93"
+ "\xbf\x9a\x45\xbe\x4b\xfc\x80\xbc\x37\xda\xa8\xf9\xe1\xac\xf3\x6d"
+ "\xe4\xb5\x18\x87\x08\xe2\x3b\xc8\x06\xd8\x68\xc5\xc3\x46\xdb\x42"
+ "\xde\x79\xf4\xca\x3b\x9c\xec\x7f\x91\xaf\x32\xb5\xc8\x03\x5c\x69"
+ "\x51\x52\xbd\x21\x05\x4e\x6f\xab\xf0\x17\xb0\xc8\x37\x9c\x2f\xca"
+ "\xbe\x9f\x0b\x1f\x63\x1b\xf9\x09\xe0\xd9\x10\xe1\x97\x7b\x33\xef"
+ "\xc4\x7b\xf8\xa2\xcd\x9d\x9c\x7c\x86\xa2\x6c\xf2\x39\xd1\xb3\x28"
+ "\x5b\xcd\x4f\xcd\x56\x90\xef\xaf\xc8\xf7\x57\xb4\x27\x11\x65\x9a"
+ "\x10\x9e\xc3\x0f\x3c\x4b\xf7\xb0\x0a\x04\xef\x83\x3e\x3a\xb4\xbb"
+ "\xad\x47\xc9\x4f\x28\xd9\x1b\x4f\xf5\x3a\x0a\x0e\x68\x77\x55\x85"
+ "\xbf\xda\xec\x5e\xae\xd5\x33\x6b\xd1\x66\x36\x27\x75\xf3\x44\x71"
+ "\xe7\x95\xee\x73\x2d\xf2\x5a\x50\x67\x01\xc1\x23\x42\xf8\x08\x17"
+ "\x77\xba\xbe\x9f\x78\x3d\x9f\xa1\x03\xf2\xdb\xa5\x77\x3b\xf8\x9e"
+ "\x19\x71\xbc\x74\x56\x25\x9e\xd8\x6b\xa7\x93\xbe\x9c\xc2\x4b\xbf"
+ "\x9b\xcd\xf7\xdc\x8d\xf8\xef\x2d\xc6\xf3\x20\x2f\xfd\x7e\x22\xdf"
+ "\x33\x13\xe1\xb9\x11\x78\x22\x3c\xc6\x83\xf4\x16\x5e\x3a\x36\x03"
+ "\xcf\x6a\x5e\x6a\x6e\x42\x3a\x84\xc7\xcf\xc7\x13\xe1\x09\x47\x91"
+ "\x0e\xe1\x9b\xac\xe7\x95\xef\x77\xe1\x1d\x71\x0f\xb5\xc9\xba\x7e"
+ "\xd8\x25\xea\x2a\x5d\xc8\x64\x1d\xc9\x11\xb2\x8e\xc7\xcd\xb2\x8e"
+ "\x27\xe3\x64\x1d\x37\x57\x20\x9d\x95\x97\x5a\x76\xe0\x79\x88\x97"
+ "\xde\x62\x43\x3a\x84\xe3\x96\xe0\x89\xf0\x6d\xa8\x6b\x26\xc2\xd6"
+ "\x19\x78\x22\x7c\x87\x05\xe9\x12\x78\x69\x82\x09\xcf\xc3\xbc\x74"
+ "\x0a\x95\x8f\xf0\x54\x37\x9e\x08\x4f\x73\x21\x1d\xc2\x77\x35\xe2"
+ "\x89\xf0\x53\xe8\xd3\x8c\x44\x5e\xfa\x93\x56\x3c\x6b\x78\xe9\x12"
+ "\xd4\x77\x37\xc2\x4b\x17\xe0\x89\x70\x1a\xf2\xcf\x44\x38\xfd\x08"
+ "\x9e\x08\x2f\xa3\xbe\xce\xe0\xa5\x2b\xa8\x9e\x23\xbc\xf4\x59\xea"
+ "\x33\xc2\x19\x76\x3c\x11\x5e\x45\xed\x41\x38\x93\xf2\x21\xbc\x1a"
+ "\x30\x98\x31\x8b\x97\xda\x8a\xf1\x3c\xca\x4b\xd7\xa7\x20\x1d\xc2"
+ "\x1b\xad\x78\x22\x9c\x0d\x18\xce\x44\x78\x4b\x2d\x9e\x08\xe7\x51"
+ "\x7f\x67\xf3\xd2\x6d\x99\x78\x1e\xe3\xa5\x3b\x92\x90\x0e\xe1\x7f"
+ "\x89\xc6\x13\xe1\x5f\x00\x7e\x33\x11\xde\x79\x0c\xcf\x63\x03\x8f"
+ "\xa7\x9d\xf1\x6d\x61\x8c\x97\xee\xab\xe3\xdb\x86\xe3\xb9\x3f\x97"
+ "\x6f\x1b\x06\x18\xbd\x0c\x3a\x34\x0c\xcf\xaa\x0c\x84\x13\xb4\x30"
+ "\x9e\x07\x16\x23\x9c\xa8\x85\xf1\xac\x4e\x42\x78\x86\x16\xc6\xf3"
+ "\x15\x0a\xa3\x8d\xaf\xe2\x19\x86\xe7\x2b\x0e\x84\x67\x6b\x61\x3c"
+ "\x0f\x45\xe0\xe9\xe5\xa5\xff\xe6\x41\x7c\x12\x2f\xfd\xf7\xa3\x08"
+ "\xe3\x79\x30\x1b\xe1\xb9\x78\x36\x23\x3c\xd7\x3d\xf9\x16\xa1\x2b"
+ "\xc5\xa3\x7a\x5c\x6a\xcc\xac\xb4\xfc\x2b\xcc\x40\x32\xef\x9a\x3c"
+ "\x17\xd9\x94\x98\xd8\xa2\x3c\xf8\x21\xf9\x9d\xa0\x34\xbe\xbd\x33"
+ "\x2c\x6a\xcc\x0c\x92\xb9\x84\x21\xdd\xf0\xf3\xca\xdc\x73\xb4\x67"
+ "\x3a\x73\x5d\xc2\xdf\x9d\x66\x2f\x2f\x0c\x79\xae\x81\x46\x98\x45"
+ "\x3e\xd4\x01\xaf\x25\xbc\x70\xd8\x65\x3c\x9b\x79\xe1\xa8\x16\xc0"
+ "\x0b\xe1\xc8\x8f\xf0\x44\x78\xe6\xbf\x02\x5e\x08\xff\xf4\x01\x3c"
+ "\x9b\xbb\x8b\xe6\xa6\xb8\x94\xef\x4b\x7c\xff\xc6\x14\x9b\xd1\xcb"
+ "\x81\x63\xd0\xb6\x97\xd3\xdd\x46\xaf\x03\x63\xf7\x10\xe2\x92\x18"
+ "\x7f\xe5\x56\x37\x8f\x09\x91\xed\x2e\x04\x5f\xdb\x1b\x67\x90\x75"
+ "\x8f\xe2\x2d\xca\xdc\xe7\x49\x1e\xcb\x63\x26\x0c\xf6\xfd\x15\xf1"
+ "\xfd\x96\x67\x6c\xf2\xbb\x89\x05\xbe\xff\x98\xbe\x9f\x34\x92\x0c"
+ "\xfd\xb6\x28\x9b\x4b\x99\xdb\x41\x69\xf0\xc4\x3e\x1f\xc2\x9c\x5d"
+ "\x6d\x5a\x1f\x87\x53\xba\x0b\x94\x6f\x30\x99\x8c\x1a\xfd\x48\x5b"
+ "\x49\x21\x6f\x24\xfe\xd3\xe8\x66\x06\x4b\x5e\xdc\xd1\x16\xe5\xa1"
+ "\xb4\xfd\x24\x57\x88\x4e\x4f\xa4\xbb\x49\x2d\xca\xbc\x6d\xde\x5d"
+ "\x77\x45\x58\x72\x8c\x28\xef\xa1\xf4\x7c\x0f\xef\x72\xe4\x3d\x80"
+ "\xbd\x4d\xc4\xcf\x97\xfa\xee\xe2\x7d\x86\xd4\x51\x12\xef\x16\x29"
+ "\xa7\x7d\x28\x8d\xf2\x0a\xfb\x85\xda\x98\xf9\xfe\x35\xec\x20\x8f"
+ "\x49\x27\x7b\xb3\x73\x50\xf6\xf3\x6f\xa9\x6e\xc3\x68\x37\x1b\x66"
+ "\xd9\xf8\x0e\xca\x9f\x27\xf8\x75\x3d\x2d\x1f\x19\x76\x50\x15\x69"
+ "\xc5\xb7\x5f\xbf\x83\xf1\xae\x14\x72\x9c\x79\xcd\xba\x0c\x9a\xef"
+ "\x7e\xa4\x8d\xee\x40\xa3\x8e\x24\xda\xc7\xe4\x3d\x9f\x87\x66\xd7"
+ "\x7b\xc9\x3f\x61\x4f\xe3\xd4\x2c\x16\x6a\xf4\x98\x94\xbc\x0d\xe2"
+ "\xee\x5b\x97\x23\xe7\x23\xa1\x53\x47\xe5\x23\xdd\x64\xd0\x08\x1e"
+ "\xba\x3b\x4b\xf2\x88\x32\x15\xe5\xa1\x3e\xc7\xc6\x4f\xa8\xdf\xbe"
+ "\x77\x2e\xd3\x39\xec\x43\xf3\xf5\xba\xc8\xfe\x7f\x09\x60\x43\x34"
+ "\x21\xdd\xdd\x4e\xf5\xf9\xc8\xce\x54\x71\x30\x7c\x57\x6a\xf7\x54"
+ "\x57\xae\xc9\x5a\xf7\x9c\x65\xfd\xca\x9c\x15\xf7\x4f\xde\x90\x60"
+ "\x59\x97\x6d\x59\x27\xfc\x60\x8b\x88\xe5\x09\x96\xf5\x99\xe0\xe7"
+ "\xb3\x36\xdb\x56\x7c\xdd\x27\xb0\x59\x35\x4d\x3f\x23\x6d\xb4\x2c"
+ "\x10\x7b\xa6\x5a\x9d\xde\x96\x95\xc5\x55\xbe\xeb\xb5\x43\x3c\x7f"
+ "\xbe\xc6\x4b\x3c\x74\xce\x72\xcb\x70\xd0\xd7\x0b\xc6\x5d\x0b\x7b"
+ "\x28\x13\xed\x74\xbb\x94\x79\x82\x66\xda\xad\xdb\xec\x52\x16\x24"
+ "\xd3\xd8\xca\x33\x86\x1f\x98\x5c\xec\x55\x69\x7f\xac\x3a\x7d\xbe"
+ "\xa4\xc5\x7e\x90\x24\xe8\x6a\x4b\x7a\x1b\x3f\x78\x2b\xd9\xab\x52"
+ "\x08\x0e\xc2\xa7\x2d\xbb\x2c\xee\xa7\xf2\x3d\xf3\xdc\x74\x37\xdc"
+ "\xb7\xf7\x1e\x87\x1a\x33\xcf\xad\xbe\x1a\x57\x93\xff\x32\x33\xbc"
+ "\x89\xb1\x08\xb5\x60\x9e\xdd\xc2\x26\xbe\x93\xd7\x66\xb8\xa8\xfc"
+ "\xe0\x47\xef\xe4\x35\x19\xf8\xee\x59\xc9\x9d\x71\x93\x1b\x3d\x85"
+ "\xc2\xb6\x27\xca\xf0\xb0\xf7\xd1\x0b\xf0\x0f\x47\xbb\xc6\x3c\x9a"
+ "\xdd\x35\xe6\x9e\x43\x9e\x3d\x4f\x56\x3b\x6e\x99\xce\xe6\xdd\xce"
+ "\x2f\xbd\x77\x82\x64\x3f\x0b\x22\xde\x9b\x4b\xb2\xb7\xe9\x75\x1e"
+ "\xd3\xf4\xc6\xae\xbd\xf3\x6c\x64\xf3\xe6\xda\xde\x27\x6b\x7a\x62"
+ "\xee\x75\x1d\x47\x9a\x0f\x40\x73\x9f\xb6\x60\x1e\x4d\x62\x86\x6b"
+ "\xb7\xdd\x9a\xf4\x66\x8f\xdd\x50\x7b\x62\xb6\x94\x17\xa6\x61\xee"
+ "\x8a\x3b\x20\x3f\xb8\xf2\xde\x91\x13\x0c\x75\xb3\x37\x7b\xe6\x1b"
+ "\xde\x9f\xd5\xff\xfb\xfc\x31\xef\x25\x9e\x60\xdd\x64\x6f\x15\xbc"
+ "\xcd\xdb\x9f\x54\x30\xbe\x77\x41\xf5\xeb\x39\x1e\x03\x08\x5a\x43"
+ "\x7d\x53\x05\xcb\x3d\xc7\x6e\xf0\x5e\xb2\x86\xfe\x07\xf2\x5f\x23"
+ "\x3b\x86\xa7\xcd\xc2\x9e\x59\x9e\x43\xf8\x68\x35\x36\x60\x5f\x57"
+ "\x2f\x59\xc3\x1a\x16\x3b\x18\xbe\x4f\xf7\x3e\x62\x66\xf5\x19\x6e"
+ "\xe6\x4c\xa9\x66\xd7\x0c\x49\xec\xb7\x3f\xa9\x66\xfb\x40\x57\xef"
+ "\xbb\xc8\x22\xe4\x59\xac\x35\xcc\xdb\x6b\x0d\xf5\x6e\xb1\x12\x1d"
+ "\xce\xf9\x25\xeb\x48\xa2\xe5\xbc\x6b\xad\xe1\x0d\xee\x6a\x36\xb5"
+ "\x8d\x59\xaf\x19\x98\xf1\xda\x16\xeb\xc8\x06\x5b\x05\xca\x02\x91"
+ "\x06\xb8\x92\x6d\x2b\xb2\x79\x45\x70\x1a\x95\xc2\x16\x77\x28\x3f"
+ "\xa8\x1f\x79\x86\x8d\x21\xdb\x8a\x64\x1b\x8d\xec\xbb\xaa\xd1\x0b"
+ "\xaa\x7d\xd1\xf3\x6c\x79\x57\xc8\x16\x88\x87\x01\x1f\x25\x5b\xa4"
+ "\x3f\x70\x85\xfa\xac\x72\xeb\xc8\x54\x7a\xee\x8a\x9f\x4e\x34\xa6"
+ "\xda\x6d\x26\xdf\x43\xe1\xd4\x4e\xe0\xc4\xf0\xad\x9f\x03\x96\xf9"
+ "\xd6\x50\xa4\x03\x7f\x69\x1d\xed\xec\xf0\x30\xdf\x9d\x53\xd2\xa6"
+ "\xd8\x84\x8f\xd9\xe8\xaa\x3c\x66\xb2\xe7\xb1\x68\xcb\x4c\x82\xdd"
+ "\x23\x17\x7c\xaf\x4f\x49\xe6\x45\x4f\x01\x57\x87\xc6\xca\xb8\x87"
+ "\xeb\x2d\x0f\x31\x66\x99\x2e\xde\x37\x58\xee\xc3\x18\x46\x2f\x60"
+ "\x82\xfe\x15\xbc\xd2\xc3\x2b\xe5\x5c\x7d\x38\xfd\x5a\xd8\xc1\xd9"
+ "\x6a\xd1\x9f\x52\xd4\x6d\xa1\x16\xf2\x6b\x7d\x51\x79\x78\x1e\x2f"
+ "\xfd\xcf\x5c\xbe\xfb\x49\x61\xcf\x06\xe1\xef\x5f\x0b\x7b\x02\xfb"
+ "\xfc\x7f\xba\x50\x7e\xd2\x35\x25\xb4\x09\xbf\x66\x2d\x3f\xf9\x17"
+ "\x7a\xc0\x77\xf0\x56\x61\xd7\x56\xf8\xab\x41\xbf\x52\x31\x66\x3c"
+ "\xe6\x91\x1a\x61\xc3\xbd\x17\xf0\xd5\xfc\x79\x12\x3c\x08\x06\x6a"
+ "\xaf\x75\xa4\xe8\x6b\xaf\x35\x02\xf0\x25\x3b\xaa\xc6\xbc\x74\xe4"
+ "\xd9\xfb\xc8\x09\x7c\x1b\x7d\x2d\xfa\x11\x0f\xf9\x8d\x72\xda\xdc"
+ "\xcc\xb7\xe7\x11\xb2\x91\x1b\xfd\x62\x0e\x33\xa9\x63\x1e\xa9\xe1"
+ "\x7b\x1e\x01\xcf\x21\xd6\x0f\xa3\x76\xaa\xa5\xff\x2b\xe1\x1a\xe9"
+ "\xf9\xa3\x6d\x68\x5f\x13\x7e\xe0\x41\x7e\x78\xec\xda\xe4\x5b\x9b"
+ "\xf0\xb4\xa3\xad\x16\x5e\xb4\xce\x4a\xef\xf8\x66\x41\x9b\x5f\x21"
+ "\x38\x10\x3c\x34\x58\xec\x0f\xc0\xa2\x6a\x39\xd2\xed\x54\x8b\x3e"
+ "\x04\x0d\xfc\x70\x26\x2f\xca\x6c\x0b\x4a\x77\x32\x90\xee\xb5\x70"
+ "\x99\xae\xf9\xb0\x4c\xb7\x29\x0d\xe3\x90\x2e\xe1\xfd\xc8\x88\xaf"
+ "\xc3\xfb\x11\x25\x90\x77\x57\x8d\xcc\xfb\xfe\x6c\x99\xf7\x19\xca"
+ "\x7b\x6f\xdf\x36\x3d\x32\x2d\x90\x7e\x67\xab\x4c\xff\x6e\x87\x4c"
+ "\xff\x74\x42\x50\xba\xa7\x02\xe9\x2a\x6c\x32\x5d\xdd\x0e\x99\xee"
+ "\x67\x3b\xf1\x7d\xcf\x00\x6d\x29\x09\xe4\xf9\x4d\x97\xcc\xf3\x45"
+ "\xb5\xcc\x53\x18\x8b\xef\x27\xfb\xb5\xe5\xad\x40\xfa\x1a\xad\xdf"
+ "\x2d\x89\x32\x7d\x6e\x6d\x50\xba\x73\x32\x1d\x7d\xbf\x80\x74\x0f"
+ "\xa7\x5d\x0b\xfb\xdf\x4d\x32\xdd\xbf\x64\xd0\x7c\x04\xde\x1b\xa6"
+ "\x16\xfd\xb4\xf8\x5a\x58\x4a\x16\xca\x59\x8c\xb1\x89\xa5\x27\xc6"
+ "\x2e\x56\xb5\x4f\xc7\xb8\xce\xaf\xa3\xf3\x00\xb2\xff\x41\x77\x16"
+ "\xd5\x42\x0b\xab\x8a\x62\x11\x2f\x46\x31\xba\x5b\x17\xde\x5d\xb4"
+ "\x60\x76\xe0\x0c\x5a\xe2\x50\xc2\xc1\x2e\xe5\xa1\x5a\xe0\x61\xdf"
+ "\xc0\xf6\x53\x16\xd8\xfc\xb2\x2a\x15\xfb\xf9\x9e\xbb\xdc\x03\xd2"
+ "\x58\xbb\xee\x38\x48\x3a\x0d\x84\x7f\xd0\xce\xcf\xc9\xd6\x5c\x00"
+ "\xa7\x2f\x10\xba\x75\x64\xeb\x81\x64\x88\x5a\x9c\x90\x2d\xa8\x98"
+ "\xc7\xe0\xe7\x8e\x92\x7d\x3f\x92\x19\x62\xdf\xa9\x45\xdb\x48\xf7"
+ "\x62\xd8\x0b\x06\xb5\x06\xbf\xa3\xf8\x39\x5e\x20\x59\x62\x21\x9b"
+ "\xa7\xcb\x59\x07\x6e\xeb\xc2\x58\x17\xfb\x7f\xe6\x06\x64\x4d\x0b"
+ "\x13\x50\xd6\x8e\xa1\xeb\x03\x2f\x1c\x54\xfe\x2b\xfc\x38\x13\xed"
+ "\xb2\x77\x46\x92\x5d\x95\x7e\xe6\xb1\x6e\x41\x77\x2d\xdc\x86\x7d"
+ "\xba\x40\xd8\x90\xdd\xfd\x90\x4d\x8d\xc3\xbe\x73\x81\x85\x38\x73"
+ "\xdb\x58\x8d\xda\x66\xb0\xf7\xb0\xd0\x06\xaf\x4b\xa4\xaf\x51\x41"
+ "\xdf\xad\x09\xc1\xde\xbf\xf0\x45\xfb\x55\xad\xbc\xea\x74\x77\xfe"
+ "\x6a\xe9\x03\x9b\x68\x3e\xda\xaf\x80\xa3\x22\x84\x5f\xb4\x35\x44"
+ "\xf3\x2c\xac\xc7\x7b\x38\xa5\xbd\x76\xdb\x2d\xb6\x6b\xff\x96\xee"
+ "\xee\xd9\x3b\xcb\xd5\x73\xdb\xe4\xe4\xde\x98\x87\x6c\xbd\x7b\xe7"
+ "\xba\xbd\xff\x96\x9e\xe6\xbd\xed\x56\xb7\x2f\xe6\x5e\xb2\x65\x85"
+ "\xbd\xac\xc2\xf0\x86\x5a\x63\x78\x23\xcf\x61\xa0\x72\xdf\xc9\x3b"
+ "\x64\x78\x3b\xaf\xd1\xf0\xb6\x7a\xd4\xf0\x4e\x9e\x1d\xcf\x6a\xf2"
+ "\x91\x05\x3a\xf3\xd1\x9b\xde\xce\xab\xc5\x5e\xfa\xe8\x12\xc0\x6b"
+ "\x89\x2e\xd3\xe4\x0f\x78\x59\xc3\x21\x2f\x3b\x99\x75\x85\xb9\x23"
+ "\xa7\x9f\xc1\xaf\xc9\x3d\xe6\x91\x36\xf7\x98\x27\xab\x45\x9b\x63"
+ "\x16\xda\xa8\x8f\x74\xb7\xeb\x6d\x55\xb6\x59\x83\x07\x95\xf9\x7c"
+ "\x15\x9d\x77\xea\xf6\x75\x95\x45\x49\x5f\xb3\xaf\x6b\x90\xfe\xd9"
+ "\xfc\x36\x76\xff\x3b\xec\xeb\x6a\xbc\x3f\xd9\xd7\x05\xbf\xd9\xa8"
+ "\xf1\x9b\x0e\xcd\x96\x52\x04\xf1\x98\xc2\x96\x52\xb6\x43\xd8\x43"
+ "\x12\x36\x43\xf6\xcc\x15\xb4\x63\x77\xd1\xa2\x5c\x9d\x97\x24\x7a"
+ "\xc9\x57\x3e\xbd\x15\x3f\x17\xe2\x77\xbb\x94\xce\x50\x3d\x9e\xef"
+ "\xea\x75\x11\x4c\x7c\x3c\xe3\x7b\xda\x99\xf6\x1c\xdf\x9e\x7b\x6a"
+ "\x7c\x7b\x9e\x2c\x40\xdc\x6c\xfc\xee\xf7\x95\xf7\x22\x6f\x6f\x1b"
+ "\x7e\x1d\xf8\xb9\xf1\x43\x79\xbd\x1e\x5f\xb9\x97\xe1\x17\x8a\x5f"
+ "\x38\x7e\x11\xf8\x99\xf0\x8b\x56\xcb\x7b\xbd\x64\x2f\x90\xef\xf2"
+ "\x5a\x30\x0f\xcc\x7a\xb9\x01\x78\x2f\xba\x86\xfe\x27\x11\x2d\xc7"
+ "\x47\xff\x67\x05\x07\x6e\xe0\xaf\xdc\xe2\x11\xed\x7f\x65\x72\x23"
+ "\xc2\x16\xf7\xa4\x74\x17\x7e\xf3\xdd\x91\x3f\x4b\xc2\x8f\x9e\xc9"
+ "\xee\x3d\x0b\x18\xc6\xb3\xd8\x3d\x66\x81\xbd\xbb\x28\x19\xe3\xff"
+ "\xe3\x64\x29\x27\x4a\xce\xc0\xbb\x4d\x7b\x07\xbe\x79\x5c\xd8\xe8"
+ "\x77\x8f\x59\x98\x8c\x30\x70\xe4\x13\x22\x5d\x67\xcc\x02\x93\x76"
+ "\xdf\xa9\x00\xf1\x95\xae\xd0\x98\x26\xfd\x0c\x08\xe1\xc3\xfa\xfa"
+ "\x23\x1a\x4f\x3f\xdf\x0f\x5e\x57\xab\x97\xd9\x52\x57\xa7\x67\xa7"
+ "\xae\xcf\x5c\xb9\x6c\xc5\xfa\xfb\x2c\x93\x97\x5b\xac\x2b\xd7\x3d"
+ "\x97\xfa\xdc\x86\x15\x1b\x56\x08\xb2\x12\x51\xb7\xf7\x39\x0f\x8a"
+ "\xa6\xfb\x5e\x5e\xf0\x28\xa3\x97\x73\xbe\xf5\x69\x66\x58\x00\xbc"
+ "\xc2\x6f\x49\x77\xdf\xd0\x7a\x80\x1f\x6b\x77\x1b\x16\x74\xb8\x98"
+ "\x97\x68\xbf\xbd\x0f\xd9\x46\xb7\xce\x41\x9c\xc7\xb0\xa0\x0b\xf3"
+ "\x19\x6b\xc3\xd9\xea\x60\x94\x46\xd2\x82\xbf\x67\x75\x44\x0b\xee"
+ "\x9d\xe7\xa6\x34\x1c\x34\xa0\x78\xc6\xdc\xe3\x58\x88\x32\x38\xd6"
+ "\x14\xa5\x7d\x0b\x71\xa4\xeb\xc0\x63\x66\xb9\xf8\xd5\x5c\x5e\x87"
+ "\x32\xde\x5e\xe5\x36\x90\x2c\xec\x51\x2a\x17\xeb\x8d\xbf\x7a\x8b"
+ "\xed\x6d\xa4\x7d\x7b\x15\xf2\x63\x4d\x72\xac\xc5\xb7\x10\x6e\x51"
+ "\x1e\x9b\xff\x36\xf2\x0b\x7e\x07\x6d\x7c\x13\x71\xf9\x1b\x58\xa8"
+ "\xbe\xc6\x89\x5e\xf7\xaf\xf3\x8d\x44\xf7\xfe\xe8\xd7\xb4\xce\xf9"
+ "\xab\xc4\x67\x3d\x64\x7b\x1d\x79\xdf\x58\x25\x79\x40\xf0\x0f\x21"
+ "\xc4\xef\x11\x2e\x21\x1c\xe2\xcc\x95\x7c\x5f\x8d\xda\x04\x7e\x31"
+ "\x84\xf2\x7e\x45\xdf\xf6\x61\x0e\x4a\x7e\xe2\xb1\x04\x9d\xc6\xff"
+ "\xa5\x66\x53\x69\x54\x33\xe6\xcb\x52\x36\x11\x69\x87\x11\xfc\x08"
+ "\x4e\x74\xfe\xca\x8b\x92\x4f\xec\x23\x7b\x4c\x51\x2c\xbc\x77\x4f"
+ "\xfa\x2c\x29\x83\x7f\x2c\x53\xdf\x2f\xba\xa2\xd3\x67\x05\x8f\x9b"
+ "\x1c\x2f\xcb\x8a\x35\x74\x92\xb0\x5c\x1c\xd9\xa5\xaf\x5f\xbf\x61"
+ "\xf5\x0a\xcb\x8a\xf4\x65\x19\x16\xf1\xd9\xb2\x61\x3d\x92\xac\xcc"
+ "\x5a\x6f\x59\xbb\x69\x8d\x65\xf5\xfa\x95\xc4\x3d\xac\x58\xb7\x6e"
+ "\x83\x2d\x6b\x24\x93\x39\x2d\xab\x37\x64\x66\xad\xb4\xe1\x65\xfd"
+ "\x8a\x35\xcb\x2d\x62\xd4\xd7\xa3\xa8\xcc\x4c\x8b\x56\xc3\xfa\x8c"
+ "\xf4\x75\x34\x11\xd6\xfc\x0c\x89\x82\xf2\xf7\xe5\x2d\x22\xc8\x66"
+ "\x15\xed\x3f\x17\x95\xc7\xeb\x4f\x84\x02\xd6\xbb\xd3\x67\x91\xce"
+ "\x00\xc2\x75\x82\x27\x2c\x7a\x2c\x97\xce\x57\x5e\x88\x62\xa1\x9d"
+ "\x93\x27\x37\x76\x17\x3d\x3e\x5f\xef\x1b\xd9\x88\x17\x36\x12\x85"
+ "\xfd\xcd\xc7\x7f\x2b\xee\xe3\x61\x5d\x48\x5b\x67\x8f\x95\x49\x58"
+ "\x3c\x9e\x1d\x6c\x5f\x5b\xea\xef\x3c\x5e\x2e\xcf\x26\x1e\xaf\x23"
+ "\x7a\x4a\xb3\x69\xaf\x20\xcf\x5b\x94\x47\xdd\xf3\x64\x31\xf2\xd5"
+ "\x04\xf6\xdc\xc7\x8b\x29\xbd\x48\x57\xf4\xd8\x27\x7c\xcc\x02\xf0"
+ "\xb7\x8f\x67\x52\xbb\x06\xd9\x6b\x2c\x57\x51\xee\xe9\x1a\xc6\xe2"
+ "\xa3\x99\xf5\xea\xae\x99\x8e\xee\xa8\xe9\x6d\x3d\x85\x6c\x78\x0f"
+ "\xf6\x37\x8f\x81\x4d\xbc\x86\x79\xb1\x79\x1a\x0b\xd9\xba\x90\x19"
+ "\x6a\x56\xd5\x90\x8d\x57\x56\x37\xbf\x82\x39\xd3\x5c\xcc\xe9\x39"
+ "\xcc\xea\x1c\x2d\xac\xde\xfb\x9a\xf4\xbf\x90\x43\x3c\xc9\x13\xd3"
+ "\xc8\xee\x54\xfe\x56\xee\x7b\xf3\x77\xee\x61\x6f\xb4\xd7\x90\xdf"
+ "\x84\x89\x4e\xef\x67\x0e\x67\xee\x41\xe6\xcc\x76\x3a\xe8\x3e\xfe"
+ "\x45\x65\xf1\x4d\x6f\xe3\xdb\x88\x3a\xe4\x7b\x94\x0d\x47\x38\x92"
+ "\xea\x28\xde\xcb\x9b\x7e\x11\xc3\x9b\x7f\xb1\x97\xbb\x76\xc6\x08"
+ "\x3f\x08\x6d\x25\x31\xbc\xa3\x44\xb3\x2d\x47\xf3\xd4\xb6\x91\x99"
+ "\xdb\x95\xc5\x87\x84\x7c\x62\xae\x08\x8f\x43\x58\xd8\x6b\x77\x66"
+ "\xef\xa5\xf0\x78\x84\x6b\x65\xb8\x8a\xc2\x13\x10\x6e\x92\xe1\xf7"
+ "\x28\x1c\x8b\x70\x9b\x0c\x37\x30\x79\x37\x7d\xb1\x47\x86\x3f\xa6"
+ "\x30\x60\xff\x44\xb8\x63\x23\xb5\xf7\x53\x8c\xd9\x13\x63\xf2\xcf"
+ "\x32\x83\x33\xfb\xbc\x58\x0f\xef\xe4\x65\x90\xfc\x04\xeb\x61\xf1"
+ "\x8b\x34\xdf\x81\xab\x66\x85\x25\xd2\x73\xf1\x6c\xa3\x87\x0d\x07"
+ "\x9d\x39\x0a\xdf\x46\x10\xec\x06\xa4\x65\xde\xb8\x6d\xe2\x22\x2f"
+ "\x77\xf0\x57\x6e\x6d\xe3\x7b\x1e\x72\x03\x7f\xd2\x99\x39\xd6\xf9"
+ "\x0c\x56\x93\xe3\x11\x76\x76\x41\xdb\x63\x0d\x3d\xb1\x81\xda\xe4"
+ "\x06\xad\x3c\x88\xdd\x4d\x13\xdf\x33\x2b\x09\x3c\x68\xd3\x42\xab"
+ "\x97\x74\x10\xc1\x1f\x3c\x39\xe2\x64\x06\xd1\x0f\x0b\x1f\x57\x0f"
+ "\x4e\x4e\x54\xf3\x53\x18\x8f\xbb\xb5\x6d\x61\x06\x77\x60\x2f\x53"
+ "\xa4\xac\x9a\x7f\x86\xfa\x3f\x13\xf5\x4e\xbe\xb5\x4d\xdd\x94\x41"
+ "\xfe\x9b\x18\xe1\x98\x3c\xda\xd7\x37\x02\x9f\x6c\x49\x31\xfa\xf6"
+ "\x2c\x4c\x3e\x99\x71\x6e\x68\xbe\xd0\x94\x27\xc3\x07\xd5\x33\x42"
+ "\x9b\x7c\x3c\x85\x79\x51\x8f\x17\x7d\x25\x1a\xe2\x0d\xb5\xd6\x00"
+ "\x5a\xa6\xed\xf5\x67\x9a\x86\xf1\x4d\x29\x46\xf4\x69\x9a\xd3\x7a"
+ "\x85\x35\xf4\xd0\x5a\x79\xb2\xf6\x64\x36\x63\xf3\xb2\xbd\x0e\xa3"
+ "\x5b\xd8\x07\x36\xd9\x56\xb1\x9b\xf9\x98\x59\x49\xed\xca\x8f\xcd"
+ "\x8f\xe6\xa2\x0f\xe8\xfb\xdb\x2d\x4d\xa1\x2a\xfa\x31\x55\xc2\x8d"
+ "\xf2\x79\x01\xdb\x26\x9d\x27\x1a\x62\xfb\x25\xdd\xb8\x3e\x85\xd1"
+ "\x3d\xc1\x37\x41\xb7\xa8\xbd\x29\x46\x15\xfb\x12\x7d\x3b\x69\xbd"
+ "\xc0\xa8\x4e\x0d\xd6\xc2\x26\x3b\x8f\x03\x9c\x51\x3f\xd9\x25\xd6"
+ "\xe1\x8a\xb4\x5e\x5f\x6f\xc6\xc0\xe3\xbf\x77\xa1\x05\xed\x6b\xe4"
+ "\xe5\xbd\x8d\x03\xd3\xba\xbd\x6f\x6a\xf3\x23\x1c\x3f\x33\x7f\x39"
+ "\x3d\x19\x73\xc0\x2a\xfc\x6b\xee\x9d\x6b\xd3\xcf\x80\xb1\xde\x30"
+ "\x47\x7e\xfc\x62\x4d\x5e\xdb\xc0\x76\x59\xed\x25\xd2\xaf\xd9\xb0"
+ "\xcf\xb8\xd1\x47\xfe\x7a\xaf\x90\x8d\x6b\xf4\xa1\x6b\x88\x63\xfa"
+ "\xe3\xe6\xc1\xc6\x94\xca\x9f\x77\x3b\xef\x1d\x5a\x79\x29\x83\xd2"
+ "\xbf\x80\x6d\x23\x37\xf5\x36\xf6\xf0\xb9\x8a\xe4\x5b\x9e\xfa\x90"
+ "\x60\x45\xfb\x48\xce\x1f\x99\xc1\x83\x3d\xf4\xb5\x27\x8b\x0d\x09"
+ "\x69\x8c\x7c\xa0\x15\x9c\x6a\x3c\xc1\x16\x2d\x60\xf9\xf5\x19\x97"
+ "\x99\xee\xaf\x8c\xc7\xcc\x73\xff\xea\x49\xb7\x81\xce\x8b\xc8\x3f"
+ "\x99\xe0\xf1\xf7\x3e\x62\xf9\x8f\x8f\x69\xef\x5d\x60\x7a\xfd\x63"
+ "\xb7\xc1\xdb\x99\x62\x11\x36\xb6\xc1\x4f\xe4\x67\x70\xd5\x7f\x86"
+ "\x44\x7e\x18\xec\xf1\xb3\xc8\xff\xf3\xe9\xe4\x46\x71\x77\xfb\x74"
+ "\xca\x09\x76\xba\xb9\x82\xd5\xb5\x9e\xa5\xfb\x86\x2f\x9f\x4e\xb1"
+ "\x13\x5d\x39\xda\x0b\xda\x71\x1f\x68\x47\xac\xd7\x11\xaa\xa9\xa4"
+ "\x56\x3f\x47\xa2\x33\x25\x9d\x6e\xf4\x62\x8d\x56\x6a\x3e\xcb\xbc"
+ "\x45\x3f\x76\x54\x6a\x67\x4a\xe4\xcb\xec\xa5\x8d\x2c\xee\x25\x83"
+ "\x9a\x32\xd0\x19\xd2\xe8\xe7\x84\x6d\x17\xb3\x1a\x59\x52\xab\xfb"
+ "\x34\x7b\xf4\x39\x0b\xfb\xdf\xe8\xfb\x49\xeb\x50\xd7\xe4\x53\xc2"
+ "\x56\x86\x17\xf3\xce\x8b\x39\xe7\x05\x3c\x31\x06\x3b\x31\x6e\x03"
+ "\xf2\x64\xfa\x18\xf4\xe6\xeb\x63\xf0\xd3\x74\x31\x06\xe0\xe5\xb6"
+ "\x3c\xa5\x8d\xc1\x27\x18\x83\x56\x8c\x41\x21\x2b\xf8\x60\x71\x1d"
+ "\x5b\x94\x8c\x31\xe8\xb8\x4c\xf6\xd9\xa5\xcf\xb8\x2c\x09\x7b\x31"
+ "\x16\x9f\xb8\x85\x3e\x27\x8d\xc1\xe1\x9f\xc8\x31\x78\xe3\x27\x6e"
+ "\xd0\x43\xb7\x26\xfd\x0a\x61\xdf\xa6\x14\x0b\xf9\xde\xe1\x85\x69"
+ "\xe4\xdf\x5a\x8e\x45\x2f\xc6\xa2\x57\x8e\x45\xde\x73\x18\x8b\x33"
+ "\x4d\xc2\xc6\xcb\xe9\xe6\x3a\x56\x97\x56\xcd\xea\x81\x97\x30\x16"
+ "\xe9\x34\x2e\x24\x93\xf0\x6d\xb1\x46\xbd\x98\xc3\xa2\x2b\x73\x98"
+ "\x59\x1f\x0f\xb5\x17\xe3\x91\x83\xf1\xe8\xc1\x78\x78\xfc\xe3\x11"
+ "\x2d\xc6\xe3\x82\x36\x1e\x3d\xa4\x9f\x86\xf1\xe8\xc1\x78\xf4\x60"
+ "\x3c\x0a\xe5\x78\x10\x9e\x7f\xb4\xcb\xc8\xd5\xbf\x59\x59\x55\xfb"
+ "\x00\xe3\xb1\x45\x1b\x8f\x4f\xfe\x9e\xf1\xf8\x69\xc2\xd7\xc7\xe3"
+ "\x27\xa6\x6f\x1a\x8f\xc0\x9a\x78\x7a\x18\x8d\x47\x6f\xb5\xb6\x26"
+ "\x6e\xa3\x35\x51\x60\x88\xc7\x5e\x44\x30\x3d\xd5\x78\x4c\xac\x09"
+ "\xf4\xb5\xe0\x57\x4f\x7a\x0c\x75\xad\x18\x97\xe5\x18\x97\x9c\xc0"
+ "\xb8\xc8\xf1\x98\xe7\x3e\xf4\xb1\x84\xbf\xe5\x61\xda\x33\x68\x6d"
+ "\xd0\xf8\x60\x9c\xb0\x7e\x06\xf2\xf7\x17\x7c\xd6\x8a\x32\x55\x5a"
+ "\x27\xb4\x46\x68\x3d\xd4\x67\x9c\x15\xfe\xd3\x4f\x27\xd7\x32\x3a"
+ "\x73\x3d\x9d\x72\x0c\x63\x55\xc1\x7c\x9b\x30\x36\x1b\xb1\x4e\x14"
+ "\x36\x89\xfc\xfe\x9d\x4e\x29\x26\x7a\xc1\x84\x39\x3f\xc2\x87\x71"
+ "\xf2\x75\x9b\x47\xee\x04\xaf\x75\x60\x63\x60\xdd\x54\x69\x3e\x8e"
+ "\x79\xd8\x8f\x1d\x88\x0f\xf5\x62\x8c\xb0\x76\xfa\xac\x19\xbf\xef"
+ "\xe3\xbf\x5a\xd9\xfe\x16\x16\x7e\xc3\x4a\x39\x46\xbe\xa0\x35\xb3"
+ "\x70\x25\xad\x99\x02\x8c\xd1\x1f\x87\x38\x46\x4b\x84\x1c\x00\x3c"
+ "\xa8\x85\x47\xf6\x36\x62\x9f\xc4\x18\xfd\xb4\x7a\xb0\x31\xf2\x1d"
+ "\xbc\x35\xdc\x67\x9a\xde\x48\x76\xe2\xd5\xb5\x8b\x15\x15\x7c\x54"
+ "\x0f\xf8\xd7\xd3\x6e\x2f\xcb\x05\x0f\x91\x73\x96\x85\x39\x17\x7f"
+ "\xc4\x9c\xae\xa3\x8c\x6c\x2e\x93\x2c\x9d\x7c\x2f\x38\xbd\x47\x81"
+ "\xaf\x9e\x74\x50\x78\xbf\x08\xbb\xd9\x96\xa7\x59\x88\xf0\x07\x9a"
+ "\x52\xcd\x76\x62\x7e\xbe\xfe\x93\x6a\x83\xba\x7b\x56\x32\x37\x91"
+ "\xcf\x18\xe6\x20\xbd\xf0\xfc\xcd\x2c\xa2\x3e\xa3\x8e\xec\xce\x7d"
+ "\x46\x76\x84\x1b\xba\x50\xa6\x9b\xf7\xf8\xb0\x67\x54\x15\xf2\xa3"
+ "\x64\x47\x7f\x6a\xb6\xa0\xc5\x69\xbe\x7c\x4e\xb4\x08\xc9\x0c\x1d"
+ "\x79\x2f\x81\xf6\x7a\x5a\xd8\x69\x46\x9c\x52\xbf\x8a\x74\x24\xd2"
+ "\x9f\xa0\x76\x09\x9b\x8a\x5e\xf9\x9c\x4a\x7e\x13\x63\x7e\x1c\xf2"
+ "\x56\x9e\x3b\xd4\x0e\xbe\x18\x34\x1a\xd2\x2d\x9d\xc6\x25\x8f\x68"
+ "\x76\x9e\xf1\x08\xd9\xad\x3b\x3f\x23\xcc\x9e\x43\xfe\xfd\xc8\x26"
+ "\x3f\xed\xd9\xe9\xc3\xc8\xa7\x31\xe6\xac\x95\xc7\xcc\xb5\xd5\x3c"
+ "\xe3\x36\x04\xf6\xe5\xa5\x4b\x30\x6f\xad\xf3\xac\x3c\x9f\x7c\x17"
+ "\xbc\x8d\x7e\xf1\xbd\xf7\x38\x5e\x6b\xf1\x08\x9c\xf2\x1f\xcf\x14"
+ "\x1b\x38\xe6\xb4\x07\xf8\xa1\xee\xe3\xff\x14\x3e\x5a\xcf\x2b\xa9"
+ "\xab\x3f\x48\xf1\x32\xaa\xff\x89\xdb\xe9\x9c\x64\x69\xf5\x35\x43"
+ "\x8b\xed\x5a\x58\x4a\x6c\x7e\x6b\xc0\x3f\x65\xb0\x1f\x4a\xc2\x33"
+ "\xaf\x3f\x83\x32\x09\xcf\xb4\x14\x18\x24\x6e\x49\x22\xf9\x66\x78"
+ "\x7f\xdc\x52\xdf\x71\x81\xe5\x61\x1e\xd7\x67\x54\x0b\xff\x12\xa3"
+ "\x81\xdf\xd5\x2d\xc0\x27\xbd\xd6\xa8\xfd\xc0\x27\x84\x07\xaa\x80"
+ "\x3f\xd4\x2d\xe6\x91\xa5\x3d\x2c\x41\xc7\x23\x44\x7b\xd1\xf3\x69"
+ "\xcc\x51\x63\x2d\xe2\x30\x4e\x2a\xf0\x3a\xf0\x89\x75\x5f\x0e\x8b"
+ "\xdb\x87\x39\xba\x9f\xf0\x08\xe8\xe2\x47\x6d\xc0\x23\x9b\x80\x47"
+ "\x36\x0a\x3f\xc1\xe6\x2a\x83\xc4\x1f\xbf\x6b\x29\x36\xd8\x75\x3f"
+ "\xe1\x02\xbe\x69\x4a\x03\xcd\x8f\xb4\x02\x71\xbf\xcd\x47\xfb\xd3"
+ "\x96\x94\x90\x86\x2e\xcc\x91\xbd\x4f\xd6\x50\x9c\x58\xb7\x9b\x32"
+ "\x46\xaa\x72\xae\x25\x11\x4c\x0e\x5c\x64\x89\xc2\x97\xe6\x25\xf3"
+ "\xc8\xb2\x35\x2c\xa1\xea\x22\x8b\xab\x5a\xc3\xac\x58\xaf\x86\x2a"
+ "\xb4\x61\xe9\x73\x26\x26\xfc\x38\x84\xa5\x50\xfc\x80\x7e\x1c\x40"
+ "\x57\x9b\xab\x68\xcd\xac\xb5\xfa\xdb\xe4\xb5\xaf\x4c\xf3\x01\x76"
+ "\xd2\xee\x52\x9a\xf4\x21\x6f\x9a\x60\x95\x74\x7e\xda\x4e\xa9\x5b"
+ "\x64\x21\x1f\xf3\xc3\xdb\x95\xb4\xef\xf3\x5d\x56\x8b\x2d\x87\xec"
+ "\x17\x6b\xdf\x40\x7b\xaa\x18\xab\x29\x05\xac\x40\x8d\x7c\xa1\xcd"
+ "\x99\x0d\xda\x89\xec\x2c\x0f\x69\x1d\xa6\x89\xbb\x25\x3e\xfb\xca"
+ "\xe5\xd4\x5f\x75\xd7\xca\xcc\x03\xed\x2c\x91\xff\x1c\xe3\xb1\x0a"
+ "\x7d\x6d\x67\x71\x95\xed\xe8\xeb\x26\xd9\x57\xdd\x2f\xba\x5a\xd8"
+ "\x92\x8d\x6f\xd7\xf5\x81\xe4\xfe\x39\xf9\x40\x1a\xeb\x01\x0e\xbb"
+ "\x91\xdf\xc2\x58\x7d\x87\xb0\x79\xd1\xed\xf4\x9e\x65\x54\x2f\xc9"
+ "\x90\x9c\x97\xc5\x9c\xbe\x9b\xe6\xb2\x5a\x9d\x9e\x9c\xda\x8c\xb9"
+ "\xdd\x9d\x41\xf2\xb4\xe4\xb7\x5b\x88\xcf\x97\x34\x9f\x4b\x59\xba"
+ "\x9c\xe8\xb4\x77\x10\x47\x73\x3f\x68\xce\x2f\xa7\x39\x4f\xdf\xc5"
+ "\xbc\x47\x3e\x67\xf3\x39\x46\xe5\x05\x97\x43\xe3\xaf\x97\x75\x5e"
+ "\x79\x66\x1c\x95\x45\x73\x81\x64\x3d\xb4\xd6\xe4\xd8\x1f\x25\xbd"
+ "\x6e\x33\x8f\xb9\xd7\x25\xc3\x6e\xb2\x5d\x62\xa2\x39\x20\xe6\x0a"
+ "\xf0\x37\xd9\x44\xe5\x3c\x25\x04\xf3\x8c\xda\x39\x12\xe3\x9d\xa8"
+ "\xcf\x0b\xc4\x45\xf7\x9f\x1b\xa3\xb7\x99\x88\xa7\x89\xa6\xf7\x6f"
+ "\x3b\x3f\x86\x36\x7e\xcf\x98\x07\xd5\x59\x8b\xbb\x95\xc6\x62\x22"
+ "\xe1\x4d\x5f\x67\x10\xce\xec\x90\x38\x93\x70\x92\x8e\x37\x05\x6e"
+ "\x12\x76\xf8\x8f\x92\x7e\x6b\x86\x68\xe3\x10\xf1\x66\x7d\x47\x00"
+ "\x6f\x3e\x6a\x0b\xc2\x9b\x1d\xbc\x07\xf4\xfb\x00\x78\x73\xd9\xb8"
+ "\xbe\x78\x73\xd9\x4d\x7d\xf1\xe6\xb3\xdb\xfa\xe3\xcd\xaf\xe3\xcc"
+ "\x65\x4f\x0f\x84\x2f\xc1\xc7\x4c\x6c\x57\x9e\x4d\x1c\x1c\x57\x2e"
+ "\x2b\x1e\x3a\xae\x5c\xfe\x62\x5f\x5c\xb9\xac\xee\xff\xbb\xb8\x72"
+ "\xc5\x9d\x7d\x70\xa5\xe9\x5b\xe2\xca\x76\x81\x2b\xa3\xf9\xdf\xb0"
+ "\x26\x34\xfc\x51\xb5\x6a\x10\x5c\xb9\xea\x1b\xd6\xc2\xcf\x07\xc3"
+ "\x95\x2b\x9e\xef\x8b\x2b\x57\x1c\xed\x8b\x2b\x57\xac\x0e\xe0\x4a"
+ "\xed\xdb\x3f\x04\x57\xae\xd8\xf1\xcf\xc1\x95\x2b\x76\x08\x5c\x79"
+ "\x91\x70\xe5\xb3\xe9\xdf\x8c\x2b\x97\xd9\x07\xc6\x95\x88\x17\xb8"
+ "\x72\x99\x3d\x80\x2b\xcf\x7e\x03\xae\xfc\xd9\xbc\x21\xe0\xca\x68"
+ "\x81\x2b\x4d\x83\xe0\xca\x55\x80\x95\x36\x2f\xc4\xdc\xeb\x37\x37"
+ "\x34\x5c\x69\xf6\xe3\xca\x6f\x31\x3f\x86\x36\x7e\x3f\x1b\xf4\x8e"
+ "\x16\xe1\x4a\xd5\x2e\xe9\x4b\xc2\x95\x3c\x4a\xc3\x95\x99\x5e\x96"
+ "\xf3\x67\xe0\xc8\x33\xed\x42\x17\x43\xe8\xe2\xe2\x97\xfb\x14\xe1"
+ "\xa2\x79\xb6\x37\x00\x2f\xa7\xab\x46\xe0\x26\x71\x9f\x6a\x01\xe1"
+ "\xaa\x1a\xa4\xad\xf0\xd3\x9d\x02\x77\xfe\x59\xc3\x9d\x4b\x34\xdc"
+ "\xb9\xf4\xbf\x80\x3b\x7f\x42\x63\x99\xf1\xc4\x35\x83\x8e\x3b\x77"
+ "\x01\x77\x66\x08\xfa\x81\xce\x82\x25\xee\xfc\xf9\x87\x7a\xbb\x48"
+ "\xa6\xe9\xcc\x7a\x89\xc9\x76\x5d\xfe\x3a\x1e\x7d\x58\x94\xf7\x2b"
+ "\xc7\xaa\x0e\xe6\xc7\xa5\x4b\x02\xb8\x14\x65\x6d\x1b\x1c\x8f\x66"
+ "\x34\xfa\xf1\x68\x21\xf0\xe8\xa7\x41\x78\x14\x7c\xd3\x7f\x10\xce"
+ "\x03\x1e\xed\x16\x78\xf4\x77\x1a\x1e\x5d\xf9\xf9\x07\x4b\x80\x47"
+ "\x1f\xd6\xf1\xe8\xca\x68\x4f\x61\x8b\xcd\x53\xf4\xcd\x78\xb4\x5b"
+ "\xe0\x51\xdb\xff\x79\x3c\x7a\xa2\x1f\x1e\x05\xef\x4a\xbe\xd1\x07"
+ "\xc4\xa3\xfa\x7c\x14\x78\xb4\x20\x80\x47\x05\x5c\x57\x6d\x6d\x48"
+ "\x03\xdc\xd3\x6c\x82\x77\xf3\xe3\x51\x5b\x8d\xc4\xa3\x74\x17\x93"
+ "\xe4\x27\xeb\x81\x47\x31\xff\xf2\xeb\xd1\x6f\xac\x17\xb4\xd1\x44"
+ "\xf8\xf5\x00\xd6\x0c\xc1\xc8\x8f\x4f\x57\x61\xcd\x10\x8e\xe9\xc4"
+ "\x9a\x01\x1e\x5d\x7a\xc5\xc4\xc4\x7a\x29\x4a\x89\x13\x38\x66\x20"
+ "\x1f\x62\xba\xbe\xec\xa0\xf8\x74\xd5\x1f\xfb\xe2\xd3\x9f\x87\xf7"
+ "\xc5\xa7\xab\xde\x0a\xe0\x53\xed\x1b\xe1\x53\x8c\x19\xe0\xd3\x46"
+ "\x38\xf5\xef\xc3\xa7\xab\xce\xf8\xf1\xa9\x41\xc3\xa7\xab\xbe\x19"
+ "\x9f\x8a\xf3\xc1\x41\xf0\x69\x30\x6e\x18\x1c\x9f\xae\x3a\x13\xc0"
+ "\xa7\x3f\xff\xb5\x1f\x9f\x36\x0d\x86\x4f\x33\x9a\x06\xc6\xa7\x88"
+ "\x17\xf8\x34\xa3\xc9\x8f\x4f\x9b\x06\xc0\xa7\x0f\x07\xe3\xd3\xcc"
+ "\x97\x25\x3e\xad\xd1\x6c\x6c\xf4\xba\x1a\xba\x30\x3f\x68\xcd\x65"
+ "\x55\x08\x9c\xaa\x02\xa7\x92\x5f\x55\xf2\x2b\x43\x3a\xf0\x03\xe1"
+ "\x54\x89\x73\x5d\x8c\xf0\x2a\xad\xcd\xfc\x85\xe0\x77\xb1\x17\x01"
+ "\x26\x62\xef\xd5\xe1\x77\x20\x08\xbf\xa6\x6e\x36\x11\x6d\xd7\x67"
+ "\xae\xa8\xfa\x5c\xe9\xb4\x92\x0e\x6f\x9f\xb9\x32\xb4\xb1\xcc\xac"
+ "\x1e\x0c\xb7\x0e\xc6\xbb\x7f\x40\xbc\xfb\x13\xcc\xb0\xe5\x09\xe0"
+ "\xd7\x14\xe2\xdd\x0f\xf5\xe3\xdd\x0f\x7d\x9d\x77\xff\xe3\xf5\xf1"
+ "\xe8\x90\x78\xf7\x27\x69\x0c\x57\xef\xef\x8b\x47\x57\xbf\xdc\x17"
+ "\x8f\x3e\x77\x13\xb5\x4b\xe2\xf1\x43\x03\xf3\xee\x62\x9d\xaf\xbe"
+ "\xe0\xe7\xdd\x9b\xfa\xe2\xcf\x00\xef\x6e\xab\x1f\x1c\x8f\xae\x31"
+ "\xf7\xa1\x47\x97\x6a\x78\xf4\x19\x0d\x8f\x3e\x13\xc0\xa3\xa7\x3f"
+ "\xd2\xe9\xd1\xb5\x77\x9f\x6a\x0a\xc6\xa3\x6b\x96\xf8\xf1\x68\xf3"
+ "\xd7\xf1\xa8\x8e\x43\x09\x9f\x52\x39\x24\xcb\x3a\x0c\x3c\xfd\xe6"
+ "\x33\x36\x83\x94\xd5\xa6\x11\xec\xc2\xfb\xcb\x6a\xeb\x3b\xae\xb0"
+ "\xbc\x25\x84\x4f\x2b\x04\x3e\x35\x2a\x2c\x1d\xb8\x6f\x34\xe9\xfc"
+ "\x57\xd2\xd9\xfe\x46\xe9\x97\x89\xe4\x4b\xea\x26\xe9\xe3\x50\x97"
+ "\x33\xa1\xbf\xe2\x4c\xff\xe9\xb3\x1a\x4e\x25\xdf\xe5\x98\x73\xfb"
+ "\xae\x02\xa7\x6e\x1c\x80\x36\xdd\x02\x9c\x9a\x13\x44\x9b\x62\xed"
+ "\xff\xee\x99\xfe\x38\x75\xed\xa9\x06\x9a\x2b\x84\x53\xfb\xf0\xf1"
+ "\x87\xfe\x07\xf0\xf1\xb6\x49\x7d\x71\xa9\x6d\x71\x5f\x5c\x6a\x1b"
+ "\x11\xc0\xa5\xda\xb7\x7f\x08\x6d\x6a\xb3\xfc\x73\x68\x53\x9b\x25"
+ "\xc0\xc7\xdb\x7c\x7e\x5c\x7a\x66\x30\x5c\xba\xc6\x32\x30\x2e\x5d"
+ "\x63\x91\xb8\x74\x8d\xc5\x8f\x4b\xcf\x0c\xc0\xc7\xf7\xc1\xa5\xcf"
+ "\x7d\x2e\x71\xe9\x21\x49\x9b\x36\xe9\xb4\xe9\xa1\xff\x0b\xf9\xf8"
+ "\xe7\x5c\x43\xe5\xe3\x3f\xe8\x90\xf8\x93\xf0\x93\x8e\x43\x03\x7c"
+ "\xfc\xa1\xc1\xf9\xf8\x6f\xc0\xa1\x43\xa2\x45\x05\x0e\x5d\xf7\x79"
+ "\x5f\x1c\xba\xee\x5c\x5f\x1c\xba\xf1\x89\xfe\x38\xf4\xeb\xf8\x73"
+ "\xfd\xe4\x81\x70\xa7\xe4\xe3\x37\x86\x0e\x8e\x37\xd7\x27\x0f\x1d"
+ "\x6f\x66\xad\xee\x8b\x37\xd7\xef\xfe\xff\x07\xde\xdc\xa0\xf4\xc1"
+ "\x9b\xa6\x6f\x89\x37\xff\x5b\x78\xfa\x0d\xfd\xe4\x9f\x1b\xfa\xc9"
+ "\x3f\x37\x04\xc9\x3f\x37\xfc\x03\xe5\x9f\x1b\xfe\x49\xf2\xcf\x0d"
+ "\x29\x01\x1a\x74\xe3\xdd\xdf\x8c\x37\xd7\xa7\x0c\x8c\x37\x11\x2f"
+ "\xf0\xe6\xfa\x94\x00\xde\xfc\x26\x1a\x74\xd3\xb8\x21\xe0\xcd\xff"
+ "\xe1\x3c\xfd\xa6\xeb\xca\x3f\x07\xe2\xe9\x09\x6f\x0a\x7c\xd9\xd4"
+ "\x8f\xa7\x7f\x22\x98\xa7\x3f\x14\xe0\xe9\xe7\x4b\xbc\xe5\xf4\xda"
+ "\xfb\xf2\xf4\xff\x70\x3c\x9a\x7d\xbb\xc7\x2f\x0f\xfd\x57\xe0\xd1"
+ "\xec\x3b\xa9\x6f\x1e\xbf\x3c\x74\xcb\xaf\xf5\x76\x49\x9e\x7e\x17"
+ "\x93\xed\x1a\x80\xa7\x17\xfa\xc6\xd9\x5b\xfd\x3c\x7d\x53\x7f\x9e"
+ "\x7e\x4b\xfa\xe0\x38\x35\xfb\xe0\x80\x3c\x3d\xf1\xdf\x02\xa7\xda"
+ "\x04\x4e\xbd\xba\x37\x18\xa7\x6e\x7e\x57\xe0\xd4\x87\x74\x9c\x9a"
+ "\xdd\xe6\xc1\xda\xf4\x84\x7d\x33\x4e\xa5\x72\x02\x38\x35\xe3\xbf"
+ "\x07\xa7\x3a\xbe\x3d\x4e\x0d\xbe\x6f\xfa\x3b\xf4\xdd\x8f\x53\x05"
+ "\x8c\x73\x9e\x6e\x48\x23\x9c\x9a\xd1\x8f\xbf\x3f\x34\x30\x7f\x7f"
+ "\x8a\x19\x08\x3e\x3a\x7f\x4f\x63\x20\xf0\xcd\xff\x51\xfe\x3e\xe7"
+ "\x37\x7d\x71\x6b\x4e\x5b\x5f\xdc\x9a\xb3\x3f\x80\x5b\xb5\x6f\xff"
+ "\x10\xfe\x3e\xe7\xc8\x3f\x87\xbf\xcf\x39\x12\xc0\xad\x5b\xca\xbf"
+ "\x19\xb7\x66\x1f\x1e\x18\xb7\x22\x5e\xe0\xd6\xec\xc3\xd7\xc5\xad"
+ "\x0f\x05\xe3\xd6\xdc\x6d\x3a\x6e\x0d\xf0\xf7\x98\x1f\xb4\xfe\xb2"
+ "\xec\x7f\x3f\x7f\xff\xc3\x7f\x36\x7f\x9f\x5b\x30\x24\xfe\x7e\x2f"
+ "\xf0\x2c\x78\xf1\x2d\x1f\x82\xbf\xff\x91\xc6\xdf\x37\x57\xf7\xe3"
+ "\xef\xab\xbf\xc6\xdf\xe7\xfe\x48\xc3\xa9\x58\x53\x02\xa7\x3e\x73"
+ "\xe8\xef\xe7\xef\x1f\xa3\x31\xdc\xba\xb5\x2f\x4e\xdd\xba\xad\x2f"
+ "\x4e\xdd\x16\x49\xed\x92\x38\xbd\x7a\x60\xfe\x5e\xac\xf3\xad\xf5"
+ "\x7d\xf8\x7b\xb4\xef\xeb\xfc\x7d\xc1\xbb\x7d\x70\xea\xd2\x60\x9c"
+ "\xba\xd5\xd3\x87\x4e\x45\xbf\x08\xa7\xfe\xea\x53\x89\x53\x5f\xfb"
+ "\x34\x08\xa7\x3e\xfa\x9a\x86\x53\xf3\x6f\x3f\xb5\x38\x18\xa7\xe6"
+ "\xcd\xd6\x71\xaa\xc0\x97\x4b\x3d\x86\xfc\x94\xaf\xeb\x9d\x08\x7d"
+ "\x1f\xd2\x05\x42\xd9\x74\xbf\x8c\xca\x7c\xfd\xd3\x8c\x6f\xd6\x37"
+ "\x49\x19\x58\xdf\xc4\x99\xe5\x62\x75\xad\x76\xa1\x67\x52\x49\x7a"
+ "\x26\xdb\xd8\xa4\xca\x1e\x79\xcf\x5f\xd8\x49\x1c\xe4\x8e\xff\xd3"
+ "\x4f\x05\xf0\x2c\xe9\x64\xed\x23\x9d\xac\xab\x52\x07\x08\xe3\xfd"
+ "\xf5\x7b\xfd\x3a\xdd\x04\x7c\xf0\xdb\x4f\xfb\xe3\xd9\xfc\xb7\x1a"
+ "\x68\xfe\x2c\xc9\xe8\xc7\xf3\x57\xff\x0f\xe0\xf9\x0b\xc6\xf4\xc5"
+ "\xaf\x05\xf3\xfb\xe2\xd7\x7c\x5f\x00\xbf\x6a\xdf\xfe\x21\xb4\x6b"
+ "\x41\xf4\x3f\x87\x76\x2d\x88\x0e\xf0\xfc\x05\x5f\xf9\xf1\x6b\x63"
+ "\x10\x7e\xfd\x34\x18\xbf\xe6\x31\x81\x5f\x3f\xed\x8f\x5f\xf3\x98"
+ "\xc4\xaf\x79\xcc\x8f\x5f\x1b\xfb\xf1\xfc\x9f\xf6\xc7\xaf\xdb\xfe"
+ "\x5f\xf6\xbe\x3e\x2e\xaa\x2a\xff\xff\x30\x83\x86\x85\x32\xb8\xe0"
+ "\xa2\xa9\x8d\x4f\x85\xf9\x10\x1a\x10\x6e\x5a\x58\x58\x98\x28\xd8"
+ "\x6a\xe1\x33\x14\x16\x96\x0f\xa8\x68\xa8\x3c\xf9\xb8\x68\x8a\xa0"
+ "\x60\x58\xa0\xe8\xea\xae\x96\x18\x7e\x57\x77\xb1\xb4\xc6\xd4\x16"
+ "\x8d\x27\x5b\xdd\x45\xc3\x1c\x0d\x5d\x34\xb4\x51\x51\x10\x66\xe6"
+ "\xfe\x3e\xe7\x9e\x3b\x9c\xb9\x33\xf7\x0e\x73\xef\x20\xe2\x6f\xfd"
+ "\x63\x5e\xca\x7d\x38\xf7\xdc\xcf\xe7\x7d\xdf\xe7\xfd\xf9\xdc\x73"
+ "\x3e\xf7\x0c\xcb\xaf\x80\x05\xbe\x76\xcd\x6d\x3a\xe6\xaf\x68\x6d"
+ "\x31\xff\x52\xab\xfa\x47\x36\x63\x7e\xcc\xa9\x33\x09\xa7\x62\xce"
+ "\x32\xf1\x2a\x8d\xf9\x73\x45\x63\xfe\xa6\x78\x55\x92\x56\x65\x79"
+ "\x75\xd9\x19\x3e\xaf\x2e\x3b\xcb\xe7\xd5\x55\x53\x2c\x79\xd5\x9a"
+ "\x53\x97\x77\x16\xe2\x53\x12\xf3\xaf\x72\x15\xe7\xd2\xe5\x41\xd2"
+ "\xb9\x74\xc5\x02\x3e\x97\x2e\x4f\xf9\xdf\xe5\xd2\x95\xed\x78\x5c"
+ "\xaa\xb2\x93\x4b\x5b\x24\x0f\xb0\x32\x92\xcf\xa5\x2b\x33\xf8\x5c"
+ "\xba\x72\x24\xe5\x52\x6e\x5f\xb3\x70\xe9\xca\x88\x07\xc3\xa5\x2b"
+ "\x23\xa8\x56\x5d\x35\xac\x69\x2e\x5d\x1e\x22\xcc\xa5\xb0\x9d\xe5"
+ "\xd2\xe5\x21\x94\x4b\xcf\x37\xc1\xa5\x7f\xea\x21\x81\x4b\xf9\x79"
+ "\x00\x4b\x2e\x7d\xe0\x79\x80\x3f\xa9\x25\xe5\x01\x4c\x5c\x3a\xd6"
+ "\x3a\x0f\x80\xf9\x95\xcd\x03\x80\xbd\x4c\x1c\xc6\xe6\x01\x82\x08"
+ "\x97\x95\xea\x53\x78\x79\x80\xe6\xe7\xd6\x94\x41\x75\x8d\xf9\xd4"
+ "\x65\xc0\xad\x29\x7e\x2c\xb7\x36\xe6\x53\x3f\x2e\x36\xf5\x8b\xe4"
+ "\x01\xd6\x20\xd2\x2f\x81\x3c\xc0\x2b\x6c\x7b\x2b\x79\x79\x00\x33"
+ "\xae\x85\xb6\x12\xc4\x79\x36\x65\x0f\x2f\x0f\x70\x89\xf2\xec\x5d"
+ "\x3c\x47\x1d\x78\x90\xe5\xd9\x4e\xe6\x3c\xbb\xfa\x3c\xcb\xb3\xaf"
+ "\x98\x78\x36\x45\x57\x0b\xcf\x66\xad\x54\x9e\xc5\xeb\x08\x7e\x8e"
+ "\x78\x30\x3c\x5b\x20\x81\x67\xcd\x72\x03\x07\xc1\x1e\x8d\x3c\xcb"
+ "\xda\x7d\xcd\xa2\x92\xc9\x98\x67\x23\x2c\x72\x03\xb9\xc2\xb9\x81"
+ "\xe3\x0f\x22\x37\xb0\xe6\x14\x9f\x6f\x3f\x76\xe6\xf3\xed\x9a\x83"
+ "\x94\x6f\xb9\x7d\xcd\x92\x1b\x58\x53\xf6\x60\x72\x03\x6b\xca\x28"
+ "\xdf\x7e\x9c\xd7\x34\xdf\xa6\xec\x17\xe6\x5b\xd8\xce\xf2\x6d\xca"
+ "\x7e\x9b\x7c\xfb\x8a\x39\xdf\xae\xcd\x31\xf1\x2d\xcd\x0d\xe4\x72"
+ "\xb9\x81\x94\xa6\x73\x03\x15\x22\xb9\x81\x11\x0f\x3a\x37\xb0\x36"
+ "\x5b\x4a\x6e\xe0\xde\x26\x32\x6f\x7f\x09\x9e\xb7\x3f\x05\xf8\x37"
+ "\xec\x47\xb0\x41\xd3\xf3\xf6\xe3\x4d\xf3\x4f\x23\xb2\x38\x9e\xcd"
+ "\x12\xcc\x0d\x9c\xac\x12\xcf\x0d\x9c\x3c\x6d\x3e\xff\x74\xdd\x66"
+ "\xfe\x7b\xab\x75\x39\xa6\xf7\x56\x27\xff\x8d\x79\x36\x9d\xfd\xce"
+ "\xb6\x31\x23\x24\x8d\xd4\xca\x4e\xdf\x81\xfb\x29\x34\x8f\xff\x2b"
+ "\xa3\xf9\xbb\xac\x75\xf7\x1a\x73\x05\x65\x98\x6f\xb3\x90\x91\x89"
+ "\x6e\x8b\x6b\x75\xb3\xb9\x82\xb7\x30\xf6\xd2\xc7\x9b\xf3\xee\x37"
+ "\xe7\xcc\x79\x37\xb5\xb7\x89\x77\x0d\xc0\xbb\x87\x2f\x65\x91\xfc"
+ "\xeb\x44\x32\x37\x75\xcf\x44\xb3\xb9\xa9\x3f\x7e\xc7\xf1\xee\xfa"
+ "\x1e\x27\xb4\x70\xff\xb6\xe6\x4f\xc1\xf9\x7b\xcf\xd9\x3b\x07\x35"
+ "\x4b\x70\xee\x14\xc7\x4f\x82\xf3\xa7\xa0\xaf\xaa\x1c\xee\x59\x35"
+ "\xc0\x73\x9a\x63\x36\x7f\x2a\x7b\x31\x3c\xcf\xdc\xba\x12\x9b\xf3"
+ "\x50\x27\xd2\x79\xa8\x4c\xc6\xa8\x22\x3c\xbe\x19\x33\x43\xd2\xea"
+ "\x99\x68\x25\xe3\x31\xaa\x08\x5f\xbf\xa1\x01\xc6\x9d\x57\xc3\x95"
+ "\x24\xae\x1b\x95\x0f\xdc\xd3\x81\xd8\x7d\xfd\x64\x03\x8c\x35\x06"
+ "\x18\x6b\x8c\x19\xa3\xf2\xf5\x58\x9b\x6c\x1a\xb5\x3f\x1b\xe2\x3c"
+ "\xfd\x32\xf6\xfb\x85\x8f\xa7\x42\xac\xb7\x15\xc7\x79\x37\xe0\xd9"
+ "\x48\xf2\x56\xe0\xfe\x98\x78\xd4\xad\x0a\xee\xe3\x86\x6d\x2d\xa7"
+ "\xff\x8d\xf2\xa8\xe6\x8d\x93\x70\xcd\xb4\xb1\x25\x18\xbb\xe1\x74"
+ "\x4d\x01\xab\x99\x45\xe6\xca\xe2\xbe\x90\xfa\x88\x80\x85\x66\xc8"
+ "\x49\x98\xf7\x87\xcf\xeb\x69\xbb\xf9\xbc\x9e\x56\xc1\xe7\xf5\xb4"
+ "\x74\xca\xeb\xdc\x3e\xe0\x75\xf0\x1b\xab\xa3\x61\xec\x93\xa9\xa3"
+ "\xd3\x76\x99\x78\xdd\xc8\xf1\xfa\x16\x3b\x78\xdd\xa6\x8e\x36\xe3"
+ "\x25\x71\x5e\x4f\xdb\x45\x73\x12\xe9\x2b\x05\xe7\xc8\x9e\x33\xe7"
+ "\xf5\xd4\xfe\x2c\xaf\x9f\xb3\xe4\x75\xd8\xce\xf2\x7a\x6a\x7f\xd1"
+ "\xf5\x04\xe7\x2c\xdf\xa7\x6d\x98\xc1\xf2\x7a\x39\x37\x47\xb6\x4c"
+ "\xc2\x7a\x82\x72\xc2\xe9\x26\x2e\xc7\xf9\xaa\x07\x9b\x93\xd8\x10"
+ "\x2d\x25\x27\xc1\x72\x79\x35\xe1\x72\xcc\x8d\x26\x3e\xb7\x67\x3d"
+ "\x41\x53\x7c\x6e\xd2\xcd\x98\xcf\xc5\x74\x33\x9f\xcf\x37\xce\xe0"
+ "\xf3\xf9\xc6\x59\x7c\x3e\xff\x64\x06\x9f\xcf\x3f\x89\xb6\xe4\x73"
+ "\x6b\x2e\xdf\x78\x58\x88\xc7\x63\xde\xc2\x39\x8a\x4f\xbc\xc4\x39"
+ "\x7c\x63\x95\x74\x0e\xcf\xb8\xfc\x3f\xc7\xe1\x2a\x4b\x0e\xcf\x54"
+ "\x63\x0e\x32\xac\xb2\xe0\xf0\x0f\x38\x0e\xe7\x78\x64\xeb\x35\x4e"
+ "\x0b\x5b\x72\x78\x35\xdc\x47\x13\xf1\xb8\xfe\x57\x4b\x0e\xdf\xe4"
+ "\xc9\xe3\x70\x55\x13\x1c\xfe\x01\xc9\x83\xf0\xe6\xe5\x8a\xe4\x42"
+ "\xe0\x3e\x7a\xe7\x88\x68\x73\x93\xcd\xcc\xfb\xc3\xe7\xf0\x4d\xb3"
+ "\xf8\x1c\xbe\x29\x97\xcf\xe1\x9b\xc6\x53\x0e\xe7\xf6\x35\x8b\x36"
+ "\xdf\x34\xb3\xd9\xb5\xb9\x09\x1f\x36\x39\x7c\xd3\x4c\xaa\xcd\x3f"
+ "\x19\xd9\x34\x87\x6f\xd4\x09\x73\x38\x6c\x67\x39\x7c\xa3\x4e\x74"
+ "\x9d\x83\x15\x87\x67\xf5\x95\xc0\xe1\xfc\x5c\x88\x89\xc3\xb9\x5c"
+ "\xc8\x56\xb3\x5c\x88\x61\x19\xc9\x85\xe4\x5c\x23\xd8\xe8\xe0\x44"
+ "\x70\x0a\xf8\xf1\xda\xa2\xb0\x1d\xbb\xe5\xc8\xca\x83\x64\x79\x4b"
+ "\xc9\x83\xb0\xfc\x8d\xd7\x38\x4c\x00\xde\x2e\xb3\x73\x8d\x43\xb0"
+ "\x69\x8d\x43\x9a\xc8\x1a\x07\x8e\xcf\xa7\x3a\xc0\xe7\xec\x1a\x87"
+ "\xcd\x43\xf8\x39\xe6\xcd\xc3\x4c\x39\x66\xc2\xe7\x39\xa3\xf9\x7c"
+ "\x9e\x13\xd2\xb8\xe6\x01\x38\xbf\x34\x66\x83\xd5\x9a\x87\x46\x6e"
+ "\x67\xf3\xa0\x9b\x73\x34\x6f\x55\xa2\x46\x7e\x9f\x4c\xf9\xfd\x8a"
+ "\x53\xb6\x81\xc7\xed\x97\xcc\xb9\x7d\xf3\x31\x1e\xb7\xff\x9c\xc5"
+ "\x9f\x1f\x71\x29\xc6\x8c\xdb\x4d\x6b\x1e\x3e\x3d\x72\xa2\xa2\x09"
+ "\x6e\x87\xf3\xed\x5f\x23\xd6\xbc\xdc\x6e\x5a\xdf\x20\xc8\xed\xe6"
+ "\xeb\x1b\xcc\xe6\x3f\x60\x6e\x67\xbf\x71\xe1\x69\xc1\xed\x4b\xa2"
+ "\x15\x86\xa3\xf0\x3c\x00\xaf\xe3\x67\xc4\xc0\x00\xb7\xb3\xf6\xfe"
+ "\x54\x6f\xce\xed\x0d\xcb\x08\xb7\x7f\x76\xcd\x71\x6e\x6f\xd4\xc3"
+ "\xe6\xdc\xfe\x1a\xe6\xf6\xcf\xee\x91\xf5\x17\xc9\xf6\xad\xbf\xb0"
+ "\x98\x9f\xf1\x99\x1d\xf9\x17\x9b\x1c\x2f\xd0\x2f\x3e\xc7\x67\x8f"
+ "\xe5\x73\x7c\xf6\x0a\x3e\xc7\x67\x0f\xa1\x1c\xcf\xed\x6b\x16\x9d"
+ "\x9e\x1d\xf6\x60\xf2\x2f\xd9\x61\x94\xe3\x73\x06\x34\xbd\xf6\x62"
+ "\x73\x91\xf0\xdc\x0c\xd8\xce\x72\xfc\xe6\x22\x9b\x6b\x2f\x78\xf9"
+ "\xee\x2d\xdd\x04\xd7\x5e\x94\xb5\xdc\xdc\x0c\x73\xac\x58\xe6\x5f"
+ "\xe4\xe7\xbe\xb7\x74\x95\x9a\x7f\xc1\x6b\x2f\x96\x9c\x31\x5b\x7b"
+ "\x51\xd1\xf4\xda\x8b\xf8\xf1\x76\xe6\x5f\x6c\xcc\xcd\x38\x19\x66"
+ "\x3e\xdf\x6d\x6b\x67\x3e\xbf\x6f\xed\xd6\xc8\xef\x6f\x62\x7e\xff"
+ "\xf3\x20\x3e\xbf\xff\xd9\x07\xf7\x53\x68\x2d\xc6\x57\xbc\xf7\x8a"
+ "\x5b\x17\xf1\xe7\x6a\x58\xe4\x5f\xde\xc4\xd8\xdb\x7e\x91\xc7\xef"
+ "\x3f\x9b\xf3\xfb\xd6\x1d\x42\xda\x1d\xe7\xbd\xd9\x39\xc5\x53\xcd"
+ "\xd6\xb4\x8d\x31\xcd\x7f\xcb\xcd\x3b\x11\x0e\xf7\xaf\x15\x99\xeb"
+ "\x36\x95\xcc\x75\x63\xe7\xb6\xe1\x3c\x38\xb4\xf5\xe5\xd4\x18\x45"
+ "\x62\x04\x63\xc4\x73\xdd\x2c\xe7\xb9\xe1\xb9\x6f\x78\xae\x5b\x71"
+ "\x74\x9a\xe8\x3c\x37\x8c\x4d\xb1\xb9\x6e\xd0\x6f\x0f\x96\xeb\x2f"
+ "\x72\x5c\xcf\xcd\x75\xcb\x5e\x48\xe7\xba\xf1\xb8\x5e\x60\xfe\xf0"
+ "\xc1\x9f\x93\x85\x75\x7c\x12\xe5\xfa\x7a\xac\xe3\x5f\xb4\xc8\xc5"
+ "\xb0\x3e\xc8\xad\x6a\xd1\x5c\x0c\xcb\xf5\xdb\xce\x97\x60\x1c\x4f"
+ "\x8e\x11\xc8\xc5\x58\xcf\x71\x6e\xb9\x5c\xcc\x76\x3f\x3e\xc7\x6f"
+ "\x8f\xe6\x73\xfc\xf6\x6e\x94\xe3\xb9\x7d\xcd\xc2\xf1\xdb\x7d\x1f"
+ "\x4c\x2e\x66\xbb\x2f\xcd\xc5\xfc\xd9\x5d\x70\xfe\x1d\x2f\xc7\xbe"
+ "\x75\x8f\x70\x8e\x7d\x2b\x37\xff\x6e\xeb\x1e\xd1\x35\x21\x56\xef"
+ "\x34\xff\x7c\x87\xe4\xd8\x65\xac\x09\xa9\x68\x6d\xb9\x98\x3f\x5b"
+ "\x7d\x6f\xad\xa9\x5c\x0c\x3b\xb7\xf9\x0c\x9e\x1f\x22\x6d\x4d\x48"
+ "\x53\xdc\xde\xa8\xdd\x6d\xbc\xc3\xe4\x73\xfb\x8e\x3b\x7c\x6e\xdf"
+ "\x71\x8f\xcf\xed\xbb\x9d\xf8\xdc\xbe\x1b\x59\x72\xbb\x35\xaf\xef"
+ "\x1c\x29\xc4\xe9\x31\x6f\xe2\x5c\xcc\xae\x7c\x71\x3e\xdf\x19\x2b"
+ "\x9d\xcf\xff\x92\xf0\x3f\xcd\xe7\x2a\x4b\x3e\xff\x4b\x41\x8b\xe6"
+ "\x65\x58\x3e\xff\x6b\x1e\x8f\xcf\x55\x4d\xf0\x79\x8b\xe5\x65\x76"
+ "\xb5\xe1\xf3\xf9\xae\x00\x3e\x9f\xff\xf5\x3a\xe5\x73\x6e\x5f\xb3"
+ "\xe4\x65\x76\x39\x3f\x98\xbc\xcc\x2e\x67\xaa\xd9\x77\x5d\x6c\x9a"
+ "\xcf\x77\xc6\x0b\xf3\x39\x6c\x67\xf9\x7c\x67\xbc\xe8\x7c\x6a\x2b"
+ "\x3e\xdf\x7d\x44\x02\x9f\x0b\xce\x51\x69\x1d\x79\x99\xdd\x1a\xa9"
+ "\x79\x19\xb1\x75\x2a\x98\xdf\xe9\xfc\x14\xb3\x75\x2a\x81\xa6\x75"
+ "\x2a\xc9\xfc\xf9\x29\xcd\xce\xed\x9f\x9f\xe2\x73\xfb\xe7\x67\xf8"
+ "\xdc\xbe\xf7\x26\x9f\xdb\xf7\xea\x4c\xfd\x24\x79\x99\x65\x56\xeb"
+ "\x56\xf8\x3c\xff\x85\x9f\xe6\xcd\x4a\x24\xc4\xf5\xd0\xd6\x36\x71"
+ "\x9e\xff\x62\xb2\x18\xcf\xe3\xf9\x2a\x5f\x4c\x8d\x16\xe0\xf9\x3d"
+ "\xd3\xff\x7f\xe0\x79\xb1\x79\x28\x6c\x1c\x04\x1c\x8f\xf9\x9e\xe5"
+ "\x77\x8e\xeb\x31\xcf\x1b\xbe\x16\xca\xd1\xec\xc9\xbd\x5f\x3c\x2f"
+ "\x9e\xa3\xc9\xcb\x29\x99\xcc\xf1\xbc\x3d\x6b\x68\x8e\xf0\x73\x34"
+ "\xd9\x1f\xdc\xef\x1c\x4d\xde\x1d\x3e\xdf\xef\xf5\xe6\xf3\x7d\xde"
+ "\x79\xca\xf7\xdc\xbe\x66\xd1\xef\x79\x35\x0f\x26\x47\x93\x57\x43"
+ "\xf9\x7e\xef\xa9\xa6\xf9\xfe\x8b\x28\x61\xbe\xff\x82\xab\xcd\xf6"
+ "\x45\x94\xfd\x7c\xff\x65\x23\xdf\x5b\xaf\x9f\x49\x96\x3f\x47\x66"
+ "\xf8\x83\xce\xd1\x7c\x29\xca\xff\xb6\xea\x63\xc8\xcf\xd1\x70\x6b"
+ "\x12\xdf\x11\xae\x8f\x71\xc2\xc6\x1c\x99\x13\x45\xe6\x5c\x9f\x7f"
+ "\x98\x3f\x17\x31\xff\x88\x69\x2e\xe2\x89\x12\xcc\xf5\xfb\xaf\xf2"
+ "\xb9\x7e\x7f\x95\x58\x8e\xe6\xa0\xd1\x7c\x4e\xe2\xbe\x6e\xfc\x1c"
+ "\x4d\x2e\x3f\x47\x33\x06\x63\x6f\xff\x66\x71\xae\xdf\x17\xcc\x9f"
+ "\x03\x4e\xd6\x28\xee\x9e\xca\xcd\x01\x9f\x6a\x36\x07\xfc\x8d\xed"
+ "\x1c\xd7\xff\xdf\xf4\xc2\x32\x3d\x92\x32\x0f\xd1\xf1\xb9\xde\x29"
+ "\x82\x73\x10\xd9\x31\xc0\xc6\x3c\xc4\x69\x67\x55\x78\x4e\x73\xdc"
+ "\x96\x85\x66\xf3\x10\x6d\xd4\x33\xe6\xf1\xff\xd4\x18\x51\xfe\xbf"
+ "\xc7\x50\xfe\x37\xbe\x40\xf3\x36\x46\xac\xf3\x59\xbf\xfc\x5f\xee"
+ "\xfd\xca\xdb\x08\xe5\x49\x34\xaf\x60\xfe\xff\x5b\x26\xd1\xf9\xd1"
+ "\xad\x2c\x6f\xf3\xb7\xeb\x7c\xde\xdf\xaf\xe6\xf3\xfe\xdf\xce\x50"
+ "\xde\xe7\xf6\x35\xcb\x5c\xf4\xbf\x55\x3f\x18\x9d\xff\xb7\x6a\x9a"
+ "\xb7\xd9\x7f\xa2\x69\xde\xdf\x17\x26\xcc\xfb\xfb\xc2\x08\xef\xef"
+ "\x0b\xb3\x99\xb7\xe1\xcd\x8d\x3c\x90\xe7\x70\xde\xc6\xa4\xf3\x1f"
+ "\xf8\xba\x9e\x03\x7b\xa4\xe4\x6d\x1a\xd7\xa4\x3b\x94\xb7\x11\xe6"
+ "\x7b\x93\xb6\x3f\x61\xe3\x9d\x2b\x9f\xef\xff\x9e\xc7\xe7\xfb\xbf"
+ "\xef\xe3\xf3\xfd\x57\xc5\x7c\xbe\xff\xaa\x48\x28\x6f\xc3\xe7\xfa"
+ "\x7f\x08\xf2\x7c\xcc\x18\x9c\xb7\xf9\x2a\x5e\x9c\xe3\xff\xd1\x5f"
+ "\x3a\xc7\x17\x8c\x7c\xc4\xf1\x16\x1c\xaf\xb2\xe4\xf8\x82\x15\x2d"
+ "\xaa\xf1\x59\x8e\x3f\xb8\x88\xc7\xf1\xcd\x98\xcb\xb1\x67\x3d\x89"
+ "\xb8\xb6\x3f\x68\x31\xff\xfd\x2b\x8b\xf9\xef\x07\xcd\xe6\xbf\x7f"
+ "\xe5\xdc\x7c\x1c\x7f\xb0\xf9\xe7\xbf\xdb\xc5\xf1\x07\xcd\xe6\xbf"
+ "\x7f\x95\xd7\x34\xc7\xff\xc3\x57\x98\xe3\x61\x3b\xcb\xf1\xff\xf0"
+ "\xb5\xa9\xed\x79\x1c\xff\x75\xfa\xfd\xc8\xe5\x3c\x98\xf5\x46\x5f"
+ "\xa7\x49\xc9\xe7\xd8\xaa\x3b\x22\x9a\xcf\x09\x30\xe5\x73\x62\x44"
+ "\xf2\x39\xcd\xc5\xf9\x87\xb6\xf1\x39\xff\xd0\x4e\x3e\xe7\x6b\xce"
+ "\xf0\x39\x5f\x73\x9a\x9f\xcf\x99\x67\x95\xcf\xe1\xf3\xff\xe1\x36"
+ "\x9a\x31\xe6\xf9\x9c\x5c\xb3\x7c\x8e\x66\xa5\x38\xff\x1f\x16\xe5"
+ "\xff\xbb\x2c\xff\x47\x08\xf0\xff\x37\xff\x23\xfc\x1f\xe1\x00\xff"
+ "\x7f\xf3\x00\xf8\xff\xdb\xa5\x24\xc7\x63\x67\x9d\x94\x83\xd2\x73"
+ "\x3c\x8e\x8d\x03\xdf\x9e\xe5\x8f\x03\x1a\x57\xfe\x38\xf0\xed\x11"
+ "\x3a\x0e\x70\xfb\x9a\x65\x1c\xf8\xb6\xfc\xc1\x8c\x03\xdf\x96\xd3"
+ "\x71\x40\x73\xa0\xe9\x71\xe0\xb0\xc8\x38\x70\x98\x1b\x07\x0e\x4b"
+ "\x18\x07\x8e\xec\x14\xcf\xf1\xc4\xc8\xcf\xf1\x0c\x79\xd0\xeb\xa0"
+ "\x8e\xec\x90\x94\xe3\xd9\x34\x3a\xa6\x08\xd7\x48\xb9\x88\x14\x4b"
+ "\x22\x4d\x39\x1e\x8d\x45\x8e\x47\x63\x95\xe3\x59\x74\x91\xe3\xff"
+ "\x10\x6e\xbd\xe9\x18\x07\x6a\xa4\xb0\xdf\x9f\xfe\x6e\x1b\x7f\xde"
+ "\xfc\x77\x2c\xff\xd3\xfa\x7d\xdf\x0f\xc2\xfd\x22\xe3\x8f\xc6\x46"
+ "\x0d\xd4\xef\x6e\xf2\x72\x3a\x21\x42\x35\x52\x8e\xf3\xe6\xdd\xf0"
+ "\xd7\x9b\x1e\xed\xca\xe3\xfb\x31\x64\xbd\xe9\xe7\x42\xef\x69\x1b"
+ "\x6b\xf2\x1f\x1b\xc0\xd6\xe4\x6f\xac\xe5\x77\x34\xc2\xae\x5a\xd2"
+ "\x53\xb9\x5a\xd2\x3f\x3f\x80\x5a\xd2\xf6\xd6\xe4\xff\xd9\xb2\x7e"
+ "\xdf\xb1\x13\xa5\x45\x1a\x54\x82\x31\x32\xd9\xb2\xf6\xa9\x46\x78"
+ "\xed\xbe\x82\x5b\xbb\x3f\xfb\xfe\xd4\x41\xc1\xfd\x61\xc7\xfc\x8e"
+ "\x1b\xb5\x79\x89\x3a\xb6\x3f\xf8\x5b\xdf\xe0\xe7\xd1\x45\x80\x55"
+ "\x23\xe6\xd3\x79\x98\x4f\x8f\x27\xb3\xc7\x5e\x04\x2c\x74\x54\xab"
+ "\x31\x8e\x53\x8d\xc8\x35\x66\x21\xe6\xd6\xe3\xec\xbc\x2f\x90\x11"
+ "\xc0\xad\xe4\xb8\x84\x8b\x8c\xc1\xd0\xd1\x5b\x0d\xfd\x7f\x6c\xef"
+ "\xec\xb2\x36\x25\xda\x1a\x78\x2e\xae\xb1\xdf\x73\x2d\xd5\xd7\x6a"
+ "\xb0\x2f\xbe\x99\x5d\xe6\xcc\x00\xff\x6e\x7d\x0f\xb9\x48\x7b\x4e"
+ "\x8f\x87\xb0\x7a\x06\x8f\x7b\x1d\x37\x56\xe3\x3a\x20\x26\x6d\x65"
+ "\xfc\x8d\xe6\xb7\x72\xc0\x3e\x46\x86\x8c\x7d\xd3\x66\x10\xde\x80"
+ "\xeb\xc5\x81\x2d\xd9\x39\xb6\x98\x37\xd8\x6f\x58\x01\x6f\x6c\xb9"
+ "\x45\xdf\x63\xe3\xf6\xb1\x8d\x48\x1e\xe5\x7b\x3a\xff\x45\x2b\xc6"
+ "\xad\x47\x7b\x0b\x73\xeb\xd1\xde\x84\x5b\x8f\xf6\x6e\xe4\x56\xad"
+ "\x40\x1e\x85\x37\x8f\xfd\x7b\x6e\xfe\x8b\xc6\x42\x63\x6b\x1e\xc2"
+ "\xfa\x28\xdf\x4b\x9a\xff\xc2\xf2\xe9\x4c\xc2\xa7\x98\xaf\x4c\x9c"
+ "\x4a\xf3\x28\x1a\xd1\x3c\x4a\x53\x9c\x2a\x69\x0d\x3f\xcb\xa9\xff"
+ "\xbc\xc3\xe7\xd4\x7f\xde\xe3\x73\xea\x0f\x8b\x2c\x39\xd5\x9a\x4f"
+ "\x0b\x87\x08\x71\x29\xa9\x8f\xf2\x83\xb7\x38\x8f\x16\x46\x89\xf1"
+ "\x28\x3b\x3f\x7d\xaa\xd9\xfc\xf4\x46\x1e\x3d\xb1\x80\xcf\xa3\x85"
+ "\xbb\xec\xe5\x51\xf6\xdb\x26\x3f\xb7\xc0\xb7\x4d\x64\xf3\x68\x8c"
+ "\x05\x8f\x9e\x74\xa7\x3c\x6a\xf9\x7d\x93\x26\x78\xf4\x83\xfb\x53"
+ "\x03\x85\xc7\xa3\x46\x1d\xdb\x1f\xf5\x6c\xb6\xaf\x99\x7c\x1e\x3d"
+ "\x59\x28\xce\xa3\x27\xa7\x53\x1e\x25\xc7\xdd\x5f\x1e\x3d\x99\xc1"
+ "\xe3\xd1\x0f\xcc\x78\xf4\x57\x1a\x43\xe0\x39\x16\x8d\x3c\x3a\xcb"
+ "\x8c\x47\x3f\x68\x8a\x47\x4f\x66\x60\x1b\x11\x8d\xfa\xc3\x84\xa6"
+ "\x79\xb4\x70\xa6\x30\x8f\xc2\x76\x96\x47\x0b\x67\x52\x1e\x15\xd0"
+ "\xa8\x3c\x1e\x2d\x1a\x26\x81\x47\x5b\x79\x6d\x94\xa2\xa1\x92\x72"
+ "\x15\x74\x4d\xa7\x75\x8d\xd4\x29\xe6\x6b\x82\x0a\x2c\xbe\x7b\x52"
+ "\x60\xf5\xdd\x93\x45\xa6\x35\x9e\xc1\x1c\xaf\xbe\xe1\x00\xaf\xb2"
+ "\x6b\x3c\x8b\x47\xf3\xe7\x9e\x14\x8f\x35\xcd\x3d\x21\xbc\x5a\x76"
+ "\xd9\xd4\x2f\xfa\xdd\x93\x02\x1b\x35\x52\x8b\xb7\xf1\x6a\xa3\x04"
+ "\x9b\xd7\x46\x29\xcb\x14\xaf\x91\x5a\x5c\xc8\xab\x8d\x72\x72\x57"
+ "\xe3\x77\x4f\x2c\x6b\xa4\x52\x8e\x2d\x39\xcb\x72\x6c\x63\x0d\xaa"
+ "\x12\xd7\xc6\x1a\xa9\x4d\xac\x0b\xc2\xed\xec\xbd\x14\x7d\xff\x39"
+ "\x56\x23\x81\x63\x79\xdf\x3d\xb1\xac\x31\x55\x9a\x50\x5a\x58\x80"
+ "\x4a\x22\x0a\x04\x6a\xa3\x16\x3c\xd0\x6f\x9f\xe0\x7e\x09\x73\x6d"
+ "\x99\x13\x9f\x6b\xcb\x7c\xd9\x63\xcf\x0b\x71\x6d\xe9\x29\xca\xb5"
+ "\xe4\xb8\x84\xf3\x16\x5c\x5b\x21\xc2\xb5\x30\xae\x6e\xbd\x22\x95"
+ "\x6b\x71\xba\x18\xb8\x72\x19\xc7\xb5\xd7\x9a\x9b\x6b\xcb\x10\xe5"
+ "\xda\xb2\xe3\x4d\x7f\x63\xaa\xb8\x4c\x78\x5d\x4e\x71\x19\xe1\xda"
+ "\xe2\x32\x9b\xdf\x98\xe2\xcd\xf9\x38\x75\xc0\xf4\x8d\x29\x9a\x0f"
+ "\x28\xe0\xf2\x01\x0f\xf3\x37\x51\x4e\xed\x97\x9a\x0f\xf8\x01\x62"
+ "\x77\xbc\xee\x72\x09\xfe\xe6\xd4\x64\xfc\x4d\x94\x7c\x8b\x7c\x40"
+ "\xbe\x75\x3e\x60\x82\x6d\x8e\x95\x94\x0f\x60\xd7\x5d\xfe\xb8\x8f"
+ "\xcf\xb1\x3f\x1e\xe0\x73\xec\xbf\x47\x9b\xd6\x59\xe2\xfe\x88\xd7"
+ "\x4c\xfd\x97\x53\x63\x3e\xa0\x82\xcf\xad\x34\x1f\x70\xc6\x20\xce"
+ "\xb1\xff\xe2\xe7\x7f\xdf\xd8\xc5\x5b\x67\xf9\xf9\x25\xf3\x3a\xd4"
+ "\xa6\xfa\x53\xa7\x47\x9e\x38\x6d\xce\xb1\xff\x8a\x79\x98\xea\x50"
+ "\x37\xd6\x9a\x6a\x62\x2e\xb7\x75\x1d\xea\xd3\x97\x4b\x0b\xf3\x11"
+ "\x5e\xdb\xc6\xf2\x2d\x2f\x37\x90\xff\x60\x72\x03\x85\xf9\x22\xb9"
+ "\x81\x33\x33\xf8\x3c\x7b\x26\x9b\x3d\xf6\xac\x10\xcf\x9e\x19\x42"
+ "\x79\x96\x1c\x97\x70\xd6\x82\x67\xcb\x9b\x53\xd3\x9e\x89\xbe\xbf"
+ "\xb9\x81\x33\xd1\x34\x37\xf0\x6f\x3b\xd6\x3f\xfe\xcb\x57\x98\x67"
+ "\xff\xc5\xe5\x5d\xff\x45\xf3\xae\xe5\x02\xdf\x4b\xe1\xf1\xec\x7f"
+ "\xdc\x4d\xeb\x1f\x59\x4d\x5b\x61\xd2\xb4\xf9\x0f\xe1\xf7\x52\xfe"
+ "\xa3\x92\x9a\x1b\xc0\xeb\xdc\x31\xb7\x62\xee\x32\xf1\x2b\xcd\x0d"
+ "\xe4\x8b\xe7\x06\x9a\xe0\x57\xe9\xdf\xee\x2b\x77\xe7\xf3\x6b\xb9"
+ "\x27\x9f\x5f\x7f\xda\x66\xc9\xaf\xd6\xdc\x5a\x3e\x5e\x88\x57\x49"
+ "\x6e\xe0\xa7\x30\x71\x4e\x2d\x4f\x16\xe3\x54\xb6\xa6\xdf\x25\x3a"
+ "\x47\x9a\x72\xea\xd9\x1c\x3e\xa7\x96\x1f\xb3\x97\x53\x1f\xc8\xf7"
+ "\x52\x64\x73\x6a\xb4\x05\xa7\x9e\x1b\x42\x39\xd5\xf2\x9b\x29\x4d"
+ "\x70\xea\xfd\xca\x13\x98\x73\x2a\x4f\xbb\x9e\x3b\xcc\xe7\xd4\x73"
+ "\x3a\x71\x4e\x3d\xb7\x8e\x72\x2a\x39\xee\xfe\x72\xea\xb9\x43\xf7"
+ "\x37\x4f\x70\xee\x10\xd5\xae\x3f\x2d\x6d\x9a\x53\xcb\x53\x84\x39"
+ "\xb5\x3c\x85\x70\x6a\x79\x8a\xfd\x6b\xca\x2b\xa6\x4b\xe0\xd4\x56"
+ "\xfe\x2d\x95\x8a\x28\xc9\x79\x02\x9c\x6f\xc5\x5c\x5a\xe1\x58\xed"
+ "\x90\x38\x53\xed\x90\x20\x8e\x63\x5f\x73\x94\x63\xcf\x2f\xe0\xcf"
+ "\x69\x38\xbf\xc8\x34\xa7\x81\x70\xec\xc5\xce\xfc\xef\xa3\x5a\xd7"
+ "\x0a\xe1\xd7\x50\x3d\x7f\xa2\x31\x4f\x80\x39\x37\xc8\x3c\x4f\xa0"
+ "\x3d\x21\xce\xb7\xe7\x75\xbc\x3c\xc1\xf7\xc2\x7c\x7b\x97\xc7\xb7"
+ "\x17\xda\xb3\x7c\xdb\x58\x43\xf5\x67\x5f\x53\x0d\xd5\x26\x35\x2c"
+ "\x8f\x6f\x23\x5a\x86\x6f\x0b\xec\xe7\x5b\xfe\xb7\x54\x2c\xeb\xa5"
+ "\x5e\xd8\x57\x7a\x0c\xf8\x96\xad\xd7\x61\x59\x33\xd5\xbe\x7a\x1d"
+ "\xf7\xab\x66\x2a\xee\x97\x30\xef\x6a\xfd\xf8\xbc\xab\x8d\x66\x8f"
+ "\x15\xe4\x5d\x6d\x1b\xca\xbb\xe4\x38\xbb\x79\x57\x56\xce\x40\xeb"
+ "\x7b\x7f\x73\x06\x5a\x5f\xca\xbb\xda\x7b\x4d\xf3\xee\xf9\x3a\x61"
+ "\xde\x3d\x5f\x47\x78\xf7\x7c\x9d\x4d\xde\xe5\xcd\x21\xb8\x78\x55"
+ "\xb0\x96\x47\xc5\xc3\xfe\x9d\x95\x8b\x55\x72\x72\x06\xc0\xc1\x8a"
+ "\x78\x5c\xc3\x29\x02\xcf\x21\x68\x3a\x67\xd0\x14\xdf\x4a\xcf\x19"
+ "\x5c\xba\xcc\xe7\xdb\x4b\x57\xf9\x7c\x7b\x25\x13\xf7\xcb\x66\xce"
+ "\x80\xe5\x80\x5f\xfc\x1a\x73\x06\x5a\x3e\xcf\xd2\x9c\xc1\x95\x11"
+ "\xe2\xef\xbe\x7e\x89\xe0\xe9\xdb\xd7\x2c\x6a\x56\x4f\xa5\x7c\x7b"
+ "\xb2\xc4\x34\x67\xac\x32\xfd\x44\x98\x39\xdf\xfe\xb2\xc3\xaa\x66"
+ "\xf5\xb8\x66\xac\x59\x3d\xae\x99\x6b\x56\x8f\xe7\xd7\xac\xfe\xf4"
+ "\x2e\x9d\x47\x26\xbd\x66\xf5\xe5\x01\x2c\x07\x63\x0c\xe1\xba\xd5"
+ "\xf6\xe4\x11\xee\xf3\xb7\x56\x78\xdc\xcb\xcb\x23\x5c\xde\xc7\xe7"
+ "\xde\xcb\x95\xe2\xdc\x7b\x79\x29\xe5\x5e\x72\xdc\xfd\xd5\xbc\x97"
+ "\xf3\xef\x6f\x1e\xe1\x72\x3e\xcd\x23\x5c\x59\x20\xc8\xbd\xbc\x77"
+ "\x63\xbf\x44\x0b\xbf\x1b\x83\xed\x2c\xf7\xfe\x12\x2d\x9a\x47\xb0"
+ "\x9a\xbf\xf5\xdf\x09\xe4\xdd\x18\xa7\x79\xb5\x12\xf2\x08\xad\x6e"
+ "\x8e\xc1\x7f\xc3\xe5\xe4\x11\x30\xdf\x62\x3e\x33\x71\xae\x3d\x79"
+ "\x84\xe6\xd7\xb8\x55\x13\xf8\x9c\x5b\x35\x85\xcf\xb9\xbf\x1a\x2c"
+ "\x39\xd7\x9a\x6f\xab\x72\x84\xb8\x96\xe4\x11\x7e\xdd\x23\xce\xb3"
+ "\x55\x85\xa2\x3c\x6b\x31\x37\x97\xf2\xec\xd5\x7b\x7c\x9e\xbd\xea"
+ "\x2a\x8b\x67\xed\xfd\x06\x4b\xab\xe2\xd9\x08\x0b\x9e\xbd\x96\x49"
+ "\x79\xd6\xf2\x3b\x2c\x4d\xf0\xec\x7d\xfa\x0e\x8b\xb8\xc6\xfd\xb5"
+ "\x33\x9f\x67\x7f\x0d\x11\xe7\xd9\x6b\x57\x29\xcf\x92\xe3\xee\x2f"
+ "\xcf\xfe\xea\x75\x7f\x73\x0b\xbf\x7a\x51\x8d\xfb\xeb\xf9\xa6\x79"
+ "\xb6\xaa\x4c\x98\x67\xab\xb8\xf7\x62\x55\x65\xa2\x1a\xd7\x8a\x67"
+ "\xab\x8f\x48\xe0\xd9\x56\x3e\x07\xa1\x5a\x23\x27\xb7\xc0\xf2\xab"
+ "\xd6\x62\xbd\xc4\x59\xf3\xf5\x12\x66\xb9\x85\x20\x53\x6e\x81\xff"
+ "\x7d\x96\x38\x53\xfe\x36\x90\xe3\xdd\x57\x1c\xe5\xdd\xeb\xa7\x6a"
+ "\x1b\x79\x77\x1e\xf0\xee\x75\x76\x7d\x44\x6d\x23\xef\xde\x5c\x6d"
+ "\xea\x17\xfd\x3e\x8b\x48\x6e\xe1\x0f\xb8\xbd\x1b\x7d\x1a\x73\x0b"
+ "\x98\x87\x03\xcd\x73\x0b\x37\x87\x88\x73\xf0\x8d\x10\x5e\x6e\xe1"
+ "\x3b\x61\x0e\xae\xe1\x71\xf0\x6f\x09\x2c\x07\xff\xc1\xc4\xc1\x37"
+ "\xd2\xee\x42\x6c\x79\x77\x95\x34\x0e\xae\x61\x39\x38\xf8\xc1\x70"
+ "\xf0\xfe\x66\xe0\x60\xd6\xee\xba\x1e\xa5\x1a\xe0\xe0\xc9\x98\x83"
+ "\x83\xed\xcb\x37\xb4\xd0\x37\x5a\x70\xbf\x84\xb9\x58\xb7\x93\xcf"
+ "\xc5\xba\x72\xf6\x58\x41\x2e\xd6\x2d\xa0\x5c\x4c\x8e\xbb\xbf\xf9"
+ "\x06\xdd\x8e\xfb\x9b\x6f\xd0\xed\xa0\x5c\x7c\x73\x46\xd3\x5c\x7c"
+ "\x63\x9c\x30\x17\xc3\x76\x96\x8b\x6f\x8c\xb3\xc9\xc5\x7f\x30\xe7"
+ "\xe2\x5b\x8d\x9a\x97\x97\x6f\xd0\x3e\xec\xdf\x6e\xb9\x25\xaa\x7f"
+ "\xd5\xdd\x51\xf2\x25\xa7\x5b\xfb\x4a\xb3\x11\xba\xbd\x0c\x25\x97"
+ "\xea\xff\x80\x60\x1b\xd8\xef\xd6\xd9\x52\xaf\x00\x64\xdc\xf0\x7c"
+ "\x04\xe6\xe3\x8d\xf8\x07\x1a\x37\x4d\xc1\x3d\x5b\xac\x8d\x6f\xb1"
+ "\xf3\x5d\xf1\x76\xcc\xbd\x5b\xcd\xf6\x0b\x5d\x8b\x49\x1b\xac\x25"
+ "\xe7\xdd\xf6\x25\xeb\x6e\x06\x57\x9a\xfe\xc6\xd8\xd4\x3a\xdd\x0e"
+ "\x60\xd2\x07\x57\xe8\xdc\x07\x57\x08\x9d\xdf\x53\x85\x5c\x3a\x2c"
+ "\x65\x98\x2d\x9b\x98\x9a\xdb\x4f\xf7\xd1\xde\x5e\x83\x50\xda\x26"
+ "\x46\x57\xbb\xea\x76\x0c\xdc\x63\xd6\x27\x70\xdc\xed\x8e\x9f\x6b"
+ "\x6e\x2f\x0b\x43\xb0\x6d\x85\x69\x1b\xd8\x0d\x19\x97\x29\x19\x23"
+ "\xec\x63\x36\xd4\xef\xd9\x9a\x08\x5c\x15\x8f\xd0\xc0\xbb\xf8\x99"
+ "\xb9\x9d\x01\x98\xf1\x48\x85\x36\xd7\x43\x5b\xcc\xef\x9f\xac\x01"
+ "\x3c\x3a\x97\xac\x40\xf8\x99\x4e\x81\xfb\xca\x4d\xc5\xb6\x57\x3e"
+ "\x9b\xc5\x28\x9c\x91\x71\x67\x9f\x00\xc6\x73\x4c\x0c\xf8\x03\xa5"
+ "\xcd\x43\x2e\xf8\x3e\xd6\xc3\x71\x8c\x22\x89\x81\x71\x44\x53\xaa"
+ "\xaf\x21\xcf\x34\xf4\xef\x1b\x88\x63\x19\xb8\xee\x96\x79\x48\x05"
+ "\x3f\x57\x26\x73\x4c\x4c\xed\xaa\x9a\xae\x70\x9f\xce\xb8\x5f\x62"
+ "\xf7\xb8\xfe\x53\x18\x77\x9e\xf4\xc2\x63\x07\x7b\x7d\x7c\x6d\xf6"
+ "\x3a\x0a\x63\x8a\x01\xb6\x33\xcb\x92\x98\xd2\x38\x3d\x72\x03\x5b"
+ "\x6c\x85\x7e\x63\x3c\x1a\xff\xd2\x47\xbb\xbc\x0b\x42\x7b\x17\x57"
+ "\x29\x4a\xa1\xef\x86\x4f\x9e\xac\xd1\x24\x0e\x46\xb0\x5f\x87\x63"
+ "\x96\x2b\x4e\x77\x3a\x87\x82\x6a\xc3\x7c\x02\xff\xef\x53\x03\xe3"
+ "\xd8\x68\xf8\x7b\x3d\xdc\x87\xf1\xb6\x97\x33\x3e\xf6\x8a\x53\xcd"
+ "\x29\xcd\xc2\x73\xc8\x2d\x06\xb9\xa4\xc2\xbd\x91\x63\x6b\x72\xf1"
+ "\xb1\x5a\xa7\x3b\xbd\x71\x1f\xe0\xef\xfd\xf0\x37\x3e\x0f\xcf\x21"
+ "\x43\xcc\x8e\x3e\x01\x2c\x36\x33\xc6\xc4\x18\xfb\xf4\x09\x60\xb9"
+ "\x0f\xee\x73\x3d\xdc\x33\x1c\xe3\x0a\xc7\xb8\xb2\xff\x26\x22\x55"
+ "\x06\x6c\xc3\xed\xc0\xbf\xae\x9a\xd9\xf5\xb8\xed\x34\xdc\xb6\x88"
+ "\x1d\x9c\x19\x0f\x18\xa9\x01\xdb\x78\x4c\x55\x27\x3a\x9d\xba\xe4"
+ "\x74\xe7\x98\x9b\x13\xc3\xc0\x73\xae\x59\x9e\x88\x5c\xd3\x8c\x08"
+ "\x69\xba\xe0\x76\xee\xe4\x40\xfb\xce\xd8\x16\xb5\xab\xee\xc4\x6b"
+ "\x9d\x6a\xbc\xb1\x7d\xc1\x9f\x35\xea\x9e\xec\xfd\x9e\xc6\xd7\xc1"
+ "\xe7\x70\xc7\xb3\xb5\xef\x71\x9f\xd5\x89\x4a\x06\xfe\x3e\xac\x74"
+ "\xba\x88\x94\x5e\xed\xbf\x84\xf3\x0f\x69\x51\x5e\x08\x3e\x5f\x4b"
+ "\xce\x03\x2c\xdd\x29\x03\x9f\x05\xe1\x6d\xf8\x6f\x91\xfe\xba\x9a"
+ "\xfc\x56\x0c\x6a\xd5\xca\x77\x26\x8c\x00\x2e\x4c\x18\xc1\xfd\xfd"
+ "\x32\x51\xab\x60\xc7\x61\xa7\xbb\x6c\x5c\x97\x0a\x3e\x34\x7c\xe6"
+ "\xe5\xbc\x1e\x6c\x6b\x6c\xc0\x7e\xb9\x04\xfb\x6a\x3d\xb1\x5f\xd6"
+ "\x2f\x06\x9f\x90\x63\x03\x68\xff\xf1\xdf\xb5\xac\x3f\x8d\xe0\x0b"
+ "\xb2\x76\xf3\xee\x55\x7c\x3f\xeb\xef\x82\x1f\x3b\x31\x35\xc7\xe2"
+ "\xa0\x5f\x18\xb7\x80\x91\xbd\xf3\xea\x14\x78\x5e\x1f\xde\xfe\xcd"
+ "\xad\x3a\xc5\xfa\x6b\x08\xeb\x4a\xb4\x0e\x78\x39\x67\x21\xd8\x1c"
+ "\xda\x64\x7a\xf7\xd2\x3c\x67\xf2\xe3\x62\xf0\xdd\x42\xc0\x2e\xd8"
+ "\x7c\x3d\xd8\x6f\x0b\x70\x1e\xfe\xff\x16\x18\x7f\x40\xd3\x69\xb4"
+ "\x4e\xb5\xbd\xa1\x3d\x55\x4e\x27\x46\xb7\xb5\x13\x53\x0d\x36\x3c"
+ "\x5a\xbb\xaa\x16\x99\x6c\x88\xfb\xb4\x1e\xb6\xaf\x83\xfd\x5a\xa7"
+ "\xbb\xf1\x04\x43\x77\x43\x4c\xf7\x2c\x66\xcf\xb5\x7b\x51\xc0\xba"
+ "\xbd\xa8\xeb\x9a\xbd\x68\xe8\x92\x4a\x78\x2e\x97\xbd\xcc\xfc\x30"
+ "\x59\x0f\x63\xe2\xba\xc2\xfa\x4e\x2f\x68\xf0\xbb\x27\xe3\xf2\x27"
+ "\x73\x57\xee\x45\xfd\xf1\xda\xd8\xd0\x6a\x84\xf0\x18\x1e\xda\xe6"
+ "\x02\x53\x1a\x73\x07\x19\xdd\xd7\x15\x1a\x96\x3f\xdb\x71\xcc\x1d"
+ "\x84\x8e\x7b\xd7\xa0\xc4\x58\x18\xcb\x6f\x55\xa1\xc4\x1a\x46\x57"
+ "\x92\x7c\x15\x01\xf7\x9c\x26\xb6\xab\xd3\x84\x4e\x47\x08\xaf\x19"
+ "\x34\xfe\xea\x8d\xda\x47\x23\xe7\xf8\xb3\xc8\x2b\xa9\x92\xa9\x32"
+ "\x6c\x0a\x8a\x49\x4c\x40\x8a\xbd\xb7\xca\x89\xf6\x74\xaa\x4b\x3f"
+ "\x8c\xd7\xa7\xd6\x86\xa3\x69\x7a\x6e\x3c\xca\x18\x13\x97\x34\x03"
+ "\x75\xc6\xf7\xe3\xc6\x6a\xaf\xba\x01\x60\xb7\x38\x69\xfc\x5c\x5b"
+ "\xc7\xfa\x73\xd3\x08\xdd\xde\x77\xea\x40\x6f\x35\x94\x25\x4d\x67"
+ "\xaa\xb0\xae\x83\xf1\x85\xd5\x82\xa5\x55\x7a\xd0\x56\x51\x30\x7e"
+ "\x6b\xd1\xb7\x97\x72\x15\xc6\xf4\x86\x32\x69\xd7\xa8\x9b\xcc\x8e"
+ "\xdb\x78\x2c\x85\xbe\x8f\xf7\x46\xc9\x6c\xff\x61\xcc\x74\x8b\xc5"
+ "\x7a\x8a\xb9\x80\xfb\xff\x0d\xdc\x2b\xd3\x23\x32\x0c\xfa\xa4\xc5"
+ "\xe3\x67\x68\x85\x06\x15\xd5\x19\xd0\xa7\xd7\x58\x1b\xb5\x05\x1b"
+ "\x39\xc3\xbe\xfd\x60\x27\x17\x21\xbf\x61\x9f\x19\xd3\xd6\x15\x1a"
+ "\x95\xc4\x37\xac\x5f\x6a\x88\x5f\xc6\xcc\x45\x30\x8e\x82\x6f\xd2"
+ "\x89\x6f\x8c\x9e\xa3\x23\xb0\x6f\xa4\xdd\xc7\xbd\xde\x62\xe3\x0b"
+ "\xbe\x36\x03\xf8\xc0\xb8\x30\x7a\x8c\x8e\xc0\xd7\xc6\x7d\xc0\xef"
+ "\xcf\x30\x0e\x42\x57\x5e\x60\x4a\x62\xaa\x50\x29\xdc\x0f\xe3\x6e"
+ "\xde\x07\xbd\xd4\x3e\xec\x12\xeb\xc3\xda\x81\x80\xdb\x81\x80\xdb"
+ "\x81\x80\x5b\x2d\xc1\xed\xc9\x0a\x82\x5b\x03\xf4\xeb\x1e\x68\xf7"
+ "\x25\xe3\x91\x02\xf7\x6b\xcf\x39\x5c\xa3\x0f\xfa\x59\x45\xb1\x3b"
+ "\xfa\x3a\xd8\xc8\x84\x5f\xe5\xb3\x1d\xb1\x7d\x4a\x6a\xca\x51\x12"
+ "\xc6\x6f\xbd\x10\x7e\x1b\x92\x43\x23\xc1\x37\xef\x03\x7e\xff\xeb"
+ "\x8d\x5c\x2b\x91\x73\xc2\x78\xc0\x6f\x95\x10\x7e\x1b\xc6\x1e\x82"
+ "\x6b\x5a\xe1\x77\xba\x39\x7e\xeb\xaf\x4b\xc7\x6f\x7d\x41\x23\x7e"
+ "\x27\x72\xf8\x9d\x61\x81\xdf\x4a\x33\xfc\xe2\xfb\x96\x8c\xdf\x86"
+ "\xae\xd2\xf0\x5b\x9f\xdb\x88\x5f\x88\x4b\x3e\x7d\x8f\xb5\x51\x5b"
+ "\xb0\x11\xe0\xb7\x3e\x16\xec\x24\x88\xdf\x96\xf7\x9f\x21\xd0\x7e"
+ "\xff\x19\xdc\x9b\xf6\x9f\x3e\x4f\xba\xff\xf4\x71\xf7\xdf\x7f\xfa"
+ "\x0a\x69\xfe\xd3\x47\x88\xfb\x4f\xef\xdb\x7a\xfc\xc7\x20\xfb\xfd"
+ "\x67\x3c\xd5\xb4\xff\x8c\xb3\xa4\xfb\xcf\x18\x70\xff\xfd\x67\xcc"
+ "\x96\xe6\x3f\xa3\x5a\xdc\x7f\x86\x1a\x31\xff\xbd\xda\xd9\xc8\x18"
+ "\xf1\xbc\xb9\x4e\xbe\x6a\xac\x81\x88\x5e\x63\x8a\x71\xcc\x08\x7f"
+ "\x3b\x9b\xfe\x66\x35\x15\xc4\xd5\x16\x7f\xbb\x5a\xfc\xad\xb2\xf8"
+ "\xdb\xc3\xe2\x6f\x2f\x8b\xbf\xbb\x9a\xfe\x06\x7f\xb5\xb9\xe1\xc4"
+ "\x0c\x83\x98\x2d\x59\xeb\xc4\x94\x73\xfb\x7b\x4f\x33\xa8\x71\xdc"
+ "\xd7\x5b\xa8\xef\xeb\x97\x31\x75\xed\x9d\x10\xd3\xa0\x60\x50\x4c"
+ "\x22\x7a\xf2\x9a\x02\x85\xd4\x2f\x83\x90\x50\xd9\xc5\x9b\xa9\x4f"
+ "\x46\xc6\x34\xbd\xf3\x98\x45\x80\x2f\x1d\xc4\x89\x49\x5e\x6d\xa1"
+ "\xed\xdf\x83\xdd\x74\x25\x31\x3a\xd0\xe5\xdf\x32\x97\x14\x68\x08"
+ "\xbe\xcf\x81\x31\x1a\x64\x54\x3e\x8b\xd7\xfe\x39\x19\xd3\xf5\xce"
+ "\x3a\xe5\xb3\x5d\x20\x2e\xd5\xae\x5b\x66\x74\x29\xad\x3e\x8d\x52"
+ "\x15\x46\x75\x7c\x3c\xe8\xfa\xea\xfd\x68\x49\x35\x53\x15\xaf\x67"
+ "\xea\x4a\x27\x6b\xf0\x7b\xdb\xaa\xd2\xb8\x42\x54\xa2\x3b\x8d\xf0"
+ "\x98\x87\xb1\x5a\xaa\xdb\x4f\xde\x13\xe3\x63\x60\x5b\x89\x6e\x0f"
+ "\x2a\x86\xbf\x35\xb3\x2f\xa3\x2b\x0a\x74\xb5\xb4\x7a\x0f\x32\xa4"
+ "\xe1\xe7\xa3\xa1\x92\x51\x35\x54\x15\x57\x43\xdf\xd2\x1a\xaa\x71"
+ "\x5f\x4b\xa0\x1f\xec\x37\x3a\xd3\x1b\xaa\xd9\x76\x6b\xca\xd8\x1c"
+ "\x82\x21\x1d\x8e\x77\x87\xe3\xdd\x1b\xaa\x70\xff\x70\xdf\x04\xe3"
+ "\xbd\x0c\xdf\x71\xd0\xf7\x3f\x8c\xf7\x76\x46\xcc\x52\x67\x2f\x49"
+ "\x78\x53\x38\xb9\x8a\xc6\x91\x19\xbe\xa7\x49\xbb\x2e\x72\xda\x15"
+ "\x9d\xff\xc4\x64\xf8\x71\xfd\x55\xc9\x69\xf7\x90\x8d\x76\xb9\xfe"
+ "\xaa\x65\xb4\x8b\x5b\x13\x6b\xd7\x9f\xeb\x6f\xa0\x9c\x76\x67\xda"
+ "\x68\x97\xeb\x6f\xb2\x9c\x76\x8f\xd9\xf0\xdb\x38\x79\x58\x50\x7a"
+ "\xd9\xc2\x82\x3c\x1c\x28\x6d\xdc\xbf\xdf\x38\x79\x18\x50\x8a\xe6"
+ "\xbf\x31\x06\xe4\xf9\xdf\xd9\xa6\xff\xe5\xf9\xde\x59\xf4\xfb\x8f"
+ "\xd8\xf7\xf2\xfc\xee\x2c\x8a\x7f\x1c\x1b\x33\x19\xcf\xeb\x98\x4e"
+ "\x91\x81\xc6\x4d\x4a\x9d\xb1\xd3\xf3\xb7\x96\x1b\x03\xd1\xab\x09"
+ "\x30\xe6\x65\x21\xf7\x57\x73\x2e\x30\x81\x38\xe7\xa4\x68\x33\x2e"
+ "\x21\x1b\x29\xd2\x14\x46\x45\xde\xe2\x72\x45\xa9\x3e\x00\xf3\x96"
+ "\x61\xc7\xc2\x3a\xa7\x5e\xb0\xfd\x08\xf4\xba\x66\xbe\x37\x22\x6d"
+ "\x29\x75\xa9\x89\x81\x28\xd4\x80\x70\x8e\xa3\x66\xcc\xdc\x0b\xcc"
+ "\x51\x88\x2e\x43\x6f\x02\xbf\x66\xd5\xe1\xb1\xd4\x1d\xce\xd5\x03"
+ "\x8e\xa1\x9d\x3a\xf4\xa5\x51\xe7\x34\x46\xc7\x1e\xab\x83\x78\x54"
+ "\xc7\x6c\x7a\xfe\x16\x1e\x93\x99\x24\x6f\xb4\x02\xfe\x86\x6b\x1f"
+ "\x57\xea\x90\x62\x0b\xc4\xaa\xb5\x6b\xda\x68\xb4\x8a\xb6\xd9\x38"
+ "\x7e\x85\x38\xb9\x3a\xe9\x26\xce\xe7\x47\x06\xee\x35\xea\x14\xcb"
+ "\x21\x6e\xc6\xc7\x0f\x8c\x41\x8a\xa3\xd0\x1e\x1c\x5b\x7d\x24\x16"
+ "\x21\x1b\xf9\x1c\x67\xa3\xc7\xa8\xd3\xf8\x7c\xdc\x0e\xce\x93\xae"
+ "\x37\x82\x9d\x3d\xc6\xc4\xe1\x7e\x33\x19\x2f\xec\xd2\x2c\x86\x31"
+ "\x47\xd1\x36\x76\x44\x5f\xa6\x16\x8f\x21\x30\x76\x74\xb9\x06\x7f"
+ "\xb3\xf9\x80\x65\x4c\x19\xa3\xaa\x2f\x67\x52\xdb\x07\x96\xd4\xdc"
+ "\x42\x9a\x85\xf5\xe8\x92\xa2\xed\x02\x7c\xed\xdb\x1e\xa3\xca\x6a"
+ "\x3c\x46\x95\xd7\xae\x69\x1b\x63\xea\x2f\xbe\x96\x69\x3b\xce\x7f"
+ "\x90\x3e\xb6\x4d\x3b\x12\x2f\xde\x47\x66\x79\x97\x8e\xa1\x5e\x8c"
+ "\x0e\xdb\x52\x93\x78\x0b\xfa\xe2\xd2\x06\xdb\x9b\xc9\x18\x95\x5b"
+ "\x93\xe4\xdd\x9d\xcd\x07\x2a\x1e\xeb\x8f\xf3\x4a\x30\x36\xd4\xb0"
+ "\x39\x9e\xf4\x86\x1a\x76\x0e\x0f\x70\x3f\x68\x80\x72\xac\x85\x6e"
+ "\x28\xda\xb2\xf9\xc0\xf1\xde\x0a\x69\xf1\x94\xa2\x2d\x1b\xff\x6a"
+ "\xba\x63\x3b\x3c\x76\x1d\xae\xf7\xe2\x25\xc5\x63\x61\x24\x47\xa8"
+ "\x77\xc1\xd7\x83\x63\x2a\x98\x74\xbd\x0b\x93\x56\x5f\x86\x8f\x83"
+ "\xfd\x31\xdc\x7e\x95\xd9\x7e\x15\xf4\xb9\x8a\xdb\x9f\xc6\xed\xf7"
+ "\x30\xdb\xef\x11\xd3\x1d\x39\x5d\x53\x3c\x56\x80\xef\x09\xc6\x3b"
+ "\x1d\xec\x67\xeb\xeb\x90\x9c\x7d\x83\x8e\x3b\xce\xb9\x5a\xf1\xd8"
+ "\xa9\xdb\x80\x2f\xd8\xef\x6a\x76\xbe\xeb\xd1\x38\x1f\xf4\x6a\x0e"
+ "\xb6\xe9\x63\x95\x5a\xa5\x41\xcf\xe6\x89\x14\x6d\xb5\xac\x2d\x60"
+ "\xfc\x34\x6f\x4f\xab\x78\x2c\x1f\x8f\x91\x35\xa0\x23\xe1\x98\x42"
+ "\x7c\x4d\x21\xfb\xeb\x77\xf4\x52\xd7\xf7\xee\xe5\xd3\xe0\xf1\x56"
+ "\x5a\xbf\xca\x97\x0d\x8d\xf3\x3f\x23\x90\x22\xb4\x02\x29\x93\x22"
+ "\x91\x02\x6b\xa8\xc4\x53\x48\x11\x0f\xff\xc7\xb9\x66\x46\xb1\xb7"
+ "\x7a\xef\xc2\x3a\x78\x4e\x34\x6d\xf0\xfb\xaa\x7a\x78\x26\xf4\xfd"
+ "\x9f\x0e\xc4\xef\x6a\xee\xed\xe8\x85\xea\x32\x5e\xab\xbb\xe7\xf1"
+ "\xba\xcb\x95\x99\x48\x31\xad\x5a\xf0\xbd\xcd\xd0\x25\x15\x8c\x31"
+ "\x71\x2e\x72\x09\x9d\xac\x64\xf0\xbb\x9b\xe2\xe8\xcb\x28\xe1\x3a"
+ "\x52\xe0\xf7\x35\x9f\x2d\x44\x1e\xa5\xa0\x7b\xf1\xfb\x1c\xd7\x88"
+ "\x40\x94\x9d\x88\x3c\xda\x57\x23\x55\x7b\x27\xa7\xb6\x6f\x9c\x41"
+ "\xc8\x50\x1b\xdd\x0e\xf0\x6a\xec\x17\x15\x88\x73\x26\x1d\x98\x0d"
+ "\xeb\x35\x7b\x13\x0b\xda\xe8\x41\x67\xe3\x77\x3a\x1f\xdf\x45\xfd"
+ "\x73\x16\x22\x9f\x69\xc5\xc9\x6c\x2d\x23\xbc\xbe\xf4\x5e\xad\xb7"
+ "\xba\xe1\x23\xef\x9e\xf5\xb5\xde\xdd\x4d\xef\x7b\xa6\x5c\x57\x21"
+ "\x3c\x87\x94\x59\x75\x4f\x87\xdf\xf7\xe0\xbc\x7a\x43\x3a\xa9\x75"
+ "\x84\xe7\x95\x1a\x3f\xf2\xee\xca\x4c\xf3\x46\xcf\xd5\x81\x7d\x6b"
+ "\xbd\xd1\xe2\xb1\x48\x05\x7d\x56\xf5\xaf\x44\x8a\xad\x53\x91\x4b"
+ "\x51\xc4\x25\xac\x49\xbc\x8a\x2a\x77\xa2\x45\x23\x51\x77\x3d\xe8"
+ "\x76\xfc\x1e\xa1\xa8\x32\x13\xe1\xf7\x41\xd9\x77\x51\x40\xd6\x5d"
+ "\x34\x14\x63\x34\x24\x52\x8d\x8c\x99\xa3\x72\x09\x56\xdb\xed\x3c"
+ "\xee\x7d\x1c\x49\xc7\x6a\x3b\xd1\xfa\x3f\x70\x0d\x1f\x7d\xef\x5e"
+ "\xc8\x00\x7e\x24\xef\x00\x43\x54\xc6\xed\xef\xc4\xec\x4d\xd4\x29"
+ "\xbe\xb8\x54\xe5\x84\xe7\x33\xe1\xb5\xbd\xc6\x3d\x4f\x07\xf2\xfc"
+ "\xd2\xc0\xf9\xa5\x81\xf8\x05\xfb\x64\x6a\x0c\xc2\xef\x8e\x3a\x60"
+ "\x7f\x94\xd6\x95\x23\xe3\x12\xd3\xfa\x5e\x1f\xb4\xc5\x48\x7c\x61"
+ "\x68\x88\x6e\x67\x04\xbb\xe3\x1c\x29\x60\xa1\x8d\x01\x6c\xbf\x16"
+ "\xaf\xf9\x5d\xea\xd4\x1e\xf0\xd7\xc1\xd8\xe0\xf5\x38\x68\x55\x9f"
+ "\x69\x17\x93\xb9\x7a\x52\xa4\xae\x94\x7e\x89\xb7\x1a\xda\xee\xd9"
+ "\xd0\x00\x7e\xa8\xb3\xf2\xc3\x4c\xbc\x36\x18\xbf\xbf\xd0\xa7\x93"
+ "\x77\x34\xac\x1f\x96\x78\x77\xc5\xf1\xcd\x73\xa0\x4f\xf1\x3b\x2d"
+ "\xec\x83\x2d\x57\x90\x4b\x71\x34\xb1\xbf\x81\xb3\x3b\x5e\x27\x8c"
+ "\x6d\x3d\x7a\x86\x1a\x95\x7a\x9f\x41\xd8\xd6\xcc\x1a\x97\xde\x0d"
+ "\x3b\x7b\xe1\x31\xc5\xf7\x86\xe2\x89\x6e\xc7\x21\xda\x1c\x1f\x27"
+ "\xd5\xee\x4f\x88\x7e\xff\xac\x65\xec\xae\x7e\x08\xed\xde\xae\x9a"
+ "\xda\xdd\x35\x53\x9e\xdd\x5d\x33\x1e\xac\xdd\x55\x0f\xa1\xdd\x9f"
+ "\x88\xa2\x76\xef\xd0\x5e\x9e\xdd\x3b\x88\xc6\x3f\x06\x63\xa0\xe2"
+ "\x07\xaf\x72\xf4\x65\x17\x88\xb5\xd3\x3e\x57\x19\xd3\x3e\x4f\x33"
+ "\x4e\xf2\x72\x26\x3a\xc2\x53\xf3\x4f\x78\x52\x34\xf3\xae\xb1\xff"
+ "\x27\x63\xe0\xfb\xc1\x78\x2d\xda\x0f\xc7\xf0\xf8\xbe\x06\x9d\x0c"
+ "\xc2\xe3\x79\x87\xf3\x4f\x84\x83\x2e\x9b\xe4\x85\xee\x4d\x0a\x57"
+ "\xac\x39\x87\x5c\xdc\xca\x51\x88\xd1\xc8\x30\x9a\xc4\x6b\x30\x7e"
+ "\xfe\xce\x45\x33\xf1\x1a\x52\x2f\x76\x81\x63\xdd\x67\xa8\x17\x2f"
+ "\xc5\xff\x8e\x56\x2f\x5e\x75\x01\xfe\x6d\x8f\xdb\x4d\x38\x8f\x14"
+ "\xfa\xa7\xfb\x84\xed\x9d\xad\x81\x31\xe9\xb5\x98\xbd\x37\xea\x14"
+ "\x6b\x6f\x21\x67\x46\xf1\x14\xe3\xa6\x43\x2e\xeb\xe6\x81\x16\xd3"
+ "\xd7\xa0\x98\xf7\xd0\x53\xd7\x14\xaa\x95\x38\x0f\xfc\xcd\x0d\x8d"
+ "\x22\x0d\x1f\xd3\xf3\x9d\x98\x3d\x5d\x74\x4e\x78\x2c\xdb\x3b\xbb"
+ "\x4e\x61\xc2\x0a\x9e\x8f\x30\xad\x06\x29\xc0\x7e\x3e\x06\xcf\xb7"
+ "\xd2\x6e\xef\xec\xa5\xae\xcb\x7c\xdd\xa5\xde\xf3\xb5\x3a\x7d\xde"
+ "\xd3\x81\x82\xf8\xb9\x83\x14\x18\x43\x18\x2f\xed\x63\x91\xca\x84"
+ "\x25\x8c\xa1\x92\xba\x2a\x84\xd7\x39\xb8\x55\x21\x15\x03\xf8\x99"
+ "\xb4\x1b\x7c\x6b\x8e\xa1\x34\x11\x0c\x6d\xe6\x63\xe8\x36\x87\x21"
+ "\xc0\x12\xc5\xd0\x0c\xc0\x10\x7e\xaf\xbd\xaa\x4e\x27\x09\x43\xd5"
+ "\x1c\x86\xd2\x2d\x30\x74\x5d\x8d\x7e\xa8\x38\xcf\x61\xc8\xb5\x42"
+ "\xdf\xc7\x84\x21\xd5\xd8\xe3\x93\x01\x43\x93\xa5\x62\x48\x45\x34"
+ "\x54\x46\x50\x04\xab\x27\x14\x9d\xc8\xb7\xa6\x41\x7b\x52\xdd\xa9"
+ "\x3a\x40\xde\x4f\x81\xce\xf4\x7c\x61\x17\x93\x0e\x5a\x13\xfa\x32"
+ "\xad\x2f\x72\xb9\xed\x39\xaa\xec\x76\xe6\xa8\xd3\x35\x9e\xa3\x38"
+ "\x7d\xa7\x3a\x2b\x0f\xcb\x2a\x36\x7f\xc2\xfc\x14\xfe\x3b\x66\x52"
+ "\xb8\xb3\xf1\xa7\xf0\x36\xe0\x47\xaf\x39\x86\x64\x74\x37\xed\xfd"
+ "\x40\xd0\xe9\x55\xea\xc5\xe8\x59\xc0\xd5\x90\x93\xa0\x53\x4f\x82"
+ "\xf2\x2d\x0d\x9b\x89\x98\x0d\xef\x69\xbe\x30\xea\x9c\xe1\x59\xd0"
+ "\x62\xac\x01\x5e\x9d\xcd\xf1\x4a\xb0\x49\xf6\xd5\xa5\xbd\x1f\x86"
+ "\xdb\x0a\x2d\x44\x6e\xea\xd7\x90\xf3\x15\x45\xc7\xb3\x8b\x12\x10"
+ "\x5e\xc7\xd5\x06\xfe\xbf\xf3\xde\x06\x7f\x0d\x9c\xdf\x81\xf9\x69"
+ "\x9c\x53\xcc\x6b\xa8\x3b\x33\x69\x9c\x13\xe6\xac\xcf\x13\xb3\x14"
+ "\x46\xd8\x46\xde\xe9\x67\x21\xbc\x7f\x6d\xbd\x33\xfb\xfe\xdf\x08"
+ "\xc7\x94\xd4\x64\xa1\xb5\x0b\x21\xbe\x84\xff\x93\x79\x22\x59\x08"
+ "\x1f\xbf\x6e\x9e\x8a\x7d\x87\xc7\x9e\xa7\xcf\x42\xf8\x5c\x03\x6c"
+ "\xff\xd8\xe8\x8a\x52\x17\x7b\xa0\x93\x61\x25\x6c\x1b\x27\xc3\xbe"
+ "\x47\xb8\x0d\xcc\x6b\x27\xc3\xbe\x41\xeb\x17\x7a\xa1\xe2\xea\x2c"
+ "\xd8\xff\x6f\xb4\xfe\x46\x57\xf8\xf7\x0a\xfc\xee\xa2\x6b\x8a\x8e"
+ "\xc1\x27\xc3\x8c\xc8\x6d\xe9\xcb\x0c\xe0\x90\x29\xc5\x6b\x83\x12"
+ "\x51\x5b\xe8\xfb\xd8\xd2\xf2\x34\xa4\x55\xb8\x07\xe0\xb5\xa3\x4c"
+ "\xd2\xa4\x6a\x23\x33\xe9\xba\x31\x69\xd2\x0d\x7c\x6d\x03\x33\xe9"
+ "\x37\x7c\xed\x75\x8b\xd5\xdc\xbc\xb1\x2c\x76\x8e\xcb\xda\xbb\xbd"
+ "\x11\xee\x2b\xbe\x2e\xbe\xde\xfa\x79\xde\xdc\x35\xfb\xb3\x7d\xc3"
+ "\xd7\xc4\x6d\x9a\x5f\x13\x7f\x97\x59\xfd\x16\x7b\xcd\xe3\xf0\xaf"
+ "\x3b\xf8\x63\x28\xf6\x03\xbe\xbe\x91\x09\x6f\xc3\x24\x85\x2b\xd9"
+ "\x73\xe2\xaa\x84\xce\xb9\xc7\x9d\xc3\xe6\x22\xf1\x39\xf5\xe4\x78"
+ "\xb6\x0d\xe0\x13\x76\xfd\x6b\xbf\x70\x0d\xb2\xf6\xe1\xef\xf6\x11"
+ "\x7e\xf9\xdd\x52\xc2\x2f\xc4\xa7\x2c\x56\x26\x85\xb7\x01\xbf\xa9"
+ "\x30\x17\x41\x1b\x13\x1a\xdb\xf8\x29\x5c\x89\xfd\x8d\x71\x63\xc2"
+ "\x12\xc6\x91\x09\x43\x6c\x3f\x21\x42\x30\xc7\x0c\xfc\xdf\x85\x6b"
+ "\x67\x9b\xa9\x1d\xe8\x03\xc7\x71\x1d\x2a\xfa\xc1\x7e\x6b\x1c\x79"
+ "\x2e\xa2\x38\xf2\xec\x5c\x97\xc8\x30\x18\x47\x9a\x89\xcb\x70\x3b"
+ "\x57\x69\x7f\xc6\x39\x61\x8c\x3d\x64\xd8\x0a\xc6\x7e\xea\x17\x8f"
+ "\x3c\xc8\xfd\x78\x1c\x64\xef\x27\x5e\xe3\x81\xfb\x6a\xba\x0f\xdc"
+ "\x87\x54\xa3\x1a\x99\xee\x63\x7d\x7d\x6f\x68\xf7\x06\xe2\xce\xb9"
+ "\x8e\xdb\x36\xd9\x00\x7c\x86\x4c\xe7\x98\x8e\x4f\x35\x7a\x43\xbf"
+ "\xfb\xb3\xe7\x10\xcc\x5d\x11\xc0\x8f\xe7\x10\x4b\xcc\x3d\x11\x8f"
+ "\x94\x0c\xd8\x5b\x33\xf1\x16\x5c\xc7\x73\x3c\xe9\xdb\xb7\x86\x7a"
+ "\xb8\x06\xf8\x40\xc1\x6d\x9f\x65\x86\x09\xae\xfd\x3a\xa1\xf6\x37"
+ "\xf3\xda\x0f\x87\xf6\xe3\xa0\x7d\x3c\xde\x4d\xc4\xf1\xa2\x27\xcb"
+ "\x83\xfd\xe2\x48\xfb\x26\xdc\x32\x69\x83\x2b\x62\x16\xa3\xc7\xae"
+ "\x29\x3a\x85\x13\x0e\xed\xb0\x12\x1f\xc7\xbe\xdf\x57\x18\x73\x8d"
+ "\x16\xef\xf7\xcd\xe7\x7f\x7c\x09\x3a\x88\x7d\xcf\xad\xe8\xc4\xd6"
+ "\x37\xc8\xfb\xb4\x5c\x81\xc7\x69\xfa\x6e\xff\x1c\xde\x37\x5c\xb3"
+ "\xf0\x12\x7d\xb7\xaf\xe8\xc4\xe6\x7b\xb4\x8a\x4e\x33\x6b\x15\x48"
+ "\x01\x7f\x7b\x93\xed\x1d\x56\x98\x6f\x6f\x9c\x3b\xc3\x6d\xc7\xf3"
+ "\x12\x8f\x16\xe0\xb8\xb4\x53\xbc\x29\x17\xd0\x74\xac\xf9\x5c\x2b"
+ "\x8c\x35\x7d\x6c\xc4\x9a\x3e\x0f\x69\xac\xe9\xe5\x2e\x2f\xd6\xf4"
+ "\x12\xad\x7f\xf0\x28\xe6\x11\xd3\xde\x9d\xd2\xa8\xf6\xee\xbc\x5a"
+ "\x9e\x5e\xe9\x9c\xf2\x28\xe6\x91\x6a\x77\xaf\x70\x6a\xf7\x27\x9d"
+ "\xe4\xd9\xfd\x49\x24\x2f\xe6\xe9\xb9\x9f\xc6\x3c\x3d\xf7\x8b\xc7"
+ "\x3c\x4f\x9e\xb2\x1d\xf3\x3c\xa5\xa7\x31\x4f\xf7\x29\x44\x93\x74"
+ "\x1f\x4e\x34\x49\x77\x27\xe9\x31\x4f\xb7\x45\x8f\x62\x1e\x29\x31"
+ "\x4f\xe7\x32\x1a\xf3\x74\x1b\x21\x2f\xe6\xe9\x16\xc4\x8f\x79\x7a"
+ "\x45\x5a\xc7\x3c\xdd\x76\xdb\x1f\xf3\x74\x2b\x96\x87\xe5\x6e\x45"
+ "\xf6\xc5\x3c\xdd\x07\x08\xc7\x3c\x4f\x9e\x16\x8f\x79\xc8\x3e\x6b"
+ "\xad\xfa\x54\x31\xd5\xaa\x4f\x6d\x6e\xfd\x31\xcf\x53\x43\x85\x75"
+ "\xe9\x53\x23\x48\xcc\xd3\xbd\x7f\xf3\xc7\x3c\xdd\xfb\x0b\xc7\x3c"
+ "\x4f\x1d\x24\xfa\xb0\xbb\x8f\x75\xcc\x03\xe7\x08\xc6\x3c\x4f\x5d"
+ "\xe7\xce\xe9\xcf\x8f\x79\x48\x1b\x97\x14\xea\x76\xe2\x31\x8f\x7a"
+ "\x27\xe1\x17\xf5\x02\xc2\x2f\xc4\xa7\xd6\x31\x8f\x7a\x74\xd3\x31"
+ "\x0f\xc1\x10\xdb\x4f\xd1\x98\x47\x9d\x69\x1d\xf3\x3c\x59\x26\x1c"
+ "\xf3\xf4\x9c\x45\x71\xd4\xb3\x3d\x3f\xe6\x51\x9f\x7f\x38\x62\x1e"
+ "\x51\x6c\x0d\xe5\xc7\x3c\x3d\xf2\xa4\xc7\x3c\x3d\x2e\x4a\x8b\x79"
+ "\x30\xe6\x84\x62\x9e\x9e\x03\x2c\x31\xc7\x8f\x79\x7a\x8e\x14\x8e"
+ "\x79\x7a\x46\xf2\x63\x1e\xdc\xbe\x50\xcc\xd3\x73\x1d\xaf\x7d\xab"
+ "\x98\xa7\xe7\x6e\x7e\xcc\x43\x8e\xa3\x31\x4f\xaf\x10\xc2\xa1\x4f"
+ "\x2e\x92\x1e\xf3\xf4\x1a\x20\x1e\xf3\xf4\xf2\xe3\xc7\x3c\xbd\x5c"
+ "\x48\x6c\xd3\x2b\x82\xc4\x3c\xbd\xba\x92\xed\x4f\xc6\x99\x6f\xa7"
+ "\x31\x0f\xd9\x4e\x63\x9e\x5e\x31\xf6\xc7\x3c\x4f\xb5\xc2\x98\x47"
+ "\x6d\x23\xe6\x51\x3f\xa4\x31\x4f\x9f\x36\xf2\x62\x9e\x3e\xce\x8f"
+ "\xb4\xb7\x54\xed\xdd\x6b\x05\xd5\xde\x4f\x27\xc8\xd3\x2b\x4f\xc7"
+ "\xcb\xd3\xde\x03\x7d\xa8\xf6\x1e\xe8\x23\xae\xbd\x9f\x19\x6d\x5b"
+ "\x7b\xf7\x8b\xa3\xda\xbb\xef\x59\x32\x36\xf6\x3d\x4c\xc6\xc6\xbe"
+ "\x09\xd2\xb5\xb7\xf7\x9d\x47\xda\x5b\x8a\xf6\xee\x13\x42\xb5\xb7"
+ "\xf7\x11\x79\xda\xdb\x5b\xc3\xd7\xde\x03\xcf\x5b\x6b\xef\xbe\x7d"
+ "\xec\xd7\xde\x7d\x47\xca\xc3\x72\xdf\x60\xfb\xb4\x77\xdf\xdd\xc2"
+ "\xda\xfb\x99\x30\x71\xed\x4d\xf6\x59\x6b\xa6\x7e\x23\xa9\x66\xea"
+ "\xe7\xd9\xfa\xb5\xf7\xb3\x05\xc2\xfa\xe8\xd9\x23\x44\x7b\xf7\xdd"
+ "\xd5\xfc\xda\xbb\xef\x2e\x61\xed\xdd\xcf\x8f\xe8\x94\xbe\x7b\xac"
+ "\xb5\x37\x9c\x23\xa8\xbd\xfb\xcd\xe0\xce\xd9\xc5\xd7\xde\xa4\x0d"
+ "\xe0\x93\x95\xe2\xda\xbb\x7f\x0f\xc2\x2f\xfd\x6e\x12\x7e\x21\x3e"
+ "\xb5\xd6\xde\xfd\x4e\x34\xad\xbd\x09\x86\xd8\x7e\x8a\x6a\xef\xfe"
+ "\xee\xd6\xda\xfb\x99\x10\x61\xed\x3d\xe0\x2a\xc5\xd1\x80\xd5\x7c"
+ "\xed\xdd\x7f\xc2\xc3\xa1\xbd\x45\xb1\x55\xc0\xd7\xde\x03\xfa\x4a"
+ "\xd7\xde\x03\xa6\x48\xd3\xde\x18\x73\x42\xda\x7b\xc0\x6e\x4b\xcc"
+ "\xf1\xb5\xf7\x80\xe3\xc2\xda\x7b\xc0\x79\xbe\xf6\xc6\xed\x0b\x69"
+ "\xef\x81\xed\x78\xed\x5b\x69\xef\x81\x7d\xf8\xda\x9b\x1c\x47\xb5"
+ "\xf7\xc0\x42\xc2\xa1\x4f\xdf\x91\xae\xbd\x07\xee\x16\xd7\xde\x03"
+ "\xf7\xf1\xb5\xf7\x40\xee\xbd\xc2\xc0\x0a\xa2\xbd\x07\x66\x91\xed"
+ "\x4f\xd7\x98\x6f\xa7\xda\x9b\x6c\xa7\xda\x7b\x60\xb5\xfd\xda\xdb"
+ "\xad\x15\x6a\x6f\x95\x0d\xed\xad\x7a\x48\xb5\xb7\xcf\x52\x79\xda"
+ "\xdb\x47\x74\xed\xb6\x6d\x0d\x18\xe0\x4b\x35\x60\x80\xaf\xb8\x06"
+ "\x1c\x34\xd6\xb6\x06\xf4\x8b\xa7\x1a\xf0\xf9\xf3\x84\xa3\x9f\x3f"
+ "\x42\x38\xfa\xf9\xa5\xd2\x35\xe0\xe0\x7b\x8f\x34\xa0\x14\x0d\xf8"
+ "\x1c\xa2\x1a\x70\xf0\x71\x79\x1a\x70\xf0\x31\xbe\x06\x0c\xb8\x68"
+ "\xad\x01\x9f\xef\x6b\xbf\x06\x7c\x7e\xb4\x3c\x0d\xf8\x7c\x88\x7d"
+ "\x1a\xf0\xf9\x3c\x61\x0d\x38\x68\x9c\xb8\x06\x24\xfb\xac\xc7\x6e"
+ "\xbf\xd1\x74\xec\xf6\xeb\xdc\xfa\x35\xa0\xef\x21\xe1\x71\xda\xf7"
+ "\x38\xd1\x80\xcf\xef\x69\x7e\x0d\xf8\xfc\x1e\x61\x0d\xe8\xc7\xbd"
+ "\xff\x7f\x3e\xdf\x5a\x03\xc2\x39\x82\x1a\xd0\x6f\x16\x77\xce\x1e"
+ "\xbe\x06\x24\x6d\x00\x9f\xac\x16\xd7\x80\xfe\x7d\x08\xbf\xf8\xdd"
+ "\x21\xfc\x42\x7c\x6a\xad\x01\xfd\x8a\x9b\xd6\x80\x04\x43\x6c\x3f"
+ "\x45\x35\xa0\xbf\xa7\xb5\x06\x1c\x14\x26\xac\x01\x5f\xb8\x4e\x71"
+ "\xf4\xc2\x3a\xbe\x06\xf4\x9f\xf2\x70\x68\x40\x51\x6c\x1d\xe2\x6b"
+ "\xc0\x17\x06\x48\xd7\x80\x2f\x44\x4a\xd3\x80\x18\x73\x42\x1a\xf0"
+ "\x85\x3c\x4b\xcc\xf1\x35\xe0\x0b\x27\x84\x35\xe0\x0b\x17\xf9\x1a"
+ "\x10\xb7\x2f\xa4\x01\x03\xda\xf3\xda\xb7\xd2\x80\x01\x7d\xf9\x1a"
+ "\x90\x1c\x47\x35\x60\x40\x11\xe1\x50\x9f\x7b\xd2\x35\x60\x40\x9e"
+ "\xb8\x06\x0c\x38\xc0\xd7\x80\x01\x29\x44\xeb\x05\x68\x89\x06\x0c"
+ "\xc8\x26\xdb\x7d\xea\xcc\xb7\x53\x0d\x48\xb6\x53\x0d\x18\xa0\xb3"
+ "\xa5\x01\x6d\x6b\x87\xc0\x14\xaa\x1d\x02\x53\xcc\xb5\xc3\x09\x9e"
+ "\x76\x18\xb2\xce\xb6\x76\x18\x56\x46\xb5\xc3\xd0\x41\xe4\xd9\x1e"
+ "\xea\x49\x9e\xed\x17\xd9\xda\x5d\x09\xa3\x61\x8c\x07\xed\x90\x77"
+ "\x2d\x9f\x68\x87\x6b\x75\x8a\x8f\x6f\x70\xda\xa1\x1a\xb9\xac\x9d"
+ "\xcd\x69\x87\xa9\x58\x3b\xbc\x38\x1a\x6b\x07\xd7\x6c\xd0\xa8\xa6"
+ "\xef\x76\xc5\x80\x66\xad\x84\xbf\xe1\xb9\xf9\x06\xda\x28\x01\x5d"
+ "\x99\x86\xcf\xc7\x75\xb2\xa0\x2d\xfc\x3c\x61\xed\x9a\xb7\x58\xdb"
+ "\x86\xfd\x3e\x24\xe8\x0a\x23\xe8\x0b\xac\x2d\x58\x0d\x71\x9b\xd3"
+ "\x10\xb7\x89\x86\xc0\x35\xb3\x70\xad\xac\xf8\x4a\xc6\x68\x98\xef"
+ "\xdd\x31\x34\x0a\xa0\x77\x07\xe3\x17\x0e\xc6\xeb\x8d\x75\x55\x88"
+ "\x99\xef\xdd\x21\x7b\x1e\xf2\xf8\x8c\xd3\x13\x1d\x96\x3a\x75\x60"
+ "\x6e\x47\xb7\xeb\x50\x43\x74\x69\x9e\xb1\x90\xe8\xd2\xf9\x5e\x8f"
+ "\x83\x0e\xea\xbf\xe5\x16\xd5\x11\x1b\xb1\x86\x98\xef\xad\xae\x99"
+ "\xef\xdd\xfd\xf6\x6d\xef\x9e\x58\x1f\xf1\x35\x44\x2d\xae\xdd\x02"
+ "\xba\xb4\x9c\xd5\x10\x6c\x4d\xad\xf7\xbd\x11\xae\xcf\x07\x7a\xd8"
+ "\x69\x20\xe8\xd2\x67\xba\x42\xdf\x8b\x91\xca\x70\xdb\xbb\x6b\xd2"
+ "\x08\xd4\xbd\xb4\xc0\x00\x36\xba\x83\x9f\x7f\x15\xae\xdd\x54\x14"
+ "\x71\x0e\xe1\xba\x44\xac\x36\xc5\xb5\x89\xe6\x7b\x2b\xa0\xcd\x80"
+ "\x4f\xe7\x99\xe9\x52\x4f\x93\x2e\x7d\xb1\xb3\x3c\x5d\xfa\xa2\x17"
+ "\x5f\x53\x0c\xf7\xb3\xd6\x14\x2f\x26\xd8\xaf\x29\x5e\xdc\x26\x4f"
+ "\x53\xbc\x98\x6b\x9f\xa6\x18\xea\x64\xa9\x29\x76\xb3\x9a\x62\x48"
+ "\x1a\xc6\xa0\xb0\xa6\x20\xfb\xac\xc7\x82\x61\xdb\xe8\x58\x30\x6c"
+ "\x56\xeb\xd7\x14\xc3\x54\xc2\xbc\x3f\xac\x33\xd1\x14\x43\x51\xf3"
+ "\x6b\x8a\xa1\x48\x58\x53\x0c\xe3\xde\x7f\x0d\x75\xb6\xd6\x14\x70"
+ "\x8e\xa0\xa6\x18\x76\x84\x3b\x07\xf1\x35\x05\x69\x03\x78\xe6\xbc"
+ "\xb8\xa6\x78\x69\x11\xe1\x9d\x97\x46\x12\xde\x21\x3e\xb5\xd6\x14"
+ "\x2f\xf5\x68\x5a\x53\x10\x0c\xb1\xfd\x14\xd5\x14\x2f\xcd\xb0\xd6"
+ "\x14\x43\xd6\x0a\x6b\x8a\xc0\xe1\x14\x47\x2f\x5f\xe4\x6b\x8a\x97"
+ "\xf6\x3d\x1c\x9a\x42\x14\x5b\x2a\xbe\xa6\x78\x79\xa9\x74\x4d\xf1"
+ "\xf2\x01\x69\x9a\x62\x28\x12\xd6\x14\x81\x4e\x96\x98\xe3\x6b\x8a"
+ "\xc0\x6e\xc2\x9a\x22\xd0\x8f\xaf\x29\x70\xfb\x42\x9a\x22\x30\x92"
+ "\xd7\xbe\x95\xa6\x08\x4c\xe0\x6b\x0a\x72\x1c\xd5\x14\xc3\xd5\x84"
+ "\x43\x87\xf8\x49\xd7\x14\xc3\x9d\xc4\x35\xc5\xf0\x76\x7c\x4d\x11"
+ "\x58\x41\xb4\xc3\x70\x5f\xa2\x29\x02\x75\x64\xfb\x10\x5f\xf3\xed"
+ "\x54\x53\x90\xed\x54\x53\x0c\x0f\xb2\x3f\xaf\xf4\x68\xcd\x64\xcb"
+ "\xe4\x95\x5e\x39\x2b\x6f\xfc\x7e\xa5\xfc\xd1\x9a\x49\xa9\xef\x74"
+ "\x87\x9b\xcd\xa7\x0c\x1a\x2b\x4f\xaf\x04\x85\x3d\x9a\x3f\x2c\xd5"
+ "\xee\xaf\xaa\xa9\xdd\x47\x9c\x90\x67\xf7\x11\x85\x8f\xe6\x30\x48"
+ "\xb5\x7b\x50\x16\xb5\xfb\xeb\xc3\xe5\xd9\xfd\xf5\x40\x79\xf9\xeb"
+ "\x50\x15\x8d\x41\x43\x55\xe2\x31\x68\xb0\xbb\xed\x18\x34\x24\x9c"
+ "\xc6\xa0\x6f\x1c\x24\x5a\xf0\x8d\x1c\xa2\x05\xdf\x60\xf3\x36\x89"
+ "\x38\x06\xdd\x1e\x19\xf1\xe5\xbc\x02\x05\xf3\x97\x5e\xba\xbc\x79"
+ "\x75\x0a\x5c\xaf\x5a\x8f\x63\x50\xb0\xf3\xba\x7a\x1c\x83\x1e\xe3"
+ "\xf2\xd7\x23\xcf\x94\x54\xd5\x21\x88\x71\xf2\xc9\x18\x19\x1c\x09"
+ "\x58\x50\x96\xd6\xd5\xb1\xc7\xe0\x7d\xdf\xdc\x2a\x50\xa4\xd5\x5b"
+ "\xe4\xb6\xa1\x4d\x5c\x47\xd8\x3c\xb7\x8d\x73\xda\xf7\x76\xf6\xf2"
+ "\x31\xe5\xb5\x0d\x99\x6f\xa5\x35\x95\xdb\xb6\xcc\x6b\xe7\xd4\x23"
+ "\x8f\x87\x37\xb7\xfd\x9a\x8a\xe6\xb6\x47\x6e\x93\x97\xdb\x1e\x99"
+ "\xcb\x8f\x43\x43\x0f\x5b\xc7\xa1\x6f\xb4\xb1\x3f\x0e\x7d\xa3\xaf"
+ "\x3c\x9c\xbf\xe1\x6d\x5f\x1c\xfa\xc6\x6a\xe1\x38\x34\xd8\x23\x51"
+ "\x34\x0e\x25\xfb\xac\xe3\x87\x90\xbe\x34\x7e\x18\x75\xa7\xf5\xc7"
+ "\xa1\xa3\xb2\x84\x63\x85\x51\xdb\x48\x1c\xfa\x46\x4a\xf3\xc7\xa1"
+ "\x6f\xa4\x08\xc7\xa1\x21\x9e\x44\xb3\xbf\xb1\xd6\x3a\x0e\x85\x73"
+ "\x04\xe3\xd0\x90\x91\xdc\x39\x29\xfc\x38\x94\xb4\x01\x5c\x33\x5d"
+ "\x3c\x0e\x1d\xed\x44\xb8\x27\xe4\x14\xe1\x1e\xe2\x53\xeb\x38\x34"
+ "\x64\x77\xd3\x71\x28\xc1\x10\xdb\x4f\xd1\x38\x34\xe4\xa6\x75\x1c"
+ "\x1a\xac\x12\x8e\x43\xc7\x9c\xa0\x38\x1a\x33\x83\x1f\x87\x8e\x1e"
+ "\xf2\x70\xc4\xa1\xa2\xd8\xca\xe2\xc7\xa1\x63\xda\x49\x8f\x43\xc7"
+ "\x0c\x93\x16\x87\x62\xcc\x09\xc5\xa1\x63\x56\x5b\x62\x8e\x1f\x87"
+ "\x8e\xd9\x29\x1c\x87\x8e\x39\xcc\x8f\x43\x71\xfb\x42\x71\xe8\x98"
+ "\xab\xbc\xf6\xad\xe2\xd0\xd0\x36\xfc\x38\x94\x1c\x47\xe3\xd0\xd0"
+ "\x5d\x84\x43\x5f\x3f\x28\x3d\x0e\x0d\x5d\x2d\x1e\x87\x86\xa6\xf3"
+ "\xe3\xd0\xd0\x28\x12\x6f\x86\x1e\x22\x71\x68\x68\x1c\xd9\xfe\x7a"
+ "\x81\xf9\x76\x1a\x87\x92\xed\x34\x0e\x0d\x2d\x7a\xb4\x9e\xb2\xb5"
+ "\xc5\xa1\x63\x23\xe5\xc5\xa1\x63\x23\x1e\xc5\x43\x52\x75\x79\xa8"
+ "\x96\xea\xf2\x37\x65\xd6\x7f\x78\xf3\x01\xc7\xff\x0f\x63\x3c\x34"
+ "\x76\x17\xb5\xfb\x38\x99\xf1\xff\x38\xd1\xf8\xdf\x76\x3c\x34\x59"
+ "\x4d\xe3\xa1\xc9\x6a\xf1\x78\x68\x7c\x0f\xdb\xf1\xd0\x84\x68\x1a"
+ "\x0f\xbd\x7d\x82\x68\x92\xb7\xf3\x88\x26\x79\x7b\x96\xf4\x78\xe8"
+ "\xad\xcb\xfc\x78\x68\xfc\xdc\x47\xf1\x90\xdc\x78\xe8\x8f\x6a\x1a"
+ "\x0f\xbd\xb5\x4f\x5e\x3c\xf4\x56\x3e\x3f\x1e\x9a\x5c\x6c\x1d\x0f"
+ "\xbd\xed\x69\x7f\x3c\xf4\xf6\x10\x79\x38\x7f\x3b\xc0\xbe\x78\xe8"
+ "\xed\xcd\xc2\xf1\xd0\xf8\xde\xe2\xf1\x10\xd9\x67\xad\x63\x27\x0c"
+ "\xa1\x3a\x76\x42\x9b\xd6\x1f\x0f\x85\xef\x12\xd6\xac\xe1\xfb\x48"
+ "\x3c\xf4\x76\x56\xf3\xc7\x43\x6f\x67\x09\xc7\x43\x13\xfa\x10\xed"
+ "\xf8\x76\xb6\x75\x3c\x04\xe7\x08\xc6\x43\x13\x26\x70\xe7\x64\xf1"
+ "\xe3\x21\xd2\x06\x70\xcd\x02\xf1\x78\x68\xa2\x3b\xe1\x9e\x09\x17"
+ "\x09\xf7\x10\x9f\x5a\xc7\x43\x13\x0e\x36\x1d\x0f\x11\x0c\xb1\xfd"
+ "\x14\x8d\x87\x26\x3a\x59\xc7\x43\xe3\xd5\xc2\xf1\xd0\x24\xb3\x3a"
+ "\x45\x93\x16\xf1\xe3\xa1\x89\x23\x1f\x8e\x78\x48\x14\x5b\xbb\xf8"
+ "\xf1\xd0\xa4\xce\xd2\xe3\xa1\x49\xa3\xa5\xc5\x43\x18\x73\x42\xf1"
+ "\xd0\xa4\xcd\x96\x98\xe3\xc7\x43\x93\x0e\x08\xc7\x43\x93\x8a\xf9"
+ "\xf1\x10\x6e\x5f\x28\x1e\x9a\x74\x8f\xd7\xbe\x55\x3c\x34\xd9\x93"
+ "\x1f\x0f\x91\xe3\x68\x3c\x34\xb9\x80\x70\xe8\xb8\x13\xd2\xe3\xa1"
+ "\xc9\x9b\xc5\xe3\xa1\xc9\xdb\xf8\xf1\xd0\xe4\x58\x12\xf7\x4c\x2e"
+ "\x22\xf1\xd0\xe4\x14\xb2\x7d\x5c\xa1\xf9\x76\x1a\x0f\x91\xed\x34"
+ "\x1e\x9a\x5c\xf1\x68\xad\x65\x6b\x8b\x87\xa6\xce\x95\x17\x0f\x4d"
+ "\x8d\x79\xa4\xcb\xa5\xea\xf2\xc9\x3a\xaa\xcb\xa7\x5d\x95\xa7\x57"
+ "\xa6\x89\x7f\xff\xdd\xa6\x2e\x7f\xbf\x80\xea\xf2\xf7\x0b\xc4\x75"
+ "\x79\xc4\x41\xdb\xba\x7c\x3a\xa2\xba\xfc\xdd\x48\x32\x36\xbe\x3b"
+ "\x82\x8c\x8d\xef\xb6\x91\xae\xcb\xdf\x49\xe0\xeb\xf2\xc8\x76\x8f"
+ "\x74\xb9\x5c\x5d\x3e\xb5\x80\xea\xf2\x77\x46\xca\xd3\xe5\xef\x04"
+ "\xf3\x75\x79\xf4\x74\x6b\x5d\xfe\x4e\x9e\xfd\xba\xfc\x9d\x53\xf2"
+ "\x70\xfe\x4e\x99\x7d\xba\xfc\xdd\x41\xc2\xba\x3c\xe2\x90\xb8\x2e"
+ "\x27\xfb\xac\xf5\x54\xd4\x29\xaa\xa7\xa2\x72\x5a\xbf\x2e\x8f\x0a"
+ "\x14\xd6\x4e\x51\x23\x89\x2e\x7f\xd7\xa7\xf9\x75\xf9\xbb\x3e\xc2"
+ "\xba\x3c\xea\x30\xd1\x30\xef\xfa\x5a\xeb\x72\x38\x47\x50\x97\x47"
+ "\xdd\xe4\xce\xf1\xe1\xeb\x72\xd2\x06\x70\x4d\x7b\x71\x5d\x3e\x7d"
+ "\x37\xe1\x9e\xe9\x8b\x08\xf7\x10\x9f\x5a\xeb\xf2\xe9\x63\x9b\xd6"
+ "\xe5\x04\x43\x6c\x3f\x45\x75\xf9\xf4\xcd\xd6\xba\x3c\xa2\x40\x58"
+ "\x97\xbf\x3f\x97\xe2\xe8\x7d\x77\xbe\x2e\x9f\x7e\xf1\xe1\xd0\xe5"
+ "\xa2\xd8\x0a\xe4\xeb\xf2\xf7\xf6\x49\xd7\xe5\xef\x5d\x96\xa6\xcb"
+ "\x31\xe6\x84\x74\xf9\xfb\x83\x2c\x31\xc7\xd7\xe5\xef\x8f\x16\xd6"
+ "\xe5\xef\x4f\xe7\xeb\x72\xdc\xbe\x90\x2e\x7f\x3f\x9d\xd7\xbe\x95"
+ "\x2e\x7f\x3f\x8f\xaf\xcb\xc9\x71\x54\x97\x47\x87\x11\x0e\x8d\x88"
+ "\x94\xae\xcb\xa3\x07\x89\xeb\xf2\xe8\x21\x7c\x5d\x1e\xed\x4a\xf4"
+ "\x77\x74\x14\xd1\xe5\xd1\x6a\xb2\x3d\x22\xc2\x7c\x3b\xd5\xe5\x64"
+ "\x3b\xd5\xe5\xd1\xb1\x8f\xd6\x61\xb6\x36\x5d\xfe\x41\x3b\x79\xba"
+ "\xfc\x03\x17\x79\xfa\x70\x6e\x39\xd5\x87\x73\xcb\xc5\xf5\xe1\x07"
+ "\x67\x6d\xeb\xc3\x39\x6a\xaa\x0f\x67\x2d\x25\x1c\x3d\x6b\x3a\xe1"
+ "\xe8\x59\x7d\xa4\xeb\xc3\x99\x39\x7c\x7d\xf8\x61\xdf\x47\xfa\x50"
+ "\xae\x3e\x8c\x4e\xa1\xfa\x70\xe6\x0c\x79\xfa\x70\x66\x34\x5f\x1f"
+ "\xce\x5b\x69\xad\x0f\x67\x16\xdb\xaf\x0f\x67\xde\x94\xa7\x0f\x67"
+ "\xea\xec\xd3\x87\xb3\xc6\x0a\xeb\xc3\x0f\x2a\xc4\xf5\x21\xd9\x67"
+ "\x3d\xae\xcf\xbe\x49\xc7\xf5\xd9\x87\x5b\xbf\x3e\x9c\x1d\x21\x3c"
+ "\x86\xcf\x9e\x41\xf4\xe1\xac\xb0\xe6\xd7\x87\xb3\xc2\x84\xf5\xe1"
+ "\xec\xf3\x64\x2c\x9d\x35\xce\x5a\x1f\xc2\x39\x82\xfa\x70\x8e\x3b"
+ "\x77\x4e\x18\x5f\x1f\x92\x36\x80\x6b\x06\x88\xeb\xc3\x39\xdc\x3b"
+ "\xa3\x39\x9b\x09\xf7\x10\x9f\x5a\xeb\xc3\x39\x73\x9b\xd6\x87\x04"
+ "\x43\x6c\x3f\x45\xf5\xe1\x9c\x83\xd6\xfa\xf0\x83\x72\x61\x7d\x38"
+ "\x37\x9d\xe2\x68\xee\x20\xbe\x3e\x8c\x71\x7a\x38\xf4\xa1\x28\xb6"
+ "\x22\xf8\xfa\x30\xe6\x94\x74\x7d\x38\xb7\x8d\x34\x7d\x88\x31\x27"
+ "\xa4\x0f\xe7\x8e\xb5\xc4\x1c\x5f\x1f\xce\x9d\x25\xac\x0f\xe7\xae"
+ "\xe4\xeb\x43\xdc\xbe\x90\x3e\x9c\xbb\x8f\xd7\xbe\x95\x3e\x9c\x5b"
+ "\xcc\xd7\x87\xe4\x38\xaa\x0f\xe7\x91\x6f\x70\x2b\x3e\x58\x2a\x5d"
+ "\x1f\xce\x1b\x2b\xae\x0f\xe7\x4d\xe0\xeb\xc3\x79\xfd\x89\x0e\x9c"
+ "\xb7\x82\xe8\xc3\x79\x81\x64\xfb\x07\xc9\xe6\xdb\xa9\x3e\x24\xdb"
+ "\xa9\x3e\x9c\x97\x21\x7f\x8d\xe6\xe2\x60\xaa\x2b\x16\x07\x8b\xeb"
+ "\x8a\xf9\x83\x6c\xeb\x8a\x8f\xd2\xa8\xae\x58\x70\x93\x3c\xdb\x0b"
+ "\xce\x90\x67\x7b\x01\x5b\x9f\x32\xa1\x18\x74\x45\xcf\xc8\x88\xbd"
+ "\x37\xf2\x59\x5d\xf1\xe5\xec\x3a\x05\xe8\x3c\x67\x23\xd6\x15\xa0"
+ "\xe7\xd6\x2e\xc4\xba\xa2\x92\x5b\xa3\xb9\xa0\x7d\x71\x9c\xb9\xae"
+ "\x98\xbf\x92\x5d\xaf\x89\xb5\x45\x4d\x1d\x7b\x1c\xde\x2f\xb4\x7e"
+ "\xf3\xf0\x6c\x6e\xfd\x26\xb4\x6d\xbe\x6e\x93\x5d\xcb\x79\x03\x74"
+ "\xc7\x3b\xe0\x0b\x33\xdd\xf1\x68\xfd\x26\x1e\xe7\x63\x65\xae\xff"
+ "\x88\x2d\xe7\xeb\x8d\xc5\x77\xac\xf5\xc6\x82\x61\xf6\xeb\x8d\x05"
+ "\x91\xf2\xf4\xc6\x82\x08\xfb\xf4\xc6\x82\x23\xc2\x7a\x63\xbe\x2f"
+ "\xc6\xa7\xb0\xde\x20\xfb\xac\xc7\x89\x8f\x22\xe9\x38\xf1\xd1\x80"
+ "\xd6\xaf\x37\x16\x96\x09\x8f\x09\x0b\xcf\x12\xbd\xb1\x40\xd3\xfc"
+ "\x7a\x63\x81\x46\x58\x6f\x7c\x34\x9a\x70\xf3\x82\x63\xd6\x7a\x03"
+ "\xce\x11\xd4\x1b\x1f\x2d\xe5\xce\xd1\xf0\xf5\x06\x69\x03\x38\x28"
+ "\x47\x5c\x6f\xc4\x0d\x21\x9c\x14\xd7\x8e\x70\x12\xf1\xa9\xb5\xde"
+ "\xf8\xe8\x62\xd3\x7a\x83\x60\x88\xed\xa7\xa8\xde\x88\xeb\x6b\xad"
+ "\x37\xe6\xfb\x08\xeb\x8d\xc5\x4e\x14\x47\x8b\xb6\xf1\xf5\x46\xdc"
+ "\xdc\x87\x43\x6f\x88\x62\xab\x8c\xaf\x37\x16\x0d\x97\xae\x37\x16"
+ "\x2d\x90\xa6\x37\x30\xe6\x84\xf4\xc6\xa2\x23\x96\x98\xe3\xeb\x8d"
+ "\x45\xe7\x85\xf5\xc6\xa2\x3b\x7c\xbd\x81\xdb\x17\xd2\x1b\x8b\x7b"
+ "\xf0\xda\xb7\xd2\x1b\x8b\x87\xf1\xf5\x06\x39\x8e\xea\x8d\xc5\x5a"
+ "\x2e\x66\x3b\x2b\x5d\x6f\x2c\x3e\x22\xae\x37\x16\x9f\xe0\xeb\x8d"
+ "\xc5\xd9\x44\x57\x2c\xae\x21\x7a\x63\x71\x3e\xa7\x43\xca\xcd\xb7"
+ "\x53\xbd\x41\xb6\x53\xbd\xb1\xc4\xd9\xce\x7c\x54\x86\x94\xf5\x9b"
+ "\x79\x77\xf9\xf9\x28\x53\x2e\x4a\xdf\xff\xe9\xa0\xc6\x7c\x14\x8c"
+ "\xf3\xd3\x74\xe2\xf9\x28\x3c\x6e\xd3\x7c\xd4\x79\x96\xa7\x68\x3e"
+ "\x4a\xcb\xe6\xa3\x70\x2e\x0a\x62\xf5\xc6\x5c\x94\xf1\x23\xeb\xb5"
+ "\x9b\x79\x46\xe9\xb9\xa8\xa9\x73\x55\x68\x0b\x3b\x76\x37\xe4\x93"
+ "\x5c\x54\x79\x63\x2e\x0a\x8f\xd9\x86\x5a\xeb\x5c\x14\x1e\xab\x69"
+ "\x2e\xea\x9c\xcc\x5c\x54\x7c\xa6\xbc\xb1\x3b\xfe\x01\x7f\xff\xef"
+ "\x61\x5c\xbb\xb9\xc4\x8b\xbe\x23\x4e\x94\xf9\xfd\xbf\x44\xf1\xef"
+ "\x9f\x3f\x9a\xab\x2c\x62\xf7\xf8\x0a\x6a\xf7\xa4\x95\xf2\xec\x9e"
+ "\xb4\xe2\xd1\x9c\x08\xa9\x76\x4f\x1c\x47\xed\x9e\x6c\x90\x67\xf7"
+ "\x64\xbd\xbc\x9c\x77\x8a\x8e\xc6\xa6\x29\x3a\xf3\xd8\xb4\x30\xc8"
+ "\x3c\x36\x5d\x5a\x6c\x3b\x36\x5d\x15\x40\x63\xd3\x15\x9b\x89\x0e"
+ "\x5c\x91\x40\x74\xe0\x0a\x76\x4c\x4e\x18\x8e\xd8\x98\x54\x8f\xe3"
+ "\xd3\x0f\xea\x14\x7b\xaf\x69\x14\xfa\x65\x24\x2e\x2d\xd5\x17\xa1"
+ "\x62\x5d\x1d\xfa\x78\x21\x72\x5e\x7d\x03\x39\x7f\x7e\xab\x4e\xe1"
+ "\x36\x13\xb9\xc0\xb8\x00\xba\xa9\x08\x74\x44\x0e\x8a\x49\xc4\x31"
+ "\xeb\xf2\x03\xa5\x31\x3a\xb3\x98\x75\x99\x1f\x8d\x57\xe1\xb8\x98"
+ "\x3a\xf4\xed\x07\x1a\x05\x8e\x4b\x1b\x32\xdf\x4a\x6b\x18\xf0\x74"
+ "\x20\x5b\x63\xc8\x3c\x2f\x0e\xd7\x56\x4f\xe5\xe7\xc5\xeb\x33\xdf"
+ "\xca\xb8\x97\xf7\x74\x10\x5b\xbb\xb0\x0f\xcd\x8f\xdb\x9b\x17\xff"
+ "\xac\x1e\x79\x98\x6a\x17\xe2\x71\xf0\xe1\xcb\x8b\x27\x15\xd1\xbc"
+ "\xf8\xf2\xa5\xf2\xf2\xe2\xcb\x93\xf9\x71\xea\xea\x1c\xeb\x38\x75"
+ "\xf9\x65\xfb\xe3\xd4\x15\xed\xe4\x3d\x0b\x2b\x5c\xec\x8b\x53\x57"
+ "\xcc\xb0\x8c\x53\x77\x25\xe2\x38\x75\x69\x19\xc6\xaa\x70\x9c\x4a"
+ "\xf6\x59\xc7\x17\xab\xda\xd1\xf8\x62\xe5\x99\xd6\x1f\xa7\xae\x8c"
+ "\x13\x8e\x25\x56\x2e\x25\x71\xea\x8a\xe8\xe6\x8f\x53\x57\x44\x0b"
+ "\xc7\xa9\x2b\xef\x10\x4d\xbf\x22\xda\x14\x73\xd2\x38\x15\xce\x11"
+ "\x8c\x53\x57\xf5\xb5\x3c\x87\xc4\xa9\x2b\x66\x92\x38\x75\xd5\x08"
+ "\xf1\x38\x75\xd5\x45\xc2\x4f\xab\xf6\x11\x7e\x22\x3e\xb5\x8e\x53"
+ "\x57\xad\x6e\x3a\x4e\x25\x18\x62\xfb\x29\x1a\xa7\xae\x3a\x65\x1d"
+ "\xa7\x2e\x2d\x12\x8e\x53\x53\x76\x53\x1c\xa5\x8c\xe4\xc7\xa9\x7f"
+ "\xea\xfc\x70\xc4\xa9\xa2\xd8\x8a\xe3\xc7\xa9\x7f\xba\x2a\x3d\x4e"
+ "\x4d\xe9\x26\x2d\x4e\xc5\x98\x13\x8a\x53\x53\xb8\xfa\xe7\x04\x2f"
+ "\xd6\x71\x6a\xca\x4a\xe1\x38\x35\x25\x87\x1f\xa7\xe2\xf6\x85\xe2"
+ "\xd4\x94\x13\xbc\xf6\xad\xe2\xd4\x94\xcb\xfc\x38\x95\x1c\x47\xe3"
+ "\xd4\xd5\x29\x84\x43\x97\x2e\x90\x1e\xa7\xae\x9e\x21\x1e\xa7\xae"
+ "\x9e\xcb\x8f\x53\x57\x07\x91\x78\x74\x75\x36\x89\x53\x57\x87\x93"
+ "\xed\x4b\x63\xcd\xb7\xd3\x38\x95\x6c\xa7\x71\xea\xea\x3d\x76\xc6"
+ "\xa9\x59\xcd\x14\xa7\x06\x3f\x5c\x71\xaa\x21\xa6\x65\xe3\xd4\x8f"
+ "\x87\xc9\x8b\x53\x3f\x1e\x6a\x87\x6e\xcf\x68\x42\xb7\x07\xfd\x6f"
+ "\xe9\xf6\xd5\x1a\xaa\xdb\xd7\x1e\x90\xa7\x55\xd6\xee\x7f\x90\x76"
+ "\x7f\xf8\x6c\xfe\xb1\xd9\xb7\x7a\x52\x65\xd6\xff\x48\xf5\x7e\x14"
+ "\xa3\x4a\xb5\xfb\x5a\x3d\xb5\xfb\x7a\x99\xf5\x3f\xd7\xe7\xca\x8b"
+ "\x51\x3f\x31\x9b\xb7\xff\x09\x6f\xde\xfe\xf7\xbc\xf7\xa7\x69\x73"
+ "\x6d\xc7\xa8\x99\x66\xf3\xf6\x37\x72\xf3\xf6\x37\x72\xf3\xf6\x37"
+ "\xb2\xf3\xf6\xe3\x0f\x90\x18\xf5\x2e\x8e\x51\xaf\x40\x8c\xfa\x5e"
+ "\x84\x42\xcf\xd5\xc6\xc7\x73\xad\x8a\x21\xce\xc4\x71\x69\x69\x1c"
+ "\xfc\x3f\x56\x87\x3e\x9e\x87\x9c\xd7\x40\x7c\xb9\x1b\xc6\xab\xdd"
+ "\x0b\x75\x8a\x94\x0f\x80\xeb\xcb\xf3\x90\x5b\x34\xc4\xae\xb7\x70"
+ "\xec\x7a\x0c\xe2\xd2\x95\x5c\xec\xba\x21\xa1\x34\xd6\x3c\x76\x4d"
+ "\xbb\xc9\xc6\xae\x3a\x32\x8f\xab\x34\x16\x62\x57\xb8\x1e\xae\xb5"
+ "\x6f\x1e\xbb\xde\x83\xd8\xb4\x1e\x62\xd3\xb4\x6b\x16\x71\xec\x7b"
+ "\xd6\x71\xec\x3d\xcf\xb7\xb2\xea\x06\x3c\x1d\x8c\xe3\xd8\xbb\x3b"
+ "\xff\x17\xe3\xd8\xd4\x18\x1a\xc7\x6e\x90\x39\xff\x7f\x83\xc5\xfc"
+ "\xff\x2c\x81\xf9\xff\x1b\x24\xcc\xff\xdf\x20\x73\xfe\xff\x06\x3b"
+ "\xe7\xff\x6f\xb4\x9a\xff\xff\x17\xf6\x7d\x6b\x5a\x2c\xc6\xb3\x70"
+ "\x1c\x4b\xf6\x59\xc7\x1f\x19\x66\xf3\xff\x33\x1e\x82\xf9\xff\x19"
+ "\x22\x73\xb4\x33\xb8\xf9\xff\x1b\xef\xc3\xfc\xff\x8d\x22\xf3\xff"
+ "\x33\xb8\xf9\xff\x1b\x7d\xac\xe3\xd8\x8d\x22\xf3\xff\x33\x6e\x5a"
+ "\x9e\x43\xe2\xd8\x8d\xdc\xfc\xff\x4c\x1b\xf3\xff\x33\xb9\xf9\xff"
+ "\x99\xdc\xfc\x7f\xe2\x53\xeb\x38\x36\xd3\x8e\xf9\xff\x1b\xb9\xf9"
+ "\xff\x1b\x6d\xcc\xff\xcf\x14\x98\xff\x9f\x16\x23\x1c\xc7\x7e\x62"
+ "\x36\xff\xff\x13\x8b\xf9\xff\x99\x0f\xc9\xfc\x7f\x51\x6c\x59\xcc"
+ "\xff\xdf\x24\x63\xfe\xff\x26\x89\xf3\xff\x37\x8a\xcc\xff\xff\x84"
+ "\x9b\xff\xbf\x51\x64\xfe\xff\x27\x22\xf3\xff\x3f\xb1\x98\xff\xbf"
+ "\x51\x64\xfe\xff\x27\xe9\xbc\xf6\xad\xe2\xd8\x4f\x2c\xe6\xff\x6f"
+ "\xb4\x98\xff\x9f\xc5\xcd\xff\x4f\xeb\x2c\x3d\x8e\xcd\xb2\x31\xff"
+ "\x3f\xcb\x62\xfe\x7f\x16\x37\xff\x3f\x8b\x9b\xff\x9f\xc5\xcd\xff"
+ "\x4f\xf3\x32\xdf\x4e\xe3\x58\xb2\x9d\xc6\xb1\x59\xf6\xce\xff\xcf"
+ "\x70\xb0\x4e\x51\x50\xcb\xcf\xff\x6f\xae\x3a\x45\xa6\x77\xae\x2d"
+ "\x35\xff\xff\x53\x99\xf3\xff\x3f\x15\x9d\xff\xff\x28\xa6\x12\xd2"
+ "\xf6\x59\x29\x54\xdb\x7f\x26\xf3\xfb\xa7\x9f\x89\x7e\xff\xf4\x51"
+ "\x4c\x25\x66\xf7\x4f\xc3\xa8\xdd\xb3\xef\xc8\xb3\x7b\x76\x8d\xbc"
+ "\x98\x6a\x47\x15\x8d\xa9\x76\x54\x89\xbf\xf7\xcb\x39\x6e\x3b\xa6"
+ "\xda\xee\x43\x63\xaa\xdc\x74\xa2\x47\x72\xb9\x6f\xb2\xe7\xfa\x35"
+ "\xdf\x7b\xbf\xad\x79\xfc\xf7\x7e\x5b\x06\x3c\x7a\xef\xd7\x1c\xf1"
+ "\xd2\x67\xc7\x68\xbc\xb4\x75\x91\xbc\x78\x69\x6b\x1c\x3f\x5e\xda"
+ "\x99\x69\x1d\x2f\x6d\x3d\x6f\x7f\xbc\x94\xeb\x24\xef\x59\xc0\xe9"
+ "\x05\x7b\xe2\xa5\xdc\x48\xe1\xf7\x7e\x39\x85\xe2\xef\xfd\xc8\x3e"
+ "\x6b\x9d\xbb\xdd\x6c\x5e\xe1\xb6\xe2\xd6\x1f\x2f\x6d\x8b\x11\xd6"
+ "\xb4\xdb\x16\x91\x78\x29\x37\xa2\xf9\xe3\xa5\xdc\x08\xe1\x78\x69"
+ "\xdb\x75\xa2\x2d\x73\x23\xac\xe3\x25\x38\x47\x30\x5e\xda\xde\xc3"
+ "\xf2\x1c\x12\x2f\xe5\x46\x91\x78\x69\xfb\x30\xf1\x78\x69\x3b\xf7"
+ "\x5d\xec\xed\xbb\x09\x3f\x11\x9f\x5a\xc7\x4b\xdb\x97\x36\x1d\x2f"
+ "\x11\x0c\xb1\xfd\x14\x8d\x97\xb6\x9f\xb0\x8e\x97\x72\x8e\x09\xc7"
+ "\x4b\x3b\xcc\xbe\x53\xb3\x63\x38\x3f\x5e\xfa\xb3\xfb\xc3\x11\x2f"
+ "\x89\x62\x2b\x86\x1f\x2f\xfd\xf9\xa2\xf4\x78\x69\x87\xa7\xb4\x78"
+ "\x09\x63\x4e\x28\x5e\xda\xc1\x7d\xff\x83\xe0\xc5\x3a\x5e\xda\x91"
+ "\x20\x1c\x2f\xed\xc8\xe4\xc7\x4b\xb8\x7d\xa1\x78\x69\xc7\x11\x5e"
+ "\xfb\x56\xf1\xd2\x8e\xf3\xfc\x78\x89\x1c\x47\xe3\xa5\x9d\xc9\x84"
+ "\x43\x73\x66\x49\x8f\x97\x76\x46\x8a\xc7\x4b\x3b\x67\xf0\xe3\xa5"
+ "\x9d\x43\x49\x5c\xb4\x33\x83\xc4\x4b\x3b\xc3\xc8\xf6\x9c\x99\xe6"
+ "\xdb\x69\xbc\x44\xb6\xd3\x78\x69\xe7\x0e\xfb\xe3\x25\xfb\xeb\x18"
+ "\x3d\xf8\xf9\xa9\xea\x87\x74\x7e\xea\x5f\xfd\xe4\xc5\x4a\x7f\xf5"
+ "\x7d\xa4\xdb\xa5\xea\xf6\x9d\x05\x54\xb7\xef\xca\x93\xa7\x55\x76"
+ "\xed\x91\xa7\xdb\xf3\x73\xa9\x6e\xcf\xcf\x15\xd7\xed\xbb\x13\x6c"
+ "\xeb\xf6\xbc\x2a\xaa\xdb\xf7\x8c\x24\xe3\xe2\x9e\x01\x64\x5c\xfc"
+ "\xe2\x7a\xf3\xe9\xf6\x2f\xa6\xf3\x75\xfb\xee\xcb\x8f\x74\x7b\x73"
+ "\xe8\xf6\xbf\xc6\x53\xdd\xfe\xc5\x20\x79\xba\xfd\x0b\x1f\xbe\x6e"
+ "\xdf\x37\xda\x5a\xb7\x7f\x91\x69\xbf\x6e\xff\xe2\xa0\xbc\x67\xe1"
+ "\x8b\x02\xfb\x74\xfb\x9e\xce\xc2\xba\x7d\x77\xb2\xb8\x6e\x27\xfb"
+ "\xac\xf5\x56\xde\x41\xaa\xb7\xf2\x56\xb6\x7e\xdd\x9e\xe7\x2d\xac"
+ "\xad\xf2\x06\x11\xdd\xbe\xc7\xab\xf9\x75\xfb\x1e\x2f\x61\xdd\x9e"
+ "\xb7\x93\x68\x9c\x3d\x5e\xd6\xba\x1d\xce\x11\xd4\xed\x79\x67\x2d"
+ "\xcf\x21\xba\x7d\x4f\x57\xa2\xdb\xf3\xee\x88\xeb\xf6\xbd\x5c\x5e"
+ "\x61\x6f\x24\xe1\x27\xe2\x53\x6b\xdd\xbe\x77\x48\xd3\xba\x9d\x60"
+ "\x88\xed\xa7\xa8\x6e\xdf\xbb\xd4\x5a\xb7\xef\x8e\x17\xd6\xed\xf9"
+ "\x13\x28\x8e\xbe\xbc\xc7\xd7\xed\x7b\x4f\x3c\x1c\xba\x5d\x14\x5b"
+ "\xde\x7c\xdd\xfe\xe5\x66\xe9\xba\xfd\xcb\x62\x69\xba\x1d\x63\x4e"
+ "\x48\xb7\xe7\x77\xe6\xf0\xd3\x55\x58\xb7\xe7\xfb\x09\xeb\xf6\xfc"
+ "\xd1\x7c\xdd\x8e\xdb\x17\xd2\xed\xf9\x8b\x78\xed\x5b\xe9\xf6\xfc"
+ "\x4c\xbe\x6e\x27\xc7\x51\xdd\xbe\x2f\x80\x1b\xdf\xfa\x48\xd7\xed"
+ "\xfb\x3a\x8b\xeb\xf6\x7d\x3d\xf8\xba\x3d\xbf\x86\xe8\xf3\x7d\x21"
+ "\x44\xb7\xef\xe3\xb6\xef\xee\x6d\xbe\x9d\xea\x76\xb2\x9d\xea\xf6"
+ "\x7d\x93\x1f\xd5\x39\x6a\x6d\x75\x8e\xfe\xef\xa6\x3c\xed\xfe\x7f"
+ "\x3a\x79\x1a\xf2\x2b\x0d\xd5\x90\x5f\x69\xcc\x35\x24\xbf\x1e\xc1"
+ "\xdf\x8e\xd8\xd6\x90\x05\x2e\x54\x43\xfe\x7d\x06\xe1\xe8\xbf\x8f"
+ "\x26\x1c\xfd\x77\xf6\xbd\xb5\xb4\x3a\x47\x07\x56\xf2\xeb\x1c\xed"
+ "\x77\x7f\x54\xe7\x48\xae\x3e\xdc\x67\x36\x0f\xe6\xc0\x58\x79\xfa"
+ "\xf0\x40\x18\x5f\x1f\x7e\x3d\xcb\x5a\x1f\x1e\x38\x60\xbf\x3e\x3c"
+ "\x20\xf3\xfb\x17\x07\xca\xed\xd3\x87\x7f\x1f\x22\x5c\x77\xe0\x6f"
+ "\xc7\xc4\xeb\x1c\x91\x7d\xd6\xe3\xfa\x3f\xcc\xea\x8a\xff\x63\x67"
+ "\xeb\xd7\x87\xff\x08\x16\x1e\xc3\xff\x31\x96\xe8\xc3\xbf\x07\x34"
+ "\xbf\x3e\xfc\x7b\x80\xb0\x3e\xfc\xc7\x71\x32\x96\xfe\x7d\xa8\x75"
+ "\xdd\x01\x38\x47\x50\x1f\xfe\x83\xab\xff\xfd\xf7\x00\xbe\x3e\x24"
+ "\x6d\x00\xd7\x78\x8a\xeb\xc3\x82\x7d\x84\x7b\x0a\x96\x12\xee\x21"
+ "\x3e\xb5\xd6\x87\x05\x13\x9a\xd6\x87\x04\x43\x6c\x3f\x45\xf5\x61"
+ "\xc1\x36\x6b\x7d\xf8\x37\x8d\xb0\x3e\xfc\x6a\x11\xc5\xd1\x57\x9d"
+ "\xf9\xfa\xb0\xe0\xea\xc3\xa1\x0f\x45\xb1\x15\xcc\xd7\x87\x07\x0f"
+ "\x4a\xd7\x87\x07\xaf\x4b\xd3\x87\x18\x73\x42\xfa\xf0\xab\x21\x96"
+ "\x98\xe3\xeb\xc3\xaf\xc6\x0b\xeb\xc3\xaf\x66\xf1\xf5\x21\x6e\x5f"
+ "\x48\x1f\x7e\xb5\x99\xd7\xbe\x95\x3e\xfc\xea\x00\x5f\x1f\x92\xe3"
+ "\xa8\x3e\xfc\x3a\x9c\x70\xe8\xdf\x66\x48\xd7\x87\x5f\x0f\x11\xd7"
+ "\x87\x5f\x0f\xe7\xeb\xc3\xaf\x3d\x88\x0e\xfc\x7a\x26\xd1\x87\x5f"
+ "\x7b\x93\xed\x7f\x8b\x36\xdf\x4e\xf5\x21\xd9\x4e\xf5\xe1\xd7\xf1"
+ "\xf6\xaf\xe7\x68\x96\xbc\x6e\x0b\xad\xe7\x68\xae\xbc\x6e\x4b\xaf"
+ "\xe7\x38\xdc\x5e\x9e\x36\x3c\x6c\xcf\xfa\xf7\x47\x73\x60\x1a\x73"
+ "\xba\x5f\xa7\xd1\x9c\xee\x37\x4b\xe5\xe9\x94\x6f\x92\xe5\xe9\xf1"
+ "\xef\xd3\xa8\x1e\xff\x3e\x4d\x7c\x7e\xfb\xb7\x63\x6d\xeb\xf1\xa3"
+ "\xe5\x54\x8f\x7f\xc7\xd5\xe2\xf9\xae\x1b\x19\x13\x8f\x9c\x97\x33"
+ "\xbf\x7d\xcd\x2d\xe4\xfc\xb1\xe5\xfc\xf6\xd3\x87\xc9\xfc\xf6\x79"
+ "\x96\xf3\xdb\x8f\x8c\xe7\xcf\x6f\xff\xf6\x94\xd8\xfc\x76\x9c\xe3"
+ "\x6d\xc8\x7b\x3a\x08\xcf\x6d\x17\x9c\xd7\x3e\xb1\x79\xe7\xb5\x63"
+ "\x5c\x7e\xb6\x98\xe8\xf9\x4f\x1f\x4a\x3d\x7f\x78\x1c\xd5\xf3\x47"
+ "\x7a\xc8\xd3\xf3\x47\xd4\x7c\x3d\xff\xcf\x61\xd6\x7a\xfe\xc8\x4a"
+ "\xfb\xf5\xfc\x91\xdd\xf2\x9e\x93\x23\xbb\xec\xd3\xf3\xdf\xb5\x13"
+ "\x9e\xd7\xfe\xed\x38\xf1\x79\xed\x64\x9f\xb5\x0e\x3b\x6a\xb6\xae"
+ "\xf6\xe8\x82\xd6\xaf\xe7\x8f\x7a\x09\x6b\xae\xa3\x3d\x88\x9e\xff"
+ "\xce\xa5\xf9\xf5\xfc\x77\x2e\xc2\x7a\xfe\x68\x26\xd1\x3e\xdf\xb9"
+ "\x58\xe7\x7b\xe1\x1c\x41\x3d\x7f\xf4\x84\xe5\x39\x44\xcf\x7f\xe7"
+ "\x4a\xf4\xfc\xd1\xcb\xe2\x7a\xfe\x18\x57\x33\xf9\xd8\x58\xc2\x5d"
+ "\xc4\xa7\xd6\x7a\xfe\x58\xdf\xa6\xf5\x3c\xc1\x10\xdb\x4f\x51\x3d"
+ "\x7f\x6c\xae\xb5\x9e\xff\x36\x4c\x58\xcf\x7f\x3f\x92\xe2\xe8\xf8"
+ "\x55\xbe\x9e\x3f\x76\xf0\xe1\xd0\xf3\xa2\xd8\xf2\xe2\xeb\xf9\xe3"
+ "\xab\xa5\xeb\xf9\xe3\x87\xa5\xe9\x79\x8c\x39\x21\x3d\xff\x7d\x3b"
+ "\x0e\x3f\xae\xc2\x7a\xfe\xfb\x3e\xc2\x7a\xfe\xfb\x61\x7c\x3d\x8f"
+ "\xdb\x17\xd2\xf3\xdf\xcf\xe0\xb5\x6f\xa5\xe7\xbf\x5f\xc9\xd7\xf3"
+ "\xe4\x38\xaa\xe7\xff\xe9\x4d\x38\xf4\x9b\x7b\xd2\xf5\xfc\x3f\xdb"
+ "\x89\xeb\xf9\x7f\xba\xf3\xf5\xfc\xf7\x95\x44\xb7\xff\x73\x28\xd1"
+ "\xf3\xdf\xd7\x91\xed\xdf\xd4\x99\x6f\xa7\x7a\x9e\x6c\xa7\x7a\xfe"
+ "\x9f\x21\xf6\xcf\xd3\xb0\x3f\xdf\xfb\xe0\xe7\x69\xa8\x1e\xd2\x79"
+ "\x1a\x85\xe7\xe5\xe9\xf9\xc2\x0a\x79\xda\xb2\xac\x90\x6a\xcb\xb2"
+ "\x42\xf1\xf9\x02\x27\xf2\x6c\x6b\xcb\x12\x15\xd5\x96\x45\x73\x09"
+ "\x3f\x17\x8d\x27\xfc\x5c\xe4\x69\xef\x7c\x81\x35\x77\x39\x3d\x69"
+ "\x9a\x2f\xb0\x90\x9b\x2f\x00\x9a\x92\x68\xc8\x1f\xd6\xf1\xe7\x0b"
+ "\x9c\xf4\x14\x9b\x2f\x20\x38\x4f\xc0\x42\x37\x9a\x34\xa6\xdc\x79"
+ "\x02\x0f\xbf\x6e\xfc\x67\x04\xd5\x8d\x3f\x4c\x90\xa7\x1b\x7f\x08"
+ "\xe7\xeb\xc6\x53\x0b\xac\x75\xe3\x0f\x87\xed\xd7\x8d\x3f\x5c\x94"
+ "\xa7\x1b\x7f\xd0\xda\xa7\x1b\x8b\x86\x0b\xcf\x13\x38\x91\x2f\x3e"
+ "\x4f\x80\xec\xb3\x1e\xef\x8b\x2f\xd2\xf1\xbe\x38\xaf\xf5\xeb\xc6"
+ "\xe2\x30\xe1\xb1\xbd\x78\x02\xd1\x8d\x45\x81\xcd\xaf\x1b\x8b\x02"
+ "\x85\x75\x63\x71\x31\x19\x63\x8b\x02\xad\x75\x23\x9c\x23\xa8\x1b"
+ "\x4b\x9c\x2c\xcf\x21\xba\xb1\x28\x88\xe8\xc6\x92\x6e\xe2\xba\xb1"
+ "\xe4\x20\xe1\xa5\x92\xd5\x84\x97\x88\x4f\xad\x75\x63\x49\x64\xd3"
+ "\xba\x91\x60\x88\xed\xa7\xa8\x6e\x2c\xd9\x6d\xad\x1b\x4f\xec\x11"
+ "\xd6\x8d\x65\x4b\x29\x8e\xca\x7a\xf0\x75\x63\xc9\xcd\x87\x43\x37"
+ "\x8a\x62\x2b\x8c\xaf\x1b\x4b\x8f\x48\xd7\x8d\xa5\x77\xa4\xe9\x46"
+ "\x8c\x39\x21\xdd\x58\x36\x9c\xc3\x4f\x90\xb0\x6e\x2c\x9b\x22\xac"
+ "\x1b\xcb\x16\xf0\x75\x23\x6e\x5f\x48\x37\x96\x6d\xe3\xb5\x6f\xa5"
+ "\x1b\xcb\x0e\xf3\x75\x23\x39\x8e\xea\xc6\x53\x1c\x87\x9e\x18\x2f"
+ "\x5d\x37\x9e\x1a\x2e\xae\x1b\x4f\x8d\xe4\xeb\xc6\x53\x5d\x89\x3e"
+ "\x3c\x15\x4b\x74\xe3\x29\x1f\xb2\xfd\xc4\x38\xf3\xed\x54\x37\x92"
+ "\xed\x54\x37\x9e\x5a\x61\x4b\x37\x32\x69\x7a\xaf\x34\x85\x31\x1f"
+ "\x7e\x05\xd0\xcf\xce\x30\x8e\x69\xe0\xff\x85\x30\x1e\xb9\xc3\xff"
+ "\xcb\xc4\xb4\x8a\xce\x5d\xef\x65\x04\xed\x61\x84\xeb\x94\xea\x7e"
+ "\xd3\x68\xba\xe8\xe1\xda\x3f\x3a\x13\x5d\xa2\xf7\x72\xd3\x3f\x16"
+ "\x6c\x64\xa2\x61\x0c\x87\xff\xc7\xc1\x36\x38\xbe\x03\x8c\x7b\xea"
+ "\x85\xa8\xc3\x0d\xc5\x8f\xbd\x4d\xc7\x41\x9f\x3b\x5c\x52\x9c\xba"
+ "\x88\xdb\xa8\x5d\xf3\xa3\x0f\xdc\x4f\x9a\x68\x5f\xa1\xad\xd0\xdd"
+ "\xdd\x51\x82\x9e\xf9\xaf\x66\xf6\x2d\x54\xa9\xf8\x71\x91\x5b\xf5"
+ "\x63\xc1\xc0\x43\x08\x6b\xbd\xfc\x2e\x3a\x67\xdc\xa6\x66\x76\x3d"
+ "\xde\x37\x19\xef\x33\x40\x1f\x13\x67\x21\x45\xea\xad\xc7\x5c\x40"
+ "\x57\xb5\x49\xaa\x61\xaa\xe6\xe8\xa1\xcf\x71\x7a\xf4\x6d\xf7\x72"
+ "\xe7\x2f\x3f\x2d\x67\xc7\x9e\x92\x1a\x03\xdb\x86\x7a\x36\xee\xcf"
+ "\x8f\x09\x5b\xe0\x78\xa1\x3e\xac\xdc\x8b\xfa\xb7\xe9\xcb\x68\xa5"
+ "\x8d\x77\x3f\x8a\xda\xd1\x6d\x69\x77\xa4\x79\x16\x6c\xa7\x46\x0a"
+ "\xa1\xfd\xd2\xae\xf3\xaf\x00\xb1\xeb\xf4\x54\x21\x97\x8d\x9d\x98"
+ "\x9a\xa4\xcd\x48\xb1\xde\xf8\x98\xcb\x51\xe0\xc4\xad\x9b\x18\x5d"
+ "\xed\x9a\x7f\xed\xd0\x3a\x31\xde\xd8\xe6\xcb\x61\xff\xfa\x4e\x8c"
+ "\xee\xf6\x32\x8c\x9b\x7f\x1d\x3a\x02\x63\xbb\xa5\x2f\xe6\x45\xcd"
+ "\x8a\x54\xc7\xce\x98\x35\x7d\xce\x82\x58\x75\x9f\xa8\xc7\xd1\xb8"
+ "\x39\x73\xd4\xb3\x22\x67\x2f\x52\x9b\xef\xf9\x83\x3a\x6a\xc6\xfc"
+ "\xc8\x77\x66\x4e\x1f\x30\xeb\xdd\x98\xc7\xa1\x4f\xc8\xac\x1f\x1e"
+ "\xb8\x2f\xc6\x35\xff\x2a\xdc\xb2\x01\xa1\x8d\x1d\x91\x33\xee\x57"
+ "\xed\x9a\xd3\xfd\xb5\xce\x1e\x87\xf0\xf5\x52\x37\x31\x35\x0a\x38"
+ "\x26\x09\x38\x6d\x7d\xe2\x63\xf8\xd8\x80\xad\xd0\xaf\x2d\xd0\x6f"
+ "\xe8\x23\xf4\xf9\x74\xb8\xa9\xcf\x26\x4c\x24\x61\x4c\x24\xde\x02"
+ "\x0c\x9e\x5e\xe4\x56\xf7\xd8\xeb\x0c\x13\x8e\xef\xaf\x06\x9e\x15"
+ "\xa7\x2b\x8a\x33\xee\xac\xfe\x4f\xd7\x7b\xc1\xb9\x19\x26\x8c\x19"
+ "\x33\x82\x62\x98\x0d\x0d\x5a\xd0\x8e\x4e\xb5\x4c\xf4\x4b\x80\x4d"
+ "\x7c\xfe\xc5\xe7\x10\x4a\x66\x6a\xc3\xd9\xef\x03\x30\xb5\x80\x61"
+ "\x82\x53\xd8\x77\x66\xff\x6d\x05\x7a\x19\xda\x28\xd7\xa2\x3d\x95"
+ "\xb8\x0d\x2d\x6c\xc3\x36\x37\xe6\x46\x86\x8d\xf7\x46\xc9\xcf\x24"
+ "\xa3\xe4\x5a\x7c\xce\x8e\x5e\xde\x6e\xb1\xc8\x29\x34\x8e\xb9\x00"
+ "\xbc\xe3\xc4\xf4\x88\x0c\x63\x76\xf6\xf2\xd6\x2a\x4e\x1f\x32\x66"
+ "\x06\xc5\xc0\xfd\x54\xd7\xae\x39\xa3\xd6\x3a\x0d\x89\xc2\xed\xac"
+ "\xdf\xc4\xda\xbe\x1a\xdf\x3b\xd8\x07\xe2\x18\x06\x34\x29\xf7\x0c"
+ "\xa5\xfd\xbe\xce\x98\x36\x23\xad\xd4\xf9\x2e\x0a\xd5\x33\x0d\x4c"
+ "\xfa\xef\xeb\x4a\x6a\x6a\x80\xd3\x62\xde\x65\x1e\xff\xd7\x59\x37"
+ "\xfd\x8c\xe9\x5b\x3b\xc2\xb3\x98\x3e\x23\x8d\x49\x1f\xac\x1a\xdf"
+ "\x17\xa9\xa0\xed\x78\x93\x3d\xc1\x96\xce\xd2\x70\x74\x86\xcd\x7f"
+ "\x63\x3c\x40\x7f\x38\x3c\x9c\x29\x3a\x12\x6b\x8d\x87\xc6\x67\x73"
+ "\x93\xaf\x5a\xcf\x84\xbf\xde\x90\xe1\x1b\xce\x78\xf8\x06\x25\x5e"
+ "\x46\x6d\xb1\x6d\x4b\x40\xef\xa7\x2e\x44\x5e\xeb\xa6\x22\xf5\xb4"
+ "\x45\x2a\xa4\xcb\xf4\x0d\x74\x5b\x9a\xec\x04\x36\x51\x00\xbf\xf8"
+ "\x00\x67\xfa\x34\x74\x0a\x8a\x89\x9f\x8e\x14\x79\x97\xf2\x15\x58"
+ "\x27\xe3\x39\x20\x57\x14\xff\x5e\xb7\x05\xce\x63\x7e\x0b\x47\xd8"
+ "\x1f\xac\x2f\x7e\x8b\x46\xa3\x67\xc0\xf8\xfc\x01\xbb\xff\x48\x0e"
+ "\xb4\x29\xed\xbe\xfe\xcd\xea\x5f\x03\xf8\xea\x39\xf0\x53\x69\xa5"
+ "\x81\x6d\x93\xf5\xd5\x4c\xea\xab\xc3\xd0\x0f\xea\xaf\x7f\x07\x63"
+ "\xbf\x8a\xdc\x73\x2e\x77\xcf\xe5\x70\xcf\xc7\x6c\xdc\xb3\x86\xdc"
+ "\x73\x9b\x5b\xb6\xef\xf9\x3f\x4b\x6d\xdf\xf3\x7f\x0e\x48\xbf\xe7"
+ "\xff\x84\x48\xbf\xe7\xff\x0c\x15\xbf\x67\x3f\xce\xcf\x7e\xe0\x67"
+ "\x3f\x1b\x7e\xf6\xe3\xfc\xfc\xc4\x25\xdb\xf7\x5c\xbe\xc0\xf6\x3d"
+ "\x97\xef\x96\x7e\xcf\xe5\x81\xd2\xef\xb9\xdc\xc7\xc6\x3d\x73\x7e"
+ "\xf6\x03\x3f\xfb\xd9\xf0\xb3\x1f\xe7\x67\xf7\x1f\x6d\xdf\xf3\xd9"
+ "\x19\xb6\xef\xf9\x6c\x8e\xf4\x7b\x3e\xeb\x2b\xfd\x9e\xcf\xf6\x16"
+ "\xbf\x67\x7f\xce\xcf\xfe\xe0\x67\x7f\x1b\x7e\xf6\xe7\xfc\xec\xbf"
+ "\xc6\xf6\x3d\x9f\x9b\x62\xfb\x9e\xcf\xa5\x4b\xbf\xe7\x73\xde\xd2"
+ "\xef\xf9\x9c\x97\x8d\x7b\xe6\xfc\xec\x0f\x7e\xf6\xb7\xe1\x67\x7f"
+ "\xce\xcf\x93\x5e\xb1\x7d\xcf\x3f\x8d\xb5\x7d\xcf\x3f\xad\x94\x7e"
+ "\xcf\x3f\x75\x95\x7e\xcf\x3f\xb9\x8a\xdd\x73\x3d\xf0\xb6\x2b\xdc"
+ "\x4b\xc3\x7f\xc2\x5f\x37\x78\xf8\x86\xb8\x56\x22\x45\xf6\x32\x63"
+ "\xb4\x5b\x15\x6a\x07\xf7\x16\xcd\x6c\x7a\x5d\x8d\xff\x35\x7a\xf8"
+ "\x06\xd7\x7b\xf8\x86\xdf\xeb\xd8\xa0\x5d\x32\x05\xb5\xc5\x7a\x7c"
+ "\xb5\x11\x79\x19\x33\x7c\x83\xd6\xbe\x89\xd4\x49\x3a\xa4\x2a\x49"
+ "\xd4\xa2\xc4\x18\x46\x57\x82\x2e\xa2\xf6\x55\x38\xf6\x3c\x87\x8a"
+ "\xaa\x0b\xd1\xec\x79\x0c\x73\x45\x51\x71\x0a\xbf\xf7\x05\x9d\x9c"
+ "\x9c\xf6\x6f\xa4\x86\x6b\xf8\x6c\x81\x1f\x6e\xc7\x2d\x04\xc6\xcf"
+ "\x4d\xaf\xf7\xdc\x9a\x88\xbc\xbe\xf9\xa0\x0a\xe1\xed\x39\xf0\x33"
+ "\x6c\x0a\x8a\x49\x9c\x82\x14\x7b\x6f\x95\x2b\xc8\xd8\x5c\x91\x63"
+ "\x39\x36\x87\x40\x04\x88\xbf\x51\x04\xfb\xae\x66\xbf\x29\xd5\x96"
+ "\x15\xd1\xa6\xb1\x9b\xb5\x65\x85\x81\x8c\xf7\x16\x63\xf7\x37\x70"
+ "\x7d\x6a\xcb\x8a\x70\x6c\x4b\x26\xc3\x37\xa2\xb4\xaa\x1e\xc7\x4d"
+ "\xaa\x2b\x71\x48\x01\xdb\x5d\x4a\x62\x6e\x21\x11\x1b\xe7\x9a\xd9"
+ "\xb8\xc8\xb5\xb2\xcd\x2d\x11\x1b\x17\x82\x8d\xcb\x05\x6c\x7c\xcc"
+ "\x3e\x1b\xff\xec\xe7\xb8\x8d\x7f\x76\x12\xb7\xf1\xcf\xa3\xa5\xdb"
+ "\xf8\x7c\x91\x74\x1b\x9f\x3f\xc4\xd9\x58\xcb\xb7\xf1\xf9\x99\xe2"
+ "\x36\xf6\x33\xc3\xb1\x1f\xe0\xf8\x89\x4b\xc2\x36\xf6\x03\x1c\xfb"
+ "\x09\xe0\xd8\xcf\x4e\x1c\x5f\xd8\xec\xb8\x8d\x2f\x4c\x17\xb7\xf1"
+ "\x85\x7d\xd2\x6d\x7c\xc1\x47\xba\x8d\x2f\xa8\x89\x8d\xfd\x2c\x70"
+ "\xfc\x73\x99\x0d\x1b\x9b\xe1\xd8\x0f\x70\xec\xfe\xa3\x88\x8d\x01"
+ "\xc7\x7e\x02\x38\xf6\xb3\x13\xc7\x5a\x83\xe3\x36\xd6\x9e\x10\xb7"
+ "\xf1\x45\x4f\xe9\x36\xd6\x66\x48\xb7\xb1\x76\x05\x67\x63\x0b\x1c"
+ "\x6b\x7d\xc5\x6d\xec\x6f\x86\x63\x7f\xc0\xb1\xff\x1a\x61\x1b\xfb"
+ "\x03\x8e\xfd\x05\x70\xec\x6f\x27\x8e\x2f\x45\x3a\x6e\xe3\x4b\x03"
+ "\xc4\x6d\x7c\x69\x91\x74\x1b\x5f\xac\x93\x6e\xe3\x8b\x55\xc4\xc6"
+ "\xfe\x16\x38\xbe\x98\x65\xc3\xc6\x66\x38\xf6\x07\x1c\x4f\x7a\x45"
+ "\xc4\xc6\x80\x63\x7f\x01\x1c\xfb\xdb\x89\xe3\x5f\x8e\x3b\x6e\xe3"
+ "\x5f\xd2\xc5\x6d\xfc\xcb\x79\xe9\x36\xfe\x65\xb2\x74\x1b\xff\x12"
+ "\xc2\xd9\xd8\x02\xc7\x97\xf4\x62\x36\x6e\x80\x18\xb0\x3d\xd8\xb8"
+ "\x7d\x35\x52\xe4\x60\xdb\x96\x13\xdb\x1a\x3a\xbd\xae\xce\x51\x18"
+ "\xa3\xb1\x4d\xd8\x1c\xd0\xaf\x5e\x1d\x0c\x19\xbe\x21\x8c\x02\xee"
+ "\x29\x11\xe7\x5d\x2b\x47\xe8\x97\xa1\x0e\xea\x44\x9c\xff\xbd\xd2"
+ "\x03\x1f\xa3\x4e\x5c\x75\x1e\xae\xa7\xc4\x79\x2f\x7d\x7a\xbd\xc6"
+ "\xe0\x19\x10\x7c\x45\x71\x39\x81\xe9\xd3\x27\x10\x62\xaf\x08\xe6"
+ "\x43\x2f\x8f\xd2\xea\x7c\xb0\xcf\x49\x54\x52\xfe\x15\x32\x76\x7a"
+ "\xbd\xe7\x73\x7a\xe4\xcd\xfc\xea\xed\x51\x14\xab\x45\x86\x77\xbd"
+ "\x5c\x4b\xe3\x0a\x51\x69\xdc\xff\xa1\xd0\x2a\xe6\x2e\xf3\x8b\xb7"
+ "\x6b\x83\xe7\xe8\x68\x83\xe7\xeb\x2a\x43\xe6\x5b\xbb\xf4\x9e\xa3"
+ "\xc3\xf3\x16\x6a\x15\xae\x75\xc8\x7b\x66\x25\xc3\xa4\xbe\x83\x9c"
+ "\x53\x2f\x21\x97\xf5\xef\x20\xd7\xf5\x97\x90\xaa\xa8\xb2\x1c\x15"
+ "\x5f\x2b\x44\xc5\xb7\xce\xa2\xe2\xbb\xf0\xab\x87\x9f\x11\x7e\xc9"
+ "\x67\xc1\xd7\x08\x8d\xbe\x8e\xf0\xb7\x15\x75\xfd\x2a\x90\x47\x91"
+ "\xbe\x1c\xe1\x35\xae\x37\x14\x97\x3b\xbb\x46\x20\x0f\xe6\x17\x2f"
+ "\xc4\xbc\xeb\xa5\x80\x7d\xce\x78\x7b\xa9\x5e\x87\x8a\x2a\xeb\x60"
+ "\x7f\x65\x1d\xec\x77\x4e\xaa\x84\xf6\x8d\x85\xf8\xdb\x89\xba\xa2"
+ "\xe4\x13\x70\x7f\x9f\xe7\x32\x38\x86\xee\xe4\xab\x4e\x03\x53\x1b"
+ "\x19\xaf\x9e\x04\x07\x57\x06\x6d\x31\x4a\xf5\xf5\x65\x52\xff\xf2"
+ "\x43\xaf\x8e\x60\xe7\x2e\xc6\x0f\xc3\x55\x63\xce\x5e\x60\x4a\x6a"
+ "\xca\x11\xce\x25\x94\xd4\x9c\x44\xa5\x2b\x8c\x28\x74\x11\x42\x21"
+ "\x06\x84\xb0\x2d\x4a\xe3\xaa\xd0\x98\x18\xe4\x86\xf3\xcf\xc6\x5f"
+ "\xbd\x3b\x96\x56\xea\x50\x82\x1e\xfa\x78\xa3\xae\xb1\x8f\x25\x2b"
+ "\x4a\x10\xec\xeb\x52\x12\xad\x45\xae\x31\x48\x85\xed\xab\xcf\xf0"
+ "\x0d\x1e\x03\xcf\xcf\xec\x1a\x86\xc1\xb6\xc5\x36\xc5\xf6\xc5\xed"
+ "\x99\x6c\x5e\x1a\xa5\x43\x49\x75\x48\x55\x9a\x08\xff\xc6\x31\xba"
+ "\x52\x74\x13\x41\x1f\xfb\x33\xee\x9f\xe7\x02\x2e\x7a\x63\x2c\x68"
+ "\x15\x95\x43\xc1\xff\x1d\x45\x30\x75\x8c\x60\xaa\xcd\x2d\x3b\x30"
+ "\x55\x44\x31\x75\x65\x33\xc5\x54\xd5\x02\x71\x4c\xfd\xf7\x14\x87"
+ "\x29\x6d\xeb\xc4\xd4\x7f\x67\xd9\xc6\xd4\x7f\x43\x6c\x60\xaa\x1c"
+ "\x30\x95\xcb\xc7\x54\xd5\x4a\xe9\x98\xfa\x6f\x76\x0b\x62\xaa\x50"
+ "\x1e\xa6\xfe\x9b\xcc\xc7\xd4\x95\x34\x71\x4c\xf9\x71\x3c\xf5\xc4"
+ "\xa5\xa6\x31\xe5\x67\xc6\x53\x55\xd7\x29\xa6\xae\x9d\x10\xc7\xd4"
+ "\xb5\x3e\x04\x53\x7e\xad\x94\xa7\xae\x1e\xb1\x8d\xa9\xab\xb9\xe2"
+ "\x98\xf2\x03\x9e\xf2\xb3\xe0\xa9\x6b\x67\xa5\x63\xea\xaa\xae\xe5"
+ "\x30\xe5\x27\x93\xa7\xae\x9e\xe6\x63\xaa\xaa\xd2\x06\xa6\x38\x9e"
+ "\x72\xff\xd1\x0e\x4c\x99\xf1\xd4\xaf\xc3\x29\xa6\xae\x77\x13\xc7"
+ "\x54\xf5\x22\x0e\x53\xad\x94\xa7\xaa\x3d\x6d\x63\xea\xd7\x1a\x1b"
+ "\x98\x02\x9e\xf2\xb3\xe0\xa9\xeb\x03\xa4\x63\xaa\x3a\xa8\x05\x31"
+ "\x25\x93\xa7\xaa\xbd\xf9\x98\xfa\x35\x40\x1c\x53\xfe\x1c\x4f\xf9"
+ "\xaf\x69\x1a\x53\xfe\x66\x3c\x75\x3d\x93\x62\xea\xb7\xb9\xe2\x98"
+ "\xba\x51\x4c\x30\xe5\xdf\x4a\x79\xea\xc6\x0c\xdb\x98\xba\x11\x2c"
+ "\x8e\x29\x7f\xe0\x29\x7f\x0b\x9e\xfa\x6d\xa9\x74\x4c\xdd\xc8\x6a"
+ "\x39\x4c\xf9\xcb\xe4\xa9\x1b\xf1\x7c\x4c\x5d\x5f\x6b\x03\x53\x1c"
+ "\x4f\x4d\x7a\xc5\x0e\x4c\x99\xf1\xd4\x6f\x57\x29\xa6\x6e\x1e\x17"
+ "\xc7\xd4\xcd\x1e\x1c\xa6\x5a\x29\x4f\xe9\x0e\xdb\xc6\x94\x2e\xdb"
+ "\x06\xa6\x80\xa7\xfc\x2d\x78\xea\xe6\x19\xe9\x98\xd2\x55\xb7\x20"
+ "\xa6\x64\xf2\x94\xae\x8c\x8f\xa9\xdf\xb4\x62\x98\xaa\xc7\x71\x9f"
+ "\x13\x60\x2a\x1a\xe2\x3e\xc0\x90\x5b\x19\xc1\x54\x03\x60\xea\x33"
+ "\x73\x4c\xfd\x64\x19\xf7\xdd\x1a\x66\x6c\xc4\x54\xcd\x48\x4b\x4c"
+ "\x19\x01\x53\x0d\x2c\xa6\x6e\x47\x9a\xe2\xbe\xd2\xea\x5c\xf0\xd5"
+ "\x35\x54\x1a\x06\x78\xda\xc4\xe1\xe9\x27\xc0\x13\xdc\x8f\x11\xee"
+ "\xb7\xa8\xa2\x1c\x85\xea\xc8\x7d\xd5\xc3\xfd\x1a\xcd\xb1\x54\x5f"
+ "\xa5\xc0\x18\xc2\xd8\x31\xe1\xa8\x78\x36\xe0\x67\xde\x29\x54\xbc"
+ "\x10\x7e\x8b\xe1\x97\x08\x3f\x74\x0a\x15\x55\x21\x36\x67\x4f\xf1"
+ "\x53\xc6\xe1\xe7\x96\xc1\x36\x7e\x6e\x55\x48\x8b\xf1\x6a\x26\x48"
+ "\xc7\xcf\xed\xfe\xdc\x5c\x3a\x55\xe8\xd8\x0b\x0c\x9e\xff\x4a\x30"
+ "\x72\x0d\x85\xea\x91\x1b\x33\xc9\xbb\xa3\x6b\x38\x52\x2d\x31\x20"
+ "\xc5\xba\x77\x90\x6a\xdd\x39\xb8\x5f\xd3\xb3\x73\x09\xb9\x9e\xac"
+ "\xfb\x0a\x15\xdd\x2a\x47\x45\x77\x4f\xa0\x22\x23\xfc\x40\xca\xe2"
+ "\x3e\x86\x4e\x37\xbf\x5f\x1d\x77\xbf\xb7\xaf\x43\x5b\xbd\xc5\xef"
+ "\xf7\x76\x11\x7b\xbf\x51\x70\xbf\xf5\xf4\x7e\x4b\x01\x8b\xe0\x97"
+ "\x2e\x46\x2e\x4e\x0c\xd5\xa1\x76\x73\xf4\x0c\x53\xcf\x61\x10\xfb"
+ "\xe5\xe4\xe9\x3a\x14\x1a\x03\xbe\x7a\x17\x30\x58\xb9\x0b\x25\xc5"
+ "\x03\x06\xeb\xeb\xf0\x7b\x7d\x5d\x69\xf2\x3d\xc0\xe0\x6d\x15\x03"
+ "\x76\x6b\xc0\x18\xfc\x09\x63\xf0\x96\xaf\x51\x1c\x83\xc7\x08\x06"
+ "\x21\x4e\x6c\x1a\x83\x66\xbc\x56\x73\x84\x62\xf0\x6e\xb1\x38\x06"
+ "\xef\x5c\x36\xc5\x89\x0f\x1e\x83\x77\x96\xda\xc6\xe0\x9d\x08\x69"
+ "\x31\xe1\xdd\xf3\xd2\x31\x78\x27\xbf\xe5\x30\x78\x77\xae\x6d\x0c"
+ "\xde\x0d\xb3\x03\x83\x85\xf2\x30\x78\x27\x83\x8f\xc1\x9a\x02\x71"
+ "\x0c\xfa\x71\x3c\x08\x71\x65\x93\x18\x34\x8f\x2b\x6b\x47\x50\x0c"
+ "\xde\x1b\x2b\x8e\xc1\xba\x19\xa6\xb8\xf2\xc1\x63\xb0\xae\x8d\x6d"
+ "\x0c\xd6\x56\x4a\x8b\x21\xef\x45\x4a\xc7\x60\x9d\x6f\xcb\x61\xb0"
+ "\xee\x8e\x6d\x0c\xd6\x9d\x6e\x1a\x83\x7e\x32\x79\xb0\xce\x8b\x8f"
+ "\xc1\xda\xa1\x36\x30\xc8\xf1\x20\xc4\xa1\x4d\x63\xd0\x8c\x07\xef"
+ "\x9d\xa0\x18\x6c\x38\x23\x8e\xc1\xfa\xeb\xa6\x38\xf4\xc1\x63\xb0"
+ "\x7e\xb5\x6d\x0c\xd6\x47\x4b\x8b\x39\x1b\x2e\x4b\xc7\x60\x7d\x41"
+ "\xcb\x61\xb0\x61\x91\x6d\x0c\x36\x84\xdb\x81\x41\x99\x3c\x58\x9f"
+ "\xcd\xc7\xe0\x3d\x8d\x38\x06\xfd\x39\x1e\x84\xb8\xb5\x49\x0c\x9a"
+ "\xc7\xad\xfa\xd1\x14\x83\xc6\x09\xe2\x18\x34\xcc\x35\xc5\xad\x0f"
+ "\x1e\x83\x86\xf6\xb6\x31\xa8\xaf\x96\x16\xa3\x1a\x67\x48\xc7\xa0"
+ "\x61\x68\xcb\x61\xd0\x60\xb0\x8d\x41\x43\x45\xd3\x18\xf4\x97\xc9"
+ "\x83\x06\x35\x1f\x83\xfa\x20\x1b\x18\xe4\x78\x10\xe2\xdc\xa6\x31"
+ "\x68\xc6\x83\xc6\x53\x8d\x18\x54\xa2\xf3\xe2\x18\x64\xee\x98\xe2"
+ "\xdc\x07\x8f\x41\x26\xdd\x36\x06\x99\x18\x49\x31\xad\x12\x5d\x97"
+ "\x8e\x41\x46\xd3\x62\x18\x54\xa2\xa5\x36\x31\xa8\x44\x11\x76\x60"
+ "\x50\x26\x0f\x32\x3b\xf8\x18\x34\x16\x8a\x61\xd0\x08\x71\x71\xc3"
+ "\x8e\x3e\x81\xc6\x8c\xd1\xd1\x6e\x4e\x6a\xa4\xf7\x08\x08\x2e\x8d"
+ "\xad\x41\x63\xee\x80\x7d\x62\xee\xa0\xa9\x77\x54\xc8\x90\x31\x3a"
+ "\x1c\x34\x79\xb0\x59\xfc\xcc\xce\x2d\xd3\xa7\x7d\x9e\xbb\x7e\x36"
+ "\x72\x86\xf8\xbb\x27\xde\x56\x7a\xa5\x0e\xe1\xeb\x27\xe0\xfe\x5c"
+ "\xa3\xfd\xc1\x79\x02\xe6\x37\x6f\x15\xfb\x8e\xb9\x5e\x8b\x2a\x87"
+ "\x22\x65\x51\xa5\x16\xec\xb0\x98\xf5\x2f\xb6\xcb\x15\xa5\x93\x66"
+ "\xeb\x0d\xe4\xac\xff\xc5\xab\x0b\xd8\xdb\xa3\xfd\x47\xc8\xa9\x6b"
+ "\x25\x63\xc4\x76\xc5\xf6\xc2\x36\x56\x2f\x66\x98\x2b\x4a\x85\x7b"
+ "\x09\x60\x4c\xff\x8b\x77\x97\x2d\x70\x9c\x60\xbc\xaa\x54\x74\x96"
+ "\x8c\x0d\xa5\x13\xbb\xfe\x11\xfe\x2d\x28\x82\xff\x89\xd8\xea\x98"
+ "\x9d\xb6\x2a\x34\x8b\xf3\xee\x83\xad\x14\xd5\xf6\xd9\x4a\x39\xcc"
+ "\xc2\x56\xd6\x71\x95\x52\x39\x42\xba\xad\x94\x2e\xc4\x56\x8a\x4a"
+ "\x71\x5b\xf9\xd9\x89\x2b\xbf\x60\xb3\x78\xe4\x3e\xd8\xca\xd9\xcb"
+ "\x3e\x5b\x39\xcf\xe0\xdb\x4a\x40\xff\x2b\x9d\xe7\x4a\xb7\x95\xb3"
+ "\x2f\xb1\x95\xb3\xca\x86\xad\xec\xc4\x95\x5f\xa1\x99\x6e\xbe\x0f"
+ "\xb6\x6a\x13\x64\x9f\xad\xda\x64\x5a\xd8\xca\x5a\xa7\x2a\xdb\xe4"
+ "\x48\xb7\x55\x9b\x08\x62\xab\x36\x43\xc5\x6d\xe5\x6f\x27\xae\xfc"
+ "\x83\xcd\xf4\xdd\x7d\xb0\x55\xdb\x18\xfb\x6c\xd5\xf6\x08\xdf\x56"
+ "\x02\x7a\x4a\xd9\xf6\x84\x74\x5b\xb5\x5d\x4b\x6c\xd5\x36\xda\x86"
+ "\xad\xec\xc4\x95\x7f\xa1\x99\x0e\xb9\x0f\xb6\x7a\x2c\xdb\x3e\x5b"
+ "\x3d\x76\xdd\xc2\x56\x02\xe3\xfe\x63\x77\xa4\xdb\xea\xb1\x02\x62"
+ "\xab\xc7\x32\xc4\x6c\x65\xc8\xf0\x0d\x72\x03\x1b\xdc\xdb\xe4\xab"
+ "\x76\x8b\x43\x8a\xfa\xde\x60\x37\x0f\xb0\xdb\x52\x35\x6a\xc8\x00"
+ "\xbb\xe9\xf4\x68\xcc\xdc\x0b\x4c\x49\xb5\x01\xd5\x83\xcd\xee\x79"
+ "\xf8\xc2\xb6\x2a\x3c\xe7\xe8\xc5\x4b\xca\x76\x67\x26\xcd\x55\x21"
+ "\x6c\x37\x6c\x07\x6c\x3b\x06\xec\xc6\xda\xd1\xe3\xad\x5d\x06\x8f"
+ "\xd7\x55\xa3\xaf\x5f\x60\xe6\x68\x19\x06\xdf\x2f\xa3\xaa\xd7\xe0"
+ "\xf7\x02\xa1\x55\xa8\x9d\xfa\x4d\x7c\x4f\xed\x56\xe2\xed\xa5\xba"
+ "\x72\xd0\x07\xb7\x10\xab\xcd\x2e\x78\x7b\x18\xde\xf6\x76\x35\x94"
+ "\x86\xbf\xce\x74\x6c\xd0\xea\x3b\x05\xc5\x24\x5d\x47\x6d\xb1\x7e"
+ "\x48\x35\x22\xaf\x84\x59\x48\xb1\xf7\x03\x8d\x82\x5d\xbb\x36\x8f"
+ "\x6d\x63\x2c\xd8\xc5\x8b\xb9\x6d\x36\xa7\xfb\x76\x34\x2a\xbd\x92"
+ "\xc6\xfa\xcd\x52\x23\xb0\x7e\xfb\x8f\xb7\x0a\x74\xa6\x0f\xe3\xe1"
+ "\x1b\x9e\x56\x82\xd4\x4c\x03\xd8\x18\xaf\x27\x52\x3e\x3e\x6c\x6b"
+ "\xbd\x54\x1b\xb7\x63\xe7\x7f\x1b\xd5\xdc\xfc\x2d\xb0\x13\xbe\x3e"
+ "\x3b\x7f\x2b\xc6\x6c\xfe\x16\xf4\xb9\x71\xfe\x96\xd2\x45\x8b\xe7"
+ "\x6f\x19\x2f\x78\x75\x31\xdd\xfb\x9c\x99\x0c\x03\xf7\xde\xb1\xa4"
+ "\x46\x87\xf0\xfd\x97\xd4\x68\x50\x52\x2c\x52\x95\xd4\x57\xa1\xc4"
+ "\x1a\x46\x57\x92\x7c\x15\x85\xde\xc1\x3a\x18\xe3\xa5\x5d\x31\xf1"
+ "\xab\x4b\xae\xf1\x82\x77\x17\xe8\xc3\xb1\x92\x32\x84\xcc\xd6\xf1"
+ "\x44\x83\x66\x76\x01\x3f\x44\x97\x26\x5f\x42\xe0\x13\xb0\xcb\x39"
+ "\xec\xa7\x68\xd8\x3f\xb4\x51\x5f\x77\x7a\x7d\x19\xde\x86\x7d\x86"
+ "\xdf\x37\xe1\xfa\x00\x5b\xcd\xf4\x37\xc6\x85\x5b\x5c\x32\x2a\x8d"
+ "\xab\x47\x25\x7a\x84\xe0\x7a\x21\x3f\x84\x97\x8b\xe1\xe8\x18\x87"
+ "\xa3\x5c\xb7\xb8\x36\xb7\xec\xc0\x51\x21\xc5\x91\x6b\x37\xc7\x70"
+ "\xf4\x44\xb1\xe3\x38\x7a\x62\xb3\x03\x38\x2a\xe7\xe3\xc8\x75\xa5"
+ "\x74\x1c\x3d\x11\x25\x1d\x47\x4f\x78\x3b\x86\x23\x57\x4f\x82\xa3"
+ "\xc7\xab\x08\x8e\x5c\x5d\x29\x8e\xd8\xb5\x51\xf7\x09\x47\x8f\x67"
+ "\x88\xe3\xc8\x8f\xe3\x23\x3f\xe0\xa3\x27\x2e\x35\x8d\x23\x3f\x33"
+ "\x3e\xea\x30\xdd\x31\x1c\x75\xf0\x74\x1c\x47\xed\x2f\xca\xc7\x91"
+ "\x9f\x05\x1f\x75\x28\x96\x8e\xa3\xf6\x7b\xa4\xe3\xa8\x7d\x8c\x63"
+ "\x38\xea\x30\x85\xe0\xa8\xbd\x0f\xc1\x51\x87\x71\x14\x47\xec\x7a"
+ "\xb3\xfb\x84\x23\xd7\x0a\x1b\x38\xe2\xf8\xc8\x0f\xf8\xc8\xfd\x47"
+ "\x3b\x70\x64\xc6\x47\xaa\x3c\xc7\x70\xa4\x9a\xe2\x38\x8e\x54\x7d"
+ "\x1d\xc0\x91\x05\x1f\xb9\x7b\x4a\xc7\x91\x5b\x8d\x74\x1c\xb9\x15"
+ "\x38\x86\x23\xd5\x4e\x82\x23\xb7\x38\x82\x23\x55\x36\xc5\x11\xbb"
+ "\x86\xef\x3e\xe1\xc8\xad\xb7\x38\x8e\xfc\x39\x3e\xf2\x07\x3e\xf2"
+ "\x5f\xd3\x34\x8e\xfc\xcd\xf8\xa8\xe3\x1d\xc7\x70\xd4\x71\xa7\xe3"
+ "\x38\xea\x38\x57\x3e\x8e\xfc\x2d\xf8\xe8\x77\x53\xa4\xe3\xa8\xe3"
+ "\x50\xe9\x38\xea\x88\x1c\xc3\x51\xc7\xeb\x04\x47\xee\x1a\x82\xa3"
+ "\x8e\x95\x14\x47\xec\xba\xc8\xfb\x84\x23\xf7\x99\x36\x70\xc4\xf1"
+ "\x91\x3f\xf0\xd1\xa4\x57\xec\xc0\x91\x19\x1f\x79\x0e\x73\x0c\x47"
+ "\x1e\xd7\x1d\xc7\x91\xc7\x41\x07\x70\x64\xc1\x47\x9e\x3b\xa5\xe3"
+ "\xc8\x63\x85\x74\x1c\x79\x04\x3b\x86\x23\x4f\x3f\x82\x23\x0f\x17"
+ "\x82\x23\xcf\xfe\x14\x47\xec\x5a\xd3\xfb\x84\xa3\xdf\xed\x17\xc3"
+ "\x11\xae\x45\xb0\x91\xd4\x85\xa8\x59\xbf\x18\xe1\x3a\x0c\x35\xeb"
+ "\xeb\x91\x4f\x6d\xaa\x67\xc5\x91\x78\x52\x0f\x00\xfa\xc9\xe6\x7b"
+ "\x85\xce\x7f\x62\x37\xf8\xc5\xc3\x37\x30\xf4\x3c\xa9\xd1\x80\xeb"
+ "\x82\xdc\x4e\x8a\x46\xcf\xe1\xba\x0c\xca\xdf\x7b\xe0\x3a\x56\x8d"
+ "\xb5\x03\x3c\x44\x6a\x07\x4c\x14\xaf\x1d\x50\xbf\xc9\xb4\xee\x76"
+ "\x17\x5d\x77\xab\xec\x74\xd1\xe6\xba\x5b\x65\xa7\x13\x39\x13\xa5"
+ "\xe2\xa1\x13\xbb\xfe\xeb\x76\x27\x5f\x75\x6d\x6a\xa7\x72\xb8\xe7"
+ "\x7c\x72\xef\xbf\x67\xeb\xad\x34\xbd\x1e\x77\x97\x19\x4e\x3a\xad"
+ "\x18\x3f\x19\x25\x33\x6b\xce\x94\x33\x9e\xbe\x81\x4c\xa6\x6f\x98"
+ "\xb4\xbe\xfc\x5e\xdd\x84\xbd\x35\xc2\xf6\xf6\x5a\xc1\xd9\x3b\x97"
+ "\xb3\xb7\x70\xdd\x82\x89\xe2\x75\x0b\x84\xed\xed\x65\x7b\x9d\xb3"
+ "\xd2\x6b\x88\x74\x7b\x7b\x39\x73\xf6\xce\xad\x4d\xf5\x0a\xa6\xf6"
+ "\xf6\x3a\x26\xdd\xde\xbf\xaf\x21\xf6\xfe\x77\x11\xd8\x5b\x03\xf6"
+ "\x2e\x93\xd8\x97\x34\xdb\xf6\xf6\x13\xc1\x77\xe7\x1a\x62\x6f\xae"
+ "\x66\x82\x87\x48\xcd\x84\x89\xe2\x35\x13\x84\xed\xdd\xf9\x88\x6d"
+ "\x7b\x77\xde\x2d\xdd\xde\x9d\x63\x89\xbd\xfd\x00\xdf\x9d\x0b\xa8"
+ "\xbd\xbb\xd8\x59\x57\xc0\xdc\xde\x9d\xa3\x88\xbd\xff\xa3\x61\x3c"
+ "\xfd\x00\xdf\x7e\x12\xf1\xdd\x05\x35\x61\x6f\x11\x7c\x3f\x19\xc5"
+ "\xd9\x9b\xc3\xb7\x48\xbd\x86\x89\xe2\xf5\x1a\x84\xed\xfd\xe4\x20"
+ "\xdb\xf6\x7e\xb2\xb3\x74\x7b\x77\xa9\xe4\xec\x0d\xf8\x7e\xd2\x9b"
+ "\xda\xfb\xc9\x1d\xd2\xed\xdd\xe5\x34\xb1\x77\xf9\x7e\xb0\x37\xe0"
+ "\xdb\x4f\x22\xbe\x9f\x8c\xb1\x6d\x6f\x7f\x11\x7c\x77\x3d\x4d\xec"
+ "\xcd\xd5\x8a\xf0\x10\xa9\x15\x31\x51\xbc\x56\x84\xb0\xbd\xbb\x6e"
+ "\xb3\x6d\xef\xae\xab\xa5\xdb\xbb\xeb\x38\x62\x6f\x7f\xc0\x77\xd7"
+ "\x2c\x6a\xef\x6e\x1e\xd2\xed\xdd\x35\x88\xd8\xfb\xec\x2e\xc6\xd3"
+ "\x1f\xf0\xed\x2f\x11\xdf\x5d\xb5\x4d\xd8\x5b\x04\xdf\xdd\x83\x38"
+ "\x7b\x73\xf8\x16\xa9\x53\x31\x51\xbc\x4e\x85\xb0\xbd\xbb\xbb\xdb"
+ "\xb6\x77\xb7\x7b\xd2\xed\xdd\xed\x18\x67\x6f\xc0\x77\x77\x17\x6a"
+ "\xef\xee\x2b\xa4\xdb\xbb\xdb\x7e\x62\xef\x73\xd9\x60\x6f\xc0\xb7"
+ "\xbf\x44\x7c\x77\x0f\x13\xb3\xb7\x1b\xd8\xfb\x38\xe8\x18\x18\x07"
+ "\x83\x8d\x19\xa0\x53\x0c\x7c\xbb\x97\xc6\x05\xa0\x81\x77\xb1\xed"
+ "\xd5\x3e\x30\x76\x04\xb7\x58\xbd\x0c\xa5\xba\xb3\xc3\x6b\x87\x95"
+ "\x4f\x5d\x16\x5d\x3b\xac\x7c\xaa\x58\xf2\xda\x61\xe5\x53\x59\x54"
+ "\x03\x3d\x55\x41\x7d\xaa\x66\xf9\x43\xd2\x9a\x62\xe5\x53\x29\x82"
+ "\x75\x34\x94\x4f\x05\xe0\x35\xc5\xcc\x9a\x9f\xd2\x8c\x99\x72\xb4"
+ "\x91\x7a\xa8\x1d\xbe\x2e\x04\x3f\x68\xc4\x7d\xdd\xb3\x2b\xf8\xba"
+ "\xb0\xc5\xea\x76\x28\x7b\xb6\x71\xdc\xd7\x3d\x4e\x89\xfb\xba\xc7"
+ "\x41\xe9\xbe\xee\xb1\x82\xea\xaf\x1e\x85\xd4\xd7\x3d\xa5\xaf\x1f"
+ "\x57\xf6\x88\x15\xac\xe7\xa1\xec\xd1\x9b\xf8\xba\xa2\x06\x7c\x2d"
+ "\x43\x97\xf5\xf4\x6e\xda\xd7\x7e\xf0\x5c\xfb\xd9\x78\xae\x7b\xbb"
+ "\xc0\x98\x19\xdc\x62\xf5\x43\x94\xbd\x6e\x3a\xee\xeb\x5e\x87\xc5"
+ "\x7d\xdd\x6b\xa7\x74\x5f\xf7\x8a\xa1\xda\xaf\xd7\x7e\xea\xeb\xde"
+ "\xc1\xd2\x7d\xdd\x2b\x42\xb0\xae\x88\xb2\x97\x8a\xf8\xfa\xe7\x70"
+ "\x63\xa6\x1c\x4d\xd8\xdb\xc3\x0e\x5f\xc3\x73\xed\x67\xe3\xb9\xee"
+ "\x53\x03\xbe\x2e\x6c\xb1\x3a\x26\xca\x3e\xe7\x1d\xf7\x75\x9f\xdd"
+ "\xe2\xbe\xee\x93\x2e\xdd\xd7\x7d\x26\x53\xdd\xd9\x27\x97\xfa\xfa"
+ "\x69\x5f\xe9\xbe\xee\x13\x22\x58\xdf\x44\xd9\x5b\x4f\x7c\x7d\xe1"
+ "\x10\xf8\x5a\x86\x1e\x7d\x5a\x54\xff\x53\x5f\xfb\xc3\x73\xed\x6f"
+ "\xe3\xb9\x7e\x46\x0b\x5a\x21\xb8\xc5\xea\xa9\x28\x9f\x39\xe1\xb8"
+ "\xaf\x9f\xc9\x14\xf7\xf5\x33\x09\xd2\x7d\xfd\x4c\x30\xd5\xbc\xcf"
+ "\xac\xa5\xbe\xf6\x56\x4b\xf7\xf5\x33\x01\x82\x75\x56\x94\x4f\x57"
+ "\x11\x5f\x5f\x54\x1b\x33\xe5\x68\xe1\x67\xaa\xed\xf0\x35\x3c\xd7"
+ "\xfe\x36\x9e\xeb\xbe\x10\xd7\xfb\x17\xb6\x58\x5d\x17\x65\xdf\x03"
+ "\x8e\xfb\xba\xef\x52\x71\x5f\xf7\x9d\x21\xdd\xd7\x7d\x7d\xa9\xde"
+ "\xee\x1b\x47\x7d\xfd\xac\xab\x74\x5f\xf7\xed\x2d\x58\xef\x45\xe9"
+ "\x7d\x9a\xf8\xfa\xd2\x0a\xf0\xb5\x0c\x1d\xde\xb7\x5c\x8e\x0e\x9f"
+ "\x9f\x83\x5c\xf8\xfe\xee\x77\xa8\x65\xb5\x78\xbf\x9d\x8e\xfb\xbb"
+ "\xdf\x5c\x71\x7f\xf7\x9b\x20\xdd\xdf\xfd\x7a\x53\x2d\xde\x2f\x9a"
+ "\xfa\xbb\x9f\x5e\xba\xbf\xfb\x79\x08\x6b\xf1\x67\x8f\x39\xa6\xc5"
+ "\xfb\x15\xca\xd1\xe2\xd6\xfe\x1e\xb0\xa7\x65\xf5\xf8\x80\x4c\xc7"
+ "\xfd\x3d\x20\x52\xdc\xdf\x03\x46\x4a\xf7\xf7\x00\x0f\xaa\xc7\x07"
+ "\x84\x53\x7f\x0f\xa8\x96\xee\xef\x01\xce\xc2\x7a\xbc\xff\x7e\xc7"
+ "\xf4\xf8\x80\x02\x39\x7a\xdc\xda\xdf\xcf\x65\xb7\xac\x26\x7f\x6e"
+ "\xa5\xe3\xfe\x7e\x6e\xac\xb8\xbf\x9f\x1b\x22\xdd\xdf\xcf\x39\x53"
+ "\x4d\xfe\x9c\x59\xfe\xfb\xb9\x0a\xe9\xfe\x1e\x58\x23\xac\xc9\x07"
+ "\xee\x70\x4c\x93\x3f\xb7\x4b\x8e\x26\xb7\xf6\xf7\xa0\xb5\x2d\xab"
+ "\xcb\x07\x2d\x70\xdc\xdf\x83\x86\x8b\xfb\x7b\x50\x5f\xe9\xfe\xf6"
+ "\xa9\xa1\xba\x7c\x50\x00\xf5\xf7\x20\xe9\xf5\x33\x95\x3e\x95\xc2"
+ "\xba\xdc\x27\xc3\x31\x5d\x3e\x28\x4b\x8e\x2e\xb7\xf6\xf7\xf3\xf1"
+ "\x2d\xab\xcd\x9f\x9f\xee\xb8\xbf\x9f\x1f\x24\xee\xef\xe7\x3b\x4b"
+ "\xf7\xf7\xe0\x4a\xaa\xcd\x9f\x37\xcb\xff\x3f\x7f\x48\xba\xbf\x07"
+ "\x9f\x16\xd6\xe6\x83\x57\x38\xa6\xcd\x9f\x4f\x91\xa3\xcd\xad\xfd"
+ "\xed\x37\xb3\x65\xf5\xb9\xdf\x78\xc7\xfd\xed\xd7\x43\xdc\xdf\x7e"
+ "\xed\xa4\xfb\xdb\xf7\x34\xd5\xe7\x7e\x5e\xd4\xdf\x7e\x7b\xa4\xfb"
+ "\xdb\xf7\x98\xb0\x3e\xf7\x8d\x75\x4c\x9f\xfb\xc5\x39\x9e\x27\x0f"
+ "\x08\xc6\xda\x5c\x6a\xfd\xc7\xd2\x58\x6e\xcd\x9d\xd2\x9f\xd6\x7f"
+ "\x54\x06\xb0\xdf\xcb\x16\xac\x2d\xa3\x7c\x21\xb3\x55\xd7\x7f\x54"
+ "\xbe\x60\xbb\xfe\xa3\xd2\x5f\x5a\xfd\x47\xe5\x0b\x09\xd2\xe7\xe3"
+ "\xbf\x10\x4c\x63\x84\x17\xcc\xe2\xff\x00\xf6\xb9\x6e\xd5\x75\x21"
+ "\x95\x2f\xf0\xeb\x42\x2a\xfd\xd9\xba\x90\xcc\x9a\x5f\xaa\xe4\xc5"
+ "\x22\x01\xe3\x1c\x7f\x2f\xf0\x62\x6f\x1c\x87\x48\xad\x43\x49\xb1"
+ "\x3d\xa4\x07\xc5\xf6\x8b\x9e\xe2\xd8\xfe\xc3\xdc\x56\x5d\x87\x52"
+ "\x39\xe4\x8e\x6d\x6c\x0f\x39\x2d\xa9\xe6\x88\xf2\x0f\xd2\xeb\xde"
+ "\x28\xff\xd0\x9b\xc6\x43\x7f\x30\x8b\x7f\x5f\x8c\x6a\x41\x6c\xcb"
+ "\xab\xa7\xa4\xfc\x83\x0b\x1f\xdb\x43\xbc\x08\xb6\xaf\x0c\x95\x17"
+ "\x77\xbd\xe8\xe3\xf8\x7b\x90\x97\x10\x8e\xb9\xa4\xd6\xc3\xa4\xd8"
+ "\x7e\xd1\x40\xb1\x3d\xec\xa6\x38\xb6\x87\x8d\x6e\xd5\xf5\x30\x95"
+ "\x43\x4f\xd9\xc6\xf6\xd0\x7c\x49\xb5\x4c\x94\xc3\xfc\xa4\x63\x7b"
+ "\x18\xa2\xb1\xdf\xb0\x20\x8a\xed\x97\x02\x5b\x0e\xdb\x32\xeb\x64"
+ "\x2a\x87\x56\xf2\xb1\xfd\x62\x0d\xc1\x76\x55\x9a\xbc\x18\xf3\x25"
+ "\x57\xc7\xdf\xfb\x04\x56\xe0\xf8\x52\x6a\x5d\x4e\x8a\xed\x97\xce"
+ "\x52\x6c\x07\x5a\xd5\x85\xa2\xd8\x0e\xec\xdb\xaa\xeb\x72\x2a\x5f"
+ "\xce\xb3\x8d\xed\x97\xd7\x4a\xaa\x91\xa2\x0c\x74\x97\x8e\xed\x97"
+ "\x2b\x68\x9c\x1b\xa8\xa6\xd8\x1e\xde\xb5\x05\xb1\x2d\x93\xb7\x5f"
+ "\xd6\xf0\xb1\xfd\x52\x19\xc1\xf6\xb5\x4a\x79\xf1\x74\x60\x95\xe3"
+ "\xef\xb9\x5e\x2d\xc0\xb1\xb4\xd4\xfa\xa0\x14\xdb\xc3\x0f\x50\x6c"
+ "\xbf\xba\x5b\x1c\xdb\xaf\xb6\x69\xd5\xf5\x41\x95\xaf\xd8\xae\xff"
+ "\xa3\x7c\xc5\x46\xfd\x1f\xa1\xb5\xc2\xaf\x48\xaf\x7b\xa1\x7c\xa5"
+ "\x80\xc6\xf4\xaf\xe8\x29\xb6\x5f\xad\x6b\x39\x6c\xcb\xac\x1b\xaa"
+ "\x7c\x25\x9b\x8f\xed\xe1\x7b\x08\xb6\xaf\x07\xc8\xcb\x1d\xbc\x7a"
+ "\xcc\xf1\xf7\x7a\xaf\x65\xe0\xbc\x81\xd4\x3a\xa5\x14\xdb\x41\xe9"
+ "\x14\xdb\xaf\xad\x14\xc7\xf6\x88\x8b\xad\xba\x4e\xa9\x72\xc4\x74"
+ "\xdb\xd8\x1e\x11\x24\xad\xa6\xcb\x08\x19\xeb\xe0\x47\x64\xd0\xfc"
+ "\xc5\x08\xb3\xf9\xef\xaf\x9d\x6e\x41\x6c\xcb\xe4\xed\x11\x71\x7c"
+ "\x6c\x07\xa5\x10\x6c\xff\xb6\x56\x5e\x9e\xe4\xb5\x5c\xc7\xf3\x24"
+ "\x23\x73\xd9\x77\x98\x12\xeb\xa5\x52\x6c\xbf\x3e\x8b\xd6\x26\x1a"
+ "\x99\x6e\x89\xed\xc6\xda\x44\xca\xe0\xdd\xad\xa6\x5e\xaa\x32\x78"
+ "\x80\x6d\x1c\x07\xbb\x4a\xcb\x89\x04\xa7\x4b\xc7\x71\xf0\x64\x9a"
+ "\x13\x09\x36\x9b\xff\x32\x52\x8b\x5a\xac\x66\xd1\x48\x3f\xdb\x35"
+ "\x8b\x46\x7a\xdc\xb7\x3a\xaa\xca\xe0\x40\x5e\xcd\x22\xe5\xeb\x51"
+ "\x46\xf6\x59\xb8\xa9\x95\x97\x57\x19\xb9\xc7\xf1\xbc\x4a\x08\x79"
+ "\xbf\x2b\xb1\x6e\x2b\x7d\x16\xde\x58\x44\x9f\x85\x90\x1c\xf1\x67"
+ "\x61\xd4\x81\x56\x53\xb7\x55\x39\x6a\x88\xed\x67\x61\x94\x97\xb4"
+ "\x1c\xca\x28\x19\x75\x60\x46\x45\xd3\x1c\xca\xa8\x3d\xf4\x59\x08"
+ "\xa9\x6e\xb9\x67\x21\x64\xb8\xed\x67\x21\x44\x7d\xdf\xea\xb9\x2a"
+ "\x47\x85\xf0\x9f\x85\x37\x62\xc8\xb3\x50\x13\x25\x2f\x0f\x13\x22"
+ "\xeb\xfd\x37\xff\x59\x08\x2d\x60\xdf\x7d\x4b\xac\x1f\x4b\x9f\x85"
+ "\xd1\x2b\xe9\xb3\x10\x6a\xa5\xe7\xe9\xb3\x30\xe6\x48\xab\xa9\x1f"
+ "\xab\x1c\x33\xc2\xf6\xb3\x30\xa6\xb7\xb4\x9c\xcb\x98\xdd\xd2\x9f"
+ "\x85\x31\x66\xeb\x9f\xc6\x98\xad\x7f\x0a\xad\x6b\xb9\x67\x21\x74"
+ "\xb4\xed\x67\x21\xb4\xff\x7d\xab\x2b\xab\x1c\x13\xce\x7f\x16\x46"
+ "\xc7\x93\x67\xe1\x6e\x95\xbc\xbc\x4d\xa8\x1d\xfa\xbf\xa9\xbc\xcd"
+ "\x9b\xc7\xd8\x79\x01\x12\xeb\xd8\xd2\x67\x21\x2c\x9d\x3e\x0b\x6f"
+ "\x1e\x10\x7f\x16\xc6\x16\xb7\x9a\x3a\xb6\xca\xb1\x63\x6d\x3f\x0b"
+ "\x63\x7d\xa4\xe5\x68\xc6\x1e\x90\xfe\x2c\x8c\x4d\xa6\x39\x9a\xb1"
+ "\xc7\xe8\xb3\xf0\x47\xe7\x96\x7b\x16\xde\x9c\x60\xfb\x59\x78\x33"
+ "\xe0\xbe\xd5\xb7\x55\x8e\x8d\xe2\x3f\x0b\x61\x29\xe4\x59\xb8\x37"
+ "\x53\x5e\x9e\xe7\xcd\x32\xc7\xf3\x3c\xe3\xcb\xd8\x39\x13\x12\xeb"
+ "\xe9\xd2\x67\xe1\x8f\x39\xf4\x59\x18\x7f\x44\xfc\x59\x18\x77\xb6"
+ "\xd5\xd4\xd3\x55\x8e\x9b\x62\xfb\x59\x18\x37\x54\x5a\x4e\x67\xdc"
+ "\x11\xe9\xcf\xc2\xb8\xb5\x34\xa7\x33\xae\x8c\x3e\x0b\x6f\xa9\x5a"
+ "\xee\x59\x18\x3f\xdd\xf6\xb3\x30\x3e\xe8\xbe\xd5\xd9\x55\x8e\x8b"
+ "\xe1\x3f\x0b\x7f\xcc\x20\xcf\x42\x83\x4e\x5e\x5e\x68\x7c\x85\xe3"
+ "\x79\xa1\xf0\x0a\x76\x3e\x89\xc4\xba\xbe\xf4\x59\x78\x6b\x37\x7d"
+ "\x16\xc2\xc5\xbf\xf3\xa0\x7c\xfb\x72\xab\xa9\xeb\xab\x7c\xdb\xf6"
+ "\xf7\x8f\x94\x6f\xdb\xfa\xfe\x91\x40\x0e\xe8\xed\x62\xe9\xcf\xc2"
+ "\xdb\x59\x34\x07\xf4\xb6\xd9\xfa\xbf\x09\x5d\x5b\xee\x59\x08\xb7"
+ "\xfd\xfd\x07\x65\xb8\x1d\xdf\x7f\x90\x59\xef\x57\xf9\x76\x3c\xff"
+ "\x59\x78\x2b\x97\x3c\x0b\xc6\x58\x79\x79\xa4\xf0\x26\xf3\xff\x38"
+ "\xce\x6f\xf0\xb0\xce\x23\x15\x55\x06\xa0\x7e\x13\xf1\xb3\x30\x31"
+ "\x4d\x9f\xe9\x1b\x8c\xeb\x0b\x1b\x7a\x73\x35\x28\x97\x72\x35\x5e"
+ "\x6a\xf4\xa4\x06\xa5\xce\xd0\x58\x83\x92\xd4\xfe\x40\x0a\xbc\x16"
+ "\x18\xaf\x09\xd6\xab\x48\xfd\x49\x06\xcf\x89\xc2\x73\xa4\x2e\x15"
+ "\xb2\xf5\x55\xe2\xf5\x70\xef\x57\x9a\xa8\x3f\x19\xa1\x45\x45\x11"
+ "\x8b\x91\xde\xfd\xf3\x5c\xb2\x4e\x78\xa2\x9a\xad\x3f\x39\xcd\xab"
+ "\x4b\xea\xcf\xc8\xc3\x0d\xd7\x9f\x8c\x60\x8c\x49\x5a\x46\x57\x02"
+ "\x2a\xba\x28\x02\xec\x1b\x69\xaa\x41\x39\x71\x35\xbe\x77\xfd\x34"
+ "\xef\x2e\x5b\x7e\x16\xab\x2f\x3c\x51\x46\x1d\xd8\x89\x43\x69\x7e"
+ "\x67\x62\x32\xc5\xe8\x44\x76\x0c\x86\x7f\xbd\x8a\xc2\x81\x63\x52"
+ "\x51\x5d\x83\xac\xda\x1b\x13\xb3\xed\xf0\x19\x9e\x23\x62\xc5\x5f"
+ "\xd4\x67\x93\x83\xc0\x67\x85\xb8\xce\xb1\xfd\x3e\x6b\x73\xeb\xfe"
+ "\xf8\x6c\xd2\x69\xfb\x7d\x36\x79\x98\x85\xcf\x04\xf2\x10\x93\xfb"
+ "\x48\xf7\xd9\x24\x1d\xcd\x43\x4c\xf6\xa5\x3e\x9b\xbc\x82\xf8\x6c"
+ "\x52\x11\xf1\x99\xa2\x77\x83\xac\xfa\x1d\x93\x9b\x5c\xff\x8d\xe3"
+ "\xa6\x06\x0f\xeb\xb8\x9c\xfa\x6c\x4a\x9d\x3e\x13\x62\x77\x88\xcb"
+ "\xed\xf7\xd9\x13\x97\xee\x8f\xcf\xa6\xa4\xd8\xef\xb3\x29\x37\xf9"
+ "\x3e\x13\x8a\x97\xa7\x48\xff\x66\xa7\x72\xca\x0e\x1a\x2f\x4f\xa9"
+ "\xa2\x3e\x9b\x1a\x40\x7c\x36\x25\x99\xf8\x4c\x19\xd6\x20\xab\x06"
+ "\xc8\x54\x67\x3b\x7c\x86\xdf\xe9\xdb\x78\xce\xa6\xed\x01\x9f\x15"
+ "\xe2\xba\xcf\xf6\xfb\xcc\xfd\xc7\xfb\xe3\xb3\x69\x43\xed\xf7\xd9"
+ "\xb4\x9d\x16\x3e\x13\x88\xeb\xa6\xad\x93\xee\xb3\x69\xe1\x34\xae"
+ "\x9b\x96\x4d\x7d\x36\xad\x9a\xf8\x6c\x9a\x2f\xf1\x99\x73\x7c\x83"
+ "\xac\x3a\x22\xd3\x9a\xcc\x7f\x61\x1d\xda\xe0\x61\x1d\xe7\x50\x9f"
+ "\x45\x46\xe8\x33\x21\x16\x82\x38\xc7\x7e\x9f\xf9\xaf\xb9\x3f\x3e"
+ "\x8b\xd0\xd9\xef\xb3\xc8\x09\x7c\x9f\x09\xc5\x1f\x91\xc3\xa5\xfb"
+ "\x2c\xd2\x95\xc6\x1f\x91\x61\xd4\x67\x91\xb9\xc4\x67\x11\x55\xc4"
+ "\x67\x6d\x76\x35\xc8\xaa\x45\x12\x39\xd3\x0e\x9f\xe1\x77\xb0\x36"
+ "\x9e\xb3\x77\x3d\xc0\x67\x85\xb8\x0e\xb6\xfd\x3e\x9b\xf4\xca\xfd"
+ "\xf1\xd9\x3b\x3b\xec\xf7\xd9\xbb\xed\x2d\x7c\x26\xa0\x93\xdf\x91"
+ "\x51\x07\xfb\x1d\x0d\xd5\xc9\xef\x3a\x53\x9f\xbd\x3b\x8e\xf8\xec"
+ "\x9d\x6c\xe2\xb3\xb6\xa7\x1b\x64\xd5\x33\x79\x57\x2d\x47\x37\x9a"
+ "\xe6\xe5\x53\xbf\x45\x15\xb5\x1e\xed\x18\x35\xd9\x7e\xbf\x45\x1d"
+ "\x6f\x5a\x3b\x46\xe5\x49\xf7\x5b\x54\x1c\xd5\x8e\x51\x87\xa8\xdf"
+ "\xa6\xbb\x12\xbf\x45\x8d\x73\x4c\x3b\x46\x35\xb9\xfe\x55\x48\x3b"
+ "\x5a\xfb\xed\xbd\x15\xad\x47\x3f\xbe\xe7\x61\xbf\xdf\xde\x4b\x68"
+ "\x5a\x3f\xbe\x37\x5d\xba\xdf\xde\xf3\xa1\xfa\xf1\xbd\x58\xea\xb7"
+ "\xf7\x8e\x11\xbf\xbd\xe7\xea\x98\x7e\x7c\x4f\xb4\xfe\x9b\x2d\xfd"
+ "\x68\xed\xb7\xe8\xa1\xad\x47\x43\xbe\x5f\x64\xbf\xdf\xa2\xfd\x9a"
+ "\xd6\x90\xd1\xdd\xa4\xfb\xed\xfd\x2a\xaa\x21\xa3\xfb\x53\xbf\x45"
+ "\xc7\x13\xbf\xbd\x7f\xcc\x31\x0d\x19\x1d\x2c\x47\x43\x5a\xfb\x6d"
+ "\x46\x4d\xeb\xd1\x91\x33\x56\xd8\xef\xb7\x19\xd7\x9b\xd6\x91\x33"
+ "\xa4\x7f\xb3\x58\x39\x23\x97\xea\xc8\x19\x95\xd4\x6f\x1f\x70\xdf"
+ "\x60\x99\x11\xef\x98\x8e\xfc\x00\xc9\xd1\x91\xd6\x7e\xfb\x70\x4f"
+ "\xeb\xd1\x92\x1f\x4a\xd0\xff\x1f\x5a\xe8\x7f\x21\x2d\xf9\xa1\x0c"
+ "\xfd\xff\x61\x38\xd5\x92\x1f\x9a\xe9\xff\x0f\x39\xfd\xff\xa1\xaf"
+ "\x63\x5a\xf2\x43\x7b\xf4\xbf\x95\x96\xb4\xf6\xdb\xac\xa8\xd6\xa3"
+ "\x27\x67\xd6\xd8\xef\xb7\x59\x53\x9a\xd6\x93\xb3\x64\x7c\x07\x6a"
+ "\x96\x8a\xea\xc9\x59\xe3\xa8\xdf\x66\xed\x20\x7e\x9b\x59\xed\x98"
+ "\x9e\x9c\x25\x5a\xff\xd1\xe4\x37\x83\x87\x6f\x30\x23\x90\x87\x2c"
+ "\x8e\x0e\xe0\x6a\x13\xc6\xf8\x1a\x3c\x7d\x83\xa5\x7e\xdf\xc5\x54"
+ "\x73\xfa\x44\x34\x42\x97\x94\x73\x8a\x1d\xab\x3b\x3d\x27\xc1\xf1"
+ "\xba\xd3\x73\x46\x36\xdf\xf7\x5d\xe6\x0c\x92\x5e\x77\x7a\xb6\x9e"
+ "\x6a\xd0\x39\x81\xd4\xd7\x31\xec\xfc\x04\x69\xf5\xa8\x67\x6b\x1c"
+ "\xab\x47\x3d\xe7\x38\xc1\xd7\xec\x64\x52\x8f\x7a\xce\xa1\x96\xf9"
+ "\xee\xcb\xec\xfe\xb8\x1e\x35\x93\xea\x82\xe4\xd5\x47\x8e\x09\xb4"
+ "\x03\xcf\x85\x8c\x40\x8e\x96\xe2\x79\xbe\x33\xe0\xb9\x50\xea\x77"
+ "\x66\xf8\x78\x9e\x97\xe3\x18\x9e\xe7\x8d\x76\x1c\xcf\xf3\x3a\x37"
+ "\xdf\x77\x66\xe6\x39\x49\xc7\xf3\xdc\x22\xaa\xcd\xe7\xa9\x28\x9e"
+ "\xe7\x07\x49\xc7\xf3\xdc\x34\xc7\xf0\x3c\x2f\x93\xe0\x79\x6e\x18"
+ "\xc1\xf3\xbc\xb5\x2d\xf3\xfd\x99\x18\x3d\xc1\xf3\xe3\xc1\xf2\xea"
+ "\x4f\xcf\x57\x35\x8d\x67\xbf\x60\x46\x20\x7f\x4d\xf1\xbc\xe0\xb4"
+ "\xc1\xd3\x2f\x58\xea\xf7\x6e\xf8\x78\x5e\x30\xcb\x31\x3c\x2f\xe8"
+ "\xe6\x38\x9e\x63\xaf\x36\xdf\xf7\x6e\x62\x4f\x49\xc7\x73\x6c\x36"
+ "\x8d\x59\x62\xb5\x14\xcf\x0b\x3d\xa4\xe3\x39\x36\xc2\x31\x3c\x2f"
+ "\x98\x4e\xf0\x1c\xab\x26\x78\x5e\x30\xb9\x65\xbe\x83\x33\xbf\x88"
+ "\xe0\xd9\x35\x4d\x5e\x7d\xef\x05\x5a\x3b\xf0\x5c\xc8\x08\xe4\xf6"
+ "\x29\x9e\xe3\x76\x00\x9e\x0b\xa5\x7e\x77\x87\x8f\xe7\x38\x07\xbf"
+ "\x73\xf1\x51\x33\x7c\xe7\xe2\x23\x07\xbe\x73\x61\xf9\xdd\x9d\x8f"
+ "\xb6\x49\xc7\xf3\x47\x33\x69\x2c\xf7\x51\x3e\xc5\x73\x5c\xa5\x74"
+ "\x3c\x7f\xe4\xe3\x18\x9e\xe3\xb8\xef\x5f\x2c\xd4\x11\x3c\xc7\xf5"
+ "\x6f\x99\xef\xf1\x2c\xcc\x26\x78\xee\x50\x2e\xaf\x7e\x7a\x5c\x7e"
+ "\xd3\x78\xf6\x0f\x66\x04\xde\x7b\x50\x3c\x2f\x89\x35\x78\xfa\x07"
+ "\x4b\xfd\xfe\x0f\x1f\xcf\x4b\xda\x3b\x86\xe7\xc5\x87\x1d\xc7\xf3"
+ "\xe2\xd5\xcd\xf7\xfd\x9f\xc5\x73\xa5\xe3\x79\xf1\x50\x1a\xe3\x2e"
+ "\x36\x7b\xff\xbf\x64\xbf\x74\x3c\x2f\x76\xf0\xbb\x40\x4b\xda\x10"
+ "\x3c\x2f\xe2\xbe\x0b\xb4\x58\xdf\x32\xdf\x05\x5a\x34\x93\xe0\xd9"
+ "\x5d\x2d\xaf\x3e\xfd\x92\x64\x3b\xf0\x5c\xc8\x08\xbc\x13\xa2\x78"
+ "\x4e\x0c\x02\x3c\x17\x4a\xfd\x0e\x11\x1f\xcf\x09\xe7\x1d\xc3\x73"
+ "\xc2\x3a\xc7\xf1\x9c\x30\xa1\xf9\xbe\x43\x94\x30\x5c\x3a\x9e\x13"
+ "\x4c\xef\xff\x80\x9f\x13\xcc\xde\xff\x25\xca\xf8\x3e\x51\x7c\x99"
+ "\x63\x78\x4e\x38\x43\xf0\x1c\x9f\x46\xf0\x9c\x50\xd4\x32\xdf\x27"
+ "\x8a\x1f\x4a\xf0\xfc\xbb\x68\x79\xf5\xff\x13\x9b\x9c\xff\x21\x94"
+ "\xdf\x30\xe5\xa5\x28\xa6\x97\x7a\x39\x9e\xe3\x48\xde\xe7\x18\xa6"
+ "\x93\x23\x1d\xc7\x74\xf2\x80\xe6\xcb\x71\x24\xcb\xf8\xd6\x5f\x92"
+ "\x96\xe6\x38\x92\x7b\x53\x4c\x2f\x0d\x97\x8e\xe9\xa4\x1d\x8e\x61"
+ "\x3a\x79\x37\xc1\x74\x52\x14\xc1\x74\x72\x6e\xcb\xe4\x38\x92\x54"
+ "\x8e\xe5\x38\x96\xf6\x96\x93\xe3\xb0\xc6\xf4\xf2\x6a\xc7\xf3\x1c"
+ "\xcb\x57\x3a\x86\xe9\xe5\x7e\x8e\x63\x7a\xb9\x53\xf3\xe5\x39\x96"
+ "\x5d\x95\x8e\xe9\x65\xfb\x69\x9e\x63\x59\x1d\xc5\xf4\x8a\xfe\xd2"
+ "\x31\xbd\x2c\xce\x31\x4c\x2f\x4f\x20\x98\x5e\x16\x40\x30\xbd\x3c"
+ "\xb6\x65\xf2\x1c\x4b\x2b\x1d\xcb\x73\x2c\xaf\x93\x93\xe7\xb0\xc6"
+ "\xf4\x2a\x8d\xe3\xb9\x8e\x55\x13\x1c\xc3\xf4\xaa\x76\x8e\x63\x7a"
+ "\xe5\x99\xe6\xcb\x75\xac\x3c\x2c\x1d\xd3\x2b\x53\x68\xae\x63\x65"
+ "\x11\xc5\xf4\x9f\x90\x74\x4c\xaf\x0c\x71\x0c\xd3\xab\xc6\x12\x4c"
+ "\xaf\x74\x25\x98\x5e\x15\xdc\x32\xb9\x8e\x15\x05\x8e\xe5\x3a\x56"
+ "\x15\xc9\xc9\x75\x58\x63\x7a\x75\x86\xe3\xf9\x8e\xd5\x03\x1c\xc3"
+ "\x74\xca\x79\xc7\x31\x9d\xb2\xbb\xf9\xf2\x1d\x29\xe9\xd2\x31\x9d"
+ "\x62\xf6\xfd\x8b\x14\xb3\xf5\xff\xab\x4f\x4b\xc7\x74\x8a\xda\x31"
+ "\x4c\xaf\xee\x43\x30\xfd\x27\x2d\xc1\xf4\xea\xae\x2d\x93\xef\xf8"
+ "\xd3\x5a\xc7\xf2\x1d\xab\x73\xe5\xe4\x3b\xac\x31\xbd\x36\xda\xf1"
+ "\x9c\xc7\x5a\x27\xc7\x30\xfd\xf1\x3e\xc7\x31\xfd\x71\x42\xf3\xe5"
+ "\x3c\x3e\x9e\x2e\x1d\xd3\x1f\xfb\xd0\x9c\xc7\xc7\x66\xf3\x9f\xd6"
+ "\xee\x92\x8e\xe9\x35\x35\x8e\x61\xfa\xe3\x7b\x04\xd3\x6b\xf6\x13"
+ "\x4c\x7f\xac\x6b\x99\x9c\xc7\x9a\x08\xc7\x72\x1e\x6b\x63\xe5\xe4"
+ "\x3c\xac\x31\xbd\x7e\xa8\xe3\x79\x8f\xd4\x33\x8e\x61\x1a\x06\x6b"
+ "\x87\x31\x9d\x3a\xb6\xf9\xf2\x1e\xa9\x43\xa4\x63\x3a\xd5\x99\xe6"
+ "\x3d\x52\xcd\xea\xdf\xaf\x8f\x97\x8e\xe9\x75\x85\x8e\x61\x3a\xb5"
+ "\x98\x60\x7a\x5d\x0a\xc1\x74\xea\xb1\x96\xc9\x7b\xac\xf3\x75\x2c"
+ "\xef\xb1\xde\x6a\xfe\xdb\xfc\xe9\xb3\xa3\xd4\x73\xde\x7b\x6f\xfe"
+ "\xf4\x58\xf5\xfc\x99\x33\xde\x9d\x3e\xac\x8f\xe9\xef\x61\x3e\x71"
+ "\x7d\xe2\x1e\x47\x51\xb3\x22\xa7\x2d\x1c\x4c\x77\xce\x9c\x3e\x1b"
+ "\xfe\x79\x1c\x45\x47\xce\x8f\x56\xc7\x2e\x8a\x99\xae\xc6\x7f\xcd"
+ "\x7a\x37\x06\x0e\x99\x13\x4b\xb7\x8c\x5e\x30\x33\x76\x46\xcc\xcc"
+ "\xe9\xea\xa0\xd1\xc3\x07\x8c\x1b\xf1\xc7\x71\x2f\xbf\xfc\x38\x42"
+ "\x66\xdf\x91\x56\x33\x19\x6f\xe5\x02\x1e\x9c\xaf\x28\x3f\x4b\x28"
+ "\xf1\x42\x68\x1d\xe0\x6c\xfd\x3c\xa4\x5a\x3d\x0f\x39\xa7\xdc\x42"
+ "\x2e\xeb\x6e\x21\x57\xf5\x07\x28\x80\x71\x9f\x95\xbb\xfe\x16\xf2"
+ "\x60\x3a\xd6\x17\x32\xe9\x3b\xb5\x8c\xfb\xe7\x6a\x9d\x7b\x6a\x19"
+ "\x6c\x53\x31\xe9\xa9\x08\xef\x03\xbb\x3a\x33\xe9\x9f\xa7\x5c\x52"
+ "\x7e\x36\x59\xe7\xbe\x3e\x3f\xe9\x2a\x52\x30\x1d\xd2\x62\xf7\x1a"
+ "\x75\x8a\x23\xf8\x49\x86\xfb\x46\xca\xf4\x99\xf0\x0b\x47\xca\x0d"
+ "\x2e\xf0\xf3\x82\x5f\x04\xfc\x52\xe0\x97\x06\x3f\x3d\x52\x6e\x0c"
+ "\x82\x5f\x2c\xfc\x60\xdb\xc6\x6c\xf8\xed\x82\x5f\x3e\x52\x66\xc0"
+ "\xf6\x8c\x28\xf8\xc1\xbe\x8c\xb5\xa4\x9d\x8c\x0c\xa4\xcc\xf4\x80"
+ "\xdf\x64\xf8\xc1\xf9\x9b\x60\xfb\xa6\x02\xa4\xfc\x04\x8e\xdb\x54"
+ "\x0e\xbf\x1a\xf8\x41\x9b\x9f\xa8\xe1\x87\xcf\xcf\x22\xfb\xb2\x54"
+ "\xf0\x0b\x81\x1f\xb4\x91\x05\xd7\xc9\x3a\x04\xbf\x32\xf8\x55\xc0"
+ "\xaf\x12\x29\x37\x43\xdf\x36\xc3\x31\x9b\x7b\xc3\x0f\xfa\xb0\x79"
+ "\x07\xfc\x0a\x91\xf2\x53\x68\xe7\x53\xb8\xc6\xa7\x5a\x04\xf7\xc8"
+ "\xfd\xbc\xcd\xfe\x8f\x7f\xb1\x6e\x4b\x9f\xd2\x6a\x9e\xd5\xc3\x33"
+ "\x96\x7e\xc2\xb0\x0c\x29\x0d\xe9\xeb\xf3\x63\x9e\x45\x4e\xd7\x94"
+ "\xe9\x99\xa5\x2b\x10\x70\xc3\x4e\xad\x66\x71\x3d\xde\xcf\xbe\xfb"
+ "\xae\x4d\x4d\xcf\xd0\xa2\x2f\x55\xf8\x59\x92\x86\xa5\xf4\x0c\xee"
+ "\xfc\xd3\x5a\xa7\xd1\x33\xf1\xf9\xcc\x86\xc1\xae\x4c\x52\xf8\x67"
+ "\x78\xcd\xec\x15\x6c\x23\x8c\xf1\xb4\x41\x11\x8c\xaa\xdf\x31\xcc"
+ "\x07\x9a\xc5\x6c\xbf\x66\xc1\xb3\xd1\x01\xce\x9f\xc9\x80\x9f\x74"
+ "\xee\xe0\xd3\x65\xc8\x99\xfd\x3b\x3d\xb5\x8c\xc9\x8d\x0c\x26\x1c"
+ "\xb1\x81\x9d\x3b\x78\xcf\x73\x94\x1a\xef\xab\xdb\xd9\x2b\x90\xd9"
+ "\xd1\xa7\x4c\x33\xbb\x1e\x55\x2a\x37\x4c\x00\xae\x52\x30\x4f\xf7"
+ "\x0a\x34\x6e\x1a\xa5\x2e\x00\x1f\xe3\x63\x0e\x26\x56\xe1\x7f\xa3"
+ "\xe1\xbe\x15\x4c\xc6\xa8\x2a\x9c\xaf\xd1\x24\x6e\x00\xfe\x4c\x9f"
+ "\x75\xcf\x33\xd2\x47\xfd\x86\x1b\x73\x09\x5f\x47\x81\x6b\xa3\x6f"
+ "\x40\xe4\x19\x4e\x9f\x79\xcf\xbd\xbe\x0c\xb7\x6d\xc8\x8d\xd4\xc1"
+ "\x3e\x67\x06\xb0\x05\x7d\x70\xba\x01\xe7\x19\xd2\xeb\x0b\x35\x6f"
+ "\xb0\xd7\xbc\x03\xfd\x54\x24\x8d\x84\xb6\xb7\x47\xea\xbe\x5c\x5c"
+ "\xa7\x60\x70\xdf\x55\xf5\x85\x80\x65\x57\x43\xea\xfa\x94\xcd\x1d"
+ "\x91\x73\x0e\x34\xbb\xb5\x23\x72\xa9\x4d\xdd\x50\xad\x75\xf6\x38"
+ "\x44\x38\x2a\x7d\xa6\x02\x8e\x81\x6b\x02\x7e\xd7\xe7\xb3\xd7\xca"
+ "\x78\x2d\x46\xfc\x5a\x1b\x87\x35\x5e\x6b\xd3\x6b\x31\xf8\x5a\xc4"
+ "\x5e\xac\xad\xc8\xff\x4d\xed\xec\xe8\x65\xa3\xcf\x1b\x87\xe0\x36"
+ "\xb4\xca\x8d\xfd\x99\xbf\xf4\xd2\x19\x36\x8d\x8e\xc1\xfb\xf0\xf1"
+ "\xa4\xbd\xd4\x32\xb7\xa5\xa8\x86\x81\x6d\x06\xce\x07\x06\xec\x03"
+ "\x45\x32\x70\xcd\x06\x57\x7c\x3d\x38\x37\xce\xb0\x4c\x8d\xd4\x6f"
+ "\x20\x54\xad\xcc\xe8\xcb\x6c\xf8\x7c\x17\xa3\x1a\x7c\x9a\xf8\x78"
+ "\xe3\xa9\xb8\x42\xc6\x08\x3f\xc3\x73\x85\xc8\x49\xf3\x06\xf6\xef"
+ "\x46\x9d\xfa\xb5\xc7\xc0\xce\x1b\x6f\x36\xda\xb7\x47\x64\x15\xd8"
+ "\x48\x05\x76\x71\x35\xac\x7a\x0d\xec\xaf\x46\xf8\x3e\xcc\xed\x85"
+ "\xef\xa7\x36\x35\x43\x6d\x61\x33\xd5\xc8\x91\x49\xcc\x73\xc1\xb8"
+ "\xed\x1a\xdc\xf6\x55\x1d\x8c\xad\xd0\xa7\xa1\xf8\x7c\x38\x3e\x4c"
+ "\xeb\xf4\xda\x0e\x7c\xbc\xba\x27\x8b\xb9\x59\x06\xce\x3e\x18\xf7"
+ "\xd8\xcf\x8c\xe7\x5b\xb9\xf8\xef\xf1\x7d\x91\xca\xad\x10\x29\xd4"
+ "\x89\xbd\x0b\x08\x1e\x46\x55\x99\xda\x61\xef\x71\x53\x40\x18\x9c"
+ "\xeb\x4d\xf1\x97\x51\x64\x48\x1f\x5c\x74\xcf\x33\x24\xb7\x2e\x73"
+ "\x44\x0c\x93\x36\xb8\x08\xaf\x15\xbf\xa4\xcc\x60\xe7\x40\x31\xcb"
+ "\x5c\x10\xf1\xc3\xe0\xb2\xc4\x99\x8c\x2e\xf1\x26\x5c\xab\x53\x48"
+ "\xee\xc1\x85\x3a\xf0\xd9\x88\x18\x8c\x89\x82\xbb\x75\x0a\x5c\xbf"
+ "\x8f\xe9\xb0\xfe\xf3\x2d\xe4\x5e\x5d\xe0\x5e\x11\x6e\xb7\x36\x35"
+ "\xd3\x95\xde\x6b\x46\x3e\xc6\x07\x5c\xa3\x92\x5c\x1b\xda\x5d\x06"
+ "\xd7\x48\x1f\x5c\x09\xc7\xf9\x6a\x9d\x6e\x3b\xb3\xcf\xd7\x42\xe6"
+ "\xf4\xfa\x7a\x84\x6e\x2f\x64\xf4\xa1\xfa\x0b\x46\x18\x43\x11\xec"
+ "\x1f\xa7\x45\x93\x55\x26\x9b\x91\x67\xae\xb1\x9d\x59\xf8\x6f\x9d"
+ "\x3b\xdb\x4e\xbc\x50\x3b\x5a\x65\x66\xd0\x34\xbd\xda\xa9\xfe\x2e"
+ "\x53\xb6\xfe\x2d\xe8\xdb\x32\xc4\xd4\x2f\x64\x8a\x12\x82\x99\xba"
+ "\xd4\x1f\x11\xe8\x98\x0a\x04\x5c\xda\xb5\x83\x13\xa3\x0b\x5d\x84"
+ "\xdc\x3a\xc4\xb8\x31\x27\x0a\x2b\xd0\x92\x60\xa6\xaa\x34\xce\x80"
+ "\x4a\x6a\x2a\x51\xfc\x59\xe4\x9a\x54\x8c\x3c\xe2\x83\x19\x5d\x51"
+ "\x44\x05\x22\xdb\x8b\x51\xd2\x45\xe4\xbc\xe4\x18\x53\x37\x06\xc6"
+ "\xd4\x1f\x2a\xf0\xf6\x4a\xd8\x6e\x40\x49\x55\x8c\x3e\x71\x0a\x72"
+ "\xc5\xff\x2f\x3e\x86\xb7\x5f\x46\xf0\x3c\x3b\x87\xc6\xe9\xdc\xb6"
+ "\xc0\x35\xf1\xf9\x5b\xa1\x2f\xc6\xbb\xcc\xa1\xf5\x77\x11\x5a\x32"
+ "\x01\x79\xc5\x47\x22\x55\x28\x0c\xed\xa5\xfa\x03\x28\xd4\xc0\xc0"
+ "\x98\x7d\x1c\x25\xcc\x40\x2e\xa1\x7a\xbc\xd6\xfb\x0c\xfc\x72\xd0"
+ "\x56\x38\x16\xee\x4d\x83\xef\x6d\xc9\x79\xd0\x30\xd7\x4d\xe7\x1c"
+ "\xe6\xce\x39\x8f\xb0\xcd\xee\xb9\x7f\xae\xaa\x4b\xff\x3c\x0d\xee"
+ "\x3d\x18\xdb\x00\xae\x53\x66\xc4\xe7\xdd\x65\xc7\x1f\x6c\x03\xa7"
+ "\x69\x7a\xc0\x6a\x66\x50\xc4\xb4\x38\x0d\xdb\xae\x56\xb9\x69\xc5"
+ "\xd6\x79\x6c\x9f\x78\xc7\x86\xea\x99\xdb\x3a\xcf\xa0\x08\xd8\xbf"
+ "\x27\x34\xee\x65\x86\xf3\x9b\xb6\x36\x75\x53\xb5\xc9\xde\x26\xbf"
+ "\xc0\x31\x5a\xf0\x85\x56\x19\x83\x9c\x6b\x53\x3f\x71\xd5\x3a\xdd"
+ "\xd1\x9a\x61\x17\xf3\x56\x5b\xd3\xb1\xdc\x31\x3e\x5a\xa7\x1a\x6f"
+ "\x7a\xcc\x06\x04\x98\x6e\x3c\x06\xf6\x03\xfe\xef\xf8\xd0\xfd\x2c"
+ "\x9e\x1b\xf7\x73\xe3\xab\xa9\x6d\x25\xf0\x70\x96\xc1\x73\x94\x8e"
+ "\x71\x6f\x88\x60\x6e\x7b\xb9\x32\x0a\xf0\x8d\x9e\xa9\x33\x66\xbe"
+ "\x80\xc7\x57\xd7\x52\x7d\x0d\x22\xc7\x7f\x72\x87\x49\x6f\x88\x26"
+ "\xf3\x53\x3f\x39\x8f\xdb\x04\xdd\xa4\x82\xf1\x58\x15\x5a\xc8\xd4"
+ "\x61\xfe\x30\x64\x2a\xb5\xa9\xf3\x60\x4c\xce\x1c\xa5\x35\x7a\xbe"
+ "\x8e\xea\xb6\x45\x06\xe2\x31\x01\x3f\x6f\x4c\x1a\x9c\xcb\xb5\x03"
+ "\xd7\x6d\xa3\x55\x7e\xb2\xdf\x00\xe7\x33\x19\x2f\x70\xfd\x21\xfc"
+ "\x46\x78\xe8\x93\xfd\x4c\x1f\xd8\x97\xd6\x2f\x1b\xf6\xb5\xb9\xa4"
+ "\xcc\x0a\x84\xed\x08\xfe\x3e\xad\x49\xbc\x05\xc7\x66\x8d\x20\x98"
+ "\xee\x97\xc5\xfb\x5b\x81\xed\xb9\x31\x0d\x73\x14\xe6\x26\xd8\x3e"
+ "\x9d\x72\x10\x19\x03\x58\xee\xf1\x7c\x01\x78\x25\x2b\x4e\xeb\x14"
+ "\x56\x8d\xed\x84\x7d\x5b\x43\x78\x2d\xde\xb0\x2d\x32\xf8\x28\x28"
+ "\xa2\xa3\xc7\xf0\x73\x94\x95\xad\x75\xfa\x23\xa2\xb6\xcc\x3a\x80"
+ "\x8f\x65\xfb\x09\x5c\x82\xff\xcf\xf2\x0a\x9c\x03\xcf\x79\x1a\x1e"
+ "\xb3\x08\x3f\x66\xe5\xe3\x71\x0b\xf8\xa4\x8e\x1b\xa7\x70\xdb\xb9"
+ "\x4c\xc7\xf7\x34\xd0\xaf\xe4\x4b\x5c\x5f\xcc\xfb\x66\xe2\x45\x26"
+ "\xfd\xfd\x40\x72\xec\xe0\xaa\xda\xd4\xcd\x5d\xe1\xfa\xe5\xe6\x78"
+ "\x21\xf7\xb5\x79\x25\x60\xba\xfc\xb9\x63\xf0\x37\x68\x25\x53\x7b"
+ "\xc0\x2f\x2e\xc0\x2b\xdf\x61\xbc\x61\x4e\xc9\xda\x80\xf5\xcf\xfb"
+ "\xc1\x75\xe9\xef\x87\x41\x5b\xd1\x26\x6e\xc1\xe7\xe2\xe7\x01\xf8"
+ "\xc5\x85\xe5\x0d\x83\x5e\xc9\x3e\xf3\x06\xd4\xbf\x91\x4b\x60\xdb"
+ "\x3d\xf7\xf7\x83\xb9\xed\xce\x6c\x9f\x14\x4a\x23\x5c\xdf\xc9\x74"
+ "\xbd\x7b\xee\x83\xcb\xa1\x5d\x8d\xd6\x69\x78\x18\x8f\x6b\x36\x78"
+ "\xfb\x30\x4c\x38\xc6\x8d\x12\xfa\x7a\x19\xfe\x7d\x8c\xc3\xe9\x13"
+ "\x47\x0b\x11\x0a\x02\x6f\xdd\x06\x7f\x6e\xee\xc4\xe8\x6a\x53\x3f"
+ "\x45\x5a\xb4\xda\x03\x9f\xbf\x1a\xfe\xc6\xdb\xf1\x31\xb0\xdd\x4b"
+ "\x8b\xd6\x70\xcf\xca\x06\x57\xec\x1f\x7e\xbb\x9f\x8e\x20\xed\x7e"
+ "\x3a\x12\xb7\xc7\x8d\xf1\x4f\xe0\xff\xe3\xf3\x71\xdb\x39\x9b\x98"
+ "\x6a\xdc\x1e\xb4\x15\x65\xba\xc6\x3a\xd8\x66\xba\x4e\xd0\xac\xc6"
+ "\x6b\xad\x80\xfd\x6b\xcd\xef\x21\x6b\x13\x53\xc3\xf5\x2f\x57\x8b"
+ "\xb6\x04\xe2\x7d\x29\xb0\x0d\x9f\x4b\xb0\xf0\xe9\x61\x8c\x13\x2d"
+ "\xb9\x2f\x25\xc1\xcb\xa7\x45\x5a\x94\x5d\x68\x3e\xf6\x80\x2f\xda"
+ "\x9b\xc6\x66\xae\x3d\x9d\xa9\x3d\xda\x16\x69\x83\x49\x8b\xe6\xc6"
+ "\x19\xf6\x99\x75\xc5\xed\xd7\xa6\x7e\xa6\xd6\xa2\xb5\x5d\x49\xdf"
+ "\x36\xa6\xd5\x10\x6c\x83\x0f\xd8\x73\x88\xcf\x53\xd7\x97\xe1\x71"
+ "\x73\xeb\x06\xcc\x63\x83\x4f\xc3\x39\xe3\x2c\xc6\x4c\x17\x8c\x09"
+ "\xee\xb9\xcf\xc4\x7d\xa1\xfc\x83\xc7\xb9\x10\x15\xb4\xe3\x0c\x7a"
+ "\xe5\x12\x1e\x7b\x37\x76\x62\x00\x7b\x9f\x65\x99\xda\x80\xf3\x9d"
+ "\xc1\x5e\x2f\xc1\xb6\x3d\x5a\xb4\xa7\x12\x6f\x4b\x85\x63\xb4\xca"
+ "\x34\xd1\xef\xed\x26\xf6\x40\x8a\xd2\x6c\x2d\x8e\x2b\xf1\x73\x39"
+ "\xb4\xb4\x6b\x0d\x2a\xcd\x36\x22\xe3\x5f\x7a\xc7\x04\x26\x32\x9a"
+ "\x2b\xca\xec\xbe\x25\x75\x55\x48\x9a\xbe\xfc\x8c\xfd\xfe\x15\x53"
+ "\x0f\xf1\x4f\xfc\x60\x84\xf5\xc6\x0d\x65\xce\x84\x52\xdd\x2d\x96"
+ "\xa3\xe0\xff\x2c\x0f\x6c\x84\x78\x09\xc7\x4c\x10\x17\x47\xa7\x29"
+ "\x48\xdc\x64\x84\x63\xb7\xe0\xed\x38\xa6\x82\xb1\x67\xab\xd9\x3e"
+ "\xe6\x2f\x3d\x75\xc4\x36\x39\xee\x2c\x57\xe3\xfe\xea\x5f\xd7\xe0"
+ "\x3e\x1b\x77\xf4\xd4\xe1\x7b\x48\x8a\x63\x8c\xa5\xfa\x5a\x0d\x1e"
+ "\x9f\xd4\x0b\x71\xbc\x97\x7d\x3d\x34\x07\x31\xc6\x9d\x3d\x75\xd2"
+ "\xee\x21\x9b\x5d\xff\x00\x31\xf1\x0d\x5d\x9f\x9e\xba\x24\x03\x52"
+ "\xac\x4f\x6c\xe3\xf2\x6a\x36\xa3\xb9\xfd\x74\xef\x98\xda\xd4\x1c"
+ "\xd5\x91\x38\x84\xa4\x6b\xef\x1c\x95\xe9\xde\xb7\x70\xf7\x0e\xd7"
+ "\x62\xe7\xec\x3f\x97\x95\xcc\xde\x2f\x1c\x23\xba\xd6\x89\x59\xe6"
+ "\xc6\x1c\xcd\xd6\xa3\xf9\xd9\x4c\xfd\xfc\x1c\xa4\x00\xed\xa3\xfd"
+ "\x72\x4b\x39\xe6\xe3\x40\x93\x3d\x59\xdb\xe9\x75\x28\x26\x11\xa9"
+ "\xae\x29\x73\x6e\x86\xc6\x27\xb3\xdf\x4f\xfa\x16\x8e\x93\xd8\x57"
+ "\xf6\xfb\x55\x25\x10\x63\x87\xea\x93\x18\x32\xa6\x6c\xe9\x3c\x86"
+ "\x6b\x0f\xef\x33\xf9\x6f\x0b\x17\xfb\x4a\xbf\xc6\x16\xb5\x8c\x7b"
+ "\x55\x09\xdf\xeb\x96\xf3\xf2\xef\x75\xcb\x2e\xeb\x7b\xdd\xda\xa6"
+ "\x79\xef\x75\xab\xe8\xf7\x0f\x6c\xdc\xab\x5a\xf8\x5e\xb7\x9e\x90"
+ "\x7f\xaf\x5b\x33\x04\xee\xf5\x66\x33\xdf\xab\xe8\xfb\x3f\x1b\xf7"
+ "\xea\x23\x7c\xaf\xb9\x07\xe4\xdf\x6b\x6e\xb2\xf5\xbd\xe6\x9e\x6f"
+ "\xde\x7b\xcd\xad\x14\xbd\x57\x85\x1b\x83\xf9\x09\x78\xa9\x3e\xf1"
+ "\x1e\x68\xb1\x4d\x63\x92\x13\xb6\x21\x45\x51\x4d\x1d\x2a\xe9\x5a"
+ "\x8e\x92\x16\x21\xc5\xc0\x18\xe0\xbd\x65\x68\x28\xb3\xa1\x5e\x5b"
+ "\x92\x5d\x0d\xdb\xaf\xa0\xe2\xb8\x3a\x14\x38\x0f\xf3\xef\xb6\xdd"
+ "\xa5\x51\x52\xf9\x77\x5b\x6c\x23\xff\xea\x07\x73\x9c\xbb\xfd\x4c"
+ "\x49\x75\x3d\xc2\xf7\x0f\xff\x3f\xd2\xc8\xbf\xcb\x88\xbd\x2d\xf9"
+ "\x17\xdb\xa3\xb4\xae\x8e\xc7\xbf\x64\x0d\xd5\xf6\x75\x96\xdc\x9b"
+ "\x7a\x0d\x21\x61\xee\xdd\x3e\x03\x73\xef\x16\xd8\x2f\xad\xff\xdb"
+ "\x7d\x4d\xdc\x9b\x06\xd7\x34\xe7\xde\xa3\x51\x78\xac\xdd\xbe\x56"
+ "\x1e\xf7\x6e\x5f\x6b\xba\xef\x1c\xee\xbe\xc1\x56\x3a\x3e\xf7\x6e"
+ "\x17\xad\x75\x69\x8e\x5b\x66\x93\x2f\xfa\xb2\x7b\x5d\x1b\xe3\x8e"
+ "\x3e\x3e\x78\x7c\xab\x05\x9b\xfc\x63\x4b\x9d\xf3\x15\xe5\x9f\xd9"
+ "\xb5\x10\xb7\x6b\xa3\x9c\x98\x1d\xbd\xca\x43\x63\x99\x0b\x4c\x9f"
+ "\x3e\xff\xaf\xbd\xef\x01\x88\xaa\xca\xfe\x3f\xf3\xe6\xa1\x23\x02"
+ "\x33\xe8\x88\xb3\x65\x36\x29\xd6\xb4\x6b\x8a\x05\x44\x7d\xfd\x16"
+ "\xdb\xda\xca\xfe\xd2\x74\xfb\x9a\x5f\x6a\xad\xb0\xd4\xb0\xfc\x43"
+ "\x6a\x4a\xfe\x01\x34\xb7\x9f\xb5\x0a\x44\xe8\xd7\x0a\x81\xdd\xa5"
+ "\xd5\x5a\x32\x34\xdb\xa5\xed\x8f\x53\x62\x3f\x32\x04\x6a\xf5\xbb"
+ "\xd6\x4f\xb7\xc9\x35\x23\x45\x25\xa5\x40\x98\x99\xfb\x3d\xe7\xde"
+ "\xfb\x98\x37\xc3\xa0\x03\xda\xae\xf9\xf5\xe9\xe3\xbd\x77\xdf\xb9"
+ "\xe7\x9e\x7b\x3f\xe7\x9c\x7b\xef\x79\x6f\xde\x8d\xa3\x38\x26\xcd"
+ "\xf1\xf1\xfe\x13\x38\x1e\xdf\xd7\x3d\xb9\x05\x4f\xec\xff\x32\xb2"
+ "\xd0\x5e\x5e\x5b\xd8\xaa\x78\x97\xa4\x9a\x11\x07\x0b\x5b\x9b\x94"
+ "\xcc\x9e\x9a\x3c\xf1\xd4\xda\xf1\x13\x77\x3a\xbe\x04\xa2\x65\xcb"
+ "\xd5\xe4\x9e\xcb\x5f\xa6\x9e\x59\xfe\xb2\x9b\xba\x2f\xbf\xe0\x19"
+ "\x9a\xfc\x65\x6a\x48\xf2\xc7\xa0\xfc\x6d\x49\x61\x38\xd7\x53\xb6"
+ "\xb7\x25\xa9\xdd\x94\xa7\x30\x24\x8c\xcf\xad\x8c\x90\xfd\x1f\x8b"
+ "\x19\xd3\xf4\x5a\x71\x93\x82\x3e\x80\xf7\xe1\x64\x7b\xc2\xff\x35"
+ "\xa0\xcf\xfa\x9c\x09\x9f\xd4\xd4\x4d\x9f\xf4\x52\x97\xeb\xff\x75"
+ "\x2e\xff\xa6\xb4\xef\xa1\xfc\xae\xeb\x1f\xe8\x13\x37\x5f\x3d\xb1"
+ "\x4b\x9f\xb8\x2e\x29\xad\xb3\x4f\xfc\xc3\x3b\xdd\xf7\x89\x7f\x58"
+ "\xd5\xd9\x27\x6e\xfc\xda\xe7\x13\x37\xee\xed\xb9\x4f\xdc\xf8\xdb"
+ "\xd0\x7d\xe2\xc6\x65\x3d\xf3\x89\x1b\x53\xce\xec\x13\x37\x96\xf6"
+ "\xcc\x27\x6e\x2c\xed\xec\x13\x37\xaa\xfe\x3e\x71\x63\x97\xdf\xba"
+ "\x60\xf9\x03\x5b\xb1\x8f\x8e\x38\x62\xdc\xb4\xc9\xbd\x02\xc0\x9b"
+ "\xff\x5c\xf5\x04\x0f\x6b\x61\xcf\x0e\x6c\xf5\x2a\xf1\xe4\x57\x92"
+ "\x5b\x5a\xd2\x4d\xde\x45\x8e\x08\xd6\xef\x27\xb7\xb1\x76\x1b\xcd"
+ "\x87\x62\x51\x7e\x33\x6b\x71\x44\xb1\x45\x8e\x7e\x45\xdf\x81\x15"
+ "\x77\x5b\x91\xec\x8f\xf1\x3c\x8e\x2d\xb2\x85\xe7\x2e\x84\xe1\xe6"
+ "\x66\x30\xa1\x0c\xa9\xe6\xe5\x16\x40\x1f\x64\xa5\x73\xb6\xe2\x60"
+ "\x66\xc9\x77\xa0\x9a\x33\x11\x9b\x68\x2c\x2f\xd3\xcc\xd8\x7c\x07"
+ "\x94\xcc\x03\x93\x57\x01\x5b\xb1\xc2\x2a\xdc\x2d\x0e\xc5\x63\x1d"
+ "\x07\x02\x9f\x97\xa7\xe0\xbc\xdf\xc2\x0a\xef\xa8\xf1\xc6\xdc\xb1"
+ "\xcd\x93\x9d\x6e\x64\x4b\x52\x8d\x24\xab\xa7\xf0\x8e\x0a\xb6\x0e"
+ "\xf7\xec\xf4\x28\x1a\x43\x97\x2c\xc4\xb2\x5b\x6c\xe1\x79\x58\x76"
+ "\xf1\x42\x88\xdd\xf0\x1d\x38\xd8\x29\x87\x82\xf8\xa7\xd2\x3a\xa4"
+ "\xd8\x46\xa9\x5e\xe5\x60\x26\xde\x53\xc9\x27\x32\x2a\xdf\x8d\xe5"
+ "\xb7\x3b\x28\x3e\x85\xba\x0d\xb6\x12\x2c\xdf\xb3\xc8\xd1\x4d\x7b"
+ "\x79\xd9\xc1\xf5\x53\xca\xe5\x1d\x3e\x62\x22\xdb\x8c\x3b\xc9\x85"
+ "\x6d\x58\x42\x6d\x32\x62\xc4\x24\x92\x6d\xcd\x77\x30\x1c\xe5\x8c"
+ "\x45\x19\x1c\x58\x2e\x7d\xc3\x25\xf5\xfe\xc7\x2c\xa4\xa3\x7e\xb2"
+ "\x79\x9e\x95\xb2\x9d\x40\xd9\x8e\xfb\x64\xa3\xb2\xa8\x7d\xba\x7a"
+ "\x3e\x3a\x61\xd9\x60\xb2\xcd\xaf\xcc\x99\xbd\x53\xe8\x59\xe9\xa9"
+ "\x25\xe9\xdd\xd4\xd5\x97\x9b\xbb\xd2\x97\xbc\xcd\x30\x88\x59\xd6"
+ "\x54\xdf\xf9\xeb\xcf\x19\xc5\xff\x7e\xbd\x19\x86\xd7\xa1\x5d\xd7"
+ "\xb6\x1e\x03\x16\xbd\xa6\x7a\xa7\xa3\xb1\x9b\x65\xbd\x92\xd6\x55"
+ "\x59\xcf\xac\x60\xf5\x5e\xeb\x1d\x4d\xcc\x3a\x3e\x25\x6f\x05\xcb"
+ "\x6c\x8f\x1d\x6a\x69\x8b\x1d\xea\x7a\xc0\x6d\x41\xbd\x66\x99\xf6"
+ "\x79\x60\x3f\x6c\xac\x78\x69\xd7\x1e\x9c\x97\xde\x0b\xa6\x83\xc6"
+ "\x8a\xfd\xd9\x9f\xd2\xb3\xa7\x57\x9a\xfc\x9f\x3d\xfd\xd1\x0a\xc6"
+ "\xf2\x95\x60\x7c\xb5\x10\x8c\x9b\x2b\x01\xe9\xfc\xf7\xd7\xf6\x08"
+ "\x5e\xe5\x53\x27\xbc\x3c\x18\xb2\xdc\xec\x2b\x96\xef\xb6\xe5\x2a"
+ "\xac\x75\xc2\xb5\x06\x97\x73\x21\x3d\xb3\x29\xbf\x07\xdb\xf4\x28"
+ "\xf6\xb5\x66\x3c\x1f\x86\x98\x42\xc6\x3c\xe8\x7f\xc4\x58\x1e\x4b"
+ "\x76\x63\x6e\xee\x9d\xe2\xc9\x4e\x05\xb7\x7d\x6a\x72\x7b\xe1\x1d"
+ "\x2e\x4f\xe1\x8d\xa5\x5e\xcb\x73\xd5\x14\xbf\xa5\xe7\xa2\x68\x1b"
+ "\xa9\x0f\x78\x4c\x64\x8f\xa9\xce\x07\x77\xc1\xe1\x05\xa0\x64\x7f"
+ "\x0b\x91\xa8\x9b\x1d\x76\x35\xbe\xd1\xdc\xba\xac\x91\x79\xc9\xb6"
+ "\x28\x5e\x8a\xf7\xa2\xb2\xbe\xc5\xf9\x7d\x53\x03\x14\xcd\x03\xab"
+ "\x67\x7e\x7a\xbf\xa6\x53\xe9\xfd\x5f\xf4\x82\x35\xaa\x19\x2c\x45"
+ "\x27\x51\xa7\xe6\xa3\x3e\x9d\x44\x3b\x6b\x12\x76\x46\xbf\xc3\x2f"
+ "\x26\x1b\x7b\xe6\x93\xea\x92\x93\xc2\xc6\xb8\x1e\x91\x8d\xcd\x45"
+ "\x3d\x9a\xc3\x63\x14\x36\x6c\xbf\x0a\x37\xda\x05\xcb\x7d\x79\x4f"
+ "\xd1\x0a\x46\xf1\x5c\xa5\xe4\x48\x6f\x1e\xbf\x08\xbb\x56\xb1\xef"
+ "\x9a\xd8\x0a\xbe\x58\x46\xc5\x81\xb6\x61\x43\x5d\xf6\xbb\xd8\x89"
+ "\x83\xc6\xf2\x89\x98\x6e\xb2\x4f\xbe\xc6\x82\xed\x7d\x40\xc4\x36"
+ "\x2a\xf6\x53\x8c\xd2\x85\x6d\x41\xed\x62\xbf\x0b\xae\x39\x68\xfc"
+ "\xe3\x30\x6a\xc7\x45\x9b\xc0\x98\x71\x0b\x3b\x84\x6d\x36\x9c\xf1"
+ "\x38\xde\x1f\xf9\xbb\xb2\xf4\xec\xfd\x23\xfe\xac\x4c\xe4\xf1\x60"
+ "\xbb\xb9\x2d\xed\xe9\x5e\xeb\x38\x8b\xf3\x91\x36\xee\x87\xa8\x1d"
+ "\x0f\xcf\x02\xe5\x81\x46\x6c\x2b\x0f\xb6\x55\x8b\x23\x02\xfd\xd1"
+ "\x44\xf2\x47\x2c\xff\x27\xa3\x97\xba\x98\x77\xc2\x34\x23\xcb\x7a"
+ "\x0c\x4c\x14\xb7\xbe\x3f\x03\xd8\xb2\x63\xd8\x5e\xcd\xfb\x00\xfd"
+ "\x52\x14\xfa\xac\x7e\x1b\x16\x82\x95\xda\x2b\xb2\x11\xc7\x2a\x05"
+ "\x79\xce\xcd\x59\xd5\x61\x1e\xd4\x5f\xf2\x4f\xe6\xe5\x86\x3e\x68"
+ "\x67\x51\xab\xc9\x1e\xd1\x3e\xcd\xcb\xb9\xbf\x4c\x2d\x42\x3b\x74"
+ "\x2f\x72\x0c\x69\x5f\xe4\xb0\xe3\x3e\x58\xf3\x61\x9a\xff\x60\xb9"
+ "\xaf\x8c\x26\xff\x55\x97\xe9\x02\x37\xb6\x6d\x14\xf5\x75\x8b\x1c"
+ "\x83\x78\x1b\x3f\xec\x80\x91\xad\x60\x40\x99\x2c\x28\x2f\x94\xcc"
+ "\x00\xd3\xee\xf4\x83\xe0\x41\xdb\xd0\xda\x7d\xfc\x4c\x3b\x20\x5f"
+ "\x65\xa7\x63\x2f\xc8\x36\x33\x74\xad\x77\x9b\xb7\xf8\xf4\x6e\xf3"
+ "\x16\x6a\x3b\xa1\x77\x9b\x2b\x2e\x46\xbd\xfb\x28\x95\xeb\x9d\xb1"
+ "\x7d\x18\xd7\xa7\xe1\x75\xee\xad\xd8\x46\x9b\x8b\x48\x47\x48\x67"
+ "\x3e\x7c\x85\x74\xe6\xb5\xaa\x0b\x55\x67\x4e\xb7\x38\xec\xb8\x7f"
+ "\x2f\x3a\x83\x7c\xb9\xce\x50\x5b\x7d\x94\xda\x06\x5a\x1b\x71\x5b"
+ "\xcd\x5f\x53\x6d\xcf\x86\x5b\xd1\x56\xf7\x9b\x97\x0f\x86\xdd\xbc"
+ "\x9d\x2a\xf6\xdb\x27\x33\xef\x41\xe3\x6b\x9e\xec\x8f\xc1\xd2\xb6"
+ "\x82\xb1\x3a\xf7\xab\xe0\xb5\x8e\x05\x7a\xee\xe8\x2d\x34\xba\x70"
+ "\xce\x5a\xcd\x9e\x7d\xc5\x4e\x31\x75\x73\x06\xc5\xb1\x73\xeb\x3d"
+ "\x6b\x27\x97\x7a\x9f\xcd\x45\x7f\xfe\xca\x2a\x7a\x76\xe0\x7d\x76"
+ "\x76\xa9\x37\xfa\x25\x57\x4b\x6e\xc5\x18\x97\x41\x29\xe7\xb1\xed"
+ "\xc2\x3b\x28\x96\x47\xfe\x57\x3e\xe7\xa2\x67\x88\x15\xd3\xb4\xe7"
+ "\xd9\xe4\x13\xe4\xb3\x03\xf9\x6c\xa1\x82\x30\x0c\xa7\x67\x0b\xd2"
+ "\xa7\xdc\xad\x3d\x5b\xd0\xae\xe9\x3e\xe6\x4b\xe5\xcf\x57\x7d\xf9"
+ "\xf6\x48\x3a\x99\xef\x95\x4f\xc9\xd7\xfb\xf2\x89\x6b\xec\x47\xf6"
+ "\xb4\x2b\x60\x0a\x3a\xc6\xb1\x4e\x2e\x45\xfb\xc1\xb9\xd1\xd6\xbb"
+ "\xf1\xa8\x1c\x36\x6e\x79\x1c\x8f\x46\x3c\xf2\x38\x66\xf7\xfa\xab"
+ "\x2d\xe2\x5b\xe3\x85\xe3\x17\x88\xf2\xb7\x44\x73\x9b\xfc\x31\x44"
+ "\x1e\x91\xe7\x2d\xb9\x5b\x66\x69\xcf\xe5\x3b\xe8\x3b\xf0\xd9\x62"
+ "\xa2\xb2\x11\x23\x55\xbc\x2b\x20\xae\xe9\x9d\x19\xc9\x8f\x5f\x7b"
+ "\x63\x87\xd5\x3b\xb3\x0e\x42\xa3\x71\xcb\xbe\x3a\xec\xc3\xbd\xeb"
+ "\xc6\x2f\xa0\xe7\x5e\x64\x57\x5a\xb9\x68\x8b\x26\xe7\x62\x4e\xf3"
+ "\x26\x1f\xe7\x16\x8e\xc9\x60\x05\xed\x2e\x9a\x0b\xb6\xb0\xf4\x5b"
+ "\xe4\x91\x9e\xf7\x18\x45\xdc\x64\xeb\x30\x86\xd8\xd2\x3a\xea\x1d"
+ "\xef\x11\xd1\xfa\xe6\x39\xaa\xfd\xbd\xa5\x20\x9f\xc9\x0b\x79\x69"
+ "\x0d\x74\x7a\x4f\xe7\x9a\x1c\xc8\x69\x09\xb2\x06\xba\xef\x7d\x9e"
+ "\xad\x16\xef\xda\x31\x19\x2d\xb9\x5b\xd3\x10\x83\x52\x7d\x9d\x83"
+ "\x61\x81\xf4\x4b\xbb\xba\xd7\x3d\x1c\xb6\xae\xef\x8a\xcf\xed\x0e"
+ "\x0f\xeb\x26\xaf\xae\xe3\x3f\xb1\x43\x32\x26\x6c\xf2\x38\xbd\xed"
+ "\xa9\xe6\x9d\x4b\x8f\x75\x73\x6c\xf3\xfa\xe8\xae\xf8\x7a\x0a\xc7"
+ "\xda\xda\xaf\x1e\x92\x41\xcf\x1f\x3c\x73\x53\xc7\xd6\x6e\x72\xc3"
+ "\xcb\x73\x1a\x14\xf2\x87\xe5\x47\x2a\x94\x09\xd7\xca\x31\xdc\x21"
+ "\xb0\x50\xdc\x8b\xc6\x72\xb9\xc7\x21\xb6\x2d\x3b\xd5\xdc\xd6\x9e"
+ "\x0a\xbf\x39\x0e\xa3\xbd\x0f\xdb\xc2\x57\xcf\x00\xf5\x34\xfa\xc2"
+ "\xd3\x5f\xa5\x9b\x3f\xda\xdf\x00\xdb\x31\x6f\x6d\xb3\x0b\x8a\x91"
+ "\x96\x7d\x95\x1a\x75\x47\x1a\x6b\xad\x49\xdb\x0a\x13\x1c\x1e\x67"
+ "\xd6\x17\x10\x89\x3e\xd1\x52\x97\xf9\x12\xce\xa1\x8e\x41\xd8\x13"
+ "\x8a\xbd\xce\xfd\x25\xac\x99\x81\xbe\x14\x7d\x67\xf6\xdd\xd8\x67"
+ "\xa0\x4e\xbc\xa8\xef\x33\x1e\x79\xc1\xd7\x67\x9c\xc0\x3e\xa3\x00"
+ "\xfb\x8c\x6c\x1b\xd4\x66\x38\x01\x7d\x58\xef\x3b\x33\xcc\xad\x59"
+ "\x19\xd8\x77\x3c\x81\x7d\x47\xe6\x97\xc0\xfb\x8d\xc6\x06\x40\x9f"
+ "\x1f\xb5\x61\x0e\x58\xdb\x4e\x60\xdf\x71\x02\xfb\x8e\x2c\xd1\x77"
+ "\x3c\x7f\x1c\xfb\x8e\xb9\x38\x37\x98\x83\x7d\x47\x63\x90\xbe\xe3"
+ "\x78\xf0\x79\x81\xe6\x07\x4f\x9f\x70\x28\xcf\x63\xbf\xb1\x78\x2f"
+ "\x28\xcf\x4f\xee\xdd\x4d\x9d\xd9\xd6\xe5\xfb\xdf\x6c\xdd\xf8\xff"
+ "\xf0\xb2\x54\xa0\x76\x5f\xdc\x8a\xfd\x30\xe2\x52\xe7\x70\x83\x79"
+ "\x4f\xef\x94\xd3\x98\xde\x1e\x13\x6f\xdf\xf4\x59\x93\xc2\x0a\x93"
+ "\x92\x4f\x23\x6e\x8b\x1f\x07\xa5\x1d\x31\x2c\xbf\x2b\x5f\xa1\x79"
+ "\xa2\x77\x6d\xfc\x34\x31\x27\xfd\xd3\x97\x14\x13\x31\xbb\x04\x6e"
+ "\x6e\x96\x6a\x66\x0f\xa5\x46\xae\x79\x10\x54\xcf\x3f\x6c\xe1\xde"
+ "\x87\x6c\xa6\xac\xbd\x60\x69\x7a\x28\x1d\xdb\xeb\x18\x6c\xff\x24"
+ "\x5f\x29\xb9\x17\xec\xf4\xcd\x44\xf6\x0c\xb8\x4b\xee\x87\xa4\x92"
+ "\xbf\x43\x7c\xf1\xbd\x30\x7c\xc3\x67\xf4\x6d\x75\xc4\xb0\x81\xb5"
+ "\xee\x4e\xff\x0b\x94\x7c\x06\xc9\x6c\xdd\x8d\x76\x36\x60\xac\x0d"
+ "\xcf\x93\xf2\xef\xc5\xf9\x03\xde\x9f\xe0\x38\xed\xac\xcb\xdc\x0d"
+ "\xab\x0f\x02\x64\x7d\x2d\x31\xee\xc0\xf7\x00\xb8\x15\xf4\x1f\x34"
+ "\x26\x18\x2f\xf0\xa5\xe7\x59\x34\xe7\xe8\xc0\x78\xc6\xfb\xfe\xe3"
+ "\x02\x89\xf1\xee\xc6\x7a\xc0\x3e\xb0\x77\xc7\xf8\x80\x63\x7c\x00"
+ "\xb4\xb1\x01\x62\x13\x85\x63\x01\xeb\xe9\x53\x01\xe3\x83\x79\x3d"
+ "\x1c\x1f\xc8\xf9\x8d\x7b\xbe\x43\x29\x52\x18\x64\xef\x06\x65\xbd"
+ "\xb7\xbb\x18\xff\x89\xff\xfe\x9b\x62\x5f\xe2\x9d\x9c\x37\x66\x12"
+ "\x16\x2e\xe3\x1b\xe9\x77\x3b\x0c\xd0\x43\xec\x4b\xcf\x82\xfd\x21"
+ "\x81\x7d\xe5\x17\x3d\xc4\xbe\x94\x3d\x63\x98\xd4\x33\xec\xbf\xed"
+ "\x26\xf6\xfc\xdb\x93\x17\x29\xf6\x95\xe5\xfe\xd8\xff\x79\xba\xc0"
+ "\xfe\xcf\xd3\x7a\x8e\x7d\xc2\x59\xec\x3e\x41\xda\xfd\x5f\x0e\xf4"
+ "\x0c\xfb\x04\xb4\x7b\x43\x79\xcf\xb0\x3f\xd6\x4d\xec\xf9\xf7\x2b"
+ "\x2f\x52\xec\xff\xb2\xc9\x1f\xfb\x37\xa7\x0a\xec\xdf\x4c\x3b\x07"
+ "\xec\xcf\x62\xf7\x09\xd2\xee\xdf\xfe\xb4\x87\xd8\xa3\xdd\x2b\x6a"
+ "\xcf\xb0\x3f\xd0\x4d\xec\xf9\x37\x30\x2f\x52\xec\xdf\x2e\xf3\xc7"
+ "\xfe\xad\xfb\x04\xf6\x6f\x4d\xe9\x39\xf6\x89\x67\xb1\xfb\x44\x69"
+ "\xf7\xef\xee\xed\x19\xf6\x89\x68\xf7\xca\x94\x9e\x61\xff\x4e\x37"
+ "\xb1\xe7\xdf\xd1\xbc\x48\xb1\x7f\xb7\xd4\x1f\xfb\x77\xee\x11\xd8"
+ "\xbf\x93\x7a\x0e\xd8\x9f\xc5\xee\x13\xa5\xdd\x3b\x3f\xee\x21\xf6"
+ "\x64\xf7\xdb\x7a\x86\xfd\xb2\x6e\x62\xcf\xbf\xc5\x79\x91\x62\xef"
+ "\x2c\xf2\xc7\x7e\xfb\xdd\x02\xfb\xed\x93\x42\xc1\x7e\x89\x1e\xfb"
+ "\xfd\xbd\x53\x70\x6e\xc5\xc7\xf9\x2f\xdf\x2b\xb1\xff\x03\x62\x8f"
+ "\xf5\x2f\x9f\xbc\x3e\x60\x8c\xff\xfe\x4e\x8e\x7b\x1a\xe2\x9e\x89"
+ "\xb8\xe3\xdc\x50\xc3\x1c\x31\x8a\x24\xdc\x09\xf3\xac\x03\x60\xd9"
+ "\x8e\x79\x09\x1f\xc2\x18\x71\xb4\x73\x9c\xc3\xc1\xcd\x0c\xaa\x8d"
+ "\xf0\xa4\x71\x3f\x61\x7e\xb6\xb1\x3d\xe9\xc4\x59\x31\xff\xe5\xf7"
+ "\x33\xbe\x6f\x0b\x8c\xff\x9d\x2f\xcc\x3f\xc6\x39\x5c\x56\x77\x31"
+ "\x7f\x3f\xdf\x1f\xf3\xf7\xc6\x13\x0e\x2e\xe3\x7b\xe3\x7a\x8e\x79"
+ "\x42\x69\xd7\x98\x6b\x7d\x7c\xd5\x9b\xe7\x86\xb9\xa2\xfa\x30\x4f"
+ "\x28\x3d\x33\xe6\x07\x7a\x80\xf9\xf9\xed\xdf\x2f\x2c\xcc\xab\x56"
+ "\xfa\x63\xbe\xe3\xa7\x02\xf3\x1d\xc9\x5d\x61\xee\x45\x7f\x4d\x31"
+ "\x75\xfa\x6d\xa0\xa7\x25\x75\x6c\x3b\xe2\x4a\xbf\x11\xa4\x58\xef"
+ "\xab\x73\x2a\x95\x76\xc4\x3d\x6f\x21\xc4\xae\x5e\x08\xa3\xcd\x0d"
+ "\xc2\x7f\xb7\xa1\xff\x7e\xfa\x3b\x50\xbd\x8f\xda\xc2\x57\x1f\x01"
+ "\xb5\x0d\xdb\xb8\xed\xd1\x74\x73\x4d\x5a\x13\x6c\x3f\x5e\xa9\x50"
+ "\xec\x96\x9e\xdb\xb1\xa3\xa9\x51\xbf\x98\xc6\x5a\x6b\x0e\x15\x88"
+ "\xb8\xca\x97\x5a\x5c\xe5\x55\xbf\xb8\xca\x6f\x8e\xc8\xb8\xca\x3d"
+ "\x02\xa3\x22\x3d\x3e\xf7\xff\xae\x8b\xb8\x4a\xf5\x59\xe3\x2a\x3c"
+ "\x9e\x72\x1c\xac\xed\x73\xd3\xfb\x3d\x2f\xe3\x2a\x2f\xcc\x39\xb7"
+ "\xb8\x4a\xdb\x5c\x87\xf2\x02\xe2\xb3\xe4\x1e\xc4\xe7\xb3\xee\xe2"
+ "\xf3\x41\x97\xdf\x3f\x09\xec\x6b\xb5\x3e\x56\xeb\x57\xc9\xe6\xa8"
+ "\x6f\x6d\x2d\x8c\x8f\x0d\x8c\xa5\x90\xbd\x1d\x37\x56\x27\x90\x4f"
+ "\xee\x59\x3c\xc5\x18\xf1\x43\x8b\xa7\x90\xcd\x69\xfd\xec\x85\xd1"
+ "\xc7\x56\x83\xbf\xed\x7d\xf0\xa6\xe8\x63\x3f\xa8\x0c\x75\x7c\x75"
+ "\x06\xcc\xcb\x02\x63\x28\x02\xf3\x5d\xd7\x52\xcc\xa5\x67\x71\x14"
+ "\x63\xda\x0f\x2d\x8e\x72\xe1\x61\xfe\x61\xb3\x3f\xe6\xd5\xaf\x0a"
+ "\xcc\xab\xcb\xcf\x1d\xf3\x84\xd8\xc0\xd8\x89\xc0\xbc\xe6\x0a\x8a"
+ "\xb5\xf4\x2c\x7e\x62\xec\xe1\x58\xfa\x5f\x17\x3f\xb9\xf0\x30\xff"
+ "\xa8\xc1\x1f\xf3\x5d\xbf\x15\x98\xef\x2a\x3d\x0f\x98\x97\x05\xc6"
+ "\x4c\x04\xe6\xb5\xd1\x34\xf6\xea\x59\xdc\x44\x35\xfd\xd0\xe2\x26"
+ "\x17\x1e\xe6\xbb\xf7\xfb\x63\x5e\xb3\x56\x60\x5e\x53\x78\xee\x98"
+ "\x27\xc6\x06\xc6\x4a\x04\xe6\xf5\x61\x14\x5b\xe9\x59\xbc\x44\xfd"
+ "\xc1\xc5\x4b\x2e\x3c\xcc\xeb\xea\xfd\x31\xaf\x7d\x5a\x60\x5e\xbb"
+ "\xea\x3c\x60\x5e\x16\x18\x23\x11\x98\x7f\x7c\x9a\x62\x2a\x3d\x8b"
+ "\x93\xa8\x15\x3f\xb4\x38\xc9\x85\x87\xf9\xc7\x55\xfe\x98\xd7\x2f"
+ "\x13\x98\xd7\x2f\x0d\x75\xce\xac\xcd\x95\xb5\xf9\x31\x9f\x2b\x5b"
+ "\x71\xcc\x1e\x10\x1b\x11\x78\xff\xf5\x4b\x3e\x66\xef\xf1\x5c\xd9"
+ "\x18\xf1\x43\x89\x8f\x68\x58\xd3\x7c\xf9\xc2\x98\x2b\xff\x35\xe0"
+ "\xf9\xe7\x27\xb3\xc5\x5c\xf9\x93\x59\x5d\x61\x1d\xec\x5d\x84\x5a"
+ "\x9c\x6b\x6a\xef\x22\x3c\xbd\x10\x71\x44\x3d\xa0\x77\x11\xe8\x9d"
+ "\x84\x60\xef\x23\xd0\x7b\x08\xda\x3b\x09\xfa\xf7\x11\x52\x5c\xac"
+ "\x95\xde\x49\xa0\x79\x72\x4d\xda\x33\xa0\xbd\x9b\x40\xef\x20\x64"
+ "\x7f\x01\x91\x84\x11\xbd\x7f\x40\xf3\xe5\xef\xfb\x1d\x84\xf5\xde"
+ "\x0b\xe1\x1d\x84\xbd\x5d\x7e\xff\x56\xb3\xb9\xf1\x2f\x0f\x06\xd4"
+ "\xb7\x8e\x38\x55\xfb\xba\x78\x3b\xd9\x1c\x61\x64\x6e\x14\x76\xf8"
+ "\xea\xe4\x0a\xa5\x2e\xb3\x12\x9e\x5e\x0c\x16\x2d\x7e\x41\x36\x88"
+ "\x7e\xd9\xec\x46\x3c\x57\x3f\x22\xe2\x18\xde\xa3\xa9\x91\x4d\x8f"
+ "\xa6\x9b\xe9\xf7\xf8\xdb\xff\xbb\x42\xa1\xd8\x63\xc9\x0c\x88\x7f"
+ "\xf1\x30\x24\xd5\x36\x1f\x00\x6e\x53\x6b\xe3\x53\x31\x6f\x72\xfb"
+ "\xda\xb1\x36\xef\x80\xf8\x31\x4d\x03\xe2\x53\x08\xb7\xd5\x47\x00"
+ "\xc8\xbe\x08\xb7\xba\xcc\x0d\x1d\x78\x71\xac\x14\x19\xdb\xe8\xd2"
+ "\xa6\x3e\xe9\x31\x66\x45\xc7\x11\xb3\xb9\xfe\x98\x6d\xe8\x69\x7c"
+ "\x43\x7b\x9f\x7b\xae\x43\xd9\x80\x36\xb5\xf8\x97\x88\xd9\x5d\xdd"
+ "\xc5\xec\x6f\x5d\xae\x7f\x7c\x06\xcc\x4a\x43\xc4\xec\xd0\xd9\x31"
+ "\x33\x4c\x0a\x82\xd9\x3e\xcc\xeb\x94\x98\x55\x21\x66\xd5\x3e\xcc"
+ "\xbe\x0d\x11\xb3\xc0\x39\xec\xc5\x84\xd9\xbe\x2e\xd7\x3f\xeb\x1a"
+ "\xb3\x84\x10\xed\x2c\x21\x04\x3b\x33\x94\x77\xc6\x2c\x01\xed\x2c"
+ "\x41\xda\x59\x02\xda\x59\x82\xce\xce\x8e\x85\x88\x59\xe0\x1c\xf4"
+ "\x62\xc2\xec\xb3\x2e\xd7\x3f\x3e\x03\x66\x21\xda\x59\x42\x08\x76"
+ "\xa6\xa8\x41\x30\x43\x3b\x4b\x90\x76\x96\x80\x76\x96\xa0\xb3\xb3"
+ "\x03\x21\x62\x16\x38\x87\xbc\x98\x30\xdb\xdf\xf5\xef\xbf\xbb\xc4"
+ "\x2c\x31\x44\x3b\x4b\x0c\xc1\xce\x94\x29\x9d\x31\x4b\x44\x3b\x4b"
+ "\x94\x76\x96\x88\x76\x96\xa8\xb3\xb3\x77\x42\xc4\x2c\x70\x0e\x78"
+ "\x31\x61\x76\x60\x4f\x0f\x30\x0b\xd1\xce\x12\x43\xb1\xb3\x6d\x41"
+ "\x30\x43\x3b\x4b\x94\x76\x96\x88\x76\x96\xa8\xb3\xb3\x65\x21\x62"
+ "\x16\x38\x87\xbb\x98\x30\xfb\x7c\x55\x77\x31\xe3\x78\xe1\xd8\x31"
+ "\x28\x66\x6d\xfe\xe3\x46\x37\x8e\xe3\xe9\x99\x57\x50\xbc\x9e\x01"
+ "\x37\x5b\xae\xda\x08\x2b\x1a\x0f\x12\x5e\x75\x99\x3b\x21\xd8\xb8"
+ "\x91\x9e\x8b\x21\xee\x40\xcf\xc6\xb2\xbf\xec\xc6\x78\xf1\xc1\xae"
+ "\xb0\x3a\xfb\xf3\xb0\xa2\x39\x3e\xac\xb4\xe7\x61\xe7\x15\xab\x4f"
+ "\xba\x8b\xd5\x17\xf1\x3d\xc3\x2a\xa1\xf4\xec\x58\x25\x1c\x3a\x33"
+ "\x56\x8a\xea\xc3\xea\x80\x0e\xab\xce\xfd\x58\xe8\x58\x05\xf4\x5f"
+ "\x17\x15\x56\x07\x5d\x5d\x61\xe5\xb6\x8e\xb5\xd1\x6f\xde\xef\xc4"
+ "\xb9\x2f\x7b\x28\x75\x6c\xee\x41\x88\x7d\xe6\x20\x8c\xa6\xdf\x37"
+ "\xbf\xba\xb8\x55\xc1\x3a\x7e\xb5\x6b\x4f\x03\xb4\x1f\xb5\x85\xd3"
+ "\xef\x67\xb8\x9f\x7c\xd4\x66\xaa\x4b\x6b\xe2\x3e\x71\x0d\x62\x54"
+ "\xdb\x5c\x89\x6d\xd2\x3b\xa5\xb6\x79\x2b\xb4\xcd\x4f\x85\x8f\xf6"
+ "\x1f\x41\x5c\x58\x7b\x5d\x63\x25\x94\xe0\x7d\xe7\xc2\xad\xe0\x3d"
+ "\xea\x08\x7f\x20\x13\x94\xe3\xc6\x7f\x94\xd1\xdc\x79\x64\x26\x58"
+ "\xc6\x35\xb2\xd6\xda\xc6\x5d\xf0\xe2\x83\x10\xbb\x33\x13\x80\xda"
+ "\x9a\xcf\x95\x1f\xa1\xb9\xf2\x3b\x7e\xf8\xbc\xa0\x9b\x2b\xf3\xdf"
+ "\xcb\x66\x20\x36\xdf\x04\x60\x83\x73\x71\x6c\xeb\xde\x77\x36\x23"
+ "\x36\xcd\x1a\x36\xc7\x20\xeb\x31\xc2\xc6\xe5\x9b\x2b\x4b\x6c\x8a"
+ "\xc8\xe7\x65\xe8\xe6\xca\xc7\x75\xd8\xc8\xdf\xaa\xfa\x61\xa3\xc5"
+ "\x32\x16\x39\xe8\x19\x79\xa7\xb9\x72\xcf\x62\x19\x87\xba\xfc\xad"
+ "\x08\xb7\x23\xb4\x91\x3b\xd1\x8e\x96\x2e\xe0\x76\x24\xda\x3f\x26"
+ "\x1e\xf5\xbd\x02\xcc\xae\xde\x29\xcf\x20\x06\x6d\x68\x6b\xd4\x17"
+ "\x65\x63\x3d\x09\x4b\xc2\xed\xce\x4d\xed\xed\xf7\x37\x83\x82\x3e"
+ "\x6b\x1a\x61\xe7\x39\x6a\x33\xe5\x62\x5f\x55\x37\xe5\x33\xc4\xe7"
+ "\x24\xd4\x35\x49\x6c\x16\x7f\x06\xc7\x8d\x5f\x26\xb1\x47\x1d\xe1"
+ "\x23\x50\x4f\xb1\xef\xb1\x3c\x40\xbf\x7d\x41\x9f\xf7\xe2\x0c\x48"
+ "\x1a\x97\xc1\x5a\xf9\xbb\x3c\x68\x63\xd4\x9f\x91\x3f\xac\xcd\x78"
+ "\x1f\x3c\x6b\xe3\xc7\xb4\x0f\x18\x6b\xdb\xb9\x00\x80\x7c\x22\x61"
+ "\x11\xf6\xb8\x0f\x3b\xfa\xdd\x9e\x3e\xd6\xd1\xc9\x17\x3e\xb2\x2b"
+ "\xb8\x7d\x4d\x71\x75\x2b\xde\x51\x24\xed\xab\xa8\xa7\xf1\x0e\x2d"
+ "\x1e\x85\x18\xd2\x6f\xf5\xb2\xf7\x82\xf2\x42\xb7\x31\x3c\x9c\xdc"
+ "\x03\x0c\x4b\xcf\x8e\x61\x8b\x86\xe1\xa1\xb3\x63\x78\xd8\x1d\x04"
+ "\x43\xa7\x0f\x43\xc3\x24\x1d\x86\xfb\x24\x86\x55\x3a\x0c\xab\xcf"
+ "\x8e\x61\xc0\x5c\xfa\xa2\xc2\xb0\xe1\xcc\xf1\x8f\xa0\x18\x26\x84"
+ "\x60\x87\x27\x24\x86\x09\x21\xd8\x61\x83\xb3\x33\x86\x09\x3a\x3b"
+ "\x34\x94\xfb\x30\x4c\x90\x76\x98\xa0\xb3\xc3\x84\x10\xec\x30\x60"
+ "\x6e\x7d\x51\x61\xf8\x75\x75\x0f\x30\x0c\xc1\x0e\x3f\xd7\x30\x0c"
+ "\xc1\x0e\x8f\xac\x0c\x82\xa1\xce\x0e\x71\xec\xe2\xc3\x50\xda\x61"
+ "\x82\xce\x0e\x13\x42\xb0\xc3\x80\xb1\xca\x45\x85\xe1\xd1\xd5\xdd"
+ "\xc7\x30\x31\x04\x3b\xdc\x2e\x31\x4c\x0c\xc1\x0e\x1b\x53\x3a\x63"
+ "\x98\xa8\xb3\x43\x65\x8a\x0f\xc3\x44\x69\x87\x89\x3a\x3b\x4c\x0c"
+ "\xc1\x0e\x03\xe6\xde\x17\x15\x86\xc7\xce\x1c\xff\x0f\x8e\x61\x08"
+ "\x76\x98\xad\x61\x18\x82\x1d\x1e\x8f\x08\x82\xa1\xde\x0e\xb7\xe9"
+ "\x30\x94\x76\x98\xa8\xb3\xc3\xc4\x10\xec\x30\x60\x2e\x7e\x51\x61"
+ "\x78\xa2\xcb\xef\x71\xea\x31\xc4\x71\x76\xe7\x71\x69\xb3\x0f\x43"
+ "\x3d\x7e\x81\x63\xd1\x09\x38\x46\x25\xec\xa6\xb8\x41\xe9\x8c\xdf"
+ "\x89\x1a\xc2\x6f\x38\x3d\x8f\xfb\xd6\x37\x26\xe5\xd8\xc9\xe7\x39"
+ "\x84\xd9\xce\x69\x00\x34\x3e\xd5\xc6\xa3\xf4\x4c\xb5\x63\x3c\x3a"
+ "\xfd\x7f\xeb\x78\xb4\xa9\xbe\xfb\xd8\xc9\x7e\xb0\x4b\xec\xfc\xfb"
+ "\xbe\x09\xd8\x27\x76\x8d\xdd\x37\xab\x3a\x63\x97\xe0\xf4\x61\x27"
+ "\xfa\x3d\x81\x9d\xa2\x6a\xfd\x9f\xc0\x4e\xf6\x7f\x67\xc4\xee\x62"
+ "\xee\xff\x4e\x76\xd9\xff\xe5\x2b\xde\x0a\xdc\x2b\x71\x77\xe2\x5e"
+ "\xed\x51\xe0\xf6\x0d\x8a\x57\xbc\xeb\x22\xf4\x39\xf0\x7e\x2f\xf6"
+ "\xd4\x78\x0b\xd1\xb0\xe5\x2a\xb7\x67\x8d\x87\x27\x1c\x00\xd3\x9d"
+ "\x66\x43\x1a\xad\x09\x42\xb4\xbd\x35\x5e\xe6\xe5\x90\x8c\x75\x16"
+ "\x74\x0a\xe4\x08\xba\xe4\x5e\x44\xc7\x72\xb7\xae\xc7\x34\x93\xe4"
+ "\x39\x88\xe8\x3d\x8a\x42\xbc\x02\xcb\xee\x23\x69\xec\x9e\x15\x60"
+ "\xd7\x97\x8d\xbc\xa8\x4c\x8d\x2e\x9c\xe8\x3c\xbd\x86\xd8\x3c\x06"
+ "\x35\x56\x4f\xc7\x6e\x03\x3d\x5d\x5f\xc9\xcf\xe1\x57\x8f\x21\x00"
+ "\x66\x83\x5d\xd4\x25\x53\xd1\xea\x12\xc1\x79\x46\x55\x34\x21\xcf"
+ "\xe1\x7e\x3c\x7b\x01\x44\x22\x3d\xf1\x8d\x4c\xe7\x72\x13\x7d\x24"
+ "\x0b\xef\x05\x9c\xbf\x41\x8d\xf3\x2a\x10\x27\xea\x05\xea\x86\x0e"
+ "\x99\xed\x90\xef\x5f\x46\x94\xd6\x5e\x7a\x3a\xa2\x61\x4a\x07\x8d"
+ "\x99\xcb\x11\x1e\xa6\xa2\x1c\x49\x7a\x39\x04\x1d\x8c\x92\x74\x16"
+ "\xac\xd7\xe8\x0e\x2c\xf3\xdd\x36\x8d\x2e\xdb\x03\x3f\x42\x2c\x9c"
+ "\x75\xe9\x00\xb2\x1d\xa2\x59\xee\xeb\xc3\x65\x5b\x24\xeb\x79\x46"
+ "\x1a\x0c\xae\x0d\xb2\xbd\xbc\xb9\x5b\x5d\x48\xdb\xcf\xbb\x5c\x1d"
+ "\xd3\xc1\x77\x05\x7d\x53\x4a\xb6\xc3\x0a\x77\x7f\xce\xb7\x01\x6d"
+ "\x4b\x31\xd8\x65\x3b\xf4\x27\x5a\xcc\x93\x22\xea\x65\xe9\xc0\xd5"
+ "\xa3\xa8\x74\xcf\xa9\xa3\xb5\x8a\x36\x76\xba\xb1\x6e\xe3\x3a\xd3"
+ "\x9b\x02\xe9\x07\x08\xfa\x37\xac\x48\x3f\xb1\x33\xbd\x25\x90\x3e"
+ "\x46\xd0\xff\xd9\x82\xf4\x93\x3a\xd3\xbb\xfb\x05\xd0\x0f\x14\xf4"
+ "\x6f\x46\x20\x7d\x6a\x67\x7a\x7b\x20\xbd\x4d\xd0\xbf\x4f\x3a\x32"
+ "\xa5\x33\x7d\x72\x20\xfd\x8f\x04\xfd\x5b\x26\xa4\x4f\xeb\x4c\x9f"
+ "\x13\x48\x7f\x99\xa0\x7f\x87\xb0\x9f\x16\x48\x5f\xc2\x69\x61\x88"
+ "\xa4\xbd\x5c\xd0\x6e\x07\xa4\x4d\x0f\x52\x57\xa3\xe4\x1d\x27\xe9"
+ "\x07\x09\xfa\xd7\x57\x22\xfd\xac\x20\x58\x05\xd2\x5f\x21\xe8\x3f"
+ "\x89\x45\xfa\x8c\x20\x58\x05\xd2\x0f\x16\xf4\x1f\xcc\x42\xfa\x05"
+ "\x41\xb0\x0a\xa4\xbf\x52\xd0\x57\xa7\x21\x7d\x66\x90\xb6\xf7\xa7"
+ "\x8f\xda\x35\x09\xe9\x96\x6e\x58\xa1\xd9\x8f\x5f\xbb\x07\xf2\xbe"
+ "\x4a\xf0\xae\x49\xc1\x3c\x39\x41\xda\x3d\x90\x7e\x88\xa0\xaf\x1d"
+ "\x8d\xf4\x2b\x3b\xd3\x83\x41\xd0\xc3\xf5\x92\x7e\xa8\xa0\xaf\x8f"
+ "\x43\xfa\x55\x41\xda\x9e\xee\x3b\xa5\x9d\xc6\x0a\xda\xaa\x43\x48"
+ "\xbb\x3a\x48\xbb\xeb\x69\x87\x09\xda\xcf\xeb\x91\x36\x3f\x48\x9b"
+ "\xeb\x69\xaf\x16\xb4\x7b\xd7\x23\x6d\x61\x90\xf6\xd6\xd3\x5e\x23"
+ "\x68\xff\x36\x0e\x69\xd7\x07\x91\x77\x88\x8e\xd6\x21\x68\x3f\x25"
+ "\xbd\x2a\x0a\x82\x8b\x9e\xf6\x5a\x41\xfb\xc5\x52\xa4\x2d\x0d\x82"
+ "\x8b\x9e\xf6\xc7\x82\xf6\xb3\x6d\x48\x5b\x16\x04\x13\x3d\xed\x4f"
+ "\x58\xd4\xfe\x74\xe9\x5b\x37\x05\xd2\xa2\x0e\x38\xd1\x0f\xd1\x9a"
+ "\x31\xc3\x59\xee\xdf\x07\x95\x08\xbf\xc6\xbf\x71\xa0\xd1\x30\xc5"
+ "\x7d\x83\xae\x1f\xb8\x8e\xe5\xee\xd1\xfa\xb4\x8a\x40\x7e\x4c\x51"
+ "\xf5\xb4\x23\x58\xee\x89\x29\x92\x76\x5b\x67\x5a\x93\x9e\x76\x24"
+ "\xcb\x3d\x54\x25\x69\x2b\x3b\xd3\x5a\x3a\x68\x59\xee\xe1\x55\x48"
+ "\xf3\x76\xb1\xf4\xab\x3a\x39\xaf\xd7\xf1\x1b\xc5\x72\x1b\xc6\x49"
+ "\x7e\xce\xce\xfc\xec\x7a\xda\xeb\x59\xee\x37\x36\x49\x5b\xd5\x99"
+ "\x36\x59\x4f\x7b\x03\xcb\x3d\xa2\xd5\xbf\xba\x33\x6d\x8e\x9e\x36"
+ "\x9e\xe5\x1e\xdd\x23\x69\x6b\x02\x69\x8b\x45\x1f\xa4\x48\x9c\x12"
+ "\x58\xee\xb1\xf5\x92\xb6\xde\xaf\x8f\x55\x0c\xdc\xc6\x8a\x05\x5d"
+ "\x22\x8b\xfa\x87\x43\xe2\xb9\xc7\xaf\x6f\x5d\x61\xe8\x47\x7d\xca"
+ "\x06\xc2\xf3\xa9\xbb\x4b\x91\xf6\x46\xc9\x6f\x5f\x60\xdf\x27\xe5"
+ "\x4b\xc2\x7b\xfb\xb5\xfe\x09\xfb\x1d\x57\xb0\x71\x4f\xc6\x8f\xa1"
+ "\xef\x11\xa3\xdb\x2a\xbe\x49\xa5\xad\xe9\xe5\xe1\xba\xef\x2d\x1b"
+ "\x6a\x99\xd0\xcc\xdc\xfa\xb4\x3c\x85\xd5\x8f\x6c\x06\x95\xbe\xd7"
+ "\xc7\x06\x8c\x4f\x71\x61\x7a\xd3\xb0\xa1\xae\x96\x5c\xb7\xdd\x65"
+ "\x60\x7c\xcd\x01\x3c\x1f\xee\x82\x8d\x63\xe8\x3c\x6f\x05\xad\x39"
+ "\x92\x6c\xf0\x14\xb4\xbb\x68\x8d\x92\x12\xbc\xce\xc5\x9d\xaf\x07"
+ "\x92\x81\x63\xe0\xa7\x20\xd9\xb9\xd0\x0d\x87\x33\x41\x11\x6b\xd5"
+ "\xb9\x9f\x60\x73\xd3\x47\xa3\x2c\x39\x58\xee\xb4\x83\x78\xcd\x65"
+ "\xa1\xf5\x80\xf2\xdb\xdd\xce\x79\xf4\x4d\x3b\xf7\xee\xa6\x01\x93"
+ "\x73\xd8\x93\xbf\xfa\x3a\x23\x0b\xae\x44\xf9\x6b\xb4\xef\x57\xf1"
+ "\x6f\x56\x9d\x48\xbf\x45\x7c\xaf\xca\x33\xd3\x1b\xdd\xee\x0e\xfc"
+ "\x5e\x95\x28\xc7\x33\xe9\x14\xfa\x2b\x56\x3a\xd5\x25\xbe\x87\xe5"
+ "\x79\x9e\xd7\x6f\x05\xab\x67\xb1\x43\x5a\xbd\x6d\x2b\x73\x68\x6d"
+ "\x39\x67\xd6\x11\x38\x28\xef\x11\x7f\xc9\x77\x18\xf1\x23\xbe\x1a"
+ "\x4f\xca\xd7\x74\xd5\x54\x17\xb5\x07\x7b\x09\xf3\x87\xfc\xfd\x2b"
+ "\x8f\x55\x7c\xff\xca\x93\xe6\x32\x8c\x5b\x29\xbe\x7f\x25\xeb\x13"
+ "\x32\x0f\xb7\x93\x78\x04\xff\xd6\x2f\x98\xd9\xb3\x6e\x1b\xf2\x77"
+ "\xe2\xf8\xb7\x46\xe0\xe3\xa9\x71\x19\x6e\x95\x58\x79\xf6\xb9\x0c"
+ "\x3f\xb3\xcb\xf3\x43\x2e\xc3\xa9\x31\xf2\xbc\x49\xfb\x06\x59\x50"
+ "\xbe\x96\xf6\x46\x1c\x4b\xa9\xde\x17\x53\x4d\x34\x5e\x17\xdf\x42"
+ "\x6d\x6f\xb4\x0f\xa6\x6f\x44\x7b\x17\x60\x99\xaa\x68\x2b\xef\x78"
+ "\x3c\x9a\xe5\xb1\x49\x1e\x19\xd1\x70\x9d\xb3\xde\x99\xc9\xf2\x13"
+ "\x2b\xc5\xfa\x30\xde\xe9\x94\xc6\xb1\x45\xfc\x59\x74\x62\x25\xe7"
+ "\xbb\x76\x72\x8e\x5e\x86\xb8\x51\xd7\xdf\x10\x9f\x90\x78\x63\xd2"
+ "\x4d\x53\x1f\x7c\x68\xda\xf4\x19\x0f\xa7\xcf\x7c\xe4\xd1\x59\xb3"
+ "\xe7\xcc\xcd\x78\x6c\xde\xfc\x05\x8f\x2f\x5c\x94\xf9\xc4\x62\xfa"
+ "\xd1\x59\x87\xac\x2f\x8e\x31\x34\x2b\x80\x58\xde\x46\x65\xf0\xef"
+ "\xfc\x52\x9a\xc0\xdd\x5b\xa5\xda\x83\xcf\x09\xea\x6c\x00\xb4\xee"
+ "\x47\xa3\x91\x5d\x45\xeb\x90\xa0\x0e\x1a\xea\x8a\xc6\x3a\x69\x0d"
+ "\xb6\x43\x46\x66\xad\x6d\x1a\xeb\xa4\xf5\xfd\x76\xd8\x1a\x20\x76"
+ "\x08\xad\xd3\xc6\x80\xee\x97\x5c\x0d\x50\x85\x79\x83\xf1\x1c\x62"
+ "\x01\xdb\x73\x31\xac\xa9\x30\x86\x35\x12\xff\xc2\x75\xac\xa1\x69"
+ "\x49\x3a\xe4\xe2\x35\xea\xa5\xe5\xb0\x91\xed\xdd\x81\x23\x7f\xef"
+ "\x0a\x18\x54\xbc\x8e\x1d\x5a\x19\xc3\x0e\x3d\xb9\x8e\x35\x96\xc4"
+ "\x30\x57\x6c\x21\x44\xb4\xe4\xb2\x55\x2e\xa3\x97\xaf\x3d\x94\x87"
+ "\xf7\xbd\x51\xde\x9c\x3c\xbc\x37\xd2\x0d\xc6\x12\xbc\xc6\xb4\xe6"
+ "\x1d\x76\x21\xf7\x6b\x27\x5b\xc3\x90\xdf\x2c\xd6\x3e\xcb\x90\x8b"
+ "\xe5\x08\x3c\xd8\xe9\x2a\x1c\x45\x60\x79\x4d\x75\xad\x07\xc1\x65"
+ "\x64\xad\xb4\x46\x12\x96\x67\xae\x5b\xdf\x08\xc4\x6f\xf3\xbc\xd6"
+ "\xb0\xf9\x97\x31\x37\xd2\xee\xf3\x2e\x99\x65\x40\x9a\x6d\xc8\xbb"
+ "\x59\x5f\x1f\xc7\x8c\xd9\x0b\xec\x73\x1e\x9f\x35\xeb\xda\x70\x70"
+ "\xf0\xa3\xdf\xfa\x80\x0b\x90\x1f\x3c\xb7\x8e\x55\x61\x3d\x9d\x58"
+ "\xdf\xea\xdd\x38\xfb\x40\xdd\x00\xac\x53\xfe\x61\x15\xc6\x63\xfa"
+ "\xdb\x78\xfe\x36\xca\x5e\xcd\xd7\x23\x53\xa3\x9f\x60\x05\xa0\xa2"
+ "\x9c\xd4\x5f\xd1\xf7\x04\xe1\xd4\xa2\x49\x06\xac\x77\x21\xd2\x55"
+ "\xdb\x2f\x83\x61\x98\x6f\x2f\xca\x51\x86\xe7\x44\xbf\x9c\x70\x44"
+ "\xfa\x2a\x5e\x2f\x35\x7a\x26\x5d\x63\x5b\x39\x37\xc4\xb0\xd5\x2d"
+ "\x05\x50\x41\xdf\x6f\xe5\x6b\xc9\xe0\x35\xb6\x4b\x35\xd2\xe6\x9f"
+ "\xca\x9e\x64\xa0\x75\x31\x4b\x7c\x3c\x73\x48\x26\x92\x83\xe6\xc2"
+ "\x1f\xe1\x68\xd2\xdb\x9e\x0a\xd7\xb5\x82\xe1\xa3\x43\x00\x45\xeb"
+ "\x58\x29\xee\x45\xb8\xaf\xdf\x85\xf7\x3e\xc4\xbd\x1a\xd3\x6b\xf0"
+ "\xb8\x0b\x8f\x1f\x1e\xe2\xcf\x56\x6d\x24\xf7\xfc\xa5\xac\x61\xe4"
+ "\x7a\x18\xca\xd7\xdd\xcc\x82\xff\x3c\xa8\x5a\xea\x49\x76\xfa\x56"
+ "\x33\xeb\x67\x18\xe3\xf7\x4d\x59\x55\xa9\x04\xbc\x8f\xc7\x1a\x71"
+ "\xd4\xef\x46\x2b\xee\xf1\xf2\x7c\x29\xd2\x94\xc9\xf3\x7c\xdc\x8b"
+ "\xce\xbe\x07\xf2\xeb\x6a\x57\x4d\xa1\xd3\x86\xb2\x47\x8f\x09\x8d"
+ "\x2e\xcc\x09\xaa\xc9\x86\xfb\x44\xff\x74\x93\x43\xa4\x45\x34\x8b"
+ "\xeb\x48\x90\xc7\xe1\xb8\x63\x3b\x45\x21\xff\xa8\x74\x91\x16\xb5"
+ "\x00\x8f\x6f\xe3\x5e\xed\x5f\x7e\x34\xe6\x8f\x9e\x42\x78\xb6\x63"
+ "\x5f\x40\x58\xba\x54\x83\x95\x30\xca\x13\xba\x65\xa0\xf7\x27\x30"
+ "\xcd\x82\xba\x55\xe4\xd3\x1f\x63\x98\xbf\xfe\x28\x4d\x01\xfa\x93"
+ "\x4f\xbe\xc8\xa5\xc2\x94\x12\xa1\x2f\x6f\x9f\x5a\x32\x0d\xaf\x95"
+ "\x66\xe4\xf3\xb6\xfd\x7e\xce\x83\xcf\x2f\xf2\x8e\xe0\x3c\x18\xa5"
+ "\x24\xff\xd2\xa8\x1a\x6f\x27\x9d\xa5\xb2\x65\xb9\x42\x16\x94\x0f"
+ "\xd3\x4a\x49\xbe\xb9\xc8\x17\xaf\xcb\x90\xae\xb4\x0e\x4e\x6a\xb2"
+ "\xf1\x3c\xcf\x3c\x82\xfa\x28\xe5\x25\x9e\x94\x8f\xf9\xea\x65\xa1"
+ "\x3c\xb2\xec\xd3\x98\x4e\xf3\x6b\xc8\xfe\x06\x8c\x75\x6e\x17\x90"
+ "\x4e\xd2\xb1\xce\x1d\x87\xb6\x94\x02\x5e\xea\x07\x6d\x40\xdf\xfb"
+ "\xef\x73\x50\x35\xee\x1f\xb1\x14\xe2\x88\x1f\xf9\x6f\x97\x6a\x2c"
+ "\x2d\x21\x5b\x14\xbc\xc4\xfa\x7f\xc8\x7f\x17\xce\x68\xe8\x58\x4c"
+ "\xf2\xe0\x7d\x5d\xb9\x85\x34\x6f\xce\x5b\x2c\xea\x8a\x65\x95\x61"
+ "\xfe\x0a\xaa\x3b\xb5\x27\xde\xaf\x3c\xac\xaa\x49\x74\x8f\xd6\x6b"
+ "\x91\xf5\x29\xa3\xdf\x7a\x50\x7b\x10\x3d\xad\x69\xc9\xbf\x51\xab"
+ "\xc2\x7d\xbc\xdd\x30\x3f\xe1\xc1\xb0\x0c\xe2\x91\xed\x66\x6e\x86"
+ "\xfe\xe8\xf7\x8b\x5b\xd5\xc3\x6a\xd8\x16\x7f\x7c\xd4\x7c\x3d\x3e"
+ "\x98\xaf\x02\xf3\x57\x51\x9f\x4c\xfe\x04\xcb\x34\xd3\x78\x03\xd3"
+ "\xf2\xbd\xb9\xc8\x63\x61\x2b\x8f\x2b\x21\x9f\xdf\xa2\x2c\xf9\xc4"
+ "\x07\xe5\xa9\x92\xbc\xf6\xd3\xf7\x2b\xf5\x58\x4b\x7e\x65\x84\x39"
+ "\xb7\xe7\xc5\xbc\x4e\xe8\xbb\xc2\x1e\x2b\x16\xf7\x2a\x91\xa6\x92"
+ "\xb5\xa7\x00\x5b\x92\x2a\xd6\x5e\x13\xf7\xb6\x65\x9f\xe6\xf8\x56"
+ "\x09\xbf\x16\xf6\xec\xfc\x65\xac\xc1\x27\x77\x58\x8a\xf6\x9d\x76"
+ "\x29\xf7\x36\x2a\x8f\x2d\x9a\xc2\xfb\x50\x2a\x83\xf2\x4b\x7e\xb1"
+ "\xc4\x4f\x6b\xab\x11\x28\x87\x68\x2f\x35\x15\xd3\xcb\x48\x17\x79"
+ "\xbb\xa1\x1f\x3d\x95\x4d\xba\x18\x36\x0e\xf3\xbf\x9d\x4b\xd7\x8b"
+ "\xe8\x5a\x75\x71\x1f\xdb\x71\x5f\x2d\xa4\xfb\x14\x97\xc8\x7b\x14"
+ "\x75\xc9\x0b\x30\xd4\x0a\x71\xcd\x2b\x78\xdd\xca\x9b\x97\x8c\x31"
+ "\xec\x70\x03\x90\x9c\xd8\x46\x95\x28\x6b\x33\xfa\xfe\x78\x92\x15"
+ "\xfd\xf5\x36\xf6\xfb\x54\x20\x99\xd1\x9f\x49\xf9\x7a\x4d\x97\xd8"
+ "\x6f\xa3\x3a\x52\x7b\x8e\x10\xbe\x0f\xef\x99\xfa\x90\xec\xbe\x7a"
+ "\xf7\x4a\xd6\xb7\x31\xaf\x37\xe2\x40\x78\x11\x2e\x3a\x9e\xa4\x2b"
+ "\xf9\xc8\xab\x5c\x5c\x0b\xdd\xa0\xb6\xce\x8f\x61\x35\x44\xef\xa3"
+ "\xed\xcd\xc7\x86\x59\x58\xf6\xc8\x0c\xbe\xde\x9b\x81\xbe\xb5\x8f"
+ "\x7c\xcb\x69\xbd\x52\xe4\xc1\xc7\x0f\x48\xb7\x9b\xf4\x11\xaf\x6b"
+ "\x64\x19\x35\xd8\x9f\x0f\xc7\x7d\xb4\xcf\xfe\x7b\xbf\xe3\xaf\x5f"
+ "\xbd\x02\xed\x9f\xf0\xce\xf7\x66\xa7\x80\x5c\x57\xd9\x7e\x5c\xed"
+ "\x7d\x8f\xec\x3b\x24\xd6\xbd\x5f\xdd\x81\xf6\xe2\xe3\xd1\x3b\x3e"
+ "\x00\xeb\x4a\xae\x8f\x8b\xc6\x19\xa8\xce\x98\xb7\x52\xf2\xe1\x75"
+ "\xe6\xfa\xb4\x82\xeb\x40\x0d\x5b\x84\xf5\xec\xd0\x83\x5e\xf9\x12"
+ "\xe7\x9a\x80\x36\x91\xb2\x2b\xfb\x69\xdd\x2f\xf2\x49\x38\xfe\xbd"
+ "\xa5\xa5\xdd\xe7\x97\x08\x7b\x2f\xc7\xbe\x77\x52\x89\xe8\x6f\xa5"
+ "\xdf\xea\x25\xee\xc7\xf8\xe9\x30\xc9\x32\x9b\xeb\x2f\xc9\x92\x3d"
+ "\x85\x64\xa9\xe4\x72\x64\xdb\x01\xef\xf1\xdf\xe4\x21\xaf\x0c\x69"
+ "\xaf\x1a\xaf\x31\xc4\xeb\x49\xf4\x55\x24\x13\x96\x5d\xcf\xfd\xdf"
+ "\xcf\xb9\x1e\xdc\x2e\x65\xaf\x6e\x5d\x41\x79\x8d\x49\xa7\x15\x9e"
+ "\xb7\x1a\xe9\xca\x5b\xc5\xba\x09\xe1\x98\x7f\x93\xfd\x41\xa2\x8f"
+ "\x28\x23\x1f\x6d\xbf\x97\x9f\xaf\xb1\x4f\x46\x5d\x3d\x82\xde\x3f"
+ "\x1d\x4c\xa4\xa3\x9a\x5e\x34\xaa\x11\xcb\x70\x8c\x41\x78\x95\xe3"
+ "\x18\x69\x13\xb5\x37\xe9\x32\x8e\x91\xe2\x5b\x0a\x4c\xe5\x9a\xde"
+ "\x62\x39\x45\xd4\xf6\x02\x1f\xd3\x37\xa8\xc7\x95\x3e\xdd\x32\x7d"
+ "\x23\xdb\x71\x13\xb6\xa3\x09\xcb\x7b\x4c\xd6\x6b\x13\xd2\x5b\xf0"
+ "\x7a\xaa\x94\x5d\x7c\x2b\x58\xed\x13\xa9\xe1\x20\x6d\xb5\x26\x97"
+ "\xfc\x2f\xc7\xa0\x4f\x99\xcc\x5b\x26\xca\xea\xf3\x92\x46\x4b\x63"
+ "\x44\xbe\x06\x1a\xa6\x91\x1f\x1c\x89\xd8\x73\xdf\x47\x6b\xf9\xca"
+ "\x34\xb2\x1d\x51\x46\xc4\x78\xae\x87\x38\xee\xf1\xe9\x51\x9f\xa5"
+ "\x01\xfe\x89\x7c\x71\x7e\xed\x4a\xb1\xc6\x04\xe9\x12\xf9\x54\x9a"
+ "\xab\x20\xbf\x49\xd2\x7e\x34\x99\xbf\xf6\xd7\x95\x88\x9b\x50\x57"
+ "\xae\xd3\xf1\xde\x17\xac\x9f\x2b\x11\x3e\xb0\x48\xe4\x09\xbf\x56"
+ "\xd6\xad\x5c\xd4\x4d\x5e\x53\xbb\x65\x51\xbb\xf5\x3d\xa6\x6b\x47"
+ "\x6c\xb7\xbe\xf7\x48\xfa\x4a\xf2\xe5\x3e\x7b\x0d\x5f\xab\xd9\x72"
+ "\x67\x7f\xd1\xf7\x17\x64\x0f\x3e\xb9\xc2\x33\x02\xfc\x45\x65\x70"
+ "\x7f\x11\x9e\x2c\xeb\x5b\x1a\x60\x1b\x65\x42\x76\xd9\xb7\x20\x0e"
+ "\xb5\xcd\x72\xad\x0f\x4c\x23\xff\x49\x65\xeb\xfb\xa0\x62\xd1\xae"
+ "\xd2\x96\xfb\x26\x74\xc6\xa1\xaf\xaa\xb7\x67\xc2\x9a\x7c\x02\xf1"
+ "\x20\x4c\xf9\xb8\x12\xd3\x04\xae\xe1\xfb\xc9\x37\xe8\x7d\x34\xd2"
+ "\x16\x7a\x19\xd9\x4b\x5f\x93\xbf\x2d\x86\x2f\x90\xb6\xa8\x95\xfd"
+ "\x29\x62\x14\xa7\x2b\x77\x69\x40\xb9\x84\x4d\x15\xff\x96\x33\xaf"
+ "\x63\xdf\x9d\x5a\x9f\x46\xf4\x98\x37\x13\xf3\x54\x04\xf4\x8f\xf9"
+ "\x24\x1f\x96\xe5\xe0\x3e\x6b\x1d\xf7\x15\x99\x2d\x42\x9e\x6d\x25"
+ "\xb2\x9f\xc0\xb4\x38\x99\x96\x23\xfb\x12\x4d\x6f\x86\xf9\xcb\x14"
+ "\x61\x09\x3e\x3e\x0a\x77\x68\xe3\x23\xce\x8b\xfb\xa2\x08\xab\xac"
+ "\x1f\xa5\x5d\x27\xd2\xfa\xec\xa7\xb4\x5c\xd1\x0e\x85\x8c\xf7\x57"
+ "\x7d\x72\x64\x7f\x45\xf6\xa5\xb8\x54\x53\x13\xd9\x18\x5d\x23\x0f"
+ "\x5a\x7f\xdd\x50\x97\xd3\x46\x73\x88\xf5\x78\x6f\x35\xf9\x03\xf2"
+ "\x17\xf6\x19\xc2\x6f\xd8\xef\xe4\xc7\x37\xc8\xef\xd0\x38\x84\xee"
+ "\x23\xdd\x52\xf2\x45\x98\xfe\x21\xad\xc9\xc9\x8e\x9a\x90\x6f\x44"
+ "\xb9\xcc\x7b\x80\x8f\x15\x8e\xa6\x18\xb5\x34\x2d\x1f\xfa\x86\x35"
+ "\x94\x8f\xf2\x6b\xfe\x8b\x7c\x97\x9b\x7c\x13\x2f\x2f\xf2\x2a\xa9"
+ "\xe3\x7c\xde\xa0\x8d\x8b\xda\x15\x1d\x2d\xad\x7f\xc0\x7d\x5a\xe4"
+ "\x2c\xe1\xcf\x22\xef\xa3\xbc\x1c\x3f\xf4\x95\x59\xa7\xd9\x17\x25"
+ "\xf3\x40\x2d\x3e\x49\x7e\x11\xa6\x08\x39\x23\x2b\x45\x3d\x22\x97"
+ "\xf3\x7a\x08\x9f\x9a\x2f\x64\x81\x29\xc5\x6d\xfc\xde\x06\xaa\x0b"
+ "\xdd\xcb\xd3\xdd\xa3\x35\x48\xf0\x1e\xff\x96\x77\x60\x3e\x6f\x7b"
+ "\x7a\x27\x7a\x5a\x4f\x17\x7d\xa8\xa9\x78\x9d\xe6\x7b\xa3\x92\xa4"
+ "\x9c\xdf\x6a\x7e\x17\xdb\x65\x25\xf9\x5e\x7e\x6f\x86\xa4\xb9\x53"
+ "\x1e\xb9\x7f\x8f\x1a\x26\xda\xd5\xa6\xc8\xf6\x5e\x2d\xea\x11\x75"
+ "\x13\x9f\x67\x1f\x4d\xc5\xb6\x8d\x1a\xa4\xb5\xad\xfe\x9c\xec\x07"
+ "\xcb\xa7\xb1\xa4\xf0\x2b\x4b\xf9\x1c\xb6\x88\x68\x48\x26\xd1\x47"
+ "\x44\x5a\x03\xc7\xd4\x87\x55\xcb\x16\xea\x97\xc4\x58\xd5\xf2\xac"
+ "\x8c\x0f\x81\x73\xde\xef\xb0\x5f\x88\xda\xaf\xf9\x18\xd6\x92\x02"
+ "\xf4\x0d\x74\x94\x85\xaf\x33\x41\xdf\xcc\xd7\xd3\x90\x7f\x7a\xad"
+ "\xcd\x25\x79\x46\x55\x6a\x7e\x83\x7c\x49\x6d\xf3\x41\x39\xa6\x33"
+ "\xa7\x17\x4b\x5f\x72\x5c\x35\xcf\xf4\x1f\x87\x99\x67\xfa\xfb\x0c"
+ "\xcb\xb2\x40\x9f\x81\xe3\xe6\x95\x2d\x05\xe6\xd1\x7e\xe3\x00\x4c"
+ "\x3b\xb3\xef\x30\x5b\xc8\x46\x69\x0d\x24\xee\x9f\xe6\xf1\xb4\x8f"
+ "\x35\x99\xc9\x6f\x9e\x5a\x22\xe3\x17\xaa\x65\x36\x8d\xd5\x02\xca"
+ "\x2b\xf7\xf3\x9d\x54\x9e\xc6\x4f\x05\x5a\x47\x07\xdb\xe1\x24\xf1"
+ "\x5c\x2a\xfd\x7c\xa9\x9f\xaf\x94\x7d\x18\xf9\x49\xff\xbe\x0a\xee"
+ "\xf3\xef\xab\x2c\xf7\x74\xf6\x91\x16\x47\xe8\x7d\x95\x05\xc8\x6f"
+ "\x69\x3e\xd2\xdf\x17\x58\x86\x17\xfb\x8d\x65\xcd\xdb\xb4\xb1\xac"
+ "\xcf\x8f\x9a\xc7\x90\x8f\xc2\xf2\x2b\x65\xd9\x65\x2e\xa3\x77\x93"
+ "\x56\x36\xea\xd1\xfe\x5a\x3b\xea\x66\x01\x58\xf0\x7c\x95\x1c\x03"
+ "\x72\xdb\x6c\xa3\xb5\x44\xd4\xc8\x7a\xd4\xbf\x70\xd2\x33\xe7\x9c"
+ "\x93\x70\xc8\xd7\x57\x54\x9d\x9a\xab\xb5\x6f\x74\x82\x7e\x5c\xb8"
+ "\x61\x1d\x5b\xd5\x52\x10\x1d\xa1\xaf\xe3\x1a\x4c\xcb\x93\x31\x04"
+ "\xde\xb6\x9c\x97\xc5\x55\xb2\xce\xbf\x6e\xa2\x1e\xd1\x56\xaa\x07"
+ "\xcd\x89\xb0\xfc\x3d\x34\xee\xa1\x75\xd0\xd0\x6e\x52\x4b\x3a\x74"
+ "\x5e\x29\x3f\xbd\x42\x3f\xbe\x82\x6d\xe4\x2b\xe5\xdc\xb3\x1a\xc7"
+ "\x3b\xf9\xfa\x58\xcc\xf8\x9f\x4d\xb4\x67\xcc\x9b\x39\x67\xc1\x8c"
+ "\xeb\xed\x33\xe7\xcc\x5c\x30\x73\xea\xac\x99\x8b\xa7\x2e\x98\x39"
+ "\x77\xce\xf0\xd9\x53\x1f\x9e\xf9\x90\x7d\xd1\xd4\xf9\xf6\xb8\xcc"
+ "\x61\x99\xe1\xe0\x23\xbd\xd9\x3e\x75\xfe\xfc\xc7\x67\x4f\x9f\x66"
+ "\x9f\x33\xf3\xa1\xeb\xe6\x4d\x9f\x3f\x7d\x81\x7d\xea\xbc\xb9\x8f"
+ "\xcf\x99\x66\x1f\x36\x6d\xc4\xb0\xb8\xc4\x69\xe1\xfa\x18\xda\x10"
+ "\x0b\x34\x7a\xbf\x6b\x68\xc8\xfb\x0e\x4c\x66\x43\xc6\x3c\x73\xe6"
+ "\xcc\x39\x3c\x66\xa7\xf6\x5b\x36\xb2\x10\xf8\x9a\xe9\xb4\xae\x2d"
+ "\x2b\x88\xce\xc7\xa3\x4a\x74\x58\x4f\x7b\x09\xad\x9b\x1e\xc3\x06"
+ "\xb5\x14\xf4\x4b\x76\xa9\x31\x7c\x3d\x6c\x6c\x0b\x3b\xd6\x6d\x10"
+ "\xfb\xae\xba\x01\xc7\x6c\x19\xf4\xbe\x77\xc9\x77\x60\xcd\x5f\x08"
+ "\x2a\xee\x11\xb8\x5b\x68\x4d\x75\xcc\xb3\xc0\xa5\xf6\xcf\xe7\x31"
+ "\x51\xb5\xbf\xb5\x29\x3a\xde\xca\xf2\xe3\xad\x02\x97\xfe\xd1\x5a"
+ "\x3c\x7a\xc2\xaf\x61\x02\xe9\xe7\x41\xb5\x3f\x5f\x37\xe0\x49\xd4"
+ "\x65\x8a\xc7\x9e\x7a\xf7\xb6\x64\x1c\x0f\xee\x77\x5e\xc6\xef\x45"
+ "\x37\x2b\x10\x81\x72\xa9\x3b\x96\xc6\xc1\x73\x58\xd6\x7c\x1b\x63"
+ "\x58\xc6\x3e\x2d\x9e\x46\xeb\xdc\x63\x5d\xf6\xc9\x7a\xbc\xc5\xeb"
+ "\xb1\x8e\xc5\x16\xf6\x43\xf9\x0a\x48\x9e\xfe\xaa\x56\x07\x94\x7b"
+ "\x9f\x4b\xed\x97\x4e\xeb\xdc\x93\x5c\xc1\x62\x7d\x14\xef\x42\x39"
+ "\xc7\x7b\x17\x62\xbb\x0d\x16\xeb\x28\xe5\x15\x0b\xfb\xc3\xfa\xac"
+ "\x2c\xc1\xf3\xdc\x93\x10\xb1\x86\xd6\xe2\x5e\x71\x25\xdb\xdd\xec"
+ "\x86\xba\xf4\x7d\x60\x7e\x82\x35\xb1\x3f\x35\x34\xc8\x3a\x65\x92"
+ "\x6f\x78\xfd\x91\x7d\x2a\xd5\x09\xfb\x8a\x88\x92\x93\x5d\xc6\x16"
+ "\xd5\xe7\x62\x58\x33\x7b\x51\x3f\xe6\xea\xff\x05\xb5\x09\x8d\xb7"
+ "\x4e\x61\x3f\x85\x75\x40\xfd\xea\x6f\x97\x63\xe3\x66\xd6\x3e\x45"
+ "\x37\x96\xea\x4f\x7a\xd6\xdc\x05\x6f\x93\xc6\x9b\xd6\xf8\xa6\x3c"
+ "\x02\x7f\xeb\x78\xcc\xd3\xe4\xe3\x6f\x75\x04\xf2\x27\x9e\x78\xde"
+ "\xa4\x95\x23\xe6\xe1\x56\x1a\x13\x34\xa1\x2e\x37\x75\x51\x5e\x6c"
+ "\xc1\x3a\xb6\xa7\x0e\xd3\xf3\x4e\x83\x8a\xb4\x7b\x4a\xd6\x71\xfe"
+ "\xab\xd0\x86\xf8\x7a\xe0\x4f\xc6\x00\xac\x44\x9a\x53\x05\xfd\xed"
+ "\x14\xdf\xc5\x7b\x34\x27\xb6\x05\xc6\xac\xa5\x3e\xdf\x1c\xa0\xcf"
+ "\xc9\x05\x34\x26\x2c\x44\xfe\xa8\x43\x79\xdf\x62\x3f\x8c\xd7\x23"
+ "\x0a\xc1\x41\xe5\xe0\x79\x3d\xc5\x43\x90\x67\xab\x56\x1e\x43\xfd"
+ "\xcf\xf5\x8a\x18\x8c\xd4\xad\xe1\x75\x99\x0d\xb4\xce\x02\xdb\x81"
+ "\xfe\x9d\x64\x24\x1d\x6b\x29\x18\x30\x5c\xd3\x29\xd4\xf5\x3d\x5c"
+ "\xaf\xac\xe0\x60\x05\xd6\x0a\x5a\xef\x9b\xf4\xaa\x18\xf5\x89\xf4"
+ "\x0a\x69\x53\x35\x9d\x42\x5d\xab\x27\x3a\x94\x21\xbc\x62\x71\xb2"
+ "\x4a\x3e\xf2\x90\x3a\x60\x37\xe9\x18\xfb\xaf\x3b\xf6\xb1\x81\xbf"
+ "\xda\x27\x70\x1a\xb0\xbb\xae\x55\x60\xe0\x6b\xf7\x01\xa5\xba\x76"
+ "\xaf\x47\x3d\x0e\xa7\x76\xe6\xb1\x6a\xa4\x47\xd9\xea\xf9\x58\x7c"
+ "\x19\x62\xc0\xfb\xaa\x01\x7c\x1e\x2f\xdb\xb0\xc6\xd7\x86\x03\x1a"
+ "\x82\xb5\x61\x40\xdb\xa9\xb4\xb3\x82\x01\xcd\x64\x2b\x2d\x05\x31"
+ "\x83\xb4\x35\xa8\x83\x61\x89\x65\xa8\x6a\x21\x98\xa8\x8c\x2a\x2b"
+ "\xa7\x1f\xa7\x95\x91\x87\x6d\xdd\x94\x9d\x7e\x46\x7d\xae\x2a\x05"
+ "\xa0\x98\x38\xe5\x8f\xb5\x52\xfb\xc6\xac\xf6\xe5\x67\xcd\x81\xf9"
+ "\x87\x3d\xe4\x27\x2b\xdf\x59\x41\x4c\xe9\x73\x72\xed\x6d\xcc\x5f"
+ "\x73\x26\x79\x63\xed\xa2\x9f\x74\x0e\x21\xfd\x1e\x18\x56\xb7\x1e"
+ "\x80\xd2\xc4\x75\x4c\xf3\x29\xec\x7b\x02\xe3\xfb\x5d\x3e\x6f\x50"
+ "\x07\xde\xee\xf7\xbc\x41\x1d\x18\xdf\xd5\xf3\x86\x80\x72\x97\x53"
+ "\xb9\xde\x92\x49\x06\x5f\xd9\x03\x67\x79\x83\x94\xad\xe5\x1f\x51"
+ "\xaa\x9f\xcf\x0c\xfc\x98\x64\xa8\xc5\x7e\x8a\x5d\x3e\xc9\xc0\x90"
+ "\x4f\x15\xef\xc3\x07\xd6\x8b\xf1\x0b\x8d\x8b\x06\x56\x10\x4d\x60"
+ "\x3d\x3a\x36\x93\x95\xd6\x89\x85\xd3\xfc\x22\xec\xe7\x40\xde\x15"
+ "\x6e\x4c\xd3\x6e\x2b\x7e\xc4\xc0\x82\x5c\x44\x00\x24\x71\x7a\x86"
+ "\x9b\x48\x92\xd7\x4d\xfc\x42\xed\xa0\xef\xb8\x7f\x0e\x5b\x1f\x21"
+ "\x2f\xe7\xd7\x0a\x06\x59\x5e\x8e\x8e\x62\xcc\x19\x72\x33\xd0\xb2"
+ "\x04\xdb\x28\x32\x90\x33\x29\x0c\xf9\x95\x72\x62\xc6\xdc\x92\xbf"
+ "\x76\xcd\xf4\xd7\x94\xe2\x7f\x8d\x9b\x71\x8a\xae\x80\x2b\x8d\xd3"
+ "\xf8\xab\x5b\xff\xb6\xa7\x23\x49\x29\xb5\xe8\x8b\xb4\x40\x4e\x18"
+ "\x3f\x31\xd3\x9f\x56\xe4\xe7\xc0\xfb\x49\xce\x0e\x82\xfe\xcd\xcb"
+ "\x75\xe4\x1f\x09\xf1\x6f\xf6\xe3\x71\x8e\xdb\x60\xdd\xf9\x95\xe2"
+ "\x70\x53\xfd\x79\xe4\x7f\xe6\xcd\x5e\xdf\x47\x3b\xf5\xa9\xc7\xcd"
+ "\x93\x82\x91\xfa\xda\xff\xe6\x6d\x5a\x92\x5e\x43\x7d\xf7\x6f\x89"
+ "\xf3\xbf\x4e\x0e\xb8\x7f\xdb\xc4\xf3\x20\x39\x38\xe9\x4f\xb6\x0b"
+ "\xc7\x28\x3f\x1d\xd4\x91\x68\x0e\x30\x19\x73\x7e\x80\x09\xf9\x36"
+ "\x29\x8d\x11\xe5\x29\xd3\x25\xab\xc1\xa9\xbf\x9f\xed\xb2\xe5\xd2"
+ "\x20\xae\x6c\xea\xac\x53\xb7\x06\xa4\xd1\x75\x2f\xbb\x4c\x1b\xf5"
+ "\x5e\x27\x7a\x9e\x66\xd7\x5d\x1b\x92\xf1\x4f\x29\xc0\xe8\xb4\xf3"
+ "\x20\xea\xa5\xed\x7f\xe3\x66\x20\xfb\xb8\xb4\x7d\x4f\x1b\x13\xbd"
+ "\x38\x7a\x22\x7e\xa0\x7f\xac\xc3\x51\x32\x79\x83\xc9\x04\x26\x4f"
+ "\xce\x4b\x3f\x7e\x69\xbb\xb4\x5d\xda\x2e\x6d\x97\xb6\x4b\xdb\xa5"
+ "\xed\x22\xd8\x0c\xfa\x89\xb5\x09\xf7\xde\xf2\xa8\x9f\xff\x18\xe4"
+ "\xae\x4f\x53\xce\x25\x1f\x93\x1b\xe4\x24\x3b\xed\xa5\x69\x2e\x4b"
+ "\xfe\xc4\xfa\xb8\x8a\x8c\x26\xd3\xaa\x94\x6a\xc7\xa6\xf4\x06\xdb"
+ "\xfa\xd4\x7d\x49\x95\x99\xad\xea\xca\x31\x55\xb1\x65\xd3\x0e\x59"
+ "\x0b\x27\xed\x89\xdf\xb6\xa0\x39\x62\xf5\xb8\x9a\xe1\xe5\xb3\x1a"
+ "\x07\x15\x4d\xd9\x3f\xfa\xed\xa5\x6e\x65\xc5\x6d\xef\x0f\xf9\xdd"
+ "\x83\x07\xfb\x15\xdc\xf5\xc9\xf5\x5b\xe7\x9d\x0c\x7f\xe6\xff\xec"
+ "\xfa\xf1\x2b\x8f\x1c\xb9\xec\x85\x7b\x3f\xbb\xf9\x2f\x8b\xdb\x7a"
+ "\x3d\xf5\xf3\x0f\xae\xfe\xc3\x8c\xc3\x31\xeb\x26\xff\x77\xe2\x9f"
+ "\x16\x7e\x17\x95\x7b\x67\xed\x88\xcd\x73\x8e\x0f\x2e\xbe\xff\xef"
+ "\xb7\xbc\x9b\xe5\x35\x2c\xff\xe9\x7b\x57\xfd\x76\xea\x17\xd1\xcf"
+ "\xfe\xf2\xe3\x51\x5b\x1e\xfb\xa6\xcf\xd3\xbf\xf8\xf0\xda\x97\x67"
+ "\x7e\xfd\xa3\xe7\xef\xf9\xf4\xa6\x37\x9f\x38\x1d\xf6\xeb\xdb\x77"
+ "\x0e\x7b\x69\xfa\x97\x03\xd6\xde\xbd\x37\xe1\x8d\xc7\xbf\x8d\x5c"
+ "\x33\x7e\xf7\x75\xaf\xce\x3e\x76\xc5\x86\xfb\x0e\xfc\xfb\x3b\xcb"
+ "\x3c\xc6\x27\x7f\xb6\x63\xe8\xef\x1f\xfa\x47\xff\xe7\xfe\xe3\xaf"
+ "\x37\xbc\x3e\xff\x54\xdf\xdf\xdc\xf1\xd1\x4f\xfe\xf8\xe8\xd1\xcb"
+ "\x5f\xfc\xd5\xff\xff\xb7\xb7\x96\xb4\xf7\xfe\xbf\x63\xff\xdf\x35"
+ "\x1b\x1f\xfe\x6a\xe0\x7f\xfd\xe7\xdf\x6e\xfc\xf3\xa2\x16\x73\xde"
+ "\x84\xba\x91\xaf\xcd\x3d\x71\x65\xc9\x03\x9f\xdf\xba\x3d\x9b\x9d"
+ "\x4b\xfb\x81\x9a\x7e\xc3\x3f\x13\x37\xdf\xe0\x91\x92\x8b\xf7\xf5"
+ "\x98\x8f\x62\x90\xf8\x8b\x84\x9c\x04\x30\x98\xa0\x97\xda\x83\x19"
+ "\x43\x4f\xeb\xdd\xc5\x66\xd7\xe7\x0f\x65\xa3\x78\xc5\x28\xdc\x09"
+ "\x87\xcb\x79\x8a\x2f\x0a\x10\x1b\x22\x8f\x7f\xde\x66\xc0\x36\x30"
+ "\xa2\x84\x61\xd0\x0b\x5b\xcd\x04\x7d\x20\x1c\xfa\x42\x04\x44\x42"
+ "\x14\x98\xc1\x02\xd1\xd0\x0f\xfa\x83\x15\x06\x40\x0c\x0c\x04\x1b"
+ "\xfc\x08\x2e\xc3\x5a\x0d\x82\x2b\x60\x30\x5c\x89\x8d\x73\x15\x0c"
+ "\x81\xa1\xc1\xeb\x95\x03\xc9\x36\xfc\x83\xff\x27\xf2\xa8\x4d\x0e"
+ "\xa4\x5d\x4a\xff\xa7\xa6\x3b\x65\x7a\xbd\x4c\x77\x5d\x4a\xff\xa7"
+ "\xa6\xdb\xff\xc5\xc7\xab\xfe\xa5\x47\x03\x0e\x23\xc4\x48\xc2\x6f"
+ "\x3c\xd1\xb1\x05\xa6\x1a\xe4\xd6\x71\x0d\x67\xc9\xdf\x89\x9f\x7f"
+ "\xfe\xc0\x2d\x19\xf7\x78\x71\x9a\x0d\x20\x9f\x3d\x30\xfd\xe6\x3e"
+ "\xee\xb7\xad\x33\xbc\xaf\x46\xe7\xd0\x53\x15\x13\x58\xf9\xdf\x10"
+ "\x36\x7a\xb2\xb8\x63\x25\xee\xf9\xb8\x3f\x87\x7b\x09\xee\x2f\x6b"
+ "\x45\x81\x61\x88\x0d\x0c\x43\x27\xe2\x71\x1b\x1e\x1b\xc1\x10\x9b"
+ "\x03\x86\x6b\x50\xf8\x61\x4e\x30\x38\x92\x7d\x95\x19\xe5\xea\x90"
+ "\xda\x30\x52\xa6\xdb\xf1\x3c\x3e\x3d\xa0\xc0\xee\xf6\x77\xce\xdb"
+ "\x27\xa5\xd8\x47\x8d\x88\x1f\x91\x90\x60\xbf\xee\x3a\xfb\xf5\x71"
+ "\xa3\xae\x1f\x19\x17\x3f\xf2\xfa\x51\xf6\xb8\x51\x37\xc7\x27\xdd"
+ "\x7c\x43\xbc\x7d\xf6\x13\xf3\x66\x8e\x8a\x7b\x78\xba\x7d\xce\xb4"
+ "\x99\xf3\xed\x33\x66\xce\x9b\xbd\x68\xea\xbc\xe9\xa1\xd4\xbe\x5b"
+ "\x1b\x56\x07\xae\xf0\x08\x31\xf5\xa8\x19\xe0\x56\x50\xed\x76\x50"
+ "\xe3\x6d\xd0\x19\x66\x87\xdc\x3b\x6d\xb3\xef\x9d\xfc\xd9\xb0\x5f"
+ "\x45\xbd\xff\xd3\x87\x87\xfd\xfb\xcf\x7e\x9f\x57\x01\xca\x4d\x2a"
+ "\x28\x71\xd5\xa0\x5c\x5d\x05\xca\xe5\x29\xa0\x44\x4d\x02\x65\xde"
+ "\x26\x50\x1e\x99\x08\x4a\x5a\x1c\x28\x93\xd6\x83\x32\x76\x55\xe7"
+ "\xb4\xe5\x63\x44\xda\xeb\x49\xa0\x6c\x6a\x06\x65\xc3\x68\x50\xf2"
+ "\x1a\x44\xda\x87\xb1\xa0\xbc\x5b\x7d\xde\xdb\xe2\xdc\xb7\xee\xea"
+ "\x81\xe1\x7f\x00\xd9\x9e\x18\xe5"
;
diff --git a/sys/dev/mxge/rss_ethp_z8e.h b/sys/dev/mxge/rss_ethp_z8e.h
index 34b0e9e42e96..3cec65fa23db 100644
--- a/sys/dev/mxge/rss_ethp_z8e.h
+++ b/sys/dev/mxge/rss_ethp_z8e.h
@@ -1,6 +1,6 @@
/*******************************************************************************
-Copyright (c) 2006-2011, Myricom Inc.
+Copyright (c) 2006-2012, Myricom Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -28,9944 +28,9560 @@ POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
***************************************************************************/
-static unsigned int rss_ethp_z8e_uncompressed_length = 571764 ;
-static unsigned int rss_ethp_z8e_length = 158985 ;
-static unsigned char rss_ethp_z8e[158985 + 1] =
- "\x78\x9c\xec\xbd\x71\x7c\x94\xc5\xb5\x37\x7e\xb2\x59\x20\x62\x60"
- "\x37\x31\xe2\x96\x62\x5d\x34\x81\x68\x03\x44\x1b\x2c\x52\xc0\x20"
- "\xa0\xc1\x06\x88\x82\x6d\x54\x34\x41\x81\x06\x8d\xb0\x40\x84\x00"
- "\x21\xbb\x2c\x68\xb1\x02\xd9\x44\x84\x28\x21\x49\xaf\xd8\xd2\x96"
- "\x6a\xac\x78\x8b\xb7\xa8\x6b\x89\xbf\x1f\xed\x4d\xb2\x69\x5f\x7a"
- "\xdf\xdc\xfe\xf0\x76\xe5\x46\x9a\xf2\x06\xd8\x92\x85\xac\x64\x77"
- "\xe7\xfd\x9e\x99\xe7\x49\x76\x97\x0d\xca\xbd\xf7\xf3\xf9\xfd\xd3"
- "\x7c\x3e\x9b\xe7\x79\xe6\x99\x39\x73\xe6\xcc\x39\x67\xce\xcc\x9c"
- "\x39\x0f\xd1\xb5\xff\x79\x29\x89\x2f\x09\x64\xfc\x4e\xe1\xc7\xff"
- "\x85\xf2\xff\xf8\xfb\xc7\xdf\x3f\xfe\xfe\xf1\xf7\x8f\xbf\x7f\xfc"
- "\xfd\xe3\xef\xff\xdf\x3f\x5f\x02\xe5\x5c\x30\x18\xe9\xb7\x2e\xa2"
- "\x5e\x67\xd2\x18\x2f\x85\x4b\xf7\xbe\x22\x82\x78\x95\x80\x71\x7e"
- "\x0c\x5f\xf9\x57\x83\x34\x83\x8b\x92\x6e\x35\x93\x59\xec\xb5\x18"
- "\x66\xed\x27\xda\x3d\x4a\x74\xbf\xb2\x47\xf8\x9a\x2b\x88\x8e\x1d"
- "\xc0\xf3\x1e\xd1\xf5\xca\x28\xe1\x07\x9c\x62\x2f\x15\xed\x66\x38"
- "\x5b\xf1\xbc\x15\xe9\x48\x2b\xf3\x52\xf1\x36\x4e\xab\x42\x39\x3d"
- "\xdd\xb3\xed\x12\x35\x5b\x83\x54\xc5\x70\xac\x21\x9a\x3d\x56\xe2"
- "\xd1\x88\xbc\xc9\x9c\x77\xcb\x28\xd4\x9b\x46\xe4\xdc\x23\x02\x11"
- "\x38\x24\x71\x3d\x5c\xb7\x96\xbf\x3d\xa6\x3e\x1f\xd2\x3a\xf5\xfa"
- "\x06\x81\x61\xe6\xf2\xdc\x06\xeb\x37\x28\xf1\x34\x5d\x7f\x23\xc3"
- "\x64\xdc\x84\x93\x92\x3c\x97\x83\x74\x9a\xae\xcb\xec\x71\x52\xe2"
- "\x31\x50\x63\xd7\x1e\x99\x9e\xe8\xf1\x07\xc9\x5a\x49\x09\x78\x37"
- "\x0f\x57\x03\xca\x8d\x60\xfa\x2c\xac\xa3\x74\xae\x1b\x70\x8d\xc2"
- "\xe0\x4e\x68\x48\x25\x62\x1a\xf9\x0d\x34\xde\xef\xa4\x84\x5e\xe7"
- "\x75\x68\x7f\x52\xa6\x6c\x3f\xea\x45\x59\xe3\x69\x1a\xfe\x77\x03"
- "\xf2\xa3\x4e\x9f\x75\x23\xe3\x30\xfc\x13\xe1\x74\x1b\x74\x38\x61"
- "\xa7\xfb\xfa\xfa\x1a\xa2\x1e\xa7\x61\xae\xdf\x60\x12\x1a\x9c\xa3"
- "\x3a\x1c\xce\x87\xba\x92\xb9\xae\x1e\xa7\xb1\x26\x22\x8f\x57\xcf"
- "\x03\xbc\x7d\x93\xfc\x94\xc8\x38\x9f\xa2\xe1\x53\xb8\x3e\xad\x2d"
- "\x46\xae\xc3\xb3\x2e\x48\x1e\xf4\x3d\xea\x4e\x43\x5b\xad\xc7\x02"
- "\x44\x80\x99\xd2\x50\x49\xc4\xf0\x81\xbf\x55\xc1\x1c\x9e\xa3\xc3"
- "\x64\x18\xfd\x6d\x75\xba\x53\x1b\x24\x8e\xdc\xd6\x24\xd2\xf2\x16"
- "\x47\xe2\xc8\x70\xd1\x96\x9b\xb8\x2d\xcd\xe0\x28\x2d\xcf\xb6\x7e"
- "\x7a\xf4\xb7\xff\xfa\xdc\x18\xd8\x16\x05\x3b\x01\xb0\x13\xdc\x5a"
- "\xb9\xfe\xf6\x7b\x63\xf2\xab\xbc\xe6\xeb\xfc\x06\xa1\xd1\x61\x78"
- "\xd7\x40\xde\xeb\x76\x47\xe6\x05\x3e\x06\x45\x5b\x32\x78\x69\x78"
- "\x07\xda\x99\x88\x3c\xf9\xe8\x47\xab\xf6\xfe\x46\xed\xbd\x05\xef"
- "\xee\x55\xf0\xae\x9f\x12\x01\xcf\xcc\xf0\x22\x79\x4b\x49\x94\x11"
- "\xbf\x21\x30\x90\x87\xe2\x37\x2c\x49\xe7\xb7\xb5\x16\x11\xb6\x7f"
- "\x0d\x6d\xaa\x49\x4f\x0a\x3b\x05\x79\xca\x03\x64\x1d\x4d\xf6\x53"
- "\x74\x7d\x13\xe0\xd3\xae\x8d\x94\x64\xb7\x89\x80\xa7\xbc\x9b\xda"
- "\x7c\xdd\x64\xf7\x41\x36\x82\x17\xa9\xf2\x22\x78\x31\x78\x96\x2a"
- "\x57\x93\xa5\xb9\xe2\x73\x8a\xc7\xcb\x61\x83\x20\xfb\x18\x2e\xdb"
- "\x49\x6d\x75\x9d\x64\xaf\x8b\x2e\x6b\xbf\x99\x2c\xad\x78\x46\x9f"
- "\x9b\x18\x0f\x96\xb7\x60\x6a\x7a\x52\xc5\x6b\x64\xb4\x8f\x25\x43"
- "\xeb\x52\xb7\x86\x4b\x72\x39\xe3\xb2\xed\x0c\x25\xbd\xb1\x1c\x7c"
- "\x78\x86\xf1\xcd\x4a\x7a\x7b\x63\xc0\x70\xcc\x92\x4f\xc7\x2c\x27"
- "\xa9\xd9\x32\x9d\x9a\xcb\x67\xd3\xae\x33\x94\x7c\x2c\x30\x8d\x9a"
- "\x8d\xf7\x53\x73\xfa\x6c\xf2\x74\xe3\x1e\xf2\x7b\xcc\xe2\x27\xeb"
- "\x3a\xe6\xa7\xe4\x92\xdd\xcf\x50\x92\x57\xc1\x04\xed\x92\xcb\x3e"
- "\x2e\x23\x62\xda\xf1\x73\xbc\x76\xac\xfd\x1a\x59\x80\x5f\x17\x70"
- "\xb9\x07\xb8\xfc\x32\xdd\x42\xd9\xc0\x79\x98\xa7\x36\x48\xc6\x0a"
- "\xba\x6e\x10\x39\x4e\x0b\x83\xf7\x20\xbb\xdd\xf5\xd0\x27\x2c\xbf"
- "\x3d\x9b\x0a\xa1\x13\x92\x21\xff\xc9\xdb\x34\x19\xe8\xb6\xff\x98"
- "\x8c\x3d\xeb\x0b\x13\x1a\xf6\x88\xce\x5e\xe7\x08\xd2\xdf\x41\x16"
- "\x3b\xf1\xbe\x6b\x52\x1a\x99\x3d\xc1\x5c\xfa\xe8\x72\x17\xcb\x63"
- "\xf7\x48\x3f\x25\x30\x3c\x53\x39\x64\x67\x1d\x0d\x01\x3e\x7f\x68"
- "\x40\xfa\x6d\xc8\x87\xf2\xb9\x5e\x7a\xb5\x9b\xcb\x8b\x9b\x1e\xf7"
- "\x87\x6f\x7a\xfc\x62\x78\xef\xe3\x3d\x62\xef\xe3\x17\x42\x7b\x1f"
- "\xff\xbb\x7d\x03\x25\x85\x6e\x7a\xdc\xd7\x66\x93\x7d\x60\x6e\xb3"
- "\xa1\x0f\x42\x94\xb4\xf9\x2c\x99\x9f\x5c\x8d\xbe\x0f\x7e\x4a\x9b"
- "\x57\x90\x25\x9c\x72\x87\xdb\x13\xfc\x13\x3d\x59\x41\x02\xf7\xed"
- "\xf1\xda\xd7\x93\x9a\x95\xa7\xcb\x16\xea\x3d\xe2\x35\xde\x26\x69"
- "\xe8\x4b\xc9\xc9\xc3\x2f\x1f\xbf\x02\xfc\x16\x89\xd4\xac\x45\xa0"
- "\x95\x7d\xe4\x96\x04\xaa\xbf\x4c\x34\x29\x4c\x09\x67\x68\xc4\x09"
- "\xe0\x6f\x1e\x84\x6e\x63\xc2\x35\xb6\xdc\xf1\x0e\xaa\xec\xed\x2d"
- "\x21\xd6\x85\xac\xff\x58\x1f\xf6\x3a\x47\x5a\x51\x4f\xae\x94\xdf"
- "\x3d\xd0\x31\xa9\xb6\x5c\xa4\x77\xf9\x37\x95\x24\xf8\x36\x95\x18"
- "\x7a\x52\x6d\xb3\x90\x67\x36\xf2\x94\x6b\x34\xec\x62\x58\x90\x2d"
- "\xdf\x88\x20\x25\x02\xa6\xed\xd7\x97\x3a\x8c\xfb\xf7\x88\x93\xc8"
- "\x57\xda\x0f\x0b\xb0\x01\x07\xf4\x1f\xe9\xd0\xd3\x40\xeb\xce\x9d"
- "\xc8\xc7\xe5\x3d\x81\x5c\x1e\x53\xbc\x9e\xd2\x2e\x32\x05\x69\xb8"
- "\xe8\x53\xf5\x21\x4f\x17\xeb\xf4\x11\x01\x1a\xda\xeb\xa4\x02\x86"
- "\xcd\xe5\x3c\xdd\x5d\x84\x72\xb3\x84\xbd\xc4\x80\xf4\xf9\xbd\xa2"
- "\x24\x61\x1b\xd2\x8f\xa1\xbc\x56\x77\x97\x8e\x23\xd7\xc1\x7d\x2d"
- "\xf1\x04\x3f\x1c\x2b\x0d\xd0\x88\x5a\x4a\x44\xb9\x85\x0c\x8f\x61"
- "\x81\x0f\xbc\x68\xeb\xac\x63\xa5\x3e\x0a\x8b\x28\x98\x5e\x05\xcf"
- "\x34\x25\x0a\x1e\xd2\x05\xe0\x31\xff\x35\xa3\xcc\x88\x46\x09\xef"
- "\xe1\x5f\x87\x19\x5e\x80\x8c\x56\x89\xef\xf7\x18\x46\x2f\xeb\x0f"
- "\xc0\x74\xaf\xbb\x8f\xba\xc9\xd4\xe8\xb3\x97\x24\xb6\x61\xdc\xe4"
- "\xf2\x6f\x57\x76\x0d\x11\x3d\x85\x89\xcc\x73\xfc\xde\x13\xbc\xc0"
- "\x79\xb6\x88\x9e\x92\xc4\x11\xdd\xd0\x45\xc8\x83\xf2\xe5\x8c\x67"
- "\x64\x5f\x3e\x3c\xe7\x7b\xd3\xe9\x7b\xb3\xe7\xce\x9e\x4e\xf3\x66"
- "\xce\x9a\x4e\xd9\xf7\x4c\xc8\xce\xf9\xd6\xb7\xbf\x25\x6f\xbe\xf5"
- "\xed\x29\xdf\xa2\x82\xef\x3f\x3c\x9d\x0a\xe6\x4f\xa7\x85\xf8\x15"
- "\x2c\x9c\xf3\xf0\xec\x39\x0b\xa7\x53\xe1\xfd\x73\xf1\x34\x6b\xfa"
- "\x9d\xd9\x0f\x4c\x28\x98\x35\x77\x0e\x3d\xb4\xe8\xae\xec\xbb\xee"
- "\xa2\x99\x73\xf2\xef\xcc\xce\xd6\xae\x77\x66\x73\x96\xc7\xa6\xcc"
- "\x59\x38\xa1\x60\xcd\xaa\xb2\x55\x13\xe6\xcf\x9d\xc5\x29\xd0\x6e"
- "\x11\x3c\x94\x19\xba\x14\x66\x5a\xfb\xc5\xf9\x3c\x0a\x43\x77\xd4"
- "\x83\x07\xf0\xeb\x76\x57\x9e\x82\x0e\x48\x79\xbe\x9e\xfb\x4e\x8e"
- "\x01\xa6\xa3\x90\x7b\x63\xaf\xd3\x5c\x01\x1a\x1e\x61\x1a\x5a\x6f"
- "\x65\x3d\x71\xd3\xfb\x78\xf7\xb1\x36\xd6\x0c\xc1\xfb\xba\xe8\xf7"
- "\x37\x40\x07\x9b\xfe\xdf\x36\x2b\x91\x07\x3f\xd0\xdd\x0f\x5d\x08"
- "\xfa\xfa\xa8\xc7\x5e\x38\x04\xfc\x9d\x80\x3a\x3a\x21\x9b\xed\x28"
- "\xdb\x11\x21\xf3\x9d\xe8\x9f\x76\x1e\x57\xce\x91\xf9\x9d\xb6\xb2"
- "\x5c\xe2\x7e\xf2\x94\x69\x30\x2e\xf6\xc3\x18\x2e\x61\xa0\xef\x01"
- "\xe7\x84\x82\x93\x62\x8d\xd0\x0f\x5e\x86\xb3\x0b\xef\x34\x58\x17"
- "\xdb\xa0\x27\xa0\xc7\x53\xc3\xf6\x4c\x12\xa9\xe9\xe6\x70\x5f\xa6"
- "\x1c\x2b\x51\xae\x30\x82\xaf\xfd\xcd\xe5\xc8\xf7\x46\x5e\x02\xf8"
- "\x20\x01\xe3\x2f\xda\x62\x5e\x0a\xfe\xf6\x87\x6a\x72\x1e\x15\xe7"
- "\x0b\xd9\x8e\x18\x7a\x9a\x52\xff\x80\xf6\xb5\x84\x6b\x72\x0a\x45"
- "\xaf\x4c\x63\xba\x1d\x11\xfc\x9c\x8a\x7c\x7d\xfd\x69\xef\x73\x1a"
- "\xf8\x20\x91\xe5\x55\x08\x99\x8e\x31\x33\x75\x03\x74\x5a\x07\xf2"
- "\x16\x72\xde\x49\x41\x1a\x06\x5d\x63\xb1\xda\x13\xe8\x14\xa5\x52"
- "\x38\x35\xe7\xb1\x88\xfa\x00\x27\x95\x07\x29\xe6\x47\x63\xef\x79"
- "\xc0\xe9\x91\xe9\xb0\x63\x52\x9f\x00\xfc\xc7\x59\x57\x2a\xfd\x7d"
- "\xd3\xbf\x73\x3e\x6d\x6c\x1e\x78\x86\xac\x2b\x38\x37\xfd\xfb\x31"
- "\xd0\x92\xed\x05\xb6\xff\x7a\x9d\xa9\x8b\xbc\x34\xc2\xa7\xc6\xc6"
- "\x9b\x3a\x38\x6f\x18\x38\x0a\xf3\x7b\x25\x80\xbb\xd8\xbd\xb1\x9b"
- "\x4e\xdb\x78\xac\x4d\x35\x87\xed\x25\x14\x8d\x53\x4a\x0b\xe3\xcf"
- "\xfa\x03\xb4\xf8\x13\xf8\xe0\x3a\xc0\x3b\x10\xcd\x07\xa9\x6e\xc0"
- "\x79\x14\xf8\x75\xa0\x4d\x8f\x7a\x29\xe5\x78\xb8\xa7\x04\xf5\x92"
- "\x01\x72\x05\x7d\x3e\x00\x43\x2b\xdf\x19\x5d\x3e\x65\x3b\x97\x43"
- "\xfe\x21\xbd\x3d\x32\xff\x0e\xa6\xb9\xc6\x77\xe0\xcb\x1b\xd2\x62"
- "\xf8\x72\x3f\x70\xf9\x8f\x88\xf7\x39\x31\xef\xb7\xe0\xfd\x7f\x6a"
- "\xef\x21\xf7\x37\x2c\x8a\xe1\x5b\x1b\xde\xff\x15\xf8\xfa\x21\xd7"
- "\xb0\x2d\x52\xf2\xc0\x63\xbe\x88\xfc\xdb\x62\xf2\x37\x22\xff\xff"
- "\x61\xbe\xe1\x31\x87\xf3\x37\x68\xb2\x83\xfc\x49\xc8\x7f\x38\xa6"
- "\xfe\x25\xc8\xef\x8f\xc0\xef\x44\xf4\xfb\xb4\x3a\xbc\xff\x82\x79"
- "\x1d\x36\xd1\x10\xe4\x19\xc6\xba\x84\xf5\xd8\xb1\x52\xee\xaf\x34"
- "\x63\x4c\xfe\x74\xe4\x4b\xd6\x68\x64\xd0\x68\x94\xc7\xfd\x88\x3a"
- "\x4e\x2a\x1c\xd2\xa6\xc4\x94\x29\x44\x99\x34\xd0\xf1\x51\x9d\x2f"
- "\xe3\x94\x29\x8d\x29\xb3\x83\xfb\x51\xa8\x7a\x8c\xbd\x7d\x03\x65"
- "\x34\x1d\x19\x09\x83\xdb\x76\x3d\x60\x34\x45\xc3\x18\xd5\x85\x7a"
- "\xc7\xec\x54\x7a\xe7\x7a\xf0\xd0\x5d\x48\xfb\x77\xc0\x7c\x82\x65"
- "\x00\xb2\xea\xf7\xf8\x02\x24\xec\x79\xc9\x8a\x77\x6f\x4c\x19\x19"
- "\x24\xbe\x9f\xc0\xf7\x0c\x5b\xf4\xe6\x6b\x32\x79\x63\x0a\xae\x48"
- "\x4f\x63\xfb\x2d\x81\x75\xb0\xe8\xfd\x6e\x58\xc1\xbc\x71\xb2\x30"
- "\x90\x01\xcf\x21\xad\x8e\x3f\xe0\x39\x01\xf8\x3f\x86\x31\x87\xc4"
- "\x7a\xe4\xdb\x48\xb3\x90\xfe\xb1\x94\x55\x95\x4f\x3e\xab\x3a\xf2"
- "\x98\xbf\x73\xf0\xfc\xbe\x56\xfe\x1d\x86\x87\xfb\x3b\xb5\xfb\x84"
- "\x10\xc3\x3a\xaf\xcb\xe0\xa8\x9f\xc9\x72\x90\x43\x09\x1f\xe5\xc5"
- "\x7a\xf9\x8e\x61\xbe\x8a\xeb\x5c\x5c\xb7\xe0\xfa\x10\xae\x4f\xd8"
- "\xbf\x20\x8b\x3d\x24\xe5\x91\x9f\xe7\xe2\xfa\x30\xae\x93\x71\x5d"
- "\x88\xeb\x58\x5c\xef\x43\x1b\x42\x2c\x17\x18\x47\x79\x8e\xe5\xc7"
- "\xb8\xaa\x78\x8b\xe7\x00\xbd\x79\x4c\x83\x39\xc8\xd3\x25\xe5\x55"
- "\xe9\x97\x24\xd5\x8f\x37\x76\xcb\xb4\x54\x99\x36\x4c\xf1\x83\x4a"
- "\x0b\xe9\x7a\xe8\xfc\x40\x9a\xa6\x9b\x34\x59\xd4\xd2\x14\xfc\x02"
- "\xc0\x77\x33\xae\x42\xc1\x1a\xa2\xfa\x5c\x83\xaf\xca\x19\xe3\xd4"
- "\x99\x10\x59\x27\xae\xbb\xed\xe5\x42\xe0\xea\xe0\x3e\xf2\xd2\xa8"
- "\x26\x21\xf9\x1e\x63\xac\x82\xb7\x58\xcb\x97\xc3\x34\x96\xe5\x65"
- "\x7a\x5a\x7b\x04\x2f\xa5\xf6\x3a\x47\x05\x63\xe4\x28\x1b\xbc\x34"
- "\x91\x79\x86\xe9\xce\x6d\x1b\x69\x93\xe3\xb8\x6c\x8b\x84\x7f\x5e"
- "\xf1\x64\xbd\x36\x6f\x55\xf2\x7b\xd3\xec\x18\xfd\x22\x79\x36\x46"
- "\xde\xbb\x99\xe6\x89\x15\x2c\x07\x37\x61\xfe\xf7\xf6\x18\x69\x33"
- "\xd6\xe4\x3c\xc9\xef\xfd\xe8\x63\xae\x37\xd1\xc6\xed\xb8\x69\xb7"
- "\xfe\x5e\xbe\x4b\xb1\xb9\x99\xbf\x13\x4b\xe5\xbb\x26\x8c\x47\x47"
- "\xf4\x77\x7a\x3d\x89\x65\xf2\x5d\xcb\x00\xdc\xf4\x6c\x0d\x6e\x62"
- "\x3c\x9b\x4f\xb8\xd2\xad\x13\x88\x0c\x77\x38\x68\x88\x27\x78\x82"
- "\x16\x04\x45\x68\x82\x83\xae\xf3\x04\x0f\xd1\xed\x44\x29\x9e\xe0"
- "\x49\xba\x83\x68\xac\x27\xb8\x1b\x36\xc8\x01\x7e\xff\xd1\x78\x4a"
- "\x48\xc0\xd5\x3e\xce\x61\x48\xf0\x04\xcb\x28\xdd\x61\xc4\xb5\x94"
- "\xee\x1f\x22\x7a\x3d\xc1\x7c\xe4\x5b\x4a\x0b\x42\xe2\xfc\xec\x21"
- "\xe2\x2f\x45\x21\x32\xe7\xbf\x20\xec\x9e\x20\xe6\x03\xc1\x16\xa4"
- "\x87\xc5\x82\xd0\x17\xf8\xf5\x8a\xb0\x2b\x3d\x7b\x41\xe8\xbc\x98"
- "\xf5\xc2\x47\x78\xfe\x8b\x40\x1f\x09\x4f\x70\x1a\xb5\xf9\xfd\xc8"
- "\x67\x17\xa2\x3a\xdd\xfa\xe4\x45\x03\xf5\xc1\x86\x08\x57\xa7\x67"
- "\xa3\x2d\xb9\x7d\x68\x07\xc6\xd7\x7b\xfb\x36\xe1\x5a\x93\x3e\x43"
- "\x3e\xbb\xd2\x0b\x84\x39\x3d\x77\x22\x26\x57\xdc\x06\x4f\xb0\x93"
- "\x8a\x30\x3d\x58\xb0\xc1\x27\x18\xff\x91\x5b\x78\x6e\x35\x8d\xd0"
- "\x07\xa6\x05\x1b\xec\x02\xef\x92\x44\x4a\x7a\xae\x27\xd8\x4d\xa8"
- "\xa3\x00\xf0\xe6\x49\x78\xae\x74\x1b\xf2\xfa\x38\x5f\x24\x1c\x86"
- "\xc1\x79\x17\x84\xc8\x84\xfc\xb6\xbe\x94\xf4\x62\xfc\x1c\xf8\x35"
- "\xa1\xec\x6f\x85\x33\xed\x63\x81\xf1\x1e\xe5\xdb\xf1\xec\x0d\x40"
- "\x86\x25\x2d\x43\x34\x0c\xf9\x61\x3b\xd0\x6c\xf0\x1d\xf0\xcd\x20"
- "\x89\x6f\x4d\xba\x08\xa8\x76\x84\xb5\x76\x84\x38\xbd\x07\xb6\x0e"
- "\xf2\x58\x7b\xe4\xbb\x8c\x5b\x50\x6e\x91\x2c\xe7\xca\xb0\x0a\x73"
- "\x46\x76\x00\xf2\x05\xba\x3a\x98\x8e\xa0\xab\x83\x69\x29\xaa\x33"
- "\xac\x9e\xf2\x1d\x24\x52\x32\xb2\xfb\x52\x32\x72\x51\xfe\xe1\x3e"
- "\x69\x83\x64\x14\x07\x24\xec\x8c\x22\xc0\x59\x0c\xbe\x4d\x04\x8c"
- "\x62\xc0\xb2\xf5\x39\xad\xb4\x60\x83\x08\x2c\x08\x6e\x09\x16\x6d"
- "\xa0\xc4\x2c\x72\x00\xdf\x0f\x40\xa3\xa5\x68\x67\x33\xae\xb3\xf1"
- "\x9e\x6e\x40\x5d\x1f\x01\x6e\x31\xd7\x87\x7a\x6c\x80\xf9\x1c\x60"
- "\x2d\x65\x9c\xbe\x70\x92\x19\xcf\x8e\x2f\x14\x7e\x8d\x61\x57\x86"
- "\x3b\x6c\xce\x68\xd2\x79\x88\xf9\x47\xd1\x6d\x37\xcd\xf7\x8b\xa0"
- "\x27\xb8\x9f\xc0\x63\xe6\x36\xff\x49\x7e\x8f\xf9\xcf\x21\xf4\x33"
- "\xf3\x54\x19\xae\x07\x88\xf9\xa7\xcd\xf6\x02\xe7\xfd\x88\x79\x68"
- "\xbe\xcd\xbf\x65\x02\xd9\x12\xf0\x6c\x2f\x0a\x26\xd1\x93\x36\xa3"
- "\x23\xe4\xca\x70\xb5\xd9\xb8\x5f\x4e\xa0\x0c\x97\x2b\x25\x53\x02"
- "\xe6\x00\x09\x22\x68\x2a\xf7\x19\x47\x94\xd8\x45\x9b\x3f\x1f\x79"
- "\x6d\xc4\xed\x61\x3e\xe2\xfc\xf3\xba\x85\x37\x64\x1e\x97\xcb\x6d"
- "\x13\x23\x1d\xd4\xda\x3d\x99\x78\x1e\xd6\xda\x7d\x80\xf9\x34\x2c"
- "\xcc\xe3\x98\x47\xfb\xe6\x75\x3b\x86\x3c\x79\x91\x12\x90\x16\x6a"
- "\x2d\x39\x84\xf7\xcd\xc8\xd7\x22\xf9\x76\xfe\xc5\xa0\x29\x68\xce"
- "\x70\x04\x5d\xe3\xac\xf3\x2f\xf6\x89\xd6\x92\xdd\xf4\x44\xb7\x03"
- "\xb4\x3a\x44\xf3\xce\x06\x13\xdb\x6c\x4b\x91\xa7\x17\xe9\x07\x24"
- "\xff\xcf\x3b\xdb\x23\xe6\xaf\x16\xe7\xe7\x5f\xfc\x8b\x98\x57\x22"
- "\x3e\x2a\x2a\xa7\x91\xd7\x6f\x11\x61\x96\x8b\x96\xce\x43\x74\xfd"
- "\x49\x2f\xb1\x4c\xe4\x2f\x09\x8b\x79\x67\xcf\x8b\x27\x57\x33\x6d"
- "\xa6\x51\x6b\x09\xe4\xa7\x7c\x37\xd3\xbb\xb1\xb5\xe4\x28\xea\x9f"
- "\x0d\xb8\x76\xe1\x29\xdf\x8f\xbc\x6e\xd3\x13\x67\xcd\xd4\xd2\xb9"
- "\x9b\x82\x29\x19\x8e\x50\x75\x86\x2b\x9c\x92\xd1\x14\xae\xce\x70"
- "\x8b\x94\x71\xe6\x60\xf5\x38\x6b\x28\x65\x1c\x78\x60\x9c\x0b\xfd"
- "\x74\x1d\xf7\xf9\x65\x27\x59\xf1\xbc\xeb\x32\xf7\xbf\x6b\x5c\x23"
- "\xda\xea\x86\xcd\x2b\x14\xef\x8f\x6b\xe4\xb5\x05\x94\x75\xf7\xa5"
- "\x8c\x6b\x42\x3e\xb7\x92\xaf\x71\xed\xcc\x97\xc8\x67\x40\x9a\x07"
- "\xf3\x9e\x44\xbc\xf7\xe2\xe7\xeb\x4b\x19\x0f\x3b\x77\x7c\x01\xe0"
- "\xa7\x48\x9e\x72\x8d\x2f\x10\x33\x5c\xb0\xa1\x2f\x02\xce\x78\xdb"
- "\x82\xd0\xbd\x02\x34\x84\x9c\x8c\x2f\x08\x57\x8f\x2f\x16\xa9\xe3"
- "\x5d\x01\xc9\xfb\xe3\xab\x18\x76\xdf\xa6\x4c\x5e\x73\x30\xe2\x7d"
- "\xa3\xa8\xc9\x4c\x0d\x30\xaf\x9a\x33\xcd\x61\x73\xa6\x4d\xb8\x32"
- "\xad\xdf\x7d\x41\xf8\x42\xae\xcc\xdc\xb0\x2b\x33\x3b\x38\x14\xb6"
- "\x79\xf9\x51\x62\xfd\x14\xfc\x50\x80\x06\x9f\x80\x1e\x07\x64\xff"
- "\x7b\xca\x21\x03\x1b\x46\x3b\x5a\xbb\xc1\x0b\xb6\x5f\x4a\xdd\xd4"
- "\xe6\x3f\x21\x69\x2a\x52\x32\xcd\xcc\x53\xdc\xbf\x4f\xda\xc8\x21"
- "\xaa\x33\xad\xe1\xea\xcc\xec\x50\x35\xe0\xa6\xa0\x9e\xd4\x3b\x7e"
- "\x15\x90\xf2\x7a\x07\xf8\xf5\x28\xca\x7c\x42\x8a\xc7\xef\x68\x1a"
- "\x4c\x47\xb2\xae\x62\xfd\xb4\x20\x18\x60\x9e\xf9\x2b\xeb\x35\xa5"
- "\xa7\xa8\x48\xd7\x53\xac\xa3\x78\xbe\xc3\x7a\x2a\xac\xe9\xa9\xb0"
- "\xa6\xa7\xe4\xb3\x19\xba\xc6\x95\x9e\xcb\xfa\x68\x41\xb9\xd2\x33"
- "\x0b\x42\xd9\x02\xbc\x91\x0c\x18\xb9\xaa\x2f\x90\xa7\x26\x7d\x9e"
- "\xcc\x2f\xe9\x94\x6e\x0b\x43\xdf\xe0\xe7\x08\x2b\x7d\xe3\xd6\xf4"
- "\x8d\x41\xd7\x37\x21\x8c\x6b\x90\xa9\x70\x3c\x7d\x13\xd6\xf4\x4d"
- "\x48\x28\x7d\xa3\xe1\x13\xe2\xf4\x90\xa6\x6f\x42\x71\xf4\x0d\xe4"
- "\x99\xdb\x9b\xa8\xe9\x19\x07\xeb\x19\x6e\x2f\x78\x2d\x3b\xac\xf4"
- "\x4c\x01\xe6\x3a\x06\xd6\x33\x21\x94\x09\xeb\x7a\xa6\x57\x96\xb7"
- "\xb1\xae\xe9\x7b\x91\xa0\x3f\xad\xc4\x3a\x46\xea\x93\xe0\xd8\x20"
- "\xeb\x13\xd0\xef\xde\x58\x7d\x02\x78\x0e\xdc\x9b\x35\x3d\xd5\x84"
- "\x99\x6e\x10\xfa\xc4\xb5\xa0\xdc\x8f\xbe\xfe\x14\x73\x7f\xe8\xed"
- "\xf2\x32\x87\xa7\x3c\x48\xd0\x03\x6e\xd1\xe6\x20\xe0\x08\xfe\x0d"
- "\x41\x57\x10\x41\x2e\xcd\x41\xc8\x38\x78\xdc\xda\x66\xfb\x13\x85"
- "\x20\xab\xf3\xba\x7b\x3c\x4f\xfa\x33\xcd\xf3\xce\x0a\x1f\xe8\xe3"
- "\x7d\xd2\xe6\x80\x7e\xc9\xf4\xb5\x76\x7f\x40\xf9\x9d\x22\x9c\x5f"
- "\xec\xb5\x42\x06\xac\xf3\x56\xb8\x4d\x4f\xae\x36\x43\xce\x84\x1b"
- "\x7a\xf1\x7f\xcd\x3b\x6b\x36\x2d\xee\xa4\x6f\xe4\x2f\x11\xe1\x10"
- "\xe4\x0c\xed\x75\xa1\xdd\x8d\xc0\xbd\x09\x32\xe7\x86\x9c\x99\x83"
- "\x31\x72\x06\x99\xd9\x85\x7b\xab\xa2\xdf\x38\x37\xe4\xac\x31\x2c"
- "\xc7\xb3\x4e\x39\xc7\x44\x3d\x6e\x5e\x8b\x83\xac\x35\x86\xab\x95"
- "\xac\x85\x55\xb9\xf6\x30\xd3\xcf\xa0\xc9\x1a\xfa\x02\xef\xbd\xf8"
- "\xf9\x20\x3f\xf1\x65\xcd\x16\x21\x6b\xab\x35\x59\x4b\x51\xb2\x86"
- "\x3e\x4d\x0c\x6d\x52\xf2\xc6\xf0\x79\x1e\xda\x2f\x6f\xa9\x99\x66"
- "\xdc\x27\x28\xde\x91\x32\x87\x71\x25\x33\x17\xf2\x96\x0d\x79\x03"
- "\x3c\xe1\x63\xbd\x09\xde\xfc\x0f\x1e\xeb\xe6\xdb\xc4\x7f\x14\x85"
- "\x46\x3b\x20\x4f\xb9\xd0\x65\x7f\x81\x1e\xfd\x8f\x27\xfd\xd4\x08"
- "\x79\x32\x43\x8e\xac\x90\xa7\x6c\xc8\x15\xcb\x53\x53\x68\x13\xc3"
- "\xbc\xa3\xa9\x1f\x86\x1c\x2b\xa3\xe5\x69\xb0\x75\xd0\x5e\xa7\xb5"
- "\xc2\x4b\xbf\xb1\xb1\xbd\x82\xfb\xed\x5e\x3a\x3a\x5b\xbb\x87\xfd"
- "\xd3\x68\x91\x76\x0c\x64\xd0\x56\x49\x37\x9e\xa1\xb1\x79\xe0\x77"
- "\xc2\x7d\x32\xee\xf3\x17\xdc\xfe\x11\xec\x88\xba\x5a\xd4\xdb\xcb"
- "\x72\x28\x9c\x39\x6c\x9f\xe5\x82\x0f\x93\x44\x6f\x66\x32\xec\xcb"
- "\xd3\xa2\xcf\xc2\x6b\x6d\x26\x3c\x8f\x44\xfb\xd3\x71\x4d\xdd\x7f"
- "\x89\xd2\xf0\xb3\xec\x77\x86\x1d\x6c\x3b\xe1\x3e\x5b\xac\xb7\x0c"
- "\xdf\xb5\x8e\xb2\x4c\x7e\x4a\x6a\x70\x86\x0b\x4d\x5b\xcc\xbc\xe6"
- "\x94\xc6\xf7\xc2\x79\x60\x5a\xc3\x25\x32\xf2\xba\x40\x38\x05\xf5"
- "\x95\x9b\x84\x58\x9b\x49\x0d\x6b\xa0\x1f\x9c\x64\x69\x70\x8a\xa6"
- "\x50\xaf\x94\x49\xab\x8e\x0b\xe3\x06\x3c\x6f\x06\x9e\x8b\x1f\xd9"
- "\x90\x4b\x9f\x94\x53\xdc\xb5\xda\x5e\xe7\xd8\xfe\xf6\x0f\xf2\xbe"
- "\x4e\xa7\xc9\x20\xef\x8f\xea\x74\x1a\x64\x5d\xcf\xc8\x63\x74\x68"
- "\x9d\xf0\x55\x3d\x43\x4c\x0b\x8b\x3d\x28\xfe\x13\x74\x74\x54\x86"
- "\xe8\xe6\x05\x1b\x6e\x11\x9e\x6e\x01\xfe\x3c\x4b\x0d\x78\x5f\x59"
- "\x21\xc2\xe1\x94\x9c\xe3\xa2\x3a\xa7\xb9\x67\x9d\x08\xf2\x5a\x4e"
- "\xaf\xf3\x56\xab\x97\xbe\xe3\x56\x7d\x91\xd1\x28\xe7\x90\xe6\x9c"
- "\x66\xc0\x4a\x61\x58\xad\x28\x1f\xaa\xce\x69\x41\xbe\x3c\x2f\xfd"
- "\xae\x50\xe6\x33\x67\x34\xda\x36\xd2\xd7\xcf\xd0\xad\x92\xc6\xc2"
- "\x95\x73\x92\xf5\x01\xd2\xcc\x48\xdb\x01\xf8\x5e\xe4\x2f\xf7\xd2"
- "\x7b\xbb\x95\x1d\x7b\xeb\x0e\x3d\x1f\xee\x8b\xf9\x3e\x8a\x7f\x12"
- "\xe4\x62\x3a\x60\x59\x07\x36\xab\x12\xb4\xe5\x75\xfd\xcf\x8c\x5f"
- "\x6e\xfc\xd7\x03\xfa\x7c\x9c\x15\xb6\x16\xd9\x37\xd3\x18\xf4\x0f"
- "\xf0\xbb\x2d\x01\xf3\x88\xd3\xc2\x79\x6b\xed\x1b\x1b\x03\x98\x27"
- "\xdc\x96\xec\xa5\x97\x9b\x07\xa3\xa7\x60\x5b\xe7\x92\xe8\xaa\x5a"
- "\xd7\x4f\xcb\xcf\x16\x6c\x08\x0b\xbe\x67\x7d\xd4\x80\x74\xa6\x1b"
- "\xe0\x2c\xd2\x69\x36\x78\xbf\xe4\x74\xa8\x39\xe7\x6d\x87\x85\x53"
- "\x90\xfb\x1b\xbc\xc7\x74\xdb\x7b\x8a\x0e\xe3\x9a\x7a\xa0\x47\x78"
- "\x9d\x18\x73\x33\xff\x5a\x8b\x08\x00\xe6\x41\x2f\x65\x65\x6b\xeb"
- "\x50\x7e\x4f\x70\x0e\xeb\x96\xb8\xe3\x16\xef\x89\x0d\xc0\x4f\x3f"
- "\xd1\x36\x06\x7a\x48\xea\xa6\xd5\xc6\x4a\x85\x77\x80\xe1\xba\x2b"
- "\x2f\x50\x27\xde\xaf\xf5\x8b\x2e\xe1\xb2\x05\x78\x1e\xe1\x5e\x77"
- "\x99\xd3\xfe\x04\xde\x16\xee\x35\x8c\x53\xfa\x9f\xdc\xdf\xb8\x4c"
- "\xa7\xcb\x29\xb1\xa1\x7f\xfd\x27\xdd\xcd\xeb\x3d\x6a\x9d\x2b\x3d"
- "\xd7\x4b\x13\x02\x3a\x5e\x6c\x63\x80\xbe\x4c\xeb\x46\xb6\x35\x78"
- "\xef\x61\x6d\x85\x08\xb0\xcd\x81\xbc\xa5\x7a\x1b\xb8\x7d\xaa\x5d"
- "\xe9\x8e\xc8\x76\xf1\x1e\x95\xa9\x42\xd1\x60\xed\x06\x4a\xb2\x2a"
- "\x5a\x27\x71\x7b\xb9\x2d\xdc\x66\xd9\x16\xa9\x63\x31\x46\x04\x27"
- "\x63\x3e\x26\xd3\xdd\x80\x85\xf9\x4f\x96\xc6\x53\xe9\xb9\xb1\x7c"
- "\xd4\xdf\x8f\xe6\x0c\x1b\xe6\xa0\xdf\xb0\x87\xc5\xa9\xd3\x94\xf1"
- "\xa8\x5a\x3b\xcb\x78\x34\xcc\x76\x76\x80\xf9\x77\xaa\x9b\xc7\x64"
- "\x4f\x05\xeb\x5b\x99\xf7\x06\xe4\xed\x44\x9e\xb9\x5a\xde\xb9\x6a"
- "\xcf\x4e\x5e\x87\xf1\x15\xe3\xd8\x73\x5e\xca\x28\xf6\xc9\xf1\xde"
- "\xe6\xd6\x9f\x31\x77\xc7\xfc\x2f\xc3\x22\xaa\xa7\xba\xe3\xe3\x92"
- "\x69\xe3\xf1\x2c\x74\x49\x74\xa3\x9e\x9b\x98\xa7\xec\x1b\xe8\x6b"
- "\xe0\xcb\xcf\x2a\x37\xd3\x0d\xcc\x4f\x22\x25\xa7\x53\xd1\x3d\xe3"
- "\x90\x70\xc2\xf6\x84\x46\xb5\xad\xa3\xaf\x43\x8e\x4e\x9e\xa1\x8c"
- "\x8f\x8b\x2a\xac\xc0\x95\xa8\xea\x1c\x91\xd4\x41\x29\x39\x5e\x4f"
- "\xf0\x73\x6a\x38\xc7\x6b\x3b\x19\x5e\x9d\x17\x71\xdf\x7d\x35\x7d"
- "\x01\xba\xfa\xd4\xda\xc3\xb8\x47\x79\x9f\xe1\x14\x8d\x9b\xcd\xed"
- "\x55\x7b\x9c\xe3\x26\x8b\x4b\x62\xb1\x50\x63\x1a\x60\x8e\xb3\xe1"
- "\xea\x93\x3f\x27\x15\x6b\xcf\x5e\xe4\x4b\x17\x97\xc2\x9c\xc7\x87"
- "\xb4\x69\xc2\x99\xc0\x32\x71\xb4\xd7\x39\xae\xc4\x4b\x33\x3a\x54"
- "\xdf\x8c\xcb\x61\x58\x83\xe0\xe0\x45\xdf\x12\xf3\x26\x60\xfd\xc1"
- "\x5a\xc9\x6b\x97\xe3\xde\x94\x72\x01\x58\x0d\x06\xa5\xb7\xc3\xc0"
- "\xb5\xde\x19\x2e\x81\x8e\x2e\x09\xd7\x4c\xcf\x93\xf7\xda\x3b\xa1"
- "\x8d\xa3\xf1\xe1\xaf\x36\xba\x47\x33\x8f\x8f\xcf\x52\x70\x6c\x01"
- "\xf7\xe8\x33\xfc\x3c\x81\x9f\xfd\xe6\x19\x79\x9e\xda\x5c\xd4\x7f"
- "\x06\xf5\x8e\xcf\x52\xf3\xf9\xf1\x13\x7a\x50\x47\xaf\x73\x7c\x96"
- "\x97\x26\x19\xd5\x9e\xcb\x8c\xbc\xc1\xf6\x92\x59\x76\x58\xe6\x94"
- "\x4c\x67\x9e\x6d\x6d\x94\xf2\xd7\x0e\x9e\xf7\x69\x7a\x83\xd7\x69"
- "\x92\x4f\x51\x66\x77\xab\x45\xf2\xb7\x41\x18\xc6\xef\x78\x2b\xec"
- "\x33\xf0\xbe\x98\x52\x5f\x99\xdd\x57\xfe\xc6\xbb\xf1\x6b\xc7\xef"
- "\xa4\xf6\xdc\x85\x5f\x10\xf7\xf9\xf8\x9d\x94\xb4\xdb\xb7\x34\xc1"
- "\x8b\x77\x3d\xb0\xd9\xf9\xd9\x4b\xe3\x8f\x8b\x7d\xe9\x06\xd8\x25"
- "\xf2\xbe\xe1\x6b\xbc\x4e\x30\xde\x8f\x3e\xa8\x50\x7d\x91\x29\xd7"
- "\x54\x80\x1b\xd3\x5d\xd8\x6b\x45\xa0\xb9\xd2\xcf\x78\xa7\x37\xd7"
- "\xfa\xc9\x3a\x8e\xdb\x9f\x99\xc9\x6d\xf2\x83\xfe\x7c\x5d\x5b\x2b"
- "\x7c\xc7\xea\x82\xc4\xfb\x73\xbd\xce\x4c\xc8\xff\x8a\x7c\xb5\xe6"
- "\xb0\xda\xca\xf0\x34\x9e\x10\x7a\xfb\x95\x4e\x9b\x91\xc7\x7d\x89"
- "\xe7\xe7\xd1\x76\xd3\x39\xca\x7c\x4f\xa4\x4e\xcf\x3b\x56\x42\xb4"
- "\x1f\x7a\x04\x63\x8d\xdc\x2b\x68\x90\xfe\x01\x99\x18\xff\xc7\x9d"
- "\xd4\xf7\x93\x76\xe2\xfd\x2e\xbc\xc3\xd8\xe3\x6b\x2d\x09\x10\xc3"
- "\x0a\x71\xfb\x50\xfe\x83\xb0\xcf\x88\xb1\x1a\x7d\x3e\x23\xaf\xd2"
- "\x06\x3d\xd3\xaf\xb7\x32\x17\x6f\x3e\x2b\x02\x7a\xfb\x8e\x35\xb2"
- "\x2c\x64\x82\xff\x9f\x2d\x19\x94\xff\xfb\x71\xbe\xe3\xba\x63\xe9"
- "\xaa\xcf\xc2\xa0\x4b\x74\x9f\xdd\x91\xa4\xfa\xeb\xf6\x69\xd1\xfd"
- "\x75\x07\x6c\x9b\xdb\xb7\xe1\x57\x87\xdf\x21\xf5\x1c\xf9\xbb\xdd"
- "\x16\x71\x7f\x14\x3f\xe8\xce\xdb\x31\xfe\x67\x04\x54\x3f\x70\x3a"
- "\xda\xc1\x3c\xf2\x77\x4a\x0a\xf7\x15\x12\xef\xd7\x72\x3a\xf3\x33"
- "\xa7\x87\x61\xcf\x78\xe9\x76\x17\xde\x9b\x59\x56\xab\xc2\x14\xf5"
- "\xde\x83\xda\xdd\x1b\xa1\xab\xe9\xf6\xcf\x18\x96\x69\xcb\xf6\xed"
- "\xcc\xa7\x28\xb3\xdb\x14\xdc\xbe\x1d\xf5\x75\xeb\x74\x45\xda\x09"
- "\x7e\xcf\x3c\xd9\xeb\xbc\xc3\x08\xba\x1c\x94\xfb\xb1\x98\xef\xc5"
- "\xb7\x35\xee\xc8\xec\xb7\xc9\xcc\xe3\x0b\x58\x1f\x75\xd3\x37\x73"
- "\xa0\xb3\xd0\xb7\xd3\x73\xd5\x58\xf3\xcd\xc9\xfc\x0c\x5d\xf9\x19"
- "\xee\xb3\x5b\xa1\x93\x2e\xd7\xe4\xe4\xf5\x19\x68\xd8\x65\x03\xe5"
- "\x06\x6b\xea\x8e\x06\x53\xb3\x16\x79\xba\x0e\x53\x5b\xf0\x57\x64"
- "\x7d\x46\xc2\xb8\xdd\x03\x1e\xb0\x6f\x10\xa1\xb7\x2f\x1f\x34\x7a"
- "\x82\xe7\xdd\x18\x9b\x6f\x39\x43\xdf\x94\xf4\x78\xf9\x14\x46\xfd"
- "\x27\x25\x6c\x8d\x3e\x75\xb5\xbb\x96\x8b\xe0\xae\xd3\xc2\x0f\xfb"
- "\x6e\xf8\xce\xcb\x94\xf5\xfa\x46\xca\xae\xbb\x4c\xe9\xf5\x97\x29"
- "\x53\xfc\x35\xd3\x50\x07\xbb\xed\xc9\x8b\x66\x82\x4e\xe0\xf5\xbb"
- "\xa4\xfa\x8d\x24\x79\x24\x54\x0d\xfb\x2d\x08\xfb\xed\x7c\x26\xeb"
- "\xc6\x7e\xfb\xad\x4f\xda\xc5\x93\xf3\x15\x1f\x4d\xce\x1f\x51\x42"
- "\x09\xc9\xc5\x64\x06\x7e\xf6\x73\x74\xc7\x8a\x64\x0c\x88\xdc\x66"
- "\xaf\xd6\x5e\xd0\xbc\xc2\x54\x42\xc3\x64\x5b\xa1\xaf\x45\xf5\xf4"
- "\xdc\x41\xc7\x61\x03\xf3\x94\x9f\xe5\x86\xdb\xb0\x85\xf7\x8c\x0f"
- "\x8f\x0e\x18\xd7\xd6\x89\x00\xa7\x97\x8d\x15\x01\xa4\x97\x70\xdd"
- "\x4d\x48\xef\x75\x7e\xd3\xe5\x35\x5a\xd3\x06\xe3\x51\xcc\x8f\x34"
- "\xbd\x92\x95\x22\x0c\x0e\xf0\xe8\x78\xd7\xe6\x20\x6c\xef\x73\x2c"
- "\xb3\x59\xe6\x05\xa5\x22\x68\x5d\xc9\xfb\xf7\x59\xc4\xbe\x05\xbc"
- "\xa7\xf8\x16\x6c\x9b\x2f\xf3\x27\xe0\xf1\x82\xe7\x0a\xa6\x52\x07"
- "\xcf\x3d\x5c\x02\xf3\xf3\xaf\xea\xcf\x80\x76\x26\xbf\x32\x8a\xfd"
- "\x6c\xb2\xf2\xbd\x94\x7f\x80\x71\x97\xbe\x34\xd0\x9d\xb0\xb7\x6e"
- "\x00\x5e\xdb\xfd\xa0\x03\xde\x63\xfc\x9f\x5b\xae\xed\xff\xfa\x78"
- "\xef\x15\x69\x18\xff\x1f\x3c\xca\x69\x65\x63\xc9\x52\x66\x15\x5d"
- "\x83\xd9\x4c\xbc\x27\x0d\x78\x37\xa1\xcc\x61\x1d\x0e\xc6\xa9\x9f"
- "\xf7\x18\x1e\x79\x04\x69\xc7\x75\x38\xc8\x73\x23\x9e\x3b\xfa\xf3"
- "\xa8\x32\x5d\x11\x65\x1e\xe9\x31\xdc\xf1\x73\xa4\x05\xa3\xcb\x4c"
- "\x48\x8e\x2e\x33\x61\x4c\x44\x19\x87\xaa\x67\x42\x76\x4c\x99\xdc"
- "\x98\x32\x05\x57\xe2\x36\x61\x69\x4c\x99\xb2\x98\x32\xdb\xae\xc4"
- "\x6d\x42\x6d\x4c\x99\x83\x31\x65\x8e\x44\xd0\x92\xfd\x6a\xb2\x91"
- "\xd6\x12\x53\xe6\x64\x4c\x99\x6e\xfd\x79\x10\x1a\x27\xaf\xdd\x4f"
- "\x16\xf0\x26\xfb\x6e\xf9\x5e\x41\xff\xf4\xec\x7d\xb6\x57\x95\x9d"
- "\x98\x79\x65\xbb\x26\x4e\x8b\xae\x6f\x62\x7e\x74\x7d\x13\x17\x5f"
- "\xd9\xae\x89\xb6\x98\x32\x8e\x98\x32\xae\x88\x32\x8d\x5a\x3d\x07"
- "\x62\xca\x1c\x8e\x29\xd3\x7c\x25\x5f\x4d\xec\x88\x29\xd3\x15\x53"
- "\x26\xf0\x25\xb4\xe0\x71\x5c\xf9\xb5\x8d\x62\x5b\xf9\x3e\xd8\x08"
- "\x93\x96\xb0\x6f\x04\xef\x83\xbe\x71\x39\x30\x84\xf7\xe7\x78\xbc"
- "\x3a\x56\x1e\xc0\xd8\x32\x09\x7a\x36\xc7\xad\x8f\x59\xec\x37\xc2"
- "\x32\xad\x6c\xec\x49\x99\x83\xd9\xa2\xd2\xf7\x4c\xf3\x5f\xe3\xba"
- "\x8e\x8d\xe1\x71\x6a\xd2\xee\x7e\x9b\x58\xf9\xa0\x91\x06\xe7\x6f"
- "\xfa\x3e\x6c\x83\xf2\x47\x49\x60\x9b\xfc\x58\xb9\x2c\x73\x3c\xc2"
- "\x8e\xe6\xfa\xfd\x87\x37\x06\x8c\x31\x78\x1c\xbc\x0a\x1e\xc9\x98"
- "\x03\x74\xb5\x61\xf4\xe2\xfd\xf5\xd6\x3a\xd8\x40\xb0\xfb\x19\xb7"
- "\x53\x94\x9d\x2d\x6d\xb2\x95\x97\x89\xef\x3d\x15\x53\xe5\xfe\xbb"
- "\xb2\x49\xb3\x4b\x9a\x51\x3f\xdb\xee\xcd\xb6\x0b\xec\x23\x85\xf1"
- "\x97\x6d\xb7\xec\x57\x8f\x55\xf8\x80\x57\x76\xb1\xee\xa7\xe2\xa5"
- "\xec\xdd\xd2\xd6\x70\xd9\x78\x7f\xdd\xc7\x3e\x34\xc7\xfc\x53\x38"
- "\x0f\xf8\x7f\x52\xa9\xde\x5e\x8c\xf5\xb0\x1d\xb3\xa7\x5d\x8d\x66"
- "\xaa\x0f\xb3\x8f\x46\xf3\xe4\x10\xf0\x4a\x76\x7b\x74\xbf\x67\x7b"
- "\xa3\xfb\x3d\xdb\x17\xcd\x93\x06\xf0\xe4\x9d\xc6\xe8\x32\x77\xa6"
- "\x45\x97\xb9\x33\x3d\xa2\x8c\x4b\xd5\x73\xe7\x94\x98\x32\x79\x31"
- "\x65\x0a\x23\x9e\xd1\xc6\x3b\x4b\xfa\xe7\x3e\xd2\x07\xea\xce\xf2"
- "\x88\x67\xc3\x6e\xa9\x3f\xef\xdc\xa1\xa7\xf1\xda\x51\xfd\x1e\xe5"
- "\x83\xa3\xc1\x3b\x18\x23\xef\x9c\xff\x68\x0c\x0e\x2d\x31\x38\xf4"
- "\xcb\xbf\xb6\x77\xff\xdb\xd3\x74\xd7\x61\x6d\xef\xbe\x1b\x63\xf6"
- "\x02\x7e\x06\xac\x5a\xe4\x07\x1d\xee\x4a\x8e\x86\x77\xd7\x98\x68"
- "\x78\x77\x65\x45\x3c\x9b\xf1\x3c\x2d\xa2\x0d\xe6\x44\x0b\x25\x80"
- "\x5f\x60\xbf\xdd\xb5\x48\x4f\xe7\x39\x25\xf0\xed\xb2\xcb\xb1\x26"
- "\x97\x7d\xcb\x52\x4f\xd1\x5d\x33\x79\xfe\xa9\xc1\x8c\x94\x7f\x52"
- "\xed\xba\x6b\x77\x0c\x1e\x07\x62\xf0\x38\x1c\xd1\x2e\xbf\x69\x0b"
- "\x3d\x64\x0a\x3e\xfc\x28\xdb\x3e\xec\x4f\x29\x7d\xbc\x36\xc3\x66"
- "\xbb\x48\x66\xf6\xad\x3b\x5d\x46\x89\x9e\xf2\x2e\xcc\xe5\x26\x0f"
- "\x6a\xb3\xf7\xa4\xda\x7c\xca\xb7\x8a\xac\xbd\xce\x6f\xa5\xe9\xfc"
- "\x18\xae\xb1\xf9\xc2\xd5\xd3\x92\x91\x06\xfd\x97\xdd\xa8\xec\xdc"
- "\xef\x14\x0a\x7b\x61\x2d\xe8\x89\x79\x51\xce\x8d\x6a\x1e\xb1\xda"
- "\xc8\x3e\x62\xec\xc7\x8a\x31\x3e\x59\xed\xc3\x7f\x6b\x71\x04\x5f"
- "\xfb\xad\x1b\xef\x15\xa7\x28\x67\x2c\xdb\x00\x2c\xa3\xec\x6b\x76"
- "\x2c\xe8\x23\x9e\x7b\x7b\x82\x67\xa4\xed\x86\xf7\x56\xad\x6c\x6d"
- "\x44\x59\x9f\x36\x37\xee\xe2\x77\x93\x82\x64\x3c\xe6\xf7\x11\xe0"
- "\xa4\x29\x7b\x2f\x67\xec\x31\xc8\x2b\xca\xb4\xe8\x65\x78\x1e\x2d"
- "\xf7\x78\xcb\xc8\x38\xb1\x82\x8c\xee\x8d\xa7\x24\x6c\xdd\x6f\x03"
- "\xb6\x74\xb7\xa7\xa2\x8b\x3c\xfe\x0e\x5e\xeb\x32\x2a\x1f\x9d\x1c"
- "\x6b\x62\x80\x92\x7a\xaa\x6d\x90\x99\x1c\x6b\xa8\xda\xd6\x85\xf9"
- "\x12\x6c\xcc\x6f\xcd\x66\x7d\x13\x49\xbb\x39\x73\x0a\x1e\x5e\x30"
- "\x6f\xc2\xf7\x1f\x9e\xbb\x68\xce\x54\xeb\xa2\x15\xcf\x2d\x5b\x3a"
- "\x61\xd5\xf3\x65\xd6\xf5\x6b\x56\x94\xad\x58\xf9\x03\x6b\x76\x79"
- "\x46\xb9\x75\x49\x99\xba\x66\x96\x2e\x59\x5b\x36\x9d\x6f\xb3\xac"
- "\xb6\x35\xcb\xd6\xc9\xdb\xdb\x87\x53\x34\x90\x15\x65\xcb\xd6\x58"
- "\x33\x96\x66\x59\xef\x5f\xb2\xa2\xf4\xf9\x35\xcb\xe2\xc2\x9a\x6a"
- "\x5d\xb3\x6c\xcd\xb2\x25\x4b\xad\xd3\xad\xd9\x0c\x39\x12\x5c\x44"
- "\x7f\x66\xeb\xe3\x18\x8f\x5f\x55\x4e\xd1\xae\x8d\x67\x5e\xc5\x3f"
- "\x39\xfe\x2b\xc7\xb2\xc9\x49\xd1\x3c\x37\xd9\x12\xcd\x73\x93\x33"
- "\xaf\x1c\xcb\x26\xc7\x8c\x7f\x93\x63\xc6\xbf\xc9\x8b\xaf\x1c\xcb"
- "\x26\xc7\x8c\x7f\x93\x63\xc6\xbf\xc9\xfd\xe3\x1f\x78\xc9\xbb\x55"
- "\xea\x85\xc9\x31\xe3\xdf\xe4\x98\xf1\x6f\x72\x73\xcc\xf3\x89\x88"
- "\xe7\x1b\xf0\xdc\x19\x39\x3e\xe2\xd9\xaf\xcb\xe7\x80\x7e\xb9\x3b"
- "\x49\xcf\xc3\xba\x1e\xba\xb9\x53\xe5\xbd\xdb\x1a\x91\xb7\x4b\xcb"
- "\x9b\xd3\x2f\x7f\xbc\xaf\x8d\x74\x35\x5f\xbf\xfb\x35\xd6\xe9\xec"
- "\x8f\xc7\x63\x13\xe4\xe3\x96\x73\x74\x77\x0a\xc3\x62\x1e\x66\xff"
- "\x4c\xb1\xf7\xf1\xde\x86\x54\x4a\xe2\x32\x0d\x35\xec\xd7\x9b\x93"
- "\xc5\xbe\xba\x48\x63\xdf\x65\xe8\x94\xbb\xd9\xfe\xed\x54\xe3\xc5"
- "\xdd\x5e\x69\xf3\xa3\x8c\x06\x5f\xce\x6b\x00\x87\x7d\x81\x93\xaa"
- "\xd4\x58\xdc\x89\xfb\x64\xe6\x69\x94\x37\x0a\x43\xce\x6a\xf6\x81"
- "\x46\x9a\x19\xbf\x34\xc0\xf3\xea\xf0\xb6\x8d\x8a\x6f\x5b\xc6\xda"
- "\xb9\xfd\xf3\x41\x03\x99\xaa\x9c\xe1\x0e\x4f\x98\x6d\xeb\x6f\xa7"
- "\xa9\xb5\x85\x9c\x12\xe1\xfc\xa8\xb0\x01\xe9\xf1\xe7\x49\xdf\x86"
- "\xfd\xf7\xed\x24\xb5\xde\xf2\x6d\xf4\xff\xbc\x1c\xb5\x76\x9a\x53"
- "\x02\x7d\x7b\x19\x70\x2e\xe2\xda\x87\xeb\xbf\xeb\xf0\xdd\x72\xbe"
- "\xfd\xed\x32\xe1\x4c\x58\xc8\x70\x63\xd2\x77\x40\xbf\x5d\x36\x05"
- "\x1d\x85\x71\xde\x1d\x14\xce\xc4\x87\xe3\xa4\xbb\x61\x33\x5c\x06"
- "\x1e\x7e\xc6\x37\x22\xbd\x43\x38\x47\x2e\xe2\xfc\x5e\xae\x0f\x65"
- "\x06\xb3\xb5\x75\xff\x5b\xe5\xc3\x3f\x25\x3d\xa6\x1d\x5f\x9c\xa6"
- "\x29\x3f\x56\xed\x98\x12\x8a\xae\x7b\xca\xb4\xf8\xed\x98\xb2\x08"
- "\xed\xf8\x22\x7e\x3b\xa6\xd8\x24\x6d\x0d\x68\x8b\xe1\x8a\x77\x3b"
- "\xd0\x96\x2f\x24\xdd\xa3\xd3\x0f\x68\xb6\x90\x1f\xf3\x30\x33\xde"
- "\xc9\xb2\x0b\x2b\x06\xfa\x4d\xcb\xd7\x62\xaa\xa5\x82\x38\x75\x76"
- "\x0a\xe7\xb0\x85\x5e\xba\x47\x9e\x6b\x88\x48\x0f\x2a\x5c\x40\x27"
- "\x03\xd3\x09\xed\x41\xb9\xc1\xfa\x5b\x9f\x97\xa8\xb5\x90\x7b\x20"
- "\xff\x53\x48\x5f\xcb\x5c\x5b\x21\x7c\x3a\x1d\xf1\xae\x24\xe6\x5d"
- "\x20\xe2\xdd\xb6\xa8\x77\x9b\xfb\xd3\xeb\xf4\xf4\xaf\xd6\x4f\xf7"
- "\xb4\xc4\xf4\x13\xfa\x67\xea\x13\xd1\xed\xbe\xe7\xa4\x6a\x1f\xfa"
- "\xe8\x0a\x5a\xdf\x13\x40\x1f\xf5\xc5\xef\xa3\xa9\x69\xf1\x79\x6d"
- "\xaa\x5c\x47\x13\xa9\x14\x07\xde\xd4\x3c\xf4\x5d\x9f\xe4\x41\xad"
- "\x9f\xae\xec\x9f\xa9\xa5\x7a\xff\x7c\xb5\x36\x4e\x6d\x8a\x69\x63"
- "\xe8\x34\x7d\x67\x82\x6a\xeb\x77\x36\xc7\xc0\x3e\x1e\x9f\x17\xa7"
- "\x7a\xd1\xce\xd0\x20\xed\x0c\x0e\xce\x8b\xdf\xb1\xa0\x3d\xa1\x2b"
- "\x79\xf1\x3b\xd9\xaa\x0c\xc5\x2b\x93\x2f\x9c\xf1\xea\xf9\xce\x52"
- "\x7b\x90\xed\xdc\xef\xd4\xf1\xfa\x52\x44\x7a\x45\x34\xff\xa1\x0d"
- "\x5c\x8e\xe9\x17\x54\x7a\x96\xfb\xe1\xb4\x95\x0c\x5f\xc6\x93\xbd"
- "\xce\xef\x9c\x8c\xa1\xd5\xf9\xd3\x34\xed\x89\x1e\x43\xc2\x01\x45"
- "\xaf\xe9\x63\x63\x70\x0a\xc4\xa7\xd7\x34\x33\xe8\x75\x3e\x3e\xbd"
- "\xa6\x65\x0d\x4e\xaf\x69\xdc\xff\xe7\xaf\xa4\xd7\xb4\xe2\x48\x7a"
- "\xc1\xd6\x95\xed\xbb\xcd\x02\xde\xe8\x2b\x12\x0d\xdc\xd6\x10\x99"
- "\x4d\xe0\x15\x55\xa6\x9b\xcb\xec\x36\x05\x14\x9f\xc0\x86\x4c\x3a"
- "\x47\xd3\x2a\x74\xf9\x1f\x59\x4b\xc3\x44\xdf\xe3\xec\x47\x94\xc0"
- "\xe5\x3c\xe5\xe7\xdd\x9e\x60\x36\xf1\xfc\x23\xa6\xde\x8e\xf8\xba"
- "\x60\x9a\x0f\x34\xad\xb9\x32\x7d\x7a\x92\xf2\x23\x9b\x9e\x1b\xad"
- "\x23\xa6\x5b\xa3\xfb\x08\x74\x43\x39\x6d\xdb\xe9\x4b\x7f\x57\xef"
- "\xb3\xe9\xae\x2b\xfb\x6c\xc6\x9d\xaa\xbf\x66\xa4\xc4\xe0\x77\x30"
- "\x7e\x7f\x4d\x77\x0f\xde\x5f\xd3\x4f\x0e\xde\x5f\xd3\x79\xfd\xf4"
- "\xbc\x97\x66\x64\x47\x8f\x1b\x33\xcc\xd1\xed\x45\xbd\x28\x27\x0c"
- "\x43\x6f\xe0\xe7\xaf\xda\x6e\xfd\xc7\x3a\x8e\xfb\x8a\xcf\x15\x01"
- "\xff\xb1\x8c\xe3\xb5\xc2\x18\x14\x36\x68\xe8\xda\x18\x7f\xbf\x95"
- "\xe7\xb8\x6d\xb5\x44\xbc\x8f\x6c\xfd\x06\xdb\xee\xf7\x0e\x09\x1b"
- "\xa8\x03\xf7\x86\xd3\x94\xfb\x87\xb0\xc1\x50\xc1\x7b\x9e\xd2\x6f"
- "\x5d\xae\x21\xdc\x3b\x26\xb2\x2f\x78\xef\x93\xe7\xa6\xbb\xd4\xdc"
- "\xe9\x2f\x28\xff\xa6\xea\x97\xdc\x77\xa2\xe9\x78\x6f\x6e\xfc\x7e"
- "\xb9\xb7\x10\xfd\xf2\x97\xf8\xfd\x72\x6f\xd9\xe0\xfd\x72\xaf\x0b"
- "\xfd\xf2\x97\x2b\xe5\xe8\xde\x83\x9a\x1c\x6d\xe5\x32\xd6\x95\x3c"
- "\x1f\xcf\xfd\x1a\xe7\xc1\x3d\x64\x24\x57\xd2\x64\x42\xb7\x2e\x47"
- "\xb2\xcc\x49\xc0\x92\xf5\xab\x3c\xf7\x76\x68\x30\x22\xe0\xe6\x92"
- "\xa9\x3b\x9e\x9c\xe4\x5a\x38\xef\x44\x1b\x25\x81\x86\x85\xfb\x19"
- "\xc6\x1a\x22\xd4\xf3\x1c\xe7\xe3\xf4\x89\xfe\x48\x39\xc9\xcd\xd3"
- "\xf3\xb1\xae\xd3\xf2\xe6\x8a\xde\x12\xe2\x7c\x31\xb0\xb5\xf6\x0f"
- "\x93\xe3\x08\xe7\xe7\x7c\x31\x79\x6a\x95\x3c\xe6\x9e\x8c\x96\xc7"
- "\xdc\xa6\x68\xfe\x04\xfd\x51\x2e\x0c\x3d\x87\x7b\x23\x70\xf8\xca"
- "\xfc\x75\x75\xd9\x9c\x99\x15\x23\x9b\xe0\x81\x99\xad\x8a\x07\x66"
- "\xfe\x32\x1a\xd7\x99\xb3\xe3\xf3\xc0\xcc\xc5\x83\xf3\xc0\xcc\xf2"
- "\xc1\x79\x60\xe6\x6e\xe6\x01\x2f\xcd\x6c\x89\x96\xcd\x99\x87\xa2"
- "\xdb\x8e\x7a\xa5\x6c\x52\xca\xb5\xc8\x26\x6c\xa1\x1b\x06\x93\x43"
- "\x96\x29\xf6\x1f\x69\xb8\xac\xef\x75\x7c\x25\x9a\x25\x41\xae\x80"
- "\xdf\x7d\xc5\xbc\xa6\x04\x1d\x3f\x85\x69\x58\x2f\xcf\x63\xde\x57"
- "\x16\x49\xc7\x5d\xea\x0c\xa4\x1d\x79\xbf\xe0\x7d\x65\x45\xcf\x59"
- "\x1f\x47\xb7\xff\xbe\xdd\xf1\xe9\x79\xdf\x21\xd0\xd3\x1e\x9f\x9e"
- "\xf7\x1d\x1f\x9c\x9e\xf7\x75\xf2\x19\xa9\x2b\x65\xea\xbe\xa0\x75"
- "\x9d\xb4\x51\x64\x99\x73\x34\xeb\x91\xaf\x36\x3e\xcd\xca\x89\x1e"
- "\x9f\x66\x8d\xb9\xf6\xf1\x69\x56\x79\xfc\xf1\x69\x96\x2b\xfe\xf8"
- "\x34\xeb\xa0\x92\x87\x59\xde\x68\x79\x98\xe5\x8e\xe6\x09\xd0\xee"
- "\x7f\x6c\x7c\x9a\x9d\x1d\x23\x03\x55\xa7\x69\xf6\x3b\xb0\x29\x1c"
- "\xaa\xdf\xe6\x3c\x1f\x8d\xe3\xec\xfc\xf8\xfd\x36\x7b\x29\xfa\xad"
- "\x2a\x7e\xbf\xcd\x76\x0c\xde\x6f\xb3\xeb\xd0\x6f\x55\x57\xf6\xdb"
- "\xec\xc3\xd7\x6e\x53\xcc\xee\x8a\xee\xb3\xd9\xed\xd7\xde\x67\x73"
- "\xb2\xe2\xf7\xd9\x9c\xd9\xf1\xfb\x6c\x8e\xe6\x9b\x3e\x67\x77\x74"
- "\x9f\xcd\x29\x8b\xee\x33\xd0\xed\xbf\xd9\x67\xe8\x9f\x52\xe5\x9f"
- "\x30\xe7\x22\xe6\xed\xc3\x7a\x9d\x73\xba\xbd\x74\xff\x61\x35\xb7"
- "\xbe\x5f\x8d\x1d\xaa\x0f\xdf\x46\x1e\xef\x95\xe3\xc0\xfd\x49\x5a"
- "\xda\xf7\xaf\xec\x87\xfb\xd3\xa1\xa3\xbb\x9b\x2b\xe4\xde\x96\xea"
- "\x43\xa6\x39\xf2\xb9\x37\xf2\xfe\xd4\xfd\xb3\xb9\x2c\xfa\x58\x78"
- "\x02\x41\x62\xbd\x8e\xfc\x7e\x86\xc3\x67\x43\x63\x60\xd9\xae\x65"
- "\x8c\xbf\x8a\x4f\x4d\xa9\xbb\xf2\x2e\xc0\x7b\xe0\x05\xc5\xab\xf7"
- "\xc7\xda\xbf\x0d\x78\xf7\xa8\xe2\xd3\xb9\x19\x31\x38\xf8\xe3\xf3"
- "\xe9\x03\xc9\x68\x43\x43\x7c\x3e\x7d\x20\x73\x70\x3e\x7d\x00\xfd"
- "\x4f\x0d\x11\x73\x9f\xd4\x27\x83\xde\x98\xb9\xcf\x03\x25\x26\xbf"
- "\xe2\x1d\x69\x13\x55\xe7\x94\xf6\x3a\x1f\x88\xb5\xff\xd0\x37\x79"
- "\x23\x34\x9c\x87\xc4\x94\x1f\xc4\xfe\x7b\x80\xed\xbf\xb7\x07\xc1"
- "\xf9\x2a\xf6\xdf\x03\x6c\xff\xbd\x7d\xa5\x6c\xe5\x69\xf6\x5f\xbc"
- "\x39\x5e\x5e\x56\xfc\xfe\xcf\x8b\xe9\x7f\x2a\x2c\xc3\x7c\x58\x96"
- "\x8f\xce\x57\x1a\x99\x8f\x7d\x93\x38\x2f\xf3\x48\x9c\xbc\xb5\xb1"
- "\x30\x07\xc9\xe7\xbe\x82\xf7\xd8\x97\x2a\x2e\xef\xe5\x69\x67\x4a"
- "\xe6\xce\x8e\x96\xc7\xb9\xc6\x68\x79\x7c\xe0\x60\x74\xb9\xb9\xe9"
- "\xd1\xef\xef\xf7\xff\xcf\xe9\xd8\xb9\xbb\x63\x78\xe0\xa3\xd3\xf4"
- "\x60\x8a\xe2\x81\x07\x57\xc4\xe0\x71\x28\x3e\x0f\xcc\x6d\x46\xfb"
- "\x3f\x8a\xcf\x03\x73\xbd\x83\xf3\xc0\xdc\x20\x68\xf9\x51\x24\xdf"
- "\x2e\xac\xc8\x1d\x16\x9d\xe7\x41\x6b\x7c\x9d\xf7\xe0\x94\xf8\x6b"
- "\x04\x0f\x16\x28\x1a\x3f\xb8\x3d\x9a\xc6\x0f\x96\x44\xd3\x10\x6d"
- "\xf9\xef\xd3\xb0\x3f\x1e\x44\xaf\xf3\xc1\x58\xf9\xf7\x9c\xa6\xef"
- "\x6a\xf2\x9f\xff\x50\x0c\x8e\x7e\x85\x4b\xbc\x75\x91\xef\xf2\xfc"
- "\xd7\x13\x9f\x96\xdf\xcd\x8a\xdf\xe6\xef\xce\xc6\x18\xe4\x09\x5f"
- "\x21\x4b\xdf\x5d\x8c\xf4\x85\xbc\x1e\xca\xeb\x21\xf5\x48\x5f\x18"
- "\xa4\x24\x39\x5e\xf5\x8f\x4b\xdf\x75\xb0\x2f\x0a\xd3\x9f\xf9\xd7"
- "\x34\x86\x0a\x78\x0c\x62\xbc\x8a\x2a\xa4\xdf\x82\x69\x1b\xf3\xfa"
- "\xad\xcc\xeb\xdf\x95\xf6\x1f\xef\xb3\xb0\x1f\xa1\xa9\x9c\x0a\x38"
- "\x2e\x85\xce\xef\x9c\x3f\x06\xf6\x49\x96\x0b\xce\xaf\xe7\x55\xeb"
- "\x66\x8e\x18\xdd\x94\x6f\x8c\xdf\xc7\xf9\x63\x06\xe7\x9d\xfc\x29"
- "\xaa\x9f\xf3\x4b\xa3\xfb\x39\xbf\x20\xec\x1c\xb9\x88\xdb\x0a\x1e"
- "\xb8\x26\x39\x29\xb3\x8a\xb8\x7e\x5c\x52\xdf\x6f\x7d\xbc\xc3\x56"
- "\x49\xdf\x38\x43\xf9\x27\x64\x7d\x06\x11\x30\x6d\x49\xa0\x66\xa9"
- "\x03\xe6\xdd\x2e\xf1\x44\x9e\xa2\x20\x19\xc4\xd6\x67\x3b\xf8\x5d"
- "\x83\x53\x04\x90\xaf\x9d\xf7\x04\xf8\x6c\x35\x78\xe1\x86\x53\x94"
- "\x7f\x36\xaa\x3c\x24\xdf\xa3\x60\x64\x36\x48\x79\x9c\x97\xae\xaf"
- "\xe9\x6e\xc3\x73\xfc\x75\xdf\x79\x79\xba\xef\x83\xf2\x19\x9b\x37"
- "\xe8\xfe\x25\xe3\xc4\x67\x65\x18\xa7\xab\xeb\x81\x79\x75\x3a\xff"
- "\x2a\x5f\xcb\x79\x87\x06\x7c\xf9\xe6\x1d\xc1\xbb\xe2\xab\xac\x0d"
- "\x46\xc8\xc1\xbc\xce\x48\x38\x2a\x26\xca\xbc\x80\xee\x8f\xd7\xeb"
- "\x9c\x6f\xfc\x12\x58\x1a\x3e\xf3\xb3\xa2\xf1\x99\x3f\x0d\x76\x4a"
- "\x9a\x06\x23\xef\x6a\x30\xb8\xcf\x15\xcf\x32\x3f\xcc\x2f\xbe\xda"
- "\x9a\x5f\xa2\x85\x0a\x5e\xb9\x82\xb7\xe6\x4b\x7b\x89\x61\x7c\x09"
- "\x8e\xed\x51\x73\x0b\xb9\x77\xcf\x7b\x5b\x0b\xf6\x2b\xb9\x5f\x10"
- "\xb3\x46\x38\xbf\x5b\xfa\x53\x69\x72\xff\x64\x30\x56\x0e\x16\x24"
- "\xeb\x63\x74\x4c\x7a\xba\x2e\xf7\x98\xd7\x32\xdc\x98\x75\xd6\x05"
- "\xb3\x95\x2c\x2c\xa8\x0b\xa7\x44\xce\xd7\x16\x48\xfb\x4f\x5f\x2f"
- "\xc5\xfb\xd9\x31\xe5\x62\xd6\xff\xe6\x77\x8b\xc1\xd7\xe9\x93\xd1"
- "\xbf\x7e\xde\xdb\x52\xb1\x1a\x16\xb4\xc4\xac\x57\xf8\x76\xc9\xf3"
- "\xf7\x7f\x06\xdc\x02\x4d\xef\x3d\x34\x33\xa6\xbe\x6e\xfb\xd9\xab"
- "\xb5\xbf\x60\x90\xf6\x17\x0c\xb4\x7f\xa5\x84\x1b\xb3\x96\x58\x20"
- "\xdb\x1f\xba\x42\xff\x15\xb0\x0f\xa9\x4e\x37\xd8\xdc\x05\xef\xe9"
- "\xb6\x3a\xaf\x1f\x0c\x6e\xab\x17\x0c\xac\xff\xa9\x72\x03\xeb\x7f"
- "\xbe\x78\xb6\xba\x97\xe4\xde\x6a\x74\xdd\x1d\xa6\xba\xb8\x6d\x19"
- "\x64\xfd\xef\x21\x6d\xfd\xef\xa1\xe2\x68\x7d\xf6\x90\x35\xba\x0f"
- "\x0b\x62\xfa\xf0\xa1\xdc\xe8\x3e\x5c\xd0\xfd\x5f\x1d\xd7\xf0\x4c"
- "\x89\x89\x89\x86\xc4\x04\x43\x42\x22\x5e\xa3\x89\x34\x2c\xd1\x98"
- "\x38\x04\xbf\xa1\xda\x75\x98\x21\xd1\x60\xc4\x6f\x88\x76\x1d\x1a"
- "\xf3\x3c\x8c\xcb\xe2\x67\xd4\xae\x43\x62\x9e\x87\x7e\xc9\xfb\x61"
- "\x5a\xbd\x7a\xfd\xc6\x98\xe7\x21\x5f\xf2\x7e\xe8\x7f\xb3\x3c\x5d"
- "\xf1\x1c\xed\x87\x36\x77\xe5\xba\x25\xa5\x2b\x96\xca\xfd\xe2\x65"
- "\xd6\x25\x4f\x3f\xbd\x6c\xed\x5a\x6b\xd9\x2a\xeb\x7d\x33\x1f\xbe"
- "\x6b\xaa\x55\x6d\x3b\x97\x4e\xcf\x58\x3a\x9c\xe6\xad\x5f\xc3\x2f"
- "\xe6\x2d\x9c\x5b\x68\x2d\xb8\x6f\x66\xf4\x4b\x1d\x8c\xdc\x5e\xbe"
- "\x1a\x94\x08\xf9\xcb\x7d\x69\x14\xd1\x8e\x3d\x52\xf7\x74\xb2\x9f"
- "\xaf\x5a\xf3\xf8\xfe\xc7\x2d\xec\x3f\x7a\xd9\x2e\xdc\xb7\xf2\x9e"
- "\xfe\xc2\x65\xdc\x88\x09\x8d\x0e\xb2\x3d\xc5\xe7\x57\x16\x6e\x11"
- "\x1f\xfa\xc8\xfa\x20\x19\x4e\xd1\xe2\x3f\x34\xe7\x21\x2f\x9e\x3d"
- "\xde\x20\x59\xed\x94\x84\xf2\xab\xf1\x2e\x41\xcc\x08\x23\xcd\xaf"
- "\xf9\x42\x7f\x6f\x8b\x4c\xfb\xd0\xa1\xe7\x33\x9d\xa6\x45\x19\xe2"
- "\x43\x21\x9f\xf9\x7c\x90\xca\xb7\xf0\x0b\x61\x78\xf8\x08\xeb\x86"
- "\xba\x54\x32\xf2\x5e\xe8\x6b\xa9\x94\xf4\xda\x28\x8e\x59\xb2\xb0"
- "\x5b\xdf\x0b\x7d\x09\xcf\x5e\x5a\xdc\xce\x75\x73\xde\xb0\xe1\xe1"
- "\x53\x9c\xbf\x3e\x2a\xff\xa2\x31\x03\x7b\xb1\x0b\xbb\x0d\xc8\xb7"
- "\xe0\x33\x32\x99\x42\xe2\xef\x81\xd4\xac\xbc\x89\x79\x94\xe0\x41"
- "\x57\xb4\x04\x1d\xa4\x7c\x7e\x16\x2d\xdb\x10\x12\x41\xf6\x4f\x9f"
- "\xd7\x6d\x17\x55\xcf\x91\x11\x32\x9d\xe0\x5e\xc3\x3e\x0a\x8b\xf2"
- "\x1b\x96\x91\x11\xed\x1f\x73\x86\x1e\xa9\xb0\xce\x27\xb2\xcf\x23"
- "\xe3\xef\xcb\xd9\xdf\x30\xe7\xf4\xae\x3f\x92\xf1\x17\x97\x1d\x86"
- "\xcb\xc2\x42\x15\x65\xa2\x4b\x70\x1c\x23\xbf\x08\xb0\x8f\x7f\x4b"
- "\x71\x88\xf3\xfc\x5b\xaf\xdd\x42\x6d\x65\x7e\xda\x7c\x52\x04\xb6"
- "\xff\x51\x9d\x0d\x68\xed\xf6\xb3\xff\x62\xd2\xe6\x79\x94\x78\xba"
- "\x90\x0c\xad\x25\xb5\xe4\x59\xec\xa7\x8a\x93\xa2\xab\xa5\xf8\x73"
- "\x6a\x2b\x69\xa2\xa2\x0e\x32\xb4\x74\x7e\x4a\x32\x16\x4f\x4d\x5d"
- "\x53\xe5\x45\xb2\x6c\x5e\xc1\x69\x17\x69\xe3\x66\x1a\xb1\xf1\x4f"
- "\x64\xf2\x74\x75\xa0\x9e\xb3\xf4\xd8\x09\x4a\x00\x3c\xc3\xa6\x4f"
- "\xc9\xb2\xe9\x51\xf6\xf3\xcd\xa5\xba\x4a\xb2\x08\x7b\x66\xf2\x65"
- "\x7b\xa6\xf9\xb2\xc8\x4c\xed\xb5\x67\xa6\xb5\xd9\x90\xbf\xf3\x03"
- "\x1a\xd9\x41\x69\x1f\x9e\xe9\x30\xd4\x5e\xa0\x31\xdc\xa6\xd3\x68"
- "\x5b\xdd\x05\xe4\xaf\x59\x93\x1d\x46\xd9\xc8\x32\xc1\x94\x35\x79"
- "\x9e\xc2\x00\x85\x01\xab\xf6\x32\x8d\xa9\xbb\x4c\x96\x70\xf5\x9a"
- "\x6c\x2e\xd7\x4d\xdf\xdb\xe0\x69\x21\xaa\xd8\x2c\x42\x7d\x35\x39"
- "\x79\xd0\x89\xc3\xde\x7e\xea\x88\xd1\xd3\xd2\x4d\xad\xfe\xcb\xd4"
- "\x46\x7f\x26\x4f\xf9\x5f\xdd\xbf\x78\xea\x08\xaf\x59\x27\xb8\x37"
- "\x76\xa2\x2e\xc5\x3b\xf6\x56\x3e\xab\xec\xa0\xaa\x4a\x4a\xb6\x6d"
- "\xa4\x61\x67\x90\xae\xe6\xf6\xe3\x0b\x3c\xc1\xbf\xba\x37\x4a\x7f"
- "\xdc\xc5\xed\x95\xad\x94\xd8\xe6\xaf\x65\xbf\x4f\x43\x28\xb5\xae"
- "\xc9\xe3\x6f\x27\x8f\xed\x2f\xee\xb0\xb9\xae\x76\x47\x98\x92\x7e"
- "\x79\xa9\xdd\xe0\x31\x5e\x22\x4f\xa1\x9f\x3e\x42\xdd\xa2\xa6\xee"
- "\x28\xf4\x56\x6e\x9b\x3f\xc0\xe7\x9d\xb2\x45\x8f\x65\x78\xd5\x1a"
- "\xca\xaa\xbf\x40\xe9\xfb\x2f\x50\xa6\xe8\xcd\x34\xb0\x8f\x2d\x9f"
- "\x4d\xdd\x8f\x6b\x72\x27\x25\xa1\xed\xca\x1f\x3b\x45\xf3\xb5\xed"
- "\xcb\xa4\x86\xcb\x03\xbe\xb6\x97\x7b\x06\x7c\x6d\xc1\x53\x3e\xf6"
- "\xb7\xf5\xd2\x23\xdb\x4c\x2d\x34\x0c\x72\x72\x90\xf9\xbb\xea\x1c"
- "\x19\xb7\x9e\x23\x9a\xe8\x30\x90\x75\x39\x9f\xb3\xf8\xfe\x32\x0f"
- "\xfa\x86\xef\x4f\xd1\xf7\xc7\xe0\x9a\x8c\x5f\x02\xd2\x65\xfc\x86"
- "\x4e\x8d\x8f\x91\x66\x40\xda\x10\x5c\x13\x21\x2f\x21\x7b\x9d\xf0"
- "\xa1\xae\xc6\x1e\x03\x0d\x67\x7e\xd6\xfc\x7b\x1b\x7b\x9d\xdf\xf3"
- "\x7b\xe9\xb9\x6e\x9d\xaf\x95\x8e\x5f\xe8\xfb\xe8\xd4\x59\x8e\x97"
- "\xe5\x93\x78\xf5\x95\x24\x70\xec\x2c\x2d\x9d\x71\x78\x82\xeb\x45"
- "\xfd\xb9\xb8\x9a\xf0\x83\x9c\x7e\xef\x84\x5e\xb6\xa7\xaf\x04\x75"
- "\x7e\xff\x11\xa4\x0b\x3d\x1d\xed\x36\xf2\xbb\x77\x4f\x9d\x35\xa8"
- "\x3c\x99\x06\xc0\x0c\x68\xf0\x21\xfb\x0b\x77\xb3\x8c\xf7\x18\x4c"
- "\xe2\x58\x71\x0e\xd5\xed\x11\x2d\xfb\xf7\x88\x66\x25\x7b\xdf\xaf"
- "\xf5\xd2\x2a\x17\xe3\x88\x71\xbc\x79\x07\xde\x1d\xc3\xa8\xc3\x74"
- "\x69\x5e\xca\xfe\x64\xdf\x87\xfd\x77\xfd\xd1\xc8\x36\x08\xe7\x43"
- "\xb5\x3c\x96\xbe\x55\x79\x7c\x08\x74\x40\x6d\x5b\x67\x37\xfd\xe2"
- "\x72\xd7\x10\xfb\xef\xc8\xe0\x09\x9e\xa2\x49\x69\x64\x61\x7b\xb0"
- "\x61\x8f\xf0\xbe\xc2\xf1\xf9\xf6\x88\x6e\xf0\xcb\xcd\x67\xa8\x70"
- "\xc8\x37\xd3\x28\xed\x5f\xcb\x49\xd3\x4f\x85\x37\x47\xe8\xa7\x37"
- "\x5b\xbd\x47\x22\x74\xd3\xe2\x47\xae\xd4\x4d\x8f\x3f\xa4\x74\x13"
- "\x64\x5f\xea\xa2\x90\x57\x4b\x9f\x1e\x93\xae\xf9\x89\x3c\x3e\x36"
- "\x26\x3d\xa0\xa5\x8f\x88\x49\xf7\xa9\xf4\xc7\xe6\xe9\xba\xaf\x8d"
- "\xf1\x58\xcf\xba\xef\xb1\x3b\x59\xf7\xb5\x15\x6b\xba\x4f\xea\x9f"
- "\xc7\x6e\x14\xff\x04\x5d\xb4\x8e\xf5\xcd\xa3\x67\x19\x7f\xf1\x21"
- "\xe9\xb8\x5f\x87\xb4\x5f\x72\x9a\xeb\xcf\x64\xc4\x4f\xd7\x7b\x82"
- "\xf5\x1e\xeb\x3c\xd6\x7d\xfb\x46\x89\x8e\x7d\x7b\xc4\x89\x3a\x19"
- "\xfb\xe7\xd1\x7e\xfd\xf7\x32\xd2\x76\x20\xed\x65\xbc\x67\x3d\xc8"
- "\x34\x69\x2d\x3c\x42\xec\x7f\x02\x5b\xab\x33\x6c\xc8\xa6\x5d\xe8"
- "\x6f\x3e\x6f\xb8\x0d\xf4\x35\x25\x90\xcd\x53\xc6\x67\x58\x43\xec"
- "\x93\xd6\xd9\x56\xd6\xc9\x72\x37\x6a\x2b\xe4\xcc\x53\xfe\x39\x55"
- "\xfa\xc5\x19\x3e\x77\xc7\x38\x14\x6d\x78\x90\xe3\x25\x25\x34\x63"
- "\x36\xcc\x7e\xe1\xac\xb3\x81\x8b\xd1\x05\x9c\x54\x7c\x96\x47\x0f"
- "\x78\xe9\x80\x43\xf5\xf5\xe2\x76\x8e\xcb\x76\x8a\x0a\xbb\x30\xdf"
- "\x0b\x70\xdb\x4c\x21\x07\xf1\x39\x18\x8e\x55\xc8\xd7\x7d\x86\x70"
- "\x89\x4b\x3f\x0b\xe3\x84\x6e\x40\x1e\x4f\x47\x80\x18\x67\x2f\x3d"
- "\x9a\xd3\x5a\x71\x84\xcb\x77\x30\x6d\x84\xd3\xae\xc3\x48\x90\x30"
- "\x0c\x72\xde\x58\x82\x7c\x6a\xed\x3c\x35\x27\xaf\x75\xb1\x8f\x58"
- "\xef\x7b\xba\x00\xa3\xe2\x94\x82\x01\x58\x02\x63\x40\xd4\x3b\x0d"
- "\xfe\x88\xcd\xe2\xef\x80\x7f\x80\xfb\x8b\xcf\x45\xf2\x7e\x1b\xe8"
- "\x92\xcc\xbe\xf2\xca\x16\x7d\x74\x42\xc3\x9f\x89\xb4\xb3\x9d\xe0"
- "\xb7\x47\xb3\xf8\xdc\x12\x9f\xe7\xbc\xda\x59\x4e\xd0\x28\x5d\x3f"
- "\xcf\x19\x5e\xff\x3f\x7b\x96\x13\xb0\x2d\xf5\x06\xd1\x04\xfc\xb3"
- "\xf8\x3c\x27\xf0\xdf\xc1\x7c\xa8\xb5\x29\xfb\xd5\xc7\x24\xcd\xcb"
- "\x38\x0d\x73\xc7\xe3\x7a\xff\x73\x7b\xb9\x2d\x78\x57\xa8\x6c\x44"
- "\x81\xf9\xc7\xe3\xd9\xfc\x1e\x69\xb3\x39\xff\x24\xe8\x31\x0f\xc6"
- "\xb0\xb7\x4f\x85\x0c\x55\x1b\xc9\xa8\x74\xda\xe2\xb9\x5c\x5e\xe9"
- "\xb4\xc5\x34\xa0\xd3\x1e\xbf\xa8\x74\x9a\xa2\xb1\xd2\x69\x8f\xff"
- "\x4d\xe9\xb4\xc7\x3f\x93\xfb\x62\xd0\x69\xfc\x8e\xf5\x9a\xae\xd3"
- "\xf6\x8f\x12\xc7\x59\x77\xf4\x3a\x1f\x6f\xd7\x75\xdb\x4e\xa4\xb1"
- "\xee\x60\x1c\x95\x9e\x7a\x2c\x53\xfc\x7f\x99\xa4\xfc\x0e\xf8\xbe"
- "\x84\xcf\x2f\x74\x69\xf7\x3c\x9e\xcc\x54\x3a\x6e\x71\xfa\x80\x8e"
- "\x7b\xfc\xe0\x40\x59\xd6\x71\x8b\xef\x51\x3a\x4e\xa5\x37\x3c\xc6"
- "\x3a\xee\xb1\x4c\xa6\x81\x06\xdf\xc0\x6b\x78\x5a\x7e\xa6\x63\x76"
- "\xa4\x8e\x8b\x96\xaf\xc5\x15\xba\x8e\x63\xdd\x86\xe7\x1d\xd0\x69"
- "\x72\x0e\xc9\x72\xb6\x1b\x34\xd7\xe5\x8e\xfb\x80\xdb\xcc\xf1\xd7"
- "\x98\x6e\xb3\xce\xd2\x30\xed\xec\x90\xd6\xee\xc5\xc7\x75\xdf\x47"
- "\xd0\xbf\x3d\x9e\x1d\x3d\x10\x23\x91\x6e\xe1\xb3\xf3\x1e\xc7\x29"
- "\xf2\xd4\x0a\x47\x5b\xf0\x24\x15\x95\x41\x57\x24\x3e\xfb\x19\xf7"
- "\x2d\xe6\x1d\xdf\xe1\x2b\xeb\x9e\x33\xf4\xc4\x88\x22\x3f\x0d\xc5"
- "\x5c\xfd\xb3\x2a\x03\xde\x95\x47\xbd\x93\x6b\x0c\x13\xd7\x70\x7c"
- "\x3d\x08\xc2\x20\xf3\xfd\x6b\xac\x6f\xf3\x55\xea\x7b\x4d\xd6\x07"
- "\x9b\x0a\x73\xa0\x94\x73\xf4\x84\x9c\x97\xc8\xf8\x36\x5b\xe3\xc2"
- "\xfa\x9d\xf6\x7e\xc8\x20\xef\xff\x76\xf5\xf2\x4f\x5e\x77\xf5\xf2"
- "\x4f\xde\xce\xba\x08\xed\x33\x85\x9c\xd1\x70\x46\x06\xf5\x7c\x67"
- "\x38\xdf\x43\xda\x5a\xcc\x67\xf6\xb1\x72\x8e\x66\xd1\x61\x32\xff"
- "\xed\x42\x3e\x19\x33\x04\xba\x72\xf6\x06\xe2\x78\x2d\x91\x65\x77"
- "\x0e\xd0\xf8\xc9\xdc\xab\xac\xfb\x25\x7b\x6a\x49\xc6\x8c\x3d\x06"
- "\x9b\x94\x63\x1a\xed\xee\x5f\xff\x78\xb2\x13\x7a\xd3\x1b\xe1\x17"
- "\xcb\xf3\xb1\x5b\x38\xae\x01\xdb\x97\x55\x6a\xbe\x79\x13\xf4\x73"
- "\x2a\x9f\x87\xe1\xb3\x31\x45\xa1\x02\xc3\x31\x19\xcb\xac\xc8\xaa"
- "\x97\x1d\x6c\x9d\x85\xeb\xd5\xea\x64\x1f\x53\x3f\xca\x2c\xd2\xcb"
- "\x30\x6c\xf6\x53\xc4\xb8\x7c\x8b\x3c\x53\x1a\xec\x66\x5d\x78\x13"
- "\x6c\xd1\x54\x55\x4f\x31\x69\xf5\x6c\xf7\xd2\x13\x05\x57\x3b\x9b"
- "\x31\x78\xfb\x8a\x9a\xaf\xbd\x7d\xa4\xb5\xaf\x98\xbe\xa4\x7d\x57"
- "\xa9\xb7\x78\xda\xb5\xd7\x6b\xd6\xeb\x2d\xbf\x76\xba\x16\x1f\xfa"
- "\xea\x74\xcd\xd6\xe8\x5a\xec\xfd\x12\xba\xc6\xa9\x67\x49\xda\x57"
- "\xaf\xc7\xaa\xd5\xb3\x24\x2f\x5e\x3d\x24\xff\x06\x3d\x37\x95\xa4"
- "\xc7\xda\xec\x81\xec\xa8\x58\x75\x4b\x5c\x91\xf1\x8b\x7b\xa4\x5c"
- "\x2d\x39\xd0\x1f\x2f\x59\xed\x95\x43\x57\x2f\xf9\xb8\xa8\x91\xc7"
- "\x77\x11\xf6\xd2\x92\x66\x8e\xe3\x3a\x7b\xb3\x3a\x93\xad\x95\xe9"
- "\xb8\x5a\xdc\x64\x8e\xd1\xc5\x31\xf9\x3c\x16\xb4\xbd\x96\x63\x97"
- "\xac\xe6\x33\x15\x1c\xaf\x15\x3a\xfe\xa9\x9b\x39\xe6\x18\xee\x87"
- "\xe1\x3e\x53\xe9\x80\xa7\x32\x51\xcf\xe0\x67\x27\x6b\x56\x5b\x0f"
- "\x54\x66\x0f\x19\xcc\xbf\x1e\xe5\x61\x53\xac\x96\x6b\x53\xe1\xd4"
- "\x19\x85\x98\x4b\x68\xf1\xfe\x96\x7e\x2e\x63\xc0\xd9\x0b\xf9\x3c"
- "\x09\xc6\xc5\xa5\x23\xb4\x73\x00\xa0\x87\x03\x74\x7d\xaa\x51\xa7"
- "\x87\x9e\x8e\xb4\xc3\x3a\x3d\x60\xdf\x24\x7b\x1a\x83\x7c\x4e\xc7"
- "\xaf\xce\x64\x3f\xf5\xef\xa2\x7a\xb5\x45\xc1\x7e\x5a\xed\xd1\x70"
- "\x7d\x7d\x85\x46\x39\x6f\xaa\xe4\x79\xd3\xd3\x47\x7d\x29\xab\x2d"
- "\x3a\x1e\x62\xad\xc5\xc0\x67\xbf\x27\x61\x2c\xdd\xa5\x62\xee\x25"
- "\xf0\x39\x39\xf9\x7e\x6d\xa6\x41\xd1\xe4\xe9\xe9\xa2\x87\x63\xc7"
- "\x48\xd8\xc9\xc0\xb3\x93\xe1\x7a\x71\xf5\x6d\xca\xe4\xb8\x17\x5a"
- "\x7b\x9e\xce\x08\xd7\xcc\x28\x0c\xf7\x5a\x0c\x3a\xbe\xf5\xf2\x4c"
- "\xeb\xd3\x68\x7f\xb1\x8a\x13\x2b\xf1\xb1\x18\xd8\x9f\x3f\x9c\xba"
- "\xda\x2a\x36\x59\xe8\xf0\x9a\x2e\x39\x6f\xe2\x3a\x27\xa1\x7e\xc1"
- "\xf3\x24\xd8\x26\x28\xd7\xd8\x4f\x37\xc0\x15\xbd\x3a\xdd\x9e\xce"
- "\x57\xe3\xb2\x6a\xa3\x7f\x93\xc5\x70\xcc\x27\xcf\xdb\x51\xba\xd5"
- "\xfe\x85\x8a\x85\xfd\xf4\x49\x9d\x76\xfd\x38\x01\x1f\xce\xa3\xfc"
- "\x9b\x9e\x0e\xea\x38\x49\xd9\x4d\xe5\xf3\xbb\x4f\xf9\xf8\xdc\x90"
- "\xa2\xff\xb1\xe4\x5e\xe7\x52\xeb\x95\xf4\x5f\x9a\x13\x41\xff\x44"
- "\xe6\x3d\xa6\x3f\xaf\x75\x80\x2e\x4f\x80\x96\x49\xea\xbc\x03\xdb"
- "\x33\x4b\x97\xe1\x39\x99\xf1\x0c\x57\xeb\x34\x2f\x34\xaa\x75\xb2"
- "\xa5\xb5\x11\xfd\x80\xf6\x5a\xd8\x56\x4b\xd0\xdb\xcf\x65\x98\x06"
- "\x1c\x57\x92\xeb\x06\x3e\xd7\xa3\xee\xa6\xd8\x36\x6d\x55\x67\x49"
- "\x48\xf9\x96\x2c\x6d\x8f\x88\x2d\xee\x2b\xb3\x8a\x80\x3a\x97\xbc"
- "\xb4\xfc\x70\xa5\xcf\x38\x98\x0e\x60\x1e\x94\x31\x2a\x0d\x72\x5d"
- "\x01\x36\xd7\xf2\x4f\x04\x70\x53\x7d\xbf\x7c\xbf\x4a\x5b\xf6\x37"
- "\x5c\xc1\x63\xcb\x66\x0a\xd4\xed\xb3\xcb\x18\x2b\x68\xdb\x72\x2f"
- "\xf3\x9c\xce\x67\xbc\x0e\xa9\x7c\xc6\x97\xbd\xc9\x3a\x45\xa7\x39"
- "\xf0\x1f\xde\xeb\x5c\x66\xd3\xf1\xd7\xf3\x73\xdf\x71\x1e\xde\xb3"
- "\x69\xb6\x06\xa4\xae\x55\x67\x86\x96\xd5\xe9\x32\xcc\x75\x70\x3f"
- "\xb3\xae\x61\x7a\x28\x5a\x2c\x3b\x1a\x0d\xcb\x62\x50\x71\x33\x99"
- "\xe7\x21\x8f\x1b\x03\x43\x90\xc7\x3b\x00\x63\xd9\x62\xf5\xae\x1f"
- "\x4f\xf6\xf3\x97\xbe\x78\xaa\x3f\x96\xcf\xe5\x76\x0d\xe0\xcb\xf2"
- "\xb7\xbc\xbf\xff\xf9\x9d\xdf\x6e\xe1\x18\xbc\x52\xc7\x94\x8d\x65"
- "\x7c\x7d\x1c\xdb\x56\xf2\x3a\xe0\xbb\x18\x77\xce\xa3\xf7\xd9\x00"
- "\x2f\x2e\x2f\x89\x84\x23\xec\x12\x57\x09\x47\xe9\x0e\x1f\xef\x6d"
- "\x5b\xd5\x7e\xcb\xf2\xdd\x11\xed\x4e\xd6\xf1\x19\xd0\x09\xcb\x0f"
- "\xc7\xf2\x24\xd7\xcd\xb1\xf8\x34\xd8\xac\x4b\xcc\xa7\x68\x79\xa3"
- "\x86\x97\xec\xc7\xc1\xc6\x37\x8e\x73\xc9\xb1\x4f\x5f\x51\x3a\x04"
- "\xfd\x5c\x32\xf6\x15\x75\x8e\xc8\xaf\xe2\x9f\xfe\x20\x43\x18\x7e"
- "\xcc\xb4\xe2\xf5\x74\x9f\x8c\xd7\x21\xcf\x98\xff\x80\xf7\xf8\xc5"
- "\x48\xdb\x8f\x65\xac\x5b\xcd\x37\xd0\xd7\x6c\x0b\xca\x58\x7e\xf6"
- "\x32\x3e\x73\x1b\xe4\xb9\x9e\xf4\x7d\x3b\x56\x16\xa4\x85\x01\x96"
- "\x89\x1f\x94\xf1\x59\x7a\x15\x47\xfc\x07\x0e\xfd\xfc\x3c\xc7\xce"
- "\xe4\xb8\xaf\xd0\x43\x89\x03\x71\x5b\x4b\x0a\xd9\xc6\xd2\xfa\x97"
- "\x76\x19\x44\xbb\x92\xff\x1f\xfc\x8e\xcf\xcb\xab\x7d\xac\x53\xd0"
- "\x09\x89\x7f\x3d\x45\x3f\xf8\x4c\xad\xfb\xe8\x3a\xaa\xe4\x51\xde"
- "\xcb\xf2\x6a\x30\x50\x57\x37\xe4\xbb\xe0\x4a\x5d\xf2\x83\xdf\xe9"
- "\x73\x17\x3e\x7f\xa7\xf6\xc5\x06\xe0\x79\xe9\x07\x72\x2e\x38\xd0"
- "\x07\xbf\x05\xac\x92\x29\x57\xea\x85\x92\x7c\x5d\xf6\x6c\xb7\xf2"
- "\x19\xee\x1f\x98\xb9\xfe\xc1\xc6\x0b\x61\x7f\x94\xfb\x29\xe9\xb4"
- "\x35\x7e\xdf\xc4\xdf\x67\x2b\x69\xd2\xdb\xa0\xd3\x44\xb5\x61\xc5"
- "\x75\x3d\xa9\x39\x65\x03\x6d\x5f\x21\x6d\xd7\x88\xf7\x33\x23\x68"
- "\xc3\xcf\xb9\x6a\x5c\x5b\x01\xfa\x2c\xd5\x62\xd5\xaa\x34\xc8\xce"
- "\xd7\xc5\xa6\x42\x52\x38\xae\x20\x5d\xd6\x91\x37\xcb\x4b\x17\x2d"
- "\x6a\xbf\x6b\x05\xda\x5f\xb2\x5d\x95\x2b\x39\xc1\xb8\xc4\x6d\x67"
- "\x34\x8e\x47\xd8\xd6\x50\x31\x15\x56\xbc\xcf\xf8\x5a\xc7\x71\x1f"
- "\xaf\x78\x41\xea\x70\x8e\xaf\xd0\x57\x32\xc4\xdf\x97\x49\x3d\x7d"
- "\x25\xd0\x0b\x99\x06\xd4\x03\xfd\xdf\xe3\xd7\xea\x3c\xa4\xe3\xca"
- "\xb8\xc9\xf8\x9c\x62\x45\x7c\xfa\x72\xbd\x32\xe6\x53\xc9\x30\xfc"
- "\x92\xf0\x1b\xfa\x55\xed\x12\xd8\xe9\x5d\xbe\xea\xa9\x81\xf0\x3a"
- "\x71\x9c\xe3\x8b\x61\x2e\xd2\x55\x05\xfe\x1d\xb9\xc5\x0d\xdb\xfc"
- "\x09\x43\xd1\x06\xca\xc5\x9c\x99\xc4\x25\x31\xa5\x3e\x8c\xeb\x3a"
- "\x91\xc3\x71\xc6\xf1\x9c\xad\x3d\x67\xf1\x73\xcf\x3a\xb1\xb8\xd7"
- "\xf9\x4c\xb1\xbe\x47\xa8\x62\xe3\x3c\x63\xeb\x8f\x27\x94\xf8\x38"
- "\x9f\x27\xe2\xb8\x53\x61\xcc\x85\xba\xb8\xde\x22\x9e\xcf\xa2\x3e"
- "\xe4\xab\x85\xbd\x21\xd7\x5e\x7c\x89\x77\xa4\xe2\x97\x39\xc8\x5e"
- "\x6a\x17\xe3\xd5\x93\x32\x35\xa0\xe3\x3a\xd2\x9f\x6b\xf8\x8a\xb8"
- "\x05\x75\xdc\x90\x7e\xbc\x4a\xa5\x07\x39\xfe\x21\xfb\x3a\xf6\x3a"
- "\x9f\x1d\xa3\xe3\xaa\xe3\xc0\xf5\xf1\xf9\x4d\x91\x9a\xe3\xe0\xd8"
- "\x33\x5c\x1f\xc7\x53\x45\xde\x3c\x1d\xdf\xaf\xca\xcb\x95\x75\x42"
- "\xf0\xf8\xc9\xfa\xd7\x3a\x9a\xa8\xcd\xcf\x3a\xe5\xd9\xba\x63\x75"
- "\x7e\x5e\xef\x76\xa2\x8e\x2d\x3d\xa2\x84\xc2\x7d\x25\x71\xfb\x98"
- "\xcb\x20\x7f\x87\xd4\x0f\x35\x39\x5b\xc2\x22\x0f\x7a\x02\xe5\xfa"
- "\xf2\x78\xad\x09\x72\x5b\x6a\x6c\xae\xe8\xe2\x33\x97\xd0\x39\xa5"
- "\x46\xe4\x71\xb0\x9d\x85\xf9\x56\x40\x7e\xbf\x02\xba\xc9\xbd\x2e"
- "\x07\x30\x4a\x87\x18\xcb\xc9\xd8\x1c\x13\xa7\x6a\x30\xfe\xe8\x31"
- "\xcf\x70\xf5\xd4\xcc\x28\xe9\x75\x96\xc2\xfe\x7f\x6e\xd0\x3d\xdf"
- "\xad\xa3\x40\x4f\xe4\x73\x8d\xe6\xf9\x5e\x69\xc9\xd5\xf2\xea\xfb"
- "\xd5\xac\x83\x26\x59\x28\x59\xa4\xcc\x70\xb1\xbe\xed\x49\x9d\x51"
- "\xc2\x63\x09\xca\x1f\xd4\xcb\xf3\xb8\xce\x63\x07\xfa\xcb\x52\xd5"
- "\xaf\x0f\x4b\xdb\x95\x3c\x97\xb6\xeb\x32\x1a\xaf\x9e\xb2\x03\x22"
- "\x6c\xcf\x20\x83\x07\xe3\xd6\xc4\x00\x25\xd7\xbf\x4e\xe4\xda\x28"
- "\x02\xaf\x6c\xc4\x1c\x66\x34\x7f\xef\xa2\x34\x8f\x65\x94\xf9\x7b"
- "\x17\xf8\x25\x11\xb8\xbc\x72\x09\x75\x56\xaa\x7c\x9a\xdf\xba\x05"
- "\xf9\xca\x70\x4d\x13\x06\x03\xed\xae\xa4\xa4\xdd\x61\x32\xba\x2a"
- "\x69\x0c\xd2\x60\xeb\x3e\xb7\x48\x97\xd9\x78\x38\x54\xd5\x13\xd5"
- "\xa0\xde\x2d\x95\x22\xf8\x5b\x8c\xe7\xce\xb0\x08\x7c\x15\xba\xa3"
- "\xfd\x87\x55\x1b\x9f\x3b\xac\xdb\x84\xb8\x77\x47\xfb\x1d\x3c\x77"
- "\xc5\x19\xef\xa7\x56\xad\x2a\x2b\x5a\xb3\x8c\x2f\x99\x19\xcf\xdf"
- "\x3e\x3c\x72\x2d\x84\xc7\x3f\x15\xa7\xe2\xb9\x0e\x5e\x77\x7c\x25"
- "\x55\xdf\x47\x5f\x69\xd1\xd7\x3e\x35\x7f\xfd\x7b\x79\x4e\xc7\x73"
- "\x1f\xbc\xcb\xf9\xb8\x62\x33\x83\x49\xf8\x2c\x89\x0c\xb1\xf5\x2d"
- "\x5f\x52\xb6\xa4\x74\x2a\xef\x98\x0d\x8f\x53\xcf\xca\xbc\x98\x7a"
- "\x1c\xfd\xf5\xa8\xf1\xc7\x6f\xe0\x7c\xd5\xef\x16\x88\x94\xbd\x3e"
- "\x75\x56\x7a\xe5\x01\x7d\x4d\x6b\x10\x3f\x47\x77\xa8\x66\x8d\x8d"
- "\xe5\xc1\xbe\x99\x0c\xef\x6e\xec\x30\xb0\x1d\x59\x89\x7b\x5e\x5b"
- "\x90\x6b\x64\x5a\xbc\xa8\x0f\x2f\x74\x60\x7c\x5f\x19\x10\xd5\x39"
- "\xa0\xdb\xca\x41\xd7\x6c\x22\x7d\x44\xd8\xa7\xb0\x93\x56\x99\xaf"
- "\xe6\x73\xc4\xf9\xb9\x3d\xcc\xb3\x31\xe5\x5e\x50\x7d\xb6\x0a\xfc"
- "\x5f\x6a\xed\x3f\xcf\xab\xe5\xa9\x1a\xa5\xc7\xe1\x5a\xb5\x78\x50"
- "\x7f\x11\xd7\x8c\x5a\xc5\xe3\xab\x3e\x69\xc6\x7c\x0d\xed\xfc\xe1"
- "\x29\x5a\xf5\xb1\xd1\x02\x1b\x61\x34\xfd\x14\xf7\x9f\x70\x59\x7e"
- "\x17\xc5\x47\x37\x9f\x6d\x34\x42\xbb\x40\xcb\x24\x08\xf5\x47\x46"
- "\xed\x26\x11\x3f\x83\x48\x90\xbb\xa9\x89\xe8\xc1\x61\x43\x8d\x64"
- "\x1a\x99\x9c\x74\xcb\x37\xc6\x58\xee\x9d\x31\x6d\x8a\xbd\xb2\x02"
- "\x5a\x39\x18\x30\x89\xc8\xf8\x69\x7b\x6b\x1f\xb9\xdd\x41\xd2\x9f"
- "\xa6\x7a\x6f\x6d\x3c\x5c\x77\x3a\x85\x8d\xcf\xae\x87\x53\xdf\x72"
- "\xdb\x9f\x27\xc3\xdb\x97\xbd\x06\x8e\xd1\xcc\xf6\x33\x7f\xeb\xe2"
- "\x14\xd9\x1e\xfa\x08\x69\xa0\x57\xb9\x70\xbd\xe5\x56\x76\xa7\xad"
- "\x3a\x5c\xf3\x96\x7b\x00\xbe\x91\x18\xbe\xfd\x35\x32\x1c\xa8\xec"
- "\x32\x78\x8c\x33\xc8\x63\xf5\xd3\x47\xb8\x8f\xdb\x57\xa8\x93\x6d"
- "\x59\x86\xd1\xe0\x0c\x6f\xb7\x7f\x41\x06\xed\xfc\xa9\xe1\x1c\xd9"
- "\x7e\xd7\x34\x48\x39\x3e\xef\xdd\x93\x3a\xf5\xc3\x5e\xe7\x6a\xa3"
- "\x97\xee\x9b\xad\xd9\x32\x18\x73\x57\x63\xfe\xbf\x4a\xc6\x79\xc2"
- "\xfb\x0f\xf8\xbb\x30\x48\xcb\xd4\xf3\xc4\xed\xa3\x1f\xf1\x1a\xbc"
- "\x70\x33\x1f\x88\x4b\x7f\xeb\xe2\xb3\x2d\x83\xf8\xc1\x0c\xf3\x94"
- "\xdf\xc5\x7b\x91\x43\x46\x42\xff\xd8\x2f\x8a\xbe\x90\x93\xd2\x20"
- "\x4e\x86\x90\x81\x6e\x09\x5e\x12\x85\xad\xdd\x17\x64\x4c\x53\xd6"
- "\x35\x6f\x2d\xff\xad\xc1\x13\x38\xef\xf6\x6c\x0b\x53\x1b\xec\x4a"
- "\x4f\xdd\x79\xb7\x8a\x7d\x1a\xa2\x56\xfa\x33\xb5\x96\xff\x6f\x87"
- "\xc7\xf1\x67\xa4\x0b\x19\x0b\xbb\xef\x92\x58\xe4\x31\xfe\x1b\xf1"
- "\x77\x8a\x78\x8c\x03\xdd\xad\xe7\x68\xf5\xdf\x3f\x04\x9c\xb7\xff"
- "\x03\xb0\x64\xcc\xb4\xe9\xf4\x11\xee\xd1\xa6\xfe\xf1\x2f\x6e\xac"
- "\x99\x04\xf7\x4e\x53\xf9\x13\x86\x30\xc6\x52\x8e\x6d\x87\x31\x34"
- "\x87\xdb\x85\xe7\x6c\x7e\xc6\x35\x8b\xaf\xa6\x2d\xee\xfd\xa6\xe0"
- "\x13\x3c\xb6\x16\xf2\xb8\x89\xf4\x45\x0d\x97\xe4\x58\x5b\xa0\x3d"
- "\xe7\x6b\xcf\x79\xda\xf3\x6c\xed\x39\x57\x7b\xe6\x75\x79\x6d\x4c"
- "\x5e\xe3\xea\xb7\x17\x0c\xc3\xda\xf1\xdc\xa8\xf7\x05\xf0\x19\x61"
- "\x2a\xdf\x2c\xc7\x76\x0d\x8f\x1c\x0d\xaf\x6c\xed\x59\xc7\xe7\x66"
- "\x53\x70\xf3\xff\x10\x3e\x6b\xad\xd1\xf8\xac\xcd\x8e\xc0\x87\x4c"
- "\xe5\xb9\x5f\x05\x1f\xb3\x89\xbf\x13\xf1\xdf\xc0\x87\x71\xe1\x34"
- "\xd4\xdf\x14\x83\x8f\x5b\xc7\x27\x2e\xbf\xad\x13\x5d\x6c\xd7\xac"
- "\xfd\x9a\x8c\xeb\x3c\x8c\x6d\x96\x86\xcb\x7a\x9c\xc2\xb5\xc1\xab"
- "\xc5\x29\x84\x2c\x60\xdc\x2e\x43\xfb\xd7\xb6\x68\xf6\xdb\x51\x65"
- "\xe7\x97\xe5\xe8\xbe\x63\x68\xeb\xc1\x2a\xd5\xd6\x43\xdb\x38\x56"
- "\xdf\x06\xfa\xba\xbd\x5c\x74\x61\xde\xfd\x9f\x3c\x37\x8c\x84\x5b"
- "\x5a\xb6\x76\xed\x73\x53\xad\xa5\x4b\x56\x2e\xb3\x66\x2c\xb5\xae"
- "\x2d\x59\xb1\xbc\x6c\x59\xb4\x3f\x85\x59\xfb\x7e\x8f\x3c\x27\xc2"
- "\x73\x29\x39\x97\x06\xff\x4b\x3d\x29\x7d\xf2\xca\x2e\x0a\x67\x59"
- "\x31\xeb\xdc\xfa\x1a\xf5\x9d\x27\xe0\xd3\xac\x8f\x21\xfa\xfc\x97"
- "\xc7\x10\xa4\x9f\xc4\x38\xb9\x38\x22\x9d\xf3\xfa\xf4\x34\x86\xaf"
- "\xe9\xa6\x61\xa7\xa8\xac\x9a\xeb\x8c\x4b\xc3\x4b\xa2\x11\x76\x13"
- "\x7f\xc3\xc2\x00\x9d\x22\x38\xee\x16\x9f\xbf\x44\x39\x71\x9a\x9e"
- "\x97\xf3\x8a\x45\x78\x56\x73\x36\x01\x1c\x9f\x7f\x04\x65\x0e\x20"
- "\xcd\xc8\x36\x04\xe6\x81\x5d\x5c\x0e\xe9\xcf\x71\x1c\x0c\xa4\x27"
- "\x69\xf1\xc4\x38\x6d\x0b\xc7\xa9\x40\x9a\x39\x22\xed\x55\xa4\x59"
- "\x90\x66\xd5\xe0\xbd\xc9\x74\xc6\x73\xae\xb6\x4e\xc6\x79\xde\xd7"
- "\xea\x75\x44\xe2\xcc\xdf\x70\xb9\x6b\x62\xb6\x75\xd1\xc2\xbb\xa7"
- "\xcf\x78\x7a\xd5\xca\xe5\xc3\x49\x92\x3d\x13\xc3\x71\xf6\x5d\xe5"
- "\xb7\x4f\xb5\xda\x96\x2d\x5b\x63\x5d\xbf\x6c\x65\x99\x75\xc9\xfa"
- "\x25\x1b\x86\xd3\xf2\x55\x6b\x9e\xe6\x28\x0b\xdc\x2d\x6b\x8b\x9e"
- "\x5e\xfe\x03\x76\x7a\x51\xb9\x87\x47\xd9\x09\x8b\x58\xb7\x69\x71"
- "\x49\x8e\x57\xb1\x0d\x99\x72\x6f\x31\xee\x39\x5e\x97\x05\xd7\x66"
- "\xfc\x8e\xe2\x77\x04\xbf\x13\xf8\xb5\x9f\xa1\x4d\xdb\x70\x3d\xdc"
- "\xeb\x5c\xb7\x54\xb7\x57\x06\x78\x68\x5d\xb9\xce\x43\xb0\x2f\x0e"
- "\xab\xf1\x6d\xdd\xc1\xb6\xa0\x94\x9f\x7e\x9e\xaa\xba\x34\xc0\x53"
- "\x1c\x6f\xb4\x8d\x7d\xba\xd6\xe1\xfd\x65\xb9\x56\xc9\x6b\x26\xd7"
- "\x31\xdd\x4e\xd3\x86\xfd\x0d\x7b\x44\x0b\xc7\xca\xc1\xb5\x19\xfc"
- "\xd2\xa2\xe2\xd3\xac\x4f\x47\xbe\xb1\xa8\xe3\xa8\xaa\x43\x7b\x1e"
- "\x25\x8e\xf3\x37\x5c\x4e\x69\xcf\x0c\x0b\x30\x26\xf3\x3d\x5f\xb5"
- "\xbd\x53\x93\xf6\x8d\x37\xc3\xc0\xbb\xf5\xad\x5a\x1d\x1c\x4f\xdb"
- "\x51\xef\x94\x73\x29\x39\x77\xe6\x35\x62\x53\xc2\xbd\x02\xf8\x9c"
- "\x0f\x27\x3e\xde\x21\xe3\x5f\x3a\x2e\x43\x47\x7c\xeb\x5b\x9e\x72"
- "\x99\x3f\x81\xd7\x90\xe7\xdb\x44\x98\xe3\x90\x87\x13\x9f\xed\xe0"
- "\x72\xc2\x7c\x6f\x71\x78\xd7\x88\x5c\x65\x33\x70\xdc\xc1\xf5\x07"
- "\x35\x98\x01\xa6\xed\x19\x5a\xf7\xa8\x9a\x87\x6f\xda\xa6\x6c\x89"
- "\xf5\x87\x75\x5f\x4b\xc8\x68\x26\x9e\x9b\x75\x1d\xe0\xa5\xf5\x2e"
- "\xcd\x2f\xce\xad\xb5\x3f\xa8\x3d\x1f\xd1\x70\x4c\xe0\x58\x28\xc0"
- "\xbf\x9d\xfb\x0e\xf6\xca\x11\xdc\x9f\x00\x7d\x5a\x14\x7d\xca\x65"
- "\x9c\x03\xd8\x4d\xfc\xfe\x04\x7f\xef\x06\xef\x4e\xa8\x38\x23\xeb"
- "\x73\xb8\xcd\x03\xbe\xb3\x75\xb9\xc0\x75\x32\xef\x31\x43\x96\x8e"
- "\x78\x2e\xb1\x7c\xae\xcf\x06\xbc\x26\x5d\xef\xb0\x9e\x29\x0a\x41"
- "\x4e\xe5\x7c\xaa\xbc\x54\xd7\x37\x03\x7c\x50\xee\x88\xa7\x4b\xe2"
- "\xf5\xbb\xa2\x7f\xf9\xdf\x84\xf3\xf9\x66\xe0\xd4\x24\xfb\x80\xe3"
- "\xb1\x5e\xea\x9f\xb7\xf5\x29\x1d\x59\x7e\xa2\x7f\x8e\xa9\xe1\xc1"
- "\xb1\xdd\xbd\x8c\xdb\x65\xb9\xef\xaf\xe9\x8d\xf2\xa0\xae\x37\x74"
- "\x38\xa6\x04\x11\x36\x95\xe3\x9f\x6b\x72\x31\xef\x91\xf0\x78\x29"
- "\xed\x11\xc0\x19\x79\x51\x9d\x81\x0b\x57\x4f\xc6\x9c\xb6\xfc\x30"
- "\x7f\xf3\x4d\xda\xb4\xce\xe7\xff\xf7\x80\x2e\xda\x50\x10\x09\x53"
- "\x98\x27\x17\x33\x5c\xd6\x47\x6c\x93\x14\x85\x8c\x1c\x87\xa6\x58"
- "\x1b\x5f\xa0\x83\x37\x38\x74\x5c\x41\xc3\xe3\x3a\xbe\xda\x37\xc7"
- "\x8e\xa3\x1e\xef\x82\x50\x1f\xfb\x82\x37\xab\xfe\xdc\x24\xf5\x0d"
- "\xde\x1d\x42\xd9\xa3\x5e\x7a\xde\xac\xc9\x50\x0b\xca\x1f\x3a\x56"
- "\x39\x1b\x79\x36\x74\x68\xfe\xcc\xed\xe8\xdf\x13\x03\xbc\xbf\xae"
- "\x35\x62\x9d\xe7\x84\xea\xc3\x19\x8e\x53\xb4\xd1\x12\x91\xae\xf5"
- "\xed\xb1\x02\xa4\xb7\xaa\x35\x93\xc9\x56\x55\x7e\xa3\xf2\x5d\xd5"
- "\x70\x64\x5d\xc0\xe7\xf5\x58\xc6\x25\xed\x65\x1f\x6f\x2c\xd0\xc7"
- "\x0b\xc0\x3a\x2c\x69\x3e\x4a\x1c\x65\x3a\xa9\x78\x1f\xcf\x5f\x52"
- "\x74\xda\x58\x1e\x45\x7b\x1e\x37\x51\x0f\xd3\x69\xe4\x16\x11\x1e"
- "\xe9\x4f\x10\x45\x1b\x8c\xc4\xf2\xc2\x32\xce\x7b\x83\xe0\x0f\x69"
- "\x57\x29\xba\x6d\x3c\xa2\xd3\x4d\xef\x3b\xa6\x93\x97\x36\x66\x32"
- "\x6d\xa3\xdb\x38\xac\xfd\x94\xde\x76\xd0\x94\x63\x9a\xe2\xb9\x45"
- "\x93\x8b\x16\xf7\x68\xf6\x1d\x59\xf7\x87\x63\xc6\xbb\xe9\x58\x79"
- "\x0e\x29\xda\x6e\xb2\x78\xa9\xac\x3c\x62\x5e\x72\x9c\xe9\xcb\xb2"
- "\x02\x3c\x17\x6b\xb1\xb7\x8e\x2b\x3f\xa6\x75\x2d\xa2\x7a\xf2\x62"
- "\x29\xcb\xeb\x64\x8c\x14\x8e\xdb\xdb\xce\x34\x62\xbd\xc8\xb2\xc4"
- "\x32\xc0\xf2\xa4\x68\xb4\xa9\x2c\x82\x46\xcd\x4c\x1f\x8d\x4e\x87"
- "\x63\x74\xf9\x32\x6b\xe9\x74\xa5\x8b\xad\x99\x19\x4b\x27\xc9\x40"
- "\x37\xd6\xfb\x67\x4d\xb5\x16\x4c\xcf\x28\x2f\xc9\x9a\xaf\x2e\xb3"
- "\x0a\xf2\xf9\x3a\x3c\x7a\x5e\x67\x45\x3d\x27\xa3\xe7\x86\x5b\x4a"
- "\x94\xfe\xd8\xe4\xf7\x26\x98\x25\xdf\x70\xdc\xd9\xaa\x95\x44\x21"
- "\xe0\xbd\xeb\x0c\xfa\xd4\x9c\xc3\x71\x9e\xdd\x0b\xca\x89\xe3\xa2"
- "\x7f\xd1\x80\x77\xf5\x48\x1f\x69\xe3\xef\x23\xfc\x45\x84\x53\x72"
- "\xe4\x7a\x9f\xa8\xce\x70\xfb\x52\xf6\xd6\xe2\x57\xec\x4b\x99\xda"
- "\x3e\xe7\x76\xbb\xe8\x75\x56\xe4\xeb\xed\xe2\xb5\x1d\xcc\xcb\x82"
- "\x0b\xca\x45\x88\x69\x54\x54\xce\xb1\xc8\x01\x3b\x91\xd7\x76\x2a"
- "\xd0\x7e\x5b\x93\x9a\xbf\x56\x80\xff\xd7\x69\xf6\x0c\x15\xe0\x19"
- "\xf6\xdf\xdd\x72\x8d\x2b\xec\xb4\xc8\x18\xe6\xe1\xad\x77\x3c\x8c"
- "\xf9\x40\xb1\x0e\x13\xb0\x86\x2a\xbf\x07\x05\xef\xab\xfa\xd5\x86"
- "\x6b\xee\x4e\x36\x25\xa8\xb8\x90\x90\x71\x47\x83\x21\x5c\xd8\xef"
- "\x27\x83\x77\x23\xb7\x98\xd9\x8f\xa6\x10\xbc\xe7\xe0\x3c\xfa\xbb"
- "\x2a\x67\xd8\x5b\x65\x08\x07\xd0\x8f\x66\x65\x3f\x77\xb3\xfe\xc4"
- "\xdc\x75\xf3\x34\x7d\x5c\x93\xe3\xa1\x81\x1c\x6a\x3e\xb3\xf9\x09"
- "\x2e\x77\xc1\x69\x24\xe8\xec\x96\x5b\xd3\xe4\x1c\x25\x10\x76\x26"
- "\x90\xf2\x65\xde\x7c\xa7\xae\x63\x79\xbf\xd4\xb4\x45\xf8\x78\x8d"
- "\xd8\x14\x14\x3e\x19\x6b\x9f\xc7\x0e\x3a\x43\x9e\x8a\x5e\x87\x47"
- "\x7e\x83\x93\xbf\x2b\xe2\xd7\xc6\x8d\x90\x1a\x37\x50\xbf\x2f\xf1"
- "\x8e\x62\x8c\x0f\x09\x67\x08\xb6\x2e\xf0\x67\xda\xf0\x5e\x4b\x18"
- "\xb4\xf2\xf0\x38\xc9\xf4\x49\xe5\xf8\x31\x66\x3e\xe3\x51\x68\x0a"
- "\xa2\xcd\x91\xed\x32\x84\xbd\xbb\x9c\x68\x97\x01\xed\x2a\x3f\xcb"
- "\x32\x13\x60\xdf\x24\xc8\xdb\x28\x19\xcf\x5a\xce\xcf\x2b\xad\x91"
- "\x6d\x64\xfd\xaf\xda\x50\x39\x33\x5e\x1b\x85\x81\xdb\xc8\x34\xa8"
- "\xbc\x51\x93\x37\x89\x27\xeb\x8f\x6e\xda\x7c\x62\xe4\x16\xf6\x09"
- "\xca\x09\x42\xbf\xcd\xe2\x3e\xc4\xf8\xe9\x62\x3c\xe3\xf5\x17\xc3"
- "\xd3\x60\x79\x4d\x5b\x1c\xc5\xc0\xe5\x50\x7c\x7a\x57\xb6\x5e\x9d"
- "\xde\x95\x3f\xe6\xf2\x8c\x07\xef\xef\x98\x82\x06\xe8\xe0\xbd\xc5"
- "\x98\xaf\x6d\x8f\x57\xef\xc8\x2d\x8d\x8c\x57\xdc\x77\x82\xe5\x45"
- "\xd3\x41\xe0\x43\x01\x39\x11\xac\x93\x7a\x9d\xf6\x3c\x5d\x1f\x99"
- "\x12\xac\x89\x52\x3f\x18\x84\x2b\x1e\x0c\xd3\x16\x17\xef\x73\xcd"
- "\x42\xfd\x71\xdf\x87\xf9\xdb\x1d\xae\x9c\xae\xf0\xd6\x6f\xde\x6a"
- "\x4a\xa0\x7b\x7d\x89\xdf\x1c\x6e\x2a\x0f\xa6\x33\x0d\x01\xb3\x1c"
- "\x72\xfc\x08\xcf\x53\xd5\xda\x88\x1d\xf6\x7f\xb5\x8c\xcf\xe4\x4b"
- "\xc9\xe9\x52\xfb\x46\x76\x8c\x7f\xb5\x56\x7d\x6d\x1e\xcf\x9d\x5e"
- "\xfa\x5b\x89\x92\xcb\xaf\xbf\x2e\x6a\xa6\xd6\x85\x9d\x26\x61\xdd"
- "\x68\x82\x1d\xe9\xd8\x1c\x16\xfc\x3d\x87\xa9\x75\x03\x7c\xa2\xfc"
- "\xa5\x74\x3e\xe9\x75\x3a\xd2\xe3\xf3\x80\x63\xce\xd5\x79\xc0\xf1"
- "\x35\x7e\xcf\x74\x57\x73\x15\x47\xa9\x6e\xa7\x88\xad\x5f\x7f\xdd"
- "\x5a\x29\xeb\x27\x55\x37\xd3\x24\x97\xf7\x8c\xf2\x41\x17\x07\xf2"
- "\xd6\xea\x7a\x80\xf9\xc5\x14\xe2\x6f\x5d\x90\xe4\x69\xbc\xc3\xb8"
- "\x52\x96\xa4\xd6\xc1\xbf\x53\x28\xbf\x5f\xe9\xdc\xe4\xf2\xd9\x4b"
- "\xf6\xf1\x77\x5a\xfd\x29\x93\x97\x22\x4f\x87\x97\x9a\xd5\x7e\xab"
- "\x79\xf2\x62\xe8\xec\xe2\xdd\xca\x1f\x3a\x49\xc6\x8b\x82\x4c\x73"
- "\x8c\x28\x96\x6b\xa4\xa5\x01\x6f\x8e\x17\x85\xf9\xce\x16\x73\xff"
- "\xb8\xe4\xcc\x85\xae\x10\xd2\x16\xc3\xb8\x34\xa6\x07\xb4\x7b\xd5"
- "\x10\x3e\x78\x69\x92\x85\xb8\xcd\x97\xb6\x8e\x3e\xf8\xc3\x89\x64"
- "\xfc\x7f\x2c\x4f\x91\xed\x2e\x4a\xdb\x72\xb7\x91\xfe\xcf\x14\x32"
- "\x30\x1d\xbc\xb4\xc5\xaa\x68\xb7\xa5\x58\xef\x1f\x2f\xd9\x8f\x4b"
- "\xdd\xb9\xf5\xf1\xae\x05\x41\xf1\x85\x5a\xe7\xde\x02\xfd\xf7\x5c"
- "\xad\x7a\xbf\xa9\x2b\x76\x0d\x88\xed\x79\xeb\x8a\xb5\xd6\xa5\xab"
- "\xd6\xaf\x1c\x3b\x36\x6a\xae\x64\x54\xdf\xc5\xdd\xb2\x5b\x8d\xa7"
- "\x5b\x8e\xeb\x78\xb3\x5d\x82\x67\xb4\x7f\xd3\x15\xb1\xec\xf3\x8b"
- "\x34\x37\xf7\xa2\x6c\x1a\xb8\xbf\x93\xf2\xef\x8c\x78\xfc\x16\xe5"
- "\xdf\xf5\xad\xa2\x87\x97\x2d\x59\xba\x21\x22\x75\x72\xe4\xba\x61"
- "\xd5\xeb\xa8\x3b\x71\xf4\x7d\xd0\x15\x09\xf3\x37\xf1\xd8\xe2\xfc"
- "\xa0\x32\x28\xfe\x0a\x7d\x3d\x05\x32\x56\xd4\x5a\x16\xa4\x56\xe8"
- "\x32\xf1\x75\xd6\xe1\xc3\xd4\xd9\x4e\xd8\x53\xe0\x2d\x13\xda\xee"
- "\x83\x5d\x77\x91\xd7\x67\x50\xee\xb3\xb6\x5a\x8e\xe9\x3c\x55\x8b"
- "\x57\xef\xac\x43\x7a\x0a\xae\x9f\xe0\x3a\x14\xd7\xdf\x59\x57\x62"
- "\xde\xc3\xbe\xf4\xeb\xd8\x97\xde\xf9\x8e\xf4\x07\xf2\x3b\x88\x7d"
- "\x82\xf0\x7e\x11\xdb\x20\x5e\xda\x6a\xe4\x75\x70\xce\x8b\xb4\xfd"
- "\xd6\x67\x28\x9b\xaf\x42\xee\x0d\x3a\xeb\x44\xf5\xd4\x0e\xb1\xaf"
- "\x90\xbf\xb7\x96\x7e\x9a\xb6\x26\x24\x26\x7c\x46\x89\x96\xa4\xe4"
- "\x5e\xe7\x56\x94\x5d\xb9\x88\xe9\x34\xd8\xb7\x68\xe5\x37\x80\x63"
- "\xec\xc3\x01\xdb\xf0\x47\x24\xed\x5b\xcd\x9e\xab\x97\xe3\xc2\xd6"
- "\x45\x11\x36\x1d\xef\x4d\x0f\x57\xf6\x89\x08\x29\xfb\x74\x6b\x99"
- "\x2e\x07\xb8\x77\xe8\x7c\x1a\x15\x5f\x6f\x65\xd9\xb2\x35\xcb\x96"
- "\x5a\x33\xd6\x0e\xa7\x88\xe8\x7a\x25\xcb\x56\x5a\xd7\x2c\x5b\xfd"
- "\xfc\xb2\xb5\x32\x32\x1e\xbf\x8d\x1a\xf3\xd3\x44\xea\x3d\xc9\xfa"
- "\xb9\x2f\xeb\x68\xa6\xef\xd6\xcf\x39\x26\x9b\xa8\xb9\x67\x07\xfb"
- "\xee\xa8\xf9\xc6\x5b\x1d\xd1\xf3\x8d\x17\x54\xdc\x09\xd7\xd4\xe3"
- "\x6a\xae\xf3\x82\xfc\x8e\xf5\x29\xda\xe6\x1a\x88\xff\xbe\x6d\x26"
- "\x68\x69\xd0\xe8\x76\xb1\xd7\xb9\x6d\x8a\x4e\x37\x2f\xbd\xe0\xd6"
- "\x6c\xa9\x6e\xa9\x3f\x30\xc6\x42\xff\x45\x8d\xaf\xea\x1b\xb4\xdb"
- "\x38\x2e\x47\xa2\x5c\x4f\x4e\x99\xca\xf3\x0d\x03\xc3\x44\x7d\x6e"
- "\xf4\xcf\x71\xe8\x4d\xd6\x6f\xdb\x75\x78\xa8\x33\x93\xeb\xd3\xe6"
- "\x41\x37\x9d\xa1\x17\xe4\x9a\x73\xd8\x35\xb5\x85\x75\x0a\xc7\x10"
- "\x09\x57\x03\x8e\xdc\xa3\x7d\xc1\x2d\xd7\x61\xf9\x1b\x04\x80\xc5"
- "\xeb\xc0\xd0\x73\x27\xf9\x7b\xc5\x9c\xa6\x62\xc3\x6d\xdd\xc1\x6b"
- "\xcf\xa8\xab\x19\xf8\x07\x06\xce\x36\xbc\xe0\x66\xbb\x93\xe1\x7a"
- "\x69\xdb\x51\x86\xa7\x62\xdf\xbd\x30\x06\xbc\x93\x3e\x60\x3f\xbd"
- "\x50\x1c\x31\x2f\x63\x7c\x24\x9e\x7e\xe0\x22\xe3\xac\x2a\x5f\x53"
- "\xd9\x6e\xd6\x9f\xbb\xb5\xb6\xeb\xed\x01\x3c\xe8\xbf\xad\x66\xdd"
- "\x6f\xc2\xab\xb5\x9b\xf1\x63\xdc\x23\x71\xd6\xf0\xad\x65\x7c\x51"
- "\xee\x40\x84\x6c\xf3\xba\xcc\x10\xa4\x1d\x19\xf0\x61\xdf\x46\xb1"
- "\x7a\x63\xd5\x4a\x6b\xe9\x8a\x95\xcf\x16\xad\x5f\xf2\xec\xb2\xa2"
- "\xe7\x6d\x59\xd6\xe7\x57\x3e\x55\xba\xea\xe9\x67\x99\x6b\xd6\x96"
- "\x3d\xff\xf4\xb3\x56\xd6\x2c\x45\xb3\xf3\xf3\x8b\xee\x7b\x64\xe1"
- "\xa3\xc3\xe9\xbe\x25\x48\xc3\xcc\x3f\x3f\x3b\x4b\xbd\x7a\x78\xce"
- "\xac\xef\x15\xcd\x5a\xf0\xc8\xfc\x45\xf2\xd0\x4b\xff\xfb\xd9\x2b"
- "\xe3\x67\x88\xe2\x43\x33\x78\xa9\x19\xfd\x3b\xe4\x14\xbd\x34\x4d"
- "\xc5\x4b\x7f\xb1\x34\x3a\x5e\xfa\x8b\x40\xfa\xc5\x46\xfc\x8e\x12"
- "\xfd\xd0\x87\x1f\xb4\xfb\x4b\xd9\x8a\xbf\xae\x7b\xb2\xd7\xf9\x62"
- "\xed\x00\x7f\xbd\x24\xcf\x52\xb2\x9f\x92\x5a\x9f\x7d\x11\xfa\x7f"
- "\xeb\x91\xc8\x77\x03\xf3\xc9\x17\xdb\xfb\xe7\x93\xfd\x3a\xe5\xc5"
- "\xfe\xb9\x25\xd2\xda\x31\xaf\xbc\x8e\xe7\x95\x6a\x3d\xe9\xa5\xe9"
- "\x92\xa7\x06\x95\xef\x24\xd2\xe7\x95\x2c\xdb\x72\x4f\x4a\xce\x3f"
- "\x7e\x38\x25\x52\xc6\xe5\x9a\xbe\x26\xe3\x5c\x4e\xae\xdf\x99\xdf"
- "\x6a\xe6\x35\x6d\xd8\xc7\xcd\xb0\x15\x30\x7e\xf5\x0a\x91\xf2\x56"
- "\xb3\xc2\xe9\x87\xe5\xbc\xc6\xcd\x76\xb3\xc6\x4f\x23\xcf\xd0\x0f"
- "\xdf\x13\xce\x17\x5a\xd4\x9c\xf2\x85\x10\xeb\x75\xb1\x75\xf4\x7d"
- "\xec\x5b\xc4\x73\x27\xd4\x79\x68\x80\x67\x5f\x9a\xc6\xbc\x30\x30"
- "\x97\xfd\x61\x94\xfe\xef\x91\xdf\x25\xfc\xe1\x49\x3d\xde\x43\xd9"
- "\x58\x32\x18\xc7\xba\x68\xb7\x41\x40\xdf\xfc\x70\x07\xd7\xc1\xf4"
- "\xf4\xd2\x8b\x07\x91\xd7\x38\x40\xbf\xed\xe6\x7e\xfa\x69\xeb\x2c"
- "\xfa\x1a\x8b\xc2\xfb\xa5\xe9\x83\xd1\x2a\x3e\x9d\xb6\x17\x7f\x29"
- "\x9d\x9c\x34\x84\x65\x52\xa7\xd7\x95\xb4\xda\x7e\xe0\x4a\x5a\x6d"
- "\xbf\x38\x40\xab\x17\x6f\xbe\x92\x56\xdb\x3b\x22\xf6\x95\xb4\x75"
- "\x94\x97\xa6\x33\xcd\x98\xc7\xd0\xee\x1d\xe0\xb3\xda\x01\xfa\xbd"
- "\x94\x74\x25\xfd\x5e\x1a\x13\x9f\x7e\xdb\xf9\x7c\x55\x24\x9c\xfa"
- "\x78\xe3\xc6\xc8\x2d\x06\xed\x3c\xd8\x4b\xd5\xfc\xad\x7b\xc6\xe3"
- "\x15\x43\xb8\xe4\x15\x27\x7e\xb8\xf2\x3c\x62\xc0\x16\x17\x01\x8d"
- "\xbe\xae\x66\xcc\x79\x79\x5d\xe9\x2a\x63\xd1\x49\x7d\xcd\x03\xf7"
- "\x1d\x3c\x77\xe6\x6f\x42\x71\x3a\xd3\x93\xbf\x31\x06\x7e\xef\x50"
- "\x76\xe9\x4b\xfd\xdf\xff\xe8\x99\xf8\x60\x76\xe2\x16\xb2\x1e\xab"
- "\xbb\x8b\xd3\x03\xe0\xa1\x3c\x4e\x67\xdf\xad\xc1\x60\x16\x85\x72"
- "\x29\x3e\xdc\x1f\xf5\xf3\xff\x60\x67\xa2\x63\xf4\x51\xc9\x92\x95"
- "\x4b\x57\x2d\x5f\xfe\xe5\xaa\x28\x72\x5f\xcd\xe5\x0c\x6f\xef\xe5"
- "\xef\x6e\x6e\x7d\x66\x23\xea\x84\xfd\x6f\xeb\x52\xe3\xe6\x8f\xa0"
- "\xff\x56\x34\x2b\x5b\xf2\xf1\x2e\x75\x0e\xfc\xe5\xb4\x08\xfd\x0c"
- "\x1e\x79\xd9\x2a\x9c\x3f\x5a\x3c\xd0\xc7\x3f\xea\xbe\xb2\x8f\x5f"
- "\xa6\xf8\x7d\xfc\x72\x7a\x78\x1d\x9f\xc3\x79\x19\xf3\x9f\x35\xd2"
- "\xd6\xe4\x67\xf6\x83\xc0\x9c\xb9\x0b\xf3\xe5\xee\x05\x1b\xdc\xf7"
- "\x16\x6d\x48\x90\x7b\xc5\xfc\xed\x95\xe0\x25\xd1\xc9\xbe\x08\xbc"
- "\x3f\xc6\xdf\x5e\xe1\x6f\x2e\xf1\xf7\x3f\x65\x1e\xdc\x57\x9d\x26"
- "\x39\x77\xc4\x7b\x6b\xc3\x69\xf9\x7d\x6c\xd8\x0a\x2f\x3b\x74\xdb"
- "\xda\x04\x93\x91\xcf\xa7\xef\x52\xfd\xd1\xc1\x7d\xc1\xf5\x15\x6d"
- "\x70\xab\x3a\x2e\xf1\x77\xd5\xc8\xa4\x6c\x88\x97\x8f\x5c\x75\xed"
- "\x3e\x65\xaf\x63\xb0\xbd\x4a\x61\x70\x0c\xeb\xdf\xab\xd4\xbe\x43"
- "\xcc\xb2\xcf\xfe\xa3\xbd\xce\x1d\xe6\x58\xff\x53\xe5\x3b\xb4\x23"
- "\x53\xf7\xc9\xaa\x92\x3e\x50\x64\x62\xfd\xc9\xf3\x9c\xd3\xb4\x23"
- "\xbf\x41\x8e\x97\x3b\xf2\x23\xf7\x38\xad\x1b\xb7\x0c\x3d\x47\x2f"
- "\x5f\xbc\xca\xbe\x69\xf2\x80\xef\xab\x63\x18\xca\xef\xe8\xf7\x11"
- "\x73\x3a\x86\x35\x44\xe0\x86\x77\x07\x23\x7c\x15\x7d\x3c\x1e\xf3"
- "\xfc\xb1\x41\x7d\x57\xd5\x07\x1c\x5a\x91\x86\xf9\xc4\x4e\x19\x8f"
- "\x70\x7d\x90\xc6\xd8\x66\xf0\x37\x7b\x76\x5c\xd4\xe6\xa1\xdd\xd6"
- "\x4a\xc6\x67\xc7\xab\x0c\xd7\x8b\x7c\x42\xee\x07\xec\xa4\x7e\x9c"
- "\x23\xea\xd3\x61\x2b\x9a\xec\x4c\xd7\xf1\xf2\xd2\x0e\x19\x3f\x85"
- "\xbf\x73\x1d\xd9\xa6\xf2\xe5\x2b\x8a\x6c\x25\x1b\x8a\x56\xac\x5c"
- "\x51\x36\x9c\xca\x97\x3c\xbf\x62\x12\x92\xac\x4f\x97\xac\xb0\x15"
- "\xad\x90\xd1\x8a\x65\x20\xe4\xb2\x0d\x36\xde\xfb\xb8\x62\x0f\xde"
- "\x2c\x6d\x79\xc3\xce\x69\x6a\xbc\xdf\xb9\x5b\xe7\x53\xf9\xed\x6f"
- "\x51\x48\x03\xbe\x57\xf2\x9b\xc1\x89\x68\xe7\xc7\xcc\xc3\x2a\xbe"
- "\xcf\xae\x0e\x65\x5f\xec\x6c\xb9\xd2\x27\x6b\xa7\x57\xf7\xc9\x02"
- "\x7f\x9b\x59\xd6\x23\x60\x81\xff\x77\xd1\x95\x65\x76\xa5\xf5\xfb"
- "\x77\x6a\xdf\x1d\xe7\xbe\x92\xf1\xee\x6b\x58\xdf\xee\x7c\xd0\x53"
- "\x3e\x87\x63\xf6\x6a\x72\xb5\x6b\x76\x04\xbe\xd2\x97\x97\x61\xf1"
- "\x39\xa9\x49\x81\x48\x5f\xb6\x5d\x9f\x60\xec\xb5\xe8\xf5\x58\x37"
- "\x19\xa0\xef\x76\xbd\xe6\x37\xb8\x13\xa5\xff\x31\xca\x01\x96\x4b"
- "\xf7\xa3\xf1\xf6\xb7\x6b\xd7\x81\x58\x1c\x81\xfb\x58\xa4\x1f\x1d"
- "\xf0\x13\xdc\xe5\x60\x18\x48\xc3\xf8\x5f\x95\x15\x99\x16\xd9\x4f"
- "\x33\xe7\xe4\xc3\x80\x5e\xbb\x0c\x9d\x34\x6b\x49\x69\x29\xeb\xa0"
- "\x25\xcb\x4a\x9f\x5f\xb3\x6a\xad\xd6\x75\x33\x97\x73\x18\x6a\x99"
- "\x65\xaa\xf6\xc6\xba\x72\xd9\xb2\xa5\x2a\x49\xeb\xc8\xe8\x3d\x2b"
- "\xe5\xc7\x50\x85\xf9\xff\x8e\x92\x01\x5b\xb1\xaa\x51\x18\x76\x75"
- "\xe2\x77\x5e\xea\x1f\xd9\xaf\x55\xa5\xd1\x73\xb4\xaa\x0a\x5d\xf6"
- "\x65\x3f\xdb\xd9\xe7\x2c\xe7\xd1\x1e\x21\xf7\x78\xd0\xaf\xae\x3f"
- "\xa0\x9d\x43\xbc\xe4\xe2\x33\x5f\x09\x11\x70\x0e\xf7\xd3\x7b\xeb"
- "\xe3\x1d\x5b\x95\xcf\x84\x91\xbf\x59\xcb\x31\x25\xf0\x1e\xf3\xff"
- "\x97\x4f\x2a\x3d\x59\xe5\xed\xdf\x7b\x31\x24\x62\xbe\x59\x05\xde"
- "\x5f\x95\x7d\xa5\x7c\xbb\x92\xae\x94\x7b\xf6\xb5\x74\x59\x75\x1a"
- "\x47\x7c\x83\x1e\xfc\xe7\xfa\x40\x5f\x33\x6e\xd0\xbe\x89\xc0\xf7"
- "\x5c\x96\xe7\x15\x62\xe4\x88\x7b\xd9\xaf\xe1\x14\xb9\x76\x28\x9e"
- "\x72\x95\x44\xf8\x06\x9a\xcf\x90\x6b\xbb\xea\x5b\x97\x43\x97\x3f"
- "\xb4\x53\xda\x72\x0c\x43\x8d\xeb\x55\x43\x14\x7f\xb9\x0e\xe8\xb4"
- "\xe5\x39\x3c\x9e\x0f\x0f\xd8\x41\x55\x8b\xa4\xbf\x88\x8a\xa9\xd1"
- "\xc7\xed\x07\x9c\x1c\x1d\x0e\xf2\xa2\xfd\x49\x3e\x9d\x56\x7a\x9e"
- "\x48\x9e\x98\xb5\xc4\x86\x09\xf6\x8a\xe5\xcb\x97\xad\x59\xab\xc7"
- "\x19\xcf\x5c\x55\xba\x54\xc5\x15\x9f\x8a\xee\x5f\x0f\x19\x9e\xce"
- "\xa1\xc9\x91\xaa\x6e\x63\xec\xdd\x2c\x5e\x13\x91\xfe\xa3\x72\xce"
- "\xf5\xea\x07\xf5\xda\xfc\xeb\x14\xd5\x14\x28\xff\xab\x9a\x14\x65"
- "\xdb\x5e\xff\x46\xaf\xb3\xba\x4c\xb7\x6d\x79\xad\xb5\x87\x6e\xad"
- "\xe5\x33\x72\x7c\x96\x60\xff\x1e\xd1\xc9\x6b\xab\xc8\x53\xab\x7f"
- "\x8b\x8e\xed\xa6\x9d\x7b\x54\x0c\x6d\xf7\x4a\xf6\x15\x79\xf5\xd3"
- "\x70\x75\x4e\x87\x48\x4d\x4f\x82\x7d\x96\xcc\x32\x31\xa2\x9b\x7d"
- "\x78\x39\xf6\x55\x75\x27\xdb\x75\xac\xcb\xf8\x7b\x0d\x9d\x54\x7d"
- "\x18\x3a\x1a\x3a\xfd\x55\xaf\x2f\x25\xa7\x63\xdb\x46\x4a\xe2\x3a"
- "\xa0\xaf\xbd\xcd\x8d\x4c\xdb\x1a\xfa\x18\xba\x4c\xd3\xd9\x5e\xae"
- "\xc7\x4b\xd5\x2d\x6a\x3e\x98\xd3\xad\xad\xb3\x76\x23\x1f\xf4\xff"
- "\x88\x5a\xc5\xab\x19\xf6\xf1\x0e\x2a\xe7\x6f\x53\xaa\xb8\x55\x33"
- "\x6a\xd1\x0e\x07\x7f\x03\x12\xb6\x20\xe6\x3b\xd5\x65\x68\x83\x43"
- "\xf3\x01\x07\xaf\xd4\xb4\x2a\xdf\xfe\xea\xa5\x4c\x03\xc0\x0d\x68"
- "\x70\x03\x80\x8b\xfe\xbf\x59\x8b\x97\x5d\xb3\x43\xaf\x03\xe3\x9f"
- "\x0f\x76\xb3\x9b\x6d\x67\xe0\xdd\x8e\xdf\x89\x2a\xb9\x97\xee\x85"
- "\xde\x37\x09\xf6\x5d\x1b\xf8\xde\x5e\x4d\xb3\x3e\x16\x72\xdd\x1a"
- "\xee\xec\xb3\x94\xc4\xeb\x7c\x5a\x5d\x32\x86\xa1\x0e\x13\xcf\xed"
- "\xe1\x4b\x67\x1b\x01\x33\x09\xe3\xba\x4f\xfb\xce\xda\x89\xaa\x0b"
- "\xec\xe7\xe8\xc5\xb8\x7d\x8b\x28\x0a\x9a\x79\x0f\x6a\x84\xfe\x1d"
- "\xbb\x86\x0b\x4c\xaf\x57\xb2\x07\xf6\x96\x50\x1e\xf4\x87\x3c\x38"
- "\x3a\xe9\x95\xb9\x5c\x2f\xcb\x02\xf7\xe5\x65\xf4\x0d\xfa\xc7\x2c"
- "\x2e\x9d\x6d\xb2\xae\xa4\x11\xa7\xe9\x95\xe7\xb8\x8f\x78\x3f\x98"
- "\xfd\x0f\x91\x66\xe2\xb8\xfb\xa7\xe8\x95\x47\xb9\x7f\x18\x17\xe1"
- "\x4a\xf7\x06\x7b\x0b\x1f\xe0\x33\xd7\xac\x33\x37\x57\xc0\xe6\x5e"
- "\xce\xba\x64\xf7\xa7\x3c\x87\xe7\xef\x25\xf1\xbd\x7d\xa9\x08\xcb"
- "\xfe\xdd\xc8\xfd\xbb\xfb\xd3\xcd\x5d\x22\xfc\x85\x93\xc4\x71\x3f"
- "\xd1\x17\x06\x0a\x06\x0c\x09\x8c\xb7\xc1\x7e\x96\xcf\x85\x37\x92"
- "\xa7\x7c\x3b\xfb\xb2\x25\xed\xda\x48\x66\x3e\x53\xcf\xdf\x02\x6a"
- "\xf3\xd7\x51\x9b\xad\x8e\x7e\x1f\xdc\x4d\xee\x75\x1c\x1f\xe5\xd5"
- "\x6d\xff\x5a\xbe\x9b\xf7\xd8\xae\xc3\xfd\x1c\xeb\xf7\x64\x5d\x63"
- "\xfe\xf5\xc4\x1f\xe9\x5f\xdd\x7f\x24\xeb\x63\xf2\x39\xab\xa5\xf0"
- "\xf7\xd4\x92\xfb\x7b\xb2\x77\x8a\x30\xcf\xeb\x2a\x9f\xe3\x3a\xb6"
- "\x03\x56\x23\x9f\x3f\x37\x87\x7b\x2c\xc3\xd1\x7e\x23\xef\x1f\xb4"
- "\xf9\x7d\xe4\x5e\xf9\x2f\x8c\xe3\x2f\xeb\x2f\x50\x92\x7b\xe5\x6f"
- "\xe5\xbd\x9a\x6f\x9d\x6d\xf4\x2c\xed\x60\x9b\x32\xc8\x67\xef\x79"
- "\x4f\x12\x73\x8c\x70\x15\xe3\x18\x52\x78\x83\x5e\x46\xbd\x3c\x6c"
- "\x4e\xbd\xbc\x8c\x15\xb7\x9f\xe9\x01\x9c\x5a\x17\x29\x9a\xb4\x60"
- "\xa4\xd0\x70\xfe\xd4\x5e\x18\x49\x9f\x57\x5a\x98\x3e\x1c\xb3\x35"
- "\x8c\xfe\x02\x6e\xb9\xa0\x41\x58\xaf\x03\x38\x27\x69\x6b\xb8\x49"
- "\xbb\x2e\x50\xb2\x7b\x25\x7f\x0b\xee\xd5\x3b\x4d\x05\xc6\xa4\xf0"
- "\xa5\x73\x4d\x55\x17\xc9\xc8\xfd\xc6\xfb\x36\x55\xf2\x3d\xc3\x7c"
- "\x35\x8d\xfb\x0c\x3c\x99\x87\x5f\x3e\x7e\x05\xcc\x77\xb8\x2e\x42"
- "\x7f\x6d\x07\x0e\x87\xd0\x57\x8d\x7c\x55\xbc\x98\xe1\xe0\xb8\x24"
- "\xda\x1c\x6a\x20\x1d\x72\x14\x14\xf2\x7b\xcb\x90\x99\xdd\x87\xc2"
- "\x90\x23\x5e\xc3\xa9\xaf\xa1\xe4\xb0\xd3\x15\xd8\x0f\x5d\x57\x57"
- "\x23\xcf\x25\x9b\x79\x5d\xf3\x75\xf9\x6d\x8d\x57\x9b\x74\xdd\xf7"
- "\xa3\x51\x7c\x76\x73\xf7\x49\x03\xaf\xfb\xb8\x72\x7c\x1a\x9f\xc3"
- "\x0e\x7b\x15\xfa\xff\x26\x4d\x3f\xd6\xc8\xf9\x05\xcb\xfe\x60\xf3"
- "\x09\xd8\xb2\x2d\x62\x5f\x21\xf1\xfe\x4f\xf2\x16\xe1\x4b\xee\x34"
- "\x89\x36\x7f\x8b\x3c\xb3\xdb\xe6\x0f\xc9\xfd\x1f\xbc\x4f\x98\xef"
- "\xf7\x99\x60\xfb\xb6\x33\xed\xf4\x74\xde\x3b\xe2\x75\xb5\xf9\x7e"
- "\xe1\x5b\xb0\xc1\xc4\xdf\xc2\x1c\x23\xf7\x0e\xb4\xf4\x36\x0b\xe6"
- "\x0d\x1b\x7c\x26\x34\x34\xd8\x0f\xab\xa7\x30\x91\xe5\x0d\x79\xd3"
- "\xfa\xf3\xf6\x14\x1a\xf9\xdb\xce\x5c\x67\x44\xda\x90\x05\xe5\x28"
- "\xcb\x7d\xa5\xa5\x29\x9b\x79\xcf\xe1\xfe\x39\x25\x9f\x5f\xe8\xc1"
- "\xb8\xb9\xb6\x30\x21\xdc\x53\x68\x08\x01\x36\x78\xdf\x2c\xbf\xc9"
- "\x19\xf4\x69\xdf\xb8\xea\x82\xfc\x76\x90\xa8\xfe\x95\x17\xf9\x8c"
- "\x0c\x97\x63\x41\xf0\xb7\x41\x44\xca\x7b\x25\xf1\x7d\xee\xea\x6a"
- "\xdd\x95\x8f\x81\x9f\xf6\x1e\x65\x79\x0e\x99\x27\x07\xad\xcf\xb0"
- "\x0d\xb3\x57\xfa\x06\x84\x20\x63\xa1\x94\xc9\xc1\x49\x5d\x94\x50"
- "\x09\xbe\x55\x6b\x50\x7b\x1f\xf1\x40\x06\xed\x61\x01\x3b\x74\x6f"
- "\x1e\xf3\x8d\xa9\x9b\x7d\xe5\xee\x26\xe9\x9f\x96\x5a\xeb\xf2\x04"
- "\xba\xa8\xc5\xf1\x67\x6a\x09\x7a\x1c\x47\x2f\xf8\x8c\xca\x4f\xcd"
- "\xc8\x70\x57\xf0\x3b\x3b\x78\xb5\x28\xd4\x48\x83\xed\x0d\xf0\xfc"
- "\x18\x63\xd8\x5f\xd4\x5c\x71\xef\x51\x7d\x5e\x7c\xf5\x36\xd4\xa6"
- "\x71\xfc\x0c\x21\x2c\x14\xae\x59\xe7\x02\x2e\x76\xd1\x9b\x49\x93"
- "\x36\xf2\x9a\xdc\xde\x6e\xcc\x51\x72\x35\xb8\xe7\x15\x5c\xe4\xbf"
- "\x0a\x5c\xe6\x99\x96\x5a\xd2\xda\xb4\xce\x11\x02\xec\x50\xea\x3a"
- "\xf6\x37\xb0\xdb\xbf\xe0\x35\xdb\xd7\x1e\x45\x3d\x8e\xb6\x60\x3b"
- "\x71\x1c\x9e\xfa\x30\xc6\xc7\xf3\x16\xd2\x7c\xf2\xec\xe7\xa8\x76"
- "\x4e\x58\x64\x9a\x31\x5f\xe7\xfd\x18\x3b\xeb\x38\x5e\x0b\xa8\x0c"
- "\xd1\x50\x0f\x46\x46\x8e\x1d\x01\x18\xf3\x3e\xe1\xbd\x2f\xe8\x89"
- "\x90\xb0\x18\x3e\xb8\x84\x91\x1e\xba\x53\xc6\x92\xd8\xfa\xf5\xd7"
- "\x47\x6e\xa1\x7b\x85\xc1\x24\x7d\x3a\xc3\xd5\x7b\x6a\xd1\xb7\x5d"
- "\xca\x07\x70\x32\x45\xf8\xff\x25\xa2\x2e\xe9\xff\x27\xcc\x39\xcd"
- "\x75\x72\xdd\x71\x32\xc6\x8b\x5a\xbf\x97\xf6\xca\xf5\xd7\x1d\x7c"
- "\xc6\x43\xea\xd8\xd7\x96\xf8\x52\xd6\x30\x3e\x1c\x1f\x3a\x21\xbc"
- "\x2e\xd4\x54\xf5\x77\x69\x5f\xf3\xbb\x99\x6d\xdd\xbd\x6e\xe1\x5a"
- "\x53\xcc\xe7\x18\x35\xd8\xa6\x73\xf4\x5a\x8a\xa8\x5e\x53\xec\xa5"
- "\xd7\x8a\x55\xdf\xc8\xfb\x2c\x7e\x1f\xec\xcb\x84\x5d\x5d\x7b\xb0"
- "\xee\x32\xef\x05\xd4\x2e\x12\xce\x5b\xdc\x3d\xe6\x35\xc5\x0b\x2d"
- "\x6c\x53\xbd\x56\xe6\x35\xfc\xa1\x50\x5b\x07\x94\x71\x31\x06\x9b"
- "\x23\x89\x7d\x96\xe1\x1e\x00\xc1\x7c\x36\xed\x0c\xed\xfb\xfc\xb2"
- "\x93\x0c\x7d\xb0\x05\x2f\x1b\xc8\x0c\xf9\x4a\xde\x35\x9a\xb2\xf1"
- "\x6e\xf4\x19\x7a\xed\x77\x41\x03\xa5\xe1\x67\xf6\x7d\xbd\xe4\x3a"
- "\xc0\xcd\xe5\x35\xd2\xd6\x0b\xbc\xc6\xf5\xba\x3c\xa7\x5c\xf5\x3a"
- "\xa5\x87\x01\x8f\xf7\x7b\xaa\x46\x53\x3a\xaf\x53\x22\x2d\xb3\x28"
- "\xa4\xf6\x3d\xf5\xb5\x88\xad\xa3\x29\x2b\xba\xde\xd7\x9a\xd4\x3a"
- "\xe6\xbe\x4e\x39\xb7\xf2\xd1\x37\x30\xb7\x3a\x05\xb8\x07\x84\x33"
- "\x51\x88\xaf\x5b\x0c\xca\x37\xe1\xf5\x9d\xa6\x5a\xc5\x77\x72\x9f"
- "\x0f\xfc\xc6\xfb\xa8\xda\x9e\x52\x82\x8c\x07\x92\x3a\x75\x07\x7f"
- "\x87\x3a\x62\x9d\xd8\x2c\xf1\xd0\xce\xf0\x87\xb6\xde\xc1\xb1\xc1"
- "\xe4\xd9\xfd\xa2\x25\x6a\x3f\x8a\xcf\xf7\x7b\xe9\x75\x19\x8f\x71"
- "\xc7\xeb\x94\xfc\xf2\xeb\x64\x6e\x5d\x2e\xdb\x75\x54\xc9\xa2\x91"
- "\x18\xdf\xb0\x8b\xe5\x0c\x3c\x01\xbc\xb9\x3e\xe6\x8d\xb6\xe0\x79"
- "\xb7\xbd\x4c\x84\xdd\xcf\xb0\x2d\xfa\x7a\xc8\xbd\xe6\x10\x2d\xe8"
- "\x0c\xaa\xb3\xa8\x8b\xc9\xd7\x00\x78\x0d\xa3\xc9\x7c\x9a\xf6\x5d"
- "\xe7\x29\x25\xde\xaf\xb8\xd5\xbd\xe6\x30\x60\xef\xbb\x99\xc7\x82"
- "\x9d\xa0\x8f\x1a\x13\xf6\xb5\x7b\x02\x1d\xd4\x0a\xf9\x9e\x6f\x13"
- "\x12\x0e\xf2\x3c\x22\xdb\xbb\xcf\x62\x2d\x52\x31\x18\x64\x5b\xfb"
- "\xf7\xf9\xb4\x76\x78\x2e\x48\x78\x25\x1e\x70\x89\xde\x26\x9d\xd6"
- "\x8a\xbf\xf6\xbd\xe9\x5e\x73\x80\xb8\x7f\x38\x3f\x9e\x77\x7b\xba"
- "\x91\xf7\x6c\x74\xbf\x70\x1e\xbc\xfb\x04\x70\xbf\x3d\xb0\x57\xcd"
- "\x7b\xa8\x03\x79\xea\x5e\xe7\xf3\x68\xaf\x27\xed\x03\x8d\xd4\xda"
- "\xfe\xbe\x3b\x19\x57\xf4\x5d\xb6\xa7\xec\xcf\xf1\x7d\x52\x21\xfb"
- "\xe0\xfb\x2d\x6d\x72\xcf\xae\x6e\xec\xfc\x60\x58\x28\x7d\x56\x77"
- "\x22\x0c\x3d\xe0\xc5\x95\x75\x81\xd4\x27\x13\xd9\x0f\xa8\xee\x4f"
- "\xa6\x04\xd5\xbf\xdc\x16\xb6\x57\xe2\xf5\x71\xc4\x7e\xa2\x99\x71"
- "\xd5\xfb\x98\xbf\xe1\x18\xe6\x3d\x61\xf6\xb7\xef\xb3\x90\xe2\x3f"
- "\xe1\x02\xdc\x4f\x94\x1c\x4d\xce\xd5\xe2\x1a\xe4\xf6\xa4\xdc\x9d"
- "\xc4\xe7\x23\x75\xdf\x60\x91\x72\xb7\xb1\x48\xf9\x73\x5b\x58\x47"
- "\x35\x18\x84\xc6\x9b\x75\x27\xb4\xb2\xd3\x94\x4f\x46\xdd\x6e\x94"
- "\x9f\x16\xb7\xbd\x89\xd0\x3b\x4e\xa8\x69\xb4\x87\xed\x48\x01\x5d"
- "\x85\xf1\x60\xa8\xc7\x7f\x59\xfb\x7e\xe6\xfe\x87\x60\x53\x0f\xe5"
- "\xf3\x51\x3a\x6e\xd7\xb6\xf7\xb7\x7f\x8c\x9a\xdb\xec\x5f\xac\xaf"
- "\x2d\x09\x33\x68\xec\x34\x09\x3e\x2b\xc9\xe7\x5d\xfc\x29\x75\x8d"
- "\xbe\x94\xb7\xda\x95\xdc\xec\xdf\x06\x3b\x55\xea\xdb\xa2\x00\x39"
- "\xb8\x5d\xbc\xb7\x8b\x79\xd3\x50\x6e\x33\xe0\x60\xfe\x63\x9b\xa6"
- "\xc6\x73\x05\x7b\xd0\xb5\x1d\xbd\x6d\x68\x93\x6c\x1b\xda\x28\xdb"
- "\xa6\x7d\x5f\xea\x34\xd5\x8f\x95\xeb\xe5\xd7\xd6\x1e\x15\x5f\xc6"
- "\x55\xd7\xc8\xdf\xce\x3d\x4d\x0d\xef\xcb\x33\x30\xe8\x13\xb5\x0f"
- "\x52\x5f\x26\x86\xbf\x3c\xfc\xda\x60\xd6\xe7\x2a\x98\x6f\xb5\xbf"
- "\xca\xb1\x28\xb5\x6f\xd4\x01\xf6\x8f\x45\xf5\x5b\xf2\x1c\x40\x0f"
- "\xea\xe3\x6f\x7c\x0e\xe8\xa1\x86\x74\xee\xab\x89\x87\x28\x57\xf1"
- "\x61\xc3\xd7\x78\xad\x59\xcd\xf3\xea\x8f\x43\xf7\xee\x50\x73\x2a"
- "\xdd\x8f\x3c\x41\xfa\x91\x47\xea\xd8\x6b\xc4\x51\xea\x3b\x91\xba"
- "\x27\x17\xf7\x47\xe4\x59\x49\xe0\xbb\x3e\xa8\xeb\xbf\xfa\x23\xec"
- "\x93\xd4\xef\x0f\xb0\x01\xbc\x52\xa9\xce\x91\xf7\x3a\x1b\x0a\x75"
- "\x1b\x45\x7e\x93\xcc\x29\x8e\x73\xbe\x05\x1b\xce\x4b\x7f\x81\x2a"
- "\x19\xf3\xe0\x8c\x76\xce\xae\xe1\x39\x6d\x5d\x23\x93\x7d\xf8\x51"
- "\x76\xb7\x97\x3e\x96\x67\x02\x99\x06\x5c\xb7\xc4\x5d\x7e\x17\xac"
- "\xa1\x69\x60\xdf\xa7\x5e\x7e\x37\x5d\xf9\xb5\x36\x1c\xd7\x79\x04"
- "\xed\x1d\xaa\x62\x83\xd6\xdf\x79\x2c\x8b\x24\x0f\xf4\x08\xcb\xf0"
- "\xdb\xea\x98\x27\x1b\x7c\x91\x74\x5a\x10\x0c\xdb\x95\x0e\xaa\xef"
- "\x10\x52\xd6\xeb\x3b\xbe\xdc\x9e\x68\x9c\xa3\xdb\x22\x8a\xce\x66"
- "\xe8\x97\x37\xcc\x92\xd6\xae\x0c\x2b\xc7\x68\xd9\x54\xc9\x31\xa7"
- "\x7e\x3c\x84\x63\x7b\x05\x5d\x19\xb9\x21\x3e\x93\x89\x71\x36\xec"
- "\xca\x28\x38\x6d\x23\x43\x91\x8d\xf7\xba\xd6\x64\xf3\xfc\x4a\xd8"
- "\x61\x0b\xa4\xc2\x3e\x81\x9c\x6f\x5e\x41\xa6\x27\x4a\x00\xdb\x9e"
- "\x99\xc6\xb1\xb7\x38\xee\x16\xc7\xce\x0b\xd9\x33\x53\x71\x3f\x0a"
- "\xf6\x9c\x59\x98\x33\xb2\xd9\x5f\x26\xe4\x14\xd0\xc7\x27\x39\xfe"
- "\x97\xc1\xe3\x0b\xd0\xe6\xb3\x94\xc4\xb1\xbd\x82\xd5\x6b\xf2\xda"
- "\xfc\x9f\xca\xb9\xc5\x48\x1b\xec\xe9\xb0\x3c\x97\x63\x09\xa7\xac"
- "\xc9\xc6\x18\x9f\xa3\xda\x7d\x5e\xa8\x76\x2b\xbc\x19\x7f\xa5\xe3"
- "\xc6\x17\x54\x4a\xdc\xff\xe9\x67\x41\xc0\x0f\xbb\xb2\xf2\x43\xae"
- "\xac\x3c\x75\x96\xb3\x85\x2a\xcb\x44\x97\x07\xb6\x31\xfb\x6f\xf2"
- "\x79\x5d\xf6\xc7\xe1\x36\x72\xfb\xb8\xee\x7f\xbd\x70\x56\xc6\x2a"
- "\x0b\xe2\xd9\x5e\xaa\x95\xe9\x46\x99\xee\x16\xba\xec\xca\x92\x6d"
- "\x6f\xf3\xab\xb2\x45\xf2\x9e\xcb\x47\xd0\x41\x6b\x73\x3f\x1d\xd0"
- "\x76\x6e\x1f\xb7\x3f\xc8\x34\x01\x0d\xb4\xb6\x5a\xfa\xb4\x76\x72"
- "\x1b\x7f\x8f\x51\xe7\x75\xb4\x13\x6d\x95\xed\xec\x43\x3b\x8f\x97"
- "\x10\x05\x6a\xea\x9a\xbe\x48\xcd\xca\xe3\xf9\xa1\xfd\x0f\xb0\xa3"
- "\x2b\x5c\x84\x79\xa0\xf1\x97\x95\x2e\xc3\x8f\x60\x9b\x54\xfa\x30"
- "\x1f\xf4\x89\x2e\xb6\xf7\x3d\x36\xfc\x82\x75\xf2\xbb\xc3\xd2\x3e"
- "\xe6\x6f\xc4\xae\x46\x9b\xc2\x9f\x53\x65\x97\xe8\x82\x6d\x1a\xf0"
- "\x04\x91\xa7\x04\xed\xc7\xfc\xf1\xb4\x86\x3f\xe7\xdd\xfc\x77\xd5"
- "\x2e\x53\x29\xa5\x7d\xf4\xd8\x76\x83\xa7\x63\x3b\xe9\x6d\x79\x12"
- "\xf9\xd0\x1e\x0b\x60\x8d\x90\xdf\x65\x40\x3b\xf7\x01\xcf\x40\x44"
- "\x9b\x5a\xbb\x03\x80\xf9\x27\x1a\x5e\x40\x09\xaf\x9f\x43\x3b\xce"
- "\x91\xc5\x55\x09\xfb\xeb\x61\xb6\x17\x7f\xfc\xd9\xf5\x85\x94\xee"
- "\xa5\xc6\x2e\xc5\x77\x32\x6e\xd0\x8d\x67\xe8\x8d\xeb\xfa\x63\x03"
- "\x71\xbc\xb5\x94\x35\xf9\xcc\x47\x32\x46\x10\x8f\x19\xbd\xe0\x19"
- "\xf6\xa5\x59\x8f\x3a\x7a\x33\x47\x49\x7c\x9c\x39\x84\xe7\x64\x3c"
- "\xf3\x37\xa3\xd2\x78\x4d\x00\xe5\xf2\x04\x68\xc6\xf0\x61\xcf\xe5"
- "\xf0\x95\x69\x18\xf7\xac\xc9\x5b\x34\x45\xa4\x4e\x96\xbe\x0c\x4d"
- "\x95\x3e\xc3\x0b\x6f\x51\xd6\xb5\xe9\x94\x37\xa6\x0c\xa6\xbf\x79"
- "\xdf\x82\xe1\xa1\x6d\xa9\x67\xe8\xc0\xcd\xd1\x32\x66\x95\xba\x4c"
- "\xe9\xc1\x37\x3a\x79\xaf\xe0\x1a\xeb\x95\xfa\x8f\x7d\x9e\xae\xb1"
- "\x5c\x97\x8e\x07\xee\x0f\x0c\x86\xfb\xb5\xd3\xe1\x40\xee\x60\xb0"
- "\x76\xee\x91\xf1\xe2\xec\xbb\xf6\xb0\x3f\x62\x5d\xed\x31\x4b\x50"
- "\xda\x75\xcd\x07\xfc\xb4\x76\x3f\x25\xd9\xcf\xf2\x9a\xcc\x3c\x3a"
- "\x56\x97\x4d\xf5\x98\x93\x8b\x9e\xcc\xd4\x57\x2e\xb0\xef\x83\xd2"
- "\x21\x6c\x93\xf2\x59\x4a\xb1\x36\xd3\x5c\xb5\x47\xb7\xe1\xdf\xbc"
- "\xae\xe2\x22\x19\xd4\x37\x52\xde\x4c\x9a\x6d\x15\xc1\xdd\x86\x70"
- "\x49\x1d\xc7\xbc\x4a\xdd\xe3\xe5\x98\x57\x7a\x1c\x29\x69\xfb\x94"
- "\x43\xe6\x7a\x2c\xc3\x77\xae\xa1\x2c\x8e\x7d\x67\xf2\x29\x5b\x4e"
- "\x8d\xd7\x6f\x4e\x01\x7e\x66\x6d\xbf\xdf\xac\x62\x4b\xbd\xe1\x68"
- "\xb8\x80\xba\xd4\xfb\x15\x21\xcc\x61\x24\xdc\x35\x94\x5e\x77\x81"
- "\x32\xd9\x0e\x2a\xfa\x5c\xd9\x6c\x3c\x2f\x9c\xd7\x6d\x12\xa1\xff"
- "\x93\x49\xfb\xcf\x0c\xc4\xc6\xf3\xad\xe5\x78\x7a\xc2\x32\xd8\x5e"
- "\x49\xd5\x28\xe9\xf3\x23\xe3\xb1\xa8\x6f\xe8\x11\xed\xae\x21\x23"
- "\x7f\x33\x96\xd7\xf2\x78\x6d\x98\xcf\xfd\xa8\x31\xe4\xcd\x0e\x3d"
- "\x66\xd8\xa0\xfb\x88\x2e\x35\xdf\x09\x0f\xc5\xfc\xcb\xd7\xeb\x76"
- "\xaf\xe3\x31\xe3\x27\x56\x3e\x6b\x34\x30\xc7\xf9\x49\x02\xbf\xe3"
- "\x34\xf6\x85\xcf\x95\xb4\xfc\x49\x1e\xcf\x7b\xb4\x39\xe3\x47\xd6"
- "\xfe\x34\x65\xc3\xf0\x58\xc6\x38\x34\xa8\x75\xe4\x91\xbd\xce\x9f"
- "\x2c\xd5\xc7\x33\x1e\xd7\xd5\xf7\x6a\x7f\x52\xee\x35\xfc\x2f\xd7"
- "\x55\xf0\x33\x6b\xdf\x7b\xe6\xd8\x08\xb9\xc8\x7f\x50\x1f\xdf\xe4"
- "\xf7\x48\xb6\x8e\xbe\x6f\xed\x06\x1a\xb3\xf0\x6b\x49\x32\xf6\x06"
- "\x7f\x77\x54\x8d\xbb\x3f\x69\x1f\xd8\x4f\xcb\x95\xf4\x96\xdf\x1a"
- "\xe4\x39\x86\x41\xb0\xaf\x85\x4f\xf3\x83\x39\x3e\x70\xce\xfd\x27"
- "\x67\x07\xea\xf9\xa9\xb9\x7f\x1c\x45\x1d\xec\xd7\xc1\xf0\x95\x6d"
- "\xf2\x93\x66\xae\x83\xe7\x56\x6a\x7c\xfd\x49\xf3\x55\x6c\xb1\x4c"
- "\xa6\x6f\x58\x9b\x4f\x7a\xba\xff\xaa\xe8\x5b\x4e\x89\x93\x76\x93"
- "\xe5\xa3\x4a\xaf\x71\xa4\x8a\xe3\x64\x3a\x45\x3f\x5d\xc2\xef\x99"
- "\xd7\xdd\x13\x79\x2d\xee\xa7\x1f\x78\x78\xdc\xee\x2b\x4c\x9e\xcf"
- "\x73\x7d\x69\x8b\xff\xf4\xd0\x04\x94\x43\x5a\xea\x87\xe7\x02\xc6"
- "\xaa\x8d\x94\xc5\xdf\xf4\x44\xba\x5c\x27\xf0\xdd\xf4\x6c\xef\x6d"
- "\x69\x64\xb9\x6d\x37\x9f\x07\xf8\xe9\x09\xcc\x2f\xa5\x1f\xae\xac"
- "\xbf\xe6\x5d\x19\xfb\xef\xed\xcb\xde\x21\xaa\xaf\x0e\xae\xc6\x73"
- "\x66\xc4\xf3\x08\x7d\x2d\xdf\x4b\x07\x6d\x72\xef\x92\x7d\x9e\x57"
- "\xf2\x78\xbd\xd7\x31\xe0\x27\x74\x70\xb5\xc2\xe5\xe0\xea\x63\x36"
- "\xe2\xb5\xea\x13\xf5\x32\x8e\xd7\xc1\xd9\x5e\xfa\xc9\x36\x6d\x3d"
- "\xa6\x5d\xf2\x15\xdb\xbb\x2f\xf2\x1c\xec\xaf\xee\x9d\xc8\xc7\xe3"
- "\x44\x51\x39\xe5\x2a\x1b\x7e\x6f\x6d\x18\xfc\x13\xd1\xfe\x4f\x79"
- "\xad\x2f\xae\x4e\x7c\x9d\x48\x96\xa9\xde\xd3\x2e\x7d\xce\xaa\xdf"
- "\x2b\xc6\x35\x49\x54\xd7\x3a\x70\x4d\x06\xcf\xb9\x70\xe5\x31\x7c"
- "\x3b\xae\x69\xa2\xfa\x5d\xb9\x96\x81\x39\xac\x05\xf3\x84\xa4\x9e"
- "\x94\x3d\xc7\x07\x3b\xab\xc8\xb4\xf1\x6c\xfb\x1e\x29\x1f\xda\x9f"
- "\x2d\x6a\xf5\xc1\x3e\xdb\x4f\xb4\x36\x28\x2e\x5b\xbf\xc1\x67\x82"
- "\x7e\xb6\xc8\xbe\x9f\x7d\x57\x7e\x96\x19\xed\xbb\xf2\xb3\x3c\xfc"
- "\xb6\xe3\x77\x92\xe8\xe7\xc9\xb8\x2e\x1a\xf8\xfd\x3c\xaf\xd7\xf9"
- "\xb3\x45\xa0\xa3\xb4\xb1\xae\x4d\x27\x72\x79\xf4\x03\xcf\x8b\x52"
- "\xd6\xd9\x54\x7b\xdf\x6a\xc2\x73\x92\x48\xf9\x95\x4f\x6b\x6f\x23"
- "\x9e\xcd\x56\x3b\xc6\xb5\x14\xd0\x64\x34\xda\x9c\xf2\x5e\x31\xb7"
- "\x97\xf1\xed\x49\xa9\x75\x44\x9e\xd3\x64\x98\xdc\x7e\x5f\x0a\xca"
- "\x81\x96\x62\xe2\x83\xd9\x3a\x3d\x35\x3a\xf1\x7c\xca\xd0\x03\x18"
- "\xca\x0e\x42\x7e\xc0\xd0\xf3\xf7\xd3\x7e\x34\x7f\x5f\x03\x7d\x8a"
- "\x7c\x98\x13\x27\xe9\x67\x40\x7b\x9d\x3f\xcf\xfd\xb8\x94\xb4\xef"
- "\x3b\xff\x6c\x91\x3f\xa2\x2c\xc7\xbc\x88\x57\x1e\x75\x26\xa9\x3a"
- "\x6b\x1d\xa7\xe9\x67\x8f\xa8\x7a\x7f\x9e\x33\x98\x2c\x55\x8e\x85"
- "\x7d\x57\xe7\xe5\xb8\x18\x6c\x0f\x4d\xf3\x8c\xf1\x93\xa7\x2e\x8c"
- "\x31\x7f\x6f\x53\x6e\xa5\x70\x9f\xa6\x9f\x5f\x6c\x0b\x74\x5d\xe3"
- "\x78\xf8\x73\xe9\x93\x25\x2e\x3b\xc8\x53\x71\x97\xfc\x96\xf5\x39"
- "\x3a\x94\xe1\xf1\xc9\x98\xf0\x7c\x2f\x63\x8b\xb2\x9f\x06\x8f\x0d"
- "\x98\x63\xf7\xc7\x54\x0c\x23\x6f\x3d\xa7\x23\xcd\xe3\xf7\xc9\xd8"
- "\x8b\x03\x7e\xe4\x7b\xb6\x2b\x99\xfa\xc5\xa7\x32\xfe\x02\xe3\x1b"
- "\x7c\xc0\xcd\x38\x87\x5d\x7b\xb6\x73\x1b\xec\x98\xff\x79\x82\xbd"
- "\x6e\x96\x09\xeb\x3a\x5e\x2b\xfc\xc5\xfb\xe0\x3b\x11\xae\xde\x73"
- "\x8d\x63\xf3\x2f\xe4\x79\x20\x7b\x50\x9c\xf3\xa5\xec\xd9\xce\x36"
- "\x49\x55\xe5\x90\xa4\x59\x75\xc2\xdd\x93\xba\xb7\xa9\xd7\xf9\x8b"
- "\x93\x1f\x97\xab\xbe\xb9\x46\xb8\x27\xf5\xb6\xd7\x6b\x6d\x47\x9a"
- "\xdc\x9b\x9b\x54\xab\x62\x4d\x7a\xe9\x50\xda\xa0\x6b\x56\xe8\x67"
- "\xb6\x07\xd8\xc7\x55\xd1\xe2\xd0\xd2\xfe\xb1\xe1\x9a\xf0\x38\xb4"
- "\xf4\x2b\xd4\xd1\xa7\xd5\x71\xfc\xbf\x58\xc7\xf1\xab\xd5\x01\xdd"
- "\x70\xf3\x19\xfa\xe5\xa2\x6b\x9f\x3b\xfe\xd2\x2a\x79\xc5\xb5\xb7"
- "\x51\xe9\xcc\xb7\x3e\x09\x61\xfe\x16\x34\xbf\xd5\x24\xbf\x3b\x65"
- "\x20\x07\xc7\xdd\x0c\xba\xd6\xd9\x5a\xcb\x2f\x93\x7b\xdd\x1f\xa9"
- "\x93\x7e\x29\x63\xdd\xb5\x96\xf1\x9c\xed\x57\xbe\xbe\x9a\x5a\xea"
- "\x33\x1c\x3a\xc0\xf4\xde\x8f\x7e\xd8\x17\xc1\x67\x6d\xfe\x3f\x92"
- "\xa7\x98\xd7\x57\xdb\x79\x5d\xdb\x27\x52\xde\x6a\x0a\x43\x37\xc0"
- "\x46\x0f\x49\x7a\xc0\x7e\x51\xf3\xad\xba\x5a\x39\xdf\xf2\xc9\xf3"
- "\x89\x23\x64\x3c\x4d\xe7\x2a\x3f\xaf\x7d\x87\xfa\x0a\x39\x86\x48"
- "\x01\xc7\xd9\xe4\x75\x67\x61\xce\x39\xb9\x20\x98\x28\xe4\x7c\x0a"
- "\xb6\x3f\xc7\xd9\xf4\xf8\xbd\x14\x82\x1d\x5d\x77\x89\xd2\xea\x60"
- "\x7b\x42\x67\x9b\x59\xaf\x37\x68\xb1\x36\x77\x5e\x1a\x88\xb5\x59"
- "\xcf\x6b\x3d\x1d\xb8\xbf\x44\xc6\x50\x75\x5d\xed\xbe\x4b\x94\xbe"
- "\x7f\x1d\x65\xee\xe3\xb5\xbc\xbf\x29\xdb\x87\xed\x0a\x19\x77\x73"
- "\x55\x26\xaf\xe7\x0f\xd8\x3e\xeb\x39\x2e\x70\xbf\xde\x32\xca\x35"
- "\x90\x6b\xa2\xf7\x5b\x72\x1c\x0c\xba\xf6\xb4\x07\xcd\xef\x15\x83"
- "\x76\x0e\xf4\x41\x33\xe8\x97\x1b\xaf\x6f\x75\x3f\xac\xdd\x11\xb1"
- "\x52\x3f\x4e\x57\xfa\xdd\x4b\x6f\x27\x0d\xc6\x13\xa1\x7d\x85\x34"
- "\xa9\x9b\xb2\x95\x4f\xc3\x75\x18\x13\xdf\x2e\xe5\xfd\xf3\xca\xe7"
- "\xc8\x12\xda\xb7\x38\xc1\xfe\x63\x4a\xe4\xef\x9c\xf3\xaf\xf2\xef"
- "\xa2\x6b\x52\x29\x65\xf3\xfe\x03\xfb\x3d\x58\x37\xc9\xfc\xd3\xd3"
- "\x2b\x28\x6a\x6e\x91\xa7\x1c\xa3\xa6\x5a\xe7\xae\x7c\x7a\xd5\x73"
- "\xb6\x25\x65\x2b\x9e\x5a\x51\xba\xa2\x6c\x83\x0c\xa1\x90\x25\xff"
- "\xdd\x9f\xb1\x74\x91\xdc\x74\x8e\xb0\x2f\xd2\x07\xd6\xe3\xde\xbe"
- "\x18\xe4\xf5\x83\x6b\xa2\xd7\xdb\x52\xff\xd5\xc1\x96\xaa\x93\xbe"
- "\x3b\x4d\x49\x5e\xc3\x1f\xe5\xf7\xcd\x77\x20\x6d\x87\xe6\x63\x73"
- "\x5a\xcb\x17\x76\xbd\x9b\x0b\x3e\x9e\x76\x8a\x7e\x15\xe4\xfd\x10"
- "\xf4\x95\xcb\x53\x71\x86\xe7\x92\xd3\x78\x8d\xbf\x95\xd7\x32\xd6"
- "\x70\xfe\xa6\xcd\xec\xc3\xc0\xfe\x50\xe0\xc3\x03\xa7\xb4\x67\xed"
- "\x9b\xe9\xfb\x82\xab\x2c\x07\x82\xe7\x2d\x3f\x11\xa2\xf0\x75\xb1"
- "\xaa\x64\x9f\x38\x5f\xf2\x7a\x44\xfc\xb7\xa1\x28\x5f\x0d\x39\xf9"
- "\x36\x7e\x37\x09\x57\x86\x0d\xf2\x37\xe6\x0c\x35\xbd\xc9\x38\xcc"
- "\x2b\x11\xe7\x07\x62\x21\x34\xbd\x8f\xe7\x3e\xfc\xc2\xc2\x35\xce"
- "\x15\xb1\xbf\xc6\xef\x3e\xe5\xfc\xb6\xe5\xec\x13\xd6\x74\x96\xf1"
- "\x12\x35\xe3\xaa\x7c\xf6\x92\x44\xe4\x0f\x29\x3c\xdf\xb9\xce\xb3"
- "\xad\x8d\xac\x4f\xc9\xfb\x24\xf7\x33\x6c\xcf\xbd\xf3\x63\x61\xb0"
- "\x0b\xde\x83\xf3\x74\x05\x49\x9d\x57\x7b\xbb\x9c\x7d\x10\xea\x61"
- "\x6f\xd7\xa5\x92\xd9\x95\x4a\xc9\xbd\xce\x77\x72\xfa\xfd\x2f\xcc"
- "\x6a\xbc\xe5\x31\x8f\x63\x67\x43\x1f\xf5\xf2\xf8\xc9\x78\x30\x0f"
- "\x03\x66\x31\xef\xcf\xa9\xf3\x51\xef\x94\xc2\xb6\xb4\x5c\xbb\x3e"
- "\x7e\x47\x7e\x4f\x65\xd2\x0e\x2a\xe6\x35\x6d\xde\x77\xe6\xd8\xd2"
- "\x90\x57\x6d\xfd\xf0\x57\x7f\x92\xfb\xea\xd0\x29\xbc\x5f\xd2\x50"
- "\x09\x3b\xc1\x9c\x73\x82\xed\x9b\xa0\x93\x1c\xbc\xb7\x19\xbe\x74"
- "\xb6\x89\xf7\xa3\xe5\xd9\x42\x19\x93\xfd\xf7\xd4\x70\x91\x8c\x9d"
- "\xf4\x0e\x7f\xab\xdb\x3c\x40\xd7\x5f\xdd\xc3\x30\x44\x4d\x7a\x92"
- "\xa9\xc2\xb0\x9d\x61\x84\x2f\x9d\x9b\xa2\x97\x03\xed\x86\x71\x39"
- "\xf0\xc1\xcd\xb2\x1c\xe7\x95\x31\x51\xcc\x8b\x85\x79\x4f\xbb\xac"
- "\x53\x3d\x17\x08\xc8\x61\xf0\x52\xa8\x09\xf7\x8b\x98\x4e\xb8\x16"
- "\xca\xb5\x5f\xcc\xd7\x65\x2c\x1e\xf3\x9a\x62\x8f\xf7\xaf\x6e\x89"
- "\x0f\xfb\xe2\x96\x41\x67\x49\x7b\xf0\x57\xab\xeb\x3f\x27\xa3\xed"
- "\x19\xee\xbf\x77\xe5\xba\x3f\xf8\xe9\xa0\xc2\xef\xdd\x21\x3d\x35"
- "\x59\x79\x3d\xe6\xbd\x2e\xbf\x21\x89\x8e\x59\xf8\xec\xc0\xbb\xb9"
- "\xc7\x2c\x97\x31\xa7\xf8\x55\x8b\xd7\x78\x5b\xb9\xb2\x45\x54\x39"
- "\xde\x27\x86\x9d\xda\x95\x68\x31\xdb\xf1\xbe\x5b\xf7\xbb\x80\x4d"
- "\xda\xb5\x13\xef\x40\xdb\x66\xa6\x9b\x97\x9a\x72\xdb\x4a\xd5\xd9"
- "\x0c\x3c\x0f\xe5\xf3\xf6\x92\xd6\x5b\x9f\xed\x32\x6d\x71\xf3\xf9"
- "\xcf\x29\xa6\x60\xae\x81\xf7\x81\xf9\xdc\x3f\xc7\x42\xe0\xb3\xff"
- "\xbc\x96\xa7\xbd\xcf\x8e\x79\x9f\xa5\xbf\xef\x75\xbe\xbb\x54\x3f"
- "\xb3\xcf\x31\x95\xd8\xc7\x20\xa4\xf9\x0a\xca\x58\x43\x17\xd4\x3e"
- "\x2a\xfb\x0a\xf2\x3a\x22\x9f\x79\xe4\xbd\x4e\x94\xab\xeb\xf7\xdd"
- "\x94\x67\x7d\xde\x3d\xa4\xfb\x46\xe1\xfe\x48\xbf\x5f\x0f\x68\xd1"
- "\xe3\xda\xbb\xdd\x6f\x7e\x37\xd7\xef\xda\x73\x1c\xef\x4e\x40\x1f"
- "\x0e\x1a\x8b\x48\xce\xfd\x38\x26\xf3\xf3\x64\x08\xa7\x4e\x26\x8e"
- "\xd1\x71\xcc\x4f\xda\x39\xe7\xc3\x93\xb5\x33\xf1\x89\xe7\xe8\xdd"
- "\xbf\x0f\xec\x39\x86\xb4\xf5\xb2\xc3\x8b\x95\xbd\x76\x78\xb1\x5c"
- "\x2f\xab\xd9\x6b\x7b\x63\x63\xc0\xd0\xb4\xd1\x6b\x50\x67\x1f\x0e"
- "\x17\x78\xe9\xe8\x36\xdd\x6f\x05\xf9\xcc\x83\xc5\x5e\x13\xae\xa9"
- "\x27\x14\xcc\xf7\xe4\x7a\xe2\xc0\xfc\xe7\x3d\xe9\x1b\xc4\xfb\x83"
- "\x61\x1e\x2b\x53\xd7\x39\xa4\x0f\x86\xed\x02\xaf\xbb\x0c\x55\x73"
- "\xb1\xf7\xb4\x6f\x49\x49\x5f\xcf\x1b\xce\x44\x3f\xa7\xf2\xb3\xa2"
- "\xd9\x61\xaf\xbe\x06\xbf\xcb\x10\xe6\xb8\xdc\xc2\xde\x28\xfc\x1e"
- "\x9b\x9f\x60\x87\xf9\x3c\x18\x7b\x51\x87\xb0\xad\xe1\xb8\xf9\xef"
- "\xdd\xc8\xb4\x57\x32\xf5\xde\x4b\x12\x27\xe7\xbd\xc2\xce\xf6\xa7"
- "\x8f\x7d\x40\x2e\x10\xf2\xa5\x20\xdf\xcc\xe6\x8a\x6e\xf6\x63\x39"
- "\xce\x31\x0f\x3b\xb5\xba\x7d\x29\x53\x4f\xdc\x96\x4c\xc5\xbd\xce"
- "\xf7\x60\xff\xbf\x98\x7b\xed\x72\xfe\xde\xa2\xab\xd9\x22\x6a\x6c"
- "\xcc\xa5\xc1\xe6\x33\x3c\x5f\x9d\x88\xfa\xe7\x09\xc6\xff\x9f\x67"
- "\x06\x0d\x01\xd8\x0f\xc3\xc4\x37\x1d\xe5\xd0\x03\xc3\x44\x68\x23"
- "\xfa\xab\xc7\x02\x7b\xb7\x85\xda\x82\xcd\xd2\x47\x04\x32\x6c\xaa"
- "\xf4\x8b\x0b\x9e\xe0\x61\xe9\xdf\xab\xce\xc1\xff\xf3\x3d\x9e\xe0"
- "\x07\xd4\x66\xf3\x91\x7b\xcd\x1f\x31\x66\xfd\x73\x06\xe3\x35\xd1"
- "\xe6\xa0\x09\xe7\xf8\xfd\x7b\x9d\x6a\x9c\xfc\xe7\x5c\xed\x6a\xe6"
- "\xd8\x98\x91\x38\xdd\xff\xfc\xca\xa7\xcb\x56\xac\x5a\x39\x21\x7f"
- "\xd9\xba\x65\xa5\xd6\x87\x95\xcb\x5d\xd4\xf8\x95\x34\x10\xff\xfb"
- "\xd7\xc9\x3c\xa6\xb0\xad\xc2\x71\xc0\xaf\x16\x03\x5c\x8f\xff\x0d"
- "\xbb\x21\x9d\xd7\xf7\xfe\x27\x63\x80\xeb\xb6\x08\xc7\xff\x1e\x58"
- "\xeb\xfe\x75\x4b\xbf\x0c\x84\x3f\xea\xe5\x67\x3e\xfb\x19\x76\xfe"
- "\x73\x3e\xcb\x51\xbd\xf4\x4f\xfb\xf5\xec\xc8\x58\x49\xec\x8b\xc7"
- "\xeb\x23\x48\x5f\xac\x9f\xb3\x05\x2f\x62\xdc\xf8\x75\xe9\xc0\xb9"
- "\x9f\x5f\x97\xa3\xbf\x8f\x28\xf9\x95\x79\xb7\xeb\x7b\xc2\xda\x77"
- "\xd7\xe4\x1e\x76\xd8\xd9\x97\xab\xd6\x61\x7e\xbd\xb3\x3e\x3c\x2c"
- "\x49\xed\x01\xfc\xfa\xb0\x7e\xa6\x4c\xc9\xe6\x47\x9a\x6c\xfe\xba"
- "\xe5\x6a\xfb\xf6\x03\xb2\x71\x24\x69\x40\xae\xff\xa2\x95\x3d\x92"
- "\xf4\x65\x7b\xfe\x9a\x3d\x7c\xe3\x19\xfa\x97\x9b\x79\x6d\x06\xf7"
- "\xb7\xe0\x7e\x88\x1c\x6b\xa5\x7f\xfd\xfb\x9f\x69\xf7\xa8\xe3\xfd"
- "\xdf\x69\xf7\x5f\xc7\xfd\x3b\xda\xfd\x68\xdc\xbf\xa6\xdd\x43\x66"
- "\xdf\xdf\xa2\xdd\xa7\xe1\x7e\x85\x76\x0f\x9d\xff\xfe\x43\xda\xfd"
- "\x28\xdc\xdf\xa3\xdd\x7f\x0d\xf7\x63\xb5\x7b\xc8\xe0\xfb\xd7\x69"
- "\xfb\xa7\x49\xc0\xfd\xe2\xb5\xdb\xe7\x47\xdc\x6a\x8f\xee\x7d\x82"
- "\x2d\x74\x40\x8d\x19\xfd\x69\x69\xe0\xe9\xa5\x3a\x7d\x91\x7e\x84"
- "\xeb\x41\x7a\x96\x97\xde\xec\x8c\x48\x3f\xa8\xe5\x9f\x8d\xf1\xc6"
- "\x1b\x91\x5e\xa7\xa5\x2f\x86\x0d\x9a\x14\x91\xee\xd2\xd2\xcb\xa0"
- "\x17\x4b\x22\xd2\xb5\xb8\x0e\xef\xef\xf0\x52\xa3\x25\x22\xbd\x5c"
- "\x4b\x3f\xa0\xfb\x2b\x68\xe9\xa5\x5a\xfa\x51\xa4\x1f\x8f\x48\x2f"
- "\xd6\xd2\xa1\xff\x7f\xdd\x11\x91\xae\xd6\x15\xe4\x59\x34\x93\x38"
- "\x56\xc1\xb2\xf5\x7e\xc0\x4b\xfb\x8f\x44\xe4\xc9\x53\x65\xff\xc5"
- "\xec\xa5\xba\xc8\xb6\x4c\xd3\xd2\x33\xbd\xf4\xb7\xc6\x88\xf4\xec"
- "\xc1\x74\x55\x42\x2d\x15\x0f\xb6\x86\xc9\xdf\xa9\x92\x7e\x92\xd2"
- "\xb6\xfc\xcd\x32\x3e\xa7\x66\xda\x2f\x4e\x59\x2b\x85\x38\x45\xbf"
- "\xc9\xd7\xfc\x03\x9b\xd9\x5f\x4b\x9d\xf7\xfb\x4d\x8e\x3c\x03\xc6"
- "\x3e\xe7\x7c\x06\x70\x23\xa7\xfd\x8b\x8c\x7d\x32\xa9\xdc\xa1\x62"
- "\x72\x2a\xff\xd3\x6e\x39\x97\xd7\xf6\x39\x91\xe7\x33\x5e\xdb\x64"
- "\x38\xbc\xde\xe7\x29\xbb\x2c\x7d\x22\x79\x2e\xc5\x69\x3c\xa7\x95"
- "\xe7\xc2\x22\xe6\x54\x4a\xef\xff\x66\x59\x98\xcf\xed\x3b\xd5\xbc"
- "\x9f\x65\x91\xf3\xb3\x6f\x4e\x64\x5e\x2f\xfd\x46\xce\x4d\x13\x2d"
- "\x29\xff\xd6\xeb\xfc\xcd\xec\x81\xb3\x4a\xff\x52\xa7\xa5\xff\x09"
- "\xe9\x8b\x23\xd2\xb7\x0f\xae\xdb\xa1\xef\xcc\xe9\x05\x7d\x97\x84"
- "\x3f\x78\x49\x04\x76\xfd\x07\xf0\x5e\x2e\xcf\xdd\x7c\x23\xe4\x4a"
- "\x2f\xd6\x62\x60\x7c\x16\x5c\x27\x7c\xd0\xd9\xfc\x8d\x89\xeb\xe7"
- "\xfb\x7d\x34\xdf\xd6\x2b\x76\x3e\xc5\x7e\x76\x17\x65\x3c\x28\x7b"
- "\x37\xc7\xdf\x66\xdf\x2d\x3f\xef\x0f\x25\xb7\x61\x8c\xab\x5f\xce"
- "\xef\x3f\xa5\x79\x25\x3e\x6a\x2d\x09\x51\x3d\x60\xef\x7f\x4a\xf7"
- "\x9b\xfc\x4d\x7f\xfc\x1f\xc6\x81\xeb\xb3\xcb\x6f\xc5\x1c\x9d\xc0"
- "\xb8\xf2\xb7\xf0\x44\xf5\x7b\x36\xf1\x5b\xb6\x65\xf7\xb8\x4c\x5b"
- "\xc8\x8a\xb1\x7d\x0a\xee\x1d\xea\x87\x77\x48\x1f\xac\x4d\x4a\x96"
- "\x8f\x6a\xfe\x98\xe9\xed\x4a\x5f\x1c\x2d\x13\xff\xc4\xe7\x8e\x8e"
- "\xf2\xf9\xa7\x12\xd8\xcd\x71\xfd\xaf\x36\xef\x27\x43\x5f\x0d\x6c"
- "\x93\x73\x47\x0c\x4a\x3f\x7d\xb0\x34\x6c\x48\xda\xc2\xeb\x8a\xf2"
- "\x3b\x11\x35\x93\xcd\x87\x56\x06\x0c\xad\x1b\x3b\x69\xd3\xd7\xc8"
- "\xb2\x38\xc0\xbe\xe4\x47\x3f\x1f\x59\xc6\xb1\x45\xf7\xda\x60\x87"
- "\x1a\xde\xc5\xfb\x0f\x57\x1e\x31\x04\xa5\xbd\xf2\xc1\x52\xb9\x16"
- "\xe5\xca\xe9\xe4\x31\xc4\xd3\x11\xe2\xb3\x47\xd2\x4e\x86\xfe\x4f"
- "\x0a\xad\x2f\x49\x0d\xae\x2d\xb9\x7e\xff\x1a\x4a\x0e\xad\xcd\x4c"
- "\x7b\xe5\x12\x4d\xd1\xc7\x1f\xcc\x61\xb3\x45\xaf\x65\x78\x15\xc6"
- "\x14\x9e\xe3\x8e\x4c\x30\xcb\x3d\x37\xbe\x0f\x1b\xde\x48\xaf\x5f"
- "\x77\xf5\x6f\xde\x84\x30\xb7\xe5\xd8\xd3\x8c\x4b\xbc\xb6\xee\x78"
- "\x1d\xf3\x65\xed\x9c\x6c\xe5\xe7\x34\x0a\xf3\x16\xc3\xc8\x8b\xc2"
- "\x7d\xa6\x94\x0c\xfc\x9d\x90\xca\x65\x72\x1d\x69\x48\x6b\x49\x90"
- "\x3c\xe5\x7f\xa6\xca\x35\xdc\x47\x1f\xbc\xcf\x76\x1a\xfb\x4d\x22"
- "\xbf\xf9\x0c\x7d\xf0\x3b\x53\x00\x63\x46\x00\xb6\xf4\x33\x3c\x27"
- "\xfc\xe0\x53\xbf\x8c\x7d\xfb\xa1\x95\x7d\xc7\xdd\x6b\xee\xe3\xb4"
- "\x2f\xec\x9f\x4b\xdf\xd8\xe3\x4a\xb6\x3e\x38\xc1\xcf\x76\x3e\xb7"
- "\x9b\x3a\x35\xf9\xad\xcb\x81\xff\xcb\xde\xf7\xc0\x45\x55\xa5\xfd"
- "\x9f\x19\x10\xc9\x48\x06\x17\x09\xcd\x6a\x6c\xb1\x9d\xca\x3f\xd4"
- "\xea\xbb\xae\x61\xe2\xbf\xd6\x5c\x4d\x74\xfd\x83\xe5\x1f\x34\x29"
- "\x74\x45\x47\x44\x44\x44\x40\x34\x5e\x6b\x15\xc7\x42\x16\x13\x75"
- "\xea\xc5\x7d\xa9\xfc\xc3\xee\xda\xfb\x62\x6b\x3a\x26\x16\x28\x30"
- "\x58\x58\x68\xa8\x23\xa1\x21\x8b\x36\xc9\x28\x83\xce\xdc\xfb\x7b"
- "\x9e\x73\xee\x9d\x3b\x77\x98\x01\xc7\x34\xdb\xdf\xbe\x7c\x3e\x7c"
- "\xee\x9c\x7b\xcf\x3d\xf7\xdc\xf3\x3c\xe7\x7b\x9e\xe7\xb9\xcf\x79"
- "\x9e\x4e\xcc\x56\xf1\xc9\x49\x61\x7d\x88\x61\xfa\xd7\x27\xd5\x9e"
- "\x78\x97\xd3\x69\xb4\x3c\xc6\x46\xcf\xb7\x91\x17\x2d\xbc\x89\x7e"
- "\xcf\xc4\x78\x05\xc9\xc3\x0c\xfc\x75\x1d\x61\x7b\xec\x0e\x6e\xe1"
- "\x36\x69\xb4\x2c\x5e\xe5\xc1\x4d\x84\xf9\x22\xc1\x1a\xa9\xc9\x60"
- "\xb6\x5c\x8d\x8e\xd9\x36\x35\xfa\x35\x3d\xd1\x57\xf9\x60\x5e\x73"
- "\x90\xa6\x08\x8e\x0b\x9b\xbb\x3d\xa7\xf7\xbc\x1e\xf5\xd1\xab\x1f"
- "\x21\xc1\x68\x53\x47\xbf\xe3\x1d\xcc\xdf\x18\x9e\x71\x28\x9f\xdf"
- "\x44\xaf\x3d\x5a\xa7\x25\x3e\x4c\xdf\x3b\x78\x69\x40\x3e\x01\xb9"
- "\x82\x3c\xc0\xab\x34\x51\xd4\xc7\x4b\xa7\x89\x31\x36\xf1\x06\xf4"
- "\x2d\x64\xdf\x3e\x0e\x15\xf2\x41\x9a\x28\x56\xff\xd0\x6f\x2b\x9b"
- "\xe0\x1d\x54\x1a\xb5\xd1\x7a\x59\x90\x09\x0f\x01\xef\x6b\xd4\xbc"
- "\x4e\x13\xce\xf6\xbf\x1f\x7a\x43\xc4\x55\xc6\xa3\x87\x56\xb1\x71"
- "\xeb\xa3\x67\xe3\x76\xa8\x50\x58\xaf\x1e\xc5\xdf\xb0\x76\x87\xb3"
- "\x6f\xf5\x87\x12\x45\x19\xd9\x24\xd4\xc1\x7b\xe0\x77\x34\xc3\xda"
- "\x43\x39\xf0\xee\xc2\x1e\x86\x43\xf4\x7b\x21\xbc\x1f\xac\x59\x07"
- "\xab\xf0\xbd\x3c\x61\x2b\x1d\x8b\x54\xe2\x03\x7d\x8e\x44\x9f\x52"
- "\x94\x53\x8c\x96\x61\x06\x96\xcb\xf2\xf0\xd3\x74\x1f\x30\x3c\x07"
- "\xe8\xa3\x44\xdc\xc4\x7d\xcb\xd8\x9e\xd4\x7f\x43\x77\xb1\x2f\xf8"
- "\x3c\xbc\x06\xef\xaa\x46\x7a\xc2\x58\x85\x63\x1d\xa4\xeb\x45\x2d"
- "\xda\x38\xae\xc1\x98\xa1\xbf\xd0\xe1\x48\x1c\x13\x36\x66\x87\x1d"
- "\x39\xcf\xd9\x78\x1d\x0e\x92\x8f\x07\x2b\x73\x2a\xc0\x86\x04\xf4"
- "\x1b\x39\x1c\x29\x8c\x5f\x93\xf0\x7c\x9a\x87\x93\x5d\x33\xec\x74"
- "\xba\xf7\x61\x47\x5d\x96\x37\x55\x89\xdf\x60\xd1\x26\xcf\xf8\xd5"
- "\x50\xe5\x74\x5f\xd5\xec\x1f\x50\x46\x0e\x53\x63\x9e\x4b\x1c\xf3"
- "\x96\x4c\x43\xbd\x34\xde\xac\x1d\x37\xcf\x78\x44\x7c\x86\x89\x18"
- "\x0a\xc4\x7e\xc2\x6f\x61\x0d\x3e\xac\x91\x68\x62\x18\x23\xde\xb7"
- "\x9d\xee\x25\x3a\x64\xc1\x3d\x90\x6e\x71\x10\xbf\xfd\xc0\xa8\x54"
- "\xda\x86\x19\x28\x3f\x92\xc3\x7a\xf4\x89\x85\x71\x8d\x64\x3c\x74"
- "\x78\x2d\x5b\x0b\x0f\xeb\xb1\x4d\xfc\xae\xc2\xe2\x9d\x1e\x06\xcc"
- "\x3a\x24\xe4\xea\x3e\xbc\x4b\xe8\x03\xe8\x7f\x07\x0b\x5c\xf5\xba"
- "\x11\x73\xe6\xd1\xcd\xbe\xfd\x96\x69\x5d\xf7\x15\xf9\x4b\xfb\x3a"
- "\x0f\x37\x38\xed\x8b\x15\xf6\x1a\x7e\x3a\x10\xf4\xd4\x7d\xd9\x2c"
- "\x2e\x6e\x71\x36\xd0\x2c\xfd\x1a\xe9\x89\xf9\x61\xd2\xb4\x7c\x63"
- "\xa5\x16\x74\x6b\xd5\xa0\xbe\xbc\x6e\x50\x78\xda\x35\xd2\x05\x7d"
- "\x2e\x10\x6f\xd0\xde\xc3\x07\xc1\xf9\x4d\x83\xc2\xa5\xbd\x77\x25"
- "\x26\xd0\x6d\x0b\x37\x80\x2e\x9b\x7e\x99\xf4\x64\x3e\x14\x9f\x2e"
- "\x11\xec\x3e\xef\x70\xba\x41\x03\x71\x5f\x67\x25\x68\x84\x7c\x7a"
- "\xdc\x3b\xdc\xa6\x41\x03\xa1\xdd\x51\xe9\xf1\xa4\x1b\xae\x6f\xe8"
- "\xab\xcb\x78\xa6\xc4\x00\xed\x8e\xc2\x98\x6b\x1c\x1f\xad\x80\xe7"
- "\xaf\xe3\x54\x43\xaa\x36\x70\x84\xfa\x88\x03\x9f\x29\xeb\xc8\xa7"
- "\x87\xe1\xf9\xeb\x30\x6f\x25\xda\x7c\x8c\x56\xe8\xe7\xa6\x41\xeb"
- "\xe0\x5a\x57\xb8\x86\xf6\x1e\x0e\xe3\xaf\x61\x3c\x77\x68\x3f\x14"
- "\xdb\x87\x67\xad\x63\x7d\x37\xd3\xba\x75\xe4\x48\x6f\xac\x23\xc6"
- "\x75\xe3\xd2\xa3\x7d\xf0\x3a\xee\x13\xb6\x63\x5e\x04\x90\xce\xd9"
- "\x3d\x35\x8e\x7b\x04\xf9\x19\xe6\x72\xc9\x7e\xfe\xad\xe7\xd0\xf7"
- "\xa7\x18\x7d\x52\x99\x2c\x5b\xb2\x4f\x98\xeb\x20\x1f\x97\x7c\x24"
- "\xfc\x0e\x70\xd4\x4d\x8f\x26\x69\xad\x24\x94\x7e\x57\x5d\xee\x03"
- "\xd8\x5b\x12\x80\x39\x16\x9c\xda\x3c\x8f\xed\xad\xc7\x78\x71\xb1"
- "\x24\x00\x70\xf9\x7e\xe8\x37\xe6\x47\x39\x8f\xb6\x5a\x61\x6c\x4c"
- "\x40\xa7\xa2\x8d\x2c\x26\xe0\xbe\x0d\xc0\xfb\x69\xab\x40\x1e\x58"
- "\x45\x02\x56\xd9\x49\x2f\x7c\x4f\xa0\x5b\x03\xfa\x55\xa3\xee\x86"
- "\x63\x23\xd0\xb0\x00\xde\x65\xd7\xaa\x38\xbe\x7e\x55\x13\xdf\x50"
- "\x11\x57\x43\x60\x9d\xe9\x56\xa9\xad\xc2\xd8\xe4\xe7\xf1\x5d\xd1"
- "\x46\x09\x63\x0a\x72\x26\x3c\x63\xd3\xa0\x5d\xb8\x57\x86\xda\x09"
- "\x94\x87\x8b\xc5\x7d\x45\xdb\xe9\xde\xa3\x92\x70\x87\xed\x2b\x89"
- "\x2f\x11\xfa\x52\xca\xe1\xef\x24\xba\x3f\xb1\x0b\xea\x3f\x68\xd3"
- "\x98\xbd\x42\xef\xd8\xa3\xc1\x6c\x03\x25\x0b\x9d\xe2\x72\xd1\x7b"
- "\xd1\x46\x80\xf7\x4e\xb0\xf1\xd7\x36\x0a\x75\xf1\xde\x09\x2b\x66"
- "\xf3\x78\x2f\xdc\xa3\x77\xdc\x23\xdb\xe3\x73\x84\xc9\x15\x30\xb6"
- "\xf8\xdb\x0c\x63\x29\xf8\x50\xa9\xd9\xf7\xef\x92\x1a\xf1\x9b\xb3"
- "\x89\x7c\xaa\x43\x7e\x72\x1f\x4f\xfc\x28\x91\xc7\x48\x3a\x5a\x85"
- "\xf1\x9b\xe0\x7c\xa8\x18\xcb\x08\x7e\x87\x41\x5b\x4c\xce\x76\x8a"
- "\x51\x96\xed\x14\xef\x30\xdd\xcc\x7f\x8b\x7c\x02\xb8\xe2\xd3\x48"
- "\x8e\x82\x5c\x34\xa4\x8a\xed\x93\x3a\x7a\x18\xfb\x59\x47\x8e\x62"
- "\x2c\x85\x40\x16\x4b\xe1\xe8\x6a\x01\x3f\x0c\x13\xec\xb6\x40\x13"
- "\x3c\x13\xf7\xfc\x38\x95\x93\x01\x4f\x54\x50\xef\xaf\x2c\x1e\xe0"
- "\x51\xad\x4b\x7d\xbc\x9e\xe1\x52\x8e\x74\x29\xab\x2d\x30\x6f\x3c"
- "\x7d\x5b\xdf\xd0\x93\xda\x0f\xeb\xbb\xae\x26\xda\xf4\x4b\xc4\x07"
- "\x78\xe5\x02\xf6\xad\xb2\xa1\x09\xdf\x29\x90\xcf\x0c\x27\x68\x03"
- "\xa5\xb2\x25\xac\xe9\x75\x61\x50\xe7\x12\x09\x41\xbf\x6f\xcc\x91"
- "\x02\xf5\x1b\x59\x1c\xf3\xcf\xa7\xcf\x58\xd6\x85\x70\xaf\x45\xdf"
- "\xcf\x2b\x27\xe2\xf7\x44\xff\xdd\x37\x4c\x9d\xf0\x3b\x57\xda\x16"
- "\xe0\x49\x3b\x09\x01\x1e\xab\xc7\x7c\x74\x70\x4f\xd3\x7f\xdd\x68"
- "\xe8\x64\xb4\x9d\x26\xda\x05\x44\xd9\x48\x3e\x1f\xe7\x9b\x4a\x7c"
- "\x37\x5e\x24\x2a\xa0\xab\xed\x88\x6d\x30\x11\x63\x21\xe4\x77\x63"
- "\xfb\xb8\xf3\x01\x5f\x97\x86\xf2\xd6\x96\xcc\xcf\x0a\x41\xf7\xca"
- "\x11\x75\xec\xf5\x2c\x0f\x8a\x2f\x3c\xbf\xbb\x52\x88\xfb\xc0\xc6"
- "\xf6\xb3\x0b\x6c\x9f\x55\xf0\x6b\x70\x4f\xad\x24\x7f\x7f\xce\x72"
- "\x8d\xeb\x86\x08\x6b\xdd\xe7\x71\x47\x40\x82\x5f\xcb\x7c\x14\x82"
- "\x5b\x32\x3f\xf7\x77\xf8\x28\x50\xbb\xd5\xe7\x71\x40\x43\x0b\x93"
- "\xcd\x87\x00\xbe\xfb\x0b\x73\x10\xcf\x87\xa9\xf1\x5e\xb8\x2f\xd0"
- "\x42\x6d\x4c\x9f\x8f\x92\x78\xed\xf3\x00\xc4\x7c\x78\xa7\x00\x13"
- "\xf9\x2c\x03\xdf\x0b\xc7\x04\xea\xf9\x42\x79\xed\x91\x02\x0f\x71"
- "\x61\x55\x61\x55\x36\x6a\x03\xf9\x73\x1c\xf0\xd3\x65\xa0\xc1\x2f"
- "\x30\xf6\x93\x11\x9e\x53\xb1\xfd\x06\xa9\x08\x6d\x26\x95\xf0\x1b"
- "\x7d\x91\x0d\x0b\xbe\x25\xf5\x6a\xf7\xeb\x0d\xac\x59\x51\xd0\xe7"
- "\x18\x6c\x0b\xb1\x00\xfd\xb7\x8c\xa9\xb0\xfe\x98\xa1\xad\x7a\x42"
- "\xdb\xa8\xe0\x1a\x48\x45\x32\xea\x59\x1f\x69\x2b\xb7\x9f\x26\x95"
- "\xa1\x5f\xd2\xe7\xa0\x4c\x68\x48\x68\x6e\xaf\x6d\x2d\xb4\x9d\x21"
- "\xb4\xdd\x04\x6d\x07\x7b\x6e\x3b\x57\xe7\x65\xdb\x5e\xf4\x3b\x37"
- "\xc3\x9b\xb6\x41\xde\xad\xc6\x3c\x37\xb8\xaf\x2b\xad\x07\x79\xc0"
- "\x7e\x1d\xe3\x7e\x3e\xca\x33\x7f\xd8\xb2\xa1\x74\xef\x57\x26\xdd"
- "\x3b\x53\x45\xf7\x80\x5d\x21\xd4\xa7\x91\xed\xfb\xba\x40\xd0\x1f"
- "\xa2\x25\xb3\x4c\x23\xe9\x4a\x8e\xef\x54\x20\xab\x96\x8d\x63\x7e"
- "\x8f\x03\x85\x38\xe4\x65\x18\x37\xd2\x83\x9e\x37\xc8\xc6\xfc\x67"
- "\xcb\x5e\x17\xed\x2f\xcd\x41\x83\x6c\x42\x5b\x6a\x57\xbb\x9e\x98"
- "\x90\x36\x36\x39\x51\xcc\x6d\x9b\x28\x6c\x3f\x9d\x14\xfb\x4a\xec"
- "\xfc\xa4\xd8\x79\xea\xc9\xcb\x12\x16\xf5\x5b\xfc\xea\xab\xea\xf1"
- "\xb1\x4b\x97\xce\x79\x2d\xb6\x0b\x99\x9c\x30\x67\xd1\xd2\xf9\x68"
- "\x7b\x53\xab\x47\xfd\x7a\x76\xdc\xe2\xc4\x7e\xcf\x8d\x0a\x77\xb1"
- "\xbd\xe1\x5e\xc5\x5a\x94\xc1\x61\xed\x08\x49\xb3\x93\x20\x8c\xe3"
- "\x13\xb8\x82\x37\xac\x04\xfd\x0f\xf8\xaf\x11\xd7\x29\x5c\x1b\x50"
- "\x37\xc0\x18\x82\x80\xdf\xe5\x5b\x73\xf9\xaa\x8b\xe4\x1b\x3b\xc8"
- "\x95\x35\x3b\x58\x3c\xbc\x5a\xd0\xc9\xcd\x2c\xdf\xe2\x37\xa7\x30"
- "\xd6\xdd\x9f\xe0\x9c\x39\x68\x88\x65\xe3\x59\xe2\x0b\xeb\x1a\xe8"
- "\x25\xc7\xf2\x78\x65\x67\x7e\x7d\x08\x5f\xc2\x7f\x1b\x4a\x84\x18"
- "\xe2\x4a\xa3\xc9\x8a\xdf\xf3\xfd\x27\xd8\xd2\x79\xc4\x53\x36\xb7"
- "\x8e\x6d\x61\xe3\xa2\xd1\x32\xbf\xe2\x6f\xf6\xa3\x0e\xb3\x86\xe6"
- "\xc3\x3c\x06\xf3\xff\x13\xad\x84\xd3\x5f\x96\x08\xb2\x23\xc6\xf8"
- "\x58\x5e\x07\x65\x16\x67\xe4\x58\xb5\xdc\x57\xa3\x1c\xd6\xe5\xaf"
- "\x1b\xd8\x3f\xde\x53\xe3\xcf\xfe\xf1\xb7\xf3\xff\x37\xf9\xec\xdf"
- "\xf5\xfc\x8f\xfd\x17\x9f\x7f\xbb\xf7\x57\xa7\xb6\xff\x7f\x2b\xcf"
- "\xc7\xe3\xbd\x7c\xff\x1f\x73\x7f\xf5\xda\xf6\xfe\x91\xdf\x80\xb7"
- "\x6a\xff\x74\x96\xf8\x03\x7f\xe6\x6c\x98\x0b\x3c\x7d\x86\x84\xa6"
- "\xda\xf8\xfa\xf4\x99\xa4\x57\xda\x25\x82\xf9\x08\x1b\x12\x93\xf9"
- "\xfa\xb4\xeb\x28\x93\x56\x4f\x01\xfe\x2d\xce\xae\x23\x01\x1b\xea"
- "\x88\xaa\x32\x11\x73\x15\x63\xac\x2f\xc0\x99\x26\xf8\x87\x72\x79"
- "\x92\x95\x1c\x37\xff\x80\xfe\x4d\x86\xca\x18\xc0\x9d\x5a\x42\x90"
- "\x7f\x03\x62\x48\x70\x7e\x08\x7f\x80\xcf\x5c\x0c\xeb\xd9\x62\xcc"
- "\x4b\x58\xbd\x97\x8b\xec\xb4\x37\xa5\xb4\x93\x7a\x2e\xae\xf1\x15"
- "\xd3\x05\xde\x3c\xca\xf6\x14\x7d\x49\xf7\x33\xc0\x3c\xa9\x66\x76"
- "\xf5\xea\xe1\x6c\x3d\xaf\x0e\x12\xec\x4d\xf0\xfb\x4b\x2a\x2b\xc2"
- "\x7b\x14\x63\xfe\x56\x6c\x73\x0f\x57\x4c\xf3\xb7\xee\x4d\x89\xec"
- "\x94\x3a\x87\x28\x2b\x4d\x8d\x04\x73\x3b\x61\x2e\x50\x98\x77\xbb"
- "\x60\x9e\x15\x6d\x0b\xe1\x75\xd0\xbf\xf5\xdb\x43\xf8\x75\xd0\xa7"
- "\xc2\x96\xcc\x8a\x52\x58\x7b\x0e\x08\xdf\x5d\x0c\x30\x2f\x76\x6d"
- "\x80\x3a\x13\x96\x91\x47\x37\x40\xbd\x6c\xa8\x87\x72\x32\xeb\xdf"
- "\x89\x0d\x30\x06\xfb\xe0\x99\x55\xea\x59\x58\x36\x52\xdf\x1b\x7c"
- "\x36\xbc\x87\xba\x8e\x18\x43\x61\x6d\xf3\xc5\x67\x88\xcf\x6d\xc9"
- "\xac\x04\xfc\x2b\x4d\xa4\xdf\xce\xe0\x3c\x6b\xa7\x72\x32\x9b\xaf"
- "\x83\x26\x6f\x94\xf2\xeb\x4e\xde\x90\x02\x6b\xfa\x0d\x1a\x03\x33"
- "\x07\xed\x2d\x28\x63\x50\xb9\xc2\x4e\x02\x99\x7d\x00\x64\x8b\x38"
- "\xc0\x01\x90\x27\xa8\x2f\x34\xc8\x12\xd0\x97\x1c\xcc\xf3\x88\xd7"
- "\x41\x6f\xdb\x07\xeb\x72\x11\xca\x01\xb3\xae\x8d\x25\x68\x63\xc7"
- "\x1c\xad\x4b\x67\xf0\x56\x96\x33\xa7\x72\x9f\x28\x0b\x20\x06\xe1"
- "\xfa\x0f\xb2\xb0\xef\x4d\xa0\x21\xf0\x40\x29\xc8\x16\x41\x8d\x74"
- "\xe5\xa0\x63\x5f\x4a\xd7\xfc\x24\x1a\xb3\xd9\x87\x61\x74\xa5\x1d"
- "\xde\x2f\x00\x9e\x01\x63\x56\x4b\x6d\xe1\x0c\x63\x8c\x01\xe2\x3a"
- "\x8e\x3a\xaf\x09\xda\xe0\x01\xcb\x84\x6b\xf0\xfe\x47\xc5\x5c\x77"
- "\x20\x57\x54\x1e\x10\xc6\xac\x9c\x7d\x43\x36\x52\xdd\x1f\x64\x2e"
- "\xc1\xb6\x59\x59\x8a\x72\x85\x70\xaf\xc3\xff\x11\xf5\x72\x0e\xe4"
- "\x0a\x1c\x2f\x1c\x27\x68\xa7\x54\xc0\xb1\x6a\x26\xbf\x9c\x58\x26"
- "\x7c\xb7\xc4\xfc\x17\x6b\xa5\xf1\x37\x16\x3a\x8f\x3f\xdc\x2f\xe8"
- "\x8d\x27\x7a\x3b\xd1\x0e\x74\xa3\x2a\x2b\xda\x49\xa1\x8f\x07\x98"
- "\x8d\xc7\x78\x1e\x63\xa5\x61\x6c\x66\x18\xe3\x03\xeb\x31\x0e\x30"
- "\x60\xf3\x9a\xb3\x04\xbf\x7d\x83\xfc\x54\x75\x9e\xc9\xa7\x55\x19"
- "\xc8\xc3\x50\xa6\x76\xf8\x7a\xe8\x17\xb6\x07\xe5\x89\x70\x04\x39"
- "\xb6\xea\x05\xe7\x7c\xca\x52\x2e\xe5\xaa\x48\x69\x3f\x82\x71\x21"
- "\xd3\x9f\x8d\x0b\xd1\x06\x46\xeb\xdf\x8c\xc3\xbe\xd5\xe2\xbc\x14"
- "\xdf\x15\xf3\x2a\xc3\x79\x94\xfd\x6b\x91\x6e\xe2\x79\x8c\x21\x0c"
- "\x74\x0a\x80\x67\x9d\x12\xfa\xb4\x0f\xca\xfe\x50\x0e\xa3\xf6\xfd"
- "\x9b\x74\xbf\x79\xed\x86\x34\xe9\x1e\x9c\x37\xc0\xc3\x81\x50\xe7"
- "\x04\x1c\x79\xb1\x2e\xcb\xbd\x5c\x15\xfd\xf6\x0d\xb4\x81\x55\x69"
- "\xc5\xdc\xcb\x98\x77\x19\x31\x63\xc3\x2c\xd9\xd8\xe3\xd8\xec\x02"
- "\x5a\x51\xbe\x3b\x62\x2b\x86\xf1\x3e\x01\xf2\xff\xc7\xd1\xec\xbd"
- "\xaa\xa2\x85\xfe\x19\x58\xfc\x94\x32\x1d\x8d\xf7\x4b\xf5\xa1\x13"
- "\x91\x0e\x7d\xc8\x21\x5b\x56\x45\x23\x4f\x42\x5b\xe5\x48\x7f\x94"
- "\x13\xa1\x5e\x9c\x83\xb7\xe8\x7e\xdf\xaa\x06\x94\x2f\x85\xfe\x23"
- "\xbf\x94\x09\x63\xa7\x73\x9e\x77\xce\xf3\x1c\xda\x00\xfd\xff\x73"
- "\x07\x0f\x88\xf3\x9a\xf1\xc1\x17\x42\xee\xa7\x3f\xa3\xcd\xba\x0a"
- "\xda\x35\xa0\x0c\xce\xd6\xd5\x2f\xf6\x1d\xa9\xb5\xa1\x0d\xbd\x1a"
- "\xca\x30\xbf\xbf\xd0\x35\x77\x7b\xce\xb0\x96\xe2\xc6\x17\x30\x3e"
- "\x03\x68\xae\x12\x1c\x17\x71\xbe\x6e\x9c\x85\xba\x5f\x38\x9b\xb3"
- "\xc9\xc0\x0d\xd6\x26\x22\xf8\xfa\xc3\x9c\xbd\x80\xdf\x4e\x1b\x81"
- "\x87\xfc\x71\xfe\x02\x7d\x77\x61\xbc\x69\x18\xc7\xaa\xb5\xb9\x74"
- "\xde\x06\xe0\xbc\xbd\x89\x31\x24\xe0\x39\x25\x31\x91\xe4\x48\xb2"
- "\x81\xce\x63\x8c\x1f\xb2\x15\xc6\x0e\xf3\x1c\xc3\xb3\x53\x45\x1f"
- "\x65\xe4\x11\x8c\x17\x22\xf0\x49\x09\xce\x65\x61\xec\x7c\xa1\x5e"
- "\x81\x38\xf7\x9c\xe8\x4f\xeb\xb8\xcc\xb7\x40\x36\xdf\xbe\xa8\x16"
- "\xc7\xda\x46\xe7\x71\x95\xd6\x06\xf3\xd8\x79\x4c\x71\x3c\x71\x5c"
- "\x5b\x32\xbf\x84\xf7\x2f\x0d\x15\xc7\x54\x1a\xcf\x2f\x97\x08\x34"
- "\xaf\x62\x36\xa6\x2f\x07\x0a\xf6\x27\xc7\x18\x0a\xfc\x87\xeb\x40"
- "\xf1\x1a\x7c\x77\x58\x1b\xf0\xf9\xc8\x23\x5b\x05\xcc\x2a\x31\x23"
- "\x8f\x7c\x09\xf3\xff\x0f\x1a\x09\x3b\xaa\x12\xa9\xce\x02\x74\x62"
- "\xf4\xf9\x72\x1b\x8d\xb7\xe1\x06\x3b\x4c\xe4\xc4\x0c\x09\x9f\xbe"
- "\xdc\x25\x8e\x83\xc8\x93\xe2\xbc\x87\x36\x5a\xe5\xf8\xf3\xe5\x19"
- "\x68\xa3\x1b\xe2\x9b\x24\x43\x7d\xd9\x24\xc7\xb7\x2f\xab\x11\xdf"
- "\x90\xaf\xb5\x49\x68\x63\x63\xeb\x95\x89\x54\xa4\xca\x31\xa9\x62"
- "\x09\xf3\x0d\x60\x32\x17\xf2\x96\x76\x16\xab\x8f\x6b\x18\xd4\xa7"
- "\xba\xb8\xb0\xe6\x61\xcc\x2e\x3c\x17\x27\x8c\x57\x2d\xd4\x2f\xc1"
- "\x7d\x93\x18\x2b\xe1\xfe\x5a\xa6\xeb\x01\x4e\x1f\xc0\xf8\xdd\x50"
- "\x4f\x53\x09\x4f\xbb\x99\xc5\xb0\x5b\xc4\x0a\xfe\x95\xe8\xfb\x97"
- "\x37\x90\xfb\xb4\xcf\xf1\xdf\x5e\x24\x27\x71\x3f\xab\x15\x63\x48"
- "\x42\xdb\xea\x8b\xe4\xeb\x13\xf0\xdc\x60\xe1\x18\x0a\xc7\xfd\x70"
- "\xec\x01\xc7\x77\xe1\xf8\x10\x1c\xdf\x80\xfa\x9c\x50\x3f\x1c\xca"
- "\x4b\xe0\xfc\xaf\x85\x23\xf4\xf1\x24\xca\x9b\x51\x82\xec\x88\xe7"
- "\x47\x63\x19\x8e\x83\x04\x9a\x0b\x31\x05\x4f\xf6\x83\x76\x92\xa1"
- "\xff\x35\xc6\x5a\xda\x96\xf6\x22\xf9\xea\x1a\xb6\x8d\xfb\x98\xe1"
- "\xf7\xfb\x4e\x32\x28\xb4\x73\xf2\x24\x1c\x07\xc2\x71\x0b\x1c\x13"
- "\xe1\x18\x2f\x8c\x41\x15\x62\xc3\xbc\x64\x3a\xe6\xd4\x3f\x94\x3d"
- "\x8f\xcd\x79\x5c\x87\x25\xec\xa8\x2c\x9d\x37\x83\xd1\xdb\x44\xbe"
- "\xa0\x7c\x00\x75\x87\x63\x5d\x38\x8e\x14\x8e\x91\xc2\x71\xb4\x70"
- "\xfc\x9d\x70\x1c\x25\x1c\xc7\x98\xc8\x49\xad\x20\x63\xc0\xb8\x9c"
- "\xd4\xe2\x7b\x03\x76\x07\xb0\x67\x7c\xa5\x43\x1d\x19\x70\x7c\x10"
- "\xb4\xef\xd3\x92\xf9\x95\xaf\x68\x1f\x45\x9b\xcf\xcd\xcc\xb2\x0f"
- "\xb7\xd2\xef\xda\x5f\xf5\x72\xc2\xb6\x92\x00\x45\x24\x01\x19\xa8"
- "\x7b\xbe\x92\xd7\x09\xed\x24\x2a\x85\xef\xc2\x42\x6e\x00\x1f\x8c"
- "\x97\x47\xf5\xa1\xa0\x3d\x18\xa3\xb8\x96\xda\x8e\x31\xb6\x5b\xd0"
- "\x90\x52\xf8\xaf\x06\xdd\xa0\x46\xc4\x6f\xd4\x7b\x98\xae\xde\xf9"
- "\x4b\x78\xd6\x3a\x49\x57\xff\x6a\x30\xfb\x86\xf6\xe0\x12\x38\xaf"
- "\x97\xce\x9f\xc4\xfd\x00\x83\x60\x3c\x6b\xe0\x7d\x06\xd6\x91\xaf"
- "\x30\x86\xff\x33\xf5\xec\x9d\xc3\xc5\x77\x16\xe8\xa1\x15\xc7\xb7"
- "\x9e\x9c\x4c\x06\x2c\x4c\x40\x1e\xae\x73\xe0\xec\x49\x6a\xd7\x15"
- "\x78\x04\x68\x79\xf2\x69\xa4\xa9\xd3\x1c\x74\xc6\xa0\xe0\x96\xcc"
- "\xaf\x35\x72\x4c\x31\x6a\x10\x53\x90\x37\x00\xbf\x91\xd6\xfe\x2e"
- "\xf3\xaf\x1a\xe7\x1f\x9b\x77\x5f\xcf\x93\xdf\xfb\x65\xb5\x8d\xcd"
- "\xbb\x1a\xe0\x33\xe0\xcf\x6a\xcc\x0f\x01\x38\xf4\xf5\x28\x61\x4e"
- "\xd7\xc0\x9c\x1e\x04\xe7\xab\x58\x5f\xd9\x79\xe1\x59\xc0\x67\xd5"
- "\xf8\xde\x0f\x89\xe7\x85\xf7\xc5\x76\x70\x0f\x7e\x0f\xf1\xbc\xd0"
- "\x3e\xf0\x63\x75\x31\xce\x13\xf1\xbc\xf0\x4e\x20\x47\x7d\x6d\x13"
- "\xf1\x64\x3d\xe3\xb7\xb5\xe2\x7d\x48\x37\x8c\x8f\xc5\x6c\xfc\x5f"
- "\xe3\xde\x0a\x3d\xae\x0f\x6b\x66\x91\x80\xe5\x79\xe4\x01\x36\x2f"
- "\xbf\x6e\x90\x63\xe4\xe9\x32\x3e\x33\xd0\xc6\xab\x86\x18\x2a\x6c"
- "\x03\x45\x79\x35\xbf\x25\xb3\x66\x9e\x98\xe7\x5b\xca\x33\x50\xb3"
- "\xa5\x42\xef\x18\x5f\xe8\x4b\xcd\x3a\xb1\x2f\x4e\xeb\x33\xa5\x01"
- "\xf6\x0d\xdb\x5a\x03\xf2\xba\x05\x70\x81\xe1\x76\x4d\xb1\x89\xdc"
- "\x2f\xca\xbb\x74\xdd\x0a\x54\x10\x6d\x76\x12\xfd\x3e\x1a\x88\x6b"
- "\x23\xfa\xf8\x70\x68\xc7\x4a\xb6\x93\x4a\x2d\xe8\xf2\xc9\x17\xc8"
- "\xec\x15\x5d\x30\xf6\x4a\x34\xf4\x75\x37\xf4\xad\xc0\x8e\xb6\xff"
- "\x45\xa8\xa7\x9e\x9e\x63\x4f\xe2\xad\xc2\x98\xc1\x3c\x3a\x3d\x5a"
- "\x18\x5b\xc4\xaf\x02\xc4\xf4\x35\x69\x2c\x67\x10\xda\x72\x70\x7e"
- "\xbc\x8d\xeb\x58\x28\x6f\x2d\xc9\xc7\xb9\x72\x6a\x8c\x28\x93\x42"
- "\x7f\xf5\x4c\x26\xfc\x62\x27\x8d\x4d\xa4\x1b\x62\x60\xb6\xc0\x53"
- "\x27\xd9\xbb\x9f\x3a\xc0\xbe\x73\x0f\x11\xe2\x1b\x9e\x2a\xf4\x09"
- "\x0d\xf9\x9a\xf9\x65\x95\x7d\xc6\x7c\x4a\x4e\xe5\x39\x7c\x4a\x24"
- "\x59\xd1\xc0\xe2\x46\x9d\xda\x27\xcd\x89\x53\x6b\xf1\x3e\xb8\xbf"
- "\x11\xce\x97\x4b\xe7\xbf\x28\x10\xec\x5d\x25\x5d\x57\x47\xa2\x6f"
- "\x59\x77\x8c\xb5\xcd\x9e\x77\xba\x2f\x7d\x3e\xb5\x79\x0c\x29\x11"
- "\xe7\x2f\x8e\x33\xae\xd9\x74\x0e\xc3\xfc\xc5\x79\x7c\x73\xd3\x90"
- "\x52\xf8\x67\xf3\x96\xad\xcd\x06\x3a\x6f\xe9\x9c\x3d\x1d\xe1\xd4"
- "\x0f\x1a\x5f\x07\xfb\xda\xbc\x32\x34\x00\xae\x45\xc3\xba\x5a\x25"
- "\x5c\x63\x39\x25\x1a\x69\x8c\x3c\x33\x7e\xdb\xc6\x6f\x9d\xb8\x47"
- "\x2b\x10\xb8\x1b\x63\x82\x88\xdf\xaa\xc7\x37\xa5\xf3\x76\xfc\xee"
- "\x74\x9d\xb7\xe8\x1c\xb1\xfe\x4f\x17\x48\xf1\x7d\x4e\xf9\x0a\xef"
- "\x85\x39\x61\xf2\x99\x2f\x58\xcd\x35\x26\x53\xd5\x58\x90\x4f\x8d"
- "\xc0\x7b\x70\xcc\x63\x79\x99\x4f\x9b\x44\xde\x83\x79\x39\xef\x22"
- "\xf9\x66\x49\x4e\x08\x9f\x07\x34\xcd\x83\xb9\xb4\x10\xca\x33\xe1"
- "\x38\x8f\x1d\x15\x2a\x3c\x0a\x73\x24\xaf\x25\xf3\x9b\x5e\x62\x3e"
- "\x7a\x1c\x1b\x4b\x50\xae\x09\xf9\x2c\x1b\xc6\x01\x79\x8d\x7e\x47"
- "\x86\x7e\x23\x7f\x21\x9f\x21\x8f\x05\xae\x1e\x4b\xf9\x8c\xc6\x1f"
- "\x80\xf3\xd8\x5f\xe4\x33\x68\x2b\x4e\x8c\xf3\x6b\x22\xdf\x04\xb0"
- "\xef\x39\xdf\xa4\x8a\x3e\xb7\xf8\x2d\x29\xb1\x37\xe9\x0e\xed\xaa"
- "\x4b\xd4\x34\x96\xe6\x39\xa3\x6d\x34\xc1\xba\xf8\x1d\x8e\xe1\xe4"
- "\x83\x25\x70\x4f\x91\x34\xe6\x46\x9a\x9b\xf9\xc8\x0c\x6a\x8b\xfc"
- "\x05\x5c\x2b\x77\xd6\x33\x4c\xe4\x58\x1e\xea\x1a\xe8\xdb\xf7\xcb"
- "\x60\x82\xdf\x81\x01\xc7\xbe\x31\x8b\x72\xed\x80\x60\xfc\x9e\x7f"
- "\x6c\x14\xf4\x0f\x75\xe8\x2a\xf8\x1d\x0e\xba\x64\xa9\x07\x9b\xf1"
- "\x40\xb4\xf5\x08\xf9\x79\x6a\xd1\x8e\x85\xf9\x0c\x2e\x92\x73\x4b"
- "\x2a\x30\x16\xc8\xe2\xb6\x71\x9e\xd3\x92\xf9\x6b\x18\xeb\x59\x9d"
- "\x40\x7e\x51\x47\xce\x4d\x46\xbb\x51\xfa\x0f\x68\xa3\xa9\x4d\x96"
- "\xdb\x68\x6a\x4b\x85\x7f\xd0\xb4\xcf\x44\x3a\xfd\x57\x09\xc7\x71"
- "\x1d\xfc\x37\x08\x75\xe1\x4d\xcf\x0a\x6b\x4a\x28\xcc\x93\x5a\x87"
- "\xfd\x17\xf9\x12\xe7\x36\xfa\x71\xa0\xcd\x49\x61\x23\x74\xef\x5b"
- "\xa0\x0d\xfa\xbd\xe6\xc9\x49\x86\x14\xe4\xa3\x33\x74\x1f\x14\xc6"
- "\x20\xf6\xce\x97\xe8\x0c\xa5\x27\x8b\x07\x5a\x5b\x05\xcf\x0e\xde"
- "\x78\x85\xf8\x6a\x13\xc8\xc3\x68\xff\x0e\xb4\xf3\x06\xd4\x71\x85"
- "\x98\x82\x55\x8d\xe4\xcc\x89\xc4\x55\x44\x09\xd7\x1f\x85\xdf\x06"
- "\x51\x4e\x82\x7b\x54\x3e\x56\x12\x8c\xf2\xd1\xc8\x55\xe4\xd1\x96"
- "\xcc\x33\xf9\x22\xad\x50\x86\x40\x3b\x9c\x60\x4b\x80\xbe\xd6\x52"
- "\x1f\x67\x8c\x53\x6f\xa2\xe3\x46\x71\x18\xdb\x00\x1d\xf6\xcc\x3a"
- "\x1f\x0b\x51\xb1\xb5\xe7\x0c\xf0\x7f\x99\x20\x33\x9e\x29\x00\xde"
- "\xaf\x76\xea\xe7\xf3\x4e\xbf\xb3\xf0\xfe\x40\x0b\xca\x67\x9e\xc6"
- "\xe7\x6c\x3f\x71\x7c\xd0\x5f\x35\x10\xf4\x04\x4a\x6f\x1b\xdf\x04"
- "\x7d\x2b\xd7\xa6\x10\xff\x46\x72\xee\xe1\x1d\xb9\x74\x9f\x5d\x29"
- "\xb3\xcf\x9f\x0b\x12\xf5\x70\xd6\xef\xb3\x67\x02\x57\xfb\x10\xb4"
- "\xab\x63\xbc\x33\xea\xeb\xf7\x7d\x28\xb5\xa5\x1b\x6d\x11\xc4\x90"
- "\x36\x04\xeb\x88\x72\x55\x6d\x73\x7a\x28\x39\x12\x1a\x01\xf3\xf8"
- "\x6c\xa1\x49\xf9\xa5\xbf\xf7\x3e\x95\x67\x0b\x85\xf1\x2d\x67\xbe"
- "\x08\x67\x57\xe0\x5a\x82\xba\x3f\xac\x23\x25\xb8\x46\xb7\x64\x9e"
- "\xf3\x15\xe7\x0d\xac\x1b\x25\x70\x8f\x10\x0f\x1b\xbf\xff\x9e\x4d"
- "\xc4\x18\x10\x54\x6f\x60\xf5\x03\x98\xcd\xff\xdc\x60\x87\x2c\x0d"
- "\xf5\xf0\x3e\xe6\xa3\x76\x76\xdc\x6c\xbb\x02\xc6\xf4\xec\x38\x7c"
- "\x37\x81\x17\x61\xbd\x3a\x17\x27\xcd\xdb\x33\x14\x9b\x8f\x34\x39"
- "\xcf\xcb\x73\xeb\x24\x7d\xb3\x36\xa2\x5f\x0e\x51\xbb\x9b\x87\xda"
- "\xae\xb8\x56\x9d\x6b\xdd\xb8\x91\xd7\xeb\x94\xdc\x88\x35\xd9\x24"
- "\x40\xb1\x1e\x86\x0d\xe7\x59\x52\x4c\xf7\x8b\xc4\x74\x5f\x60\xc0"
- "\x83\x51\x23\x13\x3b\xf3\x69\xa1\x44\xb9\xe1\x6a\x67\xff\xde\xd6"
- "\x07\xf5\xbc\xcf\x93\x93\xc6\x27\x5a\x89\x7a\x81\x8e\x7c\xb7\x90"
- "\xf8\x8c\xb4\xc3\xb3\x03\x88\xd6\x44\xea\x82\x71\xcf\xe8\x91\x00"
- "\x94\x3f\xea\x82\xb1\xcd\xd4\x7c\xe2\x9f\x5a\xcf\x37\xac\x7f\xb5"
- "\x93\x3f\xac\x07\xaa\xad\xc0\x63\xf7\x07\x3c\xa8\xbf\x09\x6d\x1c"
- "\x8e\xa1\xf7\x15\x79\xee\x9b\x69\xb3\xfb\xbe\x69\x43\xa0\x6f\x3b"
- "\xbd\xeb\xdb\xb7\xfb\xa4\xbe\x7d\xbb\xef\xc7\xf7\xed\xfc\xd3\x4e"
- "\x7d\x53\x49\x7d\x8b\x83\xbe\x9d\x1f\xee\x5d\xdf\x2e\x4c\x96\xfa"
- "\x76\x61\xf2\x2d\xf6\x6d\x57\x3b\x7d\xab\x70\xdf\xb7\xe4\x07\xa1"
- "\x6f\x67\xbc\xeb\xdb\x45\x8b\xd4\xb7\x8b\x96\x1f\xd3\x37\xd4\xe5"
- "\xd3\x7a\xf1\x17\x68\x3c\xf9\x04\x16\xaf\xf5\x22\xf9\x76\x68\x5a"
- "\x3e\x2d\x77\xbb\x48\xea\x5a\x85\xf9\x6d\x4e\xb7\xf0\xdf\x32\x39"
- "\xa7\x2e\xb6\xbf\x16\xfd\x5d\xeb\x66\x00\x2f\x07\x33\x9e\xfe\x96"
- "\xfa\x37\xa4\x9b\x79\xc1\xdf\xb4\xee\xf5\xed\xd4\x1f\x65\x58\x9c"
- "\x50\x2e\x6d\xee\x36\x84\xe6\xa1\xe7\x60\x3e\xf3\xdd\x9e\xf5\xc7"
- "\xfc\x9d\x7b\x13\xcc\x4a\x3e\x13\x63\x87\x61\xbc\x3f\x5f\xc2\xbf"
- "\xf5\x6c\xe8\xde\x04\x2b\xcd\x1d\xbe\x86\xee\xf7\xad\x33\x88\x7b"
- "\xdc\xc4\x67\x98\x83\x86\xc5\xc1\xf9\x1a\x31\x0f\x2c\xaf\x44\x79"
- "\xe6\x59\xcc\xf5\x08\xb2\x44\x9d\x59\xcc\xcd\x0a\xfc\xbe\x56\xc0"
- "\x06\x4b\xa0\xb5\x3d\xdc\xfb\xb6\x8f\x88\x7b\x23\x13\x49\x20\xe6"
- "\xa5\xdc\x98\xd6\x19\xbf\x39\x42\x5b\x75\xfb\x70\xdc\x27\x58\x3a"
- "\xf3\x81\xa9\xc4\x07\xf7\xf6\xa1\x8f\x9e\x31\xd4\x4c\xc2\x52\x49"
- "\xa7\x09\xc9\xd0\xa6\x95\xc4\x04\x26\x43\x7b\x30\xd6\x4c\x37\xf8"
- "\x96\xda\xf8\x72\xa0\x3d\xfc\xfe\xed\x93\x48\x02\x46\x86\xa6\xf3"
- "\x6b\xb6\x10\x5f\xdc\x07\x88\xfb\xf9\xd8\x5e\x3e\x3f\xff\x96\xcc"
- "\x6f\xf5\xe2\xfb\xdd\x02\x7d\xba\x32\xfa\xd4\x9f\x91\xe8\x53\xbf"
- "\xa5\x2d\x7d\xea\x3b\x31\xfa\x7c\x6b\x93\xe8\x73\x21\x52\x4e\x9f"
- "\xfa\x3e\x72\xfa\xd4\xc7\xdd\x1e\x7d\xea\x63\x24\xfa\xb0\x67\x30"
- "\xfa\xd4\x27\xbb\xa7\x4f\xbd\x4e\xa2\x4f\x7d\xd8\xad\xd1\xa7\xfe"
- "\xa8\x67\xfa\xd4\x4f\x6e\x87\x3e\x7e\xee\xe9\x73\xa1\xfb\xad\xd3"
- "\xe7\x42\xa4\x17\xf4\x79\x80\xd1\xe7\xe2\x2a\x89\x3e\x17\x7f\xdb"
- "\x96\x3e\x17\x76\x32\xfa\x5c\xc8\x97\xe8\x73\xd1\x24\xa7\xcf\x85"
- "\xa3\x72\xfa\x5c\xf4\xbf\x3d\xfa\x5c\x24\x12\x7d\xd8\x33\x18\x7d"
- "\x2e\x86\xba\xa7\xcf\xc5\x70\x89\x3e\x17\x4a\x6e\x8d\x3e\x17\x63"
- "\x3d\xd3\xe7\x82\xc5\x7b\xfa\x5c\xfc\xc8\x85\x3e\x2a\xcf\xf4\xb9"
- "\x68\xf2\x82\x3e\x81\x8c\x3e\x0d\x0f\x4b\xf4\xf9\xee\x54\x5b\xfa"
- "\x7c\x37\x9a\xd1\xe7\xbb\x08\x89\x3e\x0d\x19\x72\xfa\x7c\x17\x2b"
- "\xa7\xcf\x77\x85\xb7\x47\x9f\xef\xf4\x12\x7d\xd8\x33\x18\x7d\xbe"
- "\x2b\x76\x4f\x9f\xef\xaa\x24\xfa\x7c\x37\xef\xd6\xe8\xd3\xd0\xc9"
- "\x33\x7d\xbe\xcb\x69\x87\x3e\x9d\xdd\xd3\xa7\x61\xca\xad\xd3\xa7"
- "\x21\xa3\x3d\xfa\x78\x27\xeb\x35\xe4\xe0\x73\xef\x40\x3b\xb5\x9e"
- "\xda\xc1\xb1\x43\xff\x43\x2e\xb3\xa1\x76\x3b\xe7\xe7\xcf\xf6\x68"
- "\x34\xe4\xa8\x53\xc8\xb0\x3a\x72\xe9\x89\xed\x5c\x27\x7f\x3e\xb3"
- "\x10\xf4\xa4\x0f\xf2\xf8\xd5\x7e\xbe\xdc\xea\xce\xbe\xb8\x37\xdb"
- "\x73\xfe\xf6\x4b\x6f\xf8\xf4\x20\x8f\xe0\x3e\xba\x35\x20\x2f\xe3"
- "\xef\x96\xcc\x4b\x39\x20\x0b\x46\xb6\xb7\x7f\x0b\x7d\x9d\x8e\xac"
- "\x45\xfd\xf6\x92\xc1\x11\x17\x23\x93\x4f\xc6\xf8\x62\xda\xc7\x70"
- "\x9f\xc5\xa5\x86\x1c\x1a\xaf\x6a\xd0\xfa\xc8\xc7\xf8\x73\xa8\x7b"
- "\x5c\x24\x8d\x17\xf8\x4d\x83\xd6\x23\x3f\x80\xac\xfe\x8b\x46\xd2"
- "\x18\xee\xf0\xcf\xe3\xa3\xdf\x11\x6c\x84\x83\x59\xdd\xa6\x29\x50"
- "\x77\x30\xe6\x21\x5d\x9a\x86\xf9\x35\x9b\x86\x82\xec\xfb\x38\x3e"
- "\x03\x63\x27\xed\x80\x23\xfa\xc9\x30\xdf\xcc\xc6\x28\x2a\x2f\xaf"
- "\x79\xe8\x1d\xe6\x0b\xd7\xd4\x47\xe4\x3b\x78\x4e\x17\x28\x3f\x20"
- "\xc8\xf3\x58\xff\xfe\x46\xf2\xcf\x6b\x4e\xd7\x03\xa0\x7c\x0a\xda"
- "\x0e\x12\xae\x3f\x00\x65\xcc\xb9\x4c\xe3\x8d\xf3\xd9\x19\x82\x0f"
- "\xf1\x3f\xf5\x70\x4e\x25\xd4\x09\x82\x3a\xaf\xa3\xec\x2e\xb4\xd1"
- "\x0d\xca\xf3\x51\x07\x16\xae\x07\x43\x79\x3c\x7e\x3b\x10\xae\x77"
- "\x87\xf2\xd3\x50\xfe\x15\xdb\xf3\x72\x53\x98\xa3\x8d\xb6\xdb\xdb"
- "\x33\xde\x48\xf3\x95\x21\x0d\x98\x2e\xf0\x4f\x27\xff\x9f\xc6\x7a"
- "\x97\x6b\x31\x4e\xd7\xaa\xc5\x6b\xcc\x47\xed\x9f\xa9\x4e\xd7\x4a"
- "\x5c\xae\xe5\x39\x5d\xdb\xe7\xd2\xe6\x3e\xa7\x6b\x05\x2e\xf7\x55"
- "\x39\x5d\xd3\xb9\x5c\x6b\x72\xba\x96\x21\x5c\xf3\x69\xc9\x6c\xf2"
- "\x95\xbe\xe1\x35\x6a\x85\xf3\x4a\x38\xdf\xcb\xe9\x7c\x8c\x70\x1e"
- "\x9e\xdf\x34\xd0\x44\xb6\x9a\x85\xf3\x94\xf6\xac\xfd\xa6\x71\x4e"
- "\xed\x87\x33\x1b\x47\x53\x8c\xc3\x77\xae\xdb\xb3\xd1\xdc\xcd\xe8"
- "\x77\xe0\x5a\x28\xf2\x95\x33\x6f\x2f\x4a\x52\xcf\x5d\xf6\x9a\x3a"
- "\x21\x36\x11\xdd\x57\xe2\xe7\x27\xaa\xe3\x17\xcf\x8b\x95\xc5\x59"
- "\x0f\xc6\x98\x83\x98\x53\x0d\x63\xb7\xd0\xfc\x05\xb9\x7c\x83\x23"
- "\xe7\x07\xe0\x2a\x3c\xab\xdc\x44\x46\xd3\x67\xe5\xb0\x78\xe4\xa5"
- "\x18\xfb\x85\xc5\x79\x21\x63\xeb\x48\xd3\x09\x21\xce\x8b\x01\xea"
- "\x5a\x3d\xc7\x79\xb9\x52\x4d\xe3\x1b\x42\x3d\x16\xe7\xe5\x4a\x0d"
- "\xcc\xf3\x91\x7c\x17\x96\xc3\x83\xe5\x36\xbb\x2c\xca\x26\xe6\xd9"
- "\xad\x34\x46\x60\x06\xb3\x65\xb8\xc6\x6b\x1d\xb4\x10\xef\x13\xbe"
- "\x97\x2e\x74\xba\x7f\x1e\xbb\x2e\xae\x0f\xc2\x33\x75\x83\xb4\x50"
- "\xee\x52\x07\x65\x6a\xbf\xa7\xd7\x2e\x33\x5b\xde\xa6\x41\x89\xf8"
- "\x4e\xf8\xde\xf2\x77\x53\x4e\xab\x23\x97\x77\x4b\xef\x76\xb9\xda"
- "\x29\x16\x9c\xf0\x0e\x97\x6d\x6c\x8e\xb6\x79\x57\xea\x9f\xc8\xab"
- "\x06\x25\xe2\xb3\x11\xcf\xd8\x5e\x06\x28\x6f\x1a\xa4\x15\xfb\xe3"
- "\xd4\xbf\x44\xd4\xeb\xa1\x7f\xa7\xe8\x98\x00\x4d\x79\xa0\xa9\xf0"
- "\x0e\x5b\xf8\xcc\xa6\x54\x96\xcb\x00\xd6\x13\xcc\xc9\x42\xd7\xaa"
- "\x2b\xf3\x44\x5b\x26\xae\x51\xcc\x86\x79\x45\x92\xff\x30\x46\xd7"
- "\x26\x71\xfd\xba\xe2\x24\xff\xb1\x67\xc2\xb9\x02\x67\x1e\x72\x7a"
- "\xde\x09\x7c\x1e\xd4\x1b\xc7\xf6\x03\x0c\xd2\xe2\x7c\x87\xb2\x0a"
- "\x7d\x31\xf1\x5e\xec\xa3\xa7\x3c\x7c\x9e\x62\x28\x4a\xe3\xf8\x7d"
- "\x2f\x71\x1c\x73\xe8\x1e\xf9\xef\xfb\x8a\xf6\x3a\x21\x07\x86\x21"
- "\xc7\x91\x97\xfa\xfb\x68\x9a\xdb\x4d\xf7\xf7\x31\x03\x02\x48\x0c"
- "\x1b\xdb\xef\xe7\x20\xc6\xe3\x9c\x61\x58\xff\xbd\x41\xa0\x79\x24"
- "\xeb\xff\xf7\x6f\xe0\x79\xc9\xff\xfe\x7b\x93\x58\x4f\xc4\x65\xf6"
- "\xbd\xea\xfb\xfd\xb4\x1e\xcb\x15\x3c\x86\xd1\xfc\x57\xaa\x3a\xf2"
- "\x7d\xb9\x50\xff\x12\xe5\x45\x1a\xbf\xe7\xfb\x06\x7e\xd3\xb0\x31"
- "\xd0\x57\xd0\x7f\x9a\x84\x9c\x15\xec\xb9\x70\x2c\xc7\xbe\xe0\x18"
- "\xe1\x5e\x72\x7e\xd3\xdf\xc7\x00\x7d\xdc\xc6\x47\x10\xfc\xba\x1f"
- "\x6d\x24\x3f\x30\x19\x42\xc9\x5b\xd1\xc6\xca\xde\xf5\x87\x58\x27"
- "\xdf\xe7\x00\xb1\x0e\xc3\x6e\x7a\x8d\xfa\x94\x6b\x93\xd0\x1e\x24"
- "\x5c\x4b\xc2\xfd\xb5\x8e\xdf\x7e\x4e\xbf\x3b\xe1\x6f\xea\xd7\x9c"
- "\x42\xd7\x56\x5f\x69\x1f\xff\x0f\xf3\xa0\x1c\xe0\x52\x0e\x96\x95"
- "\x57\x30\xbf\x67\x90\xcd\xea\xa9\x0f\xb9\x70\x5e\x68\xfb\x3e\xda"
- "\x9f\x24\x7e\x30\xf0\x46\x06\xee\xe9\x16\xe6\x61\x06\xee\xd9\x0e"
- "\xb4\xcd\xa4\xfb\xb5\xe1\xfa\x40\xe1\x18\x2e\x1c\xfb\xb2\x3c\xad"
- "\x3f\xf4\x92\x72\xad\xa3\x8d\xe6\x87\xbe\x9e\x72\xbf\xe3\x7e\x70"
- "\xe1\x18\x2e\x1c\xfb\x0a\xb9\x6a\x67\xc0\x7d\x8e\xfd\xdf\xee\x7d"
- "\x90\x7f\x58\x2b\xee\xe5\xb6\xeb\x06\x85\x71\xba\x08\x8c\x4d\xf7"
- "\x28\xc6\x09\x4b\x6f\xc2\x58\x31\x16\x62\x24\x37\x88\x31\xb1\x25"
- "\x03\x73\x83\x56\xb2\x9c\xa0\xb8\x07\x56\x81\x76\x73\x94\x1d\x2b"
- "\xb5\x97\x69\x5e\xd0\xe5\x4d\x62\xde\x93\x1f\x1a\xec\x9b\x06\x85"
- "\x09\xf3\x65\x0b\xf3\xd1\xbf\x4a\xed\xc5\x34\xaf\x75\x13\xfd\xee"
- "\xe5\x7f\x91\x5c\x4d\x16\xeb\xb0\xb1\xbb\x4a\x6d\x5f\x3b\x32\xc5"
- "\xdc\x8f\x57\xd5\x62\xae\x69\x13\xb9\x9a\x7a\x2d\x28\x21\x1a\xce"
- "\x0d\x94\xfb\x4c\x5f\x1d\x8f\x6d\x62\xdf\x4d\xe4\x07\x33\xb6\x0d"
- "\x75\xa2\x1d\x73\x16\xce\x2f\xb7\x91\x9e\xd0\xaf\x8b\x62\xfb\x70"
- "\x1d\xe6\xbf\x99\x8e\x25\xb6\x79\x6d\x53\xde\x3a\x38\xb7\xde\xe4"
- "\xdb\x39\x8f\xf9\x5c\x5f\x85\xf5\xef\xbf\x47\xb5\x27\x03\xc1\x5c"
- "\x48\x86\xb9\x94\xc1\xe9\x86\x69\x59\x2c\xef\x61\xc9\xcc\xc6\x78"
- "\xf5\x02\x7a\x87\x6f\xbc\x4e\x7c\xd1\x07\x82\xf1\x6c\x33\x8b\x81"
- "\x0c\xe7\x00\xab\x0b\x61\x8e\xb0\xf5\xcf\xab\x75\xff\xaa\x85\xb6"
- "\xd1\x93\xc5\x36\xc3\xbd\x4b\x2d\x99\xcd\x91\x8e\xfc\x09\x8e\x79"
- "\xdc\x3c\x1f\xbf\x3d\xc0\xfc\xa0\x7d\x74\xed\x03\xf6\x17\xda\xaa"
- "\xf7\x28\x63\xaa\x86\x69\xe9\xf7\x99\xb7\x9e\xd5\x30\x1f\xd5\xe6"
- "\xbf\xfa\x84\x3e\xd4\x00\xcf\xda\xe5\xc8\x1b\x01\x75\xb2\xd1\xf7"
- "\x1e\xda\x77\xbc\x67\x02\x7d\x46\x35\x9b\xeb\xcd\x0d\xdc\xa6\x61"
- "\xda\x8d\x37\x88\xaf\x70\xbe\xa1\xd2\x66\xc5\xdc\x03\x6e\xe3\x6c"
- "\xd1\xdc\x79\xe8\x13\xfe\xd6\x30\x2d\xee\x1b\x1a\x60\x15\xfb\x6c"
- "\x69\xc0\xfd\x2a\xd8\x67\x36\xb6\x96\x33\xe2\x38\x6e\xb8\x0a\x6d"
- "\xa7\x9d\x26\xf5\xc4\x12\x8b\x7e\x73\x74\x4c\x52\x44\x5f\x4e\x0b"
- "\xd5\xf9\xe8\xf3\x59\x1d\xaa\xfb\xd3\x3c\x46\xd0\xfe\x76\x9a\x8b"
- "\x0d\xde\x01\x68\x61\x48\xc3\x3d\xff\x16\x9a\x17\x60\x0d\x8d\xd5"
- "\x01\xef\x4d\xfd\x64\xaf\x09\xdf\x49\x2c\x05\xe2\x5a\x61\x12\xce"
- "\x6d\xc4\x67\x27\xdd\x20\x57\x88\xe5\x75\xcc\xb1\x0e\xe3\x91\x81"
- "\xf1\xe9\x2a\x2d\x30\x4f\x92\x6f\x20\x2f\x60\x6e\xf6\x42\x13\xb1"
- "\xac\x65\xeb\x1b\x8e\xb9\x25\x0e\x9f\x8f\x63\x0b\xba\x99\x19\xc6"
- "\xf4\x7a\x4b\xe6\x35\x47\xfe\xc7\xec\x10\xd4\x77\x2c\xed\xc6\xd7"
- "\xb5\x43\x9f\x2b\xf3\x60\xed\xec\x79\x1a\xfb\x57\xc6\x75\x1b\xa6"
- "\x45\x9f\x6c\xf8\x1d\x2f\x60\x3b\xa5\x1d\xe3\x83\x6b\xef\xfa\x84"
- "\xf6\xea\x5d\xc9\x78\x81\xc6\x50\x83\x73\x63\x84\xf1\xa3\xf9\x24"
- "\x74\x49\x6c\x1c\x84\xfa\x36\x66\x2f\xee\xf5\x2b\xe8\x97\x53\xfe"
- "\xbb\x6b\x74\xed\xc6\xd8\xf7\xdb\xa9\x4e\x78\x6d\x9f\x53\x9f\x2d"
- "\x74\xff\xeb\x55\xb4\xf5\x5d\x9b\x81\xcf\xda\x80\xf1\xc3\x90\x2f"
- "\x1a\x9d\xf9\xff\xda\x50\xec\x27\xfa\xfc\xda\x83\x9e\xd5\xc0\x7a"
- "\xdb\x17\xc7\x19\xee\x81\x75\x7e\x98\xb6\x9d\xb5\x90\xe6\xdd\x6b"
- "\xc9\xbc\xae\x11\xd7\x42\xd0\x2f\x60\x5d\x68\xe9\x4d\xf5\x4e\x90"
- "\xa7\x8d\x1c\xca\x33\x2d\x6a\xe4\x1b\x98\xeb\x71\x02\xc6\xc2\xba"
- "\x7f\x7d\x86\xf8\xcd\xcb\x8e\xfb\x26\xae\xd0\xef\xbd\x16\x31\x9f"
- "\x1c\x8b\xd7\x77\x3d\x43\xda\x67\x71\x7d\x7d\x9b\x7d\x16\xb8\xf7"
- "\x27\x97\xe6\x1d\xdb\x85\x6b\x4a\x45\x53\x3d\xae\x11\xf4\x7e\xdc"
- "\x7b\x91\x06\x3a\x39\xdb\x3f\x54\x8f\xf6\x79\x9a\xf3\x04\xfb\xc2"
- "\x72\x4f\xd4\xd1\xdf\xc0\xb7\xbe\x78\x64\xbc\x74\xdd\xec\xc8\x99"
- "\x0e\xf4\xc6\x6f\x6d\x47\x7c\x9f\x27\x86\xc7\x70\xbd\x6e\xe9\x8d"
- "\xf9\xbf\x5b\x32\x5b\x82\xc5\xdc\xdf\x34\xd7\x37\x7b\x9f\x19\x1e"
- "\xe3\x32\xf6\x27\xe1\x18\x2f\x00\xf7\xd7\xd1\x31\x50\xfd\xad\x01"
- "\x63\x3d\x63\xdc\x4a\x43\x0a\xe6\x64\x69\x39\xf1\x76\x08\xdd\xa3"
- "\x6c\x31\xf4\xbf\x8a\x7e\x58\x4d\x17\x53\x69\x3c\x26\xff\x09\xc9"
- "\x36\x1e\xef\xa3\xf2\x44\xd0\xdf\x1a\xf0\x1a\xcd\x75\x80\x6d\xde"
- "\x76\xdc\xe2\x96\x7c\x41\x36\x6d\x02\xdd\xe7\x41\xa0\x15\x95\xdd"
- "\xe1\x77\x48\x23\xb1\xb6\xb2\x1c\xb4\x2c\xf6\xbe\xe0\x8f\xed\xc7"
- "\x62\x6c\xc0\x98\xd1\x98\x07\xd6\x78\xf5\x93\x98\xaf\xd9\xba\x84"
- "\xc6\xc1\xd6\x0d\x4a\x16\xc6\x20\x79\x23\xeb\x57\xe0\xec\x64\x25"
- "\xed\x23\xf6\xcf\xbb\xbe\x59\x07\x0b\x7a\x84\x5f\x4b\xa6\x35\x55"
- "\x8c\xcd\xc1\xe4\x29\x16\x1f\x9b\xd1\xc2\x7a\x49\x90\x9f\x53\x85"
- "\x67\xa7\xde\x81\x67\xef\x13\xda\x8c\x62\x31\xc2\x5b\x40\x06\x1a"
- "\x14\xd5\x92\xd9\xea\x2b\xea\x33\xc2\x1e\xa2\xbe\x4c\xcf\x6a\xed"
- "\x25\xe9\x33\x6c\x0c\x65\xfb\xee\x16\x2f\x4e\x54\xcf\x9b\xbf\x54"
- "\x3b\x27\xf1\x95\x38\x75\x6c\x42\xc2\xe2\x04\x35\x06\x69\x72\x9e"
- "\x3f\x2c\x8f\x51\x6b\xb8\x90\x9f\xb0\x50\xca\x4f\xd8\x9a\xec\x9c"
- "\xd3\xd3\x44\x5a\x53\xef\x8c\xed\xa2\x35\xcf\x53\x3b\x3a\x25\x57"
- "\x04\xff\xc5\xf0\x6f\x80\xff\x52\xb4\x65\xcc\xb6\x92\x48\x58\xeb"
- "\xa9\x9f\x89\x14\x73\xa2\x35\x0a\x7d\x8c\xea\x48\xeb\xb5\xed\x9c"
- "\x2f\xea\x41\x98\x37\xbc\x08\xeb\xef\x80\xfb\xe1\xdf\x00\xff\xa5"
- "\xf0\x4f\xef\xe3\x3e\xa5\xfb\xe5\x8b\x9c\xaf\x31\xff\x91\xd5\xbb"
- "\xb0\x0e\xbf\x1a\x3f\xd9\x63\xfe\x75\x56\xcf\xa5\x0f\x4a\x3e\xf3"
- "\xaa\x58\x8f\x7e\xdb\xef\xba\x9a\xa8\xdd\xd4\xf3\xe1\x33\x2f\x15"
- "\x0a\xf5\xa8\xaf\x8d\xf8\x3e\x98\x6b\x00\xea\x8b\xf5\x7c\xf9\xcc"
- "\x96\x81\x42\x3d\xba\x56\x70\x99\x4a\x77\xcf\xed\xc4\x67\x16\xf7"
- "\x12\xea\xa9\x9c\xdb\x73\xaa\xe3\xc7\x65\x9e\x2b\xc0\x3a\xdc\x6a"
- "\xdf\x60\x26\x3b\xb5\xe6\x41\x7d\xb7\x31\x5a\xbd\xa3\xd3\xcd\x48"
- "\x57\x3a\x69\x5f\x99\x1f\x3b\x64\xfe\xa2\x24\xcc\x34\x95\xb8\x78"
- "\x59\x22\x1e\x17\xcd\xf9\x23\x3d\x2c\x9e\xfd\xea\x2b\xec\x47\xe2"
- "\xc2\x70\xfc\xb1\x10\xf8\x0d\x8f\xf3\x96\x69\xf1\xf0\xca\x62\x2c"
- "\x26\xc7\xf5\x5d\xf6\x0a\x1e\x5c\xf7\x81\x6a\x5a\x32\x6f\x36\x00"
- "\x6f\xd4\x30\x9c\xbd\x09\x3a\xd2\xa5\x5e\x54\x8e\x5d\x6d\x22\x47"
- "\x35\x36\x22\xda\xb5\xe4\x31\x47\x6c\x0a\x8c\x39\x12\xb8\x5a\xfb"
- "\x4a\xa0\x6d\x7e\x2c\xac\x19\x20\xcb\xda\xc2\x4d\x64\x01\x11\xb0"
- "\x71\x1d\x8d\x73\x9a\x79\x33\x43\xf0\xed\xf4\xe5\x74\x83\x22\x30"
- "\x7e\x3f\x94\x69\x9e\x6d\x28\xc7\x41\x79\x2d\x94\x31\xbf\x76\x30"
- "\x94\x47\xa1\x4d\x0a\xca\xa1\x50\xee\xc5\xe9\x34\x51\xb8\xc7\x18"
- "\xca\x6a\x28\x87\x41\xfb\x3a\x71\x5e\xb8\x97\x95\x6d\x45\x62\xee"
- "\x6f\x96\xe7\xdb\x66\x70\xe4\xf9\xc6\x7c\x4e\x69\xaa\x19\x74\xfd"
- "\xa5\x32\x88\xad\xde\x27\xf4\xe1\x24\xa8\x53\x2f\xae\x97\xcc\xde"
- "\x61\xb3\x88\xf1\x53\x98\x3d\xc3\xee\xeb\x94\x2f\x1d\xcb\xc1\x62"
- "\xbe\x74\xb4\x77\xd1\x7c\x8d\x70\xe4\x33\x31\x9e\x2c\x5f\xe8\xd6"
- "\x96\x47\xf3\x7c\xda\x57\x60\x6c\x5e\x73\xfa\x3c\xc5\x2f\xb7\xa3"
- "\x0d\x0d\xca\x2c\xb6\x24\x7f\x85\xd8\x69\x7e\x28\x31\xee\x9c\x73"
- "\x2c\x09\xb7\xfb\xa1\xbe\x00\x99\x81\xe6\xbb\x5a\xb8\x38\xd0\x36"
- "\x27\x96\xc9\x81\xf6\x53\x0c\xbf\x9e\x1d\xc7\xe4\x05\x7b\x09\x3f"
- "\x89\xe5\x44\x31\x11\x6e\x0c\x8b\x3d\xb5\x70\x31\x0f\xf7\x06\x26"
- "\xcf\x89\xa5\xe7\xa0\xde\x1a\x90\xd5\x84\xfe\xbd\x6f\xec\x85\x7b"
- "\x5c\x39\x21\x46\x86\xbd\x70\xd6\xc3\x19\xf8\x1c\x7f\x2a\x87\x7c"
- "\x41\x02\x30\xdf\x26\xf6\x6d\xbb\x53\x5c\xbc\x8d\x70\x0e\x7d\x48"
- "\x9b\x27\x91\x00\x8c\x03\x2c\xf4\xa5\x90\xe5\x0f\xe3\x22\xc5\x58"
- "\x53\x26\x38\xe7\xfa\x3e\x93\xfe\x40\xb9\xb2\xcf\x2b\x7d\xa3\x46"
- "\xc3\xaf\xbe\x42\xca\x6a\x67\xde\xec\xd5\xdc\x6d\x68\x64\xf3\x9e"
- "\xb1\xbf\x61\x79\x49\x39\xd0\xff\xed\x54\x17\xe2\x50\x07\x6e\x89"
- "\xce\x63\x3e\xa8\x5c\x19\xc6\xdd\xe5\x32\x51\x9e\xc4\x7d\xd3\x5c"
- "\x31\xf2\x2c\xaf\x7a\x36\x6a\xc7\x2a\x8c\xf1\xac\x80\x31\xe6\x76"
- "\xe3\x35\x21\x86\x97\x92\xc6\xb8\xb2\x93\x50\xba\x47\x18\x64\x14"
- "\xdc\x83\x7a\x51\xa1\xa8\x40\xb9\x03\xed\x49\x5c\x26\x37\x19\xf9"
- "\x16\x68\x8c\x31\x44\x2c\x7c\xb7\x41\x1a\x3e\xe8\x59\xcc\x71\xe8"
- "\x8b\xb2\xae\x51\x85\x63\xc6\x63\xcc\x80\x91\xf0\x3f\x8d\xe5\x9e"
- "\x79\xb9\x41\x6c\x13\xca\x01\x20\x43\xcd\x80\xa3\xaa\x25\x93\x1f"
- "\xe3\x94\x93\x4f\xd8\x13\xcd\xcf\xc7\xd8\x6f\xd8\x36\x95\x9d\x15"
- "\x8a\xfd\x4c\x06\xe1\x13\x4d\x44\x35\x90\xcd\x45\xcc\x35\xfa\xe6"
- "\x3a\xe1\x37\xc8\x3f\xcf\x98\x5d\xda\x38\x29\xda\x4a\x19\x4f\xc3"
- "\x9a\xa7\x24\x23\xe1\x7f\x1a\xd4\x3f\x60\x22\xff\x41\xeb\xaf\x51"
- "\xd2\x7d\x92\x17\x7d\x42\x71\xbf\x3b\x5f\x2d\x9e\xef\xa4\x88\x84"
- "\x31\xc5\x9c\x6e\x6c\xee\x37\x77\x7b\x76\x20\x94\x2d\xa2\x8d\x85"
- "\xda\x5c\xb2\xd0\xaf\x4b\x2c\x3f\x1b\x09\xe5\x60\xb1\x0c\xbf\xd5"
- "\x22\x56\xa0\x4d\xa2\x39\x3d\x7a\x0b\xea\x9d\xaf\x84\x82\x5c\x08"
- "\xf2\x0d\x5c\x07\xfa\xbf\x39\x86\xdd\x9b\xab\x6f\xce\xdc\xa0\xb5"
- "\x74\xdb\x63\xb2\x00\xfe\xc1\x35\x90\xff\x16\xd6\x0a\xed\xc4\x99"
- "\x7c\xef\x2b\x17\xdf\x8d\xcb\xf4\x09\xe4\x36\x45\xa8\xe8\x3b\x2a"
- "\x14\x05\xf0\x3b\xd8\x1c\x34\xb0\x01\xea\x01\xfd\x6d\xf9\xb4\x5e"
- "\xd2\x65\xfd\xfa\x1b\xaa\xc9\x46\x90\xe0\x0d\xaf\xde\xc0\xf1\xa3"
- "\x3e\xd9\x1b\x52\x54\x51\x28\x77\x62\x1c\x10\x9a\x13\x0d\xe3\x5b"
- "\xda\x88\x1f\xcd\x29\xb0\xe9\xcf\x79\x34\x96\xfe\x72\x4d\x80\x18"
- "\xdb\x92\xd7\x0d\xac\xe5\x95\x8b\x2d\x18\xef\x92\xe6\x0e\x69\xd1"
- "\x74\xa5\x31\x2e\x85\xd8\x96\xdb\x92\x48\x70\x3e\xc7\x62\x5b\xd2"
- "\x18\x21\x7e\xa0\xa7\x24\xb9\x8f\x6f\xc9\x67\xee\x1a\x23\xc6\xb7"
- "\xe4\xaf\xdb\xad\xf0\x3b\x0c\xc6\x03\xf3\xbf\x6b\x68\x59\x8a\x37"
- "\xe5\xeb\x36\xde\xa5\x12\x70\x4f\xc9\xe2\x5d\x7a\xb5\x5e\x28\x14"
- "\xd4\x2e\xdb\x92\xa5\x00\xfc\x5b\x49\xf3\x02\x3a\x9d\x2b\x81\x37"
- "\x11\xe2\x1b\xf0\x71\xc2\xb9\x1a\x13\x79\x23\x5f\xd0\x4b\xcd\xa8"
- "\xe3\xe7\x50\xdb\x18\xd7\xc4\xdf\x8c\xdb\xe2\x0e\x73\xae\x76\xfb"
- "\x28\xe6\x2a\xc6\xa7\xc8\x52\x86\x9a\x14\xca\x54\xbc\x97\xea\x92"
- "\x0a\x65\xa8\xeb\xbc\x9e\xfb\xca\xe2\x79\xb1\xb3\x17\xc4\x6b\xd5"
- "\x93\x26\x8f\xa4\x89\x12\xfb\xaa\xe7\x27\xc6\xd2\x25\x49\x3d\x69"
- "\xf4\x88\x09\x13\x26\xcf\xfe\xc3\xe4\xe1\x93\xa7\xfc\x61\x28\xdb"
- "\xb1\x38\x39\x61\x05\x26\xdb\x4c\x5c\xac\xc6\x9b\xe6\x0a\xd9\xc4"
- "\x53\x62\x13\x16\xbb\xe2\x41\x30\xb5\x73\x29\xa9\x4d\xd7\x82\xbf"
- "\xa9\x2d\x4d\xa1\xdc\x27\xda\xb8\x28\xf6\x29\x94\x3b\x71\x6c\x69"
- "\xae\xf1\x2c\x65\x5f\x94\xaf\x84\x3c\xef\xb8\xee\xf8\xe2\x9c\xc6"
- "\xf5\x07\xde\xc5\xe4\x1c\x9b\x8b\xdd\xeb\xe3\xab\xc4\xfb\x84\xb9"
- "\x2c\x9c\xeb\xc1\xf7\xec\x99\x4e\xe3\x6b\x65\xf9\x04\x8b\x76\x6f"
- "\x3c\x27\xf6\xa1\x0e\xeb\x64\x29\x67\x3a\xf2\x09\x67\xf9\x44\x48"
- "\x79\x28\xe9\x9f\x6c\x8c\x08\x41\x71\xa6\x13\xc8\x2a\x7e\xf0\xdf"
- "\x19\xff\xc7\x38\xf0\x3d\x89\xaf\x41\x9d\x2d\x50\x01\x6b\x70\xb2"
- "\x0f\xcb\x63\x95\x55\x4d\x73\x2f\x4c\xb0\xdb\x7c\x66\xdb\x95\x70"
- "\xf4\xe1\x67\xdb\x7d\xa9\x9e\xc8\x27\xf1\xd5\x74\xaf\x7d\x12\x5f"
- "\x85\xf9\xda\x80\x8f\xd7\x4d\xb0\xa5\xad\x9b\x60\xe7\x6d\xb3\x41"
- "\x7e\x87\xe3\x77\xb8\x67\x7c\x82\xfd\x3b\x9e\xe6\xac\xc1\xbd\xf5"
- "\x2c\xce\x60\x29\xfa\x50\xce\x02\x1e\xde\x7e\x95\xe5\x24\x9e\xb0"
- "\xe2\xfb\x73\xb3\x57\x98\x58\x4e\xe2\x2b\x2c\x8f\x37\xcb\x75\x4e"
- "\xd2\xa0\x9d\xb2\xd9\x76\x1f\xf5\x04\xfb\x4d\x9e\xee\x7b\xcd\xf2"
- "\x55\xb7\x97\x67\x18\x31\x76\x69\x0f\xa2\xc4\x7d\x74\xf6\xbf\x3c"
- "\xad\xc3\x98\x82\xe9\x66\xde\x8a\xb1\x69\x0e\xdd\xa8\x51\xaa\x93"
- "\x7c\x61\xdc\x7c\x47\x57\x6a\xc3\xdd\xef\x7b\xce\x1e\x14\xc5\x6f"
- "\x7e\xce\xc2\x67\x0f\xee\xcb\x6f\x1e\x96\xc8\xeb\x22\xfa\x22\xde"
- "\xf3\xd9\xcf\xfa\x43\x19\xce\x0f\xad\xe7\x37\x47\x26\xf2\xd9\x91"
- "\x06\x38\x42\x79\x64\x3e\xbf\x79\x38\x94\xbb\xaf\x83\xfb\xcc\x7c"
- "\x76\x88\x15\xea\x69\xf9\xec\xd0\x38\x38\x42\xb9\x47\x0d\xd4\x83"
- "\xf2\x43\x63\xe0\x08\xe5\x5e\xc5\x17\x15\x9d\x54\x70\x0f\x9c\x7b"
- "\x3e\x99\x3d\xeb\x85\xb5\xf4\x59\xd9\xe3\x74\xec\x19\x13\xf2\xd9"
- "\x33\x26\x15\xb2\x67\x4c\xd9\xc7\x9e\xf1\x88\x06\xea\x5b\xf9\x6c"
- "\x75\x30\xd4\x4b\xe6\xb3\x1f\x23\x70\x84\xf2\x2f\x9b\xa0\x1e\x94"
- "\xfb\xe0\xb3\xa0\xfc\xab\x12\xa8\x0f\xe5\x27\x8a\xa0\xbe\x8d\xcf"
- "\x7e\x4a\x0f\xf5\x52\xf9\xec\x7e\xd8\x3e\x94\x07\x64\x40\x3d\x28"
- "\x3f\xad\x85\x23\x94\x7f\x1d\x03\xf5\xa1\x1c\x0d\xef\x34\x8c\xf0"
- "\xd9\x2f\x25\xc2\x31\x83\xcf\x9e\x01\xcf\x8b\x84\xf2\xcc\x5a\x38"
- "\x42\x79\x36\xdc\x3f\x1c\xca\x73\x46\xc1\x11\xca\x73\xf1\x5d\x7d"
- "\xf9\xec\x79\xf0\x9c\x61\x6b\xf9\xec\x57\xe1\x9d\x23\xa1\x1c\xa7"
- "\x86\x23\x94\xe7\x43\x7f\x86\x43\xf9\x8f\x78\x1f\x94\xe3\x61\x0c"
- "\x86\xc1\x18\x6b\x43\xe1\xb8\x8e\xcf\x4e\x68\x80\x7a\x50\x5e\x56"
- "\x0c\x47\x28\x27\xc3\x18\x0e\x87\xf2\xca\x68\x38\x42\x39\x0d\x9e"
- "\x3f\x2c\x80\xcf\xce\xb0\xc1\x71\x3d\x9f\xbd\xa6\x0a\xea\x41\x39"
- "\xab\x00\x8e\x50\x7e\x03\xc6\x6f\x38\x94\xd7\x8f\x83\xe3\x7a\xf7"
- "\xf4\xdc\x58\xc2\xaf\xf6\x83\x3e\x6f\x9d\xc1\xaf\xee\x0c\xc7\x6d"
- "\x01\xfc\xea\x4e\x1a\x3e\x5b\x7f\x00\xce\xc3\x71\x9b\x15\xca\x7d"
- "\x85\x32\x1c\xb7\xd7\x43\x39\x5c\x28\xc3\x71\x07\xc8\xe3\x9d\x06"
- "\x0a\x65\x38\x16\x60\x79\x30\x9f\xbd\x13\x8e\x7e\x78\x8c\x82\x72"
- "\x84\x50\x86\xe3\x7f\xe7\xc3\x11\xc6\xf4\xbd\x75\x70\x3e\x92\xcf"
- "\xfe\xaf\x31\x50\x86\x63\x81\x3f\x94\x47\xc1\x71\x21\x94\x47\x99"
- "\xfb\xf4\x2f\x42\x5e\xe5\x42\x3a\x15\xf1\x21\x23\xb5\xe9\xd7\x88"
- "\x12\x79\x14\x73\x78\xc0\xda\xfc\x68\x9d\xc2\xef\x72\x51\x9a\x89"
- "\xca\x0c\xf6\xdc\xe7\xcc\x5c\x08\xb5\x77\xf9\x41\xbd\xce\x17\x15"
- "\xfe\x3d\x10\x8f\x8c\xa9\x26\x9a\x47\x50\x88\x8f\xe9\x57\xa7\xe8"
- "\xdc\x1d\xe4\x2b\xcc\x05\xa1\x84\xf1\xea\xcb\x67\x76\xba\x0a\xc7"
- "\x5d\x7c\xe6\xfd\x75\x30\x5e\x50\x0e\xfa\x02\x8e\x50\xfe\x8f\x37"
- "\x61\xbc\xa0\xfc\xf2\x08\x38\xee\x6a\xc9\xea\x9c\x68\x52\xf8\x2e"
- "\xa4\xf8\xb2\x67\x6c\x78\xa0\x8d\xe7\x27\x00\xd2\xf2\xef\xc6\x17"
- "\x05\xda\x0c\xc0\x63\x13\x75\x81\x18\xe7\x71\xe7\x00\xe8\x6b\x57"
- "\x03\xf6\x09\x73\xfa\xf0\x37\xc3\x94\xec\xd9\xf7\xf3\xf0\xec\x77"
- "\x31\xf7\x04\x1f\xf2\xb8\xa7\xeb\x87\xe9\xf5\xc7\x16\x85\xb3\xeb"
- "\xfe\x44\xba\xfe\x32\x5e\x3f\x1f\x88\x31\xdc\x1f\x7f\x9c\x5e\x37"
- "\x5a\x1a\x84\xf7\xf2\xc1\x6b\x76\xac\x6b\x52\xf8\xab\x19\xfe\x77"
- "\x86\x35\xce\x87\x34\xab\x22\x42\x5b\xb2\xfc\xc3\xa1\xef\x7d\x05"
- "\xf9\x3f\x82\x57\x0d\x8a\x64\xf1\x51\x86\xb9\x8d\x49\x89\xfa\x2f"
- "\x97\x33\x2d\x74\x03\x60\x28\xea\xd4\xb0\x96\x2a\xd5\x69\x61\xc5"
- "\x75\x8a\xfb\x6c\xdb\x50\xe6\x0a\x5e\x68\x66\xd8\xea\x7f\xf8\xe6"
- "\x5b\x11\xf3\xd4\x29\x81\xf0\xfc\xfb\xec\xe9\x56\xfe\x9a\x21\x6d"
- "\x04\xe0\x32\x3d\xaf\xa7\xfb\x8f\xd8\xef\xf5\xd4\xaf\x94\xfd\x4e"
- "\xa6\x36\x6c\x68\x0b\xef\x75\xd6\x61\xec\x59\xa5\xa5\x5c\x48\x3c"
- "\xa1\xdf\xe5\x15\xfe\x47\x3f\xe1\x4c\xca\xc0\x44\xd2\x49\x9d\x72"
- "\x08\xdb\x0f\x90\xe9\xbb\x8e\xba\x78\xcd\xff\x87\x83\x50\x77\x2b"
- "\xda\xa6\xb2\xee\xeb\xe5\xc8\xcf\x0c\xef\xf0\x27\x5c\x47\x95\x04"
- "\x73\x93\xf9\x52\xf9\x59\x71\x5f\x3e\xee\x94\xb2\x05\x47\x11\x5b"
- "\x4e\x27\xbd\x3d\x67\xa1\x99\xcf\x8d\x27\x5d\x6d\x0a\x16\x57\x58"
- "\x71\xdf\x89\x01\x56\x94\x57\x8f\x61\xdd\x37\x38\xbf\x2f\x43\xfb"
- "\x27\x13\xa5\x21\xe1\x34\x96\xcb\xf8\xac\xb3\x11\xc6\xa6\x1a\x62"
- "\x48\xa0\x6d\x95\xf2\x59\xd7\xc2\x39\xbf\x4b\xc9\xdb\x51\xee\x4f"
- "\x46\xbb\xdd\x17\x78\x7e\x3c\xd0\x05\xd6\xa4\xfb\x0a\xc5\xbe\xe0"
- "\x7a\xb4\x01\xc6\x0e\x65\x72\x8c\xa5\x31\xdb\x6e\xc7\xd8\x74\xeb"
- "\x4c\x30\x0e\x8c\x5e\xf7\xad\xc7\x1c\xf1\xc2\x73\xcf\x73\xdd\x22"
- "\xa2\x2a\x67\xe0\x37\x48\x7f\x8c\xf5\x75\x8d\xee\xbf\xc7\xcc\xc9"
- "\x1c\xca\x10\xac\xae\x33\xed\xe6\x0b\x71\x07\xe6\x2f\x4a\x4c\x58"
- "\xa2\x5e\x3a\x3f\x25\x76\x68\x9f\x65\x7d\xd5\x09\xc9\xea\x04\x5c"
- "\xc2\xd9\x09\x58\xe6\x97\x2e\x5c\x9c\xa8\xc6\x8c\xe6\x6d\xf3\x21"
- "\x87\xf2\xaa\x08\x0d\x95\x57\x15\x81\xd4\x46\xc0\xeb\xe3\x0b\x13"
- "\x53\x79\x4e\xfd\x58\x67\xfe\x8a\xa2\x4b\x7e\xab\x5f\x17\x1a\x87"
- "\x84\xcb\x54\x53\xbd\x11\xd6\xed\x80\x2d\xdd\x08\xee\x11\xf4\x6f"
- "\xc9\xea\xe2\xc8\x7f\x6e\x52\x04\xd6\x52\x5b\x4c\x56\x97\x42\xe0"
- "\xc7\x71\xc2\xb7\x38\xb6\xc7\x46\xb8\x46\xbf\x55\x67\x75\x29\x05"
- "\xbd\x74\x17\xa5\x95\x3e\xde\x9f\xad\xe9\x5d\xac\xf4\xd9\xea\xf8"
- "\x42\xbe\x60\x40\x11\xc8\x85\x0a\xfa\x5d\xd0\xf6\x28\x6f\x24\x57"
- "\x69\x2c\x02\x98\x6b\x2a\x8c\x01\x62\xcf\x1d\xa1\xe3\x42\x26\xaa"
- "\xb8\xbf\x84\x6b\xd3\xdf\x25\xca\xbd\x80\x05\xbe\x6a\x98\x0f\x8f"
- "\x91\x47\x0f\xa5\x35\x28\xaf\x28\xee\xbf\xef\x50\x5a\x8d\x92\xcf"
- "\x19\x19\xd7\x1c\x36\x3c\xcf\x2a\xe4\xcd\x36\xda\xac\xe4\xf3\x51"
- "\x04\xf5\xc2\x62\x4b\xf7\xe9\xf0\x3f\x22\xd9\xba\x79\xae\xda\xf0"
- "\xd8\x33\x64\xf4\x13\xfc\xf7\x9f\x95\x10\xd2\xa4\x08\x2c\xf9\x6c"
- "\x14\xea\x2a\x11\x6a\xab\x2a\x22\xcc\x92\x1b\x85\x7b\x7b\xcd\xad"
- "\xb9\x73\xb5\x37\x42\x46\x99\x8f\x40\x9d\x63\xa0\x4b\x1d\x87\xd9"
- "\x86\xb1\x66\x5b\x1f\x1f\x40\xf6\xde\xd0\x29\x4b\x4b\x22\x98\x1d"
- "\x39\x06\xe6\x0c\xe5\xa7\xfb\x77\x7f\xb6\xaf\x84\xc0\xb3\xe1\xfa"
- "\x18\xe5\xe7\x83\xdb\x5c\xaf\xf8\x2c\xbc\x84\xb4\x60\xcc\x66\xd0"
- "\x55\x0f\x9e\xce\x23\x7c\xee\xb4\xaa\xdd\x29\x56\x25\x08\xe2\xca"
- "\x8a\x9a\x3c\x92\x7a\x81\x3c\x60\xfb\x5e\xe3\xfb\x21\xdc\xdf\x8a"
- "\x31\x55\x8f\x87\xd2\xd8\x8a\x69\x06\x9a\x13\x37\xb0\x12\xe4\x0f"
- "\xee\x7b\x8d\x5f\xe5\x64\x03\x81\xeb\x5f\xd9\x7e\x1f\x4a\x2a\xe2"
- "\xcc\xc4\x18\xad\x27\xad\xca\x48\xb2\xff\x25\x3d\xd9\x0a\x7a\xcf"
- "\xd6\x2b\x24\x80\xca\xd2\x37\x35\x7e\xb6\x9b\x1a\x5f\xdb\x4a\x0d"
- "\xc6\xba\xe2\xf9\xef\x35\x5d\x50\xb6\xb6\x2d\xd6\xf8\x57\x9a\xf5"
- "\x64\x40\x03\xd1\xb4\x2a\x49\x60\xeb\x4a\x4d\x97\x4a\x6d\x1e\xb4"
- "\x05\xc2\x32\x8c\x2b\xc6\xd9\xc3\xf8\x7b\x38\x4e\xf7\x47\x93\xc9"
- "\x4d\x8a\xfb\x5f\xef\x52\x4d\xba\x63\x9c\x57\x94\x57\x31\x46\x34"
- "\x17\x3c\xad\xca\x1e\x1c\xa5\x4b\xbb\x06\xfd\xc2\x38\x46\x7b\xc6"
- "\xaa\x50\xde\x07\x59\x46\x81\xef\xcc\xf1\x9a\x2e\xb3\xf1\xf8\xd6"
- "\xc0\xaf\x50\xe6\xe7\x5a\x42\x31\xdf\x94\x3f\xf6\x13\x73\x3f\xaf"
- "\x3a\x0f\x63\x99\xae\xf1\x85\x7a\x01\x70\xbe\xab\xb1\xc9\x4a\xec"
- "\xfd\xc6\xaa\xfb\x6b\x69\x4e\xdf\xe0\xed\x69\x44\xa5\x4b\x23\xc1"
- "\xea\xff\xa0\xbc\xb4\xd3\xbe\x7b\x2c\xc8\x92\xbd\x92\xd1\xbe\xc3"
- "\xce\x75\x7d\x5d\xfd\x3c\x21\xea\x67\xe8\xef\x7e\xea\x21\x40\xc3"
- "\xe0\x69\xe1\x54\x1f\x41\x1d\x58\xd1\xb5\x37\xe3\xf1\xae\x3d\x5a"
- "\xfd\x5e\x3d\xc0\x65\x6d\xa9\xe1\x56\xfb\xf6\xc2\x7c\xdf\x57\x14"
- "\x0f\xd8\xf9\xec\xbf\x8d\xe2\x73\xe6\x52\x5e\x84\x72\x6b\xab\x5f"
- "\xa8\x1a\xce\x15\x42\xfb\x11\xad\x0a\xdf\x6a\xf8\xaf\x61\xf7\x3f"
- "\x60\xc6\xf7\xb6\x17\x0c\x58\x87\xef\x4d\x73\x14\xc1\x7b\xcd\x06"
- "\x9a\xf1\x21\x53\x4d\x34\x6e\xff\x4d\x18\x5f\x21\x87\x2b\x8e\x07"
- "\x8e\x01\x77\x53\xd3\x85\xbe\xeb\x4d\x4d\x00\x8c\x2f\xc6\x74\x0e"
- "\x4c\x9b\x03\xf7\xe4\x4e\xb5\xc0\xb5\xae\xad\xc1\xd3\x34\x98\x2b"
- "\xcc\xa8\x35\x13\xfb\xe6\xa9\x66\x8c\x59\xb8\x25\x05\xe6\x5c\xf7"
- "\xa9\x26\x7e\xf3\x54\x71\x6e\x11\xec\x27\x97\xfd\x37\x4b\x2b\xee"
- "\xd5\x83\xbe\x41\xff\xaa\xe1\xbf\xc6\xa4\x78\x20\xb1\xb5\xcf\x80"
- "\x3c\x38\x8e\x81\xbe\xf6\xe2\xb3\x06\x16\xe2\x6f\xb8\xd6\x0b\xde"
- "\x79\x26\x8e\x03\x8e\x87\x30\x16\x53\xa4\xb1\x88\xa9\x87\x7a\xa3"
- "\xb8\xac\x9c\x54\x93\xa2\x6b\x18\x9f\x35\x20\xce\xa9\xde\x2a\xa9"
- "\xde\xc2\x75\xac\xde\x8e\xbe\xac\xde\x6f\x4d\x40\x87\x1e\xc2\x78"
- "\x1f\x76\x33\xde\xfb\xa5\x7b\xa7\x84\xb3\x7b\xdf\x38\xc0\xee\x0d"
- "\x83\x7b\xbb\xfe\xe0\xd2\xa7\x4b\x52\xfd\x09\xf3\x58\xfd\xb5\x0b"
- "\x59\xfd\x47\x77\x49\xf5\x02\x83\xa4\x7a\x2f\x99\x59\xbd\x8d\xbe"
- "\xac\xde\x93\x01\x70\x7d\x7c\xdb\xbe\x04\x8e\x96\xee\x49\x4e\x64"
- "\xf7\x7c\xa0\x66\xf7\x8c\xca\x87\xeb\xab\xe4\x7d\x09\x5c\x26\xd5"
- "\x4f\x10\xde\xbb\xa0\x88\xd5\x1f\x36\xc6\xa9\xde\x36\x81\x27\xe0"
- "\xfa\x5e\xa8\xd7\x35\xb4\xd5\x2f\x2d\x9a\xd5\x7b\xa1\x01\xf9\x11"
- "\xea\x7c\xc2\x65\x3d\xe2\xdf\xea\xd7\xd3\x02\xed\x04\x00\x6d\x42"
- "\xf1\x08\xb4\x0b\xe5\x74\x11\xd0\x87\x80\xb5\xf8\x9d\x08\x31\xd7"
- "\xa4\xe8\x32\x0f\x70\xd7\xee\xd6\x96\x96\x15\x68\x73\xd8\xf2\x38"
- "\x90\x1f\x36\x3f\x67\xf0\x98\x23\x1a\x65\x88\xdc\x61\x2a\x1d\xc7"
- "\x72\xcd\x03\x8f\x82\xfc\xa3\xea\x03\x6b\x61\x06\x8d\xdd\x9c\x33"
- "\x51\xc7\x85\x01\xc6\x5e\x26\x3e\xc6\xd4\x06\x52\xc4\x35\x28\x75"
- "\x37\x88\x6f\x25\x3c\x01\xeb\x17\xc1\x9a\xaa\x5e\x84\xb2\x85\x6a"
- "\xa8\xee\xba\xd0\x9e\x3e\xbe\x28\x3d\x9e\xe5\xd7\x46\x39\x0c\xb1"
- "\x19\xe6\x63\x00\xcd\xfb\xb6\xa8\x33\xd6\x5d\x02\xbf\xfd\xb1\x6e"
- "\xeb\xe3\xfd\xc3\x5b\xdf\x8b\x2f\xba\x11\x32\xd2\x7c\xe3\x2f\x4f"
- "\xab\x6e\x86\x4c\xd4\xdd\xcc\x8d\x52\xd9\xde\x8b\x57\xdb\x1e\x1f"
- "\x50\x64\x0f\x19\xa5\x85\x67\x03\x6e\xe7\x29\xf7\x70\x45\xca\x3d"
- "\x69\x06\x25\xb6\x7b\x28\x4d\xaf\x3c\x98\x56\xa5\x3c\xc8\x15\x2b"
- "\x0f\xa5\xe9\xe0\x58\x88\x39\xc0\x40\xde\x53\x1d\x3e\x98\x56\x0a"
- "\xeb\x46\x10\x81\x79\xd0\x20\xda\x42\xf9\x11\x36\x52\x59\x68\x23"
- "\x47\x13\xaf\x11\x73\x50\x84\x06\xfe\xfb\x9a\xbb\x4f\x0b\x35\x77"
- "\x9f\xab\xa6\x7d\x0e\x89\xa6\xef\x88\x7b\x5d\x0f\x72\xac\xcf\xc2"
- "\x78\x40\x9b\x41\x4f\x6c\xc7\x6f\xbe\x62\x5c\x6b\x45\x50\x7d\x9b"
- "\xb8\xd6\x4a\x96\x7f\xce\x11\xdb\xfa\xa7\x88\x6b\x2d\xd8\x1c\x68"
- "\x5c\x6b\xd0\x1f\xa9\x1e\x09\xeb\x17\xcd\x59\x69\x03\xf9\x6c\xf3"
- "\x04\x2d\xea\x8b\x28\x8f\xb5\x64\x75\x53\x89\xfa\x1e\xca\x18\xf6"
- "\x4d\x11\x83\xe1\x7f\x20\x9c\xd7\x98\x14\x1f\xad\x15\xcf\xf3\xb9"
- "\x7e\xf8\x3d\xc0\xc7\xce\xc7\x3d\xd7\x82\xfb\x37\xf9\xb8\x61\xf6"
- "\xcd\x23\x32\xec\x9b\xe7\x12\x38\x17\x01\xff\x43\xed\x9b\xfd\xf6"
- "\xc1\x7f\x31\xfc\x1f\x80\x7f\x03\xfc\x97\xc0\x7f\x29\xfc\x57\xc1"
- "\x7f\x35\xfc\xd7\xc0\x7f\x2d\xfc\x9b\xe0\xbf\x9e\xef\xee\x57\x8e"
- "\x71\x39\xa1\x6d\x33\xd0\x3d\x54\x6c\x57\x1a\xdf\x6e\x1b\xe0\x7d"
- "\x23\x51\xfe\x01\xbc\x8a\xe1\x19\x5e\x85\xf2\x3b\xfb\x17\x23\xee"
- "\xf2\x7d\x86\xe7\x99\x7b\xc7\xeb\xcd\xdd\xa3\xf5\x70\xf4\x37\x07"
- "\x69\xd5\xf0\x0f\x34\xd4\x86\x9b\x37\x4f\x0b\x07\x1a\xfa\x03\x2d"
- "\x0d\xf0\x2e\x30\x6f\x7a\x54\x31\xbb\xd4\x2f\x80\xfe\x3d\xcc\xc2"
- "\xef\x00\x93\x22\x84\xee\xc1\x81\x36\x32\xa0\xdc\xcb\xa4\x78\x90"
- "\xd6\x6b\x0e\x99\x16\x29\xec\xfd\xc4\xf3\x03\x4d\xbe\xbf\x24\xac"
- "\x5e\x94\x4c\x76\x8a\x7f\x45\x3b\x3b\x7e\x4e\xf2\xec\xa5\x0b\xe7"
- "\xbf\x12\xbb\x74\x88\xba\xcf\x3c\xb5\x66\x7e\xc2\x92\xd9\x4b\x96"
- "\xc5\x2e\x8b\xa5\xa2\x13\x9c\x7a\x42\xee\xd7\x86\xb9\x3b\x6c\xa0"
- "\x07\x74\xad\xe7\x79\x5c\xb3\xc6\x59\x80\xcf\x1e\x8b\x2f\x3a\x70"
- "\xc5\xac\xb4\x83\xec\x12\x50\x9f\x01\x73\x6f\xa2\xee\xc0\x15\xab"
- "\x32\xa0\x5e\x4d\x78\xe0\x77\xbc\x66\xac\xaf\x12\x64\x99\x2f\x48"
- "\x39\xca\x32\x50\x67\xcf\x22\xab\xf2\x45\xbc\xff\x2f\x03\x8a\xf6"
- "\xc2\x6f\x38\xa7\xc2\xfb\x78\x90\x6f\xe8\x11\xe4\x1b\x56\x1e\x69"
- "\x3e\x48\x8f\x51\xaa\x83\xb4\xde\x28\xed\x21\x3c\x5e\x5f\xc5\x97"
- "\x43\xbb\x68\x6f\xe3\xff\xd2\x3f\x9c\xd6\x81\xf9\x46\xeb\xc0\x5c"
- "\xab\x53\x04\x97\x62\x3d\xaa\x53\x40\x1f\xf7\x42\x3f\x40\xe7\xf7"
- "\x15\xe7\x2f\xea\x10\x8e\x39\x9c\x84\xb2\x5e\xf0\xd3\x38\x87\xb1"
- "\x3f\x3c\xcc\xd9\xdd\x70\xef\x9e\x45\x66\x66\x9b\xbd\x86\x58\x61"
- "\x22\x88\x13\x88\x0f\xc6\xd4\x2a\x7a\x7f\x11\x57\xa5\x44\x3d\x04"
- "\xee\x5d\x82\xd7\x68\x8e\x12\x2a\x8f\x07\xef\x12\x65\x60\x31\x47"
- "\x49\x40\x0c\xf0\xc6\x5c\xf2\xe8\x15\xc5\x2f\x5e\xc7\xf1\xc3\xf1"
- "\xc2\x6f\xb2\x7c\xd6\x2f\x46\x61\xfc\x85\x6d\xdd\x88\xbf\xad\xfb"
- "\x42\x2b\xb3\xd7\x04\x37\x89\x72\xa5\x25\x78\xa1\xd5\x99\x6e\x8c"
- "\x5e\xea\xd8\x45\x73\xe6\x2e\x8c\x9d\x47\x3f\xe3\xcd\x59\xba\x74"
- "\x59\x7c\xac\x3a\x76\xce\x2b\x71\x6a\x7a\x59\xbd\x6c\x29\x54\x99"
- "\x9f\xb8\x54\xbd\x78\xf9\x22\x75\xfc\xd2\xf9\x28\x21\xc7\x26\x24"
- "\x2c\xd3\x26\x76\x21\xec\x4e\x75\xfc\xb2\x85\x89\xf3\xb5\xf0\x63"
- "\x69\xec\xa2\x79\x6a\x4a\xf5\xa5\xd0\xd4\xc2\x85\x6a\xe1\x09\x4b"
- "\xe3\xe6\x24\x20\x23\x2c\x7a\x0d\x2a\x39\xdd\x2f\x97\x9f\x03\x30"
- "\xc6\x1e\xfa\x76\x5d\x51\x84\x8c\x2f\xf1\x85\xb1\xce\x59\x68\x45"
- "\x9f\x08\x28\x8f\xa3\x3a\x55\x56\xb0\x0d\x6d\xd7\x6f\xc3\x3b\x36"
- "\x03\xdf\xb7\x64\x75\x2f\x15\xdf\x8d\xda\xb2\x31\xee\x28\xc6\xb4"
- "\x55\x84\xfc\x96\xee\x41\x06\xfe\xa7\x3e\x33\x59\xdd\x03\xd9\x58"
- "\x74\xb7\x3a\xdb\xc5\x98\x1d\x36\x24\x08\x7d\xf3\x60\x0e\x8c\x43"
- "\xb9\x40\xc8\x13\xa1\x80\x7b\x86\xe2\x3d\xdc\xe6\xb9\xb0\x66\x84"
- "\x84\x4b\xb2\x79\x88\x3f\xd6\xa7\xf5\xb2\xba\xbf\xc4\x77\x9f\x06"
- "\x6b\x72\xf7\x26\xec\x97\x87\x75\x44\x7d\x1d\xda\x3d\x5e\x44\xc8"
- "\x53\xc1\x44\x73\xfd\xad\x61\xfa\x96\x6e\x11\x91\x37\x32\x49\xe7"
- "\x1b\x30\x97\xad\x4a\xf2\x68\x2b\xf0\xc5\x8a\xa7\x89\xcf\xaa\xf1"
- "\x44\x59\xb4\xa0\x08\xe3\x26\x93\xf2\x31\x79\xc4\x18\x03\xba\xb7"
- "\x75\x17\x29\x37\xd4\x91\x0a\xdb\x07\x2c\x17\x49\x0a\xca\xd6\x0f"
- "\xfe\x15\xe3\xe4\xa5\xaf\xe2\xed\x7b\x3f\x36\x77\xda\xd3\x58\x84"
- "\x39\x44\x1e\x35\xda\xce\x19\x8c\xa9\x05\xc4\x98\x6c\x34\x60\x8c"
- "\x12\x18\xb7\x6d\x07\xe1\xda\x7d\xe5\x70\xdf\x8b\xa4\x33\x94\x37"
- "\xe1\x33\xd6\xe5\xf2\x35\x6f\x84\xf0\xb5\x6f\xe4\xf2\x26\xe0\xa9"
- "\xfa\xf5\x42\x5e\x10\xf4\x39\x40\xdf\x0a\xe4\x53\x6d\x12\x09\x6d"
- "\x54\x3c\xa8\xa1\x36\x80\x51\xb4\xdc\x03\xca\xf4\x3b\xb6\x31\x39"
- "\x17\xcb\x3d\xa1\x3c\x86\x95\xb7\x63\xf9\x21\x28\x47\xb3\xf2\x67"
- "\x58\xee\x05\xe5\x38\x56\xae\x24\x34\xd6\x86\xe2\x41\x16\x7f\x20"
- "\xf9\x2b\x2c\xc3\xd8\x3f\xb8\xce\x90\x84\xfd\x3d\x0b\x34\x7b\x70"
- "\x73\xfa\x19\xd0\xd1\x92\x2f\xd2\xf9\x70\x28\x2d\x0e\x6d\x14\x30"
- "\x1f\x1e\xec\x71\x7f\x2d\xea\x77\x0f\x16\xfb\x85\xe3\x31\xe4\x40"
- "\xa0\x95\x74\x06\x79\xe9\x7e\x78\x9f\x37\x70\xec\xdc\xda\x64\xf6"
- "\x0c\x3f\x37\xc1\xc6\x1b\xf8\x9d\x03\x0a\xf9\xcd\x93\x54\xfc\xce"
- "\x70\xf4\x5d\x84\xb5\xec\xb9\xaa\xa2\x14\x2b\x8d\x5d\x0d\x32\x2a"
- "\xcc\xa1\x07\xa9\x5f\xb6\x19\x64\x3e\x0f\xb1\x6c\x55\xfc\xe6\x91"
- "\x2a\xd0\xa5\xf2\xc6\x6b\x6c\xe8\x43\x0d\x72\x6e\xe8\x1b\x47\xe3"
- "\x50\x36\x88\x5e\xc3\x15\x84\x9b\xb9\xf4\x68\xc2\x87\x0d\x28\x1c"
- "\x1f\xc7\x1b\x60\x9d\x52\x30\xfb\x37\x8f\xcf\x3f\x47\x9f\xdb\x67"
- "\x40\x21\xb7\x3c\x0e\x73\x4f\x51\x7c\x49\xc3\x35\x3b\x09\xf0\x64"
- "\x65\x74\xa0\x7d\x73\x74\xc6\xd1\xb8\x0b\xde\xe5\x31\x52\x84\x7a"
- "\x8e\xab\x0e\x7d\xc2\x58\xae\x36\x78\x8e\x0d\xde\x15\xe5\x83\x3d"
- "\x5c\xa9\x12\xe4\x94\xc2\xdd\x73\x6b\x3a\xf1\xcb\xa3\x03\xe1\x9d"
- "\x9e\x36\x6a\xae\x91\xca\x1b\x38\x57\x7a\x8c\x39\x0a\x54\x19\x9d"
- "\x6c\x33\x04\x9a\x69\xcc\x6d\x15\xe6\xa0\xe1\xbb\x8f\x54\x35\x2a"
- "\x7a\xe4\xbd\x98\x0a\xef\x00\xef\x7e\xb0\xae\xc6\x97\x83\xf7\x18"
- "\xc0\xc6\x0d\xef\x4b\x85\xb1\xcd\x13\x65\x7b\xef\xfa\xdf\x83\xf2"
- "\x0d\xb7\x34\x9a\xe0\xde\xe8\xbd\x20\x93\x70\x37\xa3\x03\x39\x58"
- "\x7f\xf0\xda\x51\xcd\x65\x82\xcf\x64\x63\xdd\x83\x7e\x43\xe4\xc3"
- "\x60\x9c\xe1\xf9\x18\xeb\x5b\x1c\x57\xa8\x9b\x6a\xbf\x19\xe7\x9e"
- "\xfe\xb9\xd1\x51\xd0\x3f\x1d\xbf\xd9\xcf\x6d\x0c\x54\x58\x6f\xd3"
- "\x19\x7f\xf4\x2f\x85\xff\x1a\xfe\xdd\x78\x95\xb9\x4f\xff\x06\x9a"
- "\x1b\x34\x77\x42\x86\x68\x27\x81\xf9\x06\x3c\xd2\xb3\x47\x11\xe8"
- "\xc3\xee\xe3\x1b\xe6\xb2\x9c\x6c\x9d\xce\xf1\x81\x76\xcc\x35\x7c"
- "\x0d\xe3\xc6\xe7\x1d\xd5\x58\xbc\xa4\x69\xcf\x19\x9e\x68\x8a\xed"
- "\x83\x5e\x7d\xd3\xcb\xf6\x76\x79\xe4\x91\x02\x18\x97\x60\x3f\xfd"
- "\x0d\x7e\x94\x82\xc9\xdf\xbd\x26\xe2\x58\xd9\x60\x1d\x49\x39\x49"
- "\x94\x56\x58\x2f\x3f\x98\xba\x4e\xd9\x17\xd6\x19\x3b\xac\xfd\x65"
- "\x55\x25\x64\xc2\x38\x92\x5e\x11\x77\x95\x88\xb9\xd6\x60\x5d\x53"
- "\xbd\x3f\xd5\xac\xc4\xef\x50\x98\x5b\x8d\xea\xaa\xb9\x53\xa3\x3e"
- "\xfc\x0a\xd6\x4c\x90\x1b\x76\x7f\x65\x56\xda\x9a\xa3\xd5\x34\x6e"
- "\x3d\xe8\xe5\xe9\x71\x3c\xe7\xf8\x36\x85\xb9\x4d\x74\x03\x6b\x31"
- "\x77\xf5\xf1\xa8\x2a\x1a\x4b\xe0\x78\x74\x09\x39\x5e\x9b\x47\xca"
- "\xeb\xcf\xe0\x1e\xeb\x77\x8f\x47\xeb\x50\x66\xec\x6a\x03\xb9\x70"
- "\x2b\xc8\x85\x30\x5f\xef\xe3\x54\xb9\x79\xe2\xf7\x29\xcc\xc5\x26"
- "\xca\x84\x36\x98\xa3\xf9\x42\xbe\x35\x5b\x56\xcf\xc8\x7c\xe1\x5b"
- "\x15\xe6\x61\x7b\x27\x89\x84\xbd\xa3\xe4\xa2\xdd\x7d\x97\xea\xba"
- "\x84\xfa\x61\x87\x72\x41\xb9\x79\x62\x3e\xb6\x17\x97\xa8\xc9\x3f"
- "\xe0\xdd\x8f\x6a\xbc\x9d\x93\xbd\xa8\x0f\x9d\x0d\xf8\xce\x06\x3c"
- "\x67\x83\xf1\x34\x29\x1e\x0a\x00\xba\xb9\xd5\x43\x44\x1a\xdc\x4c"
- "\x17\x69\xf0\xf0\x79\x4a\x03\xd0\x5f\x56\x4e\x17\x68\x70\x1a\x68"
- "\x50\x0f\x34\xc8\x24\x19\xc7\x26\x97\x93\x09\x51\x40\x83\xa6\xab"
- "\x98\xf3\x80\xe5\xbb\x4b\x64\x63\x4f\x69\x71\xda\xac\xac\xb4\x30"
- "\x1a\xec\x7a\x89\xd1\x60\xcf\x4b\x66\x90\x63\x06\x90\xf7\xa1\x6c"
- "\x5f\x1e\xad\xc6\x3c\x54\x7c\x66\x0c\xe6\xe6\x66\xb4\xb8\x09\xb4"
- "\xb8\xc9\x68\x91\xb6\x04\x68\x51\x5d\x43\xe3\x5d\x1d\xaf\x2d\x27"
- "\xe5\x31\x7a\x52\x01\xb8\x04\xb4\x98\x83\x74\x41\xdd\xda\xbe\x52"
- "\xd3\x0d\x74\xe9\xe0\xfc\x14\x12\x2a\xd2\x03\x74\xf7\x2e\x1b\x52"
- "\x08\xfa\x0e\x87\xc3\xdc\x14\xe9\x11\x4c\xe9\x71\x59\xa0\xc7\x0d"
- "\xf4\xbf\x03\x7a\xdc\x00\x7a\xdc\x00\x7a\x64\x32\x7a\x20\xce\xbf"
- "\x68\x09\xe4\xb9\x7f\x6a\x30\x1e\x46\x5b\x7a\xac\x14\xe8\x71\xfa"
- "\x76\xe8\xf1\xf0\xae\xb6\xf4\xe8\xa5\xeb\x88\x1e\xd2\x9c\x78\xf4"
- "\x75\xa4\xc7\x4d\xbd\x30\x27\x1e\xc7\x39\x91\xa1\x7c\x0a\xd6\x22"
- "\x1c\xd3\xb2\xaa\x03\x74\x4e\x60\xae\xb1\xf7\xa7\x5a\x95\xe5\xf5"
- "\x40\x97\x79\x40\x97\x14\x89\x2e\x8c\x1e\x13\x55\x85\x5f\xb1\xf1"
- "\x57\x8f\xc5\x35\x03\xe7\x06\xd2\x07\xe8\x04\xf3\xc7\x5d\xae\x42"
- "\xe7\x6f\xb8\xd0\x26\x87\xf3\x04\xe7\x08\xce\x87\x8a\xb8\x33\x34"
- "\xf7\xfb\xf1\xa8\x52\x82\xdf\x72\x8f\x47\x1f\x00\x5a\xe5\x11\xfb"
- "\x72\xa0\x4d\x12\xee\x17\x21\xbd\x31\x67\xe1\xf1\xe8\x75\x28\x2f"
- "\xa8\x80\xe7\xef\xb3\x03\x9d\xec\x2d\xa1\x5d\xd6\x83\x1e\x85\xdf"
- "\x78\x9d\xbf\xed\x62\x7e\x66\xde\xaf\x67\x24\x9c\xf7\xb5\x01\x8d"
- "\x60\xee\xc8\xe6\x8c\x23\x6f\xf3\xb7\x1a\xb2\xad\x8e\xf8\x3f\x30"
- "\x9f\xd1\xc8\xee\x34\x67\xc6\xcf\xc7\x39\x93\x01\x34\x3a\xe9\x25"
- "\x8d\x1e\x65\x7b\xa8\x42\x00\xab\xbb\xfb\xe9\x61\x9d\x04\x1a\x3d"
- "\xa2\xf6\x44\x23\x7b\x41\xff\x52\xbb\x2a\x02\xbf\x3d\x3f\xca\x2d"
- "\x9e\xac\xe0\x40\x67\xba\x01\xba\xe9\x71\xb3\x8d\xa4\xce\x24\xca"
- "\x94\x33\xc4\xcf\x38\xf9\x0b\x62\x34\x15\xd3\xb8\xe9\x68\xf3\xc5"
- "\x7c\x26\x46\x5b\x31\xe0\xd5\xdc\x0c\x2c\x6f\xa3\x65\x33\x59\x39"
- "\x93\xf8\xd0\x5c\xa6\xd1\x7a\xb2\x1e\xf8\x73\xf7\x4b\x7a\x25\x97"
- "\x33\x32\x8e\x57\x61\x1e\x26\x62\xa8\xd4\xda\x30\xee\x5b\x40\x45"
- "\x5c\x39\xc6\xca\x3c\x87\x71\xc9\x2b\x2d\xd0\xa6\x99\xbf\x61\x87"
- "\x35\x63\x7b\x26\x5f\x8c\xb9\x29\x06\xe0\x1a\x81\xb1\xec\x14\xea"
- "\x39\x28\x8b\xa0\xed\xcb\x90\xf6\x0e\xc8\x5e\x6a\xea\x0b\x0c\xe7"
- "\x14\x15\x0b\x2c\x70\xfd\x97\x27\xb1\x5f\xcc\x0e\xcd\x8e\x03\x30"
- "\xc6\x78\xc8\xdc\x23\x9f\xa4\x99\x7d\x75\xa0\xf3\x82\x8c\x86\xed"
- "\xfc\x95\x67\xfa\x60\x83\xb1\xda\x4a\x6d\x90\xe6\xf4\x38\x3f\x5d"
- "\x0a\xfa\x78\x61\x9e\x0b\x5c\xb3\x7f\xf9\x3a\xfa\x85\xf0\x05\xb0"
- "\x5e\x85\x4c\xc8\x28\x9a\x6b\x56\x4a\xeb\xb2\xba\x16\xd6\xb3\x86"
- "\xd1\x1a\x3e\x1d\xf3\x81\x1c\x84\xf7\x42\x3d\xe8\x83\x3a\x2b\xc5"
- "\x94\x0f\xe7\xae\x53\xa2\x8d\xc4\x0a\xf8\x50\xfe\xd5\xdf\x68\x7e"
- "\xd9\x8b\x8a\xde\x97\x8f\x45\xdb\x08\x3e\x7f\xca\x13\xf8\x9d\xa1"
- "\xb7\xba\x55\x59\x30\xb0\xd5\xaf\x67\x7e\x7a\xbd\x94\x5b\xd3\x39"
- "\x87\x26\xe2\xcc\xee\xb9\xd0\x26\xe2\x4c\x5d\x86\x92\x61\x4b\x24"
- "\xda\xe9\xfc\x5d\xb1\xa5\xa2\xe9\x32\x49\x03\x3e\xae\x88\xd3\xd3"
- "\x9c\x2d\x5d\x01\xdf\xb9\x95\x80\x27\x37\x41\xe7\x07\x3c\x41\x1c"
- "\xd8\x0e\xf8\xc1\xad\x04\x5d\xff\x06\xe8\xfa\x02\x8e\xa0\xec\x85"
- "\xc7\x99\xc0\xa3\x81\xa5\x70\x0e\xe8\xc4\x01\xae\x03\x9e\x68\xb6"
- "\xa6\x90\xb0\xad\xc0\xa3\xdb\x10\x47\x40\x2e\x7e\x51\x0b\x38\xb2"
- "\x1c\x70\x24\x89\xe6\x38\x0e\xdd\xae\x64\xf8\xf1\x71\xdd\x3a\xa5"
- "\x4e\xcc\x71\x4e\xc7\xf7\xb1\xd5\x95\xc8\x1f\x31\x19\xd8\x57\xa5"
- "\x1d\xd7\xa7\x95\xd1\x3e\x95\x16\xe0\x91\xdc\xb9\x5a\x3c\x47\xe7"
- "\xed\xf2\xb8\x2e\x1c\xe3\xb5\x48\x1c\x93\x1d\x57\x48\x38\xcd\x03"
- "\xfa\x7d\x68\x97\x8d\x8b\x48\xdf\xed\x57\x48\xd8\xf6\x45\x44\x03"
- "\xf3\x55\xb9\x1d\xfa\x30\x6b\x89\x8a\xd0\xdc\x28\x7e\x3d\x0b\xe0"
- "\xbc\xdb\xdc\x28\x20\x57\x87\x6e\xc7\x39\xb3\x58\xe3\xe8\x93\x4d"
- "\x97\x10\x6e\x87\xb1\xa3\x71\xe4\x14\x8f\x31\x5f\x27\xd5\xaf\xa2"
- "\x98\x9c\xff\xcb\x00\xe6\xfb\xd4\x77\x32\xe8\x2a\x9d\x1b\x15\x8f"
- "\x1d\xe6\xdf\x1a\x38\x46\x9b\x42\x14\x8d\xe2\x35\x90\x3d\x39\xa0"
- "\x55\xff\x0c\x92\xc1\x05\xe5\x17\x1b\x93\x2f\x63\xae\x01\x2f\xe7"
- "\xe1\x63\x35\xd8\x96\x5d\x97\x30\x90\xfa\x1b\xbd\x95\x10\xb1\xa3"
- "\x91\x84\xf3\x7f\x04\x7a\x2c\x80\x77\x6d\x24\x61\xf9\x8d\xf0\xae"
- "\xcb\xd9\xbb\x8a\x39\xdd\xb9\xcc\x82\x08\xb8\xd6\x6e\x5e\x31\xf3"
- "\x1f\x31\xaf\x58\x98\x1a\x30\xec\x17\xfc\x63\xe8\xcb\x4c\xe3\xfc"
- "\xb4\x18\x6d\x67\x08\x3e\x17\xed\x43\xc6\xab\x94\xa7\x3f\x42\x5e"
- "\xe6\xf4\xf1\xaa\xd9\xb5\xc0\xdb\x2d\x71\x68\x2b\x53\x1d\xac\x33"
- "\x63\x5c\x1d\x2a\xf3\x99\x14\xea\x7a\x94\xd3\x0e\xc1\x39\xe4\x7d"
- "\x27\x9e\xaf\x47\x9e\xc7\xeb\x94\xef\xe1\x3e\x63\xed\x05\x82\xed"
- "\x39\xb7\x83\xf4\x17\xdb\xba\xa8\x08\xdb\x82\x6d\x21\x2f\xa0\x5d"
- "\x07\xe7\x1a\xa3\x7d\x31\xfa\xad\x87\xf2\x21\xa3\xcc\xac\x6c\xc6"
- "\x9c\x39\x2a\xe4\x01\xca\x2b\x80\xdf\x18\xc7\x99\xe7\xa3\x7d\x80"
- "\xcf\xb0\x9f\x5d\x80\xde\xe1\x22\x5f\xc0\xb9\x60\x57\xde\xe8\xba"
- "\x5a\x85\x3a\x4d\x30\xfe\xbe\x55\xfe\xf0\x8e\x7e\x61\x1e\xfd\x5f"
- "\xb9\x30\x90\x6f\x01\x2f\x11\x37\xed\xcd\x4e\x98\xd9\xc4\x30\x13"
- "\x31\x49\xc4\x4d\x8a\x4d\x34\x5f\x44\x31\xfa\xbc\x32\x9f\x76\x2f"
- "\x71\xb3\xa2\x49\xc2\xcd\x17\xb5\x4e\xb8\xd9\xc4\xdf\xe0\xfa\xb8"
- "\xc3\xcd\x3e\x5b\xe4\xb8\xd9\x67\x9b\x1c\x37\x9f\x50\xb8\xe2\x66"
- "\x5b\xcc\xec\x73\xc6\x1d\x5e\x82\x1e\xf3\x68\xa3\x42\x53\xe4\x19"
- "\x2b\x1f\xf7\xf7\x1e\x2b\x7f\xd5\x43\x8e\x95\x8f\x8f\xfb\xff\x17"
- "\x2b\x7f\xb5\x5b\x86\x95\xaa\x5b\xc4\xca\x46\x8a\x95\xc1\xfc\x3f"
- "\x61\x4e\x08\xf8\xb1\x7d\x81\x07\xac\x5c\xd0\xc1\x5c\xf8\xa3\x27"
- "\xac\xd4\x74\x92\x63\xa5\x66\xb0\x1c\x2b\x7f\x75\x59\xc2\x4a\xe1"
- "\xda\x1d\xc1\x4a\x8d\xef\xbd\xc1\x4a\x8d\x2f\xc5\xca\x2b\x88\x95"
- "\x9a\xf3\x1d\x63\xe5\xe3\x2a\xf7\x58\x09\xe7\x29\x56\x3e\xae\x92"
- "\xb0\xf2\x4c\x07\x58\xf9\xc4\x51\x2f\xb0\x32\x98\x62\xa5\xca\x03"
- "\x56\x2e\x80\xb1\x12\xf8\x82\xf2\x9e\x0b\x6f\x08\x58\x19\xea\xc0"
- "\xca\x5b\xe0\x0f\xef\xe8\xf7\x44\x49\x7b\x58\xc9\xe9\x98\x7c\x89"
- "\x58\xc9\x87\x08\x58\xb9\xd0\x46\x52\x4e\x01\x46\x56\x37\xd2\xbc"
- "\x38\xd4\x57\x18\xfe\x53\xa7\x23\x16\x45\xe9\xf6\xc0\x78\x19\x4d"
- "\x45\x14\x9b\xa8\xcf\xeb\x38\xc4\xaa\x22\xa8\x9b\xe7\x90\x3b\x29"
- "\x76\x9e\x12\xb0\x73\x86\x80\x9d\xb3\x7e\x04\x76\xbe\x84\xb4\x7c"
- "\xf2\x64\xab\x52\xc4\xce\xb7\x00\x3b\x9f\xa4\xf2\x03\x7e\xd3\x64"
- "\xd8\xd9\x7f\xa2\xd8\x2f\xb4\x69\x1a\x13\xdf\x21\xac\x5f\x57\xdb"
- "\xe2\xe8\x58\x6c\xef\xa9\x27\x0c\x0b\x9a\x88\x03\x4b\x67\x48\x58"
- "\x0a\x6d\x29\x3c\xe3\xe8\x53\x51\x0e\x1c\xcd\x04\x1c\x3d\xeb\x84"
- "\xa3\xa0\x37\x7d\x88\x98\x07\x38\xda\x42\x71\xf4\x63\x01\x47\xfb"
- "\xce\x39\x36\x03\x70\x74\xac\x88\xa3\x4f\xe5\x58\x33\x0b\x06\x5a"
- "\xb3\x3a\xc6\xd1\x16\x8a\xa3\xda\xbb\x8f\xa3\x25\x2e\x38\x0a\xba"
- "\x2b\xe6\x75\x77\x8b\xa3\x22\x3f\x52\x1c\xcd\x90\x70\x94\x8e\x6b"
- "\x5f\x7b\x65\x0c\x8c\x7b\x8c\x96\xea\x6e\x0e\x1c\xd5\x16\x31\x1c"
- "\x85\x73\xd4\x7e\xb2\x14\x70\x14\xf8\x2f\xbd\x02\xe3\x05\x92\x48"
- "\xe8\xa3\x0a\xf1\x75\x07\xcc\x19\x1c\x23\x07\x9e\x2e\x80\x39\x83"
- "\x18\xd3\x0c\x73\x06\x70\x74\xd6\x35\x15\xa1\xf3\x25\x0b\xe6\x4b"
- "\xa3\x87\xbc\x7c\xa2\x0f\xae\x47\x3c\xed\x37\x45\x8e\xa7\xfd\xd6"
- "\xc9\xf1\xb4\xdf\x50\x09\x4f\x85\x6b\x88\xa7\x40\x33\x18\x9f\x62"
- "\xc4\xd4\xdb\xc3\xd3\x7e\x93\x1d\x78\xaa\x14\xf0\x74\x41\xc7\x78"
- "\x4a\xbf\xfd\x79\xc0\x53\x67\x6c\xf0\x8c\xa7\xfd\x26\x4b\x78\xda"
- "\xff\x69\x07\x9e\xd6\x78\xc2\xd3\xa7\xa2\xdd\xe3\x29\x9c\xa7\x78"
- "\xfa\x54\xb4\x03\x4f\x6b\xdc\xe0\xe9\x58\x67\x3c\x1d\xd0\x9b\xe1"
- "\x69\x11\xc5\x51\xc4\xd4\x4a\x0b\xf0\x07\xce\xb9\xc4\x3c\x8a\xa9"
- "\x1c\x60\x2a\xe6\x2a\xc6\x3c\x55\xe8\x6b\xef\x0e\x53\x19\xe6\x9a"
- "\x08\xe2\x2a\xce\xcd\xf4\xf1\xa0\xef\xc2\x5a\x04\x63\x42\xd7\x5e"
- "\x71\xfc\x76\x38\xe1\xeb\xec\x15\x2a\x94\xed\x64\xbc\xc2\x89\xbc"
- "\xd2\xac\x41\xbf\x5b\x19\xaf\x78\x47\xcb\x01\x6a\x4f\xd8\xea\x49"
- "\x77\x3f\x86\xba\xfb\x14\xa2\x5c\x39\x05\xf0\x35\x1a\x75\xf7\x42"
- "\x17\xdd\xbd\xb0\xad\xee\x7e\xb2\x7d\x1c\xf5\x4a\x77\x9f\x8a\x34"
- "\x0c\x7f\x58\x8e\xa3\xe1\xbd\xe5\x38\xfa\xeb\x6d\xd8\x2f\x86\xe3"
- "\x85\xee\x75\x77\x3a\xcf\xc3\xe3\x1d\xba\x7b\x8d\x1c\x3f\x25\xdd"
- "\xfd\xd7\xe3\x3d\xe3\x68\x78\x9e\x4c\x1e\x9d\x25\xe0\xe8\x5c\x01"
- "\x47\xe7\x4a\x38\x7a\xfc\x0b\x51\x1e\x7d\xfa\xa3\xb2\x1a\x67\x1c"
- "\x0d\xaf\x75\xe0\x68\x6d\x5b\x1c\x15\x31\x14\xf1\x14\xdb\x41\x5b"
- "\xd6\x2e\xc0\xe9\xbd\x73\xb5\x4a\x66\xab\x8d\xc1\xb1\xf3\x77\xb5"
- "\xd5\x56\x34\x5d\x23\x69\x33\x10\x4f\xf3\x28\x9e\x06\x2a\xc8\x1c"
- "\xc0\xbe\xae\xb8\x97\x20\x1f\xbf\xdb\x27\xb1\x3c\x6f\x68\x5f\xe2"
- "\x96\xb3\xbc\xa1\xa2\x9d\x09\xde\x97\x7e\xaf\x9f\x79\x46\xc0\xd4"
- "\xeb\x30\x1e\xc0\x73\x5b\xaf\x03\xa6\x26\xb9\x91\x4d\x57\x02\xa6"
- "\xa6\x38\xc9\xa6\x30\xf7\x3f\x9e\xeb\x8a\xa9\xcf\xbc\x50\x89\xbc"
- "\x82\x98\x2a\xd3\xe3\x0b\x7f\x06\x7a\xfc\x33\xef\xca\xb1\xf4\x99"
- "\x6a\x39\x96\x3e\xf3\x86\x84\xa5\xc2\xb5\x3b\x22\x9b\x3e\xa3\xbf"
- "\x37\xb2\xe9\x33\x7a\x49\x8f\xff\xf5\x2a\x07\x96\x56\x7b\xc2\xd2"
- "\x70\xbd\x7b\x2c\x85\xf3\x14\x4b\xc3\xf5\x0e\x2c\xad\x76\xa3\xc7"
- "\xcb\xb0\x74\xe0\x1c\x86\xa5\x85\x4c\x36\xad\x11\x65\xd3\xc2\x7f"
- "\x41\x3d\x7e\x60\x8c\xb7\x7a\xfc\xb1\x26\x86\x9f\x88\x4f\x22\x86"
- "\x4a\x7a\x7c\xa1\x67\x3d\xbe\x03\x0c\xf5\x4a\x16\xa5\x18\x3a\x68"
- "\x8e\x1c\x43\x07\xc5\xca\x31\x74\xf0\x49\x57\x0c\x6d\x8b\x9f\x83"
- "\x76\xba\xc3\x4e\xa6\xc7\x0f\x5e\xeb\x19\x37\x07\x55\x79\x8f\x9b"
- "\xff\x71\x59\x8e\x9b\xff\x11\xfc\xef\x81\x9b\xbf\x59\x2d\xc3\x4d"
- "\xd5\x2d\xe2\xe6\x4f\xa2\xd3\xff\xc6\xc5\xfe\x39\xd8\xc5\xfe\xf9"
- "\x1b\x27\xfb\xe7\xe0\x3b\x68\xff\xfc\xcd\x3d\xb2\x7f\xfe\xa6\x46"
- "\x92\x41\x07\x7f\xd4\x31\x6e\x0e\xaa\x71\x8f\x9b\x70\x9e\xe2\xe6"
- "\xa0\x1a\x09\x37\x3b\x92\x41\x7f\xbb\xc5\x0b\xdc\xfc\x99\xeb\xf4"
- "\xbf\x6d\xd7\xfe\xe9\x4e\xa7\x47\xdc\xa4\x78\x59\xe3\xa2\xd3\x4f"
- "\x71\xd6\xe9\x0b\x25\x9d\x7e\x0c\xc3\x2d\xa3\x4d\x27\xd7\xe9\xef"
- "\x38\x8e\x0e\x79\xdf\xea\xb0\x87\xbe\x09\x38\x3a\x84\xc6\x88\xb1"
- "\x3a\xec\xa1\xcf\x3d\x2d\xf6\x8b\xe9\xf4\x6f\x11\xd6\x2f\x37\x3a"
- "\x3d\xf5\x9b\x1d\x62\x77\xe8\xf4\x35\xae\x3a\xfd\xd0\xf3\x9e\x31"
- "\xf5\xd9\x30\xb7\x3a\x3d\xea\xdf\x14\x53\xb5\x14\x53\xaf\xe7\x3a"
- "\x63\x6a\xc4\x70\x8a\xa9\xcf\x8b\x98\xfa\x6c\x9c\x15\xe6\xa6\xd5"
- "\xaf\x63\x4c\xc5\x76\x24\x4c\x8d\xfb\x69\x30\xd5\x70\xeb\x98\xea"
- "\xbc\x87\xf5\x63\x78\x77\x07\xa6\xd2\x31\x8e\x38\x53\x19\x83\x98"
- "\x1a\xe7\xa2\xdf\x17\xba\xd7\xef\xcb\x88\x12\xc7\x47\xd4\xef\x91"
- "\x06\x14\x6f\xee\xaa\x7e\x3f\x74\x90\x1c\x5b\x87\xc6\xc9\xb1\x75"
- "\xe8\xc3\x12\xb6\x0a\xd7\xee\x88\x7e\x3f\x74\xe0\xbd\xd1\xef\x87"
- "\x0e\x94\xb0\xf5\xb9\xa0\x8e\xb1\xf5\xd9\xbe\xee\xb1\x15\xce\x53"
- "\x6c\x7d\xb6\x6f\xbb\xd8\xfa\xbc\x33\xb6\x0e\x53\x88\xd8\x2a\xe9"
- "\xf7\xc0\x1f\x38\xff\x12\x75\xb7\xaf\xdf\xbf\x70\xaf\xf5\xfb\x61"
- "\xc4\x2b\xfd\x3e\x17\x70\x16\x74\xf1\x95\x27\x40\xbf\x9f\x28\xe8"
- "\xf7\xb5\x7a\x17\xfd\x5e\xdf\x46\xbf\x4f\x9d\x28\x60\x2a\xcc\x29"
- "\x8a\xa9\x73\x0b\x6f\x5f\xbf\x9f\x84\x34\x1c\x66\x97\x63\x6a\xa4"
- "\x42\x8e\xa9\x23\x37\x61\xbf\x18\xa6\xeb\xdd\xeb\xf7\x74\x9e\x47"
- "\x8e\x97\xe9\xf7\xd0\xbf\xb6\xfa\xfd\xc8\xe1\x32\x4c\x9d\xe5\x8c"
- "\xa9\x91\xc9\x32\x39\x15\xde\x0b\x31\xf5\xfd\xb3\x0c\x53\x3f\x38"
- "\xeb\x84\xa9\x2f\x7e\x20\x60\xea\xf0\xf7\xcb\x26\x3b\x63\x6a\xe4"
- "\x01\x11\x53\x29\x5e\xce\xb2\x2a\xd3\xa3\xdb\xfa\x9d\x50\x7f\x1f"
- "\xf4\x05\x82\xb6\x71\x9f\x14\xb6\xb9\xfb\x6c\x5c\xc7\xfe\x26\xd1"
- "\xee\xfd\x4d\x8c\x89\x26\x52\x5e\xaf\xa3\x7e\x26\xf9\xe8\x67\xb2"
- "\x9a\xf4\xce\xbf\xc1\xe2\x07\xd0\x1c\x1f\xd7\xdd\xc7\x0e\x98\x39"
- "\x5d\xc2\x59\xf4\xc9\xda\x8a\x3e\x59\xd7\x99\x0f\x10\xd0\xbb\x6d"
- "\xac\x00\x51\x6e\x02\x3c\xd8\x7f\xd6\x15\x67\x47\x0c\xad\x44\xfe"
- "\x99\x11\xe7\xa2\xf3\xeb\x7f\x06\x3a\xff\x88\xcd\x72\x7c\x1d\x51"
- "\x2a\xc7\xd7\x11\xab\x24\x7c\x15\xae\xdd\x11\xd9\x75\x44\xce\xbd"
- "\x91\x5d\x47\xe4\x48\x3a\xff\xc8\x25\x0e\x7c\xad\x72\xc2\xd7\xb3"
- "\xce\xf8\x1a\x99\x41\xf1\xf5\xac\x2b\xbe\xc2\x79\x8a\xaf\x91\x19"
- "\x0e\x7c\xad\x72\xd1\xf9\xcf\xba\xe2\xeb\xa8\x29\x14\x5f\x6b\xf5"
- "\x2e\xb2\xab\xbe\x63\x9d\xbf\xf6\xe7\xa6\xf3\x8f\x9a\xec\x95\xce"
- "\x8f\x98\xba\x90\x61\x2a\x62\x96\x88\xab\x92\xce\xaf\xf7\xa8\xf3"
- "\x77\x84\xab\x5e\xc9\xaa\x14\x57\x47\x4f\x91\xe3\xea\xe8\xe9\x72"
- "\x5c\x1d\x73\xc6\x15\x57\xdb\x62\xea\xe8\x2d\xee\xf0\x94\xe9\xfc"
- "\x63\xd6\x7b\xc6\xd2\xd1\x25\xde\x63\xe9\xf3\xd7\xe4\x58\xfa\xbc"
- "\xff\xbf\x2f\x96\xfe\xee\x0d\x19\x96\xaa\x6e\x11\x4b\x7f\x12\x3b"
- "\xc0\xef\xce\xcb\xb1\x74\x4c\xb0\x1c\x4b\x7f\x57\x26\x61\xa9\x70"
- "\xed\x8e\x60\xe9\xef\x4c\xf7\x06\x4b\x7f\x67\x92\x64\xd5\x31\x9f"
- "\x74\x8c\xa5\xa3\xcb\xdd\x63\x29\x9c\xa7\x58\x3a\xba\x5c\xc2\xd2"
- "\x33\x1d\x60\xe9\x0b\xef\x7a\x81\xa5\x72\x3b\x80\x2b\x96\xde\x73"
- "\x3b\xc0\x0b\x7a\xaf\xec\x00\x22\x96\x4e\x6c\x6b\x07\x40\x7c\xa5"
- "\x76\x00\x18\x2f\x11\xc3\xa8\x1d\x60\x14\xc3\x32\xa3\x6d\x9d\xcc"
- "\x0e\x70\xe7\xb1\x75\xec\x5f\xad\x0e\x7b\x6a\x26\x60\xeb\x58\x9a"
- "\xff\xc3\xea\xb0\xa7\xbe\x38\x5e\xec\x17\xb3\x03\xbc\x49\x58\xbf"
- "\xdc\xd8\x01\x46\x60\x7b\xbf\xef\x24\xb3\x03\x38\x61\xed\x45\xc5"
- "\x78\xbb\x67\x9c\xfd\x7d\x5f\x99\x1d\xa0\x4e\xc2\xd9\xeb\xe8\xa3"
- "\x0e\x38\x48\x71\x36\xc4\x19\x67\xc7\xcd\xa4\x38\x3b\x42\xc4\xd9"
- "\xdf\x6b\x5b\x60\x6e\xb6\x78\x8b\xb3\xb8\x8f\xe0\x6c\xcc\xbd\xc1"
- "\xd9\x62\x2f\x70\xd6\xc9\x36\xb0\x1f\xc6\xc3\x81\xb3\x74\xdc\xc7"
- "\xb5\x56\xce\x40\x9c\x8d\x71\xb1\x0d\xe8\xdd\xdb\x06\x8e\xde\x0b"
- "\xdb\xc0\xf8\x89\x72\xbc\x1d\xbf\x56\x8e\xb7\xe3\x7f\x2b\xe1\xad"
- "\x70\xed\x8e\xd8\x06\xc6\x47\xdd\x1b\xdb\xc0\xf8\x28\x09\x6f\x5f"
- "\xec\xd7\x31\xde\xfe\x7e\xa0\x7b\xbc\x85\xf3\x14\x6f\x7f\x3f\xb0"
- "\x5d\xbc\x1d\xe1\x8c\xb7\x13\x1e\x16\xf1\x56\xb2\x0d\xe8\x05\xdb"
- "\xc0\xba\x8e\x6d\x03\xb5\x1e\x6c\x03\xa3\xef\xb5\x6d\x60\x82\xc7"
- "\x18\xd2\xee\x6c\x03\xad\xb9\xcc\x6f\x7f\x25\xfa\xed\xcf\x04\xfc"
- "\x8d\xfa\x02\xc6\xa0\x63\xbf\xfd\x54\xd1\xff\x34\x26\x4f\xc0\xd9"
- "\x3c\xb7\xb6\x81\x63\x0d\x9e\x6d\x03\xc7\xaa\x9d\xfd\x4f\xa3\x7a"
- "\xc8\xbf\x5b\x45\x3d\x2c\x7e\xb7\x3a\xf6\x15\xe2\xec\x64\x9a\xd7"
- "\x85\xcb\x99\x66\x60\xf1\x0c\x27\x87\x61\x3f\xdd\xf9\xf1\x7f\xcc"
- "\x39\x7f\xcb\x8a\x5a\xe1\xb0\x15\x54\x21\xde\xe6\x11\x8e\x8f\xf3"
- "\xc3\x58\xe4\xd4\x56\x30\x15\x79\xef\x0f\x27\x9d\x71\xf7\xe0\x69"
- "\x67\xdc\x8d\x2a\x10\x71\xd7\x0e\xb8\xfb\x49\x5d\x1e\xb3\xbf\xbe"
- "\xc4\x7c\x53\x77\xbd\xe4\xe4\x9b\xfa\xc5\xa7\x02\xee\x4e\x7c\xb7"
- "\xcc\x04\xef\xdf\x9e\xff\x14\xdc\xbf\xe7\xf4\xad\xfa\xa0\xe6\xb9"
- "\xf5\x9d\x12\xf0\xc9\xad\xff\x14\xf4\x55\xb5\x4d\x98\xab\x76\x98"
- "\xa7\xdb\x9c\xfc\xa7\xf2\x53\x60\x3e\x0b\xfb\x4a\xda\xf5\x43\x7d"
- "\x49\xf2\x43\xe5\x73\xa6\xd2\xbc\xae\xdc\xe6\x69\x86\x1b\x7c\x9c"
- "\x0f\x1f\x3c\xd5\x86\xcf\xbf\x79\x13\xd6\x9d\x91\xd1\x3e\x4c\xaf"
- "\x9b\x6a\x02\xec\xe9\xca\xc6\x7d\x62\xad\x1d\xd6\x1a\x3b\xac\x35"
- "\x5c\xce\x54\x93\x0d\x65\x93\xdc\xa9\xf5\xf9\xa0\xe7\xd9\x32\x69"
- "\xce\xd6\x2e\xd9\xa0\xeb\xed\x40\x3d\xef\x0a\xcc\x8d\x74\x8d\x12"
- "\xfb\x23\xe2\x68\x60\x03\xbc\xc7\x95\xf6\x65\x39\xdb\xf7\x12\x8e"
- "\x1a\xc6\x1e\x83\x67\x4e\x3a\x51\x89\xbc\x1b\x2d\xed\x29\xa0\x32"
- "\xb3\x07\x5f\x59\xec\x0b\x8b\xbb\x08\xbc\x70\x07\x6c\x12\xce\xfd"
- "\x91\xe3\xfa\x1f\x9e\x90\xe3\xfa\x1f\x66\xc8\x71\xfd\x0f\x41\x12"
- "\xae\x0b\xd7\x00\xd7\x81\x6e\x54\x8e\x86\xb5\xef\x36\xe5\xe8\x3f"
- "\x68\x44\x5c\xe7\x04\x5c\xdf\x7e\x0b\xb8\xde\xae\x1c\xed\x84\x4b"
- "\x9e\x71\xfd\x0f\x1a\xc9\x26\x31\xb9\x93\x5b\x1f\xd9\xd3\xce\xb8"
- "\x1e\xb5\x8b\xe2\xfa\x69\x57\x5c\x87\xf3\x14\xd7\xa3\x76\x79\xdc"
- "\x4f\x70\xda\xf5\x7b\xda\xe4\x4b\x14\xd7\x6b\x04\x1f\xd9\x2a\x2f"
- "\xf6\x13\xd4\x30\x4c\x17\xb1\x1c\xed\x55\xf7\xd6\x26\x31\xb9\xc1"
- "\x1b\x9b\x04\xc5\xf2\x26\x86\xe5\x88\x8d\x22\x9e\xdf\xca\x7e\x82"
- "\x8e\xf0\x5c\x94\x9b\x11\xcf\x3d\xc9\xcd\x72\x3c\x9f\x72\x49\x8e"
- "\xe7\x53\x2e\xcb\xf1\x7c\xfa\x25\x39\x9e\x4f\x6f\x70\xc5\xf3\xb6"
- "\x58\x3e\x75\xa8\x3b\x1c\xd7\x4e\x45\x1b\xc5\xf4\x3c\xcf\x18\x3e"
- "\x35\xce\x7b\x0c\x9f\x16\xfb\x6f\x87\xe1\x2a\x57\x0c\x9f\xa6\x47"
- "\x0c\xb2\x67\xb9\x60\xf8\x02\x01\xc3\x05\x1c\xd9\xd1\x28\xc8\xc2"
- "\xae\x18\xde\x04\xef\xd1\x81\x3e\x6e\xfb\xa7\x2b\x86\x47\x6f\x96"
- "\x61\xb8\xaa\x03\x0c\x5f\xc0\xec\x20\x32\xbf\x5c\x0f\xb6\x10\x78"
- "\x8f\x82\x6d\x1e\x64\x73\x71\xcc\x9c\xfb\x23\xc7\xf0\xe8\xcb\x72"
- "\x0c\x9f\xae\x96\x63\x78\xf4\x49\x09\xc3\x85\x6b\x77\x44\x36\x8f"
- "\x6e\xba\xe3\xb2\xb9\xc8\x1f\xed\x62\x78\x74\x93\x24\x9b\x4f\x2f"
- "\xeb\x18\xc3\xa7\x6a\xdd\x63\x38\x9c\xa7\x18\x3e\x55\xeb\x71\x9f"
- "\x43\x1b\x0c\x7f\xe9\x7d\x2f\x30\x5c\x6e\x0b\x11\x31\x5c\xb0\x85"
- "\xec\x70\xb2\x85\xd8\x33\x99\x2d\x64\x5b\x23\xe3\x8d\xae\x0a\xc6"
- "\xa7\xc0\x3f\xa1\xdb\x95\xed\xeb\x6e\xdb\x6e\xcb\x0e\xf2\x52\x9b"
- "\x98\xe4\xed\xd9\x41\x28\x7e\xe3\x1e\x87\xe9\x80\xdb\x55\xb7\xb8"
- "\xc7\x61\x8c\xb8\xc7\x41\xe7\x61\x8f\x83\x80\xe7\xb3\x7e\x04\x9e"
- "\xd3\x3d\x0e\x2f\xef\x97\xdb\x98\x5f\xfe\x44\xb4\x31\x33\x3c\x9f"
- "\x5d\x21\xc7\xf3\xd9\xe5\x8e\x3d\x0f\x80\xf9\x46\xed\x5b\x6d\xf6"
- "\x3c\x38\xb0\x9d\xda\x41\x67\x3c\x6c\x98\x5a\x4f\x1c\xf8\x3e\x43"
- "\xc2\x77\x68\x6b\x95\x0c\xdb\xeb\x9c\xb1\x7d\xc6\x28\x19\xb6\x9f"
- "\xcd\x93\xfb\x47\xd4\x69\x9d\xb0\x5d\xdc\xf3\x30\x73\x78\x59\x6d"
- "\x07\xd8\x0e\xf7\xdf\xfa\x1e\xb1\x3b\x8b\xed\xe2\xfe\x06\xb7\xd8"
- "\xee\xbc\xbf\xc1\xc9\xff\x01\xb1\x9d\xe6\xbd\xe8\xee\x82\xed\x2b"
- "\xe3\x94\xf6\x23\x30\x1f\x00\xd7\x71\x8e\xd8\x79\xc0\x76\x3a\xde"
- "\x33\x53\x9d\xb1\xfd\x66\x26\xc3\xf6\xad\x8d\x3f\x1e\xdb\x1d\xf2"
- "\xb0\x33\xb6\x3f\x8f\xd8\x3e\x6b\x05\xdb\x7f\x91\x71\x6b\xfb\x2f"
- "\x5c\xfc\x33\xb6\xde\x82\xfd\xa5\x5d\x8c\x77\xd3\x2f\x39\xc6\xcf"
- "\x3a\x21\xc7\xf8\xd9\xbe\x72\x8c\x9f\xb5\x5f\xc2\x78\xe1\xda\x1d"
- "\x91\xd3\x67\x55\xdd\x1b\xfb\xcb\xac\x2a\x09\xe3\x67\xef\xee\x78"
- "\xef\xc5\x8c\x71\xee\x7d\x33\xe0\x3c\xc5\xf8\x19\xe3\xda\xdd\x7b"
- "\x21\xb3\x77\xc7\x6c\x73\xbb\xf7\xa2\xea\xa7\xf3\xcd\x70\xe6\x15"
- "\x57\xfb\xcb\xed\xdb\xbe\x63\xf2\xbd\xb5\xbf\xe0\xde\x8b\x95\x27"
- "\x9d\xf6\x5e\xd4\x76\xbc\xf7\x22\x75\xca\x2d\xda\x5f\xda\xf1\xcd"
- "\x38\x16\xe5\xec\xef\x36\x67\x8b\x1c\xdf\xe7\x6c\x73\xe0\xfb\x24"
- "\xc4\xf7\xd8\xbf\xca\xf1\x3d\xb6\x08\xfb\xe9\x6e\x2f\xc6\xc7\xb2"
- "\xef\x8a\x73\x5a\xe5\xbe\x1a\x2e\xf6\x97\x49\xc8\x7b\xb1\x73\x64"
- "\xf8\x7e\xd6\x19\xdf\xe7\x86\xb9\x93\xdd\xd1\xee\x4d\x7d\x8a\x67"
- "\x39\xed\x69\x7b\x51\xf4\x7f\x7b\xa5\x5f\x59\x34\xbc\xbf\xc9\x83"
- "\xaf\xdb\x2c\xe6\xeb\x46\x7d\xdb\xd0\x0e\x0e\x6d\xed\x9d\xa5\x55"
- "\xa6\xc5\xf0\x1c\xfa\xba\xb9\xfa\xb9\xa1\xef\x1b\xfa\xba\x55\xc4"
- "\xe9\x3c\xfa\xb9\x21\x6f\x7a\xf2\x75\x83\x7e\x07\x53\xac\x3f\x2f"
- "\x60\xbd\xe0\xeb\x96\x9f\x24\xf9\xba\xc9\xb0\xde\x8d\xff\xf0\xfe"
- "\xb3\x19\xee\xe5\xf8\x74\x09\xeb\x6f\xa0\x1c\xff\xac\x8b\x2d\x86"
- "\xd2\xe0\x95\xb8\x9f\xd4\x16\x43\xb1\x7e\xde\xcc\x4a\xe4\xe3\x19"
- "\x5a\x37\xb6\x98\xb6\x3e\xce\x3f\x9d\x2d\x66\xde\x47\x72\x8c\x9f"
- "\xd7\x20\xc7\xf8\x79\xdb\x24\x8c\x17\xae\xdd\x11\x8c\x9f\xb7\xef"
- "\xde\xd8\x62\xe6\xed\x93\x6c\x31\xb1\x9b\xdc\xfa\xdf\xc9\x6c\xec"
- "\x73\xfb\xba\xb7\xb1\xcf\x15\xfc\xef\xe6\xf6\xf5\xb8\x27\xa4\xcd"
- "\x37\xcd\x57\x97\x31\x1b\xfb\x6d\xec\x09\xa9\xfd\xb9\xd9\x62\x5e"
- "\x4d\xf4\xd6\x16\x43\x7d\x9b\x4f\xa2\x7f\x88\x77\x7b\x42\x3a\xc2"
- "\x76\x87\xec\xde\xce\x37\x4c\x39\xb6\xbf\xb6\x4c\x8e\xed\xaf\xad"
- "\x90\x63\xfb\x1f\x57\xcb\xb1\xfd\x8f\x19\xae\xd8\xde\x16\xd7\x5f"
- "\x2b\x73\x87\xe9\xda\x49\x68\x8b\xf9\x63\xb8\x67\x3c\x7f\xcd\xe2"
- "\x3d\x9e\xc7\xd9\xff\xad\xf1\x5c\xe5\x8a\xe7\xf3\x07\xff\xa4\x76"
- "\x19\x8a\xe7\x0b\xfa\xc9\xf0\x5c\xd5\x01\x9e\xff\x64\x76\x99\x05"
- "\xaf\xcb\xf1\x7c\x41\xb1\x1c\xcf\x17\xc4\x4b\x78\x2e\x5c\xbb\x23"
- "\x76\x99\x05\x6b\xef\x8d\x5d\x66\xc1\x5a\x49\x66\xff\xe3\x9c\x8e"
- "\xf1\xfc\x35\x9b\x7b\x3c\x87\xf3\x14\xcf\x5f\xb3\x79\xf4\xa7\x6e"
- "\x83\xe7\x0b\x87\x7b\x81\xe7\x6e\x7d\x54\x7e\x1e\x76\x99\x85\x91"
- "\xde\xda\x65\x3c\xed\x53\x41\x7c\x97\xfc\x53\x9c\xf6\xa9\x44\x8a"
- "\xfb\x54\x32\xe4\xfe\x29\x77\x1c\xdb\xe3\x27\xca\xb1\x3d\x7e\x8a"
- "\x1c\xdb\x97\x2c\x91\x63\xfb\x12\xad\xd8\x4f\x66\x97\xc9\x6c\xb3"
- "\x6f\x45\x8e\xf3\xf1\x1f\x19\x26\xd5\x13\x77\x58\x0f\x6d\xf5\xf6"
- "\x8c\xf3\xf1\xb5\x9e\x70\x1e\xfd\x55\x3e\x9c\x15\xe7\x06\xe7\x17"
- "\x5d\xf8\xff\x01\xe7\x3d\xf9\xa1\x50\x3d\x08\x30\x1e\xf1\x9e\xe2"
- "\xbb\x80\xf5\x88\xf3\xf6\x7f\xb8\xb3\xd1\x2c\x56\xdf\x2d\x9c\xf7"
- "\x6c\xa3\xd1\x3e\x5c\x39\x43\xc0\xf9\x5b\xd9\x43\x73\x58\x6e\xa3"
- "\xc9\x5f\x70\xb7\x6d\x34\xda\x65\x72\xbc\xd7\x16\xca\xf1\x5e\x3b"
- "\x53\xc2\x7b\xe1\xda\x1d\x91\xdf\xb5\x89\xf7\xc6\x46\xa3\x4d\x94"
- "\xf0\x7e\xc9\xc4\x8e\xf1\x3e\xbe\xde\x3d\xde\xc7\x0b\xb1\xd9\xe2"
- "\xeb\x6f\x1d\xef\x13\x1c\x78\xdf\x76\xff\x4c\xc6\xed\xfb\xc8\x0c"
- "\xbf\xd7\x36\x9a\x04\x8f\xf8\xdf\x5e\x7c\x8c\xdb\xb7\xd1\x08\x7b"
- "\x12\xe7\xba\x8f\x8f\x51\xd6\x8e\x8f\x4c\x59\xb9\x33\xd6\x2f\x1d"
- "\x2a\xf7\x45\x5c\x3a\x5c\xf4\x45\x2c\xab\x44\xac\x5f\x3e\x5f\x8e"
- "\xf5\xcb\xe3\x3c\xd9\x68\xf6\x73\xce\x3e\x89\x4b\xb7\xc9\x6d\x34"
- "\x7a\xb9\x8d\xe6\x45\xe4\xbd\xe5\x3d\x3c\x63\xfd\xd2\x52\xb9\x0f"
- "\x38\xdb\xa3\xf8\xfe\x2c\xc1\x07\x7c\x96\x93\x0f\xf8\xd8\xf7\x04"
- "\xac\x4f\xbc\x50\x5a\x65\x23\xde\xf8\x21\xfe\x78\x5f\xef\x75\x6e"
- "\x7d\x10\xe9\x1a\xd0\x8e\x1f\xe2\xec\x53\x2a\xf4\x69\x8e\xd8\x9e"
- "\xe4\xe4\x87\xd8\x4e\x3c\x63\x19\xfe\xcf\xd2\x7a\xc4\xff\x56\x5e"
- "\xc2\x7f\xee\x37\x92\xdd\x86\x43\x39\x9f\xd2\x65\x99\xfa\x6e\xd9"
- "\x6d\xdc\xd9\x49\x0c\x23\x10\xff\x93\xba\x33\x39\x3f\xee\x67\x66"
- "\xb7\x49\x8a\x97\xe3\x7e\x92\x5e\x8e\xfb\x49\x53\x24\xdc\x17\xae"
- "\xdd\x11\x5f\xf4\xa4\x85\xf7\x46\xce\x4f\x5a\x28\xd9\x6d\x96\xbf"
- "\xd0\x31\xee\x2f\xad\x72\x8f\xfb\x4b\xab\x18\xee\x2f\xad\x6a\xd7"
- "\x6e\x23\xf3\x8d\x4c\xee\xf7\xa3\xed\x36\xa2\x9c\x7f\xcf\xf7\xf5"
- "\x24\xf7\xf5\xc6\x6e\xe3\xd8\x93\xfe\xa3\xec\x36\xee\xf1\x5e\x94"
- "\xed\xcb\xda\xf9\xe6\x2a\xc7\xfb\x15\xfd\xe4\x78\xbf\xe2\x69\x39"
- "\xde\xaf\x1a\x2f\xc7\xfb\x55\xe3\xdc\xd9\x6d\xe4\x58\xbf\x62\xb5"
- "\x3b\x9c\xd7\xbe\x88\x76\x9b\x54\x9b\x67\x8c\x5f\xb1\xcb\x7b\x8c"
- "\x4f\x29\xfb\x3f\x8c\x77\xc1\x78\x95\x2b\xc6\xaf\xf4\xfd\x49\x65"
- "\x7c\x8a\xf1\x2b\x5b\x65\x18\x7f\x07\x6d\x39\xb7\xb2\x9f\xc4\xb3"
- "\x6c\x9f\xea\xe2\xff\x9e\xea\xe2\xff\x9e\xea\xe4\xff\x9e\xba\xf6"
- "\xce\x61\x7c\xea\x9d\xf7\x7f\xbf\x25\x8c\x4f\x75\xf2\x7f\x5f\xd5"
- "\xaf\x63\x8c\x5f\xb1\xcf\x3d\xc6\xc3\x79\x8a\xf1\x2b\xf6\xb5\x2b"
- "\xdb\xcb\x30\x3e\x2d\xe8\x6e\xd8\x72\xee\xcd\x7e\xa3\x34\x95\x37"
- "\xf6\x9c\xf6\xe2\x8e\x78\xb4\xe7\x0c\x16\xed\x39\x5a\x0f\xf6\x9c"
- "\x3b\x85\xf9\xe9\xbd\xe5\x98\x9f\xde\x47\x8e\xf9\x6b\xa6\xc8\x31"
- "\x7f\xcd\x64\xb9\x3d\x27\xa1\x8d\x3d\x47\x8e\xff\xe9\xaf\x1b\x5e"
- "\x74\xb6\xe7\xe8\x9d\xec\x39\x6b\x3a\x79\xc6\xff\x74\x8f\xf8\x7f"
- "\x9d\xe2\x7f\x8c\x1b\xfc\xcf\xf8\x37\xc1\xff\x98\x1f\x81\xff\xab"
- "\xef\x01\xfe\x67\x2a\x98\x8d\xe7\x16\xe3\xa4\xec\xf7\xde\xc6\xf3"
- "\xe3\xd6\x81\xcc\xe9\xf2\x75\x20\x73\xbd\x7c\x1d\xc8\x1c\x2e\xad"
- "\x03\xc2\xb5\x3b\xb2\x0e\x64\x46\xdf\x9b\x75\x20\x33\x5a\x5a\x07"
- "\xd6\x0c\xea\x78\x1d\x48\xf7\xb0\x0e\xa4\x0b\xeb\x40\xba\x17\xeb"
- "\xc0\xda\x3e\x9e\x6d\x3c\xda\xdb\xb7\xf1\xfc\xf6\x5e\xef\x83\x5a"
- "\x1b\xe6\x95\x8d\x27\x37\xba\xa8\x1c\x63\xa4\x9c\x27\xca\x95\x73"
- "\x44\x1b\x8f\xc1\xc5\xc6\x63\x68\x63\xe3\x59\x71\x5e\xc0\xff\x71"
- "\xc2\x7e\xd3\x17\x7f\x44\x8c\x14\x9a\x47\xf9\xf5\xde\x72\xbf\xf9"
- "\xd7\x29\xfe\x4b\xf1\xfb\xd6\xfd\x15\xfb\xc5\xd6\x1f\x43\x3b\x31"
- "\x50\x5f\x5f\x22\xb3\xe9\x8c\x73\x17\x23\x65\x9d\xcc\xef\x46\xbe"
- "\xdf\xf4\xf5\x7c\x19\xde\xbf\xc8\xf6\x9b\x7e\xe0\xee\x3b\xad\x23"
- "\x26\x7f\xd6\x6e\x1a\x93\xdf\x11\xcb\xef\x75\xd3\x2d\xc5\x92\x9e"
- "\x25\xc4\x92\x3e\x7b\x0f\x62\x49\xdf\x6a\x4c\xfe\xb3\xae\xf1\xfb"
- "\xfe\xf3\x05\x63\xb9\x81\x54\x22\x8f\xcc\x70\x8d\x7d\x6a\x70\xbf"
- "\x77\x5f\x29\xec\xdd\x5f\x74\x77\xe2\xa0\x60\x7f\xe8\x9a\xdf\x2d"
- "\xbf\x68\x77\x9a\x99\xf6\x07\x73\x56\x43\x5f\x2b\xca\x81\x57\x39"
- "\xc4\xd3\x04\xc4\xd3\x75\x84\xd6\x3d\x0f\xbc\xd0\xad\xef\x18\xe4"
- "\xe3\x6c\x8e\x04\x68\x93\x10\x5b\xff\x93\xfa\x7d\x81\x18\x01\xd8"
- "\xca\xea\xad\x3a\xcf\xdb\xed\xdd\x06\x8e\x81\xfe\x77\xde\xb3\xa8"
- "\xaa\x53\xa5\xc9\x02\xf3\xa2\x11\xf7\xc4\x2a\x8c\xb6\x16\x03\xd2"
- "\xe2\xe0\xa2\x2a\x5f\x1e\xf0\x77\xc7\xab\xc4\xdf\xbb\x79\xfa\x9f"
- "\xe5\x54\x9e\xc1\x75\xaf\x5b\xfe\x01\x8c\x03\x22\xca\x56\xdc\xf7"
- "\x92\x7d\x6b\x1b\x8c\x0f\xc7\xb3\xb5\x6f\xf6\x7c\x86\x1b\xf0\xbc"
- "\x08\x18\x4b\xea\x63\x8b\xb8\x41\x73\x58\x01\x6e\x6c\xbf\x2a\x7d"
- "\xc7\xc6\xf6\x71\x8c\x98\x1d\x65\x9d\xe4\xff\x62\xf2\x84\xad\xaf"
- "\x17\xb8\xc7\xd6\xd7\x0b\x18\xb6\xbe\x5e\xe0\xc0\x56\x93\x1b\x3b"
- "\x8a\xcc\x8f\xfd\x0d\xc1\xff\xc5\xe0\x22\x63\x1b\xfe\x05\xe3\xa3"
- "\xbc\xe1\x95\xff\x0b\xc5\xd3\x85\x0c\x4f\x11\xaf\x44\x4c\x95\xec"
- "\x28\x06\x8f\x76\x94\x8e\x30\xd5\xab\x3d\xfc\x14\x53\xdf\x5c\x26"
- "\xc7\xd4\x37\x57\xc8\x31\x75\x43\xab\x2b\xa6\xb6\xc5\xd3\x37\xf7"
- "\xbb\xc3\x52\x16\x1f\x65\x43\xa1\x67\x1c\x7d\xb3\xde\x13\x8e\x52"
- "\xff\xf4\x59\x4e\xfe\xe9\x0e\x1c\xfd\xd3\x35\x39\x8e\xfe\x49\x73"
- "\xab\x38\x4a\x73\x9b\x9c\xfd\x09\x72\x9b\xdc\x36\x8e\x6a\x5d\x70"
- "\x74\xfd\x26\x09\x47\x5d\xf3\x9b\x74\x80\xa3\x0b\xee\x4e\x0c\x14"
- "\x19\x8e\x72\x66\xda\x1f\xf5\x22\xec\xeb\x86\xee\x72\x1c\xdd\x30"
- "\xc6\x33\x8e\xae\xbf\x20\xe1\x28\xab\x77\x77\x71\x74\x43\xb0\x0c"
- "\x47\x17\x38\xe1\xe8\x3f\x25\x1d\x02\x7d\x2c\x1c\x38\x1a\xef\x84"
- "\xa3\x0b\x3a\xc2\xd1\x0d\xc1\x38\x46\x4c\x46\xdd\x70\xaa\x63\x1c"
- "\x7d\xb3\xc9\x3d\x8e\xc2\x79\x8a\xa3\x6f\x36\x49\x38\xea\x46\x46"
- "\x95\xe1\x68\xf6\x27\x5e\xe0\xe8\xcf\x3c\x36\x4a\xf6\x01\xaf\x6c"
- "\x15\xd2\x9e\xce\xb6\x31\x52\x67\x3a\xef\x09\x2a\x76\xc9\x7b\x52"
- "\xdc\x26\xef\xc9\x0a\x71\x8f\xe7\x18\x01\x57\xc7\xfe\x08\x5c\xa5"
- "\x7b\x3c\x37\x56\xc8\x7d\x4f\x36\x9e\x10\x7d\x4f\x18\xae\xbe\x1d"
- "\x2b\xf6\x4b\xca\x7b\x52\xdc\x4e\x8c\x54\x5d\x6f\x59\x6c\x94\x31"
- "\xce\xb1\x51\xde\xee\xee\x39\x46\xaa\x6e\x8c\x2c\x36\xca\xb1\x42"
- "\x47\xde\x13\xd7\x18\xa9\x12\xc6\x6e\x9a\x4e\x31\xd6\x11\x83\x4a"
- "\xb7\xde\x11\x23\xb5\x83\x7d\x41\xd8\xce\x9e\xba\xb8\xbb\x8f\xb1"
- "\x06\x2f\x30\x56\x96\xf7\xc4\x35\xc6\xd4\x26\xbb\xb1\xb4\x98\x54"
- "\xc6\x14\xbb\x89\x8d\x5a\x7c\x4f\x73\x9f\x60\xbf\xdc\x63\xed\x5b"
- "\xab\xe5\x58\xfb\xd6\x3e\x5a\xf7\x8c\x3b\xac\x7d\x6b\xa2\x84\xb5"
- "\xac\xde\xaa\x33\x2e\x58\x5b\xeb\x01\x6b\x61\x5d\xdd\x71\xd1\x5b"
- "\xac\x7d\x8b\xf6\x9d\xcb\x14\xb0\xb6\xf1\x4e\x63\xed\x5b\x19\x12"
- "\xd6\xbe\x3d\xba\xe3\x1c\x53\xba\x28\xf7\xfb\x72\x74\x51\x0c\x6b"
- "\x75\x51\xed\xe6\x98\x92\xf9\x7c\xe4\x0c\x12\x73\x4c\x49\xf6\x80"
- "\x62\xc1\x1e\xf0\xaf\x9c\x13\x25\x67\xa0\xb7\xf6\x80\xe3\xa0\xbb"
- "\xe3\xbe\xcb\x95\x98\x73\x6a\x06\xe6\x44\x29\x72\xb1\x07\x14\xb5"
- "\xb5\x07\x4c\x6f\x1f\x63\xbd\xb2\x07\xd0\x7d\x97\x9b\x9f\x96\x63"
- "\xec\xe6\x41\x72\x8c\xcd\xab\x10\xf7\x59\x62\x7f\x3c\xc7\x4c\xdd"
- "\xbc\xda\x61\x0f\xa8\x95\x63\xab\x64\x0f\xc8\x5b\xe5\x19\x63\x37"
- "\xcb\xed\xbf\x63\x0b\x65\xfb\x2c\x3f\xa8\x73\x8e\x43\x2d\xc6\x9f"
- "\xca\x2d\x2b\xab\x76\xc6\xd8\xcd\xe6\x7f\xa5\x38\xd4\x8e\x58\x53"
- "\x1d\xf8\x72\xb7\x8d\x43\xfd\xe7\x58\x63\x69\x11\xc1\xbd\x6d\x14"
- "\x6f\x65\xb6\x81\xa2\x7b\x63\x1b\x28\x2d\xf2\x60\x1b\xf8\xf3\x25"
- "\x39\xce\xe6\xf5\xa2\x75\x4f\xb9\xc3\xd9\x3f\xef\x97\x70\x96\xd5"
- "\x5b\x75\xca\x05\x67\x6b\xee\xa4\x4c\xfb\xe7\x86\xbb\x6b\x1b\xf8"
- "\x73\x83\x64\x1b\xc8\xbb\x85\xfd\x8f\x9b\xf7\xb9\xc7\xd9\xcd\x82"
- "\xdd\x75\xb3\x64\x77\xad\x71\x93\x2f\x45\x86\xb3\x5b\x36\x89\xfb"
- "\x1f\xa9\x4c\x5b\x2b\xca\xb4\x45\xff\x82\xf9\x52\xb6\xe8\xbc\xb5"
- "\x0d\xe0\x3e\x77\xc4\x56\xc4\x2e\x11\x5f\x25\xdb\x40\x91\x67\xdb"
- "\x40\x07\xf8\xea\x7d\xee\xbe\x77\x36\xc9\xf1\xf5\x9d\xcd\x72\x7c"
- "\xdd\xde\xdb\x15\x5f\xdb\x62\xeb\x3b\x27\xdd\xe1\x2a\xb3\x0d\x6c"
- "\xab\xf2\x8c\xa9\x5b\x89\x27\x4c\xa5\x31\xfd\xea\x24\x1f\x69\x09"
- "\x53\xf3\x1f\x96\x63\xea\xd6\x51\xb7\x8a\xa9\xf7\x24\x5f\xca\x6d"
- "\x63\x6a\x9c\x0b\xa6\xe6\xef\x97\x30\xd5\x35\x67\x4a\x07\x98\x7a"
- "\xb7\xec\x04\xce\x98\x2a\x93\x5d\xb7\x0d\x95\x63\xea\x36\xad\x67"
- "\x4c\xdd\xf6\x80\x84\xa9\xac\xde\xdd\xc5\xd4\x6d\x11\x77\xd7\x4e"
- "\xb0\x2d\x42\x92\x5d\xb7\x2b\x3a\xc6\xd4\xad\xfe\xee\x31\x75\xab"
- "\x3f\xc3\xd4\xad\xfe\xb7\xbe\xa7\x7c\xfb\x05\x2f\x30\xf5\x67\x9e"
- "\x4b\x65\x7b\xbd\xd7\x76\x02\xb4\xb7\x22\x96\xd6\xfe\xb8\xd8\x21"
- "\xc9\x62\xec\x90\x51\x02\xc6\x3e\xff\x63\x31\x76\xc7\x35\xb9\x4f"
- "\xc3\x8e\x56\xd1\xa7\x81\x61\xec\x7f\x6d\x91\xe7\x47\x6d\x1b\x2b"
- "\x44\x1e\x43\x55\xff\x82\xc3\x4e\x80\x98\x3b\xca\xd9\x4e\xf0\x5f"
- "\x2f\x78\xc6\x5b\xbd\x56\x66\x27\xf8\xcc\x3d\xde\x5e\x97\xe1\xed"
- "\xbb\x1b\x28\xde\x3a\x62\xa8\xea\xf7\x89\x31\x54\x3b\x94\x61\x65"
- "\x78\x1b\xf3\xd3\xe0\x6d\xf1\xad\xe3\xad\x3c\x97\x8a\x6b\xbc\xd4"
- "\xf7\x9e\x36\x96\x00\xde\xd2\x78\x1d\xae\x31\x53\x6f\x2d\x5e\xc7"
- "\xdd\x8a\x99\x8a\xfd\x72\x8f\xbb\xef\x7d\x24\xc7\xdd\xf7\x1a\x68"
- "\x5d\xb7\xb8\xfb\xde\xeb\x12\xee\xb2\x7a\xb7\x8c\xbb\xb7\x65\x33"
- "\x78\x6f\xdf\xdd\xb5\x19\xbc\xb7\x4f\xc2\xdd\xff\x5a\xd1\x31\xee"
- "\xea\x93\xdd\xe3\xae\x3e\x99\xe1\xae\x3e\xb9\x5d\xdc\x95\xf9\x10"
- "\x14\xcc\x77\x1b\xcb\xa3\xf6\x5f\x3d\xcf\x4a\x41\xdc\xed\xd8\x0c"
- "\x00\x83\x95\xa9\x18\xc3\x29\x06\x7d\x08\x3a\xb6\x19\x74\x84\xb7"
- "\xde\xdb\x0c\x76\xc6\xca\xf1\x76\xe7\x7c\x39\xde\xbe\xdf\x1d\xfb"
- "\xd5\xae\xcd\x80\x62\xc0\xce\x8f\x1c\x36\x03\x93\x1c\x67\x25\x9b"
- "\x41\xe1\x51\xcf\xdf\xbe\x76\x9a\x64\xf2\xed\xf3\x2e\x31\xab\x67"
- "\x49\x78\x7b\xac\x52\xf4\x19\xfb\xef\xa0\xb2\x28\x67\xbc\xfd\x4b"
- "\x58\x9b\x98\xd5\x93\xef\x60\xcc\xea\xc9\x77\x38\x66\xf5\x14\x79"
- "\xcc\xea\x77\xae\x4b\x7e\x64\xde\xc7\xac\xfe\xef\xdd\x14\x83\x91"
- "\x87\x30\x6e\xf5\xad\xd8\x11\xee\x72\xae\x15\x19\xf6\xca\xec\x08"
- "\x85\x4f\xcb\xb1\xb7\x70\x9e\x67\xec\x2d\x54\x48\xd8\xcb\xea\xdd"
- "\x5d\x99\xb7\x30\xfc\xee\xda\x11\x0a\xc3\x25\x3b\x42\xe1\x35\xb7"
- "\xd8\x2b\xfb\x36\xb6\xb3\xc1\xfd\xb7\x31\x38\x4f\xb1\x77\x67\x83"
- "\x47\x3b\x42\x1b\xff\xad\xf7\x4f\xb1\x6f\x63\x82\xcc\x6b\xf2\xc2"
- "\x8e\xf0\xb3\xf3\x31\x78\xbf\xe6\x76\xec\x08\x88\xb7\x88\x67\x22"
- "\xe6\xde\x8a\x1d\xe1\xce\xcb\xb8\x1f\x9c\x92\x63\xee\x07\x67\xe4"
- "\x98\xbb\x67\x95\x2b\xe6\xb6\xc5\xdb\x0f\x1f\x76\x87\xb5\xcc\x8e"
- "\xb0\xa7\xaf\x67\x9c\xfd\x70\x8c\x47\x9c\x75\xf1\xcd\x95\x70\x76"
- "\xd7\x0a\x39\xce\x7e\xb8\xfe\xb6\x70\xf6\x56\x73\xb0\xfc\xac\x70"
- "\x36\xc6\x05\x67\x77\x77\x97\x70\xd6\x35\x0f\x4b\x07\x38\x7b\x97"
- "\xf2\xb0\x78\x96\x71\x77\x6f\x91\xe3\xec\xee\x72\xcf\x38\xbb\x7b"
- "\xbe\x84\xb3\xac\xde\xdd\xc5\xd9\xdd\x79\x77\xd7\xb6\xb0\x3b\x4f"
- "\x92\x71\xf7\xcc\xec\x18\x67\x3f\x8c\x72\x8f\xb3\x1f\x0a\xdf\xc5"
- "\x3e\x8c\xf2\x28\xe3\xb6\xc1\xd9\xbd\xc3\xbd\xc0\xd9\x9f\xb9\x0f"
- "\xc2\xde\xc8\xdb\xb1\x2d\x50\x7c\x35\xb9\xec\x97\x38\xe5\xbc\x5f"
- "\xc2\xc9\xb6\x30\x4a\xb4\x2d\xc8\xf3\xb3\x24\x8b\xf6\xdb\x48\x01"
- "\x77\x47\xfc\x58\xdc\x2d\x9a\xd8\xe2\xc0\xdd\x04\xc0\xdd\x22\xba"
- "\x3f\xa2\xc5\x81\xbb\xfb\xee\x13\xfb\x25\xe5\x67\xf1\x60\x5b\x18"
- "\x42\xdb\xdb\xe9\xb0\x2d\x20\x0e\x47\x3a\xdb\x16\xfe\xbe\xdf\x33"
- "\x06\x17\x95\xcb\x6c\x0b\x9f\xba\xc7\x60\x8b\x0c\x83\xff\x6a\xa7"
- "\x18\x3c\x44\xc4\xe0\xbf\xaa\xae\x83\x6e\x79\x3d\xcb\x3b\x0c\xb6"
- "\x50\x0c\x1e\x73\x6f\x30\x78\xdf\x1d\xc0\x60\x3a\xee\x7f\x7b\xd7"
- "\x68\x00\x0c\x9e\x81\x18\x3c\xe6\xd6\xec\x0d\x3f\x51\x8e\x16\xec"
- "\x97\x7b\x2c\xfe\x7b\x1f\x39\x16\xff\x3d\x9a\xd6\x75\x8b\xc5\x7f"
- "\xbb\x26\x61\x31\xab\x77\x77\xed\x0d\x7f\x0f\xbb\xbb\xf6\x86\xbf"
- "\x87\x49\x58\xfc\xf7\x4b\x1d\x63\x71\x51\xb5\x7b\x2c\x86\xf3\x14"
- "\x8b\x8b\xaa\xdb\xc5\xe2\x21\xce\x58\xbc\xcf\x21\xf3\xca\xec\x0d"
- "\xa6\x7f\xf5\xdc\x2d\xfb\x3c\xca\xbf\xea\x47\x48\x46\x9d\xe2\xa3"
- "\xa7\x8d\xf9\x84\x34\x67\x92\x0c\xa3\x6d\x08\x81\x73\x30\x7e\x1f"
- "\x4d\x37\x86\x0e\x26\xdc\x5b\x11\xc5\x88\xc7\x6f\xe3\x3f\xc8\xb8"
- "\x3a\xa5\x30\xb7\xe8\x18\x7f\x44\xfd\x5d\xf1\x3c\x62\xef\x0e\xa7"
- "\xeb\xee\x9e\xc5\xeb\x22\x06\x0a\xf7\xed\x63\xfb\x6e\x22\x06\x8b"
- "\x65\xe4\x4d\x93\xe2\xa3\x62\x7e\x53\x44\xb8\x39\x28\x22\xdc\xdd"
- "\xfd\x8f\xa9\x88\x7f\xd7\xd5\x3c\xbf\x3d\x97\xb7\x34\x3f\x3e\x5c"
- "\xdf\xfc\x26\x21\xba\x5c\xde\xdc\x92\xf5\x91\x19\xee\x0d\xfd\x33"
- "\xd4\x6b\xee\xf6\x91\xae\x39\x33\x8a\xb4\x64\xfd\x8f\xaf\x78\x0e"
- "\xc6\x8d\x70\x99\x3e\x3c\x07\xd7\xf8\xdc\x4e\xa9\x3b\xd2\x00\xab"
- "\x52\x09\xe9\x7f\x1d\xe7\xcc\xff\x04\x03\xcf\x04\x67\x43\x9b\x1b"
- "\xa1\x2d\xfe\xc1\x87\x2c\xc0\x8f\xbe\x95\x6b\x09\xce\xe9\x75\xf0"
- "\x5e\xfa\x6c\x1c\x7b\x9f\x27\xf3\x78\xa5\x2f\xe1\x76\x86\x5b\xf9"
- "\xee\xd3\x8b\x80\x1e\x44\x97\x40\xfc\xf1\x3d\x36\x42\x3d\x5e\x99"
- "\xce\x73\x7d\x06\xc0\xf8\x59\xd8\x9c\x86\xfe\x1d\x04\x3d\x96\x87"
- "\xe7\x6e\x4f\x20\x2a\xf8\x0f\xe0\x37\x4f\x2f\x82\x7e\xe5\x43\xbf"
- "\xd6\x62\xbf\x3c\xbd\xe3\xc6\x77\x60\xdd\x79\x28\x14\xd7\x0e\xfa"
- "\x7c\x7c\x36\x7d\x8e\x92\x5b\x67\x87\xf3\x7c\x66\x3a\x6f\x4c\xb6"
- "\x91\x40\x18\x8b\x1d\xd0\x6f\xe4\x47\xee\x2f\xc3\xf5\x6b\x7a\x12"
- "\xb2\x27\xa5\x41\x69\x84\xbe\xdb\xff\xfc\x90\xc5\x90\xf6\x0c\x81"
- "\xeb\x66\xd4\x59\x2e\x2a\xfe\x77\xcb\x84\x4b\x84\x20\x9e\xc0\xef"
- "\x9d\x16\x58\xc7\xc6\x43\x79\x23\xbc\x07\xd7\x1c\xea\x8b\x75\xe1"
- "\xfc\x44\x43\xd2\x69\x12\xa8\x25\xfe\xd9\xf0\x6e\x42\x5d\x35\xd6"
- "\x35\x29\xfe\xb7\x00\xfb\x00\xe5\x81\x50\xc6\xfb\xd0\x87\x8c\xf0"
- "\x05\xe1\x56\xca\x9b\x39\xd3\x8b\xb8\x3e\xe1\x56\x8a\x7d\xf0\x9e"
- "\x1b\xe1\x9d\xa1\x4e\x00\xd4\x09\xa0\xc7\x34\xa2\xca\x81\x73\xd8"
- "\x0e\x1c\x03\x0c\x8b\x6e\x60\xdb\x2a\x6c\xdb\xc3\x38\xf8\xf2\xc1"
- "\xd3\x8b\x78\xe0\x6d\x5c\x53\xd5\x69\x8a\x13\x75\x8a\xe2\x51\x81"
- "\x0a\x9e\xe7\x0b\x06\x64\xac\x49\x23\x01\x3a\x8e\x10\x43\x4f\x6c"
- "\xa7\xf8\x61\x68\xdf\x17\xc7\xa2\x25\xeb\x7f\x6d\x26\xc5\xff\x14"
- "\xe2\xf8\x02\x3d\x2d\xea\xc7\xf0\x1d\x8a\x27\xe3\x73\xf0\x1e\x56"
- "\xff\x7f\x69\xec\x7b\xec\xb3\x3a\xcd\x87\x87\xeb\x43\x7d\x14\xe7"
- "\x89\x4f\xe8\x03\x61\x2d\x59\xc5\x11\x26\xb2\x68\x32\xde\x6f\x62"
- "\xf7\x01\x2f\x15\x47\x01\xcd\x4a\xf0\x1c\x96\x3d\xf4\x37\x40\xa4"
- "\x5b\x45\x28\xf0\x86\x2b\xed\x44\x1e\x01\xbe\x10\x79\x04\xfb\xbb"
- "\x37\xcd\xa4\xa4\xeb\xb0\xa2\x98\xea\x75\xd9\x40\x43\xfb\xd6\x50"
- "\xdf\x8d\x30\xb6\xdc\x4d\xa4\x4b\x1d\x5c\xdb\xbf\x19\xe9\xb2\x31"
- "\x05\x68\xc2\xea\x16\x4b\xfd\xc7\xf2\x7e\x4a\x4f\x0e\x68\xc1\xf6"
- "\x6e\xee\x9f\x8f\xef\xb3\xf1\x3a\xd0\x31\x84\xb7\x94\x24\x43\xbf"
- "\x90\x6f\x81\x47\xf6\x24\x58\x95\xe8\xd7\x87\xe7\x0f\x5e\xb5\x2a"
- "\x37\x36\x12\x94\x2b\xc9\x06\xc0\xe5\x6d\x49\x30\xe6\xd0\x26\x1f"
- "\x36\x20\x63\x80\x48\xc7\x14\xa0\x5d\x12\xf0\x2e\x8c\xf9\x46\x18"
- "\xbf\xed\x80\x79\xf8\x7b\x3b\xac\x3f\x1c\xd4\x33\x29\xf6\x17\x40"
- "\x7b\xaa\x6d\x21\xbc\x79\x47\x08\xdf\x04\x63\x38\xb8\x25\x6b\x7f"
- "\x86\x38\x86\xd8\xa7\x8d\x70\x7e\x03\x5c\x87\xf1\xb4\x31\x1e\x2a"
- "\x2e\x17\xdf\xd9\xd3\x78\xae\xdf\x43\x06\x6f\xd8\x43\x7a\xbd\xb9"
- "\x87\x44\xac\xac\x87\x79\x99\x39\x8c\x3f\x3e\xc3\x06\x6b\x62\x6e"
- "\xde\x8d\x90\x11\x3a\xfc\xf6\xc4\xad\x79\x48\xff\xfa\x1e\xd2\x17"
- "\xf7\xc6\x4e\x00\x8a\xe2\x1a\x3e\xa1\xd3\x39\xde\xa8\xbd\x46\xb8"
- "\xa0\xdc\x3c\xfb\x9a\x27\xbb\xbd\x08\xab\xe3\x51\x8d\x85\xa4\x25"
- "\xc2\x5a\x7e\xb5\x81\xa4\x59\x78\x73\x65\xc6\x25\x02\xd8\xa3\x61"
- "\x63\xf7\x8f\xc8\x09\xb1\x84\xe0\x9e\x41\xee\x9f\x1a\xf2\x40\x1c"
- "\xf1\x4d\x3d\x45\x42\xd3\xeb\xf9\x06\x7b\xee\x84\x8c\xb4\x55\x44"
- "\xb9\xe7\x6a\x0d\x93\x3d\x15\xff\x08\xfa\x04\xf7\xa7\xb6\x44\x93"
- "\xd9\x36\x61\x3d\xca\x99\x5e\x9c\x3e\x9f\xf4\xc0\xf7\x09\xa4\xb2"
- "\xd7\xc7\xbb\x61\xdc\x8a\xbd\xc3\xe7\x8f\x93\x29\x3d\x73\x27\xaa"
- "\xf6\xcc\xb5\x82\xdc\xea\xa7\x4f\x8f\xe5\x1b\x50\xae\x83\xf5\x85"
- "\xca\x82\xc6\x06\x1b\xc8\x56\xf3\x60\xfd\x36\x91\x43\x75\x7a\x25"
- "\xb7\xd9\x4f\xef\xe5\x33\x6a\xe9\xba\x8d\x6b\x29\xf4\x7d\x8a\x86"
- "\xb0\x75\x10\xd6\xcc\xc0\x44\x94\xa7\xf8\x73\xd8\xff\x83\xf0\xae"
- "\x7c\xef\x78\x98\xa7\x1f\xc7\xe0\xfa\x39\xa1\xd6\x40\xca\xad\x76"
- "\xf2\x4e\x23\x1d\x23\x3f\x18\x23\xc0\xd5\x8f\x07\xc2\x38\xf9\xbb"
- "\xa3\x1b\xd2\x8c\xd3\xe5\xe6\x71\x3e\x8c\x36\x94\x2e\x16\x46\x97"
- "\x17\x97\x10\x58\x47\x81\x36\x9b\x18\x6d\xb8\xee\xd1\x3a\xa4\x8d"
- "\x77\xef\xf1\x8f\x02\x4f\xeb\x0b\x3e\x9b\x07\xfe\x40\xbe\xe0\x82"
- "\xa3\x75\xf8\x6c\xec\x03\x7e\x3f\x43\x3e\x98\xf0\xfa\x39\xbe\x52"
- "\xdb\x40\x8c\xf0\x3e\x7c\x90\x73\x1f\x6c\x5e\xf6\xe1\x80\xc6\x53"
- "\x1f\xd6\xf7\x07\xbe\xed\x0f\x7c\xdb\x1f\xf8\xd6\xc4\xf8\xf6\x58"
- "\x2d\xe3\x5b\x3b\xf4\xab\x15\x64\xf7\x95\x53\x88\x12\xfb\xb5\xeb"
- "\x34\xc6\xe8\x83\x7e\x36\x48\xbc\x3b\xfe\x32\x8c\x91\xc8\xbf\x3e"
- "\x4f\x76\xc3\xf1\xa9\xb4\xd4\x90\x74\xe4\xdf\x1b\xee\xf8\xf7\x20"
- "\x99\x30\x07\x68\xf3\x1a\xf0\xef\x77\x1a\x12\x50\x4f\x7c\x57\x4d"
- "\x01\xfe\x6d\x70\xc7\xbf\x9f\x9c\x38\x00\xcf\x6c\xc3\xbf\xb1\xce"
- "\xfc\xfb\x49\xbc\xf7\xfc\xfb\xc9\x60\x07\xff\xbe\x24\xf0\xef\x7c"
- "\x17\xfe\xad\x77\xe2\x5f\x7c\x6f\xaf\xf9\xf7\x93\x7c\xef\xf8\xf7"
- "\x13\xb5\x83\x7f\x41\x2f\x79\xe7\x55\x3a\x46\x7e\x30\x46\xc0\xbf"
- "\x07\x2c\x30\x4e\x6e\xf9\xf7\xa7\xa7\xdf\x21\xc3\xad\xd3\xef\xd0"
- "\xa6\x8e\xe9\x77\xa8\x9f\xf7\xf4\x3b\x68\xbd\xfb\xf4\x3b\x34\xc3"
- "\x3b\xfa\x1d\x34\x79\xa6\xdf\xc1\x7d\x3f\x1f\xfa\x1d\xce\xb8\x75"
- "\xfa\x1d\x9e\xd8\x31\xfd\x0c\x97\xbd\xa7\x9f\xa1\xf8\xee\xd3\xef"
- "\x70\x2f\xef\xe8\x67\xd0\x7b\xa6\x9f\x21\xd1\x13\xfd\x46\xf6\xe0"
- "\x78\x0e\xfd\xe6\x42\x9e\x33\xa3\x0c\xc4\xe4\xb5\x4f\xc7\xa3\xce"
- "\x08\x65\x5f\xb1\x4c\x65\x2a\xd0\xab\x5d\xca\x01\x2e\x65\x95\x4b"
- "\x39\xd8\xa5\x1c\xea\x52\xee\x25\x96\x81\x5e\x9d\xae\x28\x0e\x7f"
- "\x02\x3a\x1b\xc8\x38\x9f\x46\x0b\xd7\xc3\x66\xdb\xd5\xa8\xf7\x85"
- "\xb9\xeb\xfb\xc6\x4c\xde\xaa\x4d\x23\x0f\x35\x2a\x3e\x2d\xa1\xf4"
- "\x58\xd3\x53\xc3\xa7\x64\x10\xa0\x47\xf5\x8b\xab\x90\xaf\xcc\x84"
- "\xbf\x19\xea\x07\xe3\xf4\x20\xe8\x9b\x66\xe4\x39\x75\xc2\x21\xbe"
- "\x4e\xf1\xe9\x5f\xf1\xfd\xfa\x6b\x0d\x84\xf3\x79\x52\xc3\xd3\x98"
- "\xcd\x7e\xd5\x66\x9f\x27\x7b\x82\x3e\xaa\xcf\x56\x72\xfe\xd9\x99"
- "\x9c\x7a\x95\x99\x37\x8f\xfb\x01\xd6\x31\x58\xcb\x8c\x4d\x56\xe0"
- "\x49\xde\x6c\x48\xb8\x0c\xfd\x3d\xd2\xa3\x22\x15\xda\x86\xe7\xc0"
- "\xb3\xaa\xf8\x60\xbf\x7d\x46\x5b\x15\xe1\xa1\x8d\x4a\x4b\x29\xe8"
- "\xfe\x35\x44\x68\xb3\x8a\xef\xee\x87\xbe\xa6\x7a\xb7\xfa\x59\xce"
- "\xb0\x30\x78\xe6\x90\x29\x1a\x5f\xc2\xaf\xf6\x0d\xf6\x8e\x3f\x8e"
- "\x44\x78\xd4\xfb\x72\x86\x15\xb0\x76\xfd\x6f\xa7\xdd\x1c\xcf\xed"
- "\x46\x0a\xfd\x55\xdd\x4e\xbb\x4d\xed\xb4\x2b\xf4\x57\x7d\x1b\xed"
- "\x96\x8c\xf2\xdc\xee\x70\xa1\xbf\x91\xb7\xd3\xae\xc7\xfc\x1f\xd0"
- "\xae\xd0\xdf\x8c\xdb\x69\xd7\xd2\x0e\xdd\xc2\x6e\x8f\x17\x8e\x8e"
- "\x69\x8f\x17\x6e\x8f\x0f\x8e\xb6\xf3\xfe\x91\x61\xb7\xc7\x03\x47"
- "\xcd\xed\xf1\xc0\xed\xd1\xff\xb3\x76\xe9\x7f\x7b\xb4\xff\x2c\xaf"
- "\x3d\xda\xdf\x1e\xdd\x3f\xf3\xc8\xff\xa8\xcb\xf2\x39\xcf\x19\xf8"
- "\x90\x78\xc2\xe5\x76\x35\x70\x21\xcf\x7d\xba\x86\x8b\x24\x23\x01"
- "\xc3\x02\xf3\x48\x50\x24\xb5\x0f\x7d\x9e\xb1\x2a\x9f\x28\x75\x4a"
- "\x4e\xb9\x3b\xa5\x46\x69\xb4\x0d\x26\xe9\x36\xde\x5e\x90\x64\x55"
- "\xfc\x12\xce\x1f\x8e\x23\xc4\xb2\x54\x43\x58\x3b\x5d\x0d\xd9\x69"
- "\x91\x64\x82\x9d\xa0\x3d\xc2\x72\x24\x15\x30\x0c\x70\xcc\x98\x67"
- "\xc5\x35\x2f\x08\xee\xb3\x01\xff\x42\x1b\x56\xb2\x97\x33\x2b\x22"
- "\x13\x68\x3d\x33\xe8\x8d\x66\x3e\xf7\xb9\x4f\xf9\x74\x0d\x59\x0b"
- "\xbf\xe1\x99\x97\x7c\xcc\x44\xb9\x1d\xf4\xc9\x96\xac\xcf\xeb\x4d"
- "\x8a\x52\x03\xea\x98\xa0\xcb\x36\xa5\xff\x80\x36\xf7\x78\xb2\x06"
- "\xf4\x5a\xac\xbb\x87\x33\x2b\xfb\x6b\x89\xf2\x88\x19\xf5\xf7\x52"
- "\xd5\xe1\x44\x42\xda\xb1\xb9\xf8\x72\xc1\xd3\x7c\xf1\x7e\x6c\x07"
- "\x6d\x99\x1b\x39\x18\xdb\xe0\xe9\xc5\xd8\x5f\x3e\x67\x44\xb2\x21"
- "\x05\xd7\x85\xd2\xbc\xd1\x4f\xf0\x2d\x02\xce\xf7\x6c\x84\x32\xd5"
- "\xd9\x33\x79\xc0\xdc\x4e\x85\x7c\xf6\x03\x91\x95\x96\xab\xc4\x90"
- "\x74\x83\xd4\x29\x4a\xb7\xe0\xb3\x9b\x83\xa7\x11\x4b\xf0\x34\x7f"
- "\xe8\x43\x8e\xd8\x5f\x7c\x96\x78\x1e\x6d\x14\x42\x1f\xf7\x1d\x4e"
- "\xf5\xdc\x47\x58\x4b\xba\x4d\x08\xe5\xcd\x38\x86\x86\xb4\xab\xd0"
- "\x97\x63\x4f\xe0\x38\xf3\x39\x53\xab\x2c\xe9\x9a\x47\x98\xcd\xae"
- "\x2c\x0a\x6d\x3f\xb0\x0e\x94\x30\x3b\x8c\x5f\x09\xf5\xb3\x01\xbc"
- "\x07\x9d\x3d\x0f\xe5\x95\x2b\x8a\x32\x9a\xff\x78\x8a\x46\xe9\xa5"
- "\xce\x53\x46\xd7\x7f\xc3\x23\x38\x0e\xc7\x82\xe0\x79\xcf\xd6\x29"
- "\xca\x12\x99\x1d\xc2\xaf\x06\x9f\x07\x75\x70\xcd\xa9\xe1\x73\x3a"
- "\xe9\xb1\x1e\x5c\xcf\x11\xae\x9b\x9c\xae\x9b\xf8\x9c\x69\xa1\xc2"
- "\xf5\x7d\xc2\xf5\x7a\xa7\xeb\xf5\xda\x47\xd0\x2e\x57\x56\x8b\xef"
- "\x04\x6b\x99\x01\xd7\x35\xb4\xf9\xd3\x77\xea\xee\x67\x10\xea\x55"
- "\x37\x29\xca\xae\x35\x03\x5f\xc1\xf5\x5a\xa7\xfb\x6b\x8f\x24\x87"
- "\x93\x91\xdb\x70\x4c\x8f\xf9\x9b\x7c\xbb\x84\x31\x5b\x4e\x19\xf5"
- "\x2d\x82\xf6\x8a\x9d\xdb\x83\xf3\xd5\xd0\x66\xb1\x05\x64\x3d\xa0"
- "\x4f\x13\x3e\xd3\x79\xfc\x63\x13\x12\x16\x27\xa8\xfb\xcc\x53\xcf"
- "\x8b\x9f\xa3\x7e\x65\xf1\xb2\x45\x89\x43\xfb\xcc\xeb\x42\x88\x13"
- "\xef\xa8\xf8\xcc\x40\x9e\xcb\x99\x34\xc6\x98\x07\x32\x96\x52\x05"
- "\xeb\xed\x0d\x92\x03\x74\xb5\x87\xcc\x0d\xb7\xe7\xce\x81\xf9\x33"
- "\x52\x6d\x48\x19\x01\x63\x7f\x6c\x0b\xb5\xfb\xab\x09\x59\x0f\xd7"
- "\x0d\x29\xc7\xf0\xdc\x6e\x7a\x6e\x1e\x21\xd4\x5e\x95\xe2\x4f\x4a"
- "\xd4\x57\xa9\xcd\x0b\xae\x5d\xa0\xf6\xbd\x6b\x44\x69\xcb\xf4\x27"
- "\x7f\x4f\xab\x52\x1e\xe0\x4c\xca\xbf\x73\x35\x4a\x94\x17\x8e\x84"
- "\x96\x92\x01\xc9\xfe\x04\xaf\x1f\x4a\x83\xf3\x70\x1d\xaf\xd1\x76"
- "\x28\xad\x8f\x0f\xc2\x7a\x68\x03\xc3\xdf\xe9\x79\xfc\xf9\x23\xa1"
- "\x66\xc2\xe4\xd6\x63\x6f\x60\x5f\xd5\x3d\xf1\xfb\xc2\xb1\x0d\xd8"
- "\x3f\x93\xe2\xd8\x7a\x9f\x7c\xa8\x9f\x44\x02\xa0\xfe\x0a\x6e\xf3"
- "\xa4\x31\x88\x05\xb6\xac\x63\x91\x7c\x66\xb7\x7e\xdb\xdf\x22\xfe"
- "\xf9\x6f\xc1\xdc\x7c\x8b\xf8\xb6\x64\x1d\x9f\x67\xf2\x55\xd7\xe3"
- "\xd8\x42\x33\x01\xcd\x4a\x32\x0c\xce\x25\x9b\x48\x7c\x13\x9e\x83"
- "\x39\x68\xf1\x84\x2d\xd7\x41\xbe\xb3\x86\xf5\x37\x70\xc1\x93\x06"
- "\xf3\x30\x6e\x2d\x61\xfd\xcd\x81\x5a\xe0\x2d\x98\x63\x7c\xf7\x49"
- "\x83\x9b\x14\x15\xeb\x3f\x1b\x48\x48\x1a\xce\xe9\xdc\x91\xea\x0f"
- "\xae\x5b\xf1\x7b\x5a\xf8\xae\xeb\x66\x28\xcf\x31\x14\x42\xb9\xcc"
- "\x50\x48\xd4\x2f\xa2\xec\x74\xfc\xf2\xef\xe7\xf1\xb6\x27\xca\x41"
- "\xce\xac\xff\x1b\x39\x5e\x5d\x4a\x02\x66\x10\x1f\x47\xac\xf7\x44"
- "\xa2\x9c\x60\x82\xf2\x32\xa2\xac\x04\xbd\x1f\x6d\xf3\x69\xbf\x45"
- "\xfb\x7c\x05\x41\x9b\x3d\xaf\x5c\x6c\xd9\x7d\xd5\x0a\x18\xd6\xd0"
- "\x09\x7d\xbe\x39\x55\x7e\x1e\xde\x33\xdb\x22\x7c\xeb\x6a\x16\xbe"
- "\x75\x35\xd3\x6f\x5d\xa6\xd4\x18\xf6\xad\x0b\xbf\x71\x4d\x88\xf1"
- "\xe1\xb1\x3d\xfc\xee\xf5\x80\x05\xf8\x60\xa9\xa6\xab\x7d\xa9\xa6"
- "\x5b\xde\x55\x12\x5c\x69\x6e\x00\x19\xad\x94\x6c\x4d\x22\xc1\x7c"
- "\x73\xdc\x7d\xe5\x86\x63\x84\x7f\x2b\x4f\xb7\x37\xcd\xd0\xc9\x8e"
- "\x36\x8a\xe6\xd0\x2e\x81\xab\x15\x68\xe7\xef\xba\x3e\x81\xf4\xdd"
- "\x71\x95\x84\xcf\xbe\x90\x41\xe3\x3e\x61\x8e\x3e\x5b\xb3\x46\x7d"
- "\xb3\x59\xf3\x58\x6b\xb3\xe6\x91\x40\x33\xfb\x36\x36\xf3\xb2\x8a"
- "\xa0\xbf\x2d\x9f\xf5\x8f\xa6\x1d\x68\xa3\xb6\x98\x89\x2d\x28\x3f"
- "\x0f\x79\x19\x9e\xdd\x0b\xbf\xa7\xa4\xaf\x20\x2a\xee\x5b\x0d\xa9"
- "\x88\xbb\x4a\x06\x00\xed\xf1\xdb\xc1\xf6\x3a\xf6\xed\xc0\x0e\x3a"
- "\x0d\x7e\x3f\xb8\xde\xac\x51\xf2\xc1\xd1\xfa\xf1\xf3\xd5\xa4\x75"
- "\x67\x7f\x83\x31\xf9\x03\x92\xde\xca\x9f\x37\xae\xe5\x08\xda\x95"
- "\xf9\xac\xe3\x3a\xbe\x7b\xb4\xfe\xa8\xe6\x24\xae\x2b\xe1\x12\x76"
- "\x54\x4c\xbf\x3d\xec\xa8\xa0\xf2\x33\x7e\x67\xe3\x73\x81\x8e\x57"
- "\x91\x9e\x40\xd7\xab\x66\xe5\x58\xa0\x5d\x45\xfd\x7b\x40\xb7\x1a"
- "\x19\xdd\x28\x9d\xa1\xde\xc5\x79\x40\xaf\x0b\x8c\x86\xe5\x16\xa0"
- "\xdf\x7e\x6c\x63\x5a\xe4\xee\x24\xab\x12\xf4\x26\x65\xb9\xf5\x0c"
- "\xdd\xb3\x82\x74\xdc\x75\xa3\xb4\x53\x2b\xac\x37\xf8\xbd\xf2\x7a"
- "\x41\x7f\x53\x6b\xf0\xa4\xd0\x9b\xc1\x93\x34\xed\x7c\xbb\x64\xf4"
- "\x9c\x4f\xfc\xcb\xeb\x4f\x32\x7a\x2e\x11\xe8\x89\x3e\x6e\xcb\x35"
- "\x5d\x6d\x2d\x40\xcf\xeb\x40\xcf\x44\x13\x79\x27\x81\x04\x1b\x1b"
- "\x6a\xf0\xbb\xce\x7d\x2f\x54\x10\x32\xf6\x09\x9e\xab\x30\x9c\xa6"
- "\x74\xdd\x03\x74\xb5\xe9\x72\xf3\xf0\x7b\xa6\x83\xae\x49\x40\xd7"
- "\xeb\x40\xd7\xcb\x12\x5d\xed\x2d\x40\xd7\x16\xa0\x6b\x0b\xd0\x55"
- "\xf8\xe6\x39\x73\x3e\xd0\x15\xbf\x8f\x65\x1d\xd0\xe2\x37\x4f\xfc"
- "\xb6\x84\x74\x45\xbf\x6a\x6e\xb9\xa6\x17\xfd\xd6\xf9\x8a\x86\xec"
- "\x98\x4b\xfc\xfb\x59\x89\x22\x7d\x3f\x51\x41\x3f\x55\x8f\xef\x23"
- "\x4a\x68\x0f\xf8\xbe\x8e\x20\x7d\x8d\xfb\xec\x64\xe5\x74\xf2\x88"
- "\x6d\x13\xa3\xb3\xd1\xf6\x11\xda\x76\x07\x5f\x5f\xae\x51\x6e\x49"
- "\x22\x11\x48\xf3\x71\x17\xd4\xe4\x68\x54\x05\x71\xa5\x39\xb7\x79"
- "\x6a\x15\xd0\x69\x14\xd2\xfd\xf6\xe7\xed\x89\x51\xb7\x3e\x6f\x8d"
- "\x3b\xff\x6f\xde\xde\xe9\x79\x6b\x1c\xe3\x7e\xde\x9e\x08\xba\xbd"
- "\x79\x7b\x42\xf5\x7f\xf3\xf6\x5f\x61\xde\x56\xd9\x5c\xe7\xad\x43"
- "\x6e\x49\x88\x8d\x9f\x33\x7f\xd1\xfc\x45\xaf\xa9\xe7\xae\x48\x8c"
- "\x5d\xca\xa4\x17\x99\xfc\xa2\xb1\x73\x91\xca\xb7\x61\xbd\x3e\x1e"
- "\x5a\x43\xf6\xf6\xac\x51\x72\x2f\x87\xfa\xf2\xba\xbf\x99\x38\xdd"
- "\x47\x71\x6f\x83\x1c\x8e\xf3\x3b\x07\x64\xec\x8b\x8a\x33\x71\x9f"
- "\x83\x14\x68\x48\x68\x24\xf8\x9b\x7d\xc3\xd5\x6a\x70\x9f\x63\x5e"
- "\x2e\xdf\x80\xfb\x1c\xcb\x4a\x50\xb6\xf8\x72\xff\xfd\xd1\xa0\x43"
- "\xbc\x1c\x4a\x5a\x5f\x8e\x56\xbe\x79\x9a\xf8\x07\xd6\x90\x71\x1c"
- "\xc7\xf3\x86\xb4\x46\x90\xfb\x4e\x17\x19\x5e\x6a\x24\x28\xeb\x5c"
- "\x54\x9c\x0a\x52\xa7\xac\x86\x63\xcd\x35\x75\x4a\xd6\x39\x38\xd2"
- "\x3c\x7a\x20\xfb\x37\xf0\xb9\x13\x75\xf6\xbf\x3c\xad\xc2\xef\x9b"
- "\x3b\x42\xf8\xfa\x3d\xa0\x67\xec\xb9\x61\x55\xae\x49\x40\x3f\xf1"
- "\x47\x79\xfc\x4e\x89\x63\xb0\xe6\x2a\xe8\x12\x6b\x45\x5b\x51\x4d"
- "\x6f\x9c\x5f\x20\x5f\xd5\x1f\xbc\x58\xa3\xc4\xf9\x66\x09\xee\xa4"
- "\x5f\x0b\xef\x01\x7d\x34\x6d\xc9\xe5\x6b\xcd\xdd\x27\x8d\xf1\x55"
- "\x13\x65\x4b\x56\xb5\x06\x64\x9e\x68\x94\x57\xd6\xc1\xb5\x37\xe0"
- "\x1a\xfb\x5e\xf8\x75\x2d\xef\xf7\x85\x15\x31\x0e\x78\x5a\x71\x45"
- "\x51\x4d\xe3\x3c\xad\x67\x3a\x49\x83\x75\xf3\x24\x8d\x6d\x67\x7f"
- "\x93\x0d\xe5\xc9\x3e\xfd\xcd\xad\x9b\x27\x85\xda\x36\x4f\x1a\x3c"
- "\xe5\x09\xfa\x5d\x1c\xea\x7f\xf5\x02\xbe\x43\x6b\xce\x48\x35\xd4"
- "\xb7\x34\x07\xcf\x0d\x6f\xce\x99\x63\x38\x96\x9c\x47\xd4\x93\x10"
- "\xfb\xaa\xdf\x1d\x9b\xc7\xdb\x9e\x8c\x02\xec\xcb\xfb\x80\x1c\x1f"
- "\x07\xd8\x17\xdd\x16\xfb\x98\x1f\x81\x9d\x30\x0c\xac\x20\xd0\x56"
- "\x3d\xce\x21\x94\x51\x77\xc3\x38\xe0\xfc\xc0\x79\x40\xb1\x10\x70"
- "\x50\x9c\x2b\x38\x8f\x10\xeb\xe8\xbc\x75\x99\x37\x38\x57\xee\x37"
- "\x13\x15\xce\x15\xc4\x42\x9c\x2b\xe8\x9f\xf3\xb6\x30\x57\x02\x6b"
- "\x89\xea\x1d\xc0\x41\xa3\xad\x94\xce\x17\x94\x25\xcb\x6d\x4e\x18"
- "\x88\xdf\x76\x9c\xe6\xca\x06\x71\xae\x88\x18\x08\xf3\xc1\x86\x73"
- "\x65\xb9\xe6\xb1\x1b\xcb\xa5\xb9\xf2\xf2\x19\x15\xa1\xf8\x98\xf5"
- "\x0f\x6d\x3e\xcc\x95\x4a\xad\x99\xd8\x45\x0c\x84\xb9\x82\xfb\x87"
- "\x28\x06\xfe\x11\x30\xb0\x09\x30\xd0\x0c\xe7\x61\x8e\x6c\x5f\x20"
- "\x60\xa0\x30\x37\x5a\x97\x0b\x18\x78\x59\x4d\x6e\xf4\x41\x0c\x7c"
- "\xc7\x83\xec\x72\xc6\x05\x03\xbf\xea\x7e\x7b\x18\xf8\x15\x8d\x7f"
- "\x84\x34\xbc\x01\xf4\x44\x3a\x8e\x0d\xe5\x6d\xe5\x79\x80\x7d\x93"
- "\x7f\x66\x74\x4b\x70\x4f\xb7\x3d\xc2\xda\xe5\x16\xe3\xdc\xd0\x0d"
- "\xf8\xbc\xc9\xd6\xd2\x96\x76\x7c\xd6\xfe\x62\x67\x9c\x43\x7c\x43"
- "\xac\x43\x8c\x43\xbc\xc3\xf9\x81\x38\x87\x18\xf7\x2b\xc0\x7f\x28"
- "\x37\x54\xc4\xd5\x51\xfc\x4b\xbf\x40\x54\xe9\xa3\xc9\x23\xc6\x62"
- "\x3b\xe8\x36\xd7\x08\xe2\x9f\xf3\xda\x86\x78\x87\xb4\xdd\x72\x9d"
- "\xe1\x1d\xae\x71\x88\x6d\x6d\xd6\x38\xa0\x2d\xd0\x84\xe0\x1a\x47"
- "\xed\x14\x99\xc1\x3d\x76\x74\x63\x3a\x49\x4e\x37\x02\x7a\xf6\xd7"
- "\xb6\xb6\x7a\x49\x8d\x4a\xd4\x4b\x70\x8e\xe3\x5c\x37\x29\xaa\x23"
- "\x98\xee\x39\x41\xcb\xf4\xa1\xb3\x3d\x68\x19\x74\x7e\x49\xdf\xaf"
- "\x99\xc8\xbe\xdd\x83\x7e\xdf\x7d\x44\x32\xbf\xb9\x53\x21\x8e\x2b"
- "\xbe\xe7\xec\x27\x80\x2f\x37\x4f\x43\x9d\xad\xc9\xb6\x79\x9a\x2f"
- "\xfc\xf6\x97\x78\xad\x66\xf5\xd1\x64\x42\xa6\x24\x7b\xcb\x6b\x35"
- "\xd4\x77\x86\xff\x26\xfa\x17\xfc\xcb\xd1\xbe\xdc\x37\xd1\x9d\x80"
- "\x2f\x42\x17\xdb\x33\xc8\x75\x9d\x56\x9d\x6e\xe3\x1b\xd4\x29\xe4"
- "\x49\xe8\xd7\xf9\x32\x1b\x21\x65\x16\xc0\xbd\x71\x0b\x81\xc6\x8b"
- "\xf5\x7b\x39\xb3\xaf\x49\xf1\x25\xda\x2b\x1a\x00\x7b\x7d\x9d\xb1"
- "\x97\xe1\xec\x97\xf4\x1b\x81\x55\xa7\x0d\xc7\xb6\x26\x94\x92\x40"
- "\x58\x7f\x7d\x2f\x2a\x4e\xaf\x5e\xb1\x8a\xe0\x7e\xd7\x4e\xf0\x7b"
- "\xfc\x8d\x6e\xc3\xf4\x70\x7f\x57\xfe\x9b\xc9\x0a\xed\xf3\xe4\x11"
- "\xfe\xe5\xc9\x0a\xf4\x55\x78\x9f\xd3\x2b\x39\x38\xc7\x7c\x9f\xf4"
- "\x04\xaf\xaf\xbf\xe1\x4b\xe5\x32\x0e\xea\x54\x5a\xf4\x64\x7d\x92"
- "\x3f\xc1\xfa\xcc\x9f\x4e\x4f\xb0\xfe\x86\x04\x15\xf5\x75\xa0\xf7"
- "\xd9\xf4\x04\xef\xb5\xc3\xf9\x3f\x71\x01\x24\x3b\x25\x98\x94\x95"
- "\x57\xd2\x36\xca\xca\x3f\x23\xd8\x06\xf0\x3f\xfc\x3e\x48\x36\x26"
- "\x85\x02\x0e\xe8\xe1\xfa\x57\x64\xe3\x95\x5e\x70\xbc\x08\xff\xd7"
- "\x49\xa3\xe2\x94\xb9\xac\x9c\x23\x81\xab\x87\xf1\xc0\xc7\xbc\x11"
- "\xf7\x50\xa6\x11\x3f\x58\x47\x5a\x8d\x35\x3a\xd0\x61\x6b\x4c\xb8"
- "\xc7\x9e\x4f\x7f\xb9\x89\xe3\x5f\xbe\xcc\xa5\xbf\x7c\x05\x9f\x6d"
- "\xe7\x5f\xfe\x1e\x9f\xbd\x21\x45\x2d\xf8\xd7\xea\xa9\x2f\xe0\xfa"
- "\xeb\x61\x04\xfb\x8a\xcf\xc5\xe7\x6d\x4c\xd0\x08\xcf\xec\x4b\xfb"
- "\x86\xcf\xc4\x36\x9d\x9f\x89\xf9\xeb\xd5\x53\xf1\x99\xa7\xe3\xe1"
- "\x18\x04\xf4\xa8\x47\x3a\xe0\xf3\x39\x3e\xba\x13\x9f\x1e\xed\x43"
- "\xef\xb1\x36\xb8\xbb\xe7\x5d\xe1\x1e\x13\xd5\xfb\xe1\x9e\x56\x9e"
- "\xd6\xa7\x6d\xc0\xda\xf8\x09\x9e\x7f\x2a\xda\x40\xda\xd2\xf0\x9b"
- "\xe9\x6c\xad\xfc\xe6\x09\xb6\x56\x32\x9a\x52\x5e\x79\x39\xba\x13"
- "\xd0\x4d\x85\xeb\x6a\x9d\xe2\x1b\x85\xa3\x8d\x6f\xa2\x7d\x90\xde"
- "\xc8\x37\x22\x2f\x21\x1f\x89\x3c\x44\xfb\x69\x26\xc4\x99\x67\xe0"
- "\xb7\xbf\xd0\xce\x0b\x62\x3b\xd0\x07\x22\xf2\xd1\x53\x70\xbd\x2d"
- "\x1f\x9d\xe9\x2d\xf1\x51\xed\x61\x6b\x1a\xcf\x23\x1f\x19\x5e\xca"
- "\xc4\x76\x36\x49\xfd\x99\xac\x40\x1e\xfb\x17\xe3\x2d\x33\xd2\xe9"
- "\xa9\x54\x12\xcc\xde\xa7\x76\x0e\x7d\x9f\x54\x43\x30\xf6\x55\x7c"
- "\x0f\xec\x43\x36\xa7\x26\xe2\x7b\x6c\xbc\x11\x06\xed\x5e\x21\xc2"
- "\x3d\x9b\xb1\x6d\x71\x0c\x80\x66\x44\xbc\x47\xac\x9f\xcd\x69\xa0"
- "\xdf\x7d\xe9\x3d\x8c\xe7\x2e\xba\xe1\x9f\xda\xf3\xae\x3c\x77\x7f"
- "\x2a\x01\x01\x18\x64\xab\x97\xae\xe2\x73\xec\xac\x6f\x87\xec\xad"
- "\xdf\x44\x23\x5d\x95\xec\xfc\x99\xee\x4e\x3c\x21\xb4\x6f\x75\xd3"
- "\xfe\x99\xe1\xb2\xf6\xa3\xa1\xfd\x64\x68\x1f\x65\xb7\x97\xd0\x66"
- "\x77\x66\x26\x6d\x27\x99\xb5\x2f\xf2\x2d\xaf\x8b\x08\xd7\xa6\xa0"
- "\x3f\xea\x59\x5f\x86\xa7\x5f\xd2\x31\xa2\x7e\x50\x4a\x4e\xcf\xb9"
- "\xf8\x41\x39\xfb\xc9\xed\x4d\x33\x0b\x3e\x50\x67\x68\x6c\x43\xb4"
- "\x8d\xa1\x0c\xba\x1b\xe4\x37\xc9\x0f\xea\x34\x5e\xbf\x6c\x48\xaa"
- "\x73\xf2\x83\x3a\x63\xc0\xfa\x26\xc5\xd9\xd0\x16\x25\x51\x42\xb9"
- "\x9a\x9d\xff\x32\xc6\xf9\xbc\xe4\x67\xc8\xce\xa3\x0f\xb7\x60\x27"
- "\x6e\x3a\x52\x8c\x76\xc2\xb3\xe1\xa2\x6d\xd6\x83\xee\xeb\x85\x8c"
- "\xdc\x50\x20\xc9\xc8\x0d\x05\x9e\x65\xe4\xb3\x67\xda\x97\x91\x2f"
- "\x34\x49\x32\x72\xfd\x78\x36\xef\xeb\x9f\x66\xf3\xfe\xdb\x1f\xa8"
- "\xdd\x19\xda\xb3\xbd\x17\xaf\xe6\xff\x32\xa0\x08\xf9\x7c\x3b\xc8"
- "\xbc\x7b\x93\x4a\x95\x7b\x40\xc7\xb2\x83\x7c\xbc\x26\x85\xf8\x62"
- "\xfc\xb7\x35\x30\x86\x46\x5b\x2d\xa9\xf0\x45\x19\xf9\x0b\x68\xe7"
- "\xdb\x99\x95\x66\x2b\x81\x75\x2e\x83\x8d\xcb\xb9\xdf\x02\x2d\x7c"
- "\x8c\x56\x2b\xad\x87\xd7\x60\x5d\xab\x47\x39\xf9\x20\x57\xaa\xdc"
- "\x96\x82\x32\xf4\x42\xb3\xb3\x0c\xdd\x92\x75\x6e\x9e\x7b\xd9\xf9"
- "\xdb\x50\xdb\xff\x63\xef\xfd\xe3\xa2\xa8\xf6\xff\xf1\xc3\x2c\x28"
- "\x1a\xc8\xea\x05\x5b\xbd\x58\x6b\x61\x61\xa1\xa2\x61\x17\x8b\x62"
- "\x31\x2d\x2b\x15\x34\x4d\x32\x4d\x34\x34\x28\x40\x54\x54\x34\x05"
- "\x34\xf5\xad\xa6\x08\x06\x5c\x2c\x44\x2c\xbd\x69\xd7\x1f\xd8\x47"
- "\x6f\xda\xd7\xba\x78\x93\xde\x68\x08\xd8\xd5\x1b\x76\x35\x57\x43"
- "\x43\x43\x5d\x15\xe5\xd7\xee\xce\xf7\x75\xe6\xcc\x3a\x33\xbb\x33"
- "\xcb\xce\x2c\x10\xfa\xf6\x8f\x7d\x88\x33\x67\xce\xcc\x79\xbd\x9e"
- "\xe7\x75\x9e\xcf\xd7\x9c\x73\x66\x05\x9f\x3b\x9f\xdd\x83\xb9\x33"
- "\xce\xe5\x63\x3e\x60\x26\x9c\x59\x0f\xfc\xd9\x80\x79\x34\xe6\xce"
- "\x66\x01\x77\x3e\xb7\xdc\x3e\x77\x3e\x7b\xe6\x3e\x77\x6e\x2d\xee"
- "\x6c\xc9\x1f\x58\x73\xe7\x73\x63\x94\x71\xe7\x73\x11\xf7\xb9\x73"
- "\x7b\xe3\xce\xe7\x42\x2c\xdc\xd9\xbc\xd4\xbb\x03\xce\xe7\xe7\xdf"
- "\xe1\xce\xbf\x06\xdb\x72\xe7\x5f\x47\xda\x72\xe7\xb3\xc9\x42\xee"
- "\x7c\x69\xbc\x2d\x77\xfe\x75\xad\x14\x77\x86\xb8\x55\x83\xb9\x33"
- "\xc6\x17\xe6\xd1\x98\x3f\x9b\x81\x3f\x13\xac\xfd\xfa\x8d\x32\xee"
- "\xfc\xeb\x41\xc7\xb8\x73\x55\x2f\x71\xee\xfc\xcb\x69\x69\xee\xfc"
- "\xcb\x69\x71\xee\x7c\xe1\x1b\x8e\xf3\x5c\x58\xd5\xfe\xb9\xf3\x85"
- "\x00\x71\x7e\x73\x61\x30\xe1\xce\x55\xbe\x2d\xcf\x9d\xab\x7c\xc5"
- "\xb9\xf3\x85\xed\x84\x67\x54\x69\x6d\xb9\x33\x5c\x23\xca\x9d\x2f"
- "\x9c\x61\xaf\xf1\x15\x72\x67\x52\x07\x8c\x99\x0d\xd2\xdc\xf9\x62"
- "\x36\x19\x43\x2f\x4e\x27\x63\x28\xf1\xa9\x2d\x77\xbe\xf8\x5c\xf3"
- "\xdc\x99\x60\x88\x79\x4e\x49\xee\x7c\x71\xb9\x2d\x77\xfe\xe5\xb4"
- "\x38\x77\xae\x9e\xcc\xe1\xe8\x37\x93\x90\x3b\x5f\x3c\x76\x77\x70"
- "\x67\x49\x6c\x05\x08\xb9\xf3\x6f\x1b\xe5\x73\xe7\xdf\x8e\xcb\xe3"
- "\xce\x18\x73\x62\xdc\xb9\xba\x97\x35\xe6\x84\xdc\xb9\x7a\x88\x38"
- "\x77\xae\x1e\x23\xe4\xce\xb8\x7e\x31\xee\x5c\xbd\x58\x50\xbf\x0d"
- "\x77\xae\xde\x20\xe4\xce\xa4\x1c\xc7\x9d\x2f\xe9\xd8\x5c\xc4\x72"
- "\xf9\xdc\xf9\x52\x6f\xfb\xdc\xf9\x52\x5f\x21\x77\xae\x36\x12\x8e"
- "\x7c\x69\x1c\xe1\xce\x97\xd4\xe4\xf8\x2f\xcb\xf8\xc7\x39\xee\x4c"
- "\x8e\xdb\x72\xe7\x4b\x71\xcd\x70\xe7\x60\xc7\xb9\x73\xed\xa4\x92"
- "\x3b\xdc\xb9\x76\x92\x85\x3b\x9b\x81\x3f\xe6\x03\x0f\x80\x5f\x35"
- "\x5e\x0f\x81\xfb\xdc\x45\x97\xcb\xbd\xec\xf3\xe7\xeb\xb9\x1c\x7f"
- "\xbe\x76\x89\xf4\xfd\x6b\xc7\x48\xdf\xbf\xb6\xf6\x4e\x8e\x19\xb8"
- "\x33\xe6\xd0\x6c\x8e\xf9\x44\x3a\xfc\x76\x2f\x2c\x61\xf8\xf3\xae"
- "\x1b\xf5\x14\xe6\xd0\xab\xf0\xdc\x4c\xe0\xd1\xdf\xb1\x1c\xba\xbc"
- "\x36\x98\xe5\xd1\x57\x1b\x60\xcc\xd0\xa7\xa7\x30\xeb\xb5\xdc\xe1"
- "\xf9\x2a\x19\xfe\x9c\x54\x8f\x3e\xbb\x1d\x8c\xdf\xc3\x57\x16\xa5"
- "\x90\x72\xd0\xce\xd3\x1c\xdf\xbe\xbc\x5d\xc0\xb7\x93\x18\xbe\x7d"
- "\x02\xf3\xed\xef\x4a\x10\xfa\x36\x85\x70\x6e\xcc\xb7\x31\xef\x06"
- "\xbe\x5d\xb1\xb1\x3b\x5d\x5a\xb7\xe2\x72\xa5\x85\x73\xaf\x85\xff"
- "\x83\xaf\xf5\x87\x0b\x10\xda\x38\x03\xb9\x82\x4f\x2a\x3f\x80\x7b"
- "\xe0\xf2\x75\x2b\x7e\x47\x96\x72\x30\x66\x57\x10\x5e\x7e\x75\xbf"
- "\x59\x90\xd3\xfe\x7d\x14\xd6\x24\xcc\x78\x0c\x76\xc0\x3c\xcb\x92"
- "\xd3\x36\xf7\xe9\x6f\xa0\x7d\x08\x37\x17\xe6\xb5\xaf\xf4\xb6\x70"
- "\xf3\x74\x96\x9b\x37\x78\x03\x37\x4f\xb4\x70\xf3\xdf\x17\x28\xe4"
- "\xe6\x27\x18\x8e\xf7\x4a\xcb\x73\xbc\x0d\xf3\xfe\x78\x6e\x8e\x79"
- "\x39\xe6\xe2\x98\x97\x63\x9e\x8e\xb9\x39\xe6\xe9\x66\x96\x9b\xe3"
- "\xbd\x09\xeb\xeb\x9a\xe1\xe6\xc0\xdd\xe8\x0e\xe5\x23\x18\x6e\xee"
- "\xc2\xe7\xe6\x35\x57\x94\x71\xf3\x9a\x1a\x3e\x37\xc7\xb8\x97\xcb"
- "\xcd\xb1\xef\x6d\xde\xc5\xe2\x6f\x2f\x80\xff\xb0\xaf\xec\xbe\xbb"
- "\x63\xfd\x88\xfd\x86\x7d\x86\x7d\x27\xe9\x37\x3e\x37\x07\xdc\x95"
- "\xd6\xff\x71\xdc\xdc\xdf\x8a\x9b\x63\x2e\x0e\xb6\xab\xc2\x1c\xbd"
- "\xbc\x08\x6c\x33\x0b\x78\x3a\x70\x74\x6b\x7e\x8e\xfd\xeb\x18\x3f"
- "\xaf\xa9\xbc\x93\xdb\xa6\xbc\x3b\xe4\xe3\xdc\x76\x37\x0b\x3f\xbf"
- "\x5a\x69\xcb\xcf\xaf\xd6\xf0\xf8\x79\x85\xde\xe5\x77\xb5\x90\x9b"
- "\xdf\xf2\xb4\xe5\xe6\xd7\xfa\x4a\x72\xf3\xee\x22\xdc\xdc\xc7\xc2"
- "\xcd\xaf\xbd\xa1\x8c\x9b\x5f\x8b\x94\xe2\xe6\x75\x6a\x3e\x37\xbf"
- "\x76\x80\xe3\xe6\x49\x3c\x6e\x7e\xd9\x57\x9a\x9b\x5f\x66\xb8\x20"
- "\xad\x4e\x0c\xc4\x75\x61\x4e\x85\xdf\x15\x6a\x99\x75\xf5\xd7\x63"
- "\x31\xaf\xc2\xb9\x0c\x78\x7e\xe0\x56\xd7\x07\xf3\x39\x3a\x7e\x47"
- "\x68\x8f\x47\x25\xce\x40\x0f\x61\x2e\x85\x79\x94\x85\xf7\xe2\xf2"
- "\x98\x4f\xb5\x2e\x97\x32\x9c\x10\xe7\x52\x86\x73\x0c\x4f\x66\xd6"
- "\x63\x5e\xdb\x8f\xc7\xc4\x96\xe5\xea\xd7\xf6\x8b\x73\xf5\xeb\xe3"
- "\x09\xaf\xb9\x76\x10\xfb\x45\xc8\xd5\xe1\x1a\x51\xae\x7e\x7d\x15"
- "\x7b\xcd\x7e\x21\x57\x27\x75\xc0\xf8\xbc\x55\x9a\xab\xdf\x08\x23"
- "\xe3\xf5\x8d\xae\x64\xbc\x66\x7d\x6c\xc3\xd5\xaf\x5f\xe2\x73\x75"
- "\xec\x7f\x5b\xae\x4e\x30\xc5\x3c\xa7\x24\x57\xbf\x31\xd0\x96\xab"
- "\x5f\xf6\xc5\x5c\x5d\x1c\x57\xb5\x3e\x42\x5c\xdd\xdc\x57\x6f\xb6"
- "\x70\xf6\xd5\xb8\xbe\x25\xd6\x9c\xfd\x2e\xc4\xda\x09\x8e\xb7\xe3"
- "\x36\xdd\x1c\x2f\x8f\xb7\x33\xd7\xac\x92\xc7\xdb\x31\xfe\xc4\x78"
- "\xfb\xcd\x93\xd6\xf8\x13\xf2\xf6\x9b\xd7\xc5\x79\x7b\x6d\x27\x21"
- "\x6f\xc7\xf5\x8b\xf1\xf6\xda\xc1\x82\xfa\x6d\x78\x7b\xed\x18\x21"
- "\x6f\x27\xe5\x38\xde\x5e\x5b\xcf\xe6\x41\x0e\xc9\xe7\xed\xb5\xa7"
- "\xec\xf3\xf6\xda\x73\x42\xde\x5e\xbb\x97\xf0\xf3\x5b\x1e\xf5\x0c"
- "\x6f\xaf\x2d\x61\xf9\x7f\x11\xff\x38\xc7\xdb\xc9\xf1\x7a\x3e\x6f"
- "\x2f\xc2\xbc\xfd\x96\x5f\x33\xbc\x5d\xe7\x30\x6f\xa7\x10\xc7\xdb"
- "\xe1\x6f\xfb\xbc\xfd\xd6\x49\xfb\xbc\xdd\xc4\xe3\xed\x4d\x2c\x6f"
- "\x6f\x62\x79\x7b\xd3\x5a\x4b\xde\x1b\xf3\x76\xd3\x23\xf1\x5a\x36"
- "\xef\x5d\xb2\x6b\x5e\x05\xb5\xdb\x92\xf7\x9e\x0d\x7c\xdc\x80\xdc"
- "\x57\xcd\x46\x08\x73\x76\x3c\x37\xa4\xb4\x3e\x98\x9d\x1f\xd2\xd8"
- "\x90\x87\x39\xfb\x45\x28\x53\x05\x9c\x1d\x78\xf7\x67\x8d\xc1\x14"
- "\xb4\xa7\x52\x50\x76\xde\x9d\xb2\xa7\x2d\x65\x31\x57\x87\xf2\xa5"
- "\x65\xc0\xdb\xf1\x35\xd0\xff\x4b\x4b\xf1\xbc\x93\x94\xa3\x4c\x59"
- "\xa8\xa3\x82\xe3\xf8\xb7\xd7\x32\x1c\xdf\xc0\x72\x7c\xb8\x06\xb8"
- "\x4b\xc9\x1d\x8e\xdf\x58\x41\x65\xdc\x10\x70\xfc\xc3\x75\x2b\x6e"
- "\xef\xb7\xf0\xf6\x75\x2c\xb7\xcf\x30\x33\xdc\xfe\x04\x70\xfb\x4a"
- "\xc2\xed\x6f\x9f\xb6\x94\x01\xcc\x9c\x66\xca\x5c\x64\xca\x94\x42"
- "\x99\x0a\x52\xa6\x8e\xcf\xff\x0f\x13\xfe\xdf\x68\xc5\xff\xeb\x18"
- "\xfe\x6f\xc9\xcb\x63\x0e\xc3\xcf\xcd\x9b\x7d\xc4\x72\xf3\x0d\x77"
- "\xf8\xff\x3a\x3e\xff\xbf\x93\x9b\xaf\x93\xc5\xff\xe1\x9e\x25\x16"
- "\x2e\xd9\x26\x3c\xf2\x86\x38\x8f\x6c\x6f\xfc\xdf\xbc\xa2\x7c\x84"
- "\x35\xff\xc7\x9a\xc0\x92\x9b\x37\x0b\x72\xf3\xf5\x0a\xf9\x7f\xbd"
- "\x80\xff\x63\x3f\x2a\xc8\xcd\x97\xb4\x89\x6e\x6b\x47\xb9\xf9\xd6"
- "\xe7\xff\xf5\x95\xfc\xfc\x3c\xe6\xff\x5c\x7e\xbe\x51\x84\xff\x37"
- "\xf2\xf9\xff\x61\xbd\x4b\x9d\x90\xff\x53\x2e\x22\xfc\xbf\x49\x21"
- "\xff\x6f\x52\xc8\xff\x9b\x1c\xe4\xff\x4d\x12\xfc\xff\xd6\x09\x69"
- "\xfe\x7f\xeb\x04\xae\xdb\x9c\xc1\xf1\x34\xfc\x1e\x54\x3b\x0f\xf3"
- "\x34\x13\xe1\xff\x84\xb7\x01\x4f\x33\xdd\x25\xfc\xdf\x28\xc1\xc9"
- "\x8c\x3c\xfe\xdf\xd4\x0a\xfc\xbf\x49\x82\xff\x9b\x58\xfe\xdf\x24"
- "\xc2\xff\x9b\x24\xf8\xbf\x89\xe5\xff\x4d\x56\xfc\xbf\x89\xe5\xff"
- "\x26\x3b\xfc\xdf\xcc\xf2\x7f\x33\xcb\xff\x89\x8f\x6d\xf9\xbf\xc9"
- "\x01\xfe\xdf\xc4\xf2\xff\x26\x3b\xfc\xdf\x2c\xc2\xff\x6f\x9d\xc0"
- "\xfc\x5f\x14\x57\x14\xf2\x11\xe2\x8a\xb6\xe2\xff\xe6\xbb\x88\xff"
- "\x4b\x62\xcd\x8a\xff\xd3\x0a\xf8\x3f\x2d\x93\xff\x37\x49\xf0\x7f"
- "\xfa\xa4\x35\xfe\x84\xfc\x9f\x16\xe7\xff\x14\xb2\xe2\xff\x4d\xe2"
- "\xfc\x9f\x42\x83\x05\xf5\x5b\xf3\x7f\x0a\x59\xf1\xff\x26\x21\xff"
- "\xa7\x10\xcb\xff\x6f\x2d\x90\xcd\xff\x29\x64\x9f\xff\x53\x48\xc8"
- "\xff\x29\x44\xf8\x3f\xe5\x42\xf8\x3f\x85\x58\xfe\x7f\x2b\x99\x7f"
- "\x9c\xe3\xff\xe4\xb8\x0d\xff\x5f\xed\xd2\x1c\xff\xf7\x30\x6e\xe9"
- "\xaf\x6f\xf4\xeb\x6f\x68\xcc\x9a\xa6\x7e\xb2\xea\x61\xd3\x9d\xef"
- "\x12\x44\x01\x1f\x38\x0d\xfc\x60\x2a\xa2\xf0\xda\xfe\x94\xe3\x30"
- "\xee\x4f\x25\xf3\xfb\xf1\xd8\x8f\xe7\x9f\xec\x5c\x58\xe4\x06\x36"
- "\x45\x4d\xde\xcf\x17\x19\x03\x86\x22\xcc\x01\x1a\xb6\xf4\x2f\xaa"
- "\xcf\x1a\xab\x69\xc0\x73\xfb\xe3\x10\x35\xa5\x46\x9c\xd7\xbd\x7f"
- "\x9a\x36\x03\xe6\xdd\xc3\x27\x11\x4e\x77\x2c\xe6\x02\x83\x63\xcc"
- "\x0b\x3e\xbe\x0d\x5c\xa0\xb6\x92\xe1\x09\x1e\x51\x5a\x94\x97\x82"
- "\xbc\x3d\x6b\x90\xda\xd3\xc5\xa5\xc3\xab\x6f\x20\x64\x02\x8e\x30"
- "\xbc\x2f\x6d\x7e\xa2\x4a\x8b\xf7\xf2\xe9\x42\x78\xc2\x7e\x37\x23"
- "\xcb\x13\x3e\xbc\x8d\x02\x36\xce\x03\x7e\x70\x8c\xf0\x03\xfc\x0d"
- "\x83\x06\xc2\x0f\x1e\x6a\xac\xf3\x7f\xe4\xce\xdc\xfe\x3b\x6b\x36"
- "\xb8\xb9\xfd\x4d\x99\x1c\x37\xc0\xbc\x80\x9e\xe2\x8f\x06\xd4\x93"
- "\xb9\x16\x0b\xc7\x90\xb9\xfd\x01\x55\x88\xda\xf4\x16\x72\x2f\x8d"
- "\x3a\x8f\xd7\xdc\x6b\x4a\xab\xb6\xa2\x05\x2f\xa3\x87\x8c\x98\x0b"
- "\x2c\xa5\x0b\x4b\xab\xb2\x11\xde\xa7\x10\xb8\x62\x70\x2e\xcb\x07"
- "\x46\x4e\x95\xe0\x03\x30\x06\x63\x4e\xc0\x8c\xbd\x14\x75\xb2\xd8"
- "\xbf\x18\xc9\xe6\x79\x14\xc5\xc4\x4e\xc9\x75\xbe\x5b\xfa\x1b\x8c"
- "\x7e\xfd\x8b\x4c\xde\xd3\xd4\x64\xdf\xca\x09\x3a\xf3\xa7\x09\x81"
- "\x78\x3f\xc2\xbf\x9f\xaf\x76\xc1\x7b\x70\xe3\xef\x51\x9a\x77\x0c"
- "\x45\x82\xf5\x18\x4d\xac\xcf\x9a\x88\xcf\x30\xbf\x9b\x5c\x83\xe8"
- "\x29\x46\x0a\xc1\xb9\x2e\xcc\x7a\x8c\x7a\x3d\xe2\xbe\x4b\xa9\x41"
- "\xf9\x66\xb2\xf7\xa3\xf9\xfd\x98\x4e\x66\xf0\x0b\xbd\x94\x42\x3b"
- "\x6f\xd7\x33\x1c\x6e\x0d\xfe\x56\xe5\x12\x17\x4f\xcc\xe1\x00\xfb"
- "\x9d\x37\x35\x82\x8f\xce\x11\x1f\xd1\x4b\xdd\x99\x7f\x8d\xef\xfb"
- "\x6b\xa1\xee\x47\x9a\x9a\x80\xc3\xb1\xdf\xb5\xb4\xec\x83\xcb\xac"
- "\xad\x69\xc4\x6b\x6b\x2a\x91\x31\x93\xec\x2d\x08\xb8\x70\xc1\x7b"
- "\x72\xc0\x33\xf8\x32\x6b\x6a\x9a\xfc\x31\x8e\xd4\xf9\x17\xf1\x3a"
- "\xa0\x9f\x19\xff\x98\x58\xbf\xe0\xef\x5b\x5a\xb8\x59\xd9\xb6\x93"
- "\x64\x5d\xa5\x95\x2f\x9a\xb6\x12\x0e\xce\xac\x73\x59\xed\x12\x8c"
- "\xe7\xc8\x5c\xa5\x5c\xe3\x8b\x93\x80\x13\x25\xc9\xf5\x8b\x6b\x5c"
- "\xfb\xf0\x8b\xfa\x1e\xf3\x8b\xca\x97\xf8\xa5\x83\x9b\x32\xbf\x74"
- "\x70\x6d\x1f\x7e\x71\xbf\xc7\xfc\xe2\xba\x97\xf8\xa5\xe3\x46\x65"
- "\x7e\xe9\x28\xb9\xff\x03\xf6\x0b\xce\x55\x59\xf2\x54\x96\x1c\x15"
- "\x1e\x4f\x19\xbd\x43\x79\x25\xde\x99\x93\x09\x7f\xf3\xe7\x64\xfe"
- "\x70\x18\xe7\x6f\x56\xa3\xa3\xc3\xf0\xd8\xea\x3e\xcb\x6e\x6e\x8a"
- "\xf2\xd8\x7f\x27\x37\x45\x3d\xd0\x83\xe1\xa8\x54\x67\x13\xc3\x51"
- "\xa9\xce\xcc\xbc\xed\xc5\x67\x10\x65\x7c\x6c\xa0\x7a\x57\x42\x11"
- "\x85\xd7\x2f\xed\xba\x5a\x4f\xad\xb9\x01\x9c\x93\x7a\x98\xc6\x39"
- "\xa9\xb5\xb3\xf1\x5c\xcc\x5a\x04\x7c\xef\xe1\xcb\x54\xe7\xc1\x78"
- "\x6f\xb4\x6f\xaf\x16\x31\xb9\x20\xfa\x91\x84\xc0\x1d\x3d\x0d\x2e"
- "\x78\x1c\xdd\x95\x50\x4f\x59\xb0\x64\x59\xd7\x08\xf6\x34\xdc\xdc"
- "\xda\x5f\x8f\xe7\x4d\x36\xfa\x8c\xd5\x98\x7c\xa6\xa9\x8d\x3b\x87"
- "\x22\x31\x7c\x31\xeb\x25\x61\x0c\xc5\xeb\x1b\xdf\x4a\xe4\x70\x66"
- "\x7e\x9f\xe0\xab\x0c\x38\x3b\xfe\xfe\x8f\x17\x8c\x9d\x74\x53\x4c"
- "\xa7\x37\xb7\x83\xef\x59\x8c\xc1\xf8\x2d\x8d\xb1\x0d\x42\x8c\xdd"
- "\x64\x31\x06\x58\xbb\x83\x31\xde\x7a\xc7\x44\x82\x31\xfd\x1d\x8c"
- "\x31\x63\xe7\xfb\xfe\xbe\x18\x67\x16\x8c\xe1\x71\x93\x60\xec\xbc"
- "\x24\xc6\x7e\x38\x2d\x8e\x31\x63\x1f\x3e\xc6\x3a\x8c\x24\x18\xeb"
- "\xec\x52\x3c\x09\x30\x36\x49\x2e\xc6\x98\xa5\x71\x3c\xed\xac\xee"
- "\x65\xa3\x9d\xa9\xce\xd3\xad\xb5\xb3\x45\x2b\xdf\xf4\x99\x80\x6e"
- "\x82\x5e\xae\xb5\xe8\x65\xaa\xf3\x2a\x45\x7a\x99\xea\xbc\xd2\xa1"
- "\xb9\x6c\x54\xe7\x4b\x47\x17\x21\x74\x14\xfa\x53\x79\x04\x99\xcb"
- "\xf6\x77\xac\x97\x29\xf7\x24\x8c\x43\x51\xbd\xcc\x9e\xb3\x99\x83"
- "\x44\x79\xac\xba\x33\x07\x89\xf2\x18\xdf\xb0\x5e\x7c\x2e\xdb\x17"
- "\x29\xb9\x3c\xed\x92\x2b\x32\xdf\x28\xd7\x6a\xbe\x51\xae\x88\x6e"
- "\xc9\x45\xf8\x5a\xbe\x6e\x39\x1a\x41\x74\xcb\xd1\x08\xac\x5b\x72"
- "\x19\xbe\x77\x34\xc2\xa2\x5b\x72\xe1\x3c\xd1\x2d\x47\x23\x2e\xc2"
- "\x0f\x74\x0b\xf5\x40\xfd\xd1\x08\x11\xdd\x42\x79\x30\x5a\x13\x6c"
- "\x58\x2d\x3d\x97\x2d\x97\xa7\x8f\x73\x79\xfa\x38\x97\xd5\xc7\xb9"
- "\x8c\x3e\x26\xf7\x0c\x60\x9e\x0d\xdf\x13\xd7\xc9\xbf\x27\xa7\x1f"
- "\x3c\xe6\x32\xfa\x81\xea\x5c\x83\xfd\x20\xd0\xc7\xf8\x9a\x64\x11"
- "\x7d\x4c\x79\x6c\x67\xaf\xa9\xb6\xe8\xe3\x46\x52\x9e\xa9\x03\x62"
- "\x4d\xb1\xa4\x3e\xa6\x3c\xa7\x92\xd8\xe3\x49\xe6\x83\xb3\x3e\xb5"
- "\xd1\xc7\x94\x27\x5f\xff\x88\xcf\x65\x63\x31\xc4\x3c\x67\xa2\x84"
- "\x3e\xa6\x3c\xc7\xd8\xe8\x63\xca\x3d\x51\x74\x2e\x1b\xe5\xd5\x97"
- "\xc3\x51\x97\x23\x82\xb9\x6c\x94\xe7\x06\xbe\x2e\xc6\x18\xbb\xbb"
- "\xb0\xf5\x40\xbd\x60\x2e\x1b\xd5\x25\x56\x5c\x13\xe7\xf2\x34\x71"
- "\x2e\xa3\x89\x8f\x46\xb0\x73\xd9\xa8\x2e\x1b\x71\xdd\xb6\x9a\x38"
- "\xf7\x4e\x79\x8b\x26\xc6\xd7\x10\xcc\x89\x68\x62\xaa\xcb\x25\x6b"
- "\xcc\x09\x34\x31\xe5\xe5\x66\xd1\xc4\x8d\x6f\xf2\x35\xb1\x57\x2f"
- "\x81\x26\x66\xea\x17\xd3\xc4\x5e\x2f\x0b\xea\xb7\xd1\xc4\x5e\xd3"
- "\x2d\x9a\x18\xd7\x6f\xc1\x2d\xa7\x89\xd5\xee\x24\x86\xba\xf7\x90"
- "\xaf\x89\xbd\x98\xbc\xce\xce\x8f\xc9\x3b\x27\xa1\x1e\xf6\xba\x2e"
- "\xd4\xc3\x5e\x87\x89\xee\x55\xfb\x32\xf3\xd8\x28\xaf\x4a\x72\xdc"
- "\x5d\xc3\x3f\x7e\x47\x0f\xb3\xc7\xf1\x3c\x36\x66\xfe\xda\x6a\x75"
- "\x80\x3c\x1d\xfc\x60\x3b\xd4\xc1\x1a\x3b\x3a\x58\x73\x8f\xe9\xe0"
- "\xae\x67\x94\xe9\xe0\xae\xa7\xdb\x07\xaf\xbf\xd7\xf4\x96\x5a\x47"
- "\x38\xd7\x9f\xe6\x2a\xe3\xf5\x7f\x4a\x6a\x1f\x7e\xb9\xd7\xf4\x56"
- "\x37\x3f\xe2\x17\x1f\x4f\x65\x7e\xf1\xf1\x50\xae\xb7\x7c\xf5\x9c"
- "\xde\xf2\xd5\x4b\xeb\x2d\x9f\x73\xf6\xf5\x56\x4f\x7f\x4e\x6f\x69"
- "\x56\x11\xce\xa3\x89\x27\x9c\x47\xd3\x4f\xbe\xde\x7a\x70\xeb\x7d"
- "\xbd\xd5\x92\x7a\xeb\x4f\x07\x09\xc6\x1e\x9c\xa5\x4c\x6f\x3d\x98"
- "\x28\xd4\x5b\xbd\xd6\xda\xea\xad\x07\x4f\x3a\xae\xb7\x1e\x6c\x50"
- "\xa6\xb7\x1e\xac\x77\x4c\x6f\x69\xde\x10\xd7\x5b\x3e\x55\xd2\x7a"
- "\x8b\x9c\xb3\xe5\xc9\x3d\x1a\x38\x9e\xdc\xa3\xb8\xfd\xeb\xad\x1e"
- "\x31\xe2\x9c\xb8\xc7\x2c\xa2\xb7\x34\x91\x2d\xaf\xb7\x34\x91\xe2"
- "\x7a\xab\xc7\x05\xc2\x4d\x35\x93\x6c\xf5\x16\x5c\x23\xaa\xb7\x7a"
- "\xf6\x60\xaf\x89\x14\xea\x2d\x52\x07\xc4\x9a\xc1\xd2\x7a\xab\xe7"
- "\x71\x12\x7b\x7a\x6e\x26\xb1\x87\xf8\xd4\x56\x6f\xf5\x5c\xd0\xbc"
- "\xde\x22\x18\x62\x9e\x53\x52\x6f\xf5\x3c\x64\xab\xb7\x7c\xf4\xe2"
- "\x7a\xcb\x77\x03\x87\x23\xdf\x21\x42\xbd\xf5\xe7\x4e\x77\x87\xde"
- "\x92\xc4\x56\x8c\x50\x6f\xfd\xf9\x94\x7c\xbd\xe5\xeb\x29\x4f\x6f"
- "\x61\xcc\x89\xe9\x2d\xdf\x37\xac\x31\x27\xd4\x5b\xbe\x73\xc5\xf5"
- "\x96\xef\x5a\xa1\xde\xc2\xf5\x8b\xe9\x2d\xdf\x03\x82\xfa\x6d\xf4"
- "\x96\xef\x49\xa1\xde\x22\xe5\x38\xbd\xd5\x2b\x99\xc4\x50\x9f\x55"
- "\xf2\xf5\x56\xaf\x37\xa4\xf5\x56\xaf\xa9\x42\xbd\xd5\x2b\x88\xe8"
- "\xaa\x5e\x6b\x88\xde\xea\x35\x82\x1c\xf7\x59\xc9\x3f\xce\xe9\x2d"
- "\x72\x9c\xd3\x5b\xbd\xf2\xe4\xe9\x2d\xaf\x76\xa8\xb7\xd4\x76\xf4"
- "\x96\xfa\x1e\xd3\x5b\x0f\x8f\x52\xa6\xb7\x1e\x1e\x79\x9f\xd7\xb7"
- "\x06\xaf\xef\x55\x48\x38\x97\xf6\x82\x32\x5e\xaf\xad\x52\xce\xeb"
- "\xfd\xf7\x73\xbc\xde\x7f\xbf\x34\xaf\xef\x6d\x7f\xff\x37\xea\x31"
- "\xc4\xf1\x7a\x3f\x36\x97\xe9\x37\x9c\x8c\xad\x7e\x6e\xf2\x79\xfd"
- "\xa3\x8b\xef\xf3\xfa\x96\xe4\xf5\x0f\x67\x11\x8c\x3d\xfa\xb2\x32"
- "\x5e\xff\xe8\x08\x21\xaf\xef\x3b\xdd\x96\xd7\x3f\xba\xd3\x71\x5e"
- "\xff\xe8\x71\x65\xbc\xfe\xd1\x0a\xc7\x78\xbd\xdf\x40\x71\x5e\xdf"
- "\xfb\xa0\x34\xaf\x27\xe7\x6c\xf9\x58\x9f\xe3\x1c\x1f\xeb\xb3\xb1"
- "\xfd\xf3\xfa\x3e\x3a\x71\xee\xd5\xe7\x65\xc2\xeb\xfd\x02\x5b\x9e"
- "\xd7\xfb\x05\x8a\xf3\xfa\x3e\xdf\x10\x0e\xe4\x17\x64\xcb\xeb\xe1"
- "\x1a\x51\x5e\xdf\xe7\x3a\x7b\x4d\xa0\x90\xd7\x93\x3a\x20\xd6\x78"
- "\x4a\xf3\xfa\xc7\xb6\x93\xd8\xf3\xd8\x02\x12\x7b\x88\x4f\x6d\x79"
- "\xfd\x63\x63\x9a\xe7\xf5\x04\x43\xcc\x73\x4a\xf2\xfa\xc7\x36\xd8"
- "\xf2\xfa\xde\xe2\xfb\x69\x51\xfe\xb3\x38\x1c\xf9\x77\x15\xf2\xfa"
- "\xc7\xce\xdd\x1d\xbc\x5e\x12\x5b\x3a\x21\xaf\x7f\x7c\x8f\x7c\x5e"
- "\xff\xf8\x05\x79\xbc\x1e\x63\x4e\x8c\xd7\xfb\x0f\xb4\xc6\x9c\x90"
- "\xd7\xfb\x8f\x12\xe7\xf5\xfe\xd3\x85\xbc\x1e\xd7\x2f\xc6\xeb\xfd"
- "\x33\x05\xf5\xdb\xf0\x7a\xff\x9d\x42\x5e\x4f\xca\x71\xbc\xbe\x6f"
- "\x04\x89\xa1\xbd\xe5\xef\xa7\x45\xf5\x1d\x28\xcd\xeb\xfb\x0e\x11"
- "\xf2\xfa\xbe\x1e\x84\xbf\xf7\x8d\x26\xbc\xbe\xaf\x96\x1c\xef\x1d"
- "\xc5\x3f\xce\xf1\x7a\x72\x9c\xe3\xf5\x7d\x93\xe4\xf1\xfa\x8e\xed"
- "\x90\xd7\xbb\xdb\xe1\xf5\xee\xf7\x18\xaf\x7f\xb2\x8f\x32\x5e\xff"
- "\xa4\x9f\x72\xfe\x38\xa8\x9e\xe3\x8f\x83\xea\xa5\xf9\xe3\x93\x0d"
- "\xf6\xf9\x63\xa0\x8e\xe3\x8f\xfd\x37\x93\x18\xde\x7f\x39\x89\xe1"
- "\xfd\x87\xcb\xe7\x8f\xfd\xbe\xb9\xcf\x1f\x5b\x92\x3f\xf6\x5d\x49"
- "\xf8\x63\xbf\x55\xca\xf8\x63\xbf\x95\x42\xfe\xf8\xd4\x56\x5b\xfe"
- "\xd8\xef\x8a\xe3\xfc\xb1\x7f\x57\x65\xfc\xb1\xbf\xda\x31\xfe\xd8"
- "\x7f\x96\x38\x7f\x7c\xd2\x28\xcd\x1f\xc9\x39\xdb\x71\x3f\xb0\x2b"
- "\x37\xee\x0f\x38\xd3\xfe\xf9\xe3\x80\x34\xf1\x31\x7e\xc0\x2a\xc2"
- "\x1f\xfb\x27\xb6\x3c\x7f\xec\x9f\x28\xce\x1f\x07\x98\xc8\x58\xdb"
- "\x3f\xc9\x96\x3f\xc2\x35\xa2\xfc\x31\x90\x1d\xff\xfb\x27\x0a\xf9"
- "\x23\xa9\x03\x62\xcd\x28\x69\xfe\x18\x48\xd6\xa7\x52\x81\x07\x48"
- "\xec\x21\x3e\xb5\xe5\x8f\x81\x99\xcd\xf3\x47\x82\x21\xe6\x39\x25"
- "\xf9\x63\xe0\x29\x5b\xfe\xf8\x64\xbd\x38\x7f\x1c\xb4\x87\xc3\xd1"
- "\xa0\x31\x42\xfe\x38\xb0\xf7\xdd\xc1\x1f\x25\xb1\x95\x26\xe4\x8f"
- "\x03\xaf\xcb\xe7\x8f\x83\xfa\xc8\xe3\x8f\x18\x73\x62\xfc\x71\xd0"
- "\x2c\x6b\xcc\x09\xf9\xe3\xa0\xb5\xe2\xfc\x71\xd0\x56\x21\x7f\xc4"
- "\xf5\x8b\xf1\xc7\x41\xc7\x05\xf5\xdb\xf0\xc7\x41\x57\x84\xfc\x91"
- "\x94\xe3\xf8\xe3\x53\x19\x24\x86\x3e\xb9\x59\x3e\x7f\x7c\x6a\x96"
- "\x34\x7f\x7c\x6a\x81\x90\x3f\x3e\x35\x92\xf0\xc4\xa7\xb6\x10\xfe"
- "\xf8\x54\x14\x39\xfe\x64\x01\xff\x38\xc7\x1f\xc9\x71\x8e\x3f\x3e"
- "\xb5\xb7\x39\xfe\x68\x9f\x5b\x3c\xcb\x7d\x9b\x00\xfe\xe6\x73\x8b"
- "\x23\x02\x6e\x11\x34\xde\x3e\xb7\x08\xe6\xbe\x4d\x40\xfd\x85\x7c"
- "\x9b\x80\x7a\x9a\x7c\x9b\x80\x7a\x9a\xf9\x36\xc1\xe2\x51\xc0\x01"
- "\x80\x5b\xec\xbc\x5c\x48\xb8\xc5\xe5\x7a\xea\xc3\xab\x2c\xb7\xa8"
- "\x41\xee\x6b\x12\x58\x6e\xf1\x16\xe6\x16\x4f\xf7\xc3\xdc\xc2\x23"
- "\x0f\xf8\x6d\x15\xcb\x77\x13\x81\xef\x56\xc1\xff\xa1\xef\x7c\x0b"
- "\x75\x94\x01\x27\xcd\xc0\xd7\xe3\xef\x63\x40\x5d\xcc\x3a\x59\x66"
- "\x0d\xad\xde\x4d\x3b\x8d\xac\xbf\xc5\xdf\x37\x91\xfa\xb6\x89\xe5"
- "\xbb\x26\x8b\xaa\x68\x33\xfe\x8e\x49\x78\x34\xef\xfb\x26\xf8\xbb"
- "\xa5\x86\x6a\x84\xbf\x71\x92\x37\x1b\x79\x7f\x82\xb9\x46\x35\x52"
- "\x77\x59\xe2\xd2\x05\x7f\xdf\xa4\x4b\x2d\xe1\xb4\x3b\xcd\x25\x84"
- "\xd3\xce\xd1\x74\x06\x9e\x14\x90\x7f\x83\xe3\x18\x1f\x61\x7e\x31"
- "\xc7\x5f\x5b\x3b\xc7\xff\xa1\x9b\x37\x81\xd3\x1a\xac\xbf\x7f\x71"
- "\x60\x3f\xfe\xce\x02\xfe\xce\xa4\x91\xe5\xb4\xf4\x3b\xfe\x68\xd3"
- "\x0c\xe0\x3d\x35\xc8\xa5\x3f\xfe\xf6\xc5\x31\xa4\x7e\xdc\x17\xe2"
- "\xfe\x4d\x7f\x5f\xfe\x5e\x96\x38\x2f\x6a\xbe\xe9\x8f\x4a\xa3\x7e"
- "\x66\xd6\xcc\x1a\x2d\x6b\x66\x6f\xa0\x60\xc3\x1c\x7f\xea\xe3\xd9"
- "\x3c\x4e\xeb\x83\x39\xed\x33\x76\x38\xed\xe0\x06\x65\x9c\x76\x70"
- "\xbd\x90\x6f\x84\xf8\xd8\xf2\x8d\xa7\x27\x3b\xce\x37\x9e\x56\xb6"
- "\xff\x3b\xf5\x74\x9a\x63\x7c\xe3\xe9\x73\xd6\x7c\x63\x3b\xc3\x37"
- "\x82\x22\x31\x36\xc5\xf9\x06\x39\x67\x3b\x4e\x04\x73\xfb\xbf\x53"
- "\xc1\xa3\xda\x3f\xdf\xf8\x8b\x41\x7c\x4c\xf8\x0b\xd9\xff\x9d\x7a"
- "\xda\xce\xfe\xef\x4a\xf9\xc6\xd3\x7a\x71\xbe\x11\x4c\xf6\x7f\xa7"
- "\x9e\xae\xb2\xe5\x1b\x70\x8d\x28\xdf\x08\xde\xcc\x5e\xa3\x17\xf2"
- "\x0d\x52\x07\xc4\x1f\xe9\xfd\xdf\xa9\x21\x64\xff\x77\x6a\x08\xd9"
- "\xff\x9d\xf5\xa9\x2d\xdf\x18\xd2\xfc\xfe\xef\x2c\x86\x98\xe7\x94"
- "\xe4\x1b\x43\x6c\xf7\x7f\xa7\x82\xc6\x89\xf3\x8d\x67\xb9\xfd\xdf"
- "\xa9\x67\x84\xfb\xbf\x53\x43\x32\xef\x0e\xbe\x21\x89\x2d\xe1\xfe"
- "\xef\xd4\x33\x12\xfb\xbf\xdb\xe3\x1b\xcf\x64\xcb\xe3\x1b\x18\x73"
- "\x62\x7c\xe3\x99\x73\xd6\x98\x13\xf2\x8d\x67\x4c\xe2\x7c\xe3\x59"
- "\xe1\xfe\xef\x4c\xfd\x62\x7c\xe3\xd9\x30\x41\xfd\x36\x7c\xe3\xd9"
- "\xc9\x42\xbe\x41\xca\x71\x7c\x23\x04\xb1\x9a\xcd\x24\x9f\x6f\x3c"
- "\x7b\x4e\x9a\x6f\x3c\x7b\x49\xc8\x37\x9e\x3d\x48\x78\x45\x88\x37"
- "\xe1\x1b\xcf\x56\xb0\x3c\xc4\xc8\x3f\xce\xf1\x0d\x72\x9c\xe3\x1b"
- "\x21\xf7\xd7\xbf\xde\x55\xf9\xaa\xe7\x14\xae\x7f\x7d\xee\xfe\xfa"
- "\xd7\x56\x79\x0f\x1d\xc2\xae\x7f\x0d\x55\xb8\xfe\x35\xf4\xfe\xfa"
- "\xd7\x56\xf1\xcb\xf3\xec\xfa\xd7\x30\x85\xeb\x5f\xc3\xee\xaf\x7f"
- "\x6d\x15\xbf\x84\xb2\xeb\x5f\x87\x2a\x5c\xff\x3a\xd4\x89\xf5\xaf"
- "\xaf\xac\xe1\xb4\xf1\x2b\x6b\xa4\xb5\xf1\x0b\xcd\xac\x7f\x7d\xe9"
- "\x04\xa7\x8d\x5f\x1c\x4c\xb8\xe8\x8b\x3d\x08\x17\x1d\xce\xe4\xa6"
- "\x52\xb0\x36\xfe\x34\x5e\xbb\x7b\xf6\x7e\x0a\xef\xd1\x86\xbf\x19"
- "\xb9\x76\x21\x72\x35\x62\x6d\x0c\x3e\x58\xcb\x7c\x8b\xe4\x30\x4a"
- "\x7c\x17\x6b\xe3\xe1\x63\xca\xaa\x78\xdf\x21\xa1\x5e\x38\xc4\xed"
- "\x8b\x7c\x18\xe1\x73\xdf\xde\xd8\x4f\x65\x34\x5a\xe5\xe4\x67\xd7"
- "\x53\xda\x04\x61\x4e\xde\x94\x3d\x4d\x8d\x73\xf2\x0d\xec\x77\x45"
- "\x98\xbc\x7c\x3f\xfb\x39\xf9\x8d\x8d\x30\x76\x8a\xe4\xe5\x71\x4e"
- "\x1e\xc6\xc8\x7b\x2c\x27\x1f\xc6\xae\x8d\x1d\xde\x4b\x59\x4e\x7e"
- "\xb8\xaf\x50\x23\xbf\x3a\xc4\x56\x23\x0f\x5f\xe2\xb8\x46\x1e\xbe"
- "\x55\x99\x46\x1e\xbe\xc5\x31\x8d\xfc\xa2\x9b\xb8\x46\x7e\x21\x29"
- "\x45\x52\x23\x93\x73\xb6\xda\xe6\xa5\xad\x9c\xb6\x79\x69\x56\xfb"
- "\xd7\xc8\x2f\x79\x8b\xeb\x98\x97\x7a\x11\x8d\xfc\xa2\x6b\xcb\x6b"
- "\xe4\x17\x5d\xc5\x35\xf2\x4b\xec\xfb\xef\x17\xdd\x6d\x35\x32\x5c"
- "\x23\xaa\x91\x5f\x2a\x66\xaf\x71\x15\x6a\x64\x52\x07\xc4\xa1\x73"
- "\xd2\x1a\x79\xc4\x62\x12\x97\x46\x8c\x22\x71\x89\xf8\xd4\x56\x23"
- "\x8f\xe8\xd3\xbc\x46\x26\x18\x62\x9e\x53\x52\x23\x8f\x88\xb7\xd5"
- "\xc8\x2f\x48\xac\x8d\x7d\x65\x38\x87\xa3\x97\x2f\x08\x35\xf2\x88"
- "\x7d\x77\x87\x46\x96\xc4\x96\xb7\x50\x23\xbf\xbc\x5c\xbe\x46\x7e"
- "\xf9\x80\x3c\x8d\x8c\x31\x27\xa6\x91\x5f\x71\xb3\xc6\x9c\x50\x23"
- "\xbf\xd2\x5b\x5c\x23\xbf\x32\x44\xa8\x91\x71\xfd\x62\x1a\xf9\x95"
- "\xe9\x82\xfa\x6d\x34\xf2\x2b\x4b\x84\x1a\x99\x94\xe3\x34\xf2\xab"
- "\x7e\xec\x78\xa7\x60\x6d\xec\xab\x6e\xd2\x1a\xf9\x55\x4f\xa1\x46"
- "\x7e\x45\x4f\xb4\xf0\xab\xc1\x44\x23\xbf\x52\x4b\x8e\xbf\xa0\xe1"
- "\x1f\xe7\x34\xf2\x0b\x56\x6b\x63\x5f\x1d\x71\x7f\x6d\xec\xdd\xa4"
- "\x91\x47\x2a\xcc\x7f\x8f\xac\x6f\x1f\x9c\xff\x5e\xd3\x62\xaf\x4e"
- "\x22\x9c\x6b\x74\xa6\x32\xce\x3f\x3a\xa3\x7d\xf8\xe5\x5e\xd3\x62"
- "\xa3\xd8\x35\xcb\x11\x7d\x95\xf9\x25\xc2\x5f\xb9\x16\x8b\xd4\x70"
- "\x5a\x2c\x52\x23\xad\xc5\x22\x4c\xf6\xb5\xd8\xf8\x28\x4e\x8b\xbd"
- "\x76\x88\x70\x9e\xd7\xb6\x12\xce\xf3\xda\x74\xf9\x5a\x6c\xec\x19"
- "\xa1\x16\x1b\x33\xea\xbe\x16\x6b\x2d\x2d\x36\xba\x92\xe0\x6f\xec"
- "\x76\x65\x5a\x6c\xec\x36\xa1\x16\x8b\x2c\xb6\xd5\x62\xaf\x79\x3a"
- "\xae\xc5\x5e\x1b\xa8\x4c\x8b\xbd\x16\xe8\x98\x16\x7b\x2d\x53\x5c"
- "\x8b\x8d\x41\xd2\x5a\x8c\x9c\xb3\xe5\xd0\xe3\x07\x72\x1c\x7a\x9c"
- "\xa9\xfd\x6b\xb1\x71\x05\xe2\x7c\x79\xdc\x76\xa2\xc5\x5e\xcb\x68"
- "\x79\x2d\xf6\x5a\x86\xb8\x16\x1b\x4f\xbe\x7f\x46\xbd\x96\x65\xab"
- "\xc5\xe0\x1a\x51\x2d\x36\x7e\x0c\x7b\x4d\x86\x50\x8b\x91\x3a\x20"
- "\x0e\xc5\x4b\x6b\xb1\xd7\x3b\x91\xb8\x34\xfe\x14\x89\x4b\xc4\xa7"
- "\xb6\x5a\x6c\xfc\x9e\xe6\xb5\x18\xc1\x10\xf3\x9c\x92\x5a\x6c\x7c"
- "\x83\xad\x16\x8b\x30\x8a\x6b\xb1\x09\xbc\x75\x1a\x13\x66\x09\xb5"
- "\xd8\xeb\x61\x77\x87\x16\x93\xc4\x56\x81\x50\x8b\x4d\xe8\x2a\x5f"
- "\x8b\x4d\x18\x2e\x4f\x8b\x61\xcc\x89\x69\xb1\x09\x99\xd6\x98\x13"
- "\x6a\xb1\x09\x3b\xc5\xb5\xd8\x84\x62\xa1\x16\xc3\xf5\x8b\x69\xb1"
- "\x09\xd7\x05\xf5\xdb\x68\xb1\x48\x4f\xa1\x16\x23\xe5\x38\x2d\x16"
- "\x59\x48\x62\x68\xc4\x56\xf9\x5a\x2c\x32\x53\x5a\x8b\x45\x6e\x10"
- "\x6a\xb1\xc8\x38\xa2\xb9\x22\x0f\x13\x2d\x16\x99\x46\x8e\x47\x6c"
- "\xe1\x1f\xe7\xb4\x18\x39\xce\x69\xb1\xc8\x13\xf7\xd7\xcd\xde\x4d"
- "\x5a\x6c\xe2\x72\x65\x5a\x6c\xe2\xb2\xfb\x9c\xbf\x35\x38\x7f\x64"
- "\x35\xe1\x5c\x93\x7a\x29\xe3\xfc\x93\x7c\x95\x73\xfe\x68\x0f\x8e"
- "\xf3\x47\x7b\x48\x73\xfe\x49\xd7\xed\x73\xfe\xa9\xe3\x38\xce\x3f"
- "\x65\x1f\x19\x5b\xa7\x6c\x20\x63\xeb\x94\x37\xe4\x73\xfe\xb7\x8e"
- "\x0b\x39\xff\xe4\xb0\xfb\x9c\xbf\xb5\x38\xff\xc4\x52\x82\xbf\xb7"
- "\x36\x2a\xe3\xfc\x6f\xe5\x09\x39\x7f\xf4\x01\x5b\xce\x3f\xc5\xc5"
- "\x71\xce\x3f\xa5\x8f\x32\xce\x3f\xc5\xcf\x31\xce\x3f\x65\xb9\x38"
- "\xe7\x9f\x54\x2b\xcd\xf9\xc9\x39\x5b\xae\x36\xb5\x0f\xc7\xd5\xa2"
- "\xae\xb7\x7f\xce\x1f\x95\x25\xce\xcb\xa2\x36\x12\xce\x3f\x65\x59"
- "\xcb\x73\xfe\x29\xcb\xc4\x39\xff\xd4\xae\x84\x1f\x4d\x59\x69\xcb"
- "\xf9\xe1\x1a\x51\xce\x3f\x75\x38\x7b\xcd\x32\x21\xe7\x27\x75\x40"
- "\x1c\x9a\x2a\xcd\xf9\xa7\x9a\x48\x5c\x9a\x4a\xbe\xd9\xc5\xfa\xd4"
- "\x96\xf3\x4f\xdd\xda\x3c\xe7\x27\x18\x62\x9e\x53\x92\xf3\x4f\xbd"
- "\x62\xcb\xf9\x27\x19\xc4\x39\xff\xdb\xc5\x1c\x8e\xde\x9e\x2e\xe4"
- "\xfc\xd3\x06\xdf\x1d\x9c\x5f\x12\x5b\x59\x42\xce\xff\xb6\x9b\x7c"
- "\xce\xff\xf6\x10\x79\x9c\x1f\x63\x4e\x8c\xf3\xbf\xbd\xdc\x1a\x73"
- "\x42\xce\xff\xf6\x66\x71\xce\xff\xf6\x01\x21\xe7\xc7\xf5\x8b\x71"
- "\xfe\xb7\x2f\x08\xea\xb7\xe1\xfc\xd1\x2e\x42\xce\x4f\xca\x71\x9c"
- "\x3f\x7a\x0b\x89\xa1\x93\x36\xc8\xe7\xfc\xd1\xcb\xa5\x39\x7f\xf4"
- "\x5a\x21\xe7\x8f\x66\xd7\xce\x46\xef\x27\x9c\x3f\x3a\x89\x1c\x9f"
- "\x94\xcb\x3f\xce\x71\x7e\x72\x9c\xe3\xfc\xd1\x25\xf7\xd7\xd4\xde"
- "\x4d\x9c\x7f\xc6\x02\x65\x9c\x7f\x46\xb2\x72\x6e\x99\xc0\x5b\xf7"
- "\x92\x60\x67\xdd\xcb\x3b\xa3\xec\x73\xcb\xf7\x78\xeb\x5e\xde\x65"
- "\xd7\xbd\xc4\xb2\xeb\x5e\x62\xf7\xc9\xe7\x96\xb1\xfd\x84\xdc\xf2"
- "\x9d\x8d\xf7\xb9\x65\x6b\x71\xcb\xe8\xd3\x84\x5b\xc6\x34\x28\xe3"
- "\x96\x31\x56\xeb\x5f\x66\x8a\xac\x7f\x89\x95\xb1\xfe\x25\x56\xe1"
- "\xfa\x97\x58\x07\xd7\xbf\xc4\x4a\xac\x7f\x79\x27\x42\x9a\x5b\x92"
- "\x73\xb6\x9c\xe0\x3d\xde\xfa\x97\xf7\xee\x82\xf5\x2f\xef\x4a\xac"
- "\x51\x78\x97\x5d\xff\x12\xdb\x0a\xeb\x5f\x62\x25\xd6\xbf\xbc\xc7"
- "\xae\x7f\x89\x15\x59\xff\x12\x2b\xb1\xfe\xe5\x3d\x76\xfd\x4b\xac"
- "\xd5\xfa\x97\x58\x76\xfd\xcb\x7b\x76\xd6\xbf\xc4\xb1\xeb\x5f\xe2"
- "\xd8\xf5\x2f\xc4\xa7\xb6\xdc\x32\xce\x81\xf5\x2f\xb1\xec\xfa\x97"
- "\x58\x3b\xeb\x5f\xe2\x44\xd6\xbf\xbc\x33\x52\x9c\x5b\x26\xf0\xd6"
- "\xbf\xc4\x5b\xad\x7f\x89\xbb\x4b\xd6\xbf\x48\x62\xcb\x6a\xfd\x4b"
- "\xbc\x82\xf5\x2f\xf1\x32\xd7\xbf\xc4\x4a\xac\x7f\x89\x3f\x67\x8d"
- "\x39\x21\xb7\x8c\x97\x58\xff\x92\x60\xb5\xfe\x25\x56\x62\xfd\x4b"
- "\x42\x98\xa0\x7e\x1b\x6e\x99\x60\xb5\xfe\x25\xd6\x6a\xfd\xcb\x4c"
- "\x76\xfd\xcb\x8c\x5b\xf2\xb9\x65\x82\x9d\xf5\x2f\x09\x56\xeb\x5f"
- "\x12\xd8\xf5\x2f\x33\xd9\xf5\x2f\x09\xec\xfa\x97\x19\xb5\xfc\xe3"
- "\x1c\xb7\x24\xc7\x39\x6e\x39\xb3\xd9\xf5\x2f\xf6\x79\xc7\xbc\x5a"
- "\x8e\x77\xcc\xab\x95\xe6\x1d\x33\x8b\xed\xf3\x8e\xa4\x10\x8e\x77"
- "\xcc\xde\x48\xfa\xf7\xec\x25\xa4\x7f\xcf\x66\xde\xc3\x2c\x3e\x06"
- "\xbc\xe3\x91\x78\xed\xae\xab\x85\x0c\xef\xd8\x9d\x50\x4f\x01\x47"
- "\x74\x35\x63\xde\x01\x5c\x70\xcd\x3c\xcc\x3b\xaa\xd8\xf5\xb6\xb3"
- "\x0e\x1c\x4b\xe6\xf3\x8e\xc4\x1e\xcc\xda\x5b\xcc\x3d\x6a\xeb\x99"
- "\x72\xf8\xbc\xd8\x5a\xdc\x6f\x12\xd8\xb5\xb8\x50\x37\x7f\x0d\x2e"
- "\xb3\x2e\xf7\x2a\xf0\x92\x69\xe0\x0f\x1e\x2f\xb9\xbf\x16\xd7\xde"
- "\x5a\xdc\x59\x0a\xf3\xdf\xb3\x96\x09\xb9\xc8\xfc\xcd\xb6\x5c\x64"
- "\xd6\x25\xc7\xb9\xc8\x6c\x4f\x65\x5c\x64\xb6\x87\x63\x5c\x64\x76"
- "\xbc\x38\x17\x99\x59\x82\x71\x2b\xce\x45\xc8\x39\xdb\x31\x24\xc9"
- "\x93\x1b\x43\xe6\x9c\x6a\xff\x5c\x64\xce\x22\xf1\xf1\x62\xce\x72"
- "\xc2\x45\x66\xc7\xb5\x3c\x17\x99\x1d\x27\xce\x45\xe6\x34\x90\xb8"
- "\x3d\x3b\xd1\x96\x8b\xc0\x35\xa2\x5c\x24\xa9\x1f\x7b\x4d\x9c\x90"
- "\x8b\x90\x3a\x20\x36\xbd\x2c\xcd\x45\x92\x2e\x90\x58\x95\xb4\x8f"
- "\xc4\x2a\xe2\x53\x5b\x2e\x92\xb4\xb6\x79\x2e\x42\x30\xc4\x3c\xa7"
- "\x24\x17\x49\x3a\x69\xcb\x45\x66\x1e\x16\xe7\x22\xf3\x76\x72\x38"
- "\x9a\x37\x4a\xc8\x45\xe6\xf6\xba\x3b\xb8\x88\x24\xb6\x16\x09\xb9"
- "\xc8\xdc\x2b\xf2\xb9\xc8\xbc\xde\xf2\xb8\x08\xc6\x9c\x18\x17\x99"
- "\x17\x6f\x8d\x39\x21\x17\x99\xb7\x4a\x9c\x8b\xcc\xdb\x2c\xe4\x22"
- "\xb8\x7e\x31\x2e\x32\xef\x98\xa0\x7e\x1b\x2e\x32\xef\x92\x90\x8b"
- "\x90\x72\x1c\x17\x99\xbf\x86\xd5\x73\xf1\xf2\xb9\xc8\xfc\x78\x69"
- "\x2e\x32\x7f\xae\x90\x8b\xcc\x1f\x41\x38\xc7\xfc\x02\xc2\x45\xe6"
- "\x4f\x22\xc7\x67\xc6\xf1\x8f\x73\x5c\x84\x1c\xe7\xb8\xc8\xfc\x42"
- "\x19\x79\x2e\x6f\x39\x6b\x71\x77\xde\x16\xe6\xb9\x2c\x39\x2e\x63"
- "\xc0\x50\xd7\x3b\x79\x2e\xfe\x7b\x52\x91\x3c\x17\x1e\xd3\xb9\x3c"
- "\xd7\x19\x26\x56\x71\x79\x2e\x3d\x93\xe7\xc2\x39\x2e\xfc\xae\xd4"
- "\x92\xe3\x32\xcf\xb7\x5d\x87\xbb\xd3\x2c\x3f\xc7\xc5\xbd\x2f\xfd"
- "\x36\x90\xe4\xb8\x2a\xef\xe4\xb8\xf0\x78\x6e\xaa\xb3\xcd\x71\xe1"
- "\x71\x9c\xcb\x71\xfd\xdc\xc2\x39\xae\x05\x93\x95\x8d\xeb\x0b\x26"
- "\xb5\x8f\xf7\xda\xf7\xda\x3a\xdc\xf9\x87\x49\xee\x67\xe1\x2d\x65"
- "\xef\xb5\x17\xd6\xb6\x0f\xbf\xdc\x6b\x73\xbf\x17\x6c\x21\x7e\x59"
- "\xb4\x56\x99\x5f\x16\xad\x69\x1f\x7e\xb9\xd7\xe6\x81\xbc\x1f\x42"
- "\xfc\x92\xd2\x47\x99\x5f\x52\x9c\xd8\xff\x72\x45\x30\xa7\x99\x57"
- "\x04\xf3\x35\x73\xc9\x30\xbe\x66\x4e\x69\x66\xff\xcb\x0f\xd2\x38"
- "\xcd\xbc\xe4\x1c\xe1\xa1\x4b\x8a\x09\x0f\x5d\xc2\xbc\x9f\x5a\x1c"
- "\x86\x18\xad\x6c\xc4\xba\xf9\xdd\x7a\x6a\xd7\xe5\x22\xca\xb8\x94"
- "\xe8\xe5\x72\x63\x29\x3a\x66\xa8\x47\x1f\xce\x43\xae\xab\xae\x22"
- "\xd7\x2f\x6e\xd4\x53\x5e\x71\xc8\x1d\xc6\x24\xb0\x59\x29\xf0\x98"
- "\x8d\x28\x31\x05\x6b\xe9\x34\x53\x79\xa2\x81\xa7\xa5\x53\xa7\x72"
- "\x3a\x1a\xca\x25\xd6\xa3\x7f\xbe\x5b\x44\x61\xbd\xdc\x94\x3d\x4d"
- "\xdd\xd4\x6f\x28\xd9\xc7\x8a\x9f\xcf\x87\x7b\x6b\xdf\x12\xe6\xf3"
- "\x1b\xb3\xa7\x79\x37\xec\x1c\xea\xca\xec\xa1\xd9\x87\xcb\xe9\xcb"
- "\xd9\x3f\xf3\x93\x46\xe4\x6d\xc9\xe7\x7f\x72\xcf\xe5\xf3\x17\x9d"
- "\x20\x18\x4d\x3b\xa2\x2c\x9f\x9f\x56\x22\xd4\xd0\x2b\x2e\xd8\x6a"
- "\xe8\x25\xfd\x1c\xd7\xd0\x4b\xc6\x28\xd3\xd0\x4b\x22\x1c\xd3\xd0"
- "\x4b\xf6\x58\x6b\xe8\x6d\x29\x58\x43\xa7\x18\x31\x8e\xc5\x35\x34"
- "\x39\x67\xab\x7d\x3e\x18\xc3\x69\x9f\x0f\x7a\xb5\x7f\x0d\xbd\xb4"
- "\x48\x5c\xe7\x2c\x3d\x42\x34\xf4\x92\xc2\x96\xd7\xd0\x4b\x0a\xc5"
- "\x35\xf4\x07\xcf\x11\xbd\xb1\xa4\xd0\xa2\x87\x39\x0d\x0d\xd7\x88"
- "\x6a\xe8\x0f\x66\x59\x5f\x43\x34\xf4\x92\xbd\x44\x43\x7f\xb0\x56"
- "\x5a\x43\x2f\xeb\x4b\x62\xd7\x07\x0d\x24\x76\x11\x9f\xda\x6a\xe8"
- "\x0f\x8e\x37\xaf\xa1\x09\x86\x98\xe7\x94\xd4\xd0\xcb\x7a\xd8\x6a"
- "\xe8\x14\x89\xfd\x33\x97\x5f\xe7\x70\xb4\x3c\x53\xa8\xa1\x97\x4d"
- "\xbd\x3b\x34\xb4\x24\xb6\x8a\x84\x1a\x7a\xf9\x40\xf9\x1a\x7a\xf9"
- "\x74\x79\x1a\x1a\x63\x4e\x4c\x43\x2f\xdf\xc3\xe2\x67\xaf\xb8\x86"
- "\x5e\x7e\x4c\x5c\x43\x2f\xbf\x20\xd4\xd0\xb8\x7e\x31\x0d\xbd\xa2"
- "\xab\xa0\x7e\x1b\x0d\xbd\xa2\x9f\x50\x43\x93\x72\x9c\x86\x5e\x51"
- "\x41\x62\x68\x8a\x82\xfd\x33\x57\xec\x91\xd6\xd0\x2b\x0e\x08\x35"
- "\xf4\x8a\x35\x44\x2b\xaf\xa8\x22\x1a\x7a\x45\x01\x39\x9e\x52\xc0"
- "\x3f\xce\x69\x68\x72\x9c\xd3\xd0\x2b\x6a\x65\x68\x68\x4d\x0b\x69"
- "\x68\xf7\xbb\x4b\x43\xff\xd3\xd0\x3e\x34\xf4\xca\xcd\xca\x34\xf4"
- "\xca\x02\x07\x35\x81\x77\x33\x9a\xc0\xf5\xbe\x26\xe0\xf3\xad\xff"
- "\x71\x27\x7c\x6b\xf5\x10\x65\x9a\x60\x75\x70\x7b\xf0\xcb\xbd\xe5"
- "\x93\x95\xec\x7c\xfd\x0f\x8f\x29\xf3\xc9\x87\xa5\xf7\xf5\x73\x6b"
- "\xf8\x65\x75\x1a\xf1\xcb\xda\xe9\xca\xfc\xb2\x36\x5a\xb9\x7e\xce"
- "\xce\xe3\xf4\x73\x76\x1e\x5f\x3f\x7f\x2f\x78\xe7\x9c\x3e\xc4\xbe"
- "\x7e\x5e\x5f\xc5\xe9\xe7\xcc\xe1\x84\x83\x66\xb2\x73\x4a\x32\x98"
- "\x9c\xfa\xa2\x7d\x44\x3f\xdf\xc6\xfa\xf9\x22\xe8\xe7\x19\x51\x94"
- "\x91\xfd\x76\x04\x9e\xbf\x76\x0c\x34\x30\xd6\xcc\xe5\xc9\xf0\x77"
- "\x92\x01\x7d\x38\x1b\xb9\xae\x06\xed\xbb\x1d\xc6\xca\xed\xf3\x0c"
- "\xd4\xca\x77\x61\x9c\xa9\xdc\x89\xbc\x62\x40\x57\xdf\xc0\xba\xfa"
- "\x30\x68\xe6\xe5\xac\xae\xce\x98\x5a\x9e\xc4\xd7\xd5\xe9\x07\x18"
- "\x5d\x6d\x20\x73\xe3\xca\x93\x40\x57\xc3\xfd\xf0\xb7\x28\xf8\xba"
- "\xba\x01\x74\x73\x23\xe8\xe6\x8c\xcb\x56\x1a\x7b\x86\xad\xc6\x6e"
- "\xf0\x99\xa6\xa9\xef\x37\xd4\x1d\x6b\xec\xdb\x5b\xef\x6b\x6c\x5b"
- "\x8d\xbd\xc6\x9b\xe0\x38\xa3\x9f\x32\x8d\x9d\x11\x20\xd4\xd8\x39"
- "\x2f\xdb\x6a\xec\x8c\x4c\xc7\x35\x76\xc6\x3e\x65\x1a\x3b\x63\xaf"
- "\x63\x1a\x3b\xd3\xc7\x5a\x63\xff\x8d\x79\x4f\x9d\x1e\x82\xb1\x2e"
- "\xae\xb1\xc9\x39\x5b\x6d\xb4\x7e\x1f\xa7\x8d\xd6\x2f\x69\xff\x1a"
- "\x7b\xbd\x9f\xb8\x0e\x5a\xdf\x8f\x68\xec\x4c\xef\x96\xd7\xd8\x99"
- "\xde\xe2\x1a\x7b\x3d\x3b\xff\x2d\xd3\xdb\x56\x63\xc3\x35\xa2\x1a"
- "\x7b\xfd\x49\xeb\x6b\x88\xc6\xce\xd4\x10\x8d\xbd\xfe\xba\xb4\xc6"
- "\xfe\x68\x2d\x89\x6f\x1f\x4d\x26\xf1\x8d\xf8\xd4\x56\x63\x7f\x34"
- "\xb8\x79\x8d\x4d\x30\xc4\x3c\xa7\xa4\xc6\xfe\x68\xb1\xad\xc6\x4e"
- "\x0f\x16\xd7\xd8\xd9\xe3\x39\x1c\x65\xdd\x12\x6a\xec\x8f\x8a\xef"
- "\x0e\x8d\x2d\x89\x2d\x3f\xa1\xc6\xce\xca\x96\xaf\xb1\xb3\x8e\xc8"
- "\xd3\xd8\x18\x73\x62\x1a\x3b\xdb\x87\xc5\x8f\x46\x5c\x63\x67\x0f"
- "\x14\xd7\xd8\xd9\x2f\x0b\x35\x36\xae\x5f\x4c\x63\x67\xcf\x15\xd4"
- "\x6f\xa3\xb1\xb3\x33\x85\x1a\x9b\x94\xe3\x34\x76\x4e\x10\x89\xa1"
- "\x6b\xcf\xc9\xd7\xd8\x39\x3e\xd2\x1a\x3b\xa7\x97\x50\x63\x67\x1b"
- "\x88\x96\xce\x19\x41\x34\x76\x8e\x2b\x39\xbe\x56\xcf\x3f\xce\x69"
- "\x6c\x72\x9c\xd3\xd8\x39\x91\xf2\xde\x53\x3b\xb5\x1f\x96\x6b\xdb"
- "\xaf\xc7\x68\xa9\xfd\xb0\x2c\xef\xaa\xff\xe8\xf5\x18\xb9\x9d\x94"
- "\xe9\xec\x5c\xf7\xfb\x7a\xae\xa5\x75\x43\x4e\x1c\xe1\x5b\x1b\x14"
- "\xee\x7f\xbb\xc1\xee\xfe\xb7\xf7\xf5\x9c\x52\xbf\xe4\x46\x10\xbf"
- "\x7c\x32\x58\x99\x5f\x3e\x09\x52\xae\xe7\x3e\x1b\xc1\xe9\xb9\xcf"
- "\x46\x48\xbf\x0f\xcd\xeb\x64\x5f\xcf\x15\x64\x70\x7a\x2e\xff\x3a"
- "\xe1\x3b\xf9\x27\x09\xdf\xc9\xcf\x6e\xb9\xf7\xa1\xf9\x9e\xc2\xf7"
- "\xa1\x79\xb3\xee\xbf\x0f\x6d\x0b\xad\xb6\xa1\x8a\x60\x74\xe3\x29"
- "\x65\x5a\x6d\x63\xa5\x50\xab\x7d\x76\xcb\x56\xab\xe5\x3f\xe7\xb8"
- "\x56\xcb\x9f\xaa\x4c\xab\xe5\x47\x39\xa6\xd5\xf2\x0f\x89\xbf\x0f"
- "\xcd\xf3\x90\x7e\x1f\x4a\xce\xd9\x72\xec\x82\xa9\x1c\xc7\x2e\xe8"
- "\xd7\xfe\xb5\xda\xa6\x0a\x71\x3e\xbd\xe9\x14\xd1\x6a\xf9\x45\x2d"
- "\xaf\xd5\xf2\x8b\xc4\xb5\x5a\xc1\x28\xc2\x6b\xf3\x8b\x6c\xb5\x1a"
- "\x5c\x23\xaa\xd5\x0a\x96\x58\x5f\x43\xb4\x5a\xfe\x61\xa2\xd5\x0a"
- "\x36\x4a\x6b\xb5\xcd\x43\x48\xec\xda\xdc\x89\xc4\x2e\xe2\x53\x5b"
- "\xad\x56\x70\xae\x79\xad\x46\x30\xc4\x3c\xa7\xa4\x56\xdb\xdc\xd7"
- "\x56\xab\xe5\xb9\x8b\x6b\xb5\xcf\x5c\x38\x1c\x7d\xba\x59\xa8\xd5"
- "\x36\xcf\xba\x3b\xb4\x9a\x24\xb6\x2a\x84\x5a\xed\xd3\x30\xf9\x5a"
- "\xed\xd3\xb9\xf2\xb4\x1a\xc6\x9c\x98\x56\xfb\xf4\x10\x8b\x9f\xc3"
- "\xe2\x5a\xed\xd3\x33\xe2\x5a\xed\xd3\x5b\x42\xad\x86\xeb\x17\xd3"
- "\x6a\x9f\xf5\x16\xd4\x6f\xa3\xd5\x3e\x7b\x4e\xa8\xd5\x48\x39\x4e"
- "\xab\x7d\xa6\x27\x31\xf4\x93\x3d\xf2\xb5\xda\x67\x87\xa4\xb5\xda"
- "\x67\x47\x84\x5a\xed\xb3\x3c\xa2\xc9\x3e\xab\x25\x5a\xed\xb3\x42"
- "\x72\xfc\x93\x42\xfe\x71\x4e\xab\x91\xe3\x9c\x56\xdb\xe2\x2a\x4f"
- "\xab\x39\xbe\x5f\xd6\x1f\x3f\xa7\x58\x7d\x8f\xcd\x29\xde\xba\x47"
- "\x99\x4e\xdb\x5a\x78\x5f\x13\xb4\x86\x26\xd8\xa2\x21\x7c\xeb\xf3"
- "\x97\x95\x69\x82\xcf\x47\x28\xd7\x04\xbb\x27\x71\x9a\x60\xf7\x24"
- "\x69\x4d\xb0\xad\x97\x7d\x4d\xb0\x63\x0b\xa7\x09\xfe\xee\x46\xc6"
- "\xd5\x2f\x2e\x91\x71\xf5\x8b\xed\x2d\xa7\x09\xbe\xe8\x2d\xd4\x04"
- "\xdb\x96\xdf\xd7\x04\x6d\xa1\x09\xb6\xd6\x13\x8c\x6e\xbf\xa2\x4c"
- "\x13\x6c\xaf\x11\x6a\x82\xc2\x4e\xb6\x9a\xe0\x8b\x31\x8e\x6b\x82"
- "\x2f\xe6\x2a\xd3\x04\x5f\x24\x39\xa6\x09\xbe\x38\x29\xae\x09\xb6"
- "\x69\xa5\x35\x01\x39\x67\xcb\xe5\x76\xcc\xe5\xb8\xdc\x8e\xb0\xf6"
- "\xaf\x09\xfe\x5e\x25\xce\xdb\xfe\x7e\x85\x68\x82\x2f\x4e\xb4\xbc"
- "\x26\xf8\xe2\x84\xb8\x26\xd8\x31\x95\xf0\xa7\x2f\x4e\xd8\x6a\x02"
- "\xb8\x46\x54\x13\xec\xc8\xb6\xbe\x86\x68\x82\x2f\x2a\x89\x26\xd8"
- "\xb1\x47\x5a\x13\xec\x1c\x45\x62\xd7\xce\x5e\x24\x76\x11\x9f\xda"
- "\x6a\x82\x1d\xb7\x9a\xd7\x04\x04\x43\xcc\x73\x4a\x6a\x82\x9d\xcf"
- "\xd9\x6a\x82\x6d\xbe\xe2\x9a\x60\xb7\x0f\x87\xa3\x5d\xfb\x84\x9a"
- "\x60\xe7\xf2\xbb\x43\x13\x48\x62\xab\x4a\xa8\x09\x76\x8d\x97\xaf"
- "\x09\x76\xad\x92\xa7\x09\x30\xe6\xc4\x34\xc1\x2e\xf6\xfd\x1f\xc1"
- "\x8b\xad\x26\xd8\x75\x5d\x5c\x13\xec\xee\x24\xd4\x04\xb8\x7e\x31"
- "\x4d\xb0\x7b\xb0\xa0\x7e\x1b\x4d\xb0\x7b\x8c\x50\x13\x90\x72\x9c"
- "\x26\xd8\x5d\x4b\x62\xe8\xe7\xc5\xf2\x35\xc1\xee\x93\xd2\x9a\x60"
- "\xf7\x19\xa1\x26\xd8\xcd\x72\xff\x42\x77\xa2\x09\x76\x1f\x26\xc7"
- "\x3f\x3f\xcc\x3f\xce\x69\x02\x72\x9c\xd3\x04\x85\x9a\xfb\xfb\x69"
- "\xdd\x4d\xfb\x69\xed\x39\xa2\x4c\x17\xec\x29\x51\xce\x3f\x0f\xec"
- "\xe7\xf8\xe7\x81\xfd\x7c\xfe\x29\xdc\xd7\xe2\xcb\x8d\xf6\xf9\xe7"
- "\x57\x88\xe3\x9f\xfb\xa6\x92\x18\xbe\x6f\x38\x89\xe1\xfb\x98\xbd"
- "\xf9\xe4\xed\xa7\xb5\x77\xb1\x70\x3f\xad\x2f\xaf\xdc\xdf\x4f\xab"
- "\xb5\xb8\x65\x61\x00\xe1\x96\x7b\x5f\x56\xc6\x2d\xf7\x8e\x10\x72"
- "\xcb\xaf\xa7\xdb\x72\xcb\xbd\x3b\x1d\xe7\x96\x7b\x8f\x2b\xe3\x96"
- "\x7b\x2b\x1c\xe3\x96\xfb\x06\x8a\xef\x61\xf1\x65\x81\xf4\x7e\x5a"
- "\xe4\x9c\x2d\x27\xf8\x07\x6f\x5f\xfd\x7f\x6c\x6c\xff\xdc\xf2\x1f"
- "\x3a\xf1\xf1\xff\x1f\x2f\x13\x6e\xb9\x2f\xb0\xe5\xb9\xe5\xbe\x40"
- "\x71\x6e\xf9\x8f\x6f\xc8\x38\xbc\x2f\xc8\x76\x0f\x0b\xb8\x46\x94"
- "\x5b\xfe\x83\xdd\xff\x7e\x5f\xa0\x90\x5b\x92\x3a\x20\x0e\x79\x4a"
- "\x73\xcb\xaf\xb6\x93\xb8\xf4\xd5\x02\x12\x97\x88\x4f\x6d\xb9\xe5"
- "\x57\x63\x9a\xe7\x96\x04\x43\xcc\x73\x4a\x72\xcb\xaf\x36\xd8\x72"
- "\xcb\x2f\xf3\xc4\xb9\xe5\x81\x59\x1c\x8e\x0e\x74\x15\x72\xcb\xaf"
- "\xce\xdd\x1d\xdc\x52\x12\x5b\x3a\x21\xb7\xdc\xbf\x47\x3e\xb7\xdc"
- "\x7f\x41\x1e\xb7\xc4\x98\x13\xe3\x96\x07\x06\x5a\x63\x4e\xc8\x2d"
- "\x0f\x8c\x12\xe7\x96\x07\xa6\x0b\xb9\x25\xae\x5f\x8c\x5b\x1e\xc8"
- "\x14\xd4\x6f\xc3\x2d\x0f\xec\x14\x72\x4b\x52\x8e\xe3\x96\x5f\x47"
- "\xb0\xe3\xdd\x70\xf9\xdc\xf2\xeb\x81\xd2\xdc\xf2\xeb\x21\x42\x6e"
- "\xf9\xb5\x07\xe1\x90\x5f\x47\x13\x6e\xf9\xb5\x96\x1c\xff\x72\x18"
- "\xff\x38\xc7\x2d\xc9\x71\x8e\x5b\x7e\x9d\x24\x6f\xfd\x4d\x8b\xe4"
- "\x9b\xdb\x68\xfd\x4d\x4b\xe5\x9b\xdb\xcb\xfa\x9b\x83\xbd\x95\xf1"
- "\xca\x83\xda\xfb\xf3\x82\x5a\x3a\xd7\xfc\xf5\x4a\xc2\xb5\xbe\xd9"
- "\xa7\x2c\xd7\xfc\xcd\x5e\xe5\x5c\xbf\xb8\x8a\xe3\xfa\xc5\x55\xd2"
- "\xeb\x09\xbe\x5d\x65\x9f\xeb\x7f\x17\xc0\x71\xfd\x43\xec\x7c\xdb"
- "\x43\xb3\xc8\x98\x7a\x68\xa0\x92\xf5\x04\xab\x6f\x20\xd7\x0f\xad"
- "\xd7\x13\x9c\xf8\x86\xac\x27\x98\x6d\xbd\x9e\xa0\x68\xbb\x70\x3d"
- "\xc1\x3f\x3b\x49\xad\x27\xc0\xb9\xe7\xa6\x9d\x43\x99\xb5\x04\xa2"
- "\xeb\x08\x26\xb6\xfc\x3a\x02\xac\x13\x3e\x01\xdc\x62\xad\x80\xe3"
- "\xcd\xbd\xa5\x15\x0e\xc6\x10\xfc\x16\xcd\x55\xa6\x15\x8a\x92\x84"
- "\x5a\xe1\xfb\x4c\x5b\xad\x50\x74\xca\x71\xad\x50\x64\x52\xa6\x15"
- "\x8a\x8c\x8e\x69\x85\x43\x93\xc5\xd7\x11\x7c\xbb\x46\x7a\x1d\x01"
- "\x39\x67\xcb\xf1\xfe\x65\xe2\x38\xde\xbf\x8e\xb4\x7f\xad\xf0\xaf"
- "\x38\x71\x3e\xf7\xaf\xb9\x44\x2b\x1c\x9a\xd4\xf2\x5a\xe1\xd0\x24"
- "\x71\xad\xf0\xaf\x4b\x84\x57\x1d\x9a\x64\x9b\x87\x86\x6b\x44\xb5"
- "\xc2\x77\xbd\xac\xaf\x21\x5a\xe1\x50\x14\xd1\x0a\xdf\x0d\x91\xd6"
- "\x0a\xdf\x9d\x24\x71\xed\x3b\xf6\x1b\x93\xc4\xa7\xb6\x5a\xe1\xbb"
- "\xc5\xcd\x6b\x05\x82\x21\xe6\x39\x25\xb5\xc2\x77\xc5\xb6\x5a\xe1"
- "\xdb\x95\xe2\x5a\xa1\x78\x23\x87\xa3\xe2\xe7\x84\x5a\xe1\xb0\xe7"
- "\xdd\xa1\x15\x24\xb1\x15\x27\xd4\x0a\x87\xcf\xc8\xd7\x0a\xc5\x5d"
- "\xe5\x69\x05\x8c\x39\x31\xad\x50\x3c\x99\xc5\x4f\x94\xb8\x56\x28"
- "\x5e\x20\xae\x15\x8a\x33\x85\x5a\x01\xd7\x2f\xa6\x15\x8a\xbf\x11"
- "\xd4\x6f\xa3\x15\x8a\x4f\x09\xb5\x02\x29\xc7\x69\x85\xef\x17\x91"
- "\x18\xfa\xed\x40\xf9\x5a\xe1\xfb\xc9\xd2\x5a\xe1\xfb\xe9\x42\xad"
- "\xf0\x7d\x30\xd1\x04\xdf\x67\x10\xad\xf0\xfd\x48\x72\xfc\xdb\x40"
- "\xfe\x71\x4e\x2b\x90\xe3\x9c\x56\xf8\xbe\x40\xde\xdc\x14\xc7\xf3"
- "\xd0\x7f\xfc\xdc\x14\xf7\x7b\x6c\x6e\x4a\xc9\x28\x65\x5a\xa1\x64"
- "\xa4\x72\x5e\x5a\x11\xc9\xf1\xd2\x8a\x48\xe9\x39\x10\x47\x7a\xdb"
- "\xe7\xa5\xc7\x0a\x38\x5e\x5a\xea\x42\xe2\xf7\x0f\x17\x48\xfc\xfe"
- "\x61\xab\xa3\x73\x20\x56\xdf\x66\xb9\xa8\x65\x0e\xc4\x3c\x76\x0e"
- "\x04\xf0\x51\xc2\x3f\x7f\xe8\x25\x9c\x03\x71\x64\x95\xd4\x1c\x08"
- "\xd1\xb9\x0f\x56\x9c\xd3\xc2\x4f\x9d\x99\xfb\x70\x6f\x73\xce\xef"
- "\xf7\x12\xce\x79\xf4\x92\x32\xce\x79\xb4\x5a\xc8\x39\x8f\xbb\xd9"
- "\x72\xce\x1f\x46\x39\xce\x39\x7f\x98\xa5\x8c\x73\xfe\x90\xe8\x18"
- "\xe7\xfc\xe1\xb8\xf8\xdc\x87\x23\x7e\xd2\x73\x1f\xc8\x39\x5b\xae"
- "\x70\x8c\x97\x57\x3c\xf6\x5c\xfb\xe7\x9c\xa5\x7a\x71\x5e\x50\x7a"
- "\x89\x70\xce\x1f\x2a\x5a\x9e\x73\xfe\x50\x21\xce\x39\x8f\xb1\xe3"
- "\xff\x0f\x15\xb6\x9c\x13\xae\x11\xe5\x9c\xc7\x32\xad\xaf\x21\x9c"
- "\xf3\x87\x13\x84\x73\x1e\xdb\x29\xcd\x39\xcb\x5e\x26\x31\xab\xac"
- "\x07\x89\x59\xc4\xa7\xb6\x9c\xf3\xd8\xf5\xe6\x39\x27\xc1\x10\xf3"
- "\x9c\x92\x9c\xb3\x6c\x88\x2d\xe7\x3c\xa2\x15\xe7\x9c\x15\x5d\x39"
- "\x1c\x95\xef\x11\x72\xce\xb2\x25\x77\x07\xe7\x94\xc4\x96\x5e\xc8"
- "\x39\xcb\xc7\xc8\xe7\x9c\xe5\xcb\xe5\x71\x4e\x8c\x39\x31\xce\x59"
- "\x7e\x9c\xc5\xcf\x09\x71\xce\x59\x7e\x45\x9c\x73\x56\xb8\x09\x39"
- "\x27\xae\x5f\x8c\x73\x56\x0c\x14\xd4\x6f\xc3\x39\x2b\x46\x09\x39"
- "\x27\x29\xc7\x71\xce\x0a\x03\x89\xa1\x25\x47\xe4\x73\xce\x8a\xe3"
- "\xd2\x9c\xb3\xe2\x94\x90\x73\x56\xec\x20\xdc\xf2\xb8\x2b\xe1\x9c"
- "\x15\x45\xe4\x78\x49\x09\xff\x38\xc7\x39\xc9\x71\x8e\x73\x1e\xf7"
- "\xb6\xc7\x39\xe9\xac\x0e\xd5\x19\x94\xb9\x10\x7e\xfb\xe1\x39\x7b"
- "\xc0\xf8\x56\x04\x7f\x97\xc0\x38\xa5\x86\xbf\x2b\xa4\xb8\x8c\xc1"
- "\xa7\x43\xb5\x19\x78\x89\x19\xee\x53\x6e\xb8\x56\x54\xd4\xd3\x88"
- "\xc7\x93\x2c\x32\xbe\x74\xa8\xf6\x32\x76\x1c\x61\xa6\x63\x10\xed"
- "\x0d\x7f\x27\xc3\x31\x28\xdf\x05\xc6\x43\xed\x3c\xd4\xe5\x2a\x75"
- "\x7c\xaf\xa5\x1c\x3c\x73\x97\xf3\xd4\xf1\x59\xb8\x0e\x78\xd6\x22"
- "\x68\x8f\x56\xf2\x59\xa1\xae\xf0\xed\x0f\xa1\xc5\x46\xfa\xb7\xa2"
- "\x84\x1b\xa8\x8a\xfa\xb1\x93\x57\x4d\xc7\x11\x10\x87\x10\xe6\x88"
- "\x85\x3d\x0d\xae\xb8\xce\xa2\x84\x46\x38\x77\xbc\x06\x9f\x33\xc1"
- "\x33\xa6\xc4\x23\x2a\xfd\x46\x47\x77\xe0\x5c\x6e\xa9\xb5\x74\xf5"
- "\x4c\x23\x3c\x33\x8c\xaf\xff\x7c\xa8\xd2\x75\xf7\xc7\x95\xcc\xd8"
- "\x53\x56\x6b\x62\xea\xd0\x26\xe0\xe7\xf9\xd1\x33\x1f\xca\x8b\x3d"
- "\xc3\xf2\x5d\x28\xc0\xad\x2f\xad\x97\x37\xde\xfd\x18\x25\x65\x47"
- "\xaf\x25\x0f\xa1\xa2\x27\xc0\x76\x5a\x44\x89\x9d\x97\x79\x1f\x7b"
- "\xf3\x1f\xdc\x3f\xea\x4e\xd7\xa6\x6e\x40\xd4\x3a\x73\x47\xf7\xef"
- "\x20\x26\x6e\xca\xa1\x0d\x75\xab\xff\x1d\xa4\x77\x39\xb4\x0d\xdb"
- "\xfc\x03\x38\xbf\xae\x3b\x6d\xb8\xb9\x14\xe3\xe6\xdf\x23\x0f\xc1"
- "\xd8\x6e\xed\x8b\xd9\xd1\xf1\x53\xb5\x49\xb1\xf1\xd3\x67\xce\x4d"
- "\xd2\xf6\x89\xee\x8c\xc6\xcd\x9c\xa9\x8d\x9f\x9a\xb0\x40\xcb\x3f"
- "\xf3\x8c\x36\x3a\x76\xce\xd4\x69\x71\xd3\xfb\xc5\xbf\x9d\xd8\x19"
- "\x9e\x09\xf1\x9e\xc3\x1b\x3f\x8b\x79\xf5\xbf\x23\xf3\xd7\x23\xf4"
- "\x51\x37\xe4\x8a\x9f\x0b\xee\x77\x50\xef\xaa\xad\xc2\xf7\x4b\xcf"
- "\xa1\x6b\x29\x28\x93\x0a\x31\x6d\x5d\x4a\x47\x28\xfb\x63\xc9\x26"
- "\x78\xae\x7c\x78\x6e\x78\x46\xfc\xcc\xd5\x96\x67\xb6\x60\x22\x15"
- "\x63\x22\xe5\x06\x60\xf0\x44\x27\xaf\xfa\x8e\x2f\xd1\x74\x24\x6e"
- "\x5f\x2d\xf4\x15\x17\x38\xb6\x99\xd1\x0d\xd9\x1d\xaa\xeb\x56\x9f"
- "\xf0\xb3\x60\xcc\x9c\x15\x9e\x46\xe7\x74\x28\x04\x5e\xe9\x52\x47"
- "\xc7\x3c\x0f\xd8\xc4\xd7\xcf\x1a\x80\x50\x1a\x5d\x17\xc9\x7c\x1b"
- "\x83\xae\x03\x0c\x13\x9c\xc2\xb9\x93\xc3\x6e\x52\x28\x14\xea\x88"
- "\xd1\xa3\xf8\x1a\x5c\x87\x1e\x8e\x61\x9b\x9b\x0b\xe2\xd5\xe3\xfd"
- "\x51\xda\xe3\x69\x28\xad\x0e\x5f\xb3\xa5\x7f\xb5\x57\x12\x72\x09"
- "\x4f\xa6\xcf\x42\xdc\x71\xa1\x7b\xc7\xab\xe9\xad\xfd\xab\xf5\xd4"
- "\x89\x91\xe6\xec\xf0\x34\x68\x4f\x0d\xd4\x53\xa8\x47\x4d\x15\xb8"
- "\x9e\x75\x39\x8c\xed\x6b\x70\xdb\xc1\x3e\xa0\x7f\xe8\x22\x7a\x29"
- "\xdb\x87\x32\xfc\xb4\xe6\x8c\xd9\x51\xe5\xae\xb7\x51\xb8\x91\x6e"
- "\xa2\x33\xfd\xb4\x65\xb5\xb5\x10\xd3\x12\xdf\xa6\x3b\xff\x3b\xd6"
- "\xcb\x18\x3b\x7d\x53\x37\xe8\x8b\x99\xb3\xa3\xe8\xcc\x67\x27\x8d"
- "\xef\x8b\xd4\x75\xab\x4f\x7a\x58\xec\x09\xb6\x74\x95\x87\xa3\x93"
- "\x6a\xdc\x26\x8c\x07\x78\x1e\x16\x0f\x27\x27\x1d\x4a\xb2\xc5\xc3"
- "\x9d\xbe\x99\xf3\xbc\xc1\x48\x47\xbe\xd4\x94\x15\xea\x4f\x7b\x87"
- "\x7a\xa7\x5c\x40\x1d\xb0\x6d\xcb\x40\x0b\xa4\xcf\x43\x9a\xb5\x6f"
- "\x21\xed\x94\x05\x6a\x64\xc8\x0e\x55\x7b\x2d\x49\x73\x01\x9b\x50"
- "\x10\x5f\x02\x21\x66\x06\x36\x75\x0f\x4f\x5b\x34\x1d\x51\x3b\xcf"
- "\x17\x52\x98\x3f\xe3\x79\x2b\x17\xa9\xff\xf4\xca\x87\xeb\xe8\x6b"
- "\x91\x08\xfb\x83\xf1\xc5\xb5\x18\x34\x2a\x16\xc6\xe7\x77\x99\xf3"
- "\x63\x36\x42\x9d\x32\xdb\xc5\xf0\x5f\x13\xf8\x6a\x00\xf8\xa9\xbc"
- "\xca\xc4\xd4\xc9\xf8\x2a\x8e\xf3\xd5\x37\xf0\x1c\x9c\xbf\x4e\x56"
- "\x62\xbf\x8a\xb7\x39\x34\x91\x6d\xf3\x36\x68\x73\x96\x9d\x36\x67"
- "\x90\x36\xbb\xdd\xb0\xdf\xe6\x9f\xba\xda\x6f\xf3\x4f\xc3\xe5\xb7"
- "\xf9\x3f\xa7\xe5\xb7\xf9\x3f\xa5\x76\xda\xcc\xfa\x59\x07\x7e\xd6"
- "\xd9\xf1\xb3\x8e\xf5\xf3\x03\xe7\xed\xb7\xb9\xd2\xcd\x7e\x9b\x2b"
- "\x87\xc8\x6f\xf3\x4f\x15\xf2\xdb\xfc\x53\x91\x74\x9b\x75\xac\x9f"
- "\x75\xe0\x67\x9d\x1d\x3f\xeb\x58\x3f\x77\xfd\xb1\x99\x36\x37\xd8"
- "\x6f\xf3\xa9\x7e\xf2\xdb\x5c\x79\x58\x7e\x9b\x2b\xf7\xda\x69\x33"
- "\xeb\xe7\x30\xf0\x73\x98\x1d\x3f\x87\xb1\x7e\x7e\x7a\xb5\xfd\x36"
- "\x9f\xba\x62\xbf\xcd\x3f\xf7\x96\xdf\xe6\x53\xfb\xe5\xb7\xf9\xd4"
- "\x36\xe9\x36\x87\xb1\x7e\x0e\x03\x3f\x87\xd9\xf1\x73\x18\xeb\xe7"
- "\x37\x87\xda\x6f\xf3\xcf\xe7\xec\xb7\xf9\xbf\x3e\xf2\xdb\xfc\xf3"
- "\x0e\xf9\x6d\xfe\x39\x4f\xaa\xcd\x8d\x10\xb7\x3d\xa0\x2d\x4d\x3f"
- "\x45\xbe\x64\xf2\x0e\xf5\xf5\xa8\x42\x54\xde\x52\x73\x8c\x57\x35"
- "\xea\x04\x6d\x8b\xa1\x73\xc6\x46\xe0\x7f\xcd\xde\xa1\x9a\x46\xef"
- "\x50\xff\x86\xee\x1d\x0a\xdf\x9f\x8c\x3a\x60\x3e\xbe\xca\x8c\x34"
- "\xe6\xac\x50\xef\x35\x63\x91\x36\xd5\x80\xd4\x65\x29\x7a\x94\x92"
- "\x48\x1b\xca\xd0\x39\xe4\x59\x8d\xb5\xe7\xcf\xa8\xb4\xa6\x04\x25"
- "\xcc\xa6\xe9\x8b\xd4\xe9\xa9\x38\x6f\x02\x3c\x39\x2d\xe3\x3f\x48"
- "\x0b\xf7\x08\xcc\x87\x1f\xae\xc7\x6b\x24\x8c\x9f\x39\x63\xc7\x6e"
- "\x4a\x41\x9a\x6f\xdf\xad\x46\xf8\xf8\x46\xf8\x99\x72\xc2\xd3\x52"
- "\x26\x23\x6a\xd7\x8d\x4a\x8a\x8c\xcd\xa7\xfb\x59\x8f\xcd\x23\xa7"
- "\x82\x2d\xa7\x31\xe7\x16\xe4\x8d\x95\x6b\xcb\xff\xd6\x5b\xc6\x6e"
- "\xc6\x96\xa7\x4d\x64\xbc\xb7\x1a\xbb\xbf\x85\xfb\x73\xb6\xfc\x6f"
- "\x35\xb6\x25\x9d\x15\x1a\x58\x5e\xdd\x88\x75\x93\xfa\x62\x32\xa2"
- "\xe0\x78\x6e\x59\xe2\x0d\x24\x6e\xe3\xd0\x44\x9e\x8d\xf3\x3c\xaa"
- "\xdc\x6e\x48\xd8\x38\x17\x6c\xbc\x4d\xc4\xc6\x59\x8e\xd9\xf8\x4c"
- "\xb1\xf3\x36\x3e\x93\x29\x6d\xe3\x33\x67\xe4\xdb\xf8\xcc\x24\xf9"
- "\x36\x3e\x33\x92\xb5\x71\xa1\xd0\xc6\xa7\x8d\x76\x6c\xcc\xc3\xb1"
- "\x0e\x70\xfc\xc0\x79\x71\x1b\xeb\x00\xc7\x3a\x11\x1c\xeb\x1c\xc4"
- "\xf1\xd9\xbe\xce\xdb\xf8\x97\x5b\xd2\x36\x3e\x1b\x26\xdf\xc6\xbf"
- "\x14\xc9\xb7\xf1\x2f\x85\xc4\xc6\x3a\x2b\x1c\xff\x12\x25\x6d\x63"
- "\x1d\x0f\xc7\x3a\xc0\x71\xd7\x1f\x25\x6c\x0c\x38\xd6\x89\xe0\x58"
- "\xe7\x20\x8e\xf5\x6b\x9d\xb7\xb1\xfe\x0d\x69\x1b\xeb\xb7\xca\xb7"
- "\xb1\xde\x4f\xbe\x8d\xf5\xde\xac\x8d\xad\x70\x7c\xf6\xb0\x1d\x1b"
- "\xf3\x70\x1c\x06\x38\x7e\x7a\xb5\xb8\x8d\xc3\x00\xc7\x61\x22\x38"
- "\x0e\x73\x10\xc7\xe7\xae\x3b\x6f\xe3\x73\xdf\x48\xdb\xf8\x7c\x27"
- "\xf9\x36\x3e\xb7\x52\xbe\x8d\xcf\x25\x13\x1b\x87\x59\xe1\xf8\x9c"
- "\xbf\xb4\x8d\xc3\x78\x38\x0e\x03\x1c\xbf\x39\x54\xc2\xc6\x80\xe3"
- "\x30\x11\x1c\x87\x39\x88\xe3\x5f\xc7\x3b\x6f\xe3\x5f\x7b\x4b\xdb"
- "\xf8\xd7\x78\xf9\x36\x3e\x5f\x23\xdf\xc6\xe7\x4f\xb3\x36\xb6\xc2"
- "\xf1\xf9\x35\x52\x36\x6e\x02\x0d\xe8\x09\x36\xf6\xac\x41\xd4\x46"
- "\x6c\xdb\x4a\x62\x5b\x53\xf7\xb1\x11\x1b\x29\x73\x0c\xb6\x09\x93"
- "\x03\xfa\x5d\xd3\xc5\x94\x15\xea\x4b\x53\xd0\xa6\x14\x9c\x77\xfd"
- "\xf5\xa4\x71\x29\xea\xa2\x4d\xc1\xf9\xdf\x0b\xcc\xfc\x58\x6d\xca"
- "\x8a\x33\x70\x3f\x15\xce\x7b\x19\xb3\xdd\x32\x4c\x3e\x2f\x44\xc1"
- "\x39\x4f\xba\xcf\x40\x04\xda\x2b\x90\x7e\x4f\xe3\x5d\x5e\x53\x08"
- "\xf6\x39\x8a\xca\x2a\xbf\x46\xe6\xee\x63\xc7\x0e\x30\x22\x7f\xfa"
- "\x77\x7f\xef\xd2\x24\x3d\x32\xbd\xad\xf1\x28\x4f\x2e\x41\xe5\xc9"
- "\x5f\xa2\xf0\x6a\xfa\x36\xfd\xab\xbf\x47\x93\x4f\x64\xae\xc9\x67"
- "\x6c\xa0\x29\x7b\x9a\xbf\xd1\x27\x72\xe5\xce\x79\x7a\xca\xa3\x1e"
- "\xf9\xc7\x55\xd1\x74\xfa\x34\xe4\x9a\x7e\x1e\xb9\xaf\x9b\x86\x3c"
- "\xd6\x9d\x47\xea\xd2\xaa\x4a\x74\xec\x72\x09\x3a\x76\xe3\x14\x3a"
- "\x76\x1b\x7e\x8d\xf0\x33\xc3\x2f\xed\x14\xf8\x1a\xa1\x51\x57\x10"
- "\xfe\xae\xa8\xe1\xc9\xd3\xc8\xbb\xd4\x58\x89\xf0\x9a\xde\xab\x54"
- "\xd5\x76\x8f\x28\xe4\x4d\xff\xaa\x41\xf4\xdb\x1a\x0a\xce\xb9\xe2"
- "\xe3\xe5\x46\x03\x2a\xad\xaa\xc7\xe7\x57\xc2\x79\xd7\xd4\x2a\xa8"
- "\xdf\x5c\x82\xbf\x1b\x6a\x28\x4d\x3b\x82\x8c\x99\xfb\xf0\xb8\xe7"
- "\x4f\x77\x7f\xde\x90\x01\xa6\x36\xd3\x9a\x47\x08\x0e\x2e\x1c\xca"
- "\x37\xcb\xf5\x75\x15\xd9\xff\xe6\x3d\x4d\x37\xb0\x73\x4f\xf3\x7b"
- "\x91\xea\xd1\xa7\xce\xd2\x78\x8e\x1f\xce\x25\x94\xd5\x1e\x45\xf8"
- "\x5d\x53\xf8\x02\x84\x46\x9a\x10\xc2\xb6\x28\x4f\xae\x46\xa3\x13"
- "\x91\x17\xce\x3f\x9b\x7f\xf7\xef\x56\x5e\x65\x40\x8b\x8d\xf0\x8c"
- "\x57\xeb\xef\x3c\x63\xd9\xb2\x32\x04\xe7\x7a\x96\xc5\xe8\x91\x47"
- "\x22\x52\x63\xfb\x1a\xb3\x42\x35\xa3\xa1\xff\x24\xd4\xd2\x34\xb6"
- "\x2d\xb6\x29\xb6\x2f\xae\xcf\x62\xf3\xf2\x68\x03\x4a\xad\x47\xea"
- "\xf2\x14\xf8\x37\x99\x36\x94\xa3\xeb\x08\x9e\xf1\x20\xdd\x75\x5f"
- "\x1a\xe0\x62\x1c\xc6\x82\x9e\xfa\xb5\x14\xfc\xdf\x4d\x02\x53\x59"
- "\x04\x53\x6e\x37\x1c\xc0\x54\x1e\x87\xa9\x8b\x7d\x39\x4c\x55\xbb"
- "\x49\x63\xea\xb7\xa9\x2c\xa6\x0a\xdb\x27\xa6\x2e\x9a\xec\x63\xea"
- "\xe2\x69\x3b\x98\xda\x46\x77\x0f\x4d\x14\x62\xaa\xda\x47\x3e\xa6"
- "\x7e\x0b\x68\x43\x4c\xe5\x2a\xc3\xd4\x6f\x6a\x21\xa6\x2e\x6a\xa5"
- "\x31\xa5\x63\xe3\xd4\x03\xe7\x9b\xc7\x94\x8e\x17\xa7\xaa\x17\x73"
- "\x98\xba\xfc\x86\x34\xa6\x2e\xed\x23\x98\xd2\xb5\xd3\x38\x75\x69"
- "\x8c\x7d\x4c\x5d\x0a\x94\xc6\x94\x0e\xe2\x54\xa8\x55\x9c\xba\x1c"
- "\x2b\x1f\x53\x97\xd2\xda\x0e\x53\x3a\x85\x71\xea\x52\xb4\x10\x53"
- "\xd5\x49\x76\x30\xc5\xc6\xa9\xae\x3f\x3a\x80\x29\x5e\x9c\xba\x7c"
- "\x9c\xc3\x54\xcd\x4e\x69\x4c\xd5\x74\x62\x31\xd5\x4e\xe3\xd4\xef"
- "\x5b\xed\x63\xea\xf7\x65\x76\x30\x05\x71\x4a\x67\x15\xa7\x6a\xbe"
- "\x91\x8f\xa9\xdf\x4f\xb4\x21\xa6\x14\xc6\xa9\xdf\xf7\x0b\x31\x75"
- "\xb9\x44\x1a\x53\x61\x6c\x9c\x7a\x7a\x75\xf3\x98\x0a\xe3\xc5\xa9"
- "\x2b\x7d\x38\x4c\x5d\x73\x91\xc6\xd4\xd5\xc9\x04\x53\x61\xed\x34"
- "\x4e\x5d\x69\xb0\x8f\xa9\x2b\x95\xd2\x98\x0a\x83\x38\xa5\xb3\x8a"
- "\x53\xd7\xba\xca\xc7\xd4\x55\xff\xb6\xc3\x54\x98\xc2\x38\x75\xd5"
- "\x43\x88\xa9\x2b\xbe\x76\x30\xc5\xc6\xa9\x37\x87\x3a\x80\x29\x5e"
- "\x9c\xba\xb6\x80\xc3\xd4\xf5\xf1\xd2\x98\x32\xec\x61\x31\xd5\x4e"
- "\xe3\x94\x61\x94\x7d\x4c\x19\x02\xec\x60\x0a\xe2\x54\x98\x55\x9c"
- "\xba\x3e\x5d\x3e\xa6\x0c\x8b\xda\x10\x53\x0a\xe3\x94\x21\x4a\x88"
- "\xa9\x6b\x89\x52\x98\x6a\xc4\xba\xcf\x05\x30\x15\x03\xba\x0f\x30"
- "\xe4\x55\x41\x30\xd5\x04\x98\xfa\x84\x8f\xa9\xff\x5a\xeb\xbe\xeb"
- "\xc7\xcc\x77\x30\x75\xf3\x94\x35\xa6\xcc\x80\xa9\x26\x06\x53\x37"
- "\xae\x5b\x74\x5f\x79\x4d\x01\xf8\xea\x32\x2a\x8f\x00\x3c\xe5\xb0"
- "\x78\xfa\x2f\xe0\x09\xda\x63\x86\xf6\x96\x9e\xae\x44\xe1\x06\xd2"
- "\xae\x46\x68\xaf\x99\x8f\xa5\xc6\x6a\x0a\x63\x08\x63\xc7\x82\xa3"
- "\x63\x09\x80\x9f\xd9\xc7\xd1\xb1\x79\xf0\x5b\x08\xbf\x14\xf8\xa1"
- "\xe3\xa8\xb4\x1a\x31\x39\x7b\x0e\x3f\x15\x2c\x7e\x6e\xac\xb5\x8f"
- "\x9f\x1b\x71\xf2\x34\xde\xcd\x4b\xf2\xf1\x73\xe3\x20\x3b\x97\x4e"
- "\x1d\x3e\xe6\x2c\x8d\xe7\xcd\x12\x8c\x5c\x46\xe1\x46\xe4\x45\xbf"
- "\xe9\xdf\xcd\x23\x12\xa9\xdf\x37\x21\x6a\xed\x34\xa4\x5e\xfb\x33"
- "\xb4\xd7\xd2\x77\xce\x23\x8f\xa3\xf5\x5f\xa3\xd2\x1b\x95\xa8\xf4"
- "\xf6\x11\x54\x6a\x86\xdf\x65\xf8\xc1\x33\x86\x4f\xe7\xb7\xd7\xc0"
- "\xb6\xf7\xe6\x62\xa8\xcb\x4f\xba\xbd\x37\x27\x31\xed\x8d\x86\xf6"
- "\x36\x72\xed\x2d\x07\x2c\x82\x5f\x7a\x9a\x59\x9d\x18\x6e\x40\x9d"
- "\x66\x1a\x69\xba\x91\xc5\x20\xf6\xcb\xd1\x13\xf5\x28\x3c\x11\x7c"
- "\xf5\x36\x60\xb0\x6a\x1b\x4a\x5d\x04\x18\x6c\xac\xc7\xef\xf5\x0d"
- "\xe5\x69\x0d\x80\xc1\x1b\x05\x34\xd8\xad\x09\x63\xf0\xbf\x18\x83"
- "\xd7\x0f\x9b\xa5\x31\x98\x45\x30\x08\x3a\xb1\x79\x0c\xf2\xe2\x5a"
- "\xed\x18\x0e\x83\xb7\x27\x4b\x63\xf0\xd6\x5c\x8b\x4e\xfc\xe3\x31"
- "\x78\xab\xab\x7d\x0c\xd6\x1a\xe4\x69\xc2\xdb\xf1\xf2\x31\x78\x4b"
- "\xd7\x76\x18\xbc\xed\x62\x1f\x83\xb7\xf4\x0e\x60\x30\x57\x19\x06"
- "\x6f\xf9\x09\x31\x58\x3b\x42\x1a\x83\x3a\x36\x0e\x82\xae\x6c\x16"
- "\x83\x7c\x5d\x79\xfb\x24\x87\xc1\xfa\x73\xd2\x18\xac\x6b\xb0\xe8"
- "\xca\x3f\x1e\x83\x75\xd9\xf6\x31\x58\x97\x24\x4f\x43\xd6\x5f\x97"
- "\x8f\xc1\xba\xc3\x6d\x87\xc1\xfa\xe5\xf6\x31\x58\x1f\xdd\x3c\x06"
- "\x75\x0a\xe3\x60\xdd\x36\x21\x06\x6f\x97\xda\xc1\x20\x1b\x07\x41"
- "\x87\x36\x8f\x41\x5e\x1c\x6c\x78\x83\xc3\x60\xd3\x74\x69\x0c\x36"
- "\x2e\xb6\xe8\xd0\x3f\x1e\x83\x8d\x3d\xec\x63\xb0\xa1\x5e\x9e\xe6"
- "\x6c\x9a\x2b\x1f\x83\x8d\x23\xda\x0e\x83\x4d\x9d\xec\x63\xb0\xb1"
- "\xda\x01\x0c\x2a\x8c\x83\x8d\x01\x42\x0c\x36\x44\x48\x63\x30\x8c"
- "\x8d\x83\xa0\x5b\x9b\xc5\x20\x5f\xb7\x36\x9d\xe1\x30\x68\xba\x24"
- "\x8d\x41\x93\x8b\x45\xb7\xfe\xf1\x18\x34\x6e\xb4\x8f\x41\xe3\x22"
- "\x79\x1a\xd5\xd4\x20\x1f\x83\xc6\xd2\xb6\xc3\xa0\x69\xad\x7d\x0c"
- "\x9a\xe2\x9a\xc7\x60\x98\xc2\x38\x68\x2c\x14\x62\xb0\xe9\x84\x1d"
- "\x0c\xb2\x71\x10\x74\x6e\xf3\x18\xe4\xc5\x41\xf3\xd4\x3b\x18\x54"
- "\xa1\x78\x69\x0c\xd2\xcb\x2d\x3a\xf7\x8f\xc7\x20\xdd\xdb\x3e\x06"
- "\x69\x24\x4b\xd3\xaa\xd0\x62\xf9\x18\xa4\x23\xda\x0c\x83\x2a\xd4"
- "\xd5\x3e\x06\x69\x83\x03\x18\x54\x18\x07\xe9\x20\x21\x06\xcd\x91"
- "\x52\x18\x34\x83\x2e\x6e\xda\x32\x10\x99\xb3\x22\x73\xbd\x5c\xb4"
- "\xc8\xe8\xfd\x42\x54\x79\x52\x2d\x1a\x7d\x0b\xec\x93\x78\x0b\xbd"
- "\x75\x4b\x8d\x4c\x59\x91\x2b\x81\x93\x6b\x78\xfa\x99\x99\x5b\x66"
- "\xcc\xd8\x97\xb6\x2e\x01\xb9\x82\xfe\x1e\x8b\x8f\x95\x5f\xac\x47"
- "\xf8\xfe\x8b\xf1\xf3\x5c\xe6\x9e\x07\xe7\x09\xe8\x6b\xfe\x6a\xe6"
- "\x1d\x73\xa3\x1e\x55\x85\x20\x55\x69\x95\x1e\xec\xb0\x90\xf1\x2f"
- "\xb6\xcb\x45\x95\x4b\xc4\xa6\xab\xc8\xd5\xf8\xab\xa6\x27\xd8\xdb"
- "\xdb\x73\x3e\x72\xf1\xad\xa2\xcd\xd8\xae\xd8\x5e\xd8\xc6\xda\x85"
- "\x34\x0d\xe5\x36\x97\x01\xc6\x8c\xbf\xfa\xf7\xcc\x87\x72\xa2\x7a"
- "\x55\xe5\xb2\x5d\x36\x36\x54\x2e\x71\xcc\xba\x05\x95\xcb\x88\xd2"
- "\xd3\x48\xf4\xdd\x31\xd8\x2a\xcb\x41\x5b\xe5\xf2\x74\x5e\x2b\xd8"
- "\x8a\x5a\xe4\x98\xad\xa8\x63\x56\xb6\xb2\xd5\x55\x2a\xea\xa4\x7c"
- "\x5b\x51\xb9\xc4\x56\x54\x92\xb4\xad\x74\x0e\xe2\x4a\xa7\xe1\xe9"
- "\x91\x56\xb0\x95\x6a\x9b\x63\xb6\x52\x35\x08\x6d\x25\xc2\xff\x55"
- "\xae\x2e\xf2\x6d\xa5\x22\x7b\x81\xaa\x54\x05\x76\x6c\xe5\x20\xae"
- "\x74\xb9\x3c\xde\xdc\x0a\xb6\x72\x3d\xe1\x98\xad\xdc\xfa\x58\xd9"
- "\xca\x96\xa7\xaa\xdc\xfa\xc9\xb7\x95\x2b\xf9\x1e\x9e\xca\xb5\x54"
- "\xda\x56\x61\x0e\xe2\x2a\x4c\xc3\xe3\x77\xad\x60\xab\x0e\xc8\x31"
- "\x5b\x75\x18\x23\xb4\x95\x08\x9f\x52\x75\x78\x43\xbe\xad\x3a\xf8"
- "\x12\x5b\xb9\xd5\xdb\xb1\x95\x83\xb8\x0a\xcb\xe5\xf1\x90\x56\xb0"
- "\x55\xc7\x00\xc7\x6c\xd5\x71\xb1\x95\xad\x44\xc6\xfd\x8e\xcb\xe5"
- "\xdb\xaa\xe3\x08\x62\xab\x8e\x7e\x52\xb6\x32\x65\x85\x7a\x7b\x81"
- "\x0d\x1a\x72\x9e\x37\x78\x25\x23\xaa\xd1\x0f\xec\xe6\x0d\x76\x5b"
- "\xa2\x05\xfe\x04\x76\x33\x18\xd1\xe8\x59\x67\xe9\xb2\x1a\x13\x6a"
- "\x04\x9b\x35\x78\x87\x6a\xca\x0d\xd5\x78\xce\xd1\xb3\xe7\x55\x9d"
- "\xa6\xbf\x39\x4b\x8d\xb0\xdd\xb0\x1d\xb0\xed\x68\xb0\x1b\x63\x47"
- "\xef\x69\xfe\x26\xef\xb1\x81\xa3\xae\x9c\xa5\x67\xea\x69\x1a\xb7"
- "\x97\xf6\x76\xcb\xc0\xef\x05\xc2\xab\x51\x27\xed\x58\xdc\xa6\x4e"
- "\x3e\xf8\x78\xb9\xa1\x12\xf8\xc1\x0d\xc4\x70\xb3\xb3\xfe\xde\xa6"
- "\x09\xfe\x1e\xa6\xf2\xc8\x97\xe8\xee\x1d\x0a\x8d\xdd\xc3\xd3\x52"
- "\xaf\xa0\x0e\x98\x3f\xa4\x9b\x91\x66\x71\x3c\xa2\x76\xbd\x5b\x44"
- "\x31\x6b\xd7\x66\xe3\x3a\xdc\xcf\x81\x5d\x34\xf4\x4d\xde\x9c\xee"
- "\x9b\x31\xa8\xfc\x62\x06\xe3\x37\x6b\x8e\xc0\xf8\xed\x27\x7f\x35"
- "\xf0\xcc\x40\xda\x3b\xd4\x3f\xa3\x0c\x69\xe9\x26\xb0\x71\x0a\xf3"
- "\x3c\xc7\x36\x35\xca\xb5\xb1\x3b\x33\xff\xdb\xac\x65\xe7\x6f\x81"
- "\x9d\xf0\xfd\x99\xf9\x5b\x89\xbc\xf9\x5b\xf0\xcc\x77\xe6\x6f\xa9"
- "\xdc\x13\xf1\xfc\x2d\xf3\x59\x4d\x4f\x4b\xdb\x67\xc6\xd1\x34\xb4"
- "\xbd\x5b\x59\xad\x01\xe1\xf6\x97\xd5\x16\xa1\xd4\x24\xa4\x2e\x6b"
- "\xac\x46\x29\xb5\xb4\xa1\x2c\xed\x12\x0a\xbf\x85\x79\x30\xc6\x4b"
- "\xa7\xc9\xc4\xaf\xee\x81\xe6\xb3\xfe\x3d\xf5\xaa\x4e\xe3\xca\x2a"
- "\x10\xe2\xad\xe3\x89\x01\xce\xec\x0e\x7e\x88\x29\x4f\x3b\x8f\xc0"
- "\x27\x85\xe5\xc6\x9f\xb1\x9f\x62\xe0\x7c\xc8\x1d\x7e\xdd\x7d\xec"
- "\x97\xf8\x18\xf6\x19\x7e\xdf\x84\xf7\x0e\xd8\xc4\xe3\xdf\x18\x17"
- "\x5e\xc9\x69\xa8\x3c\xb9\x11\x95\x19\x11\x02\x1c\x9d\xfe\x21\xb2"
- "\x52\x0a\x47\x59\x04\x47\xa1\x89\x5e\xc9\x6e\x37\x1c\xc0\x51\x2e"
- "\x87\xa3\x07\x76\x3a\x87\xa3\x07\x26\x3b\x8f\xa3\x07\xfa\x3a\x81"
- "\xa3\x6d\x42\x1c\x79\xf8\xc8\xc7\x51\xe7\x5a\xf9\x38\xea\xbc\xdf"
- "\x39\x1c\x3d\xb0\x95\xe0\xa8\x73\x32\xc1\xd1\x03\x79\x1c\x8e\x98"
- "\xb5\x51\xad\x84\xa3\xce\x7e\xd2\x38\xd2\xb1\xf1\x28\x14\xe2\xd1"
- "\x03\xe7\x9b\xc7\x91\x8e\x17\x8f\x3c\x6f\x39\x87\x23\xcf\xad\xce"
- "\xe3\xc8\x73\x96\x72\x1c\xe9\xac\xe2\x51\x97\xc9\xf2\x71\xe4\x19"
- "\x22\x1f\x47\x9e\xc8\x39\x1c\x79\x5e\x21\x38\xf2\x28\x22\x38\xf2"
- "\xac\xe2\x70\xc4\xac\x37\x6b\x25\x1c\x79\xc4\xd9\xc1\x11\x1b\x8f"
- "\x74\x10\x8f\xba\xfe\xe8\x00\x8e\x78\xf1\x48\xfd\x9c\x73\x38\xf2"
- "\xba\xe2\x3c\x8e\xbc\x0e\x38\x81\x23\xab\x78\xa4\xde\x2a\x1f\x47"
- "\x5e\xcb\xe4\xe3\xc8\x6b\x84\x73\x38\x52\x0f\x26\x38\xf2\x72\x27"
- "\x38\x52\x07\x70\x38\x62\xd6\xf0\xb5\x12\x8e\xba\xec\x95\xc6\x51"
- "\x18\x1b\x8f\x74\x10\x8f\x9e\x5e\xdd\x3c\x8e\xc2\x78\xf1\xa8\xdb"
- "\x72\xe7\x70\xd4\x6d\xb0\xf3\x38\xea\xe6\xa2\x1c\x47\x61\x56\xf1"
- "\xa8\xdb\x15\xf9\x38\xea\x5a\x2a\x1f\x47\x5d\x33\x9c\xc3\x51\xb7"
- "\xc5\x04\x47\x5d\x23\x08\x8e\xba\x25\x71\x38\x62\xd6\x45\xb6\x12"
- "\x8e\xd4\x46\x3b\x38\x62\xe3\x51\x18\xc4\xa3\x37\x87\x3a\x80\x23"
- "\x5e\x3c\xf2\x3e\xe6\x1c\x8e\xbc\x17\x3b\x8f\x23\xef\x97\x9d\xc0"
- "\x91\x55\x3c\xf2\x19\x2c\x1f\x47\xde\xde\xf2\x71\xf4\xa7\x4a\xe7"
- "\x70\xe4\x5d\x4c\x70\xf4\xa7\x5c\x82\x23\xef\x83\x1c\x8e\x98\xb5"
- "\xa6\xad\x84\xa3\x3f\x0d\x93\xc2\x11\xde\x8b\xe0\x23\xb2\x2f\x44"
- "\xed\xba\x85\x28\x78\x13\xfe\xb7\x11\x05\xd6\xa5\xfb\xc4\x1d\x5a"
- "\x44\xf6\x03\xd0\xab\x7c\x98\x7c\xaf\xd8\xf5\x0f\x6c\x07\xbf\x78"
- "\x87\xaa\xc3\xcf\x90\x3d\x1a\xf0\xbe\x20\x37\x53\x63\xd0\x00\xbc"
- "\x2f\x83\xaa\xfb\x16\xbc\x8f\xd5\x9d\xbd\x03\xbc\x25\xf6\x0e\x98"
- "\x28\xbd\x77\x40\x63\x8e\x65\xdd\xed\x36\x6e\xdd\xad\xaa\xfb\x2c"
- "\xbb\xeb\x6e\x55\xdd\xdf\xd8\x38\x51\x2e\x1e\xba\x33\xeb\xbf\x6e"
- "\x76\x7f\xde\x50\x97\xde\x3d\x06\xda\xac\x23\x6d\xef\xce\xec\x1f"
- "\xdc\xfc\x7a\xdc\x6d\x3c\x9c\x74\xf7\x1e\x3f\x09\xa5\xd1\xab\x4f"
- "\xc6\xd0\x3e\xa1\x6a\x3a\x3b\x54\xee\xb3\x48\x7e\xff\x90\xb5\x77"
- "\x86\xb8\xbd\x35\xde\xc4\xde\xec\xbe\x05\xde\x12\xfb\x16\x4c\x94"
- "\xde\xb7\x40\xdc\xde\x0f\xda\x5f\xe7\xac\x7a\xf0\x88\x7c\x7b\x3f"
- "\x98\x45\xec\x1d\x9a\x58\x97\xfe\x60\x25\x67\x6f\xcd\x38\xf9\xf6"
- "\x7e\x70\x19\xb1\xf7\x7f\x26\x81\xbd\x33\xc0\xde\x05\xf2\x9e\x45"
- "\xa3\xb5\x6f\x6f\x9d\x04\xbe\x7b\x2c\x63\xed\xcd\xe2\x5b\x62\xcf"
- "\x84\x89\xd2\x7b\x26\x88\xdb\xbb\xc7\x18\xfb\xf6\xee\x31\x44\xbe"
- "\xbd\x7b\xb8\xb2\xf6\x06\x7c\xf7\x18\xc1\xd9\xbb\x87\x83\xfb\x0a"
- "\xf0\xed\xad\xa9\x25\xf6\xfe\x29\x82\xf6\xd1\x01\xbe\x75\x72\x9f"
- "\x25\xa3\x19\x7b\x4b\xe0\xbb\x67\x2d\xb1\x37\xbb\x5f\x83\xb7\xc4"
- "\x7e\x0d\x13\xa5\xf7\x6b\x10\xb7\x77\xcf\x43\xf6\xed\xdd\x73\xbb"
- "\x7c\x7b\xf7\x4c\x22\xf6\xd6\x01\xbe\x7b\xee\xe7\xec\xfd\xe7\x20"
- "\xf9\xf6\xee\x19\x4d\xec\x5d\x39\x0c\xec\x0d\xf8\xd6\xc9\xc4\xf7"
- "\x9f\x91\x7d\x7b\x87\x49\xe0\xdb\x37\x9a\xb5\x37\x8b\x6f\x89\xbd"
- "\x22\x26\x4a\xef\x15\x21\x6e\x6f\xdf\x81\xf6\xed\xed\xdb\x43\xbe"
- "\xbd\xff\x5c\xc5\xda\x1b\xf0\xed\xeb\xcf\xd9\xdb\x77\x8b\x7c\x7b"
- "\xff\xf9\x04\xb1\xf7\xa9\x60\xda\x27\x0c\xf0\x1d\x26\xf3\x59\x7c"
- "\x13\x9b\xb1\xb7\x04\xbe\x7b\x9d\x20\xf6\x66\xf7\xa9\xf0\x96\xd8"
- "\xa7\x62\xa2\xf4\x3e\x15\xe2\xf6\xee\xb5\xd9\xbe\xbd\x7b\xad\x92"
- "\x6f\xef\x5e\xe3\x88\xbd\xc3\x00\xdf\xbd\x72\x39\x7b\x3f\xe4\x2d"
- "\xdf\xde\xbd\x86\x11\x7b\xff\x1c\x00\xf6\x06\x7c\x87\xc9\xc4\x77"
- "\x2f\xbd\x94\xbd\xbd\xc0\xde\xc5\xc0\x63\x60\x1c\xc4\xfb\x2c\xa8"
- "\xc3\x4d\x42\xbb\x97\x27\x07\xa3\xfe\xb7\xb1\xed\x1f\x2e\x82\xb1"
- "\x43\xd3\x66\xfb\x65\xa8\x1e\xde\xee\xf4\xda\x61\xd5\xc3\x73\x25"
- "\xd7\x0e\xab\x1e\x9e\x2c\x7b\xed\xb0\xea\x61\x7f\x8e\x03\x3d\x1c"
- "\xc7\xf9\x54\xcb\xc4\x0f\x59\x6b\x8a\x55\x0f\x6b\x44\xf7\xd1\x50"
- "\x3d\x54\x82\xd7\x14\xd3\xab\xff\xab\x35\x67\x2b\xe1\x46\x0f\x97"
- "\x3a\xe0\xeb\x5c\xf0\x43\x86\xb4\xaf\x7b\xef\x00\x5f\xe7\xb6\xd9"
- "\xbe\x1d\xaa\xde\xd9\xce\xfb\xba\xf7\x54\x69\x5f\xf7\x7e\x59\xbe"
- "\xaf\x7b\x7b\x73\xfc\xab\x77\x24\xe7\xeb\xde\xf2\xd7\x8f\xab\x7a"
- "\xbb\x8a\xee\xe7\xa1\xd2\xee\x25\xbe\x3e\xbd\x0c\x7c\xad\x80\x97"
- "\xf5\xde\xdf\xbc\xaf\x75\x78\xdf\x09\x3b\xfd\xfa\xd1\x5c\x18\x33"
- "\x35\x6d\xb6\x7f\x88\xea\xd1\x25\xce\xfb\xfa\xd1\x51\xd2\xbe\x7e"
- "\x74\xb0\x7c\x5f\x3f\x8a\x38\xee\xf7\xe8\x30\xce\xd7\x8f\x56\xca"
- "\xf7\xf5\x23\x06\xd1\x7d\x45\x54\x8f\x14\x10\x5f\x9f\xa9\x36\x67"
- "\x2b\xe1\x84\x8f\x6e\x71\xc0\xd7\xd0\xaf\x75\x76\xfa\x75\x9f\x65"
- "\xe0\xeb\xdc\x36\xdb\xc7\x44\xd5\x27\xde\x79\x5f\xf7\x19\x22\xed"
- "\xeb\x3e\xbd\xe5\xfb\xda\xaf\x86\xe3\x9d\x7d\x02\x39\x5f\xf7\x39"
- "\x2c\xdf\xd7\x7e\xa7\x45\xf7\x37\x51\xf9\xad\x21\xbe\x3e\x3b\x12"
- "\x7c\xad\x80\x8f\xf6\x91\xe4\xff\x9c\xaf\xc3\xf0\x3e\x1c\x76\xfa"
- "\xf5\xe3\x89\xc0\x15\x34\x6d\xb6\x9f\x8a\xea\xf1\x37\x9c\xf7\xf5"
- "\xe3\x7d\xa4\x7d\xfd\xb8\xa7\x7c\x5f\x3f\x56\xc9\x71\xde\xc7\x7d"
- "\x39\x5f\x3f\x5e\x28\xdf\xd7\x8f\x95\x88\xee\xb3\xa2\x7a\x2c\x99"
- "\xf8\x5a\x5f\x68\xce\x56\xc2\x85\x1f\x5f\xe4\x80\xaf\xa1\x5f\x87"
- "\xd9\xe9\xd7\x7d\x41\xd7\x87\xe5\xb6\xd9\xbe\x2e\xaa\xbe\xc3\x9d"
- "\xf7\x75\xdf\xae\xd2\xbe\xf6\x6f\x90\xef\x6b\xff\xc3\x1c\xdf\xee"
- "\xeb\xce\xf9\xba\x6f\x9e\x7c\x5f\xfb\xef\x15\xdd\xef\x45\xe5\x1f"
- "\x4d\x7c\x7d\xde\x1b\x7c\xad\x80\x87\xf7\x8d\x51\xc2\xc3\xe7\x6c"
- "\x44\xee\x42\x7f\x3f\x39\xb2\x6d\xb9\xf8\x93\x83\x9d\xf7\xf7\x93"
- "\x2e\xd2\xfe\x7e\xe2\x92\x7c\x7f\x3f\xb1\x97\xe3\xe2\x4f\xd4\x73"
- "\xfe\x7e\x72\x8d\x7c\x7f\x3f\xb1\x45\x9c\x8b\x3f\x31\xce\x39\x2e"
- "\xfe\x64\xa4\x12\x2e\x6e\xeb\xef\x7e\x21\x6d\xcb\xc7\xfb\xf5\x71"
- "\xde\xdf\x01\xd7\xa5\xfd\x1d\x70\x4a\xbe\xbf\x03\xb6\x70\x7c\x3c"
- "\xa0\x9a\xf3\x77\xbf\x45\xf2\xfd\x1d\x90\x25\xce\xc7\x03\x86\x39"
- "\xc7\xc7\xfb\x8d\x50\xc2\xc7\x6d\xfd\x3d\x20\xa0\x6d\x39\xf9\x00"
- "\x1f\xe7\xfd\xdd\xff\x9c\xb4\xbf\xfb\x1f\x91\xef\xef\xfe\x59\x1c"
- "\x27\xef\xcf\xcb\x7f\x0f\x88\x93\xef\xef\xfe\xcb\xc4\x39\x79\xff"
- "\x20\xe7\x38\xf9\x80\x60\x25\x9c\xdc\xd6\xdf\x03\x7d\xdb\x96\x97"
- "\x0f\x74\x73\xde\xdf\x81\xc7\xa5\xfd\x1d\x78\x40\xbe\xbf\x03\x97"
- "\x71\xbc\x3c\xb0\x84\xf3\xf7\x40\xf9\xfb\x67\xaa\x02\x93\xc4\x79"
- "\x79\xa0\x9f\x73\xbc\x7c\xa0\xbf\x12\x5e\x6e\xeb\xef\xa7\x3c\xda"
- "\x96\x9b\x0f\xba\xe5\xbc\xbf\x07\x1d\x92\xf6\xf7\xa0\xed\xf2\xfd"
- "\x3d\x28\x89\xe3\xe6\x83\x78\xf9\xff\xa7\x46\xca\xf7\xf7\xa0\x68"
- "\x71\x6e\x3e\xc8\xdb\x39\x6e\xfe\x94\x46\x09\x37\xb7\xf5\x77\x90"
- "\xb1\x6d\xf9\x79\xd0\x05\xe7\xfd\x1d\xb4\x47\xda\xdf\x41\x1b\xe4"
- "\xfb\x3b\x28\x9a\xe3\xe7\x41\xdb\x38\x7f\x0f\x0e\x91\xef\xef\xa0"
- "\x71\xe2\xfc\x3c\xc8\xd5\x39\x7e\x3e\xd8\xdd\xf9\x3c\xf9\x5f\x2a"
- "\x31\x37\x97\xbb\xff\x63\x79\x12\xbb\xe6\x4e\x35\x98\xdb\xff\x51"
- "\xf5\x17\xe6\xdb\x2a\xa2\x7b\xcb\xa8\xfe\xd2\xa7\x5d\xef\xff\xa8"
- "\x7a\xda\xfe\xfe\x8f\xaa\xa7\xe5\xed\xff\xa8\xfa\x8b\xa7\xfc\xf9"
- "\xf8\x4f\x57\x72\x1a\xe1\x2f\x3c\xfd\x1f\xcc\xf4\xeb\x76\xbd\x2f"
- "\xa4\xea\x69\xe1\xbe\x90\xaa\xc1\xcc\xbe\x90\xf4\xea\x5f\x93\x95"
- "\x69\x91\xbf\x54\x39\xff\x5e\xe0\x99\xbd\x58\x87\xc8\xdd\x87\x92"
- "\xc3\x76\xf0\x1e\x0e\xdb\xcf\x6c\x95\xc6\xf6\x33\x2e\xed\x7a\x1f"
- "\x4a\xd5\x90\xe5\xf6\xb1\x3d\x24\x5a\xd6\x9e\x23\xaa\x21\xf2\xf7"
- "\xbd\x51\x0d\xd9\xcb\xe9\xa1\x21\x3c\xfd\xfb\x4c\x6d\x1b\x62\x5b"
- "\xd9\x7e\x4a\xaa\x21\xb9\x42\x6c\x07\x6f\x23\xd8\xbe\x50\xaa\x4c"
- "\x77\x3d\x53\xe4\xfc\x7b\x90\xe7\x32\xb0\xe6\x92\xbb\x1f\x26\x87"
- "\xed\x67\xd7\x72\xd8\x7e\x6e\x89\x34\xb6\x43\xce\xb4\xeb\xfd\x30"
- "\x55\x21\x53\xed\x63\x3b\x44\x27\x6b\x2f\x13\x55\x48\xb1\x7c\x6c"
- "\x87\x64\x70\xda\x2f\xe4\x04\x87\xed\xe7\x2a\xda\x0e\xdb\x0a\xf7"
- "\xc9\x54\x85\x24\x09\xb1\xfd\xec\x32\x82\xed\x6a\xad\x32\x8d\xf9"
- "\x5c\x9e\xf3\xef\x7d\x74\x71\x58\x5f\xca\xdd\x97\x93\xc3\xf6\xf3"
- "\xb1\x1c\xb6\x75\x36\xfb\x42\x71\xd8\x0e\x3d\xd0\xae\xf7\xe5\x54"
- "\x85\x3e\x67\x1f\xdb\xa1\xbe\xb2\xf6\x48\x51\x85\x6e\x96\x8f\xed"
- "\xd0\x38\x4e\xe7\x86\x16\x72\xd8\xd6\xed\x68\x43\x6c\x2b\x8c\xdb"
- "\xa1\x11\x42\x6c\x3f\x1f\x45\xb0\x7d\x39\x49\x99\x9e\xd6\x25\x3b"
- "\xff\x9e\xeb\x85\x11\x58\x4b\xcb\xdd\x1f\x94\xc3\x76\xd8\x70\x0e"
- "\xdb\x2f\x0c\x91\xc6\xf6\xd0\xec\x76\xbd\x3f\xa8\x6a\xa8\xfd\xfd"
- "\x7f\x54\x61\x76\xf6\xff\x11\x5b\x2b\x3c\x54\xfe\xbe\x17\xaa\xa1"
- "\x23\x38\x4d\x3f\x74\x0d\x87\xed\x17\x56\xb6\x1d\xb6\x15\xee\x1b"
- "\xaa\x1a\x1a\x20\xc4\x76\x58\x08\xc1\x76\x4d\x89\xb2\xdc\xc1\x0b"
- "\xe3\x9c\x7f\xaf\xf7\xa2\x1f\xce\x1b\xc8\xdd\xa7\x94\xc3\xf6\xb0"
- "\xde\x1c\xb6\x5f\xf4\x91\xc6\xf6\xf0\x59\xed\x7a\x9f\x52\xd5\xb0"
- "\x5b\xf6\xb1\x3d\xec\x84\xbc\x3d\x5d\x86\x2b\x58\x07\x3f\xdc\x8f"
- "\xcb\x5f\x0c\xe7\xcd\x7f\x7f\x31\xba\x0d\xb1\xad\x30\x6e\x0f\x77"
- "\x17\x62\x7b\x98\x86\x60\xfb\x9a\xaf\xb2\x3c\xc9\x8b\x81\xce\xe7"
- "\x49\x5e\x0e\x64\xde\x61\xca\xdc\x2f\x95\xc3\xf6\x8b\x26\x6e\x6f"
- "\xa2\x97\x7b\x5b\x63\xfb\xce\xde\x44\xaa\x11\x43\xda\xcd\x7e\xa9"
- "\xaa\x97\xbe\xb1\x8f\xe3\x97\xf2\xe4\xe5\x44\x46\xf4\x96\x8f\xe3"
- "\x97\x6a\xb8\x9c\xc8\x08\xde\xfc\x97\x97\x2d\xdf\x24\x6f\x83\x3d"
- "\x8b\x46\x14\xdb\xdd\xb3\x48\x35\x62\x4b\xab\xed\xa3\xaa\x7a\xa9"
- "\x42\xb0\x67\x91\xea\xc5\x5a\x33\xd3\x17\xae\x27\x2a\xcb\xab\xbc"
- "\x1c\xe2\x7c\x5e\x65\x24\x79\xbf\x2b\x73\xdf\x56\xae\x2f\xbc\xd2"
- "\x89\xeb\x0b\x23\xfb\x49\xf7\x85\x57\x87\xb7\x9b\x7d\x5b\x55\xaf"
- "\x1c\xb1\xdf\x17\x5e\xd9\x26\x2f\x87\xf2\xaa\x82\x7d\x60\x5e\xa9"
- "\xe7\x72\x28\xaf\x86\x70\x7d\x61\xe4\xa2\xb6\xeb\x0b\xaf\x1e\xb7"
- "\xdf\x17\x5e\x2d\x6c\xb5\xfd\x5c\x55\xaf\x9c\x16\xf6\x85\x57\x10"
- "\xe9\x0b\x37\x6b\x95\xe5\x61\x46\x2a\x7a\xff\x2d\xec\x0b\xe1\x23"
- "\x98\x77\xdf\x32\xf7\x8f\xe5\xfa\xc2\x28\x1f\xae\x2f\x84\xdb\xf0"
- "\x79\xae\x2f\x8c\x1e\xd3\x6e\xf6\x8f\x55\x8d\x3a\x69\xbf\x2f\x8c"
- "\xda\x2b\x2f\xe7\x32\x7a\x88\xfc\xbe\x30\x9a\xb7\xfe\x69\x34\x6f"
- "\xfd\x53\xf8\xca\xb6\xeb\x0b\xa3\xcf\xd8\xef\x0b\xa3\x0f\xb6\xda"
- "\xbe\xb2\xaa\x51\xd5\xc2\xbe\x30\xca\x83\xf4\x85\xdb\xc9\xca\xf2"
- "\x36\xe1\x0e\xf0\xff\xe6\xf2\x36\xf0\x2c\x3e\xcc\xbb\x7e\x59\xfb"
- "\xd8\x72\x7d\x21\xa2\x37\xd7\x17\xc6\x0e\x97\xee\x0b\x63\x26\xb7"
- "\x9b\x7d\x6c\x55\x11\xe7\xec\xf7\x85\x88\x22\x79\x39\x9a\x31\xc3"
- "\xe5\xf7\x85\x31\x6a\x2e\x47\x33\x66\x1c\xd7\x17\xc6\x66\xb5\x5d"
- "\x5f\x18\x73\xc9\x7e\x5f\x18\x53\xd2\x6a\xfb\xdb\xaa\x22\x6a\x85"
- "\x7d\x21\x42\x43\xfa\x42\xbd\x51\x59\x9e\x67\x6c\x94\xf3\x79\x9e"
- "\xf1\x51\xcc\x9c\x09\x99\xfb\xe9\x72\x7d\xe1\xb5\x7e\x5c\x5f\x18"
- "\x3f\x46\xba\x2f\x8c\x8b\x6d\x37\xfb\xe9\xaa\x5e\xbb\x62\xbf\x2f"
- "\xbc\x56\x2a\x2f\xa7\x33\x6e\x8c\xfc\xbe\x30\xce\x97\xcb\xe9\x8c"
- "\x8b\xe2\xfa\xc2\xf8\x82\xb6\xeb\x0b\xe3\x6e\xd9\xef\x0b\xe3\x4e"
- "\xb4\xda\x3e\xbb\xaa\x71\x48\xd8\x17\x5e\xf3\x23\x7d\xa1\x29\x4d"
- "\x59\x5e\x68\x7c\x9c\xf3\x79\xa1\xc8\x38\x66\x3e\x89\xcc\x7d\x7d"
- "\xb9\xbe\xf0\xfa\x10\xae\x2f\x44\x4a\x7f\xe7\x41\x35\x61\x6e\xbb"
- "\xd9\xd7\x57\xf5\xba\xfd\xef\x1f\xa9\x5e\xb7\xf7\xfd\x23\x91\x1c"
- "\xd0\x84\xc9\xf2\xfb\xc2\x04\x7f\x2e\x07\x34\x81\xb7\xfe\x2f\x72"
- "\x47\xdb\xf5\x85\x48\xfb\xdf\x7f\x50\x4d\x70\xe0\xfb\x0f\x0a\xf7"
- "\xfb\x55\x4d\xf0\x10\xf6\x85\xd7\x03\x49\x5f\x30\xbb\x2a\xcb\x23"
- "\x45\x36\x9b\xff\xc7\x3a\xbf\xc9\xdb\x36\x8f\x54\x5a\x15\x8c\x9e"
- "\x9c\x88\xfb\xc2\x44\xad\x31\x3b\x54\x83\xf7\x17\x36\xf9\xb1\x7b"
- "\x50\x2e\x61\xf7\x78\xa9\x35\x92\x3d\x28\x0d\xa6\x3b\x7b\x50\x92"
- "\xbd\x3f\x10\x85\xd7\x02\xe3\x35\xc1\x46\x35\xd9\x7f\x92\xc6\x73"
- "\xa2\xf0\x1c\xa9\xf3\x25\xcc\xfe\x2a\x8b\x8c\xd0\xf6\x8b\xcd\xec"
- "\x3f\x19\xa5\x47\xa5\x51\x0b\x91\xb1\xeb\xbe\x34\xb2\x4e\xf8\x8d"
- "\x42\x66\xff\xc9\x29\x9a\x9e\xe9\xbf\x20\x6f\x2f\xbc\xff\x64\x14"
- "\x6d\x4e\xd5\xd3\x86\x32\x50\x9a\xa5\x51\x60\xdf\xa9\x96\x3d\x28"
- "\x27\xf6\xc0\x6d\x37\x4e\xf1\xef\x99\xff\x8b\xd4\xfe\xc2\x13\x15"
- "\xec\x03\xfb\x46\x29\x97\xdf\x99\xa8\xe6\x30\x3a\x91\x19\x83\xe1"
- "\xfc\xb6\xd2\x48\x88\x31\xe9\x68\x65\x93\xa2\xbd\x37\x26\x06\x38"
- "\xe0\x33\x3c\x47\xc4\x26\x7e\x71\x3e\x7b\xf3\x04\xf8\x2c\x17\xef"
- "\x73\xec\xb8\xcf\xdc\x6e\xb4\x8e\xcf\xde\x8c\x76\xdc\x67\x6f\x1e"
- "\xb3\xf2\x99\x48\x1e\xe2\xcd\x7d\xf2\x7d\xf6\x66\x1a\x97\x87\x78"
- "\xf3\x30\xe7\xb3\x49\xde\xc4\x67\x6f\x4e\x22\x3e\x73\xd9\xdb\xa4"
- "\x68\xff\x8e\x37\xf5\xcd\xfb\x8c\x99\xfb\x60\xa7\x9f\x4d\x5e\x69"
- "\xcc\x06\xed\x0e\xba\xdc\x71\x9f\x3d\x70\xbe\x75\x7c\x36\x59\xe3"
- "\xb8\xcf\x26\x2f\x11\xfa\x4c\x4c\x2f\x4f\x96\xff\xcd\x4e\xd5\xe4"
- "\x20\x4e\x2f\x4f\x4e\xe6\x7c\x36\xb9\x84\xf8\x6c\xb2\x9a\xf8\x8c"
- "\xd2\x37\x29\xda\x03\x64\x72\x96\x03\x3e\xc3\xef\xf4\xed\xf4\xb3"
- "\x29\x21\xe0\xb3\x5c\xbc\xef\xb3\xe3\x3e\xeb\xfa\x63\xeb\xf8\xec"
- "\xad\x52\xc7\x7d\x36\x65\xb0\x95\xcf\x44\x74\xdd\x94\x5e\xf2\x7d"
- "\xf6\x56\x35\xa7\xeb\xa6\x04\x70\x3e\x9b\xb2\x88\xf8\xec\xad\xc3"
- "\xc4\x67\xae\x1e\x4d\x8a\xf6\x11\x99\xd2\x6c\xfe\x0b\xf3\xd0\x26"
- "\x6f\x5b\x9d\xc3\xf9\x2c\xca\x60\xcc\x06\x2d\x04\x3a\xc7\x71\x9f"
- "\x3d\xbd\xba\x75\x7c\x16\x95\xe6\xb8\xcf\xa2\x2e\x09\x7d\x26\xa6"
- "\x3f\xa2\x8e\xcb\xf7\x59\x54\x1e\xa7\x3f\xa2\xf4\x9c\xcf\xa6\x06"
- "\x12\x9f\x45\x25\x13\x9f\xb9\x05\x37\x29\xda\x8b\x24\xca\xe8\x80"
- "\xcf\xf0\x3b\x58\x3b\xfd\x6c\xda\x16\xf0\x59\x2e\xde\x07\xdb\x71"
- "\x9f\xbd\x39\xb4\x75\x7c\x36\x2d\xc8\x71\x9f\x4d\xdb\x68\xe5\x33"
- "\x11\x9e\x3c\x4d\xc1\x3e\xd8\xd3\x22\x38\x9e\x3c\x2d\x8b\xf3\xd9"
- "\xb4\x2a\xe2\xb3\x69\x01\xc4\x67\x1d\xa2\x9b\x14\xed\x67\x32\x4d"
- "\x72\xff\x2f\x7b\xbc\xd1\x32\x2f\x9f\xf3\x5b\xf4\xa4\xf6\xc3\x1d"
- "\xdf\xae\x71\xdc\x6f\xd1\xe3\x9b\xe7\x8e\xd1\xcf\xc9\xf7\x5b\xb4"
- "\x3b\xc7\x1d\xa3\x47\x72\x7e\x8b\xce\x23\x7e\x7b\xbb\xca\x39\xee"
- "\x18\xdd\xec\xfa\x57\x31\xee\x68\xeb\xb7\x19\xde\xed\x87\x3f\x4e"
- "\xdf\xe2\xb8\xdf\x66\x78\x36\xcf\x1f\xa7\xdf\x92\xef\xb7\xe9\x45"
- "\x1c\x7f\x9c\xe1\xca\xf9\x6d\xc6\x38\xe2\xb7\xe9\x79\xce\xf1\xc7"
- "\x19\x5a\x25\xfc\xd1\xd6\x6f\xef\x94\xb6\x1f\x0e\xf9\xce\x24\xc7"
- "\xfd\xf6\x4e\x71\xf3\x1c\xf2\x9d\x9d\xf2\xfd\xf6\x4e\x32\xc7\x21"
- "\xdf\x39\xc8\xf9\x2d\xc6\x83\xf8\xed\x9d\x71\xce\x71\xc8\x77\x2a"
- "\x95\x70\x48\x5b\xbf\xc5\x2e\x6b\x3f\x3c\x32\xd6\xdb\x71\xbf\xc5"
- "\x2e\x6e\x9e\x47\xc6\xca\xff\x66\xb1\x2a\x36\x90\xe3\x91\xb1\x49"
- "\x9c\xdf\x62\xd9\x6f\xb0\xc4\x7a\x38\xc7\x23\x63\x9b\xdd\xff\x43"
- "\x8c\x47\xda\xfa\xed\xbd\x90\xf6\xc3\x25\xdf\x95\xc1\xff\xdf\xb3"
- "\xe2\xff\x62\x5c\xf2\x3d\x05\xfc\xff\x5d\x0b\xff\x87\xfe\xf6\x1e"
- "\x8f\xff\xbf\xc7\xf2\xff\x77\x0f\x3b\xc7\x25\xdf\x73\x84\xff\xdb"
- "\x70\x49\x5b\xbf\xc5\xd5\xb6\x1f\x3e\x19\xb7\xcc\x71\xbf\xc5\x5d"
- "\x69\x9e\x4f\xc6\x29\xf8\x0e\x54\x5c\x01\xc7\x27\xe3\xaa\x38\xbf"
- "\xc5\x07\x11\xbf\xc5\x2d\x72\x8e\x4f\xe2\x4f\xdb\xd9\xf7\x9b\xc9"
- "\x3b\x54\x43\x8b\xe4\x21\x8f\xc5\x04\xb3\x7b\x13\xce\x3c\x6c\xf2"
- "\x09\xd5\xc8\xfd\xbe\x8b\x65\xcf\xe9\x23\xc0\x8c\xce\xab\x66\x4e"
- "\x76\x6e\xdf\xe9\x99\x9e\xce\xef\x3b\x9d\x70\xaa\xe5\xbe\xef\x92"
- "\x70\x48\xfe\xbe\xd3\x09\x6b\x38\x0e\x9a\x50\xc1\xf9\x3a\x91\x99"
- "\x9f\x20\x6f\x3f\xea\x84\x08\xe7\xf6\xa3\x9e\x39\x9e\xe0\x2b\x41"
- "\x4d\xf6\xa3\x9e\x39\xb2\x6d\xbe\xfb\x12\x7f\x10\xef\x47\x4d\xa7"
- "\x77\xcc\x50\xb6\x3f\xf2\xcc\x0a\x07\xf0\x9c\x4b\x8b\xe4\x68\x39"
- "\x3c\xcf\xce\x02\x3c\xe7\xca\xfd\xce\x8c\x10\xcf\xb3\xfb\x39\x87"
- "\xe7\x59\x67\x9c\xc7\xf3\xac\xed\x2d\xf7\x9d\x99\x59\x99\xf2\xf1"
- "\x3c\x6b\x12\xc7\xcd\x67\x15\x70\x78\x9e\x7d\x42\x3e\x9e\x67\x69"
- "\x9d\xc3\xf3\xec\x3e\x04\xcf\x89\x7a\x82\xe7\xd9\xbe\x6d\xf3\xfd"
- "\x99\xc4\x35\x04\xcf\x9d\x2a\x95\xed\x3f\x3d\xbb\xa0\x79\x3c\xeb"
- "\x34\xb4\x48\xfe\x9a\xc3\xf3\xdc\x68\x93\x8f\x4e\x23\xf7\x7b\x37"
- "\x42\x3c\x27\x99\x9c\xc3\x73\xd2\x4e\xe7\xf1\x9c\xb4\xa0\xe5\xbe"
- "\x77\x93\x34\x55\x3e\x9e\x93\x02\x38\xcd\x92\x94\xc8\xe1\x79\xee"
- "\x16\xf9\x78\x9e\x63\x70\x0e\xcf\x49\xb7\x08\x9e\xe7\x14\x12\x3c"
- "\x27\xd5\xb4\xcd\x77\x70\xe6\x4c\x22\x78\xf6\xd0\x2a\xdb\xdf\x7b"
- "\xae\xe4\xfe\xc7\x3c\x3c\xe7\xd2\x22\xb9\x7d\x0e\xcf\xc9\x41\x80"
- "\xe7\x5c\xb9\xdf\xdd\x11\xe2\x79\xbe\x93\xdf\xb9\x98\xdf\x02\xdf"
- "\xb9\x98\xef\xc4\x77\x2e\xac\xbf\xbb\x33\x7f\xa0\x7c\x3c\xcf\x33"
- "\x72\x5a\x6e\xbe\x8e\xc3\x73\x72\x92\x7c\x3c\xcf\x2b\x72\x0e\xcf"
- "\xf3\xd9\xef\x5f\xcc\x4b\x23\x78\x9e\x7f\xb0\x6d\xbe\xc7\x33\x2f"
- "\x80\xe0\xb9\x4b\x8c\xb2\xfd\xd3\x93\x75\xcd\xe3\x39\x4c\x43\x8b"
- "\xbc\xf7\xe0\xf0\xfc\xbe\xab\xc9\x27\x4c\x23\xf7\xfb\x3f\x42\x3c"
- "\x2f\xdc\xe8\x1c\x9e\x17\x8e\x72\x1e\xcf\x0b\x7b\xb4\xdc\xf7\x7f"
- "\x16\xba\xc8\xc7\xf3\x82\x52\x4e\xe3\x2e\xe4\xbd\xff\x7f\x7f\x98"
- "\x7c\x3c\x2f\x70\xf2\xbb\x40\x0b\xb3\x09\x9e\x17\xb0\xdf\x05\x5a"
- "\xb8\xa6\x6d\xbe\x0b\x94\x6c\x24\x78\x56\x17\x2a\xdb\x9f\xfe\x7d"
- "\xb5\x03\x78\xce\xa5\x45\xde\x09\x71\x78\x5e\x7c\x02\xf0\x9c\x2b"
- "\xf7\x3b\x44\x42\x3c\x2f\x8e\x77\x0e\xcf\x8b\x7b\x39\x8f\xe7\x45"
- "\x97\x5a\xee\x3b\x44\x8b\x8e\xcb\xc7\xf3\xa2\x3c\x4e\xfb\x2f\xe2"
- "\xbd\xff\x4b\x51\xf0\x7d\xa2\x45\x51\xce\xe1\x79\xf1\x74\x82\xe7"
- "\x45\x5a\x82\xe7\xc5\x93\xda\xe6\xfb\x44\xef\x97\x12\x3c\x77\xab"
- "\x57\xb6\xff\xff\xe2\x66\xe7\x7f\x88\xe5\x37\x2c\x79\x29\x0e\xd3"
- "\x69\xdb\x9c\xcf\x71\xa4\x85\x39\x87\xe9\xd4\xeb\xce\x63\x3a\xf5"
- "\x9b\x96\xcb\x71\xa4\x2a\xf8\xd6\x5f\x6a\x22\x97\xe3\x48\xdd\xcb"
- "\x61\x3a\xad\x5a\x3e\xa6\x53\x83\x9c\xc3\x74\xda\x10\x82\xe9\x94"
- "\x5a\x82\xe9\xb4\xc0\xb6\xc9\x71\xa4\x14\x38\x97\xe3\x48\xdb\xab"
- "\x24\xc7\x61\x8b\xe9\x0f\x16\x39\x9f\xe7\xf8\xc0\xc7\x39\x4c\x2f"
- "\x2d\x76\x1e\xd3\x4b\x33\x5b\x2e\xcf\xb1\x74\x81\x7c\x4c\x2f\x1d"
- "\xc6\xe5\x39\x96\xae\xe4\x30\xfd\xc1\x41\xf9\x98\x5e\xea\xee\x1c"
- "\xa6\x3f\xf0\x24\x98\x5e\x52\x42\x30\xfd\x81\x6b\xdb\xe4\x39\x96"
- "\x24\x39\x97\xe7\xf8\x60\xa5\x92\x3c\x87\x2d\xa6\x57\x44\x38\x9f"
- "\xeb\x58\x7e\xc9\x39\x4c\x2f\xdf\xe0\x3c\xa6\x97\x4f\x6f\xb9\x5c"
- "\xc7\xf2\x51\xf2\x31\xbd\x5c\xc3\xe5\x3a\x96\x4f\xe2\x30\xbd\x22"
- "\x43\x3e\xa6\x97\x9d\x76\x0e\xd3\xcb\xcf\x11\x4c\x2f\xcb\x23\x98"
- "\x5e\x5e\xd9\x36\xb9\x8e\x65\x23\x9c\xcb\x75\xac\x98\xa4\x24\xd7"
- "\x61\x8b\xe9\x55\x7e\xce\xe7\x3b\x56\x7e\xe3\x1c\xa6\x57\xc6\x3b"
- "\x8f\xe9\x95\x43\x5a\x2e\xdf\xb1\xb2\xb7\x7c\x4c\xff\x0f\xef\xfb"
- "\x17\x2b\x79\xeb\xff\x57\x45\xcb\xc7\xf4\xff\x14\x3a\x87\xe9\x95"
- "\xfb\x08\xa6\xff\x27\x91\x60\x7a\xe5\x8e\xb6\xc9\x77\xfc\x8f\xaf"
- "\x73\xf9\x8e\x55\xcd\xee\x7f\x21\x96\xef\xb0\xc5\xf4\x87\xf5\xce"
- "\xe7\x3c\x3e\xcc\x74\x0e\xd3\x1f\x86\x39\x8f\xe9\x0f\x3d\x5b\x2e"
- "\xe7\xb1\xfa\x96\x7c\x4c\xaf\x2e\xe2\x72\x1e\x1f\xf2\xe6\x3f\xad"
- "\x09\x96\x8f\xe9\xd5\xcb\x9c\xc3\xf4\x87\xab\x08\xa6\x57\x0f\x23"
- "\x98\xfe\x30\xad\x6d\x72\x1e\xab\x0c\xce\xe5\x3c\xd6\xb8\x2a\xc9"
- "\x79\xd8\x62\x3a\xbd\xd4\xf9\xbc\x47\xfa\x74\xe7\x30\x9d\xee\xe3"
- "\x3c\xa6\xd7\x9e\x6b\xb9\xbc\xc7\xda\x23\xf2\x31\xbd\x36\x8b\xcb"
- "\x7b\xac\xe5\xed\x7f\xbf\xce\x43\x3e\xa6\xd7\x46\x3a\x87\xe9\xf4"
- "\xc9\x04\xd3\x6b\x35\x04\xd3\xe9\xe3\xda\x26\xef\xb1\xe6\xb0\x73"
- "\x79\x8f\x74\x9b\xf9\x6f\x73\xa6\x27\x44\x6b\x67\xce\x98\x31\x67"
- "\x7a\x92\x76\x4e\x5c\xec\xdb\xd3\x9f\xeb\x63\xf9\xff\x73\x81\xc9"
- "\x7d\x92\x3b\xa3\xe8\xf8\xa9\x53\xe6\x0d\xe2\x4e\xc6\x4d\x4f\x80"
- "\x7f\x3a\xa3\x98\xa9\x73\x62\xb4\x49\x0b\x12\xa7\x6b\xf1\xff\xe2"
- "\xdf\x4e\x84\x22\x33\x93\xb8\x23\x63\xa7\xc7\x4d\x4d\x8e\x4d\x78"
- "\x47\x3b\x35\x2e\xf6\x9d\x84\xf8\xe9\x09\x49\xda\xd9\xd3\x67\xcd"
- "\x8d\x9d\x3d\x1d\xff\x3d\x47\x3b\x63\xe6\x6c\x38\xf0\xf6\xf4\xd8"
- "\x79\xd3\xb5\xd3\xe6\xce\x98\x31\x7d\xf6\x9c\xce\x68\xd4\xdc\xb8"
- "\xa4\xd8\xc4\xb8\xe9\xda\x61\xa3\xc2\xfa\x8d\x1b\xfe\xda\xb8\xd0"
- "\xd0\xce\x88\xf7\xed\x69\x2d\x9d\x35\x4d\x0b\x18\x72\xbd\xa8\xfa"
- "\xc4\xb3\x0c\xd8\xe8\x5a\xc0\xe6\xba\xd9\x48\xbd\x7a\x36\x72\x5d"
- "\x75\x03\xb9\xaf\xbd\x81\x3c\xcc\x39\x6e\xb9\xda\x77\x91\x8e\xee"
- "\x3a\x2f\x71\xdd\x0d\xe4\x6d\xce\xfc\xd2\x40\x67\xee\x2a\x34\x74"
- "\xfd\x6b\x01\x2e\x4b\x77\xcd\xa9\xc0\xc7\xc1\x17\xae\x74\xe6\xbe"
- "\xa8\xf3\xaa\x8f\x4b\x0d\x5d\x73\xd3\x52\x2f\x21\x8a\xee\x92\x11"
- "\xbc\xcb\x6c\xa0\x0e\xe1\xb7\x1d\x60\x2b\xa4\xca\x8c\x80\x5f\x08"
- "\xfc\x6a\xe0\x67\x44\xaa\xf5\x23\xe0\x97\x08\xbf\x64\xf8\x55\x21"
- "\xd5\x47\xfe\xf0\x8b\x84\x5f\x34\xfc\xe0\xd8\x47\x6b\xe0\x97\x85"
- "\x54\x59\x70\x3c\x0b\xca\x66\xc1\xb9\xac\x44\x52\x4f\x16\x9c\xcf"
- "\xaa\x47\xaa\x6c\x2d\xfc\x82\xe1\x07\x75\xe6\x78\xc0\x2f\x17\x7e"
- "\x7e\xf0\x0b\x84\x1f\x1c\xcf\x19\x07\x3f\x5c\x76\x11\x39\xf7\xd7"
- "\x61\xf0\x4b\x83\x5f\x01\xfc\x0e\xc2\xcf\x80\x54\xb9\xae\xf0\x53"
- "\xc3\x4f\x03\x3f\x78\xbe\x5c\x28\x93\x0b\xf7\xca\xc5\xe7\xe0\x1e"
- "\x1b\x7c\xe1\x97\x04\xbf\x4a\xa4\xfa\x38\x00\x7e\xa5\xec\x0f\x8e"
- "\x7d\xbc\x8d\xf7\xff\xc3\xbc\xbf\xc5\x7e\x55\x5e\x4b\x1e\xd6\x17"
- "\x3d\x61\x84\x7e\x9b\xb9\x93\x5e\x8a\x54\x74\x66\x6e\x5a\xe2\x13"
- "\xc8\xe5\xb2\x2a\x73\x41\xf9\x32\x84\x68\xf5\xae\xc2\xa2\x85\x8d"
- "\xf8\xfc\x02\x6c\xb3\xba\xf4\xcc\x64\x3d\x4a\xd4\xe0\xfe\x29\x0f"
- "\x9f\x99\xc9\xec\xf5\xfb\xf5\x2e\x6a\x35\xbe\x9e\x5e\xff\x6c\x24"
- "\x9d\x1a\xf9\x09\x5e\x87\x0b\xf5\x47\xe0\x75\xba\x74\xc6\x33\x15"
- "\xb4\x7a\x70\x34\x8e\x31\x45\x0b\x99\xe7\x1a\x43\xfa\x23\x9c\x87"
- "\x67\x33\xf8\xb8\xe5\x42\xff\x73\xc5\xff\xa7\xc1\xe7\x74\x41\xbc"
- "\x3b\x89\x3b\xeb\x19\xfd\xd2\xe8\xf3\x7a\x04\x3e\xd7\xb0\x75\x00"
- "\xc4\x89\xb0\xdc\xa2\x84\x46\x54\xa5\xca\x1c\x05\x6d\xa3\x20\x06"
- "\x52\xf4\x63\x03\x90\x39\xe7\xf5\x88\x03\x80\x03\x5c\xee\xeb\x94"
- "\x6a\xfc\xef\x48\x7c\x9e\xce\x9a\xa0\xc1\x79\xa0\xa2\x94\x4f\x21"
- "\x2e\x67\x8e\x69\xf4\x89\x33\x68\xc7\x7a\xd1\xe7\xc9\xb3\xe1\x72"
- "\x55\x96\x67\x69\xf4\x71\x2b\xc0\xf5\xd3\xda\xf8\x42\x38\xe7\x6a"
- "\xce\xfc\x6b\x01\x3c\x87\xcb\x55\xb8\x8e\x86\x67\x2c\x1a\x8b\xef"
- "\xbb\xfe\x0c\x3c\x2b\x95\x3a\x06\xea\xfe\x34\xbe\x70\xf7\xc2\x7a"
- "\x0a\x9f\x33\x67\xb9\xe5\x02\xde\x3d\xe8\xf4\x75\x9a\x8f\xbb\x21"
- "\xd7\x4d\xeb\x11\xca\x5f\x8f\xdc\xeb\xd2\xd7\x9f\xd0\xbb\x6a\xab"
- "\x48\xec\xcb\x8c\xa0\xa0\x8c\x5e\xb5\xbe\x90\x06\xfc\x32\xf7\xf2"
- "\x1e\x93\x21\x7d\xaf\x8f\x7a\xdf\xb9\x57\xce\x98\x0c\x7c\x2f\xc6"
- "\x46\x70\x9e\xd8\x8a\xd4\x61\xde\x32\xa0\x10\xdb\x0f\xdb\xce\x52"
- "\x87\x39\xfb\xce\xf3\x86\xe1\xeb\xf5\xaa\x8f\xbc\xe9\xbf\x0d\x28"
- "\x34\xe7\x44\x16\xc2\xb5\x06\x7c\xde\x6b\x09\xaa\xa5\xe1\x5f\x7c"
- "\x7f\xe2\x0b\xb0\x3d\x95\x86\x70\xfd\x34\x7b\x8c\x86\x63\x70\xed"
- "\x24\xf3\x52\x2d\xc2\x63\x53\x8d\x2a\x8b\xc9\x4d\xd0\xea\x10\x7f"
- "\xe2\xe3\x8f\xf6\x2d\xa8\xa0\xcd\xf0\x33\x0d\xa8\x40\x2e\x45\x63"
- "\xb1\x7f\x3f\x3a\xa1\x1d\xdd\x11\x6c\xfc\xd1\xc9\x3b\xb6\xed\x1d"
- "\xbf\x0d\xec\xa3\xde\xd4\x0d\xfa\xfb\x8a\xce\xee\x34\xa5\x45\xd8"
- "\x3f\xd8\x56\x60\x27\x04\xc7\xdd\x31\x4e\xeb\xd2\xb3\x5c\xad\xec"
- "\xa5\x7e\x65\x4c\x2a\xcd\xab\xfb\x18\x4d\xfc\x16\xc1\x96\x0f\xd2"
- "\xbb\x74\x66\xc6\x16\xed\x23\x0c\xe6\xc6\xb0\x7e\x65\xb0\x85\xed"
- "\x47\xfb\x4c\xd3\xe2\xff\x8f\xef\x8b\xd4\x5e\x15\x88\xd2\xa6\xf8"
- "\xed\x27\x58\x98\xa0\xb1\xe0\x84\x69\x63\xce\x0b\x31\xa6\xa5\x30"
- "\xd6\xde\xc1\x5f\x56\xa1\x29\x33\x44\x0b\xe5\x2a\x1a\xb2\x23\x32"
- "\xe8\x8c\x10\x2d\x5e\x7f\x7e\x5e\x95\xb5\x9d\xb1\xc1\x52\x77\x44"
- "\x9e\x23\xc4\x2f\x25\x8e\x36\xa4\x5c\x87\x7b\x75\x9f\x50\xf1\xf5"
- "\x3c\x03\xf8\x2b\x22\x03\xe3\xe1\xc0\xed\x7a\x0a\xef\x09\x48\x77"
- "\x59\xf7\x4c\x3e\xb4\x75\x23\x60\x02\xda\x8a\x70\xbd\xf0\xec\x06"
- "\xae\xad\x59\x59\x18\x1b\x70\x8f\x60\x72\x6f\xa8\x77\x29\xdc\x23"
- "\x33\x24\xb8\x2e\x3d\x5b\xa3\x77\xd9\xb7\xcc\x62\x13\xe6\xde\x5c"
- "\x39\xb6\x2f\x65\x7b\x18\xba\x86\x04\x37\xcd\xa3\x2b\xd6\xfd\x0c"
- "\xf5\x2f\x45\x74\xe3\x6d\xba\x74\x51\x04\x5d\x9f\xfe\x3a\x9e\xe7"
- "\x78\x1a\xa5\x4e\x45\xbe\x0f\x2c\xa1\x0d\xe1\x26\xe4\xf5\xc0\x69"
- "\x2f\xfa\x58\xc4\x69\xe6\xdb\x08\x8b\x2a\xe8\xea\xb2\xc4\x83\x68"
- "\xd1\x05\xe4\xb1\x38\x16\x79\xa7\x46\x40\x5b\x4a\xe9\xfa\xf2\xe4"
- "\xd3\xa8\xac\x16\x7e\x89\xc7\xa0\xdc\x49\xf8\x1d\x44\xa9\x0b\x90"
- "\xeb\x68\x18\xf7\x52\x6e\x21\x8f\xb2\xc4\x5b\x70\xec\x0a\x5a\x14"
- "\x45\x1b\x8f\x95\xe2\x72\xc5\x28\xdc\x68\xf0\x5a\x7c\x05\x7c\xfa"
- "\x3a\x5e\xd3\x7d\x06\x6d\x82\x67\x69\xec\xfa\xa5\xbe\x21\x73\x5f"
- "\xcc\xcd\x79\xb4\x11\xda\x52\xa5\x47\xcf\x16\x09\xda\x82\x9f\xb9"
- "\x11\xe1\xbd\x9b\x5c\x70\x19\x73\x76\x78\xe2\x14\x23\x8e\x2f\xd9"
- "\x95\xc0\x3b\x90\xe5\x3c\x3e\x67\xf0\x09\x4f\xd4\xab\x72\x5c\xc3"
- "\x8d\x74\x1d\xb6\x0f\x6e\x37\xd8\x28\x88\x6d\x7f\x90\x2a\x11\xb9"
- "\xd6\xa5\xe7\x8c\xd0\xbb\xec\x8f\xc2\xf7\x80\x3a\x3b\xc0\x7d\x4e"
- "\x63\x6c\xb0\xe7\xa2\xf5\x2e\xff\xd8\xc6\xe1\xe5\x23\x2d\x60\xa4"
- "\x83\xe5\x59\xe0\xfc\x32\xbd\xcb\x57\x85\x3c\x3c\x61\x7c\xdc\x39"
- "\xcf\x8e\x67\xf8\x78\x95\x19\xc7\x56\xf5\xe0\x60\x93\xcf\x04\x2d"
- "\xed\xd3\x21\x90\xbe\xa9\xf1\xa0\x29\xba\x7e\xb4\x91\xae\x37\x67"
- "\x0f\xc5\x63\x99\x47\xb9\xb1\x16\x91\xf2\x7f\xed\x4b\x67\x77\x08"
- "\x26\x73\x48\xff\xda\x15\xd7\x09\xdc\xa6\x22\xfd\x06\x52\x87\x57"
- "\xd0\xf5\xb8\xff\x9a\xb3\xbb\x14\xa6\xcf\x46\xde\x74\xf6\x04\xb5"
- "\xd9\x67\xac\xb6\x61\x73\x3c\xc6\x57\x32\xc6\x2f\x9d\xd5\x21\xd8"
- "\x52\x0f\xdc\xd7\x0d\x6c\x50\x6d\x86\xeb\xe9\xac\xa1\x89\xec\xf3"
- "\x30\xf1\x90\xc4\xd1\x9c\x6a\xba\x0f\x9c\xcb\x18\x1c\x02\xe7\xdc"
- "\xce\xab\xfe\x9a\x04\xc7\x11\xfc\x3f\xa9\x28\xe5\x06\xae\x63\x01"
- "\xc1\xd0\xe0\x60\xc1\xff\x29\x6c\xcf\x8f\xe2\x70\xff\x27\x3c\xf4"
- "\xaf\x1b\xb8\x7e\xc7\xb4\x97\x22\x71\x72\x28\xf4\xbb\xbf\xee\xd0"
- "\xbb\xfc\x29\x8e\xb5\xb1\x4b\x2d\x89\x49\x06\xf3\xe6\x78\xf7\xef"
- "\xc0\x52\xdf\x95\x22\x04\x65\x2a\xf4\x2e\x3e\x69\x9c\x2d\xff\x7a"
- "\x09\x97\x65\x9e\x13\xfa\xa6\x79\x29\x3b\x06\xc0\x35\xd0\x6f\x8a"
- "\x70\xcc\x21\xb1\xed\xaf\x55\x38\xee\x40\xbf\xf3\x67\xe3\xfe\x4a"
- "\x78\xae\x45\x74\xb7\x99\x05\xf0\x5c\x69\xe7\xd9\x67\xe1\x3f\x9b"
- "\x25\xce\xd0\x99\x89\x5a\x52\x36\x44\x57\x97\x9e\x1b\xa1\x77\xe9"
- "\x1e\xc9\xc7\x1a\x69\x57\x6e\xf1\x80\x52\xf8\x1b\x78\x89\xa5\x2e"
- "\xe8\xab\xee\xd0\x47\xc7\x62\x4c\xe1\xfe\xb9\x61\x3d\xe6\x1a\x89"
- "\xfe\x0d\x99\x89\x81\x50\x4f\xae\xa5\x9f\x9a\xe7\xd1\x95\xe0\x57"
- "\x64\xbe\x4d\x9f\x58\x07\xbe\x0c\x37\xa9\xe8\x29\xa6\x00\x04\xbc"
- "\xd5\xb8\x09\x8e\x6f\x9a\x87\x79\x5f\xf6\x09\xe8\xcb\xee\xe2\x65"
- "\x5d\x11\x2e\xc7\x94\x67\xcb\x36\x76\x4d\xf4\x67\x9e\x99\x52\x99"
- "\xe1\xf9\x5c\x2c\xcf\xd4\xd8\x35\x24\xa0\x2e\x7d\x83\xb7\xde\xc5"
- "\x35\x4e\xd0\x5f\xd6\x07\x45\xd2\x74\x24\xc6\x95\xea\xa2\x6a\xc3"
- "\x10\xf8\xb7\x23\x8b\xe3\x07\xbe\x03\x5e\x3b\x6c\x14\xf4\x15\xf0"
- "\xf7\xc7\xdd\x69\xd0\x93\x1b\xc6\xe9\xd1\x94\x2c\x7c\xfd\x6a\xf8"
- "\x3f\x3e\x8e\xcb\xc0\xf1\x38\x3d\x8a\x62\x63\xca\x47\x69\xd8\x7f"
- "\x56\xf5\x66\x92\x7a\x99\x67\x79\x00\xd7\x89\xaf\xc3\x75\x6e\xcc"
- "\xa1\x6b\x70\x3d\x50\x47\xa1\xa5\xee\xb5\x70\xcc\x52\xff\xb0\xf8"
- "\x3b\xf7\xa8\x80\x7b\x78\xf0\x9f\x7d\x43\x0e\x5d\xcb\x3e\x57\x8d"
- "\x1e\xc5\x44\xe3\x73\xab\xe0\x18\xbe\x96\x60\xe4\xe3\x4e\x18\x3f"
- "\x7a\xd2\x1e\x15\xc1\xd1\xc7\x1a\x3d\x9a\x51\xc3\x8f\xf1\xe0\x27"
- "\x4f\xcb\x18\x40\xea\xfb\x38\xc4\x52\x1f\x57\x17\xa9\x83\xce\x98"
- "\xa5\x61\xfb\x08\xee\xcb\x1e\xb8\x7e\x28\x0f\xed\x9f\x16\xc4\xb6"
- "\x3f\xae\x96\x60\x1e\x6c\xcf\x5c\x43\xf0\x90\xbe\x2e\xca\x32\x96"
- "\x83\x2f\xfc\xe1\x9a\x02\xab\xb1\xc9\x1d\x8e\x6b\xd8\xfa\x0e\x82"
- "\x9f\x02\xf8\x6d\x25\x63\xca\x04\x1d\xc6\x14\x7b\xff\x05\xf8\x79"
- "\x2d\xe7\xe1\x1e\xae\x70\x8f\xd9\xb8\x1f\xe0\x7b\x98\xb3\x23\xa0"
- "\x9e\x4f\xac\xc7\x3f\x57\x5c\xce\x9c\xbe\xee\x73\x3c\x4e\x7e\xd4"
- "\x9d\xae\x86\x32\xfe\x96\x32\xf8\x3c\xd8\xfc\x79\x38\x06\xed\x8f"
- "\x67\x6c\x94\x0e\x65\x40\x67\x49\xae\x9d\x49\xe9\x8d\xa8\xf2\x3c"
- "\x3d\xd6\x95\xb8\xcf\x87\x94\xfb\xd6\xa2\xf2\x3c\x33\x32\xff\x2d"
- "\x30\x50\x97\x42\x17\x01\x57\x3f\x50\x56\x5f\x8d\xe4\x71\xc1\x4f"
- "\x98\xef\x5f\xd1\x8d\xa0\x7f\x16\x0d\x42\x98\x1b\x5c\x55\xe5\x5d"
- "\x2a\x37\xdc\x60\xe2\x1f\xfc\xcd\x70\x81\x8f\x40\x2f\x61\xcd\x04"
- "\xba\x38\x26\x83\x22\xba\xc9\x0c\x65\xf3\xf1\x71\xac\xa9\x40\xcf"
- "\x6d\xe2\x9d\xa3\xff\xd6\xbf\x90\xd8\x2e\x6f\x33\x33\x1e\xe2\xe7"
- "\x35\xbe\x54\x84\x9f\xd9\xbc\xa5\x7f\x21\x6e\x43\x6a\x32\x6d\x2e"
- "\x37\xd6\x15\x95\xd5\x9a\x90\x76\x1e\xd6\x7b\x79\x8b\xc3\x37\x22"
- "\x1a\xe2\x63\xa1\xbc\x36\xe4\x31\xeb\x1f\x40\x13\x5f\x35\xf4\xe9"
- "\x5f\x98\x6a\x42\xd4\xba\x14\x37\xf7\x17\xf2\xe8\xa2\x9b\x8f\x05"
- "\x42\x1c\xc8\x2b\x38\x04\x8c\x57\x3e\x4f\xce\x2b\xb0\xb4\x3d\x9f"
- "\x6d\x3b\x1c\x63\xf4\xca\x80\xdc\x34\xa6\xbd\xf0\x7f\x49\x7f\xd1"
- "\x4b\xbd\xe8\xef\xf2\x8c\x68\x4e\x1e\xdd\x38\x67\x23\xa2\x4c\x39"
- "\x2f\x18\x76\xe7\x57\xe2\x58\xaf\xb3\xd8\x93\xb1\x9d\xd1\x80\x12"
- "\x53\x90\xfa\xb2\x6a\xe3\x92\xf0\x45\x69\xcc\xf7\x93\xfe\x09\xe5"
- "\xe4\x3d\xeb\x46\xe6\xfb\x55\x65\xa0\xb1\xc3\x8d\xa9\x34\x19\xaf"
- "\x36\x6e\x1f\xcd\xd6\x87\xcf\x59\xfc\x97\xcf\x6a\x5f\x05\xf7\x90"
- "\x5c\xff\x6a\xa7\xad\x6a\xf1\xb6\xe6\xc7\x2b\x6f\x6b\x7e\xb0\x6d"
- "\x5b\xf3\xb3\x5b\xb6\xad\xf9\x92\xdf\x3f\xb0\xd3\x56\xad\x78\x5b"
- "\x37\xbd\xa1\xbc\xad\x9b\xfc\x6c\xdb\xba\x69\x49\xcb\xb6\x75\x93"
- "\xe4\xfb\x3f\x3b\x6d\x0d\x14\x6f\x6b\xc1\x70\xe5\x6d\x2d\x50\xdb"
- "\xb6\xb5\x20\xbe\x65\xdb\x5a\x90\x24\xd9\x56\xca\x8b\xc6\xf1\x09"
- "\xe2\x52\x63\x4a\x03\xf0\xbc\x9c\x37\x8a\x16\x6f\x46\x54\x69\x6d"
- "\x3d\x2a\xf3\xad\xc4\x1c\x9a\xea\x9f\x08\x71\x6f\x29\x0a\xa1\x73"
- "\xdc\x0a\xcb\xf2\x6a\xe0\xf8\x45\x74\x2c\xb9\x1e\xe9\x66\xe3\xf8"
- "\xbb\x79\x48\x79\xb4\xdc\xf8\xbb\xd9\xf5\x4e\xfc\x35\x0e\x62\x63"
- "\xee\xa7\xd3\xcb\x6a\x1a\x11\x6e\x3f\xfc\x3d\xe6\x4e\xfc\x5d\x4a"
- "\xec\x6d\x1d\x7f\xb1\x3d\xca\xeb\xeb\x05\xf1\x97\xac\xa1\xfa\xb4"
- "\x97\x75\xec\x4d\xbf\x8c\x90\x78\xec\xdd\xdc\x80\x63\x6f\x3e\x9c"
- "\x97\xf9\xfc\x87\x2d\xb1\x37\x03\xee\xc9\x8f\xbd\xdf\x45\xe3\xf1"
- "\xf5\x53\x5f\x65\xb1\xf7\x53\x5f\x4b\xbb\x37\xb2\xed\x86\x7b\xa5"
- "\x09\x63\xef\xa7\x92\x7b\x5d\xf2\x71\x4b\xe7\x3c\x5f\xb1\xfb\xa1"
- "\x7a\x37\xf3\x96\x40\x03\x1e\xdf\xea\xc0\x26\x5f\xe5\xd7\xbb\x82"
- "\x7d\x98\xb5\x10\x37\xeb\xa2\x5d\xe8\x2d\x03\x72\xc3\x93\xe8\xb3"
- "\x74\x9f\x40\x03\xce\x63\x62\x3d\x7e\x51\xf5\x59\x27\x7a\xeb\x80"
- "\x5c\x99\xcf\x7d\x82\x1d\xff\x02\x53\xa0\xbf\xec\x9e\x57\x4f\x99"
- "\xdf\x8f\xf4\x02\x3f\xa8\xe9\xec\x17\xd4\xf4\x0a\x4d\xc5\xcd\xec"
- "\xc8\xb4\x62\xff\x0b\x08\x97\xa5\x97\xb8\x86\x28\x7f\xfe\xcf\xb2"
- "\x9a\x79\xfe\x23\xf2\x9f\x9f\xd4\xe9\xd8\xf3\x7f\x96\xe5\xd0\xf3"
- "\x77\x87\xe7\x6f\x0c\x76\x03\x6d\x48\xfd\xb3\x31\xd8\x55\xde\xf3"
- "\x6c\xf1\x73\xc8\xc7\xce\xdd\xc3\xe1\xf8\x47\x77\x8f\x50\xef\xce"
- "\x37\x50\x10\x03\x98\x31\x1c\xf7\x3d\x12\xff\xaa\x21\x66\x9d\xa5"
- "\x49\x4c\x32\xc8\x8c\x49\x5b\x25\xbf\xff\x67\x7b\xff\x61\x89\xad"
- "\x70\x7f\xe9\xf6\x5b\xc7\xc4\x5d\x43\xd5\xd2\x31\xf1\x85\x44\xdb"
- "\x98\xf8\xb7\x51\xf2\x63\xe2\xdf\x34\xb6\x31\xf1\xf3\x05\x5c\x4c"
- "\xfc\x7c\xba\xf2\x98\xf8\xf9\x40\xc7\x63\xe2\xe7\x9e\xca\x62\xe2"
- "\xdf\x2a\xed\xc7\xc4\xcf\x03\x95\xc5\xc4\xcf\x03\x6d\x63\xe2\xdf"
- "\xb2\x84\x31\xf1\x73\xc9\xbd\x2e\xe8\x0c\x3f\x2d\x8c\xd1\x1e\x97"
- "\x55\xdb\x82\x8d\x4b\x41\xb7\x64\xe4\xe5\x86\x9b\xe8\x3a\x3a\xd3"
- "\x4f\x6b\xa6\x82\x70\x5c\xd1\xd5\xd5\xc5\xb8\x9b\xe7\xfb\x7b\xd0"
- "\xdd\x82\x2e\xd2\x4d\x1a\x04\x76\xf2\x83\xe7\xf7\xa2\xeb\xfc\xbb"
- "\xd0\xf3\xfd\xbb\xe5\xdd\x46\xde\xf0\xd3\xe4\xb1\xe3\x31\xfc\x1d"
- "\x48\xcf\xd7\x74\x4e\x9f\x87\x02\xbc\x6a\x91\x3b\x3c\x43\xa4\xd7"
- "\x12\x35\x82\x18\xe4\x8d\xff\xa6\x97\x6e\x09\xd9\x74\x1b\xb9\x7a"
- "\x25\x83\x6f\xba\xc2\xfd\x92\xbd\x68\x7a\x8e\x3f\xda\x34\x1b\x74"
- "\x36\x85\x34\xf9\x14\x5d\x68\xac\xf3\xa7\x4c\xde\x13\x02\x89\x7f"
- "\xb6\xd5\xd0\xdd\x41\x7b\x65\xbd\x6e\x34\x77\x7f\xbd\xca\x94\x1a"
- "\xa3\xa2\xdf\x8f\x54\xe1\x67\x35\x65\xbd\xae\xa7\x73\xe0\x97\x1a"
- "\xd3\x05\x73\x68\xd0\xe1\x81\x74\x9d\xa6\x33\x68\xf4\x80\xfc\x79"
- "\xc8\x6f\xe3\x6d\xe4\x4f\xdf\xf4\xa7\xc0\xff\x91\xf8\x3b\xa4\x60"
- "\xa3\x48\x33\xb5\x25\x04\xce\xb9\xe2\x98\x48\xe3\xfb\x1b\xe1\xfe"
- "\x4d\x70\xff\x46\x8c\x6d\xa4\xd9\x04\xf7\x37\xcd\xf7\x97\xd9\x5f"
- "\xb6\xed\x67\xf0\xc9\x3e\x97\x39\xe0\x15\x35\xbd\x0b\x7e\xf8\xb9"
- "\xc0\x86\x9b\xb0\x4d\xfa\xbf\xe2\x8d\x9f\x6d\xed\x6d\x14\x00\xcf"
- "\xe9\x07\xcf\xe0\x0f\xf7\xc5\x7b\xb8\x44\xbe\x35\x4b\x8d\x31\x2a"
- "\x78\x36\x53\x26\xfb\x6c\xd7\xe0\xd9\xae\x72\xcf\x86\xef\x85\xed"
- "\x23\xf5\x7e\x34\x7c\xf1\x43\xb8\x6f\xfe\xe6\x95\xdc\x71\x04\x7e"
- "\x57\x7a\xf3\xfd\x18\x99\x58\xdd\xbe\x4c\x0a\x2f\xeb\x76\x21\x5f"
- "\x5a\x9d\x93\x3b\x7a\xf9\x59\x3a\xdc\x88\xd0\xf2\x5d\x28\xa0\x1c"
- "\xfa\x75\x59\xfd\x15\x44\x77\xcd\xc9\x2d\xf6\xaf\x91\x7b\x2f\x83"
- "\xd4\xbd\x56\x2f\xa5\x2b\x9a\xfc\x70\x5e\x2c\x32\x79\x1d\x45\x27"
- "\x37\xfa\x0d\x28\x38\x7a\xa2\x11\x4d\x49\xc6\xef\x63\xe9\x64\xed"
- "\x44\xe4\x7e\x5e\x55\xb8\x25\xf5\x14\x7e\x77\xf4\x45\x92\xf0\xdd"
- "\xd1\x17\xb9\x48\xb5\x23\x04\xa9\x76\xc6\x21\xd5\xae\x5a\x04\xe5"
- "\xac\x7e\x01\xe1\xdb\x1f\x42\x29\x46\xfa\x37\x3a\xab\x43\x75\x3a"
- "\x45\xd7\x87\xf7\x75\xd1\x17\xcd\xc3\xef\x52\x76\x0c\x06\xfb\xfd"
- "\x0e\xe3\xaa\x17\xfe\x1b\xd7\x97\x38\x1b\xfd\xe9\xb2\x6a\x47\x90"
- "\x57\x6d\xc7\x11\x46\xef\xc8\x02\x23\x1d\x89\x9a\xb4\xf1\xa8\x21"
- "\x6b\x82\xba\x09\xe7\xed\xa6\xe1\x18\xf4\xf7\x7e\x5e\x2e\x69\x88"
- "\x06\xff\xd3\xb4\x06\xbf\x4f\x8c\xcc\x83\x1f\xf6\x25\xe3\xc7\x6e"
- "\xcf\xac\xc1\xfe\xc6\x7d\x61\x13\x39\xae\xc6\xfd\x61\x1d\xdb\x6f"
- "\x0c\xaa\x27\xa2\x4c\x14\x42\x26\xb8\x3e\xf5\x02\xf2\xc5\xdf\x9f"
- "\xdd\x08\xe5\xa6\x98\xdc\x71\x3f\x8e\x2c\x9a\xf8\x23\xba\x98\x88"
- "\xa8\xd4\xeb\xc8\x13\x30\xc1\xf4\x47\x33\xf4\xc7\xf0\xd3\x5e\xf5"
- "\x10\x57\xcc\x29\xb7\x90\x17\x8e\x53\xf8\x5b\x2e\xe5\x35\x7a\x64"
- "\xbe\xe6\xdf\xe5\x93\x04\xe4\x6d\xbc\x16\xd3\xcd\x70\x2d\xe6\x4f"
- "\x1b\xcc\xc8\xbb\x4b\x22\x52\x6f\x4c\x00\x2c\xce\x84\xfe\x79\x15"
- "\xfa\x67\x0d\xe9\x9f\x16\xfc\xd1\xab\x7f\x8c\xc4\x6b\xec\x99\xbe"
- "\x99\xc9\xf6\xcd\xf9\xfe\x38\x17\x76\x07\x7f\xc6\x99\xfe\xd4\x46"
- "\x8a\x46\xf0\x8c\x60\xf7\xed\xd1\x9b\x52\x3a\xba\xe3\xdc\x25\xfd"
- "\xd8\x40\xfc\xfe\x03\xda\x4a\x1b\x77\x83\x2f\xdc\xfa\x52\x5a\x3a"
- "\x3b\xb2\xe0\x68\x44\x35\xe2\xf2\x26\x85\x5b\x1b\xfb\x0c\x28\xd0"
- "\x8e\xa5\xaf\x9d\x57\xed\x08\x80\xe3\xee\xda\xd7\x1f\x57\x83\x1f"
- "\xb7\x92\x3c\x4b\xe1\x16\x9c\x4b\xd5\xab\x76\xe0\x1c\x32\xc2\xef"
- "\xe8\x7f\x60\xde\x7f\xed\x8c\x86\xb2\xc8\x04\x36\x37\x7a\x77\x08"
- "\x36\x7b\x4f\xd0\x15\xbd\xdb\xc8\xc4\xab\x26\xf0\xc1\xc5\x38\x44"
- "\x4d\xa9\x01\xdb\x98\xc0\x36\x75\xfe\x1e\x10\xb7\x22\x70\xdc\xa2"
- "\x33\x82\xf4\x8b\xf4\xb4\x39\x3c\x5a\x45\x83\x5d\xdc\xcb\x93\x4d"
- "\xe8\xad\x44\x44\x2f\xbe\x02\x36\xaa\xad\x44\xd0\xb6\x2e\x10\xdb"
- "\xba\x6d\x9c\x87\xbc\x3f\x01\xfb\x78\xd6\x00\xa7\x59\x9f\x9b\xb1"
- "\x2b\xa5\xc4\xcd\x04\x38\xc7\x71\xcc\x6b\x89\x4b\x27\xf0\x55\x97"
- "\x35\xb8\xdf\x42\x3f\xf6\x5a\xc2\xc4\x55\xc6\xb7\xc6\xf9\xfe\x8f"
- "\x34\xcd\xf7\xd7\xc2\xef\x21\x4b\xac\xb3\xc4\x19\x3a\x7d\x7b\x29"
- "\x8e\x73\xe5\xc9\x7a\x64\x04\x5b\x76\xc1\x63\xe2\x7c\x7f\x5f\xc6"
- "\xa6\xef\x80\x4d\x67\x20\xf7\x01\xf5\xc8\x05\x9e\x4b\x0d\xcf\x8c"
- "\x8e\xc5\x9c\xc7\xb1\x55\x63\x82\x7e\x84\xed\x0c\x75\x52\x34\x60"
- "\xcd\x9c\xd5\x21\x78\x54\xac\x16\x15\xfb\x9f\x44\x78\x1f\xd7\xd4"
- "\x06\xfa\x1c\x7e\xff\x56\x9e\x6c\x44\xb4\x4f\x64\x01\xc9\x9d\xef"
- "\x70\x3d\x1a\x51\x8f\xa4\x31\xbd\xeb\x0a\x87\xe9\x5d\x57\x38\x4c"
- "\xef\x62\xe6\x60\xf1\x71\xdd\x50\x00\xb8\xf6\xe6\xe3\x7a\x97\x5b"
- "\xab\xe2\x7a\xb4\x7c\x5c\x6f\xb8\xca\xc3\x75\xca\x1f\x83\xeb\x1f"
- "\x22\x19\x5c\xab\x9a\xfa\x30\x78\x75\x2f\x37\x7e\x09\xfc\x77\x57"
- "\xa5\x05\xb7\x47\xbe\xc0\xb8\x2d\xf4\x6d\xaf\xb8\x6d\xa8\xf3\xd7"
- "\xc2\xaf\xc5\x71\x0b\x75\x3a\x8c\xdb\x1f\x22\x1b\x91\xc5\x7e\x18"
- "\xbf\x74\x46\x4e\xae\x36\x15\x85\x82\xdd\xb6\x78\x2d\x79\x08\x1d"
- "\x23\x36\xdc\xa2\x7d\x9d\x36\x43\x8c\x60\xf6\x40\x68\x5c\x4a\xd3"
- "\x66\xef\xb1\xda\xd4\xe3\x48\x6d\xce\xea\x52\x58\x6e\xdc\x89\xbc"
- "\x12\x91\x2b\x7e\xff\x49\x77\xdd\x17\x05\x3a\x9c\x79\x07\x6d\xce"
- "\xcc\xa9\x30\x65\xe6\xa6\x99\x20\x9e\x98\xb2\xa7\x69\xcd\x99\xf3"
- "\x12\xcd\x5d\x77\x15\xd2\x78\x4e\x42\xd7\xbf\x16\xd4\xa5\x17\x6e"
- "\xb1\xbc\x2b\x17\xe5\x46\xde\xd3\xb4\xd0\x5f\x40\x53\x7d\xd9\x0b"
- "\xfe\xa5\x2e\xaa\xf6\x3c\x07\xff\xaa\xe0\x5f\xe6\xbd\xa9\xbc\x71"
- "\xae\xb0\x92\xbc\x73\x8a\xdc\xcb\xc6\xc1\x53\x4c\x1f\x7c\x02\x79"
- "\x5e\x66\xff\xae\x4b\xdf\x13\x64\x79\xf7\x7e\xa7\x3c\x67\x8f\x0a"
- "\x7c\x6f\xb0\x89\x2b\x99\x0f\x40\xfe\x8f\xe7\xda\xb0\xf5\x31\xff"
- "\x37\xfb\x85\xe5\x16\xa5\x9c\x47\x35\xaa\x3d\x05\xe5\x30\xf6\x9b"
- "\x73\x22\xf7\xae\xbb\x0d\x78\x4c\xbe\x13\x7f\x4f\x75\x01\x7f\x17"
- "\x2d\x64\xca\x30\xfb\x91\x9a\xb3\xc2\xd3\xe8\x9c\x0e\x85\x58\x43"
- "\xd6\xd1\x31\xcf\xb3\xff\x3e\x87\xb1\x4d\xf2\x2d\x7b\xae\xd0\x60"
- "\x3f\xfc\xfd\xf5\x3b\xf3\x8f\xf0\x77\xd1\xd3\x5c\x7d\x0f\x2d\x22"
- "\xe3\xad\xe5\x79\xf1\xb7\xd3\xf1\xfc\x9e\xc7\xd3\x50\x5a\x9d\xc8"
- "\xb7\xd3\xb9\x79\x40\x7b\x2a\xcd\xd9\xe1\x69\x75\xe9\x5f\xfa\xeb"
- "\x55\x5f\x04\xf2\xdb\x2c\xe6\x0b\xbd\xea\xcb\x61\x52\xe7\xe4\xf9"
- "\xe1\xcb\x28\xa9\x7a\x86\xfb\x9b\x68\x99\x75\xed\x90\xe4\xd5\x7e"
- "\xfd\x03\xc3\xb7\x99\x8a\xcc\x4d\x91\x5e\xc5\x8b\xae\xc8\xe4\x44"
- "\xff\x4f\x72\xfe\x9b\x29\x6b\xac\xce\xf8\x18\xd4\xdd\xf7\x21\x64"
- "\x9a\x19\xf9\x12\x7e\x07\x82\xb9\xde\xe2\x58\x32\x67\xac\x74\x9b"
- "\x11\x61\xde\xb7\x3d\xa1\x84\x6a\x6c\x8a\x44\x5d\x0c\x48\x3d\xba"
- "\x36\x95\x5e\x77\x15\xf9\xd1\xf3\x23\xbd\xd6\x5c\x45\x21\x4d\x37"
- "\x35\x9d\x3f\x9c\x8d\x5c\x1b\x21\x26\x37\xce\x89\xf1\xc2\xf3\xd3"
- "\xbe\xbd\x5c\x44\x95\x1b\xf7\x63\x9e\xe9\x87\xc7\x01\xfc\xec\xa6"
- "\x9b\x91\x5d\x56\xdd\x40\xcc\x7b\xe5\xa2\x69\x9f\xc2\x38\xb0\xb7"
- "\xab\xdb\x62\x88\x7d\x10\xbb\x98\xf1\x40\xc1\x58\xd0\x08\x63\xc1"
- "\xa8\x48\xba\xbe\xac\xf2\x47\x94\x7a\x05\xa9\x53\xe7\x22\x4f\x5c"
- "\x7f\xb9\xf1\x1b\x32\x3e\x8c\x87\xf1\x01\xfe\x0f\x5a\xe2\xce\xf8"
- "\xa0\x1d\x8d\x6c\xc6\x07\xac\x43\xca\x4e\x57\x23\xc0\x72\xc7\xd1"
- "\xb5\x5e\xf5\x29\xb5\xb4\x19\x6b\x12\xfc\x0e\x1b\xca\x74\xb1\x8c"
- "\x15\x78\x9c\x68\x64\xc7\x89\x8d\xec\x38\xf1\x71\x0b\x8c\x13\x1f"
- "\xe3\x71\xe2\x24\xa2\x36\xe0\x31\x02\xc6\x87\xbf\xff\x62\xa0\x9a"
- "\x60\x4c\x90\xe7\xe7\xbd\x35\x92\xf8\xc9\x89\xfc\xc0\x0c\x63\x31"
- "\xf6\xf3\xfb\xe0\x5f\xec\xe7\x72\x7f\xf0\x6d\x65\xc7\x11\x0d\x70"
- "\xdc\x98\xf3\xbc\x61\xdb\x45\x03\x45\x67\xbd\xa0\x6e\x00\x3c\x2c"
- "\xbc\x85\x28\xa3\xf7\x58\xdd\xce\xd7\x33\x28\xac\x5b\xcd\xd9\xa1"
- "\x41\x44\x23\x7f\x35\x15\xe7\x68\xbc\xaa\x91\x1a\xe7\x4f\x4d\x74"
- "\xa4\x97\xf9\xf7\x48\x4f\xf3\x7b\x1a\xf7\xa6\xdf\x35\x9d\x57\xbf"
- "\x8b\x5c\x0d\xef\xc5\x78\xa5\xbe\x81\xd4\xff\xfc\x4f\x06\x55\x56"
- "\x0b\x7d\xbb\xc3\x77\x01\x34\xd4\xbf\xe9\x3c\x0a\xde\x34\x0d\x05"
- "\xe5\x5f\x44\xda\xfc\x19\x28\xe0\x93\x8b\x80\xa1\xf7\x22\xbb\x34"
- "\x31\xf8\x68\x28\x62\xe6\x04\xcc\x40\x3a\xba\x7b\x98\x01\xfe\x0d"
- "\xce\x98\x81\x98\xbd\x1f\x69\x9f\xb1\x3a\x33\x94\x5b\x03\xda\x0d"
- "\x38\x3a\x3c\xc3\x3f\x5e\x16\xc3\xcd\x27\x32\x39\xc4\xa8\x08\xc0"
- "\x4d\x05\xe0\xe6\xba\x10\x37\x58\xb7\x32\xd8\x19\x45\xb0\x83\xdf"
- "\xf9\x6d\xe2\xf3\x8b\x69\x47\x15\xe3\x27\x0f\xf8\x73\x83\x15\x7e"
- "\xf2\xae\x3a\x87\x9f\x26\xc0\x4f\xde\x52\xc0\xcf\x31\x44\xe5\x9a"
- "\x9d\xc1\xcf\x57\xcc\xfe\x17\x38\xcf\x47\xe6\x0a\xed\x5b\x85\xfd"
- "\xac\x57\xed\x5b\x39\xde\xdf\x05\x29\xc3\x55\x68\x62\x33\xb8\xda"
- "\x4b\x70\x75\xe0\x80\x02\x5c\x2d\xa3\xa1\x7e\xfb\xb8\xba\x25\x81"
- "\xab\xd0\x44\x5b\x5c\xed\xdf\xdc\xb6\xb8\x62\xf6\xed\xfc\x3f\x80"
- "\xab\x03\xcb\x84\xb8\xfa\xea\x1c\xc1\xd5\x57\x7a\x27\x70\xd5\x4c"
- "\xbc\xd2\xb1\xf1\xea\x60\x57\x05\xb8\x3a\x0d\xb8\x6a\x26\x5e\x5d"
- "\x91\xc2\x95\x48\xbc\xfa\xba\xa1\x6d\x71\xc5\xec\x2b\xfa\x7f\x00"
- "\x57\xff\xdf\x69\x21\xae\xbe\x1e\x42\x70\xf5\x75\xb0\x72\x5c\xe9"
- "\x9a\x89\x57\x3a\x36\x5e\x7d\x1b\x2b\x1f\x57\x87\x83\x68\xa8\xdf"
- "\x3e\xae\xce\x48\xe0\x4a\x27\x12\xaf\xbe\x19\xd3\xb6\xb8\x62\xf6"
- "\x3d\xfd\x3f\x80\xab\x6f\x83\x84\xb8\x3a\x98\x49\x70\x75\x30\xc3"
- "\x09\x5c\x35\x13\xaf\xc2\xd8\x78\x55\x74\x48\x01\xae\xd6\x00\xae"
- "\x9a\x89\x57\xdf\x48\xe1\x4a\x24\x5e\xfd\x73\x7b\xdb\xe2\x8a\xd9"
- "\x97\xf5\xff\x00\xae\x8a\xd6\x08\x71\xf5\xed\x25\x82\xab\x6f\xab"
- "\x95\xe3\x2a\xac\x99\x78\x15\xc6\xc6\xab\xef\x7a\x28\xc0\x55\x15"
- "\x0d\xf5\xdb\xc7\xd5\x62\x09\x5c\x85\x89\xc4\xab\x7f\xb9\xb4\x2d"
- "\xae\x98\x7d\x63\xff\x0f\xe0\xea\x5f\x55\x42\x5c\x1d\x0a\x23\xb8"
- "\x3a\xa4\x73\x08\x57\xf5\x3c\x5c\x9d\xee\x38\xa2\x31\x95\xe8\xc1"
- "\xed\x33\x58\x5c\xfd\xad\x7f\xe0\xfb\x73\x11\xb5\x73\x62\xae\x95"
- "\x16\x2c\x9e\x6e\x8d\x29\xc0\x05\x83\x29\xe3\x7b\x80\xa9\xcb\x04"
- "\x53\x29\x67\x00\x53\x3f\xe7\x52\xe5\xc9\x57\x30\x4e\x18\x0c\xe5"
- "\xcd\x00\x0c\x61\x5d\xe8\xe2\xea\x2d\x47\x03\x7e\x78\xd9\x82\xa5"
- "\xc3\xa3\x5a\x04\x4b\xe3\x00\x4b\x27\xac\xb1\x54\xcc\x61\x69\x8c"
- "\x84\x06\x7c\x4b\x02\x4b\xfa\xe6\xb1\xf4\x09\xce\x21\xcc\x6c\x25"
- "\x2c\x1d\xe7\x72\x08\x3b\xa6\x19\x28\xa3\x8f\x5c\x2c\x15\x07\x0a"
- "\xb1\xf4\x5d\x36\xc1\xd2\x77\x59\xca\xb1\xa4\x4b\x94\xc6\x92\x85"
- "\x4f\xfd\xef\x1e\xe7\xb0\x04\xdc\x4a\x80\xa5\xe6\x79\x14\x87\xa5"
- "\xef\x37\xb4\x2d\x96\xac\x78\xd4\x3d\x8b\xa5\xff\x5d\x24\xc4\x52"
- "\x31\xab\xfb\x8a\x25\x75\x9f\x19\xc6\x2e\xfc\xce\x09\xaf\xc1\x35"
- "\xdd\x8c\x7c\xc9\x04\x63\x1a\x5e\x8b\x8b\xdf\x53\xec\x4e\xa8\xa0"
- "\x30\x9e\xd2\x6f\x20\xbf\x35\xb3\x51\x88\x57\x3d\xc1\x8a\x11\xb0"
- "\xb2\xf2\x06\x72\x6d\x6a\x02\x9c\x34\x22\xd7\x06\xb0\x77\x43\x53"
- "\x8c\x57\x69\x54\x35\xfa\xe7\xd5\x0a\x18\xcb\xf6\xa3\x7c\xb8\xa6"
- "\x89\xcd\x43\x9a\xdf\x8f\xec\xb2\x6a\x21\xce\x43\x1e\x43\x45\x13"
- "\x3f\x06\xff\x97\x38\xed\xff\x86\x0f\xa4\xfc\xff\x8d\xc0\xf7\x79"
- "\x3c\xbf\x6b\x5f\x51\x9e\x87\x64\xde\x53\x25\x10\xdf\x5b\xfc\xbe"
- "\xa1\x05\xfc\xbe\x81\xf5\xbb\x73\xe3\xd1\x11\xe9\xf9\x8f\xbc\x58"
- "\xc1\xcc\x29\xa8\x27\x31\xc2\x12\x17\x70\x8c\xc0\xfc\xa5\xc1\xfb"
- "\xf9\x5a\xeb\xf1\x06\xc7\x87\xab\xaa\x1f\xce\xe1\xb1\x49\x92\xc7"
- "\xb0\x71\x22\x75\x01\x89\x13\x84\xc7\x14\x87\xb4\x6c\xfe\xf1\xe8"
- "\x91\xd6\x8b\x17\xdf\x34\x3f\xf6\x38\xc1\x63\x30\x6e\xf2\xac\x70"
- "\xd3\x1a\xf1\x42\x19\x6e\x7e\xd8\x21\x8c\x17\x47\x3b\x91\x78\x71"
- "\xd4\xdd\x91\xb1\xc7\x3e\x9e\x42\x93\x78\x78\xda\xcb\xe1\xa9\x6c"
- "\x20\xce\x51\xca\xc4\x53\x46\xcb\xe6\x1d\x8f\xf5\x68\x5b\x3c\xb5"
- "\x5c\xde\xb1\x7d\xe3\xe9\x98\x51\x88\xa7\xd2\x37\x08\x9e\x4a\x23"
- "\x5b\x00\x4f\xbc\xf8\xa4\xe3\xc5\xa7\x8a\x25\x38\x37\x29\x13\x4f"
- "\x55\x2d\x9b\x6f\x2c\x8f\x6d\x5b\x3c\xb5\x5c\xbe\xb1\x7d\xe3\xa9"
- "\x62\xa4\x10\x4f\x65\xdb\x09\x9e\xca\xb6\x39\x8f\x27\x5d\x92\x35"
- "\x27\x26\x78\xfa\xf1\x38\xe6\xcf\xf2\xf0\xf4\x7d\x70\xcb\xe6\x19"
- "\x8f\x1f\x68\x5b\x3c\xb5\x5c\x9e\xb1\x7d\xe3\xe9\xc7\x3c\x21\x9e"
- "\x2a\x1a\x08\x9e\x2a\xea\x5b\x00\x4f\xbc\xf8\x14\xc6\x8b\x4f\x27"
- "\x7b\xe3\x5c\xa4\x4c\x3c\xb5\x70\x7e\xf1\x44\xa7\xb6\xc5\x53\xcb"
- "\xe5\x17\xdb\x37\x9e\x4e\xd4\x08\xf1\xf4\xef\x97\x09\x9e\xfe\x3d"
- "\xc2\x79\x3c\x85\xf1\xe2\x53\x18\x2f\x3e\xfd\x34\x0b\xe7\x20\x65"
- "\xe2\x49\xdf\xb2\x79\xc5\xff\xbc\xd1\xb6\x78\x6a\xb9\xbc\x62\xfb"
- "\xc6\xd3\x4f\x21\x42\x3c\x9d\xdc\x40\xf0\x74\x32\xd7\xd1\x5c\x90"
- "\x25\x07\xc4\xc7\x93\xb4\xb6\x3b\xb5\xcf\x5a\xdb\xc9\xcb\x01\x81"
- "\xce\x53\x9c\x4f\xac\xdc\x78\xb7\xe6\x13\x31\x86\x2c\x79\xa0\xf6"
- "\x97\x03\x3a\x95\x26\xc4\xd0\x4f\x17\x08\x86\x7e\xaa\x92\xc2\x90"
- "\x91\x3f\x27\xed\x37\xde\x9c\xb4\x2b\x88\xda\x99\x50\x44\x95\xb1"
- "\x73\xd2\xf0\x7c\xb4\xb2\xaa\x6a\xb4\xea\x36\x52\x77\x89\x41\xea"
- "\xd1\x89\xa9\xf4\x3a\x1c\x43\xe6\x44\x7a\x7d\x78\x11\x85\x34\x01"
- "\x66\xd2\x2f\xb3\xf3\xd2\x00\x37\x3f\x9c\xae\x47\xdf\x26\xe0\x79"
- "\x69\x85\x68\x13\x94\x33\x66\x91\x7c\x10\x8e\x23\xcc\x9c\xb4\x19"
- "\x78\x4e\xda\xcf\x5b\x45\xe7\xa4\x2d\x95\x39\x27\x2d\x09\x70\x50"
- "\x0b\x38\xb8\x85\x31\xb0\x4f\x30\x17\xed\x93\xa5\xbc\x1c\xd0\x34"
- "\x89\x1c\x50\xa5\x63\xef\x24\x5a\x7c\x2e\xda\x35\xde\x5c\x34\x4b"
- "\x0e\x68\x22\xc4\x0e\xd9\x7e\xff\x6f\xb2\xbd\x1c\x90\x09\x62\xc2"
- "\x68\x3c\xb7\xbc\x96\xcb\x17\x2f\x8a\xc5\x6b\x7f\x9f\x37\x18\x21"
- "\x56\xe0\xf9\xe3\xbb\xa6\x95\x30\xf9\xbe\xf2\xe4\x4a\xb4\xaa\x11"
- "\xa9\xbd\x0c\x6c\x5c\xf0\x09\x0d\x6a\x82\xd8\x60\x82\x71\x09\x7c"
- "\xed\xd9\x34\x07\x62\xc3\x0d\x88\x0d\x73\x20\x36\xdc\x82\xd8\x70"
- "\xbe\x84\x89\x0d\xf4\x8a\xef\x02\xf0\xfe\xdb\x9b\x2e\xa3\xa0\x8d"
- "\x97\x51\x30\x8e\x01\xa6\xec\xb1\xba\x26\x9f\x50\x6f\x83\x4f\xa8"
- "\x06\xce\xf9\x13\x0c\x34\x14\xad\x99\x8d\x98\x58\x8f\x7d\xaf\x9d"
- "\x81\xe3\xc1\xe9\x9d\x4d\x4b\x11\x72\x06\x07\x4d\xfc\x9c\x20\x1f"
- "\x07\x12\x31\xc0\x69\x2c\x58\xe5\x81\x3f\x71\x32\x06\x60\x2c\x7c"
- "\x62\x89\x01\x4e\x61\xe1\x8c\xe4\xfa\x1f\xfb\x58\x08\x4d\x74\x00"
- "\x0b\x7b\x1d\xc4\xc2\x32\xbc\x6f\xb5\x08\x16\xb2\x00\x0b\xb9\x70"
- "\x6e\x1b\xc1\xc2\x2d\x11\x2c\xfc\x72\xa0\xf5\xb1\x20\xcc\xc9\xdc"
- "\xbb\x58\x38\x2b\xf9\xfd\xd7\x66\xb0\xe0\x40\x5c\xd0\x39\x1a\x17"
- "\x4e\xe3\xfd\x9e\x6d\xb1\xa0\x83\xb8\xa0\x83\xb8\xa0\x63\xe3\xc2"
- "\x15\x11\x2c\xe8\x8b\x5b\x1f\x0b\xc2\x7c\xca\xbd\x8b\x85\x73\xd2"
- "\xfb\x5f\xd8\xc5\x82\xce\x81\xb8\xa0\x73\x30\x2e\x1c\x0e\xc2\xfb"
- "\x24\x8b\x60\x01\xe2\x82\x0e\xe2\x82\x8e\x8d\x0b\x67\x44\xb0\x70"
- "\xfe\x78\xeb\x63\x41\x98\x0b\xb9\x77\xb1\xf0\xeb\x36\x85\x58\x70"
- "\x20\x2e\x84\x39\x18\x17\x0e\xaf\xc1\xfb\x0b\xdb\x62\x21\x0c\xe2"
- "\x42\x18\xc4\x85\x30\x36\x2e\x7c\x23\x82\x85\xaa\x33\xad\x8f\x05"
- "\x61\x1e\xe3\xde\xc5\xc2\x05\xc9\xef\x9f\xd8\xc7\x42\x98\x03\x71"
- "\x21\xcc\xd1\xb8\x50\x85\xf7\xe5\x15\xc1\x02\xc4\x85\x30\x88\x0b"
- "\x61\x6c\x5c\x58\x2c\x82\x85\x8b\x97\x5a\x1f\x0b\xc2\x1c\xc4\xbd"
- "\x8b\x85\xdf\x8a\xec\x62\x81\xb6\xc5\x02\xce\x21\x60\xfd\x88\xf7"
- "\xbd\x66\xb0\xf0\x6e\x11\xd5\x48\x63\x2c\x94\xa0\xd5\x0b\x79\x58"
- "\xc8\x26\x3a\xc2\x82\x83\xb5\x7c\x1c\xe0\xf5\x4b\x18\x07\xa0\x1f"
- "\x8c\xe0\x77\x3a\x27\xcc\xc0\xcc\x57\xca\x0e\xf5\xc7\xfa\x01\xe7"
- "\x19\xb0\x86\x90\xd6\x0f\xd5\x57\x5a\x04\x03\x71\x80\x81\x1a\x71"
- "\x1d\xd9\xe2\xfa\xe1\x5a\x2b\x61\x00\xb4\xe4\xc7\x29\xce\x60\xe0"
- "\xd2\x61\xf9\x18\x00\x8e\xe0\x10\x06\x08\x4f\xb0\x8f\x01\x5d\x06"
- "\x87\x01\xe0\x0b\xd9\xba\x6d\x98\x1f\x10\x0c\xe8\x72\xa5\xf9\xc1"
- "\xe5\xeb\xad\x8f\x81\x16\xe6\x07\xed\x16\x03\xbf\x97\x48\xae\x61"
- "\xc4\xb1\x1c\xe2\xfe\xe8\xbe\x0f\x21\xfa\xbd\xc8\x97\xd2\x2f\x23"
- "\xbf\x0f\xdf\x45\x21\x78\xdf\x98\x9d\x8d\xf5\x54\x4a\x22\xfd\x1b"
- "\x5e\x5b\x6d\x84\x76\xe0\x7d\x44\x19\x7c\x5c\xd3\xb8\x97\xc7\x18"
- "\xd0\x2a\xc0\xc2\x87\xd0\x06\xbc\x47\x7c\x97\xc4\x8e\x23\xca\x6a"
- "\x8f\xa2\xc6\x9b\x91\xa8\x34\xea\x32\x0a\xf7\xa7\x9b\xca\x4f\x17"
- "\xe1\x35\x8c\xae\x45\xf3\x8e\xe2\x75\xe2\x9d\xa7\x24\x23\xea\xaa"
- "\xaa\x66\x0d\xce\x29\x0d\x48\x46\xea\xbc\xcb\x24\x8f\xb4\xea\x2a"
- "\x42\xc5\xc9\x08\x11\xbf\xd7\x5c\x72\x5b\xd0\x02\x39\xa4\x49\xe0"
- "\xf7\xd3\x16\xbf\x17\x0b\x73\x48\x94\x03\xeb\x19\x1d\xc8\x1d\xb6"
- "\xca\x7a\xc6\x6b\xb6\xeb\x19\x95\xe5\x0e\xaf\x1c\xb4\x3b\x8f\x88"
- "\xe5\x01\xef\x27\x31\xfd\x9e\xf1\x6b\x13\xc4\xfe\xf2\xe4\xfd\xcc"
- "\xfc\x68\xdc\xcf\x71\x9f\xc7\xf8\x48\x85\xf6\x62\x8c\x60\x3c\x8c"
- "\xde\xd6\xd4\xf4\x56\x2d\xa2\xcc\x3e\xa1\x41\x18\x13\xe6\x99\x1a"
- "\xf7\x35\xd0\xa6\xf2\xa8\xf3\xe0\xf7\x1b\xa8\xbc\x8a\xf5\xf9\xc2"
- "\xf3\xe0\xcb\xab\xc9\xf4\x4c\xff\xce\xfd\x6b\x91\x3a\xf5\x14\x52"
- "\x4f\xc1\x6b\x8e\x61\x1c\xf8\x04\x38\xc1\xa6\x77\x11\xc4\x82\x50"
- "\x75\x13\x1b\x1b\xcc\x96\xbc\x12\x1e\x23\x00\x13\x1f\x26\x00\x26"
- "\x92\x00\x13\x6f\x61\x4c\x5c\x35\xb9\xcd\x15\xc9\x2f\xcb\xc0\x04"
- "\x93\x5f\x8e\x06\x4c\x54\x71\x98\xb8\x93\x57\x96\x18\x13\x8a\x26"
- "\x3a\x31\xb7\x50\x24\x1e\x38\x9d\x57\xbe\xc6\xe6\x95\x79\xf1\x40"
- "\x19\x36\xae\x49\xef\x89\x29\x89\x8d\xd0\xc4\xe6\xb1\x51\x67\xc1"
- "\xc6\xde\xe6\xb1\x61\xc8\x12\xc1\xc6\x32\x1e\x36\x32\x78\xd8\x20"
- "\x79\xa6\xec\xd0\x6d\xb6\xd8\xb8\xde\xa3\x6d\xb0\x61\x35\xef\xe7"
- "\x9e\xc5\xc6\xf5\x5a\x05\xd8\x70\x20\x6e\x5c\x63\xb1\xa1\x73\x20"
- "\x6e\xdc\x28\x14\xc1\xc6\x69\x0e\x1b\x3a\x5e\xdc\x60\xf3\x4e\xd9"
- "\x3a\x91\xb8\x71\x73\x70\xdb\x60\xc3\x6a\x0e\xcf\x3d\x8b\x8d\x5a"
- "\xc9\xef\x1f\x4b\x63\x43\xe7\x40\xdc\x38\x6b\xc1\x86\x03\x71\xa3"
- "\xb6\xd4\x16\x1b\x87\x83\x78\xd8\xe0\xc5\x0d\x36\x0f\x85\x39\xa7"
- "\x0d\x36\x6e\x8d\x69\x1b\x6c\x58\xcd\xc7\xb9\x67\xb1\x71\x3b\x40"
- "\x01\x36\x1c\x88\x1b\xff\x64\xb1\x11\xe6\x40\xdc\xb8\x5d\x2d\x82"
- "\x8d\x35\x1c\x36\xc2\x78\x71\x83\xcd\x4b\x65\x87\x89\xc4\x8d\xba"
- "\xf8\xb6\xc1\x86\xd5\xdc\x9a\x7b\x16\x1b\xf5\x23\xe4\x63\x23\xcc"
- "\x81\xb8\x91\x6a\xc1\x86\x03\x71\xa3\xc1\x55\x04\x1b\x55\x3c\x6c"
- "\xf0\xe2\x06\x9b\xa7\xca\x0e\x13\x89\x1b\x0d\xab\xda\x06\x1b\x56"
- "\xf3\x64\xee\x59\x6c\x34\x46\x3b\x82\x8d\x45\xb5\x22\x3a\xa5\x8a"
- "\x60\xa3\x09\xca\xf0\x71\xc1\xd7\x26\xd0\x3e\xd7\x70\xd0\x2c\x18"
- "\x13\x93\x17\x21\x8a\xc1\x45\x2d\x1f\x17\x4d\xbe\x18\x17\xfd\x62"
- "\x00\x17\x17\x58\x5c\x58\x74\x09\xb3\xf7\x0a\xd1\x26\x96\x9c\x95"
- "\x45\x9f\xac\xc6\x9a\x35\xc6\x82\x89\xa6\x8d\x6e\xb1\x2d\x80\x09"
- "\xc1\xbc\x07\x1e\x26\xde\x90\xd0\x27\xaf\x2b\xc7\xc4\xc7\xa0\x5d"
- "\x9b\x5a\x7a\xed\x93\x05\x13\xa7\x9c\xc5\x84\xd1\xee\xfc\x07\x71"
- "\x4c\xb0\x3c\x43\x12\x13\x1c\xb7\x20\x98\x38\x6b\x07\x13\xa6\x40"
- "\x5b\x4c\xb0\xbc\x82\xd9\x87\x80\x70\x0b\x4b\x0e\xcb\xc2\x2f\x84"
- "\x98\x30\xed\x69\x1b\x4c\x58\xf1\x8b\x7b\x16\x13\xe6\x35\x92\x39"
- "\xac\xa5\x88\xda\xb8\xd4\x5c\x98\x41\x99\xf7\xc3\xaf\x08\x7e\x25"
- "\x70\xcc\x0d\x8e\x55\xe0\x6b\xe0\xff\xcc\x39\x73\x67\x66\xef\xe1"
- "\x22\x2f\x97\x28\x6c\x6f\x5c\xa6\x83\xa5\x8c\xd7\x12\xa4\xdb\xc4"
- "\xd6\x01\xc7\xd3\xe0\x78\x51\x17\x17\x5d\x07\x28\x5f\x42\xa7\x7f"
- "\x19\x05\xc7\x3a\xe2\xb2\xf4\x12\x57\xb2\xf7\x31\x45\xe1\x3a\xac"
- "\xef\xe9\xce\x96\xf1\xe5\xdf\xd7\x73\x89\x0e\xef\xe5\x67\x29\xd3"
- "\xc9\x4c\x9d\xdd\x82\xcb\x99\x5d\x5c\xb5\xe6\xa5\x48\xcb\x2f\x4b"
- "\x0f\x45\xb8\x5e\x4b\xd9\xce\x6c\x7d\x7e\xfc\x32\xa6\x4f\x11\xea"
- "\xe2\xa2\x65\xea\xec\x92\x48\xe1\x36\xe1\xb2\x0f\xd0\x5d\x0a\xf7"
- "\x33\xe5\x5d\x5c\xfd\x05\xe5\x57\x20\xa6\x2c\x5b\xce\x83\xee\x50"
- "\xe2\xc7\x96\x63\x38\x1b\x1c\x73\xe5\xdb\x8f\x2d\xe7\x69\xb1\x0d"
- "\xde\xbf\x8f\xdf\x56\xd3\x52\x0a\xd7\x87\xcb\x74\x31\x77\xf8\xdf"
- "\x20\xb6\x2d\x41\xfc\x7b\xe2\x72\x70\xdd\x40\xd6\xce\x5e\xd0\x86"
- "\xe0\x3b\xf5\x65\x75\xa8\xb6\x94\x03\x1c\xf6\xd8\xc4\xd9\x46\x0d"
- "\xb6\xae\xc5\x7b\x96\x5b\xfb\xae\x8b\x8b\x8b\x1e\xfb\xae\xbc\x06"
- "\x21\x5c\x96\xee\xf2\xe5\x36\x28\xdf\x95\x6d\x87\x8e\xb4\x83\xd9"
- "\x33\x91\xf8\x9a\x32\xfe\x29\x9f\x79\x56\x17\x2d\xfb\xac\xdd\xa0"
- "\xdc\x30\x4b\xbd\x66\x8a\xc1\x30\x5b\xd6\x95\x29\x5b\x16\x87\xbf"
- "\xef\x75\xa7\xfc\x9f\x70\x59\x53\xfa\x77\xc3\x4c\x4b\x5c\x47\x58"
- "\xd7\x6f\x5a\xea\x8e\xcf\xf3\xeb\xf7\x26\xe5\xf7\x05\x41\xf9\x91"
- "\xb6\xe5\xd5\xd6\xe5\x7d\x48\xf9\xaf\xd6\x40\xf9\x08\xdb\xf2\xc6"
- "\x6e\x56\xe5\xbb\x93\xf2\x07\xaa\xa0\xfc\x38\xdb\xf2\x5a\xeb\xf2"
- "\x0f\x92\xf2\xc5\x19\x50\x3e\xd2\xb6\xbc\xce\xba\xbc\x86\x94\x3f"
- "\x18\x02\xe5\x27\xd9\x96\x4f\xb3\x2e\xdf\x83\x94\xff\x36\x0b\xca"
- "\x47\x59\x97\xdf\xc4\x94\x45\x8f\xb0\x65\x7b\x92\xb2\x45\x35\x50"
- "\x36\x5a\xa4\xad\x2a\xb6\xee\x40\xb6\xfc\x9f\x49\xf9\xff\x37\x12"
- "\xca\xc7\xd8\x96\x77\xb5\x2e\xef\x4b\xca\xff\x94\x07\xe5\xe3\x44"
- "\x7c\x65\x5d\xbe\x17\x29\x7f\xe4\x20\x94\x4f\x14\xf1\x95\x75\xf9"
- "\x87\x48\xf9\x52\x0f\x28\x9f\x24\x62\x7b\xeb\xf2\x0f\x93\xf2\x65"
- "\x93\xa0\x7c\xb2\x88\xed\x85\xe5\xd3\x2b\x76\x40\xb9\x45\xf9\x2c"
- "\x36\xad\xec\x6e\x5d\x77\x6f\x52\xf7\x8f\x46\xb8\x26\xcd\xb6\x3c"
- "\x72\x21\xe5\xd1\x20\xb6\xfc\x23\xa4\xfc\x49\x6c\xcb\x65\x22\xb6"
- "\x7f\x14\x97\xdf\x44\xca\x3e\x4a\xca\xfe\xef\x69\x28\xbb\x52\xc4"
- "\xee\xfc\xb2\x7e\xa4\x6c\xb5\x3b\x94\x5d\x23\x62\x73\x7e\xd9\x3e"
- "\xa4\xec\x7f\x8b\xa0\x6c\x86\x88\xbd\xf9\x65\x1f\x23\x65\xcf\x94"
- "\x42\xd9\x2c\x91\xe7\x7d\x84\x57\xf6\x71\x52\xf6\x6c\x25\x94\xcd"
- "\x15\xf1\x0b\xbf\xac\x3f\x29\x7b\x19\xfb\x30\x4f\xc4\x27\xfc\xb2"
- "\x7d\x49\xd9\x73\xb8\xaf\x15\x88\xf8\x84\x5f\xf6\x09\x3a\xfd\x57"
- "\x03\x1b\xa7\xb7\x58\x97\xcd\xe7\xe2\xee\x93\xe6\x2e\x17\x8c\x6c"
- "\xac\x64\xe6\x6b\xd0\x50\x8e\x1b\x73\x8c\x4f\x59\xc6\x08\x33\x85"
- "\x02\xe8\xf4\x53\x38\xde\xe1\x3a\x77\xd8\xc6\x36\xd7\xa7\xf2\xb9"
- "\x31\xa2\x1f\x9d\xde\xb8\x83\xbd\x7f\xa1\x6d\x59\x77\x7e\xd9\xfe"
- "\x74\xfa\x55\x57\xb6\xec\x5e\xdb\xb2\x6a\x7e\xd9\x01\x74\xba\x41"
- "\xcb\x96\xdd\x2f\x12\x5f\x07\xf1\xca\x06\xd2\xe9\x37\x42\xa0\xdc"
- "\x41\xb1\xf8\x4a\x2f\xd5\x0e\xc2\xf1\xc0\x12\xbb\xa1\xfc\x40\x62"
- "\x5f\x23\xc6\x03\xf3\x8e\xda\x52\x16\xfc\x30\x88\x37\x56\x0e\x32"
- "\x77\xa9\x8d\x64\x6d\x76\xd8\xf6\x19\xd2\xf8\xcf\xf0\x14\xa9\xf3"
- "\x76\x12\xd4\x59\x62\xfd\x0c\x6c\x3c\xc2\x3c\x01\xdb\x37\xc8\x94"
- "\x5e\x9f\x81\xed\x0b\x65\x4b\x05\x1c\x81\x72\x51\xe1\x3a\x59\xdf"
- "\x0e\xa6\xd3\x6b\xd4\xac\x0d\x04\xe3\x11\xf4\x47\x26\x1e\x82\x7f"
- "\x4b\xe8\x15\x1a\x2d\x94\x7d\x9a\x2d\x77\xc2\x7a\x1c\x64\x9f\xef"
- "\x2f\x70\xae\xf2\xce\x18\xe8\xe2\x7a\x5a\x8c\xcb\x24\x3e\x81\x1e"
- "\xb8\xec\xda\xb1\x9a\x8c\x93\xec\x37\x7e\x5d\x3b\x31\x36\x32\x6f"
- "\xe9\x5f\x11\x5e\x4b\x1b\xf9\xc7\xd6\x51\x74\xc5\x80\x5a\xe4\x8a"
- "\xf7\xe9\xa6\x7d\x22\x93\xf5\x70\xdc\xd0\x67\x40\x41\xdd\xfa\x8e"
- "\xb5\x7a\x97\x7f\x31\xdf\x6d\xab\x5b\xef\x8e\xf4\xe8\xbd\x71\xf8"
- "\xef\x75\x4b\xe9\x7a\xbc\x7f\xb2\x29\xe7\xff\x67\xef\x6d\xc0\xa2"
- "\x3a\xb2\x84\xe1\xd3\x4d\xa3\xad\x41\x69\x08\x6a\xab\xa8\xad\x62"
- "\xd2\x49\xfc\x21\x19\x33\x43\x1c\x8c\x24\xa2\xc1\x8c\x3f\x44\x31"
- "\x21\x91\x44\x90\x46\x9b\x88\xda\x01\xd4\xd6\xa0\x60\xab\x89\x99"
- "\xf8\x03\x84\x18\x4c\x10\x30\x21\x3b\x66\xd7\xdd\x30\xbb\xce\x3b"
- "\xcc\x3e\x66\xd2\x13\x48\x86\x64\x84\x76\x67\xcd\xbb\xcc\x8c\x33"
- "\xe9\xb0\x8c\x43\x5c\xd4\x9e\xd0\xda\x1d\x69\xba\xbe\x73\xaa\xee"
- "\xa5\xbb\x2f\x8d\x26\xef\xe4\xdd\xfd\x9e\xef\x4b\xeb\xe5\xde\x5b"
- "\x75\xea\xd4\xa9\x53\xe7\x9c\x3a\x55\xb7\x7e\x86\x35\x3a\xfc\x3d"
- "\x28\x7f\xcc\x8b\x38\xbc\xe8\x33\x46\xd0\xf9\xd6\x74\x8e\x84\xc3"
- "\xda\x03\x17\x35\xda\x45\x6c\x8b\x39\x19\x69\xa0\xf3\x1d\x4c\x9d"
- "\xf8\x2e\x78\x4a\xeb\x10\x86\x9d\xb5\x17\xde\x20\x98\x43\xae\x31"
- "\xeb\x80\xed\x5d\xd3\x6d\xd9\x0d\x53\x2e\x69\xb4\xdc\x0e\xd0\x1e"
- "\xb6\xfe\x31\xc3\xce\xf2\xbd\x6b\xaf\x9a\x1f\xe4\xfb\xd6\x6a\x46"
- "\x54\xd0\x7e\xb5\xb4\x6f\xed\xc0\x9e\xb5\xf5\x9b\xea\xf9\x3e\xb8"
- "\x1a\xed\xe7\xbc\x2c\x36\x76\x8e\x25\xcc\x6e\xf2\xdf\xd8\x57\x46"
- "\x67\x51\xdb\x77\x5f\x82\x4e\x29\x8e\x70\x4a\x78\x72\x94\x78\x28"
- "\x9d\x6b\xea\xa6\x7a\xe4\x41\x53\x7f\xf9\xfd\x29\x7e\xdd\xfd\xc9"
- "\xac\x7c\x41\xb5\xa3\xc0\x09\xfc\x1c\x46\xcd\x88\x5f\xb1\xd1\x4f"
- "\x3a\xfc\xe5\xf7\x27\x60\xf8\x01\x87\xfb\x06\x0f\xef\xd4\x8c\x98"
- "\x49\x7e\x6f\xaf\x2e\x59\xcf\xca\x93\xe3\xed\x13\x6e\x40\x97\x66"
- "\x04\x3f\xbb\x8a\xc2\x59\xc5\x82\x6a\xe2\xa7\xbf\x62\xc1\x81\x08"
- "\x3d\x68\x7a\x63\x92\xf5\x9e\xca\x11\x4b\xe5\xf3\xe8\xe4\xbc\x08"
- "\xaf\x53\xc2\xf5\xb5\xf7\xdc\xd5\x68\xcf\xd3\x9e\xbb\xdf\x00\xfe"
- "\x20\xc1\x87\x3f\x83\x04\xfd\xab\x57\x87\x75\x23\x6d\xdd\xe8\x27"
- "\x9f\x15\x75\x3e\x02\xeb\x3f\x42\xaa\xff\x91\xe0\x54\x0d\x4b\x96"
- "\x9e\xa3\x9c\xaa\x9f\xb5\x48\xcf\x7a\x79\x8f\xe3\xf0\x7b\x2e\x0f"
- "\x3b\x83\x75\x7d\xde\xff\x46\xa6\x96\x7c\x7c\x4e\xcf\x98\x61\x67"
- "\x0c\x93\x41\x75\x51\x33\xb2\x06\xf3\x3c\x2f\xea\x64\xe4\x56\xbc"
- "\x47\x4b\x77\x97\x74\x67\x04\xc3\xe5\x38\xee\xc9\x26\xe4\x7b\xb9"
- "\xa8\x8b\x91\x87\x78\xdf\x86\xe4\x06\x65\x8b\xc5\x2c\x28\xe7\x78"
- "\x5f\x5d\x17\xb2\x9e\x21\xf1\xde\xfb\xbe\x37\xf7\xfe\xef\xff\x20"
- "\xe9\x81\x9c\x75\xb9\xa6\xbc\xf5\x1b\xcc\xf9\xcf\x6e\x2c\xd8\xb4"
- "\x79\x8b\xe5\xb9\xc2\xa2\xe2\xad\xdb\xb6\x5b\x77\xec\x44\x3c\x03"
- "\x67\x62\xb3\x37\x52\x55\x6e\x35\x60\xbd\x3e\x4c\x79\xf4\xf3\x7c"
- "\x31\x4c\xc8\xd7\xc8\x1e\x8d\x21\x7c\xdf\xc1\x81\xde\x3c\x9d\x69"
- "\xd8\xa3\xb9\x6d\x09\x9d\xb1\x88\xf2\xad\x72\xd4\x3c\x62\xa7\x73"
- "\x9c\xbb\x34\xb7\x25\xb7\xbb\x1e\xb1\xd3\xb9\xe3\xcd\xfa\x6e\x48"
- "\x98\x06\xaa\x4b\x9a\xdb\x8c\x14\x5f\x77\x07\x40\x0b\xa6\x0d\x87"
- "\x73\x9a\x0e\xf4\xaf\x8c\x65\xae\xaa\xb1\xac\x87\xf0\x57\x1d\x65"
- "\xdd\xae\xe7\xcd\x70\x18\xdf\x51\xc7\x74\x17\x35\xb7\xf5\x37\xc7"
- "\xf3\x73\x59\xe3\x6b\x8f\xb2\xae\x7d\x63\x59\xd7\xde\xa3\xac\xa7"
- "\x6e\x2c\x73\x26\x54\x41\x94\xa7\xf2\xb6\x46\xa7\xe6\x36\x2d\xd7"
- "\x57\x8c\xf7\xc7\x8e\x3c\x79\x04\xe3\xe6\xf8\x20\xa2\x0e\xdf\x31"
- "\xcc\xdd\x6c\x10\x74\xbf\xfb\xa5\x37\x12\xf1\x55\xb1\xbe\x02\xd5"
- "\x61\xcc\x47\xd4\x47\xd4\xd4\x16\xf4\x3a\x30\x3f\x97\xc3\xdb\x09"
- "\x4e\x4d\x94\xa1\xee\x3a\xcf\x2f\xda\x51\xdd\x03\x84\xef\x9f\x0a"
- "\xbd\x91\x45\x13\x98\x0f\x61\xc1\xff\x7c\x81\x0a\xf3\xbb\x80\xb8"
- "\xdd\xc1\xe5\x31\xae\xdf\x54\x6c\xd8\xbc\xb5\xa0\xe0\xae\x91\x60"
- "\xe4\x77\x08\x3e\x83\xbc\x98\xf6\x56\x7f\xe5\x28\x6b\xc1\x72\xda"
- "\xb1\xbc\xad\x6d\xd8\x4b\x41\xd9\x00\x2c\x53\x39\xe2\xdd\x8a\xe1"
- "\x67\xf0\xf9\x0c\xd2\xde\xca\xcf\x34\xd6\x4c\x3a\xc1\x2a\xa3\x66"
- "\x22\x9d\xad\x74\x16\x1b\xed\xc5\xde\xbb\x3d\x43\x85\xe5\xae\x42"
- "\xb8\x56\xc3\x04\x98\x81\xe9\xfa\x91\x8e\x06\x7c\x26\x78\x7e\x1e"
- "\x30\xc2\xb7\x88\x72\x4d\xaa\xa0\x77\xe4\x95\xfd\xf8\x58\x76\xd0"
- "\x53\x19\xd5\x41\x67\x4c\xf0\x73\x32\xf1\x1d\xf9\xd2\x8a\xb0\xe5"
- "\xbd\xa5\x19\x2a\xec\xeb\xaa\xea\x02\x38\x4f\x12\x4d\x44\x07\xf5"
- "\x9f\x7f\x83\x1e\xa8\xbf\x2f\x13\x66\x79\x41\xf5\x9b\x2e\x80\x9a"
- "\xa3\xac\x1e\xaf\x1a\xbc\xaa\x3f\xc1\xb8\x8f\xf1\x6a\xc5\xf0\xb3"
- "\x78\xff\x04\xef\x1f\xe3\x85\xfd\x6f\x3d\xd1\x5d\x54\xc2\xba\xe7"
- "\x54\xc3\x74\xc2\x8f\xb2\xf5\x44\xa7\x26\xde\x4b\xb4\xd3\x19\x32"
- "\x2c\x76\x54\x41\xc8\xb9\x17\x9a\xd1\x4e\xc0\x78\xbc\xbb\xc5\x3d"
- "\xf8\x8a\x4e\xc6\x2b\x4b\x7a\x6e\x40\x98\xb3\xd2\x73\x13\x5e\x2d"
- "\xb7\xbe\x94\xf8\x86\xba\x74\x89\x5f\x1f\xf6\xeb\x5c\x93\x0a\xbe"
- "\x1e\x5c\x4c\x37\x68\xe2\x52\xf0\xb2\x86\x86\xc7\xa5\x8b\xb0\xf1"
- "\xf1\xe2\x7d\xbc\x51\xba\x67\xe0\x85\x7c\x9a\x80\xf8\x27\x94\x8b"
- "\xb0\x09\x35\x78\xef\xc2\xcb\x15\x9a\xff\x24\x4c\x3f\x69\x1f\xd5"
- "\x67\x1f\xb6\x31\x54\x97\x4e\xcd\xa8\x64\xaa\xa3\x23\x42\xb6\x54"
- "\xb4\x8e\x0e\xc3\x92\x50\xb6\x6a\x02\xf2\x13\x3d\x2b\x54\x7e\xa2"
- "\xf5\x0a\xf9\xe1\xb6\x08\xf5\x65\x5f\x9d\x90\x97\x33\xbd\xcf\x9b"
- "\xf0\x3d\x3a\x1e\xf1\x9c\xa1\x71\x1d\xc4\xc1\xfd\xd7\x23\x97\x00"
- "\x46\x99\x41\x43\xf6\xa5\x47\x13\xbd\x89\x64\x96\xf2\x96\xf2\x15"
- "\xb4\x20\x7d\x18\x56\x4f\xf4\x6d\x41\xbc\xf8\xde\x80\x70\xf5\x0e"
- "\xf8\x52\xa6\x8d\xa7\xf9\xf1\xb3\x28\x8f\x12\xbd\x84\x93\xd2\xb1"
- "\x40\xb9\x92\x28\x8d\xc8\x5b\x37\x15\xc3\x13\xd1\x46\xd1\x1a\xb9"
- "\x08\x87\xcf\x09\x24\x93\x74\x77\xf8\x12\x51\x97\xd2\xc0\x4f\xfb"
- "\xc2\xeb\x21\x11\xf5\x6d\x44\xa7\x46\xa7\x99\x5d\x02\x89\x84\x8f"
- "\xec\x37\x96\xa3\xb5\x8e\x74\x51\xe0\x1a\x4f\xe5\x20\xfc\x9f\x60"
- "\x0f\x88\xee\xb5\x44\x0f\xc6\x07\xe5\x5b\xe5\xc0\xde\xd7\x91\x9d"
- "\xa2\xac\x98\x57\x03\xa6\x6f\xa4\xb2\x13\x3f\x31\xbe\x09\xf1\x64"
- "\x53\x1c\x9d\x23\x29\x95\xa7\x81\xd6\x26\x12\x3f\x08\xde\x81\x3d"
- "\x0e\x7e\xe6\x85\x26\x6a\x3f\xe7\x1b\xa6\xa7\xfa\x60\x98\x07\xe1"
- "\x28\xf5\x31\x1f\x43\x7b\xf4\xd6\x4e\x2f\xfa\x34\x31\xbf\x0b\xad"
- "\x1f\x5d\x53\x70\xfd\x60\xba\x46\x4c\xdf\x42\x6d\x3f\xd9\x13\xcc"
- "\x33\x9a\xce\x81\xc6\xb0\x72\x7f\x25\xe2\xd8\xe6\xe5\x63\x51\x88"
- "\xe7\x63\xa4\xa5\x9c\xf0\x20\x3d\x2d\x02\x57\x8c\x86\xf6\xc7\x0f"
- "\xae\x6b\x09\x5f\x03\xd5\x39\xd7\xe7\x9d\xbc\x4c\x68\xbb\x62\x8e"
- "\xd5\x8a\xb8\x26\x84\x69\x62\x7d\x69\xc0\x9e\xcf\x14\xe7\x4d\x8b"
- "\xb8\xd3\xa5\x5f\xf1\xfa\x6d\x11\x76\x2d\xe6\x17\x45\xbb\x58\x77"
- "\x80\xee\x18\x8b\x7c\x7e\x94\x44\xf7\x69\xca\x8f\x6d\xcf\xe2\x6d"
- "\x28\xe5\x41\xe9\x25\x7c\x4b\x09\x9f\xcc\xab\xd9\x48\x87\xe0\x97"
- "\xae\x0c\xc3\x1b\x48\x16\x39\xdf\xd0\x8e\xf6\x96\x92\x2c\xc6\x14"
- "\x63\xfa\x33\x87\xe9\x7d\x3b\x7f\xd7\x72\x1b\x3b\x10\xaf\x3b\x43"
- "\xf1\x0e\xf4\x20\x8f\x6c\x44\x59\xf2\x03\x4c\x8f\x83\x44\xb7\x8d"
- "\x97\xed\x94\xfb\xf9\x54\x55\xb3\x0f\x80\xe8\x44\x1e\x35\x79\x2a"
- "\x63\xe3\xd1\xf6\x67\x11\xad\x68\xaf\x4f\xb3\xb7\x32\x81\x68\x46"
- "\x7b\x26\xd1\x17\x7b\x48\xaa\xfb\xd3\x54\x46\xe2\xe7\x6c\x61\xfb"
- "\x30\x2e\xee\x5e\xa2\x3d\x50\xee\x58\x73\x30\x8f\x79\xb9\xb1\x1e"
- "\xa8\xbe\xa8\x5e\x82\x70\x92\xec\x97\x23\xae\x53\xe2\x5d\xc8\x06"
- "\xf1\xba\x7c\x2c\x3b\x4b\xf0\x01\xd8\xdb\x4f\x50\xdc\x6e\xcc\x7b"
- "\x8e\x85\x9f\x71\xad\xa2\x33\xc0\x10\xef\x29\xfb\x4e\x1f\x20\x8e"
- "\x26\xe2\x29\xc2\x5d\x23\x79\xc4\xf7\xb3\x52\x1e\x6e\x6c\xcf\x67"
- "\xe2\x95\x1c\xd0\xff\xdb\xff\x1c\x2a\x5f\xb7\x2b\xf5\x9f\xea\xbb"
- "\xdc\x5f\x9a\x06\x5c\x1e\x0a\xc1\x70\x45\x73\xfb\x1e\xa9\xed\x90"
- "\xea\xfa\xf6\x4f\x9b\x51\x5f\x82\x70\x64\x29\xea\xba\x89\xcb\xe3"
- "\xf6\xa5\x2a\x2a\x33\xa6\x6d\x92\xf0\xf0\x32\x73\x79\xb2\x71\x19"
- "\x38\xcb\xb6\x63\x39\x07\xe4\x20\xb6\x49\xaa\xe7\xb3\x0a\x9e\xc8"
- "\xb6\x8b\x9f\x47\x4c\x36\x09\xfd\xea\x07\x3d\x7d\x01\xbb\x44\x75"
- "\xef\xe7\x75\x7f\x7b\x76\x9d\x68\x6f\x25\xbb\x75\xbb\x88\x1f\x1b"
- "\x22\xc3\x44\xcb\xab\x5c\x7e\x89\x96\xd2\x2c\xa2\xa5\x89\xd3\x51"
- "\x6a\x80\x2b\x9a\xb8\x28\xca\x1f\xd3\x56\x4b\xfa\x2a\xe1\x8a\x2d"
- "\x20\x5c\x7b\xd1\x56\x11\x4d\x4e\xcd\x68\x2f\xb7\x7f\x8b\xb9\x1c"
- "\x6c\x92\x68\x6f\xf5\xda\x28\x6d\x74\xf6\x57\x6a\x9e\xb6\x15\xe1"
- "\xce\x7b\xc5\x79\x6e\x23\x31\xfd\x49\x3e\xc7\x52\xa3\x3f\x4b\x36"
- "\x9a\xd6\x0e\xe3\xf3\xcf\x0c\x8f\xa3\xac\x5e\x02\x0d\xe2\xd3\x92"
- "\x8c\xca\x72\xd1\xa3\xd1\xbf\x4d\x7d\x15\xe4\xf5\x29\xf4\x91\x4e"
- "\x12\xbf\x49\x96\xd1\x47\x9a\xeb\xa9\x8c\x3b\x2f\xcb\x2d\xe6\x53"
- "\x43\xbc\x17\xf5\x33\x66\x3c\xca\x71\x53\x40\xb6\xc6\x8c\x97\xf8"
- "\x78\x12\xf9\xa8\xc5\xfc\x8e\x49\xe5\x3a\x89\xf0\xe8\x8b\xe9\x5f"
- "\x92\x68\xaf\x96\xe0\xef\x97\xeb\x41\xd2\xd5\xb3\x87\xc9\xfe\xf2"
- "\x3a\x18\x73\x56\x4a\xdb\x20\xe5\xd5\x26\xc3\x92\x8f\xc8\xcf\x66"
- "\xc6\x30\xb2\x83\x73\xb0\xee\xb9\xed\xdb\x79\x83\xc3\x49\xb6\xb1"
- "\x45\xe4\xa1\xdf\xca\xe5\x10\xfd\x9e\x80\x1c\x8d\x69\x50\xd8\x27"
- "\xb2\xc5\xe5\xed\xfb\xc4\xd9\x77\x24\x4b\x64\x53\xa9\x4f\x84\xf8"
- "\x4a\x24\xfd\x91\x68\x1e\x1b\x13\x2a\x2b\xfa\x1c\x94\x95\x59\x01"
- "\xdc\x63\x21\x5c\x3b\x57\x27\x6c\x60\x8d\x48\x33\xf6\x31\xa9\x6c"
- "\xa7\x44\xd9\xa4\x77\xe2\xdb\x6e\xce\xb7\x31\x41\x7c\x44\xbe\x8d"
- "\xdb\x23\xc1\x37\x91\x2d\x0f\xe8\xeb\xd8\xf7\x64\x5d\x1e\x6c\x2f"
- "\xc6\x3d\x47\xfa\x10\x44\x57\xb5\xc2\x5e\x34\x85\xb7\x17\x63\xcd"
- "\x52\x79\xeb\x15\xba\xd1\x20\xf9\xbb\xfb\xe5\x7a\x68\x77\x4b\x67"
- "\x10\x62\x18\xd9\x4f\xca\x3b\xb8\x0d\xaa\x15\x7c\x95\x74\x79\xdc"
- "\xd3\x83\xeb\x61\xdc\xcc\x60\x7d\xa6\xba\x26\x9b\x40\x38\xa8\x4e"
- "\xb9\x5f\x89\x61\xa2\x5e\xc7\x69\xc8\x36\x04\xdb\x68\x84\xad\xf2"
- "\x33\xd2\x97\x71\x89\xa1\xba\x38\xb6\x46\xd2\x45\x29\x6f\xbd\x0a"
- "\xeb\x28\x31\x28\xdf\x06\x45\xbe\x54\x37\x2d\xfc\xac\x18\x5e\xc6"
- "\x71\x97\xe5\x36\x8d\xe0\x31\xad\x15\xd3\x74\x28\xda\xc7\x72\xa2"
- "\x0f\xf3\x4a\xe7\x36\xeb\x28\xb7\x15\x56\x8f\xa0\xe7\x42\x9d\xd4"
- "\x4e\x60\x58\xa2\x14\x76\x52\x6a\x4b\x64\xb9\x59\x16\x4a\x93\x3e"
- "\x29\xbc\x7f\x34\x36\x5d\xf6\x8f\x38\x2e\x6e\x8b\xf4\xc9\x52\xf9"
- "\x28\x6c\x96\x08\x1b\xab\xa1\xb0\xc3\x82\x0f\x55\x8c\xb7\x57\x63"
- "\x4e\x4a\xed\x15\xe9\x97\x1a\xdf\xf5\xa4\x63\xf4\x8e\x38\x38\x7e"
- "\x47\xd9\x0d\xea\x43\x60\xdf\x3b\xee\x34\xd9\x03\xb2\x17\x34\x37"
- "\x98\xdf\x97\xf3\xfb\x1f\xc9\xee\x90\x1f\x42\xf1\x08\xd7\x40\xb6"
- "\x08\xc3\xff\x4a\xfb\x02\xb2\xff\xd2\x22\x5e\xfd\x79\x91\x76\x7c"
- "\x24\xf7\x15\xfe\x2b\x2d\x42\x0e\x93\xd3\xa1\xdd\xfa\x19\xa5\xa3"
- "\xf4\xb2\xfd\x22\xdb\xe5\x23\xdb\xc4\xf3\x1b\xbf\x44\x92\x71\xde"
- "\x6f\x90\xfd\xa2\x3e\x75\x10\x2c\x9d\xa5\xc6\x6d\xda\xf8\x2a\x61"
- "\xcf\xc6\xef\xa7\xb4\xbc\xfe\xd0\x56\xee\xfe\x8a\x7d\x5e\x57\x08"
- "\x9a\xda\x2f\xc9\x2e\x46\xed\x13\x74\x8e\x77\x8a\x72\x8c\x7f\x87"
- "\x97\x43\xd8\xd4\x72\x41\x4b\xd4\xbe\xda\x1b\x3c\xee\x43\x2a\x0b"
- "\xc5\x1d\x09\x8a\xa3\xb3\x11\x31\x4e\x8c\x97\x28\xd2\xf9\xfb\xcc"
- "\x83\xe0\xeb\x6e\xf0\x7e\x1f\xf9\x08\x92\xed\x9d\x90\x2d\xe8\x9c"
- "\x30\x49\xb6\xbb\xc8\x97\x53\x64\x7b\x79\xdc\x7a\x09\x66\xb9\x74"
- "\xe7\xf6\x7d\xc2\x32\xc1\x57\xbd\x5a\xe2\xf7\x69\x51\x8e\x09\x39"
- "\xbc\x9f\xfd\x5f\x99\xc8\xdb\x09\xa9\x32\x6f\x83\x9f\x49\x7f\x30"
- "\x7f\x1d\xbd\x73\xb9\x2f\xe1\x7d\xd8\x1a\x82\x21\x9a\x44\x1b\x31"
- "\x3e\x59\xe9\x53\x5f\xd4\xc4\xff\x8e\xda\x25\xe1\xab\xc6\xff\x42"
- "\x1a\x7b\x02\x7b\xe1\x9b\xd8\x2e\x4c\xd4\xc8\x36\x86\x79\xd2\x80"
- "\xce\x58\xba\xa8\x99\x18\x49\x61\x74\x3e\x56\x30\x0c\xd9\xa7\x77"
- "\x6f\x38\x25\x9c\x13\x9c\xb2\xdd\x20\x5b\xd2\xee\xee\x94\x7c\xba"
- "\x89\xe5\xb5\x92\x2d\xb9\xa2\x99\x58\x11\xea\x87\x4d\xac\x08\xb5"
- "\x19\xf1\x6f\x2b\x6d\x06\xfa\xcd\xfb\x3c\x95\x13\x4d\x21\x7e\x00"
- "\x86\xdd\xdc\x76\x4c\x4c\x22\x1d\xa5\xb3\x59\xb9\x7d\xe2\xe3\x69"
- "\x13\xbf\x92\x69\x26\xbb\xd9\xfb\xbc\x3c\x7e\x11\xff\x2a\xf9\x6a"
- "\x8a\xfc\xce\x87\xd8\x4e\xca\x4f\xc6\x87\x25\x27\x3d\xb2\x17\xd2"
- "\x78\xcb\xc4\x06\xc9\xce\xd7\x87\xd8\x4a\xa9\x0d\x23\x3b\x19\xda"
- "\x56\x45\xed\x0f\x6d\xab\xe2\xf7\x0c\xb6\x91\xf1\xe9\x5f\xbf\xad"
- "\x8a\x37\x92\xdd\x92\x6d\x64\xa8\x2d\x88\xcf\xa8\x0d\xf1\x65\x27"
- "\x5e\x90\x7d\xd9\x80\x1d\x9d\x58\x40\x36\x0a\xf3\x6f\x92\xf2\x46"
- "\x3b\x31\xf2\x9c\x9c\x37\xc6\x6b\xda\x0d\x28\x9b\x95\x51\x49\x28"
- "\x53\x8d\x92\x0f\xc8\x75\xf3\x06\x9d\xc5\xa7\x19\x4f\xe3\x9d\x23"
- "\x49\xce\xec\x9b\xbf\x84\xae\x40\x5b\xd1\xd2\xbb\x45\xe6\xef\xa4"
- "\xa7\x83\xfd\xc2\xe3\x47\xd9\x01\x4f\xe5\xa4\xb9\xc1\x65\x3c\x84"
- "\x61\x47\xa4\x31\x04\xce\x5b\x8e\x6b\x12\xf9\x2b\x21\x65\x13\xe5"
- "\x98\x94\x4c\xe5\xa0\x3e\x11\xe6\xef\x23\xbf\x87\xce\x67\x46\xbd"
- "\x29\xab\x1b\x90\xf9\xd1\xe7\xbf\xb2\x05\xfb\x57\x51\x17\xc8\x56"
- "\x4a\x7d\xcf\x56\xf4\x77\xca\x83\xc7\x62\x96\x2d\x4c\x37\x58\x0a"
- "\xf3\x37\x17\xaf\xbf\xcf\x90\xbf\x39\xbf\x38\x3f\xa7\x20\x7f\x67"
- "\x4e\x71\xfe\x96\xcd\x33\x37\xe5\x6c\xc8\xcf\x35\x6c\xcf\x29\x32"
- "\x24\x5a\x67\x58\x47\x42\x00\x74\x9e\x21\xa7\xa8\x68\xeb\xa6\x3c"
- "\x93\x61\x73\x7e\xee\xac\xc2\xbc\xa2\xbc\x62\x43\x4e\xe1\x96\xad"
- "\x9b\x4d\x86\x19\xa6\xd9\x33\x12\xbf\x6f\x1a\x19\x3c\x86\x36\x4d"
- "\x07\x3d\xfe\xeb\x5f\x74\x1f\xb9\x0e\xda\x68\x95\xa5\x30\xda\x9a"
- "\xbf\x59\x8c\xd9\x4d\x7e\x7b\x4e\x15\x58\x30\x3e\xaa\xae\x92\x78"
- "\x3d\xa9\x09\xef\x1a\x82\xc3\x72\x1a\xf0\x59\x8b\xb4\xc7\x7b\x2a"
- "\x27\x9b\x9d\x9a\x69\xe9\xc4\x33\xe4\x85\x01\xcb\x16\xcf\xae\x7f"
- "\xdc\x8d\x3e\x9b\x85\xe6\x04\xd4\x5d\x87\xb8\xf2\x6d\xa0\xc1\x2b"
- "\x0a\x2f\x9d\x5a\x47\x63\x5d\x93\xd1\x16\x4c\x69\xe2\x67\x8e\x69"
- "\xa6\x24\xbb\x62\xe6\x27\xb1\xf2\xf9\x49\xa2\x5e\xa6\x3c\x20\x8f"
- "\x71\xaf\xd8\x0f\x2b\x48\x3e\x3b\x35\x53\xf8\xf8\xec\x5e\x94\x65"
- "\x1a\xf7\xed\xfd\xe5\xc3\x29\xe8\x0f\x5e\xa0\xb1\x5b\x8c\x7b\xc0"
- "\xad\x86\x28\xa4\x4b\xd3\x5c\x92\x08\xaf\x60\x5e\x45\x7a\xc6\x3c"
- "\x95\x53\x40\x1e\x4f\xc3\x32\xe8\xb0\x2c\x1d\x52\x39\xfe\x93\x97"
- "\xe3\x28\x4b\xa8\x8a\x45\xfa\x2a\x89\x9e\x29\x33\xe5\x32\x20\xdd"
- "\x1d\x4e\xcd\xe4\x72\xa4\x53\x47\x74\x85\x1b\xeb\xa3\xf1\x2e\xa4"
- "\x73\xab\x7f\x1b\xf2\x6d\xb2\x38\xdf\xf5\x48\xad\xd0\x3f\x2c\xcf"
- "\xa9\x3a\x7c\x3e\xfc\x25\x44\x1d\x2a\x84\x38\x66\x9b\xc2\xda\xdc"
- "\x3e\x70\x98\x3b\x20\x7a\x07\x73\xb1\xff\xf5\x45\xb7\x54\xa6\x7a"
- "\xb2\x0d\xff\xf2\x6c\x87\x86\xca\x84\x6d\x45\x54\xdd\x97\x43\x8e"
- "\x2d\x6a\x5e\x19\xcb\xdc\xec\x8d\x60\x9f\xcb\x30\x82\x78\x42\xfe"
- "\x56\x2f\xb6\x53\x58\x06\x17\xe6\x9d\x26\xf9\xc6\x6e\xd6\x97\x15"
- "\xe4\x4b\x4d\x21\x39\x73\x0f\x81\x5b\x2b\xe3\x66\x6a\x7e\x2e\xb2"
- "\x5e\xd4\xbf\x61\x2b\xa6\x71\x05\xf0\x1b\xd2\x95\xf8\x09\x27\x3e"
- "\xbb\xe4\x7c\x44\x3f\xdc\x40\x3e\x81\x0b\x65\xd9\x35\x44\x7e\x09"
- "\x95\x47\xd9\x79\x07\x86\x1f\xf9\x0a\xc8\x57\xc0\xf6\x99\xe3\x6f"
- "\x44\xbe\xc7\x11\xfe\xbd\x63\x01\xf6\x21\x4c\x6f\xe5\x94\x34\x1a"
- "\xdf\xc5\x38\xd4\xff\xa8\x14\xe5\x98\xb5\x24\xcf\xf3\x14\xf2\x9c"
- "\x52\x49\x3e\x61\x15\xe2\x47\x19\x3a\x72\x0d\xc8\x5f\x3b\x3b\xbb"
- "\x0a\x8c\x94\x0f\x3e\x9f\xa3\xf1\x10\x4f\xe5\x54\x83\x9c\x1f\x43"
- "\xf9\x3f\xec\x17\x63\x30\x92\x6c\xcd\x74\x58\xbb\xe9\xbb\x08\x6b"
- "\x46\xfb\x4e\x34\x92\x8c\x61\x9a\x0c\x59\xa6\x50\xd6\xcf\x73\xb9"
- "\x8a\x03\x23\xab\x34\x74\xd4\xc5\x22\x1c\xca\x55\x2d\xca\x13\xc9"
- "\x15\xc2\x96\xc9\x32\x85\xb2\x76\x8e\xe0\x90\x86\x91\x8d\x3b\x53"
- "\x34\x64\x23\xbb\x34\x53\xaf\x91\x8c\xb1\xd7\x7e\xd4\xc1\xc6\xad"
- "\xe9\x10\xf5\x34\xf5\x9a\xc3\x2b\xea\x20\xc0\xf7\xa9\xad\x41\x7c"
- "\x3f\x87\x72\x3c\x92\xf8\x2c\xc6\xaa\xa7\x5e\x43\xda\xce\x71\x5f"
- "\x7c\x17\xd6\x01\x6f\xab\xa6\x9e\xa6\xf4\x12\x0f\xcf\x06\x78\x38"
- "\x4d\x17\x8e\x87\x0a\xde\x69\xe8\x62\x95\xd3\xe2\x49\x57\x30\x4d"
- "\x2a\xb6\xa2\x5d\x43\x7d\x2b\xc0\x3c\x34\x9a\x2a\xd0\x52\x1e\x2d"
- "\x71\x1c\xbe\x58\xce\xe3\x08\xf2\xda\x55\x6a\xbe\xa9\x3c\xb7\xd4"
- "\x03\xd0\x98\x38\xa5\x4f\x88\x23\xfe\x4e\x3b\x1d\x48\xcf\xdc\xca"
- "\xf4\x33\x72\x43\x68\xe5\x17\xd2\xda\xfa\x4a\x2c\xca\x91\xa0\xd7"
- "\x7d\x33\x7a\x13\x0c\xa2\x9d\xb4\x4f\x23\xf9\x9e\x3e\xcb\x81\xbd"
- "\x5d\x0a\x93\xde\xe3\x7b\xb1\xed\x51\x8e\xef\x0f\xfd\xbd\x61\xfa"
- "\xa6\xd0\xef\x0d\xd3\xb3\x86\xfa\xde\xa0\xc8\xf7\x1d\xca\xd7\x5f"
- "\x97\xa1\x0a\xca\x9b\xb7\x7b\x43\x7d\x5b\x98\x5d\x1f\xdc\x9f\x99"
- "\xfe\x15\xd1\xd0\x8e\xed\x14\x9b\x98\xa1\x62\x88\xa7\x85\xb7\xe1"
- "\xd3\xbd\xc2\x7f\x21\xbf\x68\x7a\x07\xc1\x28\xcb\x31\xf0\xd3\xc6"
- "\xfd\x8a\x6e\x5f\xf1\x97\xc8\xc5\x40\x33\xfc\xc1\x60\x96\xa3\xd5"
- "\x21\xc0\xc0\xc2\xbc\x44\x01\x4c\xe5\xf0\x0c\x7f\x22\x48\x7a\x77"
- "\xf1\x17\xcd\x00\xfc\x40\xfc\xdf\xf0\x1b\x21\xe8\xe5\xf8\xbc\xa0"
- "\x92\xf2\x3b\x10\x04\x91\x7a\x93\xd4\x0c\xe4\x24\xe1\x7e\xcf\xe1"
- "\x55\x96\x81\x7e\xe4\xd4\x93\x1c\x98\x31\x9f\x84\x5f\x7e\x67\xc1"
- "\xef\x14\x12\xfa\x8e\xbf\x88\xac\xa0\x0c\xa6\x44\x98\xf8\xf4\xae"
- "\x04\xe7\x40\x90\xba\x5e\x17\x9c\xa5\x0e\xca\x22\xf9\x43\x34\xfd"
- "\xf1\x22\x3e\x23\xc6\x4f\x6d\x1d\x00\xb8\xdd\xbd\x27\x08\xfc\x37"
- "\x82\xfc\xe9\xfa\x9b\x94\xf1\x9b\xfe\x26\x07\x3d\x4f\x11\xb7\x69"
- "\x1d\xdf\x22\xfe\x9b\xff\x0c\xe7\x46\xc8\x8f\x01\xf1\x98\x9e\x1d"
- "\x0e\x34\xc0\xff\xe9\x76\x39\x28\x58\x42\x03\xf1\x77\x26\x87\xbe"
- "\x1b\xbd\xa1\xef\xf7\xa4\xfd\xed\x84\xa3\x0e\xd2\x9f\x52\x67\x0c"
- "\xc0\xdd\x71\x03\x81\xd1\x0a\x95\x89\x2e\x57\xa8\x50\xe0\x27\x51"
- "\x13\x81\xf4\xd4\x04\x05\x6b\xc2\x43\xff\xdf\xf9\x4d\xd8\x23\x29"
- "\xc4\x14\x97\x6e\x50\xe4\x02\x45\x18\xbd\x0f\x33\x48\x61\xf7\xfe"
- "\x6a\x10\x3c\x0f\x33\x04\xbd\xab\x52\xf0\x4f\x3d\xc0\x8c\x82\x6f"
- "\x83\xd6\xef\x7e\xff\x3f\xfc\xa9\x48\x3f\xbe\xfb\xfd\x5f\xfa\x31"
- "\xd1\x8a\xa3\x25\xe2\x37\xfa\xc7\x06\x0c\x25\x93\x22\x98\x14\xc0"
- "\xa4\x87\x6f\xa5\x1d\xff\xee\xf7\xdd\xef\xbb\xdf\x77\xbf\xef\x7e"
- "\xdf\xfd\xbe\xfb\xfd\x7f\xe0\xa7\xe2\xfd\x08\x26\xfd\x06\x9e\x07"
- "\xe2\xa9\x1b\x64\xae\x61\x6a\x15\xb0\xa0\x88\xb2\xfb\x41\xa5\x85"
- "\x61\x9a\x6f\xcf\xcb\x33\x0c\x10\xf4\x35\x13\xd0\x99\x7d\xf7\xe2"
- "\xf5\x3d\xbc\x26\x06\x85\x4f\xfb\xb6\x28\xfa\x9b\x7f\x2a\x64\x5e"
- "\x04\xf6\x0b\x23\x61\x18\x0c\x07\x2d\x8c\x80\x91\x70\x1b\x44\xc1"
- "\x28\x18\x8d\xfd\x4d\x1d\xc4\x40\x2c\xdc\x0e\x71\x30\x06\xc6\xc2"
- "\x38\xd0\xc3\x78\x98\x80\x25\x89\x87\x49\xd8\xb7\x9f\x82\x0c\x99"
- "\x1a\xbe\x2c\x65\x90\xa2\xc7\x3f\xf8\x3f\x1d\x52\xf8\x7b\xf6\x77"
- "\xe1\xff\xad\xe1\x76\x29\xfc\x9c\x14\xee\xfc\x2e\xfc\xbf\x35\xdc"
- "\xf0\x3f\x7c\x9f\xfa\x3f\x7a\x57\xa1\xc9\x16\x56\x5b\x15\xd6\x56"
- "\x2a\x43\x55\xd2\x6f\xe0\x1d\x6e\x91\x7e\x10\xbe\xd0\xf4\xca\x5f"
- "\x0a\x5e\x73\xc5\x63\x29\x80\x18\xe7\x65\xc1\x3f\xdf\x50\x29\xe5"
- "\xdf\x9e\x2e\xbc\x5c\x78\x21\xe4\x1e\x6c\x61\x6c\xb7\xe1\x35\x46"
- "\xc6\x23\x60\xb4\x78\x5d\xc1\xf8\xcf\x1a\x00\x9c\x17\xf0\xc2\x6c"
- "\x3f\xb7\x02\x74\x46\x01\xfc\x79\x29\xc0\x7f\x9e\x02\xb8\xd8\x13"
- "\xc0\xd9\x5b\x16\xa0\xee\xaf\x16\xf1\x6c\xc0\xeb\x3a\x21\x02\xa7"
- "\x6a\x60\x78\xcf\xbe\x28\x23\xcd\x70\xef\xec\xb9\xb3\xef\xff\x5e"
- "\x8e\x61\x56\xfa\x2c\xc3\x7d\x89\xf7\xde\x3b\x27\xf1\xfb\x73\xee"
- "\xfd\x81\xe1\xbe\xfb\xe6\xdd\x9b\x38\x2f\x31\xd1\xb0\x69\x47\x61"
- "\xfe\xbd\x89\x1b\xf2\x0c\x9b\x4d\xf9\x45\x86\xf5\xf9\x85\x9b\xb6"
- "\xe7\x14\xe6\xdd\xaa\x5c\xdf\xf0\x47\xe4\x4d\xf2\x03\xaf\x81\x50"
- "\x6e\x2f\x00\xcd\xcc\x34\xd0\xcc\x4f\x81\x41\xd5\xa3\x2a\x97\xc6"
- "\x52\x8d\xd2\x15\xf6\xb7\xe9\xa9\xc7\x7f\x3f\x63\xcd\xe8\x0f\x1e"
- "\xda\x30\x63\xfe\xc2\xb7\x8e\x34\x82\xfa\x7b\xad\xa0\xbe\xa7\x00"
- "\xd4\x53\x67\x82\x7a\x4c\x06\xa8\x87\x77\x81\x7a\x4b\x12\xa8\xd7"
- "\xdb\x41\x9d\x65\x02\x75\xba\x05\xd4\x0f\x87\x09\xdb\x5d\x20\xc2"
- "\xfe\x59\x07\xea\x9f\x94\x83\xfa\x8d\x12\x50\x1f\x3a\x25\xc2\x5a"
- "\xab\x40\xfd\xde\x2d\x6b\xfb\xbf\xf9\xf7\x75\xfd\x89\x41\x3f\x27"
- "\x97\x39\x5a\x0f\xb0\x33\x3e\xcc\xa0\xe9\x77\xbf\xef\x7e\xdf\xfd"
- "\xbe\xfb\x7d\xf7\xfb\xee\xf7\xdd\xef\xff\xe5\x3f\x97\x0a\xe6\x7e"
- "\xa9\xd6\xc0\x07\xe8\x2d\x79\x6c\xda\x78\xa7\xea\x81\xb9\x34\xc7"
- "\x04\x68\x2d\x15\x68\xf9\xbe\x2f\xe2\xd2\xe0\x2d\x12\x1b\xfe\x61"
- "\x78\x0d\xd7\x06\xcf\x55\xa1\xb9\x48\xcd\xfa\x44\x88\xd0\x83\x98"
- "\x37\x65\x63\xe7\xc4\x7a\xe7\xfb\xa0\x07\xb4\x7c\xcf\x03\x5a\x3f"
- "\x8a\xf8\xad\x4e\xf8\xfb\x7a\x79\x9e\x95\x0c\x47\xf3\xac\x68\x5e"
- "\x16\xc2\xf2\x79\x27\x43\xcc\xab\xd1\xb1\xd7\xf4\xea\x85\xc7\x01"
- "\x68\x1d\xea\x2b\x47\x99\xab\xa5\x04\xa0\xb9\x41\xac\x47\xa5\x39"
- "\x37\x88\xbf\xc3\x09\x07\x1a\xc4\x3c\x2b\xe6\xde\x8b\xe1\x18\xd6"
- "\xe3\x84\x97\xaa\xa4\x3c\x7b\xe4\x70\xc7\xbe\xeb\xd0\x62\xe0\xeb"
- "\x6d\x5c\x2d\x86\x7e\x48\x9d\x4a\xe5\x1f\xa1\x47\xd8\xf8\xa1\xe6"
- "\xd8\xc8\xf3\xc9\x28\x6f\x09\x3e\x4d\x91\x1f\x96\x71\x44\x96\x9c"
- "\xdf\x10\x38\xa2\x28\xad\x8c\x07\x69\xef\xc1\x34\xe5\x32\x1e\xa4"
- "\x47\xa6\xd1\x95\xba\x8b\xe7\x71\x2a\x1c\x4d\x86\x0f\x93\x23\xf3"
- "\xbe\x3f\xa7\x2b\xf9\xfc\xfa\x04\xc3\x98\x7b\x17\xe5\x25\xdc\xc9"
- "\x12\xa3\x67\xbe\x9c\x78\x5b\xca\x88\x94\xd1\x73\x56\x26\xaa\x75"
- "\xea\x69\xea\xc4\x58\x9d\xfa\x8e\x75\xf4\xf7\xdc\x64\x23\xbf\x1b"
- "\x34\xc9\xfb\x4c\xdf\x37\x0c\x5f\xf0\xe2\x0b\xdb\x52\x7e\xfe\x93"
- "\xc5\x29\x8f\x3c\x5e\x74\xd7\x07\x89\xea\xdb\x7f\xfb\xf2\x7b\xc6"
- "\x2f\x09\x62\xea\x34\xfa\x9b\xd5\x1c\x11\x77\x97\x8d\xb0\x9c\x1b"
- "\x6f\xf8\x80\x42\xee\xd6\x24\x17\x9b\xee\x9f\xd3\x40\x39\xae\xce"
- "\x9d\x65\xa3\x34\x8b\x97\x89\x34\x02\x62\xce\xe9\xe0\xb8\xd9\xff"
- "\x4c\xa9\x0d\x9c\x06\xd0\x08\x5c\x03\xb8\xc7\x09\x0a\x45\xe8\xb4"
- "\xb6\xc4\x49\x52\xde\x6f\xd2\xdf\xa7\xde\x9a\xad\x46\x0c\xb1\xb3"
- "\x1e\xa6\xd8\x39\x9e\x44\x8f\xa1\x25\x59\xb3\x21\xc1\x38\xfc\xde"
- "\x9f\xe0\x53\xc2\x86\x04\x9d\x1a\x9f\x5f\x14\xcf\xc4\x03\xd3\x0f"
- "\x04\x84\x4e\x3d\x23\x2e\xd9\x64\xfa\xfe\x67\x6e\xd3\xf7\x75\xea"
- "\x94\x06\x53\x72\xca\xd8\x83\x05\xf7\x24\x24\x27\x98\xee\xd7\xa9"
- "\xf9\x7d\x5e\xca\x8c\x1f\x3f\xa5\x53\xdf\xf9\xab\xc4\x18\x9d\xea"
- "\xd7\xf5\x2a\xf8\x50\xbd\xea\xd4\x87\x11\x9f\x7e\xfa\x11\xdc\xbd"
- "\xe9\x23\xd5\xdd\x4b\x3f\x52\xab\x62\x3e\x8a\x7a\x12\x7e\xad\x1b"
- "\x0e\xbf\xd6\xe3\x65\x78\x04\x5a\x55\xa5\xe9\xad\xea\xed\xd9\xad"
- "\x11\xa5\xed\xad\x9a\x27\xa0\x35\x72\x6d\x4c\xeb\xb0\x47\x1e\x6b"
- "\x1d\xfe\xc4\xe7\xad\xda\x3b\xa1\x75\x04\x40\xeb\x54\xf4\xf3\xa7"
- "\x41\x5c\xeb\x7d\x31\x2f\xb4\x3e\x32\x59\x6d\xbf\xbd\xf7\x21\xfb"
- "\x04\xcd\x62\x7b\x82\x0e\xec\x33\x46\x82\xfd\x8e\xa8\x28\xfb\x9d"
- "\x78\xdd\x05\xf5\xf6\x44\x7c\x4f\x86\x78\x7b\xe4\xce\x61\x00\x82"
- "\x96\x8f\x0c\x00\x1f\x4d\x85\x05\x1f\x4d\xc3\xfb\x74\xbc\x12\xf0"
- "\x9a\x81\xd7\x9d\x78\x61\xff\xe5\x23\xda\xdb\x08\x8c\xc3\x92\xff"
- "\xd7\xaf\x72\x72\xe6\xe6\xdc\x9f\xb1\x30\x22\x22\x2f\x01\x6e\x43"
- "\xae\x69\x92\x13\xa6\x46\x26\x45\xe6\x25\x7c\xe6\x4e\xc1\xbf\x3a"
- "\xf5\xd3\xff\x1e\x31\x6c\x8e\x27\xc9\x93\xfd\xf3\xcf\xfa\x61\x24"
- "\xf2\x1f\x94\x32\xdc\x6b\x03\x95\x1b\x69\x74\xdb\x7a\x1f\xf2\xd8"
- "\xa2\x74\x4e\x18\x61\x96\xe5\x58\xc4\x7d\xa0\x73\xdb\xca\x50\xfe"
- "\xa2\x66\x86\x8f\xdb\x43\x71\x69\x37\x49\x67\x0a\x1f\x47\x32\x1d"
- "\x55\x26\xc7\xf5\xaa\x9b\xd3\xf1\x1d\xe5\x5f\x9b\x14\x0a\x6b\x8f"
- "\x70\xdb\x54\x7b\x30\xee\xd4\x60\x3c\x76\xc4\x93\xfa\x63\x8c\x6b"
- "\x0d\x13\xf7\xa8\xdb\xb6\x92\xf2\xe8\x52\xe4\xe1\x96\xf3\xa0\x75"
- "\xde\xb5\xa8\x5f\x64\x77\xfc\xb6\x11\x4d\x94\xd6\xe1\x75\x41\x83"
- "\xbf\x5b\xa5\xb1\x9e\x05\xc2\xe3\xb1\x8d\x4a\x90\xd3\x13\x1c\xed"
- "\x49\x40\xeb\xf3\xf8\x3c\x50\x18\xb5\x9a\xe6\x81\x1e\x46\x1c\x86"
- "\x6d\xaa\x71\x9d\x10\xd5\x4f\x69\x9c\x30\xca\xec\x56\x7f\x82\x79"
- "\x8f\xca\x96\xed\x1c\x86\xf1\xb5\x00\x94\x07\x96\xbd\x0c\xe3\x4a"
- "\x06\xd3\xfc\x49\xac\xe0\xcb\xa8\x6a\x39\xee\x66\x73\x0b\x45\x1a"
- "\xc6\xdc\xb6\x4f\xfc\x98\xe6\xec\x60\x7c\xac\xcc\x6d\x53\xbf\x80"
- "\x71\xdd\x61\xe2\xf6\x88\xbc\x46\x6b\xc2\xc4\xd9\x30\x4e\x8d\x71"
- "\x86\x21\xe2\x22\x30\x2e\x39\x5c\x5c\x4b\x0d\xc7\x99\x39\xc0\xf3"
- "\xd1\xa3\x52\xf0\xdd\x2c\xf3\xfc\xd6\xe5\xa1\xfa\xbe\x17\xf9\x3e"
- "\xba\x46\x89\x9f\x70\xbb\xd5\x6d\x84\xaf\x69\x70\xde\x67\x55\x6e"
- "\x5b\x1a\xca\xc2\xe8\xf3\x83\xe3\x7e\x33\x11\xf9\x40\x74\xb9\xc2"
- "\xc4\xc5\x63\x79\xd0\x5e\x47\x47\x85\xc1\x39\x0c\xe3\x9c\x18\x67"
- "\xbc\x45\x7d\xe8\xb8\x0d\xa7\x7d\x10\x26\x43\xe4\x45\x88\x9d\x4f"
- "\xe5\x11\x72\x01\xc3\x2e\x42\x4c\x5b\xaf\x98\x13\xef\x32\xec\x84"
- "\x08\x7c\x3f\xc1\x6c\xf6\x31\x18\xdf\x83\xf2\xa4\x75\x5c\xf7\xc1"
- "\x45\x88\x3e\x88\x30\x11\xb4\x86\x95\xda\x27\x0c\x8f\x70\x78\x7d"
- "\xb4\x8e\x03\xe5\x2c\xfa\xa7\x78\x57\x63\x3a\xbe\xc6\x6f\x55\x0d"
- "\x24\x10\x8d\x7c\x1e\xab\xcd\xae\xa2\x79\xa1\xd4\x1e\xba\xd5\x70"
- "\xa7\x9b\xcb\x6c\x34\xb6\x7f\xda\x7a\x69\x0e\x2f\xd1\xa0\xc1\xb4"
- "\xbb\xd4\x3a\x3e\x27\xdc\x85\xb8\x88\x86\xc7\xfc\x36\xbb\x7a\x00"
- "\x8f\xda\x7e\x1b\xcd\xef\xed\xb5\xa9\x97\xb8\xd5\xd1\x4c\xe0\xd1"
- "\x19\x64\x3c\x04\x87\x79\xf1\x79\xf2\xbd\x36\x4d\x65\x10\x4c\x6a"
- "\x70\x5e\x73\xdc\x10\x41\x34\x77\x82\xae\x86\xf2\x93\xca\xc8\xe7"
- "\xdc\x3a\xb6\xf9\xc0\x81\xfe\xc5\x45\xd0\x59\xb1\xac\x86\x66\x2f"
- "\xad\x75\xb6\xc7\xd4\xed\x06\xe0\x7a\xa1\x06\x83\x84\xb3\x5a\xc6"
- "\x49\x38\x82\xca\x1a\x2b\xf2\xa7\xb2\x6a\x41\x82\x6d\x09\xa6\x91"
- "\xf0\x62\xb9\xc6\xd5\x22\x5c\x0b\x7a\x2d\x12\x4c\xb7\x0c\x13\x54"
- "\x07\x53\x25\xfa\x88\x3f\x54\x67\x59\xb2\x7e\x7a\x6c\x31\xd8\xfe"
- "\xdf\xd6\x2d\xf4\x36\x10\x2e\xd1\xa0\x17\x34\xa8\x90\x06\x95\x5d"
- "\xe0\x8f\x49\x93\xf1\x3b\x41\xe7\x0d\xa6\xb9\x96\xc3\xea\x46\x08"
- "\x3d\xe5\xb0\xc5\x01\xd8\xe8\x10\x58\xe4\x85\x5a\xd4\x01\xa8\x9d"
- "\x10\x63\x42\x7e\x44\x20\x4c\x23\xd6\xb7\x41\x86\x91\xca\xaf\xc7"
- "\xb8\x05\x12\xbe\x96\x20\x7c\xc5\x84\x8f\xe6\xc5\x0a\xdb\x1b\xe3"
- "\x0c\xd8\x3e\x68\xc5\x77\xd7\x60\xfb\x4a\xfa\x1a\xab\x45\xb8\x04"
- "\x0a\xb7\x4c\x03\xdd\x25\x88\xf9\x73\xaf\x3a\xa2\x5b\xf0\x22\x16"
- "\xed\xdf\xa8\x01\xdf\x06\xdf\xe7\x3a\xc1\xe0\x95\xf2\x33\x11\x6f"
- "\x02\xf6\x96\xf2\x8c\xcd\x90\xf3\x94\xe3\x83\x75\x26\x65\xc4\x1c"
- "\xf4\x4f\x52\xfe\x3e\x25\x3e\x65\xb2\xec\xbb\xcc\x6f\x59\x9f\x30"
- "\xc7\x3d\xbf\xc5\x70\x7f\xe2\xdb\x79\x09\x33\x79\xdb\x7f\x67\x67"
- "\xe2\x34\x6c\xdd\x7f\xcb\xff\x56\x52\x48\x02\x0f\xc1\x70\x7a\x9e"
- "\x46\xcf\x92\xbf\x80\x4f\xab\x57\x45\x0c\x9f\x51\x48\x4f\xc2\x73"
- "\x48\x19\xfb\x4c\x6e\x44\xaa\xf4\x3c\x5a\xc4\xdc\xc3\x7d\x0e\xe3"
- "\xc3\xf4\x7c\x07\xc7\x35\xa7\x81\x72\x9e\xfd\x72\xe2\x0f\x1f\xff"
- "\x97\x88\x8f\x5e\xd8\x98\x12\x75\xa7\x8d\x60\x66\xfe\x28\xf1\x0d"
- "\x0c\x69\xa6\x90\x69\x6f\x72\x0a\x82\x53\x9d\xa6\x54\x52\x7c\xfc"
- "\xcc\x45\x89\xaf\xae\x59\x35\xfd\xb7\x89\xb1\xb7\x7f\x90\xd5\x4c"
- "\xe9\x6f\x8f\x0d\xc9\x69\x5a\x80\xaa\x75\x47\xee\xda\xff\xbd\xb7"
- "\x05\x96\xc7\x57\x45\xfc\x36\x65\xf2\x96\x42\x0a\x9d\xce\x7d\x31"
- "\xf2\x55\xe6\x5c\x4b\x8c\x7c\xe1\xf1\xcf\xfe\xf5\xf1\xb7\xce\x3d"
- "\x75\x17\x96\xf4\xf6\xca\x73\x4f\x3d\xfe\xd6\x67\xff\x1a\xb1\x97"
- "\x20\xef\x36\x25\xc6\x19\x22\xe7\x6f\x6d\x79\xec\x2e\x4e\xd5\xb8"
- "\x83\xfa\xea\xf1\x0d\x13\x1a\x27\x9e\x89\x6f\x9d\xf4\xef\x93\xff"
- "\x34\xe5\x0b\x83\x7b\x2a\x43\x3f\xe2\xa1\xc4\xa9\x03\x7e\x04\xa0"
- "\x1f\xd1\x89\x7e\x44\x29\xfa\x11\xed\xc1\x7e\xc4\xc7\x23\xe7\x95"
- "\x08\x5f\x42\xc0\x0b\xff\x67\xe6\xbf\xa3\xff\xb3\x19\xfd\x9f\x99"
- "\x1f\x45\xae\x7e\xe2\xa3\xa8\x0c\xe1\xff\xc4\x44\x0f\xe3\x3e\xd0"
- "\x78\xbc\xa3\x1f\xf4\xeb\xa9\x78\x37\xe2\xfb\x5d\xb1\xc3\x43\x7d"
- "\xa2\x95\xa3\x5b\x23\xb3\xd0\x27\x4a\x46\x9f\x28\x25\xa7\x55\xbb"
- "\xe4\x57\xad\x23\x92\x52\x5a\x47\x0e\xf8\x45\x8b\x5b\x53\xf5\x73"
- "\x5a\x97\x68\xa0\xf5\x51\x10\xbe\xd1\x3e\x48\xfc\x58\x13\xa7\xfa"
- "\x4d\x14\x68\x7e\x33\xba\x7e\xe4\x6f\xa2\xed\xf6\xdf\xe8\xf0\x8a"
- "\x81\xfa\xdf\xc4\xc2\xf0\x0f\x1e\xaa\x87\x0f\x16\x96\x3a\x3f\xd2"
- "\xc0\xe8\x8f\x46\xc0\xb5\x8f\x62\xf0\x9e\x7d\x14\x3e\x7a\x11\x34"
- "\x1f\x8d\xd4\x5c\x0b\x94\x37\xee\xcf\x1f\x4d\xfd\x70\xfe\x47\xd3"
- "\x92\x7f\xf9\xd1\xf4\xd4\x95\x1f\x25\x7c\xf8\xe1\x47\x33\x9c\x93"
- "\x83\xfd\x26\x2a\x33\xc0\x3d\xfb\xc8\x83\x45\x7e\xdf\x6f\x1c\x96"
- "\x38\x6c\x7f\x1e\xf7\x07\xbf\x2f\xf9\x85\xdf\x4f\x59\xf4\xc2\xe3"
- "\x8f\xe7\x46\xa8\x53\x26\x73\xef\x52\xf2\x34\x03\xde\x67\xa8\xcf"
- "\x39\xbf\x25\xe0\x73\x26\xb8\x03\x3e\xa7\x61\xd8\xfc\x6d\x21\xfe"
- "\x59\x1f\x86\x9d\x4f\x4e\x30\xcc\x48\xe4\x9e\xd9\xb9\xf1\x4a\x6f"
- "\x6d\xf6\xa1\xc4\xf9\x09\xda\xfb\x3b\xd0\x67\x1b\x7e\xe0\xc5\xdc"
- "\x9f\xd0\x85\x5e\xdb\x57\x3a\xf5\x0b\xcf\xe6\x24\x65\xee\xbd\x1b"
- "\xeb\xfc\x76\xf2\x82\x87\xbf\xb8\xbf\xe9\xc5\x17\x5f\x68\xfa\xe8"
- "\xa9\x55\x77\xfd\x33\x86\x7d\x90\x50\x8c\xf2\xf3\x1f\xa6\xff\x98"
- "\x73\x2d\x39\xf2\xc5\x27\x9a\x5e\x78\x6d\xc3\x86\x16\x92\x17\xaa"
- "\x5b\xb9\x8d\xea\xb5\xc5\xa2\x4f\xa2\xfa\xb9\xc7\x36\x06\xfd\x9f"
- "\xf1\xad\xca\xb6\xec\x3b\xbd\xfc\x4e\x2f\xbf\xd3\xcb\xff\x09\xbd"
- "\x1c\x0b\x42\x2f\xc7\x1f\x0c\xa7\x97\x4b\x96\x2f\x5e\x31\xcf\xb0"
- "\x35\xd7\x60\x29\xdc\xb2\xa1\x30\x67\x93\xa1\x60\x4b\x8e\x29\xcf"
- "\x34\x12\x06\x22\x72\x72\x8b\xf3\xb7\xe5\x14\xe7\x0d\x5a\xf3\xa8"
- "\x97\x7d\xd2\xc1\xbe\xf5\x78\xef\xd0\xbe\xf5\x84\xb8\xf0\xfd\x12"
- "\x15\xb6\xed\x13\x12\xc3\xc4\x4d\x93\xe2\x96\x86\x89\x7b\x58\x8a"
- "\x33\x87\xe9\x03\x8e\x12\x7d\x8c\x09\xfb\xc2\xc5\x61\x78\x8d\xec"
- "\x93\x60\x3f\x4d\xdd\x32\xad\x07\xc8\x27\xb9\x08\x13\x3e\xc4\x32"
- "\x75\x63\xfc\x19\xd9\x97\x71\xc2\x84\x7d\xb2\x8f\x26\xf5\x43\x8c"
- "\x6e\x5b\x0a\x96\x73\x82\x33\x4c\x1f\xe5\x6e\x29\x5f\x5f\xc0\x37"
- "\x5a\x6e\xf0\xd8\x26\x46\x0d\xf6\x8d\xce\x81\xe8\x43\x4e\x34\x2a"
- "\x60\x93\x64\x58\xf4\x27\x69\x2f\x88\x1e\x5a\xab\xd6\x03\x13\xcf"
- "\x30\xdb\xf8\x6a\xf2\x29\xa9\x1f\x49\x78\x44\x5f\xb2\x83\xf7\x25"
- "\xb1\xaf\xd8\x85\x69\x8b\x83\xfa\x93\x5d\xe8\x1b\x0f\xa7\xfe\xe4"
- "\x45\x98\x78\x82\xfa\x94\x87\x39\xae\x4b\x84\x6b\x19\xe1\x72\xc2"
- "\x44\x3b\xf7\xfb\x44\xda\xc6\xa0\x71\x33\xec\xd7\x4e\xe4\x7b\x99"
- "\xca\x7e\x21\xc6\x9f\x73\x6a\xb2\x7a\xe4\x32\x90\x2f\x28\x95\xa3"
- "\x4c\xd4\xc3\xc4\x30\xfd\x9f\x73\x95\xa2\x1f\x18\x3f\xd0\xff\x21"
- "\x7c\x7e\xdb\xf8\x9f\xd6\x72\x9c\xf1\x09\x32\xce\x60\xb9\xcc\xdd"
- "\xb2\x79\x7d\xfe\x86\xad\x85\x79\x86\xa2\xa5\x4b\x0d\x9b\xb6\x98"
- "\xf2\x66\xcf\x9e\x3d\x32\x44\xfe\xa2\x84\x4f\xfb\x49\x0a\xc9\x21"
- "\xf9\xb5\x92\x1c\xa6\xa0\xcf\x29\xf9\xcd\xf1\x65\xa1\xfd\x8b\x4f"
- "\x52\x24\xff\x56\x87\x30\x89\x12\x4c\x43\x08\x0c\xe2\x93\x7c\x64"
- "\xf2\x73\x47\x4b\x30\xad\x4a\x3c\x18\xc7\xfb\x45\xb4\xfe\xae\x57"
- "\x94\xaf\x47\x81\xe7\x21\xa9\xbf\x83\x72\x3f\x4c\xea\x27\x4c\xd2"
- "\x29\xf0\x3c\x14\xe8\x6f\xa8\x64\x98\xb9\xc1\x7d\x13\x7c\x4f\x95"
- "\xeb\x24\xe0\xc7\x37\x77\x0b\xdc\x2a\x5d\xc0\xef\x9f\x54\xa0\xe8"
- "\x4b\x8d\x0d\xe0\x06\x9d\x04\x53\x1e\x4a\x63\xf3\x25\xa9\xac\xda"
- "\x20\x3c\xa7\x43\xf1\x34\xff\x97\x84\x27\x22\x08\xa6\x43\x41\x63"
- "\xf7\x60\x1a\xed\xa3\x05\xee\x7a\xcc\xdf\x29\x95\x6d\xb2\xa2\xfc"
- "\x08\xc3\x71\xc7\x21\x4c\xbc\x0c\x33\x37\xb8\x2f\x45\xfd\x39\xbe"
- "\x26\x13\x26\x2f\x25\x79\xc2\x6b\x18\xd2\xfd\x97\xa0\x3e\xdd\x70"
- "\x29\x9d\xb2\xfc\xa3\x7a\xb1\xbf\x50\x17\xd2\x4f\x9b\xac\x28\x3f"
- "\xf6\x0d\x63\x65\x1e\x69\x64\x18\x65\xf9\x9d\x82\xc6\x98\x98\x40"
- "\xf9\x27\x77\x28\xf0\x8c\x25\x99\x22\x5c\x41\x79\xf9\x14\x78\x3a"
- "\x25\x3e\x06\xf1\x7a\x8a\x41\x51\x1f\xff\x29\xd1\x13\xc4\xeb\x29"
- "\xa9\x0a\x3c\x57\x29\x3e\xb4\x5c\x53\xcc\x0a\x3c\x57\x03\xe5\x42"
- "\x39\x16\x30\x07\x15\xfd\x58\x35\xb3\x7d\x30\x4a\x81\xa7\x51\x86"
- "\xe9\x1d\xf6\x42\xbd\xa8\xdb\x29\x2d\xb2\x2d\x12\xf5\x1a\x9f\x48"
- "\xb8\x31\xfc\x42\xb0\x2d\x40\xba\xba\x07\xf3\xc9\x00\x4a\x3e\x05"
- "\xd1\x25\xf5\xc5\x0d\x09\x8a\xf2\x5d\x92\xf8\x34\x32\x08\x4f\x9a"
- "\xa2\x7c\xff\x25\xe1\x89\x0c\x82\x51\xd4\x7f\x73\x8f\x84\x47\x13"
- "\x04\xa3\x94\xff\xcb\x12\x9e\xe0\xbc\x4e\xdf\x9a\x4f\x86\x10\xf9"
- "\x27\x5e\x61\x58\xcf\x2d\xc6\xa0\xb4\xe2\xdb\xc1\x54\x6c\xff\xde"
- "\xaa\xe1\x6b\xa6\x63\x0b\x0f\xd2\xde\x52\x68\xa3\x53\xf8\xd8\xe0"
- "\x0d\xb2\xd3\x53\xad\x75\x68\xcf\x44\x19\x20\x51\xd8\xee\xa9\x7c"
- "\xbf\x10\x4c\x9b\xee\x84\xd1\xc5\xc1\xdf\x01\x9c\x30\xf5\xa0\x14"
- "\x87\xe5\x1f\xd3\x21\xc7\x51\xb8\x18\x5f\x9c\x8a\xed\xdf\x78\x8b"
- "\x68\xc7\xa6\x16\x48\xb0\x68\xf7\xe3\xd3\xc2\xad\x63\x1e\xea\xfb"
- "\x4b\x91\x9e\xf9\x4b\xc7\xd3\xba\xe6\x6c\x9d\xdf\xc6\xc0\x61\xf5"
- "\x82\x61\x02\x94\x76\xc2\x34\x2d\xf5\xf1\x0f\xef\x04\x6d\xa9\x85"
- "\x79\x69\x0f\xdc\x76\x57\x0f\x94\xba\x58\x37\xed\x33\xbb\xfb\x1a"
- "\x68\xe9\xbc\x84\xdd\xcf\x81\xbe\xa5\xe4\xcf\x61\xd7\xe6\xfa\xe9"
- "\xdc\xc6\x78\x4a\xdb\x05\xed\x35\x5d\x50\x5a\x13\x9a\xb6\x74\x12"
- "\xe8\xdb\x68\xcf\x5a\x1b\x44\x13\x1d\xf4\x3d\xc5\x17\x9b\xad\x2b"
- "\x39\x06\x9a\x52\xf4\x2e\xdb\x4c\x76\x99\x96\x73\x44\xcb\xbe\x4b"
- "\xa0\x7d\x6b\xbd\x5d\xbd\xf7\x12\xd1\x6b\xd6\xbd\xbb\xd3\xab\x6e"
- "\xd6\x2f\x85\x66\xfd\x05\x68\xd1\xcf\x87\x16\x6b\x2a\x1c\xbe\x04"
- "\x51\xcd\xde\x64\x68\xd1\x2c\x86\x96\x84\x54\x70\xf4\xe0\xb3\xa1"
- "\x1f\x61\xdc\x7c\x1f\xa4\x8b\x30\xcd\x5e\xf5\x2c\x68\x9d\x02\x27"
- "\xf2\x6c\xda\x59\x79\x4f\x1f\x7a\x0f\x57\x8e\xa2\xf1\xa0\x47\xfa"
- "\xba\x91\x96\x07\x3a\x61\x7a\x64\x82\x1e\x12\xa9\xfd\x75\x54\xfb"
- "\x40\x53\x02\x23\x86\x90\x8b\x38\xbe\x1f\x28\xfa\x51\xb5\x47\xb1"
- "\xad\xc7\x7b\x2f\xca\x84\xc7\x36\x3d\x19\xf3\xbe\x20\x8d\x7b\xf5"
- "\x94\x9e\x40\x39\xdb\x9e\x49\xfb\x83\x60\x3b\x3d\x3d\x53\x8e\xa3"
- "\x7d\x4e\x69\xff\xd2\x39\x71\xa0\x73\xf8\x52\xe0\xfd\x1b\xdd\xb4"
- "\x06\xbf\x87\xf6\x45\x20\x7c\xd8\xe6\x47\xd0\xf8\x13\xd2\x73\x17"
- "\xb6\xf1\x3d\xd3\x11\x0e\xd3\x63\xfd\x9f\xe3\xfb\x1a\xb3\x71\x6b"
- "\xdc\xfe\x71\x6b\xae\xf9\x5f\x5b\xd3\xcb\x5e\x5b\xf3\x65\xff\x6b"
- "\x6b\xfe\x5a\xba\x03\xb4\xfd\xe3\xd6\xb8\xda\x2d\xbc\x0e\x74\xed"
- "\x96\xcb\xb4\x9e\x5e\xbb\xeb\x32\xe8\x9e\x79\x0e\xeb\xde\xf7\x47"
- "\xd8\x95\x0f\x7a\x7f\xcc\xfa\x56\x87\xef\x53\x78\xa6\x04\x18\x3e"
- "\x77\x84\x2b\x5f\x6f\xac\x39\x5d\x1e\x4f\xf3\xd8\x12\x74\x4e\xcd"
- "\x5a\xbe\xf6\xdf\x15\x63\x49\xc7\x2b\x03\xaf\x4c\xbc\xb2\x58\xac"
- "\x39\x0b\x79\x55\x3a\x7a\x8f\x0a\x68\x1f\x9f\x39\x7e\x50\x5d\x82"
- "\x84\x99\x48\xbf\x6e\x08\xbe\xc5\xfb\x2b\xdf\xa5\xfd\x7f\x77\xd3"
- "\xfe\xbf\xe4\x03\x90\x7e\x91\x3f\x8a\xf9\x58\x31\x1f\x2e\xdf\xa8"
- "\x23\x6e\x16\xfb\x6e\x19\xf9\x74\xee\xe7\xcd\x2a\xd7\xf3\x66\x75"
- "\x6f\xec\xbb\x7b\x11\xa6\x06\x61\xca\x24\x1e\x76\x13\x2e\xd4\x1b"
- "\xd7\x28\x1f\x44\x20\x4e\xcb\xcf\xaf\x77\x68\x8e\x1f\x65\x17\x10"
- "\xae\x65\x00\x17\xe2\xae\xe2\x7e\x52\x42\x87\x1c\x46\x7e\xd2\x21"
- "\x84\xa3\xf4\x0e\x6f\x0a\x7d\x33\x74\x3a\x0a\xba\x69\x1f\x8b\x91"
- "\xac\x4f\xe4\x47\x3e\x1c\xe9\xea\x28\x2f\x0c\xf3\xd8\x20\x9d\x70"
- "\x53\x3a\x47\x4f\x37\x60\xba\xbd\xac\xd4\x8c\xfe\x22\x2c\xf7\x30"
- "\xb3\x8a\xf6\xb4\x6d\xc6\xf4\x22\xef\x19\x29\x32\x8d\x94\x07\xdf"
- "\xd3\x96\xe8\x44\x79\x68\x2e\xf0\xc2\xa8\x6a\x1a\x27\x87\x55\x84"
- "\x8f\x70\xa1\x1c\x38\xb1\xac\x7b\x9b\x0b\x5c\xe0\x67\x21\x38\x9d"
- "\x12\xbe\xf2\x10\x7c\x18\xce\x10\x1f\xc9\x5f\x0b\xa6\x19\x55\xcf"
- "\xf1\xad\xfc\xb9\x9f\xf0\x79\x41\x63\xe0\xf4\x3e\x4e\x38\xf8\x9e"
- "\xd4\x88\xd3\xbe\xed\x61\xf4\x1d\x67\x78\x5d\xa5\xe6\x08\xbe\x7e"
- "\x1e\xd3\xbf\xbb\xbb\x3b\x92\xf5\x66\x46\x8c\xe6\x6b\xe7\x1f\x06"
- "\xfa\xd6\x8a\x30\xbf\x63\xbd\xe6\x88\x51\x3d\xe8\xeb\x21\x0c\xed"
- "\xa7\x45\x74\x06\xd7\xe5\xca\x45\x8f\xcf\x87\xc7\x53\x97\xa4\xce"
- "\x87\x65\x0f\x2d\x9c\x0f\x89\x0f\xcc\x4a\x9c\xfb\xbd\x1f\x7c\x8f"
- "\x3f\x7c\xef\x07\x49\xdf\x83\xf4\x27\x56\xce\x87\xf4\xe5\xf3\x61"
- "\x15\x5e\xe9\xab\x16\xad\x4c\x5d\xb4\x6a\x3e\x64\x2e\x5e\x82\x6f"
- "\x0b\xe7\xdf\x9b\xf8\xc8\xac\xf4\x85\x4b\x16\xc1\x63\x19\xf7\x25"
- "\xde\x77\x1f\x3c\xb4\x68\xe9\xbd\x89\x89\xd2\xfd\xde\x44\x02\x79"
- "\x2a\x69\xd1\xaa\x59\xe9\x85\x5b\x8a\xb7\xcc\x5a\xbe\x64\x21\x85"
- "\xc0\xa2\x45\xf3\xd3\x43\xfc\x48\x63\xff\xf5\x7e\xe2\xb7\x9b\x5d"
- "\x4d\xa3\x7d\x8c\xa1\x16\xe5\x00\xaf\x1e\xbe\x3f\x12\xdc\xf9\x6f"
- "\xb5\x54\x7f\xbc\x2d\xb8\x23\x8e\xda\x53\x8f\xed\x0e\xaa\x7f\x3b"
- "\xf1\x91\xf6\x12\xbe\x08\xb3\xe7\x63\xdc\x78\xc9\x1f\x89\xc4\x78"
- "\x6f\x68\xfc\x5d\x59\x18\x3f\x85\xf6\xdb\x71\xe0\x85\xbc\x77\xa3"
- "\x3d\x44\x1e\xbb\xa0\xb7\x34\x33\x92\xef\x77\x88\xf5\x4e\xfb\x50"
- "\x78\x6c\x77\xce\x0d\xd2\xfb\x2e\xda\xaf\x82\xc6\x93\xaf\xc0\x9d"
- "\xa3\xda\x8b\x53\x68\x4f\x2a\x70\x14\x4b\x38\xae\x0d\xe0\x18\x29"
- "\xed\x99\xe8\xac\xa5\xbd\x40\x04\x9e\x92\x20\x1b\xe1\x24\x3c\x87"
- "\x31\x4e\xc2\xf5\x58\x3b\xda\x0a\xb4\xe5\x13\xfc\xa5\x46\x60\xb1"
- "\xd9\x7a\x7f\x9f\x11\xc4\xf8\xeb\x9d\xa7\x83\x64\xdb\xdd\x62\x45"
- "\xb8\xb7\xd2\x54\xb4\x2f\x03\xdf\xa3\x01\xee\xb0\xa3\x8c\xbb\xfb"
- "\x2b\x2d\x39\xec\x2a\xdf\x17\x71\x18\x96\x6f\x16\x96\x2f\xc1\x5f"
- "\x69\xc9\xe6\x7b\x8c\x72\x38\x63\x1c\xa3\xf7\x58\x84\xeb\x1b\x08"
- "\x1b\x43\x61\x1e\xfa\xbe\x43\x7b\x76\x33\x1e\x1e\x81\xe1\x9f\xa2"
- "\x5d\xeb\x40\xd8\x6c\x82\x9d\xe3\x83\xe1\x7c\x3f\x94\x52\x15\x74"
- "\x82\x31\xcb\x1f\x6b\x59\x17\x94\x1f\xe1\xc9\x12\xed\x18\xd6\xc5"
- "\x55\xc4\xd3\xcb\xc3\xd5\x18\xfe\x0b\xc4\x9f\x4b\xf6\x52\xd8\xf0"
- "\xd9\x7c\x7f\x22\x69\x4c\x3e\xf0\x4e\xfb\x3d\xef\x16\xef\xcd\xc8"
- "\x4b\xfa\x4e\x40\xdf\xf8\x3d\x36\x23\xfa\x3f\x09\x69\xa2\xad\x9c"
- "\xcd\xf3\xa0\xfd\x65\x99\xee\xcb\x46\xc4\x6b\xb2\xef\xec\xe1\x67"
- "\x04\x39\xc1\x58\xe0\x2f\x35\x83\x82\x26\x23\xd1\x4f\x36\x04\x79"
- "\x31\x0b\xe5\x60\x84\xc7\x76\x17\x28\xe4\x20\x1e\xf1\xe4\x20\x7d"
- "\x1d\x58\xa6\x1c\xc4\x93\xe0\xef\x35\x63\xbe\xd8\x5f\x64\x66\xf4"
- "\x95\x02\x38\xa4\xf4\x29\xa1\xe9\xef\xec\xa2\x74\x08\x1f\xe9\xe9"
- "\x25\xf8\x3b\xbb\x89\xe7\x92\xdc\xa1\x5c\xde\x65\x51\xc8\xe5\x54"
- "\xa4\xe5\xfb\x41\xf1\xe5\x8a\xf8\x48\x8c\xff\xa1\x14\x8f\xba\x7f"
- "\x57\xa3\x82\xde\xb3\x18\xbf\x00\xe9\x75\xa3\x6e\x47\x60\x7e\x0d"
- "\xb5\x92\x6f\x22\xc1\x3b\x15\xf0\x3e\x84\x5f\x48\x72\x43\xed\x0e"
- "\xc1\xd7\x49\xba\x83\xf0\x5a\x8f\xed\x6e\x5d\x28\xfc\xac\x3f\x23"
- "\xfc\xd2\x00\x7d\x77\x27\x86\xc6\xdf\xed\xc5\xf8\xc7\x48\xd6\xf1"
- "\xfe\x34\xf9\xfa\x64\x4f\xc8\x96\x35\x17\x50\x7d\xdd\x9d\xad\x80"
- "\x2f\x43\x38\x93\xc4\x23\xb5\xc4\xa3\x06\xa9\xef\x7e\x41\xa2\xa1"
- "\x4a\x91\xe6\x34\xa6\x29\x40\x3e\xe6\xc8\x72\x19\x26\x4d\xab\x22"
- "\x4d\x37\xd5\x23\x13\xf9\x68\x3c\x7d\x81\x34\x92\x9d\x0c\xc6\x41"
- "\x65\xbb\xcd\x63\xbb\x27\x4a\x51\xf6\x54\xcc\xb7\xf8\x90\xb0\x3b"
- "\xb7\xa1\x0c\xdd\x87\x61\xf7\x23\xce\x3c\xd2\x81\xc3\xe4\x0f\xba"
- "\xbc\xc0\x4a\xd3\xa2\x84\xec\xde\xb3\x69\xb4\x0f\xe8\x79\x16\x3d"
- "\x13\x6e\xe6\x59\x2a\xe9\xe4\x3d\x9b\xf0\x4e\xe1\xfc\x7c\x1b\xb2"
- "\xc3\xcc\xf3\x23\xbf\xc0\x79\x4f\x05\x9d\x7f\x86\xef\xfd\x52\x1e"
- "\xb3\x68\x0f\x51\xa4\x7f\x1d\xb6\x3b\xc0\xb6\x23\xdc\x4e\x58\x88"
- "\xe1\x93\xb8\xae\x0a\x38\xfe\x2e\xf2\x48\x23\xf9\x9e\x8b\xef\x63"
- "\xa4\xf4\xa3\x08\x1f\x3e\xdf\x2b\x3d\xab\xfa\x09\xd7\x55\x59\x07"
- "\x67\xf1\xfd\xe4\x48\x0f\x39\x7e\x4c\x4f\xfb\xb5\x0a\x9c\x33\xff"
- "\x8a\xf7\x25\x78\xff\x23\xde\x1f\xc3\xfb\x2f\x68\xff\xd4\xd2\x7e"
- "\xae\x8f\xf4\xfe\x36\xde\x57\xe2\xbd\x02\xef\xab\xf0\xbe\x0b\xef"
- "\x0f\xe3\xfd\x49\xd2\x0b\xda\x0b\x9e\xf6\xb4\xc1\xb6\x55\xc8\x16"
- "\x7d\xfb\xf3\xa4\x11\x0f\x16\x21\x4c\x2a\xd7\x57\x61\x5f\xb4\xa2"
- "\x1e\x67\xf2\xf3\x87\x50\x1e\x28\x6c\xb8\x90\x07\x11\xd6\x2f\xdb"
- "\xa1\xab\x81\x30\xc9\x36\x49\xba\x28\x85\x09\xfc\xe9\x88\x3f\x9e"
- "\x68\x65\x02\x57\xa4\xa8\x73\x09\xbf\x48\xa7\x09\x93\xa7\x2a\x38"
- "\x4f\x27\xdc\xe3\xa2\xfd\x90\xf0\x7e\x81\xef\x37\x09\xb3\xa2\x18"
- "\x97\x7b\x6c\x67\x39\xbe\x7b\x9a\x24\xb8\x72\xe2\x31\x4f\x2f\xc2"
- "\x67\x06\xc9\x52\xac\xc7\x36\x2b\x53\x21\x4b\xe8\xeb\xdf\xf1\x02"
- "\xc9\x0c\xf1\x9d\xca\x36\xda\xc2\xdb\x72\x5e\x16\x8e\xff\xaa\x90"
- "\xc9\x5a\x69\x6e\x92\xd0\xdf\x59\xf5\x0a\x3c\x67\x10\xcf\x8f\x15"
- "\xfa\xde\x13\x68\xd7\x66\x9d\x53\xd8\xa3\x06\xcc\xef\xbc\x13\xf5"
- "\x41\xb2\xab\xee\x88\x12\xd2\x97\x59\x5e\x27\x5c\xe2\x7e\x1e\xc6"
- "\xaf\x27\x3c\xee\x52\xbe\x8f\xbf\x3b\xc2\x42\xe5\x9d\xad\x97\xe3"
- "\x79\x5c\x4c\x23\x6f\xcf\x22\x0a\x78\x1c\xb6\x7f\xd3\x75\x72\x1c"
- "\x88\xfd\xe1\xdc\x11\xc5\x3c\x2e\x3d\x80\x37\x3b\x49\xc2\x1b\x11"
- "\xf6\x0c\x86\xf2\x6c\xe3\x2c\x00\xf5\xdd\x65\x10\xe9\xf0\x9d\x87"
- "\x15\x3e\xd6\x3f\xab\x0c\x46\x38\x7c\xa7\xe0\x2e\x80\x18\x87\xef"
- "\x02\xdc\x0d\x30\xd5\xe1\xab\x42\x7f\xa5\x81\xe2\xdf\xbf\x13\x54"
- "\x2a\xbc\x97\xde\x51\xa6\x56\x39\x7c\xc5\x90\x50\xa6\xc1\x7b\x01"
- "\x2c\x8e\x64\x1e\x87\x6f\x29\xc2\x99\x60\x45\x3f\xbb\x9a\x1a\xc9"
- "\x3e\x5b\xdb\x0f\xba\xa5\xfb\x59\xa9\xc3\x87\x7d\x07\xdf\x59\x0c"
- "\xf7\xb3\x15\xfd\x5f\xe1\xe5\x61\xfe\xf2\xec\xa4\x15\xfd\x57\xd9"
- "\xc2\xfd\xef\xe3\xfb\x67\x0c\xeb\x92\x39\x7c\xc9\xd0\xee\x76\x23"
- "\x5c\x29\x63\x15\xd9\xc6\x67\xae\xa9\xa1\x8f\xce\x4d\xa8\xc8\x4e"
- "\xc2\xb2\xa4\xf5\x61\x39\xb0\x1d\x7e\xa4\xef\x79\xbc\x57\x66\x2f"
- "\xe6\xef\xe5\xd9\x99\x4c\x97\x9d\x36\x1b\x3b\x62\x54\x06\x87\xaf"
- "\x0b\xd6\x62\x57\x62\xc5\x0e\x17\x23\xfa\x47\xef\xa1\x7e\x58\x32"
- "\xed\xb9\x1c\xbd\x62\x47\x29\xc3\x38\x2d\x8b\xc9\x4e\x73\xf8\x7a"
- "\x00\xf3\xc8\x44\x7c\xab\x39\xbe\xf2\x6c\x2b\xc2\xba\x08\x2e\x18"
- "\x0f\xe1\x20\xd8\x15\xfd\x10\x8d\xf0\xd6\xbe\x98\x6c\x33\x5e\x07"
- "\xf0\x6a\xc2\xb4\x9f\x30\x5b\xdc\xaf\x68\xdf\x4c\x4c\x8f\x6d\x73"
- "\x76\xb7\x97\xce\x78\x20\x5e\xf6\xc3\x70\x84\xef\x40\xb9\x4a\x45"
- "\xf9\x44\x7a\x73\xb4\x9c\xde\xca\x9c\xe1\x5e\x5e\x8e\x9c\x61\xa2"
- "\x1c\x39\x91\x14\xde\x8b\xb2\x83\xcf\xc6\x5e\x11\x77\x27\xa6\xcb"
- "\xe0\xe9\xca\x73\x8c\x4c\x97\x93\xe4\x45\x3d\x44\xbe\x96\x11\x1f"
- "\x91\xaf\x65\xc4\x4b\x56\x91\x63\x74\x58\x0f\x02\x8b\xc9\x49\xea"
- "\x8b\xc9\x49\xc3\xf4\x4f\xf5\x71\x5f\x25\xc7\xec\x15\xb8\x37\x20"
- "\x9e\x2c\x94\xef\x08\xc4\x61\x46\x5c\xd6\x3e\x9b\x01\x56\xec\x60"
- "\xde\x15\xbe\x3d\xbe\xb5\x3b\x20\x62\x26\x94\x21\xbd\xef\x21\x8f"
- "\x4c\x58\xce\x16\xbc\xa7\x62\x3c\xdc\x8e\x79\xbd\x8f\x78\xcd\x94"
- "\x1f\xe6\x63\x45\x9c\x5b\x11\x97\x89\x68\xfa\x8a\xce\x52\x8b\xcd"
- "\x39\xf0\x95\xa0\xef\xa4\xbf\x3c\xa7\xd5\xaf\xcb\x69\x92\x65\x88"
- "\xe4\x47\xf0\xad\x0a\x96\xbb\x99\xcf\xe1\x3b\x8e\xad\x0e\xf6\x91"
- "\xdc\x17\x28\x1e\xfb\x4a\xa7\xb0\x9e\x49\xa6\x8a\xf1\xde\x00\x24"
- "\x3f\xed\x96\xfd\x04\xfb\x3e\xc9\xd0\x72\x8b\x7b\xcf\x2c\xb0\xa8"
- "\xf0\xbd\x74\xad\x4f\x0b\xcf\x58\x34\x65\xfd\xe5\x39\xd5\xed\x16"
- "\xaa\x97\xf3\x98\x86\xd2\x15\x40\xb4\x0a\xfb\x0b\x2a\xe6\x8b\xb6"
- "\xba\x34\xa3\xcc\xa5\xac\xdd\xbd\x14\x61\x2d\x40\xe5\x21\x39\x22"
- "\xf8\x65\x3d\xcc\xd9\xaf\x5b\x97\x46\x65\x63\xa3\xcb\xa0\xad\xe7"
- "\x7e\xa0\x3e\x5b\x5b\x4f\x03\xc9\xa9\x9f\xe9\xd6\xe9\x51\x46\xfb"
- "\x96\xf5\x94\x45\x3e\x73\x0d\x54\x18\xd6\xdf\x66\x3e\x85\xf1\x2d"
- "\x08\x77\x96\xcb\xed\xf2\x6b\xbe\x68\x9f\x2e\xe7\x80\xaf\x7c\x9d"
- "\x71\xf9\xb5\x3e\xd6\x66\xae\x82\xa7\x7b\xca\x90\x57\xa7\x60\xd9"
- "\x65\x5f\x44\xbb\xc5\x84\x30\x1e\x0c\x6f\xe0\xf2\xbf\xec\x72\x2f"
- "\x5b\xfe\x1c\xbb\xba\xfc\xda\x67\x6c\x99\x99\xbd\xbf\xd6\x0a\xa3"
- "\x6f\xdb\xc3\xfc\xa4\x17\x67\xbb\x4e\xc1\x6d\x17\x68\x4f\xfd\x54"
- "\x58\x9a\xe3\x67\xcb\x2e\x5f\x65\xcf\x3c\x47\xbc\x49\x86\x36\x33"
- "\xea\x8f\xb5\x8a\xf8\x7d\xb2\xcd\x7c\x06\xf3\x4f\x45\xbc\xa5\xcc"
- "\x61\x3d\x8e\xb0\xf6\xe8\xa7\x2f\xeb\xe0\x6c\x57\x15\xf8\x62\x72"
- "\x0e\xf4\x57\xe4\x54\xfb\x63\x72\x9a\xfc\x15\x39\xad\x2c\x66\x9d"
- "\xde\x57\xb1\xce\xd8\x1f\xb3\x0e\x65\x60\x5d\x35\xd6\xd3\x08\xaa"
- "\xf3\x1b\x36\x30\xe0\xfb\xd1\x1b\x54\xff\xe5\xeb\x4e\x62\x59\x5b"
- "\xd1\x37\x66\x42\xf6\xd7\x9d\xa4\x71\x08\x4c\xdb\xda\x17\xb3\xae"
- "\x09\xe1\x5a\x85\x7e\xad\xeb\x20\xb9\xa4\xf1\x7e\x0c\xfb\x0f\xec"
- "\x23\x45\x60\x7c\x37\x5e\xde\xbe\x98\x5c\x2d\xab\xcc\xcd\x44\xfc"
- "\x31\x5c\xa6\xca\x73\x33\xd9\x83\xe5\xe8\x6b\x5f\x43\x3c\xb9\xd6"
- "\x15\xfd\x0b\x18\xf2\x10\xf5\x24\x37\xd3\x5f\x91\x6b\x66\xb1\xb9"
- "\xd5\x5e\x2e\xfb\xb9\xaf\x11\xee\xbe\xe7\x8d\x34\x3e\xa1\xc1\xf8"
- "\x93\xac\xd2\x34\xc1\x4b\xb2\xaa\x33\xe9\xfd\x3a\x93\x95\x95\x9b"
- "\x8c\x3f\xda\xcf\x5c\xfd\xe5\xa6\x34\x7f\xb9\x29\xc9\x37\x0c\x7d"
- "\x78\xeb\x19\x20\xfb\xe4\xfb\x25\x43\x1e\x7c\x88\xfc\x68\xe0\xf5"
- "\xef\xb0\xa2\x0e\xec\x98\x50\xd6\xd6\x83\xb2\x60\xf9\x47\x6e\x9b"
- "\xda\xdd\xe7\x39\x4f\x59\x8c\x49\x4f\x32\x45\xf5\xfb\x8c\x05\xca"
- "\x58\x85\xc9\xe8\xaf\x30\x25\xf5\x57\x20\xde\x18\xcc\x27\x76\xfd"
- "\xbf\x7a\xb9\xbe\xae\x47\x79\x3d\x03\x74\xee\xa5\x90\xf1\xf5\x4d"
- "\x43\xd9\x48\xb2\x55\x64\x9f\x56\xf8\xbc\x24\x33\x7f\x21\xbb\x26"
- "\xec\x14\xac\x95\xed\x14\xd9\x28\xea\x17\x91\x9d\xf2\x4b\x76\xca"
- "\x2f\xd9\x29\xfe\xae\x43\x5b\x53\x9e\x9d\x46\xf6\x68\x85\x55\xd8"
- "\x99\x15\xfd\x89\x0c\x65\x23\x0a\x71\xa4\x89\xba\x40\x98\xca\xec"
- "\xd5\x1c\x9e\xf3\x29\xdb\xea\x47\x7b\x83\xd7\x01\xbf\xb0\x37\xad"
- "\x92\xbd\x51\xcb\xf6\x86\xce\x64\x43\x9d\xf2\x87\xb3\x37\x7e\xc9"
- "\xde\xf4\x33\x61\x6f\xfc\x92\xbd\xa1\xf0\x7e\xc9\xde\xf4\x87\xb1"
- "\x37\xa8\xcf\x54\xde\x08\xc9\xce\x94\x91\x9d\xa1\xf2\xa2\xac\x25"
- "\xf9\x85\x9d\xc9\xc4\x3e\x91\x9a\xec\x4c\x3f\xa6\xf1\xcb\x76\xc6"
- "\xc3\xd3\x5b\xc9\xd6\xf4\xbd\x00\x68\x3f\x0d\x40\x36\x86\xdb\x13"
- "\xdf\x54\x1f\xd9\x13\xe4\xdf\x02\xa5\x3d\x41\x7c\x07\xf0\x59\x27"
- "\xd9\xa9\xa6\xe8\x3d\xcc\x87\xf6\xa4\x7a\x85\xd5\x8d\x75\xfd\x47"
- "\x88\xf6\xa1\xdd\xb6\x16\x97\x39\xac\x3e\x40\x3b\xd0\xca\xda\xcb"
- "\x00\x69\x44\xf9\xed\x47\x5b\x01\x80\x7a\xa9\xf7\xa1\x8e\xa3\x8c"
- "\x1b\xdb\x2d\x9f\x42\x3f\xea\xea\xb2\x9e\x5e\xc7\x33\x6e\xa3\x6e"
- "\xd9\x65\xe6\x42\xfe\x38\x9f\xb1\x94\xa1\x7d\x31\xba\xda\x7a\xde"
- "\x83\xa5\x5d\xcc\xbf\x34\xdb\x69\x40\x1d\x30\x2e\xcb\xb7\x47\xd3"
- "\x99\xa3\xcb\xaf\x31\x3b\xda\xc5\x7f\x5f\x76\x59\x17\x9d\xd5\x05"
- "\x93\x97\xe6\x30\x7f\x3f\xea\x19\x96\xb7\x1a\xcb\x7d\x12\x69\x6f"
- "\x42\x9d\x6b\x45\x3d\xd3\xfb\x14\x7a\x86\x3a\x73\x14\x9f\x0d\x82"
- "\x7f\xeb\x5a\x51\xcf\x4e\xfa\x79\x7b\xd6\xc5\xfb\xa2\x98\x4f\x2b"
- "\x8d\xdb\xa1\xae\x9d\xf4\x57\x08\x5d\xf3\x8b\x74\x1d\x7e\xe2\x9f"
- "\x5a\xd2\x35\xac\x0b\x8c\xef\xc6\xcb\x8b\xfa\x13\x5e\xd7\x2c\x41"
- "\xba\xf6\x9c\xa4\x6b\x31\x42\xd7\xb0\x4e\x23\xfa\x9f\x17\xfa\x46"
- "\xf8\xa9\xbf\x3a\xa0\x6f\xb1\x26\x3d\x9d\x0d\x20\x64\x87\xeb\x1c"
- "\xb6\x2b\xa6\x34\xd4\xb7\x24\xd4\x37\xc4\xc7\x5c\x64\x37\x51\x36"
- "\xff\x44\x6d\xdd\x72\x0b\xfb\xd3\xda\xfe\x09\x65\xa8\x4f\x69\x68"
- "\xcb\x3e\x43\x3b\xfa\xa7\x67\xdc\x50\x8f\xfa\xa4\x47\x3d\x32\xa2"
- "\x3e\x25\xa1\x5e\x91\x3e\x35\xf5\x3f\x4f\x38\xd7\x37\x0d\xe0\xe0"
- "\x6d\x65\xa8\x3e\xdd\x6c\xdc\xd4\x63\xfb\x81\xc6\x09\x5f\xf1\xf1"
- "\x57\x7c\xd6\x39\xe1\x46\xaa\xf4\x1c\xef\x84\x3f\x68\xb8\x2f\x83"
- "\x7a\x68\xd9\x0d\x63\x2e\xc1\x0f\xce\xa1\xcc\x03\x3e\x47\xe1\xf3"
- "\xf9\x15\x77\xbd\x8f\xbe\xc4\x1f\xba\x31\x6f\x0f\xe9\x22\xb3\xcd"
- "\x25\x5f\x2e\x05\x65\x51\xcb\x3c\x74\x46\x6d\x51\x21\x9d\x51\x4b"
- "\x67\xd2\xe2\xfb\x68\xe4\x41\x02\xde\x63\x8f\x5f\x87\x38\xbc\xe8"
- "\x5c\xca\x32\xf2\x9f\xf0\x39\x91\x6d\xd7\x8f\x3c\xbc\x0d\x66\x46"
- "\xbb\xc5\x59\xb4\x74\x76\x2e\xfa\xd1\x71\xf4\xcc\x6c\x9f\x19\xeb"
- "\xae\x4b\xe7\xd1\xc6\x60\x7e\x74\x1e\x6d\x91\x11\xea\x0a\xf9\x19"
- "\x59\xfa\x3a\x1b\x6b\xec\xf7\x70\xbd\x34\xca\xb4\x10\x6d\x48\xe7"
- "\x24\xa4\xb3\x6b\xf5\x8e\x14\xf8\xd0\x1a\x7e\xdf\x45\x8f\x2d\x69"
- "\xa0\xfc\x43\xc4\x27\xc8\x3c\x19\x22\x3e\x55\xe6\xd3\x50\x73\x3b"
- "\xa9\x9d\xee\xdf\xc6\x7a\x68\x0f\x6f\x1a\x37\x28\xf5\xb1\xff\xa4"
- "\xb3\x68\x77\xf7\x83\x76\x85\xd5\xcb\x1c\x3d\xcc\xee\xb0\x5e\x86"
- "\x3a\xda\x57\xbc\x84\xf9\xfd\x31\x45\x19\xac\xa2\x28\xbd\x77\x1b"
- "\xf3\xd1\xb8\x0f\xe6\x71\xd2\x09\x6b\xea\x45\x5d\xe4\x9c\xe4\xfd"
- "\x4d\x5d\x51\x3a\xe2\x8a\x21\x5c\x6d\x98\xbe\xbf\xa2\x08\xe5\x35"
- "\xe9\x9c\x53\xa5\xe5\x7b\xee\xa2\x2e\x9f\xb4\xec\x84\x89\x97\xe0"
- "\x01\x2d\xef\x27\x94\x17\x99\xc9\x26\x60\x98\x0e\xc3\xe2\x10\x7f"
- "\x81\xc7\xf6\x00\xfa\xdc\xbd\x55\xc2\x97\x7d\x20\x4e\x86\x73\x42"
- "\x52\xb7\x72\xde\x9a\xb4\x4a\xb2\x2c\x64\x1f\x38\x15\x84\xee\x6a"
- "\x47\x3b\xc8\xa5\x84\x8f\x0e\xd8\xf4\x75\x46\x3a\x8f\xab\x74\x17"
- "\xc4\x63\xfd\x10\x7d\x2f\x61\x9f\xe3\x22\xb3\x3d\x60\x78\x6b\xa7"
- "\x17\xfb\x14\x0f\x54\x39\xe1\x93\x21\xf9\xe9\xbf\xce\xba\x90\x07"
- "\xad\x47\xb6\x01\x10\x7f\x88\x9f\xa8\x37\x7e\xe4\xc3\xe7\x64\x93"
- "\xea\xb6\x51\xbf\xfb\x81\x0e\x99\x5f\x43\xd7\x49\x91\x49\xf4\x4d"
- "\xe7\x25\x31\x1b\x03\xfb\x64\xfa\x8e\x31\xef\x01\xc1\x83\x75\x4d"
- "\xbd\x68\x47\x68\x4c\x99\xce\xce\x2a\xd2\x33\xaf\xc7\x36\x6f\xa6"
- "\x13\x1e\x6e\x95\xc6\xab\xdc\x0e\xdf\x22\xb2\x2d\x61\xdb\x2d\xbe"
- "\x67\xe9\x00\xfe\x1f\x66\xb6\xc7\xa3\x1d\xe2\xb6\xa9\x31\x75\xb7"
- "\xa8\x7f\x2f\xe1\xa5\xb5\x1e\x5d\x18\x5f\xe4\x66\xdd\xac\xbc\x31"
- "\x89\xfa\x11\xb4\xff\x27\x86\x3d\x89\x72\xcd\xec\x85\x44\xd3\x0f"
- "\x9f\xb4\x4f\xbe\x01\x17\xad\x10\x51\x37\x30\x4e\xf4\xc3\x54\x1a"
- "\x17\x12\xe3\x61\xf3\x5a\x9c\xb0\xc8\x24\xd3\x45\x3e\x06\xf2\x96"
- "\xf8\x7c\x92\x7c\x0d\xfa\x4e\x51\x54\xc2\xbc\xe4\x73\x20\xac\x4b"
- "\x2e\x03\x95\x4f\x94\xeb\x87\x9a\xe0\x72\xd1\xb7\xfb\xe8\x12\xc1"
- "\x83\xa2\x1d\xa0\xe5\x67\xf9\xf4\xd3\x77\x8e\x45\xbc\x2c\x54\x66"
- "\x5e\x16\x6e\x63\xb1\x8d\xf0\xdd\x8f\x32\xc4\xc3\x5b\x11\x17\xf6"
- "\x7f\x16\x9e\x13\xf2\x34\xaf\x65\xa8\x35\x2c\x28\x9b\x56\xec\xab"
- "\x4e\x2e\xf5\xb3\x4e\xc4\xf9\x47\x31\xc6\xf6\xc3\x3f\xfa\xc9\xcf"
- "\xf6\x92\xec\xee\x30\x51\x9b\xec\x28\x21\x7b\xcb\x61\x6f\x47\xd8"
- "\x2e\x84\x69\x93\x60\xdb\xf8\x59\x89\xe2\x3e\x9c\xee\xd8\x8e\x6d"
- "\x45\x3a\xba\x5c\xbc\xbd\x6f\x04\xf9\x1d\xfb\xf8\xd8\x4f\xfc\x61"
- "\x0d\xab\xd8\x61\x0a\x4f\x8b\xc9\x4a\xed\x59\xff\x75\xd6\x83\xf9"
- "\x8c\x23\x39\x2a\xdd\x01\xe3\x51\x26\x3f\xdf\xbd\x0b\xc6\x90\x8c"
- "\xb1\x98\x22\x8b\xe0\x7b\x72\x22\xb3\xa1\xef\x89\x16\xd5\xb2\x0d"
- "\x26\xa2\x0e\x99\x2f\x41\xf2\xa2\xb5\x25\x06\xa4\x15\xe0\xc8\x15"
- "\x20\x1f\xe5\x33\x84\x2f\x70\xf8\xfe\x4c\xe7\x8e\xa3\x2c\x26\x9b"
- "\x64\x59\xc4\x67\xcb\xcd\x6c\x05\xf2\xd5\x2b\xc6\x28\x92\xff\x48"
- "\xdf\x24\x3a\x21\xb9\x95\xca\x2b\xe6\x40\x27\xff\x82\x5d\x67\xf1"
- "\x4c\xb4\x69\xdd\x4e\x48\x76\xe3\xdd\xcb\x2f\xb4\x25\xd2\x7b\x37"
- "\xc2\x9d\x64\xd7\xfb\x09\x06\xfb\xb8\xc9\x76\x66\x53\x91\x9e\xd4"
- "\x60\xde\x3d\x4e\x78\x46\xec\xc7\x0d\xc9\x4d\x84\x6b\x08\x1a\xba"
- "\x19\xdf\xff\xf6\x4b\x2c\xef\xfc\xd5\x86\xdd\x34\xc6\x39\xff\x2e"
- "\xae\x17\x88\xab\x4e\x2d\x6c\xb6\x1f\x69\xad\xb5\xf9\xcd\x68\x9f"
- "\xcd\xfe\xca\x92\x24\xfe\x2c\xc5\x31\xa9\x1d\x0d\x8f\xbf\x31\x95"
- "\x9f\xc7\x08\xf3\x1b\x05\x9e\xc6\x24\xfb\x84\x4b\xf4\xfe\x53\x7a"
- "\x77\xeb\x76\x25\x39\xaa\x53\xc4\x19\x91\x08\x23\xfa\xf1\xf3\x7f"
- "\xda\x8b\x79\x78\x6c\xf3\x1b\x9d\xb0\xb8\x5e\x7c\x9f\xd9\x15\x76"
- "\xdf\x6e\xbe\x3e\x0a\x75\x80\x74\x4e\xe8\xf4\x82\xfd\x6d\xf5\x5c"
- "\xff\x3a\x50\xe6\xbd\x92\xfd\xa5\xf1\x9c\xa8\x4e\x58\xb0\xaf\x4d"
- "\xcf\xe5\x5b\xcd\xd4\x0f\xea\x42\xce\x78\xc3\xb8\xc1\xd7\x83\xa9"
- "\x78\x65\xe0\x95\x2d\xbd\x17\xe0\x85\x65\x7e\xf0\x1c\xbe\x17\x73"
- "\xde\xbd\x61\x52\x39\x31\xae\x17\x7d\x76\x7a\x77\xc2\x83\x4b\xd9"
- "\x1b\x09\x6a\xf9\xb9\xee\x18\x8d\x13\x3c\x68\x75\xc2\x7c\x10\x75"
- "\xb1\x80\xcf\xdd\x41\xda\x88\xef\xac\xb4\x9a\x79\x5b\x76\xbb\x91"
- "\xee\x07\x4f\xb6\x54\xbb\xc1\x70\x07\x95\xff\xc1\x53\x54\x26\x9a"
- "\xc3\x42\xf7\xa2\x6a\xe6\x6a\xae\xf1\x01\x7d\xcb\x43\x5c\xa8\xff"
- "\x75\x09\x62\xcc\xa1\xd1\x42\xf8\x24\x99\x60\x72\xf9\x05\x9f\x77"
- "\x25\x19\xb6\xa9\xe8\x3d\xa6\xf6\x28\x1f\x87\x39\xcf\x4a\x33\xa5"
- "\xb9\x0b\x0b\x46\xa0\x9e\x2f\xa0\xb3\x1e\xaf\xc0\x82\x65\x0c\x79"
- "\xdd\x6c\xe6\x67\x49\xb9\xb0\xfd\xe9\xa9\xe5\xf3\x8d\x16\xa0\xfd"
- "\x9b\x9f\xcd\xbf\xcd\x60\x38\xb7\x35\x88\xf3\x30\xc6\x61\x7b\xd4"
- "\xd3\x66\xf6\x42\x3f\x95\x19\xd3\xbe\x77\xdd\xab\xa1\xb3\x2e\x77"
- "\x5b\x18\xa7\x83\x61\x5d\x09\x5b\xf6\xa0\x73\xd7\x65\xe6\x95\xcb"
- "\xdc\x5c\x4f\xfa\xb1\x60\x9f\x13\xde\x39\x3f\xa4\x4e\x0c\x94\x23"
- "\xe5\x44\x73\x82\xa8\x47\x3f\xf2\x2a\xb4\x1e\x53\xea\x45\x1d\x2e"
- "\x38\x1f\x5a\x87\x29\x98\x43\x0a\x4a\x42\xca\x5c\xbc\x52\xa5\xf7"
- "\xe0\x4b\x1b\xf4\x8c\xf5\x9a\x72\xd0\x63\x4b\x89\x43\xfd\x28\x11"
- "\x75\x43\xe1\x28\xcf\x24\x37\x7f\xc5\xb6\xa7\x8f\xce\x26\xbd\x0c"
- "\x14\x4e\x32\x4e\xe1\x7e\xf4\x6f\xf0\xdd\x88\xf1\x3a\xd2\x5f\x3a"
- "\x97\x2b\x38\x7e\xe0\xfc\x05\x48\xd9\x41\xb8\xa2\xf7\x1c\x38\x40"
- "\xb2\x8b\x30\x33\xa3\x7d\x07\xd0\xf7\x4e\xd9\x27\xf3\x15\xc3\x0a"
- "\x28\x9e\xe4\x14\xc3\x6b\x9c\xf0\xf7\x7c\xef\x72\x37\xf6\x01\xc3"
- "\xfb\x1e\x29\xf6\x01\x1f\x4d\x97\x9b\x49\x75\xd9\x03\x0f\x9d\x45"
- "\x3b\x86\xf6\xbb\x24\x51\xb4\x3f\x0f\xb5\xd1\x3b\xda\xcf\xcf\xf1"
- "\xb9\xb5\x0d\xed\xd4\x8d\x4a\x4b\x7a\x9f\x1a\x86\xdf\x50\x43\x8a"
- "\xaf\xf2\x42\x94\x2f\xd6\x9c\xe5\xe8\x3e\x0d\xed\xbe\x7f\x06\xc3"
- "\xb3\x1c\xc7\xaf\xe8\x7c\xb8\xd2\x1d\xac\xff\xdd\x1b\x27\x35\x0e"
- "\xdf\x55\x3b\x3f\x07\x16\x1e\xe2\xfc\x78\xb9\x13\xbd\x80\x67\x38"
- "\x6e\x89\x3f\x7f\xe8\x3e\xbc\x9e\xf9\x0e\x5f\xa4\x3d\xe3\xf5\x23"
- "\x0f\xdd\x80\x99\xaf\xef\x84\xc4\x9a\x1b\x90\x50\x7b\x03\x8c\xec"
- "\x2f\x46\x75\x0d\xfa\x71\xcf\x5c\xd3\x01\xda\x89\xcc\xd1\x16\xd0"
- "\xd6\xee\x44\x7f\xce\x07\xaa\xfe\x0a\xf4\xe7\x7c\xe8\xcf\x5d\x35"
- "\x92\xbd\x1c\xf0\xe7\xfa\xb8\xaf\x5c\x74\x81\x9f\x21\x5a\x51\x74"
- "\x61\x94\x19\x54\x51\xd9\xa0\x43\xfa\x4a\xaf\xc0\x43\xaa\xa8\x2e"
- "\xf4\x25\xb1\xcc\x4e\xa9\xbc\x78\x8f\x8b\x36\xc3\x70\x5e\x56\xb4"
- "\xe1\xac\xa2\x24\x71\xc8\xb6\x59\x4d\x32\xe5\x26\x5d\xc2\x32\x3c"
- "\x3c\x9e\xbe\x39\x9f\x9e\xe0\xd5\x14\xd5\x30\x2f\x85\x17\x4f\x65"
- "\x5e\x0c\xe7\x7b\xfd\x37\x62\xb8\xc7\xf6\xb0\xd1\xa9\xc9\x1a\x72"
- "\x3d\x24\xf6\x99\x24\x5b\xf3\xf0\x3b\x4c\x5d\x86\x32\x9a\x5b\xbd"
- "\xcb\x87\xfe\xf8\x15\xd2\xe3\x87\x4f\xae\x28\x60\x3e\xc3\x66\xfa"
- "\xfe\xff\x70\x35\xcd\x4d\xa0\x6f\x92\xff\x84\xbe\xce\xad\xe6\x23"
- "\x50\x1b\x42\xfd\x87\xe8\x02\xc4\x59\x99\x5b\xcd\xb0\xcf\xfe\x75"
- "\xfd\x7a\x9a\x7f\x26\xd6\x9a\x3e\xdc\xe5\x84\xcd\x7c\xde\x07\x5f"
- "\x9f\xc3\xed\xe9\xc2\x16\x37\xf2\x20\xd4\x06\x2c\xac\xa6\xfd\xcb"
- "\x7b\xcb\x2d\x17\xec\x93\xc9\xf6\x2f\xac\x10\xbe\x90\xa5\x43\xb4"
- "\x05\x0b\x9f\x13\xdf\x0f\x16\xce\x75\xc2\x4a\xde\xc6\x5b\xa6\x91"
- "\x4c\x2c\x2c\x60\xb1\x96\x3f\x10\xdc\xec\x32\x28\xdb\xe2\x83\x6c"
- "\x56\x61\xe9\x60\x5c\x57\xae\x00\x7b\x6d\xa3\x87\xd6\xdc\xb8\xc7"
- "\xad\xf1\xa0\x6f\xd0\x82\x71\x17\x28\x0f\x17\xc2\x20\xdf\x47\x88"
- "\xb9\x0b\x0b\x0f\x38\xe1\x31\xc9\x1e\x2e\xcc\x12\x63\xcc\x0b\xb3"
- "\x7a\x31\x2d\xfa\x8a\xb7\x63\x3c\xfa\xbf\x1b\xa3\xa4\x6f\xdc\xae"
- "\xbd\x7c\xad\xe8\xc2\x33\x4e\x28\xe0\x7b\xef\x17\x4f\x05\x7d\xb1"
- "\x81\x85\xd5\x11\xb1\xd7\x7d\x70\x39\x17\x3d\xc4\xe7\xe1\xa9\x61"
- "\x9c\xc7\x96\x0a\x32\x5e\x6c\x6f\xff\xbe\x57\xbd\x7a\x35\x86\xc5"
- "\xc9\x78\x11\x66\x0c\xbe\x27\x0c\xc0\x88\x34\x73\x83\xd2\xac\xee"
- "\x55\xdf\xfd\xf7\x18\x96\xa6\x48\x93\xa9\x48\x63\x0e\x4a\x53\x26"
- "\xe5\x53\xa2\x48\x73\x50\x91\xa6\x26\x0c\x6d\x8d\x8a\x34\x76\x45"
- "\x9a\x73\x61\x68\xeb\x52\xa4\x71\x87\xa6\x59\xa4\x09\xe2\x2d\xcd"
- "\x27\x4a\xc4\x30\x7d\x68\x9a\x45\x46\x45\x9a\x24\xf9\x1d\x7d\xcf"
- "\x4c\xe1\x1b\xa0\x3c\x61\x9d\x62\xbd\x5e\xc0\x78\x2c\xff\xea\x82"
- "\x9b\xf8\xdf\xd8\x37\xb4\x9c\x2f\x3d\x2e\xce\xd3\x25\xbb\x4a\xf3"
- "\x0f\xc8\x9e\xd3\x37\x13\x92\x09\xf2\x3b\x29\xaf\x8b\xb0\x78\x3f"
- "\xc9\x10\xe2\x3c\x35\x98\x1f\x8b\xec\x0a\x3a\xcf\x29\xe8\x74\x0e"
- "\xe6\xc7\x22\x77\x68\x9a\xc5\x9a\xd0\x34\x8b\xe3\x82\xd2\xd4\x8b"
- "\x7c\x16\x1b\x15\x69\x92\x14\x69\xd2\x06\xcb\xe7\xe2\x2c\x45\x9a"
- "\x02\x45\x9a\x92\x00\x0f\x17\xf3\xb5\xe1\xa4\x0f\x18\x8e\xfd\x9f"
- "\x55\x67\x6e\xc2\x3b\x9d\x2c\xcf\xf2\xda\x69\x21\xd7\x8f\xd0\xf9"
- "\x78\xb4\xd6\x8c\x9f\x5d\xd0\x05\x8f\xcc\x92\xbf\x2d\xbf\x75\xc3"
- "\x1b\x49\xdf\x3c\x91\xb7\xdd\xcd\x56\x2f\xb6\xb9\x8b\xb1\x0d\x5e"
- "\x96\x28\xcf\x2d\xa1\xf9\x38\xfc\xec\x1b\xde\x1f\x59\xdc\x21\xf4"
- "\xef\x11\xf9\x9b\x0e\x95\x07\xfb\x19\x8f\xcc\xfc\x3f\xa4\xab\x8d"
- "\xe8\xa2\x33\x20\x10\x87\x65\xa0\xaf\x31\x40\x2b\xe5\xf9\xc8\xef"
- "\x64\x5a\xeb\xc4\x9c\x20\x9a\x2b\xec\xa2\x73\x39\x30\x4d\x43\x50"
- "\xff\x84\x68\x75\x9f\xde\xe9\xd5\x84\xd2\xfc\xc8\x3e\x89\xe6\x0e"
- "\x61\xa3\x1e\xe9\x90\xed\xc9\x90\xf2\x57\xde\x68\x6c\xaf\x01\xa0"
- "\x39\x0f\x6d\x35\xe8\x6f\x62\x1f\x8b\xe8\xee\x84\x34\x03\xf7\x7f"
- "\x37\xdf\x00\x7a\x76\x94\xcc\xe3\x73\x22\x44\x59\xd2\x32\xe9\xfc"
- "\x65\xf2\x7d\x5a\x2c\x5f\xd2\xbc\x3c\xc6\xcf\x62\x82\xb4\xfd\xcd"
- "\x25\x2e\xa4\x35\x2d\x5d\x9e\x3f\xe4\x84\x34\xe1\xd7\x95\x37\x1a"
- "\x68\xbe\x06\xcd\x6d\x6a\x76\x27\x11\x4c\x31\xd2\x29\xcf\x9d\xee"
- "\xa1\xb3\x9c\x11\x76\xe6\x50\x7d\xa5\x60\xbe\x0a\x1a\x1e\xfd\xab"
- "\x90\x9f\xb4\x33\xa1\xfa\x10\x89\x72\x9a\x76\x2e\x54\xe6\xd2\x9c"
- "\xa1\x32\x97\xe6\x0a\xd5\x07\x35\xea\xc3\x12\x4d\x68\x9a\x25\x71"
- "\xa1\x69\x96\x24\x04\xa5\x29\x17\xf9\x2c\x49\x52\xa4\x49\x53\xa4"
- "\x09\xb6\x7f\x58\xe6\x25\xe6\x81\x7e\x27\xb7\xf7\x4b\xac\x41\xef"
- "\xea\x2a\xde\x4e\x2d\x39\x28\x87\x49\xeb\x92\xf9\x5c\x29\x09\xdf"
- "\x49\x85\x8d\x22\xf8\x33\x0a\x1a\xce\x2a\x68\xb8\x20\xbf\x4b\xf3"
- "\x2b\x3e\x40\xde\x4d\x95\xe4\xcc\x1d\xbd\x07\x1e\x8b\xf6\xad\x7c"
- "\x92\x7c\x33\x6a\x9f\xf8\x1c\xb6\x5d\xe8\x53\x5e\x03\x1d\xcd\x1d"
- "\xbc\x58\x0c\x11\x74\x3e\x8c\x13\x7e\x94\x81\xfd\xb9\x0e\x9a\xe3"
- "\x8e\xfe\xd4\x8a\x8b\xb0\xa4\x07\xf3\xaf\xc6\x3c\x90\x77\x8f\xa6"
- "\x84\xd2\xf0\x68\x7a\x28\x0d\x8f\x66\x07\xbd\xeb\xf0\xdd\x12\x54"
- "\x6e\x1d\xed\x13\xf1\x0a\xf7\xad\x1f\x3d\x20\x87\xd3\x18\x00\x96"
- "\xb1\xbb\x94\xfb\x01\x29\x34\x6f\x30\xb6\x13\x1e\xdd\x4a\xe3\x05"
- "\x12\xce\xd3\xc1\xbc\x15\xbc\x78\xb4\x55\x41\x47\x87\x82\x8e\xee"
- "\x80\xad\x59\xd2\x23\x74\xe4\x51\x7c\x7e\xdc\x48\x61\xc8\x0b\x43"
- "\xb4\xcf\x70\xbb\x7d\x1a\xf9\xa9\x3f\x5a\xe2\xc6\xf2\xb2\x17\xd4"
- "\xb1\xd2\xfb\x32\x36\x8d\xfc\xee\xa2\x0e\xb4\xcf\xb4\x76\x76\x0a"
- "\x86\x65\x88\x7a\xfd\x11\x96\x7f\x55\x8a\xc0\xfb\x23\xfe\x6d\x9f"
- "\x60\xf1\xd9\xc0\x62\x1a\x87\xec\x9f\xf5\xc6\x36\x26\xca\x73\x6c"
- "\x11\xc7\x3e\x59\x1f\xfc\x95\x8d\x89\xfe\x8a\x9d\xe7\x30\xac\x1a"
- "\x75\xa2\x5c\xf4\x69\x76\xc6\xa3\xec\x57\x63\xfd\x61\x1f\x78\xa9"
- "\xd4\x97\x69\xa4\x33\xe6\x68\xce\x1a\x9d\x41\x15\x25\xe6\x66\xfc"
- "\xe8\x6c\x90\x5e\xb9\x0d\x3b\x17\xb0\x4e\x58\x5a\x41\xbe\x1d\xd9"
- "\x0d\x9a\x83\xd8\xec\x73\x01\x8d\xb3\x38\x7c\x97\xb8\x4f\x8e\xf1"
- "\xe5\x22\xed\x52\x6d\x50\x5a\x97\x34\x0e\xd2\x4d\x71\x73\x7c\xa0"
- "\x69\x76\xbb\xe8\xac\xdd\x38\xe1\xc7\x2f\xad\x68\x46\x7b\x81\x69"
- "\x92\xe5\x34\x34\x66\xc2\xbf\xfb\x17\x03\x9d\xcb\xac\xb1\xef\xec"
- "\xe4\xb8\xa5\x6f\xce\xbc\x7f\xe4\x28\xe9\x06\x87\xbb\x83\x7c\x4a"
- "\x8d\x98\xb7\xb5\xb4\x3c\xc2\x0b\xda\xde\x8a\x46\x83\x13\x9f\xfb"
- "\x2b\x1a\x8d\x48\x1b\xf2\xf3\x47\x74\x36\x62\x88\x2f\xb3\x68\x51"
- "\xfa\xca\x15\xcb\x66\x3d\xb1\x72\x49\xc6\xa2\x79\x86\x8c\xfc\x4d"
- "\x79\xa6\x59\x5b\xb6\x16\x1b\xb6\x17\xe6\x17\xe7\x6f\xde\xc0\x8f"
- "\x07\x33\xe4\x14\x8b\xbb\xb1\x20\xa7\xa8\x78\x3e\x3d\xce\x34\x58"
- "\x0a\xf3\xb6\xf1\xc7\xbb\x46\x42\x28\x92\xfc\xe2\xbc\x42\xc3\x0c"
- "\xd3\x4c\xc3\xe2\x9c\xfc\x02\x5a\xc5\x10\x0e\xd7\x3c\x43\x61\x5e"
- "\x61\x5e\x8e\xc9\x30\xdf\x90\x48\x98\x83\xd1\x05\xd5\x67\xa2\x6c"
- "\x9f\x8a\xb0\x3d\x47\x1f\xba\x9b\xec\x14\xb5\xeb\x17\x61\xc5\x56"
- "\xf2\xe1\xf8\x79\x5e\x28\x87\xd8\x26\x38\x3d\xb6\x65\xc5\x83\xdb"
- "\xf1\x65\x07\x42\xe5\x77\x59\x75\xa8\xfc\x2e\x3b\x39\xb8\x1d\x5f"
- "\xa6\xd0\xff\x65\x0a\xfd\x5f\x76\x61\x70\x3b\xbe\xcc\x15\x9a\x66"
- "\x39\x84\xa6\x59\xae\x1b\xb0\x33\x48\xeb\x5e\x6e\x97\x96\x27\x28"
- "\xd2\xcc\x55\xa4\x49\x55\xbc\x67\x04\xbd\xa3\xef\xba\xdc\x14\xec"
- "\x1b\xe0\x7b\xb1\xac\xeb\x01\xfb\xb6\xfc\x80\x0c\x43\x6d\x0f\xad"
- "\x75\x91\x60\xeb\x83\x60\xbb\x25\xd8\x01\xfd\x27\x9b\x44\x73\x37"
- "\x85\x7f\xbe\x62\x86\x64\xdb\xba\x8e\x04\xda\xd0\x2e\xac\x8b\x29"
- "\x57\x60\x79\x45\x9d\x80\x75\xd1\x7c\x5e\xf6\xda\x1a\x4f\x5d\x2c"
- "\x68\x29\x2d\x9d\x67\xc5\x6c\x4b\x6b\x68\xfe\x38\x86\x45\xe1\x85"
- "\x76\x6a\x85\x5e\x9e\x3b\xbf\x0f\x61\x9c\xb0\x82\xcb\x32\xa5\xdb"
- "\xc7\xe7\x1d\xf2\xfc\x2a\x68\x8d\x15\x9d\x11\x77\x44\xec\x21\xd1"
- "\x45\xe7\xac\x51\xde\x88\x43\xc3\xd4\x4b\x3f\x97\xce\xcb\xd2\xe1"
- "\x15\x87\x38\x0b\x64\x9c\x88\x4f\x0f\xe2\x5c\x3e\x9a\x47\x26\xf9"
- "\x3d\x2b\x0e\xca\xfe\x05\xf5\x15\xc2\xd9\x8e\xf0\x73\xb3\x21\xfa"
- "\x88\xcd\x8f\x7d\x94\x2e\xa2\xe9\x0c\xf9\xa1\x0e\xbd\x0f\xda\x6b"
- "\x7c\xd8\x7f\x05\x1d\xef\x4f\x59\x2f\x83\xa3\xde\x07\x34\x3e\xbc"
- "\xd6\x0a\x65\x75\x6a\x7f\x07\x1b\x48\x47\x7d\xb4\x15\x6e\xa2\x67"
- "\x1f\x85\x63\x7a\xec\x4b\xb8\x68\x0e\xf7\x10\xe3\x11\xd1\x04\x67"
- "\x9f\x46\xfd\xbd\xf4\x99\x92\xef\x7b\xa0\x0e\x71\x85\x9d\x5f\xac"
- "\x06\x87\xc7\x96\x8e\xed\xdf\xf6\x73\xb2\xcd\x6e\xae\xe6\xb6\x4f"
- "\x8d\xe1\x65\xc8\x8b\xc6\xa1\xfc\x14\xc9\xbe\x5b\x68\x5e\x19\xc2"
- "\x9e\xba\x19\x2c\xd1\xdd\x8c\xe5\x46\x5d\x74\xbe\xb5\x3b\x31\x52"
- "\xb2\xaf\x5a\x4c\xd7\x25\xa7\xfb\x3a\xe5\x23\xdf\x88\xda\x63\xd4"
- "\x55\xb7\xe8\x2b\xae\x7c\xf2\x15\x3e\x67\xf9\x31\xf4\xff\xd2\x65"
- "\x3d\xb8\x0d\xdf\xd1\xfe\xa5\xf3\xf1\x44\x3e\xaf\x07\xfb\x93\x45"
- "\x16\xf4\xd9\xf4\x6e\xb4\x8d\x8f\x65\xca\x71\x7c\x9c\x88\xe2\x4a"
- "\x98\xb7\x59\xdf\x45\x71\xc5\x03\x71\x62\x0d\x01\x6b\xb6\xfa\x28"
- "\xfc\xa0\x1c\x2e\xda\x96\xc7\x6a\x14\xef\xa7\xe4\x77\x7c\x6e\xc2"
- "\x67\x83\x84\xdf\x85\x36\x57\x25\xf6\x5c\x58\x39\xbe\x96\xeb\xcd"
- "\x63\x1d\x72\x3c\x1f\x53\x3b\x41\xdf\xc6\xdc\xe0\x8f\xb5\x38\xb9"
- "\xcf\x85\x69\xde\xfd\xd2\x1b\x89\x7d\x0c\x15\xa3\xb3\x55\x31\x8c"
- "\xf0\x90\xce\xf0\x33\xee\xf1\xbd\x13\x1e\x3b\x4b\xeb\x1c\x48\x46"
- "\xb6\xfb\x20\xde\xf2\x20\x8d\x3f\xaf\xe4\x72\x4b\x61\x84\x97\xf0"
- "\x51\x9b\x48\xb8\x09\xdf\x61\xf2\x69\xf9\x7c\xc9\x95\x54\xfe\x83"
- "\x43\xd5\x15\xc6\x5b\x83\x78\x19\x89\xef\x07\x42\xcb\xba\xb2\x5a"
- "\xf1\x7e\x52\x7e\xa7\xb1\x5e\x21\x7b\x2b\x6b\xa4\xb8\x96\x9b\xe5"
- "\x35\x8d\xaf\x91\x59\xd9\xad\xc8\xcf\x1b\x8a\x7f\x95\x56\xf1\xae"
- "\x97\xdf\xab\xf8\x37\x86\x55\x46\x39\x8f\x23\x62\x0e\x97\xb3\x61"
- "\xb7\x2b\xf2\x66\x7b\x99\x60\x9a\xac\xa0\x3c\x87\xe1\x7b\x41\xa0"
- "\xfe\x56\x59\x65\x7c\xf8\xbc\x2f\x08\x0e\xfd\x92\x55\x55\x32\x9c"
- "\xf8\xbe\xb1\xaa\x21\x28\x5d\xe3\x2d\xca\xaa\x90\xdd\x8c\x7e\x21"
- "\xbb\xab\xba\x15\xb4\x78\x03\x38\x33\x34\x01\x5a\x32\x74\x41\x70"
- "\xa8\x9f\x19\x06\xa5\xac\x16\x59\x49\xc6\x49\x5e\x33\x92\xc3\xc4"
- "\x79\xa5\xb8\xcc\xf0\x32\x9e\x61\x09\x0a\x97\xfa\x47\x19\x9f\x4a"
- "\x7e\x02\xd9\x67\x77\x6f\x69\x86\x7c\xce\x2a\x97\x49\xda\x47\x6c"
- "\x8e\x38\xd3\x1b\xe5\x3a\xa3\x51\x89\x57\xac\xbf\x91\x70\x04\x70"
- "\x96\x09\x1f\x2f\xc3\x19\x54\xb6\x1e\x27\xac\x94\xbf\x13\xb9\xc4"
- "\xd8\xe0\xaa\x0b\x43\xf5\x3b\x3c\xb6\xd5\xf1\xa1\x3c\x5b\x3d\x33"
- "\xc0\xb3\xd5\x49\x01\xbc\xab\x53\x83\xe0\x7e\x8d\xef\x19\x41\x70"
- "\xd9\xb7\x92\x4d\x21\x2b\xab\x0f\x28\xf2\xaa\x0e\xc2\xd1\x10\x94"
- "\x57\x63\x10\x5c\x07\xbe\xdb\x87\xae\x9f\xd5\x17\x86\xae\x9f\xd5"
- "\xde\xf0\xf5\xf3\xb8\x2e\x90\xef\xe3\xf1\xb7\xd6\xab\xc7\x53\x82"
- "\xe8\xa9\xc3\xf7\xf4\x50\x3d\x7a\x3c\x5b\xf1\x3e\x50\xff\x0c\x6d"
- "\x47\xc3\xce\x94\x48\x0a\x2f\x9e\x0a\x3a\xa1\x67\x8f\x97\x07\xc7"
- "\xbf\x7b\x43\xc4\x13\x8d\xfc\x1b\x1c\x7d\xdf\x14\x70\x4d\x4a\x38"
- "\x82\x09\x8a\xef\x90\x69\xc7\xf6\x3a\xec\x99\xa0\x72\xfb\xe7\xf0"
- "\x53\xfb\xf7\xb8\x5b\x7c\xb7\x29\x8c\x63\xb6\xf7\x33\x87\x6a\xcb"
- "\x3c\xb6\x27\x12\xb1\xcf\xd0\x2d\xf8\xf3\x04\xca\xff\x66\xee\x9b"
- "\xb0\xf2\xc2\x38\x94\xa7\x1b\x17\xe1\x89\x4f\xf1\xde\x87\xf7\x5f"
- "\x84\xb6\xaf\x4f\x64\x30\x9b\x6a\x55\x9d\x4d\xd9\xee\x3e\x51\x80"
- "\x7d\x8f\x1b\xd1\xbe\xb2\xcc\x30\x71\x07\x98\x2d\x62\x65\x98\xf0"
- "\x7a\xac\xaf\x1b\x4e\x78\xe2\x3c\xd1\x1b\x14\xde\xc4\x6c\xa3\x33"
- "\x08\xde\x49\xf9\x61\x9a\xa1\xea\x4d\x5e\x07\x25\x64\x2f\x53\xa3"
- "\x28\xc7\x57\x17\x21\x73\x8f\x28\x47\xe6\x1f\x43\xf3\xce\x8c\x0f"
- "\x5f\x8e\xcc\xb9\x58\x8e\xaf\xc2\x97\x23\x33\x9d\xf3\x56\x8d\x65"
- "\x19\xe4\x77\x64\x16\x60\x59\xbe\xe2\x7c\x0f\x0d\xdf\x27\xf7\x53"
- "\x4b\xbf\xc2\xfe\xbf\x1a\x78\xda\x55\x25\x81\x7a\x93\xe0\x4e\x45"
- "\x57\x43\x7a\x98\x3c\x5b\x98\x6d\xf8\x2a\x27\x64\xfa\xe4\xf6\x4a"
- "\x0a\xbf\x20\x68\x41\x3e\xa9\x89\x4f\x58\x1e\x4c\x37\x54\x7d\xcb"
- "\xfa\x29\xbe\x33\x3d\x89\xfa\xff\x84\x53\x6e\xd3\xb1\x3d\x77\xc9"
- "\x7c\xc4\xb8\x34\x45\x9c\x37\x28\xce\x14\x12\xb7\x6b\x20\xbc\x44"
- "\x0e\xff\x7a\xf5\xf4\xe4\x29\x45\x3d\x61\xfd\x3c\x35\x3f\xb4\xdc"
- "\x4f\x9e\x11\xe5\xc3\x3a\x1a\xc4\xeb\x27\x3b\xb0\x8e\xfa\xc2\xd7"
- "\xd1\x93\xee\xf0\xb2\xf6\x54\x14\xc7\x17\x0b\x61\xf0\x3d\x65\xc4"
- "\xba\xeb\xe3\x32\x28\xd5\xd3\xe0\xfa\x79\x6a\xa9\x5c\x3f\x5f\xaf"
- "\x8c\x4f\x95\x2b\xca\xd8\x7f\x11\xd6\x8c\x12\x65\x5d\xf3\xb4\x02"
- "\xf7\xc9\xf0\xb2\xf8\x94\x1d\xcb\xd9\x1f\xbe\x9c\x4f\x5d\x18\x5a"
- "\x16\x9f\xa2\x6f\x75\xfd\x83\x65\x71\x8d\x4e\xa4\x81\x30\x69\xd6"
- "\xcc\x64\xb6\x70\xf9\xac\x49\x25\xbf\xc8\x09\x6b\x4a\xe8\x3b\x5d"
- "\x50\x78\x56\xa8\xfc\x61\x19\x28\x1d\xf1\xcf\x27\xfa\x31\x54\x0f"
- "\x17\x0d\xa0\xbe\x95\x4c\x7a\x6c\x6b\xce\x28\x78\x75\xf5\x22\x64"
- "\xcd\xef\x55\xab\x17\x0b\x7e\x3d\xad\x52\xd0\xd4\x11\x9e\x5f\x6b"
- "\x5c\xc8\xaf\xab\xe1\xf9\x95\x15\x35\x34\xbf\xb2\xa8\xfe\xaf\x0e"
- "\xe6\x57\x56\x4a\x30\xbf\xfc\x36\x51\xbe\xe9\x7a\x94\x8d\xbe\xb5"
- "\xac\x4e\xd8\x72\x5d\x34\xca\x8a\x48\xd3\x43\x69\x8a\xa3\xbd\x42"
- "\x4e\x0c\x13\x40\x7b\x05\xb2\xb2\x64\xfd\x1f\x5d\x0d\xc3\x59\xdf"
- "\x1a\x9a\xa3\x4d\x67\x3d\xeb\x1c\xd6\xab\x76\x87\x2f\x11\x68\xbc"
- "\x51\x91\x6f\x53\x78\x5b\x90\x75\x0e\x79\x5a\x19\x26\xbc\x5b\x8c"
- "\x99\x3e\x6d\x08\xb5\x11\x4f\x43\x68\x1d\xad\xe1\xe9\x60\x60\xff"
- "\xd3\x9b\x5f\x37\xaf\xb3\xa7\x2d\x83\xeb\xec\x99\x18\xa9\xbe\xfe"
- "\x1a\x4a\xdf\xd3\x07\xc2\xd7\xd7\xd3\xf5\x43\xd7\xd7\xd3\x67\x86"
- "\xae\xaf\xa7\xa9\xef\x73\xd5\x09\xcf\xe8\x42\xdb\x8d\xa7\x5d\xa1"
- "\xe5\xc5\x7c\x31\x1d\x53\x0f\xbb\x9d\xde\xbf\x6e\xb9\xe5\x8b\x6c"
- "\x1c\xd5\x15\xad\xff\x47\xfa\xa7\x12\x8d\xdf\x14\xc7\x90\xb8\x91"
- "\x87\xe5\x3b\x87\x3c\x3f\x3c\xaa\x1d\xfb\x95\x34\x3f\xcf\x30\x99"
- "\xc6\xca\x9e\xf9\xb3\x5f\xad\x9a\x87\xcf\xea\x8b\x90\xfd\x53\xbf"
- "\x3a\xa2\x8c\xe6\x92\xf1\xb5\x83\xfc\xfb\xc4\x33\xbe\xe0\xba\xa0"
- "\x39\x65\x87\xc5\x5e\x8e\x34\xce\xf9\xd9\x45\x58\xbb\x5f\xd4\x4b"
- "\x76\x45\x28\x1f\xd7\x1a\xc2\xd7\xcb\xda\x24\xac\x97\xcf\xc2\xd7"
- "\xcb\xda\x8c\xa1\xeb\x65\xad\x05\xeb\xe5\xb3\xc1\x7a\xb4\xf6\x80"
- "\xa4\x47\x7b\x29\x8d\x61\x33\xf9\xab\x6b\xbf\x22\x18\x7c\x46\x1d"
- "\x59\xfb\x39\xc5\xcf\xea\x91\xf5\x88\xa7\xa1\xfe\x3f\xcf\x5f\x82"
- "\x69\x92\x70\x04\xe3\x75\x46\xf7\x84\xd3\x93\xb5\xf4\x3d\x55\x35"
- "\xdb\x02\x5a\xe4\x61\xe6\x71\xc2\x51\x08\x70\x05\xb2\x97\x11\x1c"
- "\x85\xd3\xd9\xcb\x01\xf8\x6c\xa3\x0c\xc7\xc7\x45\x05\xac\x81\x79"
- "\xcc\x40\x70\xa1\xb8\xb3\xa5\xf2\x0f\xe7\xed\x08\xc1\x13\x9c\x02"
- "\xc6\x2a\xf4\x31\xfb\x4c\xa8\x3e\x66\x97\x87\xca\xe7\x5a\xfa\x3e"
- "\x11\xed\x47\x3b\x87\xb2\xdc\xd5\x6f\x53\xcd\xfb\x76\x74\x33\x27"
- "\x4a\xa1\x9b\x28\x03\x39\xff\x28\x64\x20\xe7\x50\x28\xad\x39\x09"
- "\xe1\x65\x20\x27\x79\x68\x19\xc8\xc9\x1c\x5a\x06\x72\x8a\x49\x06"
- "\x9c\x90\x73\x2a\x54\x37\x73\x0e\x86\x96\x1d\xf3\xe5\xba\x09\x31"
- "\xdf\x44\x37\xd1\x17\xba\x7d\x28\x3d\x94\xfc\x7f\x55\xdd\x0d\x80"
- "\x6f\xc0\x33\x2d\xea\x15\xd2\xb7\x2e\x85\xbe\x21\xa1\x8d\x37\x13"
- "\x0f\x6b\x79\x1f\x6d\x5d\x46\x30\x1f\x0f\x8b\xbe\x56\x29\xc2\xfe"
- "\x8e\xe6\xec\x09\x7e\xe6\x9e\x08\x2d\xff\xba\xe2\xf0\xfc\x5c\x77"
- "\x10\xf9\x59\x1a\x9e\x9f\xeb\x4e\x0e\xcd\xcf\x75\x2d\xb4\x56\x7d"
- "\xb0\x4e\xad\xbb\x60\xd8\xc6\x7d\x14\x9e\xe6\x0a\xe4\xde\xff\xf5"
- "\xda\xa7\xdc\xb8\xd0\xf6\x69\x9d\xef\x9b\xb7\x4f\xb9\x99\xe1\xdb"
- "\xa7\x5c\x4b\xf8\xf6\x29\xf7\x80\xd0\x87\x5c\x7b\xa8\x3e\xe4\xd6"
- "\x87\xca\x04\xf2\xee\x5b\x6b\x9f\x4c\x3a\x85\x0e\x1c\xb9\x08\xa6"
- "\x0a\xf4\x29\x24\x5b\x98\xb7\x3a\x94\x46\xd3\xcc\xf0\xf5\x66\x4a"
- "\xc5\x7a\x3b\x12\xbe\xde\x4c\xd9\x43\xd7\x9b\xa9\x04\xeb\xed\xc8"
- "\xe0\x7a\x33\x55\x7d\x73\x9f\xc2\xd4\x1a\x5a\x67\xa6\xc6\x6f\x5e"
- "\x67\x79\x51\xe1\xeb\x2c\x2f\x21\x7c\x9d\xe5\x25\x8b\x3a\xcb\x2b"
- "\x0e\xad\xb3\xbc\x8c\xd0\x3a\x43\xbe\x7d\x6b\x75\x96\xd7\xa2\xa8"
- "\xb3\x2d\x17\x61\xfd\x22\xac\xb3\x73\xa2\xce\x36\x8c\x50\xd0\xe8"
- "\x0c\x5f\x67\x79\x5e\xac\xb3\x2d\xe1\xeb\x6c\x7d\xdc\xd0\x75\xb6"
- "\x9e\xf6\xd0\xd8\x32\xb8\xce\xd6\xa7\x7d\xf3\x3a\x5b\x5f\x12\x5a"
- "\x67\xeb\x4d\xdf\xbc\xce\xd6\xdb\xc3\xd7\xd9\xfa\x8e\xf0\x75\xb6"
- "\xde\x25\xea\x6c\x83\x31\xb4\xce\x36\x68\x43\xeb\x0c\xf9\xf6\x37"
- "\xd6\x19\xd6\x8f\x5e\xcc\xd7\xdd\xf0\x52\x2f\x1f\xd3\xde\x50\xe6"
- "\x04\xb3\xb4\x9e\xdd\xcc\x65\x47\xaa\xc3\x77\x11\xa6\x78\x70\xdb"
- "\xbd\xa1\x46\x0a\x7b\x62\x70\x3d\x6c\x68\xc2\x76\xb5\xa7\xa5\x84"
- "\xcf\xeb\x12\x75\x48\x3c\x47\x38\x31\x46\xb6\x81\xdb\x7f\xac\x63"
- "\x46\xfb\x0a\x53\x5b\x8c\xf0\x6e\xc2\x43\xfb\xaa\x84\xe2\x32\x6b"
- "\xbe\x89\x5f\x36\xf4\x1c\xf3\x42\x3d\xed\xfd\x7f\x11\xf2\xc7\x0b"
- "\x59\x35\x2b\xfd\xdf\x3a\xcc\xeb\xb2\x90\xd3\x67\x15\x63\x26\xe6"
- "\x21\xfc\x5f\x33\xf9\xbf\x75\xe1\xe5\xd4\x7c\x13\xff\xd7\x4c\xfc"
- "\xa8\x0b\xea\xaf\xc6\xa2\x07\xa8\xe8\xaf\x9a\x7d\xd1\x6e\x21\x3b"
- "\xdc\x8f\xad\x28\xd4\x7b\x6c\xf9\x09\x0a\x9a\xb1\x6e\xf2\x4f\x48"
- "\x34\x1f\x0b\x4d\x9f\x9f\x1c\x9e\xe6\xfc\x0c\xa4\xf9\xdd\xf0\x34"
- "\xe7\x5b\x86\xa6\x39\xff\x20\xd2\xfc\xee\x60\xdd\xca\x6f\x90\xe4"
- "\x20\x4c\xbf\x3c\xdf\x1e\xbe\xfe\xf3\x15\xf5\x0f\x99\xc5\x25\xcc"
- "\xc5\xd3\x87\xc0\x3d\x0b\xc1\x70\x34\x57\x9f\x60\x49\x46\xc2\xc0"
- "\xce\x54\xe2\x1c\x02\x2e\x63\x90\xec\xd1\xda\x82\xb0\xb2\xf7\x6c"
- "\x99\xd0\xc7\x67\x3b\x42\xf5\xf1\xd9\xea\x50\x7d\x44\x5e\x87\xa6"
- "\x6b\x0a\x8d\x37\x1f\xf8\xf6\x6c\xec\x46\xa3\x42\x06\xde\xbf\x08"
- "\x1b\xdf\x16\x32\xb0\xb1\x3f\x94\x8e\x8d\x29\xe1\x65\x60\x63\x26"
- "\x96\xff\xfd\xf0\x32\xb0\xb1\x78\x68\x19\xd8\x58\x8e\xbc\x7c\x3f"
- "\x58\x6e\x57\x95\xa4\x0c\x57\xc0\x9c\x0e\x6f\xf3\x36\x9e\x0d\x3f"
- "\xae\xb3\xb1\x4b\xf0\xb8\x20\x3e\x94\xc7\x1b\x7d\xa1\x3c\xc4\xb2"
- "\xfc\xed\x3c\x1c\x38\x2b\xc3\x63\x2b\x50\xea\xbf\xe3\x22\x14\x48"
- "\xfa\xbf\xe9\xcf\xa1\x34\x16\x48\xfd\x9f\x70\x63\x59\x05\x0d\xc8"
- "\x4b\x47\x78\x5e\x16\xd8\xc3\x97\xb9\x80\xda\x20\x87\x7f\x90\x2e"
- "\x15\xb8\x30\x7c\x15\x7d\x3b\xa0\x31\xac\x5a\x0c\x5f\xe5\x03\x2d"
- "\x6f\xaf\x06\xda\xa5\x4d\x71\x34\x46\xce\xc7\x98\x51\x7e\xa3\xe3"
- "\x81\xd6\x1e\xe9\x88\xae\xb5\x25\xca\x6f\xa2\x9b\x52\x88\x6e\x9a"
- "\xc7\x42\xeb\x6a\xa2\xad\x90\xee\x70\xfb\x40\x96\x77\x82\x57\xe0"
- "\xb6\x90\x5e\x10\xbc\x0c\x2b\xc6\x3a\xcb\x14\xb6\x69\x53\x75\xf8"
- "\x3a\xde\xd4\x38\xb4\xec\x6c\x3a\x2b\xea\x79\x33\x84\xd6\xf3\xa6"
- "\x2e\xbf\x6d\x74\x06\x95\x15\x65\xe0\x1b\xe9\x09\x7d\x3b\x1d\xd2"
- "\xde\xef\x5d\xd3\x61\xd9\x0d\x93\x2f\xc1\x66\x33\xcf\x4f\xcd\xd0"
- "\xa7\x50\x41\x0b\xb7\x01\x9b\xdf\xe3\x74\x22\xcc\x5a\x1f\xa8\xd9"
- "\xde\x8d\x1d\x14\x57\x67\x63\x5e\x3a\x37\x46\x3e\x03\x06\x65\xe1"
- "\xf6\x4e\xd8\xbc\x27\x24\x3d\xb6\x46\x0e\x81\xe3\x8c\x18\xdf\xdf"
- "\xdc\x24\x8f\xc3\x0f\x35\xbe\x8f\x30\x17\xe4\x79\xbf\xe2\x5b\xd8"
- "\xe6\x73\x43\xb6\xcb\x48\x13\xad\x1d\x27\x9a\x6e\x6e\x07\xb6\x24"
- "\xca\xf2\x2b\xbe\xcd\x6d\x49\x09\xac\x6d\xd9\xb2\x14\xe3\xdc\x37"
- "\x19\xcf\x0d\xd2\x83\x2d\xd6\x60\x3c\xe2\xbc\x98\x2d\x07\xe5\xf5"
- "\x29\xf8\x5c\x7d\x0b\x5c\x32\x3d\x76\x05\x3d\xe7\xb0\xbf\xe0\x96"
- "\x70\x5c\xb8\x05\x8e\x38\x47\xc3\x3c\x98\xed\x87\x88\x4b\x50\x78"
- "\x17\x9d\x3f\xe3\xa8\xe9\x86\x28\x1f\x68\x44\xdf\xce\x72\x2f\xad"
- "\x0d\xa1\xbe\xa1\xc3\xb7\xc0\x4e\xdf\xe0\xf8\x1c\x02\xfd\x02\x7b"
- "\x9b\xb5\x5f\xda\x83\xcd\xf2\x10\xf1\xb4\xcd\x7c\xd5\x5e\x73\x94"
- "\x75\x1f\xe7\x7b\x6f\x59\x42\xfa\x7f\x07\x69\xfe\x0f\xcd\xc3\xd8"
- "\x0d\x0b\x10\xfe\x77\x42\xd7\x0b\x15\x3e\xa9\x65\x88\xfe\x9f\x85"
- "\xfa\x7f\x0b\xc2\xeb\xb9\xe5\x26\xfd\x3f\x0b\xf5\xff\x16\x04\xb7"
- "\x9b\xe2\x3b\x8f\xe5\x42\xb0\x4f\x4a\xfb\x63\x19\xd6\x93\x9f\xf9"
- "\xdc\x63\xf7\x54\x81\xce\x47\xdf\xb4\x51\x37\x1d\xdd\x2d\xa4\xaf"
- "\xba\x36\x57\x13\xed\xc3\xa0\x1d\x6d\x21\x59\xa4\xb6\x8c\xf4\xf5"
- "\x39\x03\x6f\xcb\x7c\x42\x17\x4b\xad\xcc\x35\xb3\x0b\x65\x68\x8b"
- "\x59\xc6\x15\xb5\xcb\x2c\xd6\x7d\x8c\xee\x82\xe1\x8e\x6e\xde\x2e"
- "\xaa\xc8\x5f\xe5\x7e\xab\xef\x1a\x10\xde\xe6\x92\x36\x20\xbc\xfe"
- "\x81\x76\x92\xe3\x2e\x21\x1d\x27\x9c\x84\xbb\x1d\xe1\x08\x2f\xc1"
- "\xc9\xe5\x10\x6b\x63\x9e\x6b\x08\x2e\x3b\x1f\x7f\xc1\xbc\x31\xfc"
- "\x73\x1a\x57\x71\x50\xba\xd2\x35\x6c\x76\x17\x7d\x33\xbb\x6a\x67"
- "\xa5\x1b\xd9\xec\x42\x1a\x13\x2b\xa4\xf3\xa0\x55\xef\xfe\xc9\x19"
- "\x59\x3c\x15\xb4\x22\xec\xb9\x9e\x16\x83\x17\x9c\x50\x98\x18\x6a"
- "\x23\x0a\x15\xfe\xaf\x85\xf7\x33\xf1\xae\xa1\xf9\x89\xd2\xfc\x55"
- "\xb2\x07\xcc\xe1\xf3\x70\xf9\xb8\xd9\x9c\x0a\xfa\x26\x4d\x73\xa2"
- "\xc4\xfe\x6f\x85\x56\xc5\xd8\x9b\xeb\x30\x9f\x57\xf3\x7b\xcc\xb7"
- "\x28\x52\xc8\x48\x71\x64\x68\x9d\x16\x56\x97\x5e\xa6\x6f\x41\xa2"
- "\x3d\x78\xc6\xa7\xb4\x8f\x85\x4d\xb2\xef\xa6\x08\x3f\x27\xb7\x07"
- "\x86\xcd\x84\xb7\x48\xd1\xce\x14\x72\xff\xbf\x7f\x50\xbb\x50\x44"
- "\x76\x3d\x44\x26\xdb\xb9\x0c\x15\x19\xda\xdc\x28\x37\x85\x24\xff"
- "\x45\xc7\x10\x66\x0f\xad\x39\xc4\xf7\xe1\x57\xa0\x28\xbd\xdf\x06"
- "\xda\x36\x17\x5f\x53\xa5\x43\x19\xe1\x72\x4b\xed\xc6\x1c\x31\x1f"
- "\xc9\xad\xc8\xa3\x40\xe6\x39\xc1\xb4\x17\xfe\x1e\xc4\x7c\x0a\x92"
- "\x85\xa2\x14\x9a\x9b\x31\xba\x87\xef\xb5\xa5\x93\x65\xc8\xe1\xeb"
- "\x80\x76\x9f\xb2\xcf\x53\x74\x3a\x7c\xd9\x8b\xa8\xfd\xaf\x74\x42"
- "\x71\x42\x68\xdd\x16\xf1\xf6\x5f\xfe\xae\x83\x75\xef\x0a\x4d\x57"
- "\xac\x09\xad\xfb\xc2\x6a\x8a\x1f\x72\x8e\x4f\x79\x61\x3c\xf6\x67"
- "\xd6\xba\xf9\x7c\xaf\x62\xd4\xff\xc2\x8c\x9b\xd9\x41\xa6\x2b\x8c"
- "\xf7\x23\xac\x34\x2f\x18\xed\x56\xf1\x81\x90\x31\xa3\xb1\x7c\xcc"
- "\x68\xed\x45\xd8\x2a\x7d\xfb\xd9\xda\xa6\xa0\xaf\x61\x68\xdf\xa0"
- "\x98\xbe\xff\xac\x0d\x6f\x33\x8a\x2f\x84\xf7\x0d\x8a\xdd\x92\x5d"
- "\x58\xcb\x62\x94\x72\xb0\x95\xd6\xd3\xf1\x34\x72\x1f\x96\xc6\x42"
- "\x87\xee\xc3\x6e\x4d\x19\xe8\xc3\x16\x92\x3d\xd8\x6a\x1c\xe8\xc3"
- "\xba\xc2\xf5\x61\x9d\x61\xea\x73\xeb\xbe\xf0\xf5\xb9\xb5\x26\x7c"
- "\x1f\x76\xeb\x69\xd1\xce\x6f\xed\x0e\xad\xe7\xad\x67\x03\xdf\x84"
- "\x8b\x1b\xbe\x3d\x7f\x78\x5b\xd2\x60\x7f\x78\xdb\xcf\x44\x5d\x6d"
- "\xbb\x16\x4a\xdb\xb6\xf4\xf0\xb6\x7d\x9b\x79\x68\x7f\x78\xdb\xbe"
- "\xa1\x6d\xfb\xb6\xfa\xc1\xfe\xb0\x61\x98\x02\xa6\x65\xc0\x57\x0a"
- "\xf1\xcd\xb6\x5d\x10\x7c\xda\x4e\xfe\x5c\x44\x10\xbc\x3b\x54\xde"
- "\x91\x66\xc4\x87\xb6\xed\x12\xd9\x34\x59\x66\x86\xe2\x09\xed\xbd"
- "\x34\xbd\x0a\x46\xa0\x0e\xbc\xef\xb1\x6d\x1f\x90\x7f\x9a\xc7\x47"
- "\xf9\x90\x8d\x1c\x72\x3e\x9d\x5a\xa6\x8f\xe8\xd8\x5e\x72\xb3\xef"
- "\xa5\x11\x7a\x48\x7f\x65\x10\x3f\xb6\x73\xff\x8f\x70\xdc\xbc\xce"
- "\xb6\xf7\x28\x74\xcc\x2d\xe6\xe1\x5a\x7f\x21\xea\xcd\xaa\xe8\xcb"
- "\x5a\xb5\x7c\x4d\xdf\x90\xf6\xd6\x6a\x0c\x2f\xa3\xd6\x94\x01\x7b"
- "\x5b\xc8\xf1\xee\x50\xc4\x67\x8b\x3a\xb0\x36\xf9\x63\x82\xc7\xba"
- "\xad\xd6\x50\x9b\x64\xcd\x56\xa4\x53\xf4\xff\xac\x9c\x9e\xaf\xd7"
- "\xde\x58\xbb\x87\x6e\x6f\x76\x6c\x15\xe5\xdf\xa9\xf8\xbe\xbc\x43"
- "\x7b\xf3\xf6\x66\xc7\x10\xe5\xdf\x91\x12\xda\xde\xec\x54\x7c\xa3"
- "\xdf\x91\x1d\xbe\xbd\xd9\x61\x95\xed\x8c\xb0\x1b\x3b\xfe\xed\xeb"
- "\xd9\x9b\x1d\x8d\xa1\xf6\x66\x47\xf5\xad\xec\x4d\xf3\x20\x7b\xb3"
- "\xc3\x1d\x5d\x13\xae\x2c\x3b\xa3\xc2\xdb\x9b\x9d\x09\xa2\x0e\x77"
- "\x96\x84\xda\x9b\x9d\xc9\xa1\x75\xb8\x43\x51\x87\x3b\x15\xdf\xbf"
- "\x77\x68\xff\x4f\x6d\x52\x44\x44\x84\x3a\x42\xa5\x56\x45\x60\x14"
- "\x16\x0f\x86\x47\x68\x22\x22\xf1\x1a\x26\xdd\x87\xab\x23\xd4\x1a"
- "\xbc\x22\xa5\xfb\x30\xc5\xfb\x70\x4a\x8b\x97\x46\xba\x47\x2a\xde"
- "\x87\xdd\x22\x7e\xb8\x94\xaf\x9c\xbf\x46\xf1\x1e\x79\x8b\xf8\x61"
- "\x7f\x63\x7a\x18\xf4\x1e\xba\x0e\x72\xc9\xe6\x6d\x39\x05\xf9\x26"
- "\x3e\xaf\x3d\xcf\x90\x93\x9b\x9b\x57\x54\x64\x28\xde\x62\x78\xf8"
- "\xa1\x95\xf7\xcd\x33\x88\xe9\xf1\x05\xf3\x67\x98\x46\xc2\xb2\xed"
- "\x85\x14\xb1\x6c\xd5\x92\x4c\x43\xfa\xc3\x0f\x85\x46\xca\x68\xf8"
- "\x34\xf8\x9b\x61\x09\xd2\xbd\x94\x97\xc6\x02\x1c\x3c\xca\xed\x4e"
- "\x17\xad\x3d\x17\xfd\x89\xb2\xdf\x9d\xa5\xf5\xcb\x37\x4a\x19\xad"
- "\xab\xe8\x84\x92\x5d\x54\x88\x59\xf5\x65\x60\x59\x47\xfb\xa9\x94"
- "\x1c\x63\xbf\x74\x81\xe1\x51\x50\x77\xc2\xfe\x2f\x5a\xd2\x10\x16"
- "\xdf\x1d\x4e\x1f\x18\x4a\xc9\xb7\x2d\x7b\x09\xe3\x54\xec\x41\x3f"
- "\x86\xb9\xa5\xf5\xf9\xa5\xc7\x78\xd8\x2f\xcb\x64\xb8\xe8\x8b\xb0"
- "\x6b\x3e\xfb\x25\xe3\xef\xb4\x67\x8d\x80\xdb\x15\xc3\xd4\xcf\x9f"
- "\x23\xbb\x50\x13\x0b\x1a\x9a\x97\x7d\x2c\x16\xb4\xc7\xc6\xd2\x9e"
- "\xbb\xbb\x34\xf2\xbc\xec\x97\xf0\xdd\x09\xfb\xbb\x29\x6f\x82\xf5"
- "\xab\x9f\xbf\x41\xf0\xb5\xa1\xf0\x73\x03\xf3\xb8\x77\x69\xd4\x08"
- "\xb7\xe2\x73\x88\x8e\xee\x67\x7f\xf5\xc6\x9a\xd3\x67\xa7\xa1\x9f"
- "\x86\x55\x71\xd6\x57\x06\x62\x6d\xd4\xae\x5d\x3b\xfa\x99\x8f\xf6"
- "\x4c\x58\xd6\x53\xca\x8e\x6c\x02\x0d\xea\xb3\xca\x5e\x48\x6b\x29"
- "\x76\x99\xea\xf2\x40\x83\xe5\x8f\xbf\x04\xbb\xab\x0c\xcb\xd1\x6f"
- "\x5c\x06\x9a\x4f\xac\xb4\xde\xb5\xa8\xf0\xf0\x6f\x41\xf3\x0f\x37"
- "\xca\xd4\x37\x98\x1e\x4a\x8a\x59\x37\xa3\x7d\xb8\xdd\xcc\x4b\xf3"
- "\x6d\xcf\x66\xf7\x13\xcc\x3a\x4f\xa9\x1e\xda\xd1\x7d\xd9\x75\x81"
- "\x79\x0f\xfc\x56\xec\x57\xd1\xd6\xe3\xa6\xf5\xb3\xda\x5d\xcb\x20"
- "\xe2\x62\x26\xa8\xdb\xcc\xd5\xe0\xc8\x72\x43\xc9\x05\xd6\x7d\x36"
- "\xfb\xcf\xd0\x6e\x6e\x84\xb5\x1d\xa0\x3e\xdb\xf5\x47\xe0\x7b\x49"
- "\x57\x5e\xa0\x75\xb7\xfa\x5d\xf9\x14\x76\x0d\x76\xee\x82\x51\x3b"
- "\x3f\xa5\x7e\x50\x07\xe6\x73\x19\x9e\x3a\x0f\x2a\xc4\xa7\x7e\xfe"
- "\x8f\xa0\x7f\xfe\x49\x5a\x67\x9e\x02\x35\xbb\x41\xcf\x4a\x8d\x51"
- "\x37\x4a\x8d\xba\x1b\xcc\x18\xeb\x29\x35\xc6\xb5\x5b\x10\xbe\xeb"
- "\x3d\x18\xdd\x01\x71\xbf\xbc\xd4\xa1\xae\xfe\x12\xe2\xa9\x4c\x17"
- "\xb1\x6c\x35\x5f\x22\x7c\xe5\x4f\xcb\xfc\x98\x36\x38\x8d\x2f\xe6"
- "\xa7\xd5\x8e\x4c\x2f\xf8\x11\x57\xf5\x0d\x88\xaf\xb9\x01\x7a\x7f"
- "\xc5\x4f\xcb\x28\x5d\x0f\x94\x56\x38\xce\x02\x4a\x0a\xeb\xef\xab"
- "\xb4\xa4\xa3\x3d\x1c\xfe\xee\xba\x26\x8d\xe3\x6c\x0f\xb4\xb9\x6f"
- "\x40\x3b\xfc\x1e\x1c\xd6\xbf\xd8\xff\x61\x5d\x53\x24\xfa\x93\x2a"
- "\xfb\x4e\x9a\x03\x2f\x64\xa7\xb4\x8d\xf6\xcf\x2b\x83\x23\xbb\x21"
- "\xca\xb2\x13\x86\x5f\xc2\x70\x6e\x7b\xca\x73\x33\x1d\xbe\xbf\xd8"
- "\x77\xf2\xf5\xe0\xfb\xbb\x77\xb7\x41\x44\xbb\xbb\x9a\xca\xaf\xee"
- "\x8f\xbd\x00\x0e\xf7\x39\x70\x58\x3e\xb3\xfb\x75\x7f\xe8\x3e\xe8"
- "\x07\xed\x3f\x5e\x3f\xa7\x76\x68\xae\x83\x23\xd3\x0d\xef\x63\xde"
- "\xac\xf2\x02\xed\x09\x99\xd2\xee\xf6\xd2\xfe\x3b\x89\xac\x57\x3f"
- "\xf2\x48\x21\xcc\xac\xfd\x12\x12\x8e\x7f\x09\x46\xe6\x31\xaa\x69"
- "\x8d\x37\xed\x97\x76\x1c\xef\x51\xd8\x07\xc3\xb2\xf3\xb5\xde\x2c"
- "\x46\x5a\xeb\xdd\x67\x84\xba\x1b\x81\xb5\xde\x37\x7a\x03\x6b\xbd"
- "\x51\xa6\xb4\xb4\xde\xdb\x09\xbb\x6b\xa2\xcf\xc2\x70\xd4\x13\x3b"
- "\xc9\xf7\x91\x2b\xa0\xd9\x7b\x05\x60\x76\x99\x9a\xfa\x99\x1a\xd4"
- "\x87\x5d\x0e\xac\x1b\x7a\xee\x84\xb2\xb9\x78\x8f\xc2\x0b\xfb\x73"
- "\x65\x7c\xaf\x8a\x2e\x49\x8e\x31\x4c\x8d\x61\x93\xf0\x1e\x81\xf7"
- "\x31\xa5\x35\xcc\xc5\xca\x8b\x13\xd1\x57\x19\x49\xf2\x2c\xd6\x97"
- "\x17\x27\x7a\x6c\x65\x51\x4e\x38\x55\x20\xcb\xb5\xb0\xef\xbb\xb4"
- "\xef\x77\x5e\xa6\xfd\xde\x5d\x9c\xae\x3e\xb3\x8a\xf6\x7e\x97\xc2"
- "\x89\x86\xad\x94\x2f\xe6\x9f\x89\xf7\x68\xd1\x07\x2d\xed\x91\xd3"
- "\xf6\xf6\x99\x29\xcf\x4d\x18\xce\xe4\x70\x2c\xb7\x86\xe2\xfe\xa5"
- "\xf3\xb2\x5a\xc0\x18\xd5\x88\xd3\x2b\xe1\x47\xdd\x2f\x39\x45\x3a"
- "\xde\xab\x8e\x66\xcd\xd9\x73\xa1\xe6\x28\x3b\x7b\xfc\x28\x6b\x11"
- "\xba\x57\xd6\xe8\x84\x7f\xe2\x7b\x4f\x62\x1b\xde\x72\x10\xe3\x9a"
- "\xb1\x37\x4e\x7c\x69\x31\xd1\xfc\xd2\xb2\x73\x4e\x98\x16\x17\x5c"
- "\x06\x66\xdb\xd9\x48\xed\xe8\x3f\xed\x6e\xc5\xfe\xe4\xf3\x8d\xed"
- "\x5d\x3d\xf0\x0f\x37\xba\x23\x4b\x3f\x06\xb5\xc3\xd7\x09\x73\xe2"
- "\xc4\x39\x39\x75\x47\x99\xf3\x15\x3a\x3f\xf8\x28\xeb\x41\x79\x99"
- "\x74\x09\xf6\x4c\xba\x27\x0e\xe2\x7e\x83\x5e\x89\xb0\x4f\x7b\xee"
- "\x0f\xb2\x4f\xef\xb5\x39\x9b\x82\x6c\xd3\xfe\x4d\x83\x6d\xd3\xbe"
- "\x7c\x61\x9b\x50\xf7\xb9\x2d\xea\x77\x4a\xe1\xab\x15\xe1\xd2\xfa"
- "\x95\x7d\x0f\x28\xc2\xbd\x52\xf8\x0c\x45\xb8\x4b\x84\xef\xcd\x93"
- "\x6d\x5f\x3b\xd1\xb1\x9d\x6c\xdf\xde\x25\x64\xfb\xda\xb3\x25\xdb"
- "\xc7\xed\xcf\xde\x59\xec\x4d\xb4\x45\xdb\xc8\xde\xec\x8d\x24\xfa"
- "\xd9\x2f\x41\xa6\x7d\xc4\x45\xb0\x7d\x48\x61\xe5\xbf\x07\x0d\x5e"
- "\x92\xdd\x2b\x19\x47\x76\x8f\x6c\x1e\xd9\xbe\x37\xc6\xb2\x8e\x37"
- "\x8e\xb2\xf3\x35\x7c\xdf\x6a\xdb\x80\xfd\x7b\x19\xc3\x0e\x62\xd8"
- "\xcb\x18\x4f\x76\x90\x78\xd2\x96\xd9\x04\xfc\x5c\x9b\xf2\x22\x8b"
- "\x5f\x9d\x08\x87\xb1\xbe\x69\xff\xab\x7d\xc8\xdf\x68\x15\x58\x1c"
- "\xc5\x6e\xbe\x0e\x85\xf6\x4a\x6f\x2f\xee\x22\xbd\x1b\xbb\xd7\x4f"
- "\xe3\x14\x7f\x86\xdd\x6e\x76\x89\xd6\xaa\x10\x0d\x6b\x77\x3c\x4a"
- "\x7b\x7d\xab\x5a\xcc\x00\xb4\x2f\x01\xd9\x6c\xa4\x45\x53\x8e\x34"
- "\x89\xbd\x85\x6d\x67\x9c\xf0\x99\x24\xaf\xfb\x69\xad\x1a\xb6\x29"
- "\xd8\x11\xb7\xa1\x7d\xc4\xb2\x45\xf7\x97\x01\xed\xcd\x42\xe7\x6b"
- "\xd2\xfd\x0d\xb5\xdf\x5c\x2e\xef\xcf\x62\x43\xdb\x80\x30\x8e\x0e"
- "\x2f\x10\xcd\x4e\xb0\x2d\x6d\x2b\x69\xc2\xf4\x7b\x5c\xc4\x1b\x66"
- "\x2b\x95\x71\xa8\x38\x0e\x35\x1f\xbb\x35\x23\x9c\x53\xf8\x37\x96"
- "\xf4\xb6\x2c\x17\x90\xdd\x77\x74\x23\x8e\x92\x4e\x81\x03\x71\x31"
- "\x6c\x03\x42\xe2\x24\xfc\xa3\x76\xb1\xbf\x22\xfe\x33\x54\x5f\xb4"
- "\x4f\x17\xcd\x53\x42\xbe\x44\xd1\x5e\x0d\xc2\x0f\xb5\x2d\xaa\xfb"
- "\x3d\x80\xb4\xd7\x18\xca\x9b\x2d\x95\xf6\xf2\xa2\xfd\xc5\x6e\xb6"
- "\xb7\x18\xf2\x28\x41\xde\x5f\xcc\xbf\xfd\xdb\xdd\x5b\x0c\x71\xeb"
- "\x6b\xd5\x0c\x75\xce\x96\x4a\xfb\x8b\x21\xfd\x0d\x24\x87\x52\x99"
- "\xd2\x5e\x7d\x8a\x78\xbe\xe7\x20\x85\x1d\xb1\xb1\x56\xb9\xfe\xa9"
- "\xbc\x54\x16\x8c\xb3\x08\xff\x90\xa1\x5e\xee\x4b\xa3\x78\x0c\xcb"
- "\x22\xf8\x39\x68\xc7\x1c\xd8\x86\xbd\xdb\xd9\xaf\x3e\xb2\x13\x34"
- "\xc2\xa6\xed\xcf\xa1\xf4\xc2\xa6\xed\xd7\x07\x6c\xda\xfe\x51\xc2"
- "\xa6\x09\x1e\x0b\x9b\xb6\x5f\x25\x6c\xda\xbe\xaf\xf8\x7c\x22\xb4"
- "\x69\x14\x47\x76\x4d\xb6\x69\xc7\xc7\xb2\x56\xb2\x1d\x1e\xdb\xbe"
- "\x6e\xd9\xb6\x1d\xc2\x30\xb2\x1d\x44\xa3\xb0\x53\x7b\x53\xd8\x1f"
- "\x8c\x20\xe6\x6b\xd2\xb3\x99\xf6\xcf\xe8\x96\x9e\xa9\x3d\x79\x52"
- "\xd8\xb8\xfd\xc9\x01\x1b\xb7\xcf\x1e\x48\x4b\x36\x6e\xff\x63\xc2"
- "\xc6\x89\xf0\xba\xa7\xc8\xc6\xed\x4d\x21\x1e\x48\xf8\xd5\xf4\x1d"
- "\x4d\x82\x27\x3e\xa6\x05\xdb\xb8\x50\xfd\xda\x5f\x25\xdb\x38\xb2"
- "\x6d\xf8\xde\xe0\x84\xa9\x7c\x5c\x98\xf4\xac\x0a\x79\x2e\xeb\x1d"
- "\xd5\x01\x95\x99\xce\x0f\x20\xbe\x2d\xbc\x0c\xc3\xa5\x7d\x6b\xa4"
- "\x72\xef\x77\xca\x6b\x34\x91\xff\x83\xf7\x34\x83\xc0\xbe\x64\x58"
- "\xd7\x53\x68\x3f\x47\x47\x59\x27\x38\xaa\x59\x59\xbb\xef\x02\xf8"
- "\xf7\x6e\xfc\x9c\xea\x15\xfb\x1b\x3f\xa4\x3b\xd9\x9d\x4b\xf0\xc2"
- "\xd4\xb5\x6e\x3e\x7e\xff\xf9\x11\x35\xc6\x59\x43\xe2\xe6\x53\x1e"
- "\x34\xae\x88\xcf\xda\xa1\xc6\x11\xbe\x41\x5e\x87\x6e\x92\xd7\x3b"
- "\x3c\x2f\xf4\xa5\xb0\xdf\x13\x73\x05\x5e\xe0\xdf\xd0\xf8\x9e\xcc"
- "\xe1\x71\xfd\x4e\x8a\x8f\x18\x22\xfe\xab\x9b\xa7\x7f\x71\xfc\xcd"
- "\xd3\xbf\xf8\x00\xd9\x20\x5a\x8f\xd7\x6f\x0b\xc5\x33\xda\x27\xc3"
- "\x5d\x22\xb8\x1c\xe9\x3b\xc8\xe7\xa5\x53\x79\xbf\x4c\x2f\xe3\x24"
- "\xb9\x3b\x8c\x70\x7c\xff\x5a\xb4\x91\xa9\x3b\x80\xf6\x0e\x0e\x4e"
- "\x7b\x3c\xc0\xdf\x17\xd3\x6f\x32\x4e\x13\xe5\xc0\x5e\x20\x9d\x2f"
- "\xdf\x8c\xad\x20\xad\xa5\xa9\x1a\xf8\xf6\xf0\xa2\x1b\xed\x25\x3f"
- "\xbf\x55\x5a\xb7\xdb\x83\xf6\x6d\x0a\xed\xb1\x49\x7e\xa5\xb4\xd6"
- "\x62\x1c\xda\xe5\x58\xda\x87\x85\xc6\xab\xd7\xf6\xa7\xab\x9b\xf9"
- "\xfe\xfb\x07\x12\xe5\xb4\x43\x8d\xed\x51\xbe\x52\x9e\x7c\x1d\x12"
- "\xa6\x31\xc9\x69\x08\x37\xad\xbd\xc1\xf6\x78\x0a\xdf\xdf\xcc\xd7"
- "\x43\x36\x70\x1c\xfa\xa0\xb1\x22\x9f\x6c\x90\xf2\xa9\x76\xc2\x0b"
- "\xa6\x9b\xad\x73\x1a\xba\x7c\x07\xce\x7f\xf3\xf2\x81\x54\xbe\x97"
- "\x74\xb7\x28\xdf\x4d\xf2\x7d\x69\xe9\x37\xcf\x57\x27\xe7\x7b\xe0"
- "\x9b\xf3\xf5\xa5\x33\x5f\x9f\xaf\x89\x12\x5f\x5f\x72\xdd\x82\xaf"
- "\x61\xf2\xf9\x71\xc2\xd7\xcf\xc7\x20\xe5\xf3\xe3\xcc\x70\xf9\x00"
- "\xff\x0d\xb9\x5f\x8f\x56\x3e\x23\x46\x3a\x97\x78\x04\xe2\xa9\x77"
- "\xc2\x81\x81\xb3\x87\xc5\x79\x49\x3f\x3e\xed\x84\x97\xaa\x42\xd7"
- "\x71\xfd\xf8\xdf\xd6\xd6\x53\xbb\xce\xfc\x4e\xf8\xf1\x79\x1a\x6b"
- "\x4b\xdd\x25\xf6\x07\x94\xd2\xa0\x3d\x7f\x69\xc8\xfd\x8b\xa4\x3d"
- "\x72\xb2\xe5\xbd\x3b\x68\x7d\x2a\xab\x6c\xcc\xee\x2d\x35\x83\x38"
- "\x2b\xfa\xe5\x7b\x69\x1d\x12\x3e\x0f\xc7\x67\x31\x0e\x45\xe7\x0b"
- "\x88\x3d\x29\x86\x61\xd8\x1e\x3a\x7f\x42\xac\xdf\x7b\x39\x03\x69"
- "\xb0\xf2\xb1\x26\xbe\xc7\x3e\xdf\xdb\xc5\x8d\x70\x6a\x4a\x2b\xf6"
- "\xf4\x78\xd9\x2a\xc3\x38\x65\x7c\x03\xfb\x5b\xbc\xbc\x44\xb4\x2d"
- "\x2f\xa7\xf5\x0e\x71\x8e\x11\xed\x73\xd6\xb0\x3b\x31\x64\xfd\xe1"
- "\xa2\xc2\xc2\x2d\x85\xf3\x0c\x45\x9b\xd6\xcd\x2a\x2a\xce\x29\xde"
- "\x5a\xc4\x17\xaa\x8f\x04\x0c\x30\x14\xe7\x6f\xca\xdb\xb2\xb5\xd8"
- "\xb8\x3d\x27\x5f\x2c\x6c\xbf\x0b\x01\x83\x81\x20\xf4\xdc\x48\xb4"
- "\x41\xe7\x98\x9a\xef\x41\xc1\xcf\x8e\xa4\xbd\x48\xe4\x75\xbb\x2d"
- "\x7a\x7e\xc6\x16\xda\xac\x83\xc9\x4e\xd8\xd2\x2d\xd7\x03\xed\x8f"
- "\x88\x7e\x8b\xfe\x12\x1c\x7c\x92\x64\x67\x05\xba\xa0\x75\x62\x5f"
- "\x09\xbe\x37\x80\xa3\x18\x03\xda\x41\x6b\xdf\x46\xe3\xb0\x07\xcf"
- "\xf9\x6d\x2f\xdb\xf9\x7e\x8f\x3b\x2f\xd1\xfb\x35\xd9\x4f\xa0\xef"
- "\x4a\xe2\x3b\xf0\x94\x05\x9d\x70\x70\x06\xe5\x4b\x7a\x57\x5b\x29"
- "\xce\xea\x66\xb6\x97\x3b\x68\xad\x36\xbe\x6b\x91\x06\xbb\xec\x8b"
- "\x22\xbd\x51\x2c\xa6\x11\x7d\xb4\x83\xee\x0f\x74\x2e\x90\xd6\x7a"
- "\x6b\x6b\xc5\xba\x6e\x0d\xc2\xf6\x0c\xc0\xda\x68\xdf\xe3\x46\x33"
- "\xb6\x9b\x61\xbf\x65\xb3\xd8\x5d\x99\xfe\xbe\xcc\xc8\xe0\x32\x63"
- "\xbf\x1a\xeb\xef\xd0\xdb\x58\xf6\x38\x59\x56\x44\xdd\x1f\x3a\x24"
- "\xf6\x5e\xde\x95\x89\x61\xc3\xf0\x6e\xe9\xc5\x38\xda\x03\x01\xe3"
- "\xb2\xe9\x1b\x59\x7b\xc9\x55\x7b\xb3\xbe\x13\xeb\xfd\x90\xc5\x09"
- "\xdb\xe2\xc5\xba\x35\x84\xc7\x3c\x1c\x65\x37\xa0\xc5\xc0\xec\x34"
- "\x46\xe7\x84\x43\x67\x5a\x0c\x6e\x60\x11\x6b\x3e\xa7\x74\xa8\x57"
- "\xfa\x52\x2b\xf9\x22\x18\xce\xd7\xe7\x1d\x6a\x94\x79\x5e\x6c\x60"
- "\x97\x09\x66\xa8\x71\x65\x6a\x2f\x8f\xf0\xb6\xe4\x4b\xa0\x39\x58"
- "\x5d\x70\xe8\xbc\xb2\xbd\x98\x61\x9a\x67\x30\xe5\x14\x1b\x0a\xf2"
- "\x37\xe7\x19\x4c\xf9\x26\xc3\xe6\x2d\xc5\x86\x0d\x5b\x68\x80\x87"
- "\x86\x74\x42\x64\xc2\x4f\xe5\xdb\x9e\x19\x29\x7f\xc3\xee\xdd\x6e"
- "\x1e\x26\x64\xfa\xc8\xac\x5e\x8f\x79\x78\x28\x4f\x8e\xc4\x88\xb6"
- "\xf2\x70\x36\xd2\xae\x11\xeb\xff\x22\xba\xf1\x1d\xcb\x7f\xa8\x35"
- "\x54\x77\x8f\x3c\x2d\xc1\x1e\x94\x61\xb9\x5c\x4c\xbb\x34\x10\x77"
- "\x44\x92\xc7\x3a\xb1\x4e\x99\xef\x7b\x53\xc7\xe7\xf0\x1f\xb6\x0f"
- "\x99\x86\xf6\xfa\xda\x09\xb9\x57\xe0\xf0\x3b\xcc\x76\xc8\x2d\xc9"
- "\x90\xd6\x5f\xbe\xcb\x2c\xc9\x0f\xca\xc4\x11\x18\x2c\x3f\x47\xb2"
- "\x48\x7e\x98\x27\x53\xcb\xe7\x7b\xf8\xbc\x68\xe7\xf0\x1d\xdb\x67"
- "\x27\x1c\x36\x51\x39\xdc\xdb\x33\xb5\xa5\xc7\xf8\xfe\x7b\x5f\xd0"
- "\xb7\x53\x3a\x9f\x06\x65\x65\x84\x38\x47\xf3\x48\x86\x5c\x47\x32"
- "\x7c\x78\x1d\xe6\xf2\x12\x2a\x63\x82\x9f\xff\xc8\x65\x0c\xfd\x03"
- "\xa4\x49\x2d\xef\xf3\x47\x6d\x08\xd2\xd6\x52\xbc\x8b\x31\xcc\xa3"
- "\x29\x48\x0e\xae\x84\x93\x03\xac\xdb\xdc\x82\x2d\xb9\x1b\x51\xd1"
- "\x0b\xf3\x8a\x73\xcd\xb4\xb7\x05\xd9\x01\xbe\x71\xc6\x0c\x93\x61"
- "\x6b\x51\x5e\xee\x48\x08\x07\x35\x10\x19\x5c\xff\x3a\x3f\xca\x6b"
- "\x6f\x6f\x66\x24\xad\xb1\x10\x6b\x2a\x2a\x76\xf5\x16\x61\x5f\x24"
- "\xa4\xde\x2b\x9e\x73\xe8\x13\xd1\xa7\x4b\xe4\x7b\xc7\x11\xcf\xc4"
- "\x3c\x81\x8a\x9f\x11\x1f\x7a\xd5\x2a\x6c\x4f\xca\x8b\x65\x19\xc0"
- "\xe7\x32\x2c\x93\x39\x30\x47\xa3\xe2\x74\xaf\x3a\xf2\x02\xd9\x1f"
- "\x31\x1f\xe4\x12\xda\x81\xe8\xba\x4e\x28\xe7\x73\xc1\x6a\x79\x7b"
- "\x54\x7e\x5a\x4e\x73\x78\x60\x9d\x73\x45\xbc\x2c\x27\x41\x69\xde"
- "\xa6\x30\xbe\xd7\x91\xed\xc8\x39\xaa\x73\x26\xea\x5e\x23\xc3\x21"
- "\x5f\x59\x1d\xb7\x23\x15\x5a\xa5\x6d\xf8\x40\x47\xdf\xc4\x05\x3d"
- "\x5c\xfe\x74\xbb\x52\xf8\xbe\x29\xe8\xeb\x75\x42\xc5\x18\x69\x7e"
- "\x0a\x1f\x53\x74\x58\x11\x97\x57\xe0\xc2\xbc\xae\xcb\x79\xb1\x98"
- "\x5d\x74\x9e\x29\xca\x59\x85\x39\x30\x66\x58\x11\x47\x7d\x65\xd6"
- "\x9b\x39\xcc\x09\xe5\x19\x5c\xb6\xf0\xb9\x78\xbc\xd8\xc3\x8d\xe4"
- "\x8d\xca\x49\x72\x15\x90\xa9\x8a\x93\x72\x7d\x53\x99\x31\x5d\x96"
- "\x81\xef\xf3\x5b\x61\x97\x79\x39\xd4\x5e\x33\x5c\x6f\x75\x48\x8b"
- "\x47\xe8\x2e\xef\xe7\x89\xfd\x85\x68\x9d\x4b\x04\xd2\x68\xbe\x08"
- "\x95\xff\x46\x73\xf7\xa3\xbd\xd4\x6f\xda\x65\xa6\xbd\x13\x44\x5b"
- "\x56\x69\x40\x19\x8e\x0b\xac\x4d\xaf\x44\xff\xaf\x3c\x4e\xd4\x5d"
- "\x65\x72\x90\xee\xb9\xa4\xf9\x00\xc3\x89\x47\x64\xcf\x1c\xd6\x45"
- "\x5c\x5f\xc5\xba\xdf\x4a\xb3\x9c\x8e\xef\x33\x80\xb2\x41\xf3\x60"
- "\xaf\x40\xe5\x01\x6a\x23\x88\x3e\x27\x54\x6a\x29\x7f\x2a\x1f\xb5"
- "\xd9\x5c\x6e\xf4\x74\x06\x4a\x65\x83\x82\x86\xd3\x32\x2e\x09\x77"
- "\x8b\xfc\x4e\xfb\x8e\x39\xa1\x2a\x9d\xce\x81\x6c\x76\xf3\x32\xdc"
- "\xd6\x82\xbd\x82\x16\x37\x87\xeb\x91\x79\x88\xe1\x65\xf8\x8e\x75"
- "\x71\x10\xc4\x37\xa1\x46\xb3\xb0\x45\x55\x74\x86\x29\x2b\x35\xd0"
- "\xbe\x84\xc9\xc2\xde\xf0\xbd\x74\x78\xdc\x08\x49\x67\x47\xd0\x1a"
- "\x21\x3e\x2f\xc6\xed\xe3\xb6\x41\xec\xbd\x80\xf1\xa8\x23\x1e\x3a"
- "\xd3\xa5\xcf\x3c\x42\xd0\xf6\x4a\xf6\x40\x1e\x74\x3e\x25\xff\x06"
- "\xf9\x4a\xba\xd8\xcb\x64\x38\xf6\xf5\x5e\x29\x93\xeb\x6f\xdf\x51"
- "\x0c\xa3\xf3\x53\xd5\xa0\x6d\xe1\x7b\x85\xbd\x52\x23\xd3\x2b\xc5"
- "\xa9\xb9\x3c\x70\x1e\xbc\x32\xa0\xff\xbd\xfc\xac\xcf\x57\x5a\xe5"
- "\x7c\x38\x2c\xc2\x11\x7c\x4b\x02\x8f\xeb\x1a\xc0\x23\xf6\x50\xd1"
- "\xf2\xf3\x9e\xeb\x29\xae\x0a\x02\xb6\xaa\x92\xef\x57\xcc\xe7\xad"
- "\x61\x39\x5c\xcf\x9b\x47\xf0\x3a\x30\x00\x9d\x0f\x42\xe7\x08\xab"
- "\x85\x2c\x56\xcd\x95\xd3\x44\xa8\x88\x8f\x55\xa9\x72\xde\x32\x0e"
- "\xa2\xff\xa6\x36\x4f\x94\x45\x43\x3a\x22\x9d\xd9\xc9\xed\x85\xf0"
- "\xb5\xaa\xda\xb8\x0c\xf2\x72\x56\xd5\x07\xd7\xb5\xf0\xe5\xaa\x4e"
- "\x07\xc9\x03\xd1\x33\x50\xff\x58\xf7\x6e\xd1\x96\x54\x75\x04\xd1"
- "\x98\x82\xef\xdd\x81\x7a\xe0\x75\x44\x67\x40\x85\x3d\xef\x91\xeb"
- "\x0a\xc2\xf8\x19\xa7\x93\xea\x03\xfb\x62\x49\xd0\x42\x3e\x21\xea"
- "\x0a\xf2\x04\x69\x7c\x75\x13\xc9\x95\xc7\xf6\x6a\x4a\xa8\x6c\xbe"
- "\x9a\x1e\x44\xaf\x8a\xec\x3a\x86\x99\x64\x18\x27\xbc\xca\xd7\x32"
- "\xc9\xfc\xc4\xb8\xb2\x81\x7a\xbc\x8f\xc3\x96\xcb\x74\xde\xa2\xcd"
- "\x90\x78\xf5\xea\xc7\x52\x1e\xad\x72\x1e\xf8\x8c\xfd\x9f\xaa\x2c"
- "\x25\x8e\x75\x3b\x8a\xf3\xc4\xe6\x46\xd4\xc8\xe7\xe4\x6e\xcc\x33"
- "\xcd\x34\xe4\xac\xa7\x6d\x90\x8a\x0a\xf2\xf2\x2c\xfc\x23\x4e\xa8"
- "\x1f\x18\xc7\xf3\x43\x3e\x88\x3d\xa7\x5f\x7b\xec\x15\x31\x7f\x85"
- "\xf4\x82\xf4\xdd\x45\xfa\xde\x5c\xf2\x25\xef\xdb\x38\xca\xee\x03"
- "\x87\x97\x95\x91\xff\xcf\x6d\x1f\x95\x5f\xef\x16\xed\x00\xd6\x27"
- "\xb5\x91\x1e\xdb\x51\x4b\x28\xbf\x8e\x96\x85\xea\xf2\xd1\xf2\xf0"
- "\x76\xe2\xe8\xbd\xdc\x4e\x94\x0b\xb9\x20\xfb\x44\x73\xff\x09\x2f"
- "\xa6\x69\x51\xe0\x3c\x1f\xb0\x51\x47\x9d\xb2\x8d\x12\xed\xc4\x6b"
- "\x1a\x6c\x83\xca\xa5\xbc\x7c\x01\xb9\x79\xad\x44\xc8\xcd\x6b\xd8"
- "\xff\xfb\xc7\x7d\x72\x5f\x47\xb4\x1d\xaf\x3a\xc9\x7f\x14\xe7\x6b"
- "\xbf\x96\x28\xe3\xab\x8a\xa5\x76\xe3\xb5\x94\xc1\xfe\xc3\xd1\x1e"
- "\xf2\x1f\x68\x5e\x22\xf1\x82\x9f\x27\xcc\xf5\xe6\xb5\x82\x20\xfb"
- "\xa3\xc3\xf7\x92\x70\x75\xbd\x8e\x9a\xe3\x59\xf4\xb9\x6d\x56\xee"
- "\xe6\xe2\xf9\xb4\x45\x55\x9e\xd5\x92\x97\x5b\x9c\x67\x52\x7e\x67"
- "\x33\xca\xbe\x18\x7d\xe3\xae\x42\xbd\x77\xc5\x10\x3f\x5e\xc3\xf2"
- "\x1f\xf3\xc9\x65\xe0\x76\x0a\x7d\x47\xc9\xc6\x45\x5d\x84\x63\x1f"
- "\x8b\xb3\xc4\x5f\xf3\xc9\x72\x42\x70\x0b\xad\xcc\xef\xb1\x55\x63"
- "\xf9\x8f\x6a\xa5\xfe\x16\xf6\x69\xab\x0d\xf2\x7b\x20\x7d\x75\x1e"
- "\x6f\xfb\x8e\xf2\x39\x7d\xc8\xd3\xea\xae\x20\x7f\x8b\xde\xcf\x48"
- "\xef\x7c\x1f\x26\x71\x2e\x7a\xf5\x0e\xc1\xdf\x6a\xac\xff\x57\x25"
- "\x5b\x71\xac\x55\xe0\x01\x78\x6b\xb7\x2b\xb2\x8e\x8f\xef\x57\x97"
- "\xcb\xf9\x61\xfa\x0b\xc1\x79\x52\xbb\xa5\xc4\xe7\x84\x6a\xbe\x3e"
- "\x64\x2f\xdf\x43\xae\xfa\x6c\x18\x5a\xd3\x83\xe1\x10\x06\xfb\xbf"
- "\xaf\xd6\xc8\x65\x5e\x65\xa5\xb0\x63\x9a\x9b\x94\xb1\x47\x94\xf1"
- "\x58\x19\xc9\x16\xe5\x4f\xf2\x2f\xd1\x60\x92\xf6\x25\x71\xd2\xf9"
- "\x8d\x44\x3f\xdf\x1f\x4d\x4f\x7a\x7d\x0c\xfb\xbf\x15\x67\xe5\x72"
- "\x50\x19\x4f\xef\x76\x69\xe4\x7d\xa9\x44\xfa\x63\xf3\x43\x69\x3b"
- "\x76\x30\x28\x4d\xb7\x7d\x1a\x8d\xdd\x1f\x9b\xc1\x6c\xaf\x1d\x20"
- "\x39\xa4\xfd\xaa\xaa\x06\xe4\xf0\x58\xd3\x60\xb9\x3b\x96\x40\x72"
- "\x17\x2c\x4b\xf9\xf7\xe5\xa2\x24\x15\xe5\x15\xcf\xe3\xde\x3d\x3a"
- "\x76\xb4\xed\x59\x4e\x71\xfe\x96\xcd\x45\x33\x0d\x45\xa6\x1c\x49"
- "\xe9\x43\x74\xde\xc6\xfb\xfe\x6e\x59\xcf\x3c\xb6\xd7\x13\x02\xb6"
- "\xe5\xf5\x80\xfc\xd3\x1c\xad\x69\x34\x36\xfb\xfa\x0e\xa1\x4f\xaf"
- "\x2f\x0d\xd2\x5d\x9e\x9e\x74\xb4\x8e\xfb\x6c\xaf\x07\xb7\xff\x6e"
- "\xe4\xe9\x88\x2b\xf0\xfa\x18\x89\xa7\x6e\xc1\xe3\xd7\x7f\xc5\xcb"
- "\xc9\xf7\xe3\x3a\x76\x9e\xca\xc9\xf7\x7f\xe1\xfe\xd9\xeb\x27\xe5"
- "\xf2\x06\xfa\x0d\xaf\xdb\xb9\x1f\x25\xf9\x6b\xb7\xea\xd7\x0b\xff"
- "\xf4\x8d\x2c\x69\xec\xad\x43\xee\xe3\xc9\xfe\x35\xd2\x62\x12\xbe"
- "\xea\x1b\x63\x56\x94\xb0\xbe\xb5\x56\xda\xa7\x8e\xea\xe0\x8d\x87"
- "\x64\xdf\x92\xcf\xdf\xab\xd8\x95\xe6\xb1\xbd\x91\x14\x6c\x27\x58"
- "\xc4\xc6\x0e\xc9\x47\x4c\x13\x7d\xd7\xdb\x7e\xde\x89\x79\xd1\xb7"
- "\x87\x9b\xd0\x86\xe5\x7a\x03\xed\xdf\xbb\xa7\x09\x0f\xf9\xd7\xac"
- "\x57\x2f\x9d\x55\x59\xc3\xbf\xe1\xd5\x22\x6e\x17\xd6\x2d\xc2\xa1"
- "\xff\xf7\x3a\x97\x0d\x3f\xca\x28\xcd\xdd\x71\xcb\x3e\x12\xbc\xf1"
- "\x29\xb5\x45\xf8\x8c\x72\x5b\x63\x14\x32\x55\x63\x74\x15\x19\xa1"
- "\xb7\x57\xaf\xee\x2d\xca\xd4\xd0\x78\x01\xf1\xc2\x51\xe3\x05\x21"
- "\x3f\x6f\x78\xd1\xe6\x9d\x0c\xc6\x27\xe1\x22\x9e\x6a\x88\x0e\x56"
- "\xa4\x57\x93\x7c\x93\xbc\xb2\x5e\x23\xfa\x09\x6f\xd8\x59\x91\x51"
- "\x3d\xc4\xde\x5b\x37\x2b\x67\x14\x9d\xf7\x48\x67\x80\x92\xbd\x12"
- "\xfb\xfb\x1f\xdf\xff\x8a\x18\x1b\x90\xf2\xad\x79\x89\xa9\x4f\xf0"
- "\x76\xe5\x30\x6f\x57\x18\x88\xfd\xd2\x6b\x4e\xf2\x79\xb4\x96\x13"
- "\xfc\xcc\x57\x69\x7d\xb6\xab\xc5\xe2\xe3\x67\xd5\x95\x16\x93\x9f"
- "\xe6\xa3\xef\x46\x7c\xfd\x71\x73\xb1\x0f\x56\x79\x49\x26\x6b\x3a"
- "\x68\xaf\x78\x71\x16\x78\x4d\x97\xbc\x3f\x3c\x9d\x21\x49\xe7\x9f"
- "\x62\xb9\x22\x02\xe7\x97\x1e\x3f\x43\xe3\xb6\xa2\x3f\xae\x87\xc3"
- "\xe8\xd3\x8b\x3a\x38\x3e\x8b\xce\xe2\x13\x7d\x85\x4e\xac\x97\x88"
- "\xbf\x20\xec\x22\xf1\x0d\x59\xb6\x13\xc7\xdf\xa3\xb9\xe9\x4e\x09"
- "\x87\xc7\x76\x1c\xdb\xff\x37\xcc\x22\x2f\xc4\xe7\x91\xeb\xf3\xf8"
- "\xac\xc1\xe3\x1b\x01\x7c\x98\x7e\xa6\xe4\x17\x80\x18\xfb\xfa\x80"
- "\x70\xd5\xc8\x63\x5f\x01\xdf\xe7\x78\xa3\x3c\xf6\x25\xf6\x9e\xae"
- "\x29\xa6\xfc\x87\x1a\x23\x62\xa5\x4f\x92\xdc\x6b\xc9\x87\x1b\xd2"
- "\x9f\xc0\xf6\x9d\x68\x97\xfd\x42\x51\x3f\xb5\x4b\xc8\x3f\xa4\x33"
- "\x57\x65\x5f\x52\xf8\x00\xb5\x19\xa2\x2d\xab\x4d\x92\xdb\x32\x4c"
- "\x7b\x5a\xb2\x15\x52\x3b\x57\x3b\xd0\xff\x0d\x3f\x2f\xbf\xb6\x58"
- "\xe6\x91\xcc\x73\xc1\xa3\xda\xb6\xde\xd8\xc2\xf2\x00\x6f\x6b\xdb"
- "\x38\xaf\x07\xe2\xeb\x22\x83\x78\x4f\xef\x1a\x61\x37\x6b\xb1\xfd"
- "\xaf\x99\x2b\xda\x14\x11\xc6\x62\x1b\x37\xf2\x73\xdb\x39\x0f\xf2"
- "\xf9\xd8\x8c\xab\xd4\x48\xb4\xb9\x9c\xaa\x44\x83\xb0\x65\xb5\x08"
- "\x7f\x5c\xea\x93\xd5\x56\x13\x2d\xc1\xf4\xae\xde\xbc\x71\xf3\x96"
- "\xed\x9b\x69\x40\x6d\x6b\x91\x21\x77\x8b\x29\x6f\x64\x98\xf1\x10"
- "\x3d\x9d\x6b\xed\xae\x1a\xd8\x77\xea\x4d\x2d\xcd\xa3\x17\x67\x16"
- "\xbc\x39\xc2\x70\x07\xc9\x57\xdd\x26\x1a\x2b\xe0\x67\x47\xd0\x1e"
- "\xab\x62\xdc\xa0\x9b\xd2\x0b\x5e\x9f\xb8\xd6\xbb\xdd\x2c\xf9\x58"
- "\x27\x7e\x4a\x7c\x94\xfa\x1c\x0c\xcb\xf8\x85\xdc\x0e\x11\x7d\xdc"
- "\x37\xef\x33\x72\xbb\xe8\xef\x33\x6b\x38\xbf\xfa\x8c\xd8\xde\xd4"
- "\xb5\x3a\x55\xb3\x7d\xa2\x5c\x75\xe7\x65\x7e\x50\xf9\x3d\x74\xd6"
- "\x26\xcb\x47\x19\x7d\x53\x2b\xe1\x22\xfb\x49\xb8\x6b\xe4\x79\xdc"
- "\xb4\x97\xa8\x7d\x1b\xed\x23\x5c\xff\xa9\xbf\x82\xec\x4d\xbd\x5e"
- "\xb6\x4b\xd4\x16\xf9\x11\xcf\xbb\xd7\x5d\x91\xa8\x37\x0f\x61\xda"
- "\xb1\x9d\x70\xc2\x24\xce\x1b\xa8\x4f\x0d\x3d\x6f\xe0\x84\x01\x2f"
- "\x93\x74\xed\x0b\x7a\xbe\xd9\x25\xa7\x49\x0f\x84\xd5\xd7\x2b\x60"
- "\xf6\x21\x4d\xa7\x06\xfc\x15\xb1\x9f\xa9\xb4\xff\x31\x9d\x9d\x51"
- "\xff\x05\xed\x19\x1a\x90\x8d\xfa\x51\x92\x0f\xd2\x4d\xbc\xa3\xf6"
- "\xb6\x0b\x4e\x88\xbd\x4c\x2a\x51\x36\x58\x26\x50\x99\x98\x27\x1f"
- "\x65\xe2\x84\x26\x20\x07\x82\x47\x18\xa6\x0f\xf8\x29\xf5\x3d\x94"
- "\x26\x98\x0f\x98\xc7\x43\xa2\x6f\x7a\x22\x45\x6e\xb3\x69\xbf\x54"
- "\x71\xfe\x44\xfd\xa9\xd3\xbb\xbb\xb1\xcf\x7f\x22\x2b\x08\xc7\x29"
- "\x69\x2c\x42\xc3\xd4\x75\xba\x3a\xde\x67\x3b\x51\x12\x18\x13\xa8"
- "\x3f\x45\x76\x97\xe3\x88\x6d\xb4\x38\xdc\xfc\xcc\x68\x95\x7c\x46"
- "\x3c\xc2\x9e\x94\x7d\x14\x19\x57\x8b\x18\x73\xe2\x7b\x5c\xa2\x0e"
- "\x96\x23\xcc\xd9\x81\xf1\x58\x0c\x1b\xe8\x03\x5a\x51\x8f\xb9\xef"
- "\x7d\xa2\x27\xd0\xd7\xab\xe3\xfb\x0a\xf0\x7e\xa0\xc0\xa3\x75\xc2"
- "\x09\xa7\xb2\xdf\x86\xfe\x83\x21\x7f\x73\x3e\xba\x0f\x1b\x2c\x5b"
- "\xe6\x63\xd7\x61\x83\x25\x7f\x3e\x4d\xf9\x5a\x96\xba\x84\xdf\x51"
- "\x39\xe6\x87\x19\x3f\xa6\x71\x6f\x7e\x2e\x33\x8d\x19\x61\x3f\x97"
- "\xc6\x4e\x3d\xe2\xac\xd4\xe1\xd2\x5d\x2b\xdd\x87\x61\xbb\x67\x41"
- "\x5d\x39\x44\x67\xdf\x20\xff\xeb\xfd\x36\x71\xce\xab\xd4\x66\xa3"
- "\x2d\x7f\x73\xbf\xfc\xbd\x8c\xcf\x81\xa7\x7d\x0c\x7b\xcd\x7c\x3c"
- "\xce\x63\x7b\x73\x60\xfc\x43\x8c\x2f\x8a\x6f\x6e\x18\xde\x21\x87"
- "\xcb\xe3\xb1\x18\xd6\x23\x8f\xbd\x0a\xd8\x37\x7d\x81\xb4\x21\x63"
- "\xdb\x71\xf2\xf7\x38\x8f\xed\x2d\x83\xcc\x33\x19\x4f\xa9\x81\x5d"
- "\x91\xfc\xa4\x08\xee\x57\xdb\xde\x8c\xe3\x7b\x87\x92\x2f\xce\xc7"
- "\x99\xdf\xca\x90\xf3\xa1\x3e\x02\xd1\x2d\x7d\xfb\xe1\x7a\x4f\x7b"
- "\x84\x8a\x3d\x46\xdf\x1a\xa8\x7f\x05\xcf\x8d\xdf\xbb\x8b\x8f\xcb"
- "\x1b\x8b\xd0\x3f\xbb\x4b\x31\x0e\x47\x32\x34\xa7\x0a\x46\xf0\x31"
- "\x26\xd1\x4f\x8f\x24\x1f\x01\xcb\x70\x02\xeb\x33\x82\x6c\xb9\x68"
- "\xf7\xde\xba\x30\xd0\xc6\xeb\x1a\xcd\x2c\xb6\xf0\x20\xed\x33\x2f"
- "\xd6\x2d\xbc\xf5\x15\xc9\x9b\x6b\xdc\x46\x0f\xa3\x39\xca\xaf\xad"
- "\xf1\x88\x71\xf8\x86\xfb\x03\x63\x66\x6f\x1d\x90\xf6\x44\xa5\xf9"
- "\x6f\x58\x5f\x0d\x33\x07\x7c\x4e\x84\xe7\xbe\x17\xe2\xa4\x35\x0a"
- "\x94\xff\x37\xf8\xce\x83\xfd\xfe\xff\xad\x15\x7a\xda\x60\xe7\x38"
- "\xd0\x56\x8b\x75\x00\x0d\xe8\xff\xbf\x55\x23\xda\x06\xc2\x9d\x09"
- "\xbd\xb1\x9f\xba\x7a\x6d\x9f\xcc\x24\x1e\xba\x63\xaf\x24\x8a\x3d"
- "\x88\x1b\x7e\xe5\xb6\x69\xb0\x4e\x1b\xb0\xfe\xff\x61\x50\x5f\x57"
- "\xce\xab\x6f\x1b\x6b\xf1\x5d\x67\x4d\x87\x7f\x8f\x76\x6e\x3d\x80"
- "\x6f\x1b\x6b\xec\xbb\xce\x4e\xf3\x33\xc8\xd7\x01\x1c\xfa\x13\x40"
- "\x7f\xc4\x9a\x2f\x6e\xa0\xac\x2e\xbf\xe6\xbf\x42\xe7\x05\xd6\x21"
- "\xdc\x72\xf7\x55\x56\x8b\x69\x96\x5b\xd8\x95\x5a\x84\x5b\x76\xf9"
- "\x0a\x3b\x8e\xb0\xcb\xcc\x28\x2b\xdb\x98\xaf\x3f\x62\xe3\x17\x86"
- "\xc7\xc9\x76\xbf\x9d\xea\xaa\xd8\x51\xc3\x6c\xea\x23\x6c\xef\x3d"
- "\x77\x7b\x6c\x6f\xa7\x0f\x9c\x53\x86\x78\x49\xae\x56\x58\xe9\x79"
- "\xe3\x17\x28\x07\x5f\xac\x45\xbf\x03\xe5\xf6\x0b\x84\xa3\xef\x3f"
- "\x7c\x6d\x96\x2b\xe2\xee\x58\xbc\x8c\x61\xe9\xbf\xce\x5a\xfa\xb7"
- "\xb1\xa6\x23\xcf\x20\xfd\x97\x90\xfe\xeb\xac\x11\xcb\x70\xfa\xf0"
- "\x45\x00\xa2\xbf\x9f\x70\xf6\x43\xc4\xda\x1d\xaa\x98\x3a\x8c\x5f"
- "\x6b\xd5\x41\x1d\xc2\x3e\xe3\x86\x98\x5a\x84\x79\xe6\xb9\x18\xe0"
- "\xf4\xf7\x20\xdd\x31\x3b\x6a\xfa\x31\x6f\xa2\x1f\xf3\xf7\xca\x74"
- "\xca\xf9\x13\xbd\xb2\xde\xae\xa5\x31\xc2\xd8\xc2\xf3\x44\xb7\xf8"
- "\xee\xf1\x77\x39\xae\x22\xac\xe7\x88\x7b\xee\x16\x7d\xec\xbf\x4b"
- "\x92\xe9\x0f\xfd\x0e\xf6\x77\x65\xc2\x7e\xfe\x1d\xf6\x7f\x1a\xa4"
- "\x33\x5d\x44\x18\x95\xdf\x85\x7a\x2b\xad\xfd\xfb\x42\xe6\x19\xc6"
- "\xcf\x54\x7e\xe7\x4a\xdf\x52\xc8\xc7\xa8\x73\x72\x8b\xf3\xb7\xe5"
- "\x60\xcf\x77\x24\x58\x28\x88\xf7\x8d\xf3\x4c\x86\x2d\x9b\x0d\xeb"
- "\x73\xf2\x0b\xb6\x6c\xcb\x2b\x9c\xc9\x87\x33\x8a\xf2\x36\x9b\x68"
- "\xe8\xba\x30\xa7\xd0\x32\x52\xd1\x9f\x29\xdf\x51\xd3\x4e\x67\xd0"
- "\xec\x26\xf9\x7e\xe7\x63\x69\xdc\xd6\xcb\x6c\x29\xbc\x5f\x2c\x6c"
- "\xcc\x4f\xee\x37\xec\x4c\xa1\xf8\xf7\x44\x3b\xfe\x4e\x2b\xab\x2c"
- "\xfc\x94\x31\x7e\xb6\xb6\xea\x0a\xbc\xf3\x33\xce\x8f\xde\x34\x19"
- "\x0f\xef\xbb\x92\xcc\x5a\x76\x92\x1f\xf6\x93\x2c\x46\xf1\x21\xbc"
- "\x78\xe7\x90\xf0\x45\x30\xbc\x2f\x0d\x02\xf3\xed\xdf\xf9\x98\xa9"
- "\xb1\xec\xc8\x4b\xa9\xcf\x60\x95\xd6\x3d\xfe\xba\x13\xde\xa1\xbe"
- "\x14\x7d\xb7\x39\xc7\x7d\x72\xbe\x3e\xeb\x9d\x7c\xec\x73\x58\x99"
- "\x6d\x58\x14\xf1\xeb\xb0\xe8\xd3\xab\xa3\x55\x74\x76\x6e\x27\xad"
- "\x15\x4d\xa4\xef\xbb\x75\x36\x7f\x62\x60\x7e\xd3\xdf\x1d\xa4\xfe"
- "\x05\xff\xce\xc1\x6d\xd2\x4f\xba\x65\xdd\x55\xd3\xfa\x9b\xbd\x13"
- "\xe6\x09\xfd\xfb\xc9\x65\x82\xc7\xfa\x9f\x27\xca\xc7\xcf\x01\x47"
- "\xdf\xe0\x9d\x48\x2c\xff\xff\x66\xa5\x69\xd2\x37\xc9\x77\x22\xfd"
- "\xb1\x5f\x26\xf6\x17\x61\xbf\x40\xf7\x65\x23\xc6\x5d\xf1\x57\x16"
- "\xfe\xa9\x1f\x7d\x2a\x3f\xf6\x13\x58\xe5\x97\xff\xd2\x5f\x59\xd8"
- "\xe1\xdf\x6e\x54\x53\xdb\x5a\x6a\x45\xfe\x6e\x31\x8f\x64\x57\xcd"
- "\xb7\xf5\x6f\x37\xa2\xff\x55\xe8\x64\x0c\xd3\xc6\x16\xba\xf8\x79"
- "\xc5\x95\x85\x9d\xd2\xfb\xff\x43\xdc\xfb\x80\x47\x59\x5c\xfb\xe3"
- "\xf3\x6e\x96\x10\x31\x64\x37\x31\xe0\x0a\x41\x16\x0d\x36\xb5\xfc"
- "\x89\x8a\x2d\x7a\xb1\x46\x81\x8a\xbd\x68\x52\x8b\xf7\xa6\xb7\xd8"
- "\x04\x4d\x6c\xb0\x31\xac\xc9\x02\x9b\x18\x36\x7f\xe0\xa6\xb4\x85"
- "\x64\xc1\xc0\x45\x09\x90\xf6\x62\x2f\x52\x84\x50\xb1\x8d\xbd\x28"
- "\xab\x44\x1b\x35\x64\xa3\x45\x8c\x8a\x75\x89\x01\x23\x0d\x61\x25"
- "\x0b\x59\x92\xdd\x77\xbe\x9f\x33\xf3\xbe\xd9\x0d\x26\xb4\xdc\x7b"
- "\x9f\xdf\x2f\xcf\xb3\x79\xdf\x99\x77\xfe\x9e\x99\x39\x73\xce\x99"
- "\x33\xe7\x9c\xa3\xb0\x0a\x3a\x19\x71\x01\x84\xfb\x55\x1e\x91\x7e"
- "\x68\xda\x20\x85\x4d\x8a\xd0\xab\x4c\x05\x5f\x32\x87\xfa\xae\xf7"
- "\x59\xf0\x67\x24\x23\x1a\xec\xdb\x0b\x4c\x8f\x27\xbe\x41\xd2\xf0"
- "\xec\x31\xc0\x58\xda\xb2\x18\x4c\xb7\xeb\x23\x1d\x06\xd2\x3f\x77"
- "\x21\xe8\xa7\x17\x9a\x55\xf2\x8d\xbe\x7a\xe2\xcd\xdc\xf0\xdb\x1d"
- "\x84\xb3\xd2\x43\x02\x17\x32\x79\xee\xf4\xc2\x6c\x1d\x9e\x74\x8f"
- "\x80\x70\x29\xc6\x2d\x25\xcb\xc7\xc6\x48\x3c\xf0\x42\x66\x04\x7f"
- "\xd8\x4d\x63\xed\x65\xbb\x34\x3b\x5b\x31\xab\x65\xf8\xbf\x76\xc9"
- "\xb5\xf2\xc2\x1a\x3d\x2d\xe2\xa4\xbd\x1f\x57\xd1\x81\x95\x41\x36"
- "\xc1\xf6\x5d\x7e\x0a\x63\x94\xa9\xa5\xdb\x13\x5e\x53\x72\xbe\xe1"
- "\x39\x9b\xf8\x6b\x3a\x7f\xa4\xf7\xed\x23\xdc\x85\x75\xd6\x71\x4e"
- "\xfb\x15\xed\x9f\xd6\x09\x8c\xb5\xfa\x89\xb7\xda\x1d\x73\xb8\xce"
- "\xcf\xc4\x38\x27\x14\x7e\xd0\xcb\xf3\x18\x68\xca\x61\x79\x09\xca"
- "\x83\xf4\xf3\x04\x9f\x84\x75\xa1\x62\x5d\x20\xcf\x31\x9a\xd7\xce"
- "\xf3\xc4\xbf\xec\x5e\xd3\x54\xda\x45\xb6\xfa\x31\x5f\x77\xaf\x21"
- "\x18\xd2\x3a\xa8\xae\x14\xf7\x20\xc5\x3e\xe9\x5e\x31\x8b\xca\x78"
- "\x2a\x2e\xc0\x8c\xad\xd8\x21\x30\x2e\x01\x9b\x93\xc5\x9f\x46\x7a"
- "\xa3\x9d\xc5\x10\x0f\x3b\x74\x0f\x19\x7e\xff\xe8\x35\xaf\xda\xd5"
- "\xbb\x71\x55\x79\x5f\xe5\xee\x83\xc0\xfd\x23\xda\x4f\x5c\x3d\x1e"
- "\x74\x0d\xd2\xb9\x26\xd0\x59\xf5\xee\xae\xcb\xa5\xd5\xef\xe6\xd2"
- "\x5c\x99\x69\x21\x79\xca\xaa\x5d\xe2\xcc\x3b\x61\x55\xb9\x94\x5b"
- "\xfe\x2e\x45\xcf\x4f\x72\x4f\xd2\x2b\xa8\xe9\x67\x96\x9a\x41\x5e"
- "\xf1\x77\x19\x72\x8c\x7e\x97\xa1\xf3\x17\xc3\xd5\x63\xdf\xc9\xd5"
- "\xb2\xa9\xcc\xe0\xb1\xfa\xd8\x8c\x00\x8b\xdd\xfe\x1c\x63\xae\x12"
- "\x1e\x78\xa6\x04\xf3\x08\x30\xe6\x86\xdd\xcd\xa4\x7f\xb1\x03\x7b"
- "\x74\xb5\xca\x58\x14\xda\xf2\xcc\x05\xd4\xe9\x94\xe9\xb8\xb4\xab"
- "\x66\x41\x3a\x3f\x9e\x89\xc0\x23\xac\xd6\xc9\x62\x6a\x55\x66\x74"
- "\x39\x59\x12\xe2\x40\x57\xfc\xee\xa8\xce\x0b\x0c\x7b\x2e\xbc\x1d"
- "\xf8\x11\xf5\x56\x38\x79\xf0\x0d\xf0\x77\x95\x2a\x0f\xfc\x23\x70"
- "\xf7\xb2\x3d\xb3\x64\x1f\xf7\xcc\xd2\x79\x03\xbc\xa7\x0d\xbd\x63"
- "\xbd\x27\xe5\xd2\x33\xe6\x47\x97\x2d\xb3\x67\x15\xe6\xd2\x23\x65"
- "\xea\xf2\x6f\x5e\x4a\x2b\xc6\x4a\x7f\x54\x7b\x32\x69\x6d\x11\xfd"
- "\x24\xef\x2a\xed\xd9\x12\x21\xef\x21\x99\xf3\xdd\x44\xf7\x91\xae"
- "\x09\xbe\x1d\x78\x5d\x5c\x1d\x60\xca\x89\x18\x66\xb8\xb4\xbe\xc7"
- "\x97\xd8\x97\xe4\xdf\x29\xd5\x1a\x86\xa9\xa7\x79\x68\x3d\x2f\x0e"
- "\x9e\xff\x6a\xbc\xb9\x5f\xe0\xc7\x0d\xe7\xea\x79\xfc\x87\x69\x72"
- "\xaf\x7b\x31\x59\xd7\x1d\x1c\xde\xa6\x4b\xd1\xc2\xd0\xc6\xfd\x6e"
- "\x5a\x23\x65\xab\x98\xe1\xa5\x92\x76\x03\xf1\x25\x4e\xbc\x93\x2e"
- "\x97\x90\x7f\x6b\xbe\x22\x5f\x3b\xd7\x8e\xbd\xf4\x45\x07\xdf\x50"
- "\xb4\x10\x6b\xde\x36\x92\xfe\x56\xe4\x7d\x78\x79\x76\xff\xa2\xeb"
- "\x32\xba\x5e\x22\xbd\xae\xa7\x31\x34\xdf\xde\x51\x72\xcc\x5e\xc4"
- "\xfc\xdf\x5d\xaf\xcf\x5f\x3d\x4d\xcd\x78\xdd\x07\xe7\x8b\x23\xda"
- "\x41\xe6\xae\x55\x0d\x72\x8e\xef\x9d\x2f\xce\xa8\x27\xb0\x9f\x77"
- "\xb0\xbd\xf7\x18\x2d\xcc\x82\xf7\xff\xc2\xbb\x90\x61\xd0\xb7\x21"
- "\xf3\x68\x52\x77\xbd\x11\x18\x07\x98\x47\xe1\xf2\x0f\x84\x9f\xfc"
- "\x8b\xc2\xcf\xc0\x15\x71\x6b\x25\x0a\x23\x38\x3a\xda\xc8\x4c\x71"
- "\xb1\x31\x93\xaf\x4f\xb2\xdc\xfd\xdd\x39\xb3\xcb\x9c\xa5\x0e\xae"
- "\x06\x03\x26\x1e\xe9\x37\xf5\x58\xd7\xc3\xdf\x2c\x97\xf4\xc3\x86"
- "\x63\xc3\x9e\xa9\xaf\xaf\xe4\x36\xe2\x69\xd5\x84\x1e\x73\xd9\x72"
- "\x66\xd8\xd7\xef\x35\x10\x0f\x45\x34\x8c\x27\xf8\x29\x78\xf1\xbd"
- "\xef\x1d\x42\x1c\xe0\xe5\xe0\xae\x1e\xb3\xbc\x93\xb4\x2f\x5e\xdd"
- "\xd8\x63\x0e\x97\x6f\x64\x54\x3e\xf8\x74\xc3\x4e\x67\x97\xc1\x63"
- "\xfc\x2e\xf3\x58\xfd\xec\x10\xde\x87\x1d\x2b\xd4\x49\x32\x61\x2a"
- "\x03\x7b\xf0\xda\xb2\x8b\xd8\x9b\x1d\xe2\x7c\xc6\xd0\xc3\xf6\xdd"
- "\xdf\x30\x42\x3e\x71\xc6\x9a\x50\xfc\x60\x5f\xe5\x3e\xe0\xff\x47"
- "\x93\x35\x3e\x04\x7c\xd2\xbe\x5a\x7d\x3f\xc0\xf7\x07\xe4\x39\xd1"
- "\xbe\x5d\x7a\x9a\x61\xc7\xe8\x97\xa4\xeb\xcc\xdd\x34\x0f\xf8\x85"
- "\xae\x2e\xb2\xbd\x38\xc2\x5c\x99\x07\x1a\x25\x97\x70\xf3\xd8\x0a"
- "\x73\x74\x5c\x45\xea\x93\x2d\xa0\x8d\xc6\x76\x8f\x63\x71\xfe\x47"
- "\xa8\xcd\xa4\x6f\xdf\xb6\x0d\x3c\x27\x9d\x0f\x9b\x94\xd4\xa5\xa6"
- "\x8a\xd4\x25\xa1\xca\x39\xb7\x11\x0d\x65\x72\xdc\xaf\x98\x82\xf7"
- "\x28\xc1\xca\x59\xb7\xed\x90\xbe\x8a\xfc\xae\xf1\xbc\x1d\x79\x8e"
- "\x23\x8f\x17\xbf\x4e\xe4\x6b\x39\xc5\x1a\x96\xe2\xd9\x6c\x52\xf8"
- "\x0e\x13\x46\x72\x66\xb9\xf0\xdd\x4a\xfb\x73\x0b\x4f\x00\x6f\x37"
- "\x20\x64\x70\xa3\xc2\x32\xb8\x86\x75\x18\xb7\xe8\x85\xff\xce\x0f"
- "\xa1\xac\xe6\xd0\x05\xb5\x79\x7b\x0f\xe1\x43\xc1\x57\x1d\x05\x0e"
- "\x38\x3a\xad\x96\x59\x34\x9d\x69\x43\x4b\xb0\x99\xf6\x61\xb2\x39"
- "\xd0\x84\x3a\x0f\xe2\xd7\x68\x2d\x60\x51\x3d\xac\xe1\x53\x5d\xe7"
- "\x4a\xd2\x75\xbf\x7f\x58\x93\x03\xb8\x67\x20\xff\xaa\x27\x69\x4e"
- "\x74\x19\x82\x28\x1f\xbc\x76\xb3\x27\xaf\x59\xe8\xb0\xd1\x9d\x04"
- "\x4a\x83\x3a\x52\x3c\x81\x66\xa6\x72\x8b\x01\xe1\x46\xba\x5f\xc0"
- "\x91\xb6\xd5\xd1\xce\x5a\x6d\x01\xec\x9b\x2d\xe0\x3d\x53\x92\xd1"
- "\x1e\x51\x1e\xbe\x1f\xdd\x87\xf1\xb5\x82\x67\x40\x79\x6d\xa4\x13"
- "\x47\x77\xf7\x79\x51\xca\x4d\xc8\xdf\xc4\x07\x2c\x06\x2a\xbf\x87"
- "\xed\x3f\xc9\x7b\x53\x52\x66\x76\x4b\x5f\xa6\x1d\x6c\xff\x41\xb4"
- "\xf3\xf1\x88\x76\xce\x47\xfb\x8d\xd8\x2b\xdd\x28\xf3\x20\x5f\x81"
- "\x3a\x3b\x51\xa7\xdf\x47\xfa\x9f\xc9\x7c\xa5\xc5\x48\x6d\x6e\xa5"
- "\xf6\x3a\x42\x8c\xaf\x4c\x31\xd6\x9c\x63\x46\xac\x05\xf7\x0e\x3c"
- "\xd1\xff\x03\xa0\xeb\x93\xfa\x2a\xf7\x0f\xda\x7f\x20\x3a\x12\x61"
- "\xaf\x3e\x97\xd6\x23\x0d\xda\xd8\x88\x76\x1d\x1c\xdb\xcd\x48\xb6"
- "\x30\x0a\xf3\x74\x14\xea\x1d\x8d\xb1\x6a\x04\xec\x5e\x07\xac\x0f"
- "\x52\x9f\xd4\x0b\x6a\x97\x8a\xf2\x6a\x2e\xa0\x4d\x45\x16\x63\x6c"
- "\x27\xf9\x79\xef\xe3\x80\xf7\xd1\x74\x47\x1f\x27\x7d\x71\xd2\xbd"
- "\x46\x9e\x6d\xe8\xab\xd1\xcb\x7e\x5f\x4a\x7c\xfe\x29\xb6\x7f\x8d"
- "\xf4\xc5\xba\x7f\xad\x76\x96\x7c\x54\xca\x77\x1b\x3e\x25\xd8\x53"
- "\xbf\x62\x2b\xcc\x55\x9e\x2e\x1f\x8b\xed\x1c\x07\x9a\x65\x3f\xab"
- "\x53\x89\x3e\xfd\xfd\x5a\xbd\x9d\x23\xac\xb1\x80\x07\xf8\x45\xbd"
- "\xc0\xbb\x88\x7f\x91\x7a\x66\xbf\x3f\x98\xe5\x88\x4a\x03\xaf\x62"
- "\x40\x3b\xe9\x1e\xd3\x78\xd0\x68\x77\x93\x1e\x22\xda\x87\x3d\xfb"
- "\xf7\xc7\x2f\xe7\x03\x19\xf0\x01\x5d\xf0\x12\xda\xf0\x7b\x21\x4f"
- "\x25\x1f\xb1\x52\xc6\xfa\x52\xa2\x6e\x87\x83\x5f\xe0\xa5\xb4\xf7"
- "\xa2\xde\xf2\x35\x2b\x44\x1d\xe4\x17\xb7\xcb\x6e\xe5\x27\x9a\xac"
- "\xbe\x11\x6d\x1d\x44\xe8\xcf\xf9\x34\x5f\x7b\x42\x97\x60\xa8\xfe"
- "\xdc\x4b\xa5\x11\xf2\x1a\xd2\x27\x28\x27\x9d\x09\x69\x2f\xe9\x25"
- "\xa1\x13\x98\xee\x90\x76\x61\x3c\x81\x6e\x8d\xef\x78\xe9\x6d\xe1"
- "\x7f\x8b\x68\x5a\xa1\x73\x77\x5a\xd3\x93\x7b\x69\x09\xd5\xd1\x74"
- "\x89\x8f\xef\xdc\x82\x25\x8f\xe6\xe7\x4a\x11\xe6\xf4\x27\xec\x4b"
- "\x7e\x3a\x94\x37\x32\x0a\x5e\xbc\xf2\xa5\xa3\xf2\x4c\xe0\x40\x6c"
- "\x04\x8f\x60\x1c\x94\xe9\x1a\xd8\x01\x29\xd7\x3d\x30\x6d\x38\xb9"
- "\xee\xfd\x3f\x2d\x58\x56\x28\xea\x10\x2a\x85\xb9\xf2\x56\xe0\x18"
- "\xf6\xf0\xbc\xfb\xe7\x4d\x2f\xca\xb5\x0b\xa7\x3a\x52\x88\xba\x24"
- "\x27\xa7\x50\x53\x38\x5c\x4a\xb9\xe8\xcb\xe3\x2b\x45\x56\xdb\xcf"
- "\xec\x52\x55\xb1\x28\x7f\xc9\x8a\x5c\xad\x88\xc8\xb6\x26\x11\xbe"
- "\x6c\xaa\x13\xb2\xaa\x31\x52\x3f\xe2\xc0\xc1\x88\xf3\xd4\x48\xf9"
- "\xcd\x75\xf8\x36\x78\xfe\x6f\xbb\x81\xe6\xca\xcb\x4b\x5b\xeb\x85"
- "\x2d\x13\xe3\xe1\xdf\x10\x7c\x5f\x9e\x4f\x7e\x20\xb0\xb7\xb5\x91"
- "\xdf\x62\x4d\xf7\x00\xf8\xfa\xe5\x29\xe0\xb5\x68\xef\x75\xa4\x87"
- "\x54\x0e\x9c\x0a\x3e\xfd\x95\x44\x4d\x26\x12\xa3\x1a\x0e\xcc\x26"
- "\xbd\xb1\xed\x42\x7e\xf7\xf2\x9c\xb0\xfc\xee\x15\xd2\xe9\x89\xc1"
- "\x78\x77\x52\xdb\xa8\x9d\xf8\xbe\x38\x42\x67\xa7\xd3\x0b\x30\x52"
- "\x39\xa4\x5b\x22\x7c\xb4\x80\x26\xd6\xec\x41\x18\x5a\x7f\x43\xfb"
- "\xd0\x1f\xd7\x10\xce\x55\x5d\xab\x9a\xe5\x9a\xf9\xc3\x36\xbe\xb1"
- "\x38\x7d\xa6\x9f\x25\x4a\x9c\xf1\x32\xf1\xe2\xd7\xa0\x8d\x4d\x88"
- "\xcf\x00\xde\x19\x45\xb4\x91\x3c\xa3\x7a\xf9\x4b\x4d\x9e\x47\xf0"
- "\x19\x15\xd1\x06\x6f\x58\xe6\xf7\x4a\xa2\x2f\x7e\x55\xf3\x1a\xa9"
- "\x93\x23\xf4\x0f\xa4\x0e\xc8\x1f\x8c\x83\x32\x2e\xd4\xad\x9d\xb9"
- "\x27\x9e\x42\x7a\xc0\xa2\x59\x3b\x07\xa7\xbe\x67\x50\xbf\xa5\x2e"
- "\xe5\x1f\x86\xf0\x3f\xd2\x27\x46\x71\xba\x2a\xf5\x65\xa9\xed\xb9"
- "\x82\x8e\x22\xf9\x62\x3f\xc1\xfb\x0f\xc5\xf8\x8e\xbd\xee\x0f\x36"
- "\x2f\x7b\x69\xb0\x3d\xd4\x66\xbb\x03\xc4\x00\xf2\xd1\xde\x87\x36"
- "\x8d\x46\x9a\xda\x70\x9b\xff\x20\xce\x46\x89\xa7\x94\x34\xc8\x1f"
- "\x63\xa4\x9c\x77\x55\x7b\xc4\xb8\x19\x7b\xd8\x1f\xbe\x44\x5b\xdb"
- "\x57\x4b\xdd\x97\x51\xba\x4e\x09\xca\x1a\xd2\xff\xb0\x0c\xf6\x40"
- "\x81\x94\xc1\xfe\x91\x85\xc7\xf0\x0f\x4d\x34\xef\x49\x6f\x48\xd7"
- "\x19\xa2\xf1\x94\xfe\x42\xfe\x98\xa2\x97\xa3\x26\xac\x6a\x24\x3e"
- "\xb9\x5a\x9e\x7f\x63\x5c\xfe\xb8\x34\x4a\x39\x21\x68\xa9\x99\x01"
- "\x56\x8f\xb8\x68\xc4\x3d\x42\xe9\xa8\x4e\x21\xab\x04\x6c\xa8\x2f"
- "\x2a\x78\xac\x28\x4b\x74\x3a\xca\xc3\xbc\xda\x73\x34\x3c\x37\xfe"
- "\x98\x26\xf0\xa5\x06\x6b\x5e\x79\x60\x75\x98\x77\xff\xe3\xce\x41"
- "\xb9\x1b\xca\x09\xef\x19\x7f\x7c\x9b\x60\x5c\x33\x28\x83\x68\x0c"
- "\x8a\x76\xc8\xf3\xd4\x37\x4e\xb1\xc6\x33\x1c\xf4\x05\xed\xb5\xc4"
- "\x1f\xd2\xd8\x0b\x7a\x4f\xc8\xcf\x1a\x9f\xdf\x2e\xcf\x2c\x36\xe3"
- "\xfd\x05\xd5\x30\xdc\xdc\x69\x4c\x8a\xd4\xef\x95\xf0\x6f\xcc\x51"
- "\xa9\x4c\xf4\x9f\xca\xc2\xfe\xa3\xe8\x72\x4d\xad\xdc\x87\x51\xe6"
- "\x7f\x9c\xd2\x60\x2d\xce\xf2\x36\x6a\x70\xa0\x31\x16\x30\x6f\xb4"
- "\x63\x0e\x08\x9f\x69\x65\xf5\xfc\xcc\x32\x94\x21\x7d\xeb\x36\xd6"
- "\x72\x82\xad\x96\xde\x47\xfc\x37\xda\x2e\xef\x44\x62\x2e\x82\x37"
- "\xa5\x76\xaa\x1b\x57\xb9\xa9\xed\x74\x8e\x17\x96\xa9\x34\xbe\x4d"
- "\x79\x7d\x4f\xcb\x3c\x35\xf2\x9c\x11\x63\xd3\xa8\xf0\x95\x79\x4c"
- "\x3b\xdf\xc2\x3c\xff\x43\x1b\xcd\x7b\x2a\xc7\x2f\x78\xe6\x46\xaf"
- "\x0a\xb8\x60\x4c\x12\xfa\x2a\x5f\x89\xd5\xc7\x04\xe3\xd1\x7c\x19"
- "\x7a\x1b\x63\xf2\xca\x6c\xdd\xb6\x12\xed\x4d\x58\xc3\xe5\x92\x96"
- "\x7c\xe5\xa2\xa9\xe2\x6e\x6e\x0a\xde\x76\x1b\xd1\x46\x3b\x0c\x42"
- "\x16\xaa\xeb\xaf\x4e\x06\x9c\xce\xea\x77\x01\xd4\xd5\x3f\x6e\x27"
- "\xdd\x5f\x4f\x40\xea\xfe\x52\xfc\x83\x7e\xae\xb6\xfa\x43\x74\x17"
- "\xa6\x1d\x75\xd4\xe9\x7c\x16\xe1\xb7\xa8\x0a\x05\xb0\x7b\x85\xee"
- "\x3f\x1e\xd4\xf0\xda\xe8\xd3\xec\x95\x8f\xb4\xf2\x23\xdb\xb0\x48"
- "\x9e\x29\xbe\x12\x90\xb4\xff\x2b\x84\x7b\x6a\x25\xbf\xf6\x8a\x4f"
- "\x6f\x37\xbe\x1f\xbc\xb4\x8f\x19\x73\xef\xcf\xb5\xe6\x13\x8a\x4e"
- "\xbd\xd5\x61\x4d\x99\x9a\x33\x53\x28\x8b\x5b\xbf\x37\xf7\x4e\x6b"
- "\xc6\x5d\x53\x1d\x79\xd3\x1e\x94\x8f\xb9\x19\x0b\xe9\x79\x89\xee"
- "\x80\xb5\xaf\xf2\x4f\x19\x43\xf9\xc1\x43\x5a\x1b\xfe\x94\xe7\x55"
- "\xbe\x2f\x7c\x30\x71\x73\xd1\x5a\xee\x5a\xd2\x8c\x3d\xb5\x9b\xe8"
- "\xe4\xf4\xd0\x67\x9c\x6f\x58\xd2\xcc\xe3\x8b\xd6\xfa\xe2\x8f\x75"
- "\xe1\xd7\xe0\x8b\x2f\xb6\xd7\x00\x07\x9a\x2a\x78\xc0\x14\x1c\x2d"
- "\x71\x25\xc2\xa0\x49\xba\x40\xf7\xd0\x58\xb2\xf9\xdf\x2c\xe3\xe9"
- "\x21\xee\x01\xfd\x03\xb8\xfc\xa9\x59\xdf\xc7\x85\x1c\xd3\x55\xb4"
- "\x36\xdd\xc1\x07\x68\xee\x80\x3e\xa0\xfb\xb4\x6b\x49\x96\x89\x74"
- "\xe8\xff\xbe\x54\x09\x8b\x3f\x11\x0c\xac\x1a\x7c\x33\xfa\x2a\xff"
- "\x1b\xe3\x9f\x2e\x64\xcf\x6a\xa5\x45\xec\x15\xea\xea\x9b\x1f\x02"
- "\x2f\xd0\xa0\x97\x89\xb2\x62\x35\x7f\xcc\xa2\x3c\x16\x61\x9b\xe0"
- "\x72\x3f\x75\xa3\xbd\x8e\xe4\x56\x74\x2f\xd8\xe4\x50\xc8\xff\x56"
- "\xe6\xa0\xac\x0e\xdf\xe2\x2a\xcc\x24\xbf\xcb\x8c\xf3\x2b\xe5\x94"
- "\x26\x2c\xd3\x52\xbd\x35\x06\x35\x00\x7a\xc2\x4c\xf3\x43\xd0\xaa"
- "\x42\x9f\xe2\xbf\x1b\x07\xcf\xe7\x86\x8c\xfd\x7f\x8b\xf9\x70\xae"
- "\xd2\x88\xb9\xfd\xa7\xb4\x1b\x12\x25\xed\xa4\x56\x2a\x4c\xda\x8a"
- "\xf8\xef\x17\xc5\xba\xd4\xe6\x23\xe0\xeb\xa3\xb3\x73\x53\x90\xfb"
- "\xe8\x9e\x8a\x1a\x85\x39\xc9\x4e\x33\x4f\x69\x5f\x39\xdd\x57\x1f"
- "\x9c\x97\x36\xcc\x4b\x1b\xe6\x25\xe9\x39\xa0\x7e\x5f\xd4\xcd\xd9"
- "\x58\xb3\xca\x69\xf6\xdf\xa5\xd4\x7e\x82\x0d\xe8\xf7\x58\x15\xb0"
- "\x12\xfa\xac\x04\x9f\x84\x15\x49\x74\xcf\x90\xfa\x6a\x0a\xa2\xcf"
- "\x91\xfd\x32\xa8\xde\xea\x4a\xf4\xcb\x80\x7e\x39\xce\x08\x59\x10"
- "\xdd\xff\x04\x2e\x19\x1f\xf6\xe1\x72\xb0\x2e\xb2\x8f\x2a\xf9\x7d"
- "\x12\x7d\x38\xf8\xea\x70\x7d\xe4\x06\xea\x23\xc1\xe0\xe0\x06\xed"
- "\x9c\x53\xb4\x93\xf0\x56\x37\x3b\x98\x11\x57\x41\xf7\x2e\x8b\xd6"
- "\x82\xee\x9d\x4b\x63\xb8\xbd\x92\xbb\xa8\x9d\xc3\x8d\x17\x95\x27"
- "\xcb\x7a\x75\xb1\xa9\xa2\x3c\xbb\xaf\xf2\xd5\x94\xe1\xe1\xfd\xea"
- "\xfd\x97\x87\xf7\xab\x93\x28\x3f\xb5\x83\xee\x90\x9a\xc8\xc0\x18"
- "\xe6\x37\xe8\x8a\x61\xeb\x8d\xab\xa8\xa7\x76\x0d\xfb\x0d\x73\xbf"
- "\xbb\xa6\x70\xe8\x9a\x50\xb7\x07\x18\xc1\x8f\xe4\x45\x52\xae\xff"
- "\x6a\xdb\xe0\xf9\x83\xab\xa8\xc1\xa4\x58\xa3\x68\x8d\x09\x9a\x18"
- "\xfd\x1d\xae\x5c\x93\xe2\x22\x1b\x85\x73\x81\xab\x86\xfd\x8e\x75"
- "\x60\xe5\xab\xbf\x75\x03\xca\xb3\xc7\x55\x28\xdc\x17\xf5\xad\x31"
- "\x71\xfe\x60\x32\xc1\x15\x6d\x75\x60\x8d\x9f\x14\x7b\xb7\x90\x95"
- "\xbc\x86\xf5\xff\xae\xf0\xbb\xe3\x8b\x2f\xb2\x4b\xbd\xa0\xd7\x72"
- "\xbc\xec\x2f\x11\xbe\x50\x5f\xb3\x7b\x95\x6f\xac\x95\x6b\x75\xe2"
- "\x73\xd8\xd3\xa6\xa9\x95\x26\x6e\x2d\x31\x71\x94\x35\x56\xe5\x29"
- "\x06\xec\x5b\xd3\xc2\x73\x47\xde\x53\xd5\xe7\x0e\xf2\x1f\x18\x7e"
- "\x5e\xbc\xf6\xc1\xe5\xe7\xc5\x6b\x2f\x68\x72\xde\x6c\xa9\x7b\xfb"
- "\x5a\x50\xe7\x39\xf8\xea\x89\xcf\x59\x9d\x54\xff\x6b\x2e\x59\x37"
- "\x60\x12\x4c\x23\x3c\xb3\x10\x70\x2b\xef\xab\x3c\x94\xa2\xe3\x06"
- "\x9a\x43\xa6\x10\xf1\x43\x4c\xcc\x73\x7c\x9b\x07\xdc\xa3\x9d\x11"
- "\x96\x24\x11\xad\xaa\x56\xfe\xc9\x88\xfd\x6b\x2b\xdd\x3d\xf1\xc7"
- "\x17\x61\x2e\x1f\x02\xfe\x33\x2e\xd0\xf0\x5f\x37\xca\xf0\xd5\x4a"
- "\x3b\x14\x31\xc2\x67\x20\xd6\x39\xf9\x09\xa4\xb5\x8e\xb8\x44\xb4"
- "\x9b\x7c\x06\x82\x47\x38\x54\xaf\xef\xfd\x6a\x65\x1a\xc1\x5b\xc8"
- "\x8c\x0d\x44\x0f\x03\x76\x9b\x0c\xea\xae\x0b\x33\x2d\x8c\xfa\x7c"
- "\x61\xf5\x84\x5d\x3f\x9f\xc1\x8c\x6f\x59\x1e\x65\xb6\x5b\x59\x62"
- "\xc5\xb7\x8d\xec\x6f\xb3\x99\x81\xe0\xe0\x65\x87\x1a\x24\xec\x0e"
- "\xf9\xf4\xf1\xf1\xb2\xd7\x32\x69\x3c\xe8\x5c\x26\x3d\xc8\x7b\xe5"
- "\xb9\x94\xdb\x8c\x3d\xd0\x22\xbf\xff\x69\xf1\x30\xfb\xc3\x7c\xeb"
- "\xd2\x22\x6b\xce\xb2\x95\x05\x53\xa6\x8c\x19\x86\x97\x70\x27\x4b"
- "\x5e\xc2\x9d\x19\xc9\x4b\x20\x9c\x87\xf2\x66\x5f\xca\x3b\x2c\xcc"
- "\xd2\xcc\x8b\x64\xa5\xb2\xf0\xfb\x2d\x6c\xe1\x2d\x11\xc1\xdb\xd8"
- "\xc2\x5b\x6f\xcb\x7a\x28\x77\x49\x4e\x71\x44\xec\xed\x91\x72\xc4"
- "\x9a\xe7\x50\x77\xd4\x84\x7b\x81\x3f\x94\x07\x9f\xa6\x7d\xe7\xf5"
- "\x07\x9c\x41\xfe\x05\xe6\xee\x6c\xb2\xe9\x75\xc4\x1e\x64\x47\x80"
- "\xdf\xf8\x44\xc2\xeb\xa3\xa5\x5d\xdb\x10\x23\x39\x9d\x09\x7d\xf7"
- "\x81\xa7\x3b\x2f\xef\x5e\xbc\xfe\x54\xeb\x96\x00\xf0\x44\x71\xa9"
- "\xa4\x77\x5e\x9f\x86\xf8\x78\x3c\x1f\x96\x67\x3a\xaf\xff\x08\xfc"
- "\x72\x9a\xb0\x61\xb2\x82\x6c\x98\xbc\x2e\x74\xc3\x66\xf8\xcb\x99"
- "\xb4\xa5\xe7\xee\x24\x1b\xf7\x5e\xf6\x7a\x2d\xd1\x17\x94\x16\x79"
- "\xa6\x5b\x9f\x60\xa9\xf4\x24\x7a\x18\xdf\xa6\xf1\x0d\xc5\xa5\x7c"
- "\x6b\x26\xe9\xd4\x24\x23\x7e\x03\xd1\x6d\x51\x96\x98\xd8\xbe\xca"
- "\xd7\x5d\x3a\x0d\xe2\x1f\xe1\xee\x17\xc1\x59\xdf\x07\xe3\x80\xbf"
- "\xe3\xfc\x26\x9e\x45\x36\x81\x14\x96\x4c\xfb\x83\xc9\x91\x21\xee"
- "\x16\xd2\xbe\x48\x38\x61\xbb\xc0\xa5\xaf\x77\xe9\x78\xa1\x5a\xf2"
- "\xa3\x63\x28\x3f\xf6\xcf\xb3\x72\xff\x7c\x23\x46\x5f\x0b\x78\x4f"
- "\xd4\xe7\xea\x90\xfb\x65\x05\xf6\xdc\xc2\xdc\x1c\xeb\xd4\xa2\x31"
- "\x2c\xc2\x03\x6b\x5e\x6e\x81\xb5\x30\xf7\xa9\xe5\xb9\x45\x82\xd1"
- "\xa3\xaf\x43\xcf\xdf\x80\x83\xc2\xfe\xb0\x27\x10\x8c\xdf\x28\x26"
- "\x5e\xd8\x54\x31\x45\x9c\xa5\xc8\x33\xb0\x9e\x14\xb5\x7a\x6c\x9a"
- "\x94\x5b\x9e\x06\x5c\x0f\x4b\x7b\x5c\xae\xe2\x7c\xa2\xe3\x4e\xb1"
- "\xc3\xeb\xa5\xae\xcc\x1b\x6f\x6a\xb0\xaa\x45\x3b\x0f\x86\xe9\xb5"
- "\x26\x61\x77\x48\xea\xac\xbe\x71\xd4\xcb\xdc\x07\xc2\x34\x48\xd3"
- "\x5d\x84\x07\x05\x3e\xfc\x3b\xb8\x50\xa3\x9d\x51\xcf\xe1\x0a\xbe"
- "\x82\x77\xd6\xf4\x33\x21\x0f\x24\xdf\x08\x12\xbf\x1e\x4e\xd5\xe1"
- "\x08\xfa\xa5\x93\xe4\x0e\x3a\x7f\x94\x1e\xbc\xc8\x9d\xc5\xcc\x40"
- "\xb2\x07\xe0\x90\xf2\xbd\x85\x3e\x03\xaf\x7c\xc3\x0a\x5a\x26\x9f"
- "\xd2\x6c\xd7\x74\x37\x79\x7c\x71\x1e\xca\x71\x84\xf9\x8e\xa6\x39"
- "\x82\x8e\xef\xa7\x79\x73\x38\x29\x8b\xf6\x08\x89\xbb\xaf\xfe\x7b"
- "\xed\xe5\x63\xe4\x39\x8a\xc4\x6f\x87\x1b\xb5\x3e\x74\x13\xce\xd2"
- "\x74\x7f\x0d\x72\x5e\x37\xcd\xc1\x9c\xcb\xa7\xb1\x00\x9e\x5f\xab"
- "\xc3\x8b\xfa\x4b\x6d\x27\xb9\x35\xf0\x70\xf9\xbe\x92\x80\x41\xfa"
- "\x2e\x7d\x63\x9a\xe4\x8f\x9a\xac\x91\xe7\x86\x92\x17\x6a\x9a\x15"
- "\xb6\x13\xf2\x46\xed\xa5\x38\x62\x59\x01\x5d\x27\xfb\x59\xd6\xca"
- "\x25\x3f\xcb\xcd\x5a\x6e\x9b\x66\x5d\x5e\x20\x8e\x6d\x85\x18\xc0"
- "\xbe\xfc\xb1\x9f\x59\x09\x8b\x64\xcd\x5b\xb8\x30\xeb\xde\x87\x7f"
- "\xf8\xa3\x31\xec\xde\x25\x88\xb3\x2f\xb3\x2e\x4c\x9d\x26\x3f\x3d"
- "\x34\x7f\xee\xbf\x64\xcd\x4d\x7f\xf8\xc1\x45\xc3\xe8\xa4\xc7\x62"
- "\x4e\x90\x8e\xcf\xa8\x0e\xf6\xd6\x3a\xa9\x83\xd4\xd4\x3c\x54\x07"
- "\xa9\xc9\x8b\x1f\xb0\xf3\x9b\x16\xc6\xde\x42\xec\x5b\xeb\xf0\x2b"
- "\x97\xf3\xe6\x2a\x33\xda\xef\x0f\xcf\x9b\xb7\xc4\x79\x1b\xc9\x0e"
- "\xa4\xec\xf5\x4d\xe0\xbf\x37\x16\x46\x7e\x0b\xe3\x82\x37\x43\x02"
- "\x5f\x6a\xf3\x82\xe6\x43\x56\x30\x46\xcc\x0d\x49\xaf\xbc\xb9\x50"
- "\x9f\x1b\x35\xf2\x7c\x88\x91\xcc\x8c\xbe\x63\x7e\x27\x92\x7c\x19"
- "\x73\x21\x8f\xce\xd6\x29\x9e\xc7\xf7\x24\x6a\xe5\xae\x21\x79\x33"
- "\xd1\xb3\xda\x99\x58\xdc\x69\xf6\xe6\xeb\xbc\xb2\x69\x81\xe4\x05"
- "\x9b\x8a\xc5\xbc\x59\x3d\xe1\x5e\x71\x06\x29\xee\x13\xbd\xd9\x18"
- "\x9e\x3f\x6f\xad\xa3\xb1\x21\xbc\x20\x71\xef\x9b\x47\x2f\x91\xe3"
- "\x44\x21\xae\x4b\xb7\x33\x6f\x9f\xc2\x0c\xc6\x29\x2e\x56\x6b\xe0"
- "\xe5\x5e\xf6\xe6\x16\xa9\x87\xfa\x56\x8c\x4e\x3f\xe3\x3d\xd1\xcb"
- "\x78\xfb\xa5\xf2\xaf\xea\x08\xf9\x97\xd3\xc6\x4f\xb4\xda\x7c\x44"
- "\x23\xbb\x3d\x3e\x61\xdf\xf4\xee\x56\x9b\x9f\x74\x4b\xc6\x9c\x62"
- "\x6f\x3d\x52\x16\xe2\xfd\x78\x9f\x80\xbe\x89\x3d\x64\xa6\x94\x29"
- "\x80\x1f\x7b\x6b\xbd\xe4\x4d\x64\x3c\xc1\x1d\xef\xd4\x46\x23\x8d"
- "\x0f\xe6\x65\x17\xc6\x28\x7d\x38\xbc\x17\x57\x61\xd0\xec\x48\xbd"
- "\x75\x82\x78\x54\x82\xd5\x33\x06\x35\xef\x99\x4a\xfc\xf0\x24\xdc"
- "\x17\xa6\x2f\x79\x40\xc2\xf6\x2d\x6f\x93\xa3\x9b\xf6\xcd\xc0\x48"
- "\xb8\x14\xe3\x79\x5c\x1f\xcf\xf4\x90\xef\x6e\x1a\xaf\xbe\xca\x3f"
- "\x5b\xf4\xb1\xec\x9d\xf1\x73\x5b\x54\x05\xb3\x1e\xae\xbb\x95\xe2"
- "\xb1\xfe\xdf\xda\x22\x74\x7b\x68\x7d\x5d\x92\x17\x78\x38\x4d\xcb"
- "\x9f\xa9\xe7\xbf\xd4\x3e\xb1\xb8\xa0\x4b\x42\xae\x3b\xa5\x8e\x8f"
- "\xe6\x4e\x7a\x88\x8e\x0f\x9d\x01\x36\xc9\x39\xa9\xcb\xe0\xcc\xb2"
- "\x3f\xcd\x3f\x50\x37\x82\xff\xde\x68\x7b\x54\x93\x03\x60\x6d\xff"
- "\xf9\xfc\x0c\xc6\xf2\xfd\x2b\x33\x07\x65\x28\x24\xfb\x20\x9b\x83"
- "\x68\x87\x37\x42\x46\x36\xa8\xa3\xe9\x65\xcd\x19\xa4\x33\x46\x77"
- "\x96\xa9\x1c\x5a\x57\x52\x6e\xd3\x6c\xf6\x00\xf3\xa2\xbc\x02\x71"
- "\xfe\x5d\xf9\x67\x71\x57\x92\x78\x6d\xc1\xe7\x97\xf2\x2f\x34\x1d"
- "\x26\x41\xbb\xc8\xfb\x78\xcd\xf3\x06\x65\x41\xe2\x6e\xda\x9f\x85"
- "\x5e\x36\xe2\x17\x0f\x27\x2f\x04\x7e\xc8\x5b\x52\x90\xb3\xec\xf1"
- "\xc7\xff\x3e\x6a\x88\x3c\xe3\x72\x55\xaa\xa0\xb5\x9a\xc1\xff\xee"
- "\xcb\x93\xf3\xb4\x19\xf8\xff\x37\x69\x92\x7e\xfb\xf1\x97\x58\x37"
- "\x93\x4e\xb3\xb7\x2d\x3a\xfd\x2e\xd7\xd1\xdb\xc9\xbc\xb2\x39\x2f"
- "\xbc\x36\x9a\x7d\x5f\x5f\x1b\x6f\x1b\x87\x5f\x1b\x6f\xa7\x60\x9f"
- "\x3d\x8e\xef\xc9\xa8\xf3\xb8\xc0\xf9\x34\xde\x92\x06\x77\x9b\x82"
- "\x77\x0b\x1a\x3c\xab\x98\x29\x44\x7f\x93\x6c\x9a\xf6\x83\x10\xf8"
- "\xda\x10\x70\x44\x56\x90\x99\x69\x2f\xa8\x29\x20\xb9\xe3\x64\x1e"
- "\xbc\xc0\xbd\x59\xc5\xc0\x17\x08\x57\x9f\x96\x67\xf0\x3f\x39\x0f"
- "\x3e\x04\xef\x35\xa7\x08\x57\xa8\xe4\x0c\x81\xc9\xfd\xfa\xed\x2d"
- "\x3a\x8d\x6b\xaa\xb0\x0a\x1b\xd9\xb4\x6f\x87\xa4\x3e\x53\x03\xed"
- "\xdd\xa8\xe7\x80\xc0\x41\x21\x13\x9d\x01\xb0\x9a\x27\x50\x2e\xe9"
- "\x05\x15\x50\xfb\xa2\x6e\x33\x05\x53\xc5\x59\xc1\x8e\x27\x84\x3e"
- "\xd0\x6d\x52\x1f\xe8\x36\xb6\xbd\x80\xe0\xf0\x76\xe0\xb2\xb2\xf1"
- "\xf8\x63\x6d\x91\xf1\x8e\xc7\x97\x66\xd9\xf2\x8a\xb3\x48\x17\xf0"
- "\x92\xfd\x5d\xae\xa1\xca\x77\x92\x24\x7c\xdf\xc9\x08\xcb\xaa\xa4"
- "\x0e\x1f\xe1\xcc\x99\x01\x61\xc3\x56\x3b\xeb\x79\x77\x16\xc1\xbe"
- "\xec\x22\x85\x63\x30\xe7\xde\x9d\x4e\x67\x3f\xbd\xa4\x3b\xb3\x23"
- "\x93\xb9\x2a\xb9\x9b\x64\x68\x88\x1f\xa7\xdf\xa9\xef\x45\x3c\xd6"
- "\x3e\xc5\x5d\x25\xce\x1a\xed\x42\x36\x07\x38\xbd\xe3\xf6\x32\x93"
- "\xa6\xeb\x6a\x7b\x8c\xf4\xf3\x84\x4e\xb9\xa0\x33\xde\x39\x23\xef"
- "\x68\xbd\xd3\xa9\xc3\x12\xb4\xef\x6c\xba\xd7\x4f\x7a\x3a\xbd\x9c"
- "\x74\x02\xdf\x65\x7a\x7e\x2f\x7b\x47\xdc\x31\x7d\xd0\x2f\xde\xf7"
- "\xfc\xc4\x1f\x79\x27\xff\x9d\x2d\x12\x6f\xbd\x53\x87\x78\xe0\xca"
- "\x77\xca\xd1\xe6\x38\x69\x23\x40\x94\xb3\x40\xd7\x87\x8a\x84\xdb"
- "\xdc\x25\x36\x10\xcb\x4b\x1f\x7f\x3c\xb7\xb0\x48\xf7\x29\x9f\xb2"
- "\x2c\x3f\xe7\x2e\xed\x0e\x7e\x41\xee\xca\xac\xa5\x39\xe2\x8e\x0f"
- "\x62\xe5\xeb\x25\xf0\x9d\x46\xfc\x8d\xd0\x9b\x17\x7d\x6a\x9b\xba"
- "\x5d\xa3\xa3\x3a\x58\xcb\x01\xa9\x6f\xd1\xf2\xa4\xdc\xdb\xae\xfe"
- "\x4f\xb4\xa3\x4d\xdf\xdb\x48\xc6\xd2\xcb\xee\xb0\xd2\x99\x19\xd9"
- "\x65\xa0\xb3\x39\x92\xb3\x20\x0d\xd6\xe8\x3b\x83\x77\xa6\xd7\x23"
- "\x9e\xce\x84\xdd\x05\x74\x0e\xdc\x36\x5f\xdd\x50\x94\xc3\x13\xb2"
- "\xcd\xc0\x6b\xb1\x34\x76\x74\x56\x24\x7d\x78\xb4\xa4\x11\xbe\x26"
- "\x59\xa0\xbb\x80\xf4\x69\x5b\xcc\xa0\x4f\xb0\x5f\xb6\x2d\x00\xaf"
- "\x97\xb3\xa6\x84\xc5\x50\x1d\xd8\x0b\xbd\x52\xae\xdc\xb2\xf8\xf5"
- "\x52\xc6\xb4\xfd\xd0\xbb\x5e\xc8\x39\x5b\x52\xe4\x9e\x5a\xe4\xd0"
- "\xe4\x28\x0e\xa4\x5b\xe3\x65\x37\xfa\x64\x9b\xb3\x67\x8b\x79\x22"
- "\x70\x5d\xcb\x2e\xbe\x31\xbb\x59\xe8\x3c\x6f\xcc\x9e\xad\xf2\xbc"
- "\x28\x0a\x63\xaf\x19\x83\x71\x6c\xe3\x65\x29\x4c\xd3\x93\x8e\x3a"
- "\xc5\x8e\xdc\x42\x72\x60\xcc\x0f\x37\xc1\x02\xe5\xaf\xd1\xca\x5f"
- "\x83\xf2\x51\xef\x6d\x9a\xff\xdc\x16\x9f\x5e\x17\xd6\xab\x0f\xfb"
- "\x71\x0e\xed\xc9\x68\xff\x62\xfc\xb2\xa5\xcc\x29\x00\xde\x6f\xf2"
- "\xa0\xcc\x49\xd2\x7d\x47\x52\xf4\xf5\x42\x75\x6b\x7d\xa0\x39\x40"
- "\xf6\x2b\x15\xad\xae\x72\x92\x7f\xe8\x65\x72\x94\xc9\x2f\x74\xd7"
- "\x63\xff\x8c\x01\xde\xf0\xc5\x55\x60\x9f\xa4\x3a\x88\x6e\xf7\x4f"
- "\xe6\xd8\x47\x43\x59\x21\xa3\xb4\xa1\x51\xcc\xc6\x46\xd2\xec\xa8"
- "\x6f\x4b\x98\xce\x44\x19\x17\x80\x9f\x9d\xac\xbc\x93\x1d\xd9\x4f"
- "\x75\x93\x9e\x13\x8d\x6b\x3f\xc6\x09\x63\x65\x41\x3d\x0d\xe0\x35"
- "\xc6\x02\x0e\x1f\xd0\x78\x91\xee\xc8\xf6\x7e\xc1\x7f\x98\xd0\x36"
- "\x63\x07\x3b\xf2\x3a\x8d\x15\x95\x05\x18\x77\x05\xfb\x32\xef\x23"
- "\x1b\x76\x04\xeb\x55\xa5\xbc\x8b\xce\x2f\x4f\x31\xcf\x7c\xa2\xcb"
- "\xc1\xab\x88\xf7\xb2\x1c\xae\x8a\xb1\x16\xba\xd3\x9e\xf9\xab\xba"
- "\xb8\x7a\xb1\x92\xf1\x66\xec\x0f\x17\x0d\x2c\x18\x00\x5f\x8d\x76"
- "\x1b\xca\xce\x90\x9d\xbd\x7a\xe0\x9a\xb5\xa4\xb3\x12\x53\x5d\xc2"
- "\xcc\x64\xa3\xb0\xcc\xc6\x03\xad\xfe\x3a\xd6\x6a\xab\x63\xef\x04"
- "\x6b\x99\x7b\x05\xc9\x69\x3d\xdd\xef\x3a\x6a\xe9\xae\xca\x55\x78"
- "\x7f\xd1\xfa\x2f\x54\x57\xeb\x9a\x77\x8f\xbe\x8f\x91\x7b\x9f\x59"
- "\xff\x4d\x84\x6b\x5b\x32\xdf\xc1\x6c\x7b\x87\x95\x75\x72\x95\x68"
- "\x3c\xe7\x93\x54\xc7\x5a\x94\x55\x4f\xf6\xfc\xcc\x6a\xaf\x65\x0c"
- "\xfa\x6f\x4c\x77\x30\x71\x46\xea\x2e\xf8\x13\xb5\x71\xdc\xf6\x73"
- "\x2c\xc6\x5d\xf0\x86\x78\x17\x32\x13\xf4\xd7\x93\xd3\x2e\x74\x30"
- "\xc9\x96\xa1\xc7\xd1\x45\x77\xbe\xd5\x1a\x6a\x63\x48\xb6\x1b\xf0"
- "\x32\xea\xf9\x77\x38\xf5\xfc\xad\x02\x17\x6c\x23\x78\xa0\x4d\x47"
- "\x16\x49\x98\xb4\x20\x56\xb6\x19\xf0\xc9\x8c\x84\x4f\xeb\x2c\x82"
- "\x0f\xe9\xa4\xab\x2b\xba\xeb\xd1\xb6\x34\xc0\x40\xd5\xeb\xa0\x39"
- "\x40\x67\x79\x54\x7e\xf5\x39\x16\xeb\x2e\x20\x9d\x75\xcf\xb3\xa6"
- "\x0c\x63\x8c\x7a\xe1\x4c\x43\xcd\x79\x66\xa4\x71\x23\xda\xa1\x46"
- "\x7c\x17\x30\x2f\xa5\x31\xf3\xc5\xdb\x32\xf0\x5b\x84\x5f\x26\xcd"
- "\x3d\x3c\x17\x63\xbc\xd6\xa2\x0d\x89\x18\xab\x7a\x7a\xca\xf9\xb8"
- "\x64\x2d\xd9\x78\xa5\xfd\x19\x73\x25\x1c\xbf\x71\xc9\xcf\x83\x58"
- "\x3b\xaa\xe0\x3d\x3d\x89\xea\x86\x55\x0d\x52\x7f\xf9\xdd\x45\xdb"
- "\x40\xeb\xd7\x6d\x14\x36\x32\x62\xc1\x9f\x90\xcc\x81\x3d\x27\xee"
- "\xd2\xb5\x59\x74\x3c\xfe\xcb\xf1\x64\x7f\xc2\x33\xcf\x20\x74\x29"
- "\x8b\x4a\xb5\xb9\x5e\x8a\x34\x73\xbc\x6c\x46\x9e\x5c\x13\x2d\xe2"
- "\x0e\x20\xe1\x81\x91\xe8\x2c\xec\x5d\x2d\xa4\xc3\xca\x27\x66\xb2"
- "\x58\x85\xfb\x62\xb3\x4d\xdc\x13\x6c\xa2\x39\x14\x2b\xe6\xbe\xfc"
- "\x06\xda\xd8\x67\xc2\xde\xd6\x86\x78\xa3\x1e\x4f\x7b\xa8\x0a\x7e"
- "\x99\x78\xf5\xf4\x62\x13\x77\x9e\x67\x49\x42\xee\xa5\xc7\x17\xfb"
- "\x4c\xad\xd8\xf9\x9d\xc0\xdd\x64\x5b\x87\xf2\x20\x3e\x0a\x7b\xe5"
- "\x41\xd4\xeb\x46\xfa\x44\x3d\x3d\xef\xcd\x34\x7a\x1c\x4d\x62\x9d"
- "\x91\xfd\x35\xb1\x47\xca\xf8\x51\xe9\x0e\x9f\x49\x8c\x99\x1e\x57"
- "\x94\x29\xf6\x66\xb2\xc3\x01\xda\x9b\x8b\xf6\x9c\x12\xf1\x0a\x78"
- "\x67\x8a\x37\x47\xc4\x19\xc8\xe6\x09\xd9\xd3\x8c\x88\x8b\x42\x9b"
- "\xd9\x60\x18\x75\xd3\x3e\x4d\xeb\x2e\xbd\x98\xce\x00\xe5\xfe\x2c"
- "\xea\x2e\xe6\x4c\xda\xe8\x95\x71\x92\x0e\x78\xaf\x3e\x92\x6f\xa7"
- "\x73\x17\xaa\x5b\xed\xcd\x34\x84\x7a\x33\xa3\xa8\x7e\x2a\x8b\x64"
- "\xae\xe8\x23\xea\xed\x62\x64\x1f\x9e\x6f\x38\x97\xca\xe9\xde\x17"
- "\xca\x15\xed\x71\x04\x80\x7b\xce\x35\x0c\xaf\xdf\xf3\x49\x97\xdb"
- "\xf9\x6f\x98\xd3\xef\xef\x22\x9c\x12\x32\xdb\xd7\x59\x9f\xa0\x7d"
- "\xfa\xfd\x29\x34\xa6\x21\xac\xf3\x50\xbc\x7d\xdd\xcc\x2e\xa6\x38"
- "\xb1\x76\xe4\xd9\xe4\xfb\xf7\x10\x9d\x58\xa6\x72\x8e\xf7\x59\x34"
- "\x77\x4d\xdd\xa4\x97\x63\x77\x09\x5d\x98\x84\x0f\xbd\x9e\x40\x17"
- "\x6b\x29\xff\x98\xb5\x04\x3d\xe5\x07\xcf\xf9\x8c\x52\x27\xc6\x48"
- "\xe5\x3e\x4c\xdf\xca\xb0\x5e\xb2\x42\xf5\x23\xf3\xb6\xe0\x97\x00"
- "\xbb\xcf\xe4\x5e\xf0\xfe\x2e\x9d\x47\xba\x7c\x1f\xfe\x22\x6c\xa2"
- "\x92\xbe\xa8\xba\xf1\x65\xf2\xd7\x55\xc6\xfb\x52\xd8\xcc\x12\x92"
- "\x55\xbf\xdf\x1e\xe7\x67\x69\x5a\xb9\x67\x65\xb9\x7f\x61\x97\x2b"
- "\x97\xe6\x6d\xcb\x16\xa9\x87\xa2\x26\xbc\xdc\x16\x42\xd9\xa1\x84"
- "\x3f\x98\xb1\xd7\x94\x81\x7e\x01\x3d\x72\x74\x3e\xea\x69\x6b\x0d"
- "\xb6\x31\xb2\xab\xbc\x5d\xc5\x7e\x7d\xd6\xc2\x34\xfd\x9f\xb2\x1e"
- "\xf6\x97\x5b\x54\x9e\x62\x06\xef\x46\xf2\xdf\x32\xc2\xb3\x24\x4f"
- "\x77\x86\x58\xb4\xc7\x0e\x2e\x2b\xfe\x93\x2e\x94\x71\xc7\x9b\x24"
- "\x6b\x07\xae\x0a\x71\x8b\xe1\xd5\x0b\x5e\x56\x03\xfc\x2d\xec\x83"
- "\xae\x9e\xf8\x5c\x5c\x05\xbb\x9b\x1b\x4c\x42\x7f\x4c\xdd\xf0\x41"
- "\x17\xc6\x76\xb6\xd4\x37\x2a\x5a\x17\xa1\x6b\x14\x85\xba\x5e\x26"
- "\x5d\x23\x6e\x2e\xca\xa8\xa3\x3d\x13\x63\xd6\x57\xf9\x17\xd0\xff"
- "\xef\x89\xfd\x6e\x1d\xd1\x45\x02\xcf\x1f\x7d\xc0\x17\xbf\xbf\x81"
- "\xca\x20\x3b\x65\xea\x8a\x60\x43\xcd\x57\xcc\x28\xe1\x71\x74\x7a"
- "\x6b\x77\x9f\x9b\xbb\xf6\x37\xd0\x3a\xd2\xca\x36\xa1\xec\x10\xdf"
- "\xb0\x1f\xb4\xf7\xd1\x85\x72\x6c\xc4\xbb\x85\xbe\x07\x07\xe8\x6e"
- "\xe0\x5f\x6a\xeb\xfa\x89\x2e\xfa\x4b\x1a\x68\x5d\x77\xaf\x79\x7f"
- "\xc3\x0f\x2d\xe5\xa0\x01\x8e\x66\x7b\xa3\x62\xed\x62\x6f\xd7\x6c"
- "\x9d\x8e\x74\xae\xc6\xb7\x5a\xc6\x78\x50\x08\xe8\xf6\xc4\xd3\xec"
- "\xd8\x7b\xfd\x95\xcc\x30\x80\xbd\xb5\x1f\xbc\x0f\xdf\x9a\x19\x5b"
- "\x3d\x81\xa5\xe2\xdb\x84\xd3\xec\xe8\xcb\x41\x03\x4b\xc4\xcf\xec"
- "\x9b\x98\x77\x15\xca\x4d\x23\x99\xee\x91\x73\x74\xce\xfc\x81\xb4"
- "\xcb\xf1\x1c\x4b\x56\x51\x1e\xc9\x92\x6b\x26\xb0\x64\x92\x23\x23"
- "\x2e\x25\x2b\x24\xcf\x59\x74\x3e\x71\xf5\x04\x36\x6d\x68\xbd\x47"
- "\xeb\x24\x9d\x77\x4c\xec\xf1\x2b\x7d\xec\x7a\xdb\x77\x79\x07\xca"
- "\x75\xf1\xca\x28\xce\x27\x5a\x0c\x92\x1e\xfc\xa0\xd8\xb4\x45\xce"
- "\x3b\x71\xae\x80\xf9\x46\xe7\x36\x9a\xbc\x5a\x11\x36\x5e\x13\x8a"
- "\x93\xe8\x6e\x96\x88\x53\xcc\x04\x4b\xb3\x68\x87\x66\x97\x31\xb4"
- "\xfa\xe6\x6c\x2a\x83\xda\x93\xb5\x44\xca\xba\xc9\x66\x23\xe0\x2a"
- "\xf4\x84\xd7\x3d\xc7\x62\x7f\xf5\x1c\x33\x1f\x79\x5c\xf4\x6b\x97"
- "\x5c\x8b\x46\x46\xed\x55\x5d\xb4\xce\x30\x27\xd0\x6e\xaa\x8f\xe6"
- "\x46\x6b\xf0\xac\xbb\xcc\xce\x55\xf7\x13\x64\x9f\xe4\x83\x2f\xdd"
- "\x85\x7b\x58\x7a\x67\x50\xda\x19\x5b\xcc\x7c\x3b\x50\xde\x8e\x09"
- "\xcc\x8c\xb2\xce\x7b\xf2\x09\xd7\x5a\x6e\x70\x17\x1e\x40\xd9\xc7"
- "\xae\xa2\xfd\x68\x3d\xe0\x23\xf7\xa5\x63\x07\x3d\x81\x76\x46\x3e"
- "\x2e\x1e\xb4\xf1\x10\x95\x83\x34\xf7\x88\xfe\x6e\xb5\x58\xb3\xa4"
- "\x5d\x4d\xd1\xd7\xc1\x33\x04\xad\x1f\x9e\x73\xa2\xbc\x45\x9e\x6c"
- "\xd0\x9c\x5a\x9f\x74\x58\xcb\xf9\x75\x6c\x83\xbb\x70\x27\xa3\xf1"
- "\xa1\xf4\x08\x97\x7b\xba\x91\xf6\xcc\xd0\x71\xa1\x34\xf8\xb6\x1f"
- "\xe5\x7e\x27\x7c\x36\x46\x67\x36\xe1\x34\x75\xe8\x0f\x60\xe5\xdf"
- "\x0a\x18\x49\x99\xe1\xb1\x49\xd4\x56\x8c\x5d\x92\xc7\xfe\xf1\xf0"
- "\x77\x22\xb1\xf6\x31\xef\x2b\x5a\x85\xbc\xec\xc3\xb1\x0f\x06\x55"
- "\x2e\xf1\xd9\x87\x6e\xd0\x6e\xd8\xe7\x3e\x74\x13\x2e\x10\xf8\x64"
- "\x06\x9d\x67\x7f\xf8\xba\x49\x91\xe3\x4b\x7d\x21\x9a\x69\xb8\x31"
- "\x8e\x38\xab\x20\x1d\xc0\xc1\x31\xe6\xe6\x4f\xba\x54\x3a\x83\x22"
- "\xdd\xde\x01\x0b\x93\xf3\x8f\xbb\x50\xee\x7e\x8d\x86\x6c\xd3\xf6"
- "\xd3\xb6\xde\x78\xfb\x16\xfe\xb4\x85\xe9\x7a\x88\x58\xbf\xb5\x59"
- "\x52\x77\xd4\x42\x38\x6a\x87\x41\xae\x1d\x6a\xa3\x96\xb7\x45\x9e"
- "\x8d\x7f\x58\x8e\xfc\x2d\xc3\xf6\x37\x6a\x02\xd9\x9f\x2a\x23\x1b"
- "\xa2\xe2\xae\x12\x70\x15\xf6\x83\x68\x8f\xbf\x9f\xc9\xf3\xfa\xf6"
- "\xbb\x40\xe3\x47\xd3\x3d\x55\xbd\x6d\x57\x76\xae\xd0\xae\xdd\x97"
- "\x6b\x5f\xa0\xf3\xd0\xdc\x0c\x18\x57\x9a\x84\xbf\x03\xd0\x5d\xaa"
- "\x3f\xfe\x13\xd0\xd9\x3d\x56\xb9\x6e\xda\x6d\x3c\x5e\xe2\xdb\xac"
- "\x00\x2b\xa7\x7e\x69\x72\x89\x68\xea\x33\xca\x71\xe9\xe7\xdb\x7a"
- "\xd9\x23\xfa\x10\xd1\xfb\x86\x3e\x49\xfb\x06\x9f\x74\x89\xbe\x91"
- "\x8d\x1e\xd1\xb7\x8f\xc4\x1d\xc0\x2b\xec\x4f\xbb\x84\xed\x27\x3e"
- "\xf7\x04\x2a\xe3\xe3\xe7\xa9\x7d\x34\x26\xc0\x0f\xd7\x9e\x66\x1f"
- "\x65\xf3\x31\xbf\x1a\x73\x65\x65\x7e\x34\x4d\x96\xd9\x63\xdd\x04"
- "\x1c\x2c\xef\x2c\x92\xce\xce\xc7\xeb\xf9\x86\x1e\x2b\xf1\x30\xbd"
- "\xa8\x0f\xf3\x23\x02\x0f\x7d\x6c\xa6\xb1\x9a\xb1\x87\xa5\xc9\x79"
- "\xf8\xf1\x28\xe2\x77\xa5\x8f\xa7\x8f\x0e\x60\xde\x4b\xfb\x72\x83"
- "\x3a\xab\x8a\xd8\xc7\x22\x71\xec\x15\xb6\x51\xf2\x34\x09\x1f\x00"
- "\xfe\x1f\xed\x14\x7a\x49\x68\xef\xca\xa0\x8e\xff\x3e\xda\xc9\x49"
- "\xde\xed\xd4\xe4\x9e\x84\xcb\x9c\xd2\x46\x60\x5f\xe5\xc7\xf3\x06"
- "\xe5\x9e\x74\xa7\xbb\x92\x37\x53\x3a\x8c\xfd\x59\x4a\x23\x6d\x90"
- "\x9d\xd6\xee\x3b\x7f\xfc\x23\xed\x2e\x73\x0a\xe9\x6a\x21\x2f\xf0"
- "\x1d\x17\xf2\x56\x82\x01\xd5\x2d\xda\x6e\x20\x19\xe7\xc7\x75\x61"
- "\x39\xf3\x47\xc2\x37\x84\xb4\x47\xf0\xf1\x01\x7d\x8e\xa0\xbf\xd1"
- "\xd2\xaf\xc7\x47\x93\x0e\x4f\x63\x62\x0e\xf4\x72\xcb\x98\x1b\xeb"
- "\x68\x4e\x7e\x7c\x3c\x12\x4e\xe9\x41\xb5\x4c\xe2\xa0\x8f\x9a\xb8"
- "\x58\xeb\x1f\x35\xfd\x7d\x7a\xe2\x93\x5b\x74\x5a\x44\xc2\xd9\x0c"
- "\xfc\xf2\x69\x50\xc0\xda\xb5\x24\x85\xec\xee\x3e\xed\x24\x3b\xe2"
- "\x9f\x7c\x45\xf6\xda\x83\xae\x25\x0b\x42\x65\x16\xb2\x4f\xcb\x54"
- "\xd7\x92\xcc\x53\x36\x66\xc8\xb2\x91\x6c\x7d\x7f\x39\xf1\x78\xe0"
- "\x59\xc1\xaf\x81\x3e\xc1\x3a\x5f\xb5\x94\x99\x1e\xc9\x23\x19\x43"
- "\x4a\x22\xd9\x53\x27\x5b\xea\xe4\x0b\x21\x54\x96\x92\x80\xf7\xf1"
- "\xa0\xe7\xcc\xdc\xbc\x64\x36\x9d\xcf\x87\x2a\x39\xf0\xf1\x71\xb2"
- "\xe9\x6e\xf0\xf8\x02\x6c\xd5\x19\x16\x43\xf6\xda\x83\x1b\xf6\x6f"
- "\x69\xf5\x7f\x2a\xf8\x9b\x38\x1b\x4b\x04\xfd\x41\x77\x00\x2c\x6a"
- "\xfc\xfe\x72\xec\xf1\x6b\x64\xbf\xcf\x72\xd9\x6f\xd9\x6e\x6a\xbf"
- "\xc4\x71\x8f\x65\x3a\x45\xdb\x3f\xdd\x14\x44\xf9\xaa\x2b\x6f\x51"
- "\xc8\x95\x97\x21\xef\xd4\xb7\x30\xa7\x9d\x77\x79\xfc\x2d\xe0\xb9"
- "\xce\x0b\xdf\x75\x74\xfe\x4f\x7d\xa4\xfe\x51\xdd\xef\x9e\x3b\x23"
- "\x68\xad\x20\xc2\x65\xf9\x5a\x9e\x6e\xe4\xe9\x6e\x61\xfd\xae\x3c"
- "\xd1\xf7\x56\xbf\xcc\x9b\x25\xde\x29\x7f\x04\x1c\xb4\x3e\x0f\xc2"
- "\x01\x7d\xa7\xfe\x51\xff\x83\x04\x13\xc0\x40\xeb\xab\x65\x40\xeb"
- "\x27\xf5\xf1\x1d\xec\x3a\xcf\xa1\x9f\xe8\xab\xe8\xe7\x00\xfa\xd9"
- "\x9c\xc7\x58\x60\xe3\x71\x76\x31\x21\x2f\x83\x78\xd4\xb2\xf7\x40"
- "\xc3\x97\xba\x18\x78\x51\xe3\x8b\x4e\x97\xe1\x97\xa0\x4d\x9c\x3e"
- "\xf0\xa4\x3e\xde\x45\x3a\xbc\x1e\x1b\x7e\xc1\x3a\x46\x34\x8e\x4e"
- "\xaf\xa3\x6e\xcb\xbb\xea\x49\xe6\xec\xe2\x5d\xa0\x4d\x03\x9e\x20"
- "\xd2\xe4\xa1\xff\xe0\x61\x4f\x69\xed\xa7\xb4\xab\xbe\x92\xfd\x32"
- "\xe5\xb3\xc4\x43\xff\xb6\xd6\xe0\x69\x5f\xcb\xf4\xbe\xfc\x04\xe9"
- "\xd0\x1f\x0b\xca\x1a\x4b\xfd\x51\xd1\xcf\xad\x68\x67\x20\xa2\x4f"
- "\x47\xba\x49\x8f\xf8\x03\x36\x26\x83\x29\xcf\xf5\xa0\x1f\x3d\xcc"
- "\xe2\x72\x82\xfe\x7a\x88\xe8\xc5\xe3\x47\xae\xce\x64\xc9\x5e\xf6"
- "\xc9\x51\x39\xef\x84\x2d\xe8\x71\xa7\xd9\xa7\xe7\x07\xed\x3d\x93"
- "\x0d\xfd\xf8\xfd\x75\x34\x8f\x84\xdd\x67\xda\x33\xfa\x30\x67\xe8"
- "\x9c\x7e\x25\xea\xe8\x4b\x19\x2f\xda\x53\x39\x8b\xf4\x84\x63\x11"
- "\x26\xdf\x51\x74\x5f\x55\x41\xbe\x2d\x1c\x30\xa3\xf2\x41\xcf\xad"
- "\xa1\x27\xc1\x70\x58\x9d\xdb\xbd\x6c\x36\xea\x10\x67\x2c\x0d\x4e"
- "\x9f\xe1\xdf\xf7\xb2\x69\x57\x86\x53\xfe\x9a\x3c\x12\xfe\x26\xf9"
- "\x2c\x95\x87\xbe\x25\x9c\x66\x9f\x5d\x35\x74\x8d\x59\x05\x2e\x93"
- "\x78\xf0\xaf\x6d\x24\xff\xbc\xc2\x7a\x05\x0d\x47\x3a\x16\x57\x98"
- "\xef\xa8\xde\x0e\xbc\x8f\x78\xdf\xe2\xca\xe1\xf0\xd9\xb4\x91\xca"
- "\x5a\xbf\x59\xe8\x48\x96\x55\x6f\x06\xbe\x00\xad\x70\xd8\x42\x67"
- "\x29\xd8\x3b\x77\xfa\x59\xd1\x36\x46\xfe\x67\xc6\x7a\x82\x0f\xb0"
- "\xc3\x75\xa9\x6c\xfb\x39\xb2\x19\x97\x92\xf0\xcc\x39\x8c\xa5\x86"
- "\x43\x88\x26\x25\x39\x32\x2f\x4a\x31\xd7\x6c\xd6\x69\xf8\xcf\xce"
- "\x97\x9e\x67\x06\x6b\x81\x78\xf7\xcf\xb3\xf2\x60\xad\x41\xcd\xab"
- "\x23\x3b\xe6\x09\xc7\x52\xc9\x8e\xb9\x6e\x1b\x5c\xd0\x3e\x0e\xac"
- "\xb9\x5e\xcb\x98\xf5\x85\x6c\x1a\xf9\x33\x30\xf9\x24\x2d\x27\xf7"
- "\x6b\x6f\x32\xda\x67\xd6\xec\x85\x9b\xa5\xbd\xf0\xbf\xe6\x93\xce"
- "\xb9\xf6\xfd\xe1\x10\x78\x18\x51\x6e\x21\x4b\xae\x3b\xc7\x52\x88"
- "\x0e\xca\x3a\x29\x69\x36\xe2\x0b\x1f\xe8\x36\xf1\xd0\xdf\x52\xd8"
- "\xb6\xd3\x61\x7f\x07\xbe\x22\xf2\x91\xc0\x2d\x23\xe9\x4f\xd7\x8c"
- "\x17\xfa\x04\xc2\xd6\x2e\x9d\x33\x20\xcc\x6a\x37\x32\xe3\x61\xd2"
- "\x4d\xac\x97\xf7\xf0\x0e\x07\xa5\xbe\x6f\x5f\xa5\xb7\x49\xb7\x03"
- "\x3f\xe2\x79\xb9\x4b\xf2\x3b\x6a\x34\xf8\x2f\x5f\x9f\x5b\xda\x20"
- "\x3d\x11\xeb\x59\xa3\x46\xf0\x38\xde\x33\xf4\x8d\xe2\xc8\xae\x5b"
- "\x9a\x80\xe5\x89\x59\xc4\xf7\x68\x3c\xe3\x21\xeb\x60\x9c\xa4\x61"
- "\x84\xce\xb5\x45\x9e\xff\x61\x6f\x8a\xeb\xab\x3c\x91\xa1\xef\x67"
- "\xb4\xaf\x4b\x5b\xaf\x27\x72\xbc\x51\x71\x7b\x2e\xd3\x3e\xb3\xa6"
- "\x23\x4e\x67\x37\x69\x48\x5f\xab\xef\x6f\xe2\x0c\x77\xf5\x84\x7b"
- "\x8b\x8a\x59\xd2\x0f\xaf\x8b\x61\x74\xfe\x87\xb4\x5d\x72\xdf\x3d"
- "\x71\x30\x7c\x46\x90\x26\xe0\x4d\x36\x0a\x04\x8f\x41\xb6\x3f\xa5"
- "\x4f\x83\x6e\xdd\x06\xa8\xdc\x7f\x4f\x7c\x14\x51\x4f\x70\x70\x1f"
- "\x45\x1d\xa4\x83\x4e\xe5\x4b\xda\xe4\x44\x83\xb8\x4b\x89\x74\x72"
- "\x7f\x3d\x31\x22\xdf\x46\x76\xa8\x08\xbe\xaa\xc6\x4f\x7a\xba\xbf"
- "\x90\xf0\x75\xb0\xa8\x99\xb5\xcc\x72\xc8\xe9\x35\xc6\x49\x1b\xdd"
- "\xa6\x0e\xd6\xf1\x00\x7d\xa7\xb9\xee\x9e\x41\xf2\xc0\x8e\x17\x3c"
- "\xb4\x6f\x0f\x64\xc6\x3e\x48\xbc\xbe\xa0\xc5\x3b\xb6\x4c\x47\x3e"
- "\xc4\x25\xbc\xd6\x13\x30\xd6\x94\xb0\x69\xd2\x96\x6a\x87\xb0\xd1"
- "\x45\x77\xd6\x6f\x4c\x64\x96\x1b\x6b\x59\x4a\x5f\x65\x87\x1b\xfc"
- "\xa5\xd4\xcb\xa5\xfa\x37\x9e\xcb\x20\x7f\x0e\xfb\xfa\xbd\xa3\xe4"
- "\x58\x7d\xfe\x08\xc2\x29\xe1\x70\xc7\x45\xed\x7c\xa8\xcd\xcb\x3e"
- "\x5f\xbc\xa3\x47\xea\xd2\x0b\xf9\x92\xeb\x58\x5b\x58\xff\xe0\xf3"
- "\x47\x64\x5b\x3e\x7f\xe4\xb0\x8d\x91\xec\xfc\xe8\x76\x61\x9b\xfd"
- "\xf3\x54\x2f\x3b\x61\xd3\xe4\x31\x6d\x62\x5e\x11\xbd\x5b\x45\x3c"
- "\xd8\x17\xee\xf5\x48\x47\xfb\x04\xe8\xa3\x34\x49\xc3\x1f\xeb\x52"
- "\x31\x7f\x22\xfa\xff\x36\xc9\x1b\x87\xc5\x89\xcf\x31\x26\xf2\x6c"
- "\x38\x66\x15\xfa\x2c\x1b\xce\xed\xc2\x33\x86\x6f\xf8\xb0\x0d\xcf"
- "\x58\xc4\x7b\xf1\x34\xe3\xd9\x8e\x67\x22\xbe\xbb\x68\x5e\x82\x87"
- "\xb5\x90\x8f\xca\xde\xf8\x63\x96\x91\xee\x45\x11\x6c\x3c\x6b\xfe"
- "\x85\x49\x9d\xbd\xce\x34\xf2\x4f\x98\xbe\x8d\xb1\xa2\x20\xef\xb7"
- "\x5e\x4f\x3e\x46\x3a\xd3\xca\xb6\xd1\x59\x7a\x67\xe2\xd0\xb3\xf4"
- "\xce\x59\xf8\x21\xd4\xd9\x8c\x5f\x00\xbf\xb4\xf0\xef\xe4\xac\xbe"
- "\xca\xce\x34\xc0\x51\xd0\x58\x57\x86\x13\x29\x3f\xc6\x81\xf8\xa2"
- "\xf8\x97\xdd\xb2\xbf\x3d\x0c\xe1\x18\x1e\x7f\x2e\x4d\xeb\xaf\x0f"
- "\x61\xb3\xb5\x0c\xfb\x5a\x3c\x60\x32\x01\x7d\x8e\x3f\xb7\x8b\xfa"
- "\x4b\xed\xed\x8d\xff\xb0\x2d\xf2\x4e\x18\x95\x49\xfd\xf7\xc5\x23"
- "\x1f\x60\xc9\x67\xfc\xdc\xa6\xc3\x53\x83\x13\xdd\x97\x31\xf4\xa2"
- "\x0c\x49\x07\x21\x3d\xca\xd0\xd3\x0f\xc2\x7e\x82\xb0\x4f\xd0\x45"
- "\x75\x81\x27\x8e\xd1\xef\x9b\xf5\x55\x9e\x9c\xf6\x7a\x3e\xd3\xec"
- "\x79\x74\xa6\xf9\x23\xf2\x92\x4d\x85\xe1\xf2\xa3\xce\x18\x59\xe7"
- "\x87\x6d\xa7\x58\xe7\x3d\xb2\xde\x93\xd6\x91\xd6\x92\x73\x0a\xe8"
- "\x3b\x50\xbd\x33\x25\xdf\x37\xc7\x93\xe4\x67\x9e\x3a\x15\x7b\xfe"
- "\x87\xc0\x47\xdc\x7d\x8a\x9d\x3c\xd1\x1a\xe8\xba\xc2\xfd\xf0\xa4"
- "\xb0\x17\xc2\xfb\xcb\x99\xa7\xf4\x56\x71\x9e\xd5\xc3\xbe\x88\xf7"
- "\xf8\xc4\x9d\x73\xbc\x9f\x0a\xd1\x77\x3a\x43\xa7\xbd\x01\x3c\xf6"
- "\xa0\x9f\x0c\x15\x69\xb7\x53\x3c\xe2\xc8\x26\xc9\x8e\x88\x6f\x7c"
- "\xe3\x07\xed\x72\x4d\x9d\x7a\x9b\x68\x0b\xd1\xde\xe0\x7d\x6e\x6a"
- "\xb3\xea\xfa\xa0\x9d\xfa\x50\x06\xfe\x8f\x7c\x83\xd2\x9a\xb0\xae"
- "\x20\x59\xe1\xa9\xe7\x31\xef\xb8\xba\xe1\x83\xf6\x2b\xeb\xc3\x29"
- "\x71\x57\xb2\x2c\xc8\x7b\x7c\xf1\x1f\xb4\x13\x4d\x52\xe3\x1c\x15"
- "\x33\xb7\x8e\xbb\x7b\x13\x3e\x04\x8e\x3d\xd5\xfc\xba\x43\x8e\xcd"
- "\x15\x96\xdb\xac\xf7\x7d\xbb\xd6\x77\xc4\x89\x33\xaa\x99\x5b\xa4"
- "\xff\x10\x2f\xfb\x82\x8d\x28\xb3\xc2\x38\x13\x3d\x80\xbd\xe1\xa2"
- "\x84\xc5\x17\x19\x83\x7b\xc3\x15\xb5\xe3\x8b\x11\x6d\xf9\x47\xd4"
- "\x31\xa0\xd5\x71\xe0\x7f\x58\xc7\x81\xcb\xd5\x21\xcf\xcf\xbb\xd2"
- "\xae\x9c\x77\xec\x12\x76\x75\x80\x3f\x7d\x12\x67\x7e\xb9\x3f\x04"
- "\xfe\x2d\x68\xee\x21\xfd\x90\x32\xd2\x95\x25\x5f\x2a\x41\xd7\xcb"
- "\xee\x23\x8e\x7e\xe6\x5e\xf1\x3e\xeb\x64\x5d\xc2\x7e\xdf\x11\x3b"
- "\xf1\x6c\xe7\xd2\x06\x36\x7e\x98\x31\x60\xf8\xc2\x45\xf0\xde\x86"
- "\x71\xd8\x1a\x31\xcf\x5a\xfd\xef\x33\x4f\x36\xc9\x57\xdb\x48\xae"
- "\x8d\x35\xdb\xc3\x54\xe0\x06\xd0\xe8\x21\x01\x0f\xd0\x2f\x92\xdf"
- "\xfa\xa4\x4b\xf0\x5b\x3e\x61\x33\x79\xac\xf0\x91\x52\xb9\xd7\x4e"
- "\xb2\xef\xd0\x40\xa6\xb5\xaf\x92\x65\x90\xef\x14\x92\x3b\x73\x73"
- "\x51\x5e\x7a\x30\x8a\x0b\x7e\x0a\xb4\x3f\xf9\x4e\xf1\xf8\xbd\x2c"
- "\x04\x3a\xba\xee\x02\x4b\xac\x03\xed\x09\x9c\x6d\x26\xbc\xbe\x43"
- "\xf3\x9f\xb2\xfe\x42\xd8\x7f\xca\x76\x92\xf5\xb4\xe3\xfd\x02\x33"
- "\x86\x36\x7c\xd2\xb5\xf5\x02\x4b\xde\xb6\x82\xa5\x6c\x25\x59\xde"
- "\x97\x92\xf6\x11\xba\xed\xe4\x4b\x65\x59\x0a\x9d\x25\x84\x69\x1f"
- "\xb2\x91\x10\xc6\x5b\x46\x21\x03\xb9\x22\x78\x7f\x29\xf6\xc1\xa0"
- "\xeb\x98\x35\x68\x3e\xb7\x0b\xb0\xc3\x5e\xd6\xd5\x00\xf8\x4d\x1b"
- "\x6e\x6c\x75\x1d\x99\xda\x08\xff\x37\xaf\x27\x4b\xfc\x8e\xb2\xfc"
- "\x23\xcd\x89\xd0\xd6\x4c\x36\xb3\x9b\xa5\xca\x73\xfb\xab\xb0\x27"
- "\x9e\xce\x24\x9d\x46\xe7\x93\xcc\x12\xda\xba\x58\x29\xfb\x35\x8b"
- "\xf2\x04\xd3\x18\xfd\x9c\x5f\xf1\xae\x99\xf9\x2c\x95\xce\x1f\xe8"
- "\xac\xc4\xfa\xb4\x48\xff\xcd\xe4\x52\x96\x1a\x59\xf6\x93\xc5\x85"
- "\x4b\x6f\x49\xfd\x69\xae\xf5\xf1\xa5\x85\x4f\xae\x5c\x52\x98\xcb"
- "\x16\x48\x55\x10\x61\x8e\xbe\x98\xf4\x40\x56\x2e\xb5\xe7\x59\x1f"
- "\x5b\x5e\x58\x98\x5b\x60\xb7\x3e\x30\x37\xe3\xeb\x36\x49\xb7\x5a"
- "\x76\xd2\x59\x8f\xd4\x0b\xec\xbe\x8a\xff\xc7\xb7\x2e\x54\x93\x7f"
- "\xad\x8a\xf9\x8b\x4c\xc1\x05\x56\xe9\xe7\xa8\x7b\x31\xe9\xe2\xf2"
- "\xb2\xcc\x2d\x92\x4e\xed\x7e\x44\xd2\xf6\x25\x56\x79\x8f\xae\x5b"
- "\xda\x01\xec\x5d\x90\x24\xd7\xd4\xdf\xee\x8a\xb2\x31\x7a\x7f\x92"
- "\xde\x4d\x36\xb6\xd6\x3d\x81\xce\xc3\xff\x26\x6c\x34\xf2\xad\x0b"
- "\x15\x3d\x9d\x9e\x46\xfb\x2e\xec\x4e\x6f\x27\xbb\xba\x95\xa7\x73"
- "\x00\x9f\x84\xbe\xca\xbf\x2d\xf2\x1a\xb3\xdc\x1a\x8d\xd0\x25\x75"
- "\x10\xbb\x17\x93\x8d\x4e\xfe\x1f\x13\x2f\x68\xe5\xac\x43\x7d\x57"
- "\x23\x2d\x78\xb1\xd3\x31\x9a\xae\xe2\xe4\x0e\xad\x5d\x52\xa7\xe2"
- "\xf4\x0a\xa9\x53\xf1\xb7\x9d\x11\x77\xe1\x85\xad\x09\xda\x1b\x35"
- "\x9a\xb4\x4f\x2b\xaf\x59\xc7\x09\x48\x7f\x14\x74\xdd\x96\x2b\xc7"
- "\x85\x7f\x93\xfc\xcf\x10\xdb\x4b\xdd\xf3\x87\xda\x34\xd1\xe1\x66"
- "\xf9\xad\x94\xc5\x4b\xb8\xa2\x0f\x07\x25\x9c\x44\x7c\xd2\x69\x84"
- "\x29\x9f\x97\x75\x27\x5d\x3a\xbf\x06\x47\xfc\xfe\x82\xc7\x96\x3d"
- "\x69\x5b\x62\x5f\xfa\xe8\xd2\xfc\xa5\xf6\x62\x71\x65\x7f\x9a\xf8"
- "\xf7\xbd\xa9\x39\x8b\x2e\xb5\x3f\x9f\x42\x32\x19\xcd\x6e\xb5\x9f"
- "\x74\x20\xa4\x5c\xac\xfb\xab\x60\x25\xbb\xfb\xca\xfa\xd9\x2d\xda"
- "\x5a\x27\xec\x78\x9c\x61\xde\xa8\xb1\x07\xb5\xf3\x91\x6e\x6d\xac"
- "\xc4\xf7\x5e\xf3\x39\x97\x75\x02\x9b\xd3\xc1\x7c\x07\xe8\x5c\x0c"
- "\xf0\xf6\xd2\xfe\xb9\xbe\x84\xf6\xb9\x36\x76\x24\x88\xbd\x54\x9c"
- "\x95\xf7\x8c\x25\x98\x11\x0d\x09\x18\xed\xec\x60\x67\x96\x0b\x58"
- "\x9c\xb5\xec\x14\xb6\x39\xce\x5a\x7e\x4b\x73\x91\xda\xac\xf2\xcc"
- "\xad\x9c\x67\x3e\xa7\x9e\xcd\xdb\xca\xcf\xe6\x3d\x17\xb6\x7d\x79"
- "\xc6\x8b\xbc\x7b\x90\xf7\x24\xf9\xb6\xaa\xee\x61\x7b\x08\x4f\x52"
- "\xd8\x64\x37\x83\x37\x3c\xd6\x4e\xed\xf1\xf8\x52\x99\xbc\xaf\x7f"
- "\xc6\xeb\xf1\xdf\xca\x40\x7b\x7a\xc5\xfd\x50\x71\xbe\x07\xfa\x10"
- "\xf9\x3c\x68\x97\xc7\xd7\x4f\xb4\x48\xbb\x0a\x1a\xd1\xcb\xce\x98"
- "\x81\x2f\x2d\x54\x2e\xf5\x79\x1b\xe6\x24\xe9\x69\xa0\xef\xa0\x63"
- "\x4e\xd7\x69\x77\x83\x3b\xd7\x23\x9e\x60\x30\x74\xfc\x7b\xa6\xd0"
- "\x38\x02\xc6\xdf\x09\xcf\x81\x1e\x61\x23\x6a\x61\x27\xff\x8c\xbb"
- "\x96\x38\xe4\x78\xf7\xdc\xaf\xc5\x9d\x0d\xdb\x0b\xe8\x79\x04\xe1"
- "\x01\xfc\x54\xee\x7a\x74\x4b\xc4\xd9\x34\x7d\x13\x36\xbd\x48\xef"
- "\xc4\x56\xc2\xae\x47\xfe\x0d\x72\xee\x3d\xfa\x1f\xbe\xb2\xbc\x28"
- "\xe4\x09\xd1\xfd\x56\x0d\xbe\xfb\x3d\x6b\x7a\x74\x5d\x0f\xb4\xe9"
- "\xec\x0f\xdc\x8f\x07\x99\xf0\x5f\xdf\x19\x14\xfa\x90\x9a\x8d\x08"
- "\x45\xad\xec\x26\x7d\x35\xb2\xaf\x16\xbb\x2d\x41\xfa\x7e\xe8\xab"
- "\xec\xe9\x1c\xd4\x49\x32\x4b\x9a\x91\xe8\x36\xf2\xe9\x47\xeb\x87"
- "\x68\x40\x6a\x13\xad\x1f\x94\x6d\xa6\x73\x6e\xb9\x8e\xce\x26\xfd"
- "\xcf\xd6\xd1\x59\x31\xe7\xd1\x6e\xf0\x9c\x65\x7c\xe6\x3a\x96\x2d"
- "\xf4\x10\x82\x7e\xba\x97\x6c\xc4\xde\xb3\x58\xe2\x24\xdf\x7a\xa1"
- "\xab\xb2\xa2\x9b\xfc\x19\x97\xef\xe8\x67\xb1\xaa\xab\x28\x9b\x68"
- "\xf5\x23\xa5\x42\x7f\x23\x06\xf9\x1a\x48\xbf\x83\x74\x0c\xe3\x84"
- "\xcf\xc8\xf7\xd9\x8e\xf3\xcc\xd8\xc9\xce\xd6\xd1\x79\x52\x18\xd6"
- "\x67\xbf\xa2\xf3\x43\xbe\x31\xdb\x6c\x2a\x35\xac\xa5\x32\xd4\x0b"
- "\x67\x66\xeb\xf9\xc8\x37\x39\xe5\xeb\x60\x67\x3f\x10\xf9\x28\xad"
- "\xb0\x25\x62\x5e\x8c\x7d\xdb\x4a\xe9\x83\x08\x6f\x57\xcd\x19\x1c"
- "\x7b\x4a\x68\x45\xb0\x01\xdf\x16\xa9\xae\x0f\xdb\x10\x97\x29\xce"
- "\x31\x06\x2c\x74\xbe\x89\x39\xb7\xbf\xc1\xe3\xfd\xc2\x2d\xda\x43"
- "\x77\x95\xed\xd8\x7f\x05\x6f\xe3\xfb\xe6\xf6\x2f\x99\xd1\xf6\x38"
- "\x8d\xa7\x4f\xda\x00\xee\x61\xbb\x64\xfb\x7c\xaf\xf6\x6e\xcc\xcb"
- "\xe8\xc5\x7c\xf5\x1b\x62\xd8\x61\x0b\xe9\xd8\x9f\x73\x1d\xb6\xf4"
- "\x63\x7c\x7c\x6b\x80\x2f\xcb\x25\x5d\xed\x1b\x5c\x9b\x34\x47\xa3"
- "\x2c\xe6\x32\x7c\xdf\xa9\xeb\x34\xd1\x3c\x5d\x27\x6c\xbc\x9f\x2d"
- "\x25\xb8\x61\x6e\xcf\x3a\x92\x1f\xb6\xb1\xdc\x2b\xef\xf5\x99\x91"
- "\x67\xf0\xfe\x6f\xe8\x82\xda\x82\x76\x90\x2d\x1a\x47\x68\x85\x7a"
- "\x9c\xce\xdf\x1f\x3c\xaf\x72\xba\xf3\x40\xf7\x57\x88\x77\x4a\x77"
- "\xf0\x5e\xe2\x05\xe9\xae\x18\x9d\xbd\xd3\x5d\xfa\xf0\x3a\xf9\x2a"
- "\x59\xbf\x53\x4f\x6b\x84\xda\x40\xf7\xc1\xaa\x9f\x10\xeb\x94\x68"
- "\x9c\x58\x71\xfe\x10\xf5\xb3\x2f\x1f\xf4\xa3\xcc\x1e\x71\x6e\xd6"
- "\xbb\x5d\x2b\x87\x6c\x66\xa1\x8c\x3c\xbd\x0c\x95\xf4\x87\x0b\x85"
- "\xfe\x9e\x57\xe6\x97\xba\x46\x0f\xfa\x55\x71\x8f\x87\xf2\x4b\x1d"
- "\xa0\xaf\xea\x06\x75\x50\xc5\xdd\x9a\xaf\xf6\xe8\x3a\x66\x78\x1f"
- "\xbc\xff\x45\x30\xed\x75\x1d\x6b\xf7\x03\x3f\xf8\x5d\xc7\x2c\xf8"
- "\x06\xfc\xff\x65\xdb\x65\xe5\x21\x64\x47\x61\x39\x33\xa8\x09\x45"
- "\xeb\xc8\x46\x06\x69\xdb\x4b\xbd\xf7\x73\xb7\x6b\xf6\x32\xa2\x7a"
- "\xd8\x57\x5f\x85\xcf\xe1\x43\x9a\x0c\xf9\xdc\x62\xc9\xc3\x9c\x5b"
- "\x2c\x64\xc8\x1b\x8f\xb9\xff\xb3\x24\x60\x68\x28\xf1\x1a\xa4\x3e"
- "\xde\xb9\x0c\x2f\xeb\x5f\x13\xd6\x05\x3d\x67\xa6\xb2\x86\xa7\x39"
- "\x8b\x1d\xb2\xcc\x5e\x61\x3f\x24\x2c\x13\xe8\x15\xf7\x9f\xe8\xcc"
- "\x5c\x25\xfa\x31\xe1\xe5\x36\xd2\x91\xf2\xd8\xce\x91\x2c\x39\x5a"
- "\xca\x27\x64\x1a\x4d\xcf\xf3\x9a\xd3\x43\xc3\x09\x14\x96\x30\x3b"
- "\xe7\xd5\xcf\xa5\xaa\x0d\x2a\xf9\x1f\xe4\x65\xf5\xc0\x97\x36\xbf"
- "\xb0\xd3\xe0\x01\x3d\x8a\x3a\xb8\xad\x90\xee\x52\xf6\x8e\x23\xfb"
- "\x0d\x72\x6d\xf6\xfe\x42\xb4\xa9\xf2\x6e\x5e\x46\x3c\x99\x8f\x7c"
- "\x1d\x9d\x63\x48\x17\x8f\x74\xf7\x34\x95\x76\x93\x8e\xd9\x22\xf2"
- "\x63\xdb\xa9\xd5\xed\x8b\x2f\x76\xdc\x18\xcb\xb2\xfb\x2a\x7b\x17"
- "\x79\x59\x53\xdd\x95\xe3\x8d\xde\x45\x97\xa3\xcf\x25\xbd\x98\xc6"
- "\x46\xe2\xf1\x49\x86\x33\x03\xf5\x3f\xc0\xa9\xfd\xfe\x7b\x82\x86"
- "\x00\x1b\x30\x8c\xe6\xdf\x2a\x77\xb0\x60\xe5\x68\x1e\x2a\xc1\x78"
- "\xf5\x5a\xc0\x03\xb6\xb0\x56\xa9\x77\x43\xba\x03\x26\xa7\x9f\x9f"
- "\xf3\x04\x0f\xd0\x19\x02\xd1\xef\xc0\x5b\xfe\x3b\x3c\xc1\x57\x19"
- "\xe9\x77\x13\xbe\xe9\x60\xfe\xa9\xd4\xae\x19\xb6\x72\x36\xbd\x87"
- "\xbe\xf7\x76\xca\x3d\xdf\x9f\xa6\x3d\xcd\x64\x1f\x38\xb2\x4d\xdf"
- "\x5b\x5e\xf0\x18\x19\x99\x9e\xbe\x30\x77\x45\x6e\xbe\xf5\x21\x32"
- "\x41\x7d\xa9\xde\x68\xd8\xcf\xe1\xf9\x58\xda\x5f\x89\x7e\x27\x7f"
- "\x87\x97\xf3\x75\xa8\xfb\x39\xc4\x9a\x4b\x26\x99\xf7\xff\xa5\xaf"
- "\x43\x9d\x3e\x27\x3f\x87\xe1\xf3\x9f\xf3\x2d\x83\x6b\x40\x3d\xd4"
- "\x47\x61\xb1\xa7\x57\xfa\x17\xd2\x3a\x92\xfb\xcb\xf9\x79\x91\xb6"
- "\x8a\x24\x7d\xb6\xbf\x01\xf1\x8b\xf5\x3b\xaf\x98\x8b\xb1\x08\xe7"
- "\x87\xef\xd8\x9c\x77\x60\xbc\x1b\xe5\xfa\x15\x69\xd7\xea\x7a\x12"
- "\x9a\x4f\x7b\xa1\xd7\xa1\x56\xdd\x5e\x2a\x65\x93\xe7\xd7\x6f\x57"
- "\x47\xc7\xc8\x73\xb1\xf3\x07\xf4\x3b\x5c\x72\x6d\x1e\xd2\xd6\xe6"
- "\xf9\x96\xcb\xe9\xb2\x84\xd7\xc6\x85\x98\xf0\xba\xfe\x4c\xcb\x7b"
- "\x21\xe6\xef\xe9\xc1\x68\x3c\xe2\xb8\xd3\x2c\x30\x89\xe4\x95\xf2"
- "\xce\x76\x40\xd8\x17\x92\xf6\x38\xfa\x4e\x68\xef\xa8\xa3\xef\x6d"
- "\xed\x7d\x22\xde\xf7\x6b\xef\xa0\x17\xfb\x9e\xd5\xde\xb1\x66\xfb"
- "\x2a\xb4\xf7\x44\xbc\x2f\xd5\xde\xb1\x77\xf4\xfd\x40\x7b\x1f\x8f"
- "\xf7\x3b\xb4\xf7\xeb\xf0\x3e\x45\x7b\xc7\x1a\xec\x13\x67\x06\x68"
- "\x7b\x0c\xda\x7e\xfe\xca\x79\xd6\x0b\x6e\x79\x6e\xdd\xc7\x40\x0f"
- "\xd6\xca\xbd\x67\x30\x2e\x11\x73\x3a\x47\x87\x2f\xe2\x1b\xa9\x1e"
- "\xc4\x4f\xf3\x32\x6f\x5b\x44\xbc\x66\xbf\xad\x6f\x9e\x97\x7d\xe5"
- "\x8d\x88\xaf\xd3\xe2\x17\x83\xe7\xf6\x47\xc4\xbb\xb4\x78\x3b\xf0"
- "\x62\x5e\x44\xfc\x1a\x2d\x7e\x9d\x97\x7d\x62\x8c\x88\x77\x68\xf1"
- "\x3b\x75\x1d\x1e\x2d\x3e\x5f\x8b\x3f\xe8\x65\xef\x1f\x88\x88\xcf"
- "\xd6\xe2\x81\xff\xcf\xb7\x47\xc4\x0b\xbc\x22\x6d\xb2\x9b\xf8\xe1"
- "\x52\x5a\x5b\x7d\x01\x2f\x6b\xdf\x19\x91\x66\x81\xcc\x1b\x30\x7b"
- "\xd9\x87\x2d\x11\xf1\x73\xb4\xf8\x14\xaf\xf2\x8d\xc8\x32\x53\x47"
- "\xc2\x55\xca\x16\x96\x3d\x92\x5c\x9f\x78\x20\xa1\xcb\x2c\xe8\xec"
- "\x8b\xb9\x74\x27\xcc\xb4\x8d\x77\x58\x9d\x9c\x77\xb0\x8b\x0b\x35"
- "\xdd\xdd\x0c\xd2\xa3\x94\xf7\xeb\x2e\xce\xd2\x6c\x2b\xf8\xc4\x9d"
- "\xbb\x12\x8a\x0b\xbc\x22\xe4\x33\x8e\x72\x69\x2f\x5c\xf7\x3d\x43"
- "\xf2\x2d\xed\xec\x1f\x69\xc8\x56\x2c\xe9\x82\x77\x93\x0c\xdc\x63"
- "\xef\x97\xb6\xe4\xc1\x07\x53\x1c\xc9\x79\x08\x1e\x91\xf2\x2c\x89"
- "\xf7\x2f\xe6\xaa\xfd\x74\xaf\x55\xca\xc2\x68\x2d\x52\x7a\xd2\x57"
- "\x8b\x4c\xeb\x65\x17\x85\x5d\x8a\x28\x4b\xfc\xb1\xbe\xca\x8b\xf3"
- "\xc2\xf7\x89\x02\x75\x5a\xfc\x07\x88\x5f\x1c\x11\xbf\x76\x64\xdc"
- "\x0e\x7c\x67\xce\xce\x1c\xb8\xc0\xfd\xc1\x0b\x3c\x50\xfd\x57\xb4"
- "\xfb\x71\xa1\x23\x78\x7d\xc8\x95\x9d\x47\xf7\x6d\xc8\x47\x6c\x70"
- "\x05\xf7\x91\x4e\x24\xe2\xaf\x7e\xd0\xef\x03\x8d\xd1\xc7\xd7\x3f"
- "\x4a\xfa\xaf\xe7\x19\x9d\xcd\x96\x75\x93\xbf\x41\x13\xa7\x7b\xdc"
- "\xab\xce\xb0\x58\xba\x8f\xb3\xfd\x71\xfa\xfe\x29\x7b\x20\xcf\xc7"
- "\x8e\xe4\x85\xd8\x76\x94\xbd\xed\x51\x9d\xbe\xb8\x18\x0c\xdf\x15"
- "\xce\xa6\xb3\xec\xeb\xcb\x84\x4f\xec\x7e\x61\xab\xdc\x54\x41\x3a"
- "\x05\xe7\x1a\xf9\x1b\x44\x1b\x7f\xe0\x35\x55\x30\x2b\xf6\xf6\xd9"
- "\x78\x6f\x93\x3f\x7c\x43\xfc\x48\x7d\x92\x6b\xb9\xdf\x2e\x71\x4d"
- "\x76\xbb\xc4\x17\xfd\x76\xfe\x1b\xba\x7f\xd2\xef\x00\xbe\x69\x04"
- "\x1d\xde\x38\x5c\xfe\x55\xdb\x98\x61\x60\x23\x68\x93\x9e\x46\x83"
- "\xc4\x4f\x03\x39\xaa\x21\xa6\x82\x64\xed\xc2\x1f\xee\xc6\xa2\xba"
- "\x3d\x05\x01\xc3\x91\x92\x4e\xf6\xf4\x75\xcc\xb2\x38\x60\x40\x9a"
- "\xfe\x93\x71\x76\xb2\x69\x7e\xcc\x0d\x7a\xd6\xf0\x12\xbe\xbf\x56"
- "\xd0\x68\x08\x0a\x7a\x65\x20\x47\xc8\x67\x5d\x45\x36\xda\x43\x3c"
- "\xed\x21\xa2\xc5\x63\x41\x8b\x67\x03\xff\xc7\x84\x56\xe6\x25\x04"
- "\x8b\xf2\xae\xde\x56\xc8\x62\x43\x45\x29\x89\xcf\x5c\x60\xb3\xf5"
- "\xfd\x67\xdb\x0a\xec\x29\x7d\x96\x31\x35\xd8\x53\x48\xee\x13\xa7"
- "\x98\xc5\x39\x34\xbd\xab\x86\xbf\x9a\xb7\xaf\xb8\xbc\x6f\xef\xd0"
- "\xca\x14\x61\x6f\x82\xda\x32\x5c\x5f\xd7\x3d\xc7\x8c\x21\xed\x5e"
- "\xaa\xf3\x24\x1b\x0f\xfa\xd9\x10\x77\x9e\xbb\x4f\xe7\x33\x03\xf9"
- "\x43\x76\xe6\x0a\xd9\xea\xa8\x23\x79\x41\xe6\x71\x7c\xcc\x9c\x85"
- "\x34\x46\x03\xaf\x10\x9d\x46\xfa\xcc\x48\x6f\x3e\xcd\x06\xde\x36"
- "\x05\xb0\x67\x04\x40\x93\x3f\x41\x7c\xf1\xc0\xa7\xd2\xbe\x45\xd0"
- "\x4a\xf7\x48\xdd\x85\xf7\x52\xdc\xc5\xb2\x93\x42\x6f\x68\x91\x5c"
- "\x5b\x03\x47\x29\x5c\x46\xf7\x64\x13\x1c\x75\x7b\xfb\x03\xa3\xa4"
- "\xfc\x6e\xe0\x03\x6d\x7f\x68\x90\xbc\xdd\xc0\xd1\x91\xe6\xae\xea"
- "\xca\x71\x70\xf2\x05\x59\x47\xf4\x2b\xf7\x8a\x33\x7e\xb2\x19\xe0"
- "\xb8\xdb\xcd\x81\xee\xa4\x2d\xa3\xe0\xb3\xea\x86\x1c\x87\xb4\x21"
- "\x19\x94\x77\xf3\x85\xbc\x3f\x67\xad\x3c\xdf\xc8\xd9\x22\xe5\xfd"
- "\x39\x24\x2f\x07\xfe\x09\x6e\xe9\x8d\xcf\x01\x7d\x1b\xcc\xef\x4d"
- "\x58\x35\xec\xfc\x92\xfb\xd1\x92\x5d\xd6\xeb\x59\x22\x9d\x33\x65"
- "\x85\xa4\x2d\x56\xb9\x86\x43\x75\x7c\x83\xf8\x36\xb9\xc3\xc6\xa2"
- "\xa4\xbd\xe3\xe0\x97\x33\xeb\x98\x15\x6d\x1d\xcb\xcd\x39\x99\x42"
- "\xef\xd1\x95\x93\xe7\xe9\x26\x3f\x55\x21\x26\xcf\x03\x43\xbb\x78"
- "\x7c\x4e\xa6\x4c\x1f\xba\xa3\xb5\x1b\x7d\x30\xe7\xa4\x78\x02\x67"
- "\x34\x9a\x30\x84\xb9\x9f\x93\xc2\x5d\x39\xb3\xe5\x7d\xf3\xd0\x2f"
- "\x74\xbc\x2a\xe7\x68\x68\x95\x84\xdb\x92\x5d\x12\x6e\xa1\x5d\xda"
- "\x7e\x35\x99\xde\xb1\x77\xa7\x4a\xfd\x95\x90\x5d\xa7\x91\xbd\x5a"
- "\x1a\xca\x83\x77\xcd\xce\x67\xa8\x16\x7d\x9f\xa6\x7d\x9f\x4d\x71"
- "\xe8\x1f\xf6\xac\x60\x1b\xf5\x6b\x24\xdc\x2a\x60\x51\xca\xa2\xd0"
- "\xe6\x05\xa4\xeb\x4d\x74\x8a\xc7\x7f\xb7\xdb\x23\xc6\x80\xdf\x42"
- "\xba\xfd\x54\x0f\xd9\x1b\x22\xbc\x89\x32\x8d\x54\x5e\xb8\xfd\xea"
- "\x38\xbd\x2d\x54\x1f\x7d\x43\x5f\x53\x04\x5f\x8d\x3e\x53\x1a\x1a"
- "\xd7\x53\x36\x92\xfb\x9d\x07\xcc\x48\x87\x8e\xa7\x11\x4c\x24\xcc"
- "\x78\x92\xc6\xd3\x6b\xe3\xc0\xe3\x87\xc2\x43\x86\x55\x33\x70\x43"
- "\x21\xe9\x52\xf1\x34\x0d\x7e\x9a\x8f\x15\x55\xd8\xa2\x95\xdf\xd4"
- "\xe7\x23\xf2\x4e\x1a\x4c\x8b\x76\x13\x6d\x44\x7a\x09\x74\x4e\x25"
- "\xe7\xab\xda\x16\x91\xaf\x2d\xeb\x2b\xa2\x91\xb3\x53\x56\x6f\x16"
- "\x3e\x2b\x53\xfb\x2a\xd5\xce\x30\xbc\x65\x39\xc3\xd4\x71\xbd\x5e"
- "\x87\x97\xa9\x3b\xf5\x76\xe2\x5d\xdb\x83\x79\x4a\x78\x4c\xd4\x05"
- "\x7a\x3e\x92\xe9\x60\x8c\xfc\xe4\x3f\x76\x04\xbf\x18\x8a\x07\x50"
- "\x69\x0d\xde\xed\x16\xf3\x91\xf1\x7a\x92\x5d\x02\xae\x0b\xe4\x1c"
- "\xe2\x6b\xe4\x5e\xc8\xeb\xa9\x4c\x3a\x6b\x94\xf6\x46\xf9\x16\x94"
- "\xab\xdd\x59\xe2\x7b\xb4\x36\x80\xff\x0b\xee\xbc\x94\xaf\xbb\x77"
- "\x49\x8e\x35\xe3\x16\x71\xe7\x76\xfa\x72\x1b\x5d\xa7\xcd\x09\x07"
- "\x86\xd2\xdc\xe6\xb0\x8d\x33\xf2\x45\xad\xd9\x38\x73\x15\xd7\x09"
- "\xf8\x2b\x6c\x1e\xbf\xc0\x6b\xe9\xee\x08\x5f\xc1\xb7\x54\x63\x0c"
- "\xcb\xce\xb3\x6b\xc9\x2f\xb6\xd3\xc6\xbf\x20\xfb\x77\xc0\x97\x07"
- "\x81\x3f\x48\x9f\x7e\x34\xe9\x25\x11\xfe\x21\xbd\x67\x1e\x8f\xf8"
- "\x0d\x45\xee\xc1\x7b\x78\x8a\x71\x0e\xdd\x1d\xe5\x65\x99\xa0\xa5"
- "\x8b\x8e\xd2\x7c\x20\x1d\xf5\x53\x8a\x31\x09\xe9\x8e\xe2\x9b\x7d"
- "\xbd\x90\x25\xd8\x2d\x21\x73\xb1\xbd\xec\x0c\x8b\x16\x3e\x0e\x1d"
- "\x01\x92\xa9\x19\x3a\x14\xf6\x3c\x8f\xb7\x5b\x10\x1f\x27\xe2\x03"
- "\xa8\x7b\x83\xdd\x82\x6f\x71\xf8\x76\x02\x4f\x15\x65\x38\xaa\xd1"
- "\x6e\xe7\x19\x76\x3d\xda\xd2\xc5\x5d\x76\x0b\xda\x79\xaa\xec\x49"
- "\x36\xbe\xd5\xd6\x45\xfc\x1d\xca\xf3\x4a\xdf\x8d\xc8\xdb\xa1\x28"
- "\xb7\xa3\x5f\x0e\x92\x89\xe0\x59\xba\x1e\x4f\x67\x88\xc5\x39\x57"
- "\x61\xdf\x5b\x85\xfa\xe9\x5e\x2b\xca\x21\x1b\x24\xb2\x2d\xe8\x1b"
- "\xc9\xd5\x50\xee\xaa\x6e\x7e\x0a\x65\x77\x1d\xe9\x46\x79\x8e\xf6"
- "\xc1\x32\x35\x9a\x7a\x32\xfa\x3b\x8e\x6f\x5c\x15\x40\x9b\xb6\x90"
- "\xee\x36\xe2\xcc\x88\x33\x0f\xd2\xc3\x8a\x31\x5e\x7b\xbf\x6a\x30"
- "\x6d\x59\x26\x73\x5e\x64\x42\x87\xda\xba\x32\x8a\x75\x28\x51\xf5"
- "\x64\x07\x2b\x5c\xa6\x61\x12\x95\xb7\x0e\xe5\x95\xe5\xb2\xab\x80"
- "\xab\x63\xd0\x46\xf2\x11\x7d\x42\xc0\x89\xd6\x98\x62\x48\x42\x5f"
- "\x5c\xd4\x27\x15\x63\xb7\x1e\xeb\x01\xfd\x51\xd0\x9f\xab\x56\x85"
- "\x06\xef\xea\x52\x9f\xe2\x89\x9f\xa3\x7e\xc9\x71\xb4\xcf\x42\xbf"
- "\xe6\xac\xca\xe3\x27\xd0\xb7\xae\x23\x79\xed\x0c\x7b\x8f\xa9\xd5"
- "\xd6\x46\x77\x28\x4e\x48\xb8\x75\x91\x0e\xea\x2c\xf4\x73\xce\xa0"
- "\xad\x5e\x25\xea\x59\xbe\xd1\xc9\xd0\xae\x75\x5a\x3f\x29\xae\x76"
- "\x90\xa6\x57\xa2\x36\x69\xef\x63\x06\xd3\x7e\xbd\x9f\x31\x11\xfd"
- "\x44\x7e\xe3\x5d\x54\x9e\xd6\xcf\x31\xe8\xe7\x55\x5f\xef\x27\xe6"
- "\xd3\x0a\xbe\x46\xeb\xe7\x5a\xad\x9f\x06\xf4\x73\x0c\xfa\x39\x21"
- "\xa2\x9f\x09\x97\xf4\x73\x36\xfa\x99\x86\x7e\x76\x44\xf4\xd3\x3c"
- "\x4c\x3f\x67\x7b\xa9\x8e\x0d\xf6\x34\x69\x1f\x8c\x37\x8a\xfb\xef"
- "\x55\x51\x83\xf7\xdf\x55\xba\x77\x79\x41\xd8\x20\x3a\x40\xf2\x1b"
- "\x92\x1b\x11\xaf\x47\x77\x3c\xb3\x8a\xd7\x96\x0b\xd9\xcd\x78\x29"
- "\x9b\x16\xf4\x55\x55\xd4\xe2\xc1\xbb\x1b\x9b\x85\xef\x1a\x3f\xc5"
- "\x0b\x9b\x01\x85\x4c\xc8\x1e\xd3\x8b\x57\x96\x51\x7e\xca\x8b\xf4"
- "\xeb\x06\xef\x98\x29\x06\x9b\x94\x87\x3a\x19\xbd\x93\x2d\x2c\x79"
- "\x26\xc0\x9b\xc5\x99\x40\x55\x54\xd8\xff\xd3\x0a\xde\x44\x70\x11"
- "\xf7\x59\xc5\x7d\x50\xb6\x36\x2b\xb8\x56\xbf\x97\xde\x8d\xb4\x9d"
- "\x11\xf7\xd2\xbb\x45\x1b\xfa\x85\xed\x87\x95\xe9\xc1\x95\xe2\x7e"
- "\x7a\x5f\x95\x31\x26\x5c\xb7\x22\xe5\x2f\x98\xa3\xf4\xee\x93\xb6"
- "\xd9\x48\xc6\x66\x15\xfa\x36\x55\xc6\x59\xba\x8e\x8b\x57\x61\x36"
- "\x5a\xcb\xc3\xfa\x79\xa9\x32\x2e\x1e\x62\x0b\x4a\x19\x45\x76\xde"
- "\x29\xde\x3e\x78\xd7\xbc\xca\x58\xfe\xf7\xee\x9a\x97\xf9\x30\x4e"
- "\x58\x6f\x36\xf2\x79\xae\x18\xc1\xe3\x16\xdb\x85\xaf\x14\x65\xd4"
- "\x24\x6a\x67\x87\x62\xa4\xfd\xc3\x24\xce\x83\x14\xe3\xa7\x1a\x6e"
- "\x6e\x4e\x0f\x05\x4d\x5e\xd4\x29\x6c\x4b\x0d\x86\x8d\x47\xc9\x56"
- "\x06\xf2\x8e\x15\x76\xce\x51\xde\xd0\xf4\xe2\x7b\xf9\x25\xe1\xb4"
- "\x4b\xc2\x56\x3f\x70\xd6\x48\xba\x3c\xeb\x27\x08\x19\xaf\x2d\xae"
- "\x82\xd9\xca\xbe\x64\x51\x98\x8b\x27\xa9\x6d\xad\x5d\xe2\x9e\x9f"
- "\x89\x57\xa6\x32\x4f\x57\x50\xd2\xed\xa0\x97\x3a\x92\x91\xe6\x4b"
- "\x36\x9e\xee\x99\x90\x2f\x19\xa4\x3f\x2d\xfc\xc7\x28\xd1\x2f\x2f"
- "\x5e\x3e\x86\xa9\x3f\xcd\xbc\x9a\x1b\x4a\x1a\x48\x97\xe0\xc5\x7e"
- "\x2f\xf9\x60\x51\x9c\xcf\xb2\x24\xc2\x53\x98\xc3\x9d\xdc\xf0\x74"
- "\x03\xf2\x74\xff\x67\x7f\xd7\x28\x4f\xf0\x63\x66\x03\xfe\x3c\xad"
- "\x44\xef\x32\x96\x32\x63\xcd\x29\x66\xc6\x3c\x0b\x1e\x0e\xce\x66"
- "\xba\xad\x87\xba\x04\x69\x43\xa0\x0e\x73\xb2\xc8\xc2\x03\x7d\x55"
- "\xd1\x46\xf0\xb5\xe5\xba\xfc\x62\x9d\xb4\xf5\x66\x44\xfd\x4f\x09"
- "\xbb\x14\x92\x3e\x00\x6c\xa3\xef\x91\xf7\x4c\x13\x7f\x8a\x3c\xb3"
- "\x07\x79\x1b\x25\xba\x49\xc2\xb0\x78\x8b\xdc\x47\xa2\x9b\x0e\x83"
- "\x3b\x5a\x23\x75\xa2\x12\x91\x36\x67\x50\x27\x8a\x64\x82\xf8\x8e"
- "\x31\xdc\x22\xf9\x9e\xe2\x2d\x59\xa1\x18\x6d\x8d\x53\x7c\x76\x0a"
- "\xe5\x45\x3e\x93\xf0\x73\x59\x15\x5d\x1f\x9e\x6b\xd1\x79\xb4\x9f"
- "\xa2\x4f\xb1\x18\xd7\xe3\xd4\x2f\x82\x89\x9f\xec\xba\x29\xa3\xbc"
- "\x87\x77\x8e\xe0\x07\xc9\x9c\xdd\x1e\x14\xf2\xa5\x63\x8d\x98\x4f"
- "\x67\x30\x06\xd7\x90\x6d\x2b\x0f\xea\x39\xb2\xbd\x9f\x1d\xb1\xf4"
- "\xb2\x56\xbc\xd3\xdd\x07\xf7\x13\x9f\xb3\x4e\xeb\xf0\x7b\x39\xe8"
- "\x81\x4c\xb4\x39\x8f\xca\x22\x5c\x43\xfa\xa2\x64\x83\xb0\xd5\x87"
- "\xb2\x3a\x99\x28\xe3\x88\xda\xc5\x8e\x38\x88\x87\x3d\xd7\xd8\xba"
- "\xfd\x63\xd6\x6a\xf9\x8b\xa8\x87\xe8\x6d\x77\x61\xef\xe5\xca\x76"
- "\xa0\xec\xb5\x5a\xd9\xdd\x28\x3b\x71\xe4\xb2\x3f\xf0\x5e\x61\xd9"
- "\x57\xd0\xee\x0f\xda\xae\xa4\xec\xb2\x2d\x3c\x04\x3c\x3c\x16\x7b"
- "\x7c\x36\xd9\x67\xa5\x3b\xae\xa1\x0b\x64\x93\x66\xb2\xe0\xd5\x4f"
- "\x29\x31\xdb\x08\xdf\x08\xfd\x90\x0d\x45\x8b\xc5\xfd\x57\x92\xb3"
- "\x6b\xf7\x5e\x3d\xc1\x93\x8c\xe4\xee\x7d\x55\x31\x6b\xc3\xbc\xe8"
- "\xe0\xd9\xb8\xd9\xab\xc4\xec\x91\xba\xd6\x45\x8b\xe5\xdc\x8a\x59"
- "\x42\x65\x0d\xcf\x73\xda\xd7\x09\x9d\x7d\x25\xe6\xa4\x2e\xdf\xea"
- "\x8d\xb7\xaf\xd3\xca\xb2\x5e\x2a\x37\xd5\x0c\x09\x59\x73\x1d\x76"
- "\xeb\xca\xc2\xa5\xf6\x5c\xfd\x82\xf6\x18\xf6\x50\xee\x63\xb9\x4b"
- "\x57\xe4\xe6\x58\x17\x2d\x2f\x2c\x98\xbe\xec\xf1\xc7\xad\x0f\xe4"
- "\x16\x15\x2d\xf9\x69\xee\x18\xb6\xa8\x70\x49\x41\xd1\x52\x92\x6d"
- "\x5a\xad\xf3\x6e\xcb\xca\x5b\x66\x9f\xfe\xdd\x79\xa9\x97\xc8\x36"
- "\xe9\xbe\xf6\x71\xe2\x71\xb0\x3f\x8d\x07\x8d\x11\x4f\x76\x89\x4c"
- "\xc5\xdc\xfd\x34\xf8\x6b\xcc\xc1\xd3\xb4\x17\xd2\xfe\x43\xbc\x17"
- "\xd9\x37\x26\x9b\xc9\x5b\x37\xf3\xb6\x53\xca\xc4\x6d\xa0\xdb\xdb"
- "\x11\x47\xf7\x9e\x8f\xf3\xfe\x32\x9f\x38\xcf\x56\x26\x16\x23\x4d"
- "\xd3\xaf\x10\xe7\x8b\x2f\xde\x52\xf3\x57\x66\x94\x34\xc6\x55\x01"
- "\x6e\x18\xcd\xd7\x91\xad\xe1\xcf\x2d\x4c\xb3\x91\x6e\xf0\x78\x03"
- "\xa4\x43\x14\x93\x1e\x2c\xe3\x84\x53\xe5\xfa\xba\xea\xa2\x84\x4b"
- "\x8e\x43\xdc\x65\x50\x26\xfe\x88\x78\xc4\xd5\xe4\x77\xb1\x6a\x0c"
- "\xf0\xff\x80\x2d\x8c\xab\xaf\xd1\x69\x73\xd2\xf1\x59\xd9\x81\xb0"
- "\xb0\xb5\x12\x3d\x66\xd6\x10\xfd\x30\x25\x36\x91\x29\xd7\x96\xca"
- "\x1f\xf2\x28\xd7\xae\x95\x3f\x7a\x8f\xfc\x4d\x9c\x23\x7f\x97\xc6"
- "\xff\x6f\x7f\x7a\xfd\xff\xe3\x32\x02\x7f\xe7\xf7\x0f\xd4\x2f\xfa"
- "\xfd\xff\x63\xff\xff\x37\xf9\xb1\x18\x2e\xf3\xa3\xf9\x86\xb9\x75"
- "\xfc\x57\x7f\x65\x31\x98\x9f\xb5\xeb\x1f\xc5\x9c\xfe\x94\x59\x4a"
- "\x83\xbc\xb3\xec\x11\x96\xe4\xfc\x12\x34\x18\x68\x2d\xbb\x83\x77"
- "\x3a\x2f\xf0\x13\x98\x37\xef\x61\xfe\x36\x56\x77\xb0\xd8\xf5\x1d"
- "\xa0\xb3\xec\xd2\xf7\x0c\x9d\x37\xd1\x3d\x2f\x0f\xc2\x2d\x2b\x02"
- "\xec\x5d\xdf\x57\xa4\x53\xe9\x6e\xcd\x06\xee\x39\xce\x18\xcd\xdf"
- "\xd8\x6c\x96\x58\x37\x9e\x1f\xe4\x95\x7b\x73\xb8\x61\xef\x22\xc4"
- "\x1d\xdd\xa7\xa6\x8d\xda\x57\xd2\x3c\xca\xfa\x28\xed\xf3\xb1\xaf"
- "\x68\x73\xf3\x1e\x71\x8f\x11\x4f\x9a\x83\x9a\x8d\x69\xec\x4f\xd7"
- "\xbc\x2a\xf7\xf4\x6b\xd6\x6b\xf2\x3c\x7a\x17\xf7\x37\xd0\x8f\x46"
- "\x5e\x59\xd2\x40\x65\xee\x55\x1b\x47\xd1\x9e\xb9\xaf\x24\x6d\x54"
- "\xe9\x12\x66\x68\xf5\x9e\x66\x87\x81\x0b\xe9\x7c\x1c\xeb\x6e\x0f"
- "\xd6\x59\xc3\xb6\xf1\xdc\x85\xf6\xad\x03\x3d\xb7\x16\x6d\xda\xd5"
- "\x57\x35\x36\xc5\xab\x8c\xb6\x68\xb4\x9c\x1b\xeb\x62\xcf\x7a\xa4"
- "\x49\x5f\xce\x26\xaf\x47\x3a\xd0\x76\x6b\x89\x47\x91\xed\x8b\x9f"
- "\x02\x18\x1c\x40\x9d\x6d\xd6\x9f\x50\x38\x4e\xd0\x18\x54\x37\xfa"
- "\x61\xed\x50\xe2\x04\xcf\x4f\x75\xe8\xf5\xa2\xfc\xb5\x28\xbf\x4d"
- "\x3b\x63\x74\xc9\x72\xc6\x1e\x90\xeb\xb5\x88\xec\x33\x1c\xd7\xee"
- "\x89\x75\xae\x2f\xc1\xbe\xde\xcf\xc8\x0e\x6e\x2d\xea\x70\x9b\x2a"
- "\x18\x37\xd1\x1d\xe3\xe3\x41\xf0\x35\xaa\xd4\xdf\x55\xe2\x9e\xd5"
- "\xf2\x0a\x3a\x44\xd0\x1e\x21\xd0\xf7\x42\x3e\x03\xfa\x23\x0f\x78"
- "\x02\x34\x87\xb8\x9f\x01\x7a\x83\xe2\x51\x47\x2d\xfa\xd5\x06\xbe"
- "\xf9\x00\xf6\x6e\xba\x23\x1e\xf3\x93\xf3\xdf\x67\x74\xc6\x41\xf4"
- "\x42\x91\x83\x07\x84\x5f\xa9\xaa\xb8\x59\x3a\xbd\x40\xf3\x83\x68"
- "\x84\xf5\x3f\x61\xc6\x01\x8c\x31\xe6\x48\x33\xe8\x0f\xd0\xf4\x71"
- "\x36\x6d\x6c\x9a\x05\x5d\xa0\xf9\x91\x96\x38\x3c\x6e\x15\xf6\xf7"
- "\x58\xd4\xd1\xec\x55\x26\x0a\x58\x48\x1c\x14\xb7\x4e\xdf\xeb\x49"
- "\xe6\xe0\x45\x19\x1c\xb8\x0e\x70\x3b\x30\x2d\x5b\x01\x1d\x3c\xf6"
- "\x28\xc6\xe2\x00\xa5\x45\x7e\x23\xd2\x1f\xc4\xbe\x3f\x47\x1b\x93"
- "\xe3\xe0\x09\x40\x07\xc4\xcd\xa3\x76\x20\x4f\x0b\x60\x8d\xba\xcc"
- "\x7e\x0d\x8f\x1d\x95\x34\x8c\xf9\x53\x1d\xf6\x18\xeb\x35\x61\xf8"
- "\x9b\x62\x22\xe1\x0f\x58\x48\xbe\x5c\x31\xff\x22\x62\xec\xc0\x97"
- "\x9a\xb3\x49\x0e\x8d\xfa\x0e\x0a\x19\x9a\x62\xba\x87\x6c\xbf\x61"
- "\xce\x1c\x04\x2c\x0e\x22\x5d\x23\xe1\xe6\xd5\x7f\x05\xce\x7d\x94"
- "\x68\x28\xf3\xfd\x92\x46\x35\x75\xd1\x1c\x3e\xa5\x98\xde\xa3\x70"
- "\xa7\x12\xb7\x80\xca\x43\xf8\x15\x3c\x41\xcb\x9a\xf6\x97\xd5\x91"
- "\x7f\x63\x7b\x2a\xd9\x66\x93\x63\x6d\x4f\x45\xbb\xea\xf5\x3b\x50"
- "\x34\x07\x68\xec\xd1\x47\x21\x7f\xf0\x2a\xa6\x7a\x92\x35\x8a\x7c"
- "\x03\x79\xd4\xc6\xe3\xb4\x3e\xf5\xef\x88\xef\x22\x9b\xb9\x11\xb0"
- "\x59\xa0\x8d\x49\xa3\xf0\x15\xaa\x98\xef\x91\x6d\x33\x27\x21\x1c"
- "\x83\x36\x88\x73\x88\xde\x81\xbc\xa8\x1a\xca\xe3\x0c\xe7\xa1\xf5"
- "\x83\xb9\x6c\x42\x9e\x3b\xf0\xe4\x7a\x5a\xb2\x9b\x8f\x76\xb8\x9f"
- "\x21\xdb\x65\x8a\xa9\xbd\x77\x20\xc5\x80\x7a\x03\xa8\xd7\x40\x73"
- "\x83\xe6\x85\x5e\x46\x8d\x84\xd1\x1e\x8c\x9f\x98\x5f\x87\x83\x8d"
- "\x80\xbb\x19\xf4\x7f\x20\x53\xd2\x77\x26\xb7\xd6\x3e\xb7\x38\x1f"
- "\x8c\x8e\xf1\x6d\x97\x76\x86\x28\xdd\xa0\xff\xd7\x30\x9d\x69\x22"
- "\x3b\x43\x31\x28\xab\x45\x9b\x13\x26\xa4\x6b\x1b\x9c\x43\x64\xef"
- "\x40\x31\x67\x10\xad\xa9\xb5\x9f\xe6\xde\xfd\x12\x76\x71\x3e\x9a"
- "\x03\xa0\xe3\xb7\xc8\x71\x8e\x5b\x40\xb4\xaa\x9c\x87\xf1\x89\x7a"
- "\x19\xc2\x66\x02\xe0\xac\xa2\x0c\x7d\xae\x44\xe2\x06\xa4\x4d\x03"
- "\x5d\x3a\x38\x6f\x74\x5c\x20\xcb\x4c\x28\xd6\xe8\x90\x46\x8c\x0d"
- "\xd9\x6b\x77\x0b\x3b\x58\x62\x5e\x26\x2c\x3c\xec\x0f\x12\x7e\x3d"
- "\x8a\x76\x01\x27\xc4\xbf\xd0\x9b\xe0\x8c\x09\xcf\xed\xf8\x2d\xfa"
- "\xdc\x8e\x18\x57\x31\xb7\xd7\x08\x7c\x14\xdf\xe8\x65\xf7\x75\xea"
- "\x73\x9f\xd6\xb9\x8a\x75\x5d\xb3\x42\x9c\x0f\x98\x48\x1e\x28\xd6"
- "\x7d\xa0\x5b\xf0\x18\x34\x9e\xad\x8e\x4e\x61\x23\x7f\xb5\xca\x62"
- "\x5a\xfd\x27\x49\x3e\x72\x9a\xd6\xbf\xbe\xc6\x69\x6c\x50\x97\x9b"
- "\xfc\x18\xac\x01\x0e\xa4\x35\xe8\x47\x9b\xf0\x2d\x86\x6c\xc2\x35"
- "\x2d\x4e\x63\x45\x18\xdb\xc3\xd9\x34\x6e\x09\xb3\xf5\x3b\x17\x35"
- "\x12\x07\xc4\x6a\xf3\x45\xb4\xf1\x12\xb8\x9a\x24\x5c\x13\xf2\x87"
- "\xae\x6f\x73\x2c\xad\xef\x48\xb8\x12\x4c\x09\xb6\x48\x8b\xfe\x8f"
- "\xb6\xeb\x70\x0d\xc3\xf4\x9a\xab\xb4\xf9\xa8\xe1\xd6\x84\x61\x71"
- "\x6b\x8d\xf4\x19\xd1\xb8\x9a\xfa\x82\x3d\x85\xea\x17\xfe\xb0\x34"
- "\xde\xa7\xc9\x47\x73\x2a\x21\xe8\x65\xa5\x69\x3a\x1e\x43\x7b\x16"
- "\xd1\x7c\xa2\xb1\xd2\x71\x07\xc9\xca\x64\xdb\xaf\x49\xd1\xc7\x83"
- "\xda\x1d\x89\x13\xd0\x26\xa1\xef\x15\xee\xf3\x35\x3f\x42\xbe\x04"
- "\xc2\x6d\x61\xfa\xea\x9a\xbc\xa1\x7d\xbf\x26\x83\xfa\x4e\x73\xc2"
- "\xb6\x82\xe4\x65\x72\x2f\xf3\x2a\xb1\xc7\x87\xe2\xab\xd8\xf7\x84"
- "\x5e\x86\x46\x8f\x11\xbe\xb7\xfd\x44\xa6\xa7\xfd\x0d\xe9\x85\x6c"
- "\x5e\xdb\x0f\xd3\x68\xff\x43\x5c\xb3\x06\x83\xe3\x48\xdf\x44\xf7"
- "\xb8\xc9\x96\xcf\xd5\xc7\x25\x2f\x08\x1c\x7d\x90\x7c\x67\x20\xdd"
- "\xda\x56\xf0\x01\xc1\x68\xc6\xea\x34\x7a\x93\xf0\x04\x5f\x99\x79"
- "\xf5\xca\x2e\x76\x95\xed\xbb\xfc\xf3\x53\x4a\xe2\xbf\x63\x1d\x05"
- "\xc8\x5e\x26\xca\xb6\x9e\x52\xae\xcd\x45\xbd\x89\xda\xd3\x82\xe7"
- "\x03\x78\x5e\x87\xe7\xed\x78\x4e\xc4\x73\x12\xd2\xab\x5a\xfa\x54"
- "\x84\x47\x21\xfe\x36\xed\x89\x36\x26\xd2\x79\x76\xc6\xaf\x88\xae"
- "\xfc\x09\xc5\x8f\xff\x88\xc2\x78\xbe\xad\xf5\xbb\x45\xae\xed\xc4"
- "\x17\x50\x8e\x83\xd2\xd1\xbe\x86\x38\x1b\xd2\xac\xa7\xb2\xc9\xae"
- "\x02\xde\xef\x89\xa0\x4f\x51\xce\xb8\x27\xf1\x9c\x85\xe7\x2d\x78"
- "\xda\x91\x9f\xec\x79\x66\x00\x06\x6d\x61\x7c\x11\xb7\x20\xc7\x21"
- "\xc7\x13\x63\xd8\x44\xeb\x5d\xc7\x07\x34\x9f\x86\xa4\x5b\x2c\xd3"
- "\x49\xfe\x75\x5c\xb2\x3e\x76\x41\x31\x76\xa6\xf6\x20\xc6\x0e\xe5"
- "\xdf\x43\xf9\xf1\x9c\xab\x3d\xd3\xb4\xe7\x7c\xed\x79\x9f\xf6\x9c"
- "\xa7\x3d\x17\x78\x95\x44\xbf\x46\x9b\x00\x66\x89\x42\x4e\x8e\xb5"
- "\xab\xd5\x3b\x3e\x85\xf8\x6b\xe0\xff\xdb\xc9\x8f\x23\xea\xad\xd3"
- "\xe5\xd6\x24\xfb\x19\xa8\xba\xea\xea\xad\x42\xf6\x33\xee\x40\x04"
- "\x2e\xcc\x8b\x55\xd2\x18\x68\xa7\xe8\x3a\x03\xe8\x06\x59\x4e\xac"
- "\x41\x3b\xaf\x27\x7f\x30\xe4\x57\x93\xec\x14\x0a\x3e\x2a\xbe\x27"
- "\x85\xd6\xab\x90\xe9\x6f\x20\x1b\x45\xc5\xf9\xf8\x39\xc0\x53\x94"
- "\xea\xf8\x9e\xf8\x25\xc9\xe7\x8f\xfe\x4b\x5f\xd5\x78\x6b\x98\xcf"
- "\x1f\xd7\x26\xcf\x36\xaf\x7d\x0a\xf1\x11\xfc\xff\xb8\x75\xd4\x66"
- "\xc0\xba\x1d\xfd\x99\xd5\xa1\x8c\xcf\xc6\xf3\xd6\x4e\xd9\xe7\x54"
- "\xbd\xcf\xda\x58\xd9\x74\x98\x77\x2a\x89\x41\xe0\xc3\x42\x9a\xdf"
- "\x1d\x83\x78\x39\x31\x48\x4f\x6d\xfe\x60\x9c\x13\x5f\xa4\xf1\x8e"
- "\xc0\x27\x69\x61\x3c\x3d\xfe\xe0\xd0\x71\x89\x3b\x18\x94\xf4\x42"
- "\x3b\xd6\x25\xcd\x81\x35\x97\xac\xcb\x0c\x5a\x97\x5a\xde\xc0\x50"
- "\x1c\x7f\x4d\x06\xe1\x78\xad\x8d\x98\xb7\x89\x39\x34\x36\x5e\x65"
- "\x7c\xbb\xb6\x27\xb5\x63\x8f\xbc\x1d\xf1\x0b\x65\x3b\x65\xbc\x56"
- "\x17\xe6\x5f\xe2\x3c\x9a\xff\x7a\xbc\x36\xbf\xa9\x9c\x39\x34\xd6"
- "\x7a\xbc\x56\x3e\xe6\x69\xe2\x2c\x5a\x3f\x7a\xbc\x9c\x93\xf1\xeb"
- "\x08\xdf\x50\xde\xa0\xd0\x65\x04\xff\xfd\x93\x26\xb4\xfb\xda\x46"
- "\xd0\x17\xf5\xb4\x9e\x57\x97\xb0\xd8\x95\x5b\xd8\x58\xb9\x36\xaf"
- "\xfd\x48\xcf\x2b\x64\xfa\x55\xd7\xb6\xe8\x38\xaa\x46\xe0\xb3\x84"
- "\xb4\xa1\xb8\x72\xc2\x52\x5e\x69\x0a\x06\xcd\xc5\x39\x47\x82\xb3"
- "\x04\xce\xc5\xba\xaf\xeb\xab\xb2\x18\xbd\x6c\xaf\x59\xdb\x4b\x5a"
- "\x04\xad\xa6\x58\xee\x38\x52\x2f\x71\x97\x2c\xdb\x32\x88\xff\x22"
- "\xe8\x10\x81\xeb\xa9\x2e\x2a\x0b\xfb\x8a\xd9\x5f\x96\x79\xb5\xc4"
- "\xdf\x96\x4c\x2f\xbb\x21\x51\xc7\xad\xb4\x3f\x99\x14\x66\xab\xfe"
- "\x89\xdc\x9f\x54\x92\x81\xd9\xfc\xc2\x3e\x5d\xab\xad\x9b\xd1\xbe"
- "\x49\xf6\xbf\xb3\x8a\xc7\x90\xcd\xaa\x4c\xb4\xf5\x01\xd0\x67\x3b"
- "\xb5\xb3\x19\xf0\xb9\xd7\x85\x88\x97\xd5\xe0\x8a\xf5\x74\xdd\x09"
- "\x6d\x5c\x8e\xa3\x3d\x3b\x09\xb7\xaf\x5e\x21\x7d\x2a\x91\x3c\x48"
- "\xf8\xf8\x22\x9a\xd5\xc2\x03\xc2\x97\x41\x95\xa5\x2b\x42\xc6\x55"
- "\x2f\xd7\xc9\xb5\x47\x84\x8f\x0a\x57\x71\x8e\x94\x27\x5e\xb7\x5c"
- "\xc6\x5f\x97\x29\xf5\x10\x8a\xf3\xb4\xf0\xbc\x28\xcb\xf8\x0f\x85"
- "\xfc\x35\xfa\xaa\x9b\x24\x3d\x72\xdd\xec\x08\x9d\x1f\x01\x6b\x61"
- "\xe7\xb8\xea\xba\x8c\xf0\xba\xb8\x2e\x99\xf2\x20\xef\x69\xc4\xe7"
- "\xe9\xf1\x72\xaf\x89\x9b\xa3\xc9\xcc\xf2\xae\xae\x48\x63\xc0\xcd"
- "\xd1\x5b\x2b\xf5\xf5\x7b\x5d\xb3\xac\x5f\xae\x5f\xea\x23\xcd\x07"
- "\x5a\xc3\x41\x61\x57\xac\x27\x85\xd6\x32\xde\xf3\x83\xfa\xda\x95"
- "\xf4\x9d\xb8\x73\x26\xd7\xed\x75\xed\x11\xed\x70\x69\x73\xf5\x78"
- "\xef\x63\x96\x58\x7c\xf3\x7b\x95\x18\x79\x96\xa5\x58\x24\x8f\xb1"
- "\x61\xc9\x2e\xf5\x02\x0f\x90\x6c\x9a\xe4\x09\x24\xb3\xd1\xf4\x55"
- "\xe9\xac\xc4\x4f\xb6\xd2\x5c\x58\x0f\x61\xfb\x68\x66\xa6\xdb\x47"
- "\xeb\xab\x9a\x30\x2f\x2c\x3b\xb6\xec\xd4\xfa\x95\x83\xfa\xea\xdc"
- "\xce\x37\x68\x2e\x6d\x92\x6b\xcc\x52\x4b\xf3\xd8\x83\xb9\x87\xfd"
- "\x67\xcb\xe1\x52\x91\xb7\x5c\x9f\x7b\x58\xa3\x39\xa7\x94\x89\xf1"
- "\xb5\xe3\xf9\x16\x8c\x29\xe1\xd7\x7c\xcc\x83\x10\x9e\x39\xf2\xa9"
- "\x98\xe9\xa9\xcd\xf9\x2d\xc8\x8b\xf5\x3f\xa5\x51\x1f\x03\x7f\xfc"
- "\xb1\x54\x31\xc7\x9c\xa4\xdf\x98\x2a\xce\xfa\x69\x8e\xd1\xfc\x12"
- "\x67\xfe\x98\x6b\xa6\x8a\xef\x33\x9a\x67\xc2\x66\x0a\xc2\xd4\x5e"
- "\x9a\x67\x7d\x55\x13\x63\x74\x9b\xc7\x5e\x65\x82\x3c\x6f\xab\x9a"
- "\x98\xa4\xeb\x86\xd3\x3c\xb4\x4f\x61\xe3\x50\xbe\xb5\xc9\xea\x27"
- "\xd9\xf9\x67\x9e\xe0\x7c\x46\x69\x09\x76\x12\x5f\x5e\xdb\x84\x3c"
- "\x11\xe3\x1f\x27\x74\x59\x0f\x2f\x16\xf2\xcc\x6b\xf0\x2d\x7f\x28"
- "\xce\xb9\x2a\x20\xe8\x4a\x60\xc7\x1b\x13\x19\x9d\xd3\x63\xaf\x99"
- "\xe8\xd2\xe9\xe1\x99\x88\x43\x1a\x6a\x1f\xf1\xe0\x6d\x78\x77\xd1"
- "\x3e\x3d\x82\xdc\x79\x16\xc9\x8a\x08\x67\x90\xec\x89\xe4\x60\x80"
- "\xf5\xd1\x53\xca\xe4\xf8\x23\x64\xbf\x68\xd9\xd7\xed\x5e\x3b\x1d"
- "\xfc\x3c\xd9\xd3\xb2\x16\xb2\x6b\x3a\x94\xeb\xfd\x24\x77\x2a\xfb"
- "\x8a\x64\x3c\x49\x96\xa1\x32\x9e\xa4\x3c\xed\x57\x8a\x9f\x37\xfc"
- "\x9b\x64\xd3\xde\xbb\x2f\xff\x9b\xb4\x56\xa6\x9d\x54\x8b\x5f\xbd"
- "\x84\x95\x05\x6b\x25\xa9\x54\x87\x15\xe1\x14\xc2\xb1\xa4\x67\x43"
- "\xeb\x5c\x09\x32\xb2\x97\x84\x71\x42\xbb\x57\xdf\xfc\x90\xbb\x84"
- "\x78\xda\x24\xe1\xbb\x80\xec\x17\x5f\x91\xae\x97\x92\x24\xc6\x53"
- "\xd8\x97\x55\x92\x6c\xa8\x3b\xb1\xa6\x87\x19\x6d\x85\x6c\x12\xc9"
- "\xd0\x4d\x21\xee\x26\x1e\x98\xe6\x04\x60\xd0\x76\x5a\x99\xf4\x94"
- "\x7d\x15\x33\xe0\xfb\x64\xbc\x67\xeb\xb4\x14\xf2\x98\xa3\x02\x2c"
- "\x91\x68\xa8\xb9\xab\xd8\xe4\xbe\xaa\x49\x73\xf4\xb1\x22\x3a\x83"
- "\xe4\x78\x83\xfe\xae\x94\x24\xa1\x0b\x40\xb6\xfc\xbd\x04\x37\x1d"
- "\x57\xf5\x90\xec\x7a\x52\x4a\x94\x9f\x99\xe5\x3e\x34\xa9\x1c\xe3"
- "\x9a\x26\xe7\xcb\xa4\x79\x98\xfb\x47\x23\xda\xf9\xbd\x88\xf7\x2a"
- "\xca\x6f\xf2\x13\x0d\x37\x12\x7c\x26\x1d\xd1\xe1\x53\x23\x6c\x80"
- "\x32\x9b\x18\xef\x20\xef\x46\xdb\x5a\x6c\x25\x2c\xe6\xb4\x72\xfd"
- "\xab\xe8\x23\xdd\x0d\x6e\x96\x32\xfe\xeb\xf7\xeb\x7c\xba\x6c\xf7"
- "\xf5\xab\x4c\x15\x51\x8c\x64\xf3\x64\x33\x52\xe8\x62\x9e\xb5\x08"
- "\x79\xbc\x27\x38\x87\xb9\x9d\x77\x52\x9a\xfb\xb5\xbd\xec\x78\x6f"
- "\x99\x85\x1d\xb6\xcc\xc1\x3a\xbe\x7e\x81\x37\x2a\x2e\xf9\x8a\x75"
- "\x5e\x95\xeb\x17\x68\xf0\x6d\x11\xba\x22\xca\xf5\xd7\xd1\x5e\x42"
- "\xb2\x01\xec\x23\x44\xa3\x25\xa0\xec\x9d\xfa\xba\xc1\x3e\xd1\x84"
- "\x3c\x16\x89\x63\xb2\xb1\x27\x5d\x9f\x48\x76\x6b\x04\xff\x20\xd3"
- "\xc7\xca\x73\x83\xeb\xdb\x07\xe9\x6d\xa4\xa3\x7c\x42\x87\x50\x99"
- "\xd4\x9d\x15\x22\x59\xc2\xa4\x6e\xea\x9b\x36\x17\xb1\x5f\x4d\x8e"
- "\x09\xaf\xdb\x49\xf3\xc4\xba\xed\x8e\x5c\x97\x93\x53\xc2\x7c\xea"
- "\xc4\xe3\xd3\x6b\x99\x75\xb8\x75\x68\x8b\xa3\xbd\x6a\xf2\xb3\x35"
- "\x35\xbc\xde\x65\x50\xef\x5d\x5d\xcd\x62\x95\x75\x00\x1b\xad\xb3"
- "\x15\xd9\xe3\xb0\x1e\x5f\x30\xc5\x5e\x9b\x31\xd7\x3e\x9a\x3b\x2d"
- "\xcc\xb0\xfe\xdc\xe8\x98\x29\x81\x6b\xeb\x79\xd4\xcd\x0f\x3d\x60"
- "\xa7\xb3\x6f\x17\xfb\x22\x9f\x45\xcd\x05\x96\xbb\x31\x96\xd9\xbc"
- "\xca\x94\x03\x74\xcf\xfd\x70\x2c\xd1\x22\x53\x0e\x50\x99\xa5\x75"
- "\x2c\xa6\xb4\x93\x77\xad\x7b\x7c\x54\x0c\xf6\x5f\x33\xf6\x8d\xb5"
- "\x57\xc7\x5e\x5b\x3f\x80\x32\x5e\xcf\x16\xf9\x86\xb5\xf3\x26\xdb"
- "\x66\xbd\x7d\xf8\xb6\xd9\xc6\x9f\x52\xac\xf3\xaf\xac\x6d\x37\xf8"
- "\xc3\x6d\xbb\xc1\xff\x7f\xd0\xb6\xf7\x22\xda\x66\x0e\xb7\x2d\x8f"
- "\xda\x76\xe2\xca\xda\x96\x3c\x2b\xdc\xb6\xe4\x59\xff\x60\xdb\xf6"
- "\x8c\xdc\xb6\x29\x4f\x0e\xdf\x36\xc7\xb5\xa7\x94\x29\xab\xae\xac"
- "\x6d\x53\xed\xe1\xb6\x4d\xb5\xff\x6f\xda\xe6\xac\xe3\x27\x5b\x93"
- "\x18\xd9\xd3\x8c\x25\x3c\x7f\x4a\xb9\xa1\x62\x55\x92\xd0\xe3\x4e"
- "\xc0\xfb\xed\x65\x75\xfc\x73\x49\xdb\x4c\xb9\x28\xf7\xb4\x29\x3e"
- "\xcc\x5f\xa9\x57\xa2\xdc\xe0\x15\x7a\x2e\x51\x13\x76\xf1\x4a\x1e"
- "\x9c\xe1\x27\x9d\xc1\x20\xd9\x76\x21\x5b\xf0\xf5\xfb\x2e\x04\xc8"
- "\x0f\x47\xc3\x8e\x73\x46\xb6\xef\x82\xcf\xd0\x57\x75\xc3\x34\xdd"
- "\x9e\xab\x9e\xd7\xb4\xe5\x72\xf8\xe8\x86\x25\x73\xf3\x98\x89\xf0"
- "\x11\x3d\xc9\x9f\x66\x8d\x73\x74\xcc\xdc\xaf\x68\xdf\xbf\xc1\xa1"
- "\xdf\xd7\xd5\xcb\x4a\xef\x1a\xcd\x4d\xa5\x2c\x8a\xee\x0c\x0b\xdb"
- "\x8f\x16\x1f\x4b\x2e\x65\xa3\xd2\x1d\x28\x3f\xc0\xb2\x4d\x0e\x94"
- "\x0d\x78\x48\x5a\xfe\x86\x57\xa3\xf2\x59\x6c\x2d\xca\xa6\xe7\x5c"
- "\x4b\x19\x5f\xfd\x2c\x33\xd2\xdd\x62\xba\x23\x2c\xef\x07\x47\xc7"
- "\xa0\x1e\xaf\x5e\xcf\xdf\x81\x5f\x9c\x84\xdf\x8d\xaf\x87\xe1\x77"
- "\xe3\xf2\x30\xfc\x6e\xbc\x43\xc2\xef\xc6\xd4\x30\xfc\x92\xad\x57"
- "\x06\xbf\x1b\xf3\xc3\xf0\x93\x79\x2f\x0f\xbf\x1b\x7f\x3d\x32\xfc"
- "\x6e\x6c\x0c\xc3\x4f\x96\x35\x02\xfc\xa2\x87\x87\xdf\x8d\xa1\x7f"
- "\x0c\x7e\xc9\xd6\x7f\x10\x7e\x63\x25\xfc\xa6\x2a\x61\xf8\x25\xbf"
- "\x1c\x86\x5f\x72\xb1\x84\x5f\xb2\x2d\x0c\xbf\xa9\xd9\x57\x06\xbf"
- "\xe4\x3d\x61\xf8\xc9\xbc\x97\x87\x5f\xf2\x89\x91\xe1\x97\x1c\x08"
- "\xc3\x4f\x96\x75\x65\xf0\x9b\x7a\x17\xe0\x66\xd6\xe0\x67\x1e\x19"
- "\x7e\x53\xb3\xff\x41\xf8\x99\x24\xfc\x6e\xba\x27\x0c\xbf\xa9\xe7"
- "\xc3\xf0\x9b\xfa\x8a\x84\xdf\xd4\x86\x30\xfc\x6e\xaa\xbf\x32\xf8"
- "\x4d\xed\x0e\xc3\x4f\xe6\xbd\x3c\xfc\x6e\x9a\x32\x32\xfc\x6e\x9a"
- "\x1d\x86\x9f\x2c\x6b\x04\xf8\x8d\x1e\x1e\x7e\x37\xad\xfa\xc7\xe0"
- "\x77\x53\xfd\xe5\xe0\x77\x65\xb4\xc6\x4d\x23\xde\x7f\xbf\xc2\x72"
- "\x82\x23\x95\x43\x30\x24\xfd\x44\xb5\xea\xa6\xe0\x76\x35\x3a\x46"
- "\xde\xe1\xb8\xe9\x00\x78\x98\xbb\x3b\x94\x6f\xdc\xbf\x5d\x1d\x15"
- "\xc3\x2b\x3f\x3f\xae\x56\x9e\x5c\xc3\x2b\xa2\x8d\x6a\xc5\x68\x23"
- "\xd9\x33\x18\xd1\xe7\xba\xf2\x8d\x17\xa2\xae\x63\xd7\xd3\x7d\xbd"
- "\xd5\xa0\xd7\xe8\xbd\xaf\xea\x1b\x07\x40\x8b\xa4\x5d\x0a\x93\x9c"
- "\xa5\x45\xc2\xd9\x67\x61\x6e\xce\xf2\x82\x9c\x25\x05\x76\xeb\x92"
- "\xc7\x7e\x56\x34\xd4\x86\xbe\xf0\x93\xb9\x86\xc6\xef\x1b\x81\x41"
- "\x1b\x33\x95\xdc\x41\xb6\xfa\x6c\x37\x90\x6e\x5a\xca\x6c\xe1\xd7"
- "\x20\xa1\x24\x89\x0f\x64\x3e\x97\x76\x23\x3f\x24\x6c\x10\x0e\xe4"
- "\x3d\x07\x7e\xaa\x89\xec\xca\x68\xe7\x50\x4d\xa7\x94\x9b\x7f\xc0"
- "\xe3\x9d\x42\x7f\x54\xdc\xed\x50\x52\xf4\x3b\x58\xcd\xdc\x6c\x4f"
- "\x52\x5d\xce\x5d\x7c\x83\xb3\x9e\x60\xd0\x4a\xf6\xdf\x56\x44\x4d"
- "\xee\x50\xa6\x25\xf2\x78\x7b\x12\x77\xd9\xad\xda\x19\x87\xb0\x7f"
- "\x97\x56\xc2\x3f\xa3\xf2\x34\x5a\x90\xfc\x96\xb8\x25\x3d\x98\x72"
- "\xc4\x54\x61\x8d\xa2\xb4\x64\x87\x91\xec\x13\xea\xbe\xaa\xa8\xdd"
- "\x94\x16\xf4\xf8\xdd\xc8\x7f\x37\xf9\xea\x1c\x2c\x43\xb6\xe9\x9a"
- "\xd3\xca\x37\x8d\xa2\x2f\xae\xa2\xe6\xde\xa7\x33\x9f\x13\xfe\x22"
- "\x05\x5c\xbf\x75\x11\x7d\x68\x16\x7e\x3e\x83\x67\x85\x9f\x4f\x2d"
- "\xcf\x24\xe4\x11\xf8\x94\x6c\xaf\xca\x32\xbe\x75\x42\x6f\x17\x68"
- "\xe8\x31\x08\xbf\x1d\x51\xc7\xd5\x08\xef\x8f\xf8\x1e\x8b\xf0\x26"
- "\xd0\xa1\xf1\xda\xf7\xb1\x08\x17\x13\x5d\x2a\xfa\x55\x5d\x2e\x75"
- "\xa2\x95\x6f\x2d\x46\x9c\x59\x4b\x13\x8f\x34\xf7\x10\xad\xab\x95"
- "\x91\x80\xf0\x54\xe2\x19\xb5\xef\x89\x08\x5f\x45\xe7\x02\xda\xf7"
- "\x71\xa7\x95\x9b\xcf\x20\xfc\x0d\xed\x3b\xe8\xfa\x9b\x85\xad\x2d"
- "\xc0\x9d\x7c\x47\x39\x00\xfb\xb5\x04\x77\xc0\x3a\x91\x9b\x8b\x9a"
- "\xc0\xaf\x96\xd1\x38\x52\x3f\xdd\x25\xa7\x59\x87\x72\xf3\x75\x74"
- "\x2f\x4f\x8e\x95\x73\x97\xb4\x0f\x64\xc8\x44\xbc\x85\xe2\x49\xb7"
- "\x5c\xdd\xe0\x5c\x4b\xef\x80\xe9\x7e\x82\xa1\x56\x17\x78\xa2\x9b"
- "\xd3\xb4\x71\x06\xec\xc8\x86\x2f\x2b\xdf\xa1\x8d\x05\xda\x36\x1a"
- "\xdf\xb7\x69\xe7\x1e\x5d\xe9\xc1\x01\x79\xbf\x48\xb9\x39\xef\x7f"
- "\x64\xb3\x02\xf9\x24\xde\xbb\x79\x97\xee\xc3\x10\x71\xc2\x56\x06"
- "\xcd\x4f\x92\xaf\xf8\xe2\x8b\x1a\x84\x8d\x16\xcc\x51\x7d\xae\xd0"
- "\x3c\xe1\xd1\xdf\x70\x4b\x59\xcd\xcd\x83\xf7\x7f\x91\xd7\xaa\xf9"
- "\x7d\x60\x92\x4f\xf8\x16\x0b\xeb\x17\x7d\x53\xe0\x87\x88\x6f\x49"
- "\x11\xdf\x74\xbb\x84\xd2\xe6\x54\xd5\xb7\x66\x47\x7c\xab\xbd\xe4"
- "\xdb\xa2\x88\x6f\x6b\x2e\x29\xd3\x16\xf1\xcd\x7e\x49\xbe\x75\x11"
- "\xdf\xb2\x2f\xf9\xb6\x2b\xe2\x5b\x86\xf6\x2d\x0a\xf1\xee\x41\x1b"
- "\x89\xca\x37\xd3\xb4\x78\xe0\xfa\x6f\xb5\x47\xc4\xa7\x6a\xf1\x54"
- "\xbf\xcf\xcb\x8e\x1d\xd7\xe2\xc5\x3c\xc7\x3c\xba\x49\xd6\x31\x2d"
- "\x36\xa2\x0e\x26\xc7\xb0\x48\xde\x2f\x56\x52\x1c\x26\xc5\x3a\x9a"
- "\xe6\x94\xa9\xa2\x9c\x7c\x08\xb9\xa4\x3d\x30\xb9\x0e\x85\x1f\x6a"
- "\xf2\x95\x8b\x74\x23\xe1\xc6\xe1\x75\x04\xa7\x95\xeb\xf7\x58\x43"
- "\xae\xa2\x03\xaa\xab\xe4\x28\xf9\x25\x24\xbb\x61\x65\xdd\x64\x3b"
- "\x46\xf7\x49\xd8\xcf\x3c\xf6\xbe\xf2\xd6\x80\xb8\x6f\x4b\xf7\x21"
- "\xe2\xc8\xee\x59\xab\x90\xef\x9c\x91\x7e\x09\xe9\x7e\xef\x86\xa2"
- "\x03\x2b\xbb\x59\x92\xed\xbb\xbc\x93\xf8\x3c\x89\x13\xa6\x11\x3e"
- "\x31\x69\x38\xed\x59\xa1\xeb\xad\x4c\x4f\xa5\x38\x4f\xb7\x90\x33"
- "\xc7\x9c\x52\xa6\x97\xeb\xdf\x65\x7f\xa7\x97\x0b\x5e\x5a\xbb\x57"
- "\xd8\x57\x35\x3d\x65\xd0\x6f\xa6\x32\x7d\xcd\xf9\xf8\xfd\xbb\x10"
- "\x37\x67\xa8\x7e\xe3\xf4\x87\xa9\x4c\xea\x87\x57\x99\x16\xa0\xb2"
- "\x91\x26\x7b\x50\xbf\x11\xf1\x2b\x83\x6c\x02\xda\x76\x4a\x2f\x1f"
- "\xdf\xc1\xff\x4f\x13\x7c\x25\x95\x79\x7e\xc3\x87\xed\x88\xab\xf5"
- "\x1a\xe7\x3a\xa4\x7e\xe4\xf4\x7a\x2f\xeb\x48\x1d\x69\xff\x13\x32"
- "\x49\xb3\xd3\xcd\x5d\xce\x66\xac\xf9\x46\x69\x07\xc0\xe9\x96\xbc"
- "\xfc\xf4\x33\xe4\x8b\x8c\x7c\x78\xd3\xb9\xa3\xc4\x3b\x33\x84\x3e"
- "\x04\xc5\x01\x36\x84\x9f\xc5\x59\xd1\x95\xad\xc9\xe9\x62\xff\x23"
- "\xdb\x4d\x74\xe7\x82\xee\x70\xf4\x55\xcd\x58\x30\xe8\xeb\x41\xbf"
- "\x4f\xa0\xcc\x78\x8a\x64\x7c\x35\xaa\x6c\xe3\xa5\x6d\xa0\xf6\xa2"
- "\xac\xee\x11\xf7\x52\xb3\xb3\x51\xc8\x41\x37\x16\xbb\xa5\x2e\xd9"
- "\x8c\x57\xa2\x2c\x13\xbb\x50\xd7\x81\x41\x1f\x17\x48\x53\x4d\x3a"
- "\xc1\x28\x7f\xb0\x9f\x85\xa2\x8e\xe3\x52\x4e\x3f\xc3\x07\x3c\xd6"
- "\x58\xd3\xcf\x8c\x5a\xbc\xaf\x35\x18\xa0\xbb\xf5\xc3\xda\xe0\xa2"
- "\x3d\x52\xd8\x6f\xda\xe8\x6c\xa4\xfb\x13\x33\x03\x7a\x9b\x67\xfa"
- "\x48\x6f\x9f\xda\x2c\x61\x3b\xf3\xa4\x0e\xc7\xf5\xe7\x50\xb6\xf3"
- "\x63\xd6\xa9\xcc\x7c\x92\xf4\x5b\x04\x4c\x4a\x74\x9d\xab\x99\x4f"
- "\x8a\x74\xfd\x83\x69\x84\xbc\x83\xf4\x7d\x09\x4e\xdb\xc9\xee\x00"
- "\xca\xac\xc6\x58\x08\x3f\xb6\xca\xcc\x97\x85\x7c\x13\xdf\x45\xbf"
- "\x85\x3e\x5b\x6a\xa2\x9c\x2b\x33\xf7\x78\x95\x54\xab\x9c\x83\x32"
- "\x8e\x7c\xc0\x93\x1e\x42\x8f\x32\x73\x3d\xf9\x92\x05\x3c\x9a\xc9"
- "\x76\x5d\xab\x1f\xeb\xc5\xd1\x4f\x73\xa1\x99\x7c\x06\x7a\x95\x99"
- "\xd2\x97\x95\x99\x60\x3e\xd3\x46\xf5\x13\x6c\xc9\x8f\x2e\x60\x7a"
- "\xa1\xaf\x2a\x75\x50\xfe\x41\x3e\x7b\x91\x66\x44\xdb\x8d\x04\xa3"
- "\x10\xda\xdc\x0a\x7a\xd5\x3d\xe1\x63\x6a\xdf\x7b\x6a\x82\xb3\x91"
- "\xf4\x27\xf1\x2e\x6d\x5f\xb8\xe4\xd8\xc9\x79\x90\xfa\x42\x94\x25"
- "\x69\x4a\xab\x9c\x0b\xd2\x8f\xb9\x92\x9a\xa1\xc1\x4f\xf8\xbc\x70"
- "\xad\x90\x70\x90\xe9\x6f\x31\x4a\xb9\x4c\xd2\x37\xd0\xae\xfa\xb0"
- "\x5c\xe6\x16\xa3\x90\xa9\x69\x3a\xd6\xf8\x76\x30\xa2\xcd\x7e\x71"
- "\x0f\xf0\x1c\xf1\xd4\xa9\x39\x54\xd7\x7a\xb2\x2d\x46\xf3\xe2\x74"
- "\xe4\xfc\x4f\x9d\x4f\xed\x24\xdd\xbc\x50\x7c\xb1\x9b\x6f\x28\x26"
- "\x5f\xda\x6e\xe4\x29\xc5\x5a\x18\xf6\x2e\x1a\xe1\x4d\xf2\x7b\xd2"
- "\x57\x75\xcb\xb4\x08\xdf\xbb\xd8\x07\x6f\x79\x44\xdf\xe7\x68\x8f"
- "\x26\x3b\x0f\x83\x71\x1b\xce\x6d\xc1\x7a\x0f\x68\xb4\xd2\x48\xbe"
- "\xa7\x62\x6b\x66\xb0\x54\xba\x6b\x4c\x7a\xda\x34\xdf\xb8\xf9\xdc"
- "\x6c\xb2\x9d\x4c\x76\x20\xdd\x25\xb7\xa2\xbd\xb7\x8e\x7d\x66\xbc"
- "\xb8\xdf\xe8\x77\xcf\x38\x47\x3a\x3a\xdd\xa7\x4a\x85\x7d\xa3\x98"
- "\x74\x47\x90\xef\x90\xbe\xb7\x7d\x3c\xfe\xdc\x6c\xfa\x26\x7c\x07"
- "\x50\x99\xff\x53\x3b\xc0\xca\x2d\xed\x1a\x2d\xd3\x8d\xbd\xfc\x5a"
- "\xf4\x47\xdc\x67\xc4\xfb\xf8\xd3\xca\x6d\xb7\x4b\x7f\x91\xd2\x96"
- "\xbd\xa6\x6b\x18\x2d\xef\xe7\xfb\x98\xb8\x2f\xad\xdc\xfa\x82\xf5"
- "\x66\xc6\xba\x95\x5b\x5f\x14\x76\xa5\x5d\xf6\x18\x8d\xce\x8b\xa9"
- "\x91\xed\x32\x65\x39\x0c\xa2\x8d\xd4\xbe\x2b\x6b\xdb\xad\xfa\x7e"
- "\x19\xdd\x57\x75\x6b\xa3\x7e\xaf\x5f\xf4\x5f\xb3\x37\xed\xbe\x81"
- "\xf8\x96\xdb\xa6\xca\x71\xb1\x6b\xbe\x7a\xed\xb1\xff\x07\x75\xfb"
- "\xb4\xfd\xd0\x2b\x6c\x6e\x03\x2e\x18\x57\x6f\x5f\xd5\x6d\x69\xfa"
- "\x7e\xaa\xe9\xc8\x4f\x93\xfb\xfc\x6d\x99\xe1\xbd\x54\xc2\x70\xc8"
- "\x9d\x9d\x65\xcb\xec\x56\x10\xec\xb6\x25\xf6\xc7\xf2\xac\xb9\x85"
- "\x85\xcb\x0a\xad\x64\xf0\xe6\x12\xbf\x4a\x31\xbc\xea\xb6\x7c\xcd"
- "\xf7\xdb\xae\x41\xdf\x6f\x55\xb7\x1d\x88\xf4\xc9\xe7\x55\x6e\x6b"
- "\xfc\xbf\xe1\x6b\x6e\x1b\xf1\x9e\x9f\xcb\xa0\x36\xe0\xd7\x88\x9f"
- "\x1b\x3f\xf2\xc1\xc3\xb2\x02\x2c\x0d\xfb\xa3\x38\x13\x0e\xdf\x57"
- "\xbf\x6d\x1d\x9d\x83\x77\x28\xb3\x6e\xd9\xae\x1a\x99\xb0\x6b\x52"
- "\xa9\x0a\xdb\x9b\x3b\x90\x1f\x3f\x37\x7e\xcd\xf8\x89\x7c\xea\x1b"
- "\xe2\xae\x6d\x43\xe4\x37\x3a\x9b\xe6\x95\xee\x39\x94\x86\x57\x18"
- "\x05\x1d\xa2\x6e\x94\xe9\x2e\x69\x83\x81\x57\x4d\x3f\xa0\xa5\x13"
- "\xb8\x21\xae\x82\x59\x87\x49\x17\xc5\xab\xbe\xe1\xd5\xd2\x89\xbb"
- "\xef\x7a\x7f\xc8\x76\x3f\xd2\xeb\xe9\x8c\xbc\xea\x16\x9b\x96\x4e"
- "\xda\x34\xab\x34\x0c\x57\xef\x28\x5e\x79\x21\x49\x4b\x67\x8e\x2c"
- "\x2f\x22\x4d\xb4\x5a\x35\x79\x1e\xa5\x51\x2b\x8c\xd2\x0f\x4b\xd5"
- "\x6d\x47\x91\x7e\x58\x9b\xa7\x57\x36\x4e\xb7\x97\x5e\x3a\x4e\xb6"
- "\xc7\x96\xe6\xde\xb9\xb4\x60\x05\x79\x92\xb2\x2f\x5b\x6e\xa7\x67"
- "\xc1\x92\x9f\x89\xc7\xb2\xac\xc7\x1f\x93\x2f\xf6\xfc\x54\x7a\xc9"
- "\xc7\x7c\xa3\x67\xce\x72\x1b\x3d\x1e\x5b\x46\x41\x47\xde\xb4\xe5"
- "\x8f\xe9\x2e\xbd\x87\xd8\x5d\xea\xab\xfa\x76\xb2\x57\x99\x95\x28"
- "\xe9\x91\x6f\xa7\x7a\x95\x6f\x88\x73\x60\x53\x85\x97\xbd\x99\x22"
- "\x7c\xff\xb1\xaf\xd9\x2b\x50\xbe\x7d\x17\xd9\x2b\x30\x55\xd8\x1e"
- "\x33\x05\x97\xe6\xf2\x0d\x25\x56\xe4\xcd\xf7\xb2\x9d\xda\xdd\x72"
- "\xbb\x45\xd8\x0d\xad\xba\xfd\xa0\xae\x5f\xa8\xba\x8a\x5a\xc8\x1e"
- "\xbe\xd0\x37\xda\x28\x6c\xe1\x04\x90\x2e\x71\xfb\x46\xe1\x97\x26"
- "\x11\xe1\xa3\x08\x27\x21\x6c\x41\x18\xfc\x65\x4e\x26\xdd\x4f\x44"
- "\xd8\x8a\x70\x32\xca\x6f\xd1\xd7\x45\x24\x6c\x34\x67\x73\x77\x0e"
- "\xcb\x1f\x0f\xb5\x31\x85\xb5\xf5\x1d\xb3\xee\xcb\x57\xf8\xed\xad"
- "\xfa\x8e\x75\xd0\x6f\xaf\xf0\xe5\x64\x5e\x2c\xf6\x35\xb1\xb7\x7f"
- "\x67\x5b\x94\x65\xd2\x0a\x49\x87\x7f\x67\x81\x6e\x93\x41\xd2\xd9"
- "\xdf\xc9\x8c\xf0\x79\x4c\xe1\xbc\x41\x9f\xc7\xd2\x2e\xd9\x73\xc2"
- "\xee\x91\xf2\x9d\x06\x5e\xf5\xed\xf6\x41\xff\x74\x55\xdf\x71\x45"
- "\xfa\xa7\xf3\xe2\x3b\xf1\x37\x88\xdf\x15\xde\x07\xbf\x33\x87\xea"
- "\x1c\xce\xbf\x33\xf8\x73\x47\x56\x31\x68\x71\x3c\x05\x5d\xae\xd1"
- "\xc0\x14\xcf\x2b\xd3\xc8\xbe\x8d\x95\xbe\x11\xed\x37\xac\xcc\x81"
- "\xfc\x2b\x2a\xb3\xef\x21\xbb\xbb\xbe\xb2\x1c\xe5\xc6\xed\xa4\x83"
- "\x84\xb0\xb4\x1b\xc9\x7b\x94\xd9\xe2\x1e\x9b\x6e\x53\x2e\xf2\x4e"
- "\xfc\xb0\x77\x0f\xde\xd7\xcf\x8c\xf3\x97\x99\x82\x4b\x72\x25\x1d"
- "\x37\xfb\xd7\x12\x97\x16\x77\xca\xfd\x7e\xf6\x3a\xfe\x90\xf4\x77"
- "\xe2\x55\xee\x30\xd3\x7d\x24\x93\x92\xbf\x8c\x23\xaf\xc9\xb1\x24"
- "\x57\xc4\x21\xdd\x6a\xd0\x5a\x5a\xfb\x9e\xf2\x24\x75\x31\x7e\x21"
- "\x24\xef\xfa\x2b\xb3\x6d\x3f\x99\x54\x4e\xf5\xc4\x08\x3a\xe2\x7d"
- "\x16\x4b\xbe\x02\xa9\x6d\xdb\x23\x6c\xde\xd5\x20\x8e\xf4\xb1\x7a"
- "\x1f\x62\xc2\xee\xaf\xd6\x16\x9b\xf0\x55\x56\x75\x47\x8c\x6e\x33"
- "\xc7\x8b\xb8\x4b\xfb\xf3\xd0\x0f\xc5\x0a\x99\xfa\xd8\xb4\x8c\xf9"
- "\x78\x9b\xa6\xb9\xb9\x8d\x9c\x3b\x49\xbd\x09\xa5\xa9\xbd\x7b\x7f"
- "\xbe\x52\xf8\x89\xac\xba\x23\x13\xe3\x14\x14\xe3\xbd\xfa\xc7\x5f"
- "\x12\x6e\x11\xfe\x13\xe9\x5e\xa1\xea\x47\xbd\x73\xee\x17\xf6\x75"
- "\x0d\x92\x5e\x14\x76\xed\xaa\xee\x48\xe2\x09\x45\x8d\xd2\x47\x6c"
- "\x49\x23\xc6\x4f\xec\xfb\xb4\x36\xc4\xfd\x49\x33\xf5\xfd\x8e\x06"
- "\xe0\xd4\xb9\xf8\xfd\xab\xf4\x0f\xf3\xe3\x2f\xf5\x72\xc9\x7e\x14"
- "\xe6\x96\x15\x4f\x33\xea\x6f\x1f\xd4\x11\x1a\xbc\x93\x79\xc7\x45"
- "\xb2\x6d\x35\x78\x3f\x57\x99\x73\xbb\xa4\x2b\xef\x34\x7a\xd9\x4d"
- "\x2e\xb9\xbe\xef\xc4\xfc\x6f\xd6\xee\x66\xdd\x09\xfe\xf7\x9f\xb3"
- "\x87\x96\x71\x67\xae\x2e\xfb\x90\x63\x77\x67\x1a\xe6\xe2\x5c\xfc"
- "\xfe\x15\xe9\x17\xea\x3e\xb2\x57\x1b\xc4\xdd\xa2\x53\x51\x16\x96"
- "\x8a\xf8\x1c\x3d\x7e\x94\x92\x06\xd8\xdc\x69\xd7\xf1\x49\x6f\x42"
- "\x71\x0b\xc2\x6b\x40\xa7\x07\xb5\x30\xf8\x9f\x3b\x6b\xf5\x30\xde"
- "\xeb\x75\x7c\x43\xfc\x59\xef\xd3\x99\xcf\x12\xff\xf7\x98\x05\x34"
- "\x99\x85\xf8\xab\x3b\xc1\xff\xfe\xb9\x5c\xe6\xfd\xc0\xd7\x5b\xf9"
- "\xce\x34\x7f\x42\x4f\xaa\x1f\x38\x14\xdf\x8e\x7b\xd9\xef\x16\x6b"
- "\xe5\x74\x79\x8d\xf3\x8f\x86\xc7\x23\xca\x04\x18\x1f\x95\x7d\x9a"
- "\x63\xc5\x7b\x3b\xf9\x2b\xef\xab\xfa\x27\xb3\x57\xf9\x76\x40\xa4"
- "\x5b\xd1\x5d\xbf\xae\xdf\xbc\xc8\x03\x0e\xde\xfd\x38\xcd\x95\x7f"
- "\x12\xf7\x93\xd7\x97\x98\x33\x88\xe6\x23\x3b\x04\xc2\x3e\x19\xd9"
- "\x9c\x0c\xb2\x68\x61\xe7\x7f\xc3\xb1\x2e\x61\xdf\x7e\x65\x4a\xac"
- "\x6e\x6f\x12\xeb\x34\x8f\x1b\xf6\xda\xc9\x06\xa5\x90\xa5\xf5\xa5"
- "\xc4\x09\xbb\x93\x9a\xbd\xc9\x6d\x2b\x58\x62\x9d\x2a\xed\x4d\x0a"
- "\x1b\x05\x97\xb1\x39\xc9\x2b\xbf\x98\xa5\xdb\x9c\x04\x1c\xe8\xee"
- "\x61\x0a\xbf\x10\x0c\xe0\x99\x1c\x61\xeb\xc6\x38\xac\xfd\x49\x03"
- "\xf0\xa6\x41\xda\x9f\xbc\xb2\xfd\xe6\x9f\xba\xe5\x3c\x99\x33\x4d"
- "\xf7\xe1\x1d\x11\x97\x86\xf5\xa2\xd1\x39\x77\x04\xb4\xb8\x45\x5e"
- "\xf6\x56\xf7\x20\x6d\x06\x7c\x47\x32\x45\x7c\x2f\xe5\x65\x79\xcf"
- "\x46\xae\x2b\x26\xfe\x68\xeb\x1e\x85\x7d\x39\x1a\xbf\xd1\xf4\x5b"
- "\x30\x88\x3f\x2e\xf0\x76\xe2\x11\x4c\x0a\xf6\x1b\x47\x14\x4f\x0f"
- "\x06\xa3\xb2\x82\xca\x51\xa2\x3d\xe9\xce\x75\x7a\x28\x48\x77\xff"
- "\x8d\xe9\xa1\x5e\xf2\xaf\x79\x94\xee\x92\xd5\x3c\x4e\x77\x1b\x27"
- "\x73\xf2\x53\x93\x1e\x3a\xcb\x77\xc8\x3b\x9b\x6d\x9a\xcf\xcc\x96"
- "\xd0\x0a\xde\x8c\x71\x88\x25\xbe\x83\xec\x6f\xc5\x29\x01\x16\x67"
- "\x8b\x3a\xf4\xe0\xf9\x43\x9c\x6c\x6f\x91\x8f\x32\xb5\x2a\x00\x5c"
- "\x69\x55\xb2\x82\x51\xe5\x9e\x60\xa7\xf0\x13\x90\x1e\x1a\xcd\xd3"
- "\x1d\x77\x71\xe1\x5b\x6c\x05\x6f\x02\x9e\x8d\x12\x3e\xb4\x8b\x79"
- "\x2f\xde\x63\xd2\x8b\x7b\x39\xf9\xf7\x44\xd9\xcd\xe9\x41\xb5\x3f"
- "\xdd\xa1\x96\x65\x39\x14\xe4\xfb\x1c\xf9\x3e\x47\x7b\x52\x51\xa6"
- "\x19\xe1\xbb\xf9\x8e\xc7\xe9\x0e\x54\xb9\xe0\x7d\xd0\x47\xb7\x76"
- "\xaf\xb4\x91\x7c\x7a\x92\x9d\xf1\xac\xa0\xbb\x7c\x87\x76\x4f\x54"
- "\xf8\x96\x75\x0c\x70\xad\x9e\xd9\xe9\xc5\xec\xee\xac\xe2\xc9\xe2"
- "\xbe\x29\xdd\xa5\x4a\x0f\x5a\x51\x67\x39\xc1\x23\x56\xf8\xf3\x16"
- "\xf7\xa9\xee\x6a\xbf\x9c\x7f\x4f\xd2\x13\x29\xba\x8e\x19\xe8\x7e"
- "\x46\xe8\xb7\x05\x6d\x64\x0b\xac\xcc\xc7\x03\x24\xf7\x3b\xd4\xdf"
- "\x6e\xb0\xae\x30\x02\xaf\xde\x15\x6a\xb5\xa5\x0e\x7f\xa7\xae\xda"
- "\x96\xcf\x37\x95\xce\xe2\xd5\x45\x0b\xf0\x3c\xc0\x5d\x25\x74\x67"
- "\x50\xe1\xd5\x2b\x92\xf9\xa6\x55\x88\x2f\x66\x78\x1e\xe0\xd5\x4f"
- "\x1f\xe7\x9b\x9c\x08\x3b\x1b\xf1\x44\x38\x63\x27\xd2\xa7\xf2\xea"
- "\x87\x12\xf1\x6c\xe0\xd5\x3f\x5c\x83\x74\x08\x2f\xf2\xe3\x89\xf0"
- "\xbf\xe4\x20\x1d\xc2\xff\x7a\xf4\x94\xf2\xdd\x66\xbc\x23\xae\xa2"
- "\x56\xd6\xb5\xa6\x5e\xd4\x55\xfd\xf3\x3d\xb2\x8e\x5f\x36\xca\x3a"
- "\xd6\x37\xc9\x3a\x5c\x6d\xb2\x8e\x1f\xcd\x43\xba\xd9\xbc\xfa\xc7"
- "\xa9\x78\x36\xf2\xea\x47\x92\x90\x0e\xe1\xac\x18\x3c\x11\xce\x46"
- "\x5d\x4e\x84\x1f\xf5\xe2\x89\x70\x4e\x0b\xd2\xcd\xe1\xd5\x8f\x1f"
- "\xc4\xf3\x20\xaf\xce\xa3\xf2\x11\x7e\xa2\x0e\x4f\x84\xf3\xd7\x21"
- "\x1d\xc2\x05\xa5\x78\x22\xfc\x0c\xfa\x54\x9a\xc6\xab\x37\xb9\xf0"
- "\x74\xf3\xea\xff\x40\x7d\xab\x10\xde\x12\xc0\x13\xe1\xe7\x90\xdf"
- "\x89\x70\x5d\x36\x9e\x08\x6f\xa7\xbe\xce\xe3\xd5\x3b\xa8\x9e\x26"
- "\x5e\xfd\x6b\xea\x33\xc2\xff\x39\x07\x4f\x84\x77\x52\x7b\x10\xfe"
- "\x2d\xe5\x43\x78\x17\x60\x50\xba\x80\x57\xff\x6e\x16\x9e\xcd\xbc"
- "\x7a\xaf\x11\xe9\x10\x6e\x38\x8a\x27\xc2\x2f\x01\x86\x4e\x84\xff"
- "\x60\xc7\x13\xe1\x57\xa8\xbf\x0b\x79\xf5\x41\x0b\x9e\x2d\xbc\xfa"
- "\xb5\x6e\xa4\x43\xf8\x75\x37\x9e\x08\x37\x01\x7e\x4e\x84\xff\x9c"
- "\x87\xe7\xf0\x7e\x82\xaa\xdf\xf1\xf2\x8a\x68\xc6\xab\x3f\x34\xf3"
- "\x8a\xd1\x78\xb6\xbb\x79\xc5\xa8\x14\x5e\x7d\xdc\x86\x78\x3c\x3f"
- "\xda\x83\xf0\x34\x2d\x8c\xe7\xc7\x5b\x10\x4e\xd5\xc2\x78\x7e\xb2"
- "\x06\xe1\x59\x5a\x18\x4f\x2f\x85\x01\xe3\x13\x74\xce\x41\x4f\x23"
- "\xc2\x73\xb4\x30\x9e\x9f\x67\xe0\x19\xe4\xd5\x7f\x9d\x83\x78\xc0"
- "\xea\xaf\x41\x84\xf1\xfc\xec\x20\xc2\x80\x85\xd7\x8a\xf0\x3c\xdf"
- "\xd4\x9f\x09\x9d\x26\x75\xfc\xbd\x3e\x3e\xbe\xbc\xa1\xec\x3c\x33"
- "\xd0\x1c\x25\x7f\x14\xd6\x15\x6c\x72\x87\x92\xf6\x7c\x83\xd3\x6b"
- "\xa0\x34\xa1\xcd\xa5\xa9\xea\xf8\xd2\x06\xc4\x47\x23\xdd\xe8\x53"
- "\xca\x3d\xef\xd1\xfe\xea\x29\xf5\x0a\x9f\x78\x9a\x5d\xbb\x68\xe4"
- "\x39\x02\x7a\x62\x36\xf9\x46\x07\xbc\xf2\x79\xe5\xa8\x73\x78\x76"
- "\xf3\xca\xab\x3b\x00\x2f\x84\xe3\xdf\xc7\x13\xe1\x6f\xff\x12\xf0"
- "\x42\xf8\xc7\xf7\xe2\xd9\xdd\x57\x75\xcf\x34\xaf\xf2\x5d\xa1\xe3"
- "\xc2\xf7\xfe\xdc\x66\x0a\x72\xe0\x23\xec\xd5\xbf\xde\xed\x33\x05"
- "\xdd\x98\xef\xd5\x6d\x26\xb2\xcf\xf6\x7c\x3e\xda\xba\x90\xec\xca"
- "\x11\xff\x13\xcd\x07\x92\x0d\xb2\xee\xab\x79\x87\x72\xcf\x8f\x48"
- "\x6e\xca\xc7\xe7\x8c\xf4\xbd\x58\x7c\xbf\xe1\x77\x36\xf9\x3d\x86"
- "\x85\xbf\xff\x98\xbe\x3f\x6b\x22\x59\xf7\x4d\x8f\x89\xef\x1e\x7f"
- "\x97\xd6\xaf\x28\xfa\xf6\x32\xa5\xf5\x2a\xf7\xb4\x4b\xd9\x57\xda"
- "\x71\x5e\x19\xc5\x7a\xcd\x25\xc7\xd1\xf6\x2e\xaf\x72\x57\xa7\x26"
- "\x87\x6c\xe1\xe6\xa2\x36\x69\xc3\xc0\x39\x92\x7d\x95\x18\xb5\xb6"
- "\x36\x73\x7d\x25\x6f\x23\x7e\x16\x7b\x90\xc1\xea\x4c\x6e\xec\x50"
- "\xe6\x1e\xd8\x46\x72\x8a\xc4\xdd\xa9\x74\xcf\xa8\x43\xb9\xb7\x78"
- "\x60\xe3\xd3\xc9\xd6\x12\x13\xea\x9f\xfb\x72\x59\x80\x9f\x77\x3b"
- "\xef\xc5\x5e\x29\xe2\xb3\xa5\xee\xba\x78\x5f\x28\xf5\x8d\xc4\xfb"
- "\x6c\x29\x73\x9d\x7b\x80\xf2\x46\xf2\x0f\xa1\x5f\x46\x75\xaa\xe3"
- "\x77\xa7\xc9\xf3\xb2\x7b\x57\xbd\xaa\x7a\x0d\x26\x3b\x1b\x65\x2d"
- "\x39\x84\xf2\xef\x6d\x1a\xc2\x6b\x0e\xa6\x15\xdf\x5e\x78\x0d\x69"
- "\xb7\x0a\xb9\xd0\xbd\x47\x75\x99\x32\x47\x1f\x7e\x25\xe9\xac\x34"
- "\xda\x17\x25\xbd\x38\x77\x11\xd9\xd7\x0c\x26\xae\x4f\x0b\xd6\xde"
- "\xeb\x0d\xd5\xee\x4e\xe5\x9b\x77\xa7\xc5\x05\x15\x26\xf5\xfe\xe7"
- "\xfe\x62\x66\x80\xe4\x75\xef\x50\xda\x7b\xd4\x31\x71\xb3\x66\x38"
- "\x98\xc1\x5d\xf8\x31\x85\x2b\xf8\x2f\xaf\xcb\xf4\x74\xb7\x33\x77"
- "\xa1\x28\xab\x9c\xff\x32\x75\xa1\x3a\x26\xb9\x76\x3b\xd1\xb9\x0e"
- "\x92\x33\xbd\x4f\xf1\xa3\x30\x2e\xe0\x27\xe6\x66\xeb\x6d\x21\x3f"
- "\x03\xeb\x01\x3b\xa2\x41\xe9\x9e\x76\x56\x28\x44\x36\xa5\xd6\x7a"
- "\x01\x07\x39\x5e\x73\xe7\x11\xce\xd7\xea\x7d\x56\x4d\x78\xda\xdc"
- "\xba\x98\xce\x64\x63\xc8\x46\xcf\x79\x71\xaf\x33\x48\xbe\x01\x69"
- "\xaf\x95\x69\x23\xc7\x6e\xa9\x76\x9f\x75\x69\x81\xbd\xf0\x29\x6b"
- "\xd1\xd2\x92\xdc\xbb\xa6\x2e\x9f\x66\x2d\x74\x58\x0b\x85\x7f\x6d"
- "\x11\x91\x33\xcd\x5a\x94\xbf\xcc\x6e\xb5\x17\xdb\x72\xbf\xee\x6b"
- "\xd8\xc2\xcd\x25\xdd\x92\x36\xbc\x5f\xda\x00\xa8\xdf\xdd\x65\x2f"
- "\xe5\xaa\xf5\x86\xd1\xa0\xfd\xe7\x2d\xba\x18\x3d\x97\xee\xe6\x98"
- "\xd5\x4a\x2b\xd3\x7c\x80\xc7\x3e\x9b\xc0\xe8\xfe\x48\x4c\x5f\xd5"
- "\xbc\x85\xe1\x73\x96\xfb\x6b\xa5\x1c\x64\x5e\xb6\x57\xb9\x57\xd8"
- "\x34\xab\xd5\xed\x7e\x69\xdf\xe4\x39\xc5\xbc\x72\x2f\x7b\x5e\xda"
- "\xb2\xab\xdf\xbd\x40\xd2\x94\xf3\x84\xdc\x8a\x5b\x77\x77\xf1\x9d"
- "\xf9\x64\xf3\x4a\xa1\xb9\x2a\x7c\xf2\xb2\x73\xe2\x8e\x2b\xd6\x5a"
- "\x06\xdd\x2f\x0f\x6d\x2e\x6b\x53\xc7\x57\x67\xa8\xbf\x7d\xb2\xa1"
- "\xec\xd7\xcc\xb0\x0f\xb8\xc0\x68\xc5\x7a\xb8\x81\x4d\x3e\xe4\xec"
- "\x32\xa0\xcd\xaf\x1f\x72\xb6\x1b\x78\x6d\xf9\xae\xde\x64\x67\x7b"
- "\xa0\x52\xd8\x07\x45\x19\x01\xf6\xe7\x79\x8c\x78\xa3\x46\xff\xb8"
- "\xcd\x01\xff\xb8\xb2\xc6\xc0\xa6\x1d\xd9\xee\x1b\x6e\x65\xf3\xbf"
- "\xc9\xcf\xbe\xd5\x44\x32\xac\xfb\x4b\xdf\x9a\x47\x32\xc4\x92\xce"
- "\x80\xb9\xa4\xcb\xbf\x79\x3d\xe9\xf8\xf9\x2e\x6e\xde\xd1\xd0\x3f"
- "\xbe\x32\xf5\x30\xd2\xbc\x03\xde\xe1\x5d\x2b\xe6\xef\x14\x66\xb8"
- "\x78\x53\x7e\xda\xbe\x7e\x97\xa1\xb9\x69\x8e\x94\x7b\x66\x63\xcd"
- "\x88\xf9\x34\x3f\xf7\xad\x03\x4d\x0c\x75\xb3\x7d\xfd\x0b\x0c\x7f"
- "\x9e\xfd\xb5\xef\xff\xfe\x56\x6a\x13\xeb\x23\x9b\xad\xe0\xd1\x5e"
- "\xfb\x78\x0b\xe3\x9b\x37\x99\x5f\x2c\x09\x18\x16\x7b\x99\xe1\x48"
- "\xfb\x16\x56\x7a\x92\x8d\x0d\x9e\x4d\x31\xfe\x0e\xf9\x2f\x92\x2d"
- "\xc4\x77\x2d\xc2\x26\x1a\x76\x17\x55\xdc\xeb\x03\x7d\xa2\x9e\x4d"
- "\x89\x6e\x5d\xe4\x66\xf8\xfe\x68\xf0\x9f\x2d\xec\x48\x9e\x8f\x79"
- "\x32\xeb\xd9\x45\x43\x1a\x7b\xe5\xdf\xea\xd9\x56\xf0\x07\x5b\x7b"
- "\x58\xac\x3c\xcf\x4d\x89\x0e\x0e\xa4\x18\x83\x4f\xa7\x90\x8d\x1a"
- "\xce\xcf\xa6\x8c\x21\x9a\x34\xb8\x2c\x25\xa6\xd5\x57\xcf\x66\x76"
- "\xb1\x94\x8b\x06\x66\xba\xf8\x74\xca\x98\x56\xdb\x16\x94\x05\x62"
- "\x13\x70\x25\xfb\x58\x64\x37\x8b\xe0\x74\x75\x26\x5b\xd4\xad\xcc"
- "\xbf\x6b\xcc\x51\x36\x8e\xec\x33\x92\x7d\x35\xb2\x11\xab\x26\x6e"
- "\x32\x87\x12\xd7\xb7\x39\xcf\x93\x3d\x91\x00\x03\xae\xcc\xb0\x4a"
- "\x1f\xe4\x0a\xf5\x59\xe5\x29\x63\xb2\xe8\xb9\xb1\xe8\x51\xa2\x95"
- "\xd5\x3e\x0b\xf9\x4e\x8a\xa1\x76\x62\x9d\xc6\xac\x3a\x01\x58\x96"
- "\xa5\x18\x91\x2e\x16\xf1\x71\x9e\xee\x00\x0b\x4d\xff\x79\xf6\x0c"
- "\x9b\xf0\x91\x9b\xb8\xdd\xc9\xcc\x2e\x27\x4b\xb4\x7e\x5b\xcc\xa5"
- "\x47\x42\x2f\xfe\x3c\x83\x57\xfd\xeb\x6c\x5e\x61\x4c\x92\x71\x0b"
- "\xee\xb2\x7e\x8f\x31\xeb\xad\xf4\x7e\xdf\x49\xeb\x9d\x18\xc3\xc4"
- "\x5a\x9b\xa0\xe3\x05\xcf\x77\xdf\x47\x72\x8e\xdf\xf7\xde\xc5\xe8"
- "\x5f\x97\xaa\x55\x47\xb7\xa8\x15\x46\x2b\xf9\xd2\xee\x51\xee\x7b"
- "\x99\x57\x9f\x09\xf0\xda\x1d\x62\x2e\x22\xbc\xff\x62\xf4\x43\x5e"
- "\x5e\xdd\xb3\x18\xe5\xa7\x5d\x54\x8c\xed\xf8\x1d\xd7\xf2\xef\xa2"
- "\x7e\x87\x76\xe6\x37\x53\xbf\x85\xbf\x1d\xf4\x2b\x0b\x63\xc6\xc7"
- "\xd7\x5a\x85\x0d\xfa\x01\xc0\x57\xf3\x47\x4a\xf0\x20\x18\xa8\x03"
- "\x29\x63\x44\x5f\x07\x52\x62\x01\x5f\xb2\xc5\x6a\x72\x2e\x41\x9e"
- "\xcd\xb5\xb3\xf0\x2d\xee\x62\x62\x6d\x1e\xf9\xbd\xf2\xd8\x7c\x2c"
- "\xb4\xa9\x36\x95\x6c\x8d\x3d\x5b\x82\x35\x37\xae\xd6\xca\x37\xd5"
- "\xce\xd1\xd6\x16\xa3\x76\xaa\xd5\x3d\xbb\x2e\xd2\x5d\x01\xb4\x0d"
- "\xed\x6b\xc7\xef\xb8\x57\xb9\x6f\xda\xc5\xa9\xf9\xed\x78\x32\xb4"
- "\xd5\xca\xab\x96\xe5\xd1\x3b\xbe\x59\x01\x9b\x71\x04\x07\x82\x87"
- "\x84\xc5\x82\xb1\x61\x58\x6c\xdd\xe9\x55\xbe\x17\x54\xab\x3c\xa8"
- "\xe3\xbe\xe3\xbc\xea\x89\x94\x88\x74\xb7\x87\xd3\xfd\xd7\x02\x99"
- "\xee\xa3\x6e\x99\xce\x5e\x8f\xef\xef\x49\x78\x2f\x28\xfe\x3a\xbc"
- "\x17\x3c\x15\xce\x5b\xe3\x93\x79\x9b\x4a\x65\xde\x2c\xca\xfb\xc2"
- "\x25\x6d\xfa\x75\x38\xfd\x2f\x93\x65\xfa\x43\xd3\x64\xfa\x7f\xcb"
- "\x8f\x48\xf7\x76\x38\xdd\xa6\x06\x99\xee\xed\x26\x99\x2e\xa7\x05"
- "\x73\x63\xd4\x30\x6d\x09\x85\xf3\xbc\x34\x4b\xe6\xe9\xf4\xca\x3c"
- "\x65\x8b\x91\xe7\xf6\xa1\x6d\xb9\x7f\x7a\x38\xfd\x8b\x5a\xbf\x3f"
- "\xb3\xc9\xf4\x25\x31\x11\xe9\x1e\x96\xe9\xe8\xfb\x69\xa4\xbb\xaf"
- "\xed\x62\xf4\x2b\x16\x99\x6e\xcd\x2e\x9a\x8f\x48\xb3\x5c\xad\xca"
- "\x6c\xbe\x18\xfd\xf0\x01\x94\xd3\x84\xb1\x49\xa2\x27\xc6\x2e\x49"
- "\x75\x95\x74\xe2\x7d\x0e\x9d\x6b\x10\xce\xf5\x2a\xf3\x92\x80\x77"
- "\x43\xc3\x9f\x99\xde\x7f\x60\x50\x8e\xa6\x82\x7e\xd8\x54\x3a\x3c"
- "\x8d\xbe\xb1\xf0\x28\xe9\x3a\x10\x4e\x39\xa5\x7c\x7f\x2a\xd9\xa0"
- "\xe3\x65\x0b\x34\xd9\xd5\xfd\x82\x57\x23\x1b\x10\x24\xdf\x94\x71"
- "\xdf\x97\x32\x4f\xcc\x4d\xf0\x9a\xc2\xee\x1f\xc9\x33\xb1\x47\x35"
- "\x7b\x95\xef\x13\xbd\x34\xea\x19\x83\xda\x80\x5f\x23\x7e\xee\x67"
- "\x48\xce\x59\xc9\xe6\xeb\x32\xe0\xe1\xdb\xfa\x7d\xec\x7f\xbf\x6d"
- "\x09\xcb\xc1\xbe\x0f\xd8\xdd\xdf\x7c\xe5\x7a\xc2\xdf\xff\x9a\x4c"
- "\x66\x88\x6f\x69\xa2\x95\x36\x97\x66\xb8\x54\xe9\xaf\x1e\x6b\x11"
- "\x74\xde\xf7\xdf\xc4\x9e\x5f\x2e\x6c\xcb\xd6\x56\xb7\xa9\xc9\xd8"
- "\x4b\xce\xb0\x28\x4f\x69\x17\x6b\x50\xbb\x0c\xae\x7e\x66\x6c\xc5"
- "\x7e\x4a\xe9\x1b\x40\x3b\x58\x0b\x88\x86\xfa\xfe\xa7\xae\x0b\x5a"
- "\x79\xf5\xbb\x7d\x65\x4f\x4a\xbf\xdc\x44\x6f\xd2\x1e\x04\xbc\x13"
- "\x2b\x7c\xb5\x15\x8c\x46\xda\x7f\x8e\xc7\x7b\x0c\xa5\xbd\x78\xd3"
- "\xcf\x6c\x17\x7f\xb3\xdb\xd7\xbf\xb9\x22\xb5\xff\xa6\x82\x8c\x81"
- "\xf1\xd5\x6d\x03\x9b\xd7\x67\x04\x7f\xb3\x3b\x3b\x78\x53\xbe\x2f"
- "\x34\xbe\xa2\x01\x75\x63\x7f\xda\x62\xd8\xab\x36\x18\xf6\x3a\xdd"
- "\x06\x2a\xf7\x90\x73\x97\xe1\x35\x67\x9b\xe1\x35\xb5\xd1\x70\xc8"
- "\xe9\xc2\xb3\x9e\xfc\x76\x81\xae\xfd\xe7\x25\xaf\x39\x9b\xb1\x3f"
- "\xfe\x73\x3d\xe0\x55\xaf\xcb\x5b\xf9\xbd\x41\xd6\xba\x2b\xc8\xde"
- "\xb4\x9f\x67\xbe\xf8\x92\x6e\xfc\x7c\xbe\x71\xb5\x99\xbe\x71\x3b"
- "\xb2\x45\x9b\xc7\x6f\x12\x7d\xa4\x3b\x5f\xaf\xa9\xb2\xcd\x1a\x3c"
- "\xa8\xcc\xb7\xb7\xd3\x59\xac\x6e\x77\x57\x59\xb8\xe6\x6b\x76\x77"
- "\x0d\xd2\x67\xdc\xa0\xed\xdd\xff\x2f\xec\xee\x6a\x72\x09\xb2\xbb"
- "\x0b\x5e\xb8\x4d\xe3\x85\xdd\x9a\x8d\xa5\x58\xe2\x7f\x85\x8d\x25"
- "\x87\x5b\xd8\x49\x12\xe7\xff\x9b\xd6\x35\x10\x1d\xda\x57\xb5\xd0"
- "\xad\xf3\xb9\x44\x5b\x85\x36\x94\x04\xf1\x0b\x20\x1e\xf8\xcf\x37"
- "\x4f\x8f\xe7\x9b\xe7\x12\x1f\x11\x15\xe2\x79\xdf\xed\xa3\xfb\x4c"
- "\x3c\xef\xee\xd0\xa6\x32\x77\x68\xd3\x8e\x34\xc4\xcd\xc1\xef\xae"
- "\xd0\xa6\xb9\x7e\xfc\x02\xf8\x05\x43\x9b\xe6\x01\xf7\xce\x33\xe2"
- "\x17\x83\x9f\x19\xbf\x44\xfc\x2c\xf8\x25\xe1\x67\xc5\x2f\x59\xdd"
- "\x34\x8f\xec\x16\x2b\x7c\xf3\xbc\x54\xcc\x03\x8b\x5e\x6e\x18\xde"
- "\x0f\xdc\x85\xfe\xa7\x11\xdd\xc7\xe3\x7a\x12\x39\xd9\x3e\x7b\xfe"
- "\x67\x01\xd1\x7e\xc2\xcb\xcf\x3b\xdb\x7d\x53\x76\x7b\x7d\xe3\x36"
- "\x79\xf1\x5c\xe0\x8b\xdf\x97\x87\x9f\x0d\x3f\x87\x6f\x53\xad\x0d"
- "\x63\xba\x00\xdf\xc0\xcb\x3f\x00\xbc\xbc\x48\x93\xcf\x3d\x00\x3c"
- "\xb7\xa8\x41\x7b\x3f\xe8\x55\x7e\x20\x6c\x12\x20\x9d\x1b\xe1\x16"
- "\xaf\xf2\x90\x48\xd7\x3b\xbe\xb6\x5c\xbb\x0b\x55\x8e\xf8\x4e\xaf"
- "\x31\x2b\x46\xa6\x5b\x4f\xf2\x3a\x2a\x33\xa0\xaf\xc3\x21\xfe\x39"
- "\x1e\xb3\x65\x3d\xb9\xc4\x91\x55\x94\xbf\xf4\xb1\xdc\xa2\x3b\xad"
- "\x53\x73\xac\x29\x4b\x0b\x9f\xca\x7a\x6a\x79\xee\xf2\x5c\x41\x42"
- "\x22\xea\x9b\x43\xce\xa9\xc8\x0f\x33\x0b\x82\x1f\x8a\xeb\xe4\x9c"
- "\xf6\xee\x85\x7e\x8c\xd1\x0d\xbb\x7d\x07\x7b\x7c\x86\x10\x68\xb8"
- "\xd8\xce\x72\xac\xcd\xea\xb6\x83\x3d\x01\x43\x6c\xa7\x95\x71\xac"
- "\x07\xfa\xe6\xe9\x6c\xd3\x68\xba\xf7\x59\x0b\xd1\x74\x48\xb3\xb7"
- "\x20\x60\x78\x90\xf2\xff\x36\xdf\xb7\x0f\xef\x88\xcb\xa0\x7c\x1c"
- "\x74\x9e\x78\x82\xce\x93\xe1\x8a\xd4\xd7\xc4\x73\x7d\xc6\x6b\x22"
- "\x5d\x45\xc3\x21\x7a\x5e\x28\xe5\x2d\x28\x97\xe4\x75\xfc\xb7\x3f"
- "\xb3\x89\x34\xbf\x2d\x90\x69\xb0\x16\x3b\x94\xf4\xb5\x94\x4e\xf0"
- "\x56\x68\xe3\x3e\xb4\xa3\x6c\x39\x33\xea\xeb\x9b\x78\xa9\xc1\x35"
- "\xbe\x82\x68\xde\x07\xbf\xa2\x35\x4e\xed\xe1\x58\xd3\x2f\x22\xef"
- "\xde\x02\x9f\xc8\x0f\x1e\x33\x8a\x78\x4b\xc2\x23\x84\x3f\x3c\xa5"
- "\x6d\x22\x7f\x83\xda\x66\x20\x7e\xac\x47\x49\xbf\x85\xbe\xd5\x81"
- "\x4e\xad\x13\x7c\x49\x7a\xbe\xce\x0b\xac\x1b\x2f\xed\x2c\xc5\x66"
- "\x33\xba\x0f\x3e\x19\xf5\xcc\x27\xf8\x11\xbc\xe8\x5c\x98\x57\x3d"
- "\x68\xac\x4b\x60\x46\xf2\x61\x10\x1c\xb7\x7b\xb6\x3c\x1b\x48\xdf"
- "\xa3\xd3\xd7\xfe\xc4\xdd\xb3\x23\xc7\x4d\x8e\x97\x35\xb7\x80\x4e"
- "\x38\x72\xc4\x51\xe2\x92\xa2\xa2\xe5\x4f\xe6\x5a\x73\x97\x3c\x96"
- "\x67\x15\x9f\xad\xcb\x8b\x90\x64\xa9\xbd\xc8\xba\x6c\x65\x81\xf5"
- "\xc9\xa2\xa5\xc4\x29\xe4\x16\x16\x2e\xb7\xd9\xc7\x30\x99\xd3\xfa"
- "\xe4\xf2\x7c\xfb\x52\x1b\x5e\x8a\x72\x0b\x72\xac\x62\xd4\x8b\x50"
- "\x54\x7e\xbe\x55\xab\xa1\x28\x6f\x49\x21\x4d\x84\x82\x9f\x22\x51"
- "\x44\xfe\xa1\x7c\x44\x2c\xd9\xb1\xa2\xbd\xa7\x47\xf9\xc1\xd8\x26"
- "\x23\x60\x5d\xbb\x7b\x36\xe9\x32\x20\x1c\x2b\x78\xcb\xaa\x74\x71"
- "\xee\xf3\x0c\xfa\xd8\x3b\xd5\xd9\xde\x57\x95\xb1\x56\xef\x1b\xd9"
- "\x8d\x17\x76\x13\xc9\x26\xa7\x92\x71\x51\xdc\xd1\xc3\x7a\x10\xba"
- "\x2e\x55\xe9\x1e\x09\x8b\x8c\xc6\x48\x9b\xdb\x52\xa7\x27\xe3\x3d"
- "\x79\x66\xf2\x03\xba\x03\xc2\x34\x3b\xf7\x0a\xf2\x84\x28\x8f\xba"
- "\x69\xc7\x02\xe4\xf3\x85\x79\x94\x8c\x66\x4a\x2f\xd2\x55\x65\x4c"
- "\xe0\xe3\x6a\xb1\x37\x65\xec\xa1\x76\x8d\xb0\xcf\x58\x2f\xa0\xdc"
- "\x77\xc1\x9d\x7c\x2b\x91\xa5\x5c\xd8\xe8\xec\xea\x4b\x78\x9a\xf5"
- "\x57\xb2\xd1\xfd\xd8\xdb\x02\x06\x36\xf9\x22\xe6\x45\xf1\x2d\x2c"
- "\x6a\xd5\x03\xcc\xd0\xf0\x44\x03\xd9\x7d\x65\x2d\x0b\xb6\x30\x0f"
- "\x76\x41\x4f\x60\x0f\x6b\x71\x77\xb0\x23\xc1\xdd\xd2\x27\x43\x09"
- "\xf1\x18\x0f\x3d\x45\xb6\xa8\xca\x56\xf1\xd0\xbe\x3f\xf9\x46\xed"
- "\x3d\xdd\x40\xbe\x14\x26\x7b\x82\x9f\xb9\x3d\xa5\x3b\x99\xc7\xe1"
- "\x71\xd3\x1d\x7d\xc0\xed\x91\xd7\xf0\xed\xaa\x16\xe4\x7b\x90\x8d"
- "\x46\xf8\x07\x54\xc7\xda\xcd\xbc\xfd\x17\xe3\xf9\xf1\x5f\x6c\xe6"
- "\x5e\xcc\x29\xf2\x8d\xd0\xb5\x7e\x3c\xef\x5e\xaf\xd9\x9b\xa3\x79"
- "\x6a\x5b\xc1\x2c\xa7\x95\x1f\x74\x09\x59\xc8\x3c\x11\xbe\x0e\x61"
- "\xb1\xff\x7b\x1c\x9b\x29\x3c\xe1\xb4\xf2\x50\x8c\x0c\x6f\xa7\xf0"
- "\x44\x84\x2d\x32\xfc\x16\x85\x93\x10\x4e\x91\xe1\x56\x26\xef\xab"
- "\x3f\x34\x5b\x86\x8f\x51\x18\xb0\x7f\x68\x81\x7b\x05\xb5\xf7\xaf"
- "\x18\xb3\x87\x1e\x2e\xfb\x14\xbc\xaa\xe3\x94\x58\x0f\x87\x9c\x79"
- "\x24\xab\xc1\x7a\xf8\xc1\x47\x57\x1f\x27\x3e\xf7\x21\x47\x74\x2a"
- "\x3d\x7f\x50\x6a\x0a\xb0\xd1\xa0\x1b\xaf\xc6\xb7\xfb\x09\x76\xc3"
- "\xd2\x31\x7b\xcb\x26\xa7\x07\xb9\x9b\x3f\x9f\xdf\xc5\x37\xd5\x64"
- "\xf0\xe7\x0b\xe8\x2c\x1f\x7b\x5d\xa9\xb9\xa1\x24\x20\x6c\xef\x82"
- "\x56\xc7\x1a\x7a\x48\xe8\xce\xf8\x40\xfb\x8e\x60\x8b\xd3\xcc\x37"
- "\x95\x67\x80\xa7\x6c\x7f\x20\x25\x48\x7a\x89\xa0\xf7\x7f\x78\xff"
- "\x9b\x79\x44\x3b\x6c\x3a\xac\xee\x2c\x48\x55\xcb\x32\x19\x4f\xce"
- "\xef\x7a\x20\x8f\xbb\xb1\x8f\x29\x52\x86\xce\x3f\x43\xfd\x9f\x89"
- "\x7a\xa7\xe6\x77\xa9\x2b\xf3\xc8\x9f\x94\xc0\x2f\x4e\xda\xd3\x57"
- "\x00\x9f\x3c\x9d\x69\x0a\x6d\xda\xe4\x7e\x33\xef\xe4\x95\xf9\x66"
- "\x53\x7e\xb8\x60\x44\xfd\x27\xb4\x29\xc4\x33\x59\x10\xf5\x04\xd1"
- "\x57\xa2\x1f\xf6\xaa\xcd\x06\xd0\x31\x5d\x2f\x3e\xda\x3e\x8a\xaf"
- "\xcc\x34\xa1\x4f\xb7\x78\x52\xce\xb3\xd6\x7e\x5a\x2b\x8b\x62\xde"
- "\x74\x30\x36\xdf\x11\x74\x9b\x7c\x42\x47\xce\x6c\x7b\x82\x5d\xcf"
- "\xc7\x95\x67\x9c\x56\x16\x65\x3e\x58\x8a\x3e\xa0\xef\xaf\x75\xb4"
- "\x1b\x55\xf4\x63\xa6\x84\x1b\xe5\x9b\x03\xd8\xb6\xeb\x3c\xce\x95"
- "\xb5\x7f\x91\x98\x37\x6a\x51\x26\xa3\xbb\x83\xfb\x40\xb3\xa8\x03"
- "\x99\x26\x15\xfb\x11\x7d\x7b\x33\xe5\x0c\xa3\x3a\x25\xac\x17\x49"
- "\x3f\xaf\xc9\x80\x33\xea\x27\x5b\xc5\x3a\x5c\x91\x76\x4e\x68\x20"
- "\x6f\xf8\xf1\xdf\xbc\xc9\x85\xf6\xb5\xf1\x4d\x73\x87\xb7\x35\xbd"
- "\x79\xee\x21\x6d\x7e\xc4\xe0\x67\xe1\xbf\xde\x9d\x81\x39\x90\x22"
- "\xfc\x7d\x6e\x5e\xe7\xd6\xe5\x45\x58\x6f\x98\x23\x8b\x3e\x6a\x70"
- "\x76\x0d\x6f\xab\xd5\xf5\x81\xf4\xb3\x36\xea\x33\x6e\x0a\x91\xff"
- "\xe0\xf3\x64\xf7\xba\xeb\xcd\x14\xff\x15\x8e\xe9\xc3\x5f\xf3\x79"
- "\x14\xe9\x3b\x76\xfe\x37\xf9\xc0\x15\x96\x97\x3f\xe2\x1c\xd9\xf9"
- "\xff\xd8\xfb\xfa\xb8\xa8\xca\xbc\xfd\x9b\x01\x0d\x0b\x75\x34\x70"
- "\xd1\x35\xc3\xd2\x76\x34\x4d\xdc\xa7\x5c\x2d\x7d\x16\xdf\x4a\xcd"
- "\x17\x6c\x65\xa3\x44\x43\xc3\x16\x0c\x0c\x0d\x15\x11\x06\xa4\xec"
- "\xa7\x86\x80\x0a\x2e\x1a\x0a\xf6\x68\x8b\x26\xbe\xf4\xd4\xb3\xda"
- "\xaa\x8d\x9b\xee\xfa\xc2\x9b\x3d\x58\x68\xa8\x23\xa1\x91\xa1\x8d"
- "\x38\xca\x80\x33\x73\x7e\xdf\xef\xb9\xcf\x70\xce\x99\x39\x67\x98"
- "\x33\x82\x62\x8f\x7f\xf0\xd1\x39\xe7\xcc\x3d\xf7\xb9\xbf\xd7\xb9"
- "\xee\xeb\xfa\x9e\xfb\x05\xda\xc5\x77\xb4\xbe\x91\x19\xe3\x41\x7d"
- "\xc8\xab\x5d\xb0\xad\xcc\xd0\x8f\x24\x9c\x26\x2a\x13\xf4\x97\x3b"
- "\xfe\xbc\x42\x35\x00\xfa\x19\x0b\x68\x81\xe3\x65\x47\xc8\x94\x89"
- "\x24\xb9\x38\xb2\x8e\xd8\xf6\x4f\x83\x7e\x2d\x78\xfb\x9f\x0d\x2a"
- "\x7c\x8f\x85\xfb\xa5\xb1\x9e\x7d\xfd\xba\xcc\x4f\xbf\x35\xa1\x8f"
- "\x4d\x29\xfc\xd6\xa0\x32\xdf\x08\x0d\x60\xd7\xdd\x06\x2f\x91\x1c"
- "\xc9\x58\x9b\xde\x6d\xe1\xde\x0c\x99\xef\x46\xe2\x7e\xd4\x27\x83"
- "\xcb\xd8\xf9\xdc\x27\x43\x8f\x90\x93\x95\x39\xa4\xa8\xfa\x1c\xce"
- "\x41\xdc\x72\x32\x34\x13\x35\x65\x27\x33\xe8\xc6\x8f\x40\x37\xc2"
- "\xf3\xda\xc1\xaa\x3e\x5d\x63\x7b\xbf\x85\xef\xba\x6c\x9a\xd1\x0c"
- "\xcf\x68\x2e\xb7\x87\x9a\xf9\x83\x10\x92\xcb\xbd\xeb\xc2\xbd\xd5"
- "\x36\x2e\x22\x7d\x36\xaa\xac\xa1\x52\xef\xb6\x3a\xcd\x67\xd7\x7b"
- "\xf1\xb7\x76\x39\x5d\x63\xdb\x63\x6d\xf2\xfc\x00\xf2\x0f\xb8\xf7"
- "\xa3\x1a\xa5\xcf\xe4\x9f\xd9\xb1\x83\x66\xc0\x9d\x19\x30\x67\x86"
- "\xf6\x84\x18\x14\x41\xdc\x24\xfd\x98\x2d\x06\xb7\x93\x6d\x31\x08"
- "\xdd\xc2\xc6\x00\x7c\xdc\xd2\xd7\xb8\x18\x9c\x85\x18\x54\x43\x0c"
- "\x52\x49\xca\x89\x69\x45\x64\x4a\x30\xc4\xa0\xb6\x0e\xd7\x6c\xa7"
- "\x7b\xd8\xc5\xd1\xb6\x67\x63\x71\xd6\xa0\x2a\x31\xd2\x18\xec\x7c"
- "\x9d\xc6\x60\xd7\xeb\x06\xd0\x31\xd1\x41\xdb\xe1\xb3\x65\x71\x68"
- "\x00\xee\xc7\xc3\xa4\x86\xe3\x7e\xdb\x34\x16\xb7\x21\x16\xb7\x69"
- "\x2c\xb4\xf3\x21\x16\xe5\x15\xec\xba\x2f\x27\x2b\x8b\x48\x51\x78"
- "\x3e\x29\x06\x5e\x82\x58\xcc\xc2\xb8\x60\x8e\xc1\xb2\x54\xd3\x75"
- "\x43\x02\xf1\xcd\x4d\x20\xfe\xb6\x78\x58\x6f\x43\x3c\x12\x20\x1e"
- "\x8d\x10\x0f\x53\x53\x3c\x7c\xd9\x78\x5c\xe5\xe2\xd1\x88\xe3\xe6"
- "\x20\x1e\x8d\x10\x8f\x46\x88\x47\x2a\x8d\x07\xf2\xfc\x64\x63\x67"
- "\xc6\xfa\xb3\x86\x6c\xbe\x22\x11\x8f\xa5\x5c\x3c\xce\xba\x13\x8f"
- "\xd0\x68\xc7\x78\xbc\x1a\xdc\x5c\x3c\xf8\x67\xe2\xf5\xb1\x18\x8f"
- "\xdb\xf9\xdc\x33\xf1\x14\x3e\x13\x29\xaa\xa7\xa1\x2f\xc2\x36\x3d"
- "\x5e\x76\x80\x7d\x26\xe0\x5e\x53\xb6\xff\xd9\xa4\x2a\xaa\x86\xb8"
- "\x44\x30\x34\x4f\xc0\xc5\x85\xc6\x23\x3d\xb8\xe0\x5b\xda\xfe\x01"
- "\x13\xb0\xcf\xc0\x67\x03\xe3\x03\x71\x82\xe7\x47\x6a\xff\x41\xe1"
- "\x3b\x60\x28\xd3\x8a\xcf\x09\x3e\x23\xf8\x3c\x14\x47\x9e\x63\xf7"
- "\x73\x3f\x19\x7c\x8c\xe0\xbb\xe0\x93\xa1\x07\x20\x56\x39\xc4\xb2"
- "\x18\x62\xb3\x08\x9e\x13\x0f\xd2\x1b\xf7\x21\x3c\x19\xba\x02\xf5"
- "\x82\x1a\x30\xdf\xc1\x02\x71\xb2\xd4\xfb\x3f\x9c\x06\x3e\x2b\x6f"
- "\x11\xff\xdc\x6c\xe6\xf6\x5c\x66\xda\x87\xe0\x9c\x7c\x2f\x33\xc4"
- "\x08\x9e\x1d\xd1\x33\xd3\xb4\x17\xf3\x0f\x1a\xb2\xa9\x8a\x78\x77"
- "\x8c\xa2\x31\xb2\x08\x9e\x99\x49\x51\xf8\xcc\xa4\x40\x8c\x4e\x2b"
- "\x8c\xd1\xeb\xec\x38\x28\xf0\x9f\x99\x8c\xdf\x68\x3d\xf4\x93\x10"
- "\xa3\x50\xbd\x5c\x8c\x2c\x5b\xa3\xbd\x2d\xea\x04\x7c\x87\xfd\xb8"
- "\xf5\x9d\x69\x1e\x56\xf0\x50\x8d\xe0\x5d\x4f\x1a\xcc\x24\x71\x06"
- "\x51\x25\x9c\x23\xed\x4b\xa7\x7d\x43\x4a\xf5\xfb\x08\xae\xc3\x8c"
- "\xb9\x6f\xdc\x8f\xa1\xd4\xbc\x0f\xf8\x2a\x4f\x87\x9f\x37\xb1\x9f"
- "\x0d\x64\xe9\x0c\xe2\xc9\xee\x4f\x1a\x9a\x4f\xd2\x00\x9f\x85\xaf"
- "\xe7\xab\xac\x59\x29\x05\x8c\x1a\xf7\x91\x21\x3a\x9c\x13\x95\xbc"
- "\x84\xf8\x14\x47\x16\xe1\x5a\x74\x17\x70\x6d\xe1\x12\x23\x94\x69"
- "\x60\x1a\x2d\xd0\x67\x6c\x4e\x65\xf6\xe1\xda\xfa\x83\xb0\x8f\x60"
- "\xd7\xc9\x98\xde\x1b\xb5\x08\xe6\x00\x75\xda\x8d\xa0\xbd\xa6\xb3"
- "\xe3\x09\xe1\x98\x47\xf1\x5c\x1c\xbb\x31\x33\x1b\xeb\x45\xf3\xf1"
- "\xf4\xdf\x41\xb8\x8f\x63\xb7\x7c\xcf\x83\x5a\x83\x57\x26\x78\x62"
- "\xd0\x68\x58\xce\x7c\x86\xfa\x43\x4d\x69\xb9\x89\xcd\xc5\x1a\x92"
- "\x23\xdb\x67\x26\xe0\x3a\xbe\xb8\x4e\x3f\xf6\xd9\x33\xc7\xe2\x1e"
- "\xcb\x80\x59\x0d\xd3\x2d\x4d\xb7\x67\xb6\x41\xc5\xf7\xcb\xd3\x73"
- "\x01\xb7\x9a\xb1\x1a\x26\x19\xf7\x33\x38\x04\xf7\x85\x3e\x68\x47"
- "\x95\x89\xe5\x94\x4f\x67\xaf\x50\x61\xae\xc8\x04\xfc\x50\xf4\xed"
- "\x67\xec\x9e\xb1\x97\x3d\xc2\x0a\x4f\x84\x9a\x09\xfe\x7e\x48\x3f"
- "\x7c\xdf\x32\x5d\xdf\xa0\xba\x10\xd0\xd0\x3e\x24\x2c\xb9\x9a\xdf"
- "\x2f\x53\xb8\x2f\x26\xf2\x4c\xe1\x6c\x28\x13\x79\xa6\x2a\x45\x45"
- "\xb9\x25\x08\xf3\x95\xde\xf6\xdc\x52\x5c\x7b\x95\x68\x01\xc7\xc5"
- "\x91\xf9\xec\x9e\x13\x9d\x80\xdf\xad\x4b\x81\x4f\x6e\x6b\xba\x6e"
- "\x02\x3e\x41\x1e\xd8\x0c\xfc\x61\x5d\xea\xff\x70\x7a\x23\x19\x60"
- "\xe3\x11\xd4\x5e\xf8\xef\x0c\xc0\x68\xe7\x63\x70\x0c\xe2\x64\x05"
- "\x5e\x07\x3e\xd1\x7c\x94\x40\xfa\x7c\x04\x18\xdd\x84\x3c\x02\xba"
- "\x78\x72\x2c\xf0\xc8\x62\xe0\x91\x45\xec\xbe\xc5\xfe\x9b\x55\x94"
- "\x3f\xbe\xac\x5a\xa1\xca\xb4\xed\x5b\xce\xb6\xef\x8c\x91\x25\x88"
- "\x8f\xf0\x14\x76\xce\x9b\x05\xfb\xa7\xa5\xa1\x9e\x25\x46\xc0\xc8"
- "\xfa\xbc\x3d\x78\x8c\x7d\x6e\x17\x47\x3e\x6c\xa5\x58\x0b\xc2\x36"
- "\xc9\xbb\x46\x02\xd9\xbd\x3d\x7f\xf1\x7f\x38\x63\x1e\x19\xb0\xf9"
- "\x1a\xe9\xb3\x79\x1e\xd1\xc0\xf3\xaa\xda\x0c\x75\x98\x39\x5f\x4d"
- "\xd8\xbd\x1d\xda\x87\x44\xc0\x71\xc9\xbd\x1d\x40\x57\xfb\x6f\xc6"
- "\x67\xe6\x1d\x4d\x53\x9d\xcc\x99\x7b\x53\x2c\xd0\x76\x74\x2d\xa6"
- "\x19\x74\xfd\x3d\xf5\x9b\xa1\x54\xe7\xcf\xe0\xd6\x19\x8e\x0c\x03"
- "\xaf\xf2\xd0\x15\x8f\x19\xcb\x98\xb5\xb1\xc1\xb1\x09\xb8\xa6\x31"
- "\x77\x0e\xb4\xa7\x15\x62\xf5\x4c\x0a\x49\xb1\x76\xa9\x04\x9e\x00"
- "\xed\x84\x6b\x2f\x2b\x7a\x0e\x67\xe4\x60\x59\x96\xcc\xbd\xef\xe3"
- "\xfd\x5a\xd7\xee\x4d\xcb\xbb\x42\x02\x99\xb7\x21\x1e\x73\xe1\x5e"
- "\xaf\x90\x3e\xb9\x57\xe0\x5e\x17\xd3\x7b\xb5\xed\xd3\x6e\x4d\xbd"
- "\xa0\x81\x73\x4e\xf7\x45\x32\xbc\x8d\xfb\x22\x85\x6b\x80\xc3\x1e"
- "\x65\x9e\x20\xa4\xb8\x96\x5d\x07\xa3\xbe\xd4\x7c\x8e\xe0\xef\x62"
- "\xfe\xa8\xb4\x8e\xc5\xf4\x42\xc4\xb2\x35\x7f\x47\xf0\x1b\x95\x80"
- "\xed\xfa\x48\xcc\xa5\x05\x1f\xaa\x32\xe0\xba\x13\xac\xe6\xd3\x7b"
- "\x4c\xdf\x8a\x3a\xed\x2b\x38\x86\xd8\x17\x60\x7e\x2b\x62\x1e\xcf"
- "\xb3\xb8\x87\xef\x95\x56\x5e\x22\x58\x9e\xb0\x1c\x8c\xbf\xad\xac"
- "\xcb\x1e\x6f\xbc\x86\x65\x21\x16\x30\xcf\x83\xcf\x1a\x8d\xfd\x3e"
- "\x1c\x6f\xee\xcf\x74\x4b\x0d\xa4\x9f\x0d\xb8\x9e\x89\x1a\x31\xc0"
- "\x62\x05\xf8\x1b\xd7\x49\x65\x98\x50\x4f\xc0\x19\xd6\xf3\x61\x88"
- "\x77\xa0\x0d\x17\x70\xcc\xd7\x1e\x1b\x9d\x96\xa9\xd1\xd3\xf8\xe2"
- "\xff\x5d\xc5\x87\xb2\xf8\xbd\x11\x2a\x3b\x96\xae\x4f\x34\xc6\xe2"
- "\x71\xe4\x4d\xcb\x0d\x01\x67\xd6\x52\xce\x44\x4e\xb2\xf1\x26\xcb"
- "\x4d\xec\xda\xfc\xfb\x70\xdc\x6d\x24\x5b\x47\x85\xbc\x59\x5c\xcb"
- "\xf3\xe6\xe4\x58\x01\x6f\xd6\x32\x8d\xa0\xdf\x25\x78\x33\xfc\x35"
- "\x31\x6f\x86\xcf\x10\xf3\xe6\x9b\x87\xed\x79\xd3\x91\x33\xc3\x37"
- "\x49\xf1\x25\xf8\x98\xc7\xaf\x78\xbc\x19\x2b\xcf\x95\xe1\xc7\x94"
- "\x73\xe5\xac\x33\x62\xae\x9c\xe5\xf3\xeb\xe5\xca\xd9\x31\x22\xae"
- "\x54\xbb\xc8\x95\x57\x58\xae\xf4\x65\x7e\x86\x67\x82\xe3\x8f\xcd"
- "\x73\x65\xb8\x72\x6e\x33\xcf\xc2\xdb\x72\x5c\x39\xfb\xa8\x98\x2b"
- "\x67\x9b\xc4\x5c\x39\xbb\x90\xe7\x4a\xee\x5c\x8b\x70\xe5\xec\x23"
- "\xf7\x86\x2b\x67\xb3\xeb\x9c\x97\x5e\x43\xae\x7c\x73\x4b\xf3\x5c"
- "\x19\x5e\x26\xcd\x95\x70\x9c\xe5\xca\xf0\x32\x9e\x2b\xcf\x35\xc3"
- "\x95\x11\xcb\x15\x70\xa5\x2f\xcb\x95\x6a\x19\xae\x9c\x0b\x6d\xc5"
- "\xe1\x82\xc5\x9e\x1d\x36\x38\xae\xf4\x6f\xe2\x4a\x17\xf0\xa1\x2c"
- "\x7e\x11\xef\x3b\xe3\x4a\x6b\x26\xd5\x97\xc8\x95\x4c\x37\x8e\x2b"
- "\xa3\xcd\x24\xe1\x0c\x70\x64\xf9\x15\x76\x0f\x0f\x76\x8c\x30\xfc"
- "\x25\xbe\x86\x5c\xb4\xba\x6c\x17\xb4\x57\xa9\x7e\x0f\xcb\x4d\xec"
- "\x3c\xaf\x89\xc8\x55\x7b\xe0\xda\x9c\x26\xdd\xc9\x72\xe7\x19\x8e"
- "\x3b\xc3\x38\xee\x9c\x79\x07\xdc\xf9\x3a\xc6\x72\x4e\x76\x83\xca"
- "\xc6\x9d\x6b\x81\x3b\xe7\xb0\xfa\x01\xdf\xed\x52\xee\x8c\xea\x62"
- "\xab\x17\xe6\x34\x4b\xe3\x36\x12\x5a\xaf\x3a\x47\x1e\x9d\xc0\x96"
- "\xf7\x93\x6e\x6e\x2d\x69\xe2\xd2\x30\x9e\x4b\x2f\x7b\x44\x1e\x96"
- "\xe7\xd1\xb7\xd4\x4d\x3c\x9a\x0a\x3c\x7a\x5e\xc0\xa3\xe0\x9b\x3e"
- "\x45\xce\x03\x1e\xad\x67\x79\xf4\x4b\x8e\x47\xff\xd2\xfb\x44\x18"
- "\xf0\xe8\x04\x1b\x8f\xbe\x35\xcd\x94\x7a\x21\xc0\xf4\x41\xf3\x3c"
- "\x5a\xcf\xf2\x68\x6c\xeb\xf3\xe8\x11\x3b\x1e\x05\xef\x8a\x7b\xb5"
- "\x4b\xf2\xa8\x0d\x8f\x2c\x8f\xa6\xf0\x3c\xca\xb6\xeb\x5f\x0e\x96"
- "\x84\x43\xbb\x87\xc7\xb2\xde\xad\x89\x47\x63\xf7\x50\x1e\x85\x63"
- "\x6c\xfe\xe4\x5d\xe0\x51\xc0\x5f\x72\x31\xdc\x37\x3c\x2f\x50\x47"
- "\x35\xf2\x6b\x1e\x3c\x33\xd8\x46\x4d\x7c\x3a\x17\x9e\x19\xe4\x98"
- "\x1b\xf0\xcc\x00\x8f\xce\xbc\xa9\x26\xec\xf3\xf2\x01\x3c\x2f\x57"
- "\x64\xf6\x15\xb3\x8d\xe3\x95\xe5\xd3\x48\x3f\x31\x9f\x46\x8e\x13"
- "\xf3\xe9\x5f\x2c\x3c\x9f\x72\xe7\x90\x4f\x21\x66\xd6\x35\x95\xde"
- "\xc8\xa9\xee\xf1\x69\xa4\x6f\x13\x9f\xaa\x38\x3e\x9d\xdb\x3c\x9f"
- "\xb2\xef\x06\x65\xf8\x54\xc8\x0d\xf2\x7c\x1a\xe9\xcb\xf3\x69\xe4"
- "\xf5\x26\x3e\xad\x90\xe3\xd3\xb7\xfc\xa5\xf9\x14\x8e\xb3\x7c\xfa"
- "\x96\x7f\x13\x9f\x56\x48\xf0\xe9\x04\x21\x9f\x46\x5d\xa4\x7c\xba"
- "\x87\xae\xbb\x01\x9c\x5a\x62\x04\x7c\xe0\x33\x17\x97\xc3\x72\xaa"
- "\x15\x38\x15\xf7\x5a\xc5\xbd\x66\x70\x6c\xbe\x14\xa7\x52\xce\xd5"
- "\x13\xe4\x55\x7c\x36\x93\x27\x81\xdf\x85\xbe\x08\xda\x84\xed\x7b"
- "\x6d\xed\x97\x27\xe0\xd7\x37\x96\xa8\x51\xdb\x89\xb0\x62\xb5\x61"
- "\xe5\x86\x06\xc7\x16\x8b\xb0\xa2\x2c\x96\x51\x7a\x39\x6e\x95\xf3"
- "\xee\x27\xd0\xbb\x87\x10\xd5\xd2\x10\xe0\xd7\x50\xf4\xee\x05\x76"
- "\xde\xbd\xc0\xd1\xbb\x9f\x76\xce\xa3\x8a\xbc\xfb\x9f\x31\x86\x73"
- "\xcf\x89\x79\x74\xee\x45\x31\x8f\xce\x9b\x81\xf5\xa2\x3c\x5e\x20"
- "\xed\xdd\xd9\xe7\xfc\xed\x81\x4d\xde\xbd\x42\xcc\x9f\xbc\x77\x9f"
- "\xd7\x51\x9e\x47\xdf\x0e\x15\xe9\xd1\x99\x1c\x8f\xce\xe6\x78\x74"
- "\x36\xcf\xa3\x27\xbf\xb1\xe9\xd1\xe8\x85\xc7\x2b\x84\x3c\xfa\x76"
- "\x6e\x13\x8f\x56\x3a\xf2\xa8\x8d\x43\x91\x4f\xb1\x1c\xcc\x65\xed"
- "\x04\x9e\xde\x3d\x3b\x56\x45\x73\xb5\xe1\xd8\x76\xde\xf6\xb9\xda"
- "\xe2\xda\x9b\x44\x1b\x86\x7c\x9a\xc3\xf2\x69\x67\x0f\x32\x0b\xb8"
- "\xaf\x13\xce\x45\xc8\xc5\xf7\xfa\x8b\xe8\x5e\x4d\x98\x5f\xb2\x2e"
- "\xa6\xfb\x1e\xda\xf2\x4c\x70\xbf\xec\xfb\xfc\x19\xe7\x38\x4e\xc5"
- "\xfd\xcc\x01\x73\x1f\xdd\x02\x4e\x5d\x24\xa1\x4d\x97\x02\xa7\x26"
- "\x08\xb4\x29\x3c\xfb\x5f\xce\xb6\xe7\xd4\x98\x0e\x25\x88\x15\xe4"
- "\x54\x91\x8f\x2f\x68\x03\x3e\x3e\x66\x96\x98\x4b\x63\xb2\xc4\x5c"
- "\x1a\x33\x9e\xe7\x52\xee\x5c\x8b\x68\xd3\x98\xf0\x7b\xa3\x4d\x63"
- "\xc2\x79\x1f\x3f\x6f\x44\x13\x97\x96\xcb\x71\xe9\xdb\xe1\xd2\x5c"
- "\x0a\xc7\x59\x2e\x7d\x3b\xbc\x89\x4b\xcb\x25\x7c\xbc\x88\x4b\xdf"
- "\xe9\x4d\xb9\xb4\x80\x6a\xd3\x0a\x9b\x36\x2d\xb8\x0f\x7d\xfc\x3b"
- "\x01\x4a\x7d\xfc\x89\x5a\xca\x9f\xc8\x4f\x36\x0e\xe5\x7d\x7c\x81"
- "\xbc\x8f\x6f\x86\x43\x15\x69\x51\x96\x43\x63\x7b\x8b\x39\x34\xb6"
- "\xaf\x98\x43\xdf\xcd\xb6\xe7\x50\x47\xfe\x8c\x9d\x23\xc5\x9d\xd4"
- "\xc7\xbf\x3b\x46\x9e\x37\x63\x33\x95\xf3\xe6\xfc\x42\x31\x6f\xc6"
- "\x96\xff\xdf\xe0\xcd\x05\x23\x45\xbc\xa9\x76\x91\x37\xef\x8a\xa7"
- "\x5f\x60\x97\xff\x5c\x60\x97\xff\x5c\x20\xc8\x7f\x2e\x68\xc1\xfc"
- "\xe7\x82\x7b\x94\xff\x5c\x90\xc3\x6b\xd0\x77\x17\x36\xcf\x9b\xb1"
- "\x39\xd2\xbc\x09\xc7\x59\xde\x8c\xcd\xe1\x79\xb3\x39\x0d\x1a\xf7"
- "\x9a\x02\xde\x6c\xe3\x9e\x3e\xce\x69\xfe\x53\xca\xd3\x23\x6f\xb2"
- "\x7c\x59\x61\xe7\xe9\x43\x84\x9e\xbe\x80\xf7\xf4\xe3\x28\x6f\x95"
- "\x9a\x33\xc5\x9e\xbe\xc5\x79\x74\x61\x94\xa9\x29\x1f\xba\x0a\x78"
- "\x74\x21\xbb\x16\x8c\xa9\x29\x1f\x1a\x7f\xdd\x56\x2f\xea\xe9\xd7"
- "\x12\x5a\x2f\x09\x4f\xcf\x8e\x1f\x5e\x78\xb0\xc9\xd3\x57\xd8\x7b"
- "\xfa\xf8\x2d\xf2\x9c\xba\xb0\x5a\xd2\xd3\xa3\xff\x66\x39\x35\x96"
- "\xe5\xd4\x5b\xeb\x85\x9c\xba\xd8\x83\xe5\xd4\x17\x6d\x9c\xba\x48"
- "\x63\x82\x67\xd3\xd4\xbe\x79\x4e\xc5\x72\x78\x4e\x8d\xbc\x3b\x9c"
- "\xaa\x73\x9d\x53\x85\xf3\x60\xbf\x84\x7b\x6f\xe2\x54\xb6\x8d\x17"
- "\x6f\x2a\x09\x47\x4e\x8d\xb4\xf3\xf7\x05\xd2\xfe\xfe\x38\x51\x61"
- "\xfb\xd8\xfc\x3d\xc6\x80\xe5\x9b\x56\xf5\xf7\x8b\x6f\x8a\xb9\x35"
- "\x5e\x23\xe6\xd6\xc5\xe7\x78\x6e\xe5\xce\xb5\x88\xbf\x5f\x6c\xbc"
- "\x37\xfe\x7e\xb1\x91\xe7\xd6\xf8\x53\xcd\x73\xeb\xc2\x5a\x69\x6e"
- "\x85\xe3\x2c\xb7\x2e\xac\x75\xca\xad\x2f\x0a\xb9\x75\xc9\x61\x1b"
- "\xb7\xf2\xfe\x1e\xf0\x81\xcf\x5f\x5c\xa6\xfb\xfe\x7e\xfc\xbd\xf6"
- "\xf7\x4b\x74\x8a\xfc\xfd\x7a\xe0\x59\xf0\xe2\x4b\x4f\x81\xbf\x9f"
- "\xca\xf9\xfb\xca\x7c\x3b\x7f\x9f\xef\xe0\xef\x13\xa7\x72\x9c\x0a"
- "\xcf\x14\xcb\xa9\xb3\x0b\xdc\xf7\xf7\xaf\x60\x0c\x13\x0e\x8a\x39"
- "\x35\xe1\xb0\x98\x53\xb5\x53\xb1\x5e\x94\xd3\xf3\xa5\xfd\x3d\xfb"
- "\x9c\x2f\xed\x28\xf2\xf7\x50\x3f\x47\x7f\xaf\xf5\x10\x71\xea\x4c"
- "\x21\xa7\x2e\x1d\x2a\xd2\xa9\x70\x5f\xc8\xa9\xdb\xcf\x53\x4e\xdd"
- "\x71\x5e\xc0\xa9\x93\x77\x70\x9c\x9a\x18\x75\x7c\x9a\x90\x53\x97"
- "\x26\xda\x38\x95\xe5\xcb\x99\x26\x55\x72\xa8\xe3\xb8\x13\x76\xbc"
- "\x0f\x8e\x05\x82\xb2\x71\xbe\x18\x96\x59\x78\x3e\xb2\xf9\xf1\x26"
- "\xa1\xd2\xe3\x4d\x4a\xe3\xf4\xa4\xa8\x3a\x93\x1d\x67\x92\x8b\xe3"
- "\x4c\x96\x91\xde\xb9\x8d\x74\xfd\x01\x76\xed\x44\x99\xb5\x07\x66"
- "\xbc\xc6\xf3\x2c\x8e\xc9\xfa\x08\xc7\x64\xdd\xa2\x63\x80\x20\xde"
- "\x8e\xeb\x0d\xd8\x74\x13\xf0\xc1\xfe\xf3\xf6\x3c\x9b\x68\x29\x41"
- "\xfc\x84\x45\xda\x79\xfe\xfc\x36\xe0\xf9\x93\x42\xc4\xfc\x9a\xb4"
- "\x42\xcc\xaf\x49\x23\x78\x7e\xe5\xce\xb5\x88\x76\x4d\x9a\x76\x6f"
- "\xb4\x6b\xd2\x34\xde\xf3\x6b\x07\x37\xf1\x6b\x99\x80\x5f\xcf\x0b"
- "\xf9\x75\x69\x10\xcb\xaf\xe7\xed\xf9\x15\x8e\xb3\xfc\xba\x34\xa8"
- "\x89\x5f\xcb\xec\x3c\xff\x79\x7b\x7e\x4d\xf6\x63\xf9\xb5\x32\xdf"
- "\x4e\xbb\xe6\x37\xef\xf9\x2b\xdb\x9a\xe7\x4f\xf6\x55\xe4\xf9\x91"
- "\x53\xa3\x29\xa7\x22\x67\xd9\x78\x95\xf7\xfc\xf9\xb2\x9e\xbf\x39"
- "\x5e\x55\xa4\x55\x59\x5e\x4d\xf1\x13\xf3\x6a\x4a\x77\x31\xaf\xbe"
- "\xb7\xc9\x9e\x57\x1d\x39\x35\xe5\x35\x29\x3e\xa5\x9e\xff\xbd\x89"
- "\xf2\x5c\x9a\xf2\xbe\x72\x2e\x5d\xf6\x85\x98\x4b\x53\x8e\xfd\xdf"
- "\xe5\xd2\xd4\xf1\x22\x2e\x55\xbb\xc8\xa5\x77\x25\x0f\x90\xba\x45"
- "\xcc\xa5\xa9\xe5\x62\x2e\x4d\x5d\xc9\x73\x29\x77\xae\x45\xb8\x34"
- "\x35\xff\xde\x70\x69\x6a\x3e\xaf\x55\xdf\x4b\x6a\x9e\x4b\x53\xd2"
- "\xa4\xb9\x14\x8e\xb3\x5c\x9a\x92\xc6\x73\xe9\xb9\x66\xb8\xf4\xfd"
- "\x59\x0a\xb8\x54\x9c\x07\xb0\xe7\xd2\x7b\x9e\x07\x78\x3f\x5c\x51"
- "\x1e\xc0\xc6\xa5\x53\x1d\xf3\x00\xc8\xaf\x6c\x1e\x00\xda\xcb\xc6"
- "\x61\x6c\x1e\x60\x0c\xe5\xb2\x52\xf3\x0a\x51\x1e\xa0\xe5\xb9\x75"
- "\xf9\x7c\x53\x53\x3e\x35\x15\xb8\x75\x39\xbb\x46\xaa\xa9\x29\x9f"
- "\xba\xb2\xa3\xad\x5e\x34\x0f\xb0\x8a\xd0\x7a\x49\xe4\x01\x46\xb1"
- "\xe5\x1d\x15\xe5\x01\x04\x5c\x7b\xd9\x63\xc5\x41\x79\x9e\x5d\x5e"
- "\x2b\xca\x03\x54\xf1\x3c\x7b\x0b\xc7\xa8\x03\x0f\xb2\x3c\xdb\x4d"
- "\xc8\xb3\xff\xef\x31\x96\x67\x47\xd9\x78\xf6\x83\xc0\x7a\x78\x36"
- "\xeb\x95\xf2\x2c\xce\x23\x38\x1f\x7e\x6f\x78\x76\x9f\x02\x9e\x15"
- "\xe4\x06\xf6\x43\x7b\x34\xf1\x2c\xdb\xee\xff\x6f\x7f\x49\x18\xf2"
- "\x6c\xb8\x5d\x6e\x20\x5f\x3a\x37\x70\xf4\x5e\xe4\x06\x56\x74\x11"
- "\xf3\xed\x8a\x31\x62\xbe\xfd\x7f\x0d\x3c\xdf\x72\xe7\x5a\x24\x37"
- "\xb0\x42\x7d\x6f\x72\x03\x2b\xd4\x3c\xdf\xae\xb8\xda\x3c\xdf\x2e"
- "\x37\x4a\xf3\x2d\x1c\x67\xf9\x76\xb9\xd1\x29\xdf\x8e\x12\xf2\xed"
- "\xca\x73\x36\xbe\xe5\x73\x03\xf9\x5c\x6e\x60\x45\xf3\xb9\x81\x4a"
- "\x99\xdc\xc0\xd8\x7b\x9d\x1b\x58\x59\xa9\x24\x37\xd0\xb0\x9e\x8e"
- "\xdb\x5f\x8a\xe3\xf6\x67\x00\xff\x06\x7f\x03\x6d\xd0\xfc\xb8\xfd"
- "\x44\xdb\xf8\xd3\xf0\x1c\x8e\x67\x73\x24\x73\x03\x27\x6a\xe4\x73"
- "\x03\x27\xca\x85\xe3\x4f\x57\x9d\x11\xbf\xb7\x5a\x75\xce\xf6\xde"
- "\xea\xc4\xb7\xc8\xb3\xe9\xec\x9a\xdd\xd6\xac\x6c\x42\xd7\xf0\x4e"
- "\xaf\xc6\x7a\x4a\x8d\xe3\xff\xd2\x2a\x7c\x97\xf5\xe1\xb0\xa6\x5c"
- "\x41\x19\xf2\x6d\x0e\xb1\x32\x91\xed\x71\x0d\x71\x36\x57\xf0\x67"
- "\xc4\x5e\x7a\xb6\x90\x77\x0f\x9d\x15\xf2\xee\x87\x11\x36\xde\xb5"
- "\x00\xef\x1e\xac\xca\xa1\xf9\xd7\xd7\xe9\xd8\xd4\x9d\xaf\x0b\xc6"
- "\xa6\x7e\xf3\x4f\x8e\x77\xd3\x66\x1d\xd7\xc3\xfd\x3b\x1b\x3f\x05"
- "\xdf\xdf\x75\xd6\xd5\x31\xa8\x39\x92\x63\xa7\x38\x7e\x92\x1c\x3f"
- "\x05\x75\x55\x6f\xe2\x9e\x55\x0b\x3c\xa7\x9b\x04\xe3\xa7\x72\x13"
- "\xe0\x79\xe6\xe6\x95\x38\x1d\x87\xfa\x3a\x3f\x0e\x95\xc9\xca\x1a"
- "\x8e\xfd\x9b\x35\x3b\x9b\x34\x32\x91\x9e\x8c\x6f\xd6\x70\xfc\xfd"
- "\xdb\xb7\xa1\xdf\x19\x1d\xea\xc9\xf9\xba\x00\xe0\x9e\x4e\xb4\xdd"
- "\xd3\x72\x2d\xd0\xd7\x58\xa0\xaf\xb1\x66\x65\x05\x98\x51\x9b\xac"
- "\xcf\xea\x93\x0b\x3e\xcf\x9c\xca\xee\x69\xf8\x70\x3a\x78\xbd\x3c"
- "\xf4\x79\xd7\xe0\xd9\x48\xd6\xa8\xb0\x3e\x36\x1e\xed\x5c\x03\xf7"
- "\x71\xcd\xb9\x96\x33\xff\xc2\xf3\xa8\x6e\xc2\x09\xf8\xcd\xd5\x6b"
- "\x4a\x10\xbb\xa1\xfc\x9c\x02\x56\x33\xcb\x8c\x95\xc5\xba\xd0\x75"
- "\x1b\x01\x0b\x2d\x90\x93\x10\xd6\x47\xcc\xeb\xab\x7f\x12\xf3\x7a"
- "\x7a\x4f\x31\xaf\xaf\x3e\xc5\xf3\x3a\x77\x0e\x78\x1d\xe2\xc6\xea"
- "\x68\xcb\x1a\x77\x75\xf4\xea\x1a\x1b\xaf\x5b\x39\x5e\xdf\xec\x02"
- "\xaf\x3b\xd5\xd1\x02\x5e\x92\xe7\xf5\xd5\x35\x7c\x4e\x22\xfd\xa8"
- "\xe4\x18\xd9\xb3\x42\x5e\xff\x30\x9a\xe5\xf5\xb3\xf6\xbc\x0e\xc7"
- "\x59\x5e\xff\x30\x5a\x76\x3e\xc1\x59\xfb\xf7\x69\x19\xdb\x59\x5e"
- "\xaf\xe0\xc6\xc8\x96\x29\x98\x4f\x50\x41\x39\xdd\xc6\xe5\x98\xaf"
- "\xba\xb7\x39\x89\x8c\x02\x25\x39\x09\x96\xcb\x6b\x29\x97\x23\x37"
- "\xda\xf8\xdc\x95\xf9\x04\xcd\xf1\xb9\x4d\x37\x23\x9f\xcb\xe9\x66"
- "\x31\x9f\x67\x6e\x17\xf3\x79\x66\xa1\x98\xcf\xb3\xb6\x8b\xf9\x3c"
- "\xab\xc0\x9e\xcf\x1d\xb9\x3c\xd3\x22\xc5\xe3\xb1\x7f\xc6\x1c\x45"
- "\x56\xa8\x3c\x87\xaf\xd1\x28\xe7\xf0\xb5\x7d\xff\xcf\x71\xb8\xda"
- "\x9e\xc3\xd7\x86\x23\x07\x59\x3e\xb0\xe3\xf0\xb9\x1c\x87\x73\x3c"
- "\x92\x77\x85\xd3\xc2\xf6\x1c\x5e\x0b\xf7\xd1\x8c\x1f\x37\xff\x6c"
- "\xcf\xe1\xeb\x42\x44\x1c\xae\x6e\x86\xc3\xe7\xd2\x3c\x88\x68\x5c"
- "\xae\x4c\x2e\x04\xee\x23\x62\x93\x8c\x36\xb7\xb5\x99\xb0\x3e\x62"
- "\x0e\x5f\x57\x28\xe6\xf0\x75\x7a\x31\x87\xaf\xcb\xe6\x39\x9c\x3b"
- "\xd7\x22\xda\x7c\xdd\xce\x16\xd7\xe6\x36\x7c\x38\xe5\xf0\x75\x3b"
- "\x79\x6d\x9e\xb5\xb2\x79\x0e\x5f\x13\x28\xcd\xe1\x70\x9c\xe5\xf0"
- "\x35\x81\xb2\xf3\x1c\x1c\x38\x3c\x3b\x4a\x01\x87\x8b\x73\x21\x36"
- "\x0e\xe7\x72\x21\x79\x82\x5c\x88\x25\x95\xe6\x42\x36\x5d\xa1\xd8"
- "\xe8\xe4\x41\x71\x0a\xf8\xf1\xdf\xac\x72\xee\xdd\x36\xb9\x95\x07"
- "\xc9\x8e\x54\x92\x07\x61\xf9\x1b\xe7\x38\xbc\x06\xbc\x5d\xe6\xe2"
- "\x1c\x87\x71\xb6\x39\x0e\x99\x32\x73\x1c\x38\x3e\x9f\x79\x07\x7c"
- "\xce\xce\x71\x58\xbf\x44\x9c\x63\x5e\x9f\x64\xcb\x31\x53\x3e\xdf"
- "\xb8\x5a\xcc\xe7\x1b\xd3\x9a\xe6\x3c\x00\xe7\x97\xc6\xae\x75\x98"
- "\xf3\xd0\xc4\xed\x6c\x1e\x74\xfd\x39\xdd\x9f\xab\x49\x13\xbf\x87"
- "\xf1\xfc\x0e\x65\x8d\x10\x71\x7b\x95\x90\xdb\xff\xea\x25\xe2\xf6"
- "\xf3\x39\xe2\xf1\x11\x55\xb1\x02\x6e\xb7\xcd\x79\xc8\xf1\x38\x5e"
- "\xd9\x0c\xb7\xc3\xf7\x5d\x9f\x23\xd6\xb2\xdc\x6e\x9b\xdf\x20\xc9"
- "\xed\xc2\xf9\x0d\x82\xf1\x0f\xc8\xed\xec\xde\x1b\x7e\x76\xdc\xbe"
- "\x34\x52\x65\xf9\x1a\x9e\x07\xe0\x75\x7c\x46\x2c\x0c\x70\x3b\xdb"
- "\xde\x39\xc3\x85\xdc\x7e\x3b\x95\x72\xfb\x47\x57\xee\x9c\xdb\x9b"
- "\xf4\xb0\x90\xdb\x5f\x44\x6e\xdf\x30\x8c\xce\xbf\x48\x71\x6d\xfe"
- "\x85\xdd\xf8\x8c\x8f\x5c\xc8\xbf\x38\xe5\x78\x89\x7a\x89\x39\x7e"
- "\xc3\x1a\x31\xc7\x6f\x38\x22\xe6\xf8\x0d\x4b\x78\x8e\xe7\xce\xb5"
- "\x88\x4e\xdf\x90\x79\x6f\xf2\x2f\x1b\x32\x79\x8e\xdf\x18\xd3\xfc"
- "\xdc\x8b\xbf\xfa\x48\x8f\xcd\x80\xe3\x2c\xc7\xff\xd5\xc7\xe9\xdc"
- "\x0b\x51\xbe\xfb\xa3\x19\x92\x73\x2f\xca\xee\xde\xd8\x0c\x21\x56"
- "\xec\xf3\x2f\xee\xe7\xbe\x3f\x0a\x53\x9a\x7f\xc1\xb9\x17\x4b\x4f"
- "\x0b\xe6\x5e\x54\x36\x3f\xf7\x22\x31\xc4\xc5\xfc\x8b\x93\xb1\x19"
- "\x27\x82\x85\xe3\xdd\x72\x5f\x13\xf3\x7b\xee\x8c\x26\x7e\x7f\x05"
- "\xf9\x3d\x7f\xbe\x98\xdf\xf3\x63\xb1\x9e\x52\x73\x31\xbe\x14\xbd"
- "\x57\xcc\xdd\x2f\x1e\xab\x61\x97\x7f\x79\x05\xb1\x97\xdf\x5b\xc4"
- "\xef\xe7\x85\xfc\x9e\x5b\x2d\xa5\xdd\x31\xef\xcd\x8e\x29\x9e\x29"
- "\x98\xd3\x36\xd9\x36\xfe\x6d\xd3\xd5\xe3\xa1\x70\xff\x7a\x99\xb1"
- "\x6e\x33\xe9\x58\x37\x76\x6c\x1b\xe6\xc1\xa1\xac\xdd\x33\x63\x55"
- "\xda\x70\xc6\x8a\x63\xdd\xec\xc7\xb9\xe1\xd8\x37\x1c\xeb\x56\x1c"
- "\x99\x29\x3b\xce\x0d\xb1\x29\x37\xd6\x0d\xea\xed\xcb\x72\xfd\x45"
- "\x8e\xeb\xb9\xb1\x6e\xb9\x8b\xf8\xb1\x6e\x22\xae\x97\x18\x3f\xbc"
- "\xff\x7c\x8a\xb4\x8e\x4f\xe6\xb9\xbe\x11\x75\xfc\x0b\x76\xb9\x18"
- "\x36\x06\x9b\x35\x77\x35\x17\xc3\x72\x7d\xde\x63\x25\x88\xe3\xb0"
- "\x58\x89\x5c\x8c\xe3\x18\xe7\xbb\x97\x8b\xc9\x5b\x28\xe6\xf8\xbc"
- "\x02\x31\xc7\xe7\xcd\xe0\x39\x9e\x3b\xd7\x22\x1c\x9f\x17\x77\x6f"
- "\x72\x31\x79\x71\x7c\x2e\x26\x7f\xaa\xe4\xf8\x3b\x51\x8e\x3d\xb7"
- "\x56\x3a\xc7\x9e\xcb\x8d\xbf\xcb\xad\x95\x9d\x13\xe2\xf0\x4e\x73"
- "\xcb\x73\x34\xc7\xee\xc6\x9c\x90\xca\xb6\x96\x8b\xd9\xf2\xac\xd2"
- "\x5c\x0c\x3b\xb6\xf9\x34\x8e\x0f\x51\x36\x27\xa4\x39\x6e\x6f\xd2"
- "\xee\x4e\xde\x61\x8a\xb9\xfd\xe3\xe7\xc4\xdc\xfe\xf1\x30\x31\xb7"
- "\x7f\x32\x52\xcc\xed\x9f\x04\xd9\x73\xbb\x23\xaf\x7f\xbc\x52\x8a"
- "\xd3\x63\x5f\xc1\x5c\xcc\x36\x83\x3c\x9f\x7f\xfc\xb9\x72\x3e\xff"
- "\xaf\x83\xff\xa7\xf9\x5c\x6d\xcf\xe7\xff\x65\xba\xab\x79\x19\x96"
- "\xcf\xb7\x5e\x15\xf1\xb9\xba\x19\x3e\xbf\x6b\x79\x99\x6d\x63\xc5"
- "\x7c\xbe\x2d\x5e\xcc\xe7\xdb\x06\xf2\x7c\xce\x9d\x6b\x91\xbc\xcc"
- "\xb6\x31\xf7\x26\x2f\xb3\x6d\x0c\xaf\xd9\x3f\xe9\xdd\x3c\x9f\x7f"
- "\x7c\x40\x9a\xcf\xe1\x38\xcb\xe7\x1f\x1f\x90\x1d\x4f\xed\xc0\xe7"
- "\x7f\xf3\x50\xc0\xe7\x92\x63\x54\xda\x46\x5e\xe6\x6f\x44\x69\x5e"
- "\x46\x6e\x9e\x0a\xf2\x3b\x3f\x3e\x45\x30\x4f\x25\xc8\x36\x4f\x25"
- "\x45\x3c\x3e\xa5\xc5\xb9\xbd\xa0\x8b\x98\xdb\x0b\xfc\xc4\xdc\xbe"
- "\x73\xb0\x98\xdb\x77\x06\xda\xea\x49\xf3\x32\xa9\x0e\xf3\x56\xc4"
- "\x3c\x5f\xb0\x50\xf7\x4a\x35\x91\xe2\xfa\xcb\x1e\x9f\x5e\x94\xe7"
- "\xf9\x82\x5c\x39\x9e\xc7\xf1\x2a\x9f\xce\x8c\x94\xe0\xf9\xed\xdb"
- "\x7e\x0d\x3c\x2f\x37\x0e\x85\xf5\x41\xc0\xf1\xc8\xf7\x2c\xbf\x73"
- "\x5c\x8f\x3c\x6f\xf9\x87\x54\x8e\x66\xbb\xbe\xb5\x78\x5e\x3e\x47"
- "\xb3\xe3\x5c\x49\x18\xc7\xf3\xae\xcc\xa1\x39\x2c\xce\xd1\xe4\xce"
- "\x6d\xed\x1c\xcd\xa7\xcf\x89\xf9\xfe\xd3\x48\x31\xdf\x7f\xfa\x18"
- "\xcf\xf7\xdc\xb9\x16\xd1\xef\x9f\x3e\x7b\x6f\x72\x34\x9f\x3e\xcb"
- "\xf3\xfd\xce\x2e\xcd\xf3\x7d\xc1\x56\x69\xbe\x2f\xe0\xd6\x66\x2b"
- "\xd8\xea\x3a\xdf\x17\x36\xf1\xbd\xe3\xfc\x99\x14\xf7\xc7\xc8\x8c"
- "\xbc\xd7\x39\x9a\x42\x59\xfe\x77\xb6\x3e\x86\xfb\x39\x1a\x6e\x4e"
- "\xe2\x6c\xe9\xf5\x31\x8e\x3b\x19\x23\x73\xbc\x48\xc8\xf5\x85\x16"
- "\xf1\x58\xc4\x5d\x1e\xb6\xb1\x88\xc7\x4b\x90\xeb\x3f\xeb\x27\xe6"
- "\xfa\xcf\x34\x72\x39\x9a\xfd\x56\xe1\x98\xc4\x5d\x33\xc4\x39\x9a"
- "\x7c\x71\x8e\x66\x32\x62\x6f\xef\x19\x79\xae\xdf\xb5\x42\x3c\x06"
- "\x9c\xce\x51\xdc\x3e\x93\x1b\x03\x3e\x53\x30\x06\x7c\xc2\xc7\x1c"
- "\xd7\xef\xde\x76\xac\xcc\x4c\x94\x8c\x43\xbc\xf3\xb1\xde\x2b\x24"
- "\xc7\x20\xb2\x7d\x80\x93\x71\x88\x6f\x9c\x51\xe3\x98\x66\xcd\xe6"
- "\x45\x82\x71\x88\x4e\xd6\x33\x16\xf1\xff\xcc\x58\x59\xfe\x6f\x60"
- "\x78\xfe\xb7\xfe\x81\xcf\xdb\x58\x51\xe7\xb3\x71\xd9\xad\x6f\xad"
- "\xbc\x8d\x54\x9e\x44\x37\x0a\xf9\x7f\xcf\x69\xaa\xf3\x23\xdb\x58"
- "\xde\x66\xef\x40\x31\xef\xef\x0d\x17\xf3\xfe\x5e\x3f\x9e\xf7\xb9"
- "\x73\x2d\x32\x16\x7d\xef\x80\x7b\xa3\xf3\xf7\x0e\xe0\xf3\x36\x9f"
- "\x75\x68\x9e\xf7\x77\x65\x4a\xf3\xfe\xae\x4c\xca\xfb\xbb\x32\x9d"
- "\xe6\x6d\x44\x63\x23\x3f\xbb\x7a\xc7\x79\x1b\x9b\xce\xbf\xe7\xf3"
- "\x7a\x3e\xab\x55\x92\xb7\x69\x9a\x93\x7e\x47\x79\x1b\x69\xbe\xb7"
- "\x69\xfb\xe3\x4e\xde\xb9\x8a\xf9\xfe\xbf\xaf\x8a\xf9\xfe\xbf\xaf"
- "\x8b\xf9\x7e\x5f\x47\x31\xdf\xef\xf3\x91\xca\xdb\x88\xb9\xfe\xf3"
- "\x91\x52\x3c\x1f\x3b\x19\xf3\x36\x7f\x3f\x20\xcf\xf1\x9f\x47\x2b"
- "\xe7\xf8\x2f\x56\x3e\xe0\x78\x3b\x8e\x57\xdb\x73\xfc\x17\x47\xee"
- "\xaa\xc6\x67\x39\xfe\x7f\xf6\x8b\x38\xbe\x05\x73\x39\xae\xcc\x27"
- "\x91\xd7\xf6\x7f\xb7\x1b\xff\xfe\x77\xbb\xf1\xef\xff\x23\x18\xff"
- "\xfe\xf7\x31\x2d\xc7\xf1\x7f\x6f\xf9\xf1\xef\x2e\x71\xfc\xdf\x05"
- "\xe3\xdf\xff\x7e\xb5\x79\x8e\xff\x3c\x4e\x9a\xe3\xe1\x38\xcb\xf1"
- "\x9f\xc7\x39\xd5\xf6\x22\x8e\xdf\x77\xaa\x35\x72\x39\xf7\x66\xbe"
- "\xd1\x3e\xd9\x3d\xec\x94\xae\x3b\x22\x9b\xcf\x19\x6a\xcb\xe7\xc4"
- "\xca\xe4\x73\x5a\x8a\xf3\xf7\x5f\x14\x73\xfe\xfe\x4b\x62\xce\x3f"
- "\xe4\x27\xe6\xfc\x43\xbe\xe2\x7c\xce\x02\x87\x7c\x8e\x98\xff\xbf"
- "\x1c\xab\x9b\x2c\xcc\xe7\xe4\x0b\xf2\x39\x07\x8f\xca\xf3\xff\x97"
- "\xb2\xfc\x7f\x8b\xe5\xff\x70\x09\xfe\xff\xc7\xff\x11\xfe\x0f\xbf"
- "\x03\xfe\xff\xc7\x3d\xe0\xff\x03\x87\x69\x8e\xc7\xc5\x75\x52\xf6"
- "\x2b\xcf\xf1\xdc\x59\x3f\x70\xb0\xbb\xb8\x1f\x38\x38\x51\xdc\x0f"
- "\x1c\xf4\xe0\xfb\x01\xee\x5c\x8b\xf4\x03\x07\xfd\xef\x4d\x3f\x70"
- "\xd0\x9f\xef\x07\x0e\xde\x6c\xbe\x1f\xf8\x52\xa6\x1f\xf8\x92\xeb"
- "\x07\xbe\x54\xd0\x0f\x1c\xba\x24\x9f\xe3\x89\x75\x3f\xc7\x33\xec"
- "\x5e\xcf\x83\x3a\x54\xad\x28\xc7\xb3\x3e\xdb\x50\x84\x6b\xa4\x5c"
- "\x24\xaa\xa5\xb3\x6c\x39\x1e\x9d\x5d\x8e\x47\xe7\x90\xe3\x59\x72"
- "\x91\xe3\xff\x89\xdc\x7c\xd3\xc9\x77\xb0\x46\x0a\xbb\x9f\xf4\x57"
- "\x17\xc5\xe3\xe6\xbf\x62\xf9\x9f\x5f\xbf\xef\xeb\xf9\x58\x2f\xda"
- "\xff\xe8\x9c\xac\x81\xaa\x1b\x2c\xca\xe9\x4c\x94\x5a\x23\xe5\x6b"
- "\xd1\xb8\x1b\xf1\x7c\x53\x5d\x98\x88\xef\x27\xd3\xf9\xa6\x3b\xa4"
- "\xde\xd3\x36\xad\xc9\x7f\x38\x86\x5d\x93\xbf\x69\x2d\x3f\x5d\xbe"
- "\x4b\x6b\x49\xcf\xe4\xd6\x92\x3e\x7f\x0f\xd6\x92\x76\x75\x4d\xfe"
- "\xf3\xf6\xeb\xf7\xfd\xb3\x43\x69\x91\x8e\x94\x20\x46\xc2\xec\xd7"
- "\x3e\xd5\x49\xcf\xdd\x57\x71\x73\xf7\xe7\xb5\xce\x3a\x28\x58\x1f"
- "\xb6\xcf\xef\x5a\x49\x0a\xb5\x06\xb6\x3e\xb8\x77\x37\xd4\x75\x75"
- "\x11\x60\xd5\x8a\x7c\xba\x00\xf9\xf4\x9f\x3a\xf6\xda\x8b\x80\x85"
- "\xae\x91\xc1\x88\xe3\x74\x2b\xf1\x89\x5d\x84\xdc\xfa\x4f\x76\xdc"
- "\x17\xc8\x08\xe0\x56\x7a\x5d\xd2\x45\xc6\x62\xe9\x1a\x1b\x0c\xf5"
- "\x7f\x68\xd7\xbc\xb2\x76\x25\x7a\x23\x3c\x17\x57\xd8\xbd\x5c\x4b"
- "\xcd\xf5\x3a\x8c\xc5\xa1\x79\x65\x5e\x0c\xf0\x6f\xde\x5b\xc4\x5b"
- "\xd9\x73\xfa\xcf\x34\x56\xcf\x60\xbf\xd7\xb5\xd2\x07\xd7\x01\xb1"
- "\x69\x2b\xeb\x2f\x7c\x7e\x6b\x13\xb4\x8f\x95\xa1\x7d\xdf\x1b\x51"
- "\x94\x37\xe0\xf7\x34\xd0\x96\xec\x18\x5b\xe4\x0d\x76\x0f\x2b\xe0"
- "\x8d\xcd\x75\xfc\x7b\x6c\x2c\x1f\xdb\x88\xe6\x51\xbe\xe6\xc7\xbf"
- "\xe8\xe5\xb8\x55\x17\x21\xcd\xad\xba\x08\xca\xad\xba\x88\x26\x6e"
- "\xd5\x4b\xe4\x51\x44\xe3\xd8\x8f\x70\xe3\x5f\x74\x76\x1a\x5b\x77"
- "\x1f\xae\x8f\x72\x44\xd1\xf8\x17\x96\x4f\xa3\x29\x9f\x22\x5f\xd9"
- "\x38\x95\xcf\xa3\xe8\x64\xf3\x28\xcd\x71\xaa\xa2\x39\xfc\x2c\xa7"
- "\x1e\x7d\x4e\xcc\xa9\x47\x87\x89\x39\xf5\xd8\x7e\x7b\x4e\x75\xe4"
- "\xd3\xa3\x4b\xa4\xb8\x94\xae\x8f\x72\x2c\x52\x9e\x47\x8f\x6e\x95"
- "\xe3\x51\x76\x7c\xfa\x4c\xc1\xf8\xf4\x26\x1e\xfd\xd7\x17\x62\x1e"
- "\x3d\x5a\xe3\x2a\x8f\xb2\x7b\x9b\x9c\xbf\x0b\x7b\x9b\xb8\xcd\xa3"
- "\xb1\x76\x3c\xfa\xef\xa9\x3c\x8f\xda\xef\x6f\xd2\x0c\x8f\xce\x6d"
- "\x9d\x35\x50\x44\x3c\x6a\x35\xb0\xf5\x09\x98\xc7\xd6\xf5\xb4\x98"
- "\x47\x8f\x79\xcb\xf3\xe8\xbf\xb7\xf1\x3c\x4a\xaf\x6b\x5d\x1e\xfd"
- "\x77\xb9\x88\x47\xe7\x0a\x78\xf4\x67\xde\x43\xe0\x18\x8b\x26\x1e"
- "\x8d\x11\xf0\xe8\xdc\xe6\x78\xf4\xdf\xe5\xd8\x46\x54\xa3\x1e\xdb"
- "\xd0\x3c\x8f\x1e\xdd\x29\xcd\xa3\x70\x9c\xe5\xd1\xa3\x3b\x79\x1e"
- "\x95\xd0\xa8\x22\x1e\x3d\x9e\xa4\x80\x47\xdb\xf8\xda\x28\xc7\x13"
- "\x15\xe5\x2a\xf8\x39\x9d\x8e\x6b\xa4\xce\x10\xce\x09\xda\x67\xb7"
- "\xef\xc9\x3e\x87\x7d\x4f\x96\xd8\xe6\x78\x8e\xe3\x78\x75\xc2\x1d"
- "\xf0\x2a\x3b\xc7\xf3\xc4\x6a\xf1\xd8\x93\x13\x6b\x6c\x63\x4f\x28"
- "\xaf\x96\xf4\xb5\xd5\x8b\xdf\xf7\x64\x9f\x93\x35\x52\x4f\x5c\x14"
- "\xad\x8d\x32\x4e\xb8\x36\x4a\xf1\x69\xf9\x35\x52\x4f\x7a\x8b\xd6"
- "\x46\x39\x51\xd0\xb4\xef\x89\xfd\x1a\xa9\x3c\xc7\x16\x75\x67\x39"
- "\xb6\x69\x0d\xaa\x93\x13\x9b\xd6\x48\x6d\x66\x5e\x10\x96\xb3\xab"
- "\x2a\xb2\xf5\x39\x56\xa7\x80\x63\x45\xfb\x9e\xd8\xaf\x31\x55\x74"
- "\xb0\xf4\xd8\x3e\x52\x12\xbe\x4f\x62\x6d\xd4\x7d\xf7\x74\xef\x13"
- "\xac\x97\x34\xd7\x16\x8f\x14\x73\x6d\x71\x1c\x7b\xed\x39\x29\xae"
- "\x2d\xee\xc2\x73\x2d\xbd\x2e\xe9\x9c\x1d\xd7\x56\xca\x70\x2d\xf4"
- "\xab\x79\x97\x95\x72\x6d\x71\x10\xcb\xb5\xa9\x1c\xd7\x5e\x69\x69"
- "\xae\x2d\x0e\xe2\xb9\xb6\xa4\x5d\xf3\x7b\x4c\x9d\x54\x4b\xcf\xcb"
- "\x39\xa9\xa6\x5c\x7b\x52\xed\x74\x8f\x29\xd1\x98\x8f\x92\x9b\xb6"
- "\x3d\xa6\xf8\x7c\xc0\x3e\x2e\x1f\x70\x3f\xef\x89\x52\x62\x54\x9a"
- "\x0f\x38\x09\xde\x1d\xe7\x5d\x2e\xc5\x3d\xa7\xc2\x70\x4f\x94\x3d"
- "\x76\xf9\x80\x3d\x8e\xf9\x80\xd7\x9c\x73\xac\xa2\x7c\x00\x3b\xef"
- "\xb2\xf4\xba\x98\x63\x4b\x6f\x8a\x39\xf6\x7f\x57\xdb\xe6\x59\x62"
- "\x7d\xe4\xd7\x4c\x2d\x1b\xd9\x94\x0f\xa8\x14\x73\x2b\x9f\x0f\xf8"
- "\xdf\x11\xf2\x1c\x5b\x26\xce\xff\x4e\x28\x10\xcd\xb3\xdc\x51\x25"
- "\x5c\x87\xda\xb6\xfe\xd4\xa9\x95\xc7\xcb\x85\x1c\x5b\xb6\xe7\x7e"
- "\x5a\x87\xba\x69\xad\xa9\x66\xc6\x72\x3b\xae\x43\xfd\x4d\xdf\xd2"
- "\x63\x7b\x08\xce\x6d\x63\xf9\x56\x94\x1b\xd8\x73\x6f\x72\x03\xc7"
- "\xf6\xc8\xe4\x06\xbe\xd9\x2e\xe6\xd9\x6f\x2a\xd9\x6b\xcf\x48\xf1"
- "\xec\x37\x4b\x78\x9e\xa5\xd7\x25\x9d\xb1\xe3\xd9\x8a\x96\xd4\xb4"
- "\xdf\x14\xb4\x6e\x6e\xe0\x9b\x02\x3e\x37\xf0\xbf\x2e\xcc\x7f\x2c"
- "\x8b\x93\xe6\xd9\x32\x2e\xef\x5a\xc6\xe7\x5d\x2b\x24\xf6\x4b\x11"
- "\xf1\x6c\xf9\x54\xdb\xfc\x47\x56\xd3\x56\xda\x34\xed\x9e\xfb\x70"
- "\xbf\x94\xf2\x60\xa5\xb9\x01\x9c\xe7\x8e\xdc\x8a\xdc\x65\xe3\x57"
- "\x3e\x37\xb0\x47\x3e\x37\xd0\x0c\xbf\x2a\xdf\xbb\xef\xf4\x54\x31"
- "\xbf\x9e\x0e\x11\xf3\x6b\xc5\x45\x7b\x7e\x75\xe4\xd6\xd3\xd9\x52"
- "\xbc\x4a\x73\x03\x15\x99\xf2\x9c\x7a\x5a\x27\xc7\xa9\xec\x9a\x7e"
- "\x55\xfc\x18\x69\x9e\x53\xbf\x3d\x27\xe6\xd4\x6f\xbd\x5c\xe5\xd4"
- "\x7b\xb2\x5f\x8a\xdb\x9c\x1a\x69\xc7\xa9\xdf\x2d\xe1\x39\xd5\x7e"
- "\xcf\x94\x66\x38\xb5\xb5\xf2\x04\x42\x4e\x15\x69\xd7\xef\x2c\x62"
- "\x4e\xad\x08\x94\xe7\xd4\xef\x8a\x79\x4e\xa5\xd7\xb5\x2e\xa7\x7e"
- "\x67\x6e\xdd\x3c\xc1\x77\x66\x5e\xbb\x56\x1c\x6e\x9e\x53\x4f\x1f"
- "\x93\xe6\xd4\xd3\xc7\x28\xa7\x9e\x3e\xe6\xfa\x9c\xf2\x33\xdb\x14"
- "\x70\x6a\x1b\xdf\x4b\xe5\xcc\x56\xc5\x79\x02\xcc\xb7\x22\x97\x56"
- "\xde\xd9\xda\x21\xf1\xb6\xb5\x43\xc6\x70\x1c\xfb\xe2\x9d\x72\xec"
- "\xd9\x2f\xc4\x63\x1a\xce\xee\xb7\x8d\x69\xa0\x1c\x7b\xfe\x35\xf1"
- "\xfe\xa8\x8e\x6b\x85\x88\xd7\x50\xfd\xbe\x43\x53\x9e\x00\x39\x77"
- "\x8c\x30\x4f\x70\xbe\x83\x3c\xdf\x7e\x1f\x28\xca\x13\xfc\x4b\x9a"
- "\x6f\x6f\x89\xf8\xb6\x72\x12\xcb\xb7\x4d\x6b\xa8\x7e\x1f\x67\x5b"
- "\x43\xb5\x59\x0d\x2b\xe2\xdb\xf0\xbb\xc3\xb7\xfb\x5c\xe7\x5b\xf1"
- "\x5e\x2a\xf6\xeb\xa5\x56\x5e\x2f\x3d\x02\x7c\xcb\xae\xd7\x61\xbf"
- "\x66\xaa\x6b\xeb\x75\xb4\xd6\x9a\xa9\x58\x2f\x69\xde\x3d\xb7\x50"
- "\xcc\xbb\xe7\x0a\xd8\x6b\x25\x79\xf7\xdc\x58\x9e\x77\xe9\x75\x2e"
- "\xf3\xae\x5b\x39\x83\x73\x71\xad\x9b\x33\x38\x17\xc7\xf3\xee\xf9"
- "\x61\xcd\xf3\xee\xf7\x43\xa5\x79\xf7\xfb\xa1\x94\x77\xbf\x1f\xea"
- "\x94\x77\x45\x63\x08\x2e\xf4\x93\x5c\xcb\xa3\xf2\x7e\xdf\x67\xe5"
- "\x82\xc6\x9d\x9c\x01\x70\xb0\x2a\x11\xd7\x70\x0a\xc7\x31\x04\xcd"
- "\xe7\x0c\x9a\xe3\x5b\xe5\x39\x03\x7d\x5f\x31\xdf\xea\xfb\x89\xf9"
- "\xf6\x87\xd3\x58\x2f\xa7\x39\x03\x96\x03\xf4\x0b\x9b\x72\x06\x7a"
- "\x31\xcf\xf2\x39\x83\x1f\x96\xcb\xbf\xfb\xd2\xe7\x8b\xf4\xed\x8b"
- "\x76\x6b\x56\xcf\xe4\xf9\xf6\x44\x89\x6d\xcc\xd8\xc5\x53\xc7\x83"
- "\x85\x7c\xab\xaf\x76\x58\xb3\x7a\x5a\x0b\xae\x59\x3d\xad\x85\xd7"
- "\xac\x0e\x11\xaf\x59\xbd\xf1\x16\x3f\x8e\x4c\xf9\x9a\xd5\x55\x31"
- "\x2c\x07\x23\x86\x70\xdd\x6a\x57\xf2\x08\xad\xbc\xd7\x8a\x88\x7b"
- "\x45\x79\x84\xaa\xeb\x62\xee\xfd\xa1\x8f\x3c\xf7\x56\x1d\xe6\xb9"
- "\x97\x5e\xd7\xba\x9a\xb7\xca\xd0\xba\x79\x84\x2a\x03\x9f\x47\xf8"
- "\xe1\x0b\x49\xee\x15\xbd\x1b\xd3\x17\x48\xbf\x1b\x83\xe3\x2c\xf7"
- "\xea\x0b\x64\xf3\x08\x0e\xe3\xb7\xaa\x37\xd0\x77\x63\x9c\xe6\xd5"
- "\x2b\xc8\x23\xb4\xb9\x31\x06\xd5\x39\xee\xe4\x11\x90\x6f\x91\xcf"
- "\x6c\x9c\xeb\x4a\x1e\xa1\xe5\x35\xee\xa5\x0d\x62\xce\xbd\xb4\x49"
- "\xcc\xb9\x3f\x8d\xb0\xe7\x5c\x47\xbe\xbd\x74\x4e\x8a\x6b\x69\x1e"
- "\xa1\xa6\x56\x9e\x67\x2f\x7b\xcb\xf2\xac\xdd\xd8\x5c\x9e\x67\x7f"
- "\x1c\x26\xe6\xd9\xcb\x13\xdd\xe2\x59\x57\xf7\x60\x69\x53\x3c\x1b"
- "\x6e\xc7\xb3\x3f\x9e\xe6\x79\xd6\x7e\x1f\x96\x66\x78\xb6\x95\xf6"
- "\x61\x91\xd7\xb8\x35\xaf\x89\x79\xb6\x26\x4d\x9e\x67\x6b\xfa\xf1"
- "\x3c\x4b\xaf\x6b\x5d\x9e\xad\x09\x6d\xdd\xdc\x42\x4d\x28\xaf\x71"
- "\x7f\x7a\xac\x79\x9e\xbd\xac\x96\xe6\xd9\xcb\xdc\x7b\xb1\xcb\x6a"
- "\x59\x8d\xeb\xc0\xb3\x57\x3c\x14\xf0\x6c\x1b\x1f\x83\x70\x85\xb8"
- "\x93\x5b\x60\xf9\x55\x6f\x37\x5f\xe2\x8c\x70\xbe\x84\x20\xb7\x30"
- "\xc6\x96\x5b\x10\xef\xcf\x12\x6f\xcb\xdf\x06\x71\xbc\x3b\xea\x4e"
- "\x79\xf7\xe7\x2e\xf5\x4d\xbc\xbb\x00\x78\xf7\x67\x76\x7e\x44\x7d"
- "\x13\xef\x5e\x3b\x6e\xab\x17\xbf\x3f\x8b\x4c\x6e\xe1\x79\xb6\xbc"
- "\x39\x4d\xb9\x05\xe4\xe1\x20\x61\x6e\xe1\xda\x12\x79\x0e\xfe\x39"
- "\x4d\x94\x5b\xf8\xa7\x34\x07\x1b\x45\x1c\x5c\x7b\x90\xe5\xe0\xe7"
- "\x6d\x1c\xfc\x73\xd9\x2d\xf0\x96\xb7\x3e\x50\xc6\xc1\x46\x96\x83"
- "\xc7\xdd\x1b\x0e\xfe\xbc\x05\x38\x98\x6d\xf7\xab\xb3\x4a\x75\xc0"
- "\xc1\x61\xc8\xc1\xe3\x5c\xcb\x37\xdc\xa5\x3d\x5a\xb0\x5e\xd2\x5c"
- "\x7c\xf5\x92\x98\x8b\xaf\xf9\xb3\xd7\x4a\x72\xf1\xd5\x2f\x78\x2e"
- "\xa6\xd7\xb5\x6e\xbe\xe1\x6a\x75\xeb\xe6\x1b\xae\x56\xf3\x5c\x7c"
- "\x6d\x7b\xf3\x5c\xfc\x73\x96\x34\x17\xc3\x71\x96\x8b\x7f\xce\x72"
- "\xca\xc5\xcf\x0b\xb9\xf8\x97\x26\xcd\x2b\xca\x37\xe8\xef\xf7\xbd"
- "\x5b\x7e\x91\xd5\xbf\x01\xbd\x48\x4a\x95\xc7\x2f\xd7\x4b\x73\x09"
- "\xb9\x91\x4a\x52\x4a\xcd\xcf\x13\x38\x06\xed\x67\xe8\x5e\xea\x3f"
- "\x94\x58\xd7\x2e\x8d\x47\x3e\x5e\x87\x7f\xa0\x71\x33\x55\xdc\xb3"
- "\xc5\xb6\xb1\x81\x1d\xef\x8a\xc7\x91\x7b\xf3\x04\xe7\xa5\x7e\x8b"
- "\xc9\x4c\x30\x71\xdf\x8b\xa3\xf3\x6e\x12\xcc\xb6\xcf\x88\x4d\xbd"
- "\x87\x21\x9e\x59\x93\x60\x34\x74\x49\x30\x4a\x7d\xff\x09\x35\xf1"
- "\xee\xb4\x8c\x61\x36\xaf\x67\x8c\x37\x9e\xd2\xea\x6f\xac\x22\x24"
- "\x73\x3d\x63\xa8\xff\xc0\x00\xb8\xf9\xa5\xe2\xaf\x70\xdd\x8d\xae"
- "\x75\x65\x37\x52\x83\x09\x1c\x3b\x62\x3b\x06\xed\x46\xac\xa9\x9e"
- "\x8c\x15\xce\x31\xeb\x47\x1d\xc8\xd3\x02\x57\x25\x12\xf2\xcc\x2d"
- "\x7c\x66\x0c\xe5\x80\x19\xdf\x74\x28\x33\x03\xca\x62\x7e\xf3\x5b"
- "\x23\xe0\xd1\xab\xe4\x7d\x82\xcf\xf4\x0a\xb8\xaf\xfc\x74\x6c\x7b"
- "\xcf\xfe\x39\x8c\xca\x8b\x58\xb7\xcd\x1b\xca\xf8\xad\x37\x40\x3c"
- "\x48\xe6\x02\xe2\x8d\xf7\x91\x01\xd7\x31\xaa\x64\x06\xfa\x11\x5d"
- "\xa9\xd9\x48\x9f\x69\xa8\xdf\x21\xf0\xb1\x0c\xfc\xee\xe6\x05\x44"
- "\x0d\x7f\x3e\x4c\xf6\x7a\xa8\xeb\xf5\x30\xb8\xcf\x31\x58\x2f\xb9"
- "\x7b\xcc\xd8\x08\xfd\xce\x6f\xfd\xb1\xef\x60\x7f\x1f\x7f\x9b\xfd"
- "\x1d\x95\x75\x85\x05\x8e\x33\xa9\xc9\x4c\x69\xbc\x99\x74\x86\xb6"
- "\xc8\x83\x7a\x23\x1e\xad\x9f\x68\xf5\xef\xf5\x20\x64\x57\x42\x8d"
- "\xaa\x14\xea\x6e\xf9\xeb\x6f\x8d\x3a\xed\xef\x09\x9c\x37\xa0\x67"
- "\xb9\xec\x51\xf7\xda\x94\x9f\x08\x41\x3e\x81\xff\xcf\x31\x42\x3f"
- "\x36\x09\x3e\x67\xc0\x7d\x58\x6f\xf8\x7b\xe1\xb5\x70\xbc\x8b\x6e"
- "\xd1\x59\xd2\x39\x96\x78\xa7\xc3\xbd\xd1\x6b\xaf\xeb\xf1\x5a\xbd"
- "\x47\x5d\x04\xd6\x01\x3e\x1b\xe1\x33\x7e\x0f\xc7\x90\x11\x66\xeb"
- "\xbc\xa1\x2c\x36\xb3\xd6\x1b\xac\x7d\xe7\x0d\x65\xb9\x0f\xee\x33"
- "\x03\xee\x19\xae\xf1\x81\x6b\x7c\xd8\x7f\xb5\x44\x9d\x05\xc7\xb0"
- "\x1c\xf8\xd7\x47\x37\xaf\x11\xcb\x2e\xc3\xb2\x65\xda\xc1\x8b\xf1"
- "\x5d\x6f\x60\x00\xdb\xd8\xa7\x06\x68\x3d\x4e\x55\x79\xdc\xf0\xea"
- "\xec\xc1\x30\xf0\x9c\xeb\xde\xd3\x12\x9f\x4c\x2b\x21\xba\x1e\x58"
- "\x4e\xdd\x39\x28\xdf\x0b\xdb\xa2\xfe\x83\xba\x03\x7a\x8f\xeb\x91"
- "\xd8\xbe\x10\x4f\x63\xc0\x13\x78\x0f\x37\x7c\xf1\x77\xf0\x3b\xdc"
- "\xf5\xec\xda\xf7\x58\xe7\x00\xad\x27\x03\x9f\x2d\x9e\x1e\x17\x89"
- "\xa7\x7f\xc7\x3e\xf0\x7d\xb3\x9e\xec\x2c\xc7\xef\xeb\xe9\xf7\x00"
- "\x4b\x37\xa0\xde\x86\xf7\xf1\x18\x7e\x96\xa9\xaf\x8f\x2d\x6e\xc5"
- "\xfe\x80\x0d\xfb\xd8\xd9\x30\x02\xb8\xb0\x61\x04\xeb\xbb\x5b\xab"
- "\x57\xb1\xfd\xb0\xc7\x0d\xd6\xd7\xa5\x43\x0c\x2d\x1f\xf9\x7b\x65"
- "\x40\xdb\x5a\x6f\x63\x5c\xaa\xe0\x9c\x31\x04\xe3\x92\x91\x00\x31"
- "\xa1\xd7\xc6\xf3\xf5\xc7\xcf\x46\x36\x9e\x56\x88\x05\x9d\xbb\x69"
- "\xec\x87\xf7\x93\x71\x0b\xe2\xd8\x8d\x31\x1e\x81\xab\x19\xc4\x2d"
- "\x60\x64\xd7\x02\x93\x0a\xc7\xf5\xe1\xf1\x43\x75\x26\x55\x06\x48"
- "\x36\xe8\x67\xc9\x6a\xe0\xe5\x4d\x8b\xa0\xcd\xa1\x4c\xa6\x4f\xb4"
- "\x6e\x90\x2d\x8e\x09\x10\xbb\x45\x80\x5d\x68\xf3\x0c\x68\xbf\xcd"
- "\xc0\x79\xf8\xff\xcd\xd0\xff\x80\xa6\xd3\xe9\x3d\x8c\x11\x50\x9e"
- "\x7a\x53\x37\xc6\x90\xd7\x8d\xa9\x85\x36\x1c\x5a\xff\x81\x31\xc8"
- "\xd6\x86\x58\xa7\x0c\x38\xbe\x1a\xce\x43\x7b\x1e\xa0\x18\xba\x91"
- "\x66\xbb\x67\xb9\xf6\x4c\xdb\x45\x86\xae\xde\x45\x7a\xae\xda\x45"
- "\x86\x2f\xad\x86\xe7\x32\xf5\x8f\xcc\xc9\x30\x33\xf4\x89\xa7\x6b"
- "\x1a\xbb\x25\x97\xe1\xbb\x27\xeb\x7b\xbf\xcd\x5f\xbe\x8b\x0c\xc0"
- "\xb9\xb1\x53\x6a\x09\xc1\x3e\x7c\x4a\xbb\x0b\x4c\x69\xec\x4d\x62"
- "\xed\x72\xba\xc6\xf2\x5e\xff\xae\x93\x6f\x12\x72\x54\x63\x24\xda"
- "\x38\xe8\xcb\xeb\x6a\x88\xd6\xc8\x18\x4a\x52\x7e\x22\xc0\x3d\xb5"
- "\xb4\xed\x6e\x91\x29\x73\x08\xc1\x39\x83\xd6\x9f\x35\xa4\x63\x24"
- "\xf1\x4a\x3c\x43\xfc\x93\xab\x99\x1a\xcb\xfa\x34\x9d\x36\x89\xa8"
- "\x76\xd5\x55\x50\xed\xe9\x71\xf3\xd4\x41\x9c\x9f\x5a\x1f\x4a\xde"
- "\x30\x73\xfd\x51\xd6\x7a\x53\x72\x14\xe9\x8e\xf7\xd3\x99\xd5\x5e"
- "\x37\x63\xa0\xdd\x4c\xca\xf8\xf9\xe6\x50\x36\x9e\xeb\xd3\x83\x77"
- "\xcd\x36\x81\x6e\x1d\xad\x4f\x9e\xc3\xd4\xa0\xae\x83\xfe\x85\xd5"
- "\x82\xa5\x35\x66\xd0\x56\x11\xd0\x7f\xeb\xc9\x57\x55\xf9\x2a\x6b"
- "\xf6\x68\xbd\xc2\xdf\xc8\x65\xfb\x6d\xec\x4b\xa1\xee\x21\x1a\x92"
- "\xc2\xd6\x1f\xfa\xcc\xce\x71\xa8\xa7\x98\x0b\x58\xff\x43\x70\xaf"
- "\x4c\xef\x1d\xc1\x70\x7d\x00\xf6\x9f\x53\x2a\x75\xa4\xc8\x64\x21"
- "\x1b\xaf\xb0\x6d\xd4\x1e\xda\xc8\x0b\x62\x6e\x84\x76\xf2\x96\x8a"
- "\x1b\xc6\xcc\x9a\x79\xba\xc6\xea\x49\x63\xc3\xc6\xc5\x48\xe3\x32"
- "\x79\x3e\x81\x7e\x14\x62\xb3\x86\xc6\xc6\xea\x97\x5d\x86\xb1\x51"
- "\x76\x1f\xb7\x22\xe4\xfa\x17\xfc\x6d\x06\xf0\x81\xb8\xb0\xfa\x66"
- "\x97\xe1\x6f\x63\x1d\xf0\xfd\x19\xe2\x60\xca\xf2\x0b\x4c\x49\x6c"
- "\x0d\x29\x85\xfb\x61\xba\x08\xeb\x60\x56\x5a\x87\x1a\xb9\x3a\xa4"
- "\x3d\x03\xb8\x7d\x06\x70\xfb\x0c\xe0\x56\x4f\x71\x7b\xa2\x92\xe2"
- "\xd6\x02\xf5\x6a\x00\xed\xbe\x34\x84\xa8\xb0\x5e\x3b\xcf\xe2\x1a"
- "\x7d\x50\xcf\x1a\x1e\xbb\x93\xae\x42\x1b\xd9\xf0\xeb\xd9\xbf\x2b"
- "\xb6\x4f\x89\xb1\x82\x24\x23\x7e\x1b\xa5\xf0\x6b\xd2\x4d\x99\x05"
- "\xb1\xf9\x0b\xe0\xf7\x47\x0d\xf1\xa9\x26\x5e\x49\x21\x80\xdf\x1a"
- "\x29\xfc\x9a\xd6\x1c\x80\xdf\x74\xc0\xef\x1c\x21\x7e\x4d\x03\x95"
- "\xe3\xb7\xde\xd4\x84\xdf\xd7\x39\xfc\x46\xd9\xe1\xb7\x5a\x80\x5f"
- "\xbc\x6f\xc5\xf8\x35\x85\x29\xc3\x6f\xbd\xbe\x09\xbf\xe0\x4b\x36"
- "\xbe\xc5\xb6\x51\x7b\x68\x23\xc0\x6f\xfd\xe7\xd0\x4e\x92\xf8\xbd"
- "\xfb\xf1\x6b\x4c\x71\x3d\x7e\x8d\x53\x9b\x8f\x5f\xc3\x55\xe5\xf1"
- "\x6b\xd8\xd7\xfa\xf1\x6b\xec\xa9\x2c\x7e\x0d\xf9\xf2\xf1\x6b\x88"
- "\x6b\x3b\xf1\x33\x07\xb9\x1e\x3f\x73\x97\xe6\xe3\x77\xbb\x50\x79"
- "\xfc\x6e\xc7\xb7\x7e\xfc\x6e\x57\x2a\x8b\xdf\xed\x70\xf9\xf8\xdd"
- "\x7e\x56\x2e\x7e\xa3\xbb\x5b\x19\x2b\x8e\x9b\xeb\x96\x18\x88\x1a"
- "\x88\xea\x35\x4b\x47\xf4\x8c\xf0\xd9\xcb\xf6\x99\xd5\x54\xe0\xab"
- "\xed\x3e\xfb\xd8\x7d\x56\xdb\x7d\xf6\xb5\xfb\xec\x6f\xf7\xb9\xa7"
- "\xed\x33\xc4\xab\xdd\x35\x0f\x73\x12\x78\xb6\x14\xbd\x87\xc5\x9f"
- "\x3b\xdf\xe7\x0d\x4b\x00\xfa\xbe\x3e\x52\x75\xcf\x48\x65\x4c\x1d"
- "\x3d\x08\x73\x5b\xc5\x90\x58\x2d\xf9\xed\x15\x0f\x4b\x5a\x63\x2a"
- "\x58\x42\xcf\x1e\x1a\xa6\x31\x85\x58\xb3\xc6\xf8\x4e\x5e\x02\xf8"
- "\x32\x80\x4f\x4c\xf6\x6f\x0f\x65\xff\x06\xda\xcd\x50\x12\x6b\x00"
- "\x5d\xfe\x15\x53\xe5\x61\x59\x82\xf7\xf9\x4c\xac\x8e\x58\x3d\xfb"
- "\x63\xde\xca\xc3\x9a\x3d\xc6\xd7\xe0\xd9\xbf\x07\xf8\x52\xfd\xea"
- "\x54\xab\x77\x69\x6d\x39\x49\x57\x59\x03\x12\x13\x41\xd7\xd7\x7e"
- "\x4e\x96\xd6\x32\x35\x89\x66\xc6\x54\x1a\xa6\xc3\xf7\xb6\x35\xa5"
- "\xf1\xc7\x48\x89\xa1\x9c\x60\x9f\x87\x58\x2d\x35\x7c\x4e\xdf\x13"
- "\xe3\x35\x70\xac\xc4\xb0\x93\x14\xc3\x67\xdd\xbc\x4b\x70\x9f\xd6"
- "\x7e\xa5\xb5\x3b\x89\x25\x6b\x8c\xda\xea\x3b\xda\xc8\xf8\x8e\x36"
- "\x15\xd7\x42\xdd\xb2\x46\x9b\xb1\xae\x25\x50\x0f\x76\x8f\xce\xec"
- "\xd1\x66\xb6\x5c\x63\x19\x9b\x43\xb0\x64\xc3\xf5\x7e\x70\xbd\xdf"
- "\x68\x13\xd6\x0f\xeb\x26\xe9\xf7\xb2\x12\x23\xa0\xee\xcf\x87\x68"
- "\xbc\x08\xb3\xcc\xcb\x5f\x19\xde\xac\x13\x65\x7d\x64\x56\x62\x35"
- "\x2d\xd7\xdb\x9d\x72\x65\xc7\x3f\x31\x59\x49\x5c\x7d\xd5\xee\x94"
- "\x6b\x76\x52\x2e\x57\xdf\x00\x37\xca\x65\xa6\xc9\x97\xab\xe5\xea"
- "\x1b\xe4\x4e\xb9\x3b\x9d\x94\xcb\xd5\x37\x45\x79\xb9\x2a\xe2\xe5"
- "\x24\x6e\x11\x6e\x61\x41\x45\x42\x9d\x61\xc1\x2d\x1c\xa8\x88\x93"
- "\xfb\x4f\x8a\x70\x0b\x03\x2a\x0f\xd9\xfc\x37\x62\xc0\xad\xf8\xab"
- "\x3c\x9c\xc6\xdf\xad\xd8\xab\x3c\x64\xf7\x7f\xc4\xd8\xbb\x17\x77"
- "\x0f\x59\xfc\xa3\x37\x86\x38\x01\xa7\xef\x08\xb2\xae\x9f\x48\xac"
- "\xdd\x12\x55\xef\x59\x83\xc8\xe8\x24\xe8\xf3\x72\x48\x97\xd1\x9b"
- "\x2e\x30\x41\x98\x73\x52\xa9\xb2\x92\x72\x89\x2a\x53\x65\x55\x15"
- "\x26\x54\xa8\x4a\xcd\x43\x91\xb7\x2c\x5b\x17\x99\x3c\x9e\x84\xe3"
- "\x87\x23\x09\x31\xbe\xab\x21\xb4\xac\x89\x24\x5d\x1b\x44\xa6\x58"
- "\x08\xe6\x38\x8c\x93\xe7\x5f\x60\xbe\x4e\x04\x8d\x7f\x1d\xf8\x35"
- "\xc7\x84\x7d\x69\x17\xf8\xae\x19\x70\x0c\xe5\x98\xc8\x6e\xab\xc1"
- "\x63\xb2\x81\xbd\xd6\x00\x7e\xd4\xc0\xac\x4f\x64\xfb\x64\x26\x59"
- "\x43\xde\x87\xcf\x97\x55\x9e\xed\x3c\x0d\x44\xb5\x19\xbc\x6a\xfd"
- "\x2a\x4f\xa2\x57\x79\x56\xa2\x7f\x05\x9f\x5c\x9b\x7c\x1d\xf3\xf9"
- "\x3b\x82\x76\x59\x0d\xaa\xf7\xc0\x37\xe3\xf5\xcf\xc4\x12\xd5\xd7"
- "\x50\x1e\x5c\x3b\xe0\x70\x1c\x21\x4e\xf2\x39\x5e\x56\xdf\xac\x31"
- "\xf8\x7d\x2c\x07\xf3\xa4\x19\x56\x68\x67\xdf\xf5\x26\xac\x37\x93"
- "\x95\xbc\x4f\x97\x00\x7d\x8e\xca\xf3\xf3\xb1\xfd\x98\x7a\xec\x43"
- "\xa0\xef\xe8\x71\x05\x3e\xb3\xf9\x80\x54\xa6\x8c\xf1\x1d\x55\xc3"
- "\xa4\x77\x0c\x2a\x31\xd6\x11\xdd\xa2\x46\x52\xa5\xf2\xfc\x02\x7f"
- "\xfb\x86\x6f\x56\x90\xd1\x37\x6b\x1c\xd4\x61\x8f\xad\xbe\xf8\x5b"
- "\xb6\xe3\x98\xff\xe0\xea\x58\x76\x38\x51\xbe\x8e\xcc\x7b\x3d\xba"
- "\x4e\xf1\x67\x0c\xd8\x96\x3a\x6d\x1d\xd4\xa5\xdd\x58\x6c\x6f\x26"
- "\x2b\x4b\x6d\x4c\xd6\xf4\x62\xf3\x81\x2a\xaf\x68\xcc\x2b\x31\x59"
- "\x63\x68\x7e\x3b\x7b\x0c\x3b\x56\x07\xb9\x1f\x34\x40\x05\x6a\xa1"
- "\x6b\x2a\x2f\x36\x1f\x18\xa2\x51\x29\xf3\x53\x2a\x2f\xd6\xff\xea"
- "\x7a\x61\x3b\xb4\x1b\x08\xbf\xf7\x42\x95\xca\x2b\x93\xe6\x38\xc6"
- "\xf8\xe3\xef\xc1\x35\x3d\xe1\x37\xfd\x99\xac\x51\x7a\xbc\x0e\xce"
- "\xef\xe1\xce\x07\x08\xce\x07\x40\x9d\x43\xb9\xf3\x65\xdc\xf9\x3e"
- "\x82\xf3\x7d\x62\x7b\x11\x8f\x2b\x2a\x2f\x13\xde\x13\xe3\x3b\x06"
- "\xef\xc7\x17\xdf\x27\xb0\xf7\xe4\x37\x86\x70\xd7\xf9\xd6\xaa\xda"
- "\x75\xb9\x01\xf8\x82\xf3\x3d\x05\xdf\xef\xf9\x75\x7c\x20\x19\xbd"
- "\x09\xdb\xb4\x5d\x1f\xbd\xd7\x8b\x03\xd8\x3c\x91\xca\x2b\x80\x6d"
- "\x0b\xe8\x3f\x85\xe5\xc1\x71\x03\xf6\x91\x46\xd0\x91\xf0\x7f\xcc"
- "\xb5\x8a\x72\x1d\x73\x16\x2c\x78\x67\x41\x40\xdf\x88\x80\x88\x98"
- "\x59\x01\x6f\xbe\xb3\x70\x5e\xdc\x88\xbe\x11\x0f\x13\x22\xc0\x8e"
- "\x9a\x49\xed\xcc\x58\xb3\x32\x56\x94\xe6\x80\x7e\x53\xa9\xa1\x2f"
- "\x6f\x24\x59\x10\x57\x4b\xb7\xbc\x58\xcb\xfa\x3c\x78\x96\x52\xc2"
- "\x75\x09\xa3\xa0\xed\xdb\xb1\xef\x01\x4a\x03\x08\x49\x83\xf3\xba"
- "\x84\x13\x78\xec\x38\x7b\x0c\x1c\x33\x9b\x0b\x4b\xf0\x26\x47\x02"
- "\xea\xd8\x7c\xda\x35\x55\x7b\x0f\x36\x77\x78\x93\xa8\xcc\xa9\xde"
- "\xe4\xbf\xb5\x65\xaa\x03\x56\xbd\xea\xbf\xad\x15\x2a\xd4\x20\x5f"
- "\xfb\x1f\x23\x83\xe2\xbd\x09\x9e\xff\x4a\x0b\xc7\xe1\x3c\x9e\x63"
- "\xcb\x61\x63\xdd\x7e\x2a\x5e\x87\xf9\x35\xfc\x7f\x72\x0e\x73\xf1"
- "\x6b\x7f\xd0\x31\xa8\x89\x55\xed\xb6\x61\x5d\x03\x7a\x10\x02\xed"
- "\xb8\x1d\xeb\xa7\x57\xb5\x2b\xf0\xcc\x85\xeb\x17\x11\x1f\xb8\x3e"
- "\xdb\x9a\x9d\xb1\x02\x79\xc1\xbc\xaa\x5d\x18\x93\xda\x75\xe0\xe6"
- "\xb5\xc4\x3b\x77\x2d\x3c\x9f\x6b\x89\x57\xfd\xaa\xf6\x29\x7a\xaf"
- "\xb0\x5a\x6c\x5b\x28\xc6\xe7\x86\x8a\xfc\x11\x8e\x65\xe9\xc9\xce"
- "\x68\x3c\x06\xcf\x9f\x5c\x7e\xd8\xe7\x16\x68\x47\x53\x9f\x68\x62"
- "\xf5\xcd\x88\x67\xa0\xdd\xea\xfb\x44\x07\x76\x8e\x05\x6c\xc1\x33"
- "\xc6\xf8\x65\xc4\xd7\xaa\xbc\x0b\xfe\xf5\x2c\x21\x5a\x7c\xa6\xd7"
- "\xa7\x84\xef\xb8\x65\x82\x67\x3b\x2f\x76\xe7\x2d\x03\x7c\xce\x23"
- "\x05\xf0\xf9\xb8\xae\x80\x04\x4c\x06\x3d\xa6\x7a\xa8\xc3\xcb\x11"
- "\x8c\xb9\x5f\x11\x68\xd8\xea\xcf\xc8\xc9\xf2\x63\xc4\x27\x8c\x78"
- "\x36\xad\x23\x1f\x47\x54\x53\xf4\xf0\x79\x21\x51\x95\x98\x2c\xec"
- "\x3b\x03\xed\x30\xcc\xfd\x17\x13\x7c\x1f\xc0\xa8\x76\xc5\x15\xd6"
- "\x99\x80\xcb\x6a\xda\xe1\x78\x72\xab\xfa\xfb\x1a\xfc\xce\x1b\x46"
- "\xee\x3d\xda\x0d\xee\x3d\xda\x0d\xf6\x3d\x5a\x74\x62\x38\x7d\x8f"
- "\x86\xef\xcf\xa6\x84\x7b\x32\x58\x1e\xbe\x53\xeb\x68\x04\x1c\xbc"
- "\xab\xe9\x64\x79\x57\xd3\x35\xa7\x8e\xf8\x96\x18\x6a\x48\x69\xed"
- "\x31\xf2\xd1\x22\xe2\xcb\xdc\x88\xec\x50\xa4\x3b\x41\x98\xb5\xdf"
- "\xe9\x77\x6b\x75\xed\x2c\x98\xff\xb8\xe1\xff\x70\xe7\x65\x1e\xf8"
- "\x9c\x76\x4a\x5b\x40\x06\xe4\xd5\x91\xc0\x37\x2e\xa5\xb0\x6b\x4a"
- "\xe1\xfe\x7f\xe6\x1b\x9a\x80\xdb\x37\x34\x4f\x34\xdc\xd0\xf4\xea"
- "\x6c\xa0\xef\xdd\x66\x5c\x55\x13\x1c\xcb\xcb\x7c\x70\x6b\x67\x1e"
- "\xe6\xbf\x8d\x06\x62\xee\xf2\x7d\x0d\x62\x19\x7e\xbb\x27\xbe\xab"
- "\x49\x5e\x42\xd4\xd6\x1f\x34\xa4\x38\xb2\x8e\x0c\x82\xd8\xe3\x7b"
- "\x89\xcd\x55\xf4\xbd\x84\x05\xfc\x12\xbe\x9b\xb8\x75\x43\xa3\x62"
- "\x7c\xb3\xf5\x93\xa2\x02\x48\xc3\xb6\x68\xc0\xeb\x0e\x92\xdc\xc0"
- "\x5c\x2c\x7d\xdf\x4a\x30\x67\xcd\xac\x6a\xbf\x93\xf1\xcb\xd6\x1f"
- "\xd5\x9c\xc6\x3e\xe6\x59\x9e\x3b\xbc\x17\xba\xc7\x1d\xde\xec\xbb"
- "\x04\x7c\x87\x07\xf1\x8b\xdd\x59\x87\xf1\x84\xb8\xd6\x19\x54\x13"
- "\x20\x76\xc5\xd5\x1f\x43\xdc\x2a\x44\x71\x63\xe3\x0c\xd7\x5d\x8e"
- "\x80\x78\x5d\xa2\x31\x2c\x32\x42\xfc\xf6\x63\x19\x59\x29\x85\x8b"
- "\x4c\x2a\xf0\x64\xaa\x22\xd3\x39\x76\x3e\x0c\xc6\x71\x67\xe3\xb1"
- "\x76\x0d\xd0\xef\xe0\xbb\xd0\x5b\x5b\xa3\x03\x1a\x7c\x33\x42\x6f"
- "\xfb\x66\x44\x3a\x79\x2f\x4a\xe3\x19\x45\xbc\x8b\xaa\x4f\xd3\x78"
- "\xce\xe7\xe2\x89\xe3\xe7\x16\x6b\x3a\x99\xeb\x21\x9e\xb7\x20\x9e"
- "\x71\x7a\xb2\x71\x01\xf1\x2d\xad\xa9\xc0\x77\x46\x1d\xc6\x17\x13"
- "\x32\xa1\x1f\x63\x2d\xd6\x9d\x65\xe3\xba\x0b\xe2\x6a\xce\x3c\x5d"
- "\x83\xef\x4a\x9b\xe2\xba\x08\xe2\x7a\x0b\xe2\x7a\x95\x8f\xab\xa5"
- "\x1e\xe2\x5a\x0f\x71\xad\x87\xb8\x72\xef\x53\x67\x44\x41\x5c\xf1"
- "\xdd\xdb\x07\xf5\x81\xf8\x3e\x15\xdf\x5b\x61\x5c\x71\xcc\xb6\x75"
- "\xb1\xa6\x27\xfb\x1e\xf5\x4d\x0d\xc9\x9b\x4d\xbc\x07\x9a\x88\x47"
- "\xf2\x7e\xa2\x86\x7a\xaa\x9f\xfa\x9c\xa8\xa0\x3c\xc0\x7d\x15\xc1"
- "\xf8\x96\x7e\x6e\x21\x4b\x5f\x23\xbd\xcc\x6b\x68\x9c\x4b\xcd\x5f"
- "\x60\xde\x78\xe8\xad\xc5\x1a\xd5\x86\x45\x64\x38\xc6\x7c\xe2\xa5"
- "\x00\x72\x34\xb8\xd8\x21\xe6\xd6\xec\x2c\x35\xc4\x29\x1c\xe3\xee"
- "\xfe\x73\xeb\x13\xee\xfa\x73\xfb\xf0\xe1\x07\xcf\x6d\x4b\x3f\xb7"
- "\x0f\x47\x48\x3f\xb7\x3e\x03\xdd\x7b\x6e\x7d\x06\x3c\x78\x6e\xef"
- "\x87\xe7\xd6\xc7\xdf\xfe\xb9\x6d\xd2\x2d\x0b\xe6\xc4\xcc\x8a\x9a"
- "\x17\x35\xef\x2f\x01\xb3\x97\xc4\xcd\x79\x97\xaa\x17\x91\x7e\xd1"
- "\x58\xac\x41\xaa\x75\xd0\x5f\x9f\xf4\xaf\x20\xbb\x7b\x54\xa8\xac"
- "\xd3\xfd\xbd\x98\xcc\xba\x40\x6b\x66\xdd\x9e\x75\xa0\xc5\xf1\xf9"
- "\xce\x02\x8d\x7d\x59\xe5\xff\xfe\xbf\x7b\x82\xfe\x5c\x70\x85\xe0"
- "\xff\xe9\xfb\xe1\xdd\xb1\x38\x87\x32\x67\x3d\x53\x83\x73\x28\x8f"
- "\x1f\x41\x6d\xd1\xe9\xf4\x23\xa1\xe0\x27\xa6\xfb\x93\x86\xe9\xa1"
- "\xaa\x55\x67\x89\x77\xe7\x0a\x32\xd1\x6a\x65\x18\x9d\xf6\x0a\xe8"
- "\x3e\xbf\x22\xdd\xeb\x57\x08\x6a\x9d\xcb\x2a\xdf\x81\x01\x09\xcb"
- "\xf0\xdf\x2e\x01\x09\x1f\x5c\xb8\xac\x7a\xf4\x14\x9b\xc7\xe9\xc6"
- "\xd4\x30\xeb\xd3\xcb\x2c\x9f\xcc\x0b\xc6\x77\xa7\x79\xdd\x98\xea"
- "\x5d\xe0\x37\x76\x35\x9a\x54\xef\x2d\xc0\x31\xe8\x8f\x33\xf8\x0e"
- "\x14\xdb\xe0\xbd\x3a\xf0\x13\xef\x73\x79\x28\xd5\xa3\x23\xf0\xf9"
- "\x02\x7d\x55\x7d\xe8\x72\x85\x0a\x9f\x37\xa3\xef\x28\xfd\xfb\x70"
- "\x1f\x50\x47\xfd\x86\xf5\x4c\xa5\xc1\x2f\x63\x85\x57\x00\x51\xd5"
- "\xaf\xea\x3c\x06\x34\x4f\x1c\xea\x95\x15\x70\x6e\x25\x9c\x63\xdf"
- "\x45\xaa\xba\x9a\x98\x87\x3b\xf9\x22\xc7\x01\xa6\x3d\xae\xa9\x3a"
- "\xaf\xc1\x35\xa4\xd2\xa8\x2f\xa9\x31\x65\x67\x44\x9a\xb7\x45\x07"
- "\x98\x51\x4f\xf6\x8d\x0e\x6c\xc8\xce\x08\x35\x67\x67\xc4\x87\xf4"
- "\x63\xdf\xb9\xc3\xf5\x5d\xe6\xe0\x3d\x34\x64\xa5\x84\xc3\xf5\xc6"
- "\x1b\xbe\x79\xb1\x37\xb2\xf2\xc8\x89\xf8\x1c\x12\xf0\x0a\x72\x5f"
- "\xe7\x83\x13\x72\x18\x73\xff\x60\xe0\xbe\x9c\x1d\xe4\xe4\x44\xe0"
- "\xbe\x50\x47\xee\xa3\x63\x14\x2c\x84\x72\x60\x31\x81\xb2\xaa\xf1"
- "\x19\x42\x8d\x5a\x08\xed\x80\xcf\x07\x3e\x07\x2c\x17\x02\x0f\xda"
- "\x9e\x15\x7c\x8e\x90\xeb\xd8\xe7\xd6\xee\xb9\xc1\x67\xe5\x11\x03"
- "\x51\xe3\xb3\x82\x5c\x88\xcf\x0a\x8e\xfd\x59\xc7\x3d\x2b\x9d\x2b"
- "\x89\x7a\x23\xf0\x60\xa9\xf9\x18\xfb\xbc\xa0\x96\x2c\x32\x0b\x38"
- "\x10\xdf\x1b\x09\x9e\x95\xd5\xb6\x67\xc5\xc6\x81\xf0\x3c\x98\xf1"
- "\x59\x59\xac\x79\xa2\x71\x31\xff\xac\x4c\x3f\xa7\x26\x2c\x3f\x7e"
- "\x70\x2b\x30\x17\x9e\x15\xcc\xa7\x59\x6c\x1c\x08\xcf\x0a\xce\x4d"
- "\x62\x39\xf0\x6d\xe0\xc0\x5a\xe0\x40\x03\x1c\x87\x67\x64\xf3\x5c"
- "\x8e\x03\xb9\x67\xa3\x61\x31\xc7\x81\x57\x03\x48\x63\x5f\xe4\xc0"
- "\x8d\x32\xda\xe5\x9c\x1d\x07\x76\x19\xec\x1e\x07\x76\x09\xc4\xef"
- "\x61\x0c\x1b\x21\x9e\x18\xc7\x09\xfe\x8c\xb9\x28\x07\xb8\x6f\x5a"
- "\x1b\x8b\xdb\x02\xe9\xb8\xed\xe2\xfa\x2e\x49\x8e\x93\x88\x1b\xe0"
- "\xbc\xd6\x5c\xef\x18\x3b\xe6\x03\x63\xbc\x90\xe7\x90\xdf\x90\xeb"
- "\x90\xe3\x90\xef\xf0\xf9\x40\x9e\x43\x8e\xfb\x1d\xf0\x3f\x7c\xae"
- "\x29\x8e\xac\x62\xf9\x2f\xf9\x12\x51\x27\x8f\x25\xbd\x4a\xf7\x59"
- "\xc0\xdb\xdc\x24\xc8\x7f\xc2\xbe\x0d\xf9\x0e\x63\xbb\xe1\x16\xe5"
- "\x3b\xec\xe3\x90\xdb\x1c\xfa\x38\x88\x2d\xc4\xa4\x27\xf6\x71\x6c"
- "\xce\x22\xd5\xb7\x7b\x5e\x57\xea\x49\xb2\xba\x12\xef\xfa\x55\x8f"
- "\xfa\x3b\xfa\x92\x47\x07\xd8\x7c\x09\x3e\xe3\xf8\xac\xeb\x55\x9d"
- "\x43\xa9\xf7\x4c\xdb\x43\xfd\x50\x77\xba\xb7\x10\x78\x7e\xde\xef"
- "\x3f\x1a\x43\xc7\x05\x80\xbf\xf7\x4b\xde\xc7\x64\x8f\xaa\xc1\x76"
- "\xc5\xfb\x7c\xa3\x1f\xe0\x32\x3b\x2b\x28\x03\xdb\x2a\x3b\x6b\x0c"
- "\xfc\x7f\x1c\x8f\xb5\x47\x37\x1d\x8d\x27\x24\x24\x5e\x29\xd6\x1e"
- "\x65\xdf\xff\x32\xdf\x87\x3e\xca\x4c\x0f\xf5\xb2\x7e\x1f\xda\x0e"
- "\x70\xe1\xff\x8e\x25\x85\xdc\xca\xdc\x1d\x99\x6c\x66\x6a\x02\x12"
- "\x48\x7f\xa8\x97\xe5\xb8\x99\x90\xe3\x46\xe0\xbd\x89\xd1\x10\xe3"
- "\x5d\x35\xbb\xad\x06\x2f\xbd\xaa\x53\x39\xf8\xc5\x1a\xe0\x5e\x2f"
- "\x21\xf7\x52\x9e\xed\xc4\xae\x11\x66\xca\xdc\x1d\x8f\x65\x4d\x39"
- "\x46\x3a\x43\xff\xeb\x75\x59\xe5\xb7\x69\x49\x12\xc1\xb9\xb4\xed"
- "\xe0\xff\x51\x8d\x5d\xb5\xf8\xfd\x4e\xcc\xf7\xd3\x3c\x62\x5f\x24"
- "\xbd\x98\xe9\xd3\x3c\x70\x1c\xc4\x76\x6b\xbe\xca\x0a\xc7\xe8\xb8"
- "\xaa\x7c\x82\xe7\xd3\x1a\xbd\x58\x5d\x66\x85\x6b\x4a\x8c\xf9\x24"
- "\x6d\x91\x37\xc1\xeb\xe9\x58\xbd\x7c\x82\xd7\xaf\x5e\xa0\x66\xc7"
- "\x51\xb0\xdf\x33\xe7\x13\xfc\xae\x05\x8e\x7f\x68\xf5\x21\xe9\x09"
- "\xbe\xe4\x78\x51\x09\x5b\xc6\xf1\xa2\x7f\x11\x2c\x03\xf0\x0f\xff"
- "\x3f\x44\x32\x16\xf9\x03\x0f\xe4\xc3\xf9\x6f\x49\xc6\xb5\x9e\xf0"
- "\xef\x65\xf8\xbb\x45\xae\xa8\xfc\x7c\x8e\x17\x59\x49\xe7\x65\x7f"
- "\x64\x00\xc7\x4c\x29\xce\xcf\xd4\x92\xf6\x50\x77\xbf\xd2\x8a\x4c"
- "\xf0\xb0\x8f\x9a\x71\xfe\x3e\x93\x3c\xbd\xd6\xca\x4c\xbf\x6a\x4d"
- "\x9e\x7e\x0d\x7f\xdb\xc2\x4c\xff\x05\x7f\x7b\x75\x42\x00\x37\x76"
- "\x37\x9f\x1d\x67\x98\x76\xab\x0f\xc1\xba\xe2\xef\xe2\xef\x65\x2c"
- "\xd0\x70\xbf\x39\x80\xad\x1b\xfe\x26\x96\x29\xfc\xcd\x13\xf8\x9b"
- "\x7f\x66\x7f\x73\x25\xfc\xdb\x05\xfa\x2e\x36\x0e\xf8\xfb\x56\x26"
- "\xb4\x1d\x93\x1c\xea\xc9\x7e\xc7\x54\x23\xf5\x9d\x83\xf4\x3b\x8f"
- "\xb2\xb9\x38\xfc\x4e\x03\x83\xd7\xd3\x32\xa0\x6f\x3c\x83\xc7\x9f"
- "\x0e\xd5\x11\xc7\x18\x76\x5b\x48\xfb\xca\x6e\x63\x69\x5f\x49\x63"
- "\xca\x62\x65\x7a\x68\x3b\x88\x9b\x1a\xfb\xd5\x2a\x55\xb7\xc7\x9a"
- "\xca\xf8\x3e\xd4\x13\xe3\x8d\xb8\xb1\x61\x09\x71\x64\xc3\x10\x5b"
- "\x4f\x03\x21\x42\xcc\xc0\xff\xbd\xb9\x72\xe6\xd8\xca\x81\x3a\x10"
- "\x1b\x8e\x9e\x86\xf3\x8e\x38\xf2\x1f\xc1\xe3\xe8\x37\xe7\x4c\x5a"
- "\x86\x41\x1c\xe9\x5e\x4f\xc5\x72\x0a\xf9\xfa\x4c\xf3\x40\x8c\xdd"
- "\x67\xd8\xf2\xc1\x38\x3d\x9d\x48\x7c\xe9\xfd\xfc\x26\x89\xbd\x9f"
- "\x44\x9d\x2f\xd6\xd5\x76\x1f\x58\x87\x74\x6b\x00\xb1\xdd\x47\x46"
- "\x63\x1f\x28\xf7\x1a\xe1\xbe\xb3\x17\xcb\xb6\xb5\x01\xc4\x8c\xd8"
- "\xbe\x63\xbb\x3e\xdd\xaa\x81\x7a\x0f\x60\xbf\x43\x31\x77\x59\x02"
- "\x3f\xbf\xb1\xd8\x63\xee\x91\x44\x02\x02\x18\xb4\xd5\xeb\x75\xf0"
- "\x3b\xfe\xdd\x69\xdd\xbe\xb2\x34\x7c\x1f\x8a\x71\x55\x71\xc7\x07"
- "\x0b\x30\xc1\x95\x6f\x92\x28\xdf\x7f\x86\xa8\xfc\x50\x28\x3f\x1e"
- "\xca\x47\xed\xf6\x3a\xe6\xec\xfc\xd9\x75\x60\x9e\x8e\xa7\xe5\xdb"
- "\x70\xcb\x64\x26\x18\x63\x13\xc8\x43\x57\x54\xdd\x03\x28\x9f\x76"
- "\x62\xdb\x88\x1d\x63\xa5\xb2\xe6\x5b\xed\xc6\x58\x09\xc7\xe0\xed"
- "\xd6\x1a\xe8\xf8\x2a\x55\x77\x76\x4f\x2b\xcc\x8d\xa1\x06\x2d\x04"
- "\xfd\xc6\x8f\xb1\x3a\x8b\xe7\x3b\xe8\x16\x55\xf1\x63\xac\x54\xfe"
- "\xec\xfb\x4e\xbd\xaa\xfb\xb3\xf5\x2a\xa2\x82\xcf\x06\x7a\xbc\x53"
- "\xa2\xf0\x78\xd3\x18\x46\xee\x38\x8e\x0f\xe7\x72\xc4\xb5\x5f\xef"
- "\xc3\x3c\x61\xf7\x89\xb6\xdc\xac\x8c\xf7\x55\xa0\x91\x9f\xd4\xf1"
- "\x1a\xf9\x49\x9d\xbc\x46\xee\xde\xe0\x5c\x23\xf7\xf6\xe6\x35\xf2"
- "\xe3\x51\xf4\xb9\x7f\x7c\x12\x7d\xee\x1f\x67\xdf\x85\xa6\x43\x79"
- "\xe6\x8f\x77\x84\x33\x9f\x44\x1b\x10\xe7\x9b\x41\xf3\xee\x5e\x74"
- "\x4c\xb5\x0b\x3c\x96\x05\xf4\xf1\x7b\x09\xc4\x0b\xd7\x96\x7b\x0f"
- "\xda\xb0\xd4\x5c\x49\x8a\xbd\x50\x23\x7f\x03\xe5\xf4\x5a\x52\x82"
- "\xef\x37\xb3\x92\x75\xb4\x5d\x7a\x84\x40\x2c\x3c\x4b\x4d\x26\xf6"
- "\x3a\x3c\x07\xfd\x5a\x35\xea\xe4\x43\xd6\x63\xaa\x4d\x09\xa8\xa1"
- "\x77\x04\x0a\x35\x74\xfd\xaa\x1e\x29\xd2\xda\xb9\xd7\xb3\xe6\x55"
- "\x42\xed\xdc\xa3\x18\xb5\x33\xe6\xf3\x51\x0f\x58\xa9\x66\x0e\x00"
- "\xfd\x1c\x88\x3a\x1a\xb5\xb3\x55\xa4\x9d\x7b\x6e\x71\xae\x9d\x7b"
- "\x34\x3c\xd0\xce\xad\xa5\x9d\x6d\xf9\x03\x7b\xed\xdc\x33\xc6\x3d"
- "\xed\xdc\x33\xfa\x81\x76\x6e\x6b\xda\xb9\x67\xa8\x4d\x3b\x5b\x53"
- "\x7d\xdb\x63\x3e\x7f\x73\x93\x76\xee\x35\xcd\x51\x3b\xf7\x8a\x74"
- "\xd4\xce\x3d\xb2\xc4\xda\xb9\xcf\x7c\x47\xed\xdc\x6b\xbb\x9c\x76"
- "\x06\xde\xaa\x45\xed\x8c\xf8\x42\x1d\x8d\xfa\x19\xea\x3b\x8e\x62"
- "\xad\xd7\x19\xf7\xb4\x73\xaf\x0a\xd7\xb4\xf3\xe3\xc3\xa4\xb5\x73"
- "\x77\x93\xbc\x76\xee\x6e\x92\xd6\xce\x01\x67\x78\xcd\x13\xb0\xad"
- "\xed\x6b\xe7\x80\x71\xd2\xfa\x26\x60\x2a\xd5\xce\x8f\x0f\x6d\x79"
- "\xed\xfc\xf8\x50\x69\xed\x1c\x70\x94\xea\x8c\xc7\x87\x3b\x6a\x67"
- "\xf8\x8e\xa4\x76\x0e\x68\xe0\xbe\x33\x54\xac\x9d\x69\x19\xd0\x67"
- "\xfa\xc9\x6b\xe7\xde\x7b\x69\x1f\xda\x7b\x19\xed\x43\x69\x4c\x1d"
- "\xb5\x73\xef\xd7\x9a\xd7\xce\x14\x43\x6c\x3d\x65\xb5\x73\xef\x2d"
- "\x8e\xda\xb9\xbb\x49\x5a\x3b\x3f\xb9\x84\xc7\xd1\x93\xdd\xc5\xda"
- "\xb9\xf7\x4f\xf7\x87\x76\x96\xc5\xd6\x38\xb1\x76\x7e\x62\xbf\x72"
- "\xed\xfc\xc4\x55\x65\xda\x19\x31\x27\xa5\x9d\x9f\x1c\x66\x8f\x39"
- "\xb1\x76\x7e\x32\x44\x5a\x3b\x3f\x19\x23\xd6\xce\x58\xbe\x94\x76"
- "\x7e\x72\x83\xa8\x7c\x07\xed\xfc\xe4\x17\x62\xed\x4c\xaf\xe3\xb5"
- "\x73\x9f\x30\x2e\x17\xb1\x45\xb9\x76\xee\x33\xc2\xb9\x76\xee\x33"
- "\x56\xac\x9d\xfb\xf8\x53\x8d\xdc\x27\x96\x6a\xe7\x3e\x03\x38\x0d"
- "\x9e\x2f\x3c\xce\x6b\x67\x7a\xdc\x51\x3b\xf7\x59\xd1\x8c\x76\x1e"
- "\xea\xba\x76\x1e\x14\x7f\xac\x49\x3b\x0f\x8a\xb7\x69\x67\x2b\xe8"
- "\xc7\xcd\xa0\x03\xe0\xaf\x06\xe7\x5a\xe0\x33\x77\x59\xd5\x77\x98"
- "\x73\xfd\x3c\xe0\x73\x5e\x3f\x3f\xdd\x8e\x3e\xfb\xfd\x7f\xa2\xcf"
- "\x7e\xff\xed\x4d\x39\x66\xd0\xce\xa8\xa1\xb9\x1c\x73\x79\x3a\xfc"
- "\xed\x4e\x38\xc6\xea\xe7\x5d\x75\x26\x15\x6a\xe8\x95\x38\xee\x13"
- "\x74\xf4\xd7\x9c\x86\x2e\x35\x0e\xe5\x74\x74\x7f\x3f\xe8\x33\xf4"
- "\xe9\x5a\x76\x2e\x98\x37\xd4\xaf\x82\xd5\xcf\x71\x26\xf2\x5f\xb7"
- "\x86\xe2\x7b\xf8\x0a\x9d\x96\x5e\x07\xf7\x59\xc9\xeb\xed\xbe\x47"
- "\x45\x7a\x3b\x8e\xd5\xdb\xe5\xa8\xb7\xbf\x3e\x46\xc8\x21\x2d\xd5"
- "\xdc\xa8\xb7\x51\x77\x83\xde\x2e\xdb\xd4\x8d\x29\xaa\x5f\xd5\xd7"
- "\x68\xd3\xdc\xab\xe1\x33\xc4\x5a\x7f\x04\xa2\xb2\xe9\x2d\xe2\x05"
- "\x31\xa9\x78\x0f\x7e\x03\xaf\xaf\x5f\xf5\x54\x4f\xdb\x75\xd0\x67"
- "\x97\x51\x5d\xde\xaf\xdc\x2a\xca\x69\x3f\x15\x85\x9e\x84\xed\x8f"
- "\xa1\x1d\x50\x67\xd9\x72\xda\xd6\xbe\xd1\x81\x8c\x1f\xd5\xe6\xe2"
- "\xbc\xb6\x66\x84\x4d\x9b\xa7\x73\xda\xbc\xc1\x17\xb4\x79\xac\x4d"
- "\x9b\x3f\x95\xed\xa6\x36\x2f\x67\x35\xde\x84\x96\xd7\x78\x1b\x16"
- "\xdd\x7b\x6d\x8e\xba\x1c\xb5\x38\xea\x72\xd4\xe9\xa8\xcd\x51\xa7"
- "\x5b\x39\x6d\x8e\xeb\x1e\x9a\xea\x9b\xd1\xe6\xa0\xdd\x98\x87\x1f"
- "\x8e\x60\xb5\xb9\x87\x50\x9b\x6b\x3a\xb8\xa7\xcd\x35\xde\x42\x6d"
- "\x8e\xb8\x57\xaa\xcd\x31\xf6\x0e\xef\x62\x71\x5f\x07\x88\x1f\xc6"
- "\xca\xe9\xbb\x3b\x2e\x8e\x18\x37\x8c\x19\xc6\x4e\x36\x6e\x42\x6d"
- "\x0e\xb8\x2b\x32\xdd\x3b\x6d\xae\xb1\xd3\xe6\xa8\xc5\xa1\xed\xaa"
- "\x51\xa3\x97\xea\xa0\x6d\xe6\x83\x4e\x07\x8d\x6e\xaf\xcf\x31\xbe"
- "\xae\xe9\xf3\xdf\x19\x9b\x72\xdb\x2a\xdf\xf6\x9b\x31\xb7\xdd\xd5"
- "\xa6\xcf\xfb\x19\x1d\xf5\x79\x7f\x6f\x81\x3e\x2f\xd3\xab\x9e\x1a"
- "\x20\xd6\xe6\x81\xfd\x1c\xb5\x79\xff\xb1\xb2\xda\xbc\x9b\x84\x36"
- "\xf7\xb3\x69\xf3\xfe\x0b\xdd\xd3\xe6\xfd\xe3\xe4\xb4\x79\xbd\x5a"
- "\xa8\xcd\xfb\x9f\xe6\xb5\x79\x9c\x40\x9b\xf7\x1d\x2a\xaf\xcd\xfb"
- "\xd2\x79\x59\xea\xdd\xf1\x58\x16\x6a\x2a\x7c\x57\x18\x80\x73\xf6"
- "\x55\x03\x96\xa3\xae\xc2\x5c\x06\xd4\x1f\xb4\xd5\x80\xa9\x42\x8d"
- "\x8e\xef\x08\x9d\xe9\xa8\xd8\xb7\x48\x2f\xd4\x52\xa8\xa3\x6c\xba"
- "\x17\xaf\x47\x3d\xd5\xba\x5a\xea\x69\x83\xb4\x96\x7a\xda\xc2\xea"
- "\x64\x9c\xeb\xa9\xea\x5f\x8e\x7d\x62\xcb\x6a\xf5\xfe\xe5\xd2\x5a"
- "\x7d\xc0\x7c\xaa\x6b\xfa\x57\x60\x5c\xc4\x5a\x1d\xbe\x23\xa9\xd5"
- "\x07\x6c\xe3\xbe\x53\x2e\xd6\xea\xb4\x0c\xe8\x9f\x0f\xcb\x6b\xf5"
- "\x81\x33\x68\x7f\x3d\x70\x20\xed\xaf\xb9\x18\x3b\x68\xf5\x81\xed"
- "\x84\x5a\x1d\xe3\xef\xa8\xd5\x29\xa6\xd8\x7a\xca\x6a\xf5\x81\x93"
- "\x1c\xb5\x7a\xdf\xa1\xa8\xd5\xa5\x71\x35\x68\xb0\x18\x57\xcf\x9c"
- "\x32\x59\x6d\x9a\x7d\x15\x96\xb7\xc9\x5e\xb3\xdf\x87\x58\x33\xf0"
- "\xba\x1d\xef\xe9\x99\xf9\xca\x74\x3b\xfb\x9d\x6d\xca\x74\x3b\xe2"
- "\x4f\x4a\xb7\x3f\x73\xdd\x1e\x7f\x62\xdd\x3e\xa8\xa3\xb4\x6e\x1f"
- "\xd4\x57\xac\xdb\xb1\x7c\x29\xdd\x3e\x68\xaa\xa8\x7c\x07\xdd\x3e"
- "\x28\x46\xac\xdb\xe9\x75\xbc\x6e\x0f\xf4\xe5\xf2\x20\xe7\x94\xeb"
- "\xf6\x41\x37\x9d\xeb\xf6\x41\x16\xb1\x6e\x1f\x54\x46\xf5\x79\xa0"
- "\xc6\xc4\xea\xf6\x41\xd5\x9c\x9e\xaf\x14\x1e\xe7\x75\x3b\x3d\x6e"
- "\x12\xea\x76\x1d\xea\xf6\xc0\xa0\x66\x74\x7b\x90\xeb\xba\xfd\x05"
- "\x81\x6e\x7f\xa1\x19\xdd\x1e\x78\xdd\xb9\x6e\x1f\x2a\xd0\xed\x7f"
- "\xe0\x74\xfb\x10\x4e\xb7\x0f\xd9\x6e\xcb\x7b\xa3\x6e\xb7\x3c\xb1"
- "\x23\x9c\xcb\x7b\x1f\xdb\xb5\xa8\x4c\xb5\xdb\x96\xf7\x5e\x00\x7a"
- "\xdc\x40\xbc\x57\x2e\x20\x04\x35\x3b\x8e\x0d\x29\x32\x0d\xe5\xc6"
- "\x87\x0c\xf1\xcb\x45\xcd\x7e\x19\xae\xa9\x06\xcd\x0e\xba\xfb\xbf"
- "\x1a\x87\xaa\xe0\x7e\x2a\x44\xd7\x2e\x6a\xba\xb6\xd2\x76\x2d\x6a"
- "\x75\xb8\xbe\xa8\x04\x74\x3b\x7e\x07\x9e\xff\xa2\x22\x1c\x77\xa2"
- "\x3d\xc1\x5e\x0b\x65\x94\xf1\x1a\x7f\xf0\x76\x56\xe3\x1b\x38\x8d"
- "\x0f\xdf\x01\xed\x72\xac\x49\xe3\x37\x96\xa9\x32\xeb\x44\x1a\xff"
- "\x48\xfd\xaa\xc1\xe5\x36\xdd\x9e\xc1\x69\xfb\x4c\x2b\xab\xed\xcb"
- "\x41\xdb\x57\x50\x6d\x3f\xd8\x64\xbb\x06\x30\x53\xc9\x5e\x73\x99"
- "\xbd\xa6\x08\xae\x29\xa3\xd7\xfc\x5e\xa8\xff\x8f\x50\xfd\xff\x9c"
- "\x9d\xfe\xff\x3d\xab\xff\x6d\x79\x79\xd4\x30\xc2\xdc\xbc\xd5\x4f"
- "\x2a\x37\xff\x6c\x93\xfe\xcf\x10\xea\xff\xa6\xdc\xfc\xef\x15\xe9"
- "\x7f\xf8\xcd\x63\x36\x2d\x79\x57\x74\x64\x9d\xb4\x8e\x6c\x6b\xfa"
- "\xdf\xba\xea\xe1\x08\x7b\xfd\x8f\x9e\xc0\x96\x9b\xb7\x8a\x72\xf3"
- "\xcf\xba\xa9\xff\x9f\x15\xe9\x7f\x8c\xa3\x1b\xb9\xf9\x63\x77\xc5"
- "\xb7\xb5\xa1\xdc\x7c\xeb\xeb\xff\xff\x30\x0a\xf3\xf3\xa8\xff\xf9"
- "\xfc\xfc\x73\x12\xfa\x7f\x88\x50\xff\x1f\xd1\xab\x7e\x6f\xa7\xff"
- "\x87\x4b\xe8\xff\x21\x6e\xea\xff\x21\x6e\xea\xff\x21\x2e\xea\xff"
- "\x21\x32\xfa\x3f\xd0\x20\xaf\xff\x03\xe9\xfa\x9e\x99\xbc\x4e\xc3"
- "\xf7\xa0\x01\x8b\x50\xa7\x0d\xa5\xfa\x9f\xea\x36\xd0\x69\x43\xef"
- "\x13\xfd\xff\x07\x19\x4d\xf6\x07\x81\xfe\x1f\xd2\x0a\xfa\x7f\x88"
- "\x8c\xfe\x1f\xca\xe9\xff\x21\x12\xfa\x7f\x88\x8c\xfe\x1f\xca\xe9"
- "\xff\x21\x76\xfa\x7f\x08\xa7\xff\x87\x3a\xd1\xff\xc3\x38\xfd\x3f"
- "\x8c\xd3\xff\x34\xc6\x8e\xfa\x7f\x98\x0b\xfa\x7f\x08\xa7\xff\x87"
- "\x38\xd1\xff\xc3\x24\xf4\x7f\xa0\x01\xf5\xbf\x34\xae\x5e\x18\x2c"
- "\xc6\xd5\xf3\x76\xfa\x7f\xd8\x7d\xa4\xff\x65\xb1\x66\xa7\xff\x9f"
- "\x77\x43\xff\x3f\xaf\x50\xff\x0f\x91\xd1\xff\xcf\x5f\xb7\xc7\x9f"
- "\x58\xff\xbf\x20\xa3\xff\x5f\xb0\xd3\xff\x43\x64\xf4\xff\x0b\x53"
- "\x45\xe5\x3b\xe8\xff\x17\xec\xf4\xff\x10\x3b\xfd\x3f\x9c\xd3\xff"
- "\x81\xd9\xca\xf5\xff\x0b\xcd\xe8\xff\x17\xec\xf4\xff\x0b\x9c\xfe"
- "\x1f\xce\xe9\xff\x17\x38\xfd\x1f\x98\x25\x3c\xce\xeb\x7f\x7a\xdc"
- "\x51\xff\x0f\x6f\x4e\xff\xfb\x98\xb7\x46\x07\x34\xf6\x89\x0e\x6c"
- "\xcc\xca\x0b\x7e\xba\xfa\x71\x4b\xd3\x9e\x07\xe1\xa0\x07\x2a\x41"
- "\x1f\xcc\x22\x2a\x5c\x37\x40\x7b\x0a\xfa\xfd\x59\x74\x7c\x3f\xf6"
- "\xfd\x38\xfe\xa4\x30\x41\xd7\x0e\xda\x94\xdc\xf6\x4d\x24\xe6\x01"
- "\xc9\x41\xa8\x01\x1a\xb6\x46\x13\x53\x56\x46\x68\x03\x8e\xed\x8f"
- "\x26\xaa\x37\x6a\xa5\x75\xdd\xd2\x4a\xc6\x0a\x98\xf7\x9e\x12\x46"
- "\x35\x5d\x71\xe4\x25\x16\xc7\xa8\x0b\x36\xde\x02\x2d\x60\xac\x60"
- "\x75\x82\x4f\x78\x00\xc9\xd5\x12\xdf\x8e\xb5\x44\xdd\xd1\xc3\xa3"
- "\xfd\xcb\xaf\x11\x62\x01\x8d\x30\xb6\x1f\x63\xed\x5f\x1d\x80\xeb"
- "\x04\x75\xa2\x3a\x61\x5f\x3b\x33\xa7\x13\x3e\xbc\x45\x06\x6c\x5a"
- "\x04\xfa\xa0\x98\xea\x03\xdc\x1f\xa1\x81\xea\x83\x5e\x8d\xf5\x9a"
- "\x27\x9a\xc6\xf6\x37\xcd\xd9\xe0\xc7\xf6\xdf\x5e\xc3\x6b\x03\xd4"
- "\x05\xcc\x1b\x1a\x32\xc8\x44\xc7\x5a\x24\x4c\xa5\x63\xfb\x07\x54"
- "\x13\x55\xde\x4c\xe2\x5d\x14\x5e\x85\xf3\xf0\xfd\x8b\xaa\xb7\x91"
- "\x25\xe3\x49\x2f\x33\x6a\x81\x54\x66\x4f\x51\x75\x36\xc1\x35\x10"
- "\x41\x2b\x0e\xcd\xe1\xf4\xc0\xc4\x59\x32\x7a\x00\xfa\x60\xd4\x04"
- "\xb4\xef\x1d\x71\xfd\xa8\xe6\x28\x51\xae\xf3\x46\xb0\xdc\x29\x3b"
- "\xe7\x77\x6b\x74\xa0\xb9\x4f\x34\xb1\xf8\xe6\x05\xd3\x35\x31\xb3"
- "\x52\xac\x1f\x7f\x1a\x8b\x6b\x1d\x7e\x5a\x55\xe3\x81\xeb\x7b\xe3"
- "\x5e\x97\xd6\x9d\xc9\x41\xa2\xf9\x18\xb7\xb9\x98\xdd\xa6\x31\x43"
- "\x7d\x37\xa3\x96\x30\x6f\x98\x55\x04\xce\x75\x62\xe7\x63\x98\xf4"
- "\x84\xdf\xf3\xd2\x9f\x6c\xb6\xd2\x75\x25\xad\x4b\x23\x3b\x58\x21"
- "\x2e\x4c\xaa\x8a\x14\xde\x32\xb1\x1a\x2e\x0d\xf7\xc1\x5c\xe6\xd1"
- "\x11\x35\x1c\x60\xff\xe1\xbc\x46\x88\xd1\x45\x1a\x23\x26\xd5\x9b"
- "\xfd\xd7\xbc\x54\x13\x00\x65\x3f\x71\xfb\x36\x68\x38\x6e\xcf\x4c"
- "\xdb\x1a\xbb\xec\xdc\x9a\x46\x9c\x5b\x53\x41\xcc\x6b\xe8\xba\x85"
- "\x80\x0b\x0f\x5c\xef\x03\xea\xd0\x93\x9d\x53\x73\x5b\x83\x38\x52"
- "\x6f\xbe\x8c\xf3\x80\xce\xb2\xf1\xb1\x70\x71\xc1\xbd\x33\x6d\xda"
- "\xac\xa4\xe0\x34\x9d\x57\x69\x17\x8b\xdb\xdb\xa8\x06\x67\xe7\xb9"
- "\xac\x1a\x3e\x0d\xc7\xc8\x5c\x53\xfd\x71\xe5\x51\x50\x37\x21\x71"
- "\x4a\xe3\xf2\xc7\x15\x6d\x23\x2e\xea\x5f\x59\x5c\xfe\x73\x28\x8d"
- "\xcb\xc8\xde\xee\xc5\x65\x64\x40\xdb\x88\x8b\xf7\xaf\x2c\x2e\x7f"
- "\x2c\xa3\x71\x19\xb5\xdf\xbd\xb8\x8c\xda\xe7\x2c\x2e\x98\xab\xb2"
- "\xe5\xa9\x6c\x39\x2a\xec\x4f\xa9\xdf\x99\x90\xc6\x8f\xc9\x9c\x90"
- "\x26\x1c\x93\x79\xf2\x08\xe6\x6f\x56\x91\x13\x63\xb0\xaf\x1c\xbd"
- "\xda\x79\x6e\xea\xa5\x72\x3e\x37\xf5\xe2\x73\x54\xa3\xbe\xd8\x9d"
- "\x6a\xd4\xb1\xec\xb8\xed\xa4\x73\x44\x65\x7e\x6a\x5e\xf0\xae\x79"
- "\x3a\x15\xce\x5f\xda\x75\xcd\xa4\x4a\xab\x03\xcd\xa9\x7a\x9c\xc1"
- "\x9c\xd4\xea\x05\x38\x16\xd3\x48\x40\xef\x3d\x7e\x45\x35\x76\x2a"
- "\xae\xbb\x76\xe8\x9a\x8e\xcd\x05\x31\x4f\x7c\x1a\xbb\xb3\x87\xc1"
- "\x03\xfb\xd1\x5d\xf3\x4c\x2a\x1b\x96\x6c\xf3\x1a\xa1\x3d\x03\x6f"
- "\x6c\x8b\x0e\xc0\x71\x93\x8d\x7e\x19\xa1\x16\xbf\xbc\x60\x73\x61"
- "\x72\x90\x14\xbe\xd8\xf9\x92\xd0\x87\xe2\xfc\xc6\x99\xb1\x3c\xce"
- "\xac\x4b\x29\xbe\x4a\x40\xb3\xe3\xde\x42\x9d\xa1\xef\x64\x6e\x47"
- "\x76\x98\xbe\x1d\x62\xcf\x61\x0c\xfa\x6f\x79\x8c\x6d\x10\x63\xec"
- "\x06\x87\x31\xc0\x5a\x13\xc6\x04\xf3\x1d\x03\x29\xc6\xf4\x4d\x18"
- "\x63\xfb\xce\xa5\x9a\x9e\x88\x33\x1b\xc6\xb0\xdf\xa4\x18\xab\x92"
- "\xc5\xd8\xc9\x4a\x69\x8c\x99\xfb\x0a\x31\x36\x32\x92\x62\x6c\xec"
- "\x63\x47\xc3\x00\x63\x61\x4a\x31\x36\xb6\xa7\xd8\x3b\xbf\x3c\xcc"
- "\xd1\x3b\x8f\x5d\x66\xef\x9d\x6d\x5e\xf9\x86\x5f\x56\xd0\x0d\xf0"
- "\xcb\xc6\x26\xbf\x3c\x76\x9b\x7b\x7e\x79\xec\x56\xd7\xc6\xb2\xbd"
- "\xd8\xee\x44\x22\x21\x27\xe0\x79\x2a\x0d\xa6\x63\xd9\x3e\x65\xfd"
- "\xf2\xe8\x4c\xc4\xa1\xb4\x5f\xa6\xe7\x1c\xc7\x20\xbd\xb4\x8d\x1f"
- "\x83\xf4\xd2\xfc\x86\xb5\xd2\x63\xd9\x76\x68\x73\x04\xde\x25\x47"
- "\x62\xbc\x51\x8e\xdd\x78\xa3\x1c\x09\xdf\x92\x43\xf0\xbb\x42\xdf"
- "\x72\x22\x98\xfa\x96\x13\xc1\xe8\x5b\x72\x58\xbd\x77\x22\xd8\xe6"
- "\x5b\x72\xe0\x3c\xf5\x2d\x27\x82\x2f\xc3\x1f\xfa\x96\x97\x7c\x4f"
- "\x04\x4b\xf9\x96\x97\x1e\xa3\x63\xd9\x5e\xf4\x92\x1f\xcb\x96\x23"
- "\xf0\xc7\x39\x02\x7f\x9c\xc3\xf9\xe3\x1c\xd6\x1f\xd3\xdf\x1c\xc0"
- "\xd6\x0d\x7f\x13\xcb\x14\xfe\x26\xef\x1f\x5e\x5a\x43\xfd\xc3\x8b"
- "\xde\x18\x07\xb1\x3f\x86\xef\xc4\x4b\xf9\xe3\x97\xb8\xf1\x6f\x2f"
- "\x7a\xd9\xfc\x71\x23\xbd\x9e\x2d\x03\xb8\xe6\xa2\xbc\x3f\x1e\x97"
- "\x44\xb9\x67\x1c\x37\x1e\x9c\xc6\xd4\xd1\x1f\x8f\x13\xfa\x1f\x99"
- "\xb1\x6c\x14\x43\x6c\x3d\x63\xe5\xfc\xf1\xb8\x18\x47\x7f\x3c\x3a"
- "\x4d\x7a\x2c\xdb\x84\xb1\x3c\x8e\xc6\x5f\x12\x8f\x65\x1b\xf7\x85"
- "\xd0\x17\x23\xc6\xee\x33\x6c\xf9\x8a\xc7\xb2\x8d\x5f\x2e\xed\x89"
- "\x73\x04\x9e\x38\x87\xf5\xc4\x27\x82\x6d\x63\xd9\xc6\xef\xc7\xb2"
- "\x1d\x3d\x71\x4e\xd3\xf5\x36\x4f\x8c\xdf\xa1\x98\x93\xf2\xc4\x13"
- "\xda\xd9\x63\x4e\xec\x89\x27\xf4\xb6\x79\xe2\xc6\xe9\x42\x4f\x3c"
- "\x61\x98\xd8\x13\x63\xf9\x52\x9e\x78\xc2\x1c\x51\xf9\x0e\x9e\x78"
- "\xc2\x32\x9b\x27\xc6\xf2\x6d\xb8\xe5\x3d\xf1\xcb\x7d\x28\x87\x8e"
- "\x7e\x4e\xb9\x27\x7e\x99\xcd\xeb\x14\x6e\xa4\xef\x9c\xc4\x7e\xf8"
- "\xe5\x8e\x62\x3f\x3c\x41\x4f\x7d\xef\xcb\x43\xe9\x38\xb6\x09\x46"
- "\x7a\x7c\xf4\xb3\xc2\xe3\xbc\x1f\xa6\xc7\x71\x1c\x1b\x1d\xbf\xf6"
- "\xf2\x38\x65\x3e\xf8\x37\x6d\xd0\x07\xfb\x3b\xf1\xc1\xfe\xbf\x32"
- "\x1f\x3c\xb1\xc1\x3d\x1f\x3c\xd1\xd4\x36\x74\xfd\xaf\xcd\x6f\xbd"
- "\x1c\x46\x35\xd7\xe4\x35\xee\xe9\xfa\xc9\x99\x6d\x23\x2e\xbf\x36"
- "\xbf\x35\x29\x88\xc6\x25\xb8\x9f\x7b\x71\x09\x96\xdd\xff\xb0\x79"
- "\xbf\xf5\xaa\x99\xf7\x5b\xaf\x9a\xe5\xfd\x56\xb0\xc5\xb9\xdf\x0a"
- "\x19\xc3\xfb\xad\x3f\x6d\xa3\x9a\xe7\x4f\x2b\xa9\xe6\xf9\xd3\x78"
- "\xe5\x7e\xeb\x95\xc3\x0f\xfc\x56\x4b\xfa\xad\xc9\x15\x14\x63\xaf"
- "\xac\x76\xcf\x6f\xbd\x92\x26\xf6\x5b\xa1\xdb\x1d\xfd\xd6\x2b\xd7"
- "\x5d\xf7\x5b\x7f\xf2\x73\xcf\x6f\xfd\xc9\xd7\x35\xbf\xf5\xa7\x85"
- "\xd2\x7e\x6b\x2a\x91\xf7\x5b\xf4\x9c\xa3\x4e\x0e\xf1\xe3\x75\xf2"
- "\xb4\x8b\x6d\xdf\x6f\x4d\x7b\x5f\x5a\x13\x4f\x5b\x4d\xfd\xd6\x9f"
- "\xe2\x5a\xde\x6f\xfd\x29\x4e\xda\x6f\x85\x78\x50\x6d\xfa\xa7\x78"
- "\x47\xbf\x05\xdf\x91\xf4\x5b\x21\xcf\x71\xdf\x89\x13\xfb\x2d\x5a"
- "\x06\x70\xcd\x54\x79\xbf\x15\x72\x95\x72\x4f\xc8\x41\xca\x3d\x34"
- "\xa6\x8e\x7e\x2b\x24\xbb\x79\xbf\x45\x31\xc4\xd6\x53\xd6\x6f\x85"
- "\x9c\x73\xf4\x5b\xc1\x66\x69\xbf\xf5\xea\x17\x3c\x8e\x5e\x0d\x11"
- "\xfb\xad\x3f\xf7\xbd\x3f\xfc\x96\x2c\xb6\xde\x17\xfb\xad\x3f\xdf"
- "\x54\xee\xb7\x5e\xed\xa7\xcc\x6f\x21\xe6\xa4\xfc\xd6\xab\x0b\xed"
- "\x31\x27\xf6\x5b\xaf\xae\x91\xf6\x5b\xaf\x6e\x17\xfb\x2d\x2c\x5f"
- "\xca\x6f\xbd\x7a\x5a\x54\xbe\x83\xdf\x7a\xf5\xba\xd8\x6f\xd1\xeb"
- "\x78\xbf\x15\x9a\x45\x39\x34\x78\x9b\x72\xbf\x15\xba\x50\xde\x6f"
- "\x85\x26\x89\xfd\x56\x68\x30\xf5\x55\xa1\x05\xd4\x6f\x85\x46\xd0"
- "\xe3\xc1\x5b\x85\xc7\x79\xbf\x45\x8f\xf3\x7e\x2b\x74\x9f\x32\xbf"
- "\xd5\xb9\x0d\xfa\x2d\xb5\x13\xbf\xa5\xfe\x95\xf9\xad\xd7\xa3\xdc"
- "\xf3\x5b\xaf\x47\x3e\xd0\xf5\xad\xa1\xeb\x43\x8b\xa8\xe6\x0a\xf3"
- "\x70\x4f\xd7\xe3\x16\x1d\xee\xea\xfa\x37\xcb\x79\x5d\xff\x66\xb9"
- "\xbc\xae\x0f\x6b\x66\xfd\xb7\x59\x3d\x79\x5d\xff\x06\x97\xcb\x7c"
- "\x63\x16\xed\x5b\xdf\xe8\xad\x5c\xd7\xcf\xdc\xf0\x40\xd7\xb7\xa4"
- "\xae\x7f\x7d\x0f\xc5\xd8\xcc\x39\xee\xe9\xfa\x99\x11\x62\x5d\x1f"
- "\xb1\xcc\x51\xd7\xcf\x3c\xee\xba\xae\x9f\x79\xd5\x3d\x5d\x3f\xb3"
- "\xd6\x35\x5d\xff\xc6\x24\x69\x5d\x1f\x56\x21\xaf\xeb\xe9\x39\x47"
- "\x3d\x16\x7e\x95\xd7\x63\xe1\xfb\xdb\xbe\xae\x0f\x0f\x93\xd6\x5e"
- "\xe1\x73\xa8\xae\x7f\x63\x62\xcb\xeb\xfa\x37\x26\x4a\xeb\xfa\xf0"
- "\x33\x54\x03\xbd\x11\xec\xa8\xeb\xe1\x3b\x92\xba\x7e\x56\x47\xee"
- "\x3b\x13\xc5\xba\x9e\x96\x01\x5c\xd3\x4f\x5e\xd7\xcf\x3a\x4a\xb9"
- "\x67\x56\x36\xe5\x1e\x1a\x53\x47\x5d\x3f\x2b\xa6\x79\x5d\x4f\x31"
- "\xc4\xd6\x53\x56\xd7\xcf\xfa\xc2\x51\xd7\x87\xc9\xac\xa7\xf5\xe6"
- "\x6a\x1e\x47\x6f\x0e\x14\xeb\xfa\x59\x96\xfb\x43\xd7\xcb\x62\x2b"
- "\x4c\xac\xeb\x67\x17\x2b\xd7\xf5\x6f\x7a\x28\xd3\xf5\x88\x39\x29"
- "\x5d\xff\xe6\x24\x7b\xcc\x89\x75\xfd\x9b\x51\xd2\xba\xfe\xcd\x65"
- "\x62\x5d\x8f\xe5\x4b\xe9\xfa\x37\x0b\x45\xe5\x3b\xe8\xfa\x37\x8f"
- "\x8b\x75\x3d\xbd\x8e\xd7\xf5\x11\xd1\x94\x43\xc3\xdc\x58\x4f\x2b"
- "\x62\x92\xbc\xae\x8f\x08\x11\xeb\xfa\x08\x0d\xd5\xef\x11\x29\x54"
- "\xd7\x47\x0c\xa7\xc7\xc3\x12\x85\xc7\x79\x5d\x1f\x96\x28\xd6\xf5"
- "\x11\x99\xca\x74\xfd\x43\x6d\x50\xd7\x7b\x3b\xd1\xf5\xde\xbf\x32"
- "\x5d\xff\xd6\x48\xf7\x74\xfd\x5b\x41\xee\xeb\xc7\x79\xbe\xbc\x7e"
- "\x9c\xe7\x2b\xaf\x1f\xff\xe2\xe7\x5c\x3f\xbe\x1d\xc6\xeb\xc7\xa8"
- "\x83\x94\xc3\xa3\xb6\x50\x0e\x8f\x9a\xa5\x5c\x3f\x46\x9e\x79\xa0"
- "\x1f\x5b\x52\x3f\x46\x6c\xa5\xfa\x31\x72\x9b\x7b\xfa\x31\x72\xab"
- "\x58\x3f\xce\x3b\xec\xa8\x1f\xa3\x3a\xb8\xae\x1f\xa3\x06\xba\xa7"
- "\x1f\xa3\x06\xb8\xa6\x1f\xa3\x56\x4b\xeb\xc7\xbf\xf8\xcb\xeb\x47"
- "\x7a\xce\xb1\xdf\x7f\x7b\x20\xdf\xef\xcf\x6d\x68\xfb\xfa\x71\x6e"
- "\xae\x74\x1f\x3f\x77\x1b\xd5\x8f\x51\x69\x2d\xaf\x1f\xa3\xd2\xa4"
- "\xf5\xe3\xdb\xdd\x69\x5f\x1b\x95\xe9\xa8\x1f\xe1\x3b\x92\xfa\xf1"
- "\x6d\xae\xff\x8f\x4a\x13\xeb\x47\x5a\x06\x70\x4d\x94\xbc\x7e\x8c"
- "\xe6\xe6\xa7\xbe\x7d\x9a\x72\x0f\x8d\xa9\xa3\x7e\x7c\xbb\xb0\x79"
- "\xfd\x48\x31\xc4\xd6\x53\x56\x3f\xbe\x7d\xd3\x51\x3f\xfe\xc5\x57"
- "\x5a\x3f\xc6\x14\xf3\x38\x8a\x89\x11\xeb\xc7\xe8\x11\xf7\x87\x7e"
- "\x94\xc5\x56\xae\x58\x3f\xc6\x74\x54\xae\x1f\x63\x46\x2a\xd3\x8f"
- "\x88\x39\x29\xfd\x18\xb3\xda\x1e\x73\x62\xfd\x18\xb3\x5d\x5a\x3f"
- "\xc6\x1c\x16\xeb\x47\x2c\x5f\x4a\x3f\xc6\x5c\x15\x95\xef\xa0\x1f"
- "\xe7\x75\x10\xeb\x47\x7a\x1d\xaf\x1f\xe7\xed\xa4\x1c\xfa\xd6\x41"
- "\xe5\xfa\x71\xde\x6a\x79\xfd\x38\x2f\x5b\xac\x1f\xe7\x45\x52\x9d"
- "\x38\x4f\x47\xf5\xe3\xbc\x44\x7a\xfc\xad\x03\xc2\xe3\xbc\x7e\xa4"
- "\xc7\x79\xfd\x38\xaf\xac\x39\xfd\xe8\x5c\x5b\x2c\x12\xec\x4d\xb0"
- "\x48\xb4\x37\xc1\x71\x91\xb6\x78\x67\xbe\x73\x6d\xf1\xae\x60\x6f"
- "\x82\x05\xdc\xde\x04\x0b\xb8\xbd\x09\xe6\xb3\x7b\x13\x24\x4d\x02"
- "\x0d\x00\xda\xa2\xf0\xca\x1e\xaa\x2d\xae\x98\x54\x1f\x5e\xe3\xb4"
- "\x45\x2d\xf1\x4e\x9b\xc7\x69\x8b\x99\xa8\x2d\xe6\x8f\x47\x6d\xe1"
- "\x93\x0b\xfa\xb6\x9a\xd3\xbb\xb1\xa0\x77\xab\xe1\x33\x3c\x3b\x87"
- "\xa0\x8c\x12\xd0\xa4\x99\xf8\x7d\xdc\x1f\x03\xca\x62\xe7\xc9\xb2"
- "\x73\x68\xf5\xed\x02\x66\xd3\xf9\xb7\xb8\xbf\x89\xdc\xde\x26\xb6"
- "\x7d\x4d\x12\xab\x19\x2b\xee\x63\x32\x25\x42\xb0\xbf\x09\xee\x89"
- "\x6a\xa8\x21\xb8\xc7\x49\xee\x02\xe2\xfb\x11\x6a\x8d\x1a\xa2\xee"
- "\xb4\xcc\xa3\x13\xee\x6f\xd2\xc9\x48\x35\x6d\xa1\xf5\x18\xd5\xb4"
- "\xef\xfa\x3f\x0c\x3a\x69\xc0\xe6\x3a\x5e\x63\xac\x43\x7d\xf1\xae"
- "\x26\xc0\xf8\xae\xa6\xd7\x8d\x1b\xa0\x69\x0d\xf6\xfb\x5f\x18\xe3"
- "\x71\x9f\x85\xd2\x78\x9a\x03\x65\xf7\xbd\xf8\x8b\x86\xe4\xbd\x05"
- "\xba\xa7\x96\x78\x3c\x83\x7b\x5f\x14\x13\xf5\xef\x7a\x02\xef\xdf"
- "\xd0\xf4\x14\xae\x65\x89\x79\x51\xeb\x0d\x0d\x29\x0a\x3f\xcb\xce"
- "\x99\x35\xdb\xe6\xcc\xd6\x91\xa1\x86\x77\x35\xaa\x8d\x0b\x04\x9a"
- "\xd6\x0f\x35\xed\xf3\x4e\x34\xed\x7c\x3f\xf7\x34\xed\x7c\x5f\xb1"
- "\xde\x58\x3c\xd8\x51\x6f\xcc\x5f\xe2\xba\xde\x98\xef\xe6\xfa\xef"
- "\xf3\x5d\x5c\xff\x7d\xbe\xc5\x5e\x6f\x6c\x67\xf5\xc6\x3b\x71\x88"
- "\x4d\x69\xbd\x41\xcf\x39\xf6\x13\xef\x0a\xd6\x7f\x7f\x37\xaa\xed"
- "\xeb\x8d\x77\x7d\xa4\xfb\x84\x77\xb9\xf5\xdf\xe7\x3b\x59\xff\xdd"
- "\x5d\xbd\x31\xdf\x2c\xad\x37\xde\xe5\xd6\x7f\x5f\x40\x1c\xf5\x06"
- "\x7c\x47\x52\x6f\xbc\xcb\xad\xff\x3e\xdf\x2c\xd6\x1b\xb4\x0c\xe0"
- "\x1f\x27\xeb\xbf\xc7\x71\xeb\xbf\xc7\x71\xeb\xbf\xd3\x98\x3a\xea"
- "\x8d\x38\x17\xd6\x7f\xa7\x18\x62\xeb\x29\xab\x37\xe2\x24\xd6\x7f"
- "\x7f\x27\x56\x5a\x6f\x2c\x12\xac\xff\xbe\xd0\x6e\xfd\xf7\xb8\xc2"
- "\xfb\x43\x6f\xc8\x62\xcb\x6e\xfd\xf7\x85\x32\xeb\xbf\x3b\xd3\x1b"
- "\x0b\xf7\x2a\xd3\x1b\x88\x39\x29\xbd\xb1\xd0\x62\x8f\x39\xb1\xde"
- "\x58\xd4\x5d\x5a\x6f\x2c\xb2\x5b\xff\x1d\xcb\x97\xd2\x1b\x8b\x66"
- "\x88\xca\x77\xd0\x1b\x8b\x96\x88\xf5\x06\xbd\x8e\xd7\x1b\x8b\x7b"
- "\x52\x0e\x7d\xa7\xbb\x72\xbd\xb1\xc8\x22\xaf\x37\x16\xb7\x13\xeb"
- "\x8d\x45\x15\x54\x57\x2c\x0e\xa4\x7a\x63\x51\x2d\x3d\xfe\x8e\xbf"
- "\xf0\x38\xaf\x37\xe8\x71\x5e\x6f\x2c\x7e\x30\xff\xf5\xbe\xca\x57"
- "\xc5\xbb\x39\xff\x35\xfe\xc1\xfc\xd7\x56\x79\x0f\xbd\x98\x9b\xff"
- "\x9a\xe0\xe6\xfc\xd7\x84\x07\xf3\x5f\x5b\x25\x2e\x4b\xb8\xf9\xaf"
- "\x89\x6e\xce\x7f\x4d\x7c\x30\xff\xb5\x55\xe2\x92\xc0\xcd\x7f\x4d"
- "\x72\x73\xfe\x6b\xd2\x1d\xcc\x7f\x5d\x5e\xc0\x7b\xe3\xe5\x05\xf2"
- "\xde\x58\xdb\xcc\xfc\xd7\x54\x03\xef\x8d\x97\x4d\xa5\x5a\x74\xd9"
- "\x73\x54\x8b\xa6\xb0\xb9\x29\x2d\x7a\xe3\x8f\x77\x84\xef\x5e\xb0"
- "\x4f\x85\x6b\xb4\xe1\x9e\x91\xab\x13\x88\x97\x19\xbd\x31\xc4\x60"
- "\x35\xbb\x17\xc9\x11\x12\x3b\x17\xbd\x71\x4a\x4c\x49\xb5\x70\x1f"
- "\x12\xed\x39\x7e\x5d\xe4\x23\x04\xcf\x1d\xaa\xdb\xa7\xca\x6c\xb4"
- "\xcb\xc9\x2f\x30\xa9\x02\xe6\x89\x73\xf2\x96\xec\xbc\x60\xcc\xc9"
- "\x37\x70\xfb\x8a\xb0\x79\xf9\x81\xce\x73\xf2\x9b\x1a\xa1\xef\x94"
- "\xc8\xcb\x63\x4e\x1e\xfa\xc8\x5f\x59\x4e\x3e\x91\x9b\x1b\x9b\x32"
- "\xcc\xbd\x9c\x7c\xca\x50\xb1\x47\xfe\x20\xc4\xd1\x23\xa7\x6c\x72"
- "\xdd\x23\xa7\x1c\x76\xcf\x23\xa7\xe8\x5c\xf3\xc8\xcb\x7a\x4b\x7b"
- "\x64\x6d\xa6\x56\xd6\x23\xd3\x73\x8e\xde\x26\xf5\x30\xef\x6d\x52"
- "\x57\xb7\x7d\x8f\x9c\x1a\x28\xed\x63\x52\x87\x51\x8f\xbc\x2c\xa0"
- "\xe5\x3d\xf2\xb2\x00\x69\x8f\x9c\xca\xbd\xff\x5e\xd6\xc7\xd1\x23"
- "\xc3\x77\x24\x3d\x72\xea\x45\xee\x3b\x01\x62\x8f\x4c\xcb\x00\x1e"
- "\xb2\xc8\x7b\xe4\xf7\x36\x50\x5e\x7a\x2f\x8a\xf2\x12\x8d\xa9\xa3"
- "\x47\x7e\x6f\x64\xf3\x1e\x99\x62\x88\xad\xa7\xac\x47\x7e\x6f\xa5"
- "\xa3\x47\xd6\xca\xcc\x8d\x5d\x3e\x8b\xc7\xd1\x72\x0f\xb1\x47\x7e"
- "\xef\xd4\xfd\xe1\x91\x65\xb1\x15\x28\xf6\xc8\xef\x6f\x51\xee\x91"
- "\xdf\x3f\xad\xcc\x23\x23\xe6\xa4\x3c\xf2\xf2\xde\xf6\x98\x13\x7b"
- "\xe4\xe5\x23\xa4\x3d\xf2\xf2\x10\xb1\x47\xc6\xf2\xa5\x3c\xf2\xf2"
- "\x65\xa2\xf2\x1d\x3c\xf2\xf2\x4d\x62\x8f\x4c\xaf\xe3\x3d\xf2\x07"
- "\x41\x5c\x7f\xe7\xc6\xdc\xd8\x0f\x7a\xcb\x7b\xe4\x0f\xfa\x89\x3d"
- "\xf2\x72\x33\xf5\xc2\x1f\x4c\xa3\x1e\xf9\x03\x35\x3d\xae\x7d\x56"
- "\x78\x9c\xf7\xc8\x5a\xbb\xb9\xb1\x1f\x44\x3c\x98\x1b\x7b\x3f\x79"
- "\xe4\x15\x6e\xe6\xbf\x57\xf8\xb6\x0d\xcd\xff\x6b\xf3\x62\x1f\xc4"
- "\x53\xcd\xb5\xb2\xd0\x3d\xcd\xbf\x72\x67\xdb\x88\xcb\xaf\xcd\x8b"
- "\xad\xe0\xe6\x2c\x7f\x38\xd6\xbd\xb8\x7c\x38\xc6\x7d\x2f\xb6\xee"
- "\x59\xde\x8b\xad\x7b\x56\xde\x8b\xa5\x75\x77\xee\xc5\x32\x13\x79"
- "\x2f\x96\x7e\x8e\x6a\x9e\xf4\xc3\x54\xf3\xa4\x2f\x53\xee\xc5\x56"
- "\x37\x88\xbd\x58\x5a\xd4\x03\x2f\xd6\x5a\x5e\x6c\xa5\x91\xe2\x6f"
- "\xf5\x51\xf7\xbc\xd8\xea\x23\x62\x2f\xb6\xee\xa2\xa3\x17\x4b\xef"
- "\xe7\xba\x17\x4b\x9f\xe4\x9e\x17\x4b\x9f\xe8\x9a\x17\x4b\x2f\x94"
- "\xf6\x62\x69\x3d\xe5\xbd\x18\x3d\xe7\xa8\xa1\x33\x27\xf1\x1a\x3a"
- "\xb3\x7b\xdb\xf7\x62\x19\x07\xa4\xf5\x72\xc6\x51\xea\xc5\xd2\x77"
- "\xb6\xbc\x17\x4b\xdf\x29\xed\xc5\x32\xb9\xfd\xcf\xd2\xf7\x38\x7a"
- "\x31\xf8\x8e\xa4\x17\xcb\x8c\xe1\xbe\xb3\x53\xec\xc5\x68\x19\xc0"
- "\x43\x2b\xe5\xbd\xd8\x9a\xbe\x94\x97\x32\x6f\x52\x5e\xa2\x31\x75"
- "\xf4\x62\x99\xc5\xcd\x7b\x31\x8a\x21\xb6\x9e\xb2\x5e\x6c\x8d\x9f"
- "\xa3\x17\x4b\xf3\x97\xf6\x62\x6b\x05\xf3\x34\xd6\xae\x16\x7b\xb1"
- "\x35\x33\xee\x0f\x2f\x26\x8b\xad\x03\x62\x2f\xb6\x76\xa0\x72\x2f"
- "\xb6\x76\x96\x32\x2f\x86\x98\x93\xf2\x62\x6b\x0b\xed\x31\x27\xf6"
- "\x62\x6b\x8f\x4b\x7b\xb1\xb5\x17\xc5\x5e\x0c\xcb\x97\xf2\x62\xeb"
- "\x3a\x8a\xca\x77\xf0\x62\xeb\xfa\x89\xbd\x18\xbd\x8e\xf7\x62\xeb"
- "\x8a\x28\x87\x7e\x78\x58\xb9\x17\x5b\x57\x28\xef\xc5\xd6\x7d\x21"
- "\xf6\x62\xeb\x56\x50\xcf\xb5\x4e\x4f\xbd\xd8\xba\x5c\x7a\xfc\x43"
- "\x9d\xf0\x38\xef\xc5\xe8\x71\xde\x8b\xad\x33\x3c\x98\x37\x7b\x3f"
- "\x79\xb1\xec\x2d\xee\x79\xb1\xec\xfc\x07\x9a\xbf\x35\x34\x7f\x96"
- "\x17\xd5\x5c\x7f\x1d\xe6\x9e\xe6\xff\xeb\x50\xf7\x35\x7f\x9e\x86"
- "\xd7\xfc\x79\x1a\x79\xcd\x9f\xd3\xd1\xb9\xe6\xcf\x8d\xe5\x35\xff"
- "\xc6\x53\xb4\x6f\xdd\xf8\x05\xed\x5b\x37\x2e\x54\xae\xf9\x37\x5c"
- "\x15\x6b\xfe\x9c\x19\x0f\x34\x7f\x6b\x69\xfe\xec\x1a\x8a\xbf\x0d"
- "\xfb\xdd\xd3\xfc\x1b\xf6\x89\x35\x7f\xde\x69\x47\xcd\xbf\xf1\x31"
- "\xd7\x35\xff\xc6\x91\xee\x69\xfe\x8d\x41\xae\x69\xfe\x8d\x5b\xa4"
- "\x35\x7f\x8e\x5a\x5e\xf3\xd3\x73\x8e\x5a\x2d\x77\x24\xaf\xd5\x72"
- "\x3b\xb6\x7d\xcd\xff\xd1\x1e\x69\x5d\xf6\xd1\x7e\xaa\xf9\x37\xe6"
- "\xb7\xbc\xe6\xdf\x98\x2f\xad\xf9\x73\x07\x52\x7d\xb4\x71\xab\xa3"
- "\xe6\x87\xef\x48\x6a\xfe\xdc\x59\xdc\x77\xf2\xc5\x9a\x9f\x96\x01"
- "\x3c\x94\x24\xaf\xf9\x37\x75\xa7\xbc\x94\xcb\xed\xd9\x45\x63\xea"
- "\xa8\xf9\x73\x0f\x37\xaf\xf9\x29\x86\xd8\x7a\xca\x6a\xfe\x4d\x1d"
- "\x1c\x35\x7f\x8e\x8f\xb4\xe6\xdf\x7c\x91\xc7\xd1\xe6\x65\x62\xcd"
- "\xbf\x69\xea\xfd\xa1\xf9\x65\xb1\xb5\x47\xac\xf9\x37\xf7\x56\xae"
- "\xf9\x37\x87\x28\xd3\xfc\x88\x39\x29\xcd\xbf\x79\x8b\x3d\xe6\xc4"
- "\x9a\x7f\xf3\x41\x69\xcd\xbf\xf9\xb4\x58\xf3\x63\xf9\x52\x9a\x3f"
- "\xcf\x43\x54\xbe\x83\xe6\xcf\x7b\x4c\xac\xf9\xe9\x75\xbc\xe6\xcf"
- "\xe3\xfa\xbb\xbf\x7e\xa1\x5c\xf3\xe7\x6d\x91\xd7\xfc\x79\xdb\xc5"
- "\x9a\x3f\x8f\x9b\x3b\x9b\x57\x4e\x35\x7f\x5e\x26\x3d\xfe\xd7\xcf"
- "\x85\xc7\x79\xcd\x4f\x8f\xf3\x9a\x3f\xaf\xfa\xc1\x9c\xda\xfb\x49"
- "\xf3\x6f\xc9\x76\x4f\xf3\x6f\xc9\x72\x5f\x5b\x6e\x17\xcc\x7b\xd9"
- "\xee\x64\xde\xcb\xc7\x51\xce\xb5\xe5\x27\x82\x79\x2f\xdb\xb8\x79"
- "\x2f\xdb\xb8\x79\x2f\x5b\x4f\x29\xd7\x96\x5b\xc7\x8b\xb5\xe5\xc7"
- "\xfb\x1f\x68\xcb\xd6\xd2\x96\x79\x26\xaa\x2d\xb7\xfa\xb9\xa7\x2d"
- "\xb7\xda\xcd\x7f\xd9\x21\x31\xff\x65\xab\x82\xf9\x2f\x5b\xdd\x9c"
- "\xff\xb2\xd5\xc5\xf9\x2f\x5b\x65\xe6\xbf\x7c\x1c\x2d\xaf\x2d\xe9"
- "\x39\x47\x4d\xf0\x89\x60\xfe\xcb\x27\xf7\xc1\xfc\x97\x4f\x64\xe6"
- "\x28\x7c\xc2\xcd\x7f\xd9\xda\x0a\xf3\x5f\xb6\xca\xcc\x7f\xf9\x84"
- "\x9b\xff\xb2\x4d\x62\xfe\xcb\x56\x99\xf9\x2f\x9f\x70\xf3\x5f\xb6"
- "\xda\xcd\x7f\xd9\xc6\xcd\x7f\xf9\xc4\xc9\xfc\x97\xbf\x71\xf3\x5f"
- "\xfe\xc6\xcd\x7f\xa1\x31\x75\xd4\x96\x7f\x73\x61\xfe\xcb\x56\x6e"
- "\xfe\xcb\x56\x27\xf3\x5f\xfe\x26\x31\xff\xe5\xe3\x48\x69\x6d\xb9"
- "\x5d\x30\xff\xa5\xc0\x6e\xfe\xcb\xdf\xee\x93\xf9\x2f\xb2\xd8\xb2"
- "\x9b\xff\x52\xe0\xc6\xfc\x97\x02\x85\xf3\x5f\xb6\xca\xcc\x7f\x29"
- "\xb0\xd8\x63\x4e\xac\x2d\xb7\xcb\xcc\x7f\xd9\x6e\x37\xff\x65\xab"
- "\xcc\xfc\x97\xed\x33\x44\xe5\x3b\x68\xcb\xed\x76\xf3\x5f\xb6\xd9"
- "\xcd\x7f\xd9\xc1\xcd\x7f\xf9\xb8\x8b\x72\x6d\xb9\xdd\xc9\xfc\x97"
- "\x1d\x76\xf3\x5f\xb6\x73\xf3\x5f\x76\x70\xf3\x5f\xb6\x73\xf3\x5f"
- "\x3e\x56\x0b\x8f\xf3\xda\x92\x1e\xe7\xb5\xe5\x8e\x66\xe7\xbf\x38"
- "\xd7\x1d\x9f\xa9\x79\xdd\xf1\x99\x5a\x5e\x77\xec\xb8\xe8\x5c\x77"
- "\xec\x0e\xe5\x75\x47\xe1\x7e\xfa\x7c\x17\x6e\xa2\xcf\x77\x21\xfb"
- "\x1e\x26\xa9\x18\x74\xc7\x13\x3b\xc2\x77\x5d\xdb\xc3\xea\x8e\xdd"
- "\xf3\x4c\x2a\xd0\x88\x5e\x56\xd4\x1d\xa0\x05\xd3\x16\xa1\xee\xa8"
- "\xe6\xe6\xdb\xee\x3c\x5d\x1c\x2f\xd4\x1d\x9f\x3e\xc7\xce\xbd\x45"
- "\xed\x61\x34\xb1\xd7\xe1\x79\xa9\xb9\xb8\x07\xe7\x71\x73\x71\xa1"
- "\x6c\xe1\x1c\x5c\x76\x5e\xee\x35\xd0\x25\xb3\x21\x1e\x02\x5d\xf2"
- "\x60\x2e\xae\xb3\xb9\xb8\x3b\xdd\xcc\x7f\xef\xcc\x17\x6b\x91\xcf"
- "\x0e\x3a\x6a\x91\xc2\x76\xae\x6b\x91\xc2\x7e\xee\x69\x91\x42\x8d"
- "\x6b\x5a\xa4\x70\xa5\xb4\x16\xd9\x51\x8d\xb8\x95\xd6\x22\xf4\x9c"
- "\x63\x1f\xb2\xbb\x1f\xdf\x87\xec\xba\xd9\xf6\xb5\xc8\xae\x1c\xe9"
- "\xfe\x62\xd7\x16\xaa\x45\x0a\x57\xb4\xbc\x16\x29\x5c\x21\xad\x45"
- "\x76\xfb\x51\xde\x2e\x4c\x73\xd4\x22\xf0\x1d\x49\x2d\xb2\x7b\x3c"
- "\xf7\x9d\x15\x62\x2d\x42\xcb\x00\x6e\x9a\x23\xaf\x45\xf6\x78\x50"
- "\xae\xda\x7d\x8a\x72\x15\x8d\xa9\xa3\x16\xd9\xbd\xbd\x79\x2d\x42"
- "\x31\xc4\xd6\x53\x56\x8b\xec\xbe\xee\xa8\x45\x76\xe8\xa5\xb5\xc8"
- "\xde\xe3\x3c\x8e\xf6\x46\x89\xb5\xc8\x9e\x61\xf7\x87\x16\x91\xc5"
- "\x56\x8e\x58\x8b\xec\xed\xa0\x5c\x8b\xec\x1d\xa1\x4c\x8b\x20\xe6"
- "\xa4\xb4\xc8\xde\x95\xf6\x98\x13\x6b\x91\xbd\xdb\xa4\xb5\xc8\xde"
- "\x83\x62\x2d\x82\xe5\x4b\x69\x91\xbd\x3f\x89\xca\x77\xd0\x22\x9f"
- "\xb5\x13\x6b\x11\x7a\x1d\xaf\x45\x3e\x2b\xe0\xfc\xdc\x4a\xe5\x5a"
- "\xe4\xb3\x95\xf2\x5a\xe4\xb3\x35\x62\x2d\xf2\x59\x04\xd5\x1c\x9f"
- "\x1d\xa0\x5a\xe4\xb3\x78\x7a\x7c\xc7\x0a\xe1\x71\x5e\x8b\xd0\xe3"
- "\xbc\x16\xf9\xac\x48\x41\x9e\x6b\x9a\x92\xb9\xb8\x85\xb7\xc4\x79"
- "\x2e\x5b\x8e\xcb\x3c\x20\x79\x4c\x53\x9e\x4b\xf8\x9e\x54\x22\xcf"
- "\x85\x7d\x3a\x9f\xe7\x3a\xc7\x72\x15\x9f\xe7\xd2\xb3\x79\x2e\xcc"
- "\x71\xe1\xbb\x52\x5b\x8e\xcb\xba\xd8\x71\x1e\x6e\xa1\x55\x79\x8e"
- "\x8b\x7f\x5f\x6a\x32\xd0\x1c\x57\x45\x53\x8e\x0b\xfb\x73\x4b\xbd"
- "\x63\x8e\x0b\xfb\x71\x3e\xc7\x75\xb6\x85\x73\x5c\x9f\x2f\x71\xaf"
- "\x5f\xff\x3c\xbe\x6d\xbc\xd7\xfe\xb5\xcd\xc3\xfd\x4c\x4f\x73\x3f"
- "\xff\xd3\xc5\xbd\xf7\xda\xff\xa3\x6e\x1b\x71\xf9\xb5\x8d\xfd\xfe"
- "\x5c\x47\xe3\xf2\xf7\xed\xee\xc5\xe5\xef\x05\x6d\x23\x2e\xbf\xb6"
- "\x71\x20\xff\x13\x4a\xe3\xb2\x7f\xa4\x7b\x71\xd9\x1f\xe4\x7e\xae"
- "\xfe\xf0\x34\xde\x33\x1f\x9e\x26\xf4\xcc\xc7\xc6\x08\x3d\xf3\x97"
- "\xcd\xac\x7f\x79\x28\x97\xf7\xcc\x07\x2c\x54\x87\x1e\xb8\x48\x75"
- "\xe8\x01\xf6\xfd\x54\xd2\x48\xc2\x7a\x65\x33\xfa\xe6\xb9\x26\xd5"
- "\xae\x2b\x3a\x95\x39\x95\xfa\xe5\x52\x73\x11\x29\x36\x98\xc8\x87"
- "\x8b\x88\xd7\xca\x6b\xc4\x6b\x47\x9d\x49\xd5\x39\x9a\x78\x43\x9f"
- "\x04\x6d\x56\x04\x3a\x66\x13\x89\xd5\xa2\x97\x3e\xd0\xbd\x34\xd6"
- "\x20\xf0\xd2\x5f\x26\xf1\x3e\x1a\xae\x8b\x35\x91\xaf\xe6\xea\x54"
- "\xe8\x97\x6f\x67\xe7\x05\xdf\x1e\x98\x1c\xc4\xae\x63\x25\xcc\xe7"
- "\xc3\x6f\x07\xcc\x14\xe7\xf3\x1b\xb3\xf3\xa6\x35\x14\x26\x8f\x61"
- "\xd7\xd0\xec\xcb\xe7\xf4\x95\xac\x9f\xf9\x51\x23\xf1\xb5\xe5\xf3"
- "\x3f\xfa\xd5\xe5\xf3\xff\x6e\xa0\x18\xfd\xc7\x25\xf7\xf2\xf9\xff"
- "\xa8\x16\x7b\xe8\x7f\x7a\x38\x7a\xe8\x03\xe3\x5d\xf7\xd0\x07\x62"
- "\xdc\xf3\xd0\x07\xa2\x5d\xf3\xd0\x07\x8a\xed\x3d\x74\x81\x16\x3d"
- "\xf4\x97\xfe\x88\x63\x69\x0f\x4d\xcf\x39\x7a\x9f\x43\x31\xbc\xf7"
- "\x39\x34\xac\xed\x7b\xe8\x83\x95\xd2\x3e\xe7\xe0\x25\xea\xa1\x0f"
- "\x14\xb5\xbc\x87\x3e\x50\x24\xed\xa1\x0f\xbd\x46\xfd\xc6\x81\x22"
- "\x9b\x1f\xe6\x3d\x34\x7c\x47\xd2\x43\x1f\x5a\x6d\xff\x1d\xea\xa1"
- "\x0f\x94\x51\x0f\x7d\x68\xbb\xbc\x87\xfe\x6a\x2c\xe5\xae\xaf\xfc"
- "\x28\x77\xd1\x98\x3a\x7a\xe8\x43\x57\x9b\xf7\xd0\x14\x43\x6c\x3d"
- "\x65\x3d\xf4\x57\xcf\x39\x7a\xe8\x2f\x65\xd6\xcf\x3c\xdc\x91\xc7"
- "\x91\xae\x50\xec\xa1\xbf\x4a\xba\x3f\x3c\xb4\x2c\xb6\x2a\xc5\x1e"
- "\x5a\x37\x49\xb9\x87\xd6\x2d\x53\xe6\xa1\x11\x73\x52\x1e\x5a\x57"
- "\xcc\xe1\xa7\x4c\xda\x43\xeb\x7e\x92\xf6\xd0\x87\x3d\xc4\x1e\x1a"
- "\xcb\x97\xf2\xd0\x87\x07\x8a\xca\x77\xf0\xd0\x87\xc7\x8b\x3d\x34"
- "\xbd\x8e\xf7\xd0\x87\x6b\x29\x87\xee\x77\x63\xfd\xcc\xc3\xc5\xf2"
- "\x1e\xfa\xf0\x69\xb1\x87\x3e\x5c\x40\xbd\xf2\x3f\x09\xf5\xd0\x87"
- "\x0f\xd0\xe3\xfb\x0f\x08\x8f\xf3\x1e\x7a\xbf\xdd\xfa\x99\xff\x54"
- "\x2b\xf0\xd0\xa1\x2d\xe4\xa1\xc7\xdd\x5f\x1e\xba\x71\x4f\xdb\xf0"
- "\xd0\x5f\x1f\x74\xcf\x43\x7f\x7d\xc0\x45\x4f\x30\xad\x19\x4f\x30"
- "\xe6\x81\x27\x10\xea\xad\x7f\xf6\xa1\x7a\xeb\x68\x88\x7b\x9e\xe0"
- "\xe8\xb4\xb6\x10\x97\x5f\x57\x4c\x8e\x70\xe3\xf5\xff\xf5\x93\x7b"
- "\x31\xf9\x57\xcd\x03\xff\xdc\x1a\x71\x39\x9a\x4b\xe3\x72\x6c\x99"
- "\x7b\x71\x39\x96\xe2\xbe\x7f\x2e\xdb\xc7\xfb\xe7\xb2\x7d\x42\xff"
- "\xfc\x2f\xd1\x3b\xe7\xe3\x21\xce\xfd\x73\x09\xe1\xfd\x73\xd1\x2c"
- "\xaa\x41\x8b\xb8\x31\x25\x45\x6c\x4e\x3d\xf1\x0b\xea\x9f\x6f\xa1"
- "\x7f\xbe\x0c\xfe\xf9\xad\x70\x95\x99\xdb\x3b\x02\xc7\xaf\x15\x83"
- "\x07\x46\xcf\x5c\x1a\x0f\xff\x8f\x33\x90\x0f\x17\x10\xaf\x55\xe0"
- "\x7d\xb7\x43\x5f\xb9\x7d\x91\x41\xb5\x62\x2e\xf4\x33\x15\x85\xa4"
- "\x73\x24\xf8\xea\x3a\xf4\xd5\x47\xc0\x33\x2f\xe7\x7c\xf5\xc9\xa4"
- "\xd2\x38\xa1\xaf\x3e\x7e\x9a\xf5\xd5\x06\x3a\x36\xae\x34\x0e\x7c"
- "\x35\xfc\x1e\xee\x45\x21\xf4\xd5\x0d\xe0\x9b\x1b\xc1\x37\x67\x5e"
- "\xb1\xf3\xd8\x6f\x39\x7a\xec\x06\xbf\xbc\x50\xd3\xc0\xe4\x71\xe8"
- "\xb1\x6f\x6d\x7b\xe0\xb1\x1d\x3d\xf6\xbf\x03\x29\x8e\x4f\x8e\x77"
- "\xcf\x63\x9f\x1c\x27\xf6\xd8\xa7\xe6\x38\x7a\xec\x93\x85\xae\x7b"
- "\xec\x93\xa7\xdc\xf3\xd8\x27\xcb\x5c\xf3\xd8\x45\x83\xed\x3d\xf6"
- "\x27\xec\x7b\xea\xe3\xa1\x88\x75\x69\x8f\x4d\xcf\x39\x7a\xa3\xe2"
- "\x53\xbc\x37\x2a\xde\xd4\xf6\x3d\x76\x71\x90\xb4\x0f\x2a\x1e\x4f"
- "\x3d\x76\x51\x60\xcb\x7b\xec\xa2\x40\x69\x8f\x5d\xcc\x8d\x7f\x2b"
- "\x0a\x74\xf4\xd8\xf0\x1d\x49\x8f\x5d\x7c\xdd\xfe\x3b\xd4\x63\x17"
- "\x3d\x4b\x3d\x76\x49\x47\x79\x8f\x5d\xb2\x9d\xf2\x5b\xc9\x12\xca"
- "\x6f\x34\xa6\x8e\x1e\xbb\x64\x6a\xf3\x1e\x9b\x62\x88\xad\xa7\xac"
- "\xc7\x2e\xd9\xe0\xe8\xb1\x8f\x4f\x93\xf6\xd8\x65\xf3\x79\x1c\x95"
- "\x75\x11\x7b\xec\x92\x8b\xf7\x87\xc7\x96\xc5\x56\x90\xd8\x63\x97"
- "\xee\x55\xee\xb1\x4b\x2f\x29\xf3\xd8\x88\x39\x29\x8f\x5d\x36\x98"
- "\xc3\xcf\xb3\xd2\x1e\xbb\x6c\x92\xb4\xc7\x2e\x9b\x23\xf6\xd8\x58"
- "\xbe\x94\xc7\x2e\x5b\x23\x2a\xdf\xc1\x63\x97\x15\x8a\x3d\x36\xbd"
- "\x8e\xf7\xd8\xa7\x82\x29\x87\x1e\xb3\x28\xf7\xd8\xa7\x06\xcb\x7b"
- "\xec\x53\xc3\xc4\x1e\xfb\x94\x0f\xf5\xd2\xa7\x22\xa8\xc7\x3e\x15"
- "\x40\x8f\x1f\x33\x0b\x8f\xf3\x1e\x9b\x1e\xe7\x3d\xf6\xa9\x38\x65"
- "\xef\xa9\xef\x68\x3d\xac\x31\x77\x7f\x3e\x46\x4b\xad\x87\x65\x7b"
- "\x57\x7d\xaf\xe7\x63\xfc\x6f\x5f\xf7\x7c\xf6\xff\xf6\x79\xe0\xe7"
- "\x5a\xda\x37\x9c\x5a\x41\xf5\x56\xb9\x9b\xeb\xdf\x96\x3b\x5d\xff"
- "\xf6\x81\x9f\x73\x37\x2e\xff\x1b\x4d\xe3\xf2\xed\x54\xf7\xe2\xf2"
- "\x6d\xb0\xfb\x7e\xee\x7c\x04\xef\xe7\xce\x47\xc8\xbf\x0f\xfd\xae"
- "\xaf\x73\x3f\xf7\xfd\x4e\xde\xcf\x9d\xed\x48\xf5\xce\x99\xeb\x54"
- "\xef\x9c\xd9\xdb\x72\xef\x43\xcf\xf4\x13\xbf\x0f\xfd\x6e\xf5\x83"
- "\xf7\xa1\x77\xc3\xab\x9d\x26\x14\xa3\x15\x37\xdd\xf3\x6a\x15\x46"
- "\xb1\x57\xbb\xd0\xc5\xd1\xab\x9d\x79\xcd\x75\xaf\x76\x26\xc9\x3d"
- "\xaf\x76\x26\xd1\x35\xaf\x76\xe6\x9c\xf4\xfb\xd0\xef\x34\xf2\xef"
- "\x43\xe9\x39\x47\x8d\xfd\x7d\x12\xaf\xb1\xbf\x1f\xdf\xf6\xbd\xda"
- "\xd9\x5a\x69\x3d\x7d\xf6\x26\xf5\x6a\x67\x2a\x5b\xde\xab\x9d\xa9"
- "\x94\xf6\x6a\xdf\x47\x51\x5d\x7b\xa6\xd2\xd1\xab\xc1\x77\x24\xbd"
- "\xda\xf7\x9b\xec\xbf\x43\xbd\xda\x19\x3d\xf5\x6a\xdf\xef\x97\xf7"
- "\x6a\x95\x21\x94\xbb\x2a\xfb\x52\xee\xa2\x31\x75\xf4\x6a\xdf\x5b"
- "\x9a\xf7\x6a\x14\x43\x6c\x3d\x65\xbd\x5a\xe5\x58\x47\xaf\xf6\x5d"
- "\x1f\x69\xaf\x76\xfe\x31\x1e\x47\xe7\x0e\x8a\xbd\x5a\xe5\xea\xfb"
- "\xc3\xab\xc9\x62\xab\x56\xec\xd5\xce\xcd\x50\xee\xd5\xce\xad\x51"
- "\xe6\xd5\x10\x73\x52\x5e\xed\xdc\x39\x0e\x3f\x7a\x69\xaf\x76\xae"
- "\x41\xda\xab\x9d\xef\x22\xf6\x6a\x58\xbe\x94\x57\x3b\x3f\x42\x54"
- "\xbe\x83\x57\x3b\xff\x9a\xd8\xab\xd1\xeb\x78\xaf\x76\x9e\xf3\x46"
- "\xdf\x16\x2b\xf7\x6a\xe7\xcf\xc9\x7b\xb5\xf3\x97\xc4\x5e\xed\xfc"
- "\x3e\xea\xc9\x2e\xa8\xa9\x57\x3b\x5f\x44\x8f\x7f\x5b\x24\x3c\xce"
- "\x7b\x35\x7a\x9c\xf7\x6a\x17\x02\x94\x79\x35\xd7\xd7\xcb\xba\xf7"
- "\x63\x8a\xd5\xbf\xb2\x31\xc5\xfa\x62\xf7\x7c\x9a\xbe\xe8\x81\x27"
- "\x68\x0d\x4f\x70\xe1\x59\xaa\xb7\xaa\xe6\xb8\xe7\x09\xaa\x22\xdc"
- "\xf7\x04\x57\xe2\x79\x4f\x70\x25\x5e\xde\x13\xfc\x30\xcc\xb9\x27"
- "\xf8\x51\xc7\x7b\x82\xcb\xbd\x69\xbf\x7a\xb9\x1d\xed\x57\x2f\x1d"
- "\x6d\x39\x4f\x70\x69\x84\xd8\x13\xfc\xb0\xe5\x81\x27\xb8\x1b\x9e"
- "\xe0\xa2\x2f\xc5\xe8\xa5\x0e\xee\x79\x82\x4b\xde\x62\x4f\xf0\x73"
- "\x5f\x47\x4f\x70\x29\xc6\x75\x4f\x70\x69\x8d\x7b\x9e\xe0\x52\xa6"
- "\x6b\x9e\xe0\xd2\x75\x69\x4f\xf0\xc3\x70\x79\x4f\x40\xcf\x39\x6a"
- "\xb9\x1f\xd7\xf0\x5a\xee\xc7\x19\x6d\xdf\x13\xfc\x48\xa4\x75\xdb"
- "\x8f\x1d\xa8\x27\xb8\x64\x68\x79\x4f\x70\xc9\x20\xed\x09\x7e\x4c"
- "\xa2\xfa\xe9\x92\xc1\xd1\x13\xc0\x77\x24\x3d\xc1\x8f\x7b\xed\xbf"
- "\x43\x3d\xc1\x25\x23\xf5\x04\x3f\x16\xcb\x7b\x82\x9a\x28\xca\x5d"
- "\x35\xc3\x28\x77\xd1\x98\x3a\x7a\x82\x9a\x2e\xcd\x7b\x02\x8a\x21"
- "\xb6\x9e\xb2\x9e\xa0\xe6\x35\x47\x4f\xf0\xc3\x50\x69\x4f\x70\x65"
- "\x30\x8f\xa3\x9f\x4e\x89\x3d\x41\xcd\x96\xfb\xc3\x13\xc8\x62\x8b"
- "\x88\x3d\xc1\x4f\xf3\x95\x7b\x82\x9f\xb6\x29\xf3\x04\x88\x39\x29"
- "\x4f\xf0\x13\xf7\xfe\x8f\xe2\xc5\xd1\x13\x5c\xe9\x28\xed\x09\xae"
- "\xf4\x15\x7b\x02\x2c\x5f\xca\x13\x5c\x99\x2a\x2a\xdf\xc1\x13\x5c"
- "\x89\x11\x7b\x02\x7a\x1d\xef\x09\x7e\x56\x53\x0e\xad\xba\xa8\xdc"
- "\x13\x5c\xb9\x2e\xef\x09\xae\x34\x88\x3d\xc1\x15\x4e\xfb\xff\xdc"
- "\x87\x7a\x82\x2b\x7a\x7a\xbc\x4a\x2f\x3c\xce\x7b\x02\x7a\x9c\xf7"
- "\x04\x3f\x3f\xfb\x60\x3d\xad\xfb\x69\x3d\xad\xda\x4b\xee\xf9\x82"
- "\xda\x6a\xf7\xf5\xa7\xb1\x9c\xd7\x9f\xc6\x72\xa1\xfe\x14\xaf\x6b"
- "\x71\x75\xbf\x73\xfd\x59\xd7\x93\xd7\x9f\x86\x24\xca\xe1\x86\x59"
- "\x94\xc3\x0d\xec\xda\x7c\xca\xd6\xd3\xfa\x65\x83\x78\x3d\xad\x6b"
- "\x1d\x1e\xac\xa7\xd5\x5a\xda\xf2\xe7\x71\x54\x5b\xfe\x32\xc7\x3d"
- "\x6d\xf9\x4b\x84\x58\x5b\xde\x5c\xe6\xa8\x2d\x7f\x39\xee\xba\xb6"
- "\xfc\xe5\xaa\x7b\xda\xf2\x97\x5a\xd7\xb4\xa5\x61\x92\xf4\x1a\x16"
- "\x57\x0f\xc8\xaf\xa7\x45\xcf\x39\x6a\x82\xeb\x82\x75\xf5\xaf\xef"
- "\x6f\xfb\xda\xf2\x7a\x98\x74\xff\x7f\x7d\x0e\xd5\x96\x86\x89\x2d"
- "\xaf\x2d\x0d\x13\xa5\xb5\xe5\xf5\x33\xb4\x1f\x36\x04\x3b\xae\x61"
- "\x01\xdf\x91\xd4\x96\x75\xdc\xfa\xf7\x86\x89\x62\x6d\x49\xcb\x00"
- "\x1e\xea\x27\xaf\x2d\xeb\x8e\x52\x5e\xaa\xcb\xa6\xbc\x44\x63\xea"
- "\xa8\x2d\xeb\x62\x9a\xd7\x96\x14\x43\x6c\x3d\x65\xb5\x65\xdd\x17"
- "\x8e\xda\xf2\xea\x3e\x69\x6d\x69\x5c\xcd\xe3\xc8\x38\x50\xac\x2d"
- "\xeb\x2c\xf7\x87\xb6\x94\xc5\x56\x98\x58\x5b\xde\x28\x56\xae\x2d"
- "\x8d\x1e\xca\xb4\x25\x62\x4e\x4a\x5b\x1a\x27\xd9\x63\x4e\xac\x2d"
- "\x8d\x51\xd2\xda\xd2\xb8\x4c\xac\x2d\xb1\x7c\x29\x6d\x69\x2c\x14"
- "\x95\xef\xa0\x2d\x8d\xc7\xc5\xda\x92\x5e\xc7\x6b\xcb\x9b\xd1\x94"
- "\x43\xaf\xce\x52\xae\x2d\x6f\x4e\x92\xd7\x96\x37\x43\xc4\xda\xf2"
- "\xa6\x86\x6a\xc8\x9b\x29\x54\x5b\xde\x1c\x4e\x8f\x5f\x0d\x17\x1e"
- "\xe7\xb5\x25\x3d\xce\x6b\xcb\x9b\x99\xca\xe6\xdf\xb4\x48\xbe\xf9"
- "\x2e\xcd\xbf\x69\xa9\x7c\x73\x5b\x99\x7f\x53\x3f\xc2\x3d\x5d\x59"
- "\x3f\xfc\xc1\xb8\xa0\x96\xce\x35\xdf\xdc\x4a\xb5\x96\xe9\x94\x7b"
- "\xb9\x66\x53\x99\xdb\x5a\xdf\xd3\x83\x34\x69\x7d\x4f\x9c\x4e\x28"
- "\x37\x9f\xa0\x61\x9b\x73\xad\x6f\x1d\xc7\x6b\x7d\x33\x37\xde\xd6"
- "\xbc\x9a\xf6\xa9\xe6\x49\xee\xcc\x27\x58\x55\x47\xbc\x3e\xb4\x9f"
- "\x4f\x50\x7e\x90\xce\x27\x58\x60\x3f\x9f\xe0\xf6\x51\xf1\x7c\x82"
- "\xc6\xbe\x72\xf3\x09\x30\xf7\x7c\xbb\x30\x79\x0c\xce\x25\x90\x9c"
- "\x47\xf0\x7a\xcb\xcf\x23\x40\x9f\xf0\x11\xe0\x16\xbd\x02\xf2\xcd"
- "\xaf\xcb\x2b\xd4\xbf\x4f\xf1\x7b\x7b\x8d\x7b\x5e\xe1\x76\xa6\xc8"
- "\x2b\x78\x7a\x14\x3a\x7a\x85\xdb\x37\x5d\xf7\x0a\xe6\xee\xee\x79"
- "\x05\xb3\xbf\x6b\x5e\xc1\xbc\x44\x7a\x1e\x41\x43\x81\xfc\x3c\x02"
- "\x7a\xce\x51\xe3\x59\xbb\xf3\x1a\xcf\x72\xa9\xed\x7b\x05\xcb\x0a"
- "\x69\x3d\x67\x59\x43\xbd\x82\x39\xbe\xe5\xbd\x82\x39\x5e\xda\x2b"
- "\x58\xdb\x51\x5d\x65\x8e\x77\xcc\x43\xc3\x77\x24\xbd\x82\x75\x98"
- "\xfd\x77\xa8\x57\x30\x27\x52\xaf\x60\x0d\x91\xf7\x0a\xd6\xeb\x94"
- "\xd7\xac\xdc\x1e\x93\x34\xa6\x8e\x5e\xc1\xba\xa1\x79\xaf\x40\x31"
- "\xc4\xd6\x53\xd6\x2b\x58\x2f\x3a\x7a\x85\x86\xad\x92\x5e\xc1\x93"
- "\xec\x6f\xc2\x91\x27\x79\x4d\xec\x15\x98\x7e\xf7\x87\x57\x90\xc5"
- "\xd6\x0a\xb1\x57\x60\x1a\x14\x7b\x05\x4f\x32\x50\x99\x57\x40\xcc"
- "\x49\x78\x05\x4f\xb2\x84\xc3\x4f\xa2\xa4\x57\xf0\x24\xd9\x92\x5e"
- "\xc1\x93\x14\x8a\xbd\x02\x96\x2f\xe1\x15\x3c\xc9\x19\x51\xf9\xf6"
- "\x5e\xc1\x93\xdc\x14\x7b\x05\x7a\x5d\x93\x57\xf0\xf4\xc8\xa1\xfd"
- "\x5f\xc3\x24\xc5\x5e\xc1\xd3\x63\x89\xac\x57\xf0\xf4\x58\x26\xf2"
- "\x0a\x9e\x1e\xec\x7c\x5f\xbd\xa7\xc7\x4e\xd6\x2b\x78\x7a\x44\x52"
- "\xaf\xd0\x30\x51\x78\x9c\xf7\x0a\xf4\x78\x93\x57\x48\xf7\x38\xa0"
- "\x6c\x6c\x8a\xeb\x79\xe8\x7b\x3f\x36\xc5\xfb\xd7\x35\x36\xc5\xd3"
- "\x33\xca\x2d\xaf\xe0\xe9\x19\xe9\xbe\x2e\x7d\x24\x8e\xd7\xa5\x8f"
- "\xc4\xc9\x8e\x81\xf0\xf4\x1a\xe1\x54\x97\x7a\x7a\x1f\x68\xd2\xa5"
- "\x9e\x0f\x3d\xc6\xf2\xb7\xe7\x43\x1e\x2c\x7f\x7b\xb6\x3f\xec\xea"
- "\x18\x88\x55\xb7\x38\x2d\x6a\x1b\x03\xb1\x88\x1b\x03\x01\x7a\x94"
- "\xd5\x9f\x9e\xed\x87\x89\xc6\x40\x78\x7a\x6d\x93\x1b\x03\x21\x39"
- "\xf6\xc1\x4e\x73\xda\xf4\xe9\x9d\x8c\x7d\xf8\x55\x6b\xce\x74\x8f"
- "\x32\x56\x73\x7a\xb6\x6f\xe7\x96\xe6\xf4\x6c\xef\x25\xd6\x9c\x3e"
- "\xbd\x1d\x34\xa7\x67\xfb\x28\x97\x35\xa7\x67\xfb\xd5\x6e\x69\x4e"
- "\xcf\xf6\x69\x2e\x69\x4e\xcf\xf6\x57\x25\xc7\x3e\x78\x7a\x05\xc9"
- "\x8e\x7d\xe0\xce\x39\x6a\x05\x6f\x3e\xaf\xe8\xe9\xfd\x5a\x9b\xd7"
- "\x9c\x9e\x0f\x99\x25\x75\x81\xa7\x77\x3b\x56\x73\x7a\xb6\xaf\x6d"
- "\x71\xcd\x09\x65\x4a\x6a\x4e\x4f\x6f\xda\xff\xc3\x79\x07\xcd\x89"
- "\xdf\x91\xd2\x9c\x9e\xde\x85\xf6\xdf\x69\xa4\xd7\x1b\x58\xcd\xe9"
- "\xe9\x7d\x5c\x56\x73\x7a\x76\x98\x43\x39\xab\xc3\x73\x94\xb3\x68"
- "\x4c\x1d\x34\xa7\x67\x87\x8e\xcd\x6a\x4e\x0e\x43\x6c\x3d\xe5\x34"
- "\xa7\x67\x87\x10\x07\xcd\xe9\xe9\x35\x5c\x5a\x73\x3e\x32\x90\xc7"
- "\xd1\xc3\xc5\x22\xcd\xe9\xd9\x61\xd3\x7d\xa1\x39\x65\xb1\xf5\x90"
- "\x59\xa4\x39\x3d\x1f\x8e\x51\xae\x39\x1f\xde\xa2\x48\x73\xb2\x98"
- "\x93\xd2\x9c\x0f\x5f\xe5\xf0\x63\x90\xd6\x9c\x8f\x74\x90\xd6\x9c"
- "\x8f\xf4\x16\x69\x4e\xb6\x7c\x29\xcd\xf9\xc8\x24\x51\xf9\x0e\x9a"
- "\xf3\x91\x28\x91\xe6\xe4\xae\xe3\x35\xa7\x8f\x0f\xe5\x50\xcf\x4b"
- "\xca\x35\xe7\x23\x57\xe5\x35\xe7\x23\x37\xc5\x9a\xf3\x91\x63\x54"
- "\x5b\xfa\x04\x50\xcd\xf9\x48\x25\x3d\xee\x59\x2d\x3c\xde\xa4\x39"
- "\xb9\xe3\xbc\xe6\xf4\x09\x74\xa6\x39\x99\xac\x31\x9a\x4c\x95\x75"
- "\x0f\xfc\xed\x83\x7a\x76\x87\xfe\x4d\x07\xff\x3f\x06\xfd\x54\x17"
- "\xf8\xbf\x6c\x8e\xcd\xe0\x37\x46\x63\x05\x5d\x62\x85\xdf\x29\x35"
- "\xfc\xa2\xd3\xf5\x30\x63\x7f\xb2\x87\xf6\x2f\x63\x34\x9d\xcd\x0f"
- "\x8d\xb3\x32\x91\x84\xf1\x85\xff\xc7\xc3\x31\xb8\xbe\x13\xf4\x87"
- "\x01\x8b\x48\xa7\x6b\x9e\x3e\x65\xb6\xeb\xa0\xce\x9d\xaa\x3c\x7d"
- "\x56\x63\x19\x50\xd7\x4a\xb8\x9f\xe1\xb2\x75\x85\xb2\xa6\x6c\xef"
- "\x45\x92\xcc\xcc\x8f\xba\x79\x75\xa4\xda\xb3\x63\xdf\xce\xb5\x0f"
- "\x8d\x03\x1e\x22\xa8\x11\xf7\xf4\x30\x78\x61\x99\xba\x79\x8d\x78"
- "\xce\x1b\xcf\x59\xa0\x8e\xda\x18\xa2\x4a\xaf\x7b\xc8\x1b\x34\x57"
- "\xbb\x64\x23\x53\xf3\x8e\x19\xea\x0c\xfd\xeb\x57\xbd\x2a\xbc\x76"
- "\x6f\xac\x60\xfb\x9e\x12\xa3\x85\x2d\x23\x60\x1e\xd6\xa7\x63\xbf"
- "\xcd\x70\xbd\x54\x1d\x96\xef\x22\x03\xda\xf5\x63\xf4\xca\xfa\xbb"
- "\x8e\x89\x72\xed\xd8\x79\x59\x2f\xa2\xeb\x0f\x6d\x17\x40\x54\x52"
- "\xe7\x15\xfe\x8e\xb3\xf1\x0f\xde\xeb\xba\x31\xc6\xe4\x0d\x44\x95"
- "\x61\x7d\xc8\xfb\x6b\xa8\x51\xde\x7a\xc6\x50\x9f\xde\x29\x58\xef"
- "\x61\x8e\xc4\x36\x7f\x0f\xce\x67\x74\x63\x0c\x37\x52\x11\x37\x9d"
- "\x22\x0f\x43\xdf\x6e\x1f\x8b\x05\x11\x31\xb3\x02\xe2\xa2\x62\xe6"
- "\xbc\xb3\x30\x2e\xa0\x6f\xc4\xc3\x64\xda\x3b\xef\x04\xc4\xcc\x9a"
- "\xb7\x24\x40\x78\xe6\xf9\x80\x88\xa8\x77\x67\xcd\x8e\x9e\x33\x30"
- "\xe6\xcd\xd8\x87\x31\xc1\x2a\xa8\x87\x2f\xd6\xc5\x9a\xde\x29\x6e"
- "\xf3\x5a\x42\xd6\x75\x25\x5e\x58\x2f\xf8\xbd\x0a\xbd\x57\x58\x2d"
- "\xfe\x5e\xfa\x7a\xc6\xa8\x82\x6b\x92\x81\xd3\x32\xb4\x0f\xc1\xb5"
- "\x1d\xab\xf3\xa0\x5e\x9b\xa1\xde\x50\x47\xa8\x73\x67\x2f\x5b\x9d"
- "\x6d\x98\x48\x46\x4c\x68\xeb\x00\x83\x9d\xfb\x76\x36\x3d\xf4\x12"
- "\xc3\x84\xe2\xfd\x19\xe1\x59\xf1\x80\x63\x07\x59\xdf\x90\x3d\x46"
- "\x03\xdf\x0d\xb2\x61\xcc\x9a\x95\xa6\x63\xd6\x8f\x36\x80\xae\xf4"
- "\xa8\x67\x22\xff\x13\xb0\x89\xdf\x5f\x3d\x88\x90\x14\xa6\x3e\x94"
- "\xdd\x1b\x83\xa9\x07\x0c\x53\x9c\xc2\x39\x75\xf8\x0d\x15\xf9\x23"
- "\x94\xf1\xbe\x9e\xec\x8c\xc6\x32\xf4\x70\x0c\xdb\xdc\x9a\xbf\x23"
- "\x38\x44\x43\x52\x7e\x97\x42\x52\xea\xf1\x3b\x5b\xa3\x35\x9d\xe3"
- "\x88\xc7\x94\x78\xe6\x02\xf0\x8e\x07\xd3\x7b\x47\x30\xb3\x2d\x5a"
- "\xa3\xf7\xec\x1c\x69\xcd\x4e\xd3\xc1\xfd\xd4\x42\x39\x45\x7a\x8f"
- "\x21\x3e\x58\x4e\xc6\x7a\xb6\xed\x6b\xf1\xde\xa1\x7d\xc0\xff\x30"
- "\x3a\x26\x95\x7b\x86\x32\xc3\x35\xd6\xcc\xbd\x7b\x4a\xbd\x6e\x91"
- "\x29\x66\xe6\x36\xb3\x26\x5c\x53\x62\x34\x02\xa7\xc5\xbe\xc9\x74"
- "\xea\xb4\xbc\xb3\x39\x6a\x4e\x5e\x57\x78\x16\xd7\xec\xdd\xc3\xac"
- "\x49\x08\x08\xe9\x47\xd4\xf5\xe9\x6a\x8d\xad\x3d\xa1\x2d\xbd\x94"
- "\xe1\x48\x3d\x00\xef\x09\xf1\x00\xf5\xe1\xf0\xa0\x8e\x3f\x1c\xe7"
- "\x88\x87\xa6\x67\x73\x7d\x62\xa0\x99\x09\x7d\xe9\x76\x56\x62\x24"
- "\xe3\x9b\x38\x4d\x7b\x89\xb4\xc7\xb6\x2d\x01\x2f\x90\xbe\x88\xf8"
- "\xaf\x9e\x49\x02\xde\x58\xa2\x26\x86\xec\xc4\xe0\xce\xcb\x52\x3c"
- "\xa0\x4d\x54\xc0\x2f\x81\xc0\x99\x81\xb7\xbb\xa5\xe9\x12\xe7\x10"
- "\x55\x61\xd5\x1e\x15\xea\x67\x1c\xb7\x72\xd9\xb3\xcb\xb0\xcd\xf0"
- "\x3d\xe6\x97\x50\x82\xf1\x60\x63\xf1\x4b\x24\x99\x04\xac\x8c\xef"
- "\x53\xe0\x7c\xcc\x26\x28\x53\xd9\x7d\x75\x61\xf5\xaf\x05\x62\x35"
- "\x08\xe2\x54\x5a\x6d\x61\xcb\x64\x63\x15\xcd\xc7\xea\x20\xd4\x83"
- "\x8f\x97\xda\x88\x71\x95\xb9\xe7\x3d\xdc\x3d\xd7\xc0\x3d\x97\x3b"
- "\xb9\xe7\x32\x7a\xcf\xed\xea\x9c\xdf\x73\xd7\x81\xce\xef\xb9\xeb"
- "\x2c\x37\xee\xd9\xa4\xfc\x9e\xbb\xd4\xc8\xdf\x73\x12\x17\xe7\x24"
- "\x88\x73\x92\x93\x38\x27\x71\x71\x7e\xa4\xca\xf9\x3d\x3f\xda\xdb"
- "\xf9\x3d\x3f\x1a\xa2\xfc\x9e\xbb\xd6\x2a\xbf\xe7\xae\x95\x4e\xee"
- "\x99\x8b\x73\x12\xc4\x39\xc9\x49\x9c\x93\xb8\x38\x77\xf9\xc6\xf9"
- "\x3d\xfb\xfa\x39\xbf\x67\xdf\xf1\xca\xef\xf9\x51\xbd\xf2\x7b\x7e"
- "\xb4\x4c\xfe\x9e\xb5\x5c\x9c\xb5\x10\x67\xad\x93\x38\x6b\xb9\x38"
- "\x0f\x59\xe5\xfc\x9e\xfd\x3a\x38\xbf\x67\xbf\x11\xca\xef\xd9\xb7"
- "\x5c\xf9\x3d\xfb\x1e\x71\x72\xcf\x5c\x9c\xb5\x10\x67\xad\x93\x38"
- "\x6b\xb9\x38\x4f\x1f\xd5\xcc\x3d\x5b\x9c\xdf\x73\xb7\xc1\xca\xef"
- "\xd9\xef\x98\xf2\x7b\xf6\xdb\x27\x77\xcf\x8d\xc0\xdb\x3e\x70\x2f"
- "\xb7\xbf\x0b\x7d\xc9\xe2\x9b\x18\xe6\x53\x4d\x54\xb9\xa9\xd6\xc8"
- "\xce\x35\xa4\x03\xdc\x5b\x24\xb3\x3e\x23\x13\xff\xb5\xfa\x26\x86"
- "\x36\xfa\x26\x46\x36\x74\x1b\x6d\x58\x3a\x83\xb4\x47\x3d\xbe\xd2"
- "\x4a\xfc\xad\x59\x89\xd3\xd2\x5e\x21\x01\xc9\x06\xa2\x2e\xd1\xea"
- "\x89\x36\x96\x31\x94\x90\x8b\xa4\x63\x0d\x7a\xcf\xb3\xa4\xa8\xf6"
- "\x18\x99\xb7\x80\x61\x2e\x7b\xfe\x26\x09\xf3\x26\xa0\x93\x53\x32"
- "\xbf\x25\x01\xf0\x1b\x81\x9b\xe1\x0f\xcb\xe9\x3c\x11\xfa\xcf\xf5"
- "\x19\x6b\xf3\xb4\xc4\xff\xd0\xdc\x1a\x82\xc7\x37\xc1\x9f\x65\x7d"
- "\x9a\x4e\x3b\x83\xa8\x76\xd5\x55\xa8\x68\xdf\xfc\x9b\xf1\xf6\x7d"
- "\xf3\xc4\x59\xd0\x96\xb3\xd9\x73\xd9\xb9\xaf\x28\x6d\xcb\xdf\xf8"
- "\xda\xfa\x6e\xb6\x2d\x2b\x2d\xb4\xbf\xb7\xeb\xbb\x0f\xc1\xef\xf3"
- "\x6d\xf9\x1b\x2f\x6c\x4b\x26\x2b\x31\xb6\xb4\xa6\x11\x7d\x93\xfa"
- "\x72\x3c\x51\xe9\x3d\xbb\x7d\x5e\x12\x5b\x47\x64\xda\x78\x8f\xa0"
- "\x8d\x2b\x7d\xaa\xdb\xd5\xc9\xb4\x71\x05\xb4\x71\x8d\x44\x1b\x97"
- "\xbb\xd6\xc6\xfe\x17\xef\xbc\x8d\xfd\x0b\xe5\xdb\xd8\xbf\x41\x79"
- "\x1b\xfb\xc7\x2b\x6f\x63\xff\x48\xae\x8d\x0d\xe2\x36\xf6\xf7\x97"
- "\x6f\xe3\x24\x01\x8e\x93\x00\xc7\x8f\x54\x49\xb7\x71\x12\xe0\x38"
- "\x49\x02\xc7\x49\x2e\xe2\xb8\xc7\xd8\x3b\x6f\xe3\x1e\x5d\xe4\xdb"
- "\xb8\xc7\x0c\xe5\x6d\xdc\xbd\x52\x79\x1b\x77\x2f\xa2\x6d\x9c\x64"
- "\x87\xe3\xee\x89\x4e\xda\x58\x80\xe3\x24\xc0\x71\x97\x6f\x64\xda"
- "\x18\x70\x9c\x24\x81\xe3\x24\x17\x71\xfc\xdb\xed\x77\xde\xc6\xbf"
- "\x5d\x28\xdf\xc6\xbf\x3d\xac\xbc\x8d\x7f\x1b\xa4\xbc\x8d\x7f\x1b"
- "\xc8\xb5\xb1\x1d\x8e\x7b\xe8\xe5\xdb\x58\x2b\xc0\xb1\x16\x70\x3c"
- "\x64\x95\x74\x1b\x6b\x01\xc7\x5a\x09\x1c\x6b\x5d\xc4\xf1\x63\x1d"
- "\xef\xbc\x8d\x7b\x9e\x91\x6f\xe3\xc7\xfa\x2a\x6f\xe3\x9e\x5b\x95"
- "\xb7\x71\xcf\x2c\xda\xc6\x5a\x3b\x1c\xf7\x1c\xe3\xa4\x8d\x05\x38"
- "\xd6\x02\x8e\xa7\x8f\x92\x69\x63\xc0\xb1\x56\x02\xc7\x5a\x17\x71"
- "\xdc\x6b\xfe\x9d\xb7\x71\xaf\x11\xf2\x6d\xdc\x6b\xa5\xf2\x36\xee"
- "\xe5\xad\xbc\x8d\x1f\x33\x71\x6d\x6c\x87\xe3\xc7\x0a\xe4\xda\xf8"
- "\x36\x78\xc0\x8e\xd0\xc6\x1d\x6b\x89\x6a\x13\xb6\x6d\x05\x6d\x5b"
- "\x4b\xb7\x8c\xcc\x4d\x2a\x6b\x24\xb6\x09\x9b\x03\xfa\xd9\xbf\x93"
- "\x25\x2b\x31\x8c\x51\xc1\x3d\x69\x31\xef\xda\xeb\xba\x39\x95\x74"
- "\x0a\xd0\x62\xfe\x37\x80\x1d\x1f\x1b\xa0\xfd\xe0\x1c\xfc\x9e\x27"
- "\xe6\xbd\xcc\xd9\xa3\xca\x2c\x7e\x29\xf9\x70\xae\x1f\xd3\x77\x5e"
- "\x10\x78\xaf\x58\xe6\x6d\x7f\xdf\xd2\xda\x3d\xd0\x3e\x27\x48\x49"
- "\xc5\x97\xc4\xda\x2d\x63\xed\x20\x33\xd1\x30\x3f\x6b\x7c\x8b\xe2"
- "\xf4\xc4\xf2\xa6\xbf\x4f\x69\xfc\x31\x52\x1a\xff\x19\x99\x52\xc3"
- "\xdc\x62\x7e\xd0\xf8\xdc\xf6\xcb\xae\xb0\xf8\x65\xc4\x5a\xb2\xf3"
- "\x22\xcd\x7e\xd9\xc7\x0a\x17\xe9\x55\x3e\x26\xa2\x89\xae\x66\x98"
- "\xf4\xd9\xc4\x2b\xbd\x8a\x78\x67\xcc\x26\x3e\x19\x55\x44\x5d\x54"
- "\x5d\x41\x8a\xaf\x1c\x23\xc5\x75\x67\x48\xf1\x2d\xf8\x6b\x84\x3f"
- "\x2b\xfc\xa5\x9c\x81\x58\x13\x32\xe9\x2a\xc1\x7d\x45\x0d\x4f\x57"
- "\x12\xdf\x22\x73\x05\xc1\x39\xbd\xd7\x3c\x1f\x3f\xea\x13\x4e\x7c"
- "\x99\x1f\xfc\x09\xf3\xa6\xbf\x0a\xce\x79\xe1\xf1\x52\xb3\x81\x14"
- "\x55\x9b\xf0\xfc\x56\x38\xef\x95\x5c\x0d\xe5\x5b\x8f\xe1\xbe\xa1"
- "\x86\xa2\x94\xe3\xc4\xbc\xa6\x4e\xc7\xa0\x87\xee\x96\x18\x98\x09"
- "\x4d\x6d\x65\xfc\x9f\xa0\x38\x08\x38\xb7\xd9\xaa\x34\xd6\x8f\xd3"
- "\xf5\x6f\xde\xf6\xef\x0a\xed\xdc\xc3\xfa\x76\xa8\x7a\xf2\x99\x0b"
- "\x0c\x8e\xf1\xc3\x5c\x42\x89\xf1\x04\xc1\x77\x4d\x53\x96\x10\x32"
- "\xd1\x42\x08\xb6\x45\x69\x7c\x0d\x99\x1c\x4b\x3a\x63\xfe\xd9\xfa"
- "\xb3\xa6\x6b\x69\xb5\x81\x24\x99\xa1\x8e\xd7\x4c\x4d\x75\x2c\x79"
- "\xbf\x84\xc0\xb9\x1e\x25\x91\x7a\xe2\x13\x4b\xd4\xd8\xbe\xe6\xac"
- "\xc4\xd0\xc9\xf0\xfc\xcc\x33\x32\x0c\xb6\x2d\xb6\x29\xb6\x2f\x96"
- "\x67\x6b\xf3\xd2\x08\x03\x49\x36\x11\x75\xa9\x16\xfe\x8d\x67\x0c"
- "\xa5\xe4\x3a\x81\x3a\x56\x30\x5d\xea\x74\x80\x8b\x2c\xc4\x02\xe0"
- "\xb3\x06\xe2\xdf\x55\x06\x53\xe5\x14\x53\xed\xea\x5c\xc0\x54\x25"
- "\x8f\xa9\xde\x63\x79\x4c\x3d\xd9\x5b\x1e\x53\x4f\x24\x71\x98\x32"
- "\xb4\x4d\x4c\x3d\xd1\xdd\x39\xa6\x7a\x9b\x9c\x60\xaa\x06\x30\xb5"
- "\x47\x8c\xa9\x27\x07\x2b\xc7\xd4\x13\xe3\xee\x22\xa6\x2a\xdc\xc3"
- "\xd4\x13\x03\xc4\x98\xea\x3d\x5c\x1e\x53\x49\x1c\x4f\x3d\x52\xd5"
- "\x3c\xa6\x92\x04\x3c\xf5\xe4\x06\x1e\x53\x7d\x17\xca\x63\xaa\xcf"
- "\x29\x8a\xa9\xa4\x36\xca\x53\x7d\x62\x9c\x63\xaa\xcf\x44\x79\x4c"
- "\x25\x01\x4f\x25\xd9\xf1\x54\xdf\xe5\xca\x31\xd5\x27\xf7\xee\x61"
- "\x2a\xc9\x4d\x9e\xea\x93\x22\xc6\xd4\x93\x99\x4e\x30\xc5\xf1\x54"
- "\x97\x6f\x5c\xc0\x94\x80\xa7\xfa\x5e\xe5\x31\xf5\xbb\xe3\xf2\x98"
- "\xfa\x5d\x5f\x0e\x53\x6d\x94\xa7\x9e\x3a\xec\x1c\x53\x4f\xe5\x3b"
- "\xc1\x14\xf0\x54\x92\x1d\x4f\xfd\xee\x8c\x72\x4c\x3d\x65\xb8\x8b"
- "\x98\x72\x93\xa7\x9e\x2a\x17\x63\xaa\x6f\xb5\x3c\xa6\xb4\x1c\x4f"
- "\x0d\x59\xd5\x3c\xa6\xb4\x02\x9e\xd2\x8c\xe4\x31\xd5\xff\x31\x79"
- "\x4c\xf5\x5b\x42\x31\xa5\x6d\xa3\x3c\xd5\xcf\xcf\x39\xa6\x34\x46"
- "\x79\x4c\x69\x81\xa7\xb4\x76\x3c\xd5\x7f\xa0\x72\x4c\xf5\x1b\x73"
- "\xf7\x30\xa5\x75\x93\xa7\xfa\x69\xc4\x98\xd2\x0c\x75\x82\x29\x8e"
- "\xa7\xa6\x8f\x72\x01\x53\x02\x9e\xea\x9f\xcd\x63\x6a\xc0\x7c\x79"
- "\x4c\x3d\x5d\xcc\x61\xaa\x8d\xf2\xd4\xd3\x51\xce\x31\xf5\xf4\x38"
- "\x27\x98\x02\x9e\xd2\xda\xf1\xd4\x80\x65\xca\x31\xf5\x74\xce\x5d"
- "\xc4\x94\x9b\x3c\xf5\x74\xa2\x18\x53\xfd\xd3\xe4\x30\xd5\x88\xbe"
- "\xcf\x03\x30\x15\x09\xbe\x0f\x30\xd4\xb9\x8c\x62\xea\x36\x60\xea"
- "\x23\x21\xa6\xbe\xb7\xf7\x7d\x03\x7e\xb2\x36\x61\xea\x99\x9b\xf6"
- "\x98\xb2\x02\xa6\x6e\xb3\x98\x7a\xa6\xa3\xcd\xf7\x95\xd6\xe6\x43"
- "\xac\xae\x90\xd2\x60\xc0\xd3\x7a\x0e\x4f\xdf\x03\x9e\xe0\x7e\xac"
- "\x70\xbf\x45\x95\x15\x64\x8a\x81\xde\x57\x23\xdc\xaf\x55\x88\xa5"
- "\xc6\x1a\x15\x62\x08\xb1\x63\xc3\x51\xf1\x3c\xc0\xcf\x82\x53\xa4"
- "\x78\x11\xfc\x25\xc0\x9f\x16\xfe\xc8\x29\x52\x54\x43\xd8\x9c\x3d"
- "\x8f\x9f\x32\x0e\x3f\x03\xb7\x3b\xc7\xcf\xc0\x15\xca\x3c\xde\xa0"
- "\x76\xca\xf1\x33\xb0\x82\x1b\x4b\xa7\x9e\x32\xf5\x02\x83\xe3\x66"
- "\x29\x46\xae\x90\x29\x66\xd2\x99\x99\xae\xe9\xea\x13\x4a\xd4\x4b"
- "\x2d\x44\xb5\x7a\x36\x51\xaf\x3e\x0b\xf7\x6b\x7b\x76\xaa\x88\xcf"
- "\x09\xd3\x97\xa4\xa8\xae\x82\x14\xdd\x3a\x4e\x8a\xac\xf0\x77\x05"
- "\xfe\xa0\x8e\x53\xe6\x08\xef\xd7\xc0\xdd\xef\x33\x1b\xa0\xac\x3e"
- "\xf2\xf7\xfb\x4c\x3c\x7b\xbf\x11\x70\xbf\x8d\xfc\xfd\x96\x02\x16"
- "\x21\x2e\x3d\xac\x9c\x4f\x9c\x62\x20\x1d\xde\x31\x33\x4c\x23\x87"
- "\x41\x8c\xcb\x89\x72\x13\x99\x12\x0b\xb1\x7a\x13\x30\x58\x5d\x40"
- "\x92\x13\x01\x83\x8d\x26\x7c\xaf\x6f\x28\x4d\x69\x00\x0c\x0e\x3c"
- "\xc0\x40\xbb\xdd\x46\x0c\x7e\x8f\x18\x1c\xa0\xb7\xca\x63\xb0\x9c"
- "\x62\x10\x7c\x62\xf3\x18\x14\xf0\xda\xa0\x18\x1e\x83\x83\x97\xc8"
- "\x63\x30\x70\x8d\xcd\x27\xde\x7b\x0c\x06\x0e\x74\x8e\xc1\x40\x1f"
- "\x65\x9e\x70\xf0\x4a\xe5\x18\x0c\x0c\xbb\x7b\x18\x1c\xfc\x98\x73"
- "\x0c\x06\x9a\x5d\xc0\x60\x85\x7b\x18\x0c\x0c\x12\x63\x70\x50\x84"
- "\x3c\x06\x93\x38\x1e\x04\x5f\xd9\x2c\x06\x85\xbe\x72\xf0\x75\x1e"
- "\x83\xff\x61\x91\xc7\xe0\x7f\xf8\xd9\x7c\xe5\xbd\xc7\xe0\xef\xf7"
- "\x3a\xc7\xe0\xef\x33\x95\x79\xc8\x67\x3b\x2a\xc7\xe0\xef\xf5\x77"
- "\x0f\x83\xff\xb1\xc5\x39\x06\xff\x23\xa5\x79\x0c\x26\xb9\xc9\x83"
- "\xbf\x3f\x22\xc6\xe0\xe0\x1a\x27\x18\xe4\x78\x10\x7c\x68\xf3\x18"
- "\x14\xf0\xe0\xb3\x0b\x79\x0c\x0e\x59\x26\x8f\xc1\xe7\x36\xd8\x7c"
- "\xe8\xbd\xc7\xe0\x73\xcf\x39\xc7\xe0\x73\xbe\xca\x3c\xe7\x90\x35"
- "\xca\x31\xf8\x5c\xc4\xdd\xc3\xe0\x90\xbe\xce\x31\x38\xc4\xcb\x05"
- "\x0c\xba\xc9\x83\xcf\x8d\x13\x63\xf0\xd9\x68\x79\x0c\x6a\x39\x1e"
- "\x04\xdf\xda\x2c\x06\x85\xbe\x75\x48\x03\x8f\xc1\x61\xed\xe4\x31"
- "\x38\xf4\x31\x9b\x6f\xbd\xf7\x18\xfc\xc3\x7e\xe7\x18\xfc\x43\x8e"
- "\x32\x8f\x3a\xcc\x4f\x39\x06\xff\x50\x73\xf7\x30\x38\x74\xbb\x73"
- "\x0c\x0e\x5d\xd1\x3c\x06\xb5\x6e\xf2\xe0\x1f\x8a\xc4\x18\x1c\x62"
- "\x70\x82\x41\x8e\x07\xc1\xe7\x36\x8f\x41\x01\x0f\x0e\x4b\xe2\x31"
- "\xf8\xc2\x4a\x79\x0c\x3e\xbf\xc5\xe6\x73\xef\x3d\x06\x9f\x1f\xe1"
- "\x1c\x83\xcf\xf7\x54\xe6\x69\x5f\xd8\xa0\x1c\x83\xcf\x47\xdf\x3d"
- "\x0c\xbe\x30\xd0\x39\x06\x5f\xf0\x71\x01\x83\x6e\xf2\xe0\xf3\xc1"
- "\x62\x0c\x0e\x8b\x93\xc3\xa0\x15\x7c\xf1\xed\xad\xf3\x82\xac\x59"
- "\xd9\x15\x9d\x3d\x02\x88\xd9\x37\x25\xbf\x34\xce\x48\x26\xdf\x84"
- "\xf6\x89\xbd\x49\x66\xde\x54\x13\x4b\x56\xf6\x31\xd0\xe4\xa1\x02"
- "\xff\xcc\x8e\x2d\x33\x67\xd6\xe9\x32\xe6\x11\x2f\xf0\xdf\x6b\xf1"
- "\x58\xe9\x65\x13\xc1\xdf\x4f\xc2\xfa\x5c\xe1\xeb\x83\x79\x02\xe6"
- "\x17\x8d\x9a\x7d\xc7\xdc\xa8\x27\xd5\xc3\x89\x67\x51\xb5\x1e\xda"
- "\x21\x81\x8d\x2f\xb6\xcb\x65\xcf\xe1\xd1\x79\xd7\x88\x97\xf9\x07"
- "\xff\x1e\xd0\xde\xbe\x1d\x17\x13\x8f\x9e\xd5\x8c\x15\xdb\x15\xdb"
- "\x0b\xdb\x38\x20\x01\xdf\x5d\x0f\x3f\x58\x02\x18\x33\xff\xa0\xe9"
- "\xb1\x19\xae\x93\xf6\xab\xc3\x8f\x2a\xc7\xc6\xf0\x15\x74\xde\xc2"
- "\xf0\x88\xa2\x4a\x22\xf9\xee\x18\xda\xaa\xdc\xc5\xb6\xaa\x10\xf8"
- "\xbc\x56\x68\xab\x11\x39\xae\xb5\xd5\x88\x9f\xec\xda\x4a\xc2\x57"
- "\x8d\xb8\xae\xbc\xad\x46\x7c\x4e\xdb\x6a\x44\xa6\x7c\x5b\x25\xb9"
- "\x88\xab\xa4\x50\x81\x1f\x69\x85\xb6\xfa\xcf\x23\xae\xb5\xd5\x1f"
- "\xfd\xc4\x6d\x25\xa5\xff\xff\xf8\x98\xf2\xb6\xfa\x4f\x3d\x6d\xab"
- "\xff\x3c\xe0\xa4\xad\x5c\xc4\x55\x52\x85\x40\x37\xb7\x42\x5b\xfd"
- "\xd1\xe0\x5a\x5b\x05\x8d\xb4\x6b\x2b\x09\x9d\x1a\x34\x5e\x79\x5b"
- "\x05\xd1\xfd\xf0\x3c\xff\x58\x23\xdf\x56\x5a\x17\x71\xa5\x0d\x15"
- "\xe8\xbb\x56\x68\xab\x91\x3d\x5d\x6b\xab\x91\x31\xe2\xb6\x92\xd2"
- "\x53\x23\x17\x2a\x6f\xab\x91\x43\x69\x5b\x8d\xf4\x75\xd2\x56\x2e"
- "\xe2\x4a\x5b\x21\xd0\x21\xad\xd0\x56\xa3\xc6\xb9\xd6\x56\xa3\x36"
- "\xd8\xb5\x95\x44\xbf\x3f\x6a\x8b\xf2\xb6\x1a\x15\x41\xdb\x6a\x54"
- "\x90\x5c\x5b\x59\xb2\x12\xa7\x75\x86\x36\x68\x58\x9f\x18\xd8\x39"
- "\x9e\xa8\x1a\xfb\x40\xbb\xf9\x42\xbb\x2d\x0b\x20\xb7\xb3\xa0\xdd"
- "\x0c\x66\x32\x79\xfe\x05\xa6\xa4\xd6\x42\x1a\xa1\xcd\x1a\x7c\x13"
- "\x43\x4b\x0d\x35\x38\xe6\xe8\x85\x2a\xcf\x31\xcb\xa6\xcf\x57\x13"
- "\x6c\x37\x6c\x07\x6c\x3b\x06\xda\x8d\x6d\x47\xdf\xbc\x48\x8b\x6f"
- "\x46\xec\xa4\xab\x17\x98\x77\xf4\x0c\x83\xf7\xcb\xf8\x8e\x2a\xc3"
- "\xf7\x02\x53\x6a\x48\x87\x80\x57\xf0\x9e\xc6\x0c\xc6\xe3\xa5\x86"
- "\x0a\xd0\x07\x75\x84\xd5\x66\x17\x34\xbe\x96\x57\x35\x3e\x96\xd2"
- "\xd0\x97\x98\x6e\xa3\x0d\xe6\x6e\x69\xba\xe4\xab\xa4\x3d\xea\x87"
- "\x74\x2b\xf1\x4f\x8a\x21\xaa\x5d\x73\x75\x2a\x76\xee\xda\x02\x2c"
- "\x63\xb4\x05\xda\xc5\x9f\xb9\x21\x18\xd3\x7d\x23\x92\x94\x5e\xce"
- "\x64\xe3\x66\xaf\x11\xd8\xb8\x7d\xa7\x51\x83\xce\x0c\x64\x7c\x13"
- "\x23\x33\x4b\x48\x00\x73\x1b\xda\x98\x9d\x4f\x34\xe6\xa7\xbc\x46"
- "\xa5\x6d\x3c\x9a\x1d\xff\x6d\x0d\xe0\xc6\x6f\x41\x3b\xe1\xef\xb3"
- "\xe3\xb7\x62\x05\xe3\xb7\xa0\xce\xfc\xf8\xad\xd1\x69\x38\x7e\xcb"
- "\x7a\xc1\xbf\x87\xed\xde\xdf\x89\x66\x18\xb8\xf7\xae\x25\x46\x03"
- "\xc1\xfb\x2f\x31\xea\x48\x72\x1c\x51\x97\x34\xd6\x10\xad\x91\x31"
- "\x94\xa4\xfc\x44\xa6\xdc\x44\x1d\x8c\x78\x19\xb3\x84\xc6\x75\xf4"
- "\x44\xeb\x05\x4d\x0f\xbd\xe7\x98\xd8\x92\x32\x42\x04\xf3\x78\x22"
- "\x41\x33\x7b\x43\x1c\x22\x4b\x53\xaa\x08\xc4\xc4\x50\x6a\x3e\x8b"
- "\x71\x8a\x84\xf3\xc3\x9b\xf4\x75\xb7\x8c\x3a\x3c\x86\x31\xc3\xf7"
- "\x4d\xb8\x76\x40\x9e\x40\x7f\x23\x2e\x3a\xc7\xa7\x90\xd2\xf8\x46"
- "\x52\x62\xc6\x39\xbb\xa3\x4c\x27\x43\x2b\xe4\x70\x54\xce\xe1\x68"
- "\x4f\xe7\xf8\x76\x75\x2e\xe0\xa8\x82\xc7\xd1\x8b\xc7\xef\x0c\x47"
- "\x2f\x2e\xb9\x73\x1c\xbd\x38\xf6\x0e\x70\x54\x23\xc6\xd1\x4b\x83"
- "\x95\xe3\xe8\x45\xb5\x72\x1c\x8d\x2d\xbf\x33\x1c\xbd\x78\x98\xe2"
- "\x68\x6c\x16\xc5\xd1\x8b\xfb\x78\x1c\xb1\x73\xa3\x5a\x09\x47\x63"
- "\x83\xe4\x71\x94\xc4\xf1\x51\x12\xf0\xd1\x23\x55\xcd\xe3\x28\x49"
- "\xc0\x47\xe3\xbb\xdc\x19\x8e\xc6\x1d\xbe\x73\x1c\x8d\x5b\xed\x3e"
- "\x8e\x92\xec\xf8\x68\xfc\x12\xe5\x38\x1a\x17\xaa\x1c\x47\xe3\x7a"
- "\xde\x19\x8e\xc6\x77\xa0\x38\x7a\xa9\x92\xe2\x68\x3c\xe1\x71\xc4"
- "\xce\x37\x6b\x25\x1c\xbd\xb4\xc2\x09\x8e\x38\x3e\x4a\x02\x3e\xea"
- "\xf2\x8d\x0b\x38\x12\xf0\xd1\xcb\xaf\xdd\x19\x8e\x5e\xee\x70\xe7"
- "\x38\x9a\x70\xfa\x0e\x70\x64\xc7\x47\x2f\x1f\x56\x8e\xa3\x09\xf9"
- "\xca\x71\x34\x21\xe2\xce\x70\xf4\xf2\x54\x8a\xa3\x09\x7d\x28\x8e"
- "\x5e\x1e\xc7\xe3\x88\x9d\xc3\xd7\x4a\x38\x1a\x5f\x26\x8f\x23\x2d"
- "\xc7\x47\x5a\xe0\xa3\x21\xab\x9a\xc7\x91\x56\xc0\x47\x93\xb6\xdc"
- "\x19\x8e\x26\x4d\xbd\x73\x1c\x4d\x7a\xcc\x7d\x1c\x69\xed\xf8\x68"
- "\x72\x07\xe5\x38\x9a\x58\xa3\x1c\x47\x13\x77\xde\x19\x8e\x26\x6d"
- "\xa0\x38\x9a\x18\x4d\x71\x34\x29\x93\xc7\x11\x3b\x2f\xb2\x95\x70"
- "\x34\xd1\xdf\x09\x8e\x38\x3e\xd2\x02\x1f\x4d\x1f\xe5\x02\x8e\x04"
- "\x7c\x34\xe5\xa7\x3b\xc3\xd1\x94\x0d\x77\x8e\xa3\x29\x73\xee\x00"
- "\x47\x76\x7c\x14\x3c\x55\x39\x8e\xa6\x04\x2a\xc7\xd1\x64\xe3\x9d"
- "\xe1\x68\xca\x45\x8a\xa3\xc9\x9f\x53\x1c\x4d\xa9\xe0\x71\xc4\xce"
- "\x35\x6d\x25\x1c\x4d\x0e\x97\xc3\x11\xae\x45\xb0\x8e\xae\x0b\x61"
- "\xcc\x48\x20\x43\xf3\xf0\xdf\x46\x12\x58\x9f\x1e\xbc\xe2\x70\x22"
- "\x5d\x0f\x40\xef\x19\xcc\xe6\x7b\xa5\xbe\xff\xc8\x76\x88\x8b\x6f"
- "\x62\xf0\x94\x73\x74\x8d\x06\x5c\x17\xe4\x46\x72\x24\x19\xc4\xae"
- "\xcb\x30\x55\x87\xeb\x58\x35\xad\x1d\xe0\x2b\xb3\x76\xc0\xeb\xf2"
- "\x6b\x07\x34\xae\xb7\xcd\xbb\x2d\x10\xcc\xbb\x9d\xba\xda\xf9\xbc"
- "\xdb\xa9\x0b\x37\xbd\xae\x14\x0f\x53\x83\xf0\x1e\x6f\x74\x4b\x84"
- "\x7b\x9f\xfa\x3e\xdc\x73\x18\xbd\x77\x00\xbc\x4b\xf3\x71\x0b\x04"
- "\x38\x99\x1a\x18\x12\x46\x52\x98\x74\xf5\xfb\x8c\x5f\x62\x30\x93"
- "\x9d\x18\xae\xb0\x2e\xff\xbf\xbd\xef\x01\x88\xaa\xca\xfe\xbf\x33"
- "\x0c\x45\x86\x32\x18\xb8\xd4\x5a\x8d\x2d\xb6\xd8\x9a\x62\x59\x6b"
- "\xfb\xd5\x8d\x12\x8b\x4a\x05\x0d\x75\x54\x54\x34\x34\x48\x44\x02"
- "\x54\x44\x18\x90\xac\xd5\x42\x40\x02\x16\x93\x7f\xb6\xd4\x9a\xab"
- "\x49\xad\xee\xd2\xae\xd6\xb4\x6a\x8b\x85\x40\xa5\x2d\xed\xe2\x36"
- "\xb1\x64\x64\x68\x93\x8e\xf2\x6f\x66\xee\xef\x9c\x77\xdf\xf0\xde"
- "\x0c\x33\x30\x6f\x06\x59\x7f\x6d\x53\x4f\x66\xee\x3b\xef\xdc\x7b"
- "\xcf\xf9\xdc\x73\xcf\x3d\xef\xbd\x73\x1d\xee\x7f\xc8\xcb\xbb\xd1"
- "\xbe\xbc\x9f\x0c\xe6\xe5\x5d\xcd\xcb\xdb\x7e\xde\x82\x45\x8e\xf3"
- "\x16\xd8\x97\xf7\xdc\x01\xde\x73\x9e\xfb\x95\x74\x79\xcf\xad\xe6"
- "\xe5\x5d\xdd\x91\x3b\xd7\x20\xc8\xfb\xc9\x44\xe9\xf2\x9e\x5b\xc9"
- "\xe4\xed\x9b\x0a\xf2\x6e\x04\x79\x4b\xcc\xdf\xf2\xa4\xc3\xfc\xdf"
- "\x4c\xde\x19\x0e\xf0\x1d\x59\xc9\xe4\xcd\xe7\x4c\xf0\x73\x90\x33"
- "\x61\x91\xe3\x9c\x09\xf6\xe5\x1d\xb9\xa6\x7f\x79\x47\xce\x93\x2e"
- "\xef\x48\x15\x93\x77\x06\xe0\x3b\x32\x46\x90\x77\xa4\x4e\xba\xbc"
- "\x23\x95\x4c\xde\x23\xe3\xa9\x7f\x06\xe0\x3b\x43\x22\xbe\x23\xf7"
- "\x0d\x20\x6f\x07\xf8\x9e\xaf\xe4\xe5\xcd\xe3\xdb\x41\xbe\x86\x45"
- "\x8e\xf3\x35\xd8\x97\xf7\xbc\x33\xfd\xcb\x7b\xde\x71\xe9\xf2\x9e"
- "\x97\xcf\xcb\x1b\xf0\x3d\xef\x94\x20\xef\xf9\x11\xd2\xe5\x3d\x2f"
- "\x8b\xc9\xfb\xa6\x68\x90\x37\xe0\x3b\x43\x22\xbe\xe7\x8f\xee\x5f"
- "\xde\x1a\x07\xf8\x5e\x90\xc5\xe4\xcd\xe7\x8a\xf0\x73\x90\x2b\x62"
- "\x91\xe3\x5c\x11\xf6\xe5\xbd\x60\x56\xff\xf2\x5e\x70\x9f\x74\x79"
- "\x2f\x20\x4c\xde\x1a\xc0\xf7\x82\x50\x41\xde\x0b\xb4\xd2\xe5\x3d"
- "\x5f\xcf\xe4\xed\x17\x49\xfd\x35\x80\x6f\x8d\x44\x7c\x2f\xc8\x19"
- "\x40\xde\x0e\xf0\xad\xd6\xf3\xf2\xe6\xf1\xed\x20\x4f\xc5\x22\xc7"
- "\x79\x2a\xec\xcb\x5b\x7d\xa4\x7f\x79\xab\x5f\x93\x2e\x6f\x75\x22"
- "\x2f\x6f\xc0\xb7\xfa\xa0\x20\xef\x85\xc1\xd2\xe5\xad\x8e\x66\xf2"
- "\xf6\x0f\x03\x79\x03\xbe\x35\x12\xf1\xad\x36\x3a\x92\xb7\x0f\xc8"
- "\xfb\x38\xf8\x31\x30\x0f\xaa\xcd\x85\xe0\xa7\x98\xac\xe5\xde\x90"
- "\x3a\x85\x4c\xb8\x82\xb2\x5f\xd4\x0c\x73\x87\x7a\xe8\xf2\x65\x2c"
- "\x3a\xee\xfe\xbb\xc3\x8b\x76\x38\x7e\x77\x78\xd1\x46\xe9\xef\x0e"
- "\x2f\x0a\x15\x7c\xa0\x45\x5b\x05\x9d\x2e\xe6\xec\x87\xb4\x77\x8a"
- "\x17\x4d\xb6\x9f\x47\x63\x61\x2b\xbe\x53\x4c\x73\x47\x4d\x35\x17"
- "\xb9\xe2\x1b\x2d\x6a\x73\x42\xd7\x4d\xa0\x87\x46\xc7\xba\x8e\xaa"
- "\x05\x5d\x37\x0d\x5d\xde\x8e\xa8\xb7\xdc\xd7\x75\x54\x86\x63\x5d"
- "\x47\xad\x94\xae\xeb\xa8\x60\xc1\xff\x8a\x4a\x11\x74\xbd\xc4\x85"
- "\xf7\xc7\xa3\x54\xf6\xf3\x79\x2c\x6e\x64\xba\xfe\x49\x25\xe8\xda"
- "\x05\xbf\x2c\xea\xd4\xc0\xba\xce\x80\x71\x9d\xd1\xcf\xb8\x5e\x7a"
- "\x10\xe6\x4c\xf5\xd0\xe5\x0f\x59\x5a\xe6\xbe\xae\x97\xc6\x39\xd6"
- "\xf5\xd2\x39\xd2\x75\xbd\x74\xb4\xe0\xfb\x2d\x8d\x16\x74\xbd\xd4"
- "\x20\x5d\xd7\x4b\xbd\xed\xe7\x15\x59\x72\x98\xe9\xfa\x66\x85\xb9"
- "\xc8\x15\x9f\x70\xa9\xd6\x09\x5d\xc3\xb8\xce\xe8\x67\x5c\x47\x57"
- "\x82\xae\x9b\x86\x2e\x8f\x49\xf4\x36\xf7\x75\x1d\x3d\xcf\xb1\xae"
- "\xa3\xa7\x49\xd7\x75\xb4\x97\xe0\x77\x46\xcf\x14\x74\x1d\xad\x93"
- "\xae\xeb\x65\x9d\xf6\xf3\x9b\x2c\xdb\xc3\x74\x7d\x4b\x2c\xe8\xda"
- "\x05\x7f\x34\xda\xa1\xff\x2f\xe8\x5a\x03\xe3\x5a\xd3\xcf\xb8\x5e"
- "\x91\x03\xbe\x82\x7a\xe8\xf2\xa9\xac\x58\xe7\xbe\xae\x57\x3c\xe4"
- "\x58\xd7\x2b\xc6\x49\xd7\xf5\x72\x83\xe0\xf3\xae\x98\x22\xe8\x7a"
- "\x45\x9d\x74\x5d\x2f\x6f\xb5\x9f\x67\x65\x79\x21\xd3\xf5\x4f\xeb"
- "\xcc\x45\xae\xf8\xc2\x2b\x4a\x9c\xd0\x35\x8c\x6b\x4d\x3f\xe3\x3a"
- "\x06\xd6\xf5\x9a\xa6\xa1\xcb\xeb\x12\xb3\xdc\x7d\x5d\xc7\xdc\xed"
- "\x58\xd7\x31\xfe\xd2\x75\xfd\x94\x4e\xf0\xb7\x63\x02\x05\x5d\xc7"
- "\xd4\x48\xd7\xf5\x53\x8d\xf6\xf3\xbd\x3c\x95\xc5\x74\x7d\x6b\x30"
- "\xe8\xda\x05\x3f\x3c\x66\x8b\x2b\x7e\x78\x72\x19\xf1\xb2\xd6\xf7"
- "\xaa\xd8\xa1\xf5\xc5\x57\xcd\x71\x5f\xdf\xab\x6e\x75\xac\xef\x55"
- "\x9e\xd2\xf5\xbd\xb2\x51\xf0\xc5\x57\xf9\x09\xfa\x5e\xb5\x47\xba"
- "\xbe\x57\x6a\xed\xfb\xe2\x2b\x13\xdd\xf3\xc5\x57\xa5\xb8\xe2\x8b"
- "\xf7\xd5\x77\xac\x7a\x68\xfd\xf1\xd8\x87\xdc\xd7\x77\xec\x70\xc7"
- "\xfa\x7e\xfa\xb2\x74\x7d\x3f\xad\x15\xfc\xf1\x58\x85\xa0\xef\xd8"
- "\x12\xe9\xfa\x7e\xba\xda\xbe\x3f\xfe\x74\xb4\x7b\xfe\x78\x6c\x8c"
- "\x2b\xfe\x78\x5f\x7d\x3f\x13\x36\xb4\x3e\xf9\x33\x93\xdc\xd7\x77"
- "\x9c\xc9\xb1\xbe\xe3\xbe\x92\xae\xef\xb8\x6a\xc1\x27\x8f\x13\xc5"
- "\xbf\x9f\xd9\x2a\x5d\xdf\x71\x95\xf6\x7d\xf2\xb8\x08\xf7\x7c\xf2"
- "\x67\x22\x5d\xf1\xc9\xfb\xea\x3b\x7e\xca\xd0\xfa\xe5\xf1\x63\xdc"
- "\xd7\xf7\xea\xf3\x8e\xf5\xbd\xfa\xb4\x74\x7d\xaf\xae\x14\xfc\xf2"
- "\xd5\xad\x82\xbe\xe3\x5d\xc8\x9f\xb9\x3a\xdf\xbe\x5f\xbe\x3a\xc4"
- "\x3d\xbf\x3c\x3e\xd4\x15\xbf\xbc\xaf\xbe\x13\x82\x86\xd6\x37\x4f"
- "\xf0\x75\x5f\xdf\x6b\xce\x38\xd6\xf7\x9a\xe3\xd2\xf5\xbd\x26\x5f"
- "\xf0\xcd\xd7\x88\xe2\xff\x09\xb1\xd2\xf5\xbd\x26\xcb\xbe\x6f\xbe"
- "\x26\xd8\x3d\xdf\x3c\x61\xb2\x2b\xbe\x79\x5f\x7d\x27\x06\x0c\xad"
- "\x7f\x9e\x28\x73\x5f\xdf\x6b\x4f\x3a\xd6\xf7\xda\x43\xd2\xf5\xbd"
- "\x36\x4b\xf0\xcf\xd7\x1e\x13\xf4\x9d\xa8\x96\xae\xef\xb5\x89\xf6"
- "\xfd\xf3\xb5\x2a\xf7\xfc\xf3\xc4\x40\xf7\xe3\xe4\x49\x06\xf4\xcd"
- "\xa5\xe6\x7f\x6c\x48\xb1\xbc\x73\x97\x28\xca\xff\x98\xc4\xed\xad"
- "\x62\x3f\xb7\x4c\xd2\x43\xd7\x76\xfe\xc7\x67\x07\xc8\xff\xf8\xac"
- "\xc4\xfc\x8f\x49\xe3\xa4\x3f\x8f\xff\xac\x41\x58\x23\x24\x89\xd6"
- "\xff\xc9\xdc\xb8\xbe\xb6\xf3\x42\x3e\x6b\x93\x17\x32\x91\xcb\x0b"
- "\x49\x73\x6f\x2b\x74\x6d\x2d\x92\x4c\xdc\xbf\x2f\xb0\xae\x11\xd7"
- "\x21\x52\xf3\x50\x0a\xd8\x4e\x3e\x29\x60\x7b\xdd\xfb\x8e\xb1\xbd"
- "\xee\xd6\x6b\x3b\x0f\x65\xca\xee\xfe\xb1\x9d\x92\x25\x2d\xe7\xc8"
- "\x3a\x17\xf2\xde\xa4\x34\x0a\xeb\xa1\x75\xa2\xf5\xef\x7a\xe5\x10"
- "\x62\xdb\xc5\x7c\x4a\x29\x07\xad\xb1\x9d\x7c\x8c\x61\x5b\xd5\xe6"
- "\xda\xba\x6b\x5d\xb3\xfb\xf7\x41\x52\xf7\xe1\x9a\x4b\x6a\x3e\x4c"
- "\x01\xdb\xeb\xdf\x10\xb0\x9d\x5a\xe6\x18\xdb\x1b\xba\xae\xed\x7c"
- "\x98\x1b\x32\xfa\xc7\xf6\x86\x28\x69\xb9\x4c\x36\x7c\x29\x1d\xdb"
- "\x1b\xf6\x09\x6b\xbf\x0d\x7a\x01\xdb\xa9\xed\x43\x87\x6d\x57\xf3"
- "\x64\x6e\xc8\xb7\xc6\xf6\xfa\x4a\x86\xed\x9f\x4d\x75\x6d\x8d\x99"
- "\x5a\xe3\xfe\x7d\x9f\x4d\x5b\x71\x7d\x29\x35\x2f\xa7\x80\xed\x8d"
- "\xcf\x0b\xd8\xde\xd4\x27\x2f\x94\x80\xed\xb4\xd3\xd7\x76\x5e\xce"
- "\xb4\x85\xfd\x63\x3b\x6d\x8a\xb4\x1c\x29\x69\x47\xa4\x63\x3b\x6d"
- "\xab\xb0\xce\x4d\xab\x13\xb0\xbd\xa9\x76\x08\xb1\xed\xa2\xdd\x4e"
- "\x8b\xb7\xc6\xf6\xc6\x74\x86\xed\xb1\xf9\xae\xad\xa7\x37\x15\xba"
- "\x7f\x9f\x4b\x13\x83\x6b\x69\xa9\xf9\x41\x05\x6c\xa7\x2f\x17\xb0"
- "\xad\x99\xe7\x18\xdb\x19\x6f\x5d\xdb\xf9\x41\x33\x06\xc8\xff\x93"
- "\xd1\x4f\xfe\x1f\x7b\xef\x0a\x67\xb8\x90\xf7\x22\x23\x46\x58\xd3"
- "\x67\xec\x11\xb0\xad\xa9\x1a\x3a\x6c\xbb\x9a\x37\x34\x23\xcc\x1a"
- "\xdb\xe9\x6a\x86\xed\x9f\xb7\xba\x16\x3b\xd0\x24\xba\x7f\x5f\x6f"
- "\x73\x08\xc6\x0d\xa4\xe6\x29\x15\xb0\x9d\x39\x4d\xc0\xf6\xe6\x49"
- "\x8e\xb1\x9d\xb5\xfd\xda\xce\x53\x9a\xe5\xdb\x3f\xb6\x33\xf5\xd2"
- "\x72\xba\x64\xb9\xf0\x1e\x7c\x56\x88\x10\xbf\xc8\x12\x3d\xff\xbe"
- "\x39\x6b\x08\xb1\xed\xa2\xdd\xce\x0a\xb4\xc6\x76\xe6\x64\x86\xed"
- "\xbb\xa6\xb8\x16\x27\xd9\x3c\xd3\xfd\x38\xc9\x96\x99\xdc\x3d\x4c"
- "\x89\xf9\x52\x05\x6c\x67\xdf\x2c\xe4\x26\xda\x32\xcd\x16\xdb\x42"
- "\x6e\xa2\xe7\xe6\x5d\x3b\xf9\x52\xb3\x3f\xef\x1f\xc7\xd9\x35\xd2"
- "\x62\x22\xcf\x4d\x93\x8e\xe3\xe7\xbc\x84\x98\xc8\x73\xa2\xe7\x5f"
- "\xb6\x58\xf6\x24\x1f\x82\x9c\x45\xcf\x7d\xd9\x7f\xce\xa2\xe7\xb4"
- "\x57\x2f\x8f\x6a\x76\xbb\x75\xce\xa2\x6c\xa5\x99\x1b\x0b\xe3\x73"
- "\x5c\x8b\xab\x6c\x51\xbb\x1f\x57\xf9\x0d\xbb\xbf\x2b\x31\x6f\xab"
- "\x30\x16\x9e\x1f\x2b\x8c\x85\xdf\x3c\xe6\x78\x2c\xbc\xb0\xfc\xda"
- "\xc9\xdb\xfa\xfc\x57\xfd\x8f\x85\xe7\x8f\x49\x8b\xa1\xbc\xe0\x42"
- "\x1e\x98\x17\xfc\x84\x18\xca\x0b\x6a\x61\x2c\xfc\xa6\x64\xe8\xc6"
- "\xc2\x0b\xe7\xfb\x1f\x0b\x2f\xd4\x5d\xbd\x7c\xae\xcf\x77\x5a\x8f"
- "\x85\xe7\x47\xb3\xb1\x30\x51\xe9\x5a\x1c\xe6\x37\x2e\xdd\xff\xb6"
- "\x1e\x0b\x2f\xc6\x70\xf7\xbe\x25\xe6\x8f\x15\xc6\xc2\xd6\x49\xc2"
- "\x58\x78\xb1\x8f\x3f\x2f\x8c\x85\x6d\x6b\xae\x9d\xfc\xb1\x5b\xbf"
- "\xef\x7f\x2c\x6c\x6d\x94\x16\x73\xd9\x36\x4f\xfa\x58\xd8\x26\x7a"
- "\xff\x69\x9b\xe8\xfd\xa7\x17\xab\x86\x6e\x2c\x6c\xeb\xea\x7f\x2c"
- "\x6c\x6b\xba\x7a\x79\x65\xb7\x29\xac\xc7\xc2\xd6\x20\x36\x16\x26"
- "\x15\xba\x16\xb7\x79\xd1\x09\xff\x7f\xa0\xb8\xcd\xf6\x44\xee\xb9"
- "\x00\x89\x79\x6c\x85\xb1\xf0\xd2\x34\x61\x2c\x6c\x5f\xee\x78\x2c"
- "\xe4\x6c\xbc\x76\xf2\xd8\xbe\x64\xea\x7f\x2c\xbc\xd4\x2c\x2d\x46"
- "\x93\xb3\x5c\xfa\x58\xc8\x19\x2f\xc4\x68\x72\x12\x85\xb1\xb0\xbd"
- "\x7a\xe8\xc6\xc2\x76\xcf\xfe\xc7\x42\x4e\xeb\xd5\xcb\x6f\x9b\xa3"
- "\xb4\x1e\x0b\x2f\x4d\x66\x63\x61\x72\x80\x6b\x71\x9e\xed\xe9\xee"
- "\xc7\x79\xf2\xd3\xb9\x67\x26\x24\xe6\xd3\x15\xc6\x42\xee\x63\xc2"
- "\x58\xc8\x5f\xe3\x78\x2c\xe4\x3d\x7f\xed\xe4\xd3\xcd\xbb\xa1\xff"
- "\xb1\x90\xdb\x26\x2d\xa6\x93\xb7\x46\xfa\x58\xc8\x9b\x22\xc4\x74"
- "\xf2\xd2\x85\xb1\x90\x7f\x78\xe8\xc6\x42\xbe\x6f\xff\x63\x21\x4f"
- "\x7f\xf5\xf2\xec\xe6\x8d\xb6\x1e\x0b\xb9\x21\x6c\x2c\xdc\x5f\xea"
- "\x5a\x5c\x28\x7f\xab\xfb\x71\xa1\x97\xb7\x72\xcf\x93\x48\xcc\xeb"
- "\x2b\x8c\x85\x1d\xf3\x84\xb1\xf0\x72\x3f\xfb\x3c\x14\xec\xb8\x76"
- "\xf2\xfa\x16\x0c\xb0\xff\xd1\x8e\xfe\xf6\x3f\xb2\x13\x03\x2a\xd8"
- "\x28\x7d\x2c\x14\x84\x0a\x31\xa0\x02\xd1\xfb\x7f\x2f\xd7\x0e\xdd"
- "\x58\x78\x79\x80\xfd\x1f\x0a\x9c\xd8\xff\xc1\xd5\x7c\xbf\x05\x41"
- "\xd6\x63\x61\xc7\x4c\x36\x16\x1e\x50\xb9\x16\x47\x7a\x79\xc0\xf8"
- "\x3f\xae\xf3\x7b\xfc\xfa\xc6\x91\xea\x5a\xa7\x90\x5f\x2c\xc2\xb1"
- "\x50\x34\xd5\x58\x94\xae\xc6\xfc\xc2\xa6\x40\x3e\x07\xe5\x66\x3e"
- "\xc7\x8b\xc1\xc8\x72\x50\xea\x4d\xbd\x39\x28\x59\xee\x0f\x22\xc7"
- "\x77\x81\xf1\x9d\x60\xa3\x92\xe5\x9f\xa4\xf8\x4c\x14\x3e\x23\xd5"
- "\x52\xcb\xe5\x57\x49\x37\x42\xdf\xcf\x0e\x90\x7f\x32\x5a\x47\xea"
- "\xa2\xd3\x88\xd1\xf7\xa2\x96\xbd\x27\x5c\x58\xc7\xe5\x9f\x5c\x16"
- "\x70\x4b\xee\xbf\x89\x9f\x0f\xe6\x9f\x8c\xa6\xe6\x4c\x1d\xd5\xd7"
- "\x77\x12\xa0\x05\xf9\x2e\xb7\xe4\xa0\x2c\xba\x0f\xfb\x6e\x5c\x16"
- "\x74\x4b\xf9\xbf\x1d\xe5\x17\x2e\x72\x21\x0f\x6c\x61\x9b\x10\xdf"
- "\x29\x1a\x2f\x60\xb4\x88\x9b\x83\xe1\xfc\xb1\x3a\x35\xd8\x98\xdc"
- "\xff\xab\xea\x71\x29\xf7\x46\x51\x98\x13\x3a\xc3\x67\x44\xfa\xd8"
- "\x2f\x41\x67\xc5\x7a\xd0\x59\x13\xe6\x39\x76\x5e\x67\x9e\x17\xaf"
- "\x8e\xce\x8a\xb3\x9c\xd7\x59\xf1\x37\x36\x3a\xb3\x13\x87\x28\xfe"
- "\x58\xba\xce\x8a\x4b\x85\x38\x44\xb1\x4e\xd0\xd9\x6f\x83\x99\xce"
- "\x8a\x53\x99\xce\xa6\x82\x5d\x76\x65\x5d\x5e\x3c\xe0\xfb\xdf\xb8"
- "\x6e\xea\xf1\xeb\xbb\x2e\x17\x74\x56\x52\x65\x2c\x82\xb5\x3b\xac"
- "\xcb\x9d\xd7\xd9\x8d\x2d\x57\x47\x67\x25\x93\x9d\xd7\x59\x49\x99"
- "\xb5\xce\xec\xad\x97\x4b\x5c\xd8\xb3\xb3\x24\x42\x58\x2f\x97\x14"
- "\x0a\x3a\x2b\x69\x65\x3a\x2b\x19\xcf\x74\x36\xcd\xd8\xe3\x52\x0e"
- "\x90\x92\x6a\x27\x74\x86\xf7\xf4\xfb\x19\x67\xaf\xa8\x41\x67\x4d"
- "\x98\xf7\xd9\x79\x9d\xf9\x7e\x72\x75\x74\xb6\xb3\xcd\x79\x9d\xbd"
- "\x32\xc7\x46\x67\x76\xd6\x75\xaf\x3c\x20\x5d\x67\xaf\x28\x84\x75"
- "\xdd\x2b\x61\x82\xce\x5e\x29\x61\x3a\xdb\xa9\x63\x3a\x7b\x30\xa8"
- "\xc7\xa5\x3c\x22\xaf\x0c\x18\xff\x42\x3f\xb4\xc7\xaf\xef\x3a\x47"
- "\xd0\x59\xa9\xb7\xb1\x08\xd6\x42\xb0\xce\x71\x5e\x67\xf7\xbf\x78"
- "\x75\x74\xb6\xab\xd4\x79\x9d\x95\x7a\x5a\xeb\xcc\xde\xfa\x63\xd7"
- "\x79\xe9\x3a\xdb\x55\x23\xac\x3f\x76\x19\x05\x9d\x95\xce\x64\x3a"
- "\xdb\x55\xc8\x74\x16\x12\xd9\xe3\x52\x2e\x92\xd2\x00\x27\x74\x86"
- "\xf7\x60\xfb\x19\x67\x65\x5a\xd0\x59\x13\xe6\xc1\x76\x5e\x67\x8b"
- "\x1f\xbe\x3a\x3a\x2b\x8b\x70\x5e\x67\x65\xef\xd8\xe8\xcc\x8e\x9f"
- "\x5c\xe6\x42\x1e\xec\xb2\x78\xc1\x4f\x2e\xab\x16\x74\x56\x4e\x98"
- "\xce\xca\xc2\x98\xce\x1e\xca\xea\x71\x29\x9f\x49\x99\xc3\xfc\x5f"
- "\xfd\xf9\x8d\x96\xe7\xf2\x05\xbd\x55\xa4\x5e\x3b\xbe\x63\x85\x97"
- "\xf3\x7a\xab\x78\x76\x60\xdf\xb1\x62\xa1\x74\xbd\x55\x04\x0a\xbe"
- "\x63\x45\xac\xa0\xb7\x8a\x1a\xa6\xb7\x0a\xe2\x9e\xef\x58\x31\xe0"
- "\xfb\xaf\xf6\x7c\xc7\xbe\x7a\xdb\x1d\x7c\xed\xf8\x8f\x95\x5a\xe7"
- "\xf5\xb6\x7b\xdc\xc0\xfe\xe3\x6e\x5f\xe9\x7a\xab\x6c\x16\xfc\xc7"
- "\xdd\x2a\x41\x6f\xbb\x13\x99\xde\x2a\x6b\xdc\xf3\x1f\x77\x3b\xcc"
- "\xff\xd6\x9f\xff\xd8\x57\x6f\xaf\xb6\x5d\x3b\x3e\xe4\xab\xa9\xce"
- "\xeb\xed\xd5\x2f\x07\xf6\x21\x5f\x3d\x21\x5d\x6f\xaf\x16\x0a\x3e"
- "\xe4\xab\x4d\x82\xde\x7e\x17\xc4\xf4\xf6\x6a\xa2\x7b\x3e\xe4\xab"
- "\x06\x57\x7c\xc8\xbe\x7a\xab\xaa\xbc\x76\xfc\xc8\xaa\x60\xe7\xf5"
- "\x56\xb5\x73\x60\x3f\xb2\xca\x85\x3d\x8b\xab\x66\x0a\x7e\x64\x55"
- "\xbe\xa0\xb7\x2a\x1d\xd3\x5b\x55\x90\x7b\x7e\x64\xd5\x80\xf9\x3f"
- "\xec\xf9\x91\x7d\xf5\xf6\xba\xfa\xda\xf1\x25\x5f\x93\xe0\xff\xbf"
- "\x3e\x67\x60\x5f\xf2\x75\x17\xfc\xff\xd7\x15\x82\x2f\xf9\xba\xc8"
- "\xff\x7f\x9d\xf7\xff\x5f\xd3\xb9\xe7\x4b\xbe\xee\x8c\xff\xdf\xc7"
- "\x97\xec\xab\xb7\x3d\xca\x6b\xc7\x9f\xfc\x7d\xa5\xf3\x7a\xdb\x73"
- "\xc3\xc0\xfe\xe4\xef\x5d\xd8\x07\xea\xf7\x87\x05\x7f\x72\x0f\x11"
- "\xf4\xb6\x27\x82\xe9\xed\xf7\x25\xee\xf9\x93\x7b\x1c\xe6\x7f\xb4"
- "\xe8\xcd\xe4\x97\xae\xa6\x76\xe2\x90\x27\x63\xa7\xf0\xb9\x09\xf7"
- "\xea\x4c\xfe\xe9\x6a\xa9\xfb\xbb\x58\x72\x4e\x9f\x88\x25\xa4\xc5"
- "\x63\xef\x46\xf7\xf2\x4e\xef\x1d\xe7\x7e\xde\xe9\x37\x2e\x0f\xde"
- "\xfe\x2e\x6f\x9c\x91\x9e\x77\xfa\x8d\x3d\x82\x0f\xfa\x46\xbb\xa0"
- "\xeb\x3f\x70\xcf\x27\x48\xcb\x47\xfd\x46\xbc\x7b\xf9\xa8\xf7\x3e"
- "\xcb\xf0\xf5\xc6\x78\x96\x8f\x7a\x6f\xec\xd0\xec\xfb\xb2\xa7\x09"
- "\xf3\x51\xd3\xdc\x87\xf7\xb9\x96\x1f\x79\x6f\xbb\x13\x78\x6e\xa2"
- "\x76\x62\xb4\x02\x9e\xf7\x57\x03\x9e\x9b\xa4\xee\x33\x63\x8d\xe7"
- "\xfd\x8f\xb9\x87\xe7\x7d\x5d\xee\xe3\x79\xdf\xf1\xc1\xdb\x67\x66"
- "\xdf\x7e\xe9\x78\xde\x97\x2a\xf8\xe6\xfb\x0e\x0b\x78\xde\xaf\x97"
- "\x8e\xe7\x7d\x53\xdd\xc3\xf3\xfe\x87\x18\x9e\xff\x60\x64\x78\xde"
- "\x3f\x65\x68\xf6\x9f\xf9\xc3\x1e\x86\xe7\x50\x83\x6b\xf9\xa7\xf7"
- "\x1f\x1e\x18\xcf\x19\x6a\x6a\x27\x7e\x2d\xe0\xb9\x3a\xcb\xe4\x9f"
- "\xa1\x96\xba\xdf\x8d\x35\x9e\xab\x6f\x76\x0f\xcf\x07\x4e\xb8\x8f"
- "\xe7\x03\x45\x83\xb7\xdf\xcd\x81\x0c\xe9\x78\x3e\x10\x26\xac\x59"
- "\x0e\xe4\x08\x78\xae\xd6\x4a\xc7\xf3\x01\x6f\xf7\xf0\x5c\xed\xcb"
- "\xf0\xfc\x66\x1d\xc3\x73\xb5\xd7\xd0\xec\x83\xf3\x66\x2a\xc3\xf3"
- "\xa3\x53\x5d\xcb\xef\x5d\xed\x30\xff\xb1\x08\xcf\x4d\xd4\x4e\x6c"
- "\x5f\xc0\xf3\x1f\x23\x00\xcf\x4d\x52\xf7\xdd\xb1\xc6\xf3\xdb\x6e"
- "\xee\x73\xf1\xf6\x20\xec\x73\xf1\xb6\x1b\xfb\x5c\xd8\xee\xbb\xf3"
- "\xf6\x2c\xe9\x78\x7e\x3b\x40\x58\xcb\xbd\x1d\x25\xe0\xf9\x8f\xf9"
- "\xd2\xf1\xfc\x56\xb3\x7b\x78\x7e\x9b\xdf\xff\xe2\xad\x52\x86\xe7"
- "\xb7\x9b\x86\x66\x3f\x9e\xb7\xc2\x18\x9e\x1f\xdb\xe2\x5a\xfe\xf4"
- "\x3f\x46\x0d\x8c\x67\x8d\x9a\xda\xb9\xef\x21\xe0\xf9\x4f\x2a\x93"
- "\xbf\x46\x2d\x75\xff\x1f\x6b\x3c\x1f\x7a\xc7\x3d\x3c\x1f\x8a\x73"
- "\x1f\xcf\x87\xee\x1b\xbc\xfd\x7f\x0e\xdd\x2a\x1d\xcf\x07\xdb\x84"
- "\x35\xee\x21\xd1\xfd\xff\x3f\x45\x4b\xc7\xf3\x41\x37\xf7\x05\x3a"
- "\xf4\x16\xc3\xf3\x41\x7e\x5f\xa0\x43\x7b\x86\x66\x5f\xa0\x83\x01"
- "\x0c\xcf\x4f\xd4\xb9\x96\x9f\xfe\x4f\xe3\x9d\xc0\x73\x13\xb5\x73"
- "\x4f\x48\xc0\x73\x8d\x1e\xf0\xdc\x24\x75\x1f\x22\x6b\x3c\xd7\x6c"
- "\x73\x0f\xcf\x35\x0f\xb8\x8f\xe7\x1a\xcf\xc1\xdb\x87\xe8\xcf\xe7"
- "\xa5\xe3\xf9\xcf\x96\xfb\x7f\x60\x9f\xff\x2c\xba\xff\xf7\x8e\x0b"
- "\xfb\x13\xfd\x39\xdd\x3d\x3c\xd7\x6c\x66\x78\xfe\xf3\x54\x86\xe7"
- "\x9a\xd4\xa1\xd9\x9f\xe8\x4f\x6d\x0c\xcf\xb3\xfd\x5c\xcb\xff\x5f"
- "\x33\xe0\xf3\x1f\xf6\xe2\x1b\x96\xb8\x94\x80\xe9\xbf\x1e\x73\x3f"
- "\xc6\xf1\xd7\x25\xee\x61\xfa\xaf\xc3\xdd\xc7\xf4\x5f\x3e\x1f\xbc"
- "\x18\xc7\x5f\x5c\xd8\xeb\xef\x2f\x39\x42\x8c\xe3\x2f\x8d\x02\xa6"
- "\x0f\x2b\xa4\x63\xfa\x2f\x11\xee\x61\xfa\xaf\xf3\x18\xa6\xff\xa2"
- "\x64\x98\xfe\xeb\xcc\xa1\x89\x71\xbc\x73\xd8\xbd\x18\xc7\x5f\x1b"
- "\x5d\x89\x71\xf4\xc5\xf4\xbb\x25\xee\xc7\x39\xde\x9d\xe4\x1e\xa6"
- "\x8f\x7c\xe9\x3e\xa6\x8f\xec\x1f\xbc\x38\xc7\x91\x22\xe9\x98\x3e"
- "\x12\x2d\xc4\x39\x8e\x54\x09\x98\x7e\xb7\x49\x3a\xa6\x8f\x04\xba"
- "\x87\xe9\x77\xc7\x31\x4c\x1f\x6e\x65\x98\x7e\x57\x35\x34\x71\x8e"
- "\xc3\xf9\xee\xc5\x39\xde\xad\x72\x25\xce\xd1\x17\xd3\xef\xc7\xbb"
- "\x1f\xeb\x78\xdf\xd3\x3d\x4c\x6b\x0f\xb9\x8f\x69\xed\xe6\xc1\x8b"
- "\x75\x68\xe3\xa4\x63\x5a\x3b\x59\x88\x75\x68\x53\x05\x4c\xbf\xbf"
- "\x4f\x3a\xa6\xdf\xeb\x74\x0f\xd3\x5a\x13\xc3\xf4\x7b\x35\x0c\xd3"
- "\x5a\xc3\xd0\xc4\x3a\xde\x8b\x71\x2f\xd6\xf1\x7e\xaa\x2b\xb1\x8e"
- "\xbe\x98\x3e\x16\xe2\x7e\xbc\xe3\xe8\xe7\xee\x61\xfa\xe8\x36\xf7"
- "\x31\x7d\x74\xde\xe0\xc5\x3b\x8e\x4e\x93\x8e\xe9\xa3\xa2\xfd\x2f"
- "\x8e\x8a\xde\xff\x3f\x96\x25\x1d\xd3\x7f\xab\x73\x0f\xd3\x47\x3f"
- "\x66\x98\xfe\x5b\x0e\xc3\xf4\xd1\xda\xa1\x89\x77\xfc\x6d\x8a\x7b"
- "\xf1\x8e\x63\x03\xe6\xbf\xb0\x17\xef\xe8\x8b\xe9\xbf\xfb\xb9\x1f"
- "\xf3\xf8\x60\xbf\x7b\x98\xfe\x60\x89\xfb\x98\xfe\x60\xdc\xe0\xc5"
- "\x3c\x3e\xf0\x95\x8e\xe9\xe3\xcd\x42\xcc\xe3\x03\xd1\xf3\x4f\x7f"
- "\x8f\x94\x8e\xe9\xe3\x95\xee\x61\xfa\x83\xd7\x18\xa6\x8f\x47\x33"
- "\x4c\x7f\x50\x3a\x34\x31\x8f\xe3\xde\xee\xc5\x3c\xfe\xae\x72\x25"
- "\xe6\xd1\x17\xd3\x27\xda\xdc\x8f\x7b\x9c\xd8\xec\x1e\xa6\x4f\x4c"
- "\x72\x1f\xd3\xb5\xa6\xc1\x8b\x7b\xd4\x7e\x25\x1d\xd3\xb5\xd5\x42"
- "\xdc\xa3\x56\x94\xff\xfe\xc3\x20\xe9\x98\xae\x4d\x71\x0f\xd3\x27"
- "\x36\x32\x4c\xd7\x4e\x66\x98\x3e\x91\x38\x34\x71\x8f\xbf\xeb\xdc"
- "\x8b\x7b\x9c\xe8\xf3\xfc\x5b\xf2\xca\x84\x18\xd5\xda\x55\xab\x92"
- "\x57\xa6\xa8\x92\xe3\xe3\x9e\x5a\x39\x6d\xac\xe5\xf7\xb4\xe0\xd4"
- "\xb1\xa9\xc3\x48\xcc\x9a\xe5\xcb\xd6\xdf\x23\x9c\x8c\x5f\x99\x00"
- "\x7f\x86\x91\xd8\xe5\xc9\xb1\xaa\x94\x8d\x89\x2b\x55\xf8\x6b\xcd"
- "\x53\x89\x40\xb2\x36\x45\x28\x99\xbb\x32\x7e\x79\x6a\x5c\xc2\xd3"
- "\xaa\xe5\xf1\x71\x4f\x27\xac\x59\x99\x90\xa2\x4a\x5a\xf9\xec\xba"
- "\xb8\xa4\x95\xf8\x3d\x59\xb5\x6a\x6d\x12\x14\x3c\xb5\x32\x6e\xfd"
- "\x4a\xd5\x8a\x75\xab\x56\xad\x4c\x4a\x1e\x46\x66\xad\x8b\x4f\x89"
- "\x4b\x8c\x5f\xa9\x0a\x9d\xf5\xd0\xdd\x91\x33\x9e\x8c\x7c\xf0\xc1"
- "\x61\x44\xb4\xf7\xb4\x8a\x16\x56\x44\x03\x86\x14\x67\x3d\x3e\x7b"
- "\xbf\x3e\x80\x90\xed\x80\xcd\xbc\x24\xa2\xdc\x96\x44\x14\x5b\x2f"
- "\x12\xaf\xed\x17\x89\xb7\xea\x19\x12\x42\x7d\x0f\x69\xf3\x2e\x12"
- "\x3f\x3a\xea\xe1\x26\xba\xe3\x02\xa1\xbe\x17\x43\xf4\xbe\x9f\xe9"
- "\xa1\x4c\x49\x77\x7c\xa6\xc2\x73\xa0\x0b\xcc\x71\xb0\xa7\xc5\xe3"
- "\xb3\x2c\xbd\xef\x3f\x1a\x33\xbf\x21\x72\x3a\xe2\xa3\xc8\x37\xcd"
- "\x7a\xf9\xfb\xb8\x53\x09\xc8\x8a\x78\xd4\xc5\xc3\xa1\x26\x1e\x27"
- "\xbd\xe0\x08\x80\x23\x1a\x8e\xad\x70\xe4\xc3\x61\x24\x1e\xf5\xa1"
- "\x70\xa4\xc0\x01\x65\xf5\xa5\x70\xec\x81\xa3\x9a\x78\x34\x40\x79"
- "\x43\x0c\x1c\x70\xae\x21\x87\xf1\x69\x28\x24\x1e\x8d\x7e\x70\x44"
- "\xc1\x01\xd7\x7f\x0c\xe5\x1f\xd7\x10\x8f\x4f\x80\xee\xe3\x26\x38"
- "\x0c\x70\x00\xcf\x4f\x54\x70\xe0\xf5\x25\xec\xdc\xa7\x4a\x38\x66"
- "\xc2\x01\x3c\x3e\x85\x7a\x3e\x3d\x0c\x47\x23\x1c\xcd\x70\xb4\x12"
- "\x8f\x53\xd0\xb6\x53\x40\x73\x2a\x10\x0e\x68\xc3\xa9\x2a\x38\x6a"
- "\x89\xc7\x69\xe0\x73\x1a\xea\x38\xad\x23\xd0\x47\xfe\x08\x82\x23"
- "\x4a\xf4\x3b\x55\xf4\xdd\xde\x51\xe2\xb3\xf9\x76\x9d\xf6\x2e\x23"
- "\x8c\xdb\xba\x13\xa6\x6c\xe2\x61\xda\xf1\x8f\xc6\xc4\xbb\x88\xec"
- "\x9c\x47\x5d\x51\xc3\x16\x42\xa8\xf2\x02\xd1\xa6\x75\xe3\xf9\x22"
- "\x94\x59\x47\x6e\x5d\xa1\x8e\xbc\x59\x82\xe3\x53\x1a\x3e\xeb\x0a"
- "\xf9\xeb\x4f\xe9\x64\x8f\x57\xe3\xf5\xb4\x20\x6d\x34\xcd\x54\xef"
- "\xc2\xf7\x70\xcf\xa2\x0c\x71\xdc\xe4\x6f\x4c\xa1\xca\x64\x03\xda"
- "\x18\x6d\x1a\xd7\xae\x35\x30\xde\x46\xc0\xf5\xf1\x14\xf4\xa8\xf7"
- "\x07\x9d\x67\x13\x05\xf7\x7b\xc7\x67\x7a\x5a\xb9\x37\x8c\xd9\x9d"
- "\x93\xdc\xfa\xa5\xcb\xff\xe5\x7c\x3c\xd7\xf9\x5a\x7c\x08\xad\xd2"
- "\x34\x69\x13\xba\x49\xab\xc7\xc9\x85\x60\xff\xe4\xf4\xce\xf8\x10"
- "\x73\xf1\xcb\xf9\x35\x80\x01\xa4\x79\x47\xd3\x86\x7f\x63\xa1\xdf"
- "\x72\x5a\x58\xa8\xc6\x18\x90\x56\x53\x00\x36\xb9\x6e\x4d\x97\xff"
- "\xde\x60\xd5\xe3\x3e\xb4\x05\xeb\x91\x63\xbe\xf5\x93\x84\xd9\x85"
- "\xba\xf8\x2e\xff\x87\x75\xc8\xdb\x54\xb9\x57\x0f\xe7\x14\x14\xb0"
- "\x07\x6d\x90\x5d\x80\xeb\x4c\x45\x0f\x37\x69\x1f\xe7\xea\xbc\x0c"
- "\xed\x94\x67\x3e\x06\xbc\x5f\xdd\xab\x3f\x90\xd6\x29\xa7\xd8\x76"
- "\xbf\x87\x9b\x00\xeb\xde\xa6\xdc\x0f\x27\xef\x1c\x49\x14\x65\x05"
- "\x84\x54\x8c\x24\x5e\x1d\xb9\x27\xdb\x75\x8a\xa8\x76\x66\xf7\xea"
- "\xe2\xe5\x40\x03\x75\xd6\x52\xd0\x07\x57\x57\x61\x6e\xa3\xe3\xba"
- "\xea\xa7\xf5\xd6\x55\x9c\xdb\x88\x75\x71\xf2\x61\xb2\x62\xdf\x2d"
- "\x7c\xaa\xe2\xfb\x69\x73\xfd\x03\xc8\x43\xe7\x51\x3f\x9e\xbe\x1e"
- "\xaf\x37\x15\x17\xe9\xf1\x1c\xd2\x33\xf9\x7f\xa6\xf7\xd9\x4c\x0c"
- "\x14\xca\x4c\xbc\x0e\x4c\xa8\x03\x79\x16\xd8\xaf\x93\xde\x58\x1f"
- "\x5c\x9b\x6a\xca\x56\x11\xd5\xe3\x84\xb4\x7b\x34\x70\xb1\x09\xaa"
- "\x4c\x6b\x67\x3a\xae\xff\x38\xb5\x96\x9a\xe1\x30\x4d\xac\x25\x32"
- "\xed\xe3\xa8\xdf\x7a\xbd\xea\x91\xeb\x41\xce\xf5\xdf\xf7\xca\x77"
- "\xcc\xde\x36\x90\x91\x12\xe4\xe2\x6d\x7a\x61\xba\x96\xca\x55\x04"
- "\xfb\x21\x96\x17\xf6\xa7\x23\xb7\x41\x65\x23\x33\xe5\x63\x8f\x65"
- "\x52\x11\xef\x6f\xc4\xfd\x07\xfa\x08\x9d\x6c\x7a\x27\xd2\xab\xee"
- "\xe0\x30\xb7\xc6\xc4\x9f\x47\xdc\xa3\x9e\xa9\x7f\x45\x34\xfe\x9e"
- "\x37\x8e\x28\x7d\x6a\x89\x5c\xa5\x09\xac\x61\x78\x28\x54\x43\xdf"
- "\xa6\x32\x7e\xd0\xc7\xe2\xac\x3d\x70\x6d\x90\x80\xbf\x86\x3a\xd3"
- "\x8e\xb4\xd6\x2e\xff\x22\x65\x67\xd1\xf6\x46\x9a\x9f\xd6\x8a\xef"
- "\x9f\xb7\x78\x34\x1c\xe7\x64\x90\xed\x45\x58\x3b\xd2\xda\x34\xf1"
- "\x54\xaf\xf9\x1e\xea\x1a\x55\xa4\x7c\x67\xbd\x1e\x74\xb6\xbd\x11"
- "\x31\x51\x73\xa5\x53\x8e\x39\x01\xe9\x88\x0f\xe7\x97\xb3\xbe\x7a"
- "\x41\x5f\x09\xf2\xed\xc8\x6d\xf4\x16\xfa\xda\x50\x8d\xf8\x80\x3a"
- "\x8c\xac\x6e\xe0\x9b\x0d\x75\xec\x48\x33\x02\xdd\x64\x9d\x4c\x1f"
- "\xca\x8d\xaf\xf5\xf4\x54\x5e\x37\x21\x97\xd6\x53\x63\xb8\xf1\x0b"
- "\x33\xcc\xcb\x04\xce\x47\xea\xc8\xe2\x4a\x8b\xcc\xd8\x98\xeb\xe5"
- "\xc3\xe5\x8a\xd0\xfb\x72\x7c\xd2\xed\xf1\xd1\x79\x34\x86\x2e\x33"
- "\xaa\x64\xdd\x57\x68\x63\xde\x7c\x68\x5b\x36\xa1\xdd\xeb\x69\x5d"
- "\x46\x18\xed\xcc\xfd\x84\x80\x6f\xd4\x4c\xc0\xd6\x8e\x1e\x21\xa3"
- "\xfa\xf0\x8d\xc4\x67\x44\xa2\x0f\x3d\x51\xdb\x4c\x36\x85\xd1\xb6"
- "\x86\x54\x13\xa9\x37\xb4\x92\xf4\xcf\x89\x77\xe6\x49\xe2\x97\x1e"
- "\x46\xf5\x75\xd1\xcd\x84\x95\x9f\x24\x99\x5f\x12\xc5\xa6\x63\xb4"
- "\x73\x36\xcc\xd3\x1f\x35\x63\x79\x2b\x94\x9b\x48\x66\x1b\x35\x6a"
- "\x96\x10\x6f\xfc\x7e\xf2\x18\x96\x7f\x45\x60\x3c\x2b\xc2\x53\xf5"
- "\x3e\xe5\x50\x27\x5e\x5f\x01\x6d\x31\x5f\xa1\x87\xf3\xae\x10\xb2"
- "\x69\x21\x09\x48\x5f\x4e\x94\xe1\xe0\x2e\x34\x18\x0f\x91\x70\x13"
- "\x05\x3f\xe0\x38\xc9\x88\x23\x5e\xe1\x46\x7c\x7f\xfc\x34\x1c\x65"
- "\xa4\x02\x68\xa1\x6f\x5a\xec\xdb\xa6\x33\xe0\x17\x9d\xb7\x5c\x73"
- "\x84\xbf\xe6\x0c\x41\x99\x75\xf9\x5e\x0c\xee\xdc\x71\xb1\x1a\xfa"
- "\x1e\x86\x32\x80\x7a\x1a\xcd\x78\xdd\x15\x6e\x7e\x42\x19\xc8\x96"
- "\x19\x01\xab\x45\x39\xd5\xcb\x52\xb5\x1c\x5f\x9d\xc7\xc7\x5b\x2a"
- "\x92\xb8\x36\x59\xd1\x86\x1b\xe9\x25\xbd\x7f\x0e\xf0\xfa\x78\x5f"
- "\x78\xea\x83\x94\xd7\x5b\x67\x47\xee\xc7\xed\x16\x79\x5b\xf4\x02"
- "\x34\x3a\xd0\x45\xa7\x47\x22\x51\x74\xe4\x7e\xe2\xad\x93\x5d\x52"
- "\x89\xb0\x8b\x76\xeb\x3a\x0b\x2d\x4f\x13\xac\x93\x7d\x1f\x2b\xd0"
- "\x9c\x24\x80\xe9\x5e\x1a\x38\x0f\xf8\xbf\x98\x28\x9c\xe7\xf0\xdc"
- "\x7b\x9e\x9f\x7f\x2d\xbc\x3d\xc0\x0e\xd7\x9a\xfc\x0b\xa3\xa9\xff"
- "\xf4\x44\x7a\x29\xc0\x9b\xca\x41\x37\x46\xda\x69\x2e\xca\xac\x86"
- "\x39\xd6\xbb\xc1\x68\x20\x8c\xfe\x93\xcb\xb4\x68\x7a\x2a\x7b\xe6"
- "\xf5\x93\x33\xc8\x13\x7c\x31\x25\xcc\xd7\xca\xf0\x5a\xda\x89\xf6"
- "\xc3\x54\xf4\x84\x3e\x37\x09\xe6\xec\xa2\xc2\x08\xb3\x7f\x5e\x74"
- "\xe7\xee\xbd\x21\x38\x27\xe0\x78\xa3\x85\x70\x2d\xcf\x07\xea\xf5"
- "\xd4\x79\x7c\x72\xd0\x04\xd7\xd3\xc2\xcc\x6a\x56\xce\xec\x1b\xb3"
- "\x43\x9f\x1c\xa4\x63\xe1\x5c\x7e\x72\x1d\x9c\xf3\x6c\xf1\xf8\x34"
- "\x04\xca\x09\xcd\x4f\x51\x68\x35\x17\x81\xf6\xd3\x19\x0c\xd3\xc9"
- "\xb5\x56\xbf\xe5\x28\xcf\xfa\x7c\xb4\x51\x68\x9b\xa0\x7c\xa5\x60"
- "\x27\xd8\x1c\xc0\x6c\x7b\xa6\xb6\x23\xf7\xd3\x54\x9d\x6c\xf6\x78"
- "\x94\x13\xea\xd6\xc0\xec\x5a\xba\x69\xf7\xde\xb0\xa3\x61\x84\x1c"
- "\x3d\x86\xe3\xe8\xd3\x52\x9d\x2c\x22\x44\x90\xe5\xa7\x87\x90\x96"
- "\x6b\x27\xd8\x12\xfc\xce\xd9\x15\xb8\x06\xc6\x39\xda\x2f\x05\xb3"
- "\x8f\x9f\x56\xe3\xbc\x05\xf6\x24\x96\x9f\xa7\x6a\x81\x77\x25\x1d"
- "\xf9\x66\x1b\xb4\x2b\xab\x85\x6f\x8b\xb8\x6d\x16\xbb\x48\x77\x1c"
- "\x88\x65\xb4\x9b\xa0\xfe\x53\xa3\x75\xb2\x39\x01\x62\xbc\xb0\x7e"
- "\x9d\x7a\x1e\x30\xdd\x34\xf1\x18\xfc\x06\x5f\xca\xc2\x0f\xec\x8b"
- "\x17\xd8\x95\x04\xc4\x1b\xda\x94\x92\x02\xf4\x8f\x0e\x24\x76\xee"
- "\x38\x90\x0a\xbc\x62\x2d\xb6\x05\xaf\xc5\xf1\x00\xf6\xc5\x8b\xb3"
- "\x1b\x26\xa3\x07\x37\xe6\x4d\x64\x7c\xaf\x2d\x81\xb2\x2e\xdf\x03"
- "\x89\x7c\xb9\x82\x6b\x93\xdc\xc3\x0c\xf5\xcb\x2c\xf5\x75\xf9\xa6"
- "\xe9\x81\xaf\x56\x27\xfb\x75\xa0\x95\xad\x29\x48\x8c\xa6\x54\x8d"
- "\xb8\xf1\x80\xb6\x7e\x05\x7f\xaf\xe7\x71\x7a\xe3\xd1\x5a\x42\x42"
- "\x41\x5b\x97\x40\x9f\x3b\x47\x51\xb8\xfe\x34\xd1\x91\xad\x55\x78"
- "\xfd\x36\xf8\x8d\xe5\x48\x03\xe5\x01\x3a\xb2\xad\x90\xf1\x3d\xe9"
- "\x8d\xfa\xb1\xe6\x7b\x7a\x06\xe3\x7b\xfa\x31\xe4\xc7\xcf\xf1\x37"
- "\xe2\x77\xbc\x1e\x79\x97\x15\xd3\x76\xe4\x07\xbc\x62\x2c\x75\x6c"
- "\x87\x32\x4b\x3d\xa1\x6b\x7a\xeb\xda\x02\x75\x8d\x16\xf7\xa1\xa4"
- "\x98\x1a\xf8\xf6\x55\xea\x48\x59\x2d\x9e\xdb\x0a\x65\x78\x2d\xc3"
- "\xc2\xe9\x23\x88\x13\x1d\xeb\x97\x07\xc3\xcb\xe9\x3a\x1d\x29\x8d"
- "\x10\xcf\x3d\xa0\x8b\xe1\x96\xb9\x89\xe7\xa7\xb7\xf0\x13\x78\x31"
- "\x1e\x34\xbf\x3a\x96\x1f\x0b\x38\x66\xbd\x91\x7f\x47\xee\x67\x2a"
- "\x1d\x79\xa9\x8a\xb5\xad\x3e\xdf\xc0\xb0\x0d\x3a\xe0\xae\x61\x3a"
- "\xcf\xfd\x30\x1d\xe7\xcd\x8a\x02\xb4\x63\x69\xed\x70\x4d\xa4\xcd"
- "\x9c\xe9\x05\xe5\xcd\x3c\xbf\x44\x9d\x6c\x5a\xab\xb5\x0d\xc2\xb9"
- "\xae\x30\x0b\x71\xc3\xdb\x86\x22\x6c\xaf\xe5\x3c\xd4\xa1\x80\x3a"
- "\x72\x11\xef\x58\x87\xa9\x68\x7b\x08\xf0\xa9\xb1\xa9\x43\x81\x74"
- "\xe0\xf3\x1c\xc5\xf9\xfb\xe5\x51\xb4\x0d\x68\x9a\x2d\x34\x78\x1e"
- "\x64\xfe\x6b\x28\x83\xfe\xef\x8b\xc7\xb2\x5c\xa0\x81\xf5\x9f\xc3"
- "\x77\x7a\x34\x63\x88\xbc\xa1\x54\x87\xeb\x5d\x1c\xdb\x53\x1b\x46"
- "\x1b\x48\x43\xa9\x99\x98\x5f\x5f\x93\x18\xa2\xa1\xda\xb3\x1e\xff"
- "\x58\x53\xdf\xd9\x46\xa4\xf9\xa8\xff\xe0\xf2\xff\xd0\x6e\x58\x97"
- "\xa5\xdf\x43\xd0\x67\xb9\xe0\xd1\x54\xd6\xa0\xbf\xc8\xd9\x39\xf8"
- "\xbe\x0d\xcf\xbf\x0c\xeb\x38\x5c\xcb\xc1\x7a\x3d\x36\x5f\xce\xd6"
- "\x73\x66\xa0\x2d\xc7\x72\x5c\xeb\xc1\xfc\x55\x21\x3a\x47\x5f\x5f"
- "\xad\x67\xb2\x6b\x9a\xc7\xd9\x7b\x6c\xaf\xf1\x51\x2d\xb6\xd9\x5c"
- "\xb5\x5a\x8f\x7d\xc8\x4c\xa5\xe6\x06\x63\x87\x16\xe7\x38\xd5\x7a"
- "\x5c\x87\x36\x4d\x0a\x2f\x23\xd4\xfc\xda\x6a\xbd\xc4\x3e\x70\xf7"
- "\xbf\x61\xad\x7e\x41\x3f\x76\xb5\x3e\xd3\x44\xe4\x79\x1a\x4f\xaf"
- "\xe9\xa5\x54\x7b\xe9\xce\x35\x89\x1d\xb9\x4d\x91\x18\xa5\x96\xee"
- "\xbf\x37\x45\x5a\xfa\x5e\xce\xf7\x1d\xea\x3a\x88\x65\x13\x4b\xb2"
- "\xb8\xfe\x02\x8d\xc3\x67\xfd\x68\xb6\x0f\x3d\x5a\x6a\x24\xc9\xa5"
- "\xb4\x3b\xb9\x8c\xc8\x4d\xc5\x9b\x83\x0f\x94\x37\xa1\x4d\x0f\xb1"
- "\xc8\x93\x93\x9d\x51\x4f\x12\x35\x44\x79\xce\xe3\xf3\xfb\xc2\xd3"
- "\xb3\xb8\x7d\x9d\xde\x03\x3a\x69\x6d\xfd\x9c\xf3\xd5\xeb\x61\xed"
- "\x1f\x6e\xcc\xa4\x6c\x5e\xfa\x7c\xc9\x6c\x9e\x1f\x9e\xb3\xe8\xaf"
- "\x9c\x5f\x93\xbb\x50\x87\xc3\xf7\x5f\xfa\xe9\xab\xd2\x7e\x5f\xff"
- "\x39\xc6\x8d\xbe\xb6\xf7\xed\xeb\x3f\x1f\x1b\xdc\xbe\xfe\x33\xc2"
- "\x85\xbe\xaa\xec\xf7\xf5\x5f\xc3\x5d\xef\xeb\x3f\x9b\xfa\xf6\xf5"
- "\x5f\xf7\x0d\x6e\x5f\xff\xe5\xf0\xfd\xcf\x7e\xfa\x1a\xec\xa0\xaf"
- "\x5d\xae\xf7\xf5\x5f\xc7\xfa\xf6\xb5\x79\xcc\xe0\xf6\xb5\x39\xc8"
- "\x61\x5f\xe5\x3e\x14\xed\x13\xd8\xa5\x6e\x4d\x17\xf8\x73\xc5\xbf"
- "\x25\x19\xbb\x89\xbc\xce\xd0\x49\xea\x47\x37\x91\xcc\x8d\x44\x3e"
- "\x21\x11\xec\x5e\x36\x99\x4a\x8b\x1f\xd6\xd7\x97\xb6\x43\xf9\x59"
- "\x72\x32\xb5\x93\x84\x24\xa1\xfd\x6d\x3e\xdf\x10\x23\xd5\xfe\x36"
- "\xd7\xf4\xda\x5f\xe3\x3d\xbc\xcd\xfd\xf7\xcd\xf5\xed\xdd\x04\xfb"
- "\x0f\xdf\x3d\x7b\xed\x6f\x36\x93\xb7\xad\xfd\x45\x79\x34\x74\x76"
- "\x5a\xd9\x5f\xf6\x6e\xd7\x99\x8f\x6d\x6d\x6f\xee\x39\x42\xec\xdb"
- "\xde\x33\xfb\xd1\xf6\x96\xc3\x79\x69\xed\x3f\x93\x6a\xb1\xbd\xf9"
- "\x50\xa7\xd8\xf6\x1e\x8d\xc1\xf9\xf5\x4c\xa3\x6b\xb6\xf7\x4c\xa3"
- "\xa5\xdf\x65\x7c\xbf\xa1\x6c\xb2\xb5\xed\xfd\xb7\x97\x33\xb8\xa5"
- "\xc5\xe9\xca\x03\xb7\x75\x7a\x9a\xab\x12\x82\x71\x7e\xeb\x00\x99"
- "\xfc\xb9\xbc\x53\x71\xd6\xe3\xdf\x6c\xaf\x8e\x8e\x18\x19\xad\x8a"
- "\x6f\x0a\x4f\xa1\x5f\xd0\xb1\x09\xc1\x18\x5f\xc5\x38\x01\x9c\x3f"
- "\x02\x3e\x7d\x93\xb4\x76\x33\x9e\x30\xff\x25\x6a\x60\xbc\x1c\x58"
- "\xdf\x29\x37\x6f\x52\xfb\x80\x1e\x94\xb4\x28\x2b\x82\xbe\xf0\x64"
- "\xfe\xa5\xa2\x22\xed\xf1\xa0\xaf\x08\xd2\xd2\xcd\x8a\x10\xd7\xdb"
- "\xff\x45\x58\xff\xed\xff\x22\x43\x7a\xfb\x19\x4f\xe7\xda\xff\x45"
- "\x98\x53\xed\x1f\x05\xed\xef\x9e\xe2\x09\xeb\x45\xf9\x7b\xdd\x53"
- "\x14\x12\xdb\xd3\xe4\x94\x8e\xdd\xaa\x43\xe7\xb4\xfd\xa3\xa3\xb6"
- "\x47\x1c\x28\xd7\xcb\xc1\x06\x70\x73\x38\x8e\x3d\x66\xff\xda\xc0"
- "\x66\x7d\x41\x99\x4d\xd2\x4b\xb4\x49\x3a\x87\xef\xbf\xf4\xad\x7f"
- "\x73\xf5\xe0\xd7\xff\xa5\xe3\xfe\xdb\xda\xc4\x37\x33\x23\x1c\xdb"
- "\xc4\xac\xea\xbe\x36\xb1\x45\x26\xdd\x26\x7e\x59\xd7\xd7\x26\xfe"
- "\xe7\x6e\xc1\x26\xfe\xe7\x66\xd7\x6d\x62\xcb\x57\xce\xdb\xc4\x96"
- "\xf7\x5d\xb3\x89\x2d\x39\xfd\xdb\xc4\x96\x56\xd7\x6c\x62\x4b\x6b"
- "\x5f\x9b\xd8\x12\x66\x6d\x13\xff\xe3\xf0\x5d\x57\x9a\x1f\x1d\x04"
- "\x73\xb4\xf7\x39\x8f\xff\xb4\x1b\xb3\x09\x31\xe7\xff\xab\x2d\xdc"
- "\x44\x3b\xe8\x8e\xe8\x20\xb3\x7c\x32\xda\x95\x90\x8e\x8e\x58\x2f"
- "\xf3\x86\x20\x6f\x3a\x32\x39\x89\xf6\x04\xe0\x9a\x2a\x10\xda\xef"
- "\x43\x3b\x82\x46\xd0\x0d\x41\x23\x4b\xaf\x10\x3f\x38\x02\x4a\xf9"
- "\xf9\x18\xbe\x07\xd3\x0d\x01\xc3\x72\xd7\x93\xf1\x3e\x06\xe2\x05"
- "\x6d\x50\xfb\x6c\x56\x12\xb0\x41\x7e\xf8\x9d\x66\x7f\x11\x54\x71"
- "\x85\x28\x7c\x52\x41\x37\xbe\x50\x5f\xaa\x0f\xa5\xc9\x41\xa4\x22"
- "\x89\x78\x99\xe5\x24\xa0\x5c\x4e\xab\x8d\x1d\x41\x72\x93\x5f\x61"
- "\x22\xd3\x4f\x6b\x25\x1d\x05\x6b\xaf\xc2\xc2\xa9\xe6\x51\x85\x81"
- "\xa6\xcc\x58\x0f\xba\x49\xed\x81\x6d\x35\x15\x16\xaa\x68\x31\x1c"
- "\x99\xb1\x23\xd0\x87\xae\x58\x0f\x75\x77\x04\x0c\xcb\x83\xba\xcb"
- "\xd7\x93\xc0\xb2\x2b\x24\x88\x5e\x0a\x92\x83\xfe\xd5\xb8\x3f\x2a"
- "\xc8\x48\x6d\x96\x7f\x11\x04\xe7\x14\x68\x13\x29\xd6\x6f\x84\xfa"
- "\x7b\x82\x30\xc6\x05\xd8\x26\x01\x15\x50\xbf\x69\x43\x90\xc4\xf1"
- "\xd2\xca\xd6\xf5\x7c\xbb\xcc\xe3\x7f\x13\x41\xdf\x84\x03\xdb\x05"
- "\x32\xac\x40\x99\x4c\xf8\x4d\x24\xb6\x6d\xfb\x15\x32\x1e\xda\x19"
- "\x08\x6d\x08\x82\x7a\x31\xb7\x8c\x7a\xe9\xb3\x4a\xc4\xa8\x55\xdb"
- "\x4c\x3b\xf8\xb6\x7d\x07\x6d\xbb\x20\xb4\x0d\xeb\x42\xf9\x38\xba"
- "\x6f\x1b\x9e\x71\x1b\x8e\xcd\xaf\x7d\x52\xaf\x0f\xc3\x7b\xb8\x97"
- "\x36\xc5\x4a\xc4\xea\x57\x53\x1c\xe1\x25\xef\x4d\x32\x9a\x2a\x4f"
- "\xb7\xcd\x7e\xfe\x0b\x8a\x31\xc4\xe7\xdf\x24\xe3\x1b\x60\x5c\xd7"
- "\x77\x9e\x27\xd4\xf7\x74\xdb\xf1\xa0\x76\xa9\x75\x39\x7c\xfe\xed"
- "\xc5\x6c\xda\xd8\x13\x88\xf1\xaf\xa2\x9a\x3c\x39\x4d\xed\x0e\x8c"
- "\xd7\x7d\x78\xaa\x9b\x2c\x4b\xc5\xfb\xc4\x34\x55\xb5\x88\x78\xb5"
- "\x78\xb4\xab\x33\x3f\xc7\x7b\x5a\x67\x83\xac\xef\x69\x9d\x9d\x49"
- "\x3c\xbe\xd6\x13\x8f\x6f\x54\xc4\xe3\xdc\x1e\x02\x74\xd6\xc7\xb7"
- "\xba\xf0\x37\x6e\x23\x1a\x23\xfd\x9a\x16\x86\x06\xe5\xca\x69\x67"
- "\xf8\x38\x99\x4e\xbb\x1e\xef\xf1\x7c\xfd\x0d\xc8\xef\x5b\x98\x57"
- "\x7d\xf0\x3b\xf2\x4b\x4c\x22\x37\x9d\xf3\xf8\xba\xcd\xc7\x70\x7d"
- "\x98\xd1\xaf\x48\x67\xa4\x6a\xd2\xa3\xda\x1b\xd2\x55\x58\x18\xd1"
- "\x83\xf1\xb9\x15\x68\x83\xce\x7e\xe9\x23\xcb\x22\x14\xf4\x4f\x69"
- "\x00\xde\xe7\x54\x97\xc2\x81\xba\xe4\xf4\x38\x72\xe3\x68\xd4\x37"
- "\x8e\x85\x0a\x56\xae\xc4\xf1\x90\xc7\x8f\x1b\xbd\xc7\x5d\xd1\x26"
- "\x39\x21\x26\xb8\x3e\xf3\x2b\x32\x1a\xf7\xc5\x2d\x03\xba\x65\x26"
- "\x2f\x1c\xc7\x6a\xed\xa2\x4f\xc8\xd9\x44\x22\xcf\xfc\x9e\x0c\x07"
- "\x4c\x70\xe3\xd1\x0c\xe3\x31\xbc\xd9\xa7\x13\xec\x8a\x59\x73\x99"
- "\xf8\xa0\x9d\xc2\x3d\x66\x1a\xda\x75\xc4\xfc\x5d\xd0\x88\x5d\x09"
- "\xc4\xcf\xf8\x5d\xec\x48\xfd\x77\xb1\x37\xed\x34\x13\xbf\x11\x89"
- "\x44\x59\x96\x00\x58\x5c\x0b\xe3\xf3\x02\x8c\xcf\x76\x36\x3e\x2d"
- "\xf8\xa3\xb9\xc3\x53\xf0\xdd\x7f\x6e\x6c\xee\xe0\xc7\xe6\x06\xc0"
- "\xdf\x7a\x01\x7f\xc6\xb5\x41\xf2\x32\x39\x25\xd0\x46\x90\xfb\x57"
- "\x01\x15\x9a\xeb\xbd\x30\x46\x49\xef\x4c\x68\x04\x9b\x0f\x7d\xa5"
- "\xc6\x03\xa0\x0b\xcf\x71\x72\x15\x2d\x2a\xd2\x7d\x18\xd1\x46\x84"
- "\xb8\x49\xfb\xc2\xee\xb1\xf1\x3a\xd5\x5c\xfa\x5d\x8b\xc7\xd7\x3a"
- "\x28\xf7\x52\xcd\xff\xb9\x12\xf4\xb8\x90\xc5\x59\xda\xd5\x18\x33"
- "\xd5\x79\x7c\x7d\x10\x78\x11\x7c\x76\xe0\x23\xee\xbe\xdc\x37\x01"
- "\x40\x4b\x4c\x20\x73\xa3\xdf\xf4\x54\xb3\x5f\x61\x96\xf6\x99\x6e"
- "\xce\x5e\xf5\x80\x0e\xce\xc6\x13\xf9\xb2\x76\x90\x8d\x09\x64\xd3"
- "\x11\xe4\x0d\x76\x2b\x02\xed\x16\xcd\x4f\x8e\x4f\xd7\x51\x73\x78"
- "\x8c\x07\x05\xb9\x78\x61\x8c\x7c\x69\x22\xa1\x19\xe7\x41\x46\x86"
- "\x26\x02\x7d\x1b\x01\xb6\x6d\x64\xd9\x7a\xe2\xb7\x0b\xe4\x33\xbc"
- "\x1d\x7c\x9a\x82\x7f\xe8\xde\xd4\xd4\x7a\x9a\x00\xe7\x68\xc7\x7c"
- "\x36\xcb\x6e\x00\x5d\x8d\xc8\xc1\x71\x0b\xe3\xd8\x67\x33\x67\x57"
- "\x39\xdd\x1a\x37\x04\xdd\xd1\xb3\x21\x48\x05\xc7\x6d\x16\x5b\x67"
- "\xb1\x33\x34\xf7\xab\x2c\xb4\x73\x0d\xa9\x3a\x62\x04\x59\x8e\xc0"
- "\x39\x71\x43\xd0\x68\x4e\xa6\x4f\x83\x4c\x57\x11\xaf\x89\x9d\x44"
- "\x06\xed\x52\x42\x9b\xc9\xc9\xd8\x16\xb4\xad\x01\x26\x18\x47\x28"
- "\x67\xe0\x29\xa7\x80\x35\x73\xe1\xf4\xd4\x59\x71\x2a\x72\x3c\xe8"
- "\x34\xc1\xfc\xb2\x99\x5d\xf4\x4b\xbc\x2f\xd8\x90\x6a\x24\xd4\xbf"
- "\x08\x65\x08\x72\xfb\xba\xe6\xc3\x88\x4e\xe2\x18\xd3\xe7\x76\x0b"
- "\x98\x3e\xb7\x5b\xc0\xf4\xb9\x4a\xee\x3e\xbc\x08\xd7\x5d\x95\x80"
- "\x6b\x3f\x31\xae\xbf\x79\xe7\xaa\xe2\x7a\xb6\x74\x5c\xef\xbc\x20"
- "\xc2\xb5\xe6\xbf\x83\xeb\x8f\xd4\x1c\xae\x3d\x7a\xc6\x72\x78\x3d"
- "\xdc\x60\x7c\x1b\xfc\xdf\x73\x39\x16\xdc\x9e\xd8\x8b\xb8\xfd\xb6"
- "\xf1\x5a\xc5\x6d\x57\x47\x90\x0a\x8e\x41\xc7\x2d\xf0\x74\x1a\xb7"
- "\x1f\xa9\xbb\x89\x45\x7e\x88\x5f\x9a\x7f\xba\x4d\x95\x49\x1e\x04"
- "\x3b\x01\x3e\xc3\x6d\xe4\x24\x27\xc3\x76\xb5\x6a\x3e\x35\x83\x8d"
- "\xe0\x72\x8d\x74\x67\x53\x6a\xf6\xcb\x8b\xce\xfc\x98\x28\xcd\x85"
- "\x4f\xe8\x1b\x8c\xfb\x89\x4f\x22\x51\xe0\xfd\x58\xea\x7b\x71\x0f"
- "\xac\xc3\xb9\x7b\xb5\xe6\x1d\x9f\xa9\xf0\x7e\x26\xde\x43\x31\x15"
- "\x55\x44\x9b\x77\x1c\xd2\x9a\x7d\x2f\x10\xba\xe3\x62\x08\xde\xc3"
- "\xed\xc8\x6d\x57\x5b\xee\xe1\xdb\xf5\x8d\xfc\x2a\xa2\x61\xbc\xc0"
- "\x9a\xea\xfc\xc7\xf0\x57\x0e\xed\xf8\x1e\xfe\x7a\xc0\x5f\x6e\x1f"
- "\x63\x69\xf3\x5c\x3b\xdb\x6b\xa9\xb0\xc8\xc0\xdb\xc1\xed\xdc\x18"
- "\xbc\x8b\x0c\x3f\xc7\x7f\x87\xf6\xb4\x59\x9e\x09\xe8\xa5\x17\xe4"
- "\xb1\x05\xeb\x06\x99\x28\xd8\x73\x0a\xec\x37\x3e\x03\xc4\xf3\xe3"
- "\x7e\x9b\x03\x35\x4d\x5a\x4d\x0b\x69\xf7\x38\x1f\xd9\x00\x73\xbf"
- "\xb9\xb8\xc8\x80\xf7\xdc\x10\xf7\x96\x7a\x47\x80\xbe\xb5\x69\x1c"
- "\x0d\x97\x8f\xd8\x5c\x98\xa3\xa5\xc5\xd3\xf5\xb8\x86\xec\xa0\xb1"
- "\xbf\xe6\xff\xe2\xbd\x26\x0f\x16\x6f\x39\xbf\x9b\x82\xfc\x70\x5f"
- "\xf8\xde\xe7\xa2\x70\xbf\xf6\x2c\x85\xea\xfd\x74\xc2\x3f\x0f\xc0"
- "\xda\x8b\x7b\xba\xe3\x73\x47\x3f\xcf\x22\x59\x1d\x76\xf6\x74\x17"
- "\x9e\x4f\x3a\x9f\x63\x2e\xca\xd1\x76\xe4\x9e\x6f\x06\x1f\xa0\x55"
- "\xdc\x67\x7b\xba\x00\xfa\x4e\x47\xe7\xa4\xe9\xe1\x82\x9f\x23\x3e"
- "\x33\x82\x4c\x54\x22\xaf\x68\x87\x7e\x75\xe0\xea\xc4\xf0\x3d\x26"
- "\xad\xb9\x47\xed\x73\x3c\xfd\xbc\x44\x9f\xe8\x82\xc3\xfd\x5f\x4d"
- "\x85\x79\x59\xc6\x3b\x81\xf7\xb8\xdb\x88\x69\xad\xfa\x51\xbc\x07"
- "\x82\xbe\x5e\x46\x1c\x7b\x96\xad\x6e\x8f\x91\xa0\xdf\xf7\x46\x42"
- "\xad\xbc\xbb\x47\x4d\x46\xe8\x89\x72\xb6\x21\x93\xe6\x5d\x20\x81"
- "\x74\x83\xda\x27\xe7\x02\x99\xda\x73\x29\x60\xd8\x4b\x49\x44\xd1"
- "\x0d\x36\xb9\x3b\x39\xd6\x07\x9f\x9b\x7b\xf7\x9c\x56\xde\x60\xac"
- "\x41\x3f\x33\x10\xe7\x01\x6c\xbb\xe9\x92\x7a\xc4\xb6\x8b\x78\x9f"
- "\xf8\x32\xd1\xae\x78\x15\xe6\x81\xef\x8e\x7b\x66\x80\xed\x03\xdb"
- "\xc5\xcd\x07\x2e\xcc\x05\xdd\x30\x17\xcc\x52\xd3\xce\xfa\xa6\x4f"
- "\xf0\xde\xb5\x32\x73\x1d\x19\x8e\xfc\xf1\x5e\x33\x37\x3f\xcc\x83"
- "\xf9\x01\x7e\xc3\x5a\xa2\x77\x7e\x50\xcd\x26\x7d\xe6\x07\x5c\x87"
- "\xd4\x37\xb7\x11\xc0\xf2\xf5\xb3\x0d\x3e\x9d\x1a\x03\x35\xe3\x9a"
- "\xa4\xc1\x78\x1e\xf3\x1b\x8d\xb0\xcc\x15\x38\x4f\x74\xf3\xf3\x44"
- "\x19\x3f\x4f\xbc\x32\x08\xf3\xc4\x2b\x38\x4f\x9c\x26\xf2\x9d\x38"
- "\x47\xc0\xfc\xf0\x87\x7f\xeb\xe5\x3d\x30\x27\x48\xd3\xb3\xbe\xd2"
- "\x21\x7e\x8a\x8b\x8e\x9a\x61\x2e\x46\x3d\x6f\x02\xfd\xa2\x9e\x1b"
- "\x82\x40\xb7\x4d\xd7\x87\x75\x41\xb9\xb1\x38\x3d\x78\xcf\x59\xbd"
- "\x9c\x16\x66\x45\x74\x01\x1e\xd2\x2e\x13\xb9\xd1\x2f\x2f\x6b\xff"
- "\xfc\x7c\x39\xae\x5b\xcd\x45\xe9\x29\x6c\x8d\x7c\xc9\x1f\x63\x34"
- "\x3e\x6d\x44\x89\xf1\x53\x13\x55\xfb\x98\xbf\x55\x0f\x37\xaf\x0e"
- "\xf0\xea\xf9\x36\x60\xd8\x8b\xcf\x10\x85\x7e\x75\xac\x4f\xe6\x42"
- "\xa2\x7c\xef\xb3\x7c\x79\xbd\x01\xc6\xf6\x75\x66\x58\xb7\xa7\x07"
- "\x57\xb4\x90\x29\x15\x2b\xc8\xe4\xf2\xb3\x44\x55\xbe\x8a\x8c\xdf"
- "\x75\x16\x30\xb4\x5a\x3d\xa2\x87\xc3\x47\x97\x96\x7b\x2e\x60\x15"
- "\x09\xa1\xa3\x32\x83\xe1\xef\x94\xfc\x55\xb0\x9e\x19\x95\x1e\x4c"
- "\xfd\xf3\xb2\xcc\x40\x97\x03\x6b\x37\xf0\xd1\xa1\x0d\xdf\x9b\xec"
- "\xe1\x66\x97\x44\x1f\x62\x56\x04\xe0\xa6\x11\x70\xf3\xbd\x35\x6e"
- "\x70\xdd\xca\x61\x67\x16\xc3\x0e\xde\xf3\xab\x10\xfb\x17\x2b\x3e"
- "\x74\x19\x3f\xa5\xe0\x3f\x77\xd9\xe0\xa7\xf4\x82\x7b\xf8\xe9\x01"
- "\xfc\x94\x66\x03\x7e\x4e\x12\x79\x89\xd9\x1d\xfc\x5c\xd4\x71\x73"
- "\x44\x55\x7c\x13\x7b\x86\xe9\xfb\x69\xa8\x67\x9d\xc7\xf7\x53\xe7"
- "\x05\xc9\x88\x8b\xb8\xaa\x1e\x00\x57\x06\x86\xab\xcb\x6b\x5c\xc0"
- "\x55\x21\xe0\xaa\xba\x7f\x5c\x5d\x76\x84\xab\xea\xbe\xb8\x32\xcc"
- "\x1b\x5a\x5c\x71\xf9\x44\xff\x07\x70\x75\x79\x8a\x35\xae\x2e\x15"
- "\x31\x5c\x5d\x2a\x74\x1d\x57\x19\x03\xd8\xab\x0c\xde\x5e\x75\x1c"
- "\x77\x01\x57\xed\x14\xf8\xf7\x8f\xab\xf3\x0e\x70\x95\x61\xc7\x5e"
- "\x5d\xd9\x3f\xb4\xb8\xe2\xf2\x9d\xfe\x0f\xe0\xaa\x23\xdf\x1a\x57"
- "\x97\xcf\x33\x5c\x5d\x6e\x77\x03\x57\x03\xd8\xab\x0c\xde\x5e\x75"
- "\xdf\x2a\x1d\x57\x34\x14\x70\x35\x80\xbd\x3a\xe3\x08\x57\x76\xec"
- "\x55\x97\xe7\xd0\xe2\x8a\xcb\xc7\xfa\x3f\x80\xab\xae\x36\x6b\x5c"
- "\x75\xce\x60\xb8\xea\x0c\x75\x1d\x57\x9a\x01\xec\x95\x86\xb7\x57"
- "\xc6\x75\x2e\xe0\xaa\x94\x02\xff\xfe\x71\x75\xc4\x01\xae\x34\x76"
- "\xec\x55\xcf\x92\xa1\xc5\x15\x97\x2f\xf6\x7f\x00\x57\xc6\x10\x6b"
- "\x5c\x75\x97\x31\x5c\x75\x97\xba\x81\xab\x01\xec\x95\x86\xb7\x57"
- "\xe6\x93\x2e\xe0\xca\x00\xb8\x1a\xc0\x5e\x65\x38\xc2\x95\x1d\x7b"
- "\x65\x3a\x34\xb4\xb8\xe2\xf2\xd9\xfe\x0f\xe0\xca\x5c\x62\x8d\x2b"
- "\xe3\x65\x86\x2b\xa3\xc1\x29\x5c\x75\x8a\x70\xd5\x7c\x7d\x58\x77"
- "\x26\x5b\x0f\xbe\xb1\x8a\xc7\xd5\xeb\xab\x13\x37\xad\x23\xf2\xfd"
- "\x8b\x4a\xac\xd7\x82\x0a\xd9\xcd\xb6\x98\x02\x5c\x70\x98\x32\xae"
- "\x06\x4c\x9d\x63\x98\xd2\x9c\x01\x4c\xfd\xb3\x44\xde\x90\x7a\x1e"
- "\x71\xc2\x61\xa8\x74\x15\x60\x08\xd7\x85\x32\x45\x80\x94\x35\xe0"
- "\x4b\xe7\x78\x2c\x29\x88\x6c\x50\xb0\x14\x09\x58\x3a\x65\x8b\xa5"
- "\xe3\x02\x96\xe6\x38\x58\x03\x2e\x75\x80\x25\xdd\xc0\x58\xda\x85"
- "\x31\x84\xb5\x57\x09\x4b\x1f\x0b\x31\x84\x7d\x2b\xf4\x72\xa3\xbf"
- "\x44\x2c\x29\x48\xab\x35\x96\xe8\x63\x0c\x4b\x34\xcc\x75\x2c\x65"
- "\x54\x3b\xc6\x12\xef\x4f\x29\x3c\x56\xba\x87\x25\xf0\xad\xac\xb0"
- "\x34\xb0\x1f\x25\x60\x49\x3e\x6b\x68\xb1\x64\xe3\x47\xfd\x60\xb1"
- "\xe4\x11\x6c\x85\x25\x85\x8c\xad\xfb\x14\x32\x87\xeb\x3e\x33\xcc"
- "\x5d\x78\xcf\x09\xdf\x0d\x36\x5d\x52\x3f\x6a\x82\x39\x0d\xdf\x11"
- "\xc6\xfb\x14\x07\x12\x1a\xe5\x88\xa7\xdc\x8b\x24\x30\x27\x89\x4c"
- "\xf5\xe9\x64\x58\x31\x02\x56\xb6\x5e\x24\x8a\x9e\x1e\xc0\x49\x37"
- "\x51\x74\x81\xbc\xbb\x7a\x62\x7d\xea\xa2\xdb\xc8\x7b\x17\x1a\x61"
- "\x2e\xab\x21\xe5\x70\x4d\x0f\x1f\x87\x34\x6f\x52\x8f\xd8\x96\x86"
- "\x71\xc8\x93\x44\xbb\xe8\x15\xd0\xbf\xc2\x6d\xfd\x77\x3d\xe7\x48"
- "\xff\x47\xac\x74\x5f\x2a\xd2\x3b\xf7\x5e\x81\x8b\xf3\x11\x77\x9f"
- "\x2a\x81\xe9\xde\xa2\xf7\x9d\x83\xa0\xf7\x9d\xbc\xde\xdd\x9a\x8f"
- "\x14\x9e\x8e\x9f\x7f\x14\xd9\x0a\xee\x99\x82\x4e\x66\x23\x2c\x76"
- "\x01\x6d\x04\xfa\x2f\x5d\x7e\xe9\x93\x6d\xe7\x1b\xb4\x0f\x17\x14"
- "\xd7\x17\xe1\xdc\xe4\xd0\x8f\xe1\xed\x44\xe6\x46\x66\x27\x38\x3f"
- "\x66\x18\x99\x39\xa8\xf1\x47\xc5\x75\x19\x57\xcf\x5e\x1c\x19\x78"
- "\xee\x71\xc3\x8f\x41\xdc\x94\xda\xe0\xe6\x6a\xd8\x0b\xd7\x70\x73"
- "\x7d\xb4\xb5\xbd\xf0\x3c\xc2\xec\x85\xe7\x61\x67\xe6\x9e\x01\xf0"
- "\x74\x50\x84\x27\x83\x80\xa7\x1b\xbe\xc2\x18\xa5\x44\x3c\x55\x0e"
- "\x6a\xdc\x51\xe1\x75\x72\x68\xf1\x34\x78\x71\xc7\x6b\x1b\x4f\x37"
- "\x54\x5b\xe3\xc9\x6b\x38\xc3\x93\x97\xb7\xfb\x78\xca\x10\xd9\xa7"
- "\x0c\x91\x7d\xf2\xbe\x0f\x63\x93\x12\xf1\x64\x18\xd4\x78\xa3\xe2"
- "\xc6\x5b\x87\x16\x4f\x83\x17\x6f\xbc\xb6\xf1\xe4\x4d\xac\xf1\x34"
- "\x6c\x09\xc3\xd3\xb0\xa8\x41\xc0\xd3\x41\x5b\x9f\x98\xe1\x69\xc4"
- "\xf3\xe8\x3f\x4b\xc3\x93\x2c\x6c\x50\xe3\x8c\x8a\xe1\x6b\x86\x16"
- "\x4f\x83\x17\x67\xbc\xb6\xf1\x34\x22\xc2\x1a\x4f\xde\xfb\x19\x9e"
- "\xbc\xf7\xb9\x8f\x27\x8d\xc8\x3e\x69\x44\xf6\x49\x79\x1a\x63\x91"
- "\x12\xf1\x34\xb8\xf1\x45\x85\xcf\x91\xa1\xc5\xd3\xe0\xc5\x17\xaf"
- "\x6d\x3c\x29\x2b\xad\xf1\x34\xc2\xc4\xf0\x34\xc2\x38\x08\x78\x12"
- "\xd9\x27\x8d\xc8\x3e\xdd\x34\x16\x63\x90\x12\xf1\xa4\x1f\xd4\xb8"
- "\xa2\x62\xe4\xf0\xa1\xc5\xd3\xe0\xc5\x15\xaf\x6d\x3c\x8d\xd4\x5b"
- "\xe3\xc9\x77\x16\xc3\x93\xef\x4c\x67\x63\x41\x96\x18\x90\x18\x4f"
- "\x8e\xd7\x76\xfe\x71\xb6\x6b\x3b\x49\x31\x20\x5c\xe7\xb9\x1c\x4f"
- "\xf4\x9b\xf3\xff\x6b\x3c\x11\x31\x64\x89\x03\x5d\x7b\x31\x20\xff"
- "\xc9\xd6\x18\xba\x69\x27\xc3\xd0\x4d\x25\x8e\x30\x64\x14\x3f\x93"
- "\xf6\xb5\xe8\x99\xb4\xf3\x44\xbe\x3f\x41\x2b\xaf\xe7\x9f\x49\xc3"
- "\xe7\xd1\xea\x5b\xdb\xc8\xb6\x2b\x44\x39\x22\x96\x28\x67\x27\x66"
- "\xd2\x3c\xb4\x21\xc9\x6a\x9f\x97\xce\x92\xa9\x3d\x80\x99\xdc\x73"
- "\xfc\x73\x69\x80\x9b\x8f\x9a\x3b\xc9\xbb\x09\xf8\x5c\x5a\x35\xa9"
- "\x00\x3a\x63\x21\x8b\x07\xa1\x1d\xe1\x9e\x49\x5b\xf5\x2a\xe0\x60"
- "\xd4\x42\xbb\xcf\xa4\x65\x4b\x7c\x26\x2d\x05\x70\x60\x00\x1c\x5c"
- "\x46\x0c\x1c\xb2\x7a\x16\x6d\x57\xb6\x28\x06\xb4\xc2\x41\x0c\xa8"
- "\xc9\xb9\x7b\x12\x83\xfe\x2c\xda\x77\xa2\x67\xd1\x2c\x31\xa0\x45"
- "\x60\x3b\x24\xeb\xfd\x27\x0e\xf7\x3f\x40\x1b\x61\x02\x9b\x30\x1b"
- "\x9f\x2d\x37\x08\xf1\xe2\xf4\x38\x7c\xf7\x37\x3d\xd8\x08\xb6\x02"
- "\x9f\x1f\x7f\x73\x45\x2d\x17\xef\x6b\x48\x6d\x22\xdb\xba\x89\xd2"
- "\x47\xcf\xdb\x05\xff\xf4\x94\x1e\xb0\x0d\x26\x98\x97\x40\xd7\xc3"
- "\x7b\x92\xc1\x36\x5c\x04\xdb\x90\x0c\xb6\xe1\x32\xd8\x86\x96\x5a"
- "\xce\x36\xd0\x17\xcc\x53\x31\x2f\x78\xc5\x39\x32\xb9\xec\x1c\x99"
- "\x82\x36\xc0\x54\x94\x97\xd5\xe3\x9f\x1e\xa9\xf7\x4f\x57\xc3\xb9"
- "\x58\x86\x81\x2e\x6d\x4e\x12\xe1\x6c\x3d\xea\x5e\xb5\x0a\xed\x41"
- "\xc0\xf2\x9e\x6c\x42\xdc\xc1\x41\x8f\x38\x26\x28\xc6\x81\x03\x1b"
- "\xe0\x36\x16\x6c\xe2\xc0\xbb\xdc\xb4\x01\x88\x85\x5d\x16\x1b\xe0"
- "\x16\x16\x6e\x76\xf8\xfe\xcf\x00\x58\xa8\x76\x02\x0b\x06\x27\xb1"
- "\x50\x88\xf9\xb4\xed\x60\xe1\x14\x60\xa1\x09\xce\xb5\x31\x2c\x5c"
- "\xb6\x83\x85\x5b\xd6\x5c\x7d\x2c\x58\xc7\x64\x7e\xb8\x58\xf8\x69"
- "\xa8\x6b\x58\xc8\x70\xc2\x2e\x64\x38\x6b\x17\xda\x31\x0f\x75\x5f"
- "\x2c\x64\x80\x5d\xc8\x00\xbb\x90\xc1\xdb\x85\xf3\x76\xb0\x30\x7a"
- "\xe3\xd5\xc7\x82\x75\x3c\xe5\x87\x8b\x85\x5b\x1d\xe7\xbf\xe8\x1f"
- "\x0b\x4e\xd8\x85\x0c\x27\xed\x02\x0d\xc5\xfc\xcd\x76\xb0\x00\x76"
- "\x21\x03\xec\x42\x06\x6f\x17\xce\xd8\xc1\xc2\x6d\xcf\x5f\x7d\x2c"
- "\x58\xc7\x42\x7e\xb8\x58\xb8\xdd\xe1\xfe\x5f\xfd\x63\x41\xe3\x84"
- "\x5d\xd0\x38\x69\x17\x68\x29\xe6\x3d\xee\x8b\x05\x0d\xd8\x05\x0d"
- "\xd8\x05\x0d\x6f\x17\x8e\xd8\xc1\x82\x6a\xc7\xd5\xc7\x82\x75\x1c"
- "\xe3\x87\x8b\x85\x31\xb1\x2e\x62\xc1\x09\xbb\xa0\x71\xd6\x2e\x18"
- "\x30\x5f\xb0\x1d\x2c\x80\x5d\xd0\x80\x5d\xd0\xf0\x76\x21\xc3\x0e"
- "\x16\xee\x28\xbb\xfa\x58\xb0\x8e\x41\xfc\x70\xb1\xf0\xb3\x94\x7e"
- "\xb1\x40\xfb\x62\x01\x63\x08\xb8\x7e\xc4\x7c\xdc\x1c\x16\x9e\xd1"
- "\xca\xbb\x29\x62\xa1\x96\xbc\x98\x26\xc2\x42\x11\x5b\x47\x58\x70"
- "\xb0\x5d\x8c\x03\x7c\x7f\x09\x71\x00\xeb\x07\x23\xe8\x9d\x16\x67"
- "\x06\x73\xcf\x2b\x15\xa5\xc7\xe2\xfa\x01\xe3\x0c\xb8\x86\x70\xbc"
- "\x7e\x08\xdc\x3d\x28\x18\x88\x07\x0c\xb4\xdb\x5f\x47\x0e\xfa\xfa"
- "\xe1\xbb\xab\x84\x01\x58\x4b\xbe\xa2\x71\x07\x03\x63\x1d\xee\xff"
- "\xe1\x18\x03\xe0\x23\x38\x85\x01\xe6\x27\xf4\x8f\x81\x8c\x46\x01"
- "\x03\xe0\x2f\x14\x65\xb4\xa1\x7f\xc0\x30\x90\xd1\xe4\xd8\x3f\xb8"
- "\xf3\xb5\xab\x8f\x81\x41\xf6\x0f\xae\x59\x0c\xfc\x3c\xdd\xe1\x3b"
- "\x8c\x68\xcb\xc1\xee\xcf\x1e\x77\x1b\xa1\xab\xd5\x8f\xe6\x9e\x23"
- "\x81\x2f\x3d\x43\xa6\x62\xde\x98\xfd\xdd\x9d\x72\x4d\x22\xfd\x1a"
- "\xdf\xad\x36\x42\x3f\x30\x5f\x28\x87\x8f\xef\x02\xbc\x1a\x62\xf5"
- "\x64\x1b\x60\xe1\x25\xe8\x03\xe6\xae\x1f\x91\x78\x7d\x58\xbd\xe1"
- "\x43\xd2\x7d\x49\x4d\xea\xa2\xcf\x91\xf0\x20\xda\xd3\xd0\xac\xc5"
- "\x77\x18\x15\xda\xf5\x1f\xe2\x7b\xe2\xc3\x96\xa5\x12\xf9\x05\x45"
- "\x50\x08\xc6\x94\x26\xa6\x12\x65\xe9\x39\x16\x47\xda\x76\x81\x90"
- "\xe3\x80\x52\xa6\xf7\xa0\x32\xcf\x8d\x83\x10\x43\x8a\x02\xbd\x37"
- "\x5b\xf4\x7e\xdc\x3a\x86\x24\x77\xe2\x7d\x46\x27\x62\x87\x57\xe5"
- "\x7d\xc6\xef\xfa\xbe\xcf\xe8\x5a\xec\x70\x5c\x62\xbf\xcf\x11\xf1"
- "\x7e\xc0\xa6\x14\x6e\xdc\x73\x7a\xed\x01\xdb\xdf\x90\x5a\xc3\x3d"
- "\x1f\x8d\xe3\x1c\xc7\x3c\xe2\x23\x13\xfa\x8b\x18\x41\x3c\xcc\xde"
- "\xd3\xd3\xb3\xd4\x40\xe4\x66\xff\xf4\x14\xc4\x84\x79\x6d\x80\x57"
- "\x0e\xf4\xa9\x21\xba\x05\xf4\x7e\x91\x34\xb4\xf2\x3a\x4f\x6b\x01"
- "\x5d\xde\x35\x9e\xae\x0d\x1a\x36\xc1\x40\x94\x99\x9f\x13\xe5\x32"
- "\x7c\xe7\x18\xe6\x81\x5d\xe0\x13\x54\x3c\x43\x26\xc3\x7c\x10\xd1"
- "\xc3\xdb\x06\xb3\x25\xae\x84\x73\x04\x60\xe2\xa5\x04\xc0\x04\xcc"
- "\x5e\xaa\xa5\x88\x89\xbb\xde\xf2\x5c\x67\x27\xbe\x2c\x01\x13\x5c"
- "\x7c\x39\x06\x30\xd1\x2a\x60\xa2\x37\xae\xec\x60\x4e\xd0\x2e\x72"
- "\xe3\xd9\x42\x3b\xf6\xc0\xed\xb8\xf2\x77\x7c\x5c\x59\x64\x0f\x5c"
- "\xc3\xc6\x2f\x1c\xe7\xc4\x74\x8c\x8d\xea\x81\xb1\xd1\x61\xc1\x86"
- "\x61\x60\x6c\x8c\x0f\xb3\x83\x8d\x42\x11\x36\x1a\x45\xd8\x60\x71"
- "\xa6\xa2\xf4\xb6\xbe\xd8\x18\x7f\x72\x68\xb0\x61\xf3\xdc\xcf\x0f"
- "\x16\x1b\x77\xef\x91\x8e\x8d\x0c\x27\xec\xc6\x77\x3c\x36\x32\x9c"
- "\xb0\x1b\x13\x62\xec\x60\xa3\x5d\xc0\x46\x86\xc8\x6e\xf0\x71\xa7"
- "\xa2\x0c\x3b\x76\x63\xc2\x37\x43\x83\x0d\x9b\x67\x78\x7e\xb0\xd8"
- "\x98\x78\xcc\x05\x6c\x38\x61\x37\xbe\xb0\x60\xc3\x09\xbb\x11\x9c"
- "\xd5\x17\x1b\x34\x54\x84\x0d\x91\xdd\xe0\xe3\x50\xe8\x73\xf6\xc1"
- "\xc6\x24\xcf\xa1\xc1\x86\xcd\xf3\x38\x3f\x58\x6c\x4c\xd2\x49\xc7"
- "\x86\xc6\x09\xbb\xf1\x1e\x8f\x0d\x8d\x13\x76\xe3\x9e\x52\x3b\xd8"
- "\x28\x15\xb0\xa1\x11\xd9\x0d\x3e\x2e\x55\xa4\xb1\x63\x37\xee\x1d"
- "\x33\x34\xd8\xb0\x79\xb6\xe6\x07\x8b\x8d\x7b\x1d\xee\x7f\xdd\x0f"
- "\x36\x9c\xb0\x1b\x99\x16\x6c\x38\x61\x37\x26\xd7\xd8\xc1\x86\x41"
- "\x84\x0d\x91\xdd\xe0\xe3\x54\x45\x1a\x3b\x76\xe3\xbe\x69\x43\x83"
- "\x0d\x9b\xe7\x64\x7e\xb0\xd8\xb8\x3f\xc0\x19\x6c\xa4\x1b\xec\xac"
- "\x53\x5a\x19\x36\x7a\x80\x46\x8c\x0b\xf1\xda\x04\xfa\xa7\x08\x87"
- "\x35\x0b\x62\x62\x49\x3a\x91\x73\xb8\x30\x88\x71\x71\x7f\x23\xe2"
- "\xe2\xee\x58\xc0\xc5\x57\x3c\x2e\x2c\xeb\x12\x2e\xf7\x0a\x5b\x9b"
- "\x58\x62\x56\x96\xf5\xc9\x8b\xb8\x66\x8d\xb5\x60\xe2\x97\x73\x3c"
- "\xe3\x06\x01\x13\x56\xcf\x3d\x88\x30\xb1\xd0\xc1\xfa\x64\xbe\xeb"
- "\x98\x78\x05\xd6\xae\x3d\x83\xfd\xee\x93\x05\x13\x9f\xbb\x8b\x89"
- "\x29\xfd\x3e\xff\x60\x1f\x13\xbc\x9f\xe1\x10\x13\x82\x6f\xc1\x30"
- "\xf1\x45\x3f\x98\x98\xd2\xda\x17\x13\xbc\x5f\xc1\xe5\x21\x60\xbe"
- "\x85\x25\x86\x65\xf1\x2f\xac\x31\xf1\xc0\xca\xa1\xc1\x84\x8d\x7f"
- "\xf1\x83\xc5\xc4\xaf\x42\x1c\x61\x22\x5f\x6e\xae\x86\xa3\x06\x0e"
- "\x2d\x1c\xb5\x26\x39\x99\x51\x26\x37\x73\xf9\xc9\xf9\x31\x63\x7b"
- "\xfe\x3a\xfa\xc2\xe3\x91\x48\x43\x37\x2b\xb8\x1c\x64\x16\x1e\xa6"
- "\x61\x04\xf3\x21\x6a\x7d\x64\xd1\xa8\x13\xa4\xbd\xde\xc2\xcb\x67"
- "\x33\x09\x81\xfe\x33\x3a\x39\xc9\x62\x74\x21\xd7\x21\x1d\xcd\xbd"
- "\xe0\x07\x65\x5e\x3c\x4f\x2e\xc7\xaf\x49\x2e\x47\x5e\xb6\x75\xdf"
- "\xc0\xd3\xa8\x4c\xd9\x44\x25\xae\x1b\x78\x61\x9d\x16\xba\x61\x48"
- "\x67\xba\xee\xf6\x50\x93\x4c\x11\x28\xa6\xa3\x0f\x13\x31\xdd\x8d"
- "\x3c\xbf\x20\xab\x7e\xdc\x41\x88\x8f\x4c\xc5\xfa\x92\x2a\xb7\xf4"
- "\xc5\x9b\xe3\x39\xa2\x3d\x1e\x78\x8e\xb7\xe2\x79\x1d\x21\xc3\x81"
- "\x1e\xf9\x0e\x8f\xe5\xda\x8d\xf4\xc3\xe9\x30\x8f\x10\x8e\xbf\x4c"
- "\x11\x6c\x96\x93\x60\xd6\x2f\xa2\x28\xeb\x6d\xb3\x8a\xe4\x5b\xd7"
- "\x31\xc2\x22\x2f\x31\x1d\xd2\x50\x79\x2f\x8d\x0f\xd7\x8e\x61\x72"
- "\xec\xdb\x14\x71\x3b\x18\x1d\x99\xc4\xd3\x29\xa1\x5f\x53\x7b\x75"
- "\x59\x18\x1a\x64\xa1\x03\xfc\xde\x0c\xba\xd0\x36\xc0\x78\xe3\xe5"
- "\xe0\x0b\x3a\xd8\xc3\xcb\x22\x44\xcc\x73\xb8\x4c\xa6\x2b\xe3\xe5"
- "\x65\xce\xbd\x10\x05\xb4\x23\xcd\x9b\x15\xa1\xbd\x7c\xb3\x95\xc4"
- "\xa2\x57\x9a\x6d\xbc\x89\xe3\xdb\x06\xe3\x4c\x2e\x53\xf1\x72\xb8"
- "\x09\x69\xe1\x9a\x30\xd6\x2f\x65\xaf\x5e\x4d\x72\x05\x9e\xd3\x8a"
- "\x68\xfd\x98\x8c\xcd\x9d\xd0\xb7\x99\x7d\xe9\xbd\x6c\xe9\xfd\x19"
- "\xbd\xbe\x0d\xe8\x23\xfa\xd2\x2b\x6d\xe9\x47\x31\xfa\x4b\x21\x40"
- "\x1f\xd9\x97\xde\x38\xd2\x86\xfe\x27\x8c\xfe\x72\x09\xd0\xab\xfb"
- "\xd2\xab\x6c\xe9\x03\x38\xfa\x91\x32\xd4\x4d\x54\x5f\xfa\x10\x5b"
- "\xfa\x9b\x19\xff\x0e\x3d\xd0\x47\xf7\xa5\xcf\xb2\xa5\xbf\x85\xd1"
- "\x77\x87\x01\x7d\x8c\x2d\x7d\x05\x47\x4b\xee\xe0\x69\x7f\xca\x68"
- "\x8d\x95\x40\x1b\x6b\xa7\xaf\x1e\x3c\xef\x60\x9e\x7e\x34\xa3\xff"
- "\x8e\x00\x7d\xbc\x1d\x5d\xd9\xd2\xdf\xca\xfa\x7a\x53\x04\xd0\x27"
- "\xda\xd1\x95\x2d\xfd\x6d\x8c\xde\x33\x11\xe8\x53\xec\xe8\xca\x96"
- "\xfe\x76\x46\x7f\xbd\x16\xe8\x53\xed\xc8\xde\x9a\x7e\xe4\x30\x25"
- "\xd0\xa5\x97\x65\x5b\xc6\x8f\x95\xdc\x6d\x79\x8f\x61\xbc\xbd\xa3"
- "\xe1\x9a\x2c\x3b\x72\xb7\xa5\xbf\x83\xd1\x8f\xa8\x06\xfa\x2d\x7d"
- "\xe9\x89\x8c\xd1\x93\x7b\x78\xfa\x9f\x31\x7a\x5f\x94\xe5\x56\x3b"
- "\xb2\xc7\xf3\x5a\x7e\x9c\x06\x32\x5a\x8f\x7c\xa0\xcd\xb1\x23\x77"
- "\x31\xed\x58\x46\xfb\xb3\xc3\x40\x9b\x6f\x47\xe6\x62\xda\x3b\x19"
- "\xed\x4f\x52\x80\xb6\xd0\x8e\xbc\xc5\xb4\x3f\x67\xb4\x37\x67\x01"
- "\x6d\x89\x9d\xf6\xde\x21\xa2\x0d\x62\xb4\x3f\xcd\x01\xda\x52\x3b"
- "\x7a\x11\xd3\x8e\x63\xb4\x63\x51\x87\x95\x76\xf4\x22\xa6\xbd\x8b"
- "\xd1\xde\x8a\x63\xad\xca\x8e\x4e\xc4\xb4\xbf\xa0\x23\x6f\xaf\xe2"
- "\x6d\xeb\x1e\x5b\x5a\xc0\x80\x16\xec\x50\x2d\xd8\xc2\xf1\xb4\x60"
- "\x4c\x75\x05\xb3\x6b\xfb\x90\xce\x42\x43\xe5\xc6\x7b\x45\xf3\xc0"
- "\xdd\xb4\xc0\xbf\x90\xb7\x7f\xd5\xb6\xfc\xa8\x5c\x21\xa6\x9d\x40"
- "\x0b\xee\x8f\xe6\x69\x0f\xf6\xa5\xf5\x12\xd3\x4e\xa4\x05\xe3\x6a"
- "\x78\xda\x9a\xbe\xb4\xca\x5e\x5a\x5a\xf0\x8b\x53\x40\x73\xb8\x9c"
- "\xb7\xab\xa2\x76\xde\x23\xe2\x37\x89\x16\xdc\xad\xe7\xf9\x69\xfb"
- "\xf2\x53\x89\x69\xef\xa1\x05\x53\x52\x78\xda\x63\x7d\x69\x43\xc4"
- "\xb4\xf7\xd2\x82\x60\x6f\x9e\xb6\xb6\x2f\x6d\x96\x98\x76\x32\x2d"
- "\xb8\x27\x88\xa7\xad\xb3\xa5\x2d\x67\x73\x90\x9c\xd7\xd3\x7d\xb4"
- "\x60\x72\x28\x4f\xdb\x68\x35\xc7\xca\x65\xdc\x18\x2b\x67\x74\xf7"
- "\xd3\x91\x3f\x3f\xc6\xeb\xf3\x94\xd5\xdc\x9a\x2d\x1b\x89\x73\x4a"
- "\x19\xea\xf3\x85\xb9\x3a\xa0\xfd\x25\xcf\xaf\xc9\x76\xee\xe3\xdb"
- "\x37\x05\xce\x35\x5b\xe6\x27\x98\x77\x74\xf6\xfc\x9e\xc4\xbb\xc8"
- "\x8d\xe7\x14\xd3\x6b\xd9\xdc\xc8\xef\x53\xac\x98\xc1\xfd\x36\x57"
- "\xc5\x2b\xc3\x0d\xd4\x28\x2e\xcb\x93\xd3\xc6\x89\x06\xa2\xc0\x9c"
- "\xde\xd4\xbf\xa8\x46\x07\xe5\xfa\xb1\xf1\xba\x8e\x82\xe9\xa7\x74"
- "\x32\x13\xb7\x27\x1e\x7c\xd7\xe9\xc8\xeb\x75\xf8\x3d\x2f\x1b\xf7"
- "\x49\x0c\x91\x99\x8a\xa7\xeb\x71\x5f\xc5\x0a\xf8\x9d\x0b\x07\xb7"
- "\x87\x21\xf8\x98\xf4\x05\x12\xa2\x5d\x6f\x24\x67\x53\x89\x9c\xdb"
- "\xb3\x5b\x11\x7a\x37\x5d\x1b\x3b\x15\xda\x12\x02\xf5\xc6\xb4\xc0"
- "\x6f\xae\x2d\xb8\x87\x69\x61\xa8\xb7\x36\xa9\x1b\x69\x36\xeb\xfd"
- "\x2b\x42\xe8\x73\x8b\xbf\x49\xd4\x90\xdb\xcf\x29\x42\x39\xdb\x85"
- "\x79\x6f\xcd\xfe\xa1\xde\x5c\xbe\xdb\xef\x62\x7f\xcd\xe5\xba\x55"
- "\xcc\xd8\x89\x39\x6e\x31\xd7\xad\x25\xcf\x2d\xab\x67\xc6\x96\x4b"
- "\x60\xaf\x68\xe5\x5e\x1d\x97\x47\x57\x11\x7a\x9a\xeb\x5f\x36\x6d"
- "\xa4\x81\xab\x3b\xcd\xdd\x5b\xb2\x70\x8f\x6d\xad\xe6\x1c\x69\xe1"
- "\xcf\x21\x7f\x9e\xe7\x3c\x5b\x9e\x78\x9d\x7e\xcc\x5e\x1d\x7d\x6d"
- "\x75\xa7\x29\x3f\xb9\xd1\xac\x4c\xae\xa3\xf9\x1a\x5d\x43\xbc\x8e"
- "\x70\x7d\x55\xcc\x38\x41\x47\x2c\x6c\x30\xe7\x27\x1f\x84\xf2\xc6"
- "\x06\x43\x37\x57\xde\xa2\x98\xa1\x42\xbf\xf9\x92\x32\xad\x99\xe6"
- "\xa7\xe9\xb4\xb7\x74\x93\x56\xc5\x0c\xce\xaf\xc2\x72\xba\x43\xa3"
- "\x43\x19\x9b\x77\x68\x1a\x3d\x02\x88\xe2\x92\x6f\x5a\x73\x47\xc1"
- "\x8c\x10\xcb\x7e\x76\x96\xba\x90\xaf\x8e\xe7\xe5\x74\xce\x5e\x45"
- "\x68\x2d\x97\xb3\xb7\x60\x46\xbe\x4e\xf6\x18\xb7\x3f\x9f\xce\x22"
- "\x4b\xe7\x79\xa4\x20\x0f\xfb\xfb\x9a\x10\x1f\x5a\x14\x1a\x04\xfc"
- "\xf5\xe0\x7b\x67\x31\x6c\xcc\x30\xea\x64\x53\x73\xd8\xf7\x47\xbc"
- "\x74\xb2\x07\x0d\xfc\x77\x3f\x9d\x4c\xbf\x85\xff\xae\xb2\xe4\x4d"
- "\xb6\x9f\xc7\x79\xba\x11\xb0\xe0\x67\xde\xa5\xf6\xc2\x75\x03\xd7"
- "\x1e\xff\xe9\x46\xd5\x6d\x44\x76\x56\xf1\x48\x15\xd4\xe9\xc7\xf4"
- "\xf4\x48\x06\xfc\xf5\xe1\xff\xea\xf9\xbf\x14\x69\x38\xbc\xfb\x15"
- "\x77\x82\x2e\x9a\x98\x7e\x1e\xe1\xf6\x81\xe6\x70\x05\xd8\xa3\xbe"
- "\x9a\x26\x8e\x6f\x51\x85\xd5\xde\x37\xc1\x93\xee\xb9\x77\xf2\x7d"
- "\xf7\xff\x72\xca\x03\xcb\x57\x3c\x15\xb3\x72\xd5\xd3\xb1\x71\xcf"
- "\xac\x8e\x5f\x93\xb0\x36\xf1\xd9\xa4\xe4\x94\x75\xeb\x37\xa4\x6e"
- "\x4c\x03\x3e\xbd\xfb\x7f\xd3\x5d\xa1\x32\x83\x9c\x80\xae\x1f\x86"
- "\x3a\x1e\xe5\xf6\x79\xc2\x32\x86\xb9\x47\x0c\x0a\x95\xfd\xf5\x48"
- "\x43\x00\xac\x01\xc1\xff\x6e\x57\x3c\x3a\x07\xf7\x6d\x04\xfc\xcb"
- "\x1a\x4a\x1f\xd5\xe2\x9e\xd5\xad\x8a\x47\x43\xeb\xf5\x8f\x6a\x71"
- "\x8f\xf5\xa3\x01\x6d\x24\xf0\x0e\x22\x3b\xa7\x78\x34\x18\xcf\x57"
- "\xdc\x49\xc8\x31\xb8\xd6\x1e\xcf\x3b\x94\x24\xe0\xe5\x51\x54\x5f"
- "\x38\x8a\xb6\x23\xff\xc2\x62\xda\xa6\xdf\x14\x4b\x72\xe1\x37\x8c"
- "\x09\xe5\x59\x45\x98\xe7\x51\x58\x75\x98\xb3\xc9\xe8\xf2\x62\xda"
- "\xba\x65\x14\x6d\x7d\xae\x98\xb6\x57\x8c\xa2\xba\xc0\x42\xe2\xdd"
- "\x51\xf0\x28\x8c\xf7\x47\x95\xdc\xb8\x86\xf3\xe6\x91\x8f\x54\xe7"
- "\xc1\xb9\x89\x46\xe2\x51\x01\xbf\xa1\xcc\x70\x54\xc5\xda\x7d\xe0"
- "\x62\xa7\x27\xf4\xb7\x94\xf6\xc4\xcb\x72\xa1\x1e\xa6\x8f\xb0\x71"
- "\xc7\xc0\x83\x81\xfa\xf4\x0d\x9d\x2d\x44\xa7\x08\xc3\x7d\x43\xb0"
- "\x3e\x9f\x86\x92\x76\x82\xfc\xde\x4c\xea\xf4\x4c\xbe\x85\x1a\x81"
- "\xd6\xcb\xbc\x29\x5e\x06\xf5\xb5\x02\x6f\x83\xb8\x3f\x41\xab\xd6"
- "\xa4\xa8\x12\xd6\xc5\xc7\x8f\x1b\x46\x82\xb8\xbf\x44\xbc\xdf\x7a"
- "\x0a\xe6\x6b\x7f\xb9\x98\x1e\x83\x7e\x6a\xa1\xbf\xb5\x27\x61\xe5"
- "\x03\xd8\x20\xd0\xa7\x7c\xe0\x9b\x01\xe5\x87\xe1\xfb\x61\x68\x7b"
- "\x2d\xb7\x7f\xb3\x62\xe1\x1b\xb4\x20\x6c\x32\xb4\x13\xe7\x4a\x15"
- "\xe6\x77\xbf\xb4\x21\x52\x06\xfd\x2e\x04\xba\x5a\xd5\x2d\x64\xec"
- "\x59\xc5\x63\x9e\xd0\x8e\x2a\xf8\x8e\xf4\x6f\xa1\x1e\x81\xfe\x18"
- "\xeb\xd7\xc2\x9d\xf8\x1b\x64\xa5\x2d\x1b\x45\x73\x3a\x0a\xc2\x74"
- "\xb8\x6f\x05\xb7\xf7\x26\xfc\x06\xb9\xd4\x02\x6d\xfe\xa5\xcc\x48"
- "\x19\xac\x9f\x65\x15\xbd\x3c\xc3\xaa\xb1\x4d\xd8\x0e\x5c\x93\x7f"
- "\x04\x9e\xac\xb9\x47\x4d\xee\xee\x24\xb2\x8f\x5a\x09\x29\x2d\xa6"
- "\x95\x70\x94\xc2\x51\xf2\x21\x9c\x3b\x01\x47\x2d\x94\xd7\xc1\xdf"
- "\x0f\xe1\xef\x09\x38\x60\x4d\x1f\x80\xed\x4e\x4e\xa7\x6d\x13\x4b"
- "\xc8\xcf\x90\x3f\x60\x6b\x41\x8b\x62\x21\xf6\xb7\x16\xf7\xa5\xa1"
- "\x23\x1f\x4b\xb1\xda\x4b\x43\xf1\x78\x1b\x81\xf3\xf0\xd7\xc8\xfe"
- "\x8a\x8f\x27\x42\xe1\x88\xe1\xbf\xef\x03\x9a\x53\xfc\x77\x2d\x1c"
- "\x75\x03\x1f\xb6\xfc\x1c\x1d\x33\xa7\x38\x4f\xeb\xd4\x91\xe2\x1c"
- "\xdd\x2c\x3d\x51\x44\x84\xc1\x91\x65\x5d\x1e\xa1\x66\x65\xf3\x02"
- "\xd9\xef\x79\xc1\xfc\xdf\x28\x38\x40\x4e\xf3\x81\xff\xfc\x12\x56"
- "\x36\xbf\x8a\x28\xd4\xed\x70\x74\xda\xd4\x8f\x3c\x73\x50\x9f\x3d"
- "\x30\x07\xa1\x2e\x75\x8a\xc7\x42\x51\x47\x79\x0c\x5b\x32\x7c\x37"
- "\x0f\xca\x42\x00\x5b\xa5\x02\x7e\x9e\xb8\xcf\x1a\x3f\x4f\xa8\x6c"
- "\xf0\x93\x8f\xb6\x08\xc6\x4b\x4e\x05\xc3\xcb\xe1\x4b\x9b\x62\xe0"
- "\xf7\x13\x81\xc0\xe7\x30\xc6\x8a\x80\x07\xe7\xaf\xe6\x9d\x83\x35"
- "\x78\x2c\x51\xa0\x7d\x69\x57\x3c\xb1\x0e\x31\x8b\x75\xf3\xf5\xb2"
- "\xb6\x40\xfb\xa0\xac\x12\xdb\xb7\x16\xf8\xc2\xef\x2a\xa0\xab\x6c"
- "\x20\x17\x2d\x6d\xe3\xae\x79\xf1\x19\xc0\x23\xdf\x5e\xe4\x89\xd7"
- "\x51\xa1\x5f\x21\x78\x0d\xab\x7b\xe6\x38\x28\xc7\xb5\x3d\xbe\x77"
- "\xe7\xd1\x60\xd4\x11\xc4\x24\xfe\x6d\x30\x06\xc3\x58\x0a\x23\x66"
- "\xcc\x35\x1f\x40\x70\x6f\xb3\x1b\x5a\x14\x33\xbd\x27\xa4\x93\x60"
- "\xe4\x87\xf6\x1b\xfa\xd1\x58\x81\x63\x91\xf1\x1a\x83\xfd\x40\xfe"
- "\x1f\xc2\x6a\x0a\xff\x96\x63\x7b\xe0\xbc\xa8\xde\x42\x5c\xb3\xe7"
- "\xa5\xb1\xbe\x42\x5d\x55\x70\x7d\x35\xf6\x1d\xe5\x09\xe7\x6b\x80"
- "\x4f\x2c\x9e\xc3\xbd\x29\xf9\xfe\x54\xe1\xfb\x8e\x28\x0f\xa4\x6f"
- "\x80\xd5\x0b\xb7\x8f\x86\x22\x8c\xcb\xd5\x0f\xfc\xab\x51\x1f\x14"
- "\xea\x40\x1e\x99\x46\x6a\xa4\x60\x8f\x7e\x97\xd6\x09\xbe\xcf\xac"
- "\x2f\xad\xf5\x33\x53\x2b\xd6\x0f\x5c\x87\x76\xf0\x18\xfa\x03\x68"
- "\x4f\xa0\x4e\x1f\xf4\x75\xa0\x2c\xdf\x5c\x00\x3c\xd6\x77\x72\xf1"
- "\x2d\xe0\xf3\x31\xb4\x25\x1f\xf9\x40\x7b\x8e\x31\x5e\xb3\xbc\x31"
- "\xe7\xbe\x58\xd7\x3c\xbf\x2a\xd4\x39\x37\x9e\xd3\xb8\x3e\x81\xed"
- "\x9a\xb5\xbb\x9c\x9d\xab\x01\x9a\x1a\xda\x13\x46\xe8\x26\x35\xdb"
- "\xab\x9a\x9d\x3b\x98\xd9\xc5\xe9\xf7\x18\xb3\x6b\xb3\xde\x4f\xce"
- "\xa0\x6d\x42\xbb\x67\xa5\x5a\xf6\xa4\xe2\xdb\x7d\x10\xeb\xa3\x1b"
- "\xa2\xb8\x39\x14\xeb\xc0\xeb\x79\x7e\x91\xc8\xcf\x22\xab\x09\xd0"
- "\x0e\x26\xaf\x99\x5b\xa1\xbc\x0a\xb1\xc8\xc9\x0d\xec\xe8\xa5\x4c"
- "\xc4\xe2\xac\x74\xb8\xfe\x70\x2e\xfe\xde\xc0\xfd\x56\x72\x36\xb6"
- "\xf7\xfc\xcc\x63\x78\x1e\x63\x22\x79\xab\x01\x4b\x66\x42\x7e\xe6"
- "\x47\x82\x0d\xd9\x5c\xdf\xf6\x19\x36\x85\xca\x8e\x1a\x09\xc1\x76"
- "\x82\x8c\x6a\x3a\x0a\x66\x07\x82\xed\x8f\xc1\xb6\x82\xbd\x3e\x48"
- "\x7f\xa7\x26\xd8\x66\xb0\x67\x7c\xfb\x66\x17\xf1\xba\x3f\x88\x7d"
- "\x44\x79\x4e\x60\xb6\x0f\xce\x45\x3c\x80\x6d\x17\xfa\x3d\x3b\x51"
- "\x2c\x63\xae\xdf\xa0\x07\xd4\x17\xea\x45\xc4\x13\xb1\x9f\x0f\xbc"
- "\xf6\xb1\xdf\x0c\x1b\x28\xeb\xfc\x51\xb4\x0e\xe9\x05\xda\xf0\x37"
- "\xf0\x9c\x06\xea\x9e\x98\xc8\xed\x8f\x2d\xc3\x7d\xc5\x80\xef\x3e"
- "\x6d\x9a\x91\x00\x8f\x1a\x94\x29\xd0\x99\x10\x8f\xf0\xbb\x8e\xaf"
- "\xc3\x08\xf3\xf9\x78\x38\xa6\x0a\xe3\x3f\xfc\xbc\x35\xbe\xc2\x6d"
- "\xc7\x3f\xea\x3b\xdf\x9c\x19\x46\x38\x3c\x24\x11\xd5\x05\x45\xf8"
- "\x36\x7e\xee\xe0\x75\x1d\x7e\xe6\x28\x8c\x17\x11\x8f\x18\x1b\x5d"
- "\xd7\x70\x78\xdc\x30\x53\x86\x7d\x86\x6b\x6b\x78\x3e\x5c\x9f\x39"
- "\x3c\x65\x73\x18\xa8\xa3\x1b\xa0\x9f\xbd\x38\x98\xad\xe5\xf5\x5c"
- "\x67\x23\x13\x8b\xed\xf2\xc6\x3d\x8e\xd1\x26\x81\xdf\xfd\xeb\x8e"
- "\x1e\xc1\x2e\xa1\xee\xcd\x9c\xee\xc3\x63\x2b\xd8\x7c\xcb\xdb\xad"
- "\x70\x76\x7e\x94\x15\x86\xb1\x2d\x65\x1c\x7e\xb1\x2d\x99\x51\xd8"
- "\x96\x1a\xae\x1d\x99\x2a\x72\x41\x11\xe1\x87\xf5\xc3\xb5\x95\xfc"
- "\x78\xe5\x79\xcd\x4e\x41\x5e\xcf\x81\xad\xc2\x36\x41\xdd\xcc\xfe"
- "\x3d\xc2\xe1\x60\x1d\xdf\xf6\xda\xce\x6c\xbc\xf6\x89\xd8\x2e\x39"
- "\x77\x6d\xad\x4e\xf1\x78\x73\x27\xdb\x23\x6e\x18\x5c\xbf\x87\x7b"
- "\x6e\x53\x11\x79\x0a\x6d\x34\xbe\x8f\x0c\xdf\x8f\xa8\xe6\x03\x56"
- "\xcf\x11\x05\xf0\xf3\x42\x8c\x5a\x70\xd1\xae\x88\xdc\x8f\xfb\xc7"
- "\x80\xac\xf7\x81\x8f\xb4\x07\xe5\x8d\x58\x06\x1f\x69\x72\x47\x41"
- "\x44\xb3\x05\xb7\x50\x4f\x29\xca\x9e\xe9\x67\xce\x18\xc0\x71\x8d"
- "\x80\xad\x39\x63\x78\x39\xee\x01\x39\x7a\x41\x7d\xbb\xf9\x7e\xed"
- "\x01\x7a\xf0\xc5\x22\x77\xf0\x6d\x2f\xe1\xe9\xa7\x59\xf4\xc0\x8f"
- "\xd5\xba\x5c\xb4\xbf\x9c\x0e\xe6\x9c\xe2\xaf\xad\xe2\xeb\x3a\x6d"
- "\xa1\x45\x1f\x91\xdb\xef\x19\xca\xd0\x0e\x4e\x04\xdd\x73\xb6\x2f"
- "\xad\x9b\xa3\xe3\x6d\xe3\x31\x56\x47\x64\x06\x87\x43\xf0\x7b\x04"
- "\x1c\xcd\xd9\x67\x63\x9f\xd0\x16\xe7\xd7\x6f\x61\xfb\xe9\x21\x96"
- "\xd0\xa6\xe2\x3a\x09\xf8\x6d\xe1\xc7\x0f\xdf\xe6\xb9\x37\x5b\x63"
- "\x25\x32\x0e\xb0\x72\xb7\xc0\x7b\xae\x97\xbd\x79\xae\x82\xd9\xc0"
- "\x52\x76\xcd\xdc\x85\x7c\xdf\xf6\xb1\xbe\xf1\xbf\x51\x6e\x1a\x4e"
- "\x6e\xb7\x8a\xe4\x08\x72\x7b\x72\x1b\x4f\x5f\x83\xb6\x5c\x18\xaf"
- "\x73\x8f\x5b\xc6\x72\x5f\x7b\xf1\xe4\x46\x1c\x0f\xa2\x76\x55\xda"
- "\xd8\x8b\x1a\xfb\xf6\x62\x6e\x22\xdf\xdf\x4a\x9b\xb1\x51\xc5\xfb"
- "\xbb\xdb\x2d\x7a\xa8\x37\xf0\xfb\x1a\x42\x19\xda\x4f\xac\x5b\x3c"
- "\x07\x95\x33\xb9\xf2\x63\xf9\xc9\x95\x7d\xf5\xf0\xe4\x64\xf1\x78"
- "\x46\x5d\xa3\x4d\x40\x1e\xa8\x53\xce\xaf\x84\x32\xa6\xd7\x27\xbd"
- "\xd1\x36\x88\x6d\x34\xd0\x16\x9a\x29\x8e\x97\x27\xa7\x58\x8f\xc5"
- "\xb9\x55\xfc\x58\xe4\xeb\x8e\xbc\x01\x74\x14\x2c\xaa\x77\x9f\x4d"
- "\xbd\xa8\x9b\x63\xdc\xfe\x33\x5c\x1f\x9f\xbc\x6c\x99\xd3\x90\x1e"
- "\xae\x4d\x85\x6b\x74\x36\xf3\x63\x3e\xb6\x0f\xea\x52\x73\x36\xab"
- "\x98\xb3\x15\xa9\x1d\xac\x3d\xad\x15\xfc\x3c\x01\x65\xc1\x7c\x59"
- "\x35\x3f\x97\x58\x70\x33\xcf\xba\x4d\x91\x21\xf6\xfd\xa3\xb9\x6a"
- "\x8b\x7f\xc4\xf1\xe2\x6c\x51\x64\x28\xdf\x3f\x2c\xbb\x9b\x95\xcd"
- "\xf5\xc6\xb2\x5c\x26\x87\x42\xca\xcd\x57\x73\xaa\xf9\xf9\x0a\xc7"
- "\x97\x1c\x7e\xab\x70\x8c\xe1\x6f\xe0\x51\x82\xfc\x1b\xb2\xba\xd1"
- "\xa7\x2e\xd1\x29\x22\x0e\xa3\x3d\x40\x7b\x81\xcf\x1b\x73\x7f\x67"
- "\x73\x7f\xbf\x42\xbb\x83\x7e\x08\x9e\x07\xba\x7d\x68\x8b\xa0\xbc"
- "\x0b\x73\x0d\xd2\x6f\xbd\x80\x6f\x64\x33\xbb\x76\xde\x70\xce\x57"
- "\xf8\x36\xcc\xc3\x52\x66\xb9\x0e\xec\xd6\x11\xbc\x0e\xaf\xb7\xd8"
- "\x2f\xb4\x5d\x46\xb4\x4d\x5c\x7d\xf3\xe6\xf0\x18\xe7\xd6\x0d\x16"
- "\xbf\xa8\x47\x2e\xa2\xc5\xfd\xd9\x38\x9b\x36\xaf\x94\xd9\xb3\x79"
- "\xdb\xf1\x5a\x4e\x7f\x60\x2b\x35\x5d\xf4\xcb\x8a\x24\xa2\x28\xbf"
- "\x88\x76\x31\x2c\x87\xb5\x73\x5e\x1b\xeb\xc7\xbc\xb7\xb8\x7e\x30"
- "\x9b\x9a\xcf\xda\x12\x96\x53\xde\xcd\x9d\x3b\x89\x7d\xc1\x73\x79"
- "\xa2\x73\xb8\xdf\x22\x9c\xe3\xf6\xd6\xb3\xbd\xce\xdc\x13\xdb\x87"
- "\xbe\xa2\x9b\x5b\xf7\x79\x95\x17\x5b\x6c\xef\xfc\x58\xd6\xce\xf9"
- "\x63\x2d\x76\x17\xe4\x72\x10\x6d\x2f\x77\x6e\x15\x4f\x33\x9b\xff"
- "\xcb\xd9\xf7\xf9\xf3\x98\x5c\x03\xe4\xbc\xbc\x0f\xb3\x7e\xcc\x8f"
- "\xe3\xd6\xd9\xdf\xaa\x41\xb6\xf3\x67\x5a\x64\x2b\xfe\x8e\xe3\x07"
- "\xea\x57\xe2\x6f\x0e\xf7\xe9\xdc\x1a\xb6\x14\x69\xb0\x4d\x6c\x8e"
- "\x98\x17\x6a\xeb\x53\x9f\x55\xa8\xbf\xc4\x79\x89\xf9\xaa\xea\xf7"
- "\xf9\xd8\x14\xd1\x26\xbd\x0a\xf3\xc2\x02\x6f\x8b\x8d\xa1\x1d\x61"
- "\x04\xf7\x6d\x3a\xab\x58\x30\x1c\xcb\x70\xcf\x2d\x31\x0d\xda\xa7"
- "\x03\xdd\x3a\x9e\xe7\xfc\x36\x8b\xdd\x40\x5b\x52\x6f\x68\xe1\x7d"
- "\xba\x05\x25\xe5\xbc\x2d\xb9\xa0\x58\xb0\xd3\xda\x0f\x5b\xb0\xd3"
- "\xda\x66\xa8\xf7\xdb\xda\x0c\xf0\x9b\xb7\x74\x14\x2c\x88\xb7\xf2"
- "\x03\xa0\xac\x7f\xdb\xb1\x20\x04\xc7\x28\xee\xf7\xca\xd9\x27\x2e"
- "\xde\xa6\x96\x59\xda\x8c\x76\xf3\xd2\x26\x4b\xfc\x42\x5d\x86\xbe"
- "\x9a\x4d\x7d\xcd\x56\xb6\x13\xeb\xb3\xf0\x53\x10\xdc\x33\x14\xe4"
- "\x80\xf1\x96\x05\xfb\x78\x3b\x5f\x69\x65\x2b\xf9\x39\x0c\xed\xa4"
- "\xf5\x5c\x15\xb6\xdd\x7a\xae\x52\x6f\xeb\x6b\x23\xd5\x6a\xe7\xe7"
- "\x2a\x75\x30\xda\x2d\x8b\x8d\xb4\xb6\x05\xea\xa8\x72\x2b\x5f\x76"
- "\x41\xab\xc5\x97\x15\xec\xe8\x82\x14\xb4\x51\x50\x7f\x0d\x5f\xf7"
- "\x29\x9d\xe2\x91\x26\x4b\xdd\x70\xde\xbb\x5e\x05\xd8\x2c\x08\x0b"
- "\x01\x4c\xd5\xf0\x3e\x20\x37\x36\xbb\x71\x7f\x3f\xc5\x7c\xc4\xff"
- "\x30\xc4\x99\x36\xe1\x22\x69\x15\xe6\x8a\x63\x97\xd6\x5a\xe4\xbb"
- "\x70\xa5\xd8\x2f\x2c\x2b\xa6\x5b\x3b\x0a\x16\x4e\x15\xf7\x71\x3b"
- "\x94\xe5\xf1\x31\x04\x4e\xb6\x1c\xaf\x85\x88\x6b\xab\xbe\xb1\x7e"
- "\x2c\x0c\xc5\x7e\xe0\x9a\x08\xea\x57\xa0\xdf\x83\x7b\x3e\xc3\xb8"
- "\xd9\x5a\xd1\x8b\xf9\xc7\x9b\xbb\xb2\xc5\xfe\x55\x58\x2b\xda\x4a"
- "\x7e\xed\x59\x0b\xfe\x4e\xbe\x38\x16\x33\x6b\x7a\x84\x2a\x31\x29"
- "\x2e\x21\x65\xd5\x3d\xaa\xb8\x84\xb8\x94\xb8\xe5\xf1\x71\x69\xcb"
- "\x53\xe2\xd6\x26\x8c\x5f\xb3\xfc\xe9\xb8\xa7\x54\x1b\x96\x27\xab"
- "\x82\x53\xc7\xa6\x0e\x23\x02\xe9\xaf\x54\xcb\x93\x93\xd7\xad\x59"
- "\x19\xa3\x4a\x88\x7b\xea\xee\xa4\x95\xc9\x2b\x53\x54\xcb\x93\xd6"
- "\xae\x4b\x88\x51\x8d\x8d\x99\x30\x36\xf8\xfe\x98\x61\xe2\x18\xda"
- "\x1d\x4a\xd2\x6e\xbe\xd2\xd6\x96\x77\x85\x78\xf9\xc8\x12\x93\x7c"
- "\x52\xe3\x12\x58\xcc\x6e\xd1\xfe\x89\x85\x24\x11\xce\x7b\x57\x14"
- "\xa0\xac\x17\x6a\xe1\xaf\x02\xe9\xa0\x9f\x2a\xf8\xee\x05\x6d\x1f"
- "\xdd\x51\xb0\x28\x51\xa7\x58\xaa\x46\x99\x81\x2c\x54\xd0\xb7\xd1"
- "\xf4\x4a\x6d\x1b\xf8\x6c\x89\xf8\x9c\x41\xc5\x15\xe2\x97\xbf\x9e"
- "\x28\xe0\xf0\x86\x43\x29\x57\x62\xac\x6b\x11\xac\x71\x16\x6b\x59"
- "\x4c\x74\x71\xa8\xde\x37\x7d\x3c\xcd\x4f\x1f\xcf\xf4\xb2\xf8\x21"
- "\x4b\x2c\x3c\xfc\x79\x12\x8e\xf8\x6c\x51\x2c\x0e\xe1\x74\x05\x58"
- "\xc6\x58\xf0\xa5\x77\x1f\x0e\x01\x7f\xb0\x19\xe3\xb9\x70\xee\x21"
- "\x83\x9c\x78\x43\xbb\x14\x47\xd3\x83\xc9\xcb\x50\x57\x72\x00\xa5"
- "\x1d\x05\x8b\xbd\x2c\xf1\x34\xe8\x83\x12\xfa\xd2\xc4\xf7\xe3\x5b"
- "\xae\x1f\xc5\x34\xb0\x70\x24\xb4\xaf\x00\xdb\xb3\x78\xb2\xa5\x0f"
- "\xd0\xee\x26\x9d\x62\x51\x09\xb4\x53\x89\xed\xb2\x17\xeb\xc3\x78"
- "\x17\xb4\x33\xc3\xbc\x1e\xe4\x76\x1b\xdb\x33\x36\xaf\x9c\x8d\x3f"
- "\xe8\xcf\xc1\x0a\xf8\x9e\x7b\x91\x78\x6f\x4f\x22\x7e\x34\xfb\x76"
- "\x7a\xd2\x60\x24\x0d\xb1\x4d\xc4\x67\x23\xd5\xd3\x3f\xb5\xb5\xf1"
- "\x7d\xda\x83\xb6\xe1\x8f\xcf\x34\x29\xb0\x4f\x30\x57\x78\x57\x5c"
- "\x74\x18\x5b\x54\xbc\x3c\x8a\x1a\xe8\x2e\xb1\xcf\x15\xe5\x8b\x32"
- "\x41\x7f\xeb\x12\xcc\x53\xd0\x87\x4e\xa8\x3b\x82\xf7\x8d\x0d\xb4"
- "\x27\x4a\xe4\x4b\x2d\x46\x9c\x19\x1c\xf0\xf6\xb2\xf0\xa6\x72\x6e"
- "\xaf\xe5\x00\xa6\xff\xa8\x0c\xb8\x46\x2f\xf0\x8f\x52\xdb\xf2\x47"
- "\x9e\xf0\x5d\x6f\xa9\x87\xad\xc3\xa3\xd0\x27\xd0\x03\x96\xf5\x0e"
- "\xea\x0b\x2c\x28\xa6\xa7\x1a\xa0\x3c\xaf\x8b\xe0\x38\x39\x55\x51"
- "\xcc\xf1\xaf\x01\xb9\x8f\x46\xfe\xcf\x8d\x22\x64\x0b\xd0\x5c\x2a"
- "\x58\x1c\x81\xf1\x5d\x38\x07\xe3\x3f\x2c\xcc\x36\x66\xcd\xe3\xf9"
- "\x57\x36\x78\x0e\x29\x40\x9f\xb0\x10\xf8\x03\x86\xf2\x2e\xc3\x3c"
- "\x0c\xbf\x27\x14\x92\x20\xac\x07\xbe\x73\xf1\x90\x8e\x82\x25\x41"
- "\x96\xfa\x28\xe0\x3f\xd7\xcc\x62\x30\x3c\xb6\xc6\x37\xa4\xb6\x61"
- "\xce\x30\x7a\x14\xec\x3b\xb6\x11\x31\x06\xd7\x44\x59\x30\x05\x58"
- "\x3f\xc5\xe1\xca\x8f\x04\xd1\x82\x28\x5d\xc5\x48\xa0\x03\x5c\x95"
- "\x03\x9e\x10\x57\x40\xbb\xd5\x82\x29\xc0\x5a\x23\xd2\x41\x1b\x86"
- "\x55\xa7\x85\x28\xd0\x46\xb6\x2a\x96\xe0\x2d\x2d\x25\xfd\xed\x13"
- "\x4d\xf4\x27\x8b\x9b\x98\x9e\x96\x98\x1a\x3a\x99\x0e\x04\xb9\x2f"
- "\x69\x14\xc9\xbd\x11\x70\x3c\x0c\xe5\xcc\x62\xd5\x4b\x4c\xd0\xb6"
- "\x46\xce\x17\xcf\x00\x1d\x70\x73\xd5\x92\xc3\x78\x3d\x2f\xc3\x3a"
- "\x41\x86\x4b\x03\xec\xc9\xd0\x46\x76\x0a\x3c\x68\xc1\xd2\x40\x1c"
- "\x2b\x70\xcd\x4c\x9d\x22\xaa\xdd\xd1\xbd\x02\xa8\x43\xa1\x28\x24"
- "\x5e\x58\xc7\x31\x3f\x8e\x3e\xdd\x52\x47\x1e\xc8\x5a\x9f\x19\xdb"
- "\x2f\x9e\x8f\xc1\x6a\x13\x63\xe2\x78\x7d\xa0\x1f\xca\x77\xe9\x61"
- "\xe1\x7a\x6a\xb0\xbd\x7e\xec\x53\x56\x6d\xe5\x0e\x68\x6b\xe3\xcb"
- "\x23\x01\x47\xac\xbd\xc6\xfe\xda\x1b\xa8\x62\xf3\xa4\xf6\x0e\xc4"
- "\xf7\xb2\xfb\x1a\x4a\x08\xc1\x32\xfe\x77\xe0\x25\x98\x7b\x6c\xe3"
- "\xfb\x8e\xef\x37\x2c\x5b\x67\x7d\xbf\x61\x59\x8c\xa3\xfb\x0d\x36"
- "\xf5\xbe\x85\xf5\x9a\x2b\x22\x65\xa2\xba\x4b\xcd\x76\xea\xb6\x5c"
- "\x3f\xa1\x52\xbc\x9e\x89\xe6\xda\x50\x0f\xf3\x14\xfd\x69\xa4\x8c"
- "\x02\x9f\x63\xdc\x1c\x1e\xcd\xfb\x2f\xe8\x17\x2d\xd3\x21\x8d\x6d"
- "\x3f\x7a\x3f\x5e\x7e\xe8\x5b\x91\x2e\xee\x87\xe7\x23\x44\x89\x7f"
- "\xef\xd7\x5b\x4e\xcb\xad\x88\x09\xb5\xf3\x03\xfc\xac\x5f\x72\xf4"
- "\x14\x3e\xac\x88\xff\xcd\xb8\x28\x7a\xe9\x7b\xcf\xbb\xf1\xb9\x81"
- "\xb5\x97\xe3\xd7\x49\x64\xec\xdb\x14\xa5\x88\x22\xb4\x9f\xab\x29"
- "\xb1\x5c\x62\xef\xf3\x2c\x1c\x59\x91\x9e\xc0\x2f\x98\x23\xa6\xd4"
- "\xc8\xf3\xb7\xfc\xa6\xe2\xdf\x58\x62\xfd\x1b\x3e\x1e\x51\xa2\x0a"
- "\x6e\xf7\x88\xe1\x1e\x1b\xfb\xbf\x98\xde\x22\x79\xa5\xb8\xad\x20"
- "\xee\x2c\x4f\xee\x8b\x0f\xfe\xd3\x09\xfc\x82\xe0\xfc\x94\x88\x5e"
- "\x82\x9b\x0c\x9b\x45\xe4\x1f\xb1\xe6\x3f\x50\xd9\x4f\x1f\xa5\x7e"
- "\x6e\x13\x7d\xbf\x9d\xfd\x79\x20\x7a\x10\xf9\xf7\xff\x51\x35\xde"
- "\x60\xf9\x2a\xc0\xe3\x81\x56\x7b\xa4\x82\xfc\x7f\x65\xd1\x31\x15"
- "\x23\x54\x38\x3f\x4d\x6b\xfd\xfb\xc1\x7c\xeb\xdf\x0f\xe9\x06\xa1"
- "\xe5\x84\xab\x24\x53\x07\x73\x6f\xc8\xbe\xde\x42\x1f\x9b\x21\xe3"
- "\x93\x6f\x33\x84\x84\x0f\xdf\x1a\x0f\x42\x1e\x9e\x2c\x2a\x56\xd8"
- "\xa7\xbe\x3a\x9f\x5b\x36\xf3\x03\xe2\x76\xbd\xb2\xcf\xc9\x07\x6d"
- "\xca\xf0\xf7\x75\x2a\xbe\x6c\xd2\xfb\x7d\xe8\xb9\x32\x95\xe8\xb7"
- "\x2c\x04\xfe\xa9\x04\xfc\xeb\xfb\xd2\xfe\xf8\xf9\xf1\xe3\xc4\x47"
- "\x86\xe3\xe3\xc7\xcf\x55\xfa\x50\x36\x8b\x83\x25\xe2\xfe\xe0\x7f"
- "\xb4\xd7\x50\x52\xfe\x04\xe5\x0b\x28\xff\x65\x50\xe6\xf1\x1f\x3f"
- "\x3f\x7e\x7e\xfc\xfc\xf8\xf9\xf1\xf3\xe3\xe7\xc7\xcf\x0f\xe0\x23"
- "\x13\x2f\xac\xbd\xe0\xb8\x9e\xff\x2b\x5e\xff\xc8\xf8\x43\x5c\x26"
- "\x77\xe7\x3a\xca\x7f\x48\x56\x88\x56\x55\x19\xad\x53\xe6\x47\x34"
- "\x06\x57\x27\xea\xbd\xb6\x86\xd5\x06\xed\x89\x6d\x0b\x28\x51\x37"
- "\x4d\xa9\x49\xed\x54\x6c\x09\x3d\x16\x58\x15\xd3\xea\x57\x18\x79"
- "\x6a\xf2\xc1\x14\x83\x77\xce\xcc\xba\xf1\xfb\xe2\xdb\x47\x97\x46"
- "\x35\x4f\x3d\x9c\x6e\x94\x67\x3f\xfc\xb7\x3b\x5e\x5d\xd1\x32\xb2"
- "\x60\xee\x27\xf7\xbc\x9d\x74\x71\xd8\x8b\x8f\x7f\x78\xd7\xde\x67"
- "\xce\xdd\xf2\xca\xa2\x7f\xfe\xea\x2f\x69\xdd\xd7\xbd\xf0\xc8\x07"
- "\x77\xbe\xbe\xea\xec\xa8\xe2\xf9\x9f\xdd\xff\xa7\xf5\x57\x46\xe4"
- "\xce\xae\x9f\xf0\x66\xc2\x85\xdb\xca\x97\xfe\xfb\xd7\xef\x6a\xcc"
- "\xb2\xcd\x0f\xbd\x3f\x66\xf7\xf2\x2f\x7d\x77\xcc\xf9\x78\xd2\x5b"
- "\xcf\x7e\x7f\xc3\xb6\xc7\x4e\x8c\x7b\x23\xee\x9b\x9b\x77\x2e\xfc"
- "\xfc\x81\x77\x36\x76\x79\x3e\x3f\xe3\xf8\xd8\xd7\x56\x7e\xe5\x5f"
- "\x34\xef\xf4\x7d\x87\xd6\x5d\x1e\xbe\x7d\xd6\xc9\xbb\xf7\xaf\x39"
- "\x7f\x6b\xd9\x92\x33\xd3\x8e\x64\x98\x3c\x9e\x9b\x7e\xf4\x67\xbf"
- "\x7b\xea\x3f\x37\xbd\xfc\xe4\xa7\xf7\xfe\x31\xf9\xd2\x8d\x2f\x3d"
- "\xf1\xd1\x2f\xfe\xb0\xfa\xdb\x9f\xee\x5a\xfc\xaf\xff\xfb\xeb\xa6"
- "\x9e\xeb\x7f\xf3\xe8\xdf\x7f\xfe\xfb\xa7\xbf\xfe\xc9\x6f\x17\xfc"
- "\xe3\x97\x7f\xde\xd0\xe1\x93\x17\xde\x30\xf1\xc0\xda\xef\x6e\xaf"
- "\x58\xf6\xc5\x83\xef\x65\x52\x77\xe4\x47\x14\xd5\x4f\x0e\xa5\xde"
- "\x04\xe7\x11\x8b\xcb\xa3\x5d\xe6\x23\x97\xf1\xfa\x67\x05\x59\xf7"
- "\x11\x99\x17\xb9\x4e\xe1\xc2\x8a\xc1\xd5\x7e\x3b\xf8\xa8\xc4\xd7"
- "\x3b\xf3\xc1\xf8\xd1\x24\x38\xee\x85\xe3\xa7\x5c\x89\x10\x05\xb8"
- "\xc3\x49\x1e\x57\xff\x23\x83\xbe\x7b\x40\xcb\x3c\xc9\x75\x20\x2d"
- "\x2f\x72\x03\x19\x46\x6e\x24\xde\x64\x38\x19\x41\x7c\x88\x92\xf8"
- "\x92\x91\xe4\x26\xe2\x47\xfc\xc9\x28\xf2\x13\x12\x40\x6e\x26\xb7"
- "\x40\x6f\x46\x93\x5b\xc9\x6d\xe4\x76\x10\xca\x18\xfb\x7d\xc9\x22"
- "\x21\x01\xf0\x0f\xfc\x1f\x41\x42\xb8\xdf\xd1\x3f\x96\x0f\x69\xb9"
- "\x96\x2f\x6f\xe4\xcb\x75\x3f\x96\x0f\x69\xb9\xea\xbf\xfc\x77\xcc"
- "\x7f\xf5\xaf\x0c\x5c\x07\xe6\x3d\x58\xf9\x10\xbd\x1f\xdb\x52\x19"
- "\xff\xe9\xfd\x4d\x06\xb8\xbe\x0f\x3f\xeb\xeb\x6d\x3f\x21\x70\xf0"
- "\x01\xd9\x4c\x42\xd8\xfd\x06\x2a\xfe\x18\x8b\x65\x7f\x53\xf8\x66"
- "\xe1\xad\x13\x2f\xe2\xc7\xfd\x3b\xf0\x47\x9b\x02\x47\x16\x1c\x39"
- "\x70\xe4\xc1\xb1\x0b\x8e\xd7\x2c\xbc\x89\xec\xf6\x50\x22\x53\xa5"
- "\xc3\x5f\x1d\x91\x8d\x09\x80\x63\x1f\x91\x05\x8e\x27\xb2\x3b\xda"
- "\x89\x6c\x6c\xbc\xd0\xf8\x09\x5b\x7b\x5b\x29\x1b\xcf\x97\xab\xe0"
- "\xfb\x24\x71\xac\x56\xea\x7c\xa6\x9d\x11\x19\xa6\x9a\x34\x61\xf2"
- "\x84\xfb\xee\x5d\xae\xba\x3b\xe2\x6e\xd5\x3d\xc1\x93\x26\x4d\x0c"
- "\xbe\x7f\xe2\xa4\x5f\xaa\xee\xb9\xe7\x57\x93\x82\x7f\x15\x1c\xac"
- "\x5a\xb3\x31\x29\x6e\x52\xf0\xd3\x2b\x55\x09\x31\x71\xc9\xaa\x55"
- "\x71\x49\x6b\x36\x2c\x4f\x5a\xe9\x44\xd7\xa5\x7c\xa0\x2b\xe4\x56"
- "\x13\x6b\xa6\x58\x43\x32\xf2\x20\x51\xc4\x46\x10\x45\x7a\x30\xe9"
- "\xa3\x52\x59\x3e\xdf\xa5\x20\xfe\xe8\xf3\x59\xb3\x68\xfe\x3f\xc7"
- "\x2e\x1e\xf1\xb7\x87\x9e\x1e\x3b\x6d\xfa\xef\xf2\xaa\x89\x3c\xa1"
- "\x95\xc8\x57\x6d\x25\xf2\xa8\x30\x22\x8f\x48\x24\xf2\xe9\xc0\x62"
- "\x6f\x24\x91\xef\x6e\x26\xf2\xdf\x66\x11\xf9\x4b\x39\x44\xae\xb1"
- "\x53\xf6\xce\x56\x56\x76\x7e\x3c\x91\xb7\xec\x23\xf2\xcf\x4a\x88"
- "\xbc\xb6\x96\x2b\xf3\xf0\x00\xbe\x5d\x01\x83\x2c\x91\xc1\xf8\x48"
- "\xc5\x83\xec\xff\x01\x9e\x94\x72\x6b"
+static unsigned int rss_ethp_z8e_uncompressed_length = 544468 ;
+static unsigned int rss_ethp_z8e_length = 152837 ;
+static unsigned char rss_ethp_z8e[152837 + 1] =
+ "\x78\x9c\xec\xbd\x7f\x7c\x54\xd5\xd5\x2f\xbc\x32\x99\xc0\x80\x49"
+ "\x66\x12\x23\x4e\x29\xd6\xd1\x62\x1b\x5b\x84\xa0\x58\xa9\x04\x8d"
+ "\x02\x1a\x2d\x3f\xa2\xd2\x36\x2a\x9a\x80\xfc\x08\x1a\x21\x42\x84"
+ "\x09\x84\x4c\x18\xb0\x8d\x35\xbf\x40\xa4\x51\x02\x89\xb7\xd8\xd2"
+ "\x16\x2b\x56\x5a\x63\x8b\x35\x96\xf4\xbd\xb4\x4d\x32\xb4\x2f\xbd"
+ "\x37\x4f\x5f\xdb\x8e\xdc\x88\x29\x0d\x64\x20\x43\x66\x4c\x66\xce"
+ "\xbe\xdf\xb5\xf7\x39\xc9\xcc\x30\x41\x79\x9e\xe7\xf3\x79\xff\x69"
+ "\x3e\x9f\xc9\x39\x67\x9f\xbd\xd7\x5e\x7b\xed\xb5\xd6\x5e\x7b\xef"
+ "\xb5\xd7\x21\xba\xfc\x3f\x2f\x59\xf8\x92\x40\xe6\xa4\x63\xef\xff"
+ "\x27\xca\xff\xfb\xef\xdf\x7f\xff\xfe\xfb\xf7\xdf\xbf\xff\xfe\xfd"
+ "\xf7\xef\xbf\xff\x7f\xff\x7c\x09\x34\xe3\xbc\xc9\x4c\xbf\xad\x27"
+ "\x0a\xb8\x2d\x93\xbc\x09\x09\xf3\xbf\xff\xa2\x08\xe1\x55\x02\xc6"
+ "\xf9\x49\x7c\xe5\xdf\x4e\xa4\x99\xea\xc9\x72\xbd\x8d\x6c\xe2\xfb"
+ "\x76\xd3\x9c\xbd\x44\xbb\x26\x88\xde\x17\x77\x0b\x5f\x5b\x39\xd1"
+ "\xd1\xfd\x78\xde\x2d\x7a\x5e\x9c\x20\xfc\x80\x53\xe8\xa5\x42\x33"
+ "\xc3\xd9\x86\xe7\x6d\x48\x47\x5a\x29\xd2\xfc\x9c\x56\x87\x72\x46"
+ "\xba\x67\xfb\x00\xb5\x39\x42\x54\xc7\x70\x1c\x61\x9a\x7b\x9d\xc4"
+ "\xa3\x19\x79\xcb\x39\xef\xd6\x09\xa8\x37\x83\xc8\xbd\x5b\x04\x23"
+ "\x70\xb0\x70\x3d\x5c\xb7\x9e\xff\x78\x4c\x7d\x3e\xa4\x75\x1b\xf5"
+ "\x8d\x02\xc3\xc6\xe5\xb9\x0d\x8e\x2f\x50\xe2\x29\xba\xe2\x2a\x86"
+ "\xc9\xb8\x09\x37\x59\x3c\x83\x21\x3a\x45\xe3\x32\xfb\xdd\x94\x78"
+ "\x14\xd4\xa8\xdd\x2d\xd3\x13\x3d\xfe\x10\x39\x2a\x28\x01\xef\x16"
+ "\xe0\x6a\x42\xb9\x14\xa6\xcf\x43\x8d\x34\x99\xeb\x06\x5c\xb3\x30"
+ "\xb5\x26\x34\xa5\x13\x31\x8d\xfc\x26\xfa\xb2\xdf\x4d\x09\x01\xf7"
+ "\x38\xb4\xdf\x92\x29\xdb\x8f\x7a\x51\xd6\x7c\x8a\xc6\x9f\x33\x21"
+ "\x3f\xea\xf4\x39\x36\x31\x0e\xe3\x7f\x27\xdc\xad\x26\x03\x8e\xe6"
+ "\x6e\xbd\x62\xdf\x4e\xa2\x7e\xb7\xe9\x3e\xbf\xc9\x2a\x74\x38\x47"
+ "\x0c\x38\x9c\x0f\x75\x25\x73\x5d\xfd\x6e\xf3\xce\x88\x3c\x5e\x23"
+ "\x0f\xf0\xf6\x4d\xf3\x53\x22\xe3\x7c\x92\xc6\xcf\xe4\xfa\xf4\xb6"
+ "\x98\xb9\x0e\xcf\x86\x10\x79\xd0\xf7\xa8\x3b\x03\x6d\x75\x1c\x0d"
+ "\x12\x01\x66\x5a\x53\x05\x11\xc3\x07\xfe\x0e\x05\x73\xfc\x0c\x03"
+ "\x26\xc3\x18\x6e\xab\xbb\x35\xbd\x49\xe2\xc8\x6d\xb5\x90\x9e\xb7"
+ "\x30\x12\x47\x86\x8b\xb6\x5c\xcd\x6d\x69\x03\x47\xe9\x79\xb6\x0f"
+ "\xd3\x63\xb8\xfd\x57\xe4\xc4\xc0\xb6\x2b\xd8\x09\x80\x9d\xd0\xaa"
+ "\x97\x1b\x6e\xbf\x37\x26\xbf\xca\x6b\x1b\xe7\x37\x09\x9d\x0e\xe3"
+ "\x7b\x46\xf2\x8e\xdb\x15\x99\x17\xf8\x98\x14\x6d\xc9\xe4\xa5\xf1"
+ "\x5d\x68\x67\x22\xf2\xcc\x47\x3f\x3a\xf4\xf7\x57\xe9\xef\xed\x78"
+ "\x77\xa7\x82\x77\xc5\xcc\x08\x78\x36\x86\x17\xc9\x5b\x4a\xa2\xcc"
+ "\xf8\x25\xc1\x40\x1e\x83\xdf\x58\x8b\xc1\x6f\xeb\xed\x42\x73\x7d"
+ "\x0e\x6d\xaa\x3d\x5b\xa8\xb9\x05\x79\x9c\x41\x72\x4c\x24\xd7\x49"
+ "\xba\xe2\x10\xe0\x53\xed\x26\xb2\xb8\x4a\x44\xd0\xe3\xec\xa5\x4e"
+ "\x5f\x2f\xb9\x7c\x90\x8d\xd0\x05\xaa\xb8\x00\x5e\x0c\x9d\xa1\x8a"
+ "\x67\xc8\xde\x56\xfe\x11\xc5\xe3\x65\xcd\x24\xc8\x35\x89\xcb\x76"
+ "\x53\x67\x63\x37\xb9\x1a\xa3\xcb\xba\xae\x21\x7b\x07\x9e\xd1\xe7"
+ "\x56\xc6\x83\xe5\x2d\x94\x7a\xb6\xb0\xfc\x65\x32\xbb\xae\x23\x53"
+ "\xc7\xf2\x56\x1d\x97\x64\x27\xe3\xb2\xfd\x34\x59\x7e\xb0\x12\x7c"
+ "\x78\x9a\xf1\x1d\x28\x7c\x63\x53\xd0\x74\xd4\x3e\x9f\x8e\xda\x3f"
+ "\xa0\x36\xfb\x6c\x6a\x73\xce\xa5\xda\xd3\x94\x7c\x34\x98\x4d\x6d"
+ "\xe6\x7b\xa8\x6d\xf2\x5c\xf2\xf4\xe2\x1e\xf2\x7b\xd4\xee\x27\xc7"
+ "\x06\xe6\xa7\xe4\xa2\x5d\x4f\x92\xc5\xab\x60\x82\x76\xc9\xa5\xef"
+ "\x97\x12\x31\xed\xf8\x39\x5e\x3b\xd6\x7f\x8e\xec\xc0\xaf\x07\xb8"
+ "\x7c\x1d\xb8\xbc\x3e\xd9\x4e\x59\xc0\x79\xac\xa7\x21\x44\xe6\x72"
+ "\x1a\x37\x8a\x1c\x67\x68\xe0\x3d\xc8\x6e\xef\x3e\xe8\x13\x96\xdf"
+ "\xfe\xcd\xf9\xd0\x09\xc9\x90\xff\xe4\xed\xba\x0c\xf4\xba\x5e\x25"
+ "\x73\xff\xc6\xfc\x84\xa6\xdd\xa2\x3b\xe0\x4e\x21\xe3\x1d\x64\xb1"
+ "\x1b\xef\x7b\xa6\x65\x90\xcd\x13\xca\xa1\xf7\x06\x7b\x58\x1e\x7b"
+ "\x53\xfd\x94\xc0\xf0\xac\x4e\xc8\xce\x06\x4a\x02\x3e\x7f\x6a\x42"
+ "\xfa\x17\x91\x0f\xe5\x73\xbc\xb4\xfb\x10\x97\x17\x57\x3f\xea\xd7"
+ "\xae\x7e\xf4\x82\xf6\xfd\x47\xfb\xc5\xf7\x1f\x3d\x1f\xfe\xfe\xa3"
+ "\xe7\x5c\x65\x64\x09\x5f\xfd\xa8\xaf\xb3\x44\xf6\x81\xad\xb3\x04"
+ "\x7d\x10\x26\xcb\x96\x33\x64\x7b\xfc\x19\xf4\x7d\xe8\x6f\xb4\x65"
+ "\x35\xd9\xb5\x94\x0b\x76\x4f\xe8\x2f\xf4\x78\x39\x09\xdc\x67\xc6"
+ "\x6b\x5f\x7f\xea\x40\xb3\x21\x5b\xa8\xb7\xc5\x9b\x78\x26\x9f\xeb"
+ "\xf5\xa5\x68\xcd\xf8\xed\xc7\xef\x00\x7e\x07\x45\xea\xc0\x41\xd0"
+ "\xca\x95\xba\x35\x81\xf6\x0d\x12\x4d\xd3\x28\xe1\x34\xa5\x9c\x00"
+ "\xfe\xb6\x51\xe8\x36\x49\xdb\x79\xfb\xa1\x2f\x57\x52\x45\x20\x50"
+ "\x44\xac\x0b\x59\xff\xb1\x3e\x0c\xb8\x53\x1d\xa8\xa7\x41\xca\xef"
+ "\x6e\xe8\x98\xf4\xdb\x0f\x21\xbd\xc7\xbf\xb9\x28\xc1\xb7\xb9\xc8"
+ "\xd4\x9f\x7e\xfb\x5b\xc8\x33\x17\x79\x8e\xeb\x34\xec\x61\x58\x90"
+ "\x2d\x5f\x4a\x88\x12\x01\xb3\xe4\xed\x81\x2e\xf3\xde\xdd\xe2\x03"
+ "\xe4\x2b\x1e\x86\x05\xd8\x80\x03\xfa\xa7\x56\x1a\x69\xa0\x75\x77"
+ "\x0d\xf2\x71\x79\x4f\x30\x87\xc7\x14\xaf\xa7\xb8\x87\xac\x21\x1a"
+ "\x2f\x86\x54\x7d\xc8\xd3\xc3\x3a\x3d\x25\x48\x63\x02\x6e\xca\x63"
+ "\xd8\x5c\xce\xd3\xdb\x43\x28\xf7\x96\x70\x15\x99\x90\xbe\x30\x20"
+ "\x8a\x12\xb6\x23\xfd\x28\xca\xeb\x75\xf7\x18\x38\x72\x1d\xdc\xd7"
+ "\x12\x4f\xf0\xc3\xd1\xe2\x20\xa5\x34\x50\x22\xca\x3d\xc4\xf0\x18"
+ "\x16\xf8\xc0\x8b\xb6\xbe\x75\xb4\xd8\x47\x9a\x88\x82\xe9\x55\xf0"
+ "\xac\x33\xa3\xe0\x21\x5d\x00\x1e\xf3\x5f\x1b\xca\xa4\x34\x4b\x78"
+ "\x0f\xbe\xad\x31\xbc\x20\x99\x1d\x12\xdf\x6f\x31\x8c\x00\xeb\x0f"
+ "\xc0\x6c\xdd\x70\x37\xf5\x92\xb5\xd9\xe7\x2a\x4a\xec\xc4\xb8\xc9"
+ "\xe5\xdf\xa8\xe8\x49\x12\xfd\xf9\x89\xcc\x73\xfc\xde\x13\x3a\xcf"
+ "\x79\xb6\x8a\xfe\xa2\xc4\x94\x5e\xe8\x22\xe4\x41\x79\x27\xe3\x19"
+ "\xd9\x97\x0f\xce\xfb\xd6\x6c\xfa\xd6\xdc\xfb\xe6\xce\xa6\x05\x77"
+ "\xcd\x99\x4d\x59\x5f\xbf\x29\x6b\xc6\x2d\xb7\xdd\x22\x6f\x6e\xb9"
+ "\x6d\xe6\x2d\x94\xf7\xed\x07\x67\x53\xde\xc2\xd9\xf4\x10\x7e\x79"
+ "\x0f\xcd\x7b\x70\xee\xbc\x87\x66\x53\xfe\x3d\xf7\xe1\x69\xce\xec"
+ "\xe9\x59\xf7\xde\x94\x37\xe7\xbe\x79\xf4\xc0\xe2\x9b\xb3\x6e\xbe"
+ "\x99\xee\x9a\x37\x7f\x7a\x56\x96\x7e\x9d\x9e\xc5\x59\x1e\x99\x39"
+ "\xef\xa1\x9b\xf2\xd6\xad\x2d\x5d\x7b\xd3\xc2\xfb\xe6\x70\x0a\xb4"
+ "\x5b\x04\x0f\x65\x86\x07\x34\xa6\xb5\x5f\xf4\xe5\x92\x06\xdd\xb1"
+ "\x0f\x3c\x80\x5f\x6f\x6b\xc5\x49\xe8\x80\xb4\x67\xf7\x71\xdf\xc9"
+ "\x31\xc0\x7a\x04\x72\x6f\x0e\xb8\x6d\xe5\xde\xc4\xb3\x36\xa6\xa1"
+ "\xe3\x7a\xd6\x13\xf6\x24\xbc\x7b\x5f\x1f\x6b\x92\xf0\xbe\x31\xfa"
+ "\xfd\x95\xd0\xc1\xd6\xff\xd9\xe9\x20\xf2\xe0\x07\xba\xfb\xa1\x0b"
+ "\x41\x5f\x1f\xf5\xbb\xf2\x93\xc0\xdf\x09\xa8\xa3\x1b\xb2\x79\x1c"
+ "\x65\xbb\x22\x64\xbe\x1b\xfd\x73\x9c\xc7\x95\xb3\x64\x7b\xb3\xb3"
+ "\x34\x87\xb8\x9f\x3c\xa5\x3a\x8c\x0b\xc3\x30\xc6\x4b\x18\xe8\x7b"
+ "\xc0\x39\xa1\xe0\xa4\x39\x22\xf4\x83\x97\xe1\xd4\xe2\x9d\x0e\xeb"
+ "\x42\x27\xf4\x04\xf4\xf8\x93\x9a\x2b\x93\x44\xea\xd9\x22\x6d\x28"
+ "\x53\x8e\x95\x28\x97\x1f\xc1\xd7\xfe\x36\x27\xf2\xfd\x20\x37\x01"
+ "\x7c\x90\x80\xf1\x17\x6d\xb1\x2d\x07\x7f\xfb\xc3\xb5\xda\x9b\xa2"
+ "\x2f\x9f\xed\x88\x31\xa7\x28\xfd\x4f\x68\x5f\xbb\x56\xab\x1d\x12"
+ "\x01\x99\xc6\x74\x6b\x11\xfc\x9c\x8a\x7c\x43\xc3\x69\xef\x70\x1a"
+ "\xf8\x20\x91\xe5\x55\x08\x99\x8e\x31\x33\xbd\x0c\x3a\xad\x0b\x79"
+ "\x0f\x71\xde\x69\x21\x1a\x0b\x5d\x63\x77\xb8\x12\xe8\x24\xa5\x93"
+ "\x96\xaa\xfd\x3c\xa2\x3e\xc0\x49\xe7\x41\x8a\xf9\xd1\x1c\xe8\x03"
+ "\x9c\x7e\x99\x0e\x3b\x26\xfd\x31\xc0\x7f\x8b\x75\xa5\xd2\xdf\xf6"
+ "\x1b\x38\x9f\x3e\x36\x8f\x3c\x43\xd6\x15\x1c\xfb\x0d\x47\x41\x4b"
+ "\xb6\x17\xd8\xfe\x0b\xb8\xd3\x17\x7b\x29\xc5\xa7\xc6\x46\xfb\x64"
+ "\xce\xab\x01\x47\x61\x73\x75\x01\xee\xe1\xd6\x4d\xbd\x74\xaa\x84"
+ "\xc7\xda\x74\x9b\xe6\x2a\xa2\x68\x9c\xd2\xda\x19\x7f\xd6\x1f\xa0"
+ "\xc5\x5f\xc0\x07\xe3\x00\x6f\x7f\x34\x1f\xa4\xb7\x02\xce\x9b\xc0"
+ "\xaf\x0b\x6d\x7a\xd3\x4b\x69\xc7\xb4\xfe\x22\xd4\x4b\x26\xc8\x15"
+ "\xf4\xf9\x08\x0c\xbd\x7c\x77\x74\xf9\xb4\x2a\x2e\x87\xfc\x49\x81"
+ "\x7e\x99\xbf\x9a\x69\xae\xf3\x1d\xf8\xf2\xca\x8c\xe8\xfc\x57\xff"
+ "\x13\xb8\xfc\x3d\xe2\xfd\x8c\x98\xf7\x1d\x78\xff\x7f\xf4\xf7\x90"
+ "\xfb\x2b\x17\xc7\xf0\x6d\x09\xde\x7f\x0c\x7c\xfd\x90\x6b\xd8\x16"
+ "\x69\xb9\xe0\x31\x5f\x44\xfe\xed\x31\xf9\xa1\xe7\xad\xff\x62\xbe"
+ "\xe1\x31\x87\xf3\x37\xe9\xb2\x83\xfc\x16\xe4\x3f\x1c\x53\xff\xeb"
+ "\xc8\xef\x8f\xc0\xef\x44\xf4\xfb\x8c\x46\xbc\xff\x84\x79\x1d\x36"
+ "\x51\x12\xf2\x8c\x65\x5d\xc2\x7a\xec\x68\x31\xf7\x57\x86\x39\x26"
+ "\xff\x64\xe4\x4b\xd6\x69\x64\xd2\x69\x94\xcb\xfd\x88\x3a\x3e\x50"
+ "\x38\x64\xcc\x8c\x29\x93\x8f\x32\x19\xa0\xe3\x9b\x06\x5f\xc6\x29"
+ "\x53\x1c\x53\xa6\x9a\xfb\x51\xa8\x7a\xcc\x81\xa1\x91\x32\xba\x8e"
+ "\x8c\x84\xc1\x6d\xbb\x02\x30\x0e\xc5\xb4\x7d\x06\xea\x9d\x54\xa3"
+ "\xf4\xce\x15\xe0\xa1\x9b\x91\x76\x03\x60\xfe\x82\x65\x00\xb2\xea"
+ "\xf7\xf8\x82\x24\x5c\xb9\xc9\x8a\x77\xaf\x4a\x4b\x0d\x11\xdf\xdf"
+ "\xc4\xf7\x0c\x5b\x04\xe6\xeb\x32\x79\x55\x1a\xae\x48\xcf\x60\xfb"
+ "\x2d\x81\x75\xb0\x08\x7c\x43\x53\x30\xaf\xba\x55\x98\xc8\x84\xe7"
+ "\xb0\x5e\xc7\x35\x78\x4e\x00\xfe\x3f\xc7\x98\x43\x62\x23\xf2\x6d"
+ "\xa2\x39\x48\xe7\xb4\x5f\xea\xf9\x46\x9e\x37\x7e\x23\xa4\xde\x4f"
+ "\xf8\x93\xaa\x33\x97\xf9\x7d\x06\x9e\x7f\xaf\xe0\x4d\x78\x9f\xe1"
+ "\xe3\x7e\xba\x7e\x9f\x10\x66\xd8\x7d\x86\x4c\x4e\x78\x47\x96\x83"
+ "\x5c\xca\xfa\x50\x5e\x6c\x94\xef\x18\xe6\x6b\xb8\xde\x87\xeb\x0e"
+ "\x5c\x1f\xc0\xf5\x69\xd7\x27\x64\x77\x85\xa5\x7c\xf2\xf3\xc3\xb8"
+ "\x3e\x88\xeb\x3c\x5c\x1f\xc2\x75\x3a\xae\x77\xe3\x9a\xc2\x72\x82"
+ "\x71\x95\xe7\x5c\x7e\x8c\xb3\x8a\xd7\x78\x4e\x10\xc8\x65\x9a\xcc"
+ "\x43\xbb\x25\x2d\x34\xa5\x6f\x2c\xaa\x5f\xaf\x92\x73\x42\xf0\x07"
+ "\xa7\x8d\x55\xfc\xa1\xd2\xc2\x86\x5e\xea\x1b\x49\xd3\x75\x95\x2e"
+ "\x9b\x7a\x9a\x82\x9f\x07\xf8\xc7\x19\x57\xa1\x60\x25\x29\x1e\xd0"
+ "\xe1\xab\x72\xe6\x38\x75\x26\x44\xd6\x89\xeb\x7e\x97\x53\x08\x5c"
+ "\xeb\xb9\xcf\xbc\x34\xa1\x15\xf4\x33\x6b\xdc\x27\xeb\x68\x3e\xea"
+ "\x28\xe6\x3e\x30\x78\x4a\x28\x1e\x1d\xc3\xf7\xda\xc6\xa7\xa0\xa3"
+ "\xf0\x7e\xe3\x53\x9a\xce\x87\x32\x8f\x7c\xaf\x70\x59\xa2\xd7\x31"
+ "\x83\xfb\x47\xbe\x97\xe9\x19\xc7\x23\xf8\x32\x3d\xe0\xbe\x3a\x37"
+ "\x86\x2f\xcb\xc1\x97\x53\x99\xff\xb8\xcf\x98\x2e\xa9\x25\xd2\x26"
+ "\x30\x0d\xc3\xef\x53\xfc\xbd\x4f\x9f\x03\x2b\x5d\x70\x75\x7d\x8c"
+ "\xae\x92\xfc\x1f\xa3\x3b\x7a\xb9\xbf\x12\xcb\x59\xa6\xae\x6e\xf5"
+ "\xd2\x1b\x5e\x69\x7f\xd6\x6a\x6f\xf3\x7b\x3f\xf8\x83\xeb\x4d\x2c"
+ "\x61\x5d\x70\xb5\xd7\x78\x2f\xdf\xa5\xcd\xca\x62\x59\x49\x2c\x96"
+ "\xef\x90\x96\xdc\x62\xbc\x33\xea\x49\x2c\xe5\x77\x76\xfb\x08\xdc"
+ "\xb3\x55\x3a\xdc\xc4\x78\xf6\xa3\xa8\x3e\xeb\xbc\x89\xc8\xf4\x95"
+ "\x4a\x4a\xf2\x84\x4e\xd0\xa2\x90\x08\x7f\xb5\x92\xc6\x79\x42\x07"
+ "\xe9\x46\xa2\x34\x4f\xe8\x08\x65\x12\x5d\xe7\x09\xed\x82\x3d\xb3"
+ "\x9d\xdf\xbf\x77\x63\x65\x42\x02\xae\xae\x2f\x93\x29\xc1\x13\x6a"
+ "\xa4\x2f\x91\x19\xd7\x52\xba\xe7\x39\x11\xf0\x84\x96\x23\x5f\x31"
+ "\x2d\x0a\x8b\xbe\xb9\x49\xe2\x1f\x05\x61\xb2\xcd\x7f\x4e\xb8\x3c"
+ "\x21\xcc\x2d\x42\xed\x48\xd7\xc4\xa2\xf0\x27\xf8\x05\x84\x56\x7d"
+ "\xb6\x6a\x51\xb8\x4f\xcc\x79\xee\x3d\x3c\xff\x43\xcc\x49\x72\x09"
+ "\xf4\x93\xf0\x84\xb2\xa9\xd3\xef\x47\xfe\x19\x24\x6a\xce\x3a\x1f"
+ "\xbf\x60\xa2\x21\xd8\x24\x5a\xcd\xd9\x2a\xb4\xa7\x61\x08\x6d\xc1"
+ "\x78\xfd\xfd\xa1\xcd\xb8\xd6\x9e\xdd\x2d\x9f\x93\xcf\x1e\x40\x5b"
+ "\x1a\x6e\xaa\xc4\x3c\xc3\x89\x76\x84\x7d\x02\x76\x8c\xd9\xe3\xfc"
+ "\x80\x52\xb7\xb2\xad\x9e\x8d\xb9\xda\x47\x84\x7e\xb0\xea\x70\x1b"
+ "\x78\x8e\x26\x52\x50\xae\xf6\xec\x6b\x12\x46\xf5\xd9\x63\xd6\x04"
+ "\xe1\x83\xde\xb6\x32\x2d\x3c\xa1\x0f\xf0\xfb\x88\x98\x06\x9e\x90"
+ "\x1f\x30\xc9\x8a\x72\xc7\x86\x52\xce\xb6\xe0\xd7\x35\x94\xd2\x67"
+ "\x11\xa9\x7d\x13\x85\x3b\xe3\x7d\x01\xdb\x41\x54\xf7\x65\xe2\x79"
+ "\x26\xcf\x31\x25\x2d\xc3\x34\x56\xd4\xf4\x65\x82\x5f\xe6\x82\xef"
+ "\x80\x6b\x5f\xbe\xac\xa7\xb6\xef\xdb\x7e\xc1\x6d\xe8\xfb\x96\x6a"
+ "\x43\xdf\x37\x55\x9b\xfa\x9c\xba\x1c\x71\xda\x46\xdc\x2f\x0e\x70"
+ "\xbe\xea\x3e\xa7\x48\xee\xab\x0a\x42\x36\x41\xd7\x4a\xa6\x23\xe8"
+ "\x5a\xc9\xb4\x04\x7c\xa7\xc7\x59\x8d\x76\xf4\x55\x01\x9f\x06\x94"
+ "\xfb\xc9\x90\xb4\x67\xfa\x5a\xfc\x0a\xce\xdb\x80\xb3\x44\xc2\x49"
+ "\xee\x6b\x01\xac\x63\x61\xb7\x83\x16\x95\x89\xe0\xa2\xd0\xd6\x50"
+ "\x41\x19\x25\x4e\xa1\xca\x04\x9e\xcb\x78\x9c\xc5\x68\x67\x1b\xae"
+ "\x73\xf1\x9e\xae\x44\x5d\xef\x01\x6e\x0b\xd7\x87\x7a\x8e\x01\xe6"
+ "\xef\x00\x6b\x39\xe3\x37\x68\x22\x1b\x9e\xbb\x06\x37\x4b\xfc\x82"
+ "\x22\xd9\x67\xd7\x92\x7d\x16\x83\x87\x98\x7f\x14\xdd\x98\x6f\x5e"
+ "\x23\xf0\x97\x6d\x91\x53\x84\xf0\xce\xe6\x71\x72\x7a\x23\x75\x96"
+ "\x20\x8f\x93\xdf\x97\xe2\x7e\x01\xee\xb7\x13\xf3\xcf\xc2\x12\xff"
+ "\xd6\xa9\x95\x25\x09\xc8\xff\x5e\x41\xc8\x42\x8f\x97\x98\x2b\x3b"
+ "\x4b\x7a\xf1\xae\x97\x90\xe6\xf2\x38\x1b\xe5\xdc\x0b\xfd\x1a\x0a"
+ "\x27\xfb\x1a\xc2\xd5\x7d\x3d\xa9\x7e\x97\xf0\x38\x4b\x91\xb7\x84"
+ "\x6e\xac\xb4\x24\xc8\xfc\xce\xe5\xb2\x3d\x5a\x6d\x25\x71\x99\x8e"
+ "\xa2\x83\xc4\x73\x38\xb4\xdd\xd7\xd1\xbb\x9d\x79\x54\xd3\xaa\x7d"
+ "\x45\xe0\xcf\xa1\x8e\xa2\x5d\xb4\xa0\xb7\x72\x2c\xe8\x91\x80\xf4"
+ "\x70\x47\x6f\x1b\xf2\xb6\x2b\x9e\x2d\x0b\x59\x3b\x8a\xb6\x53\x28"
+ "\xb9\xaf\x2b\x54\xed\x73\x2e\x2a\x1b\x12\x0b\x8a\xc4\x7b\x8f\xf5"
+ "\x56\x82\x4f\x0f\xd2\x82\x33\xa1\xc4\xce\x12\xf0\x7c\x59\x00\xe9"
+ "\x21\xc9\xff\x0b\xce\xf4\x8b\x85\xcf\x88\xbe\x45\x65\xff\x10\x1d"
+ "\x45\xcb\xe9\x71\x3f\xa5\x5e\xb1\x55\x68\x2c\x17\xed\xdd\x07\xe9"
+ "\x8a\x0f\x7a\x88\x65\x62\xfe\x52\x4d\x2c\x38\xd3\x27\x1e\x7f\x06"
+ "\xf3\x56\x67\x36\x70\x04\x5d\xfc\xbb\x98\xde\xc1\x8e\xa2\x23\xc0"
+ "\x01\x72\xe3\x9c\x81\xb4\xd7\x90\xb7\xd5\xfa\xd8\x19\x1b\xb5\x77"
+ "\xef\xa2\x50\x4a\x5f\x57\xb8\xa6\xaf\x47\x4b\xf1\x59\x44\x0a\x68"
+ "\x5f\xe3\x2b\x0a\xa7\xf8\x1a\x42\x35\x3e\xa7\xa8\xf5\xf5\xa0\x9f"
+ "\xc6\x71\x9f\x0f\xba\xc9\x81\xe7\x53\x83\x92\x8f\x7c\xe8\xa7\x73"
+ "\x76\xd8\xcf\x82\x69\x29\x6a\x7c\x41\x25\x03\xe7\xec\x43\x29\xe7"
+ "\x2c\xa2\x16\x57\xc9\x87\xe7\x32\x99\x2f\xc3\xd0\x77\x48\xfb\x72"
+ "\x18\x65\xf1\x7e\x26\x7e\xb9\xf8\xe5\x23\xed\x00\xe0\xa7\x31\x7c"
+ "\xad\xfa\x5c\x0b\x60\x1e\x9b\x4a\x64\xe9\xf4\x77\x13\xaf\x5d\xc8"
+ "\xb9\xbe\xf3\x6f\xc0\x99\x79\x2a\x84\x6b\x08\xb2\x71\xee\x80\x76"
+ "\x47\xbd\x94\x41\xd4\x77\x6c\x51\xf8\x4e\xf1\xf8\x05\x96\x27\xa4"
+ "\xd7\x00\x46\xea\xb9\x9e\xa0\xe4\xd7\x73\x1f\x33\x0e\x43\x9b\x33"
+ "\x19\x8e\x19\xef\x83\xa2\xf6\xfc\x93\x7e\x91\x49\x5a\xf5\xf9\x22"
+ "\x2d\xf9\xfc\x31\x51\x7d\x1e\xf2\x70\xbe\x2a\x5c\x7d\xbe\xe1\x1b"
+ "\x49\xc2\xc7\xfa\x6b\xe8\x3b\x84\x7a\x0e\x53\xe8\x0e\x21\x3a\x4b"
+ "\xb6\xe3\xfe\x5d\x92\x32\xec\x3c\x21\xf9\xaa\xa3\xf7\x04\x68\xf9"
+ "\x3a\xd2\xdb\xa4\x1e\x63\xda\x8b\x94\xf3\x55\x8f\x5f\x98\x58\xc9"
+ "\xbc\xf0\x78\x09\x55\x8a\x9a\xf3\x4e\xad\xe6\x7c\x51\xb8\xe6\x7c"
+ "\x83\x96\x82\x7a\x52\x2f\x8c\x0f\x4a\xb9\xbe\x00\xbe\x3e\x8c\x32"
+ "\xef\x4a\x7e\x12\x35\x17\x2c\xa3\xe9\x52\xd6\x69\xac\xc3\x16\x85"
+ "\x82\xcc\x5f\x1f\xb3\xfe\x63\x5d\x06\x5d\x50\x60\xe8\x32\xd6\x63"
+ "\x3c\xc7\x62\x5d\xa6\xe9\xba\x4c\xd3\x75\x99\x16\xa1\xcb\x40\x7f"
+ "\x33\xf8\x3d\x28\xf5\x17\xe8\xc9\xba\x6b\x51\x38\x4b\xc4\xea\x2e"
+ "\x2e\x13\x86\x5e\xd2\xa0\x97\xf0\xeb\xd2\x94\x5e\xb2\xeb\x7a\xc9"
+ "\x64\xe8\x25\xc0\x63\xbd\xad\xc5\xd3\x4b\x9a\xae\x97\xc2\xba\x5e"
+ "\xd2\x74\xbd\xa4\x5d\x4a\x2f\x25\xf7\xa1\xbd\x7d\x55\xbc\x9e\x0a"
+ "\xb9\xa9\xe4\x7e\x5e\x54\xa6\x55\x42\x67\x80\x8e\x7d\x55\x9a\xd2"
+ "\x47\x07\x30\xbf\x32\xb1\x3e\x0a\xa3\xbc\x66\xe8\xa3\x80\xd4\x1b"
+ "\xc7\x58\x27\x71\xdf\x15\x84\x1c\xc4\xba\x48\xea\x9d\xd0\x75\x21"
+ "\xd6\x3b\xa0\xdf\x9d\xb1\x7a\x07\xf0\xba\x70\x6f\x53\xf5\xfb\x2c"
+ "\x98\x5d\x87\xac\x21\x97\x58\xe4\xf4\x4b\x1a\x15\x38\x4b\x2b\x99"
+ "\xe7\xc2\xd5\x3e\xbb\xe8\xac\x24\x2d\x19\x32\x02\xfd\xe4\x71\x86"
+ "\x09\xb2\x5b\x14\x82\xbe\x80\x1c\x38\xc3\x90\xe5\x05\xbd\xfd\x9e"
+ "\x85\x25\x34\xf6\x71\x7f\xa6\x6d\xc1\x19\xe1\x03\x6d\xbc\x8f\x97"
+ "\x54\xd2\x42\x7f\x26\xf4\xc3\xbb\x34\xbf\x5b\x68\xf3\x0b\xbd\x0e"
+ "\xc8\x89\x73\xc1\xea\x56\xeb\xe3\xcf\xd8\x68\xe1\x05\xd1\x0a\xfd"
+ "\xf1\xff\x2e\x38\x63\xb3\x2e\xe9\xa6\x2f\xcc\x5f\x2a\xb4\x30\x64"
+ "\x11\x6d\xed\x41\x9b\x83\x90\x45\x4b\xb8\xc6\x67\x87\x1c\x16\x85"
+ "\x20\x8f\x91\xb2\x28\x52\x7d\xa7\x70\xef\x90\xed\xa8\x3e\x67\x07"
+ "\xfe\x41\x4d\x8e\x77\xdd\x72\x4e\x0b\x5e\xb7\x4b\xf9\x49\x41\x7a"
+ "\x8d\x92\x47\x4d\x28\x79\xd4\x98\x76\x26\x25\x8f\xdc\x27\x78\x3f"
+ "\x13\xbf\x5c\xfc\xa2\xe4\x91\xe5\x4c\xb0\x9c\x95\x5c\x18\x91\xb3"
+ "\x67\x74\x39\x4b\x51\x72\x16\x86\xad\x12\xde\xac\x64\x8d\xe1\xf3"
+ "\xbc\x77\x58\xd6\x52\xcf\x17\xe1\x3e\x41\xf1\x8d\x94\x37\x96\x35"
+ "\xe8\xd8\xf3\x55\x90\x3f\xc0\x13\x3e\x96\x03\xf0\xe5\xdf\x79\x3c"
+ "\x5c\x58\x22\xfe\x5e\x10\x9e\x88\x3e\x3f\xdf\x00\x7d\xf7\x8f\x05"
+ "\xbd\xe2\xef\xd0\x75\xcd\x90\xa5\x22\xc8\x90\x13\xb2\x54\x05\x99"
+ "\x62\x59\xb2\x84\x37\x33\xcc\x0b\x96\x61\x18\x72\x3c\x8d\x96\xa5"
+ "\xd1\xd6\x5d\x03\x6e\x47\xaf\x97\xde\x6d\x67\x9b\x06\xf7\x41\x2f"
+ "\xfd\xa6\x59\xdd\x5f\x67\xf6\x52\xf3\x07\xd2\xd6\x81\xfc\x95\x54"
+ "\xd0\x55\xa7\xe9\xba\x16\xf0\x3a\xe1\x3e\x19\xf7\x47\x16\xdd\xf8"
+ "\x9e\xd0\xea\x57\x71\xbd\x01\x96\x41\xe1\x9e\xc1\x36\x5c\x0e\x78"
+ "\xd0\x22\x02\x99\xc9\x22\x55\xdc\x21\x86\xec\xbc\xb6\x67\xc5\x73"
+ "\x2a\xda\x3f\x19\xd7\xf4\xbd\x03\x94\x81\x9f\x7d\xaf\x5b\xab\x64"
+ "\xfb\x0a\xf7\x59\x62\xa3\x7d\x7c\xed\x06\x9a\x62\xf5\x93\xa5\xc9"
+ "\xad\xe5\x5b\xb7\xda\x78\x8d\x2b\x83\xef\x85\xfb\x35\x6a\x1a\x20"
+ "\x33\xaf\x43\x68\x69\xa8\xcf\x69\x15\x62\x7d\x26\x35\xad\x83\x6e"
+ "\x70\x93\xbd\xc9\x2d\x0e\x85\x03\x4c\x83\xb3\x4e\x03\x17\xc6\x0d"
+ "\x78\x5e\x03\x3c\xdb\xbf\x59\x96\x43\xbf\x73\x52\xdc\xb5\x61\xb4"
+ "\x73\xb8\xfd\xf1\xdf\x5f\x9f\x6c\xd0\x64\x94\xf7\x53\x0c\x3a\x8d"
+ "\xb2\x8e\x68\xe6\x71\x3c\xbc\x41\xf8\xea\x9e\x24\xa6\x85\xdd\x15"
+ "\x12\xff\x07\x74\xac\xac\x08\xd3\x35\x8b\xca\xae\x15\x9e\x5e\xd1"
+ "\xea\x71\x9e\xa1\x26\xbc\xaf\x28\xc7\xd8\x99\x22\x20\x1b\x62\x52"
+ "\xff\x06\x11\xe2\xb5\x23\xd4\x51\xef\xa5\xec\x2c\xd5\x17\x7d\x41"
+ "\x39\x67\x4d\x16\x93\x00\x2b\x8d\x61\x75\xa0\x7c\xb8\x46\x4c\x46"
+ "\xbe\x16\x2f\xfd\xf1\xb0\xcc\x97\xdc\x17\x2c\xd9\x44\x9f\x3f\x4d"
+ "\xd7\xfb\xe4\xdc\xa2\x5a\xcc\x60\x5d\x80\x34\x1b\xd2\x42\x80\x3f"
+ "\x13\xf9\x7b\xbc\xf4\xb6\xbe\x26\x71\x7d\xc8\xc8\x87\x7b\x69\xc7"
+ "\x47\xf1\x4f\x82\x5c\xbc\x47\x7f\x39\x46\x36\xc7\x12\xf4\xe5\x7c"
+ "\xe3\xcf\x86\x5f\x4e\xfc\xd7\x23\xba\xdc\xe7\xec\x87\x8e\x76\x6d"
+ "\xa1\x49\xe8\x1f\xe0\xf7\xc5\x67\x30\x4f\x39\x25\xdc\x5f\xb4\xfc"
+ "\x60\x53\x10\x73\x89\x2f\x96\x7b\xa9\x3a\x7b\x34\x7a\xa2\xbc\x5d"
+ "\x1b\x10\x3d\x75\x1b\x86\x69\xf9\x21\x74\xa3\xe0\x7b\xd6\x45\x4d"
+ "\x48\x67\xba\x01\x4e\x9b\x41\xb3\xd1\xfb\x45\x64\xa9\x39\xee\xe4"
+ "\xc9\xc2\x2d\xa8\xf5\x0b\xbc\xa7\x35\xf9\x06\x45\x87\x73\x96\x7e"
+ "\xe8\x11\x5e\x97\xc6\xdc\xcf\xbf\xde\x2e\x82\x01\xf7\x64\xd8\xff"
+ "\x53\x9a\xf5\x75\x2f\xbf\x27\x34\x8f\x75\x4b\xdc\x31\x8b\xf7\xe0"
+ "\x46\xe0\xdf\x30\xb7\x73\x12\x91\xd4\x4d\xb6\x59\xa5\x15\x0a\xef"
+ "\x20\xc3\x6d\xad\x38\x4f\xdd\x78\xbf\xde\x2f\x7a\x44\xfd\xac\x22"
+ "\x9e\x6b\xb4\x6e\x18\xe4\xb4\x79\xe0\x6d\xd1\xba\x8e\x71\xba\x61"
+ "\x5e\xeb\x17\x06\xe9\x94\x93\x12\x9b\x86\xd7\x9b\x6e\xc8\xe2\xf5"
+ "\x25\xb5\xae\x36\xf9\x90\x97\xa6\x16\x19\x78\xb1\x1d\x02\xfa\x32"
+ "\xad\x82\x6c\x8f\xf0\x5e\xc7\xfa\x72\x11\x64\xbb\x04\x79\x3f\x30"
+ "\xda\xc0\xed\xd3\xdb\xe5\x8b\x6c\x17\xef\x89\x59\xcb\x15\x0d\xd6"
+ "\x97\x91\xc5\xa1\x68\x6d\xe1\xf6\x72\x5b\xb8\xcd\xb2\x2d\x52\xc7"
+ "\xf2\x7c\xe2\x56\xcc\xd9\x64\xba\x3d\xe0\xbe\x21\xdb\x4b\x37\x99"
+ "\x15\x4f\x4d\x3e\x14\xcb\x47\xc3\xfd\x98\xdc\x77\x0c\x73\xdc\x2f"
+ "\xb8\x34\x71\x12\x30\x7f\xaf\xd6\xea\x6e\xf8\xbd\xc6\xb6\x78\x10"
+ "\xfc\x6b\x4b\x9a\xc1\x63\xb1\xa7\x9c\xf5\xad\xcc\x7b\x25\xf2\x76"
+ "\x23\xcf\x3b\x7a\xde\x77\xd4\x1e\xa1\xbc\x8e\xe5\x2b\xc6\xb0\xdf"
+ "\x01\x8f\xe3\xbc\x76\x0c\x3a\x67\x19\xcf\x02\xcf\xb8\x56\x89\x1d"
+ "\x49\x33\xe2\xe3\x72\xfe\x18\x8f\x65\xe1\x01\xd1\x8b\x7a\xae\x66"
+ "\x9e\x72\x95\xd1\xe7\xc0\x97\x1f\x56\x6c\xa1\x2b\x99\x9f\x44\x8a"
+ "\xc8\x56\x74\xff\xd2\x24\xe1\x86\xdd\x0b\x8d\x5a\xb2\x81\x3e\x0f"
+ "\x39\x9a\x71\x9a\xbe\x34\xbd\xa0\xdc\x01\x5c\x89\xea\xce\x12\x49"
+ "\x1d\x94\x22\x66\xf2\x1c\xa7\xe9\x2c\xaf\x25\x7d\x29\xcf\xe0\x45"
+ "\xdc\x2f\xb9\x94\xbe\x00\x5d\x73\xd5\xda\xc6\x97\x7e\xcf\xfb\x1a"
+ "\x27\xe9\x4b\x87\xb9\xbd\x6a\x4f\xf5\x4b\xaf\x89\x01\xb1\x44\xa8"
+ "\x31\x6d\xa6\x97\xbe\xe4\xc5\x35\x57\xfe\xdc\x54\xa8\x3f\xcf\x44"
+ "\xbe\x5d\x62\x40\xe3\x3c\xb9\x48\x3b\x28\xdc\x09\x2c\x13\x47\x50"
+ "\x77\x97\x97\xee\xcc\x55\x7d\xf3\xa5\xfd\x0c\x6b\x14\x1c\x66\xa2"
+ "\x6f\x89\x79\xf3\x14\x7d\xf9\x2e\x47\x05\xaf\x95\x7e\xf9\x2a\x29"
+ "\x17\x80\xd5\x64\x52\x7a\x1b\x36\x6a\xee\x3e\xb7\x56\x04\x1d\x5d"
+ "\xa4\xed\x1c\xdb\x22\xef\xf5\x77\x42\x1f\x47\xe3\xc2\xaf\x9f\x55"
+ "\xda\x3a\x91\x79\xfc\xcb\x8d\x12\x0e\xf8\xbe\x75\xe2\x69\x7e\xde"
+ "\xcb\xcf\x7e\x9b\xa5\xc5\xd3\x90\x83\xfa\x4f\x73\xbd\x8d\x6a\xce"
+ "\xff\xe5\xbd\xfd\xa8\x23\xe0\xfe\x72\xa3\x97\xa6\x95\xca\x3d\x9e"
+ "\x34\x4b\xcb\x68\x7b\xd7\x2c\x3b\x2c\x73\x4a\xa6\x6f\x7c\xac\xa3"
+ "\x59\xca\x5f\x66\x7f\xf2\xb9\x5c\x5d\x6f\xf0\x3a\x50\xf2\x49\xba"
+ "\x71\x49\x87\x5d\xf2\xb7\x49\x98\xbe\x1c\xfa\x99\xe6\x33\xf1\x3e"
+ "\x9c\x52\x5f\x37\x2e\xb9\xf8\x97\x99\x85\x1f\xb4\x5c\xe6\x7c\xfd"
+ "\x39\x1f\xbf\x62\xfc\x8e\xe0\x79\xbe\xa4\xdd\x9e\xe5\x09\x5e\xbc"
+ "\xeb\x87\x5d\xcf\xcf\x5e\xca\x44\xda\x64\x13\xec\x79\x79\xdf\xf4"
+ "\x39\x5e\x4b\xc8\x5c\x8e\x3e\xe8\x55\x7d\x71\xa3\x5c\x4f\x01\x6e"
+ "\x4c\x77\xe1\x6a\x10\xc1\xb6\x0a\x3f\xf0\xce\xdc\xd5\xd6\xe0\x27"
+ "\xc7\x97\xb8\xfd\x99\x0d\xdc\x26\x3f\xe8\xcf\xd7\xf5\x0d\xc2\x77"
+ "\xb4\x31\x44\xbc\x1f\x08\x58\x90\xff\xd5\x6d\x52\xef\xef\x9c\x55"
+ "\xcf\xf0\x74\x9e\x10\x46\xfb\x65\x9f\xd4\x5b\x5a\xb8\x2f\x01\xeb"
+ "\x23\xb4\xdd\x7a\x96\x6e\xbc\x41\xa4\x8f\x6d\x39\x5a\x44\xb4\x17"
+ "\x7a\x04\x63\x8d\xdc\x9b\x68\x92\xfe\x08\x37\x62\xfc\xff\xf2\x7c"
+ "\x63\xff\xaa\x06\xef\x6b\xf1\x0e\x63\x8f\xaf\xa3\x28\x48\x0c\x2b"
+ "\xcc\xed\x43\xf9\x77\x35\x9f\x19\x63\x75\x82\xd8\x61\x69\xa9\x28"
+ "\x81\x9e\x19\xd6\x5b\x99\xed\x5b\xce\x88\xa0\xd1\xbe\xa3\xcd\x2c"
+ "\x0b\x37\x82\xff\x9f\xf2\x8e\xca\xff\xc3\x38\x7f\xa5\xec\xe8\x64"
+ "\xd5\x67\x1a\xe8\x12\xdd\x67\x5f\x71\xaa\xfe\xba\xf1\x60\x74\x7f"
+ "\x7d\x05\xa3\xfc\x8d\x7e\x5c\x93\xf1\x9b\xa4\x9e\x23\x7f\x37\x7a"
+ "\x23\x9e\xa7\xe0\xb7\x1c\xf8\x60\xfc\xff\x52\x91\xea\x07\x4e\x47"
+ "\x3b\x98\x47\xce\x91\x45\x1b\xca\x27\xde\x1f\xe6\x74\xe6\x67\x4e"
+ "\xd7\x60\xcf\xe0\x99\xf0\xde\xc6\xb2\x5a\xa7\x51\xd4\x7b\xcf\x76"
+ "\xf0\xdc\xa6\x41\xc6\xff\x01\x86\x65\xdd\x5a\x55\xc5\x7c\x8a\x3c"
+ "\xa0\x51\x55\x55\xc0\xfd\x95\x25\x06\x5d\x91\x36\x97\xdf\x33\x4f"
+ "\x22\xbd\xd4\x4b\xc5\x0e\xb9\xff\x8b\x39\x61\x7c\x5b\xe3\x2b\x0d"
+ "\xc3\x36\x59\xf2\xb9\x03\xac\x8f\x7a\xe9\xab\xfb\xa1\xb3\xd0\xb7"
+ "\x63\x0f\xa9\xb1\xe6\xab\xaf\xf1\x33\x74\xe5\x87\xb8\x6f\xee\x80"
+ "\x4e\x1a\xac\xd5\x9a\x87\x4c\x34\x76\xd0\x44\x39\xa1\x9d\xab\xa6"
+ "\x84\x52\x07\x0e\x7a\x7a\x0e\x53\x67\xe8\xe7\xe4\x78\x52\xc2\x78"
+ "\xd9\x03\x1e\x70\x95\x89\xf0\x1b\x83\x07\xcc\x9e\x50\x5f\x2b\xc6"
+ "\xe6\x6b\x4f\xd3\x57\x25\x3d\x5e\x38\x89\x51\xff\x71\x09\x5b\xd1"
+ "\xc7\xb6\xca\x52\xbb\x52\x84\x6a\x4f\x09\x3f\xec\xbb\xf1\x35\x83"
+ "\x34\xe5\x95\x4d\x94\xd5\x38\x48\x93\xf7\x0d\x52\xa6\xf8\x38\xd3"
+ "\xd4\x08\xbb\xed\xf1\x0b\x36\x82\x4e\xc8\x4f\x2d\x21\xcb\xbe\x4d"
+ "\x24\x79\x24\xbc\x03\xf6\x5b\x08\xf6\x5b\x5f\x26\xeb\xc6\x61\xfb"
+ "\x6d\x48\xda\xc5\x62\xbf\xe4\xa3\x1a\xb1\x3f\xa5\x88\x12\x92\x0b"
+ "\xc9\x06\xfc\x5c\x67\xe9\x2b\xff\x91\xdc\x0d\xdb\x11\x6d\xf6\xea"
+ "\xed\x05\xed\x7a\xad\x45\x34\x56\xb6\x15\xfa\x5a\xec\x18\x7b\x68"
+ "\xd4\x71\xd8\xc4\x3c\xe5\x67\xb9\xe1\x36\x9c\xe3\x3d\xea\xc3\x13"
+ "\x83\xe6\xf5\x8d\x22\xc8\xe9\xa5\xd7\x89\x20\xd2\xbb\xb8\xee\x43"
+ "\x48\x0f\xb8\xa7\x90\x37\xf1\x74\xf1\x68\x3c\x8a\xb9\x91\xae\x57"
+ "\xa6\x6c\x15\xa6\x4a\xe6\xd1\x9e\x2d\x21\xd8\xde\x67\x59\x66\xa7"
+ "\x54\x2e\x2a\x16\x21\xc7\x1a\xf6\x17\x98\x52\xc2\xbe\x0c\xbc\x87"
+ "\xf9\x33\xd8\x36\x9f\xe6\xbf\xc0\xe3\x05\xcf\x15\xac\xc5\x80\x59"
+ "\x7b\xae\x47\xb8\x32\xe9\xb3\xfa\x4f\xa0\x9d\xc9\x2f\x4e\x60\xbf"
+ "\x9e\x29\x47\xbc\xb4\x20\x83\x71\x97\xbe\x3b\xd0\x9d\xb0\xb7\xae"
+ "\x04\x5e\x41\x3f\xe8\x80\xf7\x18\xff\xef\xeb\xd1\xf7\x9b\x7d\xbc"
+ "\xd7\x8b\x34\x8c\xff\xdf\x98\xc2\x69\xa5\xd7\x91\xbd\xd4\x21\x7a"
+ "\x46\xb3\x99\x78\x0f\x1c\xf0\xae\x0e\xb8\x6f\x9a\x6c\xc0\xc1\x38"
+ "\xf5\x93\x7e\xd3\x37\xbf\x89\xb4\x99\x06\x1c\xe4\xb9\x0a\xcf\xb9"
+ "\xc3\x79\x54\x99\xfc\x88\x32\xdf\xec\x37\x7d\xe5\x27\x48\x2b\x8e"
+ "\x29\x53\x1e\x53\xa6\x3a\xa2\x4c\xa5\x5e\x4f\x73\x4c\x99\x43\x31"
+ "\x65\x5a\xe3\xe0\x76\x22\xa6\x4c\x77\x4c\x19\xff\xc5\xb8\x4d\xb5"
+ "\x44\x97\x99\x6a\x8f\x2e\x33\x35\x33\x82\x96\xec\xc7\x93\x85\xb4"
+ "\xec\x98\x32\xf3\x63\xca\x2c\x31\x9e\x47\xa1\x71\xf2\xfa\xbd\x64"
+ "\x07\x6f\xb2\xaf\x98\xef\x45\xf4\x4f\xff\xf7\x9f\x0a\xe8\x65\x1b"
+ "\x2e\x6e\xd7\xd4\x83\x31\xf5\x1d\x89\xa9\xaf\x3d\x4e\xbb\xbc\x31"
+ "\x65\x7c\xd1\x65\xa6\x51\x44\x99\x66\x55\xcf\xb4\x8c\xe8\x32\xd3"
+ "\x26\xc7\x94\x99\x71\x31\x5f\x4d\xcb\x8d\x29\x93\x1f\x53\xa6\xe8"
+ "\x53\x68\xc1\xe3\xb8\xf2\xa3\x9b\xc0\xb6\xf2\xdd\xb0\x11\xa6\xfd"
+ "\x89\x7d\x31\x78\xdf\xf5\x07\x83\xc1\x24\xde\x0f\xe4\xf1\xea\xa8"
+ "\x33\x88\xb1\x65\x1a\xf4\xec\xad\x59\xc6\x98\xc5\x7e\x2a\x2c\xd3"
+ "\xca\xc6\x9e\xd6\x30\x9a\x2d\x2a\x7d\xdd\x74\x7f\x39\xae\xeb\xe8"
+ "\x24\x1e\xa7\xb2\xcc\xc3\x36\xb1\xf2\x79\x23\x05\x27\xeb\x61\x63"
+ "\xdf\xb7\x49\xf9\xbf\x24\xb0\x4d\x7e\xd4\x29\xcb\xcc\x8c\xb0\xa3"
+ "\xb9\x7e\xff\xe1\x4d\x41\x73\x34\x1e\x59\xf6\x4b\xe0\x91\x0c\xdb"
+ "\x28\xbf\x13\x56\x11\xef\xe7\x77\x34\xc2\x06\x82\xdd\xcf\xb8\x9d"
+ "\xa4\xac\x66\x69\x93\xad\x19\x24\xbe\xf7\x94\xdf\x2e\xf7\xfb\x95"
+ "\x4d\x9a\xd5\xd5\x86\xfa\xd9\x76\x6f\x2b\x39\xcf\x3e\x59\x18\x7f"
+ "\xd9\x76\x9b\x9e\x74\xb4\xdc\xc7\x78\x1d\x37\xfc\x62\xbc\x34\xdd"
+ "\x2c\x6d\x8d\xfa\x59\x79\xec\x8b\xc0\x3e\x3b\x47\xfd\x33\x39\x0f"
+ "\xf8\x7f\xda\x07\x46\x7b\x31\xd6\x83\x27\xb2\x0e\x5e\x8a\x66\xaa"
+ "\x0f\xa7\x4f\x89\xe6\xc9\x24\xf0\xca\xf4\x9c\xe8\x7e\x9f\x9e\x17"
+ "\xdd\xef\xd3\x0b\xa3\x79\xd2\x04\x9e\x9c\x5e\x1a\x53\x66\x7b\x4c"
+ "\x99\x5d\x11\x65\xea\xf5\x7a\x0e\xc4\x94\x69\x89\x29\x73\x2c\xe2"
+ "\x19\x6d\x9c\xde\x35\x3c\xf7\x91\x3e\x57\xd3\x7b\x22\x9e\x4d\xbb"
+ "\xa4\xfe\x9c\x1e\x32\xd2\x78\xed\x68\xdf\x6e\xe5\xf3\xa3\xe0\xdd"
+ "\x6c\x8f\x91\x77\xe4\xbf\x79\x4a\x34\x0e\x37\x67\x47\xe3\x70\xf3"
+ "\xb0\xfc\xeb\xbe\x02\xbf\x3d\x45\xb7\x4c\xd6\x7d\x05\x7a\x31\x66"
+ "\x2f\xe2\x67\xc0\x6a\x40\x7e\xd0\xe1\xe6\xf2\x18\x78\xd5\x31\xf0"
+ "\x1a\x23\x9e\x6d\x78\x3e\x18\xd1\x06\x5b\xa2\x9d\x12\xc0\x2f\xb0"
+ "\xdf\x6e\x6e\x33\xd2\x79\x4e\x09\x7c\x7b\x5c\x72\xac\xc9\x61\x5f"
+ "\xb6\xf4\x93\x74\xf3\x9b\x3c\xff\xd4\x61\x46\xca\x3f\xa9\x76\xdd"
+ "\x62\x8e\xc6\xe3\x96\x8c\x68\x3c\x6e\x99\x1c\xd1\x2e\xbf\x75\x2b"
+ "\x3d\x60\x0d\x3d\xf8\x30\xdb\x3e\xec\xbf\x29\x7d\xca\xb6\xc0\x66"
+ "\xbb\xc0\xeb\xef\x41\x3a\x55\x4a\x89\x1e\x67\x0f\xe6\x72\xa2\x79"
+ "\x54\x7e\x4a\x9f\x55\xa8\x7c\xb9\xc8\x01\xf8\xdb\x0d\x7e\xd4\x76"
+ "\xce\x2a\xd4\x76\x8c\x29\x47\x1a\xf4\xdf\x74\x9b\xb2\x73\x93\x8e"
+ "\x09\x57\x7e\x03\xe8\x89\x79\xd1\x8c\xe7\xf4\x79\x44\x29\xfb\xa4"
+ "\xb1\xdf\x2c\xc6\xf8\x64\xb5\xef\x7f\x4b\x7b\x04\x5f\xfb\x1d\x9b"
+ "\xee\x14\x27\x69\xc6\x0e\xb6\x01\x58\x46\xd9\xb7\xed\x68\xc8\x47"
+ "\x3c\xf7\xf6\x84\x4e\x4b\xdb\x0d\xef\xeb\x55\xd9\x19\x96\x88\xb2"
+ "\x3e\x7d\x6e\xdc\xc3\xef\xa6\x85\xc8\x7c\xd4\xef\x23\xc0\xc9\x50"
+ "\xf6\xde\x8c\x1d\x47\x21\xaf\x28\x93\x6d\x94\xe1\x79\xb4\xdc\x43"
+ "\x2e\x25\xf3\xd4\x72\x32\xb7\x6e\x3a\x29\x61\x1b\x7e\x22\xb0\xa5"
+ "\x7b\x3d\xe5\x3d\xe4\xf1\x77\xf1\x5a\x97\x59\xf9\x04\xcd\xa8\x4f"
+ "\x0c\x92\xa5\x7f\xc7\x2c\xc8\xcc\x8c\xfa\xf0\x8e\x59\xf9\xc0\xad"
+ "\xc4\x4b\xb7\x1c\x66\x7d\x13\x49\xbb\x79\xf3\xf2\x1e\x5c\xb4\xe0"
+ "\xa6\x6f\x3f\x78\xdf\xe2\x79\xb7\x3b\x16\xaf\x7e\x7a\xc5\xf2\x9b"
+ "\xd6\x3e\x5b\xea\xd8\xb8\x6e\x75\xe9\xea\x35\xab\x1c\x59\xce\x1b"
+ "\x9c\x8e\xa5\xa5\xea\x9a\x59\xbc\x74\x7d\xe9\x6c\xbe\x9d\xe2\x28"
+ "\x59\xb7\x62\x83\xbc\xbd\x71\x3c\x45\x03\x59\x5d\xba\x62\x9d\xe3"
+ "\x86\xe5\x53\x1c\xf7\x2c\x5d\x5d\xfc\xec\xba\x15\x71\x61\xdd\xee"
+ "\x58\xb7\x62\xdd\x8a\xa5\xcb\x1d\xb3\x1d\x59\x0c\x39\x12\x5c\x44"
+ "\x7f\x66\x19\xe3\x18\x8f\x5f\x75\x6e\x71\x5c\x1f\xcf\xbc\x8a\x7f"
+ "\x6e\x5d\x7e\xf1\x58\x76\xab\x33\x9a\xe7\x6e\xad\x8a\xe6\xb9\x5b"
+ "\x1b\x2e\x1e\xcb\x6e\x8d\x19\xff\x6e\x8d\x19\xff\x6e\x6d\xbf\x78"
+ "\x2c\xbb\x35\x66\xfc\xbb\x35\x66\xfc\xfb\xda\xf0\xf8\x07\x5e\xf2"
+ "\x6e\x93\x7a\xe1\x6b\x31\xe3\xdf\xd7\x62\xc6\xbf\xaf\xcd\x88\x79"
+ "\x9e\x1b\xf1\x7c\x25\x9e\x17\x47\x8e\x8f\x78\x5e\x6e\xc8\xe7\x88"
+ "\x7e\xf9\x9a\xd3\xc8\xc3\xba\x1e\xba\xb9\x5b\xcf\x5b\x1f\x91\xb7"
+ "\x47\xcf\xbb\x7f\x58\xfe\x78\xef\x1b\xe9\x6a\xbe\x7e\xdb\x38\xd6"
+ "\xe9\xec\xff\xc7\x63\x13\xe4\xe3\xda\xb3\xf4\xb5\xad\x0c\x8b\x79"
+ "\x98\xfd\x41\xc5\xf7\x1f\x0d\x34\xa5\x93\x85\xcb\x34\xed\x64\x3f"
+ "\xe2\x19\x8d\xec\x1b\x8c\x34\xf6\x95\x86\x4e\xb9\x0d\xf6\xef\xbf"
+ "\xb2\xd5\x78\x71\x5b\x9e\xb4\xf9\x51\x46\x87\x2f\xe7\x35\x80\xc3"
+ "\xbe\xc7\x96\x3a\x35\x16\x77\xe3\x3e\x99\x79\x1a\xe5\xcd\xc2\x34"
+ "\xe3\x43\xf6\xb9\x46\x9a\x0d\xbf\x0c\xc0\xcb\x33\xe0\x6d\x9f\x10"
+ "\xdf\xb6\x8c\xb5\x73\x87\xe7\x83\x26\xb2\xd6\xb9\xb5\x2e\x8f\xc6"
+ "\xb6\xf5\x6d\xdb\xd5\xda\x82\xd6\x2a\xdc\xef\xe5\x37\x21\x3d\xfe"
+ "\x3c\xe9\x36\xd8\x7f\xb7\x39\xd5\x7a\xcb\x6d\xe8\xff\x05\xfb\xd5"
+ "\xda\xa9\xd6\x0a\x7d\x3b\x78\x8a\x66\xae\xc0\x75\x08\xd7\xfb\x0c"
+ "\xf8\xad\x72\xbe\x7d\x5b\xb7\x70\x27\x3c\xc4\x70\x63\xd2\x43\xd0"
+ "\x6f\x83\xd6\x50\x65\xfe\xc5\xef\x66\xda\x85\x3b\xf1\xc1\x38\xe9"
+ "\xec\x9b\x3b\xe8\xa5\x99\xcb\x19\xdf\x88\x74\xcc\xcb\x53\x17\x73"
+ "\x7e\x2f\xd7\x87\x32\xa3\xd9\xda\x86\xbf\xaf\x3a\x33\x30\x73\x57"
+ "\x4c\x3b\x3e\x39\x45\x5f\x4f\x53\xed\xf8\xfa\xd3\x31\x75\x1f\x8c"
+ "\xdf\x8e\x99\x6d\x68\xc7\x27\xa3\xb4\xc3\x2b\x69\x6b\x42\x5b\x4c"
+ "\x17\xbd\x0b\xa1\x2d\x9f\x48\xba\x47\xa5\x7f\x3d\x43\xb7\x85\xfc"
+ "\x98\x87\xd9\xf0\x4e\x96\x7d\xa8\x7c\xa4\xdf\xf4\x7c\xd9\xd6\x06"
+ "\xca\xbb\xb8\xce\xaf\x2f\x16\xee\xb1\x0f\x79\xe9\xeb\xd5\x12\xce"
+ "\x48\x7a\xb1\xc2\x05\x74\x32\x31\x9d\xd0\x1e\x94\x1b\xad\xbf\x8d"
+ "\x79\x89\x5a\x0b\xf9\x3a\xe4\x7f\x66\x89\xb1\x96\xb9\xbe\x5c\xf8"
+ "\x0c\x3a\xe2\x5d\x57\xcc\xbb\x60\xc4\x3b\x7f\xd4\xbb\x2d\x46\xfa"
+ "\xed\xc9\x46\xfa\x67\xeb\xa7\xdb\xb3\x63\xfa\x09\xfd\x73\x7b\x47"
+ "\x74\xbb\x6f\x9f\xaf\xda\x87\x3e\xba\x88\xd6\xb7\x17\xa1\x8f\x86"
+ "\xe2\xf7\xd1\xed\xdb\xe3\xf3\xda\xed\x72\x1d\x4d\xa4\x53\x3c\x78"
+ "\x2d\xe8\xbb\x21\xc9\x83\x7a\x3f\x5d\xdc\x3f\xb7\x7f\x60\xf4\xcf"
+ "\x67\x6b\xe3\x2c\x47\x4c\x1b\xc3\xa7\x68\xd6\x5e\xd5\xd6\x59\x67"
+ "\xa2\x61\xcf\x9a\x19\x9f\x17\x67\xe5\xa1\x9d\xe1\xf8\xed\x9c\x55"
+ "\x3c\x3a\x2f\xce\xe2\x7d\xd1\xf0\xc5\xbc\x38\xab\x59\x95\xa1\x78"
+ "\x65\x8e\x08\x77\xdc\x7a\x4e\xb8\x42\x6c\xe7\x66\x27\xf3\xfa\x52"
+ "\x44\x7a\x6f\x34\xff\xcd\x9a\x29\xcb\x31\xfd\x42\x4a\xcf\x72\x3f"
+ "\x9c\x72\x90\xe9\xd3\x78\x32\xe0\xce\x9e\x1f\x43\xab\xbe\x53\x94"
+ "\xdd\xd1\x6f\x4a\xd8\xaf\xe8\x35\x7b\x47\x34\x4e\xd9\x45\xf1\xe9"
+ "\x95\x5d\x09\x7a\xf5\xc5\xa7\x57\x76\xe3\xe8\xf4\xca\xe6\xfe\xef"
+ "\xbb\x98\x5e\xd9\xc7\x23\xe9\x05\x5b\x57\xb6\xef\x8b\x76\xf0\xc6"
+ "\x50\x81\x68\xe2\xb6\x86\xc9\x66\x05\xaf\xa8\x32\xbd\x28\x33\xdb"
+ "\x6c\x0d\x2a\x3e\x81\x0d\x69\x39\x4b\xd9\xbd\x86\xfc\xa7\x36\xd0"
+ "\x58\x31\xf4\x28\xfb\x19\x25\x70\x39\x8f\xb3\xaf\xd5\x13\xca\x22"
+ "\x9e\x7f\x44\xd7\x3b\x3b\x37\xbe\x2e\x98\x5d\x08\x9a\xee\x8c\x93"
+ "\xee\x54\xbe\x66\xb3\x0f\x45\xeb\x88\xd9\xf5\xd1\x7d\x04\xba\xa1"
+ "\x9c\xbe\xed\xf4\xa9\xbf\x4b\xf7\xd9\x1d\x74\x71\x9f\xdd\xf1\xaa"
+ "\xea\xaf\x3b\xb6\x46\xe3\x77\x87\x3d\x7e\x7f\xdd\x91\x35\x7a\x7f"
+ "\xdd\x31\x7f\xf4\xfe\xba\x83\xf7\x89\xfb\xbc\x74\x47\x73\xf4\xb8"
+ "\x71\x47\x65\x74\x7b\xef\xe0\xfd\x17\xab\x30\x8d\xb9\x92\x9f\x3f"
+ "\x6b\xbb\x8d\x1f\xeb\x38\xee\x2b\x3e\xc7\x04\xfc\xaf\x63\x1c\x2f"
+ "\x17\xc6\xa8\xb0\x41\xc3\xfa\x4d\xf1\xf7\x5b\x79\x8e\xdb\x89\x99"
+ "\x38\xef\x23\x3b\xbe\xc0\xb6\xfb\x9d\xcf\x6a\x26\xea\xc2\xbd\xe9"
+ "\x14\xdd\x75\x97\x66\x32\x95\xf3\x9e\xa7\xf4\x93\x97\x6b\x08\x77"
+ "\x56\x47\xf6\x05\xef\x7d\xf2\xdc\xb4\x56\xcd\x9d\xfe\x71\x8a\x72"
+ "\xae\x52\xfd\x72\xd7\x75\xd1\x74\xbc\xf3\x50\xfc\x7e\xb9\xf3\x18"
+ "\xfa\xe5\x1f\xf1\xfb\xe5\xce\xee\xd1\xfb\x25\x87\xd7\x0f\xff\x71"
+ "\xb1\x1c\xe5\xd8\x75\x39\xda\xc6\x65\x1c\x6b\x78\x3e\x9e\xf3\x3c"
+ "\xe7\xc1\x3d\x64\x24\xe7\x19\x7e\x7f\x53\xaf\x21\x47\xb2\xcc\x7c"
+ "\xc0\x92\xf5\xeb\x79\x72\x75\x18\x91\x70\x4b\xac\xbd\xf1\xe4\x24"
+ "\xa7\x8a\xf3\x4e\x2d\x21\x0b\x68\x98\xbf\x97\x61\xac\x23\x02\x8c"
+ "\xbf\x71\x3e\x4e\x9f\xea\x8f\x94\x93\x9c\x16\x23\x1f\xeb\x3a\x3d"
+ "\xef\x21\x11\x28\x22\xce\x17\x03\x5b\x6f\xff\x58\x39\x8e\x70\x7e"
+ "\xce\x17\x9d\xe7\x2e\x8b\x92\xc7\xbb\xe6\x47\xcb\xe3\x5d\x8e\x68"
+ "\xfe\x04\xfd\x51\x4e\x83\x9e\xc3\x7d\x29\x70\xf8\xcc\xfc\x75\x69"
+ "\xd9\xbc\xab\x31\x46\x36\xc1\x03\x77\xcf\x56\x3c\x70\xf7\x35\x31"
+ "\xb8\x1e\x8e\xcf\x03\x77\xb5\x8f\xce\x03\x77\xf5\x8c\xce\x03\x77"
+ "\x9b\x99\x07\xbc\x74\x77\x76\xb4\x6c\xde\x3d\x29\xba\xed\xa8\x57"
+ "\xca\x26\xa5\x5d\x8e\x6c\xc2\x16\xba\x72\x34\x39\x64\x99\x62\xff"
+ "\x91\xa6\x41\x63\xaf\xe3\x33\xd1\xcc\x02\xb9\x62\xfc\x8e\xf3\x9a"
+ "\x12\x74\xfc\x4c\xa6\xe1\x3e\x79\xfe\xf3\xee\xee\x48\x3a\xd6\xaa"
+ "\x33\x97\xae\x53\x34\x67\x35\xef\x2b\x2b\x7a\xce\x9d\x1e\xdd\xfe"
+ "\x39\xe6\xf8\xf4\x9c\x33\x09\xf4\x74\xc5\xa7\xe7\x9c\x99\xa3\xd3"
+ "\x73\xce\x62\x3e\x93\x75\xb1\x4c\xcd\x29\x76\x6c\x90\x36\x8a\x2c"
+ "\x73\x96\xe6\xfc\xee\xb3\x8d\x4f\x73\xf6\x47\x8f\x4f\x73\xaa\x2f"
+ "\x7f\x7c\x9a\xd3\x13\x7f\x7c\x9a\x4b\xf1\xc7\xa7\xb9\x76\x25\x0f"
+ "\x73\xf3\xa2\xe5\x61\x6e\x56\x34\x4f\x80\x76\xff\x6d\xe3\xd3\xdc"
+ "\xe6\x18\x19\xa8\x3b\x45\xf3\xae\x83\x4d\x51\xa9\xfa\x6d\xde\x47"
+ "\x31\x38\x1e\x89\xdf\x6f\x73\x4f\xa0\xdf\xea\xe2\xf7\xdb\x5c\xdf"
+ "\xe8\xfd\x36\x2f\x19\xfd\x56\x77\x71\xbf\xcd\x9b\x7c\xf9\x36\xc5"
+ "\xbc\xfc\xe8\x3e\x9b\x97\x73\xf9\x7d\x36\xaf\x31\x7e\x9f\xcd\x3b"
+ "\x1c\xbf\xcf\xe6\xb5\xab\x3e\xbb\xc7\x1c\xdd\x67\xf3\xba\xa3\xfb"
+ "\x0c\x74\xfb\x2f\xf6\x19\xfa\xa7\x4d\xf9\x27\xdc\xb3\x02\xf3\xf6"
+ "\xb1\x01\xf7\x3d\x4b\xbc\x74\xef\x64\x35\xb7\xbe\x57\x8d\x1d\xaa"
+ "\x0f\xdf\x40\x9e\xbc\x8b\xc7\x81\x7b\x9c\x7a\xda\xb7\x2f\xee\x87"
+ "\x7b\x76\x41\x47\xf7\xb6\x95\xcb\xbd\x2d\xd5\x87\x4c\x73\xe4\x6b"
+ "\xdd\xc4\xfb\x53\xf7\x1c\xe6\xb2\xe8\x63\xe1\x09\x86\x88\xf5\x3a"
+ "\xf2\xfb\x19\x0e\x9f\x45\x8d\x81\xe5\xbd\x9c\x31\x7e\x74\x9f\x1a"
+ "\xad\xad\xb5\xe2\x66\xc0\xbb\xf7\x82\xe2\xd5\x7b\x63\xed\xdf\x26"
+ "\xbc\xfb\xbd\xe2\xd3\xfb\x5e\x8a\xc6\xe1\xde\xe5\xf1\xf9\xf4\xde"
+ "\x72\xb4\xa1\x29\x3e\x9f\xde\xdb\x30\x3a\x9f\xde\x8b\xfe\xa7\xa6"
+ "\x88\xb9\x4f\xfa\xe3\x21\x6f\xcc\xdc\xe7\xde\x2e\xab\x5f\xf1\x8e"
+ "\xb4\x89\x6a\xb4\xb6\x80\x3b\x37\xd6\xfe\x43\xdf\xe4\x6e\xd1\x71"
+ "\x7e\x36\xba\x7c\xee\x28\xf6\x5f\x2e\xdb\x7f\x6f\xc4\xc7\x39\xf7"
+ "\x12\xf6\x5f\x2e\xdb\x7f\x6f\x5c\x2c\x5b\xb9\xba\xfd\x17\x6f\x8e"
+ "\x97\xdb\x18\xbf\xff\x73\x63\xfa\x9f\xf2\x4b\x31\x1f\x96\xe5\xa3"
+ "\xf3\x7d\x10\x99\x8f\x7d\x93\x38\x2f\xf3\xc8\xc5\x79\xef\xb3\xc4"
+ "\xc2\x1c\x25\x5f\xd6\x45\xbc\xc7\xbe\x54\x71\x79\xef\x3e\xfd\x3c"
+ "\xc9\x7d\x87\xa3\xe5\xf1\xbe\xd2\x68\x79\xcc\xb5\xc7\x94\xdb\x15"
+ "\xfd\x1e\xfc\xf3\xdf\xa6\x63\xef\x37\xc7\xf0\xc0\x7b\xa7\xe8\xfe"
+ "\xad\x8a\x07\xee\xff\x8f\x68\x3c\xee\x9f\x14\x9f\x07\xee\x9f\x81"
+ "\xf6\xbf\x17\x9f\x07\xee\xcf\x1b\x9d\x07\xee\x2f\x06\x2d\xdf\x8b"
+ "\xe4\xdb\x87\xca\x73\xc6\xc6\xe4\xa9\x8f\xaf\xf3\xee\x3f\x10\x7f"
+ "\x8d\xe0\xfe\x56\x45\xe3\xfb\x83\xd1\x34\xbe\xbf\x2b\x9a\x86\x68"
+ "\xcb\x7f\x9d\x86\xc3\xf1\x27\x02\xee\x6f\xc4\xca\xbf\xe7\x14\x7d"
+ "\x43\x97\xff\xf9\xef\x47\xe3\xf8\x8d\xe5\x0a\x97\x78\xeb\x22\xdf"
+ "\xe0\xf9\xaf\x27\x3e\x2d\xbf\xd1\x18\xbf\xcd\xdf\x38\x8c\x31\xc8"
+ "\xa3\x5d\x24\x4b\xdf\x68\x47\xfa\x43\xbc\x1e\xca\xeb\x21\xfb\x90"
+ "\xfe\x50\x88\x2c\x72\xbc\x1a\x1e\x97\xbe\xe1\x63\x5f\x14\xa6\x3f"
+ "\xf3\xaf\x75\x12\xe5\xf1\x18\xc4\x78\x15\x94\x4b\xbf\x05\xeb\x76"
+ "\xe6\xf5\xeb\x99\xd7\xe7\x4b\xfb\x8f\xf7\x59\xd8\x8f\xd0\xea\xa4"
+ "\x3c\x8e\x83\x61\xf0\x3b\xe7\x8f\x86\x3d\x7f\x3e\xcb\x05\xe7\x37"
+ "\xf2\xaa\x75\xb3\xca\x18\xdd\x34\xbf\x34\x7e\x1f\xcf\xaf\x1e\x9d"
+ "\x77\xe6\x1f\x50\xfd\x3c\xff\x83\xe8\x7e\x9e\xdf\xaa\xb9\x53\x17"
+ "\x73\x5b\xbd\xa0\xf3\xe5\xf4\x71\xa9\x43\xf8\x46\xd5\xf7\xdb\x1e"
+ "\xed\x2a\xa9\xa0\x2f\x9c\xa6\x05\x73\x65\x7d\x26\x11\xb4\x6e\x4d"
+ "\xa0\x36\xa9\x03\x16\xbc\x2c\xf1\x44\x9e\x82\x10\x99\xc4\xb6\xa7"
+ "\xba\xf8\x5d\x93\x5b\x04\x91\xef\x38\xef\x09\xf0\x59\x6e\xf0\xc2"
+ "\x95\x27\x69\xc1\x63\x51\xe5\x31\x32\x7b\x14\x8c\x86\x26\x29\x8f"
+ "\x0b\x76\x19\x6b\xba\xdb\xf1\x1c\x7f\xdd\x77\x41\x8b\xe1\xfb\xa0"
+ "\x7c\xc6\x16\x8c\xba\x7f\xc9\x38\xf1\x79\x1a\xc6\xe9\xd2\x7a\x60"
+ "\x61\xb2\xc1\xbf\xca\xd7\x72\xe1\xa4\x11\x5f\xbe\x85\x99\x78\x77"
+ "\xfc\x12\x6b\x83\x11\x72\xb0\x70\x71\x24\x1c\x15\x83\x65\x61\x91"
+ "\xe1\x8f\x87\xfb\xd2\x4f\x81\x65\xe0\xd3\x18\x83\xcf\x41\xd8\x29"
+ "\xdb\x75\x18\x2d\x97\x82\xc1\x7d\xae\x78\x96\xf9\x61\xe1\xf1\x4b"
+ "\xad\xf9\x25\xda\x29\xef\xc5\x8b\x78\x6b\x91\xb4\x97\x18\xc6\xa5"
+ "\x71\x5c\x94\x13\x35\xb7\x90\x7b\xf7\xbc\xb7\x95\x97\xa2\xe4\x7e"
+ "\x51\xcc\x1a\xe1\xa2\x25\xd2\x9f\x4a\x97\xfb\xc7\x43\xb1\x72\xb0"
+ "\xa8\xdc\x18\xa3\x63\xd2\x77\x19\x72\x8f\x79\x2d\xc3\x8d\x59\x67"
+ "\x5d\x74\x58\xc9\x42\x5e\xb2\x96\x12\x39\x5f\x5b\x24\xed\x3f\x63"
+ "\xbd\xd4\x8b\x7c\x31\xe5\x62\xd6\xff\x16\x2d\x11\xa3\xaf\xd3\x27"
+ "\xa3\x7f\xfd\xbc\xb7\xa5\x62\x43\xe4\x65\xc7\xac\x57\xf8\x6a\xe5"
+ "\x79\xff\xbf\x72\xfb\x75\xbd\xf7\xc0\x9b\xd1\xf5\xe5\x2d\x71\x9d"
+ "\xb9\x54\xfb\xf3\x46\x69\x7f\xde\x48\xfb\xd7\x48\xb8\x31\x6b\x89"
+ "\x79\xb2\xfd\xe1\x8b\xf4\x5f\x5e\x3b\xf4\x97\x41\x37\xd8\xdc\x0f"
+ "\xdc\x60\xd8\xea\xbc\x7e\x30\xba\xad\xfe\xc0\xc8\xfa\x9f\x2c\x97"
+ "\x37\xb2\xfe\xe7\x8b\x67\xab\x7b\x49\xee\xad\x46\xd5\xfd\x40\xae"
+ "\xb5\x31\x5e\x5b\x1e\x18\x65\xfd\xef\x01\x7d\xfd\xef\x81\xe3\xd1"
+ "\xfa\xec\x81\xfa\xe8\x3e\xcc\x8b\xe9\xc3\x07\x0e\x45\xf7\x61\xde"
+ "\x92\xff\xec\xb8\x86\x67\x4a\x4c\x4c\x34\x25\x26\x98\x12\x12\xf1"
+ "\x1a\x4d\xa4\xb1\x89\xe6\xc4\x24\xfc\xc6\xe8\xd7\xb1\xa6\x44\x93"
+ "\x19\xbf\x24\xfd\x3a\x26\xe6\x79\x2c\x97\xc5\xcf\xac\x5f\x93\x62"
+ "\x9e\xc7\x7c\xca\xfb\xb1\x7a\xbd\x46\xfd\xe6\x98\xe7\xa4\x4f\x79"
+ "\x3f\xe6\xbf\x58\x9e\x2e\x7a\x8e\xf6\x43\xbb\x6f\xcd\x86\xa5\xc5"
+ "\xab\x97\xcb\xfd\xe2\x15\x8e\xa5\x4f\x3c\xb1\x62\xfd\x7a\x47\xe9"
+ "\x5a\xc7\xdd\x77\x3d\x78\xf3\xed\x0e\xb5\xed\x5c\x3c\xfb\x86\xe5"
+ "\xe3\x69\xc1\xc6\x75\xfc\x62\xc1\x43\xf7\xe5\x3b\xf2\xee\xbe\x2b"
+ "\xfa\xa5\x01\x46\x6e\x2f\x5f\x0a\x4a\x84\xfc\xe5\x3c\x3f\x81\xa8"
+ "\x7a\xb7\xd4\x3d\xdd\xec\xe7\xab\xd6\x3c\xf2\xa7\xb7\xb3\xff\xe8"
+ "\xa0\x4b\xb4\x5e\xcf\x7b\xfa\x0f\xfd\x85\x1b\x71\x53\x73\x25\x95"
+ "\x2c\xe3\xf3\x2b\x0f\x9d\x13\xbf\xf1\x91\xe3\x7e\x32\x9d\xa4\xc7"
+ "\xee\x6a\xcb\x45\x5e\x3c\x7b\xbc\x21\x72\xb8\xc8\x72\x8a\xbe\xfd"
+ "\x21\xde\x25\x88\x3b\x34\xa4\xf9\x75\x5f\xe8\x6f\x9d\x93\x69\xbf"
+ "\xa9\x34\xf2\x59\x4f\xd1\xe2\x97\xc4\x6f\x84\x7c\xe6\xf3\x41\x2a"
+ "\xdf\xe2\xd5\xc2\xf4\x50\x26\xeb\x86\xc6\x74\x32\xf3\x5e\xe8\xcb"
+ "\xe9\x64\x79\x79\x02\xc7\x48\x59\xbc\xc4\xd8\x0b\x7d\x1e\xcf\x5e"
+ "\x7a\x2c\x87\xeb\xe6\xbc\x9a\xe9\xa1\x07\x39\xff\xbe\xe8\xfc\xd5"
+ "\x23\x7b\xb1\x8b\x97\x98\x90\x6f\xd1\x87\x64\xb5\x86\xc5\xb9\x60"
+ "\xea\x40\xf3\xd4\x5c\x4a\xf0\xa0\x2b\xda\x43\x95\xa4\x7c\x7e\x16"
+ "\xff\xa5\x2c\x2c\x42\xec\x9f\xbe\xa0\xd7\x25\xea\x9e\x26\x33\x64"
+ "\x3a\xa1\x75\x1d\xfb\x28\x2c\x3e\xd2\xb4\x82\xcc\x68\xff\xa4\xd3"
+ "\xf4\xcd\x5e\xc7\x42\x22\xd7\x02\x32\xff\xc1\xc9\xfe\x86\xe2\x8e"
+ "\xda\x3f\x93\xf9\xa7\x83\x95\xa6\x41\x61\xa7\xf2\x52\xd1\x23\x38"
+ "\x6e\x92\x5f\x04\xd9\xc7\xbf\xbd\x30\xcc\x79\xa6\x06\x5c\x76\xea"
+ "\x2c\xf5\xd3\x96\x0f\x44\xb0\xea\xcf\xea\x6c\x40\x47\xaf\x9f\xfd"
+ "\x17\x2d\x5b\x16\x50\xe2\xa9\x7c\x32\x75\x14\x35\x90\x67\x89\x9f"
+ "\xca\x3f\x10\x3d\xed\x85\x1f\x51\x67\xd1\x21\x2a\xe8\x22\x53\x7b"
+ "\xf7\xdf\x48\xc6\xfe\xd9\xb9\xca\x51\x71\x81\xec\x5b\x56\x73\xda"
+ "\x05\xda\xb4\x85\x52\x36\xfd\x85\xac\x9e\x9e\x2e\xd4\x73\x86\x1e"
+ "\x39\x41\x09\x80\x67\xda\xfc\x37\xb2\x6f\x7e\x98\xfd\x7c\x73\xa8"
+ "\xb1\x82\xec\xc2\x95\x99\x3c\xe8\xca\xb4\x0d\x8a\xcc\xf4\x80\x2b"
+ "\x33\xa3\xb3\x04\xf9\xbb\xdf\xa5\xd4\x2e\xca\xf8\xcd\xe9\x2e\x53"
+ "\xc3\x79\x9a\xc4\x6d\x3a\x85\xb6\x35\x9e\x47\xfe\x9d\xd9\xcd\x1a"
+ "\xca\x46\x96\x09\xa5\x65\xb7\x78\xf2\x83\xa4\x01\x56\xc3\x20\x4d"
+ "\x6a\x1c\x24\xbb\xb6\x23\xbb\x99\xcb\xf5\xd2\xb7\xfe\xe9\xc1\xc8"
+ "\x50\xbe\x45\x84\x87\x6a\xb5\x66\xe8\xc4\xb1\x6f\x2c\x6b\x31\x7b"
+ "\xda\x7b\xa9\xc3\x3f\x48\x9d\xf4\x57\xf2\x38\x3f\x6e\xfd\xe9\xb2"
+ "\x96\x24\x0d\x42\xd0\xba\xa9\x1b\x75\x29\xde\x71\x75\x90\xd9\x83"
+ "\x3e\xa8\xab\xa0\xe4\x92\x4d\x34\xf6\x34\xd2\xd5\xdc\xfe\xdc\x01"
+ "\x4f\xe8\xe3\xd6\x4d\xd2\x1f\xf7\xb1\x9c\x8a\x0e\x4a\xec\xf4\x37"
+ "\xb0\xdf\xa7\x29\x9c\xbe\xca\xe1\xf1\x1f\x27\x4f\xc9\x3f\x5a\x35"
+ "\xdb\x2a\x4b\xb5\x46\x96\xd7\x07\x8e\x9b\x3c\xe6\x01\xf2\xe4\xfb"
+ "\xe9\x3d\xd4\x2d\x76\xae\x9a\x02\xbd\x95\xd3\xe9\x0f\xf2\x79\xa7"
+ "\x2c\xd1\x6f\x1f\x5f\xb7\x8e\xa6\xec\x3b\x4f\x93\xf7\x9e\xa7\x4c"
+ "\x11\xc8\x34\xb1\x8f\x2d\x9f\x5f\xdd\x8b\x6b\x72\x37\x59\xd0\x76"
+ "\xe5\x8f\x9d\xa6\xfb\xda\x0e\x65\x52\xd3\xe0\x88\xaf\xed\x60\xff"
+ "\x88\xaf\x2d\x78\xaa\x90\xfd\x6d\xbd\xf4\x4d\xbf\xb5\x9d\xc6\x9e"
+ "\xa4\xc5\x76\xe6\xef\xba\xb3\x64\xde\x76\x96\x68\x6a\xa5\x89\x1c"
+ "\x2b\xf9\x9c\xc5\xb7\xff\xe2\x41\xdf\xf0\xfd\x49\xfa\x76\x35\xae"
+ "\xc9\xf8\x25\x20\x7d\x2b\xb7\xb3\x5b\xe7\x63\xa4\x99\x90\xf6\x2c"
+ "\xae\x89\xb8\x3e\xed\x6a\x14\x3e\xd4\x15\xec\x37\xd1\x78\xe6\x67"
+ "\xdd\xbf\x37\x18\x70\x7f\x7b\xb9\x97\xd6\x2c\x37\xf8\x5a\xe9\xf8"
+ "\xc5\x85\xef\x9d\x3c\xc3\xf1\xb9\x7c\x12\xaf\xa1\xa2\x04\x8e\xd5"
+ "\xa5\xa7\x33\x0e\x1d\x5c\x2f\xea\x3f\x84\xab\x15\x3f\x96\xd3\xb9"
+ "\x46\xd9\xfe\xa1\x22\xae\xf3\x77\x48\x17\x46\x3a\xda\x6d\xe6\x77"
+ "\x6f\x9d\x3c\x63\x52\x79\x32\x4d\x80\x19\xd4\xe1\x43\xf6\x17\x9b"
+ "\x59\xc6\xfb\x4d\x56\x71\xb4\x70\x06\x35\xee\x16\xed\x7b\x77\x8b"
+ "\x36\x25\x7b\xf9\x16\x2f\x95\x58\x18\x47\x8c\xe3\x6d\xd5\x78\x77"
+ "\xd4\x41\xc4\x74\x69\x5b\xce\xfe\x64\xf9\xb0\xff\xae\x38\x12\xd9"
+ "\x06\xe1\x7e\x50\xda\xfa\x3f\xab\x38\x96\x04\x1d\x60\xe9\xec\xee"
+ "\xa5\x9f\x0e\xf6\x24\xb9\x7e\x4f\x26\x4f\xe8\x24\x4d\xcb\x20\x3b"
+ "\xdb\x83\x4d\xbb\x85\xf7\x45\x8e\x07\xb8\x5b\xf4\x82\x5f\xae\x39"
+ "\x4d\xf9\xcf\x7e\x35\x83\x32\xfe\x88\xd1\x4e\xe9\xa7\xfc\x9a\x08"
+ "\xfd\x74\x55\x87\xb7\x25\x42\x37\x2d\xf9\xdd\xc5\xba\xe9\xd1\xf7"
+ "\x95\x6e\x82\xec\x4b\x5d\x14\xf6\xea\xe9\xaf\xc7\xa4\xeb\x7e\x22"
+ "\x8f\xee\x88\x49\x0f\xea\xe9\x5b\x62\xd2\x7d\x2a\xfd\x91\x77\x0d"
+ "\xdd\xd7\xc9\x78\x6c\x64\xdd\xf7\xc8\xab\xac\xfb\x3a\x0b\x75\xdd"
+ "\x27\xf5\xcf\x23\xcf\x89\xff\x01\x5d\xb4\x81\xf5\xcd\x23\x8f\x31"
+ "\xfe\xe2\x37\x64\xe0\x3e\x0e\x69\xd7\x70\x5a\xfd\x5f\xc9\x8c\x9f"
+ "\xa1\xf7\xd6\xb2\xde\x63\x9d\xc7\xba\x6f\xcf\x04\xd1\xb5\x67\xb7"
+ "\x38\xd1\x28\x63\x0d\x3d\x3c\xac\xff\x5e\x40\x5a\x35\xd2\x5e\xc0"
+ "\x7b\xd6\x83\x4c\x93\x8e\xfc\x16\x62\xff\x13\xf0\x58\xb6\x66\xca"
+ "\xa2\x5a\xf4\x37\x9f\x37\xdc\x0e\xfa\x5a\x13\xa8\xc4\x53\xca\xe7"
+ "\x57\xc3\xec\x93\xd6\xdd\x59\xda\xcd\x72\x37\x61\x1b\xe4\x8c\xcf"
+ "\x4b\x57\xf8\xc5\x69\x3e\x77\xc7\x38\x14\x94\xdd\xcf\xf1\x99\x12"
+ "\xda\x8a\x88\xd8\x2f\x9c\x75\x36\x70\x31\xd7\x03\x27\x15\x0f\xe6"
+ "\x91\x0c\x2f\xbd\x36\x57\xf5\xf5\x63\x39\x1c\x07\xee\x24\x3d\x9c"
+ "\x8f\xf9\x5e\x90\xdb\x66\x0d\x57\x12\x9f\x83\xe1\xd8\x88\x7c\xdd"
+ "\x63\xd2\x8a\xea\x8d\xb3\x30\x6e\xe8\x06\xe4\xf1\x74\x05\x89\x71"
+ "\xf6\xd2\xc3\xfb\x3b\xca\x5b\xb8\x7c\x2e\xd3\x46\xb8\x5d\x06\x8c"
+ "\x04\x09\xc3\x24\xe7\x8d\x98\x1b\x3c\xa2\xd6\xce\x53\xb5\xe6\x8e"
+ "\x25\x3e\x62\xbd\xef\xe9\x01\x8c\xf2\x93\x0a\x06\x60\x09\x8c\x01"
+ "\x51\xef\x74\xf8\x29\x5b\xc4\x39\xc0\xcf\xe0\xfe\xe2\x73\x91\xbc"
+ "\xdf\x06\xba\x24\xb3\xaf\xbc\xb2\x45\x1f\xde\xdb\xf4\x57\x22\xfd"
+ "\x6c\x27\xf8\xed\xe1\x46\x3e\xb7\xc4\xe7\x39\x2f\x75\x96\x13\x34"
+ "\x9a\x6c\x9c\xe7\xd4\x36\xfe\xf7\x9e\xe5\x04\x6c\xfb\x3e\x93\x38"
+ "\x04\xfc\x1b\xf9\x3c\xe7\x49\xca\x0f\x31\x1f\xea\x6d\x6a\x7e\xe9"
+ "\x11\xa6\x79\x7e\x37\xa7\x61\xee\x78\xcc\xe8\x7f\x6e\x2f\xb7\x05"
+ "\xef\x8e\x29\x1b\x51\x1c\xf7\xd2\xa3\xcd\xfc\x1e\x69\x87\x39\xff"
+ "\x34\xe8\x31\x0f\xc6\xb0\x37\x4e\x86\x4d\x75\x9b\xc8\xac\x74\xda"
+ "\x92\x77\xb8\xbc\xd2\x69\x4b\x4a\x46\x74\xda\x92\x15\x4a\xa7\x29"
+ "\x1a\x2b\x9d\xb6\xe4\x61\xa5\xd3\x96\x3c\x20\xf7\xc5\xa0\xd3\xf8"
+ "\x1d\xeb\x35\x43\xa7\xed\x9d\x20\x8e\xb1\xee\x08\xb8\x97\xe4\x18"
+ "\xba\xad\x06\x69\xac\x3b\x18\x47\xa5\xa7\x1e\x69\x10\xff\x5f\x26"
+ "\x29\xbf\x03\xbe\x2f\xe2\xf3\x0b\x3d\xfa\x3d\xfa\x65\xc9\x9b\x4a"
+ "\xc7\x2d\xd9\x35\xa2\xe3\x96\xd8\x47\xca\xb2\x8e\x5b\xf2\x63\xa5"
+ "\xe3\x54\x7a\xd3\x23\xac\xe3\x1e\x69\x60\x1a\xe8\xf0\x4d\xbc\x86"
+ "\xa7\xe7\x67\x3a\x36\x47\xea\xb8\x68\xf9\x5a\xd2\x6b\xe8\x38\xd6"
+ "\x6d\x78\xe6\xb8\x91\x85\x52\xde\x90\x6f\x17\x68\x6e\xc8\x1d\xf7"
+ "\x01\xb7\x99\xe3\xbd\x31\xdd\xe6\x9c\xa1\xb1\xfa\xd9\x21\xbd\xdd"
+ "\x8f\xcd\x34\x7c\x1f\xbd\xb4\x24\x27\x9e\x1d\x3d\x12\x93\x91\xae"
+ "\xe5\x73\xf3\x9e\xca\x93\xe4\x69\x10\x95\x9d\xa1\x0f\xa8\xa0\x14"
+ "\xba\x22\xf1\xa9\x0f\xb9\x6f\x31\xef\x98\xc5\x57\xd6\x3d\x18\x4b"
+ "\xb7\x14\xf8\x69\x0c\xe6\xea\x1f\xd6\x99\xf0\xce\x19\xf5\x4e\xae"
+ "\x31\x4c\x5d\xc7\xf1\xfc\x1e\x2b\x1c\x6d\xbe\x7f\x99\xf5\x9d\x19"
+ "\xbd\xbe\xc7\xc7\xc9\xfa\x60\x53\x61\x0e\x94\x76\x96\x1e\x93\xf3"
+ "\x12\x19\x03\x67\x5b\x3c\x58\x8f\x7f\x5d\x7f\x9f\x34\xca\xfb\x87"
+ "\x3f\xa5\x7c\xd9\xa7\x94\x7f\x99\x75\x11\xda\x67\x0d\xbb\xa3\xe1"
+ "\xa4\x86\x8c\x7c\xa7\x39\xdf\xfb\xfa\x5a\xcc\x87\xae\xeb\xe4\x1c"
+ "\xcd\x6e\xc0\x64\xfe\xab\x45\x3e\x19\x97\x05\xba\x72\x2e\x6a\x4c"
+ "\xf5\x47\x95\x0d\x8f\xd0\xf8\xf1\x51\xcf\x74\xb2\x1e\xf5\x34\x90"
+ "\x8c\x51\x7b\x14\x36\x29\xc7\x4c\xda\x35\xbc\xfe\x51\xb0\x18\x7a"
+ "\x33\x2f\xc2\x2f\xb6\x17\x7a\xee\x5a\x15\x8f\xc6\x4f\x75\x6a\xbe"
+ "\x79\x35\xf4\x73\x3a\x9f\x87\xe1\xb3\x31\x05\xe1\x3c\xd3\x51\x19"
+ "\x3b\xad\xa0\xde\x28\x3b\xda\x3a\x0b\xd7\xab\xd7\xc9\x3e\xa6\x7e"
+ "\x94\x69\x33\xca\x30\x6c\xf6\x53\xc4\xb8\x7c\xad\x3c\x53\x1a\xea"
+ "\x65\x5d\x78\x35\x6c\xd1\x74\x55\x4f\x21\xe9\xf5\x40\x66\x1e\x6b"
+ "\xbd\xd4\xd9\x8c\xd1\xdb\x57\x38\xe3\xf2\xdb\x47\x7a\xfb\x0a\x4b"
+ "\x3e\xa5\x7d\x97\xaa\xf7\xe0\xe5\xd7\x6b\x33\xea\xed\xb9\x7c\xba"
+ "\x2e\x9d\xf4\xd9\xe9\x9a\xa5\xd3\x75\x69\xde\xa7\xd0\x35\x5e\x3d"
+ "\xdb\x3f\x7b\x3d\x0e\xa3\x9e\x96\x78\xf5\x90\xfc\x1b\xf5\xdc\x94"
+ "\xc5\x88\xed\xd9\x0f\xd9\x51\xb1\xf1\x96\x51\x64\xbc\xe4\x7e\x29"
+ "\x57\xcb\x32\x86\xe3\x33\xab\xbd\x72\xe8\xea\x65\xd3\x0b\x9a\x79"
+ "\x7c\x17\x9a\x97\x96\xcd\xe0\xb8\xb1\x73\xb7\xa8\x33\xd9\x7a\x99"
+ "\xdc\x4b\xc5\x69\xe6\x18\x60\x1c\x03\xd0\x03\x2d\x7e\xb4\x81\x63"
+ "\x5d\xce\xaa\x64\xff\x7b\xcc\xa9\xa0\xe3\x97\xbd\xc4\x31\xcd\x70"
+ "\x3f\x96\xef\x79\x3f\x1c\xd7\x66\xa5\x0b\x96\x35\x7b\x69\x69\xd7"
+ "\xa8\x70\x77\xce\xaa\xdf\x5f\x91\x95\x34\x9a\x9f\x3d\xca\x7b\xbd"
+ "\xf4\xcc\x41\xe9\x5b\x9f\x6e\x39\x86\x39\x85\x1e\x67\x70\xc5\x63"
+ "\x32\xf6\x9c\x2b\x9f\xcf\x95\x60\x7c\x5c\xfe\x9c\x7e\x1e\x00\x74"
+ "\xa9\x04\x7d\x9f\xb0\x1b\x74\x31\xd2\x91\x36\xc5\xa0\x0b\xec\x9c"
+ "\x64\x4f\x73\x88\xcf\xeb\xf8\xd5\xd9\xec\x27\x1e\x10\x3b\x66\x55"
+ "\x29\xd8\x4f\xe8\x3e\x8a\xa8\x6f\x28\xdf\x2c\xe7\x4f\x15\x3c\x7f"
+ "\x5a\x3e\xc3\x97\x36\xab\xca\xc0\x43\xac\xb7\x9b\xf8\x0c\xf8\x34"
+ "\x8c\xa9\xb5\x2a\xd6\x5f\x02\x9f\x97\x93\xef\xd7\x67\x9a\x14\x6d"
+ "\x9e\xf8\x85\xe8\xcf\x64\x9f\x7d\x86\x9d\x0c\xbc\x97\x30\x5c\x2f"
+ "\xae\xbe\xcd\x99\x1c\xff\x42\x6f\xcf\x13\x7b\xb5\x9d\x96\x63\x5a"
+ "\xc0\x6e\x32\xf0\xdd\x27\xcf\xb6\x3e\x81\xf6\x2f\x5d\x22\x71\x96"
+ "\xf8\xd8\x4d\xec\xd7\xaf\xa5\xcf\xaa\x17\x9b\xed\x74\x78\x5d\x8f"
+ "\x9c\x3f\x71\x9d\xd3\x50\xbf\xe0\xf9\x12\x6c\x94\x80\x7b\xb9\x7d"
+ "\x98\x6e\x80\x2b\x02\x06\xdd\x9e\x68\x53\xe3\xb3\x6a\xa3\x7f\xb3"
+ "\xdd\x74\xd4\x27\xcf\xdd\xd1\x64\x87\xeb\x13\x15\x83\x7b\xf9\x62"
+ "\x83\x76\xc3\x38\x01\x1f\xce\xa3\xfc\x9c\x96\x97\x1a\x38\x49\x19"
+ "\x4e\xe7\x73\xbc\x4f\x14\xf1\xf9\x21\x45\xff\xa3\xc9\xc8\xd3\x70"
+ "\x31\xfd\x97\x1f\x8c\xa0\x7f\x22\xf3\x20\xd3\x9f\xd7\x3c\x40\xdb"
+ "\xbf\x80\x96\x16\x75\xee\x81\xed\x9a\xe5\x7f\xc3\x73\x32\xe3\xa9"
+ "\xed\x30\x68\x9e\x6f\x56\xeb\x65\x2b\x6c\x11\xfd\x80\xf6\xda\xd9"
+ "\x66\x4b\x30\xda\xcf\x65\x98\x06\x1c\xcf\x92\xeb\x06\x3e\x57\x04"
+ "\xdc\x2b\x32\x63\xdb\xb4\x4d\x9d\x29\x21\xe5\x63\xb2\x22\x37\x22"
+ "\xa6\xb9\xaf\xd4\x21\x82\xea\x7c\xf2\x72\xdf\xe1\x0a\x9f\x79\x34"
+ "\x5d\xc0\x3c\x28\x63\x63\x9a\xe4\xfa\x02\x6c\xaf\x55\xb3\x05\x70"
+ "\x53\x7d\xbf\xea\x2a\x95\xb6\x72\x29\xae\xe0\xb1\x15\xef\x08\xd4"
+ "\xed\x73\xc9\x58\x2b\x68\xdb\xaa\x7c\xe6\x39\x83\xcf\x78\x3d\x52"
+ "\xf9\x8e\xaf\xbc\x86\x75\x8b\x41\x73\xe0\x3f\x1e\xf8\xf5\x18\xf8"
+ "\x1b\xf9\xb9\xef\x38\x0f\xef\xdd\xb4\x39\x82\x52\xe7\xaa\xb3\x43"
+ "\x2b\x33\x0c\x59\xe6\x3a\xb8\x9f\x59\xe7\x30\x3d\x14\x2d\x56\xce"
+ "\x88\x86\x65\x37\xa9\x78\x9d\xcc\xf3\x90\xc7\x4d\xc1\x24\xe4\xc9"
+ "\x1f\x81\xb1\xe2\x84\x7a\x37\x8c\x27\xfb\xfb\x4b\x9f\x3c\xd5\x1f"
+ "\x2b\xdf\xe7\x76\x8d\xe0\xcb\xf2\xb7\x72\xb8\xff\xf9\x9d\xdf\x65"
+ "\xe7\xd8\xbf\x52\xd7\x94\x5e\xc7\xf8\xfa\x38\xa6\xae\xe4\x75\x2f"
+ "\xad\xb4\x30\xee\x9c\xc7\xe8\xb3\x11\x5e\x5c\xe9\x8d\x84\x23\x5c"
+ "\x12\x57\x09\x47\xe9\x0e\x1f\xe6\xae\xe4\x50\xfb\x2e\xab\x92\x47"
+ "\x70\x5e\xb9\xdd\xc0\x67\x44\x27\xac\x9a\x12\xcb\x93\x5c\x37\xc7"
+ "\xed\xd3\x61\xb3\x2e\xb1\x9d\xa4\x55\x76\x85\xd7\x8a\x7a\xee\xc7"
+ "\xd1\xc6\x39\x8e\xaf\xc9\x31\x57\x5f\x54\x3a\x04\xfd\x5c\xf4\xf2"
+ "\x8b\xea\x3c\x91\x5f\xc5\x5d\x5d\xb5\x57\x98\x5e\x65\x5a\xf1\xba"
+ "\xba\x4f\xc6\xed\x90\x67\xcd\x57\x1d\xe1\xfd\xba\xd4\x92\x57\x65"
+ "\x8c\x5d\xdd\x47\xd0\xd7\x56\x12\x92\x71\xff\x5c\xa5\x7c\xf6\x36"
+ "\xc4\x73\x3e\xe9\x03\x77\xb4\x34\x44\x0f\x05\x59\x26\x56\xf5\xf2"
+ "\x99\x7a\x15\xbf\x7c\x55\xd0\x38\x47\xcf\x31\x3b\x39\xde\x2c\xf4"
+ "\x50\xe2\x48\xbc\xd8\xa2\xe3\x6c\x6b\xe9\xfd\x4b\xb5\x26\x71\x5c"
+ "\xc9\x7f\xd1\x5d\x7c\x6e\x5e\xed\x67\x9d\x84\x4e\x48\xfc\x18\x79"
+ "\xa5\x5d\x37\xa2\xa3\x8a\xfe\xc4\x7b\x5a\x5e\x1d\x46\xc0\x5d\xb4"
+ "\x1c\x63\xc6\xb1\x8b\x75\x49\xd1\x5d\xc6\x1c\x86\xcf\xe1\xa9\xfd"
+ "\xb1\x11\x78\x28\x2f\xed\xea\x91\x3e\xf8\x2d\xc3\x3a\x74\xb1\x5e"
+ "\x28\x6a\x33\x64\xaf\xe4\x7a\x3e\xcb\xbd\xaa\x8a\xeb\x1f\x6d\xbc"
+ "\x10\xae\x87\xb9\x9f\x2c\xa7\x1c\xf1\xfb\x26\xfe\x7e\xdb\xea\x4c"
+ "\xa3\x0d\x06\x4d\x54\x1b\x56\x6f\xed\x4f\xd5\xda\x47\xda\xbe\x5a"
+ "\xae\x11\x45\xbc\x7f\x27\x82\x36\xfc\xdc\xa2\xc6\xb5\xd5\x4e\xf0"
+ "\x87\x7e\x16\x5f\xa5\x41\x76\x5e\x10\x9b\xf3\x49\xe1\xb8\x9a\x0c"
+ "\x59\x47\xde\xfd\x5e\x0a\x04\xd5\xbe\xd7\x6a\x8e\x7f\x40\x7a\xb9"
+ "\xf9\x8c\x4b\xdc\x76\x46\xe1\xf8\x64\x16\xdb\x1c\x2a\xb6\xc2\x93"
+ "\xd3\x19\x5f\xc7\x97\xb8\x8f\x57\x4b\x5b\x57\xc6\x59\x18\x2a\x4a"
+ "\xf2\x0f\x65\x52\xff\x50\x11\xf4\x42\xa6\x29\xe0\x7e\x12\xfa\x7f"
+ "\xe0\x84\xaa\xf3\xc9\xc9\x06\xae\x8c\x9b\x8c\x03\x2a\x56\xc7\xa7"
+ "\x2f\xd7\x2b\x63\x3f\x15\x8d\xc5\xcf\x82\xdf\x98\xcf\x6a\x9f\xc0"
+ "\x5e\xef\xf1\xed\x48\x2a\xd6\x36\x88\x63\x1c\x63\x0c\x73\x92\x9e"
+ "\x3a\xf0\x6f\xea\xd6\x56\xd8\xe8\x8f\x99\x0a\xca\x28\x07\x73\x67"
+ "\x12\x03\x62\xe6\x3e\x0d\xd7\x0d\x62\x06\xc7\x37\xc7\x73\x96\xfe"
+ "\x3c\x85\x9f\xfb\x37\x88\x25\xc0\xb9\xcb\xd8\x2b\x54\x31\x72\x9e"
+ "\xec\x19\x8e\x2b\x94\xf8\x28\x9f\x2b\xe2\xf8\x53\x1a\xe6\x44\x3d"
+ "\x5c\x6f\x01\xcf\x6b\x51\x5f\xc0\xfd\x94\x0d\xfd\xbc\x98\xf3\xf9"
+ "\x12\xbf\x92\x8e\x5f\xdc\x58\xec\x5c\x86\xf1\xea\x4f\x4b\x2a\x36"
+ "\x70\x4d\xf5\xe7\x98\x3e\x1b\x6e\x4f\x95\x1a\xb8\x21\xfd\x58\x9d"
+ "\x4a\x0f\x71\xac\x44\xf6\x79\xc4\xfb\x5d\x06\xae\x06\x0e\x5c\x1f"
+ "\x9f\xe3\x14\xa9\x5a\x17\xc7\xa0\xe1\xfa\x38\x6e\x2b\xf2\xb6\x1a"
+ "\xf8\x7e\x56\x5e\xae\x68\x14\x82\xc7\x4f\xd6\xbf\x8e\x89\x24\x63"
+ "\xeb\x9d\xa2\xe2\x8c\xa3\x8d\x7e\x8e\x8d\xfa\x57\xd4\xf1\x1f\xfd"
+ "\x1c\x1b\x75\xa8\x28\x6e\x1f\x73\x19\xe4\xcf\x93\xfa\xa1\x56\xfb"
+ "\x0f\x4d\xe4\x42\x19\xa1\xdc\x50\x2e\xaf\x39\x41\x6e\x8b\xcb\xdb"
+ "\xca\x7b\xf8\xec\x25\x74\x4e\x71\x39\xf2\x74\xb1\x9d\x85\x79\x57"
+ "\x50\x7e\x37\x03\xba\xa9\x75\xc3\x0c\x86\xb1\xc5\xec\x24\x73\x5b"
+ "\x4c\xbc\xaa\xd1\xf8\xa3\xdf\x36\x8e\xfa\x77\x5a\xba\x02\xee\xe2"
+ "\xc3\x5e\x7a\x7a\x54\x9b\x70\xdb\x04\x92\xf9\xea\x27\xf2\xbc\xaf"
+ "\xd8\x7b\xa9\xbc\xc6\xbe\x35\xeb\xa0\x69\x76\x4a\x16\x69\xe3\xa4"
+ "\xbe\xed\x4f\xb7\x74\xf1\x58\x12\x70\x3f\xed\x30\xca\xf3\xb8\xce"
+ "\x63\x07\xfa\xcb\x5e\x37\xac\x0f\x9f\xd6\xe3\x15\x3f\x9d\x6b\xc8"
+ "\x68\xbc\x7a\x4a\xf7\x0b\xcd\x75\x03\x99\x3c\x18\xb7\xa6\x06\x29"
+ "\x79\xdf\x2b\x44\xf5\x9b\x44\xf0\xc5\x4d\x98\xcb\x4c\xe4\xef\x6c"
+ "\x14\xb7\xb2\x8c\x32\x7f\xd7\x82\x5f\x12\x81\xcb\x8b\x03\xa8\xb3"
+ "\x42\xe5\xd3\xfd\xd7\xed\xc8\xd7\x8b\x6b\x86\x30\x99\x68\x57\x05"
+ "\x59\x76\x69\x64\xae\xaf\xa0\x49\x48\x83\xad\xfb\x74\xbb\x21\xb3"
+ "\xf1\x70\xa8\xdb\x47\xb4\x13\xf5\x6e\xad\x10\xa1\xdf\x62\x3c\x77"
+ "\x6b\x22\xf8\x59\xe8\xee\xa5\x35\x53\x54\x1b\xd7\x4c\x31\x6c\x42"
+ "\xdc\xcf\x8c\xf6\x3f\x58\xe3\x88\x9d\x2b\x2f\x5b\xbb\xb6\xb4\x60"
+ "\xdd\x0a\xbe\x64\xde\xf0\xec\x8d\xe3\x23\xd7\x44\x78\xfc\x53\xf1"
+ "\x2a\xd6\xe4\xf1\xfa\xe3\x8b\xe9\xc6\x7e\xfa\x9a\x7a\x63\x0d\x54"
+ "\xf7\xdb\xbf\x93\xe7\x76\x3c\x07\xc2\xbb\x83\xef\x97\x6f\x61\x30"
+ "\x09\x1f\x5a\xc8\x14\x5b\xdf\xca\xa5\xa5\x4b\x8b\x6f\xe7\x9d\xb3"
+ "\xf1\xf1\xea\x69\x8d\xa9\x27\x38\x5c\x8f\x1a\x7f\xfc\x26\xce\xb7"
+ "\x63\x4b\xab\x48\x5b\x56\xa8\xce\x4c\xaf\x9d\x64\xac\x6d\xc5\xf7"
+ "\x77\x14\xf6\xf0\xce\x6c\x2f\xcb\x83\x6b\x0b\x99\xde\xda\xd4\x65"
+ "\x62\x3b\xb2\x02\xf7\xbc\xc6\x20\xd7\xca\xf4\xb8\x51\xbf\x39\xdf"
+ "\x85\xf1\x7d\x6d\x89\xa8\x11\xd0\xab\x6b\x8b\x46\x5b\x57\x88\xf4"
+ "\x15\x61\xdf\xc2\x6e\x5a\x5b\x75\x29\xdf\x23\xce\xcf\xed\x61\x9e"
+ "\x8d\x29\x17\x56\x7d\xb6\x16\xfc\x5f\x6c\xc4\xa1\x1f\xce\x53\x37"
+ "\xc1\x88\xc7\xb5\xf6\xc4\xa8\x7e\x23\xf5\xe3\x2c\x8a\xc7\x4b\x66"
+ "\xb7\x61\xde\x86\x76\x7e\xf7\x24\x95\x7c\xdd\x6c\x87\x8d\x30\x91"
+ "\x7e\x84\x7b\xfe\x04\x40\x02\xbf\x8b\xe2\xa3\x6b\xce\x34\x9b\xa1"
+ "\x5d\xa0\x65\x12\x84\xfa\x23\xb3\x7e\x93\x88\x9f\x49\x24\xc8\x5d"
+ "\xd5\x44\xf4\xe0\xd8\x31\x66\xb2\xa6\x26\x5b\xae\xfd\xc2\x24\xfb"
+ "\x9d\x77\x64\xcf\x74\x55\x94\x43\x2b\x87\x82\x56\x11\x71\x2e\xb2"
+ "\x7e\x99\xe5\x9b\x37\x56\x92\xf4\xab\xd9\xb1\x2c\xae\x4e\xab\x71"
+ "\x8b\x12\x3e\xc3\xae\xa5\x97\x65\xb9\x9e\x25\xd3\x1b\x83\x5e\x13"
+ "\xc7\x82\x66\xfb\x99\xe3\xbc\x02\xd7\xdf\xbf\x87\x34\xd0\xcb\x29"
+ "\xea\xcb\xb2\x94\xdd\xf9\xcc\x38\x6d\x67\x59\xd6\x08\x7c\x33\x31"
+ "\x7c\xd7\xcb\x64\xda\x5f\xd1\x63\xf2\x98\xef\x20\x8f\xc3\x4f\xef"
+ "\xe1\x3e\x6e\x5f\xa1\x4e\xb6\x65\x19\x46\x93\x5b\xab\x72\x7d\x42"
+ "\x26\xfd\x1c\xaa\xe9\x2c\x3d\x73\xd7\xa1\x51\xca\xf1\xb9\xef\xfe"
+ "\xf4\xa4\x2f\x06\xdc\xcf\x94\x7b\xe9\xee\xc3\xba\x2d\x83\x31\xf7"
+ "\x99\x6a\xf0\x86\xb4\x3f\xf1\xfe\x7a\xfe\x1e\x0d\xd2\x9a\x8d\x3c"
+ "\x71\xfb\xe8\x7b\xbc\x16\x2f\x5a\x99\x0f\xc4\xc0\x3f\x7b\xf8\x8c"
+ "\xcb\x28\xfe\x30\x63\x3d\xce\x9b\x79\x4f\x32\x29\x15\xfa\xc7\x75"
+ "\x41\x0c\x85\xdd\x94\x01\x71\x32\x85\x4d\x74\x6d\x68\x40\xe4\x77"
+ "\xf4\x9e\xc7\x58\x70\x82\xe7\x22\x09\x3f\x5b\xf9\x5b\x93\x27\xd8"
+ "\xd7\xea\xd9\xae\x51\x27\xec\x4a\x4f\x63\x5f\xab\x8a\x7f\x1a\xa6"
+ "\x0e\xfa\x2b\x75\x38\xff\x77\xa5\xa7\xf2\xaf\x48\x17\x95\x4c\xe7"
+ "\xa1\x01\xb1\xd8\x63\xfe\x5f\xc4\xdf\x47\xe2\x31\x0e\x74\x77\x9c"
+ "\xa5\x75\xab\x7f\x03\x38\x6f\xfc\x1d\xb0\x64\xec\xb4\xd9\xf4\x1e"
+ "\xee\x03\xee\x75\xc3\xe3\x5f\xdc\x98\x33\x09\xad\x35\x56\xe7\x63"
+ "\x26\x0d\x63\x29\xc7\xb8\xc3\x18\x3a\x83\xdb\x85\xe7\x2c\x7e\xc6"
+ "\x75\x0a\x5f\xad\x5b\x5b\xf7\x5a\x43\x8f\xf1\xd8\x9a\xcf\xe3\x26"
+ "\xd2\x17\x37\x0d\xc8\xb1\x36\x4f\x7f\x9e\xaf\x3f\xe7\xea\xcf\x73"
+ "\xf5\xe7\x1c\xfd\x39\x9b\x9f\xd5\x98\xbc\xde\x32\x6c\x2f\x98\xc6"
+ "\x1e\xc7\xb3\xdd\xe8\x0b\xe0\x93\x62\x75\x6e\x91\x63\xbb\x8e\xc7"
+ "\x0c\x1d\xaf\x2c\xfd\xd9\xc0\xe7\x1a\x6b\x68\xcb\x7f\x17\x3e\x0d"
+ "\x31\xf8\x1c\x88\xc0\x87\xac\xce\x9c\xcf\x82\x8f\xcd\xca\xdf\xa7"
+ "\xf8\x2f\xe0\xc3\xb8\x70\x5a\xc0\x5d\x9a\x19\x8d\x4f\xe9\x4c\x03"
+ "\x9f\xb8\xfc\xb6\x41\xf4\xb0\x5d\xb3\xfe\x73\x32\x06\xf4\x58\xb6"
+ "\x59\x9a\x06\x8d\x78\x85\xa5\xa5\x97\x8a\x57\x08\x59\xc0\xb8\x5d"
+ "\x8a\xf6\x97\xce\xd5\xed\xb7\x23\xca\xce\x2f\x3d\x68\xf8\x90\xa1"
+ "\xad\x07\xea\x54\x5b\x0f\x6e\xe7\x98\x7d\x65\xf4\x79\x97\x53\xf4"
+ "\x60\xde\xfd\x7f\x78\x6e\x18\x09\xb7\xb8\x74\xfd\xfa\xa7\x6f\x77"
+ "\x14\x2f\x5d\xb3\xc2\x71\xc3\x72\xc7\xfa\xa2\xd5\x2b\x4b\x57\x44"
+ "\xfb\x55\xd8\xf4\xef\x06\xc9\xf3\x22\x3c\x97\x92\x73\x69\xf0\xbf"
+ "\xd4\x93\xd2\x37\xef\xd9\xa7\x85\xbb\xb4\x8b\x75\xee\xbe\x9d\xea"
+ "\xfb\x52\x01\xf7\xb3\xd9\xc6\x18\x62\xcc\x7f\x79\x0c\x41\xfa\x62"
+ "\x8c\x93\x27\x22\xd2\x39\x6f\x91\x91\xc6\xf0\x75\xdd\x34\xf6\x24"
+ "\x3d\x3b\x8e\xeb\x8c\x4b\xc3\x01\xd1\x0c\xbb\x89\xbf\x9d\x61\x82"
+ "\x4e\x11\x1c\x7f\x8b\xcf\x61\xa2\x9c\x00\x3e\x72\x5e\xb1\x18\xcf"
+ "\x6a\xce\x26\x18\xc7\x0e\x94\xd9\x8f\x34\x33\xdb\x10\x98\x07\xf6"
+ "\x70\x39\xa4\x7f\xc4\xf1\x30\x90\x6e\xd1\xe3\x8a\x71\xda\x27\x1c"
+ "\xaf\x02\x69\xb6\x91\xb4\x0d\x29\x48\xb3\x23\xcd\xa1\xe0\x6d\xb8"
+ "\x86\xe9\x8c\xe7\x1c\x7d\x9d\x8c\xf3\x4c\xd7\xeb\xad\x8c\xc4\x99"
+ "\xbf\x1d\x73\xf3\xd4\x2c\xc7\xe2\x87\xbe\x36\xfb\x8e\x27\xd6\xae"
+ "\x59\x39\x9e\x24\xd9\x33\x31\x1c\x67\xdd\xec\xbc\xf1\x76\x47\xc9"
+ "\x8a\x15\xeb\x1c\x1b\x57\xac\x29\x75\x2c\xdd\xb8\xb4\x6c\x3c\xad"
+ "\x5c\xbb\xee\x09\x8e\xb6\xc0\xdd\xb2\xbe\xe0\x89\x95\xab\xd8\xf9"
+ "\x45\xe5\x1e\x1f\x65\x27\x2c\x66\xdd\xa6\xc7\x27\x39\x56\xc7\x36"
+ "\x64\xda\xb8\xe3\xb8\xe7\xb8\x5d\x76\x5c\xdb\xf0\x3b\x82\x5f\x0b"
+ "\x7e\x27\xf0\x3b\x7e\x9a\x36\x87\x70\x3d\x1c\x70\x6f\xf8\xc0\xb0"
+ "\x57\x46\x78\x68\x83\xcf\xe0\x21\xd8\x17\x87\xd5\xf8\xb6\xd1\xd1"
+ "\x19\x92\xf2\x33\xcc\x53\x75\x03\x23\x3c\xc5\x71\x47\x3b\xd9\xb7"
+ "\x6b\x03\xde\x0f\xca\x35\x4b\x5e\x33\x19\xc7\x74\x3b\x45\x9b\xae"
+ "\x6a\xda\x2d\xd8\xc7\x8c\xd7\x73\xdb\xc0\x2f\xed\x2a\x4e\xcd\xc6"
+ "\x46\xe4\xbb\x0e\x75\x1c\xd1\xeb\x50\xcf\x13\xc4\x31\xfe\x76\xcc"
+ "\x49\xfd\x99\x61\x9d\xa2\xb2\xd7\xf9\x9e\xaf\xfa\x1e\xaa\x55\xff"
+ "\xb6\x9c\x69\xe4\x9d\x73\x9e\x5e\x47\x2b\x68\x51\xb9\xcf\x2d\x82"
+ "\xc6\xdc\x99\xd7\x8a\xad\x09\x77\x0a\xe0\xd3\xa7\x25\x3e\xda\x25"
+ "\xe3\x60\x56\x0e\x42\x47\xdc\x72\x8b\xc7\x29\xf3\x27\xf0\x5a\xf2"
+ "\xc2\x12\xa1\xf1\x77\xa8\xb4\xc4\xa7\xba\xb8\x9c\xb0\x8d\x3b\xae"
+ "\xd5\xa6\xe4\x28\x9b\x81\xe3\x0f\x3a\x1d\x3a\xcc\x20\xd3\xf6\x34"
+ "\x6d\xf8\x93\x9a\x87\x6f\x0e\x29\x5b\xc2\x39\xc5\xf0\xb9\x84\x8c"
+ "\x66\xe2\x39\xdb\xd0\x01\x5e\x72\x5a\x74\xff\xb8\x56\xd5\x7e\x67"
+ "\xa9\xfe\xdc\xa2\xe3\x98\xc0\x31\x51\x80\xbf\xec\x3b\xd8\x2b\x2d"
+ "\xb8\x3f\x01\xfa\xb4\x2b\xfa\x38\xa5\x9f\x2f\xec\x26\x7e\x7f\x82"
+ "\xbf\xb3\x83\x77\x27\x54\xbc\x91\x8d\x07\xb9\xcd\x23\x3e\xb4\x8d"
+ "\x39\xa0\xdf\xeb\xbc\xd7\x0c\x59\x6a\xf1\x0c\xb0\x7c\x6e\x3c\x00"
+ "\x78\x87\x0c\xbd\xc3\x7a\xa6\x20\x0c\x39\x95\xf3\x29\x67\xb7\xa1"
+ "\x6f\x46\xf8\xc0\x19\x8c\xa7\x4b\xe2\xf5\xbb\xde\x37\x4b\x85\x7b"
+ "\x43\x36\x70\x3a\x24\xfb\x80\xe3\xb2\x0e\x0c\xcf\xdb\x86\x94\x8e"
+ "\x2c\x9b\x3f\x3c\xc7\xd4\xf1\xe0\x38\xf0\x5e\xc6\x6d\x50\xee\xff"
+ "\xeb\x7a\xa3\xac\xd4\xd0\x1b\x06\x1c\x6b\x82\xd0\xac\x4e\xfc\xab"
+ "\x16\x2d\xbc\x57\xc2\xe3\xa5\xb4\x47\x00\x27\xf5\x82\x3a\x0b\xa7"
+ "\xd5\x88\x16\x2f\x95\x4d\xe1\x6f\xcd\x49\x9b\xd6\xbd\x61\xd1\x88"
+ "\x2e\x2a\x3b\x16\x09\x53\x24\x83\xee\x80\xcb\xfa\x88\x6d\x92\x82"
+ "\xb0\x99\xe3\xd1\xb4\xe8\xe3\x0b\x74\x70\x59\xd0\xc0\x15\x34\x3c"
+ "\x66\xe0\xab\x7f\xeb\xec\x18\xea\xc9\x5f\x14\x1e\x62\x9f\xf0\x36"
+ "\xd5\x9f\x9b\xa5\xbe\xc1\xbb\x83\x01\xf7\xa6\x19\x5e\x7a\xb6\x4a"
+ "\x97\xa1\x76\x94\x3f\x78\xb4\x62\x2e\xf2\x6c\xca\xd3\xfd\x9a\x8f"
+ "\xa3\x7f\x4f\x44\xf0\xfe\xbc\x88\x75\x9e\x13\xaa\x0f\xef\xa8\x3c"
+ "\x49\x9b\xea\x23\xd2\xf5\xbe\x3d\x9a\x77\x92\x36\xcf\x53\xfe\x44"
+ "\xc2\xa9\xca\x6f\x92\x36\xaa\x81\x23\xeb\x02\x3e\xb7\xc7\x32\x2e"
+ "\x69\x2f\xfb\x78\xd3\x31\x63\xbc\x00\xac\xc3\x92\xe6\x13\xc4\x11"
+ "\xa6\x93\x8a\xfb\xb1\x61\x8d\xa2\xd3\x26\x5f\x14\xed\x79\xdc\x44"
+ "\x3d\x4c\xa7\xd4\xad\x42\x4b\xf5\x27\x88\x82\x32\x33\xb1\xbc\xb0"
+ "\x8c\xf3\x1e\x21\xf8\x43\xda\x55\x8a\x6e\x9b\xb3\x0c\xba\x19\x7d"
+ "\xc7\x74\xf2\xd2\xa6\x66\xa6\x6d\x74\x1b\xc7\x1e\x3f\x69\xb4\x1d"
+ "\x34\xe5\xd8\xa6\x78\x9e\xab\xcb\x45\x7b\xeb\x44\xf6\x21\xd9\x78"
+ "\xdf\x51\xf3\xd7\xe8\xa8\x73\x06\x29\xda\x6e\xae\x47\x3b\x7c\x11"
+ "\xf3\x92\x63\x4c\x5f\x96\x15\xe0\x79\x58\x8f\xc1\x75\x4c\xf9\x33"
+ "\x6d\x9c\x8b\xf9\xc4\x61\x29\xcb\x1b\x64\xac\x14\x8e\xdf\x7b\x9c"
+ "\x69\xc4\x7a\x91\x65\x89\x65\x80\xe5\x49\xd1\x68\x73\x6f\x04\x8d"
+ "\xda\x98\x3e\x3a\x9d\x0e\xc7\xe8\xf2\x15\x8e\xe2\xd9\x4a\x17\x3b"
+ "\x32\x6f\x58\x3e\x4d\x06\xbc\x71\xdc\x33\xe7\x76\x47\xde\xec\x1b"
+ "\x9c\x45\x53\x16\xaa\xcb\x9c\xbc\xf9\x7c\x1d\x1f\x3d\xaf\x73\x04"
+ "\xdc\xe5\x8b\xa3\xe7\x86\x5b\xbd\x4a\x7f\x94\x17\x7b\x13\xd2\xa5"
+ "\xbf\x30\xc7\x9f\xad\x5b\x43\x14\x06\xde\xb5\xa7\xd1\xa7\xc9\x62"
+ "\x31\xc7\x3b\x5e\xe4\x24\x8e\x8f\xfe\x49\x13\xde\xed\x43\x7a\x6a"
+ "\x09\x7f\x4b\xe1\x1f\x42\x4b\x11\x8b\x79\xcd\x46\xd4\xf8\xec\xbe"
+ "\xb4\x65\x16\x5f\xda\xd2\xe3\xbe\xb4\xa4\xb9\xf3\x6e\x74\x09\xc0"
+ "\x6d\x33\xda\xc5\x6b\x3b\xa0\xd3\xe2\x45\x4e\x11\x66\x1a\x15\x38"
+ "\x39\x26\x39\x60\x27\xf2\xda\x4e\x39\xda\xff\x4c\xa6\x9a\xbf\x96"
+ "\x83\xff\x37\x54\xeb\xba\x2c\x2f\xe0\xde\x02\xfb\xef\x36\xe9\x0b"
+ "\xa0\xb9\xed\x32\x96\xb9\xb6\xed\x2b\x0f\x8a\x1d\x4b\x8f\x1b\x30"
+ "\x01\x6b\x8c\xee\xff\x20\xe1\x7d\x56\xff\x5a\x6d\x27\x95\x58\x13"
+ "\x54\x7c\x48\xc8\x78\x65\x93\x49\xcb\x1f\xf6\x97\xc1\xbb\xd4\xad"
+ "\x36\xf6\xa7\xc9\x07\xef\x55\x72\x1e\xe3\x5d\x9d\x5b\xf3\xd6\x99"
+ "\xb4\x20\xfa\xd1\xa6\xec\xe7\x5e\xd6\x9f\x98\xbb\x6e\x39\x6c\x8c"
+ "\x6b\x72\x3c\x34\x51\xa5\x9a\xcf\x6c\x91\x7e\x9f\xe7\xdd\x66\xf2"
+ "\x52\xf9\xdc\xeb\x33\xe4\x1c\x25\xa8\xb9\x13\x48\xf9\x34\x6f\xf9"
+ "\xb1\xa1\x63\x79\xdf\xd4\xba\x55\xf8\x78\x8d\xd8\x1a\x12\x3e\xde"
+ "\x43\x95\x63\x07\x9d\x26\x4f\x79\xa0\xd2\x23\xbf\xfd\xc9\xdf\x20"
+ "\xf1\xeb\xe3\x46\x58\x8d\x1b\xa8\xdf\x97\xf8\x95\x42\x8c\x0f\x09"
+ "\xa7\x69\x8b\x93\xf1\x67\xda\xf0\x5e\x8b\x06\x5a\x79\x78\x9c\x64"
+ "\xfa\xa4\x27\xf8\xd8\x17\x86\xdb\x6a\x0d\xa1\xcd\x91\xed\x32\x69"
+ "\xde\x5a\x37\xda\x65\xe2\xef\x78\x9c\x61\x99\x09\xb2\x8f\x12\xe4"
+ "\x6d\x82\x8c\x6b\x2d\xe7\xe7\x15\x0d\x91\x6d\x64\xfd\xaf\xda\x50"
+ "\xf1\x4e\xbc\x36\x0a\x13\xb7\x91\x69\x50\x51\xa3\xcb\x9b\xc4\x93"
+ "\xf5\x47\x2f\x55\xcc\x4f\xdd\xca\xbe\x41\x62\x31\xf4\xdb\x1c\xee"
+ "\x43\x8c\x9f\xf5\x8c\x67\xbc\xfe\x62\x78\x0a\x96\x2b\xdf\xba\xb5"
+ "\xb2\x30\xe0\x76\x4d\x8e\x4f\x6f\xd7\xbc\x4b\xd3\xdb\xf5\x39\x2e"
+ "\xcf\x78\xf0\xfe\x8e\x35\x64\x22\x01\xbe\xc5\x7c\xad\x2a\x5e\xbd"
+ "\xa9\x5b\x9b\x19\xaf\xb8\xef\x04\xcb\x8b\xae\x83\xc0\x87\x02\x72"
+ "\x22\x58\x27\x01\xb7\x56\x43\x1f\x59\x13\x1c\x89\x52\x3f\x98\x44"
+ "\x7d\x3c\x18\xd6\xad\xf5\xbc\xcf\x35\x07\xf5\xc7\x7d\xaf\xf1\x77"
+ "\x3e\xaa\x45\x8e\xb6\xed\xab\xd7\x5b\x13\xe8\x4e\x5f\xe2\x57\xc7"
+ "\x5b\x9d\xa1\xc9\x4c\x43\xc0\x74\x42\x8e\x3b\x78\x9e\xaa\xd6\x46"
+ "\x2a\x61\xff\xef\x38\x20\xd7\x28\x53\x44\x8e\xda\x37\xaa\xc4\xf8"
+ "\xd7\xd0\x6d\xac\xcd\xe3\x79\x89\x97\xfe\xa5\x62\xf5\x26\x7e\xfe"
+ "\x15\xb1\x33\x09\xba\xdb\x2a\x1c\x9b\xac\xb0\x23\x2b\x2f\x68\x22"
+ "\xd3\x24\xd2\x93\x68\x84\x4f\x94\xdf\x94\xc1\x27\x28\xdf\x18\x9f"
+ "\x07\x2a\xdf\xbd\x34\x0f\x54\xee\xe0\xf7\x4c\x77\x35\x57\xa9\xec"
+ "\x36\xec\x14\xb1\xed\xf3\xaf\x38\x2a\x64\xfd\x4e\x55\x37\xd3\x24"
+ "\x87\xf7\x8c\xe6\x83\x2e\x95\x01\xf7\x56\x9b\xa1\x07\x98\x5f\xac"
+ "\x61\xfe\xde\x05\x49\x9e\xc6\x3b\xd8\x3f\xa5\x95\x6a\x1d\x3c\xe9"
+ "\x98\xfc\x6e\xa6\xbb\xdc\xe2\x73\x15\xed\xe1\xef\xc3\xfa\x53\x38"
+ "\xee\xf4\xd6\x3c\x2f\xfd\x4f\x65\x57\x24\x8b\xc3\x80\xd1\xb2\x4b"
+ "\xf9\x45\x5b\x64\xdc\x28\xc8\x34\xc7\x8a\x62\xb9\x46\x5a\x06\xf0"
+ "\xe6\xb8\x51\x98\xef\x6c\xad\x1a\x1e\x97\xdc\x39\xd0\x15\x42\x9e"
+ "\x6d\xc2\xb8\x34\xa9\x1f\xb4\x7b\xc9\xa4\x1d\x18\x98\x66\x27\x6e"
+ "\xf3\xc0\xb6\x89\x07\xbe\x3b\x95\xcc\xff\x8f\x7d\x19\x95\xdc\x4c"
+ "\x19\x5b\xbf\x66\xa6\x7f\xcd\x24\x13\xd3\xc1\x4b\x5b\x1b\x14\xed"
+ "\xb6\x76\x19\xfd\xe3\xa5\x4a\xd9\x3f\xbc\x86\xbc\x28\x24\x3e\x51"
+ "\xeb\xdc\x5b\xa1\xff\xd6\xd8\xd4\xfb\xf2\xc2\xd8\x35\x20\xb6\xe7"
+ "\x1d\xab\xd7\x3b\x96\xaf\xdd\xb8\xe6\xba\xeb\xa2\xe6\x4a\x66\xf5"
+ "\x3d\x5e\x77\xb2\x1a\x4f\xdd\x39\x06\xde\x6c\x97\xe0\x19\xed\x2f"
+ "\xbf\x28\xa6\xfd\xfc\x02\xdd\xdd\xbd\x20\x8b\x46\xee\xa7\xd3\xfc"
+ "\xe9\x11\x8f\xb7\xd0\xfc\x9b\x6f\x29\x78\x70\xc5\xd2\xe5\x65\x11"
+ "\xa9\xb7\x46\xae\x1b\xd6\xbd\x82\xba\x13\x27\xde\x0d\x5d\x91\xb0"
+ "\x70\x33\x8f\x2d\xdb\x6e\xad\x08\x89\x8f\xa1\xaf\x39\x6e\x4d\x41"
+ "\x47\x69\x88\x3a\xa0\xcb\xc4\xe7\x59\x87\x8f\x55\x67\x3c\x61\x4f"
+ "\x81\xb7\xac\x68\xbb\x0f\x76\xdd\x05\x5e\x9f\x41\xb9\x87\x3b\x1b"
+ "\x38\xb6\x73\xd2\x7c\x65\x63\x6c\xcb\x40\x7a\x1a\xae\xb3\x71\x1d"
+ "\x83\xeb\x5d\x8e\x35\x98\xf7\xb0\x4f\xfd\x06\xf6\xa9\xdf\x76\xa3"
+ "\xf4\x0b\xf2\x57\x12\xfb\x06\x9d\x22\x77\x3b\xdb\x20\x5e\xda\x56"
+ "\xce\xeb\xe0\x9c\x17\x65\xae\x72\x3c\x49\x59\x7c\x15\x72\x6f\x70"
+ "\x5b\x86\xd8\x91\x34\x5f\xec\xc9\xe7\xef\xba\x4d\x46\x7a\x59\x62"
+ "\xc2\x87\x94\x68\xb7\x8c\x0b\xb8\xb7\x39\x41\x7f\xf9\x2d\x86\xd1"
+ "\xbe\x81\x2b\xbf\x3d\x1c\x63\x1f\x8e\xd8\x86\xdf\x23\x69\xdf\xea"
+ "\xf6\xdc\x3e\x39\x2e\x6c\x6b\x8f\xb0\xe9\x78\x6f\x7a\xbc\xb2\x4f"
+ "\x44\x58\xd9\xa7\xdb\x7a\x0d\x39\xc0\x7d\xd0\xe0\xd3\xa8\x38\x7b"
+ "\x6b\x4a\x57\xac\x5b\xb1\xdc\x71\xc3\xfa\xf1\x14\x11\x65\xaf\x68"
+ "\xc5\x1a\xc7\xba\x15\xcf\x3c\xbb\x62\xbd\x8c\x90\xc7\x6f\xa3\xc6"
+ "\xfc\x0c\x91\x9e\x58\x62\x9c\xff\x72\x4c\x64\xfa\x6e\x7f\x8c\x63"
+ "\xb3\x89\x9d\x89\xec\xff\xdb\xab\xe6\x1b\x65\xb9\xd1\xf3\x8d\xe7"
+ "\xd4\xb9\xfb\xfa\xa4\x6c\x35\xd7\x79\x4e\xc6\x36\x44\xba\x65\x24"
+ "\x0e\xfc\xf6\x77\x40\x4b\x93\x4e\xb7\xf3\x01\xf7\xf6\x43\x06\xdd"
+ "\xbc\xf4\x9d\x99\xba\x2d\xd5\x2b\xf5\x07\xc6\x58\xe8\xbf\xa8\xf1"
+ "\x55\x7d\xfb\x76\x7b\x0b\x78\x23\x51\xae\x27\xa7\x25\xe5\x70\x5d"
+ "\x0c\xf3\x14\xca\xa3\x7f\xb2\xa1\x37\x59\xbf\x55\x19\xf0\x50\x67"
+ "\x33\xd7\xa7\xcf\x83\xae\x3e\x4d\xcf\xc9\x73\x39\x5a\x7d\x52\x0e"
+ "\xeb\x14\x8e\x25\xa2\xed\x00\x1c\xb9\x47\xfb\x9d\x99\x72\x1d\x96"
+ "\xbf\x45\x00\x58\xbc\x0e\x0c\xdd\x90\xc7\xdf\x49\xe6\x34\x15\x23"
+ "\x6e\xbb\x3c\x17\x81\xba\x66\x06\xdc\xcf\x95\x8c\x9c\x71\xf8\x0e"
+ "\x7f\x83\xdb\xc2\x70\xbd\xf4\xdc\x0c\x86\xa7\x62\xe0\x3d\xb7\xcb"
+ "\x4b\xee\xc6\x11\xfb\xe9\xb9\xae\x88\x79\x19\xf0\x51\x78\xfa\x81"
+ "\x8b\x8c\xb7\xaa\x7c\x4e\x65\xbb\x59\x7f\xee\xd2\xdb\x6e\xb4\x07"
+ "\xf0\xa0\xff\xb6\x55\x19\x7e\x13\x5e\xbd\xdd\x8c\x1f\xe3\x1e\x89"
+ "\xb3\x8e\xaf\x8d\xf1\x0d\xb8\xbf\x33\x29\x42\xb6\x79\x5d\x26\x09"
+ "\x69\x59\x23\xbe\xec\xdb\x9d\xb1\x7a\x63\xed\x1a\x47\xf1\xea\x35"
+ "\x4f\x15\x6c\x5c\xfa\xd4\x8a\x82\x67\x4b\xa6\x38\x9e\x5d\xb3\xac"
+ "\x78\xed\x13\x4f\x31\xd7\xac\x2f\x7d\xf6\x89\xa7\x1c\xac\x59\x0a"
+ "\xe6\xce\x9f\x5f\x70\xf7\x37\x1f\x7a\x78\x3c\xdd\xbd\x14\x69\x98"
+ "\xf9\xcf\xcf\x9a\xa2\x5e\x3d\x38\x6f\xce\xb7\x0a\xe6\x2c\xfa\xe6"
+ "\xc2\xc5\xf2\xf0\xcb\xf0\xfb\xb9\x6b\xe2\x67\x88\xe2\x43\x1b\x78"
+ "\x69\x26\xfa\x37\xe9\x24\x3d\x7f\x58\xc5\x4d\xff\x4e\x77\x74\xdc"
+ "\xf4\xef\x40\x9b\x7f\xd7\x8e\xdf\x0c\xa2\xaa\x22\xfc\xf0\xe6\xf9"
+ "\x03\x8a\xbf\xc6\x3d\x1a\x70\x7f\xd7\x36\xc2\x5f\xcf\xcb\x33\x65"
+ "\xec\xaf\xa4\xd6\x67\xbf\x0b\xfd\xbf\x3d\x2b\xf2\xdd\xc8\x7c\xf2"
+ "\xbb\xb9\xc3\xf3\xc9\x61\x9d\xf2\xdd\x52\x63\x6e\x89\xb4\xb9\x98"
+ "\x57\x8e\xe3\x79\xa5\x5a\x4f\x7a\xfe\x17\x92\xa7\x46\x95\x6f\x0b"
+ "\x19\xf3\x4a\x96\x6d\xb9\x27\x25\xe7\x1f\xdf\x3d\x14\x29\xe3\x72"
+ "\x4d\x5f\x97\x71\x2e\x27\xd7\xef\x6c\x65\x33\x78\x4d\x1b\xf6\xf1"
+ "\x4c\xd8\x0a\x18\xbf\x02\x42\xa4\x95\xcd\xd0\x71\xf2\xf1\x1a\x37"
+ "\xdb\xcd\x3a\x3f\xa5\x9e\xa6\xaa\x9b\x84\xfb\x3b\x73\xd5\x9c\xf2"
+ "\x3b\xcf\xb2\x5e\x17\xdb\x26\xde\xcd\xbe\x45\x3c\x77\x0a\xb8\xab"
+ "\x26\x8f\xf0\xec\xf3\x87\x99\x17\x46\xe6\xb2\x55\x51\xfa\xbf\x5f"
+ "\x7e\xc3\xb0\x6a\xb1\x11\xf7\xa1\xf4\x3a\x32\x99\xaf\xab\xa7\x5d"
+ "\x26\x51\xe9\xa5\x2a\x39\x6f\x65\x7a\x7a\xe9\xbb\x0e\xe4\x35\x8f"
+ "\xd0\xaf\xaa\x6a\x98\x7e\xfa\x3a\x8b\xb1\xc6\xa2\xf0\x7e\xfe\x17"
+ "\xa3\xd1\x2a\x3e\x9d\xaa\xba\x3e\x95\x4e\x6e\x4a\x62\x99\x34\xe8"
+ "\x75\x31\xad\x9e\x9f\x74\x31\xad\x9e\x7f\x3a\x82\x56\x2f\x5d\x4c"
+ "\xab\xe7\xf3\x22\xf6\x95\xf4\x75\x94\xe7\x7f\xc1\x34\x63\x1e\x43"
+ "\xbb\xcd\xe0\xb3\x97\x46\xe8\xf7\x7c\xe5\xc5\xf4\x7b\x7e\x57\x7c"
+ "\xfa\x3d\x9f\x75\x7d\x34\x9c\x3d\xf1\xc6\x8d\xd4\xad\x26\xfd\x5c"
+ "\xd8\xf7\xc6\xb5\x4d\x92\x73\xd2\xe0\x8b\x26\xad\xe8\x45\x37\x7e"
+ "\xb8\xf2\x3c\x62\xc4\x16\x17\x41\xd5\xd6\xef\x59\xda\x30\xe7\xe5"
+ "\x75\xa5\x4b\x8c\x45\x1f\x18\x6b\x1e\xb8\xef\xe2\xb9\x33\x7f\x1b"
+ "\x8a\xd3\x99\x9e\x98\x73\xf9\xc0\xef\x5d\xca\x2e\xfd\x5e\xfe\xf0"
+ "\x9a\xcb\xd4\x2b\x8f\x27\x6e\x25\xc7\xd1\xc6\x9b\x39\xbd\x04\xed"
+ "\x90\x7e\x8b\xec\xbb\x35\x1a\xcc\x82\x70\x0e\x8d\x02\x77\x98\xff"
+ "\x47\x3b\x1b\x1d\xa3\x8f\x8a\x96\xae\x59\xbe\x76\xe5\xca\x4f\x57"
+ "\x45\x91\xfb\x6a\xf5\x6e\xad\x2a\xc0\xdf\xe8\xdc\xf6\xe4\xa6\x80"
+ "\xfb\x05\xb6\xff\x0b\xd5\xb8\xf9\x02\xf4\xdf\x93\xd9\xca\x96\x7c"
+ "\xb4\x47\x9d\x07\x7f\xa1\x3a\x42\x3f\x83\x47\x5e\x68\x10\xee\xef"
+ "\x9d\x18\xe9\xe3\x17\x96\x5f\xdc\xc7\x2f\x38\xe3\xf7\xf1\x0b\x8d"
+ "\xda\x06\x3e\x8f\xf3\x02\xe6\x3f\xeb\xa4\xad\xc9\xcf\xec\x07\x81"
+ "\x39\x73\x0f\xe6\xcb\xbd\x8b\xca\x5a\xef\x2c\x28\x4b\x90\x7b\xc5"
+ "\xfc\x0d\x96\xd0\x80\xe8\x66\x5f\x04\xde\x1f\xe3\x6f\xb0\xf0\xb7"
+ "\x97\xf8\x5b\xa1\x32\x0f\xee\xeb\x4e\x91\x9c\x3b\xe2\xbd\xa3\xe9"
+ "\x94\xfc\x2e\x37\x6c\x85\x17\x82\x86\x6d\x6d\xdd\xea\x90\xe7\xd4"
+ "\x6b\x55\x7f\x74\x71\x5f\x70\x7d\x05\x65\xad\xaa\x8e\x01\xfe\xb6"
+ "\x1a\x59\x95\x0d\x51\x9d\x75\xc9\xb5\xfb\xb4\xa5\xa3\x9d\x9f\xb7"
+ "\x08\x53\xe5\xd8\xe1\xbd\x4a\xfd\xfb\xc7\x2c\xfb\xec\x47\x0a\xb8"
+ "\x55\xb1\x7e\xa8\xca\x77\xa8\xba\xd9\xf0\xc9\xaa\x93\x3e\x50\x64"
+ "\x65\xfd\xc9\xf3\x9c\x53\x54\xcd\x6b\x18\x18\x2f\xab\xdb\x22\xf7"
+ "\x38\x1d\x9b\xb6\x8e\x39\x4b\xd5\x4f\x5f\x62\xdf\x34\x79\xc4\x07"
+ "\xb6\x72\x6c\xc0\x5d\x63\x1e\xf6\x11\x73\x57\x8e\x6d\x8a\xc0\x0d"
+ "\xef\x1c\x11\xbe\x8a\x3e\x1e\x8f\x79\xfe\xd8\xa4\xbe\xc1\xea\x3b"
+ "\x45\x35\xf3\x90\x86\xf9\x44\x8d\x3c\xf3\xb0\x31\x44\x93\x4a\xee"
+ "\xe0\x6f\xf7\xd4\x3c\xad\xcf\x43\x7b\x1d\x15\x8c\x4f\x4d\x0a\xc3"
+ "\xf5\x22\x9f\x90\xfb\x01\x35\xce\x61\x9c\x23\xea\x33\x60\x2b\x9a"
+ "\xd4\x34\x1a\x78\xa1\x9c\x9c\xab\xf2\xf7\xb5\x23\xdb\xe4\x5c\xb9"
+ "\xba\xa0\xa4\xa8\xac\x60\xf5\x9a\xd5\xa5\xe3\xc9\xb9\xf4\xd9\xd5"
+ "\xd3\x90\xe4\x78\xa2\x68\x75\x49\xc1\x6a\x19\xb5\x58\x06\x44\x2e"
+ "\x2d\x2b\xe1\xbd\x8f\x8b\xf6\xe0\x6d\xd2\x96\x37\xd5\x1c\x56\xe3"
+ "\x7d\x6d\xb2\xc1\xa7\xf2\x9b\xe3\x22\x9f\x46\x7c\xaf\xe4\xb7\x89"
+ "\x13\x4f\x51\xed\xd7\x99\x87\x55\x9c\x9f\xba\x3c\x65\x5f\xd4\xce"
+ "\xbd\xd8\x27\xab\x36\xdf\xf0\xc9\x02\x7f\xdb\x58\xd6\x23\x60\x81"
+ "\xff\x6b\x9d\x71\xca\x54\x0f\xfb\x77\xea\xdf\x3b\xe7\xbe\x92\x71"
+ "\xef\x77\xb2\xbe\xad\xf9\xad\xc7\x39\x8f\x63\xf7\xea\x72\x55\x7b"
+ "\x24\x02\x5f\xe9\xcb\xcb\xb0\xf8\xbc\xd4\xb4\x60\xa4\x2f\x5b\xdd"
+ "\x6c\x8c\xbd\x76\xa3\x1e\xc7\x66\x13\xf4\x5d\x5d\x9a\xdf\xd4\x9a"
+ "\x28\xfd\x90\x51\x2e\xe0\xae\xb3\x18\x7e\x34\xde\xe1\x76\xd5\x4d"
+ "\x8a\xc5\x11\xb8\x5f\x87\xf4\x19\x23\x7e\x82\xb5\xec\xe7\x89\x79"
+ "\x63\x1d\xc6\xff\xba\xfd\x91\x69\x91\xfd\x74\xd7\xbc\xf9\x30\xa0"
+ "\xd7\xaf\x40\x27\xcd\x59\x5a\x5c\xcc\x3a\x68\xe9\x8a\xe2\x67\xd7"
+ "\xad\x5d\xaf\x77\xdd\x5d\x2b\x39\x1c\xb5\xcc\x72\xbb\xfe\xc6\xb1"
+ "\x66\xc5\x8a\xe5\x2a\x49\xef\xc8\xe8\x3d\x2b\xe5\xc7\x50\x87\xf9"
+ "\x7f\xb5\x77\xc4\x56\xac\xb7\x0b\x53\xdd\x12\xfc\x56\x49\xfd\x23"
+ "\xfb\xb5\xae\x3b\x7a\x8e\x56\xe7\x37\x64\x5f\xf6\x33\xda\xcf\xf4"
+ "\xeb\x17\x72\x8f\x07\xfd\xba\xe3\x3e\xb4\x33\x09\xf3\xc7\x5c\x9e"
+ "\x9b\x8c\xc0\xa9\x9f\x32\x4c\xef\x6d\x8f\x76\x6d\x53\x3e\x13\x66"
+ "\xe8\x06\x33\xc7\x96\xc0\x7b\xcc\xff\xab\x17\x2b\x3d\x59\x9f\x3f"
+ "\xbc\xf7\x62\x4a\xc4\x7c\xb3\xbe\x08\x73\x8f\x03\x17\xcb\x77\x7d"
+ "\xe5\xc5\x72\xcf\xbe\x96\xf5\x0d\x06\x8d\x0d\x5e\x50\xfc\xb7\xe3"
+ "\x56\x63\xcd\xb8\x49\xff\x36\x02\xdf\x73\x59\x9e\x57\x88\xd4\x94"
+ "\x3b\xd9\xaf\xe1\x24\xed\x30\x2b\x9e\xaa\xf7\x46\xf8\x06\xda\x4e"
+ "\xd3\x0e\x52\x7d\x5b\x1f\x34\xe4\xcf\x4b\xf5\xd2\x96\x63\x18\x6a"
+ "\x5c\xaf\xdb\xa2\xf8\x6b\xc7\x24\x83\xb6\x3c\x87\xc7\xf3\x94\x11"
+ "\x3b\xa8\xae\x5d\xfa\x8b\xa8\xd8\x1a\x43\xdc\x7e\xc0\x39\x68\xc0"
+ "\x41\x5e\xb4\xdf\xe2\x33\x68\x65\xe4\x89\xe4\x89\x39\x4b\x4b\x30"
+ "\xc1\x5e\xbd\x72\xe5\x8a\x75\xeb\x8d\x78\xe3\x99\x6b\x8b\x97\xab"
+ "\xf8\xe2\xb7\xa3\xfb\x37\x42\x86\x67\x73\x88\x72\xa4\xaa\xdb\x18"
+ "\x7b\x77\x0a\xaf\x89\x48\xff\x51\x39\xe7\xda\xbd\x75\x9f\x3e\xff"
+ "\x3a\x49\x2f\x66\x28\xff\xab\x9d\xcf\x2b\xdb\xf6\x8a\x1f\x02\xa7"
+ "\x5e\xc3\xb6\xe5\xb5\xd6\x7e\xfa\x22\xc7\x55\x94\x67\x0a\xf6\xee"
+ "\x16\xdd\xbc\xb6\x1a\x70\xef\xb4\x19\xdf\xa4\x63\xbb\xa9\x66\xb7"
+ "\x8a\xa5\xdd\xba\x86\x7d\x45\x76\xbf\xaa\xd5\x88\x2c\x91\x7a\xb6"
+ "\x10\xf6\x59\x32\xcb\x44\x4a\x2f\xfb\xf0\x72\x0c\xac\x9d\x4b\xd8"
+ "\xae\x63\x5d\xc6\xdf\x6d\xe8\xa6\x9d\x53\xa0\xa3\x01\x6b\xf7\x7e"
+ "\x5f\x8a\xc8\xda\xbe\x89\x2c\x5c\x07\xf4\xb5\xb7\xad\x99\x69\xbb"
+ "\xd3\xf9\x3e\x74\x99\xae\xb3\xbd\x5c\x8f\x97\x76\xce\xd5\xd7\xfd"
+ "\xe7\x0a\xdb\x18\x27\xeb\x42\x75\x5e\x74\xe7\x41\x51\x83\xb4\xea"
+ "\xb3\x07\x40\x47\xfe\xe6\xe1\x01\xf5\xbd\xbf\x9d\x6d\x2a\x7f\x1f"
+ "\xaf\x6b\x04\x45\x4d\x5f\x0f\xd2\x27\x21\xdd\xab\xd2\xcf\x1d\x58"
+ "\x14\x0e\xf2\x3c\xf9\x5a\xfe\x76\x25\xea\x44\xfb\x53\x1a\x14\xdf"
+ "\xf7\xfd\xef\x2f\x57\x92\x93\xbf\x77\x29\xe7\x85\x3b\xc6\x59\x00"
+ "\xa7\x8b\xbf\x2b\x89\xfc\x98\x3b\xed\xe8\x05\xbc\x2e\xdd\x9f\x1c"
+ "\x7c\xf7\xe2\x0e\x75\x4e\x60\xc7\x07\x4c\x4f\xe0\x98\xa7\xaf\x05"
+ "\xe7\x05\xdc\x2f\x42\xff\x5d\xa3\xcf\xab\x5f\xcc\x33\xea\xc0\x58"
+ "\xea\x83\x0d\x3e\x83\xed\x70\xd0\x20\x13\xbf\x29\x75\x72\x5f\xde"
+ "\x8b\x31\xc4\x2a\xd8\x0f\x6e\xe4\x1b\x7e\x2f\x56\x19\xe3\x2a\xd7"
+ "\xad\xd3\x61\x3e\xaf\x1b\xf2\x9a\xa1\x5e\x17\xc7\xd2\x4c\x30\x60"
+ "\xe2\x39\x53\x1b\x38\xd3\x0c\x98\x16\xd8\x08\x3e\xfd\xdb\x6d\x53"
+ "\xea\xce\xb3\xcf\xa4\x17\x36\xc0\xb5\xa2\x20\x64\xe3\xfd\xac\x14"
+ "\xe3\xdb\x78\x4d\xe7\x99\xf6\x2f\xfa\x47\xf6\xa9\x50\x1e\x7d\x09"
+ "\xd9\xaa\xec\xa6\x5d\x29\x5c\x2f\xcb\x15\xf3\xc5\x20\xfa\x19\x7d"
+ "\x5d\x24\x06\xce\x1c\x72\xac\xa1\x94\x53\xb4\x6b\x3a\xf7\x37\xef"
+ "\x2d\xb3\x2f\x23\xd2\xac\x1c\xcb\xff\x24\xed\xba\x86\xfb\x9a\x71"
+ "\x01\x0d\x67\x86\x02\xf9\xf7\xf2\x39\x6e\xd6\xbf\x5b\xca\x61\xbf"
+ "\xaf\x64\xbd\xf4\xd2\xab\xbc\x1e\xc0\xdf\x60\xe2\x7b\xd7\x72\xa1"
+ "\x49\x5e\xd9\xc4\xbc\xf2\xd2\xab\x5b\x7a\x84\xf6\x89\x9b\xc4\x31"
+ "\x3f\xd1\x27\x26\x0a\x05\x4d\x09\x8c\xb7\xc9\x75\x86\xcf\x9a\x37"
+ "\x93\xc7\x59\xc5\x7e\x71\x96\xda\x4d\x64\xe3\x73\xfa\xfc\x7d\xa1"
+ "\x4e\x3f\x7f\xff\xb9\x91\xfe\x10\xda\x45\xad\x1b\x38\xe6\xca\xee"
+ "\xdc\x3f\x3a\x77\xf1\x7e\xdd\x38\xdc\x8f\x73\x7c\x8b\xeb\xda\xe5"
+ "\xfd\xe3\x89\x3f\xd3\x1f\x5b\xff\x4c\x8e\x47\xe4\xb3\xaf\x3d\xff"
+ "\x0f\xd4\x9e\xf3\x07\x72\x75\x0b\x8d\xe7\x88\x15\x4f\x73\x1d\x55"
+ "\x80\xd5\xcc\x67\xda\x6d\x5a\xbf\x7d\xbc\xfa\x6e\x2e\xfb\x46\xfa"
+ "\xa8\x75\xcd\xaf\x18\xc7\x67\xf6\x9d\x27\x4b\xeb\x9a\xdf\xca\x7b"
+ "\x35\x77\x3b\xd3\xec\x59\xde\xc5\xf6\x69\x88\xcf\xf3\xf3\xfe\x26"
+ "\xe6\x2b\x5a\x1d\xe3\x18\x56\x78\x83\x5e\x66\xa3\x3c\xec\x57\xa3"
+ "\xfc\x0c\x2e\xbf\x97\xe9\x01\x9c\x3a\x16\x2b\x9a\xb4\x63\x96\xaf"
+ "\x70\x06\x7d\xf2\x23\xe9\xb3\xab\x9e\xe9\xc3\x71\x60\x35\xf4\x17"
+ "\x70\xcb\x01\x0d\x34\xa3\x0e\xe0\x6c\xd1\xd7\x83\x2d\xb5\xe7\x29"
+ "\xb9\x75\x0d\x7f\x5f\xee\xa5\x0b\xd6\x3c\xb3\x45\x1b\x38\x7b\xa8"
+ "\xee\x02\x99\xb9\xdf\x78\x0f\xa8\x4e\xbe\x97\x34\xef\xe2\x3e\xf3"
+ "\xa5\x68\xcd\xf8\x41\x46\xb5\x03\xcc\x77\xb8\x1e\x44\x7f\x55\x01"
+ "\x87\x12\xf4\x55\x33\x5f\x75\x19\xeb\xe2\x58\x27\xfa\x7c\x6c\x24"
+ "\x1d\x72\x14\xe2\xef\xbf\xca\xf5\xae\x97\x4a\x34\xc8\x11\xaf\x07"
+ "\xed\xdb\x49\xc9\x9a\x7b\x47\xc9\x5e\xe8\xcd\xc6\x9d\xf2\xac\xb3"
+ "\x8d\xd7\x48\x5f\x91\xdf\xeb\xd8\x3d\xbc\xff\xf9\xbd\x09\x7c\x1e"
+ "\xf4\xa5\x66\x13\xaf\x21\x55\x8b\x5c\x9d\xcf\x73\x91\x07\xfa\xdf"
+ "\xae\xcb\xc3\x8b\x52\x2f\xb0\x1e\x19\x6d\x6e\x02\xbb\xb8\x5d\xec"
+ "\xc9\x27\xde\x4b\x4a\xde\x2a\x7c\xc9\xdd\x56\xd1\xe9\x6f\x97\xe7"
+ "\x80\x3b\xfd\x61\xb9\x97\x84\xf7\x09\x0b\xfd\x3e\x2b\xec\xe8\xe3"
+ "\x4c\x3b\x23\x9d\xf7\xa1\x78\x8d\x6e\xa1\x5f\xf8\x16\x95\x59\xf9"
+ "\xfb\x9a\x93\xe4\x3e\x84\x9e\xde\x69\xc7\x1c\xa4\xcc\x67\x45\xdb"
+ "\x43\xc3\xb0\xfa\xf3\x13\x59\xde\x90\x37\x63\x38\x6f\x7f\xbe\xd9"
+ "\xe3\x54\x75\x46\xa4\x25\x2d\x72\xa2\x2c\xf7\x95\x9e\xa6\xec\xef"
+ "\xef\x3b\x87\xe7\xa7\x7c\x16\xa2\x1f\x63\xf0\xfa\xfc\x04\xad\x3f"
+ "\xdf\x14\x06\x6c\xf0\xbe\x4d\x7e\xe7\x33\xe4\xd3\xbf\x9b\xc5\xdf"
+ "\xfa\xee\x22\xb1\x63\x4b\x1e\xf2\x99\x19\x2e\xc7\x97\xe0\xef\x8d"
+ "\x88\x34\x57\xdc\x18\x45\xa2\x7e\x95\xa5\xb5\xe2\x11\xf0\x53\x43"
+ "\x25\xcb\x73\xd8\x46\x85\x8e\x27\xd9\x1e\xfa\xfe\x27\x4c\xcf\x30"
+ "\x64\x2c\x9c\x46\x85\xd3\x7a\x28\xa1\x02\x7c\xab\xd6\xb3\x1a\x3e"
+ "\xe7\x81\x0c\xba\x34\x01\x9b\xb6\x21\x99\xf9\xc6\xda\xcb\x7e\x77"
+ "\xb4\x5c\xfa\xba\xa5\x3f\x41\x9e\x60\x0f\xb5\x57\xfe\x95\xda\x43"
+ "\x9e\xca\x23\xe7\x7d\x66\xe5\xf3\x66\x06\xdc\x86\x9b\xf8\x9d\x0b"
+ "\xbc\x5a\x10\x6e\xa6\xd1\xf6\x19\x78\xae\x0d\x7d\xfd\x0f\x35\xef"
+ "\x6c\xa8\x34\xe6\xd8\x9f\xd2\x86\x2e\x8e\xc9\x21\x84\x9d\xb4\x9d"
+ "\x77\xf1\xde\x94\x4b\x04\x32\x69\xda\x26\x5e\xdf\x6b\x38\x84\xf9"
+ "\x4e\x8e\x0e\xb7\x4f\x87\xdb\x75\x29\xb8\xcc\x33\xed\x0d\x72\x8f"
+ "\x0b\x6d\xca\xf1\x85\x01\x3b\x9c\x7e\x57\x16\x74\xbc\xcb\xf5\x09"
+ "\xaf\xff\xbe\x72\x8d\xb6\x33\xc7\xd7\x19\x3a\x4e\x1c\xdb\x67\x9f"
+ "\x86\xb1\xb6\xcf\x4e\xba\x7f\x9f\xeb\x2c\xbd\x3c\x4e\x13\x99\x36"
+ "\xcc\xfd\x79\x6f\xc7\xc5\x3a\x8e\xd7\x15\x2a\xc2\x34\xc6\x53\xea"
+ "\x25\x8e\x47\x01\x18\x69\xbf\xe3\x7d\x34\xe8\x89\xb0\xb0\x9b\xde"
+ "\x1d\x80\xd5\x00\xdd\x29\xe3\x53\x6c\xfb\xfc\x2b\xa9\x5b\xe9\x4e"
+ "\x61\xb2\x4a\xff\x50\x6d\xc7\x52\xf6\x3d\xcd\x97\xf8\xd4\x8a\xfc"
+ "\x08\x5f\xc2\x44\xd4\x55\xc3\xbe\x84\x22\x59\x4c\x6a\x94\x6b\x98"
+ "\x54\x18\x70\xbf\xdc\xe2\xa5\xef\xcb\xf3\x08\xd5\x7c\x5e\x44\xea"
+ "\xd8\x57\x6e\xf0\xa5\x65\xf3\xde\x1e\xc7\x9c\x4e\xd0\x36\x84\x0f"
+ "\xd5\x9d\x93\xb6\x3a\xbf\x4b\xea\xec\x0d\xb4\x8a\xfa\xec\xe3\x7c"
+ "\x36\x52\x87\x6d\x05\xec\xbf\x88\x1d\xd9\xc7\xbd\xf4\x8a\x8a\x67"
+ "\x5a\xcf\xf7\x2f\xfb\xf8\x7d\x68\x28\x93\x70\x5f\xdc\x38\xc8\xfb"
+ "\x0a\x2f\xdb\x85\xfb\xda\xd6\x7e\x5b\xf6\xf1\x87\xec\x6c\x9f\xbd"
+ "\x32\xd3\x6b\x6a\x9c\xa2\xaf\x29\xca\x58\x1b\xa3\xcd\xb7\xc4\x1e"
+ "\xfb\x78\x0f\x80\x60\x6e\x9c\x71\x9a\x1a\x7f\x3c\xe8\x26\xd3\x10"
+ "\xec\xca\x41\x13\xd9\x20\x5f\xc9\xb5\x13\x29\x0b\xef\x26\x9e\xa6"
+ "\x57\x6a\x42\x26\xca\xc0\xcf\xe6\xfb\x7c\xd1\x38\xc0\x95\xeb\xad"
+ "\x1d\xe7\x79\xbd\xec\x95\x33\xd2\xee\x7b\x85\x26\x6b\x80\xc7\x7b"
+ "\x47\x75\x13\x69\x32\xaf\x79\x22\x2d\xb3\x20\xac\xf6\x50\x8d\x75"
+ "\x8d\x6d\x13\x69\x4a\x74\xbd\xaf\x94\xaa\x35\xd1\x46\xb9\xaf\xb2"
+ "\xd1\x47\x5f\xc0\x3c\xed\xe4\x29\xda\x53\x24\xdc\x89\x42\x7c\xde"
+ "\x6e\x52\x7e\x0e\x7b\x1e\xb0\x36\x28\xbe\x93\x7b\x86\xe0\x37\xde"
+ "\x93\xd5\xf7\xa7\x12\x64\x8c\x91\x74\xb3\x8f\xbf\x6d\x1d\xb1\xe6"
+ "\x6c\x93\x78\xe8\x71\x01\xc2\xdb\xbe\x52\xc8\x30\x18\x9f\x82\xa5"
+ "\x6a\x6f\x8b\x63\x06\x80\xc6\xf2\xcc\x7e\xf5\x2b\x94\xfc\xc2\x2b"
+ "\x64\xeb\x58\xc9\xed\xda\xa3\xca\x98\xcc\xc4\xf8\x6a\xf5\x2c\x67"
+ "\xe0\x09\xe0\xcd\xf5\x31\x6f\x74\x86\xfa\x5a\x5d\xa5\x42\x6b\x7d"
+ "\x92\xed\xda\x3d\xef\xb7\xae\x3b\x48\x8b\xba\x43\xea\x7c\xeb\x12"
+ "\xf2\x35\x01\x5e\xd3\x44\xb2\x01\x56\x87\xa7\x98\x78\xef\xe3\xfa"
+ "\xd6\x75\x87\x19\xf6\x87\x3c\x16\xd4\x80\x3e\x6a\x4c\x68\xdc\xe5"
+ "\x09\x76\x51\x07\xe4\x7b\x61\x89\x08\x33\x9c\x53\xd4\xf8\x39\xd9"
+ "\xde\x3d\x76\x47\x81\x8a\xeb\x20\xdb\x3a\xbc\x67\xa8\xb7\xc3\x73"
+ "\x9e\xe1\x35\x4e\xf1\x14\xc2\x5e\xd4\xdb\x64\xd0\x5a\xf1\x57\xe3"
+ "\xea\xd6\x75\xfb\x89\xfb\x87\xf3\xe3\x39\xdf\x03\x2b\xa6\xe0\x4c"
+ "\x74\xbf\x70\x1e\xbc\x7b\x1e\x70\x6f\x1b\xd9\xf7\xe6\xfd\xd8\x91"
+ "\x3c\x8d\xaf\xf0\xd9\xb6\x57\xda\xf7\x80\x46\x6a\x9f\x60\xcf\x05"
+ "\xc6\xd5\x4b\x7b\xfc\x9e\xd2\xbf\xc6\xf7\x6f\x85\xec\x83\xef\xb7"
+ "\x76\xca\xfd\xbf\xc6\x8f\x16\x86\x34\xa1\xf4\xd9\xde\x06\x0d\x7a"
+ "\xc0\x8b\x2b\xeb\x02\xa9\x4f\xa6\xb2\x4f\xd1\xde\x97\xad\x09\xaa"
+ "\x7f\xb9\x2d\x6c\xaf\xc4\xeb\xe3\x88\xbd\x49\x1b\xe3\x6a\xf4\x31"
+ "\x7f\x17\x52\xe3\xfd\x65\xf6\xdd\x1f\xb2\x93\xe2\x3f\x51\x0f\xb8"
+ "\xcf\xeb\xb6\x5b\x83\x3e\x96\x35\xf4\xa7\x51\x31\x9f\xb5\x34\xfc"
+ "\x8c\x21\xbf\x45\x05\xca\x37\xdc\xce\x3a\xaa\xc9\xa4\x64\x87\x71"
+ "\xd4\xcb\xee\x52\xfe\x1d\x7b\xf3\x51\x7e\x57\xdc\xf6\x26\x42\xef"
+ "\xb8\xa1\xa6\xd1\x1e\xb6\x23\x05\x74\x15\xc6\x83\x31\x1e\xff\xa0"
+ "\xfe\x4d\xce\x7d\x57\xc1\x3e\x1f\xc3\x67\xad\x0c\xdc\x2e\x6f\x1f"
+ "\x71\xaf\x57\xcd\x93\xf6\x39\x8c\x75\x2a\x61\x03\x8d\xdd\x56\xc1"
+ "\xe7\x2e\xf9\xec\x8c\x3f\x6d\x95\xcd\x97\x56\x96\xa3\xe4\x66\x5f"
+ "\xae\x48\x53\xfa\xb6\x20\x48\x52\xa7\xf3\x3e\x31\xe6\x60\x63\xb8"
+ "\xcd\x80\x83\xf9\x5f\xc9\x61\x35\x9e\x2b\xd8\xa3\xae\x13\x19\x6d"
+ "\x43\x9b\x64\xdb\xd0\x46\xd9\x36\xfd\x9b\x55\xa8\xeb\x23\xb9\xf6"
+ "\x7e\x59\xed\xd9\xa7\x62\xa4\xd5\xaf\xb2\xf1\xf7\x78\x4f\x51\xf3"
+ "\x16\x79\x9e\x06\x7d\xa2\xf6\x54\x9a\x66\x8a\xf1\x2f\x8c\xbf\x3c"
+ "\x98\x4d\x66\x05\xb3\x2c\xe7\x25\x8e\x6f\xa9\x7f\xf7\x0e\xb0\x57"
+ "\x88\x1d\x65\x39\xf2\xbc\x22\xea\xe3\xef\x86\x8e\xe8\xa1\xa6\x1e"
+ "\xee\xab\xa9\x07\x29\x47\xf1\x61\xd3\xdf\x78\xdd\x5a\xcd\x19\x9b"
+ "\xaa\xc1\xf7\x79\x6a\x0f\xc1\xf0\x49\x4f\x90\x3e\xe9\x91\x3a\xf6"
+ "\x32\x71\x94\xfa\x4e\xa4\x17\x1e\xc2\x7d\xb9\x3c\x77\x09\x7c\x37"
+ "\x86\x0c\xfd\xd7\x54\xce\xfe\x4d\xc3\xbe\x05\x65\xe0\x95\x0a\x75"
+ "\x36\x3d\xe0\x6e\x1e\x8e\xff\x28\xbf\x73\xe6\x16\xc7\x38\xdf\xa2"
+ "\xb2\x3e\xe9\x7b\x50\x27\xe3\x28\x9c\xd6\xcf\xec\x35\x4f\xd7\xd7"
+ "\x48\x32\xf9\x3c\x00\xca\x62\xfe\x7b\x54\xce\xf7\x99\x06\x5c\xb7"
+ "\xc4\x5d\x7e\x6b\xac\xb9\x74\x64\x0f\xa9\x49\xae\xb5\x28\x1f\xd9"
+ "\xe6\x6a\x83\x47\xd0\xde\x31\x2a\xde\xe8\xbe\x0b\x47\xa7\x90\xe4"
+ "\x81\x7e\x61\x1f\xff\xc5\x46\xe6\xc9\xe6\xc3\x91\x74\x5a\x14\xd2"
+ "\x5c\x4a\x07\x35\x35\x0a\x29\xeb\x4d\x8d\x9f\x6e\x4f\xbc\x3a\xce"
+ "\xb0\x45\x14\x9d\x6d\xd0\x2f\x3f\x38\x21\x69\x5d\xdd\xc7\xdf\xdc"
+ "\xb5\x6e\xae\xe0\x38\x56\xaf\xfe\x9e\xe3\x85\x85\xaa\xfb\x1a\xc2"
+ "\x7c\xbe\x13\xe3\xac\x56\xdd\x77\xe0\x54\x09\x99\x0a\x4a\x78\xdf"
+ "\x2c\xbb\x99\xe7\x57\xc2\x05\x5b\x20\x15\xf6\x09\xe4\x7c\xcb\x6a"
+ "\xb2\x3e\x56\x04\xd8\xae\xcc\x0c\x8e\xe7\xc5\xb1\xbc\x38\x1e\x5f"
+ "\xd8\x95\x99\x8e\xfb\x09\xb0\xe7\x6c\x22\xb9\xaf\x8a\x7d\x6f\xc2"
+ "\x6e\x01\x7d\xfc\x01\xc7\x14\x33\x79\x7c\x41\xda\x72\x86\x2c\x1c"
+ "\x2f\x2c\xb4\x23\xbb\xa5\xd3\xff\x37\x39\xb7\x48\x2d\x81\x3d\xad"
+ "\xc9\x33\x3e\x76\x2d\x2d\xbb\x19\x63\xfc\x7e\xd5\xee\x3e\xa1\xda"
+ "\xad\xf0\x66\xfc\xa5\x8e\xc3\xbc\xb7\x42\xe2\xfe\x83\xa7\x43\x80"
+ "\xaf\x55\x0f\xec\x0f\x57\x0f\x34\xab\x73\xa1\xed\x54\x51\x2a\x7a"
+ "\x3c\xb0\x8d\xd9\x17\x94\xcf\xfe\xb2\x6f\x0f\xb7\x91\xdb\xc7\x75"
+ "\xff\xf1\xfc\x19\x19\xff\x2c\x84\x67\x57\xb1\x5e\xa6\x17\x65\x7a"
+ "\xdb\x69\xb0\x7a\x40\xb6\xbd\xd3\xaf\xca\x16\xc8\x7b\x94\x8f\xa4"
+ "\x83\xde\xe6\x61\x3a\xa0\xed\xdc\x3e\x6e\x7f\x88\x69\x02\x1a\xe8"
+ "\x6d\xb5\x0f\xe9\xed\xe4\x36\xfe\x01\xa3\xce\x2b\x68\x27\xda\x2a"
+ "\xdb\x39\x84\x76\x1e\x2b\x22\x0a\xee\x5c\xe5\xf8\x24\x75\xa0\x99"
+ "\xe7\x87\xae\x3f\xc1\x8e\x2e\xaf\x27\xcc\x03\xcd\xaf\x57\xd4\x9b"
+ "\xbe\x07\xdb\xa4\xc2\x87\xf9\xa0\x4f\xf4\xb0\xbd\xef\x29\xc1\x2f"
+ "\xd4\x28\xbf\x65\x2c\xed\x63\xfe\xee\xec\x33\x68\x93\xf6\x11\x55"
+ "\xf4\x88\x1e\xd8\xa6\x41\x4f\x08\x79\x8a\xd0\x7e\xcc\x1f\x4f\xe9"
+ "\xf8\x73\xde\x2d\xe7\x54\xbb\xac\xc5\x94\xf1\xde\x23\x55\x26\x4f"
+ "\x57\x15\x19\x6d\x79\x1c\xf9\xd0\x1e\x3b\x60\xa5\xc8\x6f\x3d\xa0"
+ "\x9d\x7b\x80\x67\x30\xa2\x4d\x1d\xbd\x41\xc0\xfc\x0b\x8d\xcf\xa3"
+ "\x84\x57\xce\xa2\x1d\x67\xc9\x5e\x5f\x01\xfb\xeb\x41\xb6\x17\xff"
+ "\xc7\x6b\x57\xe4\xd3\x64\x2f\xbd\x7a\x50\xe9\x78\x19\x8b\xe8\xaa"
+ "\xd3\xf4\x83\x8e\xe1\x78\x43\x1c\xc3\x2d\x2d\xfb\x08\xf3\x91\x8c"
+ "\x3b\xc4\x63\x46\x00\x3c\xc3\x7e\x39\x1b\x51\x47\x20\x73\x82\xc4"
+ "\xc7\x3d\x83\xf0\x9c\x8c\x67\xfe\x0e\x55\x06\xaf\x09\xa0\x5c\x8b"
+ "\x00\xcd\x18\x3e\xec\xb9\xfd\x7c\x65\x1a\xc6\x3d\xb7\xf2\x33\x9a"
+ "\x89\x3a\xf2\x79\xee\x7b\xa8\xc2\x67\x7a\xee\x67\x34\xe5\xf2\x74"
+ "\xca\x0f\x42\xa3\xe9\x6f\xde\x03\x61\x78\x68\x5b\xfa\x69\xda\xff"
+ "\x61\xb4\x8c\x39\xa4\x2e\x53\x7a\x70\xff\x01\xde\x77\xb8\xbc\x7a"
+ "\xf7\x4b\x1b\x8e\xfd\xa7\x2e\xb3\xdc\x41\x03\x0f\xdc\x8f\x7a\xf6"
+ "\xea\xf2\xe9\xf0\x9a\x79\x34\x58\x35\xbb\x65\x0c\x3a\x57\xed\x6e"
+ "\xe8\x0b\xd8\x0a\x47\xed\x1c\x17\x1c\x63\xe7\x7e\x3f\xad\xdf\x4b"
+ "\x16\xd7\x19\x5e\x93\x59\x40\x47\x1b\xb3\x68\x1f\xe6\xe4\xa2\x3f"
+ "\x33\xfd\xc5\xf3\xe8\x4b\x5d\x87\xb0\x4d\xca\xe7\x32\xc5\xfa\x4c"
+ "\x5b\xdd\x6e\xc3\x86\x7f\xad\xa3\xfc\x02\x99\xd4\x77\x57\x5e\x6b"
+ "\x9f\xeb\x10\xa1\x5d\x26\xad\xa8\x91\xe3\x68\xa5\x2f\xcd\xe3\x38"
+ "\x5a\x46\x6c\x2a\x69\xfb\x38\x21\x73\xfd\xf6\xf1\x35\xeb\x68\x0a"
+ "\xc7\xd3\xb3\xfa\x94\x2d\xa7\xc6\xeb\xd7\x58\xc7\xda\x74\xdf\x01"
+ "\x9b\x8a\x57\xb5\x7f\x6e\xd3\x79\xd4\x25\xdf\xff\xf0\xa6\x30\xe6"
+ "\x30\x12\xee\x3a\x9a\xdc\x78\x9e\x32\xd9\x0e\x2a\xf8\x48\xd9\x6c"
+ "\x3c\x2f\x5c\xd0\x6b\x15\xe1\x7f\x65\xd2\xde\xd3\x23\xf1\xf6\x7c"
+ "\xeb\x39\x46\x9f\xb0\x8f\xb6\xef\x52\x37\x41\xfa\x0f\xc9\x18\x2f"
+ "\xea\xbb\x7c\x44\xbb\x76\x92\x99\xbf\x43\xcb\xeb\x82\xbc\xce\xcc"
+ "\x67\x88\xd4\x18\xf2\xc3\x46\x23\x0e\xd9\xa8\x7b\x92\xf5\x6a\xbe"
+ "\xa3\x8d\xc1\xfc\xcb\x17\x68\x6d\xdd\xc0\x63\xc6\x0f\xbb\xf9\xdc"
+ "\xd2\xc8\x1c\xe7\x87\xbf\xe3\x77\x9c\xc6\x7e\xf5\x39\x92\x96\x3f"
+ "\x4a\xe6\x79\x8f\x3e\x67\x7c\xcf\x31\x9c\xa6\x6c\x18\x1e\xcb\x18"
+ "\x87\x26\xb5\x26\x9d\x1a\x70\xff\x28\xd3\x18\xcf\x78\x5c\x57\xdf"
+ "\xc0\xfd\x51\xb6\xd7\xb4\x6f\xd4\xf3\x81\xc6\x1a\xbd\xf4\x99\xe3"
+ "\xf8\x62\xee\x1f\x15\x1b\xe3\x9b\xfc\xc6\xc9\xb6\x89\x77\xaf\x2f"
+ "\xa3\x49\x0f\x7d\xce\x22\xe3\x78\xf0\xb7\x4c\xd5\xb8\xfb\xa3\x5d"
+ "\x23\x7b\x73\x39\x92\xde\xf2\xfb\x85\x3c\xc7\x30\x61\x0c\x56\x31"
+ "\xf5\x7a\xd5\xf8\x6b\x9c\x99\xff\xd1\x9b\x11\xf5\x9c\x18\x1e\x47"
+ "\x51\x07\xfb\x88\x30\x7c\x65\x9b\xfc\xa8\x8a\xeb\xe0\xb9\x95\x1a"
+ "\x5f\x7f\x74\xa9\xf3\x85\x99\x4c\x5f\x4d\x9f\x4f\x7a\x7a\x3f\x56"
+ "\xf4\x75\x52\xe2\xb4\x5d\x64\x7f\xaf\xc2\x6b\x4e\x55\xb1\xa1\xac"
+ "\x27\xe9\xc0\x0d\xfc\x9e\x79\xbd\x75\x2a\xaf\xc5\x1d\xd8\xea\xe1"
+ "\x71\x7b\x28\x3f\x79\x21\xcf\xf5\xa5\x2d\x7e\xa0\xe4\x26\x94\x43"
+ "\x5a\xfa\x6f\xce\x06\xcd\x75\x9b\x68\x0a\x7f\x27\x14\xe9\x72\x6f"
+ "\xcb\x77\xf5\x53\x81\x2f\x66\x90\xfd\x8b\xbb\xf8\x6c\xc1\x81\x06"
+ "\xcc\x2f\xd5\xb7\x69\xb9\xfe\x9d\x5b\x4a\x38\x9e\xe0\x1b\x83\xde"
+ "\x24\xd5\x57\x3f\xbe\x15\xcf\x99\x23\xcf\x07\xfe\x64\xec\x0b\x78"
+ "\xe9\xc7\x33\xe4\x3e\x28\xfb\x4f\x43\x56\xb4\xfa\xa5\xbe\x11\x9f"
+ "\xa3\x1f\xdf\xaa\x70\xf9\xf1\xad\x47\x4b\x88\xd7\xbd\x4f\xec\x93"
+ "\xb1\xc1\x7e\x0c\x79\xfe\x51\xae\xbe\x1e\x73\x5c\xf2\x15\xdb\xbb"
+ "\xdf\xe1\x39\xd8\xc7\x1c\xdb\xf8\x04\x8f\x13\x05\x4e\xca\x51\x36"
+ "\xfc\x32\x8b\x06\xfe\x89\x68\xff\xab\xbc\xd6\x17\x57\x27\xbe\x42"
+ "\x24\xcb\xec\x58\x9a\x23\xfd\xd7\x76\xb8\x8e\xe3\x8a\xf9\xfe\x32"
+ "\x1f\xae\xcc\x73\x3c\x6f\xb2\xe1\x7d\x10\xd7\x0c\xb1\x63\xcb\x21"
+ "\xe6\x4b\xcc\x61\xed\x98\x27\xf0\x9e\xea\xcc\xd1\xce\x3d\x32\x6d"
+ "\x3c\xdb\xbf\x45\xca\x1f\xf7\x27\xf6\x0e\x1f\xec\xb3\xbd\x44\xeb"
+ "\x43\x62\xd0\xf1\x05\x3e\x5f\xf4\x13\xbb\x6b\x2f\xfb\xc1\xfc\xb8"
+ "\x37\xda\x0f\xe6\x27\xc9\xf8\xcd\xc7\x0f\x52\xf7\x93\xe3\xf8\xd9"
+ "\x47\x7e\x3f\x4d\x0e\xb8\x7f\x62\x07\x1d\xa5\x8d\x75\x79\x3a\xf1"
+ "\x27\x32\x4e\x5b\x1d\xcf\x8b\xd2\x72\xbc\xaa\xbd\x65\x0e\x3c\x5b"
+ "\x44\xda\x96\x42\xbd\xbd\x36\x3c\xdb\x1c\x2e\x8c\x6b\x69\xa0\xc9"
+ "\x44\xb4\x39\xcd\x75\x9c\xdb\xcb\xf8\xf6\xa7\x2d\xf3\x45\x9e\xf9"
+ "\x64\x98\xdc\x7e\x5f\x1a\xca\x81\x96\x62\xea\x95\xc7\x0d\x7a\xea"
+ "\x74\xe2\x3d\x28\x53\x3f\x60\x28\x3b\x08\xf9\x01\xc3\xc8\x3f\x4c"
+ "\x7b\xe4\x93\xf3\x44\xe4\xc3\x9c\xd8\x62\x9c\x27\x0d\xb8\x7f\x6a"
+ "\x7e\xbf\x98\xf4\x98\x0a\x3f\xb1\xfb\x23\xca\x72\xfc\x8c\x78\xe5"
+ "\x51\xa7\x45\xd5\xb9\xcc\x77\x8a\x7e\xf2\x39\xbd\xde\xe0\x68\xb2"
+ "\x54\x71\x1d\xec\x3b\x68\xb3\x69\x6a\xde\x97\xed\x99\xe4\x27\x4f"
+ "\xa3\x86\x31\x7f\x99\x23\xa7\x42\xb4\x9e\xa2\x9f\xbe\xd3\x19\xec"
+ "\xb9\xcc\xf1\xf0\xa7\xea\x1b\xa1\x83\x95\xe4\x29\xbf\x59\x7e\x1f"
+ "\xfb\x2c\x1d\xfc\xa7\xc7\x27\xe3\xcc\xf3\xbd\xf4\x07\x67\x9f\x0f"
+ "\x1e\x1b\x30\xc7\x1e\x8e\xd3\xa8\x21\xef\x3e\x4e\x47\x9a\xc7\xef"
+ "\x93\xf1\x1c\x47\x7c\xd2\x0b\x75\x9f\x90\x83\xaf\xca\x58\x0e\x8c"
+ "\x6f\xe8\xde\x56\xc6\x59\xab\x2f\x0c\x72\x1b\x5c\x98\xff\x79\x42"
+ "\x81\x56\x96\x09\xc7\x06\x5e\x2b\x3c\xb8\x05\x7c\x27\xb4\x1d\x85"
+ "\xc1\xcb\x6b\xc3\x41\x79\x7e\xde\x15\x12\x67\x7d\x69\x85\x41\xb6"
+ "\x49\xea\x2a\x92\x2c\x73\x1a\x45\x6b\x7f\xfa\x32\x47\xc0\x7d\xb0"
+ "\xf9\x7d\xa7\xea\x9b\xcb\x84\xdb\x6c\xb4\x7d\x9f\xde\x76\xa4\x49"
+ "\xde\x9f\xd6\xa0\xe2\x57\xe2\xb9\x6b\xd4\x35\x2b\xf4\x33\xdb\x03"
+ "\xec\x2f\xab\x68\xf1\x7a\xe6\xf0\xd8\x70\x59\x78\xbc\x9e\xf9\x19"
+ "\xea\x18\xd2\xeb\xa8\xfe\x4f\xd6\x51\x7d\xa9\x3a\xa0\x1b\xae\x39"
+ "\x4d\x3f\xb3\x5f\xfe\xdc\xf1\x75\xf9\x8d\x20\xad\x7e\x99\x4d\xe9"
+ "\xcc\x37\x9e\x0f\x63\xfe\x16\xb2\x95\x39\xe4\xb7\xac\x4c\x54\xc9"
+ "\xb1\x3c\x43\xf5\x39\xde\x0e\xe7\x20\xb5\x6e\xf8\x33\x75\xd3\xcf"
+ "\xe4\x37\x73\x3b\x4a\x79\xce\xb6\xa5\x70\x68\xe7\xb2\x92\x21\xd3"
+ "\xeb\x92\xcf\xf6\xa2\x1f\xf6\x44\xf0\x59\xa7\xff\xcf\xe4\x29\xe4"
+ "\xf5\xd5\xe3\xbc\xae\x5d\x28\xd2\xca\x1c\x1a\x74\x03\x6c\xf4\xb0"
+ "\xa4\x07\xec\x17\x39\xdf\xc2\x9c\x4d\xce\xb7\x7c\xf2\xac\x63\x8a"
+ "\x8c\xd1\xe9\x2e\x29\xe6\xb5\xef\xf0\x50\x3e\x78\x84\xf2\x38\x76"
+ "\x27\xaf\x3b\x8b\x64\x31\x63\x51\x28\x51\xc8\xf9\x14\x6c\x7f\x8e"
+ "\xdd\xe9\xf1\x7b\x29\x0c\x3b\xba\x71\x80\x32\x1a\x61\x7b\x42\x67"
+ "\xdb\x58\xaf\x37\xe9\xf1\x3b\x6b\x06\x46\xe2\x77\xee\xe3\xb5\x9e"
+ "\x2e\xdc\x0f\x90\x39\xbc\x63\x95\x65\xcf\x00\x4d\xde\xbb\x81\x32"
+ "\xf7\xf0\x5a\xde\x3f\x95\xed\xc3\x76\x85\x8c\xe5\xb9\x36\x93\xd7"
+ "\xf3\x47\x6c\x9f\x8d\x99\xa6\x08\xbd\x65\x96\x6b\x20\x97\x45\xef"
+ "\x37\xe4\x38\x18\xaa\x5f\x9a\x13\xb2\xb9\x8e\x83\x76\x3e\x2f\xfd"
+ "\xac\x0a\xf4\x8b\x3b\xae\x18\x3e\x5d\xbb\x22\xe2\xaf\xbe\x3f\x59"
+ "\xe9\x77\xc0\x6a\x1f\x8d\x27\xc2\x7b\xf2\x69\x5a\x2f\x65\x29\xff"
+ "\x88\x71\x18\x13\x0f\x65\xf1\x5e\x7c\xc5\xd3\x64\x0f\xef\x59\x92"
+ "\xe0\x7a\x95\x12\xf9\xdb\xe9\xfc\xab\x38\x27\x7a\xa6\x15\x53\x16"
+ "\xef\x3f\xb0\x0f\x85\x63\xb3\xcc\x9f\x30\xb9\x9c\xa2\xf6\x62\x72"
+ "\x95\x93\xd5\xed\x8e\xf5\xa5\x4b\xcb\xd8\xbb\x61\xe3\xea\xd2\x22"
+ "\xc7\x13\xcf\xae\x5b\xc7\x27\x3e\x17\xcc\xc9\x8b\x3e\xd3\x69\xae"
+ "\xc5\xb8\x60\xdd\x3a\x6f\xb1\x35\x94\xeb\x50\xf1\x73\xdf\x6c\x88"
+ "\xf8\xce\x39\x3f\xab\xef\x69\xd4\x27\xb5\xf3\xb8\xcd\xef\xd5\xf3"
+ "\x18\xa7\xf2\xb9\x3a\x24\xc7\x7b\x6d\x8f\x7d\xbf\x3a\x43\xf9\xe6"
+ "\x7d\xec\xcb\xa0\xf8\x54\x95\x55\x7e\xea\x87\xb2\xd5\x5e\xfe\xa1"
+ "\x9e\x61\xdf\x85\x7a\x35\x96\xb0\xef\x02\xef\x27\x2b\xd9\x7b\xd3"
+ "\x62\xc8\x5e\xc0\xfd\x66\x06\xec\xa7\xfa\xcb\xd7\x39\x6f\x66\x48"
+ "\x1c\xd5\x59\x59\xc6\x69\x6b\x44\x8c\xb9\x31\xc3\x6d\xd8\x63\xff"
+ "\xa1\x5a\xef\x7e\xf3\x65\xc6\xd7\x4b\x87\x8e\x45\xa4\x4f\x42\xdb"
+ "\x8e\xa9\xf4\x37\xf3\xb9\x7c\x5c\x3a\xdf\xb7\xe6\x89\xb5\x4f\x97"
+ "\x2c\x2d\x5d\xbd\x6c\x75\xf1\xea\xd2\x32\x19\xf6\x62\x8a\xfc\x77"
+ "\xcf\x0d\xcb\x17\x4b\x47\x81\x48\x3b\x8e\xd7\x3d\x8c\xb8\x5b\x6a"
+ "\xdd\xe9\xe7\x37\x4a\x5f\xc9\xcb\x6b\x9f\x5f\xad\x09\xfe\x7c\x86"
+ "\xd7\xb4\xb7\x74\xc4\xe7\x44\xa5\xf7\xdb\xb6\x1c\x72\x4c\xa4\xec"
+ "\x93\xf4\x8b\x7c\xde\x6f\x02\x9d\xe5\xb8\x54\x3b\xc8\xe3\x47\x0f"
+ "\x75\x84\x6e\x26\xd5\x3f\x3f\x7f\x8d\xe3\x0c\xb3\xef\x1a\x68\xbf"
+ "\xff\x24\x9e\x65\xfb\xfb\xec\xfb\xf9\x7c\x93\x58\x6b\xff\x21\xf3"
+ "\x02\xe3\x07\xda\xed\x11\x22\xff\x15\xb1\xb6\x68\x8f\xe8\x2b\x7a"
+ "\x05\xf6\x5a\xcf\xbe\xdd\xa2\x1b\x38\xb4\x80\x6e\x85\x91\xbe\x3f"
+ "\x35\xea\x1b\xf7\xdd\x8a\xd6\x3f\xff\x0f\xe8\xaa\xdb\xf0\xbb\x5a"
+ "\x54\xf7\x1d\x53\x74\xfd\xb9\xdc\x43\x58\x50\x24\xfa\x46\x62\x5b"
+ "\xbc\xc5\xcf\x43\xf8\x69\xa2\xda\xd7\x13\xb1\xc7\xc9\xef\x6e\x12"
+ "\xb5\xbe\x8f\xd9\xde\x56\x3c\xf7\xd6\xad\x6a\xcf\xd3\xf7\xb1\xcf"
+ "\x55\x94\x88\x32\x61\xe9\x6f\x26\xdb\xf4\xd6\x52\xcf\xf6\x01\xf6"
+ "\x7f\xf0\xeb\x65\x0b\xf9\xb9\xf5\x49\xb6\xb1\xdf\x0a\x0b\x93\x4b"
+ "\xf0\xbe\xa8\xa7\x27\x44\xba\x3f\x13\x78\xf3\xcd\xfd\xfc\x0d\x72"
+ "\xe6\xcf\x7d\x3b\xc9\x52\x9f\x4e\xb0\xbb\xde\x1a\x8e\x7f\x02\xfb"
+ "\xd3\x67\xf0\x2a\xc7\x49\x97\xbe\x0f\xb0\x37\x18\x3e\xf3\x2a\xe0"
+ "\x1e\xe1\x7d\x53\xc5\xb3\x6f\x1d\xfb\xcf\xf1\xec\x5b\x92\xf7\xa6"
+ "\x55\x53\x21\xef\x35\xb0\x3f\x00\xc7\x11\x87\x1e\xcd\x54\x72\xf8"
+ "\x8b\xe9\xd2\xdf\x01\xba\x9e\xf7\xb1\x9a\x2a\x60\xbf\x25\x8b\x29"
+ "\x6c\x77\x86\xdc\x54\xc9\x7b\xce\xda\xc0\x99\x43\xec\x27\x20\xcf"
+ "\x8f\xca\xf8\xfb\x7f\xa0\xa6\x0b\x64\xee\xa6\xc3\x39\xbc\x37\x32"
+ "\x42\xeb\xc3\x2f\x31\x0c\x51\x7b\xb6\xd0\x5a\x6e\xaa\x62\x18\xda"
+ "\xc0\xd9\x99\x46\x39\xd8\x5a\x63\xb9\xdc\x49\x3a\x5c\x26\xcb\x71"
+ "\x5e\x19\xf7\xc6\xb6\x44\xd8\x96\xe6\xc8\x3a\xd5\x73\x9e\x80\x7e"
+ "\x0c\x0d\x84\x0f\xe1\x7e\x31\xd3\x09\xd7\x7c\xb9\x26\x3f\x64\x27"
+ "\x19\x6f\xc9\x96\x7d\xdc\xe3\xfd\xb8\x55\xe2\xc3\xfe\xd6\xa5\x18"
+ "\x4b\xa4\x9d\x7e\xb8\x63\xdf\x47\x64\x2e\x79\x92\xfb\xf3\x17\x85"
+ "\xd2\x56\x3d\x4b\x07\x14\x7e\xbf\x58\xda\x5f\x3b\xd0\xdc\x6f\x5b"
+ "\x46\x7e\x93\x85\x8e\xda\xf9\x7c\xc8\x96\x43\x47\xed\x83\xd0\x1f"
+ "\xbf\xc8\xf4\x26\x9e\x39\xae\x6c\x44\x55\x8e\xf7\xef\x99\x1f\x13"
+ "\xed\x36\x17\xde\xe7\x1a\xbe\x35\xcc\x87\x35\x78\xe7\xa5\xc3\x0e"
+ "\xa6\x9b\x97\x7e\xbe\xbc\xb3\x57\x9d\xbf\xc1\xf3\x18\x8e\xa9\x20"
+ "\x69\xbd\xed\xa9\x1e\xeb\xd6\x56\x3e\xe3\x3b\xd3\x1a\xca\x31\xf1"
+ "\xfe\x3c\xc7\x76\xe0\x78\x17\x1c\xdf\x81\xd7\x58\xf5\xf7\x59\x31"
+ "\xef\xa7\x18\xef\x51\x6f\xab\x11\x97\x81\xe3\x66\xb1\xef\x47\x58"
+ "\xf7\x07\x95\xf1\xa4\xce\xab\xfd\x6d\xf6\x07\xe5\xf5\x5d\x3e\xd7"
+ "\xca\x7b\xd0\x28\x37\x7c\xfe\x57\x9d\xe7\xfa\xe5\xb0\xff\x1b\xee"
+ "\x33\x86\x7d\xb7\x40\x8b\xfe\xfa\xa5\x41\x3f\x64\xdb\x5f\xbf\x74"
+ "\x26\xde\x65\x61\x6c\x39\x70\xc9\x39\x39\xc7\xdf\x7e\x96\x4c\x5a"
+ "\xaa\xc8\xe7\x38\x2c\x47\xfd\xa4\x9f\x65\xff\xe5\x0e\x3d\xee\x41"
+ "\xe2\x59\xfa\xe5\x82\x91\xbd\xe0\xb0\xbe\x8e\xf9\xcb\x16\x65\x47"
+ "\xff\xb2\x45\xae\x63\xee\x5c\xea\xfd\xc1\xa6\xa0\xe9\xd0\x26\xcc"
+ "\xb2\xe5\xf9\x96\x5f\x1e\xf4\xd2\x6f\xbc\x86\x6f\x12\xf2\x15\x8f"
+ "\x16\x5f\x0f\xe3\x46\xae\x82\xf9\xf6\xab\x72\x9c\x18\x9e\x97\xbe"
+ "\xad\xbe\x7b\xb8\x6d\x62\xa1\xc6\x36\x4c\x7a\x8e\x4f\xfa\xc6\x94"
+ "\x9c\xe7\xf5\xcc\x31\x6a\x8e\xac\xf2\xe8\xfe\xbc\x57\x9e\x8e\x7e"
+ "\x4e\xe7\x67\x45\xb3\xb7\xb3\x8d\xbd\x91\x5a\x93\xc6\x31\xd8\x85"
+ "\xab\x59\xf8\x3d\x25\x7e\x82\x7d\xec\xf3\xc0\x26\x42\x1d\xa2\x64"
+ "\x1d\x7f\x23\xe1\xed\x67\x98\xf6\x4a\xa6\xde\x96\xfb\x17\x9a\xfb"
+ "\x4e\xe1\xe2\x79\x81\x8f\x7d\x73\xce\x13\xf2\xa5\x21\xdf\xde\xb6"
+ "\xf2\x5e\xf6\x2f\x72\x70\x5c\xcb\x6e\xbd\x6e\x5f\x5a\x52\xee\x17"
+ "\x93\x79\xdf\xf7\xed\x43\x5e\xfa\x4e\xcb\xe5\xcb\xf9\xdb\xa3\xef"
+ "\xcf\x0e\xdb\x2c\x39\x34\xda\x3c\x93\xd7\x11\xa6\xa2\xfe\x05\x82"
+ "\xf1\x6f\xd9\x1b\x32\x05\x69\xc8\x34\x56\x7c\xb5\xd2\x09\x3d\x30"
+ "\x56\x84\x37\xa1\xbf\xfa\xed\xd0\xf7\xed\xd4\x19\x6a\x93\xbe\x3b"
+ "\x90\x61\x6b\x85\x5f\x9c\xf7\x84\x0e\x4b\x1f\x6e\x35\x4e\xb7\xbc"
+ "\xe4\x09\xbd\x4b\x9d\x25\x3e\x6a\x5d\xf7\x67\xd8\x12\x2d\x32\x5e"
+ "\xde\xd4\x92\x4a\xba\xe9\xac\x7c\x9f\xa3\xec\x97\x96\x46\xfd\x5a"
+ "\xcc\xf1\x4f\x23\x71\xba\xe7\xd9\x35\x4f\x94\xae\x5e\xbb\xe6\xa6"
+ "\xf9\x2b\x36\xac\x28\x76\x3c\xa8\xdc\x2a\xa3\xc6\x3b\xcb\x48\xac"
+ "\xf7\x77\x8a\x78\x2c\x62\x1b\x92\x63\xbe\x5f\x2a\xde\xbb\x11\xeb"
+ "\x1d\xf6\xdc\x64\x5e\x77\xfd\xef\x8c\xf7\x6e\xd8\x88\x1c\xeb\x7d"
+ "\x64\x0f\xe2\x57\x99\xc3\x32\xa0\xbd\x17\xe0\x67\x1e\xff\x34\x77"
+ "\xcb\x01\x96\xa3\x7d\xd2\x6e\x79\xa7\x39\x32\x1e\x16\xdb\x2c\xbc"
+ "\x6e\x85\xf4\x16\xe3\x2c\x35\x78\x11\xe3\xc6\x3b\xc7\x46\xce\x76"
+ "\xbd\x73\x02\x74\xcb\x50\xf2\x2b\xf3\x76\x1b\x7b\xf5\xfa\x37\xf6"
+ "\xa4\x6f\x81\xe6\xd6\x1c\x6a\x7d\xec\x9d\x7f\xee\xd3\xc6\x5a\xd4"
+ "\xde\xcc\xaf\x6c\xc6\xb9\x41\x25\x9b\xef\xe9\xb2\xf9\xab\xcc\x4b"
+ "\xf9\x53\x8c\xc8\xc6\xaf\x96\x8f\xc8\xf5\x3f\x8c\xb2\xcb\x3f\xcd"
+ "\x17\x43\x9f\xa7\x5c\x75\x9a\x8e\x94\xf1\x9a\x19\xee\xaf\xc5\xfd"
+ "\x52\x86\xa5\xce\x50\x1c\x99\xad\xdf\xa3\x8e\x23\x37\xe8\xf7\x9f"
+ "\xc7\x7d\x8a\x7e\x0f\x7b\xea\xd7\x17\xf4\x7b\xc8\xec\xaf\xff\xa6"
+ "\xdf\x67\xe0\xfe\x77\xfa\x3d\x74\xfe\xaf\x5f\xd7\xef\x27\xe0\xfe"
+ "\x25\xfd\xfe\x73\xb8\xdf\xa2\xdf\x43\x06\x7f\xbd\x42\xdf\xd7\xc6"
+ "\x18\xfb\xeb\x07\x2e\x7f\xde\xf4\xeb\x49\xca\x4e\xfa\xf5\x12\xd8"
+ "\x4c\xfa\x98\x31\x9c\x56\x82\xbe\x69\x35\xe8\x8b\xf4\x0c\xae\x07"
+ "\xe9\x55\x5e\xfa\xe1\x81\x88\x74\xb3\x9e\xbf\x19\x7a\x2e\x7b\x24"
+ "\xfd\x57\x41\x3d\x1d\xf6\xcf\xeb\xed\x11\xe9\xbd\x7a\xfa\x71\xe4"
+ "\x6f\x8b\x48\xd7\xf7\x71\x7f\xdd\xe3\xa5\xe6\x0f\x22\xd2\x4f\xa8"
+ "\xf4\x23\x64\xf8\x91\xe8\xe9\xc7\xf4\x74\xbb\x97\x1a\xaa\x23\xd2"
+ "\x8f\xe8\xe9\xd0\xff\xbf\x9a\x11\x91\xae\xbe\x55\x2f\xcf\x1b\x5a"
+ "\xc5\xd1\x72\x96\xad\x23\x8b\xbd\xb4\xaf\x3c\x22\xcf\x7e\xbd\x6c"
+ "\xb1\x97\xf6\xee\x8f\x48\xd7\xcf\xaa\x1e\xd9\xee\xa5\x7f\x85\x22"
+ "\xd2\x47\x9d\xcf\x26\x34\x50\xe1\x68\x6b\xcb\xfc\x4d\x32\xe9\x0b"
+ "\x2b\x6d\xd2\x77\xdf\xe7\xb3\x88\xd6\xbd\xe2\xa4\xa3\x42\x88\x93"
+ "\xf4\xee\x01\xdd\x6f\x73\x12\xfb\xd1\xa9\x33\x9d\xef\xd6\xcb\x73"
+ "\x7e\x6c\x67\xf2\x39\xcf\x4d\x32\xed\x2a\x69\x0f\x39\x2b\x55\xdc"
+ "\x55\xe5\x63\xdc\x2b\xd7\x58\xf4\xfd\x67\xe4\x99\xcd\xb6\x34\xc3"
+ "\xe1\x75\x58\x4f\xe9\xa0\xf4\x7b\xe5\x39\x2e\xa7\xf1\x5a\x83\x3c"
+ "\xfb\x17\x31\xd7\x55\x7a\xff\xdd\xf7\x35\x8e\xcd\xe0\x56\xeb\x31"
+ "\x2c\x8b\x9c\x9f\x7d\xa6\x22\xf3\x7a\xe9\xdd\x56\xbe\x26\xda\xd3"
+ "\xfe\x57\xc0\xfd\x6e\xf3\xc8\x79\xb4\x23\x41\x3d\xfd\x2f\x48\x6f"
+ "\x89\x48\xef\x1e\x55\xb7\x43\x0f\x8a\xe4\xb3\x07\x86\x06\x84\x3f"
+ "\x34\x20\x82\xb5\x7f\x07\xde\x2b\xe5\xd9\xaa\x2f\x84\xab\xcf\xb6"
+ "\xe8\x71\x4e\x3e\x0c\x6d\x10\xec\x3f\xc0\xdf\x13\xb9\x62\xa1\xdf"
+ "\x47\x0b\x4b\xa0\x2a\x97\xb1\xff\xe3\x05\x19\xf3\xcb\xd5\xcb\xb1"
+ "\xd6\xd9\xa7\xce\xcf\xfb\x76\xc9\x9d\x18\xe3\xf6\xad\xe4\xf7\x7f"
+ "\xa3\x05\x45\x3e\xfa\xbf\xec\x7d\x0f\x5c\x54\xd5\xb6\xff\x9e\x61"
+ "\x40\x54\x94\x91\xd0\x50\xa9\x06\xb3\xf7\xe6\x16\x16\xdd\xab\x46"
+ "\x3e\x7b\x51\x59\xcf\xba\xfe\xa1\xae\x76\xa9\x48\xc1\xf4\x86\x5e"
+ "\xff\x8c\x8a\x84\x88\x80\x68\x3c\xea\x02\xa2\x57\x7d\x58\xa8\xd8"
+ "\xb5\xf7\xa8\xd4\xe8\xdd\xfa\x3d\xec\xa9\x8d\x89\x85\xca\x3f\x4b"
+ "\x0b\x0d\x6d\x24\x24\x24\xb4\x51\x47\x19\x60\xe6\xec\xdf\x5a\x7b"
+ "\x9f\x33\x67\xce\x30\x03\x0c\x69\x76\xef\x7d\x7c\x3e\xf3\x39\xec"
+ "\x73\xf6\xd9\x67\x9f\xbd\xd6\xfe\xee\xb5\xd6\x59\x7b\xad\xca\x04"
+ "\x3b\xd9\x0a\x6d\x6f\x99\x25\xf9\xb3\xee\x77\xec\xff\xc1\x3e\xe0"
+ "\xf3\xd2\x59\x5e\xa0\xfd\xcc\x3f\x02\xf3\x1e\xd2\x75\xe9\x26\xfa"
+ "\x29\xca\xb2\xf1\x20\xe7\x10\x1d\xac\xed\x1b\xe8\xba\x38\x33\xff"
+ "\xc1\x35\x38\xef\xe9\x9d\xf8\x5c\xde\x5f\xc3\xbf\xa5\xfd\xa8\xe7"
+ "\x78\xb1\xbf\x86\xbe\x85\x7a\xd3\xfe\xe3\x70\x6f\xad\x79\x50\xbc"
+ "\x5b\xbf\xb8\x95\x5b\x88\xba\x23\x0f\x64\x93\x8b\xa5\x6a\x8e\x4f"
+ "\x9f\x18\x05\xb5\xff\x2a\xb4\xf7\xb2\x9c\x20\x79\x34\x61\xe7\x42"
+ "\xab\xba\x32\xa5\x81\xac\x18\x4a\x42\x62\xad\xb8\x5f\xe0\x93\x47"
+ "\x06\x26\x62\xfc\xd8\x78\x13\xc8\xa1\xea\xbf\xc2\xf5\xfd\x0b\x4b"
+ "\xd5\x36\x26\xaf\x7c\x62\x64\x36\xc2\x1c\x3a\x1e\xd7\x90\xea\x5a"
+ "\x3b\xae\x03\x4c\x4e\x06\xfc\xf7\xb7\xbf\x92\x10\x64\x5b\x9a\xd0"
+ "\x7f\xcb\x12\x12\x60\x5f\xaa\x0f\xfe\xf3\x35\x12\x29\xad\x3f\x5b"
+ "\x92\x60\x4d\x69\x0d\xe9\xb7\x16\xd6\x14\xb4\x3d\x0c\x54\x69\xd9"
+ "\xb7\x50\xfc\x5f\x50\xff\xa5\x69\x6b\x52\xd7\xf9\x8d\xec\xaf\xe8"
+ "\xd5\x18\x5f\x1c\xfb\xe2\xee\x5d\x73\x40\xcf\xb6\x8b\x7b\xa1\xd3"
+ "\xce\x91\x21\x86\x3f\x10\xf5\xc0\xab\xd4\xd8\x3c\x9f\xa8\x31\x27"
+ "\x4c\xda\x1c\x66\xdf\xf3\xad\x4c\xb0\x91\xea\xe4\x53\x24\x6d\x09"
+ "\xd2\xc8\x38\x18\xe5\x34\xf4\x67\x85\xfa\x5a\xe0\xfa\xbb\x02\xad"
+ "\xb0\x66\x58\x41\x96\x9e\x87\xba\xa3\xf1\x41\x0b\x8b\x6f\x6c\xc4"
+ "\xbd\xcf\x20\xef\x3f\x8a\xe7\xa6\xa7\x9f\x63\xbe\x2b\x3a\x3e\xb7"
+ "\x8c\x11\x58\x4e\xc7\xbd\xd9\x41\x1a\xc3\xee\x76\xab\x2f\xd7\x93"
+ "\x8c\xf7\xf3\xf5\x21\xbe\x86\xeb\x64\xc6\x08\x4f\xbc\x2b\xe4\x5c"
+ "\xc6\x58\xb2\x77\x54\x17\xda\xc8\x14\x0b\x35\xb1\xef\xcc\x18\x93"
+ "\x22\xf9\x61\x23\xbd\x96\x4f\xf8\x3e\x4a\xe3\x55\x21\xf7\x72\x39"
+ "\x8f\x49\x6a\x94\x7c\xc4\x34\x34\xf7\x72\x2d\xb3\xb1\xe7\x5e\x6e"
+ "\x62\x36\xe7\xdc\xcb\xd6\xd5\xc3\xd0\x1f\xdd\x68\xb9\x32\xe0\x0a"
+ "\xd0\xcc\x58\x7e\x25\xa8\xaf\xd6\x73\x6e\xe7\x1f\xad\xba\xdb\x49"
+ "\x30\x7e\xeb\x40\x7f\xf0\x6d\xdc\x0f\x1c\x9e\x71\x00\xfd\xcc\xf1"
+ "\xda\x1d\xf5\x06\xe2\x83\xf6\x61\x38\xf7\xf8\x7d\x85\x04\x6d\x62"
+ "\x03\x68\xc0\xe5\x62\xe6\x7b\x97\x73\xb9\xb4\xba\x85\x1a\xd1\xe7"
+ "\x93\x7f\x93\xfa\x54\x43\x07\x5c\x2e\x16\xeb\x6f\xac\x6a\x81\x77"
+ "\x08\xb8\x9c\x5c\x6d\xbd\x20\xca\x84\x07\x36\x40\x1f\x93\x69\xce"
+ "\xe5\x6c\x1e\xe3\xe0\xc0\x39\x09\x57\x39\x8f\x1e\x38\x29\xf2\xba"
+ "\x95\x8f\xdb\xa7\x1a\x71\xbd\xba\x03\xff\x87\xb5\x3b\x82\xfb\x50"
+ "\x1c\xa8\x91\x64\x64\x93\x58\x07\xef\x31\x91\x03\x1f\x72\xac\x3d"
+ "\x60\x86\x77\xcf\xe6\xd7\x0f\x6c\xc0\x73\xf0\x7e\x30\x1e\x07\xc2"
+ "\xf1\xbd\x3c\x61\x2b\x1b\x8b\x54\xe2\x03\x7d\x2e\x40\x5f\x5f\x94"
+ "\x53\xaa\x2d\x0f\x1b\x79\xde\xd2\x83\xb9\x6c\xaf\x37\x3c\x07\xe8"
+ "\xa3\x46\xdc\xc4\xbd\xe9\xd8\x9e\xdc\xff\x4f\x17\x4b\x7d\xc1\xe7"
+ "\xe1\x35\x78\xd7\x64\xa4\x27\x8c\x15\x8b\x8d\x8c\x74\x6d\x34\xa0"
+ "\xed\xe9\x2a\x8c\x19\xfa\x71\x1d\x2c\xc4\x31\xe1\x63\x76\x90\xed"
+ "\x35\x5e\xeb\xa0\xc3\xc1\x05\xca\xf1\xe0\x65\x21\x00\xb0\x61\x09"
+ "\xfa\xf3\x1c\x2c\x14\xc7\xaf\x85\x3f\xff\xe0\x93\x6c\xbc\xf8\x35"
+ "\x95\xd3\xbd\xb7\x39\xea\xf2\x1c\xb9\x6a\xfc\x36\x8e\xdf\x4a\x38"
+ "\xbf\x1e\x0c\x77\xba\x2f\x7c\xe6\x25\x90\x91\x41\x86\xc4\x9c\xa6"
+ "\x38\xe6\xad\x99\x07\xa3\xe4\xf1\xe6\xed\xb8\x79\xc6\xed\xd2\x33"
+ "\xa0\x0e\x91\xfa\x09\xf4\x11\xd7\xe0\x83\x6b\x64\x9a\x7c\xba\x43"
+ "\xba\x6f\x2b\xdb\x2f\xf6\x69\x34\xee\x73\x75\x8b\x83\xf8\x4d\x0e"
+ "\xa4\x8a\x2a\xdb\xc3\x46\xc6\x8f\xe4\xa0\x0d\x7d\x95\x61\x5c\x0b"
+ "\x38\x0f\x1d\x34\xf1\xb5\xf0\x20\xfb\x5e\x8f\xdf\xbb\x78\x4c\xdb"
+ "\x83\xa0\x3b\x7d\x2a\xc6\x7e\x28\xf3\xe7\x7d\x28\x43\x1e\x20\xae"
+ "\x7a\xdd\xa3\xf1\xb3\xd9\x86\xee\x51\xcb\x0c\xae\x7b\xc7\xfc\xe5"
+ "\xbd\xbb\x65\x13\x9c\xf6\x3e\xcf\xe7\xe3\x5d\x96\x0f\x7a\xea\x87"
+ "\x79\x3c\xf6\x71\x69\x1e\xd0\x2c\xfd\x2a\x19\x86\xb9\x80\xd2\x0c"
+ "\xb4\xb9\xca\x00\xba\x75\x00\x5d\x03\x78\x91\x9d\x76\x95\xf4\x43"
+ "\x5f\x18\xc4\x1b\xf4\xb5\xa5\x03\xe0\x7c\x2e\xcd\x96\xf7\x57\x7e"
+ "\x3e\x1e\x74\xdb\xe2\x5c\xd0\x65\xd3\x2f\x90\x61\xdc\xb7\xa5\xac"
+ "\x52\xb4\x17\xbe\x21\xe4\xd0\x1c\xdc\xbb\x5b\x05\x6f\x45\xd3\x13"
+ "\xde\x10\x72\xa1\xd5\x1c\x5a\x98\xbe\x80\x04\xe1\xfa\x86\x3e\xd4"
+ "\x9c\x67\x3e\x0f\x85\x76\x0b\x31\xae\x9e\x40\x63\x54\xf0\x7c\x93"
+ "\xa0\xf5\x9d\x90\x2b\x10\xe6\xbb\x0f\x7c\xa6\xae\x27\x87\x6e\x83"
+ "\xe7\x9b\x30\x47\x29\xda\x81\xaa\xad\x56\x8c\xfd\x61\x82\x6b\x03"
+ "\xe1\xda\x93\x70\x14\x30\xc6\x1e\xc6\xec\x87\xf6\x43\xb0\x7d\x78"
+ "\x96\x89\xf7\x9d\xc5\xbe\x31\x41\xbd\x95\x58\x47\x8a\xdd\x27\xa4"
+ "\xc7\xf8\xe0\x75\xdc\x0b\x6e\xc7\x1c\x18\x40\x79\x7e\x4f\xad\xe3"
+ "\x1e\x51\x7e\x86\xb9\xfc\xf9\x60\xba\xbe\xaf\x1e\xea\x96\xa2\xaf"
+ "\x30\x97\x65\x3f\xd7\x8a\x73\x1d\xe4\xe3\xcf\x07\x89\xff\x07\x38"
+ "\xea\xa6\xc7\x90\xb4\x36\x12\xc2\xbe\x77\xbf\xe2\x03\xd8\xfb\x59"
+ "\x02\xe6\xd3\x70\x6a\xf3\x21\x6c\x2f\x07\x63\x02\xce\x21\x01\x80"
+ "\xcb\xfd\xa1\xdf\x98\x0b\xe7\x2c\xda\xd0\xc5\xb1\x19\x0f\x74\x2a"
+ "\x59\xcb\xe3\x3e\x7e\x98\x0b\xbc\x9f\xb6\x12\xe4\x81\x95\x24\x60"
+ "\xa5\x9d\x84\xe2\x7b\x02\xdd\xd0\x3e\x16\x8c\xba\x1b\x8e\x8d\x48"
+ "\x43\xa0\x39\xd1\xac\x4c\xa0\x0d\x2b\x5b\x68\x53\x65\x42\x2d\x81"
+ "\x75\x26\xa8\xca\x50\x83\xf1\xe7\xcf\xe2\xbb\xa2\xed\x0f\xc6\x14"
+ "\x28\x0b\xcf\x58\xc7\xf3\x28\x33\x3b\x81\xba\x2c\x58\xda\x3b\xb6"
+ "\x95\xed\x2f\xfb\xcc\x91\xff\x0c\xfa\x52\x26\xf6\xa5\x5c\xc0\xff"
+ "\x93\xd8\x1e\xd4\x7e\xa8\xff\xa0\x4d\x63\xe6\xf2\x22\xc7\xde\x19"
+ "\x6e\x1b\xf8\xac\xdc\x29\xf6\x1a\xbb\x17\x6d\x04\x78\xef\x54\x1b"
+ "\xbd\xba\x56\xac\x8b\xf7\x4e\x5d\x3e\x93\xe2\xbd\x70\x8f\xcd\x71"
+ "\x8f\x62\x1f\xd7\x21\x2e\x57\xc0\xd8\xe2\xff\x66\x18\x4b\xd1\xb7"
+ "\x4d\xc7\xfd\x12\x3e\x1f\x2d\xf9\x02\xc0\xfc\x69\x41\x7e\x72\x1f"
+ "\x33\xfe\xf3\x58\x65\x1c\xac\xf2\x70\x8c\xd1\x05\xe7\x13\xa5\x78"
+ "\x55\xf0\x7f\x06\xb4\xc1\xfd\x2b\x9d\xe2\xd0\xe5\x39\xc5\xb4\x4c"
+ "\x37\xd3\xef\x90\x4f\x00\x57\x7c\x80\x96\x15\x74\x9d\xef\x04\xbe"
+ "\x17\xae\xfc\x36\xec\x67\x3d\xf9\x1c\x31\x2e\x90\xc7\xcb\xf8\xfc"
+ "\x34\xc7\x0f\x73\xc8\x54\xbb\x2d\xd0\x04\xcf\xc4\x7d\x5d\x72\xf9"
+ "\xf3\xe3\x80\x27\x5a\xb8\x77\x00\x8f\xf9\xf8\x79\x85\xb2\x3e\xbb"
+ "\x9e\xe1\x52\x8e\x72\x29\xeb\x2c\x30\x6f\x3c\xf9\x3c\xe4\x0e\x63"
+ "\xf6\xc3\xf1\x03\x57\x11\x43\xfa\x79\xe2\x03\xbc\x72\x0e\xfb\x56"
+ "\xd5\xd4\x82\xef\x14\x48\x33\x23\x08\xda\x41\x99\x6c\x09\x6b\x7a"
+ "\xfd\x48\xa8\x73\x9e\x0c\x41\x7f\x7c\xcc\x87\x03\xf5\x9b\x79\xac"
+ "\xfa\xc3\x1f\xc5\x2e\xeb\x47\x84\x97\x63\xfa\x53\xf5\x33\xf8\x9d"
+ "\xd7\x7f\x57\xbb\xc9\x17\xbf\x3f\xa6\x6d\x06\x9e\xb4\x93\x21\xc0"
+ "\x63\x0d\x98\x7b\x10\xee\x69\xf9\x4b\x7b\x93\x6f\xb5\xed\x14\x31"
+ "\xcc\x23\xea\x66\x72\xb8\x58\x93\x4a\x34\x6b\x1b\x89\x16\xe8\x6a"
+ "\x3b\x68\x8b\x24\x52\xbc\x8b\xc2\x20\xbe\x57\xbf\x10\xf0\x75\x69"
+ "\x08\xe6\x67\x3c\xac\x01\xdd\x2b\x46\xd2\xb1\x73\x78\xce\x1b\x0d"
+ "\x3c\x7f\xb1\x5a\x8c\xed\xc1\xc7\xf6\xf0\x23\x7c\x2f\x5d\xf0\xcb"
+ "\x70\x4f\xa4\x2c\x7f\x1f\x2e\x13\xbf\x55\x24\x70\xec\x3b\x5c\x76"
+ "\x10\xb4\xe0\x35\xdc\x77\x24\x18\xea\xce\x76\xf8\x8e\x30\xbb\xd5"
+ "\xe1\x32\xa0\x61\x02\x93\xcd\xb5\xbe\x09\x33\xed\xfe\xe2\x1c\x84"
+ "\xf3\xb0\xb6\xe0\xbd\x70\x5f\xa0\x85\xd9\x98\x0e\x17\xc9\xbc\x76"
+ "\x18\x73\xee\xa9\xe0\x9d\x02\x80\xae\x75\xf8\x5e\x38\x26\x50\x0f"
+ "\xfa\x5f\x6e\x3a\xb8\xc3\x43\xec\xdf\x80\x1f\xf5\x36\x66\x03\x89"
+ "\xaf\x05\x7e\xba\x00\x34\xb8\x05\xe3\x7b\x55\xc3\x73\x2a\xb7\xb6"
+ "\x93\xca\x90\x2b\xa4\x0a\xfe\x47\x1f\x71\xe3\xbc\xef\x48\x83\xce"
+ "\xfd\x7a\x03\x6b\x56\x31\xf4\xb9\x14\xdb\x42\x2c\x40\xbf\xba\xea"
+ "\x54\x58\x7f\xcc\xd0\x16\x68\x20\xd8\x46\xa5\xd0\x44\x2a\x93\x41"
+ "\xcf\xca\x4f\x37\x55\x6d\x3d\x45\xaa\x42\xbe\x64\xcf\x41\x99\xd0"
+ "\xb8\xe4\x4a\x57\x6d\x97\x43\xdb\xb5\x62\xdb\x2d\xd0\x76\xb0\xe7"
+ "\xb6\xe3\x89\x97\x6d\x7b\xd1\xef\x38\xb3\x37\x6d\x03\x8e\x87\x63"
+ "\x4e\x23\xdc\x6f\x97\x36\x94\x0c\xb0\x5f\xc3\xd8\xae\x77\x50\xee"
+ "\xa7\x7c\x74\x33\xdb\x93\x97\xc9\xfc\xc0\xf5\x6c\x6f\xde\x45\xc2"
+ "\x7c\x4d\xf9\x7e\xbc\x73\x04\xfd\x54\x5a\x33\x8f\xae\x71\xe0\x90"
+ "\xfc\xfd\x10\x64\xd5\xa3\xc5\xdc\x1f\x95\xea\x39\x5f\x1d\x7d\x11"
+ "\xdb\x72\x6f\xc3\x23\x71\xdc\xaf\xf9\xa8\xc3\xe7\xee\xca\x20\x12"
+ "\x27\xb6\xa5\x73\xb5\xeb\x49\xc9\x87\xe7\x24\x27\x4a\x79\x8c\x13"
+ "\xc5\x2d\xc6\xcf\xcc\x79\x69\xce\xdc\xa4\x39\xb3\x75\xd3\x96\x2d"
+ "\x59\x38\x6a\xd1\x1f\xfe\xa0\x9b\x3c\x67\xe9\xd2\xf8\x97\xe7\xf4"
+ "\x23\xd3\x96\xc4\x2f\x5c\x3a\x17\x6d\x6f\x3a\xdd\x84\xdf\xcc\x4c"
+ "\x58\x94\x38\xea\x5f\x27\x44\xb8\xd8\xde\x70\x3f\x6a\x1d\xca\xe0"
+ "\xb0\x76\x0c\x49\xb3\x93\x41\x18\xab\x29\x70\x39\x35\xae\x00\xfd"
+ "\x0f\xf8\xaf\x19\xd7\x29\x5c\x1b\x50\x37\xc0\x38\x91\x80\xdf\x15"
+ "\x6f\x6e\xa2\x35\x8d\xe4\xcc\x73\x20\x57\xd6\x6e\xe3\x31\x0f\xeb"
+ "\x40\x27\x37\xf3\x6f\x83\x67\xc6\x60\x3c\xc3\x3f\xc1\x39\xf3\x20"
+ "\xdf\x84\xb5\x67\x88\x06\xd6\x35\xd0\x4b\x2a\x2c\x54\xdd\x87\xe6"
+ "\x0c\xa1\x65\xf4\xbb\x10\x22\xc6\x89\x57\x57\x9b\xac\xe8\x67\x01"
+ "\xfa\x52\x3a\x45\x3c\xe5\x73\xab\xe2\x2a\xc7\xb9\xcb\xe5\xdc\xdf"
+ "\xfb\xcc\x60\xd4\x61\x56\xb3\xdc\xa7\x95\x30\x7f\x3e\xa9\x90\x71"
+ "\xfa\x2b\x9d\x28\x3b\xd6\xc2\xb8\xbf\x52\x0f\x65\x1e\x4b\xa6\x32"
+ "\x42\xe9\x43\x53\x0d\xeb\xf2\xa9\x09\xfc\x87\xf7\x9c\x9a\xcd\x7f"
+ "\xf8\xbf\xf3\xef\xb4\x95\xff\x5c\xcf\xff\xd4\x9f\xf4\xfc\x5e\xb7"
+ "\x51\xdb\xcd\xaf\x07\xcf\x67\xef\x7d\x13\xdf\xff\x27\xb5\x61\xea"
+ "\xea\x87\xfc\x06\xbc\x55\xf7\xa7\x33\xc4\x1f\xf8\x73\x43\xee\x2c"
+ "\xe0\xe9\xd3\x24\x24\xd5\x46\x1b\xd2\x5f\x24\xa1\x69\xe7\x09\xe6"
+ "\x9e\x6c\x4a\x4c\xa6\x0d\x69\xd7\x50\x26\xfd\xea\x03\xe0\xdf\xd2"
+ "\xbc\x7a\x12\x90\x5b\x4f\xb4\x55\x89\x98\x97\x1a\xe3\xb9\x41\x4f"
+ "\x5b\xe0\x07\xe5\x8a\x24\x2b\x39\x6a\xbe\x84\x7e\x67\xc6\xaa\x38"
+ "\xc0\x9d\x3a\x42\x90\x7f\x03\xe2\x48\x70\xe1\x10\xba\x97\x66\x1a"
+ "\x62\xa9\xda\x30\x09\xce\x1d\x7f\x5f\x88\xf2\x7d\x3f\xa5\xdc\x57"
+ "\x37\x0b\xd7\xf8\xea\x8f\x44\xde\x0c\xe3\x7b\xbd\xbe\x0a\x43\x1e"
+ "\x84\x79\x72\x9c\xdb\xd5\xbf\xda\xc2\xd7\xf3\xaf\x98\x1e\xc4\x63"
+ "\x35\x7f\xc5\x64\x45\x78\x8f\x52\xcc\xd5\x8b\x6d\xee\x16\x4a\x59"
+ "\xae\xde\xf7\x53\xa2\x7c\x53\xe3\x89\xba\xca\x04\x9a\x09\xe0\x20"
+ "\x7e\x8f\x85\x79\xb7\x13\xe6\x59\xc9\x96\x21\x34\x1f\xfa\x97\xb3"
+ "\x75\x08\xcd\x86\x3e\x15\xb7\x66\xd6\x8c\x34\x91\x23\x21\xe2\x77"
+ "\x17\x23\xcc\x8b\x9d\xb9\x50\x67\xea\x32\x72\x47\x2e\xd4\xcb\x83"
+ "\x7a\x28\x27\xf3\xfe\x7d\x79\x1e\xc6\xe0\x43\x78\x66\x8d\x6e\x06"
+ "\x96\x8f\xb1\x3d\x80\xf8\x6c\x78\x0f\x5d\x3d\x39\x96\x08\x6b\x9b"
+ "\x06\x9f\x21\x3d\x17\xda\x07\xfc\x3b\xc2\xec\xa4\xd8\x2e\x6f\xa7"
+ "\x86\xef\xd7\xc8\xa1\x3b\xd7\xca\xb9\x94\x77\xe6\xa6\xc0\x9a\xde"
+ "\xce\xe2\x9c\x6e\x40\x7b\x0b\xca\x18\x4c\xae\xb0\x93\x40\x6e\x1f"
+ "\x00\xd9\x22\x01\x70\x00\xe4\x09\xe6\xa3\x0e\xb2\x04\xf4\x65\x03"
+ "\xe6\xf4\xc4\xeb\xa0\xb7\x7d\x08\xeb\x72\x09\xca\x01\x33\xae\x3e"
+ "\x85\xdf\x5d\x09\xe6\xe3\x5d\x1a\x4b\xad\x3c\x2f\xd2\x31\xad\x24"
+ "\x0b\x20\x06\xe1\xfa\x0f\xb2\xb0\xa6\x03\x68\x08\x3c\x50\x0e\xb2"
+ "\xc5\xa0\x66\x72\x6c\x92\x38\xf6\xe5\x6c\xcd\x4f\x62\x71\xb9\x7d"
+ "\x38\x46\x1f\x7b\x0e\xde\x2f\x00\x9e\x01\xf2\xe8\x19\x66\x0b\xe7"
+ "\x18\x73\x2c\x41\x5a\xc7\x51\xe7\x35\x41\x1b\x14\xb0\x4c\xbc\x06"
+ "\xef\x5f\x2e\xed\xb9\xaf\x83\x6b\x21\xe2\x98\x55\xc0\x98\x61\x9b"
+ "\x4c\xf7\x07\x99\x2b\x81\x8f\xcd\xb1\x91\x28\x57\x88\xf7\x1a\xa5"
+ "\x76\x51\x2f\x17\x40\xae\xc0\xf1\xc2\x71\x82\x76\x46\x8a\x38\x76"
+ "\x9c\xcb\x2f\x5f\x32\x9f\x09\x1c\x7b\xa0\xf5\x1a\x79\xfc\xbf\xd0"
+ "\x38\x8f\x3f\xdc\xbf\x46\xa4\xe5\x4a\x27\xda\x81\x6e\xf4\xe5\x34"
+ "\xb4\x93\x42\x1f\xf7\x72\x1b\xcf\x17\x0f\x61\x3c\x3c\x8c\xbf\x0d"
+ "\x63\xbc\x37\x07\x63\x3d\x03\x36\xaf\x3e\x03\x98\x3b\x0b\xe5\xa7"
+ "\x2f\x1f\xe2\xf2\xe9\x17\x75\xc8\xc3\x8d\xe4\x0b\x66\x87\x6f\x80"
+ "\x7e\x61\x7b\x50\xde\x05\x47\x90\x63\xbf\x78\xdb\x39\x77\xb6\x9c"
+ "\x37\xfb\x8b\x42\x79\x9f\xc8\x31\x66\x97\xc6\x23\xda\xc0\x58\xfd"
+ "\x8e\x04\xec\x5b\x1d\xce\x4b\xe9\x5d\x31\x87\x36\x9c\x47\xd9\xbf"
+ "\x0e\xe9\x26\x9d\xc7\x38\xd1\x40\xa7\x00\xe8\xd3\x18\xde\xa7\x2f"
+ "\xb5\x3c\xcf\xe0\x17\x19\x58\xc6\x7c\xda\x6b\xf1\x9e\x34\xf9\x1e"
+ "\x9c\x37\xc0\xc3\x81\x70\xcf\x28\x38\x52\xa9\x2e\xcf\xb3\xfd\xc5"
+ "\x87\x7f\x6e\x47\x1b\xd8\x17\x15\x52\x9e\x6d\xcc\xb1\x8d\x98\x91"
+ "\x3b\x43\x31\xf6\x38\x36\x3b\x81\x56\x8c\xef\x0e\xda\x4a\x61\xbc"
+ "\xbf\x04\xf9\x7f\xaf\xb8\x17\xea\x8b\x0f\xc5\xfe\x19\x79\x8c\x9c"
+ "\xa3\x2d\x2c\xa6\x33\xd3\x87\xbe\x2c\x94\x7d\x56\x24\xd9\xf2\x0b"
+ "\x16\x7f\x0b\xda\xaa\x40\xfa\xa3\x9c\x08\xf5\xca\x1c\xbc\xc5\xf6"
+ "\x61\x7f\x39\x01\xe5\x4b\xb1\xff\xc8\x2f\x77\x89\x63\xd7\xe2\x3c"
+ "\xef\x9c\xe7\x79\x6b\xe6\x71\xd0\xff\x0f\x3b\x78\x40\x9a\xd7\x9c"
+ "\x0f\x4e\x30\x3a\x82\xdc\x85\xf1\x10\x6a\xa0\x5d\x23\xca\xe0\x7c"
+ "\x5d\x3d\xa1\x3d\x58\xc7\x7c\x1a\x8e\x43\x19\xe6\xf7\xf1\x96\x2b"
+ "\x41\x7d\x23\xd6\x30\xdc\x38\x0e\xfa\x4f\x04\xa3\x1f\x8e\x8b\x34"
+ "\x5f\xd7\xce\x40\xdd\x2f\x82\xcf\xd9\xe4\x06\x52\x65\x6d\x21\xe2"
+ "\x1e\x0c\x98\xb3\xe7\xf0\xdb\x69\x33\xf0\x90\x3f\xce\x5f\xa0\x2f"
+ "\xce\x7f\xc4\x9c\x9a\x35\x9b\xd8\xbc\x0d\xc0\x79\xdb\x81\x71\x42"
+ "\xe0\x39\x65\x71\x51\xe4\x60\xb2\x91\xcd\x63\x8c\x11\xf3\x26\x8c"
+ "\x1d\xe6\xb4\x86\x67\xd7\x4a\xbe\xe3\xc8\x23\x18\x13\x46\xe4\x13"
+ "\x1d\xce\x65\x71\xec\x34\xad\x99\x27\x88\x34\xf7\x9c\xe8\xcf\xea"
+ "\xb8\xcc\xb7\x40\x3e\xdf\x4e\x44\x48\x63\x6d\x63\xf3\xf8\x8b\x0a"
+ "\x1b\xcc\x63\xe7\x31\xc5\xf1\xc4\x71\x85\xba\xf0\xfe\x47\x12\xa5"
+ "\x31\x75\x1a\xcf\x4a\x91\xe6\x35\xdc\xc6\x74\x82\xc7\xc1\x76\x1a"
+ "\x43\x91\xff\x30\x17\x71\xe9\x6a\x7c\x77\x58\x1b\xf0\xf9\xc8\x23"
+ "\x6f\x8a\x98\x55\x66\x46\x1e\x39\x01\xf3\xff\x77\x05\x32\x76\x7c"
+ "\x51\xc3\x74\x16\xa0\x93\x48\x9f\x36\x16\x53\xc5\x0d\x76\x00\x9f"
+ "\x94\xca\xf8\xf4\x95\xbf\x34\x0e\x12\x4f\x4a\xf3\x1e\xd6\x91\xe9"
+ "\x4a\xfc\xf9\xea\x41\x68\x23\x08\xf1\x4d\x96\xa1\xbe\x9a\xa8\xc4"
+ "\xb7\xaf\x22\x10\xdf\x90\xaf\x0d\x49\x68\x63\xe3\xeb\x95\x89\x54"
+ "\xd7\x2a\x31\xa9\xba\x92\xfb\x06\x70\x99\x0b\x79\xcb\x30\x83\xd7"
+ "\xc7\x35\x0c\xea\x33\x5d\x5c\x5c\xf3\x74\xb8\xc6\xc1\xb9\x32\x71"
+ "\xbc\xea\xa0\x7e\x19\xee\x67\xc5\x18\x16\xfd\xeb\xb8\xae\x07\x38"
+ "\xbd\x17\x63\xb4\x43\xbd\x35\x55\x20\xe7\x77\x64\x71\xec\x96\xb0"
+ "\x82\xbe\x14\xd3\xff\x95\x26\xd2\xd7\xf0\xaf\xf4\xbb\x46\xf2\xf5"
+ "\x1c\x98\x33\x56\x8c\x13\x0a\x6d\xeb\x1a\xc9\xa9\x51\xf0\xdc\x60"
+ "\xf1\x18\x02\xc7\xc1\x70\x1c\xda\x48\x4e\xda\xe1\x38\x1c\x8e\xe7"
+ "\xa0\xbe\x20\xd6\x8f\x80\x72\x25\x9c\xff\x8d\x78\x84\x3e\x7e\x1d"
+ "\x0b\xc7\x68\x51\x76\xc4\xf3\xdb\xb1\x0c\xc7\x75\x22\xcd\x2b\x38"
+ "\xcd\xbf\x7e\x0d\xda\x49\x86\xfe\xd7\x56\xd7\xb1\xb6\x0c\x50\xe7"
+ "\x69\x6c\x1b\xf7\x97\xc3\xff\xbe\x44\x96\x41\xa1\x9d\xda\xfb\xe1"
+ "\x38\x1a\xee\xbb\x0a\xc7\x44\x38\x1e\x16\xc7\xa0\x06\xb1\x61\x76"
+ "\x32\x8e\xed\x89\x06\x1d\x97\x77\xa3\xa5\x39\x8f\xeb\xb0\x8c\x1d"
+ "\xc7\x46\xce\x8e\xe5\xf4\x86\xba\x8c\x0f\xa0\xee\x23\x58\x17\x8e"
+ "\x8f\x89\xc7\x28\xf1\xf8\xb8\x78\xfc\x37\xf1\x38\x41\x3c\x02\x9d"
+ "\xbf\xae\x10\x65\x0c\x18\x97\xaf\x59\xbe\x03\x98\xdb\xb3\xf9\x33"
+ "\x6a\x5b\x50\x47\x06\x1c\x1f\x03\xed\xfb\xb4\x66\xd6\xc6\x49\xf6"
+ "\x51\xb4\xf9\x74\x64\x56\xf4\x79\x93\x7d\xd7\xae\x4d\x76\xc2\xb6"
+ "\xc8\x00\x55\x14\x01\x19\x68\x70\xa1\x1a\xd6\x7f\xde\x4e\x8d\x5a"
+ "\xfc\x2e\x2c\xe6\x7f\xf0\xc1\x98\x88\x4c\x1f\x1a\xb4\x7c\x22\xce"
+ "\x55\x66\x3b\xc6\xf8\x7d\x83\x7c\xc7\xc3\x6f\x22\xe8\x06\x93\x24"
+ "\xfc\x46\xbd\x87\xeb\xea\x18\xff\xb7\xb6\x41\xd6\xd5\x6b\x99\xcd"
+ "\xdb\x27\xe4\xd6\xc5\x70\xde\xe6\x74\x3e\x1a\xfb\x0c\xe3\x59\x0b"
+ "\xef\x33\xba\x9e\x9c\x1c\x09\xc7\x5f\x37\xf0\x77\x8e\x90\xde\x59"
+ "\xa4\x87\x41\x1a\xdf\x06\xf2\xf5\x71\xc0\xc2\x25\xc8\xc3\xf5\x0e"
+ "\x9c\xfd\x9a\xd9\x75\x45\x1e\x01\x5a\x7e\x9d\x8b\x34\x75\x9a\x83"
+ "\xce\x18\x14\xdc\x9a\x79\x72\x8d\x12\x53\x8e\xad\x41\x4c\x41\xde"
+ "\x00\xfc\x46\x5a\xcf\x76\x99\x7f\x68\xeb\x0f\xe2\xf3\xee\xa4\x51"
+ "\x79\xef\x57\x11\x36\x3e\xef\x6a\x81\xcf\x80\x3f\xbf\x9e\x80\xf4"
+ "\x31\x91\x93\x45\xe2\x9c\xae\x85\x39\x3d\x06\xce\x87\xf3\xbe\xf2"
+ "\xf3\xe2\xb3\x80\xcf\xbe\xc6\xf7\x1e\x2e\x9d\x17\xdf\x17\xdb\x09"
+ "\x45\x7a\x4b\xe7\xc5\xf6\x91\x1f\x91\x87\x42\xa4\xf3\xe2\x3b\x81"
+ "\x1c\x75\x2a\x46\xc2\x93\x1c\xc6\x6f\xc7\x4d\xd2\x7d\x48\x37\x8c"
+ "\x81\xc6\x6d\xfc\xa7\x26\xc0\x5c\x2d\xc2\xf5\x61\xf5\x0c\x12\xf0"
+ "\x4a\x01\x19\xc0\xe7\xe5\xa9\x09\x4a\x8c\x3c\x7d\x17\xcd\x0c\xb4"
+ "\x51\xad\xef\xe8\x4a\xdb\x68\x49\x5e\x2d\x84\xe7\x18\xa5\x9c\xee"
+ "\x72\x2e\x89\x53\x57\x2b\x8b\x1c\xe3\x8b\x7d\x69\x90\xfa\xe2\xb4"
+ "\x3e\x33\x1a\x60\xdf\xb0\xad\xd5\x20\xaf\x5b\x00\x17\x38\x6e\x7f"
+ "\x13\x6c\x22\xfd\xf7\x4a\x98\x8a\xeb\x56\xa0\x8a\x18\xf2\x92\xd8"
+ "\xf7\xd1\x40\x5c\x1b\xd1\xc7\x47\x40\x3b\x56\xb2\x9d\x54\x19\x40"
+ "\x97\x4f\x3e\x47\x66\x2e\xef\x87\x31\x71\x62\xa0\xaf\x7d\xa1\x6f"
+ "\x3b\xec\x68\xfb\x5f\x88\x7a\x6a\xdd\x3e\x7b\x12\xb5\x8a\x63\x06"
+ "\xf3\xa8\x6e\xbb\x38\xb6\x88\x5f\x3b\x10\xd3\x57\xa7\xf1\xbc\x50"
+ "\x68\xcb\xc1\xf9\xf1\x67\x5c\xc7\x42\xa8\xb5\xac\x10\xe7\xca\x37"
+ "\x3b\x24\x99\x14\xfa\x5b\xc4\x65\xc2\x13\x2c\xd7\x0c\xcc\x9d\xd1"
+ "\xdc\x16\x58\x77\x3f\x7f\xf7\xba\x10\xf6\x9d\x9b\xc7\x41\xc5\xb2"
+ "\xc6\x27\x64\xc8\xd7\xdc\x2f\xab\x62\x04\xf7\x29\xf9\xc6\xe2\xf0"
+ "\x29\x91\x65\xc5\x50\x1e\x1b\xac\xce\x29\xfe\xe9\x37\x26\xbc\x0f"
+ "\xee\x6f\x86\xf3\x7a\xf9\x3c\x6e\x2b\x60\xf6\xae\xc8\x81\xab\xa2"
+ "\xd0\xb7\x6c\x30\xc6\x53\x17\x9f\x97\xcd\x9e\x8f\x36\x0f\x9c\x9b"
+ "\xe2\xfc\xc5\x71\xc6\x35\x9b\xcd\x61\x98\xbf\x38\x8f\x3b\xd6\xf9"
+ "\x8e\x87\x1f\x9f\xb7\x7c\x6d\x0e\x65\xf3\x96\xcd\xd9\xba\x02\xf9"
+ "\x79\x75\xd1\xcc\xee\x85\xf4\x5c\x11\x12\x00\xd7\x3e\x34\x91\xa3"
+ "\xe1\x62\x1f\x59\x1c\x1a\x8c\xfb\x62\xbb\x46\xcd\xf8\x6d\x1b\xbf"
+ "\x75\xe2\xde\xb9\x40\xe0\x6e\x8c\xd5\x22\x7d\xab\x9e\xdc\x92\x4e"
+ "\xed\xf8\xdd\xe9\x1a\xb5\xe4\x3b\xf2\x39\x9c\x26\x72\xdc\xa5\x6f"
+ "\xe2\xc4\xf7\x1a\x0d\xcf\x2a\xe4\xbe\x60\xdf\x3c\xcd\x65\xaa\x6f"
+ "\xa2\x91\x4f\xab\x81\xf7\xe0\x58\xc0\x73\x70\x9f\x1e\x2f\xf1\x1e"
+ "\xcc\xcb\xd9\x40\xf7\xca\x0d\x43\x68\x01\xd0\xb4\x00\xe6\xd2\x7c"
+ "\x28\xef\x81\xe3\x6c\x7e\x54\x69\xf1\x28\xce\x91\x02\xb8\x37\x19"
+ "\x78\x2c\x4e\x9a\x1f\x96\x41\xf1\xd1\xc8\x67\x79\x30\x0e\xc8\x6b"
+ "\xec\x3b\x32\xf4\x1b\xf9\x0b\xf9\x0c\x79\x2c\x70\xd5\x53\x8c\xcf"
+ "\x58\x5c\x08\x38\x8f\xfd\x45\x3e\x83\xb6\xca\xa4\x58\xce\x26\x72"
+ "\x9a\xed\x6f\x84\x73\xb5\x92\x8f\x2e\x7e\x4b\x4a\x0c\x23\x83\xa1"
+ "\x5d\x5d\x99\x8e\xc5\x4b\xfd\xb6\xda\xf6\x38\xc1\xba\xf8\x1d\x8e"
+ "\xe3\xe4\xad\x65\xad\x99\x67\x02\xe4\x31\x3f\xc6\xf6\x96\x1c\x8c"
+ "\x65\xb6\xc8\x5b\xe0\x9a\xde\x59\xcf\x30\x91\x0a\x8c\x77\x9c\x80"
+ "\xbe\x7d\x77\x06\x13\x1d\xf0\x2d\xe0\xd8\x99\x49\x92\x5c\x7b\x5f"
+ "\x30\x7e\xcf\xaf\x28\x82\xfe\xa1\x0e\x5d\x03\xff\xe7\x80\x2e\xe9"
+ "\x36\x57\x29\xf0\xd8\x68\xb4\xf5\x88\x39\x98\xea\xd0\x8e\x85\x39"
+ "\x2b\x1a\xc9\xd9\xca\x4a\x8c\xd1\xb2\xa8\x73\x2c\xef\xb4\x64\x7a"
+ "\x15\xe3\x79\xeb\x96\x90\x5b\xea\xc9\x59\xcc\xc9\x52\x9b\x7e\x09"
+ "\x6d\x34\x67\x8e\x2b\x6d\x34\xdf\x8e\x14\x7f\x91\xf0\x2b\x94\x7f"
+ "\xa6\x70\xf1\xff\xe2\xae\x7f\xa6\x09\xbc\xae\x29\x1a\x7e\xb1\x7c"
+ "\xac\x42\x60\x9e\x7c\xeb\xb0\xff\x22\x5f\xe2\xdc\x46\x3f\x0e\xb4"
+ "\x39\xa9\x6c\x04\x63\xc2\x00\x9d\xa0\xdf\xab\xef\x7e\xc6\x98\x82"
+ "\x7c\xf4\xed\x5c\xa6\x3b\xa8\xbd\xdd\xbb\xfa\x2d\xa3\x27\x8f\xf9"
+ "\xfa\x6d\x38\x3c\x3b\x78\xed\x45\xa2\x31\x2c\x21\xb7\xa1\xfd\x3b"
+ "\xd0\x4e\x8d\xa8\xe3\x8a\x71\x23\x6b\x9a\x89\x69\x54\xe2\x4a\xa2"
+ "\x86\xeb\x77\xc0\xff\xa1\x92\x9c\x04\xf7\x68\x7d\xac\x24\x18\xe5"
+ "\xa3\xc7\x56\x92\x3b\xa0\xff\x56\x89\x56\x28\x43\xa0\x1d\x4e\xb4"
+ "\x25\x60\x5f\x1f\xc4\xfb\x30\x17\x81\x89\x8d\x1b\xc3\x61\x6c\x03"
+ "\xf8\xe3\xdb\x06\x1f\x0b\xd1\xf2\xb5\xc7\x04\xfc\x5f\x21\xca\x8c"
+ "\x26\xcc\xc5\x7d\xdc\xa9\x9f\x4f\x38\xfd\x9f\x85\xf7\x07\x5a\x50"
+ "\x3e\xf3\x34\x3e\xa6\xd7\xa4\xf1\x41\x7f\xd5\x40\xd0\x13\x18\xbd"
+ "\x6d\xb4\x05\xfa\x56\x61\x48\x21\xfe\xcd\xe4\xec\xf2\x6d\x9b\xd8"
+ "\xfe\xc7\x72\x6e\x9f\x3f\xbb\x40\xd2\xc3\x79\xbf\xcf\x3e\x18\xb8"
+ "\xca\x87\xa0\x5d\x1d\x63\xda\x31\x5f\xbf\x1f\x43\x98\x2d\xbd\xda"
+ "\x36\x9e\x18\xd3\xc6\x61\x1d\x49\xae\xaa\xbb\x92\x1e\x42\x0e\x86"
+ "\x8c\x87\x79\x7c\x56\x03\x73\xa5\xce\x7b\x9f\xca\xb3\x1a\x71\x7c"
+ "\x2b\xb8\x2f\x82\xe9\x04\xae\x25\xa8\xfb\xc3\x3a\x52\x86\x6b\x34"
+ "\xb4\x1d\x27\xcd\x1b\x58\x37\x60\x9e\x9a\x78\x2e\x9b\x1c\xfc\xfe"
+ "\x6b\xaa\xc1\xd8\x1c\x4c\x6f\xe0\xf5\x03\xb8\xcd\xff\xec\x06\x87"
+ "\x2c\x0d\xf5\xf0\x3e\xee\xa3\x66\x2a\x9e\x69\x57\xc1\x98\x9a\x8a"
+ "\xf1\xdd\x44\x5e\x84\xf5\xea\x6c\x99\x3c\x6f\x4d\x8c\xef\x0f\xb6"
+ "\x38\xcf\xcb\xb3\x0d\xb2\xbe\x79\xa6\x60\xd4\x06\xa2\x73\x37\x0f"
+ "\x0d\x03\x71\xad\xaa\x9f\xbe\x76\x2d\x2d\xca\x57\x0b\x8f\xae\xce"
+ "\x23\x01\xaa\x1c\x18\x36\x9c\x67\x49\x71\x83\x1b\x49\xfd\x9c\xc0"
+ "\x80\x5b\xa3\x1f\x4b\xec\x43\xd3\x42\x88\x3a\xf7\x72\x1f\xff\x30"
+ "\xeb\xad\x45\xd4\xe7\xee\x67\x26\x27\x5a\x89\x6e\x5e\x3e\xf9\x7e"
+ "\x3e\xf1\x79\xcc\x0e\xcf\x0e\x20\x06\x13\x69\x30\xe0\x97\xe7\x83"
+ "\x01\x28\x7f\x34\x18\xb0\xcd\xd4\x42\xe2\x9f\xda\x40\x9b\x72\xfe"
+ "\xe0\xeb\x0f\xeb\x81\xf6\x4d\xe0\xb1\xfe\x01\xb7\x16\x75\x40\x1b"
+ "\x07\xe2\xd8\x7d\x25\x5d\xf4\xed\x92\xfb\xbe\x19\x86\x34\x92\xef"
+ "\x54\xde\xf5\xad\x51\x2b\xf7\xad\x51\xfb\xd3\xfb\xf6\x5d\xae\x53"
+ "\xdf\xb4\x72\xdf\x12\xb0\x6f\x5b\xbc\xeb\xdb\xf7\x25\x72\xdf\xbe"
+ "\x2f\xe9\x61\xdf\x76\x7a\xee\x5b\xc3\xaf\xdc\xf7\x2d\xf9\xd6\x46"
+ "\xd2\xf0\xa0\x77\x7d\x3b\x1f\x2d\xf7\xed\x7c\xf4\x4f\xe9\x1b\xea"
+ "\xf2\x69\xa1\xf4\x1c\xcb\x19\xb0\x84\xc7\xe4\x6d\x24\xe7\x36\xa7"
+ "\x15\xb2\x72\x10\xfc\x3f\x5d\x9c\xdf\xe6\x74\x0b\xfd\x8e\xcb\x39"
+ "\x0d\x07\xee\x35\xa0\xbf\x6b\x43\x29\xf0\xb2\x81\xf3\xf4\x39\xe6"
+ "\xdf\x90\x6e\xa6\xa2\xbf\x69\xc3\x59\xcc\x51\x4e\xf3\xfb\xd6\xf2"
+ "\xf2\xb9\x91\x57\x82\x7c\x0d\xe8\x0b\x22\xc0\x7c\xa6\x41\xbe\xa9"
+ "\x98\xa3\xf5\xfd\x25\x66\x35\xcd\xc4\x98\x6e\x18\x87\x51\x43\xe8"
+ "\x7a\xdf\x9c\xf7\x97\x58\x59\x7e\xf8\xd5\x6c\x1f\xf6\xb9\x50\x69"
+ "\xef\xa1\xf4\x0c\xf3\xa0\xbe\xb5\x70\x7e\xb4\x94\xeb\x97\xaa\x51"
+ "\x9e\xf1\x4d\xc4\xf6\xe1\xfc\x24\x29\xff\x2e\xf0\xbb\x49\xc4\x06"
+ "\x4b\xa0\xb5\x2b\xdc\x3b\xb7\x4a\xc2\xbd\xc7\x12\x49\x20\xe6\x1e"
+ "\x5d\x9b\xd6\x07\xbf\x39\x9a\xe1\x99\x5a\x1c\xf7\xa9\x96\x3e\x34"
+ "\x30\x95\xf8\xe0\x9e\x4b\xf4\xd1\xab\x0e\x31\x93\x91\xa9\xc4\x77"
+ "\x6a\x32\xb4\x69\x25\x71\x81\xc9\xd0\x1e\x8c\x35\xd7\x0d\xce\x31"
+ "\x1b\xdf\x06\x68\x0f\xbf\x7f\xfb\x24\x92\x80\xc7\x42\xd2\xe9\xea"
+ "\xcd\x44\x83\xfb\x33\x71\x9f\x25\xdf\x63\xe9\xe7\x0f\xfd\xb5\x49"
+ "\xef\xd7\x03\xfa\x0c\xe4\xf4\xf9\xfe\x41\x99\x3e\x8d\x57\x3b\xd3"
+ "\xa7\x31\x9e\xd3\xa7\x31\x46\xa6\xcf\xf7\x85\x4a\xfa\x34\xae\x52"
+ "\xd2\xa7\xb1\xac\x77\xf4\x69\xdc\x2b\xd3\x87\x3f\x83\xd3\xa7\xf1"
+ "\xb8\x7b\xfa\x34\xb6\xc8\xf4\x69\xcc\xe8\x19\x7d\xbe\x0f\xf3\x4c"
+ "\x9f\xc6\x92\x2e\xe8\xe3\xe7\x9e\x3e\xdf\x2f\xee\x39\x7d\xbe\x2f"
+ "\xf4\x82\x3e\x03\x38\x7d\x9a\x4e\xca\xf4\x69\xda\xd8\x99\x3e\x4d"
+ "\x2a\x4e\x9f\xef\xad\x32\x7d\xce\x8f\x57\xd2\xa7\x29\x4c\x49\x9f"
+ "\xa6\xd9\xbd\xa3\x4f\x53\xac\x4c\x1f\xfe\x0c\x4e\x9f\xa6\x44\xf7"
+ "\xf4\x69\xca\x91\xe9\xd3\xa4\xeb\x19\x7d\x9a\x0e\x78\xa6\x4f\x53"
+ "\xb4\xf7\xf4\x39\x3f\xc8\x85\x3e\x5a\xcf\xf4\x39\x3f\xde\x0b\xfa"
+ "\x04\x72\xfa\x34\x2f\x97\xe9\xd3\x3c\xa6\x33\x7d\xce\x6f\xe7\xf4"
+ "\x39\x5f\x20\xd3\xa7\xb9\x4e\x49\x9f\xf3\x07\x94\xf4\x69\xd6\xf4"
+ "\x8e\x3e\xe7\x6d\x32\x7d\xf8\x33\x38\x7d\x9a\x83\xdd\xd3\xa7\x39"
+ "\x5c\xa6\xcf\x79\x63\xcf\xe8\xd3\x1c\xef\x99\x3e\xe7\xcd\x5d\xd0"
+ "\xa7\x8f\x7b\xfa\x34\x7f\xd0\x73\xfa\x34\xd7\x75\x45\x1f\xef\x64"
+ "\xbd\x66\x96\xab\xe6\xa7\xb7\xf3\x43\xa4\xa7\x76\x70\xec\xd0\xff"
+ "\x50\xc8\xfc\x21\x72\xab\xe0\xe7\xcf\xf7\x68\x34\x9b\x75\x29\xe4"
+ "\xe1\x7a\xf2\xc3\xab\x5b\x05\x5f\x7f\x9a\xf9\xce\x87\x42\xe6\x7b"
+ "\xb1\x74\x95\x9f\x46\x58\xd5\x47\x83\x7b\xe6\xdd\xb5\xc5\xfd\x61"
+ "\x7f\x38\xe7\x33\x94\xdc\x8e\xfb\xe8\x56\x83\xbc\x8c\xff\xb7\x66"
+ "\xfe\x00\xe3\xbe\xb7\xb0\xab\xfd\x5b\xe8\xeb\x74\x70\x0d\xea\xb7"
+ "\x2d\xa1\x8e\x78\x25\x99\x34\x19\xe3\xbe\x19\x46\xe0\x3e\x8b\x96"
+ "\x09\x18\xcf\x1d\xf4\xd5\x86\xa8\x11\xf4\x5b\xd4\x3d\x1a\xc9\x85"
+ "\x47\x68\x2e\x8b\x15\x6d\x01\x59\xfd\x16\xa8\x93\xe3\xf0\xcf\xa3"
+ "\x31\x6f\x88\x36\xc2\x7c\x5e\xf7\xe2\x07\x50\x37\x1f\x73\xcd\x2e"
+ "\x4d\xc3\x1c\xaa\x17\x37\x83\xec\xfb\x4f\xf8\x0c\x8c\x69\xb5\x0d"
+ "\x8e\xe8\x27\xc3\x7d\x33\x5b\x78\xec\x9e\xd5\xc3\xdf\xe0\xbe\x70"
+ "\x17\x57\x49\x7c\x07\xcf\xe9\x07\xe5\xb9\xa2\x3c\x8f\xf5\xfb\x43"
+ "\xf9\x69\xa7\xeb\x01\x50\x46\x3b\xe4\x20\xf1\xfa\x00\x28\x0f\x45"
+ "\x39\x9b\xc5\x5f\xc9\xcb\x10\x7d\x88\x2f\xd8\xe0\x9c\x56\xac\x33"
+ "\xa8\x99\x5c\x38\x8b\xb2\xbb\xd8\x46\x10\x94\x0f\xa1\x0e\x2c\x5e"
+ "\x0f\x86\xf2\x3b\xf8\xed\x40\xbc\x3e\x18\xca\xb9\x50\xfe\x67\xbe"
+ "\xe7\xa5\x43\x9c\xa3\x17\x62\x7a\xb7\x97\xff\x02\x8b\xbd\x88\x34"
+ "\xe0\xba\xc0\x05\x27\xff\x9f\x0b\x51\x2e\xd7\xf6\x3a\x5d\x8b\x90"
+ "\xae\x71\x1f\xb5\x0b\xb5\x4e\xd7\x74\x2e\xd7\x2c\x4e\xd7\xb4\xca"
+ "\x36\x2f\x6a\x9d\xae\x11\xe5\x7d\x17\xc3\xe5\x6b\x2d\x2d\x2e\xd7"
+ "\x26\x3a\x5d\xab\x13\xaf\xf9\xc0\xf9\x38\xf9\x1b\x5e\x4b\x85\x78"
+ "\x5e\x0d\xe7\x93\x9d\xce\xef\x15\xcf\xe3\xf3\xf3\x4d\xa4\x50\xd4"
+ "\x55\x38\xed\xc5\xf6\x8b\x9d\xda\xcf\xe1\x36\x8e\x8b\x7b\x1d\xbe"
+ "\x73\x41\xbe\xe5\x42\x47\xcc\x1b\x70\x2d\x11\xf9\xca\x99\xb7\x17"
+ "\x26\xe9\x66\x2d\x7b\x59\xb7\x64\x4e\x22\xba\xaf\x2c\x98\x9b\xa8"
+ "\x5b\xb0\x68\xf6\x1c\x45\x2c\xfd\x60\x8c\x05\x89\x79\xf3\x30\xa6"
+ "\x0e\xcb\x51\xb1\x89\x36\x39\xf2\xba\x00\xae\xb6\x66\xfe\xa8\x37"
+ "\x91\x27\x22\xf1\x59\x1b\x78\xcc\xf9\x72\x8c\xc9\xc3\xe3\xef\x90"
+ "\xa7\xea\xc9\x8f\xa3\xc4\xf8\x3b\x46\xa8\x3b\xcd\x73\xfc\x9d\x4b"
+ "\x11\x2c\xee\x24\xd4\xe3\xf1\x77\x2e\x8d\x86\x79\xfe\x18\xed\xc7"
+ "\xf3\xb4\xf0\xfc\x75\x3f\x4a\xb2\x89\x79\x66\x1b\x8b\xdd\x98\xc1"
+ "\x6d\x19\x2e\x71\x74\x73\x68\x19\xde\x27\x7e\x2f\x2d\x73\xba\xdf"
+ "\xc8\xed\x58\xd2\xfa\x20\x3e\x33\x87\xe9\xcd\xfd\xea\xa1\xcc\xec"
+ "\xf7\xec\x9a\x99\xdb\xf2\x72\x69\x05\xbe\x13\xbe\xb7\xf2\xdd\xd4"
+ "\xbf\xaf\x27\xe6\xbe\xf2\xbb\x99\x23\x9c\x62\xf4\x89\xef\x60\x8e"
+ "\xe1\x73\xb4\xd3\xbb\x32\xff\x44\x1a\x40\x2b\xf0\xd9\x88\x67\xac"
+ "\xaf\x03\xa0\x9c\x4b\xcb\xa5\xfe\x38\xf5\x0f\xed\xb7\x1a\xe8\xdf"
+ "\x18\x36\x26\x40\x53\x0a\x34\x15\xfb\x79\x95\x66\x5e\xac\xe5\xf9"
+ "\x2a\x60\x3d\xc1\xbc\x3b\x6c\xad\x32\x1b\x25\x5b\x26\xae\x51\xdc"
+ "\x86\x69\x96\xe5\x3f\x8c\x9d\xb6\x4e\x5a\xbf\xcc\x4e\xf2\x1f\x7f"
+ "\x66\x6b\xe6\x25\xe2\xcc\x43\xf2\xf3\x2e\x8d\xc2\xe7\x99\x88\xb9"
+ "\x98\xef\x07\x60\x63\x02\xf3\xc6\x3c\x1f\x7d\x31\xf1\x5e\xec\xa3"
+ "\xa7\x5c\x8b\x9e\x62\x5b\xca\xe3\x78\x29\x59\x1a\xc7\x0d\x2c\x87"
+ "\xc9\xa5\x6c\xc9\x5e\x27\xe6\x39\x31\x6e\x70\xe4\x1e\xbf\xf4\x21"
+ "\xcb\xdf\x97\xbf\xb2\xf4\xbe\x00\x12\x27\x8e\xed\x3e\xc4\x78\x9c"
+ "\x33\x1c\xeb\x2f\x87\x8a\x34\x2f\x11\xfb\x7f\x0e\xcf\xcb\xfe\xf7"
+ "\x97\xc7\x4b\xf5\x24\x5c\xe6\xdf\xab\x2e\x0f\x66\xf5\x78\x3e\xe8"
+ "\x52\x4e\xf3\x7f\xd6\xd6\x93\xcb\x7a\xb1\xbe\x23\x77\xaf\x89\x5c"
+ "\x9e\x40\xd7\xf5\x2d\x6d\xcd\xbc\x0c\xfa\xcf\x45\x33\x1f\x47\xfe"
+ "\x5c\x38\xea\xb1\x2f\x38\x46\xb8\x97\x9c\xae\x5b\x59\x0a\xf4\x71"
+ "\xab\x2f\x8b\x7e\xdd\x77\x34\x93\x2b\x5c\x86\x50\x53\x2b\xda\x58"
+ "\xf9\xbb\x5e\x39\xe0\xe4\xfb\x1c\x20\xd5\xe1\xd8\xcd\xae\x31\x9f"
+ "\x72\x43\x12\xda\x83\xc4\x6b\x49\xb8\xbf\xd6\xf1\xbf\x9f\xd3\xff"
+ "\xbe\xf8\x3f\xf3\x6b\x4e\x61\x6b\xab\x46\xde\xdb\x7f\xc5\x08\xe5"
+ "\x00\x97\x72\xb0\xa2\xbc\x9c\xfb\x3d\x83\x6c\xd6\xc0\x7c\xc8\xc5"
+ "\xf3\x62\xdb\x7d\x59\x7f\x92\x68\x24\xf0\x06\xe6\xcc\x89\x15\xe7"
+ "\x61\x2d\xee\xd9\x0e\xb4\xbd\xc8\xf6\x6b\xc3\xf5\xd1\xe2\x31\x42"
+ "\x3c\x86\xf3\x5c\xbc\x57\x92\xa5\x7d\xdb\x57\x98\x8d\xe6\x4a\xb6"
+ "\xb4\x7f\x13\xf7\x78\xe3\xfe\x6e\x78\xd7\x48\xdc\xe3\x8d\xfb\xc1"
+ "\xc5\x63\x84\x78\x0c\x17\xf3\x11\xc7\xc2\x7d\x8e\xfd\xdf\x9e\xd6"
+ "\x73\xa8\xd3\x20\xed\xe7\xb6\xe7\xd0\x54\x21\xdf\x2f\x03\xf3\xbf"
+ "\x62\x0c\xb7\xf4\x16\x2a\xf0\x9c\xe1\x16\x52\x4d\xda\x49\x75\x62"
+ "\x6b\x06\xd0\x62\x60\x95\xc1\xc6\x6c\xf8\x55\x56\x1b\xa9\x32\x5c"
+ "\x60\xb9\x5f\x5f\x69\x91\x72\xdb\x58\x26\xd8\x73\x69\xaa\x38\x5f"
+ "\x36\x73\x1f\x7d\x0b\x8f\x45\x84\xb6\xb6\x16\xf6\xdd\xcb\xbf\x91"
+ "\x5c\x8d\x91\xea\xf0\xb1\xbb\xca\x70\x62\x5b\xa6\x94\xdf\xd3\x92"
+ "\x2a\xe5\x13\x37\x91\xab\xb1\x57\x07\x8d\x2f\x87\x73\xf9\x4a\x9f"
+ "\x69\xcb\x3b\xd8\x26\xf6\xdb\x44\x2c\x93\xb0\x6d\xa8\xf3\xa1\x63"
+ "\xce\x06\x40\x3f\x32\xc9\xc3\x7c\x1f\xca\xd5\x18\x9e\x3b\xd6\x02"
+ "\xf3\xff\x72\x9c\xe8\x0b\x5e\x42\xd1\x9f\x1a\xfd\xc1\x71\xec\x82"
+ "\x7c\x83\xd3\x2f\x91\xe0\x2b\x1d\x31\xe8\x9f\xde\xc0\xf6\x23\x2c"
+ "\xc6\x58\xf0\x56\x32\xc5\x40\xc4\xbc\x59\x57\x1f\xc4\xbd\x04\xab"
+ "\x59\x4e\x3f\xa2\x05\xec\x18\xd1\x9a\x79\x15\xf0\xff\x51\x39\x76"
+ "\xdb\x7a\x5f\x90\x91\xe1\xfd\xd2\x13\x08\xd4\x09\x80\x3a\x11\x50"
+ "\x67\x92\x54\x07\xaf\xb7\xe2\xb7\x27\x9a\x40\xf0\xbd\xae\xae\x9b"
+ "\x65\x85\xeb\xf3\x4d\x3e\xc7\xcc\xdc\xef\xfb\x2a\xd0\xbf\xd8\xbf"
+ "\x2b\xba\xc1\x7c\x6c\x82\xf9\x6c\x16\xf2\xfb\x9a\x78\x9c\xf7\xbe"
+ "\x4d\xdc\xce\x79\xf5\x10\xe6\x9e\x5c\x7b\x8d\x68\xd0\x0f\x83\xcf"
+ "\x9b\x6b\x2c\x9e\x29\x9e\x83\xf5\xa2\x18\xe6\x29\x93\x57\xbd\x93"
+ "\x3d\xae\x32\xdb\x24\xc6\xee\xc2\x71\xc4\xfd\x53\xad\x99\xd7\x74"
+ "\x8e\x3c\x1d\x0e\x2c\xb9\xf6\x24\x7e\xff\x80\x39\xca\xfa\xe8\xda"
+ "\x07\xec\x2f\xb4\x55\xe6\x51\xce\xd5\xf6\x35\xb1\x6f\x44\xeb\x7d"
+ "\x0b\xb9\x9f\xec\xb5\x75\x3e\x21\xc3\xaf\xc1\xb3\x72\x1c\xf9\x49"
+ "\xa0\x0e\xd2\x4c\x80\xf6\x1d\xef\xb9\x84\x3d\xe3\x43\x8e\x37\xd7"
+ "\xca\x85\x75\x7d\x4d\x6b\xdb\x89\x46\x3c\x5f\x5e\x65\xb3\x62\x5e"
+ "\x0a\xb7\xb1\x72\x58\x8e\x46\xf4\x4b\x5f\xdf\xd7\x84\x7b\x97\xee"
+ "\xb3\x4a\x7d\x6e\x2d\xc7\x3d\x33\xd8\x67\x3e\xb6\xad\xfb\xa4\x71"
+ "\xcc\xbd\x0c\x6d\xa7\x9d\x22\x0d\xa4\xf5\x71\xf4\xdd\x63\x63\x92"
+ "\x22\xf9\x93\xb6\x72\x5c\x6c\x77\xd4\x61\x32\x16\xcb\x97\x05\xed"
+ "\x6f\x65\x39\xff\xe0\x1d\x80\x16\xc6\x34\x8c\x3b\xd0\xca\xf2\x12"
+ "\xaf\x86\xeb\xec\xbd\x99\xaf\x6e\xab\xb8\x67\xb7\x75\x8d\xb4\x5e"
+ "\x99\xc4\x73\x6b\xf1\xd9\x49\xed\xe4\x22\x69\x9d\x53\x9d\xd1\x4e"
+ "\x60\x3c\xcc\x18\xbb\xb0\xca\x02\x73\x34\xb9\x1d\x79\xc1\x8c\x39"
+ "\x62\xa1\x3e\xdf\x6f\xad\xc5\x31\x6f\x9d\x88\xcf\xc7\xb1\x05\xfd"
+ "\xd0\xec\x13\x12\x0a\x73\xbf\xd5\x24\x8d\x69\xde\x10\xd4\xb9\xae"
+ "\x79\x8c\xdd\x89\x63\x64\x87\x3e\x57\x15\xc0\xfa\x3d\xec\x14\xf4"
+ "\xcf\xfa\x8e\x10\xd4\xd7\x84\x7e\xe1\xf0\xbf\x18\xaf\x81\xd3\x8e"
+ "\xf3\x81\x75\x15\x3c\xe3\xbe\x2a\xce\x0b\x84\xc7\xe9\xb1\xea\xc5"
+ "\xf1\x63\xb9\x46\xf2\x93\xf8\x38\x88\xf5\xeb\xb8\xcd\x3a\x74\x4c"
+ "\x6b\xa6\x35\x59\xb6\x59\x5b\x99\xbc\x88\x79\x11\xb6\x32\xbd\xd4"
+ "\xba\xc1\xa9\xcf\x16\xb6\x07\xf7\x32\xda\x1b\xad\xe3\xf1\x59\xb9"
+ "\x18\x5b\x0e\xf9\xa2\xd9\x99\xff\xad\xb7\x61\x3f\xd1\xef\xd8\x3e"
+ "\xc8\xb7\x10\xd6\xfc\x22\x1c\x67\xb8\x67\x1a\xcc\x05\x53\x17\xeb"
+ "\x31\xcb\xef\xd8\x9a\xd9\xe6\x2f\xad\xc7\xa0\xe3\xc0\xda\xd4\xae"
+ "\x62\xba\x2f\xc8\xf4\xd5\x02\xca\x54\xed\x2c\xf7\x36\x60\xbd\x51"
+ "\xc4\x79\x58\xc3\xdb\xc6\x4b\xdf\xdd\xec\xb8\x77\xe3\x22\xfb\xe6"
+ "\x6c\x91\xf2\x16\xf2\x58\x8e\x6d\x71\xf2\x5e\x8f\xb6\xf9\x9d\xf6"
+ "\x7a\xe0\xfe\xa3\x4d\x2c\xbf\xdd\x4e\x5c\xd7\x2a\x5b\x1a\x70\x9d"
+ "\x62\xf7\xe3\xfe\x0f\xc0\xa8\xef\xf8\x1e\xa6\x06\xfc\x46\xc0\x72"
+ "\xeb\x60\x5f\x78\x5e\x92\x7a\xf6\x3f\xf0\xad\x06\x8f\x9c\x97\xda"
+ "\x60\x9d\x5e\x96\x2d\xc9\x11\xf8\xbd\xef\xa0\xe6\x09\x62\x1c\x81"
+ "\x32\x43\xbb\x0a\xf3\xcc\x43\x1d\x8b\x94\x63\x9e\xe5\x94\xe7\xef"
+ "\xf3\xa1\x27\x1b\xc6\xda\x7b\x49\x04\xc6\x2c\xc0\x3d\x7e\x6c\x0c"
+ "\xb4\x2b\x63\x30\x0e\x38\xc6\x34\x35\xa6\x60\xee\x9f\xf6\x0f\xfe"
+ "\x3c\x84\xed\x93\xb6\x18\xef\xbd\x8c\xbe\x60\x2d\x8d\xa9\x2c\x56"
+ "\x97\xff\xd4\x64\x1b\xc5\xfb\x98\x4c\x33\x68\x25\xc6\xb1\x6c\x61"
+ "\x79\x30\xb0\xcd\x5e\xc7\xb4\x6e\x4f\x15\xe5\xe3\x16\xd0\xbf\x6e"
+ "\x05\x5a\x31\xbd\x08\xfe\x1f\xd2\x4c\x3a\x4e\xf2\x5c\xc7\x3c\x2f"
+ "\x83\xe8\x13\xee\xc7\xe3\x7c\xc0\x98\xb1\xb8\x0b\x1d\x93\x75\x77"
+ "\x63\x5e\xf0\x8e\xa7\x59\x8c\xf4\x1c\x2a\xe5\xd7\xa9\x59\xcb\xfb"
+ "\x15\x38\x33\x59\xcd\xfa\x88\xfd\xf3\xae\x6f\x1d\x21\xa2\x2e\xe3"
+ "\xd7\x9a\xd9\x11\x2b\xc5\x07\xe1\x32\x1d\x8f\x9d\xce\x69\xd1\x71"
+ "\x58\x94\xe1\x8f\x8b\xcf\x3e\x7e\x1d\x9e\xbd\x41\x6c\xb3\x98\xc7"
+ "\x8f\x6f\x8f\x82\x76\x8b\xa1\x1f\x0d\x92\x4e\x25\xee\x63\x0a\xe7"
+ "\xba\x5e\x87\x4d\xd6\xa9\xf8\x18\x2a\xf6\xfe\x2d\x5a\x94\xa8\x9b"
+ "\x3d\x77\xa9\x21\x3e\xf1\xa5\x04\xdd\x9c\x25\x4b\x16\x2d\xd1\x61"
+ "\x60\x29\xe7\xf9\xc3\xf3\x65\xd9\xb4\x62\x1e\xcc\x62\x39\x0f\xa6"
+ "\x2d\xc6\x39\x77\xac\x89\xd8\x62\xaf\x8f\xfd\xc4\xd6\x29\xe7\xac"
+ "\xd4\x4e\xbe\x5a\xc0\x6f\x25\xa5\xf0\x33\xc2\xaf\x1c\xed\x29\x33"
+ "\xad\x24\x0a\xe4\x0d\xe6\x43\x26\xc7\xbd\xb0\x61\x9e\x8f\xa8\x7a"
+ "\x62\x3b\xb1\x55\xd0\xa0\x9c\x83\xf9\xe9\x4b\x58\x7c\x2c\xb8\x1f"
+ "\x7e\x46\xf8\x95\xc3\x8f\xdd\x27\x7c\xca\xf6\xec\x97\x38\x5f\xe3"
+ "\x3e\x2c\x99\x98\x7f\xa2\x86\xae\xd2\xb0\xb9\x27\xac\xe7\xf5\x5c"
+ "\xfa\xa0\xa6\x99\x57\x73\xc4\x7a\xec\x7b\xe1\xc0\x55\x44\xe7\xa6"
+ "\x9e\x0f\xcd\x6c\xd1\x88\xf5\xd8\x9e\x4c\xe9\x7d\x30\x0f\x05\xd4"
+ "\x97\xea\x69\x68\x66\x7b\xb0\x58\x2f\x80\x3d\x37\x53\xed\xee\xb9"
+ "\xbe\x34\xf3\xe3\x64\xb1\x9e\xd6\xb9\x3d\xa7\x3a\x7e\x42\x66\x3d"
+ "\xbe\x73\x8d\xb0\x4a\xc3\x63\x97\x65\xda\x92\xa1\xbe\xdb\xf8\xbd"
+ "\xde\xd1\x49\xd0\xb9\xd2\xc9\xf0\xd2\xdc\x39\xe3\xe6\x2e\x4c\xc2"
+ "\x8c\x66\x89\x8b\x96\x25\xe2\x71\x61\xfc\x1f\xd9\x61\xd1\xcc\x3f"
+ "\xbc\xc4\xff\x49\x9c\x1f\x81\xff\xcc\x07\x7e\xc3\xe3\xec\x65\x06"
+ "\x3c\xbc\xb4\x08\x8b\xc9\x09\xe1\xcb\x5e\xc2\x83\xeb\x5e\x54\x7d"
+ "\x6b\xa6\x50\x0e\xbc\x51\xca\x71\x56\x00\xf9\xef\x87\x64\x26\x4b"
+ "\xaf\x32\x91\x43\x7a\x1b\x91\x6c\x6b\xca\xb8\x27\xc2\x59\x8c\x7b"
+ "\x12\xb8\xca\xf0\x52\xa0\x6d\xee\x1c\x58\x33\x2a\x5a\x33\xa9\xd6"
+ "\x44\xe6\x25\x8b\xd8\x68\x62\x31\x70\x33\x85\x38\xd1\xbf\x54\x23"
+ "\xe4\x30\xbf\xf3\x02\x8c\xd7\x85\xf9\xdc\xa1\x6c\x84\x72\x1d\x94"
+ "\x71\x0e\x04\x43\xb9\x10\xed\x62\x50\x0e\x81\x72\xa8\x90\x73\xb9"
+ "\x18\xf7\x39\x43\x59\x07\xe5\x91\xd0\xbe\x23\xff\xb3\xfb\x3d\x83"
+ "\x34\x5f\xca\x31\xcf\xf3\xc9\xd3\x22\x47\x3e\x79\xcc\xf5\x95\xa6"
+ "\x65\x3e\x08\x5c\x06\xa1\x65\x3e\x21\xb7\xad\x81\x3a\x8e\xef\xbf"
+ "\xdc\xe6\x42\x8f\x4b\x31\x5c\xb8\x4d\x05\x73\xab\x15\x34\x38\x95"
+ "\x01\xff\x7f\x28\x93\xec\x7a\x2c\x2f\x28\x1c\x69\x26\xc6\x1a\xa6"
+ "\xc5\x6e\xed\x89\x28\x17\xab\xc8\x73\x18\xb7\xd9\x9c\x3e\x5b\x75"
+ "\xe7\x56\xa2\x62\x65\x1e\x77\x94\x5e\x54\x11\x96\x1f\x5d\x8a\x49"
+ "\xe8\x1c\xcf\xc2\xed\x9e\xac\x2f\x40\x66\x60\xb9\xd0\xe6\x2f\x0a"
+ "\xb4\xc5\xcf\x61\x72\xa0\x8a\xec\xe1\x32\x86\xaf\x91\xc9\x0b\x2a"
+ "\xb2\x83\x3e\xc3\xf3\xe5\x98\x54\x2a\x3d\x8f\x7f\x35\x7f\x11\x85"
+ "\x7b\x03\x93\xe3\xe7\xb0\x73\x50\x6f\x35\xc8\x6a\x62\xff\x5e\xab"
+ "\x0e\xc5\x7d\xb6\x02\x8f\xd3\xa1\x22\xd9\x33\x6e\xcb\xc0\xe7\xf8"
+ "\x33\x39\xe4\x0b\x12\x80\x79\x5d\xb1\x6f\x5b\x9d\x62\x26\xae\x85"
+ "\x73\xe8\xc7\x7a\xe5\x19\x12\x80\x31\xa2\xc5\xbe\x64\xb3\x3c\x75"
+ "\x59\x2a\x9d\x14\xef\xca\x04\xe7\x5c\xdf\xe7\x99\xdf\x31\xae\xbc"
+ "\xeb\xa5\xf0\xe8\xc7\xe1\xbf\x70\x31\x35\xba\x33\x6f\x86\x5e\x09"
+ "\xea\x53\x72\x65\xf7\x2d\x5f\xb3\xfc\xb7\x59\x2a\x03\xb4\xc3\xf4"
+ "\x1b\x01\xf5\xf0\xd6\x98\x02\xe6\x07\xab\x52\xa1\x9e\x13\x25\x64"
+ "\xa2\x3c\xd9\x02\xcf\x57\x15\x20\xcf\x52\xad\x6f\xd9\xb6\x95\x18"
+ "\xff\x5b\x05\x63\xac\xca\xc5\x6b\x62\x1c\x31\x35\x8b\xb3\x65\x27"
+ "\x21\x6c\x9f\x32\xc8\x28\xb8\x0f\xb6\x51\xa5\xd9\x85\x72\x07\xda"
+ "\xb4\x84\x2c\xd5\x68\xe4\x5b\xa0\x31\xc6\x31\xb1\xd0\x81\x34\x83"
+ "\x0e\xf2\x9b\x8d\x7c\x8c\xb2\x2e\xee\x9e\x69\x54\xa9\x11\xff\x1e"
+ "\x83\xdf\xef\x79\x5e\xa2\x17\x9a\xa4\x36\xa1\x1c\x00\x32\x54\x05"
+ "\x1c\xb5\xad\x59\x6a\xbd\x53\xee\x47\xbe\x2f\x5b\xa5\x7e\x12\xe3"
+ "\xcf\x61\xdb\x4c\x76\x56\x69\x58\xdc\x45\xa8\x3b\xcd\x44\xb4\x2c"
+ "\x46\x0c\xfc\x0f\xf2\xcf\x9f\x88\xf8\x3f\xc8\x3f\xbf\x89\x73\x69"
+ "\xe3\x23\xc9\x5e\xcb\x78\x5a\xa5\xce\x07\x1e\x7d\x0c\x7e\xbf\x87"
+ "\xfa\x20\xbf\x3d\xc0\xea\xaf\x56\xb3\xbd\x9a\x8d\x3e\x21\x24\x02"
+ "\xce\x7f\x28\x9d\xf7\x55\x45\xc1\x98\xaa\xcb\xa4\xb9\x0f\x7a\x58"
+ "\x31\x94\x8f\x4b\x76\x1e\x66\xf7\xc9\x52\x37\x38\x95\x3f\x84\xb2"
+ "\x45\x2a\xb7\x66\xf9\x10\x09\x2b\xd0\x2e\x72\x25\x3d\x66\x33\xea"
+ "\xbd\x2f\x85\x80\x5c\x08\xf2\x0d\x5c\x07\xfa\xbf\x6e\xe4\xf7\xc6"
+ "\x6b\xaf\x64\xe6\x36\x59\x82\x96\x47\x5b\x00\xff\xe0\x1a\xc8\x7f"
+ "\x0b\xa6\x89\xed\x4c\x34\xf9\x1c\x1f\x29\xbd\x9b\x90\xe9\x13\x28"
+ "\xac\xf3\xcb\xe0\xef\xa8\x59\x03\xff\xaf\x31\x0f\xa0\x51\x50\xcf"
+ "\x60\x22\x94\xc7\xc6\x49\xba\x50\x94\xd3\xae\x9d\x56\x0d\x9a\xb3"
+ "\xf1\x0f\xc8\x73\x1a\x66\xbb\xce\x4d\xd1\x46\xa3\xdc\x89\xb1\x48"
+ "\x58\xbe\x3c\x8c\x7d\x6a\x23\x7e\x2c\xdf\xc4\xba\x59\xfe\x2c\xcf"
+ "\xc2\x2b\xfa\x00\x29\xee\x29\xe0\xcd\x68\xaa\x36\xcc\xc7\x58\xa8"
+ "\x2c\xaf\x4c\xab\x7e\x20\x8b\x7f\x2a\xc6\x3d\xdd\x92\x44\x82\x0b"
+ "\x05\x1e\xf7\x94\xc5\x29\xf1\x03\x3d\x25\xc9\x7d\xec\x53\x9a\xb9"
+ "\x2b\x40\x8a\x7d\x4a\xaf\xd9\xad\xf0\xff\x48\x18\x0f\x0d\x1c\xf5"
+ "\xac\x2c\xc7\xbc\xd2\xb8\x8d\x85\xaa\x06\xdc\x53\xf3\x58\xa8\x5e"
+ "\xad\x17\x2a\x0d\xcf\xb9\x9a\xa5\x01\xfc\x4b\xe5\x3e\x45\xf2\xb9"
+ "\x1d\x30\x67\xb8\xad\x58\xa5\x9e\x28\x9e\x2b\x05\xba\x04\x8b\x7a"
+ "\xa9\x19\xed\x0c\x68\x2f\x03\x4c\xa8\xa0\x1d\x09\x9b\xdd\x61\xce"
+ "\xe5\xa0\xf4\x9a\xcb\x18\x23\x23\x4b\x63\x35\xa9\x7c\x59\x4e\x5f"
+ "\xa6\x4b\xaa\x34\x9d\xe2\x36\xcf\x7a\x69\xd1\xec\x39\x33\xe7\x2d"
+ "\x30\xe8\x9e\x99\xf6\x18\x4b\xc8\x19\xae\x9b\x9b\x38\x87\x2d\x49"
+ "\xba\x67\x1e\x7f\x74\xea\xd4\x69\x33\x7f\x37\xed\x91\x69\xd3\x7f"
+ "\xf7\x10\xdf\x35\x39\x6d\x09\x0b\x7b\x9a\xb8\x48\x87\x37\xcd\x12"
+ "\xb3\xd6\xa7\xcc\x59\xb2\xc8\x15\x0f\x82\x99\xad\x4d\xcd\xec\xca"
+ "\x16\xfc\x9f\xd9\xf3\x54\xbe\x1b\x24\x3b\x1b\xc7\x3e\xdf\x57\x71"
+ "\x6c\x59\x4e\xfb\x2c\xdf\x00\x94\xaf\x58\x4c\xa1\x20\xb6\xee\x68"
+ "\x70\x4e\xe3\xfa\xd3\x9a\xe5\x6b\x74\x8e\x0f\x26\xde\xdb\xa0\xc6"
+ "\xfb\xc4\xb9\x2c\x9e\x6b\xa3\xc3\x86\xa5\xb3\x18\x5f\x59\xbe\x16"
+ "\xc9\xf6\x8e\xe7\xa4\x3e\xd4\x63\x9d\x2c\xdf\x87\x1c\x79\xab\xb3"
+ "\xfc\x42\xe5\x7c\xa7\xec\x4f\x31\x46\x84\xa0\x38\xe3\x0b\xb2\x8a"
+ "\x1f\xfc\xfa\xe0\x6f\xa2\x03\xdf\x93\x68\x2d\xea\x6c\x81\x2a\x58"
+ "\x83\x93\x7d\x78\x8e\xb3\xac\xe3\x2c\x2f\xc7\x54\xbb\xcd\x67\xa6"
+ "\x5d\x0d\x47\x1f\x3a\xd3\xae\x61\x7a\x22\x4d\x02\xf9\x17\xf5\xfd"
+ "\x24\x5a\x83\xb9\xfc\x80\x8f\xb3\xa7\xda\xd2\xb2\xa7\xda\xa9\x6d"
+ "\x26\xc8\xef\x70\xfc\x1e\xf7\xad\x4f\xb5\x7f\x4f\x59\x3e\x23\xb4"
+ "\xe7\xf0\x58\x87\xe5\xe8\xc7\x39\x03\x78\x78\xeb\x65\x9e\xfb\x7a"
+ "\xea\xf2\x1f\xbf\x9d\xb9\xdc\xc4\x73\x5f\x5f\xe4\xf9\xe2\xf1\xf9"
+ "\xd0\x66\x1a\xb4\x73\x78\xa6\xdd\x47\x37\xd5\xde\x41\xd9\xde\xdb"
+ "\xac\x3e\xa4\xab\x7c\xd6\x88\xb1\x4b\x87\x12\x35\xee\xe5\xb3\xbf"
+ "\xd5\x11\x81\x71\x0d\xd3\xcd\xd4\x8a\xf1\x71\x3e\x69\xaf\x55\xeb"
+ "\x92\x34\x30\x6e\x7d\xee\xaa\x32\x44\xb8\xdf\x7b\x9d\x07\xf3\x67"
+ "\x63\xdf\x44\x9a\xe7\x43\xe0\x68\xa1\xf9\x7e\x85\x88\xf7\x34\xcf"
+ "\xb7\x8e\x6e\xec\x07\xe7\xfd\x4b\xe1\x68\xa1\x79\xfd\x37\xd0\x8d"
+ "\xfd\xa1\x3c\xd0\x00\x47\x0b\x7d\xdd\x14\x0b\xf5\x0d\xf4\xf5\xb3"
+ "\x15\x70\x34\xd3\xd7\xbf\x1b\x0f\xf5\xa0\xdc\xb0\x13\x8e\x50\x6e"
+ "\x0c\x85\x7a\x50\xfe\x3e\xa7\x51\xd5\xc7\x0c\xff\x9b\x69\xde\xa0"
+ "\x49\xfc\x59\xc1\x31\xec\x59\x79\xb7\xce\xe6\xcf\x18\x66\xe0\xcf"
+ "\xb8\x2d\x95\x3f\x43\x97\xcd\x9f\xd1\x64\x83\x7a\xc9\xf4\xf5\xe6"
+ "\x26\x38\x5a\xe9\xeb\x2d\xc7\xa1\x1e\x94\x2f\x1a\xe1\x08\x65\x33"
+ "\x3c\xab\x3f\x94\x2f\x17\xc0\x11\xca\x96\x35\x50\x2f\x95\xbe\x7e"
+ "\x2d\x11\x8e\x36\xfa\xba\x15\xdb\x87\x72\xfb\x34\x38\x42\xd9\x36"
+ "\x01\xea\x41\x59\x18\x0d\x47\x1b\xcd\xbb\x13\xde\xa9\x6f\x06\xcd"
+ "\xbb\x6b\x22\x5c\x27\x34\xef\x9f\xe0\x79\xfd\xa0\xac\x2f\x81\xeb"
+ "\x50\xbe\x1b\xee\xef\x0f\xe5\xf0\x10\xba\x31\x00\xca\xa3\xf0\x5d"
+ "\xd7\xd0\xbc\xfb\xe0\x39\xfd\x34\x34\xef\x7e\x7c\x67\x28\xff\xda"
+ "\x02\xf5\xa0\x3c\x1a\xfb\x03\xe5\xb1\x70\x5f\x00\x94\x23\x61\x0c"
+ "\xfa\x66\xd3\xbc\x71\x2d\x50\x0f\xc6\xfa\xa1\xbd\x70\x84\x72\x54"
+ "\x0e\xd4\x83\xf2\x63\x30\x86\xfd\xa1\xfc\x44\x38\xd4\x87\xf2\x44"
+ "\x7c\xdf\x1c\x9a\xf7\xdb\x1a\xa8\x17\x40\xf3\xa6\xec\x80\x23\x94"
+ "\x9f\x4e\x86\x7a\x50\x9e\x06\xe3\xd7\x1f\xca\xbf\xd7\x41\xfd\x00"
+ "\xf7\xf4\x7c\x7e\x36\x5d\xe5\x07\x7d\x9d\xf3\x21\x5d\xd5\x07\x8e"
+ "\x2f\x43\xd9\x57\x4f\xf3\xfe\x18\x0c\xe7\xe1\x98\x10\x0d\xe5\x70"
+ "\xb1\x0c\xc7\xb9\xe3\xa1\x1c\x21\x96\xe1\x38\x4f\x0f\xe5\xd1\x62"
+ "\x19\x8e\x8b\xb0\x1c\x49\xf3\x0c\x70\xf4\x83\xe3\xa2\x62\x28\x8f"
+ "\x17\xcb\x70\x5c\x6c\x81\x23\x8c\xe5\x7c\x13\x9c\x8f\xa2\x79\x0b"
+ "\x8a\xa0\x0c\xc7\x85\x71\x50\x9e\x00\xc7\x32\x28\x4f\x30\x87\x59"
+ "\xa3\x91\x57\x85\xa0\x9a\x08\x3a\x64\x40\x49\xfa\x55\xa2\x46\x1e"
+ "\xc5\xfc\x2e\xb0\x36\xdf\x51\xaf\xea\x5b\x59\x92\x66\x62\x32\x83"
+ "\x7d\x53\x5f\x83\x30\xa4\x2f\xc6\x63\xf4\x83\x7a\x7d\x1a\x55\xfd"
+ "\xda\x10\x8f\xaa\x53\x4d\x2c\xc7\xa4\x18\xa3\xd3\x0f\xee\xb9\x0a"
+ "\xf2\x55\x24\xe0\xbf\x1a\xc6\x6d\x27\xcd\xf4\xbd\x0c\xe3\x15\x4e"
+ "\x33\xfb\xd7\xc3\x11\xca\x83\xbe\x80\xf1\x82\xf2\xd8\xd7\xe1\x08"
+ "\xe5\x17\x1e\x85\x71\x0b\x6f\xcd\xea\x37\xcd\xa4\xea\x33\x89\xe1"
+ "\xcb\xee\x5b\x40\xb7\xa6\x74\x2a\x20\x2d\xdd\xfe\x40\x74\xa0\xcd"
+ "\x08\xf3\x60\xb8\x31\x10\x63\x4d\x6e\x6f\x8b\xa6\x41\x27\x51\xe6"
+ "\x41\x19\xc4\x8f\x76\x8c\x54\xf3\x67\xf7\xa7\xf5\xaa\x7e\xab\x30"
+ "\x2f\x09\x0d\xba\xe4\xe9\xfa\x76\x76\x7d\xc4\x03\x35\xfc\xba\x3f"
+ "\x91\xaf\xbf\x80\xd7\x0f\x04\x62\x7c\xff\x11\x3f\xb2\xeb\xd5\x96"
+ "\x26\xf1\xbd\x7c\xf0\xda\x69\xac\x6b\x52\xf5\x27\x1c\xff\x81\xd7"
+ "\x32\x7d\xc8\x15\xad\x5f\x76\x6b\x56\x7f\x2d\xf4\x3d\x40\x94\xff"
+ "\x37\xd0\x00\x5a\xc0\x62\xb4\xac\xeb\xe7\x36\x2e\x26\xea\xbf\x42"
+ "\x70\x58\x64\x2e\x60\x28\xea\xd4\x81\x66\xcc\x93\x3e\xb2\xb4\x5e"
+ "\x15\x90\xb1\x05\x65\xae\xe0\xb1\xf9\x1c\x5b\xfb\x6f\xb7\xad\xf7"
+ "\x3b\xae\x4b\x09\x84\xe7\x07\xac\x4a\xb7\xd2\xab\xc6\xb4\x47\x01"
+ "\x97\xf1\x7c\x1f\x2d\xdb\x03\xc5\xeb\xd8\x98\x6f\x2b\xff\xbf\x89"
+ "\xd9\xd1\xa1\x2d\xbc\x97\xc9\x7b\x22\x5d\xed\x59\x47\x67\xd3\x21"
+ "\x63\x8b\x80\x4e\x0f\x43\xdb\x6f\xef\x13\xcc\xea\x81\x66\xe2\xab"
+ "\x4b\xfa\x04\xda\xef\xcf\x6c\x88\x52\x5d\xea\x77\x74\xb6\xc0\xea"
+ "\xb2\x6b\xc7\x3e\x01\x3e\xc0\xd8\x17\xf0\xae\x36\x47\x1e\xf0\x0d"
+ "\x61\x91\x18\xf7\x02\x9e\x11\x85\x6b\x3b\xdb\xdf\xa9\x0a\x88\xad"
+ "\xb4\x61\xde\xd0\x1a\xdd\x7d\x89\x44\x13\x68\xf5\x57\xa5\x2d\x63"
+ "\x7b\x9e\xaf\x1a\x53\xbe\x60\xbe\xd8\xd8\x3e\xd4\x7b\x9c\x06\xf9"
+ "\x19\x31\x5e\x02\x8e\xd5\x5a\x01\xda\x83\xe7\x19\x93\x4e\x61\x1b"
+ "\xb7\x7d\x72\xd9\xac\x6e\xcd\x0a\x48\x90\x9e\x85\xeb\x4d\x2e\x8c"
+ "\x0d\xca\xdc\x18\xaf\x63\xa6\xdd\x8e\xf1\xef\xb2\x9d\xc7\x77\xae"
+ "\x18\x9f\x60\xee\xc2\xc4\x25\x8b\x75\x4b\xe7\xa6\xcc\x79\xe8\xae"
+ "\x65\xe1\xba\x25\xc9\xba\x25\xb8\xcc\xf2\x13\xb0\x14\x2f\x9d\xbf"
+ "\x28\x51\x87\xd9\xed\x3b\xe7\xc6\x0e\x11\xb4\x7e\x05\x2c\x76\x94"
+ "\x2a\x88\xd9\x48\x85\xa2\x07\x26\x26\x26\x52\x81\xae\x87\xd1\x4f"
+ "\x9f\xc8\x75\x28\xd5\x00\x5f\xdd\x88\x3e\x20\x5b\x07\x3d\xd8\xe6"
+ "\x17\x90\xd3\x9a\x35\x00\xe8\xdf\x3f\x5c\xfc\x2e\xc7\x63\x09\xaa"
+ "\x82\x0c\x48\x5b\xf6\xdd\x3a\x6b\x40\x84\x89\xfc\x91\xcb\x79\x45"
+ "\x63\x79\xdc\x60\xd5\x80\x38\xa6\xb7\xe8\x1e\x98\x48\x8b\xda\xa2"
+ "\x41\x3e\x53\xb1\x6f\x84\xb6\x3b\x68\x35\xb9\xcc\xe2\x12\x00\xcf"
+ "\x47\x61\x3c\x10\xfb\xa6\x01\x5a\x61\xc8\xf0\x28\xe1\xad\x76\x6d"
+ "\xfa\x76\xa2\x7e\x1f\x68\xa1\xd1\x01\x5f\x8e\x20\x77\x7c\x92\xd6"
+ "\xa4\xbe\xa8\x1a\xb0\xf8\x93\xb4\x5a\x35\xdd\x30\xa0\xe8\xca\xc8"
+ "\xfe\x91\x56\x31\x4f\x7a\xb5\xcd\x4a\x3e\x9f\x40\x50\x3f\x2b\xb5"
+ "\x0c\xbe\xb3\xd6\x32\x38\xc0\x6a\xdd\x18\x4e\x8c\x23\x7e\x4d\x1e"
+ "\xff\x15\xfd\xf1\xb3\x32\x42\x5a\x54\x41\xe1\x9f\x4d\x40\x9d\xc1"
+ "\x2f\xdf\xaa\xf5\xdb\x60\xd9\x34\xcc\x88\xb1\xb8\xda\x36\x85\x6b"
+ "\xdb\x87\x04\x46\x1c\x84\x3a\x47\x40\xa7\x39\x0a\x9a\x39\xc6\x9d"
+ "\x6d\x1b\x61\x2d\x7a\xbf\x3d\x5f\x5d\x5e\x36\x9e\xdb\x73\xe3\x80"
+ "\x77\x71\x6f\x89\x6a\xe0\xe0\xcf\x3e\x2c\x23\xf0\x6c\xf2\x7e\xfb"
+ "\x44\xf5\xe7\x91\x9d\xae\x8f\xf9\x2c\xa2\x8c\xb4\x62\xfc\x66\xd0"
+ "\x19\xf7\x9f\x2a\x20\x74\x53\x98\x79\x57\x8a\x55\x1d\x6b\x22\xea"
+ "\xca\xda\x02\x92\x7a\x8e\x0c\xb0\xfd\xa8\xd7\xbc\x07\xf7\xb7\x61"
+ "\x7c\xd5\xa3\x21\x2c\xce\x62\x9a\x91\xe5\x2d\x0e\xac\x02\x39\x40"
+ "\xf8\x51\xef\x57\x35\xcd\x48\xe0\xfa\xbd\xb6\xdf\x86\x90\xca\x04"
+ "\x33\xa9\x8e\x29\x22\x6d\xea\x28\xb2\xe7\xf9\x22\xf2\x26\xe8\x1f"
+ "\x6f\x5e\x24\x01\x4c\xa6\xed\xd0\xfb\xd9\x3a\xf4\x1a\xdb\x0a\x3d"
+ "\xc6\xbd\xa2\xf4\x47\x7d\x3f\x94\x71\x6d\x8b\xf4\xfe\x55\xe6\x22"
+ "\x72\x5f\x13\xd1\xb7\xa9\x49\x60\xdb\x0a\x7d\xbf\x2a\x43\x01\xb4"
+ "\x05\x42\x2b\x8c\x2b\xc6\xdc\xc3\x58\x7c\x38\x4e\xfd\x63\xc8\xb4"
+ "\x16\xd5\x80\x0b\xfd\x8e\x93\xc1\x18\xf3\x15\xe5\x46\x8c\x17\x0d"
+ "\xf3\xd7\x6c\x0f\x1e\x66\x4c\xbb\x0a\xfd\xc2\x98\x46\xbb\x6f\x29"
+ "\x41\xb9\x1b\x64\x0a\x15\xbe\xb3\x40\xf5\xfd\x66\xe2\x31\x8f\xde"
+ "\x8b\xb2\xb7\xd0\x1a\x82\x39\xc1\xfc\xb1\x9f\x98\x9f\x7b\xe5\x59"
+ "\x18\xcb\x74\xbd\x06\xea\x05\xc0\xf9\x81\xd5\x2d\x56\x62\x1f\x75"
+ "\x8b\xf1\x5e\x03\xcb\xbb\x1c\xbc\x35\x8d\x68\xf3\xd3\x48\xb0\x6e"
+ "\x2c\xe3\xa5\x01\xf6\x5d\xb7\x94\xd0\xac\x3b\x82\xd1\xce\xc2\xcf"
+ "\x69\x2f\xe8\x9e\x20\x44\xf7\x6b\xf6\xff\x46\xdd\x38\xa0\x61\x70"
+ "\x58\x34\xd3\x0b\x98\x2e\xaa\x7d\x8d\xf3\xaa\x76\x55\x9b\xdf\xdc"
+ "\x18\x21\xab\x30\x51\x58\xa5\x09\xc5\xfc\xee\x17\x55\xda\x39\x34"
+ "\x2f\xb5\x90\x6e\xb8\x87\x7d\xb7\x84\x72\x7c\x9b\xdf\xb0\xbd\x34"
+ "\x6f\x25\x81\xf6\xc7\xb7\xa9\x34\xc7\xe1\x57\x2b\xde\x1f\x83\xef"
+ "\x6d\x2f\x6a\xd3\xe3\x7b\xb3\x3c\x52\xf0\x5e\x33\x81\x66\x74\x48"
+ "\x18\x61\xb9\x15\x3a\xf4\xfe\x52\x9e\x5d\x1c\x0f\x1c\x03\xa1\x43"
+ "\xdf\x8f\xbd\x6b\x87\x3e\x00\xc6\x17\xe3\x3b\x07\xa6\xc5\xc3\x3d"
+ "\x9b\xc2\x82\xe1\xda\xc0\xb6\xe0\xb0\x89\x98\xcf\xad\xda\x60\x26"
+ "\xf6\x8d\x61\x5a\x8c\x5f\xb8\x39\x85\x68\x85\xc1\x61\xc0\xf7\x61"
+ "\xa1\x26\x3e\x7f\x08\xf6\x53\xc8\x5b\x39\xa9\x0d\xf7\xed\x41\xdf"
+ "\xa0\x7f\xc7\xe1\x57\x6b\x52\x05\xd6\xb5\x85\xb5\x45\xc2\xb1\x04"
+ "\xfa\x1a\x4a\xb3\x1e\x98\x80\xff\xc3\xb5\x50\xe8\xf3\x21\x1c\x07"
+ "\x1c\x0f\x71\x2c\xf6\xc9\x63\xf1\x52\x06\xd4\xdb\x29\x64\xfd\x47"
+ "\x88\x49\xa5\xcd\xa1\x59\xbf\xd6\x38\xd5\x3b\x27\xd7\x5b\x34\x92"
+ "\xd7\xdb\x5e\xce\xeb\x8d\x4f\x6d\x54\x0d\x5a\xc5\xc7\x7b\xd0\xaf"
+ "\x3a\x8f\xf7\xa0\x30\xf9\xde\xdf\x57\xf0\x7b\x73\x62\xf8\xbd\xff"
+ "\x8c\xf7\x3e\xa7\xec\xd3\xa0\xa7\xe5\xfa\xcf\x10\x5e\xff\xdf\xfd"
+ "\x79\xfd\x11\x13\x9d\xea\x2d\x97\xeb\xbd\x98\xc3\xeb\xad\x2b\xe2"
+ "\xf5\xc2\x8b\xe1\xfa\x47\x6e\xfa\xb2\x4b\xbe\x67\x85\x96\xdf\xb3"
+ "\x73\x2f\xbf\xe7\xdf\x22\xe1\xfa\x39\x97\xbe\x9c\x96\xeb\x2f\x13"
+ "\xdf\xfb\xbf\x26\xf1\xfa\x8f\x34\xc8\xf5\x82\x7c\x79\x3d\xbc\xfe"
+ "\xdf\x50\x4f\x9b\xd1\xe6\x97\x61\xe1\xf5\x26\xad\x41\x7e\x84\x3a"
+ "\x77\x09\x59\xba\x1d\x6d\x7e\xb7\xe5\x43\x3b\x89\x40\x9b\x10\x3c"
+ "\x02\xed\x42\x84\x7c\x3f\x38\x37\xb0\x65\x2b\xb7\x35\x60\x6e\x6f"
+ "\xe0\x0b\x1d\xd9\x1a\x44\x02\x36\x07\xf1\x78\xf6\xad\x59\x41\xb1"
+ "\x0e\xfd\x41\xc4\x50\xc4\x60\x93\x2a\xa0\x09\x70\xd8\xee\xd6\xfe"
+ "\x95\x15\x94\xef\xb0\xbf\x09\xb0\xe6\x6f\xec\x1b\xe5\x31\xe7\x37"
+ "\xae\xfb\x9b\xfa\xe6\xe7\x0b\x04\xf3\xac\xab\x80\x9f\x41\x66\x09"
+ "\xda\x03\xeb\x17\xcb\x77\x2d\x6c\x18\x6e\x14\x74\x80\xc7\x17\x88"
+ "\x4f\x75\x6a\x13\x29\x11\x9a\xd4\xf9\xed\x44\x53\x05\xab\x1e\xd6"
+ "\x2f\x11\x4c\x6a\xdd\x42\x94\x07\x82\x8e\xe5\x5f\x13\xdb\x2b\x7a"
+ "\x20\x3a\x7d\x01\xcf\x97\x8e\xb2\x13\xe2\x38\xcc\xdd\x00\x96\xc7"
+ "\x6f\x61\x1f\xa8\x7b\x8b\x2f\xfc\xef\x8f\x75\xdb\x46\xb4\xd6\xb4"
+ "\xbd\xf5\x40\x74\xfb\x90\x81\x11\xed\x6f\xb5\x97\x74\x0c\x19\x6e"
+ "\xec\xd8\x34\x2c\xca\xf6\xd6\x58\xa3\x6d\x44\x5b\xb4\x7d\xc8\xc0"
+ "\x12\x78\x36\x60\x7c\x81\x7a\xb7\x50\xa2\xde\x9d\x66\x54\x63\xbb"
+ "\x9f\xa4\x15\xa9\xf7\xa7\xd5\xa8\xf7\x0b\xa5\xea\x4f\xd2\xf2\xe1"
+ "\x58\x8c\x39\xdd\x40\x46\xbb\x65\xfa\xfe\xb4\x72\x58\x63\x6e\xd9"
+ "\x00\xe3\x95\x2a\xd9\x2f\xe9\xa3\x36\x52\x55\x6c\x23\x87\x12\xaf"
+ "\x12\xf3\x20\xbf\x02\xf8\x15\x9a\x07\x87\x45\x9a\x07\x87\x13\xd6"
+ "\xe7\x21\x23\x6a\xf0\x1d\x71\x8f\xec\x7e\x81\xf7\x59\x1c\x0f\x6c"
+ "\x73\xdf\x56\xfc\x4e\x2b\xc5\xc3\x56\x05\x27\x77\x8a\x87\xad\xe6"
+ "\xf9\x04\x1d\x31\xb1\x7f\x8e\x78\xd8\xa2\x9d\x80\xc5\xc3\x06\x9d"
+ "\x8f\xe9\x7e\xb0\xd6\xb1\x1c\xa4\x36\x90\xa9\x36\x0e\x2d\x41\x1d"
+ "\x0f\x65\xa8\xd6\xac\xe0\x1d\x92\x8e\x86\x72\x83\x7d\x9d\x5f\x31"
+ "\xfc\x76\xc0\x79\x98\x07\xa5\x3a\xe9\x3c\x5d\x7f\x2c\x02\xed\xe8"
+ "\x76\x9a\xf0\xaf\xe2\xb7\xf7\x87\xed\x1b\x07\x00\x26\xdd\x63\x82"
+ "\x73\xe3\xe1\xf7\x90\x7d\xdd\xb1\xd1\xf0\x8b\x84\xdf\x78\xf8\x45"
+ "\xc1\x6f\x02\xfc\x26\xc2\x2f\x1a\x7e\xd3\xe0\x17\x03\xbf\x58\xf8"
+ "\xc5\xc1\x6f\x36\x1d\x74\x6c\x12\xc6\xf3\x84\xb6\x0d\x40\xf7\x10"
+ "\xa9\x5d\x79\x7c\x07\x87\xc1\xfb\x46\xa1\x4c\x23\xe4\xa5\x96\xb2"
+ "\xef\x02\xdb\xad\x31\x6c\x8e\x00\x7e\xd1\xbb\xfa\x47\x9a\xc3\x1e"
+ "\x88\x32\x0f\x1e\x61\x34\x87\x8d\x2d\x36\x0f\x1a\x97\x0f\x3f\xa0"
+ "\xe1\xb8\x22\xf3\xc6\xb0\x68\xf3\xe0\x7b\x9a\x80\x96\xa6\xd6\xac"
+ "\xc1\xd9\x26\x55\xe8\x7c\x6e\x4b\x1a\x0c\xf4\x0f\xcd\x11\xff\x07"
+ "\x7c\x08\xb1\xe0\xff\xd0\x46\x11\x94\x4b\x4c\xaa\x61\xac\xde\x95"
+ "\x21\x61\x71\xe2\x9e\xd1\x0c\x38\x5f\x6e\xf2\xb9\x10\xc3\xed\x58"
+ "\xe9\x56\xc9\xf7\xc0\x79\xee\x2c\x78\xc9\x30\x73\x41\x7c\xf2\xcc"
+ "\xa5\xf3\xe7\xbe\x34\x67\xe9\x38\xdd\x5d\xb3\x75\xfa\xb9\x4b\x16"
+ "\xcf\x5c\xbc\x6c\xce\xb2\x39\x4c\xa4\x82\x53\xbf\x52\xfa\xc5\xe1"
+ "\x1e\x59\x1b\xc8\xf0\x03\x67\x53\xba\xf2\x45\xa2\x9e\x64\x06\x7e"
+ "\x1b\xf1\x40\xf4\x80\x86\x6d\x74\x6f\xb3\x59\x3d\xa9\xc5\x44\x6c"
+ "\x28\xf7\x6c\x1a\x6e\x1c\xd8\xf0\x30\x9c\xb3\xaa\x27\x61\x1c\x46"
+ "\xe0\xff\xea\x06\x23\xc1\x3a\x5c\x0e\xfa\x94\x54\xa0\x1c\xb4\x69"
+ "\x78\x14\xd6\xa1\x20\xff\xb0\xe3\x90\x01\xda\xc9\xd0\x06\x85\x79"
+ "\x83\x75\xf7\xc1\x39\xf4\xc3\xa0\x30\xa7\xe8\xb5\x95\xb4\x02\xda"
+ "\xd8\x3f\xcf\xac\x46\xfb\xd8\x14\x6c\x17\xe6\x14\x7d\xab\xb5\x66"
+ "\x3f\xd4\xdd\x3f\x0f\xee\x1f\xd1\x0e\xe5\xb1\xc6\x7d\x50\xae\x57"
+ "\xdd\x3a\x7b\x3f\xdc\xcf\xf4\x01\xe8\xe3\xfb\x70\x0e\xf4\x75\x8d"
+ "\x34\x8f\x51\x56\x75\xcc\xe5\x24\x94\xf9\x86\x54\xe2\x5c\xa6\x6f"
+ "\x81\x1e\x02\x73\x77\x17\xdc\xbb\x1b\x9e\x25\xca\xd9\x3e\xa8\x0f"
+ "\x21\x5e\x20\x4e\x54\xa7\x72\xbd\xa8\x44\x40\x9d\xdf\x07\xee\xbd"
+ "\x75\x00\x5e\x7b\x13\xf8\x8e\xcb\xd2\xb7\x4e\x94\xe4\xdb\x3f\x89"
+ "\x31\xe4\xfa\xd7\x01\x8f\xcc\x20\x77\xc0\x73\xc2\x70\xfc\x70\x9c"
+ "\xf0\x7b\x2a\xcd\x1a\x6c\xc2\x38\x15\x85\x41\xc4\xbf\x63\xe3\xd8"
+ "\x02\x6e\x6b\xb9\x35\x5b\xc2\x4a\x4b\xf0\xd8\x02\x67\xba\x71\x7a"
+ "\xe9\xe6\x2c\x8c\x9f\x35\x7f\xce\x6c\xf6\x09\x2e\x7e\xe9\xd2\x65"
+ "\x0b\xe6\xe8\xe6\xc4\xbf\x94\xa0\x63\x97\x75\xcb\x96\x42\x95\xb9"
+ "\x89\x4b\x75\x8b\x5e\x59\xa8\x5b\xb0\x74\x2e\x4a\xce\x73\x96\x2c"
+ "\x59\x66\x48\xec\x47\xf8\x9d\xba\x05\xcb\xe6\x27\xce\x35\xc0\x3f"
+ "\x4b\xe7\x2c\x9c\xad\x63\x54\x5f\x0a\x4d\xcd\x9f\xaf\x13\x9f\xb0"
+ "\x34\x21\x7e\x09\x32\xc2\xc2\x97\xa1\x92\xd3\xfd\x4a\xb9\x3a\x00"
+ "\x63\xf4\xa1\x6f\xd8\x45\x55\xc8\xf9\x32\x0d\x8c\xf5\x86\xb1\x05"
+ "\xe8\xcf\x00\xe5\x26\xa6\x0f\x65\xdd\x8a\xdf\x47\xc8\x9f\x83\x88"
+ "\xe6\x0a\xf0\x7f\x6b\x56\xc8\x6c\xe9\xdd\x98\x1d\x1a\xe3\x96\x62"
+ "\x4c\x5c\x55\xc8\x09\xb6\x87\x19\xe6\x01\xf3\x77\xc9\xba\xf5\x3d"
+ "\x3e\x16\x21\x1b\x9c\x6d\x5a\xdc\x86\x1a\xb2\x0b\x7d\xfb\x60\x2e"
+ "\x34\xa1\x2c\x21\xe6\x99\x50\xc1\x3d\x27\xf1\x1e\x61\xe3\x3d\x4d"
+ "\x70\x5f\x85\xbc\xde\x84\xec\xc0\xfa\xac\x5e\xd6\xad\xd7\xe8\xe0"
+ "\xb0\x68\x38\x97\x8d\xfd\xf2\xb0\x9e\xe8\xae\x41\xbb\x47\x4b\x08"
+ "\xb9\x27\x98\xe8\xaf\xad\xef\xa7\x6d\x0d\xf2\x2b\x69\xcf\x24\x7d"
+ "\xda\x61\x4e\x5b\xd5\xe4\x8e\x36\xe0\x8b\xe5\xf7\x13\x9f\x95\x93"
+ "\x89\xba\x64\x5e\x09\xc6\x5d\x26\x15\x13\x0b\x48\x75\x1c\xe8\xcd"
+ "\xd6\x9d\xa4\xc2\x58\x4f\x2a\x6d\xef\xf2\x5c\x26\x29\x28\x8f\x0f"
+ "\x9b\x8c\x71\xf6\xd2\x57\x52\xfb\xfb\x1f\x9b\x7d\x77\x37\x97\x60"
+ "\x0e\x92\x3b\xaa\x6d\xdf\x1a\xab\x53\x77\x90\xea\xe4\x6a\x23\xc6"
+ "\x38\xb9\xa8\x1a\xfa\xe0\x7e\xb8\xd6\xb7\x02\xee\x9b\x42\xfa\x40"
+ "\x79\x14\x3e\x23\x7b\x13\xad\x7d\x6d\x08\xad\x7b\x6d\x13\x35\xe5"
+ "\x0c\xa1\x0d\x39\x62\x5e\x11\xf4\x17\x40\xbf\x08\xe4\x53\x43\x12"
+ "\x09\x69\x56\x0d\x2d\x63\xfa\xfb\x04\x56\x1e\x0a\x65\x1e\x7f\x20"
+ "\x79\x13\x96\x87\x41\xb9\x81\x97\xb7\x62\x79\x38\x94\x2d\xbc\xfc"
+ "\x19\x96\x43\x9b\x55\xc3\x34\xbc\x5c\x45\x58\xac\x0e\xd5\xb0\x60"
+ "\x5e\xfe\x0a\xcb\x30\xf6\xc3\x46\x1a\x93\xb0\xbf\x67\x80\x66\xc3"
+ "\xee\x4f\x3f\x4d\xd4\xd5\xc9\x8d\x6c\x3e\x7c\x92\x96\x80\xf6\x05"
+ "\x98\x0f\x43\x3f\x42\x7e\x07\x6c\x9a\xe6\x17\x81\xc7\xa1\x31\x81"
+ "\x56\xd2\x07\x64\xac\xfe\x70\xed\x2e\x1c\x3b\xb7\xf6\x94\xdd\xfd"
+ "\xd3\xa7\xda\xa8\x91\x6e\x6f\x9b\x48\x37\x86\x46\xd1\xed\xed\xf9"
+ "\x94\xad\x69\x7d\xa3\x4b\x52\xac\x2c\xf6\x35\xc8\xb5\x30\x87\x86"
+ "\xb1\xf8\x19\x66\x90\x13\x3d\xc4\xc2\xd5\xd2\x8d\x03\xf2\x41\xff"
+ "\x8a\x9c\xac\xb7\xa1\x0f\x36\xc8\xc6\xc3\xef\x3a\x94\x80\x32\xc2"
+ "\x88\xbf\x08\x45\xed\xf9\x42\x7a\x0c\xa1\xba\xb6\x89\x93\x13\xa8"
+ "\x11\xd6\x2b\x15\xb7\x5d\xd3\x6f\xe1\xf9\xdf\xb2\xe7\x86\xb5\x4d"
+ "\x14\x5e\x49\xc0\x9c\x62\x04\x31\x26\x0d\xd7\xee\x24\xc0\x93\x15"
+ "\x31\x81\xf6\x8d\x23\x8a\x0e\x25\x9c\xf3\x2e\x3f\x9f\x6a\xf8\x48"
+ "\x8f\x3e\x50\xd0\x27\x8c\x05\x6b\x83\xe7\xd8\xe0\x5d\x51\x4e\xd8"
+ "\x2d\x94\xab\x41\x5e\x99\xb8\x6b\x56\xad\x2f\x7d\x25\x26\x10\xde"
+ "\xe9\xfe\x6a\xfd\x55\x52\xd5\x8e\x73\x65\x78\xc3\xa1\x64\x42\x1e"
+ "\x4f\xb6\x19\x03\xcd\x2c\x66\xb7\x16\x73\xd8\xd0\xc1\x03\xf2\x9b"
+ "\x55\xa1\xa3\xa7\xa4\xc2\x3b\xc0\xbb\xef\xaf\xaf\xd5\x08\xf0\x1e"
+ "\xf7\xf1\x71\x83\xfb\x42\x43\x60\x6c\x23\x25\x7d\xc0\xcb\xfe\xf3"
+ "\xfc\x6f\x4b\x63\x08\xee\xad\x7e\x1f\x64\x13\xa1\x23\x26\x50\x80"
+ "\x75\x08\xaf\x1d\xd2\x5f\x20\xf8\x4c\x71\xac\xcf\x71\x1d\x18\xc6"
+ "\x19\x9e\x8f\xb1\xc2\xa5\x71\x85\xb5\x2c\xc4\xde\x91\xe0\x9e\xfe"
+ "\x9b\x46\x18\xa0\x7f\x11\x74\xdd\x31\xb7\x7b\x52\xe9\xfa\x1a\xca"
+ "\xf9\xc3\x9a\x00\xbf\x64\xba\x7d\x6c\x89\x39\xcc\x9a\xcd\x72\xbe"
+ "\x6e\x1a\x6a\x94\xbe\xe9\xc2\x7c\x03\x1e\x09\xfd\xa8\x04\x74\x68"
+ "\xf7\xf1\x11\xe3\x79\xae\x3d\xdf\x6f\x69\xa0\x1d\x73\x48\x5f\xc5"
+ "\xb8\xf3\xfe\x87\xf4\x16\x2f\x69\x1a\xea\x31\xc7\x23\xb6\x0f\xba"
+ "\x78\x87\x77\xed\xdd\x36\xd1\x23\x8f\x14\xc1\xb8\x68\x8f\xe9\xda"
+ "\xe9\x04\x15\x97\xd9\x6f\xbf\x80\x63\x85\xeb\x48\xca\x09\xa2\xb6"
+ "\xc2\x1a\xfa\xee\xb3\xd9\xea\xf0\x38\xa2\xb2\x83\x0c\x70\xb8\xa6"
+ "\x8c\x4c\x9d\x44\xd2\x2b\x13\x2e\x13\x29\x87\x1e\xac\x6b\x51\xef"
+ "\x3c\x6b\x56\xe3\x37\x24\xcc\x99\xc7\xf4\xdb\x4d\x3a\xc3\x7b\x5f"
+ "\xe1\xda\x1b\x16\xb7\xeb\x2b\xb3\xda\x76\x25\x46\xc7\xe2\xde\x83"
+ "\x2e\x9f\x9e\x40\x05\xc7\x77\x25\xcc\x8d\x92\x43\x47\x63\x4e\xf2"
+ "\xa3\xd1\x35\x2c\x16\xc1\xd1\x98\x32\x72\xb4\xae\x80\x54\x34\x9c"
+ "\xc6\x3d\xda\xdb\x8f\xc6\xe4\xa3\xec\x38\xd0\x06\xf2\xe1\x9b\x20"
+ "\x1f\xc2\x7c\xed\x2b\x68\xe3\xfd\xa5\x6f\x4b\x98\x63\x4f\x92\x0d"
+ "\x6d\x30\x47\x0b\xc5\x3c\x7a\xb6\xac\xd0\xba\x42\xf1\x3b\x13\xe6"
+ "\xd7\x7b\x23\x89\x8c\x7c\x43\x2d\xc4\xb8\xfb\xa6\x34\x70\x31\xf3"
+ "\xe3\x0e\x11\x06\xc5\xfb\x4b\x79\xf6\xa6\x2c\xd6\x91\xff\x85\x77"
+ "\x3f\xa4\xf7\x76\x4e\xde\xce\x62\x1e\xd9\x80\xef\x6c\xc0\x73\x36"
+ "\x18\x4f\xa0\x41\x31\xd0\xcd\xad\x3e\x22\xd1\xa0\x23\x5d\xa2\x81"
+ "\x6e\x25\xa3\x01\xe8\x31\x2b\x9e\x13\x69\x70\x0a\x68\xd0\x00\x34"
+ "\xc8\x24\x19\x47\xa6\x55\x90\xa9\xd1\x40\x83\x96\xcb\x98\x33\x81"
+ "\xe7\x31\x4c\xe4\x63\xcf\x68\x71\xca\xac\x46\x5f\x53\xa4\xc1\xce"
+ "\xe7\x39\x0d\x76\x3f\x6f\x06\x79\xc8\x5a\xf4\x0e\x94\xed\xaf\xc4"
+ "\xe8\x30\x8f\x15\xcd\x8c\xc3\x9c\xeb\x9c\x16\x1d\x40\x8b\x0e\x4e"
+ "\x8b\xb4\xc5\x40\x8b\xe3\xb5\x2c\x5e\xd6\xd1\xba\x0a\x52\x11\x57"
+ "\x44\x2a\x01\x97\x80\x16\xf1\x48\x17\xd4\xc7\xed\x2b\xf4\x41\xa0"
+ "\x7f\x07\x17\xa6\x90\x10\x89\x1e\xa0\xef\xf7\xcb\x4d\x21\xe8\x7b"
+ "\x1c\x01\x73\x53\xa2\x47\x30\xa3\xc7\x05\x91\x1e\xed\xe8\x3b\x07"
+ "\xf4\x68\x07\x7a\xb4\x03\x3d\x32\x39\x3d\x10\xe7\xa7\x58\x02\xa9"
+ "\xf0\x83\x1e\xe3\x69\x74\xa6\xc7\x0a\x91\x1e\xa7\x7a\x43\x0f\xdd"
+ "\xc4\xce\xf4\xb8\x23\xbc\x3b\x7a\xc8\x73\x62\x44\x18\xd2\xa3\xa3"
+ "\x48\x9c\x13\x23\x70\x4e\x64\xa8\xef\x81\xb5\x08\xc7\xf4\x70\xcd"
+ "\x5e\x36\x27\x30\x57\xd9\x3b\xcf\x5a\xd5\x15\x0d\x40\x97\xd9\xd4"
+ "\xce\x74\x5f\x91\x2e\x9c\x1e\xc3\xa3\x8a\xbf\xe2\xe3\xaf\x7b\x0a"
+ "\xd7\x0c\x9c\x1b\x48\x1f\xa0\x13\xcc\x1f\x77\x39\x28\x9d\xbf\xbf"
+ "\x42\x9b\x02\xce\x13\x9c\x23\x38\x1f\x2a\x13\x4e\x63\xde\x79\xf5"
+ "\xd1\xe8\x72\x82\xdf\x61\x8f\xc6\xec\x05\x5a\x15\x10\xfb\x2b\x40"
+ "\x9b\x24\xdc\x6f\x42\xc2\x30\x17\xe5\xd1\x98\x6c\x94\x17\xb4\xc0"
+ "\xf3\x7d\xed\x40\x27\x7b\x6b\x48\xbf\x1c\xd0\xa7\xf0\xfb\xac\xf3"
+ "\x77\x59\xcc\xbb\x4d\xfd\x42\xeb\xe0\xbc\xc6\x06\x34\x82\xb9\xa3"
+ "\x98\x33\x8e\x7c\xdc\xdf\xe9\xc9\x96\x7a\xe2\x3f\x60\x2e\xa7\x91"
+ "\xdd\x69\xce\x4c\x9e\x8b\x73\x26\x03\x68\x74\xc2\x4b\x1a\x85\x31"
+ "\x7b\x32\xe8\x99\x06\xd0\x87\x74\xb0\x4e\x02\x8d\x74\x7b\x3d\xd1"
+ "\xc8\x5e\x64\x4d\xb0\x6b\xfd\x36\x60\xee\x06\x61\xd1\x34\x95\x00"
+ "\xba\x53\x3b\xe8\xa8\x47\xcd\x36\x92\x0a\x3a\x44\xca\x69\xe2\x57"
+ "\x3d\xed\x0b\x52\x6d\x2a\x65\x71\xd7\xd1\x8e\x8c\xf9\x50\xaa\x6d"
+ "\xa5\x80\x57\xe1\x2c\xd6\xea\x16\x56\x36\x93\x15\x2f\x12\x1f\x96"
+ "\xa3\x36\xa6\x88\xe4\x00\x7f\xee\x7a\xbe\x48\x2d\x6c\x18\x50\x44"
+ "\x03\x30\x8f\x13\x31\xa2\x9f\x7a\xfa\x72\x12\x50\x99\x50\x81\xb1"
+ "\x36\xbf\xc5\xb8\xe6\x55\x16\x68\xd3\x4c\xdb\xed\xb0\x66\x6c\xcd"
+ "\xa4\xa5\x98\xdb\xe2\xbe\x64\x26\x8b\x23\xbf\xd8\x51\x16\x41\x7b"
+ "\x99\x31\xed\x0d\x90\xbd\xee\x64\xfb\x35\xe0\x9c\xaa\x72\x9e\x05"
+ "\xae\xff\xd3\x62\xec\x17\x8b\x23\x6b\xe3\xc7\xfb\x30\x46\xf9\x90"
+ "\xf0\x97\xf6\xa5\x99\x35\xf9\xa0\xfb\x82\x8c\x06\xf5\xee\x9c\x4c"
+ "\xb9\x5e\x98\x50\x7d\xdc\xca\xec\x96\xe6\xf4\x04\xbf\xfc\x14\xf4"
+ "\xcf\xc2\x3c\x19\xb8\x66\xff\x53\x18\xfa\x74\xd0\x22\x58\xaf\x86"
+ "\x0c\x35\x96\xcc\x32\xab\xe5\x75\xf9\x4e\x58\xcb\xac\xd9\x8f\xeb"
+ "\x69\x3a\xe6\x13\xd9\x0f\xef\x45\x37\x0d\xd0\xbe\x5b\x6f\x65\x98"
+ "\xf2\xde\xac\x6c\x35\x05\x9e\xb6\x02\x3e\x54\x7c\xf5\xdf\x2c\x6f"
+ "\x70\xa3\x6a\xe4\x6b\x47\x62\x6c\x04\x9f\x3f\xfd\x57\xf8\x8d\xe0"
+ "\xce\xbd\x6d\xea\x1d\xd6\x36\xbf\xdb\x22\xd3\x1b\xe4\x9c\xa9\xce"
+ "\xb9\x51\x11\x67\x76\xcd\x82\x36\x11\x67\xea\x33\xd4\x1c\x5b\xa2"
+ "\xd0\xb6\xe7\xef\x8a\x2d\x95\x2d\x17\x48\x1a\xf0\x71\x65\x42\x11"
+ "\xcb\xf9\x32\x10\xf0\x5d\x58\x01\x78\xd2\x01\xba\x3f\xe0\x09\xe2"
+ "\xc0\x56\xc0\x0f\x61\x05\xe8\xfc\xed\xa0\xf3\x8b\x38\x82\xb2\x17"
+ "\x1e\x5f\x04\x1e\x0d\x2c\x87\x73\x40\x27\x01\x70\x1d\xf0\x44\xff"
+ "\x66\x0a\x19\xf9\x26\xf0\xe8\x16\xc4\x11\x90\x8b\xa7\x18\x00\x47"
+ "\x5e\x01\x1c\x49\x62\xb9\xab\x43\xb6\xaa\x39\x7e\x7c\x5c\x9f\xad"
+ "\xce\x97\x72\xd7\xb3\xf1\xbd\xeb\xb6\x2a\xe4\x8f\xb8\x0c\xec\xab"
+ "\xda\x8e\xeb\xd3\x8a\x18\x9f\x2a\x0b\xf0\xc8\xa6\x70\x2d\x9e\x63"
+ "\xf3\xf6\x95\x84\x7e\x02\xe7\xb5\x28\x1c\x93\x6d\x17\x49\x04\xcb"
+ "\xef\xfa\x63\x48\xbf\xb5\x0b\x49\xf8\xd6\x8b\x64\xe4\xd6\x85\x44"
+ "\x0f\xf3\x55\xbd\x15\xfa\x30\x63\xb1\x96\xb0\xdc\x2a\x7e\xb7\x45"
+ "\xc1\x79\xb7\xb9\x55\x40\xae\x0e\xd9\x8a\x73\x66\x91\xde\xd1\x27"
+ "\x5b\xfe\xf8\x22\x3b\x8c\x1d\x8b\x43\xa7\xba\x6b\x19\x9b\x0f\x01"
+ "\x97\x8a\xb9\x9c\x7f\x57\x31\xf7\xbb\xbc\xb6\x13\x74\x95\x3e\xcd"
+ "\xaa\xbb\x5e\xa4\x79\x42\x91\x21\x85\xa8\x9a\xa5\x6b\x20\x7b\x0a"
+ "\x40\xab\x7b\x33\x48\x86\x30\xe8\x65\x7d\x75\xf2\x05\xcc\x55\xe0"
+ "\xe5\x3c\xbc\x0b\xa3\xda\xa8\xec\xf9\xe3\x77\x30\x5f\xa1\xf5\xe3"
+ "\x77\x6e\x6b\x26\x11\xf4\x8f\x40\x8f\x79\xf0\xae\xcd\x64\x64\x61"
+ "\x33\xbc\xeb\x2b\xfc\x5d\x11\x33\x90\x2e\x42\xe6\xdb\x88\xdb\x5d"
+ "\xe6\x25\x33\xff\x51\xaf\x46\x1b\x11\x60\xd8\x2d\x74\x04\xfa\x21"
+ "\xb3\x38\x41\xad\xd5\xb6\xd3\x04\x9f\x8b\x76\xa2\xea\xcb\x8c\xa7"
+ "\x9f\x46\x5e\x16\x8a\xc6\x96\xcc\xac\x03\xde\x6e\x4d\x00\x19\x70"
+ "\x6c\xc9\xfe\x7a\xd4\xf3\xb9\xcc\x67\x52\xdd\x99\x81\x72\xda\x27"
+ "\x70\x0e\x79\xdf\x89\xe7\x33\x90\xe7\xf1\x3a\xe3\x7b\xb8\xaf\xba"
+ "\xee\x1c\xc1\xf6\x9c\xdb\x41\xfa\x4b\x6d\x35\xaa\xfe\x79\x0c\xb6"
+ "\x85\xbc\x80\xf6\x1d\x9c\x6b\x9c\xf6\xa5\xe8\x73\x1e\x42\x87\x04"
+ "\x46\xf0\xb2\x19\x6d\x4d\x5a\xe4\x01\xc6\x2b\x80\xdf\x18\x07\x9a"
+ "\xd2\x18\x1f\xe0\x33\xec\x67\x3f\xa0\x77\x84\xc4\x17\x70\x2e\xd8"
+ "\x95\x37\x06\xae\xd2\xa2\x4e\x13\x8c\xff\xf7\x94\x3f\xbc\xa3\xdf"
+ "\x3f\x8f\xf6\xe8\x0f\xa7\xb3\x62\x6c\xf7\x3b\x10\x37\xed\x57\x9c"
+ "\x30\xb3\x85\x63\x26\x62\x92\x84\x9b\x0c\x9b\x58\xbe\x89\x52\xf4"
+ "\xdd\x4c\x60\x7d\xf4\x12\x37\x2b\x5b\x64\xdc\x9c\x62\x70\xc2\xcd"
+ "\x16\xda\x2e\x84\xb9\xc3\x4d\xfd\x18\x25\x6e\xea\x1f\x54\xe2\xe6"
+ "\x3d\x5b\x5c\x71\xb3\x33\x66\xea\x97\xbb\xc3\x4b\xd0\x63\xee\x68"
+ "\x56\xdd\x33\xc9\x33\x56\xea\x77\x78\x8f\x95\xbf\xfa\x48\x89\x95"
+ "\xfa\xa6\xbf\x5f\xac\xbc\xfb\x49\x05\x56\x6a\x7b\x88\x95\xcd\x0c"
+ "\x2b\x83\xe9\x0f\x30\x27\x44\xfc\xd8\x3a\xcf\x03\x56\xce\xeb\x66"
+ "\x2e\xfc\xd1\x13\x56\xde\xbd\x5d\x89\x95\x77\x1f\x57\x62\xe5\xdd"
+ "\xaf\xc9\x58\x29\x5e\xbb\x2e\x58\x79\x77\xd1\xcd\xc1\xca\xbb\x8b"
+ "\x18\x56\x5e\x44\xac\xbc\x67\x65\xf7\x58\xa9\xdf\xe9\x1e\x2b\xf1"
+ "\x3c\x62\xa5\x7e\xa7\x8c\x95\xa7\xbb\xc1\xca\xf0\x78\x2f\xb0\x32"
+ "\x98\x61\xa5\xd6\x03\x56\xce\x83\xb1\x12\xf9\x82\xf1\x9e\x0b\x6f"
+ "\x88\x58\x19\xe2\xc0\xca\x1e\xf0\x87\x77\xf4\x0b\x8f\xeb\x0a\x2b"
+ "\x85\x7c\x2e\x5f\x22\x56\xd2\x20\x11\x2b\xe7\xdb\x48\xca\x49\xc0"
+ "\xc8\xe3\xcd\xcc\x0f\x81\xf9\xf9\xc2\x2f\xf5\x39\xc4\xa2\x61\xc6"
+ "\xdd\x30\x5e\xd5\xa6\x12\x86\x4d\xcc\x5f\x75\x12\x62\x55\x09\xd4"
+ "\x2d\x70\xc8\x9d\x0c\x3b\x4f\x8a\xd8\x19\x2b\x62\xe7\x8c\x9f\x80"
+ "\x9d\xcf\x23\x2d\x47\x2d\x6e\x53\x4b\xd8\xb9\x1e\xb0\x73\x14\x93"
+ "\x1f\xf0\x3b\x28\xc7\xce\x88\x0b\x52\xbf\xd0\xa6\x59\x9d\xf8\x06"
+ "\xe1\xfd\xba\xdc\x19\x47\x9f\x62\xed\x1d\x32\xce\x6b\x21\x0e\x2c"
+ "\x8d\x95\xb1\x14\xda\xda\xe2\x19\x47\x47\xb5\x38\x70\x34\x13\x70"
+ "\xf4\x8c\x13\x8e\x82\xde\xf4\x1e\x62\x1e\xe0\x68\x2b\xc3\xd1\x8f"
+ "\x45\x1c\xbd\xd7\x7e\x24\x16\x70\xf4\x29\x09\x47\xef\x8d\xb0\x66"
+ "\xee\xb0\x5a\xb3\xba\xc7\xd1\x56\x86\xa3\x86\x1b\x8f\xa3\x65\x2e"
+ "\x38\x0a\xba\xeb\x9b\x99\x1e\x70\x54\xe2\x47\x86\xa3\x19\x32\x8e"
+ "\xb2\x71\xbd\x6f\x73\x55\x1c\x8c\x7b\x9c\x81\xe9\x6e\x0e\x1c\x35"
+ "\x94\x70\x1c\x85\x73\xcc\x7e\xb2\x14\x70\x14\xf8\x2f\xbd\x12\xe3"
+ "\x0d\x92\x28\xe8\xa3\x16\xf1\x75\x1b\xcc\x19\x1c\x23\x07\x9e\xce"
+ "\x83\x39\x83\x18\x73\x05\xe6\x0c\xe0\xe8\x8c\xab\x5a\xc2\xe6\x4b"
+ "\x16\xcc\x97\x66\x0f\x79\xfd\x24\xff\x59\x8f\x78\x7a\xdf\x25\x25"
+ "\x9e\x46\x8c\x54\xe2\xe9\x7d\x27\x65\x3c\x15\xaf\x21\x9e\x02\xcd"
+ "\x60\x7c\xf4\x88\xa9\xbd\xc3\xd3\xfb\xcc\x0e\x3c\x55\x8b\x78\x3a"
+ "\xaf\x7b\x3c\x65\xdf\x00\x3d\xe0\xa9\x33\x36\x78\xc6\xd3\xfb\xcc"
+ "\x32\x9e\x46\x54\x3a\xf0\xb4\xd6\x13\x9e\x8e\xb2\xb8\xc7\x53\x3c"
+ "\x8f\x78\x3a\xca\xe2\xc0\xd3\x5a\x37\x78\xfa\x94\x33\x9e\xde\xbf"
+ "\x8f\xe3\x69\x09\xc3\x51\xc4\xd4\x2a\x0b\xf0\x07\xce\xb9\xc4\x02"
+ "\x86\xa9\x02\x60\x2a\xe6\x3a\xc6\x3c\x57\xe8\x27\xef\x0e\x53\x39"
+ "\xe6\x9a\x08\xe2\x2a\xce\xcd\xf4\xc9\xa0\xef\xc2\x5a\x04\x63\xc2"
+ "\xd6\x5e\x69\xfc\xb6\x39\xe1\xeb\xcc\xe5\x5a\x94\xed\x14\xbc\x22"
+ "\x48\xbc\x72\x45\x8f\x3e\xb3\x0a\x5e\xf1\x8e\x96\xf7\xef\xf5\x84"
+ "\xad\x9e\x74\xf7\x23\xa8\xbb\x4f\x27\xea\x15\xd3\x01\x5f\x63\x50"
+ "\x77\x2f\x76\xd1\xdd\x8b\x3b\xeb\xee\x27\xba\xc6\x51\xaf\x74\xf7"
+ "\x67\x91\x86\xbf\xde\xa3\xc4\xd1\x5f\xef\x53\xe2\xe8\xd8\x07\xb1"
+ "\x5f\x1c\xc7\x8b\xdd\xeb\xee\x6c\x9e\xff\xa6\xaf\x43\x77\xaf\x55"
+ "\xe2\xa7\xac\xbb\x8f\x39\xef\x19\x47\x7f\x33\x5a\x21\x8f\xce\x10"
+ "\x71\x74\x96\x88\xa3\xb3\x64\x1c\x3d\xfa\x85\x24\x8f\x8e\x7e\xfa"
+ "\x70\xad\x33\x8e\xfe\x26\xd9\x81\xa3\x75\x9d\x71\x54\xc2\x50\xc4"
+ "\x53\x6c\x07\x6d\x59\x3b\x01\xa7\xdf\x9f\x65\x50\x73\x5b\x6d\x1c"
+ "\x8e\x9d\xbf\xab\xad\xb6\xb2\xe5\x2a\x49\x8b\x45\x3c\x2d\x60\x78"
+ "\x1a\xa8\x22\xf1\x80\x7d\x03\x71\x1f\x40\x21\x7e\xbf\x4f\xe2\x79"
+ "\xe2\xd0\xbe\x24\xbc\xc2\xf3\x8e\x4a\x76\x26\x78\x5f\xf6\xdd\xfe"
+ "\xc5\xd3\x22\xa6\x5e\x83\xf1\x00\x9e\x7b\xf3\x1a\x60\x6a\x92\x1b"
+ "\xd9\x74\x05\x60\x6a\x8a\x93\x6c\x0a\x73\xff\xe3\x59\xae\x98\x3a"
+ "\xfa\x5c\x15\xf2\x0a\x62\xaa\x42\x8f\x2f\xfe\x05\xe8\xf1\x63\x1e"
+ "\x52\x62\xe9\x18\x83\x12\x4b\xc7\xdc\x25\x63\xa9\x78\xed\xba\xc8"
+ "\xa6\x63\xc6\xdf\x1c\xd9\x74\xcc\x78\x59\x8f\x1f\x3b\xd4\x81\xa5"
+ "\xc7\x3d\x61\xe9\x6f\xc6\xbb\xc7\x52\x3c\x8f\x58\xfa\x9b\xf1\x0e"
+ "\x2c\x3d\xee\x46\x8f\x57\x60\xe9\x58\x3b\xc7\xd2\x62\x2e\x9b\xd6"
+ "\x4a\xb2\x69\xf1\xdf\xa0\x1e\x3f\xd6\xe3\x1e\x7a\x4f\x7a\xfc\x91"
+ "\x16\x8e\x9f\x88\x4f\x12\x86\xca\x7a\x7c\xb1\x67\x3d\xbe\x1b\x0c"
+ "\xf5\x4a\x16\x65\x18\xfa\x80\x5d\x89\xa1\x91\x2a\x25\x86\xfe\xcb"
+ "\x62\x57\x0c\xed\x8c\x9f\x91\x8f\xb8\xc3\x4e\xae\xc7\xff\x8b\xce"
+ "\x33\x6e\x46\xce\xf7\x1e\x37\x1f\x7c\x4d\x89\x9b\x91\x25\xff\x18"
+ "\xb8\x39\xee\x36\x05\x6e\x6a\x7b\x88\x9b\x3f\x8b\x4e\x3f\xce\xc5"
+ "\xfe\x39\xce\xc5\xfe\x39\xce\xc9\xfe\x39\xee\x3a\xda\x3f\xc7\xdd"
+ "\x24\xfb\xe7\xb8\x44\x59\x06\xfd\x97\xa7\xbb\xc7\xcd\xc8\x44\xf7"
+ "\xb8\x89\xe7\x11\x37\x23\x13\x65\xdc\xec\x4e\x06\x1d\x3f\xc6\x0b"
+ "\xdc\xfc\x85\xeb\xf4\xe3\xbb\xb4\x7f\xba\xd3\xe9\x11\x37\x19\x5e"
+ "\xd6\xba\xe8\xf4\xd3\x9d\x75\xfa\x62\x59\xa7\x9f\xc8\x71\xab\xda"
+ "\x96\xaf\xd4\xe9\xaf\x3b\x8e\x3e\xf4\xb8\xd5\x61\x0f\x7d\x1d\x70"
+ "\xf4\x21\x96\x5f\xda\xea\xb0\x87\x46\x55\x4a\xfd\xe2\x3a\xfd\x7a"
+ "\xc2\xfb\xe5\x46\xa7\x67\xbe\xb6\x0f\x6d\x76\xe8\xf4\xb5\xae\x3a"
+ "\x7d\xd4\x4a\xcf\x98\xfa\x90\xd1\xad\x4e\x8f\xfa\x37\xc3\x54\x03"
+ "\xc3\xd4\x6b\x9b\x9c\x31\xf5\x5f\x4f\x33\x4c\x7d\x42\xc2\xd4\x7f"
+ "\xd5\x58\x61\x6e\x5a\xfd\xba\xc7\x54\x6c\x47\xc6\xd4\x84\x9f\x07"
+ "\x53\x8d\x3d\xc7\x54\xe7\xfd\xa7\x1f\xc3\xbb\x3b\x30\x95\x8d\xf1"
+ "\xc3\xcb\xab\xe2\x10\x53\x13\x5c\xf4\xfb\x62\xf7\xfa\xfd\x61\xa2"
+ "\xc6\xf1\x91\xf4\x7b\xa4\x01\xc3\x9b\x1b\xaa\xdf\x3f\x7c\x4c\x89"
+ "\xad\x51\x1a\x25\xb6\x3e\xbc\x47\xc6\x56\xf1\xda\x75\xd1\xef\x1f"
+ "\xae\xb9\x39\xfa\xfd\xc3\x35\x32\xb6\x46\xed\xea\x1e\x5b\x1f\x2a"
+ "\x77\x8f\xad\x78\x1e\xb1\xf5\xa1\xf2\x2e\xb1\xf5\x09\x67\x6c\x7d"
+ "\x64\x8b\x84\xad\xb2\x7e\x0f\xfc\x81\xf3\x2f\x31\xbf\xf7\xfa\xfd"
+ "\x93\x37\x5b\xbf\x7f\xa4\xd0\x2b\xfd\x7e\x13\xe0\x2c\xe8\xe2\x2b"
+ "\x8e\x81\x7e\xff\xb4\xa8\xdf\xd7\x15\xb9\xe8\xf7\x45\x9d\xf4\xfb"
+ "\xd4\xa7\x45\x4c\x85\x39\xc5\x30\x75\x56\x71\xef\xf5\xfb\x67\x90"
+ "\x86\x8f\x6e\x56\x62\xea\xa3\x5b\x94\x98\xfa\xc4\x28\xec\x17\xc7"
+ "\xf4\x22\xf7\xfa\x3d\x9b\xe7\x8f\x9e\x57\xe8\xf7\xd0\xbf\xce\xfa"
+ "\xfd\xe3\xa7\x15\x98\x3a\xc3\x19\x53\x1f\x0b\x56\xc8\xa9\xf0\x5e"
+ "\x88\xa9\xef\x9c\xe1\x98\xfa\xee\x19\x27\x4c\x9d\xf2\xae\x88\xa9"
+ "\x13\x1e\x3f\x3c\xcd\x19\x53\x1f\x8b\x91\x30\x95\xe1\xe5\x0c\xab"
+ "\x3a\x3d\xa6\xb3\xdf\x09\xf3\xf7\x41\x5f\x20\x68\x1b\xf7\x56\x61"
+ "\x9b\xbb\xce\x24\x74\xef\x6f\x12\xe3\xde\xdf\xa4\x3a\xd1\x44\x2a"
+ "\x1a\xf2\x99\x9f\x49\x21\xfa\x99\xac\x22\x61\x85\xed\x7c\xef\x3f"
+ "\xcb\x11\x72\xcd\xfd\xbe\xff\x17\x9f\x93\x71\x16\x7d\xb2\xde\x44"
+ "\x9f\xac\x6b\xdc\x07\x08\xe8\xdd\x79\x9f\xbf\x24\x37\x01\x1e\xec"
+ "\x39\xe3\x8a\xb3\x13\x4e\x56\x21\xff\xc4\x26\xb8\xe8\xfc\x45\xbf"
+ "\x00\x9d\xff\xf1\xfb\x95\xf8\xfa\xf8\x6c\x25\xbe\x3e\x3e\x54\xc6"
+ "\x57\xf1\xda\x75\x91\x5d\x1f\x8f\xb8\x39\xb2\xeb\xe3\x11\xb2\xce"
+ "\xff\xc4\x00\x07\xbe\xd6\x38\xe1\xeb\x19\x67\x7c\x7d\x2c\x94\xe1"
+ "\xeb\x19\x57\x7c\xc5\xf3\x88\xaf\x8f\x85\x3a\xf0\xb5\xc6\x45\xe7"
+ "\x3f\xe3\x8a\xaf\x4f\x5c\x62\xf8\x0a\xbc\xa0\x94\x5d\x8b\xba\xd7"
+ "\xf9\xeb\x7e\x69\x3a\xff\x13\x1e\xe3\x7f\xbb\xd5\xf9\x11\x53\xe7"
+ "\x73\x4c\x45\xcc\x92\x70\x55\xd6\xf9\x8b\x3c\xea\xfc\xdd\xe1\xaa"
+ "\x57\xb2\x2a\xc3\xd5\x7f\xbb\xa4\xc4\xd5\x7f\xbb\xaa\xc4\xd5\xdf"
+ "\x2e\x77\xc5\xd5\xce\x98\x3a\x71\x8c\x3b\x3c\xe5\x3a\xff\x6f\xf5"
+ "\x9e\xb1\x74\x62\x9c\xf7\x58\xfa\xe4\x3a\x25\x96\x4e\xdc\xf1\x8f"
+ "\x8b\xa5\x4f\xdd\xa5\xc0\x52\x6d\x0f\xb1\xf4\x67\xb1\x03\x3c\xb5"
+ "\x52\x89\xa5\x4f\x95\x28\xb1\xf4\xa9\x39\x32\x96\x8a\xd7\xae\x0b"
+ "\x96\x3e\x95\x7a\x73\xb0\xf4\xa9\x54\x59\x56\xfd\xed\x73\xdd\x63"
+ "\xe9\xc4\x04\xf7\x58\x8a\xe7\x11\x4b\x27\x26\xc8\x58\x7a\xba\x1b"
+ "\x2c\x9d\xf4\x90\x17\x58\xaa\xb4\x03\xb8\x62\xe9\x4d\xb7\x03\x4c"
+ "\x1a\xef\x95\x1d\x40\xc2\xd2\xa7\x3b\xdb\x01\x10\x5f\x99\x1d\x00"
+ "\xc6\x4b\xc2\x30\x66\x07\x98\xc0\xb1\xac\xda\x96\xad\xb0\x03\x5c"
+ "\x7f\x6c\x9d\x3c\xd9\xea\xb0\xa7\x66\x02\xb6\x4e\x66\x31\x9c\xac"
+ "\x0e\x7b\x6a\xf4\x79\xa9\x5f\xdc\x0e\xf0\x3a\xe1\xfd\x72\x63\x07"
+ "\x78\x94\xb5\xb7\x5d\x61\x07\x70\xc2\x5a\x68\x6b\xb3\x67\x9c\x9d"
+ "\x5c\xae\xb0\x03\xd4\xcb\x38\x7b\x0d\x7d\xd4\x01\x07\x19\xce\x0e"
+ "\x71\xc6\xd9\x29\x6d\x0c\x67\x1f\x95\x70\x76\x4a\x40\x2b\xcc\xcd"
+ "\x56\x6f\x71\x16\xf7\x11\x9c\x89\xbb\x39\x38\x5b\xea\x05\xce\x3a"
+ "\xd9\x06\xf6\xc0\x78\x38\x70\x96\x8d\xfb\xd4\x8d\x55\xb1\x88\xb3"
+ "\x71\x2e\xb6\x81\x22\xf7\xb6\x81\x43\x37\xc3\x36\x30\xf5\x82\x12"
+ "\x6f\xa3\x75\x4a\xbc\x9d\x7a\x42\xc6\x5b\xf1\xda\x75\xb1\x0d\x4c"
+ "\x6d\xb9\x39\xb6\x81\xa9\x2d\x32\xde\x46\x1f\xee\x1e\x6f\x27\xd7"
+ "\xb8\xc7\x5b\x3c\x8f\x78\x3b\xb9\xa6\x4b\xbc\x7d\xd4\x19\x6f\x9f"
+ "\xde\x23\xe1\xad\x6c\x1b\x28\x12\x6d\x03\xd9\xdd\xdb\x06\xea\x3c"
+ "\xd8\x06\x1e\xbf\xd9\xb6\x81\xa7\x4b\xbd\xb1\x0d\xb4\x6d\xe2\x7e"
+ "\xfb\x2b\xd0\x6f\xff\x45\xc0\xdf\xe8\x2f\x60\x0c\xba\xf7\xdb\x4f"
+ "\x95\xfc\x4f\xe3\x0a\x44\x9c\x2d\x70\x6b\x1b\x38\xd2\xe4\xd9\x36"
+ "\x70\xe4\xb8\xb3\xff\xe9\x33\x1f\x29\xbf\x5b\x3d\xb3\x47\xfa\x6e"
+ "\x75\xe4\x2b\xc4\xd9\x67\x59\x1e\x28\x61\x43\x18\x8f\xe3\xad\x7a"
+ "\xd6\x88\xfd\x74\xe7\xc7\xff\xb1\xe0\xfc\x2d\xeb\x77\x83\x1d\xb6"
+ "\x82\x1a\xc4\xdb\x02\x22\xd0\x04\x3f\x8c\x23\xce\x6c\x05\xcf\x22"
+ "\xef\x3d\xbb\xd8\x19\x77\xf7\x9f\x72\xc6\xdd\xdf\x45\x49\xb8\x6b"
+ "\x07\xdc\xdd\x57\x5f\xc0\xed\xaf\xcf\x73\xdf\xd4\x9d\xcf\x3b\xf9"
+ "\xa6\x7e\xf1\xa9\x88\xbb\xd3\x1e\x3a\x6c\x82\xf7\xef\xca\x7f\x0a"
+ "\xee\xdf\x7d\xaa\xa7\x3e\xa8\x05\x6e\x7d\xa7\x44\x7c\x72\xeb\x3f"
+ "\x05\x7d\xd5\x6e\x11\xe7\xaa\x1d\xe6\xe9\x16\x27\xff\xa9\xc2\x14"
+ "\x98\xcf\xe2\xbe\x92\x2e\xfd\x50\x9f\x97\xfd\x50\xe9\x86\xb0\x50"
+ "\x5c\xdf\x84\x8d\x61\xa6\x76\x9a\xe0\x43\x83\xc3\x42\xf1\xf9\x1d"
+ "\x1d\xb0\xee\x3c\x16\xe3\x23\xea\x75\x88\x3d\x03\xf9\xb8\x4f\x4b"
+ "\xb6\xc3\x5a\x63\x87\xb5\x06\x68\x46\x6c\x28\x9b\x6c\x0a\xd3\x14"
+ "\x82\x9e\x67\xcb\x64\x39\x5f\xfb\xe5\x81\xae\xb7\x0d\xf5\xbc\x8b"
+ "\x30\x37\xd2\xf5\x6a\xec\x8f\x84\xa3\x81\x4d\xf0\x1e\x17\xbb\x96"
+ "\xe5\x6c\x3f\xca\x38\x6a\x7c\xea\x08\x3c\x73\xfa\x82\x2a\xe4\xdd"
+ "\x18\x79\x4f\x01\x93\x99\x3d\xf8\xca\x62\x5f\x78\xcc\x44\xe0\x85"
+ "\xeb\x60\x93\x70\xee\x8f\x12\xd7\xa7\x1f\x52\xe2\xfa\x74\xab\x12"
+ "\xd7\xa7\xef\x92\x71\x5d\xbc\x06\xb8\x6e\xcf\xe4\x72\x34\xac\x7d"
+ "\xbd\x94\xa3\xa7\x97\x49\xb8\x2e\x88\xb8\xbe\xb5\x07\xb8\xde\xa5"
+ "\x1c\xed\x84\x4b\x9e\x71\x7d\x7a\x99\x6c\x93\x78\x76\xbb\x5b\x1f"
+ "\xd9\x53\xce\xb8\xfe\xbb\x89\x0c\xd7\x4f\xb9\xe2\x3a\x9e\x47\x5c"
+ "\xff\xdd\x44\x8f\xfb\x09\x4e\xb9\x7e\x4f\xfb\xfd\xab\x0c\xd7\x6b"
+ "\x45\x1f\xd9\x1a\x2f\xf6\x13\xd4\x72\x4c\x97\xb0\x1c\xed\x55\x37"
+ "\xd7\x26\xf1\xfb\x35\xde\xd8\x24\x18\x96\xb7\x70\x2c\x47\x6c\x94"
+ "\xf0\xbc\x27\xfb\x09\xba\xc3\x73\x49\x6e\x46\x3c\xf7\x24\x37\x2b"
+ "\xf1\x3c\xe6\x55\x25\x9e\xc7\xbc\xa6\xc4\xf3\xd8\x57\x95\x78\x1e"
+ "\xbb\xc6\x15\xcf\x3b\x63\x79\xcc\x49\x77\x38\x6e\x78\x16\x6d\x14"
+ "\xb1\xa3\x3d\x63\xf8\x73\x1a\xef\x31\xfc\x79\xd5\x3f\x1c\x86\x6b"
+ "\x5d\x31\xfc\xf9\xf1\x88\x41\xf6\x2c\x17\x0c\x9f\x27\x62\xb8\x88"
+ "\x23\xdb\x9a\x45\x59\xd8\x15\xc3\x5b\xe0\x3d\xba\xd1\xc7\x6d\x3f"
+ "\xb8\x62\xf8\x0b\xf7\x2b\x30\x5c\xdb\x0d\x86\xcf\xe3\x76\x10\x85"
+ "\x5f\xae\x07\x5b\x08\xbc\x47\xd4\x16\x0f\xb2\xb9\x34\x66\xce\xfd"
+ "\x51\x62\xf8\x0b\xaf\x29\x31\xfc\x85\xbd\x4a\x0c\x7f\x61\xb1\x8c"
+ "\xe1\xe2\xb5\xeb\x22\x9b\xbf\x90\x7d\xdd\x65\x73\x89\x3f\xba\xc4"
+ "\xf0\x17\xb2\x65\xd9\x3c\x76\x4e\xf7\x18\xfe\x5c\x80\x7b\x0c\xc7"
+ "\xf3\x88\xe1\xcf\x05\x78\xdc\xe7\xd0\x09\xc3\x5f\x7c\xdc\x0b\x0c"
+ "\x57\xda\x42\x24\x0c\x17\x6d\x21\xdb\x9c\x6c\x21\xf6\x4c\x6e\x0b"
+ "\xd9\xd2\xcc\x79\x63\xa0\x8a\xf3\x29\xf0\x4f\xc8\x56\x75\xd7\xba"
+ "\xdb\x96\x5e\xd9\x41\x5e\x9c\xe0\x8d\x1d\x84\xe1\x37\xee\x71\x78"
+ "\x0e\x70\xbb\xa6\x87\x7b\x1c\x26\x4a\x7b\x1c\xf2\x3d\xec\x71\x10"
+ "\xf1\x7c\xc6\x4f\xc0\x73\xb6\xc7\x61\xc6\x74\xa5\x8d\x79\xc6\x73"
+ "\x92\x8d\x99\xe3\xf9\xac\xb9\x4a\x3c\x9f\x95\xe0\xd8\xf3\x00\x98"
+ "\x5f\x6d\x58\xdf\x69\xcf\x83\x03\xdb\x99\x1d\x74\xc6\x1e\xe3\xb3"
+ "\x0d\xc4\x81\xef\xb1\x32\xbe\x43\x5b\x43\x15\xd8\x5e\xef\x8c\xed"
+ "\x33\x4c\x0a\x6c\x3f\x53\xa0\xf4\x8f\xa8\x37\x38\x61\xbb\xb4\xe7"
+ "\x61\xe6\xe9\xc3\x75\xdd\x60\x3b\xdc\xdf\xf3\x3d\x62\xd7\x17\xdb"
+ "\xa5\xfd\x0d\x6e\xb1\xdd\x79\x7f\x83\x93\xff\x03\x62\x3b\x8b\x4d"
+ "\x35\xd8\x05\xdb\x57\x24\xa8\xed\x07\x61\x3e\x00\xae\xe3\x1c\xb1"
+ "\x53\xc0\x76\x36\xde\x71\x21\xce\xd8\xde\x91\xc9\xb1\xfd\xcd\xe6"
+ "\x9f\x8e\xed\x0e\x79\xd8\x19\xdb\x9f\x40\x6c\x8f\x1f\xcc\xf7\x5f"
+ "\x64\xf4\x6c\xff\x85\x8b\x7f\xc6\x9b\x3d\xb0\xbf\x74\x89\xf1\x6e"
+ "\xfa\xa5\xc4\xf8\xf8\x05\x4a\x8c\x8f\x2f\x52\x62\x7c\xfc\x74\x19"
+ "\xe3\xc5\x6b\xd7\x45\x4e\x8f\x9f\x7f\x73\xec\x2f\xf1\xf3\x65\x8c"
+ "\x9f\xf5\x64\xf7\x7b\x2f\x66\x34\xb9\xf7\xcd\xc0\xf3\x88\xf1\x33"
+ "\x9a\xba\xdc\x7b\xa1\xb0\x77\xbf\xf4\xa0\xdb\xbd\x17\x35\x3f\x9f"
+ "\x6f\x86\x33\xaf\xb8\xda\x5f\x7a\x6f\xfb\x7e\xc9\x63\xfe\x5f\x4f"
+ "\xf6\x17\xdc\x7b\xb1\xe2\x84\xd3\xde\x8b\xba\xee\xf7\x5e\xa4\x4e"
+ "\xef\xa1\xfd\xa5\x0b\xdf\x8c\x23\xd1\xce\xfe\x6e\xb3\xc7\x28\xf1"
+ "\x7d\xf6\x83\x0e\x7c\x7f\x06\xf1\x3d\x61\xb2\x12\xdf\x13\x26\x61"
+ "\x3f\xdd\xed\xc5\xf8\x58\xf1\x5d\x71\xf6\x46\xa5\xaf\x86\x8b\xfd"
+ "\xe5\x19\xe4\xbd\x97\xed\x0a\x7c\x3f\xe3\x8c\xef\xb3\x8d\xee\x64"
+ "\x77\xb4\x7b\x33\x9f\xe2\x19\x4e\x7b\xda\xa6\x48\xfe\x6f\x73\x0e"
+ "\x1f\x8e\x81\xf7\x37\x79\xf0\x75\x9b\xc1\x7d\xdd\x98\x6f\x1b\xda"
+ "\xc1\xa1\xad\xf7\x67\x18\xd4\x69\x71\x54\x40\x5f\x37\x57\x3f\x37"
+ "\xf4\x7d\x43\x5f\xb7\xca\x84\x7c\x8f\x7e\x6e\xc8\x9b\x9e\x7c\xdd"
+ "\xa0\xdf\xc1\x0c\xeb\xcf\x8a\x58\x2f\xfa\xba\x15\x26\xc9\xbe\x6e"
+ "\x0a\xac\x77\xe3\x3f\xbc\xe7\x4c\x86\x7b\x39\x3e\x5d\xc6\xfa\x76"
+ "\x94\xe3\xff\xc5\xc5\x16\xc3\x68\xf0\x07\xcd\xcf\x6a\x8b\x61\x58"
+ "\xff\x87\xb6\x2a\xe4\xe3\x58\x83\x1b\x5b\x4c\x67\x1f\xe7\x9f\xcf"
+ "\x16\xf3\xf2\xd3\x4a\x8c\x7f\x79\x8d\x12\xe3\x5f\x7e\x50\xc6\x78"
+ "\xf1\xda\x75\xc1\xf8\x97\xa3\x6f\x8e\x2d\xe6\xe5\x68\xd9\x16\x93"
+ "\x30\xca\xad\xff\x9d\xc2\xc6\x3e\xbb\xdc\xbd\x8d\x7d\xb6\xe8\x7f"
+ "\x37\xbb\xdc\xe3\x9e\x90\x4e\xdf\x34\xe7\x0e\xe2\x36\xf6\x5e\xec"
+ "\x09\xa9\xfb\xa5\xd9\x62\xe6\x6a\xbd\xb5\xc5\x30\xdf\xe6\x13\xe8"
+ "\x1f\xe2\xdd\x9e\x90\xee\xb0\xdd\x21\xbb\x77\xf1\x0d\x53\x89\xed"
+ "\xf3\x06\x29\xb1\x7d\xde\x60\x25\xb6\x2f\xbc\x4d\x89\xed\x0b\x43"
+ "\x5d\xb1\xbd\x33\xae\xcf\x9b\xe3\x0e\xd3\x0d\xcf\xa0\x2d\x66\x41"
+ "\x85\x67\x3c\x9f\x97\xef\x3d\x9e\xff\x71\xf3\x3f\x34\x9e\x6b\x5d"
+ "\xf1\xfc\x8f\xc7\x7f\x56\xbb\x0c\xc3\xf3\xf9\x87\x15\x78\xae\xed"
+ "\x06\xcf\x7f\x36\xbb\xcc\x82\x30\x25\x9e\x2f\x98\xa6\xc4\xf3\x05"
+ "\x7d\x65\x3c\x17\xaf\x5d\x17\xbb\xcc\x02\xdd\xcd\xb1\xcb\x2c\xd0"
+ "\xc9\x32\xfb\x02\x7b\xf7\x78\x3e\xaf\xc0\x3d\x9e\xe3\x79\xc4\xf3"
+ "\x79\x05\x1e\xfd\xa9\x3b\xe1\xf9\xc2\xd3\x5e\xe0\xb9\x5b\x1f\x95"
+ "\x5f\x86\x5d\x66\x61\x9d\xb7\x76\x19\x4f\xfb\x54\x10\xdf\x65\xff"
+ "\x14\xa7\x7d\x2a\x51\xd2\x3e\x95\x0c\xa5\x7f\xca\x75\xc7\xf6\x45"
+ "\x17\x94\xd8\xbe\xe8\x92\x12\xdb\x13\x07\x28\xb1\x3d\x31\x40\xea"
+ "\x27\xb7\xcb\x64\x76\xda\xb7\xa2\xc4\x79\xc3\xd3\xc6\x67\x1a\x88"
+ "\x3b\xac\x6f\x54\x2d\xdd\xe7\x19\xe7\x0d\xc9\x9e\x70\x1e\xfd\x55"
+ "\xde\x9b\x91\xe0\x06\xe7\x17\xaf\xfa\x7b\xc0\x79\x4f\x7e\x28\x4c"
+ "\x0f\x02\x8c\x47\xbc\x67\xf8\x2e\x62\x3d\xe2\xbc\xfd\x7f\xdd\xd9"
+ "\x68\x16\xef\xbd\x51\x38\xef\xd9\x46\xb3\x64\x4f\x55\xac\x88\xf3"
+ "\x3d\xd9\x43\x73\x40\x69\xa3\x29\x9c\x77\xa3\x6d\x34\x4b\x07\x29"
+ "\xf1\x7e\xe9\x04\x25\xde\x2f\x69\x93\xf1\x5e\xbc\x76\x5d\xe4\xf7"
+ "\xa5\xda\x9b\x63\xa3\x59\xaa\x95\xf1\x7e\xe9\x85\xee\xf1\xde\x90"
+ "\xe1\x1e\xef\x0d\x62\x6c\x36\x43\x46\xcf\xf1\x3e\xd1\x81\xf7\x9d"
+ "\xf7\xcf\x64\xf4\xde\x47\xe6\x91\x9b\x6d\xa3\x49\xf4\x88\xff\x5d"
+ "\xc5\xc7\xe8\xbd\x8d\x46\xdc\x93\x38\xcb\x7d\x7c\x8c\xc3\x5d\xf8"
+ "\xc8\x1c\xae\x70\xc6\xfa\x65\x27\x95\xbe\x88\xcb\x4e\x4b\xbe\x88"
+ "\x87\xab\x10\xeb\x53\x7c\x95\x58\x9f\xa2\xf1\x64\xa3\xd9\x23\x38"
+ "\xfb\x24\x26\x3d\xa8\xb4\xd1\x14\x29\x6d\x34\x53\x90\xf7\x96\x7f"
+ "\xe4\x19\xeb\x93\x66\x2b\x7d\xc0\xf9\x1e\xc5\x77\x66\x88\x3e\xe0"
+ "\x33\x9c\x7c\xc0\x9f\x7a\x4b\xc4\xfa\x57\x56\x95\xd7\xd8\x88\x37"
+ "\x7e\x88\x3f\xdd\xd7\x3b\xdb\xad\x0f\x22\x5b\x03\xba\xf0\x43\x9c"
+ "\x79\x52\x4b\x04\xf5\xdb\x68\x7f\x97\xfd\x10\xbb\x88\x67\xac\xc0"
+ "\xff\x19\x06\x8f\xf8\xdf\x46\x65\xfc\x17\x1e\x90\xed\x36\x02\xca"
+ "\xf9\x8c\x2e\xaf\xec\xbd\x51\x76\x1b\x77\x76\x12\xe3\xa3\x88\xff"
+ "\xc9\x1f\x70\x39\x3f\xe1\x17\x66\xb7\x59\xde\x57\x89\xfb\xcb\xc7"
+ "\x2b\x71\x3f\xf9\x92\x8c\xfb\xe2\xb5\xeb\xe2\x8b\xbe\xdc\xff\xe6"
+ "\xc8\xf9\xcb\xfd\x65\xbb\xcd\xf2\x73\xdd\xe3\x7e\xd2\x7c\xf7\xb8"
+ "\x9f\x34\x9f\xe3\x7e\xd2\xfc\x2e\xed\x36\x0a\xdf\xc8\x94\xc3\x3f"
+ "\xd9\x6e\x23\xc9\xf9\x37\x7d\x5f\x4f\x4a\xb9\x37\x76\x1b\xc7\x9e"
+ "\xf4\x9f\x64\xb7\x71\x8f\xf7\x92\x6c\x7f\xb8\x8b\x6f\xae\x4a\xbc"
+ "\x5f\x71\x58\x89\xf7\x2b\x2a\x95\x78\x9f\x7e\x5e\x89\xf7\xe9\x4d"
+ "\xee\xec\x36\x4a\xac\x4f\xbd\xcd\x1d\xce\x1b\xa6\xa0\xdd\x26\xbd"
+ "\xc0\x33\xc6\xa7\x4e\xf4\x1e\xe3\x57\xce\xf9\x3f\x8c\x77\xc1\x78"
+ "\xad\x2b\xc6\xaf\x2c\xfa\x59\x65\x7c\x86\xf1\x69\x1b\x15\x18\x7f"
+ "\x1d\x6d\x39\x3d\xd9\x4f\xe2\x59\xb6\x4f\x73\xf1\x7f\x4f\xd7\x29"
+ "\x31\x3e\xcd\xc9\xff\x5d\xbc\x76\x5d\x30\x3e\xed\xfa\xfb\xbf\xf7"
+ "\x08\xe3\xd3\x9c\xfc\xdf\xd3\x0f\x77\x8f\xf1\xa9\xd1\xee\x31\x1e"
+ "\xcf\x23\xc6\xa7\x46\x77\x29\xdb\x2b\x30\x3e\x63\xd7\x8d\xb0\xe5"
+ "\xdc\x9c\xfd\x46\x19\x3b\xbd\xb1\xe7\x74\x15\x77\xc4\xa3\x3d\x27"
+ "\x52\xb2\xe7\x18\x3c\xd8\x73\xae\x17\xe6\xaf\xda\xa7\xc4\xfc\x55"
+ "\x07\x94\x98\xff\xea\x25\x25\xe6\xbf\x6a\x56\xda\x73\x96\x74\xb2"
+ "\xe7\x28\xf1\x3f\x33\xcc\x38\xc5\xd9\x9e\x53\xe4\x64\xcf\x79\x75"
+ "\xbb\x67\xfc\xcf\xf4\x88\xff\xd7\x18\xfe\xc7\xb9\xc1\xff\xd5\xff"
+ "\x20\xf8\x1f\xf7\x13\xf0\x7f\xf5\x4d\xc0\xff\x35\x5b\xb8\x8d\xa7"
+ "\x87\x71\x52\xf6\x78\x6f\xe3\xf9\x69\xeb\xc0\x9a\xab\xca\x75\xe0"
+ "\x55\xbd\x72\x1d\x58\x73\x5a\x5e\x07\xc4\x6b\xd7\x65\x1d\x58\x63"
+ "\xb9\x39\xeb\xc0\x1a\x8b\xbc\x0e\xbc\x7a\xac\xfb\x75\x20\xd3\xc3"
+ "\x3a\x90\x29\xae\x03\x99\x5e\xac\x03\x59\x07\x3c\xdb\x78\x0c\xbd"
+ "\xb7\xf1\x3c\x78\xb3\xf7\x41\x65\x19\xbd\xb2\xf1\x6c\x1a\x51\x53"
+ "\x81\x31\x52\xce\x12\xf5\x8a\x78\xc9\xc6\x63\x74\xb1\xf1\x18\x3b"
+ "\xd9\x78\x96\x9f\x15\xf1\x7f\x92\xb8\xdf\x74\xca\x4f\x88\x91\xc2"
+ "\x72\x2f\xff\xfb\x3e\xa5\xdf\xfc\xbf\x33\xfc\x97\xe3\xf7\xfd\x69"
+ "\x32\xf6\x8b\xaf\x3f\xc6\x2e\x62\xa0\x66\x0f\x50\xd8\x74\x26\xb9"
+ "\x8b\x91\xf2\xba\xc2\xef\x46\xb9\xdf\x34\x3b\x52\x81\xf7\x53\xf8"
+ "\x7e\xd3\x77\xdd\x7d\xa7\x75\xc4\xe4\x7f\xed\x49\x16\x93\xdf\x11"
+ "\xcb\x2f\x3b\xb5\x47\xb1\xa4\x67\x88\xb1\xa4\xcf\xdc\x84\x58\xd2"
+ "\x3d\x8d\xc9\x7f\xc6\x35\x7e\xdf\x6b\xe7\xaa\x2b\x8c\xa4\x0a\x79"
+ "\x24\xd6\x35\xf6\xa9\xd1\xfd\xde\x7d\xb5\xb8\x77\x7f\xe1\x8d\x89"
+ "\x83\x82\xfd\x61\x6b\x7e\xd0\xcb\xba\x5d\x69\x66\xd6\x1f\xcc\x73"
+ "\x0d\x74\x9e\x5b\x01\xbc\x2a\x20\x9e\x2e\x41\x3c\x7d\xbd\x90\xd5"
+ "\x3d\x0b\xbc\x30\xf0\x5a\x11\xf2\x71\x9e\x40\x02\x0c\x49\x88\xad"
+ "\xaf\x33\xbf\x2f\x10\x23\x00\x5b\x79\xbd\x95\x67\xa9\xdd\x3e\x50"
+ "\x28\x82\xfe\xf7\xd9\xbd\xb0\xc6\xb7\xca\x64\x81\x79\xd1\x8c\x7b"
+ "\x62\x55\xd5\xb6\x56\x23\xd2\x62\xff\xc2\x1a\x0d\x05\xfc\xdd\xf6"
+ "\x07\xe2\xef\xdd\x3c\x7d\x3d\x81\xc9\x33\xb8\xee\x05\xbd\x1c\x8e"
+ "\x71\x40\x24\xd9\x4a\xf8\x51\xb6\x6f\x6d\x81\xf1\x11\x28\x5f\xfb"
+ "\x66\xce\xe5\xb8\x41\x61\xbd\x86\xb1\x64\x3e\xb6\x88\x1b\x2c\x87"
+ "\x15\xe0\xc6\xd6\xcb\xf2\x77\x6c\x6c\x1f\xc7\x88\xdb\x51\xfe\x24"
+ "\xfb\xbf\x98\x3c\x61\x6b\x76\x94\x7b\x6c\xcd\x8e\xe2\xd8\x9a\x1d"
+ "\xe5\xc0\x56\x93\x1b\x3b\x8a\xc2\x8f\x3d\x47\xf4\x7f\x31\xba\xc8"
+ "\xd8\xc6\xbf\xc1\xf8\x28\x39\x5e\xf9\xbf\x30\x3c\x9d\xcf\xf1\x14"
+ "\xf1\x4a\xc2\x54\xd9\x8e\x62\xf4\x68\x47\xe9\x0e\x53\xbd\xda\xc3"
+ "\xcf\x30\x35\x77\x90\x12\x53\x73\x07\x2b\x31\x35\x7f\xa3\x2b\xa6"
+ "\x76\xc6\xd3\xdc\xe9\xee\xb0\x94\xc7\x47\xc9\x9f\xe0\x19\x47\x73"
+ "\x33\x3c\xe1\x28\xf3\x4f\x9f\xe1\xe4\x9f\xee\xc0\xd1\xbc\x75\x4a"
+ "\x1c\xcd\x2d\xeb\x29\x8e\xb2\xdc\x26\x67\x7e\x86\xdc\x26\xbd\xc6"
+ "\x51\x83\x0b\x8e\xae\x1d\x25\xe3\xa8\x6b\x7e\x93\x6e\x70\x74\xde"
+ "\x8d\x89\x81\xa2\xc0\x51\xc1\xcc\xfa\xa3\x5b\xc8\xfa\xfa\x81\x12"
+ "\x47\xd7\x36\x78\xc6\xd1\xb5\xab\x64\x1c\xe5\xf5\x6e\x2c\x8e\xae"
+ "\x2d\x51\xe0\xe8\x3c\x27\x1c\xfd\x41\xd6\x21\xd0\xc7\xc2\x81\xa3"
+ "\x0b\x9c\x70\x74\x5e\x77\x38\xba\x96\x8d\x11\x97\x51\xf3\x97\x75"
+ "\x8f\xa3\xb9\xd9\xee\x71\x14\xcf\x23\x8e\xe6\x66\xcb\x38\xea\x46"
+ "\x46\x55\xe0\xe8\xba\xe7\xbc\xc0\xd1\x5f\x78\x6c\x94\x75\x31\x5e"
+ "\xd9\x2a\xe4\x3d\x9d\x9d\x63\xa4\xbe\xe8\xbc\x27\xa8\xd4\x25\xef"
+ "\x49\x69\xa7\xbc\x27\xcb\xa5\x3d\x9e\x13\x45\x5c\x7d\xea\x27\xe0"
+ "\x2a\xdb\xe3\xb9\x7e\xae\xd2\xf7\x64\xfd\x02\xc9\xf7\x84\xe3\xea"
+ "\x26\x95\xd4\x2f\x39\xef\x49\x69\x17\x31\x52\xd7\xef\x53\xc4\x46"
+ "\x99\xe8\x1c\x1b\x65\xe3\x07\x9e\x63\xa4\xae\x6f\x50\xc4\x46\x39"
+ "\x52\xec\xc8\x7b\xe2\x1a\x23\x55\xc6\xd8\x3f\x5f\x65\x18\xeb\x88"
+ "\x41\xf5\x67\xbd\x23\x46\x6a\x37\xfb\x82\xb0\x9d\xdd\xf5\x09\x37"
+ "\x1e\x63\x8d\x5e\x60\xac\x22\xef\x89\x6b\x8c\xa9\x0d\x9b\xab\xcb"
+ "\x4b\x49\x55\x5c\xa9\x9b\xd8\xa8\xa5\x37\x35\xf7\x09\xf6\xcb\x3d"
+ "\xd6\x6e\xbc\x4d\x89\xb5\x1b\xa3\x59\xdd\xd3\xee\xb0\x76\xc3\x05"
+ "\x19\x6b\x79\xbd\x95\xa7\x5d\xb0\xb6\xce\x03\xd6\xc2\xba\xba\xad"
+ "\xd1\x5b\xac\xdd\x18\xca\xb0\x36\x53\xc4\xda\xe6\xeb\x8d\xb5\x1b"
+ "\x43\x65\xac\xdd\x78\xb6\xfb\x1c\x53\xeb\x5b\xdc\xef\xcb\x59\xdf"
+ "\xc2\xb1\x76\x7d\x4b\x97\x39\xa6\x14\x3e\x1f\x9b\x8e\x49\x39\xa6"
+ "\x64\x7b\x40\xa9\x68\x0f\xf8\x5b\xce\x89\xb2\xa9\xc6\x5b\x7b\xc0"
+ "\x51\xd0\xdd\x71\xdf\xe5\x0a\xcc\x39\x15\x8b\x39\x51\x4a\x5c\xec"
+ "\x01\x25\x9d\xed\x01\xcf\x75\x8d\xb1\x5e\xd9\x03\xd8\xbe\xcb\xff"
+ "\xa8\x54\x62\xec\x7f\x1c\x53\x62\xec\x9b\x73\xa5\x7d\x96\xd8\x1f"
+ "\xcf\x31\x53\x0b\x6e\x73\xd8\x03\xea\x94\xd8\x2a\xdb\x03\xde\x1c"
+ "\xea\x19\x63\x0b\x94\xf6\xdf\xa7\x8a\x15\xfb\x2c\xdf\xad\x77\x8e"
+ "\x43\x2d\xc5\x9f\xda\x3c\xe7\xf0\x71\x67\x8c\x2d\xc8\xf9\x5b\x8a"
+ "\x43\xed\x88\x35\xd5\x8d\x2f\x77\xe7\x38\xd4\x6f\x00\xae\x95\x10"
+ "\xdc\xdb\xc6\xf0\x56\x61\x1b\x28\xb9\x39\xb6\x81\xf2\x12\x0f\xb6"
+ "\x81\x37\x5e\x55\xe2\xec\x1b\xa5\xac\xee\x49\x77\x38\xfb\xc6\x74"
+ "\x19\x67\x79\xbd\x95\x27\x5d\x70\xb6\xf6\x7a\xca\xb4\x6f\xac\xb9"
+ "\xb1\xb6\x81\x37\xd6\xc8\xb6\x81\x37\x7b\xb0\xff\xb1\x20\xda\x3d"
+ "\xce\x16\x88\x76\xd7\x02\xd9\xee\x5a\xeb\x26\x5f\x8a\x02\x67\x0b"
+ "\x47\x49\xfb\x1f\x99\x4c\x5b\x27\xc9\xb4\x25\x7f\x83\xf9\x52\x0a"
+ "\xc3\xbd\xb5\x0d\xe0\x3e\x77\xc4\x56\xc4\x2e\x09\x5f\x65\xdb\x40"
+ "\x89\x67\xdb\x40\x37\xf8\xea\x7d\xee\xbe\x2d\xa3\x94\xf8\xba\xe5"
+ "\x7e\x25\xbe\x16\xed\x73\xc5\xd7\xce\xd8\xba\x65\xb1\x3b\x5c\xe5"
+ "\xb6\x81\xa2\xf9\x9e\x31\x75\x4b\xa1\x27\x4c\x65\x31\xfd\xea\x65"
+ "\x1f\x69\x19\x53\xb7\xee\x51\x62\xea\x16\x53\x4f\x31\xf5\xa6\xe4"
+ "\x4b\xe9\x35\xa6\x26\xb8\x60\xea\xb6\xe9\x32\xa6\xba\xe6\x4c\xe9"
+ "\x06\x53\x6f\x94\x9d\xc0\x19\x53\x15\xb2\xeb\xb6\x93\x4a\x4c\x2d"
+ "\x0a\xf0\x8c\xa9\xdb\xde\x91\x31\x95\xd7\xbb\xb1\x98\xba\xad\xf6"
+ "\xc6\xda\x09\xb6\xd5\xca\xb2\x6b\xd1\x96\xee\x31\x75\xcb\x0e\xf7"
+ "\x98\xba\x65\x07\xc7\xd4\x2d\x3b\x7a\xbe\xa7\x7c\xfb\x2a\x2f\x30"
+ "\xf5\x17\x9e\x4b\x65\x7b\x86\xd7\x76\x02\xb4\xb7\x22\x96\xd6\xfd"
+ "\xb4\xd8\x21\xc9\x52\xec\x90\x09\x22\xc6\x3e\xf1\x53\x31\xf6\xad"
+ "\x75\x4a\x9f\x86\xb7\x36\x4a\x3e\x0d\x1c\x63\xff\x73\x8c\x32\x3f"
+ "\x6a\xe7\x58\x21\xca\x18\xaa\x6f\x9d\x73\xd8\x09\x10\x73\x27\x38"
+ "\xdb\x09\xde\x3e\xe7\x19\x6f\xff\x12\xa0\xb0\x13\x7c\xe6\x1e\x6f"
+ "\xaf\x29\xf0\x76\xc7\xaf\x18\xde\x3a\x62\xa8\xfe\x25\x5a\x8a\xa1"
+ "\xda\xad\x0c\xab\xc0\xdb\xb8\x9f\x07\x6f\x4b\x7b\x8e\xb7\xca\x5c"
+ "\x2a\xae\xf1\x52\x77\x54\x56\x97\x01\xde\xb2\x78\x1d\xae\x31\x53"
+ "\x7b\x16\xaf\xe3\x46\xc5\x4c\xc5\x7e\xb9\xc7\xdd\xb7\x9f\x56\xe2"
+ "\xee\xdb\x6b\x58\x5d\xb7\xb8\xfb\x76\x98\x8c\xbb\xbc\x5e\x8f\x71"
+ "\xb7\x57\x36\x83\xb7\xa3\x6f\xac\xcd\xe0\xed\x68\x19\x77\xff\x73"
+ "\x70\xf7\xb8\xfb\x97\x60\xf7\xb8\xfb\x97\x60\x8e\xbb\x7f\x09\xee"
+ "\x12\x77\x15\x3e\x04\xff\xe5\xeb\x36\x96\x47\xdd\xdf\x7a\x9e\x95"
+ "\xff\xd2\xf4\xc6\x66\x00\x18\xac\x4e\xc5\x18\x4e\x71\xe8\x43\xd0"
+ "\xbd\xcd\xa0\x3b\xbc\xf5\xde\x66\x50\xac\x52\xe2\x6d\xb1\xaf\x12"
+ "\x6f\xdf\xfb\x00\xfb\xd5\xa5\xcd\x80\x61\x40\xf1\xd3\x0e\x9b\x81"
+ "\x49\x89\xb3\xb2\xcd\xe0\xbd\x78\xcf\xdf\xbe\x8a\x53\x15\xf2\xed"
+ "\x13\x2e\x31\xab\x67\xc8\x78\x7b\xa4\x4a\xf2\x19\x7b\x67\xd7\xe1"
+ "\x68\x67\xbc\x2d\x36\x76\x8a\x59\x3d\xed\x3a\xc6\xac\x9e\x76\x9d"
+ "\x63\x56\x4f\x57\xc6\xac\x7e\xe3\x9a\xec\x47\xe6\x7d\xcc\xea\x77"
+ "\x9f\x64\x18\x8c\x3c\x84\x71\xab\x7b\x62\x47\xb8\xc1\xb9\x56\x14"
+ "\xd8\xab\xb0\x23\xbc\x5b\xa9\xc4\xde\xf7\x88\x67\xec\x7d\x77\x8b"
+ "\x8c\xbd\xbc\xde\x8d\x95\x79\xdf\xad\xb8\xb1\x76\x84\x77\x2b\x64"
+ "\x3b\xc2\x7b\xeb\xdc\x62\xaf\xe2\xdb\x58\xf1\x1a\xf7\xdf\xc6\xf0"
+ "\x3c\x62\x6f\xf1\x1a\x8f\x76\x84\x4e\xfe\x5b\x3b\x97\xf1\x6f\x63"
+ "\xa2\xcc\x6b\xf2\xc2\x8e\xf0\x8b\xf3\x31\xd8\x99\xd8\x1b\x3b\x02"
+ "\xe2\x2d\xe2\x99\x84\xb9\x3d\xb1\x23\x5c\x7f\x19\x77\xd7\x32\x25"
+ "\xe6\xee\x5a\xae\xc4\xdc\x0f\x86\xba\x62\x6e\x67\xbc\xdd\xb5\xc7"
+ "\x1d\xd6\x72\x3b\x42\x49\xb9\x67\x9c\xdd\xd5\xe0\x11\x67\x5d\x7c"
+ "\x73\x65\x9c\x7d\x7f\xb0\x12\x67\x77\xeb\x7b\x85\xb3\x3d\xcd\xc1"
+ "\xf2\x8b\xc2\xd9\x38\x17\x9c\x7d\xff\x03\x19\x67\x5d\xf3\xb0\x74"
+ "\x83\xb3\x37\x28\x0f\x8b\x67\x19\xb7\x64\x8c\x12\x67\x4b\x12\x3c"
+ "\xe3\x6c\x89\xaf\x8c\xb3\xbc\xde\x8d\xc5\xd9\x92\xd1\x37\xd6\xb6"
+ "\x50\x32\x5a\x96\x71\x4b\xda\xba\xc7\xd9\x5d\x2d\xee\x71\x76\x97"
+ "\xf8\x5d\x6c\x57\x8b\x47\x19\xb7\x13\xce\x7e\x70\xda\x0b\x9c\xfd"
+ "\x85\xfb\x20\x7c\xe0\x55\xfc\x0b\x27\x7b\xad\x5f\xb5\xc9\x65\xbf"
+ "\xc4\x49\xe7\xfd\x12\x4e\xb6\x85\x09\x92\x6d\x41\x99\x9f\x25\x59"
+ "\xb2\xdf\x46\x89\xb8\xfb\xe8\x4f\xc5\xdd\xff\xbe\xd0\xea\xc0\xdd"
+ "\x25\x80\xbb\xff\xcd\xf6\x47\xb4\x3a\x70\xf7\xff\xbd\x2d\xf5\x4b"
+ "\xce\xcf\xe2\xc1\xb6\x30\x0e\xdb\xfb\xeb\x23\x0e\xdb\x02\xe2\x70"
+ "\x94\xb3\x6d\xe1\xff\x4d\xf7\x8c\xc1\x7f\x4d\x50\xd8\x16\x3e\x75"
+ "\x8f\xc1\x16\x05\x06\x7f\xb8\x99\x61\xf0\x38\x09\x83\xff\xba\xf3"
+ "\x1a\xe8\x96\xd7\xb2\xbc\xc3\x60\x0b\xc3\xe0\x89\x37\x07\x83\x3f"
+ "\xbc\x0e\x18\xcc\xc6\xfd\xa3\x87\xaa\x8d\x80\xc1\xb1\x88\xc1\x13"
+ "\x7b\x66\x6f\xf8\x99\x72\xb4\x60\xbf\xdc\x63\xf1\x47\x07\x94\x58"
+ "\xfc\x91\x85\xd5\x75\x8b\xc5\x1f\xad\x93\xb1\x98\xd7\xbb\xb1\xf6"
+ "\x86\x8f\x8c\x37\xd6\xde\xf0\x91\x51\xc6\xe2\xff\xf7\x6a\xf7\x58"
+ "\xfc\x57\x83\x7b\x2c\xc6\xf3\x88\xc5\x7f\x35\x74\x89\xc5\xe3\x9c"
+ "\xb1\xf8\x7f\x1c\x32\xaf\xc2\xde\x60\xfa\x5b\xcf\xdd\xf2\x3f\x1e"
+ "\xe5\x5f\xdd\xed\x24\xa3\x5e\xf5\x3f\x95\xd5\x85\x84\x5c\xc9\x24"
+ "\x19\xd5\xb6\x71\x04\xce\xc1\xf8\xfd\xcf\xd5\xea\x90\x48\x22\xac"
+ "\xef\xa3\x47\x3c\xfe\x33\xfe\x40\xc6\xcd\x57\x8b\x73\x8b\x8d\x71"
+ "\x29\xf3\x77\xc5\xf3\x88\xbd\xdb\x9c\xae\xbb\x7b\x16\xcd\xf7\xdb"
+ "\x21\xde\xc7\x6c\x56\x50\x2e\x96\xca\xc8\x9b\x26\x55\xe9\x34\xba"
+ "\xce\xaf\xc8\x3c\xc8\xaf\xc8\xdd\xfd\x23\xb4\xc4\x7f\xe0\x2a\x4a"
+ "\xb7\x6e\xa2\x96\x2b\xff\xd4\x3f\xea\xca\xeb\x84\xe4\x6f\xa2\xe6"
+ "\xd6\xac\xd2\x1c\x78\xc7\x0f\xff\x03\xea\x5d\x09\xca\xd0\x5e\xc9"
+ "\x8c\x26\x70\xae\x48\x3a\x07\xe3\x46\x84\x4c\x1f\x2a\xc0\x35\xba"
+ "\xbe\xda\xb6\x2d\x0d\xb0\x2a\x95\x90\x7b\xaf\xe1\x9c\x29\x2d\x01"
+ "\x9e\x09\xce\x83\x36\xd7\x42\x5b\xf4\xd6\xe1\x16\xe0\x47\x4d\xd5"
+ "\x1a\x82\x73\x3a\x1b\xde\xab\x28\x0f\xc7\xde\xe7\xee\x02\xaa\xd6"
+ "\x10\x61\x7b\x7b\x01\x1d\x7c\x67\x0d\xd0\x83\xe4\x2f\x21\x6c\x0f"
+ "\xff\x5a\xa8\x47\xd5\xe9\x54\x08\x6b\xd3\x55\xdb\x2c\x7c\x4e\x43"
+ "\xff\xf6\x83\x1e\x4b\xe1\xb9\x5b\x97\x10\x2d\xfc\x02\xe8\xc6\x3b"
+ "\x6b\x5a\xb3\xf6\x44\xc2\x7b\xea\xb0\x5f\x9e\xde\x71\xed\x1b\xb0"
+ "\xee\x0c\x0f\xc1\xb5\x83\x3d\x1f\x9f\xcd\x9e\xa3\x16\xb2\xed\x70"
+ "\x9e\x66\xa6\xd3\xea\x64\x1b\x09\x84\xb1\xd8\x06\xfd\x46\x7e\x14"
+ "\xfe\xb3\x7f\xd4\xea\x61\x84\xec\x4e\x69\x52\x57\x43\xdf\xed\xff"
+ "\x31\xdc\x62\x4c\xfb\x35\x81\xeb\x66\xd4\x59\x1a\x55\x1f\x8f\x99"
+ "\x7a\x9e\x10\xc4\x13\xf8\xff\x11\x0b\xac\x63\x93\xa1\xbc\x16\xde"
+ "\x43\xb8\x12\xa2\xc1\xba\x8d\xaa\x3d\x17\x8c\x49\xa7\x48\xa0\x81"
+ "\xf8\xe7\xc1\xbb\xf1\xba\x7b\xf6\x62\x5d\x93\xea\xe3\x28\xec\x03"
+ "\x94\x6b\xa0\x8c\xf7\xa1\x0f\x19\xcc\xa3\xf6\x02\xc6\x9b\x1b\xee"
+ "\xac\x11\xc2\xda\x0b\x18\xf6\xc1\x7b\xae\x85\x77\x86\x3a\x01\x50"
+ "\x27\x80\x1d\xd3\x88\x76\x03\x9c\xc3\x76\xe0\x18\x60\x5c\xd8\x8e"
+ "\x6d\xef\xc4\xb6\x3d\x8c\x83\x86\x06\xdf\x59\x43\x81\xb7\x71\x4d"
+ "\xd5\xa5\xa9\x8e\xd5\xab\x3e\x36\x05\xaa\x28\xa5\x45\x6d\xba\xd5"
+ "\x69\x24\x20\x5f\x20\xc4\x38\x0c\xdb\xf9\x78\x0f\xb4\xaf\xc1\xb1"
+ "\x68\xcd\xfa\xb8\xc0\xa4\xda\x33\x01\xc7\x17\xe8\x69\xd1\x8d\x60"
+ "\xef\x6b\xc6\xe7\xe0\x3d\x62\x7d\x16\xfb\x1e\xfb\xac\x4b\xf3\xa1"
+ "\x50\x3e\xe9\xa3\x3a\x4b\x7c\x42\x06\xbc\x0f\xf7\xd7\x9a\xc8\xc2"
+ "\x0a\xbc\xdf\xc4\xef\x03\x5e\xfa\xb8\x05\x68\x16\x87\xe7\xb0\xec"
+ "\xa1\xbf\x01\x12\xdd\x2a\x43\x80\x37\x5c\x69\x27\xf1\x08\xf0\x85"
+ "\xc4\x23\xd8\xdf\xf7\xd3\x4c\x6a\xb6\x0e\xab\xfe\x97\xe9\x75\x79"
+ "\x40\x43\xfb\x9b\x21\x9a\xb5\x30\xb6\x42\x07\xd2\xa5\x1e\xae\xed"
+ "\xbd\x1f\xe9\xb2\x36\x05\x68\xc2\xeb\x4e\x93\xfb\x8f\xe5\xbd\x8c"
+ "\x9e\x02\xd0\x82\xef\xdd\xdc\xeb\x8b\xef\xb3\xf6\x1a\xd0\x71\x08"
+ "\xb5\x94\x25\x43\xbf\x90\x6f\x81\x47\x76\x2f\xb1\xaa\xd1\xaf\x0f"
+ "\xcf\xef\xbf\x6c\x55\xaf\x6d\x26\x28\x57\x92\x5c\xc0\xe5\x2d\x49"
+ "\x30\xe6\xd0\x26\xd5\xb5\xe9\xee\x93\xe8\x98\x02\xb4\x4b\x02\xde"
+ "\x85\x31\x5f\x0b\xe3\xb7\x15\x30\x0f\xff\xdf\x0a\xeb\x8f\x00\xf5"
+ "\x4c\xaa\xbd\x51\xd0\x9e\x76\xcb\x10\x6a\xde\x36\x84\xb6\xc0\x18"
+ "\x1e\x6c\xcd\xda\x1b\x2a\x8d\x21\xf6\x69\x2d\x9c\xcf\x85\xeb\x26"
+ "\xd5\xff\x16\x70\x1e\xfa\xdf\x04\xe9\x9d\x3d\x8d\x67\xce\x6e\x12"
+ "\x99\xbb\x9b\x84\xbe\xbe\x9b\x8c\x5f\xd1\x00\xf3\x32\xf3\x61\x7a"
+ "\x34\xd6\x46\x04\x6d\xbc\x7f\xfb\x90\x01\x5a\xfc\xf6\x24\xac\x1e"
+ "\x5e\xf4\xea\x6e\x12\x8e\x7b\x63\x31\xd3\x18\xae\xe1\x53\x7d\xbf"
+ "\xa5\xd5\x86\xab\x44\x18\x14\xef\x6f\x5f\x7d\x77\xd0\x94\xab\x84"
+ "\x1c\xd2\x5b\x48\x5a\x22\xac\xe5\x97\x9b\x48\x9a\x85\x9a\xab\x32"
+ "\xce\x13\xc0\x9e\x02\x3e\x76\xfb\xea\xa6\xce\x21\x04\xf7\x0c\x0a"
+ "\x3f\xe8\xc9\x80\x04\xa2\x49\x3d\x49\x42\xd2\x1b\x68\x93\x7d\xd3"
+ "\x50\x63\xda\x4a\xa2\xde\x7d\xb9\x96\xcb\x9e\xaa\x7d\xbb\xf6\xe1"
+ "\xfe\xd4\xd6\x18\x32\xd3\x26\xae\x47\x1b\xee\xac\x4d\x9f\x4b\x86"
+ "\xe2\xfb\x04\x32\xd9\x6b\xdf\x93\x30\x6e\xb5\xde\xe1\xf3\xbe\x60"
+ "\x46\xcf\x4d\xc3\xa3\x76\xcf\xb2\x82\xbc\x75\x4c\x97\x3e\x87\x36"
+ "\xa1\x5c\x07\xeb\x0b\x93\x05\xab\x9b\x6c\x20\x5b\xcd\x86\xf5\xdb"
+ "\x44\x3e\xa9\x2f\x52\x0b\xeb\x8e\xe9\xbc\x7c\x46\x32\x5b\xb7\x71"
+ "\x2d\x85\xbe\x4f\xd7\x93\x0c\xbe\x0e\x5a\xb3\x03\x13\x51\x9e\xa2"
+ "\xdf\x62\xff\xf7\xc3\xbb\xd2\xb0\xb1\xb0\x0e\xef\xb5\xe1\xfa\x39"
+ "\xb5\xce\x48\x2a\xac\x76\xf2\x46\x33\x1b\x23\x3f\x18\x23\x0d\x5c"
+ "\xab\x81\x71\xf2\x77\x47\x37\xa4\x99\x90\x1f\xef\x2f\xf8\x70\xda"
+ "\x30\xba\x58\x38\x5d\xa6\x2c\x26\xb0\x8e\x02\x6d\xd6\x71\xda\x08"
+ "\x83\x47\x94\x20\x6d\xbc\x7b\x8f\xfd\x51\x9e\xd6\x17\x7c\x36\x05"
+ "\xfe\x40\xbe\x10\x82\x47\x94\xe0\xb3\xb1\x0f\xf8\xfd\x0c\xf9\x60"
+ "\xea\xab\xdf\xd2\x2a\x43\x13\xa9\x86\xf7\xa1\x83\x9c\xfb\x60\xf3"
+ "\xb6\x0f\x65\x9e\xfa\x90\x73\x2f\xf0\xed\xbd\xc0\xb7\xf7\x02\xdf"
+ "\x9a\x38\xdf\x1e\xa9\xe3\x7c\x6b\x87\x7e\xb5\x81\xec\xbe\x62\x3a"
+ "\x51\x63\xbf\x76\x9e\xc2\x18\x7d\xd0\xcf\x26\x99\x77\x27\x5f\x80"
+ "\x31\x92\xf8\xd7\xe7\xee\x20\x1c\x9f\x2a\x4b\x2d\x49\x47\xfe\x6d"
+ "\x77\xc7\xbf\xc6\xc2\xa9\xf1\x40\x9b\x97\x81\x7f\xbf\xd7\x93\x80"
+ "\x06\xa2\x59\x39\x1d\xf8\xb7\xc9\x1d\xff\x1a\x17\xec\x85\x67\x76"
+ "\xe2\xdf\x39\xce\xfc\x6b\xec\xeb\x3d\xff\x7e\x72\xdc\xc1\xbf\xcf"
+ "\x8b\xfc\x3b\xd7\x85\x7f\x1b\x9c\xf8\x17\xdf\xdb\x6b\xfe\x35\x46"
+ "\x7a\xc7\xbf\x9f\xec\x75\xf0\x2f\xe8\x25\x6f\xfc\x81\x8d\x91\x1f"
+ "\x8c\x11\xf0\xef\x27\xf9\x30\x4e\x6e\xf9\xf7\xe7\xa7\xdf\xa7\xb1"
+ "\x3d\xa7\xdf\xa7\xa3\xba\xa7\xdf\x81\xc3\xde\xd3\xef\xc0\x86\x1b"
+ "\x4f\xbf\x03\x56\xef\xe8\x77\x20\xd5\x33\xfd\x0e\x44\xff\x72\xe8"
+ "\x57\x16\xda\x73\xfa\x1d\xbc\xd0\x3d\xfd\x0e\xbe\xe6\x3d\xfd\x0e"
+ "\x4e\xbb\xf1\xf4\x3b\x58\xea\x1d\xfd\x0e\x8e\xf7\x4c\xbf\x83\x5a"
+ "\x4f\xf4\x7b\x6c\xa8\x40\x05\xf4\x9b\x1b\xd2\xd7\x80\x32\x10\x97"
+ "\xd7\xca\xce\xa3\xce\x08\x65\x8d\x54\x66\x32\x15\xe8\xd5\x2e\xe5"
+ "\x00\x97\xb2\xd6\xa5\x1c\xec\x52\x0e\x71\x29\x87\x4a\x65\xa0\x97"
+ "\xef\x45\x55\xd9\x73\xa0\xb3\x65\x98\x54\x65\x16\xf1\xfa\xc8\x99"
+ "\x76\x1d\xea\x7d\x23\xdd\xf5\x7d\x6d\x26\xb5\x1a\xd2\xc8\xf0\x66"
+ "\xd5\xa1\x38\x46\x8f\xd5\xc3\xf4\x34\x25\x83\x00\x3d\xa6\x4d\x59"
+ "\x89\x7c\x65\x26\xb4\x23\xc4\x0f\xc6\xe9\x56\xd0\x37\xcd\xc8\x73"
+ "\xba\x25\x9f\xd0\x7a\xd5\xa1\xc9\xf8\x7e\xf7\x1a\x8c\x44\xf0\xb9"
+ "\x1b\x73\xa2\xab\x80\x3e\xd3\xcc\x3e\x77\x0f\xa3\xdb\x1f\x88\xca"
+ "\x53\x0b\xfe\x79\x99\x82\x6e\xa5\x99\x9a\x27\x5d\x82\x75\x0c\xd6"
+ "\xb2\xea\x16\x2b\xf0\x24\x35\x1b\x97\x5c\x80\xfe\x1e\xfa\xa8\x32"
+ "\x15\xda\x86\xe7\xc0\xb3\xa2\xa9\xf6\xd8\xe8\x6a\x5b\x0d\xa1\xd0"
+ "\x46\x95\xa5\x1c\x74\xff\x5a\x22\xb6\x19\x4d\x07\x1d\x1b\x8d\x6d"
+ "\xba\xd5\xcf\x36\xf4\xdd\x01\xcf\x1c\x37\x5d\xaf\x21\x74\x95\x26"
+ "\xd8\x3b\xfe\x38\x54\xeb\x51\xef\xdb\xd0\x6f\x24\x6f\xd7\xbf\x17"
+ "\xed\x7e\x16\xd1\x45\xbb\x62\x7f\xb5\xbd\x69\x37\xdb\x73\xbb\xfd"
+ "\xc5\xfe\xea\x7a\xd3\xae\xa9\x8b\x76\xc5\xfe\x46\xf5\xa2\xdd\xcf"
+ "\x3d\xe6\xff\xa0\x1b\x02\xc4\xfe\x66\xf4\xa6\xdd\x7c\xcf\xed\xf6"
+ "\xdd\xd1\x3b\x5e\xf8\xbc\xa1\x2b\x5e\xe8\x1d\x1f\x94\x77\xf1\xfe"
+ "\xfd\x76\xf4\x8e\x07\xca\x73\xba\xe2\x81\xde\xd1\xbf\xbc\x4b\xfa"
+ "\xf7\x8e\xf6\x87\x47\x77\x45\xfb\xde\xd1\xfd\xb0\x47\xfe\x47\x5d"
+ "\x16\x68\x1f\x45\x87\x8c\x2d\x12\xd6\x9f\x8c\x12\x86\xf4\x7d\x74"
+ "\xb5\x10\x45\x1e\x03\x0c\x0b\x2c\x20\x83\xa2\x98\x7d\xe8\x48\xe8"
+ "\xca\x42\xa2\xce\x57\x0b\xea\x5d\x29\xb5\xea\x6a\x5b\x24\x49\xb7"
+ "\x51\xfb\x8e\x24\xab\xea\x4e\x38\x7f\x20\x81\x10\xcb\x52\x3d\x61"
+ "\xed\x04\x9d\x8c\xca\x4b\x8b\x22\x53\xed\x04\xed\x11\x96\x83\xa9"
+ "\x80\x61\x80\x63\xd5\x05\x56\x5c\xf3\x06\xc1\x7d\x36\xe0\x5f\x68"
+ "\xc3\x4a\xde\x17\xcc\xaa\xa8\x25\xac\x9e\x19\xf4\x46\x33\xdd\xd4"
+ "\xf7\x51\x9a\xae\x27\x6b\xe0\x7f\x78\xe6\xab\x3e\x66\xa2\xde\x0a"
+ "\xfa\x64\x6b\xd6\x11\xc0\xe5\xa3\xb1\xa8\x63\x82\x2e\xdb\x92\x7e"
+ "\x09\x6d\xee\x63\x8b\x56\x83\x5e\x8b\x75\x77\x0b\x66\xf5\xbd\x06"
+ "\xa2\x3e\x68\x46\xfd\xfd\xc8\xce\x03\x89\x84\x74\x61\x73\xd1\x08"
+ "\xc1\x61\x23\xf1\x7e\x6c\x07\x6d\x99\x6b\x05\x18\xdb\xe0\x3b\x6b"
+ "\xb1\xbf\x30\xc6\x56\x63\x0a\xae\x0b\x47\x47\x3f\xfe\x2b\xda\x2a"
+ "\xe2\xfc\xb0\x66\x28\x33\x9d\x3d\x93\xd6\x50\x6d\x8d\x9e\xe6\x0d"
+ "\x88\xaa\xb2\x5c\x26\xc6\xa4\x76\x52\xaf\x3a\x3a\x06\x9f\x7d\x25"
+ "\x38\x4c\x67\x09\x0e\xd3\xb7\x66\x1d\x8d\x90\xfa\x8b\xcf\x92\xce"
+ "\xa3\x8d\x82\xf7\xf1\x68\xf4\x81\x54\xcf\x7d\x84\xb5\x24\x68\x6a"
+ "\x08\x35\xe3\x18\x1a\xd3\x2e\x43\x5f\x2a\x0e\xe1\x38\xd3\x0d\x3a"
+ "\xb3\x25\x5d\x7f\x3b\xb7\xd9\x1d\x6d\x41\xdb\x0f\xac\x03\x13\x98"
+ "\x1d\x66\xdd\xb1\x09\xcc\xcf\x06\xf0\x1e\x74\xf6\x48\x94\x57\x2e"
+ "\xaa\x8e\xb2\xfc\xc7\xd3\xf5\x6a\x2f\x75\x9e\xa3\x6c\xfd\x37\xde"
+ "\x8e\xe3\x50\xb1\x0b\x9e\xf7\x2f\xf5\xaa\x0a\x2d\xb7\xe3\x1d\x8b"
+ "\xc1\xe7\x41\x9d\x42\x78\x66\x0c\xcd\xaf\xd1\x61\x3d\xb8\x1e\x21"
+ "\x5e\x8f\x73\xba\x1e\x47\x37\x84\x45\x8a\xd7\x45\x3b\xe0\xb1\xd9"
+ "\x4e\xd7\x67\x1b\x6e\x47\xbb\x5c\x45\x32\xbe\x13\xac\x65\x51\xb8"
+ "\xae\xa1\xcd\x9f\xdb\xd5\x8f\x45\x89\xf5\xa6\xb5\xa8\x2a\xd6\x5d"
+ "\x01\xbe\x82\xeb\xb1\x4e\xf7\xc7\x1e\x4c\x8e\x20\x8f\x6d\xc1\x31"
+ "\xad\xd8\x61\xf2\x39\x9e\xca\x6d\x39\x47\x8b\xd8\x58\x68\x8f\x45"
+ "\x3a\xb7\x67\x52\x55\x18\xa0\xcd\x48\x0b\xc8\x7a\x50\x27\x1b\x9f"
+ "\xe9\x6e\xfc\x6d\x45\xd6\x8c\x76\x9d\x35\xbf\x7d\xc3\x3d\xe6\x7b"
+ "\x1a\xee\xb0\x3b\x7c\x34\xe3\x88\x7a\x6a\x1d\xf1\x49\x8f\x27\x6a"
+ "\x94\x73\xd2\x8e\x11\x75\x2a\xfc\x8f\xf6\x60\xaa\x36\xcc\xdf\x9d"
+ "\x64\x85\xf9\x61\xf4\xc5\x18\x5c\x1d\xc1\x7d\xa3\x6c\xe1\xfd\x8b"
+ "\xf0\x7b\x4a\x5b\x91\x35\xce\xba\x21\x74\x62\x5b\x70\x68\x4c\xe3"
+ "\x7c\xa2\x9e\xd9\xe2\xf6\xdb\x4a\xe4\x8a\x3a\x2a\xa4\x2d\x26\xfe"
+ "\x53\x63\x7d\x28\x7e\x5f\xa9\x4c\x38\x47\x56\x5e\x20\x6a\xfc\xa6"
+ "\xf2\xc6\x35\x12\x5c\x0d\xb2\x29\x7e\x73\x09\x88\xd3\x91\xc2\x34"
+ "\x12\x3c\xa0\x85\x68\x07\xa8\x54\x7e\xbf\x7d\x8e\x10\x7b\x6b\x42"
+ "\x5f\xe0\x57\xe1\xee\x06\x1d\xda\x35\x06\xd2\xf5\x2f\x91\xdd\x69"
+ "\xa5\xbe\x36\x90\x85\xf1\xbb\xcb\x9f\xae\x91\xf0\x2d\x49\x24\x62"
+ "\x66\x65\x06\x8b\x37\x84\xfe\x9c\x6d\xad\x7a\x5d\xc7\x2b\xfa\xdb"
+ "\xdb\x5b\xf5\x23\xa4\x6f\x32\x2f\x5e\xd0\x12\xf4\xf3\xa4\x59\x9f"
+ "\x04\xe0\x37\x19\xb4\x7d\x77\xac\xe3\xf1\x88\xd0\xf7\x53\x78\x45"
+ "\x1f\x4a\x67\xea\xc9\x7d\x56\x18\xdf\x56\x3d\x49\x79\x9a\xe0\x37"
+ "\x15\x6d\x78\x03\x51\x6f\x9b\x41\xfc\x2b\xe2\xea\x51\xfe\x08\xa9"
+ "\x68\x78\x9b\x2c\x7f\x92\xdc\x6e\x03\xd9\x1a\x6d\xfd\x15\x0d\x1b"
+ "\x09\x7e\xb3\x29\xbc\x46\x22\x0b\xae\x91\xf1\x34\x78\x84\x71\x52"
+ "\xbc\x8e\x08\x1b\x75\xe6\xea\xe4\x77\x49\x7a\x1b\x3d\x5b\xbd\x46"
+ "\x20\x68\xeb\x44\xfe\xa5\x83\x47\x18\x39\x0f\x57\xad\x3c\xa4\x3f"
+ "\x44\xbc\xe7\xe1\xaa\x54\x8f\x38\x5a\x64\xcd\xb7\xe9\xac\x71\xf6"
+ "\xe0\x7b\xcc\xfc\xfb\x5d\x58\x9c\xf0\xd6\x03\x35\xf8\x5d\xe6\xbd"
+ "\xfa\x26\x15\xfa\x22\xe1\xbe\x5c\x61\x67\xff\x22\xc5\xb7\xb0\x0e"
+ "\x91\x5e\x1d\x9c\x5e\xf8\x1d\xec\xc5\x16\x42\x67\xda\xd4\x20\xeb"
+ "\xe9\x07\xb2\xef\x60\x56\x13\x91\xf7\xe7\x86\x90\xad\x02\xff\x06"
+ "\x26\xac\x48\xe8\x2b\x00\x4d\x68\xa6\x9a\xec\xba\x66\xf5\xb5\x03"
+ "\x5d\x72\x70\xcf\xee\x2a\xd5\x00\xe0\xcd\x81\x42\x47\x48\x3f\x90"
+ "\x35\x23\x66\x9e\xcd\x10\xe3\x41\xf9\xb3\xa3\x6d\x85\x5e\x07\x6d"
+ "\x8f\xe8\xe8\xd0\xdf\x2e\xed\xef\x95\xfc\x01\x68\xd6\xfe\x6c\xdc"
+ "\xdb\x8b\x3a\x8b\x6d\x1d\xff\xc6\x02\x3c\xa1\x42\xdd\x04\xfa\x10"
+ "\x7a\x1f\xc8\x99\xf8\x4d\x0a\xfa\xa9\xdd\xda\x48\xfc\x2b\x13\x4e"
+ "\x31\xda\xd8\x45\x9a\xe0\x3e\x5f\xa4\xc3\xe4\xb9\x3a\x52\x55\x7c"
+ "\x82\xdc\x97\xec\xdf\x89\x0e\x1d\xdb\xad\x71\x12\x2d\x68\x56\x45"
+ "\x03\xac\x3d\x11\x17\x55\x35\x83\x0e\x01\xc6\x4e\x4f\xf4\x96\x26"
+ "\x35\x1e\xe3\x7f\xfc\x7c\x34\xd1\xfe\x9d\xd1\xa4\xaa\x8c\xd3\xe4"
+ "\xd8\xdb\xbd\xa3\xc9\xb1\x1d\x37\x9f\x26\xfe\x7f\x67\x34\xa9\x89"
+ "\xe1\x34\xf9\xf2\xc1\xde\xd1\xe4\x4b\xcf\xf9\xff\x84\x28\xf5\xd1"
+ "\x90\x5a\xf2\xfe\x30\xd0\xbd\xf3\x57\x46\x0b\xf9\xe9\xb5\xc2\x0b"
+ "\x21\x1a\x2e\xb3\x7c\xe3\xff\x79\x28\xc8\x0c\x4b\x9a\xd9\xff\x7c"
+ "\xbd\x1d\x57\x80\x7b\xd3\x8e\x96\xa1\x2c\xf1\x3a\x39\x32\x01\x65"
+ "\x87\xe3\x7d\xfb\xc7\x80\xdc\xf7\x42\x08\x69\x7b\x21\x46\xfd\xfa"
+ "\x29\xe2\x1f\x58\x4b\x26\x09\x02\xa5\xc6\xb4\x66\x58\xab\x6b\xa3"
+ "\x8d\xcf\x37\x13\x5d\x8a\x3f\xd4\xfd\xea\x03\x5d\xca\x2a\x3c\x6e"
+ "\xd4\xa5\x64\x7d\x0b\x47\xb6\x7f\x73\xe5\x69\xa2\xb6\x8d\x68\x2f"
+ "\xd9\xbd\xd0\x08\xeb\xdf\x70\xe3\xee\x8b\x56\x75\xce\x65\xa2\xa1"
+ "\xea\x3b\x68\xa0\x99\xf8\xe7\x82\x5c\x87\xdf\x3e\x0c\x7f\x40\xbf"
+ "\xb3\x13\x95\x68\x17\xde\x7f\xd1\xa8\xce\xc7\x3a\x23\x1e\xa8\xd9"
+ "\x39\xcc\xac\xc2\x75\x73\xf7\x42\xab\x5a\xe2\x23\xf4\x4f\x98\x69"
+ "\x21\x6a\x18\xcb\xfc\x2b\xdb\xad\x19\xd6\x8d\xa1\x31\xed\x83\x43"
+ "\x27\xda\x07\xdf\x63\xb6\xed\xea\x5f\xe4\x8e\xb7\xf0\xfb\x2b\xae"
+ "\x99\x03\x2c\x44\x3b\xc3\x20\xf3\x98\xb0\x82\xf3\x56\x95\xb5\x89"
+ "\xe0\xde\x87\x40\x58\x2b\x69\x47\x42\xdf\x17\xde\x01\xba\x8b\xfc"
+ "\x05\xeb\xb5\x67\xfe\xda\xac\xe4\xaf\x2b\x22\x7f\x01\x9f\x39\xf8"
+ "\x4b\x5e\x2b\xf7\x07\x70\xfe\x32\x39\xf8\x8b\xad\x95\x2b\xf4\xa1"
+ "\xc8\x63\x12\x7f\xe1\x3a\xc9\xf9\xab\xde\x23\x7f\x1d\xad\x73\xcf"
+ "\x5f\xb6\x30\x67\xfe\x3a\xd6\xc2\xf9\xeb\xc4\xe6\x43\xb1\xc0\x5f"
+ "\xb1\xde\xf2\xd7\x89\x02\xfe\x4d\x69\x68\x09\xb7\x6b\x7d\xf3\x11"
+ "\x2b\x83\x0c\x2c\xcb\xbf\x27\xec\xfc\x5b\x16\xc8\xbb\x83\x03\xac"
+ "\x74\x1d\xc8\xbc\xd0\x8f\x99\xbf\x22\xfe\x57\x06\x87\xe9\xae\x6c"
+ "\x0c\x1b\x69\x19\x1c\xa6\xe7\x6b\xf4\x57\x61\x87\x92\xa1\x1f\xc9"
+ "\xde\xf6\xe3\x2b\x1d\x7b\xee\x37\x31\xb7\xd0\x17\x62\x34\xc2\x37"
+ "\x31\xbe\x40\xe3\x90\x45\xf6\x0c\x72\x2d\x7f\x5c\x3e\xe8\x0a\x4d"
+ "\xba\x14\x72\x37\xf0\xdc\xaa\x23\xb0\x9a\x1f\x81\xb9\x54\x1d\x3d"
+ "\x9f\xd0\xf5\xe3\xb4\xef\x09\x66\x8d\x49\x75\x3c\x00\xf9\x10\x78"
+ "\x59\xe3\xcc\xcb\x9c\x6f\xf9\x35\x6b\xfe\xb8\x22\x6c\x6b\x6a\x39"
+ "\x09\xd4\x3d\x81\xfe\x31\xb5\x61\xcb\x57\x12\xdc\xf3\xe5\xdb\xa8"
+ "\xfa\xfa\x42\xdb\xfa\x7e\x5a\xb8\x7f\x20\xfd\x66\x9a\xca\xf0\x04"
+ "\xb9\x9d\xbe\x30\x4d\x85\x58\xf7\x6e\x5a\x81\x5a\x80\x73\xfc\xfb"
+ "\x7f\x01\xc1\xeb\x39\xed\x1a\xe6\x2b\x20\x40\x9d\x2a\x4b\x01\xc9"
+ "\x49\x02\xdd\x16\xfe\xe7\x3e\x25\x05\x04\xeb\xe7\x2e\xd1\xb2\xef"
+ "\x7d\xec\x3e\x5b\x01\xc1\x7b\xed\x70\xfe\x4f\x42\x00\xc9\x4b\x09"
+ "\x26\x47\xa2\xab\x58\x1b\x47\xa2\x3f\x23\xd8\x06\xca\x77\x47\xa2"
+ "\xf7\x93\xb5\x49\x21\xa4\xb2\xa5\x00\xae\x7f\x45\xd6\x5e\x0c\x85"
+ "\x63\x23\xfc\xae\x91\x66\xd5\xd7\xf9\x47\xa2\x05\x12\xb8\xea\x61"
+ "\x0a\xfc\x49\xab\x71\x1f\x51\x1a\xf1\x83\xbe\x6f\xae\xae\xcd\x27"
+ "\x30\x86\x19\xb8\xcf\x94\xa6\xbf\xd0\x22\xd0\x17\x2e\x08\xe9\x2f"
+ "\x5c\xc4\x67\xdb\xe9\x0b\x3f\xe2\xb3\x73\x53\x74\xa2\x8f\x59\x01"
+ "\xf3\x87\xc9\xb9\x36\x92\x60\x5f\xf1\xb9\xf8\xbc\xb5\x4b\xf4\xe2"
+ "\x33\xc3\x59\xdf\xf0\x99\xd8\xa6\xf3\x33\x31\x87\x33\xc8\xb4\xf0"
+ "\xcc\xda\x01\x70\x1c\x04\xf4\x58\x83\x74\xc0\xe7\x0b\x34\xc6\x97"
+ "\xa6\xc7\xf8\xb0\x7b\x92\x9b\xdc\xdd\xf3\x88\x78\x0f\xf7\x83\x81"
+ "\x7b\xda\x79\x7d\xd6\x06\x60\xcd\x8b\x78\xfe\x9e\x18\x23\xe9\x4c"
+ "\xc3\xda\x36\x8e\x3d\xb5\x87\x39\xf6\x70\x9a\x32\x5e\x79\x21\xc6"
+ "\x17\xe8\xa6\x45\x9c\x82\x36\xb6\x3b\xda\xf8\x26\xc6\x07\xe9\x8d"
+ "\x7c\x23\xf1\x12\xf2\x91\xc4\x43\xac\x9f\x06\x42\x9c\x79\x06\xfe"
+ "\xf7\x17\xdb\x39\x2f\xb5\x03\x7d\x10\xf1\xef\xb8\xff\x3d\x70\xbd"
+ "\x33\x1f\x9d\x3a\x20\xf3\xd1\xa9\x78\x6b\x1a\xa5\xc8\x47\xc6\xe7"
+ "\x33\xa1\x9d\x93\xf7\xcb\xfd\x99\xa6\x42\x1e\xfb\x1b\xe3\xad\x7c"
+ "\xa4\xd3\x3d\xa9\x24\x98\xbf\xcf\x29\x15\x7b\x9f\x54\x63\x30\xf6"
+ "\x55\x7a\x0f\xec\x43\x9e\xa0\x23\xd2\x7b\xac\x6d\x1f\x09\xed\x5e"
+ "\x24\xe2\x3d\x63\xb0\x6d\x69\x0c\x80\x66\x44\xba\x47\xaa\x9f\x27"
+ "\xe8\xa1\xdf\xe1\xec\x1e\xce\x73\x8d\x6e\xf8\xe7\xd4\x2a\x57\x9e"
+ "\xeb\x9f\x4a\x7c\x28\x8c\xb7\xf1\xf9\xcb\xf8\x9c\x2d\xbc\x6f\x9f"
+ "\xd8\xdb\xe1\x19\x40\x03\xb5\x78\xfe\x23\x27\x9e\x10\xdb\xb7\xba"
+ "\x6b\xff\xac\xa2\xfd\x18\x68\x3f\x19\xda\xc7\xb5\xf0\x79\xd4\x5b"
+ "\x4f\x31\x1c\xbc\x27\x99\xb7\x2f\xf1\x2d\xcd\xf7\xc3\xd8\xb1\x7d"
+ "\x9a\x55\xdf\x14\x71\x0c\xfd\xf2\x03\xac\xc7\x7c\x01\xd4\x42\x91"
+ "\xe0\xe2\x0b\xe0\xec\x2b\xf2\x7e\x9a\x59\xf4\x03\xf8\x86\xc5\xf7"
+ "\xda\xf5\x46\xad\x1a\xd7\x70\xd9\x0f\xe0\x14\x5e\x7b\xcd\x98\x54"
+ "\xef\xe4\x07\xf0\x4d\x2c\xd6\x35\xa9\xbe\xf9\xb0\x55\x4d\xd4\x50"
+ "\x36\xf0\xf3\x5f\x96\x38\x9f\x97\xfd\x6c\xf8\x79\xf4\x61\x44\x6b"
+ "\x7e\x6b\xd6\x37\x65\x92\x4d\xa2\x7b\x9d\xf7\xd6\x5f\xa0\xce\x1b"
+ "\xd2\x85\xce\x1b\xf2\x77\xa6\xf3\x9e\x5e\xdc\x3b\x9d\xf7\xb4\xe1"
+ "\xe6\xcb\xf2\x7f\x6f\xfa\xd5\x37\xb5\x5c\xd6\xfa\xd6\xb7\x77\xb2"
+ "\xfc\xb7\x1e\xf7\xff\xfd\x9f\x7e\xd5\x5b\x9a\x9c\x2e\xe5\x34\x31"
+ "\x6d\xee\x1d\x4d\x4c\x05\xbd\xd3\xaf\x9a\x12\x64\xfd\xaa\x29\xc1"
+ "\xb3\x7e\x75\x76\x6e\xd7\xfa\xd5\xb9\x12\x59\xbf\x6a\x18\xc4\x65"
+ "\x9c\xef\xae\x72\x19\xe7\xbb\x8f\xbc\xd7\xaf\xbe\x1b\xf5\x7f\xfa"
+ "\xd5\xf5\xd4\xaf\xbe\x9d\xc4\xf9\xab\xbe\xad\x77\xfa\x55\xbd\x55"
+ "\xa9\x5f\x9d\x1f\xdc\x59\xbf\xfa\xee\xc5\x9e\xeb\x57\xdf\xad\xea"
+ "\x9d\x7e\xf5\x5d\x46\xcf\xf4\xab\xef\xce\xba\xd7\xaf\xce\xce\xf7"
+ "\xac\x5f\xf1\x6b\x9d\xe5\xe2\x73\xab\x64\xb9\xf8\xdc\xe4\x5f\xbe"
+ "\x7e\xd5\x60\x76\x2f\x03\x37\xb4\x71\xfd\xea\x3b\xd3\xf5\xd7\xaf"
+ "\xbe\x33\xb9\xd7\xaf\xce\x2d\xe0\xb2\xe8\x77\x0d\x9d\xf5\x2b\xb8"
+ "\xc7\xad\x7e\x75\x6e\xbb\x78\x8f\x49\xa9\x5f\xf1\x36\x00\x6b\xf6"
+ "\x79\xd6\xaf\x1a\x9f\xe3\xd8\xd3\xf8\x2b\x8e\x3d\x9c\xa6\x9d\xf5"
+ "\xab\x46\x55\xf7\xfa\x15\xe7\x21\xd6\x4f\x8f\xfa\x55\xe3\x93\x9d"
+ "\xf5\xab\xb3\x09\xee\xf5\xab\x26\x27\x3d\xfd\xfb\x03\x4a\xfd\xaa"
+ "\x71\xdd\xdf\x86\x7e\xe5\x91\xb7\xcc\x4a\xfd\xea\xfb\x78\xef\xf5"
+ "\xab\xef\x37\x7a\xa7\x5f\x21\xcf\xb9\xd3\xaf\xbe\x3f\xeb\xca\x73"
+ "\x4a\xfd\xea\x7b\xbb\x7b\xfd\xaa\x69\xb0\x52\xbf\xc2\xf6\xdd\xe9"
+ "\x57\x4d\x8f\x28\xda\xef\xa4\x5f\x35\xbd\xa8\xd4\xaf\x78\x3d\x59"
+ "\xbf\x3a\x4f\x38\x86\x9e\x1d\xe4\xbd\x7e\xd5\x74\xd6\xb3\x7e\xd5"
+ "\x74\x5e\xa9\x5f\x35\xed\xe5\x7a\xd4\xf9\x60\xae\x5f\x35\xd5\xf0"
+ "\xf3\x67\xb5\xce\xe7\x65\xfd\x8a\x9f\x97\xf5\xab\xf3\x23\x7b\xae"
+ "\x5f\x05\xfe\x02\xf5\x2b\x6d\x17\xfa\x95\xf6\xef\x4c\xbf\x6a\x3e"
+ "\xd6\x3b\xfd\xaa\xd9\x63\xfc\xcf\xff\x93\xe5\x7b\x2b\xcb\x9f\x8f"
+ "\xe4\xb2\x56\xcb\x9c\xde\xc9\xf2\x2d\xb3\x7b\x27\xcb\x5b\x46\xcb"
+ "\xb2\xbc\x65\xb4\x67\x59\xfe\xc2\x98\xae\x65\xf9\x4b\xa9\xb2\x2c"
+ "\xff\xe3\x69\xbe\x9e\xfe\x78\x80\xaf\xa7\x3f\xae\xf2\x5e\x96\xbf"
+ "\xd8\xf6\xff\xd9\xfb\xfe\xb8\x28\xae\x73\xfd\xc3\x0c\x2a\x2c\xbf"
+ "\x16\x03\x16\x0d\xb1\x8b\xd1\x74\x35\x18\xd1\xaa\x41\xaf\x36\x68"
+ "\xb5\x31\x29\x2a\xa6\x9a\x62\xfc\x11\x30\x68\x20\x41\x45\x45\x45"
+ "\x45\x40\xab\xbd\x6a\x14\x21\x01\x2e\x46\x14\x4c\xf5\x16\x5b\x4d"
+ "\x48\xbf\xda\x62\xab\xc9\xda\x68\x8b\x29\x02\xa6\x9a\x62\x82\x71"
+ "\x25\x68\xd0\xa0\xae\xba\xca\x02\xbb\x3b\xdf\xf7\xcc\x99\x75\x76"
+ "\x76\x67\x96\x9d\x5d\x24\xe8\xf5\x8f\xf9\xc0\xce\x9c\x39\x73\xce"
+ "\xfb\x3e\xe7\x3d\xcf\x73\x66\xe6\x9d\xc7\x5c\xbe\x23\xb9\xfc\xf7"
+ "\x21\x04\x5f\x37\x4e\xba\xc6\xe5\x6f\x9c\x10\x72\x79\xfd\x25\x7b"
+ "\x2e\x7f\x73\xa0\xf3\x5c\xfe\xe6\x64\xd7\xb8\xfc\xcd\x68\xe7\xb8"
+ "\xfc\xcd\x83\xe2\x5c\xfe\x7a\xa4\x34\x97\x27\xc7\xec\x39\xd8\xad"
+ "\xc9\x3c\x07\xbb\xd5\xbb\xeb\x73\x79\xdd\x51\x71\xbe\xa5\x3b\x49"
+ "\xb8\xfc\xcd\x03\x1d\xcf\xe5\x6f\x1e\x10\xe7\xf2\xb7\x46\x11\xde"
+ "\x73\xb3\xcc\x9e\xcb\xc3\x39\xa2\x5c\xfe\x16\xc7\xff\x6f\x1e\x10"
+ "\x72\x79\x52\x07\xc4\x9a\xcd\xd2\x5c\xfe\xf6\x00\x12\x7b\x6e\x71"
+ "\xeb\x08\xc4\xa7\xf6\x5c\xfe\xd6\xe9\xf6\xb9\x3c\xc1\x10\xdb\x4e"
+ "\x49\x2e\x7f\x3b\xd8\x9e\xcb\x5f\x1f\x2e\xce\xe5\xef\x5c\xe7\x71"
+ "\x74\x67\x9b\x90\xcb\xdf\x9e\xf3\x70\x70\x79\x49\x6c\x1d\x15\x72"
+ "\xf9\x3b\x83\xe5\x73\xf9\x3b\xf1\xf2\xb8\x3c\xc6\x9c\x18\x97\xbf"
+ "\x73\xd0\x16\x73\x42\x2e\x7f\xe7\x94\x38\x97\xbf\x73\x49\xc8\xe5"
+ "\x71\xfd\x62\x5c\x5e\xef\x27\xa8\xdf\x8e\xcb\xeb\x07\x0a\xb9\x3c"
+ "\x29\xc7\x73\x79\x7d\x25\x89\xa1\x4d\x17\xe4\x73\x79\xfd\x41\x69"
+ "\x2e\xaf\x3f\x2c\xe4\xf2\xfa\x4d\x84\xb3\xeb\xb5\x84\xcb\xeb\x8b"
+ "\xc8\xfe\xa6\x3a\xeb\xfd\x3c\x97\x27\xfb\x79\x2e\xaf\xd7\x39\xcf"
+ "\xe5\x7b\x74\x41\x2e\xef\xe5\x80\xcb\x7b\x3d\x62\x5c\xfe\xde\x2e"
+ "\xd7\xb8\xfc\xbd\x22\xd7\x78\xa3\x39\x99\xe7\x8d\xe6\x64\x69\xde"
+ "\xd8\xbc\xd0\x31\x6f\x6c\x3b\xc4\xf3\xc6\xd6\x60\x12\xbb\x5b\x5a"
+ "\x48\xec\x6e\x39\x22\x9f\x37\xb6\x0c\x7d\xcc\x1b\x3b\x92\x37\xde"
+ "\xf5\x24\xbc\xd1\x60\x72\x8d\x37\x1a\x8c\x42\xde\xc8\xf4\xb6\xe7"
+ "\x8d\x2d\xf1\xce\xf3\xc6\x96\x8d\xae\xf1\xc6\x96\x0d\xce\xf1\xc6"
+ "\x96\xcb\xe2\xbc\xb1\x39\x45\x9a\x37\x92\x63\xf6\xf3\x7d\xdb\x46"
+ "\x7e\xbe\x6f\x9b\xd6\xf5\x79\x63\xab\x5e\x7c\x6e\x6f\x35\x11\xde"
+ "\xd8\xd2\xd0\xf1\xbc\xb1\xa5\x41\x9c\x37\xb6\x2d\x21\x73\x6c\x4b"
+ "\xa3\x3d\x6f\x84\x73\x44\x79\x63\xdb\x3e\xee\x9c\x06\x21\x6f\x24"
+ "\x75\x40\xac\x39\x2e\xcd\x1b\x8d\x73\x48\xec\x31\x0e\x26\xb1\x87"
+ "\xf8\xd4\x9e\x37\x1a\xbb\xb5\xcf\x1b\x09\x86\xd8\x76\x4a\xf2\x46"
+ "\xe3\x64\x7b\xde\xd8\x9c\x2c\xce\x1b\xcd\x03\x78\x1c\x99\x4e\x0a"
+ "\x79\xa3\x31\xff\xe1\xe0\x8d\x92\xd8\xd2\x0b\x79\xa3\x69\xbe\x7c"
+ "\xde\x68\xda\x21\x8f\x37\x62\xcc\x89\xf1\x46\xd3\x65\x5b\xcc\x09"
+ "\x79\xa3\xd9\x43\x9c\x37\x9a\x7b\x0b\x79\x23\xae\x5f\x8c\x37\x9a"
+ "\x27\x0a\xea\xb7\xe3\x8d\xe6\x78\x21\x6f\x24\xe5\x78\xde\xc8\x78"
+ "\x92\x18\xda\x1c\x2c\x9f\x37\x9a\x2f\x4b\xf3\x46\xf3\x75\x21\x6f"
+ "\x34\x6b\x08\x3f\x64\x42\x08\x6f\x34\x9f\x25\xfb\x9b\x83\xac\xf7"
+ "\xf3\xbc\x91\xec\xe7\x79\x23\xa3\x76\xc4\x1b\x1d\xf2\x0a\xaa\x7b"
+ "\xed\x7d\x5e\x01\xff\x5b\xf3\x8a\x53\x02\x5e\xc1\x9c\x74\xc8\x2b"
+ "\x28\x4f\xd5\x7d\x5e\x41\x51\xeb\xd8\xb1\x4d\x51\xf3\xd9\xb1\x4d"
+ "\x51\x03\x58\x5e\x31\x19\xe6\x7f\xe0\x15\x07\xaf\x95\x11\x5e\x71"
+ "\xcd\x40\xbd\x73\x83\xe3\x15\x4d\xc8\x6b\xeb\x22\x8e\x57\xcc\x05"
+ "\x5e\x41\x79\xec\xc2\xbc\xc2\xb7\x08\x78\xad\xe5\x9b\x66\x29\xc0"
+ "\x73\x1b\xe0\x37\x8c\x9b\x4f\xa0\x8e\x2a\xe0\xa2\x39\xf8\x7c\x9c"
+ "\x43\x0c\xea\xc2\xe3\x09\xf3\xdd\x83\xab\xb5\xdd\xd8\x6f\x67\x02"
+ "\xe7\x30\x03\xf7\xc0\xbc\x83\xe5\x17\x77\x38\x7e\x71\x87\x5f\xf3"
+ "\xc4\x79\xc4\xd2\x1b\x18\xb3\x69\x99\xba\xe7\xd4\x04\x80\xde\x5d"
+ "\x8c\x5f\x28\x8c\xdf\xc5\xd6\x35\x22\x66\x99\xda\xbf\x68\x29\x0a"
+ "\xda\x89\x79\x46\x23\x52\xfa\xaf\xf3\xf0\x67\xee\x24\x7a\xfb\xeb"
+ "\x09\x97\x3d\x68\xae\x20\x5c\x76\x59\x88\x02\x38\x52\xf8\xee\xdb"
+ "\x3c\xbf\x78\x0f\x73\x8b\x65\x6a\x95\x7e\x99\xba\xef\x9d\x3b\xc0"
+ "\x65\x75\x1c\xb7\x48\x02\x6e\xc1\xae\x79\x1e\x9d\x5e\x7c\x1b\x73"
+ "\x59\xb2\xe6\xc9\xe6\x1b\x7b\x53\x8d\x70\xee\x42\xbc\xf6\xf9\x1c"
+ "\x70\xd9\xcc\xd3\x48\xf9\x93\x50\x88\xf9\x77\xd4\xa1\x99\x13\x51"
+ "\xdf\xea\x72\x13\xd8\xe8\x2e\xbb\x0e\x8a\xf3\x5a\x55\xc6\x7d\x85"
+ "\x70\xce\x26\x96\xcf\x52\x4c\x19\xd4\x17\xa9\x5b\xa6\xa6\xde\x5f"
+ "\x6a\xc5\x65\x83\x31\x97\x1d\x2d\xcd\x65\x29\x8f\x24\x97\xb8\x2c"
+ "\xe5\x91\x28\xe0\x1a\x54\x8f\x8d\x76\x5c\x83\xf2\x38\xed\x34\xd7"
+ "\xa0\x3c\x6e\xb9\xc4\x35\x28\x0f\x9d\x53\x5c\x83\xa2\xa6\xd9\x72"
+ "\x8d\xfd\x2c\xd7\x60\x2a\x30\x36\xc5\xb9\x06\x39\x66\x37\x47\x50"
+ "\xf4\xad\xfb\x73\x04\x45\x1f\xeb\xf2\x5c\x83\xa2\xe3\x44\xe7\x03"
+ "\x8a\x4e\x62\xb9\x06\x45\xc5\x74\x38\xd7\x80\x3a\x45\xb9\x06\x45"
+ "\x5f\x60\xe3\x32\x45\x4d\xb7\xe3\x1a\xf8\x1c\x31\xae\x41\x79\x06"
+ "\x72\xe7\xc4\x08\xb8\x06\x57\x07\xc4\x9f\xc1\x92\x5c\x83\xf2\x3c"
+ "\x45\xe2\x91\xe7\x0e\xc2\x35\x88\x4f\xed\xb8\x06\xe5\xb9\xa4\x5d"
+ "\xae\xc1\x61\x88\x6d\xa7\x14\xd7\xa0\x3c\x8f\xd8\x73\x0d\xe6\x84"
+ "\x28\xd7\xa0\xba\xe7\xf2\x38\xea\x3e\x54\xc0\x35\xa8\x6e\x1e\x0f"
+ "\x05\xd7\x90\xc6\x56\x9c\x80\x6b\x50\xdd\xce\xc8\xe6\x1a\x54\xf7"
+ "\x6e\xb2\xb8\x06\x8b\x39\x11\xae\x41\x75\x9f\x66\x8b\x39\x01\xd7"
+ "\xa0\xba\x2f\x14\xe5\x1a\x54\xf7\x8d\x02\xae\xc1\xd6\x2f\xc2\x35"
+ "\xa8\xee\x1f\x0b\xea\xb7\xe5\x1a\x54\xf7\xd3\x02\xae\xc1\x95\xbb"
+ "\xcf\x35\xa8\x1e\x29\x9c\x5e\x5b\x28\x9b\x6b\x50\x3d\xa6\x49\x72"
+ "\x0d\xaa\xc7\x4c\x01\xd7\xa0\x7a\xb0\xdf\xbb\xd2\x52\x3d\x36\xb0"
+ "\x5c\x83\xea\x11\x45\xb8\x06\x93\x6c\xbd\x9f\xe7\x1a\x64\xff\x7d"
+ "\xae\xb1\xa5\x47\x9e\xf3\x6b\x54\x8f\xdf\x61\xfd\x41\xd7\xa8\x28"
+ "\xef\x71\xae\xcd\xeb\xde\x51\x3f\xfc\xfd\xe6\x47\xec\x1d\xd6\x2d"
+ "\x3d\x4a\xd9\x75\x1d\x4a\x71\xce\xa5\xfb\xcd\x94\xe2\xec\x0f\xef"
+ "\x93\x47\xec\x19\xeb\x2d\xde\x9b\x88\x4f\x7c\x93\x5c\xf3\x89\x6f"
+ "\xe2\x0f\xef\x93\x47\xec\xb9\x8c\x2d\x3e\xa1\xc4\x27\x7e\x26\xd7"
+ "\x7c\xe2\x67\x74\x69\x7d\x9d\x0a\x6e\xe4\x75\x70\x70\xa3\xa4\x0e"
+ "\xa6\xfc\x4f\x3b\xd6\xc1\x4f\x44\xf0\x3a\x38\x30\x97\xf0\xce\xc0"
+ "\xe5\x44\x07\x07\x8e\xc0\xf5\x66\x60\x1d\xfc\xc1\x48\xcd\x47\x4b"
+ "\xcb\x29\xe6\x83\x96\x98\x03\xb7\x0d\xd4\xb6\xd5\xc8\xd3\x88\x75"
+ "\x30\xd8\x7f\x5b\x2b\xd6\xc1\x27\x10\xfb\xed\x04\x4a\x79\xb0\xaa"
+ "\xc1\x80\x98\x3c\x3f\xf2\x3c\x1a\x15\xf0\x14\xe0\x84\xae\x36\x18"
+ "\xd8\x32\xf8\xd8\x27\xb7\xcb\xa9\x9c\x56\x9b\xb5\xf7\xa5\x06\x0a"
+ "\xe7\x79\xb6\x5e\x7b\x37\xe5\x3f\xab\xc3\x6b\xef\x2d\x7b\x0c\x39"
+ "\xf7\xd7\xdf\x07\x3b\x5e\x7b\xdf\xd5\x0a\x73\xa5\xc8\xfa\x3b\x5e"
+ "\x7b\xdf\xb5\xe2\x11\x5b\x7b\xdf\xe2\x5b\x46\xb0\xa7\x5c\xe5\xd2"
+ "\xda\x3b\xa5\x4c\x13\xea\xe1\x5e\xf9\xf6\x7a\x58\x79\xc1\x79\x3d"
+ "\x1c\xe8\xe1\x9a\x1e\xc6\x8f\x2c\x3a\xa3\x87\x03\xe3\x45\xf5\x30"
+ "\xe5\x5f\x93\x21\xa5\x87\xb9\x63\xf6\x3a\xe6\x09\x0f\x5e\xc7\xf4"
+ "\x3c\xdd\xf5\xf5\x70\xcf\x14\x71\xcd\xd2\x73\x15\xd1\xc3\x81\x71"
+ "\x1d\xaf\x87\x03\xe3\xc4\xf5\x70\xcf\xeb\x44\x3b\x04\x26\xd8\xeb"
+ "\x61\x38\x47\x54\x0f\x3f\x11\xc6\x9d\x13\x27\xd4\xc3\xa4\x0e\x88"
+ "\x43\x63\xa5\xf5\xf0\x13\xe7\x49\x5c\x7a\x62\x3f\x89\x4b\xc4\xa7"
+ "\xf6\x7a\xf8\x89\x75\xed\xeb\x61\x82\x21\xb6\x9d\x92\x7a\xf8\x89"
+ "\x53\x76\x7a\x98\xf2\xaf\x14\xd7\xc3\xc1\x7b\x78\x1c\x05\x8f\x13"
+ "\xea\xe1\xa0\xc0\x87\x43\x0f\x4b\x62\x2b\x45\xa8\x87\x83\x2e\xc9"
+ "\xd7\xc3\xc1\xc1\xf2\xf4\x30\xc6\x9c\x98\x1e\x0e\x8e\xb7\xc5\x9c"
+ "\x50\x0f\x07\xaf\x15\xd7\xc3\xc1\xf9\x42\x3d\x8c\xeb\x17\xd3\xc3"
+ "\xc1\xc7\x05\xf5\xdb\xe9\xe1\xe0\x0b\x42\x3d\x4c\xca\xf1\x7a\xb8"
+ "\x57\x16\x89\xa1\xfe\xcb\xe5\xeb\xe1\x5e\xf1\xd2\x7a\xb8\x57\x92"
+ "\x50\x0f\xf7\x1a\x43\x74\x6f\xaf\x3c\xa2\x87\x7b\xc5\x90\xfd\xfe"
+ "\xa9\xd6\xfb\xef\xeb\x61\x6e\x3f\xaf\x87\x7b\xed\x7d\xfc\x7e\xeb"
+ "\xc3\xa2\x87\x43\xa6\xb9\xa6\x87\x43\x62\x7e\x78\x9e\xff\xa8\x69"
+ "\xaf\x5e\xe4\x5d\x4a\xaa\xf7\x65\xd7\x78\x7e\x6f\xe9\xfc\x8f\x8f"
+ "\xb5\x97\x8b\x3e\x09\x29\x24\x3e\x79\x72\x95\x6b\x3e\x79\x32\xcd"
+ "\x35\xed\xf5\x74\x02\xaf\xbd\x9e\x4e\x90\xd6\x5e\xa1\x2f\x39\xd6"
+ "\x5e\xaa\x03\xbc\xf6\xfa\xb1\x1f\xe1\x38\x7d\x6f\x11\x8e\xd3\xf7"
+ "\x63\xf9\xda\xab\xef\x40\xa1\xf6\x0a\xdd\xf1\x58\x7b\x3d\x28\xed"
+ "\xd5\x27\x9c\x60\xef\xa9\xbb\xae\x69\xaf\xa7\xf4\x42\xed\xd5\x3f"
+ "\xd0\x5e\x7b\xf5\x9d\xe9\xbc\xf6\xea\xbb\xd6\x35\xed\xd5\x37\xdd"
+ "\x39\xed\xd5\xf7\x82\xb8\xf6\x0a\x8d\x96\xd6\x5e\xe4\x98\x3d\x67"
+ "\x56\xad\xe5\x39\xb3\xea\xa5\xae\xaf\xbd\x7e\xdc\x24\xce\x8f\x7f"
+ "\x7c\x97\x68\xaf\xbe\x75\x1d\xaf\xbd\xfa\xd6\x89\x6b\x2f\x55\x12"
+ "\xe1\xa9\x7d\xb5\xf6\xda\x0b\xce\x11\xd5\x5e\xaa\x5d\xdc\x39\x75"
+ "\x42\xed\x45\xea\x80\x38\x74\x44\x5a\x7b\x85\xcd\x20\x71\x29\x6c"
+ "\x00\x89\x4b\xc4\xa7\xf6\xda\x4b\x65\x6a\x5f\x7b\x11\x0c\xb1\xed"
+ "\x94\xd4\x5e\x61\x13\xed\xb5\x57\xe8\x24\x71\xed\xf5\xf4\x53\x3c"
+ "\x8e\xfa\x1d\x13\x6a\xaf\xb0\x6d\x0f\x87\xf6\x92\xc4\x56\x93\x50"
+ "\x7b\xf5\x9b\x23\x5f\x7b\xf5\xcb\x95\xa7\xbd\x30\xe6\xc4\xb4\x57"
+ "\xbf\x0b\xb6\x98\x13\x6a\xaf\x7e\x2d\xe2\xda\xeb\xe9\x40\xa1\xf6"
+ "\xc2\xf5\x8b\x69\xaf\xa7\xc7\x0a\xea\xb7\xd3\x5e\x4f\xcf\x14\x6a"
+ "\x2f\x52\x8e\xd7\x5e\x4f\x1b\x49\x0c\x7d\xf2\x96\x7c\xed\xf5\xf4"
+ "\x05\x69\xed\xf5\xf4\x65\xa1\xf6\x7a\xba\x9c\x68\xac\xfe\x4a\xa2"
+ "\xbd\x9e\xae\x24\xfb\x9f\xd4\x59\xef\xe7\xb5\x17\xd9\xcf\x6b\xaf"
+ "\xfe\xaa\xc7\xef\xbe\x3e\x2c\xda\x6b\xc0\x69\xd7\xb4\xd7\x80\xca"
+ "\xc7\x3c\xbf\xa3\x79\x7e\xff\xe1\x84\x6b\xfd\x24\xde\x35\x9e\xff"
+ "\x93\x38\xd7\x78\xfe\x90\x68\x9e\xe7\x0f\x89\x96\xe6\xf9\xea\xa1"
+ "\x8e\x79\x7e\x78\x1e\xcf\xf3\x07\xdd\x25\xf3\xe9\xa0\xf3\x64\x3e"
+ "\x1d\xb4\x43\x3e\xcf\x1f\x14\x28\xe4\xf9\xea\x75\x8f\x79\xfe\x83"
+ "\xe2\xf9\xcf\x04\x11\xec\x0d\xbc\xe0\x1a\xcf\x1f\x58\x27\xe4\xf9"
+ "\x43\x5a\xec\x79\xfe\xa0\x71\xce\xf3\xfc\x41\xf3\x5d\xe3\xf9\x83"
+ "\x12\x9c\xe3\xf9\x83\x4e\x8a\xf3\x7c\xf5\x70\x69\x9e\x4f\x8e\xd9"
+ "\xf3\xb3\xf0\xf9\x3c\x3f\x0b\x1f\xda\xf5\x79\xfe\xb3\x67\xc5\xb9"
+ "\xd8\xb3\x17\x08\xcf\x1f\x74\xa2\xe3\x79\xfe\xa0\x13\xe2\x3c\x3f"
+ "\x9c\x7b\xfe\x6b\x50\x85\x3d\xcf\x87\x73\x44\x79\x7e\xf8\x46\xee"
+ "\x9c\x13\x42\x9e\x4f\xea\x80\x38\xb4\x47\x9a\xe7\x0f\x1e\x4b\xe2"
+ "\xd2\x60\x3f\x12\x97\x88\x4f\xed\x79\x7e\xf8\xe5\xf6\x79\x3e\xc1"
+ "\x10\xdb\x4e\x49\x9e\x3f\x78\xb0\x3d\xcf\x57\x47\x88\xf3\xfc\x21"
+ "\xdd\x78\x1c\x3d\xb7\x4f\xc8\xf3\x07\x2f\x7f\x38\x78\xbe\x24\xb6"
+ "\xce\x0a\x79\xfe\x73\x13\xe5\xf3\xfc\xe7\x56\xc9\xe3\xf9\x18\x73"
+ "\x62\x3c\xff\xb9\x93\xb6\x98\x13\xf2\xfc\xe7\x2e\x89\xf3\xfc\xe7"
+ "\x5a\x84\x3c\x1f\xd7\x2f\xc6\xf3\x87\x0c\x10\xd4\x6f\xc7\xf3\x87"
+ "\x8c\x13\xf2\x7c\x52\x8e\xe7\xf9\x43\x1a\x48\x0c\xfd\xc9\x79\xf9"
+ "\x3c\x7f\xc8\x49\x69\x9e\x3f\xe4\xb4\x90\xe7\x0f\x29\x21\x7c\x7e"
+ "\x88\x81\xf0\xfc\x21\x87\xc8\xfe\x9f\xd4\x5a\xef\xe7\x79\x3e\xd9"
+ "\xcf\xf3\xfc\x08\xaf\xc7\xef\xc5\x3e\x2c\x3c\x7f\xe8\x61\xd7\x78"
+ "\xfe\xd0\x43\xae\x71\xca\x51\x25\x3c\xa7\x1c\x55\x22\xcd\x29\x87"
+ "\x6d\x74\xcc\x29\x47\x36\xf2\x9c\x72\xc4\x4b\x24\x76\x8f\x20\xef"
+ "\xa6\x51\xc3\xaf\xcb\xe7\x94\xc3\xe7\x0b\x39\xe5\xb0\x73\x8f\x39"
+ "\xe5\x83\xe2\x94\x11\xdc\x33\x63\xc3\x87\xba\xc6\x29\x87\x47\x08"
+ "\x39\xe5\xe8\xc9\xf6\x9c\x72\x78\xbe\xf3\x9c\x72\xf8\x11\xd7\x38"
+ "\xe5\xf0\x72\xe7\x38\xe5\x88\xde\xe2\x9c\x72\xd8\x26\x69\x4e\x49"
+ "\x8e\xd9\x73\x81\x91\x47\x78\x2e\x30\x72\x63\xd7\xe7\x94\x23\xd5"
+ "\xe2\xf3\xfe\xc8\xa1\x84\x53\x8e\x08\xe9\x78\x4e\x39\x22\x44\x9c"
+ "\x53\x8e\x24\xef\xbf\x52\x23\x42\xed\x39\x25\x9c\x23\xca\x29\x47"
+ "\x9e\xe7\xce\x09\x11\x72\x4a\x52\x07\xc4\xa1\xbb\xd2\x9c\xf2\x79"
+ "\xee\x79\xc2\xe7\xe3\x49\x5c\x22\x3e\xb5\xe7\x94\xcf\x8f\x6a\x9f"
+ "\x53\x12\x0c\xb1\xed\x94\xe4\x94\xcf\xaf\xb3\xe7\x94\xc3\x36\x88"
+ "\x73\xca\x51\x33\x79\x1c\x45\xb6\x08\x39\xe5\xf3\xa7\x1e\x0e\x4e"
+ "\x29\x89\x2d\xb5\x90\x53\x46\xee\x90\xcf\x29\x23\x4f\xcb\xe3\x94"
+ "\x18\x73\x62\x9c\x72\x54\x6f\x5b\xcc\x09\x39\xe5\xa8\x11\xe2\x9c"
+ "\x72\xd4\x64\x21\xa7\xc4\xf5\x8b\x71\xca\x51\xab\x04\xf5\xdb\x71"
+ "\xca\x51\xf9\x42\x4e\x49\xca\xf1\x9c\x72\x74\x24\x37\xdf\x0d\x96"
+ "\xcf\x29\x47\xf7\x96\xe6\x94\xa3\xc3\x84\x9c\x72\x94\x9e\x70\xc7"
+ "\xd1\xd1\x84\x53\x8e\xe6\xf6\x0f\x0b\xb7\xde\xcf\x73\x4a\xb2\x9f"
+ "\xe7\x94\xa3\x67\xbb\xfe\xce\xec\x78\x35\xcf\x39\xc6\xab\xa5\x39"
+ "\xc7\xe8\x16\xc7\x9c\xe3\x85\x14\x9e\x73\x8c\x3d\x43\xc6\xf6\xd8"
+ "\xc3\x64\x6c\x8f\x65\x75\xd8\xda\xd3\xf8\x9d\xd9\x91\x9a\x0f\x6f"
+ "\x94\xb1\x9c\xe3\xa3\x45\x06\x0a\xb8\xa1\xa7\x19\x73\x0e\xe0\x80"
+ "\x5b\x57\x60\xce\xd1\xc0\xbd\x33\x3b\xe6\xfa\xe9\x34\x6b\xce\xf1"
+ "\x5f\x93\xd9\xf7\x67\x31\xef\xd0\x1b\xd8\x72\xf8\xb8\xd8\xfb\xb4"
+ "\xc7\x16\x71\xef\xd3\x42\xdd\xd6\xef\xd1\xb2\xef\xd6\xde\x00\x4e"
+ "\x32\x0f\x7c\x61\xc5\x49\x1e\xbf\x4f\xeb\xe8\x7d\xda\x31\x47\x5c"
+ "\xe3\xc0\x63\xca\x85\x3c\x64\xfc\x39\x7b\x1e\x32\xf6\x29\xe7\x79"
+ "\xc8\xd8\x71\xae\xf1\x90\xb1\x51\xce\xf1\x90\xb1\x7b\xc4\x79\xc8"
+ "\x68\x23\xc6\xad\x38\x0f\x21\xc7\xec\xe7\x8f\x17\xc6\xf1\xf3\xc7"
+ "\x0b\x7e\x5d\x9f\x87\xfc\xac\x4c\x7c\xae\xf8\xd9\x11\xc2\x43\xc6"
+ "\x96\x74\x3c\x0f\x19\x5b\x22\xce\x43\x5e\x18\x4c\x62\xf6\xd8\xbd"
+ "\xf6\x3c\x04\xce\x11\xe5\x21\x2f\x70\xcf\x7f\x8e\x2d\x11\xf2\x10"
+ "\x52\x07\xc4\xa6\xb5\xd2\x3c\x24\xaa\x37\x89\x55\x2f\x5c\x25\xb1"
+ "\x8a\xf8\xd4\x9e\x87\xbc\x70\xbc\x7d\x1e\x42\x30\xc4\xb6\x53\x92"
+ "\x87\x44\x79\xdb\xf3\x90\xd1\x06\x71\x1e\x32\xee\x12\x8f\xa3\x71"
+ "\xeb\x84\x3c\x24\x6a\xda\xc3\xc1\x43\x24\xb1\x55\x26\xe4\x21\xe3"
+ "\xc2\xe4\xf3\x90\x71\x33\xe4\xf1\x10\x8c\x39\x31\x1e\x32\x6e\x8f"
+ "\x2d\xe6\x84\x3c\x64\xdc\x31\x71\x1e\x32\xee\x9c\x90\x87\xe0\xfa"
+ "\xc5\x78\xc8\x78\x0f\x41\xfd\x76\x3c\x64\xfc\x53\x42\x1e\x42\xca"
+ "\xf1\x3c\x64\xbc\x86\xd3\x72\x7b\xe4\xf3\x90\xf1\x7b\xa4\x79\xc8"
+ "\xf8\xfd\x42\x1e\x32\x3e\x9d\xf0\x8d\xf1\x67\x09\x0f\x19\x9f\xc3"
+ "\x71\x99\x12\xeb\xfd\x3c\x0f\x21\xfb\x79\x1e\x32\xbe\xc1\xc9\xb5"
+ "\x2d\xbd\x9c\xf7\x69\x0f\xde\x13\xae\x6d\x59\xd6\xb5\x8c\xe1\x3e"
+ "\x7b\xef\xaf\x6d\x59\xdf\x13\x15\x59\xdb\xc2\xf3\x39\xbf\xb6\x75"
+ "\x81\x8d\x53\xfc\xda\x96\x96\x5d\xdb\xc2\xeb\x5a\xf8\xbe\xa8\x65"
+ "\x5d\xcb\xbc\xd2\xfe\x5d\xda\x83\x66\xf9\xeb\x5a\xfc\xbd\x51\x4d"
+ "\x25\x59\xd7\xaa\xbd\xbf\xae\x85\xe7\x72\x53\xb3\xfd\xba\x16\x9e"
+ "\xc3\xf9\x75\xad\xaf\x3a\x78\x5d\x6b\xc2\x36\xd7\xe6\xf4\x09\xd2"
+ "\xdf\xff\x7e\xfc\x2e\xad\x8b\xf7\xaf\xc7\x1b\xc8\x7a\xcf\x2f\xc2"
+ "\x5c\xbb\x7f\xfd\x0b\xd5\x0f\xef\x93\x47\xed\x79\xee\x09\x67\x89"
+ "\x4f\x5e\x3c\xec\x9a\x4f\x5e\x94\x5c\xff\x7d\xfc\x9c\x87\xab\x3e"
+ "\xf9\x45\x22\xf1\xc9\x4b\x2f\xb9\xe6\x93\x97\x26\xb9\xb6\x26\x3f"
+ "\x2d\x96\xd7\xc7\xd3\x62\xad\xf5\x71\xc5\x04\x6b\x7d\xfc\x72\x6f"
+ "\xc7\xfa\x78\x4a\x09\xaf\x8f\x27\x7b\x10\xce\x19\x7d\x99\x70\xce"
+ "\xe8\x7d\xac\x3e\x1e\x87\x58\x5d\x6c\xc4\x1a\xf9\x2d\x03\xf5\xe1"
+ "\x35\x0d\x65\x5c\x4f\xb4\x71\xb5\xb1\x12\x9d\xd6\x19\xd0\x3b\x2b"
+ "\x90\xe7\xe6\x1b\xc8\xf3\x0f\xb7\x0d\x54\x40\x32\xf2\x82\x39\x08"
+ "\xec\x55\x09\x9c\x65\x17\x4a\xc9\xc0\xba\x39\xfa\xa9\xea\x14\x9d"
+ "\x95\x6e\x7e\x79\x1d\xaf\x99\xa1\x5c\x8a\x01\x7d\xfa\x96\x86\xc2"
+ "\xda\xb8\x2d\xff\x59\x5d\xdb\x60\x9f\x12\x36\xef\x94\xf5\xba\x3d"
+ "\x5c\x5b\x35\x57\xb8\x6e\xdf\x9a\xff\xac\xbe\xe5\xa0\xcf\x5e\x36"
+ "\xdf\x65\x18\xbf\x76\x2f\x27\xd7\xe5\xce\x56\x14\x64\x59\xb7\xdf"
+ "\xf9\xc8\xad\xdb\xbf\x68\x24\xf8\xfc\xe5\x55\xd7\xd6\xed\x7f\xd9"
+ "\x28\xd4\xcb\xaf\x74\xb3\xd7\xcb\xd1\x93\x9d\xd7\xcb\xd1\x4b\x5c"
+ "\xd3\xcb\xd1\x29\xce\xe9\xe5\xe8\x33\xb6\x7a\xb9\x34\x03\xeb\xe5"
+ "\x97\x43\x31\x8e\xc5\xf5\x32\x39\x66\xaf\x73\xa6\x2c\xe1\x75\xce"
+ "\x94\xb1\x5d\x5f\x2f\x4f\xd6\x8a\x6b\x9a\xc9\x57\x89\x5e\x8e\xae"
+ "\xe9\x78\xbd\x1c\x5d\x23\xae\x97\xa7\xcc\x21\xda\x22\xba\xc6\xa2"
+ "\x7d\x79\xbd\x0c\xe7\x88\xea\xe5\x29\xb9\xb6\xe7\x10\xbd\x1c\x7d"
+ "\x96\xe8\xe5\x29\x07\xa5\xf5\xf2\x54\xee\x7e\xe2\xd4\xde\x24\x76"
+ "\x11\x9f\xda\xeb\xe5\x29\xb7\xda\xd7\xcb\x04\x43\x6c\x3b\x25\xf5"
+ "\xf2\xd4\x51\xf6\x7a\xf9\xe5\x10\x71\xbd\x3c\x2d\x90\xc7\x51\xcc"
+ "\xc7\x42\xbd\x3c\x75\xdd\xc3\xa1\x97\x25\xb1\xa5\x15\xea\xe5\x98"
+ "\x69\xf2\xf5\x72\xcc\x46\x79\x7a\x19\x63\x4e\x4c\x2f\xc7\x9c\xe1"
+ "\xf0\x73\x56\x5c\x2f\xc7\x5c\x17\xd7\xcb\xd3\xba\x09\xf5\x32\xae"
+ "\x5f\x4c\x2f\x4f\x1b\x2a\xa8\xdf\x4e\x2f\x4f\x9b\x2c\xd4\xcb\xa4"
+ "\x1c\xaf\x97\xa7\xe9\x48\x0c\x7d\xe9\xb8\x7c\xbd\x3c\xed\x8c\xb4"
+ "\x5e\x9e\x76\x5e\xa8\x97\xa7\x1d\x20\xba\xf8\x15\x4f\xa2\x97\xa7"
+ "\x69\xc8\xfe\x97\x34\xd6\xfb\x79\xbd\x4c\xf6\xf3\x7a\xf9\x95\x20"
+ "\x27\xf5\xb2\xa1\x83\xf4\x72\xe9\xc3\xa5\x97\xff\xbe\xb5\x6b\xe8"
+ "\xe5\x5f\x1d\x73\x4d\x2f\xff\xea\xa8\x13\x3a\x40\xdf\x8e\x0e\xd8"
+ "\xfb\x58\x07\x58\xf3\xac\x57\xd4\x84\x67\xcd\x98\xe6\x9a\x0e\x98"
+ "\xe1\xcc\xfb\xcf\x0f\xd4\x27\x8f\x96\x3f\xa6\x93\x1c\xef\xd4\xab"
+ "\x97\x5c\xf3\xc7\xab\xda\xc7\x5a\xb9\xa3\x7d\x32\x83\x7b\xf7\x39"
+ "\x76\xb9\x6b\x3e\x89\x4d\x75\x4d\x2b\xc7\x95\xf2\x5a\x39\xae\xd4"
+ "\x5a\x2b\xff\x43\x70\x2f\x79\xe6\x44\xc7\x5a\x79\x8e\x8e\xd7\xca"
+ "\xb3\xa7\x11\xbe\x39\x7b\x04\xe1\x9b\xb3\xd8\x67\x4a\xd2\x0f\x13"
+ "\xad\x7c\x0f\x6b\xe5\x2b\xa0\x95\x17\xc4\x51\x46\xee\x9b\x0e\xf8"
+ "\x99\xb4\xd3\xa0\x77\xb1\x3e\xae\x4e\x83\xff\x53\x75\xe8\x9d\xa5"
+ "\xc8\x73\x0b\xe8\xdc\xfd\x30\x37\xee\x5f\xa1\xa3\x36\xbd\x05\xf3"
+ "\x4a\xed\x41\x14\x90\x08\x1a\xfa\x36\xd6\xd0\x27\x40\x1f\x6f\xe4"
+ "\x34\xf4\xac\x85\xd5\xa9\xd6\x1a\x7a\xe6\x49\x56\x43\xeb\xc8\xf3"
+ "\x6e\xd5\xa9\xa0\xa1\xe1\x7a\xf8\x1b\x11\xd6\x1a\xba\x05\x34\x72"
+ "\x2b\x68\xe4\x9c\x6b\x36\x7a\x7a\x81\xbd\x9e\x6e\x09\x7e\xd6\x60"
+ "\x18\xec\x53\x8a\xf5\xf4\xbd\x3d\x8f\xf5\xb4\xbd\x9e\xfe\x35\x17"
+ "\xe7\x67\x8d\x72\x4d\x4f\xcf\x8a\x14\xea\xe9\xf8\x19\xf6\x7a\x7a"
+ "\xd6\x2e\xe7\xf5\xf4\xac\xe3\xae\xe9\xe9\x59\x1a\xe7\xf4\xf4\xec"
+ "\x30\x5b\x3d\xfd\xbf\xec\xfd\xe7\x99\x93\x30\xd6\xc5\xf5\x34\x39"
+ "\x66\xaf\x83\xe6\x1c\xe7\x75\xd0\x9c\x6d\x5d\x5f\x4f\xcf\x89\x10"
+ "\xd7\x3c\x73\x46\x11\x3d\x3d\x5b\xd5\xf1\x7a\x7a\xb6\x4a\x5c\x4f"
+ "\xcf\x21\xdf\x7f\x82\xe3\xf6\x7a\x1a\xce\x11\xd5\xd3\x73\x2e\xd9"
+ "\x9e\x43\xf4\xf4\xec\xfe\x44\x4f\xcf\xe1\xdf\x7f\xb6\xf3\xe1\xdc"
+ "\x1d\x24\xbe\xcd\x4d\x22\xf1\x8d\xf8\xd4\x5e\x4f\xcf\x1d\xd7\xbe"
+ "\x9e\x26\x18\x62\xdb\x29\xa9\xa7\xe7\xde\xff\xfe\x19\xaf\xa7\x67"
+ "\x4e\x10\xd7\xd3\x71\xf1\x3c\x8e\xe2\x3c\x84\x7a\x7a\xee\x99\x87"
+ "\x43\x4f\x4b\x62\x2b\x42\xa8\xa7\x5f\xdf\x23\x5f\x4f\xbf\x7e\x4e"
+ "\x9e\x9e\xc6\x98\x13\xd3\xd3\x71\x5c\xfe\x33\x82\x17\x7b\x3d\x1d"
+ "\x37\x56\x5c\x4f\xc7\xcd\x10\xea\x69\x5c\xbf\x98\x9e\x8e\x5b\x27"
+ "\xa8\xdf\x4e\x4f\xc7\xed\x12\xea\x69\x52\x8e\xd7\xd3\xf1\x51\x24"
+ "\x86\xc6\x5e\x97\xaf\xa7\xe3\xc3\xa4\xf5\x74\xfc\x40\xa1\x9e\x8e"
+ "\x33\x12\xdd\x1c\x3f\x9d\xe8\xe9\x78\x25\xd9\x1f\xdb\x64\xbd\x9f"
+ "\xd7\xd3\x64\x3f\xaf\xa7\xe3\x13\x9c\xbf\xff\xec\x56\xfe\xaa\xbd"
+ "\x9d\xff\x6e\x45\x47\xe5\xaf\xb2\xdc\x83\xfe\xa1\xdf\xad\x78\x23"
+ "\xd0\x35\x4d\xfd\x86\xf2\xb1\x7e\xeb\x48\xad\x10\x9f\x46\x78\x56"
+ "\xc2\x1e\xd7\xb4\x42\x42\xc9\x63\xfd\xd6\xd1\x3e\x79\x23\x96\xf8"
+ "\x64\xc1\x08\xd7\x7c\xb2\x60\xb8\x6b\xfa\x6d\xd1\x04\x5e\xbf\x2d"
+ "\x9a\x20\x7d\xaf\xf3\xcd\x6e\x8e\xf5\xdb\xdb\x5b\x79\xfd\x96\x74"
+ "\x9d\xf0\x9b\xa4\x33\x84\xdf\x24\xe5\x76\xdc\xbd\xce\x24\x6f\xe1"
+ "\xbd\xce\x37\x17\x3e\xbe\xd7\xd9\x19\xda\x2c\xa1\x91\xe0\x33\xf1"
+ "\x9c\x6b\xda\x2c\xf1\xac\x50\x9b\x2d\xba\x65\xaf\xcd\x92\x46\x39"
+ "\xaf\xcd\x92\xe6\xb8\xa6\xcd\x92\x66\x3b\xa7\xcd\x92\x8e\x89\xdf"
+ "\xeb\x7c\xd3\x4b\xfa\x5e\x27\x39\x66\xcf\xa9\xdf\x9e\xc3\x73\xea"
+ "\xb7\x07\x76\x7d\x6d\xf6\x56\xa5\x38\x7f\x7e\xeb\x1c\xd1\x66\x49"
+ "\x47\x3b\x5e\x9b\x25\x1d\x15\xd7\x66\x6f\xbf\x44\x78\x6c\xd2\x51"
+ "\x7b\x6d\x06\xe7\x88\x6a\xb3\xb7\xd7\xda\x9e\x43\xb4\x59\x92\x86"
+ "\x68\xb3\xb7\x77\x48\x6b\xb3\xe4\x11\x24\x76\x25\x77\x23\xb1\x8b"
+ "\xf8\xd4\x5e\x9b\xbd\x7d\xa1\x7d\x6d\x46\x30\xc4\xb6\x53\x52\x9b"
+ "\x25\x0f\xb0\xd7\x66\x6f\x7a\x8a\x6b\xb3\x85\x26\x1e\x47\x0b\x77"
+ "\x09\xb5\x59\xf2\xc2\x87\x43\x9b\x49\x62\xab\x52\xa8\xcd\x16\x8e"
+ "\x95\xaf\xcd\x16\x2e\x91\xa7\xcd\x30\xe6\xc4\xb4\xd9\xc2\x63\x1c"
+ "\x7e\x34\xe2\xda\x6c\xe1\x79\x71\x6d\xb6\xf0\x96\x50\x9b\xe1\xfa"
+ "\xc5\xb4\xd9\xa2\xa7\x04\xf5\xdb\x69\xb3\x45\xa3\x84\xda\x8c\x94"
+ "\xe3\xb5\xd9\xa2\x3a\x12\x43\x17\x1c\x94\xaf\xcd\x16\x1d\x93\xd6"
+ "\x66\x8b\x4e\x0a\xb5\xd9\xa2\x42\xa2\xc1\x16\xe9\x88\x36\x5b\x74"
+ "\x80\xec\x5f\x70\xc0\x7a\x3f\xaf\xcd\xc8\x7e\x5e\x9b\x2d\x46\xce"
+ "\x6b\x33\xe7\xf3\x5b\xfd\xf0\xcf\x06\x2b\x1f\xb1\x67\x83\x53\xf6"
+ "\xbb\xa6\xcb\x52\x4a\x1f\xeb\x80\x8e\xd6\x01\x8b\xb9\xfc\x42\x4b"
+ "\xc7\xba\xa6\x03\x96\x8e\x71\x4d\x07\xac\xb6\xca\x6d\xb5\x3a\x5a"
+ "\x5a\x07\x2c\xf3\x73\xac\x03\x56\x5a\xe5\xb6\x5a\xce\xe5\xb6\x5a"
+ "\xce\xe5\xb6\x5a\xbe\xa3\xe3\x74\xc0\xf2\x40\xa1\x0e\x58\xb6\xfc"
+ "\xb1\x0e\xe8\x0c\x1d\x90\xa2\x23\xf8\x4c\x75\x31\xff\x55\xaa\x4d"
+ "\xfe\xab\xd5\x22\xf9\xaf\x96\xcb\xc8\x7f\xb5\xdc\xc5\xfc\x57\xcb"
+ "\x9d\xcc\x7f\xb5\xdc\x2e\xff\x15\xd1\x01\xcb\x94\xd2\x3a\x80\x1c"
+ "\xb3\xe7\x6f\x2b\xad\xf2\x5f\xad\x7c\x08\xf2\x5f\xad\x90\xc8\x51"
+ "\xb4\x82\xcb\x7f\xb5\xfc\x01\xe4\xbf\x5a\x2e\x91\xff\x6a\x25\x97"
+ "\xff\x6a\xf9\x09\x7b\x1d\xb0\x5c\x22\xff\xd5\xca\x8d\xb6\xe7\x10"
+ "\x1d\xb0\x9c\xcb\x7f\xb5\xd2\x41\xfe\xab\x34\x2e\xff\x55\x1a\x97"
+ "\xff\x8a\xf8\xd4\x5e\x07\xac\x74\x22\xff\xd5\x72\x2e\xff\xd5\x72"
+ "\x07\xf9\xaf\xd2\x44\xf2\x5f\x2d\xf3\x15\xd7\x01\xab\xad\xf2\x5f"
+ "\xad\xb2\xc9\x7f\x95\xf6\x90\xe4\xbf\x92\xc4\x96\x4d\xfe\xab\x55"
+ "\x2e\xe4\xbf\x5a\x25\x33\xff\xd5\x72\x89\xfc\x57\xab\xb8\xfc\x57"
+ "\xcb\x25\xf2\x5f\xad\x92\xc8\x7f\xb5\xca\x26\xff\xd5\x72\x89\xfc"
+ "\x57\xab\x07\x08\xea\xb7\xd3\x01\xab\x6d\xf2\x5f\x2d\xb7\xc9\x7f"
+ "\xb5\x9a\xcb\x7f\xb5\xf4\xb0\x7c\x1d\xb0\xda\x41\xfe\xab\xd5\x36"
+ "\xf9\xaf\x56\x73\xef\x02\xae\xe6\xf2\x5f\xad\xe6\xf2\x5f\x2d\x3d"
+ "\x64\xbd\x9f\xd7\x01\x64\x3f\xaf\x03\xd6\x3c\xce\x7f\xf5\xd0\xe4"
+ "\xbf\x4a\x77\x31\xff\x55\xba\x8b\xf9\xaf\x36\x58\xe5\xbf\xda\x50"
+ "\x62\xcd\x3b\x85\xb9\x28\xd6\xb6\x93\xff\x6a\x9d\x55\xfe\xab\x2c"
+ "\xee\x79\xf5\x2c\x2e\xff\x55\xa6\x0b\xf9\xaf\x32\x6d\xf2\x5f\xad"
+ "\x7d\x9c\xff\xea\x81\x71\xca\x35\x5c\xfe\xab\x4c\x17\xf3\x5f\x65"
+ "\xda\xe4\xbf\xda\x28\x92\xff\x2a\x53\x46\xfe\xab\x4c\x17\xf3\x5f"
+ "\x65\x3a\x99\xff\x2a\x4b\x22\xff\xd5\x5a\x07\xf9\xaf\xd6\x4a\xe4"
+ "\xbf\x5a\x67\x95\xff\x6a\xdd\x43\x90\xff\x6a\x9d\x44\x8e\xa2\x75"
+ "\x5c\xfe\xab\xac\x07\x90\xff\x2a\x4b\x22\xff\xd5\x3a\x2e\xff\x55"
+ "\x96\x48\xfe\xab\x2c\x89\xfc\x57\xeb\xb8\xfc\x57\x59\x36\xf9\xaf"
+ "\xb2\xb8\xfc\x57\xeb\x1c\xe4\xbf\x5a\xcf\xe5\xbf\x5a\xcf\xe5\xbf"
+ "\x5a\x2b\x91\xff\x6a\xbd\x13\xf9\xaf\xb2\xb8\xfc\x57\x59\x0e\xf2"
+ "\x5f\xad\x17\xc9\x7f\xb5\x56\x22\xff\xd5\x06\xab\xfc\x57\xbf\xb1"
+ "\xc9\x7f\xb5\xfe\x21\xc9\x7f\x25\x89\x2d\x9b\xfc\x57\xbf\x71\x21"
+ "\xff\xd5\x6f\x64\xe6\xbf\xca\x92\xc8\x7f\xb5\xa1\xb7\x2d\xe6\x84"
+ "\x9c\x72\x83\x44\xfe\xab\x0d\x36\xf9\xaf\xb2\x24\xf2\x5f\x6d\x58"
+ "\x25\xa8\xdf\x8e\x53\x6e\xb0\xc9\x7f\x95\x65\x93\xff\x6a\x23\x97"
+ "\xff\x6a\xad\x0b\xf9\xaf\x36\x3a\xc8\x7f\xb5\xd1\x26\xff\xd5\x06"
+ "\x2e\xff\xd5\x46\x2e\xff\xd5\x46\x6e\xff\xda\x70\xeb\xfd\x3c\xa7"
+ "\x5c\x6b\x93\xff\x6a\xa3\xc3\xfc\x57\xc2\xf7\x68\x3a\x64\x6d\xb9"
+ "\x93\xde\xa3\xe9\xa8\xb5\xe5\xae\xf2\x1e\xcd\x7f\x77\x73\x8d\x4f"
+ "\xfe\xb7\xe7\xe3\x67\x7e\x3a\x72\x5d\x79\x63\x0a\xe1\x58\x9b\xf2"
+ "\x5d\x5b\x57\xde\x94\xe7\x1a\xbf\xcf\xd1\xf0\xfc\x3e\x47\x23\xfd"
+ "\x7e\xc0\xe6\xf9\x8e\xf9\x7d\xb6\x17\xcf\xef\xb7\x26\x91\x79\x74"
+ "\xeb\x64\x32\x8f\x6e\xf5\x73\xe5\xfd\x80\x2d\xb7\x91\xe7\x3b\xb6"
+ "\xef\x07\x9c\x3d\x46\xde\x0f\x58\x6a\xfb\x7e\xc0\x3b\x1b\x85\xef"
+ "\x07\x6c\xbe\x2c\xf5\x7e\x00\x5e\x67\x6e\x3b\xe8\xb3\x17\xbf\x1b"
+ "\x20\xfa\x5e\xc0\x6b\x1d\xff\x5e\x00\xd6\x06\x3b\x01\xb3\x58\x1f"
+ "\xe0\x38\xf3\x68\xe9\x83\xff\x8e\x26\xd8\x7d\x67\x9a\x6b\xfa\xe0"
+ "\x9d\x18\xa1\x3e\xc8\x5d\x68\xaf\x0f\xde\x39\xec\xbc\x3e\x78\xe7"
+ "\xbc\x6b\xfa\xe0\x9d\x5a\xe7\xf4\xc1\xd6\x51\xe2\xef\x05\x6c\x4e"
+ "\x94\x7e\x2f\x80\x1c\xb3\xe7\x75\xdb\xce\xf3\xbc\x6e\xdb\xbe\xae"
+ "\xaf\x0f\xb6\x4d\x12\xe7\x70\xdb\xa6\x11\x7d\xb0\x35\xb2\xe3\xf5"
+ "\xc1\xd6\x48\x71\x7d\xb0\x8d\x5b\xff\xdb\x1a\x69\xbf\xe6\x0c\xe7"
+ "\x88\xea\x83\x6d\x2d\xb6\xe7\x10\x7d\xb0\x75\x0c\xd1\x07\xd9\xc1"
+ "\xd2\xfa\x20\xfb\x63\x12\xd7\xb2\xd7\x91\xb8\x46\x7c\x6a\xaf\x0f"
+ "\xb2\x67\xb6\xaf\x0f\x08\x86\xd8\x76\x4a\xea\x83\xec\x3d\xf6\xfa"
+ "\x60\x73\x82\xb8\x3e\xc8\x59\xc5\xe3\x28\xa7\xb7\x50\x1f\x64\x5f"
+ "\x7d\x38\xf4\x81\x24\xb6\x26\x09\xf5\xc1\xf6\x23\xf2\xf5\xc1\xf6"
+ "\xeb\xf2\xf4\x01\xc6\x9c\x98\x3e\xc8\x19\xc5\xe1\x67\x8c\xb8\x3e"
+ "\xc8\x99\x21\xae\x0f\x72\x16\x0a\xf5\x01\xae\x5f\x4c\x1f\xe4\xec"
+ "\x10\xd4\x6f\xa7\x0f\x72\x0e\x0b\xf5\x01\x29\xc7\xeb\x83\xdc\x58"
+ "\x6e\xfe\xf3\x93\xaf\x0f\x72\x47\x49\xeb\x83\xdc\x71\x42\x7d\x90"
+ "\x1b\x44\x74\x40\x6e\x32\xd1\x07\xb9\x6a\xb2\x7f\xb3\xaf\xf5\x7e"
+ "\x5e\x1f\x90\xfd\xbc\x3e\xc8\x4d\x77\xfe\xd9\x13\xe7\xd7\x9c\x7f"
+ "\xf8\x67\x4f\xbc\x1e\xb1\x67\x4f\xde\x1b\xe0\x9a\x3e\x78\xaf\xbf"
+ "\x6b\x7c\x74\x67\x38\xcf\x47\x77\x86\x4b\x3f\xe7\xf0\xde\x5d\xc7"
+ "\x7c\xb4\x30\x95\xe7\xa3\x05\xe7\x48\xdc\x2e\x38\x42\xe2\x76\xc1"
+ "\x2a\x67\x9f\x73\xd8\x72\x8f\xe3\xa0\x96\xe7\x1c\x56\x70\xcf\x39"
+ "\x00\x0f\x25\xbc\x33\xff\x96\xf0\x39\x87\xbc\x39\x52\xcf\x39\x88"
+ "\x3e\xdf\x60\xc3\x35\x2d\xbc\xd4\x9d\xe7\x1b\x1e\x6d\xae\x99\x9b"
+ "\x43\xb8\x66\xfe\x31\xd7\xb8\x66\xfe\x51\x21\xd7\xdc\x79\xde\x9e"
+ "\x6b\x16\x84\x39\xcf\x35\x0b\x26\xba\xc6\x35\x0b\x26\x38\xc7\x35"
+ "\x0b\xf6\x89\x3f\xdf\xf0\x9e\x41\xfa\xf9\x06\x72\xcc\x9e\x23\x14"
+ "\x4e\xe4\x39\x42\x61\x60\xd7\xe7\x9a\xff\x73\x48\x9c\x0f\xfc\xcf"
+ "\x31\xc2\x35\x0b\xf6\x76\x3c\xd7\x2c\xd8\x2b\xce\x35\x0b\xb9\xfc"
+ "\x37\x05\x7b\xed\xb9\x26\x9c\x23\xca\x35\x0b\xe7\xdb\x9e\x43\xb8"
+ "\x66\x41\x29\xe1\x9a\x85\xeb\xa4\xb9\xe6\x8e\xa7\x48\xcc\x2a\xbc"
+ "\x4e\x62\x16\xf1\xa9\x3d\xd7\x2c\x3c\xd9\x3e\xd7\x24\x18\x62\xdb"
+ "\x29\xc9\x35\x77\xf8\xd9\x73\xcd\xf7\xf4\xe2\x5c\xf3\xfd\xcb\x3c"
+ "\x8e\xde\xdf\x28\xe4\x9a\x3b\x66\x3c\x1c\x5c\x53\x12\x5b\x87\x84"
+ "\x5c\xf3\xfd\x01\xf2\xb9\xe6\xfb\x33\xe5\x71\x4d\x8c\x39\x31\xae"
+ "\xf9\x3e\x77\xff\x83\xe0\xc5\x9e\x6b\xbe\x7f\x5c\x9c\x6b\xbe\x7f"
+ "\x5e\xc8\x35\x71\xfd\x62\x5c\x73\x67\x37\x41\xfd\x76\x5c\x73\x67"
+ "\x98\x90\x6b\x92\x72\x3c\xd7\xdc\x79\x82\xc4\xd0\xf7\x76\xc9\xe7"
+ "\x9a\x3b\xf7\x49\x73\xcd\x9d\x07\x85\x5c\x73\x67\x16\xe1\x94\x3b"
+ "\x6b\x09\xd7\xdc\x99\x47\xf6\xbf\x57\x64\xbd\x9f\xe7\x9a\x64\x3f"
+ "\xcf\x35\x77\x36\x3a\xe2\x9a\x4c\xce\x99\xc4\x1c\xca\x5c\x06\x5b"
+ "\x39\xb4\xb3\x37\xcc\x6f\x1a\xf8\xbf\x02\xe6\x29\x25\xfc\x5f\x23"
+ "\xc5\x63\x74\x81\x67\x12\xcd\xc0\x4b\xcc\x70\x9d\x6a\xdd\x4d\x8d"
+ "\xa6\x8f\x11\xae\x5d\x94\x48\x38\xcb\x99\xc4\x00\x63\x8f\x49\x66"
+ "\x26\x11\xe6\x77\xf8\x3f\x0d\xf6\x41\x79\x7f\x98\x0f\x55\x2b\x90"
+ "\xff\x0d\xaa\x68\x93\xa5\x1c\xb4\xd9\xbf\x9e\x2a\x9a\x88\xeb\x68"
+ "\xde\x52\x94\x07\xfd\xd1\x4b\xb6\x15\xea\x9a\xba\xbf\x2f\x5a\x6b"
+ "\x64\xbe\xd3\x2c\xba\x8d\x1a\xa8\xa2\x0b\x01\x4d\x3d\x26\x41\x1c"
+ "\x42\x98\x1f\x96\xf5\xd1\x79\xe2\x3a\x35\x8b\x5a\xf1\x31\x0d\x3e"
+ "\x66\x82\x36\x66\x2c\x44\x54\xf6\xed\x1e\x5e\xc0\xb9\xba\x65\xea"
+ "\x99\xc6\xc5\x46\x68\x33\xcc\xaf\x9f\xf6\xad\xf5\xfc\xe8\xfd\x5a"
+ "\x76\xee\xa9\xd2\x9b\xd8\x3a\x54\x8b\xd8\xf6\x5c\xda\x0d\xe5\xc5"
+ "\xda\xb0\xf1\x43\x14\xde\x6d\x20\xa3\x95\x37\xdf\xed\x92\x7c\xff"
+ "\x2d\x60\x5d\x5f\xa4\x19\x04\xb6\x53\x21\x4a\xec\xb8\xcc\xeb\x14"
+ "\x49\x5d\xa7\x9f\x12\x79\xbd\xd7\x8b\xd1\x67\xee\x40\xd4\x76\x73"
+ "\x0f\xaf\xcf\x20\x26\x16\x17\x30\xba\xe6\x2d\xbb\xbd\xb4\x1e\x27"
+ "\x26\x60\x9b\xff\x06\x8e\x6f\xef\xc5\xe8\xee\xac\xc7\xb8\xd9\xad"
+ "\x3a\x0e\x73\xbb\xad\x2f\x96\x26\x2c\x8c\x57\xa5\x26\x2d\x9c\xbf"
+ "\x78\x79\xaa\x6a\x40\x82\x02\x4d\x5f\xbc\x58\xb5\x30\x7e\xd1\x2a"
+ "\x95\xf5\x91\xd1\xaa\x84\xa4\x65\xf1\xf3\x92\xe7\x0f\x5e\xf8\x46"
+ "\x8a\x02\xda\x84\xac\xda\x11\x84\xdb\x62\xde\xb2\x3b\x7c\xf7\xbb"
+ "\x08\xbd\xd7\x13\x79\xe2\x76\xc1\xf5\x72\xb4\xf4\xf7\x63\xf0\xf5"
+ "\xb2\x0b\x18\x3d\x05\x65\x32\x21\xa6\x6d\xcf\xe8\x01\x65\x77\x15"
+ "\x15\x43\xbb\x76\x43\xbb\xa1\x8d\xb8\xcd\x47\x2d\x6d\xb6\x60\x22"
+ "\x13\x63\x22\xe3\x36\x60\x70\xf7\x85\x00\x43\x8f\x17\x19\x26\x16"
+ "\xf7\x4f\x0f\x63\xc5\xe3\x0a\x55\xbc\x9c\xd5\x0c\xb9\x67\x12\xe1"
+ "\x5c\x83\x05\x63\xe6\xbc\xde\x1a\xe6\xdd\x33\x11\xc0\x2b\x3d\x9a"
+ "\x99\xc4\x9f\x01\x36\xe1\xfc\xe2\x89\x43\x10\xca\x62\x9a\x63\xd9"
+ "\x6f\x57\x30\xcd\x80\x61\x82\x53\x38\x56\x12\x72\x87\x42\x2f\x34"
+ "\x6f\x29\x1e\xa3\x45\x8b\x12\x70\x1d\x5a\xd8\x87\x6d\x6e\x2e\x19"
+ "\x59\x36\x43\x8d\xb2\x7e\x92\x85\xb2\x9a\xf1\x39\x25\x86\x4d\x01"
+ "\xa9\xc8\x63\x6a\x1a\x73\x11\xe2\x8e\x07\x13\x36\xb2\x8c\xd9\x63"
+ "\xd8\xa4\xa5\x8a\x55\xe6\xfc\xde\x1a\xe8\x4f\x13\xd4\xb3\x41\x8b"
+ "\xcc\x65\xb8\x9e\xed\x05\xac\xed\x9b\x70\xdf\xc1\x3e\xa0\x7d\x18"
+ "\x0d\xb3\x9e\x1b\x43\x5b\x6f\xa4\x99\x73\xc6\xd4\x54\x7b\xde\x43"
+ "\x53\x8d\x4c\x1b\xb3\xed\x46\x5a\x95\x5e\x0f\x31\x2d\xe5\x0d\x46"
+ "\xb1\x7b\x6c\x80\x31\x69\x7e\x71\x4f\x18\x8b\xb9\x63\x6a\x98\xdc"
+ "\x6e\x95\x33\x06\x22\x25\xd4\xad\xb5\xd8\x13\x6c\xe9\x29\x0f\x47"
+ "\xc5\x0d\xb8\x4f\x18\x0f\xd0\x1e\x0e\x0f\x25\x11\xc7\x53\xed\xf1"
+ "\x70\x7f\x6c\x16\x78\xa7\x18\x99\xd8\x17\xdb\xf2\xbc\x4b\x99\x20"
+ "\xef\xbc\x8c\xcb\xa8\x3b\xb6\x6d\x15\x68\x81\xec\x15\x28\x64\xdb"
+ "\x5c\xa4\x7a\x7d\x95\x12\xe9\xf2\xbd\x73\x02\xd6\x65\x79\x80\x4d"
+ "\x28\x88\x2f\x11\x10\x33\x23\xda\x7a\xf5\xd6\xa4\xcf\x47\xd4\xc1"
+ "\xfa\x32\x0a\xf3\x67\xfc\x8c\x0a\xd8\xfa\xd6\x6e\x38\x8f\xb9\x19"
+ "\x8b\xb0\x3f\x58\x5f\xdc\x4c\x44\x93\x93\x60\x7e\x7e\x0b\x1f\xdf"
+ "\x33\x60\x17\xd4\x29\xaf\x5f\x25\x2c\xff\x35\x81\xaf\x86\x80\x9f"
+ "\xaa\x1b\x4c\x6c\x9d\xac\xaf\x92\x79\x5f\x1d\x83\x76\xf0\xfe\x2a"
+ "\x39\x80\xfd\x2a\xd1\x67\x1d\xe9\xb3\x42\xcd\x04\x29\x82\xa4\xfb"
+ "\xac\x50\x92\x3e\x77\xbb\xed\xb8\xcf\x7b\x2e\x3b\xee\xf3\x07\xbd"
+ "\xe5\xf7\x79\x4f\x99\xfc\x3e\xef\x29\x91\xee\xb3\x82\xf3\xb3\x02"
+ "\xfc\xac\x70\xe0\x67\x05\xe7\x67\x9f\x7a\xc7\x7d\xfe\xe0\xbc\xe3"
+ "\x3e\xff\xce\x4f\x7e\x9f\x3f\xd8\x2b\xbf\xcf\x1f\xe4\x39\xe8\x33"
+ "\xe7\x67\x1f\xf0\xb3\x8f\x03\x3f\xfb\x70\x7e\x0e\xfc\xc2\x71\x9f"
+ "\x7f\x77\xda\x71\x9f\xf7\x7a\xc8\xef\xf3\xef\x0a\xe5\xf7\xf9\x77"
+ "\x9b\xa4\xfb\xec\xc3\xf9\xd9\x07\xfc\xec\xe3\xc0\xcf\x3e\x9c\x9f"
+ "\x47\x6e\x71\xdc\xe7\xbd\xc7\xdb\xe9\xf3\x5d\xf9\x7d\xde\xbb\x55"
+ "\x7e\x9f\xf7\xa6\x3b\xe8\x33\xe7\x67\x5f\xf0\xb3\xaf\x03\x3f\xfb"
+ "\x72\x7e\x9e\x35\xde\x71\x9f\xf7\x1d\x76\xdc\xe7\x7d\x57\xe5\xf7"
+ "\x79\x5f\x96\xfc\x3e\xef\x4b\x91\xea\x73\x2b\xc4\x6d\x5f\xe8\x4b"
+ "\xdb\x7f\x62\x5f\x34\x05\x79\x17\xf9\x36\x20\xaa\x68\xbd\x39\x31"
+ "\xa0\x11\x79\x43\xdf\x12\x99\x82\xd0\x14\xfc\xd7\x1c\xe4\x5d\xd8"
+ "\x1a\xe4\x5d\xda\xd2\xf3\x4c\xc4\x9a\x39\xa8\x3b\xe6\xe3\x9b\xcd"
+ "\x28\xc4\x9c\xe7\x9d\xb7\xf5\x15\xa4\xca\xd4\x21\x65\x55\x86\x16"
+ "\x65\xa4\x30\xba\x2a\x74\x09\xf9\x35\x62\xed\xf9\x15\xaa\x6c\xaa"
+ "\x40\x8b\x96\x32\xcc\x15\xea\xf7\x23\xf0\xba\x09\xf0\xe4\xac\x9c"
+ "\x2f\x91\x0a\xae\x11\xb1\x1b\x36\x5c\x4f\x40\x34\xcc\x9f\x05\xa1"
+ "\x4b\x8b\x33\x50\xc8\x27\x6f\x35\x22\xbc\x7f\x17\x6c\xa6\x82\xde"
+ "\x9a\x8c\x39\x88\xfa\xf0\x76\x2d\x45\xe6\xe6\xdf\x7b\xd8\xce\xcd"
+ "\xd1\xf1\x60\xcb\x79\xec\xb1\xc9\x45\xaf\xc8\xb5\xe5\xff\x56\x5a"
+ "\xe6\x6e\xd6\x96\x75\x26\x32\xdf\xdb\xcc\xdd\x9f\xc0\xf5\x79\x5b"
+ "\xfe\xef\x51\x6c\x4b\x26\xcf\xbb\xac\xba\xb1\x15\xeb\x26\xe5\x95"
+ "\x34\x44\xc1\xfe\xe4\xaa\x94\xdb\x48\xc2\xc6\x3a\xde\xc6\x8a\x50"
+ "\xdf\x86\x6e\xb7\xc5\x6d\xac\x08\x69\x0d\x52\xa8\xed\x6d\xac\x08"
+ "\x72\xce\xc6\xa5\x3b\xdc\xb7\x71\xe9\x7c\x69\x1b\x97\x7e\x2c\xdf"
+ "\xc6\xa5\x11\xf2\x6d\x5c\xaa\x22\x36\x56\x44\x08\x6d\xfc\xfb\x1a"
+ "\x69\x1b\x2b\xac\x70\xac\x00\x1c\xfb\xd4\x4b\xd8\x18\x70\xac\x10"
+ "\xc1\xb1\xc2\x49\x1c\xef\x37\xb9\x6f\xe3\xfd\xa7\xa4\x6d\xfc\x87"
+ "\x60\xf9\x36\xde\x9f\x27\xdf\xc6\xfb\x37\x70\x36\xb6\xc1\xf1\xfe"
+ "\xe1\x0e\x6c\x6c\x85\x63\x1f\xc0\x71\xe0\x17\xe2\x36\xf6\x01\x1c"
+ "\xfb\x88\xe0\xd8\xc7\x49\x1c\xff\x31\xde\x7d\x1b\xff\x71\xb0\xb4"
+ "\x8d\xff\xb8\x4a\xbe\x8d\xff\x60\x90\x6f\xe3\x3f\x34\x12\x1b\xfb"
+ "\xd8\xe0\xf8\x0f\x85\xd2\x36\xf6\xb1\xc2\xb1\x0f\xe0\x78\xe4\x16"
+ "\x09\x1b\x03\x8e\x7d\x44\x70\xec\xe3\x24\x8e\x0f\x9c\x74\xdf\xc6"
+ "\x07\x72\xa5\x6d\x7c\xe0\x82\x7c\x1b\x1f\x98\x2d\xdf\xc6\x07\xa2"
+ "\x39\x1b\xdb\xe0\xf8\x8f\x46\x07\x36\xb6\xc2\xb1\x2f\xe0\x78\xd6"
+ "\x78\x71\x1b\xfb\x02\x8e\x7d\x45\x70\xec\xeb\x24\x8e\x3f\x1c\xe8"
+ "\xbe\x8d\x0f\xde\x95\xb6\xf1\x87\xe3\xe4\xdb\xf8\xa0\x46\xbe\x8d"
+ "\x0f\x96\x11\x1b\xfb\xda\xe0\xf8\x60\x9c\x94\x8d\xdb\x40\x03\xfa"
+ "\x81\x8d\xfd\x9a\x10\xb5\x0b\xdb\xb6\x96\xd8\xd6\xd4\x2b\x34\x65"
+ "\x17\x65\x4e\xc4\x36\x61\xd7\x80\xbe\x0f\xf1\x37\xe5\x79\x17\x31"
+ "\x14\xf4\x29\x03\xaf\xbb\x7e\xb8\xdf\xb8\x1e\xf9\xab\x32\xf0\xfa"
+ "\x6f\xd9\x46\x5c\x46\x95\xf1\xdb\x0b\x70\x3d\x1a\xaf\x7b\x19\x73"
+ "\x6b\x94\xa6\x60\xbf\xc2\x2b\xd4\x47\x97\x98\xb0\xd6\x12\xd0\x9b"
+ "\x65\xcc\xdb\x21\x41\xd5\x4d\x65\x60\x9f\xcf\x51\x55\xed\x5f\x91"
+ "\xb9\x57\xe8\xd2\x21\x46\xa4\x66\xbe\x57\x07\x55\xa6\x6a\x91\xe9"
+ "\x8d\x10\xdf\xea\xb4\x0a\x54\x9d\xf6\x27\x34\xb5\x91\xb9\xc7\x7c"
+ "\xab\xf6\x6d\x0b\xee\x57\x6e\x0a\x0e\x8d\x33\xe5\x87\x7b\x19\x83"
+ "\xfb\x95\x1e\x5c\xa1\xa5\x7c\x0d\x48\x9d\xdc\xc0\x30\xd9\xf3\x90"
+ "\x67\x76\x3d\xf2\xda\x3e\x0f\xf9\x6e\xaf\x47\xca\xca\x86\x5a\x74"
+ "\xfa\x5a\x05\x3a\x7d\xfb\x3c\x3a\x7d\x0f\xb6\x56\xd8\xcc\xb0\x65"
+ "\x9d\x07\x5f\x23\x34\xf9\x3a\xc2\xdf\xfd\xd4\x3d\x5b\x87\x82\x2a"
+ "\x8d\xb5\x08\xbf\xb7\x7b\x83\xfa\x68\xad\x6f\x1c\x0a\x62\xbe\x0d"
+ "\x41\xcc\x1b\x21\x14\x1c\xf3\xc4\xfb\xab\x8d\x3a\x54\xd9\x60\xc0"
+ "\xc7\x67\xc3\x71\xcf\xcc\x06\xa8\xdf\x5c\x81\xbf\xeb\xa9\xab\xcc"
+ "\x3a\x05\xfd\xcb\xd4\x31\x58\x43\xf7\xf2\x4e\xc9\x01\x53\x9b\x99"
+ "\x90\x7e\x04\x07\x65\xf9\xbb\xcd\x72\x7d\xfd\x11\x9b\xf3\x00\xec"
+ "\xd3\x13\xec\xdc\xc7\xfc\x76\xac\x72\xca\xf9\x8b\x0c\x7e\xae\x0f"
+ "\xaf\x25\x54\xe9\x3f\x47\xf8\x5e\xd3\xd4\x55\x08\x45\x9b\x10\xc2"
+ "\xb6\xa8\x4e\x6b\x44\x53\x52\x50\x00\x5e\x7f\x36\x7f\xaf\xee\x59"
+ "\xdd\xa0\x43\x6b\x8d\xd0\xc6\x1b\x86\xfb\x6d\xac\xda\x50\x85\xe0"
+ "\x58\x9f\xaa\x44\x2d\xf2\x4d\x41\x4a\x6c\x5f\x63\x9e\x77\xe1\x14"
+ "\x18\x3f\x8b\xf4\x0c\x83\x6d\x8b\x6d\x8a\xed\x8b\xeb\xb3\xd8\xbc"
+ "\x3a\x41\x87\x32\x0d\x48\x59\x9d\x01\x7f\xd3\x18\x5d\x35\xba\x85"
+ "\xa0\x8d\x39\x4c\x60\xa6\x0e\x70\x91\x8a\xb1\xa0\xa5\x3e\x2c\x01"
+ "\xff\xf7\x14\xc7\x94\x22\x88\x60\xaa\xdb\xed\xf6\x31\xa5\x08\xe5"
+ "\x31\x55\x66\xe2\x31\xf5\xa7\xf3\xd2\x98\xfa\xd3\x08\x82\x29\x45"
+ "\x44\xd7\xc4\xd4\xc7\x67\x1c\x63\xea\xe3\x32\x69\x4c\x29\xd4\x80"
+ "\x29\x9d\x10\x53\x7f\xba\x2a\x1f\x53\x7f\x42\x9d\x87\x29\x45\x88"
+ "\x6b\x98\xfa\xb8\x41\x88\xa9\x32\xbd\x03\x4c\x71\x71\xca\xa7\xde"
+ "\x09\x4c\x59\xc5\xa9\xff\x37\x8d\xc7\xd4\xe1\xc1\xd2\x98\x3a\xb4"
+ "\x99\xc3\x54\x17\x8d\x53\x87\x06\x38\xc6\xd4\x21\x4f\x07\x98\x82"
+ "\x38\xa5\xb0\x89\x53\x87\xc7\xca\xc7\xd4\xa1\xe9\x9d\x88\x29\x17"
+ "\xe3\xd4\xa1\x48\x21\xa6\xfe\xdf\x24\x69\x4c\xf9\x70\x71\x2a\xf0"
+ "\x8b\xf6\x31\xe5\x63\x15\xa7\x0e\xef\xe3\x31\xf5\x97\x75\xd2\x98"
+ "\xfa\xf3\x05\x82\x29\x9f\x2e\x1a\xa7\xfe\xbc\xca\x31\xa6\xfe\x1c"
+ "\x2b\x8d\x29\x1f\x88\x53\x0a\x9b\x38\xf5\x97\x5c\xf9\x98\xfa\x73"
+ "\x69\xe7\x61\xca\xc7\xc5\x38\xf5\xe7\xad\x42\x4c\x1d\x2e\x72\x80"
+ "\x29\x2e\x4e\x8d\xdc\xe2\x04\xa6\xac\xe2\xd4\x5f\x5a\x78\x4c\x1d"
+ "\x39\x27\x8d\xa9\x23\x43\x39\x4c\x75\xd1\x38\x55\x7e\xda\x31\xa6"
+ "\xca\x0f\x38\xc0\x14\xc4\x29\x1f\x9b\x38\x75\xe4\xb2\x7c\x4c\x95"
+ "\x1b\x3b\x11\x53\x2e\xc6\xa9\x72\xad\x10\x53\x7f\xd1\x49\x63\xca"
+ "\x97\x8b\x53\xb3\xc6\xb7\x8f\x29\x5f\xab\x38\xf5\xd7\xc9\x3c\xa6"
+ "\x8e\x0e\x94\xc6\xd4\xdf\x36\x12\x4c\xf9\x76\xd1\x38\xf5\xb7\x30"
+ "\xc7\x98\xfa\x1b\x92\xc6\x94\x2f\xc4\x29\x1f\x9b\x38\x75\x74\x94"
+ "\x7c\x4c\xfd\x2d\xa6\xf3\x30\xe5\xeb\x62\x9c\xfa\xdb\x70\x21\xa6"
+ "\xfe\x3a\x41\x0a\x53\xad\x58\xf7\x79\x00\xa6\x12\x41\xf7\x01\x86"
+ "\x02\x6a\x08\xa6\xda\x00\x53\x3b\xad\x31\xf5\xb5\xad\xee\x3b\xba"
+ "\xc7\x7c\x1f\x53\x9f\x1c\xb4\xc5\x94\x19\x30\xd5\xc6\x62\xea\xd8"
+ "\x49\x8b\xee\xab\x6e\x2a\x01\x5f\x5d\x43\xd5\x31\x80\xa7\x02\x0e"
+ "\x4f\x5f\x03\x9e\xa0\x3f\x66\xe8\x6f\x65\x5d\x2d\x9a\xaa\x23\xfd"
+ "\x6a\x85\xfe\x9a\xad\xb1\xd4\xda\x48\x61\x0c\x61\xec\x58\x70\x74"
+ "\x7a\x11\xe0\x67\xe9\x19\x74\x7a\x05\x6c\xab\x61\xcb\x80\x0d\x9d"
+ "\x41\x95\x8d\x88\x5d\xb3\xe7\xf1\x53\xc3\xe1\xe7\x58\xbc\x63\xfc"
+ "\x1c\x8b\x92\xa7\xf1\x3e\x39\x26\x1f\x3f\xc7\x72\xb8\x67\xe9\x94"
+ "\x53\xa7\x5d\x64\xf0\x33\xb3\x04\x23\xd7\xd0\x54\x23\x0a\x60\x66"
+ "\xa9\x7b\xfa\xc6\x22\xe5\x1a\x13\xa2\xb6\xcd\x43\xca\x6d\x5f\x41"
+ "\x7f\x2d\x63\xa7\x1e\xf9\x7e\x6e\xf8\x2b\xaa\xbc\x5d\x8b\x2a\xef"
+ "\x9d\x42\x95\x66\xd8\xae\xc1\x06\x6d\x9c\x3a\xdf\xba\xbf\x3a\xae"
+ "\xbf\x9f\x4c\x83\xba\xfa\x4b\xf7\xf7\x93\x08\xb6\xbf\x09\xd0\xdf"
+ "\x56\xbe\xbf\xd5\x80\x45\xf0\x4b\x1f\x33\xa7\x13\xa7\xea\x90\xf7"
+ "\x62\x23\xc3\xb4\x72\x18\xc4\x7e\xf9\xfc\xac\x01\x4d\x4d\x01\x5f"
+ "\xbd\x01\x18\x6c\x28\x45\x99\xe9\x80\xc1\x56\x03\xbe\xaf\xaf\xab"
+ "\xce\x6a\x01\x0c\x1e\x4b\x65\xc0\x6e\x6d\x18\x83\x5f\x63\x0c\x1e"
+ "\x2d\x34\x4b\x62\x10\x74\x22\x8b\x41\xd0\x89\xed\x62\xd0\x5a\x27"
+ "\x7e\x3a\x80\xc7\xe0\xf1\xa1\xd2\x18\xd4\xbc\x64\xd1\x89\x3f\x3c"
+ "\x06\x3f\xbd\xec\x18\x83\x9f\x9e\x90\xa7\x09\x8f\x8f\x93\x8f\x41"
+ "\x4d\x50\xe7\x61\x50\x73\xce\x31\x06\x35\x87\xda\xc7\xa0\x22\xc4"
+ "\x35\x0c\x7e\x6a\x10\x62\xf0\xd3\x50\x07\x18\xe4\xe2\x20\xe8\xca"
+ "\xf6\x31\x68\x15\x07\x8f\xef\xe7\x31\xf8\xd9\x61\x69\x0c\xfe\xfd"
+ "\xb4\x45\x57\xfe\xf0\x18\xfc\x7b\x92\x63\x0c\xfe\x7d\x92\x3c\x0d"
+ "\xf9\xd9\x49\xf9\x18\xfc\x7b\x61\xe7\x61\xf0\xb3\x99\x8e\x31\xf8"
+ "\x59\xa4\x13\x18\x74\x31\x0e\xfe\x3d\x5d\x88\xc1\xe3\x25\xd2\x18"
+ "\xf4\xe1\xe2\x20\xe8\xd0\x76\x31\x68\xad\x43\x4f\x0c\xe6\x31\xf8"
+ "\x8f\x51\xd2\x18\x3c\x39\xcd\xa2\x43\x7f\x78\x0c\x9e\xb8\xee\x18"
+ "\x83\x27\x2a\xe5\x69\xce\x7f\xbc\x24\x1f\x83\x27\x43\x3b\x0f\x83"
+ "\x27\x2f\x38\xc6\xe0\xc9\xa3\xed\x63\xd0\xc7\xc5\x38\x78\x12\x09"
+ "\x31\x78\xa2\xbf\x03\x0c\x72\x71\x10\x74\x6b\xfb\x18\xb4\x8a\x83"
+ "\xff\xf8\x98\xc7\x60\xc5\x31\x69\x0c\xfe\xf3\x9c\x45\xb7\xfe\xf0"
+ "\x18\xfc\xe7\x12\xc7\x18\xfc\x67\x8c\x3c\x8d\x5a\x71\x5a\x3e\x06"
+ "\xff\x59\xd2\x79\x18\xac\x88\x77\x8c\xc1\x8a\x28\x27\x30\xe8\x62"
+ "\x1c\xfc\xe7\x06\x21\x06\xff\x51\x2a\x8d\x41\x5f\x2e\x0e\x82\xce"
+ "\x6d\x17\x83\xd6\x3a\xf7\xd4\x08\x1e\x83\xff\x1a\x27\x8d\xc1\xcf"
+ "\x67\x5a\x74\xee\x0f\x8f\xc1\x53\x77\x1d\x63\xf0\xd4\x59\x79\x9a"
+ "\xf6\x5f\xd3\xe4\x63\xf0\xf3\xfe\x9d\x87\xc1\xcf\x2f\x3b\xc6\xe0"
+ "\xe7\x27\xda\xc7\xa0\xaf\x8b\x71\xf0\x73\x2f\x21\x06\x4f\x85\x4b"
+ "\x61\xd0\x0c\xba\xb8\xad\xa4\xb5\xc4\x9c\xd7\xaf\x3c\xc0\x43\x85"
+ "\x8c\x41\x7e\x85\xd5\xa9\x7a\x34\xe5\x2e\xd8\x27\xe5\x2e\x9a\x7b"
+ "\x57\x89\x4c\x79\xfd\x4a\x41\x17\x16\x5a\xe9\x67\xf6\xd9\x32\x63"
+ "\x4e\xa6\x6e\xfb\x22\xe4\x09\xfa\x7b\x29\xde\x57\x7d\xc5\x80\xf0"
+ "\xf5\xd7\xe2\xf6\x5c\xe3\xdb\x83\xd7\x09\x98\x9b\x6a\x25\x7b\x8f"
+ "\xb9\x55\x8b\x1a\xc6\x20\xba\xb2\x41\x0b\x76\x58\xcd\xfa\x17\xdb"
+ "\xe5\x0a\x55\xd9\xbf\xf8\x06\xf2\x34\x7e\x1b\xd2\x07\xec\x1d\xe4"
+ "\xb7\x12\x79\x84\x36\x30\x66\x6c\x57\x6c\x2f\x6c\x63\xd5\x6a\x7c"
+ "\xef\xba\x72\x79\x15\x60\xcc\xf8\xad\xba\xcf\x6e\x28\x27\xae\x57"
+ "\x2b\xd7\xca\xc7\x46\x65\x14\x79\x6f\xa1\x32\xb4\xb2\x0e\x89\xde"
+ "\x3b\x36\x83\x7e\x73\xce\x56\x8a\x10\x2b\x9d\xf7\x00\x6c\x75\x3a"
+ "\xc6\x39\x5b\x9d\xde\x23\xb4\x95\x98\xae\x3a\xbd\x5f\xbe\xad\x4e"
+ "\x27\x13\x5b\x9d\x9e\xe4\xc0\x56\x4e\xe2\x4a\x51\x68\xa5\x47\x1e"
+ "\x80\xad\xaa\xd2\x9d\xb3\x55\xd5\x69\x1b\x5b\x89\xf0\xff\xaa\x73"
+ "\xf2\x6d\x55\xc5\x7d\x0f\xa0\x2a\x55\xda\x56\x3e\x4e\xe2\xca\x27"
+ "\xc4\x8a\x37\x3f\x00\x5b\x55\x97\x3a\x67\xab\xea\x16\xa1\xad\xc4"
+ "\x78\x6a\x8d\x87\x7c\x5b\x55\x9f\x20\xb6\xaa\x2e\x71\x60\x2b\x27"
+ "\x71\xe5\x53\x68\xc5\xef\x1e\x80\xad\x6a\xce\x3a\x67\xab\x33\x03"
+ "\x6c\x6c\x25\xc2\xa7\xce\x0c\x96\x6f\xab\x1a\x1d\xb1\x55\x4d\xa5"
+ "\xb4\xad\x7c\x9d\xc4\x95\x6f\x88\x15\x0f\x79\x00\xb6\xfa\x02\x39"
+ "\x67\xab\x2f\xa6\x09\x6d\x25\x36\xef\x7f\x31\x53\xbe\xad\xbe\x08"
+ "\x25\xb6\x3a\x63\x90\xb2\x95\x29\xcf\x3b\x2f\x00\x6c\xd0\x52\xe0"
+ "\x9d\x12\x90\x86\xa8\x56\x15\xd8\x2d\x08\xec\xb6\x4e\x85\xda\xf2"
+ "\xc0\x6e\x3a\x23\x9a\xb2\xe4\x22\x53\xd5\x64\x42\xad\x60\xb3\x96"
+ "\x20\x6f\xd8\xd7\x88\x9f\x39\xfa\xaf\x7a\xea\xec\xa8\x59\x4b\x94"
+ "\x08\xdb\x0d\xdb\x01\xdb\x8e\x01\xbb\xb1\x76\x0c\x0a\xf7\x32\x05"
+ "\x85\xc6\x4d\xbe\x7e\x91\x59\xac\x65\x18\xdc\x5f\x46\x59\xc3\xde"
+ "\x17\x98\xda\x88\xbc\x55\xaf\xe0\x3e\xfd\xfb\x2a\xde\x5f\xad\xab"
+ "\x05\x7e\x70\x1b\xb1\xdc\xec\xa2\x3a\xc8\xf4\x6b\xb5\xaf\xa9\x3a"
+ "\xf6\x45\xa6\xe7\x99\x08\x63\xaf\xde\x9a\xcc\xeb\xa8\x3b\xe6\x0f"
+ "\xd9\x66\x14\xb2\x76\x21\xa2\x3e\x7c\x4b\x43\xb1\xef\xae\x2d\x65"
+ "\xeb\x38\x0c\x76\x09\x61\xee\x58\x3d\xd3\x7d\x27\x11\x55\x5f\xc9"
+ "\x61\xfd\x66\xcb\x11\x58\xbf\xfd\x47\xad\x04\x9e\x19\xc1\x04\x79"
+ "\x97\xe6\x54\x21\x15\xd3\x06\x36\x66\xdf\x27\x3a\xbb\xa7\xb8\x55"
+ "\xae\x8d\xff\xcd\x72\x55\xb3\x8a\x7b\x7e\x0b\xec\x84\xaf\xcf\x3e"
+ "\xbf\x95\x62\xf5\xfc\x16\xb4\x99\x7f\x7e\xeb\xdf\x13\xf0\xf3\x5b"
+ "\xe6\x8b\x21\x7d\x2c\x7d\x5f\x9c\xcc\x30\xd0\xf7\x9e\x55\x7a\x1d"
+ "\xc2\xfd\xaf\xd2\x6b\x50\x66\x2a\x52\x56\xb5\x36\xa2\x0c\x3d\xa3"
+ "\xab\xca\xba\x8a\xa6\xde\xc5\x3c\x18\xe3\xe5\xec\x50\xe2\xd7\x7f"
+ "\x7b\x9a\x2f\xaa\xfb\x68\xa9\xb3\xea\xaa\x1a\x84\xac\xde\xe3\x49"
+ "\x04\xce\xec\x05\x7e\x48\xac\xce\xaa\x47\xe0\x93\x9a\x6a\xe3\x57"
+ "\xd8\x4f\x89\x70\x7c\xcc\x7d\x7e\xdd\x2b\xf4\x0b\xbc\x0f\xfb\x0c"
+ "\xdf\x6f\xc2\xb9\x03\x8a\xad\xf8\x37\xc6\x45\x40\x5a\x16\xaa\x4e"
+ "\x6b\x45\x55\x46\xfc\xce\xee\x17\x65\xff\x8a\xad\x95\xc0\x91\x22"
+ "\x88\xc3\x91\x2e\x20\xad\xdb\xed\xf6\x71\xa4\x08\xe1\x71\xf4\xe5"
+ "\x3a\xf7\x70\xf4\xe5\x50\xf7\x71\x74\xce\xe4\x3a\x8e\x14\x6a\x21"
+ "\x8e\xbe\xbc\x2a\x1f\x47\xe7\x2a\xe4\xe3\xe8\xdc\x56\xf7\x70\xf4"
+ "\xe5\x2a\x82\xa3\x73\xd1\x04\x47\x5f\xa6\xf0\x38\x62\xdf\x8d\x7a"
+ "\x40\x38\x3a\x6b\x70\x80\x23\x2e\x1e\x29\x20\x1e\xf9\xd4\x3b\x81"
+ "\x23\xab\x78\x54\x7b\xca\x3d\x1c\xd5\xae\x72\x1f\x47\xb5\x13\xdd"
+ "\xc0\x91\x4d\x3c\x3a\x3f\x54\x3e\x8e\x6a\x95\xf2\x71\xf4\x9f\xb3"
+ "\xee\xe1\xa8\xf6\x38\xc1\xd1\x7f\xf2\x08\x8e\x6a\xcb\x79\x1c\xb1"
+ "\xef\x9b\x3d\x20\x1c\xfd\x27\x4a\x1a\x47\x3e\x5c\x3c\x52\x40\x3c"
+ "\x0a\xfc\xa2\x7d\x1c\xf9\x58\xc5\xa3\xaf\x03\xdd\xc3\xd1\x57\xc7"
+ "\xdd\xc7\xd1\x57\xdb\x5c\xc7\x91\x8f\x4d\x3c\xfa\x7a\x95\x7c\x1c"
+ "\x7d\x15\x2b\x1f\x47\x5f\x85\xba\x87\xa3\xaf\xbd\x09\x8e\xce\xd7"
+ "\x11\x1c\x7d\x8d\x78\x1c\xb1\xef\xf0\x3d\x20\x1c\x9d\xdf\xe4\x00"
+ "\x47\x5c\x3c\xf2\x81\x78\x34\x72\x8b\x13\x38\xb2\x8a\x47\x17\x66"
+ "\xba\x87\xa3\x0b\xde\xee\xe3\xa8\xee\x9c\x1b\x38\xb2\x89\x47\x17"
+ "\x8e\xcb\xc7\x51\x5d\x89\x7c\x1c\xd5\x25\xb8\x87\xa3\x0b\xd3\x08"
+ "\x8e\xea\xfa\x13\x1c\x5d\x98\xc4\xe3\x88\x7d\x2f\xf2\x01\xe1\xe8"
+ "\xeb\x1a\x69\x1c\xf9\x72\xf1\xc8\x07\xe2\xd1\xac\xf1\xed\xe3\xc8"
+ "\xd7\x2a\x1e\x5d\xdc\xe3\x1e\x8e\x2e\x4e\x73\x1f\x47\x17\x9f\x72"
+ "\x1d\x47\xbe\x36\xf1\x48\xeb\x2d\x1f\x47\xdf\x34\xca\xc7\xd1\x37"
+ "\x07\xdc\xc3\xd1\xc5\x1d\x04\x47\xdf\x24\x13\x1c\x5d\xcc\xe1\x71"
+ "\xc4\xbe\x6b\xfa\x80\x70\xf4\x4d\x88\x14\x8e\x70\x2e\x82\xf7\x48"
+ "\x5e\x08\xfd\xf6\xd5\x28\xb2\x18\xff\x6d\x45\x11\xcd\x5b\xb4\x51"
+ "\xc7\xd3\x49\x3e\x00\x2d\xa5\x95\xcc\x77\xe6\xb3\x1f\xfc\x12\xe4"
+ "\x9d\x33\xf5\x02\xc9\xd1\x80\xf3\x82\xdc\xc9\x4c\x44\x43\xd8\xbc"
+ "\x0c\x97\xd2\x70\x1e\xab\xfb\xb9\x03\x82\x24\x72\x07\xbc\x26\x9d"
+ "\x3b\xa0\xb5\xc0\xf2\xde\x6d\xa9\xd5\x7b\xb7\x97\x26\x3a\x7e\xef"
+ "\xf6\xd2\xe0\x5d\xaf\xc9\xc5\x83\x96\x7d\xff\xeb\x4e\x2f\xef\x94"
+ "\xe6\x2d\x97\xc6\xc0\xef\x20\xd2\xf7\x4b\xec\x77\x15\xda\x7f\x1f"
+ "\xb7\xd4\x0a\x27\xda\xc6\x19\xb3\x51\x16\xb3\xa5\x64\x0c\x13\xec"
+ "\x9d\xc3\xe4\x7b\x97\xc8\x6b\xcb\xa5\x0d\x8e\xed\xad\x50\x8a\xdb"
+ "\xbb\xbe\x91\xb3\x37\x79\xcf\x39\x48\x22\x6f\xc1\x6b\xd2\x79\x0b"
+ "\xc4\xed\x5d\xdf\xce\x7b\xce\xf5\xbb\xe4\xdb\xbb\x3e\x91\xb3\xb7"
+ "\xae\x79\x4b\xfd\x01\xde\xde\xdf\xaa\xe5\xdb\xbb\x3e\x96\xd8\x7b"
+ "\x4f\x04\x13\xac\x50\x32\xf9\x0a\xb9\x6d\xd1\xb7\x63\x6f\x09\x7c"
+ "\x37\xc4\x12\x7b\x73\x39\x13\x82\x24\x72\x26\xbc\x26\x9d\x33\x41"
+ "\xdc\xde\x0d\x03\x1c\xdb\xbb\xc1\x4f\xbe\xbd\xbf\xad\x25\xf6\x56"
+ "\x00\xbe\x1b\x42\x79\x7b\x37\x38\x99\x57\xc0\xda\xde\xdf\x56\x10"
+ "\x7b\x7f\xd0\x1f\xec\x0d\xf8\x56\xc8\xc4\x77\x43\x82\x63\x7b\xfb"
+ "\x48\xe0\xfb\x72\x05\x67\x6f\x0e\xdf\x12\xf9\x1a\x5e\x93\xce\xd7"
+ "\x20\x6e\xef\xcb\xf9\x8e\xed\x7d\x79\xad\x7c\x7b\x5f\x9e\xc4\xd9"
+ "\x1b\xf0\x7d\x79\x2b\x6f\xef\x2b\x5e\xf2\xed\x7d\x39\x92\xd8\xfb"
+ "\x77\x21\x4c\xb0\x0f\xe0\xdb\x47\x6e\x5b\xce\xb6\x63\x6f\x09\x7c"
+ "\x7f\x17\x49\xec\xcd\xe5\x8a\x08\x92\xc8\x15\xf1\x9a\x74\xae\x08"
+ "\x71\x7b\x7f\xd7\xcd\xb1\xbd\xaf\x5c\x97\x6f\xef\x2b\xe5\xc4\xde"
+ "\x3e\x80\xef\x2b\x46\xde\xde\xdf\xa5\xc9\xb7\xf7\x95\x52\x62\xef"
+ "\xbd\xbe\x60\x6f\xc0\xb7\x8f\x4c\x7c\x7f\x37\xc1\xb1\xbd\x7d\x25"
+ "\xf0\xdd\x58\xca\xd9\x9b\xc3\xb7\x44\x9e\x8a\xd7\xa4\xf3\x54\x88"
+ "\xdb\xbb\x71\xb9\x63\x7b\x37\xce\x91\x6f\xef\x46\x35\x67\x6f\xc0"
+ "\x77\x63\x32\x6f\xef\xc6\x46\xf9\xf6\x6e\x0c\x21\xf6\xde\x87\x98"
+ "\x60\x5f\xc0\xb7\xaf\xdc\xb6\x48\x7e\xff\x2b\x00\xec\x7d\x12\x78"
+ "\x0c\xf0\x8e\x42\x73\x1e\xf0\x14\x93\xd0\xee\xd5\x69\x91\xe8\xb9"
+ "\x7b\xd8\xf6\xd7\xf2\x60\xae\x2e\xec\xbc\x7c\x19\xd7\xd6\xba\xff"
+ "\xee\xf0\xb5\x97\xa4\xdf\x1d\xbe\x36\x54\xfe\xbb\xc3\x57\x8d\x3c"
+ "\x07\xba\x16\xc5\xfb\xf4\x1a\x1b\x3f\xe4\xbd\x53\x7c\xb5\x49\x3c"
+ "\x8f\xc6\xd5\x22\xfc\x4e\x31\xf8\x5a\x6f\xce\x77\x85\x1b\x5d\x2b"
+ "\x69\xdf\xd7\x0a\x9c\xef\x41\x29\xed\xeb\xa6\x2c\x98\xb7\x42\x3a"
+ "\x2f\x6f\x47\x53\x92\xfb\xbe\x6e\x1a\x21\xed\xeb\xa6\xa7\xe4\xfb"
+ "\xfa\xfb\x46\x9e\x7f\x35\x85\xf3\xbe\x6e\xd2\xc8\xf7\xf5\xf7\xb5"
+ "\xe2\xf9\x3c\xbe\xdf\x44\x7c\xfd\xfb\x58\x73\xbe\x2b\xbc\xac\x69"
+ "\xab\x13\xbe\x86\x71\xad\x70\x30\xae\x6f\x24\x83\xaf\x0b\x3b\x2f"
+ "\x7f\xc8\x8d\x19\xee\xfb\xfa\x46\x98\xb4\xaf\x6f\x78\xcb\xf7\xf5"
+ "\xf5\xb3\x3c\xf7\xbb\x11\xc2\xfb\xfa\xc6\x01\xf9\xbe\xbe\x7e\x42"
+ "\x3c\xaf\xc8\xf5\x54\xe2\xeb\xd2\xa3\xe0\x6b\x17\x38\xe1\x8d\xb4"
+ "\xf6\x7d\xed\x83\xf3\x5f\x38\x18\xd7\xba\x58\x98\xaf\x43\x3a\x2f"
+ "\x8f\x89\x6e\x9c\xfb\xbe\xd6\xf9\x49\xfb\xfa\xe6\x5d\xf9\xbe\xbe"
+ "\xa9\xe1\x79\x27\xce\xa5\x6c\xf1\xb5\xae\x50\xbe\xaf\x6f\x96\x89"
+ "\xe7\x37\xb9\x19\x47\x7c\xfd\x07\x95\x39\xdf\x15\x3e\xaa\x93\xe4"
+ "\xff\x56\xbe\x86\x71\xed\xe3\x60\x5c\xdf\x9e\x00\xbe\x2e\xec\xbc"
+ "\x7c\x2a\xb7\x07\xbb\xef\xeb\x5b\x2d\xd2\xbe\xbe\x75\x49\xbe\xaf"
+ "\x6f\x1d\xe0\x39\xef\x2d\x1d\xef\xeb\xdb\x1b\xe4\xfb\xfa\x56\x91"
+ "\x78\x9e\x95\x5b\xd1\xc4\xd7\x7f\xdc\x00\xbe\x76\x81\x0b\xdf\x8e"
+ "\x69\xdf\xd7\xbe\x38\xe7\x8a\x83\x71\xad\x07\x5d\xef\x1b\xd2\x79"
+ "\x79\x5d\xf4\xbd\xdd\xf7\xf5\x9d\xcb\xd2\xbe\xbe\x73\x5a\xbe\xaf"
+ "\xef\x14\xf2\x7c\xfb\x4e\x1d\xef\x6b\x7d\x8a\x7c\x5f\xdf\xd9\x24"
+ "\x9e\xef\xe5\x4e\x24\xf1\xf5\x81\x46\x73\xbe\x2b\x3c\x5c\x3f\xc6"
+ "\x15\x1e\xbe\x6c\x17\xf2\x12\xfa\xfb\x9e\xaa\x73\xb9\xf8\x3d\x6f"
+ "\xf7\xfd\x7d\xf7\x9c\xb4\xbf\xef\x1e\x93\xef\xef\xbb\x9b\x78\x2e"
+ "\x7e\xb7\x92\xf7\xf7\xbd\x38\xf9\xfe\xbe\x9b\x26\xce\xc5\xef\xaa"
+ "\xdd\xe3\xe2\xf7\xc2\x5d\xe1\xe2\xf6\xfe\x36\x28\x3b\x97\x8f\x37"
+ "\xb7\xb8\xef\xef\xe6\x93\xd2\xfe\x6e\x3e\x28\xdf\xdf\xcd\x69\x3c"
+ "\x1f\x6f\x3e\xca\xfb\xdb\x10\x23\xdf\xdf\xcd\x89\xe2\x7c\xbc\x39"
+ "\xc4\x3d\x3e\x6e\x08\x75\x85\x8f\xdb\xfb\xbb\x15\x75\x2e\x27\x6f"
+ "\xb9\xea\xbe\xbf\x5b\x0e\x4b\xfb\xbb\x65\x97\x7c\x7f\xb7\x24\xf2"
+ "\x9c\xbc\xc5\x6a\xfd\xbb\x35\x4a\xbe\xbf\x5b\x62\xc5\x39\x79\x8b"
+ "\x97\x7b\x9c\xbc\xd5\xd7\x15\x4e\x6e\xef\xef\x36\x5d\xe7\xf2\xf2"
+ "\xb6\xf3\xee\xfb\xbb\x6d\x9f\xb4\xbf\xdb\xb6\xc9\xf7\x77\x5b\x2c"
+ "\xcf\xcb\xdb\x8a\x78\x7f\x1b\x5d\xc8\x9f\xd9\x36\x49\x9c\x97\xb7"
+ "\x1a\xdc\xe3\xe5\x6d\x46\x57\x78\xb9\xbd\xbf\x4d\xda\xce\xe5\xe6"
+ "\xa6\x53\xee\xfb\xdb\x94\x2f\xed\x6f\xd3\x5a\xf9\xfe\x36\x4d\xe2"
+ "\xb9\xb9\xc9\x6a\xfd\xdf\xac\x92\xef\x6f\x53\xa4\x38\x37\x37\x36"
+ "\xba\xc7\xcd\x4d\x4d\xae\x70\x73\x7b\x7f\xb3\xdf\x12\xea\x44\x7e"
+ "\xce\x1c\x71\xdf\xdf\xcc\x46\x69\x7f\x33\x0b\xe5\xfb\x9b\x89\xe4"
+ "\xf9\x39\x93\x7e\xdf\xdf\x34\x52\xca\xf7\x37\xa3\x16\xe7\xe7\xe6"
+ "\x5a\xf7\xf8\x39\x53\xe7\xf6\x3a\x39\x4d\x1d\xc0\xdc\x5c\x6e\xfe"
+ "\xc7\xea\x54\xee\x9d\x3b\x1a\xf1\xf9\x1f\x69\x8a\xfd\xb6\x8a\x68"
+ "\x6e\x19\xda\xa3\xa5\x4b\xe7\x7f\xa4\x3d\x1c\xe7\x7f\xa4\x3d\xe4"
+ "\xe5\x7f\xa4\x3d\x2e\xc9\x7e\x1e\x9f\xf6\x38\x70\x5f\x23\x64\x7b"
+ "\xf0\xfa\x9f\xa6\xd8\x71\xdd\xa5\xf3\x42\xd2\x1e\xc2\xbc\x90\x34"
+ "\x62\xf3\x42\x32\x5b\x3e\x8c\x76\x49\x8b\xd0\x54\xb9\xdb\xf7\x05"
+ "\xe8\x6e\x9b\xb0\x0e\x91\x9b\x87\x92\xc7\x36\xbd\x91\xc7\x76\xb7"
+ "\x55\xd2\xd8\xf6\x3c\xd7\xa5\xf3\x50\xd2\x9e\x33\x1d\x63\xdb\x33"
+ "\x52\x56\xce\x11\xda\x53\x7e\xde\x1b\xda\x73\xd3\x7d\x3d\x94\xed"
+ "\xc9\xeb\x5f\xba\x5b\x45\xe7\x61\xdb\xc5\xfc\x94\xb4\x67\xb2\x10"
+ "\xdb\x74\x3a\xc1\x76\x59\x89\x4b\xba\x8b\xee\x26\xf9\xfd\x73\xa7"
+ "\xef\x83\xd0\x5e\x09\x58\x73\xc9\xcd\x87\xc9\x63\xbb\x7b\x3c\x8f"
+ "\x6d\xaf\x19\xd2\xd8\xee\xf1\x71\x97\xce\x87\x49\xf7\x18\xe1\x18"
+ "\xdb\x3d\x82\x64\xe5\x32\xa1\x7b\xec\x90\x8f\xed\x1e\x09\xf7\xb5"
+ "\x5f\x76\x8f\x52\x1e\xdb\x5e\x7b\x3b\x11\xdb\x2e\xc6\xed\x1e\x93"
+ "\x84\xd8\xee\x1e\x4b\xb0\xfd\x27\xbd\x4b\x1a\x93\xf6\x4a\x71\xfb"
+ "\xbe\x0f\xed\x13\x85\xf5\xa5\xdc\xbc\x9c\x3c\xb6\xbd\xc7\xf2\xd8"
+ "\xf6\xb1\xcb\x0b\xc5\x63\x5b\xb1\xad\x4b\xe7\xe5\xa4\x15\x81\x8e"
+ "\xb1\xed\xad\x93\x95\x23\x85\x56\x2c\x97\x8f\x6d\x45\xd4\x7d\x9d"
+ "\x9b\xad\xd8\xc0\x63\xdb\x27\xab\xf3\xb0\xed\x62\xbe\x4e\x5a\xd1"
+ "\x5f\x88\x6d\xef\xe1\x04\xdb\x87\x27\xb9\xa4\xa7\x69\x9f\x68\xb7"
+ "\xef\x73\xd1\xfe\xa1\x58\x4b\xcb\xcd\x0f\xca\x63\xdb\xb7\x37\x8f"
+ "\x6d\x7f\x3f\x69\x6c\xfb\x25\x75\xe9\xfc\xa0\xb4\xaf\xe3\xfc\x3f"
+ "\xb4\xaf\xa3\xfc\x3f\xf6\xef\x0a\xd3\x7e\xf2\xf3\x5e\xd0\x7e\xa1"
+ "\xf7\x35\x7d\xb6\x5f\x1c\x8f\x6d\xff\xd9\x9d\x88\x6d\x17\xe3\xb6"
+ "\x1f\x12\x62\xdb\x57\x49\xb0\xfd\x97\x22\x97\xd6\x0e\x68\x7f\xb5"
+ "\xdb\xf7\xf5\x68\xa5\x01\xaf\x1b\xc8\xcd\x53\xca\x63\xdb\xff\x2e"
+ "\x8f\x6d\xe5\x55\x69\x6c\x2b\x27\x76\xe9\x3c\xa5\x74\xc0\x29\xc7"
+ "\xd8\x0e\x28\x95\x95\xd3\x85\x56\xca\x7f\x0f\x9e\x0e\x30\xdc\x5f"
+ "\xbf\xc8\x56\xf2\xcf\xbf\xd3\x81\x91\x9d\x87\x6d\x17\xf3\x97\xd2"
+ "\x01\x75\x42\x6c\xfb\x37\x11\x6c\x1f\xd1\xb9\xb4\x4e\x42\x07\x7a"
+ "\xba\xbf\x4e\x12\xe4\xc9\xde\xc3\x94\x99\x2f\x95\xc7\x76\xe0\x99"
+ "\xfb\xb9\x89\xe8\x27\xee\xda\x62\xfb\x7e\x6e\x22\xfa\x09\xbf\x2e"
+ "\x93\x2f\x95\xee\x99\xeb\x18\xc7\x3d\x53\xe4\xad\x89\xf4\xbc\x2b"
+ "\x1f\xc7\x3d\x35\xfc\x9a\xc8\x13\xfc\xf3\x2f\x74\x90\xe5\x9b\xe4"
+ "\x0f\x3e\x67\x11\xfd\xc4\x0e\x87\x39\x8b\xe8\x27\xd2\x1e\x58\x1e"
+ "\x55\xba\xe7\x5e\x41\xce\x22\x3a\xb0\xc2\xcc\x8e\x85\xa3\x13\x5c"
+ "\x5b\x57\x09\x52\xba\xbf\xae\xf2\x23\x72\x7f\x57\x66\xde\x56\x7e"
+ "\x2c\x04\x5d\xe0\xc7\xc2\x8f\x3c\xa4\xc7\x42\xaf\xde\x5d\x26\x6f"
+ "\x2b\x1d\xbc\xcb\xf1\x58\x08\x4e\x97\xb7\x86\xd2\x4b\x7e\x1e\x18"
+ "\x3a\xb8\x92\x5f\x43\xe9\xa5\xe4\xc7\xc2\x8f\x62\x3a\x6f\x2c\xf4"
+ "\xda\xe7\x78\x2c\xf4\xda\xf0\xc0\xf2\xb9\xd2\xc1\x65\xc2\xb1\x10"
+ "\x74\x96\x8c\x85\x4f\x2a\x5c\x5b\x87\xf9\x91\x4b\xf7\xbf\x85\x63"
+ "\xa1\x4f\x28\x7b\xef\x5b\x66\xfe\x58\x7e\x2c\xfc\xe8\x2a\x3f\x16"
+ "\xfa\xd8\xf1\x79\x7e\x2c\xf4\x1e\xd0\x65\xf2\xc7\xd2\x21\xfb\x1d"
+ "\x8f\x85\x90\x4d\xf2\xd6\x5c\x7a\xfb\xc9\x1f\x0b\x21\xfc\xfb\x4f"
+ "\xd9\xbd\xf9\xf7\x9f\xe8\x3e\xb3\x3b\x6f\x2c\xf4\xfe\xd8\xf1\x58"
+ "\xe8\x9d\xf3\xc0\xf2\xca\xd2\x21\x47\x85\x63\xe1\x47\x5a\x32\x16"
+ "\x8e\x47\xbb\xb6\x6e\xd3\xc7\x09\xfe\xdf\xde\xba\xcd\x53\x6a\xf6"
+ "\xb9\x00\x99\x79\x6c\xf9\xb1\xd0\xe7\x2e\x3f\x16\x9e\xea\x2d\x3d"
+ "\x16\x42\x87\x76\x99\x3c\xb6\xf4\x93\x87\x1d\x8f\x85\x27\xf3\xe4"
+ "\xad\xd1\x84\xf6\x96\x3f\x16\x9e\x6c\xe0\xd7\x68\x42\xd5\xfc\x58"
+ "\x78\x2a\xb1\xf3\xc6\x42\xe8\x31\xc7\x63\x21\xb4\xe8\x81\xe5\xb7"
+ "\xa5\x9f\xac\x10\x8e\x85\x3e\x4d\x64\x2c\x7c\x56\xe3\xda\x3a\xcf"
+ "\x53\xc3\xdd\x5f\xe7\x51\x0d\x67\x9f\x99\x90\x99\x4f\x97\x1f\x0b"
+ "\x7d\x3d\xf8\xb1\xa0\x1a\x20\x3d\x16\x7e\x3c\xb6\xcb\xe4\xd3\xa5"
+ "\xfb\x1e\x77\x3c\x16\xfa\x96\xc8\x5b\xd3\xf9\xf1\x00\xf9\x63\xa1"
+ "\xaf\x8e\x5f\xd3\xf9\xf1\x70\x7e\x2c\xa8\x52\x3b\x6f\x2c\xfc\xf8"
+ "\x94\xe3\xb1\xf0\xe3\xd2\x07\x96\x67\x97\xee\x7b\x56\x38\x16\x9e"
+ "\x32\x90\xb1\xf0\x8f\xe9\xae\xad\x0b\xa9\xa2\xdc\x5f\x17\x7a\x3a"
+ "\x8a\x7d\x9e\x44\x66\x5e\x5f\x7e\x2c\x84\xf9\xf1\x63\xe1\x69\xe9"
+ "\xef\x3c\xd0\xfd\x5e\xea\x32\x79\x7d\xe9\x30\xc7\xdf\x3f\xa2\xc3"
+ "\x1c\x7c\xff\x48\x6c\x0d\xa8\xdf\x50\xf9\x63\x21\xcc\xc8\xaf\x01"
+ "\xf5\xe3\xdf\xff\xa3\x9f\xce\xea\xbc\xb1\xd0\xcf\xf1\xf7\x1f\xe8"
+ "\x7e\x4e\x7c\xff\xc1\xc5\x7c\xbf\x74\x98\x56\x38\x16\xc2\x3c\xc9"
+ "\x58\xa8\xa8\x75\x6d\x1d\xe9\xe9\x76\xd7\xff\xb1\xce\x6f\x0b\xb2"
+ "\x5f\x47\xaa\x6c\x88\x44\xcf\xbe\x86\xc7\x42\x7f\xbd\x31\xdf\xbb"
+ "\x10\xe7\x17\x36\xa9\xb8\x1c\x94\xeb\xb8\x1c\x2f\x7a\x23\xc9\x41"
+ "\xa9\x33\xdd\xcf\x41\x49\x72\x7f\x20\x0a\xbf\x0b\x8c\xdf\x09\x36"
+ "\x2a\x49\xfe\x49\x06\x3f\x13\x85\x9f\x91\xaa\xaf\x60\xf3\xab\xa4"
+ "\x1b\xa1\xef\x57\xda\xc9\x3f\x19\xa7\x45\x95\x71\xab\x91\x31\x30"
+ "\x53\xc7\xbe\x27\x4c\xf7\xdf\xc0\xe6\x9f\x7c\x3d\xa4\x4f\xf6\x37"
+ "\x28\x28\x00\xe7\x9f\x8c\x63\xcc\x99\x5a\x46\x57\x65\x40\x50\x16"
+ "\xec\x1b\xcf\xe5\xa0\xa4\xfb\x5f\xc7\x7d\x37\xbe\xae\xee\xb3\xfb"
+ "\x1b\x89\xfc\xc2\x74\x7f\xf9\x79\x60\xe9\xfe\x25\xfc\xfa\x4e\xff"
+ "\x06\x1e\xa3\x03\xd8\x39\x18\x8e\xa7\x57\xc6\x42\x8c\xd9\xf2\xaf"
+ "\xd9\x6d\xae\xe4\xde\xa0\xf1\xd4\xd9\x9e\xcf\xd8\x67\x44\xec\xe2"
+ "\x17\xef\xb3\x67\x4a\x8d\xf9\x8a\x10\x9c\xe7\xd8\x79\x9f\x75\xbb"
+ "\xfd\x60\x7c\xf6\x4c\xa4\xf3\x3e\x7b\x66\x8f\xd0\x67\x62\xeb\x10"
+ "\xcf\x6c\x96\xef\xb3\x67\xa6\xf3\xeb\x10\xcf\x14\xf2\x3e\x7b\xa6"
+ "\x91\xf8\xec\x99\x08\xe2\xb3\xca\x4d\x6d\xae\xe4\xef\xa0\x9f\x69"
+ "\xf7\xfd\x6f\xac\x9b\xda\x82\xec\x75\x39\xef\x33\xf5\x6c\xf0\x59"
+ "\x21\xce\xb7\xec\xbc\xcf\x7c\xea\x1f\x8c\xcf\x7e\xd2\xe4\xbc\xcf"
+ "\xd4\x33\x6c\x7c\x26\xa2\x97\xd5\xf2\xbf\xd9\x49\xab\xbd\x78\xbd"
+ "\xac\x8e\xe6\x7d\xa6\x2e\x22\x3e\xfb\x49\x03\xf1\xd9\xe9\x43\x6d"
+ "\xae\xe4\x00\xa1\xd5\x89\xed\xfb\x8c\xbd\xa7\xef\x60\x9c\x0d\x52"
+ "\x1a\xf3\x41\x63\x82\x7e\x74\xde\x67\x81\x5f\x3c\x18\x9f\x0d\x2c"
+ "\x71\xde\x67\x83\xbc\x85\x3e\x13\xd3\x75\x03\x6f\xc9\xf7\xd9\xc0"
+ "\xa3\xbc\xae\x1b\x84\x78\x9f\x0d\x8a\x21\x3e\x1b\x58\x48\x7c\x56"
+ "\xa5\x6d\x73\x25\x8f\x08\x3d\xa8\xdd\xf5\x2f\xcc\x43\xdb\x82\xec"
+ "\x75\x0e\xef\xb3\x67\x4f\x80\xcf\x0a\x71\xfe\x69\xe7\x7d\x36\x72"
+ "\xcb\x83\xf1\xd9\xb3\xd3\x9d\xf7\xd9\xb3\xc7\x6c\x7c\x26\xa2\x3f"
+ "\x9e\xdd\x27\xdf\x67\xcf\xa6\xf0\xfa\xe3\xd9\x43\xbc\xcf\xc2\x3d"
+ "\x89\xcf\x9e\x8d\x26\x3e\xab\xf1\x6d\x73\x25\x17\x09\xfd\x6c\x4d"
+ "\xfb\x3e\x63\xef\xc1\x3a\x18\x67\x83\xd3\x8c\xf9\xc0\xd9\x81\x8f"
+ "\x3b\xef\xb3\x59\xe3\x1f\x8c\xcf\x06\x7b\x39\xef\xb3\xc1\x4b\x84"
+ "\x3e\x13\xe3\xc9\x83\xe5\xe7\xc1\xa6\x07\xf7\xe7\x79\xf2\xe0\x44"
+ "\xde\x67\x83\xcb\x89\xcf\x06\x23\xe2\xb3\x33\x91\x6d\xae\xe4\x33"
+ "\xa1\x07\x4b\xe6\xff\x72\xc4\x1b\x2d\xcf\xe5\xf3\x7e\x1b\x12\xd1"
+ "\x75\xb8\xe3\x73\x1a\xe7\xfd\x36\x64\x60\xfb\xdc\x71\x48\xa0\x7c"
+ "\xbf\x3d\x57\xc7\x73\xc7\x21\x2a\xde\x6f\x43\x52\x88\xdf\x9e\x2b"
+ "\x77\x8f\x3b\x0e\x69\xf7\xfd\x57\x31\xee\x68\xef\xb7\x88\xc6\xae"
+ "\xc3\x1f\x23\xd2\x9c\xf7\x5b\xc4\xa5\xf6\xf9\x63\xc4\x29\xf9\x7e"
+ "\x8b\xc8\xe3\xf9\x63\x44\x2d\xef\xb7\xa1\x6a\xe2\xb7\x88\x14\xf7"
+ "\xf8\x63\x84\x64\xfe\x37\x47\xfc\xd1\xde\x6f\xc3\x4a\xba\x0e\x87"
+ "\x1c\x16\xe1\xbc\xdf\x86\xed\x68\x9f\x43\x0e\x5b\x27\xdf\x6f\xc3"
+ "\xa2\x79\x0e\x39\x2c\x87\xf7\xdb\x30\x2d\xf1\xdb\x30\xb5\x7b\x1c"
+ "\x72\xd8\x01\x57\x38\xa4\xbd\xdf\x86\xc7\x76\x1d\x1e\xf9\xd3\x46"
+ "\xe7\xfd\x36\x7c\x5a\xfb\x3c\x72\xb8\xfc\x6f\x16\xd3\xc3\x3d\x79"
+ "\x1e\x39\x7c\x12\xef\xb7\xe1\xe4\x1b\x2c\xf4\x4f\xb5\xee\xf1\xc8"
+ "\xe1\xed\xe6\xff\x10\xe3\x91\xf6\x7e\x1b\xa9\xec\x3a\x5c\x72\x84"
+ "\x0c\xfe\x3f\xd2\x96\xff\x8b\x70\xc9\x11\x2e\xf0\xff\x11\x47\x79"
+ "\x2e\x39\xd2\x8a\xff\x8f\xe4\xf8\xff\x88\x42\xf7\xb8\xe4\x48\x27"
+ "\xf8\xbf\x3d\x97\xb4\xf7\xdb\xf3\x15\x5d\x87\x4f\x3e\x1f\xeb\xbc"
+ "\xdf\x9e\x3f\xde\x3e\x9f\x7c\x5e\xfe\x77\xa0\xe8\xe7\x53\x79\x3e"
+ "\xf9\x7c\x39\xef\xb7\x48\x2f\xe2\xb7\xe7\x63\xdc\xe3\x93\xcf\x4b"
+ "\xe6\x7f\xb4\xf8\xcd\x14\xe4\x5d\xc8\x88\xac\x43\x9e\x4e\x8c\x24"
+ "\xb9\x09\xe9\xd1\x85\xa6\x60\xef\x42\xb9\xdf\x77\xb1\xe4\x9c\x3e"
+ "\x05\x6a\xbf\x9e\x1e\x3d\xd4\xad\xbc\xd3\xf4\xa8\x4b\x6e\xe7\x9d"
+ "\xa6\x47\x1d\xec\xb0\xef\xbb\xd0\xa3\xf2\x65\xe7\x9d\xa6\x47\xc5"
+ "\xf1\x1c\x74\xd4\x5e\xde\xd7\xa3\xd9\xe7\x13\x64\xe5\xa3\xa6\x47"
+ "\xf5\x77\x2b\x1f\x35\x3d\x7a\x20\xc1\x57\x64\x03\x9b\x8f\x9a\x1e"
+ "\xad\xea\x94\xef\xbe\xd0\x91\x39\x38\x1f\x35\xb3\xe5\x8b\x04\x97"
+ "\xf2\x23\xd3\xa3\xf7\xb6\x8f\x67\x45\x08\x23\xb2\x46\xcb\xe3\x79"
+ "\x6c\xa2\x29\x58\x11\x22\xf7\x3b\x33\x42\x3c\x8f\xf5\x70\x0f\xcf"
+ "\x63\x3e\x76\x1f\xcf\x63\xd6\x76\xd8\x77\x66\xe8\x31\xf3\xe5\xe3"
+ "\x79\x4c\x04\xcf\xcd\xc7\xa4\xf2\x78\x1e\x5b\x2a\x1f\xcf\xff\xa5"
+ "\x77\x0f\xcf\x63\x5a\x08\x9e\xff\xeb\x10\xc1\xf3\x18\x5d\xa7\x7c"
+ "\x7f\x86\xfe\xaf\x38\x82\xe7\xb3\x07\x5c\xca\x3f\x4d\x8f\x4d\x75"
+ "\x02\xcf\x85\x8c\xc8\xfa\x35\x8f\xe7\xa8\x48\xc0\x73\xa1\xdc\xef"
+ "\xdd\x08\xf1\xfc\xc2\x19\xf7\xf0\xfc\xc2\x3a\xf7\xf1\xfc\xc2\xe4"
+ "\x0e\xfb\xde\x0d\xfd\xc2\x08\xf9\x78\x7e\x01\xf1\x9a\xe5\x85\x09"
+ "\x3c\x9e\xa3\xd2\xe4\xe3\xf9\x67\x27\xdc\xc3\xf3\x0b\xa7\x08\x9e"
+ "\x7f\xb6\x81\xe0\xf9\x05\x4d\xa7\x7c\x07\x87\xfe\x59\x04\xc1\xf3"
+ "\x97\x7a\x97\xf2\x7b\xd3\x51\x92\xf9\x8f\x79\x3c\xfb\x84\x30\x22"
+ "\x6b\xfb\x3c\x9e\x7f\xee\x65\x0a\xf6\x09\x91\xfb\xdd\x1d\x21\x9e"
+ "\xc7\xbb\xf7\x9d\x0b\x7a\xbc\xfb\xdf\xb9\xa0\xc7\xbb\xf1\x9d\x0b"
+ "\x9b\xef\xee\xd0\xe3\xbb\xc9\xc7\xf3\xb8\x1a\x5e\xcb\x8d\x0f\xe2"
+ "\xf1\xfc\xf3\x49\xf2\xf1\x3c\x2e\xcf\x3d\x3c\x8f\x27\xdf\xbf\xa0"
+ "\xc7\x4d\x27\x78\x1e\x9f\xd3\x29\xdf\xe3\xa1\xc7\x21\x82\xe7\xf3"
+ "\x63\x5c\xca\x9f\x4e\xff\x3c\xc8\x09\x3c\x17\x32\x22\xf7\x3d\x78"
+ "\x3c\x4f\xac\x05\x3c\x17\xca\xfd\xfe\x8f\x10\xcf\x13\x97\xb8\x87"
+ "\xe7\x89\x61\xee\xe3\x79\xc2\xf5\x0e\xfb\xfe\x0f\x3d\xe1\x9c\x7c"
+ "\x3c\x4f\x28\xe1\x35\xee\x04\xab\xfb\xff\xbf\x08\x91\x8f\xe7\x09"
+ "\xee\x7d\x17\x88\x9e\x98\x44\xf0\x3c\x81\x7c\x17\x88\x9e\x18\xd7"
+ "\x29\xdf\x05\xa2\x7f\x5e\x43\xf0\xfc\xf5\x06\x97\xf2\xd3\xd3\x13"
+ "\x1b\xda\xc7\xb3\x6f\x08\x23\x72\x4f\x88\xc7\xf3\xa4\x52\x53\xb0"
+ "\x6f\x88\xdc\xef\x10\x09\xf1\x3c\x69\x9c\x7b\x78\x7e\xf1\x96\xfb"
+ "\x78\x7e\xf1\x58\x87\x7d\x87\x88\x7e\x71\x9f\x7c\x3c\xbf\x68\xb9"
+ "\xff\x07\xf1\xf9\x45\xab\xfb\x7f\x93\xe4\x7f\x9f\x88\x7e\x71\xb8"
+ "\x7b\x78\x9e\x34\x8a\xe0\xf9\x17\x7a\x82\xe7\x49\x11\x9d\xf2\x7d"
+ "\x22\xfa\x17\x25\x04\xcf\x17\x2a\x5d\xca\xff\x4f\x4f\x6a\xf7\xf9"
+ "\x0f\xb1\xf5\x0d\xcb\xba\x14\x8f\xe9\x5f\xa6\xbb\xbf\xc6\xf1\xcb"
+ "\x60\xf7\x30\xfd\xf2\x49\xf7\x31\xfd\x72\x6e\xc7\xad\x71\xbc\x2c"
+ "\xff\x5b\x7f\xf4\xcb\x13\xf8\x35\x8e\x97\x37\xf1\x98\xfe\xe5\x51"
+ "\xf9\x98\x7e\xd9\xcb\x3d\x4c\xff\xd2\x8f\x60\xfa\xa5\x0a\x82\xe9"
+ "\x5f\x7a\x76\xce\x1a\xc7\x4b\xa9\xee\xad\x71\xfc\x72\x93\x2b\x6b"
+ "\x1c\xf6\x98\x9e\x12\xe3\xfe\x3a\xc7\xe4\xab\xee\x61\x7a\xf2\x0e"
+ "\xf7\x31\x3d\x79\x7e\xc7\xad\x73\x4c\x9e\x2c\x1f\xd3\x93\x43\xf8"
+ "\x75\x8e\xc9\xb3\x79\x4c\x4f\xc9\x91\x8f\xe9\xe8\x3a\xf7\x30\x3d"
+ "\xf9\x12\xc1\x74\x74\x11\xc1\xf4\xe4\xda\xce\x59\xe7\x88\x9e\xe4"
+ "\xde\x3a\xc7\x94\xd9\xae\xac\x73\xd8\x63\x7a\x5a\x7f\xf7\xd7\x3a"
+ "\x62\x8e\xb9\x87\xe9\x98\x85\xee\x63\x3a\x66\x54\xc7\xad\x75\xc4"
+ "\x84\xc9\xc7\xf4\xd4\x26\x7e\xad\x23\x26\x82\xc7\xf4\xb4\x04\xf9"
+ "\x98\x9e\x5a\xe6\x1e\xa6\x63\x0e\x13\x4c\x4f\x4d\x21\x98\x8e\x39"
+ "\xd0\x39\x6b\x1d\x53\x43\xdd\x5b\xeb\x98\x16\xe1\xca\x5a\x87\x3d"
+ "\xa6\x7f\x65\x70\x7f\xbd\xe3\x57\xb9\xee\x61\xfa\x57\xe3\xdc\xc7"
+ "\xf4\xaf\xfc\x3a\x6e\xbd\xe3\x95\xbb\xf2\x31\xfd\x8a\x86\x5f\xef"
+ "\xf8\x95\xd5\xfb\xff\xd3\x23\xe5\x63\xfa\x95\x0d\xee\x61\xfa\x57"
+ "\x9b\x09\xa6\x5f\x99\x40\x30\xfd\xab\xac\xce\x59\xef\x98\xa6\x73"
+ "\x6f\xbd\x63\x7a\xbb\xf9\x2f\xc4\xd6\x3b\xec\x31\xfd\x6a\xa5\xfb"
+ "\x6b\x1e\xaf\xce\x77\x0f\xd3\xaf\x06\xbb\x8f\xe9\x19\x97\x3a\x6e"
+ "\xcd\x63\xc6\x29\xf9\x98\x9e\x91\xc7\xaf\x79\xcc\xb0\x7a\xfe\xe9"
+ "\xd7\xbe\xf2\x31\x3d\x23\xd6\x3d\x4c\xbf\x3a\x87\x60\x7a\x46\x08"
+ "\xc1\xf4\xab\xd3\x3b\x67\xcd\x63\xfa\x09\xf7\xd6\x3c\x5e\xad\x75"
+ "\x65\xcd\xc3\x1e\xd3\x33\x4b\xdc\x5f\xf7\x98\x39\xca\x3d\x4c\xc7"
+ "\x5e\x75\x1f\xd3\xb1\x87\x3b\x6e\xdd\x23\x76\x97\x7c\x4c\xc7\x26"
+ "\xf2\xeb\x1e\xb1\x7c\xfe\x7b\x7a\xa6\x56\x3e\xa6\x63\xc3\xdd\xc3"
+ "\xf4\xcc\xa1\x04\xd3\xbf\x6e\x22\x98\x9e\xa9\xee\x9c\x75\x8f\x5f"
+ "\x17\xba\xb7\xee\x31\xd3\xee\xf9\xb7\x65\xf3\x17\x25\xa8\x16\x2f"
+ "\x58\xb0\x6c\x7e\xaa\x6a\x59\x72\xd2\x1b\xf3\xc7\x0e\xb0\xfc\x1e"
+ "\x1b\x91\x36\x20\x4d\x81\x12\x16\xc6\xbf\xbe\x62\x18\x7f\x30\x79"
+ "\xfe\x22\xf8\xa3\x40\x89\xf1\xcb\x12\x55\xa9\xab\x52\xe6\xab\xf0"
+ "\xaf\x85\x6f\xa4\x40\x91\xc5\xa9\xfc\x9e\xc9\xcb\x93\x53\x93\x52"
+ "\x92\xe7\xab\x26\x4c\x1e\x37\x78\xfa\xc4\x5f\x4d\x7f\xe1\x05\x05"
+ "\x42\x56\xdf\x91\x56\x31\x79\xe1\x18\xe3\x9e\x57\xe8\xf9\xf3\xab"
+ "\x40\x2d\x6d\x03\x9c\x6d\x5f\x8a\x94\x5b\x96\x22\xcf\xcd\xb7\x91"
+ "\xd7\xb6\xdb\xc8\xd7\xfc\x6e\x4d\x88\xea\x2d\x14\xc9\x04\x46\x69"
+ "\xb7\xdf\x46\x41\xe6\xdc\xb5\x71\x4c\xee\x2a\x95\x2e\x70\x9e\x12"
+ "\x97\x65\x02\xe3\xa3\xf0\x7e\xb0\xab\x27\x93\x9b\x59\x53\x4f\xcf"
+ "\x9f\x00\xc7\x74\x99\x57\x11\xc5\xf8\xbf\x56\xfb\xa1\x59\x47\x1d"
+ "\xc7\x77\x4b\xa1\xdf\x88\x9e\x55\x03\xdb\x51\x44\xcf\x4e\x86\x2d"
+ "\x1d\xb6\x0a\xd8\x74\xb0\x19\x10\x3d\x27\x01\xb6\x52\xd8\x6a\x61"
+ "\x6b\x80\x0d\xf6\xcd\xf5\x85\x2d\x08\x36\xd8\x3f\x17\xca\xce\x85"
+ "\x63\x73\x75\xa4\x9e\xb9\x70\xfc\xf5\x34\xd8\x4a\x60\x2b\x47\x74"
+ "\x1c\xd4\x19\xb7\x15\xd1\xf1\x21\xf0\x77\x2f\x6c\x65\xb0\xe1\xfd"
+ "\x67\x61\xc3\x75\x19\xc9\xb1\xf8\x13\x88\x9e\x87\x60\x53\xc1\x36"
+ "\x06\xb6\x14\xd8\x36\xc0\x96\x03\x5b\x21\x6c\xd0\xbe\x79\xb8\x0c"
+ "\x5c\xeb\x0d\x38\xf6\x06\x5c\xe3\x8d\x22\xd8\xf4\x88\x4e\x88\x85"
+ "\xed\x00\x82\x3e\x92\x2d\x01\xf6\xcd\x57\xf3\xbf\xe7\xcf\x0e\x58"
+ "\xf7\x63\xad\x66\x90\x11\xc6\xd8\xec\xc1\xcc\x7a\x44\x33\xb9\xf3"
+ "\x74\x29\x83\x90\xc7\x35\x7a\x56\x4b\xf5\x06\x04\xb1\x61\x95\x4a"
+ "\xb3\xba\x15\x8e\xcf\x62\xef\x7d\x37\x67\xcf\x32\x68\x51\x4a\x0e"
+ "\x1e\x4b\xf2\xb0\x34\xcb\x40\xce\x9f\x1d\xa9\xf5\xe8\xb9\x17\x9f"
+ "\xcf\xbc\xdb\xad\x82\xc9\x8c\xdd\x89\xdf\x99\x85\xfa\x6b\xf0\x3b"
+ "\xb5\x4c\x4e\xb7\x09\x8c\x2f\x73\x14\xc7\x03\xcd\x6a\xdc\xae\x59"
+ "\x67\xc8\xd8\x81\xe3\xd0\x36\x5d\x60\x4d\x08\x8c\x15\x4f\xfc\x9b"
+ "\x01\x9f\x32\x25\x23\x4b\x49\x8c\x98\xcd\x3e\x3b\xd8\x1a\xac\x4a"
+ "\xc1\xc7\x5a\xf6\x18\x4a\x98\xbd\x3e\x91\x9a\x45\xad\xa8\x81\x9e"
+ "\x75\x1a\xfa\x46\x41\xbc\xa2\x98\x7e\x86\x12\x73\x81\x2a\xe5\x08"
+ "\xf8\x19\x97\xfb\x6b\x46\x23\xfe\x5b\x89\x8f\x33\x79\x61\x91\x78"
+ "\xcd\x46\x93\xf1\x01\xc4\xd0\x59\x67\x5a\x83\x47\xe6\xa8\x5e\x09"
+ "\x60\xea\x49\xdb\xa0\xdc\xec\x04\x4b\x5b\x5a\x03\x6b\x54\xb8\x7e"
+ "\x46\xf5\x7c\x0c\x1c\xf3\x84\xb6\x29\xa1\x1d\x1e\x37\xe0\x3c\x06"
+ "\xda\xa8\x79\x05\x5f\x77\xce\x1c\x68\x2b\x95\x39\x0d\xea\xfe\xe0"
+ "\xf9\x98\x8f\x56\x1b\x28\x7c\xcc\x9c\x53\x13\x02\x78\xf6\x65\xb2"
+ "\x67\x36\xbd\xdf\x13\x79\x16\xbf\x8b\xd0\xee\x77\x91\x57\x73\xf6"
+ "\x9c\xe9\x5a\xfa\xfb\x31\x24\x4e\xcd\xaa\xa1\xa0\x8c\x96\x9e\x13"
+ "\x01\xfd\xd4\xb1\xd7\x0a\x7a\x52\xe3\xe0\x5a\x7b\xee\x5f\xab\xe0"
+ "\x49\x0d\xbe\x16\xb1\x51\x4d\x08\x67\x2b\xb6\x0e\x73\x49\x4b\x0c"
+ "\xb6\x1f\xb6\x9d\xa5\x0e\x73\xae\xa5\x8e\xd9\xc7\xf1\xf9\x70\xcd"
+ "\x3c\xe6\x83\x96\x18\x73\x41\xbf\x1a\xe8\x73\x0a\x3e\x1e\xb0\x0e"
+ "\xe9\x19\xf8\x8b\xaf\xcf\xf9\x42\xc9\x50\x59\x08\xd7\xcf\x70\xfb"
+ "\x00\x3b\x4a\x38\xb7\xce\xbc\x5e\x85\xf0\x3c\xd2\x44\xcf\xdd\xc6"
+ "\xbc\x9b\x69\x60\x94\xdd\x0b\x89\x8f\xe7\x8e\x58\x55\xc3\x98\x61"
+ "\x33\x0d\xa9\x41\x1e\x9a\x57\xb0\x7f\xe7\x4e\x57\x4d\xe9\x01\x36"
+ "\x9e\x3b\xe3\xbe\x6d\xc3\x9e\x9f\x04\xf6\x51\x16\xf7\x84\xf1\xfc"
+ "\x5b\xdf\xad\x0c\xa5\x42\xd8\x3f\xd8\x56\x60\x27\x04\xfb\xbd\x30"
+ "\x4e\x9b\xb3\xe7\x6e\xb0\xb1\x97\xf2\xe5\x69\x99\xcc\x90\x18\x5c"
+ "\xb7\x1e\xd7\x3d\x59\x07\x73\xab\xc5\xbf\x50\xfe\x90\xd6\xc3\xf7"
+ "\x04\x2e\xaf\xea\xc7\x62\xee\x0c\xf1\x2b\xc1\x16\xb6\x1f\x13\x1c"
+ "\x8e\xcb\xd7\xcc\x18\x88\x94\x01\x35\x88\x52\x65\xf4\x2f\x27\x58"
+ "\x08\x8b\xb4\xd4\xc3\xf6\xb1\xc0\xaf\xc4\xb4\x1e\xe6\xc5\xfb\xf8"
+ "\x7b\x3d\xc2\x94\xdb\x3d\x07\xca\xe9\x5a\xf2\xfb\x68\x98\x9c\xee"
+ "\x39\xf8\x5d\xf1\x7a\xfa\x75\xf6\x19\x28\x66\xbd\x17\x22\x36\xea"
+ "\x9e\x97\x91\xcc\xe8\x32\x6e\xc1\xb5\x7a\x85\xe9\xfe\xba\x42\x07"
+ "\xfe\xea\xa3\xc1\x78\x38\x72\xcf\x40\xe1\xfc\x7d\x10\x87\xfc\x77"
+ "\x43\x5f\x77\x01\x26\xa0\xaf\x08\xd7\xdb\x9c\xfd\x7a\x0a\xdf\xd7"
+ "\xd7\x83\x30\x36\xe0\x1a\xdc\xb5\xa1\xde\xf5\x70\x8d\xdc\xee\xa5"
+ "\x50\xae\x50\xeb\x51\xae\xb2\xd8\x84\xbd\x36\x5f\x8e\x1b\x4b\xaf"
+ "\x6f\xd5\x05\x76\x2f\x6d\x5b\xc1\xd4\x6c\xff\x0a\xea\x5f\x8f\x98"
+ "\xd6\x7b\x4c\x65\x7a\x0c\x63\xc8\x7e\x15\x3f\x93\x58\x87\x32\xe3"
+ "\x51\xa8\xcf\x3a\x46\x37\xd5\x84\x02\x7c\xea\x02\x98\xd3\x31\x75"
+ "\xec\x77\x0c\xd2\x6b\x98\xc6\xaa\x94\xa3\x28\xfd\x32\xf2\x5d\x9b"
+ "\x84\x82\x32\x63\xa0\x2f\x95\x8c\xa1\x3a\xad\x0e\x55\xe9\x61\x4b"
+ "\x39\x0d\xe5\xce\xc1\x76\x14\x65\xae\x42\x9e\x53\x60\x8e\xca\xb8"
+ "\x8b\x7c\xab\x52\xee\xc2\xbe\xeb\x28\x3d\x8e\x31\x9e\xae\xc4\xe5"
+ "\x4e\xa2\xa9\x46\x5d\xc0\xda\xeb\xe0\xd3\x57\xf1\xfb\xd7\x17\x50"
+ "\x31\xb4\xa5\x35\x70\x6d\x4c\x4b\x6e\x66\xed\x9d\x15\x8c\xb1\x39"
+ "\x3b\x2e\x41\x8b\xc6\x44\x08\xfa\x82\xdb\xdc\x8a\x10\xf8\xcd\x03"
+ "\x97\x31\xe7\xf7\x2e\x7b\xdd\x88\xe3\x4b\x5c\x2c\x70\x04\x64\x39"
+ "\x8e\x8f\xe9\x82\x7b\x97\xc1\xfe\x0d\x53\x8d\x4c\x33\xb6\x0f\xee"
+ "\x37\xd8\x68\x2f\xd7\xff\xbd\x74\x0a\xf2\x84\x6b\x54\x68\x3d\xfe"
+ "\x6a\xc4\xd7\x80\x3a\xbb\x03\xde\x67\x63\x6c\x70\xc7\x1a\xb4\x1e"
+ "\x47\x26\xf0\x78\x99\x53\x02\x18\xe9\x6e\x69\x4b\x73\x76\xbc\x27"
+ "\x9c\x1b\x6d\x85\x27\x8c\x8f\xfb\xc7\xb9\xf9\x0a\xc7\xa6\x04\x33"
+ "\x8e\xad\xe0\x31\x53\x70\x58\x14\x8c\x99\x32\xe6\x4e\x88\x2f\x43"
+ "\x31\x86\x29\x46\xc6\x60\xce\xf7\xd5\xc1\x9c\xe4\x5b\x6d\xd4\x73"
+ "\xe5\xe3\xf7\xc3\x58\x2b\x27\xcf\x7b\xc6\xe7\xe2\x3a\x81\x87\xa4"
+ "\x64\xdf\x46\xca\xa9\x35\x8c\x01\x8f\x5f\x73\xee\xf9\x88\xec\xa5"
+ "\x28\x88\xc9\x0f\x8b\x30\x07\x87\xc6\xb4\xec\x19\x59\x82\x63\x2c"
+ "\xc6\x2f\x93\x03\xe7\x72\xf5\xc0\x75\xbb\x69\xe9\xf8\x44\x33\x9c"
+ "\xcf\xe4\xf9\xea\x38\x1c\xb0\xf1\x90\xc4\xd1\xf8\x44\x26\x0c\x8e"
+ "\x6d\x65\xf2\xe0\x58\xb7\x7a\x3a\x5e\x0f\xfb\x11\xfc\xae\xd4\x64"
+ "\xdc\xc6\x75\xb0\x71\x1f\x7e\xe7\x08\x7e\x53\xd8\x9e\x73\x9a\xf0"
+ "\xf8\x27\x9c\x71\x5e\x6f\x7e\x4c\xb3\xfd\x65\xc7\x55\x6b\xb0\x1f"
+ "\x6a\xce\x9e\x17\xae\xf5\xe8\xe5\xc5\xd9\xd8\x43\xcf\xc6\x24\x88"
+ "\x2b\x7b\x46\x96\x7e\x16\x83\xd0\x67\x95\x08\x97\x89\xd1\x7a\x84"
+ "\x84\xf2\xb6\x9c\x97\x84\xcb\xb2\xed\x84\xb1\x69\x5e\xcf\xcd\x01"
+ "\x70\x0e\x8c\x1b\x2d\x8e\x39\x24\xb6\xcd\x4b\xc0\x71\x07\xc6\xdd"
+ "\x24\x12\xf7\x5b\xd4\xd0\x2e\x23\xd3\x73\xb4\x12\xda\x95\x55\xcf"
+ "\xb5\xc5\xba\x6d\x96\x38\xc3\xe4\x8e\xce\x21\x65\xbb\x97\xc1\xf5"
+ "\x6b\xe0\xfa\x7a\x6b\xac\x91\x7e\xbd\x31\x71\x48\x25\xfc\x0f\xbc"
+ "\xc3\x52\x17\x8c\x55\x2f\x18\xa3\xcf\x60\x4c\xe1\xf1\xb9\xe3\x5d"
+ "\xcc\x25\x46\x17\xb6\xe4\x8e\x2e\x69\xce\x7e\x23\xc4\x32\x4e\xcd"
+ "\x2b\x98\x5a\xf0\x2b\x32\xdf\x63\xce\x6e\x07\x5f\x4e\x35\xd1\xcc"
+ "\xeb\xa6\x70\x04\x1c\xd3\x58\x0c\xfb\x8b\x57\x60\x8e\x16\x37\x1d"
+ "\xc6\xb2\x97\x78\x59\x4f\x84\xcb\xb1\xe5\xb9\xb2\xad\x81\xa3\x0b"
+ "\xd9\x36\x53\xb4\x19\xda\xe7\x61\x69\x53\x6b\x60\xf7\x22\xb8\x76"
+ "\x9e\xd6\xa3\x47\xb4\x60\xbc\x64\x9b\xcb\x18\x26\x16\xe3\x8a\x86"
+ "\xbe\x1c\x81\xbf\x3d\x38\x1c\xfb\x7c\x06\x25\x26\x4c\x86\xb1\x02"
+ "\xfe\x7e\xbf\x17\x03\xf1\xf4\x8d\xb3\x5a\x14\xe7\x89\xcf\xdf\x02"
+ "\xbf\xf1\x7e\x5c\x06\xf6\x37\xc1\x7e\xce\x36\x73\x11\xf6\x9f\xb0"
+ "\xde\x84\x40\x52\x2f\xdb\x16\x1f\x5c\x27\x3e\x0f\xd7\xb9\xab\x80"
+ "\x69\xc2\xf5\x34\x67\x27\x44\x58\xea\xde\x06\xfb\x2c\xf5\x4f\x58"
+ "\x68\xb9\x46\x42\x0c\x1c\x4f\xb7\x6e\xfb\x8e\x02\x46\x4f\xda\x95"
+ "\x90\xac\x45\x89\x75\xf8\xd8\x66\xd8\x87\xcf\x25\x18\x49\xd8\x8c"
+ "\xf1\xa3\x25\xfd\xa1\x09\x8e\x12\x0a\xb5\xe8\xcd\x04\xeb\x18\x0f"
+ "\x7e\xf2\xe3\xe6\x27\x1d\x57\xdf\x51\x4b\x7d\x7c\x5d\xa4\x0e\x26"
+ "\xe7\xbf\x36\x71\x63\x04\x8f\x65\x5f\x5c\x3f\x94\x87\xfe\xcf\x3b"
+ "\x40\xda\x36\xa7\x49\x4f\x30\x0f\xb6\x67\xcf\x21\x78\xc8\x7e\x6d"
+ "\xb8\x65\x2e\x07\x5f\x14\x36\x67\xcf\x57\xd9\xcc\x4d\x5e\xb0\x7f"
+ "\x13\xa9\x6f\xfe\x18\xf0\x93\xaf\xc0\x4f\xeb\x59\x8c\xb1\x3c\x0b"
+ "\xb7\xd3\xb2\x9f\xcc\x35\x61\x71\x70\x0d\x4f\x73\xf6\x6b\xbf\xc0"
+ "\xf3\xdf\x7b\xbd\x98\x46\xa8\x23\xcb\x52\x3f\xd4\xed\x09\xb6\xfc"
+ "\x19\xec\xcb\xd3\xa2\x45\x6c\xdf\xb3\xa1\x8c\x96\x7e\x4d\xf2\x9b"
+ "\xb7\x19\x61\x88\xaa\x2e\xd2\x62\x6d\x87\xc7\xf2\x98\xea\x50\x3d"
+ "\xaa\x2e\x32\x23\xf3\x07\x2d\x35\x51\x19\x8c\xe6\x0a\xbd\x20\xb0"
+ "\xca\xd0\x88\xe4\x71\xbc\xf9\xec\xfb\x6f\x4c\x2b\x68\x90\xf4\x61"
+ "\x08\xcf\xf9\x37\xe8\x37\xc7\x55\xeb\x6e\xb3\x71\x0d\xfe\x1f\x8c"
+ "\x8f\xbf\x07\x9a\x05\xeb\x16\xd0\xa6\x89\x39\x14\xd1\x2e\x66\x28"
+ "\xbb\x1b\xef\xc7\xba\x06\x34\x55\xb1\xd5\x31\xe6\x03\x43\x0c\xb1"
+ "\xcd\x82\x16\x76\x9e\xc3\xed\x35\xbe\xa8\xc1\x6d\x36\x97\x18\x62"
+ "\x70\x1f\x32\xd3\x18\x73\xb5\xb1\x59\x53\xa5\x37\x21\xd5\x0a\xac"
+ "\xb9\x16\x9c\x9b\xba\x0b\x31\x10\xf7\x62\xe4\xf5\x61\x01\xfb\xfc"
+ "\x07\xe8\xd2\x1b\xba\x30\x43\x4c\xa6\x09\x51\xdb\x33\xba\x79\xfd"
+ "\xbc\x88\xd1\xdc\xe9\xd7\x52\xd3\x9c\xbd\xc0\x70\x1c\xac\x2a\x9f"
+ "\xff\x2e\x30\x58\xfa\xbe\x9b\xeb\x3b\xec\x63\xbf\xd9\x35\xa4\x30"
+ "\x8b\xed\xaf\x96\x7e\x53\x72\xad\x97\x59\x1f\xc0\x7c\x56\x64\x44"
+ "\xcb\x8a\x98\xd6\x65\xbb\x10\x65\x2a\xf0\x8f\xf8\x68\x77\x2d\x8e"
+ "\xe1\x51\x16\x7b\xb2\xb6\x03\x3d\x9e\x92\x81\x94\xd7\xe8\x37\xcf"
+ "\x4f\x4d\xcf\x62\xbf\x61\xf4\x29\x94\x93\xd7\xd6\x37\xd9\xe7\x9f"
+ "\xab\x40\xe7\x4e\x35\x66\x32\x64\x1e\x4a\xf4\x98\xc2\xd5\x87\x8f"
+ "\x59\xfc\xb7\x9b\xd3\x9f\xf2\xaf\x91\xe8\xe5\x42\x5f\x95\xe2\x7d"
+ "\x4d\x3c\xe9\x7a\x5f\x13\x73\x44\xfa\x7a\xbd\x83\xfb\x2a\xf9\xfe"
+ "\x9f\x83\xbe\xaa\xc4\xfb\x9a\xf4\xb1\xeb\x7d\x4d\x4a\xb7\xef\x6b"
+ "\xd2\xf9\x8e\xed\x6b\x92\xd6\x85\xbe\x46\x88\xf7\xf5\xad\x5d\xae"
+ "\xf7\xf5\xad\x44\xfb\xbe\xbe\x75\xb2\x63\xfb\xfa\x56\xa5\x64\x5f"
+ "\xa9\x00\x06\xc7\x27\x88\x4b\xad\x19\x2d\xc0\xdf\x0a\x9e\xd6\xae"
+ "\xdd\x83\xa8\x4a\xbd\x01\x55\x85\xd6\x62\x6e\x4c\x3d\x97\x82\x70"
+ "\x4e\xb5\x31\xcc\xbb\x35\x11\x55\x45\x4d\xb0\xff\x0a\x3a\x9d\x66"
+ "\x40\x51\x4b\x71\xfc\x7d\x3b\xb7\x3a\x41\x6e\xfc\x7d\x7b\xf6\xfd"
+ "\xf8\x6b\x1c\xc6\xc5\xdc\xe4\x63\x55\x4d\xad\x08\xf7\x1f\xfe\xdf"
+ "\x7f\x3f\xfe\xae\x27\xf6\xb6\x8d\xbf\xd8\x1e\xd5\x06\x83\x20\xfe"
+ "\x92\xf7\x98\x92\x97\xdb\xc6\xde\xec\x6b\x08\x89\xc7\xde\xe4\x69"
+ "\x38\xf6\xee\x86\xe3\xf2\xda\x9f\x1c\x6a\x89\xbd\x39\x70\x4d\xeb"
+ "\xd8\xfb\x59\x02\x9e\x37\x93\x53\x5d\x8b\xbd\xc9\xa9\x96\x7e\xef"
+ "\xe2\xfa\x0d\xb6\xaa\x15\xc6\xde\x64\xc9\x77\x3d\xad\x71\xcb\x14"
+ "\x78\xc7\x7c\xd4\xd7\xd0\xcd\x5c\xd2\x9a\x83\xe7\xb7\x66\xb0\xc9"
+ "\x5f\x76\x1b\x3c\xaf\xd0\x0b\xd9\x6f\xd5\xde\x69\x4e\xf0\x60\x4a"
+ "\x5a\x22\xa7\xa6\x32\x17\x99\xb0\xd6\x1c\xbc\x96\x88\x75\x36\x1c"
+ "\x8f\x67\xf6\xb4\x44\xca\x6b\x37\xa9\x93\xf9\xa0\xb9\x26\x03\xc6"
+ "\xcb\x47\x2b\x0c\x94\x79\x4d\x6c\x00\xf8\x41\xc9\xe4\xfb\xe5\x30"
+ "\xbf\x7d\x32\xf9\x4e\x7e\xbf\x92\x93\xea\xcb\x08\x97\x65\xd6\x79"
+ "\x8e\x71\xa3\xfd\x4d\x8e\xdb\xbf\x28\xcc\x85\xf6\x37\xc9\x68\x7f"
+ "\x93\x53\xed\xef\x05\xed\x6f\x8d\xec\x06\x9a\x8f\xfa\xb4\x35\xd2"
+ "\x53\x5e\x7b\x16\xa5\x3b\xe5\x63\xf7\xae\xe1\x74\xfc\x63\x7a\xf5"
+ "\x89\xfa\x68\xb7\x8e\x82\x18\xc0\xce\xe1\x78\xec\x91\xf8\xd7\x08"
+ "\x31\xeb\x22\x43\x62\x92\x4e\x66\x4c\x5a\x1c\xe7\xfc\xf5\xfd\xcb"
+ "\x1e\xc0\xf5\xa5\xfb\x6f\x1b\x13\x3f\xf4\x29\x93\x8c\x89\x05\x7e"
+ "\x65\xf6\x31\x31\x65\x9f\xfc\x98\x98\x92\x62\x1f\x13\x97\x9c\xe1"
+ "\x63\xe2\x92\x63\xae\xc7\xc4\x25\x9b\x9d\x8f\x89\x4b\xe6\xbb\x16"
+ "\x13\x97\x44\x38\x8e\x89\x4b\x36\xb9\x16\x13\x97\x6c\xb2\x8f\x89"
+ "\x29\x4d\xc2\x98\xb8\x44\x23\xe9\xcb\xad\x37\xd2\x60\x8e\xf6\xbd"
+ "\x46\x2f\xcd\x31\xae\x07\xdd\x9a\xf3\xa6\xd7\x54\x13\xd3\xcc\x6c"
+ "\xbb\x91\x66\xa6\x86\xe3\xb8\x12\xd5\xdc\x9c\xe8\x65\x5e\xa9\xf6"
+ "\x65\xfc\x99\x9f\x31\x6d\x21\x08\xec\xd4\x1f\xda\x1f\xc0\x34\xab"
+ "\xfd\x99\x95\xea\x9e\x45\xf7\x50\x10\x6c\x21\x45\xdc\x7c\x0c\xff"
+ "\x47\x30\x2b\x43\x14\xd9\x2b\x50\x78\x80\x1e\x79\x41\x1b\x62\x03"
+ "\xd6\x29\x11\xc4\xa0\x20\xfc\x3f\xb3\x7e\x1f\x2a\xbe\x87\x3c\x03"
+ "\xd2\xc0\x37\x81\x70\xbd\xb4\x00\x86\x59\xa6\x46\xc5\x4b\x41\x3f"
+ "\x53\x28\x64\x37\xc5\x94\x19\x9b\xd5\x94\x29\x28\x2c\x86\xf8\x67"
+ "\xd9\x04\xa6\x57\x58\x1c\x93\x17\x16\x6a\xee\x15\xe6\x69\xca\x4c"
+ "\xa4\x99\x35\xb1\x34\x6e\xab\x29\x2f\x0c\x31\x05\xb0\x65\x26\xfa"
+ "\x63\x0e\x0d\xfa\x3a\x82\x69\x0e\x51\x80\xf6\x0e\xdf\xbd\x02\xf5"
+ "\xdf\x75\x0f\xa9\x99\x3b\x6a\x0a\xfc\x1f\x8b\xbf\x05\x0a\x36\x8a"
+ "\x35\x53\xfb\x10\x1c\xf3\xc4\x31\x91\xc1\xd7\x37\xc2\xf5\xdb\xe0"
+ "\xfa\xad\x18\xdb\x28\xa4\x18\xae\x6f\x5a\xa9\x96\x39\x5e\x96\xb1"
+ "\xf9\xef\x2d\xed\x32\x87\x3f\x51\xc6\x7c\x08\x1b\x6e\x17\xd8\xb0"
+ "\x18\xdb\xe4\xb9\x27\x0e\xe1\xb6\x6d\xbb\x87\xc2\xa1\x9d\xfd\xa1"
+ "\x0d\x6a\xb8\x2e\xce\xa3\x12\x3b\x77\x89\x12\x63\x54\xd0\x36\x53"
+ "\x2e\xd7\xb6\x9b\xd0\xb6\x1b\x7c\xdb\xf0\xb5\xb0\x7d\xa4\xee\x51"
+ "\x4e\x5d\xdb\x17\x8f\xcd\xef\x02\xd2\x7a\x4c\xc2\xf7\x2b\xef\xac"
+ "\x49\x94\x89\xd5\x65\x92\xdf\xff\xdc\xfe\x21\x0a\x65\x94\xf1\x5e"
+ "\x53\x36\x5e\x64\xa6\x1a\x11\xda\xf8\x21\x0a\xaf\x86\x71\x5d\x65"
+ "\xb8\x8e\x98\xc0\x78\xaf\x93\xea\x26\x99\xd7\x4a\x9d\x24\x75\xad"
+ "\x2d\xeb\x99\x9a\x36\x15\x5e\xef\xea\x57\xb8\x9d\x62\xd2\x5a\x55"
+ "\x2d\x51\x9f\x9f\x6d\x45\xaf\xa7\xe1\x7b\xa2\x4c\x9a\xea\x35\xe4"
+ "\x55\x4f\xaf\x36\x66\x9e\xc7\xf7\x7c\x52\x2b\x85\xf7\x7c\x52\x75"
+ "\x88\x5e\x91\x87\xe8\x95\x27\x10\xbd\x2a\x1a\x41\x39\x9b\x6d\xc3"
+ "\xd4\xfd\x7d\x51\x86\x91\xf9\x8e\xc9\x39\x93\x98\x4d\x31\x86\xa9"
+ "\x03\x3d\xb4\x9a\x15\xf8\x1e\xc9\x8a\x6d\x60\xbf\xef\x61\x5e\x0d"
+ "\xc0\xff\xe3\xfa\x52\x96\xa2\x27\xae\xd1\x2b\xb6\x06\xe8\x7b\x4c"
+ "\x32\x06\xf5\xd3\x18\x99\x58\xd4\xa6\x1a\x59\xd2\x92\x17\x16\xd1"
+ "\x86\xd7\xe3\xe6\xe1\x18\xb4\x7c\x63\x80\x47\x16\x62\xc0\xff\x0c"
+ "\x13\x82\xef\xe9\xc5\x16\xc1\x86\x7d\xc9\xfa\xb1\xa7\xa7\x0e\xfb"
+ "\x1b\x8f\x85\x62\xb2\x5f\x89\xc7\xc3\x76\x6e\xdc\xe8\xe8\x41\x71"
+ "\x26\x0a\x21\x13\x9c\x9f\x79\x19\x85\xe2\x6f\xc0\xee\x82\x72\xaf"
+ "\x9b\xbc\xf0\x38\x8e\xd5\xbc\xf6\x05\xba\x92\x82\xa8\xcc\x5b\xc8"
+ "\x0f\x30\xc1\x8e\x47\x33\x8c\xc7\xa9\x75\x01\x06\x88\x2b\xe6\x8c"
+ "\xbb\x28\x00\xc7\x29\xfc\x3d\x95\xea\x26\x2d\x32\xdf\x54\xfb\xef"
+ "\x5c\x84\x82\x8c\x37\x13\x7b\xea\x6e\x26\x3e\xb1\xc3\x8c\x82\xfc"
+ "\x53\x90\x72\xd7\x22\xc0\xe2\x62\x18\x9f\x37\x60\x7c\x36\x91\xf1"
+ "\x69\xc1\x1f\xb3\x65\x57\x38\x7e\xcf\x9d\x1d\x9b\xb9\xdc\xd8\x5c"
+ "\xa9\xc6\x6b\x5c\xf7\xf1\x67\x5c\xac\xa6\x76\x51\x0c\x82\x36\x82"
+ "\xdd\x97\x1d\x2d\xce\xe8\xe1\x85\xd7\x24\x99\x7e\x6d\x11\x78\x7d"
+ "\x6f\xaa\x91\x31\x7e\x04\xbe\xe8\x36\x90\x52\x31\xf9\xfd\x34\x9f"
+ "\xc7\x34\x22\x7e\x5d\x64\xb5\xa9\x35\xac\x25\x4a\xf5\x0a\x73\xb3"
+ "\x9e\x5e\xb1\x01\xf6\x7b\xa9\x5e\xfd\x89\x12\xfc\x68\x22\xeb\x24"
+ "\xab\x8d\x78\x8d\x54\x4b\xaf\x88\x85\xba\x10\xbe\x4f\xfe\x2f\xf6"
+ "\xbe\xd6\xca\xa3\x50\x16\x99\xc0\xe6\x46\x65\x4d\xb9\x39\x28\x2c"
+ "\x4e\xf3\x56\x2b\x1b\xaf\xda\xc0\x07\x57\x92\x11\xf5\x7a\x13\xd8"
+ "\xc6\x04\xb6\x69\x56\xfb\x42\xdc\x8a\xc1\x71\x8b\xd9\xca\x44\xa6"
+ "\x6b\x19\xf3\xd4\x04\x9a\x01\xbb\x78\x55\xa7\x99\xd0\xdc\x14\xc4"
+ "\xac\xbd\x0e\x36\xd2\xd7\x22\xe8\x9b\x3f\xc4\xb6\x9e\xbb\x56\xa0"
+ "\xa0\x9d\x60\x1f\xbf\x26\xe0\x34\xef\xbe\x81\x3e\xcc\xa8\xe8\x66"
+ "\x02\x9c\xe3\x38\x16\xb0\xce\xc3\x1b\x7c\xe5\xbf\x15\x8f\x5b\x18"
+ "\xc7\x01\xeb\xd8\xb8\xca\xfa\xd6\xb8\x52\xdd\xaf\x6d\xa5\x5a\x05"
+ "\x5b\x5f\x4b\xac\xb3\xc4\x19\x26\x3b\xb5\x3f\x8e\x73\xd5\x69\x5a"
+ "\x64\x04\x5b\xfa\xe3\x39\x71\xa5\x3a\x94\xb5\xe9\x9b\x60\xd3\x05"
+ "\xc8\x6b\x88\x01\x79\x40\xbb\x94\xd0\x66\x74\x3a\xb1\x1e\xc7\xd6"
+ "\x10\x13\x8c\x23\x6c\x67\xa8\x93\x62\x00\x6b\xe6\x9c\x9a\xf2\xc9"
+ "\x49\x2a\x74\x52\x7d\x0e\xe1\x5c\xaa\x99\x2d\xcc\x25\x7c\x5f\xad"
+ "\x3a\xcd\x88\x98\xe0\x7e\x1a\xb2\x26\xbe\x62\xf6\xe7\x31\x06\x24"
+ "\x8d\xe9\x55\x13\x79\x4c\xaf\x9a\xc8\x63\x7a\x15\xfb\x0c\xb6\x35"
+ "\xae\x5b\x4a\x00\xd7\x41\xd6\xb8\x4e\x9b\xf3\x40\x71\x3d\x45\x3e"
+ "\xae\x77\xdc\xb0\xc2\x75\xc6\x0f\x83\xeb\x7f\xc5\xb2\xb8\xa6\xdb"
+ "\xc2\x58\xbc\xc6\x55\x1b\xff\x04\xfc\x77\x55\x84\x05\xb7\xa7\xfe"
+ "\x80\x71\xbb\x3a\xb5\xab\xe2\xb6\xa5\x59\xad\x82\xad\xc3\x71\x0b"
+ "\x75\x3a\x8d\xdb\x7f\xc5\xb6\x22\x8b\xfd\x30\x7e\x99\x9c\x78\x2f"
+ "\x55\x26\x7a\x01\xec\x66\x0c\x58\xd7\x17\x9d\x26\x36\x34\xaa\x5e"
+ "\x65\xcc\x10\x23\x0e\xb2\xf7\x86\xd7\x33\x8c\x39\x28\x34\x26\xf3"
+ "\x0c\x52\x9a\x73\xce\x47\x54\x1b\x0f\xa2\x80\x14\xbc\x76\x5f\x13"
+ "\xc2\x04\x66\xd6\x80\x0e\x0f\x21\xf7\x56\xe2\xa3\x4c\xb9\xf3\x74"
+ "\x26\x88\x27\xa6\xfc\x70\x64\xce\x8d\xd2\x9a\x03\x57\xa9\x18\xfc"
+ "\x2c\x41\xe0\x3c\x65\x73\xf6\x6a\xa3\xe5\x1e\xb8\x28\x37\x0a\x0a"
+ "\xc7\x6b\x9f\xa0\xa9\xd2\x97\xc3\x5f\xea\x0a\xbd\x26\x1f\xfe\xd2"
+ "\xf0\x77\x3e\xab\xb1\x64\xcd\x73\x6b\x22\xc8\xbd\xa4\x7e\x67\x49"
+ "\x1c\x5c\xc3\x3e\x4b\x92\x32\x08\xf9\x5d\xe3\xfe\x6f\xce\x5e\xb3"
+ "\xd5\x72\x4f\xfd\x7e\xf9\xfb\xf6\x58\xa3\xc6\xd7\x06\x9b\x78\x92"
+ "\xfb\xfc\xe4\x37\x7e\xde\x85\xab\x8f\xfd\x6d\xee\xef\x13\xa9\xc9"
+ "\xa8\x47\x4d\xf4\x1a\x43\x35\xcc\xfd\xe6\x82\x7e\x67\xb7\xdf\x03"
+ "\x3c\xa6\x59\xe2\xef\x9a\xa1\xfe\xe0\x6f\xcd\x6a\xb6\xcc\x79\x96"
+ "\x1f\xe7\xf5\xd6\x30\xef\x9e\x89\xc0\x1a\xb2\x99\x49\xfc\x19\xf7"
+ "\x77\x2c\xc6\x36\x59\x6f\x49\x9f\xc8\x80\xfd\xf0\x37\xd0\xef\x3f"
+ "\x03\x84\xbf\x4d\x9e\xe5\x19\x7a\x3c\x9d\xcc\xb7\x96\xf6\xe2\xef"
+ "\x97\xe3\x67\x6c\x7e\x92\x85\xb2\x9a\x45\xbe\x5f\xce\x3f\x8b\x93"
+ "\x1e\x61\xce\xef\xad\x69\xce\x4e\xcf\x02\x0e\xb0\xc9\xba\xcf\x62"
+ "\xbe\x80\xf2\x45\x52\xc7\xe4\xf9\x21\x5d\xf2\xfb\xcf\x13\xd5\x26"
+ "\x46\x5e\x5d\x6b\x25\x9f\x7f\x64\x54\xcd\x35\x53\x4b\x4d\x1a\x73"
+ "\x5b\x6c\xc0\xc9\xf4\xeb\x32\x39\xd1\x5a\xc9\xe7\xdf\x4d\x79\xa1"
+ "\x89\xc6\x7e\x50\xf7\xc0\xbe\xc8\xb4\x38\xf6\x45\x7c\x6f\x03\x73"
+ "\xbd\xb5\x49\xe4\xb9\xad\xca\x52\x23\xc2\xbc\x6f\xff\xa2\x0a\xaa"
+ "\xb5\x2d\x16\xf9\xeb\x90\x72\x8a\x3e\x93\xd9\x7e\x03\xf5\x67\x56"
+ "\xc6\x06\x6c\xbd\x81\xc6\xb4\xdd\x09\x51\xbc\xb3\x14\x79\xb6\x42"
+ "\x4c\x6e\x5d\x96\x18\x80\x9f\x11\xfb\xe4\x9a\x86\xaa\x36\x96\x63"
+ "\x9e\xd9\x1f\xcf\x03\xb8\xed\xa6\x3b\xb1\xfe\x9b\x6f\x23\xf6\x7e"
+ "\xb1\x66\xde\x07\x30\x0f\x64\x24\x75\x5b\x0b\xb1\x0f\x62\x17\x3b"
+ "\x1f\xb8\x30\x17\xb4\xc2\x5c\x30\x39\x96\x31\x54\xd5\x7e\x81\x32"
+ "\xaf\x23\x65\xe6\x72\xe4\x87\xeb\xaf\x36\x1e\x23\xf3\xc3\x0c\x98"
+ "\x1f\xe0\x37\x68\x89\xfb\xf3\x83\x6a\x0a\xb2\x9b\x1f\xb0\x0e\xa9"
+ "\xaa\x6b\x44\x80\xe5\x1e\x53\xf4\x01\x86\x0c\x3d\x63\xc6\x9a\x04"
+ "\xdf\x9b\x86\x32\xfe\x96\xb9\x02\xcf\x13\xad\xdc\x3c\xb1\x8b\x9b"
+ "\x27\xde\xef\x80\x79\xe2\x7d\x3c\x4f\x9c\x43\xd4\x0e\x3c\x47\xc0"
+ "\xfc\xf0\xc7\x6f\x74\x54\x1b\xcc\x09\xf2\xfc\x9c\x29\xf9\xfe\x3b"
+ "\x53\xd0\xef\x77\x66\x98\x8b\xb1\x9f\xd7\x80\x7f\xb1\x9f\xab\xd5"
+ "\xe0\xdb\xda\x1e\x93\x5a\x60\xbf\xb1\xc0\x3b\xa5\xf4\x8a\x8e\x62"
+ "\xf2\xfc\x72\x5a\x00\x0f\xab\xef\x22\xca\x18\x14\x9a\x78\xf0\xd5"
+ "\x1c\x0a\xeb\x56\x73\xbe\xf7\x21\xa2\x91\xd7\x1d\xc1\x6b\x34\x01"
+ "\x8d\x48\x89\xd7\x4f\x4d\x4c\x6c\x80\xf9\xfb\x58\x3f\xf3\xdb\x21"
+ "\x5e\x6d\xdf\x87\x28\xb6\xbc\x85\x3c\x75\x6f\x27\x06\x64\xce\x44"
+ "\xca\x4f\xbf\xcc\xa1\xaa\xf4\x30\xb6\xbb\x9f\xac\x60\xa0\xfe\xe2"
+ "\x7a\x14\x59\x3c\x0f\x0d\xdf\x7d\x05\xa9\x76\x2f\x40\xe1\x3b\xaf"
+ "\x00\x86\xde\x8e\xf5\x6f\x63\xf1\xd1\xa2\x61\xef\xf5\x2f\x40\x51"
+ "\x4c\x2f\xdf\x14\xf8\x1b\x99\xb3\x00\xe1\x3c\x7e\x29\x4c\x70\x68"
+ "\xa2\x19\xca\x6d\x05\xed\x06\x1c\x1d\xda\x90\xb5\x47\x0c\x37\x3b"
+ "\x65\x72\x88\xc9\x31\x80\x9b\x1a\xc0\xcd\x2d\x21\x6e\xb0\x6e\x65"
+ "\xb1\x33\x99\x60\x07\xdf\xcb\x2b\xb6\xe6\x17\xf3\x3e\x77\x19\x3f"
+ "\x45\xc0\x9f\x5b\x6c\xf0\x53\x74\xc3\x3d\xfc\xb4\x01\x7e\x8a\xd6"
+ "\x03\x7e\x4e\x23\xaa\xd0\xec\x0e\x7e\xd6\xb1\xf9\x3f\xf1\x3a\x1f"
+ "\x79\x06\x28\xf3\x12\xf6\x33\xe0\x4a\x3b\x43\xed\x81\x5c\xc4\x95"
+ "\xce\x31\xae\x14\xc3\x09\xae\x36\x04\xca\xc7\xd5\x3f\x54\x80\x2b"
+ "\x9d\x63\x5c\xdd\x95\xc2\x95\xce\x1e\x57\xeb\x5b\x3a\x17\x57\x6c"
+ "\xee\xcc\xff\x03\xb8\xfa\x4d\x9d\x10\x57\xeb\x47\x11\x5c\xad\x8f"
+ "\x74\x1d\x57\x8a\x76\xe2\x95\x82\x8b\x57\xbf\x4d\x72\x01\x57\x69"
+ "\x0c\xd4\xef\x18\x57\xd7\x25\x70\xa5\x10\x89\x57\x1b\xa7\x75\x2e"
+ "\xae\xd8\xdc\x9e\xff\x07\x70\xf5\xdb\xe1\x42\x5c\x6d\xc8\x25\xb8"
+ "\xda\x90\xe3\x06\xae\xda\x89\x57\x3e\x5c\xbc\xda\x74\xdc\x05\x5c"
+ "\xd5\x00\xae\xda\x89\x57\x17\xa4\x70\x25\x12\xaf\xfe\x7b\x7f\xe7"
+ "\xe2\x8a\xcd\x3d\xfa\x7f\x00\x57\x9b\xb6\x0a\x71\xf5\xdb\xab\x04"
+ "\x57\xbf\x6d\x74\x1d\x57\x3e\xed\xc4\x2b\x1f\x2e\x5e\xbd\xd3\x5b"
+ "\x3e\xae\xfe\xa9\x66\xa0\x7e\xc7\xb8\x3a\x26\x81\x2b\x1f\x91\x78"
+ "\xb5\xc5\xa3\x73\x71\xc5\xe6\x46\xfd\x3f\x80\xab\x2d\x0d\x42\x5c"
+ "\x6d\x1e\x47\x70\xb5\x39\xca\x0d\x5c\xb5\x13\xaf\x7c\xb9\x78\xb5"
+ "\x6d\x89\x0b\xb8\xca\x02\x5c\xb5\x13\xaf\xd6\x4a\xe1\x4a\x24\x5e"
+ "\x6d\x9d\xd9\xb9\xb8\x62\x73\xb7\xfe\x1f\xc0\xd5\xb6\x31\x42\x5c"
+ "\xbd\xb3\x83\xe0\xea\x9d\x42\xa7\x70\x65\xb0\xc2\x55\x5d\x8f\x49"
+ "\xad\x99\x44\x0f\xee\x5f\xc0\xe1\xea\x83\xe6\x9a\x35\xcb\x11\x75"
+ "\xf0\xb5\x42\x1b\x2d\xb8\xfd\x98\x2d\xa6\x00\x17\x2c\xa6\x8c\x6f"
+ "\x03\xa6\xae\x11\x4c\x65\x5c\x00\x4c\x7d\x55\x48\x55\xa7\x5d\xc7"
+ "\x38\x61\x31\x54\xb4\x00\x30\x84\x75\xa1\x87\x67\x90\x1c\x0d\xf8"
+ "\xce\x35\x0b\x96\xb2\xf7\x75\x08\x96\xa6\x03\x96\xce\xda\x62\xe9"
+ "\x24\x8f\xa5\x69\x12\x1a\x70\xae\x04\x96\xb4\xed\x63\x69\x27\x5e"
+ "\x43\x58\xfc\x80\xb0\x74\x86\x5f\x43\x38\x30\x4f\x47\x19\x83\xe5"
+ "\x62\x69\xfb\x26\x21\x96\xb6\x5d\x27\x58\xda\xd6\xe4\x3a\x96\x14"
+ "\x3a\x69\x2c\x59\xf8\xd4\xbb\xde\xee\x61\x09\xb8\x95\x00\x4b\xed"
+ "\xf3\x28\x1e\x4b\x39\xb7\x3a\x17\x4b\x36\x3c\xea\x91\xc5\x52\xee"
+ "\x59\x21\x96\x72\x38\xdd\x97\x23\xa9\xfb\xcc\x30\x77\xe1\x7b\x4e"
+ "\xf8\x3d\x58\xd3\x9d\xd8\x17\x4d\x30\xa7\xe1\xf7\x61\xf1\x7d\x8a"
+ "\x8f\x16\xd5\x50\x18\x4f\xd9\xb7\x51\xff\xad\x4b\xd1\x98\x00\x03"
+ "\xc1\x8a\x11\xb0\xb2\xe9\x36\xf2\x6c\x6b\x03\x9c\xb4\x22\xcf\x16"
+ "\xb0\x77\x4b\x5b\x62\x40\x65\x5c\x23\xfa\xf4\x46\x0d\xcc\x65\xe5"
+ "\x68\x37\x9c\xd3\xc6\xad\x43\x9a\xd7\xc4\xfa\x6f\x5e\x8d\xd7\x21"
+ "\x4f\x23\xcd\x6b\xef\x63\xec\xb9\xed\xff\x96\xdf\x48\xf9\xff\x98"
+ "\xc0\xf7\x45\x56\x7e\x57\xbd\xec\xfa\x3a\x24\x7b\x9f\x6a\x11\xf1"
+ "\xbd\xc5\xef\x3b\x3a\xc0\xef\x3b\x38\xbf\xbb\x37\x1f\xbd\x27\xfd"
+ "\xfc\xa3\x55\xac\x60\x9f\x29\x30\x90\x18\x61\x89\x0b\x38\x46\x60"
+ "\xfe\xd2\x12\xe4\x9d\x6a\x3b\xdf\xe0\xf8\x70\x83\x2e\x18\x85\xe7"
+ "\x26\x49\x1e\xc3\xc5\x89\xcc\x55\x24\x4e\x70\x3c\xa6\xb6\x63\xd7"
+ "\x1f\xf3\xc3\x1e\x5c\xbc\x38\xd6\xfe\xdc\xe3\x06\x8f\xc1\xb8\x29"
+ "\xb2\xc1\xcd\x83\x88\x17\xae\xe1\xa6\xc0\x53\x18\x2f\xf2\xe2\x49"
+ "\xbc\xc8\x8b\x73\x66\xee\x69\x07\x4f\x7a\x1e\x4f\x64\xcd\x91\xe0"
+ "\xa9\x70\x33\x5e\xa3\x94\x87\xa7\x8a\xf0\x8e\x5d\x77\xfc\x9f\x25"
+ "\x9d\x8b\xa7\x8e\x5b\x77\xec\xda\x78\x2a\x9c\x2e\xc4\x53\xc1\xc7"
+ "\x04\x4f\x05\x65\xee\xe3\x49\x61\x15\x9f\x14\x56\xf1\xe9\xfd\xf3"
+ "\x78\x6d\x52\x26\x9e\xb2\x3a\x76\xbd\x71\xc7\xf1\xce\xc5\x53\xc7"
+ "\xad\x37\x76\x6d\x3c\xbd\xbf\x57\x88\xa7\x1d\x1e\x04\x4f\x3b\x50"
+ "\x07\xe0\x49\x6f\xcb\x89\x09\x9e\x76\x0d\xc4\xfc\x59\x26\x9e\xce"
+ "\x76\xec\x3a\x63\x51\x60\xe7\xe2\xa9\xe3\xd6\x19\xbb\x36\x9e\x8a"
+ "\xf4\x42\x3c\xed\x9c\x46\xf0\xb4\x33\xc6\x7d\x3c\xf9\x58\xc5\x27"
+ "\x1f\xab\xf8\x54\xbc\x0a\xaf\x45\xca\xc3\xd3\xa9\x0e\x5e\x5f\xdc"
+ "\x1d\xdf\xb9\x78\xea\xb8\xf5\xc5\xae\x8d\xa7\xe2\x09\x42\x3c\xed"
+ "\xda\x43\xf0\xb4\xab\xa4\x03\xf0\x64\x15\x9f\x7c\xad\xe2\xd3\x9e"
+ "\x53\x78\x0d\x52\x26\x9e\xd2\x3b\x76\x5d\xb1\xe4\xe3\xce\xc5\x53"
+ "\xc7\xad\x2b\x76\x6d\x3c\xed\xc9\x13\xe2\xa9\xf8\x16\xc1\x53\xb1"
+ "\xce\xd9\xb5\x20\xcb\x1a\x90\x35\x9e\xa4\xb5\xdd\x5e\x3f\x5b\x6d"
+ "\x27\x6f\x0d\x08\x74\x9e\xcb\xeb\x89\x1f\xdc\x7d\x58\xd7\x13\x31"
+ "\x86\x2c\xeb\x40\x5d\x6f\x0d\xe8\x77\xb5\x42\x0c\x7d\x30\x96\x60"
+ "\xe8\x83\x31\x52\x18\x32\x5a\x3f\x93\xf6\x9d\xd5\x33\x69\xd7\x11"
+ "\x75\x70\x91\x86\xaa\xe2\x9e\x49\xc3\xcf\xa3\x55\x35\x34\xa2\xcd"
+ "\xf7\x90\xd2\x3f\x11\x29\xa7\xa4\x64\x32\xdb\x71\x0c\x59\x16\x1b"
+ "\xf0\xce\x15\x34\xa6\x0d\x30\x93\x7d\x8d\x7b\x2e\x0d\x70\xf3\xaf"
+ "\x3a\x03\xfa\x64\x11\x7e\x2e\xad\x0c\x15\x43\x39\x63\x1e\x59\x0f"
+ "\xc2\x71\x84\x7d\x26\x6d\x01\x7e\x26\x6d\xaf\x49\xf4\x99\xb4\xf5"
+ "\x32\x9f\x49\x4b\x05\x1c\xe8\x01\x07\x77\x31\x06\x0e\x0b\x9e\x45"
+ "\xdb\xb9\xde\x6a\x0d\x68\x9e\xc4\x1a\x50\xad\x73\xf7\x24\x3a\xfc"
+ "\x59\xb4\x9b\x56\xcf\xa2\x59\xd6\x80\x5e\x83\xd8\x21\xdb\xef\xfb"
+ "\x24\xbf\xff\x8c\x63\x84\x09\x62\xc2\x14\xfc\x6c\xb9\x9e\x5f\x2f"
+ "\x4e\x4f\xc2\xef\xfe\x7a\xa7\x18\x21\x56\xe0\xe7\xc7\x3f\x9c\x57"
+ "\xc1\xae\xf7\x55\xa7\xd5\xa2\xcd\xad\x48\x19\xa0\xe3\xe2\x42\xb0"
+ "\xf7\xa1\x36\x88\x0d\x26\x98\x97\xc0\xd7\x7e\x6d\xcb\x20\x36\xdc"
+ "\x86\xd8\xb0\x0c\x62\xc3\x5d\x88\x0d\xf5\x15\x6c\x6c\x60\x7e\x7b"
+ "\xb2\x02\xe7\xc0\x2e\xbe\x86\x86\xef\xba\x86\x22\x71\x0c\x30\xe5"
+ "\x87\x26\xb6\x05\x7b\xe7\xe9\x82\xbd\x0b\xe1\x58\x29\xc1\x40\x8b"
+ "\x66\xeb\x52\xc4\xc6\x7a\xec\x7b\xd5\x02\x1c\x0f\x7e\xdf\xad\x0d"
+ "\xc6\xac\x3b\x38\x68\xb3\x5e\x13\xb4\xc6\x81\x44\x0c\x70\x1b\x0b"
+ "\x36\xeb\xc0\x3b\xdd\x8c\x01\x18\x0b\x3b\x2d\x31\xc0\x2d\x2c\xfc"
+ "\x5e\xf2\xfd\x9f\x76\xb0\xa0\x6b\x1f\x0b\x8a\xe1\xce\x61\xe1\x1f"
+ "\x2a\x9c\x3b\xda\x1e\x0b\x8a\x20\x5d\xb0\x22\x04\x8e\xa9\x09\x16"
+ "\xee\x8a\x60\x61\x7f\xe0\x83\xc7\x82\x70\x4d\xe6\xd1\xc5\xc2\xfe"
+ "\x46\xd7\xb0\xa0\x70\x22\x2e\x28\x9c\x8c\x0b\xff\x48\xc3\x39\x97"
+ "\x45\xb0\x00\x71\x41\x01\x71\x41\xc1\xc5\x85\xeb\x22\x58\xf8\xe3"
+ "\x53\x0f\x1e\x0b\xc2\xf5\x94\x47\x17\x0b\x7f\x94\xce\x7f\xe1\x18"
+ "\x0b\x4e\xc4\x05\x1f\x67\xe3\x42\x0d\xce\x55\x6c\x8f\x05\x1f\x88"
+ "\x0b\x3e\x10\x17\x7c\xb8\xb8\x70\x41\x04\x0b\x07\x07\x3e\x78\x2c"
+ "\x08\xd7\x42\x1e\x5d\x2c\x7c\x88\x5c\xc3\x82\x8f\x13\x71\xc1\xc7"
+ "\xc9\xb8\xf0\x4f\x35\xce\xf1\x2b\x82\x05\x88\x0b\x3e\x10\x17\x7c"
+ "\xb8\xb8\x70\x4c\x04\x0b\x1f\x8d\x78\xf0\x58\x10\xae\x63\x3c\xba"
+ "\x58\x28\xf3\x75\x11\x0b\x4e\xc4\x05\x5f\x27\xe3\xc2\x3f\xb3\x70"
+ "\x6e\x5c\x7b\x2c\xf8\x42\x5c\xf0\x85\xb8\xe0\xcb\xc5\x85\xb5\x22"
+ "\x58\xf8\x78\xdc\x83\xc7\x82\x70\x0d\xe2\xd1\xc5\xc2\x9f\x42\x1c"
+ "\x62\x81\xb1\xc7\x02\x5e\x43\xc0\xfa\x11\xe7\x9e\x66\xb1\xf0\x96"
+ "\x86\x6a\x65\x30\x16\x2a\xd0\x96\xd5\x56\x58\xc8\x27\x3a\xc2\x82"
+ "\x83\x6d\xd6\x38\xc0\xef\x2f\x61\x1c\x80\x7e\x30\x82\xdf\x99\x02"
+ "\xdf\x14\xf6\x79\xa5\x7c\xef\x52\xac\x1f\xf0\x3a\x03\xd6\x10\xd2"
+ "\xfa\xe1\xff\x4d\xec\x10\x0c\x24\x03\x06\x9a\xc4\x75\x64\x87\xeb"
+ "\x87\x9b\x0f\x08\x03\xa0\x25\xdf\xcf\x70\x07\x03\x87\x24\xbf\xff"
+ "\x2e\x8d\x01\xe0\x08\x4e\x61\x80\xf0\x04\xc7\x18\xf0\x51\xf2\x18"
+ "\x00\xbe\x90\xef\xa3\xc6\xfc\x80\x60\xc0\x27\x44\x9a\x1f\x1c\x7e"
+ "\xe9\xc1\x63\xa0\x83\xf9\x41\x97\xc5\xc0\x9f\x55\x92\xef\x30\xe2"
+ "\x58\x0e\x71\x7f\xca\xc0\xbe\x88\x79\x3b\xf6\xc5\xec\x6b\xa8\xff"
+ "\x3b\x6f\xa1\x31\x38\x6f\xcc\xc1\x56\x03\x95\x91\xc2\x7c\x87\xdf"
+ "\xad\x36\x42\x3f\x70\x7e\x50\x16\x1f\x37\x43\xbc\xaa\x13\x75\x68"
+ "\x33\x60\xe1\x1d\xe8\x03\xce\xd3\xee\x9f\xd2\x63\x52\x95\xfe\x73"
+ "\xd4\x7a\x27\x16\x55\xc6\x5d\x43\x53\xd5\x4c\x5b\x75\x9d\x06\xbf"
+ "\xc3\xe8\xa9\x59\xf1\x39\x7e\x4f\x5c\xf1\x7a\x1a\xa2\x6e\xd0\x7f"
+ "\x6e\xc0\x6b\x4a\x43\xd2\x90\xb2\xe8\x1a\x59\x47\xda\x7c\x03\xa1"
+ "\x93\x69\x08\x11\xbf\xff\x65\x5c\xb7\x55\x1d\xb0\x86\x34\x1b\xfc"
+ "\x5e\x67\xf1\xfb\x49\xe1\x1a\x12\xe5\xc4\xfb\x8c\x4e\xac\x1d\x3e"
+ "\x90\xf7\x19\x6f\xda\xbf\xcf\xe8\xda\xda\x61\xb9\xe4\xf7\x4f\xd9"
+ "\x75\x66\x8e\x07\xac\x49\x65\xc7\x3d\xeb\xd7\x36\x88\xfd\xd5\x69"
+ "\xe5\xec\xf3\xd1\x78\x9c\xe3\x31\x8f\xf1\x91\xb9\x04\xe7\xda\x6e"
+ "\xae\xc1\x78\x98\x52\xda\xd6\x36\x57\x8f\x28\x73\xb0\xf7\x21\x8c"
+ "\x09\xf3\xe2\x10\xaf\xad\xd0\xa7\xea\xb8\x7a\xf0\xfb\x6d\x54\xdd"
+ "\xc0\xf9\x7c\x75\x3d\xf8\xb2\xbc\x86\x59\xac\x56\x3c\xa7\x47\xca"
+ "\xcc\xf3\x48\xf9\x3a\x7e\xe7\x18\xe6\x81\x9d\xc0\x09\x8a\xdf\x42"
+ "\xc3\x61\x3e\xc8\x69\xe3\x62\x83\xd9\xb2\xae\x84\xe7\x08\xc0\xc4"
+ "\x3b\x8b\x00\x13\xa9\x80\x89\xb9\x18\x13\x47\x66\x74\x5b\x2e\xb2"
+ "\xbe\x2c\x03\x13\xec\xfa\x72\x02\x60\xa2\x81\xc7\xc4\xfd\x75\x65"
+ "\x89\x39\x41\xf3\x9a\x1b\xcf\x16\x8a\xc4\x03\xb7\xd7\x95\x6f\x72"
+ "\xeb\xca\x56\xf1\xc0\x35\x6c\xfc\x55\x3a\x27\xa6\x34\x36\x74\xed"
+ "\x63\xa3\x99\xc3\x86\x62\x78\xfb\xd8\xf8\x6b\x93\x3d\x36\xfe\xa1"
+ "\xe2\xb1\xa1\x50\xf2\xd8\xe0\xd6\x99\xf2\x15\x6a\x7b\x6c\xfc\x6d"
+ "\x49\xe7\x60\xc3\xe6\xb9\x9f\x47\x16\x1b\x47\xa3\xe5\x63\x43\xe1"
+ "\x44\xdc\xb8\x69\xc1\x86\x13\x71\xe3\x98\x97\x08\x36\xd2\xac\xb0"
+ "\x61\x15\x37\xb8\x75\xa7\x7c\x85\x48\xdc\x38\xb6\xad\x73\xb0\x61"
+ "\xf3\x0c\xcf\x23\x8b\x8d\x4f\x12\x5d\xc0\x86\x13\x71\xe3\x22\x87"
+ "\x0d\x1f\x27\xe2\xc6\xa7\xfd\x45\xb0\x51\xc3\x63\xc3\xc7\x2a\x6e"
+ "\x70\xeb\x50\x98\x73\xda\x61\xe3\xd3\xfd\x9d\x83\x0d\x9b\xe7\x71"
+ "\x1e\x59\x6c\x68\x36\xc8\xc7\x86\x8f\x13\x71\xe3\x53\x0b\x36\x9c"
+ "\x88\x1b\xc7\xa3\xec\xb1\xf1\x4f\xb5\x15\x36\xac\xe2\x06\xb7\x2e"
+ "\x95\xef\x23\x12\x37\x8e\x9f\xec\x1c\x6c\xd8\x3c\x5b\xf3\xc8\x62"
+ "\xe3\xef\x25\x2e\x60\xc3\x89\xb8\x91\xc9\x61\xc3\xd7\x89\xb8\xf1"
+ "\xd9\x6c\x11\x6c\x64\xf1\xd8\xf0\xb5\x8a\x1b\xdc\x3a\x55\xbe\xaf"
+ "\x48\xdc\xf8\xec\x52\xe7\x60\xc3\xe6\x39\x99\x47\x16\x1b\x27\x8e"
+ "\x3a\x83\x8d\x74\xbd\x88\x4e\x69\x20\xd8\x68\x83\x32\xd6\xb8\xb0"
+ "\xd6\x26\xd0\x3f\xcf\xa9\xa0\x59\x30\x26\xe6\xa4\x23\x8a\xc5\x85"
+ "\xde\x1a\x17\x27\x53\x31\x2e\x06\x27\x02\x2e\x2e\x73\xb8\xb0\xe8"
+ "\x12\x36\xf7\x0a\xd1\x26\x96\x35\x2b\x8b\x3e\xd9\x82\x35\x6b\xa2"
+ "\x05\x13\x27\xef\x76\x4b\xea\x00\x4c\x08\x9e\x7b\xb0\xc2\xc4\x4c"
+ "\x09\x7d\xf2\xaa\xeb\x98\x78\x1f\xb4\x6b\x5b\x47\xbf\xfb\x64\xc1"
+ "\xc4\x79\x77\x31\xf1\x0f\x87\xcf\x3f\x88\x63\x82\xe3\x19\x92\x98"
+ "\xe0\xb9\x05\xc1\xc4\x45\x07\x98\xf8\xe7\x26\x7b\x4c\x70\xbc\x82"
+ "\xcd\x43\x40\xb8\x85\x65\x0d\xcb\xc2\x2f\x84\x98\xa8\xf0\xee\x1c"
+ "\x4c\xd8\xf0\x8b\x47\x16\x13\x15\x0d\x92\x6b\x58\xeb\x11\xb5\x6b"
+ "\xbd\xb9\x2c\x87\x32\x97\xc3\xa6\x81\xad\x02\xf6\x75\x83\x7d\x2c"
+ "\x8e\xe0\x37\x7b\xcc\xac\x60\x73\x0f\x6b\x02\x3c\xe2\xb0\xbd\x71"
+ "\x99\xee\x96\x32\x01\xeb\x50\x54\x31\x57\x07\xec\xcf\x82\xfd\x1a"
+ "\x7f\x8f\xa8\xee\x50\xbe\x82\xc9\x4e\xc7\xfb\x7a\xe0\xb2\xcc\x3a"
+ "\x4f\x76\x4d\x9d\xa1\x28\x5c\x87\xed\x35\xbd\xb8\x32\xa1\xd6\xd7"
+ "\xf5\x5b\x17\x85\x73\xf9\x59\xca\x78\x9b\xa9\x7a\xfc\xbb\xc6\xec"
+ "\xe1\xa9\x32\xaf\x47\x2a\xeb\xb2\xcc\x78\x84\xeb\xb5\x94\x55\x70"
+ "\xf5\xf5\xb7\x2e\x63\xfa\x00\x21\x7f\x0f\x15\x5b\xa7\x7f\x0a\x85"
+ "\xfb\x84\xcb\xfa\x30\xfe\x6b\x94\x6c\x79\x0f\x4f\xb5\xa0\xfc\x6f"
+ "\x11\x5b\x96\x2b\xe7\xcb\x74\xff\x5c\xc3\x95\x63\x73\xa1\xc3\x3e"
+ "\x4f\x6b\xfb\x71\xe5\xfc\x2c\xb6\xc1\xf9\xfb\xac\xfb\x6a\x5a\x4f"
+ "\xe1\xfa\x70\x19\x7f\x73\xf7\x53\x35\x5c\x5f\x86\x5b\x5f\x13\x97"
+ "\x83\xf3\x86\x72\x76\x0e\x80\x3e\x44\xde\xaf\x2f\xe7\x4c\xa2\xa5"
+ "\x1c\xe0\xb0\x77\x31\x6f\x1b\x25\x93\xbd\x36\x1a\xe7\x2c\xb7\xf5"
+ "\x9d\xbf\x87\x87\x16\xfb\xae\xba\x09\x21\x5c\x96\xf1\x5f\x8b\xbf"
+ "\xb1\x15\xc8\xf5\x23\x8a\xf4\x83\xcd\x99\x48\x7c\x4d\x19\x9f\xd8"
+ "\xcd\xb6\xd5\x43\xc5\xb5\xb5\x27\x94\x9b\x60\xa9\xd7\x4c\xb1\x18"
+ "\xe6\xca\x7a\xb2\x65\xab\x92\xf1\x77\xbb\xee\x97\x7f\x02\x97\x35"
+ "\x65\x6f\x2b\x32\xad\xf3\x9c\x64\x5b\xbf\x69\xbd\x17\x3e\x6e\x5d"
+ "\x7f\x10\x29\x9f\xb9\x15\xca\x47\xdb\x97\x57\xda\x96\x0f\x26\xe5"
+ "\xd7\x35\x40\xf9\x18\xfb\xf2\xc6\x9e\x36\xe5\x7b\x91\xf2\x1b\xc6"
+ "\x40\xf9\xe9\xf6\xe5\x55\xb6\xe5\x7f\x44\xca\x6f\x6f\x84\xf2\xb1"
+ "\xf6\xe5\xa3\x6c\xcb\x87\x90\xf2\xbf\xcd\x83\xf2\xb3\xed\xcb\x67"
+ "\xd9\x96\xef\x4d\xca\x6f\x6a\x82\xf2\x71\xb6\xe5\x8b\xd9\xb2\xa8"
+ "\x1f\x57\xb6\x0f\x29\xfb\xce\x04\x28\x9b\x20\xd2\x57\x9a\xab\x3b"
+ "\x82\x2b\xff\x24\x29\xbf\x76\x2f\x94\x4f\xb4\x2f\xef\x69\x5b\x3e"
+ "\x94\x94\xdf\xa3\x87\xf2\xc9\x22\xbe\xb2\x2d\xff\x14\x29\x9f\x17"
+ "\x04\xe5\x53\x44\x7c\x65\x5b\xbe\x2f\x29\x5f\x90\x00\xe5\x53\x45"
+ "\x6c\x6f\x5b\xfe\xc7\xa4\x7c\xe1\x21\x28\x9f\x26\x62\x7b\x61\xf9"
+ "\xec\x9d\x9e\x50\x2e\x7d\x37\x87\x4d\x1b\xbb\xdb\xd6\x1d\x46\xea"
+ "\xde\x35\x1d\xce\xc9\xb2\x2f\x8f\x3c\x48\x79\x34\x8c\x2b\xdf\x8f"
+ "\x94\x2f\xc6\xb6\xdc\x20\x62\xfb\xa7\x71\xf9\x62\x52\xf6\x69\x52"
+ "\xf6\xdd\xe1\x50\x76\x93\x88\xdd\xad\xcb\xf6\x27\x65\xff\x14\x07"
+ "\x65\xb7\x8a\xd8\xdc\xba\xec\x00\x52\xf6\x7f\x43\xa0\x6c\x8e\x88"
+ "\xbd\xad\xcb\x3e\x43\xca\x96\xf6\x87\xb2\x79\x22\xed\xed\x67\x55"
+ "\xf6\x27\xa4\xec\x1f\x22\xa0\x6c\xa1\x88\x5f\xac\xcb\xaa\x49\xd9"
+ "\x43\xd8\x87\x45\x22\x3e\xb1\x2e\x3b\x90\x94\x3d\x80\xc7\x5a\x89"
+ "\x88\x4f\xac\xcb\x0e\x62\xb2\x3f\x9c\xc4\xc5\xe9\xbd\xb6\x65\x77"
+ "\xf3\x71\xf7\x59\xb3\x7f\xd9\x74\x2e\x56\x96\xb2\x71\x10\xca\xf1"
+ "\x73\x8e\xf1\xa7\x96\x39\xc2\x4c\xa1\x70\x26\x7b\x6f\x24\x9c\x87"
+ "\xeb\x3c\x60\x1f\xdb\x3c\x7f\xba\x9b\x9f\x23\x06\x33\xd9\x27\x3d"
+ "\xb9\xeb\x97\xd9\x97\xf5\xb2\x2e\xfb\x1c\x93\x5d\x3e\x9b\x2b\x7b"
+ "\xc8\xbe\xac\xd2\xba\xec\x10\x26\xfb\xaf\x69\x5c\xd9\x72\x91\xf8"
+ "\x3a\xcc\xaa\x6c\x04\x93\x7d\x34\x0f\xca\x1d\x15\x8b\xaf\xcc\x7a"
+ "\xd5\x30\x1c\x0f\x2c\xb1\x1b\xca\x0f\x25\xf6\xfd\x27\xc6\x83\x06"
+ "\x97\xb7\x94\x05\x3f\x0c\xb3\x9a\x2b\x87\x99\xfd\x3f\x29\xe3\x6c"
+ "\x76\xc2\xbe\x0d\x59\xd6\x6d\xf8\x29\xa9\x53\x53\x09\x75\x56\xd8"
+ "\xb6\x81\x8b\x47\x98\x27\x60\xfb\x0e\x37\x65\xff\xbd\x11\xdb\x17"
+ "\xca\x56\x0a\x38\x02\xe5\x41\xe3\x3a\x39\xdf\x8e\x60\xb2\xff\x9c"
+ "\xc8\xd9\x40\x30\x1f\xc1\x78\x64\xe3\x21\xf8\xb7\x82\xf9\x6d\x9f"
+ "\xa3\x50\x76\x24\x57\xee\xac\xed\x3c\xc8\xb5\xef\x79\x38\x56\x7b"
+ "\x7f\x0e\xf4\xf0\xac\x13\xe3\x32\x29\x83\x90\xcf\x35\xfa\x0b\x76"
+ "\x3e\xe3\xbf\xcd\x7b\x96\xe5\x1c\xe6\x12\x43\xca\x54\x3d\x63\xb4"
+ "\xde\xb7\x9d\x62\x6a\x86\xe8\x91\x27\xce\xd3\xcd\x04\xf7\x2b\xd4"
+ "\xc2\x7e\x5d\x58\x4b\x54\x73\xf6\x17\xd1\x5a\x8f\x93\xec\x37\x0c"
+ "\xe0\xff\x58\x2d\x7a\xbb\x12\xff\xbf\x7d\x3d\x63\xc0\xf9\x93\x4d"
+ "\xef\x9e\x89\xa8\x36\x37\x01\xfe\x18\x03\xd4\x61\x00\xce\x48\xe3"
+ "\x6f\x4c\xe3\xef\x48\x54\xa7\x35\xa1\x2b\xf4\x17\xbb\x98\xc5\x89"
+ "\x63\x98\xbc\x67\xb5\x70\xbd\x84\x7a\xf8\x4d\x6c\x0a\x9c\x3a\xe7"
+ "\x4c\xb4\x66\x29\xce\x63\xfd\xc5\x65\x5d\xf0\xb3\x5a\xe6\x37\xb3"
+ "\x1a\x53\x32\xd0\x8f\xa1\xdd\x2c\x47\xc3\x39\x6c\xcd\x81\x67\xa2"
+ "\xd9\xdc\xb5\x37\x13\x7f\x46\xf2\xd6\xfe\xfb\x2a\xce\x57\x8b\xf3"
+ "\xd6\xde\xcf\x59\x5b\xf2\x7c\x14\xc9\x83\xfb\xef\x51\x6c\x5f\xd6"
+ "\x33\x35\x8c\xca\x10\x6b\x6e\xdd\x90\x85\xbf\x07\xad\xc9\xb8\x86"
+ "\xea\xb9\x63\xb8\x4e\xae\x9e\x23\xb6\xf5\xe0\xf3\x74\x61\xcf\x47"
+ "\x81\x0d\x62\x4d\x5b\x99\x42\xb3\x2f\x93\xc7\xe4\x28\xbc\xaa\x93"
+ "\xb5\x88\x7c\x5f\xf1\x6c\x6f\xc6\x7f\x66\xb5\x79\x2b\x93\xce\xe4"
+ "\x78\x1b\xaa\xf5\xad\xec\x7e\xa8\x7b\x03\xe6\xbd\x77\x94\xdd\x37"
+ "\x31\x39\xdd\xb7\x6a\xfa\xe0\xef\xb5\xfe\x9b\x8d\x4f\x78\x3f\x93"
+ "\xab\xf0\xc2\xf6\x34\xe7\x7a\x1b\xe8\x10\xe4\x79\x27\xb0\xfb\xa6"
+ "\xe6\xec\x7f\xef\xb5\x7c\x67\xce\x72\x2d\x5c\xaf\x96\xab\xcb\xf9"
+ "\x9c\xbb\xff\x0e\xc7\x39\x77\x9d\x2f\xff\x45\x03\x2e\x2f\xfe\x0d"
+ "\x12\xe0\x57\xb9\x67\x12\x9b\xb3\xcf\x46\x69\xe9\x53\xfd\x89\xcf"
+ "\xcf\x82\xff\xbb\x4f\xe0\xfe\x8f\xd5\x7a\x78\x87\x72\xff\x27\x68"
+ "\x3d\xca\xe3\xb8\xff\x53\x2c\x39\x8e\x45\xeb\x55\x9e\x19\x03\xbe"
+ "\x9e\x6e\xde\x19\xeb\x85\x39\x3e\xf9\x46\xc3\x99\x31\xaa\xbe\xf8"
+ "\xdb\x35\x67\xf5\x70\xcd\xe9\xc4\x27\x67\x4f\xc3\xdf\x00\xee\xaf"
+ "\x8e\xfb\xcb\xe0\x32\x2c\x8e\x83\x9e\xae\x05\x7f\x58\x7c\x71\x99"
+ "\xd5\x36\x18\x37\x80\x2d\x26\x50\x81\xd8\x7a\xf3\x9f\xd5\x5a\xb7"
+ "\x21\x62\xe8\xb0\x9f\x0e\x1f\x31\xf2\xf9\xc8\x51\xf1\xf3\xde\x48"
+ "\x98\xbf\xe0\xcd\xc4\xa4\xb7\xde\x4e\x5e\xb8\x68\x71\xca\x92\xa5"
+ "\xcb\x52\x97\xaf\x58\x99\xb6\x6a\x35\x7e\xe8\xed\x7e\x5b\x77\x4e"
+ "\xf0\xd0\x53\x08\xae\x31\x1e\xae\x71\x8e\xfd\xee\x2d\xde\x47\xf0"
+ "\x75\x6e\x82\xa7\x4a\x5c\x3b\x54\xc3\x28\xc2\xdf\x2a\x6c\xa2\xcf"
+ "\xed\xc1\xdf\x4e\x04\x7c\x7b\x54\x17\xbd\xa8\xc1\xdf\x67\x6e\xa0"
+ "\xcf\xe5\x55\xe9\x5e\xd4\xe0\x6f\x7f\x7f\x16\xd2\x88\xfa\xf7\xc3"
+ "\xdf\x70\x3e\x97\x85\x8f\x17\x3f\x83\xd0\x09\x38\x57\xac\xce\x7e"
+ "\x4a\x14\xf2\x5e\x2f\x46\x97\xd7\x8b\x69\xc2\xf5\xe7\x15\x30\x8d"
+ "\xba\x35\x89\x28\x1b\x7e\xc3\x18\x53\x5e\xa1\xbf\x9c\xf1\x59\x28"
+ "\xfb\xbd\xd5\xd0\xdd\x05\x4c\xc3\x86\x5e\x4c\xc3\x6f\x0a\x98\xa6"
+ "\xe2\x5e\x8c\xb6\x7f\x1e\xf2\x6d\xce\xfe\x12\x70\x77\x8e\xf5\xd1"
+ "\x76\x38\x6e\xf6\x3f\x87\xb6\xc3\xb1\x21\x46\x44\x17\xc3\x6f\xd8"
+ "\xa7\xff\x4c\x45\xda\xfd\xd1\x6d\x43\x37\xe8\x5f\x13\xd3\x96\xec"
+ "\x91\x0d\xd7\x21\xfe\xf8\x72\xd5\x09\x60\x1d\x70\x3d\x5d\xb5\xa1"
+ "\x1e\x69\xe9\x2f\xd3\x8a\xef\xb1\xd7\x0b\xa8\x2e\x6c\x42\xb8\xbe"
+ "\x0f\x97\x1a\xba\x2d\xeb\xc3\x18\xa1\x6c\xac\x79\x4d\xb2\x07\x94"
+ "\x19\x0e\x75\xeb\xad\xfb\xa3\x5e\xb0\x30\x55\xb5\x68\x79\x72\xf2"
+ "\x40\x05\x52\xb3\x7f\x05\xdf\x0e\x4f\xc5\xb9\xd5\xdf\x2b\x60\x4e"
+ "\x40\x3f\x35\xd0\xdf\x8a\xd3\xa0\x52\x00\x1b\x08\xfa\x94\x03\xf5"
+ "\x9e\x86\xfd\x47\xe1\xff\xa3\xd0\xf6\x0a\xf2\xad\xe2\xef\x5a\x98"
+ "\xec\x2f\x37\x40\x3b\x2b\xf0\xb7\xd8\x70\x2e\xf6\x3b\x2b\xa7\x7b"
+ "\x40\xbf\xf3\xa0\x5c\x85\xaa\x0f\x1a\x70\x85\xfe\xcf\x0c\x68\xc7"
+ "\x5e\xf8\x1f\xca\x37\x7a\x60\x3f\x42\xf9\x13\xa4\x5f\xdf\x5d\xc5"
+ "\xbf\xc1\x56\x9a\x5d\xbd\x98\xad\xcd\xd9\xff\x89\xc0\xdf\x98\x60"
+ "\xbf\x7f\x09\xbf\xc1\x2e\x15\x50\x36\xe7\x4e\xe6\x74\x0f\xd0\xba"
+ "\x1e\xc5\x7c\x9d\x6c\x9b\x70\x3b\xb0\x7e\xfe\x17\x30\x50\x73\x5b"
+ "\x2c\x1a\x6c\x40\x1e\xff\x82\x88\x55\x54\xc0\x94\xc0\x56\x04\x5b"
+ "\xe1\xe7\x70\xec\x14\x6c\x58\x6d\x56\xc2\xdf\xcf\xe1\xef\x29\xd8"
+ "\x40\x7f\x87\xe0\x76\x2f\x4b\x67\x1a\x87\x14\xa2\xa7\x71\xfd\x80"
+ "\xad\x5f\xd7\xd3\xdf\xc5\xe0\xb6\xe3\x6f\xc8\x30\xfe\xff\x39\x21"
+ "\xfc\xee\xc5\xf9\x48\x04\xc7\xe1\x6f\x34\xf9\x6b\xbd\x9d\xcf\x83"
+ "\xed\x10\xf7\x3f\x78\xf6\x7c\x7f\xf2\xff\x57\x4a\xd8\x42\xdb\xdf"
+ "\x6c\xeb\x93\xda\xbe\xda\xe4\x7c\x59\xa7\xb6\x13\xce\x95\xab\x8b"
+ "\x42\xf4\x37\x85\xb0\xd5\x08\xf7\x7f\x53\x4a\xf6\x7d\x9b\x4a\x7e"
+ "\x7f\x9b\xc5\xfd\x3d\x80\xe8\x06\xb0\x53\x03\xd4\xdf\xd0\x48\xf6"
+ "\x35\xe8\xe1\xef\x18\xd8\x26\xd9\x5c\x1f\xd7\x59\x87\xfd\xd9\x06"
+ "\x73\x0c\xf6\xa5\x96\xfe\x4f\x1e\xf6\xd1\x76\x82\x2d\x0f\xfc\x1e"
+ "\x1d\xec\xcb\x01\x6c\x15\xf1\xf8\x39\xbf\x51\x88\x9f\xf3\x29\x36"
+ "\xf8\x61\xbf\xcd\x05\x63\xa1\xae\x98\xe0\xe5\xe8\x9d\x35\x09\xf0"
+ "\xfb\x7c\x2a\xd4\x73\x14\xaf\xeb\x40\x1d\xec\x33\xf8\xdb\xaf\x21"
+ "\xe4\x97\x88\x3c\x71\x7c\x69\xa2\xcf\x9f\xc4\x98\xc5\xd7\xe6\xae"
+ "\x4b\xda\x02\xed\x83\x7d\x25\xb8\x7d\x8b\xa1\x5e\xf8\xbd\x17\xca"
+ "\x95\x54\xa3\xdb\x96\xb6\xb1\xe7\x6c\x79\x0b\xf0\xc8\xb5\x17\xd7"
+ "\x89\xcf\x63\xf8\x7e\xe5\xe0\x73\xc8\xb5\xbf\x5a\x05\xfb\x23\x20"
+ "\x46\xe1\x77\xe4\xe8\x6a\xa3\x16\x61\x4c\xe2\xbf\xd5\xc6\x08\x18"
+ "\x4b\x93\x90\x19\xe7\x85\x0f\x41\x11\x30\xde\xbc\xeb\xe9\xaf\x66"
+ "\x3f\x97\x8e\x22\x70\x7d\x38\x7e\x6b\xe9\xaf\x54\xc5\x78\x2c\x92"
+ "\xba\x96\xe0\x7e\xe0\xfa\x3f\x4f\x41\xec\x75\x76\xe3\xf6\xc0\x71"
+ "\xab\xeb\xe6\x55\x83\xfa\xda\xbe\x9a\xf4\x15\xae\xb5\x17\xce\x2f"
+ "\xc3\x7d\xc7\xf6\x84\xe3\xe5\x50\x4f\x39\x3e\x86\xbf\x23\xc9\xf5"
+ "\x67\x2f\x7e\x37\x11\xdb\x03\x97\xc7\xdf\xbb\x27\xdf\xbc\xf8\xf2"
+ "\x02\x6b\x37\x38\x1f\xfb\x83\x81\x6b\xe0\x3a\x32\x8d\x8c\x91\x81"
+ "\x78\xf4\xbb\xd5\xf8\x7b\x69\x75\x43\x85\xfe\xf9\x5a\x69\xed\x1f"
+ "\x38\xaf\x0c\xce\x3f\x81\xe7\x7e\x1c\x4f\xe0\x9a\x01\xf8\xfb\xce"
+ "\xb0\x2f\xc7\x9c\x0d\x75\xac\x30\xb0\x6b\x51\x50\x4f\x18\xb4\x25"
+ "\x07\xd7\x03\xed\x39\xc1\xd5\x35\x1b\xe7\xc7\xb7\xf6\x35\x57\xdf"
+ "\x5e\xec\x73\x76\x3c\xaf\x66\xfb\x04\xb1\xeb\xeb\x5b\xbb\xc9\xb1"
+ "\x72\x28\x53\xce\xb4\x4d\x42\xcc\x9a\x58\xee\x3b\xd2\xec\xb1\x43"
+ "\x99\x2d\xac\x7f\x4f\x90\xb8\x56\x17\xb8\x6c\x2d\xd3\x68\xd5\xee"
+ "\x0a\xcb\xf7\xa3\xb8\x76\x1f\xc2\xd7\x63\x56\xce\x66\xe7\x50\x7c"
+ "\x0d\x7c\x3e\x57\xdf\x5e\x5c\x9f\xc5\x56\xcf\x41\x3b\x88\xbd\xbe"
+ "\xaa\x85\xfd\x7b\x31\x16\x59\xbb\x41\x1c\xbd\x93\x89\xb1\xf8\x75"
+ "\x25\x9c\x7f\x34\x1b\xff\x5e\xc9\xfe\x8e\x63\x63\x2c\x7f\x3c\x08"
+ "\x1f\xaf\x06\x94\x6e\x7f\x1b\xb0\x64\x46\xe8\xe9\x20\x14\xa1\x5f"
+ "\xcf\xf6\xed\x80\x7e\xcd\x04\x8f\xcf\x8c\x08\xe1\x76\x82\x8d\xca"
+ "\x9b\xb3\xeb\x52\x61\xae\x39\x84\xdb\x0a\xf1\xfa\x10\xf3\xbb\x58"
+ "\x84\xdb\x0c\xf1\x8c\x6b\x5f\xdd\x65\xce\xf7\x87\x70\x1f\xb1\x3d"
+ "\x9f\x23\xb1\x0f\x8e\x7d\xb3\x19\xb7\x9d\xef\x77\x9d\xc6\xda\xc6"
+ "\x6c\xbf\xc1\x0f\xd8\x5f\xd8\x2f\x56\x75\x62\xec\xe7\x40\x5d\x07"
+ "\xc8\x6f\x82\x0d\x6c\xeb\x9c\x5e\x4c\x25\x2e\xcf\x97\xbd\xc0\x7e"
+ "\x1b\x3b\x03\xae\x3d\x24\x85\x7c\xd3\x17\x7f\x03\x0c\xea\x3d\xa0"
+ "\x59\x6d\x44\x50\x47\x39\xb6\x29\xb4\x65\x32\xc6\x23\xfc\xae\xe4"
+ "\xce\x8b\x86\xf9\x3c\x1c\xb6\x31\xfc\xf8\xff\x66\xac\x10\x5f\x17"
+ "\x6c\xc7\x3f\xf6\x77\x8e\x39\x73\x12\x62\xf1\xb0\x14\xa9\x6e\xd0"
+ "\x17\xce\x73\x73\x07\xe7\xeb\x6f\x06\x7f\x06\xe3\xc5\xaa\x8e\x43"
+ "\x36\xbe\x2e\x67\xf1\xb8\x32\xda\x03\xf7\x19\xce\x2d\xe7\xea\x61"
+ "\xfb\xcc\xe2\x69\x3d\x8b\x81\x4a\x66\x25\xf4\xf3\x3e\x0e\x2e\x28"
+ "\x39\x3f\x57\xda\xd8\xc4\x12\xbb\x66\xe3\xef\x11\xe3\x98\x04\xbc"
+ "\xfa\x67\xcd\x6d\x7c\x5c\xc2\xbe\x37\xb3\xbe\xbf\x50\x5e\x4c\xe6"
+ "\x5b\x2e\x6e\x5d\x20\xc7\x7b\x09\x30\x8c\xdb\x72\x9d\xc5\x2f\x6e"
+ "\x4b\xe6\x6c\xdc\x96\x72\xb6\x1d\x99\x2a\x74\x83\xfe\x26\x01\x5f"
+ "\x1f\xce\xd5\x71\xe3\x95\xab\xab\xee\x04\xae\xeb\x37\x10\xab\x70"
+ "\x9b\xe0\xda\x31\x6c\xfc\xfb\x05\x6b\x93\x93\x5c\xdb\x2b\x0c\xeb"
+ "\xf1\xb9\xe7\xcb\x5b\x28\xf6\xdc\x0a\xf8\x3f\xdc\x40\xbe\xe7\xa6"
+ "\x80\xf3\x4b\xd9\x67\x2c\xe9\x6f\xfb\xe3\x18\x8d\xdf\x1d\x86\xff"
+ "\xfd\x54\xaf\x02\x56\xaf\x21\x4f\xa8\xcf\x0b\x63\xd4\x82\x8b\x26"
+ "\xba\xde\x84\xb5\x0a\xd8\xfa\x00\x70\xa4\x52\x6c\x6f\x8c\x65\xe0"
+ "\x48\xc3\x9b\xb3\x2f\x86\x5b\x70\x0b\xd7\x29\xc2\xb6\x27\xfe\xb9"
+ "\xb8\x04\x70\x5c\xce\x63\xeb\xe2\x12\xce\x8e\xa5\x60\x47\xaf\x2b"
+ "\x74\xfd\x2d\xae\x5f\xa5\x50\x1e\xb8\x58\xfd\x25\xae\xed\x85\x5c"
+ "\xf9\x6d\x16\x3f\x70\x63\xb5\x32\x1b\xc7\x5f\xd6\x07\xda\xfe\xdc"
+ "\xb9\x7b\xc9\xb5\xb4\x03\x2c\x65\x31\x47\x24\xdf\x66\xd6\x0e\xc0"
+ "\x71\x70\x08\xf8\x9e\x8d\x7d\xab\x5b\xd9\x72\x5c\x6c\x3c\x41\xae"
+ "\x51\x7f\x9a\xc5\x21\xf0\x1e\x1e\x47\x17\x8d\x36\xf1\x09\xc7\xe2"
+ "\x9c\xaa\x0d\xe4\xdb\x77\x18\x4b\x38\xa6\x62\x4d\x04\x6d\x3c\xcb"
+ "\x8d\x1f\xae\xcd\xda\x24\x21\x56\xea\x8f\x00\x56\x06\xf3\x75\x6b"
+ "\x63\xc5\xe6\xb9\x62\x12\x03\x8b\xb8\xbe\xed\xe7\xfa\x76\x80\xeb"
+ "\xdb\x7e\xae\x6f\xa5\x70\x0d\x6c\xb7\x85\x56\x76\x04\xbb\x5d\x3a"
+ "\xcf\x95\x2f\xc7\xb1\x9c\x1f\xaf\x97\x82\x2d\x63\xd9\x3e\x5e\x5c"
+ "\x3a\x85\xc7\x83\x55\xbb\x74\x36\xf1\xa2\x5c\x3c\x5e\x68\x35\x5c"
+ "\x7f\x4b\x6c\xc6\xc6\x5e\x8e\xef\x5e\xb0\xf8\xa1\x4a\x6f\xf9\x06"
+ "\xe1\x97\x17\x70\xfc\xc4\xd7\xb6\x9e\x83\x76\x13\xbb\x72\x63\xf9"
+ "\xd2\x61\x7b\x3f\x5c\xda\x60\x3d\x9e\xb1\xaf\x71\x4c\xc0\x75\x60"
+ "\x9f\xb2\xbc\x12\xf6\x11\xbf\x5e\x9a\x8d\x63\x83\x75\x8c\x86\xb2"
+ "\x79\x66\x06\x8f\x97\x4b\x9b\x84\x63\x51\xab\xe7\xc6\x22\x77\xed"
+ "\xfa\x99\xe0\xa3\x08\xab\xeb\x1a\x6d\xae\x8b\x7d\x73\x82\xfd\x56"
+ "\x0c\xf1\xe9\x44\xcb\x9c\x86\xcb\xc3\xb9\x69\xcd\xd9\xf5\x11\x36"
+ "\xf3\x63\x0e\x6e\x1f\x5c\xab\x94\x8d\x59\x05\x6c\xac\x48\x6b\x66"
+ "\xdb\x53\x3f\xbc\x98\x9b\x27\x60\x5f\x04\xb7\x0f\x71\x73\x89\x05"
+ "\x37\xfb\x84\x6d\xaa\xcf\x11\xe7\x47\xda\x52\x0b\x3f\x62\xeb\x62"
+ "\x63\x51\x7d\x1e\xd7\x3f\xbc\x6f\x30\xd9\xa7\x9d\x8d\xf7\x65\x13"
+ "\x3b\xe4\x31\xec\x7c\xa5\x45\xdc\x7c\x85\xc7\x17\xa5\xa5\x2f\xa6"
+ "\xe0\x31\x86\x7f\x43\x1d\x8d\xb8\xfe\xea\xac\x56\x5c\xa6\x10\x8e"
+ "\xf9\xe2\x78\x80\xe3\x05\x7e\x36\x98\xfd\x3b\x85\xfd\x3b\x02\xc7"
+ "\x1d\xcc\x43\xf0\x71\x2d\xfd\x8d\x11\xc7\x22\xd8\xff\x12\xce\x0b"
+ "\xc8\x7c\xef\x05\xf5\x7e\x1b\xce\x9d\x3b\x87\xe5\x0a\xdf\x4f\xa2"
+ "\x2d\xfb\x2c\xe7\xc1\x38\xf2\xc3\xe7\xe1\xf3\x2d\xf1\x0b\xc7\x2e"
+ "\x23\x8e\x4d\xe4\x7a\x7b\x38\x8c\xb3\xba\xc1\xc2\x8b\xda\x28\xab"
+ "\xb2\xf8\x5b\x6a\x24\xa6\x35\x71\xf1\xec\x02\x3e\x97\xf5\x1f\xc4"
+ "\xca\x8c\x16\xe6\x52\xf1\x52\xe4\xb9\xfb\x36\x8e\x8b\x5f\xd6\x91"
+ "\x76\x36\x44\x92\x7e\x34\x78\xb0\xfd\x20\x31\x35\x87\xb4\xe5\xcb"
+ "\xba\xdd\xad\xec\xb1\xa7\x70\x5f\xf0\xb1\xed\x56\xc7\xf0\xb7\x11"
+ "\xe1\x18\x59\x2f\xb1\x39\xcf\xdc\x96\x68\x57\xbe\xb8\x95\xd5\x7d"
+ "\x5e\xbb\x0b\x2c\xb1\xb7\xa1\x9c\xb4\xb3\x61\xb9\x25\xee\x82\x5d"
+ "\xd8\xd8\xcb\x1e\x5b\xc0\x95\x99\xc2\xfd\x65\xe3\x7b\xc3\x3e\x62"
+ "\xd7\x10\x8a\xd8\xfb\xa2\x2f\xd7\x8f\x23\xac\xce\xfe\x3e\x16\x6c"
+ "\xdb\x50\x64\xb1\xad\xf5\xff\x78\xfc\xc0\xf5\x95\xf8\x37\x8b\xfb"
+ "\x74\x56\xc3\x16\xe1\x32\xb8\x4d\x64\x8e\xf8\x36\xcf\x96\x53\x83"
+ "\xd6\x1b\x8a\xe7\x25\xc2\x55\xbf\x0b\xe4\xd6\x9e\x90\x66\xe9\x07"
+ "\x30\x2f\x5c\x9e\x6d\x89\x31\x4c\xf3\x24\x84\xbf\xb1\x74\x85\xbe"
+ "\x3c\x07\xef\xc3\xdf\xc7\xb2\x2e\x83\xe3\xd3\x47\xad\x5a\xae\xce"
+ "\xcb\x91\x96\xb8\x81\x63\x49\x95\xbe\x9e\xe3\x74\x97\x1b\x77\x73"
+ "\xb1\xe4\x06\x7d\xf9\xaa\x90\x87\x5d\xbe\x2a\x8c\x19\x57\x4c\xb6"
+ "\x31\x03\x78\xf3\x86\xe6\xec\xcb\x47\x05\x3c\x00\xf6\x39\x8e\x1d"
+ "\x97\x73\xf0\x18\xc5\xdf\x66\x65\xe3\x13\xbb\x9e\x76\x65\x9a\xa5"
+ "\xcd\x38\x6e\xde\x59\x63\x59\xbf\xb8\x72\x1d\x73\x35\xe1\xf5\xae"
+ "\x84\x0b\x62\x27\xbe\x9e\xa5\x3e\x4f\xc4\xae\xa9\x68\x96\xe2\xf5"
+ "\x96\xcb\x46\x2e\xce\x97\x08\x62\x25\x37\x87\xe1\x38\x29\x9c\xab"
+ "\xbe\xbc\x20\x9c\xab\xae\x9c\xb7\x8f\x91\x57\x4a\x9d\x9f\xab\xae"
+ "\x64\xe1\xb8\x65\x89\x91\xc2\x58\x70\xe5\xc0\x6e\x01\x97\xbd\x32"
+ "\xdc\xc2\x65\xf9\x38\x7a\xf9\x04\x8e\x51\x70\xfd\x72\x72\xed\xef"
+ "\xfa\xc3\xbc\xaf\xb6\x5c\x1b\x8e\xcf\xae\x52\x01\x36\xb3\xbf\x84"
+ "\x6b\x5c\xf6\xe2\x38\x20\x3b\x36\x5b\xd9\x6f\xf1\x35\xc4\x00\xfe"
+ "\x14\x18\x67\x9a\x45\xb7\x51\x03\x3f\x57\x9c\xb8\xb3\xd8\x62\xdf"
+ "\xef\x0e\x5b\xf3\xc2\x5d\x05\xcc\x26\xb8\xce\x56\xeb\x3e\x6e\x83"
+ "\x7d\xdb\xb9\x35\x04\xd6\xb6\x6c\x5d\xdf\xc5\x15\x17\x08\xfb\x46"
+ "\xfa\xf1\x1d\x5e\xcf\x38\x8a\x35\x11\x5c\x7f\x3a\xe6\x3d\xf8\xfb"
+ "\xcc\x10\x67\x6a\x8b\xef\x63\xfe\x7c\x78\xcb\x7a\x6b\x7e\xf5\x9f"
+ "\xe1\x38\x56\x72\xda\xb3\x02\xf8\x4e\x8e\xf5\x5a\xcc\xe4\x9f\xc7"
+ "\xa8\x52\x96\x26\x2d\x4a\x5d\x30\x4c\x95\xb4\x28\x29\x35\x29\x3e"
+ "\x39\x69\x75\x7c\x6a\xd2\xe2\x45\xe1\x0b\xe3\xdf\x4c\x7a\x43\xb5"
+ "\x32\x7e\x99\x2a\x22\x6d\x40\x9a\xe2\xff\xb3\xf7\x3e\x70\x51\x57"
+ "\x59\xc3\xf8\x99\x3f\xc8\x68\x28\x03\x51\x4d\x45\x36\x1a\xd6\xa8"
+ "\xa0\x58\xb6\x6b\x0a\x8a\x89\x85\xe5\x1f\xca\x3f\x51\x9a\x4a\x82"
+ "\x8e\x89\x42\x30\xea\x88\x28\x38\x6a\xd9\x66\xf2\x27\x52\x2a\x04"
+ "\x2c\x6b\xad\x6c\x73\x5b\x2b\xda\xb5\x8d\x82\x5c\x76\x57\x18\x9f"
+ "\x5d\xf7\x7d\x78\xf6\xe7\x6e\x13\x2f\xb1\xe4\x83\x3a\xc5\xe8\x4c"
+ "\x3a\x33\xf7\x77\xce\xbd\xdf\x2f\xf3\x87\x19\xad\xf7\xe9\x7d\x9f"
+ "\xf7\xf3\xfb\x45\x8d\xdf\xef\xf7\xde\x73\xcf\x3d\xf7\x9c\x73\xcf"
+ "\x3d\xf7\x3f\xf8\x40\x27\xeb\xb3\x8b\x8a\xd6\xaf\xcd\xcd\xd1\xaf"
+ "\x5b\xbd\x22\xa9\x30\xb7\x28\xd7\xa4\xcf\x2e\xcc\x5f\xbf\x2e\x47"
+ "\x3f\x2a\x67\xdc\xa8\xe4\x9f\xe5\x0c\xf1\x1f\x43\x1b\xa9\x85\x5e"
+ "\xef\xc5\xaf\x7b\xca\x2f\x82\x26\x5a\x51\x50\x18\x6d\x5e\xbd\x4e"
+ "\x8c\xd9\xf5\x78\xc6\x57\x43\x01\xc6\x47\xd5\x57\x11\xaf\x7b\xb4"
+ "\xf8\x54\x13\x1c\x96\x53\x8f\xef\x1a\xa4\x3d\xde\xb9\xa7\xa7\xc9"
+ "\xa6\xea\x3d\x44\x3c\x43\x5e\xe8\xb1\x6c\xf1\xec\xe2\x1f\x7b\xd0"
+ "\x67\x2b\xa0\x35\x01\xf5\x17\x21\xae\x62\x03\xa8\xf1\x17\x85\x3f"
+ "\xad\x52\x4b\x63\x5d\x3d\x0e\x9b\xea\x8c\x56\xdc\x39\xf6\x75\xb5"
+ "\x3d\x26\xf2\x10\xab\x88\x3c\x24\xe4\xf2\x75\xa5\x3c\xc6\x3d\x6f"
+ "\x27\xcc\x23\xfd\xec\x54\x7d\xcd\xc7\x67\xb7\xa3\x2e\xd3\xb8\x6f"
+ "\xdf\xef\xef\x4d\x43\x7f\xf0\x34\x8d\xdd\x62\x5c\xa5\x43\x09\x51"
+ "\x48\x97\xba\xb9\x24\x19\x5e\xc0\xbc\x8a\x74\x8c\x39\xf7\x7c\x9d"
+ "\x25\x8f\xa7\x61\x19\xb4\x58\x96\x0e\xa9\x1c\x53\x78\x39\xf6\xb2"
+ "\x84\xea\x58\xa4\xaf\x8a\xe8\xf9\x7a\x87\x5c\x06\xa4\xbb\xc3\xa6"
+ "\xea\xe9\x41\x3a\xb5\x44\x57\xa8\xb1\x3e\x1a\xef\x42\x3a\xdb\xbc"
+ "\x1b\x90\x6f\xc3\xc5\xfd\xae\xe5\x75\xa2\xfe\x61\xb9\xd4\xf5\xf8"
+ "\xbe\xe7\x5b\x88\x7a\xbe\x10\xe2\x98\xe5\x56\xd6\xe6\x70\x83\xd5"
+ "\xd8\x01\xd1\x9b\x98\x9d\x7d\xf0\x75\x8f\x54\x26\x17\xd9\x86\xdf"
+ "\x3c\xd9\xa1\xa6\x32\x61\x5b\x11\x55\xff\x6d\xd8\xb1\x45\xf5\x0b"
+ "\xd7\x33\x07\x7b\xc5\xdf\xe7\x3a\x93\x4d\x3c\x21\x7f\xab\xcf\x42"
+ "\xf7\x17\x9f\xc9\x40\x5e\x36\x48\xbe\xb1\x83\x5d\x5e\xe2\xe7\x4b"
+ "\x9d\x21\x3d\x73\x84\xc1\xad\x91\x71\x33\x25\xbf\x17\x59\x27\xe4"
+ "\x7f\xa6\x0d\xd3\xd8\xfd\xf0\x1f\x0a\xc6\x4f\x38\xf1\xdd\x2e\xe7"
+ "\x23\xfa\xe1\x67\xc8\x27\xb0\xa3\x2e\xdb\xc3\xe4\x97\x50\xb5\x97"
+ "\x9d\xb2\x62\x78\xf9\x77\xa0\x46\xd8\x53\xf5\x7b\x09\xff\x7f\x6a"
+ "\x90\xef\x79\x84\x7f\xfb\xf5\x00\x3b\x10\xa6\x6f\xcf\xd7\x0d\x34"
+ "\xbe\x8b\x71\x58\xff\xff\x47\x4d\xf0\x98\xb5\xa4\xcf\x93\x83\xf4"
+ "\x39\xad\x8a\x7c\x42\x6c\x5d\x48\x87\xca\x2f\x60\x3b\x8c\xdf\xe3"
+ "\xaa\xc1\x40\xf9\xe0\xfb\x49\x1a\x0f\x41\x9c\x66\x39\x3f\x86\xfa"
+ "\xbf\xc7\x2b\xc6\x60\x24\xdd\x4a\xb4\x9a\x7b\x68\x5e\x84\x35\xa3"
+ "\x7d\x27\x1a\x49\xc7\x30\xcd\x61\x59\xa7\x50\xd7\x4f\x71\xbd\x8a"
+ "\x03\x03\xdb\xf3\x9f\xc9\xf5\xb1\x08\x87\x7a\x55\x87\xfa\x44\x7a"
+ "\x85\xb0\x1d\xb2\x4e\xa1\xae\x9d\x24\x38\xa4\x61\xc8\x91\xe2\x34"
+ "\x35\xd9\xc8\x2e\x55\xef\x1c\xd2\x31\xb6\xef\xc1\x0e\x76\xc3\xe2"
+ "\x0e\x21\xa7\xde\x39\x56\x97\x90\x81\x8f\xef\xbd\x7a\x3f\xbe\x9f"
+ "\x44\x3d\x1e\x42\x7c\x16\x63\xd5\xbd\x73\x90\xb6\x93\xdc\x17\xdf"
+ "\x82\x32\xe0\x6d\x55\x6f\x14\xa5\x97\x78\x78\xc2\xc7\xc3\x5e\x63"
+ "\x28\x1e\x06\xf1\x4e\x4d\x3f\xb6\xa7\xd7\x44\x75\x05\xd3\x60\x9b"
+ "\xfd\x9f\x29\xe1\xe6\x0a\x30\x0f\xb5\xba\x1a\x34\x94\x47\x4b\x1c"
+ "\x87\x3f\x21\xe7\x51\x8e\xbc\xb6\x97\x1a\xaf\xa8\xcf\x2d\x0d\x00"
+ "\x34\x26\x4e\xe9\x13\xe2\x88\xbf\x67\xa3\x7c\xe9\x99\x23\x38\xfd"
+ "\xa8\x15\x01\xb4\xf2\x1f\xdb\x73\x56\xff\x42\x2c\xea\x11\xa7\xf7"
+ "\xec\xec\x2b\xd1\x9b\xa0\x17\xed\x64\xd3\x48\xd2\xef\xb3\x3b\xad"
+ "\x35\x00\x14\x26\x7d\x9b\xfa\xb0\xed\x09\x1e\xdf\x0f\x3f\xdf\x70"
+ "\xf6\xf3\xc0\xf9\x86\xb3\x47\xc3\xcd\x37\x04\xe6\x7b\x4e\x41\xf9"
+ "\x7a\xeb\x17\x28\xfc\xf2\xee\xf5\x86\xc8\x5b\x4e\x3f\xae\xc1\xbf"
+ "\x3f\x73\xee\x21\xa2\xa1\x1d\xdb\x29\x76\xf3\x02\x05\x43\x3c\x2d"
+ "\xbc\x0d\x3f\x97\x29\xfc\x17\xf2\x8b\xce\x25\x13\x4c\x70\x39\xfa"
+ "\xff\x34\x71\x9f\xd2\xe3\x3b\xfe\x11\x71\x1f\xd0\x28\x04\xe8\x3b"
+ "\xe4\x68\x65\x00\x30\xb0\x10\x1f\x51\x00\x23\x38\x3c\xc3\x3f\x11"
+ "\x24\x7d\xdb\xf9\x87\xba\x1f\xbe\x3f\xfe\xbf\xf0\x37\x58\xd0\xcb"
+ "\xf1\xb9\x40\x21\xe5\xe7\x5f\xa6\xf4\x2b\xa4\x66\x20\x27\x09\xf5"
+ "\x47\x23\x05\x65\x0b\x22\x00\x46\xea\x38\x30\x63\x6e\x11\xd1\xff"
+ "\xcd\xfc\xbf\x29\x24\xf0\x1b\xff\x54\x4b\xfc\x32\xb8\x55\x95\xc3"
+ "\x97\x77\x8d\xca\xec\x0f\x52\x36\x68\xfd\xb3\xd4\x42\x59\x04\x7f"
+ "\x89\xa6\x7f\x5c\x88\xcf\x80\xf1\x23\x27\xf5\x03\x5c\xeb\xd8\xe6"
+ "\x07\xfe\x67\x41\xfe\x6d\xbb\xae\x50\xc6\x1f\xfa\x37\xdc\xef\xfd"
+ "\x56\xf1\xb8\x2d\xe3\x47\xc4\x7f\xe5\x3f\xfd\xc9\xc1\xf2\xab\x4f"
+ "\x3d\x6e\x3b\x19\x0a\xd4\xc7\xff\x84\x64\x39\xc8\x5f\x43\x7d\xf1"
+ "\x77\x1c\x0e\xfc\x1e\x6d\x0c\xfc\x1e\xdb\xf8\x63\x90\xde\x44\xff"
+ "\x94\xda\xb0\x6f\x32\x66\x47\x7f\x60\x74\x50\x95\x89\xae\x08\xaa"
+ "\x42\xbe\x3f\x89\x1a\x15\x40\x62\x94\x5f\xb0\x3a\x34\xf4\xff\x9e"
+ "\xbf\x9b\xb6\x49\x15\xe2\x56\xbb\x76\x40\xe4\xb4\xa0\x30\xfa\x1e"
+ "\xa4\x97\xc2\x26\x7c\x3a\x00\x9e\x87\xe9\xfd\xbe\x15\x69\xf8\x4f"
+ "\x03\xea\xff\xe9\x1f\x83\xd6\x9f\xfe\xfe\x7f\xf8\xa7\xa0\xfa\xf1"
+ "\xd3\xdf\xff\xa6\x3f\x26\x5a\x71\xb4\x44\xfc\x41\xff\xb1\x7e\x43"
+ "\xc9\xa4\x08\x26\x05\x30\xe9\xe5\x47\x69\xc7\x7f\xfa\xfb\xe9\xef"
+ "\xa7\xbf\x9f\xfe\x7e\xfa\xfb\xe9\xef\xa7\xbf\xff\x0f\xfc\x29\x78"
+ "\x3f\x82\x49\x7f\xfd\xef\xfd\xf1\xd4\x0d\x5a\x1d\xc7\x94\x0a\x60"
+ "\x7e\x11\x65\x77\x83\x42\x03\x83\xd4\x3f\x9e\x97\xa7\xef\x27\xe8"
+ "\x7b\x26\xa0\xbe\x24\xad\x3b\xba\x0b\x7f\x37\xfb\x85\x27\xfc\x58"
+ "\x14\xfd\x68\x7f\x0a\x64\xa2\x0a\xfb\x87\x11\x30\x08\x22\x41\x03"
+ "\x83\x61\x08\x5c\x03\x51\x30\x14\x86\x61\xbf\x53\x0b\x31\x10\x0b"
+ "\xd7\x42\x1c\x5c\x07\xd7\xc3\x0d\xa0\x83\x1b\xe1\x26\x2c\x51\x3c"
+ "\xdc\x82\x7d\xfc\x5b\x91\x31\x23\x60\x24\xdc\x16\xba\x5c\x65\x90"
+ "\xa6\xc3\x7f\xf0\xff\x4c\x48\xe3\xdf\xcb\x7f\x0a\xff\x3f\x1a\xde"
+ "\x24\x85\x9f\x94\xc2\x6d\x3f\x85\xff\x1f\x0d\xd7\xff\x37\x3f\x47"
+ "\xfc\xb7\x3e\x15\x68\xbe\x85\x05\x57\x84\xb4\x9b\xc1\xa1\x0a\xe9"
+ "\xaf\xff\x1b\xae\x92\x7e\x00\xbe\xc0\xf4\xc1\x7f\x69\xf8\x9b\x28"
+ "\x5e\x4b\x01\xa4\x31\x5f\xe6\xff\xe7\x3e\x17\xf0\x17\x0e\x51\xff"
+ "\x9f\x65\x09\xfe\x8c\xf8\x33\xe1\x6f\x23\xfe\xb6\xe3\xef\x79\x19"
+ "\xad\x80\xd1\xe0\xef\x9b\x2c\x80\x4e\x7c\xfe\xcf\x49\xf8\xac\xc5"
+ "\xe7\x29\x80\x2e\x4c\xf7\xaf\x43\x00\xdd\x08\xf0\xb5\xdf\xd8\xe8"
+ "\xc5\xe5\x3e\x6a\xfb\x4e\x88\x77\x3d\xfe\x5c\xb4\x46\x18\x6c\x0a"
+ "\xb5\x0d\x1f\x4d\x33\x17\x64\xe8\x27\x8c\x9b\x38\xee\xee\xbb\xf5"
+ "\x49\x99\x49\xfa\x3b\x93\x27\xdc\x39\x3e\x79\xe2\xf8\x3b\x27\xe8"
+ "\x93\x27\x4c\x9e\x38\x69\xf2\x5d\x13\xf5\x6b\x37\x15\xae\x9e\x90"
+ "\xbc\x2a\x57\xbf\x2e\x67\x75\x91\x7e\xe5\xea\xc2\xb5\x1b\xb3\x0b"
+ "\x73\xaf\x5a\xa6\x1f\xf8\x47\xa4\xdd\xe2\x05\x2e\x8d\x40\xce\x4f"
+ "\x03\xd5\xc5\x06\x50\x47\x1e\x81\x01\xa2\x52\x54\x48\x63\xac\x06"
+ "\xe9\x17\xf2\x6f\xed\x63\x8b\xfe\x3e\x6a\xf1\xb0\xcf\xa6\xaf\x1a"
+ "\x95\x3a\xe3\xb5\xf2\x23\xa0\x60\x29\xa0\xb8\xd8\x05\x8a\xde\xc3"
+ "\xa0\xb0\xd9\x40\xf1\xd7\x32\x50\x4e\x2e\x00\xe5\x04\x37\x28\xef"
+ "\x38\x04\xca\x9b\x9b\x40\x39\x2c\x7d\x60\xd8\xac\x0a\x11\x56\x82"
+ "\x61\x85\x3b\x40\xb9\xb2\x04\x94\x59\xc7\x44\xd8\x0b\x79\xa0\xdc"
+ "\xf5\x7f\xdb\x58\xe2\xf7\xf5\x33\x06\xfc\xd9\xb8\xbe\x61\x7a\xf5"
+ "\xcc\xa8\x10\x83\xa9\x3f\xfd\xfd\xf4\xf7\xd3\xdf\x4f\x7f\x3f\xfd"
+ "\xfd\xf4\xf7\xd3\xdf\xff\xe5\x7f\x76\x05\x4c\xfc\x56\xa9\x86\xcf"
+ "\xd0\x5b\x72\x5a\x34\xf1\x36\x45\xca\x6e\x5a\x7b\x02\xb4\xc7\x0a"
+ "\x34\xfc\x3c\x18\xf1\x53\xe3\x23\x02\x1b\xfe\x41\xf8\x8b\xd4\xf8"
+ "\xaf\x61\xa1\x35\x4a\xcd\xba\x64\x50\xe9\x40\xac\xa7\xb2\xb0\x93"
+ "\x62\x1f\xf4\x9d\xd0\x0b\x1a\xbe\x46\x96\xf6\x95\x22\x7e\xb3\x0d"
+ "\xde\xd6\xc9\xeb\xaf\x64\x38\x5a\x7f\x45\xeb\xb5\x10\x96\xaf\xd5"
+ "\x0f\xb3\xde\x46\xcb\xf6\xe9\x94\x33\xf6\x03\xd0\xfe\xd4\x17\xf6"
+ "\x32\x7b\x4b\x09\x40\xf3\x41\xb1\x4f\x95\xd6\xe2\x20\xfe\x0e\x1b"
+ "\x3c\x1b\x27\xd6\x5f\x31\xc7\x76\x0c\xc7\xb0\x5e\x1b\xfc\x42\x2d"
+ "\xe5\xd9\x2b\x87\x5b\x77\x5c\x84\x16\x3d\xdf\x87\x63\x6f\xd1\x7b"
+ "\x20\x7d\x04\x95\x7f\xb0\x0e\xd3\xef\x0e\xb7\xf6\x46\x5e\x67\x46"
+ "\x79\x4b\xf0\x19\x41\xf9\x61\x19\x07\x2f\x91\xf3\x0b\x83\x23\x8a"
+ "\xd2\xca\x78\x90\xf6\x5e\x4c\x53\x21\xe3\x41\x7a\x64\x1a\xed\xe9"
+ "\x5b\x78\x1e\x87\x43\xd1\xa4\xff\x3c\x25\x22\xf7\x67\xe3\xbb\x52"
+ "\x4e\xad\x4c\xd0\x5f\x37\x61\x66\x6e\xc2\x1d\x2c\x39\x3a\xf1\xb9"
+ "\xe4\x6b\xd2\x06\xa7\x0d\x1b\xff\x70\xb2\x52\xab\x1c\xa9\x4c\x8e"
+ "\xd5\x2a\x6f\x7f\x82\xfe\x3d\x39\xdc\xc0\x9f\x7a\x75\xca\x8e\x9c"
+ "\x9f\xe9\x23\xa7\x3d\xf3\xf4\x86\xb4\x0f\x7f\x79\x5f\xda\xfd\x8b"
+ "\x8a\x46\x7f\x96\xac\xbc\xf6\x2f\xcf\x7d\x6c\xf8\x96\x20\x46\x8c"
+ "\xa4\x7f\x97\x34\xab\xe2\x46\x5b\x08\xcb\xc9\x1b\xf5\x9f\x51\xc8"
+ "\x18\x75\x8a\x29\xe7\xee\xf1\x07\x29\xc7\x85\x2b\x92\x2c\x94\xe6"
+ "\xbe\x39\x22\x8d\x80\x18\x7f\xd4\x3f\x6e\xdc\x7b\x94\x5a\xcf\x69"
+ "\x00\xb5\xc0\xd5\x8f\xfb\x06\x41\xa1\x08\x1d\xd9\x96\x7c\x8b\x94"
+ "\xf7\xab\xf4\xef\x63\xaf\x8d\x53\x22\x86\xd8\xa4\x7b\x29\x76\xbc"
+ "\x33\xd9\xa9\x6f\x49\x51\xaf\x4a\x30\x44\x4e\xf8\x25\xbe\x25\xac"
+ "\x4a\xd0\x2a\xf1\xfd\x19\xf1\x4e\x3c\xc8\xf9\xb9\x80\xd0\x2a\x47"
+ "\xc5\xa5\xe4\xe4\xfc\xec\x0b\x47\xce\xcf\xb4\xca\xb4\x83\x39\x29"
+ "\x69\xd7\xef\xce\x1b\x9b\x90\x92\x90\x73\xb7\x56\xc9\x9f\x93\xd3"
+ "\x46\xfd\xe2\x31\xad\xf2\x8e\x4f\x93\x63\xb4\x8a\x3f\x34\x28\xe0"
+ "\x73\xe5\xfc\xc3\x9f\xab\xfe\xf6\xb7\xe3\x30\x66\xed\x71\xc5\x98"
+ "\xd9\xc7\x95\x8a\x98\xe3\x51\x8f\xc2\x1f\xb4\x91\xf0\x07\x1d\xfe"
+ "\xf4\xf7\x43\xab\xa2\x34\xb3\x55\xb9\x71\x79\xab\xaa\xb4\xbd\x55"
+ "\xfd\x08\xb4\x46\x2c\x8b\x69\x1d\x74\xff\x43\xad\x91\x8f\x7c\xd9"
+ "\xaa\xb9\x03\x5a\x07\x03\xb4\x8e\x00\x65\xeb\x48\x88\x6b\xbd\x33"
+ "\xe6\xe9\xd6\xfb\x87\x2b\x9b\xae\xed\x9b\xde\x74\x93\xfa\xbe\xa6"
+ "\x04\x2d\x34\x8d\x1a\x02\x4d\xb7\x47\x45\x35\xdd\x81\xbf\xd1\xd0"
+ "\xd0\x94\x8c\xdf\x29\x10\xdf\x14\x51\x3c\x08\x40\xd0\x72\x5c\x0f"
+ "\x70\x7c\x04\x4c\x3b\x3e\x12\x9f\xb7\xe1\x2f\x01\x7f\xa3\xf0\x77"
+ "\x07\xfe\xb0\xff\x72\x9c\xce\x3c\x02\xc3\xa0\x94\x0f\x3e\xcd\xce"
+ "\x9e\x98\x7d\xf7\x82\x19\x2a\x55\x6e\x02\x5c\x83\x5c\x53\xa7\x24"
+ "\x8c\x88\x98\x14\x91\x9b\xf0\x85\x23\x0d\xff\xd5\x2a\x1f\xff\xab"
+ "\x6a\xd0\x78\xe7\x24\xe7\xf2\x0f\xbf\xf0\xc0\x10\xe4\x3f\x04\xeb"
+ "\x70\x9f\x05\x14\x0e\xa4\xd1\x61\xe9\x9b\xee\xb4\x44\x69\x6d\x30"
+ "\xd8\x28\xeb\xb1\x88\xfb\x4c\xeb\xb0\x94\xa1\xfe\x45\x25\x86\x8e"
+ "\xdb\x46\x71\x19\x57\x48\x97\x13\x3a\x8e\x74\x3a\xaa\x4c\x8e\xeb"
+ "\x53\x36\x67\xe2\x37\xea\xbf\x66\x52\x20\x6c\x93\xca\x61\x51\x6c"
+ "\xc3\xb8\xc3\x03\xf1\x34\x21\x9e\xf4\x5f\x60\x5c\x6b\x88\xb8\x07"
+ "\x1c\x96\x87\x29\x8f\xae\xa0\x3c\x1c\x72\x1e\xb4\xff\xbb\x0e\xeb"
+ "\x17\xd9\x1d\xaf\x65\x70\x23\xa5\xb5\xba\xec\x70\xd0\xdb\xa3\x50"
+ "\x9b\x4f\x00\xe1\x71\x5a\x86\x26\xc8\xe9\x09\x8e\xce\x2a\xa0\x7d"
+ "\x7b\x7c\x7d\x28\x0c\x5d\x48\xeb\x43\xf7\x20\x0e\xfd\x06\xc5\x0d"
+ "\x9d\x10\xe5\xa1\x34\x36\x18\x6a\x74\x28\xff\x84\x79\x0f\x5d\x2e"
+ "\xdb\x39\x0c\x4b\x01\xb1\x0e\xdd\x81\x65\x2f\xc3\xb8\x92\x81\x34"
+ "\xff\x29\x56\xf0\x65\x68\x8d\x1c\x77\xa5\x35\x87\x22\x0d\x63\x0e"
+ "\xcb\x9f\xbc\x98\xe6\xc4\x40\x7c\xac\xcc\x61\x51\x3e\x8d\x71\x3d"
+ "\x21\xe2\xb6\x89\xbc\x86\xa9\x43\xc4\x59\x30\x4e\x89\x71\xfa\x30"
+ "\x71\x2a\x8c\x4b\x09\x15\xd7\x52\xcb\x71\x66\xf5\xf3\x7c\xd8\xd0"
+ "\x34\xfc\x36\xca\x3c\xbf\x7a\x79\x48\xde\x13\x90\xef\xc3\x6a\x83"
+ "\xf1\x13\x6e\x87\xb2\x8d\xf0\x35\x0e\xcc\xfb\x84\xc2\x61\xc9\x40"
+ "\x5d\x18\x76\x6a\x60\xdc\x9f\x6f\x46\x3e\x10\x5d\xf6\x10\x71\xf1"
+ "\x58\x1e\xb4\xd7\xd1\x51\x21\x70\x0e\xc2\x38\x1b\xc6\x19\xae\x22"
+ "\x0f\x2d\xb7\xe1\x74\x3e\xc2\x70\x88\xe8\x86\xd8\x54\x2a\x8f\xd0"
+ "\x0b\x18\xd4\x0d\x31\x6d\x7d\x62\xad\xbc\x5d\x5f\x0c\x2a\xfc\x3e"
+ "\xc0\x2c\x4d\xd7\x61\x7c\x2f\xea\x93\xc6\x7a\xd1\x0d\xdd\x10\xbd"
+ "\x1b\x61\x54\xb4\xb7\x95\xda\x27\x0c\x57\x59\x5d\x6e\xda\xdf\x81"
+ "\x7a\x16\xfd\x6b\x7c\x2a\x31\xdd\x4b\xa4\x43\xf3\x6b\x21\x81\x68"
+ "\xe4\xeb\x5b\x2d\x4d\x0a\x5a\x2f\x4a\xed\xa1\x43\x09\x77\x38\xb8"
+ "\xce\x46\x63\xfb\xa7\x69\x90\xd6\xf6\x12\x0d\x6a\x4c\xbb\x45\xa9"
+ "\xe5\x6b\xc5\xed\x88\x8b\x68\x78\xc8\x6b\x69\x52\xf6\xe3\x51\x36"
+ "\x5d\x43\xeb\x7e\xfb\x2c\xca\x59\x0e\x65\x34\x13\x78\xb4\x7a\x19"
+ "\x0f\xc1\x61\x5e\x7c\xfd\x7c\x9f\x45\x5d\xe5\x07\x93\xee\x9f\xd7"
+ "\x78\x07\xa8\x88\xe6\x4e\xd0\xd6\x52\x7e\x52\x19\xf9\x5a\x5c\xeb"
+ "\x06\x37\x58\xd1\xbf\xe8\x06\xad\x19\xcb\xaa\x6f\x76\xd1\x1e\xe8"
+ "\xa6\x98\xfa\xad\x00\xbc\x5e\x28\x41\x2f\xe1\xac\x91\x71\x12\x0e"
+ "\xbf\xb2\xc6\x8a\xfc\xa9\xac\x1a\x90\x60\x5b\xfc\x69\x24\xbc\x58"
+ "\xae\x1b\xea\x10\xae\x05\xbd\x16\x09\xa6\x47\x86\xf1\x93\xc1\x08"
+ "\x89\x3e\xe2\x0f\xc9\x6c\x89\x5c\x3f\x9d\x96\x18\x6c\xff\xaf\xe9"
+ "\x11\xf5\xd6\x17\x2e\xd1\xa0\x13\x34\x28\x90\x06\x45\x93\xc0\x1f"
+ "\x93\x21\xe3\xb7\x81\xd6\xe5\x4f\x73\x1d\x87\xd5\x0e\x16\xf5\x94"
+ "\xc3\x9a\x7c\xb0\xd1\x01\xb0\xc8\x0b\xa5\x90\x01\x28\x6d\x10\x93"
+ "\x83\xfc\x50\x21\xcc\x11\x94\xb7\x5e\x86\x91\xca\xaf\xc3\xb8\x69"
+ "\x12\xbe\x16\x3f\x7c\x26\xc2\x47\xeb\x65\x85\xed\x8d\xb1\xf9\x6c"
+ "\x1f\xb4\xe2\xb7\x7d\xa0\x7d\xa5\xfa\x1a\xab\x41\x38\x7e\xee\x4a"
+ "\xc1\x48\xd0\x9e\x81\x98\xaf\xfa\x94\xaa\x1e\xc1\x8b\x58\xb4\x7f"
+ "\x43\x0f\xca\x69\xf0\x7b\xa2\x0d\xf4\x2e\x29\xbf\x1c\xe2\x8d\xcf"
+ "\xde\x52\x9e\xb1\x0b\xe4\x3c\xe5\x78\xff\x3a\x93\x36\x78\x3c\xfa"
+ "\x27\x69\x6f\xa5\xc5\xa7\x0d\x97\x7d\x97\xd4\x96\x95\x09\xe3\x1d"
+ "\xa9\x2d\xfa\xbb\x93\x5f\xcf\x4d\x48\xe4\x6d\xff\x1d\x9d\xc9\x23"
+ "\xb1\x75\xff\x0b\xff\xb7\x8a\x42\x12\x78\x08\x86\xd3\xfb\x48\x7a"
+ "\x97\xfc\x05\x7c\x5b\x38\x5f\x15\x39\xaa\x90\xde\x84\xe7\x90\x76"
+ "\xfd\xd2\x15\xaa\x74\xe9\x7d\x98\x88\x19\xcb\x7d\x0e\xc3\xbd\xf4"
+ "\x7e\x3b\xc7\x35\xfe\x20\xe5\x3c\xee\xb9\xe4\x29\x8b\x7e\xa3\x3a"
+ "\xfe\xf4\x9a\xb4\xa8\x3b\x2c\x04\x93\xf8\x60\xf2\x2b\x18\xd2\x4c"
+ "\x21\x23\x5f\xe5\x14\xf8\xa7\x3a\x4a\xa9\xa4\xf8\xf8\xc4\x99\xc9"
+ "\x2f\x2e\x9e\x7f\xdb\x5f\x92\x63\xaf\xfd\x6c\x49\x33\xa5\xbf\x36"
+ "\x36\x20\xa7\x91\x3e\xaa\x9e\x28\x1f\xbd\xf3\xae\xd7\x05\x96\x45"
+ "\xf3\x55\x7f\x49\x1b\x9e\x5f\x48\xa1\xb7\x71\x5f\x8c\x7c\x95\xf1"
+ "\x17\x92\x23\x9e\x5e\xf4\xc5\x6f\x17\xbd\x76\xf2\xb1\xd1\x58\xd2"
+ "\x6b\xab\x4e\x3e\xb6\xe8\xb5\x2f\x7e\xab\xda\x4e\x90\x63\x72\x92"
+ "\xe3\xf4\x11\xa9\xeb\x5b\x1e\x1a\xcd\xa9\xba\x61\xb7\xae\xe6\xc6"
+ "\x83\x37\x1d\xb9\xf9\x58\x7c\xeb\x2d\x7f\x1d\xfe\xcf\x5b\xbf\xd6"
+ "\x3b\x46\x30\xf4\x23\xa6\x27\x8f\xe8\xf7\x23\x00\xfd\x88\x4e\xf4"
+ "\x23\x4a\xd1\x8f\x68\xf7\xf7\x23\xfe\x38\x64\x72\x89\xf0\x25\x04"
+ "\xbc\xf0\x7f\x12\xff\x8a\xfe\xcf\x3a\xf4\x7f\x12\x8f\x47\x2c\x7c"
+ "\xe4\x78\xd4\x02\xe1\xff\xc4\x44\x0f\xe2\x3e\xd0\x8d\xf8\x44\x3f"
+ "\xe8\x0f\x23\xf0\x69\xc0\xef\xd1\xb1\x91\x81\x3e\xd1\xc3\xc3\x5a"
+ "\x23\x96\xa0\x4f\x94\x82\x3e\x51\x5a\x76\xab\x66\xd6\xa7\xad\x83"
+ "\x27\xa5\xb5\x0e\xe9\xf7\x8b\xee\x6b\x4d\xd7\x8d\x6f\x9d\xa5\x86"
+ "\xd6\x07\x40\xf8\x46\x3b\x20\xf9\x8f\xea\x38\xc5\x9f\xa3\x40\xfd"
+ "\xe7\x61\x0d\x43\xfe\x1c\xdd\xd4\xf4\x67\x2d\xfe\x62\xa0\xe1\xcf"
+ "\xb1\x10\xf9\xd9\xf4\x06\xf8\x6c\x46\xa9\xed\xb8\x1a\x86\x1d\x1f"
+ "\x0c\x17\x8e\xc7\xe0\x73\xf9\x5e\x38\xfe\x0c\xa8\x8f\x0f\x51\x5f"
+ "\xf0\x95\x37\xee\xab\xe3\x23\x3e\x4f\x3d\x3e\x32\xe5\xf7\xc7\x6f"
+ "\x4b\x7f\xf8\x78\xc2\xe7\x9f\x1f\x1f\x65\x1b\xee\xef\x37\x51\x99"
+ "\x01\xc6\xee\x20\x0f\x16\xf9\x7d\xb7\x61\x50\xf2\xa0\x9d\xb9\xdc"
+ "\x1f\xfc\x99\xe4\x17\xfe\x2c\x6d\xe6\xd3\x8b\x16\xad\x50\x29\xd3"
+ "\x86\x73\xef\x52\xf2\x34\x7d\xde\x67\xa0\xcf\x99\xda\xe2\xf3\x39"
+ "\x13\x1c\x3e\x9f\x53\x3f\x28\x75\x43\x80\x7f\x76\x19\xc3\x4e\xa5"
+ "\x24\xe8\x47\x25\x73\xcf\xec\xe4\x8d\xc1\xde\xda\xb8\xe7\x93\x53"
+ "\x13\x34\x77\x77\xa0\xcf\x16\xb9\xeb\x99\x15\xbf\xa4\x1f\x7a\x6d"
+ "\xdf\x69\x95\x4f\x3f\x99\x3d\x29\x6b\xfb\x18\x94\xf9\xb5\xe4\x05"
+ "\x47\x3e\xb3\xb3\xf1\x99\x67\x9e\x6e\x3c\xfe\xd8\xfc\xd1\xef\x61"
+ "\xd8\x67\x09\x26\xd4\x9f\x7f\xcf\xf9\xf7\xf1\x17\x52\x22\x9e\x79"
+ "\xa4\xf1\xe9\x7d\xab\x56\xb5\x90\xbe\x90\x6c\xe5\x36\xaa\xcf\x12"
+ "\x8b\x3e\x89\xe2\x43\xa7\xe5\x3a\xf4\x7f\x6e\x6c\x0d\x6e\xcb\x7e"
+ "\xaa\x97\x3f\xd5\xcb\x9f\xea\xe5\x7f\x47\xbd\xbc\x1e\x44\xbd\xbc"
+ "\x71\x77\xa8\x7a\x39\x6b\xee\x7d\xf3\x26\xeb\xd7\xaf\xd0\x17\x14"
+ "\xe6\xaf\x2a\xcc\x5e\xab\xcf\xcb\xcf\xce\xc9\xcd\x19\x02\xfd\x11"
+ "\xd9\x2b\x4c\xab\x37\x64\x9b\x72\x07\xec\x85\xd4\xc9\x3e\xe9\x40"
+ "\xdf\xfa\x46\x57\x78\xdf\xfa\xa6\xb8\xd0\xfd\x12\x05\xb6\xed\x37"
+ "\x25\x87\x88\x1b\x29\xc5\xcd\x0e\x11\x77\xaf\x14\x67\x0c\xd1\x07"
+ "\x1c\x2a\xfa\x18\x37\xed\x08\x15\x87\xe1\xb5\xb2\x4f\x82\xfd\x34"
+ "\x65\xcb\xc8\x5e\x20\x9f\xa4\x1b\x6e\xfa\x1c\xcb\xd4\x83\xf1\xc7"
+ "\x64\x5f\xc6\x06\x37\xed\x90\x7d\x34\xa9\x1f\x62\x70\x58\xd2\xb0"
+ "\x9c\x37\xd9\x42\xf4\x51\xc6\x48\xf9\xba\x7d\xbe\xd1\x5c\xbd\xd3"
+ "\x72\x73\xd4\x40\xdf\xe8\x24\x88\x3e\xe4\xcd\x86\x20\xd8\x49\x32"
+ "\x2c\xfa\x93\x74\x46\x44\x2f\xed\x61\xeb\x85\x9b\x8f\x31\xcb\x8d"
+ "\x35\xe4\x53\x52\x3f\x92\xf0\x88\xbe\x64\x07\xef\x4b\x62\x5f\xb1"
+ "\x0b\xd3\x9a\xfc\xfa\x93\x5d\xe8\x1b\x47\x52\x7f\xb2\x1b\x6e\x3e"
+ "\x40\x7d\xca\x3d\x1c\xd7\x19\xc2\x35\x87\x70\xd9\xe0\xe6\x26\xee"
+ "\xf7\x89\xb4\x47\xfc\xc6\xcd\xb0\x5f\x7b\x33\x3f\xe3\x54\xf6\x0b"
+ "\x31\xfe\xa4\x4d\x7d\xc7\x31\xb9\x0c\xe4\x0b\x4a\xe5\x28\x13\x72"
+ "\xb8\x39\x44\xff\xe7\x64\x95\xe8\x07\xc6\xf7\xf7\x7f\x08\x9f\xd7"
+ "\x72\xe3\xaf\xeb\x38\xce\xf8\x04\x19\xa7\xbf\x5e\xae\xc8\x5f\xb7"
+ "\x72\xf5\xaa\xf5\x85\xb9\xfa\xa2\xd9\xb3\xf5\x6b\xf3\x73\x72\xc7"
+ "\x8d\x1b\x37\x24\x40\xff\xa2\x84\x4f\xfb\xa7\x34\xd2\x43\xf2\x6b"
+ "\x25\x3d\x4c\x43\x9f\x53\xf2\x9b\xe3\xcb\x02\xfb\x17\x7f\x4a\x93"
+ "\xfc\x5b\x2d\xc2\x24\x4b\x30\x07\x03\x60\x10\x9f\xe4\x23\x93\x9f"
+ "\x3b\x4c\x82\x69\x0d\xc6\x83\x71\xbc\x5f\x44\xfb\xf2\xfa\x44\xf9"
+ "\x7a\x83\xf0\x4c\x97\xfa\x3b\xa8\xf7\x83\xa4\x7e\xc2\x2d\xda\x20"
+ "\x3c\xd3\x7d\xfd\x0d\x85\x0c\x33\xd1\xbf\x6f\x82\xdf\xe9\xb2\x4c"
+ "\x7c\x7e\x7c\x73\x8f\xc0\xad\xd0\xfa\xfc\xfe\x5b\xf2\x82\xfa\x52"
+ "\xd7\xfb\x70\x83\x56\x82\xa9\x08\xa4\xb1\xf9\x8c\x54\x56\x8d\x1f"
+ "\x9e\xa3\x81\x78\x9a\xff\x53\xc2\xa3\xf2\x83\xe9\x08\xa2\xb1\x67"
+ "\x20\x8d\x4d\xc3\x04\xee\x06\xcc\xdf\x26\x95\x6d\x78\x50\xf9\x11"
+ "\x86\xe3\x8e\x43\x98\x78\x19\x66\xa2\x7f\x5f\x8a\xfa\x73\x7c\xaf"
+ "\x26\x0c\x9f\x4d\xfa\x84\xbf\x41\x48\xf7\xbf\xfc\xfa\x74\x91\x52"
+ "\xba\xe0\xf2\x0f\xed\xc3\xfe\x42\x7d\x40\x3f\x6d\x78\x50\xf9\xb1"
+ "\x6f\x18\x2b\xf3\x48\x2d\xc3\x04\x97\xdf\x26\x68\x8c\x89\xf1\x95"
+ "\x7f\x78\x47\x10\x9e\xeb\x49\xa7\x08\x97\x5f\x5e\xee\x20\x3c\x9d"
+ "\x12\x1f\xfd\x78\x7d\xab\x3e\x48\x1e\xff\x53\xa2\xc7\x8f\xd7\xb7"
+ "\xa6\x07\xe1\x39\x4f\xf1\x81\xe5\xba\xd5\x18\x84\xe7\xbc\xaf\x5c"
+ "\xa8\xc7\x02\x66\x77\x50\x3f\x56\xc9\x2c\x9f\x0d\x0d\xc2\x73\x44"
+ "\x86\xe9\x1b\xf4\x74\x83\x90\xed\xad\x2d\xb2\x2d\x12\x72\x8d\xe7"
+ "\xfb\x77\x31\xfc\xb4\xbf\x2d\x40\xba\x7a\x06\xf2\x49\x0f\xc1\x7c"
+ "\xf2\xa3\x4b\xea\x8b\xeb\x13\x82\xca\x77\x46\xe2\xd3\x10\x3f\x3c"
+ "\x19\x41\xe5\xfb\x4f\x09\x4f\x84\x1f\x4c\x90\xfc\x9b\x7b\x25\x3c"
+ "\x6a\x3f\x98\x60\xfd\x3f\x2b\xe1\xf1\xcf\xeb\xe8\xd5\xf9\xa4\x0f"
+ "\xd0\x7f\xe2\x15\x86\xf5\x5e\x65\x0c\x4a\x23\xe6\x0e\x46\x60\xfb"
+ "\x77\x90\x8f\xc1\xb3\xd8\xd4\x25\x74\xe6\x14\xda\xe8\x34\x3e\x36"
+ "\x78\x89\xec\xf4\x08\x73\x3d\xda\x33\x51\x06\x48\x16\xb6\x7b\x04"
+ "\xdf\xbf\x8e\x69\x33\x6d\x30\xcc\xe4\x3f\x0f\x60\x83\x11\xbb\xa5"
+ "\x38\x2c\xff\x75\x1d\x72\x1c\x85\x8b\xf1\xc5\x11\xd8\xfe\xdd\x58"
+ "\x20\xda\xb1\x11\x79\x12\x2c\xda\xfd\xf8\x8c\x50\xfb\x9b\xc3\xcd"
+ "\xbf\x14\xe9\x98\xb7\xf4\x46\x94\x7f\xd5\x18\x9b\xd7\xc2\xc0\x6a"
+ "\x76\x81\xfe\x26\x28\xed\x84\x91\x1a\xea\xe3\xef\x29\x06\x4d\x69"
+ "\x01\x73\xd1\xd9\xb8\xed\xf6\x5e\x28\xb5\xb3\x1e\x3a\x7f\x76\xeb"
+ "\x05\xd0\xd0\x3d\x0a\x5b\x9f\x02\x5d\x4b\xc9\x57\x21\xf7\xec\x7a"
+ "\xe9\x3e\xc7\x78\x4a\xdb\x05\xed\xb5\x5d\x50\x5a\x1b\x98\xb6\xf4"
+ "\x16\xd0\xb5\xd1\x59\xb6\x16\x88\x26\x3a\x68\x3e\xc5\x1d\x3b\xc6"
+ "\x56\xf2\x12\xa8\x4b\xd1\xbb\x6c\xcb\x69\x92\x69\x39\x49\xb4\xec"
+ "\x38\x03\x9a\xd7\x56\x36\x29\xb7\x9f\x21\x7a\xef\xb4\xbd\x5b\xec"
+ "\x52\x36\xeb\x66\x43\xb3\xee\x34\xb4\xe8\x52\xa1\xc5\x9c\x0e\x7b"
+ "\xce\x40\x54\xb3\x2b\x05\x5a\xd4\xf7\x41\x4b\x42\x3a\x58\x7b\xf1"
+ "\x5d\xef\x41\x18\x07\x3f\x1f\xa9\x1b\x46\x36\x55\x3f\x09\x1a\x9b"
+ "\xc0\x89\x3c\x1b\x79\x42\x3e\xeb\x87\xbe\x43\x95\xa3\xe8\x46\xd0"
+ "\x21\x7d\x3d\x48\xcb\x3d\x9d\x70\x5b\x44\x82\x0e\x92\xa9\xfd\xb5"
+ "\xd6\xb8\x41\x5d\x02\x83\xc3\xe8\x45\x1c\x3f\x27\x14\xfd\xa8\xba"
+ "\xbd\xd8\xd6\xe3\xb3\x0f\x75\xc2\x69\xb9\x2d\x05\xf3\x3e\x2d\x8d"
+ "\x7b\xf5\x96\x1e\x40\x3d\xdb\x98\x45\xe7\x86\x60\x3b\x7d\x5b\x96"
+ "\x1c\x47\xe7\x9f\xd2\xb9\xa6\xe3\xe3\x40\x6b\x75\xa7\xc1\x27\x97"
+ "\x7a\x68\x6f\x7e\x2f\x9d\x97\x40\xf8\xb0\xcd\x57\xd1\xf8\x13\xd2"
+ "\x33\x1a\xdb\xf8\xde\xdb\x10\x0e\xd3\xa3\xfc\xff\xca\xc7\x5c\xd8"
+ "\x0d\x8b\x1d\xde\x1b\x16\x5f\xf0\xee\x5b\xdc\xc7\xf6\x2d\xfe\xd6"
+ "\xb3\x6f\xf1\x37\xa5\x9b\x40\xe3\xb9\x61\xb1\xbd\xbd\x80\xcb\x40"
+ "\xdb\x5e\x70\x96\xf6\xd9\x6b\xb6\x9c\x05\xed\xd2\xa7\x50\xf6\xee"
+ "\x7f\xc0\x96\xd5\xa0\xf3\xc6\x4c\xa8\xb1\xba\xff\x06\x4b\x4b\x80"
+ "\xe1\x7b\xc8\xf3\x1f\xfa\x62\xef\xd2\xcb\xe3\x69\x4e\x4b\x82\xd6"
+ "\xa6\x1e\xcd\x75\xd4\x1e\x33\x45\x8f\xbf\x04\xfc\x19\xf0\x97\xc8"
+ "\x62\xef\x4a\x44\x5e\x95\x0e\xdb\xa6\x00\x3a\xdf\x67\xbc\x17\x14"
+ "\x67\x20\x21\x11\xe9\xd7\x86\xe1\x5b\xbc\xb7\xaa\xb8\xe0\x8e\x32"
+ "\xd8\x4a\xe7\x02\x93\x0f\x40\xf5\x8b\xfc\x51\xcc\xc7\x6c\x53\x8f"
+ "\x11\xed\xd1\x5e\xac\x47\xb1\xc5\x05\xe4\xd3\x39\x36\x1b\x15\xf6"
+ "\xcd\x46\x65\x5f\x6c\x71\x11\xc2\xd4\x22\x4c\xa6\xc4\xc3\x1e\xc2"
+ "\x85\xf5\xc6\x3e\xd4\x0d\x2a\xc4\x59\xf0\xe1\xc5\x0e\xf5\xfe\xbd"
+ "\xec\x34\xc2\xb5\xf4\xe3\x42\xdc\xd5\xdc\x4f\x4a\xe8\x90\xc3\xc8"
+ "\x4f\x7a\x1e\xe1\x28\xbd\xd5\x95\x46\x73\x86\x36\x6b\x5e\x0f\x9d"
+ "\x6f\x31\x84\x5d\x16\xf9\x91\x0f\x47\x75\x75\xa8\x0b\x06\x39\x2d"
+ "\x90\x49\xb8\x29\x9d\xb5\xb7\x07\x30\x5d\x11\x2b\x35\xa2\xbf\x08"
+ "\x73\x9d\xcc\xa8\xa0\xb3\x6e\x9b\x31\xbd\xc8\x7b\x54\x9a\x4c\x23"
+ "\xe5\xc1\xcf\xba\x25\x3a\x51\x1f\x9a\xf3\x5c\x30\xb4\x86\xc6\xc9"
+ "\x61\x3e\xe1\x23\x5c\xa8\x07\x36\x2c\x6b\x51\x73\x9e\x1d\xbc\x2c"
+ "\x00\xa7\x4d\xc2\x57\x11\x80\x0f\xc3\x19\xe2\x23\xfd\x6b\xc1\x34"
+ "\x43\x1b\x38\xbe\x87\x3f\xf4\x12\x3e\x17\xa8\xf5\x9c\xde\x45\x84"
+ "\x83\x9f\x55\x8d\x38\x9b\x36\xdc\x8b\xbe\xe3\x28\x97\xbd\xd4\xa8"
+ "\xe2\xfb\xea\x31\xfd\xbb\x5b\x7b\x22\x58\x5f\x96\x6a\x18\xdf\x53"
+ "\x7f\x2f\xd0\x5c\x2b\xc2\xfc\x07\xeb\x33\xaa\x86\xf6\xa2\xaf\x87"
+ "\x30\x74\xce\x16\xd1\xe9\x2f\xcb\x87\x67\x2e\x4a\x85\x45\xe9\xb3"
+ "\xd2\x53\x61\xce\xf4\x19\xa9\x90\x7c\x4f\x52\xf2\xc4\xbb\x7e\x7e"
+ "\x17\x7f\xb9\xeb\xe7\x93\xee\x82\xcc\x47\x1e\x4e\x85\xcc\xb9\xa9"
+ "\x30\x1f\x7f\x99\xf3\x67\x3e\x9c\x3e\x73\x7e\x2a\x64\xdd\x37\x0b"
+ "\xbf\x66\xa4\x4e\x48\xbe\x3f\x29\x73\xc6\xac\x99\xf0\xd0\x82\x3b"
+ "\x93\xef\xbc\x13\xa6\xcf\x9c\x3d\x21\x39\x59\x7a\x4e\x48\x26\x90"
+ "\xc7\x26\xcd\x9c\x9f\x94\x59\x98\x6f\xca\x4f\x9a\x3b\x6b\x06\x85"
+ "\xc0\xcc\x99\xa9\x99\x01\x7e\xa4\xc1\x73\xd1\x43\xfc\x76\xb0\xf3"
+ "\x19\x74\xbe\x31\xd4\xa1\x1e\xe0\xaf\x97\x9f\x9b\x04\x77\xfc\x5b"
+ "\x1d\xc9\x8f\xb7\x05\xb7\xc7\x51\x7b\xea\xb4\xdc\x4e\xf2\xaf\x20"
+ "\x3e\xd2\x19\xc3\xdd\x30\xee\x59\x8c\xbb\x51\xf2\x47\x22\x30\xde"
+ "\x15\x18\x3f\x7a\x09\xc6\xdf\x4a\xe7\xf0\x58\xf1\x87\xbc\x77\xa0"
+ "\x3d\x44\x1e\xdb\xa1\xaf\x34\x2b\x82\x9f\x83\x88\x72\xa7\xf3\x29"
+ "\x9c\x96\x3b\x26\xfa\xd5\xfb\x2e\x3a\xc7\x82\xc6\x93\xcf\xc1\x1d"
+ "\x43\xdb\x4d\x69\x74\x56\x15\x58\x4d\x12\x8e\x0b\xfd\x38\x86\x48"
+ "\x67\x29\xda\xea\xe8\x8c\x10\x81\xa7\xc4\xcf\x46\xd8\x08\xcf\x1e"
+ "\x8c\x93\x70\x3d\xd4\x8e\xb6\x02\x6d\xf9\x19\x6f\xa9\x01\x58\xec"
+ "\x98\x1e\xef\x65\x03\x88\xf1\xd7\x3b\x8e\xfa\xe9\xb6\xa3\xc5\x8c"
+ "\x70\xaf\x65\x28\xe8\xbc\x06\x7e\x76\x03\xdc\xde\x84\x3a\xee\xf0"
+ "\x54\x4d\x99\xc0\xce\xf3\xf3\x12\x07\x61\xf9\x92\xb0\x7c\x09\xde"
+ "\xaa\x29\xc9\xfc\xec\x51\x0e\x67\x88\x63\xf4\x1d\x8b\x70\x97\xfb"
+ "\xc3\xae\xa3\x30\x27\xcd\xef\xd0\x59\xde\x8c\x87\xab\x30\xfc\x6f"
+ "\x68\xd7\x3a\x10\x36\x99\x60\xc7\xbb\x21\x92\x9f\x93\x52\xaa\x80"
+ "\x4e\x30\x2c\xf1\xc6\x4e\xb9\xd3\x2f\x3f\xc2\xb3\x44\xb4\x63\x28"
+ "\x8b\xf3\x88\xa7\x8f\x87\x2b\x31\xfc\x23\xc4\x7f\x17\xd9\x4b\x61"
+ "\xc3\xc7\xc9\x67\xf6\xd9\x85\x0f\x39\x4e\x3e\xb3\xaf\x47\xe0\x19"
+ "\xf7\x66\x33\xf2\x92\xe6\x09\x68\x8e\xdf\x69\x31\xa0\xff\x93\x90"
+ "\x21\xda\xca\x71\xfc\x0e\x02\x3a\x77\x96\x69\x3f\x6e\x40\xbc\x13"
+ "\x9b\x8a\x7b\xf9\xdd\x41\x36\x30\xe4\x79\x4b\x8d\x10\x44\x93\x81"
+ "\xe8\x27\x1b\x82\xbc\x48\x42\x3d\x18\xec\xb4\x8c\x86\x20\x3d\x88"
+ "\x47\x3c\x13\x90\xbe\x0e\x2c\xd3\x04\xc4\x93\xe0\xed\x33\x62\xbe"
+ "\xd8\x5f\x64\x46\xf4\x95\x7c\x38\xa4\xf4\x69\x81\xe9\xef\xe8\xa2"
+ "\x74\x08\x1f\xe1\xec\x23\xf8\x3b\x7a\x88\xe7\x92\xde\xa1\x5e\x8e"
+ "\x2e\x08\xd2\xcb\xb5\x48\xcb\xcf\xfc\xe2\x2b\x82\xe2\x1f\xc2\xf8"
+ "\x29\x52\x3c\xd6\xfd\xd1\x47\x82\xe8\x3d\x81\xf1\xd3\x90\x5e\x07"
+ "\xd6\x6d\x15\xe6\x47\x67\xb1\xda\xfd\xe0\x6d\x41\xf0\x6e\x84\x9f"
+ "\x41\x7a\x43\xed\x0e\xc1\xd7\x4b\x75\x07\xe1\x35\x4e\xcb\x18\x6d"
+ "\x50\xfe\x13\x10\x7e\xb6\x8f\xbe\x31\xc9\x81\xf1\x63\x5c\x18\xff"
+ "\x10\xe9\x3a\x3e\x1f\x27\x5f\x9f\xec\x09\xd9\xb2\xe6\x3c\x92\xd7"
+ "\x98\xe5\x41\xf0\x65\x08\x97\x23\xf1\x48\x29\xf1\xe8\xa0\xd4\x77"
+ "\x3f\x2d\xd1\x50\x1d\x94\xe6\x28\xa6\xc9\x43\x3e\x4e\x90\xf5\x32"
+ "\x44\x9a\xd6\xa0\x34\x3d\x24\x47\x26\xf2\x51\x3b\x2f\xfb\xd2\x48"
+ "\x76\xd2\x1f\x07\x95\xed\x1a\xa7\x65\x6c\x54\x20\x8e\xa4\x0a\xcc"
+ "\xd7\xf4\xbc\xb0\x3b\xd7\xa0\x0e\xdd\x89\x61\xdb\x10\xe7\xdd\x54"
+ "\x07\xf6\x90\x3f\x68\x77\x01\x2b\xcd\x88\x12\xba\x3b\x76\xed\x30"
+ "\x37\xd0\x7b\x12\xbd\x13\x6e\xe6\x9c\x2d\xd5\xc9\xb1\x6b\xf1\x49"
+ "\xe1\xfc\xde\x1b\xb2\xc3\xcc\xf9\xa0\x57\xe0\x1c\x5b\x49\xf7\xa2"
+ "\xe1\xb7\x47\xca\x63\x13\x9d\x2d\x8a\xf4\xdf\x89\xed\x0e\xb0\x8d"
+ "\x08\x57\x0c\x33\x30\xfc\x71\x0c\xfb\x99\x04\xe7\xfb\xde\xf8\xa0"
+ "\x5b\x8a\x4f\x12\x79\x66\x90\xbe\x4f\xc4\xef\x51\x12\xbe\x5b\x08"
+ "\x3f\xbe\x4f\x90\xde\x15\x1e\xc2\x7d\x5e\xae\x93\x49\xfc\xbc\x4b"
+ "\xaa\x97\x3c\x3f\x4c\x4f\xe7\xba\x4a\x79\x10\xfd\xb3\xba\x21\xf1"
+ "\x2c\x3e\x1f\xc2\xe7\x1f\xe9\x9c\xd5\x52\x0f\xaf\x9f\xf4\xfd\x3e"
+ "\x3e\x1f\xc6\xe7\x01\x7c\xce\xc7\xe7\xf3\xf8\xbc\x17\x9f\xab\xa9"
+ "\x9e\xd0\x99\xf1\x74\xf6\x0d\xb6\xb5\x42\xd7\x68\x2e\xd0\x99\x41"
+ "\x38\x67\x22\x0c\xe7\x85\x57\xd8\x1b\x8d\x90\x6b\x22\xbf\xe7\x07"
+ "\xf5\x83\xc2\x22\x85\x7e\x88\x30\x8f\x6c\x97\xce\xfb\xc2\x24\x5b"
+ "\x25\xd5\x4d\x29\x4c\xe0\xcf\x44\xfc\x89\x44\x2b\x13\xb8\x22\x84"
+ "\x0e\x48\xf8\x45\x3a\x75\x88\x3c\x15\xfe\x79\xe2\x93\x9f\x9b\x64"
+ "\x83\xb1\xdc\x5f\xb3\x41\x52\x3c\xdd\x25\xe5\x25\x99\x14\xc2\x6c"
+ "\x94\x5d\x2b\xc9\x40\xd6\x29\x26\x74\x74\x10\xbd\x7b\x37\xae\x41"
+ "\x1b\x85\xf1\x1b\xd7\x78\x25\x3d\xe4\x30\x3c\x9e\xd3\xc2\xcf\xf0"
+ "\x40\x9c\x63\x2b\x48\x3e\x3c\x5e\x84\x27\xfa\xe9\x65\xac\xd3\x92"
+ "\x74\x30\x48\x2f\x3b\x50\x2f\x9f\x26\xfd\x23\x99\x11\x5f\x86\x15"
+ "\x70\xbf\x40\xd9\x8f\xff\xbc\xd0\xef\x3a\x69\x9d\x93\xb0\x05\x49"
+ "\xbd\x41\x75\x5b\x83\x78\x7e\x11\x64\x3b\x7a\x7d\x6d\xe4\xb8\xf8"
+ "\x20\xdb\x76\x10\xf3\x3b\x68\xc3\xba\x25\xd9\x68\x87\xaa\x84\xea"
+ "\xde\x38\xec\xff\x9e\xcd\xe2\xbe\x6a\xd5\x94\x9f\x13\x1e\x47\x29"
+ "\xbf\x2b\xc0\xa1\x2a\x20\x9b\x31\x2e\x47\x8e\xe7\x71\x31\xc5\x76"
+ "\xaa\x53\xaa\x3c\x1e\x57\x66\x83\xdb\xb4\x72\x1c\x88\x33\xe8\x1c"
+ "\x2a\x13\x8f\xab\xf5\xe1\x1d\xab\x91\xf0\xaa\x42\xde\xf3\x50\x31"
+ "\xc6\x85\xca\xaf\x1c\x53\x06\x11\x56\xf7\x29\x98\xe7\x66\x9e\xb1"
+ "\x65\x30\xd8\xea\x3e\x0c\xa3\x01\x62\xac\xee\x63\xb4\xf0\x7f\x84"
+ "\xd5\x5d\x8d\xbe\xcf\x0e\x8a\xff\x64\x74\x99\x42\x81\xcf\xd2\x3b"
+ "\x40\xa9\xb0\xba\x6b\xe1\x76\x50\xe3\xd3\x04\xf7\xed\x64\x4e\xab"
+ "\x3b\x07\xe1\xf2\x60\x9e\x87\x9d\x4f\x8f\x60\x5f\x2c\xf3\x80\x76"
+ "\xf6\x4e\x56\x6a\x75\x63\x3f\xc4\x7d\x02\xc3\xbd\x6c\x9e\xe7\x3b"
+ "\xfc\x39\x99\xb7\x62\xac\x66\x9e\xe7\x3c\x9b\xb1\xf3\x13\xfc\xfe"
+ "\x82\xcd\x88\x28\x65\x28\x4f\x66\x75\xa7\x40\xbb\xc3\x81\xf0\x13"
+ "\x81\x55\x8e\x71\x2d\xbd\xa0\x84\xcb\x74\x3f\x43\xe5\x58\x0d\x96"
+ "\x47\x77\x19\xcb\xc2\x62\xc7\xde\x70\x79\x33\x3e\xab\xc6\x5e\xcf"
+ "\xbf\xb5\x63\x0d\xac\x62\xac\x2e\xa9\x0c\xfb\x24\x66\x2c\x87\xc7"
+ "\xce\xd0\xdf\x51\x5b\xcd\xa7\x61\xd8\x36\xf2\xeb\x53\xb0\x5f\xf7"
+ "\x15\x9d\xed\x1c\x2d\xf0\x8e\xd5\x51\x7f\x8e\xc5\x60\xba\xaa\xb1"
+ "\xa3\x38\x8e\x8a\xb1\x19\xd1\x0a\x66\x47\xfb\x1e\x4d\xbc\xb0\xba"
+ "\x4f\xe3\xef\x2b\x20\x1e\xd0\x59\xe3\xf3\x3c\x74\xd7\xc6\xd8\x8c"
+ "\xcb\x31\x63\x27\xe1\x2f\x0b\x7f\xbb\x90\x8e\x97\x99\x25\xee\x53"
+ "\x3a\x9b\x13\xd3\x1f\xc2\xef\x46\x07\x3f\xa7\x9a\x68\x80\x48\x84"
+ "\x3f\x84\x7a\x95\x8e\xfa\x49\xb4\x76\xf0\x7c\xaa\xc6\xfe\xbb\x83"
+ "\xf1\x32\xfc\x0f\xa9\x0c\x7f\x93\xca\xe4\x92\xea\x1b\x85\x39\xf1"
+ "\x7d\x81\x93\x71\xba\x5c\x4c\x9b\xa8\x71\x61\x1d\x46\xbe\x96\x11"
+ "\x1f\x91\xaf\x65\xc4\x4b\xc4\x8f\x7d\xcb\xdd\x58\x8e\x44\xcd\xe5"
+ "\x98\x44\x1d\xab\x4a\x1c\x73\x99\xfb\x3d\x89\x93\x1c\x1c\x4f\xe2"
+ "\xcf\x11\xcf\x12\x8e\x47\x9b\x38\x89\x55\x24\x66\x78\x2c\x7a\x98"
+ "\xb7\x89\xb9\xe6\xb9\xb7\xb9\x97\x6d\x02\x55\x22\x94\x29\xa8\xdf"
+ "\x63\x35\xe7\x61\x39\x5b\xf0\x99\x8e\xf1\x70\x2d\xe6\xf5\x09\xe2"
+ "\x9d\x44\xf9\xb1\xca\xc4\x0c\xc4\x39\x13\x71\xe5\x10\x7d\x97\x94"
+ "\xa0\xc5\xef\xac\x4b\x44\x7f\x45\xa2\x19\x71\xd7\x78\xb5\x89\xbb"
+ "\x64\x1d\x22\xfd\x11\x7c\x23\xbd\x79\x1d\x5b\x2f\xd0\xce\x33\x33"
+ "\x37\xc6\x69\xad\x66\x0a\xaf\x85\xf6\x02\x84\x31\x53\xbc\x09\xdf"
+ "\xe7\xe0\xfb\x0e\x20\xfd\x99\x5b\xe0\xd8\x36\xae\xac\x80\xee\x41"
+ "\xf9\x64\x99\x5b\x03\x4b\x0b\xd4\x65\xed\x05\xbd\x18\xd7\x0b\x18"
+ "\x56\x6a\x35\xd7\xf2\x7e\x1a\xca\xd5\xed\xd1\x26\xe9\x3c\x15\x89"
+ "\xc6\x61\x8e\x52\x66\x35\x9b\x10\xb6\x00\x46\x97\x69\x14\x1c\xde"
+ "\x9c\xc3\xcb\xe3\xdd\x53\x06\x94\xa6\xcd\x78\x18\xa8\xbf\x87\x65"
+ "\xb7\xb7\xf5\xee\x20\x1d\xf5\x7a\x2b\x12\x7b\x50\x3f\x2f\xb7\x19"
+ "\xab\x61\x4e\x6f\x59\x24\xf2\x43\x81\xe1\x9e\xb6\xde\x16\x84\x3d"
+ "\x21\x74\x76\x93\x3b\xba\xcd\xb8\x03\xdc\xda\xc4\x2c\x77\x45\xa2"
+ "\x6b\xde\xa6\xcb\x6c\x8e\x91\x7d\xf2\x78\x6f\x19\xea\xe9\x61\x98"
+ "\x73\xd6\xad\x6a\x2f\x40\x9d\xdf\xe4\xc4\x70\x37\xd7\xff\x39\x67"
+ "\xfb\xd8\xdc\xa7\xd8\xf9\x79\x9b\xbe\x60\x6d\xc6\x1c\x58\xea\x80"
+ "\x61\xd7\x6c\x63\x5e\xaa\x17\x27\xba\x0e\xc3\x35\xa7\x7b\x80\xea"
+ "\xc4\xec\x6c\x2f\x9b\x73\xf6\x3c\x5b\xfa\x14\xf6\x71\xcd\x29\x48"
+ "\x23\xf2\xc5\x51\x4d\xfc\x36\xb7\x19\x8f\x21\x0d\x58\x6f\xcc\x13"
+ "\x31\xec\x75\x84\x6d\x8a\x7e\xfc\xac\x16\x4e\x74\x55\x83\x3b\x26"
+ "\x31\xcb\x53\x99\x68\xf4\xc6\x24\xee\x42\x19\xd5\x78\x2b\x13\x7b"
+ "\x3c\x31\x49\x3a\x77\x65\xa2\x8b\x55\x25\x19\x51\x4e\x83\x49\xe6"
+ "\x97\x2c\xa0\xc7\xef\x95\x97\xb8\x1e\x25\xa1\x9c\x92\x6a\xd0\xcf"
+ "\x66\xc4\x4b\x56\x99\x64\x16\x75\x20\xa9\xe6\x72\x4c\xd2\x2e\x84"
+ "\xab\x11\x7a\x98\x74\x88\xf4\x92\xee\x4c\xc2\xb0\x5f\x7a\x30\x2d"
+ "\xc6\x37\xe2\xaf\x15\x7f\x1d\xac\x6a\x9c\x01\xf1\xc7\x10\x7e\x6f"
+ "\xc5\xb8\x49\x4c\x3b\x2e\x63\x1c\x80\xa6\xdd\xd1\x05\x34\xce\xc1"
+ "\xc7\x05\xcc\xff\x40\x9a\x49\xa7\xdc\xf8\x74\x63\xdd\x18\x67\xf0"
+ "\x4e\xad\xe0\x75\x90\xc5\x8c\xcb\x98\xe7\x99\xc6\x96\x5e\xa0\xfa"
+ "\x84\xe1\x95\x88\x23\x76\x9c\xd1\xc5\xf5\x75\xdc\x2a\xa2\xe1\xf2"
+ "\x66\x03\xe1\x51\x63\xbc\x19\xc3\xce\x38\x98\x01\x30\xaf\x1e\xaf"
+ "\x76\x7c\x06\xe2\xc2\xfa\x30\x5e\xe3\xa9\x18\xaf\x7b\x30\x82\xd9"
+ "\xc9\x7e\x5d\x7e\x1a\x30\x9f\xa3\xe0\x9e\xca\x58\x7b\xc1\x0e\x7c"
+ "\xff\x18\x78\x1d\x36\x9f\xe2\x7a\xd5\xd6\x7b\x0a\x79\xf9\x0e\x86"
+ "\xb7\x70\x3b\x46\xbc\x67\x31\xe3\x35\x4b\x2f\xdc\x54\x46\xba\xb0"
+ "\xb4\x00\xca\x30\x2f\x17\xd2\xd2\xe3\xa9\x1c\x8f\xfd\x7f\xcc\x27"
+ "\x76\xc2\x2f\x5c\xbc\x5e\x4f\x40\xbd\x3e\x8a\x69\x3e\xe6\xfa\xc4"
+ "\x2a\x27\xec\x0a\x67\x4b\xc9\xa6\x91\x0d\x9b\xe7\x76\x91\x7e\xfd"
+ "\x8b\xec\x1f\xd9\x32\xb4\x05\xcb\x64\x5b\x46\x76\x8c\xfa\x62\x64"
+ "\xcb\xbc\x92\x2d\xf3\x4a\xb6\xcc\xeb\x67\xcb\xe8\x6e\x46\xd4\x77"
+ "\x17\xb7\x5f\xc8\x4f\xb2\x5d\xf3\x3c\xc9\x2c\xd8\x76\x51\x1a\x0f"
+ "\xda\x25\x2f\xda\x25\xfc\x65\x79\x85\x5d\xaa\x91\xec\x92\x52\xb6"
+ "\x4b\x74\x3f\x1c\xd6\x3f\x6f\x28\xbb\xe4\x95\xec\x92\x47\xb2\x4b"
+ "\x12\x3d\x7f\xf3\x5e\xc9\x2e\x69\xc7\x62\x79\x13\xe9\x0e\x22\x15"
+ "\xd6\x9b\x32\x92\xf3\xbc\x4d\xde\x32\xa4\x0b\xf9\x98\xa8\xf1\x0a"
+ "\x7b\x64\xc0\x7e\x98\x92\xec\x91\x07\xd3\x7b\x65\x7b\xe4\xe4\x76"
+ "\x23\x83\x6c\x12\xc9\x6e\x99\x5b\x0f\x64\x8b\xb8\xdd\x71\x8f\x70"
+ "\x93\xdd\x41\xfe\x4d\x0b\xb6\x3b\x88\x2f\x0b\xdf\xb5\x92\x3d\xdb"
+ "\x15\x8d\x36\x20\xda\x5d\xca\xe6\x99\x1d\x9c\x47\xcb\xcc\xa6\x32"
+ "\xd2\x39\xb4\x09\x35\xac\xbd\x0c\xd0\x26\x19\x91\x46\xd4\x73\x0f"
+ "\x60\xdd\xed\x71\xa3\xbd\xc0\x7c\x5d\x1e\xac\xcb\x73\x7a\xfb\xac"
+ "\x73\x0b\x20\x72\xa9\xc3\xa0\x9d\x73\x96\xd9\x91\x37\xb6\xa5\x05"
+ "\x65\x30\xd7\x61\x40\xfb\xf0\x31\xcc\xee\x62\xde\xd9\xcb\x6d\x7a"
+ "\xa4\xc1\x35\x67\x75\x53\x34\xdd\x7d\x3a\xf7\x02\x6b\x42\xfb\xf1"
+ "\xd7\x39\x67\xb5\xd1\x4b\xba\x60\xf8\xec\x6c\xe6\xf5\x60\x5d\xc4"
+ "\xb2\x1a\xb1\xcc\x66\xa4\x7b\x17\xd6\xcb\x1a\xac\x87\x3d\x6e\xac"
+ "\x8f\xfe\x75\x11\xeb\xd5\x4a\x7c\xd7\xf3\x72\x54\x24\xd5\x60\x5d"
+ "\x34\x7b\x79\x7b\xd7\xc5\xfb\xbe\x58\x1f\x6b\x78\xfd\x89\xc1\xf0"
+ "\x4a\x51\x1f\xbd\x22\xdd\x21\x2f\xf1\x4e\x29\xea\x23\xc9\x04\xe3"
+ "\x1b\xf1\xd7\x8a\xbf\x80\xfa\x48\xf5\x8c\x51\x3d\x2b\xb8\xe0\xab"
+ "\x67\x4f\x49\xf5\x2c\x46\xd4\x33\x0f\xfa\x34\x9e\xcd\xa2\xae\x11"
+ "\x7e\xea\x1f\xf7\xd7\xb5\xd8\x71\x3d\x74\x47\x81\xd0\x1b\xaa\x6f"
+ "\xbc\xae\xa1\x8d\x1d\xaf\xf1\x56\x8c\x47\x7c\xcc\x4e\xf5\x00\xf5"
+ "\xf2\x9f\xd4\x1e\xce\x2d\x60\xff\x5c\xe6\xb9\x09\x65\x3e\x5e\x87"
+ "\xf6\xee\x8b\x39\xbd\xec\x9f\x68\xeb\x1a\x10\x57\x0f\xe6\xe7\xc2"
+ "\xba\xa4\xf1\x56\xf2\xba\xb4\xcb\xb3\x99\x70\x4e\xd8\xd5\x8f\x83"
+ "\xb7\xa7\x81\x75\xe9\x4a\xe3\xb4\x4e\xcb\xcf\x4d\x36\x70\x8b\x7b"
+ "\xad\x2c\x3f\x47\xff\xc7\xa3\x93\xde\x77\xdb\xe0\x9f\x0b\xb8\xbf"
+ "\x83\x75\xb0\x60\x2b\x5c\x77\x06\x26\xa5\xa1\xbe\x03\xbe\x47\xe1"
+ "\x7b\xfa\xbc\xd1\x9f\xa0\xbf\xf1\x46\x07\xe6\xed\xa4\x7a\xc8\x2c"
+ "\x13\xc9\xdf\x4b\x43\x3d\xd4\x30\xa7\x21\x8a\xc5\x4e\xbd\x97\xee"
+ "\xca\xa5\xbb\x71\xf1\x7b\x18\xf2\x20\x01\x9f\xb1\xfb\x2f\x42\x1c"
+ "\xfe\xe8\x7e\xcc\x32\xf2\xb1\xf0\x3d\x99\x6d\xd4\x0d\xd9\xb3\x01"
+ "\x12\xa3\x1d\xe2\x4e\x5c\xba\xc3\x17\xfd\xf4\x38\x7a\x67\x96\x4e"
+ "\xba\x6f\x49\xdc\x8b\x1b\x83\xf9\xd1\xbd\xb8\x45\x06\xa8\x2f\xe4"
+ "\x77\x75\xe9\xea\x2d\xec\x88\xc7\x49\x7c\x18\xe3\x92\x69\x21\xda"
+ "\x90\xce\x5b\x90\xce\x05\x0b\x37\xa5\xc1\xe7\xe6\xd0\xe7\x3f\x3a"
+ "\x2d\x93\xfa\xcb\x1f\x26\xbe\x5a\xe6\x49\x98\xf8\xa3\x32\x9f\xc2"
+ "\xad\x25\xa5\xb6\xdc\xb3\x81\xf5\xd2\x59\xe2\x34\x4e\x51\xea\x66"
+ "\xff\x93\xee\xc4\xdd\xea\x01\xcd\x3c\xb3\x8b\x59\x7b\x59\x93\xd5"
+ "\x7c\x16\xea\xe9\x7c\xf3\x12\x6c\x3f\x63\xa6\x26\xb0\xca\xa9\xfa"
+ "\xbe\x0d\xcc\x4d\xe3\x4c\x4e\xcb\x3d\x3a\x1b\x2c\xd1\x0a\x59\x24"
+ "\x9a\x79\xff\x56\x3b\x55\x8f\xb8\x62\x08\x57\x1b\xa6\xf7\x54\x4e"
+ "\x45\x7d\xbd\x27\xcd\xa6\xb8\x86\xaf\xc9\xc7\x7a\x6c\x2e\x28\x86"
+ "\x9b\xcf\xc0\x3d\xfc\xbe\x4c\x56\x31\x75\x12\xd9\x03\x0c\xd3\x62"
+ "\xd8\x0e\xc4\x9f\x82\xf0\x05\x36\xb8\x28\xad\x8d\xbb\x67\x87\x0c"
+ "\x87\xef\x59\xc1\xeb\xe4\xa4\x5d\x99\x65\x01\xe7\xd1\x29\x20\xf0"
+ "\x74\x3d\x3a\xc9\x2e\x2d\x74\xb4\xcf\x9e\x27\xba\xe8\x5e\xb0\xd2"
+ "\x2d\x10\x8f\xf2\x21\xfa\xbe\xc3\x3e\x4d\x37\xb3\xdc\x53\xf1\x5a"
+ "\xb1\x0b\xfb\x1d\x93\xd5\x36\x68\xd3\x84\xe3\xa7\xf7\x22\xeb\x42"
+ "\x1c\x35\xe5\x1b\x00\x88\x3f\xc4\x4f\xac\x37\x5e\xe4\xc3\x97\x64"
+ "\x8f\xea\x37\x50\x3f\x7f\x72\x86\xcc\xaf\xf0\x32\x99\x3a\x51\xf4"
+ "\x85\x27\x1f\x62\x16\x06\x4d\xc3\x69\xde\x64\xf2\x9b\x82\x07\x49"
+ "\xbb\xfa\xd0\x8e\xd0\x18\x36\xdd\xe1\x55\xa4\x63\x68\xab\x27\xa3"
+ "\xff\x3f\x63\x92\x34\x3e\xe6\xb0\xba\x67\x92\x6d\x09\xd9\x66\xf1"
+ "\xb3\x53\xfb\xf1\x4f\x69\x6d\x8f\x47\x3b\xc4\x6d\xd3\xe6\x89\x5b"
+ "\x85\xfc\x5d\x84\x97\xf6\x96\x74\x61\x7c\x91\x83\xf5\xb0\x8a\xcd"
+ "\x06\xea\x6b\xd0\x39\xa4\x18\xf6\x47\xd4\x6b\xd6\x54\x48\x34\x4d"
+ "\xf9\x63\xd3\xf0\x4b\xd0\x6d\x06\x55\x7d\xff\xb8\xd4\x94\xa3\x34"
+ "\x0e\x25\xc6\xdf\xa6\x4c\xb4\xc1\xcc\x53\x32\x5d\xe4\x87\x20\x6f"
+ "\x35\xe4\x97\x90\x3f\x42\xf3\x22\x45\x25\xcc\x45\x7e\x09\xc2\x2e"
+ "\x97\xcb\x40\xe5\x13\xe5\x9a\x62\xf2\x2f\x17\xad\x15\x88\x2e\x11"
+ "\x3c\x28\xda\x04\x1a\x7e\xa7\x90\x87\xe6\x55\x66\xf2\xb2\x50\x99"
+ "\x79\x59\xb8\x8d\xa5\xfe\xc4\xdd\xd8\xb7\xe3\xe1\x35\x88\xab\xc9"
+ "\x06\xe9\x69\x42\x9f\xa6\x4c\x0c\xb7\x67\x06\x75\x33\x03\xfb\xc2"
+ "\xc3\x4b\xbd\xac\xb3\x1b\x52\xe6\x88\x31\xbd\x94\x39\x5e\xf2\xc5"
+ "\x5d\xa4\xbb\xe9\x99\xd4\x16\x5b\x4b\xc8\xde\x72\xd8\x6b\x11\xb6"
+ "\x0b\x61\x52\x25\xd8\x54\x7e\x67\xa3\x78\x46\xd2\x13\xdb\xb0\x99"
+ "\x36\x48\x59\x60\xe7\x6d\x7d\xb1\x5d\xfe\x66\xf8\x8d\xcf\x28\x56"
+ "\x99\x9e\x19\x9a\x96\xf1\x19\xd4\x96\x79\x2e\xb2\x5e\xcc\xe7\x06"
+ "\xd2\xa3\xd2\x4d\x70\x23\xea\xe4\x97\x5b\xb7\xc0\x75\xa4\x63\x2c"
+ "\x66\x6a\x9a\xe0\x7b\x4a\x03\xb3\xa0\xdf\x8b\x16\xb5\x60\x03\xdc"
+ "\x8c\x75\x68\xd2\x19\x48\x79\x7f\x59\x89\x1e\x69\x05\x28\x3f\x07"
+ "\xe4\x9f\x7c\x81\xf0\x29\xd4\xc7\xa9\x3f\x47\xba\x98\x72\x4a\xd6"
+ "\x45\x7c\xb7\x5d\xc9\x56\x20\x5f\x5b\xc5\x18\x48\xea\x1c\x9a\x03"
+ "\xe9\x84\xd4\x49\x54\x5e\xb1\xe6\x3a\x75\x34\xbb\xc8\xe2\x99\x68"
+ "\xd3\x1a\x6d\x90\x9a\x83\xcf\x56\xfe\x43\x5b\x22\x7d\x37\x22\x9c"
+ "\x8e\x5d\xf4\x10\x4c\x2b\x86\x25\x33\x8b\x82\xea\x49\xad\xd3\x92"
+ "\xba\xc4\x06\xcb\x0c\x42\x36\xa9\x06\xc2\x15\x86\x86\x46\xc6\xcf"
+ "\xe1\xfd\x16\xcb\x9b\xfa\xb9\x7e\x2b\x8d\xa9\xa6\xf2\x75\xde\x84"
+ "\xab\x5e\x29\x6c\xb6\x17\x69\xad\xb3\x78\x8d\x68\x9f\x8d\xde\xaa"
+ "\xfb\x0d\xfc\x5d\x8a\x63\x52\x3b\x1a\x1a\xff\xe6\x89\xfc\x5e\x48"
+ "\x98\xaa\x17\x78\x36\x1b\x9a\x6e\x3a\x43\xdf\x74\x70\x82\xc2\xa1"
+ "\xcd\x30\x58\x6b\xd2\xc4\x5d\x95\x08\x23\xfa\xfa\x53\x47\xf4\x61"
+ "\x1e\x4e\xcb\x54\xbd\x0d\xee\xd7\x8a\xf9\xa0\x0c\x43\xd8\xfd\x58"
+ "\x58\x07\xa8\xce\x89\x3a\x3d\xed\x42\x5b\x03\xaf\x7f\x87\x50\xe7"
+ "\x5b\x25\xfb\x4b\xe3\x45\x51\x9d\x30\xcd\xd1\xa6\xe3\xfa\xad\x64"
+ "\xca\xa9\x65\x01\x77\xcd\x61\xdc\xc0\xdf\xd4\xa3\xf8\x6b\xc1\xdf"
+ "\x49\xe9\xfb\x34\xfe\xec\xf8\x8e\x56\x6f\x5a\x17\xe7\xdd\x2b\x39"
+ "\x0a\x1b\xc6\xf5\xa1\x5f\x4f\xdf\x36\x98\x7a\x8c\xbd\x92\xa0\x94"
+ "\xdf\xeb\x5f\xa2\xb1\x84\xa9\x3d\x28\x03\x69\x8e\x75\x1a\xbf\xd3"
+ "\x11\x69\x23\xbe\xb3\xd2\x1a\xe6\x6a\xd9\xea\x20\xba\x75\x2d\x35"
+ "\x0e\xd0\xdf\x4e\xe5\x9f\x46\x72\x67\xb4\x66\x86\x9e\x45\x35\xcc"
+ "\xde\x5c\xeb\x06\x9a\x3b\x74\x5a\xa6\x61\xfd\xaf\xaf\x15\xe3\x12"
+ "\x9b\x97\x13\x3e\x49\x27\x98\x5c\x7e\xc1\xe7\x0c\x83\x7e\x83\x82"
+ "\xbe\xb7\xd5\xed\xe5\x63\x35\x07\x59\x69\x96\xb4\x56\x62\xda\x26"
+ "\xac\xe7\xd3\xe8\xce\xc9\x73\x30\xed\x63\x86\xbc\x6e\x36\xf2\x3b"
+ "\xad\xec\xd8\xfe\xf4\xd6\xf1\xf5\x4d\xd3\xd0\xfe\xa5\x9e\xe4\x73"
+ "\x41\x18\xce\x6d\x0d\xe2\xdc\x83\x71\xd8\x1e\xf5\xb6\x19\x5d\xe0"
+ "\xa1\x32\x63\xda\x8f\x2f\xba\xd4\x74\xe7\xe6\xd6\x02\xb4\x3b\x48"
+ "\x07\x43\x59\x09\x5b\x36\x2d\x73\xcb\x59\xe6\x92\xcb\xdc\xdc\x40"
+ "\xf5\x63\x9a\xc3\x06\x6f\xcd\x0e\x5b\x27\xfa\xcb\x31\x3d\xa6\x39"
+ "\x41\xc8\xd1\x8b\xbc\x0a\x94\xe3\x74\xad\x90\x61\x5a\x7a\xa0\x0c"
+ "\xa7\x63\x8b\x94\xb6\x1b\x7f\x07\xf1\x77\x54\x7c\xfb\xff\xd2\xcc"
+ "\x7e\xef\x28\xd7\x34\xac\xa3\x69\x3b\xd0\x5e\xf4\x0a\xd9\x4c\xe7"
+ "\x77\x48\x31\xd2\x9b\x6f\xb0\xed\xb9\x4c\x77\xa4\x9e\x05\x0a\x27"
+ "\x1d\xa7\x70\x2f\xfa\x37\x36\x48\xab\xc1\x78\x2d\xd5\x5f\xba\x1f"
+ "\xcc\x3f\xbe\xff\x1e\x08\x48\xe3\x77\x2d\x46\x6f\xdb\xb5\x8b\x74"
+ "\x17\xd3\xd4\x46\xbb\x77\xed\xc2\xfc\x1c\x32\x5f\x31\xec\x34\xc5"
+ "\x93\x9e\x3a\x2d\xd3\xa3\x90\x2f\xbc\x2d\x77\x60\x3f\x31\xb4\xef"
+ "\x31\x3d\xb9\xdf\x47\xd3\x8e\x33\x90\x2c\x7b\xe1\xde\x14\xb4\x63"
+ "\x68\xbf\xef\xd7\x8b\xf6\xe7\xde\x54\xfa\x46\xfb\xf9\x25\xbe\x4f"
+ "\x6a\x43\x3b\x75\xa9\x6a\x8a\xfe\xb2\x12\x22\x2f\x29\xb1\xc0\x55"
+ "\x6f\xb8\xdd\xb1\x77\x25\x5a\x7b\x8e\x42\xbb\xfb\x3d\xd0\x3f\xc9"
+ "\x71\x4c\xa0\x7b\xea\x4a\x37\x31\xcf\xbb\x97\x0e\xa9\xad\xee\xf3"
+ "\x4d\xfc\x3e\x5a\xb8\x97\xf3\xe3\xb9\x4e\xf4\x02\x96\x72\xdc\x12"
+ "\x7f\xde\xe8\xd8\xb3\x92\xb9\xf7\x74\xd3\xd9\xf5\xba\x21\xcf\x5f"
+ "\x82\xc4\x97\x8b\x21\xb9\xf6\x12\x24\xd4\x5d\x02\x03\xfb\x97\x41"
+ "\x59\x8b\x7e\xdc\xd2\x0b\x5a\x40\x3b\x91\x35\xac\x00\x34\x75\xc5"
+ "\xe8\xcf\xb9\x41\xe1\xa9\x44\x7f\xce\x8d\xfe\xdc\x79\x03\xd9\xcb"
+ "\x7e\x7f\xee\x32\xf7\x95\xa7\x1e\xe6\x77\x99\x56\x4e\x3d\x3c\xd4"
+ "\x08\x8a\xa8\xe5\xa0\x45\xfa\x4a\xcf\xc1\xf4\xa7\xa2\xba\xd0\x97"
+ "\xc4\x32\xdb\xa4\xf2\x22\xcf\x77\x44\x1b\x21\x92\x97\x15\x6d\x38"
+ "\xab\xbc\x5f\x1f\xb6\x6d\x56\x92\x4e\x39\xa8\x2e\x51\x19\x9e\xa5"
+ "\x39\xee\xa3\x37\xb9\xd4\x45\xb5\xcc\x45\xe1\xa6\x11\xcc\x85\xe1"
+ "\x05\x94\xf7\x11\x0c\x77\x5a\xee\xad\xb1\xa9\x6f\xef\x0d\xa7\xa3"
+ "\xd8\x5f\x92\x6c\xcd\x8c\x1b\x99\xb2\x8c\xfa\xe5\xc6\x2d\x6e\xf4"
+ "\xc7\xcf\x51\x3d\x9e\xa1\x9b\x97\xc7\xdc\xfa\x75\xb4\xde\x60\x86"
+ "\x86\xd6\x42\xd0\x1c\xe8\xaf\xd0\xd7\xb9\xda\xfa\x07\x6a\x43\xa8"
+ "\xff\x10\x9d\x87\x38\xab\xc6\x19\x59\xa9\x21\xc4\xb9\xe3\x61\xf7"
+ "\xbf\x46\x89\xbd\xad\x33\x16\xd8\x60\x1d\x3f\x2b\x9f\xef\x07\xe2"
+ "\xf6\x34\x7d\xa2\x03\x79\x10\x68\x03\xd2\x35\x74\x8e\x7a\x5f\xc5"
+ "\x94\xc3\x4d\xc3\xc9\xf6\xa7\x2b\x84\x2f\x34\xe5\x90\x68\x0b\x66"
+ "\x7c\x29\xe6\x2b\x66\x1c\xb4\xc1\x7c\xde\xc6\x17\x8c\x24\x9d\x98"
+ "\x71\x9a\xc5\x4e\x79\x9b\xe0\xc6\x95\x41\x59\xbe\x1b\x96\xb3\xca"
+ "\x29\x87\x18\xaf\x2b\xe7\x80\xed\x5b\xe3\xa4\x3d\x3e\x8e\x1b\x16"
+ "\x3b\xd1\x37\x98\x88\x71\x87\x29\x0f\x3b\xc2\x20\xdf\x07\x8b\xb5"
+ "\x12\x33\xd0\x26\x3c\x24\xd9\xc3\x19\x27\xc4\x38\xf4\x8c\x13\x7d"
+ "\x98\x16\x7d\xc5\x6b\x9d\x96\x74\xf4\x7f\xd7\x94\x48\x73\xea\xf6"
+ "\xed\x7c\x6f\x6a\x7a\xa2\x0d\xf2\x9a\x28\xcc\x34\x02\x74\x26\x3d"
+ "\xeb\x09\xeb\xeb\x05\x94\x73\xe6\xaf\xf9\xba\x3f\x25\xdc\x80\x38"
+ "\x0a\x64\xbc\xd8\xde\xbe\xd5\xa7\x5c\xb8\x10\xc3\x76\xc8\x78\x11"
+ "\xe6\x3a\xfc\xae\xee\x87\x11\x69\x0e\xfa\xa5\x59\xd8\xa7\x1c\xf3"
+ "\x16\x86\x35\x06\xa5\x69\x0d\x4a\xd3\xe1\x97\xa6\x4c\xca\xa7\x37"
+ "\x28\x8d\x3b\x30\xcd\xcc\xa8\x81\xb4\xcd\xd4\x07\xa6\x99\x99\x1c"
+ "\x94\x26\x6d\x20\x6d\x33\x17\x04\xa5\xc9\x09\x4a\x63\xf2\xe3\x2d"
+ "\xad\x5f\x4a\xc6\xb0\x5d\x41\x69\x6a\x82\xd2\x1c\x92\xbf\xd1\xf7"
+ "\x6c\x15\xbe\x01\xea\x13\xca\x14\xe5\x7a\x18\xe3\xb1\xfc\x0b\x4f"
+ "\x5f\xc1\xff\xc6\xbe\xe1\x94\x83\xa5\xfb\xc5\xbd\xbe\x64\x57\x69"
+ "\xbd\x03\xd9\x73\x9a\x93\x21\x9d\x20\xbf\x93\xf2\xea\x86\xfb\x2e"
+ "\x90\x0e\x39\x2d\xf7\xc5\x0f\xe4\xc7\x7d\xc9\x81\x74\xde\x97\x16"
+ "\x48\xe7\x7d\x99\x03\xf9\x71\x5f\x4e\x50\x1a\x53\x50\x9a\x1d\x7e"
+ "\x69\x1a\xa4\x7c\x6a\x82\xd2\x1c\x0a\x4a\xd3\x38\x50\x3f\xef\x3b"
+ "\x11\x94\xe6\x74\x50\x9a\x5e\x1f\x0f\xef\xa7\x4a\xac\xa0\xfa\xe0"
+ "\xb4\xdc\x8f\xfd\x9f\x05\x89\x57\xe0\x9d\x56\xd6\x67\x79\xaf\xb6"
+ "\xd0\xeb\xfb\x9f\xad\x16\xfb\xf4\xf8\x1d\x0a\x5d\x70\xff\x7e\x79"
+ "\x2e\xfb\xb5\x4b\xae\x08\x9a\x63\x45\xde\xf6\x34\x9b\x5d\xd8\xe6"
+ "\xde\x6f\xb4\xc1\x9c\x06\x79\x2d\x0b\xad\xff\xe1\x77\xf0\xf0\xfe"
+ "\xc8\xfd\x19\xa2\xfe\xdd\x5f\x2b\xcd\xfb\x50\x79\xb0\x9f\x71\x7f"
+ "\xed\xff\x1a\x5d\x19\xa9\x44\x17\xdd\x45\x81\x38\x6c\xfd\x7d\x8d"
+ "\x7e\x5a\x29\xcf\x8c\x59\x32\xad\xf5\x62\x0d\x12\xad\x4d\xb6\xd3"
+ "\xfd\x20\x4e\x4b\x46\x9c\x5f\xff\x84\x68\x75\x1c\x2d\x76\xa9\x83"
+ "\x68\x76\x08\x9a\x33\x32\x84\x8d\xca\xc8\x90\xed\x49\x58\xfd\xab"
+ "\xd8\xac\x6b\xc7\x12\xd2\x1a\x8b\xb6\x5a\xf4\x37\xb1\x8f\x45\x74"
+ "\x77\x42\x46\x05\xf7\x7f\xd7\x5d\x02\x7a\xb7\x96\x4c\xe6\x6b\x30"
+ "\xa4\xb2\xb4\xd2\x3d\xd0\xe4\xfb\xb4\x14\x7c\x4b\xeb\x00\x19\xbf"
+ "\x13\x0a\x32\x2e\x34\x97\xd8\x89\xd6\x26\x79\xbd\x12\xd2\x22\xfc"
+ "\xba\x8a\xcd\x5a\x5a\x1f\x42\x6b\xa9\x9a\x1d\x93\x08\xa6\x0b\x79"
+ "\x7b\x48\xe6\x01\xdd\x29\x8d\xb0\xb5\xe1\xfa\x4a\xfe\x7c\x15\x34"
+ "\x3c\x98\x2d\xf4\x67\x56\x62\x60\x7d\x88\x40\x3d\x9d\x95\x16\xa8"
+ "\x73\xb3\x32\x03\x75\x6e\xd6\xf2\xc0\xfa\xa0\xc4\xfa\x30\xcb\x14"
+ "\x94\x66\x47\x50\x9a\x6a\xbf\x34\x15\x52\x3e\x87\x82\xd2\x34\x06"
+ "\xa5\xf1\xb7\x7f\x58\xe6\x59\x1d\xfd\xfd\x4e\x6e\xef\x67\xf5\xf8"
+ "\x7d\x2b\xab\x79\x3b\x35\xcb\x2d\x87\x49\xfb\xa0\xf9\xda\x2c\x81"
+ "\xef\x01\x5d\x90\x8d\x42\xf8\x07\x12\x03\x69\x78\x20\x25\x90\x86"
+ "\x07\x66\xcb\xdf\xd2\x7a\x8e\xcf\xba\xe1\x81\x4a\x49\xcf\x1c\xd1"
+ "\xdb\xe0\xa1\x68\xf7\xc3\x8f\x92\x6f\x46\xed\x13\x5f\x33\xb7\x05"
+ "\x7d\xca\x0b\x34\x67\xe0\x82\x6e\x13\xa8\xe8\x9e\x1a\x1b\x3c\xd8"
+ "\x82\xfd\xb9\x43\xb4\xa6\x1e\xfd\xa9\x79\x88\x63\x09\xe6\x5f\x83"
+ "\x79\x20\xef\x1e\x38\x12\x44\x43\x53\x10\x0d\x27\xfd\xbe\xb5\xf8"
+ "\x6d\xf3\x2b\xb7\x96\xce\xa5\x78\x81\xfb\xd6\x0f\xb8\xe4\x70\x1a"
+ "\x03\xc0\x32\xf6\x94\x72\x3f\x20\x8d\xd6\x29\xc6\x76\xc2\x03\x5f"
+ "\xd1\x78\x81\xc0\xf9\x60\x82\x3f\x6f\x05\x2f\x1e\x9c\x14\x48\xc7"
+ "\x83\x19\x81\x74\x3c\x98\xe5\xb3\x35\x0f\x48\x6b\x61\x1e\xcc\xb3"
+ "\xc1\x22\x7e\x1f\x0c\xf2\x42\x1f\xed\xd6\x5f\xdb\x34\x92\xfc\xd4"
+ "\x07\x3f\x72\x60\x79\xd9\xd3\xca\x58\xe9\xfb\x63\x36\x92\xfc\xee"
+ "\xa9\x87\xd0\x3e\xd3\x5e\xdd\x5b\x31\xac\x45\xc8\xf5\x41\x2c\xff"
+ "\xfc\x23\x02\xef\x83\x2d\xbc\x1d\x18\x49\xfe\xef\x83\x15\x2c\x66"
+ "\x73\xd8\xfe\x59\x5f\xec\x66\xbd\xbc\xa6\x17\x71\x38\xe4\xfa\xe0"
+ "\xad\xda\xac\xf7\x56\xce\x6c\x72\x5a\x66\x6b\x6c\x30\x0b\x44\x9f"
+ "\x66\x66\x14\xea\x7e\x0d\xca\x0f\xfb\xc0\xb3\xa5\xbe\xcc\x66\xba"
+ "\xd7\x8c\xd6\xc8\xd1\x5d\x58\x51\x62\x2d\xc8\xec\x14\xbf\x7a\xe5"
+ "\xd0\x17\x4f\x63\x9d\x30\x87\x6c\xaa\x96\xec\x06\xad\x79\x6c\x76"
+ "\xdb\x81\xc6\x59\xac\xee\x33\xdc\x27\xc7\x78\x90\xd2\x9a\xfd\xd2"
+ "\xda\xa5\x71\x90\x1e\x8a\x1b\xef\x06\x75\xb3\xc3\x4e\x77\xfe\xc6"
+ "\x09\x3f\x7e\x8e\xa2\x19\xed\x05\xa6\x39\x2c\xa7\xa1\x31\x13\xbe"
+ "\xae\xc0\x04\xea\x71\x25\xa0\x6e\x2a\xee\xe4\xb8\xe5\xb5\x43\xd4"
+ "\x3f\xb2\x96\xf4\x80\xd5\xd1\x41\x63\x9a\x6a\xb1\x4e\x6c\x0e\xa8"
+ "\x5c\xa0\xe9\xab\xdc\xac\x45\x5b\x0c\x9e\xca\xcd\x3a\xa4\x0d\xdb"
+ "\xb3\xd9\x09\x64\x03\xfd\x79\x37\x73\x66\xe6\xc3\xf3\xe6\x24\x3d"
+ "\xf2\xf0\xac\x05\x33\x27\xeb\x17\xac\x5e\x9b\x9b\x93\x94\xbf\xde"
+ "\xa4\xdf\x58\xb8\xda\xb4\x7a\xdd\x2a\x7e\x4d\x99\x3e\xdb\x24\x9e"
+ "\x86\xbc\xec\x22\x53\x2a\xbd\x26\xea\x0b\x0a\x73\x37\xf0\xd7\xd1"
+ "\x43\x20\x10\xc9\x6a\x53\x6e\xa1\x7e\x54\x4e\xa2\xfe\xbe\xec\xd5"
+ "\x79\xb4\x6b\x22\x14\xae\xc9\xfa\xc2\xdc\xc2\xdc\xec\x1c\x7d\xaa"
+ "\x3e\x99\x30\xfb\xa3\xf3\x93\x67\xb2\x6c\x9f\x8a\xb0\x3d\x47\x1f"
+ "\xba\x87\xec\x14\xb5\xeb\xdd\x30\xef\x2b\xf2\xe1\xf8\xbd\x62\xa8"
+ "\x87\xd8\x26\xd8\x9c\x96\x39\x5d\x03\xdb\xf1\x39\xae\x40\xfd\x9d"
+ "\xab\x09\xd4\xdf\xb9\xba\x81\xed\xf8\xdc\xa0\xfa\x3f\x37\xa8\xfe"
+ "\xcf\x9d\x3d\xb0\x1d\x9f\xbb\x3c\x28\x4d\x41\x50\x9a\xb2\x7e\x3b"
+ "\x83\xb4\x6e\xe7\x76\x69\x6e\x75\x50\x9a\x83\x41\x69\x8e\x06\x7d"
+ "\xb7\xf8\x7d\xa3\xef\x3a\xf7\x94\xbf\x6f\x80\xdf\x5d\x72\x5d\xf7"
+ "\xd9\xb7\xb9\x2e\x19\x86\xda\x1e\xda\x5b\x23\x60\xe7\x69\xfd\x60"
+ "\x7b\x04\xec\xbc\xfe\xfa\x4f\x36\x89\xd6\x8a\x0a\xff\x7c\xde\x8b"
+ "\x92\x6d\xeb\x2a\xf7\xb5\xa1\x5d\x28\x8b\x5b\xcf\xc1\x3c\x5a\x07"
+ "\x4c\xb0\x76\x5a\x3f\xcc\xf6\x2d\x76\xd6\xc7\x82\x86\xd2\xd2\xbd"
+ "\x5a\xcc\x32\x87\xef\xa3\xc7\xb0\x28\xfc\xa1\x9d\x9a\xb7\x4b\x5e"
+ "\xab\xbf\x03\x61\x6c\xc0\xaf\xdb\x51\x50\xba\x1d\x7c\x9d\x23\xe5"
+ "\x97\x49\xfb\x7c\x68\xef\xb9\xa6\x5c\x9c\x59\xd1\x45\xf7\xbd\x51"
+ "\xde\x88\x43\xcd\x94\x73\x1e\x92\xee\xed\xa2\xbb\xed\xe2\x10\x67"
+ "\xff\xfa\x7f\x1b\xcc\xe3\xfb\x84\xc8\xe7\x23\x5f\x4f\xf8\x3d\xf3"
+ "\xdc\xb2\x7f\x41\x7d\x85\x50\xb6\x23\xf4\x5a\x70\x88\x2e\xb7\x78"
+ "\x3b\x9a\xb6\x76\x11\x4d\xb4\x26\x98\x59\x75\x6e\x68\xaf\x75\x63"
+ "\xff\x15\xb4\xbc\x3f\x65\x3e\x0b\xd6\x06\x37\xd0\xf8\xf0\x32\x33"
+ "\x94\xd5\x2b\xbd\x1d\xac\x3f\x1d\xf5\xd1\x32\xf9\xbe\xf0\x1d\x14"
+ "\x8e\xe9\xb1\x2f\x61\xa7\x35\xe3\x61\xc6\x23\xa2\x09\xae\x69\x24"
+ "\xf5\xf7\x32\x6b\x25\xdf\x77\x57\x3d\xe2\x0a\xb9\x9e\x59\x09\x56"
+ "\xa7\x25\x13\xdb\x3f\x73\x9a\x6c\xb3\x9b\x6b\xb8\xed\x53\x62\x38"
+ "\xb6\xfd\x99\xfa\x70\x7e\x8a\x64\xdf\x0b\x68\x1d\x9b\xd3\xf2\x50"
+ "\xfc\x95\x60\x89\xee\x66\x2c\x37\xd6\xc5\x23\xaf\x6d\x4d\x8e\x90"
+ "\xec\xab\x06\xd3\x2d\x90\xd3\x7d\x9f\xf2\x91\x6f\x44\xed\x31\xd6"
+ "\x55\x87\xe8\x2b\x3e\xfc\xc7\x17\xf8\x1a\xe9\x87\xd0\xff\xcb\x94"
+ "\xeb\xc1\x35\xf8\x8d\xf6\xef\x21\x3e\x9e\xc8\xd7\xfe\x60\x7f\xb2"
+ "\xa8\x00\x7d\x36\x9d\x03\x6d\xe3\x43\xad\x72\x1c\x1f\x27\xa2\xb8"
+ "\x12\xe6\x6a\xd6\x75\x51\x5c\x57\x7f\x9c\xd8\xb3\xc0\x9a\xcd\x6e"
+ "\x0a\x77\xcb\xe1\xa2\x6d\x79\x38\x2a\xe8\x3b\x5e\xfe\xc6\x77\xec"
+ "\xf7\x67\x56\x48\xf8\xed\x68\x73\x15\xe2\x8c\x87\x87\x9f\xad\xe3"
+ "\xf5\xe6\xe1\x0c\x39\x9e\x8f\xa9\x1d\xa0\xb9\x31\x07\x78\x63\xa7"
+ "\x1c\xe1\x3e\x17\xa6\x79\xf7\x5b\x57\x04\xf6\x31\x14\x8c\xee\x78"
+ "\xc5\x30\xc2\x43\x75\x86\xee\xdb\x24\x5f\x0d\x71\xa5\xd0\xbe\x0a"
+ "\xd2\x91\x8d\x6e\x88\x2f\x98\x4a\xe3\xcf\x0f\x73\xbd\xa5\x30\xc2"
+ "\x4b\xf8\xa8\x4d\x24\xdc\x84\x6f\x0f\xf9\xb4\x7c\x7d\xe6\xc3\x58"
+ "\xfe\x4c\x77\x38\x59\x61\x7c\x8f\x1f\x2f\x23\xf0\xdb\x15\x58\xd6"
+ "\xf9\x9a\xa0\x6f\x9d\xfc\x4d\x63\xbd\x42\xf7\xe6\x47\x49\x71\x13"
+ "\xaf\x94\xd7\x48\xbe\x27\x67\x7e\x56\x60\x7e\xf3\x8d\x41\xf8\xcd"
+ "\x41\xdf\xbb\xe4\xef\x6a\x3e\xc7\x30\xbf\x46\xce\xa3\x5c\xac\xf3"
+ "\x3a\x72\x70\xab\x3d\xe2\x4a\x67\xa7\x60\x9a\x13\x7e\x79\x0e\xc2"
+ "\xef\xd3\x3e\xf9\xcd\xef\x91\xf1\xe1\xbb\xc3\x0f\x0e\xfd\x92\x05"
+ "\x6a\x19\x4e\xcc\x6f\x2c\x88\xf3\xa5\x5b\xa0\xbf\x4a\x59\x83\x74"
+ "\x77\xe1\x5a\xa1\xbb\x0b\xb2\x02\x69\x59\x60\xf4\xc3\x69\xf2\xd1"
+ "\xb2\xa0\xcc\x0f\x0e\xeb\xe7\x82\x8a\x60\x5d\x2d\x32\x93\x8e\x93"
+ "\xbe\x2e\x38\x1c\x22\xce\x25\xc5\xb5\x86\xd6\xf1\x05\x36\xbf\x70"
+ "\xa9\x7f\xb4\x70\xa6\xe4\x27\x90\x7d\x76\xf4\x95\x2e\x90\xef\x7b"
+ "\xe5\x3a\x49\xe7\x96\x8d\x17\x77\x8b\xa3\x5e\x2f\xd4\x07\xe3\x15"
+ "\xfb\x7d\x24\x1c\xfd\x38\x17\xd8\x85\x8f\xb7\x30\xd3\x57\xb6\x85"
+ "\x4b\x6c\xf0\xb0\x3c\x4f\x64\x17\x63\x83\x0b\x66\x87\xeb\x77\x20"
+ "\xfc\xee\x40\x9e\x2d\xac\xf5\xf1\x6c\xe1\x21\x3f\xbc\x47\xfd\xe0"
+ "\xfe\x80\xdf\x2d\x7e\x70\x27\xaf\xa6\x9b\x42\x57\x16\xba\x02\xf3"
+ "\x5a\xa4\xf1\xe1\x58\x14\xe7\xcb\x6b\x91\xde\x0f\xae\x03\xbf\x93"
+ "\xc3\xcb\x67\xd1\xec\xf0\xf2\x59\x64\x0c\x2d\x9f\x45\x65\x7e\xf9"
+ "\xee\xbe\x7a\xbd\x5a\x74\xc4\x8f\x9e\x7a\xfc\x6e\x0a\xac\x47\x8b"
+ "\x4e\x06\x7d\xf7\xcb\x9f\xa1\xed\x38\x58\x9c\x16\x41\xe1\xa6\x11"
+ "\xa0\x15\xf5\xec\x11\xf0\x8f\x7f\xf7\x92\x88\x27\x1a\xf9\x1c\x1c"
+ "\xcd\x6f\x0a\x38\x43\x30\x1c\xc1\xf8\xc5\x67\xc8\xb4\x63\x7b\x1d"
+ "\xf2\x6e\x52\xb9\xfd\xb3\x7a\xa9\xfd\x7b\x24\x47\xcc\xdb\xa4\x74"
+ "\x31\xcb\x27\x59\xe1\xda\x32\xc4\xdb\x60\x83\x47\xb2\x04\x7f\x1e"
+ "\x41\xfd\xcf\xe7\xbe\x09\xab\x48\xe9\x42\x7d\xba\xd4\x0d\x59\x33"
+ "\xf1\x79\x19\x9f\xa3\x03\xdb\xd7\x47\x5a\x98\x45\x31\xbf\xde\x12"
+ "\xdc\xee\x3e\x72\x1a\xfb\x1e\x97\xa2\xdd\x65\x59\x21\xe2\x5c\xcc"
+ "\xa2\x7a\x78\x60\x78\x16\xcd\xef\x5c\xb2\x41\x56\x3a\xd1\xeb\x17"
+ "\x6e\x60\x96\x61\x0b\x08\xde\x46\xf9\x61\x9a\x70\x72\x93\xf7\x5d"
+ "\x09\xdd\xcb\x32\x05\x95\xe3\x3b\xc4\xf5\x8d\x28\xc7\xa3\x73\x82"
+ "\xf2\xde\x1d\xba\x1c\x59\x07\xb1\x1c\xdf\x85\x2e\x47\x56\x13\xe7"
+ "\xad\x12\xcb\x32\xc0\xef\xc8\x3a\x8d\x65\xf9\x8e\xf3\x3d\x30\xdc"
+ "\x21\xf7\x53\x4b\xbf\xc3\xfe\xbf\x12\x78\xda\xf9\x25\x3e\xb9\x09"
+ "\xb8\x47\xe3\xa3\x6b\x20\x73\x60\x9e\x8f\x4e\x64\x96\xc8\xf9\x36"
+ "\x78\x34\x4f\x6e\xaf\xa4\xf0\xd9\x82\x16\xe4\x93\x92\xf8\x84\xe5"
+ "\xc1\x74\xe1\xe4\x2d\xd7\x4f\x31\xcf\xf4\x28\xd6\xff\x2c\x79\xff"
+ "\x93\x03\xdb\x73\xbb\xcc\x47\x8c\x6b\x0c\x8a\x73\xf9\xc5\x9d\x0a"
+ "\x88\xdb\xd2\x1f\xde\x2b\x87\x7f\x3f\x39\x3d\x16\x1f\x24\x27\x94"
+ "\xcf\x63\xef\x04\x96\xfb\xb1\x44\x51\x3e\x94\xd1\x00\x5e\x3f\x96"
+ "\x81\x32\xba\x1c\x5a\x46\x8f\xe5\x84\xd6\xb5\xc7\x4a\x38\xbe\x58"
+ "\x08\x85\xaf\x06\x65\x77\x99\xeb\xa0\x24\xa7\x81\xf2\x79\xec\x98"
+ "\x2c\x9f\xef\x57\xc6\xc5\x10\x54\x46\x4f\x37\x2c\xde\x22\xca\xba"
+ "\xb8\x2d\x10\xf7\x62\x5d\x68\x5d\x5c\x9c\x8c\xe5\xf4\x84\x2e\xe7"
+ "\xe2\xd9\xe1\x75\x71\xb1\x11\xcb\xe3\x19\xa8\x8b\x8b\xc5\x9c\xae"
+ "\xa4\x83\x41\x71\xb5\xcc\x12\x32\x9f\xa3\xe4\x17\xd9\x60\x71\x2f"
+ "\xcd\xd3\xf9\x85\x9f\x08\xd4\x3f\x2c\x03\xa5\x23\xfe\xb9\x45\x3f"
+ "\x86\xe4\xd0\xad\x07\xe5\xd5\x74\xd2\x69\x59\x92\x18\xc4\xab\xf3"
+ "\xdd\xb0\xe4\x9d\x3e\xa5\xf2\x3e\xc1\xaf\xc7\x9f\x0a\xa4\x69\x49"
+ "\x46\x68\x7e\x2d\x59\x8e\xfc\x3a\x1f\x9a\x5f\x4b\x4a\xc2\xf3\x6b"
+ "\x09\xc9\xff\xfc\x40\x7e\x2d\x39\xe2\xcf\x2f\xaf\x45\x94\xef\x36"
+ "\x1d\xea\xc6\xe5\x65\xac\x5e\xd8\x72\x6d\x34\xea\x8a\x48\xd3\x4b"
+ "\x69\xba\xa2\x5d\x42\x4f\xf4\x37\x81\xe6\x1c\x2c\x39\x21\xd7\xff"
+ "\x61\x35\x10\xc9\x2e\x2f\xa6\x35\xdc\x74\xe7\xb4\xd6\x6a\x3e\xdf"
+ "\x64\x75\x27\x03\x8d\x37\x06\xe6\xfb\xb8\x21\xb4\x2d\x78\x3c\x0d"
+ "\x79\x5a\x15\x22\x5c\xda\x53\xf0\x78\x45\xa0\x8d\x78\xbc\x20\x50"
+ "\x46\xc8\x37\x25\xbf\x4d\x55\xf1\x7d\x7e\x57\x96\xd9\xe3\xb6\x81"
+ "\x32\x5b\xba\x4d\xc8\x6b\x69\x76\x10\x7d\xae\xd0\xf2\x5a\xaa\x0d"
+ "\x2f\xaf\xa5\x89\xe1\xe5\xb5\x34\x83\xe4\x65\x83\xa5\x65\x81\xed"
+ "\xc6\xd2\xe5\x81\xe5\xc5\x7c\x31\x1d\x53\x0e\xba\x96\xbe\xbf\x6f"
+ "\xb9\xe5\x1f\xd9\x38\x92\x15\x9d\x37\x80\xf4\x8f\x20\x1a\x7f\x28"
+ "\x8e\xb0\xb8\x91\x87\x15\xc5\x61\xef\x31\x8f\x6a\xc7\x7e\x25\xad"
+ "\xcf\xd3\x0f\xa7\xb1\xb2\x65\x0b\xbd\x4a\xc5\x64\x7c\x57\x76\x43"
+ "\xf6\x08\xaf\x52\x55\x46\x6b\xc9\xf8\x5e\x45\x3e\x3f\xb1\x2c\xcf"
+ "\x5f\x16\xb4\xa6\x6c\x8f\x38\x3b\x92\xc6\x39\xbf\xc0\xf4\x17\x84"
+ "\x5c\xb2\x15\x81\x7c\x5c\x56\x11\x5a\x2e\xcb\x0e\xa1\x5c\xbe\x08"
+ "\x2d\x97\x65\x2d\xe1\xe5\xb2\xcc\x86\x72\xf9\x62\x60\x3d\x5a\xe6"
+ "\x92\xea\xd1\x76\x4a\xa3\x5f\x47\xfe\xea\xf2\xd5\x04\x83\xef\x58"
+ "\x47\x96\x3f\x44\xf1\x49\xbd\x72\x3d\xa2\x34\xcb\xa9\xff\xcf\xf3"
+ "\x97\x60\x0c\x12\x0e\x3f\xbc\xcb\x33\xa3\x7b\x43\xd5\x93\xe5\x74"
+ "\xa7\xad\x62\x5c\x01\x68\x90\x87\x59\xfb\x09\x47\x21\x00\xe2\xf8"
+ "\x98\xe0\x28\x9c\xee\x80\xf6\x83\xaf\x91\xe1\xf8\xb8\xa8\x80\xad"
+ "\x60\x4e\x23\x10\x5c\x10\x6e\xa9\xfc\x91\xbc\x1d\x21\x78\x82\x0b"
+ "\x82\xe9\x11\xf5\x31\x3b\x31\xb0\x3e\x66\x43\xa0\x7e\x2e\xa3\xf9"
+ "\x89\x68\x2f\xda\x39\x7c\x5f\xe0\xb1\x28\x26\xff\x38\x75\x33\xbb"
+ "\x24\xa8\x6e\xa2\x0e\x3c\x71\x8b\xa4\x03\x9e\x40\x5a\xb3\xab\x43"
+ "\xeb\x40\xf6\xe1\xf0\x3a\x90\xdd\x1a\x5e\x07\xb2\xe9\xdc\x99\x2f"
+ "\x6c\xf0\x44\x7c\x60\xdd\xcc\x76\x07\x96\x1d\xf3\xe5\x75\x13\x62"
+ "\x7e\x48\xdd\x44\x5f\xe8\xda\x70\xf5\x50\xf2\xff\x15\xf5\x97\x00"
+ "\x7e\x00\xcf\x34\x58\xaf\x90\xbe\x27\x8e\xd0\x1c\x12\xda\x78\x23"
+ "\xf1\xb0\x8e\xf7\xd1\x9e\x68\xf1\xe7\xe3\x1e\xd1\xd7\x2a\xed\x86"
+ "\x15\xb3\x68\xcd\x9e\xe0\x67\x4e\x4c\x60\xf9\x9f\xe8\x0a\xcd\xcf"
+ "\x27\x68\x6c\xbe\x34\x34\x3f\x57\xe8\xc2\xf3\x73\xc5\x44\xda\x1b"
+ "\x3f\xb0\x4e\xad\x98\xad\xdf\xc0\x7d\x14\x9e\xe6\x1c\xac\x78\xfd"
+ "\xfb\xb5\x4f\x2b\x76\x04\xb6\x4f\x2b\xf2\x7e\x78\xfb\xb4\xa2\x35"
+ "\x74\xfb\xb4\xc2\x16\xba\x7d\x5a\xe1\x12\xf5\x21\x27\x39\xb0\x3e"
+ "\xe4\x68\x03\x75\xe2\x89\xae\x1f\xaf\x7d\xca\x29\x0b\xaa\x03\xe5"
+ "\xdd\x90\xab\x40\x9f\x62\xa7\x90\x5b\xee\xe7\x81\x34\xe6\xd4\x86"
+ "\x96\x5b\xce\x51\x94\x5b\x79\x68\xb9\xe5\x9c\x0c\x2f\xb7\x1c\x9a"
+ "\x13\x2d\x1f\x28\xb7\x5c\xf5\x0f\xf7\x29\x72\x27\x05\xca\x2c\x57"
+ "\xff\xc3\x65\x96\x5b\x12\x5a\x66\xb9\xd5\xa1\x65\x96\x7b\x58\xc8"
+ "\x2c\xb7\x2b\x50\x66\xb9\x2d\x81\x32\x43\xbe\xfd\x68\x32\x5b\x39"
+ "\x31\x48\x66\xf9\xdd\xb0\xf2\x7d\x94\xd9\x49\x21\xb3\x55\x9b\x02"
+ "\x69\x5c\x99\x19\x5a\x66\x2b\x8d\x28\xb3\xfc\xd0\x32\x5b\xb9\x23"
+ "\xbc\xcc\x56\x36\xa0\xcc\xf2\x07\xca\x6c\x65\xe3\x0f\x97\xd9\xca"
+ "\xde\x40\x99\xad\x3c\xf5\xc3\x65\xb6\x2a\x39\xb4\xcc\x56\x65\x84"
+ "\x96\xd9\xaa\xe5\x42\x66\xab\x6a\x02\x65\xb6\xca\x1c\x28\x33\xe4"
+ "\xdb\x7f\x51\x66\x28\x9f\x1e\xb1\x5e\x77\xd5\x77\x7d\x7c\x4c\x7b"
+ "\x15\xf6\x11\x8c\x8d\x62\x4e\xc0\xc8\x75\x47\x92\xe1\xbb\x08\xd3"
+ "\x35\xb0\xed\x36\x46\x49\x61\x8f\x0c\x94\x83\xd1\x80\xed\x6a\x6f"
+ "\x4b\x09\x5f\xd7\x25\x64\x48\x3c\x47\x38\x31\x46\x66\xe4\x6b\x03"
+ "\x50\xc6\x8c\xce\x31\xa6\xb6\x18\xe1\x1d\x84\x87\xce\x71\x09\xc2"
+ "\x65\xfa\x21\x7e\x59\xf8\x35\xe6\x29\x3d\x74\xd7\x40\x37\xac\x7e"
+ "\x56\xe8\xaa\x31\xd8\xff\xad\xc7\xb8\xc7\x85\x9e\xae\x09\x1a\x33"
+ "\x31\x86\xf1\x7f\x57\x93\xff\x5b\x1f\x5a\x4f\x57\x5f\xc1\xff\x5d"
+ "\x4d\xfe\x6f\xbd\x5f\x7f\x35\x76\xa9\xdb\x16\xd4\x5f\x5d\x9d\x17"
+ "\xed\x10\xba\xc3\xfd\xd8\xca\x14\xec\xa7\xaf\xae\x0e\xa2\x19\x65"
+ "\xf3\x64\x8c\x44\xf3\xe0\xa0\xf4\x87\xc3\xd0\xdc\x82\x34\xbf\x1b"
+ "\x86\x66\xdb\x15\x68\xa6\xf1\xee\x77\x07\xd6\xad\x27\xe3\x24\x3d"
+ "\x08\xd1\x2f\x7f\x32\x39\xb4\xfc\x9f\x0c\x92\x3f\x64\x99\x4a\x98"
+ "\x9d\xa7\x0f\x84\x2b\xf0\x87\xa3\xb5\xfa\x04\x4b\x3a\x12\x02\xb6"
+ "\x36\x18\x67\x18\xb8\x96\x01\xba\x47\x7b\x0b\x42\xea\xde\x93\x76"
+ "\x51\x1f\xd7\x64\x04\xd6\xc7\x35\x9a\xc0\xfa\x88\xbc\x0e\x48\xb7"
+ "\xc6\x10\x18\x6f\x74\xfd\x78\x36\x76\x4d\x4d\x90\x0e\x7c\xd2\x0d"
+ "\x79\xd7\x09\x1d\xc8\x5b\x1b\x44\xc7\x91\xd0\x3a\xb0\xa6\x15\xcb"
+ "\xff\x49\x68\x1d\x58\xd3\x15\x5e\x07\xf2\xa8\x3e\x7f\xe2\xaf\xb7"
+ "\xf3\x4b\xd2\x22\x83\x60\x12\x42\xdb\xbc\xbc\x94\xd0\xe3\x3a\x79"
+ "\x0b\x04\x8f\xf3\x76\x07\xf2\x38\x2f\x2f\x90\x87\x58\x96\xff\x3a"
+ "\x0f\xfb\xef\xe6\x70\x5a\xf2\x82\xeb\xbf\xb5\x1b\xd6\x4a\xf5\x7f"
+ "\xdd\xc2\x20\x1a\xa5\xfe\x4f\xa8\xb1\xac\xb5\x71\xc8\x4b\x6b\x68"
+ "\x5e\xae\x4d\x0e\x5d\xe6\xb5\x19\xd8\x06\x59\xbd\x03\xea\xd2\xda"
+ "\xe5\x18\x3e\x9f\xe6\x0e\x68\x0c\xab\x0e\xc3\xe7\xbb\x41\xc3\xdb"
+ "\xab\xfe\x76\x69\xed\x0e\x1a\x23\xe7\x63\xcc\xa8\xbf\xd1\xf1\x90"
+ "\x49\x6d\x10\xd1\xb5\xac\x24\x78\x4e\x74\x2d\x1f\xff\xa0\x75\x2c"
+ "\xb4\xaf\x26\xda\x0c\x99\x56\x87\x1b\x64\x7d\x27\xf8\x20\xdc\x36"
+ "\xaa\x17\x04\x2f\xc3\x8a\xb1\xce\xb2\x20\xdb\xb4\x4e\x13\x5a\xc6"
+ "\xeb\xf4\xe1\x75\x67\x5d\x8a\x90\xf3\xba\x82\x40\x39\xaf\x5b\xe0"
+ "\xb5\x0c\x5b\x40\x65\x45\x1d\xf8\x41\xf5\x84\xe6\x4e\xc3\xda\xfb"
+ "\xed\x8b\x3b\x0a\xb6\xc2\xf0\x33\xb0\x8e\xf7\x35\xca\x95\xcc\x15"
+ "\xbd\x4d\x01\x2d\xdc\x06\xe4\x8b\xf3\x30\x10\x66\x99\x1b\x94\x6c"
+ "\xfb\x9a\x0e\x8a\xab\xb7\x30\x17\xdd\x53\x23\xdf\x39\x83\xba\x70"
+ "\x6d\x27\xac\xfb\x26\x20\x3d\x7a\x7f\x56\x81\x23\x51\x8c\xef\xe7"
+ "\x1b\xe4\x71\xf8\x70\xe3\xfb\x08\x33\x5b\x5e\xf7\x2b\xe6\xc2\xf2"
+ "\xd3\xc2\xb6\xcb\x48\x13\xed\x2f\x27\x9a\xae\x6c\x07\xf2\x1b\x64"
+ "\xfd\x15\x73\x73\xf9\x47\x7c\x7b\x5b\xf2\x8f\x61\x5c\xce\x15\xc6"
+ "\x73\xfd\xea\x41\x7e\x8f\x3f\x1e\x71\x3f\x4d\xbe\x5b\xde\x9f\xe2"
+ "\xb4\x14\x68\xae\x82\x4b\xa2\xa7\x20\x39\x90\x9e\x82\x34\xf4\x2d"
+ "\x73\x24\x1c\xb3\xaf\x82\x23\xce\x7a\x70\x32\x8c\xf3\x82\xea\x0c"
+ "\x14\xbe\x44\xf7\xdd\x58\x6b\x7b\x20\xca\x0d\x6a\xd1\xb7\x2b\x38"
+ "\x40\x7b\x43\x18\x3f\x77\x60\x5a\x13\xcd\xc1\xf1\x35\x04\xba\x69"
+ "\x4d\x6d\x66\x8f\x74\xe6\x5b\xc1\xaf\x89\xa7\x6d\xc6\xf3\x4d\xb5"
+ "\x7b\x59\xcf\x7e\x7e\xd6\x57\x41\x40\xff\x6f\x37\xad\xff\xa1\x75"
+ "\x18\x5b\x61\x5a\x37\x3c\x35\x4b\xd4\xf5\xc2\x20\x9f\xb4\x20\x4c"
+ "\xff\xaf\x80\xfa\x7f\xd3\x42\xd7\xf3\xa7\xae\xd0\xff\x7b\x8a\xfa"
+ "\x7f\xd3\xfc\xdb\x4d\x31\xcf\xf3\xd4\x6c\x7f\x9f\x94\xce\xe3\xd2"
+ "\xaf\x24\x3f\xf3\xa9\x4f\xc7\x56\x83\xd6\x4d\x73\xda\x58\x37\xad"
+ "\x3d\x2d\x54\x5f\xb5\x6d\xf6\x46\x40\x5d\xd5\x0c\x2b\x20\x5d\xa4"
+ "\xb6\x8c\xea\xeb\x53\x7c\xbc\x30\xda\x2d\xea\x62\xa9\x99\xd9\x13"
+ "\xbb\x50\x87\xf2\x8d\x32\xae\x92\x2d\x46\xb1\xef\x63\x58\x17\x44"
+ "\x5a\x7b\x78\xbb\xa8\x20\x7f\x95\xfb\xad\xee\x0b\x40\x78\x9b\x4b"
+ "\xda\x80\xf0\x7a\xfb\xdb\x49\x8e\xbb\x97\xea\x38\xe1\x24\xdc\xed"
+ "\x08\x47\x78\x09\x4e\x2e\x87\xd8\x1b\x53\x18\xe7\x5f\x76\x3e\xfe"
+ "\x82\x79\x63\xf8\x43\x34\xae\x62\xa5\x74\xa5\x8b\xd9\xb8\x2e\x9a"
+ "\x33\x3b\xdf\xc4\x4a\xd7\xb0\x71\x85\x34\x26\x56\x78\x80\xd2\xbd"
+ "\xfb\x4f\x5b\x84\x69\x04\x68\xa4\xb0\x25\x2d\x7a\x17\xd8\xa0\xb0"
+ "\x21\xd0\x46\x14\x06\xf9\xbf\x05\x9c\x97\xf8\x34\xd1\xfa\x44\x69"
+ "\xfd\x2a\xd9\x03\x66\x75\x3b\xb9\x7e\x5c\x69\x4d\x05\xcd\x49\xd3"
+ "\x9a\x28\x71\xde\x5c\x61\x4f\xd0\xd8\x9b\x7d\x0f\x5f\x57\xf3\x77"
+ "\xcc\xb7\x68\xbd\xd0\x11\xd3\xfa\x40\x99\x16\x69\x4a\xcf\xd2\x5c"
+ "\x90\x68\x0f\x96\xba\x83\xed\x63\x91\x41\xf6\xdd\x82\xc2\xd3\xe4"
+ "\xf6\x40\xbf\x8e\xe3\x0d\x6a\x67\x8a\xb8\xff\xef\x19\xd0\x2e\x14"
+ "\x99\xb1\x7c\x01\x3a\xd9\xce\x75\xa8\xa8\xa2\xcd\x81\x7a\x53\x48"
+ "\xfa\x6f\x1a\x8c\x30\xdb\x68\xcf\x21\x7e\x47\x9e\x83\xa2\x26\x8f"
+ "\x05\x34\x6d\x76\xbe\xa7\x4a\x8b\x3a\xc2\xf5\x96\xda\x8d\xf1\x62"
+ "\x3d\x92\x23\x28\x8f\xd3\x32\xcf\x09\xa6\xbd\xf0\xef\x20\xd6\x53"
+ "\x90\x2e\x14\x1d\xa1\xb5\x19\xc3\x7a\xf9\xd9\x5e\x5a\x59\x87\xac"
+ "\xee\x0e\x68\x77\x07\xf7\x79\x4c\x09\xa1\xcb\x6e\xa2\xf6\xbf\xca"
+ "\x06\xa6\xea\x40\xd9\x9a\x78\xfb\x2f\xcf\xeb\xd8\x90\x07\x41\xe9"
+ "\x4c\x81\xb2\x2f\xe2\xbc\x0e\xbb\xc6\xa7\x22\x85\xd6\x71\x2d\x73"
+ "\xf0\xf5\x5e\x26\xac\xff\x85\x2d\x57\xb2\x83\x4c\x9b\xd2\xeb\x45"
+ "\x58\x69\x5d\x30\xda\x2d\x93\x2b\x60\xcc\xe8\x7a\x3e\x66\xb4\xac"
+ "\x1b\xd6\x4b\x73\x3f\x1b\x52\x03\xe9\x5b\x1f\x17\xde\x37\x58\x4f"
+ "\xf3\x3f\xcb\x42\xdb\x8c\xf5\xb3\x43\xfb\x06\xeb\x73\x24\xbb\xb0"
+ "\x8c\xc5\x04\xeb\xc1\xfa\x32\x94\x31\x4f\x23\xf7\x61\x69\x2c\x34"
+ "\x7c\x1f\x76\xfd\x91\xfe\x3e\x6c\x21\xd9\x83\xf5\x35\xfd\x7d\x58"
+ "\x7b\xa8\x3e\xac\x2d\x84\x3c\xd7\x3b\x42\xcb\x73\x43\x54\xe8\x3e"
+ "\xec\x86\x04\xd1\xce\x6f\xc8\x0a\x94\xf3\x86\x14\xdf\x9c\xf0\xfa"
+ "\xb8\x1f\xcf\x1f\xde\x70\x68\xa0\x3f\xbc\x71\x94\x90\xd5\xc6\xdc"
+ "\x20\xda\x9a\x42\xdb\xf6\x0d\x1d\xe1\xfd\xe1\x0d\x8e\xf0\xb6\x7d"
+ "\xa3\x76\xa0\x3f\xac\x1f\x14\x04\x33\xb1\xdf\x57\x0a\xf0\xcd\x36"
+ "\xce\x16\x7c\xda\x48\xfe\x9c\xca\x0f\x3e\x27\x50\xdf\x91\x66\xc4"
+ "\x87\xb6\xed\x0c\xd9\x34\x59\x67\xc2\xf1\x84\xce\x67\xba\xad\x1a"
+ "\x06\x63\x1d\xf8\xc4\x69\xd9\xd8\xaf\xff\xb4\x8e\x8f\xf2\x21\x1b"
+ "\x19\x76\x3d\x9d\x52\xa6\x8f\xd3\xd1\x7b\xa5\xf9\x52\x95\x0e\x32"
+ "\x5f\x18\xc0\x0f\x33\xf7\xff\x08\xc7\x95\x65\x66\x5e\x12\x54\xc7"
+ "\x1c\x62\x1d\xee\xa6\xd1\x42\x6e\x9b\x82\xfa\xb2\x66\x33\xdf\xd3"
+ "\x17\xd6\xde\x9a\x6b\x42\xeb\xa8\xf9\x48\xbf\xbd\x2d\x24\xbc\xe6"
+ "\xaf\x83\xe2\x4f\x0a\x19\x6c\x32\x78\x63\xfc\xc7\xba\xcd\x3d\x81"
+ "\x36\xc9\x7c\x32\x30\xdd\xa6\xa0\xfe\x9f\xd9\x4c\xf1\xdf\xaf\xbd"
+ "\xd9\x94\x15\xbe\xbd\xd9\xf4\x95\x28\x7f\x71\xd0\xfc\xf2\x26\xf3"
+ "\x95\xdb\x9b\x4d\x61\xca\xbf\xe9\x48\x60\x7b\x53\x1c\x34\x47\xbf"
+ "\xe9\x64\xe8\xf6\x66\x53\x8f\x6c\x67\x84\xdd\x28\x9e\xfe\xfd\xec"
+ "\x4d\xb1\x3e\xd0\xde\x14\x6b\xae\x66\x6f\x9a\x07\xd8\x9b\xe2\x9c"
+ "\xe8\xda\x50\x65\x29\x2e\x09\x6d\x6f\x8a\xab\x85\x0c\xd1\x69\x09"
+ "\xb0\x37\xc5\x87\x03\x65\xb8\x29\x48\x86\xc5\x41\xf3\xdf\x9b\xcc"
+ "\xff\xab\x36\x49\xa5\x52\x29\x55\x0a\xa5\x42\x85\x51\x58\x3c\x88"
+ "\x54\xa9\x55\x11\xf8\x1b\x24\x3d\x23\x95\x2a\xa5\x1a\x7f\x11\xd2"
+ "\x73\x50\xd0\x77\x24\xa5\xc5\x9f\x5a\x7a\x46\x04\x7d\x0f\xba\x4a"
+ "\x7c\xa4\x94\xaf\x9c\xbf\x3a\xe8\x3b\xe2\x2a\xf1\x83\xfe\x8b\xe9"
+ "\x61\xc0\x77\xe0\x3e\xc8\x59\xeb\x36\x64\xe7\xad\xce\xe1\xeb\xda"
+ "\x73\xf5\xd9\x2b\x56\xe4\x16\x15\xe9\x4d\xf9\xfa\x7b\xa7\x3f\x7c"
+ "\xe7\x64\xbd\x58\x1e\x9f\x97\x3a\x2a\x67\x08\xcc\xd9\x58\x48\x11"
+ "\x73\xe6\xcf\xca\xd2\x67\xde\x3b\x3d\x30\x52\x46\xc3\x97\xc1\x5f"
+ "\x09\x8b\x5f\xdd\x4b\x7b\xf6\x7a\x80\xdd\x7b\xb9\xdd\xe9\xa2\xbd"
+ "\xe7\xa2\x3f\xb1\x6d\xd6\x09\xda\xbf\x7c\xa9\x94\xd1\xbe\x8a\x4e"
+ "\x28\x39\x4b\x85\x48\x6a\x28\x83\x82\x27\xe8\x3c\x95\x2d\x83\xd9"
+ "\xef\xed\xa0\x7f\x00\x94\x9d\xf0\xf4\xa3\x2d\x19\x08\x8b\xdf\x56"
+ "\x9b\x1b\xf4\xa5\xe4\xdb\x96\x7d\x87\x71\x0a\x36\xd5\x8b\x61\x0e"
+ "\x69\x7f\x7e\xd9\x60\x1e\xf6\xfb\x32\x19\x2e\xba\x1b\xb6\xbc\xc3"
+ "\x7e\xcf\xf8\x37\x9d\x59\x23\xe0\xb6\x6c\x63\xca\x92\x34\xb2\x0b"
+ "\xb5\xb1\xa0\xa6\x75\xd9\x2f\xc5\x82\xe6\xa5\xeb\xe9\x8c\xdf\x2d"
+ "\x26\x79\x5d\xf6\xb3\xf8\x6d\x83\xa7\xb3\x28\x6f\x82\xf5\x2a\x4b"
+ "\x9e\x24\xf8\xba\x40\xf8\x83\xbe\x75\xdc\x5b\xe8\x7e\xaf\xa8\x79"
+ "\x5f\x42\x74\xb4\x87\x7d\xe3\x8a\xbd\x4b\x3f\x2e\x03\xfd\x34\x14"
+ "\xc5\x09\x77\x19\x88\xbd\x51\x5b\xce\x6e\xf2\x30\x37\x9d\x99\x30"
+ "\xa7\xb7\x94\x95\xaf\x05\x35\xd6\x67\x45\x53\x21\xed\xa5\xd8\x72"
+ "\xaa\x3e\x17\xd4\x58\xfe\xf8\x33\x50\xaa\xd6\xcf\x45\xbf\x71\x0e"
+ "\xa8\xff\x64\xa6\xfd\xae\x53\xef\xdd\xf3\x17\x50\xbf\x7d\xa9\x4c"
+ "\x79\x89\xe9\xa0\xc4\xc4\x7a\x18\x9d\xfb\xed\x60\x2e\x5a\x6f\x7b"
+ "\x62\xb9\x87\x60\xee\x74\x96\xea\xa0\xdd\xe4\x80\x2d\xa7\x99\x6b"
+ "\xd7\x5f\xc4\x79\x15\x6d\xbd\x0e\xda\x3f\xab\xd9\x32\x07\x54\xdd"
+ "\x59\xa0\x6c\x33\xd6\x80\x75\x89\x03\x4a\x4e\xb3\x9e\x13\xcb\xbf"
+ "\x82\x76\xe3\x11\x58\xd6\x01\xca\x13\x5d\xff\x00\x7e\x76\x75\xd5"
+ "\x1b\xf6\xad\x17\x40\xb7\x65\x35\x85\x5d\x80\xe2\x2d\x30\xb4\xf8"
+ "\x6f\xd4\x0f\xea\xc0\x7c\xce\xc2\x63\xa7\x40\x81\xf8\x94\x9b\xff"
+ "\x01\xba\xcd\x8f\xf2\x7d\xe6\x50\xbb\x15\x74\xac\xd4\x10\x75\xa9"
+ "\xd4\xa0\xbd\xc4\x0c\xb1\xce\x52\x43\x5c\x7b\x01\xc2\x77\x7d\x0c"
+ "\xc3\x3a\x20\xee\xf7\x67\x3a\x94\x35\xdf\x42\x3c\x95\xa9\x1b\xcb"
+ "\x56\xfb\x2d\xc2\x57\x95\x14\x78\x31\xad\x7f\x1a\x77\x4c\xc9\x2e"
+ "\x6b\x96\x0b\xbc\x88\xab\xe6\x12\xc4\xd7\x5e\x02\x9d\xb7\xb2\xa4"
+ "\x80\xd2\xf5\xd2\x19\x72\x68\x31\x4a\xb6\x30\xcf\xe5\xaa\x29\x7a"
+ "\xb4\x87\x91\xef\x3e\xd1\xa8\xb6\x9e\xe8\x85\x36\xc7\x25\x68\x87"
+ "\xbf\x83\xd5\xfc\xaf\xa6\xb7\x9f\x68\x8c\x40\x7f\x52\xd1\x54\x4c"
+ "\x6b\xe0\x85\xee\x94\xb6\x81\xda\x8a\x32\x28\xdf\x0a\x51\x05\xc5"
+ "\x10\x79\x06\xc3\xb9\xed\xa9\x18\x67\xb0\xba\xff\xd5\x54\xcc\xf7"
+ "\x83\x3f\x9d\xb5\xb5\x0d\x54\xed\x8e\x1a\xda\x77\xac\xf4\xc4\xbe"
+ "\x61\xb7\x3a\x4e\x82\xb5\xe0\x8b\x26\xaf\xf6\x8d\x8e\xdd\x5e\xd0"
+ "\xbc\x73\xf1\xa4\xd2\xaa\xbe\x08\xd6\x2c\x07\x7c\x82\x79\xb3\xaa"
+ "\x37\x68\x4d\x75\x5a\xbb\xc3\x45\xe7\xef\x24\xb3\x3e\xdd\x90\xf2"
+ "\x42\x48\xac\xfb\x16\x12\xf6\x7f\x0b\x06\xe6\x34\x28\x69\x8f\x37"
+ "\x9d\xa9\xb6\x1f\x9f\x51\xd8\x07\xc3\xb2\xf3\xbd\xde\x2c\x46\xda"
+ "\xeb\x7d\xd9\x00\xf5\x97\x7c\x7b\xbd\x2f\xf5\xf9\xf6\x7a\xa3\x4e"
+ "\x99\x69\xbf\xb7\x0d\x4a\xa3\xa2\x4f\x40\x64\x27\x6c\x49\x26\xfd"
+ "\x2e\x3f\x07\xea\xed\xe7\x00\xc6\x95\x29\xa9\x9f\xa9\x46\xdd\x3f"
+ "\x6b\x45\xd9\xd0\x7b\x27\x94\x1d\xc4\x67\x14\xfe\xb0\x3f\x57\xc6"
+ "\xcf\xaa\xe8\x92\xf4\x18\xc3\x94\x18\xf6\x3c\x3e\x55\xf8\xdc\x59"
+ "\x5a\xcb\xec\xac\x62\x1a\xed\x2d\x1d\x42\xfa\x2c\xf6\x97\x4f\x03"
+ "\xa7\xa5\xac\xc4\x06\x87\xbb\x64\xbd\x16\xf6\x7d\x8b\xf9\x93\xce"
+ "\xb3\x74\xbe\xbc\x9d\xd3\x75\xd9\xa8\xa0\xb3\xe6\xa5\x70\xa2\xe1"
+ "\x2b\xca\x17\xf3\x6f\xc5\x67\xb4\xe8\x83\x96\x2d\x91\xd3\xf6\x5d"
+ "\x36\x52\x9e\xff\xc0\x70\x26\x87\x63\xb9\xd5\x14\xf7\x9b\xce\xb3"
+ "\x4a\x01\x63\x50\x22\x4e\x97\x84\x1f\xeb\xfe\x96\x78\xaa\xe3\x7d"
+ "\xca\x68\xd6\xbc\x7c\x22\xd4\xee\x65\x27\xf6\xef\x65\x2d\xa2\xee"
+ "\x6d\xd3\xdb\xe0\x57\xbb\x88\x46\x6c\xc3\x5b\x76\x63\x5c\x33\x7a"
+ "\x3f\xc4\x97\x96\x1c\x5a\x5f\xba\x2d\xcd\x06\x23\xe3\xfc\xcb\xc0"
+ "\x2c\x9b\x49\x6f\xa2\x7f\xb5\xb5\x35\x02\x6d\x80\xbe\xbd\xab\x17"
+ "\xde\xbe\xd4\x13\x51\xfa\x47\x50\x5a\xdd\x9d\x30\x3e\x4e\xdc\xcb"
+ "\x53\xbf\x97\xd9\x5e\xa0\xfb\x8a\xf7\xb2\x5e\xd4\x97\x5b\xce\xc0"
+ "\xb6\xe7\xc7\xc6\x41\xdc\x9f\xb1\x17\x2c\xec\xd3\xb6\xd7\xfd\xec"
+ "\x53\x52\x9b\xad\xd1\xcf\x36\xed\xfc\xc7\x40\xdb\xb4\xe3\x3f\x84"
+ "\x6d\xc2\xba\xcf\x6d\x91\xc7\x26\x85\x7f\x1e\x14\x2e\xed\x5f\xd9"
+ "\xf1\x66\x50\xb8\x4b\x0a\x7f\x31\x28\xdc\x2e\xc2\xb7\xff\x4d\xb6"
+ "\x7d\xed\x44\xc7\x46\xb2\x7d\xdb\x3f\x22\xdb\xd7\xbe\x5c\xb2\x7d"
+ "\xdc\xfe\x6c\xdf\xcf\x5e\x45\x5b\xb4\x81\xec\xcd\xf6\xf5\x44\x3f"
+ "\xfb\x3d\xc8\xb4\x0f\xc6\xb0\xbb\x29\xac\xe2\xef\xa0\xc6\x9f\x6c"
+ "\xf7\x9e\x21\xbb\x47\x36\x8f\x6c\xdf\x2b\xd7\xb3\x8e\x57\xf6\xb2"
+ "\x53\xb5\xfc\x9c\x6c\x4b\xbf\xfd\x7b\x0e\xc3\x76\x63\xd8\x73\x18"
+ "\x4f\x76\x90\x78\xd2\x96\xd5\x08\xfc\x1e\x9d\x8a\xa9\x69\x5e\x65"
+ "\x32\xec\x41\x79\xd3\xf9\x57\x3b\x90\xbf\xd1\x0a\x28\xb0\x9a\x1c"
+ "\x7c\x1f\x0a\x9d\xcd\xde\x6e\xea\xa2\x7a\x77\xfd\x76\x2f\x8d\x53"
+ "\x7c\x05\x5b\x1d\xec\x0c\xed\x55\x21\x1a\x96\x6d\x7a\x80\xce\x16"
+ "\x57\xb4\x18\x01\xe8\x5c\x02\xb2\xd9\x48\x8b\xba\x02\x69\x12\x67"
+ "\x19\x6f\x4f\xb4\x41\xa7\x64\x87\x9f\xce\xa2\x7b\x0c\x3a\xc1\x52"
+ "\xc0\x2c\x68\x1f\xb1\x6c\xd1\x9e\x32\xa0\xb3\x59\xe8\x3e\x4f\x7a"
+ "\xbe\xa2\xf4\x1a\x2b\xe4\xf3\x59\x2c\x68\x1b\x10\xc6\xda\xe1\x02"
+ "\xa2\xd9\x06\x96\x63\x6d\x25\x8d\x94\x7e\x39\xf1\x86\x59\x4a\x65"
+ "\x1c\x0a\x8e\x43\xc9\xc7\x6e\x8d\x36\xd8\x9e\x29\xfc\x9b\x29\xfa"
+ "\xb6\x25\x76\x20\xbb\x6f\xed\x41\x1c\x25\x9d\x02\x07\xe2\x62\xd8"
+ "\x06\x04\xc4\x49\xf8\x87\x6e\x61\xdf\x20\xfe\x44\x92\x17\x9d\xd3"
+ "\x45\xeb\x94\x90\x2f\x51\x74\x56\x83\xf0\x43\x2d\xef\xd7\xff\x1d"
+ "\x40\x3a\x6b\x0c\xf5\xcd\x72\x94\xce\xf2\xa2\xf3\xc5\xae\x74\xb6"
+ "\x18\xf2\x28\x41\x3e\x5f\xcc\xbb\xf1\xc7\x3d\x5b\x0c\x71\xeb\xea"
+ "\x94\xec\x08\xd2\x7f\x94\xce\x17\x43\xfa\xe3\x48\x0f\xa5\x32\x35"
+ "\xbe\xf8\x18\xf1\x7c\x9b\x9b\xc2\xca\x2d\xac\x55\x96\x3f\x95\x97"
+ "\xca\x82\x71\x36\xe1\x1f\xb2\x93\x36\xd8\xd1\x48\xf1\x18\x76\x82"
+ "\xe0\xc7\xa3\x1d\xb3\x62\x1b\xf6\x6e\xa7\x47\x59\x5e\x0c\x6a\x61"
+ "\xd3\x76\xfe\x1b\xa5\x17\x36\x6d\xe7\x2e\x9f\x4d\xdb\xb9\x45\xd8"
+ "\x34\xc1\x63\x61\xd3\x76\x3e\x25\x6c\xda\xce\xd5\x7c\x3d\x11\xda"
+ "\x34\x8a\x23\xbb\x26\xdb\xb4\xfd\xd7\xb3\x56\xb2\x1d\x4e\xcb\xce"
+ "\x2c\xd9\xb6\x3d\x8f\x61\x64\x3b\x88\x46\x61\xa7\xb6\x1f\x61\xff"
+ "\x8f\x01\xc4\x7a\x4d\x7a\x37\xd2\xf9\x19\x3d\xd2\x3b\xca\x65\xe7"
+ "\x1f\x85\x8d\xdb\x79\xd8\x67\xe3\x76\x26\xfb\xd2\x92\x8d\xdb\xf9"
+ "\xa9\xb0\x71\x22\xbc\xfe\x31\xb2\x71\xdb\x8f\x10\x0f\x24\xfc\x4a"
+ "\x9a\x47\x93\xe0\x91\x8f\xdb\x1a\xfd\x6d\x5c\x60\xfd\x7a\x5a\x2d"
+ "\xdb\x38\xb2\x6d\xf8\x1d\x67\x83\x11\x7c\x8e\x98\xea\x59\x35\xf2"
+ "\x5c\xae\x77\x24\x03\x2a\x33\xdd\x57\x40\x7c\x9b\x71\x16\x22\xa5"
+ "\x73\x6b\xa4\x72\x3f\x9d\x29\xef\xd1\xb4\xc1\xce\x81\x67\x9a\x81"
+ "\xef\x5c\x32\x94\xf5\xad\x74\x96\xa3\xb5\xac\x13\xac\x35\xac\xac"
+ "\xdd\x7d\x1a\xbc\xdb\xd7\x7c\x49\x72\xc5\xfe\xc6\x14\x7a\x92\xdd"
+ "\xc1\x76\xb4\x72\x99\x83\x8f\xdf\x7f\x59\xae\xc4\x38\x73\x40\xdc"
+ "\x3b\x94\x07\x8d\x2b\xe2\xbb\x39\xdc\x38\xc2\x0f\xc8\xcb\x13\x3e"
+ "\xaf\x67\x6e\xe4\x79\xa1\x2f\x85\xfd\x9e\x98\x73\xf0\x34\x9f\x43"
+ "\xe3\xe7\x36\x87\xc4\xf5\xcc\x2c\x29\x5e\x15\x26\x7e\xf5\x55\xd2"
+ "\x3f\x7b\x95\xf4\x6f\x92\x0d\xa2\xfd\x78\x1e\x4b\x20\x9e\x61\x6e"
+ "\x19\xee\x0c\xc1\xfd\x9b\x34\x0f\xf2\x65\xe9\x08\xde\x2f\xd3\xc9"
+ "\x38\x49\xef\xf6\x20\x1c\x3f\x23\x18\x6d\x64\xfa\x26\xa0\xf3\x39"
+ "\xfd\xd2\xee\x1a\xea\xe3\xef\x33\x4d\x57\x18\xa7\x89\xb2\xd6\x00"
+ "\xd0\x7d\xf6\xcd\xe8\x8b\xd2\x5e\x9a\xea\xfe\xb9\x87\x5d\x39\x68"
+ "\x2f\xf9\x99\x77\xd2\xbe\xdd\x5e\xb4\x6f\xb7\x8a\xb3\x91\x1d\xf2"
+ "\x5e\x8b\x1b\xd0\x2e\xc7\xd2\x39\x2c\x34\x5e\xbd\xcc\x93\xa9\x6c"
+ "\xe6\xe7\xfd\xef\x6a\x90\xd3\x86\x1b\xdb\xa3\x7c\xa5\x3c\xf9\x3e"
+ "\x24\x4c\x73\x4a\x4e\x43\xb8\x69\xef\x0d\xb6\xc7\xb7\xf2\xf3\xcd"
+ "\xdc\xbd\x64\x03\x6f\x40\x1f\x34\x56\xe4\xb3\x1c\x44\x3e\xcf\x6a"
+ "\x30\xcd\xa9\x2b\xed\x73\x0a\x5f\xbe\x67\xd3\x7f\x78\xf9\x40\x2a"
+ "\xdf\xb3\x65\x57\x29\xdf\x95\xf2\x3d\xf6\xc3\xf3\xd5\xca\xf9\xba"
+ "\x7e\x38\x5f\x7f\x91\xf8\xfd\xf9\x9a\x2c\xf1\xf5\x17\xcb\xaf\xc2"
+ "\xd7\x50\xf9\x54\x7f\xff\x7c\xf4\x72\x3e\xad\xa1\xf2\x01\xfe\x17"
+ "\xf6\xbc\x1e\x8d\x7c\x27\x8d\x74\x0f\xf2\x60\xa7\xe5\x39\xad\x0d"
+ "\x9e\x8d\x93\xe7\xb7\xc4\xfd\x4c\xcf\x25\xd8\xe0\x17\xea\xc0\x7d"
+ "\x5c\xcf\x4d\x5f\xd6\x40\xed\x3a\xf3\xda\xe0\xb9\x74\x1a\x6b\x4b"
+ "\xdf\x22\xce\x07\x94\xd2\xa0\xfd\x7f\x76\xf7\x95\xe6\xd3\xf8\xdd"
+ "\x1b\xd2\xd9\x1d\xb4\x3f\x95\x55\x6d\xce\xec\x2b\x35\x82\xb8\x9b"
+ "\xfa\xb9\x37\x69\x1f\x12\xbe\x47\xd2\x3b\x3e\xb1\x0d\xd8\x2d\xd6"
+ "\xe1\xd1\xbd\x06\xe2\x6c\x8a\x41\x18\xf7\x1d\xdd\x7b\x21\xf6\xf1"
+ "\x3d\x77\x02\xe9\xe4\x77\x56\x8b\xb3\xfc\xf9\x19\x2f\x0e\x84\x53"
+ "\x52\x5a\x71\xb6\xc7\x73\x76\x19\xc6\x26\xe3\xeb\x3f\xe7\xe2\xb9"
+ "\x4f\x45\x1b\xf3\x5c\x53\x5f\x98\xfb\x93\xe8\xbc\xb3\x83\x5b\x93"
+ "\x03\xf6\x21\xce\x2c\x2c\xcc\x2f\x9c\xac\x2f\x5a\xfb\x44\x52\x91"
+ "\x29\xdb\xb4\xbe\x88\x6f\x58\x1f\x02\x18\xa0\x37\xad\x5e\x9b\x9b"
+ "\xbf\xde\x64\xd8\x98\xbd\x5a\x6c\x70\x1f\x8d\x80\xfe\x40\x10\x78"
+ "\x5f\x25\xda\x22\x1a\xbf\xa1\xb3\x28\xf8\x9d\x95\x74\x26\x89\xbc"
+ "\x7f\xb7\x45\xc7\xef\xf6\x42\xdb\xb5\xfb\xa8\x0d\x0a\xb2\x64\x79"
+ "\xd0\x39\x89\xe8\xbf\xe8\xce\xc0\xee\x7f\x23\x1d\x9a\x87\xae\x68"
+ "\xbd\x38\x5f\x82\x9f\x11\x60\x35\x61\x40\x3b\x68\x9a\x36\xd0\x78"
+ "\xec\xf3\x19\x5e\xcb\xee\x49\xfc\xdc\xc7\xe2\x33\xf4\xbd\x56\xf6"
+ "\x17\x68\x7e\x49\xcc\x07\xdf\x3a\xad\x13\x76\xef\xa7\x7c\xa9\xfe"
+ "\xd5\x55\x89\x3b\xc2\x99\x65\x77\x26\xed\xd9\xc6\x6f\x8d\xd3\xf2"
+ "\xfc\x24\xd9\x27\x45\x7a\xa3\x58\xcc\x66\x94\xf7\xf3\x79\x9f\x69"
+ "\xed\x20\xed\xf9\xd6\xd4\x89\xfd\xdd\x6a\x84\xcd\xe9\x87\xb5\x20"
+ "\x6c\xe5\xe6\x2c\x6c\x3f\x43\xce\x69\xb3\xd8\x8c\x0c\xef\xe5\xac"
+ "\x08\xff\x32\x63\xff\x1a\xe5\xb7\xe7\x16\x2c\x7b\x9c\xac\x33\x42"
+ "\xf6\x7b\x22\xc4\xf9\xcb\x19\x19\x18\x36\x08\x9f\xcb\xfb\x30\x8e"
+ "\xce\x42\xc0\x72\xd1\x38\xb4\xa2\xbd\xe4\x7c\x53\xb3\xae\x13\xe5"
+ "\xfe\x3c\xfa\x17\x1b\xc4\x39\xa5\x98\x07\xc3\x3c\xac\x65\x97\xa0"
+ "\x45\xcf\x68\xdc\x19\x65\xbe\x67\x62\x8b\xde\x01\x4c\xb5\xf8\x4b"
+ "\x4a\x87\xf5\x4b\x57\x6a\x26\x9f\x04\xc3\xf9\x3e\xbd\x3d\x06\x99"
+ "\xe7\x26\x3d\x3b\x4b\x30\xe1\xc6\x97\xa9\xdd\x2c\xe7\x6d\xca\xb7"
+ "\x40\x6b\xb1\xba\x60\xcf\x80\x3d\x8f\xa3\x72\x26\xeb\x73\xb2\x4d"
+ "\xfa\xbc\xd5\xeb\x72\xf5\x39\xab\x73\xf4\xeb\xf2\x4d\xfa\x55\xf9"
+ "\x34\xd0\x43\x43\x3b\x01\x3a\xe1\xa5\xf2\x6d\xcc\x8a\x90\xe7\xb2"
+ "\xfb\x36\x1a\x07\x09\x9d\x2e\x7f\xbd\xcf\x69\x8c\x0c\xe4\x49\xb9"
+ "\xd4\x66\xee\xe9\x40\x79\x48\x67\x02\xa8\x7a\xf0\x9b\xca\x92\x16"
+ "\x58\x87\xcb\xff\x26\x60\xcb\xd5\x32\x2c\xd7\x8b\x91\x67\xfa\xe3"
+ "\xca\x25\x7d\xac\x17\xfb\x95\xf9\xf9\x37\xf5\x7c\x2d\x7f\xf9\xa4"
+ "\xb0\x69\xe8\xcc\xaf\x62\x58\x71\x0e\xca\x47\x30\xcb\x9e\x3c\x49"
+ "\x87\x34\xde\x8a\x8c\x2c\x49\x7f\x50\x27\xca\xcd\x03\xf5\xa7\xfc"
+ "\x14\xe9\x0f\x73\x66\x69\xf8\xba\x0f\xb7\x0b\xed\x1d\x7e\x63\x3b"
+ "\x8d\xb4\x9f\xa6\x72\x38\x36\x66\x69\x4a\x5f\xe2\xe7\xf0\x7d\x4d"
+ "\x73\xa8\x74\x2f\x0e\xea\xca\x60\x71\x7f\x67\xf9\x09\x59\x46\x32"
+ "\x7c\xe8\x3a\xcc\xf5\x25\x50\xc7\x38\x3f\x2b\x46\x71\x1d\x43\x3f"
+ "\x01\x69\x52\xca\xe7\xfd\x51\x5b\x62\x83\x8a\x14\xd3\x16\xc6\x9c"
+ "\x96\x8a\x64\x3f\x3d\x38\x17\x4a\x0f\x50\xb6\x2b\xf2\xf2\x57\xac"
+ "\xc1\x8a\x5e\x98\x6b\x5a\x61\xa4\x33\x2e\xc8\x0e\xf0\x03\x34\x46"
+ "\xe5\xe8\xd7\x17\xe5\xae\x18\x02\xa1\xa0\xfa\x23\xfd\xe5\xaf\xf5"
+ "\xa2\xbe\xf6\xf5\x65\x45\xd0\x5e\x0b\xb1\xb7\xa2\xf2\x42\x5f\x11"
+ "\xf6\x49\x02\xe4\x5e\xf9\xb5\x55\x97\x8c\xbe\x5d\x32\x70\x5f\x1c"
+ "\x79\x26\xd6\x0b\x54\x25\x11\x1f\xfa\x94\x0a\x6c\x57\x2a\x7a\x65"
+ "\x1d\xc0\x77\x6c\xff\xca\x6d\xbe\xb5\x1a\x55\x89\x7d\xca\x88\xd3"
+ "\x64\x7f\xc4\xba\x90\x33\x68\x07\xa2\xeb\x3b\xa1\x92\xf7\xbf\xea"
+ "\x78\xbb\x54\x99\x28\xa7\xd9\xd3\xbf\xdf\xb9\xb2\x5a\xd6\x13\xbf"
+ "\x34\xb7\x50\x18\x3f\xf3\xc8\x52\x91\x41\x32\x67\x42\xf6\x6a\x19"
+ "\x0e\xf9\xca\xea\xb9\x1d\xa9\x2c\x0b\xb6\x0d\x9f\x69\x69\x6e\x5c"
+ "\xd0\xc3\xf5\x4f\x9b\x91\xcc\xcf\x4f\x41\x9f\x0f\x71\x3f\x2f\xad"
+ "\x53\x39\xc9\x7d\x03\x33\xe2\x72\x09\x5c\x98\xd7\x3a\x39\x2f\x16"
+ "\x93\x91\x5c\xcf\xf5\xac\xd2\xe6\x1b\x3b\xac\xdc\x4d\x7d\x66\xd6"
+ "\x97\x35\x08\xe5\x79\x82\xeb\x16\xbe\x9b\x6e\x14\x67\xb9\x91\xbe"
+ "\x51\x39\x49\xaf\x7c\x3a\x55\xa5\x97\xe5\x4d\x65\xc6\x74\xa7\xf4"
+ "\xfc\xbc\xdf\xaa\x49\x32\x2f\xc3\x9d\x39\xc3\xeb\xad\x16\x69\x71"
+ "\x8a\xba\xcb\xfb\x7b\xe2\x9c\x21\xda\xef\xa2\x42\x1a\xb3\xba\xe1"
+ "\x85\x59\xb4\x86\x3f\xda\x45\xfd\xa7\x8c\x2c\x3a\x43\x41\xb4\x65"
+ "\x55\x35\x88\x7f\xb7\x6f\x8f\x7a\xd5\x21\xcc\x7b\xb7\x90\x5d\xd5"
+ "\x51\xbf\xba\x67\x97\xd6\x05\x44\x12\x8f\xc8\x9e\x59\xcd\x33\x79"
+ "\x7d\x15\xfb\x7f\xab\x6c\x72\x3a\x7e\xde\x00\xea\x06\xad\x87\x3d"
+ "\x07\x2f\x70\x7f\x83\xe8\x43\x5e\x97\x51\xfe\x54\x3e\x6a\xbb\xb9"
+ "\xde\xe8\xe8\xbe\x94\x17\xe2\x03\x69\x78\x21\x51\xc6\x25\x70\xbf"
+ "\x90\x22\x7f\xd3\xf9\x63\x36\xa8\x6e\xa5\xfb\x27\x9b\x1d\xbc\x0c"
+ "\xd7\xb4\x98\xb0\x6e\x39\x38\x5c\x8e\xcc\x43\x0c\x2f\xc3\x6f\x13"
+ "\xb6\xbd\x66\x31\x37\xb4\x39\x4b\xd8\xa2\xea\x16\x3a\xdb\xaa\x54"
+ "\x4f\xe7\x13\xa6\x08\x7b\xc3\xcf\xd4\xe1\x71\xdb\xa4\x3a\x3b\x98"
+ "\xf6\x0a\xf1\xf5\x31\x0e\x37\xb7\x0d\xe2\x0c\x06\x8c\xc7\x3a\xe2"
+ "\xa4\xfb\x5f\x2e\x1b\x07\x4b\xb4\x75\xf4\xe7\x41\xf7\x62\xf2\xb9"
+ "\xc8\x17\x5a\xc5\x99\x26\x91\xd8\xe7\x7b\xc1\x25\xcb\x6f\xc7\x5e"
+ "\x0c\xa3\x7b\x5b\x95\xa0\x69\xe1\x67\x86\x55\xc7\xc9\xf4\x4a\x71"
+ "\x4a\xae\x0f\x9c\x07\xd5\xfd\xf5\xbf\x8f\xdf\x31\x5a\x9d\x26\xe7"
+ "\xc3\x61\x11\x8e\xe0\x5b\x12\x78\xdc\x92\x7e\x3c\xe2\x2c\x15\x0d"
+ "\xbf\x67\xba\x81\xc7\x99\x7d\xb6\xea\x05\xbe\x66\x8c\xaf\x5f\xc3"
+ "\x72\xd8\x37\x1b\x07\x73\x19\xe8\x41\x85\x69\xe8\xfe\x62\xa5\xd0"
+ "\xc5\xea\xc3\x72\x1a\x95\x82\xf8\x58\x7d\x4c\xce\x5b\xc6\x41\xf4"
+ "\x5f\xd1\xe6\x89\xb2\xa8\xa9\x8e\x48\x77\x85\x72\x7b\x21\x7c\xae"
+ "\x17\x67\x72\x1d\xe4\xe5\x7c\x51\xe7\x2f\x6b\xe1\xd3\xbd\x98\xe8"
+ "\xa7\x0f\x48\xcf\x8b\xfd\xf2\xb7\xc1\x8b\xd2\xbd\x9d\x2f\x66\xfa"
+ "\xd1\x98\x86\xdf\xcb\x7d\x72\xe0\x32\xa2\x3b\x80\x42\xde\x33\xc9"
+ "\xeb\x0a\xc2\x78\x19\xa7\x93\xe4\x81\x7d\xb2\x49\xd0\x42\xbe\x21"
+ "\xd6\x15\xe4\x09\xd1\xf8\x15\xe9\x15\xe2\x6d\x0c\xd4\xcd\x17\x5b"
+ "\xfd\xe8\x55\x90\x5d\xc7\xb0\xd3\x32\x8c\x0d\xf6\xf2\x39\x3a\x99"
+ "\x9f\x18\xe7\xea\x97\xe3\x9d\x04\xbb\x57\x23\xd3\x79\x95\x36\x43"
+ "\xe2\xd5\xde\xe9\x22\x8f\xbd\x69\x72\x1e\xf8\x3e\x1b\xeb\xc0\x00"
+ "\x1f\xfc\x89\x4d\xa6\x5c\x71\xc8\x11\x35\xf2\xd9\x2b\xd6\xe4\xe6"
+ "\x24\xea\xb3\x57\xd2\x71\x48\x45\x79\xb9\xb9\x05\x7c\x32\x27\xd0"
+ "\x0f\x8c\xe3\xf9\x21\x1f\xc4\xd9\xd3\xfb\xe8\x3c\x14\x87\xd4\x0e"
+ "\x53\x7d\xb7\x53\x7d\x6f\x2e\xf9\x96\xf7\x71\xac\x65\x77\x82\xd5"
+ "\xc5\xca\xa8\x1f\xc0\x6d\x1f\x95\x5f\xe7\x10\xed\x00\xca\x93\xda"
+ "\x48\xa4\xad\x27\x90\x5f\x7b\x5d\x81\x75\x79\x9f\x26\xb4\x9d\xd8"
+ "\xfb\x26\xb7\x13\x15\x42\x2f\xc8\x3e\xd1\x1e\x00\xc2\x8b\x69\x52"
+ "\x02\x71\xee\x9b\xed\xb3\x51\xfb\xb2\x64\x1b\x25\xda\x89\x7d\x25"
+ "\xd8\x06\x55\x48\x79\x99\x7c\x7a\xb3\xcf\x21\xf4\x66\xdf\x2e\x1b"
+ "\xbc\xd3\x7f\xde\x87\x68\x3b\xf6\x66\x91\xff\x28\xee\xf5\xde\x77"
+ "\x48\xc6\x57\x1d\x4b\xed\xc6\xbe\xc6\x81\xfe\xc3\xbe\x1c\xf2\x1f"
+ "\x68\x7d\x22\xf1\x82\xdf\x63\xcc\xeb\xcd\xbe\x2e\x3f\xfb\xa3\xc5"
+ "\x6f\x47\x28\x59\x3f\x41\xcd\x71\x12\x4d\xbb\x25\xad\x58\x67\x4a"
+ "\xa5\xa3\xaa\x72\xcd\x05\xb9\x2b\x4c\xb9\x39\xc1\xf3\x6d\x06\xd9"
+ "\x17\xa3\xb9\xee\x6a\xac\xf7\xf6\x18\xe2\x47\x0d\x96\xff\x65\x93"
+ "\x5c\x06\x6e\xa7\xcc\x74\x67\x0a\xb7\x71\x51\xdd\xf0\xf2\x74\x71"
+ "\x87\x79\x8d\x49\xd6\x13\x82\x9b\x61\x66\x5e\x0c\xc3\xf2\xef\x2d"
+ "\x93\xfa\x5d\xd8\xb7\xad\xa9\x91\xbf\x7d\xe9\x6b\xfe\xc1\xdb\xbe"
+ "\xbd\x7c\x6d\x1f\xf2\xf4\xa5\x25\x7e\xfe\x16\x7d\x4f\x94\xbe\xf9"
+ "\x79\x4c\xe2\x3e\xf6\x9a\x6f\x04\x7f\x6b\x50\xfe\x2f\x4a\xb6\xe2"
+ "\xe5\x34\x81\x07\xe0\xb5\xad\xf6\x88\x7a\x3e\xce\xff\x92\x46\xce"
+ "\x0f\xd3\x9f\xf6\xcf\x93\xda\xad\x60\x7c\x36\xa8\xe1\xeb\xa8\xb6"
+ "\xf3\xb3\xe4\x5e\x4a\x0f\x41\x6b\xab\x3f\x1c\xc2\x18\x11\x26\x4e"
+ "\x2e\xf3\x7c\x33\x0f\x2b\xb9\x42\x19\x7b\xa5\x32\xd2\xd9\xfd\x3c"
+ "\x7f\xd2\x7f\x89\x86\xd3\xd2\xf9\x24\x36\xba\x37\x92\xe8\xe7\xe7"
+ "\xa4\xe9\xa8\x5e\xbf\x74\x12\xdb\xb3\x74\xb9\x1c\x54\xc6\xa3\x5b"
+ "\xed\x6a\xf9\x7c\x2a\x91\xfe\xa5\xf7\x03\x69\x7b\x59\xed\x97\xa6"
+ "\xa7\x69\x24\x8d\xe1\xbf\xb4\x9f\x59\x6a\x78\xff\x87\xce\xad\xaa"
+ "\xee\xd7\xc3\x97\x93\x07\xea\xdd\x4b\xb5\xa4\x77\xfe\xba\xb4\xfa"
+ "\xce\x15\xa8\x49\x45\xb9\xa6\xc9\xdc\xbb\x47\xc7\x8e\x8e\x3f\xcb"
+ "\x36\xad\xce\x5f\x57\x94\xa8\x2f\xca\xc9\x96\x2a\x7d\x40\x9d\xb7"
+ "\xf0\x31\x00\x87\x5c\xcf\x30\xaf\x5a\x9f\x6d\x79\xd9\xa7\xff\xb4"
+ "\x56\x6b\x24\x8d\xd1\xbe\xfc\x8d\xa8\x4f\x2f\xb7\xf8\xd5\x5d\x9e"
+ "\x9e\xea\x68\x3d\xf7\xd9\x5e\xf6\x6f\xff\x1d\xc8\xd3\xc1\xe7\xe0"
+ "\xe5\xe7\x25\x9e\x3a\x04\x8f\x5f\xb9\x87\x97\x93\x9f\xcb\xf5\xf2"
+ "\x6c\x2a\x27\x3f\x07\x86\xfb\x67\xaf\xe8\xe5\xf2\xfa\xfa\x0d\xaf"
+ "\x4c\xe2\x7e\x94\xe4\xaf\x5d\xad\x7f\x2f\xfc\xd3\x57\x4e\x49\x63"
+ "\x70\x1d\x72\x1f\x4f\xf6\xaf\x91\x96\x1c\xe1\xab\xbe\xf2\xfc\xbc"
+ "\x12\x76\x79\x99\x99\xce\xab\x23\x19\xbc\xf2\x91\xec\x5b\xf2\x75"
+ "\x7c\x95\x19\x93\x90\x9e\x23\xfe\x76\x82\xa9\xd6\x74\x48\x3e\xe2"
+ "\x24\xd1\x77\xbd\xe6\xc3\x4e\xcc\x8b\xe6\x20\xae\x40\x1b\x95\x0b"
+ "\xed\xdf\x11\x7e\xf6\x17\xf9\xd7\xac\x4f\x27\xdd\x91\x59\xcb\xd7"
+ "\x6b\xd6\x21\x6e\x3b\xca\xd6\x69\xa9\x45\xff\xef\x15\xae\x1b\x5e"
+ "\xd4\x51\x5a\xc3\xe3\x90\x7d\x24\xa8\x9d\x43\x6d\x11\xbe\xa3\xde"
+ "\xd6\x36\x08\x9d\xaa\x6d\xb0\x17\x19\xa0\xaf\x4f\xa7\xec\x2b\xca"
+ "\x52\xd3\x78\x01\xf1\xc2\x5a\xeb\x02\xa1\x3f\xb5\x05\xa8\x77\x7a"
+ "\x7f\x7c\x12\x2e\xe2\xa9\x9a\xe8\x60\x45\x3a\x25\xe9\x37\xe9\x2b"
+ "\xeb\x33\xa0\x2f\x5c\x3b\x89\x15\x19\x94\x61\xce\xe0\xba\x52\x39"
+ "\xa3\xe8\x9e\x49\xba\x7b\x94\xec\x95\x38\xe7\x7f\xbf\xe7\x05\x31"
+ "\x36\x20\xe5\xbb\x5f\xc1\x94\x07\x78\xbb\xb2\x87\xb7\x2b\x0c\xc4"
+ "\xb9\xe9\xfb\xf5\x7c\x3d\x6d\xc1\x01\x7e\xd7\xac\xb4\x4f\xdb\xde"
+ "\x52\xe0\xe6\xf7\xda\x95\x9a\xc8\x4f\x73\xd3\xfc\x11\xdf\x87\xdc"
+ "\x6c\x72\xc3\x7c\x17\xe9\xe4\xfe\x4c\x3a\x33\x5e\xdc\x41\xbe\x7f"
+ "\x89\x7c\x4e\x3c\xdd\x5d\x49\xf7\xae\x62\xb9\x54\xbe\x7b\x53\xeb"
+ "\xe8\x4c\x68\x10\xfd\x71\x1d\xec\x41\x9f\x5e\xc8\x60\xff\xeb\x74"
+ "\x6f\x9f\xe8\x2b\x74\xa2\x5c\x54\xff\xea\x84\xfd\x1f\x8b\xb9\x64"
+ "\xd9\x4e\xd4\xdd\x4d\x6b\xd4\x6d\x12\x0e\xcc\x0b\xdb\xff\x57\x6c"
+ "\x22\x2f\xc4\xe7\x94\xe5\xb9\xff\xf5\x81\xe3\x1b\x3e\x7c\x36\xd8"
+ "\x7f\x50\xf2\x0b\x40\x8c\x81\x7d\x86\xb8\xea\xe2\xe4\x31\x30\x9f"
+ "\xef\x53\x67\x90\xc7\xc0\xc4\x19\xd4\xb5\xbd\x94\x7f\xb8\x31\x22"
+ "\x56\xfa\x28\xf0\x31\x2b\xf4\xe1\xc2\xfa\x13\xd8\xbe\x13\xed\xb2"
+ "\x5f\x28\xe4\x53\xf7\x29\xf9\x87\x74\xd7\xab\xec\x4b\x0a\x1f\xa0"
+ "\xee\x84\x68\xcb\xea\x8e\xc8\x6d\x19\xa6\x3d\x2a\xd9\x0a\xa9\x9d"
+ "\xab\xeb\xef\xff\x86\x5e\x9f\x5f\xd7\x2b\xf3\x48\xe6\xb9\xe0\x51"
+ "\xfd\xcc\xbe\xd8\xd4\xe5\x3e\xde\xd6\xf3\xb3\x9d\xfc\xe2\xb7\xf8"
+ "\xf1\x9e\xbe\x4b\x84\xdd\xac\xc7\xf6\xbf\xf6\xb0\x68\x53\xea\xa5"
+ "\x73\x4b\x36\x2f\xe6\xf7\xc5\x73\x1e\xac\xe6\x63\x33\xf6\x52\x03"
+ "\xd2\x56\x6f\xb4\x29\xee\x32\x0b\x5b\x56\x8f\xed\x5f\x5d\x8e\x94"
+ "\x4e\x4b\xb4\xf8\xd3\xbb\x70\xdd\x9a\x75\xf9\x1b\xd7\xd1\x80\xda"
+ "\xfa\x22\xfd\x8a\xfc\x9c\xdc\x21\x21\xc6\x43\x74\x74\x9f\xb6\xa3"
+ "\xba\xff\xfc\xa9\x57\xcb\x68\x3d\xbd\xb8\xbb\xe0\xd5\x6d\xfa\xdb"
+ "\x49\xbf\xea\xbf\xa2\xb1\x02\x7e\x87\x04\x9d\xb5\x2a\xc6\x0d\x7a"
+ "\x28\xbd\xe0\xf5\xab\x6b\xfb\x36\x1a\x25\x1f\xeb\xd5\xd1\xc4\x47"
+ "\xa9\xcf\xc1\xba\xa1\x21\x5b\x6e\x87\x88\x3e\xee\x9b\x5f\x36\x70"
+ "\xbb\xe8\xbd\x6c\x54\x73\x7e\x5d\x36\x60\x7b\xd3\x90\x66\x53\xdc"
+ "\xb9\x40\x94\xab\x61\xb6\xcc\x0f\x2a\xbf\x93\xee\xf4\x64\xab\x51"
+ "\x47\x5f\x2d\x93\x70\x91\xfd\x24\xdc\x71\xf2\x7a\x6e\x3a\x53\xb4"
+ "\x69\x03\x9d\x27\x7c\x60\x8e\xb7\x92\xec\x4d\x43\x85\x6c\x97\xa8"
+ "\x2d\xf2\x22\x9e\x77\x2f\xda\x23\xb0\xde\x4c\xc7\xb4\xd7\x77\xc2"
+ "\x81\xd3\xe2\xde\x81\x86\x63\x81\xf7\x0e\x1c\x40\x6f\xf4\xc0\x69"
+ "\xe9\xe7\xf6\x7b\xbf\xd2\x4f\x4e\xd3\xea\x17\xa6\x0b\x82\xc1\x72"
+ "\x1d\x48\xe8\xf7\x57\xc4\xb9\xa6\xd2\x39\xc8\x74\x87\xc6\x81\x6c"
+ "\x3a\x3b\xd4\xa7\x1b\x0d\x3b\x25\x1f\xa4\x87\x78\x47\xed\x2d\xc2"
+ "\x88\xbd\xac\x55\xa8\x1b\x2c\x0b\xa8\x4c\xcc\xb9\x1a\x75\xe2\x40"
+ "\x89\x4f\x0f\x04\x8f\x30\xac\xc2\xe7\xa7\x1c\xc8\xa1\x34\xfe\x7c"
+ "\xc0\x3c\xa6\x8b\xbe\xe9\x81\x46\xb9\xcd\xa6\x73\x53\xc5\x3d\x14"
+ "\x07\x12\x8e\x6e\xed\xc1\x3e\xff\x81\x53\x7e\x38\x12\xa4\xb1\x08"
+ "\x35\x53\xd6\xef\xaa\xe7\x7d\xb6\x03\x0e\xdf\x98\xc0\x81\x04\xb2"
+ "\xbb\x1c\x47\xec\xe6\xe5\x56\x07\xbf\xab\x5a\x21\xdf\x4d\xef\xb4"
+ "\xbc\xaa\x97\x7d\x14\x19\x57\x8b\x18\x73\xe2\x67\x5d\x62\x1d\xac"
+ "\x40\x98\xf4\xfe\xf1\x58\x0c\xeb\xef\x03\x9a\xb1\x1e\x73\xdf\xfb"
+ "\xd5\x1c\x5f\x5f\xaf\x81\xef\xab\xe6\xfd\x40\x81\x07\xfd\xae\x57"
+ "\xb3\x82\xfb\x6d\xe8\x3f\xe8\x57\xaf\x5b\x8d\xee\xc3\xaa\x82\xfc"
+ "\x54\xec\x3a\xac\x2a\x58\x9d\x4a\x4b\xbf\xe6\xa4\xcf\xe2\x4f\xac"
+ "\x1c\xa9\x21\xc6\x8f\x69\xdc\x9b\xdf\x07\x4d\x63\x46\xd8\xcf\xa5"
+ "\xb1\x53\xa7\xb8\x57\x35\x52\x7a\x6a\xa4\xe7\x20\x6c\xf7\x96\x77"
+ "\xc3\x6b\x11\x74\x07\x8e\x0d\x5e\xd3\x79\x2d\xe2\x3e\x59\xa9\xcd"
+ "\x46\x5b\xfe\xaa\x47\x9e\x37\xe3\x6b\xe1\xe9\x3c\xc3\x3e\x23\x1f"
+ "\x8f\x73\x5a\x5e\xeb\x1f\xff\x10\xe3\x8b\x62\xee\x0d\xc3\x33\xe5"
+ "\x70\x79\x3c\x16\xc3\x72\xe4\xb1\x57\x01\xfb\x9a\xc9\x97\x36\x60"
+ "\x6c\x3b\x4e\x9e\x97\x43\x98\x1a\x99\x67\x32\x9e\x52\x3d\x3b\x27"
+ "\xf9\x49\x2a\xee\x57\x5b\x5e\xdd\xcd\xcf\x10\x25\x5f\x9c\x8f\x33"
+ "\xbf\x76\x42\xce\x87\xfa\x08\x44\xb7\x34\x07\xc4\xeb\x3d\x9d\x15"
+ "\x2a\xce\x1a\x7d\xad\x5f\xfe\x41\x3c\x37\xdc\x35\x9a\x8f\xcb\x1b"
+ "\x8a\xd0\x3f\x1b\x1d\x34\x0e\x47\x3a\x34\xbe\x1a\x06\xf3\x31\x26"
+ "\xd1\x4f\x8f\x20\x1f\x01\xcb\x70\x00\xe5\xa9\x22\x5b\x2e\xda\xbd"
+ "\x83\x0b\xfa\xdb\x78\xed\xe6\x2c\x16\x9b\xba\x84\xce\x9b\x17\xfb"
+ "\x17\x0e\x3e\x45\xfa\x66\xbf\x61\x8d\x93\xd1\x5a\xe5\x7d\x8b\x9d"
+ "\x62\x1c\xfe\xe0\x3b\xbe\x31\xb3\x83\x20\x9d\x8d\x4a\xeb\xe0\x50"
+ "\x5e\x07\xfb\xd7\x7f\x10\x3c\xf7\xbd\x10\x27\xed\x55\xa0\xfc\x7f"
+ "\xc0\x7c\x0f\xf6\xfb\x1b\x5c\xa2\x9e\xbe\x3e\x89\xe3\x40\x5b\x2d"
+ "\xf6\x03\xbc\x8e\x7a\x78\x30\x4e\xb4\x0d\x84\x3b\x0b\xfa\x62\x1b"
+ "\x6c\x7d\x96\xb6\x64\xe2\xa1\x23\xf6\x23\xbd\x38\x8b\xf8\xf5\x7b"
+ "\x1c\x16\x35\xca\xf4\x75\x94\xff\xdb\x61\xe7\xb5\x2e\x6f\x60\x2d"
+ "\xee\x8b\xac\x71\xcf\xdf\xd1\xce\xad\x04\x70\x6f\x60\x47\x2e\x5f"
+ "\x64\x47\xf9\xdd\xe7\x4f\x00\x3c\xff\x4f\x00\x8f\x6a\xf1\xd7\x97"
+ "\x50\x57\xe7\x5e\xf0\x9e\xa3\x3b\x03\xeb\x11\x6e\xae\xe3\x3c\xab"
+ "\xc3\x34\x73\x0b\xd8\xb9\x3a\x84\x9b\x73\xf6\x1c\xdb\x8f\xb0\x73"
+ "\x8c\xa8\x2b\x1b\x98\xdb\xa3\x5a\xf3\xb5\x7e\x11\xd9\xee\xd7\x8f"
+ "\xd9\x2b\xd3\x77\x31\x8b\xb2\x9c\x6d\x1f\x3b\x06\xe9\x69\xed\xbf"
+ "\xaf\x0c\xf1\x92\x5e\xd1\x3d\xa5\xe8\x1f\x7e\x8d\x7a\xf0\xf5\x32"
+ "\xf4\x3b\x50\x6f\xbf\x46\x38\xbb\x0d\x9e\xe3\x36\xc7\xae\x1a\x13"
+ "\x8b\xbf\x90\x67\x46\x23\xad\x2d\x9e\x0d\xac\xb1\x7c\x29\xd2\x7f"
+ "\x06\xe9\xbf\xc8\x8e\x60\x19\x8e\xee\xe9\x06\x20\xfa\x3d\x84\xd3"
+ "\x43\xf7\x25\x2a\x62\xea\x31\x7e\x99\x59\x0b\xf5\x08\xbb\xd4\x01"
+ "\x31\x75\x08\xb3\xf4\xa9\x18\xe0\xf4\xf7\x22\xdd\x31\xe9\xbb\x3c"
+ "\x98\x37\xd1\xef\xb4\xbc\x51\x20\xd3\x29\xe7\x4f\xf4\xca\xf5\x76"
+ "\x19\x8d\x11\xc6\xa6\x1e\x24\xba\xc5\xbc\xc7\x1b\xff\x61\x2f\x42"
+ "\x39\xab\xc6\x8e\x11\x7d\xec\x37\x8e\xc8\xf4\x07\xce\x83\xbd\xe1"
+ "\x12\xf6\xf3\x0d\xec\xff\x1c\x94\xce\x83\x17\x61\x54\x7e\x3b\xd6"
+ "\x5b\x69\x0f\xe0\xd7\x32\xcf\x30\xfe\x60\xf0\x3c\x57\x66\x7e\x21"
+ "\x1f\xa3\xce\x5e\x61\x5a\xbd\x21\x1b\x7b\xbe\x43\xa0\x80\x82\x78"
+ "\xdf\x38\x37\x47\x9f\xbf\x4e\xbf\x32\x7b\x75\x5e\xfe\x86\xdc\xc2"
+ "\x44\x3e\x9c\x51\x94\xbb\x2e\x87\x86\xae\x0b\xb3\x0b\x0b\x86\x04"
+ "\xf5\x67\x2a\xd2\x77\xb5\xd3\x5d\x34\x5b\x49\xbf\xdf\x9a\x2e\x8d"
+ "\xdb\xba\x98\x25\x8d\xf7\x8b\x85\x8d\xf9\xe5\x3b\xfa\xe2\x34\x8a"
+ "\xbf\x5b\xb4\xe3\x6f\xa5\xb1\xaa\xd4\xd7\x19\xe3\x77\x78\x2b\xce"
+ "\xc1\x5b\x49\x9c\x1f\x7d\x19\x32\x1e\xde\x77\x25\x9d\x2d\x28\x26"
+ "\x3f\xec\x97\xa7\x18\xc5\x07\xf0\xe2\xad\x08\xe1\x8b\x60\xf8\xe5"
+ "\x0c\xf0\xad\xbb\x7f\x6b\x3a\x53\x62\xd9\x91\x97\x52\x9f\xc1\x28"
+ "\xed\x7f\xfc\x43\x27\xbc\x49\x7d\x29\x9a\xb7\x39\xc9\x7d\x72\xbe"
+ "\x4f\xeb\xcd\x2f\xb1\xcf\x61\x64\x96\x41\x51\xc4\xaf\x3d\xa2\x4f"
+ "\xaf\x8c\x56\xd0\x3d\xbb\x9d\xb4\x67\x34\x99\xe6\x79\xeb\x2d\xde"
+ "\x64\xdf\x3a\xa7\x5f\xaa\xa9\x7f\xc1\xe7\x39\xb8\x4d\x3a\xb4\x5c"
+ "\xae\xbb\x4a\xda\x87\xb3\xfd\xa6\xc9\xa2\xfe\x1d\xca\x25\x78\x94"
+ "\xff\x64\x51\x3e\x7e\xdf\x38\xfa\x06\x6f\x6e\xc1\xf2\xbf\xc1\x4a"
+ "\x33\xa4\x39\xc9\x37\xb7\x78\x63\x3f\xd6\x7b\x8a\xb0\x5f\xa0\xfd"
+ "\xb8\x01\xe3\x7e\xef\xad\x4a\xfd\x95\x07\x7d\x2a\x2f\xf6\x13\x58"
+ "\xd5\xc7\xaf\x79\xaa\x52\x0f\x79\x37\x1a\x94\xd4\xb6\x96\x9a\x91"
+ "\xbf\xf9\xc6\x21\xec\xbc\xf1\x1a\xcf\x46\x03\xfa\x5f\xa9\x47\x18"
+ "\xc3\xb4\xb1\xa9\x4d\xfc\x6e\xe3\xaa\xd4\xf7\xa4\xef\xcf\xe8\xdb"
+ "\x8b\x7e\x32\x86\xb5\xe2\xf7\x9f\xbc\xcc\x0f\x3e\x10\xf6\x04\x7d"
+ "\x47\x2b\xf8\xfa\xca\x64\xec\x97\xa4\x50\xd9\xe5\x32\xf3\xfe\x19"
+ "\x8d\x11\xf5\x97\xed\x4d\xb3\x1c\x4e\xfd\x06\xe1\xc3\xc3\x0a\xe4"
+ "\xf1\x6e\xa1\x8f\xfd\x70\x0f\xc9\x3c\x10\x77\x79\xa7\x1e\xb4\xa1"
+ "\x7c\xbd\x74\x07\xfb\xf6\x9b\xc7\x30\xe5\x2f\x6f\x20\x9b\x35\xcf"
+ "\xc3\x6d\x21\x88\x79\xa7\x37\x8f\xc8\xfc\xa4\xfd\x04\x64\x4b\x51"
+ "\x6e\x86\x65\x76\x18\x22\xec\xc0\x9b\x27\xfd\xfa\x87\xbd\x24\x6b"
+ "\x1b\xbc\xc9\xcf\x59\x62\x4a\xcd\x76\xf1\x7d\x48\x2f\xea\xca\x9b"
+ "\x6e\x19\x16\xc3\xc4\x79\x27\x15\x53\x77\x6c\x74\xc3\x4d\x05\x53"
+ "\x59\x37\xea\xe6\x49\x01\xf7\x56\x82\xaf\x4e\x09\x7d\xc3\xe7\x11"
+ "\xea\x5f\xd3\xfc\x23\xbd\xd7\x85\xd9\x13\xbb\xb5\x96\x31\x6a\xaf"
+ "\xa8\xfd\xd4\xdf\x04\xfc\x0e\x5d\xd4\xc3\xb2\xe6\x5a\x07\x70\x39"
+ "\xc7\xa6\xbe\xde\x47\x77\xa5\xa3\x2d\x0f\x95\x9e\xd2\x20\xfc\x31"
+ "\xde\x4f\xc2\x7a\xe1\xc5\x7a\x81\x69\xde\x20\xbd\xde\x7a\x81\xfa"
+ "\x2f\x6f\xb9\x5b\x4a\x7a\xe8\xcc\x7e\xd4\xd7\xb7\xdc\xc4\x43\xaa"
+ "\x07\x7b\x2c\x7c\x3f\x24\x6f\x27\x9b\x36\x4c\x24\x1c\x5f\x0f\x73"
+ "\x81\xba\x1d\x2d\x02\xca\x85\xd6\xbb\xc5\x9c\x41\x78\xb5\x09\x34"
+ "\xd4\x87\x0d\x6c\x43\x42\xb7\x1f\x7d\xda\x8c\x9a\xbe\xaa\x8c\x02"
+ "\xa7\xe5\xed\x89\x36\x38\x1c\xb6\x9f\xb1\xfd\x7a\xf4\x6b\x10\xae"
+ "\xe2\x26\x9a\xab\x7e\x7b\xf9\x95\x60\xe5\x3d\xba\xa4\x2b\xe3\x75"
+ "\x34\x9e\x92\x51\xc3\xe7\xbc\x63\x33\x0a\xc4\xb8\xe5\xdb\x0d\x72"
+ "\x7a\x1a\xf7\xa4\xf5\x05\xe5\x97\x40\x57\xde\xdf\x57\x7c\xbb\x55"
+ "\xc8\xe8\xed\x56\xb9\x7f\x11\x2a\x1f\xd3\x41\xe6\x2d\x1d\x05\x4a"
+ "\xab\xde\x0e\xe3\x5c\x10\x55\xf7\x32\x40\x45\x31\x73\xbd\x50\x8c"
+ "\x7a\x84\x3c\x66\xca\xb7\xd3\x68\x1d\x46\x3d\xb6\xd1\x7b\xbc\x00"
+ "\x2a\xa4\xe5\x85\x8b\x98\xe7\x56\x01\xc7\xc4\xf9\x6a\x3a\x84\xcb"
+ "\xc3\x67\x1c\xda\x11\xa8\xde\x0a\x9a\x6a\x2f\xa8\x2b\xb6\x42\x3c"
+ "\x86\xa1\x5f\x71\x78\xb6\xdc\x17\x08\x39\x2f\x5c\x87\xf6\x11\xf3"
+ "\xdd\xb6\x95\xb9\x3f\xc3\xde\x92\xc5\xcb\x5c\xdf\x87\xef\x58\xfe"
+ "\xc3\xa2\x8c\x87\x0f\xcb\x7d\x03\x7c\x6f\x0c\xdc\x6b\x7d\xb8\x21"
+ "\x78\x8e\xf9\x89\xfc\x7c\xd3\xb2\xc2\x5c\x7a\x18\x46\xad\x1f\x1d"
+ "\xec\x2b\x46\x89\x7b\xa9\x0e\x9f\xa4\xba\x45\xfe\x93\xd8\xb3\xf4"
+ "\x8e\xd6\x6f\xbc\x87\xc6\x9c\xa7\x91\xdf\x47\x6b\x4e\x30\x2e\xf1"
+ "\xd3\x92\x2d\xbc\xbf\xf1\xa5\x06\x94\xc1\xf9\xad\xcc\x36\x65\xe7"
+ "\x4d\x16\xcb\x1a\x06\xe6\xf3\x4e\x5a\x50\x3e\xfd\xf3\xbf\x52\xdf"
+ "\xdc\xc1\xed\x63\xe5\xc7\x15\x2c\xe6\xd5\x64\xd1\xd6\xbd\x53\x2b"
+ "\xaf\x21\x0c\x7d\xb6\xcb\xd4\x78\x4f\x55\xc9\x11\xaa\x23\xa5\x5b"
+ "\x40\xf9\x9b\xe2\x0e\x25\xf5\x4b\xb6\xe2\x3b\xad\xe9\xe2\xe3\xdf"
+ "\xd2\x9d\x91\xbf\xff\xb6\x03\xdb\xd2\x77\xec\xac\x72\x6a\x3c\xd6"
+ "\xf9\x9e\x70\xeb\xb8\xfc\xf7\xc5\x8b\xb9\xfb\x5f\x69\xae\xb0\xe6"
+ "\x8b\xc3\xcb\xeb\x34\x82\xd2\x6d\x11\x32\xfb\x15\xea\xff\xdb\x3a"
+ "\x59\x7f\x65\x98\xf2\xeb\xe5\xbb\x38\x7f\xb5\x20\x1c\x7e\x56\x91"
+ "\xd1\x20\x74\xfc\x57\x1f\xf3\x39\xea\x9b\xe0\x99\x4e\xf8\xd5\x47"
+ "\x6a\x1d\xe8\xf0\xfd\x97\xf8\xce\xc7\x30\x28\x2e\x40\x8f\x6e\xe9"
+ "\x6d\x50\xa3\xc5\x41\xcb\xa3\x60\xe2\x0f\x1d\x3f\xf1\xa7\xc2\x9f"
+ "\x92\x29\xf8\xee\x15\x15\x4a\x30\x72\x90\x1a\xa2\x87\x45\x69\x6e"
+ "\x1d\x1e\xaf\x9b\x36\x35\x65\x52\xe9\xd6\x12\x33\xf3\xba\x5d\xd1"
+ "\xcc\xff\xfe\xd4\x03\x1d\x0b\x47\x97\x09\xff\xa1\xf2\x40\xc8\x3d"
+ "\x6f\xcf\x5b\x58\x01\xf5\x69\xbd\xb1\x1f\x41\xe9\x7a\x50\xbe\x7b"
+ "\xc9\xa6\xa4\x3e\x14\xf9\x30\x74\xc7\x7b\x27\xbc\x3b\xeb\x13\x0c"
+ "\x43\x7e\x99\x59\xc5\x47\x20\xf6\x26\xbd\xfb\xac\xb7\xea\x23\xf0"
+ "\xe1\x57\x03\xe1\xc7\x7e\xba\xf2\xe0\xd6\x1e\xa5\x55\x3d\x15\xac"
+ "\x7a\x07\x7c\x82\xef\x21\x65\x85\x79\xd2\x98\x30\xe1\xc0\x36\x78"
+ "\x57\xe9\x77\xd8\x36\x9b\xf9\xfc\x8c\xf2\x1c\xbc\xfb\xe9\x91\x30"
+ "\xe9\xf8\x1c\x6b\x6c\xfa\x58\xa7\xe5\x5d\xb4\xe7\x4f\x54\x4b\xfd"
+ "\x10\xec\x27\x1d\x89\x92\xdb\x03\x8c\x1f\x23\xe6\x89\x8e\xe8\x65"
+ "\x98\x90\x32\xfa\x05\xad\x79\x66\x4d\xa4\x07\xec\x62\x4f\x0f\x9d"
+ "\xc1\x18\x6e\x2c\x8e\xd6\xdc\x17\xe9\x98\x97\xed\x5b\xe3\xd8\x5a"
+ "\xc3\x5c\x5b\xe3\x59\x4f\x69\x3c\x5f\x2b\x43\xfd\x0a\x6d\xdf\x0d"
+ "\x6b\xbe\xe9\xdb\xb7\xa6\xcf\xbb\x6f\xcd\xb7\xec\x86\x35\x17\xbc"
+ "\x37\xac\xb9\x28\xc6\x0c\x21\xda\xb9\x6f\x8d\x1d\xe9\x99\x81\x74"
+ "\x9e\xa3\x79\x48\xec\x67\x60\x7f\xee\xc8\x31\xb9\x9f\x11\xd0\x8f"
+ "\xc9\x31\x2d\xa3\x45\x05\xd9\x6b\x17\x27\x3f\x2e\x5d\xcb\xf1\xd4"
+ "\xfa\xec\x35\xb9\xcb\xb0\x87\xb3\x4c\x5a\x7d\x44\xc3\xcf\xe8\xcc"
+ "\x11\x2c\xcd\x78\x4c\xd6\x6f\xcc\x2d\x2c\x4c\xca\x5f\x37\x59\x4f"
+ "\x97\x79\xf0\x70\xb1\x8f\xc9\x98\x9d\xc3\x5d\xbe\xdc\x01\xe3\xd5"
+ "\x54\x16\xba\x3b\x12\xcb\xf3\xad\x7f\x19\x24\x9a\x6f\xe5\x34\x23"
+ "\xbd\x44\xb7\x44\x33\xf6\xdb\x7f\xdd\x3f\xfe\xe9\x1b\x33\xf8\xb5"
+ "\x8b\xda\x71\x19\x07\xa5\xc7\x74\xe7\xfd\xd2\x61\x59\x7f\x7d\xc8"
+ "\x7f\xdc\x54\x8c\x5d\xbe\x97\xc9\xc7\x4c\xf7\x2d\xb6\xd3\x3d\x3a"
+ "\xe8\x0f\x2a\xce\xc0\x7b\xdc\x6f\xa2\x3e\x1f\xe7\xb9\x5b\xbe\x6f"
+ "\xe2\x48\x2b\xad\x41\x11\xb4\xfd\xda\xe1\xe7\x93\xa1\xcc\xdf\x5b"
+ "\x42\x63\x79\xbd\xf0\xde\xdd\x08\xf7\x0d\xe2\x73\x78\xf7\x2d\xee"
+ "\xc3\xfe\x19\xca\x60\xf1\x45\x3a\x47\x84\xf6\x9e\xd0\xdd\x0e\xed"
+ "\x0e\x3b\xbf\x27\x8f\xa7\xc1\x5e\x2c\xd1\x2c\x70\xbe\x97\xe1\x1b"
+ "\x53\x78\x4f\x23\xd3\x65\x83\x5f\x9f\x24\x5a\xfc\xe5\x33\x2b\x7d"
+ "\x41\xd2\xba\xfc\xa4\x15\xeb\x4d\x49\x26\x63\x61\xfe\xfa\x55\xc6"
+ "\x00\x7b\x99\xe1\xae\x9a\x72\x37\xfb\x57\x16\x0c\xdb\xa6\x1d\x14"
+ "\xad\x48\x5e\xdb\xb6\x83\xd6\xa4\x5e\x07\xd1\xe6\xc7\x69\x8c\x10"
+ "\xf6\xef\x65\x27\x69\x6c\x82\xe6\xc8\xa3\xb7\x25\xaf\x8e\xda\x96"
+ "\x9c\xed\xb5\xa4\xdc\x45\x7b\xa0\xa2\xdd\xb3\x14\x51\x5d\xd3\x15"
+ "\x1e\xcb\xc4\xbb\xc8\x27\xab\x45\x1b\x5e\x71\x3d\xeb\xc0\x34\xa7"
+ "\x31\x8d\x0d\x7f\x5d\x98\xee\x44\x37\xfc\x66\x30\x3e\x5b\xa3\xb7"
+ "\xb1\xfa\x68\x37\xf3\x26\x96\x61\xff\x0b\xf1\xd2\xde\x0f\x16\x3b"
+ "\x25\x99\xfa\x7f\xe3\xdd\x10\xe1\x1b\xab\xfd\x4d\x22\xd6\xb5\x41"
+ "\x73\x76\xb2\x4f\x10\x57\xab\xf7\xa2\xb7\x95\xee\x3d\x96\xe6\x2c"
+ "\x4e\xed\xc6\xdf\xb8\x6a\xa0\xbb\xee\xa1\xe4\x2b\x50\xb6\x77\xf5"
+ "\xd0\x3e\x92\x26\xcc\xaf\x05\xe1\x8f\xe1\xaf\x51\xbf\x0e\x54\xe7"
+ "\xe0\x37\x5b\xe4\xb5\x79\xc2\xff\x7f\x9f\xfb\xc1\x98\xbe\x89\xf6"
+ "\x85\x6c\x59\x8b\xb6\xa3\xdb\xae\x24\xfc\x18\xd6\x6a\x35\xf6\x80"
+ "\xd5\x7d\x82\xf6\xee\xd0\x18\x0d\xc1\x18\xdc\x18\x47\xe3\x34\x5e"
+ "\xa6\x53\xa2\x1d\x3d\x81\xed\x54\x23\xad\xf9\x6c\x2f\xe9\x80\xf6"
+ "\x82\x56\xf0\xf6\x19\x12\x38\x3e\xa4\x07\xd3\x9c\x7a\x77\xa5\x4b"
+ "\x49\xfa\x82\x70\x27\xc9\x1f\xa2\xb3\x1e\x58\x91\xe1\x76\x84\x69"
+ "\xc1\xf8\x93\xec\x5f\x3a\x25\xad\xab\x3c\x07\x47\x77\xb2\x3e\x83"
+ "\x61\x7c\xaf\xb8\xff\xb6\x13\x8e\x2e\x41\x5a\x7f\xee\x47\xeb\x42"
+ "\x2c\x03\xea\x12\x34\x61\xbe\xc7\x88\x8e\x76\x63\x2b\xb4\xbb\x30"
+ "\x5f\x47\x2b\xad\x1b\x4e\x60\x1b\x75\x6a\x5a\x47\xcc\x36\x1a\xd4"
+ "\xe5\xdf\x82\x1a\x6d\x66\x53\x3d\x3e\xb1\xfc\x47\xb1\xff\x17\xef"
+ "\xb4\x1c\x2d\x90\xcf\x0b\xa1\xfe\x06\x7e\x97\xc9\x36\xe7\x79\x84"
+ "\x41\x7a\x1a\x09\xf7\xd0\x5e\xa0\x31\xa8\x08\xb4\x67\x11\x98\x67"
+ "\x24\xf2\xb1\x11\x79\x97\x8d\x32\x3b\x46\xbc\x46\xfe\xf4\x78\x11"
+ "\x5f\xf9\x45\xa4\xa7\x48\xa7\x8e\xea\x02\xc5\x3c\xb7\x93\x21\xcf"
+ "\x4f\xcd\x33\x3b\x19\xed\x2f\xa0\xb5\xfa\x98\x26\x15\xcb\xaa\x16"
+ "\x6b\x1e\x8e\xf6\xca\x79\x79\x48\xc7\xce\x67\x49\xe3\xbb\xef\x3f"
+ "\x4f\x6b\x28\x7d\xeb\x20\xdf\xdf\x8d\xdf\x3f\xf3\xff\x26\x3d\xf7"
+ "\x5a\xde\x33\xd6\x71\x5d\x7f\x7f\x22\xea\xfa\x12\xa9\xfe\x20\x6e"
+ "\xb5\xba\xcf\xb2\x9c\xc2\x67\xa3\x7f\xb2\x40\xd4\x81\xf7\xb9\xaf"
+ "\xdf\x0d\x47\x0d\xe2\xae\xe0\xa3\x89\xd2\xb8\xe0\x29\x81\xf3\x37"
+ "\x5b\x48\xd6\xc4\x43\xd4\xf3\xa7\xad\x3d\xad\x5c\xc7\x6d\xf0\x9b"
+ "\x86\x3a\xf4\xa9\xc2\xd8\x7b\x97\x15\xdb\x3a\xef\x45\xd6\x43\x7d"
+ "\x69\xb1\xe6\xf1\xfd\xa6\x65\x66\x55\x1a\xf6\x9b\x95\xc8\x0b\xaa"
+ "\xa3\xd7\x63\x7f\x61\x1a\xad\x8d\x45\x1e\x10\x4d\xb6\x2b\xdd\xcb"
+ "\x8d\x32\x40\x1f\xf5\x03\x35\xd2\xcb\xef\xa5\xa2\x7b\x8b\xc5\x78"
+ "\xff\x07\x3a\xf9\x6c\x18\x76\x91\x95\x90\x1f\x88\xf9\x96\xed\xd8"
+ "\xc0\xf3\xa0\xbb\x9a\x7b\x4c\x7a\xf6\x65\x8b\xde\x1e\xd6\xde\xfb"
+ "\xad\xe5\xb4\x4b\xf7\x3f\xf2\x75\x2d\x81\x6b\x39\x3f\x28\xf3\x1b"
+ "\x3b\xa4\xb5\x2d\x65\xb4\x7e\x47\x9c\xe1\xf5\x01\x3f\xeb\x6b\x9e"
+ "\x59\x9c\x55\x64\x75\xf5\x4a\x7d\xe0\x0f\xda\xf8\x9d\x70\xd4\xbf"
+ "\xe2\xeb\x3f\xcf\x48\x6b\x36\x3f\xc8\xa5\x3c\x5a\x82\xee\x9d\xcf"
+ "\x5d\x97\xfd\x44\x5e\xae\x18\x4e\x4f\x7a\xd2\x94\xbd\x2a\xb0\x9f"
+ "\xce\xed\x2e\xb3\x7c\xd0\x21\xec\xd8\x87\x5a\x3f\xdb\xa8\xee\x9f"
+ "\x5f\x50\xc2\x51\x31\xc7\xf0\x61\x72\xa8\x39\x86\x59\xab\xd6\xe5"
+ "\x17\xf2\x3c\xf8\xf2\xd6\x5c\xb1\x53\x75\x08\x2c\x4c\x9f\x95\x9e"
+ "\x54\x94\x6b\xe2\x17\x3d\x89\x01\xfd\xec\x9c\x9c\x42\x69\xf1\xeb"
+ "\x6a\x4a\x45\x31\x2b\x37\xf2\xa4\x05\x6b\x4c\x62\xd9\x6c\x51\x5e"
+ "\xf6\x86\x5c\x09\x85\x3f\xad\xf1\xd4\x76\xb7\xd4\xf2\xf6\x61\x88"
+ "\x58\xab\xf3\x61\x93\xdf\xdc\xbe\xff\x58\xe2\x8d\x18\x77\x5a\x8e"
+ "\x2b\x18\x49\xba\xd2\xb8\xb6\xbd\x81\xdb\x2c\x75\xf3\xab\xc4\xdf"
+ "\xc6\x59\x74\x37\x09\xfa\x59\x4d\x74\x97\xb6\xb4\x0e\x06\x7d\x87"
+ "\xc6\x51\xd8\xef\x6f\x42\xfe\x9a\xe7\x79\xbc\x0c\xdb\x77\xb3\x0d"
+ "\x8e\xe9\xa4\xf1\x39\x8d\x57\xf9\x61\x0a\xad\x61\xac\xe3\x63\xc9"
+ "\x8d\x69\x3e\xbb\x7f\x4c\x47\x3e\x2c\xd9\x58\xa2\x8d\xe8\xc4\xf8"
+ "\xe5\x7e\xeb\xc7\xba\x6c\xf0\x21\x1f\x93\xa1\x75\x4e\xfc\xde\x20"
+ "\xb4\x47\xd2\x19\x25\xca\xf6\x57\xc9\x27\xfa\xed\x2e\x5a\x1f\xe6"
+ "\xad\xc8\x68\x14\x6d\xdc\x47\x07\x58\x55\xfa\xe4\xf1\x0e\x88\x13"
+ "\x36\xa9\xf1\x2c\x86\x5f\x8b\x34\xb6\x62\xf8\x94\x77\xb7\xf6\x44"
+ "\x90\x9f\x2e\xe6\x4b\x1b\xcf\x4a\x63\xcb\xc4\x9f\x08\x3f\x1a\xba"
+ "\x7c\xe3\xcf\xc7\x74\xf6\x98\x8c\xc6\x1d\x62\x7d\x18\x5f\x0b\x23"
+ "\xd6\x23\x7d\xa4\xe9\x1f\x6f\xc5\xbc\xa5\xf5\x1f\x71\xdd\x08\x8f"
+ "\xbc\x68\x94\xd6\x64\x50\xd9\x17\x50\xb9\xc5\xba\xde\x8f\x52\xfc"
+ "\xfb\xe2\xe2\x9e\x96\xf4\xc9\x5e\xb1\x86\x9b\x68\x5f\xcd\x7d\x7a"
+ "\x1a\xeb\xbe\x44\xfc\xfe\x08\x6d\x7f\xfa\x3d\x98\x0e\x5b\xce\x0f"
+ "\x7a\x65\x7a\x88\x66\x93\x19\x1d\x53\x4c\x47\x7e\x58\x1f\x6f\xef"
+ "\x3f\xaa\xf1\xd1\xfc\x91\xe8\xbf\x33\xd9\x5e\xfd\x36\x4a\xcc\x39"
+ "\x64\xb4\xfa\xc9\x4d\x7d\x0e\x3e\x3a\x8b\xb4\xb6\x6e\x17\xeb\xb0"
+ "\x22\xe4\xf5\x4d\x88\x2b\xa0\xfc\xbe\xf9\x80\x0f\x0b\xc5\x7c\xc0"
+ "\x6f\xd5\x3e\x19\x7e\xd4\x4a\x7a\x4f\x6b\xd8\xe4\xf5\x6b\x24\x4f"
+ "\x71\x87\xcd\x6f\x13\x65\x3c\xde\xd8\x8c\x43\x34\x66\xb3\x47\xac"
+ "\xc5\x40\xb9\xfc\x76\xad\x4a\xf1\x25\xf7\xeb\xc7\xbb\x80\xfc\xf6"
+ "\x41\x18\x96\x4d\x70\x94\x27\x1f\x37\x47\xde\x50\x59\xbc\xd8\xdf"
+ "\x57\xe9\x06\xcd\x46\x7c\x25\x68\x8f\x67\xfb\x74\xe3\xb7\xe9\x7c"
+ "\x1d\x98\xc4\x6b\x66\xf9\xf0\x19\xdf\x38\xd2\x6f\x0f\xf5\x8f\x01"
+ "\x23\x1e\x5f\x9b\xf4\xdb\x36\xe2\x71\x79\xff\x78\xd8\x31\xe0\x74"
+ "\x88\xb9\xfd\xcf\xba\xe1\x77\xdf\xb0\xd8\xf4\x7b\xa8\x3d\xa7\xb1"
+ "\x0a\x92\x3d\xef\x7b\xf0\xb1\xdc\xdf\xbd\x59\x27\xe6\xcf\xf6\xe2"
+ "\xfb\x3b\x5e\x65\x28\xdd\xf9\x9d\xde\x7f\xad\xb9\xe0\xff\xef\x8c"
+ "\x5e\xc2\x89\xe5\x27\x5c\xd8\xc6\x29\xe4\x31\x76\x09\xef\xa3\x88"
+ "\x73\x5f\xb7\xc4\x6b\x3e\xaf\x5c\x25\xf1\x81\x64\xcc\x79\xfe\x3b"
+ "\xac\x53\x1f\xf0\xf9\x9b\xd2\x06\x76\x36\x1f\x71\x88\xfb\x9e\x7f"
+ "\x57\xc3\x88\xb7\x12\xbc\x9d\xc6\x82\x90\x76\xb1\x4f\x17\x75\xf1"
+ "\xb2\x91\xef\x51\xf4\x56\x65\xd0\x98\x8b\x9d\xe6\x94\x7d\xe3\x7b"
+ "\xbf\x6b\xa3\xb4\xf6\xcd\x22\x4d\xb9\x98\xf3\x46\xd9\xfc\x2e\x82"
+ "\x6d\x34\x82\x34\xd7\x8a\xb6\xfe\xa3\x53\xa4\xf7\x84\xc7\xc1\xc7"
+ "\x6f\x7e\xd7\xe5\x45\xbe\xa0\x4c\xa2\x9d\x96\x63\x5a\x59\x26\x28"
+ "\x8f\x13\x57\xe8\xfb\xa1\x4c\x8e\xa5\xc8\xe7\x7d\x51\xdb\x84\x75"
+ "\xb8\x4c\xf4\x6b\x8e\x79\xa2\xb7\x4d\x63\xd1\xee\xbb\xc8\x07\x73"
+ "\xd4\x2b\xf9\xb8\xbc\xbc\x96\xfa\x56\xe4\xd3\x79\x79\x7f\x8a\x77"
+ "\xfb\xe2\x0e\x5a\x87\x6e\x75\x89\x75\xe8\x14\x3e\xd7\xc1\xbc\xed"
+ "\x0e\x0f\xed\xcf\xea\xc0\x3c\x1a\xe4\x3e\x3f\xd9\x37\xd5\x36\xc5"
+ "\xff\x4b\xde\xfb\xc0\x55\x55\x65\xfd\xc3\xfb\x5c\x10\x51\x91\x7b"
+ "\x21\xc4\x9b\x51\x5e\x0b\x9b\x9b\x91\x92\x5a\x59\x19\x32\x85\x85"
+ "\xe5\x1f\x6a\x6c\xa2\xc6\x04\x53\x1a\x34\xd4\x9b\x22\xa2\x21\x20"
+ "\x3a\x3c\xce\x33\x8a\x17\x47\x7d\x19\x45\xc5\x79\xac\x9f\xcd\x58"
+ "\x31\xbf\xd7\x79\x3f\xf6\xbc\x9a\xb7\x51\x0b\x13\xb8\xd4\x58\x51"
+ "\x83\xd3\x8d\x41\x23\x06\xf5\x26\x28\x57\xbc\xf7\xec\xf7\xbb\xf6"
+ "\x3e\xe7\xde\x8b\x81\x0d\xf3\xcc\xfb\x7b\xde\x3f\x7c\x3e\x97\x73"
+ "\xce\x3e\xfb\xec\x3f\x6b\xaf\xbd\xf6\x5a\x6b\xaf\xbd\x16\x60\x77"
+ "\xf8\xa0\x8b\xbd\x33\x51\xa3\x6b\x03\x31\xe6\x67\xb4\xf2\x83\xdb"
+ "\xa0\xf9\xda\x3f\xec\x95\x72\xe8\xe1\x56\xd0\x9e\x0a\xa9\x3b\x38"
+ "\xdc\xa9\xb7\x1b\xef\x1d\xd7\xf7\x31\xed\xb1\x69\x59\x96\x1c\x22"
+ "\xd1\x89\xe3\xf3\x2d\xd6\xd1\x0b\xc6\x89\x83\x0b\x96\xc7\x1f\x7b"
+ "\xc8\x92\xf6\xc8\xe8\xfc\xec\x84\x99\xf2\xf2\x58\xda\x74\xba\x5e"
+ "\x27\x17\x58\xba\x4a\x8e\xcc\xee\xa9\x9b\xf8\x93\xd6\x86\x23\x39"
+ "\x2e\x65\x86\xc4\x61\x53\x52\x3a\xb7\x27\x54\x60\x4d\x6d\x27\x99"
+ "\x6d\x96\xef\x2b\xce\xcb\x13\x2a\x78\x54\x52\xba\x3b\x6a\x6f\x23"
+ "\x7e\x55\xee\xa8\x94\xcc\xcd\xa0\x81\xe0\x51\x3d\x46\xef\x40\x49"
+ "\x2b\xf1\x0c\xbe\xa7\x15\xbc\x15\x8d\x25\x9b\x7a\x57\x11\x9f\xe5"
+ "\xe3\x4e\xf0\x58\x80\xcb\x91\x5a\x7d\x1d\x17\x3a\x75\x7b\x52\xfa"
+ "\xac\x7c\x7e\x8d\x70\x07\xfc\x41\x38\x64\xff\x74\xd2\xab\x23\x1f"
+ "\xfa\xff\xce\x7e\x09\x8b\xf7\x30\xfe\x87\xe3\x35\xf8\xa6\xe1\x19"
+ "\xe3\x9f\x16\x21\xe6\x78\x89\x59\xac\x15\xea\xba\x31\xcf\x40\x2e"
+ "\xad\xd2\xcb\x44\x59\x11\x5a\x8c\x70\x51\x9e\xdc\x7f\xfd\xe1\x9f"
+ "\xba\x65\x4a\x3e\xe9\x50\xe9\xac\xba\x31\x5f\xa1\x98\x70\xe9\x7e"
+ "\xbd\x31\xde\x81\x0f\x22\x39\x36\x3d\xb2\x53\x29\xa6\x3c\x01\xfd"
+ "\xaa\xea\xda\x6c\x50\x3d\xe0\x27\x4c\x84\x1f\xc4\xab\x4a\xdb\x9e"
+ "\xf7\x0e\xfb\xf7\x8a\x7b\x8c\xfd\x7b\x02\x1f\x2e\x95\x84\xa2\x6f"
+ "\x47\x52\x6e\x8f\x91\xbc\x93\x5a\xa2\x30\xe9\xbf\xe4\x3d\xe1\x43"
+ "\x4e\xe3\x4f\x46\x02\xbe\x6e\xb2\xe3\x80\x1c\xe0\x26\x3e\x5a\x0d"
+ "\x01\x4e\xb2\x36\xe6\x2c\xe8\x2a\x26\x1f\x0a\x7e\xbc\xb4\x01\x2f"
+ "\x6d\xc0\x4b\xb2\xb9\x41\xfd\xee\x90\x31\x99\x98\xb3\x90\xb9\xde"
+ "\x2b\xa6\xf6\x13\x6c\xd4\x12\x16\xa1\x02\x56\xc2\xb6\x9a\xe0\x13"
+ "\x9d\xec\xa1\xb3\xaf\xd4\x57\xa3\x17\x7d\x0e\xee\x97\x41\x75\x95"
+ "\x95\xa0\x5f\x06\xf4\x2b\xff\xbc\xd0\x4b\xd2\x99\x64\xd0\x92\xd8"
+ "\x40\x5c\xa1\xa3\x55\xc1\x7d\x54\x29\x16\x99\xe8\xc3\xd1\xf7\x7b"
+ "\xeb\x23\x37\x28\x9a\x6e\xe1\xe8\x36\x6d\xcf\x5d\xb4\x93\xe8\x56"
+ "\x3b\x3b\x3a\x3b\x72\x2d\x9d\x05\x4e\x02\x8c\xd9\x63\x34\x86\xbb"
+ "\x4b\xb8\x9d\xda\xd9\xdb\x78\x51\x79\xb2\x2c\x47\xa6\x71\x6d\x71"
+ "\x66\x57\x89\x23\xa1\x77\x78\x3b\x66\xdc\x18\xde\x8e\x51\xf4\x3d"
+ "\xb5\x83\xce\x35\x1b\xc9\xe9\x1d\xf0\x1b\x7c\xc5\x86\xde\xea\x8d"
+ "\x5c\x5b\x45\xed\xea\xf5\x1d\x70\xbf\x7d\xf3\xb2\x9e\x73\x42\xdd"
+ "\xed\x61\x04\x3f\xd2\x5d\xca\x3d\x26\xc7\x69\xff\x5e\x98\x3d\xa9"
+ "\xd8\xa8\x58\x42\x68\x8e\x09\x9e\x18\xfd\xed\xad\x5c\xa3\x62\x27"
+ "\xbf\x99\x8f\x81\x56\xf5\xfa\x1e\xf3\xc0\xc2\xd7\xdd\x7d\x3b\xca"
+ "\x4b\x89\x5c\xab\x70\x77\xc8\xdd\x83\x23\x3b\xbd\xf1\x04\x57\xb4"
+ "\x35\x1f\x73\xfc\x5b\xb1\x76\x0b\xbd\xdd\xfb\x98\xff\xf5\x22\x16"
+ "\x9e\x3b\x2a\x29\x45\xda\xa8\xbd\x9f\xed\x62\x9f\xcd\xd1\xe9\x18"
+ "\x9e\xf3\x5d\xca\x98\x39\x72\xae\xde\xb2\x03\x6b\x5a\xb8\x5a\x62"
+ "\xe4\x96\xd5\x46\x8e\xb2\xa2\x54\x6e\x35\x60\xdd\x0a\x0f\xe0\x8e"
+ "\x3c\x3b\xad\xe3\x0e\xbe\x3f\xd4\x3b\x5e\xbc\xff\xc5\x8d\xf1\xe2"
+ "\xfd\xb7\xb4\x3d\x87\x4c\x29\x13\xfd\x89\xe9\x32\x11\x5f\x77\xcb"
+ "\x0e\x4b\x21\xd5\xff\xfe\x56\x59\x37\x60\xe2\x4d\x26\x3a\x33\x1d"
+ "\x70\x2b\x46\xde\x04\x9d\x36\x10\x0e\x19\x7d\x24\x73\x31\x81\xe7"
+ "\x78\x97\x0a\xda\xd3\x2e\xd7\xe7\xa9\xa4\xf3\x8c\x53\x4b\x8e\x84"
+ "\x63\xfd\xda\x49\x32\x53\x67\x54\xd2\x71\xe4\x01\xfd\x1b\x18\xa7"
+ "\xd1\xbf\xc3\x28\xc3\xb1\x55\xfa\x46\x09\x17\x71\x2c\x31\xcf\x29"
+ "\x76\x25\xcd\x75\xa4\xc5\xa0\xdd\xa4\x0b\x81\x8c\xf0\x27\xff\xfe"
+ "\xaf\x5a\x92\x4c\xf0\xde\x4f\x7d\x30\x10\x3f\x0c\xd8\x6d\x33\xa8"
+ "\xfb\xaf\x8c\x33\x33\xea\xf3\x95\x75\x23\xf6\xff\xdb\x58\x16\xfa"
+ "\x81\xf9\x25\x66\x1b\xcf\x62\xd6\xde\x1f\xca\xfe\x3e\x89\x19\x08"
+ "\x0e\x2e\xf6\xa7\x83\x12\x76\x7f\xea\xd4\xc7\xc7\xc5\xde\x9f\x43"
+ "\xe3\x41\x7b\x84\xb3\xbc\xbc\x43\xee\x91\x1e\x8b\x71\xb1\x03\xda"
+ "\xfb\x23\x99\xbd\xac\x0f\x53\x2d\x0b\x97\x5b\x16\x2c\x5d\xb9\x64"
+ "\xd4\xa8\xc1\xbd\xc8\x12\xc7\xac\x52\x96\x38\x36\x27\x58\x96\xc0"
+ "\x73\x0e\xca\x9b\x7c\xbd\xec\x30\x3d\x43\x73\x79\x93\x91\xc8\x02"
+ "\xf7\xf7\xb2\xe9\xf7\x06\x3d\x4e\x60\xd3\xc7\x4f\xc8\x78\x26\x6b"
+ "\xde\x82\x55\x41\xa9\xf7\x05\xeb\xb4\x37\xef\x40\xdd\x21\x23\x1e"
+ "\x05\xfd\x50\x66\xbe\x46\xeb\xce\xf1\xa7\x0b\xbd\xfc\x1b\xe0\xee"
+ "\x24\xf2\x33\x57\x97\xeb\x65\x75\xa0\x6f\xfc\x16\xa2\xeb\x03\xa5"
+ "\xaf\x65\x1f\x23\x9d\xb1\x11\x7d\x77\x43\xa6\xbb\x2c\xcf\x01\x1d"
+ "\x5f\x51\x5f\xe1\x01\x9d\x48\xc9\x96\xfc\xce\xf1\x44\xa4\x47\xe1"
+ "\xfa\xbc\xdc\x5f\x3c\xfe\x22\x64\xf2\x64\xe1\x57\x27\x8f\xfc\xea"
+ "\x1c\x17\xf6\x52\x63\x3b\x8b\x99\xf4\xef\x78\xac\x95\xe2\x2e\xb8"
+ "\xd8\xf1\x0a\xe2\x2f\x28\x2f\xbe\xb9\xd7\xb2\x88\x25\xd2\x95\xf8"
+ "\x61\xbc\x4b\xe4\xe5\x29\xd9\x7c\x67\x3a\xd9\x77\xc5\x23\x7d\x1b"
+ "\xf1\x6d\x21\xe6\xf0\x41\x5d\x25\xc7\xb7\xea\x3c\x48\x67\x1f\xe7"
+ "\x10\x85\x3c\xae\xad\x83\x91\xa0\xdf\x91\x9d\x46\x9e\x41\x7e\xaa"
+ "\x14\x16\x4f\xeb\x83\x31\x3f\x4d\x9c\x77\xa5\x75\x91\x68\xc2\x6e"
+ "\x41\x4b\x8f\xb7\xeb\x74\xa1\x4c\xca\xa3\x83\xe9\x7b\xac\x9f\x17"
+ "\xe5\xfa\x79\xc2\xaf\xff\xc4\xbd\x59\xc7\xd5\x1e\x67\x1d\x97\xe4"
+ "\x66\x2d\xcb\x5a\x60\x19\xbd\x7c\x30\x0b\x8a\x0a\x9c\x9d\xb5\xc4"
+ "\xb2\x2c\xeb\xd5\x15\x59\xcb\x85\xa0\x47\x6f\x7b\xea\x0a\x41\x83"
+ "\x02\x31\xda\x47\x10\x8c\x4f\xac\x91\xfa\xab\x51\x62\x5f\x4f\xee"
+ "\xc7\xbe\x6b\x56\xcb\x86\x26\x4b\x1d\x7a\x1b\xe0\xfa\x81\xdc\xbf"
+ "\xb6\xa7\x90\x9e\x10\x70\xfd\xa0\x5c\xda\x6d\x9d\x38\xa9\xc1\xaa"
+ "\x1c\xed\x74\x04\xf8\xb5\x0f\xc5\xde\xb0\xb4\x9f\x3e\xd1\xe8\x62"
+ "\xc7\x0e\x05\x78\x90\x0f\x7f\x4c\x74\x50\xd0\xc3\x1f\xa0\x85\x1a"
+ "\xef\x8c\x7a\x3e\xf8\x05\xcf\xe3\x2d\x9b\xbb\x99\xd0\x4d\x53\xbc"
+ "\x0e\x49\x5f\x3f\x98\xa8\xc3\x11\xfc\x4b\x0b\xe9\x1d\x74\xf9\x68"
+ "\x96\xf7\x2a\x2f\x5c\xc5\x0c\xa4\x7b\x00\x0d\xc9\x79\x7b\x99\xdb"
+ "\xc0\x4b\x4e\xc4\x83\x97\x49\xa7\x3c\xbb\x35\x3b\x62\x1e\x95\x32"
+ "\x1b\xe5\x14\x04\xe4\x8e\x0f\x93\x05\x1f\xdf\x4d\x78\xf3\x81\x25"
+ "\x83\xd6\x08\x49\xbb\x87\xfc\x50\x7b\xf9\x60\xb9\xa7\x27\xe9\xdb"
+ "\x07\x87\xb5\x3e\xb4\x13\xcd\xd2\xec\xd0\x0d\x12\xaf\x3f\x4c\x06"
+ "\xce\xa5\xd3\x58\x80\xce\x6f\xd0\xe1\x45\xfd\xa5\xb6\xd3\x1e\x0a"
+ "\xe8\x70\xce\x3b\xab\x3d\x06\x19\x4f\xf7\x44\xa2\x94\x8f\x3e\x8c"
+ "\x0f\xde\xc3\x96\xb2\xd0\x87\x93\x02\xbe\x6b\x4e\x54\x5c\x4f\x23"
+ "\x96\x2e\xa1\xa3\x8d\xaf\x64\xac\x24\xb5\xf3\x0a\x5b\x82\x65\xc5"
+ "\x12\x61\x42\x20\xd4\x00\xb9\x2b\xe6\xbf\x62\x21\x2a\x92\x91\x32"
+ "\x7d\x7a\xc6\xa3\xcf\xfe\xe4\xf9\xc1\xec\xd1\x79\x48\xcb\x5d\x6a"
+ "\x99\x9e\x98\x20\x5f\x3d\x33\xf5\xb1\x9f\x66\x3c\x36\xeb\xd9\x99"
+ "\xb3\x7b\x39\x1f\x11\x01\x9c\x98\x8d\x31\x1a\xd0\xcc\x4e\xda\xa5"
+ "\x3d\xdc\x87\xb5\x3d\xed\xe1\x3e\x6c\x61\x8c\xb6\x06\x6b\x20\xc9"
+ "\x9c\xcc\xc7\x0f\xb0\x3b\xb9\x5e\xe2\xcd\xa0\xa1\x68\xbf\x27\x80"
+ "\x37\x27\x05\x5c\x49\x77\x20\xf7\x01\x6a\x40\xff\x4e\xa4\x05\xbf"
+ "\x0b\xd0\x82\x93\xc2\x56\x54\xc7\x0b\xc2\x87\x0c\x6f\xb8\xc0\x0d"
+ "\xc9\xaf\xd4\xa4\xe9\xb8\xb1\x59\xee\x55\x32\xd2\xcb\xd1\x7b\xe0"
+ "\x77\x28\xed\x75\x00\x17\x66\x93\x9d\x07\xa5\xf3\xa8\x77\x43\x65"
+ "\xb9\x35\x1b\x68\xef\x83\xf8\x59\x6d\x7f\x36\xb2\x8d\xd5\x9c\xe0"
+ "\x25\x1f\x4e\x97\xb2\xe0\x87\x6b\x04\xde\xac\x1b\xf1\xa8\xd8\x0f"
+ "\x17\x67\xdb\x6a\x0e\x07\xf0\xe7\xa4\x9d\xc6\x26\xa0\x8f\xae\x69"
+ "\xbc\x4e\x8f\x13\x82\xb4\x76\x3d\xf6\x41\xee\x28\x66\x08\x1d\x65"
+ "\x67\x5b\x0d\xbc\xd8\xc5\x6a\x2a\xa5\x4d\xf4\xc9\x08\x9d\x7f\xc6"
+ "\x3d\xe6\xbf\xe1\xc0\xf5\xfa\xaf\xb2\x20\xfd\x57\xa1\x8d\x7f\x5d"
+ "\x6f\x73\x13\x8f\xec\x70\xba\x85\xcf\xdd\x29\xf5\xb6\x4e\xb2\x73"
+ "\x1a\x0c\x38\xcd\x2b\xf2\xf1\x6e\xdc\x8f\x40\xdf\xc4\x1a\x32\x4e"
+ "\xea\x14\x20\x8f\x9d\x2c\x97\xb2\x89\x4c\x27\xb8\xe3\x9e\xf0\x2a"
+ "\x94\xc6\x07\x78\xd9\x8e\x31\x9a\xde\x1b\xdd\x8b\x5c\x6b\xd0\x7c"
+ "\x9b\x9d\x3c\x4b\x32\x2a\xc1\xea\xd7\x06\x35\xfb\xd7\x25\xf8\xe1"
+ "\x4a\xb4\x2f\xc0\x5f\x72\xcd\xd6\xe9\x64\xcb\xf1\xfc\x76\x5a\x37"
+ "\x3d\x7d\xd1\x52\x8c\x67\x93\x3e\x9e\xb3\x7c\xee\x29\x34\x5e\x5d"
+ "\x25\x1f\xc5\xe9\x63\xd9\x31\xf6\x69\x7b\xc8\x5a\x66\x39\x56\x39"
+ "\x9e\xd2\x31\xff\x4f\x0a\xbb\x66\xf2\x45\x70\xfd\xb7\xa0\xc3\xc9"
+ "\xda\xf7\x73\xf4\xef\xaf\xf7\x99\x2d\x0e\x8b\x93\x92\xeb\x21\x69"
+ "\x6f\xa6\x85\x38\xef\x61\x6f\x46\xfb\xd1\xc7\x25\x4e\xea\x3a\x38"
+ "\x93\xec\xcf\xa9\x67\xd5\x2d\x90\xbf\xb7\x3c\x3c\x5e\xd3\x03\x60"
+ "\x6e\x7f\x74\x75\x2c\x63\x39\x9d\x2b\xd3\xfd\x3a\x14\xd2\x7d\x90"
+ "\x1f\x4c\xb4\x23\xf8\xfc\x8b\xdf\x5e\xd8\xc5\x4e\xcd\x26\xfb\x45"
+ "\x5d\xf7\x4b\xf3\x4a\xea\x6d\x4e\xc5\x38\x3b\x19\x43\x79\x4b\x84"
+ "\x2d\x46\xc9\x47\x39\x02\xf7\x20\x6b\x0b\x39\xbf\x80\x7f\xa3\xef"
+ "\xab\x10\xef\x22\xcf\x86\x9e\xf2\xef\x7f\xc8\x73\x92\x1f\x1d\xa7"
+ "\xbd\x15\xa4\x67\xf6\xa6\x2f\x04\x7d\xc8\x9e\xb7\x64\xc1\xd2\x97"
+ "\x5f\xfe\x61\xd2\x10\xbc\xdf\x6a\x2f\x51\x37\xa0\x4c\x92\x7f\x5d"
+ "\x12\x4f\x4f\x81\xfe\xff\xf6\x90\xe4\xdf\x7e\xf6\x2d\xe6\xcd\xad"
+ "\x6d\xac\x36\x4e\xe7\xdf\xe5\x3c\xaa\xb5\xf2\x92\x53\x39\x81\xb9"
+ "\x71\xaa\xf3\xfb\x73\xa3\x36\xbc\xf7\xb9\x51\x9b\x80\x75\xb6\x09"
+ "\xef\xad\x2e\xf6\x3f\xc5\xf9\x0b\x7a\xd6\x78\x70\x87\xd1\x3b\x45"
+ "\xf0\xe0\x19\xab\x98\x42\xfc\x37\xe9\xa6\x69\x3d\xf0\x41\xae\xf5"
+ "\x81\x46\x64\x78\x99\x89\xd6\x82\xcd\x4b\x48\xef\x38\x92\x7b\xaf"
+ "\x70\x57\xc6\x2a\xd0\x0b\x3c\x97\xb5\x49\x7b\x90\xb9\x97\x21\x87"
+ "\xe0\x7e\xf3\x39\xa2\x15\x2a\x05\xe8\x60\x72\xbd\xae\xad\xd4\x79"
+ "\x5c\xe3\x5a\x8b\xf0\xdb\x4e\xeb\xb6\x4f\xda\xd6\x55\xd3\xda\x8d"
+ "\x7a\x0e\x0a\x1a\xe4\x33\xd2\x3e\x03\xdb\xbc\x08\xe5\x92\x8d\xda"
+ "\x12\x6a\x5f\xc8\x04\xa3\x37\x51\xf8\x35\xd9\xb3\x48\xd8\xa6\x4d"
+ "\x90\xb6\x69\x13\xd8\xee\x25\x04\x87\x5a\xef\x0d\x75\xe3\x51\x7b"
+ "\x1d\xc1\xe9\xf9\x2f\x2f\xcc\xb0\x65\xaf\xca\x20\xbb\xd4\xeb\xd6"
+ "\x77\x39\x87\x4a\xea\x2c\x12\xbe\x75\xb3\x03\xba\x2a\x69\x4f\x4a"
+ "\x34\x73\x9c\x47\xf8\x55\xd6\xf6\x93\xea\xc5\x79\x87\xa2\xab\xf4"
+ "\x1c\x0e\x9c\xab\xbf\x17\x3c\x7c\x58\x07\xd9\x71\xed\x49\x67\xf6"
+ "\x12\xee\x20\x1d\x1a\xd2\x6f\xd6\xfd\x3b\x74\x20\x1d\x73\x9f\xd2"
+ "\x84\x4f\x16\xd2\xcf\x49\xdc\xab\x3b\xee\x62\xc6\x89\x5a\x7d\x13"
+ "\xc8\x56\x54\x9c\x6f\x10\x7c\x46\xdd\x77\xf2\xbc\x60\x5d\xab\x0e"
+ "\x4b\xf0\xbe\x93\xc9\xd7\x04\xd9\x8c\x75\x70\xb2\x4f\xad\x0f\xd5"
+ "\xbf\x77\xb1\x3a\x71\x26\x68\x66\xa7\xb8\xaf\x9e\xdb\x19\xec\x1f"
+ "\xa2\xae\x52\xd2\xad\xba\x2a\xa4\x03\x5f\xea\xd6\xa3\xcd\x91\xd2"
+ "\x6f\x85\x28\x67\xba\x6e\x9b\x17\x0c\xb7\xc7\xe6\xd9\xc0\x2c\x2f"
+ "\x7c\xf9\xe5\xac\x65\xcb\x2d\xf3\xa4\x1b\x08\xeb\xd2\x9c\x05\x8f"
+ "\x68\xfe\x20\x96\x64\xad\xcc\x58\xb8\x40\x9c\x37\x43\xaa\xbc\xbd"
+ "\x0e\xbe\x09\x24\xdf\x88\x33\x1c\xa2\x4f\x7f\x5e\xb1\x5b\xe3\xa3"
+ "\x9a\x59\x43\xa8\xb4\xfd\x71\xbe\x2a\xd7\xb6\x21\x6f\xa0\x1d\xa7"
+ "\xf5\xb5\x8d\x74\x2c\x1d\xec\x41\x3b\xed\xcb\x91\xaf\x90\x5d\xdb"
+ "\x79\x0b\xe9\x59\x90\x07\xeb\x5f\x5d\xb8\x3e\x5f\x37\x21\x9d\xec"
+ "\x13\x1c\x4b\xc8\x26\xe1\xcf\xdb\xd4\xf2\xa4\x89\x3c\x7a\x8c\x0b"
+ "\x74\x4d\xc4\xfc\xa6\xfd\x28\x19\x57\xc6\x99\x42\xf4\x9a\x74\x81"
+ "\x8e\x25\x64\xdb\xed\x8c\x01\x7f\x62\x72\xb1\x3f\x57\x40\xd6\x9b"
+ "\xb8\x7e\x35\x0b\xdf\x25\xf7\x18\x5d\x52\xaf\xec\xcc\x7c\xbf\x80"
+ "\x31\x6d\x3d\x74\x6d\x12\x7a\x4e\xa7\x8c\x19\x63\x4f\x4a\xe5\xa6"
+ "\xa9\x87\x49\x0e\x97\xfe\xdf\x9c\x5b\x21\x4b\xa5\x72\xfb\xdd\x56"
+ "\xf0\xe3\x5d\xbc\xfc\x6e\x2b\xd2\x6f\x41\xba\x16\xa7\x27\x21\x7b"
+ "\x16\xc5\x46\x29\x4f\xc8\x46\x7a\x1c\xd2\x65\x7c\x37\xfb\x58\xeb"
+ "\x2c\x9f\x87\x7c\xca\x8c\xe4\xe5\x63\xad\xa8\x13\xfd\xbf\xc3\x2d"
+ "\xfb\x7f\x77\xb8\xc0\x39\x41\x37\x9d\x1e\xbe\xe5\xee\x0a\x61\xcb"
+ "\xbf\xe5\xee\x70\x95\x67\x87\xd0\x33\xd6\xad\xc1\xc0\x89\xd3\xbc"
+ "\xc8\xca\x34\xfb\xff\x90\x73\xac\x61\x2d\xe9\x94\x81\x6b\xc7\x09"
+ "\xae\x68\xeb\x6c\x4d\xe7\x03\xbe\xad\x01\xf4\x7f\x22\x93\xf4\xa7"
+ "\x21\x59\xaf\x0b\x73\xdf\x8d\xb5\x3d\x8d\xd6\x77\xc0\x22\x01\xbf"
+ "\x44\xa9\xbf\xf2\x40\x8e\x1c\xe9\xd7\x5f\x49\x1e\xb2\x21\x5f\x9f"
+ "\x7b\x54\xb7\x06\x8f\x34\xb5\x44\xf8\x27\x56\xb4\xba\xd2\x48\x97"
+ "\xa2\x97\xc9\x51\x26\xbf\xd2\x5e\x85\xb5\x38\x1c\x34\xc8\x1d\xb9"
+ "\x16\x6b\x2e\xd5\x41\x32\x40\xe7\x48\x8e\x35\xd9\x97\xe1\x0b\x95"
+ "\x3e\x62\x56\xb1\xa1\xc1\xfc\x3f\xea\x6b\x0d\xf0\xac\x28\xe3\x0a"
+ "\x68\x7d\x21\x2b\x6e\x61\x1f\x0b\x1e\x92\xf6\x8a\x09\x47\xba\x31"
+ "\xe6\x18\xf7\x56\xd4\x53\x0d\xb9\x65\xe8\x39\xf6\xf1\x68\x1a\x7b"
+ "\xb2\x89\xda\xdd\x2d\x64\x19\x23\xda\x16\xda\xcc\x3e\x8e\xa2\x71"
+ "\xa7\xb2\x00\xe3\x43\xde\xae\xf4\x27\xc8\x47\x23\xc1\x7a\x4d\x01"
+ "\x6f\xb5\xbc\x4c\xf0\xfe\x64\x1b\xf1\xf8\x90\x7b\xc4\x7d\xd1\x02"
+ "\xae\x0a\xbc\x11\x67\x02\x3e\xd9\xb6\xa6\x95\xab\x57\x4b\x18\xaf"
+ "\xc1\x5a\x73\xd5\xc0\xbc\x1e\xc8\xe8\x68\xb7\xa1\xe8\x3c\xf9\x91"
+ "\xac\x02\xdd\xda\x40\xb6\x58\xe1\x65\xab\x99\x89\x7c\x70\x16\xd9"
+ "\xb8\xa7\xbe\xb3\x92\xd5\xdb\x2a\xd9\x47\xde\xad\xcc\x91\x47\x3a"
+ "\xdf\x3f\x4f\x3e\x95\xbf\x95\xce\x60\x0d\x42\x1d\x3e\xcb\x4f\xa9"
+ "\xae\x8f\x4f\x9f\x3a\xfd\x09\x3b\xe5\xf8\x84\x59\x5e\x10\xcf\x2d"
+ "\xb5\xe9\x1f\xb1\xda\xe4\x8f\x58\x51\x0b\x57\x89\x5f\x2c\x5c\x4c"
+ "\x75\x6c\x40\x59\x55\xe4\xaf\xd2\xa4\x76\x98\x07\xa3\xff\xa1\xb3"
+ "\xf2\x89\x26\xbb\x99\x63\xc9\x7f\x52\x1b\xb3\x76\x5f\x62\xe1\x8e"
+ "\x25\x7f\x12\xf7\x42\xff\x82\xfe\x3a\x17\x34\x0a\xdb\x62\xf2\xd5"
+ "\xe9\xcc\x6f\x25\x5f\x06\xea\x66\x6a\xa3\x4f\xb6\x1b\xf0\x0a\xd5"
+ "\xbf\xdf\x53\xe8\xff\x5e\xc4\xca\xd9\x45\xf0\x40\x9b\xea\x66\x4b"
+ "\x98\xd4\x36\x02\xa6\x3f\xd5\xe0\x93\x1e\x0c\x9f\x8f\xd7\x13\x7c"
+ "\xe8\xac\x85\x9a\xd7\x5e\x85\xb6\x25\x03\x06\xaa\x5e\x07\xe1\x00"
+ "\xed\x0b\x52\xf9\x65\x97\x58\x84\x63\x09\x9d\xc5\xf8\xe4\x5b\x63"
+ "\x5a\x68\xb8\x7a\xe5\x7c\xf5\xe6\xcb\x2c\x94\xc6\x8d\xf8\x90\xcd"
+ "\xe2\xbd\x80\x79\x2d\x8d\x99\x3b\xea\x61\x0b\x7e\x90\x49\x1e\xb6"
+ "\x12\xee\xe1\x9a\x80\xf1\xda\x80\x36\x2c\xc0\x58\x55\xd1\x55\x9b"
+ "\x6f\xe9\xe4\xc3\x98\xd6\x7a\xe0\x4a\x20\x7d\x4b\xc2\x73\x5e\xcc"
+ "\x1d\x55\xc8\xb1\x9f\x2c\x50\xcb\x53\xab\xa4\x5d\x7e\x7d\xfa\x2e"
+ "\xc8\x0d\x95\x5b\x84\xef\x97\x08\xc8\x3a\xc2\x96\x63\x87\x38\x23"
+ "\xfa\xe7\x6c\x7d\x4d\xf8\xf7\x58\xf2\xab\xf2\xc9\x56\x83\xb0\x11"
+ "\x4e\x9a\xae\xe1\xfa\x74\xe4\xd9\xe8\x62\x63\x0f\xca\x39\xd1\x20"
+ "\xce\xb2\x12\x4d\xe9\x8b\x67\xc3\x3a\x58\x4b\xb6\xd9\xfc\x96\x74"
+ "\x16\xa1\x70\x77\x44\xa6\x91\x3b\xbd\xc7\x09\x87\x22\x04\xee\xcb"
+ "\x77\xe0\xb3\xdd\x46\xac\x93\x0d\x48\x0f\xd5\xd3\x69\x3d\x56\x21"
+ "\x7b\x93\xdc\x3f\x6b\x95\x91\x17\x5e\x66\x71\x42\x87\xa6\xa7\xaf"
+ "\x72\x1b\xeb\xcd\x8c\xce\xb7\x79\xc9\x77\x14\x7d\x83\xf4\x10\xac"
+ "\xbb\x87\x51\xaf\x03\xf9\x63\xf4\xfc\xbc\x23\x3d\xd4\x99\x7f\x5c"
+ "\xcc\x33\xf2\x2f\x28\xd6\x5b\x99\x3e\x60\x56\xbe\xdb\x28\xc6\x4c"
+ "\x4f\x5b\x9e\x2e\xd6\x79\xf2\x2f\x03\x3e\x9e\x8b\xf6\x9c\x13\xe9"
+ "\x0a\xe4\x70\x61\x63\x12\x94\x66\x20\x5f\x3e\xe4\x2f\x36\x28\x2d"
+ "\x04\x6d\x66\xfe\x67\xd4\x4d\x6b\x3e\xcd\xbb\x59\xab\x68\x3f\x51"
+ "\xae\xf5\xa2\xee\x55\x9c\x49\x1f\xd4\x32\x4d\xf2\x14\xa7\xdd\xc1"
+ "\x3a\x00\xda\xc3\xa1\xba\xd5\x8e\x74\x83\xaf\x23\x3d\x84\xea\xa7"
+ "\xb2\x48\x7f\x8b\x3e\xa2\x5e\xb2\xbf\x68\x64\xbc\xfc\x88\x85\xd3"
+ "\x79\x46\x94\x2b\xda\x93\xef\x01\xed\x39\x52\xd5\xbb\xdd\xda\x1b"
+ "\x8d\x8e\xc2\x17\x80\xd3\x9f\x0a\x9f\x8b\x3e\xd3\x94\x6c\xcb\x22"
+ "\x5a\xf3\x3f\x7d\x95\xc6\xd4\x87\x79\xee\x8b\x9a\x92\x3d\xae\x95"
+ "\x29\x85\x98\x3b\x72\x9f\xf3\xd3\x72\xe2\x39\x8b\x54\xce\x71\xbf"
+ "\x9e\x70\xd7\xd8\x4e\xf6\x66\x53\x72\x84\x8d\x57\xf4\x6f\x1b\x9c"
+ "\x9e\x56\x56\x5b\xfc\x25\xab\xf5\x3a\x8b\x0f\x5f\x72\x87\x4a\x5b"
+ "\xaf\x50\x2a\xf7\x75\x7a\x57\x84\xf9\x92\xe1\xab\xea\x5b\x4e\x86"
+ "\xec\x05\xd8\x7d\x25\xd7\x82\x4f\x3d\xba\xbc\x75\xe3\x3e\x7c\x96"
+ "\x46\x3e\x7f\xc9\x0e\x5a\xdd\x52\x4c\xfa\xf2\x22\xde\x65\x65\xe3"
+ "\x84\xad\xd1\x67\xd6\xc8\x4e\x96\xac\x95\x7b\x51\x96\x8b\xfc\x37"
+ "\x28\x97\xf0\xb6\xb6\x42\xe8\xd4\xd1\xa7\x62\x87\x0f\x65\xfb\xa2"
+ "\xd7\x12\x7f\x51\x04\x5e\x08\xbc\xcd\xe7\xdb\x50\x8f\xa3\xde\xdb"
+ "\xc0\xc8\x6f\xf8\x6e\x15\x6b\xff\x45\x33\xd3\xec\xda\x8a\x2e\xb0"
+ "\xcf\xd6\xaa\xdc\x6a\x82\x1c\x48\xba\xe4\x22\xa2\xb3\xa4\x9b\x2f"
+ "\xf4\xb1\x30\x67\xae\x8b\x91\xbf\x5b\x94\xf1\xcb\x13\xa4\xb7\x07"
+ "\xad\xf2\x71\xb3\xe1\xc8\x15\x17\xdb\x0c\xfa\x2d\xfc\xdf\xae\xbb"
+ "\x65\x47\xe4\x5a\x36\x85\x1b\x8c\xc2\x2e\x52\x2d\xaf\x6a\xc4\xd8"
+ "\x5a\xa5\x1d\x5d\xd2\x9c\x20\x1b\xba\x90\x0b\xec\xf3\x01\x64\x43"
+ "\xc7\x4d\x49\x16\xb2\x23\xe2\x18\xb3\xae\x92\xcf\x13\x5d\xec\x53"
+ "\x71\x76\x67\x23\xf1\x58\x82\xce\x7f\xbe\xcb\x1d\x55\x50\x45\x65"
+ "\x90\x1f\x3e\x35\xcf\x5b\xbd\xf9\x3b\xa6\xc9\xb5\x9f\xaf\xa9\x6f"
+ "\xef\x72\x70\x7b\x41\x15\xcd\x23\xad\x6c\x23\xca\x9e\xc1\xcb\x0b"
+ "\xaa\x5c\xec\xf3\x4a\x39\x36\xe2\x3e\x9b\xde\x7b\xaf\xd1\x99\xd7"
+ "\xcf\x5a\x2a\xbb\x89\xc7\xfa\xcc\x0e\xbe\xd9\xd1\x61\x2a\xa8\xfa"
+ "\x89\xb9\x18\xfc\xc4\xe7\xd5\x2e\xc3\xe7\x0e\xb1\xb6\x6b\xbe\x7c"
+ "\xaf\xd7\x3d\xf8\xc7\x70\xa7\x79\xb0\x13\x85\x40\x06\x88\x69\x63"
+ "\x5f\x8e\xea\x2e\x61\x86\x6b\x58\x5b\xbb\x21\x47\xf1\x9d\xe9\x11"
+ "\x65\x23\x58\x22\xde\x8d\x68\x63\x8d\x03\xbc\x06\x16\x83\x9f\xc9"
+ "\x7d\x4b\x36\xc5\x17\x49\x26\xfd\x70\xdd\x25\xda\xb3\x6e\x14\x74"
+ "\x7f\xf3\x0e\x16\xaf\xa2\x3c\xd2\x4b\x6f\x1e\xc1\xe2\x49\x27\x8d"
+ "\x34\x6b\x86\x4f\xee\xd9\xe8\x32\xe7\xba\x11\x2c\xa1\x67\xbd\x9f"
+ "\xb7\x4b\x9e\xf1\x4b\x0b\x5d\x57\xba\xd9\x6d\xb6\x24\xde\x8c\x72"
+ "\x29\x06\x29\xe7\xb7\x98\x0d\x92\xb7\x6c\x3c\x69\xac\x90\x78\x27"
+ "\xf6\x28\x80\x6f\xb4\x07\xa4\xe9\xbe\x15\xe1\xc3\x38\xfa\x31\x0f"
+ "\x9d\x39\x14\x69\x8a\x89\x60\x69\x12\xed\xd0\xfc\x8e\xfa\xd6\x8d"
+ "\xc9\xa4\x32\xa8\x3d\x19\xf3\xa4\xde\x9c\x7c\x92\xba\x58\xa3\xd0"
+ "\xf3\x6c\xdc\xc1\x22\x7e\xb5\x83\x99\xea\x5e\x16\xfd\xf2\xc8\xb9"
+ "\x18\xca\xa8\xbd\xaa\x9d\xe6\x19\x70\x02\xed\xa6\xfa\x08\x37\xea"
+ "\xbd\x17\x1d\x45\xb9\x5c\x75\x2c\x22\xbf\x3b\x5f\x3c\xe8\x58\x76"
+ "\x80\xcd\x6a\xf1\x4a\x3f\x7a\x73\x98\x7b\x0f\xca\xdb\x33\x82\x99"
+ "\xce\xb1\x2f\xa6\x3a\x73\x88\xd6\x9a\x6f\x77\x2c\x3b\x88\xb2\xbf"
+ "\x78\x9e\xd6\xa3\x4d\x80\x8f\x5c\x97\xbe\x8c\x70\x7a\x1a\x19\xc5"
+ "\x70\x99\x69\xe3\x3e\x2a\x07\x79\xca\x45\x7f\x77\x9a\x2d\x19\xd2"
+ "\x6f\xac\xe8\xab\x7f\x3f\x42\xeb\x87\xf3\x92\x28\x6f\x9f\x33\x13"
+ "\xfc\xab\xd6\x27\x1d\xd6\x12\xbf\xbe\xf8\xda\xb1\x6c\x1f\xa3\xf1"
+ "\xa1\xfc\x78\x6e\x70\x02\xe2\x19\xe7\x7b\x8e\x0b\xe5\x39\xc7\xbe"
+ "\xa4\x72\x1f\x08\xec\xb3\xd1\xfe\x4f\x20\x4f\xe5\x0e\xb2\x05\x6c"
+ "\x4c\xd9\x09\x18\x49\xfd\xe3\x17\x8b\xa9\xad\x2e\xf6\x45\x8e\x33"
+ "\xf7\xcb\xde\xcf\xfa\x62\xee\x03\xef\xd7\xd6\x0b\xdd\xdb\x97\x2f"
+ "\xce\xf4\xaa\x5c\xd2\xb3\xbf\x98\xc0\xbb\x35\xba\x70\x25\x5a\x20"
+ "\xe8\xc9\x58\xda\x1b\xff\x4b\x94\x51\x91\xe3\x4b\x7d\x21\x9e\xa9"
+ "\xb7\x31\x0e\xda\xf7\x30\x51\x5b\xf5\x31\xe6\xa6\x37\x1a\x55\xda"
+ "\xcf\x22\x9b\xf5\x6b\x66\x26\xf1\x8f\xdb\x51\xae\x46\xe3\x92\xaa"
+ "\xb4\xf5\xb4\xaa\x23\x6a\x4a\x2e\x7f\xcd\xec\xb7\xaf\xc5\xfc\xb5"
+ "\x65\x48\x9b\x68\x33\xd1\xa8\x3d\x06\x39\x77\xa8\x8d\xda\xb7\x95"
+ "\x72\x9f\xfd\xcb\x06\x7c\x5f\xd9\x6b\x7f\x43\x40\x77\x4a\x40\xa6"
+ "\xd1\x1f\x71\x06\x0f\xb4\x0a\xeb\x41\x98\xb3\xb3\x9b\xc9\xbd\xff"
+ "\xbf\x90\x6f\x81\x30\x3a\x7f\xad\xb7\xad\x7f\x7b\x14\x7f\x49\x97"
+ "\x7b\x14\x7f\xa9\xd0\xe5\x71\x6e\x02\x8c\x4b\x8c\x22\x9e\x07\xf8"
+ "\x2e\xb5\x33\xea\x0d\x97\x3b\xea\x5d\x93\x9c\x37\x7f\x71\xf0\x28"
+ "\x49\x6f\x33\x3c\xac\x98\xfa\xa5\xe9\x38\xc2\xa8\xcf\x28\xc7\xa5"
+ "\xef\x95\xeb\x65\xf7\x19\x23\x47\xef\x1b\xfa\x24\xfd\x76\xbc\xd1"
+ "\x28\xfa\x46\xbe\xa7\x44\xdf\x9a\x5e\xa4\xef\xfb\xd7\x9f\x26\x19"
+ "\x23\xd1\xfe\x86\xcb\x31\x82\xca\x38\x73\x99\xda\x47\x63\x02\xfa"
+ "\x30\xbc\x8d\x35\x55\xf3\xc1\xbf\x1a\xdc\xcf\x32\xe5\x59\x6b\xfb"
+ "\xbb\xa6\x6d\xa0\xc1\xf2\x2c\x2e\xd9\xff\x9c\x39\xc3\xcb\xdf\x35"
+ "\x91\x0c\xd3\x81\xfa\x80\x1f\x41\x74\xe8\x4c\x26\x8d\xd5\xd8\x03"
+ "\x2c\x59\xe2\xe1\x99\x67\x49\x76\x96\x31\xcc\xce\x40\xfe\xfd\xbc"
+ "\x46\xca\x4b\xba\x2d\xb6\x22\x6c\xb1\x83\x69\x6c\xff\xda\x78\x46"
+ "\xd0\x3b\x1e\x5d\x05\xfa\xd3\xd4\x29\x6c\x9c\xd0\xde\x95\x5e\x9d"
+ "\xfe\x35\x75\x72\xd2\x9d\x17\x6a\x3a\x54\xa2\x65\x85\xd2\x07\x26"
+ "\xda\xb3\xd5\xaf\x43\x25\x5f\x05\x25\xbc\x86\xf2\x61\xec\x2f\x52"
+ "\x1e\xe9\x5b\xaf\x4d\x3b\xc7\x7f\xe6\x4d\xed\x8c\xbe\x95\xec\xbe"
+ "\xf0\x6d\x83\x4b\x31\x08\x3b\x61\x82\x01\xd5\x2d\xda\x6e\x20\x7d"
+ "\xe9\x99\xf6\x80\xce\xba\x49\xc8\x8e\xd2\xcf\xc6\x5f\x43\x75\x1c"
+ "\x41\x7f\xc3\x64\xdc\x9a\xa6\xc5\xc7\x12\x98\xc0\x81\x0e\x6e\x1e"
+ "\x7c\x47\x25\xe1\xe4\x5f\x13\x82\xe1\x34\xcb\xab\x16\x49\x1a\x74"
+ "\x26\x86\x8b\xb9\x7e\x26\xe6\x87\xf9\x89\xbf\xae\xd5\x79\x11\x09"
+ "\x67\x13\xe8\xcb\xd7\xd3\x05\xac\xed\x77\x7b\xc8\xaf\xf4\x6b\x85"
+ "\xe4\x27\xff\xab\x1f\x53\x3c\x02\xaf\x3d\xc1\xec\x2b\x32\x93\xff"
+ "\x65\xa6\xda\x13\xac\xe7\x6c\xcc\x90\x61\x23\x3d\x7d\x81\x8d\x64"
+ "\x3c\xc8\xac\x26\x1e\x0d\xfe\x04\xf3\x7c\xcd\x42\x66\x7c\x31\x9b"
+ "\xf4\x15\xd6\x18\x8a\x17\x40\xb1\x02\x28\xd6\x87\xaf\xc8\x1a\x8d"
+ "\xfb\x58\xf0\x73\x26\x6e\x4a\x08\xa7\xbd\x7e\x5f\x09\x07\x3d\x6e"
+ "\x22\x5b\x66\x83\xd3\xed\x61\x6b\xce\xb3\x70\x8a\x47\xe0\x2d\x2f"
+ "\xd8\x50\xdf\x79\x46\xc8\x37\x91\x36\x16\x03\xfe\x83\xce\xb6\x98"
+ "\xd5\xa8\x02\x1b\xd6\xf8\x5c\xd9\xef\x8b\x5c\xf6\x5b\xb6\x9b\xda"
+ "\x2f\x69\xdc\x58\x6b\xa1\x68\xbb\xeb\xac\x17\xe5\xab\xf6\x09\xf1"
+ "\x3e\xfb\x04\x8b\xf4\x15\x51\xcb\x0a\x73\x79\xab\xb3\xb3\x16\x32"
+ "\xd7\x65\x11\x9b\x91\x6c\x09\xa8\x8f\xd4\x3f\xaa\xfb\xd4\xa5\xf3"
+ "\x22\xbe\x82\x17\xcf\x45\x39\xda\x37\xed\xf8\xa6\xbd\x96\x75\xdb"
+ "\x27\x88\xbe\xd7\x77\xca\x6f\x33\xc4\x3d\x7d\x1f\x04\x07\xad\xcf"
+ "\x7e\x38\xa0\xef\xd4\x3f\xea\xbf\x97\x60\x02\x18\x68\x7d\x35\x5f"
+ "\xd3\xfa\x49\x7d\xfc\x08\x54\x61\x07\xfa\x89\xbe\x8a\x7e\x5e\x43"
+ "\x3f\x6b\xb2\x19\xf3\x6c\x79\xc3\x7d\x35\x7a\x82\x85\x64\xd4\xa2"
+ "\x8f\xc1\xc3\x17\xd8\x19\x64\xd1\xd0\xb7\x0a\xed\x86\x7f\x07\x6f"
+ "\x52\xe8\x86\x4c\xea\xe6\xad\xf5\xe8\x93\xd3\x86\x9f\xb7\x92\x11"
+ "\x8f\xa3\xf3\xeb\x64\x27\x7e\x4a\x3d\xcb\x0a\x5b\x79\x2b\x78\x53"
+ "\x0f\xd9\x31\x3b\xb3\xd1\x7f\xc8\xb0\xe7\xb4\xf6\x53\xde\x35\xdf"
+ "\xc9\x7e\x19\x73\x58\xcc\xd1\x17\x36\x18\x9c\x8d\x1b\x98\xde\x97"
+ "\xb9\xc8\x87\xfe\x98\x51\xd6\x50\xea\x8f\x8a\x7e\xee\x44\x3b\x3d"
+ "\x41\x7d\xaa\x6b\xf7\xa0\xcc\x4f\xd9\xe0\x34\xa6\xec\xb8\x80\x7e"
+ "\x5c\x60\x66\x7b\x21\xf8\xaf\x67\x88\x5f\x74\xdd\x3a\x24\x9d\xc5"
+ "\xbb\xd8\x57\xf1\x12\xef\x84\xaf\xf3\x61\x6d\xec\xeb\xa9\x7e\x7f"
+ "\xe6\x14\x23\x22\xaa\x60\x23\xe1\x91\xf0\x6b\x4e\x6b\x46\x17\x70"
+ "\x86\xf6\xfc\x57\xa2\x8e\x2e\x6b\xac\x68\x4f\xc9\x44\xb2\x6b\x8e"
+ "\xc0\x33\xc5\x46\xa3\x73\xd8\x0a\xbe\xdb\xc0\x01\x33\x2a\x1f\xfc"
+ "\x5c\x2e\x5d\x09\x86\xbd\xda\xef\xbe\xcd\x26\xa1\x8e\x39\x24\x7f"
+ "\x57\x17\xba\x0d\xbf\x78\x9b\x25\xf4\x8f\xa6\x7c\x9d\xdb\x17\xfd"
+ "\x26\x5d\x2f\x95\x87\xbe\x45\x63\xe5\x7e\xbe\xe7\x1c\xb3\x08\x5a"
+ "\x26\xe9\x60\xb3\x85\x74\xa9\xfd\xac\x57\xf0\x70\x64\xaf\xd1\xbf"
+ "\xef\x9a\xe3\xf5\x76\xa0\x0c\x57\x5f\x6d\xef\x3f\x1c\x9a\x0b\xfa"
+ "\x2a\x6b\xd3\x76\x61\x6f\x59\x54\xb6\x1d\xf4\x02\xbc\xc2\x31\x33"
+ "\xed\xcb\x60\xed\xdc\xd7\xc9\x96\xef\x62\x14\xcf\x6f\xa8\xd3\x3b"
+ "\x83\x1d\xab\x4c\x64\xbb\x2f\x91\x2f\x44\x6b\xf4\xaf\x2f\x61\x2c"
+ "\x35\x1a\x42\x3c\x29\xe9\xa4\xf9\x72\xab\x69\xf3\x76\x9d\x87\xff"
+ "\xdb\xd4\x82\xcb\xcc\x60\x59\x22\xee\x53\x52\x2c\xdc\xbb\xd5\xa0"
+ "\x66\x57\x92\x9f\xfe\xe8\xbd\x16\xf2\xd3\xaf\xfb\xbe\x17\xbc\x4f"
+ "\x3e\xe6\x5c\x87\x79\xf0\xa6\x65\x2c\x81\xe2\x75\x18\xdd\x92\x97"
+ "\x93\xeb\xf5\xdf\x72\xd1\x3e\x93\xe6\x0f\xdf\x24\xfd\xe1\x7f\x7d"
+ "\x98\x6c\xe4\xb5\xf7\xaf\xfb\x20\xc3\x88\x72\x97\xb1\xf8\xca\x4b"
+ "\xcc\x4a\x7c\x50\xc6\x59\xc9\xb3\x91\x5c\x38\xa3\xdd\xc8\x7d\x7f"
+ "\xb7\xb2\x5d\x6d\x81\x78\x1e\xee\xe5\x14\x03\x84\x9b\xfb\xb2\xc5"
+ "\xde\x1c\x2b\x6c\x13\x84\x2f\x69\xda\xb3\xc0\x33\xdb\xba\x85\x85"
+ "\x1e\x23\x3b\xc7\x2a\x79\xbe\xf4\x98\x57\xda\x0e\x77\x95\xb4\xc4"
+ "\xe8\x71\x0e\xfa\xdc\x7b\xb7\x4b\x79\x47\x0d\x83\xfc\xe5\xee\x72"
+ "\x48\xdf\xba\x2d\x73\x9c\xeb\xd5\x20\x19\xa7\xe5\x11\x7a\x47\x69"
+ "\xe4\xaf\x30\x59\xc0\xb2\x65\x3d\xc9\x3d\x9a\xcc\x78\xd4\xe2\x4f"
+ "\x93\x3c\x8c\xb0\xdf\x36\xcb\xbd\x44\xac\x4d\x91\x68\x4b\x95\xbe"
+ "\x9e\xd1\xba\x2e\x7d\x18\xb7\x1c\x74\x19\xbe\xf0\xdc\xa0\x7d\x26"
+ "\xcd\xde\x9c\xf6\x81\x92\x91\xbf\x45\x5f\xdf\xc4\x7e\xf0\xba\x11"
+ "\x8f\x2e\x5f\xc5\xe2\x7e\x72\x73\x38\xa3\xbd\x44\xe4\x6d\x95\xeb"
+ "\xee\xd9\x88\xc0\x7e\x43\xb2\x80\x37\xf9\xde\x10\x32\x06\xf9\xb4"
+ "\x95\x31\x3b\xda\x75\xdf\xb6\x72\xfd\x3d\x7b\x57\xa0\x9e\xb3\xd3"
+ "\xfd\xeb\x28\xea\x20\x7b\x76\x2a\x5f\xf2\x26\x67\xa5\xbf\x49\xe4"
+ "\x93\xeb\xeb\x59\x76\x03\x5e\xcc\x4a\xf0\x55\x35\x79\xd2\xd9\xfe"
+ "\x8d\x84\x6f\x3e\x0b\xa1\x33\x1d\x47\x0b\x5d\xa1\x91\xd2\x07\xbd"
+ "\x11\xf5\xef\xa2\xf7\x84\xeb\x8e\xb1\xa4\x0f\x3c\x7b\x95\xb4\xcb"
+ "\xfc\x5a\x7a\xc4\x4c\x92\xf5\x05\x2f\x7e\xb6\xf5\x1e\x7c\x87\xb4"
+ "\xe8\xf7\x2e\x78\x42\x37\xaf\x66\x09\xd2\x47\xf0\x59\x61\xdf\x49"
+ "\xbe\x18\xee\x88\x61\xe6\x3b\xb6\x32\x6b\x57\xc9\x39\x93\xcb\xd0"
+ "\x28\xfa\x20\xea\xdf\x72\x24\x99\xce\xa5\xbc\xd3\xed\x1a\x20\xc7"
+ "\xea\xdc\x5b\x74\x06\x25\xe8\x79\x9a\xb6\xd7\xd4\xe0\x62\xe7\x0e"
+ "\xec\xb9\x20\xed\xf2\x85\x7e\xc9\xbe\xd7\x11\xb0\x65\x38\xf7\x96"
+ "\x6c\xcb\xb9\xb7\x8e\xd9\xc4\x19\x9e\xd3\xbb\x45\xec\x81\x73\xe0"
+ "\x8f\x5a\x1c\x9a\x3e\xa6\x41\xe0\x15\xf1\xbb\xa5\x24\x83\x7d\xe3"
+ "\xd8\x84\x7c\xb4\x4e\x80\x3f\x4a\x96\x3c\xfc\xde\x46\x15\xf8\x13"
+ "\xe8\xff\xb9\x9b\x49\xdf\xd8\x2b\x4d\xdc\xc1\x98\xf8\xa6\x7c\xaf"
+ "\x49\xd8\xc6\x94\x1f\xa9\xc0\x35\x9c\x97\xff\xd6\x81\x6b\x04\xd2"
+ "\x1b\x70\x35\xe1\x5a\x83\x2b\x78\x98\x23\xc5\x84\x97\x90\x61\xcd"
+ "\x14\x83\xb5\x23\x6a\x6f\x78\x5f\xe7\xfd\x08\x36\xce\xf5\x3f\x65"
+ "\xd2\xfe\xef\x1b\x3b\xc5\xdf\x9c\xb5\x8b\xb1\xe5\x5e\xde\x6d\xb9"
+ "\x8d\x62\xe8\x7c\x63\x2f\xda\x45\xfb\xf2\xdf\x2c\xe8\xb9\x2f\xff"
+ "\xcd\x7a\xfc\x8e\x33\xd6\x0a\x2c\x6f\x4d\xc5\xbd\x3d\xf0\x6b\x5d"
+ "\xdf\x55\xf2\x8d\x1d\x70\x14\x3c\x56\xff\x68\xe2\x37\x42\xe7\xb3"
+ "\x99\xe4\xa2\xa8\xe2\x6a\xd9\xdf\x43\x6e\x3c\x87\xf3\xa8\x23\x89"
+ "\x5a\x7f\x5d\x78\x36\x59\x8a\xb0\xae\x45\x01\x26\x23\xd0\xe7\xa8"
+ "\x23\x15\xd4\x5f\x6a\x6f\x47\xd4\x6f\x1d\xc1\x67\x1d\xa9\x4c\xea"
+ "\xbf\x3b\x0a\xdf\x01\x96\x7c\xec\xd3\x76\x1d\x9e\x1a\x9c\xe8\x7c"
+ "\x8f\xa1\x03\x65\x48\x3e\xe8\x1b\x3a\xbb\xea\xd0\xf3\xfb\x61\x3f"
+ "\x82\x89\x7d\x7f\xaa\x0b\x32\x71\xb8\x7e\x8e\xb2\xab\xa4\xb5\xe0"
+ "\xfd\x1c\xb9\x37\x42\xdf\x76\x06\x7d\x4b\xbe\x42\x7a\xfb\x1e\x75"
+ "\x86\xcb\x3a\x7f\xeb\x38\xc7\xbe\x29\x97\xf5\xb6\xda\xfa\x9a\x4b"
+ "\x85\xa3\xc0\xdf\x55\xba\xe8\x2c\x17\xf1\x43\x93\x9d\x71\x9d\xcc"
+ "\x59\xa9\x62\xcd\xdf\xeb\x4e\x2e\xe4\x28\xe3\xdb\x7b\xeb\x3d\xad"
+ "\xfd\x5c\x0f\x5b\x85\x3d\x2f\xef\x2e\x66\xce\x82\xf1\x62\x6f\xec"
+ "\x02\x6b\x9b\xe7\x74\x0b\x5f\x0a\x74\x2f\xec\x21\x69\x3f\x9e\xd6"
+ "\x06\xc8\xd8\xfe\x38\x30\x2a\xf2\xee\xa6\x74\xa4\xd1\x19\xae\x3d"
+ "\x41\xef\xf8\x96\xaa\x1a\x39\xa7\xda\x6e\x26\xde\x42\xb4\xd7\xfb"
+ "\x84\x83\xda\xac\xda\xab\x6a\xa8\x0f\x45\x90\xff\x28\xf6\x2d\xcd"
+ "\x09\x4b\x1e\xe9\x0a\xbf\xbd\x0c\xbc\xe3\x6a\x79\x55\x4d\xff\xfa"
+ "\xf0\xad\x83\xea\x2c\xf2\xf2\x0b\xee\xa8\xaa\x1a\xe2\x49\x36\x17"
+ "\x0e\x08\x7f\xac\x92\x3b\x3a\xa2\xf7\x82\x16\xb6\x99\xdf\xcf\x97"
+ "\x63\xd3\xbf\x72\xdb\xcc\x7a\xdf\x77\x6b\x7d\x47\x5d\xc2\x1f\xc2"
+ "\xb8\x0a\x19\x1f\x07\x79\xd2\xfa\xd4\x59\x61\x9c\x89\x1f\xc0\xda"
+ "\x70\x55\x83\x45\x95\x7f\x6d\xe8\x5f\x3b\xaa\xfe\x81\x3a\xae\xc9"
+ "\x3a\xfe\x1e\xfa\xcf\xd5\xf1\xf7\xd0\x1b\xd5\x21\xf7\xe2\xff\x6e"
+ "\xef\xbf\xec\xf8\x77\xe1\xd7\x12\xf4\xd3\x25\x69\xe6\x79\xc5\x07"
+ "\xf9\xcd\x6b\x3a\x44\xeb\x47\x11\xd9\xdd\x52\xac\x20\xaf\xbd\xb8"
+ "\xba\x2e\xbf\x9b\x39\xf2\x3e\x61\x2d\xec\xef\x27\xe9\x9b\xba\x5c"
+ "\x92\xd9\x8e\x24\x5e\xdb\xf2\xdb\xe4\x6b\x86\x36\x17\xc1\x7b\x17"
+ "\xc6\x61\x67\x10\x9e\xd5\x77\x7e\xc2\x9c\x99\xa4\x5f\x6d\x20\xbd"
+ "\x76\x22\x8f\x3a\xe4\x56\x41\x1b\xc0\xa3\xfb\x04\x3c\xc0\xbf\x48"
+ "\x79\xeb\x8d\x46\x21\x6f\xb9\x85\x2f\xf0\xa1\x22\x06\x50\xc9\xdb"
+ "\xed\xa4\xfb\xf6\x5d\x4b\xb7\x74\x95\xb0\x34\x8a\x0d\x44\x7a\x67"
+ "\x6e\x4a\x9a\x34\xcb\x1b\xc2\x85\x3c\x05\xde\x9f\x62\x03\x39\x3b"
+ "\x5d\xcc\x07\x3e\xba\xf2\x0a\x8b\xa9\x04\xef\x09\x9a\x6d\x22\xba"
+ "\xbe\x47\x8b\x0f\xb4\xe9\x4a\x20\x3e\xd0\x6e\xd2\xf5\x34\xe2\xfe"
+ "\x0a\x0b\xf5\x95\xbf\xd1\xb8\xf3\x0a\x8b\xdf\x95\xc7\xac\x3b\x49"
+ "\x97\xf7\xad\xe4\x7d\x84\x9d\x3c\xc5\x0a\x5a\x6a\xa5\xbd\x84\x00"
+ "\xef\x43\xbe\x3f\x02\x74\x4b\x8c\x65\xff\xe0\xdd\x2e\xd6\x41\xaf"
+ "\x7d\xaf\xc9\x6b\x3a\x52\x01\xd8\x39\x90\xc6\x00\xbf\x82\xde\xc6"
+ "\x56\xb7\xb7\xd9\x1a\x14\xdf\xe9\xfd\x78\x49\xdf\x5d\xec\x7c\x4a"
+ "\x5f\x38\xe1\xdb\x99\xce\xc6\xb5\xb3\x44\x69\x03\x30\x08\x6b\xe2"
+ "\xf9\xfd\x64\x1f\x59\xb8\x98\x99\x7d\x3b\xe7\x28\x45\x7b\x59\x88"
+ "\xd3\x9b\xcc\xe8\x57\xf8\x1d\x6f\x1d\x97\xc3\x12\x69\xff\x81\xf6"
+ "\x4a\x2c\xaf\x89\xfc\xab\xe2\x0b\x58\x62\x70\xd9\xa9\xd2\x88\x44"
+ "\x04\x55\x58\x45\x16\x24\x2b\x17\xe6\x66\x5b\xe6\xaf\x58\xb6\x2c"
+ "\x6b\x49\xae\x65\xc6\x63\x69\xd7\x9d\x75\x2b\xc3\xba\x60\x5c\x3b"
+ "\x75\xb6\xd1\x9b\x6a\x91\xf1\xb9\x2e\x26\x92\xbd\x2e\x2f\x4a\xaf"
+ "\x90\xfc\xe7\xc5\x7b\x25\xcf\x3e\xd5\x24\xcf\xda\x5d\x4c\xd4\x9e"
+ "\x0f\x03\x9f\x6f\x6b\x63\x17\xc4\x7a\xaf\xee\x34\xef\x03\x6e\x2a"
+ "\xe7\xd8\x85\xaf\xc9\xc6\x41\xe2\xe9\x85\xf7\xc9\x6f\x84\xb4\x85"
+ "\x38\x7f\x50\xda\x42\x5c\xf0\xfb\x7f\x91\xb6\x5f\x7b\x5d\x64\xf7"
+ "\x40\xfb\xdb\x72\xee\x5d\x28\xd6\xe7\x1e\xf2\x6e\x04\xff\x64\xea"
+ "\x3f\xcd\xb9\xb0\x51\xea\xcc\x2e\xd4\x02\xfe\xe9\x9a\xcd\xe3\xc8"
+ "\x66\xb4\x9d\xda\x82\xf7\x69\xd4\x9e\xc0\x99\xa1\x8b\x37\xf7\xf4"
+ "\x97\xa3\xf5\x71\xa7\xf9\x0d\xa9\x0f\xbf\x78\x2f\xf5\x07\xdf\x25"
+ "\x07\xa5\xc7\xa1\xef\xc9\x5a\xba\x9b\xbe\xef\x75\x1c\xa6\x2d\x99"
+ "\xbf\x74\xb1\x6d\x5e\xee\xc2\x97\x16\xe6\x2c\xcc\x5d\x25\xdc\x41"
+ "\x24\x88\x7f\x8f\x8f\x5e\x30\xfb\xfa\xd8\x06\x56\xd2\x8b\x68\x3e"
+ "\xd1\x3b\xc9\xa6\x41\xea\xa6\x2e\x9e\xf0\x96\xb0\x29\xfd\x83\xc1"
+ "\x45\x41\x67\x2a\x85\x8f\x98\x8b\xa7\xc1\x1f\x87\x6b\x7b\x14\xed"
+ "\xd2\xfe\x53\xbe\xef\x30\x1d\x29\xb6\x8c\x60\x93\x9b\x59\xc7\x06"
+ "\xda\x9b\xc2\x98\x34\xd0\x1a\xb6\x69\x35\xad\x35\x0d\xac\xce\x8b"
+ "\xf5\x4c\xec\x57\xbb\xdf\xa5\x98\x67\xc4\xc7\x01\x46\xfb\x9a\x99"
+ "\x5b\x8c\x3b\xbf\x68\xde\x27\xfc\xbe\x5c\x34\xbf\x41\x78\x43\x6d"
+ "\x56\x79\xfa\x4e\xce\xd3\x77\xa8\x17\xb3\x77\xf2\x8b\xd9\x3b\x02"
+ "\x7e\x55\xdd\x07\xf1\xed\x81\x66\xad\xac\xb2\x0b\xec\x00\xd1\x2a"
+ "\x7a\x36\xe6\x9a\x20\x9f\xed\xad\xa1\xf6\x38\xdd\x89\x4c\xfa\x82"
+ "\x70\x1f\x74\x76\x8e\x67\xe0\xff\x1a\xc4\x79\x4f\xb1\xc7\x06\x1e"
+ "\x0d\xdf\x39\xd1\x2e\xa7\xbb\x9b\xf8\x81\x1a\x15\x7c\x1a\xfa\xdb"
+ "\x02\x9a\x25\xe2\xb2\x51\x9f\x77\x81\x4f\x27\xbb\x8b\xae\x12\x37"
+ "\xf8\xd0\xf3\x8d\xc1\xb6\x37\x04\x83\x4d\x78\x4f\xb6\x17\x72\xfc"
+ "\xdd\x97\x69\xfc\x00\xe3\x07\x02\x38\xf0\xdd\x20\xea\xdf\xf4\x16"
+ "\xfe\x15\xb7\x27\xa4\xca\xf1\xfe\xee\x56\x2d\xed\x62\xc0\x17\xc5"
+ "\x77\xf7\xe2\xf9\x1a\x7e\x2a\xb7\xdf\x93\x1d\xb4\x3f\x4c\xef\x84"
+ "\xdc\x4d\x76\x24\xb6\xd5\x34\x57\xbe\xcb\x92\xeb\xfa\x3d\x3f\x77"
+ "\x17\x65\x87\xe0\x1b\x1f\x9d\x57\x95\xf0\xfd\xee\x17\xce\xf5\x17"
+ "\x74\x7b\x0b\xb4\xe9\xd2\x68\xc7\xcb\x5e\xb2\x41\x8b\x71\xb6\x78"
+ "\x85\x7d\xa3\xe6\x7f\x44\x51\x4b\x2e\x4e\x26\xbb\x78\xc8\x68\x11"
+ "\xbb\xa2\x65\x5c\x91\xae\x92\xef\x02\xfe\x9f\x4d\x92\x6f\xa3\xb9"
+ "\x45\x71\x23\x85\xed\x08\xf8\x23\x6a\x13\xcd\x2d\xd4\xd5\x42\x7b"
+ "\xcd\x72\x8e\x7d\xe7\xfe\xe7\xe6\xd8\x77\x6e\xea\x0b\xca\x5a\xcf"
+ "\x0d\x45\x7c\xdc\x46\x96\x29\x6c\x01\xbc\x9d\x74\xce\x38\x14\xf4"
+ "\x3f\x41\xd2\x8f\x8e\x79\xc2\x5e\x24\xaf\xbd\x8a\xce\xf2\xee\xe9"
+ "\x66\x11\xaa\x3d\x29\x91\xf8\xe5\xba\x02\x61\x43\x11\x8e\xef\xaa"
+ "\xc9\xc6\x82\x6c\x06\x23\x45\x5c\xd2\x4f\xd8\x9e\xcb\x2c\xb4\x85"
+ "\x5d\xb2\xd1\x9e\x4e\x00\xd6\x97\x4e\xd0\x1e\x1e\xdf\x32\xc6\x65"
+ "\x2c\x30\x6c\xa0\x32\xd4\x2b\xe7\x27\xe9\xdf\x81\x47\x1c\x48\xdf"
+ "\x35\xb3\x4b\x6f\x8a\xef\x28\xaf\xf0\x53\x63\x9a\x83\xb5\xd3\x44"
+ "\xf9\xbd\x78\xde\xad\x9a\xd2\x38\xe8\xba\x2f\xcf\x5b\x8d\x77\xb3"
+ "\x55\xfb\x6f\x1d\x48\x4b\x17\x7b\x09\xd7\xcc\xb4\xc7\x08\x9c\x2b"
+ "\xa8\x72\xba\xbe\x71\x88\xf6\xd0\xd9\xe3\x5c\xac\x81\x42\xbe\xb8"
+ "\xe4\xdb\xfd\x2d\x0b\xb5\xbd\x4c\xe3\xd9\x21\x79\xec\x0b\x6c\xbf"
+ "\x6c\x5f\x47\x79\xc7\x96\x09\x96\x0e\xe0\x6b\xa7\x21\x9c\x1d\x33"
+ "\x93\xcd\xfc\x91\xe2\x63\xe6\x6e\x8c\x4f\x47\xba\x2b\x74\x8c\x66"
+ "\x43\xdb\xe1\x9f\x9b\x84\xa3\x21\x66\x53\x11\xde\xe7\xeb\x36\x4a"
+ "\x84\x97\x1b\x45\xfc\x80\x4b\x69\x04\x37\x17\x73\x87\xd7\xe5\x04"
+ "\xfc\x77\x77\xc8\x73\x7a\x26\x7c\xe3\xf7\x7f\xef\xbb\xa2\xd6\xa2"
+ "\x1d\xe4\xe7\x28\xdf\x97\xa7\x36\xd1\x1e\xf8\xcc\xcb\x2a\xa7\x33"
+ "\x0c\x74\x1e\x85\xe4\x97\x59\xf9\xbc\x83\xe4\x31\x3a\xfb\x45\xfb"
+ "\xdf\x74\xfe\x3e\x30\x4f\x3a\x3c\xfa\x39\x7c\x7d\x6e\xd0\xf9\xae"
+ "\xb2\x45\x62\x9e\x92\x4d\x6b\x84\xd8\x03\x08\x79\xe5\xdb\x99\x9d"
+ "\x28\xf3\x82\xd8\xbb\xea\xd8\xad\x95\x43\xfe\xd8\xba\x4a\x3a\x27"
+ "\xeb\x65\xa8\x64\x0f\xbc\x4c\xd8\xe3\xb9\xe4\xf7\xd2\xde\x67\x66"
+ "\xa7\x2a\xce\xe5\xd0\xf7\xd2\x0e\xa7\xd3\xef\xff\x4d\x9e\x95\xe9"
+ "\x2c\xd6\x6d\xc6\x70\xbf\xd1\x7f\xd6\x0f\x30\xed\xb0\xef\xad\xe9"
+ "\x04\x7d\xe8\xb4\xef\x0d\xc7\xbb\xfd\x98\xd7\xdf\xf3\xf5\xd1\x43"
+ "\x27\x41\xf1\x0d\x57\x30\x83\x1a\x9d\x34\x87\xfc\xaf\xd0\x19\x56"
+ "\x69\xc7\x7e\x79\x90\xe6\x8b\x25\xe4\x02\xeb\x3c\x11\xd8\x0b\xf7"
+ "\x69\x7a\xdc\xcb\x89\x52\x8e\xb8\x9c\x28\xf4\xb8\x5b\xf6\x56\xff"
+ "\xc7\x6a\x8f\xa1\x7a\xb5\xcb\x20\xed\xeb\x2e\xc7\x83\x93\x09\x8a"
+ "\x81\xd1\xd9\x42\x65\xf5\xce\xf7\xa5\x2c\x90\x65\x5e\x11\xb1\xe2"
+ "\x02\x72\xf9\x15\xc1\xd3\xd1\xbe\xb5\x4a\x3c\x5c\x74\xb1\x83\xec"
+ "\x94\x9c\xb6\x4b\xa4\xcf\x0d\x93\x3a\x02\x99\x47\xb3\xdb\xbc\xa9"
+ "\xad\xe7\x73\x34\x3d\x4b\x98\x5d\x3e\xa8\xef\x0d\x95\x19\x54\x8a"
+ "\x71\xc9\x8b\xaa\x40\x2f\x6d\x9d\xc2\xb7\x83\x13\x3c\x21\xea\xe0"
+ "\xb6\x65\x74\x36\xf2\xf2\xb7\x14\x37\x4b\xce\xcd\x2b\x62\xff\x46"
+ "\x2d\x99\xc2\x8b\x48\x2e\x72\x53\x3c\xad\x4b\x0c\xf9\xa2\x50\xf6"
+ "\xb0\xe3\x05\xed\x64\xe7\x15\x4f\xb1\x92\x5b\xb4\xba\xdd\x51\x29"
+ "\x0b\xee\x88\x60\x99\x5d\x25\x57\xac\x2e\xf6\x61\x55\xff\xe9\xc6"
+ "\x15\xeb\x8d\x78\x64\xc9\xb3\x25\xb3\xbe\xe4\x6c\xd2\xa3\x8c\x45"
+ "\xfd\x33\x38\xb5\xbf\x6b\x98\xd7\xe0\x01\x5f\x36\x90\xdf\x5d\x9c"
+ "\xcf\xbc\x25\x03\xb9\x6f\x35\xc6\xab\xc3\x0c\x39\xac\x96\xd5\x4b"
+ "\xdb\x17\xda\xbf\x37\x16\x76\xf2\x4b\x4e\xef\x41\xd2\xe3\xbb\x25"
+ "\x9f\xd2\x35\xd4\xe9\x3d\xc2\xc8\x5e\x9b\xe8\x4d\x33\xbb\x72\x95"
+ "\xda\x35\xd6\x56\xcc\xee\xb9\x40\xef\xaf\x1c\x92\xfc\x5b\x57\x8c"
+ "\xbc\x5e\x69\x21\xdf\xd3\xc1\x6d\x7a\x7c\xc5\x92\xf9\xe4\xc0\xfc"
+ "\x9e\xe9\x59\x79\x59\x39\x96\x67\xc8\xbd\xf9\xf5\x76\xa0\x81\x58"
+ "\x9a\x5d\x2e\x5a\x5f\x89\x87\xa6\x98\x9a\x37\x8a\xa7\xa9\xc7\xd2"
+ "\xc4\x9c\x8b\x27\xbd\xf3\xbf\x32\x9e\xa6\xce\x23\x53\x2c\xcd\xc0"
+ "\x1e\x8c\xa7\xca\x3f\x07\xd4\xa3\x5d\xf4\x2c\xd6\xf4\x92\x2e\x0b"
+ "\xcd\x23\xb9\xbe\x78\xcc\xc1\x7e\xb0\x84\x3f\x97\xf2\x82\x2a\xa4"
+ "\x27\xea\x67\x58\x81\x8b\x11\x78\x4e\x0e\x9c\x99\xf1\x4c\x07\xdc"
+ "\xa4\x9f\x53\x93\xc8\x3b\x47\xb7\x55\x10\x7e\x48\x35\xdb\x0a\xb5"
+ "\x74\xd2\x69\xa9\x1f\xf4\xcc\xdb\xad\x0e\x0c\x97\x7b\x53\x9e\x0d"
+ "\xfa\x99\x2c\x39\x37\x8f\x6a\x73\xd3\x53\x75\x23\x7b\x92\xc0\xdc"
+ "\xf0\x34\x05\xe6\xf5\x57\xfa\xb7\x4d\x3f\x64\x8b\xa2\xc9\x69\xc3"
+ "\xda\x58\xf7\x77\xa4\x33\x94\x67\xb0\xbb\xc5\x19\x3a\xe9\x5f\xa3"
+ "\xfb\x8f\xda\x3d\xea\xe8\xde\xa5\xdd\xdf\x82\xfb\x5f\x68\xf7\xe0"
+ "\x17\xbb\x17\x6b\xf7\x98\xb3\xdd\xcf\x6a\xf7\x31\xb8\x7f\x44\xbb"
+ "\xc7\xda\xd1\x3d\x5a\xbb\x8f\xc5\xfd\x50\xed\xfe\xe6\x36\x76\xf5"
+ "\xb2\x76\x8f\x39\x78\xf5\x8c\xb6\xaf\x1f\x7e\x8e\x5d\x3d\xd9\x7f"
+ "\xb9\xf1\xea\x56\xc9\x07\x5f\x3d\x0d\xfe\x28\x5b\xae\x3d\xfe\xb4"
+ "\x56\xe0\xf6\x24\x1d\xbe\x48\xdf\x48\xf5\x74\x95\x74\x83\x9f\x6d"
+ "\xb1\x04\xa5\x6b\xbe\xad\xbb\xcd\xa0\x73\x07\x83\xd2\x6d\x5a\x7a"
+ "\x22\xe4\xd3\x94\xa0\xf4\x05\x5a\x7a\x2a\xe8\xe7\xe4\xa0\x74\x6d"
+ "\x1f\xbb\x3b\xd3\xc5\xfe\x3a\x3b\x28\x7d\xba\x96\x9e\xaf\xdb\xd1"
+ "\x68\xe9\xc9\x5a\xba\xdd\xc5\x3e\x0b\x0d\x4a\x9f\xa8\xa5\x83\xfe"
+ "\x7b\x0e\x04\xa5\x0b\xba\x22\xfd\xfd\x1b\xf9\xb1\x02\x9a\x5b\xdd"
+ "\xe0\xff\xff\xd2\x19\x94\x27\x4e\xfb\xb6\x05\xe9\x71\x41\xe9\x26"
+ "\x2d\xdd\xeb\x52\xc6\x04\x97\xd9\xa7\x3c\xaf\x54\xb0\xcc\xbe\x74"
+ "\xeb\x14\x03\x43\xd8\x26\x0b\x3e\xdb\xfb\x20\x9d\xf1\x32\xee\xe2"
+ "\xcd\x96\x42\xce\x9b\x99\xd7\xa2\xd9\xcf\x5a\xc8\x96\x51\x9e\x97"
+ "\xf3\x86\x6b\xbe\x12\xdc\xe2\x0c\xdd\x6a\x4a\xbb\x26\xe2\x3a\x8d"
+ "\xcb\x2f\x96\xbe\xe8\xf5\xb8\x46\xa4\x63\xd2\xf6\xdf\x91\xe7\x8f"
+ "\xa4\x73\xa7\x72\x48\x0f\xed\xcc\xed\x96\x71\x0a\x20\x8b\x52\x1a"
+ "\xe9\x5a\x08\x1e\xc1\x3a\x25\x49\xf7\xbd\x0f\xaa\xdd\x74\x4e\x55"
+ "\xea\xa3\x68\x2e\x52\x7e\xb2\x19\x0b\xce\xeb\x62\xde\x49\x74\x0d"
+ "\x31\x47\x7d\xd6\x55\xe2\x35\x07\xce\x07\x5d\xb3\x69\xe9\x9f\x22"
+ "\x3d\x31\x28\x7d\x4e\xdf\xb4\x1d\xf4\xce\x74\xb7\xf5\xda\x15\xde"
+ "\xe9\xbd\xc2\x3d\x65\x7f\x45\xbb\x5f\x16\x76\x7a\xb7\xf9\xec\x77"
+ "\x4f\xa2\xf3\x33\x14\x87\xd8\x9b\xc7\xdd\x64\x97\x88\xf4\x21\x33"
+ "\x3b\xdd\xe0\x31\xba\xf8\xa6\x97\xc8\x06\xf5\x32\xa3\xfd\xd1\xa2"
+ "\x76\x8a\x69\x69\xe4\x74\x2e\x7b\xcd\x79\x16\x41\xe7\x6b\x76\xbf"
+ "\x4c\xef\xcf\xb0\x19\xd9\x6e\x56\x97\xed\x63\xbb\x51\xf6\xae\x97"
+ "\x74\xfe\xc2\xdb\x10\x38\xfb\x3b\x86\xf6\x93\x6f\x2b\x12\x71\xd7"
+ "\x7d\xd2\xae\x66\x2d\xed\xeb\x1f\xd9\xcf\xff\x44\xbc\x71\x55\x83"
+ "\x71\x2d\xb3\x60\x6d\x8f\xc0\xbd\x43\xfe\xf0\x0e\xe9\x7d\xf5\x49"
+ "\xce\x65\x5f\xaa\xa4\x35\x77\xef\x97\xf4\xc2\x97\xca\x7f\x4b\x72"
+ "\xa1\x8f\xf6\x83\xf7\x83\x0f\xdf\xdf\xdb\xf7\x6b\x76\x31\xc3\xb5"
+ "\x2d\xe0\x4d\x2e\x1c\x32\x48\xfa\xa4\x4e\x52\x0d\xe1\x6b\x49\xdf"
+ "\x2d\x62\x2e\x6f\x49\xca\x39\xb0\xc4\x63\xa8\x5b\xdd\xc2\x5e\xbb"
+ "\x99\x99\xe7\x78\x0c\xc8\xe3\x7b\x37\x32\x97\xfc\xe5\xef\xad\x06"
+ "\x3f\x6b\xf8\xdf\xf1\xfe\xbd\x25\x87\x0c\x5e\xc1\xaf\xa8\x93\x84"
+ "\x8e\xd4\x9e\x44\x76\xc7\x46\x67\xa3\x8f\x78\xf1\x08\xf0\xe2\x89"
+ "\xa0\xff\xe1\xbe\x95\xd9\xd1\xde\xe5\xd9\x43\x76\x2d\x63\x11\xbe"
+ "\xe5\xd6\x98\x5f\x5f\x61\x93\xf4\xf5\x67\x57\x1e\xd6\x94\x2e\xf3"
+ "\xe0\xcd\x58\x53\x48\xf7\x12\xa9\x98\xc4\x5e\x30\xdd\xab\x86\xaf"
+ "\x33\x77\xe7\xdd\x38\x7e\xbc\x6f\xa5\x55\xf8\x8f\xa0\xb6\xf4\xd6"
+ "\xd7\x8d\x3b\x58\xa8\x4f\x3b\x67\x5a\x78\x96\xc5\x82\x7f\x36\x44"
+ "\x5e\xe6\x8e\xb6\x1c\x66\xa0\x98\xdb\x85\x59\x42\xbf\x39\xa0\x2e"
+ "\xdb\xcb\x9c\xf9\x5f\xb2\xc2\x65\x34\x46\xea\x26\xe2\xd3\xc8\xa6"
+ "\x18\xf9\x4d\x6d\x4c\xdd\x65\xf4\x60\xcd\xf0\x80\x27\x5f\x44\x72"
+ "\xb1\xfa\x07\xe9\xaf\x42\xed\xa4\x73\xa1\x8e\x65\x8f\x52\x5a\x5d"
+ "\xd1\x59\x61\xbb\x13\x2f\xe7\x96\xba\x9f\x9e\x8b\xe8\xdc\x6b\xf4"
+ "\x63\xf9\x6f\x77\x7b\x06\x48\xdd\x84\xfa\xa6\xb6\x3e\x54\x49\xd9"
+ "\x4e\xdd\xdf\x17\xee\xaa\xf6\x71\xa9\x9c\xe2\x8d\x56\x12\xff\xca"
+ "\x5d\x62\x9f\x9d\x7c\x00\xe4\x4f\x71\xf0\x2b\x76\xcd\x37\x11\x5f"
+ "\xac\x96\x8f\x4b\x95\xfe\x49\xb9\x6e\x23\x87\x35\x72\x5c\xba\xdc"
+ "\x63\x18\x97\x2d\x75\xee\xe3\xf2\xd7\x8d\xa0\xf3\x01\x3c\xa7\x23"
+ "\x6a\x1c\xd6\x38\x9e\xdc\x11\x9d\xda\x2b\x7e\xc9\xf5\x28\x21\xdf"
+ "\x72\x1b\x8b\xa1\xbd\x9e\x0c\x9f\xf4\xf3\x2b\xe6\xb0\xc2\x6c\xbc"
+ "\x5c\xbc\x1b\xd9\x6c\x63\x21\xd2\x97\x36\x3f\x32\xae\x92\x51\x9c"
+ "\x8a\xa1\xdc\x34\xce\x2a\x6c\x0f\xed\xe3\x26\x39\xdb\x29\x06\x9a"
+ "\x8f\x89\x3d\x23\x85\x15\xf0\xa8\x71\x56\x91\x5f\x61\x43\xeb\xdb"
+ "\xd1\x07\xd3\x58\x8f\xd3\x73\x9e\x69\xe5\xa2\x8d\x63\x3d\xdc\x3e"
+ "\x2e\x5c\x9c\x1f\x57\xd8\x8b\x3a\x5d\x15\x38\xaa\xb0\xa7\x25\xdc"
+ "\x12\xf2\x05\xdc\x50\x9e\xb6\x5e\x8d\xa4\x7b\xac\xdd\x89\xc2\x86"
+ "\xa4\x94\xa5\xea\x3c\xb2\x4b\xcb\x43\xdf\xe0\x5e\x9c\x75\xc0\xfb"
+ "\x6c\xf4\x9d\x69\xef\x23\x28\x0d\xfd\xc3\x9a\xc5\xf7\x51\xbf\xfa"
+ "\xa2\xad\x02\x16\x05\x2c\x04\xfd\x13\xfe\xd9\x89\x4f\x71\x76\x4e"
+ "\x71\x38\x69\x0c\x14\x03\xc5\xee\x69\xa7\x7a\xc8\x7f\x10\xd1\x4d"
+ "\x94\x19\x4a\xe5\x05\xb5\xff\x5b\xbd\x2d\x54\x1f\xbd\xe3\xf6\xb1"
+ "\xc2\x9f\x29\x60\x15\x4e\x79\x68\x5c\xcf\xd9\x48\xf7\x76\x19\x30"
+ "\xeb\xa4\x72\x63\x08\x26\x12\x66\x8a\x5b\x93\xe9\xb5\x71\x50\xce"
+ "\xf6\x84\x87\x7c\x56\x4d\xa0\x0d\xcb\xd8\xf0\x36\xc5\x10\xa3\xc1"
+ "\x4f\xc6\xef\x51\x14\xe1\xa7\x41\xbe\x53\x56\x05\x7d\x7b\xab\x3f"
+ "\x2f\xda\x4d\xbc\x11\xd9\x06\xd0\x5e\x91\xc0\x57\x45\xd9\x17\xf4"
+ "\xdd\xbe\x8c\xef\x88\x47\x1e\xe3\x59\xb7\x5d\xc4\x43\x4d\xec\x2a"
+ "\x55\x0e\x05\xe0\x2d\xcb\xe9\xa5\x8e\xdb\xf4\x3a\x5c\x8a\x92\xaf"
+ "\xb7\x13\xf7\x72\x0d\x2e\x55\xbc\x81\x31\x51\xe2\xf4\xef\x48\xa7"
+ "\x83\x31\xaa\xa1\x18\xc5\x7d\xc4\x5c\x51\x9c\xc8\x5d\xef\x9d\xe2"
+ "\x10\xf8\xa8\x18\x72\xc9\x56\x1c\x38\x64\x96\x38\x64\x48\x17\x6b"
+ "\x21\xd2\xa9\x4c\xda\xef\x13\xbe\x6c\x4b\x0d\x39\x28\x77\x83\xd6"
+ "\xe6\x62\xd9\x06\x03\xe4\x3f\xfe\x3d\xbf\xb5\x8f\xce\x5b\x60\x49"
+ "\xbb\x57\x9c\xa1\xbd\x67\x85\x8d\x8e\xc7\x2e\x08\x3c\xf4\xe4\xb9"
+ "\x4d\x7e\x9f\x65\xa5\x86\x5a\xbf\xcf\x32\x7b\xca\x06\x09\xff\x10"
+ "\x33\xbf\xc2\xb7\xd2\xf9\x0d\x9e\xc7\x2b\xca\xc8\x37\xe2\x65\x36"
+ "\x9c\x62\xaf\x17\xda\xf8\x37\xf5\x36\xc8\xec\xa6\xa4\x8d\xa0\x1f"
+ "\xf6\xc2\xcb\x6c\x20\xd9\x06\x11\xfd\x21\xdb\x63\x1e\x85\xf4\xf2"
+ "\x24\xbb\xff\x5c\x9d\x32\xd0\x44\x67\x41\x79\x51\x3a\x78\xe9\xa4"
+ "\x7d\x84\x0f\x64\x27\x7e\x4e\x09\x23\xbf\xaa\xfb\xf0\x2e\x77\x93"
+ "\xd0\x25\x24\xb5\xfa\x4c\x29\x99\x45\xe7\x59\x98\x88\x9f\x99\xef"
+ "\x21\x9d\x9a\xa1\x59\x09\x59\x85\x32\x5b\x91\x1e\x29\xd2\x3d\x1e"
+ "\xf2\x9d\xd0\x8a\x77\x91\x78\xf7\x47\x5c\x55\x94\x91\x5f\x86\x76"
+ "\x17\x9e\x67\xb7\xa1\x2d\xad\xa8\x87\xce\x99\x9e\x2b\x5a\xcc\x62"
+ "\xeb\x6d\xad\x24\xdf\xa1\x3c\x17\xd3\xfc\x8b\xb4\x36\x2b\xa1\x83"
+ "\xd0\xaf\x7c\xd2\x89\xe0\x5a\xb0\x09\xd7\x42\x1f\x8b\x2c\x5c\x83"
+ "\x75\x6f\x0d\xea\xa7\x73\xaa\x28\x87\x7c\x8a\xc8\xb6\xa0\x6f\xa4"
+ "\x57\x43\xb9\x6b\xda\xf9\x39\x94\xdd\x5a\xd7\x8e\xf2\xf2\x1b\xfd"
+ "\x65\x6a\x3c\x35\xe6\x77\xd8\xb7\x7c\x4b\x6a\x2b\xda\x54\x41\xf6"
+ "\xd3\x48\x33\x21\xad\xc5\xcf\x0f\x2b\x61\x67\xb5\xfb\x41\xfe\xbc"
+ "\x45\xe9\xac\xf0\x2a\x33\x0b\x1b\x80\x95\x21\xac\x59\x09\xcb\x25"
+ "\xbf\x56\x81\x32\x43\xbf\xa3\xf2\x36\xa2\xbc\xa2\x2c\x36\x08\xb4"
+ "\x3a\x1c\x6d\xa4\x38\xe4\x5f\x0b\x38\x89\x39\x16\xea\x46\x5f\xec"
+ "\xd4\x27\x15\x63\xb7\x09\xf3\x01\xfd\x51\xd0\x9f\x41\x6b\x7c\xfe"
+ "\xb3\xb7\xd4\xa7\x28\x92\xe7\xa8\x5f\x72\x1c\xa7\x80\x7e\x4e\x89"
+ "\x58\x93\xcd\xbf\x46\xdf\x5a\xeb\xb2\x1b\x19\xd6\x1e\x63\xbd\xad"
+ "\x81\xce\x31\x7c\x2d\xe1\xd6\x4a\x76\xa0\xa0\x11\x53\x22\xfc\x7e"
+ "\xa0\x95\xb0\xc5\x68\xbb\x1b\xed\xda\xa8\xf5\x93\xd2\xb2\xfd\x3c"
+ "\xbd\x12\xb6\x50\xbb\x1f\xec\xcf\xfb\xbd\x7e\x0e\x68\x0a\xea\x27"
+ "\xbe\x1f\x18\x45\xe5\x69\xfd\x1c\x8c\x7e\x0e\xfa\x7e\x3f\x81\x4f"
+ "\x79\x7c\xbd\xd6\xcf\x0d\x5a\x3f\x0d\xe8\xe7\x60\xf4\x73\x44\x50"
+ "\x3f\xa3\xaf\xeb\x27\x78\x91\x29\x26\xf4\xb3\x39\xa8\x9f\xa6\x5e"
+ "\xfa\x19\xee\xa2\x3a\xca\xa7\x88\xd8\x0d\x3c\xcc\xb0\x51\x9c\x67"
+ "\x2f\x1d\xe0\x3f\xff\xa9\xd2\x39\xca\x2b\xc2\xa7\xd0\x41\xd2\xdf"
+ "\x90\xde\x88\x64\x3d\x3a\xb3\x99\xb1\x6a\x43\xb1\xd0\xdd\xc4\x4a"
+ "\xdd\xb4\xe0\xaf\x4a\xc3\x12\xfd\xe7\x27\xb6\x8b\xb8\x48\x9d\x94"
+ "\x2e\x7c\x00\x2c\x63\x42\xf7\x38\x6b\xd5\xca\x22\xfa\x9e\xbe\x45"
+ "\xfe\x4c\xff\x39\x2f\x65\x40\x8a\xd4\x87\xa6\xba\xe9\x9e\x7c\x5b"
+ "\x89\x76\x95\x1a\x2a\xc5\x5e\x41\x69\xd8\x46\xbf\x4e\x33\x8f\x1f"
+ "\x27\xb8\x88\xf3\xa9\xe2\x7c\x27\xdb\x90\xe1\xdd\xa0\x9f\x33\x6f"
+ "\x47\xde\x43\x41\xe7\xcc\xdb\x45\x1b\xba\x85\x2f\x87\x95\xb3\xbc"
+ "\x2b\xc5\x79\x73\xe4\x69\x0a\xd4\x1d\x3a\x47\xab\xbb\x95\xee\xdd"
+ "\xd2\xd7\x1a\xe9\xd8\x2c\xc2\xe6\xa5\x74\x60\xb8\x6e\x67\xe2\x52"
+ "\x42\x52\x68\x2e\xf7\x1a\x43\xa8\x74\x60\x62\x0f\xdf\x4e\x4a\xb8"
+ "\x88\x61\x82\xf4\x54\xff\xd9\xf1\xd2\x81\xb3\x7f\xe8\xec\x78\x91"
+ "\x1b\xe3\x84\xf9\x06\x9a\xad\x00\x57\x20\xe3\xa6\x64\x8a\x38\x3c"
+ "\xca\x40\x11\x5f\xae\x59\x19\x48\xfa\x5b\xa3\xf0\xfb\xa0\x0c\xfc"
+ "\x83\x46\x9b\x2b\x66\xf9\xbc\x46\x17\xea\x14\xbe\xa2\xfc\xcf\x03"
+ "\xf7\x93\xef\x0b\xe4\xfb\x5a\xf8\xd0\x47\x79\x3d\xf3\x8b\xf7\xc5"
+ "\xd7\x3d\x27\x5f\xf7\x6c\xe9\x04\xcd\xea\xcb\x9e\x66\xd3\x08\xa1"
+ "\xe3\x4d\x8e\x5c\xcb\x6c\x45\xdf\xb2\x10\xe0\xe2\x59\x6a\x5b\x7d"
+ "\xab\x38\x6b\x67\xe4\x25\x89\xcc\xd9\xea\x95\x7c\x3b\xf8\xa5\xe6"
+ "\x78\xe4\xf9\x96\xc5\xd2\x59\x0f\x8a\x53\x84\xfc\x6d\x22\x36\x91"
+ "\x32\xe8\x97\x73\x56\x0c\x66\xea\xcf\xd3\x87\x70\xc3\x6b\x16\xda"
+ "\xcf\x7f\xab\xdb\x45\xf1\x7d\x94\xc2\xdf\xb0\x38\xa2\x53\xc0\xe1"
+ "\x16\x6e\x28\xb0\xe0\x9b\xf6\xff\xe8\x6e\x1d\xe0\xf4\x7e\xc9\x6c"
+ "\xa0\x9f\x6d\xca\xa0\x82\xd0\x02\x16\xba\xf9\x1c\x33\x01\xcf\xbc"
+ "\xc7\x20\xae\xe8\xbe\x1b\x2a\xa3\xa5\x4f\x80\x4a\xe0\xe4\x72\x33"
+ "\xf7\x74\x95\x86\x83\x3f\xfe\x5b\x83\xae\xbf\xd8\x28\x7d\xb7\x85"
+ "\xa2\xfe\xa9\xc2\xcf\x84\xe4\x0f\x00\xdb\x41\xc3\xe4\xb9\xd1\x98"
+ "\x9f\x77\x95\x0e\x8a\xf0\xcb\x36\xca\xa0\x0a\x09\xc3\x94\xf5\x72"
+ "\x1d\x19\x54\x71\x0c\x92\xee\x7a\x69\x97\x14\x83\xbc\x93\xfc\x76"
+ "\x49\xa4\x13\xc4\x7b\x8c\xe1\x7a\x29\xf7\xa4\xac\xcf\xf0\x85\x6b"
+ "\x73\x9c\xd2\xc7\x78\xe8\x5b\x7c\x67\x14\x31\x54\x4b\x07\xe5\x06"
+ "\x70\x6d\xd0\x64\x5a\x4f\xd1\xa7\x08\x8c\x6b\x35\xf5\x8b\x60\xd2"
+ "\x49\x7e\xda\x94\xf0\x83\xc7\xf6\xf5\x11\x63\xcb\x74\xf7\x7e\xaf"
+ "\xd0\x2f\xed\xdd\x0f\x7c\x3a\x8f\x31\xb8\x89\x7c\x55\x39\x51\x4f"
+ "\xdd\xee\x6e\x56\x67\xee\x60\xf5\xb8\xa7\xf3\x07\x8e\x45\x7f\x83"
+ "\x84\xdf\xfb\x5a\xae\x42\x46\x83\x1c\x33\x89\xca\x22\x5a\x43\x36"
+ "\x9b\xe4\x53\xb0\x1e\x5c\x8f\x13\x94\x9e\xca\xa8\x53\x5b\x59\x5d"
+ "\x3e\xc9\xb0\x47\xf6\xd7\xef\xfe\x92\xd5\x9b\xff\x2c\xea\x21\x7e"
+ "\xdb\xb1\xac\xe3\x46\x65\xd3\x59\xd6\x74\xad\xec\x76\x94\x1d\xd3"
+ "\x77\xd9\x55\x0d\xfd\x2c\xbb\x1f\xed\xae\x72\xf4\xa7\xec\xa2\x0a"
+ "\xee\x03\x1d\x1e\x8a\x35\x32\x91\xfc\xad\xd2\x39\x53\xdf\x15\xf2"
+ "\x31\x33\x52\xc8\xea\xe7\x94\x21\xaf\x12\xbd\x11\x36\x1a\xe5\x49"
+ "\x09\xe2\x0c\x2a\xe9\xd9\xb5\xb3\xa7\x4e\xef\x59\x46\x7a\xf7\xae"
+ "\xd2\x21\x73\x02\xb2\xa8\x7f\x7f\xda\xe4\x52\x86\x14\x4b\x7b\xe7"
+ "\xa4\x04\x89\x5b\x43\xee\xa3\xb2\x7a\x97\x39\xa7\x64\x0b\xbb\x79"
+ "\x65\xc8\xbb\xba\x7e\xab\x23\x6a\x4a\xb6\x56\x96\xe5\x7a\xbd\xa9"
+ "\xe6\x18\xc8\x92\x95\x9f\x6b\x91\xfe\xab\xb5\x03\xd7\x83\xd9\x33"
+ "\x59\xf3\xb3\x16\xe6\x65\x2d\xb0\xcc\x5e\xb1\x6c\xc9\x3d\x4b\x5f"
+ "\x7e\xd9\x32\x23\x6b\xf9\xf2\x79\x3f\xcf\x1a\xcc\x66\x2f\x9b\xb7"
+ "\x64\xf9\x42\xd2\x6d\x5a\x2c\x29\x13\x32\xb2\x97\xe6\xde\x93\x94"
+ "\x92\x78\x9d\x6e\x93\xce\x5f\x37\x91\x8c\x83\xf5\x29\x16\x3c\x46"
+ "\x14\xf9\x19\x32\xae\xe2\x8e\xd7\x20\x5f\x03\x07\xdb\x68\x2d\xa4"
+ "\xf5\x87\x64\x2f\xd0\xe8\xd3\x58\x33\x6a\x77\x6e\xe7\x0d\xe7\x94"
+ "\xdb\x5e\x05\xdf\xde\x48\xfe\x96\xb1\x66\x34\xf1\xee\x22\xb7\xd8"
+ "\x7b\x56\x6e\x9b\x41\xfe\x91\x7f\x85\x34\x77\x54\xca\xfa\xcd\x7f"
+ "\x65\xa1\x92\xc7\x88\xa8\xe5\x86\x81\x7c\x63\x2c\x3f\xce\xff\x66"
+ "\x66\x9a\xff\x7d\x83\xd3\xe5\x21\x3b\x9e\xf0\x59\xde\x22\x4e\x34"
+ "\x55\xce\xaf\x88\x3a\x09\x97\x71\xa9\xe2\x3c\x81\x72\xdb\x3d\x24"
+ "\x23\xae\xa3\x98\x9e\xa5\x11\xa0\xff\x6a\x4a\x80\x56\xc7\xea\xbc"
+ "\x79\x23\xe0\xbe\xb2\x19\xcf\xc2\x77\x4a\xd8\xd0\xf0\x1e\x36\x5a"
+ "\x4a\x64\x2b\x53\x46\xa4\xc9\x1f\xbe\x51\x46\xcc\x91\x3f\xba\x0f"
+ "\xfe\xdd\x66\x92\xbf\xeb\xd3\xff\xab\x3f\xbd\xfe\x7f\xba\x8c\xda"
+ "\x1f\xf8\xfd\x03\xf5\x8b\x7e\xff\x37\xf6\xff\xbf\x54\xc6\xe9\x1b"
+ "\xfd\x08\xdf\x80\x5b\x4d\xbf\xfa\x2b\x0b\x07\x7e\x6e\xdd\xf4\x12"
+ "\x70\xfa\x0c\x33\x17\x78\x79\x4b\xd1\x8b\x2c\xae\xf0\x5b\xf0\x60"
+ "\xe0\xb5\x72\xf3\x79\x4b\xe1\x15\xfe\x35\xf0\xe6\x75\xe0\xef\xa1"
+ "\xb2\x66\x16\xb1\xa9\x19\x7c\x56\xae\x8c\x6b\x44\xfb\x4d\x74\xd6"
+ "\xca\x89\xe7\xda\x3c\x0f\x3b\xe5\xfe\x8e\xec\x1a\x1d\xf5\x99\x4c"
+ "\x78\x51\x20\xfc\x8d\xc8\x64\x31\x95\xb1\xfc\x30\x2f\x79\xbb\x89"
+ "\x1b\xde\xae\x45\xda\xe9\x77\xd4\xe4\x01\xef\xac\xae\x19\x60\x79"
+ "\x89\xd6\x79\xe3\x26\x0d\x37\x87\x89\xb3\x84\xb8\x12\x0e\x92\xdf"
+ "\x6e\xb1\x6f\xa1\xc4\x96\xcb\x35\x3d\x76\x9e\xa6\xcf\xa3\x7b\x11"
+ "\xdf\x07\xfd\x38\xc4\x4b\x5e\xb3\x50\x99\x6f\xab\x87\x06\xd0\x9a"
+ "\xf9\xce\xea\xe4\x01\x05\xf3\x98\xa1\xde\xd5\xc6\x8e\x81\x16\xd2"
+ "\xfe\x38\xe6\xdd\x01\xcc\xb3\xea\x5d\xb1\xdc\x8e\xf6\x6d\x04\x3f"
+ "\xb7\x01\x6d\xda\xdf\x55\x6a\xa4\xf5\xa7\x5d\xe3\xe5\x1c\x98\x17"
+ "\x07\x36\x21\xcf\xac\x15\x6c\xe4\x26\xe4\x03\x6f\xb7\x81\x64\x14"
+ "\xd9\xbe\x9b\x2e\x03\x06\x07\x51\x67\x83\x65\x2e\x3d\x47\x09\x1e"
+ "\x83\xea\x46\x3f\x2c\xcd\x4a\x94\x90\xf9\xa9\x0e\xbd\xde\xae\x52"
+ "\xd3\x1c\x97\x32\x78\x9f\xb6\xc7\x68\x97\xe5\x98\x36\xc8\xf9\x9a"
+ "\x74\x90\xe2\xd3\x6a\x67\xb5\x0e\x6e\x5a\x8d\x75\xbd\x9b\x85\xa3"
+ "\x8e\xad\xa8\xc3\x61\x5c\xcb\xb8\x91\xce\xf9\x36\x79\x21\xd7\xa8"
+ "\xd2\x86\x56\x89\x5a\xac\x7d\x2b\xf8\x10\xc1\x7b\xf8\xc0\xdf\x0b"
+ "\xfd\x0c\xf8\x8f\x6c\xd0\x09\xf0\x1c\xe2\x8c\x04\xf8\x0d\x4a\x47"
+ "\x1d\x5b\xc9\xef\x39\xe4\xe6\x83\x58\xbb\xab\x89\x57\x98\x7b\xf9"
+ "\x49\x46\x7b\x1c\xc4\x2f\x2c\xcf\xe7\x1e\x11\xb3\xac\x34\x2a\x5c"
+ "\xe7\x17\x08\x3f\x88\x47\xd8\x34\x97\x85\x5e\xc3\x18\x03\x47\x6a"
+ "\xc0\x7f\x80\xa7\x8f\x4a\xd1\xc6\xa6\x46\xf0\x05\x5a\x8c\x72\x49"
+ "\xc3\xa3\x9e\xc6\xfa\x1e\x81\x3a\x6a\x5c\xca\x6d\x02\x16\x92\x06"
+ "\x45\x65\xea\x6b\x3d\xe9\x1c\x5c\x28\x83\x83\xd6\x01\x6e\x07\x13"
+ "\x32\x15\xe6\x52\x4c\xfb\x31\x16\x07\x29\x2f\xbe\x0f\x45\x7e\x3b"
+ "\xd6\x7d\x9d\xbf\x6e\x82\x4c\x00\x3e\x20\xca\x4c\xed\xc0\x37\xb5"
+ "\x80\x35\x8d\x45\x8d\x46\xc7\x4e\x4b\x1e\xe6\xa6\x3f\xe8\xb0\xc7"
+ "\x58\xaf\x0f\xc0\x3f\xaa\x29\x18\xfe\x80\xc5\x7a\x6d\x2c\x5f\x0c"
+ "\x1a\x3b\xc8\xa5\x37\x4d\x24\x3d\x34\xea\x3b\x2c\x74\x68\x4a\xf4"
+ "\x30\xf2\xe5\x06\x9c\x39\x0c\x58\x1c\x46\xbe\x43\x44\x9b\xd7\xfd"
+ "\x15\x34\xf7\x25\xe2\xa1\x6e\xba\x55\xf2\xa8\xd1\x87\x09\x87\xcf"
+ "\x29\xd1\x22\xc6\x68\x8b\x12\x15\x47\xe5\xe1\x79\x13\xae\xe0\x65"
+ "\xa3\x7f\x51\x54\x49\xb1\xb3\xa7\x08\x7f\xd5\x72\xac\xa7\xa0\x5d"
+ "\xd1\xb9\xfa\x39\x24\xc2\x01\x1a\x7b\xf4\x31\x4e\xea\x29\xa2\x73"
+ "\x49\xd7\x28\xbe\xbb\x96\x4d\x6d\x6c\xa2\xf9\xa9\xbf\x47\x7a\x2b"
+ "\xf9\xc0\x0d\x82\x4d\x9c\x36\x26\x87\x44\x1c\x5a\xe5\xa6\x61\x5a"
+ "\xdb\x68\xdf\x2f\x1c\x6d\x10\xfb\x10\x1d\xd7\xb2\x43\x36\xd3\x37"
+ "\x85\x81\x6f\x68\xfe\x00\x97\x8d\xf8\x66\x28\xae\x5c\xcf\x4b\xbe"
+ "\xf6\xd1\x8e\xad\xbf\x26\x5f\x64\x4a\xf4\x81\x8e\x6b\x56\x03\xc5"
+ "\xae\x40\xbd\x06\xc2\x0d\xc2\x0b\xbd\x8c\xcd\x12\x46\x07\x30\x7e"
+ "\x02\xbf\x8e\x79\x0f\xa1\x7f\x37\xcd\x76\xb1\x6b\xd2\xd7\x0a\xca"
+ "\xd1\xda\xe7\x10\xfb\x83\x61\x43\x8e\xef\x96\x7e\x83\x28\x5f\x41"
+ "\xc0\x36\x4a\xe7\x33\xa3\xc9\x2f\x40\x38\xca\xaa\xd5\x70\xc2\x88"
+ "\x7c\xfb\xfc\x38\x44\x3e\x07\x94\x9b\xe2\x89\xd7\xd4\xda\x4f\xb8"
+ "\x77\xab\x84\x5d\xd4\x71\xc2\x01\xf0\xf1\xda\x38\x47\x91\xbf\xf0"
+ "\x18\x89\x87\x37\xb5\xea\x65\x08\xbf\x05\x80\xb3\x8a\x32\x74\x5c"
+ "\x09\xa6\x0d\x5d\xa5\x31\x31\xa0\x0b\x7e\xbc\xd1\x69\x81\x2c\x73"
+ "\xd8\x0c\x8d\x0f\xd9\x8f\xb1\x69\x10\x31\x09\xc8\xaf\x95\xc0\xcb"
+ "\x61\x96\x63\x9d\x5e\xf6\x2b\xc2\xcb\xb9\x44\x13\x62\xd6\x74\x44"
+ "\xa7\x7a\x02\xb8\x1d\x93\xa3\xe3\x76\xd0\xb8\x0a\xdc\x5e\x2f\xe8"
+ "\x51\xcc\x46\x17\x4b\x9d\xad\xe3\x3e\xcd\x73\x15\xf3\x7a\x73\x9e"
+ "\xd8\x1f\x30\x92\x3e\x50\xcc\x7b\x4f\xbb\x90\x31\x68\x3c\xeb\xf3"
+ "\x5b\x84\xcf\xfb\x75\x2a\xc5\xa8\x38\x4b\xfa\x91\x36\x9a\xff\xfa"
+ "\x1c\xa7\xb1\x41\x5d\x0e\x8a\x73\xb0\x1e\x34\x90\xe6\x60\x27\xda"
+ "\x24\x62\x61\x44\xb3\xd0\xe3\x73\x92\xd9\x72\x8c\xed\xb1\x4c\x1a"
+ "\xb7\x61\x11\xfa\xb9\x87\xcd\x92\x06\x44\x68\xf8\x22\xda\x78\x1d"
+ "\x5c\x8d\x12\xae\xc3\x92\x7b\xce\xef\x68\x17\xcd\xef\x60\xb8\x12"
+ "\x4c\x09\xb6\xc8\x8b\xfe\x0f\x4e\xd5\xe1\x1a\x04\xd3\x33\x1a\x3e"
+ "\x6a\xb4\x75\x58\xaf\xb4\x95\x62\x07\x50\xac\x87\x75\xd4\x17\xac"
+ "\x29\x54\xbf\x88\xb5\xa6\xc9\x3e\xc7\xdd\x84\x53\xc3\x1a\x5c\xac"
+ "\xa0\x5a\xa7\x63\xc0\x15\x2b\xe1\x13\x8d\x95\x4e\x3b\x48\x57\xa6"
+ "\xb5\xdd\xab\x8f\x07\xb5\x3b\x98\x26\x60\x8d\x11\xf6\x5e\x81\x3e"
+ "\xc7\xde\x83\xef\xa2\x89\xb6\x05\xf8\xab\xd8\xc9\x3d\xfb\x1e\x1b"
+ "\x4f\x7d\x27\x9c\xb0\xe5\x91\xbe\x4c\xae\x65\x2e\xc5\x58\xdd\x93"
+ "\x5e\x19\x5f\x17\x76\x19\x1a\x3f\x46\xf4\xde\x36\x57\xe6\xa7\xf5"
+ "\x0d\xf9\x85\x6e\x5e\x5b\x0f\xc9\xef\x3b\xa5\x55\x6a\x30\x68\x42"
+ "\xfe\xe3\x74\x96\x9a\x7c\xf3\x0c\x69\x92\xb2\x20\x68\xf4\x61\xac"
+ "\x1d\x0e\xe4\x9b\x53\x0f\x68\x79\xc3\x18\xab\xd4\xf8\x4d\xa2\x13"
+ "\x7c\x65\xfa\x90\x95\xad\x6c\x90\x2d\x89\xff\xed\x9c\x32\xfc\x79"
+ "\xcc\x23\x0f\xf9\xbf\x44\xd9\x96\x73\xca\x88\x07\x51\x6f\x8c\x76"
+ "\x35\xe3\x3a\x0a\xd7\x9b\x71\x1d\x84\xeb\x2d\xe7\x94\x9b\xbf\x43"
+ "\x7e\x55\xcb\x9f\x88\xe7\x2f\x90\x3e\x41\xbb\xa2\x8d\xc3\xd3\x70"
+ "\x4d\xfb\x15\xf1\x95\x73\x45\xfa\x5b\xf4\x8c\xeb\x2e\xad\xdf\xb5"
+ "\x72\x6e\x0f\x5f\x83\x72\xf2\x29\x1f\xad\x6b\x48\xb3\x21\xcf\x3c"
+ "\x2a\x9b\x7c\x1b\xe0\x7e\x58\x10\x7f\x8a\x72\xcc\x14\xf3\x76\x22"
+ "\xae\x74\xd6\x22\x17\xdf\x9f\xa4\x72\x01\x83\x86\x00\xbd\x88\x8a"
+ "\x5b\x90\x2f\xc7\x13\x63\x5d\x41\xf3\x5d\xa7\x07\x84\x4f\x3d\xf2"
+ "\xcd\x91\xf9\xa4\xfc\x3a\xdc\xa3\x8f\x9d\x57\xe2\xed\x01\x2f\xc6"
+ "\x0e\xe5\xff\x98\xbe\xc7\xf5\x31\xed\x9a\xac\x5d\xa7\x6a\xd7\x27"
+ "\xb4\x6b\x8a\x76\x4d\x75\x29\xc3\x6b\x34\xde\x04\x30\x1b\x5e\x43"
+ "\x30\xc1\xdc\x95\xfe\x02\x15\xb3\x97\xe4\x6b\xd0\xff\xfb\x28\x46"
+ "\x68\x57\xa9\xd9\xa6\xeb\xad\x49\xf7\x73\xad\x74\xc8\x57\x3b\x85"
+ "\xee\xc7\xbc\x21\x88\x16\xce\x8e\x50\x92\x19\x78\xa7\xb0\x4a\x03"
+ "\xf8\x06\x59\x8e\xb0\x1b\x25\xf9\x87\x62\x0d\x51\xcc\x56\xf2\x3b"
+ "\x28\xe4\xa8\xa8\x77\xcd\x34\x5f\x85\x4e\xbf\x9c\xfc\x04\xa5\xa4"
+ "\xe3\xb7\x00\x32\x45\xb6\x4e\xef\x49\x5e\x92\x72\xfe\xc0\x06\xd4"
+ "\xd5\x19\x90\xf3\xcd\xfb\xe4\xde\xe6\xf0\x57\xbb\x4a\x6f\x0e\x92"
+ "\xff\xcd\x99\xd4\x66\xc0\xba\x11\xfd\x99\xd8\xac\xdc\x3c\x11\xd7"
+ "\xf1\x2d\xb2\xcf\x89\x7a\x9f\xb5\xb1\xb2\xe9\x30\x6f\x51\x86\x37"
+ "\x80\x1e\x2e\x23\xfc\x6e\xf6\xd3\xe5\xe1\x22\x8e\x9e\x86\x3f\x18"
+ "\xe7\xe1\xe4\x5b\xa9\x28\x88\x9e\xc4\x04\xe8\xf4\xcd\xf6\x9e\xe3"
+ "\x12\x65\xf7\x4a\x7e\xa1\x11\xf3\x92\x70\x20\xfd\xba\x79\x19\x4f"
+ "\xf3\x52\xfb\xb6\xb6\x27\x8d\x8f\x8d\x27\x1a\xaf\xb5\x11\x78\x3b"
+ "\x7c\x12\x8d\x8d\x4b\xb9\xf9\x80\xb6\x26\x35\x62\x8d\xbc\x0f\xe9"
+ "\x16\xd9\x4e\x99\xae\xd5\x05\xfc\x1b\x6e\x26\xfc\xd7\xd3\x35\xfc"
+ "\xa6\x72\xe8\xec\xf9\xcd\x7a\xba\x56\x3e\xf0\x74\x78\x38\xcd\x1f"
+ "\x3d\x5d\xe2\x64\x4c\x26\xd1\x1b\xfa\xd6\x2b\x6c\x19\x21\x7f\xcf"
+ "\x3d\x8e\x76\x8f\xd8\x08\xfe\xa2\x8a\xe6\xf3\xba\xd5\x2c\x62\x65"
+ "\x05\x1b\x2a\xe7\xe6\x88\xb7\xf4\x6f\xa5\x4e\x7f\x44\x95\x4e\xa3"
+ "\x36\x0b\x7a\x36\x2c\xa6\x27\xad\xbc\xf5\x11\x5e\x62\xf4\x7a\x4d"
+ "\x29\x69\x75\xde\x89\x82\xe6\x62\xde\x57\xe2\xbb\x46\x17\x7b\x7b"
+ "\x83\xb6\x96\xd4\xca\x3d\x95\x5b\x86\xd6\x55\x49\xda\xa5\x95\xed"
+ "\xa7\x7f\x41\x7c\x88\xa0\xf5\x54\x17\x95\x85\x75\xc5\xd4\x59\x94"
+ "\x3e\x44\xd2\xef\x5b\x12\x5c\xec\xf6\x18\x9d\xb6\xd2\xfa\x64\x54"
+ "\x98\xad\x6c\xae\x5c\x9f\x54\xd2\x81\xd9\x3a\x85\xbf\xb9\x7a\x5b"
+ "\x3b\xa3\x75\x93\xfc\x79\x67\xac\x1a\x4c\x7e\xa3\xd2\xd1\xd6\x51"
+ "\xe0\xcf\xf6\x69\x7b\x33\x90\x73\xe3\x3e\x26\x59\x56\x83\x2b\xe6"
+ "\x53\xdc\x1f\xb5\x71\x69\x42\x7b\xf6\x11\x6d\x5f\x97\x27\xe3\x75"
+ "\x91\x3e\x48\xc4\x8f\x23\x9e\xd5\xcc\x3d\x22\x36\x41\xe9\x2d\x87"
+ "\x83\x74\x5c\xd2\x66\x52\x19\xb1\x57\xc4\x9c\xb0\xa7\xa4\x49\x7d"
+ "\x62\xdc\x34\x99\x1e\x97\x20\xed\x10\x84\xdf\x50\x7a\x36\x87\x98"
+ "\x63\x3f\x97\x7a\xe1\x21\xdd\x92\x1f\x89\x8b\x08\xb2\xf9\x11\xb0"
+ "\x16\x7e\x8b\x4b\xe3\xe2\x03\xf3\xe2\x16\x0f\x7d\x83\x6f\xdb\x90"
+ "\x3e\x59\x4f\x97\x6b\x4d\x94\xe6\x47\x21\x65\xf6\x90\xb5\xc9\x0c"
+ "\xb4\x39\x6c\x67\x89\x3e\x7f\xe3\x2a\x65\xfd\x72\xfe\x52\x1f\x09"
+ "\x1f\x68\x0e\x7b\x85\x6f\xaf\x77\x85\x4f\x06\xdc\xa7\x7b\xf5\xb9"
+ "\x2b\xf9\xbb\x18\x31\x77\xc5\xbc\x8d\x3b\x10\x68\x47\xdc\x02\x0d"
+ "\x57\x9b\x3a\xe6\x9b\x23\xf0\x0e\x7c\xf7\x10\x6d\x2f\xeb\x16\x29"
+ "\x63\x94\x27\xe4\xab\x57\xb8\x87\x74\xd3\xa4\x4f\x20\x9d\x8d\x66"
+ "\xaf\x4a\x7b\x25\x9d\xe4\xaf\xcc\x8e\xf9\x10\xf0\x51\x66\x62\xba"
+ "\x8f\xb2\xae\xd2\x5b\xcd\x01\xdd\xf1\x2d\xf9\x5a\xbf\xd2\x50\x5f"
+ "\xa5\xa3\xf0\x4f\x84\x4b\x0b\xe5\x1c\xbb\x25\x9b\xf0\xd8\x09\xdc"
+ "\xc3\xfa\x53\x71\xac\x40\x7c\x3b\x5b\xc7\x3d\xcc\xd1\x05\x18\xf7"
+ "\xb3\x5b\x63\x79\x05\xc6\x94\x6c\xec\x73\xf0\xfc\x31\xae\x0b\xe4"
+ "\x55\x31\xd1\x55\xc3\xf9\x0a\x7c\x6b\x77\xb1\x51\x87\xf4\x31\xe8"
+ "\x8c\xda\x6b\x11\x38\x56\x48\xf6\x8d\x89\x62\xaf\x9f\x70\x8c\xf0"
+ "\x4b\xec\xf9\x03\xd7\x8c\x6b\x9f\x64\x84\x67\xc2\x6f\x09\x9e\xa9"
+ "\xbd\x84\x67\x28\xab\x49\xf7\x61\xec\x52\x6e\xd5\xf6\xdb\x6e\x75"
+ "\xeb\xb6\xe1\x84\x87\xb9\xa3\xd8\x30\x94\x6f\x39\x6e\xe9\x24\xdd"
+ "\xf9\x57\x4e\xef\x54\x46\x79\x09\x76\x92\x5e\x0e\x3f\xde\x55\x7a"
+ "\x5b\xd0\xf8\x47\x49\x5f\xb1\x73\x84\x3e\xf3\x26\xbc\x4b\xee\x49"
+ "\x73\x22\x6a\x05\x5f\x89\xf5\xf9\x8e\x18\x66\x01\xde\x62\xad\xb9"
+ "\x6d\x81\xce\x0f\x8f\x43\x1a\xf2\x50\xfb\x48\x06\x6f\xc0\xfd\x02"
+ "\x5a\xa7\xfb\xd0\x3b\x93\x5c\xe2\x26\x9a\x41\xba\x27\xd2\x83\x01"
+ "\xd6\xa7\xcf\x29\xa3\xce\xd6\x91\x0f\xa1\xa5\xdf\xf7\x63\x5d\x98"
+ "\xcf\x2f\x93\x4f\x2b\xcb\x32\x76\x53\xb3\x32\xaa\x86\xf4\x4e\x45"
+ "\xdf\x91\x8e\xe7\xb6\xf6\x9e\x3a\x9e\x91\x93\xb5\x5f\x1a\x7e\x07"
+ "\x03\x3f\x4b\x8a\x76\xef\xb8\xf1\xcf\x32\x47\xe6\xb5\x64\xe3\x97"
+ "\x2b\x61\x65\xc6\x5c\x19\x99\xa6\xc3\x8a\x68\x0a\xd1\x58\xb2\xb3"
+ "\xa1\x79\xae\x78\x19\xf9\x2c\xc2\x38\xa1\xdd\xeb\xc6\x3c\xe3\x58"
+ "\x4d\x32\xed\x48\xe1\x0f\x81\xfc\x11\xf7\xcb\xd6\x4b\x19\x29\xc6"
+ "\x53\xf8\x8b\x55\x46\xa6\xa0\xee\x98\xcd\x17\x58\xa8\x6d\x19\xbb"
+ "\x95\x74\xe8\x46\x1f\x77\x90\x0c\x4c\x38\x41\x71\xcd\xda\x14\xcb"
+ "\xd4\xdc\x35\xcc\x80\xf7\x23\x71\x3f\x51\xe7\xa5\xf0\x8d\x29\xc4"
+ "\xc3\x62\x88\x87\x7a\x6c\x0d\x1b\xd9\x55\x6a\x31\xe9\x63\x45\x7c"
+ "\x06\xe9\xf1\x34\x5d\x04\xb5\x55\xd8\x02\x90\x6f\x7e\x17\xc1\x4d"
+ "\xa7\x55\x17\x48\x77\x3d\xd2\x1b\xd2\xc9\x4c\x72\x1d\xb2\xcc\xc6"
+ "\xb8\xc6\x48\x7c\xb1\x98\x81\xfb\xa7\x83\xda\xf9\x78\xd0\x7d\x29"
+ "\x7d\x6f\xec\x24\x1e\xae\x2f\xf8\x58\xf6\xea\xf0\xd9\x2c\x7c\x7a"
+ "\x32\x9b\x18\x6f\x2f\x6f\xa7\x38\x6e\xb6\xd5\x2c\xbc\x4d\x19\x55"
+ "\x8e\x3e\xd2\xf9\xdc\x1a\xa9\xe3\x1f\xf5\x0b\x5d\x4e\x97\xed\x1e"
+ "\xf5\xb4\x71\x6d\x08\x23\xdd\x3c\xf9\x80\x14\xb6\x98\x17\xcd\x42"
+ "\x1f\xef\xf4\x4e\x66\x8e\xc2\x87\x28\xcf\xad\xda\x5a\xd6\xd4\x51"
+ "\x64\x66\xc7\xcc\x93\x31\x8f\x47\xc5\x61\xae\xd8\xfa\x6d\xf3\xaa"
+ "\x8c\x8a\xd3\xe0\x5b\x2b\x6c\x45\x14\xcb\x79\x5a\x4b\x48\x37\x80"
+ "\x75\xe4\x38\xad\xd7\x28\x3b\x5f\x9f\x37\x58\x27\x8e\x03\x4e\xed"
+ "\x92\xc6\xd0\xfe\xbc\xa5\x95\x7c\xc7\x08\xf9\x41\xe6\x8f\x90\xfb"
+ "\x06\xa3\x0e\xf8\xf9\x6d\xe4\xa3\xef\x84\x0d\xa1\x62\x71\x64\xf8"
+ "\x48\x97\x60\x71\x50\xdf\x34\x5c\xc4\x7a\x35\xaa\x29\x30\x6f\x2d"
+ "\xe2\x5c\xde\xb1\xf6\xe0\x79\x39\xca\x1b\x90\x53\x6f\xab\xbe\x67"
+ "\x2b\xb3\xf4\x36\x0f\x6d\x91\xb4\x56\xdd\xbe\x78\xf3\x66\x5e\x65"
+ "\x37\xa8\x8f\xae\x2b\x63\x11\xca\x46\x80\x8d\xe6\x59\x5e\xe6\xb0"
+ "\x73\xca\xed\x6b\x8c\x11\xc3\xd3\x1e\xcb\x1d\xc8\x0b\xcd\xcc\xb0"
+ "\xe9\xd2\xc0\xf0\x51\x9e\xe1\x55\x3c\x64\xcc\x33\x33\x72\x69\xef"
+ "\xdb\xce\xbe\xc9\x61\x21\x8f\xf9\x50\x77\x04\xb3\xb9\x94\xf8\x0d"
+ "\x74\xd6\xfc\x58\x04\xf1\x22\xf1\x1b\xa8\xcc\x82\x4a\x16\x5e\xd0"
+ "\xc2\x5b\x37\xbe\x3c\x20\x1c\xeb\xaf\x09\xeb\xc6\x86\x21\x11\xc3"
+ "\xab\xae\xa1\x8c\xf7\x33\xc5\x77\xd5\x7d\xb7\xed\x8e\x41\xbd\xb7"
+ "\xcd\x16\x7b\x4e\xb9\xe3\xe6\xfe\xb5\x6d\x74\x4d\xa0\x6d\xa3\x6b"
+ "\xfe\x05\x6d\x7b\x3d\xa8\x6d\xa6\x40\xdb\xb2\xa9\x6d\x7f\xec\x5f"
+ "\xdb\x7e\x14\x1e\x68\xdb\x8f\xc2\xff\xc1\xb6\x1d\xe8\xbb\x6d\xf1"
+ "\x3f\xee\xbd\x6d\xf9\xc3\xcf\x29\xf1\x4f\xf7\xaf\x6d\xd6\xd4\x40"
+ "\xdb\xac\xa9\xff\x95\xb6\x15\x56\xf2\xb3\xf5\x98\x41\xa4\xcf\x21"
+ "\x3a\x7f\x4e\x19\xfd\xec\x9a\x38\x61\xc7\x1d\x8d\xfb\x41\x45\x95"
+ "\xfc\x6f\x92\xb7\x89\xaf\x93\x6b\x5a\x3c\xe6\xcf\x6d\x9a\x5d\xc9"
+ "\x68\x11\xe3\x41\x0d\x19\xb1\x9f\x97\x70\xef\xd8\x4e\xb2\x19\xf4"
+ "\x92\x7f\x15\xf2\xed\xbe\xf1\x9d\x2b\x1e\x8a\xab\x51\xb9\xe7\x52"
+ "\x28\x7b\xe7\x8a\xdb\xd0\x55\x3a\x9a\xe9\xfe\x59\xf5\x6f\x8d\x15"
+ "\x37\xa2\x47\xa3\xef\x7b\x2c\x9b\x19\x89\x1e\xd1\x95\x62\xb5\x6e"
+ "\x2e\x1c\x18\xfe\xd8\x77\xb4\xee\x8f\x9e\xae\x9f\x99\xd5\xcb\x9a"
+ "\xd5\x3a\x90\x1b\x0b\x58\x08\x9d\xdb\x15\xfe\x17\xcd\x6e\x16\x5f"
+ "\xc0\x06\xcc\xca\x47\xf9\x1e\x96\x69\xcc\x47\xd9\x80\x87\xe4\xe5"
+ "\x47\x97\x87\xe4\xb0\x88\xad\x28\x9b\xae\x8f\x99\x8b\xf8\xba\xdf"
+ "\xb0\x50\x3a\xdf\x4b\xe7\x74\xe5\x19\xdd\xb0\x70\xd4\x73\x50\xaf"
+ "\xe7\x07\xe0\x17\x29\xe1\x77\xe7\xb6\x00\xfc\xee\x9c\x16\x80\xdf"
+ "\x9d\x43\x25\xfc\xee\x0c\x0d\xc0\xef\xce\xce\xfe\xc1\xef\xce\xe4"
+ "\x00\xfc\xe4\xb7\x37\x86\xdf\x9d\x2b\xfa\x86\xdf\x9d\x1b\x03\xf0"
+ "\x93\x65\xf5\x01\xbf\xb0\xde\xe1\x77\xe7\xc7\xff\x18\xfc\xee\xec"
+ "\xfc\x07\xe1\x37\x54\xc2\xef\x47\x9f\x06\xe0\xf7\xa3\x5f\x06\xe0"
+ "\xf7\xa3\x19\x12\x7e\x3f\x4a\x09\xc0\xcf\x3a\xb1\x7f\xf0\xfb\x51"
+ "\x71\x00\x7e\xf2\xdb\x1b\xc3\xef\x47\x7f\xec\x1b\x7e\x3f\xaa\x0d"
+ "\xc0\x4f\x96\xd5\x3f\xf8\x59\xa3\x00\x37\x93\x06\x3f\x53\xdf\xf0"
+ "\xb3\x4e\xfc\x07\xe1\x67\x94\xf0\xbb\x6b\x58\x00\x7e\xd6\x93\x01"
+ "\xf8\x59\x37\x49\xf8\x59\xd7\x07\xe0\x77\x57\x6e\xff\xe0\x67\x75"
+ "\x04\xe0\x27\xbf\xbd\x31\xfc\xac\x97\xfb\x86\xdf\x5d\x11\x01\xf8"
+ "\xc9\xb2\xfa\x80\xdf\xc0\xde\xe1\x77\xd7\xd3\xff\x18\xfc\xee\xca"
+ "\xbd\x11\xfc\xfa\xc7\x6b\xdc\x25\x64\x9d\x7f\x41\x39\x0d\x7d\x95"
+ "\x43\x30\x24\xfb\x44\xb5\xf4\xae\x86\xdd\x6a\x58\xb8\x3c\xc3\x71"
+ "\xd7\x06\xc8\x30\x53\x9a\x95\x31\xb7\xee\x56\x07\x84\xf3\x92\x6f"
+ "\x12\xd4\x92\xd6\xd3\x7c\x6d\x58\xa8\xba\x76\x60\x28\xf9\x14\xe8"
+ "\xad\x2c\x61\x2f\xab\x8c\x59\x13\x72\x33\xbb\x8d\xce\xeb\xad\x03"
+ "\xbf\x46\xf7\x5d\xa5\x63\x36\x80\x17\x89\xb9\x1e\x26\x0b\x16\x2e"
+ "\x17\xc1\x3b\x97\x65\x2d\x58\xb1\x64\xc1\xbc\x25\xb9\x96\x79\xf3"
+ "\x5f\x59\xde\xd3\x27\xbe\x88\x7b\xb9\x9e\xc6\x6f\x4c\xad\xdf\xcf"
+ "\x4b\x09\xcf\x27\x7f\x79\xb6\xdb\xc9\x36\xed\xee\x08\x11\xa7\x20"
+ "\x7a\x6a\x04\xbf\x96\xbe\x23\xf9\x0e\x7e\x54\xf8\x01\xbc\x96\xbd"
+ "\x03\xf2\xd4\x56\xf2\xed\xa2\xed\x43\x6d\x3d\xa7\xdc\x33\x9a\x47"
+ "\x4d\xab\x20\x9b\x0e\x71\xb6\x43\xb9\x5b\x3f\x83\x55\xc3\x4d\x49"
+ "\xed\xaa\x7d\x5a\x05\x2f\x9f\x66\x27\x18\xd4\x93\x0f\xb6\xbc\x90"
+ "\x91\xcd\xca\xd8\x56\x1e\x95\xd4\x8e\xb2\xdc\x5a\x39\x64\xbb\xdf"
+ "\x99\xbc\x9a\x7f\x45\xe5\x69\xbc\x20\xc5\x21\x71\x48\x7e\xf0\xee"
+ "\xbd\xc6\xb5\x96\x10\xca\x4b\xbe\x10\xc9\x47\xa0\x1e\x7b\x8a\xda"
+ "\x4d\x79\xc1\x8f\x4f\xc1\xf7\x53\x28\xf6\xa6\xbf\x0c\xd9\xa6\x9b"
+ "\xd0\xa6\x46\xd1\x17\x7b\x52\x45\xc7\x6b\xe9\x3b\x44\xfc\x47\x01"
+ "\xd7\xb1\x75\xa8\xbb\x42\xc4\xed\xf4\x5e\x14\x71\x3b\xb5\x6f\x6e"
+ "\xc5\x37\x82\x9e\x92\xff\x53\x59\xc6\xd8\x3f\xea\xed\x02\x0f\x3d"
+ "\x18\xcf\xbb\x82\xea\x18\x82\xe7\x5f\x04\xbd\x8f\xc0\xf3\x42\xf0"
+ "\xa1\x51\xda\xfb\xa1\x78\x9e\x41\x7c\xa9\xe8\x57\x59\xb1\xb4\x89"
+ "\x56\xc6\x92\x2d\xb0\x49\xcb\x13\x85\x3c\xc3\x88\xd7\xd5\xca\x88"
+ "\x6e\x53\xee\xb9\x4a\x32\xa3\xf6\x3e\x06\xcf\x67\x68\x5f\x40\x7b"
+ "\x3f\x0c\xcf\xef\xe3\xf9\x47\xda\x7b\xf0\xf5\x09\x32\xfe\x8d\x29"
+ "\xa9\x85\xfa\x04\xd8\xe7\x13\xdc\x01\xeb\x16\xa4\x6d\x85\xbc\x5a"
+ "\x44\xe3\x48\xfd\x74\xac\x6e\x63\xcd\x4a\x02\xc5\x06\x0d\x91\x63"
+ "\x35\xad\x42\xfa\xe8\x31\xa4\x23\xbd\x9d\xd2\xc9\xb6\x5c\x2d\x9f"
+ "\x96\x4f\xf7\x80\xe9\x2f\x08\x86\x5a\x5d\x90\x89\xee\x89\xd1\xc6"
+ "\x19\xb0\x23\x3f\xba\xac\x78\x8f\x36\x16\x68\xdb\x40\xbc\x7f\x55"
+ "\xdb\xf7\x68\x9c\xe5\xbd\x26\xcf\x17\x29\xf7\x4c\xfe\xa7\xfc\x46"
+ "\xe0\x3b\x49\xf7\xee\x29\xd0\x63\x12\x22\x4d\xfa\xca\x02\x7e\x92"
+ "\x7e\xc5\x1d\x95\x54\x2c\xfc\xa4\x00\x47\x75\x5c\x21\x3c\xe1\x61"
+ "\x63\xb6\x4a\x5d\xcd\x3d\xfe\xf3\xbf\x2e\x25\xa1\x53\x8b\xe3\xc0"
+ "\xa4\x9c\x70\xcf\xe9\x80\x7d\x51\x82\xa0\x0f\x41\xef\xdc\x41\xef"
+ "\xf2\xf5\x77\xd2\x06\x6e\x6c\x44\xd0\xbb\xec\xeb\xde\x59\x83\xde"
+ "\xa5\xf7\x2c\x73\x6c\x4a\xd0\xbb\xd4\xeb\xbe\xcb\x0c\x7a\x37\xf1"
+ "\xba\x77\x05\x41\xef\xe2\xb5\x77\x21\x48\xdf\xea\xf7\x53\xa8\x24"
+ "\xc4\x68\xe9\xa0\xf5\x63\x0f\x04\xa5\x87\x6a\xe9\x54\xff\x71\x17"
+ "\xfb\x52\x93\x63\x24\x9e\x03\x8f\xee\xd4\xea\x70\x05\xea\xb8\x5b"
+ "\xf7\x33\x5f\x2c\xc7\xef\xee\xe9\x46\xc5\x32\x90\x70\xca\xb8\xb6"
+ "\x98\x62\x02\xd9\xa5\x4f\x2e\x39\x0f\x45\xec\x6a\x8a\x7d\x8b\x7c"
+ "\x7d\xd1\xc6\x3e\x63\x63\x96\x8e\x4b\xd7\xcf\xb2\xfa\xec\x49\xeb"
+ "\x55\xfb\xd4\xe3\x14\x6b\x90\xfc\x77\x15\xb5\x73\x55\xc4\x18\xa4"
+ "\x58\x86\xac\x9b\x39\x73\xbb\x8a\x41\x1b\x22\x69\x9d\xa3\xfd\xbd"
+ "\x7a\xc8\xb7\xf5\xb6\xf3\x32\xce\x20\x9d\xef\x2d\x4f\x5a\xbf\xb2"
+ "\x9d\xc5\xd9\x92\x78\x0b\xc9\x79\x92\x26\x8c\xab\x41\x5e\xa3\x46"
+ "\xd3\x7e\x23\x6d\xbd\x13\x29\x36\xb7\xd1\xd9\x2e\xf4\xcc\xe1\xe7"
+ "\x94\xc4\x46\xfd\xbd\xec\x6f\x62\xa3\x90\xa5\xb5\x73\x85\x68\xa3"
+ "\xd7\x1f\x07\x53\x49\x6c\xba\x1c\x55\x50\xd1\x55\x9a\x68\xea\x69"
+ "\xdf\x98\x78\x17\x95\x49\x7d\x70\x29\xe3\x6a\xa9\x6c\xe4\x99\xe8"
+ "\xb7\x6f\x34\x25\xad\xc7\xfb\x29\xd2\x1e\x3f\xb1\x51\xc4\x00\x2a"
+ "\x4d\x84\xfc\x3f\x2e\x41\xb3\xe3\x5c\xcf\xc9\xf6\xb1\x9b\x31\xb2"
+ "\x6b\xc6\xda\x1d\x57\xf4\x1d\x8b\xee\xb8\x96\x4e\xb6\xaa\xcd\xc2"
+ "\x0e\xfb\x55\xf2\xff\xe7\x61\x33\x6d\x4c\xc6\xb6\x51\x12\xdf\xad"
+ "\xef\x74\xb1\x75\x74\x26\xb1\x7c\x8a\xb9\x23\x3a\x65\x0c\xca\xdc"
+ "\xef\x62\x2f\x6d\xd5\xf4\x12\x14\x67\x37\xce\x45\xfd\x2b\xca\x66"
+ "\xc8\x13\x83\x3c\x93\x90\xa7\x56\xcf\x43\xef\xbb\x48\xc7\xcb\xb3"
+ "\x19\xf5\xeb\x72\xf9\x6f\x6b\xf0\xbe\xdd\x15\x1a\x99\x2a\x6d\x34"
+ "\x13\x3d\x2e\x76\xb6\xb8\xaf\x35\x58\xe8\x45\x4d\xd3\xaa\xb9\x7d"
+ "\xda\x21\xd0\x9d\xfd\xd2\x17\xc1\xb4\x6a\xa9\x4f\xb8\x77\x2a\xc5"
+ "\x37\xa3\xd8\xe3\xb4\xf7\x29\x69\xdf\xbd\xbf\x14\xf4\x03\x69\x18"
+ "\x9f\xfd\x58\x23\xc4\x79\xd2\xfe\xd1\x85\x7b\x67\x8b\x32\x46\x48"
+ "\xff\x67\x74\x8e\xa4\xab\xf4\xde\x2a\x7f\xfc\x08\xff\x99\x86\x7b"
+ "\x4f\x92\x9e\x71\xb3\x2a\xdb\x78\x7d\x1b\xa8\xbd\x28\xab\x4f\x3f"
+ "\x24\xf8\x66\xbf\xd0\xc5\x6e\x49\x39\x20\xed\xd9\xc6\x47\x85\x98"
+ "\x6f\xb9\xd2\x55\x3a\xde\xbf\xff\x41\x79\x68\xcc\x54\x94\xef\xef"
+ "\xe7\x32\xaa\x63\xfc\x44\xb9\x57\x30\x3e\x15\xb4\x74\xff\xe6\x6e"
+ "\x16\xaa\xa5\xa7\xd6\x7b\x3d\x74\xbe\xbf\x57\x5f\x5c\xb4\x4e\x0b"
+ "\x3f\x4e\x5b\xa6\xed\xa7\x33\x1c\xe3\x3c\x7a\x9b\x27\xa4\xd2\xd9"
+ "\x01\x6a\xb3\x84\xed\x84\x47\x74\x38\x6e\xba\x84\xb2\x0b\xbf\x64"
+ "\x2d\xca\xf8\x13\x64\x63\x23\x60\xb2\x5a\xb7\xfb\x1a\x2f\xce\x71"
+ "\x8b\xfa\x65\x1e\xb1\x67\x4a\x36\xc7\x04\xa7\xdd\x84\x6b\x28\xb3"
+ "\x0c\x63\x21\x62\xe3\x2a\x13\x84\xac\xb3\x0e\xef\x45\xbf\x85\x4d"
+ "\xdd\x84\x1c\x39\x0f\x26\x40\xfe\x99\x90\x2f\xe7\x81\x4c\xa3\xd8"
+ "\xf5\x64\x0b\x71\x41\x19\x7f\x96\xe2\xd3\x02\x1e\x87\xc8\x87\x5d"
+ "\x7d\x27\xe6\x6b\x7e\x37\xe1\xc2\x21\x8a\x43\x08\x38\xb4\xc8\x35"
+ "\x8a\x60\x3e\xbe\x86\xea\x27\xd8\x52\x6c\xde\x10\x73\x1c\xe8\xc0"
+ "\x84\x4c\x7f\x8c\xe3\x58\x3a\x57\x31\xbe\x4f\xdf\x85\x04\x23\x1f"
+ "\xda\x5c\x0f\x9e\xd9\x31\xe2\x4b\xb4\x6f\xe2\x5d\x6a\xf4\xb4\xfd"
+ "\x64\xc3\x89\xb6\x6a\x76\x6e\x72\xec\x24\x1e\x4c\x54\x50\xc7\xb8"
+ "\x7a\x89\x0b\x32\x36\xba\x32\x61\xbf\x06\x3f\x11\xfb\xc2\x9e\x27"
+ "\xe1\xa0\xe5\x9f\x23\x75\x43\x71\xf7\xa1\x5d\x81\xf8\x5f\x48\x17"
+ "\x7a\x3d\xcd\xce\xbb\xab\x74\x62\x4c\x50\x9b\x3b\xc5\x59\xc4\x4b"
+ "\x24\xd7\x4f\x38\x4c\x75\x6d\x22\x1f\x63\x84\x17\x6d\xc1\xf8\x3f"
+ "\x61\x17\xb5\x93\xec\x03\x7d\x51\x29\x07\x78\x79\x4a\x35\xc1\x19"
+ "\xdf\x9c\xc6\x5c\xe8\xf5\x3c\x1c\xd1\x6e\x8a\xa5\x82\xfa\xd6\x07"
+ "\xc5\xf3\xc5\x5a\x3c\xf1\x8f\xfa\x5a\x4b\x7c\x02\xf9\x9a\xf0\xa7"
+ "\x95\x1f\xd9\x00\xfa\xad\xf3\x6b\x7d\xe9\x8d\x23\x36\x8f\x65\x89"
+ "\x74\xde\x99\x6c\xc5\x09\xdf\xb8\xe9\x88\x95\x7c\x28\x93\x3f\x48"
+ "\xc7\xea\xf1\x68\xef\x7d\x59\xbf\x8e\x15\x67\x2c\x3b\x1d\x63\x2f"
+ "\x91\x9d\x50\xfb\xb9\x02\xe1\xe7\x28\x7c\x56\xbe\x97\xef\x91\xf1"
+ "\xbc\xdd\x3c\xea\x88\x95\xde\x89\x18\x02\x54\xe6\x3f\xeb\x0f\x58"
+ "\xb9\x2f\x51\xe3\xa7\xda\xc1\x4f\x0c\x47\x7f\xc4\x3a\x85\xfb\xd8"
+ "\x36\xe5\xfe\x4d\x32\x06\xa5\xf4\x69\xaf\xd9\x3b\x86\x49\x1f\x01"
+ "\x6e\x26\xce\x6c\x2b\xf7\x2b\x96\x31\x8c\xb5\x2b\xf7\x0f\x10\xfe"
+ "\xa5\xed\x49\x8d\x1a\x0c\x1a\x37\xcb\x76\x19\x33\xf2\x0d\xa2\x8d"
+ "\xd4\xbe\x7e\xb6\xad\x56\x5b\x4b\xc3\xba\x4a\xef\x37\xe9\xbe\x05"
+ "\x44\xff\x35\xbf\xd3\x8e\xdb\x49\x76\xba\x7f\x8d\xb6\x7e\xea\x76"
+ "\x5b\x4d\xff\xf5\xba\xef\xd7\xce\x52\x26\x55\x0b\xdf\xdb\x80\x0b"
+ "\xca\xad\x46\x3b\x2a\xf4\x35\x5d\xb3\xd3\x4f\x90\xbc\xc6\xfd\xd5"
+ "\x81\xf5\x5c\xc2\xb0\xc7\xb9\xa1\xa5\x4b\x73\x2d\x10\x1a\x6c\xf3"
+ "\x72\xe7\x67\x5b\xb2\x96\x2d\x5b\xba\xcc\x42\x4e\x77\xae\x8b\xd5"
+ "\x14\xce\x4b\xef\x3f\xae\xc5\x93\xdb\xef\x8f\x27\x57\xfa\x40\x44"
+ "\x70\x9c\x3f\x97\xf2\x80\xe9\x5f\x23\x5b\x3d\x90\xd0\x57\x39\x76"
+ "\x83\x5a\x8d\xdf\x21\xfc\x1c\xf8\xd5\x90\xac\x95\xe1\x61\xc9\x58"
+ "\xa3\x85\x3c\x16\x38\x33\x7f\x3f\xf9\xae\x49\x6e\x56\x1e\xf8\xe5"
+ "\x6e\x35\x94\x09\xdf\x2a\x25\x2a\xd9\xb3\x90\x9f\xf4\x43\xf8\x39"
+ "\xf0\xab\xc1\x4f\x7c\xa7\xfe\x49\x9c\xf7\xad\x0e\x7e\x47\xfb\xe3"
+ "\xbc\xe4\x18\xf9\x5b\x6f\xe0\x6b\x43\xc5\x3e\x88\xba\x45\xe6\xbb"
+ "\xae\x0d\x06\x5e\x7a\x6f\x84\x96\x4f\xf0\x59\x91\x6b\x99\xa5\x97"
+ "\x7c\x21\xbc\x74\xcc\x41\x2d\x5f\x38\xe5\xd3\xfb\x43\x3e\xfc\x91"
+ "\x5f\xcf\x17\xca\x4b\x27\xd6\x68\xf9\xc4\xd9\x3f\xb5\xc4\xd0\x5b"
+ "\xbd\x03\x78\x89\xc7\xad\xe5\x33\x05\x97\x17\x94\x27\x4c\x2d\xbd"
+ "\xdd\x4c\x79\xd4\xb5\xa1\x82\x37\xe4\xa5\x0f\x24\x20\x7f\xaf\xbe"
+ "\x4f\xfb\x37\x4e\x93\x4e\x5f\x3f\x4e\xb6\xf9\x0b\xb3\x1e\x5a\xb8"
+ "\x24\x8f\xa2\x53\xe5\x2e\x5d\x91\x4b\xd7\x25\xf3\x5e\x11\x97\xa5"
+ "\x19\x2f\xcf\x97\x37\xb9\x39\x89\x74\x93\x03\x7c\xa3\xeb\x82\x15"
+ "\x36\xba\xcc\x5f\x4a\x8f\xf9\xd9\x09\x2b\xe6\xeb\x61\xc2\x7b\xf8"
+ "\x7e\xea\x2a\x7d\x10\xfc\xef\x03\x39\x92\x1f\x79\x70\x83\x4b\x19"
+ "\x23\xf6\x1b\x8d\x6b\x5d\xec\x84\x55\xc4\x13\x64\xdf\xf3\x99\xa0"
+ "\x3c\xb8\x8d\x7c\x26\x18\xd7\xda\xe6\x1b\xbd\x0b\xb3\x78\xf9\x54"
+ "\x13\xbe\x05\xff\xfb\xba\x76\x26\x3f\xa9\x55\xf8\x0f\x2d\x7d\x30"
+ "\x46\xb7\x71\x54\xed\x49\x95\xe4\x17\x5f\xd8\x3c\x6d\x11\xfe\x78"
+ "\x6a\xf0\xdc\xb2\x7b\x8b\x88\x4f\x13\x83\xe7\x7d\x78\x6e\xc7\xb3"
+ "\x19\xcf\x71\xaa\x7d\x9c\x95\xce\x48\xe2\x99\xe2\x99\xc5\x77\x95"
+ "\x3e\xe4\x8f\x7f\x19\x0c\x1b\x2d\x80\xdd\x43\xbd\xca\xe8\xd7\xf9"
+ "\x1d\x43\x19\xd9\x7a\x7c\x60\x11\x0b\xb8\xf4\xa1\x7c\x7f\x2c\x60"
+ "\x11\xd3\xc9\x24\xd6\x26\xb9\xb6\x3f\x74\x39\xc4\x7c\xeb\x7a\x29"
+ "\x0b\x3c\x54\xa5\xfb\x85\x90\xbc\xfe\x43\xd5\x41\x71\x94\xe9\xd9"
+ "\xe1\x8f\xa3\x2c\xfd\x98\xed\x10\xbe\x97\x94\x87\x31\xc7\x1f\x4a"
+ "\xf4\xc7\xbc\x2b\x7d\xa8\x35\x38\xe6\x9d\x0b\xef\x49\xc6\xea\x2a"
+ "\x7d\x98\x05\xd6\xc1\x87\xb6\x52\x9d\xbd\xc5\x8c\xde\x6c\x80\x3c"
+ "\xb0\x0a\xf2\x00\xae\x42\x36\xd0\xf8\x70\x4a\xe7\x25\xc9\xe4\x63"
+ "\xc7\x42\xef\x88\xf7\xeb\x55\xef\x21\xf8\xda\x87\x7f\x43\xfe\x77"
+ "\xdd\x45\x0b\x94\x3b\x76\x93\x1d\x14\x9e\xa5\xff\x48\x7e\x41\x79"
+ "\x58\x9c\x31\xd3\x7d\xcb\x05\x9f\xcb\xef\xf5\xfc\xc3\x27\xfa\xbe"
+ "\x75\xce\x52\xa3\x77\x5e\x96\xe4\xe3\x1e\xbe\xaa\xed\x53\x37\xc8"
+ "\xf5\xfe\xe1\x16\xfe\x8c\x8c\x7b\xe2\x52\x26\x67\xd3\x99\x28\xa3"
+ "\x92\xb3\x94\xe3\x5b\x63\xfe\xbc\x2c\x91\x86\x7c\xeb\xc0\x6b\x69"
+ "\xed\x3b\xe9\x8c\x6b\x65\xfc\x8a\x4f\xfa\x1b\x50\x1e\xae\x99\x7b"
+ "\x6b\x31\xd5\x13\x2e\xf8\x88\x4f\x58\x04\xc5\x1f\xa4\xb6\xed\x0e"
+ "\xf2\x7d\xb7\x19\x69\x64\x13\xd6\xf1\x0c\x8b\x20\x5f\xbf\x5a\x5b"
+ "\x6a\x44\xfc\xb3\xd2\xc9\x99\xba\xdf\x1e\xc0\xbc\xe6\xfa\xfe\x3c"
+ "\xf3\x13\x31\x43\x46\xcf\x4f\x48\x9b\x8a\xbb\x04\x2d\x74\x6e\x30"
+ "\xee\xc4\x75\x44\x3f\x61\xe9\x78\xfb\xe9\xff\x4d\xc4\x9e\x2c\x9d"
+ "\x0c\xfa\xff\xb0\xf4\x27\xb1\xee\x67\xdf\x12\x6d\x11\x31\x19\xe9"
+ "\x6c\xa3\x4a\x67\x77\xa7\xec\x15\x7e\x76\x0d\x92\x5f\x14\x71\x99"
+ "\x4a\x27\xe7\xf2\xe8\xa4\x0d\x32\xee\xec\xd4\xfd\x18\x3f\xb1\xee"
+ "\xd3\xdc\x10\x67\x38\x4d\xd4\xf7\x47\xe8\x5c\xeb\x63\xf8\x3d\x27"
+ "\xe3\xc4\xfc\xec\x5b\xbd\x5c\xf2\x61\x05\xdc\x32\xe1\x8a\xb9\xf6"
+ "\x48\xa2\xdf\x4e\xc9\x7f\x2e\xf4\x91\xa7\xc9\xbf\x56\xe0\x8c\xf0"
+ "\x14\x4d\xaf\xf9\xc8\x1c\x17\xbb\xd3\x2e\xe7\xf7\x23\xc0\xff\x53"
+ "\xda\xf9\xb0\x47\x72\x5d\xec\xa9\x86\xeb\xca\x38\xa2\xeb\x5f\xe4"
+ "\xd8\x3d\x52\x01\x5c\x7c\x0c\xbf\xe7\x90\x7f\x9f\x1e\x77\x7b\x9d"
+ "\x41\x9c\x6f\x3a\x17\x62\xa6\x33\xc0\x8f\x1c\xd6\xd3\x07\x28\xc9"
+ "\x80\xcd\x23\xb5\x3a\x3d\x81\x3c\x74\x08\xcf\x4d\xe0\x37\x67\x6b"
+ "\xcf\x98\x73\x8f\xb4\xeb\xcf\xb8\xf7\xe8\xf4\x86\x64\xc4\x8e\xd7"
+ "\xd2\x7f\x43\xb2\xe7\x7c\x33\x78\x32\x33\xc9\x78\x49\x66\x17\xfb"
+ "\x68\xbd\xfc\xb6\xca\xd5\x51\x52\x97\xd8\x19\xfd\xae\xa5\x13\x34"
+ "\x14\xef\x26\xba\xd8\xef\x4f\xcb\x72\x92\x92\x5d\xa1\xa6\x7d\x81"
+ "\xf1\x08\x31\x02\xc6\xc7\x65\x9f\xa6\xe4\xe3\xbe\x86\x62\xa0\x23"
+ "\x5f\x36\xe6\x57\x9a\x94\x09\xdb\xab\x36\x76\x9b\x66\x3b\xd7\x83"
+ "\x67\x7d\x99\x70\x65\x8a\x88\x1f\xbd\x69\xb5\x29\x8d\x78\x3e\xf2"
+ "\x85\x20\x7c\xa4\x91\xef\x49\x2f\x0b\x13\xfe\xfe\xcb\xf7\x36\x0a"
+ "\x3f\xf7\x2b\xad\x11\xba\xdf\x49\xcc\xd3\x49\xdc\xf0\x76\x3b\xf9"
+ "\xa2\x14\xfa\xbc\x2e\x6b\xa4\xf0\x3f\xa9\xf9\x9d\xdc\x95\xc7\x62"
+ "\x2a\x55\xe9\x77\x52\xf8\x49\xb8\x81\xef\x49\x5e\xd2\xb6\x5e\xf7"
+ "\x3d\x09\x38\xd0\xf9\x47\x2b\xbf\xe2\xf5\xe0\x1a\x1f\xe4\x6f\x27"
+ "\xb4\x57\x3f\x94\x06\xd0\x4d\x83\xf4\x43\xd9\xbf\xf5\x66\x4a\x8a"
+ "\xc4\x93\x29\xeb\xf5\xb8\xe0\x41\x69\x15\xc0\xf3\x7d\x32\xed\x91"
+ "\x34\x2d\xed\x80\x8b\x9d\x74\xfb\x79\x33\xd0\x3b\xd2\x6b\x62\x1e"
+ "\x9f\x86\x1c\xfc\x9b\xe0\x79\xc5\xc4\x1f\x2d\xdd\x03\xb0\x2e\x87"
+ "\xe1\x37\x90\x7e\xa9\x7e\xfa\x71\x85\x37\x92\x8c\x60\x54\xb0\xde"
+ "\xe4\x87\xf0\x59\x5e\x6f\x48\x86\x57\x39\x4d\xbc\x27\x9d\xfb\x9e"
+ "\xe5\xf3\x92\xff\x81\xd0\x59\xbe\x0e\x8a\xd9\x79\x9a\xce\xb3\x6d"
+ "\x7e\x99\xce\x57\x8e\xe4\x14\xaf\x66\x96\xef\x22\xdf\x23\xcf\x8d"
+ "\x36\x68\x71\x38\x6b\x7d\x79\xbc\x06\xe3\x10\x41\x72\x07\xf9\x00"
+ "\x8b\x54\x3c\x2c\xd2\x16\x72\x74\xe6\xe5\xa3\x9c\xfc\x7f\x51\xac"
+ "\x32\xb5\xd4\x03\x5a\x69\x51\x32\xbc\x21\xc5\x4e\x6f\x8b\x88\x17"
+ "\x30\xcb\x37\x90\xcf\xca\x7f\x84\x8b\x18\x63\x79\xfc\x38\xe8\x6c"
+ "\x88\x88\xcb\xbd\x8a\x77\xe0\x3e\x7c\xd6\xaa\x0e\x4e\x31\x43\x51"
+ "\x76\xcd\x2c\xaf\xda\x3d\x2b\x5f\x2d\xca\xc8\x57\xf0\xdd\xdf\xf0"
+ "\xdd\xdf\xd0\x9e\x44\x94\x69\xc2\xf3\x14\xbe\xe7\x65\x3a\x87\x55"
+ "\x2c\x64\x1f\xf4\xd1\xa1\x9d\x6d\x3d\x44\x71\x42\xc9\xdf\x78\x86"
+ "\xd7\x51\xbc\x47\x3b\xab\x2a\xe2\xd5\xe6\x5f\xe3\x5a\x3d\x93\x66"
+ "\xad\x62\x53\x32\x56\x8d\x14\x67\x5e\xe9\x3c\xd7\x2c\xaf\x05\x75"
+ "\x16\x13\x3c\x22\x44\x8c\x70\x71\xa6\xeb\xc7\x89\x37\x8a\x19\x4a"
+ "\xb6\x2a\xcb\x6f\x66\x06\x3a\x23\xe2\x7b\x63\x92\x9b\xfc\x91\x15"
+ "\xb9\xb9\x87\x74\x8f\x47\xbb\x1b\x0d\x96\xbc\x50\xd0\xd5\x1f\x3f"
+ "\x5b\x6f\x4b\xec\xfd\x5c\x5f\xd9\xc3\x87\xf8\xb6\x27\x26\xf2\xb2"
+ "\xa4\xad\xb8\x1e\xe4\xf6\xa9\x2e\xb2\x99\xe5\x65\x3f\xb6\xf1\x6d"
+ "\xa9\x48\x4f\x99\x8e\xeb\x41\x5e\xf6\x84\x95\x6f\x9b\x86\xe7\x27"
+ "\x43\x71\xc5\xf3\x2d\x6e\xe4\x4f\xe4\x65\xb7\x66\xe2\x5a\xcd\xcb"
+ "\x6e\x6b\x40\x3e\x3c\x5b\x92\x71\xc5\xf3\xa8\x6a\xe4\xc3\xf3\x1d"
+ "\x96\x73\xca\xa3\x16\xdc\x23\x6d\xba\x4b\xd6\x35\xab\x5d\xd4\x55"
+ "\xf6\x8c\x47\xd6\xf1\xd3\x50\x59\xc7\xf3\x26\x59\xc7\x9c\x38\x59"
+ "\x47\xbc\x1d\xf9\x26\xf1\xb2\x3b\x0b\x70\x3d\xc4\xcb\xac\xd9\xc8"
+ "\x87\xe7\x31\xb3\x71\xc5\x73\x02\xea\x9a\x86\xe7\xb1\x09\xb8\xe2"
+ "\x39\xd1\x8c\x7c\x93\x79\xd9\xf8\x70\x5c\x0f\xf3\xb2\x09\x54\x3e"
+ "\x9e\xef\x6b\xc5\x15\xcf\x0f\x34\x22\x1f\x9e\x1f\xac\xc1\x15\xcf"
+ "\x19\xe8\xd3\x13\xc9\xbc\x2c\xb3\x09\x57\x07\x2f\x7b\x09\xf5\xa5"
+ "\xe2\x79\x41\x0a\xae\x78\xce\xc2\xf7\xd3\xf0\xfc\xf3\x03\xb8\xe2"
+ "\x79\x21\xf5\x35\x85\x97\xbd\x42\xf5\x1c\xe7\x65\x39\xd4\x67\x3c"
+ "\x2f\xd9\x80\x2b\x9e\x6d\xd4\x1e\x3c\xbf\x4a\xdf\xe1\x79\x39\x60"
+ "\xf0\x44\x2a\x2f\xcb\x2b\xc6\xb5\x86\x97\xad\x4a\x43\x3e\x3c\x17"
+ "\x00\x1e\xa9\x78\x2e\x04\x0c\xa7\xe1\x79\xad\x03\x57\x3c\xaf\xa7"
+ "\xfe\x4e\xe7\x65\xff\xb6\x00\xd7\x5a\x5e\xf6\xef\x93\x90\x0f\xcf"
+ "\x9b\x22\x70\xc5\xf3\x66\xc0\x6f\x1a\x9e\xb7\x1c\xc4\xb5\xb6\xf7"
+ "\xf1\xdc\xe6\xe1\x6b\xc3\x18\x2f\xdb\xeb\xe2\x6b\x07\xe2\xfa\x1f"
+ "\x76\xbe\x76\x80\x95\x97\xfd\x8f\x64\xa4\xe3\xba\xaf\x00\xcf\x09"
+ "\xda\x33\xae\xaf\x67\xe3\x39\x51\x7b\xc6\xf5\x8d\xd9\x78\x9e\xa8"
+ "\x3d\xe3\xfa\x7b\x7a\x06\x8c\x0f\xe0\x1a\x86\xeb\xef\x4f\xe3\x79"
+ "\xb2\xf6\x8c\xeb\xdb\x16\x5c\xbd\xbc\xec\xcd\x08\xa4\x03\x56\x6f"
+ "\xd6\xe2\x19\xd7\xdf\x6d\xc4\x33\x60\xf1\x3b\x37\x9e\x53\xdc\xa3"
+ "\xef\x37\x11\xae\xaa\xb1\x43\xdd\x3c\xf6\x29\x5b\xd1\x65\x66\x20"
+ "\x1c\xa5\xb8\x14\x96\x3c\xf2\xe9\xf0\x98\xaf\xba\xd0\x65\xa0\x3c"
+ "\xbe\xed\x4f\x24\xaa\xb1\x4f\x90\xee\x2b\x0c\xf9\x06\x9e\x53\xa6"
+ "\xde\x45\xeb\xab\xb3\xc0\x25\x62\xe3\x69\xbe\xf5\xc2\x9a\x95\x94"
+ "\xd1\xe0\x27\x26\x51\xbc\x75\xc0\x2b\x87\x97\x0c\xb8\x84\x6b\x3b"
+ "\x2f\x19\xd2\x0c\x78\xe1\x39\xea\x13\x5c\xf1\x7c\xff\xbf\x03\x5e"
+ "\x78\xfe\xd9\xa3\xb8\xb6\x77\x95\xa6\xac\x77\x29\x3f\x16\xb1\x85"
+ "\xf9\xdb\x4f\xdb\x8d\x5e\x0e\x7a\x84\xb5\x7a\xef\x0a\x93\xd1\xeb"
+ "\x60\x7c\xdb\xf3\xc5\x46\xf2\x11\xf7\xfa\x03\x26\x1e\x3b\x9c\x7c"
+ "\xdb\x91\xfc\x13\xc6\xaf\xc5\x1b\x64\xdd\x43\x38\xea\xfe\x03\xe9"
+ "\x6e\x79\xec\xb8\xbe\xde\x7f\x2c\xde\xdf\xbe\xc2\x2e\xdf\x87\xb3"
+ "\xc0\xfb\x9f\xd1\xfb\xef\x8c\xa4\x6f\xbf\xf3\x1e\xf1\xde\xd9\xd9"
+ "\xaa\xf5\x2b\x04\xef\xa6\x0e\xa5\xbc\x2e\x65\x6a\xa2\xd4\x7d\xa5"
+ "\x4c\xe4\x25\x21\xac\xc3\x34\xb5\xb6\xab\x74\x6a\x32\xda\xae\xf9"
+ "\xbd\x02\x9f\x6d\x4a\xaa\x92\x7e\x14\xa6\xf5\xe5\xe3\x25\x5c\x8d"
+ "\x99\xeb\xd9\x54\xc2\x1b\x48\x9e\x35\xba\x99\xc1\x52\x18\x7f\xa8"
+ "\x59\x79\xbc\x7a\x17\xe9\x29\x62\x72\xd3\xe8\xac\x13\xea\xfc\xd8"
+ "\xbb\xe5\xf1\x18\xcb\x6a\x23\xea\x7f\xfc\x0f\x45\x1e\x7e\xd9\x51"
+ "\xf8\x28\xd6\x4a\x91\x9e\x26\xed\xe7\xc5\xfd\x64\x69\xf3\x24\xee"
+ "\xad\x52\xef\xfb\x78\x35\x7d\x2b\xfc\x21\x6a\xe3\xea\xfb\xf7\x30"
+ "\x0f\x8f\xcd\xcd\xc4\x38\x4d\x41\xd9\x9f\x1e\x51\xdd\x86\x48\x37"
+ "\x1b\x60\xc9\x3b\x4a\xe5\xcb\xb3\x35\x5a\x5e\x3e\x38\xcc\xa3\x8a"
+ "\xbc\xe2\x9d\x72\x14\x78\x50\x29\xf4\x42\x8f\x27\xe8\x3a\x6d\xbe"
+ "\x75\xae\x87\xce\x54\xa3\x8e\x64\x5a\x17\xe5\xb9\xa1\xc7\x37\xd6"
+ "\x61\xdc\x7c\x31\x43\x5d\xe3\x72\x59\xa8\xd1\x13\xae\x14\xae\x10"
+ "\x67\xe9\x2e\x3b\x56\x7f\x22\x6c\xf4\xa8\x7c\xe4\x5b\xc1\xa3\x1f"
+ "\x17\x67\x71\x09\x56\x9b\x55\x94\x87\xfa\x1c\x79\x5f\x52\x19\x33"
+ "\x8e\x5e\xa2\x7d\xdd\xc7\x2b\xf4\xba\x28\x9e\xc0\x26\xc0\x86\x78"
+ "\x4c\x3a\x0b\x9e\xe1\xf3\x91\xdf\xaa\x0d\xc1\xf0\x5d\xa8\x9d\x7b"
+ "\x5d\xb8\x24\x77\xd9\xab\x96\xe5\x0b\x57\x67\x3d\x32\x7a\x45\x82"
+ "\x65\x59\xbe\x65\x99\x88\xab\x2d\x12\x16\x24\x58\x96\xe7\x2c\xcd"
+ "\xb5\xe4\xae\xb2\x65\x7d\x3f\xc6\xb0\x59\x35\x4d\x6d\x92\x3e\x5f"
+ "\xa6\x8b\x33\x3b\x6a\xd5\x8a\xf0\xdc\x5c\xae\xf2\x2d\x47\x0e\xf1"
+ "\xa2\x54\x4d\x36\x79\xe2\x3e\xcb\xed\x03\xc1\xaf\x4f\x5f\x78\x35"
+ "\xec\xf1\xc3\x5d\xa5\x4f\x60\xfc\xa7\x0a\xf9\x63\xab\xee\x03\x4c"
+ "\x99\x5e\x45\x63\x2b\xf7\x2c\x9e\x00\xff\xfb\x86\xf4\x67\x56\x95"
+ "\xab\xd9\xc4\x3f\x21\x6c\x28\xb9\x65\x45\x38\xdf\xf7\x80\x09\x7c"
+ "\x8d\x42\x70\x10\x31\x72\xd9\x25\x71\xde\x15\x38\x2f\xce\x9a\xfb"
+ "\xb6\x3f\xd9\xa0\xc6\x3e\xcf\xd4\x37\x1e\x68\x28\xda\xcb\x0c\xef"
+ "\x60\x2c\x42\x2d\xc0\xcb\xdb\xd9\xc8\xa3\x85\xad\x86\x0b\xca\x13"
+ "\x7b\x8f\x16\x36\x1a\xf8\xd6\xa7\x32\x3b\xe2\x53\x3d\x9e\x12\xe1"
+ "\x2b\x14\x65\x78\xd8\x87\xe0\x24\x20\x8f\x1c\xea\x1c\x36\xaf\xa2"
+ "\x73\xd8\x93\x87\x3c\xdb\x16\x3a\x1c\xb7\x8f\x67\x98\xbd\x17\x3f"
+ "\x38\x4e\xba\xa4\xe9\x73\x3e\x48\x21\x5d\xde\xd4\xd3\x1e\xd3\xd4"
+ "\xc6\xce\xed\xe9\xc5\xe4\x43\xe7\xea\xf6\x85\x0d\xdd\xb1\xd3\xdd"
+ "\xc7\x90\xe7\x23\xf0\xf0\xa7\x2c\xc0\xa3\x51\xcc\x70\xf5\xce\xfb"
+ "\x33\xdf\xe9\xb6\x1b\x6a\x8e\x4f\x96\xfa\xc7\x4c\xe0\xae\x38\x53"
+ "\x92\x3a\xf5\x83\x83\xc7\x19\xea\x66\xef\x74\xa7\x1a\x3e\x9c\xf4"
+ "\xbd\xf7\x59\x1f\x24\x1e\x67\x5d\xe4\xbf\x15\xb2\xd2\x7b\x5f\x56"
+ "\x30\xbe\x3d\xa3\xfa\xad\xd5\x1e\x03\x18\x64\x43\x5d\x63\x05\x2b"
+ "\x38\xcb\x86\x7a\x2f\x5a\x43\x7f\x8f\xef\xaf\x92\x5f\xc4\x53\x66"
+ "\xe1\x1f\xad\xd0\x21\x62\xbe\x1a\xeb\xc1\x27\xa8\x17\xad\x61\xf5"
+ "\xb3\x1d\x0c\xef\xc7\x7b\x9f\x32\xb3\xba\x6c\x37\x73\xa6\x57\xb1"
+ "\xab\x86\x64\xf6\xee\x0b\x55\x6c\x27\xf8\xf4\x9d\x17\x58\x84\xdc"
+ "\xdb\xb5\x86\x79\xaf\x59\x43\xbd\xaf\x59\x89\xaf\xe7\xfc\xa2\x75"
+ "\x30\xf1\x86\xde\xa5\xd6\xf0\x7a\x77\x15\x1b\xd7\xca\xac\x57\x0d"
+ "\xcc\x78\xf5\x35\xeb\xe0\x7a\x5b\x05\xca\x02\xd3\x07\xb8\x92\xaf"
+ "\x2c\xf2\xa1\x45\x70\x1a\x92\xce\x66\xb7\x2b\xa9\xb7\x0e\x3e\xcd"
+ "\x86\x91\xaf\x46\xf2\xb5\x46\xfe\x62\xd5\x98\x8c\x6a\x5f\x4c\x7a"
+ "\x71\xe1\x65\xf2\x2d\xe2\x61\xa0\x59\x36\x8b\x8c\x2f\xae\x50\x9f"
+ "\x55\x6e\x1d\x9c\x41\xd7\x2d\x49\xe3\x89\x67\x55\xbb\xcc\x14\xcb"
+ "\x28\x9c\xda\x09\xba\x19\xbe\xe6\x6b\xc0\xb2\xc8\x1a\x8a\x7c\x90"
+ "\x57\xad\x91\xce\x76\x0f\xf3\xdd\xf3\x74\xf1\x58\x9b\x88\x59\x1b"
+ "\xb3\xbb\x90\x99\xec\x85\x2c\xc6\x72\xbf\xc0\xa5\x47\x7c\x6f\x3d"
+ "\x6d\xe3\xa5\x2f\x4c\xe7\x6b\x43\xe3\x64\xda\x53\xb7\x5a\x1e\x67"
+ "\xcc\x32\x9e\xee\x9f\x3c\x61\x79\x08\x63\x18\x93\x61\x12\xfc\xb4"
+ "\x90\xbd\x9e\x7c\x57\xe2\xea\x93\x7f\xb8\x1a\xb6\xcf\xae\x96\x7e"
+ "\x7e\x40\x5d\x1b\x6a\xa1\x38\xd9\x17\x94\x27\xb7\xf1\xb2\x43\x35"
+ "\x7c\xeb\x42\xa1\x13\xc6\x73\xf9\xd5\xb0\x67\x3b\x79\xd9\xbb\xa4"
+ "\x43\x49\xbe\xaa\x84\x36\xe2\xd7\xa4\x7d\xbf\x81\xfa\xed\xdb\x77"
+ "\x7f\x2b\xf5\x5b\xc4\xbf\x41\xbf\x32\x30\x66\x3c\x76\xae\x43\xf8"
+ "\x84\xbf\x06\xf8\x6a\xf1\x41\x09\x1e\x04\x03\xf5\x9a\x75\xb0\xe8"
+ "\xeb\x35\x6b\x04\xe0\x4b\x7e\x59\x8d\x85\xf3\xf0\xcd\xf6\xb9\xa7"
+ "\xf1\x2e\xf2\x6a\x4c\x46\x38\xc5\xa1\x72\xda\xdc\xcc\xb7\x6d\x6e"
+ "\x03\xf9\x1d\xfb\xcd\x6a\x66\x52\x87\xcd\xc5\xba\x3b\x17\x32\x8b"
+ "\x98\x3f\x8c\xda\xa9\x96\xbd\x9b\x7f\x95\xce\x0d\xa0\x6d\x68\x5f"
+ "\x23\x7e\x78\xff\x64\xc4\xd5\xd1\xf7\x43\x7e\x99\xe6\x42\x5b\x2d"
+ "\xbc\x74\x59\x01\xdd\xe3\x1d\x78\x9b\x27\x2f\x13\x1c\x08\x1e\x1a"
+ "\x2c\xce\x07\x60\xb1\xfb\x10\xf2\x35\xa9\xa5\x9f\xa4\xa1\x8c\xc3"
+ "\xbc\x74\xf1\xe4\x40\xbe\xa7\x86\x05\xf2\xfd\x6e\x8e\xcc\x77\x86"
+ "\xc9\x7c\x2b\x0f\xe2\xfd\x1f\x24\xbc\x9f\x7a\xfe\xfb\xf0\x7e\xea"
+ "\xe9\xc0\xb7\xbf\x0e\x95\xdf\x7e\x68\x97\xdf\xbe\x44\xdf\xfe\xb2"
+ "\x67\x9b\x9e\x5a\x1b\xc8\xbf\x69\x92\xcc\xff\xa7\x64\x99\xff\xc5"
+ "\xe2\xa0\x7c\x6f\x06\xf2\x55\x1c\x97\xf9\x6a\x1b\x65\xbe\x9f\xbb"
+ "\xf0\xfe\x6c\x2f\x6d\x39\x13\xf8\xe6\xff\x48\x95\xdf\x7c\xd3\x29"
+ "\xbf\x29\xb1\x01\x9f\x86\xf5\x6c\xcb\xf4\xa1\x81\xfc\xd5\x5a\xbf"
+ "\x9b\xd7\xcb\xfc\x6b\xe2\x82\xf2\xdd\x27\xf3\xd1\xfb\xf3\xc8\xf7"
+ "\x64\xf5\xd5\xb0\xc3\x09\x32\xdf\xbf\x1d\x26\x7c\x44\x9e\x67\xd5"
+ "\xd2\x9f\x35\x5d\x0d\x4b\xaf\x41\x39\xfb\x30\x36\x71\x74\xc5\xd8"
+ "\xc5\xa9\xf6\xa9\xa7\x71\x1f\x47\xfb\x0b\xe4\x4f\x84\xce\x40\xaa"
+ "\x25\x16\xb6\x3b\x9a\x45\xfc\x26\x9a\xd1\x59\xbd\xf0\xae\xd2\xe9"
+ "\x1b\x03\x7b\xda\x92\x86\x12\x0d\x76\x29\x4f\x98\x41\x87\x7d\xbd"
+ "\xfb\x63\x99\xee\xf0\xeb\xbe\x54\xac\xf9\xdb\x9e\xe8\x9d\xaf\xde"
+ "\xf2\xc8\x3e\xb2\x91\x20\xfa\x73\x4e\x99\x71\x2f\xf9\xae\x0b\xd0"
+ "\xf4\x19\x42\xc7\x49\xbe\x23\x48\x27\xa9\xa5\x09\x7b\x59\x15\x78"
+ "\x0c\xf9\xf0\x10\xf9\x0b\x24\x1d\x24\xd6\x1d\xf4\x6d\x46\x0a\x68"
+ "\xca\x80\x5f\x1b\xd4\x6a\xfc\x0e\xe1\xe7\xf8\x35\xe9\x26\x4b\xd8"
+ "\x54\x5d\x6f\xdb\x7b\x5b\x67\xe4\xb8\xd8\xff\x48\x09\xe8\xae\x66"
+ "\x00\x6f\xa7\x9f\xee\xbf\x7d\xf1\x8c\x1b\xed\x21\x85\x0a\xbf\xee"
+ "\xdb\x9f\x48\xb3\xab\x32\x6e\x3d\xe6\x2d\x78\xb3\x19\xc4\xff\x14"
+ "\x0b\x9f\xb4\x5b\x9f\x2f\x56\xe3\xb1\xee\x9c\x67\x21\xce\x82\x56"
+ "\x56\xad\xb6\x1a\xec\xdd\x2c\xb4\xde\xeb\x12\xf9\xab\x55\x97\xc1"
+ "\xb2\x84\xf8\x9e\x19\xdf\xda\xaf\x68\xe5\x55\xad\x30\x15\x2d\x96"
+ "\x31\xb5\x89\x47\xa4\xf5\x0a\x34\x2a\x42\xc4\x59\x5b\x32\x10\x79"
+ "\x67\xde\x8a\xfb\x70\xca\x7b\xf5\xce\xfb\xec\x57\x7f\xbb\xc2\xd4"
+ "\xbd\xfd\x29\x77\xf7\x9d\x93\x6c\xd7\x62\x9f\x2f\xbe\xb6\x3d\x9d"
+ "\x79\x7f\x9b\x5b\xec\xbd\xf3\x01\x93\x2f\x76\xba\x0d\x75\x63\x2d"
+ "\xab\x30\xbc\xad\x56\x1b\xde\x2e\x74\x18\xa8\xdc\xa3\x85\xfb\x0d"
+ "\xef\x15\x36\x18\xde\x53\x0f\x19\x8e\x16\xda\x71\xad\xa2\x98\x5b"
+ "\xe0\x45\x67\x2e\x7e\xaf\xb0\x06\x6b\xe9\xcc\x03\x80\xd7\x01\x5d"
+ "\x47\xca\x1f\xf5\xb2\xfa\xfd\x5e\x76\x22\xf7\x32\x73\x47\x4d\x6d"
+ "\xc2\xcf\xe5\x1e\x36\xd7\xe3\x1e\xb6\xd0\x21\xda\x1c\x9b\x69\xa7"
+ "\x3e\xd2\x59\xb1\xf7\x54\xd9\x66\x0d\x1e\x54\xe6\xa7\xbb\x69\xff"
+ "\x54\xf7\xd7\xab\xcc\xb2\x7f\xcf\x5f\xaf\x41\xc6\x7b\xf3\xfb\xec"
+ "\xfd\x5f\xe1\xaf\x57\xd3\x25\x90\xbf\x5e\xc8\xaf\x0d\x9a\xfc\xea"
+ "\xd0\x7c\x33\x45\x90\xcc\x2a\x7c\x33\xe5\x3b\x84\x7f\x25\xe1\x83"
+ "\x64\xdb\x73\x36\xe2\x1d\xbb\x4a\x67\xd5\xea\xb2\x29\xf1\x4b\xbe"
+ "\xf2\xa9\xed\xf8\xb5\x22\xbd\xc5\xa5\x74\xa4\xeb\xe9\x7c\x7b\x24"
+ "\xf1\x6d\x21\x3e\x9e\x9d\xa4\xed\x91\x4f\xf1\x6d\x7b\xd2\xe1\xdb"
+ "\xb6\xb0\x0a\x69\x93\xf1\x7b\xc4\xb7\x2d\xb2\x13\x3f\x0f\x7e\x5e"
+ "\xdf\x36\x23\xe8\xb4\x31\x14\xbf\x70\xfc\x4c\xf8\xc5\xe0\x67\xc6"
+ "\x2f\x0e\x3f\x0b\x7e\xf1\xea\x36\x63\x04\xf9\x1f\xe4\xdb\x8d\x89"
+ "\xc0\x03\xb3\x5e\x6e\x00\xde\x69\xd3\xd0\xff\x64\xe2\xe5\x78\xe4"
+ "\xa1\x16\x0e\xda\xc0\x5f\xbf\xdf\x2c\xda\xff\x7a\xaa\x07\xcf\x16"
+ "\xf7\xa8\x15\xcc\x3d\x2c\xb3\xd8\x3d\x2a\x37\xdb\x1d\xb5\x3a\x1d"
+ "\xbf\x4c\xfc\xb2\xdd\xdb\x32\x4c\x18\xd3\xfd\xee\x61\x19\x55\x5d"
+ "\xa5\x69\xd5\x2e\xe5\xb9\x7d\x52\xf7\x94\x76\x18\xf7\xc7\xb5\x7b"
+ "\xcc\xcb\xd9\x82\x5f\x44\x19\x99\x78\x06\x9d\x7c\x56\xe4\xeb\x88"
+ "\xcd\xb0\x68\x67\xa8\x8a\x91\xee\x76\x85\xde\xd5\xa8\xef\x2b\x75"
+ "\x95\x3e\xcd\xf4\x39\x48\x7c\x9e\x6e\x33\x10\x3c\xb7\x16\xcf\xb7"
+ "\x65\x2c\x9e\x97\x9f\xb1\x3c\x67\xe1\xfc\xac\xe5\x0f\x59\x46\x2f"
+ "\xb0\x58\x17\x2e\x7b\x35\xe3\xd5\x15\x59\x2b\xb2\x04\x6b\x89\xa4"
+ "\xbb\x7a\xec\x31\xc5\xd0\x19\x32\x2f\x64\x99\xc8\x05\x9c\xaf\x79"
+ "\x91\x19\xa6\x83\xb6\x40\xf6\x30\x0d\x6d\xd9\xc3\x0f\xb7\xb9\x0d"
+ "\xd3\xdb\x5d\xcc\x4b\xfc\xdf\xf6\xe7\x8b\x23\x5b\xa6\x20\xcd\x63"
+ "\x98\xde\x09\x9c\xc6\xfc\x70\xb6\x38\x18\xe5\x91\xfc\xe0\x9f\x58"
+ "\x2d\xf1\x83\xdb\x9f\x67\x94\x87\x83\x0f\x14\xd7\xd8\x27\x1b\x66"
+ "\xa0\x0c\x8e\x79\x45\x79\x8f\x20\x8d\xec\x27\x20\xcb\xb9\xf9\x95"
+ "\x02\x5e\x8b\x32\xde\x5b\xe4\x36\x90\x7e\x6d\x26\x95\x8b\x39\xc7"
+ "\xdf\xb8\xcf\xfe\x1e\xf2\xbe\xb7\x08\xdf\x63\x5e\x72\xcc\xc7\x23"
+ "\x78\x6e\x56\x9e\xa9\x7c\x0f\xdf\x0b\xb9\x08\x6d\x7c\x07\x69\x45"
+ "\x2b\x58\xa8\x3e\xcf\x89\x67\xf7\xcf\xf5\x3c\xe2\x7d\x9f\x19\x40"
+ "\x73\x1d\x6d\x81\xbc\xf5\x7c\xf1\x5b\xf8\xf6\x6d\xd4\xa5\xc9\x1b"
+ "\x21\x24\x17\x12\x3d\x21\x3a\xe2\x2c\x90\xf2\x61\xb5\x4a\xba\x8f"
+ "\x10\xfa\x76\x2a\xbd\xdb\x09\x3c\x94\x32\xc5\x33\xc5\x3a\x9f\xff"
+ "\x2b\xcd\x4f\xd3\x90\x26\xe0\xcc\x5c\x36\xf2\x82\xf2\xf4\xf3\x04"
+ "\x3f\x82\x13\xed\xe9\xf2\xd2\xa7\xcd\x3b\xc9\xc7\x53\x34\x0b\xbf"
+ "\xb6\x2d\x37\x5d\xea\xf5\x9f\x71\xe8\x6b\x46\x67\x4c\x6e\x7a\xf0"
+ "\xb8\xc9\xf1\xb2\x64\x2d\xa1\xdd\x89\x05\x62\x1b\x70\xde\xf2\xe5"
+ "\x2b\x16\x67\x59\xb2\xe6\xcd\xcf\xb6\x88\xd7\x96\x15\xcb\x91\x65"
+ "\x61\xee\x72\xcb\xd2\x95\x4b\x2c\x8b\x97\x2f\x24\x09\x22\x6b\xd9"
+ "\xb2\x15\xb6\xdc\xc1\x4c\x7e\x69\x59\xbc\x22\x27\x77\xa1\x0d\x37"
+ "\xcb\xb3\x96\x2c\xb0\x88\x51\x5f\x8e\xa2\x72\x72\x2c\x5a\x0d\xcb"
+ "\xb3\xe7\x2d\x23\x44\x58\xf2\x73\x64\x0a\xfa\xbe\xa7\x7c\x11\x41"
+ "\x7e\xb0\x68\x0d\xba\xa0\xcc\x1e\x75\x1c\x2b\x0e\xdf\x9a\x9b\x4e"
+ "\x76\x08\x78\xb6\x08\xb9\xb0\xf4\x99\x06\xda\xb3\xf9\x75\x34\x0b"
+ "\xed\x18\x9d\xea\xe9\x2a\xfd\x49\xa5\xde\x37\xf2\x3b\x2f\xfc\x2e"
+ "\x0a\x9f\x9e\xb3\x87\x8a\x33\x7e\x98\x17\xd2\x7f\xda\x33\x7f\x93"
+ "\xb0\xf8\x49\x6d\xb0\xcf\x6e\x69\x13\xf4\x93\xb3\x72\xbf\x63\x36"
+ "\x9d\xf9\x60\x9a\x9f\x7c\x85\x97\xfe\x24\x8a\xbe\x51\xb7\x2d\xdc"
+ "\xdf\x55\x3a\x3b\x34\xb0\xee\xfe\x84\xce\xbd\x87\x8a\x7c\xa5\x3f"
+ "\x19\xcb\x87\x65\x98\x90\xe6\xa0\x76\xf5\xb1\xde\x58\xae\xa0\xdc"
+ "\x53\xd5\x8c\xdd\x1d\xc3\xac\x57\xb6\x4c\x6b\xec\x8a\x9e\xea\xee"
+ "\x2e\x61\x03\xbb\xb1\xc6\x79\x0c\x6c\xe4\x55\xe0\xc5\xaa\x7b\x59"
+ "\xc8\x9a\x19\xcc\x50\xbd\xa8\x9a\xfc\xc6\xb2\xda\xd4\x0a\xe6\x84"
+ "\x64\xe4\xf4\x1c\x60\xb5\x8e\x66\x56\xe7\xfd\x9d\x8c\xe9\xb0\x9a"
+ "\xe4\x92\x67\x7f\x41\xbe\xac\x8a\xd6\x70\xdf\x3b\xff\xe9\x1e\xf0"
+ "\x76\x5b\x35\xc5\x62\x18\xe9\xf4\x7e\xe5\x70\x16\xec\x63\xce\x7c"
+ "\xa7\x83\xce\xf8\x03\x6e\xaf\xbe\x87\x77\x83\x6a\xf1\xdd\x4c\x36"
+ "\x10\xcf\x59\x54\xc7\x86\xed\xbc\xf1\x97\xb1\xbc\xe9\x97\xdb\xb9"
+ "\x6b\x63\xac\x88\xad\xd0\xba\x29\x96\xb7\x6f\xd2\xfc\xd5\x11\x9e"
+ "\xda\xf2\x98\xb9\x4d\x99\xed\x15\x7a\x8c\x14\xf1\x7c\x73\x9b\xf2"
+ "\xac\xd8\x9b\x74\xe6\x6f\xa7\xe7\x11\x78\x8e\x93\xcf\xbb\xe9\xf9"
+ "\x16\x3c\x27\xc8\xe7\x0f\xe8\x39\x0e\xcf\x93\xe5\x73\x3d\x93\xe7"
+ "\xdd\x9f\x9d\x2e\x9f\x3f\xa3\x67\xc0\xfe\xd9\x39\x8e\x3c\x6a\xef"
+ "\x5f\x31\x66\xcf\x2e\x2c\x3a\xc3\x0c\xce\xfc\x73\x62\x3e\x1c\x2d"
+ "\xcc\x26\x3d\x0b\xe6\xc3\xec\xf3\x84\xef\xa0\x55\x1b\xc3\x12\xe9"
+ "\x3a\xdb\x6e\xf4\xb0\x81\xe0\x35\x87\xe0\xdd\x8b\x04\xbb\x5e\xf9"
+ "\x99\xb7\xa7\x4d\x99\xe5\xe5\x0e\xfe\xfa\x03\xc0\x83\x17\x18\x7f"
+ "\x7d\x52\x1a\x17\x6b\xde\x13\xa6\xea\xd5\x1e\xe1\xbb\x17\xfc\x3d"
+ "\xe6\xd0\xb3\xc2\x8f\xb8\x1b\xfc\x72\x1f\xbe\x3c\x4d\x7c\xdb\x53"
+ "\x69\x7c\xdf\xfd\x9e\x19\x56\x2f\xd9\x35\x42\x46\xf8\xe9\x8b\x27"
+ "\xb2\x89\x87\xc8\x9c\xaf\xee\x9b\x94\xa6\x16\xa5\x33\x1e\xff\x40"
+ "\xf8\x8c\x6c\xee\xc0\x7a\xa6\x48\xfd\x37\xff\x0a\xf5\x7f\x25\xea"
+ "\x1d\xfd\x40\xb8\xba\x32\x9b\x62\x42\x31\xa2\x31\x85\xb4\xb6\xe7"
+ "\x81\x9e\xbc\x96\x6e\xf4\x6d\xcb\xcc\x3c\x91\x7d\xb6\x7f\xf1\xd5"
+ "\x94\x9f\xf6\xed\x57\x1a\x6d\xf2\x71\xf0\x12\xa8\xc7\x8b\xbe\x12"
+ "\x1f\xf1\xb6\x5a\x63\x00\x3f\x13\xfe\xd6\x4b\x8d\x03\xf8\xca\x74"
+ "\x23\xfa\x74\xaf\xd3\x7a\x99\xd5\x77\xd3\x5c\x79\x2e\xee\x44\x3e"
+ "\x63\x53\xf3\xbd\x0e\xa3\x5b\xf8\x1c\x36\xd9\x16\xb1\xdb\xf8\xb0"
+ "\xa7\xd2\xda\x94\xe7\x72\x66\x16\xa0\x0f\xe8\xfb\x7b\xcd\x8d\xa1"
+ "\x2a\xfa\x31\x4e\xc2\x8d\xbe\x4b\xc3\xfa\xe4\xd1\xe5\xa2\xfe\xb5"
+ "\xff\x39\x81\x37\xea\xf2\x74\x46\x67\x0f\xdf\x01\xef\xa2\x5e\x4b"
+ "\x37\xaa\x58\x97\xe8\xdd\x09\xeb\x79\x46\x75\x4a\x58\x3f\x27\xce"
+ "\x9d\xf1\x78\xc0\x19\xf5\x93\xaf\x63\x1d\xae\xc8\x9b\xe6\xbb\x96"
+ "\xdd\xfb\xf8\x6f\xcf\x4c\x44\xfb\xdc\x7c\x5b\xa4\xab\xf7\xf7\x91"
+ "\x47\x25\x7e\xdc\x6f\xc5\x6f\x12\xdf\x9b\x6b\x03\x0e\xa4\x8a\x98"
+ "\x9d\xdb\x9f\x2b\xd6\xf7\x95\x31\xdf\x80\x23\xcf\x9d\xaf\x2e\x6c"
+ "\xed\xdd\xd7\xab\xbd\x4a\xc6\x4a\x1b\xf0\x15\x37\xfa\x28\x06\xf0"
+ "\x65\xf2\x9b\xdd\x78\xc2\xda\xd9\xcf\x31\x4d\x4f\xec\x6b\x4c\xa9"
+ "\xfc\xa9\x77\xf1\x6b\xfd\x2c\xaf\xcf\xbd\x51\xc0\xd6\xcd\x63\x22"
+ "\x5d\xdd\x3c\x45\x91\xb2\xcb\x0b\xa3\x09\x56\xb4\x8e\xac\xfe\x94"
+ "\x19\x3c\x58\x43\x7f\xf7\xd3\x0d\x86\x84\x4c\x46\x71\xd5\x8a\x4f"
+ "\x36\x1c\x67\xb3\xa6\xb3\xa2\xba\xec\x4b\x4c\x8f\x81\x86\x75\x8d"
+ "\xbd\xf9\x53\xb7\x81\xf6\xa0\x28\xe6\x99\x90\xf3\xb7\xcf\x4d\xfc"
+ "\xfd\x67\xb4\xf6\x66\x58\xde\xfa\xcc\x6d\xf0\x76\xa4\x5b\x84\xdf"
+ "\x6e\xc8\x14\x45\xd9\x5c\xf5\xef\x4b\x51\x6c\x07\x7b\xd2\x24\x8a"
+ "\x29\x7d\x2a\xad\x41\x9c\x07\x3f\x95\x7e\x9c\x9d\x6a\xaa\x60\xb5"
+ "\x2d\x67\xe8\x0c\xe3\xde\x53\xe9\x76\xe2\x2d\x23\xbd\xe0\x1f\x77"
+ "\x82\x7f\xc4\x7c\x1d\xa4\x9a\xaa\x1a\xf5\xbd\x29\xda\xa7\xd2\x79"
+ "\x47\x2f\xe6\x68\xa5\x16\x07\xcd\x5b\x9a\x1e\x53\xa9\xed\x53\x51"
+ "\x7c\xb4\x1d\x79\x2c\x7e\x87\x41\x4d\xef\x6d\x5f\x2a\xf2\x55\xe1"
+ "\x2f\xc6\xac\x46\x55\x35\xea\x71\xd2\x66\xbe\x6a\x61\xff\x27\xfa"
+ "\x7e\xc2\xda\xdf\x39\xf9\xbc\xf0\x83\xec\x05\xde\x79\x81\x73\x5e"
+ "\xc0\x13\x63\xe0\xc2\xb8\xf5\x2a\x97\xe9\x63\x70\xad\x48\x1f\x83"
+ "\x9f\xfd\x51\x8c\x01\xe4\xb9\xd7\x9e\xd7\xc6\xe0\x4b\x8c\x41\x0b"
+ "\xc6\xa0\x84\x15\x7f\x34\xbb\x96\xcd\x4a\xc3\x18\xb4\x5f\x22\x9f"
+ "\xef\x32\x0e\x5d\xae\x84\xbd\x18\x8b\x2f\xdd\xc2\x46\x94\xc6\xe0"
+ "\xc0\x0b\x72\x0c\xde\x7e\xc1\x0d\x7e\xe8\xfe\xcc\x37\xf1\xec\x5b"
+ "\x99\x6e\xa1\x78\x3e\xbc\x24\x93\x62\x66\xcb\xb1\xb8\x86\xb1\xb8"
+ "\x26\xc7\xa2\xf0\x55\x8c\xc5\xe9\x46\xe1\x37\xe6\x54\x53\x2d\xab"
+ "\xcd\xac\x62\x75\xa0\x4b\x18\x8b\x79\x34\x2e\xa4\x97\xf0\xbd\x66"
+ "\x8d\xfe\xcd\x6a\x16\x53\xb9\x9a\x99\xf5\xf1\x50\xaf\x61\x3c\x56"
+ "\x63\x3c\xba\x31\x1e\x1e\xff\x78\xc4\x88\xf1\x38\xaf\x8d\x47\x37"
+ "\xd9\xbc\x61\x3c\xba\x31\x1e\xdd\x18\x8f\x12\x39\x1e\x44\xe7\x67"
+ "\x76\x1a\xb9\xfa\x77\x2b\xdb\xdd\xd6\xcb\x78\xbc\xa6\x8d\xc7\x97"
+ "\xff\xcc\x78\xfc\xac\xf8\xfb\xe3\xf1\xc2\x82\x1f\x1a\x8f\xc0\x9c"
+ "\x78\xf1\x79\x1a\x8f\x6b\x55\xda\x9c\xb8\x93\xe6\x44\xb1\xe1\x6e"
+ "\xac\x45\x04\xd3\x93\x0d\x87\xc5\x9c\x40\x5f\x8b\xdf\xfc\xa9\xc7"
+ "\x50\xdb\x82\x71\x59\x80\x71\x59\x1d\x18\x17\x39\x1e\xcf\xb3\xfd"
+ "\x9f\x49\xf8\x5b\x9e\xa4\x35\x83\xe6\x06\x8d\x0f\xc6\x09\xf3\xa7"
+ "\xb7\x18\x82\xc1\xfb\xb7\x28\x53\xa5\x79\x42\x73\x84\xe6\x43\x5d"
+ "\xf6\x19\x11\x93\xfd\x54\x5a\x0d\xa3\x7d\xdc\x53\xe9\x87\x31\x56"
+ "\x15\xcc\xb7\x12\x63\x93\x87\x79\xa2\xb0\x51\x14\x4b\xf0\x54\xfa"
+ "\x06\xe2\x17\x4c\xc0\xf9\x41\x3e\x8c\x93\xaf\xcb\x3c\x78\x23\xe4"
+ "\xad\x3d\x79\x81\x79\xb3\x5b\x8b\x9b\xcc\xc3\xd2\x63\x90\x1e\xea"
+ "\xc5\x18\x61\xee\xf4\x98\x33\xfe\x78\xca\x7f\xb3\xb2\x5d\xcd\x2c"
+ "\x7c\xe8\x42\x39\x46\xbe\xa0\x39\x33\x63\x21\xcd\x99\x62\x8c\xd1"
+ "\xa7\xfd\x1c\xa3\x17\xa5\x4d\x7f\x2c\x68\xf5\xb0\x48\x17\x1f\x4d"
+ "\x63\xf4\xb3\xce\xbe\xc6\xc8\xb7\xef\x7e\xab\xcf\x34\x95\xf6\x9f"
+ "\x47\xaa\x4b\x67\x2b\x2a\x64\xa9\x6e\xc8\xb0\xa7\xdc\x5e\x56\x00"
+ "\x19\x62\xf5\x19\x16\xe6\x9c\xfd\x09\x73\xba\x0e\x31\xf2\xe3\x4c"
+ "\xfa\x74\x8a\xe7\xe0\xf4\x1e\x02\xbd\x5a\xe8\xa2\xe7\x5d\xe2\xd9"
+ "\xcd\x5e\x7b\x91\x85\x88\x18\xa3\xe9\x55\x6c\x23\xf0\xf3\xad\x17"
+ "\xaa\x0c\xea\xd6\xa7\x32\xb9\x89\xe2\xd0\x30\x07\xd9\x9a\x17\xad"
+ "\x62\x11\x75\xd9\xb5\xe4\xcb\xee\x2b\xf2\x4d\x5c\xdf\x89\x32\xdd"
+ "\xbc\xdb\x87\x35\x63\x77\x09\x3f\x44\xbe\xf9\xc7\xe5\x0b\x5e\x1c"
+ "\xf8\x32\xf7\x3e\xe2\x45\x48\x6f\xe8\x28\xdc\x01\xde\x6b\xee\x83"
+ "\xd4\x37\xa4\x29\x75\x8b\xc8\xee\x62\xde\x9b\xd4\x2e\xe1\xa7\xd1"
+ "\x2b\xaf\xe3\x28\x16\x63\xec\xa2\x3b\x8e\x14\xba\x43\xed\x90\x8d"
+ "\xc1\xa3\x51\x39\xbf\xe0\x52\x4e\xb4\x3a\x4f\x7b\x84\xfe\xd6\x5d"
+ "\x94\x1d\x66\x5f\x4d\x31\x03\xc9\xcf\x3f\xad\xd9\xf3\xc8\x3f\x4f"
+ "\x32\x70\x36\x95\xc7\x3e\x57\x5c\xfd\x92\xdb\x10\x58\x97\xe7\x56"
+ "\x03\x6f\x53\xa7\x5a\x79\x11\xc5\x43\x78\x0f\xfd\xe2\xdb\x9f\x6c"
+ "\xf8\x5d\xb3\x47\xd0\x94\xdf\xbf\xb4\xc1\xc0\x81\xd3\x1e\xd0\x87"
+ "\xda\xcf\xfe\xa7\x88\xfb\x7a\x4e\xc9\x78\xff\xa3\x74\x2f\xa3\xfa"
+ "\x9f\xbd\x8b\xf6\x4a\xe6\x76\x5e\x35\x34\xdb\xae\x86\xa5\xdb\x8a"
+ "\x5a\x02\x31\x2f\x83\x63\x5b\x12\x9d\x79\xeb\x25\x94\x49\x74\xa6"
+ "\xb9\xd8\x20\x69\x4b\x32\xe9\x38\xc3\xaf\xa7\x2d\x75\xed\xe7\x59"
+ "\x21\xf0\xb8\x2e\xbb\x4a\xc4\xac\x88\x04\x7d\x57\x5f\x03\x3d\xb9"
+ "\x66\x8d\xde\x05\x7a\x42\x74\x60\x37\xe8\x87\xfa\x9a\x79\x70\x59"
+ "\x37\x4b\xd0\xe9\x08\xf1\x5e\x74\x7d\x11\x38\x6a\xac\x41\x1a\xc6"
+ "\x49\x05\x5d\x07\x3d\xb1\xee\x5c\xcd\xe2\x77\x02\x47\x77\x11\x1d"
+ "\x01\x5f\x3c\xd3\x06\x3a\xb2\x12\x74\x24\x4f\xc4\x1e\x36\xef\x36"
+ "\x48\xfa\xf1\x9f\xcd\x1b\x0c\x76\x3d\xf6\xb8\x80\x6f\xe6\xb3\xf5"
+ "\x84\x1f\x99\xc5\xe2\xcc\x9c\x8f\xd6\xa7\xd7\xd2\x43\xea\x3b\x81"
+ "\x23\xdb\x17\x36\x50\x9a\x98\xb7\x2b\xb3\x07\xab\x12\xd7\x92\x09"
+ "\x26\x7b\x2e\xb0\x44\x11\x9f\xf3\xa2\x79\xf0\xe6\x25\x2c\x61\xf7"
+ "\x05\x16\xbf\x7b\x09\xb3\x62\xbe\x1a\x76\xa3\x0d\x73\x5f\x35\x31"
+ "\x11\x1b\x22\x2c\x3d\x1f\xe9\xbd\xc6\x86\x00\x5f\x6d\xde\x4d\x73"
+ "\x66\xa9\xd5\xdf\x26\xaf\xbd\xc0\xe6\x03\xec\xa4\x2f\xa7\xcc\xb7"
+ "\xa4\xad\xf4\x58\xab\xe4\xf3\x21\x00\x08\x7b\xa5\x09\x14\xb7\x7e"
+ "\x60\x9b\x92\xb9\x8d\x6f\x79\xd8\x62\x5b\x4d\x3e\x91\xb5\x77\xe0"
+ "\x3d\x55\x8c\xd5\xd8\x62\x56\xac\x46\xbd\xe1\x71\xe6\x83\x77\x22"
+ "\xdf\xcd\xfd\x9a\x87\x99\xc2\x1f\x8d\xcf\x5e\x40\xb1\xd7\x93\xd5"
+ "\x2d\x05\x05\x7b\xda\x58\x22\x7f\x05\xe3\xb1\x08\x7d\x6d\x63\xf1"
+ "\x95\x6d\xe8\xeb\x4a\xd9\x57\x3d\xd6\xba\x5a\xd2\x9c\x8f\x77\x37"
+ "\x8c\xab\xe4\x7e\x85\xe2\x2a\x8d\xf1\x80\x86\xdd\xc4\x6f\x67\xac"
+ "\xae\x5d\xf8\xd1\xe8\x72\x7a\x49\x77\x9c\x79\x80\xf4\x48\xce\x4b"
+ "\x02\xa7\x7f\x49\xb8\xac\x56\xe5\xda\x32\x9a\x80\xdb\x5d\xd9\x8c"
+ "\xe3\xfe\xbd\x66\x92\xf3\x25\xcf\xe7\x52\xe6\x1e\x22\x3e\xed\x28"
+ "\xd2\x08\xf7\x83\x70\xfe\x10\xe1\x3c\xbd\x17\x78\x8f\xef\x9c\x4d"
+ "\x67\x19\x95\x17\x5c\x0e\x8d\xbf\x5e\xd6\x39\xe5\xa5\xc5\x54\x16"
+ "\xe1\x02\xe9\x7b\x68\xae\xc9\xb1\x3f\x44\xb6\xe2\x66\x1e\x3b\xdd"
+ "\x2d\x9f\xdd\xe4\x0f\xc5\x44\x38\x20\x70\x05\xf4\x9b\xfc\xac\x72"
+ "\x9e\x1e\x02\x3c\xa3\x76\x0e\xc6\x78\x27\xea\x78\x81\xb4\x98\xeb"
+ "\x71\x23\x72\xad\x89\x64\x9a\x18\xba\xff\x47\xf1\xa3\x7f\xe3\xf7"
+ "\x52\x4e\x9f\x76\x70\xf1\xe0\x6f\x41\x2f\x89\x6e\xfa\x3a\x82\x68"
+ "\x66\xbb\xa4\x99\x44\x93\x74\xba\x29\x68\x93\xf0\xed\x7f\x88\x6c"
+ "\x66\xb3\x45\x1b\xfb\x49\x37\xeb\xda\x03\x74\x73\xa6\x2d\x88\x6e"
+ "\xb6\xf3\x6e\x75\x74\x6f\x74\x73\xfe\xe2\x9e\x74\x73\xfe\xab\x3d"
+ "\xe9\xe6\xcb\x9f\x5e\x4f\x37\xbf\x4f\x33\xe7\xff\xa1\x37\x7a\x09"
+ "\x39\x66\x64\x9b\xf2\xf2\xfa\xbe\x69\xe5\xfc\xa6\xfe\xd3\xca\x05"
+ "\xe7\x7b\xd2\xca\x05\x96\xff\xef\xd2\xca\xac\xb5\x3d\x68\xa5\xe9"
+ "\x1f\xa4\x95\x6d\x82\x56\xc6\xf0\xbf\x63\x4e\x68\xf4\x63\xf7\xa2"
+ "\x3e\x68\xe5\xa2\x1f\x98\x0b\xaf\xf4\x45\x2b\xb3\xbe\xe8\x49\x2b"
+ "\x5f\x8e\xe8\x49\x2b\xb3\xde\x0f\xd0\x4a\xed\xdd\xbf\x84\x56\x66"
+ "\x35\xfe\xf7\xd0\xca\xac\x46\x41\x2b\x2f\x10\xad\x7c\xf9\x8f\x3f"
+ "\x4c\x2b\xe7\xb7\xf4\x4e\x2b\x91\x2e\x68\xe5\xfc\x96\x00\xad\x3c"
+ "\xf3\x03\xb4\xf2\xe7\xbf\xe9\x07\xad\x8c\x11\xb4\xd2\xd4\x07\xad"
+ "\x5c\x04\x58\x69\x78\x21\x70\xef\x3a\xdc\xd0\x68\xa5\xd9\x4f\x2b"
+ "\xff\x01\xfc\xe8\xdf\xf8\xfd\xbc\xe2\x46\xb4\x52\xb5\x4b\xfe\x92"
+ "\x68\x25\x8f\xd5\x68\x65\x8e\x97\xad\xfe\x02\x34\xf2\x74\x9b\xb0"
+ "\xc7\x10\xf6\xbd\xf8\x15\x3c\x4f\xb4\x28\xbd\xf8\x6d\xc0\xcb\xe9"
+ "\xaa\x16\xb4\x49\x9c\xd1\x9a\x4e\xb4\xaa\x1a\x79\x2b\xfc\x7c\xa7"
+ "\xa0\x9d\x5f\x68\xb4\x73\x8e\x46\x3b\xe7\xfe\x17\x68\xe7\x0b\x34"
+ "\x96\xd9\x6f\x5e\x35\xe8\xb4\x73\x0b\x68\x67\xb6\xe0\x1f\x68\x3f"
+ "\x58\xd2\xce\x9c\xd1\x7a\xbb\x48\xa7\xe9\xcc\xdd\xc1\x64\xbb\x2e"
+ "\x7d\x9f\x8e\x3e\x29\xca\xf3\x39\x16\xb5\x33\x3f\x2d\x9d\x13\xa0"
+ "\xa5\xe7\x94\x57\x3e\xed\x9b\x8e\x2e\x8c\xf7\xd3\xd1\x12\xd0\xd1"
+ "\xbf\x06\xd1\x51\xc8\x4d\xbf\x27\x9a\x07\x3a\xda\x25\xe8\xe8\x7f"
+ "\x6a\x74\x74\xd1\x7d\x1f\xcd\x01\x1d\x7d\x52\xa7\xa3\x0b\xb3\x3d"
+ "\x25\xcd\x36\x4f\xe9\x0f\xd3\xd1\x2e\x41\x47\x6d\xff\xf7\xd3\xd1"
+ "\xe3\xd7\xd1\x51\xc8\xae\x14\x6f\xbd\x57\x3a\xaa\xe3\xa3\xa0\xa3"
+ "\xc5\x01\x3a\x2a\xe0\xba\xe8\xe3\xfa\x4c\xc0\x3d\xd3\x26\x64\x37"
+ "\x3f\x1d\xb5\x55\x4b\x3a\x4a\xe7\x3b\x49\x7f\xb2\x1c\x74\x14\xf8"
+ "\x57\x54\x87\x7e\x63\xbe\xa0\x8d\x26\xa2\xaf\x7b\x30\x67\x08\x46"
+ "\x7e\x7a\xba\x08\x73\x86\x68\x4c\x07\xe6\x0c\xe8\xe8\xdc\xcb\x26"
+ "\x26\xe6\x4b\x69\xba\xa4\x31\xbd\xc5\x25\xd3\x6d\x70\xfb\xa4\xa7"
+ "\xaf\xdc\xd5\x93\x9e\xbe\x32\xa7\x27\x3d\x7d\x25\x2a\x40\x4f\xb5"
+ "\x77\x44\x4f\x31\x66\x80\x8f\x87\x68\xea\x3f\x47\x4f\x5f\xb1\xfa"
+ "\xe9\xa9\x41\xa3\xa7\x8b\x7e\x98\x9e\x8a\x3d\xc2\x3e\xe8\x69\x30"
+ "\x6d\xe8\x9b\x9e\xbe\x62\x0d\xd0\xd3\x9c\x01\x7e\x7a\xda\xd8\x17"
+ "\x3d\x5d\x98\xd0\x3b\x3d\x45\xba\xa0\xa7\x0b\x13\xfc\xf4\xb4\xb1"
+ "\x17\x7a\xfa\x64\x30\x3d\xcd\xb9\x2c\xe9\x69\xb5\xf4\xdb\x01\x9a"
+ "\x5a\xdf\x09\xfc\xa0\x39\x97\x5b\x21\x68\xaa\x0a\x9a\x4a\xb1\x5a"
+ "\x29\x56\x0d\xd9\xd5\xf7\x46\x53\x25\xcd\x75\x31\xa2\xab\x34\x37"
+ "\x8b\x66\x40\xde\xc5\x5a\x04\x98\x88\xb5\x57\x87\xdf\x9e\x20\xfa"
+ "\x9a\xb1\xca\x44\xbc\x5d\x0f\x5c\x51\x75\x5c\xe9\xb0\x92\x5d\x70"
+ "\x0f\x5c\xe9\xdf\x58\xe6\x7c\xef\xbc\xd9\x0f\xc9\xee\x1f\x91\xec"
+ "\xfe\x2c\x33\xbc\xf6\x2c\xe8\x6b\x3a\xc9\xee\xfb\xaf\x93\xdd\xf7"
+ "\x7f\x5f\x76\xff\xf4\xc6\x74\xb4\x5f\xb2\xfb\x4f\x69\x0c\x17\x7f"
+ "\xd7\x93\x8e\x2e\xbe\xdc\x93\x8e\xbe\xfa\x2a\xb5\x4b\xd2\xf1\xfd"
+ "\xbd\xcb\xee\x62\x9e\x2f\xf9\xb1\x5f\x76\x6f\xec\x49\x3f\x03\xb2"
+ "\xfb\xab\xa3\xfa\xa6\xa3\x4b\x72\x7a\xf0\xa3\x73\x35\x3a\xfa\x92"
+ "\x46\x47\x5f\x0a\xd0\xd1\x53\x9f\xe8\xfc\xe8\xd2\x5f\x9e\x6c\x0c"
+ "\xa6\xa3\x4b\xaa\xfd\x74\xb4\xe9\xfb\x74\x54\xa7\xa1\x44\x4f\xa9"
+ "\x1c\xd2\x65\x1d\x00\x9d\x7e\xe7\x25\x9b\x41\xea\x6a\x33\x09\x76"
+ "\xe1\xd7\xeb\x6a\xeb\xda\x2f\xb3\xc2\x39\x44\x4f\x2b\x04\x3d\x35"
+ "\x2a\x6c\x1e\x68\x5f\x24\x9d\x23\xa8\xa4\xfd\xfd\x3c\x19\xeb\x89"
+ "\xf4\x4b\xea\x4a\x19\x37\x51\xd7\x33\xa1\xbf\x62\x5f\xff\xc5\x33"
+ "\x1a\x4d\xa5\x78\xe8\xc0\xb9\x9d\x57\x40\x53\xf3\x7a\xe1\x4d\x5f"
+ "\x03\x4d\x5d\x1d\xc4\x9b\x62\xee\xff\xe7\x4b\xd7\xd3\x54\xdb\xad"
+ "\xf5\x84\x2b\x44\x53\x7b\xc8\xf1\xfb\xff\x1f\x20\xc7\xdb\x56\xf4"
+ "\xa4\xa5\xb6\xfd\x3d\x69\xa9\xed\xc5\x00\x2d\xd5\xde\xfd\x4b\x78"
+ "\x53\x5b\xee\x7f\x0f\x6f\x6a\xcb\x0d\xc8\xf1\xaf\x3e\xed\xa7\xa5"
+ "\xa7\xfb\xa2\xa5\x4b\x72\x7b\xa7\xa5\x48\x17\xb4\x74\x49\xae\x9f"
+ "\x96\x9e\xee\x45\x8e\xef\x41\x4b\x97\xdd\x27\x69\xe9\x7e\xc9\x9b"
+ "\x36\xea\xbc\xe9\xfe\xff\x17\xca\xf1\xcb\x26\xf6\x57\x8e\xff\xa8"
+ "\x5d\xd2\x4f\xa2\x4f\x3a\x0d\x0d\xc8\xf1\xfb\xfb\x96\xe3\x7f\x80"
+ "\x86\xf6\x8b\x17\x15\x34\x74\xf9\x7d\x3d\x69\xe8\xf2\x07\x7b\xd2"
+ "\xd0\xbc\x37\xaf\xa7\xa1\xdf\xa7\x9f\xcb\x57\xf5\x46\x3b\xa5\x1c"
+ "\x9f\x97\xde\x37\xdd\x5c\xbe\xaf\xff\x74\x33\xf7\xfd\x9e\x74\x73"
+ "\x79\xeb\xff\x3f\xe8\xe6\x8a\x67\x7b\xd0\x4d\xd3\x3f\x48\x37\xff"
+ "\x97\xc8\xf4\x2b\xae\xd3\x7f\xae\xb8\x4e\xff\xb9\xe2\xff\x62\xef"
+ "\xfb\xe3\xa2\xa8\xf6\xf7\x0f\xbb\x6b\x61\x81\x80\x17\x0c\xbd\x64"
+ "\x58\x78\xc3\xd4\xc4\x52\xd3\xd2\x42\xd3\x04\x53\x91\x2e\x5e\x11"
+ "\x15\xb1\xa4\xc0\xd4\x50\xc1\x8b\x08\x88\x3f\x2f\x1a\x20\x18\x28"
+ "\x1a\x28\xf6\xd1\xae\x76\xd5\xf0\x5e\xed\x62\x4a\xad\x37\xbd\xa1"
+ "\xf1\xcb\xd2\xc2\x42\x5b\x09\xbd\x68\x68\xab\xa2\x2c\xb0\xbb\xf3"
+ "\x7d\x9f\x39\xb3\xcc\xce\xee\xcc\xee\xce\x2c\x20\xf6\xf5\x8f\x7d"
+ "\x29\x33\xb3\x67\xcf\x9c\xf7\x33\xcf\x3c\xcf\x7b\xce\x79\x8f\x51"
+ "\xfe\x33\xae\x0d\xf3\x9f\x71\xf7\x28\xff\x19\xb7\x8f\xd5\xa0\x4b"
+ "\xd7\x5b\xe7\xcd\x25\xfb\xf8\x79\x13\xb6\xd3\xbc\xb9\x64\x1f\xcb"
+ "\x9b\xd6\x34\xe8\x5f\x17\x88\xe0\xcd\x4e\xee\xe9\xff\x6a\x31\xff"
+ "\xc9\xe7\xe9\x31\x6f\xd2\x7c\x59\x65\xe2\xe9\xa7\x1a\x7b\xfa\x3d"
+ "\xac\xa7\x0f\x20\xbc\x55\xa1\xcd\xe4\x7a\xfa\x36\xe7\xd1\xf8\x24"
+ "\x4d\x6b\x3e\x74\x03\xf0\x68\x3c\x5d\xff\x58\xd3\x9a\x0f\x4d\xec"
+ "\x62\xe8\x17\xf1\xf4\x9b\x10\xe9\x17\x8f\xa7\xa7\xe7\x1c\xc7\x9f"
+ "\x69\xf5\xf4\x55\xa6\x9e\x7e\xf9\x61\x61\x4e\x8d\xd7\xf0\x7a\x7a"
+ "\xec\xbf\x69\x4e\x8d\xa1\x39\xf5\xee\x66\x63\x4e\x4d\xf0\xa0\x39"
+ "\xf5\x35\x03\xa7\x2e\x1b\xa9\x81\x6b\x53\xf3\x90\x75\x4e\xc5\xed"
+ "\xb0\x9c\x1a\xd5\x31\x9c\xaa\xb4\x9d\x53\x8d\xd7\xb0\x7e\x0e\xe7"
+ "\xde\xca\xa9\xf4\x18\x27\x1c\x2c\x8f\xc0\x9c\x1a\x65\xe2\xef\xf7"
+ "\xf0\xfb\xfb\x53\x48\x86\xc7\xc7\xe0\xef\x71\x0c\x68\xbe\x69\x57"
+ "\x7f\xbf\xbc\x2b\x97\x5b\x97\x8f\xe4\x72\x6b\xc2\x4d\x96\x5b\x99"
+ "\x7d\x6d\xe2\xef\x97\x3b\xde\x1b\x7f\xbf\xdc\x91\xe5\xd6\xe5\x97"
+ "\xad\x73\xeb\x32\xc4\xcf\xad\xb0\x9d\xe6\xd6\x65\xc8\x22\xb7\xbe"
+ "\x66\xcc\xad\x89\xe7\x0c\xdc\xca\xfa\x7b\xc0\x07\xbe\xfe\x62\x33"
+ "\xa5\xfb\xfb\xc0\x7b\xed\xef\x13\xcd\xea\x7f\x58\xf4\xf7\x9b\x81"
+ "\x67\xc1\x8b\x2f\x3f\x03\xfe\x3e\x98\xf1\xf7\xd5\x05\x26\xfe\xbe"
+ "\xc0\xcc\xdf\x27\x06\x33\x9c\x0a\xd7\x14\xcd\xa9\x6f\xee\x91\xee"
+ "\xef\xdf\xc0\x31\x4c\x3a\xc3\xe5\xd4\xa4\x73\x5c\x4e\x5d\x19\x89"
+ "\xfb\x45\x38\xbd\x80\xdf\xdf\xd3\xd7\x79\x72\x1f\x8e\xbf\x87\xfe"
+ "\x99\xfb\xfb\x95\x1e\x1c\x4e\x0d\x37\xe6\xd4\xe4\x89\x1c\x9d\x0a"
+ "\xe7\x85\x39\x75\xef\x45\xc2\xa9\x9f\x5c\x34\xe2\xd4\xc9\x9f\x30"
+ "\x9c\xba\x22\xe9\x54\x88\x31\xa7\x26\x67\x1a\x38\x95\xe6\xcb\x70"
+ "\x8d\x6c\x45\xa8\xf9\xbc\x13\x7a\xbe\x0f\x9e\x0b\x04\x6d\xe3\x35"
+ "\x66\xb8\xcd\xfd\x17\xa3\xac\xcf\x37\x09\xe5\x9f\x6f\x52\x11\xab"
+ "\x42\xa5\xb5\x99\xf4\x3c\x93\x3c\x3c\xcf\x64\x25\xea\x93\xd7\x4c"
+ "\x6a\x07\xd0\xb5\x17\x05\xea\x06\xcc\x9a\xce\xf2\x2c\x9e\x93\xf5"
+ "\x21\x9e\x93\x75\x97\xcc\x01\x82\x78\x9b\xd7\x0a\x30\xe8\x26\xe0"
+ "\x83\x23\x17\x4d\x79\x36\xc5\xad\x1c\xe3\x67\x66\x94\x89\xe7\x2f"
+ "\xe8\x04\x9e\x3f\x25\x9a\xcb\xaf\x29\x79\x5c\x7e\x4d\x09\x66\xf9"
+ "\x95\xd9\xd7\x26\xda\x35\x25\xea\xde\x68\xd7\x94\x28\xd6\xf3\xaf"
+ "\x1c\xd7\xca\xaf\x95\x46\xfc\x7a\xd1\x98\x5f\x93\x43\x68\x7e\xbd"
+ "\x68\xca\xaf\xb0\x9d\xe6\xd7\xe4\x90\x56\x7e\xad\x34\xf1\xfc\x17"
+ "\x4d\xf9\x75\x55\x3f\x9a\x5f\xab\x0b\x4c\xb4\x6b\x81\x75\xcf\x5f"
+ "\xdd\xd9\x3c\xff\x2a\x5f\x51\x9e\x1f\x73\xea\x7c\xc2\xa9\x98\xb3"
+ "\x0c\xbc\xca\x7a\xfe\x02\x41\xcf\x6f\x8d\x57\x45\x69\x55\x9a\x57"
+ "\x57\xf7\xe3\xf2\xea\xea\x81\x5c\x5e\x5d\x77\xd0\x94\x57\xcd\x39"
+ "\x75\xf5\x02\x3e\x3e\x25\x9e\x7f\x5d\x84\x30\x97\xae\xce\x15\xcf"
+ "\xa5\x6b\x4e\x71\xb9\x74\x75\xf5\xff\xbf\x5c\xba\x76\x16\x87\x4b"
+ "\x5d\x6d\xe4\xd2\x0e\xc9\x03\xac\x3d\xcc\xe5\xd2\xb5\x75\x5c\x2e"
+ "\x5d\x9b\xcf\x72\x29\xb3\xaf\x4d\xb8\x74\xed\xa1\x7b\xc3\xa5\x6b"
+ "\x0f\xb1\x5a\x75\x5d\x96\x75\x2e\x5d\x5d\xc0\xcf\xa5\xb0\x9d\xe6"
+ "\xd2\xd5\x05\x2c\x97\x5e\xb0\xc2\xa5\x7f\x8b\x13\xc1\xa5\xdc\x3c"
+ "\x80\x29\x97\xde\xf3\x3c\xc0\xdf\x62\x45\xe5\x01\x0c\x5c\x1a\x6c"
+ "\x9e\x07\xc0\xfc\x4a\xe7\x01\x60\xbc\x0c\x1c\x46\xe7\x01\xc6\x12"
+ "\x2e\xab\xd0\xa6\x72\xf2\x00\x6d\xcf\xad\xa9\x6b\x35\xad\xf9\xd4"
+ "\x55\xc0\xad\xa9\x74\xed\x5a\x4d\x6b\x3e\x35\xad\x8f\xa1\x5f\x24"
+ "\x0f\xb0\x01\x91\x7e\xf1\xe4\x01\xc6\xd0\xed\x9d\xe7\xe4\x01\x8c"
+ "\xb8\xf6\x8a\xc3\xfb\x67\x84\x79\x76\x3d\xe2\xe4\x01\x6a\x58\x9e"
+ "\xbd\x8b\xe7\xa8\x03\x0f\xd2\x3c\xdb\xc3\x98\x67\x37\x0c\xa6\x79"
+ "\x76\x8c\x81\x67\xd7\x8f\x6d\x84\x6b\xb3\x51\x2c\xcf\xe2\x75\x04"
+ "\x17\x23\xee\x0d\xcf\x16\x89\xe0\x59\xa3\xdc\xc0\x11\x18\x8f\x56"
+ "\x9e\xa5\xc7\x7d\x43\x59\xf9\x4c\xcc\xb3\x11\x26\xb9\x81\x02\xfe"
+ "\xdc\xc0\xc9\x7b\x91\x1b\x78\xbf\x2f\x97\x6f\xdf\x0f\xe5\xf2\xed"
+ "\xfb\xce\x2c\xdf\x32\xfb\xda\x24\x37\xf0\xbe\xcf\xbd\xc9\x0d\xbc"
+ "\xef\xc3\xf2\x6d\x9a\x83\x75\xbe\x5d\xef\xc8\xcf\xb7\xb0\x9d\xe6"
+ "\xdb\xf5\x8e\x16\xf9\x76\x8c\x31\xdf\xa6\xdd\x34\xf0\x2d\x9b\x1b"
+ "\x28\x60\x72\x03\xa9\xd6\x73\x03\xd5\x02\xb9\x81\x71\xf7\x3a\x37"
+ "\x90\xa6\x16\x93\x1b\x68\xda\x4c\xe6\xed\x2f\xc7\xf3\xf6\x67\x01"
+ "\xff\x4e\xf9\x16\xc6\xc0\xfa\xbc\xfd\x44\xc3\xfc\xd3\x88\x5c\x86"
+ "\x67\x73\x79\x73\x03\xa7\xeb\x84\x73\x03\xa7\xcf\x1a\xcf\x3f\x4d"
+ "\xbf\xce\x7d\x6e\x95\x7e\xd3\xf0\xdc\xea\xf4\xf7\x98\x67\xb3\xe8"
+ "\x9a\x91\xfa\xec\xd9\x05\xa4\xfe\x76\x96\x06\xf7\x93\x6f\x1e\xff"
+ "\xe7\x7a\xe3\x67\x59\x19\x93\x5a\x73\x05\x95\x98\x6f\x73\x91\x9e"
+ "\x8a\x7a\x08\xd7\xff\xa6\x73\x05\x7f\xc1\xd8\xcb\xda\x6b\xcc\xbb"
+ "\x5f\xfc\x68\xcc\xbb\x19\xf1\x06\xde\xd5\x01\xef\x16\xd7\xe4\x92"
+ "\xfc\x6b\x18\x99\x9b\xba\x2f\xcc\x68\x6e\xea\xb7\xff\x61\x78\x77"
+ "\x63\xdc\x29\x15\x9c\xbf\xa5\xf9\x53\xf0\xfd\x03\x3f\xda\x3a\x07"
+ "\x35\x97\x77\xee\x14\xc3\x4f\xbc\xf3\xa7\xa0\xaf\xae\xf9\xcc\xb5"
+ "\xaa\x83\xeb\x34\xdf\x68\xfe\x54\x5e\x02\x5c\xcf\xcc\xba\x12\x8b"
+ "\xf3\x50\xc3\xd8\x79\xa8\x54\x76\x78\x35\xbe\xbf\xe9\x73\x66\x17"
+ "\x34\x53\x51\x72\xca\x3d\xbc\x1a\xff\x7e\x4b\x0b\xdc\x77\x5e\x0d"
+ "\x95\x13\x5f\x17\xae\x04\xee\xe9\x46\xc6\x7d\x63\xa1\x0e\xee\x35"
+ "\x3a\xb8\xd7\xe8\xb3\xc3\x95\x5a\xac\x4d\x36\x87\x9f\xc8\x03\x9f"
+ "\xa7\x5d\x45\xbf\x13\xf1\x91\x0c\xf0\x7a\x3b\xb0\xcf\xbb\x01\xd7"
+ "\xc6\x0a\x5f\x19\xee\x8f\x81\x47\x5d\xea\xe0\x3c\x6e\x58\xd6\x72"
+ "\xda\xdf\x58\x1e\x55\x4e\x38\x0d\xbf\x99\xb9\xbb\x1c\x63\x37\x94"
+ "\x5d\x53\x40\x6b\x66\x81\xb9\xb2\xb8\x2f\xa4\xe6\x22\x60\xa1\x0d"
+ "\x72\x12\xc6\xfd\xe1\xf2\x7a\xa6\x8e\xcb\xeb\x59\x7e\x5c\x5e\xcf"
+ "\xbc\xcc\xf2\x3a\xb3\x0f\x78\x1d\xe2\x46\xeb\x68\xb8\xf7\x49\xd4"
+ "\xd1\x99\x5a\x03\xaf\xeb\x19\x5e\xdf\x6e\x03\xaf\x5b\xd4\xd1\x46"
+ "\xbc\x24\xcc\xeb\x99\x5a\x36\x27\x91\x75\x9e\x77\x8e\xec\x8f\xc6"
+ "\xbc\x9e\x91\x42\xf3\xfa\x8f\xa6\xbc\x0e\xdb\x69\x5e\xcf\x48\x11"
+ "\x5c\x4f\xf0\xa3\xe9\xf3\xb4\x4d\xc5\x34\xaf\x57\x31\x73\x64\x2b"
+ "\x45\xac\x27\xa8\x22\x9c\x6e\xe0\x72\x9c\xaf\xba\xb7\x39\x89\x4d"
+ "\xc7\xc4\xe4\x24\x68\x2e\xaf\x27\x5c\x8e\xb9\xd1\xc0\xe7\xb6\xac"
+ "\x27\xb0\xc6\xe7\x06\xdd\x8c\xf9\x5c\x48\x37\x73\xf9\xfc\x83\x62"
+ "\x2e\x9f\x7f\x70\x9c\xcb\xe7\x5b\x8a\xb9\x7c\xbe\xe5\x98\x29\x9f"
+ "\x9b\x73\x79\xb6\x1b\x1f\x8f\xc7\xfc\x05\xe7\x28\xb6\xcc\x17\xe6"
+ "\xf0\xec\x91\xe2\x39\x3c\x67\xc4\xff\x77\x1c\xee\x6a\xca\xe1\x39"
+ "\xb1\x98\x83\x74\xeb\x4c\x38\x7c\x1e\xc3\xe1\x0c\x8f\xec\xb8\xc6"
+ "\x68\x61\x53\x0e\xaf\x87\xf3\xb0\xe2\xc7\xb5\xbf\x9a\x72\xf8\xe6"
+ "\x68\x0e\x87\xbb\x5a\xe1\xf0\x79\x24\x0f\xc2\x99\x97\x2b\x90\x0b"
+ "\x81\xf3\x88\xcf\x17\xd0\xe6\x86\x31\x33\xee\x0f\x97\xc3\x37\x1f"
+ "\xe7\x72\xf8\xe6\x06\x2e\x87\x6f\xde\xcb\x72\x38\xb3\xaf\x4d\xb4"
+ "\xf9\x66\x65\x9b\x6b\x73\x03\x3e\x2c\x72\xf8\x66\x25\xab\xcd\xb7"
+ "\xe4\x5b\xe7\xf0\xec\xb1\xfc\x1c\x0e\xdb\x69\x0e\xcf\x1e\x2b\xb8"
+ "\xce\xc1\x8c\xc3\x73\x93\x44\x70\x38\x37\x17\x62\xe0\x70\x26\x17"
+ "\xb2\xc3\x28\x17\xa2\x5b\x45\x72\x21\xf9\xd7\x08\x36\xba\x39\x10"
+ "\x9c\x02\x7e\x3c\xb7\xcb\x2c\x7b\xb7\x7c\x49\x79\x90\x5c\xc1\xfa"
+ "\x57\x7c\x79\x10\x9a\xbf\xf1\x1a\x87\xe9\xc0\xdb\x95\x36\xae\x71"
+ "\x08\x30\xac\x71\xc8\x14\x58\xe3\xc0\xf0\x79\xb8\x1d\x7c\x4e\xaf"
+ "\x71\xd8\x9a\xce\xcd\x31\x6f\xcd\x32\xe4\x98\x09\x9f\xe7\xef\xe4"
+ "\xf2\x79\x7e\x41\xeb\x9a\x07\xe0\xfc\x8a\x98\x4d\x66\x6b\x1e\x5a"
+ "\xb9\x9d\xce\x83\x6e\xbd\xa9\xfc\x4b\x2d\x6a\xe5\xf7\x99\x2c\xbf"
+ "\x43\x5b\xc1\x1c\x6e\xaf\x31\xe6\xf6\x6d\x9e\x1c\x6e\xbf\x98\xcb"
+ "\x9d\x1f\x51\x13\x63\xc4\xed\x86\x35\x0f\x1f\x7a\x9c\xaa\xb6\xc2"
+ "\xed\xf0\x7d\xdb\xd7\x88\xb5\x2d\xb7\x1b\xd6\x37\xf0\x72\xbb\xf1"
+ "\xfa\x06\xa3\xf9\x0f\x98\xdb\xe9\xf7\x66\x78\x98\x70\xfb\xf2\x28"
+ "\x99\xee\x2b\xb8\x1e\x80\xd7\xf1\x35\xa2\xa3\x80\xdb\xe9\xf1\xfe"
+ "\x70\x8a\x31\xb7\xb7\xac\x22\xdc\xfe\xe1\x35\xfb\xb9\xbd\x55\x0f"
+ "\x1b\x73\xfb\x6b\x98\xdb\xf3\x26\x91\xf5\x17\x29\xb6\xad\xbf\x30"
+ "\x99\x9f\xf1\xa1\x0d\xf9\x17\x8b\x1c\xcf\xd3\x2f\x2e\xc7\xe7\xed"
+ "\xe6\x72\x7c\x5e\x15\x97\xe3\xf3\xd2\x59\x8e\x67\xf6\xb5\x89\x4e"
+ "\xcf\xdb\x75\x6f\xf2\x2f\x79\xbb\x58\x8e\xcf\x5f\x69\x7d\xed\xc5"
+ "\x36\x6f\xfe\xb9\x19\xb0\x9d\xe6\xf8\x6d\xde\x16\xd7\x5e\x70\xf2"
+ "\xdd\xdb\x17\xf1\xae\xbd\xa8\xec\xb8\xb9\x19\xc6\x58\x31\xcd\xbf"
+ "\x48\xcf\x7d\x6f\x8f\x11\x9b\x7f\xc1\x6b\x2f\x96\x9f\x33\x5a\x7b"
+ "\x51\x6d\x7d\xed\x45\xe2\x54\x1b\xf3\x2f\x16\xe6\x66\x9c\x9e\x62"
+ "\x3c\xdf\x6d\xc7\x02\x2e\xbf\xef\x58\xd4\xca\xef\x6f\x60\x7e\xff"
+ "\xbf\xb5\x5c\x7e\xff\xbf\x35\xb8\x9f\x7c\x6b\x31\x3e\xe7\x3c\x57"
+ "\xdc\x51\xc6\x9d\xab\x61\x92\x7f\x79\x03\x63\xef\xff\x86\x72\xf8"
+ "\xfd\xa2\x31\xbf\xef\xd0\xf0\x69\x77\x9c\xf7\xa6\xe7\x14\x87\x1b"
+ "\xad\x69\x9b\x6c\x98\xff\xb6\xd3\xe1\x54\x28\x9c\xbf\x4a\x60\xae"
+ "\x5b\x38\x99\xeb\x46\xcf\x6d\xc3\x79\x70\x68\xeb\xd3\xf0\x18\x59"
+ "\x72\x04\xa5\xc7\x73\xdd\x4c\xe7\xb9\xe1\xb9\x6f\x78\xae\x5b\x59"
+ "\x54\xa6\xe0\x3c\x37\x8c\x4d\xa1\xb9\x6e\xd0\x6f\x77\x9a\xeb\x2f"
+ "\x31\x5c\xcf\xcc\x75\xcb\x5b\xca\xce\x75\xe3\x70\x3d\xcf\xfc\xe1"
+ "\x23\x17\x53\xf8\x75\xfc\x0a\x96\xeb\x9b\xb1\x8e\x7f\xc9\x24\x17"
+ "\x43\xc7\x60\xe7\xc8\x0e\xcd\xc5\xd0\x5c\xff\xd1\xe0\x72\x8c\xe3"
+ "\x99\x31\x3c\xb9\x18\xf3\x39\xce\x1d\x97\x8b\xf9\x68\x3d\x97\xe3"
+ "\x3f\x3a\xc6\xe5\xf8\x8f\x16\xb1\x1c\xcf\xec\x6b\x13\x8e\xff\x28"
+ "\xf5\xde\xe4\x62\x3e\x4a\x65\x73\x31\xff\x17\xc9\x3b\xff\x8e\x93"
+ "\x63\x2f\x40\xfc\x39\xf6\x02\x66\xfe\x5d\x01\x12\x5c\x13\x62\xf6"
+ "\x4c\x73\x57\x20\xc9\xb1\x4b\x58\x13\x52\xdd\xd9\x72\x31\xbb\x02"
+ "\xc4\xe6\x62\xe8\xb9\xcd\xe7\xf0\xfc\x10\x71\x6b\x42\xac\x71\x7b"
+ "\xab\x76\xb7\xf0\x0c\x93\xcb\xed\xbb\x03\xb9\xdc\xbe\x7b\x12\x97"
+ "\xdb\xf7\x4e\xe5\x72\xfb\xde\x10\x53\x6e\x37\xe7\xf5\xdd\xf9\x7c"
+ "\x9c\x1e\xf3\x06\xce\xc5\xec\x55\x08\xf3\xf9\xee\x12\xf1\x7c\xfe"
+ "\xf1\x99\xff\xaf\xf9\xdc\xd5\x94\xcf\xff\xee\xd4\xa1\x79\x19\x9a"
+ "\xcf\xf7\x38\x70\xf8\xdc\xd5\x0a\x9f\x77\x58\x5e\x66\xcf\x74\x2e"
+ "\x9f\xef\x49\xe3\xf2\xf9\x9e\xd1\x2c\x9f\x33\xfb\xda\x24\x2f\xb3"
+ "\x27\xf4\xde\xe4\x65\xf6\x84\xb2\x9a\x7d\xef\x50\xeb\x7c\xbe\xbb"
+ "\x92\x9f\xcf\x61\x3b\xcd\xe7\xbb\x2b\x05\xe7\x53\x9b\xf1\xf9\x27"
+ "\x1e\x22\xf8\x9c\x77\x8e\x4a\xe7\xc8\xcb\x7c\xe2\x2e\x36\x2f\x23"
+ "\xb4\x4e\x05\xf3\x3b\x3b\x3f\xc5\x68\x9d\x8a\xbf\x61\x9d\x4a\x0a"
+ "\x77\x7e\x4a\x9b\x73\xfb\x3f\xfa\x72\xb9\xfd\x1f\xfd\xb8\xdc\xfe"
+ "\xe9\x38\x2e\xb7\x7f\x3a\xd6\xd0\x4f\x92\x97\x59\x65\xb6\x6e\x85"
+ "\xcb\xf3\xff\x58\xaf\x7c\xa3\x16\xf1\x71\xfd\x15\x87\x03\x77\x84"
+ "\x79\xfe\x1f\x85\x42\x3c\x8f\xe7\xab\xfc\x23\x3c\x8a\x87\xe7\xf7"
+ "\x1d\xf9\x3d\xf0\xbc\xd0\x3c\x14\xda\x07\x01\xc7\x63\xbe\xa7\xf9"
+ "\x9d\xe1\x7a\xcc\xf3\xba\xa3\x7c\x39\x9a\x7d\x0d\xed\xc5\xf3\xc2"
+ "\x39\x9a\xfd\x37\xcb\x67\x32\x3c\x6f\xcb\x1a\x9a\xe3\xdc\x1c\x4d"
+ "\xde\xbc\xf6\xce\xd1\x1c\x08\xe4\xf2\xfd\x81\x44\x2e\xdf\x1f\x18"
+ "\xcc\xf2\x3d\xb3\xaf\x4d\xf4\xfb\x81\x80\x7b\x93\xa3\x39\x10\xc0"
+ "\xf2\xfd\xa7\x7d\xad\xf3\xfd\x3f\x8a\xf8\xf9\xfe\x1f\x4c\x6d\xb6"
+ "\x7f\x14\xd9\xce\xf7\x85\xad\x7c\x6f\xbe\x7e\x26\x45\xfa\x1c\x99"
+ "\xd1\xf7\x3a\x47\x53\x28\xc8\xff\x96\xea\x63\x48\xcf\xd1\x30\x6b"
+ "\x12\xdf\xe4\xaf\x8f\x71\xca\xc2\x1c\x99\x53\xa5\xc6\x5c\x7f\xd0"
+ "\x8d\x3b\x17\xf1\xa0\x87\x61\x2e\xe2\xa9\x72\xcc\xf5\x87\x47\x71"
+ "\xb9\xfe\xf0\x48\xa1\x1c\xcd\x11\xbd\xf1\x9c\xc4\x83\x8b\xb8\x39"
+ "\x9a\x02\x6e\x8e\x66\x32\xc6\xde\xa1\xeb\xc2\x5c\x7f\x30\x8f\x3b"
+ "\x07\x9c\xac\x51\xdc\x1b\xce\xcc\x01\x0f\x37\x9a\x03\x3e\xe1\x23"
+ "\x86\xeb\xff\x79\xa4\xa4\x52\x8b\xc4\xcc\x43\xb4\x7f\xae\x77\x2a"
+ "\xef\x1c\x44\xfa\x1e\x60\x61\x1e\xe2\xec\xf3\xae\x78\x4e\x73\xfc"
+ "\xf6\xa5\x46\xf3\x10\x2d\xd4\x33\xe6\xf0\x7f\x78\x8c\x20\xff\x37"
+ "\x51\x2c\xff\xeb\x5f\x60\xf3\x36\x7a\xac\xf3\xe9\xb8\xfc\xb3\xa1"
+ "\xbd\xf2\x36\x7c\x79\x12\xe5\x18\xcc\xff\xff\xba\x4a\x74\x7e\x54"
+ "\x27\xcb\xdb\x1c\x1a\xcd\xe5\xfd\x43\xb1\x5c\xde\x3f\xd4\x8f\xe5"
+ "\x7d\x66\x5f\x9b\xcc\x45\x3f\xe4\x7f\x6f\x74\xfe\x21\x7f\x36\x6f"
+ "\x73\xf8\x71\xeb\xbc\x7f\x70\x17\x3f\xef\x1f\xdc\x45\x78\xff\xe0"
+ "\x2e\x8b\x79\x1b\xce\xdc\xc8\xcf\x1c\xec\xce\xdb\x18\x74\xfe\x3d"
+ "\x5f\xd7\xf3\x19\x12\x93\xb7\x69\x5d\x93\x6e\x57\xde\x86\x9f\xef"
+ "\x0d\xda\xfe\x94\x85\x67\xae\x5c\xbe\xff\xb7\x03\x97\xef\xff\xdd"
+ "\x85\xcb\xf7\x47\xfb\x70\xf9\xfe\xa8\x37\x5f\xde\x86\xcb\xf5\xff"
+ "\x9e\xca\xc7\xf3\x31\x93\x71\xde\xe6\xf3\x4a\x61\x8e\xff\x77\x8a"
+ "\x78\x8e\x2f\xca\x7f\xc0\xf1\x26\x1c\xef\x6a\xca\xf1\x45\x55\x1d"
+ "\xaa\xf1\x69\x8e\x3f\x52\xc6\xe1\xf8\x36\xcc\xe5\xd8\xb2\x9e\x44"
+ "\x58\xdb\x7f\x6e\x32\xff\xfd\x73\x93\xf9\xef\x9f\x1b\xcd\x7f\xff"
+ "\x3c\xb4\xed\x38\xfe\xf3\xb6\x9f\xff\x6e\x13\xc7\x7f\x6e\x34\xff"
+ "\xfd\xa8\x83\x75\x8e\xff\x77\x2a\x3f\xc7\xc3\x76\x9a\xe3\xff\x9d"
+ "\x6a\x51\xdb\x73\x38\xfe\xe8\xe5\xf6\xc8\xe5\xdc\x9b\xf5\x46\x47"
+ "\x6b\xc5\xe4\x73\x2c\xd5\x1d\x11\xcc\xe7\x0c\x37\xe4\x73\x62\x04"
+ "\xf2\x39\x6d\xc5\xf9\xc7\xee\x70\x39\xff\x58\x13\x97\xf3\x8f\xf7"
+ "\xe3\x72\xfe\x71\x5f\x6e\x3e\x67\xb1\x59\x3e\x87\xcb\xff\xc5\xd3"
+ "\x95\x93\x8d\xf3\x39\x05\x46\xf9\x1c\xe5\x79\x61\xfe\x2f\x16\xe4"
+ "\xff\xbb\x34\xff\x47\xf0\xf0\xff\x17\xff\x9f\xf0\x7f\x84\x1d\xfc"
+ "\xff\xc5\x3d\xe0\xff\x2f\xcf\x91\x1c\x8f\x8d\x75\x52\x8e\x88\xcf"
+ "\xf1\xd8\x77\x1f\x50\x0e\xe4\xde\x07\x94\x11\xdc\xfb\x80\xd2\x83"
+ "\xbd\x0f\x30\xfb\xda\xe4\x3e\xa0\x1c\x70\x6f\xee\x03\xca\x01\xec"
+ "\x7d\xe0\x78\x57\xeb\xf7\x81\x62\x81\xfb\x40\x31\x73\x1f\x28\x16"
+ "\x71\x1f\x38\xde\x24\x9c\xe3\x89\x91\x9e\xe3\x19\x71\xaf\xd7\x41"
+ "\x1d\xd7\x88\xca\xf1\x6c\x8e\xc8\x2c\xc5\x35\x52\x2e\x21\xd9\xf2"
+ "\x39\x86\x1c\x8f\xd2\x24\xc7\xa3\x34\xcb\xf1\x2c\xbb\xc4\xf0\xff"
+ "\x44\x66\xbd\xe9\x64\x3b\x6a\xa4\xd0\xef\xa0\xfe\xcf\x1d\xee\xbc"
+ "\xf9\xff\xd0\xfc\xcf\xd6\xef\xfb\xef\x5a\xdc\x2f\x72\xff\x51\x5a"
+ "\xa8\x81\xfa\xd5\x38\x4e\x4e\x67\x22\x5f\x8d\x94\xff\x72\xe6\xdd"
+ "\x70\xd7\x9b\x7e\x15\xc3\xe1\xfb\xc9\x64\xbd\xe9\x27\x7c\xcf\x69"
+ "\x5b\x6b\xf2\x9f\x58\x49\xd7\xe4\x6f\xad\xe5\xf7\xd5\x21\x9b\x6a"
+ "\x49\x87\x33\xb5\xa4\x2f\xde\x83\x5a\xd2\xb6\xd6\xe4\xbf\x68\x5a"
+ "\xbf\xef\xe4\xe3\x15\xa5\x4a\x54\x8e\x31\x32\xd3\xb4\xf6\xa9\x92"
+ "\x7f\xed\xbe\x8c\x59\xbb\xbf\xb0\x7d\xea\xa0\xe0\xfe\xd0\xf7\xfc"
+ "\xee\x1f\xab\xf7\x27\xab\xe9\xfe\xe0\xf7\x7d\x43\x5f\x77\x96\x02"
+ "\x56\xf5\x98\x4f\x17\x63\x3e\x3d\x79\x96\x3e\xf6\x12\x60\xa1\xfb"
+ "\xf3\xde\x18\xc7\x19\x7a\xe4\x14\xb3\x14\x73\xeb\x49\x7a\xde\x17"
+ "\xc8\x08\xe0\x56\x72\x5c\xd2\x25\x4a\xa7\xeb\xfe\x92\x37\xf4\xff"
+ "\xe1\x03\x0b\x2b\xbb\x94\xab\x1a\xe0\xba\xb8\x46\xbf\xd3\xb5\x42"
+ "\xdb\xa8\xc4\xb1\xf8\x62\x61\xa5\x82\x02\xfe\xdd\xf1\x36\x72\x14"
+ "\x77\x9d\x9e\x2c\xa0\xf5\x0c\xbe\xef\x75\xff\x58\x8b\xeb\x80\x18"
+ "\xb4\x95\xfe\x37\x36\xbf\x95\x0f\xe3\xa3\xa7\xc8\xbd\x6f\x76\x34"
+ "\xe1\x0d\xf8\xbd\x78\x18\x4b\x7a\x8e\x2d\xe6\x0d\xfa\x1d\x56\xc0"
+ "\x1b\xdb\x6f\xb1\xcf\xb1\x71\xfb\x78\x8c\x48\x1e\xe5\xbf\xec\xfc"
+ "\x17\x95\x10\xb7\x7e\x15\xcf\xcf\xad\x5f\xc5\x13\x6e\xfd\x2a\xbe"
+ "\x95\x5b\x55\x3c\x79\x14\xce\x3c\xf6\xaf\x99\xf9\x2f\x4a\x13\x8d"
+ "\xad\xbc\x0f\xeb\xa3\x7c\x2d\x6a\xfe\x0b\xcd\xa7\xf3\x09\x9f\x62"
+ "\xbe\x32\x70\x2a\x9b\x47\x51\x0a\xe6\x51\xac\x71\xaa\xa8\x35\xfc"
+ "\x34\xa7\x96\x04\x72\x39\xb5\x64\x12\x97\x53\xbf\x29\x33\xe5\x54"
+ "\x73\x3e\x2d\x49\xe7\xe3\x52\x52\x1f\xe5\x9b\x44\x61\x1e\x2d\x29"
+ "\x12\xe2\x51\x7a\x7e\x7a\xb8\xd1\xfc\xf4\x56\x1e\x3d\x75\x8a\xcb"
+ "\xa3\x25\x5a\x5b\x79\x94\x7e\xb7\xc9\xc5\x0e\x78\xb7\x89\x64\x1e"
+ "\x8d\x31\xe1\xd1\xd3\x91\x2c\x8f\x9a\xbe\xdf\xc4\x0a\x8f\xce\x6b"
+ "\x9f\x1a\x28\x1c\x1e\xd5\xab\xe9\xfe\x78\x2f\xa4\xfb\x7a\x95\xcb"
+ "\xa3\xdf\x78\x09\xf3\xe8\xe9\x23\x2c\x8f\x92\xe3\xda\x97\x47\x4f"
+ "\xd7\x71\x78\x74\x9e\x11\x8f\xfe\xca\x7a\x08\x3c\xc7\xa2\x95\x47"
+ "\x17\x18\xf1\xe8\x3c\x6b\x3c\x7a\xba\x0e\x8f\x11\xd1\xa8\xdf\xec"
+ "\xb7\xce\xa3\x25\x4a\x7e\x1e\x2d\x51\x12\x1e\x2d\x51\xb2\x3c\xca"
+ "\xa3\x51\x39\x3c\x5a\x9a\x25\x82\x47\x3b\x79\x6d\x94\xd2\x4c\x51"
+ "\xb9\x0a\x76\x4d\xa7\x79\x8d\xd4\x59\xc6\x6b\x82\x8a\x4c\xde\x7b"
+ "\x52\x64\xf6\xde\x93\x65\x86\x35\x9e\x01\x0c\xaf\x4e\xb0\x83\x57"
+ "\xe9\x35\x9e\x65\x3b\xb9\x73\x4f\xca\x76\x1b\xe6\x9e\x10\x5e\x3d"
+ "\x33\xc2\xd0\x2f\xf6\xbd\x27\x45\x16\x6a\xa4\x96\xdd\xe1\xd4\x46"
+ "\x09\x30\xae\x8d\x52\x79\x55\xb8\x46\x6a\xb9\x17\xa7\x36\xca\xe9"
+ "\x3d\xad\xef\x3d\x31\xad\x91\xca\x72\x6c\xc5\x40\x9a\x63\x5b\x6b"
+ "\x50\x95\x47\xb4\xd6\x48\xb5\xb2\x2e\x08\xb7\x73\xa0\x26\xaa\xfd"
+ "\x39\x56\x29\x82\x63\x39\xef\x3d\x31\xad\x31\x55\x71\xa6\xa2\xa4"
+ "\x08\x95\x47\x14\xf1\xd4\x46\x2d\xba\xa7\xef\x3e\xc1\xfd\xe2\xe7"
+ "\xda\xca\xa9\x5c\xae\xad\x4c\xa5\x8f\xbd\xc0\xc7\xb5\x95\x7d\x59"
+ "\xae\x25\xc7\x25\x5d\x30\xe1\xda\x6a\x01\xae\x85\xfb\xea\x8e\x2b"
+ "\x62\xb9\xb6\x32\x84\xe6\xda\x55\x0c\xd7\x5e\x6b\x6b\xae\xad\x0c"
+ "\x61\xb9\xf6\x4c\x4f\xeb\xef\x98\x2a\xf7\xe1\x5f\x97\x53\xee\x43"
+ "\xb8\xb6\xdc\xc7\xe2\x3b\xa6\x38\x73\x3e\xbe\xed\x6a\x78\xc7\x14"
+ "\x9b\x0f\x28\x62\xf2\x01\xf7\xf3\x3b\x51\xbe\x75\x14\x9b\x0f\xf8"
+ "\x06\xbc\x3b\x5e\x77\xb9\x1c\xbf\x73\x6a\x26\x7e\x27\x4a\xa1\x49"
+ "\x3e\xa0\xd0\x3c\x1f\x30\xdd\x32\xc7\x8a\xca\x07\xd0\xeb\x2e\xbf"
+ "\xeb\xc2\xe5\xd8\xef\xba\x72\x39\xf6\xfb\x9d\x86\x75\x96\xb8\x3f"
+ "\xc2\x35\x53\xbf\x9b\xda\x9a\x0f\xa8\xe6\x72\x2b\x9b\x0f\xf8\x3e"
+ "\x58\x98\x63\xbf\xe3\xe6\x7f\x27\xec\xe1\xac\xb3\xfc\xa4\xc6\xb8"
+ "\x0e\xb5\xa1\xfe\xd4\xd9\xfc\x53\x67\x8d\x39\xf6\xbb\x13\xf7\x53"
+ "\x1d\xea\xd6\x5a\x53\x56\xe6\x72\x9b\xd7\xa1\x3e\x37\xa2\xa2\xa4"
+ "\x10\xe1\xb5\x6d\x34\xdf\x72\x72\x03\x85\xf7\x26\x37\x50\x52\x28"
+ "\x90\x1b\x38\x57\xcc\xe5\xd9\x73\x6a\xfa\xd8\xf3\x7c\x3c\x7b\x2e"
+ "\x9d\xe5\x59\x72\x5c\xd2\x79\x13\x9e\xad\x6a\x4b\x4d\x7b\xee\x58"
+ "\xfb\xe6\x06\xce\x1d\x63\x73\x03\xdf\xdb\xb0\xfe\xf1\xbb\x54\x7e"
+ "\x9e\xfd\x8e\xc9\xbb\x7e\xc7\xe6\x5d\xab\x78\xde\x97\xc2\xe1\xd9"
+ "\x1f\x22\x0d\xeb\x1f\x69\x4d\x5b\x6d\xd0\xb4\x85\xf7\xe1\xfb\x52"
+ "\x7e\x98\x2b\x36\x37\x80\xd7\xb9\x63\x6e\xc5\xdc\x65\xe0\x57\x36"
+ "\x37\x50\x28\x9c\x1b\xb0\xc2\xaf\xe2\xdf\xdd\x57\x15\xc9\xe5\xd7"
+ "\xaa\x68\x2e\xbf\xfe\x74\xc7\x94\x5f\xcd\xb9\xb5\x6a\x2f\x1f\xaf"
+ "\x92\xdc\xc0\x4f\xbb\x84\x39\xb5\xea\xac\x10\xa7\xd2\x35\xfd\x6a"
+ "\xd8\x39\xd2\x2c\xa7\x9e\xbf\xc9\xe5\xd4\xf3\x9e\xb6\x72\xea\x3d"
+ "\x79\x5f\x8a\x64\x4e\x8d\x32\xe1\xd4\x1f\xd3\x59\x4e\x35\x7d\x67"
+ "\x8a\x15\x4e\x6d\xaf\x3c\x81\x31\xa7\x72\xb4\xeb\x4f\x6e\x5c\x4e"
+ "\xfd\x69\xac\x30\xa7\xfe\x78\x89\xe5\x54\x72\x5c\xfb\x72\xea\x4f"
+ "\xae\xed\x9b\x27\xf8\xc9\x95\xd5\xae\x3f\x9d\xb3\xce\xa9\x55\xd5"
+ "\xfc\x9c\x5a\x55\x4d\x38\xb5\xaa\xda\xf6\x35\xe5\xd5\x47\x44\x70"
+ "\x6a\x27\x7f\x97\x4a\x75\x91\xe8\x3c\x01\xce\xb7\x62\x2e\xad\xb6"
+ "\xaf\x76\x48\xbc\xa1\x76\xc8\x58\x86\x63\x5f\xb3\x97\x63\x2f\x9c"
+ "\xe2\xce\x69\xb8\x50\x66\x98\xd3\x40\x38\xf6\xd2\x02\xee\xfb\x51"
+ "\xcd\x6b\x85\x70\x6b\xa8\x5e\x7c\xbc\x35\x4f\x80\x39\x77\xac\x71"
+ "\x9e\xe0\xd2\xe3\xc2\x7c\x7b\x71\x2c\x27\x4f\xf0\x5f\x7e\xbe\xbd"
+ "\xcb\xe1\xdb\x9f\xe7\xd0\x7c\xdb\x5a\x43\xf5\x62\xaa\xa1\x86\xaa"
+ "\x55\x0d\xcb\xe1\xdb\x88\x8e\xe1\xdb\x22\xdb\xf9\x96\xfb\x2e\x15"
+ "\xd3\x7a\xa9\xaa\x2e\x15\x27\x80\x6f\xe9\x7a\x1d\xa6\x35\x53\x6d"
+ "\xab\xd7\xd1\x5e\x35\x53\x71\xbf\xf8\x79\x57\xb5\x9e\xcb\xbb\xaa"
+ "\x63\xf4\xb1\xbc\xbc\xab\x9a\xce\xf2\x2e\x39\xce\x66\xde\x95\x94"
+ "\x33\x50\xa5\xb6\x6f\xce\x40\x95\xca\xf2\xee\xa5\x49\xd6\x79\xf7"
+ "\xe2\x44\x7e\xde\xbd\x38\x91\xf0\xee\xc5\x89\x16\x79\x97\x33\x87"
+ "\xa0\x66\x14\x6f\x2d\x8f\xea\xfb\xfd\x3d\x2b\x35\x23\xa5\xe4\x0c"
+ "\x80\x83\x65\x89\xb8\x86\x53\x04\x9e\x43\x60\x3d\x67\x60\x8d\x6f"
+ "\xc5\xe7\x0c\x7e\x19\xc1\xe5\xdb\x5f\x46\x71\xf9\xf6\xca\x55\xdc"
+ "\x2f\x8b\x39\x03\x9a\x03\x7e\x59\xdf\x9a\x33\x50\x71\x79\x96\xcd"
+ "\x19\x5c\xd9\x2a\xfc\xec\xeb\x97\x43\x1c\x7d\xfb\x9a\x49\xcd\xea"
+ "\x70\x96\x6f\x4f\x97\x1b\xe6\x8c\xd5\x5e\x3e\x35\xc5\x98\x6f\x7f"
+ "\xd1\x98\xd5\xac\x0e\x69\xc3\x9a\xd5\x21\x6d\x5c\xb3\x7a\x2a\xb7"
+ "\x66\xf5\xb6\xbb\xec\x3c\x32\xf1\x35\xab\x2f\xaf\xa4\x39\x18\x63"
+ "\x08\xd7\xad\xb6\x25\x8f\xd0\xce\xef\x5a\xe1\x70\x2f\x27\x8f\x70"
+ "\xa5\x0b\x97\x7b\xaf\x0c\x17\xe6\xde\xcb\xe7\x58\xee\x25\xc7\xb5"
+ "\xaf\xe6\xbd\xa2\x68\xdf\x3c\xc2\x15\x05\x9b\x47\xb8\x72\x8a\x97"
+ "\x7b\x39\xcf\xc6\x7e\x39\xc6\xff\x6c\x0c\xb6\xd3\xdc\xfb\xcb\x31"
+ "\xc1\x3c\x82\xd9\xfc\xad\xff\xed\x27\xcf\xc6\x18\xcd\xab\x12\x91"
+ "\x47\xe8\x74\x73\x0c\xfe\xb7\x4f\x4a\x1e\x01\xf3\x2d\xe6\x33\x03"
+ "\xe7\xda\x92\x47\x68\x7b\x8d\x5b\xb7\x9f\xcb\xb9\x75\x07\xb9\x9c"
+ "\x5b\x1f\x6c\xca\xb9\xe6\x7c\x5b\x77\x93\x8f\x6b\x49\x1e\xa1\x1e"
+ "\x09\xf3\xec\x55\x2f\x41\x9e\x35\x99\x9b\xcb\xf2\xec\xb5\x49\x5c"
+ "\x9e\xbd\x1a\x21\x89\x67\x6d\x7d\x07\x4b\xa7\xe2\xd9\x08\x13\x9e"
+ "\xbd\x76\x95\xe5\x59\xd3\xf7\xb0\x58\xe1\xd9\x76\x7a\x0f\x8b\xb0"
+ "\xc6\xfd\x75\x01\x97\x67\x7f\x2d\x10\xe6\xd9\x5f\x47\xb1\x3c\x4b"
+ "\x8e\x6b\x5f\x9e\xfd\x75\x7e\xfb\xe6\x16\x7e\x9d\xcf\x6a\xdc\xfa"
+ "\xc1\xd6\x79\xf6\xaa\x0f\x3f\xcf\x5e\x65\x9e\x8b\x5d\xf5\x11\xd4"
+ "\xb8\x66\x3c\x7b\xdd\x43\x04\xcf\x76\xf2\x39\x08\xd7\x45\xd5\xbf"
+ "\x30\xca\xd7\x3e\x54\xa1\x32\x59\x2f\x71\xde\x78\xbd\x84\x51\x6e"
+ "\x61\xac\x21\xb7\xc0\x7d\x3f\x4b\xbc\x21\x7f\xeb\xcf\xf0\xee\x18"
+ "\x7b\x79\xf7\x46\xdf\xc6\x56\xde\x5d\x0c\xbc\x7b\x83\x5e\x1f\xd1"
+ "\xd8\xca\xbb\x37\x2f\x18\xfa\xc5\xbe\x9f\x45\x20\xb7\xf0\x22\xdd"
+ "\xde\xb2\xd6\xdc\x02\xe6\x61\x7f\xe3\xdc\xc2\xcd\x74\x61\x0e\xbe"
+ "\x51\xc0\xc9\x2d\xfc\x87\x9f\x83\x1b\x38\x1c\xfc\xdb\x19\x9a\x83"
+ "\x5f\x34\x70\xf0\x8d\xda\xbb\xe0\x2d\xef\xae\x13\xc7\xc1\x0d\x34"
+ "\x07\x07\xdc\x1b\x0e\x3e\xd4\x06\x1c\x4c\x8f\xbb\x3a\xae\x42\x09"
+ "\x1c\x3c\x13\x73\x70\x80\x6d\xf9\x86\x0e\x7a\x47\x0b\xee\x17\x3f"
+ "\x17\xab\x9b\xb8\x5c\x7c\x73\x00\x7d\x2c\x2f\x17\xab\x4f\xb1\x5c"
+ "\x4c\x8e\x6b\xdf\x7c\x83\x5a\xd3\xbe\xf9\x06\xb5\x86\xe5\xe2\x9b"
+ "\xc5\xd6\xb9\xf8\xc6\x1e\x7e\x2e\x86\xed\x34\x17\xdf\xd8\x63\x91"
+ "\x8b\x5f\x34\xe6\xe2\x5b\xad\x9a\x97\x93\x6f\x50\xdd\xef\xef\x6e"
+ "\xb9\x25\xa8\x7f\xbd\x7b\xa3\x94\x1a\x87\xdb\x5d\x2a\xf2\x10\xba"
+ "\xbd\x0a\xa5\x54\x68\x5f\x44\xb0\x0d\xc6\xef\xf6\xc0\x0a\xcf\xe1"
+ "\x48\xbf\xe9\x35\x9a\x8f\x3f\xc0\x1f\xd0\xb8\x99\x32\xe6\xda\xa2"
+ "\xc7\xf8\x36\x3d\xdf\x15\x6f\xc7\xdc\xbb\xc3\x68\x3f\xdf\x6f\x51"
+ "\x99\xe3\xea\x98\xef\xa5\x92\x75\x37\xe3\xea\x0d\x7f\x63\x6c\xaa"
+ "\x1c\x6e\xa7\x51\x59\xe3\x6a\xd5\x6e\xe3\x6a\xf9\xbe\xff\xa4\x2b"
+ "\x72\xec\xb6\x92\xa2\xb6\x6f\xa6\x1a\x6e\xff\x29\x10\xdd\xde\x80"
+ "\x50\xe6\x66\x4a\xdd\xb8\xee\xf6\x09\x38\xc7\xfa\x2d\x70\xdc\xed"
+ "\xee\xc5\x95\xb7\x57\x4d\x41\xb0\xad\xca\xb0\x0d\xc6\x0d\xe9\x57"
+ "\xc9\x29\x3d\xec\xa3\x36\x3b\x1f\xdb\x91\x0c\x5c\x95\x88\xd0\xb3"
+ "\x77\xf1\x35\x73\xbb\x0e\x30\xe3\x9e\x01\x6d\x6e\x84\xb6\xa8\xc7"
+ "\xfe\xd8\x00\x78\x54\x94\xaf\x41\xf8\x9a\x4e\x85\xf3\x2a\xc8\xc0"
+ "\x63\x2f\x7f\x26\x97\x92\x29\x90\x7e\xf7\xf0\x50\xca\x63\x4e\x26"
+ "\xc4\x03\x65\x2e\x46\xf4\xdc\x8f\x8d\x70\x1c\x25\x5b\x41\xc1\x7d"
+ "\x44\x55\xa1\x6d\x20\xd7\x34\xf4\xef\x0b\xf0\xb1\x14\xfc\xee\xf6"
+ "\xc5\xc8\x15\x3e\x4e\x54\xce\x9c\xcc\xc6\x75\x0d\x31\x70\x9e\xa1"
+ "\xb8\x5f\x42\xe7\xb8\x71\x1b\xdc\x77\xfe\xe8\x89\xef\x1d\xf4\xef"
+ "\xe3\xdf\xa6\x7f\x47\xa6\x4f\xd5\xc1\x76\x6a\xd5\x0a\xaa\x22\x5e"
+ "\x8b\x5c\x60\x2c\x76\x40\xbf\x31\x1e\xf5\x1f\x07\xa2\xd5\xbd\x10"
+ "\x3a\x90\x50\x27\xab\x80\xbe\xeb\xb6\xfc\xb1\x41\x99\xfc\x1c\x82"
+ "\xfd\x6a\xec\x59\xae\x38\xdc\x59\x10\x74\x15\x21\xcc\x27\xf0\xff"
+ "\x65\x0d\x70\x1f\x9b\x04\x7f\x6f\x84\xf3\xd0\xdf\xf6\x54\xe0\x63"
+ "\x61\x7b\x5f\xe5\xd2\x1f\x91\x4b\x0c\x72\xcc\x80\x73\x23\xc7\x36"
+ "\x34\xe0\x63\x55\x0e\x77\xe2\x71\x1f\xe0\x18\x47\xf8\x1b\x7f\x0f"
+ "\xcf\x21\x43\xd4\xae\xe1\xa1\x34\x36\xb3\xe7\x64\xea\xfb\x0e\x0f"
+ "\xa5\xb9\x0f\xce\x73\x23\x9c\x33\x1c\xe3\x04\xc7\x38\xd1\xff\x26"
+ "\x23\xd7\x6c\xd8\x86\xdb\x81\x7f\x9d\x94\x0b\x9b\x71\xdb\xb5\xb8"
+ "\x6d\x81\x71\x50\x50\xee\x73\x32\x29\xc0\x36\xbe\xa7\x7a\x27\x3b"
+ "\x9c\xa9\x71\xb8\xeb\xe9\xe2\x40\x51\x70\x9d\xab\x56\x27\x23\xa7"
+ "\x4c\x3d\x42\xca\x5e\xb8\x9d\x3b\x37\xa1\x7d\x05\x1e\x8b\xc6\x75"
+ "\x77\x2a\x55\x0e\x0d\x89\x78\x7c\x21\x9e\x0d\xde\x4f\xe2\x73\xb8"
+ "\xeb\x8b\x7f\x07\x7f\x87\x39\x5e\x49\xe3\x0f\xfa\xec\x9d\x2c\xa7"
+ "\x60\xbf\x9b\xdc\xe1\x12\x92\x7b\x3a\x7f\xda\xb8\xee\xae\xab\x0a"
+ "\xed\x9f\x88\xbf\xaf\x22\xdf\x03\x2c\xdd\xf5\x81\x98\xe5\xe2\x6d"
+ "\xf8\x6f\x81\xfe\x3a\x19\xe2\x56\xe6\x09\xd8\x30\x8d\x9d\x01\x23"
+ "\x80\x0b\x03\x46\x70\x7f\x3f\x4d\x56\xc9\xe8\xfb\xb0\xc3\x5d\xda"
+ "\xd7\x65\x40\x0c\x75\x1f\x7a\x2a\x36\xc2\xd8\xea\x5b\x70\x5c\x6a"
+ "\x60\x5f\x63\x34\x8e\xcb\xc6\x04\x88\x09\x39\x36\x8d\xed\x3f\xfe"
+ "\xbb\x91\x8e\xa7\x1e\x62\x41\xd6\x6e\x36\x8e\xc2\xe7\xb3\xf1\x2e"
+ "\xc4\xb1\x07\xd5\x70\x02\x22\x47\x61\xdc\x02\x46\x0e\x2c\xd6\xc8"
+ "\xf0\xbc\x3e\xbc\xfd\x8b\x5b\x1a\xd9\xc6\x6b\x08\xeb\x4a\x94\x0e"
+ "\xbc\x9c\xbf\x14\xc6\x1c\xda\xa4\x7c\x86\xa9\x06\x19\xe2\x98\x00"
+ "\xb1\x5b\x0a\xd8\x85\x31\xdf\x08\xe3\xb7\x1d\x38\x0f\xff\x7f\x3b"
+ "\xdc\x7f\x40\xd3\xa9\x54\x0e\x8d\x78\x6d\xa3\x6b\x7e\x0f\x4a\xbd"
+ "\xa3\x07\x55\x0f\x63\xf8\x55\xe3\xba\xc6\x10\xc3\x18\xe2\x3e\x6d"
+ "\x84\xed\xe9\xb0\x1f\xc6\xb3\x92\x60\xe8\x6e\x81\xe1\x9c\x85\xc6"
+ "\x33\xed\x00\x1a\x9e\x7e\x00\x79\x6d\x38\x80\x46\x2e\xaf\x85\xeb"
+ "\x72\xd5\x2b\xd4\x37\x33\xb5\x70\x4f\x2c\xa8\x6a\xee\x31\xa1\x12"
+ "\x3f\x7b\xd2\xaf\xfe\x63\xc1\xda\x03\x68\x00\x5e\x1b\x1b\x54\x8f"
+ "\x10\xbe\x87\x07\x75\xf9\x99\xaa\x88\xb9\x83\xf4\x6e\x05\x55\xba"
+ "\xd5\xcf\x74\x9f\x7c\x07\xa1\x93\xbe\x0d\x28\x39\x16\xee\xe5\xb7"
+ "\xea\x50\x72\x03\xa5\x2e\x4f\xb9\x8a\x80\x7b\xaa\xc9\xd8\x35\xb9"
+ "\x07\x45\x22\x84\xd7\x0c\xea\x7f\xf5\x45\xce\x51\x48\x91\x78\x1e"
+ "\x79\xae\xa8\xa5\xea\x74\x9b\xa7\xa5\x24\x27\x21\xd9\x81\x5b\x55"
+ "\x44\x7b\x3a\x68\x2e\x17\xe3\xf5\xa9\x8d\xa1\x68\xb6\x96\xb9\x1f"
+ "\x65\xcf\xc9\x5d\x11\x8d\x7a\xe2\xf3\x71\xa1\xb5\x97\x66\x25\x8c"
+ "\x5b\xae\x38\x7e\xd6\x4c\xa4\xe3\xb9\x79\x3a\x3a\xf0\xa6\x06\x74"
+ "\x6b\x37\xd5\x8a\x48\xaa\x0e\xeb\x3a\xb8\xbf\xd0\x5a\xb0\xa2\x4e"
+ "\x0b\xda\x6a\x2e\xdc\xbf\x55\xe8\xcb\x9a\x02\x99\x3e\xa7\x9b\x4a"
+ "\xe4\x6f\x14\xd2\xf7\x6d\x7c\x2f\x85\xbe\x4f\xf5\x45\xe4\x3e\x08"
+ "\xf7\x4c\x97\x58\xac\xa7\xa8\x9f\x71\xff\xbf\x80\x73\xa5\xfa\xc4"
+ "\x02\x47\x69\x86\xe0\xfb\x67\x50\xb5\x12\x95\x6a\x74\x68\xdb\x35"
+ "\x7a\x8c\x1e\x82\x31\x52\xc0\x3e\x47\x18\x27\x47\xbe\xb8\xe1\x98"
+ "\xe9\x33\x0b\xaa\xf4\x72\x12\x1b\x3a\x2e\x0d\x24\x2e\x93\x17\x21"
+ "\xb8\x8f\x42\x6c\xb2\x48\x6c\xf4\x1e\x11\x31\x38\x36\xe2\xce\xa3"
+ "\x29\x5e\xe8\xfe\x82\x7f\x9b\x02\x7c\x60\x5c\xe8\xdd\x23\x62\xf0"
+ "\x6f\xe3\x3e\xe0\xe7\x67\x18\x07\x41\x6b\x7f\xa6\xca\x63\xea\x50"
+ "\x05\x9c\x0f\xe5\x66\xdc\x07\xad\xd8\x3e\x68\x85\xfa\x90\xf6\x2c"
+ "\xe0\xf6\x59\xc0\xed\xb3\x80\x5b\x15\xc1\xed\xe9\x6a\x82\x5b\x1d"
+ "\xf4\xab\x09\xb4\xfb\xf2\xa9\x48\x86\xfb\xb5\xef\x47\x5c\xa3\x0f"
+ "\xfa\x59\xc7\x62\x77\xd2\x75\x18\x23\x03\x7e\xe5\xcf\x74\xc7\xe3"
+ "\x53\xde\x50\x85\x56\x60\xfc\x36\xf3\xe1\xb7\xe5\x6c\xd0\x1c\x88"
+ "\xcd\x3b\x80\xdf\xff\xf9\x22\xa7\x5a\xa4\x48\x9a\x0a\xf8\xad\xe3"
+ "\xc3\x6f\xcb\xee\x63\xf0\x9b\x66\xf8\x8d\x34\xc6\x6f\xcb\x68\xf1"
+ "\xf8\x6d\x71\x6a\xc5\x6f\x18\x83\xdf\x68\x13\xfc\xd6\x1a\xe1\x17"
+ "\x9f\xb7\x68\xfc\xb6\xc4\x88\xc3\x6f\x73\x43\x2b\x7e\xc1\x97\x6c"
+ "\x7b\x9b\x1e\xa3\x87\x60\x8c\x00\xbf\xcd\x25\x30\x4e\xbc\xf8\xed"
+ "\xf8\xf8\xe9\xb2\x6d\x8f\x9f\x2e\xd2\x7a\xfc\x74\x0e\xe2\xe3\xa7"
+ "\x2d\x6d\xff\xf8\xe9\xfc\xc4\xc5\x4f\x7b\x48\x38\x7e\xda\xd4\xce"
+ "\x13\x3f\x2a\xc4\xf6\xf8\x51\x7d\xad\xc7\x4f\x7f\x5c\x7c\xfc\xf4"
+ "\x69\xed\x1f\x3f\xbd\x5a\x5c\xfc\xf4\xb1\xc2\xf1\xd3\x07\x08\xc5"
+ "\xef\xd5\x9e\x7a\x4a\x8f\xe7\xcd\xf5\x18\xef\x87\x35\x10\xad\xd7"
+ "\x64\xa8\x0f\xf6\x8c\xf0\xb7\xc2\xf0\x37\xad\xa9\xc0\x57\x9b\xfc"
+ "\xed\x64\xf2\xb7\xab\xc9\xdf\xee\x26\x7f\x7b\x9a\xfc\xed\x65\xf8"
+ "\x1b\xe2\xd5\xe5\x86\x03\x95\x05\x9e\x2d\x45\x25\x43\x03\x98\xfd"
+ "\x3e\xb3\x75\xde\xd8\xf7\xf9\xf0\xf5\x7d\xe3\x2a\x4a\xe3\xec\x80"
+ "\xa8\x16\x19\x85\x62\x92\xd1\x1f\xaf\xc9\x50\x41\xf3\x2a\xb0\x84"
+ "\xf2\x5e\xbe\x54\x73\x0a\xd2\x67\xbb\xb8\x4f\x5e\x06\xf8\x02\x0b"
+ "\x4d\xad\xf0\x7c\x08\xda\x7e\x0c\xc6\x4d\x5d\x1e\xa3\x06\x5d\xfe"
+ "\x25\x55\x23\x43\xe9\xf8\x3c\x9f\x8d\x51\x22\xbd\xfc\x19\xfc\x5c"
+ "\xc2\x41\x9f\xe3\xe2\xae\x96\x3f\xd3\x8b\xda\x19\x87\xd2\x57\xe9"
+ "\x1d\x2b\xea\xcf\xa2\x0c\x99\xde\x3b\x31\x11\x74\x7d\xfd\x21\xb4"
+ "\xbc\x9e\xaa\x4b\xd4\x52\x9a\x8a\x99\x4a\xfc\xdc\xb6\xae\x22\xbe"
+ "\x04\x95\xab\xcf\x22\x7c\xcf\xc3\x58\xad\x50\x1f\x22\xcf\x89\xf1"
+ "\x31\xb0\xad\x5c\xbd\x0f\x95\xc1\xdf\xca\x85\x97\xe1\x3c\x1d\x46"
+ "\x55\xd4\xef\x43\xba\x6c\x17\x57\xbd\x7b\xb7\x06\xca\xbd\x9b\xa6"
+ "\xac\x1e\xfa\x96\xdd\x4d\x8b\xfb\x5a\x0e\xfd\xa0\xdf\xd1\x99\xd3"
+ "\x4d\x4b\xb7\xdb\x50\x49\xe7\x10\x74\x39\x70\xbc\x07\x1c\xef\xd1"
+ "\x4d\x83\xfb\x87\xfb\xc6\xeb\xf7\xb2\xc7\xcf\x85\xbe\xbf\x38\xd5"
+ "\x57\x81\xa8\x95\x0a\x4f\x51\x78\x93\x39\x44\x08\xfa\xc8\xec\xf1"
+ "\xb5\xa4\x5d\x47\x29\xed\x0a\xce\x7f\xa2\xb2\x03\x98\xfe\xba\x4a"
+ "\x68\x57\xe6\x6a\xa1\x5d\xa6\xbf\xde\x52\xda\x8d\x12\x6e\x37\x90"
+ "\xe9\xaf\xbf\x94\x76\x95\x16\xda\x65\xfa\x9b\x22\xa1\x5d\xb9\xa7"
+ "\x85\xb8\xcd\x95\x86\x05\xf9\x7c\x4b\x58\x90\x86\x03\xb9\x85\xf3"
+ "\x0f\x98\x2b\x0d\x03\x0a\xc1\xfc\x37\xc6\x80\xb4\xf8\x2b\x2c\xc6"
+ "\x5f\x5a\xec\x15\x82\xef\x7f\xc4\xb1\x97\x16\xf7\x2e\x82\xf8\xc7"
+ "\xde\x18\xe2\x04\x9c\x1e\x1b\xa1\xdf\xfc\x18\xd2\xf7\x18\x2f\x5b"
+ "\xad\xf7\x47\xaf\x26\xc1\x3d\x2f\x17\xb9\xbd\x9a\xff\x33\xe5\x8f"
+ "\x73\x4e\xb2\x2e\x7b\x92\xf2\x90\x2c\x53\xa6\x97\xed\x4f\xa8\x92"
+ "\x55\x68\x87\x63\xde\xd2\xed\x5a\xaa\x71\x78\x0a\xb6\x1f\x87\x91"
+ "\x68\x58\xe2\x8b\x48\x5b\x8f\xa1\x8c\x64\x7f\x14\xa4\x43\x38\xc7"
+ "\xd1\x30\x79\xd1\xcf\xd4\x57\x89\xa0\xf1\x6f\x02\xbf\xe6\x6a\xf0"
+ "\xbd\xd4\x0d\xbe\xab\x05\x1c\x43\x3b\x1a\xf4\xa9\x5e\xed\x30\x59"
+ "\x4d\x1f\xab\x06\x3f\xaa\xa6\x36\x8f\xa7\xef\xc9\xd4\x0a\x5f\xb4"
+ "\x06\xfe\xbe\x22\x7b\xa8\xa7\x5c\x8d\x64\xdb\xc1\xab\x36\x6e\x78"
+ "\xc8\x5d\x25\x7b\x48\x8d\xfd\x2b\xf8\xe4\xfa\x15\x37\x71\x3e\x3f"
+ "\x36\xe2\x80\x5e\x2d\x5b\x0d\xbe\x19\x1f\xff\x6c\x0c\x92\x7d\x05"
+ "\xed\xc1\xb1\xfe\xc7\x63\x11\xb2\x90\xcf\x51\xe8\xdd\xc3\x6b\xf1"
+ "\xf7\x71\x3b\x38\x4f\xba\x51\x0f\xe3\xec\x3e\x27\x17\xf7\x9b\xca"
+ "\x9e\x50\xa4\x4c\xc0\xf7\x9c\x87\x4a\xc6\xf5\xa3\x1a\xf1\x3d\x04"
+ "\xee\x1d\xbd\xae\xc1\xdf\x74\x3e\x60\x15\x55\x49\xb9\x3b\xd7\x51"
+ "\x19\xce\xfe\xe5\x0d\xb7\x90\x72\x69\x33\xaa\x91\x3d\x74\x0a\xff"
+ "\xf6\x6d\xf7\x70\x55\x83\x7b\x78\x1d\xf4\xe1\x84\xa1\xbf\xf8\xb7"
+ "\x0c\xdb\x71\xfe\x83\xe9\x63\xed\xf1\x44\xe1\x3e\x52\xab\x7b\x75"
+ "\x0f\xf2\xa4\xd4\x78\x2c\x95\xc9\xb7\xa0\x2f\x8e\xd3\xf1\x78\x53"
+ "\xd9\xe1\x85\x0d\x2b\x7c\x7b\xd3\xf9\x40\xd9\xc3\x29\x38\xaf\x44"
+ "\x65\xbb\x90\xfc\x76\x8e\x0b\x3d\x57\x07\x73\x3f\x68\x00\x0d\xd6"
+ "\x42\x37\x64\x0f\xd3\xf9\xc0\xa9\xbe\x32\x71\x7e\x4a\xf6\x30\xed"
+ "\x7f\x95\xbd\xf1\x38\x38\x8e\x86\xdf\x7b\xa9\x46\xf6\xf0\x2e\x92"
+ "\xe3\x70\xf1\xc4\xbf\x07\xc7\xf8\xc1\x6f\x7a\x52\xd9\xce\x2a\x7c"
+ "\x1c\xec\x3f\xc1\xec\xf7\x36\xda\xef\x0d\x7d\xd6\x30\xfb\x6b\x99"
+ "\xfd\x3e\x46\xfb\x7d\x62\x7a\x23\x87\x6b\x32\x47\x27\x7c\x4e\x94"
+ "\xbb\x0b\x3e\x1f\x77\xfc\x3c\x81\x3e\x27\x0f\x17\xc4\x1c\xe7\x5e"
+ "\x2f\x73\xec\x7b\x1b\xf0\x05\xfb\xbd\x8c\xbe\xef\xf5\x55\xbc\x1f"
+ "\x7a\x35\x1f\x8f\xa9\xe3\x70\x95\xc2\x55\x4b\xe7\x89\x64\x0f\x0f"
+ "\xa1\xc7\x02\xee\x9f\xc6\xed\xa9\x64\x8e\x0a\x7c\x8f\x6c\x00\x1d"
+ "\x09\xc7\x78\xe1\xdf\xe4\x1b\x7f\xed\xae\x61\xfe\xcd\x3e\xc3\xa6"
+ "\x34\x67\x47\x17\xf6\xaf\x7d\x42\xd7\x3a\xff\x33\x02\xc9\x82\xaa"
+ "\x91\x7c\xc5\x1c\x24\xc3\x1a\x2a\xf9\x0c\x92\x25\xce\xc1\x79\xe9"
+ "\xd9\xde\x94\xec\x40\xfd\x81\xa5\x1a\xb8\x4e\x94\x5d\x70\x7d\xaf"
+ "\x16\xf7\xf1\x48\x3b\x20\x30\x02\x3f\xab\x69\xda\x35\xcc\x5b\x93"
+ "\x1d\xe6\xd8\xe4\x1e\xe6\x79\x65\x3e\x92\xcd\xae\xe7\x7d\x6e\x33"
+ "\x72\x79\x35\xa5\x4f\x5e\x84\x1c\x83\x66\xca\x29\xfc\xec\xa6\x2c"
+ "\xea\x32\x4a\xba\x8e\x64\xf8\x79\xcd\xb6\xbb\xc8\xbd\x02\x74\x2f"
+ "\x7e\x9e\xe3\x14\xe1\x8d\xf2\x92\x91\xbb\x73\x3d\x72\x75\x76\x70"
+ "\x78\xe8\xf5\xe9\x08\xe9\x1a\xa3\xba\x02\x5e\xf5\xcf\xd4\x7a\xe3"
+ "\x9c\x49\x37\x6a\xd3\x47\x95\x07\x92\x8b\xba\x68\x41\x67\xe3\x67"
+ "\x3a\xef\xdf\x45\x03\xf2\x97\x22\xbf\xd9\x65\x29\x74\x2d\x23\x3c"
+ "\x57\xb4\xa9\xd1\xd7\xbb\xe5\xaf\xbe\xbd\x9b\x1b\x7d\x9f\x34\x3c"
+ "\xef\x99\x75\xdd\x15\xe1\x39\xa4\xd4\xba\xe6\xb1\xf8\x79\x0f\xce"
+ "\xab\xb7\x64\x91\x5a\x47\x78\x5e\xa9\xfe\xaf\xbe\x5e\xd4\x6c\x5f"
+ "\x34\x48\x03\xe3\xdb\xe8\x8b\x12\x82\x91\x2b\xf4\xd9\x75\x40\x2d"
+ "\x92\xed\x08\x47\x8e\xa5\x11\x35\x58\x93\x78\x96\xd6\xee\x46\xcb"
+ "\x02\x51\x6f\x2d\xe8\x76\xfc\x1c\xa1\xb4\x36\x07\xe1\xe7\x41\x79"
+ "\x77\xd1\xf0\xdc\xbb\x68\x24\xe5\x1e\x91\x32\x71\x8e\x37\xd2\xe7"
+ "\x84\x17\x56\xc4\x7f\x82\x56\x34\x51\x97\x2a\xd6\xe8\x11\xce\xa3"
+ "\x62\xfc\x52\x1e\x11\x29\x04\xc3\x8f\xb8\x9d\xf4\x3d\x89\xc4\x63"
+ "\xf8\x11\xe1\xfb\xff\xae\x61\x53\xb4\x3e\xc3\xbc\x75\xee\xd1\x85"
+ "\xe4\xd9\xe0\x6c\x6f\xfd\x47\x71\x99\xf8\x99\xcf\x3f\x6a\xea\x1c"
+ "\xf0\x3c\x27\xbc\xe6\x57\xbf\x2f\x30\x82\xf3\x9c\xad\x85\x89\x57"
+ "\x0b\x89\x17\x7e\xc6\x36\xab\x1e\x51\xb3\xb5\x32\x10\x99\xbe\xdd"
+ "\xe8\x67\x6c\x1a\x15\x62\xd7\xfe\x7a\xa2\xed\x7a\xf2\x7c\x4d\xbf"
+ "\x3c\xaa\xab\x1e\x62\x42\xad\x92\xa1\xfd\x77\x35\x5d\x74\x10\x97"
+ "\x34\xbc\x1e\x78\xa5\x83\x33\x60\xb3\x9b\xbe\xc5\xf3\x11\xd0\xb1"
+ "\x7e\xb3\x2f\xa5\x30\xb5\xa6\x1c\xe9\x7f\xb5\xcb\x7d\xbd\xa1\xed"
+ "\x27\x5b\x5a\x7c\x7b\x1b\xd6\x0e\x1b\xe6\x1a\x50\xeb\x9a\x94\x78"
+ "\xdd\x30\xf6\x43\xda\x2c\xf2\xfc\x06\x30\xe1\x80\x7d\x0f\xf4\xc1"
+ "\x6b\x10\x68\x57\xfc\xbc\x0b\xfa\xe9\xba\xfd\x0a\x72\x2c\x8b\xfa"
+ "\x91\x8e\x8d\x8e\x89\x09\x5e\x43\x8c\xe3\x30\x29\xda\x1b\x95\xef"
+ "\x39\x87\x06\xc5\x3b\x9a\xc5\xa1\x65\xf7\x30\x6f\x43\x2c\xa8\x0d"
+ "\x8e\xf1\x70\x1f\x1a\x72\x43\xf6\xe8\xee\x93\xc0\xb1\x53\x63\xc5"
+ "\xc6\xe4\xd1\x5d\xf7\x3e\x26\xae\xbf\xb3\x98\x3c\x12\x4a\x62\xe2"
+ "\x3c\x42\x5a\x4c\x9c\x87\xdf\xfb\x98\x38\xfe\xce\x62\xf2\x68\x3d"
+ "\x89\x49\xb7\x32\x69\x31\xe9\x56\x2a\x38\x1f\x59\xef\x2f\xfb\xc6"
+ "\xb3\x0a\x7d\xda\x0b\x7c\x7d\x66\xb1\xb7\x3e\xb3\xb8\x40\x3f\xc3"
+ "\x53\x41\x34\x4b\x8f\xbc\xaf\xbd\x40\x33\x2c\xbe\x46\xff\x9f\x3c"
+ "\xd3\x4b\x88\xc0\xeb\xde\xbe\x39\x81\xb5\xc4\x06\x74\x7a\x2c\xd6"
+ "\x0e\x2e\xf9\x8f\x86\x82\x06\x9c\xe1\x89\x9a\x66\x84\xca\x36\xfc"
+ "\x88\x1c\x5d\xaa\xd0\x44\xbd\x9e\xa2\x94\xc9\xd7\xe0\x5e\xfd\x87"
+ "\x5a\x65\xd8\x35\xe4\x9d\xe0\x08\xc7\x76\x1f\xe7\x9d\xb0\x12\xff"
+ "\xdb\xcf\x3b\x61\xdd\xcf\x57\x64\x6e\x57\x71\xbb\x49\x17\x90\x4c"
+ "\xfb\xa7\xe1\x31\x07\x16\x2a\xe1\xfe\x37\x3d\xe5\xc0\x0d\x8d\x2c"
+ "\xed\x16\x52\x50\xb2\x27\x28\x17\x35\x72\x4c\x5f\x8c\xe8\xe7\x2a"
+ "\x31\x6f\xa3\x27\xae\xc9\xdc\xe6\xe0\x9c\xf3\x17\x37\x94\xb2\x4c"
+ "\x7c\xcc\x93\x71\x99\xfb\x7a\xa9\x1d\xf0\x7d\xf3\xc0\x42\x8d\xcc"
+ "\x80\x23\x3c\xf7\x61\x76\x03\x92\xc1\x58\x4e\xb9\xbd\x7b\x98\xbf"
+ "\x26\x27\xcc\xb3\xd9\x23\xcc\x51\xe7\x11\x5d\xa8\xdd\x1f\x18\xc1"
+ "\x87\x2d\xfc\x6c\x17\xdf\x33\x9d\x1b\x90\x6b\x78\x0c\x8b\x31\xfd"
+ "\x72\x82\xad\x72\x4d\x1d\xc2\xeb\x2a\x5c\xe0\x5e\x49\xb5\x44\x75"
+ "\x9d\xb1\x17\xe2\xce\xe0\x0b\xee\xd7\xc2\xf8\xda\xca\xc5\xd7\x6d"
+ "\x06\x5f\x80\xb3\x56\x7c\xb1\xf7\xca\xa6\xb1\x04\x5f\xaa\x56\x7c"
+ "\xd1\xf7\xca\xe5\xbe\x5e\x18\x63\x06\x7c\xe1\xfb\x24\xc1\x57\x8d"
+ "\x20\xbe\xbe\xa9\xe6\xc7\x97\xb6\xaf\x31\xbe\x9c\x53\x08\xbe\xdc"
+ "\x06\x9e\x9c\x09\xf8\x9a\x29\x16\x5f\x6e\x03\x88\x16\x9b\x16\x43"
+ "\xeb\x1a\xd9\x63\xe4\x5d\x1b\xa0\x81\x59\xfd\xeb\x96\x45\x9e\x93"
+ "\x81\xde\xf5\x98\x50\x44\xe5\x80\xe6\x85\x7e\xcc\xee\x87\x1c\x6f"
+ "\x7b\x84\xab\x6e\xe7\x84\xd7\x36\x78\x84\xd7\x91\x7b\xb4\xdb\xe1"
+ "\x93\xf1\xd0\x8f\x78\xd1\xfd\x38\x44\xff\xee\x4f\xa1\x7f\xa0\x66"
+ "\x84\x2a\xf4\x3f\x85\x76\x81\x18\x7b\xbe\xa7\x4b\x41\x77\x33\x13"
+ "\x42\xc1\x2f\xd4\x79\x27\xa0\x67\x00\x7b\x1e\xa7\x41\x2f\x9f\x86"
+ "\x6b\xa9\x62\xca\x7c\x44\x6d\x5a\x56\xf5\x0f\xbd\x5a\xa1\x92\xb9"
+ "\x14\x60\x1c\x02\x96\x15\xc6\x58\x26\xb8\x25\xfb\x34\x99\x09\x51"
+ "\xb8\xad\xa0\x12\xe4\xe2\xfd\x1a\x52\x5c\x91\xfd\xe1\xf0\xb2\x24"
+ "\x84\xd7\x93\x75\x81\xff\xaf\x6c\xda\x14\x58\x05\xdf\xef\x46\xfd"
+ "\x14\xe2\x10\xf3\x1a\xea\x4d\xcd\x08\x71\xc0\x5c\xf7\x49\x72\xae"
+ "\x4c\x0f\xdb\xc8\xdc\x82\x5c\x84\xf7\xa7\x35\x2b\xe8\x79\x08\x7a"
+ "\x38\xa6\xbc\x21\x17\xa5\x2d\x05\x9f\x0b\xff\x27\xf3\x55\x72\x11"
+ "\x3e\x3e\x7d\xb1\x2b\xfd\x2c\x91\xfe\x9e\x36\x17\xe1\xef\xea\x60"
+ "\xfb\xfb\x7a\x27\x94\x91\xe0\x8e\x4e\x4f\x29\xa7\xdb\x38\x3d\xe5"
+ "\xbf\x08\xb7\x81\xf5\xdd\xe9\x29\x5f\xa0\x8d\x4b\x3d\x51\x59\x7d"
+ "\x2e\xec\xff\x1e\x6d\xbc\xe1\x05\xff\x5e\x81\xcf\x5d\x74\x4d\xf6"
+ "\x07\x9f\xd3\x53\xf4\xc8\x65\xe5\x2b\x14\xe0\x93\xaa\xc0\x6b\x94"
+ "\x92\xd1\x43\xd0\xf7\x81\x15\x55\x99\xa0\x8f\xbb\xbb\xe3\x35\xac"
+ "\xd4\x8a\x19\xf5\x7a\x6a\xc6\x75\xfd\x8a\x19\x37\xf0\x6f\xeb\xa8"
+ "\x19\xbf\xe1\xdf\x4e\x4f\xf0\x66\xe6\xaf\xe5\xd2\x73\x6d\xd2\xee"
+ "\xfa\x20\xdc\x57\xfc\xbb\xf8\xf7\x36\x2e\xf6\x65\x7e\x73\x00\xdd"
+ "\x37\xfc\x9b\xb8\x4d\xe3\xdf\xc4\xef\x87\x06\x4d\x8b\x7f\x73\x27"
+ "\xfc\xeb\x06\xf1\xf0\xc4\x71\xc0\xbf\xaf\xa7\x42\xbb\x50\x2b\x42"
+ "\xe5\xf4\x77\xe2\xeb\xf8\xbe\x73\x8e\xf9\x0e\xed\xc5\xf1\x77\x9a"
+ "\xc9\xf1\x74\x1b\xc0\x35\x37\xf1\xf6\xfe\xa1\x4a\x64\x1e\x43\xf7"
+ "\x74\xc2\x3d\xee\xb3\x08\xf7\x90\x98\xd2\x58\x99\x11\xda\x05\xe2"
+ "\xe6\x8a\x79\xaa\x46\xe6\x3e\xb4\xb5\x8d\x9f\x42\xe5\x38\xde\x18"
+ "\x37\x06\x2c\x61\x1c\x19\x30\x44\xf7\x33\x06\x21\x63\xcc\xc0\xff"
+ "\x1d\x99\x76\x92\x0c\xed\x40\x1f\x18\xfe\x73\xc9\xeb\x0f\xfb\xcd"
+ "\x71\xd4\x63\x2a\x8b\x23\x8f\x3b\x9a\x64\x8a\xc2\x38\x52\x86\xad"
+ "\xc2\xed\x9c\x64\xfb\x13\xe2\x80\x31\x76\x9f\x61\xcb\x07\xc7\xa9"
+ "\x7f\x22\x72\x27\xe7\xe3\x91\x43\x9f\x4f\xa2\xd2\x1d\xf7\xd5\x70"
+ "\x1e\xb8\x0f\x19\x7a\x6f\x64\x38\x8f\x8d\xcd\x3e\xd0\xee\x0d\xc4"
+ "\x7c\xe7\x14\x6e\xdb\x30\x06\x10\x33\x64\xf8\x8e\xe1\xf8\x0c\xbd"
+ "\x2f\xf4\x7b\x00\xfd\x1d\x82\xb9\x2b\x3c\xf8\xe9\xe1\x61\x8a\xb9"
+ "\x47\x13\x91\x9c\x82\xf1\x56\x86\xdd\x82\xdf\xe9\x31\x98\xf4\xed"
+ "\x4b\x5d\x33\xfc\x06\xc4\x40\xc6\x6c\x0f\x34\xc2\x04\xd3\xbe\x86"
+ "\xaf\xfd\x38\x4e\xfb\xa1\xd0\x7e\x3c\xb4\x8f\xef\x85\x61\xd8\xb7"
+ "\xf6\xa0\x79\xb0\x7f\x3c\x69\xdf\x80\x5b\x2a\x73\x5c\x6d\x4c\x02"
+ "\x7a\xf8\x9a\xec\xb1\x21\x84\x43\x5d\xe8\xf7\x6f\xd1\xf3\x0c\x64"
+ "\xfa\x02\xbd\xc9\x3c\x03\xe3\x79\x28\x9f\x26\xab\xc9\x1c\x03\xd9"
+ "\x63\xf4\x7b\x5d\xf6\x6f\xab\x92\xe1\x7b\x38\x3b\xc7\xe0\x47\xbc"
+ "\xef\x71\xe5\xd2\x1a\x76\x8e\x81\xac\x07\x9d\xef\x57\xc9\x1e\x0b"
+ "\x68\x94\x21\x19\xec\x57\x90\xed\x2e\x63\x8d\xb7\xb7\xce\xe1\x61"
+ "\xb6\xe3\xf9\x91\x5f\x15\x61\x7f\xfc\x58\xa8\x21\x27\x61\xdd\xf3"
+ "\x3e\xd6\x09\x3d\xaf\xa7\x05\xcf\xeb\xf9\x3b\xf3\xbc\x3d\xbb\x48"
+ "\xf3\xbc\x3d\x15\xf7\x5e\xcb\xff\xde\xfc\xd5\x63\xf3\x89\xd6\xea"
+ "\xb5\x55\x9a\x96\xef\x95\x7b\xef\x63\xf2\x7b\xf3\x57\x3d\x27\x92"
+ "\x98\x78\x0d\x94\x16\x13\xaf\x01\xd2\xfc\xd5\x53\x5a\xd6\x5f\x3d"
+ "\xa5\x15\xf6\x57\x5e\x3a\xcb\xfe\xaa\xcf\x58\xd6\x5f\x3d\xb1\x9b"
+ "\x68\x9c\x27\xd6\x13\x8d\xf3\x44\xa0\x78\x7f\xd5\xfb\xf8\x03\x7f"
+ "\xd5\x96\xfe\xaa\x97\x8a\xe0\xab\x77\xba\x34\x7f\xd5\x3b\x8d\xeb"
+ "\xaf\x7c\xf6\x9a\xfb\xab\xde\x37\x6d\xf7\x57\x4f\x78\x48\xf3\x57"
+ "\x4f\xb8\xdb\xe6\xaf\x9e\x88\xe3\xf7\x57\x8f\x23\x61\x7f\x45\xf6"
+ "\x99\xeb\xe2\x3e\x1e\xac\x2e\xf6\xbe\xd4\xf9\xfd\x95\xf7\x1a\x7e"
+ "\x0d\xec\x9d\x4e\xfc\xd5\x13\xb1\x6d\xef\xaf\x9e\x88\xe5\xf7\x57"
+ "\x7d\x1c\x88\x16\x7d\x22\xde\xdc\x5f\xc1\x77\x78\xfd\x55\x9f\xa1"
+ "\xcc\x77\x62\xb9\xfe\x8a\xb4\x01\x5c\x13\x2c\xec\xaf\xfa\x5c\x27"
+ "\xdc\xd3\xa7\x98\x70\x0f\x89\xa9\xb9\xbf\xea\x93\x63\xdd\x5f\x11"
+ "\x0c\xd1\xfd\x14\xf4\x57\x7d\x2e\x98\xfb\x2b\x2f\x2d\xbf\xbf\x7a"
+ "\xca\xc8\xa7\x3f\x35\x95\xeb\xaf\x9e\xec\x7b\x7f\xf8\x2b\x41\x6c"
+ "\xad\xe1\xfa\xab\x27\xef\x88\xf7\x57\x4f\xf5\x13\xe7\xaf\x30\xe6"
+ "\xf8\xfc\xd5\x53\x71\xa6\x98\xe3\xfa\xab\xa7\xb2\xf8\xfd\xd5\x53"
+ "\x7b\xb9\xfe\x0a\xb7\xcf\xe7\xaf\x9e\x3a\xc7\x69\xdf\xcc\x5f\x3d"
+ "\x75\x93\xeb\xaf\xc8\x71\xac\xbf\xf2\xc9\x26\x1c\xea\xb5\x5b\xbc"
+ "\xbf\xf2\x89\x13\xf6\x57\x3e\x49\x5c\x7f\xe5\x33\x85\xf8\x28\x9f"
+ "\x3d\xc4\x5f\xf9\xcc\x25\xdb\xbd\x76\x19\x6f\x67\xfd\x15\xd9\xce"
+ "\xfa\x2b\x9f\x22\xdb\xfd\x95\x4b\x27\xf4\x57\xae\x16\xfc\x95\xeb"
+ "\xef\xcc\x5f\xfd\x29\x52\x9a\xbf\xfa\x93\x60\xfd\xbb\x07\x5a\x5e"
+ "\xaa\x96\xf7\x29\x25\x5a\xeb\xe9\x26\x69\x5a\xfe\x69\xe1\xf7\xbf"
+ "\x58\xd4\xf2\x83\x4a\x58\x2d\x3f\xa8\x44\x58\xcb\xfb\x9e\xb2\xac"
+ "\xe5\x07\xba\xb2\x5a\xbe\xff\x22\x72\x3f\xed\x3f\x95\xdc\x4f\xfb"
+ "\x7b\x88\xd7\xf2\xcf\xa4\x3f\xd0\xf2\x6d\xa9\xe5\xff\xb4\x8f\xe0"
+ "\xeb\x99\xe9\xd2\xb4\xfc\x33\xa1\x5c\x2d\xef\x17\x67\xae\xe5\x9f"
+ "\x29\xb6\x5d\xcb\x3f\x73\x49\x9a\x96\x7f\x46\x65\x9b\x96\xef\x3f"
+ "\x9a\x5f\xcb\xfb\x96\x0a\x6b\x79\xb2\xcf\x5c\x83\x0d\xb8\xc4\x6a"
+ "\xb0\x01\xfb\x3b\xbf\x96\x1f\x30\x85\x5f\x6f\x0d\x98\x4e\xb4\x7c"
+ "\x7f\xff\xb6\xd7\xf2\xfd\xfd\xf9\xb5\xfc\x80\x32\xa2\x7b\xfa\x8f"
+ "\x35\xd7\xf2\xf0\x1d\x5e\x2d\x3f\x90\xd1\xff\xfd\xfd\xb9\x5a\x9e"
+ "\xb4\x01\x5c\xf3\xb8\xb0\x96\x1f\x78\x84\x70\xcf\x40\x26\x8f\x40"
+ "\x62\x6a\xae\xe5\x07\xce\xb1\xae\xe5\x09\x86\xe8\x7e\x0a\x6a\xf9"
+ "\x81\x7b\xcd\xb5\xbc\x6f\x09\xbf\x96\x1f\xb4\x92\xc5\xd1\xa0\x3e"
+ "\x5c\x2d\x3f\xf0\xe6\xfd\xa1\xe5\x05\xb1\x35\x85\xab\xe5\x9f\x3d"
+ "\x2e\x5e\xcb\x3f\x7b\x47\x9c\x96\xc7\x98\xe3\xd3\xf2\x83\x46\x9b"
+ "\x62\x8e\xab\xe5\x07\xcd\xe2\xd7\xf2\x83\xe2\xb8\x5a\x1e\xb7\xcf"
+ "\xa7\xe5\x07\xed\xe4\xb4\x6f\xa6\xe5\x07\x15\x73\xb5\x3c\x39\x8e"
+ "\xd5\xf2\x7e\x11\x84\x43\x7d\x17\x89\xd7\xf2\x7e\xa3\x85\xb5\xbc"
+ "\x5f\x20\x57\xcb\xfb\x79\x11\xcd\xee\x17\x4b\xb4\xbc\x9f\x1f\xd9"
+ "\xee\x1b\x63\xbc\x9d\xd5\xf2\x64\x3b\xab\xe5\xfd\xd6\xd8\xae\xe5"
+ "\x1f\xee\x84\x5a\xde\xd1\x82\x96\x77\xfc\x9d\x69\xf9\xe7\x06\x4b"
+ "\xd3\xf2\xcf\xf9\x49\xd3\x8d\x2f\x22\x56\x37\xbe\x88\x84\x75\xe3"
+ "\xf3\x0e\x96\x75\xe3\x0b\x01\xac\x6e\x1c\xba\x97\x70\xf7\xd0\x74"
+ "\xc2\xdd\x43\x27\x89\xd7\x8d\x43\x4e\x3e\xd0\x8d\x6d\xa9\x1b\xfd"
+ "\x72\x89\x6e\x1c\x92\x25\x4d\x37\x0e\xc9\xe4\xea\xc6\x17\xf7\x9b"
+ "\xeb\xc6\x21\x77\x6c\xd7\x8d\x43\x7b\x4a\xd3\x8d\x43\x3d\x6d\xd3"
+ "\x8d\x43\x97\xf1\xeb\xc6\xe7\x15\xc2\xba\x91\xec\x33\xbf\xdf\xbf"
+ "\xd0\x93\xbd\xdf\x0f\xbb\xdc\xf9\x75\xe3\xb0\x54\xfe\x7b\xfb\xb0"
+ "\x2c\xa2\x1b\x87\xc6\xb7\xbd\x6e\x1c\x1a\xcf\xaf\x1b\x5f\xe8\x42"
+ "\xee\xb1\x43\x13\xcd\x75\x23\x7c\x87\x57\x37\xbe\x30\x82\xf9\x4e"
+ "\x3c\x57\x37\x92\x36\x80\x6b\xa6\x0a\xeb\xc6\x17\x6e\x12\xee\x79"
+ "\xe1\x38\xe1\x1e\x12\x53\x73\xdd\xf8\xc2\x56\xeb\xba\x91\x60\x88"
+ "\xee\xa7\xa0\x6e\x7c\xe1\x92\xb9\x6e\x7c\x1e\xf1\xeb\xc6\x11\x47"
+ "\x58\x1c\x8d\x98\xce\xd5\x8d\xc3\xfb\xdd\x1f\xba\x51\x10\x5b\xa9"
+ "\x5c\xdd\x38\xbc\x49\xbc\x6e\x1c\x31\x50\x9c\x6e\xc4\x98\xe3\xd3"
+ "\x8d\x23\x96\x99\x62\x8e\xab\x1b\x47\xe4\xf0\xeb\xc6\x11\xfb\xb9"
+ "\xba\x11\xb7\xcf\xa7\x1b\x47\x9c\xe7\xb4\x6f\xa6\x1b\x47\xdc\xe1"
+ "\xea\x46\x72\x1c\xab\x1b\x5f\xcc\x25\x1c\xfa\xdc\x5e\xf1\xba\xf1"
+ "\xc5\x65\xc2\xba\xf1\xc5\x95\x5c\xdd\xf8\x62\x08\xd1\x87\x2f\xee"
+ "\x23\xba\xf1\xc5\x28\xb2\xfd\xb9\x3d\xc6\xdb\x59\xdd\x48\xb6\xb3"
+ "\xba\xf1\xc5\x63\x96\x74\xa3\x65\x5d\x31\x66\x3e\xab\x2b\xc6\xcc"
+ "\x37\xd6\x15\xa7\x38\xba\xe2\xa5\xe9\x96\x75\xc5\x2b\x87\x58\x5d"
+ "\xf1\xb2\x07\xb9\xb6\x47\x35\x91\x6b\x7b\x14\xfd\xae\xc2\xa4\x49"
+ "\x70\xff\x07\x5d\xb1\xff\x5a\x21\xd1\x15\xd7\x34\xb2\xf7\x6f\x30"
+ "\xba\xa2\x1e\x39\xa6\x2d\x64\x74\x45\x38\xd6\x15\xa3\x06\x63\x5d"
+ "\xe1\x94\x07\xba\xd6\xf0\xbe\xb4\x18\xd0\xb9\xb5\xf0\x37\x5c\x37"
+ "\x5f\x40\x1b\xe5\xa0\x45\x33\xf1\xf7\x71\x7d\x32\x68\x0b\x5f\x4f"
+ "\x58\xef\xee\x4f\x50\x75\xa1\xdf\xcb\x09\x9a\x43\x0f\xda\x03\xeb"
+ "\x0e\x5a\x5f\xdc\x66\xf4\xc5\x6d\x36\xe7\x89\x6b\x94\x25\xd6\x52"
+ "\x7a\xdd\x12\xdf\xee\x41\x73\x01\x7a\x77\x30\x7e\xe1\x60\xbc\xce"
+ "\x5b\x5d\x87\xa8\x25\xbe\xdd\xf2\x16\x23\xf7\x0f\xb1\xce\xa8\x43"
+ "\xae\xdd\x56\x3a\x74\xa3\x6e\x47\x75\xed\xd6\x40\xb4\xec\x7e\x7d"
+ "\x09\xd1\xb2\x4b\x3c\x1f\x01\x8d\x34\x60\xfb\x2d\x56\x5f\x7c\x80"
+ "\xb5\xc5\x12\x5f\xef\x86\x25\xbe\xbd\x6f\xdf\x06\x2d\xab\x66\xb4"
+ "\x45\x34\x68\x0b\x3a\xe7\xd9\x98\xb6\xe3\x16\xd6\xb2\x24\xe7\x49"
+ "\xd7\x32\x7b\xc7\x17\xe1\xba\x88\x38\xf7\xf9\x2c\x68\xd9\x15\x65"
+ "\xc8\xf5\x69\x2f\xe0\xfc\xdb\xbe\x5e\x2b\xc6\xa1\xde\x15\x45\x3a"
+ "\x18\xa3\x3b\x74\x1e\x14\xd7\xcc\x2a\x8d\xf8\x11\xe1\x7a\x50\xb4"
+ "\x9e\x95\x51\x85\xd0\xde\x70\xf5\x12\x5f\xd9\xb6\xc5\x46\x5a\xd6"
+ "\x03\x6b\xd9\x17\x2d\x68\xd9\x91\x3a\x69\x5a\x76\xa4\x96\xab\x35"
+ "\x5e\xed\x69\xae\x35\x46\xcd\xb1\x5d\x6b\x8c\x5a\x2b\x4d\x6b\x8c"
+ "\x5a\x63\x9b\xd6\x18\x75\xd9\x54\x6b\xec\xa5\xb5\xc6\x4b\x33\x31"
+ "\x36\xf9\xb5\x06\xd9\x67\x7e\x8f\x78\x65\x2d\x7b\x8f\x78\x25\xb8"
+ "\xf3\x6b\x8d\x97\x1b\xf8\xef\x07\x2f\xeb\x88\xd6\x18\x55\xdb\xf6"
+ "\x5a\x63\x54\x2d\xbf\xd6\x78\x65\x11\xe1\xe5\x51\x75\xe6\x5a\x03"
+ "\xbe\xc3\xab\x35\x5e\xd9\xcd\x7c\xa7\x96\xab\x35\x48\x1b\xc0\x3f"
+ "\xc7\x85\xb5\x86\xff\x2c\xc2\x47\xfe\x03\x09\x1f\x91\x98\x9a\x6b"
+ "\x0d\xff\x2e\xd6\xb5\x06\xc1\x10\xdd\x4f\x41\xad\xe1\x3f\xc9\x5c"
+ "\x6b\xbc\x14\xca\xaf\x35\xc6\xf4\x65\x71\x34\xfa\x24\x57\x6b\xf8"
+ "\xe7\xdc\x1f\x5a\x43\x10\x5b\x0d\x5c\xad\x31\x3a\x52\xbc\xd6\x18"
+ "\xbd\x55\x9c\xd6\xc0\x98\xe3\xd3\x1a\xa3\x2f\x9b\x62\x8e\xab\x35"
+ "\xc6\x38\xf0\x6b\x8d\x31\x3d\xb9\x5a\x03\xb7\xcf\xa7\x35\xc6\x8c"
+ "\xe3\xb4\x6f\xa6\x35\xc6\xcc\xe1\x6a\x0d\x72\x1c\xab\x35\x5e\x55"
+ "\x10\x0e\x7d\xc9\x41\xbc\xd6\x18\x73\x59\x58\x6b\x8c\xb9\xce\xd5"
+ "\x1a\x63\x94\x44\x53\xbc\xea\x49\xb4\xc6\x98\xb3\x64\xfb\x4b\xc8"
+ "\x78\x3b\xab\x35\xc8\x76\x56\x6b\xbc\xea\x6b\x7b\x8e\xea\xc1\x1a"
+ "\xd6\x7b\x9b\xa3\x1a\x7b\x4e\xda\x7d\x7d\xec\xd9\x7b\xff\xbc\xf9"
+ "\xf7\xb6\x86\xf5\xd5\x91\x24\xaf\xf3\x5a\xb4\xb4\xe7\xcd\xaf\x09"
+ "\xd7\x7f\x78\x30\xc7\x5a\x62\x4c\xc6\x79\x91\x98\x8c\xd7\x49\x8b"
+ "\xc9\x78\xc1\xfa\x6f\x0f\xe6\x65\x48\x8d\xc9\x6b\x85\x24\x26\x81"
+ "\x59\xd2\x62\x12\x28\xf8\xfe\x73\xcb\x3e\x38\x38\x91\xf5\xc1\xc1"
+ "\x89\xc2\x3e\x78\xc2\x1c\xcb\x3e\x78\xf2\x09\xd6\x07\x4f\xea\x4b"
+ "\x74\xe7\xa4\xae\x44\x77\x4e\xa4\x6b\x34\x27\x63\x1f\xfc\x51\x6c"
+ "\xca\xa7\x8b\x8b\x64\xd4\xc7\x2f\xb8\xee\xbb\xa5\x91\xa5\x27\x20"
+ "\x85\x16\xfb\x60\x18\xff\xf4\x66\xec\x83\x4f\x20\xfa\xbd\x0c\xb2"
+ "\x89\xa3\xcb\x6b\x71\x2d\xa6\x09\x4a\x72\x3f\x9e\x70\x10\x70\x22"
+ "\xaf\xd0\x68\xe8\x63\xf0\xbe\x2f\x6e\x15\xc9\x32\x9b\x4d\x72\xef"
+ "\x8b\x35\x32\x5c\x43\xda\x38\xf7\xae\xcb\x89\x2e\xc4\xb9\xf7\xa6"
+ "\xdd\xc3\xa6\xb4\xe6\xdf\x07\x5a\xce\xbd\xe7\x37\xc3\xbd\x92\x27"
+ "\xff\x8e\x73\xef\xf9\x4b\x7f\x6f\xb9\xf7\x80\xb1\x04\x7b\x13\x9d"
+ "\xa5\xe5\xde\x27\x3a\x71\xfd\xf0\x1b\xfd\xcc\xfd\xf0\xc4\x45\xb6"
+ "\xfb\xe1\x89\x39\xd2\xfc\xf0\xc4\x6c\xdb\xfc\xf0\xc4\x3b\xfc\x7e"
+ "\x78\xc2\xdc\x64\x41\x3f\x4c\xf6\x99\xfb\x98\xc9\x39\xac\x8f\x99"
+ "\x3c\xa7\xf3\xfb\xe1\xc9\x0a\x7e\xcf\x32\xd9\x99\xf8\xe1\x89\x0d"
+ "\x6d\xef\x87\x27\x36\xf0\xfb\xe1\xc9\x2b\x89\x77\x98\xa8\x31\xf7"
+ "\xc3\xf0\x1d\x5e\x3f\x3c\xf9\x30\xf3\x9d\x06\xae\x1f\x26\x6d\x00"
+ "\x0f\x9d\x11\xf6\xc3\x41\x0b\x08\x2f\x05\x8d\x22\xbc\x44\x62\x6a"
+ "\xee\x87\x83\x3c\xac\xfb\x61\x82\x21\xba\x9f\x82\x7e\x38\x68\x96"
+ "\xb9\x1f\x9e\x10\xc1\xef\x87\x83\x87\xb2\x38\x9a\x72\x8e\xeb\x87"
+ "\x83\x76\xdf\x1f\x7e\x58\x10\x5b\x0a\xae\x1f\x9e\x12\x27\xde\x0f"
+ "\x4f\xd9\x2b\xce\x0f\x63\xcc\xf1\xf9\xe1\x29\x77\x4c\x31\xc7\xf5"
+ "\xc3\xc1\x6e\xfc\x7e\x38\xb8\x1f\xd7\x0f\xe3\xf6\xf9\xfc\x70\xf0"
+ "\x54\x4e\xfb\x66\x7e\x38\x78\x11\xd7\x0f\x93\xe3\x58\x3f\xfc\x86"
+ "\x3b\x73\xbf\xeb\x2a\xde\x0f\x07\xdf\x11\xf6\xc3\xc1\x3a\xae\x1f"
+ "\x0e\xae\x24\xbe\xf7\x0d\x5f\xe2\x87\x83\x6b\xc9\xf6\x09\x8e\xc6"
+ "\xdb\x59\x3f\x4c\xb6\xb3\x7e\xf8\x8d\xe1\x0f\xd6\xb7\xde\x2f\x7e"
+ "\xf8\xcf\x97\xa5\xf9\xe1\x3f\xd7\xde\x7b\x9d\xff\x7b\xf3\x5e\x6f"
+ "\x30\x6b\x29\xa7\x2e\x93\xa6\xf3\xa7\x0a\xd6\xff\x7e\xe0\xbd\xa4"
+ "\xc6\x24\x64\x00\x89\xc9\x34\x67\x69\x31\x99\xe6\x24\xcd\x7b\x85"
+ "\x6b\x58\xef\x15\xae\x11\xf6\x5e\xd3\x2e\x58\xf6\x5e\x33\xfd\x59"
+ "\xef\x15\xb6\x93\x68\x9c\xb0\xb5\x44\xe3\x84\x8d\x13\xef\xbd\xa6"
+ "\x17\x73\xbd\x57\xe8\xc0\x07\xde\xab\xbd\xbc\xd7\x54\x25\xc1\xde"
+ "\xf4\xf5\xd2\xbc\xd7\xf4\x54\xae\xf7\x9a\xbd\xdb\xdc\x7b\x4d\xbf"
+ "\x6e\xbb\xf7\x0a\x73\x93\xe6\xbd\xc2\x5c\x6d\xf3\x5e\x61\x8b\xf8"
+ "\xbd\xd7\x34\x95\xb0\xf7\x22\xfb\xcc\x35\xf3\x4c\x37\x56\x33\xcf"
+ "\xb8\xd0\xf9\xbd\xd7\x8c\x14\x7e\x7d\x3c\x63\x3d\xf1\x5e\x61\x31"
+ "\x6d\xef\xbd\xc2\x62\xf8\xbd\xd7\x0c\x1d\xd1\xa9\x61\xb1\xe6\xde"
+ "\x0b\xbe\xc3\xeb\xbd\x66\x0e\x66\xbe\x13\xc3\xf5\x5e\xa4\x0d\xe0"
+ "\xa1\x49\xc2\xde\x6b\xe6\x55\xc2\x4b\x33\x8f\x10\x5e\x22\x31\x35"
+ "\xf7\x5e\x33\xb3\xac\x7b\x2f\x82\x21\xba\x9f\x82\xde\x6b\xe6\x79"
+ "\x73\xef\x35\xad\x9a\xdf\x7b\x85\x1f\x64\x71\x14\x1e\xcc\xf5\x5e"
+ "\xb3\xfa\xdc\x1f\xde\x4b\x10\x5b\x29\x5c\xef\x35\xeb\xa6\x78\xef"
+ "\x15\xde\x57\x9c\xf7\xc2\x98\xe3\xf3\x5e\xe1\x8b\x4c\x31\xc7\xf5"
+ "\x5e\xe1\xe9\xfc\xde\x2b\x7c\x37\xd7\x7b\xe1\xf6\xf9\xbc\x57\xf8"
+ "\x19\x4e\xfb\x66\xde\x2b\xfc\x3a\xd7\x7b\x91\xe3\x58\xef\x35\x9b"
+ "\xbc\x4f\x48\x36\x6d\xad\x78\xef\x35\x7b\x91\xb0\xf7\x9a\xbd\x8c"
+ "\xeb\xbd\x66\x4f\x24\x1e\x6b\xf6\x2e\xe2\xbd\x66\x47\x90\xed\xd3"
+ "\xd6\x18\x6f\x67\xbd\x17\xd9\xce\x7a\xaf\xd9\x87\x1e\xac\x7d\xbd"
+ "\x5f\xbc\xd7\x9c\x39\xd2\xbc\xd7\x9c\x88\x07\x3a\xbf\xad\x75\xfe"
+ "\xec\x12\xa2\xb5\xde\xbc\x23\x4d\xe7\xbf\xd9\x20\x4d\xe7\xcf\x53"
+ "\xb1\x3a\x7f\x9e\x4a\x58\xe7\xbf\x75\xd2\xb2\xce\x8f\xf2\x65\x75"
+ "\xfe\xdb\xeb\xc9\xfd\xf4\xed\x05\xe4\x7e\xfa\xf6\x40\xf1\x3a\x3f"
+ "\x72\x37\x57\xe7\xcf\xf5\x78\xa0\xf3\xdb\x4b\xe7\xcf\xd9\x43\xb0"
+ "\x17\xb9\x48\x9a\xce\x8f\x8c\xe1\xea\xfc\x77\xd3\xcd\x75\x7e\xe4"
+ "\x39\xdb\x75\x7e\x64\x93\x34\x9d\x1f\xa9\xb1\x4d\xe7\xbf\x3d\x9d"
+ "\x5f\xe7\xbf\x55\x22\xac\xf3\xc9\x3e\x73\x7d\xf6\x4e\x13\xab\xcf"
+ "\xde\x39\xd9\xf9\x75\xfe\x3b\x51\xfc\x5a\xec\x9d\x45\x44\xe7\xbf"
+ "\x1d\xda\xf6\x3a\xff\xed\x50\x7e\x9d\xff\x0e\x33\xff\xeb\xed\x99"
+ "\xe6\x3a\x1f\xbe\xc3\xab\xf3\xa3\x7a\x32\xdf\x09\xe5\xea\x7c\xd2"
+ "\x06\xf0\xd0\x50\x61\x9d\x1f\x75\x86\xf0\x52\xd4\x4e\xc2\x4b\x24"
+ "\xa6\xe6\x3a\x3f\x6a\x99\x75\x9d\x4f\x30\x44\xf7\x53\x50\xe7\x47"
+ "\x1d\x37\xd7\xf9\x6f\x9d\xe0\xd7\xf9\xf3\xb6\xb2\x38\x9a\x37\x82"
+ "\xab\xf3\xa3\xbb\xde\x1f\x3a\x5f\x10\x5b\x51\x5c\x9d\x1f\x7d\x5e"
+ "\xbc\xce\x9f\xe7\x2c\x4e\xe7\x63\xcc\xf1\xe9\xfc\x79\xd3\x4d\x31"
+ "\xc7\xd5\xf9\xf3\xe2\xf8\x75\xfe\xbc\x74\xae\xce\xc7\xed\xf3\xe9"
+ "\xfc\x79\x47\x38\xed\x9b\xe9\xfc\x79\xe7\xb8\x3a\x9f\x1c\xc7\xea"
+ "\xfc\x77\xe3\x09\x87\xbe\xb5\x40\xbc\xce\x7f\x77\xba\xb0\xce\x7f"
+ "\x77\x0e\x57\xe7\xbf\x3b\x84\xe8\xf9\x77\xd3\x88\xce\x7f\x37\x80"
+ "\x6c\x7f\x6b\xbe\xf1\x76\x56\xe7\x93\xed\xac\xce\x7f\x37\xef\xc1"
+ "\xba\xd8\xfb\x45\xe7\x2f\x08\x94\xa6\xf3\x17\x04\x48\xd3\x94\x71"
+ "\x43\x58\x4d\x19\x37\x44\x58\x53\x2e\xec\x69\x59\x53\x2e\x4e\x64"
+ "\x35\x65\xcc\x05\xc2\xdd\x31\xcc\xda\xb4\x98\x95\xe2\x35\xe5\x7b"
+ "\x4d\x5c\x4d\xb9\x30\xfa\x81\xa6\x6c\x2f\x4d\xf9\x2e\x33\x67\xec"
+ "\xbd\x93\xd2\x34\xe5\x7b\x27\xb8\x9a\x32\xee\x92\xb9\xa6\x8c\xe9"
+ "\x67\xbb\xa6\x8c\x99\x24\x4d\x53\xc6\x4c\xb4\x4d\x53\xc6\xec\xe7"
+ "\xd7\x94\x0b\xbd\x84\x35\x25\xd9\x67\xae\x05\x16\x4f\x62\xb5\xc0"
+ "\xe2\x9e\x9d\x5f\x53\x2e\x3a\xc6\x7f\xdf\x5f\x74\x92\x68\xca\x98"
+ "\x7d\x6d\xaf\x29\x63\xf6\xf1\x6b\xca\xc5\xcc\xfa\xd7\x98\x42\x73"
+ "\x4d\x09\xdf\xe1\xd5\x94\x8b\x17\x30\xdf\xd9\xc7\xd5\x94\xa4\x0d"
+ "\xe0\xa1\xf5\xc2\x9a\x72\x09\x33\x9f\x70\xf1\x1d\xc2\x4b\x24\xa6"
+ "\xe6\x9a\x72\x71\x99\x75\x4d\x49\x30\x44\xf7\x53\x50\x53\x2e\xf1"
+ "\x30\xd7\x94\x0b\x3d\xf9\x35\x65\xec\x75\x16\x47\xb1\xe9\x5c\x4d"
+ "\xb9\x64\xd6\xfd\xa1\x29\x05\xb1\x75\x8c\xab\x29\x63\x07\x8a\xd7"
+ "\x94\xb1\x73\xc4\x69\x4a\x8c\x39\x3e\x4d\x19\xbb\xdf\x14\x73\x5c"
+ "\x4d\x19\x7b\x8a\x5f\x53\xc6\x5e\xe2\x6a\x4a\xdc\x3e\x9f\xa6\x8c"
+ "\x73\xe6\xb4\x6f\xa6\x29\xe3\xfa\x71\x35\x25\x39\x8e\xd5\x94\x71"
+ "\xa5\x84\x43\x17\x1c\x17\xaf\x29\xe3\xf6\x0b\x6b\xca\xb8\xc3\x5c"
+ "\x4d\x19\x97\x4a\xb4\x63\x9c\x8a\x68\xca\xb8\x3c\xb2\x7d\x81\xd2"
+ "\x78\x3b\xab\x29\xc9\x76\x56\x53\xc6\xa9\xa5\xaf\x99\x4d\x3a\xc6"
+ "\x6a\x8e\xa4\x63\xc2\x9a\x63\x69\xba\x65\xcd\xb1\x5c\xc1\x6a\x8e"
+ "\x65\x91\xe4\xda\x5e\x16\x48\xae\xed\x65\xb4\x0f\x4b\x2a\x03\xcd"
+ "\xf1\x64\x6c\xca\x81\x1b\x85\xb4\xe6\xf8\x74\xa1\x46\x06\xda\x50"
+ "\xa1\xc7\x9a\x03\x34\x60\xda\x52\xac\x39\x6a\x99\x35\xb3\xf1\x2b"
+ "\xcb\xe2\x8d\x35\xc7\xd2\x4b\xf4\xfa\x59\xac\x3b\x1a\x34\xf4\x71"
+ "\x78\x3f\xdf\x7a\xda\xe2\x85\xcc\x7a\x5a\x68\xdb\x78\x1d\x2d\xbd"
+ "\xb6\xf6\x06\x68\x92\x37\x21\x16\x46\x9a\xe4\xc1\x7a\x5a\x4b\xeb"
+ "\x69\xe3\x27\x49\xd3\xc0\xf1\x13\xb9\x3a\x24\x39\xda\x5c\x87\xc4"
+ "\x1f\xb4\x5d\x87\xc4\x9f\x93\xa6\x43\xe2\xcf\xda\xa6\x43\x96\x0d"
+ "\xe5\xd7\x21\x4b\x33\x31\x6e\xf9\x75\x08\xd9\x67\x7e\xff\x48\x38"
+ "\xc7\xde\x3f\x12\x76\x76\x7e\x1d\x92\x30\x96\xff\x5e\x91\x30\x89"
+ "\xe8\x90\x65\x43\xda\x5e\x87\x2c\x1b\xc2\xaf\x43\x12\x8e\x13\xce"
+ "\x5e\x36\xdc\x5c\x87\xc0\x77\x78\x75\x48\x02\x33\xff\x73\xd9\x10"
+ "\xae\x0e\x21\x6d\x00\x37\xb9\x09\xeb\x90\xe5\xfb\x09\x57\x2d\x4f"
+ "\x22\x5c\x45\x62\x6a\xae\x43\x96\x4f\xb5\xae\x43\x08\x86\xe8\x7e"
+ "\x0a\xea\x90\xe5\xf9\xe6\x3a\x64\x69\x1a\xbf\x0e\x49\x8a\x63\x71"
+ "\x94\xe4\xc1\xd5\x21\xcb\x2f\xdf\x1f\x3a\x44\x10\x5b\x63\xb9\x3a"
+ "\x24\xf1\xb0\x78\x1d\x92\x78\x55\x9c\x0e\xc1\x98\xe3\xd3\x21\x49"
+ "\x43\x4d\x31\xc7\xd5\x21\x49\xc1\xfc\x3a\x24\x29\x9a\xab\x43\x70"
+ "\xfb\x7c\x3a\x24\x29\x87\xd3\xbe\x99\x0e\x49\x3a\xc8\xd5\x21\xe4"
+ "\x38\x56\x87\x24\x87\x30\xf7\xc0\xa1\xe2\x75\x48\xf2\x50\x61\x1d"
+ "\x92\x3c\x8a\xab\x43\x92\x5d\x89\xde\x48\x8e\x22\x3a\x24\xd9\x87"
+ "\x6c\x5f\x3a\xc4\x78\x3b\xab\x43\xc8\x76\x56\x87\x24\xc7\xdb\x98"
+ "\xdb\x3a\x24\x66\x3d\xed\xfe\xbb\xdc\xdc\x96\x21\xaf\xa5\x1d\x10"
+ "\x38\xb7\x35\xb7\x65\xfc\x4c\x94\x27\xb7\x85\xef\xe7\x6c\x6e\xeb"
+ "\x02\xcd\x53\x6c\x6e\x4b\x45\xe7\xb6\x70\x5e\x0b\x3f\x17\x35\xe4"
+ "\xb5\xf4\x7f\x35\x5f\x4b\xbb\x5f\x2f\x3e\xaf\xc5\x3e\x1b\xd5\x2a"
+ "\x48\x5e\xab\xaa\x35\xaf\x85\xef\xe5\xba\x46\xf3\xbc\x16\xbe\x87"
+ "\xb3\x79\xad\x1f\xdb\x38\xaf\x95\xd2\x47\xda\x3d\x3d\xc5\xfb\xde"
+ "\x3f\xbf\xfe\xbd\xad\xa5\x4d\x4e\x23\xf9\x9e\x95\x87\xa5\x3d\xbf"
+ "\x5e\x79\xe8\xde\xc7\xe4\xf7\x36\x9f\x3b\x25\x8a\xc4\x64\x75\xa0"
+ "\xb4\x98\xac\x16\xcc\xff\x3e\x98\xe7\x21\x35\x26\x2b\xb5\x24\x26"
+ "\x6b\x2e\x48\x8b\xc9\x9a\x6a\x69\x39\xf9\xb4\x7a\xd6\x1f\xa7\xd5"
+ "\x1b\xfb\xe3\x92\xb1\xc6\xfe\x78\xed\x7e\xcb\xfe\x78\xc3\x10\xd6"
+ "\x1f\xa7\xe6\x10\xcd\x99\xba\x8c\x68\xce\xd4\x11\xb4\x3f\x1e\x8d"
+ "\x68\x5f\xac\xc5\x1e\x79\x9e\x46\x76\xe0\x9a\x52\xa6\x5d\x45\xbc"
+ "\x71\x85\xb6\x14\x95\xa9\x35\xe8\xfd\xa5\x48\xb1\xfe\x06\x52\x7c"
+ "\x72\x4b\x23\x73\x99\x8f\x1c\xe1\x1e\x04\xe3\x55\x0a\x9a\x25\x1f"
+ "\xc5\x24\x63\xdf\xfc\xb7\x83\x15\x31\x6a\x23\xdf\xbc\xce\x83\xf5"
+ "\xcc\x70\x5c\x8c\x06\x7d\x39\x4f\x29\xc3\xde\xb8\x25\x27\xba\xb0"
+ "\x65\x60\x60\x04\x5d\x77\xca\x38\x6f\x0f\xbf\xed\x1d\xce\xcd\xdb"
+ "\x37\xe7\x44\x1f\x6a\xda\x1f\x38\x97\xae\x77\xd9\x97\xcd\xdd\x8b"
+ "\xa9\x75\xf9\x61\x33\x72\x37\xe4\xed\x3f\xfc\xdd\xe5\xed\x57\x67"
+ "\x12\x7c\xfe\x2d\x49\x5a\xde\xfe\x6f\x89\x5c\xbf\x9c\xbe\xd5\xdc"
+ "\x2f\xff\xed\x92\xed\x7e\x39\xb5\x8b\x34\xbf\x9c\xaa\xb0\xcd\x2f"
+ "\xa7\x46\x9a\xfa\xe5\x3d\xc9\xd8\x2f\xaf\x2d\xc4\x38\xe6\xf7\xcb"
+ "\x64\x9f\xb9\xcf\xd9\xd0\x85\xf5\x39\xeb\xcf\x74\x7e\xbf\xbc\x3e"
+ "\x96\xdf\xd3\xac\x4f\x22\x7e\x39\x75\x6e\xdb\xfb\xe5\xd4\xb9\xfc"
+ "\x7e\x79\xfd\x4d\xe2\x2d\x52\xe7\x1a\xbc\x2f\xeb\x97\xe1\x3b\xbc"
+ "\x7e\x79\x43\x5f\xd3\xef\x10\xbf\x9c\x1a\x45\xfc\xf2\x86\xd1\xc2"
+ "\x7e\x79\x03\xf3\x3c\x71\xc3\x7e\xc2\x5d\x24\xa6\xe6\x7e\x79\xc3"
+ "\x5a\xeb\x7e\x99\x60\x88\xee\xa7\xa0\x5f\xde\x50\x66\xee\x97\xd7"
+ "\xee\xe3\xf7\xcb\x69\xbb\x59\x1c\xa5\x8d\xe3\xfa\xe5\xf7\x3d\xee"
+ "\x0f\xbf\x2c\x88\xad\x58\xae\x5f\x7e\xff\xb2\x78\xbf\x9c\xd6\x53"
+ "\x9c\x5f\xc6\x98\xe3\xf3\xcb\x69\x91\x0c\x7e\xa2\xf8\xfd\x72\xda"
+ "\x4a\x7e\xbf\x9c\xb6\x95\xeb\x97\x71\xfb\x7c\x7e\x39\xed\x24\xa7"
+ "\x7d\x33\xbf\x9c\x76\x89\xeb\x97\xc9\x71\xac\x5f\x4e\x5f\x43\x38"
+ "\x74\xed\x54\xf1\x7e\x39\x3d\x52\xd8\x2f\xa7\x2f\xe0\xfa\xe5\x74"
+ "\x7f\xe2\x8b\xd3\x73\x89\x5f\x4e\x0f\x21\xdb\xd7\x86\x18\x6f\x67"
+ "\xfd\x32\xd9\xce\xfa\xe5\xf4\x3d\x36\xfa\xe5\xa2\x36\xf2\xcb\x51"
+ "\xf7\x97\x5f\xd6\x9d\xe8\x1c\x7e\x79\x63\xb0\x34\xbf\xbc\x71\x8a"
+ "\x0d\x3e\xe0\x90\x15\x1f\x30\xf7\x81\x0f\x30\xd6\x59\xe9\xc7\x88"
+ "\xce\xca\xbc\x2c\xcd\x07\x64\xda\xb2\xfe\xb9\x5d\x63\xf2\xfb\x8a"
+ "\xc7\x46\xa6\xc6\xfb\xa6\x38\x69\xf1\xd8\x14\xfb\xc0\x2b\xb7\x75"
+ "\x4c\xb2\x98\xb5\xcf\xd9\x5d\xa5\xc5\x24\xdb\x51\x9a\x57\xce\x1b"
+ "\xc9\x7a\xe5\xbc\x91\xc6\x5e\xf9\xbf\x9c\x67\xc9\xd9\xe7\x2d\x7b"
+ "\xe5\xad\x6b\x58\xaf\xbc\xe5\x32\xd1\x9b\x5b\x4e\x11\xbd\xb9\x85"
+ "\x9e\x53\x92\x78\x98\x78\xe5\xbb\xd8\x2b\x5f\x01\xaf\xfc\x76\x84"
+ "\x4c\xcb\xbc\xd3\x01\xcf\x49\x2b\x03\xbf\x8b\xfd\x71\x45\x3c\xfc"
+ "\x3f\x56\x8d\xde\x5f\x8c\x14\x1b\xc0\xe7\xee\x85\x7b\xe3\xde\xa5"
+ "\x6a\x59\xea\x3c\xb8\xaf\x54\xed\x47\x2e\x51\xe0\xa1\x6f\x61\x0f"
+ "\x7d\x02\xfc\xf1\x5a\xc6\x43\x6f\x71\xa8\x88\x35\xf6\xd0\x39\xd3"
+ "\x69\x0f\xad\x26\xf3\xdd\x2a\x62\xc1\x43\xc3\xef\xe1\x77\x44\x18"
+ "\x7b\xe8\x26\xf0\xc8\xcd\xe0\x91\x33\xaf\x99\xf8\xe9\xb7\xcd\xfd"
+ "\x74\x93\x47\x74\x91\x66\x60\x60\x14\xf6\xd3\x77\x77\x3f\xf0\xd3"
+ "\xe6\x7e\x7a\x13\xc3\xf3\x9b\xcb\xa4\xf9\xe9\xcd\xa5\x5c\x3f\x9d"
+ "\x77\xd5\xdc\x4f\x6f\x19\x6c\xbb\x9f\xde\x32\x55\x9a\x9f\xde\x12"
+ "\x62\x9b\x9f\xde\x72\xd8\xd4\x4f\x7f\x4c\x3f\x7f\xce\xae\xc6\x58"
+ "\xe7\xf7\xd3\x64\x9f\xb9\x0f\xda\x3a\x95\xf5\x41\x5b\xfb\x74\x7e"
+ "\x3f\x9d\x7b\x82\xdf\xf3\xe4\x96\x11\x3f\xbd\xe5\x50\xdb\xfb\xe9"
+ "\x2d\x87\xf8\xfd\xf4\x56\xe6\xfd\x4f\x5b\x0e\x99\xfb\x69\xf8\x0e"
+ "\xaf\x9f\xde\x1a\x67\xfa\x1d\xe2\xa7\xb7\x14\x11\x3f\xbd\x35\x4b"
+ "\xd8\x4f\x6f\x1b\x48\xf8\x6d\xab\x8e\xf0\x1b\x89\xa9\xb9\x9f\xde"
+ "\x7a\xce\xba\x9f\x26\x18\xa2\xfb\x29\xe8\xa7\xb7\x3d\x6e\xee\xa7"
+ "\xb3\xab\xf8\xfd\xf4\x87\x77\x58\x1c\x7d\x98\xc3\xf5\xd3\xdb\x22"
+ "\xef\x0f\x3f\x2d\x88\xad\x13\x5c\x3f\xfd\xe1\x50\xf1\x7e\xfa\xc3"
+ "\x68\x71\x7e\x1a\x63\x8e\xcf\x4f\x7f\xc8\xd4\x3f\x23\x78\x31\xf7"
+ "\xd3\x1f\x9e\xe1\xf7\xd3\x1f\x5e\xe5\xfa\x69\xdc\x3e\x9f\x9f\xce"
+ "\xf3\xe0\xb4\x6f\xe6\xa7\xf3\x06\x73\xfd\x34\x39\x8e\xf5\xd3\x79"
+ "\x67\x09\x87\x66\xaf\x14\xef\xa7\xf3\x0e\x0b\xfb\xe9\xbc\x62\xae"
+ "\x9f\xce\xcb\x24\xbe\x39\xaf\x8e\xf8\xe9\xbc\x5d\x64\x7b\x76\x8a"
+ "\xf1\x76\xd6\x4f\x93\xed\xac\x9f\xce\xd3\xd8\xfe\xfc\xd9\xae\xfa"
+ "\x55\x73\x3b\x7e\x6d\x45\x5b\xd5\xaf\x32\x3c\x83\xbe\xd7\x6b\x2b"
+ "\xb6\xef\x96\xe6\xa9\xb7\xef\x7a\xe0\xdf\xda\xd2\x2b\xe4\x3b\x11"
+ "\x9d\x55\x30\x54\x9a\x57\x28\x18\xf2\xc0\xbf\xb5\x75\x4c\xb6\xd7"
+ "\x93\x98\xec\x3c\x25\x2d\x26\x3b\x4b\xa4\xf9\xb7\xbd\x55\xac\x7f"
+ "\xdb\x5b\x25\xfc\xac\xf3\xa3\xad\x96\xfd\xdb\xdf\xbd\x59\xff\xb6"
+ "\x7b\x25\xd1\x37\xbb\x23\x89\xbe\xd9\xdd\xb7\xed\x9e\x75\xee\xca"
+ "\xe7\x3e\xeb\xfc\x3f\x87\x07\xcf\x3a\x3b\xc2\x9b\x15\x24\x12\x7c"
+ "\xee\x8a\x96\xe6\xcd\x76\x45\x71\xbd\xd9\x27\x6b\xcd\xbd\xd9\xae"
+ "\x32\xdb\xbd\xd9\xae\x9b\xd2\xbc\xd9\x2e\xb5\x6d\xde\x6c\x77\x30"
+ "\xff\xb3\xce\x8f\xf2\x84\x9f\x75\x92\x7d\xe6\x9a\xfa\xe3\x9b\xac"
+ "\xa6\xfe\xb8\xb8\xf3\x7b\xb3\x8f\x23\xf8\xf5\xf3\xc7\xd1\xc4\x9b"
+ "\xed\x9e\xd2\xf6\xde\x6c\xf7\x14\x7e\x6f\xf6\xf1\x05\xa2\x63\x77"
+ "\x4f\x31\xf7\x66\xf0\x1d\x5e\x6f\xf6\x77\x37\xd3\xef\x10\x6f\xb6"
+ "\x3b\x84\x78\xb3\xbf\x0f\x14\xf6\x66\x7f\x3f\x45\xb8\xeb\xef\x5b"
+ "\x09\x77\x91\x98\x9a\x7b\xb3\xbf\x2f\xb2\xee\xcd\x08\x86\xe8\x7e"
+ "\x0a\x7a\xb3\xbf\x1f\x31\xf7\x66\x1f\xe5\xf2\x7b\xb3\xbd\x59\x2c"
+ "\x8e\xf6\x0e\xe6\x7a\xb3\x3d\x0e\xf7\x87\x37\x13\xc4\x56\x04\xd7"
+ "\x9b\xed\x39\x23\xde\x9b\xed\xed\x22\xce\x9b\x61\xcc\xf1\x79\xb3"
+ "\xbd\xc1\x0c\x7e\x42\xf8\xbd\xd9\xde\x05\xfc\xde\x6c\xef\x5a\xae"
+ "\x37\xc3\xed\xf3\x79\xb3\xbd\x07\x39\xed\x9b\x79\xb3\xbd\x65\x5c"
+ "\x6f\x46\x8e\x63\xbd\xd9\x27\x0c\x87\x7e\x34\x5a\xbc\x37\xfb\x24"
+ "\x58\xd8\x9b\x7d\x32\x9d\xeb\xcd\x3e\x19\x40\x3c\xd8\x27\x6b\x88"
+ "\x37\xfb\xc4\x9f\x6c\xff\xc8\xdf\x78\x3b\xeb\xcd\xc8\x76\xd6\x9b"
+ "\x7d\x92\x6d\xbb\x37\xb3\xbd\xbe\xd5\xbd\x9f\x1b\xec\xfa\x3b\x9b"
+ "\x1b\xbc\x6f\x94\x34\x5f\xb6\x6f\xe4\x03\x1f\xd0\xd6\x3e\xe0\x13"
+ "\xa6\xbe\xd0\xfe\x33\xd2\x7c\xc0\xfe\x4a\x69\x3e\xe0\xb0\x51\x6d"
+ "\xab\xc3\x2a\x61\x1f\x70\x60\xa7\x65\x1f\xf0\x2f\xa3\xda\x56\x07"
+ "\x99\xda\x56\x07\x99\xda\x56\x07\x07\xb6\x9d\x0f\x28\xdc\xcd\xf5"
+ "\x01\x9f\x76\x7d\xe0\x03\x3a\xc2\x07\xec\x5b\x43\xf0\x59\x28\xb1"
+ "\xfe\x55\xa1\x49\xfd\xab\xcf\x78\xea\x5f\x15\x8a\xa8\x7f\x55\x28"
+ "\xb1\xfe\x55\xa1\x8d\xf5\xaf\x0e\x9a\xd5\xbf\x22\x3e\xe0\xc0\x2e"
+ "\x61\x1f\x40\xf6\x99\xeb\xb7\x7f\x1a\xd5\xbf\xfa\xe7\x7d\x50\xff"
+ "\xea\x9f\x02\x35\x8a\xfe\xc9\xd4\xbf\x3a\xd8\x0e\xf5\xaf\x0e\x0a"
+ "\xd4\xbf\xfa\x27\x53\xff\xea\x60\xa8\xb9\x0f\x38\x28\x50\xff\xea"
+ "\x5f\x3d\x4d\xbf\x43\x7c\xc0\x41\xa6\xfe\xd5\xbf\x2c\xd4\xbf\xfa"
+ "\x17\x53\xff\xea\x5f\x4c\xfd\x2b\x12\x53\x73\x1f\xf0\x2f\x1b\xea"
+ "\x5f\x1d\x64\xea\x5f\x1d\xb4\x50\xff\xea\x5f\x3c\xf5\xaf\x0e\x14"
+ "\xf0\xfb\x80\xc3\x46\xf5\xaf\x0e\x9b\xd4\xbf\x3a\x74\x9f\xd4\xbf"
+ "\x12\xc4\x96\x49\xfd\xab\x43\x12\xea\x5f\x1d\x16\x59\xff\xea\xa0"
+ "\x40\xfd\xab\xc3\x4c\xfd\xab\x83\x02\xf5\xaf\x0e\x0b\xd4\xbf\x3a"
+ "\x6c\x52\xff\xea\xa0\x40\xfd\xab\xc3\x47\x38\xed\x9b\xf9\x80\xc3"
+ "\x26\xf5\xaf\x0e\x9a\xd4\xbf\xfa\x8c\xa9\x7f\x75\x20\x50\xbc\x0f"
+ "\xf8\xcc\x42\xfd\xab\xcf\x4c\xea\x5f\x7d\xc6\xac\x05\xfc\x8c\xa9"
+ "\x7f\xf5\x19\x53\xff\xea\x40\x80\xf1\x76\xd6\x07\x90\xed\xac\x0f"
+ "\xf8\xec\x41\xfd\xab\xfb\xa6\xfe\x55\x91\xc4\xfa\x57\x45\x12\xeb"
+ "\x5f\x29\x8d\xea\x5f\x29\x2d\xd4\xbf\x3a\x62\xa5\xfe\x55\xb1\x51"
+ "\xfd\xab\xa3\xcc\x7c\xf5\xa3\x4c\xfd\xab\xa3\x12\xea\x5f\x7d\x6e"
+ "\x52\xff\xea\xc8\x83\xfa\x57\xed\xa6\x29\x3f\x63\xea\x5f\x7d\x2e"
+ "\xb1\xfe\xd5\xe7\x26\xf5\xaf\x94\x3c\xf5\xaf\x8e\x8a\xa8\x7f\x75"
+ "\x54\x62\xfd\xab\xa3\x36\xd6\xbf\x3a\x2a\x50\xff\xea\x88\x85\xfa"
+ "\x57\x47\x04\xea\x5f\x15\x1b\xd5\xbf\x2a\xbe\x0f\xea\x5f\x1d\x13"
+ "\xa8\x51\x74\x8c\xa9\x7f\x75\xb4\x1d\xea\x5f\x1d\x15\xa8\x7f\x55"
+ "\xcc\xd4\xbf\x3a\xca\x53\xff\xea\xa8\x40\xfd\xab\x62\xa6\xfe\xd5"
+ "\x51\x93\xfa\x57\x47\x99\xfa\x57\xc5\x16\xea\x5f\x7d\xc1\xd4\xbf"
+ "\x2a\x66\xea\x5f\x1d\x11\xa8\x7f\x55\x6c\x43\xfd\xab\xa3\x4c\xfd"
+ "\xab\xa3\x16\xea\x5f\x7d\xc1\x53\xff\xea\x88\x40\xfd\xab\x2f\x8d"
+ "\xea\x5f\x7d\x69\x52\xff\xea\x8b\xfb\xa4\xfe\x95\x20\xb6\x4c\xea"
+ "\x5f\x7d\x29\xa1\xfe\xd5\x97\x22\xeb\x5f\x1d\x15\xa8\x7f\xf5\xe5"
+ "\x7e\x53\xcc\x71\x35\xe5\x97\x02\xf5\xaf\xbe\x34\xa9\x7f\x75\x54"
+ "\xa0\xfe\x95\xd2\x99\xd3\xbe\x99\xa6\x54\x9a\xd4\xbf\x3a\x6a\x52"
+ "\xff\x4a\xc9\xd4\xbf\x2a\x92\x50\xff\x4a\x69\xa1\xfe\x95\xd2\xa4"
+ "\xfe\x95\x92\xa9\x7f\xa5\x64\xea\x5f\x29\x99\xfa\x57\x45\x4a\xe3"
+ "\xed\xac\xa6\x24\xdb\x59\x4d\xa9\xb4\x58\xff\x8a\xbb\x8e\xa6\x4d"
+ "\x72\xcb\x1d\xb4\x8e\xa6\xad\x72\xcb\x9d\x65\x1d\xcd\x7f\xb6\x4a"
+ "\xd3\x93\xff\xc9\x7d\x30\xe7\xa7\x2d\xf3\xca\xc7\x15\x44\x63\x9d"
+ "\xe8\x27\x2d\xaf\x7c\xc2\x57\x9a\xbe\x2f\x0d\x61\xf5\x7d\x69\x88"
+ "\xf0\xfa\x80\x13\x4d\x96\xf5\xfd\xa9\x3c\x56\xdf\x7f\xad\x23\xf7"
+ "\xd1\xaf\x2f\x91\xfb\xe8\xd7\x3b\xa5\xac\x0f\xd8\x70\x0b\x29\xde"
+ "\x37\x5d\x1f\x70\xb6\x98\xac\x0f\x58\x6c\xba\x3e\xe0\xeb\x9e\xdc"
+ "\xf5\x01\x27\x97\x09\xad\x0f\xc0\x79\xe6\x96\xfd\x81\x73\xf1\xda"
+ "\x00\xde\x75\x01\x61\x6d\xbf\x2e\x00\x7b\x83\x0f\x01\xb3\xd8\x1f"
+ "\x60\x9e\xf9\x7d\xf9\x83\xff\xa8\x08\x76\xff\x7b\x59\x9a\x3f\xf8"
+ "\x6f\x2d\xd7\x1f\x94\x39\x98\xfb\x83\xaf\x03\x6d\xf7\x07\x5f\x2f"
+ "\x90\xe6\x0f\xbe\x9e\x6f\x9b\x3f\xf8\xba\x8c\x7f\x5d\xc0\x09\xad"
+ "\xf0\xba\x00\xb2\xcf\x5c\xd7\x9d\x5a\xc0\xea\xba\x53\x23\x3a\xbf"
+ "\x3f\x28\xa9\xe6\xd7\x70\x25\x97\x89\x3f\xf8\xba\xb4\xed\xfd\xc1"
+ "\xd7\xa5\xfc\xfe\xe0\x14\x93\xff\xfb\xba\xd4\x3c\xe7\x0c\xdf\xe1"
+ "\xf5\x07\xa7\xd2\x4d\xbf\x43\xfc\xc1\xd7\x95\xc4\x1f\x9c\xda\x2b"
+ "\xec\x0f\x4e\x8f\x23\xbc\x76\xda\x83\xf0\x1a\x89\xa9\xb9\x3f\x38"
+ "\x75\xdd\xba\x3f\x20\x18\xa2\xfb\x29\xe8\x0f\x4e\x0f\x35\xf7\x07"
+ "\x27\x34\xfc\xfe\xa0\xd4\x99\xc5\xd1\x37\xfb\xb9\xfe\xe0\x74\xd2"
+ "\xfd\xe1\x0f\x04\xb1\x55\xcd\xf5\x07\xdf\x4c\x12\xef\x0f\xbe\x59"
+ "\x29\xce\x1f\x60\xcc\xf1\xf9\x83\x6f\xca\x18\xfc\x54\xf2\xfb\x83"
+ "\x6f\xae\xf2\xfb\x83\x52\x07\xae\x3f\xc0\xed\xf3\xf9\x83\xd2\x81"
+ "\x9c\xf6\xcd\xfc\x41\x69\x20\xd7\x1f\x90\xe3\x58\x7f\x50\xca\xe8"
+ "\xf1\x13\x3b\xc5\xfb\x83\xd2\x32\x61\x7f\x50\x7a\x8e\xeb\x0f\x4a"
+ "\xf7\x10\x1f\x50\x86\x88\x3f\x28\x3d\x46\xb6\x9f\x28\x30\xde\xce"
+ "\xfa\x03\xb2\x9d\xf5\x07\x65\xae\xb6\xcf\x3d\xb1\x3d\xe7\x7c\xef"
+ "\xe7\x9e\x38\xfe\xce\xe6\x9e\x94\x1f\x91\xe6\x0f\xca\x8b\xa4\xe9"
+ "\xd1\xef\x95\xac\x1e\xfd\x5e\x29\x3c\xcf\xa1\x62\xbd\x65\x3d\x7a"
+ "\xd6\x91\xd5\xa3\xdf\x46\x13\xde\xfe\x76\x12\xe1\xed\x6f\x9d\x6d"
+ "\x9d\xe7\xb0\xe1\x2e\xa3\x41\x0d\xf3\x1c\x96\x32\xf3\x1c\x40\x87"
+ "\x12\xdd\x79\x66\x2d\x77\x9e\x43\xc5\x4d\xa1\x79\x0e\xbc\xf3\x1b"
+ "\x4c\xb4\xa6\x41\x97\xda\x33\xbf\xe1\xf7\xad\x35\xcb\x7c\x88\xd6"
+ "\x3c\x13\x2c\x4d\x6b\x9e\x99\xc2\xd5\x9a\x3f\x2c\x30\xd7\x9a\x67"
+ "\x0e\xdb\xae\x35\xcf\x9c\x97\xa6\x35\xcf\x54\xd9\xa6\x35\xbf\x1d"
+ "\xc1\x3f\xbf\xa1\x22\x4d\x78\x7e\x03\xd9\x67\xae\x11\xbe\x3b\xcf"
+ "\x6a\x84\xef\x76\x77\x7e\xad\xf9\x5d\x00\xbf\x1e\xf8\x2e\x98\x68"
+ "\xcd\x6f\x87\xb7\xbd\xd6\xfc\x76\x38\xbf\xd6\xfc\x8e\xa9\x7f\xf3"
+ "\xed\x70\x73\xad\x09\xdf\xe1\xd5\x9a\xdf\x35\x99\x7e\x87\x68\xcd"
+ "\x6f\x47\x12\xad\x79\xd6\x43\x58\x6b\x9e\x3d\x48\x38\xeb\xec\x4a"
+ "\xc2\x59\x24\xa6\xe6\x5a\xf3\xec\x74\xeb\x5a\x93\x60\x88\xee\xa7"
+ "\xa0\xd6\x3c\xbb\xd3\x5c\x6b\x56\xa4\xf2\x6b\xcd\xef\x97\xb1\x38"
+ "\xfa\xbe\x27\x57\x6b\x9e\xbd\x7a\x7f\x68\x4d\x41\x6c\x05\x70\xb5"
+ "\xe6\xb9\x23\xe2\xb5\xe6\xb9\xeb\xe2\xb4\x26\xc6\x1c\x9f\xd6\xfc"
+ "\x9e\x79\xfe\x41\xf0\x62\xae\x35\xbf\x9f\xca\xaf\x35\xbf\x5f\xc0"
+ "\xd5\x9a\xb8\x7d\x3e\xad\xf9\xfd\x56\x4e\xfb\x66\x5a\xf3\xfb\xc3"
+ "\x5c\xad\x49\x8e\x63\xb5\xe6\x0f\xa1\xcc\x3d\x6f\xb0\x78\xad\xf9"
+ "\xc3\x08\x61\xad\xf9\xc3\x68\xae\xd6\xfc\xc1\x9d\x68\xca\x1f\xe6"
+ "\x13\xad\xf9\x83\x2f\xd9\x5e\xe1\x67\xbc\x9d\xd5\x9a\x64\x3b\xab"
+ "\x35\x7f\x48\xb4\xa4\x35\xa9\x6c\x17\xdf\x4c\x99\xbe\x10\x3e\x45"
+ "\xd0\xcf\x9e\x70\x7f\x53\xc2\xff\x4b\xe0\x3e\xe5\x06\xff\x17\x9c"
+ "\xaf\xa9\xf6\x70\xf1\xd5\x83\x2e\xd1\xc3\xef\x54\xa8\x7f\x53\x2a"
+ "\x7b\x69\x71\x5f\xb5\xe4\xfe\xe2\xe2\xeb\xa2\x7d\x38\x40\x4f\x45"
+ "\x21\xca\x1d\xfe\x1f\x0f\xdb\xe0\xf8\x6e\x70\x3f\xf4\x5e\x8a\xba"
+ "\xdd\x90\x55\x79\x19\x8e\x83\x3e\x77\xab\x91\xfd\x70\x1e\xb7\xd1"
+ "\xb8\xa1\xca\x17\xce\x27\x55\xb0\xaf\xd0\x56\xd0\xde\xde\x28\x49"
+ "\x4b\xfd\x4f\xb9\xf0\x16\xaa\x95\x55\x2d\x72\xa9\x7f\x38\x00\x78"
+ "\x08\x61\x7d\x58\xd8\x4b\xad\xc0\x6d\x2a\x17\x36\xe3\x7d\x21\x78"
+ "\x9f\x0e\xfa\x98\xbc\x00\xc9\x32\x6e\x3d\xec\x08\x9a\xab\xcb\x8a"
+ "\x06\xaa\xee\x3d\x2d\xf4\x19\xee\xaf\x5f\xf6\xae\x52\x7c\xba\xad"
+ "\x8a\xbe\xf7\x94\x37\xe8\xe8\x36\xbc\x17\xe2\xfe\x54\xc5\x6d\x87"
+ "\xe3\xf9\xfa\xb0\xf6\x00\x1a\xd0\xa5\x1f\xa5\x12\x77\xbf\xab\x12"
+ "\x5c\xff\xe6\xb2\xb2\x37\x52\x3e\x03\x63\xe7\x8d\x64\x7c\xfb\xc5"
+ "\xfd\xce\x79\x3f\xa1\xdf\x79\xd2\x15\x39\x7e\xd0\x83\x6a\x58\xb1"
+ "\x15\xc9\x36\xea\x1f\x76\xfc\x0a\x38\x71\xc7\x66\x4a\xdd\xb8\xe1"
+ "\x7c\x9e\xca\x81\x4a\xc4\x63\xbe\x1a\xf6\x6f\xec\x41\xa9\x6f\xaf"
+ "\xc2\xb8\x39\x7f\xe8\x38\xdc\xdb\x4d\x63\xb1\x78\xee\x82\x39\xde"
+ "\xb1\xd1\x0b\x22\xdf\x8b\x8b\xf5\xee\x3b\xf7\x11\x14\xf2\xde\x7b"
+ "\xde\x0b\xe6\x2c\x5c\xe6\x6d\xbc\xe7\x45\xef\xb9\xd1\x4b\xe6\xbc"
+ "\x39\x3f\x72\xe0\x82\xb7\x62\x1e\x81\x3e\x21\xa3\x7e\xb8\xe3\xbe"
+ "\xe8\x37\x9c\x57\x6e\xdf\x84\xd0\x07\xdd\x91\x02\xf7\xab\x71\xc3"
+ "\x8f\x3e\x2a\xc5\xd3\xc7\xf0\xef\x65\x6c\xa6\x1a\x64\x70\xcc\x0a"
+ "\xe0\xb4\x8d\xc9\x0f\xe3\x63\xfd\x76\x40\xbf\xb6\x43\xbf\xa1\x8f"
+ "\xd0\xe7\x1f\xa7\x18\xfa\x6c\xc0\xc4\x0a\x8c\x89\xe4\x5b\x80\xc1"
+ "\x1f\x17\xb9\x68\x1e\x1e\x4f\x51\xa1\xf8\xfc\x1a\xe0\x5a\x71\xb8"
+ "\x22\xfb\xa9\x2b\xed\x19\x72\x5c\x7c\xe1\xbb\x69\x06\x8c\xe9\xb3"
+ "\xa7\xa5\x50\x9b\xbb\xa9\x41\x57\x3a\x34\x52\x51\x2f\x03\x36\xf1"
+ "\xf7\xcf\x0f\x42\x28\x85\x6a\x0c\xa5\xdf\x5d\x41\x35\x02\x86\x09"
+ "\x4e\x61\xdf\x4f\xfb\x6e\xcb\xd0\x2b\xd0\x46\xa5\x0a\xed\xab\xc5"
+ "\x6d\xa8\x60\x1b\x1e\x73\x7d\x41\x6c\xcc\x54\x5f\x94\xf2\x74\x0a"
+ "\x4a\x69\xc4\xdf\xd9\x35\x2c\xc0\x25\x16\x39\x04\xc5\x53\x3f\x03"
+ "\xef\x38\x50\x7d\x62\x63\xa8\xdd\xc3\x02\x54\xb2\x1f\x0f\xe9\x73"
+ "\xa6\xa5\xc0\xf9\xd4\x37\x6e\xf8\xc9\x53\xe5\x30\x62\x2e\x6e\x67"
+ "\xe3\x66\x7a\xec\xeb\xf1\xb9\xc3\xf8\x80\xf7\xa1\x94\xd4\x2a\xe6"
+ "\x1a\xca\x7c\x46\xa3\xcf\x4c\x2c\xa8\x50\xdc\x45\x41\x5a\xaa\x85"
+ "\xca\x7a\x46\x53\xde\xd0\x00\x9c\x16\xf3\x16\xf5\xc8\xf9\x33\x2e"
+ "\xda\xe8\xc8\x1d\xdd\xe1\x5a\xcc\x4a\x2c\xa0\xb2\xc6\xb9\x4e\xed"
+ "\x87\x5c\xa1\xed\x58\xc3\x78\xc2\x58\x2a\xc4\xe1\xe8\xa7\x78\x7c"
+ "\x4e\x18\x0f\xd0\x1f\x06\x0f\x3f\x9d\x38\x1e\x6b\x8e\x87\xd6\x6b"
+ "\x73\xf3\x78\x3f\x2d\x15\x3a\xbe\x25\x7b\x7c\x14\xe5\x3e\x3e\x24"
+ "\xf9\x32\x7a\x08\x8f\x6d\x39\x78\x81\x8c\xa5\xc8\x33\x3d\x1c\x79"
+ "\xcf\x5e\xe6\x8a\xd4\x39\xe3\xa7\xb8\xac\x4c\x71\x80\x31\x91\x01"
+ "\xbf\xf8\x01\x67\xfa\xb5\xf4\x98\x96\x92\x18\x89\x64\xfb\x6b\x0a"
+ "\x65\x58\x3f\xe3\x39\x2a\x57\x64\xd5\x6b\xb7\xc3\xf7\xa8\xdf\x42"
+ "\x11\x8e\x07\x1d\x8b\xdf\xa2\xd0\xa4\x68\xb8\x3f\xcf\xa3\xf7\x1f"
+ "\xc9\x87\x36\xc5\x9d\x57\x35\xad\x7f\x75\x10\xab\x41\x10\xa7\x8a"
+ "\x5a\x1d\xdd\x26\x1d\xab\xf9\x6c\xac\x8a\xa1\x1f\x6c\xbc\xaa\xfd"
+ "\x71\x5c\x05\xce\xb9\x90\x39\xe7\x3a\x38\xe7\xb3\x16\xce\xb9\x92"
+ "\x9c\x73\x97\x5b\x96\xcf\xf9\xc2\x32\xcb\xe7\x7c\x61\xbf\xf8\x73"
+ "\xbe\x30\x56\xfc\x39\x5f\x18\x22\x7c\xce\x01\x4c\x9c\x03\x20\xce"
+ "\x01\x16\xe2\x1c\xc0\xc4\xf9\xd1\x1a\xcb\xe7\x7c\x71\x81\xe5\x73"
+ "\xbe\xb8\x53\xfc\x39\x5f\x1c\x2e\xfe\x9c\x2f\xfa\x5a\x38\x67\x26"
+ "\xce\x01\x10\xe7\x00\x0b\x71\x0e\x60\xe2\xec\xf6\xad\xe5\x73\xfe"
+ "\x79\x8e\xe5\x73\xfe\x39\x47\xfc\x39\xff\x3c\x40\xfc\x39\xff\xec"
+ "\x25\x7c\xce\x81\x4c\x9c\x03\x21\xce\x81\x16\xe2\x1c\xc8\xc4\x79"
+ "\xd8\x06\xcb\xe7\xac\x9a\x6a\xf9\x9c\x55\xeb\xc5\x9f\xb3\xca\x5b"
+ "\xfc\x39\xab\x5c\x2d\x9c\x33\x13\xe7\x40\x88\x73\xa0\x85\x38\x07"
+ "\x32\x71\x9e\x31\xc6\xf2\x39\x5f\x0a\xb4\x7c\xce\x97\x92\xc4\x9f"
+ "\xf3\x25\x77\xf1\xe7\x7c\x49\x21\x74\xce\xcd\xc0\xdb\x4e\x70\x2e"
+ "\x2d\x3f\x84\x8e\xd7\xb9\x8f\x9f\xe9\x54\x8b\x64\x79\xab\xf4\x51"
+ "\x2e\x75\xa8\x2b\x9c\x5b\x14\xb5\x39\xcc\x0f\xff\xab\x77\x1f\x1f"
+ "\xda\xec\x3e\x3e\xaa\xa9\x47\x37\xf5\xf2\x59\xe8\x21\xac\xc7\xd7"
+ "\xeb\x91\xa7\x3e\x7b\x7c\x48\xda\x1b\xc8\x7b\x85\x1a\xb9\x96\x27"
+ "\xab\x50\x72\x0c\xa5\x2e\x47\x97\x90\x73\x1d\xf6\x9e\x3f\xa2\xd2"
+ "\xfa\x12\xb4\x70\x31\x45\x5d\x91\xd5\x9c\xc2\x79\x13\xd0\xc9\x29"
+ "\x99\xdf\x23\x6f\xf8\x0d\xbf\xed\xf0\xc1\xed\xb8\x4c\x84\xfb\xe7"
+ "\xe6\xb0\xe7\x76\x24\x23\xcf\x2f\xe6\xd5\x21\xbc\x3d\x1f\x3e\xba"
+ "\xcd\xd3\x52\x92\x67\x21\xd9\x81\x5b\x55\x32\x72\x6f\xae\xc9\x31"
+ "\xbd\x37\x4f\x9c\x03\x63\xf9\x26\xbd\xef\x52\xde\x1b\x62\xc7\xb2"
+ "\x26\xc2\x70\xef\xa6\xc7\xb2\x5a\x47\xee\xf7\x26\xf7\xee\x2f\xe0"
+ "\xf7\xd9\xb1\xac\x99\x82\xc7\x92\xca\x1e\x1f\x53\x51\xd7\x8c\x7d"
+ "\x93\xeb\x95\x78\x24\x83\xed\xe0\xaf\x6f\x21\x81\x31\x2e\x34\x1a"
+ "\xe3\x6a\xa7\xda\x2e\xb7\x04\xc6\xb8\x0a\xc6\xb8\x8e\x67\x8c\xcf"
+ "\xda\x36\xc6\xb5\x03\xed\x1f\xe3\x5f\x9a\x84\xc7\xb8\x76\x9c\xf8"
+ "\x31\xfe\xe5\x84\xf8\x31\xfe\xe5\x10\x33\xc6\x6a\xee\x18\xff\x32"
+ "\x57\x78\x8c\x03\x8c\x70\x1c\x00\x38\x7e\xb4\x86\x7f\x8c\x03\x00"
+ "\xc7\x01\x3c\x38\x0e\xb0\x11\xc7\x97\xb3\xec\x1f\xe3\xcb\xb3\x84"
+ "\xc7\xf8\xf2\x5e\xf1\x63\x7c\xd9\x57\xfc\x18\x5f\xf6\x24\x63\x1c"
+ "\x60\x82\xe3\xda\x12\x0b\x63\x6c\x84\xe3\x00\xc0\xb1\xdb\xb7\x02"
+ "\x63\x0c\x38\x0e\xe0\xc1\x71\x80\x8d\x38\xbe\x72\xc7\xfe\x31\xbe"
+ "\x72\x5c\x78\x8c\xff\xe7\x2c\x7e\x8c\xaf\xa4\x89\x1f\xe3\x2b\x89"
+ "\xcc\x18\x9b\xe0\xf8\xca\x00\xe1\x31\x0e\x34\xc2\x71\x20\xe0\x78"
+ "\xd8\x06\xfe\x31\x0e\x04\x1c\x07\xf2\xe0\x38\xd0\x46\x1c\xd7\x4d"
+ "\xb7\x7f\x8c\xeb\xfa\x0a\x8f\x71\xdd\x22\xf1\x63\xfc\x3f\xb5\xf8"
+ "\x31\xfe\x9f\x8a\x8c\x71\xa0\x09\x8e\xff\x97\x69\x61\x8c\x8d\x70"
+ "\x1c\x08\x38\x9e\x31\x46\x60\x8c\x01\xc7\x81\x3c\x38\x0e\xb4\x11"
+ "\xc7\x57\x8b\xed\x1f\xe3\xab\xeb\x85\xc7\xf8\xea\x39\xf1\x63\x7c"
+ "\x35\x44\xfc\x18\x5f\x1d\xcb\x8c\xb1\x09\x8e\xeb\x1a\x84\xc6\xb8"
+ "\x05\x3c\xa0\x33\x8c\xb1\x73\x3d\x92\xe5\xe3\xb1\xad\x22\x63\xab"
+ "\xeb\x11\xe6\x97\x2f\xd3\x47\xe1\x31\xa1\x73\x40\xbf\x7a\x76\xd3"
+ "\x65\x8f\x9f\x49\xc9\xe0\x9c\x92\x71\xde\xf5\xda\x28\xed\x2a\xd4"
+ "\xcd\x3b\x19\xe7\x7f\xeb\x7b\xe2\x63\xbc\x93\xd7\x5d\x80\xdf\x93"
+ "\xe3\xbc\x97\x36\xc7\xb9\x52\xe7\xf1\x7a\xe8\x15\xd9\xaf\x71\x54"
+ "\xdf\xe1\x11\xe0\xbd\x62\xa8\x77\x3d\xdd\x2b\xea\x0b\x61\x7c\x4e"
+ "\xa3\xf2\xaa\xcf\x91\xbe\x47\xd8\x73\x83\xb4\xc8\x97\xfa\xd5\xd7"
+ "\xbd\x34\x56\x85\x74\x6f\x79\x3a\x55\xc4\x97\xa0\x8a\xf8\x7f\xa2"
+ "\xa0\x3a\xea\x2e\xf5\x8b\xaf\x53\x8b\x47\x44\xbc\xce\x23\xcc\x5b"
+ "\x97\x13\x5d\xa2\xf5\x88\x88\xda\xbf\x54\x25\x73\xd2\x20\xdf\xf9"
+ "\xb5\x14\x95\xf1\x26\x52\x64\xd4\x20\xc7\x8d\x6f\x22\xa7\x8d\x35"
+ "\xc8\xb5\xb4\xb6\x0a\x95\x5d\x2b\x41\x65\xb7\xce\xa3\xb2\xbb\xf0"
+ "\x69\x86\x8f\x1e\x3e\x29\xe7\x21\xd6\x08\x4d\xba\x8e\xf0\x7b\x3f"
+ "\xd5\xfd\xab\x91\x7b\xa9\xb6\x0a\xe1\x75\xbb\x37\x64\xbf\xba\x39"
+ "\x45\x20\x77\xea\x17\x4f\x44\xbd\xe5\x29\x83\x7d\x0a\xbc\xbd\x42"
+ "\xab\x46\xa5\xb5\x1a\xd8\x7f\x4d\x0d\xfb\x15\x2b\x6a\xa1\x7d\x7d"
+ "\x09\x7e\xaf\xa7\xba\x34\xe5\x14\xd2\x66\x15\x17\x52\xd8\x43\xf7"
+ "\x18\xef\x97\x09\x43\xad\xa7\x3c\x9f\x24\x38\xa8\xef\xb7\x5d\x2f"
+ "\x36\xd6\xbf\xfa\xd3\x63\xfc\xae\x67\x77\x18\xe7\x5e\xfa\x77\x43"
+ "\x5d\x27\x9f\xff\x99\xc2\xf3\xfa\x70\x2e\xa1\xbc\xe1\x34\xc2\xcf"
+ "\x9a\x82\x96\x21\x34\x51\x87\x10\x1e\x8b\x8a\xf8\x3a\x34\x39\x06"
+ "\xb9\xe0\xfc\xb3\xfe\x57\xdf\xee\x15\xb5\x6a\x94\xa4\x85\x3e\xde"
+ "\xd0\xb4\xf6\xb1\x7c\x4d\x39\x82\x7d\xbd\xca\xa3\x54\xc8\x29\x06"
+ "\xb9\xe2\xf1\xd5\x66\x8f\x0f\x9d\x0c\xd7\xcf\xc2\x06\x8a\xc2\x63"
+ "\x8b\xc7\x14\x8f\x2f\x6e\xcf\x30\xe6\x15\x73\xd5\x68\x85\x06\xb9"
+ "\x56\x24\xc3\xbf\xf1\x94\xba\x02\xdd\x44\xd0\x47\x1f\xca\xad\xb8"
+ "\x10\x70\x31\x04\x63\x41\x25\xbb\x36\x04\xe2\xdf\x5d\x00\x53\x67"
+ "\x09\xa6\xba\xdc\xb2\x01\x53\xd5\x2c\xa6\xea\xb3\x58\x4c\xdd\x58"
+ "\x20\x8c\xa9\xeb\xa7\x18\x4c\xa9\x3b\x27\xa6\xae\x47\x5a\xc6\xd4"
+ "\xf5\xb1\x16\x30\x55\x07\x98\x2a\xe4\x62\xea\x46\x92\x78\x4c\x5d"
+ "\xcf\xee\x40\x4c\x55\x49\xc3\xd4\xf5\x78\x2e\xa6\xea\x53\x85\x31"
+ "\x15\xc0\xf0\xd4\xa3\x35\xd6\x31\x15\x60\xc4\x53\x37\x2e\xb3\x98"
+ "\x52\x1f\x17\xc6\x94\xfa\x71\x82\xa9\x80\x4e\xca\x53\xbf\x1d\xb1"
+ "\x8c\xa9\xdf\x72\x85\x31\x15\x00\x3c\x15\x60\xc2\x53\xea\x33\xe2"
+ "\x31\xf5\x5b\x5d\xc7\x61\x2a\x40\x22\x4f\xfd\x56\xca\xc5\xd4\x8d"
+ "\x6a\x0b\x98\x62\x78\xca\xed\x5b\x1b\x30\x65\xc4\x53\x37\x47\xb0"
+ "\x98\xba\xed\x21\x8c\xa9\x5b\x8b\x18\x4c\x75\x52\x9e\xba\xe5\x6c"
+ "\x19\x53\x37\xeb\x2d\x60\x0a\x78\x2a\xc0\x84\xa7\x6e\xf7\x15\x8f"
+ "\xa9\x5b\x23\x3b\x10\x53\x12\x79\xea\x96\x37\x17\x53\x37\xfd\x84"
+ "\x31\x15\xc8\xf0\xd4\xb0\x0d\xd6\x31\x15\x68\xc4\x53\xb7\xd3\x59"
+ "\x4c\xdd\x89\x16\xc6\x54\xc3\x49\x82\xa9\xc0\x4e\xca\x53\x0d\x73"
+ "\x2c\x63\xaa\xc1\x5f\x18\x53\x81\xc0\x53\x81\x26\x3c\x75\x67\x99"
+ "\x78\x4c\x35\x64\x76\x1c\xa6\x02\x25\xf2\x54\x43\x2c\x17\x53\xb7"
+ "\xd7\x58\xc0\x14\xc3\x53\x33\xc6\xd8\x80\x29\x23\x9e\xba\x73\x89"
+ "\xc5\x54\x63\xb1\x30\xa6\x1a\x7b\x32\x98\xea\xa4\x3c\x75\xf7\xb0"
+ "\x65\x4c\xdd\xcd\xb6\x80\x29\xe0\xa9\x40\x13\x9e\x6a\x2c\x13\x8f"
+ "\xa9\xbb\xb5\x1d\x88\x29\x89\x3c\x75\xb7\x84\x8b\xa9\x3b\x55\x42"
+ "\x98\x6a\xc6\xbe\xcf\x01\x30\x15\x05\xbe\x0f\x30\xe4\x52\x49\x30"
+ "\xd5\x02\x98\xfa\xd0\x18\x53\x3f\x99\xfa\x3e\xcd\x50\x7d\x2b\xa6"
+ "\x9a\x47\x9b\x62\x4a\x0f\x98\x6a\xa1\x31\xd5\x34\xdd\xe0\xfb\x2a"
+ "\xea\x0b\x20\x56\xd7\x50\xc5\x14\xc0\xd3\x66\x06\x4f\x3f\x01\x9e"
+ "\xe0\x7c\xf4\x70\xbe\xa5\xd5\x55\x28\x48\x4d\xce\xab\x19\xce\x57"
+ "\x6f\x8c\xa5\xe6\x3a\x19\xc6\x10\xc6\x8e\x01\x47\x65\x0b\x01\x3f"
+ "\x8b\xcf\xa0\xb2\xa5\xf0\x49\x80\x4f\x32\x7c\xd0\x19\x54\x0a\xea"
+ "\x04\xe7\xec\x59\xfc\x54\x32\xf8\xd1\xdc\xb1\x8c\x1f\xcd\x59\x71"
+ "\x1e\xaf\x39\x58\x3c\x7e\x9a\x7c\x98\xb9\x74\xae\x41\xc1\x3f\x53"
+ "\x78\xce\x2c\xc1\xc8\x35\x14\xa4\x45\x2e\xd4\x0c\xdf\xee\x4e\xa1"
+ "\xc8\x75\xb9\x0e\xc9\xd2\xdf\x44\xae\xe9\x3f\xc2\xf9\x1a\xae\x9d"
+ "\x1a\xe4\x74\x5a\xf3\x39\x2a\xbd\x55\x85\x4a\xef\x9e\x42\xa5\x7a"
+ "\xf8\x5c\x83\x0f\xf4\x31\x28\xd2\xf8\x7c\xd5\xcc\xf9\x36\x5d\x86"
+ "\xb6\x7c\x84\xcf\xb7\xe9\x04\x7d\xbe\x73\xe1\x7c\x9b\xd9\xf3\xad"
+ "\x00\x2c\x42\x5c\x7a\xe9\x19\x9f\x18\xa4\x46\x5d\xdf\xd3\x52\x54"
+ "\x33\x83\x41\x1c\x97\xd3\x67\x35\x28\x28\x06\x62\xf5\x16\x60\xb0"
+ "\x76\x0f\x5a\x91\x08\x18\x6c\xd6\xe0\xe7\xfa\xea\x8a\x94\x26\xc0"
+ "\x60\x93\x23\x05\xe3\xd6\x82\x31\xf8\x13\xc6\xa0\x66\x80\x5e\x18"
+ "\x83\x67\x09\x06\xc1\x27\x5a\xc7\xa0\x11\xaf\x35\x1f\x61\x31\xa8"
+ "\x3d\x29\x8c\xc1\x96\x0b\x06\x9f\x78\xef\x31\xd8\xb2\xcc\x32\x06"
+ "\x5b\x42\xc5\x79\x42\xed\x39\xf1\x18\x6c\xd9\xd3\x71\x18\xd4\x46"
+ "\x5b\xc6\xa0\x36\xc0\x06\x0c\x56\x49\xc3\x60\x4b\x1a\x17\x83\xcd"
+ "\x85\xc2\x18\x0c\x60\x78\x10\x7c\xa5\x55\x0c\x1a\xfb\x4a\xdd\x28"
+ "\x16\x83\x54\xa0\x30\x06\xf5\x73\x0c\xbe\xf2\xde\x63\x50\xa7\xb3"
+ "\x8c\x41\x5d\xb5\x38\x0f\x49\x4d\x17\x8f\x41\xfd\x80\x8e\xc3\xa0"
+ "\xfe\xba\x65\x0c\xea\x4b\xad\x63\x30\x40\x22\x0f\xea\x5d\xb9\x18"
+ "\xd4\x0d\xb1\x80\x41\x86\x07\xc1\x87\x5a\xc7\xa0\x11\x0f\x52\xc7"
+ "\x5b\x31\x28\x77\x28\x13\xc4\xa0\x1c\x5d\x36\xf8\xd0\x7b\x8e\x41"
+ "\x39\x5a\x69\x11\x83\x72\x14\x21\xca\x73\xca\x1d\x2e\x88\xc6\xa0"
+ "\x1c\x15\x76\x18\x06\xe5\x0e\x8b\x2c\x62\x50\xee\x30\xc5\x06\x0c"
+ "\x4a\xe3\x41\x39\xca\xe6\x62\x90\x2a\x12\xc6\x60\x20\xc3\x83\xe0"
+ "\x5b\xad\x62\xd0\xc8\xb7\xca\x65\xe3\x58\x0c\x2a\x82\x85\x31\x28"
+ "\x8f\x36\xf8\xd6\x7b\x8f\x41\x79\x17\xcb\x18\x94\xd5\x8a\xf2\xa8"
+ "\x72\xc5\x1c\xf1\x18\x94\x0f\xe9\x38\x0c\xca\xef\x58\xc6\xa0\xfc"
+ "\xac\x75\x0c\x06\x4a\xe3\x41\xb9\xdc\x93\x83\x41\xb9\x6c\xa4\x05"
+ "\x0c\x32\x3c\x08\x3e\xd7\x3a\x06\x59\x1e\x94\x2b\x4e\xb1\x18\x7c"
+ "\xe8\x9c\x30\x06\xbb\x5c\x37\xf8\xdc\x7b\x8f\xc1\x2e\xeb\x2d\x63"
+ "\xb0\x4b\x94\x28\x4f\x2b\x7f\xe8\xb2\x78\x0c\x76\x29\xea\x38\x0c"
+ "\x3e\xb4\xcc\x32\x06\x1f\x0a\xb5\x01\x83\x12\x79\xb0\x4b\x1e\x17"
+ "\x83\x0a\xa5\x10\x06\xf5\xe0\x8b\x5b\x76\x0d\x8f\xd0\x67\x47\xc4"
+ "\xbb\x38\x78\x23\xad\xfb\xeb\xa1\x15\xb1\x0d\x68\xf2\x1d\x18\x9f"
+ "\x98\x3b\x28\xfc\x8e\x2b\xd2\x65\x47\x44\x81\x26\x0f\x35\xf2\xcf"
+ "\xf4\xdc\x32\x6d\x66\x71\xe1\xc6\x85\x48\x01\xfe\xfb\x39\xbc\xad"
+ "\xe2\x8a\x06\xe1\xdf\x4f\xc2\xfd\xb9\xc6\xf6\x07\xe7\x09\xa8\xdf"
+ "\x7c\x5d\xe9\x67\xcc\xcd\x2a\x54\x3b\x12\xc9\x4b\x6b\x55\x30\x0e"
+ "\x09\x74\x7c\xf1\xb8\x5c\x91\x3f\x5c\xb4\xe3\x06\x52\x68\x7f\xf1"
+ "\xec\x05\xe3\xed\xee\xfc\x57\xe4\xe0\x55\x4b\xe9\xf1\xb8\xe2\xf1"
+ "\xc2\x63\xec\x9d\x40\x51\x57\xe4\x8e\x5d\xcb\x01\x63\xda\x5f\x7c"
+ "\x7b\x6d\x87\xe3\x78\xfd\xaa\xdc\xd1\x4d\x3c\x36\x1e\x3e\x4b\xaf"
+ "\x5b\x90\x3f\x5c\x58\x5a\x8d\x78\x9f\x1d\xc3\x58\x9d\xb5\x71\xac"
+ "\xaa\x8c\x7c\x5e\x3b\x8c\x95\x63\xad\x6d\x63\xd5\x75\xa8\xc9\x58"
+ "\x99\xfb\x2a\x79\xd7\x51\xe2\xc7\x0a\x97\x4b\xc5\x63\xe5\x58\x2d"
+ "\x3c\x56\x01\x36\xe2\x2a\x20\xd4\xc8\x8f\xb4\xc3\x58\x3d\xe2\x6a"
+ "\xdb\x58\x3d\x32\x87\x3b\x56\x3c\xfa\x5f\xfe\x48\xb4\xf8\xb1\x7a"
+ "\x84\xbc\x0f\x40\xfe\x88\xa3\x85\xb1\xb2\x11\x57\x01\x55\x46\xba"
+ "\xb9\x1d\xc6\xea\xd1\x91\xb6\x8d\xd5\xa3\xe9\x26\x63\xc5\xa3\x53"
+ "\x1f\xcd\x11\x3f\x56\x8f\x86\x92\xb1\x7a\x74\x88\xf0\x58\x05\xda"
+ "\x88\xab\xc0\x50\x23\x7d\xd7\x0e\x63\xe5\x14\x65\xdb\x58\x39\x1d"
+ "\xe1\x8e\x15\x9f\x9e\x72\x3a\x2e\x7e\xac\x9c\xd6\x90\xb1\x72\x8a"
+ "\xb0\x30\x56\x36\xe2\x2a\xb0\xca\x48\x87\xb4\xc3\x58\x39\x67\xdb"
+ "\x36\x56\xce\x97\x4d\xc6\x8a\xe7\xbe\xef\x7c\x5d\xfc\x58\x39\x17"
+ "\x92\xb1\x72\x4e\x13\x1a\x2b\x5d\xf6\xf8\x10\x17\x18\x83\xa6\xcd"
+ "\xe3\xfd\x5c\xe2\x91\xac\xd9\x07\xc6\xcd\x1d\xc6\x6d\xa5\x37\x6a"
+ "\xc9\x86\x71\x53\x6b\xd1\xe4\x45\x3f\x53\xe5\xf5\x3a\xd4\x0c\x63"
+ "\xd6\xe4\x3e\x1e\xb6\xd5\xe1\x39\x47\x2f\xd5\xc8\x5d\xca\x66\x2c"
+ "\x72\x45\x78\xdc\xf0\x38\xe0\xb1\xa3\x60\xdc\xe8\x71\x74\x8f\x2e"
+ "\xd1\xb9\x87\x79\x4f\xba\xfe\x33\xf5\x9e\x8a\xa2\xf0\xf9\x52\xee"
+ "\xce\x95\xf8\xb9\x40\x50\x1d\xea\xea\xfd\x06\x3e\x27\x97\x24\xbc"
+ "\xbd\x42\x5d\x05\xfa\xe0\x16\xa2\xb5\xd9\xcf\xbe\xee\xba\x69\xbe"
+ "\x4e\xba\x8a\xd0\xf1\x54\x8f\x6e\x6a\x6d\x8f\x69\x29\x2b\xae\xa3"
+ "\x87\xb0\x7e\xc8\xd0\x23\xcf\xa4\x05\x48\x76\x60\x9e\x52\x46\xaf"
+ "\x5d\x5b\x4c\xb7\x11\x08\xe3\xe2\x49\xdd\x36\x9a\xd3\x7d\x3b\x0a"
+ "\x55\x5c\xc9\xa4\xe3\x66\xaa\x11\xe8\xb8\xfd\xe0\xeb\x0a\x3a\xd3"
+ "\x8f\x72\x1f\x1f\x95\x59\x8e\xbc\xa9\x16\x18\x63\xbc\x9e\x48\xee"
+ "\x3a\x74\x47\xb3\xd8\x31\x76\xa1\xe7\x7f\xeb\xbd\x99\xf9\x5b\x30"
+ "\x4e\xf8\xf7\xe9\xf9\x5b\x31\x46\xf3\xb7\xa0\xcf\xad\xf3\xb7\xe4"
+ "\xdd\xaa\xf0\xfc\x2d\xfd\xcf\x9e\xbd\x0c\xe7\xfe\xde\x7c\x8a\x82"
+ "\x73\xef\x5e\xde\xa0\x46\xf8\xfc\xcb\x1b\x94\x68\x45\x2c\x72\x2d"
+ "\x6f\xae\x43\xc9\x0d\x94\xba\x3c\xe5\x2a\x0a\xba\x83\x75\x30\xc6"
+ "\x8b\xcb\x49\x12\xd7\x6e\xb9\xfa\x9f\x7d\x7b\x41\x1f\x8e\x95\x57"
+ "\x22\x64\xb4\x8e\x27\x0a\x34\xb3\x23\xc4\x21\xaa\x22\xa5\x06\x41"
+ "\x4c\x32\x2b\xb4\x3f\xe2\x38\x45\xc1\xfe\x91\xad\xfa\xba\x47\xd8"
+ "\x26\xbc\x0d\xc7\x0c\x3f\x6f\xc2\xb5\x03\x76\x18\xe9\x6f\x8c\x0b"
+ "\x97\xf8\x14\x54\x11\xdf\x8c\xca\xb5\x08\xf4\x55\xb7\xb1\xdf\x84"
+ "\x56\x09\xe1\xe8\x2c\x83\xa3\x42\x97\xf8\x2e\xb7\x6c\xc0\x51\x15"
+ "\x8b\xa3\xee\x1e\xf6\xe1\xc8\xed\xa4\xfd\x38\x72\xcb\xb2\x03\x47"
+ "\x75\x5c\x1c\x75\x4f\x12\x8f\x23\xb7\x99\xe2\x71\xe4\xe6\x6d\x1f"
+ "\x8e\xba\x3b\x13\x1c\xb9\xaa\x08\x8e\xba\x2b\x58\x1c\xd1\x6b\xa3"
+ "\xda\x09\x47\xae\x69\xc2\x38\x0a\x60\xf8\x28\x00\xf8\xe8\xd1\x1a"
+ "\xeb\x38\x0a\x30\xe2\x23\xf7\x59\xf6\xe1\xc8\xdd\xd9\x7e\x1c\xfd"
+ "\xe1\xbc\x74\x1c\x05\x98\xf0\x91\xfb\x49\xf1\x38\xfa\xc3\x2e\xf1"
+ "\x38\xfa\x43\x94\x7d\x38\x72\x9f\x4a\x70\xf4\x07\x5f\x82\x23\xf7"
+ "\x89\x2c\x8e\xe8\xf5\x66\xed\x84\xa3\xee\x67\x2d\xe0\x88\xe1\xa3"
+ "\x00\xe0\x23\xb7\x6f\x6d\xc0\x91\x11\x1f\xf5\xd8\x6d\x1f\x8e\x7a"
+ "\x4c\xb5\x1f\x47\x3d\xfa\xd8\x81\x23\x13\x3e\x7a\xcc\x59\x3c\x8e"
+ "\x3c\xea\xc5\xe3\xc8\xa3\xd0\x3e\x1c\xf5\xc8\x27\x38\xf2\x88\x21"
+ "\x38\xea\x91\xcd\xe2\x88\x5e\xc3\xd7\x4e\x38\xf2\xf0\x12\xc6\x51"
+ "\x20\xc3\x47\x81\xc0\x47\xc3\x36\x58\xc7\x51\xa0\x11\x1f\x79\x5e"
+ "\xb7\x0f\x47\x9e\xf9\xf6\xe3\xc8\x33\x5a\x3a\x8e\x02\x4d\xf8\xa8"
+ "\xe7\x54\xf1\x38\xf2\x1c\x22\x1e\x47\x8f\x69\xec\xc3\x91\xe7\x65"
+ "\x82\xa3\xc7\x8a\x08\x8e\x3c\xab\x59\x1c\xd1\xeb\x22\xdb\x09\x47"
+ "\x8f\xcd\xb5\x80\x23\x86\x8f\x02\x81\x8f\x66\x8c\xb1\x01\x47\x46"
+ "\x7c\xf4\xc7\xa1\xf6\xe1\xa8\xd7\x65\xfb\x71\xd4\xeb\xa0\x1d\x38"
+ "\x32\xe1\xa3\x3f\xe6\x8b\xc7\x51\xaf\x44\xf1\x38\xea\xe5\x6f\x1f"
+ "\x8e\xfe\x38\x90\xe0\xa8\x17\x22\x38\xfa\xa3\x0f\x8b\x23\x7a\xad"
+ "\x69\x3b\xe1\xa8\xe7\x3e\x21\x1c\xe1\x5a\x04\x1f\x90\xba\x10\x0d"
+ "\x1b\x13\xd0\xf0\x1d\xf8\xdf\x66\xe4\xd7\x98\xf1\xc7\xb3\xc7\x13"
+ "\x49\x3d\x00\xe8\xa7\x60\xbd\xb3\x47\xf7\x42\x5c\xdc\xc7\x4f\x09"
+ "\xba\x40\x6a\x34\xe0\xba\x20\xb7\x57\x44\xa1\x41\xb8\x2e\x83\xfc"
+ "\x71\x27\x5c\xc7\xaa\xb5\x76\x80\xbb\x40\xed\x80\x30\xe1\xda\x01"
+ "\xcd\x9b\x0d\xeb\x6e\xf7\xb0\xeb\x6e\xe5\x5e\xe7\x2d\xae\xbb\x95"
+ "\x7b\x1d\xcf\x0f\x13\x8b\x07\x2f\x7a\xfd\xd7\xed\x1e\xe3\xe1\xdc"
+ "\xbd\x2a\xe1\x9c\xf7\x90\x73\x7f\x9c\x7e\xaf\x82\xf5\xf5\xb8\x7b"
+ "\x8c\x70\xe2\x95\x38\x75\x26\x4a\xa1\x36\xfc\x54\x49\x79\x8c\x9f"
+ "\x42\xe5\x8c\x8f\x10\xd7\x97\xc7\x3d\xad\x8c\x77\x25\xff\x78\xf7"
+ "\x4e\x64\xc6\xbb\x90\x19\x6f\xfe\xba\x05\x61\xc2\x75\x0b\xf8\xc7"
+ "\xbb\xb7\xe5\x75\xce\xf2\xde\x83\xc5\x8f\xf7\xe3\x5a\x66\xbc\x0b"
+ "\x1b\x33\x7a\xfb\xb3\xe3\xdd\xfb\x98\xf8\xf1\x7e\xbc\x9e\x8c\x77"
+ "\xf5\x09\x18\xef\x4a\x18\x6f\x71\xf5\x5b\xe4\xbd\x53\x2d\x8f\x77"
+ "\x80\x00\xbe\x9f\xa8\x27\xe3\xcd\xd4\x4c\x70\x17\xa8\x99\x10\x26"
+ "\x5c\x33\x81\x7f\xbc\x9f\x38\x62\x79\xbc\x9f\xd8\x29\x7e\xbc\x9f"
+ "\x98\x4f\xc6\x3b\x00\xf0\xfd\x44\x21\x3b\xde\xde\x36\xd6\x15\x30"
+ "\x1e\xef\x27\x66\x92\xf1\xbe\x50\x44\x79\x04\x00\xbe\x03\x44\xe2"
+ "\xfb\x09\x8d\x95\xf1\x16\xc0\x77\x9f\x99\xcc\x78\x33\xf8\x16\xa8"
+ "\xd7\x10\x26\x5c\xaf\x81\x7f\xbc\xfb\xf4\xb3\x3c\xde\x7d\xdc\xc4"
+ "\x8f\xb7\x77\x35\x33\xde\x80\xef\x3e\xde\xec\x78\xf7\xc9\x13\x3f"
+ "\xde\xde\xa5\x64\xbc\x2f\xee\x83\xf1\x06\x7c\x07\x88\xc4\x77\x9f"
+ "\x28\xcb\xe3\x1d\x28\x80\xef\x27\x4b\xc9\x78\x33\xb5\x22\xdc\x05"
+ "\x6a\x45\x84\x09\xd7\x8a\xe0\x1f\xef\x27\xb7\x5a\x1e\xef\x27\x57"
+ "\x8a\x1f\xef\x27\x27\x92\xf1\x0e\x04\x7c\x3f\x99\xc9\x8e\xf7\x53"
+ "\x4e\xe2\xc7\xfb\xc9\x91\x64\xbc\x7f\x2e\xa0\x3c\x02\x01\xdf\x81"
+ "\x22\xf1\xfd\x64\x95\x95\xf1\x16\xc0\xb7\xcf\x48\x66\xbc\x19\x7c"
+ "\x0b\xd4\xa9\x08\x13\xae\x53\xc1\x3f\xde\x3e\x5d\x2d\x8f\xf7\x53"
+ "\x37\xc5\x8f\xf7\x53\xc7\x98\xf1\x06\x7c\xfb\x20\x76\xbc\x7d\x12"
+ "\xc5\x8f\xf7\x53\xfb\xc8\x78\xab\xb2\x61\xbc\x01\xdf\x81\x22\xf1"
+ "\xed\x23\xf8\xfe\x2f\x17\x18\xef\x93\xd0\x23\xb8\x0f\x86\xea\xb3"
+ "\x41\xa7\xe8\xb8\xe3\x5e\x11\x3f\x1c\x3d\x7b\x17\x8f\xfd\x9f\x7c"
+ "\xe1\xde\x11\xda\x61\xf5\x32\xe4\x7f\x72\xb3\x7b\xed\xb0\xbc\xef"
+ "\x05\xc1\xb5\xc3\xf2\xbe\x27\x45\xaf\x1d\x96\xf7\xcd\x64\x35\x50"
+ "\xdf\xb3\x6c\x4c\xff\x44\xf3\x87\xa8\x35\xc5\xf2\xbe\x29\xbc\x75"
+ "\x34\xe4\x7d\xfd\xf0\x9a\x62\x6a\xc3\xa5\x54\x7d\x8e\x14\x6d\xf4"
+ "\xa7\x21\x36\xc4\xba\x0a\xe2\x50\x29\x1c\x6b\x5f\x77\x88\x75\x55"
+ "\x87\xd5\xed\x90\x3f\xad\xb3\x3f\xd6\x4f\x9f\x12\x8e\xf5\xd3\x07"
+ "\xc5\xc7\xfa\xe9\x44\x56\x7f\x3d\xad\x64\x63\xed\x2b\x7e\xfd\xb8"
+ "\xfc\xe9\xf9\xbc\xf5\x3c\xe4\x4f\x7b\x91\x58\xd7\xd4\x43\xac\x25"
+ "\xe8\x32\x5f\x6f\xeb\xb1\x0e\x80\xeb\x3a\xc0\xc2\x75\xfd\x0c\x82"
+ "\x7b\x66\x68\x87\xd5\x0f\x91\xf7\xbb\x6a\x7f\xac\xfb\x1d\x16\x8e"
+ "\x75\xbf\x7c\xf1\xb1\xee\x17\xc5\x6a\xbf\x7e\xfb\xd8\x58\x3f\xe3"
+ "\x2f\x3e\xd6\xfd\x42\x79\xeb\x8a\xc8\xfb\x39\x92\x58\xd7\x4e\xd1"
+ "\xe7\x48\xd1\x84\xcf\x38\xd9\x10\x6b\xb8\xae\x03\x2c\x5c\xd7\xfd"
+ "\xeb\x21\xd6\x55\x1d\x56\xc7\x44\xde\xff\x9c\xfd\xb1\xee\xbf\x53"
+ "\x38\xd6\xfd\xd7\x8b\x8f\x75\xff\x10\x56\x77\xf6\xcf\x65\x63\x3d"
+ "\x60\x80\xf8\x58\xf7\x1f\xcb\x5b\xdf\x44\xfe\x4c\x03\x89\xf5\xe5"
+ "\x43\x10\x6b\x09\x7a\xb4\xbf\xa0\xfe\x67\x63\x1d\x08\xd7\x75\xa0"
+ "\x85\xeb\x7a\x60\x15\x68\x85\xd0\x0e\xab\xa7\x22\x1f\x78\xdc\xfe"
+ "\x58\x0f\x4c\x17\x8e\xf5\xc0\x38\xf1\xb1\x1e\xe8\xcf\x6a\xde\x81"
+ "\x6b\xd8\x58\x3f\xeb\x29\x3e\xd6\x03\xfd\x78\xeb\xac\xc8\x07\xa8"
+ "\x48\xac\xff\xe7\xa9\xcf\x91\xa2\x85\x07\xd6\xda\x10\x6b\xb8\xae"
+ "\x03\x2d\x5c\xd7\x83\xc0\xd7\x07\x56\x75\x58\x5d\x17\xf9\xa0\xfd"
+ "\xf6\xc7\x7a\xd0\x32\xe1\x58\x0f\x9a\x23\x3e\xd6\x83\x06\xb0\x7a"
+ "\x7b\x50\x0c\x1b\x6b\x3f\x85\xf8\x58\x0f\xf2\xe2\xad\xf7\x22\x7f"
+ "\xb6\x94\xc4\xba\x2e\x11\x62\x2d\x41\x87\x0f\x12\xac\x27\x6c\x49"
+ "\x87\x2f\xc9\x47\x8e\xdc\x78\x0f\x3e\xd4\xb1\x5a\x7c\x70\xbe\xfd"
+ "\xf1\x1e\x1c\x2d\x1c\xef\xc1\xc1\xe2\xe3\x3d\xd8\x8b\xd5\xe2\x83"
+ "\x23\xd8\x78\x0f\x6e\x10\x1f\xef\xc1\x4e\xfc\x5a\xdc\xef\x98\x7d"
+ "\x5a\x7c\xb0\x52\x8a\x16\x37\x8f\xf7\xf3\xbb\x3a\x56\x8f\x3f\x9f"
+ "\x6e\x7f\xbc\x9f\x9f\x2e\x1c\xef\xe7\x47\x8b\x8f\xf7\xf3\x4e\xac"
+ "\x1e\x7f\x7e\x0a\x1b\xef\xe7\x6b\xc5\xc7\xfb\x39\x2d\xbf\x1e\x7f"
+ "\x6e\x9f\x7d\x7a\xfc\xf9\x42\x29\x7a\xdc\x3c\xde\x43\xb3\x3b\x56"
+ "\x93\x0f\x4d\xb2\x3f\xde\x43\x03\x85\xe3\x3d\x74\xb0\xf8\x78\x0f"
+ "\xd1\xb2\x9a\x7c\xa8\x51\xfe\x7b\xe8\x59\xf1\xf1\x1e\x52\xcf\xaf"
+ "\xc9\x87\xe4\xd9\xa7\xc9\x87\x16\x48\xd1\xe4\xe6\xf1\x7e\x61\x4d"
+ "\xc7\xea\xf2\x17\x16\xd8\x1f\xef\x17\x46\x08\xc7\xfb\x85\x3e\xe2"
+ "\xe3\x3d\xac\x9e\xd5\xe5\x2f\xf8\xb1\xf1\x7e\x41\x7c\xfd\x4c\xf9"
+ "\xb0\x6a\x7e\x5d\x3e\x2c\xcd\x3e\x5d\xfe\x42\xa6\x14\x5d\x6e\x1e"
+ "\xef\x11\xb1\x1d\xab\xcd\x47\xcc\xb2\x3f\xde\x23\xfa\x09\xc7\x7b"
+ "\x84\x9b\xf8\x78\x0f\xaf\x66\xb5\xf9\x08\xa3\xfc\xff\x88\x43\xe2"
+ "\xe3\x3d\xbc\x94\x5f\x9b\x0f\x4f\xb4\x4f\x9b\x8f\x48\x91\xa2\xcd"
+ "\xcd\xe3\xfd\xd2\xdc\x8e\xd5\xe7\x2f\x4d\xb2\x3f\xde\x2f\xf5\x14"
+ "\x8e\xf7\x4b\x0e\xe2\xe3\xfd\x62\x29\xab\xcf\x5f\x72\x65\xe3\xfd"
+ "\xd2\x2e\xf1\xf1\x7e\xf1\x18\xbf\x3e\x7f\x71\xbe\x7d\xfa\xfc\xa5"
+ "\x18\xfb\xf3\xe4\x2f\xfb\x63\x6d\x2e\xb6\xfe\x63\x45\xac\x61\xcd"
+ "\xdd\x48\xb6\xfe\xa3\xfc\x65\xfa\xdd\x2a\xbc\xb5\x65\xe4\xa3\xd2"
+ "\x3b\x75\xfd\x47\xf9\x28\xcb\xf5\x1f\xe5\x23\xc5\xd5\x7f\x94\x8f"
+ "\x8a\x13\x3f\x1f\x7f\x94\x3f\xeb\x11\x46\x19\xf9\xff\x97\xc9\xd8"
+ "\x77\xe6\xba\x90\xf2\x51\xdc\xba\x90\xf2\x91\x74\x5d\x48\x6a\xc3"
+ "\x55\x95\x34\x2f\xf2\xf2\x44\xfb\x9f\x0b\x8c\xf6\xc2\x3e\x44\x6c"
+ "\x1d\x4a\x16\xdb\xaf\xf4\x64\xb1\x3d\xda\x59\x18\xdb\xfe\xd1\x9d"
+ "\xba\x0e\xa5\xfc\x95\xeb\x96\xb1\xfd\x4a\xa9\xa8\x9a\x23\x72\x7f"
+ "\xf1\x75\x6f\xe4\xfe\x5e\xac\x1f\xf2\x37\xf2\xbf\xa3\x67\x76\x20"
+ "\xb6\xa5\xd5\x53\x92\xfb\x23\x2e\xb6\x5f\x71\x25\xd8\xae\x1f\x22"
+ "\xcd\x77\x8d\x16\x7c\xff\xb9\xed\xcf\x41\x5e\xd5\x60\xcf\x25\xb6"
+ "\x1e\x26\x8b\xed\xd1\x77\x58\x6c\xbf\x7a\x55\x18\xdb\xaf\x8e\xeb"
+ "\xd4\xf5\x30\xe5\x63\x4e\x59\xc6\xf6\x98\x3d\xa2\x6a\x99\xc8\x5f"
+ "\x1d\x28\x1e\xdb\x63\x34\xac\xf7\x7b\x75\x24\x8b\xed\xb1\xc3\x3b"
+ "\x0e\xdb\x12\xeb\x64\xca\xc7\x54\x73\xb1\x3d\xba\x9e\x60\xfb\x46"
+ "\xaa\x34\x8f\x39\x56\x61\xff\x73\x9f\xd7\xce\x62\x7f\x29\xb6\x2e"
+ "\x27\x8b\xed\xb1\x67\x58\x6c\xbf\x66\x56\x17\x8a\xc5\xf6\x6b\x7d"
+ "\x3a\x75\x5d\x4e\xf9\xb8\xdd\x96\xb1\x3d\x6e\x8d\xb8\x1a\x29\xaf"
+ "\x75\x15\x8f\xed\x71\x67\x59\x9f\xfb\x9a\x27\x8b\xed\xf1\xee\x1d"
+ "\x88\x6d\x89\xbc\x3d\xae\x88\x8b\xed\xb1\x25\x04\xdb\xea\x6a\x69"
+ "\x7e\xfa\x35\x95\xfd\xcf\xb9\x02\x0b\xb1\x97\x16\x5b\x1f\x94\xc5"
+ "\xf6\xf8\xfd\x2c\xb6\x03\x77\x0a\x63\x3b\x40\xd7\xa9\xeb\x83\xca"
+ "\x03\xac\xd4\xff\x09\xb0\x50\xff\x87\x6f\xad\x70\x80\x84\xba\x17"
+ "\x01\x85\xac\xa7\x0f\x68\x60\xb1\x1d\xa8\xee\x38\x6c\x4b\xac\x1b"
+ "\x2a\x0f\xc8\xe6\x62\x7b\xfc\x2e\x82\xed\xdb\x7e\xd2\x72\x07\x81"
+ "\xc7\xec\x7f\xae\x37\x31\x0d\xe7\x0d\xc4\xd6\x29\x65\xb1\x3d\x61"
+ "\x3d\x8b\xed\x89\x49\xc2\xd8\x7e\xfd\x7c\xa7\xae\x53\x2a\x7f\x7d"
+ "\x96\x65\x6c\xbf\x3e\x52\x5c\x4d\x97\xd7\x25\xac\x83\x7f\x3d\x8d"
+ "\xcd\x5f\xbc\x6e\x34\xff\x7d\x62\x69\x07\x62\x5b\x22\x6f\xbf\x1e"
+ "\xc3\xc5\xf6\x84\x14\x82\xed\x3b\x6b\xa4\xe5\x49\x26\xe6\xda\x9f"
+ "\x27\x09\xca\xa5\x9f\x61\x8a\xac\x97\xca\x62\x7b\x52\x24\x5b\x9b"
+ "\x28\x68\xbd\x29\xb6\xd9\xda\x44\x93\x77\x76\x9a\x7a\xa9\xf2\xc9"
+ "\x7d\x2d\xe3\x78\xb2\x42\x5c\x4e\x64\xf2\x7a\xf1\x38\x9e\x1c\xc2"
+ "\xe6\x44\x26\x1b\xcd\x7f\x09\x32\xbc\x93\xbc\x03\x6a\x16\x05\x0d"
+ "\xb4\x5c\xb3\x28\xc8\xa9\xdd\xea\xa8\xca\x27\x0f\xe7\xd6\x2c\x9a"
+ "\x34\x53\x4f\x5f\x0b\x8d\x55\xd2\xf2\x2a\x41\xbb\xec\xcf\xab\xbc"
+ "\x41\x9e\xef\x8a\xac\xdb\xca\x5e\x0b\x53\x16\xb1\xd7\xc2\x1b\x39"
+ "\xc2\xd7\x42\xf0\xfe\x4e\x53\xb7\x55\x1e\x3c\xd8\xf2\xb5\x10\xec"
+ "\x2a\x2e\x87\x12\x2c\xa1\x0e\x4c\x70\x04\x9b\x43\x09\xde\xc5\x5e"
+ "\x0b\x6f\xd4\x76\xdc\xb5\xf0\xc6\x08\xcb\xd7\xc2\x1b\x9e\xed\x56"
+ "\xcf\x55\x1e\x3c\x96\x7b\x2d\x4c\x89\x22\xd7\x42\xf3\x4c\x69\x79"
+ "\x98\x37\x24\x3d\xff\xe6\x5e\x0b\x53\x0b\xe9\x67\xdf\x22\xeb\xc7"
+ "\xb2\xd7\xc2\x9f\x93\xd8\x6b\x61\xaa\x99\x9e\x67\xaf\x85\x90\x23"
+ "\x9d\xa6\x7e\xac\x3c\x64\x94\xe5\x6b\x21\xc4\x4b\x5c\xce\x25\x64"
+ "\xa7\xf8\x6b\x21\xc4\x68\xfd\x53\x88\xd1\xfa\xa7\xa9\xea\x8e\xbb"
+ "\x16\xa6\x8e\xb3\x7c\x2d\x4c\xf5\x69\xb7\xba\xb2\xf2\x90\x29\xdc"
+ "\x6b\xe1\xcf\xb1\xe4\x5a\xd0\xaa\xa4\xe5\x6d\xa6\xda\xa0\xff\xad"
+ "\xe5\x6d\x42\x8f\xd1\xf3\x02\x44\xd6\xb1\x65\xaf\x85\xbf\xac\x67"
+ "\xaf\x85\xd0\xfd\xc2\xd7\xc2\xb4\x93\x9d\xa7\x8e\xed\xb4\x40\xcb"
+ "\xd7\xc2\x34\x5f\x71\x39\x9a\x69\xfb\xc5\x5f\x0b\xd3\xe2\xd9\x1c"
+ "\xcd\xb4\x63\xec\xb5\x10\xaa\xed\xb8\x6b\x21\x34\xd8\xf2\xb5\x10"
+ "\xea\xd7\x7e\xf5\x6d\xa7\xcd\xe4\x5e\x0b\x7f\x49\x21\xd7\x02\x35"
+ "\x57\x5a\x9e\x27\xb4\xc4\xfe\x3c\xcf\x8c\x12\x7a\xce\x84\xc8\x7a"
+ "\xba\xec\xb5\x30\x3d\x87\xbd\x16\x66\x1c\x11\xbe\x16\xc2\xce\x74"
+ "\x9e\x7a\xba\x61\x53\x2d\x5f\x0b\x61\x43\xc4\xe5\x74\xc2\x8e\x88"
+ "\xbf\x16\xc2\xd6\xb0\x39\x9d\xb0\x12\xf6\x5a\x98\xe9\xd8\x71\xd7"
+ "\xc2\x8c\x59\x96\xaf\x85\x19\x23\xdb\xaf\xce\x6e\x58\x14\xf7\x5a"
+ "\x98\x9e\x46\x5f\x0b\x19\x0e\x75\xd2\xf2\x42\x33\xce\xda\x9f\x17"
+ "\x0a\x3f\x4b\xcf\x27\x11\x59\xd7\x97\xbd\x16\x66\xee\x64\xaf\x85"
+ "\x70\xe1\xf7\x3c\xc8\x67\x5d\xe8\x3c\x75\x7d\x67\x59\x7e\xff\x91"
+ "\x7c\x96\xa5\xf7\x1f\xf1\xe4\x80\x66\x9d\x14\x7f\x2d\xcc\xca\x64"
+ "\x73\x40\xb3\x8c\xd6\xff\xcd\x76\xef\xb8\x6b\x21\xdc\xf2\xfb\x1f"
+ "\xe4\xe1\x36\xbc\xff\x41\x6a\xbd\xdf\x59\xb1\xdc\x6b\x61\x66\x2e"
+ "\xb9\x16\x14\xf3\xa5\xe5\x91\xc2\xad\xe6\xff\xb1\xcf\x6f\x71\x37"
+ "\xcf\x23\x95\xd6\x0e\x47\xfd\xc3\xf0\xb5\x10\x91\xaa\xcd\x19\x1f"
+ "\x8a\xeb\x0b\xeb\x7c\x98\x1a\x94\x2b\x99\x1a\x2f\x0d\x5a\x52\x83"
+ "\x52\xad\x6b\xad\x41\x49\x6a\x7f\x20\x19\x5e\x0b\x8c\xd7\x04\x6b"
+ "\x5d\x49\xfd\x49\x0a\xcf\x89\xc2\x73\xa4\x6a\x4a\xe8\xfa\x2a\x89"
+ "\x5a\x38\xf7\x2b\x56\xea\x4f\x46\xa8\x50\x69\x44\x02\xd2\xba\x15"
+ "\x17\x92\x75\xc2\x11\x9e\x74\xfd\xc9\xd9\x9e\xbd\x32\x2e\x22\x77"
+ "\x17\x5c\x7f\x32\x82\xd2\xaf\x50\x51\xea\x72\x0d\x82\x63\x61\x7c"
+ "\xe7\x18\x6a\x50\x46\xac\xc4\xe7\xae\x9d\xed\xdb\x6b\xfb\x45\xa1"
+ "\xfa\xc2\x11\x12\xea\xc0\x46\x0c\x61\xf3\x3b\x11\xf1\x2c\x46\x23"
+ "\xe8\x7b\x30\xfc\xeb\x5a\x1a\x0a\x1c\x93\xf1\x90\xba\x45\x52\xed"
+ "\x8d\x88\x6c\x1b\x62\x86\xe7\x88\x98\xf1\x17\x1b\xb3\x37\x47\x42"
+ "\xcc\xaa\x70\x9d\x63\xdb\x63\xd6\xe5\x56\xfb\xc4\x6c\x4e\xa9\xed"
+ "\x31\x7b\x73\xa8\x49\xcc\x78\xf2\x10\x6f\x3e\x2e\x3e\x66\x73\xea"
+ "\xd8\x3c\xc4\x9b\x03\xd8\x98\xbd\x99\x48\x62\x36\xe7\x04\x89\x99"
+ "\xa3\x57\x8b\xa4\xfa\x1d\x6f\x5a\x5d\xff\x8d\x7d\x53\x8b\xbb\xb9"
+ "\x2f\x67\x63\xf6\x96\x5a\x9b\x03\xde\x1d\x7c\xb9\xed\x31\x7b\xb4"
+ "\xa6\x7d\x62\xf6\x56\x8a\xed\x31\x7b\xeb\x2a\x37\x66\x7c\x7e\xf9"
+ "\x2d\xf1\xef\xec\x94\xbf\x95\xc7\xfa\xe5\xb7\x54\x6c\xcc\xe6\xfa"
+ "\x91\x98\xbd\x15\x4f\x62\xd6\x35\xa0\x45\x52\x0d\x90\xb7\xb4\x36"
+ "\xc4\x0c\x3f\xd3\xb7\x70\x9d\x45\xee\x82\x98\x55\xe1\xba\xcf\xb6"
+ "\xc7\xcc\xed\xdb\xf6\x89\x59\xe4\x10\xdb\x63\x16\x99\x6f\x12\x33"
+ "\x1e\x5f\x17\xb9\x56\x7c\xcc\x22\xa7\xb0\xbe\x2e\x32\x9b\x8d\x59"
+ "\x64\x2d\x89\x59\xe4\x00\x12\xb3\x47\x62\x5b\x24\xd5\x11\x89\xb4"
+ "\x9a\xff\xc2\x3a\xb4\xc5\xdd\xdc\xe7\xb0\x31\x7b\x27\x54\x9b\x03"
+ "\x5e\x08\x7c\x8e\xed\x31\x1b\xb6\xa1\x7d\x62\xf6\x76\x9d\xed\x31"
+ "\x7b\x27\x98\x1b\x33\x3e\xff\xf1\xce\x08\xf1\x31\x7b\x47\xc1\xfa"
+ "\x8f\x77\x02\xd8\x98\xbd\x93\x4b\x62\xf6\xb6\x8a\xc4\xec\xd1\x82"
+ "\x16\x49\xb5\x48\xde\x99\x6b\x43\xcc\xf0\x33\x58\x0b\xd7\x59\xb4"
+ "\x13\xc4\xac\x0a\xd7\xc1\xb6\x3d\x66\x33\xc6\xb4\x4f\xcc\xa2\xf2"
+ "\x6c\x8f\x59\x74\x17\x93\x98\xf1\xe8\xe4\x28\x09\x75\xb0\xa3\x8a"
+ "\x58\x9d\x1c\xa5\x65\x63\x16\x3d\x91\xc4\x2c\x2a\x9b\xc4\xcc\xa9"
+ "\xb4\x45\x52\x3d\x93\x68\xc1\xfa\x5f\x96\x74\xa3\x61\x5e\x3e\x1b"
+ "\xb7\x79\x27\x3a\x8f\x76\x9c\x17\x62\x7b\xdc\xe6\x15\x5b\xd7\x8e"
+ "\xf3\x76\x8b\x8f\xdb\xbc\x18\x56\x3b\xce\x3b\xc4\xc6\xed\x5d\x05"
+ "\x89\xdb\xbc\x89\xf6\x69\xc7\x79\x56\xd7\xbf\xf2\x69\x47\xf3\xb8"
+ "\xcd\x4f\xec\x3c\xfa\x71\xbe\x93\xed\x71\x9b\x1f\x67\x5d\x3f\xce"
+ "\x9f\x25\x3e\x6e\xf3\x7d\x59\xfd\x38\x7f\x3e\x1b\xb7\xf9\xc7\x48"
+ "\xdc\xe6\x2b\xec\xd3\x8f\xf3\x05\xeb\xbf\x59\xd2\x8f\xe6\x71\x5b"
+ "\x38\xa4\xf3\x68\xc8\x05\x27\x6c\x8f\xdb\xc2\x81\xd6\x35\xe4\x42"
+ "\x0f\xf1\x71\x5b\xa0\x62\x35\xe4\x42\x1f\x36\x6e\x0b\x63\x49\xdc"
+ "\x16\x1c\xb3\x4f\x43\x2e\xf4\x97\xa2\x21\xcd\xe3\xf6\x5e\x7d\xe7"
+ "\xd1\x91\xef\x25\xda\x1e\xb7\xf7\x2e\x5b\xd7\x91\xef\x89\x7f\x67"
+ "\xb1\xfc\xbd\x5c\x56\x47\xbe\x57\xcd\xc6\x2d\x86\x79\x07\xcb\x7b"
+ "\xb1\xf6\xe9\xc8\xf7\xac\xd6\xff\xe0\xd3\x91\xe6\x71\x5b\xb4\xab"
+ "\xf3\x68\xc9\x45\x22\xf4\xff\xa2\x7c\xeb\x5a\x72\x91\x04\xfd\xbf"
+ "\x68\x0a\xab\x25\x17\x19\xe9\xff\x45\x8c\xfe\x5f\x34\xc0\x3e\x2d"
+ "\xb9\xc8\x16\xfd\x6f\xa6\x25\xcd\xe3\xb6\x64\x66\xe7\xd1\x93\x8b"
+ "\xeb\x6d\x8f\xdb\x92\xa9\xd6\xf5\xe4\x12\x09\xef\x81\x5a\xe2\xc8"
+ "\xea\xc9\x25\x13\xd9\xb8\x2d\xc9\x23\x71\x5b\x5c\x6b\x9f\x9e\x5c"
+ "\x22\x58\xff\xd1\x10\x37\x9d\xfb\xf8\x50\x8a\x27\x0f\x59\x16\x35"
+ "\x9c\xa9\x4d\xb8\x74\x80\xce\x63\x7c\xa8\xd8\xf7\xbb\x18\x6a\x4e"
+ "\x9f\x82\x1e\xd4\xc8\xe3\x4e\xda\x57\x77\x3a\x2e\xce\xfe\xba\xd3"
+ "\x71\xa3\xdb\xee\xfd\x2e\x71\xfd\xc4\xd7\x9d\x8e\x6d\x60\x35\x68"
+ "\xdc\x70\x36\xd6\x4b\xe9\xf9\x09\xe2\xea\x51\xc7\x16\xd9\x57\x8f"
+ "\x3a\xae\x98\xe0\x2b\x36\x9e\xd4\xa3\x8e\x3b\xd4\x31\xef\x7d\x89"
+ "\xf5\xc1\xf5\xa8\xa9\x0c\x67\x8d\xb4\xfa\xc8\x4b\x87\xdb\x80\xe7"
+ "\x2a\x8a\x27\x47\xcb\xe2\x39\x5e\x0b\x78\xae\x12\xfb\x9e\x19\x2e"
+ "\x9e\xe3\x73\xec\xc3\x73\xfc\x38\xfb\xf1\x1c\xef\xd6\x76\xef\x99"
+ "\xf9\x6b\x93\x78\x3c\xff\xf5\x04\xab\xcd\xe3\x1d\x59\x3c\x2f\x1b"
+ "\x29\x1e\xcf\x7f\x4d\xb5\x0f\xcf\xf1\xe9\x04\xcf\x7f\x0d\x20\x78"
+ "\x8e\x5f\xd3\x31\xef\x9f\x59\xda\x40\xf0\xec\xea\x2f\xad\xfe\xf4"
+ "\x32\x47\xeb\x78\x0e\x08\xa5\x78\xf2\xd7\x2c\x9e\x97\x97\xea\x3c"
+ "\x02\x42\xc5\xbe\xef\x86\x8b\xe7\xe5\x91\xf6\xe1\x79\xb9\x87\xfd"
+ "\x78\x4e\xb8\xd4\x76\xef\xbb\x49\x38\x25\x1e\xcf\x09\xd9\xac\x67"
+ "\x49\xa8\x62\xf1\x9c\xe8\x24\x1e\xcf\x09\xa1\xf6\xe1\x79\xf9\x2c"
+ "\x82\xe7\x04\x4f\x82\xe7\xe5\x21\x1d\xf3\x1e\x9c\x65\x27\x08\x9e"
+ "\xbb\xa7\x4a\xab\xef\xbd\x5c\xb0\xfe\xb1\x11\x9e\xab\x28\x9e\xdc"
+ "\x3e\x8b\xe7\xe4\x3c\xc0\x73\x95\xd8\xf7\xee\x70\xf1\x9c\x6c\xe7"
+ "\x7b\x2e\x92\xda\xe0\x3d\x17\x49\x76\xbc\xe7\xc2\xf4\xbd\x3b\x49"
+ "\x5b\xc5\xe3\x39\x69\x2e\xeb\xe5\x92\xf6\xb0\x78\x4e\xae\x16\x8f"
+ "\xe7\x24\x5f\xfb\xf0\x9c\xcc\xbc\xff\x22\xb1\x8e\xe0\x39\xd9\xa7"
+ "\x63\xde\xc7\x93\x98\x4d\xf0\xec\x5e\x29\xad\x7e\x7a\xf2\x1e\xeb"
+ "\x78\x0e\x0c\xa5\x78\x9e\x7b\xb0\x78\x5e\x39\x5f\xe7\x11\x18\x2a"
+ "\xf6\xfd\x3f\x5c\x3c\xaf\xec\x62\x1f\x9e\x53\x0e\xdb\x8f\xe7\x94"
+ "\x95\x6d\xf7\xfe\x9f\x94\x68\xf1\x78\x4e\x19\xc2\x7a\xdc\x14\xa3"
+ "\xe7\xff\x2b\xf7\x89\xc7\xf3\x0a\x3b\xdf\x0b\x94\xa2\x23\x78\x5e"
+ "\xc1\xbc\x17\x28\xa5\xa1\x63\xde\x0b\xb4\x62\x2e\xc1\xf3\x63\x9e"
+ "\xd2\xea\xd3\xaf\x8c\xb7\x01\xcf\x55\x14\xcf\x33\x21\x16\xcf\x6b"
+ "\x46\x02\x9e\xab\xc4\xbe\x87\x88\x8b\xe7\xd5\xe7\xec\xc3\xf3\xea"
+ "\xb5\xf6\xe3\x79\x75\x70\xdb\xbd\x87\x68\xf5\x08\xf1\x78\x5e\x6d"
+ "\x78\xfe\x07\xfc\xbc\xda\xe8\xf9\xdf\x1a\x09\xef\x27\x5a\x55\x62"
+ "\x1f\x9e\x57\x97\x11\x3c\xaf\x4a\x25\x78\x5e\x7d\xa2\x63\xde\x4f"
+ "\xb4\x6a\x08\xc1\x73\xcf\x08\x69\xf5\xff\xd7\x58\x9d\xff\xc1\x97"
+ "\xdf\x30\xe4\xa5\x58\x4c\xff\xcd\xd5\xfe\x1c\xc7\xba\xbd\xf6\x61"
+ "\x7a\xdd\x74\xfb\x31\xbd\xae\x6f\xdb\xe5\x38\xd6\x49\x78\xd7\xdf"
+ "\xda\x2a\x36\xc7\xb1\xce\x8b\xc5\xf4\xdf\xa6\x88\xc7\xf4\xda\x3c"
+ "\xfb\x30\xbd\x6e\x27\xc1\xf4\xda\x99\x04\xd3\xeb\x72\x3b\x26\xc7"
+ "\xb1\xd6\xd1\xbe\x1c\xc7\xdf\xbc\xa4\xe4\x38\xcc\x31\xbd\xbe\xd6"
+ "\xfe\x3c\xc7\xfa\x24\xfb\x30\xbd\x7e\xa0\xfd\x98\x4e\x6d\x6a\xbb"
+ "\x3c\x47\xea\x25\xf1\x98\x4e\xdd\xc7\xe6\x39\x52\xd5\x2c\xa6\x37"
+ "\xf8\x88\xc7\x74\x6a\x8c\x7d\x98\x5e\x1f\x47\x30\x9d\xea\x47\x30"
+ "\xbd\x7e\x7e\xc7\xe4\x39\xfe\x56\x6d\x5f\x9e\x63\xbd\x5a\x4a\x9e"
+ "\xc3\x1c\xd3\x69\x45\xf6\xe7\x3a\xd2\x82\xed\xc3\x74\x9a\x83\xfd"
+ "\x98\x7e\xbf\xac\xed\x72\x1d\xef\x1f\x16\x8f\xe9\xf7\x53\xd8\x5c"
+ "\xc7\xfb\x27\x58\x4c\xa7\x69\xc4\x63\xfa\xfd\xb1\xf6\x61\x3a\x2d"
+ "\x90\x60\xfa\x7d\x05\xc1\x74\x9a\x7f\xc7\xe4\x3a\x36\x14\xda\x97"
+ "\xeb\x48\x3b\x21\x25\xd7\x61\x8e\xe9\x8d\x69\xf6\xe7\x3b\x36\xf6"
+ "\xb5\x0f\xd3\x19\xe7\xec\xc7\x74\xc6\xce\xb6\xcb\x77\x64\xac\x17"
+ "\x8f\xe9\x0c\xa3\xf7\x5f\x64\x18\xad\xff\xdf\x58\x2a\x1e\xd3\x19"
+ "\x9e\xf6\x61\x7a\xe3\xe3\x04\xd3\xe9\x55\x04\xd3\x1b\xdd\x3b\x26"
+ "\xdf\x91\xbe\xc6\xbe\x7c\xc7\x46\xab\xf5\x2f\xf8\xf2\x1d\xe6\x98"
+ "\xde\x14\x61\x7f\xce\x23\xab\xc9\x3e\x4c\x67\xed\xb5\x1f\xd3\x59"
+ "\x71\x6d\x97\xf3\xc8\x9a\x25\x1e\xd3\x59\xbe\x6c\xce\x23\xcb\x68"
+ "\xfe\xd3\xa6\x02\xf1\x98\xce\xac\xb7\x0f\xd3\x59\x37\x09\xa6\x33"
+ "\xf7\x11\x4c\x67\xd5\x75\x4c\xce\x23\x33\xd4\xbe\x9c\xc7\xa6\xf9"
+ "\x52\x72\x1e\xe6\x98\xce\x19\x62\x7f\xde\x23\xbb\xcc\x3e\x4c\x67"
+ "\x27\xd9\x8f\xe9\xec\xc0\xb6\xcb\x7b\x64\x0f\x16\x8f\xe9\x0f\xb4"
+ "\x6c\xde\x23\xdb\xa8\xfe\x7d\x4e\xac\x78\x4c\x7f\xa0\xb4\x0f\xd3"
+ "\xd9\x27\x09\xa6\x3f\x48\x21\x98\xce\x3e\xd6\x31\x79\x8f\x0f\x06"
+ "\xd8\x97\xf7\xc8\xf1\x37\xc5\xf4\x92\xc8\x85\x73\xbd\xdf\x7b\xfb"
+ "\xed\x25\x91\xb1\xde\x4b\xe6\x47\xbf\x15\x39\xaa\xaf\xe1\xef\x51"
+ "\x7e\xf1\x7d\xe3\x1f\x41\x73\x17\xcc\x99\xbd\xf4\x39\x76\xe7\xfc"
+ "\xc8\x85\xf0\xcf\x23\x28\x6a\xce\x92\x28\xef\xd8\x65\x31\x91\xde"
+ "\xf8\xaf\x05\x6f\xc5\xc0\x21\xef\xc5\xb2\x5b\x26\xc5\xcd\x8f\x8d"
+ "\x8e\x99\x1f\xe9\x3d\x76\xd2\xe8\x81\x21\xe3\xfe\x1c\xf2\xca\x2b"
+ "\x8f\x20\x64\xf4\x1e\x69\x6f\x2a\x3b\x5a\x09\x78\x50\x5c\x91\xef"
+ "\xcc\x2a\xf7\x44\x28\x1d\x70\xb6\x71\x31\x72\x5d\xbf\x18\x29\x52"
+ "\x6f\x21\xc7\xf4\x5b\xc8\xc9\x7b\x1e\x1a\x4e\xb9\xa5\x14\x6e\xbc"
+ "\x85\xdc\xa9\x1e\xce\x55\x54\x56\x91\x9a\x72\x2b\xf6\x53\xbb\xed"
+ "\x54\xc1\x36\x57\x2a\x6b\xa7\x2b\xde\x07\xe3\xaa\xa0\xb2\x8a\x73"
+ "\x6b\xe4\x3b\x63\xd4\x6e\x1f\x29\x57\x5c\x45\x32\xaa\xdb\xe6\xf9"
+ "\x07\xf4\x6a\xd9\x71\x8c\x10\x38\x6f\x24\xdf\x32\x17\x3e\x53\x90"
+ "\x1c\x6e\x57\xf2\x5c\x57\xf8\x84\xc2\x27\x05\x3e\xa9\xf0\x69\x40"
+ "\xf2\xad\x23\xe1\x33\x1f\x3e\xb0\x6d\x6b\x36\x7c\x0a\xe0\xb3\x07"
+ "\xc9\xb7\xc1\xf6\x6d\x33\xe1\x03\xfb\xb6\xad\x21\xed\x6c\x4b\x43"
+ "\xf2\x0f\x9d\xe0\x13\x02\x1f\xf8\x7e\x1e\x6c\xcf\x2b\x44\xf2\x7c"
+ "\x38\x2e\xaf\x12\x3e\xf5\xf0\x81\x36\xf3\x3d\xe1\x83\xbf\x9f\x49"
+ "\xf6\x6d\x77\x84\xcf\x58\xf8\x40\x1b\xdb\xe1\x77\xb6\x1f\x82\x4f"
+ "\x09\x7c\xce\xc2\xa7\x1a\xc9\x77\x40\xdf\x76\xc0\x31\x3b\xbc\xe0"
+ "\x03\x7d\xd8\x91\x07\x1f\x25\x92\x17\x40\x3b\x05\xf0\x1b\x05\x55"
+ "\x08\xce\x91\xf9\x78\xc3\x27\xc4\xe8\xef\x54\x97\x95\x4f\xa8\x94"
+ "\xcf\x68\xe1\x1a\xdb\x72\x5c\xb7\x0a\xc9\x75\x59\x1f\x29\x63\x9e"
+ "\x41\x0e\xd7\xe4\x5b\xd2\x2b\xd6\x20\x44\xb9\x16\xa9\x95\x09\xcd"
+ "\x78\x3f\xfd\xec\xbb\x31\x63\x4b\x9a\x0a\x7d\xea\x8a\xaf\x25\x71"
+ "\x58\xda\x92\xc6\x7c\xbf\x54\xe5\x30\xe9\x18\xfe\x3e\xb5\x69\x9c"
+ "\x13\xb5\x22\xf4\x43\xbc\x66\xf6\x0a\x1e\x23\x8c\xf1\xcc\xb1\x11"
+ "\x94\xeb\xcb\x27\x30\x1f\x28\x13\xe8\x7e\x45\xc2\xb5\xd1\x0d\xbe"
+ "\x3f\x97\x82\x38\xa9\x3d\x20\xa6\xab\x90\x82\xfe\x3b\x6b\xa7\x8a"
+ "\x2a\x88\x8d\x22\x1c\x91\x4b\xcf\x1d\x6c\xf2\x08\xf7\xc3\xfb\x34"
+ "\xbb\x87\x45\x50\xbb\x02\x34\xca\x85\xcd\xa8\x56\x9e\x1b\x0c\x5c"
+ "\x25\xa3\xfe\x34\x2c\x42\xbf\x39\xdc\xaf\x08\x62\x8c\x8f\x39\x92"
+ "\x5c\x87\xff\x8d\x80\xf3\x96\x51\xd9\xe1\x1a\x9c\xaf\x51\x26\x6f"
+ "\x02\xfe\xdc\x12\xd9\xe4\x11\x3b\xc5\x7b\x82\x0b\x55\x83\x7f\x47"
+ "\x86\x6b\xa3\x6f\xd1\x90\x6b\x78\xcb\xdc\x26\x0f\x67\x15\x6e\x5b"
+ "\x57\x10\xe7\x0a\xfb\x14\x14\x60\x0b\xfa\xe0\x70\x03\xbe\xa7\xcb"
+ "\x71\xae\x52\x4e\xa0\x7f\xf3\x3a\xf4\x53\xb6\x22\x10\xda\xfe\x28"
+ "\xce\xf5\xd3\x04\x8d\x8c\xc2\x7d\x77\x77\xae\x02\x2c\x3b\xe9\x32"
+ "\x72\x52\xb6\x76\x47\x8a\xfc\x4d\x08\xed\xe8\x8e\x1c\x1b\x33\x72"
+ "\x6b\x55\x8a\xa7\x8f\x11\x8e\xda\x32\x57\x06\xc7\xa8\xe4\xb9\x4a"
+ "\x0a\xe2\x41\xff\x56\xf6\xf4\x14\xe1\xdf\xda\x3a\xb4\xf5\xb7\x36"
+ "\x4f\x4f\xc1\xbf\x45\x8f\x0f\x19\x2b\xf2\x7f\x43\x3b\xbb\x5e\xb0"
+ "\xd0\xe7\xad\x83\x71\x1b\x2a\xf9\x56\x1f\xea\xe3\x17\x5c\x75\x9b"
+ "\x23\x32\xf1\x3e\x7c\x3c\x19\xff\x9d\x2a\x97\x95\xa8\x81\x82\x6d"
+ "\x3a\x26\x06\x3a\x1c\x03\x59\x0a\x70\x4d\xae\x02\xff\x1e\x7c\x37"
+ "\x46\xb7\xca\x1b\x79\x4f\x40\xa8\x5e\xbe\xad\x0f\xb5\xa9\xb8\x88"
+ "\x72\x1d\x57\x4d\x62\xbc\xf5\x54\x7c\x09\xa5\x87\x8f\x6e\x50\x09"
+ "\x72\x50\x4e\xc0\xf1\xdd\x5a\xe7\xfd\xda\xc3\x30\xce\x5b\xaf\xb6"
+ "\x8e\x6f\x9f\x38\x7c\xbd\xbb\xc2\xb8\x38\xe9\xd6\xbd\x76\x8c\x92"
+ "\x79\x23\x7c\x1e\xc6\xe3\x85\xcf\xa7\x31\x63\x9b\xa7\xc9\x98\xb9"
+ "\x06\x06\xae\xa0\x06\x05\xe0\xb6\x1b\x70\xdb\x97\xd4\x70\x6f\x85"
+ "\x3e\x0d\xc1\xdf\x87\xe3\x03\x54\x0e\xaf\x35\xe0\xe3\xbd\x9f\xa4"
+ "\x31\x17\xa9\x63\xc6\x07\xe3\x1e\xc7\x99\xf2\x88\x56\xe2\xbf\xa7"
+ "\xf6\x43\xae\x2e\x25\x48\xe6\x9d\xec\x53\x44\xf0\x10\xae\x31\xb4"
+ "\x43\x9f\xe3\xe6\xd7\x31\x6e\x7c\x59\xfc\x6d\x3b\xa1\xcb\x1a\x77"
+ "\xb6\xc9\x63\x76\xa1\x26\x27\x34\x85\xca\x1c\x77\x16\xaf\x15\xaf"
+ "\x91\x6f\xa3\xe7\x40\x51\xab\x1c\x11\x89\xc3\xb8\xaa\xe4\xf9\x94"
+ "\x3a\xf9\x26\xfc\x56\x8f\xd9\x85\x47\x96\xaa\x21\x66\xa1\x29\x18"
+ "\x13\x45\x77\x35\x32\x5c\xbf\x8f\xea\x96\xf3\xd1\x76\x72\xae\x8e"
+ "\x70\xae\x08\xb7\xdb\x98\xf1\xa1\x82\x3d\xd7\x6d\x7b\x30\x3e\xe0"
+ "\x37\xea\xc9\x6f\x43\xbb\xab\xe0\x37\xb2\xc6\xd5\xc3\x71\x03\x54"
+ "\x0e\xb7\x43\xe9\xeb\x6b\x29\x75\x76\x63\x33\x42\xb7\x97\x52\xda"
+ "\x20\xed\xcf\x7a\xb8\x87\x22\xd8\x3f\x51\x85\x66\xba\x1a\xc6\x8c"
+ "\x5c\x73\xad\xed\x44\xe2\xbf\xd5\x6e\x74\x3b\xb1\x7c\xed\xa8\xe4"
+ "\x1f\x8e\x9c\xad\xf5\x76\x68\xbe\x4b\x55\x6e\xfc\x0b\xf4\x6d\x15"
+ "\xa2\x9a\x97\x52\xa5\x49\x01\x94\x26\xe3\x5b\x04\x3a\xa6\x1a\x01"
+ "\x97\x7a\x75\x73\xa0\xd4\x41\xcb\x90\x4b\xb7\x18\x17\xea\x54\x49"
+ "\x35\x5a\x1e\x40\xd5\x55\xc4\xeb\x50\x79\x43\x2d\x4a\x3c\x8f\x9c"
+ "\x56\x94\x21\xf7\xc4\x00\x4a\x5d\x1a\x51\x8d\xc8\xf6\x32\xb4\xe2"
+ "\x12\x52\x2c\x3f\x41\x69\x26\xc3\x3d\xf5\x9b\x6a\xbc\xbd\x16\xb6"
+ "\xeb\xd0\x8a\x3a\x4a\x9b\x3c\x0b\x39\xe1\xff\x97\x9d\xc0\xdb\x2f"
+ "\x23\xb8\x9e\x15\x41\xf1\x6a\x97\xed\xf0\x9b\xf8\xfb\x3b\xa0\x2f"
+ "\xfa\xbb\xd4\xb1\x8d\x77\x11\x5a\x3e\x1d\x79\x26\xce\x41\xae\x41"
+ "\x70\x6b\xaf\xd0\x1e\x46\x41\x3a\x0a\xee\xd9\x27\x51\x52\x34\x72"
+ "\x0c\xd2\xe2\xb5\xde\xe7\xe0\x93\x8f\x76\xc0\xb1\x70\x6e\x4a\x7c"
+ "\x6e\xcb\x2f\x80\x86\xb9\x6e\xf8\x4e\x31\xf3\x9d\x0b\x08\x8f\x59"
+ "\x93\x5b\xb1\xb7\x26\xab\xb8\x00\xce\xdd\x1f\x8f\x01\xfc\x4e\xa5"
+ "\x1e\x7f\xef\x2e\x7d\xff\xc1\x63\xe0\x30\x5b\x0b\x58\xcd\x99\x16"
+ "\x33\x3b\x5e\x49\xb7\xab\x92\xe7\x25\xee\x58\x4c\xf7\x89\x73\x6c"
+ "\x90\x96\xba\xad\xf6\x98\x16\x03\xfb\x77\x05\xc5\xbf\x42\x31\x71"
+ "\xab\x6b\xcc\xc8\xab\x35\x8c\xb7\x21\x2e\x70\x4c\x15\xc4\xa2\x4e"
+ "\x1e\x83\x14\x8d\x19\xf9\x0a\x95\xc3\xdd\x21\x46\xd8\xc5\xf8\x7b"
+ "\xc8\x70\x2c\x73\x8c\xaf\xca\xa1\x21\xd1\xe8\x18\x0d\x60\xba\xf5"
+ "\x18\xd8\x0f\xf8\xbf\xb3\x86\xdd\x4f\xe3\xb9\x75\x3f\x73\x7f\x35"
+ "\xb4\x2d\x07\x1e\xce\xd5\x79\xcc\x46\x94\x47\xb7\x18\xea\xb6\xa7"
+ "\x13\x25\x83\xd8\x68\x29\x8d\x3e\x67\x02\xbe\xbf\x3a\x55\x68\x1b"
+ "\x10\x39\x3e\xff\x3a\x95\xd3\x2d\x9e\xcc\x4f\xcd\x3f\x87\xdb\x04"
+ "\xdd\xe4\x07\xf7\x63\xd7\xa0\x12\x0a\xf7\x41\xa1\xcb\xe9\xa1\xce"
+ "\x58\x0c\xf7\xe4\x9c\x70\xb5\xde\x23\xcc\x55\xb3\x33\x36\x02\xdf"
+ "\x13\xf0\xf5\x46\x65\xc3\x77\x99\x76\xe0\x77\xbb\xa8\xe4\xf9\xfb"
+ "\x74\xf0\x7d\x2a\x7b\x42\x21\xd9\x4e\xf8\x8d\xf0\x50\xfe\x3e\xaa"
+ "\x2f\xec\xcb\x7c\x39\x0f\xf6\x75\xa9\x91\x6f\x1f\x0e\xdb\x11\xfc"
+ "\x7d\x56\x99\x7c\x0b\x8e\xdd\x3e\x8a\x60\xfa\xe5\x5c\xce\xdf\x32"
+ "\x3c\x9e\x5b\x53\x31\x47\x61\x6e\x82\xed\xb3\x58\x0e\x22\xf7\x00"
+ "\xc2\xed\x13\x80\x57\xb6\xc7\xa8\x1c\x82\xfd\xf1\x38\xe1\xd8\x36"
+ "\x10\x5e\x8b\xd5\xed\x8c\x8d\xfa\x2a\x00\xa1\xaf\x4e\xe0\xeb\x68"
+ "\x7b\xb6\xca\xe1\xcf\x21\xec\x58\x6e\xdf\x8f\x8f\xa5\xfb\x09\x5c"
+ "\x82\xff\x4f\xf3\x0a\x7c\x07\xae\xf3\x02\x7c\xcf\x22\xfc\xb8\x7d"
+ "\x0f\xbe\x6f\x01\x4f\x38\x32\xf7\xa9\x3a\x68\x3b\x97\xea\xbe\x0c"
+ "\xf7\x2b\xa5\x86\xe9\x8b\x71\xdf\x0c\xbc\x48\x65\x25\x84\x92\x63"
+ "\xc7\xa9\x1b\x33\x76\xb8\xab\x1c\x42\x06\x18\xe3\x85\x9c\xd7\x8e"
+ "\x24\xc0\x74\xd5\xa0\x13\xf0\x37\x68\x25\x43\x7b\xc0\x2f\x8e\xc0"
+ "\x2b\x9f\x63\xbc\x61\x4e\xc9\xdd\x84\xf5\x4f\x42\x84\x26\x2b\x21"
+ "\x0a\xda\x8a\x30\x70\x0b\xfe\x2e\xbe\x1e\x80\x5f\x1c\x69\xde\xd0"
+ "\x69\xe5\xf4\x35\xaf\x43\x03\x5a\xb9\x04\xb6\x35\xb9\x25\x44\x30"
+ "\xdb\x15\x74\x9f\x64\x72\x3d\xfc\xbe\x83\xe1\xf7\x9a\xdc\xc6\xa9"
+ "\xa0\xdd\x22\x95\xc3\xe8\x44\x0e\xd7\x6c\x7a\xc9\x8f\xa2\x42\x31"
+ "\x6e\xe4\xd0\xd7\x0b\xf0\xef\xc3\x0c\x4e\x1f\xfd\xaa\x04\xa1\xb1"
+ "\xe3\xe0\x37\x20\x9e\x5b\x7b\x50\xf8\x1c\x35\x2a\xb4\xde\x1d\x7f"
+ "\x7f\x3d\xfc\x8d\xb7\xe3\x63\x1a\x33\x0a\x5c\x55\x68\x83\x82\xb4"
+ "\x9b\xab\xc0\xf1\xe1\xb6\x5b\x30\x8a\xb4\x5b\x30\x1a\xb7\xc7\xdc"
+ "\xe3\x1f\xc5\xff\xc7\xdf\xc7\x6d\xe7\x6f\xa6\xea\x71\x7b\xd0\xd6"
+ "\x4c\xc3\x6f\xa4\xc3\x36\xc3\xef\x8c\x5d\xd0\xfa\x5b\x89\xb0\x3f"
+ "\xcd\xf8\x1c\x72\x37\x53\x0d\xa4\x7f\x05\xb9\x2a\xb4\x9d\xc6\x49"
+ "\x2a\x6c\xc3\xdf\x25\x58\x28\x38\x8c\x71\xa2\x22\xe7\x25\x27\x78"
+ "\x29\x38\xa1\x42\x79\x25\xc6\xf7\x1e\x88\x85\xb3\xe1\xde\xcc\xb4"
+ "\x57\x67\x68\x8f\x6d\x8b\xb4\x41\x65\x2e\x0f\x65\xae\x05\x7c\xcd"
+ "\x3a\xe1\xf6\x1b\x33\x76\x7a\xaa\x50\x9a\x17\xe9\xdb\xd6\xd4\x06"
+ "\x82\x6d\x1c\x03\xfc\x1d\x12\xf3\x8c\x9c\x12\x7c\xdf\xdc\xb1\x09"
+ "\xf3\xd8\xb8\x6a\xf8\xce\x44\x93\x7b\xa6\x23\x6c\x2f\x65\xda\x8b"
+ "\x82\x78\x8d\xe4\xc4\x6b\x15\x8d\x23\x5a\xff\xe1\x7e\xb2\xdc\x84"
+ "\xef\x81\xb3\xbd\xe1\x37\x14\xa0\x65\x7e\xc4\xf7\xe5\x0f\x7a\x50"
+ "\xc0\x63\x3b\xf7\x19\xda\x87\xb6\x15\x30\x96\x2f\xc3\x36\xa5\x0a"
+ "\xed\xab\xc5\xdb\x32\xe0\x18\x95\x7c\xb3\xe0\xbb\x78\x93\xfb\x20"
+ "\x59\x45\x9e\x0a\x7b\x4e\x7c\xcd\x8e\xac\xf0\x6a\x40\x15\x79\x7a"
+ "\xa4\xff\xf8\x85\x4c\xff\x64\x4a\x79\x45\xfe\xd1\xa8\x72\x4d\x1d"
+ "\x12\xa7\x3d\x3f\x22\xb5\x76\x9a\xc1\x1b\x25\xfe\xbf\xf6\xbe\x06"
+ "\x20\xaa\x2a\xed\xff\xcc\xe5\x52\xe4\x2a\x33\x22\xd2\xa8\xa8\x23"
+ "\x82\x8d\xbe\x7e\xa0\xa9\x59\xaf\x15\x5b\xba\xc0\x6e\x2a\xfb\xfe"
+ "\xad\x9d\x5c\xb7\xb0\xcc\xa0\xfc\x20\x44\x25\xbf\x40\xb2\xfd\x5b"
+ "\x19\x8c\x84\xbc\x96\x7c\xb5\x51\x4b\xbb\x9a\xd4\xd2\x46\xef\x6a"
+ "\x4d\x89\x6f\x64\xe8\x50\xaf\xee\xe2\x2e\x6e\xe4\x6b\x46\x84\x3a"
+ "\xc9\x28\x03\xf3\x71\xfe\xcf\x73\xce\xbd\xcc\x9d\x61\x46\xf9\x92"
+ "\xed\x6f\x5e\xbd\xdc\x7b\xcf\x7d\xee\x73\x9e\x73\xce\xef\xfc\xce"
+ "\x39\xcf\xbd\x73\xce\x34\x82\x7d\x91\x73\x01\xaf\xad\x30\x5b\x2e"
+ "\x30\xfe\x82\xf3\x07\xf1\xfe\x4b\x30\x96\xc2\xf1\x14\x8c\x99\x93"
+ "\x8c\x02\x1f\x53\xb9\x40\xb6\x08\xc3\x71\xbc\x05\xed\x52\xb1\xe2"
+ "\x1e\x7d\x63\xa6\x86\xe7\xcd\x6b\x51\x8c\xc7\xd1\x5e\x47\xac\x09"
+ "\x6d\x76\x95\xce\xd4\x60\x1a\x32\xd2\xa9\xcb\xec\x68\x35\x61\xdb"
+ "\xa5\x5b\x8b\x63\xc1\xd7\x54\x0b\x0a\x09\x75\xbd\x3e\x53\xd3\xcd"
+ "\x34\x30\xff\x22\x8c\x97\xcf\x59\xa2\x66\x6a\x32\x9c\x44\xc8\xd9"
+ "\x1c\x18\x74\x6f\x01\x35\xb5\x8c\xbb\xcd\xd8\x9a\xfd\x5a\xe4\x47"
+ "\xe9\x84\x74\xbf\x5f\xfe\x5a\xa4\x9c\xf6\x22\x29\xed\x10\x17\x9b"
+ "\xb3\x68\x0a\x0c\x75\x8a\xd9\xf5\x6b\x8b\xfd\x95\x17\xcd\x52\xd3"
+ "\x83\x05\x0e\xb2\xba\x80\xb6\xaf\x2e\x24\x02\xf4\x8b\x2c\xfb\x8a"
+ "\xea\x90\xab\x63\xe4\xfc\x64\x79\xe7\xb0\x90\x94\xcd\x44\xd3\x14"
+ "\x50\x1a\xb8\x60\x63\x26\x5b\x5b\xe9\x43\x90\xeb\xa6\xad\xec\xf7"
+ "\x8f\x47\x61\xfc\xbd\xc0\x91\x41\x79\x7b\x53\x3a\x69\xbe\xa4\x0f"
+ "\xef\xc9\xe5\x57\x24\x8d\x8b\xbb\x1f\x47\xa9\xdf\xf5\xdf\x2f\x93"
+ "\x56\x8d\x9f\xb4\x7e\xdf\xf3\xb4\x96\xee\xef\x9c\xd6\xd7\x87\xf5"
+ "\x6d\x5a\x5f\xd7\xf5\x20\xad\x3a\xdf\x69\x7d\xfd\x64\xcf\xd3\xfa"
+ "\x7a\x59\xe7\xb4\xbe\x11\xd8\xb7\x69\x7d\xc3\x2f\xe7\x5c\x26\xad"
+ "\xd1\xbe\xd3\xfa\xc6\xa7\x3d\x4f\xeb\x1b\x79\x3e\xd2\xfa\x7d\x1f"
+ "\xa7\xd5\xef\xef\xdf\xa8\xa0\xa6\xc8\x4f\xc0\x4b\xed\x9b\xdb\xa0"
+ "\x9f\x96\xbf\xa4\x64\xd3\xab\x44\xa8\xb1\xda\xc8\xd1\xf0\x3a\x92"
+ "\xf1\x34\x11\x26\xa7\x00\xef\x65\x91\xd9\x34\x7f\x90\xe5\x68\x41"
+ "\x33\x84\x9f\x21\x47\xd2\x6d\x24\x26\x15\xf9\xf7\xf7\x07\xcc\x4b"
+ "\xbb\xcb\xbf\xbf\xdf\xd6\xc1\xbf\x8e\x69\x12\xe7\x96\x7d\x7b\xb4"
+ "\xb9\x9d\x60\xfa\xe1\xfc\x78\x07\xff\x66\xf1\xfc\xf6\xe6\x5f\xcc"
+ "\x0f\xb3\xcd\xe6\xc1\xbf\xfc\xf7\x55\x65\xaf\x7a\x73\x6f\x76\x13"
+ "\x21\xbe\xb9\xb7\x6c\x13\x72\x6f\x11\xdc\xef\x9e\xfd\x65\x71\x32"
+ "\xf7\x1a\x21\x4e\x25\xf7\x1e\x5c\x8a\xed\x66\x59\x49\xcf\xb8\xb7"
+ "\xac\x44\x4e\x77\xa1\x94\x6e\x08\x13\x3d\xb9\xb7\xcc\xef\xb7\xce"
+ "\x4a\xdc\xd2\xfc\x58\xcd\xbe\x51\xb6\x40\x57\xe9\xac\x04\x6c\xdf"
+ "\x5a\x21\x4f\xde\x2b\xb2\x89\x67\x02\xde\x34\x30\x3f\x68\xeb\x52"
+ "\x15\x2d\x9d\x69\x5b\x90\x46\xbf\xa4\x51\xb3\x12\xd0\xc7\x89\xe3"
+ "\x7f\xb8\xff\x22\xf4\xd5\x6d\xdd\xb3\x9b\xeb\xa4\x6f\xcc\x30\x6e"
+ "\x86\xfa\xb2\x6f\xad\x4d\x70\x6d\x30\xa8\xa1\x1c\x34\x74\xe7\x2f"
+ "\x12\xe8\x6f\x1f\x28\x6d\xd9\x99\x98\x78\x48\xff\x35\x41\x59\xba"
+ "\x45\x8c\xe9\xb9\xfd\x7f\xd0\x5e\xde\xfe\x3f\xcc\xeb\xbe\xfd\x5c"
+ "\x67\xd7\xec\xff\x83\xb6\x4b\xf6\x87\x81\xfd\xed\xb3\x02\x61\x1c"
+ "\x28\x7c\xd8\x3e\x4b\xec\xa6\x3d\x7e\xbf\xff\xed\xbb\x38\xfe\xd8"
+ "\x65\xfe\xa3\x61\x06\xb2\xaf\xc8\x22\x00\x07\xb0\x36\x1c\xeb\x1e"
+ "\xe7\xbf\x46\xe0\xac\x2f\x29\xe7\x24\x4b\x37\x39\xe9\x8f\xdb\xbb"
+ "\x1e\xff\x7d\x29\x7d\x1f\xff\x1e\xff\xe9\xf7\xe6\xc4\xb7\xe2\x53"
+ "\xfc\x73\xe2\x2f\x52\x3a\x73\xe2\x9e\xcf\xbb\xcf\x89\x7b\x0a\x3a"
+ "\x73\xe2\x5e\xa7\x9b\x13\xf7\x7e\xdb\x73\x4e\xdc\xfb\x6e\xd7\x39"
+ "\x71\xef\x8e\x9e\x71\xe2\xde\xc5\x97\xe7\xc4\xbd\x15\x3d\xe3\xc4"
+ "\xbd\x15\x9d\x39\x71\xaf\xd6\x93\x13\xf7\x36\xfb\x2d\x4b\xe3\x04"
+ "\x1b\xb4\xd1\x03\x9b\x02\xde\xda\xef\xc8\x22\xc4\x65\x7c\xa3\x6e"
+ "\x81\x93\xb6\xd2\x1d\x13\x6c\x2e\x61\x3a\xf2\x4a\x4c\x6b\x6b\x52"
+ "\x90\x6b\x9d\x7e\x20\x0d\xb9\xeb\x1e\x6a\xd7\x12\xc8\xa7\x48\xb0"
+ "\x5f\x4d\x5b\xf5\xc1\x74\x9d\x3e\xa4\xe0\x12\x09\x85\x5d\x5b\x20"
+ "\xb5\xc7\x70\x1e\x4d\xd7\x69\x07\x64\xaf\x25\x13\xd5\x56\x12\x04"
+ "\x36\x18\xd4\x5b\x34\x04\x38\x28\x14\xcf\x69\xd6\xa9\xf4\xe2\x4b"
+ "\x44\x54\xa7\x43\xd9\x0c\x86\xf8\xd2\xd5\x94\xae\xd6\x93\xe2\x54"
+ "\x12\xe4\x12\x88\xb6\x48\xa0\xe5\x8e\x56\xbd\xe0\x0c\x7d\x58\xc3"
+ "\xcb\x67\x5f\x0a\x0d\x7b\x58\x47\xf3\x1e\xaa\x77\x85\x3d\x54\xe5"
+ "\xcc\x48\x0a\xa0\x1b\x0c\x01\x68\xab\x33\xef\x21\x13\xcd\x87\x3d"
+ "\x23\x29\x18\xfb\xd0\xc5\x6b\x21\xee\x56\xed\x80\x1c\x88\xbb\x68"
+ "\x2d\x89\x2c\xbc\x44\xf4\xb4\x45\x2f\x40\xf9\x1b\x70\x8d\x52\xc8"
+ "\x23\x83\x4b\x38\x95\x0e\xf7\x44\xe4\x44\x8a\xf1\x3b\x20\x7e\xbb"
+ "\x1e\x7d\x57\x80\x6d\xa2\x2d\x86\xf8\x9d\xeb\xf4\xdd\xac\x2f\xfb"
+ "\xd8\xef\xeb\x64\xbb\x5c\x13\x7f\x99\x42\xdf\x82\x1d\xed\x82\x3c"
+ "\x2c\xc6\x3c\x99\xfc\xcb\x34\xb4\xed\xc5\x4b\x64\x22\xd8\x19\x09"
+ "\x36\xe8\x21\x5e\x9c\xdf\xc5\xf0\xd0\x53\x1a\xc4\xa8\x87\x6d\xce"
+ "\x1d\x92\x6d\xe7\xc1\xb6\x73\x6e\xdb\x30\x2e\xcc\x1f\x7f\xef\x4e"
+ "\x17\x6c\x1a\x85\x75\xf3\x1b\x75\xfa\x8d\x71\xf8\x1e\xb5\x65\x43"
+ "\x52\x37\xb1\x5a\xee\xf7\xf7\x6f\x39\x6f\x91\x70\xaa\x29\xa9\x9b"
+ "\xff\xec\x97\x14\x7d\x83\xcf\xbe\x45\x26\x9a\xa1\x5e\x1f\xb5\x9d"
+ "\x25\x74\x70\x49\xdd\x21\x7d\x73\x77\xe3\x4a\xf3\x17\xd7\xf3\x59"
+ "\xb4\xd6\x1e\x89\x7e\xad\x44\x43\x8e\x40\xd3\xdb\x23\x6f\x23\x87"
+ "\x8f\xb5\x93\x87\xd3\xf1\x5d\x2d\x4d\xd7\x2d\x22\x41\xa7\x02\xde"
+ "\xd3\x67\x9c\xc0\x77\x51\xe5\x36\xcf\x77\x51\x6f\x87\x93\x80\x77"
+ "\x4c\x24\xe0\x4f\x16\x12\xf0\x6e\x3a\x01\x39\xcf\xfd\xcf\xe5\x0b"
+ "\xde\x1c\x45\x36\x3b\xe8\x37\x34\x4f\xad\xcf\x16\xa8\x6d\xc1\x78"
+ "\x55\x83\x69\x2d\xbe\xbb\x79\xe7\x7d\xc8\xbf\xef\xa0\x5d\x55\xe3"
+ "\x39\xea\x4b\x49\x25\x43\x9a\x02\xde\xa9\x54\x5b\x6f\x8c\x73\x84"
+ "\x26\x66\x3a\xa8\x81\xd8\x75\x69\x89\x6d\x79\x0f\x59\xec\xe8\x77"
+ "\x7b\x04\x39\xe8\xed\xb7\xd5\xaa\x4c\x42\xa1\xfc\x29\xd5\xe2\xbb"
+ "\x46\x43\x01\xec\x58\x96\xac\x1c\x43\xee\xb5\x61\x79\x63\x5d\x28"
+ "\xe6\xe1\x1a\xac\x0f\x39\x52\xbd\xb1\x04\x4c\x48\x74\x0a\x84\x38"
+ "\xe1\xf9\x8c\xaf\x49\x38\xae\x4d\x5b\x08\x72\x0f\x3b\x83\xb0\x1e"
+ "\x1b\x4c\x8b\xbe\x20\x67\x52\x88\x90\xf1\x3d\x19\x04\x98\x60\xf5"
+ "\xd1\x05\xf5\x71\x41\xbd\xda\x06\xbc\xe2\xda\x7c\x91\xa8\x91\xa7"
+ "\x70\x9d\x17\x73\x73\x03\x71\x9d\xd7\x07\xef\x5e\x49\x42\x1d\xe7"
+ "\x93\x42\x2c\xe7\x93\x86\xbc\xec\x22\xa1\xc1\x29\x44\x53\xb8\x12"
+ "\xb0\xb8\x0a\xea\xe7\x39\xa8\x9f\xcd\xbc\x7e\xca\xf8\xa3\xcf\xd7"
+ "\x99\xf0\xf7\xf7\xac\x6e\xee\x90\xea\xe6\x3a\xc0\xdf\x5a\x37\xfe"
+ "\x1c\xab\xf4\x42\xa1\x40\x09\xd8\x08\xf9\xbe\xaf\xb1\x78\xf3\x8d"
+ "\x41\xe8\x7b\xa4\xe3\x66\x59\x80\xf3\x21\xad\xd4\xb1\x0f\xca\x22"
+ "\x70\xbc\xa0\xa3\x3b\x13\x33\x0f\x27\x34\x12\xb7\x5f\xe4\xbd\xf1"
+ "\xed\x51\xb7\x11\xdd\x7f\xd0\xf3\xa7\x02\xde\x29\x87\xf0\x20\xdd"
+ "\x03\xb7\x68\xa0\x1c\xc7\x73\x3f\xc9\x7b\x7a\xf4\x85\x36\x04\xbc"
+ "\xb3\x15\x74\x11\x7c\x7f\xff\x19\x7b\xdf\xf6\xa7\x46\x90\x25\x4e"
+ "\xc8\x73\x47\x68\x70\xba\x2b\xf4\x61\x9d\xe9\x89\x76\xc6\x57\x76"
+ "\x28\x83\x33\xcb\x89\xf0\x70\x33\xe4\x8d\x13\xf2\xa6\x55\x3f\x10"
+ "\x78\x2b\x01\x79\x8b\x1a\xef\x9a\xbd\xb1\x81\xba\x16\x2c\x0d\xa0"
+ "\x90\x2f\x41\xe8\xfb\x7e\x28\x85\xd0\x4d\x67\x21\x8f\xac\x75\x04"
+ "\xd2\x16\x0c\xdc\x16\x52\xb8\x96\x84\xee\x86\xfc\x19\xd4\x0c\x7d"
+ "\x9a\xdc\xdf\xd5\xbe\xb5\xb9\x3a\xd0\x09\x38\x47\x1e\x53\x6f\x51"
+ "\xdd\x04\x65\x15\xbc\x1d\xeb\x2d\xd4\x63\xf5\x16\xc6\xab\xac\x6c"
+ "\x1d\xeb\xf4\x11\xf6\x75\x7a\x1d\xec\xa3\x64\xae\x93\x79\x86\x66"
+ "\x97\x27\x20\xcf\x99\xd3\x1b\x88\x03\xf2\x32\x18\xdb\xc4\x75\xfa"
+ "\x70\x96\xa7\x8f\x43\x9e\x2e\x23\x41\x53\x6c\x44\x05\x76\x69\xc0"
+ "\x66\x72\x24\xe9\x14\x72\xab\xd6\x09\xf5\x08\xf3\x19\x74\x0a\x14"
+ "\xb0\xe6\xca\x0b\x4e\x9f\x97\xac\x23\x87\xf4\xc7\x09\xce\xf1\x9a"
+ "\xd1\x46\xbf\xc2\xf7\x7d\xe6\x74\x07\xa1\x43\x13\x33\x29\xf3\x9d"
+ "\xbe\xb3\xed\x70\x82\x8d\xf8\xc7\xf4\xbb\x4f\xb9\x31\xfd\xee\x53"
+ "\x6e\x4c\xbf\xcb\xe6\x60\x52\xe2\xba\xad\x04\x70\x1d\xaa\xc4\x75"
+ "\xc5\x73\x57\x15\xd7\xf3\xbb\x8f\xeb\x97\xcf\x29\x70\xbd\xf9\x5f"
+ "\x83\xeb\xcf\x0c\x0c\xd7\x01\xf6\x28\x86\xd7\xed\x66\xc7\x3b\xd0"
+ "\xff\x7d\x77\xb1\x8c\xdb\x4f\xff\x80\xb8\xfd\x73\xc9\x0f\x15\xb7"
+ "\x6d\xad\x7a\x1d\xec\x7d\x8e\x5b\xd0\xd9\x65\xdc\x7e\x66\x68\x27"
+ "\x72\xfe\x21\x7e\xa9\xb1\xa4\x4e\x97\x41\xee\x06\x9e\xd0\xab\xb7"
+ "\x8c\x22\x47\x58\x1e\xbe\xa7\xd7\x3d\x40\x5d\xa7\x02\xfe\x7c\x02"
+ "\xf1\xd4\x9e\x45\xa9\x2b\x74\x91\x26\xe3\x73\xa2\x71\xe5\x85\x59"
+ "\xcc\x8e\xbd\x44\x9d\x42\x44\x7c\xcf\x4a\x07\x1f\xd8\x05\xe3\x70"
+ "\xf6\x0e\xd6\xb5\xe3\x55\x0d\xbe\xa7\xc4\x77\x23\xce\x9d\xc9\x26"
+ "\xd7\x8e\xcc\x72\xd7\xe0\x4a\x0b\xdd\x71\x20\x1a\xdf\xcd\xb6\x66"
+ "\xbf\xa7\x97\xdf\xcd\xfb\xec\x1b\x85\x26\x9b\xa0\xbe\xc0\x98\xaa"
+ "\xf2\x55\x38\x0a\x60\xc7\x47\x70\x0c\x80\xe3\x0e\x36\xc6\xea\x56"
+ "\x3b\xf7\x1e\x5f\x27\x37\x2f\x31\x4f\xe2\x41\xf6\x5b\xe2\x94\x09"
+ "\x64\x50\x93\x74\x0e\xf6\x54\xca\xef\xfa\x3b\xe4\xdd\xf9\xb1\x10"
+ "\xe3\x86\x3c\x11\xf9\xf7\x07\xfc\x1a\xbf\xc3\x91\xf4\xb1\x6b\x57"
+ "\x64\x9c\xcd\xb4\xf9\x14\x69\x0e\xa8\x8c\x34\x43\xdb\xef\xca\x4f"
+ "\xcc\xc3\x77\x69\x88\x7b\x39\xde\x60\x28\x6f\xd3\x7a\x26\xc3\xe6"
+ "\xe3\x73\xe5\xfd\x2a\x93\xe6\x07\x5b\x70\x0c\xd9\x4a\x93\xee\x92"
+ "\x8e\x77\x22\xb6\xb9\xbf\xa5\xf2\x29\x0a\xf9\x87\x6b\xb3\x77\x7c"
+ "\x9b\x84\x6b\xa6\x67\x8a\xba\x8f\x36\xf2\xf6\x56\xb6\x17\xd7\x55"
+ "\xc7\x6f\x7f\x6e\xc9\x24\x99\xad\x3e\xd6\x55\x77\x7f\x23\x54\xb9"
+ "\xd8\xb5\xf3\x57\x99\xad\xd9\x95\x7b\xa0\x0f\x50\xa1\x4c\xb3\xaf"
+ "\xb2\x00\x79\xbf\x73\xfa\x77\xaf\x1c\x2a\x4f\xfb\xd3\x33\x57\xef"
+ "\xa4\xdd\xd3\xf5\x7e\xb4\xdf\x7e\x75\xe4\x0c\xe3\x82\x32\xa7\xc9"
+ "\x65\x37\xa8\x0f\x6d\x3c\xdb\xcd\x3e\xd1\xfb\x7e\xe7\x3f\x73\xe6"
+ "\x2d\xd2\x3b\xc6\x81\xee\xf1\xa3\x88\x73\x95\x21\x16\xdf\x6d\x60"
+ "\x5f\x6f\x53\x32\xff\x9e\xac\xa6\xcc\x41\xb0\xdf\xf7\xe6\xca\x6a"
+ "\xa1\xdd\x6e\x20\xc1\x16\xa2\x99\x6f\xcd\xa0\x39\xe7\x48\x24\x5d"
+ "\x67\x50\x6f\x3f\x47\x66\xdb\x5b\xb4\x03\x5e\x48\x25\x62\x3b\x70"
+ "\x72\xfb\xea\x24\x35\x7e\xbb\xf6\x41\x93\x49\x30\x3b\x2a\xb1\x9f"
+ "\x19\x89\xed\x00\xda\xee\x6c\x31\x04\x3f\x77\x01\xdf\xff\x5e\x24"
+ "\xa6\x47\x7e\x07\xed\xc0\x7f\xed\x0c\xdc\x04\xdc\x07\xdc\xc5\xda"
+ "\x83\x1e\xb4\x05\xed\xd0\x16\xcc\x33\x50\xdb\xd1\xba\x2f\xf0\x9d"
+ "\xb4\x26\x63\x0d\x19\x84\xfa\xf1\x1d\x32\x6b\x1f\xee\x87\xf6\x01"
+ "\xae\x61\x2c\xd1\xd1\x3e\xe8\xe6\x93\x4e\xed\x03\x8e\x43\x8e\xd6"
+ "\x37\x12\xc0\xf2\x8d\xf3\xad\x6a\xdb\x66\x2b\x75\xe1\x98\xc4\xec"
+ "\x38\x8b\x73\x0c\x05\xcb\x6d\x05\xb6\x13\xed\x52\x3b\x51\x28\xb5"
+ "\x13\xaf\xf4\x41\x3b\xf1\x0a\xb6\x13\xc7\x89\xf0\x32\xb6\x11\xd0"
+ "\x3e\xfc\xf1\x9f\x16\xc1\x0e\x6d\x42\xf7\xca\xf9\x2f\x29\x7e\xf1"
+ "\x93\x9f\xf8\xa8\x0b\xda\x62\x2c\xe7\x0d\x50\xbe\x58\xce\x66\x3d"
+ "\x94\x6d\xdd\x8d\x71\x6d\x10\xee\xc8\x8f\x8d\x2e\x3b\x63\x11\x68"
+ "\xde\x2f\x12\xda\x00\x0f\xeb\x2f\x12\xc1\x11\xba\x48\xbf\xf7\x01"
+ "\xa3\x80\xe3\x56\xd7\xce\xd8\x34\x3e\x46\x3e\xf0\x35\xfa\x68\xd4"
+ "\x8d\x44\x83\xfe\x53\x27\x35\xa8\x5d\xdf\x19\x06\xb9\x9e\xd4\x06"
+ "\xd9\xbf\xd3\x0e\x78\xfe\x09\x22\x5a\x9e\x4c\x52\x67\x3c\x48\x34"
+ "\x1f\xfe\xd5\x28\x1c\xb5\x42\xdd\x1e\xa0\x4a\xa0\xa0\xbf\xf8\x14"
+ "\x99\x55\xfc\x08\x99\x5e\x74\x86\xe8\x8a\x96\x91\x89\xbb\xcf\x00"
+ "\x86\x9e\x34\x04\xdb\x19\x3e\xda\x4c\xec\x7d\xff\x32\x12\x43\xc3"
+ "\x7e\x1e\x0d\xc7\x59\xc6\x65\x30\x9e\x09\x8b\x8d\xa6\x43\x17\xe9"
+ "\x5d\x20\xb7\x1d\xc6\x6e\xd0\x47\x07\x1b\xf6\x1f\xf1\x85\x9b\xdd"
+ "\xdd\xec\x43\xcc\x4b\x00\xdc\xd4\x02\x6e\xbe\xf7\xc4\x0d\x8e\x5b"
+ "\x19\x76\xe6\x71\xec\xe0\xbb\xbc\x62\x65\xff\xe2\x91\xc3\x3d\xc6"
+ "\x4f\x01\xf4\x9f\xdb\xbc\xf0\x53\x70\xae\x77\xf8\xb1\x03\x7e\x0a"
+ "\xb2\x00\x3f\x47\x88\xb0\xcb\xd5\x1b\xfc\x1c\x60\xf3\x7f\xa1\x9f"
+ "\x8f\x7f\x9b\xb4\x7f\x10\x96\x73\x43\xc0\xfe\x81\xf7\xeb\x55\xa4"
+ "\x87\xb8\x2a\xbf\x02\xae\xac\x1c\x57\xa6\x3b\x7b\x80\xab\x32\xc0"
+ "\x55\xf9\xe5\x71\x75\xd1\x1f\xae\xca\x3b\xe3\xea\xc3\xa8\xfe\xc5"
+ "\x15\x9b\xd3\xf3\x47\x80\x2b\x53\x90\x27\xae\x3e\x78\x8c\xe3\xea"
+ "\x83\xa5\x3d\xc7\x55\xdc\x15\xf8\x2a\x4e\xe2\xab\x8f\x77\x76\x1f"
+ "\x57\x02\xa1\xa0\xff\xf2\xb8\x3a\xeb\x07\x57\x71\x3e\xf8\xea\xa3"
+ "\x4d\xfd\x8b\x2b\x36\xe7\xe8\x8f\x00\x57\x1f\x27\x7a\xe2\xca\x74"
+ "\x80\xe3\xca\xb4\xbf\x17\xb8\xba\x02\x5f\xc5\x49\x7c\x55\x75\xb6"
+ "\x07\xb8\x32\x00\xae\xae\xc0\x57\x27\xfd\xe1\xca\x07\x5f\x1d\x3c"
+ "\xde\xbf\xb8\x62\x73\xa2\xfe\x08\x70\x55\x55\xe9\x89\xab\x83\x43"
+ "\x39\xae\x0e\x86\xf6\x1c\x57\xf1\x57\xe0\xab\x78\x89\xaf\x3e\x99"
+ "\xdb\x03\x5c\x95\x53\xd0\x7f\x79\x5c\x1d\xf0\x83\xab\x78\x1f\x7c"
+ "\xf5\xdf\x93\xfa\x17\x57\x6c\xce\xd6\x1f\x01\xae\x3e\xd1\x78\xe2"
+ "\xea\xd0\x0a\x8e\xab\x43\xcb\x7b\x81\xab\x2b\xf0\x55\xbc\xc4\x57"
+ "\x9f\x16\x76\x1f\x57\x01\x10\x7f\xfc\x15\xf8\x6a\x93\x3f\x5c\xf9"
+ "\xe0\xab\xea\x67\xfb\x17\x57\x6c\x4e\xd9\x1f\x01\xae\x3e\x4d\xf2"
+ "\xc4\xd5\x27\x87\x38\xae\x3e\xa9\xea\x12\xae\x6c\x0a\x5c\xd5\xdf"
+ "\x18\xd7\x9e\xc1\xc7\x83\x6f\x2e\x93\x70\xf5\xc6\x0c\xe3\x86\x35"
+ "\x44\xd8\xbb\x68\x97\xd7\x58\xf0\xb3\x6f\xbd\x31\x05\xb8\x60\x98"
+ "\x72\x3c\x09\x98\x6a\xe2\x98\xda\x7c\x12\x30\xf5\xf7\x5d\x82\x39"
+ "\xfd\x2c\xe2\x84\x61\xa8\x60\x19\x60\x08\xc7\x85\x2a\x51\xdb\x9d"
+ "\x31\xe0\x0b\x4d\x32\x96\x0e\x7f\xde\x27\x58\x5a\x08\x58\x3a\xe6"
+ "\x8d\xa5\x43\x6e\x2c\xfd\xd2\xcf\x18\xf0\x21\x3f\x58\x6a\xb8\x32"
+ "\x96\x76\xa3\x0f\x61\xd5\x55\xc2\xd2\xe7\x6e\x1f\xc2\x9e\x47\x2c"
+ "\x82\x63\x68\x77\xb1\xf4\x59\x85\x27\x96\x0e\x0f\xe3\x58\x3a\xac"
+ "\xed\x39\x96\xe2\xca\xfd\x63\x49\xee\x4f\x1d\x9d\xd1\x3b\x2c\x41"
+ "\xdf\xca\x03\x4b\x57\xee\x47\xb9\xb1\x74\x64\x64\xff\x62\xc9\xab"
+ "\x1f\x75\xcd\x62\xe9\x28\xf1\xc4\x52\x8d\x34\xee\xab\xf1\x3b\xee"
+ "\x73\x41\xdb\x85\xef\x9c\xf0\xf7\xb9\xce\x16\x43\xac\x13\xda\x34"
+ "\xfc\x9d\x2e\xbe\xa7\xd8\xb7\xb2\x56\x40\x3c\x65\x5f\x20\x91\xdb"
+ "\x53\xc9\x6c\xb5\x8d\x63\xc5\x01\x58\xd9\x76\x81\x88\x76\x3b\xe0"
+ "\xa4\x9d\x88\x6d\x90\xdf\x6d\xf6\x24\x75\x4d\x62\x23\xf9\xf0\x5c"
+ "\x2d\xb4\x65\x95\xa4\x08\x9e\xb1\x4b\x7e\x48\xd7\x06\x43\xf0\x73"
+ "\xeb\xd1\x0f\x79\x84\x98\x16\xbd\x02\xe5\x6f\xee\x75\xf9\xb7\x3d"
+ "\xe3\xaf\xfc\x0f\x78\x94\x7d\x81\xa2\xdc\xd9\xef\x05\x7a\xd8\x1e"
+ "\xb1\xf7\x54\x2b\x79\xd9\xcb\xe5\xfe\x72\x1f\x94\xfb\xcb\x52\xb9"
+ "\xf7\xae\x3d\x32\xfb\xff\xfe\x51\xc1\x15\xec\x9b\x02\x1b\xe7\x08"
+ "\x99\x17\x90\x23\xb0\xff\xd2\x16\x1a\x3b\xdd\xbb\xbd\x41\x7e\x38"
+ "\x17\xf0\xc5\x63\xd8\x36\xf9\xed\xc7\x48\x3c\x91\xf1\x34\xe7\x09"
+ "\xa9\x1f\x93\xd8\xb7\xfe\xc7\xcf\xe7\x5d\x3d\xbe\x38\x70\xe5\xb6"
+ "\xa7\x17\xfd\x18\xc4\x4d\x81\x17\x6e\xae\x06\x5f\xf4\x0c\x37\x5f"
+ "\x44\x7b\xf2\x45\xed\x8b\x9c\x2f\x6a\xb7\x77\xa5\xed\xb9\x02\x9e"
+ "\x2a\x14\x78\xb2\xba\xf1\x74\xec\x5d\xf4\x51\x76\x13\x4f\x15\x7d"
+ "\xeb\x77\xfc\x9f\xc2\xfe\xc5\x53\xdf\xf9\x1d\x7f\xd8\x78\x3a\x96"
+ "\xe9\x89\xa7\x2f\x4e\x72\x3c\x7d\x51\xdf\x7b\x3c\xc5\x29\xf8\x29"
+ "\x4e\xc1\x4f\x7f\x0b\x44\xdf\x64\xf7\xf0\x24\x06\xf5\xad\xbf\xf1"
+ "\xf8\xd9\xfe\xc5\x53\xdf\xf9\x1b\x7f\xd8\x78\xfa\x6b\xad\x27\x9e"
+ "\x8e\x4f\xe2\x78\x3a\x3e\xb1\x0f\xf0\x54\xe1\xdd\x27\xe6\x78\x3a"
+ "\x71\x3f\xf6\x9f\xbb\x89\xa7\xc5\x7d\xeb\x67\xac\xbb\xb3\x7f\xf1"
+ "\xd4\x77\x7e\xc6\x1f\x36\x9e\x4e\xe8\x3c\xf1\xf4\xb7\x4d\x1c\x4f"
+ "\x7f\xdb\xd8\x7b\x3c\xc5\x2b\xf8\x29\x5e\xc1\x4f\xff\x78\x1d\x7d"
+ "\x91\xdd\xc4\x53\x1f\xfb\x17\xff\xfe\x62\xff\xe2\xa9\xef\xfc\x8b"
+ "\x3f\x6c\x3c\xfd\x23\xc5\x13\x4f\x27\x8e\x70\x3c\x9d\xa8\xe9\x03"
+ "\x3c\x29\xf8\x29\x5e\xc1\x4f\x27\x2f\xa2\x0f\xb2\x7b\x78\x0a\x14"
+ "\xfb\xd6\xaf\x58\x7f\xb2\x7f\xf1\xd4\x77\x7e\xc5\x1f\x36\x9e\x4e"
+ "\x9a\x3c\xf1\x54\x3f\x92\xe3\xa9\x3e\xbc\xab\xbe\x20\xd9\x07\xa4"
+ "\xc4\x93\xff\xb1\x5d\xc3\xed\xde\x63\xbb\xee\xf9\x80\x60\x9c\xd7"
+ "\x63\x7f\xe2\x97\x63\xfe\x7f\xf5\x27\x22\x86\x64\x3f\xd0\x0f\xcf"
+ "\x07\xd4\x20\x7a\x62\xe8\x9f\xc9\x1c\x43\xff\x4c\xf2\x87\x21\x87"
+ "\xf2\x9b\xb4\x6f\x14\xdf\xa4\x9d\x25\xc2\xde\x95\x26\xe1\xa8\xf4"
+ "\x4d\x1a\x7e\x8f\x76\xf4\x74\x23\x79\xee\x12\xd1\x04\x27\x11\xcd"
+ "\xfc\x94\x0c\x9a\x83\x1c\xb2\xda\xa0\x7e\xe1\x0c\x99\x6d\x07\xcc"
+ "\x64\x37\x49\xdf\xa5\x01\x6e\x3e\xab\xb7\x91\x0f\x56\xe2\x77\x69"
+ "\xe5\xa4\x18\xe4\x1c\x79\xdc\x1f\x84\x3c\xc2\xbe\x49\x5b\x86\xdf"
+ "\xa4\x7d\x35\xde\xe7\x37\x69\x59\xdd\xfc\x26\x2d\x0d\x70\x60\x05"
+ "\x1c\x5c\x44\x0c\xbc\xeb\xf1\x2d\xda\xee\x2c\x85\x0f\xe8\x11\x3f"
+ "\x3e\xa0\xba\xae\xbd\x93\xe8\xf3\x6f\xd1\xce\x2b\xbe\x45\x93\x7d"
+ "\x40\x8b\x80\x3b\xba\x5d\xee\x5f\xf9\x5d\xff\x1d\x39\xc2\x09\x9c"
+ "\x30\x1f\xbf\x2d\xb7\xba\xfd\xc5\x1b\x93\xf1\xb7\xbf\xb1\xd1\x0e"
+ "\xe0\x0a\xfc\x7e\xfc\xad\x47\xaa\x99\xbf\xcf\x9c\x5e\x47\x9e\x6b"
+ "\x27\x1a\xb5\x45\xe2\x85\xa1\xb1\x69\x76\xe0\x06\x27\xb4\x4b\x50"
+ "\xd6\x83\xec\xab\x81\x1b\x2e\x00\x37\xac\x06\x6e\xb8\x08\xdc\x70"
+ "\xaa\x9a\x71\x03\x7d\x5e\x95\x80\x73\x73\x17\x37\x91\xe9\x85\x4d"
+ "\x64\x16\x72\x80\x73\xe7\x22\xbd\x7d\x68\xec\x42\xcb\xd0\x58\x03"
+ "\xdc\x4b\xe2\x18\x68\x33\x6d\x4f\x25\x8c\xeb\xb1\xec\x75\xcb\x90"
+ "\x0f\xfe\x77\xaa\x3d\x8b\x90\xde\xe0\xc0\xae\xf4\x09\x2a\x71\xe0"
+ "\x87\x03\x7a\x8d\x05\x2f\x3f\xf0\xee\x5e\x72\x00\x62\x61\xb7\xcc"
+ "\x01\xbd\xc2\xc2\x69\xbf\xbf\xff\xb9\x02\x16\xca\xbb\x80\x05\x6b"
+ "\x17\xb1\x50\x86\x73\x5a\xfb\xc0\xc2\x31\xc0\x42\x1d\xdc\x6b\xe4"
+ "\x58\xb8\xe8\x03\x0b\x5f\xdf\x79\xf5\xb1\xe0\xe9\x93\xb9\x76\xb1"
+ "\x70\x26\xb4\x67\x58\x88\xeb\x02\x2f\xc4\x75\x91\x17\x04\x82\x73"
+ "\x41\x77\xc6\x42\x1c\xf0\x42\x1c\xf0\x42\x9c\xc4\x0b\x67\x7d\x60"
+ "\xe1\x9b\xf8\xab\x8f\x05\x4f\x7f\xca\xb5\x8b\x85\x46\x5d\x0f\xb1"
+ "\xd0\x05\x5e\x88\xeb\x22\x2f\x08\x58\xde\x3e\x78\x21\x0e\x78\x21"
+ "\x0e\x78\x21\x4e\xe2\x85\x93\x3e\xb0\xf0\xed\xfd\x57\x1f\x0b\x9e"
+ "\xbe\x90\x6b\x17\x0b\x4d\x13\x7b\x86\x85\xf8\x2e\xf0\x42\x7c\x57"
+ "\x79\xa1\x1c\xe7\x1e\xee\x8c\x85\x78\xe0\x85\x78\xc0\x49\xbc\xc4"
+ "\x0b\x07\x7c\x60\xe1\xbb\x25\x57\x1f\x0b\x9e\x7e\x8c\x6b\x17\x0b"
+ "\xcd\x7e\xd7\x7f\xbd\x02\x16\xba\xc0\x0b\xf1\x5d\xe4\x85\x80\x20"
+ "\x9c\xb3\xd7\x07\x16\x80\x17\xe2\x81\x17\xe2\x25\x5e\xd8\xe4\x03"
+ "\x0b\x67\x57\x5c\x7d\x2c\x78\xfa\x20\xae\x5d\x2c\x9c\x9b\x73\x59"
+ "\x2c\xd0\xce\x58\x40\x1f\x02\x8e\x1f\x71\x4e\x6c\x86\x85\x27\x4c"
+ "\x42\x3b\x45\x2c\x54\x93\xe7\xd7\x2b\xb0\xb0\x93\x8f\x23\x64\x1c"
+ "\xbc\xa8\xc4\x01\xfe\x7e\x09\x71\x00\xe3\x07\x07\x94\x3b\xcd\xff"
+ "\x79\x34\xfb\x5e\x69\x67\x6c\x12\x8e\x1f\xd0\xcf\x80\x63\x08\xff"
+ "\xe3\x87\xf3\x4f\xf5\x09\x06\x96\x03\x06\x9a\x7d\x8f\x23\xfb\x7c"
+ "\xfc\x70\xfe\x2a\x61\x00\xc6\x92\xaf\x6c\xee\x0d\x06\x2c\x7e\xd7"
+ "\xff\xf2\x8f\x01\xe8\x23\x74\x09\x03\xbc\x9f\x70\x79\x0c\xc4\xd5"
+ "\xba\x31\x00\xfd\x85\x9d\x71\x8d\xd8\x3f\xe0\x18\x88\xab\xf3\xdf"
+ "\x3f\xf8\x7e\xcd\xd5\xc7\x40\x1f\xf7\x0f\x7e\xb0\x18\xb8\x70\x9f"
+ "\xdf\xdf\x30\x22\x97\x03\xef\xcf\x1f\x3f\x8a\xd0\x27\x0d\xb1\xd9"
+ "\x4d\x24\xf2\x85\x27\xc8\x6c\x9c\x37\x66\x6f\xbb\x4d\xd8\x9c\x42"
+ "\xbf\xc1\xdf\x56\x3b\x20\x1d\x38\x0f\x28\xc3\xc7\x79\x6d\x90\x39"
+ "\xc9\x42\x9e\x03\x2c\xbc\x00\x69\xc0\xf9\xe3\x83\x53\x6e\x8c\x3b"
+ "\x6a\x3d\x4c\xda\x5b\x0c\xa4\x26\xb1\x89\x2c\xd0\x53\xbb\xb9\xde"
+ "\x84\xbf\x61\x14\x4d\x6b\x0f\xe3\xef\xc4\x07\x3c\x9c\x4e\x84\x73"
+ "\x01\x2d\x1a\xf4\x29\x4d\x49\x27\x9a\x82\x26\xee\x47\x7a\xee\x1c"
+ "\x21\x87\xd2\x09\xe1\xe5\xde\xb2\x22\xf0\xe9\x3e\xf0\x21\x2d\x86"
+ "\x72\xaf\x97\xcb\xfd\x90\xa7\x0f\x49\xe8\xc2\xef\x19\xbb\xe0\x3b"
+ "\xbc\x2a\xbf\x67\x3c\xdf\xf9\xf7\x8c\x3d\xf3\x1d\x5a\x63\x2e\xfb"
+ "\x1d\x91\xd4\x0f\xd8\x90\xc6\xea\x3d\x2b\x57\x3b\x70\xbf\x39\xbd"
+ "\x92\x7d\x1f\x8d\xf5\x1c\xeb\x3c\xe2\x23\x03\xd2\x8b\x18\x41\x3c"
+ "\xcc\x2f\xb3\xdb\x1f\xb2\x12\xc1\x35\x34\x36\x0d\x31\xe1\x5a\xa5"
+ "\x0d\xda\x0e\x69\x32\x27\x9e\x82\x72\xbf\x40\xcc\xa7\xa5\x32\x5f"
+ "\x7f\x0a\xca\xd2\xea\xa0\xab\xf4\x03\x26\x5b\x89\x26\xe3\x04\xd1"
+ "\x3c\x8c\xbf\x39\x86\x76\x60\x37\xf4\x09\x8a\x9f\x20\xd3\xa1\x3d"
+ "\x48\xb0\x4b\xdc\xe0\x92\xfd\x4a\xd8\x46\x00\x26\x5e\x58\x09\x98"
+ "\x48\x03\x4c\x3c\x84\x98\xb8\xb8\x25\x70\x8d\x0f\xff\x72\x37\x30"
+ "\xc1\xfc\xcb\x4b\x01\x13\xa7\xdd\x98\xe8\xf0\x2b\xfb\x69\x13\x4c"
+ "\x8b\x7a\xf1\x6d\xa1\x0f\x3e\xe8\xb5\x5f\xf9\xbc\xe4\x57\x56\xf0"
+ "\x41\xcf\xb0\x71\xc9\xff\x9c\x98\xfe\xb1\x51\x7e\x65\x6c\xb4\xca"
+ "\xd8\xb0\x5e\x19\x1b\xad\x5a\x1f\xd8\x28\x53\x60\xa3\x56\x81\x0d"
+ "\xee\x67\xda\x19\xdb\xd8\x19\x1b\xad\x85\xfd\x83\x0d\xaf\xef\x7e"
+ "\xae\x59\x6c\xd8\xfc\xae\x7f\xeb\x1f\x1b\x71\x5d\xe0\x8d\xf3\x12"
+ "\x36\xe2\xba\xc0\x1b\x6d\xd3\x3b\x63\x43\x20\x6e\x6c\xc4\x29\x78"
+ "\x43\xf2\x3b\xed\x8c\xf3\xc1\x1b\x6d\xef\xf7\x0f\x36\xbc\xbe\xe1"
+ "\xb9\x66\xb1\xd1\x9e\xd7\x03\x6c\x74\x81\x37\xbe\x94\xb1\xd1\x05"
+ "\xde\xb0\x27\xf8\xc0\x86\x41\x81\x0d\x05\x6f\x48\x7e\x28\xec\x73"
+ "\x76\xc2\x86\xfd\x78\xff\x60\xc3\xeb\x7b\x9c\x6b\x16\x1b\x8e\xf2"
+ "\xee\x63\x23\xbe\x0b\xbc\xf1\xa1\x84\x8d\xf8\x2e\xf0\x86\x73\xb9"
+ "\x0f\x6c\x94\xbb\xb1\x11\xaf\xe0\x0d\xc9\x2f\xb5\x33\xde\x07\x6f"
+ "\x38\xbf\xef\x1f\x6c\x78\x7d\x5b\x73\xcd\x62\xc3\x55\xd3\x03\x6c"
+ "\x74\x81\x37\x32\x64\x6c\x74\x81\x37\xe8\xb6\xce\xd8\x08\x08\x52"
+ "\x60\x43\xc1\x1b\x92\x9f\x6a\x67\x7c\x67\xde\x10\xc9\xa0\xfe\xc1"
+ "\x86\xd7\x77\x32\xd7\x2a\x36\x44\xd2\xd8\x15\x6c\x6c\xb4\xfa\x18"
+ "\xa7\x9c\xe6\xd8\xb0\x83\x8c\x12\x17\xca\xb1\x09\xa4\x4f\x5c\x00"
+ "\x63\x16\xc4\xc4\x6f\x36\x12\x81\xe1\xc2\xaa\xc0\x85\xa8\x2a\x41"
+ "\x5c\x4c\x4a\x02\x5c\x7c\x2d\xe1\x42\x1e\x97\xb0\xb9\x57\xf8\xd8"
+ "\x44\xf6\x59\xc9\xe3\x93\xe7\x71\xcc\x9a\x24\x63\x42\x18\x13\x98"
+ "\xdc\x07\x98\xf0\xf8\xee\x41\x81\x89\x07\xfd\x8c\x4f\x1e\xe8\x39"
+ "\x26\x5e\x81\xb1\xab\xbd\xaf\x7f\xfb\x24\x63\xe2\x44\x6f\x31\x21"
+ "\x5c\xf6\xfb\x07\xdf\x98\x90\xfa\x19\x7e\x31\xe1\xee\x5b\x70\x4c"
+ "\x7c\x79\x19\x4c\x04\x54\x74\xc6\x84\xd4\xaf\x60\xf3\x10\xf0\xbe"
+ "\x85\xec\xc3\x92\xfb\x17\x9e\x98\x10\x67\xf4\x0f\x26\xbc\xfa\x17"
+ "\xd7\x2c\x26\x02\x35\xfe\x30\x61\x14\x5c\xe5\xb0\x57\xc2\x6e\x82"
+ "\xbd\xda\x29\x90\xb9\x85\x82\x8b\x7f\x6f\xce\xeb\x8c\xf7\xfd\x1b"
+ "\xe8\x6f\xe7\x25\xa2\x0c\xdd\x22\xb2\x77\xea\xb2\x0e\xe7\x00\x82"
+ "\xf3\x21\x9a\xd4\xaa\x44\x2c\x13\x94\xbd\x51\xd6\xa5\xde\x42\x62"
+ "\x20\xfd\x5c\x4e\x20\x99\x5c\x2e\xe6\x06\x94\xa3\xd9\x95\xa7\x21"
+ "\x2c\x48\xd2\xc9\xd6\xa7\x77\x0a\x02\xea\xf2\x8e\xfb\x26\x49\x46"
+ "\xe7\xcc\x22\x3a\x65\xdc\xa0\x0b\xe3\x94\xe5\x06\xa0\x9c\xf3\x86"
+ "\x08\xad\x53\x25\x46\x2a\xe5\xe8\x3d\x44\x29\xf7\x13\x49\x9f\xde"
+ "\x23\x1d\x11\x84\xa8\x55\x3a\x9e\x96\x74\x41\x4e\xcb\x40\xa6\x33"
+ "\xf8\xbd\xd9\xa0\x73\xa2\x87\xce\x1b\x08\x19\x04\xf2\xa8\x77\x50"
+ "\x12\xb3\x1b\xe5\x07\xd1\x01\x37\x2c\x64\xfa\x55\x62\xb4\x4b\x20"
+ "\xd1\x3c\x5d\x44\x2c\xec\xb0\x59\x47\x8c\x9e\x71\x04\xcb\xf9\xa5"
+ "\x94\x43\x19\x2a\x74\xc8\xa8\x99\x1d\x03\x02\x0d\x60\xc7\x2c\xa5"
+ "\x1d\x5c\x8e\x4c\x95\xe4\x34\x90\xae\xd9\x1d\x65\x99\xa7\xd6\xcb"
+ "\x72\x80\xdf\x61\x50\x16\x26\x33\xd4\x37\x29\x1f\x06\xd3\xec\xf7"
+ "\xd3\xa5\xbc\x88\x51\xea\x1c\xa4\x52\x35\x14\x4a\xf9\xe5\xca\x7e"
+ "\x7f\x22\xc8\x86\xb8\xb6\x88\x73\x3a\xf4\x66\x69\x88\x5c\xae\x34"
+ "\xcb\x31\x84\xe9\x85\x56\xc9\x29\xa8\x74\x52\x3e\x0c\x41\x59\x78"
+ "\x26\x8e\xa7\x4b\xd3\x51\xae\x4e\x41\xc4\x7b\x26\x85\x6c\x28\xcf"
+ "\xe3\x4f\xab\x21\x6d\xf7\x75\x96\x0f\xf2\x96\x1f\xca\xe5\xff\x52"
+ "\x09\xf2\x09\x9d\xe5\x35\xde\xf2\x61\x5c\xfe\x03\x0d\xc8\x2f\xec"
+ "\x2c\xef\x08\xf1\x92\xbf\x99\xcb\x9b\x92\x40\xde\xd0\x59\x5e\xe7"
+ "\x2d\xaf\xe5\xf2\x35\xa1\x20\xbf\xb8\xb3\x7c\x8c\xb7\xfc\x30\x2e"
+ "\xff\xb1\x09\xe4\x13\x3b\xcb\x67\x7a\xcb\x0f\xe7\xf2\x87\x10\xd7"
+ "\x4b\xbd\xe5\x8b\x99\x2c\x89\x90\x64\x47\x70\xd9\x4f\x52\x40\x36"
+ "\xc9\x47\x5a\x03\x24\xdd\xd1\x92\x7c\x38\x97\x7f\xbf\x16\xe4\x97"
+ "\xfb\x28\x2b\x6f\xf9\x91\x5c\xfe\x9f\x3a\x90\x4f\xf1\x51\x56\xde"
+ "\xf2\xa3\xb8\x7c\x6d\x0c\xc8\xa7\xf9\x28\x2b\x6f\xf9\xd1\x5c\xfe"
+ "\x0b\x23\xc8\xa7\xfb\xc8\x7b\x4f\xf9\xe0\x63\x0d\x20\xb7\xb1\x30"
+ "\x4b\xae\x3f\x1e\xf9\xee\xad\x7b\x0c\xd7\xfd\xb7\x68\x78\x26\xd3"
+ "\x47\xbe\x7b\xcb\x47\x70\xf9\x13\x99\x20\xbf\xb5\xb3\x3c\x51\x71"
+ "\x79\x32\x4d\x92\x1f\xcb\xe5\xff\x81\x79\xb9\xcd\x47\xde\xe3\x7d"
+ "\x93\x54\x4f\x23\xb9\xec\xd1\x44\x90\xdd\xee\x23\xdf\x95\xb2\x51"
+ "\x5c\xf6\xdc\x76\x90\x35\xfa\xc8\x73\xa5\xec\x38\x2e\x7b\x6a\x0e"
+ "\xc8\xe6\xf9\xc8\x6f\xa5\xec\x2d\x5c\xf6\x74\x02\xc8\xee\xf2\x61"
+ "\x6f\x84\x42\x56\xcf\x65\xcf\x2c\x06\xd9\x02\x1f\xe5\xa2\x94\x1d"
+ "\xcf\x65\x2d\x58\x86\x25\x3e\xca\x45\x29\x3b\x81\xcb\x36\x62\x5d"
+ "\x2b\xf5\x51\x26\x4a\xd9\x7f\xa3\xc1\x4d\x69\x12\xb7\x96\x79\xcb"
+ "\x02\x06\x4c\xc0\x43\xd5\xc0\x85\x13\x69\x76\x73\x66\x31\xe7\xb5"
+ "\x3d\x28\x27\xcb\x50\xc1\x71\xab\xa2\x1d\x98\x44\xb3\x1b\x96\x4a"
+ "\xfc\x57\xee\xad\x8f\x0a\xa2\x52\x76\x32\xcd\x65\xb8\x40\xd9\x8a"
+ "\xce\xb2\x41\x4a\xd9\x29\x34\xdb\xba\x4d\x92\xad\xec\x2c\xab\xe9"
+ "\x90\xa5\xd9\x97\x4a\x41\x66\x7f\x91\xc4\xab\x0a\x3b\xa7\x29\xf4"
+ "\x4d\xa5\xd9\x36\x93\xa4\xcf\xd4\x59\x9f\x4e\x29\x3b\x8d\xe6\x06"
+ "\xcc\x91\x64\xab\x3a\xcb\xc6\x28\x65\x6f\xa5\xd9\xed\xf5\x92\x6c"
+ "\x75\x67\xd9\x4c\xa5\xec\x74\x9a\xed\xb0\x49\xb2\x35\xde\xb2\x45"
+ "\xbc\x0d\x12\xa4\x72\x9a\x41\xb3\x69\xa8\x24\x5b\xeb\xd1\xc6\x0a"
+ "\x2a\x56\xc7\x8a\xb8\xdc\x4c\x1a\x7c\x21\x4f\x2a\xcf\x63\x1e\x6d"
+ "\x6b\x96\x2a\x04\xdb\x94\x42\x2c\xcf\xdf\xde\x6f\x05\xd9\xdb\x24"
+ "\x7d\x75\xde\x6d\x9f\x64\xdf\x2c\xb8\x57\x2f\xb7\x4f\xd0\xee\x34"
+ "\xf8\xea\xf7\xa4\x4c\x20\x3f\x69\x12\x83\x77\xf1\xb6\x51\x5a\x5f"
+ "\x58\xd4\xb0\x6b\x57\xe9\xcc\xe8\x05\x56\xea\x50\x86\xe5\x08\xb4"
+ "\x76\x8a\x95\x88\x38\xa7\x37\x1d\x9a\x68\x68\x80\x70\x4b\xd4\x6d"
+ "\xa4\x35\x37\xb8\xb4\x01\xe2\xc4\x79\x5f\xe1\xbc\xbc\x81\xfc\x7e"
+ "\x0e\x9e\xe7\x64\xe1\xfa\x87\x31\x2a\x67\x7e\xb0\x05\xd7\x4b\x2c"
+ "\x86\xeb\x6c\xd8\xd9\xda\x84\xd0\xc7\xa4\xbf\x25\x31\xa6\xb5\x0e"
+ "\x72\x26\x9d\x08\x6c\xdd\x6c\x31\xd8\x49\x57\x25\xcd\x06\x5b\x4a"
+ "\x20\xde\xa5\xa7\xe0\x9a\xd9\x82\x6b\x93\xe6\xa9\x07\x9a\x52\xdb"
+ "\x41\x46\xfd\x4b\xcb\xd0\xe4\x12\xfa\xcc\xaf\xbf\x4d\xd9\x4c\x46"
+ "\x37\x89\x6a\xd6\xe6\xe1\xbc\xb7\xae\xa1\xea\x81\x6c\xbe\xdb\xf3"
+ "\x49\x77\xb1\xb9\x6e\x45\x4d\x32\xce\x71\x8b\x73\xdd\xca\xf3\xdc"
+ "\xf2\x78\x34\x0b\x5b\x80\xaf\x68\xc9\x1a\xbe\x86\xa3\xa8\x7e\x9d"
+ "\xa5\x2f\x8b\xd6\xd2\xc8\x99\x5a\x57\xfb\xd6\x4c\x5c\xe7\xda\xb4"
+ "\xb9\x89\x9c\x92\xee\xa1\x7e\x49\x67\x94\xb7\x4e\x7c\xce\x32\x66"
+ "\x0d\x81\x7c\xd1\x3a\x8d\x77\x95\xb8\x34\x77\x15\x50\x63\x7c\xad"
+ "\x79\x79\x03\x61\x69\x15\x35\x2f\xd3\xe0\x07\xcd\x2e\xe3\x5d\x5b"
+ "\x21\xdc\x64\xb6\xb6\xb3\x70\xd0\x6d\xc1\x7e\x73\x8b\x66\x6e\x0d"
+ "\x35\xce\xad\x35\x0d\x6f\x27\xa7\x71\xb5\x00\x88\x0f\xc3\xe9\x8e"
+ "\xf8\x5a\xcc\x63\xd7\x8e\x78\x53\x80\x96\x88\x2d\x83\xe7\xd6\xb4"
+ "\xe6\x6a\x34\xf2\x3a\x75\x72\x5c\xa8\xb7\x41\xd2\xd5\xe5\x39\x7b"
+ "\x45\xf5\x2e\x36\x67\x6f\xae\x26\xb1\x41\x75\xdf\x31\x36\x67\xaf"
+ "\x9c\x97\x5d\xd7\x31\x07\x75\xf8\x5e\xd7\x84\xa8\xe9\x4e\xb5\x1e"
+ "\xf4\x9b\xa0\xef\x9d\xc0\xb1\xa1\xa9\x69\x50\xdd\x7d\x5a\x3a\xaf"
+ "\x6b\x50\xdd\x7b\x9f\x74\x8e\xeb\x7f\xee\x92\xce\x2d\xf2\xbc\xc9"
+ "\xbe\xe7\x71\x0e\x76\x00\x16\x42\x5d\xbb\x0d\x41\x38\x6e\x60\xf6"
+ "\x0c\x0d\x76\xe8\x46\x11\xd5\x19\x71\x70\x1a\xc4\x19\xca\xcb\x69"
+ "\xf0\x3c\x38\xaa\xa5\xa3\x45\x3a\x52\x94\x61\x78\x0f\x5d\xb2\x0b"
+ "\xca\xa2\x9a\x97\xcf\x60\xbe\xf6\x2b\xe2\x0a\xb0\x47\x07\xc7\x57"
+ "\x33\xbd\x3b\x93\x4b\x94\x36\x44\x4f\x9d\x76\xeb\xf4\x19\x33\x6f"
+ "\x9b\x75\xfb\x92\x47\x1e\x5d\xfa\xd8\xb2\xc7\x93\x92\x9f\x78\x72"
+ "\xf9\x8a\x95\xab\x52\x9e\x4a\x5d\x9d\xb6\x66\xed\xba\xf4\xa7\xd7"
+ "\x83\x9e\x8e\x75\xbb\xe9\xee\x39\x2a\xab\x40\xa0\xac\xef\xc1\x38"
+ "\xd8\x3a\x4f\x18\xc6\x31\x37\xb8\x4a\xd4\xf9\x1e\x8f\x98\xb5\x30"
+ "\x06\x84\xfe\x77\xb3\x18\x32\x06\xd7\x63\x04\xfc\xab\xcc\x05\xb1"
+ "\x26\x5c\x8b\xfa\xb4\x18\x12\x7a\xd4\x12\x6b\xc2\x75\xce\x0f\x6a"
+ "\x1b\x49\x64\x04\x51\x35\x89\x21\x04\xef\x17\x8f\x23\xa4\x0a\x9e"
+ "\xf5\xa5\x33\x42\x43\xb4\x2f\x85\x51\x4b\x5e\x18\x6d\x46\xfd\x79"
+ "\xf9\xb4\xd1\xb2\x21\x89\x64\xc3\x35\xd4\x09\xcd\x19\x31\xe4\xf8"
+ "\x41\x18\x75\xb8\xb2\x48\x78\x51\x3e\x3d\xbd\x35\x8c\x9e\x7e\x26"
+ "\x9f\x36\x17\x87\xd1\x86\xc8\x3c\x32\xb0\x35\x37\x64\x5b\x83\x38"
+ "\xb8\x81\xd5\x6b\xb8\xef\x0a\x19\x9c\x99\x03\xf7\xa6\x38\x48\x40"
+ "\x31\x5c\x43\x98\xf5\xa0\x8e\xdb\xbd\xef\x82\x2d\x10\xf4\x2d\xa7"
+ "\xf6\xe5\xaa\x6c\x88\x87\x97\x47\x48\x5b\x15\xf4\x60\x20\x3e\x8b"
+ "\xd9\x76\x8a\x34\x88\x21\x36\x5c\x2b\x16\xe2\x53\x9b\x77\x35\x13"
+ "\xd4\xf7\x56\xaa\x2d\x70\xf5\x70\xea\x00\xd9\x3a\xd7\x86\xe5\x2a"
+ "\x90\xa9\x00\xdd\x56\x65\x7a\xf4\xcb\x56\xa4\xe9\x56\xae\x59\xbe"
+ "\x7c\xfc\x00\xa2\x67\x47\x8f\x75\xd2\xd3\x70\xbe\xf6\x97\xf2\x69"
+ "\x15\xa4\xd3\x04\xe9\xad\x3e\x02\x23\x1f\xc0\x06\x81\x34\x19\xcf"
+ "\x88\x43\xe6\x41\xf8\x7e\x38\xdf\x0f\xb6\x57\xb3\x75\x99\xc5\xc8"
+ "\xa7\x69\xee\x10\x11\xec\xc4\xb6\x52\x87\xf3\xbb\xb7\xac\x5b\xa8"
+ "\x82\x74\xe7\x81\x5c\xb5\x6e\x38\x89\x82\xe7\x8e\x83\x1d\xa5\x70"
+ "\x8e\xf2\x5b\xb0\x1c\x41\xbe\x8a\xa7\x2b\x32\x19\xaf\x21\xaf\x4c"
+ "\x85\x61\x74\x7b\x6b\xee\x90\x72\x5c\xb7\x82\xad\xa9\x09\xd7\x90"
+ "\x2f\xd5\x20\x6b\x6c\xc9\x58\xa8\x82\xf1\xb3\xaa\xd8\xad\x33\x13"
+ "\x6d\x42\x3b\x70\x4c\xfe\x19\xf4\x64\x5d\x76\x03\x99\x64\x23\xaa"
+ "\xcf\x4e\x13\x52\x90\x4f\x4b\x60\x2f\x80\x7d\xd7\x61\xb8\xf7\x29"
+ "\xec\xd5\x10\x5e\x03\xc7\xc3\x70\xfc\x14\x76\x18\xd3\x6b\xd1\xee"
+ "\xd5\x1b\x69\xe3\x94\x5d\x64\x2c\xea\x07\x6c\xfd\xea\x94\x38\xb6"
+ "\x16\x6d\xc7\x75\x69\x68\x48\xe8\x1c\x8f\xb5\x34\xc4\xa1\x95\x04"
+ "\xee\xc3\xb1\x86\x1f\x95\x7b\x58\x28\xec\xd3\xa5\xf3\x8d\x20\x53"
+ "\x2a\x9d\x1b\x61\x2f\xb8\xf2\xee\xad\xcf\xdf\x7e\x73\x50\xd7\x65"
+ "\xbb\xb2\x47\xce\xe9\x9a\x9c\xd6\x44\xc4\x11\xc0\xa4\x23\x12\x3c"
+ "\xc3\x47\xe8\x79\xd8\x68\x2b\xbf\x06\x20\xf3\xe3\x44\xd8\x21\x9f"
+ "\xc6\x80\xfe\x31\x49\x3c\x6c\x4c\x1a\x1c\xf7\xc3\x5e\xed\x19\x7f"
+ "\x24\x3c\x1f\xb9\x18\xcb\xd3\x0e\x6d\x10\x96\x65\x83\x18\x1a\x8a"
+ "\x65\x94\xc3\xb1\xa5\xc2\xdf\xe6\x41\x98\x06\xb0\x55\xe0\xc6\x4f"
+ "\x58\xa0\x27\x7e\x86\x5a\xbc\xf0\x63\x44\x2e\x6a\x10\x87\x2c\x2e"
+ "\xe6\x78\xd9\xdf\xb2\x61\x29\x5c\x0f\xb5\x82\x9e\xfd\xe8\x2b\x02"
+ "\x1d\x6c\x6c\x93\xd3\x04\x63\x70\xb0\x12\xf9\xa5\x59\x0c\x9b\x8b"
+ "\x98\xc5\xb8\xa5\x78\xb9\x2d\x60\x1f\x84\x95\xa0\x7d\xab\x40\x2f"
+ "\x5c\x97\x82\x5c\x89\x99\x5c\x90\x6d\x63\xcf\x3c\xff\x04\xe0\x51"
+ "\xb2\x17\x75\xe2\x73\xd4\x9d\x2e\x0d\x3e\x23\xc5\xdd\x06\xe1\x38"
+ "\xb6\xc7\xdf\xdd\x05\x98\x1d\x0d\x04\x31\x89\x47\xb3\x23\x1a\xea"
+ "\x52\x1c\x71\xe1\x5c\xf3\x5a\x12\x0d\xf5\xed\xa6\x53\x62\x58\xfd"
+ "\xe4\x8d\x24\x1a\xf5\x21\x7f\x37\x88\x61\x25\xc5\x58\x17\xb9\xae"
+ "\xef\x31\x1d\xa8\xff\x30\x8c\xa6\xf0\x58\x84\xf6\xc0\x7d\x45\xbc"
+ "\x79\x38\x66\xcf\x59\xcf\xd3\x0a\x71\x95\xc2\xf3\xe5\x98\x76\xcc"
+ "\x4f\xb8\x5f\x79\x46\xbc\x79\x16\xde\xc3\xb5\x29\xa5\xf4\x94\xe2"
+ "\xef\x1d\x31\x3f\x50\xde\x0c\xa3\x17\xb6\x8e\x86\x38\x84\xcd\xd5"
+ "\x0f\xfa\xcb\xb1\x3c\x28\xc4\x81\x3a\x32\x1c\xd4\x41\x81\x8f\x5e"
+ "\x5b\x6f\x83\xbe\x8f\xf6\x6d\xcf\xf2\xb9\xd9\xa8\x2c\x1f\x78\xae"
+ "\x1c\x9e\xaf\xc2\xfe\x00\xf2\x09\xc4\xa9\xc6\xbe\x0e\x84\x19\x5d"
+ "\xb9\xa0\x63\xad\x8d\xf9\xb7\x40\xcf\xab\x60\x8b\x11\xf5\x80\x3d"
+ "\x55\x92\xae\x7a\x9c\x73\x5f\x59\xd6\x92\xbe\x52\x2c\x73\x56\x9f"
+ "\xd7\xb3\x34\x01\x77\x69\x9f\x2a\xe2\xf7\x2a\x41\xa6\x92\xda\xe3"
+ "\x08\xdd\x60\x90\xfa\x2f\xec\x5e\x45\x46\x1b\x2b\xdf\x2a\xce\x6b"
+ "\xda\x1d\xab\x37\xd1\x46\xb7\xdd\xda\x38\x79\x4d\x2a\xc9\xee\x0a"
+ "\x8c\x8f\xae\x5b\xcc\xda\x50\x8c\x03\x9f\x97\xf4\x45\xa2\x3e\x39"
+ "\xaf\x26\x83\x1d\x3c\xbf\x6e\x36\x40\x78\x29\x62\x91\xe5\x1b\xf0"
+ "\x68\x4b\x06\x62\x51\x7b\x1f\x3c\xbf\x3f\x1b\xaf\xd7\xe1\xf5\xcd"
+ "\x0d\x8c\x63\x3b\xee\xdf\x9c\x87\xf7\xd1\x27\x92\xf3\x24\x60\xc9"
+ "\x45\xc8\xd8\x50\x12\x6d\xcd\x62\x69\xdb\x63\xdd\x30\x47\x75\x10"
+ "\x7a\x3d\x68\x27\xe4\x51\x25\xd8\x6a\x05\xee\x67\xeb\x7d\x03\x5f"
+ "\x57\xd0\xd7\x0c\x04\x6d\x06\x3e\x93\xec\x1b\xf6\x98\x54\xf6\x15"
+ "\x98\x46\xcc\xcf\xc9\x9c\xfb\xe0\xde\x88\x9b\xd0\x76\x77\xba\x87"
+ "\xc5\x28\xf3\x98\xa5\x1b\xca\x01\xcb\x0b\xcb\x45\xa1\x13\xb1\x62"
+ "\x04\x5d\x7b\xf8\x35\xc7\x06\xe6\xb5\x31\x8c\xd6\xa0\xbc\x5b\x76"
+ "\xf8\xd3\x78\x6f\x33\xc4\x3d\x25\x85\xaf\x13\x8c\xeb\x8a\x81\xde"
+ "\x3d\xa6\xf5\x0e\x02\x3a\x2a\x31\x4f\x41\xee\x08\xe2\x11\xae\x6b"
+ "\xa4\x38\x6a\xa0\x3d\x9f\x08\xfb\x6c\x77\xfd\x1f\x7e\xc0\x13\x5f"
+ "\xc3\xbc\xeb\x3f\x96\xb7\xd1\x95\x11\x47\x18\x1e\x52\x89\xee\x9c"
+ "\x38\xfc\x41\xa9\xed\x90\xca\x7a\xf8\xde\x83\x50\x5f\xdc\x3a\x86"
+ "\x4f\xf7\x2a\xeb\x4a\x86\xc7\x75\xf7\xa9\x30\xcd\xf0\x6c\xa5\xa4"
+ "\x87\xa5\x99\xe1\x29\x8b\x61\xa0\x86\xae\x83\x74\x76\xe0\x60\x98"
+ "\x51\x2a\xe7\x1a\xaf\x3c\x91\x6c\x1f\x5a\x8f\x6b\x1c\x23\x27\x41"
+ "\xbf\xfb\xae\x56\xbb\x9b\x97\xb0\xec\x5d\xac\xec\x87\xcf\x2a\xe6"
+ "\xed\xad\xc4\x5b\xc3\xf8\xfd\x30\x0f\x0c\xa3\x2d\x2b\x18\x7e\xd1"
+ "\x96\x8c\xc5\x68\x4b\x25\xb3\x23\x43\x47\xe0\xde\x69\x8c\x1f\x74"
+ "\xa5\x48\xf5\x55\xd6\x35\x07\x75\x3d\x03\x5c\x85\x36\x41\xdc\xb5"
+ "\x8c\xff\x7e\xc6\x70\x30\x57\xb2\xbd\xda\x96\x85\xcf\x86\xcd\x6a"
+ "\x13\xd8\xb3\xd5\x20\xb7\xc7\xc6\xd7\x88\x1b\x00\xcf\x97\xb1\xef"
+ "\x36\xc5\xd1\xa5\xc8\xd1\xf8\x7b\x64\x38\x7f\x51\xf7\x00\x60\xb5"
+ "\x89\x88\xa0\x2f\x08\x31\x2a\xe3\xa2\x59\x1c\xbd\x09\xd7\x8f\x81"
+ "\xbc\xde\x03\x7d\xa4\x32\xcc\x6f\xc4\x32\xf4\x91\xa6\xb7\xe6\x8e"
+ "\xd8\x23\xe3\x16\xe2\x29\xc0\xbc\xe7\xe5\x33\xe2\x7b\xc0\x71\xa5"
+ "\x1b\x5b\x23\xbe\x97\xf2\xb1\x0c\xf2\x31\x08\xe2\x7b\x4a\x4a\x57"
+ "\x19\xc8\x43\x5f\x6c\xf4\x12\xc9\xf6\x5d\x5c\x3e\x7c\x90\x5c\x0e"
+ "\x52\x5d\xad\xc9\x46\xfe\x65\x65\x10\x5e\x2a\x3d\x5b\xca\xe3\x0a"
+ "\x7f\x5d\x96\xc5\x3e\x22\x5b\xef\x19\xc2\x90\x07\xa7\x40\xd9\x33"
+ "\xee\x5b\xdf\xce\xe4\x24\x6e\xac\xe2\x71\x8c\x9e\xc7\x70\x08\xfd"
+ "\x1e\x37\x8e\xc2\x37\x7a\xf1\x13\x72\xb1\xf1\xe8\x56\xbe\x9e\x1e"
+ "\x62\x09\x39\x15\xc7\x49\xa0\x6f\xa1\x54\x7f\x64\x9b\xbf\xf5\xc4"
+ "\xca\xe8\xdb\x01\x2b\x93\x14\xba\xeb\x7c\xb5\x73\xc5\x9c\x03\x0b"
+ "\xf8\x33\x23\xc7\x4b\x69\xdb\xc3\xd3\x26\x5d\x63\xbe\x6d\xc6\x7c"
+ "\x1b\x75\x56\x91\x8f\x90\x6f\xa3\x1e\x94\xe4\x2b\x91\xcb\xdd\xf5"
+ "\x75\xe4\x4e\xb9\x2e\x77\xe6\x8b\x51\xf1\x58\x1f\xdc\x76\x8d\x4c"
+ "\xf1\xe2\x8b\x4a\xdf\x7c\x31\x32\x46\x4a\x6f\x89\x57\xdd\x28\xe5"
+ "\xb6\x4b\x6d\x0b\x94\xc3\x51\xab\xb4\xae\x21\x84\x21\x7f\x62\xdc"
+ "\xca\x36\xa8\x88\xe7\xab\x54\x97\x47\xcd\xe8\x5c\x0e\xa3\x44\x65"
+ "\x7d\xc6\xb2\x46\x4e\x40\x1d\x58\xa6\xac\x5f\x09\x61\xbc\x5c\x47"
+ "\xd6\x23\x37\x28\x39\x1a\x64\xf3\x5c\x14\xeb\xcb\xa8\x20\xcf\xba"
+ "\x38\x32\x4d\xaa\x8b\x72\xdc\x27\xa0\x8c\xa2\x15\xf1\x6e\xf4\x8a"
+ "\x17\xcb\xa6\x8a\xad\x3f\xc3\xd2\x38\xea\x90\xdc\xa6\xa1\x3c\x3c"
+ "\x9b\x0e\xcf\x94\x7b\xb5\x8f\x46\xb4\x0f\xe2\xd2\x33\xce\xca\x67"
+ "\x5c\x91\xde\xca\xed\xa9\x28\x96\xda\x09\x08\x8b\x96\xc2\x32\xa5"
+ "\xb6\x44\xc6\x4d\x94\xa7\x4d\xa3\x35\xbe\xfb\x47\x23\xf5\x72\xff"
+ "\x88\xe9\x62\x5c\x34\x3a\x54\x4a\x1f\x86\x4d\xe2\x61\xe1\xf5\x18"
+ "\x96\xcd\xf3\x21\x8f\xb2\xf6\x2a\x3c\x53\x6a\xaf\xb0\x7e\x09\x0d"
+ "\xe2\x08\x0b\xd6\x31\xbc\x06\x1d\x49\xa8\xdf\x9c\xd9\x8e\x63\x88"
+ "\x5d\x70\x6f\x3b\xf2\x01\xf2\x05\x7e\x6f\xcc\x8e\xf3\xd9\xf1\x5d"
+ "\xe4\x1d\xec\x87\xe0\x7d\x90\xdb\x88\x5c\x04\xe1\x9f\xe2\x5c\x83"
+ "\xf4\xbb\x20\xd0\x3b\x7a\x8f\xf4\xec\x49\xd6\x57\xf8\x2e\x2e\x40"
+ "\x0e\x93\x9f\x03\x6e\x78\x11\x9f\xc3\xe7\x65\xfe\x42\xee\x72\x20"
+ "\x37\xb1\xf8\x74\x63\x24\x8c\xb3\x71\x83\xdc\x2f\xb2\x0b\x0a\x59"
+ "\x5c\x9f\x8d\x71\x9a\x6e\x39\xe7\x33\xdd\x6f\xf0\x59\x56\x7e\xc0"
+ "\x95\x9b\xdb\xe8\x57\xc5\xa9\x44\x2c\xba\x80\xbc\x38\x64\x31\xb7"
+ "\x53\x57\xc9\xd3\xa1\xdb\xc2\xd2\xc1\x39\xd5\xc8\x6d\x19\xb2\xb8"
+ "\xa8\x9d\xdd\x2b\xc4\xb4\xe0\xbd\x1c\xc5\x3d\x5c\x6f\x11\xee\xb1"
+ "\xb5\xf5\xbc\x9f\x73\xd9\x93\x3a\xc9\x17\xb7\xb3\x71\x5f\x50\x51"
+ "\xbe\xcc\xbd\x63\x66\x49\x76\x5e\x94\x79\x17\xf2\x65\x2b\x72\x2f"
+ "\xbb\xb7\x4c\x92\x99\x2f\x1d\x19\xbf\x8f\x89\xe2\xf9\xaa\x15\xa4"
+ "\xfc\xde\xce\xd3\x31\xe6\x76\x36\xce\xfe\xce\x00\x79\x3b\x26\x5c"
+ "\xce\x5b\xe5\x39\xd6\x1f\x88\x1f\xfb\x92\x9c\x57\x36\xb2\x31\x6c"
+ "\x01\xca\xa0\x4d\xbc\x8d\xd0\x85\x7a\xf7\xa9\xcf\x88\x63\xdf\xc6"
+ "\x76\x89\xf7\x55\xc7\xee\x90\x7c\x53\xc4\x94\xfa\x3b\x68\x17\xc6"
+ "\xd4\xcb\x1c\x43\x5b\xe3\x08\xae\xdb\x04\xb6\x9c\xc4\x30\x5c\x73"
+ "\x4b\x29\x83\xfc\xb4\xaf\xbd\x41\xd2\x39\xa6\x52\xe6\x0d\xe4\x92"
+ "\xa3\xd6\x53\x52\x9f\x2e\x22\xa9\x48\xe2\x92\x73\x62\x44\xb2\x67"
+ "\x3f\x2c\x22\xd9\x93\x33\xc6\x6e\xf2\xe6\x0c\xe8\x37\x6f\x6d\xcd"
+ "\x8d\x98\xed\xd1\x0f\x80\xb0\xcb\x73\x47\x84\x06\xeb\x28\xae\xf7"
+ "\xca\xf8\x89\xf9\xdb\x22\x3e\x97\x6d\x46\xde\x6c\xd9\x20\xfb\x2f"
+ "\xc6\xae\xc0\xbe\x9a\x57\x7c\x7b\x3c\xb8\x13\xe3\x93\xf5\x89\x04"
+ "\xd7\x0c\x85\x7c\x40\x7f\x4b\xc4\x46\x89\xe7\x4b\x3c\xb8\x52\x6a"
+ "\xc3\x90\x27\x3d\xdb\xaa\x21\xbf\xf1\x6c\xab\xc6\x3e\xd8\x99\x23"
+ "\xc7\xea\xbb\xde\x56\x8d\x25\xc8\x5b\x32\x47\x7a\x72\xc1\xd8\x89"
+ "\x45\x1e\x7d\xd9\x88\x0a\xb9\x2f\xeb\xe6\xd1\x88\x39\xc8\x51\x10"
+ "\x7f\xa5\x14\x37\xf4\x89\x07\x97\xc9\x71\x03\x8e\xea\x8f\xc2\x10"
+ "\x92\xe6\x0e\xd1\xc0\xf9\x36\xa9\x0f\xc8\xea\x66\x3b\xae\xef\x27"
+ "\xea\x6a\x01\x7f\x03\x10\x67\xa6\x95\x17\xc8\x69\x77\x5b\x51\xd5"
+ "\xb2\x4a\xce\xdf\xc8\x19\xca\x7e\x61\x61\x3e\xdd\xd6\x9a\x1b\x39"
+ "\x50\x99\xc6\x17\x21\x2c\x47\xf2\x21\xb0\xbc\x65\xba\xc6\x36\x14"
+ "\xe7\x7b\xa6\x8d\xa7\x23\x32\x14\xd3\x81\x63\x22\x88\xff\x18\xf6"
+ "\x7b\x70\xcd\x67\xa8\x37\x86\xe2\x0e\xcc\x0f\xdd\xd3\x96\xa5\xec"
+ "\x5f\x0d\xa9\x40\xae\x94\xc6\x9e\xd5\xd0\xdf\x31\x2a\x7d\x31\xf3"
+ "\xee\x4d\xd0\xa5\xa4\x26\xaf\x4c\x5b\x36\x4d\x97\xbc\x32\x39\x2d"
+ "\x79\xc9\xf2\xe4\xf5\x4b\xd2\x92\x57\xad\x9c\xb8\x62\xc9\xe3\xc9"
+ "\x8f\xea\xd6\x2d\x59\xad\x8b\x4e\x8f\x4a\x1f\x40\xdc\xa2\x77\xe8"
+ "\x96\xac\x5e\xbd\x66\xc5\x63\x4b\x75\x2b\x93\x1f\x9d\x94\xfa\xd8"
+ "\xea\xc7\xd2\x74\x4b\x52\x57\xad\x59\xb9\x54\x17\xb5\x74\x72\x54"
+ "\xf4\xcc\xa5\x03\x94\x3e\xb4\x08\x0d\x69\x76\x5d\x6a\x6c\xcc\xb9"
+ "\x44\x82\xd4\xaa\x94\x54\x75\x7a\xf2\x4a\xee\xb3\x8b\xda\x34\x25"
+ "\x8f\xa4\xc0\xfd\x81\xc5\xb9\x98\xd7\x91\x46\x38\x8a\x28\x07\xe9"
+ "\xd4\xc1\x79\x10\xd8\x1e\xde\x9a\x1b\x15\xd3\x20\x8e\xd7\x63\x9e"
+ "\x41\x5e\xe8\x20\x6d\xe1\xf4\x52\x75\x23\xf4\xd9\x52\xf0\x3b\x83"
+ "\xe2\x4b\x24\xd4\xb8\x96\x88\xb0\x0f\x84\x5d\x23\x68\xd0\xd7\x15"
+ "\x95\xd6\x20\x8e\x33\x72\x9f\xe8\xb8\x50\xcb\xe0\xd8\x70\x6a\x8c"
+ "\x0d\xe7\xe5\x32\x6e\xb0\xec\x0b\x5f\xf0\x2c\x59\x80\xf8\x3c\x25"
+ "\x8e\x63\xdf\x16\x3c\x03\x58\x46\x5f\x70\xcb\x07\xf7\xc4\x40\x7f"
+ "\xb0\x1e\xfd\xb9\x70\x6f\xb0\x55\x20\x03\xc1\x2e\xf1\xe0\xc6\x68"
+ "\xf2\x12\xc4\xb5\x5a\x4b\x29\xc4\x51\x27\xfb\xd3\x20\x0d\x1a\x48"
+ "\x4b\x9d\x94\x8e\xbf\xb0\x74\xe4\xd3\xc8\xbc\x10\xb0\x2f\x17\xed"
+ "\x19\x27\xca\x69\x00\xbb\xe1\xb9\xa8\x24\xb0\x53\x83\x76\xf9\xf2"
+ "\xf5\xa1\xbf\x0b\xec\x9c\xe7\x5a\x0b\xf9\x36\x8a\xaf\x19\x9b\x53"
+ "\xc4\xeb\x1f\xa4\x67\x6b\x31\x9c\x67\x5f\x20\x03\x5f\x4c\x25\xa1"
+ "\x34\x6b\x34\x3d\x62\x75\x10\x73\x52\x1d\x51\x3f\x4d\x2d\xf4\xcf"
+ "\x8d\x8d\x52\x9a\xd2\x91\x1b\xfe\xf4\x44\x9d\x88\x69\x82\xb6\x62"
+ "\x60\xf1\x05\xbf\xbe\x45\xf1\xa5\x30\x6a\xa5\xbb\x95\x7d\xae\x71"
+ "\x5f\x61\x9e\x60\x7f\xab\x05\xda\x29\x48\x03\xe0\x6b\x9c\x4e\xea"
+ "\x1b\x5b\xa9\x7d\xb1\xa2\x2f\x35\x0e\x71\x66\xf5\xa3\x3b\x48\xd6"
+ "\x4d\x05\xb6\xd6\xb2\x96\x97\xff\x2d\xf3\xe0\x19\x8b\x5b\xff\x2d"
+ "\x7a\x6f\xfd\xa8\x13\xce\x2d\x72\x3c\x7c\x1c\x7e\x0b\xf6\x09\x2c"
+ "\x80\x65\x8b\x9f\xf8\x22\x73\xf3\xe9\x31\x33\x84\xe7\xb4\x11\x11"
+ "\x64\x8f\x15\xe7\x33\xfd\xdb\xa0\x0e\x35\xa3\xfe\x67\xc2\x08\xd9"
+ "\x0a\x32\x2d\xb9\xe3\x74\xe8\xdf\x85\x7b\x38\x26\xd6\x7a\xfb\xac"
+ "\x25\x3c\xdf\xe1\x85\xe7\x98\x5c\xec\x13\xe6\x81\x7e\xc0\x50\xce"
+ "\x45\x68\x87\xe1\x7a\x72\x1e\xd1\x63\x3c\x70\x5e\x8b\xfe\x10\xd0"
+ "\x69\x93\xe3\xa3\x80\xff\x6c\x17\xf7\xc1\x48\xd8\x9a\x68\x4e\x6f"
+ "\xc4\x39\xc3\xe8\x41\xe0\x77\xb4\x11\x31\xd6\x9a\xab\x9f\x28\x63"
+ "\x0a\xb0\x7e\x8c\xe1\x2a\x94\xe8\x69\xee\x2d\xe5\xc5\x21\x20\x07"
+ "\xb8\x2a\x02\x3c\x21\xae\x40\xd6\x20\x63\x0a\xb0\x56\x8b\x72\x60"
+ "\xc3\x80\xf2\xf5\x31\x22\x72\xe4\x69\x51\x7f\x04\x31\x46\xff\xf3"
+ "\x17\x75\xf4\xe6\x5f\xd7\xf1\x72\xd2\x1f\xc1\xd9\x85\x31\x3f\xdd"
+ "\xf9\xae\x2f\x51\xe4\x7b\x2d\xe0\x78\x00\xe6\x33\xf7\x55\xeb\x8f"
+ "\x80\x6d\xb5\xac\x2f\xbe\x09\xca\x80\xb5\x55\x7a\x36\x8e\x97\xf2"
+ "\xb0\xc6\x9d\x87\xfa\x46\x5f\x79\xe8\x95\x77\x22\xee\x34\x57\x6f"
+ "\xc5\xba\xd2\x9a\x3b\x3e\xbc\x41\xbc\xc5\xef\xbb\x02\x88\x43\x14"
+ "\xf3\x48\x10\xc6\x51\x15\xca\xe4\xef\x93\xe3\xc8\x81\xbc\xb6\x64"
+ "\x24\x5d\x16\xcf\x55\x25\x84\xa0\x4f\x1c\x9f\x8f\x0c\xc5\xfc\x1d"
+ "\xbf\xdd\xfd\x3c\xb5\x7a\x3f\x1f\xf5\xa8\x87\xad\x6c\xa7\xb9\xe3"
+ "\x4b\x5e\x0a\x01\x1c\x71\x7b\x6b\x2e\x67\x6f\xa4\x8e\xb7\x93\xa6"
+ "\x08\xc4\xf7\x84\x40\xf3\x2e\x42\x30\x8c\x5f\x8f\xb7\xb6\x40\xdb"
+ "\xe3\xed\xdf\xf7\xff\xbe\x61\xc2\x5c\xcf\xf7\x0d\x13\xa6\xfb\x7b"
+ "\xdf\xe0\x15\xef\x16\x8c\xd7\x55\xbc\x50\xe5\x8e\x7b\xc2\x72\x97"
+ "\x8f\xb8\xe5\xe7\x27\x97\x28\xc7\x33\x13\x3e\x47\x1b\x8e\x42\x3b"
+ "\x45\x47\x2c\x54\x51\xd0\x53\xc5\xda\xf0\x09\xb5\xbc\xff\x82\xfd"
+ "\xa2\x09\xe5\x28\xe3\x9d\x8e\x8e\x2d\x28\xf4\x23\x3c\xb4\xb1\x8b"
+ "\xc0\x9f\x11\x64\x57\x72\x5b\xa2\x7c\x5b\xf0\x10\x26\xd4\xc7\xc5"
+ "\x40\x42\x66\x31\x79\x0a\x1b\x0f\x92\xae\x2d\xec\x42\xec\x90\xef"
+ "\xb8\xdf\x8b\xed\x26\x6e\x2f\xd3\x67\x23\x2a\x29\xbe\x4c\x85\xc4"
+ "\x9c\xcb\x3c\x4d\x89\xfc\x88\xaf\x0d\x3d\x03\x99\x0b\x03\x41\x5f"
+ "\x09\x13\xa6\xd4\x21\xe9\x97\xaf\xa9\xf2\x1a\x43\x3c\xaf\x61\x0b"
+ "\x58\xac\x88\x60\x74\xc0\x52\xf6\xd9\xd8\xbf\x1f\xeb\x08\x12\x4a"
+ "\x34\xca\x28\x35\x24\x33\x90\x9d\xa8\xf1\x8f\x0d\xf4\xe9\xe1\xfe"
+ "\x2c\x53\x87\xc0\x10\xeb\x16\x85\xf8\x67\xdc\xfc\x3b\x3c\x74\xf4"
+ "\x72\x1b\xa5\x38\x1f\xcd\x0f\xb7\xd7\xf6\xa1\xfe\xcb\x6f\xba\xda"
+ "\x9b\xe4\x53\x37\x3c\xee\x58\xe8\x4b\xd4\x9d\xff\x77\x54\xc8\x41"
+ "\x4a\x84\xba\xef\xdf\x15\xed\x79\x1d\xe3\x75\xff\x9e\x84\x3e\xb0"
+ "\x9c\x98\xf0\x4f\x46\x03\xf4\x51\x7e\x1a\xde\x11\xa8\xf6\xaa\x32"
+ "\x6a\xa3\x57\x15\x72\x6f\x92\x35\x01\x60\x4f\xa9\x22\x58\xf4\x2d"
+ "\x7d\x75\xb6\xe1\x5b\xa4\x0a\x31\xda\xd2\x19\x53\x77\x7b\x85\xe1"
+ "\xf5\x0d\x3a\x29\x6c\xea\x47\x9d\xe4\x59\x98\x4e\x71\xad\x8a\x81"
+ "\x3f\x25\x84\xcc\x4e\xec\x03\x53\xaf\x6f\x3f\xc6\x4d\x85\xf5\xe3"
+ "\xfa\x76\x95\x36\xca\x5b\x71\x60\x22\x76\xc0\x7f\xb4\x83\x28\xa9"
+ "\x74\x83\x4a\x01\x54\x3a\xe9\x93\x76\xfc\xfa\x76\x7d\xbb\xbe\x5d"
+ "\xdf\xae\x6f\xd7\xb7\xeb\xdb\x35\xb0\xa9\x94\x03\x6b\x9c\x07\xf7"
+ "\x46\xe9\xa8\x1c\xff\xa8\xa4\x5d\x19\x26\xf4\xe6\x39\x2a\x6d\x24"
+ "\x33\xc6\xa4\x2b\x49\x6c\xd0\x18\x13\x6a\xa3\xcb\x53\x2c\x41\xdb"
+ "\xe2\xaa\xf5\x65\x49\x8d\xda\x5d\x86\xba\x59\x95\xe9\x36\x71\xeb"
+ "\x9c\xaa\xc8\xd2\xa5\xa7\x43\xf3\x16\x1e\x9b\x5e\x91\x66\x1d\xb8"
+ "\xfd\xbe\x9a\x89\x7b\x96\x37\x87\x17\x2c\xae\x9f\xbd\x7f\xa3\x43"
+ "\xc8\xba\xe7\xe3\x88\xdf\x3d\x72\x2a\x24\xf7\x3f\xbe\x98\xf6\x4e"
+ "\xea\x85\x01\xcf\xff\xfc\xf0\x84\x3f\x3c\xd1\x34\xfc\x95\x45\x7f"
+ "\xbf\xe3\xbf\xd6\xb7\xdf\xf0\xdb\x9f\xfd\xf7\xb8\x37\x96\x9d\x09"
+ "\xcb\x7f\xe0\xaf\x33\xff\xbc\xf6\x52\x70\xf6\xfc\xa3\x93\xdf\x5a"
+ "\x79\x6e\x54\xd1\x43\xff\xbc\xeb\x83\xcd\x2e\xd5\x96\x9f\x7e\x34"
+ "\xe6\xd5\x25\x5f\x0d\xde\xf1\xcb\xcf\xa7\xbe\xfd\xd4\xf7\x37\x3d"
+ "\x17\xff\xe9\xf8\x37\x93\xbf\x1d\xf6\xf2\x83\x27\x6e\x7f\xff\xe9"
+ "\xb6\xc0\x67\xe7\x1e\x8a\x7a\xfd\xb1\xaf\x87\xee\xbc\xff\xf8\x8c"
+ "\x77\xd7\x5c\x1c\xf4\xe2\xbc\x23\x93\xf6\xae\x38\x3b\xb2\xf0\x37"
+ "\x27\xef\x3c\xb0\xc9\x19\xf0\xcc\xbd\x07\xc7\xbe\xf6\xe8\xff\x0e"
+ "\x79\xe9\xff\xfc\xcf\xad\x7f\x5a\xdd\xf2\x93\x17\x7e\xf1\xd9\xbf"
+ "\xfd\xf1\xc9\xef\x46\xec\xfe\xf5\x3f\xfe\xfd\x2f\x1b\xec\x37\xfe"
+ "\xdf\xd8\x4f\x6e\xf9\xfd\xe3\xdf\xdc\xfc\x9f\xbf\xfa\xdb\x6d\xef"
+ "\xad\x6b\x55\xe7\x2c\x30\x4f\xd9\xb7\xea\xfc\xe8\xe2\x87\xbf\xbc"
+ "\xfb\xc3\x0c\xda\x9b\xfc\x23\xe2\x86\x7b\xfb\xb3\xdc\xdc\x9d\x47"
+ "\x0c\x2e\xaa\xeb\xb1\x1e\x41\x25\x95\x3f\x0f\xc8\x9c\x41\x54\x41"
+ "\xe4\x06\xb1\x07\x23\x86\x9e\xa6\xdb\xcf\xa6\x53\x3e\xdf\x95\x0d"
+ "\xfd\x15\x53\x61\xbf\x15\xf6\x11\x2c\xc4\xed\x05\x88\xec\xa2\x8e"
+ "\xfe\xdb\x54\x90\x07\x01\x60\x61\x20\xb9\x01\x72\x2d\x88\xdc\x44"
+ "\x06\x90\x9f\x90\x81\x64\x10\x09\x26\x6a\xa2\x21\x83\x49\x08\x19"
+ "\x42\x42\xc9\x50\x12\x46\x6e\x26\x5a\x32\x8c\x0c\x87\x54\x85\x93"
+ "\x91\x64\x14\x19\x0d\x99\x33\x86\x44\x90\xb1\xbe\xd3\x95\x49\x62"
+ "\xb4\xf0\x07\xfe\x27\x30\xaf\x4d\x26\x49\xbc\x1e\xde\xaf\xe1\x26"
+ "\x29\xbc\x56\x0a\x6f\xb8\x1e\xde\xaf\xe1\xba\x7f\xf1\x71\xcc\xbf"
+ "\xf4\xa8\x82\x6e\x04\xef\x49\x78\xf4\x27\x3a\x36\xef\x50\x95\xb4"
+ "\x75\x5c\x93\x2b\x3c\xdf\x49\x9f\xe7\xf3\xde\x5b\x0c\xec\xd3\xf9"
+ "\x69\x06\x21\xd2\xbb\x07\xaa\xdc\x1c\xe7\x3c\xb6\x7c\xd5\xc7\xe2"
+ "\xe0\x4c\x7c\xab\x12\x44\x42\xd9\xdf\x2e\x6c\xf8\x66\xf1\xe0\x56"
+ "\xd8\x8d\xb0\xbf\x04\x7b\x31\xec\x6f\xca\x51\x11\x55\x84\x96\xa8"
+ "\xc6\x26\xc0\xb1\x02\x8e\xcd\x44\x15\x99\x49\x54\xb7\x80\xf1\x51"
+ "\x26\xa2\xd2\xc7\xb8\x13\x33\xb5\xa1\xc3\x6a\xd5\x14\x29\x5c\x07"
+ "\xe7\xd3\x93\xbc\x22\xec\x6e\x7b\x67\x9a\xbb\x30\x4e\x37\x75\xf2"
+ "\xf4\xc9\x33\x66\xe8\x26\x25\x4c\xd2\x4d\x8b\x9e\x3a\x6d\x4a\xf4"
+ "\xf4\x29\xd3\xa6\xea\xa2\xa7\xde\x31\x7d\xd6\x1d\xb7\x4e\xd7\xad"
+ "\x78\x3a\x35\x79\x6a\xf4\xe3\x8f\xe9\x56\x2e\x4d\x5e\xad\x5b\x96"
+ "\x9c\xba\x62\xdd\x92\xd4\xc7\xba\x92\xfc\xee\x6c\x90\x1c\x32\xd2"
+ "\xc9\xcd\x54\x96\x9a\x8a\xdc\x4d\xc4\x5b\x75\x44\x8c\xd5\x91\x4e"
+ "\xc5\xac\x32\x4a\x49\xd2\x4b\x7b\xa7\x6d\xc5\xa2\x07\xfe\x1e\xf5"
+ "\xeb\xe0\x8f\x7f\xfa\x78\xd4\x9d\xf7\xbe\x96\x53\x4e\x84\x3b\x6a"
+ "\x89\x30\x2d\x9d\x08\x90\xbf\x42\x78\x1a\x11\xd4\xa1\x44\x58\x2b"
+ "\x12\x61\x85\x91\x08\x8f\xce\x26\xc2\xaf\x16\x12\x21\xbe\xae\x73"
+ "\xd8\xb3\x91\x3c\xac\x12\xc2\xde\xd2\x12\xe1\x77\x1a\x22\xe4\x25"
+ "\xf0\x30\x33\x98\x51\x95\xd2\xd7\x59\xd2\x07\x5b\x77\xf1\xa0\xfa"
+ "\x7f\x32\xf2\xad\x0d"
;
diff --git a/sys/dev/nand/nand.c b/sys/dev/nand/nand.c
new file mode 100644
index 000000000000..ad5bc40410df
--- /dev/null
+++ b/sys/dev/nand/nand.c
@@ -0,0 +1,832 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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/systm.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+#include <sys/bus.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/callout.h>
+#include <sys/sysctl.h>
+
+#include <dev/nand/nand.h>
+#include <dev/nand/nandbus.h>
+#include <dev/nand/nand_ecc_pos.h>
+#include "nfc_if.h"
+#include "nand_if.h"
+#include "nandbus_if.h"
+#include <machine/stdarg.h>
+
+#define NAND_RESET_DELAY 1000 /* tRST */
+#define NAND_ERASE_DELAY 3000 /* tBERS */
+#define NAND_PROG_DELAY 700 /* tPROG */
+#define NAND_READ_DELAY 50 /* tR */
+
+#define BIT0(x) ((x) & 0x1)
+#define BIT1(x) (BIT0(x >> 1))
+#define BIT2(x) (BIT0(x >> 2))
+#define BIT3(x) (BIT0(x >> 3))
+#define BIT4(x) (BIT0(x >> 4))
+#define BIT5(x) (BIT0(x >> 5))
+#define BIT6(x) (BIT0(x >> 6))
+#define BIT7(x) (BIT0(x >> 7))
+
+#define SOFTECC_SIZE 256
+#define SOFTECC_BYTES 3
+
+int nand_debug_flag = 0;
+SYSCTL_INT(_debug, OID_AUTO, nand_debug, CTLFLAG_RW, &nand_debug_flag, 0,
+ "NAND subsystem debug flag");
+
+static void
+nand_tunable_init(void *arg)
+{
+
+ TUNABLE_INT_FETCH("debug.nand", &nand_debug_flag);
+}
+
+SYSINIT(nand_tunables, SI_SUB_VFS, SI_ORDER_ANY, nand_tunable_init, NULL);
+
+MALLOC_DEFINE(M_NAND, "NAND", "NAND dynamic data");
+
+static void calculate_ecc(const uint8_t *, uint8_t *);
+static int correct_ecc(uint8_t *, uint8_t *, uint8_t *);
+
+void
+nand_debug(int level, const char *fmt, ...)
+{
+ va_list ap;
+
+ if (!(nand_debug_flag & level))
+ return;
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+ printf("\n");
+}
+
+void
+nand_init(struct nand_softc *nand, device_t dev, int ecc_mode,
+ int ecc_bytes, int ecc_size, uint16_t *eccposition, char *cdev_name)
+{
+
+ nand->ecc.eccmode = ecc_mode;
+ nand->chip_cdev_name = cdev_name;
+
+ if (ecc_mode == NAND_ECC_SOFT) {
+ nand->ecc.eccbytes = SOFTECC_BYTES;
+ nand->ecc.eccsize = SOFTECC_SIZE;
+ } else if (ecc_mode != NAND_ECC_NONE) {
+ nand->ecc.eccbytes = ecc_bytes;
+ nand->ecc.eccsize = ecc_size;
+ if (eccposition)
+ nand->ecc.eccpositions = eccposition;
+ }
+}
+
+void
+nand_onfi_set_params(struct nand_chip *chip, struct onfi_params *params)
+{
+ struct chip_geom *cg;
+
+ cg = &chip->chip_geom;
+
+ init_chip_geom(cg, params->luns, params->blocks_per_lun,
+ params->pages_per_block, params->bytes_per_page,
+ params->spare_bytes_per_page);
+ chip->t_bers = params->t_bers;
+ chip->t_prog = params->t_prog;
+ chip->t_r = params->t_r;
+ chip->t_ccs = params->t_ccs;
+
+ if (params->features & ONFI_FEAT_16BIT)
+ chip->flags |= NAND_16_BIT;
+}
+
+void
+nand_set_params(struct nand_chip *chip, struct nand_params *params)
+{
+ struct chip_geom *cg;
+ uint32_t blocks_per_chip;
+
+ cg = &chip->chip_geom;
+ blocks_per_chip = (params->chip_size << 20) /
+ (params->page_size * params->pages_per_block);
+
+ init_chip_geom(cg, 1, blocks_per_chip,
+ params->pages_per_block, params->page_size,
+ params->oob_size);
+
+ chip->t_bers = NAND_ERASE_DELAY;
+ chip->t_prog = NAND_PROG_DELAY;
+ chip->t_r = NAND_READ_DELAY;
+ chip->t_ccs = 0;
+
+ if (params->flags & NAND_16_BIT)
+ chip->flags |= NAND_16_BIT;
+}
+
+int
+nand_init_stat(struct nand_chip *chip)
+{
+ struct block_stat *blk_stat;
+ struct page_stat *pg_stat;
+ struct chip_geom *cg;
+ uint32_t blks, pgs;
+
+ cg = &chip->chip_geom;
+ blks = cg->blks_per_lun * cg->luns;
+ blk_stat = malloc(sizeof(struct block_stat) * blks, M_NAND,
+ M_WAITOK | M_ZERO);
+ if (!blk_stat)
+ return (ENOMEM);
+
+ pgs = blks * cg->pgs_per_blk;
+ pg_stat = malloc(sizeof(struct page_stat) * pgs, M_NAND,
+ M_WAITOK | M_ZERO);
+ if (!pg_stat) {
+ free(blk_stat, M_NAND);
+ return (ENOMEM);
+ }
+
+ chip->blk_stat = blk_stat;
+ chip->pg_stat = pg_stat;
+
+ return (0);
+}
+
+void
+nand_destroy_stat(struct nand_chip *chip)
+{
+
+ free(chip->pg_stat, M_NAND);
+ free(chip->blk_stat, M_NAND);
+}
+
+int
+init_chip_geom(struct chip_geom *cg, uint32_t luns, uint32_t blks_per_lun,
+ uint32_t pgs_per_blk, uint32_t pg_size, uint32_t oob_size)
+{
+ int shift;
+
+ if (!cg)
+ return (-1);
+
+ cg->luns = luns;
+ cg->blks_per_lun = blks_per_lun;
+ cg->blks_per_chip = blks_per_lun * luns;
+ cg->pgs_per_blk = pgs_per_blk;
+
+ cg->page_size = pg_size;
+ cg->oob_size = oob_size;
+ cg->block_size = cg->page_size * cg->pgs_per_blk;
+ cg->chip_size = cg->block_size * cg->blks_per_chip;
+
+ shift = fls(cg->pgs_per_blk - 1);
+ cg->pg_mask = (1 << shift) - 1;
+ cg->blk_shift = shift;
+
+ if (cg->blks_per_lun > 0) {
+ shift = fls(cg->blks_per_lun - 1);
+ cg->blk_mask = ((1 << shift) - 1) << cg->blk_shift;
+ } else {
+ shift = 0;
+ cg->blk_mask = 0;
+ }
+
+ cg->lun_shift = shift + cg->blk_shift;
+ shift = fls(cg->luns - 1);
+ cg->lun_mask = ((1 << shift) - 1) << cg->lun_shift;
+
+ nand_debug(NDBG_NAND, "Masks: lun 0x%x blk 0x%x page 0x%x\n"
+ "Shifts: lun %d blk %d",
+ cg->lun_mask, cg->blk_mask, cg->pg_mask,
+ cg->lun_shift, cg->blk_shift);
+
+ return (0);
+}
+
+int
+nand_row_to_blkpg(struct chip_geom *cg, uint32_t row, uint32_t *lun,
+ uint32_t *blk, uint32_t *pg)
+{
+
+ if (!cg || !lun || !blk || !pg)
+ return (-1);
+
+ if (row & ~(cg->lun_mask | cg->blk_mask | cg->pg_mask)) {
+ nand_debug(NDBG_NAND,"Address out of bounds\n");
+ return (-1);
+ }
+
+ *lun = (row & cg->lun_mask) >> cg->lun_shift;
+ *blk = (row & cg->blk_mask) >> cg->blk_shift;
+ *pg = (row & cg->pg_mask);
+
+ nand_debug(NDBG_NAND,"address %x-%x-%x\n", *lun, *blk, *pg);
+
+ return (0);
+}
+
+int page_to_row(struct chip_geom *cg, uint32_t page, uint32_t *row)
+{
+ uint32_t lun, block, pg_in_blk;
+
+ if (!cg || !row)
+ return (-1);
+
+ block = page / cg->pgs_per_blk;
+ pg_in_blk = page % cg->pgs_per_blk;
+
+ lun = block / cg->blks_per_lun;
+ block = block % cg->blks_per_lun;
+
+ *row = (lun << cg->lun_shift) & cg->lun_mask;
+ *row |= ((block << cg->blk_shift) & cg->blk_mask);
+ *row |= (pg_in_blk & cg->pg_mask);
+
+ return (0);
+}
+
+int
+nand_check_page_boundary(struct nand_chip *chip, uint32_t page)
+{
+ struct chip_geom* cg;
+
+ cg = &chip->chip_geom;
+ if (page >= (cg->pgs_per_blk * cg->blks_per_lun * cg->luns)) {
+ nand_debug(NDBG_GEN,"%s: page number too big %#x\n",
+ __func__, page);
+ return (1);
+ }
+
+ return (0);
+}
+
+void
+nand_get_chip_param(struct nand_chip *chip, struct chip_param_io *param)
+{
+ struct chip_geom *cg;
+
+ cg = &chip->chip_geom;
+ param->page_size = cg->page_size;
+ param->oob_size = cg->oob_size;
+
+ param->blocks = cg->blks_per_lun * cg->luns;
+ param->pages_per_block = cg->pgs_per_blk;
+}
+
+static uint16_t *
+default_software_ecc_positions(struct nand_chip *chip)
+{
+ struct nand_ecc_data *eccd;
+
+ eccd = &chip->nand->ecc;
+
+ if (eccd->eccpositions)
+ return (eccd->eccpositions);
+
+ switch (chip->chip_geom.oob_size) {
+ case 16:
+ return ((uint16_t *)&default_software_ecc_positions_16);
+ case 64:
+ return ((uint16_t *)&default_software_ecc_positions_64);
+ case 128:
+ return ((uint16_t *)&default_software_ecc_positions_128);
+ default:
+ return (NULL); /* No ecc bytes positions defs available */
+ }
+
+ return (NULL);
+}
+
+static void
+calculate_ecc(const uint8_t *buf, uint8_t *ecc)
+{
+ uint8_t p8, byte;
+ int i;
+
+ memset(ecc, 0, 3);
+
+ for (i = 0; i < 256; i++) {
+ byte = buf[i];
+ ecc[0] ^= (BIT0(byte) ^ BIT2(byte) ^ BIT4(byte) ^
+ BIT6(byte)) << 2;
+ ecc[0] ^= (BIT1(byte) ^ BIT3(byte) ^ BIT5(byte) ^
+ BIT7(byte)) << 3;
+ ecc[0] ^= (BIT0(byte) ^ BIT1(byte) ^ BIT4(byte) ^
+ BIT5(byte)) << 4;
+ ecc[0] ^= (BIT2(byte) ^ BIT3(byte) ^ BIT6(byte) ^
+ BIT7(byte)) << 5;
+ ecc[0] ^= (BIT0(byte) ^ BIT1(byte) ^ BIT2(byte) ^
+ BIT3(byte)) << 6;
+ ecc[0] ^= (BIT4(byte) ^ BIT5(byte) ^ BIT6(byte) ^
+ BIT7(byte)) << 7;
+
+ p8 = BIT0(byte) ^ BIT1(byte) ^ BIT2(byte) ^
+ BIT3(byte) ^ BIT4(byte) ^ BIT5(byte) ^ BIT6(byte) ^
+ BIT7(byte);
+
+ if (p8) {
+ ecc[2] ^= (0x1 << BIT0(i));
+ ecc[2] ^= (0x4 << BIT1(i));
+ ecc[2] ^= (0x10 << BIT2(i));
+ ecc[2] ^= (0x40 << BIT3(i));
+
+ ecc[1] ^= (0x1 << BIT4(i));
+ ecc[1] ^= (0x4 << BIT5(i));
+ ecc[1] ^= (0x10 << BIT6(i));
+ ecc[1] ^= (0x40 << BIT7(i));
+ }
+ }
+ ecc[0] = ~ecc[0];
+ ecc[1] = ~ecc[1];
+ ecc[2] = ~ecc[2];
+ ecc[0] |= 3;
+}
+
+static int
+correct_ecc(uint8_t *buf, uint8_t *calc_ecc, uint8_t *read_ecc)
+{
+ uint8_t ecc0, ecc1, ecc2, onesnum, bit, byte;
+ uint16_t addr = 0;
+
+ ecc0 = calc_ecc[0] ^ read_ecc[0];
+ ecc1 = calc_ecc[1] ^ read_ecc[1];
+ ecc2 = calc_ecc[2] ^ read_ecc[2];
+
+ if (!ecc0 && !ecc1 && !ecc2)
+ return (ECC_OK);
+
+ addr = BIT3(ecc0) | (BIT5(ecc0) << 1) | (BIT7(ecc0) << 2);
+ addr |= (BIT1(ecc2) << 3) | (BIT3(ecc2) << 4) |
+ (BIT5(ecc2) << 5) | (BIT7(ecc2) << 6);
+ addr |= (BIT1(ecc1) << 7) | (BIT3(ecc1) << 8) |
+ (BIT5(ecc1) << 9) | (BIT7(ecc1) << 10);
+
+ onesnum = 0;
+ while (ecc0 || ecc1 || ecc2) {
+ if (ecc0 & 1)
+ onesnum++;
+ if (ecc1 & 1)
+ onesnum++;
+ if (ecc2 & 1)
+ onesnum++;
+
+ ecc0 >>= 1;
+ ecc1 >>= 1;
+ ecc2 >>= 1;
+ }
+
+ if (onesnum == 11) {
+ /* Correctable error */
+ bit = addr & 7;
+ byte = addr >> 3;
+ buf[byte] ^= (1 << bit);
+ return (ECC_CORRECTABLE);
+ } else if (onesnum == 1) {
+ /* ECC error */
+ return (ECC_ERROR_ECC);
+ } else {
+ /* Uncorrectable error */
+ return (ECC_UNCORRECTABLE);
+ }
+
+ return (0);
+}
+
+int
+nand_softecc_get(device_t dev, uint8_t *buf, int pagesize, uint8_t *ecc)
+{
+ int steps = pagesize / SOFTECC_SIZE;
+ int i = 0, j = 0;
+
+ for (; i < (steps * SOFTECC_BYTES);
+ i += SOFTECC_BYTES, j += SOFTECC_SIZE) {
+ calculate_ecc(&buf[j], &ecc[i]);
+ }
+
+ return (0);
+}
+
+int
+nand_softecc_correct(device_t dev, uint8_t *buf, int pagesize,
+ uint8_t *readecc, uint8_t *calcecc)
+{
+ int steps = pagesize / SOFTECC_SIZE;
+ int i = 0, j = 0, ret = 0;
+
+ for (i = 0; i < (steps * SOFTECC_BYTES);
+ i += SOFTECC_BYTES, j += SOFTECC_SIZE) {
+ ret += correct_ecc(&buf[j], &calcecc[i], &readecc[i]);
+ if (ret < 0)
+ return (ret);
+ }
+
+ return (ret);
+}
+
+static int
+offset_to_page(struct chip_geom *cg, uint32_t offset)
+{
+
+ return (offset / cg->page_size);
+}
+
+int
+nand_read_pages(struct nand_chip *chip, uint32_t offset, void *buf,
+ uint32_t len)
+{
+ struct chip_geom *cg;
+ struct nand_ecc_data *eccd;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ void *oob = NULL;
+ uint8_t *ptr;
+ uint16_t *eccpos = NULL;
+ uint32_t page, num, steps = 0;
+ int i, retval = 0, needwrite;
+
+ nand_debug(NDBG_NAND,"%p read page %x[%x]", chip, offset, len);
+ cg = &chip->chip_geom;
+ eccd = &chip->nand->ecc;
+ page = offset_to_page(cg, offset);
+ num = len / cg->page_size;
+
+ if (eccd->eccmode != NAND_ECC_NONE) {
+ steps = cg->page_size / eccd->eccsize;
+ eccpos = default_software_ecc_positions(chip);
+ oob = malloc(cg->oob_size, M_NAND, M_WAITOK);
+ }
+
+ nandbus = device_get_parent(chip->dev);
+ NANDBUS_LOCK(nandbus);
+ NANDBUS_SELECT_CS(device_get_parent(chip->dev), chip->num);
+
+ ptr = (uint8_t *)buf;
+ while (num--) {
+ pg_stat = &(chip->pg_stat[page]);
+
+ if (NAND_READ_PAGE(chip->dev, page, ptr, cg->page_size, 0)) {
+ retval = ENXIO;
+ break;
+ }
+
+ if (eccd->eccmode != NAND_ECC_NONE) {
+ if (NAND_GET_ECC(chip->dev, ptr, eccd->ecccalculated,
+ &needwrite)) {
+ retval = ENXIO;
+ break;
+ }
+ nand_debug(NDBG_ECC,"%s: ECC calculated:",
+ __func__);
+ if (nand_debug_flag & NDBG_ECC)
+ for (i = 0; i < (eccd->eccbytes * steps); i++)
+ printf("%x ", eccd->ecccalculated[i]);
+
+ nand_debug(NDBG_ECC,"\n");
+
+ if (NAND_READ_OOB(chip->dev, page, oob, cg->oob_size,
+ 0)) {
+ retval = ENXIO;
+ break;
+ }
+ for (i = 0; i < (eccd->eccbytes * steps); i++)
+ eccd->eccread[i] = ((uint8_t *)oob)[eccpos[i]];
+
+ nand_debug(NDBG_ECC,"%s: ECC read:", __func__);
+ if (nand_debug_flag & NDBG_ECC)
+ for (i = 0; i < (eccd->eccbytes * steps); i++)
+ printf("%x ", eccd->eccread[i]);
+ nand_debug(NDBG_ECC,"\n");
+
+ retval = NAND_CORRECT_ECC(chip->dev, ptr, eccd->eccread,
+ eccd->ecccalculated);
+
+ nand_debug(NDBG_ECC, "NAND_CORRECT_ECC() returned %d",
+ retval);
+
+ if (retval == 0)
+ pg_stat->ecc_stat.ecc_succeded++;
+ else if (retval > 0) {
+ pg_stat->ecc_stat.ecc_corrected += retval;
+ retval = ECC_CORRECTABLE;
+ } else {
+ pg_stat->ecc_stat.ecc_failed++;
+ break;
+ }
+ }
+
+ pg_stat->page_read++;
+ page++;
+ ptr += cg->page_size;
+ }
+
+ NANDBUS_UNLOCK(nandbus);
+
+ if (oob)
+ free(oob, M_NAND);
+
+ return (retval);
+}
+
+int
+nand_read_pages_raw(struct nand_chip *chip, uint32_t offset, void *buf,
+ uint32_t len)
+{
+ struct chip_geom *cg;
+ device_t nandbus;
+ uint8_t *ptr;
+ uint32_t page, num, end, begin = 0, begin_off;
+ int retval = 0;
+
+ cg = &chip->chip_geom;
+ page = offset_to_page(cg, offset);
+ begin_off = offset - page * cg->page_size;
+ if (begin_off) {
+ begin = cg->page_size - begin_off;
+ len -= begin;
+ }
+ num = len / cg->page_size;
+ end = len % cg->page_size;
+
+ nandbus = device_get_parent(chip->dev);
+ NANDBUS_LOCK(nandbus);
+ NANDBUS_SELECT_CS(device_get_parent(chip->dev), chip->num);
+
+ ptr = (uint8_t *)buf;
+ if (begin_off) {
+ if (NAND_READ_PAGE(chip->dev, page, ptr, begin, begin_off)) {
+ NANDBUS_UNLOCK(nandbus);
+ return (ENXIO);
+ }
+
+ page++;
+ ptr += begin;
+ }
+
+ while (num--) {
+ if (NAND_READ_PAGE(chip->dev, page, ptr, cg->page_size, 0)) {
+ NANDBUS_UNLOCK(nandbus);
+ return (ENXIO);
+ }
+
+ page++;
+ ptr += cg->page_size;
+ }
+
+ if (end)
+ if (NAND_READ_PAGE(chip->dev, page, ptr, end, 0)) {
+ NANDBUS_UNLOCK(nandbus);
+ return (ENXIO);
+ }
+
+ NANDBUS_UNLOCK(nandbus);
+
+ return (retval);
+}
+
+
+int
+nand_prog_pages(struct nand_chip *chip, uint32_t offset, uint8_t *buf,
+ uint32_t len)
+{
+ struct chip_geom *cg;
+ struct page_stat *pg_stat;
+ struct nand_ecc_data *eccd;
+ device_t nandbus;
+ uint32_t page, num;
+ uint8_t *oob = NULL;
+ uint16_t *eccpos = NULL;
+ int steps = 0, i, needwrite, err = 0;
+
+ nand_debug(NDBG_NAND,"%p prog page %x[%x]", chip, offset, len);
+
+ eccd = &chip->nand->ecc;
+ cg = &chip->chip_geom;
+ page = offset_to_page(cg, offset);
+ num = len / cg->page_size;
+
+ if (eccd->eccmode != NAND_ECC_NONE) {
+ steps = cg->page_size / eccd->eccsize;
+ oob = malloc(cg->oob_size, M_NAND, M_WAITOK);
+ eccpos = default_software_ecc_positions(chip);
+ }
+
+ nandbus = device_get_parent(chip->dev);
+ NANDBUS_LOCK(nandbus);
+ NANDBUS_SELECT_CS(device_get_parent(chip->dev), chip->num);
+
+ while (num--) {
+ if (NAND_PROGRAM_PAGE(chip->dev, page, buf, cg->page_size, 0)) {
+ err = ENXIO;
+ break;
+ }
+
+ if (eccd->eccmode != NAND_ECC_NONE) {
+ if (NAND_GET_ECC(chip->dev, buf, &eccd->ecccalculated,
+ &needwrite)) {
+ err = ENXIO;
+ break;
+ }
+ nand_debug(NDBG_ECC,"ECC calculated:");
+ if (nand_debug_flag & NDBG_ECC)
+ for (i = 0; i < (eccd->eccbytes * steps); i++)
+ printf("%x ", eccd->ecccalculated[i]);
+
+ nand_debug(NDBG_ECC,"\n");
+
+ if (needwrite) {
+ if (NAND_READ_OOB(chip->dev, page, oob, cg->oob_size,
+ 0)) {
+ err = ENXIO;
+ break;
+ }
+
+ for (i = 0; i < (eccd->eccbytes * steps); i++)
+ oob[eccpos[i]] = eccd->ecccalculated[i];
+
+ if (NAND_PROGRAM_OOB(chip->dev, page, oob,
+ cg->oob_size, 0)) {
+ err = ENXIO;
+ break;
+ }
+ }
+ }
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_written++;
+
+ page++;
+ buf += cg->page_size;
+ }
+
+ NANDBUS_UNLOCK(nandbus);
+
+ if (oob)
+ free(oob, M_NAND);
+
+ return (err);
+}
+
+int
+nand_prog_pages_raw(struct nand_chip *chip, uint32_t offset, void *buf,
+ uint32_t len)
+{
+ struct chip_geom *cg;
+ device_t nandbus;
+ uint8_t *ptr;
+ uint32_t page, num, end, begin = 0, begin_off;
+ int retval = 0;
+
+ cg = &chip->chip_geom;
+ page = offset_to_page(cg, offset);
+ begin_off = offset - page * cg->page_size;
+ if (begin_off) {
+ begin = cg->page_size - begin_off;
+ len -= begin;
+ }
+ num = len / cg->page_size;
+ end = len % cg->page_size;
+
+ nandbus = device_get_parent(chip->dev);
+ NANDBUS_LOCK(nandbus);
+ NANDBUS_SELECT_CS(device_get_parent(chip->dev), chip->num);
+
+ ptr = (uint8_t *)buf;
+ if (begin_off) {
+ if (NAND_PROGRAM_PAGE(chip->dev, page, ptr, begin, begin_off)) {
+ NANDBUS_UNLOCK(nandbus);
+ return (ENXIO);
+ }
+
+ page++;
+ ptr += begin;
+ }
+
+ while (num--) {
+ if (NAND_PROGRAM_PAGE(chip->dev, page, ptr, cg->page_size, 0)) {
+ NANDBUS_UNLOCK(nandbus);
+ return (ENXIO);
+ }
+
+ page++;
+ ptr += cg->page_size;
+ }
+
+ if (end)
+ retval = NAND_PROGRAM_PAGE(chip->dev, page, ptr, end, 0);
+
+ NANDBUS_UNLOCK(nandbus);
+
+ return (retval);
+}
+
+int
+nand_read_oob(struct nand_chip *chip, uint32_t page, void *buf,
+ uint32_t len)
+{
+ device_t nandbus;
+ int retval = 0;
+
+ nandbus = device_get_parent(chip->dev);
+ NANDBUS_LOCK(nandbus);
+ NANDBUS_SELECT_CS(device_get_parent(chip->dev), chip->num);
+
+ retval = NAND_READ_OOB(chip->dev, page, buf, len, 0);
+
+ NANDBUS_UNLOCK(nandbus);
+
+ return (retval);
+}
+
+
+int
+nand_prog_oob(struct nand_chip *chip, uint32_t page, void *buf,
+ uint32_t len)
+{
+ device_t nandbus;
+ int retval = 0;
+
+ nandbus = device_get_parent(chip->dev);
+ NANDBUS_LOCK(nandbus);
+ NANDBUS_SELECT_CS(device_get_parent(chip->dev), chip->num);
+
+ retval = NAND_PROGRAM_OOB(chip->dev, page, buf, len, 0);
+
+ NANDBUS_UNLOCK(nandbus);
+
+ return (retval);
+}
+
+int
+nand_erase_blocks(struct nand_chip *chip, off_t offset, size_t len)
+{
+ device_t nandbus;
+ struct chip_geom *cg;
+ uint32_t block, num_blocks;
+ int err = 0;
+
+ cg = &chip->chip_geom;
+ if ((offset % cg->block_size) || (len % cg->block_size))
+ return (EINVAL);
+
+ block = offset / cg->block_size;
+ num_blocks = len / cg->block_size;
+ nand_debug(NDBG_NAND,"%p erase blocks %d[%d]", chip, block, num_blocks);
+
+ nandbus = device_get_parent(chip->dev);
+ NANDBUS_LOCK(nandbus);
+ NANDBUS_SELECT_CS(device_get_parent(chip->dev), chip->num);
+
+ while (num_blocks--) {
+ if (!nand_check_bad_block(chip, block)) {
+ if (NAND_ERASE_BLOCK(chip->dev, block)) {
+ nand_debug(NDBG_NAND,"%p erase blocks %d error",
+ chip, block);
+ nand_mark_bad_block(chip, block);
+ err = ENXIO;
+ }
+ } else
+ err = ENXIO;
+
+ block++;
+ };
+
+ NANDBUS_UNLOCK(nandbus);
+
+ if (err)
+ nand_update_bbt(chip);
+
+ return (err);
+}
diff --git a/sys/dev/nand/nand.h b/sys/dev/nand/nand.h
new file mode 100644
index 000000000000..05101acddad9
--- /dev/null
+++ b/sys/dev/nand/nand.h
@@ -0,0 +1,385 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 _DEV_NAND_H_
+#define _DEV_NAND_H_
+
+#include <sys/bus.h>
+#include <sys/param.h>
+#include <sys/lock.h>
+#include <sys/sx.h>
+#include <sys/taskqueue.h>
+#include <sys/queue.h>
+#include <sys/bio.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/malloc.h>
+
+#include <dev/nand/nand_dev.h>
+
+MALLOC_DECLARE(M_NAND);
+
+/* Read commands */
+#define NAND_CMD_READ 0x00
+#define NAND_CMD_CHNG_READ_COL 0x05
+#define NAND_CMD_READ_END 0x30
+#define NAND_CMD_READ_CACHE 0x31
+#define NAND_CMD_READ_CPBK 0x35
+#define NAND_CMD_READ_CACHE_END 0x3F
+#define NAND_CMD_CHNG_READ_COL_END 0xE0
+
+/* Erase commands */
+#define NAND_CMD_ERASE 0x60
+#define NAND_CMD_ERASE_END 0xD0
+#define NAND_CMD_ERASE_INTLV 0xD1
+
+/* Program commands */
+#define NAND_CMD_PROG 0x80
+#define NAND_CMD_CHNG_WRITE_COL 0x85
+#define NAND_CMD_PROG_END 0x10
+#define NAND_CMD_PROG_INTLV 0x11
+#define NAND_CMD_PROG_CACHE 0x15
+
+/* Misc commands */
+#define NAND_CMD_STATUS 0x70
+#define NAND_CMD_STATUS_ENH 0x78
+#define NAND_CMD_READ_ID 0x90
+#define NAND_CMD_READ_PARAMETER 0xec
+#define NAND_CMD_READ_UNIQUE_ID 0xed
+#define NAND_CMD_GET_FEATURE 0xee
+#define NAND_CMD_SET_FEATURE 0xef
+
+/* Reset commands */
+#define NAND_CMD_SYNCH_RESET 0xfc
+#define NAND_CMD_RESET 0xff
+
+/* Small page flash commands */
+#define NAND_CMD_SMALLA 0x00
+#define NAND_CMD_SMALLB 0x01
+#define NAND_CMD_SMALLOOB 0x50
+
+#define NAND_STATUS_FAIL 0x1
+#define NAND_STATUS_FAILC 0x2
+#define NAND_STATUS_ARDY 0x20
+#define NAND_STATUS_RDY 0x40
+#define NAND_STATUS_WP 0x80
+
+#define NAND_LP_OOB_COLUMN_START 0x800
+#define NAND_LP_OOBSZ 0x40
+#define NAND_SP_OOB_COLUMN_START 0x200
+#define NAND_SP_OOBSZ 0x10
+
+#define PAGE_PARAM_LENGTH 0x100
+#define PAGE_PARAMETER_DEF 0x0
+#define PAGE_PARAMETER_RED_1 0x100
+#define PAGE_PARAMETER_RED_2 0x200
+
+#define ONFI_SIG_ADDR 0x20
+
+#define NAND_MAX_CHIPS 0x4
+#define NAND_MAX_OOBSZ 512
+#define NAND_MAX_PAGESZ 16384
+
+#define NAND_SMALL_PAGE_SIZE 0x200
+
+#define NAND_16_BIT 0x00000001
+
+#define NAND_ECC_NONE 0x0
+#define NAND_ECC_SOFT 0x1
+#define NAND_ECC_FULLHW 0x2
+#define NAND_ECC_PARTHW 0x4
+#define NAND_ECC_MODE_MASK 0x7
+
+#define ECC_OK 0
+#define ECC_CORRECTABLE 1
+#define ECC_ERROR_ECC (-1)
+#define ECC_UNCORRECTABLE (-2)
+
+#define NAND_MAN_SAMSUNG 0xec
+#define NAND_MAN_HYNIX 0xad
+#define NAND_MAN_STMICRO 0x20
+
+struct nand_id {
+ uint8_t man_id;
+ uint8_t dev_id;
+};
+
+struct nand_params {
+ struct nand_id id;
+ char *name;
+ uint32_t chip_size;
+ uint32_t page_size;
+ uint32_t oob_size;
+ uint32_t pages_per_block;
+ uint32_t flags;
+};
+
+/* nand debug levels */
+#define NDBG_NAND 0x01
+#define NDBG_CDEV 0x02
+#define NDBG_GEN 0x04
+#define NDBG_GEOM 0x08
+#define NDBG_BUS 0x10
+#define NDBG_SIM 0x20
+#define NDBG_CTRL 0x40
+#define NDBG_DRV 0x80
+#define NDBG_ECC 0x100
+
+/* nand_debug_function */
+void nand_debug(int level, const char *fmt, ...);
+extern int nand_debug_flag;
+
+/* ONFI features bit*/
+#define ONFI_FEAT_16BIT 0x01
+#define ONFI_FEAT_MULT_LUN 0x02
+#define ONFI_FEAT_INTLV_OPS 0x04
+#define ONFI_FEAT_CPBK_RESTRICT 0x08
+#define ONFI_FEAT_SRC_SYNCH 0x10
+
+/* ONFI optional commands bits */
+#define ONFI_OPTCOM_PROG_CACHE 0x01
+#define ONFI_OPTCOM_READ_CACHE 0x02
+#define ONFI_OPTCOM_GETSET_FEAT 0x04
+#define ONFI_OPTCOM_STATUS_ENH 0x08
+#define ONFI_OPTCOM_COPYBACK 0x10
+#define ONFI_OPTCOM_UNIQUE_ID 0x20
+
+
+/* Layout of parameter page is defined in ONFI */
+struct onfi_params {
+ char signature[4];
+ uint16_t rev;
+ uint16_t features;
+ uint16_t optional_commands;
+ uint8_t res1[22];
+ char manufacturer_name[12];
+ char device_model[20];
+ uint8_t manufacturer_id;
+ uint16_t date;
+ uint8_t res2[13];
+ uint32_t bytes_per_page;
+ uint16_t spare_bytes_per_page;
+ uint32_t bytes_per_partial_page;
+ uint16_t spare_bytes_per_partial_page;
+ uint32_t pages_per_block;
+ uint32_t blocks_per_lun;
+ uint8_t luns;
+ uint8_t address_cycles;
+ uint8_t bits_per_cell;
+ uint16_t max_bad_block_per_lun;
+ uint16_t block_endurance;
+ uint8_t guaranteed_valid_blocks;
+ uint16_t valid_block_endurance;
+ uint8_t programs_per_page;
+ uint8_t partial_prog_attr;
+ uint8_t bits_of_ecc;
+ uint8_t interleaved_addr_bits;
+ uint8_t interleaved_oper_attr;
+ uint8_t res3[13];
+ uint8_t pin_capacitance;
+ uint16_t asynch_timing_mode_support;
+ uint16_t asynch_prog_cache_timing_mode_support;
+ uint16_t t_prog; /* us, max page program time */
+ uint16_t t_bers; /* us, max block erase time */
+ uint16_t t_r; /* us, max page read time */
+ uint16_t t_ccs; /* ns, min change column setup time */
+ uint16_t source_synch_timing_mode_support;
+ uint8_t source_synch_feat;
+ uint16_t clk_input_capacitance;
+ uint16_t io_capacitance;
+ uint16_t input_capacitance;
+ uint8_t input_capacitance_max;
+ uint8_t driver_strength_support;
+ uint8_t res4[12];
+ uint16_t vendor_rev;
+ uint8_t vendor_spec[8];
+ uint16_t crc;
+};
+
+struct nand_ecc_data {
+ int eccsize; /* Number of data bytes per ECC step */
+ int eccmode;
+ int eccbytes; /* Number of ECC bytes per step */
+
+ uint16_t *eccpositions; /* Positions of ecc bytes */
+ uint8_t ecccalculated[NAND_MAX_OOBSZ];
+ uint8_t eccread[NAND_MAX_OOBSZ];
+};
+
+struct ecc_stat {
+ uint32_t ecc_succeded;
+ uint32_t ecc_corrected;
+ uint32_t ecc_failed;
+};
+
+struct page_stat {
+ struct ecc_stat ecc_stat;
+ uint32_t page_read;
+ uint32_t page_raw_read;
+ uint32_t page_written;
+ uint32_t page_raw_written;
+};
+
+struct block_stat {
+ uint32_t block_erased;
+};
+
+struct chip_geom {
+ uint32_t chip_size;
+ uint32_t block_size;
+ uint32_t page_size;
+ uint32_t oob_size;
+
+ uint32_t luns;
+ uint32_t blks_per_lun;
+ uint32_t blks_per_chip;
+ uint32_t pgs_per_blk;
+
+ uint32_t pg_mask;
+ uint32_t blk_mask;
+ uint32_t lun_mask;
+ uint8_t blk_shift;
+ uint8_t lun_shift;
+};
+
+struct nand_chip {
+ device_t dev;
+ struct nand_id id;
+ struct chip_geom chip_geom;
+
+ uint16_t t_prog; /* us, max page program time */
+ uint16_t t_bers; /* us, max block erase time */
+ uint16_t t_r; /* us, max page read time */
+ uint16_t t_ccs; /* ns, min change column setup time */
+ uint8_t num;
+ uint8_t flags;
+
+ struct page_stat *pg_stat;
+ struct block_stat *blk_stat;
+ struct nand_softc *nand;
+ struct nand_bbt *bbt;
+ struct nand_ops *ops;
+ struct cdev *cdev;
+
+ struct disk *ndisk;
+ struct disk *rdisk;
+ struct bio_queue_head bioq; /* bio queue */
+ struct mtx qlock; /* bioq lock */
+ struct taskqueue *tq; /* private task queue for i/o request */
+ struct task iotask; /* i/o processing */
+
+};
+
+struct nand_softc {
+ uint8_t flags;
+
+ char *chip_cdev_name;
+ struct nand_ecc_data ecc;
+};
+
+/* NAND ops */
+int nand_erase_blocks(struct nand_chip *chip, off_t offset, size_t len);
+int nand_prog_pages(struct nand_chip *chip, uint32_t offset, uint8_t *buf,
+ uint32_t len);
+int nand_read_pages(struct nand_chip *chip, uint32_t offset, void *buf,
+ uint32_t len);
+int nand_read_pages_raw(struct nand_chip *chip, uint32_t offset, void *buf,
+ uint32_t len);
+int nand_prog_pages_raw(struct nand_chip *chip, uint32_t offset, void *buf,
+ uint32_t len);
+int nand_read_oob(struct nand_chip *chip, uint32_t page, void *buf,
+ uint32_t len);
+int nand_prog_oob(struct nand_chip *chip, uint32_t page, void *buf,
+ uint32_t len);
+
+int nand_select_cs(device_t dev, uint8_t cs);
+
+int nand_read_parameter(struct nand_softc *nand, struct onfi_params *param);
+int nand_synch_reset(struct nand_softc *nand);
+int nand_chng_read_col(device_t dev, uint32_t col, void *buf, size_t len);
+int nand_chng_write_col(device_t dev, uint32_t col, void *buf, size_t len);
+int nand_get_feature(device_t dev, uint8_t feat, void* buf);
+int nand_set_feature(device_t dev, uint8_t feat, void* buf);
+
+
+int nand_erase_block_intlv(device_t dev, uint32_t block);
+int nand_copyback_read(device_t dev, uint32_t page, uint32_t col,
+ void *buf, size_t len);
+int nand_copyback_prog(device_t dev, uint32_t page, uint32_t col,
+ void *buf, size_t len);
+int nand_copyback_prog_intlv(device_t dev, uint32_t page);
+int nand_prog_cache(device_t dev, uint32_t page, uint32_t col,
+ void *buf, size_t len, uint8_t end);
+int nand_prog_intlv(device_t dev, uint32_t page, uint32_t col,
+ void *buf, size_t len);
+int nand_read_cache(device_t dev, uint32_t page, uint32_t col,
+ void *buf, size_t len, uint8_t end);
+
+int nand_write_ecc(struct nand_softc *nand, uint32_t page, uint8_t *data);
+int nand_read_ecc(struct nand_softc *nand, uint32_t page, uint8_t *data);
+
+int nand_softecc_get(device_t dev, uint8_t *buf, int pagesize, uint8_t *ecc);
+int nand_softecc_correct(device_t dev, uint8_t *buf, int pagesize,
+ uint8_t *readecc, uint8_t *calcecc);
+
+/* Chip initialization */
+void nand_init(struct nand_softc *nand, device_t dev, int ecc_mode,
+ int ecc_bytes, int ecc_size, uint16_t* eccposition, char* cdev_name);
+void nand_detach(struct nand_softc *nand);
+struct nand_params *nand_get_params(struct nand_id *id);
+
+void nand_onfi_set_params(struct nand_chip *chip, struct onfi_params *params);
+void nand_set_params(struct nand_chip *chip, struct nand_params *params);
+int nand_init_stat(struct nand_chip *chip);
+void nand_destroy_stat(struct nand_chip *chip);
+
+/* BBT */
+int nand_init_bbt(struct nand_chip *chip);
+void nand_destroy_bbt(struct nand_chip *chip);
+int nand_update_bbt(struct nand_chip *chip);
+int nand_mark_bad_block(struct nand_chip* chip, uint32_t block_num);
+int nand_check_bad_block(struct nand_chip* chip, uint32_t block_num);
+
+/* cdev creation/removal */
+int nand_make_dev(struct nand_chip* chip);
+void nand_destroy_dev(struct nand_chip *chip);
+
+int create_geom_disk(struct nand_chip* chip);
+int create_geom_raw_disk(struct nand_chip *chip);
+void destroy_geom_disk(struct nand_chip *chip);
+void destroy_geom_raw_disk(struct nand_chip *chip);
+
+int init_chip_geom(struct chip_geom* cg, uint32_t luns, uint32_t blks_per_lun,
+ uint32_t pgs_per_blk, uint32_t pg_size, uint32_t oob_size);
+int nand_row_to_blkpg(struct chip_geom *cg, uint32_t row, uint32_t *lun,
+ uint32_t *blk, uint32_t *pg);
+int page_to_row(struct chip_geom *cg, uint32_t page, uint32_t *row);
+int nand_check_page_boundary(struct nand_chip *chip, uint32_t page);
+void nand_get_chip_param(struct nand_chip *chip, struct chip_param_io *param);
+
+#endif /* _DEV_NAND_H_ */
diff --git a/sys/dev/nand/nand_bbt.c b/sys/dev/nand/nand_bbt.c
new file mode 100644
index 000000000000..d3f163af3b17
--- /dev/null
+++ b/sys/dev/nand/nand_bbt.c
@@ -0,0 +1,273 @@
+/*-
+ * Copyright (c) 2009-2012 Semihalf
+ * 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 <sys/cdefs.h>
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/malloc.h>
+#include <sys/bus.h>
+
+#include <dev/nand/nand.h>
+
+#include "nand_if.h"
+
+#define BBT_PRIMARY_PATTERN 0x01020304
+#define BBT_SECONDARY_PATTERN 0x05060708
+
+enum bbt_place {
+ BBT_NONE,
+ BBT_PRIMARY,
+ BBT_SECONDARY
+};
+
+struct nand_bbt {
+ struct nand_chip *chip;
+ uint32_t primary_map;
+ uint32_t secondary_map;
+ enum bbt_place active;
+ struct bbt_header *hdr;
+ uint32_t tab_len;
+ uint32_t *table;
+};
+
+struct bbt_header {
+ uint32_t pattern;
+ int32_t seq_nr;
+};
+
+static int nand_bbt_save(struct nand_bbt *);
+static int nand_bbt_load_hdr(struct nand_bbt *, struct bbt_header *, int8_t);
+static int nand_bbt_load_table(struct nand_bbt *);
+static int nand_bbt_prescan(struct nand_bbt *);
+
+int
+nand_init_bbt(struct nand_chip *chip)
+{
+ struct chip_geom *cg;
+ struct nand_bbt *bbt;
+ int err;
+
+ cg = &chip->chip_geom;
+
+ bbt = malloc(sizeof(struct nand_bbt), M_NAND, M_ZERO | M_WAITOK);
+ if (!bbt) {
+ device_printf(chip->dev,
+ "Cannot allocate memory for bad block struct");
+ return (ENOMEM);
+ }
+
+ bbt->chip = chip;
+ bbt->active = BBT_NONE;
+ bbt->primary_map = cg->chip_size - cg->block_size;
+ bbt->secondary_map = cg->chip_size - 2 * cg->block_size;
+ bbt->tab_len = cg->blks_per_chip * sizeof(uint32_t);
+ bbt->hdr = malloc(sizeof(struct bbt_header) + bbt->tab_len, M_NAND,
+ M_WAITOK);
+ if (!bbt->hdr) {
+ device_printf(chip->dev, "Cannot allocate %d bytes for BB "
+ "Table", bbt->tab_len);
+ free(bbt, M_NAND);
+ return (ENOMEM);
+ }
+ bbt->hdr->seq_nr = 0;
+ bbt->table = (uint32_t *)((uint8_t *)bbt->hdr +
+ sizeof(struct bbt_header));
+
+ err = nand_bbt_load_table(bbt);
+ if (err) {
+ free(bbt->table, M_NAND);
+ free(bbt, M_NAND);
+ return (err);
+ }
+
+ chip->bbt = bbt;
+ if (bbt->active == BBT_NONE) {
+ bbt->active = BBT_PRIMARY;
+ memset(bbt->table, 0xff, bbt->tab_len);
+ nand_bbt_prescan(bbt);
+ nand_bbt_save(bbt);
+ } else
+ device_printf(chip->dev, "Found BBT table for chip\n");
+
+ return (0);
+}
+
+void
+nand_destroy_bbt(struct nand_chip *chip)
+{
+
+ if (chip->bbt) {
+ nand_bbt_save(chip->bbt);
+
+ free(chip->bbt->hdr, M_NAND);
+ free(chip->bbt, M_NAND);
+ chip->bbt = NULL;
+ }
+}
+
+int
+nand_update_bbt(struct nand_chip *chip)
+{
+
+ nand_bbt_save(chip->bbt);
+
+ return (0);
+}
+
+static int
+nand_bbt_save(struct nand_bbt *bbt)
+{
+ enum bbt_place next;
+ uint32_t addr;
+ int32_t err;
+
+ if (bbt->active == BBT_PRIMARY) {
+ addr = bbt->secondary_map;
+ bbt->hdr->pattern = BBT_SECONDARY_PATTERN;
+ next = BBT_SECONDARY;
+ } else {
+ addr = bbt->primary_map;
+ bbt->hdr->pattern = BBT_PRIMARY_PATTERN;
+ next = BBT_PRIMARY;
+ }
+
+ err = nand_erase_blocks(bbt->chip, addr,
+ bbt->chip->chip_geom.block_size);
+ if (err)
+ return (err);
+
+ bbt->hdr->seq_nr++;
+
+ err = nand_prog_pages_raw(bbt->chip, addr, bbt->hdr,
+ bbt->tab_len + sizeof(struct bbt_header));
+ if (err)
+ return (err);
+
+ bbt->active = next;
+ return (0);
+}
+
+static int
+nand_bbt_load_hdr(struct nand_bbt *bbt, struct bbt_header *hdr, int8_t primary)
+{
+ uint32_t addr;
+
+ if (primary)
+ addr = bbt->primary_map;
+ else
+ addr = bbt->secondary_map;
+
+ return (nand_read_pages_raw(bbt->chip, addr, hdr,
+ sizeof(struct bbt_header)));
+}
+
+static int
+nand_bbt_load_table(struct nand_bbt *bbt)
+{
+ struct bbt_header hdr1, hdr2;
+ uint32_t address = 0;
+ int err = 0;
+
+ bzero(&hdr1, sizeof(hdr1));
+ bzero(&hdr2, sizeof(hdr2));
+
+ nand_bbt_load_hdr(bbt, &hdr1, 1);
+ if (hdr1.pattern == BBT_PRIMARY_PATTERN) {
+ bbt->active = BBT_PRIMARY;
+ address = bbt->primary_map;
+ } else
+ bzero(&hdr1, sizeof(hdr1));
+
+
+ nand_bbt_load_hdr(bbt, &hdr2, 0);
+ if ((hdr2.pattern == BBT_SECONDARY_PATTERN) &&
+ (hdr2.seq_nr > hdr1.seq_nr)) {
+ bbt->active = BBT_SECONDARY;
+ address = bbt->secondary_map;
+ } else
+ bzero(&hdr2, sizeof(hdr2));
+
+ if (bbt->active != BBT_NONE)
+ err = nand_read_pages_raw(bbt->chip, address, bbt->hdr,
+ bbt->tab_len + sizeof(struct bbt_header));
+
+ return (err);
+}
+
+static int
+nand_bbt_prescan(struct nand_bbt *bbt)
+{
+ int32_t i;
+ uint8_t bad;
+ bool printed_hash = 0;
+
+ device_printf(bbt->chip->dev, "No BBT found. Prescan chip...\n");
+ for (i = 0; i < bbt->chip->chip_geom.blks_per_chip; i++) {
+ if (NAND_IS_BLK_BAD(bbt->chip->dev, i, &bad))
+ return (ENXIO);
+
+ if (bad) {
+ device_printf(bbt->chip->dev, "Bad block(%d)\n", i);
+ bbt->table[i] = 0x0FFFFFFF;
+ }
+ if (!(i % 100)) {
+ printf("#");
+ printed_hash = 1;
+ }
+ }
+
+ if (printed_hash)
+ printf("\n");
+
+ return (0);
+}
+
+int
+nand_check_bad_block(struct nand_chip *chip, uint32_t block_number)
+{
+
+ if (!chip || !chip->bbt)
+ return (0);
+
+ if ((chip->bbt->table[block_number] & 0xF0000000) == 0)
+ return (1);
+
+ return (0);
+}
+
+int
+nand_mark_bad_block(struct nand_chip *chip, uint32_t block_number)
+{
+
+ chip->bbt->table[block_number] = 0x0FFFFFFF;
+
+ return (0);
+}
diff --git a/sys/dev/nand/nand_cdev.c b/sys/dev/nand/nand_cdev.c
new file mode 100644
index 000000000000..ac27ff361537
--- /dev/null
+++ b/sys/dev/nand/nand_cdev.c
@@ -0,0 +1,413 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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/systm.h>
+#include <sys/conf.h>
+#include <sys/bus.h>
+#include <sys/malloc.h>
+#include <sys/uio.h>
+#include <sys/bio.h>
+
+#include <dev/nand/nand.h>
+#include <dev/nand/nandbus.h>
+#include <dev/nand/nand_dev.h>
+#include "nand_if.h"
+#include "nandbus_if.h"
+
+static int nand_page_stat(struct nand_chip *, struct page_stat_io *);
+static int nand_block_stat(struct nand_chip *, struct block_stat_io *);
+
+static d_ioctl_t nand_ioctl;
+static d_open_t nand_open;
+static d_strategy_t nand_strategy;
+
+static struct cdevsw nand_cdevsw = {
+ .d_version = D_VERSION,
+ .d_name = "nand",
+ .d_open = nand_open,
+ .d_read = physread,
+ .d_write = physwrite,
+ .d_ioctl = nand_ioctl,
+ .d_strategy = nand_strategy,
+};
+
+static int
+offset_to_page(struct chip_geom *cg, uint32_t offset)
+{
+
+ return (offset / cg->page_size);
+}
+
+static int
+offset_to_page_off(struct chip_geom *cg, uint32_t offset)
+{
+
+ return (offset % cg->page_size);
+}
+
+int
+nand_make_dev(struct nand_chip *chip)
+{
+ struct nandbus_ivar *ivar;
+ device_t parent, nandbus;
+ int parent_unit, unit;
+ char *name;
+
+ ivar = device_get_ivars(chip->dev);
+ nandbus = device_get_parent(chip->dev);
+
+ if (ivar->chip_cdev_name) {
+ name = ivar->chip_cdev_name;
+
+ /*
+ * If we got distinct name for chip device we can enumarete it
+ * based on contoller number.
+ */
+ parent = device_get_parent(nandbus);
+ } else {
+ name = "nand";
+ parent = nandbus;
+ }
+
+ parent_unit = device_get_unit(parent);
+ unit = parent_unit * 4 + chip->num;
+ chip->cdev = make_dev(&nand_cdevsw, unit, UID_ROOT, GID_WHEEL,
+ 0666, "%s%d.%d", name, parent_unit, chip->num);
+
+ if (chip->cdev == NULL)
+ return (ENXIO);
+
+ if (bootverbose)
+ device_printf(chip->dev, "Created cdev %s%d.%d for chip "
+ "[0x%0x, 0x%0x]\n", name, parent_unit, chip->num,
+ ivar->man_id, ivar->dev_id);
+
+ chip->cdev->si_drv1 = chip;
+
+ return (0);
+}
+
+void
+nand_destroy_dev(struct nand_chip *chip)
+{
+
+ if (chip->cdev)
+ destroy_dev(chip->cdev);
+}
+
+static int
+nand_open(struct cdev *dev, int oflags, int devtype, struct thread *td)
+{
+
+ return (0);
+}
+
+static int
+nand_read(struct nand_chip *chip, uint32_t offset, void *buf, uint32_t len)
+{
+ struct chip_geom *cg;
+ device_t nandbus;
+ int start_page, count, off, err = 0;
+ uint8_t *ptr, *tmp;
+
+ nand_debug(NDBG_CDEV, "Read from chip%d [%p] at %d\n", chip->num,
+ chip, offset);
+
+ nandbus = device_get_parent(chip->dev);
+ NANDBUS_LOCK(nandbus);
+ NANDBUS_SELECT_CS(device_get_parent(chip->dev), chip->num);
+
+ cg = &chip->chip_geom;
+ start_page = offset_to_page(cg, offset);
+ off = offset_to_page_off(cg, offset);
+ count = (len > cg->page_size - off) ? cg->page_size - off : len;
+
+ ptr = (uint8_t *)buf;
+ while (len > 0) {
+ if (len < cg->page_size) {
+ tmp = malloc(cg->page_size, M_NAND, M_WAITOK);
+ if (!tmp) {
+ err = ENOMEM;
+ break;
+ }
+ err = NAND_READ_PAGE(chip->dev, start_page,
+ tmp, cg->page_size, 0);
+ if (err) {
+ free(tmp, M_NAND);
+ break;
+ }
+ bcopy(tmp + off, ptr, count);
+ free(tmp, M_NAND);
+ } else {
+ err = NAND_READ_PAGE(chip->dev, start_page,
+ ptr, cg->page_size, 0);
+ if (err)
+ break;
+ }
+
+ len -= count;
+ start_page++;
+ ptr += count;
+ count = (len > cg->page_size) ? cg->page_size : len;
+ off = 0;
+ }
+
+ NANDBUS_UNLOCK(nandbus);
+ return (err);
+}
+
+static int
+nand_write(struct nand_chip *chip, uint32_t offset, void* buf, uint32_t len)
+{
+ struct chip_geom *cg;
+ device_t nandbus;
+ int off, start_page, err = 0;
+ uint8_t *ptr;
+
+ nand_debug(NDBG_CDEV, "Write to chip %d [%p] at %d\n", chip->num,
+ chip, offset);
+
+ nandbus = device_get_parent(chip->dev);
+ NANDBUS_LOCK(nandbus);
+ NANDBUS_SELECT_CS(device_get_parent(chip->dev), chip->num);
+
+ cg = &chip->chip_geom;
+ start_page = offset_to_page(cg, offset);
+ off = offset_to_page_off(cg, offset);
+
+ if (off != 0 || (len % cg->page_size) != 0) {
+ printf("Not aligned write start [0x%08x] size [0x%08x]\n",
+ off, len);
+ NANDBUS_UNLOCK(nandbus);
+ return (EINVAL);
+ }
+
+ ptr = (uint8_t *)buf;
+ while (len > 0) {
+ err = NAND_PROGRAM_PAGE(chip->dev, start_page, ptr,
+ cg->page_size, 0);
+ if (err)
+ break;
+
+ len -= cg->page_size;
+ start_page++;
+ ptr += cg->page_size;
+ }
+
+ NANDBUS_UNLOCK(nandbus);
+ return (err);
+}
+
+static void
+nand_strategy(struct bio *bp)
+{
+ struct nand_chip *chip;
+ struct cdev *dev;
+ int err = 0;
+
+ dev = bp->bio_dev;
+ chip = dev->si_drv1;
+
+ nand_debug(NDBG_CDEV, "Strategy %s on chip %d [%p]\n",
+ (bp->bio_cmd & BIO_READ) == BIO_READ ? "READ" : "WRITE",
+ chip->num, chip);
+
+ if ((bp->bio_cmd & BIO_READ) == BIO_READ) {
+ err = nand_read(chip,
+ bp->bio_offset & 0xffffffff,
+ bp->bio_data, bp->bio_bcount);
+ } else {
+ err = nand_write(chip,
+ bp->bio_offset & 0xffffffff,
+ bp->bio_data, bp->bio_bcount);
+ }
+
+ if (err == 0)
+ bp->bio_resid = 0;
+ else {
+ bp->bio_error = EIO;
+ bp->bio_flags |= BIO_ERROR;
+ bp->bio_resid = bp->bio_bcount;
+ }
+
+ biodone(bp);
+}
+
+static int
+nand_oob_access(struct nand_chip *chip, uint32_t page, uint32_t offset,
+ uint32_t len, uint8_t *data, uint8_t write)
+{
+ struct chip_geom *cg;
+ uint8_t *buf = NULL;
+ int ret = 0;
+
+ cg = &chip->chip_geom;
+
+ buf = malloc(cg->oob_size, M_NAND, M_WAITOK);
+ if (!buf)
+ return (ENOMEM);
+
+ memset(buf, 0xff, cg->oob_size);
+
+ if (!write) {
+ ret = nand_read_oob(chip, page, buf, cg->oob_size);
+ copyout(buf, data, len);
+ } else {
+ copyin(data, buf, len);
+ ret = nand_prog_oob(chip, page, buf, cg->oob_size);
+ }
+
+ free(buf, M_NAND);
+
+ return (ret);
+}
+
+static int
+nand_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
+ struct thread *td)
+{
+ struct nand_chip *chip;
+ struct nand_oob_rw *oob_rw = NULL;
+ struct nand_raw_rw *raw_rw = NULL;
+ device_t nandbus;
+ uint8_t *buf = NULL;
+ int ret = 0;
+ uint8_t status;
+
+ chip = (struct nand_chip *)dev->si_drv1;
+ nandbus = device_get_parent(chip->dev);
+
+ if ((cmd == NAND_IO_RAW_READ) || (cmd == NAND_IO_RAW_PROG)) {
+ raw_rw = (struct nand_raw_rw *)data;
+ buf = malloc(raw_rw->len, M_NAND, M_WAITOK);
+ }
+ switch(cmd) {
+ case NAND_IO_ERASE:
+ ret = nand_erase_blocks(chip, ((off_t *)data)[0],
+ ((off_t *)data)[1]);
+ break;
+
+ case NAND_IO_OOB_READ:
+ oob_rw = (struct nand_oob_rw *)data;
+ ret = nand_oob_access(chip, oob_rw->page, 0,
+ oob_rw->len, oob_rw->data, 0);
+ break;
+
+ case NAND_IO_OOB_PROG:
+ oob_rw = (struct nand_oob_rw *)data;
+ ret = nand_oob_access(chip, oob_rw->page, 0,
+ oob_rw->len, oob_rw->data, 1);
+ break;
+
+ case NAND_IO_GET_STATUS:
+ NANDBUS_LOCK(nandbus);
+ ret = NANDBUS_GET_STATUS(nandbus, &status);
+ if (ret == 0)
+ *(uint8_t *)data = status;
+ NANDBUS_UNLOCK(nandbus);
+ break;
+
+ case NAND_IO_RAW_PROG:
+ ret = copyin(raw_rw->data, buf, raw_rw->len);
+ if (ret)
+ break;
+ ret = nand_prog_pages_raw(chip, raw_rw->off, buf,
+ raw_rw->len);
+ break;
+
+ case NAND_IO_RAW_READ:
+ ret = nand_read_pages_raw(chip, raw_rw->off, buf,
+ raw_rw->len);
+ if (ret)
+ break;
+ ret = copyout(buf, raw_rw->data, raw_rw->len);
+ break;
+
+ case NAND_IO_PAGE_STAT:
+ ret = nand_page_stat(chip, (struct page_stat_io *)data);
+ break;
+
+ case NAND_IO_BLOCK_STAT:
+ ret = nand_block_stat(chip, (struct block_stat_io *)data);
+ break;
+
+ case NAND_IO_GET_CHIP_PARAM:
+ nand_get_chip_param(chip, (struct chip_param_io *)data);
+ break;
+
+ default:
+ printf("Unknown nand_ioctl request \n");
+ ret = EIO;
+ }
+
+ if (buf)
+ free(buf, M_NAND);
+
+ return (ret);
+}
+
+static int
+nand_page_stat(struct nand_chip *chip, struct page_stat_io *page_stat)
+{
+ struct chip_geom *cg;
+ struct page_stat *stat;
+ int num_pages;
+
+ cg = &chip->chip_geom;
+ num_pages = cg->pgs_per_blk * cg->blks_per_lun * cg->luns;
+ if (page_stat->page_num >= num_pages)
+ return (EINVAL);
+
+ stat = &chip->pg_stat[page_stat->page_num];
+ page_stat->page_read = stat->page_read;
+ page_stat->page_written = stat->page_written;
+ page_stat->page_raw_read = stat->page_raw_read;
+ page_stat->page_raw_written = stat->page_raw_written;
+ page_stat->ecc_succeded = stat->ecc_stat.ecc_succeded;
+ page_stat->ecc_corrected = stat->ecc_stat.ecc_corrected;
+ page_stat->ecc_failed = stat->ecc_stat.ecc_failed;
+
+ return (0);
+}
+
+static int
+nand_block_stat(struct nand_chip *chip, struct block_stat_io *block_stat)
+{
+ struct chip_geom *cg;
+ uint32_t block_num = block_stat->block_num;
+
+ cg = &chip->chip_geom;
+ if (block_num >= cg->blks_per_lun * cg->luns)
+ return (EINVAL);
+
+ block_stat->block_erased = chip->blk_stat[block_num].block_erased;
+
+ return (0);
+}
diff --git a/sys/dev/nand/nand_dev.h b/sys/dev/nand/nand_dev.h
new file mode 100644
index 000000000000..bc7d6c49c063
--- /dev/null
+++ b/sys/dev/nand/nand_dev.h
@@ -0,0 +1,90 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 _DEV_NAND_CDEV_H_
+#define _DEV_NAND_CDEV_H_
+
+#include <sys/ioccom.h>
+#include <sys/param.h>
+
+struct nand_raw_rw {
+ off_t off;
+ off_t len;
+ uint8_t *data;
+};
+
+struct nand_oob_rw {
+ uint32_t page;
+ off_t len;
+ uint8_t *data;
+};
+
+#define NAND_IOCTL_GROUP 'N'
+#define NAND_IO_ERASE _IOWR(NAND_IOCTL_GROUP, 0x0, off_t[2])
+
+#define NAND_IO_OOB_READ _IOWR(NAND_IOCTL_GROUP, 0x1, struct nand_oob_rw)
+
+#define NAND_IO_OOB_PROG _IOWR(NAND_IOCTL_GROUP, 0x2, struct nand_oob_rw)
+
+#define NAND_IO_RAW_READ _IOWR(NAND_IOCTL_GROUP, 0x3, struct nand_raw_rw)
+
+#define NAND_IO_RAW_PROG _IOWR(NAND_IOCTL_GROUP, 0x4, struct nand_raw_rw)
+
+#define NAND_IO_GET_STATUS _IOWR(NAND_IOCTL_GROUP, 0x5, uint8_t)
+
+struct page_stat_io {
+ uint32_t page_num;
+ uint32_t page_read;
+ uint32_t page_written;
+ uint32_t page_raw_read;
+ uint32_t page_raw_written;
+ uint32_t ecc_succeded;
+ uint32_t ecc_corrected;
+ uint32_t ecc_failed;
+};
+#define NAND_IO_PAGE_STAT _IOWR(NAND_IOCTL_GROUP, 0x6, \
+ struct page_stat_io)
+
+struct block_stat_io {
+ uint32_t block_num;
+ uint32_t block_erased;
+};
+#define NAND_IO_BLOCK_STAT _IOWR(NAND_IOCTL_GROUP, 0x7, \
+ struct block_stat_io)
+
+struct chip_param_io {
+ uint32_t page_size;
+ uint32_t oob_size;
+
+ uint32_t blocks;
+ uint32_t pages_per_block;
+};
+#define NAND_IO_GET_CHIP_PARAM _IOWR(NAND_IOCTL_GROUP, 0x8, \
+ struct chip_param_io)
+
+#endif /* _DEV_NAND_CDEV_H_ */
diff --git a/sys/dev/nand/nand_ecc_pos.h b/sys/dev/nand/nand_ecc_pos.h
new file mode 100644
index 000000000000..f40415cc4f30
--- /dev/null
+++ b/sys/dev/nand/nand_ecc_pos.h
@@ -0,0 +1,56 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 _DEV_NAND_ECC_POS_H_
+#define _DEV_NAND_ECC_POS_H_
+
+static uint16_t default_software_ecc_positions_16[] = {2, 0, 1, 7, 4, 6};
+
+static uint16_t default_software_ecc_positions_64[] = {
+
+ 42, 40, 41, 45, 43, 44, 48, 46,
+ 47, 51, 49, 50, 54, 52, 53, 57,
+ 55, 56, 60, 58, 59, 63, 61, 62
+};
+
+static uint16_t default_software_ecc_positions_128[] = {
+ 8, 9, 10, 11, 12, 13,
+ 18, 19, 20, 21, 22, 23,
+ 28, 29, 30, 31, 32, 33,
+ 38, 39, 40, 41, 42, 43,
+ 48, 49, 50, 51, 52, 53,
+ 58, 59, 60, 61, 62, 63,
+ 68, 69, 70, 71, 72, 73,
+ 78, 79, 80, 81, 82, 83,
+ 88, 89, 90, 91, 92, 93,
+ 98, 99, 100, 101, 102, 103,
+ 108, 109, 110, 111, 112, 113,
+ 118, 119, 120, 121, 122, 123,
+};
+#endif /* _DEV_NAND_ECC_POS_H_ */
+
diff --git a/sys/dev/nand/nand_generic.c b/sys/dev/nand/nand_generic.c
new file mode 100644
index 000000000000..85e81beb6b69
--- /dev/null
+++ b/sys/dev/nand/nand_generic.c
@@ -0,0 +1,1320 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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.
+ */
+
+/* Generic NAND driver */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/proc.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/rman.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/time.h>
+#include <sys/malloc.h>
+
+#include <dev/nand/nand.h>
+#include <dev/nand/nandbus.h>
+#include "nfc_if.h"
+#include "nand_if.h"
+#include "nandbus_if.h"
+
+
+static int onfi_nand_probe(device_t dev);
+static int large_nand_probe(device_t dev);
+static int small_nand_probe(device_t dev);
+static int generic_nand_attach(device_t dev);
+static int generic_nand_detach(device_t dev);
+
+static int generic_erase_block(device_t, uint32_t);
+static int generic_erase_block_intlv(device_t, uint32_t);
+static int generic_read_page (device_t, uint32_t, void *, uint32_t, uint32_t);
+static int generic_read_oob(device_t, uint32_t, void *, uint32_t, uint32_t);
+static int generic_program_page(device_t, uint32_t, void *, uint32_t, uint32_t);
+static int generic_program_page_intlv(device_t, uint32_t, void *, uint32_t,
+ uint32_t);
+static int generic_program_oob(device_t, uint32_t, void *, uint32_t, uint32_t);
+static int generic_is_blk_bad(device_t, uint32_t, uint8_t *);
+static int generic_get_ecc(device_t, void *, void *, int *);
+static int generic_correct_ecc(device_t, void *, void *, void *);
+
+static int small_read_page(device_t, uint32_t, void *, uint32_t, uint32_t);
+static int small_read_oob(device_t, uint32_t, void *, uint32_t, uint32_t);
+static int small_program_page(device_t, uint32_t, void *, uint32_t, uint32_t);
+static int small_program_oob(device_t, uint32_t, void *, uint32_t, uint32_t);
+
+static int onfi_is_blk_bad(device_t, uint32_t, uint8_t *);
+static int onfi_read_parameter(struct nand_chip *, struct onfi_params *);
+
+static int nand_send_address(device_t, int32_t, int32_t, int8_t);
+
+static device_method_t onand_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, onfi_nand_probe),
+ DEVMETHOD(device_attach, generic_nand_attach),
+ DEVMETHOD(device_detach, generic_nand_detach),
+
+ DEVMETHOD(nand_read_page, generic_read_page),
+ DEVMETHOD(nand_program_page, generic_program_page),
+ DEVMETHOD(nand_program_page_intlv, generic_program_page_intlv),
+ DEVMETHOD(nand_read_oob, generic_read_oob),
+ DEVMETHOD(nand_program_oob, generic_program_oob),
+ DEVMETHOD(nand_erase_block, generic_erase_block),
+ DEVMETHOD(nand_erase_block_intlv, generic_erase_block_intlv),
+
+ DEVMETHOD(nand_is_blk_bad, onfi_is_blk_bad),
+ DEVMETHOD(nand_get_ecc, generic_get_ecc),
+ DEVMETHOD(nand_correct_ecc, generic_correct_ecc),
+ { 0, 0 }
+};
+
+static device_method_t lnand_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, large_nand_probe),
+ DEVMETHOD(device_attach, generic_nand_attach),
+ DEVMETHOD(device_detach, generic_nand_detach),
+
+ DEVMETHOD(nand_read_page, generic_read_page),
+ DEVMETHOD(nand_program_page, generic_program_page),
+ DEVMETHOD(nand_read_oob, generic_read_oob),
+ DEVMETHOD(nand_program_oob, generic_program_oob),
+ DEVMETHOD(nand_erase_block, generic_erase_block),
+
+ DEVMETHOD(nand_is_blk_bad, generic_is_blk_bad),
+ DEVMETHOD(nand_get_ecc, generic_get_ecc),
+ DEVMETHOD(nand_correct_ecc, generic_correct_ecc),
+ { 0, 0 }
+};
+
+static device_method_t snand_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, small_nand_probe),
+ DEVMETHOD(device_attach, generic_nand_attach),
+ DEVMETHOD(device_detach, generic_nand_detach),
+
+ DEVMETHOD(nand_read_page, small_read_page),
+ DEVMETHOD(nand_program_page, small_program_page),
+ DEVMETHOD(nand_read_oob, small_read_oob),
+ DEVMETHOD(nand_program_oob, small_program_oob),
+ DEVMETHOD(nand_erase_block, generic_erase_block),
+
+ DEVMETHOD(nand_is_blk_bad, generic_is_blk_bad),
+ DEVMETHOD(nand_get_ecc, generic_get_ecc),
+ DEVMETHOD(nand_correct_ecc, generic_correct_ecc),
+ { 0, 0 }
+};
+
+devclass_t onand_devclass;
+devclass_t lnand_devclass;
+devclass_t snand_devclass;
+
+driver_t onand_driver = {
+ "onand",
+ onand_methods,
+ sizeof(struct nand_chip)
+};
+
+driver_t lnand_driver = {
+ "lnand",
+ lnand_methods,
+ sizeof(struct nand_chip)
+};
+
+driver_t snand_driver = {
+ "snand",
+ snand_methods,
+ sizeof(struct nand_chip)
+};
+
+DRIVER_MODULE(onand, nandbus, onand_driver, onand_devclass, 0, 0);
+DRIVER_MODULE(lnand, nandbus, lnand_driver, lnand_devclass, 0, 0);
+DRIVER_MODULE(snand, nandbus, snand_driver, snand_devclass, 0, 0);
+
+static int
+onfi_nand_probe(device_t dev)
+{
+ struct nandbus_ivar *ivar;
+
+ ivar = device_get_ivars(dev);
+ if (ivar && ivar->is_onfi) {
+ device_set_desc(dev, "ONFI compliant NAND");
+ return (BUS_PROBE_DEFAULT);
+ }
+
+ return (ENODEV);
+}
+
+static int
+large_nand_probe(device_t dev)
+{
+ struct nandbus_ivar *ivar;
+
+ ivar = device_get_ivars(dev);
+ if (ivar && !ivar->is_onfi && ivar->params->page_size >= 512) {
+ device_set_desc(dev, ivar->params->name);
+ return (BUS_PROBE_DEFAULT);
+ }
+
+ return (ENODEV);
+}
+
+static int
+small_nand_probe(device_t dev)
+{
+ struct nandbus_ivar *ivar;
+
+ ivar = device_get_ivars(dev);
+ if (ivar && !ivar->is_onfi && ivar->params->page_size == 512) {
+ device_set_desc(dev, ivar->params->name);
+ return (BUS_PROBE_DEFAULT);
+ }
+
+ return (ENODEV);
+}
+
+static int
+generic_nand_attach(device_t dev)
+{
+ struct nand_chip *chip;
+ struct nandbus_ivar *ivar;
+ struct onfi_params *onfi_params;
+ device_t nandbus, nfc;
+ int err;
+
+ chip = device_get_softc(dev);
+ chip->dev = dev;
+
+ ivar = device_get_ivars(dev);
+ chip->id.man_id = ivar->man_id;
+ chip->id.dev_id = ivar->dev_id;
+ chip->num = ivar->cs;
+
+ /* TODO remove when HW ECC supported */
+ nandbus = device_get_parent(dev);
+ nfc = device_get_parent(nandbus);
+
+ chip->nand = device_get_softc(nfc);
+
+ if (ivar->is_onfi) {
+ onfi_params = malloc(sizeof(struct onfi_params),
+ M_NAND, M_WAITOK | M_ZERO);
+ if (onfi_params == NULL)
+ return (ENXIO);
+
+ if (onfi_read_parameter(chip, onfi_params)) {
+ nand_debug(NDBG_GEN,"Could not read parameter page!\n");
+ free(onfi_params, M_NAND);
+ return (ENXIO);
+ }
+
+ nand_onfi_set_params(chip, onfi_params);
+ /* Set proper column and row cycles */
+ ivar->cols = (onfi_params->address_cycles >> 4) & 0xf;
+ ivar->rows = onfi_params->address_cycles & 0xf;
+ free(onfi_params, M_NAND);
+
+ } else {
+
+ nand_set_params(chip, ivar->params);
+ }
+
+ err = nand_init_stat(chip);
+ if (err) {
+ generic_nand_detach(dev);
+ return (err);
+ }
+
+ err = nand_init_bbt(chip);
+ if (err) {
+ generic_nand_detach(dev);
+ return (err);
+ }
+
+ err = nand_make_dev(chip);
+ if (err) {
+ generic_nand_detach(dev);
+ return (err);
+ }
+
+ err = create_geom_disk(chip);
+ if (err) {
+ generic_nand_detach(dev);
+ return (err);
+ }
+
+ return (0);
+}
+
+static int
+generic_nand_detach(device_t dev)
+{
+ struct nand_chip *chip;
+
+ chip = device_get_softc(dev);
+
+ nand_destroy_bbt(chip);
+ destroy_geom_disk(chip);
+ nand_destroy_dev(chip);
+ nand_destroy_stat(chip);
+
+ return (0);
+}
+
+static int
+can_write(device_t nandbus)
+{
+ uint8_t status;
+
+ if (NANDBUS_WAIT_READY(nandbus, &status))
+ return (0);
+
+ if (!(status & NAND_STATUS_WP)) {
+ nand_debug(NDBG_GEN,"Chip is write-protected");
+ return (0);
+ }
+
+ return (1);
+}
+
+static int
+check_fail(device_t nandbus)
+{
+ uint8_t status;
+
+ NANDBUS_WAIT_READY(nandbus, &status);
+ if (status & NAND_STATUS_FAIL) {
+ nand_debug(NDBG_GEN,"Status failed %x", status);
+ return (ENXIO);
+ }
+
+ return (0);
+}
+
+static int
+onfi_read_parameter(struct nand_chip *chip, struct onfi_params *params)
+{
+ device_t nandbus;
+
+ nand_debug(NDBG_GEN,"read parameter");
+
+ nandbus = device_get_parent(chip->dev);
+
+ NANDBUS_SELECT_CS(nandbus, chip->num);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_READ_PARAMETER))
+ return (ENXIO);
+
+ if (nand_send_address(chip->dev, -1, -1, PAGE_PARAMETER_DEF))
+ return (ENXIO);
+
+ if (NANDBUS_START_COMMAND(nandbus))
+ return (ENXIO);
+
+ NANDBUS_READ_BUFFER(nandbus, params, sizeof(struct onfi_params));
+
+ /* TODO */
+ /* Check for signature */
+ /* Check CRC */
+ /* Use redundant page if necessary */
+
+ return (0);
+}
+
+static int
+send_read_page(device_t nand, uint8_t start_command, uint8_t end_command,
+ uint32_t row, uint32_t column)
+{
+ device_t nandbus = device_get_parent(nand);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, start_command))
+ return (ENXIO);
+
+ if (nand_send_address(nand, row, column, -1))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, end_command))
+ return (ENXIO);
+
+ if (NANDBUS_START_COMMAND(nandbus))
+ return (ENXIO);
+
+ return (0);
+}
+
+static int
+generic_read_page(device_t nand, uint32_t page, void *buf, uint32_t len,
+ uint32_t offset)
+{
+ struct nand_chip *chip;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"%p raw read page %x[%x] at %x", nand, page, len, offset);
+ chip = device_get_softc(nand);
+ nandbus = device_get_parent(nand);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (send_read_page(nand, NAND_CMD_READ, NAND_CMD_READ_END, row,
+ offset))
+ return (ENXIO);
+
+ DELAY(chip->t_r);
+
+ NANDBUS_READ_BUFFER(nandbus, buf, len);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_raw_read++;
+
+ return (0);
+}
+
+static int
+generic_read_oob(device_t nand, uint32_t page, void* buf, uint32_t len,
+ uint32_t offset)
+{
+ struct nand_chip *chip;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"%p raw read oob %x[%x] at %x", nand, page, len, offset);
+ chip = device_get_softc(nand);
+ nandbus = device_get_parent(nand);
+
+ if (nand_check_page_boundary(chip, page)) {
+ nand_debug(NDBG_GEN,"page boundary check failed: %08x\n", page);
+ return (ENXIO);
+ }
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ offset += chip->chip_geom.page_size;
+
+ if (send_read_page(nand, NAND_CMD_READ, NAND_CMD_READ_END, row,
+ offset))
+ return (ENXIO);
+
+ DELAY(chip->t_r);
+
+ NANDBUS_READ_BUFFER(nandbus, buf, len);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ return (0);
+}
+
+static int
+send_start_program_page(device_t nand, uint32_t row, uint32_t column)
+{
+ device_t nandbus = device_get_parent(nand);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_PROG))
+ return (ENXIO);
+
+ if (nand_send_address(nand, row, column, -1))
+ return (ENXIO);
+
+ return (0);
+}
+
+static int
+send_end_program_page(device_t nandbus, uint8_t end_command)
+{
+
+ if (NANDBUS_SEND_COMMAND(nandbus, end_command))
+ return (ENXIO);
+
+ if (NANDBUS_START_COMMAND(nandbus))
+ return (ENXIO);
+
+ return (0);
+}
+
+static int
+generic_program_page(device_t nand, uint32_t page, void *buf, uint32_t len,
+ uint32_t offset)
+{
+ struct nand_chip *chip;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"%p raw prog page %x[%x] at %x", nand, page, len,
+ offset);
+ chip = device_get_softc(nand);
+ nandbus = device_get_parent(nand);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (!can_write(nandbus))
+ return (ENXIO);
+
+ if (send_start_program_page(nand, row, offset))
+ return (ENXIO);
+
+ NANDBUS_WRITE_BUFFER(nandbus, buf, len);
+
+ if (send_end_program_page(nandbus, NAND_CMD_PROG_END))
+ return (ENXIO);
+
+ DELAY(chip->t_prog);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_raw_written++;
+
+ return (0);
+}
+
+static int
+generic_program_page_intlv(device_t nand, uint32_t page, void *buf,
+ uint32_t len, uint32_t offset)
+{
+ struct nand_chip *chip;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"%p raw prog page %x[%x] at %x", nand, page, len, offset);
+ chip = device_get_softc(nand);
+ nandbus = device_get_parent(nand);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (!can_write(nandbus))
+ return (ENXIO);
+
+ if (send_start_program_page(nand, row, offset))
+ return (ENXIO);
+
+ NANDBUS_WRITE_BUFFER(nandbus, buf, len);
+
+ if (send_end_program_page(nandbus, NAND_CMD_PROG_INTLV))
+ return (ENXIO);
+
+ DELAY(chip->t_prog);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_raw_written++;
+
+ return (0);
+}
+
+static int
+generic_program_oob(device_t nand, uint32_t page, void* buf, uint32_t len,
+ uint32_t offset)
+{
+ struct nand_chip *chip;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"%p raw prog oob %x[%x] at %x", nand, page, len,
+ offset);
+ chip = device_get_softc(nand);
+ nandbus = device_get_parent(nand);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+ offset += chip->chip_geom.page_size;
+
+ if (!can_write(nandbus))
+ return (ENXIO);
+
+ if (send_start_program_page(nand, row, offset))
+ return (ENXIO);
+
+ NANDBUS_WRITE_BUFFER(nandbus, buf, len);
+
+ if (send_end_program_page(nandbus, NAND_CMD_PROG_END))
+ return (ENXIO);
+
+ DELAY(chip->t_prog);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ return (0);
+}
+
+static int
+send_erase_block(device_t nand, uint32_t row, uint8_t second_command)
+{
+ device_t nandbus = device_get_parent(nand);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_ERASE))
+ return (ENXIO);
+
+ if (nand_send_address(nand, row, -1, -1))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, second_command))
+ return (ENXIO);
+
+ if (NANDBUS_START_COMMAND(nandbus))
+ return (ENXIO);
+
+ return (0);
+}
+
+static int
+generic_erase_block(device_t nand, uint32_t block)
+{
+ struct block_stat *blk_stat;
+ struct nand_chip *chip;
+ device_t nandbus;
+ int row;
+
+ nand_debug(NDBG_GEN,"%p erase block %x", nand, block);
+ nandbus = device_get_parent(nand);
+ chip = device_get_softc(nand);
+
+ if (block >= (chip->chip_geom.blks_per_lun * chip->chip_geom.luns))
+ return (ENXIO);
+
+ row = (block << chip->chip_geom.blk_shift) &
+ chip->chip_geom.blk_mask;
+
+ nand_debug(NDBG_GEN,"%p erase block row %x", nand, row);
+
+ if (!can_write(nandbus))
+ return (ENXIO);
+
+ send_erase_block(nand, row, NAND_CMD_ERASE_END);
+
+ DELAY(chip->t_bers);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ blk_stat = &(chip->blk_stat[block]);
+ blk_stat->block_erased++;
+
+ return (0);
+}
+
+static int
+generic_erase_block_intlv(device_t nand, uint32_t block)
+{
+ struct block_stat *blk_stat;
+ struct nand_chip *chip;
+ device_t nandbus;
+ int row;
+
+ nand_debug(NDBG_GEN,"%p erase block %x", nand, block);
+ nandbus = device_get_parent(nand);
+ chip = device_get_softc(nand);
+
+ if (block >= (chip->chip_geom.blks_per_lun * chip->chip_geom.luns))
+ return (ENXIO);
+
+ row = (block << chip->chip_geom.blk_shift) &
+ chip->chip_geom.blk_mask;
+
+ if (!can_write(nandbus))
+ return (ENXIO);
+
+ send_erase_block(nand, row, NAND_CMD_ERASE_INTLV);
+
+ DELAY(chip->t_bers);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ blk_stat = &(chip->blk_stat[block]);
+ blk_stat->block_erased++;
+
+ return (0);
+
+}
+
+static int
+onfi_is_blk_bad(device_t device, uint32_t block_number, uint8_t *bad)
+{
+ struct nand_chip *chip;
+ int page_number, i, j, err;
+ uint8_t *oob;
+
+ chip = device_get_softc(device);
+
+ oob = malloc(chip->chip_geom.oob_size, M_NAND, M_WAITOK);
+ if (!oob) {
+ device_printf(device, "%s: cannot allocate oob\n", __func__);
+ return (ENOMEM);
+ }
+
+ page_number = block_number * chip->chip_geom.pgs_per_blk;
+ *bad = 0;
+ /* Check OOB of first and last page */
+ for (i = 0; i < 2; i++, page_number+= chip->chip_geom.pgs_per_blk - 1) {
+ err = generic_read_oob(device, page_number, oob,
+ chip->chip_geom.oob_size, 0);
+ if (err) {
+ device_printf(device, "%s: cannot allocate oob\n",
+ __func__);
+ free(oob, M_NAND);
+ return (ENOMEM);
+ }
+
+ for (j = 0; j < chip->chip_geom.oob_size; j++) {
+ if (!oob[j]) {
+ *bad = 1;
+ free(oob, M_NAND);
+ return (0);
+ }
+ }
+ }
+
+ free(oob, M_NAND);
+
+ return (0);
+}
+
+static int
+send_small_read_page(device_t nand, uint8_t start_command,
+ uint32_t row, uint32_t column)
+{
+ device_t nandbus = device_get_parent(nand);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, start_command))
+ return (ENXIO);
+
+ if (nand_send_address(nand, row, column, -1))
+ return (ENXIO);
+
+ if (NANDBUS_START_COMMAND(nandbus))
+ return (ENXIO);
+
+ return (0);
+}
+
+
+static int
+small_read_page(device_t nand, uint32_t page, void *buf, uint32_t len,
+ uint32_t offset)
+{
+ struct nand_chip *chip;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"%p small read page %x[%x] at %x", nand, page, len, offset);
+ chip = device_get_softc(nand);
+ nandbus = device_get_parent(nand);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (offset < 256) {
+ if (send_small_read_page(nand, NAND_CMD_SMALLA, row, offset))
+ return (ENXIO);
+ } else {
+ offset -= 256;
+ if (send_small_read_page(nandbus, NAND_CMD_SMALLB, row, offset))
+ return (ENXIO);
+ }
+
+ DELAY(chip->t_r);
+
+ NANDBUS_READ_BUFFER(nandbus, buf, len);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_raw_read++;
+
+ return (0);
+}
+
+static int
+small_read_oob(device_t nand, uint32_t page, void *buf, uint32_t len,
+ uint32_t offset)
+{
+ struct nand_chip *chip;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"%p small read oob %x[%x] at %x", nand, page, len, offset);
+ chip = device_get_softc(nand);
+ nandbus = device_get_parent(nand);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (send_small_read_page(nand, NAND_CMD_SMALLOOB, row, 0))
+ return (ENXIO);
+
+ DELAY(chip->t_r);
+
+ NANDBUS_READ_BUFFER(nandbus, buf, len);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_raw_read++;
+
+ return (0);
+}
+
+static int
+small_program_page(device_t nand, uint32_t page, void* buf, uint32_t len,
+ uint32_t offset)
+{
+ struct nand_chip *chip;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"%p small prog page %x[%x] at %x", nand, page, len, offset);
+ chip = device_get_softc(nand);
+ nandbus = device_get_parent(nand);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (!can_write(nandbus))
+ return (ENXIO);
+
+ if (offset < 256) {
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_SMALLA))
+ return (ENXIO);
+ } else {
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_SMALLB))
+ return (ENXIO);
+ }
+
+ if (send_start_program_page(nand, row, offset))
+ return (ENXIO);
+
+ NANDBUS_WRITE_BUFFER(nandbus, buf, len);
+
+ if (send_end_program_page(nandbus, NAND_CMD_PROG_END))
+ return (ENXIO);
+
+ DELAY(chip->t_prog);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ return (0);
+}
+
+static int
+small_program_oob(device_t nand, uint32_t page, void* buf, uint32_t len,
+ uint32_t offset)
+{
+ struct nand_chip *chip;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"%p small prog oob %x[%x] at %x", nand, page, len, offset);
+ chip = device_get_softc(nand);
+ nandbus = device_get_parent(nand);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (!can_write(nandbus))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_SMALLOOB))
+ return (ENXIO);
+
+ if (send_start_program_page(nand, row, offset))
+ return (ENXIO);
+
+ NANDBUS_WRITE_BUFFER(nandbus, buf, len);
+
+ if (send_end_program_page(nandbus, NAND_CMD_PROG_END))
+ return (ENXIO);
+
+ DELAY(chip->t_prog);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ return (0);
+}
+
+int
+nand_send_address(device_t nand, int32_t row, int32_t col, int8_t id)
+{
+ struct nandbus_ivar *ivar;
+ device_t nandbus;
+ uint8_t addr;
+ int err = 0;
+ int i;
+
+ nandbus = device_get_parent(nand);
+ ivar = device_get_ivars(nand);
+
+ if (id != -1) {
+ nand_debug(NDBG_GEN,"send_address: send id %02x", id);
+ err = NANDBUS_SEND_ADDRESS(nandbus, id);
+ }
+
+ if (!err && col != -1) {
+ for (i = 0; i < ivar->cols; i++, col >>= 8) {
+ addr = (uint8_t)(col & 0xff);
+ nand_debug(NDBG_GEN,"send_address: send address column "
+ "%02x", addr);
+ err = NANDBUS_SEND_ADDRESS(nandbus, addr);
+ if (err)
+ break;
+ }
+ }
+
+ if (!err && row != -1) {
+ for (i = 0; i < ivar->rows; i++, row >>= 8) {
+ addr = (uint8_t)(row & 0xff);
+ nand_debug(NDBG_GEN,"send_address: send address row "
+ "%02x", addr);
+ err = NANDBUS_SEND_ADDRESS(nandbus, addr);
+ if (err)
+ break;
+ }
+ }
+
+ return (err);
+}
+
+static int
+generic_is_blk_bad(device_t dev, uint32_t block, uint8_t *bad)
+{
+ struct nand_chip *chip;
+ int page_number, err, i;
+ uint8_t *oob;
+
+ chip = device_get_softc(dev);
+
+ oob = malloc(chip->chip_geom.oob_size, M_NAND, M_WAITOK);
+ if (!oob) {
+ device_printf(dev, "%s: cannot allocate OOB\n", __func__);
+ return (ENOMEM);
+ }
+
+ page_number = block * chip->chip_geom.pgs_per_blk;
+ *bad = 0;
+
+ /* Check OOB of first and second page */
+ for (i = 0; i < 2; i++) {
+ err = NAND_READ_OOB(dev, page_number + i, oob,
+ chip->chip_geom.oob_size, 0);
+ if (err) {
+ device_printf(dev, "%s: cannot allocate OOB\n",
+ __func__);
+ free(oob, M_NAND);
+ return (ENOMEM);
+ }
+
+ if (!oob[0]) {
+ *bad = 1;
+ free(oob, M_NAND);
+ return (0);
+ }
+ }
+
+ free(oob, M_NAND);
+
+ return (0);
+}
+
+static int
+generic_get_ecc(device_t dev, void *buf, void *ecc, int *needwrite)
+{
+ struct nand_chip *chip = device_get_softc(dev);
+ struct chip_geom *cg = &chip->chip_geom;
+
+ return (NANDBUS_GET_ECC(device_get_parent(dev), buf, cg->page_size,
+ ecc, needwrite));
+}
+
+static int
+generic_correct_ecc(device_t dev, void *buf, void *readecc, void *calcecc)
+{
+ struct nand_chip *chip = device_get_softc(dev);
+ struct chip_geom *cg = &chip->chip_geom;
+
+ return (NANDBUS_CORRECT_ECC(device_get_parent(dev), buf,
+ cg->page_size, readecc, calcecc));
+}
+
+
+#if 0
+int
+nand_chng_read_col(device_t nand, uint32_t col, void *buf, size_t len)
+{
+ struct nand_chip *chip;
+ device_t nandbus;
+
+ chip = device_get_softc(nand);
+ nandbus = device_get_parent(nand);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_CHNG_READ_COL))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_ADDRESS(nandbus, -1, col, -1))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_CHNG_READ_COL_END))
+ return (ENXIO);
+
+ if (NANDBUS_START_COMMAND(nandbus))
+ return (ENXIO);
+
+ if (buf != NULL && len > 0)
+ NANDBUS_READ_BUFFER(nandbus, buf, len);
+
+ return (0);
+}
+
+int
+nand_chng_write_col(device_t dev, uint32_t col, void *buf,
+ size_t len)
+{
+ struct nand_chip *chip;
+ device_t nandbus;
+
+ chip = device_get_softc(dev);
+ nandbus = device_get_parent(dev);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_CHNG_WRITE_COL))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_ADDRESS(nandbus, -1, col, -1))
+ return (ENXIO);
+
+ if (buf != NULL && len > 0)
+ NANDBUS_WRITE_BUFFER(nandbus, buf, len);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_CHNG_READ_COL_END))
+ return (ENXIO);
+
+ if (NANDBUS_START_COMMAND(nandbus))
+ return (ENXIO);
+
+ return (0);
+}
+
+int
+nand_copyback_read(device_t dev, uint32_t page, uint32_t col,
+ void *buf, size_t len)
+{
+ struct nand_chip *chip;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN," raw read page %x[%x] at %x", page, col, len);
+ chip = device_get_softc(dev);
+ nandbus = device_get_parent(dev);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (send_read_page(nand, NAND_CMD_READ, NAND_CMD_READ_CPBK, row, 0))
+ return (ENXIO);
+
+ DELAY(chip->t_r);
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ if (buf != NULL && len > 0)
+ NANDBUS_READ_BUFFER(nandbus, buf, len);
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_raw_read++;
+
+ return (0);
+}
+
+int
+nand_copyback_prog(device_t dev, uint32_t page, uint32_t col,
+ void *buf, size_t len)
+{
+ struct nand_chip *chip;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"copyback prog page %x[%x]", page, len);
+ chip = device_get_softc(dev);
+ nandbus = device_get_parent(dev);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (!can_write(nandbus))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_CHNG_WRITE_COL))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_ADDRESS(nandbus, row, col, -1))
+ return (ENXIO);
+
+ if (buf != NULL && len > 0)
+ NANDBUS_WRITE_BUFFER(nandbus, buf, len);
+
+ if (send_end_program_page(nandbus, NAND_CMD_PROG_END))
+ return (ENXIO);
+
+ DELAY(chip->t_prog);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_raw_written++;
+
+ return (0);
+}
+
+int
+nand_copyback_prog_intlv(device_t dev, uint32_t page)
+{
+ struct nand_chip *chip;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ uint32_t row;
+
+ nand_debug(NDBG_GEN,"cache prog page %x", page);
+ chip = device_get_softc(dev);
+ nandbus = device_get_parent(dev);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (!can_write(nandbus))
+ return (ENXIO);
+
+ if (send_start_program_page(nand, row, 0))
+ return (ENXIO);
+
+ if (send_end_program_page(nandbus, NAND_CMD_PROG_INTLV))
+ return (ENXIO);
+
+ DELAY(chip->t_prog);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_raw_written++;
+
+ return (0);
+}
+
+int
+nand_prog_cache(device_t dev, uint32_t page, uint32_t col,
+ void *buf, size_t len, uint8_t end)
+{
+ struct nand_chip *chip;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ uint32_t row;
+ uint8_t command;
+
+ nand_debug(NDBG_GEN,"cache prog page %x[%x]", page, len);
+ chip = device_get_softc(dev);
+ nandbus = device_get_parent(dev);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (!can_write(nandbus))
+ return (ENXIO);
+
+ if (send_start_program_page(dev, row, 0))
+ return (ENXIO);
+
+ NANDBUS_WRITE_BUFFER(nandbus, buf, len);
+
+ if (end)
+ command = NAND_CMD_PROG_END;
+ else
+ command = NAND_CMD_PROG_CACHE;
+
+ if (send_end_program_page(nandbus, command))
+ return (ENXIO);
+
+ DELAY(chip->t_prog);
+
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_raw_written++;
+
+ return (0);
+}
+
+int
+nand_read_cache(device_t dev, uint32_t page, uint32_t col,
+ void *buf, size_t len, uint8_t end)
+{
+ struct nand_chip *chip;
+ struct page_stat *pg_stat;
+ device_t nandbus;
+ uint32_t row;
+ uint8_t command;
+
+ nand_debug(NDBG_GEN,"cache read page %x[%x] ", page, len);
+ chip = device_get_softc(dev);
+ nandbus = device_get_parent(dev);
+
+ if (nand_check_page_boundary(chip, page))
+ return (ENXIO);
+
+ page_to_row(&chip->chip_geom, page, &row);
+
+ if (page != -1) {
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_READ))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_ADDRESS(nandbus, row, col, -1))
+ return (ENXIO);
+ }
+
+ if (end)
+ command = NAND_CMD_READ_CACHE_END;
+ else
+ command = NAND_CMD_READ_CACHE;
+
+ if (NANDBUS_SEND_COMMAND(nandbus, command))
+ return (ENXIO);
+
+ if (NANDBUS_START_COMMAND(nandbus))
+ return (ENXIO);
+
+ DELAY(chip->t_r);
+ if (check_fail(nandbus))
+ return (ENXIO);
+
+ if (buf != NULL && len > 0)
+ NANDBUS_READ_BUFFER(nandbus, buf, len);
+
+ pg_stat = &(chip->pg_stat[page]);
+ pg_stat->page_raw_read++;
+
+ return (0);
+}
+
+int
+nand_get_feature(device_t dev, uint8_t feat, void *buf)
+{
+ struct nand_chip *chip;
+ device_t nandbus;
+
+ nand_debug(NDBG_GEN,"nand get feature");
+
+ chip = device_get_softc(dev);
+ nandbus = device_get_parent(dev);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_GET_FEATURE))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_ADDRESS(nandbus, -1, -1, feat))
+ return (ENXIO);
+
+ if (NANDBUS_START_COMMAND(nandbus))
+ return (ENXIO);
+
+ DELAY(chip->t_r);
+ NANDBUS_READ_BUFFER(nandbus, buf, 4);
+
+ return (0);
+}
+
+int
+nand_set_feature(device_t dev, uint8_t feat, void *buf)
+{
+ struct nand_chip *chip;
+ device_t nandbus;
+
+ nand_debug(NDBG_GEN,"nand set feature");
+
+ chip = device_get_softc(dev);
+ nandbus = device_get_parent(dev);
+
+ if (NANDBUS_SEND_COMMAND(nandbus, NAND_CMD_SET_FEATURE))
+ return (ENXIO);
+
+ if (NANDBUS_SEND_ADDRESS(nandbus, -1, -1, feat))
+ return (ENXIO);
+
+ NANDBUS_WRITE_BUFFER(nandbus, buf, 4);
+
+ if (NANDBUS_START_COMMAND(nandbus))
+ return (ENXIO);
+
+ return (0);
+}
+#endif
diff --git a/sys/dev/nand/nand_geom.c b/sys/dev/nand/nand_geom.c
new file mode 100644
index 000000000000..a8bdba28d290
--- /dev/null
+++ b/sys/dev/nand/nand_geom.c
@@ -0,0 +1,414 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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/systm.h>
+#include <sys/conf.h>
+#include <sys/bus.h>
+#include <sys/malloc.h>
+#include <sys/uio.h>
+#include <sys/bio.h>
+#include <geom/geom.h>
+#include <geom/geom_disk.h>
+
+#include <dev/nand/nand.h>
+#include <dev/nand/nandbus.h>
+#include <dev/nand/nand_dev.h>
+#include "nand_if.h"
+#include "nandbus_if.h"
+
+#define BIO_NAND_STD ((void *)1)
+#define BIO_NAND_RAW ((void *)2)
+
+static disk_ioctl_t nand_ioctl;
+static disk_getattr_t nand_getattr;
+static disk_strategy_t nand_strategy;
+static disk_strategy_t nand_strategy_raw;
+
+static int
+nand_read(struct nand_chip *chip, uint32_t offset, void *buf, uint32_t len)
+{
+
+ nand_debug(NDBG_GEOM, "Read from chip %d [%p] at %d", chip->num, chip,
+ offset);
+
+ return (nand_read_pages(chip, offset, buf, len));
+}
+
+static int
+nand_write(struct nand_chip *chip, uint32_t offset, void* buf, uint32_t len)
+{
+
+ nand_debug(NDBG_GEOM, "Write to chip %d [%p] at %d", chip->num, chip,
+ offset);
+
+ return (nand_prog_pages(chip, offset, buf, len));
+}
+
+static int
+nand_read_raw(struct nand_chip *chip, uint32_t offset, void *buf, uint32_t len)
+{
+ nand_debug(NDBG_GEOM, "Raw read from chip %d [%p] at %d", chip->num,
+ chip, offset);
+
+ return (nand_read_pages_raw(chip, offset, buf, len));
+}
+
+static int
+nand_write_raw(struct nand_chip *chip, uint32_t offset, void *buf, uint32_t len)
+{
+
+ nand_debug(NDBG_GEOM, "Raw write to chip %d [%p] at %d", chip->num,
+ chip, offset);
+
+ return (nand_prog_pages_raw(chip, offset, buf, len));
+}
+
+static void
+nand_strategy(struct bio *bp)
+{
+ struct nand_chip *chip;
+
+ chip = (struct nand_chip *)bp->bio_disk->d_drv1;
+
+ bp->bio_driver1 = BIO_NAND_STD;
+
+ nand_debug(NDBG_GEOM, "Strategy %s on chip %d [%p]",
+ (bp->bio_cmd & BIO_READ) == BIO_READ ? "READ" :
+ ((bp->bio_cmd & BIO_WRITE) == BIO_WRITE ? "WRITE" :
+ ((bp->bio_cmd & BIO_DELETE) == BIO_DELETE ? "DELETE" : "UNKNOWN")),
+ chip->num, chip);
+
+ mtx_lock(&chip->qlock);
+ bioq_insert_tail(&chip->bioq, bp);
+ mtx_unlock(&chip->qlock);
+ taskqueue_enqueue(chip->tq, &chip->iotask);
+}
+
+static void
+nand_strategy_raw(struct bio *bp)
+{
+ struct nand_chip *chip;
+
+ chip = (struct nand_chip *)bp->bio_disk->d_drv1;
+
+ /* Inform taskqueue that it's a raw access */
+ bp->bio_driver1 = BIO_NAND_RAW;
+
+ nand_debug(NDBG_GEOM, "Strategy %s on chip %d [%p]",
+ (bp->bio_cmd & BIO_READ) == BIO_READ ? "READ" :
+ ((bp->bio_cmd & BIO_WRITE) == BIO_WRITE ? "WRITE" :
+ ((bp->bio_cmd & BIO_DELETE) == BIO_DELETE ? "DELETE" : "UNKNOWN")),
+ chip->num, chip);
+
+ mtx_lock(&chip->qlock);
+ bioq_insert_tail(&chip->bioq, bp);
+ mtx_unlock(&chip->qlock);
+ taskqueue_enqueue(chip->tq, &chip->iotask);
+}
+
+static int
+nand_oob_access(struct nand_chip *chip, uint32_t page, uint32_t offset,
+ uint32_t len, uint8_t *data, uint8_t write)
+{
+ struct chip_geom *cg;
+ int ret = 0;
+
+ cg = &chip->chip_geom;
+
+ if (!write)
+ ret = nand_read_oob(chip, page, data, cg->oob_size);
+ else
+ ret = nand_prog_oob(chip, page, data, cg->oob_size);
+
+ return (ret);
+}
+
+static int
+nand_getattr(struct bio *bp)
+{
+ struct nand_chip *chip;
+ struct chip_geom *cg;
+ device_t dev;
+
+ if (bp->bio_disk == NULL || bp->bio_disk->d_drv1 == NULL)
+ return (ENXIO);
+
+ chip = (struct nand_chip *)bp->bio_disk->d_drv1;
+ cg = &(chip->chip_geom);
+
+ dev = device_get_parent(chip->dev);
+ dev = device_get_parent(dev);
+
+ do {
+ if (g_handleattr_int(bp, "NAND::oobsize", cg->oob_size))
+ break;
+ else if (g_handleattr_int(bp, "NAND::pagesize", cg->page_size))
+ break;
+ else if (g_handleattr_int(bp, "NAND::blocksize",
+ cg->block_size))
+ break;
+ else if (g_handleattr(bp, "NAND::device", &(dev),
+ sizeof(device_t)))
+ break;
+
+ return (ERESTART);
+ } while (0);
+
+ return (EJUSTRETURN);
+}
+
+static int
+nand_ioctl(struct disk *ndisk, u_long cmd, void *data, int fflag,
+ struct thread *td)
+{
+ struct nand_chip *chip;
+ struct nand_oob_rw *oob_rw = NULL;
+ struct nand_raw_rw *raw_rw = NULL;
+ device_t nandbus;
+ uint8_t *buf = NULL;
+ int ret = 0;
+ uint8_t status;
+
+ chip = (struct nand_chip *)ndisk->d_drv1;
+ nandbus = device_get_parent(chip->dev);
+
+ if ((cmd == NAND_IO_RAW_READ) || (cmd == NAND_IO_RAW_PROG)) {
+ raw_rw = (struct nand_raw_rw *)data;
+ buf = malloc(raw_rw->len, M_NAND, M_WAITOK);
+ }
+ switch (cmd) {
+ case NAND_IO_ERASE:
+ ret = nand_erase_blocks(chip, ((off_t *)data)[0],
+ ((off_t *)data)[1]);
+ break;
+
+ case NAND_IO_OOB_READ:
+ oob_rw = (struct nand_oob_rw *)data;
+ ret = nand_oob_access(chip, oob_rw->page, 0,
+ oob_rw->len, oob_rw->data, 0);
+ break;
+
+ case NAND_IO_OOB_PROG:
+ oob_rw = (struct nand_oob_rw *)data;
+ ret = nand_oob_access(chip, oob_rw->page, 0,
+ oob_rw->len, oob_rw->data, 1);
+ break;
+
+ case NAND_IO_GET_STATUS:
+ NANDBUS_LOCK(nandbus);
+ ret = NANDBUS_GET_STATUS(nandbus, &status);
+ if (ret == 0)
+ *(uint8_t *)data = status;
+ NANDBUS_UNLOCK(nandbus);
+ break;
+
+ case NAND_IO_RAW_PROG:
+ copyin(raw_rw->data, buf, raw_rw->len);
+ ret = nand_prog_pages_raw(chip, raw_rw->off, buf,
+ raw_rw->len);
+ break;
+
+ case NAND_IO_RAW_READ:
+ ret = nand_read_pages_raw(chip, raw_rw->off, buf,
+ raw_rw->len);
+ copyout(buf, raw_rw->data, raw_rw->len);
+ break;
+
+ case NAND_IO_GET_CHIP_PARAM:
+ nand_get_chip_param(chip, (struct chip_param_io *)data);
+ break;
+
+ default:
+ printf("Unknown nand_ioctl request \n");
+ ret = EIO;
+ }
+
+ if (buf)
+ free(buf, M_NAND);
+
+ return (ret);
+}
+
+static void
+nand_io_proc(void *arg, int pending)
+{
+ struct nand_chip *chip = arg;
+ struct bio *bp;
+ int err = 0;
+
+ for (;;) {
+ mtx_lock(&chip->qlock);
+ bp = bioq_takefirst(&chip->bioq);
+ mtx_unlock(&chip->qlock);
+ if (bp == NULL)
+ break;
+
+ if (bp->bio_driver1 == BIO_NAND_STD) {
+ if ((bp->bio_cmd & BIO_READ) == BIO_READ) {
+ err = nand_read(chip,
+ bp->bio_offset & 0xffffffff,
+ bp->bio_data, bp->bio_bcount);
+ } else if ((bp->bio_cmd & BIO_WRITE) == BIO_WRITE) {
+ err = nand_write(chip,
+ bp->bio_offset & 0xffffffff,
+ bp->bio_data, bp->bio_bcount);
+ }
+ } else if (bp->bio_driver1 == BIO_NAND_RAW) {
+ if ((bp->bio_cmd & BIO_READ) == BIO_READ) {
+ err = nand_read_raw(chip,
+ bp->bio_offset & 0xffffffff,
+ bp->bio_data, bp->bio_bcount);
+ } else if ((bp->bio_cmd & BIO_WRITE) == BIO_WRITE) {
+ err = nand_write_raw(chip,
+ bp->bio_offset & 0xffffffff,
+ bp->bio_data, bp->bio_bcount);
+ }
+ } else
+ panic("Unknown access type in bio->bio_driver1\n");
+
+ if ((bp->bio_cmd & BIO_DELETE) == BIO_DELETE) {
+ nand_debug(NDBG_GEOM, "Delete on chip%d offset %lld "
+ "length %ld\n", chip->num, bp->bio_offset,
+ bp->bio_bcount);
+ err = nand_erase_blocks(chip,
+ bp->bio_offset & 0xffffffff,
+ bp->bio_bcount);
+ }
+
+ if (err == 0 || err == ECC_CORRECTABLE)
+ bp->bio_resid = 0;
+ else {
+ nand_debug(NDBG_GEOM,"nand_[read|write|erase_blocks] "
+ "error: %d\n", err);
+
+ bp->bio_error = EIO;
+ bp->bio_flags |= BIO_ERROR;
+ bp->bio_resid = bp->bio_bcount;
+ }
+ biodone(bp);
+ }
+}
+
+int
+create_geom_disk(struct nand_chip *chip)
+{
+ struct disk *ndisk, *rdisk;
+
+ /* Create the disk device */
+ ndisk = disk_alloc();
+ ndisk->d_strategy = nand_strategy;
+ ndisk->d_ioctl = nand_ioctl;
+ ndisk->d_getattr = nand_getattr;
+ ndisk->d_name = "gnand";
+ ndisk->d_drv1 = chip;
+ ndisk->d_maxsize = chip->chip_geom.block_size;
+ ndisk->d_sectorsize = chip->chip_geom.page_size;
+ ndisk->d_mediasize = chip->chip_geom.chip_size;
+ ndisk->d_unit = chip->num +
+ 10 * device_get_unit(device_get_parent(chip->dev));
+
+ /*
+ * When using BBT, make two last blocks of device unavailable
+ * to user (because those are used to store BBT table).
+ */
+ if (chip->bbt != NULL)
+ ndisk->d_mediasize -= (2 * chip->chip_geom.block_size);
+
+ ndisk->d_flags = DISKFLAG_CANDELETE;
+
+ snprintf(ndisk->d_ident, sizeof(ndisk->d_ident),
+ "nand: Man:0x%02x Dev:0x%02x", chip->id.man_id, chip->id.dev_id);
+
+ disk_create(ndisk, DISK_VERSION);
+
+ /* Create the RAW disk device */
+ rdisk = disk_alloc();
+ rdisk->d_strategy = nand_strategy_raw;
+ rdisk->d_ioctl = nand_ioctl;
+ rdisk->d_getattr = nand_getattr;
+ rdisk->d_name = "gnand.raw";
+ rdisk->d_drv1 = chip;
+ rdisk->d_maxsize = chip->chip_geom.block_size;
+ rdisk->d_sectorsize = chip->chip_geom.page_size;
+ rdisk->d_mediasize = chip->chip_geom.chip_size;
+ rdisk->d_unit = chip->num +
+ 10 * device_get_unit(device_get_parent(chip->dev));
+
+ rdisk->d_flags = DISKFLAG_CANDELETE;
+
+ snprintf(rdisk->d_ident, sizeof(rdisk->d_ident),
+ "nand_raw: Man:0x%02x Dev:0x%02x", chip->id.man_id,
+ chip->id.dev_id);
+
+ disk_create(rdisk, DISK_VERSION);
+
+ chip->ndisk = ndisk;
+ chip->rdisk = rdisk;
+
+ mtx_init(&chip->qlock, "NAND I/O lock", NULL, MTX_DEF);
+ bioq_init(&chip->bioq);
+
+ TASK_INIT(&chip->iotask, 0, nand_io_proc, chip);
+ chip->tq = taskqueue_create("nand_taskq", M_WAITOK,
+ taskqueue_thread_enqueue, &chip->tq);
+ taskqueue_start_threads(&chip->tq, 1, PI_DISK, "nand taskq");
+
+ if (bootverbose)
+ device_printf(chip->dev, "Created gnand%d for chip [0x%0x, "
+ "0x%0x]\n", ndisk->d_unit, chip->id.man_id,
+ chip->id.dev_id);
+
+ return (0);
+}
+
+void
+destroy_geom_disk(struct nand_chip *chip)
+{
+ struct bio *bp;
+
+ taskqueue_free(chip->tq);
+ disk_destroy(chip->ndisk);
+ disk_destroy(chip->rdisk);
+
+ mtx_lock(&chip->qlock);
+ for (;;) {
+ bp = bioq_takefirst(&chip->bioq);
+ if (bp == NULL)
+ break;
+ bp->bio_error = EIO;
+ bp->bio_flags |= BIO_ERROR;
+ bp->bio_resid = bp->bio_bcount;
+
+ biodone(bp);
+ }
+ mtx_unlock(&chip->qlock);
+
+ mtx_destroy(&chip->qlock);
+}
diff --git a/sys/dev/nand/nand_id.c b/sys/dev/nand/nand_id.c
new file mode 100644
index 000000000000..75c583425567
--- /dev/null
+++ b/sys/dev/nand/nand_id.c
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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/systm.h>
+
+#include <dev/nand/nand.h>
+
+struct nand_params nand_ids[] = {
+ { { NAND_MAN_SAMSUNG, 0x75 }, "Samsung K9F5608U0B",
+ 0x20, 0x200, 0x10, 0x20, 0 },
+ { { NAND_MAN_SAMSUNG, 0xd3 }, "Samsung NAND 1GiB 3,3V 8-bit",
+ 0x400, 0x800, 0x40, 0x40, 0 },
+ { { NAND_MAN_HYNIX, 0x76 }, "Hynix NAND 64MiB 3,3V 8-bit",
+ 0x40, 0x200, 0x10, 0x20, 0 },
+ { { NAND_MAN_HYNIX, 0xdc }, "Hynix NAND 512MiB 3,3V 8-bit",
+ 0x200, 0x800, 0x40, 0x40, 0 },
+ { { NAND_MAN_HYNIX, 0x79 }, "NAND 128MB 3,3V 8-bit",
+ 0x80, 0x200, 0x10, 0x20, 0 },
+ { { NAND_MAN_STMICRO, 0xf1 }, "STMicro 128MB 3,3V 8-bit",
+ 0x80, 2048, 64, 0x40, 0 },
+};
+
+struct nand_params *nand_get_params(struct nand_id *id)
+{
+ int i;
+
+ for (i = 0; i < sizeof(nand_ids) / sizeof(nand_ids[0]); i++)
+ if (nand_ids[i].id.man_id == id->man_id &&
+ nand_ids[i].id.dev_id == id->dev_id)
+ return (&nand_ids[i]);
+
+ return (NULL);
+}
diff --git a/sys/dev/nand/nand_if.m b/sys/dev/nand/nand_if.m
new file mode 100644
index 000000000000..49c8879b6890
--- /dev/null
+++ b/sys/dev/nand/nand_if.m
@@ -0,0 +1,168 @@
+#-
+# Copyright (C) 2009-2012 Semihalf
+# 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$
+
+# NAND chip interface description
+#
+
+#include <sys/bus.h>
+#include <dev/nand/nand.h>
+
+INTERFACE nand;
+
+CODE {
+ static int nand_method_not_supported(device_t dev)
+ {
+ return (ENOENT);
+ }
+};
+
+# Read NAND page
+#
+# Return values:
+# 0: Success
+#
+METHOD int read_page {
+ device_t dev;
+ uint32_t page;
+ void* buf;
+ uint32_t len;
+ uint32_t offset;
+};
+
+# Program NAND page
+#
+# Return values:
+# 0: Success
+#
+METHOD int program_page {
+ device_t dev;
+ uint32_t page;
+ void* buf;
+ uint32_t len;
+ uint32_t offset;
+};
+
+# Program NAND page interleaved
+#
+# Return values:
+# 0: Success
+#
+METHOD int program_page_intlv {
+ device_t dev;
+ uint32_t page;
+ void* buf;
+ uint32_t len;
+ uint32_t offset;
+} DEFAULT nand_method_not_supported;
+
+# Read NAND oob
+#
+# Return values:
+# 0: Success
+#
+METHOD int read_oob {
+ device_t dev;
+ uint32_t page;
+ void* buf;
+ uint32_t len;
+ uint32_t offset;
+};
+
+# Program NAND oob
+#
+# Return values:
+# 0: Success
+#
+METHOD int program_oob {
+ device_t dev;
+ uint32_t page;
+ void* buf;
+ uint32_t len;
+ uint32_t offset;
+};
+
+# Erase NAND block
+#
+# Return values:
+# 0: Success
+#
+METHOD int erase_block {
+ device_t dev;
+ uint32_t block;
+};
+
+# Erase NAND block interleaved
+#
+# Return values:
+# 0: Success
+#
+METHOD int erase_block_intlv {
+ device_t dev;
+ uint32_t block;
+} DEFAULT nand_method_not_supported;
+
+# NAND get status
+#
+# Return values:
+# 0: Success
+#
+METHOD int get_status {
+ device_t dev;
+ uint8_t *status;
+};
+
+# NAND check if block is bad
+#
+# Return values:
+# 0: Success
+#
+METHOD int is_blk_bad {
+ device_t dev;
+ uint32_t block_number;
+ uint8_t *bad;
+};
+
+# NAND get ECC
+#
+#
+METHOD int get_ecc {
+ device_t dev;
+ void *buf;
+ void *ecc;
+ int *needwrite;
+};
+
+# NAND correct ECC
+#
+#
+METHOD int correct_ecc {
+ device_t dev;
+ void *buf;
+ void *readecc;
+ void *calcecc;
+};
+
diff --git a/sys/dev/nand/nandbus.c b/sys/dev/nand/nandbus.c
new file mode 100644
index 000000000000..322d708b1658
--- /dev/null
+++ b/sys/dev/nand/nandbus.c
@@ -0,0 +1,530 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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/systm.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+#include <sys/bus.h>
+#include <sys/proc.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/condvar.h>
+
+#include <dev/nand/nand.h>
+#include <dev/nand/nandbus.h>
+#include "nand_if.h"
+#include "nandbus_if.h"
+#include "nfc_if.h"
+
+#define NAND_NCS 4
+
+static int nandbus_probe(device_t dev);
+static int nandbus_attach(device_t dev);
+static int nandbus_detach(device_t dev);
+
+static int nandbus_child_location_str(device_t, device_t, char *, size_t);
+static int nandbus_child_pnpinfo_str(device_t, device_t, char *, size_t);
+
+static int nandbus_get_status(device_t, uint8_t *);
+static void nandbus_read_buffer(device_t, void *, uint32_t);
+static int nandbus_select_cs(device_t, uint8_t);
+static int nandbus_send_command(device_t, uint8_t);
+static int nandbus_send_address(device_t, uint8_t);
+static int nandbus_start_command(device_t);
+static int nandbus_wait_ready(device_t, uint8_t *);
+static void nandbus_write_buffer(device_t, void *, uint32_t);
+static int nandbus_get_ecc(device_t, void *, uint32_t, void *, int *);
+static int nandbus_correct_ecc(device_t, void *, int, void *, void *);
+static void nandbus_lock(device_t);
+static void nandbus_unlock(device_t);
+
+static int nand_readid(device_t, uint8_t *, uint8_t *);
+static int nand_probe_onfi(device_t, uint8_t *);
+static int nand_reset(device_t);
+
+struct nandbus_softc {
+ device_t dev;
+ struct cv nandbus_cv;
+ struct mtx nandbus_mtx;
+ uint8_t busy;
+};
+
+static device_method_t nandbus_methods[] = {
+ /* device interface */
+ DEVMETHOD(device_probe, nandbus_probe),
+ DEVMETHOD(device_attach, nandbus_attach),
+ DEVMETHOD(device_detach, nandbus_detach),
+ DEVMETHOD(device_shutdown, bus_generic_shutdown),
+
+ /* bus interface */
+ DEVMETHOD(bus_print_child, bus_generic_print_child),
+ DEVMETHOD(bus_driver_added, bus_generic_driver_added),
+ DEVMETHOD(bus_child_pnpinfo_str, nandbus_child_pnpinfo_str),
+ DEVMETHOD(bus_child_location_str, nandbus_child_location_str),
+
+ /* nandbus interface */
+ DEVMETHOD(nandbus_get_status, nandbus_get_status),
+ DEVMETHOD(nandbus_read_buffer, nandbus_read_buffer),
+ DEVMETHOD(nandbus_select_cs, nandbus_select_cs),
+ DEVMETHOD(nandbus_send_command, nandbus_send_command),
+ DEVMETHOD(nandbus_send_address, nandbus_send_address),
+ DEVMETHOD(nandbus_start_command,nandbus_start_command),
+ DEVMETHOD(nandbus_wait_ready, nandbus_wait_ready),
+ DEVMETHOD(nandbus_write_buffer, nandbus_write_buffer),
+ DEVMETHOD(nandbus_get_ecc, nandbus_get_ecc),
+ DEVMETHOD(nandbus_correct_ecc, nandbus_correct_ecc),
+ DEVMETHOD(nandbus_lock, nandbus_lock),
+ DEVMETHOD(nandbus_unlock, nandbus_unlock),
+ { 0, 0 }
+};
+
+devclass_t nandbus_devclass;
+
+driver_t nandbus_driver = {
+ "nandbus",
+ nandbus_methods,
+ sizeof(struct nandbus_softc)
+};
+
+DRIVER_MODULE(nandbus, nand, nandbus_driver, nandbus_devclass, 0, 0);
+
+int
+nandbus_create(device_t nfc)
+{
+ device_t child;
+
+ child = device_add_child(nfc, "nandbus", -1);
+ if (!child)
+ return (ENODEV);
+
+ bus_generic_attach(nfc);
+
+ return(0);
+}
+
+void
+nandbus_destroy(device_t nfc)
+{
+ device_t *children;
+ int nchildren, i;
+
+ mtx_lock(&Giant);
+ /* Detach & delete all children */
+ if (!device_get_children(nfc, &children, &nchildren)) {
+ for (i = 0; i < nchildren; i++)
+ device_delete_child(nfc, children[i]);
+
+ free(children, M_TEMP);
+ }
+ mtx_unlock(&Giant);
+}
+
+static int
+nandbus_probe(device_t dev)
+{
+
+ device_set_desc(dev, "NAND bus");
+
+ return (0);
+}
+
+static int
+nandbus_attach(device_t dev)
+{
+ device_t child, nfc;
+ struct nand_id chip_id;
+ struct nandbus_softc *sc;
+ struct nandbus_ivar *ivar;
+ struct nand_softc *nfc_sc;
+ struct nand_params *chip_params;
+ uint8_t cs, onfi;
+
+ sc = device_get_softc(dev);
+ sc->dev = dev;
+
+ nfc = device_get_parent(dev);
+ nfc_sc = device_get_softc(nfc);
+
+ mtx_init(&sc->nandbus_mtx, "nandbus lock", MTX_DEF, 0);
+ cv_init(&sc->nandbus_cv, "nandbus cv");
+
+ /* Check each possible CS for existing nand devices */
+ for (cs = 0; cs < NAND_NCS; cs++) {
+ nand_debug(NDBG_BUS,"probe chip select %x", cs);
+
+ /* Select & reset chip */
+ if (nandbus_select_cs(dev, cs))
+ break;
+
+ if (nand_reset(dev))
+ continue;
+
+ /* Read manufacturer and device id */
+ if (nand_readid(dev, &chip_id.man_id, &chip_id.dev_id))
+ continue;
+
+ if (chip_id.man_id == 0xff)
+ continue;
+
+ /* Check if chip is ONFI compliant */
+ if (nand_probe_onfi(dev, &onfi) != 0) {
+ continue;
+ }
+
+ ivar = malloc(sizeof(struct nandbus_ivar),
+ M_NAND, M_WAITOK);
+
+ if (onfi == 1) {
+ ivar->cs = cs;
+ ivar->cols = 0;
+ ivar->rows = 0;
+ ivar->params = NULL;
+ ivar->man_id = chip_id.man_id;
+ ivar->dev_id = chip_id.dev_id;
+ ivar->is_onfi = onfi;
+ ivar->chip_cdev_name = nfc_sc->chip_cdev_name;
+
+ child = device_add_child(dev, NULL, -1);
+ device_set_ivars(child, ivar);
+ continue;
+ }
+
+ chip_params = nand_get_params(&chip_id);
+ if (chip_params == NULL) {
+ nand_debug(NDBG_BUS,"Chip description not found! "
+ "(manuf: 0x%0x, chipid: 0x%0x)\n",
+ chip_id.man_id, chip_id.dev_id);
+ free(ivar, M_NAND);
+ continue;
+ }
+
+ ivar->cs = cs;
+ ivar->cols = 1;
+ ivar->rows = 2;
+ ivar->params = chip_params;
+ ivar->man_id = chip_id.man_id;
+ ivar->dev_id = chip_id.dev_id;
+ ivar->is_onfi = onfi;
+ ivar->chip_cdev_name = nfc_sc->chip_cdev_name;
+
+ /*
+ * Check what type of device we have.
+ * devices bigger than 32MiB have on more row (3)
+ */
+ if (chip_params->chip_size > 32)
+ ivar->rows++;
+ /* Large page devices have one more col (2) */
+ if (chip_params->chip_size >= 128 &&
+ chip_params->page_size > 512)
+ ivar->cols++;
+
+ child = device_add_child(dev, NULL, -1);
+ device_set_ivars(child, ivar);
+ }
+
+ bus_generic_attach(dev);
+ return (0);
+}
+
+static int
+nandbus_detach(device_t dev)
+{
+ struct nandbus_softc *sc;
+
+ sc = device_get_softc(dev);
+
+ bus_generic_detach(dev);
+
+ mtx_destroy(&sc->nandbus_mtx);
+ cv_destroy(&sc->nandbus_cv);
+
+ return (0);
+}
+
+static int
+nandbus_child_location_str(device_t bus, device_t child, char *buf,
+ size_t buflen)
+{
+ struct nandbus_ivar *ivar = device_get_ivars(child);
+
+ snprintf(buf, buflen, "at cs#%d", ivar->cs);
+ return (0);
+}
+
+static int
+nandbus_child_pnpinfo_str(device_t bus, device_t child, char *buf,
+ size_t buflen)
+{
+ // XXX man id, model id ????
+ *buf = '\0';
+ return (0);
+}
+
+static int
+nand_readid(device_t bus, uint8_t *man_id, uint8_t *dev_id)
+{
+ device_t nfc;
+
+ if (!bus || !man_id || !dev_id)
+ return (EINVAL);
+
+ nand_debug(NDBG_BUS,"read id");
+
+ nfc = device_get_parent(bus);
+
+ if (NFC_SEND_COMMAND(nfc, NAND_CMD_READ_ID)) {
+ nand_debug(NDBG_BUS,"Error : could not send READ ID command");
+ return (ENXIO);
+ }
+
+ if (NFC_SEND_ADDRESS(nfc, 0)) {
+ nand_debug(NDBG_BUS,"Error : could not sent address to chip");
+ return (ENXIO);
+ }
+
+ if (NFC_START_COMMAND(nfc) != 0) {
+ nand_debug(NDBG_BUS,"Error : could not start command");
+ return (ENXIO);
+ }
+
+ DELAY(25);
+
+ *man_id = NFC_READ_BYTE(nfc);
+ *dev_id = NFC_READ_BYTE(nfc);
+
+ nand_debug(NDBG_BUS,"manufacturer id: %x chip id: %x", *man_id,
+ *dev_id);
+
+ return (0);
+}
+
+static int
+nand_probe_onfi(device_t bus, uint8_t *onfi_compliant)
+{
+ device_t nfc;
+ char onfi_id[] = {'o', 'n', 'f', 'i', '\0'};
+ int i;
+
+ nand_debug(NDBG_BUS,"probing ONFI");
+
+ nfc = device_get_parent(bus);
+
+ if (NFC_SEND_COMMAND(nfc, NAND_CMD_READ_ID)) {
+ nand_debug(NDBG_BUS,"Error : could not sent READ ID command");
+ return (ENXIO);
+ }
+
+ if (NFC_SEND_ADDRESS(nfc, ONFI_SIG_ADDR)) {
+ nand_debug(NDBG_BUS,"Error : could not sent address to chip");
+ return (ENXIO);
+ }
+
+ if (NFC_START_COMMAND(nfc) != 0) {
+ nand_debug(NDBG_BUS,"Error : could not start command");
+ return (ENXIO);
+ }
+ for (i = 0; onfi_id[i] != '\0'; i++)
+ if (NFC_READ_BYTE(nfc) != onfi_id[i]) {
+ nand_debug(NDBG_BUS,"ONFI non-compliant");
+ *onfi_compliant = 0;
+ return (0);
+ }
+
+ nand_debug(NDBG_BUS,"ONFI compliant");
+ *onfi_compliant = 1;
+
+ return (0);
+}
+
+static int
+nand_reset(device_t bus)
+{
+ device_t nfc;
+ nand_debug(NDBG_BUS,"resetting...");
+
+ nfc = device_get_parent(bus);
+
+ if (NFC_SEND_COMMAND(nfc, NAND_CMD_RESET) != 0) {
+ nand_debug(NDBG_BUS,"Error : could not sent RESET command");
+ return (ENXIO);
+ }
+
+ if (NFC_START_COMMAND(nfc) != 0) {
+ nand_debug(NDBG_BUS,"Error : could not start RESET command");
+ return (ENXIO);
+ }
+
+ DELAY(1000);
+
+ return (0);
+}
+
+void
+nandbus_lock(device_t dev)
+{
+ struct nandbus_softc *sc;
+
+ sc = device_get_softc(dev);
+
+ mtx_lock(&sc->nandbus_mtx);
+ if (sc->busy)
+ cv_wait(&sc->nandbus_cv, &sc->nandbus_mtx);
+ sc->busy = 1;
+ mtx_unlock(&sc->nandbus_mtx);
+}
+
+void
+nandbus_unlock(device_t dev)
+{
+ struct nandbus_softc *sc;
+
+ sc = device_get_softc(dev);
+
+ mtx_lock(&sc->nandbus_mtx);
+ sc->busy = 0;
+ cv_signal(&sc->nandbus_cv);
+ mtx_unlock(&sc->nandbus_mtx);
+}
+
+int
+nandbus_select_cs(device_t dev, uint8_t cs)
+{
+
+ return (NFC_SELECT_CS(device_get_parent(dev), cs));
+}
+
+int
+nandbus_send_command(device_t dev, uint8_t command)
+{
+ int err;
+
+ if ((err = NFC_SEND_COMMAND(device_get_parent(dev), command)))
+ nand_debug(NDBG_BUS,"Err: Could not send command %x, err %x",
+ command, err);
+
+ return (err);
+}
+
+int
+nandbus_send_address(device_t dev, uint8_t address)
+{
+ int err;
+
+ if ((err = NFC_SEND_ADDRESS(device_get_parent(dev), address)))
+ nand_debug(NDBG_BUS,"Err: Could not send address %x, err %x",
+ address, err);
+
+ return (err);
+}
+
+int
+nandbus_start_command(device_t dev)
+{
+ int err;
+
+ if ((err = NFC_START_COMMAND(device_get_parent(dev))))
+ nand_debug(NDBG_BUS,"Err: Could not start command, err %x",
+ err);
+
+ return (err);
+}
+
+void
+nandbus_read_buffer(device_t dev, void *buf, uint32_t len)
+{
+
+ NFC_READ_BUF(device_get_parent(dev), buf, len);
+}
+
+void
+nandbus_write_buffer(device_t dev, void *buf, uint32_t len)
+{
+
+ NFC_WRITE_BUF(device_get_parent(dev), buf, len);
+}
+
+int
+nandbus_get_status(device_t dev, uint8_t *status)
+{
+ int err;
+
+ if ((err = NANDBUS_SEND_COMMAND(dev, NAND_CMD_STATUS)))
+ return (err);
+ if ((err = NANDBUS_START_COMMAND(dev)))
+ return (err);
+
+ *status = NFC_READ_BYTE(device_get_parent(dev));
+
+ return (0);
+}
+
+int
+nandbus_wait_ready(device_t dev, uint8_t *status)
+{
+ struct timeval tv, tv2;
+
+ tv2.tv_sec = 0;
+ tv2.tv_usec = 50 * 5000; /* 10ms */
+
+ getmicrotime(&tv);
+ timevaladd(&tv, &tv2);
+
+ do {
+ if (NANDBUS_GET_STATUS(dev, status))
+ return (ENXIO);
+
+ if (*status & NAND_STATUS_RDY)
+ return (0);
+
+ getmicrotime(&tv2);
+ } while (timevalcmp(&tv2, &tv, <=));
+
+ return (EBUSY);
+}
+
+int
+nandbus_get_ecc(device_t dev, void *buf, uint32_t pagesize, void *ecc,
+ int *needwrite)
+{
+
+ return (NFC_GET_ECC(device_get_parent(dev), buf, pagesize, ecc, needwrite));
+}
+
+int
+nandbus_correct_ecc(device_t dev, void *buf, int pagesize, void *readecc,
+ void *calcecc)
+{
+
+ return (NFC_CORRECT_ECC(device_get_parent(dev), buf, pagesize,
+ readecc, calcecc));
+}
+
diff --git a/sys/dev/nand/nandbus.h b/sys/dev/nand/nandbus.h
new file mode 100644
index 000000000000..417fbf5e14b5
--- /dev/null
+++ b/sys/dev/nand/nandbus.h
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 _NANDBUS_H_
+#define _NANDBUS_H_
+
+struct nandbus_ivar {
+ uint8_t cs;
+ uint8_t cols;
+ uint8_t rows;
+ uint8_t man_id;
+ uint8_t dev_id;
+ uint8_t is_onfi;
+ char *chip_cdev_name;
+ struct nand_params *params;
+};
+
+extern devclass_t nandbus_devclass;
+extern driver_t nandbus_driver;
+
+int nandbus_create(device_t nfc);
+void nandbus_destroy(device_t nfc);
+
+#endif /* _NANDBUS_H_ */
diff --git a/sys/dev/nand/nandbus_if.m b/sys/dev/nand/nandbus_if.m
new file mode 100644
index 000000000000..e914e18de661
--- /dev/null
+++ b/sys/dev/nand/nandbus_if.m
@@ -0,0 +1,100 @@
+#-
+# Copyright (C) 2009-2012 Semihalf
+# 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$
+
+# NAND bus interface description
+#
+
+#include <sys/bus.h>
+#include <dev/nand/nand.h>
+
+INTERFACE nandbus;
+
+METHOD int get_status {
+ device_t dev;
+ uint8_t * status;
+};
+
+METHOD void read_buffer {
+ device_t dev;
+ void * buf;
+ uint32_t len;
+};
+
+METHOD int select_cs {
+ device_t dev;
+ uint8_t cs;
+};
+
+METHOD int send_command {
+ device_t dev;
+ uint8_t command;
+};
+
+METHOD int send_address {
+ device_t dev;
+ uint8_t address;
+};
+
+METHOD int start_command {
+ device_t dev;
+};
+
+METHOD int wait_ready {
+ device_t dev;
+ uint8_t * status;
+}
+
+METHOD void write_buffer {
+ device_t dev;
+ void * buf;
+ uint32_t len;
+};
+
+METHOD int get_ecc {
+ device_t dev;
+ void * buf;
+ uint32_t pagesize;
+ void * ecc;
+ int * needwrite;
+};
+
+METHOD int correct_ecc {
+ device_t dev;
+ void * buf;
+ int pagesize;
+ void * readecc;
+ void * calcecc;
+};
+
+METHOD void lock {
+ device_t dev;
+};
+
+METHOD void unlock {
+ device_t dev;
+};
+
diff --git a/sys/dev/nand/nandsim.c b/sys/dev/nand/nandsim.c
new file mode 100644
index 000000000000..5390c01ca2a9
--- /dev/null
+++ b/sys/dev/nand/nandsim.c
@@ -0,0 +1,665 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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.
+ */
+
+/* Simulated NAND controller driver */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/proc.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/malloc.h>
+
+#include <dev/nand/nand.h>
+#include <dev/nand/nandsim.h>
+#include <dev/nand/nandsim_chip.h>
+#include <dev/nand/nandsim_log.h>
+#include <dev/nand/nandsim_swap.h>
+
+struct sim_param sim;
+struct sim_ctrl_conf ctrls[MAX_SIM_DEV];
+
+static struct cdev *nandsim_dev;
+static d_ioctl_t nandsim_ioctl;
+
+static void nandsim_init_sim_param(struct sim_param *);
+static int nandsim_create_ctrl(struct sim_ctrl *);
+static int nandsim_destroy_ctrl(int);
+static int nandsim_ctrl_status(struct sim_ctrl *);
+static int nandsim_create_chip(struct sim_chip *);
+static int nandsim_destroy_chip(struct sim_ctrl_chip *);
+static int nandsim_chip_status(struct sim_chip *);
+static int nandsim_start_ctrl(int);
+static int nandsim_stop_ctrl(int);
+static int nandsim_inject_error(struct sim_error *);
+static int nandsim_get_block_state(struct sim_block_state *);
+static int nandsim_set_block_state(struct sim_block_state *);
+static int nandsim_modify(struct sim_mod *);
+static int nandsim_dump(struct sim_dump *);
+static int nandsim_restore(struct sim_dump *);
+static int nandsim_freeze(struct sim_ctrl_chip *);
+static void nandsim_print_log(struct sim_log *);
+static struct nandsim_chip *get_nandsim_chip(uint8_t, uint8_t);
+
+static struct cdevsw nandsim_cdevsw = {
+ .d_version = D_VERSION,
+ .d_ioctl = nandsim_ioctl,
+ .d_name = "nandsim",
+};
+
+int
+nandsim_ioctl(struct cdev *dev, u_long cmd, caddr_t data,
+ int flags, struct thread *td)
+{
+ int ret = 0;
+
+ switch (cmd) {
+ case NANDSIM_SIM_PARAM:
+ nandsim_init_sim_param((struct sim_param *)data);
+ break;
+ case NANDSIM_CREATE_CTRL:
+ ret = nandsim_create_ctrl((struct sim_ctrl *)data);
+ break;
+ case NANDSIM_DESTROY_CTRL:
+ ret = nandsim_destroy_ctrl(*(int *)data);
+ break;
+ case NANDSIM_STATUS_CTRL:
+ ret = nandsim_ctrl_status((struct sim_ctrl *)data);
+ break;
+ case NANDSIM_CREATE_CHIP:
+ ret = nandsim_create_chip((struct sim_chip *)data);
+ break;
+ case NANDSIM_DESTROY_CHIP:
+ ret = nandsim_destroy_chip((struct sim_ctrl_chip *)data);
+ break;
+ case NANDSIM_STATUS_CHIP:
+ ret = nandsim_chip_status((struct sim_chip *)data);
+ break;
+ case NANDSIM_MODIFY:
+ ret = nandsim_modify((struct sim_mod *)data);
+ break;
+ case NANDSIM_START_CTRL:
+ ret = nandsim_start_ctrl(*(int *)data);
+ break;
+ case NANDSIM_STOP_CTRL:
+ ret = nandsim_stop_ctrl(*(int *)data);
+ break;
+ case NANDSIM_INJECT_ERROR:
+ ret = nandsim_inject_error((struct sim_error *)data);
+ break;
+ case NANDSIM_SET_BLOCK_STATE:
+ ret = nandsim_set_block_state((struct sim_block_state *)data);
+ break;
+ case NANDSIM_GET_BLOCK_STATE:
+ ret = nandsim_get_block_state((struct sim_block_state *)data);
+ break;
+ case NANDSIM_PRINT_LOG:
+ nandsim_print_log((struct sim_log *)data);
+ break;
+ case NANDSIM_DUMP:
+ ret = nandsim_dump((struct sim_dump *)data);
+ break;
+ case NANDSIM_RESTORE:
+ ret = nandsim_restore((struct sim_dump *)data);
+ break;
+ case NANDSIM_FREEZE:
+ ret = nandsim_freeze((struct sim_ctrl_chip *)data);
+ break;
+ default:
+ ret = EINVAL;
+ break;
+ }
+
+ return (ret);
+}
+
+static void
+nandsim_init_sim_param(struct sim_param *param)
+{
+
+ if (!param)
+ return;
+
+ nand_debug(NDBG_SIM,"log level:%d output %d", param->log_level,
+ param->log_output);
+ nandsim_log_level = param->log_level;
+ nandsim_log_output = param->log_output;
+}
+
+static int
+nandsim_create_ctrl(struct sim_ctrl *ctrl)
+{
+ struct sim_ctrl_conf *sim_ctrl;
+
+ nand_debug(NDBG_SIM,"create controller num:%d cs:%d",ctrl->num,
+ ctrl->num_cs);
+
+ if (ctrl->num >= MAX_SIM_DEV) {
+ return (EINVAL);
+ }
+
+ sim_ctrl = &ctrls[ctrl->num];
+ if(sim_ctrl->created)
+ return (EEXIST);
+
+ sim_ctrl->num = ctrl->num;
+ sim_ctrl->num_cs = ctrl->num_cs;
+ sim_ctrl->ecc = ctrl->ecc;
+ memcpy(sim_ctrl->ecc_layout, ctrl->ecc_layout,
+ MAX_ECC_BYTES * sizeof(ctrl->ecc_layout[0]));
+ strlcpy(sim_ctrl->filename, ctrl->filename,
+ FILENAME_SIZE);
+ sim_ctrl->created = 1;
+
+ return (0);
+}
+
+static int
+nandsim_destroy_ctrl(int ctrl_num)
+{
+
+ nand_debug(NDBG_SIM,"destroy controller num:%d", ctrl_num);
+
+ if (ctrl_num >= MAX_SIM_DEV) {
+ return (EINVAL);
+ }
+
+ if (!ctrls[ctrl_num].created) {
+ return (ENODEV);
+ }
+
+ if (ctrls[ctrl_num].running) {
+ return (EBUSY);
+ }
+
+ memset(&ctrls[ctrl_num], 0, sizeof(ctrls[ctrl_num]));
+
+ return (0);
+}
+
+static int
+nandsim_ctrl_status(struct sim_ctrl *ctrl)
+{
+
+ nand_debug(NDBG_SIM,"status controller num:%d cs:%d",ctrl->num,
+ ctrl->num_cs);
+
+ if (ctrl->num >= MAX_SIM_DEV) {
+ return (EINVAL);
+ }
+
+ ctrl->num_cs = ctrls[ctrl->num].num_cs;
+ ctrl->ecc = ctrls[ctrl->num].ecc;
+ memcpy(ctrl->ecc_layout, ctrls[ctrl->num].ecc_layout,
+ MAX_ECC_BYTES * sizeof(ctrl->ecc_layout[0]));
+ strlcpy(ctrl->filename, ctrls[ctrl->num].filename,
+ FILENAME_SIZE);
+ ctrl->running = ctrls[ctrl->num].running;
+ ctrl->created = ctrls[ctrl->num].created;
+
+ return (0);
+}
+
+static int
+nandsim_create_chip(struct sim_chip *chip)
+{
+ struct sim_chip *sim_chip;
+
+ nand_debug(NDBG_SIM,"create chip num:%d at ctrl:%d", chip->num,
+ chip->ctrl_num);
+
+ if (chip->ctrl_num >= MAX_SIM_DEV ||
+ chip->num >= MAX_CTRL_CS) {
+ return (EINVAL);
+ }
+
+ if (ctrls[chip->ctrl_num].chips[chip->num]) {
+ return (EEXIST);
+ }
+
+ sim_chip = malloc(sizeof(*sim_chip), M_NANDSIM,
+ M_WAITOK);
+ if (sim_chip == NULL) {
+ return (ENOMEM);
+ }
+
+ memcpy(sim_chip, chip, sizeof(*sim_chip));
+ ctrls[chip->ctrl_num].chips[chip->num] = sim_chip;
+ sim_chip->created = 1;
+
+ return (0);
+}
+
+static int
+nandsim_destroy_chip(struct sim_ctrl_chip *chip)
+{
+ struct sim_ctrl_conf *ctrl_conf;
+
+ nand_debug(NDBG_SIM,"destroy chip num:%d at ctrl:%d", chip->chip_num,
+ chip->ctrl_num);
+
+ if (chip->ctrl_num >= MAX_SIM_DEV ||
+ chip->chip_num >= MAX_CTRL_CS)
+ return (EINVAL);
+
+ ctrl_conf = &ctrls[chip->ctrl_num];
+
+ if (!ctrl_conf->created || !ctrl_conf->chips[chip->chip_num])
+ return (ENODEV);
+
+ if (ctrl_conf->running)
+ return (EBUSY);
+
+ free(ctrl_conf->chips[chip->chip_num], M_NANDSIM);
+ ctrl_conf->chips[chip->chip_num] = NULL;
+
+ return (0);
+}
+
+static int
+nandsim_chip_status(struct sim_chip *chip)
+{
+ struct sim_ctrl_conf *ctrl_conf;
+
+ nand_debug(NDBG_SIM,"status for chip num:%d at ctrl:%d", chip->num,
+ chip->ctrl_num);
+
+ if (chip->ctrl_num >= MAX_SIM_DEV &&
+ chip->num >= MAX_CTRL_CS)
+ return (EINVAL);
+
+ ctrl_conf = &ctrls[chip->ctrl_num];
+ if (!ctrl_conf->chips[chip->num])
+ chip->created = 0;
+ else
+ memcpy(chip, ctrl_conf->chips[chip->num], sizeof(*chip));
+
+ return (0);
+}
+
+static int
+nandsim_start_ctrl(int num)
+{
+ device_t nexus, ndev;
+ devclass_t nexus_devclass;
+ int ret = 0;
+
+ nand_debug(NDBG_SIM,"start ctlr num:%d", num);
+
+ if (num >= MAX_SIM_DEV)
+ return (EINVAL);
+
+ if (!ctrls[num].created)
+ return (ENODEV);
+
+ if (ctrls[num].running)
+ return (EBUSY);
+
+ /* We will add our device as a child of the nexus0 device */
+ if (!(nexus_devclass = devclass_find("nexus")) ||
+ !(nexus = devclass_get_device(nexus_devclass, 0)))
+ return (EFAULT);
+
+ /*
+ * Create a newbus device representing this frontend instance
+ *
+ * XXX powerpc nexus doesn't implement bus_add_child, so child
+ * must be added by device_add_child().
+ */
+#if defined(__powerpc__)
+ ndev = device_add_child(nexus, "nandsim", num);
+#else
+ ndev = BUS_ADD_CHILD(nexus, 0, "nandsim", num);
+#endif
+ if (!ndev)
+ return (EFAULT);
+
+ mtx_lock(&Giant);
+ ret = device_probe_and_attach(ndev);
+ mtx_unlock(&Giant);
+
+ if (ret == 0) {
+ ctrls[num].sim_ctrl_dev = ndev;
+ ctrls[num].running = 1;
+ }
+
+ return (ret);
+}
+
+static int
+nandsim_stop_ctrl(int num)
+{
+ device_t nexus;
+ devclass_t nexus_devclass;
+ int ret = 0;
+
+ nand_debug(NDBG_SIM,"stop controller num:%d", num);
+
+ if (num >= MAX_SIM_DEV) {
+ return (EINVAL);
+ }
+
+ if (!ctrls[num].created || !ctrls[num].running) {
+ return (ENODEV);
+ }
+
+ /* We will add our device as a child of the nexus0 device */
+ if (!(nexus_devclass = devclass_find("nexus")) ||
+ !(nexus = devclass_get_device(nexus_devclass, 0))) {
+ return (ENODEV);
+ }
+
+ mtx_lock(&Giant);
+ if (ctrls[num].sim_ctrl_dev) {
+ ret = device_delete_child(nexus, ctrls[num].sim_ctrl_dev);
+ ctrls[num].sim_ctrl_dev = NULL;
+ }
+ mtx_unlock(&Giant);
+
+ ctrls[num].running = 0;
+
+ return (ret);
+}
+
+static struct nandsim_chip *
+get_nandsim_chip(uint8_t ctrl_num, uint8_t chip_num)
+{
+ struct nandsim_softc *sc;
+
+ if (!ctrls[ctrl_num].sim_ctrl_dev)
+ return (NULL);
+
+ sc = device_get_softc(ctrls[ctrl_num].sim_ctrl_dev);
+ return (sc->chips[chip_num]);
+}
+
+static void
+nandsim_print_log(struct sim_log *sim_log)
+{
+ struct nandsim_softc *sc;
+ int len1, len2;
+
+ if (!ctrls[sim_log->ctrl_num].sim_ctrl_dev)
+ return;
+
+ sc = device_get_softc(ctrls[sim_log->ctrl_num].sim_ctrl_dev);
+ if (sc->log_buff) {
+ len1 = strlen(&sc->log_buff[sc->log_idx + 1]);
+ if (len1 >= sim_log->len)
+ len1 = sim_log->len;
+ copyout(&sc->log_buff[sc->log_idx + 1], sim_log->log, len1);
+ len2 = strlen(sc->log_buff);
+ if (len2 >= (sim_log->len - len1))
+ len2 = (sim_log->len - len1);
+ copyout(sc->log_buff, &sim_log->log[len1], len2);
+ sim_log->len = len1 + len2;
+ }
+}
+
+static int
+nandsim_inject_error(struct sim_error *error)
+{
+ struct nandsim_chip *chip;
+ struct block_space *bs;
+ struct onfi_params *param;
+ int page, page_size, block, offset;
+
+ nand_debug(NDBG_SIM,"inject error for chip %d at ctrl %d\n",
+ error->chip_num, error->ctrl_num);
+
+ if (error->ctrl_num >= MAX_SIM_DEV ||
+ error->chip_num >= MAX_CTRL_CS)
+ return (EINVAL);
+
+ if (!ctrls[error->ctrl_num].created || !ctrls[error->ctrl_num].running)
+ return (ENODEV);
+
+ chip = get_nandsim_chip(error->ctrl_num, error->chip_num);
+ param = &chip->params;
+ page_size = param->bytes_per_page + param->spare_bytes_per_page;
+ block = error->page_num / param->pages_per_block;
+ page = error->page_num % param->pages_per_block;
+
+ bs = get_bs(chip->swap, block, 1);
+ if (!bs)
+ return (EINVAL);
+
+ offset = (page * page_size) + error->column;
+ memset(&bs->blk_ptr[offset], error->pattern, error->len);
+
+ return (0);
+}
+
+static int
+nandsim_set_block_state(struct sim_block_state *bs)
+{
+ struct onfi_params *params;
+ struct nandsim_chip *chip;
+ int blocks;
+
+ nand_debug(NDBG_SIM,"set block state for %d:%d block %d\n",
+ bs->chip_num, bs->ctrl_num, bs->block_num);
+
+ if (bs->ctrl_num >= MAX_SIM_DEV ||
+ bs->chip_num >= MAX_CTRL_CS)
+ return (EINVAL);
+
+ chip = get_nandsim_chip(bs->ctrl_num, bs->chip_num);
+ params = &chip->params;
+ blocks = params->luns * params->blocks_per_lun;
+
+ if (bs->block_num > blocks)
+ return (EINVAL);
+
+ chip->blk_state[bs->block_num].is_bad = bs->state;
+
+ if (bs->wearout >= 0)
+ chip->blk_state[bs->block_num].wear_lev = bs->wearout;
+
+ return (0);
+}
+
+static int
+nandsim_get_block_state(struct sim_block_state *bs)
+{
+ struct onfi_params *params;
+ struct nandsim_chip *chip;
+ int blocks;
+
+ if (bs->ctrl_num >= MAX_SIM_DEV ||
+ bs->chip_num >= MAX_CTRL_CS)
+ return (EINVAL);
+
+ nand_debug(NDBG_SIM,"get block state for %d:%d block %d\n",
+ bs->chip_num, bs->ctrl_num, bs->block_num);
+
+ chip = get_nandsim_chip(bs->ctrl_num, bs->chip_num);
+ params = &chip->params;
+ blocks = params->luns * params->blocks_per_lun;
+
+ if (bs->block_num > blocks)
+ return (EINVAL);
+
+ bs->state = chip->blk_state[bs->block_num].is_bad;
+ bs->wearout = chip->blk_state[bs->block_num].wear_lev;
+
+ return (0);
+}
+
+static int
+nandsim_dump(struct sim_dump *dump)
+{
+ struct nandsim_chip *chip;
+ struct block_space *bs;
+ int blk_size;
+
+ nand_debug(NDBG_SIM,"dump chip %d %d\n", dump->ctrl_num, dump->chip_num);
+
+ if (dump->ctrl_num >= MAX_SIM_DEV ||
+ dump->chip_num >= MAX_CTRL_CS)
+ return (EINVAL);
+
+ chip = get_nandsim_chip(dump->ctrl_num, dump->chip_num);
+ blk_size = chip->cg.block_size +
+ (chip->cg.oob_size * chip->cg.pgs_per_blk);
+
+ bs = get_bs(chip->swap, dump->block_num, 0);
+ if (!bs)
+ return (EINVAL);
+
+ if (dump->len > blk_size)
+ dump->len = blk_size;
+
+ copyout(bs->blk_ptr, dump->data, dump->len);
+
+ return (0);
+}
+
+static int
+nandsim_restore(struct sim_dump *dump)
+{
+ struct nandsim_chip *chip;
+ struct block_space *bs;
+ int blk_size;
+
+ nand_debug(NDBG_SIM,"restore chip %d %d\n", dump->ctrl_num,
+ dump->chip_num);
+
+ if (dump->ctrl_num >= MAX_SIM_DEV ||
+ dump->chip_num >= MAX_CTRL_CS)
+ return (EINVAL);
+
+ chip = get_nandsim_chip(dump->ctrl_num, dump->chip_num);
+ blk_size = chip->cg.block_size +
+ (chip->cg.oob_size * chip->cg.pgs_per_blk);
+
+ bs = get_bs(chip->swap, dump->block_num, 1);
+ if (!bs)
+ return (EINVAL);
+
+ if (dump->len > blk_size)
+ dump->len = blk_size;
+
+
+ copyin(dump->data, bs->blk_ptr, dump->len);
+
+ return (0);
+}
+
+static int
+nandsim_freeze(struct sim_ctrl_chip *ctrl_chip)
+{
+ struct nandsim_chip *chip;
+
+ if (ctrl_chip->ctrl_num >= MAX_SIM_DEV ||
+ ctrl_chip->chip_num >= MAX_CTRL_CS)
+ return (EINVAL);
+
+ chip = get_nandsim_chip(ctrl_chip->ctrl_num, ctrl_chip->chip_num);
+ nandsim_chip_freeze(chip);
+
+ return (0);
+}
+
+static int
+nandsim_modify(struct sim_mod *mod)
+{
+ struct sim_chip *sim_conf = NULL;
+ struct nandsim_chip *sim_chip = NULL;
+
+ nand_debug(NDBG_SIM,"modify ctlr %d chip %d", mod->ctrl_num,
+ mod->chip_num);
+
+ if (mod->field != SIM_MOD_LOG_LEVEL) {
+ if (mod->ctrl_num >= MAX_SIM_DEV ||
+ mod->chip_num >= MAX_CTRL_CS)
+ return (EINVAL);
+
+ sim_conf = ctrls[mod->ctrl_num].chips[mod->chip_num];
+ sim_chip = get_nandsim_chip(mod->ctrl_num, mod->chip_num);
+ }
+
+ switch (mod->field) {
+ case SIM_MOD_LOG_LEVEL:
+ nandsim_log_level = mod->new_value;
+ break;
+ case SIM_MOD_ERASE_TIME:
+ sim_conf->erase_time = sim_chip->erase_delay = mod->new_value;
+ break;
+ case SIM_MOD_PROG_TIME:
+ sim_conf->prog_time = sim_chip->prog_delay = mod->new_value;
+ break;
+ case SIM_MOD_READ_TIME:
+ sim_conf->read_time = sim_chip->read_delay = mod->new_value;
+ break;
+ case SIM_MOD_ERROR_RATIO:
+ sim_conf->error_ratio = mod->new_value;
+ sim_chip->error_ratio = mod->new_value;
+ break;
+ default:
+ break;
+ }
+
+ return (0);
+}
+static int
+nandsim_modevent(module_t mod __unused, int type, void *data __unused)
+{
+ struct sim_ctrl_chip chip_ctrl;
+ int i, j;
+
+ switch (type) {
+ case MOD_LOAD:
+ nandsim_dev = make_dev(&nandsim_cdevsw, 0,
+ UID_ROOT, GID_WHEEL, 0666, "nandsim.ioctl");
+ break;
+ case MOD_UNLOAD:
+ for (i = 0; i < MAX_SIM_DEV; i++) {
+ nandsim_stop_ctrl(i);
+ chip_ctrl.ctrl_num = i;
+ for (j = 0; j < MAX_CTRL_CS; j++) {
+ chip_ctrl.chip_num = j;
+ nandsim_destroy_chip(&chip_ctrl);
+ }
+ nandsim_destroy_ctrl(i);
+ }
+ destroy_dev(nandsim_dev);
+ break;
+ case MOD_SHUTDOWN:
+ break;
+ default:
+ return (EOPNOTSUPP);
+ }
+ return (0);
+}
+
+DEV_MODULE(nandsim, nandsim_modevent, NULL);
+MODULE_VERSION(nandsim, 1);
diff --git a/sys/dev/nand/nandsim.h b/sys/dev/nand/nandsim.h
new file mode 100644
index 000000000000..fbbb6d4bc7a4
--- /dev/null
+++ b/sys/dev/nand/nandsim.h
@@ -0,0 +1,175 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 _NANDSIM_H_
+#define _NANDSIM_H_
+
+#include <sys/ioccom.h>
+#include <sys/types.h>
+
+#define MAX_SIM_DEV 4
+#define MAX_CTRL_CS 4
+#define MAX_ECC_BYTES 512
+#define MAX_BAD_BLOCKS 512
+#define DEV_MODEL_STR_SIZE 21
+#define MAN_STR_SIZE 13
+#define FILENAME_SIZE 20
+
+#define MAX_CHIPS (MAX_SIM_DEV*MAX_CTRL_CS)
+
+#define NANDSIM_OUTPUT_NONE 0x0
+#define NANDSIM_OUTPUT_CONSOLE 0x1
+#define NANDSIM_OUTPUT_RAM 0x2
+#define NANDSIM_OUTPUT_FILE 0x3
+
+struct sim_ctrl_chip {
+ uint8_t ctrl_num;
+ uint8_t chip_num;
+};
+
+#define NANDSIM_BASE 'A'
+
+struct sim_param {
+ uint8_t log_level;
+ uint8_t log_output;
+};
+
+#define NANDSIM_SIM_PARAM _IOW(NANDSIM_BASE, 1, struct sim_param)
+
+struct sim_ctrl {
+ uint8_t running;
+ uint8_t created;
+ uint8_t num;
+ uint8_t num_cs;
+ uint8_t ecc;
+ char filename[FILENAME_SIZE];
+ uint16_t ecc_layout[MAX_ECC_BYTES];
+};
+#define NANDSIM_CREATE_CTRL _IOW(NANDSIM_BASE, 2, struct sim_ctrl)
+#define NANDSIM_DESTROY_CTRL _IOW(NANDSIM_BASE, 3, int)
+
+struct sim_chip {
+ uint8_t num;
+ uint8_t ctrl_num;
+ uint8_t created;
+ uint8_t device_id;
+ uint8_t manufact_id;
+ char device_model[DEV_MODEL_STR_SIZE];
+ char manufacturer[MAN_STR_SIZE];
+ uint8_t col_addr_cycles;
+ uint8_t row_addr_cycles;
+ uint8_t features;
+ uint8_t width;
+ uint32_t page_size;
+ uint32_t oob_size;
+ uint32_t pgs_per_blk;
+ uint32_t blks_per_lun;
+ uint32_t luns;
+
+ uint32_t prog_time;
+ uint32_t erase_time;
+ uint32_t read_time;
+ uint32_t ccs_time;
+
+ uint32_t error_ratio;
+ uint32_t wear_level;
+ uint32_t bad_block_map[MAX_BAD_BLOCKS];
+ uint8_t is_wp;
+};
+
+#define NANDSIM_CREATE_CHIP _IOW(NANDSIM_BASE, 3, struct sim_chip)
+
+struct sim_chip_destroy {
+ uint8_t ctrl_num;
+ uint8_t chip_num;
+};
+#define NANDSIM_DESTROY_CHIP _IOW(NANDSIM_BASE, 4, struct sim_chip_destroy)
+
+#define NANDSIM_START_CTRL _IOW(NANDSIM_BASE, 5, int)
+#define NANDSIM_STOP_CTRL _IOW(NANDSIM_BASE, 6, int)
+#define NANDSIM_RESTART_CTRL _IOW(NANDSIM_BASE, 7, int)
+
+#define NANDSIM_STATUS_CTRL _IOWR(NANDSIM_BASE, 8, struct sim_ctrl)
+#define NANDSIM_STATUS_CHIP _IOWR(NANDSIM_BASE, 9, struct sim_chip)
+
+struct sim_mod {
+ uint8_t chip_num;
+ uint8_t ctrl_num;
+ uint32_t field;
+ uint32_t new_value;
+};
+#define SIM_MOD_LOG_LEVEL 0
+#define SIM_MOD_ERASE_TIME 1
+#define SIM_MOD_PROG_TIME 2
+#define SIM_MOD_READ_TIME 3
+#define SIM_MOD_CCS_TIME 4
+#define SIM_MOD_ERROR_RATIO 5
+
+#define NANDSIM_MODIFY _IOW(NANDSIM_BASE, 10, struct sim_mod)
+#define NANDSIM_FREEZE _IOW(NANDSIM_BASE, 11, struct sim_ctrl_chip)
+
+struct sim_error {
+ uint8_t ctrl_num;
+ uint8_t chip_num;
+ uint32_t page_num;
+ uint32_t column;
+ uint32_t len;
+ uint32_t pattern;
+};
+#define NANDSIM_INJECT_ERROR _IOW(NANDSIM_BASE, 20, struct sim_error)
+
+#define NANDSIM_GOOD_BLOCK 0
+#define NANDSIM_BAD_BLOCK 1
+struct sim_block_state {
+ uint8_t ctrl_num;
+ uint8_t chip_num;
+ uint32_t block_num;
+ int wearout;
+ uint8_t state;
+};
+#define NANDSIM_SET_BLOCK_STATE _IOW(NANDSIM_BASE, 21, struct sim_block_state)
+#define NANDSIM_GET_BLOCK_STATE _IOWR(NANDSIM_BASE, 22, struct sim_block_state)
+
+struct sim_log {
+ uint8_t ctrl_num;
+ char* log;
+ size_t len;
+};
+#define NANDSIM_PRINT_LOG _IOWR(NANDSIM_BASE, 23, struct sim_log)
+
+struct sim_dump {
+ uint8_t ctrl_num;
+ uint8_t chip_num;
+ uint32_t block_num;
+ uint32_t len;
+ void* data;
+};
+#define NANDSIM_DUMP _IOWR(NANDSIM_BASE, 24, struct sim_dump)
+#define NANDSIM_RESTORE _IOWR(NANDSIM_BASE, 25, struct sim_dump)
+
+#endif /* _NANDSIM_H_ */
diff --git a/sys/dev/nand/nandsim_chip.c b/sys/dev/nand/nandsim_chip.c
new file mode 100644
index 000000000000..f04ad805b167
--- /dev/null
+++ b/sys/dev/nand/nandsim_chip.c
@@ -0,0 +1,901 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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/types.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+#include <sys/mutex.h>
+#include <sys/proc.h>
+#include <sys/sched.h>
+#include <sys/kthread.h>
+#include <sys/unistd.h>
+
+#include <dev/nand/nand.h>
+#include <dev/nand/nandsim_chip.h>
+#include <dev/nand/nandsim_log.h>
+#include <dev/nand/nandsim_swap.h>
+
+MALLOC_DEFINE(M_NANDSIM, "NANDsim", "NANDsim dynamic data");
+
+#define NANDSIM_CHIP_LOCK(chip) mtx_lock(&(chip)->ns_lock)
+#define NANDSIM_CHIP_UNLOCK(chip) mtx_unlock(&(chip)->ns_lock)
+
+static nandsim_evh_t erase_evh;
+static nandsim_evh_t idle_evh;
+static nandsim_evh_t poweron_evh;
+static nandsim_evh_t reset_evh;
+static nandsim_evh_t read_evh;
+static nandsim_evh_t readid_evh;
+static nandsim_evh_t readparam_evh;
+static nandsim_evh_t write_evh;
+
+static void nandsim_loop(void *);
+static void nandsim_undefined(struct nandsim_chip *, uint8_t);
+static void nandsim_bad_address(struct nandsim_chip *, uint8_t *);
+static void nandsim_ignore_address(struct nandsim_chip *, uint8_t);
+static void nandsim_sm_error(struct nandsim_chip *);
+static void nandsim_start_handler(struct nandsim_chip *, nandsim_evh_t);
+
+static void nandsim_callout_eh(void *);
+static int nandsim_delay(struct nandsim_chip *, int);
+
+static int nandsim_bbm_init(struct nandsim_chip *, uint32_t, uint32_t *);
+static int nandsim_blk_state_init(struct nandsim_chip *, uint32_t, uint32_t);
+static void nandsim_blk_state_destroy(struct nandsim_chip *);
+static int nandchip_is_block_valid(struct nandsim_chip *, int);
+
+static void nandchip_set_status(struct nandsim_chip *, uint8_t);
+static void nandchip_clear_status(struct nandsim_chip *, uint8_t);
+
+struct proc *nandsim_proc;
+
+struct nandsim_chip *
+nandsim_chip_init(struct nandsim_softc* sc, uint8_t chip_num,
+ struct sim_chip *sim_chip)
+{
+ struct nandsim_chip *chip;
+ struct onfi_params *chip_param;
+ char swapfile[20];
+ uint32_t size;
+ int error;
+
+ chip = malloc(sizeof(*chip), M_NANDSIM, M_WAITOK | M_ZERO);
+ if (!chip)
+ return (NULL);
+
+ mtx_init(&chip->ns_lock, "nandsim lock", NULL, MTX_DEF);
+ callout_init(&chip->ns_callout, CALLOUT_MPSAFE);
+ STAILQ_INIT(&chip->nandsim_events);
+
+ chip->chip_num = chip_num;
+ chip->ctrl_num = sim_chip->ctrl_num;
+ chip->sc = sc;
+
+ if (!sim_chip->is_wp)
+ nandchip_set_status(chip, NAND_STATUS_WP);
+
+ chip_param = &chip->params;
+
+ chip->id.dev_id = sim_chip->device_id;
+ chip->id.man_id = sim_chip->manufact_id;
+
+ chip->error_ratio = sim_chip->error_ratio;
+ chip->wear_level = sim_chip->wear_level;
+ chip->prog_delay = sim_chip->prog_time;
+ chip->erase_delay = sim_chip->erase_time;
+ chip->read_delay = sim_chip->read_time;
+
+ chip_param->t_prog = sim_chip->prog_time;
+ chip_param->t_bers = sim_chip->erase_time;
+ chip_param->t_r = sim_chip->read_time;
+ bcopy("onfi", &chip_param->signature, 4);
+
+ chip_param->manufacturer_id = sim_chip->manufact_id;
+ strncpy(chip_param->manufacturer_name, sim_chip->manufacturer, 12);
+ chip_param->manufacturer_name[11] = 0;
+ strncpy(chip_param->device_model, sim_chip->device_model, 20);
+ chip_param->device_model[19] = 0;
+
+ chip_param->bytes_per_page = sim_chip->page_size;
+ chip_param->spare_bytes_per_page = sim_chip->oob_size;
+ chip_param->pages_per_block = sim_chip->pgs_per_blk;
+ chip_param->blocks_per_lun = sim_chip->blks_per_lun;
+ chip_param->luns = sim_chip->luns;
+
+ init_chip_geom(&chip->cg, chip_param->luns, chip_param->blocks_per_lun,
+ chip_param->pages_per_block, chip_param->bytes_per_page,
+ chip_param->spare_bytes_per_page);
+
+ chip_param->address_cycles = sim_chip->row_addr_cycles |
+ (sim_chip->col_addr_cycles << 4);
+ chip_param->features = sim_chip->features;
+ if (sim_chip->width == 16)
+ chip_param->features |= ONFI_FEAT_16BIT;
+
+ size = chip_param->blocks_per_lun * chip_param->luns;
+
+ error = nandsim_blk_state_init(chip, size, sim_chip->wear_level);
+ if (error) {
+ mtx_destroy(&chip->ns_lock);
+ free(chip, M_NANDSIM);
+ return (NULL);
+ }
+
+ error = nandsim_bbm_init(chip, size, sim_chip->bad_block_map);
+ if (error) {
+ mtx_destroy(&chip->ns_lock);
+ nandsim_blk_state_destroy(chip);
+ free(chip, M_NANDSIM);
+ return (NULL);
+ }
+
+ nandsim_start_handler(chip, poweron_evh);
+
+ nand_debug(NDBG_SIM,"Create thread for chip%d [%8p]", chip->chip_num,
+ chip);
+ /* Create chip thread */
+ error = kproc_kthread_add(nandsim_loop, chip, &nandsim_proc,
+ &chip->nandsim_td, RFSTOPPED | RFHIGHPID,
+ 0, "nandsim", "chip");
+ if (error) {
+ mtx_destroy(&chip->ns_lock);
+ nandsim_blk_state_destroy(chip);
+ free(chip, M_NANDSIM);
+ return (NULL);
+ }
+
+ thread_lock(chip->nandsim_td);
+ sched_class(chip->nandsim_td, PRI_REALTIME);
+ sched_add(chip->nandsim_td, SRQ_BORING);
+ thread_unlock(chip->nandsim_td);
+
+ size = (chip_param->bytes_per_page +
+ chip_param->spare_bytes_per_page) *
+ chip_param->pages_per_block;
+
+ sprintf(swapfile, "chip%d%d.swp", chip->ctrl_num, chip->chip_num);
+ chip->swap = nandsim_swap_init(swapfile, chip_param->blocks_per_lun *
+ chip_param->luns, size);
+ if (!chip->swap)
+ nandsim_chip_destroy(chip);
+
+ /* Wait for new thread to enter main loop */
+ tsleep(chip->nandsim_td, PWAIT, "ns_chip", 1 * hz);
+
+ return (chip);
+}
+
+static int
+nandsim_blk_state_init(struct nandsim_chip *chip, uint32_t size,
+ uint32_t wear_lev)
+{
+ int i;
+
+ if (!chip || size == 0)
+ return (-1);
+
+ chip->blk_state = malloc(size * sizeof(struct nandsim_block_state),
+ M_NANDSIM, M_WAITOK | M_ZERO);
+ if (!chip->blk_state) {
+ return (-1);
+ }
+
+ for (i = 0; i < size; i++) {
+ if (wear_lev)
+ chip->blk_state[i].wear_lev = wear_lev;
+ else
+ chip->blk_state[i].wear_lev = -1;
+ }
+
+ return (0);
+}
+
+static void
+nandsim_blk_state_destroy(struct nandsim_chip *chip)
+{
+
+ if (chip && chip->blk_state)
+ free(chip->blk_state, M_NANDSIM);
+}
+
+static int
+nandsim_bbm_init(struct nandsim_chip *chip, uint32_t size,
+ uint32_t *sim_bbm)
+{
+ uint32_t index;
+ int i;
+
+ if ((chip == NULL) || (size == 0))
+ return (-1);
+
+ if (chip->blk_state == NULL)
+ return (-1);
+
+ if (sim_bbm == NULL)
+ return (0);
+
+ for (i = 0; i < MAX_BAD_BLOCKS; i++) {
+ index = sim_bbm[i];
+
+ if (index == 0xffffffff)
+ break;
+ else if (index > size)
+ return (-1);
+ else
+ chip->blk_state[index].is_bad = 1;
+ }
+
+ return (0);
+}
+
+void
+nandsim_chip_destroy(struct nandsim_chip *chip)
+{
+ struct nandsim_ev *ev;
+
+ ev = create_event(chip, NANDSIM_EV_EXIT, 0);
+ if (ev)
+ send_event(ev);
+}
+
+void
+nandsim_chip_freeze(struct nandsim_chip *chip)
+{
+
+ chip->flags |= NANDSIM_CHIP_FROZEN;
+}
+
+static void
+nandsim_loop(void *arg)
+{
+ struct nandsim_chip *chip = (struct nandsim_chip *)arg;
+ struct nandsim_ev *ev;
+
+ nand_debug(NDBG_SIM,"Start main loop for chip%d [%8p]", chip->chip_num,
+ chip);
+ for(;;) {
+ NANDSIM_CHIP_LOCK(chip);
+ if (!(chip->flags & NANDSIM_CHIP_ACTIVE)) {
+ chip->flags |= NANDSIM_CHIP_ACTIVE;
+ wakeup(chip->nandsim_td);
+ }
+
+ if (STAILQ_EMPTY(&chip->nandsim_events)) {
+ nand_debug(NDBG_SIM,"Chip%d [%8p] going sleep",
+ chip->chip_num, chip);
+ msleep(chip, &chip->ns_lock, PRIBIO, "nandev", 0);
+ }
+
+ ev = STAILQ_FIRST(&chip->nandsim_events);
+ STAILQ_REMOVE_HEAD(&chip->nandsim_events, links);
+ NANDSIM_CHIP_UNLOCK(chip);
+ if (ev->type == NANDSIM_EV_EXIT) {
+ NANDSIM_CHIP_LOCK(chip);
+ destroy_event(ev);
+ wakeup(ev);
+ while (!STAILQ_EMPTY(&chip->nandsim_events)) {
+ ev = STAILQ_FIRST(&chip->nandsim_events);
+ STAILQ_REMOVE_HEAD(&chip->nandsim_events,
+ links);
+ destroy_event(ev);
+ wakeup(ev);
+ };
+ NANDSIM_CHIP_UNLOCK(chip);
+ nandsim_log(chip, NANDSIM_LOG_SM, "destroyed\n");
+ mtx_destroy(&chip->ns_lock);
+ nandsim_blk_state_destroy(chip);
+ nandsim_swap_destroy(chip->swap);
+ free(chip, M_NANDSIM);
+ nandsim_proc = NULL;
+
+ kthread_exit();
+ }
+
+ if (!(chip->flags & NANDSIM_CHIP_FROZEN)) {
+ nand_debug(NDBG_SIM,"Chip [%x] get event [%x]",
+ chip->chip_num, ev->type);
+ chip->ev_handler(chip, ev->type, ev->data);
+ }
+
+ wakeup(ev);
+ destroy_event(ev);
+ }
+
+}
+
+struct nandsim_ev *
+create_event(struct nandsim_chip *chip, uint8_t type, uint8_t data_size)
+{
+ struct nandsim_ev *ev;
+
+ ev = malloc(sizeof(*ev), M_NANDSIM, M_NOWAIT | M_ZERO);
+ if (!ev) {
+ nand_debug(NDBG_SIM,"Cannot create event");
+ return (NULL);
+ }
+
+ if (data_size > 0)
+ ev->data = malloc(sizeof(*ev), M_NANDSIM, M_NOWAIT | M_ZERO);
+ ev->type = type;
+ ev->chip = chip;
+
+ return (ev);
+}
+
+void
+destroy_event(struct nandsim_ev *ev)
+{
+
+ if (ev->data)
+ free(ev->data, M_NANDSIM);
+ free(ev, M_NANDSIM);
+}
+
+int
+send_event(struct nandsim_ev *ev)
+{
+ struct nandsim_chip *chip = ev->chip;
+
+ if (!(chip->flags & NANDSIM_CHIP_FROZEN)) {
+ nand_debug(NDBG_SIM,"Chip%d [%p] send event %x",
+ chip->chip_num, chip, ev->type);
+
+ NANDSIM_CHIP_LOCK(chip);
+ STAILQ_INSERT_TAIL(&chip->nandsim_events, ev, links);
+ NANDSIM_CHIP_UNLOCK(chip);
+
+ wakeup(chip);
+ if ((ev->type != NANDSIM_EV_TIMEOUT) && chip->nandsim_td &&
+ (curthread != chip->nandsim_td))
+ tsleep(ev, PWAIT, "ns_ev", 5 * hz);
+ }
+
+ return (0);
+}
+
+static void
+nandsim_callout_eh(void *arg)
+{
+ struct nandsim_ev *ev = (struct nandsim_ev *)arg;
+
+ send_event(ev);
+}
+
+static int
+nandsim_delay(struct nandsim_chip *chip, int timeout)
+{
+ struct nandsim_ev *ev;
+ struct timeval delay;
+ int tm;
+
+ nand_debug(NDBG_SIM,"Chip[%d] Set delay: %d", chip->chip_num, timeout);
+
+ ev = create_event(chip, NANDSIM_EV_TIMEOUT, 0);
+ if (!ev)
+ return (-1);
+
+ chip->sm_state = NANDSIM_STATE_TIMEOUT;
+ tm = (timeout/10000) * (hz / 100);
+ if (callout_reset(&chip->ns_callout, tm, nandsim_callout_eh, ev))
+ return (-1);
+
+ delay.tv_sec = chip->read_delay / 1000000;
+ delay.tv_usec = chip->read_delay % 1000000;
+ timevaladd(&chip->delay_tv, &delay);
+
+ return (0);
+}
+
+static void
+nandsim_start_handler(struct nandsim_chip *chip, nandsim_evh_t evh)
+{
+ struct nandsim_ev *ev;
+
+ chip->ev_handler = evh;
+
+ nand_debug(NDBG_SIM,"Start handler %p for chip%d [%p]", evh,
+ chip->chip_num, chip);
+ ev = create_event(chip, NANDSIM_EV_START, 0);
+ if (!ev)
+ nandsim_sm_error(chip);
+
+ send_event(ev);
+}
+
+static void
+nandchip_set_data(struct nandsim_chip *chip, uint8_t *data, uint32_t len,
+ uint32_t idx)
+{
+
+ nand_debug(NDBG_SIM,"Chip [%x] data %p [%x] at %x", chip->chip_num,
+ data, len, idx);
+ chip->data.data_ptr = data;
+ chip->data.size = len;
+ chip->data.index = idx;
+}
+
+static int
+nandchip_chip_space(struct nandsim_chip *chip, int32_t row, int32_t column,
+ size_t size, uint8_t writing)
+{
+ struct block_space *blk_space;
+ uint32_t lun, block, page, offset, block_size;
+ int err;
+
+ block_size = chip->cg.block_size +
+ (chip->cg.oob_size * chip->cg.pgs_per_blk);
+
+ err = nand_row_to_blkpg(&chip->cg, row, &lun, &block, &page);
+ if (err) {
+ nand_debug(NDBG_SIM,"cannot get address\n");
+ return (-1);
+ }
+
+ if (!nandchip_is_block_valid(chip, block)) {
+ nandchip_set_data(chip, NULL, 0, 0);
+ return (-1);
+ }
+
+ blk_space = get_bs(chip->swap, block, writing);
+ if (!blk_space) {
+ nandchip_set_data(chip, NULL, 0, 0);
+ return (-1);
+ }
+
+ if (size > block_size)
+ size = block_size;
+
+ if (size == block_size) {
+ offset = 0;
+ column = 0;
+ } else
+ offset = page * (chip->cg.page_size + chip->cg.oob_size);
+
+ nandchip_set_data(chip, &blk_space->blk_ptr[offset], size, column);
+
+ return (0);
+}
+
+static int
+nandchip_get_addr_byte(struct nandsim_chip *chip, void *data, uint32_t *value)
+{
+ int ncycles = 0;
+ uint8_t byte;
+ uint8_t *buffer;
+
+ buffer = (uint8_t *)value;
+ byte = *((uint8_t *)data);
+
+ KASSERT((chip->sm_state == NANDSIM_STATE_WAIT_ADDR_ROW ||
+ chip->sm_state == NANDSIM_STATE_WAIT_ADDR_COL),
+ ("unexpected state"));
+
+ if (chip->sm_state == NANDSIM_STATE_WAIT_ADDR_ROW) {
+ ncycles = chip->params.address_cycles & 0xf;
+ buffer[chip->sm_addr_cycle++] = byte;
+ } else if (chip->sm_state == NANDSIM_STATE_WAIT_ADDR_COL) {
+ ncycles = (chip->params.address_cycles >> 4) & 0xf;
+ buffer[chip->sm_addr_cycle++] = byte;
+ }
+
+ nand_debug(NDBG_SIM, "Chip [%x] read addr byte: %02x (%d of %d)\n",
+ chip->chip_num, byte, chip->sm_addr_cycle, ncycles);
+
+ if (chip->sm_addr_cycle == ncycles) {
+ chip->sm_addr_cycle = 0;
+ return (0);
+ }
+
+ return (1);
+}
+
+static int
+nandchip_is_block_valid(struct nandsim_chip *chip, int block_num)
+{
+
+ if (!chip || !chip->blk_state)
+ return (0);
+
+ if (chip->blk_state[block_num].wear_lev == 0 ||
+ chip->blk_state[block_num].is_bad)
+ return (0);
+
+ return (1);
+}
+
+static void
+nandchip_set_status(struct nandsim_chip *chip, uint8_t flags)
+{
+
+ chip->chip_status |= flags;
+}
+
+static void
+nandchip_clear_status(struct nandsim_chip *chip, uint8_t flags)
+{
+
+ chip->chip_status &= ~flags;
+}
+
+uint8_t
+nandchip_get_status(struct nandsim_chip *chip)
+{
+ return (chip->chip_status);
+}
+
+void
+nandsim_chip_timeout(struct nandsim_chip *chip)
+{
+ struct timeval tv;
+
+ getmicrotime(&tv);
+
+ if (chip->sm_state == NANDSIM_STATE_TIMEOUT &&
+ timevalcmp(&tv, &chip->delay_tv, >=)) {
+ nandchip_set_status(chip, NAND_STATUS_RDY);
+ }
+}
+void
+poweron_evh(struct nandsim_chip *chip, uint32_t type, void *data)
+{
+ uint8_t cmd;
+
+ if (type == NANDSIM_EV_START)
+ chip->sm_state = NANDSIM_STATE_IDLE;
+ else if (type == NANDSIM_EV_CMD) {
+ cmd = *(uint8_t *)data;
+ switch(cmd) {
+ case NAND_CMD_RESET:
+ nandsim_log(chip, NANDSIM_LOG_SM, "in RESET state\n");
+ nandsim_start_handler(chip, reset_evh);
+ break;
+ default:
+ nandsim_undefined(chip, type);
+ break;
+ }
+ } else
+ nandsim_undefined(chip, type);
+}
+
+void
+idle_evh(struct nandsim_chip *chip, uint32_t type, void *data)
+{
+ uint8_t cmd;
+
+ if (type == NANDSIM_EV_START) {
+ nandsim_log(chip, NANDSIM_LOG_SM, "in IDLE state\n");
+ chip->sm_state = NANDSIM_STATE_WAIT_CMD;
+ } else if (type == NANDSIM_EV_CMD) {
+ nandchip_clear_status(chip, NAND_STATUS_FAIL);
+ getmicrotime(&chip->delay_tv);
+ cmd = *(uint8_t *)data;
+ switch(cmd) {
+ case NAND_CMD_READ_ID:
+ nandsim_start_handler(chip, readid_evh);
+ break;
+ case NAND_CMD_READ_PARAMETER:
+ nandsim_start_handler(chip, readparam_evh);
+ break;
+ case NAND_CMD_READ:
+ nandsim_start_handler(chip, read_evh);
+ break;
+ case NAND_CMD_PROG:
+ nandsim_start_handler(chip, write_evh);
+ break;
+ case NAND_CMD_ERASE:
+ nandsim_start_handler(chip, erase_evh);
+ break;
+ default:
+ nandsim_undefined(chip, type);
+ break;
+ }
+ } else
+ nandsim_undefined(chip, type);
+}
+
+void
+readid_evh(struct nandsim_chip *chip, uint32_t type, void *data)
+{
+ struct onfi_params *params;
+ uint8_t addr;
+
+ params = &chip->params;
+
+ if (type == NANDSIM_EV_START) {
+ nandsim_log(chip, NANDSIM_LOG_SM, "in READID state\n");
+ chip->sm_state = NANDSIM_STATE_WAIT_ADDR_BYTE;
+ } else if (type == NANDSIM_EV_ADDR) {
+
+ addr = *((uint8_t *)data);
+
+ if (addr == 0x0)
+ nandchip_set_data(chip, (uint8_t *)&chip->id, 2, 0);
+ else if (addr == ONFI_SIG_ADDR)
+ nandchip_set_data(chip, (uint8_t *)&params->signature,
+ 4, 0);
+ else
+ nandsim_bad_address(chip, &addr);
+
+ nandsim_start_handler(chip, idle_evh);
+ } else
+ nandsim_undefined(chip, type);
+}
+
+void
+readparam_evh(struct nandsim_chip *chip, uint32_t type, void *data)
+{
+ struct onfi_params *params;
+ uint8_t addr;
+
+ params = &chip->params;
+
+ if (type == NANDSIM_EV_START) {
+ nandsim_log(chip, NANDSIM_LOG_SM, "in READPARAM state\n");
+ chip->sm_state = NANDSIM_STATE_WAIT_ADDR_BYTE;
+ } else if (type == NANDSIM_EV_ADDR) {
+ addr = *((uint8_t *)data);
+
+ if (addr == 0) {
+ nandchip_set_data(chip, (uint8_t *)params,
+ sizeof(*params), 0);
+ } else
+ nandsim_bad_address(chip, &addr);
+
+ nandsim_start_handler(chip, idle_evh);
+ } else
+ nandsim_undefined(chip, type);
+}
+
+void
+read_evh(struct nandsim_chip *chip, uint32_t type, void *data)
+{
+ static uint32_t column = 0, row = 0;
+ uint32_t size;
+ uint8_t cmd;
+
+ size = chip->cg.page_size + chip->cg.oob_size;
+
+ switch (type) {
+ case NANDSIM_EV_START:
+ nandsim_log(chip, NANDSIM_LOG_SM, "in READ state\n");
+ chip->sm_state = NANDSIM_STATE_WAIT_ADDR_COL;
+ break;
+ case NANDSIM_EV_ADDR:
+ if (chip->sm_state == NANDSIM_STATE_WAIT_ADDR_COL) {
+ if (nandchip_get_addr_byte(chip, data, &column))
+ break;
+
+ chip->sm_state = NANDSIM_STATE_WAIT_ADDR_ROW;
+ } else if (chip->sm_state == NANDSIM_STATE_WAIT_ADDR_ROW) {
+ if (nandchip_get_addr_byte(chip, data, &row))
+ break;
+
+ chip->sm_state = NANDSIM_STATE_WAIT_CMD;
+ } else
+ nandsim_ignore_address(chip, *((uint8_t *)data));
+ break;
+ case NANDSIM_EV_CMD:
+ cmd = *(uint8_t *)data;
+ if (chip->sm_state == NANDSIM_STATE_WAIT_CMD &&
+ cmd == NAND_CMD_READ_END) {
+ if (chip->read_delay != 0 &&
+ nandsim_delay(chip, chip->read_delay) == 0)
+ nandchip_clear_status(chip, NAND_STATUS_RDY);
+ else {
+ nandchip_chip_space(chip, row, column, size, 0);
+ nandchip_set_status(chip, NAND_STATUS_RDY);
+ nandsim_start_handler(chip, idle_evh);
+ }
+ } else
+ nandsim_undefined(chip, type);
+ break;
+ case NANDSIM_EV_TIMEOUT:
+ if (chip->sm_state == NANDSIM_STATE_TIMEOUT) {
+ nandchip_chip_space(chip, row, column, size, 0);
+ nandchip_set_status(chip, NAND_STATUS_RDY);
+ nandsim_start_handler(chip, idle_evh);
+ } else
+ nandsim_undefined(chip, type);
+ break;
+ }
+}
+void
+write_evh(struct nandsim_chip *chip, uint32_t type, void *data)
+{
+ static uint32_t column, row;
+ uint32_t size;
+ uint8_t cmd;
+ int err;
+
+ size = chip->cg.page_size + chip->cg.oob_size;
+
+ switch(type) {
+ case NANDSIM_EV_START:
+ nandsim_log(chip, NANDSIM_LOG_SM, "in WRITE state\n");
+ chip->sm_state = NANDSIM_STATE_WAIT_ADDR_COL;
+ break;
+ case NANDSIM_EV_ADDR:
+ if (chip->sm_state == NANDSIM_STATE_WAIT_ADDR_COL) {
+ if (nandchip_get_addr_byte(chip, data, &column))
+ break;
+
+ chip->sm_state = NANDSIM_STATE_WAIT_ADDR_ROW;
+ } else if (chip->sm_state == NANDSIM_STATE_WAIT_ADDR_ROW) {
+ if (nandchip_get_addr_byte(chip, data, &row))
+ break;
+
+ err = nandchip_chip_space(chip, row, column, size, 1);
+ if (err == -1)
+ nandchip_set_status(chip, NAND_STATUS_FAIL);
+
+ chip->sm_state = NANDSIM_STATE_WAIT_CMD;
+ } else
+ nandsim_ignore_address(chip, *((uint8_t *)data));
+ break;
+ case NANDSIM_EV_CMD:
+ cmd = *(uint8_t *)data;
+ if (chip->sm_state == NANDSIM_STATE_WAIT_CMD &&
+ cmd == NAND_CMD_PROG_END) {
+ if (chip->prog_delay != 0 &&
+ nandsim_delay(chip, chip->prog_delay) == 0)
+ nandchip_clear_status(chip, NAND_STATUS_RDY);
+ else {
+ nandchip_set_status(chip, NAND_STATUS_RDY);
+ nandsim_start_handler(chip, idle_evh);
+ }
+ } else
+ nandsim_undefined(chip, type);
+ break;
+ case NANDSIM_EV_TIMEOUT:
+ if (chip->sm_state == NANDSIM_STATE_TIMEOUT) {
+ nandsim_start_handler(chip, idle_evh);
+ nandchip_set_status(chip, NAND_STATUS_RDY);
+ } else
+ nandsim_undefined(chip, type);
+ break;
+ }
+}
+
+void
+erase_evh(struct nandsim_chip *chip, uint32_t type, void *data)
+{
+ static uint32_t row, block_size;
+ uint32_t lun, block, page;
+ int err;
+ uint8_t cmd;
+
+ block_size = chip->cg.block_size +
+ (chip->cg.oob_size * chip->cg.pgs_per_blk);
+
+ switch (type) {
+ case NANDSIM_EV_START:
+ nandsim_log(chip, NANDSIM_LOG_SM, "in ERASE state\n");
+ chip->sm_state = NANDSIM_STATE_WAIT_ADDR_ROW;
+ break;
+ case NANDSIM_EV_CMD:
+ cmd = *(uint8_t *)data;
+ if (chip->sm_state == NANDSIM_STATE_WAIT_CMD &&
+ cmd == NAND_CMD_ERASE_END) {
+ if (chip->data.data_ptr != NULL &&
+ chip->data.size == block_size)
+ memset(chip->data.data_ptr, 0xff, block_size);
+ else
+ nand_debug(NDBG_SIM,"Bad block erase data\n");
+
+ err = nand_row_to_blkpg(&chip->cg, row, &lun,
+ &block, &page);
+ if (!err) {
+ if (chip->blk_state[block].wear_lev > 0)
+ chip->blk_state[block].wear_lev--;
+ }
+
+ if (chip->erase_delay != 0 &&
+ nandsim_delay(chip, chip->erase_delay) == 0)
+ nandchip_clear_status(chip, NAND_STATUS_RDY);
+ else {
+ nandchip_set_status(chip, NAND_STATUS_RDY);
+ nandsim_start_handler(chip, idle_evh);
+ }
+ } else
+ nandsim_undefined(chip, type);
+ break;
+ case NANDSIM_EV_ADDR:
+ if (chip->sm_state == NANDSIM_STATE_WAIT_ADDR_ROW) {
+ if (nandchip_get_addr_byte(chip, data, &row))
+ break;
+
+ err = nandchip_chip_space(chip, row, 0, block_size, 1);
+ if (err == -1) {
+ nandchip_set_status(chip, NAND_STATUS_FAIL);
+ }
+ chip->sm_state = NANDSIM_STATE_WAIT_CMD;
+ } else
+ nandsim_ignore_address(chip, *((uint8_t *)data));
+ break;
+ case NANDSIM_EV_TIMEOUT:
+ if (chip->sm_state == NANDSIM_STATE_TIMEOUT) {
+ nandchip_set_status(chip, NAND_STATUS_RDY);
+ nandsim_start_handler(chip, idle_evh);
+ } else
+ nandsim_undefined(chip, type);
+ break;
+ }
+}
+
+void
+reset_evh(struct nandsim_chip *chip, uint32_t type, void *data)
+{
+
+ if (type == NANDSIM_EV_START) {
+ nandsim_log(chip, NANDSIM_LOG_SM, "in RESET state\n");
+ chip->sm_state = NANDSIM_STATE_TIMEOUT;
+ nandchip_set_data(chip, NULL, 0, 0);
+ DELAY(500);
+ nandsim_start_handler(chip, idle_evh);
+ } else
+ nandsim_undefined(chip, type);
+}
+
+static void
+nandsim_undefined(struct nandsim_chip *chip, uint8_t type)
+{
+
+ nandsim_log(chip, NANDSIM_LOG_ERR,
+ "ERR: Chip received ev %x in state %x\n",
+ type, chip->sm_state);
+ nandsim_start_handler(chip, idle_evh);
+}
+
+static void
+nandsim_bad_address(struct nandsim_chip *chip, uint8_t *addr)
+{
+
+ nandsim_log(chip, NANDSIM_LOG_ERR,
+ "ERR: Chip received out of range address"
+ "%02x%02x - %02x%02x%02x\n", addr[0], addr[1], addr[2],
+ addr[3], addr[4]);
+}
+
+static void
+nandsim_ignore_address(struct nandsim_chip *chip, uint8_t byte)
+{
+ nandsim_log(chip, NANDSIM_LOG_SM, "ignored address byte: %d\n", byte);
+}
+
+static void
+nandsim_sm_error(struct nandsim_chip *chip)
+{
+
+ nandsim_log(chip, NANDSIM_LOG_ERR, "ERR: State machine error."
+ "Restart required.\n");
+}
diff --git a/sys/dev/nand/nandsim_chip.h b/sys/dev/nand/nandsim_chip.h
new file mode 100644
index 000000000000..a6fb2346ded7
--- /dev/null
+++ b/sys/dev/nand/nandsim_chip.h
@@ -0,0 +1,159 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 _NANDSIM_CHIP_H
+#define _NANDSIM_CHIP_H
+
+#include <sys/malloc.h>
+#include <sys/callout.h>
+#include <dev/nand/nand.h>
+#include <dev/nand/nandsim.h>
+#include <dev/nand/nandsim_swap.h>
+
+MALLOC_DECLARE(M_NANDSIM);
+
+#define MAX_CS_NUM 4
+struct nandsim_chip;
+
+typedef void nandsim_evh_t(struct nandsim_chip *chip, uint32_t ev, void *data);
+
+enum addr_type {
+ ADDR_NONE,
+ ADDR_ID,
+ ADDR_ROW,
+ ADDR_ROWCOL
+};
+
+struct nandsim_softc {
+ struct nand_softc nand_dev;
+ device_t dev;
+
+ struct nandsim_chip *chips[MAX_CS_NUM];
+ struct nandsim_chip *active_chip;
+
+ uint8_t address_cycle;
+ enum addr_type address_type;
+ int log_idx;
+ char *log_buff;
+ struct alq *alq;
+};
+
+struct nandsim_ev {
+ STAILQ_ENTRY(nandsim_ev) links;
+ struct nandsim_chip *chip;
+ uint8_t type;
+ void *data;
+};
+
+struct nandsim_data {
+ uint8_t *data_ptr;
+ uint32_t index;
+ uint32_t size;
+};
+
+struct nandsim_block_state {
+ int32_t wear_lev;
+ uint8_t is_bad;
+};
+
+#define NANDSIM_CHIP_ACTIVE 0x1
+#define NANDSIM_CHIP_FROZEN 0x2
+#define NANDSIM_CHIP_GET_STATUS 0x4
+
+struct nandsim_chip {
+ struct nandsim_softc *sc;
+ struct thread *nandsim_td;
+
+ STAILQ_HEAD(, nandsim_ev) nandsim_events;
+ nandsim_evh_t *ev_handler;
+ struct mtx ns_lock;
+ struct callout ns_callout;
+
+ struct chip_geom cg;
+ struct nand_id id;
+ struct onfi_params params;
+ struct nandsim_data data;
+ struct nandsim_block_state *blk_state;
+
+ struct chip_swap *swap;
+
+ uint32_t error_ratio;
+ uint32_t wear_level;
+ uint32_t sm_state;
+ uint32_t sm_addr_cycle;
+
+ uint32_t erase_delay;
+ uint32_t prog_delay;
+ uint32_t read_delay;
+ struct timeval delay_tv;
+
+ uint8_t flags;
+ uint8_t chip_status;
+ uint8_t ctrl_num;
+ uint8_t chip_num;
+};
+
+struct sim_ctrl_conf {
+ uint8_t num;
+ uint8_t num_cs;
+ uint8_t ecc;
+ uint8_t running;
+ uint8_t created;
+ device_t sim_ctrl_dev;
+ struct sim_chip *chips[MAX_CTRL_CS];
+ uint16_t ecc_layout[MAX_ECC_BYTES];
+ char filename[FILENAME_SIZE];
+};
+
+#define NANDSIM_STATE_IDLE 0x0
+#define NANDSIM_STATE_WAIT_ADDR_BYTE 0x1
+#define NANDSIM_STATE_WAIT_CMD 0x2
+#define NANDSIM_STATE_TIMEOUT 0x3
+#define NANDSIM_STATE_WAIT_ADDR_ROW 0x4
+#define NANDSIM_STATE_WAIT_ADDR_COL 0x5
+
+#define NANDSIM_EV_START 0x1
+#define NANDSIM_EV_CMD 0x2
+#define NANDSIM_EV_ADDR 0x3
+#define NANDSIM_EV_TIMEOUT 0x4
+#define NANDSIM_EV_EXIT 0xff
+
+struct nandsim_chip *nandsim_chip_init(struct nandsim_softc *,
+ uint8_t, struct sim_chip *);
+void nandsim_chip_destroy(struct nandsim_chip *);
+void nandsim_chip_freeze(struct nandsim_chip *);
+void nandsim_chip_timeout(struct nandsim_chip *);
+int nandsim_chip_check_bad_block(struct nandsim_chip *, int);
+
+uint8_t nandchip_get_status(struct nandsim_chip *);
+
+void destroy_event(struct nandsim_ev *);
+int send_event(struct nandsim_ev *);
+struct nandsim_ev *create_event(struct nandsim_chip *, uint8_t, uint8_t);
+
+#endif /* _NANDSIM_CHIP_H */
diff --git a/sys/dev/nand/nandsim_ctrl.c b/sys/dev/nand/nandsim_ctrl.c
new file mode 100644
index 000000000000..5f7b01979203
--- /dev/null
+++ b/sys/dev/nand/nandsim_ctrl.c
@@ -0,0 +1,396 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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.
+ */
+
+/* Simulated NAND controller driver */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/proc.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/rman.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/time.h>
+
+#include <dev/nand/nand.h>
+#include <dev/nand/nandbus.h>
+#include <dev/nand/nandsim.h>
+#include <dev/nand/nandsim_log.h>
+#include <dev/nand/nandsim_chip.h>
+#include "nfc_if.h"
+
+#define ADDRESS_SIZE 5
+
+extern struct sim_ctrl_conf ctrls[MAX_SIM_DEV];
+
+static void byte_corrupt(struct nandsim_chip *, uint8_t *);
+
+static int nandsim_attach(device_t);
+static int nandsim_detach(device_t);
+static int nandsim_probe(device_t);
+
+static uint8_t nandsim_read_byte(device_t);
+static uint16_t nandsim_read_word(device_t);
+static int nandsim_select_cs(device_t, uint8_t);
+static void nandsim_write_byte(device_t, uint8_t);
+static void nandsim_write_word(device_t, uint16_t);
+static void nandsim_read_buf(device_t, void *, uint32_t);
+static void nandsim_write_buf(device_t, void *, uint32_t);
+static int nandsim_send_command(device_t, uint8_t);
+static int nandsim_send_address(device_t, uint8_t);
+
+static device_method_t nandsim_methods[] = {
+ DEVMETHOD(device_probe, nandsim_probe),
+ DEVMETHOD(device_attach, nandsim_attach),
+ DEVMETHOD(device_detach, nandsim_detach),
+
+ DEVMETHOD(nfc_select_cs, nandsim_select_cs),
+ DEVMETHOD(nfc_send_command, nandsim_send_command),
+ DEVMETHOD(nfc_send_address, nandsim_send_address),
+ DEVMETHOD(nfc_read_byte, nandsim_read_byte),
+ DEVMETHOD(nfc_read_word, nandsim_read_word),
+ DEVMETHOD(nfc_write_byte, nandsim_write_byte),
+ DEVMETHOD(nfc_read_buf, nandsim_read_buf),
+ DEVMETHOD(nfc_write_buf, nandsim_write_buf),
+
+ { 0, 0 },
+};
+
+static driver_t nandsim_driver = {
+ "nandsim",
+ nandsim_methods,
+ sizeof(struct nandsim_softc),
+};
+
+static devclass_t nandsim_devclass;
+DRIVER_MODULE(nandsim, nexus, nandsim_driver, nandsim_devclass, 0, 0);
+DRIVER_MODULE(nandbus, nandsim, nandbus_driver, nandbus_devclass, 0, 0);
+
+static int
+nandsim_probe(device_t dev)
+{
+
+ device_set_desc(dev, "NAND controller simulator");
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+nandsim_attach(device_t dev)
+{
+ struct nandsim_softc *sc;
+ struct sim_ctrl_conf *params;
+ struct sim_chip *chip;
+ uint16_t *eccpos;
+ int i, err;
+
+ sc = device_get_softc(dev);
+ params = &ctrls[device_get_unit(dev)];
+
+ if (strlen(params->filename) == 0)
+ snprintf(params->filename, FILENAME_SIZE, "ctrl%d.log",
+ params->num);
+
+ nandsim_log_init(sc, params->filename);
+ for (i = 0; i < params->num_cs; i++) {
+ chip = params->chips[i];
+ if (chip && chip->device_id != 0) {
+ sc->chips[i] = nandsim_chip_init(sc, i, chip);
+ if (chip->features & ONFI_FEAT_16BIT)
+ sc->nand_dev.flags |= NAND_16_BIT;
+ }
+ }
+
+ if (params->ecc_layout[0] != 0xffff)
+ eccpos = params->ecc_layout;
+ else
+ eccpos = NULL;
+
+ nand_init(&sc->nand_dev, dev, params->ecc, 0, 0, eccpos, "nandsim");
+
+ err = nandbus_create(dev);
+
+ return (err);
+}
+
+static int
+nandsim_detach(device_t dev)
+{
+ struct nandsim_softc *sc;
+ struct sim_ctrl_conf *params;
+ int i;
+
+ sc = device_get_softc(dev);
+ params = &ctrls[device_get_unit(dev)];
+
+ for (i = 0; i < params->num_cs; i++)
+ if (sc->chips[i] != NULL)
+ nandsim_chip_destroy(sc->chips[i]);
+
+ nandsim_log_close(sc);
+
+ return (0);
+}
+
+static int
+nandsim_select_cs(device_t dev, uint8_t cs)
+{
+ struct nandsim_softc *sc;
+
+ sc = device_get_softc(dev);
+
+ if (cs >= MAX_CS_NUM)
+ return (EINVAL);
+
+ sc->active_chip = sc->chips[cs];
+
+ if (sc->active_chip)
+ nandsim_log(sc->active_chip, NANDSIM_LOG_EV,
+ "Select cs %d\n", cs);
+
+ return (0);
+}
+
+static int
+nandsim_send_command(device_t dev, uint8_t command)
+{
+ struct nandsim_softc *sc;
+ struct nandsim_chip *chip;
+ struct nandsim_ev *ev;
+
+ sc = device_get_softc(dev);
+ chip = sc->active_chip;
+
+ if (chip == NULL)
+ return (0);
+
+ nandsim_log(chip, NANDSIM_LOG_EV, "Send command %x\n", command);
+
+ switch (command) {
+ case NAND_CMD_READ_ID:
+ case NAND_CMD_READ_PARAMETER:
+ sc->address_type = ADDR_ID;
+ break;
+ case NAND_CMD_ERASE:
+ sc->address_type = ADDR_ROW;
+ break;
+ case NAND_CMD_READ:
+ case NAND_CMD_PROG:
+ sc->address_type = ADDR_ROWCOL;
+ break;
+ default:
+ sc->address_type = ADDR_NONE;
+ break;
+ }
+
+ if (command == NAND_CMD_STATUS)
+ chip->flags |= NANDSIM_CHIP_GET_STATUS;
+ else {
+ ev = create_event(chip, NANDSIM_EV_CMD, 1);
+ *(uint8_t *)ev->data = command;
+ send_event(ev);
+ }
+
+ return (0);
+}
+
+static int
+nandsim_send_address(device_t dev, uint8_t addr)
+{
+ struct nandsim_ev *ev;
+ struct nandsim_softc *sc;
+ struct nandsim_chip *chip;
+
+ sc = device_get_softc(dev);
+ chip = sc->active_chip;
+
+ if (chip == NULL)
+ return (0);
+
+ KASSERT((sc->address_type != ADDR_NONE), ("unexpected address"));
+ nandsim_log(chip, NANDSIM_LOG_EV, "Send addr %x\n", addr);
+
+ ev = create_event(chip, NANDSIM_EV_ADDR, 1);
+
+ *((uint8_t *)(ev->data)) = addr;
+
+ send_event(ev);
+ return (0);
+}
+
+static uint8_t
+nandsim_read_byte(device_t dev)
+{
+ struct nandsim_softc *sc;
+ struct nandsim_chip *chip;
+ uint8_t ret = 0xff;
+
+ sc = device_get_softc(dev);
+ chip = sc->active_chip;
+
+ if (chip && !(chip->flags & NANDSIM_CHIP_FROZEN)) {
+ if (chip->flags & NANDSIM_CHIP_GET_STATUS) {
+ nandsim_chip_timeout(chip);
+ ret = nandchip_get_status(chip);
+ chip->flags &= ~NANDSIM_CHIP_GET_STATUS;
+ } else if (chip->data.index < chip->data.size) {
+ ret = chip->data.data_ptr[chip->data.index++];
+ byte_corrupt(chip, &ret);
+ }
+ nandsim_log(chip, NANDSIM_LOG_DATA, "read %02x\n", ret);
+ }
+
+ return (ret);
+}
+
+static uint16_t
+nandsim_read_word(device_t dev)
+{
+ struct nandsim_softc *sc;
+ struct nandsim_chip *chip;
+ uint16_t *data_ptr;
+ uint16_t ret = 0xffff;
+ uint8_t *byte_ret = (uint8_t *)&ret;
+
+ sc = device_get_softc(dev);
+ chip = sc->active_chip;
+
+ if (chip && !(chip->flags & NANDSIM_CHIP_FROZEN)) {
+ if (chip->data.index < chip->data.size - 1) {
+ data_ptr =
+ (uint16_t *)&(chip->data.data_ptr[chip->data.index]);
+ ret = *data_ptr;
+ chip->data.index += 2;
+ byte_corrupt(chip, byte_ret);
+ byte_corrupt(chip, byte_ret + 1);
+ }
+ nandsim_log(chip, NANDSIM_LOG_DATA, "read %04x\n", ret);
+ }
+
+ return (ret);
+}
+
+static void
+nandsim_write_byte(device_t dev, uint8_t byte)
+{
+ struct nandsim_softc *sc;
+ struct nandsim_chip *chip;
+
+ sc = device_get_softc(dev);
+ chip = sc->active_chip;
+
+ if (chip && !(chip->flags & NANDSIM_CHIP_FROZEN) &&
+ (chip->data.index < chip->data.size)) {
+ byte_corrupt(chip, &byte);
+ chip->data.data_ptr[chip->data.index] &= byte;
+ chip->data.index++;
+ nandsim_log(chip, NANDSIM_LOG_DATA, "write %02x\n", byte);
+ }
+}
+
+static void
+nandsim_write_word(device_t dev, uint16_t word)
+{
+ struct nandsim_softc *sc;
+ struct nandsim_chip *chip;
+ uint16_t *data_ptr;
+ uint8_t *byte_ptr = (uint8_t *)&word;
+
+ sc = device_get_softc(dev);
+ chip = sc->active_chip;
+
+ if (chip && !(chip->flags & NANDSIM_CHIP_FROZEN)) {
+ if ((chip->data.index + 1) < chip->data.size) {
+ byte_corrupt(chip, byte_ptr);
+ byte_corrupt(chip, byte_ptr + 1);
+ data_ptr =
+ (uint16_t *)&(chip->data.data_ptr[chip->data.index]);
+ *data_ptr &= word;
+ chip->data.index += 2;
+ }
+
+ nandsim_log(chip, NANDSIM_LOG_DATA, "write %04x\n", word);
+ }
+}
+
+static void
+nandsim_read_buf(device_t dev, void *buf, uint32_t len)
+{
+ struct nandsim_softc *sc;
+ uint16_t *buf16 = (uint16_t *)buf;
+ uint8_t *buf8 = (uint8_t *)buf;
+ int i;
+
+ sc = device_get_softc(dev);
+
+ if (sc->nand_dev.flags & NAND_16_BIT) {
+ for (i = 0; i < len / 2; i++)
+ buf16[i] = nandsim_read_word(dev);
+ } else {
+ for (i = 0; i < len; i++)
+ buf8[i] = nandsim_read_byte(dev);
+ }
+}
+
+static void
+nandsim_write_buf(device_t dev, void *buf, uint32_t len)
+{
+ struct nandsim_softc *sc;
+ uint16_t *buf16 = (uint16_t *)buf;
+ uint8_t *buf8 = (uint8_t *)buf;
+ int i;
+
+ sc = device_get_softc(dev);
+
+ if (sc->nand_dev.flags & NAND_16_BIT) {
+ for (i = 0; i < len / 2; i++)
+ nandsim_write_word(dev, buf16[i]);
+ } else {
+ for (i = 0; i < len; i++)
+ nandsim_write_byte(dev, buf8[i]);
+ }
+}
+
+static void
+byte_corrupt(struct nandsim_chip *chip, uint8_t *byte)
+{
+ uint32_t rand;
+ uint8_t bit;
+
+ rand = random();
+ if ((rand % 1000000) < chip->error_ratio) {
+ bit = rand % 8;
+ if (*byte & (1 << bit))
+ *byte &= ~(1 << bit);
+ else
+ *byte |= (1 << bit);
+ }
+}
diff --git a/sys/dev/nand/nandsim_log.c b/sys/dev/nand/nandsim_log.c
new file mode 100644
index 000000000000..c51118f0dda8
--- /dev/null
+++ b/sys/dev/nand/nandsim_log.c
@@ -0,0 +1,186 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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/systm.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/malloc.h>
+#include <sys/proc.h>
+#include <sys/alq.h>
+#include <sys/time.h>
+
+#include <machine/stdarg.h>
+
+#include <dev/nand/nandsim_log.h>
+
+int nandsim_log_level;
+int nandsim_log_output;
+int log_size = NANDSIM_RAM_LOG_SIZE;
+
+static int nandsim_entry_size = NANDSIM_ENTRY_SIZE;
+static int nandsim_entry_count = NANDSIM_ENTRY_COUNT;
+static int str_index = 0;
+static char string[NANDSIM_ENTRY_SIZE + 1] = {0};
+
+int
+nandsim_log_init(struct nandsim_softc *sc, char *filename)
+{
+ int error = 0;
+
+ if (nandsim_log_output == NANDSIM_OUTPUT_FILE) {
+ error = alq_open(&sc->alq, filename,
+ curthread->td_ucred, 0644,
+ nandsim_entry_size, nandsim_entry_count);
+ } else if (nandsim_log_output == NANDSIM_OUTPUT_RAM) {
+ sc->log_buff = malloc(log_size, M_NANDSIM, M_WAITOK | M_ZERO);
+ if (!sc->log_buff)
+ error = ENOMEM;
+ }
+
+ return (error);
+}
+
+void
+nandsim_log_close(struct nandsim_softc *sc)
+{
+
+ if (nandsim_log_output == NANDSIM_OUTPUT_FILE) {
+ memset(&string[str_index], 0, NANDSIM_ENTRY_SIZE - str_index);
+ alq_write(sc->alq, (void *) string, ALQ_NOWAIT);
+ str_index = 0;
+ string[0] = '\0';
+ alq_close(sc->alq);
+ } else if (nandsim_log_output == NANDSIM_OUTPUT_RAM) {
+ free(sc->log_buff, M_NANDSIM);
+ sc->log_buff = NULL;
+ }
+}
+
+void
+nandsim_log(struct nandsim_chip *chip, int level, const char *fmt, ...)
+{
+ char hdr[TIME_STR_SIZE];
+ char tmp[NANDSIM_ENTRY_SIZE];
+ struct nandsim_softc *sc;
+ struct timeval currtime;
+ va_list ap;
+ int hdr_len, len, rest;
+
+ if (nandsim_log_output == NANDSIM_OUTPUT_NONE)
+ return;
+
+ if (chip == NULL)
+ return;
+
+ sc = chip->sc;
+ if (!sc->alq && nandsim_log_output == NANDSIM_OUTPUT_FILE)
+ return;
+
+ if (level <= nandsim_log_level) {
+ microtime(&currtime);
+ hdr_len = sprintf(hdr, "%08jd.%08li [chip:%d, ctrl:%d]: ",
+ (intmax_t)currtime.tv_sec, currtime.tv_usec,
+ chip->chip_num, chip->ctrl_num);
+
+ switch(nandsim_log_output) {
+ case NANDSIM_OUTPUT_CONSOLE:
+ printf("%s", hdr);
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+ break;
+ case NANDSIM_OUTPUT_RAM:
+ va_start(ap, fmt);
+ len = vsnprintf(tmp, NANDSIM_ENTRY_SIZE - 1, fmt, ap);
+ tmp[NANDSIM_ENTRY_SIZE - 1] = 0;
+ va_end(ap);
+
+ rest = log_size - sc->log_idx - 1;
+ if (rest >= hdr_len) {
+ bcopy(hdr, &sc->log_buff[sc->log_idx],
+ hdr_len);
+ sc->log_idx += hdr_len;
+ sc->log_buff[sc->log_idx] = 0;
+ } else {
+ bcopy(hdr, &sc->log_buff[sc->log_idx], rest);
+ bcopy(&hdr[rest], sc->log_buff,
+ hdr_len - rest);
+ sc->log_idx = hdr_len - rest;
+ sc->log_buff[sc->log_idx] = 0;
+ }
+
+ rest = log_size - sc->log_idx - 1;
+ if (rest >= len) {
+ bcopy(tmp, &sc->log_buff[sc->log_idx], len);
+ sc->log_idx += len;
+ sc->log_buff[sc->log_idx] = 0;
+ } else {
+ bcopy(tmp, &sc->log_buff[sc->log_idx], rest);
+ bcopy(&tmp[rest], sc->log_buff, len - rest);
+ sc->log_idx = len - rest;
+ sc->log_buff[sc->log_idx] = 0;
+ }
+
+ break;
+
+ case NANDSIM_OUTPUT_FILE:
+ va_start(ap, fmt);
+ len = vsnprintf(tmp, NANDSIM_ENTRY_SIZE - 1, fmt, ap);
+ tmp[NANDSIM_ENTRY_SIZE - 1] = 0;
+ va_end(ap);
+
+ rest = NANDSIM_ENTRY_SIZE - str_index;
+ if (rest >= hdr_len) {
+ strcat(string, hdr);
+ str_index += hdr_len;
+ } else {
+ strlcat(string, hdr, NANDSIM_ENTRY_SIZE + 1);
+ alq_write(sc->alq, (void *) string,
+ ALQ_NOWAIT);
+ strcpy(string, &hdr[rest]);
+ str_index = hdr_len - rest;
+ }
+ rest = NANDSIM_ENTRY_SIZE - str_index;
+ if (rest >= len) {
+ strcat(string, tmp);
+ str_index += len;
+ } else {
+ strlcat(string, tmp, NANDSIM_ENTRY_SIZE + 1);
+ alq_write(sc->alq, (void *) string,
+ ALQ_NOWAIT);
+ strcpy(string, &tmp[rest]);
+ str_index = len - rest;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
diff --git a/sys/dev/nand/nandsim_log.h b/sys/dev/nand/nandsim_log.h
new file mode 100644
index 000000000000..8cf108200df6
--- /dev/null
+++ b/sys/dev/nand/nandsim_log.h
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 _NANDSIM_LOG_H
+#define _NANDSIM_LOG_H
+
+#include <dev/nand/nandsim_chip.h>
+
+#define NANDSIM_ENTRY_SIZE 128
+#define NANDSIM_ENTRY_COUNT 1024
+#define NANDSIM_RAM_LOG_SIZE 16384
+#define TIME_STR_SIZE 40
+
+#define NANDSIM_LOG_ERR 1
+#define NANDSIM_LOG_SM 5
+#define NANDSIM_LOG_EV 10
+#define NANDSIM_LOG_DATA 15
+
+extern int nandsim_log_level;
+extern int nandsim_log_output;
+
+int nandsim_log_init(struct nandsim_softc *, char *);
+void nandsim_log_close(struct nandsim_softc *);
+void nandsim_log(struct nandsim_chip *, int, const char *, ...);
+
+#endif /* _NANDSIM_LOG_H */
+
diff --git a/sys/dev/nand/nandsim_swap.c b/sys/dev/nand/nandsim_swap.c
new file mode 100644
index 000000000000..cc4201dbed88
--- /dev/null
+++ b/sys/dev/nand/nandsim_swap.c
@@ -0,0 +1,389 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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/types.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/fcntl.h>
+#include <sys/proc.h>
+#include <sys/namei.h>
+#include <sys/lock.h>
+#include <sys/vnode.h>
+#include <sys/mount.h>
+
+#include <dev/nand/nandsim_chip.h>
+#include <dev/nand/nandsim_swap.h>
+
+static int init_block_state(struct chip_swap *);
+static void destroy_block_state(struct chip_swap *);
+
+static int create_buffers(struct chip_swap *);
+static void destroy_buffers(struct chip_swap *);
+
+static int swap_file_open(struct chip_swap *, const char *);
+static void swap_file_close(struct chip_swap *);
+static int swap_file_write(struct chip_swap *, struct block_state *);
+static int swap_file_read(struct chip_swap *, struct block_state *);
+
+#define CHIP_SWAP_CMODE 0600
+#define CHIP_SWAP_BLOCKSPACES 2
+
+static int
+init_block_state(struct chip_swap *swap)
+{
+ struct block_state *blk_state;
+ int i;
+
+ if (swap == NULL)
+ return (-1);
+
+ blk_state = malloc(swap->nof_blks * sizeof(struct block_state),
+ M_NANDSIM, M_WAITOK | M_ZERO);
+
+ for (i = 0; i < swap->nof_blks; i++)
+ blk_state[i].offset = 0xffffffff;
+
+ swap->blk_state = blk_state;
+
+ return (0);
+}
+
+static void
+destroy_block_state(struct chip_swap *swap)
+{
+
+ if (swap == NULL)
+ return;
+
+ if (swap->blk_state != NULL)
+ free(swap->blk_state, M_NANDSIM);
+}
+
+static int
+create_buffers(struct chip_swap *swap)
+{
+ struct block_space *block_space;
+ void *block;
+ int i;
+
+ for (i = 0; i < CHIP_SWAP_BLOCKSPACES; i++) {
+ block_space = malloc(sizeof(*block_space), M_NANDSIM, M_WAITOK);
+ block = malloc(swap->blk_size, M_NANDSIM, M_WAITOK);
+ block_space->blk_ptr = block;
+ SLIST_INSERT_HEAD(&swap->free_bs, block_space, free_link);
+ nand_debug(NDBG_SIM,"created blk_space %p[%p]\n", block_space,
+ block);
+ }
+
+ if (i == 0)
+ return (-1);
+
+ return (0);
+}
+
+static void
+destroy_buffers(struct chip_swap *swap)
+{
+ struct block_space *blk_space;
+
+ if (swap == NULL)
+ return;
+
+ blk_space = SLIST_FIRST(&swap->free_bs);
+ while (blk_space) {
+ SLIST_REMOVE_HEAD(&swap->free_bs, free_link);
+ nand_debug(NDBG_SIM,"destroyed blk_space %p[%p]\n",
+ blk_space, blk_space->blk_ptr);
+ free(blk_space->blk_ptr, M_NANDSIM);
+ free(blk_space, M_NANDSIM);
+ blk_space = SLIST_FIRST(&swap->free_bs);
+ }
+
+ blk_space = STAILQ_FIRST(&swap->used_bs);
+ while (blk_space) {
+ STAILQ_REMOVE_HEAD(&swap->used_bs, used_link);
+ nand_debug(NDBG_SIM,"destroyed blk_space %p[%p]\n",
+ blk_space, blk_space->blk_ptr);
+ free(blk_space->blk_ptr, M_NANDSIM);
+ free(blk_space, M_NANDSIM);
+ blk_space = STAILQ_FIRST(&swap->used_bs);
+ }
+}
+
+static int
+swap_file_open(struct chip_swap *swap, const char *swap_file)
+{
+ struct nameidata nd;
+ int vfslocked, flags, error;
+
+ NDINIT(&nd, LOOKUP, NOFOLLOW | MPSAFE, UIO_SYSSPACE, swap_file,
+ curthread);
+
+ flags = FWRITE | FREAD | O_NOFOLLOW | O_CREAT | O_TRUNC;
+
+ error = vn_open(&nd, &flags, CHIP_SWAP_CMODE, NULL);
+ if (error) {
+ nand_debug(NDBG_SIM,"Cannot create swap file %s", swap_file);
+ NDFREE(&nd, NDF_ONLY_PNBUF);
+ return (error);
+ }
+
+ swap->swap_cred = crhold(curthread->td_ucred);
+ vfslocked = NDHASGIANT(&nd);
+ NDFREE(&nd, NDF_ONLY_PNBUF);
+
+ /* We just unlock so we hold a reference */
+ VOP_UNLOCK(nd.ni_vp, 0);
+ VFS_UNLOCK_GIANT(vfslocked);
+
+ swap->swap_vp = nd.ni_vp;
+
+ return (0);
+}
+
+static void
+swap_file_close(struct chip_swap *swap)
+{
+
+ if (swap == NULL)
+ return;
+
+ if (swap->swap_vp == NULL)
+ return;
+
+ vn_close(swap->swap_vp, FWRITE, swap->swap_cred, curthread);
+ crfree(swap->swap_cred);
+}
+
+static int
+swap_file_write(struct chip_swap *swap, struct block_state *blk_state)
+{
+ struct block_space *blk_space;
+ struct thread *td;
+ struct mount *mp;
+ struct vnode *vp;
+ struct uio auio;
+ struct iovec aiov;
+ int vfslocked;
+
+ if (swap == NULL || blk_state == NULL)
+ return (-1);
+
+ blk_space = blk_state->blk_sp;
+ if (blk_state->offset == -1) {
+ blk_state->offset = swap->swap_offset;
+ swap->swap_offset += swap->blk_size;
+ }
+
+ nand_debug(NDBG_SIM,"saving %p[%p] at %x\n",
+ blk_space, blk_space->blk_ptr, blk_state->offset);
+
+ bzero(&aiov, sizeof(aiov));
+ bzero(&auio, sizeof(auio));
+
+ aiov.iov_base = blk_space->blk_ptr;
+ aiov.iov_len = swap->blk_size;
+ td = curthread;
+ vp = swap->swap_vp;
+
+ auio.uio_iov = &aiov;
+ auio.uio_offset = blk_state->offset;
+ auio.uio_segflg = UIO_SYSSPACE;
+ auio.uio_rw = UIO_WRITE;
+ auio.uio_iovcnt = 1;
+ auio.uio_resid = swap->blk_size;
+ auio.uio_td = td;
+
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+ vn_start_write(vp, &mp, V_WAIT);
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+ VOP_WRITE(vp, &auio, IO_UNIT, swap->swap_cred);
+ VOP_UNLOCK(vp, 0);
+ vn_finished_write(mp);
+ VFS_UNLOCK_GIANT(vfslocked);
+
+ return (0);
+}
+
+static int
+swap_file_read(struct chip_swap *swap, struct block_state *blk_state)
+{
+ struct block_space *blk_space;
+ struct thread *td;
+ struct vnode *vp;
+ struct uio auio;
+ struct iovec aiov;
+ int vfslocked;
+
+ if (swap == NULL || blk_state == NULL)
+ return (-1);
+
+ blk_space = blk_state->blk_sp;
+
+ nand_debug(NDBG_SIM,"restore %p[%p] at %x\n",
+ blk_space, blk_space->blk_ptr, blk_state->offset);
+
+ bzero(&aiov, sizeof(aiov));
+ bzero(&auio, sizeof(auio));
+
+ aiov.iov_base = blk_space->blk_ptr;
+ aiov.iov_len = swap->blk_size;
+ td = curthread;
+ vp = swap->swap_vp;
+
+ auio.uio_iov = &aiov;
+ auio.uio_offset = blk_state->offset;
+ auio.uio_segflg = UIO_SYSSPACE;
+ auio.uio_rw = UIO_READ;
+ auio.uio_iovcnt = 1;
+ auio.uio_resid = swap->blk_size;
+ auio.uio_td = td;
+
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+ VOP_READ(vp, &auio, 0, swap->swap_cred);
+ VOP_UNLOCK(vp, 0);
+ VFS_UNLOCK_GIANT(vfslocked);
+
+ return (0);
+}
+
+struct chip_swap *
+nandsim_swap_init(const char *swap_file, uint32_t nof_blks, uint32_t blk_size)
+{
+ struct chip_swap *swap;
+ int err = 0;
+
+ if ((swap_file == NULL) || (nof_blks == 0) || (blk_size == 0))
+ return (NULL);
+
+ swap = malloc(sizeof(*swap), M_NANDSIM, M_WAITOK | M_ZERO);
+
+ SLIST_INIT(&swap->free_bs);
+ STAILQ_INIT(&swap->used_bs);
+ swap->blk_size = blk_size;
+ swap->nof_blks = nof_blks;
+
+ err = init_block_state(swap);
+ if (err) {
+ nandsim_swap_destroy(swap);
+ return (NULL);
+ }
+
+ err = create_buffers(swap);
+ if (err) {
+ nandsim_swap_destroy(swap);
+ return (NULL);
+ }
+
+ err = swap_file_open(swap, swap_file);
+ if (err) {
+ nandsim_swap_destroy(swap);
+ return (NULL);
+ }
+
+ return (swap);
+}
+
+void
+nandsim_swap_destroy(struct chip_swap *swap)
+{
+
+ if (swap == NULL)
+ return;
+
+ destroy_block_state(swap);
+ destroy_buffers(swap);
+ swap_file_close(swap);
+ free(swap, M_NANDSIM);
+}
+
+struct block_space *
+get_bs(struct chip_swap *swap, uint32_t block, uint8_t writing)
+{
+ struct block_state *blk_state, *old_blk_state = NULL;
+ struct block_space *blk_space;
+
+ if (swap == NULL || (block >= swap->nof_blks))
+ return (NULL);
+
+ blk_state = &swap->blk_state[block];
+ nand_debug(NDBG_SIM,"blk_state %x\n", blk_state->status);
+
+ if (blk_state->status & BLOCK_ALLOCATED) {
+ blk_space = blk_state->blk_sp;
+ } else {
+ blk_space = SLIST_FIRST(&swap->free_bs);
+ if (blk_space) {
+ SLIST_REMOVE_HEAD(&swap->free_bs, free_link);
+ STAILQ_INSERT_TAIL(&swap->used_bs, blk_space,
+ used_link);
+ } else {
+ blk_space = STAILQ_FIRST(&swap->used_bs);
+ old_blk_state = blk_space->blk_state;
+ STAILQ_REMOVE_HEAD(&swap->used_bs, used_link);
+ STAILQ_INSERT_TAIL(&swap->used_bs, blk_space,
+ used_link);
+ if (old_blk_state->status & BLOCK_DIRTY) {
+ swap_file_write(swap, old_blk_state);
+ old_blk_state->status &= ~BLOCK_DIRTY;
+ old_blk_state->status |= BLOCK_SWAPPED;
+ }
+ }
+ }
+
+ if (blk_space == NULL)
+ return (NULL);
+
+ if (old_blk_state != NULL) {
+ old_blk_state->status &= ~BLOCK_ALLOCATED;
+ old_blk_state->blk_sp = NULL;
+ }
+
+ blk_state->blk_sp = blk_space;
+ blk_space->blk_state = blk_state;
+
+ if (!(blk_state->status & BLOCK_ALLOCATED)) {
+ if (blk_state->status & BLOCK_SWAPPED)
+ swap_file_read(swap, blk_state);
+ else
+ memset(blk_space->blk_ptr, 0xff, swap->blk_size);
+ blk_state->status |= BLOCK_ALLOCATED;
+ }
+
+ if (writing)
+ blk_state->status |= BLOCK_DIRTY;
+
+ nand_debug(NDBG_SIM,"get_bs returned %p[%p] state %x\n", blk_space,
+ blk_space->blk_ptr, blk_state->status);
+
+ return (blk_space);
+}
diff --git a/sys/dev/nand/nandsim_swap.h b/sys/dev/nand/nandsim_swap.h
new file mode 100644
index 000000000000..4fbae2a6827a
--- /dev/null
+++ b/sys/dev/nand/nandsim_swap.h
@@ -0,0 +1,64 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 _NANDSIM_SWAP_CHIP_H_
+#define _NANDSIM_SWAP_CHIP_H_
+
+struct block_space {
+ SLIST_ENTRY(block_space) free_link;
+ STAILQ_ENTRY(block_space) used_link;
+ struct block_state *blk_state;
+ uint8_t *blk_ptr;
+};
+
+#define BLOCK_ALLOCATED 0x1
+#define BLOCK_SWAPPED 0x2
+#define BLOCK_DIRTY 0x4
+
+struct block_state {
+ struct block_space *blk_sp;
+ uint32_t offset;
+ uint8_t status;
+};
+
+struct chip_swap {
+ struct block_state *blk_state;
+ SLIST_HEAD(,block_space) free_bs;
+ STAILQ_HEAD(,block_space) used_bs;
+ struct ucred *swap_cred;
+ struct vnode *swap_vp;
+ uint32_t swap_offset;
+ uint32_t blk_size;
+ uint32_t nof_blks;
+};
+
+struct chip_swap *nandsim_swap_init(const char *, uint32_t, uint32_t);
+void nandsim_swap_destroy(struct chip_swap *);
+struct block_space *get_bs(struct chip_swap *, uint32_t, uint8_t);
+
+#endif /* _NANDSIM_SWAP_CHIP_H_ */
diff --git a/sys/dev/nand/nfc_if.m b/sys/dev/nand/nfc_if.m
new file mode 100644
index 000000000000..a4e1099220ac
--- /dev/null
+++ b/sys/dev/nand/nfc_if.m
@@ -0,0 +1,165 @@
+#-
+# Copyright (C) 2009-2012 Semihalf
+# 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$
+
+# NAND controller interface description
+#
+
+#include <sys/bus.h>
+#include <dev/nand/nand.h>
+
+INTERFACE nfc;
+
+CODE {
+ static int nfc_default_method(device_t dev)
+ {
+ return (0);
+ }
+
+ static int nfc_softecc_get(device_t dev, void *buf, int pagesize,
+ void *ecc, int *needwrite)
+ {
+ *needwrite = 1;
+ return (nand_softecc_get(dev, buf, pagesize, ecc));
+ }
+
+ static int nfc_softecc_correct(device_t dev, void *buf, int pagesize,
+ void *readecc, void *calcecc)
+ {
+ return (nand_softecc_correct(dev, buf, pagesize, readecc,
+ calcecc));
+ }
+};
+
+# Send command to a NAND chip
+#
+# Return values:
+# 0: Success
+#
+METHOD int send_command {
+ device_t dev;
+ uint8_t command;
+};
+
+# Send address to a NAND chip
+#
+# Return values:
+# 0: Success
+#
+METHOD int send_address {
+ device_t dev;
+ uint8_t address;
+};
+
+# Read byte
+#
+# Return values:
+# byte read
+#
+METHOD uint8_t read_byte {
+ device_t dev;
+};
+
+# Write byte
+#
+METHOD void write_byte {
+ device_t dev;
+ uint8_t byte;
+};
+
+# Read word
+#
+# Return values:
+# word read
+#
+METHOD uint16_t read_word {
+ device_t dev;
+};
+
+# Write word
+#
+METHOD void write_word {
+ device_t dev;
+ uint16_t word;
+};
+
+# Read buf
+#
+METHOD void read_buf {
+ device_t dev;
+ void *buf;
+ uint32_t len;
+};
+
+# Write buf
+#
+METHOD void write_buf {
+ device_t dev;
+ void *buf;
+ uint32_t len;
+};
+
+# Select CS
+#
+METHOD int select_cs {
+ device_t dev;
+ uint8_t cs;
+};
+
+# Read ready/busy signal
+#
+METHOD int read_rnb {
+ device_t dev;
+};
+
+# Start command
+#
+# Return values:
+# 0: Success
+#
+METHOD int start_command {
+ device_t dev;
+} DEFAULT nfc_default_method;
+
+# Generate ECC or get it from H/W
+#
+METHOD int get_ecc {
+ device_t dev;
+ void *buf;
+ int pagesize;
+ void *ecc;
+ int *needwrite;
+} DEFAULT nfc_softecc_get;
+
+# Correct ECC
+#
+METHOD int correct_ecc {
+ device_t dev;
+ void *buf;
+ int pagesize;
+ void *readecc;
+ void *calcecc;
+} DEFAULT nfc_softecc_correct;
diff --git a/sys/dev/nand/nfc_mv.c b/sys/dev/nand/nfc_mv.c
new file mode 100644
index 000000000000..7f68e824cf90
--- /dev/null
+++ b/sys/dev/nand/nfc_mv.c
@@ -0,0 +1,236 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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.
+ */
+
+/* Integrated NAND controller driver */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/proc.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/malloc.h>
+#include <sys/rman.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/time.h>
+
+#include <machine/bus.h>
+#include <machine/fdt.h>
+#include <arm/mv/mvvar.h>
+#include <arm/mv/mvwin.h>
+
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+
+#include <dev/nand/nand.h>
+#include <dev/nand/nandbus.h>
+#include "nfc_if.h"
+
+#define MV_NAND_DATA (0x00)
+#define MV_NAND_COMMAND (0x01)
+#define MV_NAND_ADDRESS (0x02)
+
+struct mv_nand_softc {
+ struct nand_softc nand_dev;
+ bus_space_handle_t sc_handle;
+ bus_space_tag_t sc_tag;
+ struct resource *res;
+ int rid;
+};
+
+static int mv_nand_attach(device_t);
+static int mv_nand_probe(device_t);
+static int mv_nand_send_command(device_t, uint8_t);
+static int mv_nand_send_address(device_t, uint8_t);
+static uint8_t mv_nand_read_byte(device_t);
+static void mv_nand_read_buf(device_t, void *, uint32_t);
+static void mv_nand_write_buf(device_t, void *, uint32_t);
+static int mv_nand_select_cs(device_t, uint8_t);
+static int mv_nand_read_rnb(device_t);
+
+static device_method_t mv_nand_methods[] = {
+ DEVMETHOD(device_probe, mv_nand_probe),
+ DEVMETHOD(device_attach, mv_nand_attach),
+
+ DEVMETHOD(nfc_send_command, mv_nand_send_command),
+ DEVMETHOD(nfc_send_address, mv_nand_send_address),
+ DEVMETHOD(nfc_read_byte, mv_nand_read_byte),
+ DEVMETHOD(nfc_read_buf, mv_nand_read_buf),
+ DEVMETHOD(nfc_write_buf, mv_nand_write_buf),
+ DEVMETHOD(nfc_select_cs, mv_nand_select_cs),
+ DEVMETHOD(nfc_read_rnb, mv_nand_read_rnb),
+
+ { 0, 0 },
+};
+
+static driver_t mv_nand_driver = {
+ "nand",
+ mv_nand_methods,
+ sizeof(struct mv_nand_softc),
+};
+
+static devclass_t mv_nand_devclass;
+DRIVER_MODULE(mv_nand, localbus, mv_nand_driver, mv_nand_devclass, 0, 0);
+
+static int
+mv_nand_probe(device_t dev)
+{
+
+ if (!ofw_bus_is_compatible(dev, "mrvl,nfc"))
+ return (ENXIO);
+
+ device_set_desc(dev, "Marvell NAND controller");
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+mv_nand_attach(device_t dev)
+{
+ struct mv_nand_softc *sc;
+ int err;
+
+ sc = device_get_softc(dev);
+ sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->rid,
+ RF_ACTIVE);
+ if (sc->res == NULL) {
+ device_printf(dev, "could not allocate resources!\n");
+ return (ENXIO);
+ }
+
+ sc->sc_tag = rman_get_bustag(sc->res);
+ sc->sc_handle = rman_get_bushandle(sc->res);
+
+ nand_init(&sc->nand_dev, dev, NAND_ECC_SOFT, 0, 0, NULL, NULL);
+
+ err = nandbus_create(dev);
+
+ return (err);
+}
+
+static int
+mv_nand_send_command(device_t dev, uint8_t command)
+{
+ struct mv_nand_softc *sc;
+
+ nand_debug(NDBG_DRV,"mv_nand: send command %x", command);
+
+ sc = device_get_softc(dev);
+ bus_space_write_1(sc->sc_tag, sc->sc_handle, MV_NAND_COMMAND, command);
+ return (0);
+}
+
+static int
+mv_nand_send_address(device_t dev, uint8_t addr)
+{
+ struct mv_nand_softc *sc;
+
+ nand_debug(NDBG_DRV,"mv_nand: send address %x", addr);
+
+ sc = device_get_softc(dev);
+ bus_space_write_1(sc->sc_tag, sc->sc_handle, MV_NAND_ADDRESS, addr);
+ return (0);
+}
+
+static uint8_t
+mv_nand_read_byte(device_t dev)
+{
+ struct mv_nand_softc *sc;
+ uint8_t data;
+
+ sc = device_get_softc(dev);
+ data = bus_space_read_1(sc->sc_tag, sc->sc_handle, MV_NAND_DATA);
+
+ nand_debug(NDBG_DRV,"mv_nand: read %x", data);
+
+ return (data);
+}
+
+static void
+mv_nand_read_buf(device_t dev, void* buf, uint32_t len)
+{
+ struct mv_nand_softc *sc;
+ int i;
+ uint8_t *b = (uint8_t*)buf;
+
+ sc = device_get_softc(dev);
+
+ for (i = 0; i < len; i++) {
+ b[i] = bus_space_read_1(sc->sc_tag, sc->sc_handle,
+ MV_NAND_DATA);
+#ifdef NAND_DEBUG
+ if (!(i % 16))
+ printf("%s", i == 0 ? "mv_nand:\n" : "\n");
+ printf(" %x", b[i]);
+ if (i == len - 1)
+ printf("\n");
+#endif
+ }
+}
+
+static void
+mv_nand_write_buf(device_t dev, void* buf, uint32_t len)
+{
+ struct mv_nand_softc *sc;
+ int i;
+ uint8_t *b = (uint8_t*)buf;
+
+ sc = device_get_softc(dev);
+
+ for (i = 0; i < len; i++) {
+#ifdef NAND_DEBUG
+ if (!(i % 16))
+ printf("%s", i == 0 ? "mv_nand:\n" : "\n");
+ printf(" %x", b[i]);
+ if (i == len - 1)
+ printf("\n");
+#endif
+ bus_space_write_1(sc->sc_tag, sc->sc_handle, MV_NAND_DATA,
+ b[i]);
+ }
+}
+
+static int
+mv_nand_select_cs(device_t dev, uint8_t cs)
+{
+
+ if (cs > 0)
+ return (ENODEV);
+
+ return (0);
+}
+
+static int
+mv_nand_read_rnb(device_t dev)
+{
+
+ /* no-op */
+ return (0); /* ready */
+}
diff --git a/sys/dev/netmap/head.diff b/sys/dev/netmap/head.diff
deleted file mode 100644
index 51a8e34e74d1..000000000000
--- a/sys/dev/netmap/head.diff
+++ /dev/null
@@ -1,654 +0,0 @@
-Index: conf/NOTES
-===================================================================
---- conf/NOTES (revision 227552)
-+++ conf/NOTES (working copy)
-@@ -799,6 +799,12 @@
- # option. DHCP requires bpf.
- device bpf
-
-+# The `netmap' device implements memory-mapped access to network
-+# devices from userspace, enabling wire-speed packet capture and
-+# generation even at 10Gbit/s. Requires support in the device
-+# driver. Supported drivers are ixgbe, e1000, re.
-+device netmap
-+
- # The `disc' device implements a minimal network interface,
- # which throws away all packets sent and never receives any. It is
- # included for testing and benchmarking purposes.
-Index: conf/files
-===================================================================
---- conf/files (revision 227552)
-+++ conf/files (working copy)
-@@ -1507,6 +1507,7 @@
- dev/my/if_my.c optional my
- dev/ncv/ncr53c500.c optional ncv
- dev/ncv/ncr53c500_pccard.c optional ncv pccard
-+dev/netmap/netmap.c optional netmap
- dev/nge/if_nge.c optional nge
- dev/nxge/if_nxge.c optional nxge
- dev/nxge/xgehal/xgehal-device.c optional nxge
-Index: conf/options
-===================================================================
---- conf/options (revision 227552)
-+++ conf/options (working copy)
-@@ -689,6 +689,7 @@
-
- # various 'device presence' options.
- DEV_BPF opt_bpf.h
-+DEV_NETMAP opt_global.h
- DEV_MCA opt_mca.h
- DEV_CARP opt_carp.h
- DEV_SPLASH opt_splash.h
-Index: dev/e1000/if_igb.c
-===================================================================
---- dev/e1000/if_igb.c (revision 227552)
-+++ dev/e1000/if_igb.c (working copy)
-@@ -369,6 +369,9 @@
- &igb_rx_process_limit, 0,
- "Maximum number of received packets to process at a time, -1 means unlimited");
-
-+#ifdef DEV_NETMAP
-+#include <dev/netmap/if_igb_netmap.h>
-+#endif /* DEV_NETMAP */
- /*********************************************************************
- * Device identification routine
- *
-@@ -664,6 +667,9 @@
- adapter->led_dev = led_create(igb_led_func, adapter,
- device_get_nameunit(dev));
-
-+#ifdef DEV_NETMAP
-+ igb_netmap_attach(adapter);
-+#endif /* DEV_NETMAP */
- INIT_DEBUGOUT("igb_attach: end");
-
- return (0);
-@@ -742,6 +748,9 @@
-
- callout_drain(&adapter->timer);
-
-+#ifdef DEV_NETMAP
-+ netmap_detach(adapter->ifp);
-+#endif /* DEV_NETMAP */
- igb_free_pci_resources(adapter);
- bus_generic_detach(dev);
- if_free(ifp);
-@@ -3212,6 +3221,10 @@
- struct adapter *adapter = txr->adapter;
- struct igb_tx_buffer *txbuf;
- int i;
-+#ifdef DEV_NETMAP
-+ struct netmap_slot *slot = netmap_reset(NA(adapter->ifp),
-+ NR_TX, txr->me, 0);
-+#endif
-
- /* Clear the old descriptor contents */
- IGB_TX_LOCK(txr);
-@@ -3231,6 +3244,13 @@
- m_freem(txbuf->m_head);
- txbuf->m_head = NULL;
- }
-+#ifdef DEV_NETMAP
-+ if (slot) {
-+ netmap_load_map(txr->txtag, txbuf->map,
-+ NMB(slot), adapter->rx_mbuf_sz);
-+ slot++;
-+ }
-+#endif /* DEV_NETMAP */
- /* clear the watch index */
- txbuf->next_eop = -1;
- }
-@@ -3626,6 +3646,19 @@
-
- IGB_TX_LOCK_ASSERT(txr);
-
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ struct netmap_adapter *na = NA(ifp);
-+
-+ selwakeuppri(&na->tx_rings[txr->me].si, PI_NET);
-+ IGB_TX_UNLOCK(txr);
-+ IGB_CORE_LOCK(adapter);
-+ selwakeuppri(&na->tx_rings[na->num_queues + 1].si, PI_NET);
-+ IGB_CORE_UNLOCK(adapter);
-+ IGB_TX_LOCK(txr); // the caller is supposed to own the lock
-+ return FALSE;
-+ }
-+#endif /* DEV_NETMAP */
- if (txr->tx_avail == adapter->num_tx_desc) {
- txr->queue_status = IGB_QUEUE_IDLE;
- return FALSE;
-@@ -3949,6 +3982,10 @@
- bus_dma_segment_t pseg[1], hseg[1];
- struct lro_ctrl *lro = &rxr->lro;
- int rsize, nsegs, error = 0;
-+#ifdef DEV_NETMAP
-+ struct netmap_slot *slot = netmap_reset(NA(rxr->adapter->ifp),
-+ NR_RX, rxr->me, 0);
-+#endif
-
- adapter = rxr->adapter;
- dev = adapter->dev;
-@@ -3974,6 +4011,18 @@
- struct mbuf *mh, *mp;
-
- rxbuf = &rxr->rx_buffers[j];
-+#ifdef DEV_NETMAP
-+ if (slot) {
-+ netmap_load_map(rxr->ptag,
-+ rxbuf->pmap, NMB(slot),
-+ adapter->rx_mbuf_sz);
-+ /* Update descriptor */
-+ rxr->rx_base[j].read.pkt_addr =
-+ htole64(vtophys(NMB(slot)));
-+ slot++;
-+ continue;
-+ }
-+#endif /* DEV_NETMAP */
- if (rxr->hdr_split == FALSE)
- goto skip_head;
-
-@@ -4436,6 +4485,19 @@
- bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
- BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
-
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ struct netmap_adapter *na = NA(ifp);
-+
-+ selwakeuppri(&na->rx_rings[rxr->me].si, PI_NET);
-+ IGB_RX_UNLOCK(rxr);
-+ IGB_CORE_LOCK(adapter);
-+ selwakeuppri(&na->rx_rings[na->num_queues + 1].si, PI_NET);
-+ IGB_CORE_UNLOCK(adapter);
-+ return (0);
-+ }
-+#endif /* DEV_NETMAP */
-+
- /* Main clean loop */
- for (i = rxr->next_to_check; count != 0;) {
- struct mbuf *sendmp, *mh, *mp;
-Index: dev/e1000/if_lem.c
-===================================================================
---- dev/e1000/if_lem.c (revision 227552)
-+++ dev/e1000/if_lem.c (working copy)
-@@ -316,6 +316,10 @@
- /* Global used in WOL setup with multiport cards */
- static int global_quad_port_a = 0;
-
-+#ifdef DEV_NETMAP
-+#include <dev/netmap/if_lem_netmap.h>
-+#endif /* DEV_NETMAP */
-+
- /*********************************************************************
- * Device identification routine
- *
-@@ -646,6 +650,9 @@
- adapter->led_dev = led_create(lem_led_func, adapter,
- device_get_nameunit(dev));
-
-+#ifdef DEV_NETMAP
-+ lem_netmap_attach(adapter);
-+#endif /* DEV_NETMAP */
- INIT_DEBUGOUT("lem_attach: end");
-
- return (0);
-@@ -724,6 +731,9 @@
- callout_drain(&adapter->timer);
- callout_drain(&adapter->tx_fifo_timer);
-
-+#ifdef DEV_NETMAP
-+ netmap_detach(ifp);
-+#endif /* DEV_NETMAP */
- lem_free_pci_resources(adapter);
- bus_generic_detach(dev);
- if_free(ifp);
-@@ -2637,6 +2647,9 @@
- lem_setup_transmit_structures(struct adapter *adapter)
- {
- struct em_buffer *tx_buffer;
-+#ifdef DEV_NETMAP
-+ struct netmap_slot *slot = netmap_reset(NA(adapter->ifp), NR_TX, 0, 0);
-+#endif
-
- /* Clear the old ring contents */
- bzero(adapter->tx_desc_base,
-@@ -2650,6 +2663,15 @@
- bus_dmamap_unload(adapter->txtag, tx_buffer->map);
- m_freem(tx_buffer->m_head);
- tx_buffer->m_head = NULL;
-+#ifdef DEV_NETMAP
-+ if (slot) {
-+ /* reload the map for netmap mode */
-+ netmap_load_map(adapter->txtag,
-+ tx_buffer->map, NMB(slot),
-+ NA(adapter->ifp)->buff_size);
-+ slot++;
-+ }
-+#endif /* DEV_NETMAP */
- tx_buffer->next_eop = -1;
- }
-
-@@ -2951,6 +2973,12 @@
-
- EM_TX_LOCK_ASSERT(adapter);
-
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ selwakeuppri(&NA(ifp)->tx_rings[0].si, PI_NET);
-+ return;
-+ }
-+#endif /* DEV_NETMAP */
- if (adapter->num_tx_desc_avail == adapter->num_tx_desc)
- return;
-
-@@ -3181,6 +3209,9 @@
- {
- struct em_buffer *rx_buffer;
- int i, error;
-+#ifdef DEV_NETMAP
-+ struct netmap_slot *slot = netmap_reset(NA(adapter->ifp), NR_RX, 0, 0);
-+#endif
-
- /* Reset descriptor ring */
- bzero(adapter->rx_desc_base,
-@@ -3200,6 +3231,18 @@
-
- /* Allocate new ones. */
- for (i = 0; i < adapter->num_rx_desc; i++) {
-+#ifdef DEV_NETMAP
-+ if (slot) {
-+ netmap_load_map(adapter->rxtag,
-+ rx_buffer->map, NMB(slot),
-+ NA(adapter->ifp)->buff_size);
-+ /* Update descriptor */
-+ adapter->rx_desc_base[i].buffer_addr =
-+ htole64(vtophys(NMB(slot)));
-+ slot++;
-+ continue;
-+ }
-+#endif /* DEV_NETMAP */
- error = lem_get_buf(adapter, i);
- if (error)
- return (error);
-@@ -3407,6 +3450,14 @@
- bus_dmamap_sync(adapter->rxdma.dma_tag, adapter->rxdma.dma_map,
- BUS_DMASYNC_POSTREAD);
-
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ selwakeuppri(&NA(ifp)->rx_rings[0].si, PI_NET);
-+ EM_RX_UNLOCK(adapter);
-+ return (0);
-+ }
-+#endif /* DEV_NETMAP */
-+
- if (!((current_desc->status) & E1000_RXD_STAT_DD)) {
- if (done != NULL)
- *done = rx_sent;
-Index: dev/e1000/if_em.c
-===================================================================
---- dev/e1000/if_em.c (revision 227552)
-+++ dev/e1000/if_em.c (working copy)
-@@ -399,6 +399,10 @@
- /* Global used in WOL setup with multiport cards */
- static int global_quad_port_a = 0;
-
-+#ifdef DEV_NETMAP
-+#include <dev/netmap/if_em_netmap.h>
-+#endif /* DEV_NETMAP */
-+
- /*********************************************************************
- * Device identification routine
- *
-@@ -714,6 +718,9 @@
-
- adapter->led_dev = led_create(em_led_func, adapter,
- device_get_nameunit(dev));
-+#ifdef DEV_NETMAP
-+ em_netmap_attach(adapter);
-+#endif /* DEV_NETMAP */
-
- INIT_DEBUGOUT("em_attach: end");
-
-@@ -785,6 +792,10 @@
- ether_ifdetach(adapter->ifp);
- callout_drain(&adapter->timer);
-
-+#ifdef DEV_NETMAP
-+ netmap_detach(ifp);
-+#endif /* DEV_NETMAP */
-+
- em_free_pci_resources(adapter);
- bus_generic_detach(dev);
- if_free(ifp);
-@@ -3213,6 +3224,10 @@
- struct adapter *adapter = txr->adapter;
- struct em_buffer *txbuf;
- int i;
-+#ifdef DEV_NETMAP
-+ struct netmap_slot *slot = netmap_reset(NA(adapter->ifp),
-+ NR_TX, txr->me, 0);
-+#endif
-
- /* Clear the old descriptor contents */
- EM_TX_LOCK(txr);
-@@ -3232,6 +3247,16 @@
- m_freem(txbuf->m_head);
- txbuf->m_head = NULL;
- }
-+#ifdef DEV_NETMAP
-+ if (slot) {
-+ /* reload the map for netmap mode */
-+ netmap_load_map(txr->txtag,
-+ txbuf->map, NMB(slot),
-+ adapter->rx_mbuf_sz);
-+ slot++;
-+ }
-+#endif /* DEV_NETMAP */
-+
- /* clear the watch index */
- txbuf->next_eop = -1;
- }
-@@ -3682,6 +3707,12 @@
- struct ifnet *ifp = adapter->ifp;
-
- EM_TX_LOCK_ASSERT(txr);
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ selwakeuppri(&NA(ifp)->tx_rings[txr->me].si, PI_NET);
-+ return (FALSE);
-+ }
-+#endif /* DEV_NETMAP */
-
- /* No work, make sure watchdog is off */
- if (txr->tx_avail == adapter->num_tx_desc) {
-@@ -3978,6 +4009,33 @@
- if (++j == adapter->num_rx_desc)
- j = 0;
- }
-+#ifdef DEV_NETMAP
-+ {
-+ /* slot is NULL if we are not in netmap mode */
-+ struct netmap_slot *slot = netmap_reset(NA(adapter->ifp),
-+ NR_RX, rxr->me, rxr->next_to_check);
-+ /*
-+ * we need to restore all buffer addresses in the ring as they might
-+ * be in the wrong state if we are exiting from netmap mode.
-+ */
-+ for (j = 0; j != adapter->num_rx_desc; ++j) {
-+ void *addr;
-+ rxbuf = &rxr->rx_buffers[j];
-+ if (rxbuf->m_head == NULL && !slot)
-+ continue;
-+ addr = slot ? NMB(slot) : rxbuf->m_head->m_data;
-+ // XXX load or reload ?
-+ netmap_load_map(rxr->rxtag, rxbuf->map, addr, adapter->rx_mbuf_sz);
-+ /* Update descriptor */
-+ rxr->rx_base[j].buffer_addr = htole64(vtophys(addr));
-+ bus_dmamap_sync(rxr->rxtag, rxbuf->map, BUS_DMASYNC_PREREAD);
-+ if (slot)
-+ slot++;
-+ }
-+ /* Setup our descriptor indices */
-+ NA(adapter->ifp)->rx_rings[rxr->me].nr_hwcur = rxr->next_to_check;
-+ }
-+#endif /* DEV_NETMAP */
-
- fail:
- rxr->next_to_refresh = i;
-@@ -4247,6 +4305,14 @@
-
- EM_RX_LOCK(rxr);
-
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ selwakeuppri(&NA(ifp)->rx_rings[rxr->me].si, PI_NET);
-+ EM_RX_UNLOCK(rxr);
-+ return (0);
-+ }
-+#endif /* DEV_NETMAP */
-+
- for (i = rxr->next_to_check, processed = 0; count != 0;) {
-
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
-Index: dev/re/if_re.c
-===================================================================
---- dev/re/if_re.c (revision 227552)
-+++ dev/re/if_re.c (working copy)
-@@ -291,6 +291,10 @@
- static void re_setwol (struct rl_softc *);
- static void re_clrwol (struct rl_softc *);
-
-+#ifdef DEV_NETMAP
-+#include <dev/netmap/if_re_netmap.h>
-+#endif /* !DEV_NETMAP */
-+
- #ifdef RE_DIAG
- static int re_diag (struct rl_softc *);
- #endif
-@@ -1583,6 +1587,9 @@
- */
- ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
-
-+#ifdef DEV_NETMAP
-+ re_netmap_attach(sc);
-+#endif /* DEV_NETMAP */
- #ifdef RE_DIAG
- /*
- * Perform hardware diagnostic on the original RTL8169.
-@@ -1778,6 +1785,9 @@
- bus_dma_tag_destroy(sc->rl_ldata.rl_stag);
- }
-
-+#ifdef DEV_NETMAP
-+ netmap_detach(ifp);
-+#endif /* DEV_NETMAP */
- if (sc->rl_parent_tag)
- bus_dma_tag_destroy(sc->rl_parent_tag);
-
-@@ -1952,6 +1962,9 @@
- sc->rl_ldata.rl_tx_desc_cnt * sizeof(struct rl_desc));
- for (i = 0; i < sc->rl_ldata.rl_tx_desc_cnt; i++)
- sc->rl_ldata.rl_tx_desc[i].tx_m = NULL;
-+#ifdef DEV_NETMAP
-+ re_netmap_tx_init(sc);
-+#endif /* DEV_NETMAP */
- /* Set EOR. */
- desc = &sc->rl_ldata.rl_tx_list[sc->rl_ldata.rl_tx_desc_cnt - 1];
- desc->rl_cmdstat |= htole32(RL_TDESC_CMD_EOR);
-@@ -1979,6 +1992,9 @@
- if ((error = re_newbuf(sc, i)) != 0)
- return (error);
- }
-+#ifdef DEV_NETMAP
-+ re_netmap_rx_init(sc);
-+#endif /* DEV_NETMAP */
-
- /* Flush the RX descriptors */
-
-@@ -2035,6 +2051,12 @@
- RL_LOCK_ASSERT(sc);
-
- ifp = sc->rl_ifp;
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ selwakeuppri(&NA(ifp)->rx_rings->si, PI_NET);
-+ return 0;
-+ }
-+#endif /* DEV_NETMAP */
- if (ifp->if_mtu > RL_MTU && (sc->rl_flags & RL_FLAG_JUMBOV2) != 0)
- jumbo = 1;
- else
-@@ -2276,6 +2298,12 @@
- return;
-
- ifp = sc->rl_ifp;
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ selwakeuppri(&NA(ifp)->tx_rings[0].si, PI_NET);
-+ return;
-+ }
-+#endif /* DEV_NETMAP */
- /* Invalidate the TX descriptor list */
- bus_dmamap_sync(sc->rl_ldata.rl_tx_list_tag,
- sc->rl_ldata.rl_tx_list_map,
-@@ -2794,6 +2822,20 @@
-
- sc = ifp->if_softc;
-
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ struct netmap_kring *kring = &NA(ifp)->tx_rings[0];
-+ if (sc->rl_ldata.rl_tx_prodidx != kring->nr_hwcur) {
-+ /* kick the tx unit */
-+ CSR_WRITE_1(sc, sc->rl_txstart, RL_TXSTART_START);
-+#ifdef RE_TX_MODERATION
-+ CSR_WRITE_4(sc, RL_TIMERCNT, 1);
-+#endif
-+ sc->rl_watchdog_timer = 5;
-+ }
-+ return;
-+ }
-+#endif /* DEV_NETMAP */
- if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
- IFF_DRV_RUNNING || (sc->rl_flags & RL_FLAG_LINK) == 0)
- return;
-Index: dev/ixgbe/ixgbe.c
-===================================================================
---- dev/ixgbe/ixgbe.c (revision 227552)
-+++ dev/ixgbe/ixgbe.c (working copy)
-@@ -313,6 +313,10 @@
- static int fdir_pballoc = 1;
- #endif
-
-+#ifdef DEV_NETMAP
-+#include <dev/netmap/ixgbe_netmap.h>
-+#endif /* DEV_NETMAP */
-+
- /*********************************************************************
- * Device identification routine
- *
-@@ -578,6 +582,9 @@
-
- ixgbe_add_hw_stats(adapter);
-
-+#ifdef DEV_NETMAP
-+ ixgbe_netmap_attach(adapter);
-+#endif /* DEV_NETMAP */
- INIT_DEBUGOUT("ixgbe_attach: end");
- return (0);
- err_late:
-@@ -652,6 +659,9 @@
-
- ether_ifdetach(adapter->ifp);
- callout_drain(&adapter->timer);
-+#ifdef DEV_NETMAP
-+ netmap_detach(adapter->ifp);
-+#endif /* DEV_NETMAP */
- ixgbe_free_pci_resources(adapter);
- bus_generic_detach(dev);
- if_free(adapter->ifp);
-@@ -1719,6 +1729,7 @@
- if (++i == adapter->num_tx_desc)
- i = 0;
-
-+ // XXX should we sync each buffer ?
- txbuf->m_head = NULL;
- txbuf->eop_index = -1;
- }
-@@ -2813,6 +2824,10 @@
- struct adapter *adapter = txr->adapter;
- struct ixgbe_tx_buf *txbuf;
- int i;
-+#ifdef DEV_NETMAP
-+ struct netmap_slot *slot = netmap_reset(NA(adapter->ifp),
-+ NR_TX, txr->me, 0);
-+#endif
-
- /* Clear the old ring contents */
- IXGBE_TX_LOCK(txr);
-@@ -2832,6 +2847,13 @@
- m_freem(txbuf->m_head);
- txbuf->m_head = NULL;
- }
-+#ifdef DEV_NETMAP
-+ if (slot) {
-+ netmap_load_map(txr->txtag, txbuf->map,
-+ NMB(slot), adapter->rx_mbuf_sz);
-+ slot++;
-+ }
-+#endif /* DEV_NETMAP */
- /* Clear the EOP index */
- txbuf->eop_index = -1;
- }
-@@ -3310,6 +3332,20 @@
-
- mtx_assert(&txr->tx_mtx, MA_OWNED);
-
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ struct netmap_adapter *na = NA(ifp);
-+
-+ selwakeuppri(&na->tx_rings[txr->me].si, PI_NET);
-+ IXGBE_TX_UNLOCK(txr);
-+ IXGBE_CORE_LOCK(adapter);
-+ selwakeuppri(&na->tx_rings[na->num_queues + 1].si, PI_NET);
-+ IXGBE_CORE_UNLOCK(adapter);
-+ IXGBE_TX_LOCK(txr); // the caller is supposed to own the lock
-+ return (FALSE);
-+ }
-+#endif /* DEV_NETMAP */
-+
- if (txr->tx_avail == adapter->num_tx_desc) {
- txr->queue_status = IXGBE_QUEUE_IDLE;
- return FALSE;
-@@ -3698,6 +3734,10 @@
- bus_dma_segment_t pseg[1], hseg[1];
- struct lro_ctrl *lro = &rxr->lro;
- int rsize, nsegs, error = 0;
-+#ifdef DEV_NETMAP
-+ struct netmap_slot *slot = netmap_reset(NA(rxr->adapter->ifp),
-+ NR_RX, rxr->me, 0);
-+#endif /* DEV_NETMAP */
-
- adapter = rxr->adapter;
- ifp = adapter->ifp;
-@@ -3721,6 +3761,18 @@
- struct mbuf *mh, *mp;
-
- rxbuf = &rxr->rx_buffers[j];
-+#ifdef DEV_NETMAP
-+ if (slot) {
-+ netmap_load_map(rxr->ptag,
-+ rxbuf->pmap, NMB(slot),
-+ adapter->rx_mbuf_sz);
-+ /* Update descriptor */
-+ rxr->rx_base[j].read.pkt_addr =
-+ htole64(vtophys(NMB(slot)));
-+ slot++;
-+ continue;
-+ }
-+#endif /* DEV_NETMAP */
- /*
- ** Don't allocate mbufs if not
- ** doing header split, its wasteful
-@@ -4148,6 +4200,18 @@
-
- IXGBE_RX_LOCK(rxr);
-
-+#ifdef DEV_NETMAP
-+ if (ifp->if_capenable & IFCAP_NETMAP) {
-+ struct netmap_adapter *na = NA(ifp);
-+
-+ selwakeuppri(&na->rx_rings[rxr->me].si, PI_NET);
-+ IXGBE_RX_UNLOCK(rxr);
-+ IXGBE_CORE_LOCK(adapter);
-+ selwakeuppri(&na->rx_rings[na->num_queues + 1].si, PI_NET);
-+ IXGBE_CORE_UNLOCK(adapter);
-+ return (0);
-+ }
-+#endif /* DEV_NETMAP */
- for (i = rxr->next_to_check; count != 0;) {
- struct mbuf *sendmp, *mh, *mp;
- u32 rsc, ptype;
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index efb0b580c21e..650342101cda 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -4260,7 +4260,7 @@ pci_activate_resource(device_t dev, device_t child, int type, int rid,
if (device_get_parent(child) == dev) {
/* Device ROMs need their decoding explicitly enabled. */
dinfo = device_get_ivars(child);
- if (PCIR_IS_BIOS(&dinfo->cfg, rid))
+ if (type == SYS_RES_MEMORY && PCIR_IS_BIOS(&dinfo->cfg, rid))
pci_write_bar(child, pci_find_bar(child, rid),
rman_get_start(r) | PCIM_BIOS_ENABLE);
switch (type) {
@@ -4287,7 +4287,7 @@ pci_deactivate_resource(device_t dev, device_t child, int type,
/* Disable decoding for device ROMs. */
if (device_get_parent(child) == dev) {
dinfo = device_get_ivars(child);
- if (PCIR_IS_BIOS(&dinfo->cfg, rid))
+ if (type == SYS_RES_MEMORY && PCIR_IS_BIOS(&dinfo->cfg, rid))
pci_write_bar(child, pci_find_bar(child, rid),
rman_get_start(r));
}
diff --git a/sys/dev/pci/vga_pci.c b/sys/dev/pci/vga_pci.c
index fc9684828594..6d796c8cbe61 100644
--- a/sys/dev/pci/vga_pci.c
+++ b/sys/dev/pci/vga_pci.c
@@ -105,6 +105,7 @@ vga_pci_attach(device_t dev)
/* Always create a drm child for now to make it easier on drm. */
device_add_child(dev, "drm", -1);
+ device_add_child(dev, "drmn", -1);
bus_generic_attach(dev);
return (0);
}
diff --git a/sys/dev/powermac_nvram/powermac_nvram.c b/sys/dev/powermac_nvram/powermac_nvram.c
index 0c7949f78fad..56dc929c58f1 100644
--- a/sys/dev/powermac_nvram/powermac_nvram.c
+++ b/sys/dev/powermac_nvram/powermac_nvram.c
@@ -36,6 +36,7 @@
#include <dev/ofw/openfirm.h>
#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
#include <machine/bus.h>
#include <machine/md_var.h>
@@ -118,7 +119,7 @@ powermac_nvram_probe(device_t dev)
if (strcmp(type, "nvram") != 0)
return ENXIO;
if (strcmp(compatible, "amd-0137") != 0 &&
- strcmp(compatible, "nvram,flash") != 0)
+ !ofw_bus_is_compatible(dev, "nvram,flash"))
return ENXIO;
device_set_desc(dev, "Apple NVRAM");
diff --git a/sys/dev/puc/pucdata.c b/sys/dev/puc/pucdata.c
index 94d1c2c83353..a05fdc92e05b 100644
--- a/sys/dev/puc/pucdata.c
+++ b/sys/dev/puc/pucdata.c
@@ -901,6 +901,12 @@ const struct puc_cfg puc_pci_devices[] = {
.config_function = puc_config_syba
},
+ { 0x5372, 0x6873, 0xffff, 0,
+ "Sun 1040 PCI Quad Serial",
+ DEFAULT_RCLK,
+ PUC_PORT_4S, 0x10, 4, 0,
+ },
+
{ 0x6666, 0x0001, 0xffff, 0,
"Decision Computer Inc, PCCOM 4-port serial",
DEFAULT_RCLK,
diff --git a/sys/dev/sec/sec.c b/sys/dev/sec/sec.c
index 3b8c1036578a..1f684d05b40b 100644
--- a/sys/dev/sec/sec.c
+++ b/sys/dev/sec/sec.c
@@ -227,6 +227,10 @@ sec_probe(device_t dev)
device_set_desc(dev, "Freescale Security Engine 3.0");
sc->sc_version = 3;
break;
+ case SEC_31_ID:
+ device_set_desc(dev, "Freescale Security Engine 3.1");
+ sc->sc_version = 3;
+ break;
default:
device_printf(dev, "unknown SEC ID 0x%016llx!\n", id);
return (ENXIO);
diff --git a/sys/dev/sec/sec.h b/sys/dev/sec/sec.h
index 3a40d92f5f5b..fecfd86cb98d 100644
--- a/sys/dev/sec/sec.h
+++ b/sys/dev/sec/sec.h
@@ -46,6 +46,7 @@
/* SEC information */
#define SEC_20_ID 0x0000000000000040ULL
#define SEC_30_ID 0x0030030000000000ULL
+#define SEC_31_ID 0x0030030100000000ULL
#define SEC_CHANNELS 4
#define SEC_POINTERS 7
#define SEC_MAX_DMA_BLOCK_SIZE 0xFFFF
diff --git a/sys/dev/sym/sym_conf.h b/sys/dev/sym/sym_conf.h
index 768baa7b10a5..aa486d44a72c 100644
--- a/sys/dev/sym/sym_conf.h
+++ b/sys/dev/sym/sym_conf.h
@@ -83,6 +83,13 @@
#define SYM_CONF_MAX_TAG_ORDER (6)
/*
+ * DMA boundary
+ * We need to ensure 16 MB boundaries not to be crossed during DMA of
+ * each segment, due to some chips being flawed.
+ */
+#define SYM_CONF_DMA_BOUNDARY (1UL << 24)
+
+/*
* Max number of scatter/gather entries for en IO.
* Each entry costs 8 bytes in the internal CCB data structure.
* For now 65 should suffice given the BSD O/Ses capabilities.
diff --git a/sys/dev/sym/sym_hipd.c b/sys/dev/sym/sym_hipd.c
index d4e1acae5916..bfe1e699f403 100644
--- a/sys/dev/sym/sym_hipd.c
+++ b/sys/dev/sym/sym_hipd.c
@@ -70,7 +70,6 @@ __FBSDID("$FreeBSD$");
#include "opt_sym.h"
#include <dev/sym/sym_conf.h>
-
#include <sys/systm.h>
#include <sys/malloc.h>
#include <sys/endian.h>
@@ -128,7 +127,6 @@ typedef u_int32_t u32;
* requires memory barriers (and also IO barriers when they
* make sense) to be used.
*/
-
#if defined __i386__ || defined __amd64__
#define MEMORY_BARRIER() do { ; } while(0)
#elif defined __powerpc__
@@ -144,7 +142,6 @@ typedef u_int32_t u32;
/*
* A la VMS/CAM-3 queue management.
*/
-
typedef struct sym_quehead {
struct sym_quehead *flink; /* Forward pointer */
struct sym_quehead *blink; /* Backward pointer */
@@ -206,7 +203,6 @@ static __inline void sym_que_splice(struct sym_quehead *list,
#define sym_que_entry(ptr, type, member) \
((type *)((char *)(ptr)-(size_t)(&((type *)0)->member)))
-
#define sym_insque(new, pos) __sym_que_add(new, pos, (pos)->flink)
#define sym_remque(el) __sym_que_del((el)->blink, (el)->flink)
@@ -373,7 +369,6 @@ static void MDELAY(int ms) { while (ms--) UDELAY(1000); }
* pages of memory that will be useful if we ever need to deal
* with IO MMUs for PCI.
*/
-
#define MEMO_SHIFT 4 /* 16 bytes minimum memory chunk */
#define MEMO_PAGE_ORDER 0 /* 1 PAGE maximum */
#if 0
@@ -567,7 +562,6 @@ static m_pool_s mp0 = {0, 0, ___mp0_getp, ___mp0_freep};
static m_pool_s mp0 = {0, 0, ___mp0_getp};
#endif
-
/*
* Actual memory allocation routine for non-DMAed memory.
*/
@@ -768,7 +762,6 @@ static m_addr_t __vtobus(bus_dma_tag_t dev_dmat, void *m)
return vp ? vp->baddr + (((m_addr_t) m) - a) : 0;
}
-
/*
* Verbs for DMAable memory handling.
* The _uvptv_ macro avoids a nasty warning about pointer to volatile
@@ -783,7 +776,6 @@ static m_addr_t __vtobus(bus_dma_tag_t dev_dmat, void *m)
#define _vtobus(np, p) __vtobus(np->bus_dmat, _uvptv_(p))
#define vtobus(p) _vtobus(np, p)
-
/*
* Print a buffer in hexadecimal format.
*/
@@ -858,14 +850,12 @@ struct sym_nvram {
* Symbios chips (never seen, by the way).
* For now, this stuff does not deserve any comments. :)
*/
-
#define sym_offb(o) (o)
#define sym_offw(o) (o)
/*
* Some provision for support for BIG ENDIAN CPU.
*/
-
#define cpu_to_scr(dw) htole32(dw)
#define scr_to_cpu(dw) le32toh(dw)
@@ -874,8 +864,6 @@ struct sym_nvram {
* We use the `bus space' interface under FreeBSD-4 and
* later kernel versions.
*/
-
-
#if defined(SYM_CONF_IOMAPPED)
#define INB_OFF(o) bus_read_1(np->io_res, (o))
@@ -901,7 +889,6 @@ struct sym_nvram {
#define OUTRAM_OFF(o, a, l) \
bus_write_region_1(np->ram_res, (o), (a), (l))
-
/*
* Common definitions for both bus space and legacy IO methods.
*/
@@ -1333,7 +1320,6 @@ struct sym_pmc {
* For SYMBIOS chips that support LOAD/STORE this copy is
* not needed and thus not performed.
*/
-
struct sym_ccbh {
/*
* Start and restart SCRIPTS addresses (must be at 0).
@@ -1623,6 +1609,7 @@ struct sym_hcb {
u_int features; /* Chip features map */
u_char myaddr; /* SCSI id of the adapter */
u_char maxburst; /* log base 2 of dwords burst */
+ u_char maxsegcnt; /* Max DMA S/G segments */
u_char maxwide; /* Maximum transfer width */
u_char minsync; /* Min sync period factor (ST) */
u_char maxsync; /* Max sync period factor (ST) */
@@ -1748,7 +1735,6 @@ static __inline const char *sym_name(hcb_p np)
#define PADDR_A(label) SYM_GEN_PADDR_A(struct SYM_FWA_SCR, label)
#define PADDR_B(label) SYM_GEN_PADDR_B(struct SYM_FWB_SCR, label)
-
#ifdef SYM_CONF_GENERIC_SUPPORT
/*
* Allocate firmware #1 script area.
@@ -2452,7 +2438,6 @@ static __inline void sym_init_burst(hcb_p np, u_char bc)
}
}
-
/*
* Print out the list of targets that have some flag disabled by user.
*/
@@ -2847,7 +2832,6 @@ static int sym_prepare_setting(hcb_p np, struct sym_nvram *nvram)
* negotiation and the nego_status field of the CCB.
* Returns the size of the message in bytes.
*/
-
static int sym_prepare_nego(hcb_p np, ccb_p cp, int nego, u_char *msgptr)
{
tcb_p tp = &np->target[cp->target];
@@ -2965,7 +2949,6 @@ static void sym_put_start_queue(hcb_p np, ccb_p cp)
OUTB (nc_istat, SIGP|np->istat_sem);
}
-
/*
* Soft reset the chip.
*
@@ -3841,7 +3824,6 @@ static void sym_log_hard_error(hcb_p np, u_short sist, u_char dstat)
* ask me for any guarantee that it will never fail. :-)
* Use at your own decision and risk.
*/
-
static void sym_intr1 (hcb_p np)
{
u_char istat, istatc;
@@ -4003,7 +3985,6 @@ static void sym_poll(struct cam_sim *sim)
sym_intr1(cam_sim_softc(sim));
}
-
/*
* generic recovery from scsi interrupt
*
@@ -5291,7 +5272,6 @@ static void sym_sir_task_recovery(hcb_p np, int num)
* offset (basically from the MDP message) and returns
* the corresponding values of dp_sg and dp_ofs.
*/
-
static int sym_evaluate_dp(hcb_p np, ccb_p cp, u32 scr, int *ofs)
{
u32 dp_scr;
@@ -5409,7 +5389,6 @@ out_err:
* Btw, we assume in that situation that such a message
* is equivalent to a MODIFY DATA POINTER (offset=-1).
*/
-
static void sym_modify_dp(hcb_p np, tcb_p tp, ccb_p cp, int ofs)
{
int dp_ofs = ofs;
@@ -5493,7 +5472,6 @@ out_reject:
OUTL_DSP (SCRIPTB_BA (np, msg_bad));
}
-
/*
* chip calculation of the data residual.
*
@@ -5508,7 +5486,6 @@ out_reject:
* any software that considers this data residual as
* a relevant information. :)
*/
-
static int sym_compute_residual(hcb_p np, ccb_p cp)
{
int dp_sg, dp_sgmin, resid = 0;
@@ -5574,7 +5551,6 @@ static int sym_compute_residual(hcb_p np, ccb_p cp)
/*
* Print out the content of a SCSI message.
*/
-
static int sym_show_msg (u_char * msg)
{
u_char i;
@@ -7770,7 +7746,6 @@ sym_setup_data_pointers(hcb_p np, ccb_p cp, int dir)
cp->startp = cp->phys.head.savep;
}
-
/*
* Call back routine for the DMA map service.
* If bounce buffers are used (why ?), we may sleep and then
@@ -7985,13 +7960,9 @@ sym_fast_scatter_sg_physical(hcb_p np, ccb_p cp,
return 0;
}
-
/*
* Scatter a SG list with physical addresses into bus addressable chunks.
- * We need to ensure 16MB boundaries not to be crossed during DMA of
- * each segment, due to some chips being flawed.
*/
-#define BOUND_MASK ((1UL<<24)-1)
static int
sym_scatter_sg_physical(hcb_p np, ccb_p cp, bus_dma_segment_t *psegs, int nsegs)
{
@@ -8007,7 +7978,7 @@ sym_scatter_sg_physical(hcb_p np, ccb_p cp, bus_dma_segment_t *psegs, int nsegs)
pe = ps + psegs[t].ds_len;
while (s >= 0) {
- pn = (pe - 1) & ~BOUND_MASK;
+ pn = (pe - 1) & ~(SYM_CONF_DMA_BOUNDARY - 1);
if (pn <= ps)
pn = ps;
k = pe - pn;
@@ -8032,17 +8003,21 @@ sym_scatter_sg_physical(hcb_p np, ccb_p cp, bus_dma_segment_t *psegs, int nsegs)
return t >= 0 ? -1 : 0;
}
-#undef BOUND_MASK
/*
* SIM action for non performance critical stuff.
*/
static void sym_action2(struct cam_sim *sim, union ccb *ccb)
{
+ union ccb *abort_ccb;
+ struct ccb_hdr *ccb_h;
+ struct ccb_pathinq *cpi;
+ struct ccb_trans_settings *cts;
+ struct sym_trans *tip;
hcb_p np;
tcb_p tp;
lcb_p lp;
- struct ccb_hdr *ccb_h;
+ u_char dflags;
/*
* Retrieve our controller data structure.
@@ -8055,9 +8030,6 @@ static void sym_action2(struct cam_sim *sim, union ccb *ccb)
switch (ccb_h->func_code) {
case XPT_SET_TRAN_SETTINGS:
- {
- struct ccb_trans_settings *cts;
-
cts = &ccb->cts;
tp = &np->target[ccb_h->target_id];
@@ -8079,13 +8051,7 @@ static void sym_action2(struct cam_sim *sim, union ccb *ccb)
sym_xpt_done2(np, ccb, CAM_REQ_CMP);
break;
- }
case XPT_GET_TRAN_SETTINGS:
- {
- struct ccb_trans_settings *cts;
- struct sym_trans *tip;
- u_char dflags;
-
cts = &ccb->cts;
tp = &np->target[ccb_h->target_id];
lp = sym_lp(np, tp, ccb_h->target_lun);
@@ -8129,16 +8095,12 @@ static void sym_action2(struct cam_sim *sim, union ccb *ccb)
#undef cts__scsi
sym_xpt_done2(np, ccb, CAM_REQ_CMP);
break;
- }
case XPT_CALC_GEOMETRY:
- {
cam_calc_geometry(&ccb->ccg, /*extended*/1);
sym_xpt_done2(np, ccb, CAM_REQ_CMP);
break;
- }
case XPT_PATH_INQ:
- {
- struct ccb_pathinq *cpi = &ccb->cpi;
+ cpi = &ccb->cpi;
cpi->version_num = 1;
cpi->hba_inquiry = PI_MDP_ABLE|PI_SDTR_ABLE|PI_TAG_ABLE;
if ((np->features & FE_WIDE) != 0)
@@ -8173,12 +8135,11 @@ static void sym_action2(struct cam_sim *sim, union ccb *ccb)
cpi->xport_specific.spi.ppr_options =
SID_SPI_CLOCK_DT_ST;
}
+ cpi->maxio = np->maxsegcnt * SYM_CONF_DMA_BOUNDARY;
sym_xpt_done2(np, ccb, CAM_REQ_CMP);
break;
- }
case XPT_ABORT:
- {
- union ccb *abort_ccb = ccb->cab.abort_ccb;
+ abort_ccb = ccb->cab.abort_ccb;
switch(abort_ccb->ccb_h.func_code) {
case XPT_SCSI_IO:
if (sym_abort_scsiio(np, abort_ccb, 0) == 0) {
@@ -8190,14 +8151,10 @@ static void sym_action2(struct cam_sim *sim, union ccb *ccb)
break;
}
break;
- }
case XPT_RESET_DEV:
- {
sym_reset_dev(np, ccb);
break;
- }
case XPT_RESET_BUS:
- {
sym_reset_scsi_bus(np, 0);
if (sym_verbose) {
xpt_print_path(np->path);
@@ -8206,7 +8163,6 @@ static void sym_action2(struct cam_sim *sim, union ccb *ccb)
sym_init (np, 1);
sym_xpt_done2(np, ccb, CAM_REQ_CMP);
break;
- }
case XPT_ACCEPT_TARGET_IO:
case XPT_CONT_TARGET_IO:
case XPT_EN_LUN:
@@ -8355,14 +8311,12 @@ sym_update_dflags(hcb_p np, u_char *flags, struct ccb_trans_settings *cts)
#undef cts__scsi
}
-
/*============= DRIVER INITIALISATION ==================*/
-
static device_method_t sym_pci_methods[] = {
DEVMETHOD(device_probe, sym_pci_probe),
DEVMETHOD(device_attach, sym_pci_attach),
- { 0, 0 }
+ DEVMETHOD_END
};
static driver_t sym_pci_driver = {
@@ -8373,11 +8327,10 @@ static driver_t sym_pci_driver = {
static devclass_t sym_devclass;
-DRIVER_MODULE(sym, pci, sym_pci_driver, sym_devclass, 0, 0);
+DRIVER_MODULE(sym, pci, sym_pci_driver, sym_devclass, NULL, NULL);
MODULE_DEPEND(sym, cam, 1, 1, 1);
MODULE_DEPEND(sym, pci, 1, 1, 1);
-
static const struct sym_pci_chip sym_pci_dev_table[] = {
{PCI_ID_SYM53C810, 0x0f, "810", 4, 8, 4, 64,
FE_ERL}
@@ -8586,15 +8539,16 @@ sym_pci_attach(device_t dev)
/*
* Allocate a tag for the DMA of user data.
*/
- if (bus_dma_tag_create(np->bus_dmat, 1, (1<<24),
- BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR,
- NULL, NULL,
- BUS_SPACE_MAXSIZE, SYM_CONF_MAX_SG,
- (1<<24), 0, busdma_lock_mutex, &np->mtx,
- &np->data_dmat)) {
+ np->maxsegcnt = MIN(SYM_CONF_MAX_SG,
+ (MAXPHYS / SYM_CONF_DMA_BOUNDARY) + 1);
+ if (bus_dma_tag_create(np->bus_dmat, 1, SYM_CONF_DMA_BOUNDARY,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
+ BUS_SPACE_MAXSIZE, np->maxsegcnt, SYM_CONF_DMA_BOUNDARY,
+ BUS_DMA_ALLOCNOW, busdma_lock_mutex, &np->mtx, &np->data_dmat)) {
device_printf(dev, "failed to create DMA tag.\n");
goto attach_failed;
}
+
/*
* Read and apply some fix-ups to the PCI COMMAND
* register. We want the chip to be enabled for:
@@ -8603,9 +8557,8 @@ sym_pci_attach(device_t dev)
* - Write And Invalidate.
*/
command = pci_read_config(dev, PCIR_COMMAND, 2);
- command |= PCIM_CMD_BUSMASTEREN;
- command |= PCIM_CMD_PERRESPEN;
- command |= /* PCIM_CMD_MWIEN */ 0x0010;
+ command |= PCIM_CMD_BUSMASTEREN | PCIM_CMD_PERRESPEN |
+ PCIM_CMD_MWRICEN;
pci_write_config(dev, PCIR_COMMAND, command, 2);
/*
@@ -9277,7 +9230,6 @@ static void sym_display_Tekram_nvram(hcb_p np, Tekram_nvram *nvram)
#endif /* SYM_CONF_DEBUG_NVRAM */
#endif /* SYM_CONF_NVRAM_SUPPORT */
-
/*
* Try reading Symbios or Tekram NVRAM
*/
@@ -9315,7 +9267,6 @@ static int sym_read_nvram(hcb_p np, struct sym_nvram *nvp)
return nvp->type;
}
-
#ifdef SYM_CONF_NVRAM_SUPPORT
/*
* 24C16 EEPROM reading.
diff --git a/sys/dev/usb/controller/ehci_fsl.c b/sys/dev/usb/controller/ehci_fsl.c
new file mode 100644
index 000000000000..6b485b59baa2
--- /dev/null
+++ b/sys/dev/usb/controller/ehci_fsl.c
@@ -0,0 +1,423 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf
+ * 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 "opt_bus.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/bus.h>
+#include <sys/queue.h>
+#include <sys/lock.h>
+#include <sys/lockmgr.h>
+#include <sys/condvar.h>
+#include <sys/rman.h>
+
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+
+#include <dev/usb/usb.h>
+#include <dev/usb/usbdi.h>
+#include <dev/usb/usb_core.h>
+#include <dev/usb/usb_busdma.h>
+#include <dev/usb/usb_process.h>
+#include <dev/usb/usb_util.h>
+#include <dev/usb/usb_controller.h>
+#include <dev/usb/usb_bus.h>
+#include <dev/usb/controller/ehci.h>
+#include <dev/usb/controller/ehcireg.h>
+
+#include <machine/bus.h>
+#include <machine/clock.h>
+#include <machine/resource.h>
+
+#include <powerpc/include/tlb.h>
+
+#include "opt_platform.h"
+
+/*
+ * Register the driver
+ */
+/* Forward declarations */
+static int fsl_ehci_attach(device_t self);
+static int fsl_ehci_detach(device_t self);
+static int fsl_ehci_probe(device_t self);
+
+static device_method_t ehci_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, fsl_ehci_probe),
+ DEVMETHOD(device_attach, fsl_ehci_attach),
+ DEVMETHOD(device_detach, fsl_ehci_detach),
+ DEVMETHOD(device_suspend, bus_generic_suspend),
+ DEVMETHOD(device_resume, bus_generic_resume),
+ DEVMETHOD(device_shutdown, bus_generic_shutdown),
+
+ /* Bus interface */
+ DEVMETHOD(bus_print_child, bus_generic_print_child),
+
+ { 0, 0 }
+};
+
+/* kobj_class definition */
+static driver_t ehci_driver = {
+ "ehci",
+ ehci_methods,
+ sizeof(struct ehci_softc)
+};
+
+static devclass_t ehci_devclass;
+
+DRIVER_MODULE(ehci, simplebus, ehci_driver, ehci_devclass, 0, 0);
+MODULE_DEPEND(ehci, usb, 1, 1, 1);
+
+/*
+ * Private defines
+ */
+#define FSL_EHCI_REG_OFF 0x100
+#define FSL_EHCI_REG_SIZE 0x300
+
+/*
+ * Internal interface registers' offsets.
+ * Offsets from 0x000 ehci dev space, big-endian access.
+ */
+enum internal_reg {
+ SNOOP1 = 0x400,
+ SNOOP2 = 0x404,
+ AGE_CNT_THRESH = 0x408,
+ SI_CTRL = 0x410,
+ CONTROL = 0x500
+};
+
+/* CONTROL register bit flags */
+enum control_flags {
+ USB_EN = 0x00000004,
+ UTMI_PHY_EN = 0x00000200,
+ ULPI_INT_EN = 0x00000001
+};
+
+/* SI_CTRL register bit flags */
+enum si_ctrl_flags {
+ FETCH_32 = 1,
+ FETCH_64 = 0
+};
+
+#define SNOOP_RANGE_2GB 0x1E
+
+/*
+ * Operational registers' offsets.
+ * Offsets from USBCMD register, little-endian access.
+ */
+enum special_op_reg {
+ USBMODE = 0x0A8,
+ PORTSC = 0x084,
+ ULPI_VIEWPORT = 0x70
+};
+
+/* USBMODE register bit flags */
+enum usbmode_flags {
+ HOST_MODE = 0x3,
+ DEVICE_MODE = 0x2
+};
+
+#define PORT_POWER_MASK 0x00001000
+
+/*
+ * Private methods
+ */
+
+static void
+set_to_host_mode(ehci_softc_t *sc)
+{
+ int tmp;
+
+ tmp = bus_space_read_4(sc->sc_io_tag, sc->sc_io_hdl, USBMODE);
+ bus_space_write_4(sc->sc_io_tag, sc->sc_io_hdl, USBMODE, tmp | HOST_MODE);
+}
+
+static void
+enable_usb(device_t dev, bus_space_tag_t iot, bus_space_handle_t ioh)
+{
+ int tmp;
+ phandle_t node;
+ char *phy_type;
+
+ phy_type = NULL;
+ tmp = bus_space_read_4(iot, ioh, CONTROL) | USB_EN;
+
+ node = ofw_bus_get_node(dev);
+ if ((node != 0) &&
+ (OF_getprop_alloc(node, "phy_type", 1, (void **)&phy_type) > 0)) {
+ if (strncasecmp(phy_type, "utmi", strlen("utmi")) == 0)
+ tmp |= UTMI_PHY_EN;
+ free(phy_type, M_OFWPROP);
+ }
+ bus_space_write_4(iot, ioh, CONTROL, tmp);
+}
+
+static void
+set_32b_prefetch(bus_space_tag_t iot, bus_space_handle_t ioh)
+{
+
+ bus_space_write_4(iot, ioh, SI_CTRL, FETCH_32);
+}
+
+static void
+set_snooping(bus_space_tag_t iot, bus_space_handle_t ioh)
+{
+
+ bus_space_write_4(iot, ioh, SNOOP1, SNOOP_RANGE_2GB);
+ bus_space_write_4(iot, ioh, SNOOP2, 0x80000000 | SNOOP_RANGE_2GB);
+}
+
+static void
+clear_port_power(ehci_softc_t *sc)
+{
+ int tmp;
+
+ tmp = bus_space_read_4(sc->sc_io_tag, sc->sc_io_hdl, PORTSC);
+ bus_space_write_4(sc->sc_io_tag, sc->sc_io_hdl, PORTSC, tmp & ~PORT_POWER_MASK);
+}
+
+/*
+ * Public methods
+ */
+static int
+fsl_ehci_probe(device_t dev)
+{
+
+ if (((ofw_bus_is_compatible(dev, "fsl-usb2-dr")) == 0) &&
+ ((ofw_bus_is_compatible(dev, "fsl-usb2-mph")) == 0))
+ return (ENXIO);
+
+ device_set_desc(dev, "Freescale integrated EHCI controller");
+
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+fsl_ehci_attach(device_t self)
+{
+ ehci_softc_t *sc;
+ int rid;
+ int err;
+ bus_space_handle_t ioh;
+ bus_space_tag_t iot;
+
+ sc = device_get_softc(self);
+ rid = 0;
+
+ sc->sc_bus.parent = self;
+ sc->sc_bus.devices = sc->sc_devices;
+ sc->sc_bus.devices_max = EHCI_MAX_DEVICES;
+
+ if (usb_bus_mem_alloc_all(&sc->sc_bus,
+ USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc))
+ return (ENOMEM);
+
+ /* Allocate io resource for EHCI */
+ sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY, &rid,
+ RF_ACTIVE);
+ if (sc->sc_io_res == NULL) {
+ err = fsl_ehci_detach(self);
+ if (err) {
+ device_printf(self,
+ "Detach of the driver failed with error %d\n",
+ err);
+ }
+ return (ENXIO);
+ }
+ iot = rman_get_bustag(sc->sc_io_res);
+
+ /*
+ * Set handle to USB related registers subregion used by generic
+ * EHCI driver
+ */
+ ioh = rman_get_bushandle(sc->sc_io_res);
+
+ err = bus_space_subregion(iot, ioh, FSL_EHCI_REG_OFF, FSL_EHCI_REG_SIZE,
+ &sc->sc_io_hdl);
+ if (err != 0) {
+ err = fsl_ehci_detach(self);
+ if (err) {
+ device_printf(self,
+ "Detach of the driver failed with error %d\n",
+ err);
+ }
+ return (ENXIO);
+ }
+
+ /* Set little-endian tag for use by the generic EHCI driver */
+ sc->sc_io_tag = &bs_le_tag;
+
+ /* Allocate irq */
+ sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,
+ RF_ACTIVE);
+ if (sc->sc_irq_res == NULL) {
+ err = fsl_ehci_detach(self);
+ if (err) {
+ device_printf(self,
+ "Detach of the driver failed with error %d\n",
+ err);
+ }
+ return (ENXIO);
+ }
+
+ /* Setup interrupt handler */
+ err = bus_setup_intr(self, sc->sc_irq_res, INTR_TYPE_BIO,
+ NULL, (driver_intr_t *)ehci_interrupt, sc, &sc->sc_intr_hdl);
+ if (err) {
+ device_printf(self, "Could not setup irq, %d\n", err);
+ sc->sc_intr_hdl = NULL;
+ err = fsl_ehci_detach(self);
+ if (err) {
+ device_printf(self,
+ "Detach of the driver failed with error %d\n",
+ err);
+ }
+ return (ENXIO);
+ }
+
+ /* Add USB device */
+ sc->sc_bus.bdev = device_add_child(self, "usbus", -1);
+ if (!sc->sc_bus.bdev) {
+ device_printf(self, "Could not add USB device\n");
+ err = fsl_ehci_detach(self);
+ if (err) {
+ device_printf(self,
+ "Detach of the driver failed with error %d\n",
+ err);
+ }
+ return (ENOMEM);
+ }
+ device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);
+
+ sc->sc_id_vendor = 0x1234;
+ strlcpy(sc->sc_vendor, "Freescale", sizeof(sc->sc_vendor));
+
+ /* Enable USB */
+ err = ehci_reset(sc);
+ if (err) {
+ device_printf(self, "Could not reset the controller\n");
+ err = fsl_ehci_detach(self);
+ if (err) {
+ device_printf(self,
+ "Detach of the driver failed with error %d\n",
+ err);
+ }
+ return (ENXIO);
+ }
+
+ enable_usb(self, iot, ioh);
+ set_snooping(iot, ioh);
+ set_to_host_mode(sc);
+ set_32b_prefetch(iot, ioh);
+
+ /*
+ * If usb subsystem is enabled in U-Boot, port power has to be turned
+ * off to allow proper discovery of devices during boot up.
+ */
+ clear_port_power(sc);
+
+ /* Set flags */
+ sc->sc_flags |= EHCI_SCFLG_DONTRESET | EHCI_SCFLG_NORESTERM;
+
+ err = ehci_init(sc);
+ if (!err) {
+ sc->sc_flags |= EHCI_SCFLG_DONEINIT;
+ err = device_probe_and_attach(sc->sc_bus.bdev);
+ }
+
+ if (err) {
+ device_printf(self, "USB init failed err=%d\n", err);
+ err = fsl_ehci_detach(self);
+ if (err) {
+ device_printf(self,
+ "Detach of the driver failed with error %d\n",
+ err);
+ }
+ return (EIO);
+ }
+
+ return (0);
+}
+
+static int
+fsl_ehci_detach(device_t self)
+{
+
+ int err;
+ ehci_softc_t *sc;
+
+ sc = device_get_softc(self);
+ /*
+ * only call ehci_detach() after ehci_init()
+ */
+ if (sc->sc_flags & EHCI_SCFLG_DONEINIT) {
+ ehci_detach(sc);
+ sc->sc_flags &= ~EHCI_SCFLG_DONEINIT;
+ }
+
+ /* Disable interrupts that might have been switched on in ehci_init */
+ if (sc->sc_io_tag && sc->sc_io_hdl)
+ bus_space_write_4(sc->sc_io_tag, sc->sc_io_hdl, EHCI_USBINTR, 0);
+
+ if (sc->sc_irq_res && sc->sc_intr_hdl) {
+ err = bus_teardown_intr(self, sc->sc_irq_res, sc->sc_intr_hdl);
+ if (err) {
+ device_printf(self, "Could not tear down irq, %d\n",
+ err);
+ return (err);
+ }
+ sc->sc_intr_hdl = NULL;
+ }
+
+ if (sc->sc_bus.bdev) {
+ device_delete_child(self, sc->sc_bus.bdev);
+ sc->sc_bus.bdev = NULL;
+ }
+
+ /* During module unload there are lots of children leftover */
+ device_delete_children(self);
+
+ if (sc->sc_irq_res) {
+ bus_release_resource(self, SYS_RES_IRQ, 0, sc->sc_irq_res);
+ sc->sc_irq_res = NULL;
+ }
+
+ if (sc->sc_io_res) {
+ bus_release_resource(self, SYS_RES_MEMORY, 0, sc->sc_io_res);
+ sc->sc_io_res = NULL;
+ sc->sc_io_tag = 0;
+ sc->sc_io_hdl = 0;
+ }
+
+ return (0);
+}
+
diff --git a/sys/dev/usb/controller/ehci_pci.c b/sys/dev/usb/controller/ehci_pci.c
index e293ec8d2c2a..7c27873523db 100644
--- a/sys/dev/usb/controller/ehci_pci.c
+++ b/sys/dev/usb/controller/ehci_pci.c
@@ -243,6 +243,7 @@ ehci_pci_via_quirk(device_t self)
val = pci_read_config(self, 0x4b, 1);
if (val & 0x20)
return;
+ val |= 0x20;
pci_write_config(self, 0x4b, val, 1);
device_printf(self, "VIA-quirk applied\n");
}
diff --git a/sys/dev/usb/input/uhid.c b/sys/dev/usb/input/uhid.c
index a1050c67225e..bd5af206f0ac 100644
--- a/sys/dev/usb/input/uhid.c
+++ b/sys/dev/usb/input/uhid.c
@@ -87,6 +87,7 @@ SYSCTL_INT(_hw_usb_uhid, OID_AUTO, debug, CTLFLAG_RW,
#define UHID_FRAME_NUM 50 /* bytes, frame number */
enum {
+ UHID_INTR_DT_WR,
UHID_INTR_DT_RD,
UHID_CTRL_DT_WR,
UHID_CTRL_DT_RD,
@@ -128,7 +129,8 @@ static device_probe_t uhid_probe;
static device_attach_t uhid_attach;
static device_detach_t uhid_detach;
-static usb_callback_t uhid_intr_callback;
+static usb_callback_t uhid_intr_write_callback;
+static usb_callback_t uhid_intr_read_callback;
static usb_callback_t uhid_write_callback;
static usb_callback_t uhid_read_callback;
@@ -152,7 +154,36 @@ static struct usb_fifo_methods uhid_fifo_methods = {
};
static void
-uhid_intr_callback(struct usb_xfer *xfer, usb_error_t error)
+uhid_intr_write_callback(struct usb_xfer *xfer, usb_error_t error)
+{
+ struct uhid_softc *sc = usbd_xfer_softc(xfer);
+ struct usb_page_cache *pc;
+ int actlen;
+
+ switch (USB_GET_STATE(xfer)) {
+ case USB_ST_TRANSFERRED:
+ case USB_ST_SETUP:
+tr_setup:
+ pc = usbd_xfer_get_frame(xfer, 0);
+ if (usb_fifo_get_data(sc->sc_fifo.fp[USB_FIFO_TX], pc,
+ 0, usbd_xfer_max_len(xfer), &actlen, 0)) {
+ usbd_xfer_set_frame_len(xfer, 0, actlen);
+ usbd_transfer_submit(xfer);
+ }
+ return;
+
+ default: /* Error */
+ if (error != USB_ERR_CANCELLED) {
+ /* try to clear stall first */
+ usbd_xfer_set_stall(xfer);
+ goto tr_setup;
+ }
+ return;
+ }
+}
+
+static void
+uhid_intr_read_callback(struct usb_xfer *xfer, usb_error_t error)
{
struct uhid_softc *sc = usbd_xfer_softc(xfer);
struct usb_page_cache *pc;
@@ -327,13 +358,22 @@ uhid_read_callback(struct usb_xfer *xfer, usb_error_t error)
static const struct usb_config uhid_config[UHID_N_TRANSFER] = {
+ [UHID_INTR_DT_WR] = {
+ .type = UE_INTERRUPT,
+ .endpoint = UE_ADDR_ANY,
+ .direction = UE_DIR_OUT,
+ .flags = {.pipe_bof = 1,.no_pipe_ok = 1, },
+ .bufsize = UHID_BSIZE,
+ .callback = &uhid_intr_write_callback,
+ },
+
[UHID_INTR_DT_RD] = {
.type = UE_INTERRUPT,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.bufsize = UHID_BSIZE,
- .callback = &uhid_intr_callback,
+ .callback = &uhid_intr_read_callback,
},
[UHID_CTRL_DT_WR] = {
@@ -381,7 +421,12 @@ uhid_start_write(struct usb_fifo *fifo)
{
struct uhid_softc *sc = usb_fifo_softc(fifo);
- usbd_transfer_start(sc->sc_xfer[UHID_CTRL_DT_WR]);
+ if ((sc->sc_flags & UHID_FLAG_IMMED) ||
+ sc->sc_xfer[UHID_INTR_DT_WR] == NULL) {
+ usbd_transfer_start(sc->sc_xfer[UHID_CTRL_DT_WR]);
+ } else {
+ usbd_transfer_start(sc->sc_xfer[UHID_INTR_DT_WR]);
+ }
}
static void
@@ -390,6 +435,7 @@ uhid_stop_write(struct usb_fifo *fifo)
struct uhid_softc *sc = usb_fifo_softc(fifo);
usbd_transfer_stop(sc->sc_xfer[UHID_CTRL_DT_WR]);
+ usbd_transfer_stop(sc->sc_xfer[UHID_INTR_DT_WR]);
}
static int
diff --git a/sys/dev/usb/usb_hid.c b/sys/dev/usb/usb_hid.c
index 165919bc6622..6552546d2507 100644
--- a/sys/dev/usb/usb_hid.c
+++ b/sys/dev/usb/usb_hid.c
@@ -425,7 +425,7 @@ hid_get_item(struct hid_data *s, struct hid_item *h)
s->loc_size = dval & mask;
break;
case 8:
- hid_switch_rid(s, c, dval);
+ hid_switch_rid(s, c, dval & mask);
break;
case 9:
/* mask because value is unsigned */
diff --git a/sys/dev/usb/usb_transfer.c b/sys/dev/usb/usb_transfer.c
index 2fe442d27005..b799897c7f8e 100644
--- a/sys/dev/usb/usb_transfer.c
+++ b/sys/dev/usb/usb_transfer.c
@@ -217,12 +217,12 @@ usbd_transfer_setup_sub_malloc(struct usb_setup_params *parm,
* Try multi-allocation chunks to reduce the number of DMA
* allocations, hence DMA allocations are slow.
*/
- if (size >= PAGE_SIZE) {
+ if (size >= USB_PAGE_SIZE) {
n_dma_pc = count;
n_obj = 1;
} else {
/* compute number of objects per page */
- n_obj = (PAGE_SIZE / size);
+ n_obj = (USB_PAGE_SIZE / size);
/*
* Compute number of DMA chunks, rounded up
* to nearest one:
diff --git a/sys/dev/wbwd/wbwd.c b/sys/dev/wbwd/wbwd.c
index f6bf5a2f2def..266f87e79fb7 100644
--- a/sys/dev/wbwd/wbwd.c
+++ b/sys/dev/wbwd/wbwd.c
@@ -78,6 +78,7 @@ __FBSDID("$FreeBSD$");
#define WB_LDN8_CRF5 0xF5
#define WB_LDN8_CRF5_SCALE 0x08 /* 0: 1s, 1: 60s */
#define WB_LDN8_CRF5_KEYB_P20 0x04 /* 1: keyb P20 forces timeout */
+#define WB_LDN8_CRF5_KBRST 0x02 /* 1: timeout causes pin60 kbd reset */
/* CRF6: Watchdog Timeout (0 == off). Mapped to reg_timeout. */
#define WB_LDN8_CRF6 0xF6
@@ -180,6 +181,12 @@ struct winbond_vendor_device_id {
.device_rev = 0x25,
.descr = "Winbond 83627DHG IC ver. 5",
},
+ {
+ .vendor_id = 0x5ca3,
+ .device_id = 0xb0,
+ .device_rev = 0x73,
+ .descr = "Winbond 83627DHG-P",
+ },
};
/*
@@ -637,8 +644,9 @@ wb_attach(device_t dev)
* Disable all all interrupt reset sources (defaults).
*/
sc->reg_1 &= ~(WB_LDN8_CRF5_KEYB_P20);
+ sc->reg_1 |= WB_LDN8_CRF5_KBRST;
write_efir_1(sc, WB_LDN8_CRF5);
- write_efir_1(sc, sc->reg_1);
+ write_efdr_1(sc, sc->reg_1);
sc->reg_2 &= ~WB_LDN8_CRF7_CLEAR_MASK;
write_efir_1(sc, WB_LDN8_CRF7);
diff --git a/sys/fs/ext2fs/ext2_lookup.c b/sys/fs/ext2fs/ext2_lookup.c
index 35ab63125f04..c279998fb3fb 100644
--- a/sys/fs/ext2fs/ext2_lookup.c
+++ b/sys/fs/ext2fs/ext2_lookup.c
@@ -115,6 +115,8 @@ static u_char dt_to_ext2_ft[] = {
static int ext2_dirbadentry(struct vnode *dp, struct ext2fs_direct_2 *de,
int entryoffsetinblock);
+static int ext2_lookup_ino(struct vnode *vdp, struct vnode **vpp,
+ struct componentname *cnp, ino_t *dd_ino);
/*
* Vnode op for reading directories.
@@ -285,7 +287,14 @@ ext2_lookup(ap)
struct componentname *a_cnp;
} */ *ap;
{
- struct vnode *vdp; /* vnode for directory being searched */
+
+ return (ext2_lookup_ino(ap->a_dvp, ap->a_vpp, ap->a_cnp, NULL));
+}
+
+static int
+ext2_lookup_ino(struct vnode *vdp, struct vnode **vpp, struct componentname *cnp,
+ ino_t *dd_ino)
+{
struct inode *dp; /* inode for directory being searched */
struct buf *bp; /* a buffer of directory entries */
struct ext2fs_direct_2 *ep; /* the current directory entry */
@@ -305,22 +314,22 @@ ext2_lookup(ap)
doff_t enduseful; /* pointer past last used dir slot */
u_long bmask; /* block offset mask */
int namlen, error;
- struct vnode **vpp = ap->a_vpp;
- struct componentname *cnp = ap->a_cnp;
struct ucred *cred = cnp->cn_cred;
int flags = cnp->cn_flags;
int nameiop = cnp->cn_nameiop;
- ino_t ino;
+ ino_t ino, ino1;
int ltype;
- int DIRBLKSIZ = VTOI(ap->a_dvp)->i_e2fs->e2fs_bsize;
+ int DIRBLKSIZ = VTOI(vdp)->i_e2fs->e2fs_bsize;
+
+ if (vpp != NULL)
+ *vpp = NULL;
- bp = NULL;
- slotoffset = -1;
- *vpp = NULL;
- vdp = ap->a_dvp;
dp = VTOI(vdp);
bmask = VFSTOEXT2(vdp->v_mount)->um_mountp->mnt_stat.f_iosize - 1;
+restart:
+ bp = NULL;
+ slotoffset = -1;
/*
* We now have a segment name to search for, and a directory to search.
@@ -536,10 +545,12 @@ searchloop:
* Insert name into cache (as non-existent) if appropriate.
*/
if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE)
- cache_enter(vdp, *vpp, cnp);
+ cache_enter(vdp, NULL, cnp);
return (ENOENT);
found:
+ if (dd_ino != NULL)
+ *dd_ino = ino;
if (numdirpasses == 2)
nchstats.ncs_pass2++;
/*
@@ -582,6 +593,8 @@ found:
dp->i_count = 0;
else
dp->i_count = dp->i_offset - prevoff;
+ if (dd_ino != NULL)
+ return (0);
if (dp->i_number == ino) {
VREF(vdp);
*vpp = vdp;
@@ -622,6 +635,8 @@ found:
*/
if (dp->i_number == ino)
return (EISDIR);
+ if (dd_ino != NULL)
+ return (0);
if ((error = VFS_VGET(vdp->v_mount, ino, LK_EXCLUSIVE,
&tdp)) != 0)
return (error);
@@ -629,6 +644,8 @@ found:
cnp->cn_flags |= SAVENAME;
return (0);
}
+ if (dd_ino != NULL)
+ return (0);
/*
* Step through the translation in the name. We do not `vput' the
@@ -655,8 +672,27 @@ found:
VOP_UNLOCK(pdp, 0); /* race to get the inode */
error = VFS_VGET(vdp->v_mount, ino, cnp->cn_lkflags, &tdp);
vn_lock(pdp, ltype | LK_RETRY);
- if (error != 0)
+ if (pdp->v_iflag & VI_DOOMED) {
+ if (error == 0)
+ vput(tdp);
+ error = ENOENT;
+ }
+ if (error)
return (error);
+ /*
+ * Recheck that ".." entry in the vdp directory points
+ * to the inode we looked up before vdp lock was
+ * dropped.
+ */
+ error = ext2_lookup_ino(pdp, NULL, cnp, &ino1);
+ if (error) {
+ vput(tdp);
+ return (error);
+ }
+ if (ino1 != ino) {
+ vput(tdp);
+ goto restart;
+ }
*vpp = tdp;
} else if (dp->i_number == ino) {
VREF(vdp); /* we want ourself, ie "." */
diff --git a/sys/fs/ext2fs/ext2_vnops.c b/sys/fs/ext2fs/ext2_vnops.c
index 21b7687a3142..4f8f6a90dfe4 100644
--- a/sys/fs/ext2fs/ext2_vnops.c
+++ b/sys/fs/ext2fs/ext2_vnops.c
@@ -1336,7 +1336,11 @@ ext2_rmdir(ap)
error = ext2_truncate(vp, (off_t)0, IO_SYNC, cnp->cn_cred,
cnp->cn_thread);
cache_purge(ITOV(ip));
- vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY);
+ if (vn_lock(dvp, LK_EXCLUSIVE | LK_NOWAIT) != 0) {
+ VOP_UNLOCK(vp, 0);
+ vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY);
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+ }
out:
return (error);
}
diff --git a/sys/fs/hpfs/hpfs_vnops.c b/sys/fs/hpfs/hpfs_vnops.c
index ccf4f3cabe9e..9abe77c3a1ed 100644
--- a/sys/fs/hpfs/hpfs_vnops.c
+++ b/sys/fs/hpfs/hpfs_vnops.c
@@ -797,10 +797,21 @@ hpfs_de_uiomove (
}
-static struct dirent hpfs_de_dot =
- { 0, sizeof(struct dirent), DT_DIR, 1, "." };
-static struct dirent hpfs_de_dotdot =
- { 0, sizeof(struct dirent), DT_DIR, 2, ".." };
+static struct dirent hpfs_de_dot = {
+ .d_fileno = 0,
+ .d_reclen = sizeof(struct dirent),
+ .d_type = DT_DIR,
+ .d_namlen = 1,
+ .d_name = "."
+};
+static struct dirent hpfs_de_dotdot = {
+ .d_fileno = 0,
+ .d_reclen = sizeof(struct dirent),
+ .d_type = DT_DIR,
+ .d_namlen = 2,
+ .d_name = ".."
+};
+
int
hpfs_readdir(ap)
struct vop_readdir_args /* {
diff --git a/sys/fs/nandfs/bmap.c b/sys/fs/nandfs/bmap.c
new file mode 100644
index 000000000000..84e4a9e7e314
--- /dev/null
+++ b/sys/fs/nandfs/bmap.c
@@ -0,0 +1,621 @@
+/*-
+ * Copyright (c) 2012 Semihalf
+ * 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/namei.h>
+#include <sys/kernel.h>
+#include <sys/stat.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+#include <sys/proc.h>
+#include <sys/mount.h>
+#include <sys/vnode.h>
+#include <sys/signalvar.h>
+#include <sys/malloc.h>
+#include <sys/dirent.h>
+#include <sys/lockf.h>
+#include <sys/ktr.h>
+#include <sys/kdb.h>
+
+#include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_object.h>
+#include <vm/vnode_pager.h>
+
+#include <machine/_inttypes.h>
+
+#include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_object.h>
+#include <vm/vnode_pager.h>
+
+#include "nandfs_mount.h"
+#include "nandfs.h"
+#include "nandfs_subr.h"
+#include "bmap.h"
+
+static int bmap_getlbns(struct nandfs_node *, nandfs_lbn_t,
+ struct nandfs_indir *, int *);
+
+int
+bmap_lookup(struct nandfs_node *node, nandfs_lbn_t lblk, nandfs_daddr_t *vblk)
+{
+ struct nandfs_inode *ip;
+ struct nandfs_indir a[NIADDR + 1], *ap;
+ nandfs_daddr_t daddr;
+ struct buf *bp;
+ int error;
+ int num, *nump;
+
+ DPRINTF(BMAP, ("%s: node %p lblk %jx enter\n", __func__, node, lblk));
+ ip = &node->nn_inode;
+
+ ap = a;
+ nump = &num;
+
+ error = bmap_getlbns(node, lblk, ap, nump);
+ if (error)
+ return (error);
+
+ if (num == 0) {
+ *vblk = ip->i_db[lblk];
+ return (0);
+ }
+
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx trying ip->i_ib[%x]\n", __func__,
+ node, lblk, ap->in_off));
+ daddr = ip->i_ib[ap->in_off];
+ for (bp = NULL, ++ap; --num; ap++) {
+ if (daddr == 0) {
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx returning with "
+ "vblk 0\n", __func__, node, lblk));
+ *vblk = 0;
+ return (0);
+ }
+ if (ap->in_lbn == lblk) {
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx ap->in_lbn=%jx "
+ "returning address of indirect block (%jx)\n",
+ __func__, node, lblk, ap->in_lbn, daddr));
+ *vblk = daddr;
+ return (0);
+ }
+
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx reading block "
+ "ap->in_lbn=%jx\n", __func__, node, lblk, ap->in_lbn));
+
+ error = nandfs_bread_meta(node, ap->in_lbn, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+
+ daddr = ((nandfs_daddr_t *)bp->b_data)[ap->in_off];
+ brelse(bp);
+ }
+
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx returning with %jx\n", __func__,
+ node, lblk, daddr));
+ *vblk = daddr;
+
+ return (0);
+}
+
+int
+bmap_dirty_meta(struct nandfs_node *node, nandfs_lbn_t lblk, int force)
+{
+ struct nandfs_indir a[NIADDR+1], *ap;
+#ifdef DEBUG
+ nandfs_daddr_t daddr;
+#endif
+ struct buf *bp;
+ int error;
+ int num, *nump;
+
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx\n", __func__, node, lblk));
+
+ ap = a;
+ nump = &num;
+
+ error = bmap_getlbns(node, lblk, ap, nump);
+ if (error)
+ return (error);
+
+ /*
+ * Direct block, nothing to do
+ */
+ if (num == 0)
+ return (0);
+
+ DPRINTF(BMAP, ("%s: node %p reading blocks\n", __func__, node));
+
+ for (bp = NULL, ++ap; --num; ap++) {
+ error = nandfs_bread_meta(node, ap->in_lbn, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+
+#ifdef DEBUG
+ daddr = ((nandfs_daddr_t *)bp->b_data)[ap->in_off];
+ MPASS(daddr != 0 || node->nn_ino == 3);
+#endif
+
+ error = nandfs_dirty_buf_meta(bp, force);
+ if (error)
+ return (error);
+ }
+
+ return (0);
+}
+
+int
+bmap_insert_block(struct nandfs_node *node, nandfs_lbn_t lblk,
+ nandfs_daddr_t vblk)
+{
+ struct nandfs_inode *ip;
+ struct nandfs_indir a[NIADDR+1], *ap;
+ struct buf *bp;
+ nandfs_daddr_t daddr;
+ int error;
+ int num, *nump, i;
+
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx vblk=%jx\n", __func__, node, lblk,
+ vblk));
+
+ ip = &node->nn_inode;
+
+ ap = a;
+ nump = &num;
+
+ error = bmap_getlbns(node, lblk, ap, nump);
+ if (error)
+ return (error);
+
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx vblk=%jx got num=%d\n", __func__,
+ node, lblk, vblk, num));
+
+ if (num == 0) {
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx direct block\n", __func__,
+ node, lblk));
+ ip->i_db[lblk] = vblk;
+ return (0);
+ }
+
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx indirect block level %d\n",
+ __func__, node, lblk, ap->in_off));
+
+ if (num == 1) {
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx indirect block: inserting "
+ "%jx as vblk for indirect block %d\n", __func__, node,
+ lblk, vblk, ap->in_off));
+ ip->i_ib[ap->in_off] = vblk;
+ return (0);
+ }
+
+ bp = NULL;
+ daddr = ip->i_ib[a[0].in_off];
+ for (i = 1; i < num; i++) {
+ if (bp)
+ brelse(bp);
+ if (daddr == 0) {
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx vblk=%jx create "
+ "block %jx %d\n", __func__, node, lblk, vblk,
+ a[i].in_lbn, a[i].in_off));
+ error = nandfs_bcreate_meta(node, a[i].in_lbn, NOCRED,
+ 0, &bp);
+ if (error)
+ return (error);
+ } else {
+ DPRINTF(BMAP, ("%s: node %p lblk=%jx vblk=%jx read "
+ "block %jx %d\n", __func__, node, daddr, vblk,
+ a[i].in_lbn, a[i].in_off));
+ error = nandfs_bread_meta(node, a[i].in_lbn, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ }
+ daddr = ((nandfs_daddr_t *)bp->b_data)[a[i].in_off];
+ }
+ i--;
+
+ DPRINTF(BMAP,
+ ("%s: bmap node %p lblk=%jx vblk=%jx inserting vblk level %d at "
+ "offset %d at %jx\n", __func__, node, lblk, vblk, i, a[i].in_off,
+ daddr));
+
+ if (!bp) {
+ nandfs_error("%s: cannot find indirect block\n", __func__);
+ return (-1);
+ }
+ ((nandfs_daddr_t *)bp->b_data)[a[i].in_off] = vblk;
+
+ error = nandfs_dirty_buf_meta(bp, 0);
+ if (error) {
+ nandfs_warning("%s: dirty failed buf: %p\n", __func__, bp);
+ return (error);
+ }
+ DPRINTF(BMAP, ("%s: exiting node %p lblk=%jx vblk=%jx\n", __func__,
+ node, lblk, vblk));
+
+ return (error);
+}
+
+CTASSERT(NIADDR <= 3);
+#define SINGLE 0 /* index of single indirect block */
+#define DOUBLE 1 /* index of double indirect block */
+#define TRIPLE 2 /* index of triple indirect block */
+
+static __inline nandfs_lbn_t
+lbn_offset(struct nandfs_device *fsdev, int level)
+{
+ nandfs_lbn_t res;
+
+ for (res = 1; level > 0; level--)
+ res *= MNINDIR(fsdev);
+ return (res);
+}
+
+static nandfs_lbn_t
+blocks_inside(struct nandfs_device *fsdev, int level, struct nandfs_indir *nip)
+{
+ nandfs_lbn_t blocks;
+
+ for (blocks = 1; level >= SINGLE; level--, nip++) {
+ MPASS(nip->in_off >= 0 && nip->in_off < MNINDIR(fsdev));
+ blocks += nip->in_off * lbn_offset(fsdev, level);
+ }
+
+ return (blocks);
+}
+
+static int
+bmap_truncate_indirect(struct nandfs_node *node, int level, nandfs_lbn_t *left,
+ int *cleaned, struct nandfs_indir *ap, struct nandfs_indir *fp,
+ nandfs_daddr_t *copy)
+{
+ struct buf *bp;
+ nandfs_lbn_t i, lbn, nlbn, factor, tosub;
+ struct nandfs_device *fsdev;
+ int error, lcleaned, modified;
+
+ DPRINTF(BMAP, ("%s: node %p level %d left %jx\n", __func__,
+ node, level, *left));
+
+ fsdev = node->nn_nandfsdev;
+
+ MPASS(ap->in_off >= 0 && ap->in_off < MNINDIR(fsdev));
+
+ factor = lbn_offset(fsdev, level);
+ lbn = ap->in_lbn;
+
+ error = nandfs_bread_meta(node, lbn, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+
+ bcopy(bp->b_data, copy, fsdev->nd_blocksize);
+ bqrelse(bp);
+
+ modified = 0;
+
+ i = ap->in_off;
+
+ if (ap != fp)
+ ap++;
+ for (nlbn = lbn + 1 - i * factor; i >= 0 && *left > 0; i--,
+ nlbn += factor) {
+ lcleaned = 0;
+
+ DPRINTF(BMAP,
+ ("%s: node %p i=%jx nlbn=%jx left=%jx ap=%p vblk %jx\n",
+ __func__, node, i, nlbn, *left, ap, copy[i]));
+
+ if (copy[i] == 0) {
+ tosub = blocks_inside(fsdev, level - 1, ap);
+ if (tosub > *left)
+ tosub = 0;
+
+ *left -= tosub;
+ } else {
+ if (level > SINGLE) {
+ if (ap == fp)
+ ap->in_lbn = nlbn;
+
+ error = bmap_truncate_indirect(node, level - 1,
+ left, &lcleaned, ap, fp,
+ copy + MNINDIR(fsdev));
+ if (error)
+ return (error);
+ } else {
+ error = nandfs_bdestroy(node, copy[i]);
+ if (error)
+ return (error);
+ lcleaned = 1;
+ *left -= 1;
+ }
+ }
+
+ if (lcleaned) {
+ if (level > SINGLE) {
+ error = nandfs_vblock_end(fsdev, copy[i]);
+ if (error)
+ return (error);
+ }
+ copy[i] = 0;
+ modified++;
+ }
+
+ ap = fp;
+ }
+
+ if (i == -1)
+ *cleaned = 1;
+
+ error = nandfs_bread_meta(node, lbn, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ if (modified)
+ bcopy(copy, bp->b_data, fsdev->nd_blocksize);
+
+ error = nandfs_dirty_buf_meta(bp, 0);
+ if (error)
+ return (error);
+
+ return (error);
+}
+
+int
+bmap_truncate_mapping(struct nandfs_node *node, nandfs_lbn_t lastblk,
+ nandfs_lbn_t todo)
+{
+ struct nandfs_inode *ip;
+ struct nandfs_indir a[NIADDR + 1], f[NIADDR], *ap;
+ nandfs_daddr_t indir_lbn[NIADDR];
+ nandfs_daddr_t *copy;
+ int error, level;
+ nandfs_lbn_t left, tosub;
+ struct nandfs_device *fsdev;
+ int cleaned, i;
+ int num, *nump;
+
+ DPRINTF(BMAP, ("%s: node %p lastblk %jx truncating by %jx\n", __func__,
+ node, lastblk, todo));
+
+ ip = &node->nn_inode;
+ fsdev = node->nn_nandfsdev;
+
+ ap = a;
+ nump = &num;
+
+ error = bmap_getlbns(node, lastblk, ap, nump);
+ if (error)
+ return (error);
+
+ indir_lbn[SINGLE] = -NDADDR;
+ indir_lbn[DOUBLE] = indir_lbn[SINGLE] - MNINDIR(fsdev) - 1;
+ indir_lbn[TRIPLE] = indir_lbn[DOUBLE] - MNINDIR(fsdev)
+ * MNINDIR(fsdev) - 1;
+
+ for (i = 0; i < NIADDR; i++) {
+ f[i].in_off = MNINDIR(fsdev) - 1;
+ f[i].in_lbn = 0xdeadbeef;
+ }
+
+ left = todo;
+
+#ifdef DEBUG
+ a[num].in_off = -1;
+#endif
+
+ ap++;
+ num -= 2;
+
+ if (num < 0)
+ goto direct;
+
+ copy = malloc(MNINDIR(fsdev) * sizeof(nandfs_daddr_t) * (num + 1),
+ M_NANDFSTEMP, M_WAITOK);
+
+ for (level = num; level >= SINGLE && left > 0; level--) {
+ cleaned = 0;
+
+ if (ip->i_ib[level] == 0) {
+ tosub = blocks_inside(fsdev, level, ap);
+ if (tosub > left)
+ left = 0;
+ else
+ left -= tosub;
+ } else {
+ if (ap == f)
+ ap->in_lbn = indir_lbn[level];
+ error = bmap_truncate_indirect(node, level, &left,
+ &cleaned, ap, f, copy);
+ if (error) {
+ nandfs_error("%s: error %d when truncate "
+ "at level %d\n", __func__, error, level);
+ return (error);
+ }
+ }
+
+ if (cleaned) {
+ nandfs_vblock_end(fsdev, ip->i_ib[level]);
+ ip->i_ib[level] = 0;
+ }
+
+ ap = f;
+ }
+
+ free(copy, M_NANDFSTEMP);
+
+direct:
+ if (num < 0)
+ i = lastblk;
+ else
+ i = NDADDR - 1;
+
+ for (; i >= 0 && left > 0; i--) {
+ if (ip->i_db[i] != 0) {
+ error = nandfs_bdestroy(node, ip->i_db[i]);
+ if (error) {
+ nandfs_error("%s: cannot destroy "
+ "block %jx, error %d\n", __func__,
+ (uintmax_t)ip->i_db[i], error);
+ return (error);
+ }
+ ip->i_db[i] = 0;
+ }
+
+ left--;
+ }
+
+ KASSERT(left == 0,
+ ("truncated wrong number of blocks (%jd should be 0)", left));
+
+ return (error);
+}
+
+nandfs_lbn_t
+get_maxfilesize(struct nandfs_device *fsdev)
+{
+ struct nandfs_indir f[NIADDR];
+ nandfs_lbn_t max;
+ int i;
+
+ max = NDADDR;
+
+ for (i = 0; i < NIADDR; i++) {
+ f[i].in_off = MNINDIR(fsdev) - 1;
+ max += blocks_inside(fsdev, i, f);
+ }
+
+ max *= fsdev->nd_blocksize;
+
+ return (max);
+}
+
+/*
+ * This is ufs_getlbns with minor modifications.
+ */
+/*
+ * Create an array of logical block number/offset pairs which represent the
+ * path of indirect blocks required to access a data block. The first "pair"
+ * contains the logical block number of the appropriate single, double or
+ * triple indirect block and the offset into the inode indirect block array.
+ * Note, the logical block number of the inode single/double/triple indirect
+ * block appears twice in the array, once with the offset into the i_ib and
+ * once with the offset into the page itself.
+ */
+static int
+bmap_getlbns(struct nandfs_node *node, nandfs_lbn_t bn, struct nandfs_indir *ap, int *nump)
+{
+ nandfs_daddr_t blockcnt;
+ nandfs_lbn_t metalbn, realbn;
+ struct nandfs_device *fsdev;
+ int i, numlevels, off;
+
+ fsdev = node->nn_nandfsdev;
+
+ DPRINTF(BMAP, ("%s: node %p bn=%jx mnindir=%zd enter\n", __func__,
+ node, bn, MNINDIR(fsdev)));
+
+ *nump = 0;
+ numlevels = 0;
+ realbn = bn;
+
+ if (bn < 0)
+ bn = -bn;
+
+ /* The first NDADDR blocks are direct blocks. */
+ if (bn < NDADDR)
+ return (0);
+
+ /*
+ * Determine the number of levels of indirection. After this loop
+ * is done, blockcnt indicates the number of data blocks possible
+ * at the previous level of indirection, and NIADDR - i is the number
+ * of levels of indirection needed to locate the requested block.
+ */
+ for (blockcnt = 1, i = NIADDR, bn -= NDADDR;; i--, bn -= blockcnt) {
+ DPRINTF(BMAP, ("%s: blockcnt=%jd i=%d bn=%jd\n", __func__,
+ blockcnt, i, bn));
+ if (i == 0)
+ return (EFBIG);
+ blockcnt *= MNINDIR(fsdev);
+ if (bn < blockcnt)
+ break;
+ }
+
+ /* Calculate the address of the first meta-block. */
+ if (realbn >= 0)
+ metalbn = -(realbn - bn + NIADDR - i);
+ else
+ metalbn = -(-realbn - bn + NIADDR - i);
+
+ /*
+ * At each iteration, off is the offset into the bap array which is
+ * an array of disk addresses at the current level of indirection.
+ * The logical block number and the offset in that block are stored
+ * into the argument array.
+ */
+ ap->in_lbn = metalbn;
+ ap->in_off = off = NIADDR - i;
+
+ DPRINTF(BMAP, ("%s: initial: ap->in_lbn=%jx ap->in_off=%d\n", __func__,
+ metalbn, off));
+
+ ap++;
+ for (++numlevels; i <= NIADDR; i++) {
+ /* If searching for a meta-data block, quit when found. */
+ if (metalbn == realbn)
+ break;
+
+ blockcnt /= MNINDIR(fsdev);
+ off = (bn / blockcnt) % MNINDIR(fsdev);
+
+ ++numlevels;
+ ap->in_lbn = metalbn;
+ ap->in_off = off;
+
+ DPRINTF(BMAP, ("%s: in_lbn=%jx in_off=%d\n", __func__,
+ ap->in_lbn, ap->in_off));
+ ++ap;
+
+ metalbn -= -1 + off * blockcnt;
+ }
+ if (nump)
+ *nump = numlevels;
+
+ DPRINTF(BMAP, ("%s: numlevels=%d\n", __func__, numlevels));
+
+ return (0);
+}
diff --git a/sys/fs/nandfs/bmap.h b/sys/fs/nandfs/bmap.h
new file mode 100644
index 000000000000..c27c61cad299
--- /dev/null
+++ b/sys/fs/nandfs/bmap.h
@@ -0,0 +1,40 @@
+/*-
+ * Copyright (c) 2012 Semihalf
+ * 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _BMAP_H
+#define _BMAP_H
+
+#include "nandfs_fs.h"
+
+int bmap_lookup(struct nandfs_node *, nandfs_lbn_t, nandfs_daddr_t *);
+int bmap_insert_block(struct nandfs_node *, nandfs_lbn_t, nandfs_daddr_t);
+int bmap_truncate_mapping(struct nandfs_node *, nandfs_lbn_t, nandfs_lbn_t);
+int bmap_dirty_meta(struct nandfs_node *, nandfs_lbn_t, int);
+
+nandfs_lbn_t get_maxfilesize(struct nandfs_device *);
+
+#endif /* _BMAP_H */
diff --git a/sys/fs/nandfs/nandfs.h b/sys/fs/nandfs/nandfs.h
new file mode 100644
index 000000000000..beb4e1639141
--- /dev/null
+++ b/sys/fs/nandfs/nandfs.h
@@ -0,0 +1,310 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf
+ * Copyright (c) 2008, 2009 Reinoud Zandijk
+ * 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.
+ *
+ * From: NetBSD: nilfs.h,v 1.1 2009/07/18 16:31:42 reinoud
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _FS_NANDFS_NANDFS_H_
+#define _FS_NANDFS_NANDFS_H_
+
+#include <sys/param.h>
+#include <sys/proc.h>
+#include <sys/condvar.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+
+#include <sys/queue.h>
+#include <sys/uio.h>
+#include <sys/mutex.h>
+
+#include <sys/disk.h>
+#include <sys/kthread.h>
+#include "nandfs_fs.h"
+
+MALLOC_DECLARE(M_NANDFSTEMP);
+
+/* Debug categories */
+#define NANDFS_DEBUG_VOLUMES 0x000001
+#define NANDFS_DEBUG_BLOCK 0x000004
+#define NANDFS_DEBUG_LOCKING 0x000008
+#define NANDFS_DEBUG_NODE 0x000010
+#define NANDFS_DEBUG_LOOKUP 0x000020
+#define NANDFS_DEBUG_READDIR 0x000040
+#define NANDFS_DEBUG_TRANSLATE 0x000080
+#define NANDFS_DEBUG_STRATEGY 0x000100
+#define NANDFS_DEBUG_READ 0x000200
+#define NANDFS_DEBUG_WRITE 0x000400
+#define NANDFS_DEBUG_IFILE 0x000800
+#define NANDFS_DEBUG_ATTR 0x001000
+#define NANDFS_DEBUG_EXTATTR 0x002000
+#define NANDFS_DEBUG_ALLOC 0x004000
+#define NANDFS_DEBUG_CPFILE 0x008000
+#define NANDFS_DEBUG_DIRHASH 0x010000
+#define NANDFS_DEBUG_NOTIMPL 0x020000
+#define NANDFS_DEBUG_SHEDULE 0x040000
+#define NANDFS_DEBUG_SEG 0x080000
+#define NANDFS_DEBUG_SYNC 0x100000
+#define NANDFS_DEBUG_PARANOIA 0x200000
+#define NANDFS_DEBUG_VNCALL 0x400000
+#define NANDFS_DEBUG_BUF 0x1000000
+#define NANDFS_DEBUG_BMAP 0x2000000
+#define NANDFS_DEBUG_DAT 0x4000000
+#define NANDFS_DEBUG_GENERIC 0x8000000
+#define NANDFS_DEBUG_CLEAN 0x10000000
+
+extern int nandfs_verbose;
+
+#define DPRINTF(name, arg) { \
+ if (nandfs_verbose & NANDFS_DEBUG_##name) {\
+ printf arg;\
+ };\
+ }
+#define DPRINTFIF(name, cond, arg) { \
+ if (nandfs_verbose & NANDFS_DEBUG_##name) { \
+ if (cond) printf arg;\
+ };\
+ }
+
+#define VFSTONANDFS(mp) ((struct nandfsmount *)((mp)->mnt_data))
+#define VTON(vp) ((struct nandfs_node *)(vp)->v_data)
+#define NTOV(xp) ((xp)->nn_vnode)
+
+int nandfs_init(struct vfsconf *);
+int nandfs_uninit(struct vfsconf *);
+
+extern struct vop_vector nandfs_vnodeops;
+extern struct vop_vector nandfs_system_vnodeops;
+
+struct nandfs_node;
+
+/* Structure and derivatives */
+struct nandfs_mdt {
+ uint32_t entries_per_block;
+ uint32_t entries_per_group;
+ uint32_t blocks_per_group;
+ uint32_t groups_per_desc_block; /* desc is super group */
+ uint32_t blocks_per_desc_block; /* desc is super group */
+};
+
+struct nandfs_segment {
+ LIST_ENTRY(nandfs_segment) seg_link;
+
+ struct nandfs_device *fsdev;
+
+ TAILQ_HEAD(, buf) segsum;
+ TAILQ_HEAD(, buf) data;
+
+ uint64_t seg_num;
+ uint64_t seg_next;
+ uint64_t start_block;
+ uint32_t num_blocks;
+
+ uint32_t nblocks;
+ uint32_t nbinfos;
+ uint32_t segsum_blocks;
+ uint32_t segsum_bytes;
+ uint32_t bytes_left;
+ char *current_off;
+};
+
+struct nandfs_seginfo {
+ LIST_HEAD( ,nandfs_segment) seg_list;
+ struct nandfs_segment *curseg;
+ struct nandfs_device *fsdev;
+ uint32_t blocks;
+ uint8_t reiterate;
+};
+
+#define NANDFS_FSSTOR_FAILED 1
+struct nandfs_fsarea {
+ int offset;
+ int flags;
+ int last_used;
+};
+
+extern int nandfs_cleaner_enable;
+extern int nandfs_cleaner_interval;
+extern int nandfs_cleaner_segments;
+
+struct nandfs_device {
+ struct vnode *nd_devvp;
+ struct g_consumer *nd_gconsumer;
+
+ struct thread *nd_syncer;
+ struct thread *nd_cleaner;
+ int nd_syncer_exit;
+ int nd_cleaner_exit;
+
+ int nd_is_nand;
+
+ struct nandfs_fsarea nd_fsarea[NANDFS_NFSAREAS];
+ int nd_last_fsarea;
+
+ STAILQ_HEAD(nandfs_mnts, nandfsmount) nd_mounts;
+ SLIST_ENTRY(nandfs_device) nd_next_device;
+
+ /* FS structures */
+ struct nandfs_fsdata nd_fsdata;
+ struct nandfs_super_block nd_super;
+ struct nandfs_segment_summary nd_last_segsum;
+ struct nandfs_super_root nd_super_root;
+ struct nandfs_node *nd_dat_node;
+ struct nandfs_node *nd_cp_node;
+ struct nandfs_node *nd_su_node;
+ struct nandfs_node *nd_gc_node;
+
+ struct nandfs_mdt nd_dat_mdt;
+ struct nandfs_mdt nd_ifile_mdt;
+
+ struct timespec nd_ts;
+
+ /* Synchronization */
+ struct mtx nd_mutex;
+ struct mtx nd_sync_mtx;
+ struct cv nd_sync_cv;
+ struct mtx nd_clean_mtx;
+ struct cv nd_clean_cv;
+ struct lock nd_seg_const;
+
+ struct nandfs_seginfo *nd_seginfo;
+
+ /* FS geometry */
+ uint64_t nd_devsize;
+ uint64_t nd_maxfilesize;
+ uint32_t nd_blocksize;
+ uint32_t nd_erasesize;
+
+ uint32_t nd_devblocksize;
+
+ /* Segment usage */
+ uint64_t nd_clean_segs;
+ uint64_t *nd_free_base;
+ uint64_t nd_free_count;
+ uint64_t nd_dirty_bufs;
+
+ /* Running values */
+ uint64_t nd_seg_sequence;
+ uint64_t nd_seg_num;
+ uint64_t nd_next_seg_num;
+ uint64_t nd_last_pseg;
+ uint64_t nd_last_cno;
+ uint64_t nd_last_ino;
+ uint64_t nd_fakevblk;
+
+ int nd_mount_state;
+ int nd_refcnt;
+ int nd_syncing;
+ int nd_cleaning;
+};
+
+extern SLIST_HEAD(_nandfs_devices, nandfs_device) nandfs_devices;
+
+#define NANDFS_FORCE_SYNCER 0x1
+#define NANDFS_UMOUNT 0x2
+
+#define SYNCER_UMOUNT 0x0
+#define SYNCER_VFS_SYNC 0x1
+#define SYNCER_BDFLUSH 0x2
+#define SYNCER_FFORCE 0x3
+#define SYNCER_FSYNC 0x4
+#define SYNCER_ROUPD 0x5
+
+static __inline int
+nandfs_writelockflags(struct nandfs_device *fsdev, int flags)
+{
+ int error = 0;
+
+ if (lockstatus(&fsdev->nd_seg_const) != LK_EXCLUSIVE)
+ error = lockmgr(&fsdev->nd_seg_const, flags | LK_SHARED, NULL);
+
+ return (error);
+}
+
+static __inline void
+nandfs_writeunlock(struct nandfs_device *fsdev)
+{
+
+ if (lockstatus(&fsdev->nd_seg_const) != LK_EXCLUSIVE)
+ lockmgr(&(fsdev)->nd_seg_const, LK_RELEASE, NULL);
+}
+
+#define NANDFS_WRITELOCKFLAGS(fsdev, flags) nandfs_writelockflags(fsdev, flags)
+
+#define NANDFS_WRITELOCK(fsdev) NANDFS_WRITELOCKFLAGS(fsdev, 0)
+
+#define NANDFS_WRITEUNLOCK(fsdev) nandfs_writeunlock(fsdev)
+
+#define NANDFS_WRITEASSERT(fsdev) lockmgr_assert(&(fsdev)->nd_seg_const, KA_LOCKED)
+
+/* Specific mountpoint; head or a checkpoint/snapshot */
+struct nandfsmount {
+ STAILQ_ENTRY(nandfsmount) nm_next_mount;
+
+ struct mount *nm_vfs_mountp;
+ struct nandfs_device *nm_nandfsdev;
+ struct nandfs_args nm_mount_args;
+ struct nandfs_node *nm_ifile_node;
+
+ uint8_t nm_flags;
+ int8_t nm_ronly;
+};
+
+struct nandfs_node {
+ struct vnode *nn_vnode;
+ struct nandfsmount *nn_nmp;
+ struct nandfs_device *nn_nandfsdev;
+ struct lockf *nn_lockf;
+
+ uint64_t nn_ino;
+ struct nandfs_inode nn_inode;
+
+ uint64_t nn_diroff;
+ uint32_t nn_flags;
+};
+
+#define IN_ACCESS 0x0001 /* Inode access time update request */
+#define IN_CHANGE 0x0002 /* Inode change time update request */
+#define IN_UPDATE 0x0004 /* Inode was written to; update mtime*/
+#define IN_MODIFIED 0x0008 /* node has been modified */
+#define IN_RENAME 0x0010 /* node is being renamed. */
+
+/* File permissions. */
+#define IEXEC 0000100 /* Executable. */
+#define IWRITE 0000200 /* Writeable. */
+#define IREAD 0000400 /* Readable. */
+#define ISVTX 0001000 /* Sticky bit. */
+#define ISGID 0002000 /* Set-gid. */
+#define ISUID 0004000 /* Set-uid. */
+
+#define PRINT_NODE_FLAGS \
+ "\10\1IN_ACCESS\2IN_CHANGE\3IN_UPDATE\4IN_MODIFIED\5IN_RENAME"
+
+#define NANDFS_GATHER(x) ((x)->b_flags |= B_00800000)
+#define NANDFS_UNGATHER(x) ((x)->b_flags &= ~B_00800000)
+#define NANDFS_ISGATHERED(x) ((x)->b_flags & B_00800000)
+
+#endif /* !_FS_NANDFS_NANDFS_H_ */
diff --git a/sys/fs/nandfs/nandfs_alloc.c b/sys/fs/nandfs/nandfs_alloc.c
new file mode 100644
index 000000000000..3417266c9601
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_alloc.c
@@ -0,0 +1,364 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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/systm.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/mutex.h>
+#include <sys/namei.h>
+#include <sys/sysctl.h>
+#include <sys/vnode.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_page.h>
+
+#include <fs/nandfs/nandfs_mount.h>
+#include <fs/nandfs/nandfs.h>
+#include <fs/nandfs/nandfs_subr.h>
+
+static void
+nandfs_get_desc_block_nr(struct nandfs_mdt *mdt, uint64_t desc,
+ uint64_t *desc_block)
+{
+
+ *desc_block = desc * mdt->blocks_per_desc_block;
+}
+
+static void
+nandfs_get_group_block_nr(struct nandfs_mdt *mdt, uint64_t group,
+ uint64_t *group_block)
+{
+ uint64_t desc, group_off;
+
+ desc = group / mdt->groups_per_desc_block;
+ group_off = group % mdt->groups_per_desc_block;
+ *group_block = desc * mdt->blocks_per_desc_block +
+ 1 + group_off * mdt->blocks_per_group;
+}
+
+static void
+init_desc_block(struct nandfs_mdt *mdt, uint8_t *block_data)
+{
+ struct nandfs_block_group_desc *desc;
+ uint32_t i;
+
+ desc = (struct nandfs_block_group_desc *) block_data;
+ for (i = 0; i < mdt->groups_per_desc_block; i++)
+ desc[i].bg_nfrees = mdt->entries_per_group;
+}
+
+int
+nandfs_find_free_entry(struct nandfs_mdt *mdt, struct nandfs_node *node,
+ struct nandfs_alloc_request *req)
+{
+ nandfs_daddr_t desc, group, maxgroup, maxdesc, pos = 0;
+ nandfs_daddr_t start_group, start_desc;
+ nandfs_daddr_t desc_block, group_block;
+ nandfs_daddr_t file_blocks;
+ struct nandfs_block_group_desc *descriptors;
+ struct buf *bp, *bp2;
+ uint32_t *mask, i, mcount, msize;
+ int error;
+
+ file_blocks = node->nn_inode.i_blocks;
+ maxgroup = 0x100000000ull / mdt->entries_per_group;
+ maxdesc = maxgroup / mdt->groups_per_desc_block;
+ start_group = req->entrynum / mdt->entries_per_group;
+ start_desc = start_group / mdt->groups_per_desc_block;
+
+ bp = bp2 = NULL;
+restart:
+ for (desc = start_desc; desc < maxdesc; desc++) {
+ nandfs_get_desc_block_nr(mdt, desc, &desc_block);
+
+ if (bp)
+ brelse(bp);
+ if (desc_block < file_blocks) {
+ error = nandfs_bread(node, desc_block, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ } else {
+ error = nandfs_bcreate(node, desc_block, NOCRED, 0,
+ &bp);
+ if (error)
+ return (error);
+ file_blocks++;
+ init_desc_block(mdt, bp->b_data);
+ }
+
+ descriptors = (struct nandfs_block_group_desc *) bp->b_data;
+ for (group = start_group; group < mdt->groups_per_desc_block;
+ group++) {
+ if (descriptors[group].bg_nfrees > 0) {
+ nandfs_get_group_block_nr(mdt, group,
+ &group_block);
+
+ if (bp2)
+ brelse(bp2);
+ if (group_block < file_blocks) {
+ error = nandfs_bread(node, group_block,
+ NOCRED, 0, &bp2);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ } else {
+ error = nandfs_bcreate(node,
+ group_block, NOCRED, 0, &bp2);
+ if (error)
+ return (error);
+ file_blocks++;
+ }
+ mask = (uint32_t *)bp2->b_data;
+ msize = (sizeof(uint32_t) * __CHAR_BIT);
+ mcount = mdt->entries_per_group / msize;
+ for (i = 0; i < mcount; i++) {
+ if (mask[i] == UINT32_MAX)
+ continue;
+
+ pos = ffs(~mask[i]) - 1;
+ pos += (msize * i);
+ pos += (group * mdt->entries_per_group);
+ pos += desc * group *
+ mdt->groups_per_desc_block *
+ mdt->entries_per_group;
+ goto found;
+ }
+ }
+ }
+ start_group = 0;
+ }
+
+ if (start_desc != 0) {
+ maxdesc = start_desc;
+ start_desc = 0;
+ req->entrynum = 0;
+ goto restart;
+ }
+
+ return (ENOENT);
+
+found:
+ req->entrynum = pos;
+ req->bp_desc = bp;
+ req->bp_bitmap = bp2;
+ DPRINTF(ALLOC, ("%s: desc: %p bitmap: %p entry: %#jx\n",
+ __func__, req->bp_desc, req->bp_bitmap, (uintmax_t)pos));
+
+ return (0);
+}
+
+int
+nandfs_find_entry(struct nandfs_mdt* mdt, struct nandfs_node *nnode,
+ struct nandfs_alloc_request *req)
+{
+ uint64_t dblock, bblock, eblock;
+ uint32_t offset;
+ int error;
+
+ nandfs_mdt_trans_blk(mdt, req->entrynum, &dblock, &bblock, &eblock,
+ &offset);
+
+ error = nandfs_bread(nnode, dblock, NOCRED, 0, &req->bp_desc);
+ if (error) {
+ brelse(req->bp_desc);
+ return (error);
+ }
+
+ error = nandfs_bread(nnode, bblock, NOCRED, 0, &req->bp_bitmap);
+ if (error) {
+ brelse(req->bp_desc);
+ brelse(req->bp_bitmap);
+ return (error);
+ }
+
+ error = nandfs_bread(nnode, eblock, NOCRED, 0, &req->bp_entry);
+ if (error) {
+ brelse(req->bp_desc);
+ brelse(req->bp_bitmap);
+ brelse(req->bp_entry);
+ return (error);
+ }
+
+ DPRINTF(ALLOC,
+ ("%s: desc_buf: %p bitmap_buf %p entry_buf %p offset %x\n",
+ __func__, req->bp_desc, req->bp_bitmap, req->bp_entry, offset));
+
+ return (0);
+}
+
+static __inline void
+nandfs_calc_idx_entry(struct nandfs_mdt* mdt, uint32_t entrynum,
+ uint64_t *group, uint64_t *bitmap_idx, uint64_t *bitmap_off)
+{
+
+ /* Find group_desc index */
+ entrynum = entrynum %
+ (mdt->entries_per_group * mdt->groups_per_desc_block);
+ *group = entrynum / mdt->entries_per_group;
+ /* Find bitmap index and bit offset */
+ entrynum = entrynum % mdt->entries_per_group;
+ *bitmap_idx = entrynum / (sizeof(uint32_t) * __CHAR_BIT);
+ *bitmap_off = entrynum % (sizeof(uint32_t) * __CHAR_BIT);
+}
+
+int
+nandfs_free_entry(struct nandfs_mdt* mdt, struct nandfs_alloc_request *req)
+{
+ struct nandfs_block_group_desc *descriptors;
+ uint64_t bitmap_idx, bitmap_off;
+ uint64_t group;
+ uint32_t *mask, maskrw;
+
+ nandfs_calc_idx_entry(mdt, req->entrynum, &group, &bitmap_idx,
+ &bitmap_off);
+
+ DPRINTF(ALLOC, ("nandfs_free_entry: req->entrynum=%jx bitmap_idx=%jx"
+ " bitmap_off=%jx group=%jx\n", (uintmax_t)req->entrynum,
+ (uintmax_t)bitmap_idx, (uintmax_t)bitmap_off, (uintmax_t)group));
+
+ /* Update counter of free entries for group */
+ descriptors = (struct nandfs_block_group_desc *) req->bp_desc->b_data;
+ descriptors[group].bg_nfrees++;
+
+ /* Set bit to indicate that entry is taken */
+ mask = (uint32_t *)req->bp_bitmap->b_data;
+ maskrw = mask[bitmap_idx];
+ KASSERT(maskrw & (1 << bitmap_off), ("freeing unallocated vblock"));
+ maskrw &= ~(1 << bitmap_off);
+ mask[bitmap_idx] = maskrw;
+
+ /* Make descriptor, bitmap and entry buffer dirty */
+ if (nandfs_dirty_buf(req->bp_desc, 0) == 0) {
+ nandfs_dirty_buf(req->bp_bitmap, 1);
+ nandfs_dirty_buf(req->bp_entry, 1);
+ } else {
+ brelse(req->bp_bitmap);
+ brelse(req->bp_entry);
+ return (-1);
+ }
+
+ return (0);
+}
+
+int
+nandfs_alloc_entry(struct nandfs_mdt* mdt, struct nandfs_alloc_request *req)
+{
+ struct nandfs_block_group_desc *descriptors;
+ uint64_t bitmap_idx, bitmap_off;
+ uint64_t group;
+ uint32_t *mask, maskrw;
+
+ nandfs_calc_idx_entry(mdt, req->entrynum, &group, &bitmap_idx,
+ &bitmap_off);
+
+ DPRINTF(ALLOC, ("nandfs_alloc_entry: req->entrynum=%jx bitmap_idx=%jx"
+ " bitmap_off=%jx group=%jx\n", (uintmax_t)req->entrynum,
+ (uintmax_t)bitmap_idx, (uintmax_t)bitmap_off, (uintmax_t)group));
+
+ /* Update counter of free entries for group */
+ descriptors = (struct nandfs_block_group_desc *) req->bp_desc->b_data;
+ descriptors[group].bg_nfrees--;
+
+ /* Clear bit to indicate that entry is free */
+ mask = (uint32_t *)req->bp_bitmap->b_data;
+ maskrw = mask[bitmap_idx];
+ maskrw |= 1 << bitmap_off;
+ mask[bitmap_idx] = maskrw;
+
+ /* Make descriptor, bitmap and entry buffer dirty */
+ if (nandfs_dirty_buf(req->bp_desc, 0) == 0) {
+ nandfs_dirty_buf(req->bp_bitmap, 1);
+ nandfs_dirty_buf(req->bp_entry, 1);
+ } else {
+ brelse(req->bp_bitmap);
+ brelse(req->bp_entry);
+ return (-1);
+ }
+
+ return (0);
+}
+
+void
+nandfs_abort_entry(struct nandfs_alloc_request *req)
+{
+
+ brelse(req->bp_desc);
+ brelse(req->bp_bitmap);
+ brelse(req->bp_entry);
+}
+
+int
+nandfs_get_entry_block(struct nandfs_mdt *mdt, struct nandfs_node *node,
+ struct nandfs_alloc_request *req, uint32_t *entry, int create)
+{
+ struct buf *bp;
+ nandfs_lbn_t blocknr;
+ int error;
+
+ /* Find buffer number for given entry */
+ nandfs_mdt_trans(mdt, req->entrynum, &blocknr, entry);
+ DPRINTF(ALLOC, ("%s: ino %#jx entrynum:%#jx block:%#jx entry:%x\n",
+ __func__, (uintmax_t)node->nn_ino, (uintmax_t)req->entrynum,
+ (uintmax_t)blocknr, *entry));
+
+ /* Read entry block or create if 'create' parameter is not zero */
+ bp = NULL;
+
+ if (blocknr < node->nn_inode.i_blocks)
+ error = nandfs_bread(node, blocknr, NOCRED, 0, &bp);
+ else if (create)
+ error = nandfs_bcreate(node, blocknr, NOCRED, 0, &bp);
+ else
+ error = E2BIG;
+
+ if (error) {
+ DPRINTF(ALLOC, ("%s: ino %#jx block %#jx entry %x error %d\n",
+ __func__, (uintmax_t)node->nn_ino, (uintmax_t)blocknr,
+ *entry, error));
+ if (bp)
+ brelse(bp);
+ return (error);
+ }
+
+ MPASS(nandfs_vblk_get(bp) != 0 || node->nn_ino == NANDFS_DAT_INO);
+
+ req->bp_entry = bp;
+ return (0);
+}
diff --git a/sys/fs/nandfs/nandfs_bmap.c b/sys/fs/nandfs/nandfs_bmap.c
new file mode 100644
index 000000000000..9f800b844ad1
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_bmap.c
@@ -0,0 +1,230 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf
+ * Copyright (c) 2008, 2009 Reinoud Zandijk
+ * 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.
+ *
+ * From: NetBSD: nilfs_subr.c,v 1.4 2009/07/29 17:06:57 reinoud
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/namei.h>
+#include <sys/kernel.h>
+#include <sys/stat.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+#include <sys/proc.h>
+#include <sys/mount.h>
+#include <sys/vnode.h>
+#include <sys/signalvar.h>
+#include <sys/malloc.h>
+#include <sys/dirent.h>
+#include <sys/lockf.h>
+#include <sys/ktr.h>
+
+#include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_object.h>
+#include <vm/vnode_pager.h>
+
+#include <machine/_inttypes.h>
+
+#include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_object.h>
+#include <vm/vnode_pager.h>
+
+#include "nandfs_mount.h"
+#include "nandfs.h"
+#include "nandfs_subr.h"
+#include "bmap.h"
+
+nandfs_lbn_t
+nandfs_get_maxfilesize(struct nandfs_device *fsdev)
+{
+
+ return (get_maxfilesize(fsdev));
+}
+
+int
+nandfs_bmap_lookup(struct nandfs_node *node, nandfs_lbn_t lblk,
+ nandfs_daddr_t *vblk)
+{
+ int error = 0;
+
+ if (node->nn_ino == NANDFS_GC_INO && lblk >= 0)
+ *vblk = lblk;
+ else
+ error = bmap_lookup(node, lblk, vblk);
+
+ DPRINTF(TRANSLATE, ("%s: error %d ino %#jx lblocknr %#jx -> %#jx\n",
+ __func__, error, (uintmax_t)node->nn_ino, (uintmax_t)lblk,
+ (uintmax_t)*vblk));
+
+ if (error)
+ nandfs_error("%s: returned %d", __func__, error);
+
+ return (error);
+}
+
+int
+nandfs_bmap_insert_block(struct nandfs_node *node, nandfs_lbn_t lblk,
+ struct buf *bp)
+{
+ struct nandfs_device *fsdev;
+ nandfs_daddr_t vblk;
+ int error;
+
+ fsdev = node->nn_nandfsdev;
+
+ vblk = 0;
+ if (node->nn_ino != NANDFS_DAT_INO) {
+ error = nandfs_vblock_alloc(fsdev, &vblk);
+ if (error)
+ return (error);
+ }
+
+ nandfs_buf_set(bp, NANDFS_VBLK_ASSIGNED);
+ nandfs_vblk_set(bp, vblk);
+
+ error = bmap_insert_block(node, lblk, vblk);
+ if (error) {
+ nandfs_vblock_free(fsdev, vblk);
+ return (error);
+ }
+
+ return (0);
+}
+
+int
+nandfs_bmap_dirty_blocks(struct nandfs_node *node, struct buf *bp, int force)
+{
+ int error;
+
+ error = bmap_dirty_meta(node, bp->b_lblkno, force);
+ if (error)
+ nandfs_error("%s: cannot dirty buffer %p\n",
+ __func__, bp);
+
+ return (error);
+}
+
+static int
+nandfs_bmap_update_mapping(struct nandfs_node *node, nandfs_lbn_t lblk,
+ nandfs_daddr_t blknr)
+{
+ int error;
+
+ DPRINTF(BMAP,
+ ("%s: node: %p ino: %#jx lblk: %#jx vblk: %#jx\n",
+ __func__, node, (uintmax_t)node->nn_ino, (uintmax_t)lblk,
+ (uintmax_t)blknr));
+
+ error = bmap_insert_block(node, lblk, blknr);
+
+ return (error);
+}
+
+int
+nandfs_bmap_update_block(struct nandfs_node *node, struct buf *bp,
+ nandfs_lbn_t blknr)
+{
+ nandfs_lbn_t lblk;
+ int error;
+
+ lblk = bp->b_lblkno;
+ nandfs_vblk_set(bp, blknr);
+
+ DPRINTF(BMAP, ("%s: node: %p ino: %#jx bp: %p lblk: %#jx blk: %#jx\n",
+ __func__, node, (uintmax_t)node->nn_ino, bp,
+ (uintmax_t)lblk, (uintmax_t)blknr));
+
+ error = nandfs_bmap_update_mapping(node, lblk, blknr);
+ if (error) {
+ nandfs_error("%s: cannot update lblk:%jx to blk:%jx for "
+ "node:%p, error:%d\n", __func__, (uintmax_t)lblk,
+ (uintmax_t)blknr, node, error);
+ return (error);
+ }
+
+ return (error);
+}
+
+int
+nandfs_bmap_update_dat(struct nandfs_node *node, nandfs_daddr_t oldblk,
+ struct buf *bp)
+{
+ struct nandfs_device *fsdev;
+ nandfs_daddr_t vblk = 0;
+ int error;
+
+ if (node->nn_ino == NANDFS_DAT_INO)
+ return (0);
+
+ if (nandfs_buf_check(bp, NANDFS_VBLK_ASSIGNED)) {
+ nandfs_buf_clear(bp, NANDFS_VBLK_ASSIGNED);
+ return (0);
+ }
+
+ fsdev = node->nn_nandfsdev;
+
+ /* First alloc new virtual block.... */
+ error = nandfs_vblock_alloc(fsdev, &vblk);
+ if (error)
+ return (error);
+
+ error = nandfs_bmap_update_block(node, bp, vblk);
+ if (error)
+ return (error);
+
+ /* Then we can end up with old one */
+ nandfs_vblock_end(fsdev, oldblk);
+
+ DPRINTF(BMAP,
+ ("%s: ino %#jx block %#jx: update vblk %#jx to %#jx\n",
+ __func__, (uintmax_t)node->nn_ino, (uintmax_t)bp->b_lblkno,
+ (uintmax_t)oldblk, (uintmax_t)vblk));
+ return (error);
+}
+
+int
+nandfs_bmap_truncate_mapping(struct nandfs_node *node, nandfs_lbn_t oblk,
+ nandfs_lbn_t nblk)
+{
+ nandfs_lbn_t todo;
+ int error;
+
+ todo = oblk - nblk;
+
+ DPRINTF(BMAP, ("%s: node %p oblk %jx nblk %jx truncate by %jx\n",
+ __func__, node, oblk, nblk, todo));
+
+ error = bmap_truncate_mapping(node, oblk, todo);
+ if (error)
+ return (error);
+
+ return (error);
+}
diff --git a/sys/fs/nandfs/nandfs_buffer.c b/sys/fs/nandfs/nandfs_buffer.c
new file mode 100644
index 000000000000..b0d72668df8d
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_buffer.c
@@ -0,0 +1,83 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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/systm.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/mutex.h>
+#include <sys/buf.h>
+#include <sys/namei.h>
+#include <sys/vnode.h>
+#include <sys/bio.h>
+
+#include <fs/nandfs/nandfs_mount.h>
+#include <fs/nandfs/nandfs.h>
+#include <fs/nandfs/nandfs_subr.h>
+
+struct buf *
+nandfs_geteblk(int size, int flags)
+{
+ struct buf *bp;
+
+ /*
+ * XXX
+ * Right now we can call geteblk with GB_NOWAIT_BD flag, which means
+ * it can return NULL. But we cannot afford to get NULL, hence this panic.
+ */
+ bp = geteblk(size, flags);
+ if (bp == NULL)
+ panic("geteblk returned NULL");
+
+ return (bp);
+}
+
+void
+nandfs_dirty_bufs_increment(struct nandfs_device *fsdev)
+{
+
+ mtx_lock(&fsdev->nd_mutex);
+ KASSERT(fsdev->nd_dirty_bufs >= 0, ("negative nd_dirty_bufs"));
+ fsdev->nd_dirty_bufs++;
+ mtx_unlock(&fsdev->nd_mutex);
+}
+
+void
+nandfs_dirty_bufs_decrement(struct nandfs_device *fsdev)
+{
+
+ mtx_lock(&fsdev->nd_mutex);
+ KASSERT(fsdev->nd_dirty_bufs > 0,
+ ("decrementing not-positive nd_dirty_bufs"));
+ fsdev->nd_dirty_bufs--;
+ mtx_unlock(&fsdev->nd_mutex);
+}
diff --git a/sys/fs/nandfs/nandfs_cleaner.c b/sys/fs/nandfs/nandfs_cleaner.c
new file mode 100644
index 000000000000..b3d313563699
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_cleaner.c
@@ -0,0 +1,620 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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/systm.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/mutex.h>
+#include <sys/buf.h>
+#include <sys/namei.h>
+#include <sys/vnode.h>
+#include <sys/bio.h>
+
+#include <fs/nandfs/nandfs_mount.h>
+#include <fs/nandfs/nandfs.h>
+#include <fs/nandfs/nandfs_subr.h>
+
+#define NANDFS_CLEANER_KILL 1
+
+static void nandfs_cleaner(struct nandfs_device *);
+static int nandfs_cleaner_clean_segments(struct nandfs_device *,
+ struct nandfs_vinfo *, uint32_t, struct nandfs_period *, uint32_t,
+ struct nandfs_bdesc *, uint32_t, uint64_t *, uint32_t);
+
+static int
+nandfs_process_bdesc(struct nandfs_device *nffsdev, struct nandfs_bdesc *bd,
+ uint64_t nmembs);
+
+static void
+nandfs_wakeup_wait_cleaner(struct nandfs_device *fsdev, int reason)
+{
+
+ mtx_lock(&fsdev->nd_clean_mtx);
+ if (reason == NANDFS_CLEANER_KILL)
+ fsdev->nd_cleaner_exit = 1;
+ if (fsdev->nd_cleaning == 0) {
+ fsdev->nd_cleaning = 1;
+ wakeup(&fsdev->nd_cleaning);
+ }
+ cv_wait(&fsdev->nd_clean_cv, &fsdev->nd_clean_mtx);
+ mtx_unlock(&fsdev->nd_clean_mtx);
+}
+
+int
+nandfs_start_cleaner(struct nandfs_device *fsdev)
+{
+ int error;
+
+ MPASS(fsdev->nd_cleaner == NULL);
+
+ fsdev->nd_cleaner_exit = 0;
+
+ error = kthread_add((void(*)(void *))nandfs_cleaner, fsdev, NULL,
+ &fsdev->nd_cleaner, 0, 0, "nandfs_cleaner");
+ if (error)
+ printf("nandfs: could not start cleaner: %d\n", error);
+
+ return (error);
+}
+
+int
+nandfs_stop_cleaner(struct nandfs_device *fsdev)
+{
+
+ MPASS(fsdev->nd_cleaner != NULL);
+ nandfs_wakeup_wait_cleaner(fsdev, NANDFS_CLEANER_KILL);
+ fsdev->nd_cleaner = NULL;
+
+ DPRINTF(CLEAN, ("cleaner stopped\n"));
+ return (0);
+}
+
+static int
+nandfs_cleaner_finished(struct nandfs_device *fsdev)
+{
+ int exit;
+
+ mtx_lock(&fsdev->nd_clean_mtx);
+ fsdev->nd_cleaning = 0;
+ if (!fsdev->nd_cleaner_exit) {
+ DPRINTF(CLEAN, ("%s: sleep\n", __func__));
+ msleep(&fsdev->nd_cleaning, &fsdev->nd_clean_mtx, PRIBIO, "-",
+ hz * nandfs_cleaner_interval);
+ }
+ exit = fsdev->nd_cleaner_exit;
+ cv_broadcast(&fsdev->nd_clean_cv);
+ mtx_unlock(&fsdev->nd_clean_mtx);
+ if (exit) {
+ DPRINTF(CLEAN, ("%s: no longer active\n", __func__));
+ return (1);
+ }
+
+ return (0);
+}
+
+static void
+print_suinfo(struct nandfs_suinfo *suinfo, int nsegs)
+{
+ int i;
+
+ for (i = 0; i < nsegs; i++) {
+ DPRINTF(CLEAN, ("%jx %jd %c%c%c %10u\n",
+ suinfo[i].nsi_num, suinfo[i].nsi_lastmod,
+ (suinfo[i].nsi_flags &
+ (NANDFS_SEGMENT_USAGE_ACTIVE) ? 'a' : '-'),
+ (suinfo[i].nsi_flags &
+ (NANDFS_SEGMENT_USAGE_DIRTY) ? 'd' : '-'),
+ (suinfo[i].nsi_flags &
+ (NANDFS_SEGMENT_USAGE_ERROR) ? 'e' : '-'),
+ suinfo[i].nsi_blocks));
+ }
+}
+
+static int
+nandfs_cleaner_vblock_is_alive(struct nandfs_device *fsdev,
+ struct nandfs_vinfo *vinfo, struct nandfs_cpinfo *cp, uint32_t ncps)
+{
+ int64_t idx, min, max;
+
+ if (vinfo->nvi_end >= fsdev->nd_last_cno)
+ return (1);
+
+ if (ncps == 0)
+ return (0);
+
+ if (vinfo->nvi_end < cp[0].nci_cno ||
+ vinfo->nvi_start > cp[ncps - 1].nci_cno)
+ return (0);
+
+ idx = min = 0;
+ max = ncps - 1;
+ while (min <= max) {
+ idx = (min + max) / 2;
+ if (vinfo->nvi_start == cp[idx].nci_cno)
+ return (1);
+ if (vinfo->nvi_start < cp[idx].nci_cno)
+ max = idx - 1;
+ else
+ min = idx + 1;
+ }
+
+ return (vinfo->nvi_end >= cp[idx].nci_cno);
+}
+
+static void
+nandfs_cleaner_vinfo_mark_alive(struct nandfs_device *fsdev,
+ struct nandfs_vinfo *vinfo, uint32_t nmembs, struct nandfs_cpinfo *cp,
+ uint32_t ncps)
+{
+ uint32_t i;
+
+ for (i = 0; i < nmembs; i++)
+ vinfo[i].nvi_alive =
+ nandfs_cleaner_vblock_is_alive(fsdev, &vinfo[i], cp, ncps);
+}
+
+static int
+nandfs_cleaner_bdesc_is_alive(struct nandfs_device *fsdev,
+ struct nandfs_bdesc *bdesc)
+{
+ int alive;
+
+ alive = bdesc->bd_oblocknr == bdesc->bd_blocknr;
+ if (!alive)
+ MPASS(abs(bdesc->bd_oblocknr - bdesc->bd_blocknr) > 2);
+
+ return (alive);
+}
+
+static void
+nandfs_cleaner_bdesc_mark_alive(struct nandfs_device *fsdev,
+ struct nandfs_bdesc *bdesc, uint32_t nmembs)
+{
+ uint32_t i;
+
+ for (i = 0; i < nmembs; i++)
+ bdesc[i].bd_alive = nandfs_cleaner_bdesc_is_alive(fsdev,
+ &bdesc[i]);
+}
+
+static void
+nandfs_cleaner_iterate_psegment(struct nandfs_device *fsdev,
+ struct nandfs_segment_summary *segsum, union nandfs_binfo *binfo,
+ nandfs_daddr_t blk, struct nandfs_vinfo **vipp, struct nandfs_bdesc **bdpp)
+{
+ int i;
+
+ DPRINTF(CLEAN, ("%s nbinfos %x\n", __func__, segsum->ss_nbinfos));
+ for (i = 0; i < segsum->ss_nbinfos; i++) {
+ if (binfo[i].bi_v.bi_ino == NANDFS_DAT_INO) {
+ (*bdpp)->bd_oblocknr = blk + segsum->ss_nblocks -
+ segsum->ss_nbinfos + i;
+ /*
+ * XXX Hack
+ */
+ if (segsum->ss_flags & NANDFS_SS_SR)
+ (*bdpp)->bd_oblocknr--;
+ (*bdpp)->bd_level = binfo[i].bi_dat.bi_level;
+ (*bdpp)->bd_offset = binfo[i].bi_dat.bi_blkoff;
+ (*bdpp)++;
+ } else {
+ (*vipp)->nvi_ino = binfo[i].bi_v.bi_ino;
+ (*vipp)->nvi_vblocknr = binfo[i].bi_v.bi_vblocknr;
+ (*vipp)++;
+ }
+ }
+}
+
+static int
+nandfs_cleaner_iterate_segment(struct nandfs_device *fsdev, uint64_t segno,
+ struct nandfs_vinfo **vipp, struct nandfs_bdesc **bdpp, int *select)
+{
+ struct nandfs_segment_summary *segsum;
+ union nandfs_binfo *binfo;
+ struct buf *bp;
+ uint32_t nblocks;
+ nandfs_daddr_t curr, start, end;
+ int error = 0;
+
+ nandfs_get_segment_range(fsdev, segno, &start, &end);
+
+ DPRINTF(CLEAN, ("%s: segno %jx start %jx end %jx\n", __func__, segno,
+ start, end));
+
+ *select = 0;
+
+ for (curr = start; curr < end; curr += nblocks) {
+ error = nandfs_dev_bread(fsdev, curr, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ nandfs_error("%s: couldn't load segment summary of %jx: %d\n",
+ __func__, segno, error);
+ return (error);
+ }
+
+ segsum = (struct nandfs_segment_summary *)bp->b_data;
+ binfo = (union nandfs_binfo *)(bp->b_data + segsum->ss_bytes);
+
+ if (!nandfs_segsum_valid(segsum)) {
+ brelse(bp);
+ nandfs_error("nandfs: invalid summary of segment %jx\n", segno);
+ return (error);
+ }
+
+ DPRINTF(CLEAN, ("%s: %jx magic %x bytes %x nblocks %x nbinfos "
+ "%x\n", __func__, segno, segsum->ss_magic, segsum->ss_bytes,
+ segsum->ss_nblocks, segsum->ss_nbinfos));
+
+ nandfs_cleaner_iterate_psegment(fsdev, segsum, binfo, curr,
+ vipp, bdpp);
+ nblocks = segsum->ss_nblocks;
+ brelse(bp);
+ }
+
+ if (error == 0)
+ *select = 1;
+
+ return (error);
+}
+
+static int
+nandfs_cleaner_choose_segment(struct nandfs_device *fsdev, uint64_t **segpp,
+ uint64_t nsegs, uint64_t *rseg)
+{
+ struct nandfs_suinfo *suinfo;
+ uint64_t i, ssegs;
+ int error;
+
+ suinfo = malloc(sizeof(*suinfo) * nsegs, M_NANDFSTEMP,
+ M_ZERO | M_WAITOK);
+
+ if (*rseg >= fsdev->nd_fsdata.f_nsegments)
+ *rseg = 0;
+
+retry:
+ error = nandfs_get_segment_info_filter(fsdev, suinfo, nsegs, *rseg,
+ &ssegs, NANDFS_SEGMENT_USAGE_DIRTY,
+ NANDFS_SEGMENT_USAGE_ACTIVE | NANDFS_SEGMENT_USAGE_ERROR |
+ NANDFS_SEGMENT_USAGE_GC);
+ if (error) {
+ nandfs_error("%s:%d", __FILE__, __LINE__);
+ goto out;
+ }
+ if (ssegs == 0 && *rseg != 0) {
+ *rseg = 0;
+ goto retry;
+ }
+ if (ssegs > 0) {
+ print_suinfo(suinfo, ssegs);
+
+ for (i = 0; i < ssegs; i++) {
+ (**segpp) = suinfo[i].nsi_num;
+ (*segpp)++;
+ }
+ *rseg = suinfo[i - 1].nsi_num + 1;
+ }
+
+out:
+ free(suinfo, M_NANDFSTEMP);
+ return (error);
+}
+
+static int
+nandfs_cleaner_body(struct nandfs_device *fsdev, uint64_t *rseg)
+{
+ struct nandfs_vinfo *vinfo, *vip, *vipi;
+ struct nandfs_bdesc *bdesc, *bdp, *bdpi;
+ struct nandfs_cpstat cpstat;
+ struct nandfs_cpinfo *cpinfo = NULL;
+ uint64_t *segnums, *segp;
+ int select, selected;
+ int error = 0;
+ int nsegs;
+ int i;
+
+ nsegs = nandfs_cleaner_segments;
+
+ vip = vinfo = malloc(sizeof(*vinfo) *
+ fsdev->nd_fsdata.f_blocks_per_segment * nsegs, M_NANDFSTEMP,
+ M_ZERO | M_WAITOK);
+ bdp = bdesc = malloc(sizeof(*bdesc) *
+ fsdev->nd_fsdata.f_blocks_per_segment * nsegs, M_NANDFSTEMP,
+ M_ZERO | M_WAITOK);
+ segp = segnums = malloc(sizeof(*segnums) * nsegs, M_NANDFSTEMP,
+ M_WAITOK);
+
+ error = nandfs_cleaner_choose_segment(fsdev, &segp, nsegs, rseg);
+ if (error) {
+ nandfs_error("%s:%d", __FILE__, __LINE__);
+ goto out;
+ }
+
+ if (segnums == segp)
+ goto out;
+
+ selected = 0;
+ for (i = 0; i < segp - segnums; i++) {
+ error = nandfs_cleaner_iterate_segment(fsdev, segnums[i], &vip,
+ &bdp, &select);
+ if (error) {
+ /*
+ * XXX deselect (see below)?
+ */
+ goto out;
+ }
+ if (!select)
+ segnums[i] = NANDFS_NOSEGMENT;
+ else {
+ error = nandfs_markgc_segment(fsdev, segnums[i]);
+ if (error) {
+ nandfs_error("%s:%d\n", __FILE__, __LINE__);
+ goto out;
+ }
+ selected++;
+ }
+ }
+
+ if (selected == 0) {
+ MPASS(vinfo == vip);
+ MPASS(bdesc == bdp);
+ goto out;
+ }
+
+ error = nandfs_get_cpstat(fsdev->nd_cp_node, &cpstat);
+ if (error) {
+ nandfs_error("%s:%d\n", __FILE__, __LINE__);
+ goto out;
+ }
+
+ if (cpstat.ncp_nss != 0) {
+ cpinfo = malloc(sizeof(struct nandfs_cpinfo) * cpstat.ncp_nss,
+ M_NANDFSTEMP, M_WAITOK);
+ error = nandfs_get_cpinfo(fsdev->nd_cp_node, 1, NANDFS_SNAPSHOT,
+ cpinfo, cpstat.ncp_nss, NULL);
+ if (error) {
+ nandfs_error("%s:%d\n", __FILE__, __LINE__);
+ goto out_locked;
+ }
+ }
+
+ NANDFS_WRITELOCK(fsdev);
+ DPRINTF(CLEAN, ("%s: got lock\n", __func__));
+
+ error = nandfs_get_dat_vinfo(fsdev, vinfo, vip - vinfo);
+ if (error) {
+ nandfs_error("%s:%d\n", __FILE__, __LINE__);
+ goto out_locked;
+ }
+
+ nandfs_cleaner_vinfo_mark_alive(fsdev, vinfo, vip - vinfo, cpinfo,
+ cpstat.ncp_nss);
+
+ error = nandfs_get_dat_bdescs(fsdev, bdesc, bdp - bdesc);
+ if (error) {
+ nandfs_error("%s:%d\n", __FILE__, __LINE__);
+ goto out_locked;
+ }
+
+ nandfs_cleaner_bdesc_mark_alive(fsdev, bdesc, bdp - bdesc);
+
+ DPRINTF(CLEAN, ("got:\n"));
+ for (vipi = vinfo; vipi < vip; vipi++) {
+ DPRINTF(CLEAN, ("v ino %jx vblocknr %jx start %jx end %jx "
+ "alive %d\n", vipi->nvi_ino, vipi->nvi_vblocknr,
+ vipi->nvi_start, vipi->nvi_end, vipi->nvi_alive));
+ }
+ for (bdpi = bdesc; bdpi < bdp; bdpi++) {
+ DPRINTF(CLEAN, ("b oblocknr %jx blocknr %jx offset %jx "
+ "alive %d\n", bdpi->bd_oblocknr, bdpi->bd_blocknr,
+ bdpi->bd_offset, bdpi->bd_alive));
+ }
+ DPRINTF(CLEAN, ("end list\n"));
+
+ error = nandfs_cleaner_clean_segments(fsdev, vinfo, vip - vinfo, NULL,
+ 0, bdesc, bdp - bdesc, segnums, segp - segnums);
+ if (error)
+ nandfs_error("%s:%d\n", __FILE__, __LINE__);
+
+out_locked:
+ NANDFS_WRITEUNLOCK(fsdev);
+out:
+ free(cpinfo, M_NANDFSTEMP);
+ free(segnums, M_NANDFSTEMP);
+ free(bdesc, M_NANDFSTEMP);
+ free(vinfo, M_NANDFSTEMP);
+
+ return (error);
+}
+
+static void
+nandfs_cleaner(struct nandfs_device *fsdev)
+{
+ uint64_t checked_seg = 0;
+ int error;
+
+ while (!nandfs_cleaner_finished(fsdev)) {
+ if (!nandfs_cleaner_enable || rebooting)
+ continue;
+
+ DPRINTF(CLEAN, ("%s: run started\n", __func__));
+
+ fsdev->nd_cleaning = 1;
+
+ error = nandfs_cleaner_body(fsdev, &checked_seg);
+
+ DPRINTF(CLEAN, ("%s: run finished error %d\n", __func__,
+ error));
+ }
+
+ DPRINTF(CLEAN, ("%s: exiting\n", __func__));
+ kthread_exit();
+}
+
+static int
+nandfs_cleaner_clean_segments(struct nandfs_device *nffsdev,
+ struct nandfs_vinfo *vinfo, uint32_t nvinfo,
+ struct nandfs_period *pd, uint32_t npd,
+ struct nandfs_bdesc *bdesc, uint32_t nbdesc,
+ uint64_t *segments, uint32_t nsegs)
+{
+ struct nandfs_node *gc;
+ struct buf *bp;
+ uint32_t i;
+ int error = 0;
+
+ gc = nffsdev->nd_gc_node;
+
+ DPRINTF(CLEAN, ("%s: enter\n", __func__));
+
+ VOP_LOCK(NTOV(gc), LK_EXCLUSIVE);
+ for (i = 0; i < nvinfo; i++) {
+ if (!vinfo[i].nvi_alive)
+ continue;
+ DPRINTF(CLEAN, ("%s: read vblknr:%#jx blk:%#jx\n",
+ __func__, (uintmax_t)vinfo[i].nvi_vblocknr,
+ (uintmax_t)vinfo[i].nvi_blocknr));
+ error = nandfs_bread(nffsdev->nd_gc_node, vinfo[i].nvi_blocknr,
+ NULL, 0, &bp);
+ if (error) {
+ nandfs_error("%s:%d", __FILE__, __LINE__);
+ VOP_UNLOCK(NTOV(gc), 0);
+ goto out;
+ }
+ nandfs_vblk_set(bp, vinfo[i].nvi_vblocknr);
+ nandfs_buf_set(bp, NANDFS_VBLK_ASSIGNED);
+ nandfs_dirty_buf(bp, 1);
+ }
+ VOP_UNLOCK(NTOV(gc), 0);
+
+ /* Delete checkpoints */
+ for (i = 0; i < npd; i++) {
+ DPRINTF(CLEAN, ("delete checkpoint: %jx\n",
+ (uintmax_t)pd[i].p_start));
+ error = nandfs_delete_cp(nffsdev->nd_cp_node, pd[i].p_start,
+ pd[i].p_end);
+ if (error) {
+ nandfs_error("%s:%d", __FILE__, __LINE__);
+ goto out;
+ }
+ }
+
+ /* Update vblocks */
+ for (i = 0; i < nvinfo; i++) {
+ if (vinfo[i].nvi_alive)
+ continue;
+ DPRINTF(CLEAN, ("freeing vblknr: %jx\n", vinfo[i].nvi_vblocknr));
+ error = nandfs_vblock_free(nffsdev, vinfo[i].nvi_vblocknr);
+ if (error) {
+ nandfs_error("%s:%d", __FILE__, __LINE__);
+ goto out;
+ }
+ }
+
+ error = nandfs_process_bdesc(nffsdev, bdesc, nbdesc);
+ if (error) {
+ nandfs_error("%s:%d", __FILE__, __LINE__);
+ goto out;
+ }
+
+ /* Add segments to clean */
+ if (nffsdev->nd_free_count) {
+ nffsdev->nd_free_base = realloc(nffsdev->nd_free_base,
+ (nffsdev->nd_free_count + nsegs) * sizeof(uint64_t),
+ M_NANDFSTEMP, M_WAITOK | M_ZERO);
+ memcpy(&nffsdev->nd_free_base[nffsdev->nd_free_count], segments,
+ nsegs * sizeof(uint64_t));
+ nffsdev->nd_free_count += nsegs;
+ } else {
+ nffsdev->nd_free_base = malloc(nsegs * sizeof(uint64_t),
+ M_NANDFSTEMP, M_WAITOK|M_ZERO);
+ memcpy(nffsdev->nd_free_base, segments,
+ nsegs * sizeof(uint64_t));
+ nffsdev->nd_free_count = nsegs;
+ }
+
+out:
+
+ DPRINTF(CLEAN, ("%s: exit error %d\n", __func__, error));
+
+ return (error);
+}
+
+static int
+nandfs_process_bdesc(struct nandfs_device *nffsdev, struct nandfs_bdesc *bd,
+ uint64_t nmembs)
+{
+ struct nandfs_node *dat_node;
+ struct buf *bp;
+ uint64_t i;
+ int error;
+
+ dat_node = nffsdev->nd_dat_node;
+
+ VOP_LOCK(NTOV(dat_node), LK_EXCLUSIVE);
+
+ for (i = 0; i < nmembs; i++) {
+ if (!bd[i].bd_alive)
+ continue;
+ DPRINTF(CLEAN, ("%s: idx %jx offset %jx\n",
+ __func__, i, bd[i].bd_offset));
+ if (bd[i].bd_level) {
+ error = nandfs_bread_meta(dat_node, bd[i].bd_offset,
+ NULL, 0, &bp);
+ if (error) {
+ nandfs_error("%s: cannot read dat node "
+ "level:%d\n", __func__, bd[i].bd_level);
+ brelse(bp);
+ VOP_UNLOCK(NTOV(dat_node), 0);
+ return (error);
+ }
+ nandfs_dirty_buf_meta(bp, 1);
+ nandfs_bmap_dirty_blocks(VTON(bp->b_vp), bp, 1);
+ } else {
+ error = nandfs_bread(dat_node, bd[i].bd_offset, NULL,
+ 0, &bp);
+ if (error) {
+ nandfs_error("%s: cannot read dat node\n",
+ __func__);
+ brelse(bp);
+ VOP_UNLOCK(NTOV(dat_node), 0);
+ return (error);
+ }
+ nandfs_dirty_buf(bp, 1);
+ }
+ DPRINTF(CLEAN, ("%s: bp: %p\n", __func__, bp));
+ }
+
+ VOP_UNLOCK(NTOV(dat_node), 0);
+
+ return (0);
+}
diff --git a/sys/fs/nandfs/nandfs_cpfile.c b/sys/fs/nandfs/nandfs_cpfile.c
new file mode 100644
index 000000000000..8814fc053ce0
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_cpfile.c
@@ -0,0 +1,776 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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/systm.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/mutex.h>
+#include <sys/namei.h>
+#include <sys/sysctl.h>
+#include <sys/vnode.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_page.h>
+
+#include "nandfs_mount.h"
+#include "nandfs.h"
+#include "nandfs_subr.h"
+
+
+static int
+nandfs_checkpoint_size(struct nandfs_device *fsdev)
+{
+
+ return (fsdev->nd_fsdata.f_checkpoint_size);
+}
+
+static int
+nandfs_checkpoint_blk_offset(struct nandfs_device *fsdev, uint64_t cn,
+ uint64_t *blk, uint64_t *offset)
+{
+ uint64_t off;
+ uint16_t cp_size, cp_per_blk;
+
+ KASSERT((cn), ("checkpoing cannot be zero"));
+
+ cp_size = fsdev->nd_fsdata.f_checkpoint_size;
+ cp_per_blk = fsdev->nd_blocksize / cp_size;
+ off = roundup(sizeof(struct nandfs_cpfile_header), cp_size) / cp_size;
+ off += (cn - 1);
+
+ *blk = off / cp_per_blk;
+ *offset = (off % cp_per_blk) * cp_size;
+
+ return (0);
+}
+
+static int
+nandfs_checkpoint_blk_remaining(struct nandfs_device *fsdev, uint64_t cn,
+ uint64_t blk, uint64_t offset)
+{
+ uint16_t cp_size, cp_remaining;
+
+ cp_size = fsdev->nd_fsdata.f_checkpoint_size;
+ cp_remaining = (fsdev->nd_blocksize - offset) / cp_size;
+
+ return (cp_remaining);
+}
+
+int
+nandfs_get_checkpoint(struct nandfs_device *fsdev, struct nandfs_node *cp_node,
+ uint64_t cn)
+{
+ struct buf *bp;
+ uint64_t blk, offset;
+ int error;
+
+ if (cn != fsdev->nd_last_cno && cn != (fsdev->nd_last_cno + 1)) {
+ return (-1);
+ }
+
+ error = nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (-1);
+ }
+
+ error = nandfs_dirty_buf(bp, 0);
+ if (error)
+ return (-1);
+
+
+ nandfs_checkpoint_blk_offset(fsdev, cn, &blk, &offset);
+
+ if (blk != 0) {
+ if (blk < cp_node->nn_inode.i_blocks)
+ error = nandfs_bread(cp_node, blk, NOCRED, 0, &bp);
+ else
+ error = nandfs_bcreate(cp_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ if (bp)
+ brelse(bp);
+ return (-1);
+ }
+
+ nandfs_dirty_buf(bp, 1);
+ }
+
+ DPRINTF(CPFILE, ("%s: cn:%#jx entry block:%#jx offset:%#jx\n",
+ __func__, (uintmax_t)cn, (uintmax_t)blk, (uintmax_t)offset));
+
+ return (0);
+}
+
+int
+nandfs_set_checkpoint(struct nandfs_device *fsdev, struct nandfs_node *cp_node,
+ uint64_t cn, struct nandfs_inode *ifile_inode, uint64_t nblocks)
+{
+ struct nandfs_cpfile_header *cnh;
+ struct nandfs_checkpoint *cnp;
+ struct buf *bp;
+ uint64_t blk, offset;
+ int error;
+
+ if (cn != fsdev->nd_last_cno && cn != (fsdev->nd_last_cno + 1)) {
+ nandfs_error("%s: trying to set invalid chekpoint %jx - %jx\n",
+ __func__, cn, fsdev->nd_last_cno);
+ return (-1);
+ }
+
+ error = nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return error;
+ }
+
+ cnh = (struct nandfs_cpfile_header *) bp->b_data;
+ cnh->ch_ncheckpoints++;
+
+ nandfs_checkpoint_blk_offset(fsdev, cn, &blk, &offset);
+
+ if(blk != 0) {
+ brelse(bp);
+ error = nandfs_bread(cp_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return error;
+ }
+ }
+
+ cnp = (struct nandfs_checkpoint *)((uint8_t *)bp->b_data + offset);
+ cnp->cp_flags = 0;
+ cnp->cp_checkpoints_count = 1;
+ memset(&cnp->cp_snapshot_list, 0, sizeof(struct nandfs_snapshot_list));
+ cnp->cp_cno = cn;
+ cnp->cp_create = fsdev->nd_ts.tv_sec;
+ cnp->cp_nblk_inc = nblocks;
+ cnp->cp_blocks_count = 0;
+ memcpy (&cnp->cp_ifile_inode, ifile_inode, sizeof(cnp->cp_ifile_inode));
+
+ DPRINTF(CPFILE, ("%s: cn:%#jx ctime:%#jx nblk:%#jx\n",
+ __func__, (uintmax_t)cn, (uintmax_t)cnp->cp_create,
+ (uintmax_t)nblocks));
+
+ brelse(bp);
+ return (0);
+}
+
+static int
+nandfs_cp_mounted(struct nandfs_device *nandfsdev, uint64_t cno)
+{
+ struct nandfsmount *nmp;
+ int mounted = 0;
+
+ mtx_lock(&nandfsdev->nd_mutex);
+ /* No double-mounting of the same checkpoint */
+ STAILQ_FOREACH(nmp, &nandfsdev->nd_mounts, nm_next_mount) {
+ if (nmp->nm_mount_args.cpno == cno) {
+ mounted = 1;
+ break;
+ }
+ }
+ mtx_unlock(&nandfsdev->nd_mutex);
+
+ return (mounted);
+}
+
+static int
+nandfs_cp_set_snapshot(struct nandfs_node *cp_node, uint64_t cno)
+{
+ struct nandfs_device *fsdev;
+ struct nandfs_cpfile_header *cnh;
+ struct nandfs_checkpoint *cnp;
+ struct nandfs_snapshot_list *list;
+ struct buf *bp;
+ uint64_t blk, prev_blk, offset;
+ uint64_t curr, prev;
+ int error;
+
+ fsdev = cp_node->nn_nandfsdev;
+
+ /* Get snapshot data */
+ nandfs_checkpoint_blk_offset(fsdev, cno, &blk, &offset);
+ error = nandfs_bread(cp_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ if (cnp->cp_flags & NANDFS_CHECKPOINT_INVALID) {
+ brelse(bp);
+ return (ENOENT);
+ }
+ if ((cnp->cp_flags & NANDFS_CHECKPOINT_SNAPSHOT)) {
+ brelse(bp);
+ return (EINVAL);
+ }
+
+ brelse(bp);
+ /* Get list from header */
+ error = nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+
+ cnh = (struct nandfs_cpfile_header *) bp->b_data;
+ list = &cnh->ch_snapshot_list;
+ prev = list->ssl_prev;
+ brelse(bp);
+ prev_blk = ~(0);
+ curr = 0;
+ while (prev > cno) {
+ curr = prev;
+ nandfs_checkpoint_blk_offset(fsdev, prev, &prev_blk, &offset);
+ error = nandfs_bread(cp_node, prev_blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ list = &cnp->cp_snapshot_list;
+ prev = list->ssl_prev;
+ brelse(bp);
+ }
+
+ if (curr == 0) {
+ nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ cnh = (struct nandfs_cpfile_header *) bp->b_data;
+ list = &cnh->ch_snapshot_list;
+ } else {
+ nandfs_checkpoint_blk_offset(fsdev, curr, &blk, &offset);
+ error = nandfs_bread(cp_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ list = &cnp->cp_snapshot_list;
+ }
+
+ list->ssl_prev = cno;
+ error = nandfs_dirty_buf(bp, 0);
+ if (error)
+ return (error);
+
+
+ /* Update snapshot for cno */
+ nandfs_checkpoint_blk_offset(fsdev, cno, &blk, &offset);
+ error = nandfs_bread(cp_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ list = &cnp->cp_snapshot_list;
+ list->ssl_prev = prev;
+ list->ssl_next = curr;
+ cnp->cp_flags |= NANDFS_CHECKPOINT_SNAPSHOT;
+ nandfs_dirty_buf(bp, 1);
+
+ if (prev == 0) {
+ nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ cnh = (struct nandfs_cpfile_header *) bp->b_data;
+ list = &cnh->ch_snapshot_list;
+ } else {
+ /* Update snapshot list for prev */
+ nandfs_checkpoint_blk_offset(fsdev, prev, &blk, &offset);
+ error = nandfs_bread(cp_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ list = &cnp->cp_snapshot_list;
+ }
+ list->ssl_next = cno;
+ nandfs_dirty_buf(bp, 1);
+
+ /* Update header */
+ error = nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnh = (struct nandfs_cpfile_header *) bp->b_data;
+ cnh->ch_nsnapshots++;
+ nandfs_dirty_buf(bp, 1);
+
+ return (0);
+}
+
+static int
+nandfs_cp_clr_snapshot(struct nandfs_node *cp_node, uint64_t cno)
+{
+ struct nandfs_device *fsdev;
+ struct nandfs_cpfile_header *cnh;
+ struct nandfs_checkpoint *cnp;
+ struct nandfs_snapshot_list *list;
+ struct buf *bp;
+ uint64_t blk, offset, snapshot_cnt;
+ uint64_t next, prev;
+ int error;
+
+ fsdev = cp_node->nn_nandfsdev;
+
+ /* Get snapshot data */
+ nandfs_checkpoint_blk_offset(fsdev, cno, &blk, &offset);
+ error = nandfs_bread(cp_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ if (cnp->cp_flags & NANDFS_CHECKPOINT_INVALID) {
+ brelse(bp);
+ return (ENOENT);
+ }
+ if (!(cnp->cp_flags & NANDFS_CHECKPOINT_SNAPSHOT)) {
+ brelse(bp);
+ return (EINVAL);
+ }
+
+ list = &cnp->cp_snapshot_list;
+ next = list->ssl_next;
+ prev = list->ssl_prev;
+ brelse(bp);
+
+ /* Get previous snapshot */
+ if (prev != 0) {
+ nandfs_checkpoint_blk_offset(fsdev, prev, &blk, &offset);
+ error = nandfs_bread(cp_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ list = &cnp->cp_snapshot_list;
+ } else {
+ nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ cnh = (struct nandfs_cpfile_header *) bp->b_data;
+ list = &cnh->ch_snapshot_list;
+ }
+
+ list->ssl_next = next;
+ error = nandfs_dirty_buf(bp, 0);
+ if (error)
+ return (error);
+
+ /* Get next snapshot */
+ if (next != 0) {
+ nandfs_checkpoint_blk_offset(fsdev, next, &blk, &offset);
+ error = nandfs_bread(cp_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ list = &cnp->cp_snapshot_list;
+ } else {
+ nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ cnh = (struct nandfs_cpfile_header *) bp->b_data;
+ list = &cnh->ch_snapshot_list;
+ }
+ list->ssl_prev = prev;
+ nandfs_dirty_buf(bp, 1);
+
+ /* Update snapshot list for cno */
+ nandfs_checkpoint_blk_offset(fsdev, cno, &blk, &offset);
+ error = nandfs_bread(cp_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ list = &cnp->cp_snapshot_list;
+ list->ssl_prev = 0;
+ list->ssl_next = 0;
+ cnp->cp_flags &= !NANDFS_CHECKPOINT_SNAPSHOT;
+ nandfs_dirty_buf(bp, 1);
+
+ /* Update header */
+ error = nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnh = (struct nandfs_cpfile_header *) bp->b_data;
+ snapshot_cnt = cnh->ch_nsnapshots;
+ snapshot_cnt--;
+ cnh->ch_nsnapshots = snapshot_cnt;
+ nandfs_dirty_buf(bp, 1);
+
+ return (0);
+}
+
+int
+nandfs_chng_cpmode(struct nandfs_node *node, struct nandfs_cpmode *ncpm)
+{
+ struct nandfs_device *fsdev;
+ uint64_t cno = ncpm->ncpm_cno;
+ int mode = ncpm->ncpm_mode;
+ int ret;
+
+ fsdev = node->nn_nandfsdev;
+ VOP_LOCK(NTOV(node), LK_EXCLUSIVE);
+ switch (mode) {
+ case NANDFS_CHECKPOINT:
+ if (nandfs_cp_mounted(fsdev, cno)) {
+ ret = EBUSY;
+ } else
+ ret = nandfs_cp_clr_snapshot(node, cno);
+ break;
+ case NANDFS_SNAPSHOT:
+ ret = nandfs_cp_set_snapshot(node, cno);
+ break;
+ default:
+ ret = EINVAL;
+ break;
+ }
+ VOP_UNLOCK(NTOV(node), 0);
+
+ return (ret);
+}
+
+static void
+nandfs_cpinfo_fill(struct nandfs_checkpoint *cnp, struct nandfs_cpinfo *nci)
+{
+
+ nci->nci_flags = cnp->cp_flags;
+ nci->nci_pad = 0;
+ nci->nci_cno = cnp->cp_cno;
+ nci->nci_create = cnp->cp_create;
+ nci->nci_nblk_inc = cnp->cp_nblk_inc;
+ nci->nci_blocks_count = cnp->cp_blocks_count;
+ nci->nci_next = cnp->cp_snapshot_list.ssl_next;
+ DPRINTF(CPFILE, ("%s: cn:%#jx ctime:%#jx\n",
+ __func__, (uintmax_t)cnp->cp_cno,
+ (uintmax_t)cnp->cp_create));
+}
+
+static int
+nandfs_get_cpinfo_cp(struct nandfs_node *node, uint64_t cno,
+ struct nandfs_cpinfo *nci, uint32_t mnmembs, uint32_t *nmembs)
+{
+ struct nandfs_device *fsdev;
+ struct buf *bp;
+ uint64_t blk, offset, last_cno, i;
+ uint16_t remaining;
+ int error;
+#ifdef INVARIANTS
+ uint64_t testblk, testoffset;
+#endif
+
+ if (cno == 0) {
+ return (ENOENT);
+ }
+
+ if (mnmembs < 1) {
+ return (EINVAL);
+ }
+
+ fsdev = node->nn_nandfsdev;
+ last_cno = fsdev->nd_last_cno;
+ DPRINTF(CPFILE, ("%s: cno:%#jx mnmembs: %#jx last:%#jx\n", __func__,
+ (uintmax_t)cno, (uintmax_t)mnmembs,
+ (uintmax_t)fsdev->nd_last_cno));
+
+ /*
+ * do {
+ * get block
+ * read checkpoints until we hit last checkpoint, end of block or
+ * requested number
+ * } while (last read checkpoint <= last checkpoint on fs &&
+ * read checkpoints < request number);
+ */
+ *nmembs = i = 0;
+ do {
+ nandfs_checkpoint_blk_offset(fsdev, cno, &blk, &offset);
+ remaining = nandfs_checkpoint_blk_remaining(fsdev, cno,
+ blk, offset);
+ error = nandfs_bread(node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+
+ while (cno <= last_cno && i < mnmembs && remaining) {
+#ifdef INVARIANTS
+ nandfs_checkpoint_blk_offset(fsdev, cno, &testblk,
+ &testoffset);
+ KASSERT(testblk == blk, ("testblk != blk"));
+ KASSERT(testoffset == offset, ("testoffset != offset"));
+#endif
+ DPRINTF(CPFILE, ("%s: cno %#jx\n", __func__,
+ (uintmax_t)cno));
+
+ nandfs_cpinfo_fill((struct nandfs_checkpoint *)
+ (bp->b_data + offset), nci);
+ offset += nandfs_checkpoint_size(fsdev);
+ i++;
+ nci++;
+ cno++;
+ (*nmembs)++;
+ remaining--;
+ }
+ brelse(bp);
+ } while (cno <= last_cno && i < mnmembs);
+
+ return (0);
+}
+
+static int
+nandfs_get_cpinfo_sp(struct nandfs_node *node, uint64_t cno,
+ struct nandfs_cpinfo *nci, uint32_t mnmembs, uint32_t *nmembs)
+{
+ struct nandfs_checkpoint *cnp;
+ struct nandfs_cpfile_header *cnh;
+ struct nandfs_device *fsdev;
+ struct buf *bp = NULL;
+ uint64_t curr = 0;
+ uint64_t blk, offset, curr_cno;
+ uint32_t flag;
+ int i, error;
+
+ if (cno == 0 || cno == ~(0))
+ return (ENOENT);
+
+ fsdev = node->nn_nandfsdev;
+ curr_cno = cno;
+
+ if (nmembs)
+ *nmembs = 0;
+ if (curr_cno == 1) {
+ /* Get list from header */
+ error = nandfs_bread(node, 0, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ cnh = (struct nandfs_cpfile_header *) bp->b_data;
+ curr_cno = cnh->ch_snapshot_list.ssl_next;
+ brelse(bp);
+ bp = NULL;
+
+ /* No snapshots */
+ if (curr_cno == 0)
+ return (0);
+ }
+
+ for (i = 0; i < mnmembs; i++, nci++) {
+ nandfs_checkpoint_blk_offset(fsdev, curr_cno, &blk, &offset);
+ if (i == 0 || curr != blk) {
+ if (bp)
+ brelse(bp);
+ error = nandfs_bread(node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (ENOENT);
+ }
+ curr = blk;
+ }
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ flag = cnp->cp_flags;
+ if (!(flag & NANDFS_CHECKPOINT_SNAPSHOT) ||
+ (flag & NANDFS_CHECKPOINT_INVALID))
+ break;
+
+ nci->nci_flags = flag;
+ nci->nci_pad = 0;
+ nci->nci_cno = cnp->cp_cno;
+ nci->nci_create = cnp->cp_create;
+ nci->nci_nblk_inc = cnp->cp_nblk_inc;
+ nci->nci_blocks_count = cnp->cp_blocks_count;
+ nci->nci_next = cnp->cp_snapshot_list.ssl_next;
+ if (nmembs)
+ (*nmembs)++;
+
+ curr_cno = nci->nci_next;
+ if (!curr_cno)
+ break;
+ }
+
+ brelse(bp);
+
+ return (0);
+}
+
+int
+nandfs_get_cpinfo(struct nandfs_node *node, uint64_t cno, uint16_t flags,
+ struct nandfs_cpinfo *nci, uint32_t nmembs, uint32_t *nnmembs)
+{
+ int error;
+
+ VOP_LOCK(NTOV(node), LK_EXCLUSIVE);
+ switch (flags) {
+ case NANDFS_CHECKPOINT:
+ error = nandfs_get_cpinfo_cp(node, cno, nci, nmembs, nnmembs);
+ break;
+ case NANDFS_SNAPSHOT:
+ error = nandfs_get_cpinfo_sp(node, cno, nci, nmembs, nnmembs);
+ break;
+ default:
+ error = EINVAL;
+ break;
+ }
+ VOP_UNLOCK(NTOV(node), 0);
+
+ return (error);
+}
+
+int
+nandfs_get_cpinfo_ioctl(struct nandfs_node *node, struct nandfs_argv *nargv)
+{
+ struct nandfs_cpinfo *nci;
+ uint64_t cno = nargv->nv_index;
+ void *buf = (void *)((uintptr_t)nargv->nv_base);
+ uint16_t flags = nargv->nv_flags;
+ uint32_t nmembs = 0;
+ int error;
+
+ if (nargv->nv_nmembs > NANDFS_CPINFO_MAX)
+ return (EINVAL);
+
+ nci = malloc(sizeof(struct nandfs_cpinfo) * nargv->nv_nmembs,
+ M_NANDFSTEMP, M_WAITOK | M_ZERO);
+
+ error = nandfs_get_cpinfo(node, cno, flags, nci, nargv->nv_nmembs, &nmembs);
+
+ if (error == 0) {
+ nargv->nv_nmembs = nmembs;
+ error = copyout(nci, buf,
+ sizeof(struct nandfs_cpinfo) * nmembs);
+ }
+
+ free(nci, M_NANDFSTEMP);
+ return (error);
+}
+
+int
+nandfs_delete_cp(struct nandfs_node *node, uint64_t start, uint64_t end)
+{
+ struct nandfs_checkpoint *cnp;
+ struct nandfs_device *fsdev;
+ struct buf *bp;
+ uint64_t cno = start, blk, offset;
+ int error;
+
+ DPRINTF(CPFILE, ("%s: delete cno %jx-%jx\n", __func__, start, end));
+ VOP_LOCK(NTOV(node), LK_EXCLUSIVE);
+ fsdev = node->nn_nandfsdev;
+ for (cno = start; cno <= end; cno++) {
+ if (!cno)
+ continue;
+
+ nandfs_checkpoint_blk_offset(fsdev, cno, &blk, &offset);
+ error = nandfs_bread(node, blk, NOCRED, 0, &bp);
+ if (error) {
+ VOP_UNLOCK(NTOV(node), 0);
+ brelse(bp);
+ return (error);
+ }
+
+ cnp = (struct nandfs_checkpoint *)(bp->b_data + offset);
+ if (cnp->cp_flags & NANDFS_CHECKPOINT_SNAPSHOT) {
+ brelse(bp);
+ VOP_UNLOCK(NTOV(node), 0);
+ return (0);
+ }
+
+ cnp->cp_flags |= NANDFS_CHECKPOINT_INVALID;
+
+ error = nandfs_dirty_buf(bp, 0);
+ if (error)
+ return (error);
+ }
+ VOP_UNLOCK(NTOV(node), 0);
+
+ return (0);
+}
+
+int
+nandfs_make_snap(struct nandfs_device *fsdev, uint64_t *cno)
+{
+ struct nandfs_cpmode cpm;
+ int error;
+
+ *cno = cpm.ncpm_cno = fsdev->nd_last_cno;
+ cpm.ncpm_mode = NANDFS_SNAPSHOT;
+ error = nandfs_chng_cpmode(fsdev->nd_cp_node, &cpm);
+ return (error);
+}
+
+int
+nandfs_delete_snap(struct nandfs_device *fsdev, uint64_t cno)
+{
+ struct nandfs_cpmode cpm;
+ int error;
+
+ cpm.ncpm_cno = cno;
+ cpm.ncpm_mode = NANDFS_CHECKPOINT;
+ error = nandfs_chng_cpmode(fsdev->nd_cp_node, &cpm);
+ return (error);
+}
+
+int nandfs_get_cpstat(struct nandfs_node *cp_node, struct nandfs_cpstat *ncp)
+{
+ struct nandfs_device *fsdev;
+ struct nandfs_cpfile_header *cnh;
+ struct buf *bp;
+ int error;
+
+ VOP_LOCK(NTOV(cp_node), LK_EXCLUSIVE);
+ fsdev = cp_node->nn_nandfsdev;
+
+ /* Get header */
+ error = nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ VOP_UNLOCK(NTOV(cp_node), 0);
+ return (error);
+ }
+ cnh = (struct nandfs_cpfile_header *) bp->b_data;
+ ncp->ncp_cno = fsdev->nd_last_cno;
+ ncp->ncp_ncps = cnh->ch_ncheckpoints;
+ ncp->ncp_nss = cnh->ch_nsnapshots;
+ DPRINTF(CPFILE, ("%s: cno:%#jx ncps:%#jx nss:%#jx\n",
+ __func__, ncp->ncp_cno, ncp->ncp_ncps, ncp->ncp_nss));
+ brelse(bp);
+ VOP_UNLOCK(NTOV(cp_node), 0);
+
+ return (0);
+}
diff --git a/sys/fs/nandfs/nandfs_dat.c b/sys/fs/nandfs/nandfs_dat.c
new file mode 100644
index 000000000000..799113db7805
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_dat.c
@@ -0,0 +1,344 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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/systm.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/mutex.h>
+#include <sys/namei.h>
+#include <sys/sysctl.h>
+#include <sys/vnode.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_page.h>
+
+#include <fs/nandfs/nandfs_mount.h>
+#include <fs/nandfs/nandfs.h>
+#include <fs/nandfs/nandfs_subr.h>
+
+int
+nandfs_vblock_alloc(struct nandfs_device *nandfsdev, nandfs_daddr_t *vblock)
+{
+ struct nandfs_node *dat;
+ struct nandfs_mdt *mdt;
+ struct nandfs_alloc_request req;
+ struct nandfs_dat_entry *dat_entry;
+ uint64_t start;
+ uint32_t entry;
+ int locked, error;
+
+ dat = nandfsdev->nd_dat_node;
+ mdt = &nandfsdev->nd_dat_mdt;
+ start = nandfsdev->nd_last_cno + 1;
+
+ locked = NANDFS_VOP_ISLOCKED(NTOV(dat));
+ if (!locked)
+ VOP_LOCK(NTOV(dat), LK_EXCLUSIVE);
+ req.entrynum = 0;
+
+ /* Alloc vblock number */
+ error = nandfs_find_free_entry(mdt, dat, &req);
+ if (error) {
+ nandfs_error("%s: cannot find free vblk entry\n",
+ __func__);
+ if (!locked)
+ VOP_UNLOCK(NTOV(dat), 0);
+ return (error);
+ }
+
+ /* Read/create buffer */
+ error = nandfs_get_entry_block(mdt, dat, &req, &entry, 1);
+ if (error) {
+ nandfs_error("%s: cannot get free vblk entry\n",
+ __func__);
+ nandfs_abort_entry(&req);
+ if (!locked)
+ VOP_UNLOCK(NTOV(dat), 0);
+ return (error);
+ }
+
+ /* Fill out vblock data */
+ dat_entry = (struct nandfs_dat_entry *) req.bp_entry->b_data;
+ dat_entry[entry].de_start = start;
+ dat_entry[entry].de_end = UINTMAX_MAX;
+ dat_entry[entry].de_blocknr = 0;
+
+ /* Commit allocation */
+ error = nandfs_alloc_entry(mdt, &req);
+ if (error) {
+ nandfs_error("%s: cannot get free vblk entry\n",
+ __func__);
+ if (!locked)
+ VOP_UNLOCK(NTOV(dat), 0);
+ return (error);
+ }
+
+ /* Return allocated vblock */
+ *vblock = req.entrynum;
+ DPRINTF(DAT, ("%s: allocated vblock %#jx\n",
+ __func__, (uintmax_t)*vblock));
+
+ if (!locked)
+ VOP_UNLOCK(NTOV(dat), 0);
+ return (error);
+}
+
+int
+nandfs_vblock_assign(struct nandfs_device *nandfsdev, nandfs_daddr_t vblock,
+ nandfs_lbn_t block)
+{
+ struct nandfs_node *dat;
+ struct nandfs_mdt *mdt;
+ struct nandfs_alloc_request req;
+ struct nandfs_dat_entry *dat_entry;
+ uint32_t entry;
+ int locked, error;
+
+ dat = nandfsdev->nd_dat_node;
+ mdt = &nandfsdev->nd_dat_mdt;
+
+ locked = NANDFS_VOP_ISLOCKED(NTOV(dat));
+ if (!locked)
+ VOP_LOCK(NTOV(dat), LK_EXCLUSIVE);
+ req.entrynum = vblock;
+
+ error = nandfs_get_entry_block(mdt, dat, &req, &entry, 0);
+ if (!error) {
+ dat_entry = (struct nandfs_dat_entry *) req.bp_entry->b_data;
+ dat_entry[entry].de_blocknr = block;
+
+ DPRINTF(DAT, ("%s: assing vblock %jx->%jx\n",
+ __func__, (uintmax_t)vblock, (uintmax_t)block));
+
+ /*
+ * It is mostly called from syncer() so
+ * we want to force making buf dirty
+ */
+ error = nandfs_dirty_buf(req.bp_entry, 1);
+ }
+
+ if (!locked)
+ VOP_UNLOCK(NTOV(dat), 0);
+
+ return (error);
+}
+
+int
+nandfs_vblock_end(struct nandfs_device *nandfsdev, nandfs_daddr_t vblock)
+{
+ struct nandfs_node *dat;
+ struct nandfs_mdt *mdt;
+ struct nandfs_alloc_request req;
+ struct nandfs_dat_entry *dat_entry;
+ uint64_t end;
+ uint32_t entry;
+ int locked, error;
+
+ dat = nandfsdev->nd_dat_node;
+ mdt = &nandfsdev->nd_dat_mdt;
+ end = nandfsdev->nd_last_cno;
+
+ locked = NANDFS_VOP_ISLOCKED(NTOV(dat));
+ if (!locked)
+ VOP_LOCK(NTOV(dat), LK_EXCLUSIVE);
+ req.entrynum = vblock;
+
+ error = nandfs_get_entry_block(mdt, dat, &req, &entry, 0);
+ if (!error) {
+ dat_entry = (struct nandfs_dat_entry *) req.bp_entry->b_data;
+ dat_entry[entry].de_end = end;
+ DPRINTF(DAT, ("%s: end vblock %#jx at checkpoint %#jx\n",
+ __func__, (uintmax_t)vblock, (uintmax_t)end));
+
+ /*
+ * It is mostly called from syncer() so
+ * we want to force making buf dirty
+ */
+ error = nandfs_dirty_buf(req.bp_entry, 1);
+ }
+
+ if (!locked)
+ VOP_UNLOCK(NTOV(dat), 0);
+
+ return (error);
+}
+
+int
+nandfs_vblock_free(struct nandfs_device *nandfsdev, nandfs_daddr_t vblock)
+{
+ struct nandfs_node *dat;
+ struct nandfs_mdt *mdt;
+ struct nandfs_alloc_request req;
+ int error;
+
+ dat = nandfsdev->nd_dat_node;
+ mdt = &nandfsdev->nd_dat_mdt;
+
+ VOP_LOCK(NTOV(dat), LK_EXCLUSIVE);
+ req.entrynum = vblock;
+
+ error = nandfs_find_entry(mdt, dat, &req);
+ if (!error) {
+ DPRINTF(DAT, ("%s: vblk %#jx\n", __func__, (uintmax_t)vblock));
+ nandfs_free_entry(mdt, &req);
+ }
+
+ VOP_UNLOCK(NTOV(dat), 0);
+ return (error);
+}
+
+int
+nandfs_get_dat_vinfo_ioctl(struct nandfs_device *nandfsdev, struct nandfs_argv *nargv)
+{
+ struct nandfs_vinfo *vinfo;
+ size_t size;
+ int error;
+
+ if (nargv->nv_nmembs > NANDFS_VINFO_MAX)
+ return (EINVAL);
+
+ size = sizeof(struct nandfs_vinfo) * nargv->nv_nmembs;
+ vinfo = malloc(size, M_NANDFSTEMP, M_WAITOK|M_ZERO);
+
+ error = copyin((void *)(uintptr_t)nargv->nv_base, vinfo, size);
+ if (error) {
+ free(vinfo, M_NANDFSTEMP);
+ return (error);
+ }
+
+ error = nandfs_get_dat_vinfo(nandfsdev, vinfo, nargv->nv_nmembs);
+ if (error == 0)
+ error = copyout(vinfo, (void *)(uintptr_t)nargv->nv_base, size);
+ free(vinfo, M_NANDFSTEMP);
+ return (error);
+}
+
+int
+nandfs_get_dat_vinfo(struct nandfs_device *nandfsdev, struct nandfs_vinfo *vinfo,
+ uint32_t nmembs)
+{
+ struct nandfs_node *dat;
+ struct nandfs_mdt *mdt;
+ struct nandfs_alloc_request req;
+ struct nandfs_dat_entry *dat_entry;
+ uint32_t i, idx;
+ int error = 0;
+
+ dat = nandfsdev->nd_dat_node;
+ mdt = &nandfsdev->nd_dat_mdt;
+
+ DPRINTF(DAT, ("%s: nmembs %#x\n", __func__, nmembs));
+
+ VOP_LOCK(NTOV(dat), LK_EXCLUSIVE);
+
+ for (i = 0; i < nmembs; i++) {
+ req.entrynum = vinfo[i].nvi_vblocknr;
+
+ error = nandfs_get_entry_block(mdt, dat,&req, &idx, 0);
+ if (error)
+ break;
+
+ dat_entry = ((struct nandfs_dat_entry *) req.bp_entry->b_data);
+ vinfo[i].nvi_start = dat_entry[idx].de_start;
+ vinfo[i].nvi_end = dat_entry[idx].de_end;
+ vinfo[i].nvi_blocknr = dat_entry[idx].de_blocknr;
+
+ DPRINTF(DAT, ("%s: vinfo: %jx[%jx-%jx]->%jx\n",
+ __func__, vinfo[i].nvi_vblocknr, vinfo[i].nvi_start,
+ vinfo[i].nvi_end, vinfo[i].nvi_blocknr));
+
+ brelse(req.bp_entry);
+ }
+
+ VOP_UNLOCK(NTOV(dat), 0);
+ return (error);
+}
+
+int
+nandfs_get_dat_bdescs_ioctl(struct nandfs_device *nffsdev,
+ struct nandfs_argv *nargv)
+{
+ struct nandfs_bdesc *bd;
+ size_t size;
+ int error;
+
+ size = nargv->nv_nmembs * sizeof(struct nandfs_bdesc);
+ bd = malloc(size, M_NANDFSTEMP, M_WAITOK);
+ error = copyin((void *)(uintptr_t)nargv->nv_base, bd, size);
+ if (error) {
+ free(bd, M_NANDFSTEMP);
+ return (error);
+ }
+
+ error = nandfs_get_dat_bdescs(nffsdev, bd, nargv->nv_nmembs);
+
+ if (error == 0)
+ error = copyout(bd, (void *)(uintptr_t)nargv->nv_base, size);
+
+ free(bd, M_NANDFSTEMP);
+ return (error);
+}
+
+int
+nandfs_get_dat_bdescs(struct nandfs_device *nffsdev, struct nandfs_bdesc *bd,
+ uint32_t nmembs)
+{
+ struct nandfs_node *dat_node;
+ uint64_t map;
+ uint32_t i;
+ int error = 0;
+
+ dat_node = nffsdev->nd_dat_node;
+
+ VOP_LOCK(NTOV(dat_node), LK_EXCLUSIVE);
+
+ for (i = 0; i < nmembs; i++) {
+ DPRINTF(CLEAN,
+ ("%s: bd ino:%#jx oblk:%#jx blocknr:%#jx off:%#jx\n",
+ __func__, (uintmax_t)bd[i].bd_ino,
+ (uintmax_t)bd[i].bd_oblocknr, (uintmax_t)bd[i].bd_blocknr,
+ (uintmax_t)bd[i].bd_offset));
+
+ error = nandfs_bmap_lookup(dat_node, bd[i].bd_offset, &map);
+ if (error)
+ break;
+ bd[i].bd_blocknr = map;
+ }
+
+ VOP_UNLOCK(NTOV(dat_node), 0);
+ return (error);
+}
diff --git a/sys/fs/nandfs/nandfs_dir.c b/sys/fs/nandfs/nandfs_dir.c
new file mode 100644
index 000000000000..e279510f2e1c
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_dir.c
@@ -0,0 +1,314 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf
+ * Copyright (c) 2008, 2009 Reinoud Zandijk
+ * 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.
+ *
+ * From: NetBSD: nilfs_subr.c,v 1.4 2009/07/29 17:06:57 reinoud
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/namei.h>
+#include <sys/kernel.h>
+#include <sys/stat.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+#include <sys/proc.h>
+#include <sys/mount.h>
+#include <sys/vnode.h>
+#include <sys/signalvar.h>
+#include <sys/malloc.h>
+#include <sys/dirent.h>
+#include <sys/lockf.h>
+
+#include <vm/vm.h>
+#include <vm/vm_extern.h>
+
+#include "nandfs_mount.h"
+#include "nandfs.h"
+#include "nandfs_subr.h"
+
+int
+nandfs_add_dirent(struct vnode *dvp, uint64_t ino, char *nameptr, long namelen,
+ uint8_t type)
+{
+ struct nandfs_node *dir_node = VTON(dvp);
+ struct nandfs_dir_entry *dirent, *pdirent;
+ uint32_t blocksize = dir_node->nn_nandfsdev->nd_blocksize;
+ uint64_t filesize = dir_node->nn_inode.i_size;
+ uint64_t inode_blks = dir_node->nn_inode.i_blocks;
+ uint32_t off, rest;
+ uint8_t *pos;
+ struct buf *bp;
+ int error;
+
+ pdirent = NULL;
+ bp = NULL;
+ if (inode_blks) {
+ error = nandfs_bread(dir_node, inode_blks - 1, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+
+ pos = bp->b_data;
+ off = 0;
+ while (off < blocksize) {
+ pdirent = (struct nandfs_dir_entry *) (pos + off);
+ if (!pdirent->rec_len) {
+ pdirent = NULL;
+ break;
+ }
+ off += pdirent->rec_len;
+ }
+
+ if (pdirent)
+ rest = pdirent->rec_len -
+ NANDFS_DIR_REC_LEN(pdirent->name_len);
+ else
+ rest = blocksize;
+
+ if (rest < NANDFS_DIR_REC_LEN(namelen)) {
+ /* Do not update pdirent as new block is created */
+ pdirent = NULL;
+ brelse(bp);
+ /* Set to NULL to create new */
+ bp = NULL;
+ filesize += rest;
+ }
+ }
+
+ /* If no bp found create new */
+ if (!bp) {
+ error = nandfs_bcreate(dir_node, inode_blks, NOCRED, 0, &bp);
+ if (error)
+ return (error);
+ off = 0;
+ pos = bp->b_data;
+ }
+
+ /* Modify pdirent if exists */
+ if (pdirent) {
+ DPRINTF(LOOKUP, ("modify pdirent %p\n", pdirent));
+ /* modify last de */
+ off -= pdirent->rec_len;
+ pdirent->rec_len =
+ NANDFS_DIR_REC_LEN(pdirent->name_len);
+ off += pdirent->rec_len;
+ }
+
+ /* Create new dirent */
+ dirent = (struct nandfs_dir_entry *) (pos + off);
+ dirent->rec_len = blocksize - off;
+ dirent->inode = ino;
+ dirent->name_len = namelen;
+ memset(dirent->name, 0, NANDFS_DIR_NAME_LEN(namelen));
+ memcpy(dirent->name, nameptr, namelen);
+ dirent->file_type = type;
+
+ filesize += NANDFS_DIR_REC_LEN(dirent->name_len);
+
+ DPRINTF(LOOKUP, ("create dir_entry '%.*s' at %p with size %x "
+ "new filesize: %jx\n",
+ (int)namelen, dirent->name, dirent, dirent->rec_len,
+ (uintmax_t)filesize));
+
+ error = nandfs_dirty_buf(bp, 0);
+ if (error)
+ return (error);
+
+ dir_node->nn_inode.i_size = filesize;
+ dir_node->nn_flags |= IN_CHANGE | IN_UPDATE;
+ vnode_pager_setsize(dvp, filesize);
+
+ return (0);
+}
+
+int
+nandfs_remove_dirent(struct vnode *dvp, struct nandfs_node *node,
+ struct componentname *cnp)
+{
+ struct nandfs_node *dir_node;
+ struct nandfs_dir_entry *dirent, *pdirent;
+ struct buf *bp;
+ uint64_t filesize, blocknr, ino, offset;
+ uint32_t blocksize, limit, off;
+ uint16_t newsize;
+ uint8_t *pos;
+ int error, found;
+
+ dir_node = VTON(dvp);
+ filesize = dir_node->nn_inode.i_size;
+ if (!filesize)
+ return (0);
+
+ if (node) {
+ offset = node->nn_diroff;
+ ino = node->nn_ino;
+ } else {
+ offset = dir_node->nn_diroff;
+ ino = NANDFS_WHT_INO;
+ }
+
+ dirent = pdirent = NULL;
+ blocksize = dir_node->nn_nandfsdev->nd_blocksize;
+ blocknr = offset / blocksize;
+
+ DPRINTF(LOOKUP, ("rm direntry dvp %p node %p ino %#jx at off %#jx\n",
+ dvp, node, (uintmax_t)ino, (uintmax_t)offset));
+
+ error = nandfs_bread(dir_node, blocknr, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+
+ pos = bp->b_data;
+ off = 0;
+ found = 0;
+ limit = offset % blocksize;
+ pdirent = (struct nandfs_dir_entry *) bp->b_data;
+ while (off <= limit) {
+ dirent = (struct nandfs_dir_entry *) (pos + off);
+
+ if ((off == limit) &&
+ (dirent->inode == ino)) {
+ found = 1;
+ break;
+ }
+ if (dirent->inode != 0)
+ pdirent = dirent;
+ off += dirent->rec_len;
+ }
+
+ if (!found) {
+ nandfs_error("cannot find entry to remove");
+ brelse(bp);
+ return (error);
+ }
+ DPRINTF(LOOKUP,
+ ("rm dirent ino %#jx at %#x with size %#x\n",
+ (uintmax_t)dirent->inode, off, dirent->rec_len));
+
+ newsize = (uintptr_t)dirent - (uintptr_t)pdirent;
+ newsize += dirent->rec_len;
+ pdirent->rec_len = newsize;
+ dirent->inode = 0;
+ error = nandfs_dirty_buf(bp, 0);
+ if (error)
+ return (error);
+
+ dir_node->nn_flags |= IN_CHANGE | IN_UPDATE;
+ /* If last one modify filesize */
+ if ((offset + NANDFS_DIR_REC_LEN(dirent->name_len)) == filesize) {
+ filesize = blocknr * blocksize +
+ ((uintptr_t)pdirent - (uintptr_t)pos) +
+ NANDFS_DIR_REC_LEN(pdirent->name_len);
+ dir_node->nn_inode.i_size = filesize;
+ }
+
+ return (0);
+}
+
+int
+nandfs_update_parent_dir(struct vnode *dvp, uint64_t newparent)
+{
+ struct nandfs_dir_entry *dirent;
+ struct nandfs_node *dir_node;
+ struct buf *bp;
+ int error;
+
+ dir_node = VTON(dvp);
+ error = nandfs_bread(dir_node, 0, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ dirent = (struct nandfs_dir_entry *)bp->b_data;
+ dirent->inode = newparent;
+ error = nandfs_dirty_buf(bp, 0);
+ if (error)
+ return (error);
+
+ return (0);
+}
+
+int
+nandfs_update_dirent(struct vnode *dvp, struct nandfs_node *fnode,
+ struct nandfs_node *tnode)
+{
+ struct nandfs_node *dir_node;
+ struct nandfs_dir_entry *dirent;
+ struct buf *bp;
+ uint64_t file_size, blocknr;
+ uint32_t blocksize, off;
+ uint8_t *pos;
+ int error;
+
+ dir_node = VTON(dvp);
+ file_size = dir_node->nn_inode.i_size;
+ if (!file_size)
+ return (0);
+
+ DPRINTF(LOOKUP,
+ ("chg direntry dvp %p ino %#jx to in %#jx at off %#jx\n",
+ dvp, (uintmax_t)tnode->nn_ino, (uintmax_t)fnode->nn_ino,
+ (uintmax_t)tnode->nn_diroff));
+
+ blocksize = dir_node->nn_nandfsdev->nd_blocksize;
+ blocknr = tnode->nn_diroff / blocksize;
+ off = tnode->nn_diroff % blocksize;
+ error = nandfs_bread(dir_node, blocknr, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+
+ pos = bp->b_data;
+ dirent = (struct nandfs_dir_entry *) (pos + off);
+ KASSERT((dirent->inode == tnode->nn_ino),
+ ("direntry mismatch"));
+
+ dirent->inode = fnode->nn_ino;
+ error = nandfs_dirty_buf(bp, 0);
+ if (error)
+ return (error);
+
+ return (0);
+}
+
+int
+nandfs_init_dir(struct vnode *dvp, uint64_t ino, uint64_t parent_ino)
+{
+
+ if (nandfs_add_dirent(dvp, parent_ino, "..", 2, DT_DIR) ||
+ nandfs_add_dirent(dvp, ino, ".", 1, DT_DIR)) {
+ nandfs_error("%s: cannot initialize dir ino:%jd(pino:%jd)\n",
+ __func__, ino, parent_ino);
+ return (-1);
+ }
+ return (0);
+}
diff --git a/sys/fs/nandfs/nandfs_fs.h b/sys/fs/nandfs/nandfs_fs.h
new file mode 100644
index 000000000000..b72be40cefb1
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_fs.h
@@ -0,0 +1,565 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf
+ * Copyright (c) 2008, 2009 Reinoud Zandijk
+ * 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.
+ *
+ * Original definitions written by Koji Sato <koji@osrg.net>
+ * and Ryusuke Konishi <ryusuke@osrg.net>
+ * From: NetBSD: nandfs_fs.h,v 1.1 2009/07/18 16:31:42 reinoud
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _NANDFS_FS_H
+#define _NANDFS_FS_H
+
+#include <sys/uuid.h>
+
+#define MNINDIR(fsdev) ((fsdev)->nd_blocksize / sizeof(nandfs_daddr_t))
+
+/*
+ * Inode structure. There are a few dedicated inode numbers that are
+ * defined here first.
+ */
+#define NANDFS_WHT_INO 1 /* Whiteout ino */
+#define NANDFS_ROOT_INO 2 /* Root file inode */
+#define NANDFS_DAT_INO 3 /* DAT file */
+#define NANDFS_CPFILE_INO 4 /* checkpoint file */
+#define NANDFS_SUFILE_INO 5 /* segment usage file */
+#define NANDFS_IFILE_INO 6 /* ifile */
+#define NANDFS_GC_INO 7 /* Cleanerd node */
+#define NANDFS_ATIME_INO 8 /* Atime file (reserved) */
+#define NANDFS_XATTR_INO 9 /* Xattribute file (reserved) */
+#define NANDFS_SKETCH_INO 10 /* Sketch file (obsolete) */
+#define NANDFS_USER_INO 11 /* First user's file inode number */
+
+#define NANDFS_SYS_NODE(ino) \
+ (((ino) >= NANDFS_DAT_INO) && ((ino) <= NANDFS_GC_INO))
+
+#define NDADDR 12 /* Direct addresses in inode. */
+#define NIADDR 3 /* Indirect addresses in inode. */
+
+typedef int64_t nandfs_daddr_t;
+typedef int64_t nandfs_lbn_t;
+
+struct nandfs_inode {
+ uint64_t i_blocks; /* 0: size in device blocks */
+ uint64_t i_size; /* 8: size in bytes */
+ uint64_t i_ctime; /* 16: creation time in seconds */
+ uint64_t i_mtime; /* 24: modification time in seconds part*/
+ uint32_t i_ctime_nsec; /* 32: creation time nanoseconds part */
+ uint32_t i_mtime_nsec; /* 36: modification time in nanoseconds */
+ uint32_t i_uid; /* 40: user id */
+ uint32_t i_gid; /* 44: group id */
+ uint16_t i_mode; /* 48: file mode */
+ uint16_t i_links_count; /* 50: number of references to the inode*/
+ uint32_t i_flags; /* 52: NANDFS_*_FL flags */
+ nandfs_daddr_t i_special; /* 56: special */
+ nandfs_daddr_t i_db[NDADDR]; /* 64: Direct disk blocks. */
+ nandfs_daddr_t i_ib[NIADDR]; /* 160: Indirect disk blocks. */
+ uint64_t i_xattr; /* 184: reserved for extended attributes*/
+ uint32_t i_generation; /* 192: file generation for NFS */
+ uint32_t i_pad[15]; /* 196: make it 64 bits aligned */
+};
+
+#ifdef _KERNEL
+CTASSERT(sizeof(struct nandfs_inode) == 256);
+#endif
+
+/*
+ * Each checkpoint/snapshot has a super root.
+ *
+ * The super root holds the inodes of the three system files: `dat', `cp' and
+ * 'su' files. All other FS state is defined by those.
+ *
+ * It is CRC checksum'ed and time stamped.
+ */
+
+struct nandfs_super_root {
+ uint32_t sr_sum; /* check-sum */
+ uint16_t sr_bytes; /* byte count of this structure */
+ uint16_t sr_flags; /* reserved for flags */
+ uint64_t sr_nongc_ctime; /* timestamp, not for cleaner(?) */
+ struct nandfs_inode sr_dat; /* DAT, virt->phys translation inode */
+ struct nandfs_inode sr_cpfile; /* CP, checkpoints inode */
+ struct nandfs_inode sr_sufile; /* SU, segment usage inode */
+};
+
+#define NANDFS_SR_MDT_OFFSET(inode_size, i) \
+ ((uint32_t)&((struct nandfs_super_root *)0)->sr_dat + \
+ (inode_size) * (i))
+
+#define NANDFS_SR_DAT_OFFSET(inode_size) NANDFS_SR_MDT_OFFSET(inode_size, 0)
+#define NANDFS_SR_CPFILE_OFFSET(inode_size) NANDFS_SR_MDT_OFFSET(inode_size, 1)
+#define NANDFS_SR_SUFILE_OFFSET(inode_size) NANDFS_SR_MDT_OFFSET(inode_size, 2)
+#define NANDFS_SR_BYTES (sizeof(struct nandfs_super_root))
+
+/*
+ * The superblock describes the basic structure and mount history. It also
+ * records some sizes of structures found on the disc for sanity checks.
+ *
+ * The superblock is stored at two places: NANDFS_SB_OFFSET_BYTES and
+ * NANDFS_SB2_OFFSET_BYTES.
+ */
+
+/* File system states stored on media in superblock's sbp->s_state */
+#define NANDFS_VALID_FS 0x0001 /* cleanly unmounted and all is ok */
+#define NANDFS_ERROR_FS 0x0002 /* there were errors detected, fsck */
+#define NANDFS_RESIZE_FS 0x0004 /* resize required, XXX unknown flag*/
+#define NANDFS_MOUNT_STATE_BITS "\20\1VALID_FS\2ERROR_FS\3RESIZE_FS"
+
+/*
+ * Brief description of control structures:
+ *
+ * NANDFS_NFSAREAS first blocks contain fsdata and some amount of super blocks.
+ * Simple round-robin policy is used in order to choose which block will
+ * contain new super block.
+ *
+ * Simple case with 2 blocks:
+ * 1: fsdata sblock1 [sblock3 [sblock5 ..]]
+ * 2: fsdata sblock2 [sblock4 [sblock6 ..]]
+ */
+struct nandfs_fsdata {
+ uint16_t f_magic;
+ uint16_t f_bytes;
+
+ uint32_t f_sum; /* checksum of fsdata */
+ uint32_t f_rev_level; /* major disk format revision */
+
+ uint64_t f_ctime; /* creation time (execution time
+ of newfs) */
+ /* Block size represented as: blocksize = 1 << (f_log_block_size + 10) */
+ uint32_t f_log_block_size;
+
+ uint16_t f_inode_size; /* size of an inode */
+ uint16_t f_dat_entry_size; /* size of a dat entry */
+ uint16_t f_checkpoint_size; /* size of a checkpoint */
+ uint16_t f_segment_usage_size; /* size of a segment usage */
+
+ uint16_t f_sbbytes; /* byte count of CRC calculation
+ for super blocks. s_reserved
+ is excluded! */
+
+ uint16_t f_errors; /* behaviour on detecting errors */
+
+ uint32_t f_erasesize;
+ uint64_t f_nsegments; /* number of segm. in filesystem */
+ nandfs_daddr_t f_first_data_block; /* 1st seg disk block number */
+ uint32_t f_blocks_per_segment; /* number of blocks per segment */
+ uint32_t f_r_segments_percentage; /* reserved segments percentage */
+
+ struct uuid f_uuid; /* 128-bit uuid for volume */
+ char f_volume_name[16]; /* volume name */
+ uint32_t f_pad[104];
+} __packed;
+
+#ifdef _KERNEL
+CTASSERT(sizeof(struct nandfs_fsdata) == 512);
+#endif
+
+struct nandfs_super_block {
+ uint16_t s_magic; /* magic value for identification */
+
+ uint32_t s_sum; /* check sum of super block */
+
+ uint64_t s_last_cno; /* last checkpoint number */
+ uint64_t s_last_pseg; /* addr part. segm. written last */
+ uint64_t s_last_seq; /* seq.number of seg written last */
+ uint64_t s_free_blocks_count; /* free blocks count */
+
+ uint64_t s_mtime; /* mount time */
+ uint64_t s_wtime; /* write time */
+ uint16_t s_state; /* file system state */
+
+ char s_last_mounted[64]; /* directory where last mounted */
+
+ uint32_t s_c_interval; /* commit interval of segment */
+ uint32_t s_c_block_max; /* threshold of data amount for
+ the segment construction */
+ uint32_t s_reserved[32]; /* padding to end of the block */
+} __packed;
+
+#ifdef _KERNEL
+CTASSERT(sizeof(struct nandfs_super_block) == 256);
+#endif
+
+#define NANDFS_FSDATA_MAGIC 0xf8da
+#define NANDFS_SUPER_MAGIC 0x8008
+
+#define NANDFS_NFSAREAS 4
+#define NANDFS_DATA_OFFSET_BYTES(esize) (NANDFS_NFSAREAS * (esize))
+
+#define NANDFS_SBLOCK_OFFSET_BYTES (sizeof(struct nandfs_fsdata))
+
+#define NANDFS_DEF_BLOCKSIZE 4096
+#define NANDFS_MIN_BLOCKSIZE 512
+
+#define NANDFS_DEF_ERASESIZE (2 << 16)
+
+#define NANDFS_MIN_SEGSIZE NANDFS_DEF_ERASESIZE
+
+#define NANDFS_CURRENT_REV 9 /* current major revision */
+
+#define NANDFS_FSDATA_CRC_BYTES offsetof(struct nandfs_fsdata, f_pad)
+/* Bytes count of super_block for CRC-calculation */
+#define NANDFS_SB_BYTES offsetof(struct nandfs_super_block, s_reserved)
+
+/* Maximal count of links to a file */
+#define NANDFS_LINK_MAX 32000
+
+/*
+ * Structure of a directory entry.
+ *
+ * Note that they can't span blocks; the rec_len fills out.
+ */
+
+#define NANDFS_NAME_LEN 255
+struct nandfs_dir_entry {
+ uint64_t inode; /* inode number */
+ uint16_t rec_len; /* directory entry length */
+ uint8_t name_len; /* name length */
+ uint8_t file_type;
+ char name[NANDFS_NAME_LEN]; /* file name */
+ char pad;
+};
+
+/*
+ * NANDFS_DIR_PAD defines the directory entries boundaries
+ *
+ * NOTE: It must be a multiple of 8
+ */
+#define NANDFS_DIR_PAD 8
+#define NANDFS_DIR_ROUND (NANDFS_DIR_PAD - 1)
+#define NANDFS_DIR_NAME_OFFSET (offsetof(struct nandfs_dir_entry, name))
+#define NANDFS_DIR_REC_LEN(name_len) \
+ (((name_len) + NANDFS_DIR_NAME_OFFSET + NANDFS_DIR_ROUND) \
+ & ~NANDFS_DIR_ROUND)
+#define NANDFS_DIR_NAME_LEN(name_len) \
+ (NANDFS_DIR_REC_LEN(name_len) - NANDFS_DIR_NAME_OFFSET)
+
+/*
+ * NiLFS/NANDFS devides the disc into fixed length segments. Each segment is
+ * filled with one or more partial segments of variable lengths.
+ *
+ * Each partial segment has a segment summary header followed by updates of
+ * files and optionally a super root.
+ */
+
+/*
+ * Virtual to physical block translation information. For data blocks it maps
+ * logical block number bi_blkoff to virtual block nr bi_vblocknr. For non
+ * datablocks it is the virtual block number assigned to an indirect block
+ * and has no bi_blkoff. The physical block number is the next
+ * available data block in the partial segment after all the binfo's.
+ */
+struct nandfs_binfo_v {
+ uint64_t bi_ino; /* file's inode */
+ uint64_t bi_vblocknr; /* assigned virtual block number */
+ uint64_t bi_blkoff; /* for file's logical block number */
+};
+
+/*
+ * DAT allocation. For data blocks just the logical block number that maps on
+ * the next available data block in the partial segment after the binfo's.
+ */
+struct nandfs_binfo_dat {
+ uint64_t bi_ino;
+ uint64_t bi_blkoff; /* DAT file's logical block number */
+ uint8_t bi_level; /* whether this is meta block */
+ uint8_t bi_pad[7];
+};
+
+#ifdef _KERNEL
+CTASSERT(sizeof(struct nandfs_binfo_v) == sizeof(struct nandfs_binfo_dat));
+#endif
+
+/* Convenience union for both types of binfo's */
+union nandfs_binfo {
+ struct nandfs_binfo_v bi_v;
+ struct nandfs_binfo_dat bi_dat;
+};
+
+/* Indirect buffers path */
+struct nandfs_indir {
+ nandfs_daddr_t in_lbn;
+ int in_off;
+};
+
+/* The (partial) segment summary */
+struct nandfs_segment_summary {
+ uint32_t ss_datasum; /* CRC of complete data block */
+ uint32_t ss_sumsum; /* CRC of segment summary only */
+ uint32_t ss_magic; /* magic to identify segment summary */
+ uint16_t ss_bytes; /* size of segment summary structure */
+ uint16_t ss_flags; /* NANDFS_SS_* flags */
+ uint64_t ss_seq; /* sequence number of this segm. sum */
+ uint64_t ss_create; /* creation timestamp in seconds */
+ uint64_t ss_next; /* blocknumber of next segment */
+ uint32_t ss_nblocks; /* number of blocks used by summary */
+ uint32_t ss_nbinfos; /* number of binfo structures */
+ uint32_t ss_sumbytes; /* total size of segment summary */
+ uint32_t ss_pad;
+ /* stream of binfo structures */
+};
+
+#define NANDFS_SEGSUM_MAGIC 0x8e680011 /* segment summary magic number */
+
+/* Segment summary flags */
+#define NANDFS_SS_LOGBGN 0x0001 /* begins a logical segment */
+#define NANDFS_SS_LOGEND 0x0002 /* ends a logical segment */
+#define NANDFS_SS_SR 0x0004 /* has super root */
+#define NANDFS_SS_SYNDT 0x0008 /* includes data only updates */
+#define NANDFS_SS_GC 0x0010 /* segment written for cleaner operation */
+#define NANDFS_SS_FLAG_BITS "\20\1LOGBGN\2LOGEND\3SR\4SYNDT\5GC"
+
+/* Segment summary constrains */
+#define NANDFS_SEG_MIN_BLOCKS 16 /* minimum number of blocks in a
+ full segment */
+#define NANDFS_PSEG_MIN_BLOCKS 2 /* minimum number of blocks in a
+ partial segment */
+#define NANDFS_MIN_NRSVSEGS 8 /* minimum number of reserved
+ segments */
+
+/*
+ * Structure of DAT/inode file.
+ *
+ * A DAT file is devided into groups. The maximum number of groups is the
+ * number of block group descriptors that fit into one block; this descriptor
+ * only gives the number of free entries in the associated group.
+ *
+ * Each group has a block sized bitmap indicating if an entry is taken or
+ * empty. Each bit stands for a DAT entry.
+ *
+ * The inode file has exactly the same format only the entries are inode
+ * entries.
+ */
+
+struct nandfs_block_group_desc {
+ uint32_t bg_nfrees; /* num. free entries in block group */
+};
+
+/* DAT entry in a super root's DAT file */
+struct nandfs_dat_entry {
+ uint64_t de_blocknr; /* block number */
+ uint64_t de_start; /* valid from checkpoint */
+ uint64_t de_end; /* valid till checkpoint */
+ uint64_t de_rsv; /* reserved for future use */
+};
+
+/*
+ * Structure of CP file.
+ *
+ * A snapshot is just a checkpoint only it's protected against removal by the
+ * cleaner. The snapshots are kept on a double linked list of checkpoints.
+ */
+struct nandfs_snapshot_list {
+ uint64_t ssl_next; /* checkpoint nr. forward */
+ uint64_t ssl_prev; /* checkpoint nr. back */
+};
+
+/* Checkpoint entry structure */
+struct nandfs_checkpoint {
+ uint32_t cp_flags; /* NANDFS_CHECKPOINT_* flags */
+ uint32_t cp_checkpoints_count; /* ZERO, not used anymore? */
+ struct nandfs_snapshot_list cp_snapshot_list; /* list of snapshots */
+ uint64_t cp_cno; /* checkpoint number */
+ uint64_t cp_create; /* creation timestamp */
+ uint64_t cp_nblk_inc; /* number of blocks incremented */
+ uint64_t cp_blocks_count; /* reserved (might be deleted) */
+ struct nandfs_inode cp_ifile_inode; /* inode file inode */
+};
+
+/* Checkpoint flags */
+#define NANDFS_CHECKPOINT_SNAPSHOT 1
+#define NANDFS_CHECKPOINT_INVALID 2
+#define NANDFS_CHECKPOINT_SKETCH 4
+#define NANDFS_CHECKPOINT_MINOR 8
+#define NANDFS_CHECKPOINT_BITS "\20\1SNAPSHOT\2INVALID\3SKETCH\4MINOR"
+
+/* Header of the checkpoint file */
+struct nandfs_cpfile_header {
+ uint64_t ch_ncheckpoints; /* number of checkpoints */
+ uint64_t ch_nsnapshots; /* number of snapshots */
+ struct nandfs_snapshot_list ch_snapshot_list; /* snapshot list */
+};
+
+#define NANDFS_CPFILE_FIRST_CHECKPOINT_OFFSET \
+ ((sizeof(struct nandfs_cpfile_header) + \
+ sizeof(struct nandfs_checkpoint) - 1) / \
+ sizeof(struct nandfs_checkpoint))
+
+
+#define NANDFS_NOSEGMENT 0xffffffff
+
+/*
+ * Structure of SU file.
+ *
+ * The segment usage file sums up how each of the segments are used. They are
+ * indexed by their segment number.
+ */
+
+/* Segment usage entry */
+struct nandfs_segment_usage {
+ uint64_t su_lastmod; /* last modified timestamp */
+ uint32_t su_nblocks; /* number of blocks in segment */
+ uint32_t su_flags; /* NANDFS_SEGMENT_USAGE_* flags */
+};
+
+/* Segment usage flag */
+#define NANDFS_SEGMENT_USAGE_ACTIVE 1
+#define NANDFS_SEGMENT_USAGE_DIRTY 2
+#define NANDFS_SEGMENT_USAGE_ERROR 4
+#define NANDFS_SEGMENT_USAGE_GC 8
+#define NANDFS_SEGMENT_USAGE_BITS "\20\1ACTIVE\2DIRTY\3ERROR"
+
+/* Header of the segment usage file */
+struct nandfs_sufile_header {
+ uint64_t sh_ncleansegs; /* number of segments marked clean */
+ uint64_t sh_ndirtysegs; /* number of segments marked dirty */
+ uint64_t sh_last_alloc; /* last allocated segment number */
+};
+
+#define NANDFS_SUFILE_FIRST_SEGMENT_USAGE_OFFSET \
+ ((sizeof(struct nandfs_sufile_header) + \
+ sizeof(struct nandfs_segment_usage) - 1) / \
+ sizeof(struct nandfs_segment_usage))
+
+struct nandfs_seg_stat {
+ uint64_t nss_nsegs;
+ uint64_t nss_ncleansegs;
+ uint64_t nss_ndirtysegs;
+ uint64_t nss_ctime;
+ uint64_t nss_nongc_ctime;
+ uint64_t nss_prot_seq;
+};
+
+enum {
+ NANDFS_CHECKPOINT,
+ NANDFS_SNAPSHOT
+};
+
+#define NANDFS_CPINFO_MAX 512
+
+struct nandfs_cpinfo {
+ uint32_t nci_flags;
+ uint32_t nci_pad;
+ uint64_t nci_cno;
+ uint64_t nci_create;
+ uint64_t nci_nblk_inc;
+ uint64_t nci_blocks_count;
+ uint64_t nci_next;
+};
+
+#define NANDFS_SEGMENTS_MAX 512
+
+struct nandfs_suinfo {
+ uint64_t nsi_num;
+ uint64_t nsi_lastmod;
+ uint32_t nsi_blocks;
+ uint32_t nsi_flags;
+};
+
+#define NANDFS_VINFO_MAX 512
+
+struct nandfs_vinfo {
+ uint64_t nvi_ino;
+ uint64_t nvi_vblocknr;
+ uint64_t nvi_start;
+ uint64_t nvi_end;
+ uint64_t nvi_blocknr;
+ int nvi_alive;
+};
+
+struct nandfs_cpmode {
+ uint64_t ncpm_cno;
+ uint32_t ncpm_mode;
+ uint32_t ncpm_pad;
+};
+
+struct nandfs_argv {
+ uint64_t nv_base;
+ uint32_t nv_nmembs;
+ uint16_t nv_size;
+ uint16_t nv_flags;
+ uint64_t nv_index;
+};
+
+struct nandfs_cpstat {
+ uint64_t ncp_cno;
+ uint64_t ncp_ncps;
+ uint64_t ncp_nss;
+};
+
+struct nandfs_period {
+ uint64_t p_start;
+ uint64_t p_end;
+};
+
+struct nandfs_vdesc {
+ uint64_t vd_ino;
+ uint64_t vd_cno;
+ uint64_t vd_vblocknr;
+ struct nandfs_period vd_period;
+ uint64_t vd_blocknr;
+ uint64_t vd_offset;
+ uint32_t vd_flags;
+ uint32_t vd_pad;
+};
+
+struct nandfs_bdesc {
+ uint64_t bd_ino;
+ uint64_t bd_oblocknr;
+ uint64_t bd_blocknr;
+ uint64_t bd_offset;
+ uint32_t bd_level;
+ uint32_t bd_alive;
+};
+
+#ifndef _KERNEL
+#ifndef MNAMELEN
+#define MNAMELEN 88
+#endif
+#endif
+
+struct nandfs_fsinfo {
+ struct nandfs_fsdata fs_fsdata;
+ struct nandfs_super_block fs_super;
+ char fs_dev[MNAMELEN];
+};
+
+#define NANDFS_MAX_MOUNTS 65535
+
+#define NANDFS_IOCTL_GET_SUSTAT _IOR('N', 100, struct nandfs_seg_stat)
+#define NANDFS_IOCTL_CHANGE_CPMODE _IOWR('N', 101, struct nandfs_cpmode)
+#define NANDFS_IOCTL_GET_CPINFO _IOWR('N', 102, struct nandfs_argv)
+#define NANDFS_IOCTL_DELETE_CP _IOWR('N', 103, uint64_t[2])
+#define NANDFS_IOCTL_GET_CPSTAT _IOR('N', 104, struct nandfs_cpstat)
+#define NANDFS_IOCTL_GET_SUINFO _IOWR('N', 105, struct nandfs_argv)
+#define NANDFS_IOCTL_GET_VINFO _IOWR('N', 106, struct nandfs_argv)
+#define NANDFS_IOCTL_GET_BDESCS _IOWR('N', 107, struct nandfs_argv)
+#define NANDFS_IOCTL_GET_FSINFO _IOR('N', 108, struct nandfs_fsinfo)
+#define NANDFS_IOCTL_MAKE_SNAP _IOWR('N', 109, uint64_t)
+#define NANDFS_IOCTL_DELETE_SNAP _IOWR('N', 110, uint64_t)
+#define NANDFS_IOCTL_SYNC _IOWR('N', 111, uint64_t)
+
+#endif /* _NANDFS_FS_H */
diff --git a/sys/fs/nandfs/nandfs_ifile.c b/sys/fs/nandfs/nandfs_ifile.c
new file mode 100644
index 000000000000..7e4db879f60d
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_ifile.c
@@ -0,0 +1,213 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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/systm.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/mutex.h>
+#include <sys/namei.h>
+#include <sys/sysctl.h>
+#include <sys/vnode.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_page.h>
+
+#include <fs/nandfs/nandfs_mount.h>
+#include <fs/nandfs/nandfs.h>
+#include <fs/nandfs/nandfs_subr.h>
+
+int
+nandfs_node_create(struct nandfsmount *nmp, struct nandfs_node **node,
+ uint16_t mode)
+{
+ struct nandfs_alloc_request req;
+ struct nandfs_device *nandfsdev;
+ struct nandfs_mdt *mdt;
+ struct nandfs_node *ifile;
+ struct nandfs_inode *inode;
+ struct vnode *vp;
+ uint32_t entry;
+ int error = 0;
+
+ nandfsdev = nmp->nm_nandfsdev;
+ mdt = &nandfsdev->nd_ifile_mdt;
+ ifile = nmp->nm_ifile_node;
+ vp = NTOV(ifile);
+
+ VOP_LOCK(vp, LK_EXCLUSIVE);
+ /* Allocate new inode in ifile */
+ req.entrynum = nandfsdev->nd_last_ino + 1;
+ error = nandfs_find_free_entry(mdt, ifile, &req);
+ if (error) {
+ VOP_UNLOCK(vp, 0);
+ return (error);
+ }
+
+ error = nandfs_get_entry_block(mdt, ifile, &req, &entry, 1);
+ if (error) {
+ VOP_UNLOCK(vp, 0);
+ return (error);
+ }
+
+ /* Inode initialization */
+ inode = ((struct nandfs_inode *) req.bp_entry->b_data) + entry;
+ nandfs_inode_init(inode, mode);
+
+ error = nandfs_alloc_entry(mdt, &req);
+ if (error) {
+ VOP_UNLOCK(vp, 0);
+ return (error);
+ }
+
+ VOP_UNLOCK(vp, 0);
+
+ nandfsdev->nd_last_ino = req.entrynum;
+ error = nandfs_get_node(nmp, req.entrynum, node);
+ DPRINTF(IFILE, ("%s: node: %p ino: %#jx\n",
+ __func__, node, (uintmax_t)((*node)->nn_ino)));
+
+ return (error);
+}
+
+int
+nandfs_node_destroy(struct nandfs_node *node)
+{
+ struct nandfs_alloc_request req;
+ struct nandfsmount *nmp;
+ struct nandfs_mdt *mdt;
+ struct nandfs_node *ifile;
+ struct vnode *vp;
+ int error = 0;
+
+ nmp = node->nn_nmp;
+ req.entrynum = node->nn_ino;
+ mdt = &nmp->nm_nandfsdev->nd_ifile_mdt;
+ ifile = nmp->nm_ifile_node;
+ vp = NTOV(ifile);
+
+ DPRINTF(IFILE, ("%s: destroy node: %p ino: %#jx\n",
+ __func__, node, (uintmax_t)node->nn_ino));
+ VOP_LOCK(vp, LK_EXCLUSIVE);
+
+ error = nandfs_find_entry(mdt, ifile, &req);
+ if (error) {
+ nandfs_error("%s: finding entry error:%d node %p(%jx)",
+ __func__, error, node, node->nn_ino);
+ VOP_UNLOCK(vp, 0);
+ return (error);
+ }
+
+ nandfs_inode_destroy(&node->nn_inode);
+
+ error = nandfs_free_entry(mdt, &req);
+ if (error) {
+ nandfs_error("%s: freing entry error:%d node %p(%jx)",
+ __func__, error, node, node->nn_ino);
+ VOP_UNLOCK(vp, 0);
+ return (error);
+ }
+
+ VOP_UNLOCK(vp, 0);
+ DPRINTF(IFILE, ("%s: freed node %p ino %#jx\n",
+ __func__, node, (uintmax_t)node->nn_ino));
+ return (error);
+}
+
+int
+nandfs_node_update(struct nandfs_node *node)
+{
+ struct nandfs_alloc_request req;
+ struct nandfsmount *nmp;
+ struct nandfs_mdt *mdt;
+ struct nandfs_node *ifile;
+ struct nandfs_inode *inode;
+ uint32_t index;
+ int error = 0;
+
+ nmp = node->nn_nmp;
+ ifile = nmp->nm_ifile_node;
+ ASSERT_VOP_LOCKED(NTOV(ifile), __func__);
+
+ req.entrynum = node->nn_ino;
+ mdt = &nmp->nm_nandfsdev->nd_ifile_mdt;
+
+ DPRINTF(IFILE, ("%s: node:%p ino:%#jx\n",
+ __func__, &node->nn_inode, (uintmax_t)node->nn_ino));
+
+ error = nandfs_get_entry_block(mdt, ifile, &req, &index, 0);
+ if (error) {
+ printf("nandfs_get_entry_block returned with ERROR=%d\n",
+ error);
+ return (error);
+ }
+
+ inode = ((struct nandfs_inode *) req.bp_entry->b_data) + index;
+ memcpy(inode, &node->nn_inode, sizeof(*inode));
+ error = nandfs_dirty_buf(req.bp_entry, 0);
+
+ return (error);
+}
+
+int
+nandfs_get_node_entry(struct nandfsmount *nmp, struct nandfs_inode **inode,
+ uint64_t ino, struct buf **bp)
+{
+ struct nandfs_alloc_request req;
+ struct nandfs_mdt *mdt;
+ struct nandfs_node *ifile;
+ struct vnode *vp;
+ uint32_t index;
+ int error = 0;
+
+ req.entrynum = ino;
+ mdt = &nmp->nm_nandfsdev->nd_ifile_mdt;
+ ifile = nmp->nm_ifile_node;
+ vp = NTOV(ifile);
+
+ VOP_LOCK(vp, LK_EXCLUSIVE);
+ error = nandfs_get_entry_block(mdt, ifile, &req, &index, 0);
+ if (error) {
+ VOP_UNLOCK(vp, 0);
+ return (error);
+ }
+
+ *inode = ((struct nandfs_inode *) req.bp_entry->b_data) + index;
+ *bp = req.bp_entry;
+ VOP_UNLOCK(vp, 0);
+ return (0);
+}
+
diff --git a/sys/fs/nandfs/nandfs_mount.h b/sys/fs/nandfs/nandfs_mount.h
new file mode 100644
index 000000000000..f733e22b1664
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_mount.h
@@ -0,0 +1,50 @@
+/*-
+ * Copyright (c) 2008, 2009 Reinoud Zandijk
+ * 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 for the
+ * NetBSD Project. See http://www.NetBSD.org/ for
+ * information about NetBSD.
+ * 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.
+ *
+ * From: NetBSD: nilfs_mount.h,v 1.1 2009/07/18 16:31:42 reinoud
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _FS_NANDFS_NANDFS_MOUNT_H_
+#define _FS_NANDFS_NANDFS_MOUNT_H_
+
+/*
+ * Arguments to mount NANDFS filingsystem.
+ */
+
+struct nandfs_args {
+ char *fspec; /* mount specifier */
+ int64_t cpno; /* checkpoint number */
+};
+
+#endif /* !_FS_NANDFS_NANDFS_MOUNT_H_ */
+
diff --git a/sys/fs/nandfs/nandfs_segment.c b/sys/fs/nandfs/nandfs_segment.c
new file mode 100644
index 000000000000..836beada1aa6
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_segment.c
@@ -0,0 +1,1329 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 "opt_ddb.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/mutex.h>
+#include <sys/namei.h>
+#include <sys/sysctl.h>
+#include <sys/vnode.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+#include <sys/libkern.h>
+
+#include <ddb/ddb.h>
+
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_page.h>
+
+#include <geom/geom.h>
+#include <geom/geom_vfs.h>
+
+#include <fs/nandfs/nandfs_mount.h>
+#include <fs/nandfs/nandfs.h>
+#include <fs/nandfs/nandfs_subr.h>
+
+static int
+nandfs_new_segment(struct nandfs_device *fsdev)
+{
+ int error = 0;
+ uint64_t new;
+
+ error = nandfs_alloc_segment(fsdev, &new);
+ if (!error) {
+ fsdev->nd_seg_num = fsdev->nd_next_seg_num;
+ fsdev->nd_next_seg_num = new;
+ }
+ DPRINTF(SYNC, ("%s: new segment %jx next %jx error %d\n",
+ __func__, (uintmax_t)fsdev->nd_seg_num, (uintmax_t)new, error));
+ if (error)
+ nandfs_error("%s: cannot create segment error %d\n",
+ __func__, error);
+
+ return (error);
+}
+
+static int
+create_segment(struct nandfs_seginfo *seginfo)
+{
+ struct nandfs_segment *seg;
+ struct nandfs_device *fsdev;
+ struct nandfs_segment *prev;
+ struct buf *bp;
+ uint64_t start_block, curr;
+ uint32_t blks_per_seg, nblocks;
+ int error;
+
+ fsdev = seginfo->fsdev;
+ prev = seginfo->curseg;
+ blks_per_seg = fsdev->nd_fsdata.f_blocks_per_segment;
+ nblocks = fsdev->nd_last_segsum.ss_nblocks;
+
+ if (!prev) {
+ vfs_timestamp(&fsdev->nd_ts);
+ /* Touch current segment */
+ error = nandfs_touch_segment(fsdev, fsdev->nd_seg_num);
+ if (error) {
+ nandfs_error("%s: cannot preallocate segment %jx\n",
+ __func__, fsdev->nd_seg_num);
+ return (error);
+ }
+ error = nandfs_touch_segment(fsdev, 0);
+ if (error) {
+ nandfs_error("%s: cannot dirty block with segment 0\n",
+ __func__);
+ return (error);
+ }
+ start_block = fsdev->nd_last_pseg + (uint64_t)nblocks;
+ /*
+ * XXX Hack
+ */
+ if (blks_per_seg - (start_block % blks_per_seg) - 1 == 0)
+ start_block++;
+ curr = nandfs_get_segnum_of_block(fsdev, start_block);
+ /* Allocate new segment if last one is full */
+ if (fsdev->nd_seg_num != curr) {
+ error = nandfs_new_segment(fsdev);
+ if (error) {
+ nandfs_error("%s: cannot create new segment\n",
+ __func__);
+ return (error);
+ }
+ /*
+ * XXX Hack
+ */
+ nandfs_get_segment_range(fsdev, fsdev->nd_seg_num, &start_block, NULL);
+ }
+ } else {
+ nandfs_get_segment_range(fsdev, fsdev->nd_next_seg_num,
+ &start_block, NULL);
+
+ /* Touch current segment and allocate and touch new one */
+ error = nandfs_new_segment(fsdev);
+ if (error) {
+ nandfs_error("%s: cannot create next segment\n",
+ __func__);
+ return (error);
+ }
+
+ /* Reiterate in case new buf is dirty */
+ seginfo->reiterate = 1;
+ }
+
+ /* Allocate and initialize nandfs_segment structure */
+ seg = malloc(sizeof(*seg), M_DEVBUF, M_WAITOK|M_ZERO);
+ TAILQ_INIT(&seg->segsum);
+ TAILQ_INIT(&seg->data);
+ seg->fsdev = fsdev;
+ seg->start_block = start_block;
+ seg->num_blocks = blks_per_seg - (start_block % blks_per_seg) - 1;
+ seg->seg_num = fsdev->nd_seg_num;
+ seg->seg_next = fsdev->nd_next_seg_num;
+ seg->segsum_blocks = 1;
+ seg->bytes_left = fsdev->nd_blocksize -
+ sizeof(struct nandfs_segment_summary);
+ seg->segsum_bytes = sizeof(struct nandfs_segment_summary);
+
+ /* Allocate buffer for segment summary */
+ bp = getblk(fsdev->nd_devvp, nandfs_block_to_dblock(fsdev,
+ seg->start_block), fsdev->nd_blocksize, 0, 0, 0);
+ bzero(bp->b_data, seginfo->fsdev->nd_blocksize);
+ bp->b_bufobj = &seginfo->fsdev->nd_devvp->v_bufobj;
+ bp->b_flags |= B_MANAGED;
+
+ /* Add buffer to segment */
+ TAILQ_INSERT_TAIL(&seg->segsum, bp, b_cluster.cluster_entry);
+ seg->current_off = bp->b_data + sizeof(struct nandfs_segment_summary);
+
+ DPRINTF(SYNC, ("%s: seg %p : initial settings: start %#jx size :%#x\n",
+ __func__, seg, (uintmax_t)seg->start_block, seg->num_blocks));
+ DPRINTF(SYNC, ("%s: seg->seg_num %#jx cno %#jx next %#jx\n", __func__,
+ (uintmax_t)seg->seg_num, (uintmax_t)(fsdev->nd_last_cno + 1),
+ (uintmax_t)seg->seg_next));
+
+ if (!prev)
+ LIST_INSERT_HEAD(&seginfo->seg_list, seg, seg_link);
+ else
+ LIST_INSERT_AFTER(prev, seg, seg_link);
+
+ seginfo->curseg = seg;
+
+ return (0);
+}
+
+static int
+delete_segment(struct nandfs_seginfo *seginfo)
+{
+ struct nandfs_segment *seg, *tseg;
+ struct buf *bp, *tbp;
+
+ LIST_FOREACH_SAFE(seg, &seginfo->seg_list, seg_link, tseg) {
+ TAILQ_FOREACH_SAFE(bp, &seg->segsum, b_cluster.cluster_entry,
+ tbp) {
+ TAILQ_REMOVE(&seg->segsum, bp, b_cluster.cluster_entry);
+ bp->b_flags &= ~B_MANAGED;
+ brelse(bp);
+ };
+
+ LIST_REMOVE(seg, seg_link);
+ free(seg, M_DEVBUF);
+ }
+
+ return (0);
+}
+
+static int
+create_seginfo(struct nandfs_device *fsdev, struct nandfs_seginfo **seginfo)
+{
+ struct nandfs_seginfo *info;
+
+ info = malloc(sizeof(*info), M_DEVBUF, M_WAITOK);
+
+ LIST_INIT(&info->seg_list);
+ info->fsdev = fsdev;
+ info->curseg = NULL;
+ info->blocks = 0;
+ *seginfo = info;
+ fsdev->nd_seginfo = info;
+ return (0);
+}
+
+static int
+delete_seginfo(struct nandfs_seginfo *seginfo)
+{
+ struct nandfs_device *nffsdev;
+
+ nffsdev = seginfo->fsdev;
+ delete_segment(seginfo);
+ nffsdev->nd_seginfo = NULL;
+ free(seginfo, M_DEVBUF);
+
+ return (0);
+}
+
+static int
+nandfs_create_superroot_block(struct nandfs_seginfo *seginfo,
+ struct buf **newbp)
+{
+ struct buf *bp;
+ int error;
+
+ bp = nandfs_geteblk(seginfo->fsdev->nd_blocksize, GB_NOWAIT_BD);
+
+ bzero(bp->b_data, seginfo->fsdev->nd_blocksize);
+ bp->b_bufobj = &seginfo->fsdev->nd_devvp->v_bufobj;
+ bp->b_flags |= B_MANAGED;
+
+ if (!(seginfo->curseg) || !seginfo->curseg->num_blocks) {
+ error = create_segment(seginfo);
+ if (error) {
+ brelse(bp);
+ nandfs_error("%s: no segment for superroot\n",
+ __func__);
+ return (error);
+ }
+ }
+
+ TAILQ_INSERT_TAIL(&seginfo->curseg->data, bp, b_cluster.cluster_entry);
+
+ seginfo->curseg->nblocks++;
+ seginfo->curseg->num_blocks--;
+ seginfo->blocks++;
+
+ *newbp = bp;
+ return (0);
+}
+
+static int
+nandfs_add_superroot(struct nandfs_seginfo *seginfo)
+{
+ struct nandfs_device *fsdev;
+ struct nandfs_super_root *sr;
+ struct buf *bp = NULL;
+ uint64_t crc_skip;
+ uint32_t crc_calc;
+ int error;
+
+ fsdev = seginfo->fsdev;
+
+ error = nandfs_create_superroot_block(seginfo, &bp);
+ if (error) {
+ nandfs_error("%s: cannot add superroot\n", __func__);
+ return (error);
+ }
+
+ sr = (struct nandfs_super_root *)bp->b_data;
+ /* Save superroot CRC */
+ sr->sr_bytes = NANDFS_SR_BYTES;
+ sr->sr_flags = 0;
+ sr->sr_nongc_ctime = 0;
+
+ memcpy(&sr->sr_dat, &fsdev->nd_dat_node->nn_inode,
+ sizeof(struct nandfs_inode));
+ memcpy(&sr->sr_cpfile, &fsdev->nd_cp_node->nn_inode,
+ sizeof(struct nandfs_inode));
+ memcpy(&sr->sr_sufile, &fsdev->nd_su_node->nn_inode,
+ sizeof(struct nandfs_inode));
+
+ crc_skip = sizeof(sr->sr_sum);
+ crc_calc = crc32((uint8_t *)sr + crc_skip, NANDFS_SR_BYTES - crc_skip);
+
+ sr->sr_sum = crc_calc;
+
+ bp->b_flags |= B_MANAGED;
+ bp->b_bufobj = &seginfo->fsdev->nd_devvp->v_bufobj;
+
+ bp->b_flags &= ~B_INVAL;
+ nandfs_dirty_bufs_increment(fsdev);
+ DPRINTF(SYNC, ("%s: bp:%p\n", __func__, bp));
+
+ return (0);
+}
+
+static int
+nandfs_add_segsum_block(struct nandfs_seginfo *seginfo, struct buf **newbp)
+{
+ struct nandfs_device *fsdev;
+ nandfs_daddr_t blk;
+ struct buf *bp;
+ int error;
+
+ if (!(seginfo->curseg) || seginfo->curseg->num_blocks <= 1) {
+ error = create_segment(seginfo);
+ if (error) {
+ nandfs_error("%s: error:%d when creating segment\n",
+ __func__, error);
+ return (error);
+ }
+ *newbp = TAILQ_FIRST(&seginfo->curseg->segsum);
+ return (0);
+ }
+
+ fsdev = seginfo->fsdev;
+ blk = nandfs_block_to_dblock(fsdev, seginfo->curseg->start_block +
+ seginfo->curseg->segsum_blocks);
+
+ bp = getblk(fsdev->nd_devvp, blk, fsdev->nd_blocksize, 0, 0, 0);
+
+ bzero(bp->b_data, seginfo->fsdev->nd_blocksize);
+ bp->b_bufobj = &seginfo->fsdev->nd_devvp->v_bufobj;
+ bp->b_flags |= B_MANAGED;
+
+ TAILQ_INSERT_TAIL(&seginfo->curseg->segsum, bp,
+ b_cluster.cluster_entry);
+ seginfo->curseg->num_blocks--;
+
+ seginfo->curseg->segsum_blocks++;
+ seginfo->curseg->bytes_left = seginfo->fsdev->nd_blocksize;
+ seginfo->curseg->current_off = bp->b_data;
+ seginfo->blocks++;
+
+ *newbp = bp;
+
+ DPRINTF(SYNC, ("%s: bp %p\n", __func__, bp));
+
+ return (0);
+}
+
+static int
+nandfs_add_blocks(struct nandfs_seginfo *seginfo, struct nandfs_node *node,
+ struct buf *bp)
+{
+ union nandfs_binfo *binfo;
+ struct buf *seg_bp;
+ int error;
+
+ if (!(seginfo->curseg) || !seginfo->curseg->num_blocks) {
+ error = create_segment(seginfo);
+ if (error) {
+ nandfs_error("%s: error:%d when creating segment\n",
+ __func__, error);
+ return (error);
+ }
+ }
+
+ if (seginfo->curseg->bytes_left < sizeof(union nandfs_binfo)) {
+ error = nandfs_add_segsum_block(seginfo, &seg_bp);
+ if (error) {
+ nandfs_error("%s: error:%d when adding segsum\n",
+ __func__, error);
+ return (error);
+ }
+ }
+ binfo = (union nandfs_binfo *)seginfo->curseg->current_off;
+
+ if (node->nn_ino != NANDFS_DAT_INO) {
+ binfo->bi_v.bi_blkoff = bp->b_lblkno;
+ binfo->bi_v.bi_ino = node->nn_ino;
+ } else {
+ binfo->bi_dat.bi_blkoff = bp->b_lblkno;
+ binfo->bi_dat.bi_ino = node->nn_ino;
+ if (NANDFS_IS_INDIRECT(bp))
+ binfo->bi_dat.bi_level = 1;
+ else
+ binfo->bi_dat.bi_level = 0;
+ }
+ binfo++;
+
+ seginfo->curseg->bytes_left -= sizeof(union nandfs_binfo);
+ seginfo->curseg->segsum_bytes += sizeof(union nandfs_binfo);
+ seginfo->curseg->current_off = (char *)binfo;
+
+ TAILQ_INSERT_TAIL(&seginfo->curseg->data, bp, b_cluster.cluster_entry);
+
+ seginfo->curseg->nbinfos++;
+ seginfo->curseg->nblocks++;
+ seginfo->curseg->num_blocks--;
+ seginfo->blocks++;
+
+ DPRINTF(SYNC, ("%s: bp (%p) number %x (left %x)\n",
+ __func__, bp, seginfo->curseg->nblocks,
+ seginfo->curseg->num_blocks));
+ return (0);
+}
+
+static int
+nandfs_iterate_dirty_buf(struct vnode *vp, struct nandfs_seginfo *seginfo,
+ uint8_t hold)
+{
+ struct buf *bp, *tbd;
+ struct bufobj *bo;
+ struct nandfs_node *node;
+ int error;
+
+ node = VTON(vp);
+ bo = &vp->v_bufobj;
+
+ ASSERT_VOP_ELOCKED(vp, __func__);
+
+ /* Iterate dirty data bufs */
+ TAILQ_FOREACH_SAFE(bp, &bo->bo_dirty.bv_hd, b_bobufs, tbd) {
+ DPRINTF(SYNC, ("%s: vp (%p): bp (%p) with lblkno %jx ino %jx "
+ "add buf\n", __func__, vp, bp, bp->b_lblkno, node->nn_ino));
+
+ if (!(NANDFS_ISGATHERED(bp))) {
+ error = nandfs_bmap_update_dat(node,
+ nandfs_vblk_get(bp), bp);
+ if (error)
+ return (error);
+ NANDFS_GATHER(bp);
+ nandfs_add_blocks(seginfo, node, bp);
+ }
+ }
+
+ return (0);
+}
+
+static int
+nandfs_iterate_system_vnode(struct nandfs_node *node,
+ struct nandfs_seginfo *seginfo)
+{
+ struct vnode *vp;
+ int nblocks;
+ uint8_t hold = 0;
+
+ if (node->nn_ino != NANDFS_IFILE_INO)
+ hold = 1;
+
+ vp = NTOV(node);
+
+ nblocks = vp->v_bufobj.bo_dirty.bv_cnt;
+ DPRINTF(SYNC, ("%s: vp (%p): nblocks %x ino %jx\n",
+ __func__, vp, nblocks, node->nn_ino));
+
+ if (nblocks)
+ nandfs_iterate_dirty_buf(vp, seginfo, hold);
+
+ return (0);
+}
+
+static int
+nandfs_iterate_dirty_vnodes(struct mount *mp, struct nandfs_seginfo *seginfo)
+{
+ struct nandfs_node *nandfs_node;
+ struct vnode *vp, *mvp;
+ struct thread *td;
+ int error, lockreq, update;
+
+ td = curthread;
+ lockreq = LK_EXCLUSIVE | LK_INTERLOCK | LK_RETRY;
+
+ MNT_ILOCK(mp);
+
+ MNT_VNODE_FOREACH(vp, mp, mvp) {
+ update = 0;
+
+ if (mp->mnt_syncer == vp)
+ continue;
+ if (VOP_ISLOCKED(vp))
+ continue;
+
+ VI_LOCK(vp);
+ MNT_IUNLOCK(mp);
+ if (vp->v_iflag & VI_DOOMED) {
+ VI_UNLOCK(vp);
+ MNT_ILOCK(mp);
+ continue;
+ }
+
+ if ((error = vget(vp, lockreq, td)) != 0) {
+ MNT_ILOCK(mp);
+ continue;
+ }
+
+ if (vp->v_iflag & VI_DOOMED) {
+ vput(vp);
+ MNT_ILOCK(mp);
+ continue;
+ }
+
+ nandfs_node = VTON(vp);
+ if (nandfs_node->nn_flags & IN_MODIFIED) {
+ nandfs_node->nn_flags &= ~(IN_MODIFIED);
+ update = 1;
+ }
+
+ if (vp->v_bufobj.bo_dirty.bv_cnt) {
+ error = nandfs_iterate_dirty_buf(vp, seginfo, 0);
+ if (error) {
+ nandfs_error("%s: cannot iterate vnode:%p "
+ "err:%d\n", __func__, vp, error);
+ vput(vp);
+ return (error);
+ }
+ update = 1;
+ } else
+ vput(vp);
+
+ if (update)
+ nandfs_node_update(nandfs_node);
+
+ MNT_ILOCK(mp);
+ }
+
+ MNT_IUNLOCK(mp);
+
+ return (0);
+}
+
+static int
+nandfs_update_phys_block(struct nandfs_device *fsdev, struct buf *bp,
+ uint64_t phys_blknr, union nandfs_binfo *binfo)
+{
+ struct nandfs_node *node, *dat;
+ struct vnode *vp;
+ uint64_t new_blknr;
+ int error;
+
+ vp = bp->b_vp;
+ node = VTON(vp);
+ new_blknr = nandfs_vblk_get(bp);
+ dat = fsdev->nd_dat_node;
+
+ DPRINTF(BMAP, ("%s: ino %#jx lblk %#jx: vblk %#jx -> %#jx\n",
+ __func__, (uintmax_t)node->nn_ino, (uintmax_t)bp->b_lblkno,
+ (uintmax_t)new_blknr, (uintmax_t)phys_blknr));
+
+ if (node->nn_ino != NANDFS_DAT_INO) {
+ KASSERT((new_blknr != 0), ("vblk for bp %p is 0", bp));
+
+ nandfs_vblock_assign(fsdev, new_blknr, phys_blknr);
+ binfo->bi_v.bi_vblocknr = new_blknr;
+ binfo->bi_v.bi_blkoff = bp->b_lblkno;
+ binfo->bi_v.bi_ino = node->nn_ino;
+ } else {
+ VOP_LOCK(NTOV(dat), LK_EXCLUSIVE);
+ error = nandfs_bmap_update_block(node, bp, phys_blknr);
+ if (error) {
+ nandfs_error("%s: error updating block:%jx for bp:%p\n",
+ __func__, (uintmax_t)phys_blknr, bp);
+ VOP_UNLOCK(NTOV(dat), 0);
+ return (error);
+ }
+ VOP_UNLOCK(NTOV(dat), 0);
+ binfo->bi_dat.bi_blkoff = bp->b_lblkno;
+ binfo->bi_dat.bi_ino = node->nn_ino;
+ if (NANDFS_IS_INDIRECT(bp))
+ binfo->bi_dat.bi_level = 1;
+ else
+ binfo->bi_dat.bi_level = 0;
+ }
+
+ return (0);
+}
+
+#define NBINFO(off) ((off) + sizeof(union nandfs_binfo))
+static int
+nandfs_segment_assign_pblk(struct nandfs_segment *nfsseg)
+{
+ struct nandfs_device *fsdev;
+ union nandfs_binfo *binfo;
+ struct buf *bp, *seg_bp;
+ uint64_t blocknr;
+ uint32_t curr_off, blocksize;
+ int error;
+
+ fsdev = nfsseg->fsdev;
+ blocksize = fsdev->nd_blocksize;
+
+ blocknr = nfsseg->start_block + nfsseg->segsum_blocks;
+ seg_bp = TAILQ_FIRST(&nfsseg->segsum);
+ DPRINTF(SYNC, ("%s: seg:%p segsum bp:%p data:%p\n",
+ __func__, nfsseg, seg_bp, seg_bp->b_data));
+
+ binfo = (union nandfs_binfo *)(seg_bp->b_data +
+ sizeof(struct nandfs_segment_summary));
+ curr_off = sizeof(struct nandfs_segment_summary);
+
+ TAILQ_FOREACH(bp, &nfsseg->data, b_cluster.cluster_entry) {
+ KASSERT((bp->b_vp), ("bp %p has not vp", bp));
+
+ DPRINTF(BMAP, ("\n\n%s: assign buf %p for ino %#jx next %p\n",
+ __func__, bp, (uintmax_t)VTON(bp->b_vp)->nn_ino,
+ TAILQ_NEXT(bp, b_cluster.cluster_entry)));
+
+ if (NBINFO(curr_off) > blocksize) {
+ seg_bp = TAILQ_NEXT(seg_bp, b_cluster.cluster_entry);
+ binfo = (union nandfs_binfo *)seg_bp->b_data;
+ curr_off = 0;
+ DPRINTF(SYNC, ("%s: next segsum %p data %p\n",
+ __func__, seg_bp, seg_bp->b_data));
+ }
+
+ error = nandfs_update_phys_block(fsdev, bp, blocknr, binfo);
+ if (error) {
+ nandfs_error("%s: err:%d when updatinng phys block:%jx"
+ " for bp:%p and binfo:%p\n", __func__, error,
+ (uintmax_t)blocknr, bp, binfo);
+ return (error);
+ }
+ binfo++;
+ curr_off = NBINFO(curr_off);
+
+ blocknr++;
+ }
+
+ return (0);
+}
+
+static int
+nandfs_seginfo_assign_pblk(struct nandfs_seginfo *seginfo)
+{
+ struct nandfs_segment *nfsseg;
+ int error = 0;
+
+ LIST_FOREACH(nfsseg, &seginfo->seg_list, seg_link) {
+ error = nandfs_segment_assign_pblk(nfsseg);
+ if (error)
+ break;
+ }
+
+ return (error);
+}
+
+static struct nandfs_segment_summary *
+nandfs_fill_segsum(struct nandfs_segment *seg, int has_sr)
+{
+ struct nandfs_segment_summary *ss;
+ struct nandfs_device *fsdev;
+ struct buf *bp;
+ uint32_t rest, segsum_size, blocksize, crc_calc;
+ uint16_t flags;
+ uint8_t *crc_area, crc_skip;
+
+ DPRINTF(SYNC, ("%s: seg %#jx nblocks %#x sumbytes %#x\n",
+ __func__, (uintmax_t) seg->seg_num,
+ seg->nblocks + seg->segsum_blocks,
+ seg->segsum_bytes));
+
+ fsdev = seg->fsdev;
+
+ flags = NANDFS_SS_LOGBGN | NANDFS_SS_LOGEND;
+ if (has_sr)
+ flags |= NANDFS_SS_SR;
+
+ bp = TAILQ_FIRST(&seg->segsum);
+ ss = (struct nandfs_segment_summary *) bp->b_data;
+ ss->ss_magic = NANDFS_SEGSUM_MAGIC;
+ ss->ss_bytes = sizeof(struct nandfs_segment_summary);
+ ss->ss_flags = flags;
+ ss->ss_seq = ++(fsdev->nd_seg_sequence);
+ ss->ss_create = fsdev->nd_ts.tv_sec;
+ nandfs_get_segment_range(fsdev, seg->seg_next, &ss->ss_next, NULL);
+ ss->ss_nblocks = seg->nblocks + seg->segsum_blocks;
+ ss->ss_nbinfos = seg->nbinfos;
+ ss->ss_sumbytes = seg->segsum_bytes;
+
+ crc_skip = sizeof(ss->ss_datasum) + sizeof(ss->ss_sumsum);
+ blocksize = seg->fsdev->nd_blocksize;
+
+ segsum_size = seg->segsum_bytes - crc_skip;
+ rest = min(seg->segsum_bytes, blocksize) - crc_skip;
+ crc_area = (uint8_t *)ss + crc_skip;
+ crc_calc = ~0U;
+ while (segsum_size > 0) {
+ crc_calc = crc32_raw(crc_area, rest, crc_calc);
+ segsum_size -= rest;
+ if (!segsum_size)
+ break;
+ bp = TAILQ_NEXT(bp, b_cluster.cluster_entry);
+ crc_area = (uint8_t *)bp->b_data;
+ rest = segsum_size <= blocksize ? segsum_size : blocksize;
+ }
+ ss->ss_sumsum = crc_calc ^ ~0U;
+
+ return (ss);
+
+}
+
+static int
+nandfs_save_buf(struct buf *bp, uint64_t blocknr, struct nandfs_device *fsdev)
+{
+ struct bufobj *bo;
+ int error;
+
+ bo = &fsdev->nd_devvp->v_bufobj;
+
+ bp->b_blkno = nandfs_block_to_dblock(fsdev, blocknr);
+ bp->b_iooffset = dbtob(bp->b_blkno);
+
+ KASSERT(bp->b_bufobj != NULL, ("no bufobj for %p", bp));
+ if (bp->b_bufobj != bo) {
+ BO_LOCK(bp->b_bufobj);
+ BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK,
+ BO_MTX(bp->b_bufobj));
+ KASSERT(BUF_ISLOCKED(bp), ("Problem with locking buffer"));
+ }
+
+ DPRINTF(SYNC, ("%s: buf: %p offset %#jx blk %#jx size %#x\n",
+ __func__, bp, (uintmax_t)bp->b_offset, (uintmax_t)blocknr,
+ fsdev->nd_blocksize));
+
+ NANDFS_UNGATHER(bp);
+ nandfs_buf_clear(bp, 0xffffffff);
+ bp->b_flags &= ~(B_ASYNC|B_INVAL|B_MANAGED);
+ error = bwrite(bp);
+ if (error) {
+ nandfs_error("%s: error:%d when writing buffer:%p\n",
+ __func__, error, bp);
+ return (error);
+ }
+ return (error);
+}
+
+static void
+nandfs_clean_buf(struct nandfs_device *fsdev, struct buf *bp)
+{
+
+ DPRINTF(SYNC, ("%s: buf: %p\n", __func__, bp));
+
+ NANDFS_UNGATHER(bp);
+ nandfs_buf_clear(bp, 0xffffffff);
+ bp->b_flags &= ~(B_ASYNC|B_INVAL|B_MANAGED);
+ nandfs_undirty_buf_fsdev(fsdev, bp);
+}
+
+static void
+nandfs_clean_segblocks(struct nandfs_segment *seg, uint8_t unlock)
+{
+ struct nandfs_device *fsdev = seg->fsdev;
+ struct nandfs_segment *next_seg;
+ struct buf *bp, *tbp, *next_bp;
+ struct vnode *vp, *next_vp;
+
+ VOP_LOCK(fsdev->nd_devvp, LK_EXCLUSIVE);
+ TAILQ_FOREACH_SAFE(bp, &seg->segsum, b_cluster.cluster_entry, tbp) {
+ TAILQ_REMOVE(&seg->segsum, bp, b_cluster.cluster_entry);
+ nandfs_clean_buf(fsdev, bp);
+ };
+
+ TAILQ_FOREACH_SAFE(bp, &seg->data, b_cluster.cluster_entry, tbp) {
+ TAILQ_REMOVE(&seg->data, bp, b_cluster.cluster_entry);
+
+ /*
+ * If bp is not super-root and vnode is not currently
+ * locked lock it.
+ */
+ vp = bp->b_vp;
+ next_vp = NULL;
+ next_bp = TAILQ_NEXT(bp, b_cluster.cluster_entry);
+ if (!next_bp) {
+ next_seg = LIST_NEXT(seg, seg_link);
+ if (next_seg)
+ next_bp = TAILQ_FIRST(&next_seg->data);
+ }
+
+ if (next_bp)
+ next_vp = next_bp->b_vp;
+
+ nandfs_clean_buf(fsdev, bp);
+
+ if (unlock && vp != NULL && next_vp != vp &&
+ !NANDFS_SYS_NODE(VTON(vp)->nn_ino))
+ vput(vp);
+
+ nandfs_dirty_bufs_decrement(fsdev);
+ }
+
+ VOP_UNLOCK(fsdev->nd_devvp, 0);
+}
+
+static int
+nandfs_save_segblocks(struct nandfs_segment *seg, uint8_t unlock)
+{
+ struct nandfs_device *fsdev = seg->fsdev;
+ struct nandfs_segment *next_seg;
+ struct buf *bp, *tbp, *next_bp;
+ struct vnode *vp, *next_vp;
+ uint64_t blocknr;
+ uint32_t i = 0;
+ int error = 0;
+
+ VOP_LOCK(fsdev->nd_devvp, LK_EXCLUSIVE);
+ TAILQ_FOREACH_SAFE(bp, &seg->segsum, b_cluster.cluster_entry, tbp) {
+ TAILQ_REMOVE(&seg->segsum, bp, b_cluster.cluster_entry);
+ blocknr = seg->start_block + i;
+ error = nandfs_save_buf(bp, blocknr, fsdev);
+ if (error) {
+ nandfs_error("%s: error saving buf: %p blocknr:%jx\n",
+ __func__, bp, (uintmax_t)blocknr);
+ goto out;
+ }
+ i++;
+ };
+
+ i = 0;
+ TAILQ_FOREACH_SAFE(bp, &seg->data, b_cluster.cluster_entry, tbp) {
+ TAILQ_REMOVE(&seg->data, bp, b_cluster.cluster_entry);
+
+ blocknr = seg->start_block + seg->segsum_blocks + i;
+ /*
+ * If bp is not super-root and vnode is not currently
+ * locked lock it.
+ */
+ vp = bp->b_vp;
+ next_vp = NULL;
+ next_bp = TAILQ_NEXT(bp, b_cluster.cluster_entry);
+ if (!next_bp) {
+ next_seg = LIST_NEXT(seg, seg_link);
+ if (next_seg)
+ next_bp = TAILQ_FIRST(&next_seg->data);
+ }
+
+ if (next_bp)
+ next_vp = next_bp->b_vp;
+
+ error = nandfs_save_buf(bp, blocknr, fsdev);
+ if (error) {
+ nandfs_error("%s: error saving buf: %p blknr: %jx\n",
+ __func__, bp, (uintmax_t)blocknr);
+ if (unlock && vp != NULL && next_vp != vp &&
+ !NANDFS_SYS_NODE(VTON(vp)->nn_ino))
+ vput(vp);
+ goto out;
+ }
+
+ if (unlock && vp != NULL && next_vp != vp &&
+ !NANDFS_SYS_NODE(VTON(vp)->nn_ino))
+ vput(vp);
+
+ i++;
+ nandfs_dirty_bufs_decrement(fsdev);
+ }
+out:
+ if (error) {
+ nandfs_clean_segblocks(seg, unlock);
+ VOP_UNLOCK(fsdev->nd_devvp, 0);
+ return (error);
+ }
+
+ VOP_UNLOCK(fsdev->nd_devvp, 0);
+ return (error);
+}
+
+
+static void
+clean_seginfo(struct nandfs_seginfo *seginfo, uint8_t unlock)
+{
+ struct nandfs_segment *seg;
+
+ DPRINTF(SYNC, ("%s: seginfo %p\n", __func__, seginfo));
+
+ LIST_FOREACH(seg, &seginfo->seg_list, seg_link) {
+ nandfs_clean_segblocks(seg, unlock);
+ }
+}
+
+static int
+save_seginfo(struct nandfs_seginfo *seginfo, uint8_t unlock)
+{
+ struct nandfs_segment *seg;
+ struct nandfs_device *fsdev;
+ struct nandfs_segment_summary *ss;
+ int error = 0;
+
+ fsdev = seginfo->fsdev;
+
+ DPRINTF(SYNC, ("%s: seginfo %p\n", __func__, seginfo));
+
+ LIST_FOREACH(seg, &seginfo->seg_list, seg_link) {
+ if (LIST_NEXT(seg, seg_link)) {
+ nandfs_fill_segsum(seg, 0);
+ error = nandfs_save_segblocks(seg, unlock);
+ if (error) {
+ nandfs_error("%s: error:%d saving seg:%p\n",
+ __func__, error, seg);
+ goto out;
+ }
+ } else {
+ ss = nandfs_fill_segsum(seg, 1);
+ fsdev->nd_last_segsum = *ss;
+ error = nandfs_save_segblocks(seg, unlock);
+ if (error) {
+ nandfs_error("%s: error:%d saving seg:%p\n",
+ __func__, error, seg);
+ goto out;
+ }
+ fsdev->nd_last_cno++;
+ fsdev->nd_last_pseg = seg->start_block;
+ }
+ }
+out:
+ if (error)
+ clean_seginfo(seginfo, unlock);
+ return (error);
+}
+
+static void
+nandfs_invalidate_bufs(struct nandfs_device *fsdev, uint64_t segno)
+{
+ uint64_t start, end;
+ struct buf *bp, *tbd;
+ struct bufobj *bo;
+
+ nandfs_get_segment_range(fsdev, segno, &start, &end);
+
+ bo = &NTOV(fsdev->nd_gc_node)->v_bufobj;
+
+ BO_LOCK(bo);
+restart_locked_gc:
+ TAILQ_FOREACH_SAFE(bp, &bo->bo_clean.bv_hd, b_bobufs, tbd) {
+ if (!(bp->b_lblkno >= start && bp->b_lblkno <= end))
+ continue;
+
+ if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT, NULL))
+ goto restart_locked_gc;
+
+ bremfree(bp);
+ bp->b_flags |= (B_INVAL | B_RELBUF);
+ bp->b_flags &= ~(B_ASYNC | B_MANAGED);
+ BO_UNLOCK(bo);
+ brelse(bp);
+ BO_LOCK(bo);
+ }
+ BO_UNLOCK(bo);
+}
+
+/* Process segments marks to free by cleaner */
+static void
+nandfs_process_segments(struct nandfs_device *fsdev)
+{
+ uint64_t saved_segment;
+ int i;
+
+ if (fsdev->nd_free_base) {
+ saved_segment = nandfs_get_segnum_of_block(fsdev,
+ fsdev->nd_super.s_last_pseg);
+ for (i = 0; i < fsdev->nd_free_count; i++) {
+ if (fsdev->nd_free_base[i] == NANDFS_NOSEGMENT)
+ continue;
+ /* Update superblock if clearing segment point by it */
+ if (fsdev->nd_free_base[i] == saved_segment) {
+ nandfs_write_superblock(fsdev);
+ saved_segment = nandfs_get_segnum_of_block(
+ fsdev, fsdev->nd_super.s_last_pseg);
+ }
+ nandfs_invalidate_bufs(fsdev, fsdev->nd_free_base[i]);
+ nandfs_clear_segment(fsdev, fsdev->nd_free_base[i]);
+ }
+
+ free(fsdev->nd_free_base, M_NANDFSTEMP);
+ fsdev->nd_free_base = NULL;
+ fsdev->nd_free_count = 0;
+ }
+}
+
+/* Collect and write dirty buffers */
+int
+nandfs_sync_file(struct vnode *vp)
+{
+ struct nandfs_device *fsdev;
+ struct nandfs_node *nandfs_node;
+ struct nandfsmount *nmp;
+ struct nandfs_node *dat, *su, *ifile, *cp;
+ struct nandfs_seginfo *seginfo = NULL;
+ struct nandfs_segment *seg;
+ int update, error;
+ int cno_changed;
+
+ ASSERT_VOP_LOCKED(vp, __func__);
+ DPRINTF(SYNC, ("%s: START\n", __func__));
+
+ error = 0;
+ nmp = VFSTONANDFS(vp->v_mount);
+ fsdev = nmp->nm_nandfsdev;
+
+ dat = fsdev->nd_dat_node;
+ su = fsdev->nd_su_node;
+ cp = fsdev->nd_cp_node;
+ ifile = nmp->nm_ifile_node;
+
+ NANDFS_WRITEASSERT(fsdev);
+ if (lockmgr(&fsdev->nd_seg_const, LK_UPGRADE, NULL) != 0) {
+ DPRINTF(SYNC, ("%s: lost shared lock\n", __func__));
+ if (lockmgr(&fsdev->nd_seg_const, LK_EXCLUSIVE, NULL) != 0)
+ panic("couldn't lock exclusive");
+ }
+ DPRINTF(SYNC, ("%s: got lock\n", __func__));
+
+ VOP_LOCK(NTOV(su), LK_EXCLUSIVE);
+ create_seginfo(fsdev, &seginfo);
+
+ update = 0;
+
+ nandfs_node = VTON(vp);
+ if (nandfs_node->nn_flags & IN_MODIFIED) {
+ nandfs_node->nn_flags &= ~(IN_MODIFIED);
+ update = 1;
+ }
+
+ if (vp->v_bufobj.bo_dirty.bv_cnt) {
+ error = nandfs_iterate_dirty_buf(vp, seginfo, 0);
+ if (error) {
+ clean_seginfo(seginfo, 0);
+ delete_seginfo(seginfo);
+ VOP_UNLOCK(NTOV(su), 0);
+ lockmgr(&fsdev->nd_seg_const, LK_DOWNGRADE, NULL);
+ nandfs_error("%s: err:%d iterating dirty bufs vp:%p",
+ __func__, error, vp);
+ return (error);
+ }
+ update = 1;
+ }
+
+ if (update) {
+ VOP_LOCK(NTOV(ifile), LK_EXCLUSIVE);
+ error = nandfs_node_update(nandfs_node);
+ if (error) {
+ clean_seginfo(seginfo, 0);
+ delete_seginfo(seginfo);
+ VOP_UNLOCK(NTOV(ifile), 0);
+ VOP_UNLOCK(NTOV(su), 0);
+ lockmgr(&fsdev->nd_seg_const, LK_DOWNGRADE, NULL);
+ nandfs_error("%s: err:%d updating vp:%p",
+ __func__, error, vp);
+ return (error);
+ }
+ VOP_UNLOCK(NTOV(ifile), 0);
+ }
+
+ cno_changed = 0;
+ if (seginfo->blocks) {
+ VOP_LOCK(NTOV(cp), LK_EXCLUSIVE);
+ cno_changed = 1;
+ /* Create new checkpoint */
+ error = nandfs_get_checkpoint(fsdev, cp, fsdev->nd_last_cno + 1);
+ if (error) {
+ clean_seginfo(seginfo, 0);
+ delete_seginfo(seginfo);
+ VOP_UNLOCK(NTOV(cp), 0);
+ VOP_UNLOCK(NTOV(su), 0);
+ lockmgr(&fsdev->nd_seg_const, LK_DOWNGRADE, NULL);
+ nandfs_error("%s: err:%d getting cp:%jx",
+ __func__, error, fsdev->nd_last_cno + 1);
+ return (error);
+ }
+
+ /* Reiterate all blocks and assign physical block number */
+ nandfs_seginfo_assign_pblk(seginfo);
+
+ /* Fill checkpoint data */
+ error = nandfs_set_checkpoint(fsdev, cp, fsdev->nd_last_cno + 1,
+ &ifile->nn_inode, seginfo->blocks);
+ if (error) {
+ clean_seginfo(seginfo, 0);
+ delete_seginfo(seginfo);
+ VOP_UNLOCK(NTOV(cp), 0);
+ VOP_UNLOCK(NTOV(su), 0);
+ lockmgr(&fsdev->nd_seg_const, LK_DOWNGRADE, NULL);
+ nandfs_error("%s: err:%d setting cp:%jx",
+ __func__, error, fsdev->nd_last_cno + 1);
+ return (error);
+ }
+
+ VOP_UNLOCK(NTOV(cp), 0);
+ LIST_FOREACH(seg, &seginfo->seg_list, seg_link)
+ nandfs_update_segment(fsdev, seg->seg_num,
+ seg->nblocks + seg->segsum_blocks);
+
+ VOP_LOCK(NTOV(dat), LK_EXCLUSIVE);
+ error = save_seginfo(seginfo, 0);
+ if (error) {
+ clean_seginfo(seginfo, 0);
+ delete_seginfo(seginfo);
+ VOP_UNLOCK(NTOV(dat), 0);
+ VOP_UNLOCK(NTOV(su), 0);
+ lockmgr(&fsdev->nd_seg_const, LK_DOWNGRADE, NULL);
+ nandfs_error("%s: err:%d updating seg",
+ __func__, error);
+ return (error);
+ }
+ VOP_UNLOCK(NTOV(dat), 0);
+ }
+
+ VOP_UNLOCK(NTOV(su), 0);
+
+ delete_seginfo(seginfo);
+ lockmgr(&fsdev->nd_seg_const, LK_DOWNGRADE, NULL);
+
+ if (cno_changed && !error) {
+ if (nandfs_cps_between_sblocks != 0 &&
+ fsdev->nd_last_cno % nandfs_cps_between_sblocks == 0)
+ nandfs_write_superblock(fsdev);
+ }
+
+ ASSERT_VOP_LOCKED(vp, __func__);
+ DPRINTF(SYNC, ("%s: END error %d\n", __func__, error));
+ return (error);
+}
+
+int
+nandfs_segment_constructor(struct nandfsmount *nmp, int flags)
+{
+ struct nandfs_device *fsdev;
+ struct nandfs_seginfo *seginfo = NULL;
+ struct nandfs_segment *seg;
+ struct nandfs_node *dat, *su, *ifile, *cp, *gc;
+ int cno_changed, error;
+
+ DPRINTF(SYNC, ("%s: START\n", __func__));
+ fsdev = nmp->nm_nandfsdev;
+
+ lockmgr(&fsdev->nd_seg_const, LK_EXCLUSIVE, NULL);
+ DPRINTF(SYNC, ("%s: git lock\n", __func__));
+again:
+ create_seginfo(fsdev, &seginfo);
+
+ dat = fsdev->nd_dat_node;
+ su = fsdev->nd_su_node;
+ cp = fsdev->nd_cp_node;
+ gc = fsdev->nd_gc_node;
+ ifile = nmp->nm_ifile_node;
+
+ VOP_LOCK(NTOV(su), LK_EXCLUSIVE);
+ VOP_LOCK(NTOV(ifile), LK_EXCLUSIVE);
+ VOP_LOCK(NTOV(gc), LK_EXCLUSIVE);
+ VOP_LOCK(NTOV(cp), LK_EXCLUSIVE);
+
+ nandfs_iterate_system_vnode(gc, seginfo);
+ nandfs_iterate_dirty_vnodes(nmp->nm_vfs_mountp, seginfo);
+ nandfs_iterate_system_vnode(ifile, seginfo);
+ nandfs_iterate_system_vnode(su, seginfo);
+
+ cno_changed = 0;
+ if (seginfo->blocks || flags) {
+ cno_changed = 1;
+ /* Create new checkpoint */
+ error = nandfs_get_checkpoint(fsdev, cp, fsdev->nd_last_cno + 1);
+ if (error) {
+ clean_seginfo(seginfo, 0);
+ delete_seginfo(seginfo);
+ goto error_locks;
+ }
+
+ /* Collect blocks from system files */
+ nandfs_iterate_system_vnode(cp, seginfo);
+ nandfs_iterate_system_vnode(su, seginfo);
+ VOP_LOCK(NTOV(dat), LK_EXCLUSIVE);
+ nandfs_iterate_system_vnode(dat, seginfo);
+ VOP_UNLOCK(NTOV(dat), 0);
+reiterate:
+ seginfo->reiterate = 0;
+ nandfs_iterate_system_vnode(su, seginfo);
+ VOP_LOCK(NTOV(dat), LK_EXCLUSIVE);
+ nandfs_iterate_system_vnode(dat, seginfo);
+ VOP_UNLOCK(NTOV(dat), 0);
+ if (seginfo->reiterate)
+ goto reiterate;
+ if (!(seginfo->curseg) || !seginfo->curseg->num_blocks) {
+ error = create_segment(seginfo);
+ if (error) {
+ clean_seginfo(seginfo, 0);
+ delete_seginfo(seginfo);
+ goto error_locks;
+ }
+ goto reiterate;
+ }
+
+ /* Reiterate all blocks and assign physical block number */
+ nandfs_seginfo_assign_pblk(seginfo);
+
+ /* Fill superroot */
+ error = nandfs_add_superroot(seginfo);
+ if (error) {
+ clean_seginfo(seginfo, 0);
+ delete_seginfo(seginfo);
+ goto error_locks;
+ }
+ KASSERT(!(seginfo->reiterate), ("reiteration after superroot"));
+
+ /* Fill checkpoint data */
+ nandfs_set_checkpoint(fsdev, cp, fsdev->nd_last_cno + 1,
+ &ifile->nn_inode, seginfo->blocks);
+
+ LIST_FOREACH(seg, &seginfo->seg_list, seg_link)
+ nandfs_update_segment(fsdev, seg->seg_num,
+ seg->nblocks + seg->segsum_blocks);
+
+ VOP_LOCK(NTOV(dat), LK_EXCLUSIVE);
+ error = save_seginfo(seginfo, 1);
+ if (error) {
+ clean_seginfo(seginfo, 1);
+ delete_seginfo(seginfo);
+ goto error_dat;
+ }
+ VOP_UNLOCK(NTOV(dat), 0);
+ }
+
+ VOP_UNLOCK(NTOV(cp), 0);
+ VOP_UNLOCK(NTOV(gc), 0);
+ VOP_UNLOCK(NTOV(ifile), 0);
+
+ nandfs_process_segments(fsdev);
+
+ VOP_UNLOCK(NTOV(su), 0);
+
+ delete_seginfo(seginfo);
+
+ /*
+ * XXX: a hack, will go away soon
+ */
+ if ((NTOV(dat)->v_bufobj.bo_dirty.bv_cnt != 0 ||
+ NTOV(cp)->v_bufobj.bo_dirty.bv_cnt != 0 ||
+ NTOV(gc)->v_bufobj.bo_dirty.bv_cnt != 0 ||
+ NTOV(ifile)->v_bufobj.bo_dirty.bv_cnt != 0 ||
+ NTOV(su)->v_bufobj.bo_dirty.bv_cnt != 0) &&
+ (flags & NANDFS_UMOUNT)) {
+ DPRINTF(SYNC, ("%s: RERUN\n", __func__));
+ goto again;
+ }
+
+ MPASS(fsdev->nd_free_base == NULL);
+
+ lockmgr(&fsdev->nd_seg_const, LK_RELEASE, NULL);
+
+ if (cno_changed) {
+ if ((nandfs_cps_between_sblocks != 0 &&
+ fsdev->nd_last_cno % nandfs_cps_between_sblocks == 0) ||
+ flags & NANDFS_UMOUNT)
+ nandfs_write_superblock(fsdev);
+ }
+
+ DPRINTF(SYNC, ("%s: END\n", __func__));
+ return (0);
+error_dat:
+ VOP_UNLOCK(NTOV(dat), 0);
+error_locks:
+ VOP_UNLOCK(NTOV(cp), 0);
+ VOP_UNLOCK(NTOV(gc), 0);
+ VOP_UNLOCK(NTOV(ifile), 0);
+ VOP_UNLOCK(NTOV(su), 0);
+ lockmgr(&fsdev->nd_seg_const, LK_RELEASE, NULL);
+
+ return (error);
+}
+
+#ifdef DDB
+/*
+ * Show details about the given NANDFS mount point.
+ */
+DB_SHOW_COMMAND(nandfs, db_show_nandfs)
+{
+ struct mount *mp;
+ struct nandfs_device *nffsdev;
+ struct nandfs_segment *seg;
+ struct nandfsmount *nmp;
+ struct buf *bp;
+ struct vnode *vp;
+
+ if (!have_addr) {
+ db_printf("\nUsage: show nandfs <mount_addr>\n");
+ return;
+ }
+
+ mp = (struct mount *)addr;
+ db_printf("%p %s on %s (%s)\n", mp, mp->mnt_stat.f_mntfromname,
+ mp->mnt_stat.f_mntonname, mp->mnt_stat.f_fstypename);
+
+
+ nmp = (struct nandfsmount *)(mp->mnt_data);
+ nffsdev = nmp->nm_nandfsdev;
+ db_printf("dev vnode:%p\n", nffsdev->nd_devvp);
+ db_printf("blocksize:%jx last cno:%jx last pseg:%jx seg num:%jx\n",
+ (uintmax_t)nffsdev->nd_blocksize, (uintmax_t)nffsdev->nd_last_cno,
+ (uintmax_t)nffsdev->nd_last_pseg, (uintmax_t)nffsdev->nd_seg_num);
+ db_printf("system nodes: dat:%p cp:%p su:%p ifile:%p gc:%p\n",
+ nffsdev->nd_dat_node, nffsdev->nd_cp_node, nffsdev->nd_su_node,
+ nmp->nm_ifile_node, nffsdev->nd_gc_node);
+
+ if (nffsdev->nd_seginfo != NULL) {
+ LIST_FOREACH(seg, &nffsdev->nd_seginfo->seg_list, seg_link) {
+ db_printf("seg: %p\n", seg);
+ TAILQ_FOREACH(bp, &seg->segsum,
+ b_cluster.cluster_entry)
+ db_printf("segbp %p\n", bp);
+ TAILQ_FOREACH(bp, &seg->data,
+ b_cluster.cluster_entry) {
+ vp = bp->b_vp;
+ db_printf("bp:%p bp->b_vp:%p ino:%jx\n", bp, vp,
+ (uintmax_t)(vp ? VTON(vp)->nn_ino : 0));
+ }
+ }
+ }
+}
+#endif
diff --git a/sys/fs/nandfs/nandfs_subr.c b/sys/fs/nandfs/nandfs_subr.c
new file mode 100644
index 000000000000..b485422caab9
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_subr.c
@@ -0,0 +1,1120 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf
+ * Copyright (c) 2008, 2009 Reinoud Zandijk
+ * 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.
+ *
+ * From: NetBSD: nilfs_subr.c,v 1.4 2009/07/29 17:06:57 reinoud
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/namei.h>
+#include <sys/resourcevar.h>
+#include <sys/kernel.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+#include <sys/proc.h>
+#include <sys/mount.h>
+#include <sys/vnode.h>
+#include <sys/signalvar.h>
+#include <sys/malloc.h>
+#include <sys/dirent.h>
+#include <sys/lockf.h>
+#include <sys/libkern.h>
+
+#include <geom/geom.h>
+#include <geom/geom_vfs.h>
+
+#include <vm/vm.h>
+#include <vm/vm_extern.h>
+
+#include <machine/_inttypes.h>
+#include "nandfs_mount.h"
+#include "nandfs.h"
+#include "nandfs_subr.h"
+
+MALLOC_DEFINE(M_NANDFSMNT, "nandfs_mount", "NANDFS mount");;
+MALLOC_DEFINE(M_NANDFSTEMP, "nandfs_tmt", "NANDFS tmp");
+
+uma_zone_t nandfs_node_zone;
+
+void nandfs_bdflush(struct bufobj *bo, struct buf *bp);
+int nandfs_bufsync(struct bufobj *bo, int waitfor);
+
+struct buf_ops buf_ops_nandfs = {
+ .bop_name = "buf_ops_nandfs",
+ .bop_write = bufwrite,
+ .bop_strategy = bufstrategy,
+ .bop_sync = nandfs_bufsync,
+ .bop_bdflush = nandfs_bdflush,
+};
+
+int
+nandfs_bufsync(struct bufobj *bo, int waitfor)
+{
+ struct vnode *vp;
+ int error = 0;
+
+ vp = bo->__bo_vnode;
+
+ ASSERT_VOP_LOCKED(vp, __func__);
+ error = nandfs_sync_file(vp);
+ if (error)
+ nandfs_warning("%s: cannot flush buffers err:%d\n",
+ __func__, error);
+
+ return (error);
+}
+
+void
+nandfs_bdflush(bo, bp)
+ struct bufobj *bo;
+ struct buf *bp;
+{
+ struct vnode *vp;
+ int error;
+
+ if (bo->bo_dirty.bv_cnt <= ((dirtybufthresh * 8) / 10))
+ return;
+
+ vp = bp->b_vp;
+ if (NANDFS_SYS_NODE(VTON(vp)->nn_ino))
+ return;
+
+ if (NANDFS_IS_INDIRECT(bp))
+ return;
+
+ error = nandfs_sync_file(vp);
+ if (error)
+ nandfs_warning("%s: cannot flush buffers err:%d\n",
+ __func__, error);
+}
+
+int
+nandfs_init(struct vfsconf *vfsp)
+{
+
+ nandfs_node_zone = uma_zcreate("nandfs node zone",
+ sizeof(struct nandfs_node), NULL, NULL, NULL, NULL, 0, 0);
+
+ return (0);
+}
+
+int
+nandfs_uninit(struct vfsconf *vfsp)
+{
+
+ uma_zdestroy(nandfs_node_zone);
+ return (0);
+}
+
+/* Basic calculators */
+uint64_t
+nandfs_get_segnum_of_block(struct nandfs_device *nandfsdev,
+ nandfs_daddr_t blocknr)
+{
+ uint64_t segnum, blks_per_seg;
+
+ MPASS(blocknr >= nandfsdev->nd_fsdata.f_first_data_block);
+
+ blks_per_seg = nandfsdev->nd_fsdata.f_blocks_per_segment;
+
+ segnum = blocknr / blks_per_seg;
+ segnum -= nandfsdev->nd_fsdata.f_first_data_block / blks_per_seg;
+
+ DPRINTF(SYNC, ("%s: returning blocknr %jx -> segnum %jx\n", __func__,
+ blocknr, segnum));
+
+ return (segnum);
+}
+
+void
+nandfs_get_segment_range(struct nandfs_device *nandfsdev, uint64_t segnum,
+ uint64_t *seg_start, uint64_t *seg_end)
+{
+ uint64_t blks_per_seg;
+
+ blks_per_seg = nandfsdev->nd_fsdata.f_blocks_per_segment;
+ *seg_start = nandfsdev->nd_fsdata.f_first_data_block +
+ blks_per_seg * segnum;
+ if (seg_end != NULL)
+ *seg_end = *seg_start + blks_per_seg -1;
+}
+
+void nandfs_calc_mdt_consts(struct nandfs_device *nandfsdev,
+ struct nandfs_mdt *mdt, int entry_size)
+{
+ uint32_t blocksize = nandfsdev->nd_blocksize;
+
+ mdt->entries_per_group = blocksize * 8;
+ mdt->entries_per_block = blocksize / entry_size;
+
+ mdt->blocks_per_group =
+ (mdt->entries_per_group -1) / mdt->entries_per_block + 1 + 1;
+ mdt->groups_per_desc_block =
+ blocksize / sizeof(struct nandfs_block_group_desc);
+ mdt->blocks_per_desc_block =
+ mdt->groups_per_desc_block * mdt->blocks_per_group + 1;
+}
+
+int
+nandfs_dev_bread(struct nandfs_device *nandfsdev, nandfs_lbn_t blocknr,
+ struct ucred *cred, int flags, struct buf **bpp)
+{
+ int blk2dev = nandfsdev->nd_blocksize / DEV_BSIZE;
+ int error;
+
+ DPRINTF(BLOCK, ("%s: read from block %jx vp %p\n", __func__,
+ blocknr * blk2dev, nandfsdev->nd_devvp));
+ error = bread(nandfsdev->nd_devvp, blocknr * blk2dev,
+ nandfsdev->nd_blocksize, NOCRED, bpp);
+ if (error)
+ nandfs_error("%s: cannot read from device - blk:%jx\n",
+ __func__, blocknr);
+ return (error);
+}
+
+/* Read on a node */
+int
+nandfs_bread(struct nandfs_node *node, nandfs_lbn_t blocknr,
+ struct ucred *cred, int flags, struct buf **bpp)
+{
+ nandfs_daddr_t vblk;
+ int error;
+
+ DPRINTF(BLOCK, ("%s: vp:%p lbn:%#jx\n", __func__, NTOV(node),
+ blocknr));
+
+ error = bread(NTOV(node), blocknr, node->nn_nandfsdev->nd_blocksize,
+ cred, bpp);
+
+ KASSERT(error == 0, ("%s: vp:%p lbn:%#jx err:%d\n", __func__,
+ NTOV(node), blocknr, error));
+
+ if (!nandfs_vblk_get(*bpp) &&
+ ((*bpp)->b_flags & B_CACHE) && node->nn_ino != NANDFS_DAT_INO) {
+ nandfs_bmap_lookup(node, blocknr, &vblk);
+ nandfs_vblk_set(*bpp, vblk);
+ }
+ return (error);
+}
+
+int
+nandfs_bread_meta(struct nandfs_node *node, nandfs_lbn_t blocknr,
+ struct ucred *cred, int flags, struct buf **bpp)
+{
+ nandfs_daddr_t vblk;
+ int error;
+
+ DPRINTF(BLOCK, ("%s: vp:%p lbn:%#jx\n", __func__, NTOV(node),
+ blocknr));
+
+ error = bread(NTOV(node), blocknr, node->nn_nandfsdev->nd_blocksize,
+ cred, bpp);
+
+ KASSERT(error == 0, ("%s: vp:%p lbn:%#jx err:%d\n", __func__,
+ NTOV(node), blocknr, error));
+
+ if (!nandfs_vblk_get(*bpp) &&
+ ((*bpp)->b_flags & B_CACHE) && node->nn_ino != NANDFS_DAT_INO) {
+ nandfs_bmap_lookup(node, blocknr, &vblk);
+ nandfs_vblk_set(*bpp, vblk);
+ }
+
+ return (error);
+}
+
+int
+nandfs_bdestroy(struct nandfs_node *node, nandfs_daddr_t vblk)
+{
+ int error;
+
+ if (!NANDFS_SYS_NODE(node->nn_ino))
+ NANDFS_WRITEASSERT(node->nn_nandfsdev);
+
+ error = nandfs_vblock_end(node->nn_nandfsdev, vblk);
+ if (error) {
+ nandfs_error("%s: ending vblk: %jx failed\n",
+ __func__, (uintmax_t)vblk);
+ return (error);
+ }
+ node->nn_inode.i_blocks--;
+
+ return (0);
+}
+
+int
+nandfs_bcreate(struct nandfs_node *node, nandfs_lbn_t blocknr,
+ struct ucred *cred, int flags, struct buf **bpp)
+{
+ int error;
+
+ ASSERT_VOP_LOCKED(NTOV(node), __func__);
+ if (!NANDFS_SYS_NODE(node->nn_ino))
+ NANDFS_WRITEASSERT(node->nn_nandfsdev);
+
+ DPRINTF(BLOCK, ("%s: vp:%p lbn:%#jx\n", __func__, NTOV(node),
+ blocknr));
+
+ *bpp = getblk(NTOV(node), blocknr, node->nn_nandfsdev->nd_blocksize,
+ 0, 0, 0);
+
+ KASSERT((*bpp), ("%s: vp:%p lbn:%#jx\n", __func__,
+ NTOV(node), blocknr));
+
+ if (*bpp) {
+ vfs_bio_clrbuf(*bpp);
+ (*bpp)->b_blkno = ~(0); /* To avoid VOP_BMAP in bdwrite */
+ error = nandfs_bmap_insert_block(node, blocknr, *bpp);
+ if (error) {
+ nandfs_warning("%s: failed bmap insert node:%p"
+ " blk:%jx\n", __func__, node, blocknr);
+ brelse(*bpp);
+ return (error);
+ }
+ node->nn_inode.i_blocks++;
+
+ return (0);
+ }
+
+ return (-1);
+}
+
+int
+nandfs_bcreate_meta(struct nandfs_node *node, nandfs_lbn_t blocknr,
+ struct ucred *cred, int flags, struct buf **bpp)
+{
+ struct nandfs_device *fsdev;
+ nandfs_daddr_t vblk;
+ int error;
+
+ ASSERT_VOP_LOCKED(NTOV(node), __func__);
+ NANDFS_WRITEASSERT(node->nn_nandfsdev);
+
+ DPRINTF(BLOCK, ("%s: vp:%p lbn:%#jx\n", __func__, NTOV(node),
+ blocknr));
+
+ fsdev = node->nn_nandfsdev;
+
+ *bpp = getblk(NTOV(node), blocknr, node->nn_nandfsdev->nd_blocksize,
+ 0, 0, 0);
+
+ KASSERT((*bpp), ("%s: vp:%p lbn:%#jx\n", __func__,
+ NTOV(node), blocknr));
+
+ memset((*bpp)->b_data, 0, fsdev->nd_blocksize);
+
+ vfs_bio_clrbuf(*bpp);
+ (*bpp)->b_blkno = ~(0); /* To avoid VOP_BMAP in bdwrite */
+
+ nandfs_buf_set(*bpp, NANDFS_VBLK_ASSIGNED);
+
+ if (node->nn_ino != NANDFS_DAT_INO) {
+ error = nandfs_vblock_alloc(fsdev, &vblk);
+ if (error) {
+ nandfs_buf_clear(*bpp, NANDFS_VBLK_ASSIGNED);
+ brelse(*bpp);
+ return (error);
+ }
+ } else
+ vblk = fsdev->nd_fakevblk++;
+
+ nandfs_vblk_set(*bpp, vblk);
+
+ nandfs_bmap_insert_block(node, blocknr, *bpp);
+ return (0);
+}
+
+/* Translate index to a file block number and an entry */
+void
+nandfs_mdt_trans(struct nandfs_mdt *mdt, uint64_t index,
+ nandfs_lbn_t *blocknr, uint32_t *entry_in_block)
+{
+ uint64_t blknr;
+ uint64_t group, group_offset, blocknr_in_group;
+ uint64_t desc_block, desc_offset;
+
+ /* Calculate our offset in the file */
+ group = index / mdt->entries_per_group;
+ group_offset = index % mdt->entries_per_group;
+ desc_block = group / mdt->groups_per_desc_block;
+ desc_offset = group % mdt->groups_per_desc_block;
+ blocknr_in_group = group_offset / mdt->entries_per_block;
+
+ /* To descgroup offset */
+ blknr = 1 + desc_block * mdt->blocks_per_desc_block;
+
+ /* To group offset */
+ blknr += desc_offset * mdt->blocks_per_group;
+
+ /* To actual file block */
+ blknr += 1 + blocknr_in_group;
+
+ *blocknr = blknr;
+ *entry_in_block = group_offset % mdt->entries_per_block;
+}
+
+void
+nandfs_mdt_trans_blk(struct nandfs_mdt *mdt, uint64_t index,
+ uint64_t *desc, uint64_t *bitmap, nandfs_lbn_t *blocknr,
+ uint32_t *entry_in_block)
+{
+ uint64_t blknr;
+ uint64_t group, group_offset, blocknr_in_group;
+ uint64_t desc_block, desc_offset;
+
+ /* Calculate our offset in the file */
+ group = index / mdt->entries_per_group;
+ group_offset = index % mdt->entries_per_group;
+ desc_block = group / mdt->groups_per_desc_block;
+ desc_offset = group % mdt->groups_per_desc_block;
+ blocknr_in_group = group_offset / mdt->entries_per_block;
+
+ /* To descgroup offset */
+ *desc = desc_block * mdt->blocks_per_desc_block;
+ blknr = 1 + desc_block * mdt->blocks_per_desc_block;
+
+ /* To group offset */
+ blknr += desc_offset * mdt->blocks_per_group;
+ *bitmap = blknr;
+
+ /* To actual file block */
+ blknr += 1 + blocknr_in_group;
+
+ *blocknr = blknr;
+ *entry_in_block = group_offset % mdt->entries_per_block;
+
+ DPRINTF(ALLOC,
+ ("%s: desc_buf: %jx bitmap_buf: %jx entry_buf: %jx entry: %x\n",
+ __func__, (uintmax_t)*desc, (uintmax_t)*bitmap,
+ (uintmax_t)*blocknr, *entry_in_block));
+}
+
+int
+nandfs_vtop(struct nandfs_node *node, nandfs_daddr_t vblocknr,
+ nandfs_daddr_t *pblocknr)
+{
+ struct nandfs_node *dat_node;
+ struct nandfs_dat_entry *entry;
+ struct buf *bp;
+ nandfs_lbn_t ldatblknr;
+ uint32_t entry_in_block;
+ int locked, error;
+
+ if (node->nn_ino == NANDFS_DAT_INO || node->nn_ino == NANDFS_GC_INO) {
+ *pblocknr = vblocknr;
+ return (0);
+ }
+
+ /* only translate valid vblocknrs */
+ if (vblocknr == 0)
+ return (0);
+
+ dat_node = node->nn_nandfsdev->nd_dat_node;
+ nandfs_mdt_trans(&node->nn_nandfsdev->nd_dat_mdt, vblocknr, &ldatblknr,
+ &entry_in_block);
+
+ locked = NANDFS_VOP_ISLOCKED(NTOV(dat_node));
+ if (!locked)
+ VOP_LOCK(NTOV(dat_node), LK_SHARED);
+ error = nandfs_bread(dat_node, ldatblknr, NOCRED, 0, &bp);
+ if (error) {
+ DPRINTF(TRANSLATE, ("vtop: can't read in DAT block %#jx!\n",
+ (uintmax_t)ldatblknr));
+ brelse(bp);
+ VOP_UNLOCK(NTOV(dat_node), 0);
+ return (error);
+ }
+
+ /* Get our translation */
+ entry = ((struct nandfs_dat_entry *) bp->b_data) + entry_in_block;
+ DPRINTF(TRANSLATE, ("\tentry %p data %p entry_in_block %x\n",
+ entry, bp->b_data, entry_in_block))
+ DPRINTF(TRANSLATE, ("\tvblk %#jx -> %#jx for cp [%#jx-%#jx]\n",
+ (uintmax_t)vblocknr, (uintmax_t)entry->de_blocknr,
+ (uintmax_t)entry->de_start, (uintmax_t)entry->de_end));
+
+ *pblocknr = entry->de_blocknr;
+ brelse(bp);
+ if (!locked)
+ VOP_UNLOCK(NTOV(dat_node), 0);
+
+ MPASS(*pblocknr >= node->nn_nandfsdev->nd_fsdata.f_first_data_block ||
+ *pblocknr == 0);
+
+ return (0);
+}
+
+int
+nandfs_segsum_valid(struct nandfs_segment_summary *segsum)
+{
+
+ return (segsum->ss_magic == NANDFS_SEGSUM_MAGIC);
+}
+
+int
+nandfs_load_segsum(struct nandfs_device *fsdev, nandfs_daddr_t blocknr,
+ struct nandfs_segment_summary *segsum)
+{
+ struct buf *bp;
+ int error;
+
+ DPRINTF(VOLUMES, ("nandfs: try segsum at block %jx\n",
+ (uintmax_t)blocknr));
+
+ error = nandfs_dev_bread(fsdev, blocknr, NOCRED, 0, &bp);
+ if (error)
+ return (error);
+
+ memcpy(segsum, bp->b_data, sizeof(struct nandfs_segment_summary));
+ brelse(bp);
+
+ if (!nandfs_segsum_valid(segsum)) {
+ DPRINTF(VOLUMES, ("%s: bad magic pseg:%jx\n", __func__,
+ blocknr));
+ return (EINVAL);
+ }
+
+ return (error);
+}
+
+static int
+nandfs_load_super_root(struct nandfs_device *nandfsdev,
+ struct nandfs_segment_summary *segsum, uint64_t pseg)
+{
+ struct nandfs_super_root super_root;
+ struct buf *bp;
+ uint64_t blocknr;
+ uint32_t super_root_crc, comp_crc;
+ int off, error;
+
+ /* Check if there is a superroot */
+ if ((segsum->ss_flags & NANDFS_SS_SR) == 0) {
+ DPRINTF(VOLUMES, ("%s: no super root in pseg:%jx\n", __func__,
+ pseg));
+ return (ENOENT);
+ }
+
+ /* Get our super root, located at the end of the pseg */
+ blocknr = pseg + segsum->ss_nblocks - 1;
+ DPRINTF(VOLUMES, ("%s: try at %#jx\n", __func__, (uintmax_t)blocknr));
+
+ error = nandfs_dev_bread(nandfsdev, blocknr, NOCRED, 0, &bp);
+ if (error)
+ return (error);
+
+ memcpy(&super_root, bp->b_data, sizeof(struct nandfs_super_root));
+ brelse(bp);
+
+ /* Check super root CRC */
+ super_root_crc = super_root.sr_sum;
+ off = sizeof(super_root.sr_sum);
+ comp_crc = crc32((uint8_t *)&super_root + off,
+ NANDFS_SR_BYTES - off);
+
+ if (super_root_crc != comp_crc) {
+ DPRINTF(VOLUMES, ("%s: invalid crc:%#x [expect:%#x]\n",
+ __func__, super_root_crc, comp_crc));
+ return (EINVAL);
+ }
+
+ nandfsdev->nd_super_root = super_root;
+ DPRINTF(VOLUMES, ("%s: got valid superroot\n", __func__));
+
+ return (0);
+}
+
+/*
+ * Search for the last super root recorded.
+ */
+int
+nandfs_search_super_root(struct nandfs_device *nandfsdev)
+{
+ struct nandfs_super_block *super;
+ struct nandfs_segment_summary segsum;
+ uint64_t seg_start, seg_end, cno, seq, create, pseg;
+ uint64_t segnum;
+ int error, found;
+
+ error = found = 0;
+
+ /* Search for last super root */
+ pseg = nandfsdev->nd_super.s_last_pseg;
+ segnum = nandfs_get_segnum_of_block(nandfsdev, pseg);
+
+ cno = nandfsdev->nd_super.s_last_cno;
+ create = seq = 0;
+ DPRINTF(VOLUMES, ("%s: start in pseg %#jx\n", __func__,
+ (uintmax_t)pseg));
+
+ for (;;) {
+ error = nandfs_load_segsum(nandfsdev, pseg, &segsum);
+ if (error)
+ break;
+
+ if (segsum.ss_seq < seq || segsum.ss_create < create)
+ break;
+
+ /* Try to load super root */
+ if (segsum.ss_flags & NANDFS_SS_SR) {
+ error = nandfs_load_super_root(nandfsdev, &segsum, pseg);
+ if (error)
+ break; /* confused */
+ found = 1;
+
+ super = &nandfsdev->nd_super;
+ nandfsdev->nd_last_segsum = segsum;
+ super->s_last_pseg = pseg;
+ super->s_last_cno = cno++;
+ super->s_last_seq = segsum.ss_seq;
+ super->s_state = NANDFS_VALID_FS;
+ seq = segsum.ss_seq;
+ create = segsum.ss_create;
+ } else {
+ seq = segsum.ss_seq;
+ create = segsum.ss_create;
+ }
+
+ /* Calculate next partial segment location */
+ pseg += segsum.ss_nblocks;
+ DPRINTF(VOLUMES, ("%s: next partial seg is %jx\n", __func__,
+ (uintmax_t)pseg));
+
+ /* Did we reach the end of the segment? if so, go to the next */
+ nandfs_get_segment_range(nandfsdev, segnum, &seg_start,
+ &seg_end);
+ if (pseg >= seg_end) {
+ pseg = segsum.ss_next;
+ DPRINTF(VOLUMES,
+ (" partial seg oor next is %jx[%jx - %jx]\n",
+ (uintmax_t)pseg, (uintmax_t)seg_start,
+ (uintmax_t)seg_end));
+ }
+ segnum = nandfs_get_segnum_of_block(nandfsdev, pseg);
+ }
+
+ if (error && !found)
+ return (error);
+
+ return (0);
+}
+
+int
+nandfs_get_node_raw(struct nandfs_device *nandfsdev, struct nandfsmount *nmp,
+ uint64_t ino, struct nandfs_inode *inode, struct nandfs_node **nodep)
+{
+ struct nandfs_node *node;
+ struct vnode *nvp;
+ struct mount *mp;
+ int error;
+
+ *nodep = NULL;
+
+ /* Associate with mountpoint if present */
+ if (nmp) {
+ mp = nmp->nm_vfs_mountp;
+ error = getnewvnode("nandfs", mp, &nandfs_vnodeops, &nvp);
+ if (error) {
+ return (error);
+ }
+ } else {
+ mp = NULL;
+ error = getnewvnode("snandfs", mp, &nandfs_system_vnodeops,
+ &nvp);
+ if (error) {
+ return (error);
+ }
+ }
+
+ if (mp)
+ NANDFS_WRITELOCK(nandfsdev);
+
+ DPRINTF(IFILE, ("%s: ino: %#jx -> vp: %p\n",
+ __func__, (uintmax_t)ino, nvp));
+ /* Lock node */
+ lockmgr(nvp->v_vnlock, LK_EXCLUSIVE, NULL);
+
+ if (mp) {
+ error = insmntque(nvp, mp);
+ if (error != 0) {
+ *nodep = NULL;
+ return (error);
+ }
+ }
+
+ node = uma_zalloc(nandfs_node_zone, M_WAITOK | M_ZERO);
+
+ /* Crosslink */
+ node->nn_vnode = nvp;
+ nvp->v_bufobj.bo_ops = &buf_ops_nandfs;
+ node->nn_nmp = nmp;
+ node->nn_nandfsdev = nandfsdev;
+ nvp->v_data = node;
+
+ /* Initiase NANDFS node */
+ node->nn_ino = ino;
+ if (inode != NULL)
+ node->nn_inode = *inode;
+
+ nandfs_vinit(nvp, ino);
+
+ /* Return node */
+ *nodep = node;
+ DPRINTF(IFILE, ("%s: ino:%#jx vp:%p node:%p\n",
+ __func__, (uintmax_t)ino, nvp, *nodep));
+
+ return (0);
+}
+
+int
+nandfs_get_node(struct nandfsmount *nmp, uint64_t ino,
+ struct nandfs_node **nodep)
+{
+ struct nandfs_device *nandfsdev;
+ struct nandfs_inode inode, *entry;
+ struct vnode *nvp, *vpp;
+ struct thread *td;
+ struct buf *bp;
+ uint64_t ivblocknr;
+ uint32_t entry_in_block;
+ int error;
+
+ /* Look up node in hash table */
+ td = curthread;
+ *nodep = NULL;
+
+ if ((ino < NANDFS_ATIME_INO) && (ino != NANDFS_ROOT_INO)) {
+ printf("nandfs_get_node: system ino %"PRIu64" not in mount "
+ "point!\n", ino);
+ return (ENOENT);
+ }
+
+ error = vfs_hash_get(nmp->nm_vfs_mountp, ino, LK_EXCLUSIVE, td, &nvp,
+ NULL, NULL);
+ if (error)
+ return (error);
+
+ if (nvp != NULL) {
+ *nodep = (struct nandfs_node *)nvp->v_data;
+ return (0);
+ }
+
+ /* Look up inode structure in mountpoints ifile */
+ nandfsdev = nmp->nm_nandfsdev;
+ nandfs_mdt_trans(&nandfsdev->nd_ifile_mdt, ino, &ivblocknr,
+ &entry_in_block);
+
+ VOP_LOCK(NTOV(nmp->nm_ifile_node), LK_SHARED);
+ error = nandfs_bread(nmp->nm_ifile_node, ivblocknr, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ VOP_UNLOCK(NTOV(nmp->nm_ifile_node), 0);
+ return (ENOENT);
+ }
+
+ /* Get inode entry */
+ entry = (struct nandfs_inode *) bp->b_data + entry_in_block;
+ memcpy(&inode, entry, sizeof(struct nandfs_inode));
+ brelse(bp);
+ VOP_UNLOCK(NTOV(nmp->nm_ifile_node), 0);
+
+ /* Get node */
+ error = nandfs_get_node_raw(nmp->nm_nandfsdev, nmp, ino, &inode, nodep);
+ if (error) {
+ *nodep = NULL;
+ return (error);
+ }
+
+ nvp = (*nodep)->nn_vnode;
+ error = vfs_hash_insert(nvp, ino, 0, td, &vpp, NULL, NULL);
+ if (error) {
+ *nodep = NULL;
+ return (error);
+ }
+
+ return (error);
+}
+
+void
+nandfs_dispose_node(struct nandfs_node **nodep)
+{
+ struct nandfs_node *node;
+ struct vnode *vp;
+
+ /* Protect against rogue values */
+ node = *nodep;
+ if (!node) {
+ return;
+ }
+ DPRINTF(NODE, ("nandfs_dispose_node: %p\n", *nodep));
+
+ vp = NTOV(node);
+ vp->v_data = NULL;
+
+ /* Free our associated memory */
+ uma_zfree(nandfs_node_zone, node);
+
+ *nodep = NULL;
+}
+
+int
+nandfs_lookup_name_in_dir(struct vnode *dvp, const char *name, int namelen,
+ uint64_t *ino, int *found, uint64_t *off)
+{
+ struct nandfs_node *dir_node = VTON(dvp);
+ struct nandfs_dir_entry *ndirent;
+ struct buf *bp;
+ uint64_t file_size, diroffset, blkoff;
+ uint64_t blocknr;
+ uint32_t blocksize = dir_node->nn_nandfsdev->nd_blocksize;
+ uint8_t *pos, name_len;
+ int error;
+
+ *found = 0;
+
+ DPRINTF(VNCALL, ("%s: %s file\n", __func__, name));
+ if (dvp->v_type != VDIR) {
+ return (ENOTDIR);
+ }
+
+ /* Get directory filesize */
+ file_size = dir_node->nn_inode.i_size;
+
+ /* Walk the directory */
+ diroffset = 0;
+ blocknr = 0;
+ blkoff = 0;
+ error = nandfs_bread(dir_node, blocknr, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (EIO);
+ }
+
+ while (diroffset < file_size) {
+ if (blkoff >= blocksize) {
+ blkoff = 0; blocknr++;
+ brelse(bp);
+ error = nandfs_bread(dir_node, blocknr, NOCRED, 0,
+ &bp);
+ if (error) {
+ brelse(bp);
+ return (EIO);
+ }
+ }
+
+ /* Read in one dirent */
+ pos = (uint8_t *) bp->b_data + blkoff;
+ ndirent = (struct nandfs_dir_entry *) pos;
+ name_len = ndirent->name_len;
+
+ if ((name_len == namelen) &&
+ (strncmp(name, ndirent->name, name_len) == 0) &&
+ (ndirent->inode != 0)) {
+ *ino = ndirent->inode;
+ *off = diroffset;
+ DPRINTF(LOOKUP, ("found `%.*s` with ino %"PRIx64"\n",
+ name_len, ndirent->name, *ino));
+ *found = 1;
+ break;
+ }
+
+ /* Advance */
+ diroffset += ndirent->rec_len;
+ blkoff += ndirent->rec_len;
+ }
+ brelse(bp);
+
+ return (error);
+}
+
+int
+nandfs_get_fsinfo(struct nandfsmount *nmp, struct nandfs_fsinfo *fsinfo)
+{
+ struct nandfs_device *fsdev;
+
+ fsdev = nmp->nm_nandfsdev;
+
+ memcpy(&fsinfo->fs_fsdata, &fsdev->nd_fsdata, sizeof(fsdev->nd_fsdata));
+ memcpy(&fsinfo->fs_super, &fsdev->nd_super, sizeof(fsdev->nd_super));
+ snprintf(fsinfo->fs_dev, sizeof(fsinfo->fs_dev),
+ "%s", nmp->nm_vfs_mountp->mnt_stat.f_mntfromname);
+
+ return (0);
+}
+
+void
+nandfs_inode_init(struct nandfs_inode *inode, uint16_t mode)
+{
+ struct timespec ts;
+
+ vfs_timestamp(&ts);
+
+ inode->i_blocks = 0;
+ inode->i_size = 0;
+ inode->i_ctime = ts.tv_sec;
+ inode->i_ctime_nsec = ts.tv_nsec;
+ inode->i_mtime = ts.tv_sec;
+ inode->i_mtime_nsec = ts.tv_nsec;
+ inode->i_mode = mode;
+ inode->i_links_count = 1;
+ if (S_ISDIR(mode))
+ inode->i_links_count = 2;
+ inode->i_flags = 0;
+
+ inode->i_special = 0;
+ memset(inode->i_db, 0, sizeof(inode->i_db));
+ memset(inode->i_ib, 0, sizeof(inode->i_ib));
+}
+
+void
+nandfs_inode_destroy(struct nandfs_inode *inode)
+{
+
+ MPASS(inode->i_blocks == 0);
+ bzero(inode, sizeof(*inode));
+}
+
+int
+nandfs_fs_full(struct nandfs_device *nffsdev)
+{
+ uint64_t space, bps;
+
+ bps = nffsdev->nd_fsdata.f_blocks_per_segment;
+ space = (nffsdev->nd_clean_segs - 1) * bps;
+
+ DPRINTF(BUF, ("%s: bufs:%jx space:%jx\n", __func__,
+ (uintmax_t)nffsdev->nd_dirty_bufs, (uintmax_t)space));
+
+ if (nffsdev->nd_dirty_bufs + (10 * bps) >= space)
+ return (1);
+
+ return (0);
+}
+
+static int
+_nandfs_dirty_buf(struct buf *bp, int dirty_meta, int force)
+{
+ struct nandfs_device *nffsdev;
+ struct nandfs_node *node;
+ uint64_t ino, bps;
+
+ if (NANDFS_ISGATHERED(bp)) {
+ bqrelse(bp);
+ return (0);
+ }
+ if ((bp->b_flags & (B_MANAGED | B_DELWRI)) == (B_MANAGED | B_DELWRI)) {
+ bqrelse(bp);
+ return (0);
+ }
+
+ node = VTON(bp->b_vp);
+ nffsdev = node->nn_nandfsdev;
+ DPRINTF(BUF, ("%s: buf:%p\n", __func__, bp));
+ ino = node->nn_ino;
+
+ if (nandfs_fs_full(nffsdev) && !NANDFS_SYS_NODE(ino) && !force) {
+ brelse(bp);
+ return (ENOSPC);
+ }
+
+ bp->b_flags |= B_MANAGED;
+ bdwrite(bp);
+
+ nandfs_dirty_bufs_increment(nffsdev);
+
+ KASSERT((bp->b_vp), ("vp missing for bp"));
+ KASSERT((nandfs_vblk_get(bp) || ino == NANDFS_DAT_INO),
+ ("bp vblk is 0"));
+
+ /*
+ * To maintain consistency of FS we need to force making
+ * meta buffers dirty, even if free space is low.
+ */
+ if (dirty_meta && ino != NANDFS_GC_INO)
+ nandfs_bmap_dirty_blocks(VTON(bp->b_vp), bp, 1);
+
+ bps = nffsdev->nd_fsdata.f_blocks_per_segment;
+
+ if (nffsdev->nd_dirty_bufs >= (bps * nandfs_max_dirty_segs)) {
+ mtx_lock(&nffsdev->nd_sync_mtx);
+ if (nffsdev->nd_syncing == 0) {
+ DPRINTF(SYNC, ("%s: wakeup gc\n", __func__));
+ nffsdev->nd_syncing = 1;
+ wakeup(&nffsdev->nd_syncing);
+ }
+ mtx_unlock(&nffsdev->nd_sync_mtx);
+ }
+
+ return (0);
+}
+
+int
+nandfs_dirty_buf(struct buf *bp, int force)
+{
+
+ return (_nandfs_dirty_buf(bp, 1, force));
+}
+
+int
+nandfs_dirty_buf_meta(struct buf *bp, int force)
+{
+
+ return (_nandfs_dirty_buf(bp, 0, force));
+}
+
+void
+nandfs_undirty_buf_fsdev(struct nandfs_device *nffsdev, struct buf *bp)
+{
+
+ BUF_ASSERT_HELD(bp);
+
+ if (bp->b_flags & B_DELWRI) {
+ bp->b_flags &= ~(B_DELWRI|B_MANAGED);
+ nandfs_dirty_bufs_decrement(nffsdev);
+ }
+ /*
+ * Since it is now being written, we can clear its deferred write flag.
+ */
+ bp->b_flags &= ~B_DEFERRED;
+
+ brelse(bp);
+}
+
+void
+nandfs_undirty_buf(struct buf *bp)
+{
+ struct nandfs_node *node;
+
+ node = VTON(bp->b_vp);
+
+ nandfs_undirty_buf_fsdev(node->nn_nandfsdev, bp);
+}
+
+void
+nandfs_vblk_set(struct buf *bp, nandfs_daddr_t blocknr)
+{
+
+ nandfs_daddr_t *vblk = (nandfs_daddr_t *)(&bp->b_fsprivate1);
+ *vblk = blocknr;
+}
+
+nandfs_daddr_t
+nandfs_vblk_get(struct buf *bp)
+{
+
+ nandfs_daddr_t *vblk = (nandfs_daddr_t *)(&bp->b_fsprivate1);
+ return (*vblk);
+}
+
+void
+nandfs_buf_set(struct buf *bp, uint32_t bits)
+{
+ uintptr_t flags;
+
+ flags = (uintptr_t)bp->b_fsprivate3;
+ flags |= (uintptr_t)bits;
+ bp->b_fsprivate3 = (void *)flags;
+}
+
+void
+nandfs_buf_clear(struct buf *bp, uint32_t bits)
+{
+ uintptr_t flags;
+
+ flags = (uintptr_t)bp->b_fsprivate3;
+ flags &= ~(uintptr_t)bits;
+ bp->b_fsprivate3 = (void *)flags;
+}
+
+int
+nandfs_buf_check(struct buf *bp, uint32_t bits)
+{
+ uintptr_t flags;
+
+ flags = (uintptr_t)bp->b_fsprivate3;
+ if (flags & bits)
+ return (1);
+ return (0);
+}
+
+int
+nandfs_erase(struct nandfs_device *fsdev, off_t offset, size_t size)
+{
+ struct buf *bp;
+ int read_size, error, i;
+
+ DPRINTF(BLOCK, ("%s: performing erase at offset %jx size %zx\n",
+ __func__, offset, size));
+
+ MPASS(size % fsdev->nd_erasesize == 0);
+
+ if (fsdev->nd_is_nand) {
+ error = g_delete_data(fsdev->nd_gconsumer, offset, size);
+ return (error);
+ }
+
+ if (size > MAXBSIZE)
+ read_size = MAXBSIZE;
+ else
+ read_size = size;
+
+ error = 0;
+ for (i = 0; i < size / MAXBSIZE; i++) {
+ error = bread(fsdev->nd_devvp, btodb(offset + i * read_size),
+ read_size, NOCRED, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+ memset(bp->b_data, 0xff, read_size);
+ error = bwrite(bp);
+ if (error) {
+ nandfs_error("%s: err:%d from bwrite\n",
+ __func__, error);
+ return (error);
+ }
+ }
+
+ return (error);
+}
+
+int
+nandfs_vop_islocked(struct vnode *vp)
+{
+ int islocked;
+
+ islocked = VOP_ISLOCKED(vp);
+ return (islocked == LK_EXCLUSIVE || islocked == LK_SHARED);
+}
+
+nandfs_daddr_t
+nandfs_block_to_dblock(struct nandfs_device *fsdev, nandfs_lbn_t block)
+{
+
+ return (btodb(block * fsdev->nd_blocksize));
+}
diff --git a/sys/fs/nandfs/nandfs_subr.h b/sys/fs/nandfs/nandfs_subr.h
new file mode 100644
index 000000000000..0bcda1812690
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_subr.h
@@ -0,0 +1,238 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf
+ * Copyright (c) 2008, 2009 Reinoud Zandijk
+ * 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.
+ *
+ * From: NetBSD: nilfs_subr.h,v 1.1 2009/07/18 16:31:42 reinoud
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _FS_NANDFS_NANDFS_SUBR_H_
+#define _FS_NANDFS_NANDFS_SUBR_H_
+
+struct nandfs_mdt;
+
+struct nandfs_alloc_request
+{
+ uint64_t entrynum;
+ struct buf *bp_desc;
+ struct buf *bp_bitmap;
+ struct buf *bp_entry;
+};
+
+/* Segment creation */
+void nandfs_wakeup_wait_sync(struct nandfs_device *, int);
+int nandfs_segment_constructor(struct nandfsmount *, int);
+int nandfs_sync_file(struct vnode *);
+
+/* Basic calculators */
+uint64_t nandfs_get_segnum_of_block(struct nandfs_device *, nandfs_daddr_t);
+void nandfs_get_segment_range(struct nandfs_device *, uint64_t, uint64_t *,
+ uint64_t *);
+void nandfs_calc_mdt_consts(struct nandfs_device *, struct nandfs_mdt *, int);
+
+/* Log reading / volume helpers */
+int nandfs_search_super_root(struct nandfs_device *);
+
+/* Reading */
+int nandfs_dev_bread(struct nandfs_device *, nandfs_daddr_t, struct ucred *,
+ int, struct buf **);
+int nandfs_bread(struct nandfs_node *, nandfs_lbn_t, struct ucred *, int,
+ struct buf **);
+int nandfs_bread_meta(struct nandfs_node *, nandfs_lbn_t, struct ucred *, int,
+ struct buf **);
+int nandfs_bdestroy(struct nandfs_node *, nandfs_daddr_t);
+int nandfs_bcreate(struct nandfs_node *, nandfs_lbn_t, struct ucred *, int,
+ struct buf **);
+int nandfs_bcreate_meta(struct nandfs_node *, nandfs_lbn_t, struct ucred *,
+ int, struct buf **);
+int nandfs_bread_create(struct nandfs_node *, nandfs_lbn_t, struct ucred *,
+ int, struct buf **);
+
+/* vtop operations */
+int nandfs_vtop(struct nandfs_node *, nandfs_daddr_t, nandfs_daddr_t *);
+
+/* Node action implementators */
+int nandfs_vinit(struct vnode *, uint64_t);
+int nandfs_get_node(struct nandfsmount *, uint64_t, struct nandfs_node **);
+int nandfs_get_node_raw(struct nandfs_device *, struct nandfsmount *, uint64_t,
+ struct nandfs_inode *, struct nandfs_node **);
+void nandfs_dispose_node(struct nandfs_node **);
+
+void nandfs_itimes(struct vnode *);
+int nandfs_lookup_name_in_dir(struct vnode *, const char *, int, uint64_t *,
+ int *, uint64_t *);
+int nandfs_create_node(struct vnode *, struct vnode **, struct vattr *,
+ struct componentname *);
+void nandfs_delete_node(struct nandfs_node *);
+
+int nandfs_chsize(struct vnode *, u_quad_t, struct ucred *);
+int nandfs_dir_detach(struct nandfsmount *, struct nandfs_node *,
+ struct nandfs_node *, struct componentname *);
+int nandfs_dir_attach(struct nandfsmount *, struct nandfs_node *,
+ struct nandfs_node *, struct vattr *, struct componentname *);
+
+int nandfs_dirty_buf(struct buf *, int);
+int nandfs_dirty_buf_meta(struct buf *, int);
+int nandfs_fs_full(struct nandfs_device *);
+void nandfs_undirty_buf_fsdev(struct nandfs_device *, struct buf *);
+void nandfs_undirty_buf(struct buf *);
+
+void nandfs_clear_buf(struct buf *);
+void nandfs_buf_set(struct buf *, uint32_t);
+void nandfs_buf_clear(struct buf *, uint32_t);
+int nandfs_buf_check(struct buf *, uint32_t);
+
+int nandfs_find_free_entry(struct nandfs_mdt *, struct nandfs_node *,
+ struct nandfs_alloc_request *);
+int nandfs_find_entry(struct nandfs_mdt *, struct nandfs_node *,
+ struct nandfs_alloc_request *);
+int nandfs_alloc_entry(struct nandfs_mdt *, struct nandfs_alloc_request *);
+void nandfs_abort_entry(struct nandfs_alloc_request *);
+int nandfs_free_entry(struct nandfs_mdt *, struct nandfs_alloc_request *);
+int nandfs_get_entry_block(struct nandfs_mdt *, struct nandfs_node *,
+ struct nandfs_alloc_request *, uint32_t *, int);
+
+/* inode managment */
+int nandfs_node_create(struct nandfsmount *, struct nandfs_node **, uint16_t);
+int nandfs_node_destroy(struct nandfs_node *);
+int nandfs_node_update(struct nandfs_node *);
+int nandfs_get_node_entry(struct nandfsmount *, struct nandfs_inode **,
+ uint64_t, struct buf **);
+void nandfs_mdt_trans_blk(struct nandfs_mdt *, uint64_t, uint64_t *,
+ uint64_t *, nandfs_lbn_t *, uint32_t *);
+
+/* vblock management */
+void nandfs_mdt_trans(struct nandfs_mdt *, uint64_t, nandfs_lbn_t *, uint32_t *);
+int nandfs_vblock_alloc(struct nandfs_device *, nandfs_daddr_t *);
+int nandfs_vblock_end(struct nandfs_device *, nandfs_daddr_t);
+int nandfs_vblock_assign(struct nandfs_device *, nandfs_daddr_t,
+ nandfs_lbn_t);
+int nandfs_vblock_free(struct nandfs_device *, nandfs_daddr_t);
+
+/* Checkpoint management */
+int nandfs_get_checkpoint(struct nandfs_device *, struct nandfs_node *,
+ uint64_t);
+int nandfs_set_checkpoint(struct nandfs_device *, struct nandfs_node *,
+ uint64_t, struct nandfs_inode *, uint64_t);
+
+/* Segment management */
+int nandfs_alloc_segment(struct nandfs_device *, uint64_t *);
+int nandfs_update_segment(struct nandfs_device *, uint64_t, uint32_t);
+int nandfs_free_segment(struct nandfs_device *, uint64_t);
+int nandfs_clear_segment(struct nandfs_device *, uint64_t);
+int nandfs_touch_segment(struct nandfs_device *, uint64_t);
+int nandfs_markgc_segment(struct nandfs_device *, uint64_t);
+
+int nandfs_bmap_insert_block(struct nandfs_node *, nandfs_lbn_t, struct buf *);
+int nandfs_bmap_update_block(struct nandfs_node *, struct buf *, nandfs_lbn_t);
+int nandfs_bmap_update_dat(struct nandfs_node *, nandfs_daddr_t, struct buf *);
+int nandfs_bmap_dirty_blocks(struct nandfs_node *, struct buf *, int);
+int nandfs_bmap_truncate_mapping(struct nandfs_node *, nandfs_lbn_t,
+ nandfs_lbn_t);
+int nandfs_bmap_lookup(struct nandfs_node *, nandfs_lbn_t, nandfs_daddr_t *);
+
+/* dirent */
+int nandfs_add_dirent(struct vnode *, uint64_t, char *, long, uint8_t);
+int nandfs_remove_dirent(struct vnode *, struct nandfs_node *,
+ struct componentname *);
+int nandfs_update_dirent(struct vnode *, struct nandfs_node *,
+ struct nandfs_node *);
+int nandfs_init_dir(struct vnode *, uint64_t, uint64_t);
+int nandfs_update_parent_dir(struct vnode *, uint64_t);
+
+void nandfs_vblk_set(struct buf *, nandfs_daddr_t);
+nandfs_daddr_t nandfs_vblk_get(struct buf *);
+
+void nandfs_inode_init(struct nandfs_inode *, uint16_t);
+void nandfs_inode_destroy(struct nandfs_inode *);
+
+/* ioctl */
+int nandfs_get_seg_stat(struct nandfs_device *, struct nandfs_seg_stat *);
+int nandfs_chng_cpmode(struct nandfs_node *, struct nandfs_cpmode *);
+int nandfs_get_cpinfo_ioctl(struct nandfs_node *, struct nandfs_argv *);
+int nandfs_delete_cp(struct nandfs_node *, uint64_t start, uint64_t);
+int nandfs_make_snap(struct nandfs_device *, uint64_t *);
+int nandfs_delete_snap(struct nandfs_device *, uint64_t);
+int nandfs_get_cpstat(struct nandfs_node *, struct nandfs_cpstat *);
+int nandfs_get_segment_info_ioctl(struct nandfs_device *, struct nandfs_argv *);
+int nandfs_get_dat_vinfo_ioctl(struct nandfs_device *, struct nandfs_argv *);
+int nandfs_get_dat_bdescs_ioctl(struct nandfs_device *, struct nandfs_argv *);
+int nandfs_get_fsinfo(struct nandfsmount *, struct nandfs_fsinfo *);
+
+int nandfs_get_cpinfo(struct nandfs_node *, uint64_t, uint16_t,
+ struct nandfs_cpinfo *, uint32_t, uint32_t *);
+
+nandfs_lbn_t nandfs_get_maxfilesize(struct nandfs_device *);
+
+int nandfs_write_superblock(struct nandfs_device *);
+
+extern int nandfs_sync_interval;
+extern int nandfs_max_dirty_segs;
+extern int nandfs_cps_between_sblocks;
+
+struct buf *nandfs_geteblk(int, int);
+
+void nandfs_dirty_bufs_increment(struct nandfs_device *);
+void nandfs_dirty_bufs_decrement(struct nandfs_device *);
+
+int nandfs_start_cleaner(struct nandfs_device *);
+int nandfs_stop_cleaner(struct nandfs_device *);
+
+int nandfs_segsum_valid(struct nandfs_segment_summary *);
+int nandfs_load_segsum(struct nandfs_device *, nandfs_daddr_t,
+ struct nandfs_segment_summary *);
+int nandfs_get_segment_info(struct nandfs_device *, struct nandfs_suinfo *,
+ uint32_t, uint64_t);
+int nandfs_get_segment_info_filter(struct nandfs_device *,
+ struct nandfs_suinfo *, uint32_t, uint64_t, uint64_t *, uint32_t, uint32_t);
+int nandfs_get_dat_vinfo(struct nandfs_device *, struct nandfs_vinfo *,
+ uint32_t);
+int nandfs_get_dat_bdescs(struct nandfs_device *, struct nandfs_bdesc *,
+ uint32_t);
+
+#define NANDFS_VBLK_ASSIGNED 1
+
+#define NANDFS_IS_INDIRECT(bp) ((bp)->b_lblkno < 0)
+
+int nandfs_erase(struct nandfs_device *, off_t, size_t);
+
+#define NANDFS_VOP_ISLOCKED(vp) nandfs_vop_islocked((vp))
+int nandfs_vop_islocked(struct vnode *vp);
+
+nandfs_daddr_t nandfs_block_to_dblock(struct nandfs_device *, nandfs_lbn_t);
+
+#define DEBUG_MODE
+#if defined(DEBUG_MODE)
+#define nandfs_error panic
+#define nandfs_warning printf
+#elif defined(TEST_MODE)
+#define nandfs_error printf
+#define nandfs_warning printf
+#else
+#define nandfs_error(...)
+#define nandfs_warning(...)
+#endif
+
+#endif /* !_FS_NANDFS_NANDFS_SUBR_H_ */
diff --git a/sys/fs/nandfs/nandfs_sufile.c b/sys/fs/nandfs/nandfs_sufile.c
new file mode 100644
index 000000000000..d4f432620a88
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_sufile.c
@@ -0,0 +1,569 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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/systm.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/mutex.h>
+#include <sys/namei.h>
+#include <sys/sysctl.h>
+#include <sys/vnode.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_page.h>
+
+#include <geom/geom.h>
+#include <geom/geom_vfs.h>
+
+#include <fs/nandfs/nandfs_mount.h>
+#include <fs/nandfs/nandfs.h>
+#include <fs/nandfs/nandfs_subr.h>
+
+#define SU_USAGE_OFF(bp, offset) \
+ ((struct nandfs_segment_usage *)((bp)->b_data + offset))
+
+static int
+nandfs_seg_usage_blk_offset(struct nandfs_device *fsdev, uint64_t seg,
+ uint64_t *blk, uint64_t *offset)
+{
+ uint64_t off;
+ uint16_t seg_size;
+
+ seg_size = fsdev->nd_fsdata.f_segment_usage_size;
+
+ off = roundup(sizeof(struct nandfs_sufile_header), seg_size);
+ off += (seg * seg_size);
+
+ *blk = off / fsdev->nd_blocksize;
+ *offset = off % fsdev->nd_blocksize;
+ return (0);
+}
+
+/* Alloc new segment */
+int
+nandfs_alloc_segment(struct nandfs_device *fsdev, uint64_t *seg)
+{
+ struct nandfs_node *su_node;
+ struct nandfs_sufile_header *su_header;
+ struct nandfs_segment_usage *su_usage;
+ struct buf *bp_header, *bp;
+ uint64_t blk, vblk, offset, i, rest, nsegments;
+ uint16_t seg_size;
+ int error, found;
+
+ seg_size = fsdev->nd_fsdata.f_segment_usage_size;
+ nsegments = fsdev->nd_fsdata.f_nsegments;
+
+ su_node = fsdev->nd_su_node;
+ ASSERT_VOP_LOCKED(NTOV(su_node), __func__);
+
+ /* Read header buffer */
+ error = nandfs_bread(su_node, 0, NOCRED, 0, &bp_header);
+ if (error) {
+ brelse(bp_header);
+ return (error);
+ }
+
+ su_header = (struct nandfs_sufile_header *)bp_header->b_data;
+
+ /* Get last allocated segment */
+ i = su_header->sh_last_alloc + 1;
+
+ found = 0;
+ bp = NULL;
+ while (!found) {
+ nandfs_seg_usage_blk_offset(fsdev, i, &blk, &offset);
+ if(blk != 0) {
+ error = nandfs_bmap_lookup(su_node, blk, &vblk);
+ if (error) {
+ nandfs_error("%s: cannot find vblk for blk "
+ "blk:%jx\n", __func__, blk);
+ return (error);
+ }
+ if (vblk)
+ error = nandfs_bread(su_node, blk, NOCRED, 0,
+ &bp);
+ else
+ error = nandfs_bcreate(su_node, blk, NOCRED, 0,
+ &bp);
+ if (error) {
+ nandfs_error("%s: cannot create/read "
+ "vblk:%jx\n", __func__, vblk);
+ if (bp)
+ brelse(bp);
+ return (error);
+ }
+
+ su_usage = SU_USAGE_OFF(bp, offset);
+ } else {
+ su_usage = SU_USAGE_OFF(bp_header, offset);
+ bp = bp_header;
+ }
+
+ rest = (fsdev->nd_blocksize - offset) / seg_size;
+ /* Go through all su usage in block */
+ while (rest) {
+ /* When last check start from beggining */
+ if (i == nsegments)
+ break;
+
+ if (!su_usage->su_flags) {
+ su_usage->su_flags = 1;
+ found = 1;
+ break;
+ }
+ su_usage++;
+ i++;
+
+ /* If all checked return error */
+ if (i == su_header->sh_last_alloc) {
+ DPRINTF(SEG, ("%s: cannot allocate segment \n",
+ __func__));
+ brelse(bp_header);
+ if (blk != 0)
+ brelse(bp);
+ return (1);
+ }
+ rest--;
+ }
+ if (!found) {
+ /* Otherwise read another block */
+ if (blk != 0)
+ brelse(bp);
+ if (i == nsegments) {
+ blk = 0;
+ i = 0;
+ } else
+ blk++;
+ offset = 0;
+ }
+ }
+
+ if (found) {
+ *seg = i;
+ su_header->sh_last_alloc = i;
+ su_header->sh_ncleansegs--;
+ su_header->sh_ndirtysegs++;
+
+ fsdev->nd_super.s_free_blocks_count = su_header->sh_ncleansegs *
+ fsdev->nd_fsdata.f_blocks_per_segment;
+ fsdev->nd_clean_segs--;
+
+ /*
+ * It is mostly called from syncer() so we want to force
+ * making buf dirty.
+ */
+ error = nandfs_dirty_buf(bp_header, 1);
+ if (error) {
+ if (bp && bp != bp_header)
+ brelse(bp);
+ return (error);
+ }
+ if (bp && bp != bp_header)
+ nandfs_dirty_buf(bp, 1);
+
+ DPRINTF(SEG, ("%s: seg:%#jx\n", __func__, (uintmax_t)i));
+
+ return (0);
+ }
+
+ DPRINTF(SEG, ("%s: failed\n", __func__));
+
+ return (1);
+}
+
+/*
+ * Make buffer dirty, it will be updated soon but first it need to be
+ * gathered by syncer.
+ */
+int
+nandfs_touch_segment(struct nandfs_device *fsdev, uint64_t seg)
+{
+ struct nandfs_node *su_node;
+ struct buf *bp;
+ uint64_t blk, offset;
+ int error;
+
+ su_node = fsdev->nd_su_node;
+ ASSERT_VOP_LOCKED(NTOV(su_node), __func__);
+
+ nandfs_seg_usage_blk_offset(fsdev, seg, &blk, &offset);
+
+ error = nandfs_bread(su_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ nandfs_error("%s: cannot preallocate new segment\n", __func__);
+ return (error);
+ } else
+ nandfs_dirty_buf(bp, 1);
+
+ DPRINTF(SEG, ("%s: seg:%#jx\n", __func__, (uintmax_t)seg));
+ return (error);
+}
+
+/* Update block count of segment */
+int
+nandfs_update_segment(struct nandfs_device *fsdev, uint64_t seg, uint32_t nblks)
+{
+ struct nandfs_node *su_node;
+ struct nandfs_segment_usage *su_usage;
+ struct buf *bp;
+ uint64_t blk, offset;
+ int error;
+
+ su_node = fsdev->nd_su_node;
+ ASSERT_VOP_LOCKED(NTOV(su_node), __func__);
+
+ nandfs_seg_usage_blk_offset(fsdev, seg, &blk, &offset);
+
+ error = nandfs_bread(su_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ nandfs_error("%s: read block:%jx to update\n",
+ __func__, blk);
+ brelse(bp);
+ return (error);
+ }
+
+ su_usage = SU_USAGE_OFF(bp, offset);
+ su_usage->su_lastmod = fsdev->nd_ts.tv_sec;
+ su_usage->su_flags = NANDFS_SEGMENT_USAGE_DIRTY;
+ su_usage->su_nblocks += nblks;
+
+ DPRINTF(SEG, ("%s: seg:%#jx inc:%#x cur:%#x\n", __func__,
+ (uintmax_t)seg, nblks, su_usage->su_nblocks));
+
+ nandfs_dirty_buf(bp, 1);
+
+ return (0);
+}
+
+/* Make segment free */
+int
+nandfs_free_segment(struct nandfs_device *fsdev, uint64_t seg)
+{
+ struct nandfs_node *su_node;
+ struct nandfs_sufile_header *su_header;
+ struct nandfs_segment_usage *su_usage;
+ struct buf *bp_header, *bp;
+ uint64_t blk, offset;
+ int error;
+
+ su_node = fsdev->nd_su_node;
+ ASSERT_VOP_LOCKED(NTOV(su_node), __func__);
+
+ /* Read su header */
+ error = nandfs_bread(su_node, 0, NOCRED, 0, &bp_header);
+ if (error) {
+ brelse(bp_header);
+ return (error);
+ }
+
+ su_header = (struct nandfs_sufile_header *)bp_header->b_data;
+ nandfs_seg_usage_blk_offset(fsdev, seg, &blk, &offset);
+
+ /* Read su usage block if other than su header block */
+ if (blk != 0) {
+ error = nandfs_bread(su_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ brelse(bp_header);
+ return (error);
+ }
+ } else
+ bp = bp_header;
+
+ /* Reset su usage data */
+ su_usage = SU_USAGE_OFF(bp, offset);
+ su_usage->su_lastmod = fsdev->nd_ts.tv_sec;
+ su_usage->su_nblocks = 0;
+ su_usage->su_flags = 0;
+
+ /* Update clean/dirty counter in header */
+ su_header->sh_ncleansegs++;
+ su_header->sh_ndirtysegs--;
+
+ /*
+ * Make buffers dirty, called by cleaner
+ * so force dirty even if no much space left
+ * on device
+ */
+ nandfs_dirty_buf(bp_header, 1);
+ if (bp != bp_header)
+ nandfs_dirty_buf(bp, 1);
+
+ /* Update free block count */
+ fsdev->nd_super.s_free_blocks_count = su_header->sh_ncleansegs *
+ fsdev->nd_fsdata.f_blocks_per_segment;
+ fsdev->nd_clean_segs++;
+
+ DPRINTF(SEG, ("%s: seg:%#jx\n", __func__, (uintmax_t)seg));
+
+ return (0);
+}
+
+static int
+nandfs_bad_segment(struct nandfs_device *fsdev, uint64_t seg)
+{
+ struct nandfs_node *su_node;
+ struct nandfs_segment_usage *su_usage;
+ struct buf *bp;
+ uint64_t blk, offset;
+ int error;
+
+ su_node = fsdev->nd_su_node;
+ ASSERT_VOP_LOCKED(NTOV(su_node), __func__);
+
+ nandfs_seg_usage_blk_offset(fsdev, seg, &blk, &offset);
+
+ error = nandfs_bread(su_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+
+ su_usage = SU_USAGE_OFF(bp, offset);
+ su_usage->su_lastmod = fsdev->nd_ts.tv_sec;
+ su_usage->su_flags = NANDFS_SEGMENT_USAGE_ERROR;
+
+ DPRINTF(SEG, ("%s: seg:%#jx\n", __func__, (uintmax_t)seg));
+
+ nandfs_dirty_buf(bp, 1);
+
+ return (0);
+}
+
+int
+nandfs_markgc_segment(struct nandfs_device *fsdev, uint64_t seg)
+{
+ struct nandfs_node *su_node;
+ struct nandfs_segment_usage *su_usage;
+ struct buf *bp;
+ uint64_t blk, offset;
+ int error;
+
+ su_node = fsdev->nd_su_node;
+
+ VOP_LOCK(NTOV(su_node), LK_EXCLUSIVE);
+
+ nandfs_seg_usage_blk_offset(fsdev, seg, &blk, &offset);
+
+ error = nandfs_bread(su_node, blk, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ VOP_UNLOCK(NTOV(su_node), 0);
+ return (error);
+ }
+
+ su_usage = SU_USAGE_OFF(bp, offset);
+ MPASS((su_usage->su_flags & NANDFS_SEGMENT_USAGE_GC) == 0);
+ su_usage->su_flags |= NANDFS_SEGMENT_USAGE_GC;
+
+ brelse(bp);
+ VOP_UNLOCK(NTOV(su_node), 0);
+
+ DPRINTF(SEG, ("%s: seg:%#jx\n", __func__, (uintmax_t)seg));
+
+ return (0);
+}
+
+int
+nandfs_clear_segment(struct nandfs_device *fsdev, uint64_t seg)
+{
+ uint64_t offset, segsize;
+ uint32_t bps, bsize;
+ int error = 0;
+
+ bps = fsdev->nd_fsdata.f_blocks_per_segment;
+ bsize = fsdev->nd_blocksize;
+ segsize = bsize * bps;
+ nandfs_get_segment_range(fsdev, seg, &offset, NULL);
+ offset *= bsize;
+
+ DPRINTF(SEG, ("%s: seg:%#jx\n", __func__, (uintmax_t)seg));
+
+ /* Erase it and mark it bad when fail */
+ if (nandfs_erase(fsdev, offset, segsize))
+ error = nandfs_bad_segment(fsdev, seg);
+
+ if (error)
+ return (error);
+
+ /* Mark it free */
+ error = nandfs_free_segment(fsdev, seg);
+
+ return (error);
+}
+
+int
+nandfs_get_seg_stat(struct nandfs_device *nandfsdev,
+ struct nandfs_seg_stat *nss)
+{
+ struct nandfs_sufile_header *suhdr;
+ struct nandfs_node *su_node;
+ struct buf *bp;
+ int err;
+
+ su_node = nandfsdev->nd_su_node;
+
+ NANDFS_WRITELOCK(nandfsdev);
+ VOP_LOCK(NTOV(su_node), LK_SHARED);
+ err = nandfs_bread(nandfsdev->nd_su_node, 0, NOCRED, 0, &bp);
+ if (err) {
+ brelse(bp);
+ VOP_UNLOCK(NTOV(su_node), 0);
+ NANDFS_WRITEUNLOCK(nandfsdev);
+ return (-1);
+ }
+
+ suhdr = (struct nandfs_sufile_header *)bp->b_data;
+ nss->nss_nsegs = nandfsdev->nd_fsdata.f_nsegments;
+ nss->nss_ncleansegs = suhdr->sh_ncleansegs;
+ nss->nss_ndirtysegs = suhdr->sh_ndirtysegs;
+ nss->nss_ctime = 0;
+ nss->nss_nongc_ctime = nandfsdev->nd_ts.tv_sec;
+ nss->nss_prot_seq = nandfsdev->nd_seg_sequence;
+
+ brelse(bp);
+ VOP_UNLOCK(NTOV(su_node), 0);
+
+ NANDFS_WRITEUNLOCK(nandfsdev);
+
+ return (0);
+}
+
+int
+nandfs_get_segment_info_ioctl(struct nandfs_device *fsdev,
+ struct nandfs_argv *nargv)
+{
+ struct nandfs_suinfo *nsi;
+ int error;
+
+ if (nargv->nv_nmembs > NANDFS_SEGMENTS_MAX)
+ return (EINVAL);
+
+ nsi = malloc(sizeof(struct nandfs_suinfo) * nargv->nv_nmembs,
+ M_NANDFSTEMP, M_WAITOK | M_ZERO);
+
+ error = nandfs_get_segment_info(fsdev, nsi, nargv->nv_nmembs,
+ nargv->nv_index);
+
+ if (error == 0)
+ error = copyout(nsi, (void *)(uintptr_t)nargv->nv_base,
+ sizeof(struct nandfs_suinfo) * nargv->nv_nmembs);
+
+ free(nsi, M_NANDFSTEMP);
+ return (error);
+}
+
+int
+nandfs_get_segment_info(struct nandfs_device *fsdev, struct nandfs_suinfo *nsi,
+ uint32_t nmembs, uint64_t segment)
+{
+
+ return (nandfs_get_segment_info_filter(fsdev, nsi, nmembs, segment,
+ NULL, 0, 0));
+}
+
+int
+nandfs_get_segment_info_filter(struct nandfs_device *fsdev,
+ struct nandfs_suinfo *nsi, uint32_t nmembs, uint64_t segment,
+ uint64_t *nsegs, uint32_t filter, uint32_t nfilter)
+{
+ struct nandfs_segment_usage *su;
+ struct nandfs_node *su_node;
+ struct buf *bp;
+ uint64_t curr, blocknr, blockoff, i;
+ uint32_t flags;
+ int err = 0;
+
+ curr = ~(0);
+
+ lockmgr(&fsdev->nd_seg_const, LK_EXCLUSIVE, NULL);
+ su_node = fsdev->nd_su_node;
+
+ VOP_LOCK(NTOV(su_node), LK_SHARED);
+
+ bp = NULL;
+ if (nsegs != NULL)
+ *nsegs = 0;
+ for (i = 0; i < nmembs; segment++) {
+ if (segment == fsdev->nd_fsdata.f_nsegments)
+ break;
+
+ nandfs_seg_usage_blk_offset(fsdev, segment, &blocknr,
+ &blockoff);
+
+ if (i == 0 || curr != blocknr) {
+ if (bp != NULL)
+ brelse(bp);
+ err = nandfs_bread(su_node, blocknr, NOCRED,
+ 0, &bp);
+ if (err) {
+ goto out;
+ }
+ curr = blocknr;
+ }
+
+ su = SU_USAGE_OFF(bp, blockoff);
+ flags = su->su_flags;
+ if (segment == fsdev->nd_seg_num ||
+ segment == fsdev->nd_next_seg_num)
+ flags |= NANDFS_SEGMENT_USAGE_ACTIVE;
+
+ if (nfilter != 0 && (flags & nfilter) != 0)
+ continue;
+ if (filter != 0 && (flags & filter) == 0)
+ continue;
+
+ nsi->nsi_num = segment;
+ nsi->nsi_lastmod = su->su_lastmod;
+ nsi->nsi_blocks = su->su_nblocks;
+ nsi->nsi_flags = flags;
+ nsi++;
+ i++;
+ if (nsegs != NULL)
+ (*nsegs)++;
+ }
+
+out:
+ if (bp != NULL)
+ brelse(bp);
+ VOP_UNLOCK(NTOV(su_node), 0);
+ lockmgr(&fsdev->nd_seg_const, LK_RELEASE, NULL);
+
+ return (err);
+}
diff --git a/sys/fs/nandfs/nandfs_vfsops.c b/sys/fs/nandfs/nandfs_vfsops.c
new file mode 100644
index 000000000000..ba53546c9b3f
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_vfsops.c
@@ -0,0 +1,1590 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf
+ * Copyright (c) 2008, 2009 Reinoud Zandijk
+ * 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.
+ *
+ * From: NetBSD: nilfs_vfsops.c,v 1.1 2009/07/18 16:31:42 reinoud Exp
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/fcntl.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/namei.h>
+#include <sys/proc.h>
+#include <sys/priv.h>
+#include <sys/vnode.h>
+#include <sys/buf.h>
+#include <sys/sysctl.h>
+#include <sys/libkern.h>
+
+#include <geom/geom.h>
+#include <geom/geom_vfs.h>
+
+#include <machine/_inttypes.h>
+
+#include <fs/nandfs/nandfs_mount.h>
+#include <fs/nandfs/nandfs.h>
+#include <fs/nandfs/nandfs_subr.h>
+
+static MALLOC_DEFINE(M_NANDFSMNT, "nandfs_mount", "NANDFS mount structure");
+
+#define NANDFS_SET_SYSTEMFILE(vp) { \
+ (vp)->v_vflag |= VV_SYSTEM; \
+ vref(vp); \
+ vput(vp); }
+
+#define NANDFS_UNSET_SYSTEMFILE(vp) { \
+ VOP_LOCK(vp, LK_EXCLUSIVE); \
+ MPASS(vp->v_bufobj.bo_dirty.bv_cnt == 0); \
+ (vp)->v_vflag &= ~VV_SYSTEM; \
+ vgone(vp); \
+ vput(vp); }
+
+/* Globals */
+struct _nandfs_devices nandfs_devices;
+
+/* Parameters */
+int nandfs_verbose = 0;
+
+static void
+nandfs_tunable_init(void *arg)
+{
+
+ TUNABLE_INT_FETCH("vfs.nandfs.verbose", &nandfs_verbose);
+}
+SYSINIT(nandfs_tunables, SI_SUB_VFS, SI_ORDER_ANY, nandfs_tunable_init, NULL);
+
+static SYSCTL_NODE(_vfs, OID_AUTO, nandfs, CTLFLAG_RD, 0, "NAND filesystem");
+static SYSCTL_NODE(_vfs_nandfs, OID_AUTO, mount, CTLFLAG_RD, 0,
+ "NANDFS mountpoints");
+SYSCTL_INT(_vfs_nandfs, OID_AUTO, verbose, CTLFLAG_RW, &nandfs_verbose, 0, "");
+
+#define NANDFS_CONSTR_INTERVAL 5
+int nandfs_sync_interval = NANDFS_CONSTR_INTERVAL; /* sync every 5 seconds */
+SYSCTL_UINT(_vfs_nandfs, OID_AUTO, sync_interval, CTLFLAG_RW,
+ &nandfs_sync_interval, 0, "");
+
+#define NANDFS_MAX_DIRTY_SEGS 5
+int nandfs_max_dirty_segs = NANDFS_MAX_DIRTY_SEGS; /* sync when 5 dirty seg */
+SYSCTL_UINT(_vfs_nandfs, OID_AUTO, max_dirty_segs, CTLFLAG_RW,
+ &nandfs_max_dirty_segs, 0, "");
+
+#define NANDFS_CPS_BETWEEN_SBLOCKS 5
+int nandfs_cps_between_sblocks = NANDFS_CPS_BETWEEN_SBLOCKS; /* write superblock every 5 checkpoints */
+SYSCTL_UINT(_vfs_nandfs, OID_AUTO, cps_between_sblocks, CTLFLAG_RW,
+ &nandfs_cps_between_sblocks, 0, "");
+
+#define NANDFS_CLEANER_ENABLE 1
+int nandfs_cleaner_enable = NANDFS_CLEANER_ENABLE;
+SYSCTL_UINT(_vfs_nandfs, OID_AUTO, cleaner_enable, CTLFLAG_RW,
+ &nandfs_cleaner_enable, 0, "");
+
+#define NANDFS_CLEANER_INTERVAL 5
+int nandfs_cleaner_interval = NANDFS_CLEANER_INTERVAL;
+SYSCTL_UINT(_vfs_nandfs, OID_AUTO, cleaner_interval, CTLFLAG_RW,
+ &nandfs_cleaner_interval, 0, "");
+
+#define NANDFS_CLEANER_SEGMENTS 5
+int nandfs_cleaner_segments = NANDFS_CLEANER_SEGMENTS;
+SYSCTL_UINT(_vfs_nandfs, OID_AUTO, cleaner_segments, CTLFLAG_RW,
+ &nandfs_cleaner_segments, 0, "");
+
+static int nandfs_mountfs(struct vnode *devvp, struct mount *mp);
+static vfs_mount_t nandfs_mount;
+static vfs_root_t nandfs_root;
+static vfs_statfs_t nandfs_statfs;
+static vfs_unmount_t nandfs_unmount;
+static vfs_vget_t nandfs_vget;
+static vfs_sync_t nandfs_sync;
+static const char *nandfs_opts[] = {
+ "snap", "from", "noatime", NULL
+};
+
+/* System nodes */
+static int
+nandfs_create_system_nodes(struct nandfs_device *nandfsdev)
+{
+ int error;
+
+ error = nandfs_get_node_raw(nandfsdev, NULL, NANDFS_DAT_INO,
+ &nandfsdev->nd_super_root.sr_dat, &nandfsdev->nd_dat_node);
+ if (error)
+ goto errorout;
+
+ error = nandfs_get_node_raw(nandfsdev, NULL, NANDFS_CPFILE_INO,
+ &nandfsdev->nd_super_root.sr_cpfile, &nandfsdev->nd_cp_node);
+ if (error)
+ goto errorout;
+
+ error = nandfs_get_node_raw(nandfsdev, NULL, NANDFS_SUFILE_INO,
+ &nandfsdev->nd_super_root.sr_sufile, &nandfsdev->nd_su_node);
+ if (error)
+ goto errorout;
+
+ error = nandfs_get_node_raw(nandfsdev, NULL, NANDFS_GC_INO,
+ NULL, &nandfsdev->nd_gc_node);
+ if (error)
+ goto errorout;
+
+ NANDFS_SET_SYSTEMFILE(NTOV(nandfsdev->nd_dat_node));
+ NANDFS_SET_SYSTEMFILE(NTOV(nandfsdev->nd_cp_node));
+ NANDFS_SET_SYSTEMFILE(NTOV(nandfsdev->nd_su_node));
+ NANDFS_SET_SYSTEMFILE(NTOV(nandfsdev->nd_gc_node));
+
+ DPRINTF(VOLUMES, ("System vnodes: dat: %p cp: %p su: %p\n",
+ NTOV(nandfsdev->nd_dat_node), NTOV(nandfsdev->nd_cp_node),
+ NTOV(nandfsdev->nd_su_node)));
+ return (0);
+
+errorout:
+ nandfs_dispose_node(&nandfsdev->nd_gc_node);
+ nandfs_dispose_node(&nandfsdev->nd_dat_node);
+ nandfs_dispose_node(&nandfsdev->nd_cp_node);
+ nandfs_dispose_node(&nandfsdev->nd_su_node);
+
+ return (error);
+}
+
+static void
+nandfs_release_system_nodes(struct nandfs_device *nandfsdev)
+{
+
+ if (!nandfsdev)
+ return;
+ if (nandfsdev->nd_refcnt > 0)
+ return;
+
+ if (nandfsdev->nd_gc_node)
+ NANDFS_UNSET_SYSTEMFILE(NTOV(nandfsdev->nd_gc_node));
+ if (nandfsdev->nd_dat_node)
+ NANDFS_UNSET_SYSTEMFILE(NTOV(nandfsdev->nd_dat_node));
+ if (nandfsdev->nd_cp_node)
+ NANDFS_UNSET_SYSTEMFILE(NTOV(nandfsdev->nd_cp_node));
+ if (nandfsdev->nd_su_node)
+ NANDFS_UNSET_SYSTEMFILE(NTOV(nandfsdev->nd_su_node));
+}
+
+static int
+nandfs_check_fsdata_crc(struct nandfs_fsdata *fsdata)
+{
+ uint32_t fsdata_crc, comp_crc;
+
+ if (fsdata->f_magic != NANDFS_FSDATA_MAGIC)
+ return (0);
+
+ /* Preserve CRC */
+ fsdata_crc = fsdata->f_sum;
+
+ /* Calculate */
+ fsdata->f_sum = (0);
+ comp_crc = crc32((uint8_t *)fsdata, fsdata->f_bytes);
+
+ /* Restore */
+ fsdata->f_sum = fsdata_crc;
+
+ /* Check CRC */
+ return (fsdata_crc == comp_crc);
+}
+
+static int
+nandfs_check_superblock_crc(struct nandfs_fsdata *fsdata,
+ struct nandfs_super_block *super)
+{
+ uint32_t super_crc, comp_crc;
+
+ /* Check super block magic */
+ if (super->s_magic != NANDFS_SUPER_MAGIC)
+ return (0);
+
+ /* Preserve CRC */
+ super_crc = super->s_sum;
+
+ /* Calculate */
+ super->s_sum = (0);
+ comp_crc = crc32((uint8_t *)super, fsdata->f_sbbytes);
+
+ /* Restore */
+ super->s_sum = super_crc;
+
+ /* Check CRC */
+ return (super_crc == comp_crc);
+}
+
+static void
+nandfs_calc_superblock_crc(struct nandfs_fsdata *fsdata,
+ struct nandfs_super_block *super)
+{
+ uint32_t comp_crc;
+
+ /* Calculate */
+ super->s_sum = 0;
+ comp_crc = crc32((uint8_t *)super, fsdata->f_sbbytes);
+
+ /* Restore */
+ super->s_sum = comp_crc;
+}
+
+static int
+nandfs_is_empty(u_char *area, int size)
+{
+ int i;
+
+ for (i = 0; i < size; i++)
+ if (area[i] != 0xff)
+ return (0);
+
+ return (1);
+}
+
+static __inline int
+nandfs_sblocks_in_esize(struct nandfs_device *fsdev)
+{
+
+ return ((fsdev->nd_erasesize - NANDFS_SBLOCK_OFFSET_BYTES) /
+ sizeof(struct nandfs_super_block));
+}
+
+static __inline int
+nandfs_max_sblocks(struct nandfs_device *fsdev)
+{
+
+ return (NANDFS_NFSAREAS * nandfs_sblocks_in_esize(fsdev));
+}
+
+static __inline int
+nandfs_sblocks_in_block(struct nandfs_device *fsdev)
+{
+
+ return (fsdev->nd_devblocksize / sizeof(struct nandfs_super_block));
+}
+
+static __inline int
+nandfs_sblocks_in_first_block(struct nandfs_device *fsdev)
+{
+ int n;
+
+ n = nandfs_sblocks_in_block(fsdev) -
+ NANDFS_SBLOCK_OFFSET_BYTES / sizeof(struct nandfs_super_block);
+ if (n < 0)
+ n = 0;
+
+ return (n);
+}
+
+static int
+nandfs_write_superblock_at(struct nandfs_device *fsdev,
+ struct nandfs_fsarea *fstp)
+{
+ struct nandfs_super_block *super, *supert;
+ struct buf *bp;
+ int sb_per_sector, sbs_in_fsd, read_block;
+ int index, pos, error;
+ off_t offset;
+
+ DPRINTF(SYNC, ("%s: last_used %d nandfs_sblocks_in_esize %d\n",
+ __func__, fstp->last_used, nandfs_sblocks_in_esize(fsdev)));
+ if (fstp->last_used == nandfs_sblocks_in_esize(fsdev) - 1)
+ index = 0;
+ else
+ index = fstp->last_used + 1;
+
+ super = &fsdev->nd_super;
+ supert = NULL;
+
+ sb_per_sector = nandfs_sblocks_in_block(fsdev);
+ sbs_in_fsd = sizeof(struct nandfs_fsdata) /
+ sizeof(struct nandfs_super_block);
+ index += sbs_in_fsd;
+ offset = fstp->offset;
+
+ DPRINTF(SYNC, ("%s: offset %#jx s_last_pseg %#jx s_last_cno %#jx "
+ "s_last_seq %#jx wtime %jd index %d\n", __func__, offset,
+ super->s_last_pseg, super->s_last_cno, super->s_last_seq,
+ super->s_wtime, index));
+
+ read_block = btodb(offset + ((index / sb_per_sector) * sb_per_sector)
+ * sizeof(struct nandfs_super_block));
+
+ DPRINTF(SYNC, ("%s: read_block %#x\n", __func__, read_block));
+
+ if (index == sbs_in_fsd) {
+ error = nandfs_erase(fsdev, offset, fsdev->nd_erasesize);
+ if (error)
+ return (error);
+
+ error = bread(fsdev->nd_devvp, btodb(offset),
+ fsdev->nd_devblocksize, NOCRED, &bp);
+ if (error) {
+ printf("NANDFS: couldn't read initial data: %d\n",
+ error);
+ brelse(bp);
+ return (error);
+ }
+ memcpy(bp->b_data, &fsdev->nd_fsdata, sizeof(fsdev->nd_fsdata));
+ /*
+ * 0xff-out the rest. This bp could be cached, so potentially
+ * b_data contains stale super blocks.
+ *
+ * We don't mind cached bp since most of the time we just add
+ * super blocks to already 0xff-out b_data and don't need to
+ * perform actual read.
+ */
+ if (fsdev->nd_devblocksize > sizeof(fsdev->nd_fsdata))
+ memset(bp->b_data + sizeof(fsdev->nd_fsdata), 0xff,
+ fsdev->nd_devblocksize - sizeof(fsdev->nd_fsdata));
+ error = bwrite(bp);
+ if (error) {
+ printf("NANDFS: cannot rewrite initial data at %jx\n",
+ offset);
+ return (error);
+ }
+ }
+
+ error = bread(fsdev->nd_devvp, read_block, fsdev->nd_devblocksize,
+ NOCRED, &bp);
+ if (error) {
+ brelse(bp);
+ return (error);
+ }
+
+ supert = (struct nandfs_super_block *)(bp->b_data);
+ pos = index % sb_per_sector;
+
+ DPRINTF(SYNC, ("%s: storing at %d\n", __func__, pos));
+ memcpy(&supert[pos], super, sizeof(struct nandfs_super_block));
+
+ /*
+ * See comment above in code that performs erase.
+ */
+ if (pos == 0)
+ memset(&supert[1], 0xff,
+ (sb_per_sector - 1) * sizeof(struct nandfs_super_block));
+
+ error = bwrite(bp);
+ if (error) {
+ printf("NANDFS: cannot update superblock at %jx\n", offset);
+ return (error);
+ }
+
+ DPRINTF(SYNC, ("%s: fstp->last_used %d -> %d\n", __func__,
+ fstp->last_used, index - sbs_in_fsd));
+ fstp->last_used = index - sbs_in_fsd;
+
+ return (0);
+}
+
+int
+nandfs_write_superblock(struct nandfs_device *fsdev)
+{
+ struct nandfs_super_block *super;
+ struct timespec ts;
+ int error;
+ int i, j;
+
+ vfs_timestamp(&ts);
+
+ super = &fsdev->nd_super;
+
+ super->s_last_pseg = fsdev->nd_last_pseg;
+ super->s_last_cno = fsdev->nd_last_cno;
+ super->s_last_seq = fsdev->nd_seg_sequence;
+ super->s_wtime = ts.tv_sec;
+
+ nandfs_calc_superblock_crc(&fsdev->nd_fsdata, super);
+
+ error = 0;
+ for (i = 0, j = fsdev->nd_last_fsarea; i < NANDFS_NFSAREAS;
+ i++, j = (j + 1 % NANDFS_NFSAREAS)) {
+ if (fsdev->nd_fsarea[j].flags & NANDFS_FSSTOR_FAILED) {
+ DPRINTF(SYNC, ("%s: skipping %d\n", __func__, j));
+ continue;
+ }
+ error = nandfs_write_superblock_at(fsdev, &fsdev->nd_fsarea[j]);
+ if (error) {
+ printf("NANDFS: writing superblock at offset %d failed:"
+ "%d\n", j * fsdev->nd_erasesize, error);
+ fsdev->nd_fsarea[j].flags |= NANDFS_FSSTOR_FAILED;
+ } else
+ break;
+ }
+
+ if (i == NANDFS_NFSAREAS) {
+ printf("NANDFS: superblock was not written\n");
+ /*
+ * TODO: switch to read-only?
+ */
+ return (error);
+ } else
+ fsdev->nd_last_fsarea = (j + 1) % NANDFS_NFSAREAS;
+
+ return (0);
+}
+
+static int
+nandfs_select_fsdata(struct nandfs_device *fsdev,
+ struct nandfs_fsdata *fsdatat, struct nandfs_fsdata **fsdata, int nfsds)
+{
+ int i;
+
+ *fsdata = NULL;
+ for (i = 0; i < nfsds; i++) {
+ DPRINTF(VOLUMES, ("%s: i %d f_magic %x f_crc %x\n", __func__,
+ i, fsdatat[i].f_magic, fsdatat[i].f_sum));
+ if (!nandfs_check_fsdata_crc(&fsdatat[i]))
+ continue;
+ *fsdata = &fsdatat[i];
+ break;
+ }
+
+ return (*fsdata != NULL ? 0 : EINVAL);
+}
+
+static int
+nandfs_select_sb(struct nandfs_device *fsdev,
+ struct nandfs_super_block *supert, struct nandfs_super_block **super,
+ int nsbs)
+{
+ int i;
+
+ *super = NULL;
+ for (i = 0; i < nsbs; i++) {
+ if (!nandfs_check_superblock_crc(&fsdev->nd_fsdata, &supert[i]))
+ continue;
+ DPRINTF(SYNC, ("%s: i %d s_last_cno %jx s_magic %x "
+ "s_wtime %jd\n", __func__, i, supert[i].s_last_cno,
+ supert[i].s_magic, supert[i].s_wtime));
+ if (*super == NULL || supert[i].s_last_cno >
+ (*super)->s_last_cno)
+ *super = &supert[i];
+ }
+
+ return (*super != NULL ? 0 : EINVAL);
+}
+
+static int
+nandfs_read_structures_at(struct nandfs_device *fsdev,
+ struct nandfs_fsarea *fstp, struct nandfs_fsdata *fsdata,
+ struct nandfs_super_block *super)
+{
+ struct nandfs_super_block *tsuper, *tsuperd;
+ struct buf *bp;
+ int error, read_size;
+ int i;
+ int offset;
+
+ offset = fstp->offset;
+
+ if (fsdev->nd_erasesize > MAXBSIZE)
+ read_size = MAXBSIZE;
+ else
+ read_size = fsdev->nd_erasesize;
+
+ error = bread(fsdev->nd_devvp, btodb(offset), read_size, NOCRED, &bp);
+ if (error) {
+ printf("couldn't read: %d\n", error);
+ brelse(bp);
+ fstp->flags |= NANDFS_FSSTOR_FAILED;
+ return (error);
+ }
+
+ tsuper = super;
+
+ memcpy(fsdata, bp->b_data, sizeof(struct nandfs_fsdata));
+ memcpy(tsuper, (bp->b_data + sizeof(struct nandfs_fsdata)),
+ read_size - sizeof(struct nandfs_fsdata));
+ brelse(bp);
+
+ tsuper += (read_size - sizeof(struct nandfs_fsdata)) /
+ sizeof(struct nandfs_super_block);
+
+ for (i = 1; i < fsdev->nd_erasesize / read_size; i++) {
+ error = bread(fsdev->nd_devvp, btodb(offset + i * read_size),
+ read_size, NOCRED, &bp);
+ if (error) {
+ printf("couldn't read: %d\n", error);
+ brelse(bp);
+ fstp->flags |= NANDFS_FSSTOR_FAILED;
+ return (error);
+ }
+ memcpy(tsuper, bp->b_data, read_size);
+ tsuper += read_size / sizeof(struct nandfs_super_block);
+ brelse(bp);
+ }
+
+ tsuper -= 1;
+ fstp->last_used = nandfs_sblocks_in_esize(fsdev) - 1;
+ for (tsuperd = super - 1; (tsuper != tsuperd); tsuper -= 1) {
+ if (nandfs_is_empty((u_char *)tsuper, sizeof(*tsuper)))
+ fstp->last_used--;
+ else
+ break;
+ }
+
+ DPRINTF(VOLUMES, ("%s: last_used %d\n", __func__, fstp->last_used));
+
+ return (0);
+}
+
+static int
+nandfs_read_structures(struct nandfs_device *fsdev)
+{
+ struct nandfs_fsdata *fsdata, *fsdatat;
+ struct nandfs_super_block *sblocks, *ssblock;
+ int nsbs, nfsds, i;
+ int error = 0;
+ int nrsbs;
+
+ nfsds = NANDFS_NFSAREAS;
+ nsbs = nandfs_max_sblocks(fsdev);
+
+ fsdatat = malloc(sizeof(struct nandfs_fsdata) * nfsds, M_NANDFSTEMP,
+ M_WAITOK | M_ZERO);
+ sblocks = malloc(sizeof(struct nandfs_super_block) * nsbs, M_NANDFSTEMP,
+ M_WAITOK | M_ZERO);
+
+ nrsbs = 0;
+ for (i = 0; i < NANDFS_NFSAREAS; i++) {
+ fsdev->nd_fsarea[i].offset = i * fsdev->nd_erasesize;
+ error = nandfs_read_structures_at(fsdev, &fsdev->nd_fsarea[i],
+ &fsdatat[i], sblocks + nrsbs);
+ if (error)
+ continue;
+ nrsbs += (fsdev->nd_fsarea[i].last_used + 1);
+ if (fsdev->nd_fsarea[fsdev->nd_last_fsarea].last_used >
+ fsdev->nd_fsarea[i].last_used)
+ fsdev->nd_last_fsarea = i;
+ }
+
+ if (nrsbs == 0) {
+ printf("nandfs: no valid superblocks found\n");
+ error = EINVAL;
+ goto out;
+ }
+
+ error = nandfs_select_fsdata(fsdev, fsdatat, &fsdata, nfsds);
+ if (error)
+ goto out;
+ memcpy(&fsdev->nd_fsdata, fsdata, sizeof(struct nandfs_fsdata));
+
+ error = nandfs_select_sb(fsdev, sblocks, &ssblock, nsbs);
+ if (error)
+ goto out;
+
+ memcpy(&fsdev->nd_super, ssblock, sizeof(struct nandfs_super_block));
+out:
+ free(fsdatat, M_NANDFSTEMP);
+ free(sblocks, M_NANDFSTEMP);
+
+ if (error == 0)
+ DPRINTF(VOLUMES, ("%s: selected sb with w_time %jd "
+ "last_pseg %#jx\n", __func__, fsdev->nd_super.s_wtime,
+ fsdev->nd_super.s_last_pseg));
+
+ return (error);
+}
+
+static void
+nandfs_unmount_base(struct nandfs_device *nandfsdev)
+{
+ int error;
+
+ if (!nandfsdev)
+ return;
+
+ /* Remove all our information */
+ error = vinvalbuf(nandfsdev->nd_devvp, V_SAVE, 0, 0);
+ if (error) {
+ /*
+ * Flushing buffers failed when fs was umounting, can't do
+ * much now, just printf error and continue with umount.
+ */
+ nandfs_error("%s(): error:%d when umounting FS\n",
+ __func__, error);
+ }
+
+ /* Release the device's system nodes */
+ nandfs_release_system_nodes(nandfsdev);
+}
+
+static void
+nandfs_get_ncleanseg(struct nandfs_device *nandfsdev)
+{
+ struct nandfs_seg_stat nss;
+
+ nandfs_get_seg_stat(nandfsdev, &nss);
+ nandfsdev->nd_clean_segs = nss.nss_ncleansegs;
+ DPRINTF(VOLUMES, ("nandfs_mount: clean segs: %jx\n",
+ (uintmax_t)nandfsdev->nd_clean_segs));
+}
+
+
+static int
+nandfs_mount_base(struct nandfs_device *nandfsdev, struct mount *mp,
+ struct nandfs_args *args)
+{
+ uint32_t log_blocksize;
+ int error;
+
+ /* Flush out any old buffers remaining from a previous use. */
+ if ((error = vinvalbuf(nandfsdev->nd_devvp, V_SAVE, 0, 0)))
+ return (error);
+
+ error = nandfs_read_structures(nandfsdev);
+ if (error) {
+ printf("nandfs: could not get valid filesystem structures\n");
+ return (error);
+ }
+
+ if (nandfsdev->nd_fsdata.f_rev_level != NANDFS_CURRENT_REV) {
+ printf("nandfs: unsupported file system revision: %d "
+ "(supported is %d).\n", nandfsdev->nd_fsdata.f_rev_level,
+ NANDFS_CURRENT_REV);
+ return (EINVAL);
+ }
+
+ if (nandfsdev->nd_fsdata.f_erasesize != nandfsdev->nd_erasesize) {
+ printf("nandfs: erasesize mismatch (device %#x, fs %#x)\n",
+ nandfsdev->nd_erasesize, nandfsdev->nd_fsdata.f_erasesize);
+ return (EINVAL);
+ }
+
+ /* Get our blocksize */
+ log_blocksize = nandfsdev->nd_fsdata.f_log_block_size;
+ nandfsdev->nd_blocksize = (uint64_t) 1 << (log_blocksize + 10);
+ DPRINTF(VOLUMES, ("%s: blocksize:%x\n", __func__,
+ nandfsdev->nd_blocksize));
+
+ DPRINTF(VOLUMES, ("%s: accepted super block with cp %#jx\n", __func__,
+ (uintmax_t)nandfsdev->nd_super.s_last_cno));
+
+ /* Calculate dat structure parameters */
+ nandfs_calc_mdt_consts(nandfsdev, &nandfsdev->nd_dat_mdt,
+ nandfsdev->nd_fsdata.f_dat_entry_size);
+ nandfs_calc_mdt_consts(nandfsdev, &nandfsdev->nd_ifile_mdt,
+ nandfsdev->nd_fsdata.f_inode_size);
+
+ /* Search for the super root and roll forward when needed */
+ if (nandfs_search_super_root(nandfsdev)) {
+ printf("Cannot find valid SuperRoot\n");
+ return (EINVAL);
+ }
+
+ nandfsdev->nd_mount_state = nandfsdev->nd_super.s_state;
+ if (nandfsdev->nd_mount_state != NANDFS_VALID_FS) {
+ printf("FS is seriously damaged, needs repairing\n");
+ printf("aborting mount\n");
+ return (EINVAL);
+ }
+
+ /*
+ * FS should be ok now. The superblock and the last segsum could be
+ * updated from the repair so extract running values again.
+ */
+ nandfsdev->nd_last_pseg = nandfsdev->nd_super.s_last_pseg;
+ nandfsdev->nd_seg_sequence = nandfsdev->nd_super.s_last_seq;
+ nandfsdev->nd_seg_num = nandfs_get_segnum_of_block(nandfsdev,
+ nandfsdev->nd_last_pseg);
+ nandfsdev->nd_next_seg_num = nandfs_get_segnum_of_block(nandfsdev,
+ nandfsdev->nd_last_segsum.ss_next);
+ nandfsdev->nd_ts.tv_sec = nandfsdev->nd_last_segsum.ss_create;
+ nandfsdev->nd_last_cno = nandfsdev->nd_super.s_last_cno;
+ nandfsdev->nd_fakevblk = 1;
+ nandfsdev->nd_last_ino = NANDFS_USER_INO;
+ DPRINTF(VOLUMES, ("%s: last_pseg %#jx last_cno %#jx last_seq %#jx\n"
+ "fsdev: last_seg: seq %#jx num %#jx, next_seg_num %#jx\n",
+ __func__, (uintmax_t)nandfsdev->nd_last_pseg,
+ (uintmax_t)nandfsdev->nd_last_cno,
+ (uintmax_t)nandfsdev->nd_seg_sequence,
+ (uintmax_t)nandfsdev->nd_seg_sequence,
+ (uintmax_t)nandfsdev->nd_seg_num,
+ (uintmax_t)nandfsdev->nd_next_seg_num));
+
+ DPRINTF(VOLUMES, ("nandfs_mount: accepted super root\n"));
+
+ /* Create system vnodes for DAT, CP and SEGSUM */
+ error = nandfs_create_system_nodes(nandfsdev);
+ if (error)
+ nandfs_unmount_base(nandfsdev);
+
+ nandfs_get_ncleanseg(nandfsdev);
+
+ return (error);
+}
+
+static void
+nandfs_unmount_device(struct nandfs_device *nandfsdev)
+{
+
+ /* Is there anything? */
+ if (nandfsdev == NULL)
+ return;
+
+ /* Remove the device only if we're the last reference */
+ nandfsdev->nd_refcnt--;
+ if (nandfsdev->nd_refcnt >= 1)
+ return;
+
+ MPASS(nandfsdev->nd_syncer == NULL);
+ MPASS(nandfsdev->nd_cleaner == NULL);
+ MPASS(nandfsdev->nd_free_base == NULL);
+
+ /* Unmount our base */
+ nandfs_unmount_base(nandfsdev);
+
+ /* Remove from our device list */
+ SLIST_REMOVE(&nandfs_devices, nandfsdev, nandfs_device, nd_next_device);
+
+ DROP_GIANT();
+ g_topology_lock();
+ g_vfs_close(nandfsdev->nd_gconsumer);
+ g_topology_unlock();
+ PICKUP_GIANT();
+
+ DPRINTF(VOLUMES, ("closing device\n"));
+
+ /* Clear our mount reference and release device node */
+ vrele(nandfsdev->nd_devvp);
+
+ dev_rel(nandfsdev->nd_devvp->v_rdev);
+
+ /* Free our device info */
+ cv_destroy(&nandfsdev->nd_sync_cv);
+ mtx_destroy(&nandfsdev->nd_sync_mtx);
+ cv_destroy(&nandfsdev->nd_clean_cv);
+ mtx_destroy(&nandfsdev->nd_clean_mtx);
+ mtx_destroy(&nandfsdev->nd_mutex);
+ lockdestroy(&nandfsdev->nd_seg_const);
+ free(nandfsdev, M_NANDFSMNT);
+}
+
+static int
+nandfs_check_mounts(struct nandfs_device *nandfsdev, struct mount *mp,
+ struct nandfs_args *args)
+{
+ struct nandfsmount *nmp;
+ uint64_t last_cno;
+
+ /* no double-mounting of the same checkpoint */
+ STAILQ_FOREACH(nmp, &nandfsdev->nd_mounts, nm_next_mount) {
+ if (nmp->nm_mount_args.cpno == args->cpno)
+ return (EBUSY);
+ }
+
+ /* Allow readonly mounts without questioning here */
+ if (mp->mnt_flag & MNT_RDONLY)
+ return (0);
+
+ /* Read/write mount */
+ STAILQ_FOREACH(nmp, &nandfsdev->nd_mounts, nm_next_mount) {
+ /* Only one RW mount on this device! */
+ if ((nmp->nm_vfs_mountp->mnt_flag & MNT_RDONLY)==0)
+ return (EROFS);
+ /* RDONLY on last mountpoint is device busy */
+ last_cno = nmp->nm_nandfsdev->nd_super.s_last_cno;
+ if (nmp->nm_mount_args.cpno == last_cno)
+ return (EBUSY);
+ }
+
+ /* OK for now */
+ return (0);
+}
+
+static int
+nandfs_mount_device(struct vnode *devvp, struct mount *mp,
+ struct nandfs_args *args, struct nandfs_device **nandfsdev_p)
+{
+ struct nandfs_device *nandfsdev;
+ struct g_provider *pp;
+ struct g_consumer *cp;
+ struct cdev *dev;
+ uint32_t erasesize;
+ int error, size;
+ int ronly;
+
+ DPRINTF(VOLUMES, ("Mounting NANDFS device\n"));
+
+ ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
+
+ /* Look up device in our nandfs_mountpoints */
+ *nandfsdev_p = NULL;
+ SLIST_FOREACH(nandfsdev, &nandfs_devices, nd_next_device)
+ if (nandfsdev->nd_devvp == devvp)
+ break;
+
+ if (nandfsdev) {
+ DPRINTF(VOLUMES, ("device already mounted\n"));
+ error = nandfs_check_mounts(nandfsdev, mp, args);
+ if (error)
+ return error;
+ nandfsdev->nd_refcnt++;
+ *nandfsdev_p = nandfsdev;
+
+ if (!ronly) {
+ DROP_GIANT();
+ g_topology_lock();
+ error = g_access(nandfsdev->nd_gconsumer, 0, 1, 0);
+ g_topology_unlock();
+ PICKUP_GIANT();
+ }
+ return (error);
+ }
+
+ vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
+ dev = devvp->v_rdev;
+ dev_ref(dev);
+ DROP_GIANT();
+ g_topology_lock();
+ error = g_vfs_open(devvp, &cp, "nandfs", ronly ? 0 : 1);
+ pp = g_dev_getprovider(dev);
+ g_topology_unlock();
+ PICKUP_GIANT();
+ VOP_UNLOCK(devvp, 0);
+ if (error) {
+ dev_rel(dev);
+ return (error);
+ }
+
+ nandfsdev = malloc(sizeof(struct nandfs_device), M_NANDFSMNT, M_WAITOK | M_ZERO);
+
+ /* Initialise */
+ nandfsdev->nd_refcnt = 1;
+ nandfsdev->nd_devvp = devvp;
+ nandfsdev->nd_syncing = 0;
+ nandfsdev->nd_cleaning = 0;
+ nandfsdev->nd_gconsumer = cp;
+ cv_init(&nandfsdev->nd_sync_cv, "nandfssync");
+ mtx_init(&nandfsdev->nd_sync_mtx, "nffssyncmtx", NULL, MTX_DEF);
+ cv_init(&nandfsdev->nd_clean_cv, "nandfsclean");
+ mtx_init(&nandfsdev->nd_clean_mtx, "nffscleanmtx", NULL, MTX_DEF);
+ mtx_init(&nandfsdev->nd_mutex, "nandfsdev lock", NULL, MTX_DEF);
+ lockinit(&nandfsdev->nd_seg_const, PVFS, "nffssegcon", VLKTIMEOUT,
+ LK_CANRECURSE);
+ STAILQ_INIT(&nandfsdev->nd_mounts);
+
+ nandfsdev->nd_devsize = pp->mediasize;
+ nandfsdev->nd_devblocksize = pp->sectorsize;
+
+ size = sizeof(erasesize);
+ error = g_io_getattr("NAND::blocksize", nandfsdev->nd_gconsumer, &size,
+ &erasesize);
+ if (error) {
+ DPRINTF(VOLUMES, ("couldn't get erasesize: %d\n", error));
+
+ if (error == ENOIOCTL || error == EOPNOTSUPP) {
+ /*
+ * We conclude that this is not NAND storage
+ */
+ nandfsdev->nd_erasesize = NANDFS_DEF_ERASESIZE;
+ nandfsdev->nd_is_nand = 0;
+ } else {
+ DROP_GIANT();
+ g_topology_lock();
+ g_vfs_close(nandfsdev->nd_gconsumer);
+ g_topology_unlock();
+ PICKUP_GIANT();
+ dev_rel(dev);
+ free(nandfsdev, M_NANDFSMNT);
+ return (error);
+ }
+ } else {
+ nandfsdev->nd_erasesize = erasesize;
+ nandfsdev->nd_is_nand = 1;
+ }
+
+ DPRINTF(VOLUMES, ("%s: erasesize %x\n", __func__,
+ nandfsdev->nd_erasesize));
+
+ /* Register nandfs_device in list */
+ SLIST_INSERT_HEAD(&nandfs_devices, nandfsdev, nd_next_device);
+
+ error = nandfs_mount_base(nandfsdev, mp, args);
+ if (error) {
+ /* Remove all our information */
+ nandfs_unmount_device(nandfsdev);
+ return (EINVAL);
+ }
+
+ nandfsdev->nd_maxfilesize = nandfs_get_maxfilesize(nandfsdev);
+
+ *nandfsdev_p = nandfsdev;
+ DPRINTF(VOLUMES, ("NANDFS device mounted ok\n"));
+
+ return (0);
+}
+
+static int
+nandfs_mount_checkpoint(struct nandfsmount *nmp)
+{
+ struct nandfs_cpfile_header *cphdr;
+ struct nandfs_checkpoint *cp;
+ struct nandfs_inode ifile_inode;
+ struct nandfs_node *cp_node;
+ struct buf *bp;
+ uint64_t ncp, nsn, cpno, fcpno, blocknr, last_cno;
+ uint32_t off, dlen;
+ int cp_per_block, error;
+
+ cpno = nmp->nm_mount_args.cpno;
+ if (cpno == 0)
+ cpno = nmp->nm_nandfsdev->nd_super.s_last_cno;
+
+ DPRINTF(VOLUMES, ("%s: trying to mount checkpoint number %"PRIu64"\n",
+ __func__, cpno));
+
+ cp_node = nmp->nm_nandfsdev->nd_cp_node;
+
+ VOP_LOCK(NTOV(cp_node), LK_SHARED);
+ /* Get cpfile header from 1st block of cp file */
+ error = nandfs_bread(cp_node, 0, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ VOP_UNLOCK(NTOV(cp_node), 0);
+ return (error);
+ }
+
+ cphdr = (struct nandfs_cpfile_header *) bp->b_data;
+ ncp = cphdr->ch_ncheckpoints;
+ nsn = cphdr->ch_nsnapshots;
+
+ brelse(bp);
+
+ DPRINTF(VOLUMES, ("mount_nandfs: checkpoint header read in\n"));
+ DPRINTF(VOLUMES, ("\tNumber of checkpoints %"PRIu64"\n", ncp));
+ DPRINTF(VOLUMES, ("\tNumber of snapshots %"PRIu64"\n", nsn));
+
+ /* Read in our specified checkpoint */
+ dlen = nmp->nm_nandfsdev->nd_fsdata.f_checkpoint_size;
+ cp_per_block = nmp->nm_nandfsdev->nd_blocksize / dlen;
+
+ fcpno = cpno + NANDFS_CPFILE_FIRST_CHECKPOINT_OFFSET - 1;
+ blocknr = fcpno / cp_per_block;
+ off = (fcpno % cp_per_block) * dlen;
+ error = nandfs_bread(cp_node, blocknr, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ VOP_UNLOCK(NTOV(cp_node), 0);
+ printf("mount_nandfs: couldn't read cp block %"PRIu64"\n",
+ fcpno);
+ return (EINVAL);
+ }
+
+ /* Needs to be a valid checkpoint */
+ cp = (struct nandfs_checkpoint *) ((uint8_t *) bp->b_data + off);
+ if (cp->cp_flags & NANDFS_CHECKPOINT_INVALID) {
+ printf("mount_nandfs: checkpoint marked invalid\n");
+ brelse(bp);
+ VOP_UNLOCK(NTOV(cp_node), 0);
+ return (EINVAL);
+ }
+
+ /* Is this really the checkpoint we want? */
+ if (cp->cp_cno != cpno) {
+ printf("mount_nandfs: checkpoint file corrupt? "
+ "expected cpno %"PRIu64", found cpno %"PRIu64"\n",
+ cpno, cp->cp_cno);
+ brelse(bp);
+ VOP_UNLOCK(NTOV(cp_node), 0);
+ return (EINVAL);
+ }
+
+ /* Check if it's a snapshot ! */
+ last_cno = nmp->nm_nandfsdev->nd_super.s_last_cno;
+ if (cpno != last_cno) {
+ /* Only allow snapshots if not mounting on the last cp */
+ if ((cp->cp_flags & NANDFS_CHECKPOINT_SNAPSHOT) == 0) {
+ printf( "mount_nandfs: checkpoint %"PRIu64" is not a "
+ "snapshot\n", cpno);
+ brelse(bp);
+ VOP_UNLOCK(NTOV(cp_node), 0);
+ return (EINVAL);
+ }
+ }
+
+ ifile_inode = cp->cp_ifile_inode;
+ brelse(bp);
+
+ /* Get ifile inode */
+ error = nandfs_get_node_raw(nmp->nm_nandfsdev, NULL, NANDFS_IFILE_INO,
+ &ifile_inode, &nmp->nm_ifile_node);
+ if (error) {
+ printf("mount_nandfs: can't read ifile node\n");
+ VOP_UNLOCK(NTOV(cp_node), 0);
+ return (EINVAL);
+ }
+
+ NANDFS_SET_SYSTEMFILE(NTOV(nmp->nm_ifile_node));
+ VOP_UNLOCK(NTOV(cp_node), 0);
+ /* Get root node? */
+
+ return (0);
+}
+
+static void
+free_nandfs_mountinfo(struct mount *mp)
+{
+ struct nandfsmount *nmp = VFSTONANDFS(mp);
+
+ if (nmp == NULL)
+ return;
+
+ free(nmp, M_NANDFSMNT);
+}
+
+void
+nandfs_wakeup_wait_sync(struct nandfs_device *nffsdev, int reason)
+{
+ char *reasons[] = {
+ "umount",
+ "vfssync",
+ "bdflush",
+ "fforce",
+ "fsync",
+ "ro_upd"
+ };
+
+ DPRINTF(SYNC, ("%s: %s\n", __func__, reasons[reason]));
+ mtx_lock(&nffsdev->nd_sync_mtx);
+ if (nffsdev->nd_syncing)
+ cv_wait(&nffsdev->nd_sync_cv, &nffsdev->nd_sync_mtx);
+ if (reason == SYNCER_UMOUNT)
+ nffsdev->nd_syncer_exit = 1;
+ nffsdev->nd_syncing = 1;
+ wakeup(&nffsdev->nd_syncing);
+ cv_wait(&nffsdev->nd_sync_cv, &nffsdev->nd_sync_mtx);
+
+ mtx_unlock(&nffsdev->nd_sync_mtx);
+}
+
+static void
+nandfs_gc_finished(struct nandfs_device *nffsdev, int exit)
+{
+ int error;
+
+ mtx_lock(&nffsdev->nd_sync_mtx);
+ nffsdev->nd_syncing = 0;
+ DPRINTF(SYNC, ("%s: cleaner finish\n", __func__));
+ cv_broadcast(&nffsdev->nd_sync_cv);
+ mtx_unlock(&nffsdev->nd_sync_mtx);
+ if (!exit) {
+ error = tsleep(&nffsdev->nd_syncing, PRIBIO, "-",
+ hz * nandfs_sync_interval);
+ DPRINTF(SYNC, ("%s: cleaner waked up: %d\n",
+ __func__, error));
+ }
+}
+
+static void
+nandfs_syncer(struct nandfsmount *nmp)
+{
+ struct nandfs_device *nffsdev;
+ struct mount *mp;
+ int flags, error;
+
+ mp = nmp->nm_vfs_mountp;
+ nffsdev = nmp->nm_nandfsdev;
+ tsleep(&nffsdev->nd_syncing, PRIBIO, "-", hz * nandfs_sync_interval);
+
+ while (!nffsdev->nd_syncer_exit) {
+ DPRINTF(SYNC, ("%s: syncer run\n", __func__));
+ nffsdev->nd_syncing = 1;
+
+ flags = (nmp->nm_flags & (NANDFS_FORCE_SYNCER | NANDFS_UMOUNT));
+
+ error = nandfs_segment_constructor(nmp, flags);
+ if (error)
+ nandfs_error("%s: error:%d when creating segments\n",
+ __func__, error);
+
+ nmp->nm_flags &= ~flags;
+
+ nandfs_gc_finished(nffsdev, 0);
+ }
+
+ MPASS(nffsdev->nd_cleaner == NULL);
+ error = nandfs_segment_constructor(nmp,
+ NANDFS_FORCE_SYNCER | NANDFS_UMOUNT);
+ if (error)
+ nandfs_error("%s: error:%d when creating segments\n",
+ __func__, error);
+ nandfs_gc_finished(nffsdev, 1);
+ nffsdev->nd_syncer = NULL;
+ MPASS(nffsdev->nd_free_base == NULL);
+
+ DPRINTF(SYNC, ("%s: exiting\n", __func__));
+ kthread_exit();
+}
+
+static int
+start_syncer(struct nandfsmount *nmp)
+{
+ int error;
+
+ MPASS(nmp->nm_nandfsdev->nd_syncer == NULL);
+
+ DPRINTF(SYNC, ("%s: start syncer\n", __func__));
+
+ nmp->nm_nandfsdev->nd_syncer_exit = 0;
+
+ error = kthread_add((void(*)(void *))nandfs_syncer, nmp, NULL,
+ &nmp->nm_nandfsdev->nd_syncer, 0, 0, "nandfs_syncer");
+
+ if (error)
+ printf("nandfs: could not start syncer: %d\n", error);
+
+ return (error);
+}
+
+static int
+stop_syncer(struct nandfsmount *nmp)
+{
+
+ MPASS(nmp->nm_nandfsdev->nd_syncer != NULL);
+
+ nandfs_wakeup_wait_sync(nmp->nm_nandfsdev, SYNCER_UMOUNT);
+
+ DPRINTF(SYNC, ("%s: stop syncer\n", __func__));
+ return (0);
+}
+
+/*
+ * Mount null layer
+ */
+static int
+nandfs_mount(struct mount *mp)
+{
+ struct nandfsmount *nmp;
+ struct vnode *devvp;
+ struct nameidata nd;
+ struct vfsoptlist *opts;
+ struct thread *td;
+ char *from;
+ int error = 0, flags;
+
+ DPRINTF(VOLUMES, ("%s: mp = %p\n", __func__, (void *)mp));
+
+ td = curthread;
+ opts = mp->mnt_optnew;
+
+ if (vfs_filteropt(opts, nandfs_opts))
+ return (EINVAL);
+
+ /*
+ * Update is a no-op
+ */
+ if (mp->mnt_flag & MNT_UPDATE) {
+ nmp = VFSTONANDFS(mp);
+ if (vfs_flagopt(mp->mnt_optnew, "export", NULL, 0)) {
+ return (error);
+ }
+ if (!(nmp->nm_ronly) && vfs_flagopt(opts, "ro", NULL, 0)) {
+ vn_start_write(NULL, &mp, V_WAIT);
+ error = VFS_SYNC(mp, MNT_WAIT);
+ if (error)
+ return (error);
+ vn_finished_write(mp);
+
+ flags = WRITECLOSE;
+ if (mp->mnt_flag & MNT_FORCE)
+ flags |= FORCECLOSE;
+
+ nandfs_wakeup_wait_sync(nmp->nm_nandfsdev,
+ SYNCER_ROUPD);
+ error = vflush(mp, 0, flags, td);
+ if (error)
+ return (error);
+
+ nandfs_stop_cleaner(nmp->nm_nandfsdev);
+ stop_syncer(nmp);
+ DROP_GIANT();
+ g_topology_lock();
+ g_access(nmp->nm_nandfsdev->nd_gconsumer, 0, -1, 0);
+ g_topology_unlock();
+ PICKUP_GIANT();
+ MNT_ILOCK(mp);
+ mp->mnt_flag |= MNT_RDONLY;
+ MNT_IUNLOCK(mp);
+ nmp->nm_ronly = 1;
+
+ } else if ((nmp->nm_ronly) &&
+ !vfs_flagopt(opts, "ro", NULL, 0)) {
+ /*
+ * Don't allow read-write snapshots.
+ */
+ if (nmp->nm_mount_args.cpno != 0)
+ return (EROFS);
+ /*
+ * If upgrade to read-write by non-root, then verify
+ * that user has necessary permissions on the device.
+ */
+ devvp = nmp->nm_nandfsdev->nd_devvp;
+ vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
+ error = VOP_ACCESS(devvp, VREAD | VWRITE,
+ td->td_ucred, td);
+ if (error) {
+ error = priv_check(td, PRIV_VFS_MOUNT_PERM);
+ if (error) {
+ VOP_UNLOCK(devvp, 0);
+ return (error);
+ }
+ }
+
+ VOP_UNLOCK(devvp, 0);
+ DROP_GIANT();
+ g_topology_lock();
+ error = g_access(nmp->nm_nandfsdev->nd_gconsumer, 0, 1,
+ 0);
+ g_topology_unlock();
+ PICKUP_GIANT();
+ if (error)
+ return (error);
+
+ MNT_ILOCK(mp);
+ mp->mnt_flag &= ~MNT_RDONLY;
+ MNT_IUNLOCK(mp);
+ error = start_syncer(nmp);
+ if (error == 0)
+ error = nandfs_start_cleaner(nmp->nm_nandfsdev);
+ if (error) {
+ DROP_GIANT();
+ g_topology_lock();
+ g_access(nmp->nm_nandfsdev->nd_gconsumer, 0, -1,
+ 0);
+ g_topology_unlock();
+ PICKUP_GIANT();
+ return (error);
+ }
+
+ nmp->nm_ronly = 0;
+ }
+ return (0);
+ }
+
+ from = vfs_getopts(opts, "from", &error);
+ if (error)
+ return (error);
+
+ /*
+ * Find device node
+ */
+ NDINIT(&nd, LOOKUP, FOLLOW|LOCKLEAF, UIO_SYSSPACE, from, curthread);
+ error = namei(&nd);
+ if (error)
+ return (error);
+ NDFREE(&nd, NDF_ONLY_PNBUF);
+
+ devvp = nd.ni_vp;
+
+ if (!vn_isdisk(devvp, &error)) {
+ vput(devvp);
+ return (error);
+ }
+
+ /* Check the access rights on the mount device */
+ error = VOP_ACCESS(devvp, VREAD, curthread->td_ucred, curthread);
+ if (error)
+ error = priv_check(curthread, PRIV_VFS_MOUNT_PERM);
+ if (error) {
+ vput(devvp);
+ return (error);
+ }
+
+ vfs_getnewfsid(mp);
+
+ error = nandfs_mountfs(devvp, mp);
+ if (error)
+ return (error);
+ vfs_mountedfrom(mp, from);
+
+ return (0);
+}
+
+static int
+nandfs_mountfs(struct vnode *devvp, struct mount *mp)
+{
+ struct nandfsmount *nmp = NULL;
+ struct nandfs_args *args = NULL;
+ struct nandfs_device *nandfsdev;
+ char *from;
+ int error, ronly;
+ char *cpno;
+
+ ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
+
+ if (devvp->v_rdev->si_iosize_max != 0)
+ mp->mnt_iosize_max = devvp->v_rdev->si_iosize_max;
+ VOP_UNLOCK(devvp, 0);
+
+ if (mp->mnt_iosize_max > MAXPHYS)
+ mp->mnt_iosize_max = MAXPHYS;
+
+ from = vfs_getopts(mp->mnt_optnew, "from", &error);
+ if (error)
+ goto error;
+
+ error = vfs_getopt(mp->mnt_optnew, "snap", (void **)&cpno, NULL);
+ if (error == ENOENT)
+ cpno = NULL;
+ else if (error)
+ goto error;
+
+ args = (struct nandfs_args *)malloc(sizeof(struct nandfs_args),
+ M_NANDFSMNT, M_WAITOK | M_ZERO);
+
+ if (cpno != NULL)
+ args->cpno = strtoul(cpno, (char **)NULL, 10);
+ else
+ args->cpno = 0;
+ args->fspec = from;
+
+ if (args->cpno != 0 && !ronly) {
+ error = EROFS;
+ goto error;
+ }
+
+ printf("WARNING: NANDFS is considered to be a highly experimental "
+ "feature in FreeBSD.\n");
+
+ error = nandfs_mount_device(devvp, mp, args, &nandfsdev);
+ if (error)
+ goto error;
+
+ nmp = (struct nandfsmount *) malloc(sizeof(struct nandfsmount),
+ M_NANDFSMNT, M_WAITOK | M_ZERO);
+
+ mp->mnt_data = nmp;
+ nmp->nm_vfs_mountp = mp;
+ nmp->nm_ronly = ronly;
+ MNT_ILOCK(mp);
+ mp->mnt_flag |= MNT_LOCAL;
+ mp->mnt_kern_flag |= MNTK_MPSAFE;
+ MNT_IUNLOCK(mp);
+ nmp->nm_nandfsdev = nandfsdev;
+ /* Add our mountpoint */
+ STAILQ_INSERT_TAIL(&nandfsdev->nd_mounts, nmp, nm_next_mount);
+
+ if (args->cpno > nandfsdev->nd_last_cno) {
+ printf("WARNING: supplied checkpoint number (%jd) is greater "
+ "than last known checkpoint on filesystem (%jd). Mounting"
+ " checkpoint %jd\n", (uintmax_t)args->cpno,
+ (uintmax_t)nandfsdev->nd_last_cno,
+ (uintmax_t)nandfsdev->nd_last_cno);
+ args->cpno = nandfsdev->nd_last_cno;
+ }
+
+ /* Setting up other parameters */
+ nmp->nm_mount_args = *args;
+ free(args, M_NANDFSMNT);
+ error = nandfs_mount_checkpoint(nmp);
+ if (error) {
+ nandfs_unmount(mp, MNT_FORCE);
+ goto unmounted;
+ }
+
+ if (!ronly) {
+ error = start_syncer(nmp);
+ if (error == 0)
+ error = nandfs_start_cleaner(nmp->nm_nandfsdev);
+ if (error)
+ nandfs_unmount(mp, MNT_FORCE);
+ }
+
+ return (0);
+
+error:
+ if (args != NULL)
+ free(args, M_NANDFSMNT);
+
+ if (nmp != NULL) {
+ free(nmp, M_NANDFSMNT);
+ mp->mnt_data = NULL;
+ }
+unmounted:
+ return (error);
+}
+
+static int
+nandfs_unmount(struct mount *mp, int mntflags)
+{
+ struct nandfs_device *nandfsdev;
+ struct nandfsmount *nmp;
+ int error;
+ int flags = 0;
+
+ DPRINTF(VOLUMES, ("%s: mp = %p\n", __func__, (void *)mp));
+
+ if (mntflags & MNT_FORCE)
+ flags |= FORCECLOSE;
+
+ nmp = mp->mnt_data;
+ nandfsdev = nmp->nm_nandfsdev;
+
+ error = vflush(mp, 0, flags | SKIPSYSTEM, curthread);
+ if (error)
+ return (error);
+
+ if (!(nmp->nm_ronly)) {
+ nandfs_stop_cleaner(nandfsdev);
+ stop_syncer(nmp);
+ }
+
+ if (nmp->nm_ifile_node)
+ NANDFS_UNSET_SYSTEMFILE(NTOV(nmp->nm_ifile_node));
+
+ /* Remove our mount point */
+ STAILQ_REMOVE(&nandfsdev->nd_mounts, nmp, nandfsmount, nm_next_mount);
+
+ /* Unmount the device itself when we're the last one */
+ nandfs_unmount_device(nandfsdev);
+
+ free_nandfs_mountinfo(mp);
+
+ /*
+ * Finally, throw away the null_mount structure
+ */
+ mp->mnt_data = 0;
+ MNT_ILOCK(mp);
+ mp->mnt_flag &= ~MNT_LOCAL;
+ MNT_IUNLOCK(mp);
+
+ return (0);
+}
+
+static int
+nandfs_statfs(struct mount *mp, struct statfs *sbp)
+{
+ struct nandfsmount *nmp;
+ struct nandfs_device *nandfsdev;
+ struct nandfs_fsdata *fsdata;
+ struct nandfs_super_block *sb;
+ struct nandfs_block_group_desc *groups;
+ struct nandfs_node *ifile;
+ struct nandfs_mdt *mdt;
+ struct buf *bp;
+ int i, error;
+ uint32_t entries_per_group;
+ uint64_t files = 0;
+
+ nmp = mp->mnt_data;
+ nandfsdev = nmp->nm_nandfsdev;
+ fsdata = &nandfsdev->nd_fsdata;
+ sb = &nandfsdev->nd_super;
+ ifile = nmp->nm_ifile_node;
+ mdt = &nandfsdev->nd_ifile_mdt;
+ entries_per_group = mdt->entries_per_group;
+
+ VOP_LOCK(NTOV(ifile), LK_SHARED);
+ error = nandfs_bread(ifile, 0, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ VOP_UNLOCK(NTOV(ifile), 0);
+ return (error);
+ }
+
+ groups = (struct nandfs_block_group_desc *)bp->b_data;
+
+ for (i = 0; i < mdt->groups_per_desc_block; i++)
+ files += (entries_per_group - groups[i].bg_nfrees);
+
+ brelse(bp);
+ VOP_UNLOCK(NTOV(ifile), 0);
+
+ sbp->f_bsize = nandfsdev->nd_blocksize;
+ sbp->f_iosize = sbp->f_bsize;
+ sbp->f_blocks = fsdata->f_blocks_per_segment * fsdata->f_nsegments;
+ sbp->f_bfree = sb->s_free_blocks_count;
+ sbp->f_bavail = sbp->f_bfree;
+ sbp->f_files = files;
+ sbp->f_ffree = 0;
+ return (0);
+}
+
+static int
+nandfs_root(struct mount *mp, int flags, struct vnode **vpp)
+{
+ struct nandfsmount *nmp = VFSTONANDFS(mp);
+ struct nandfs_node *node;
+ int error;
+
+ error = nandfs_get_node(nmp, NANDFS_ROOT_INO, &node);
+ if (error)
+ return (error);
+
+ KASSERT(NTOV(node)->v_vflag & VV_ROOT,
+ ("root_vp->v_vflag & VV_ROOT"));
+
+ *vpp = NTOV(node);
+
+ return (error);
+}
+
+static int
+nandfs_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
+{
+ struct nandfsmount *nmp = VFSTONANDFS(mp);
+ struct nandfs_node *node;
+ int error;
+
+ error = nandfs_get_node(nmp, ino, &node);
+ if (node)
+ *vpp = NTOV(node);
+
+ return (error);
+}
+
+static int
+nandfs_sync(struct mount *mp, int waitfor)
+{
+ struct nandfsmount *nmp = VFSTONANDFS(mp);
+
+ DPRINTF(SYNC, ("%s: mp %p waitfor %d\n", __func__, mp, waitfor));
+
+ /*
+ * XXX: A hack to be removed soon
+ */
+ if (waitfor == MNT_LAZY)
+ return (0);
+ if (waitfor == MNT_SUSPEND)
+ return (0);
+ nandfs_wakeup_wait_sync(nmp->nm_nandfsdev, SYNCER_VFS_SYNC);
+ return (0);
+}
+
+static struct vfsops nandfs_vfsops = {
+ .vfs_init = nandfs_init,
+ .vfs_mount = nandfs_mount,
+ .vfs_root = nandfs_root,
+ .vfs_statfs = nandfs_statfs,
+ .vfs_uninit = nandfs_uninit,
+ .vfs_unmount = nandfs_unmount,
+ .vfs_vget = nandfs_vget,
+ .vfs_sync = nandfs_sync,
+};
+
+VFS_SET(nandfs_vfsops, nandfs, VFCF_LOOPBACK);
diff --git a/sys/fs/nandfs/nandfs_vnops.c b/sys/fs/nandfs/nandfs_vnops.c
new file mode 100644
index 000000000000..b226d30afcae
--- /dev/null
+++ b/sys/fs/nandfs/nandfs_vnops.c
@@ -0,0 +1,2455 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf
+ * Copyright (c) 2008, 2009 Reinoud Zandijk
+ * 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.
+ *
+ * From: NetBSD: nilfs_vnops.c,v 1.2 2009/08/26 03:40:48 elad
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/lockf.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/mutex.h>
+#include <sys/namei.h>
+#include <sys/sysctl.h>
+#include <sys/unistd.h>
+#include <sys/vnode.h>
+#include <sys/buf.h>
+#include <sys/bio.h>
+#include <sys/fcntl.h>
+#include <sys/dirent.h>
+#include <sys/stat.h>
+#include <sys/priv.h>
+
+#include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_object.h>
+#include <vm/vnode_pager.h>
+
+#include <machine/_inttypes.h>
+
+#include <fs/nandfs/nandfs_mount.h>
+#include <fs/nandfs/nandfs.h>
+#include <fs/nandfs/nandfs_subr.h>
+
+extern uma_zone_t nandfs_node_zone;
+static void nandfs_read_filebuf(struct nandfs_node *, struct buf *);
+static void nandfs_itimes_locked(struct vnode *);
+static int nandfs_truncate(struct vnode *, uint64_t);
+
+static vop_pathconf_t nandfs_pathconf;
+
+#define UPDATE_CLOSE 0
+#define UPDATE_WAIT 0
+
+static int
+nandfs_inactive(struct vop_inactive_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *node = VTON(vp);
+ int error = 0;
+
+ DPRINTF(VNCALL, ("%s: vp:%p node:%p\n", __func__, vp, node));
+
+ if (node == NULL) {
+ DPRINTF(NODE, ("%s: inactive NULL node\n", __func__));
+ return (0);
+ }
+
+ if (node->nn_inode.i_mode != 0 && !(node->nn_inode.i_links_count)) {
+ nandfs_truncate(vp, 0);
+ error = nandfs_node_destroy(node);
+ if (error)
+ nandfs_error("%s: destroy node: %p\n", __func__, node);
+ node->nn_flags = 0;
+ vrecycle(vp);
+ }
+
+ return (error);
+}
+
+static int
+nandfs_reclaim(struct vop_reclaim_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *nandfs_node = VTON(vp);
+ struct nandfs_device *fsdev = nandfs_node->nn_nandfsdev;
+ uint64_t ino = nandfs_node->nn_ino;
+
+ DPRINTF(VNCALL, ("%s: vp:%p node:%p\n", __func__, vp, nandfs_node));
+
+ /* Invalidate all entries to a particular vnode. */
+ cache_purge(vp);
+
+ /* Destroy the vm object and flush associated pages. */
+ vnode_destroy_vobject(vp);
+
+ /* Remove from vfs hash if not system vnode */
+ if (!NANDFS_SYS_NODE(nandfs_node->nn_ino))
+ vfs_hash_remove(vp);
+
+ /* Dispose all node knowledge */
+ nandfs_dispose_node(&nandfs_node);
+
+ if (!NANDFS_SYS_NODE(ino))
+ NANDFS_WRITEUNLOCK(fsdev);
+
+ return (0);
+}
+
+static int
+nandfs_read(struct vop_read_args *ap)
+{
+ register struct vnode *vp = ap->a_vp;
+ register struct nandfs_node *node = VTON(vp);
+ struct nandfs_device *nandfsdev = node->nn_nandfsdev;
+ struct uio *uio = ap->a_uio;
+ struct buf *bp;
+ uint64_t size;
+ uint32_t blocksize;
+ off_t bytesinfile;
+ ssize_t toread, off;
+ daddr_t lbn;
+ ssize_t resid;
+ int error = 0;
+
+ if (uio->uio_resid == 0)
+ return (0);
+
+ size = node->nn_inode.i_size;
+ if (uio->uio_offset >= size)
+ return (0);
+
+ blocksize = nandfsdev->nd_blocksize;
+ bytesinfile = size - uio->uio_offset;
+
+ resid = omin(uio->uio_resid, bytesinfile);
+
+ while (resid) {
+ lbn = uio->uio_offset / blocksize;
+ off = uio->uio_offset & (blocksize - 1);
+
+ toread = omin(resid, blocksize - off);
+
+ DPRINTF(READ, ("nandfs_read bn: 0x%jx toread: 0x%zx (0x%x)\n",
+ (uintmax_t)lbn, toread, blocksize));
+
+ error = nandfs_bread(node, lbn, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ break;
+ }
+
+ error = uiomove(bp->b_data + off, toread, uio);
+ if (error) {
+ brelse(bp);
+ break;
+ }
+
+ brelse(bp);
+ resid -= toread;
+ }
+
+ return (error);
+}
+
+static int
+nandfs_write(struct vop_write_args *ap)
+{
+ struct nandfs_device *fsdev;
+ struct nandfs_node *node;
+ struct vnode *vp;
+ struct uio *uio;
+ struct buf *bp;
+ uint64_t file_size, vblk;
+ uint32_t blocksize;
+ ssize_t towrite, off;
+ daddr_t lbn;
+ ssize_t resid;
+ int error, ioflag, modified;
+
+ vp = ap->a_vp;
+ uio = ap->a_uio;
+ ioflag = ap->a_ioflag;
+ node = VTON(vp);
+ fsdev = node->nn_nandfsdev;
+
+ if (nandfs_fs_full(fsdev))
+ return (ENOSPC);
+
+ DPRINTF(WRITE, ("nandfs_write called %#zx at %#jx\n",
+ uio->uio_resid, (uintmax_t)uio->uio_offset));
+
+ if (uio->uio_offset < 0)
+ return (EINVAL);
+ if (uio->uio_resid == 0)
+ return (0);
+
+ blocksize = fsdev->nd_blocksize;
+ file_size = node->nn_inode.i_size;
+
+ switch (vp->v_type) {
+ case VREG:
+ if (ioflag & IO_APPEND)
+ uio->uio_offset = file_size;
+ break;
+ case VDIR:
+ return (EISDIR);
+ case VLNK:
+ break;
+ default:
+ panic("%s: bad file type vp: %p", __func__, vp);
+ }
+
+ /* If explicitly asked to append, uio_offset can be wrong? */
+ if (ioflag & IO_APPEND)
+ uio->uio_offset = file_size;
+
+ resid = uio->uio_resid;
+ modified = error = 0;
+
+ while (uio->uio_resid) {
+ lbn = uio->uio_offset / blocksize;
+ off = uio->uio_offset & (blocksize - 1);
+
+ towrite = omin(uio->uio_resid, blocksize - off);
+
+ DPRINTF(WRITE, ("%s: lbn: 0x%jd toread: 0x%zx (0x%x)\n",
+ __func__, (uintmax_t)lbn, towrite, blocksize));
+
+ error = nandfs_bmap_lookup(node, lbn, &vblk);
+ if (error)
+ break;
+
+ DPRINTF(WRITE, ("%s: lbn: 0x%jd toread: 0x%zx (0x%x) "
+ "vblk=%jx\n", __func__, (uintmax_t)lbn, towrite, blocksize,
+ vblk));
+
+ if (vblk != 0)
+ error = nandfs_bread(node, lbn, NOCRED, 0, &bp);
+ else
+ error = nandfs_bcreate(node, lbn, NOCRED, 0, &bp);
+
+ DPRINTF(WRITE, ("%s: vp %p bread bp %p lbn %#jx\n", __func__,
+ vp, bp, (uintmax_t)lbn));
+ if (error) {
+ if (bp)
+ brelse(bp);
+ break;
+ }
+
+ error = uiomove((char *)bp->b_data + off, (int)towrite, uio);
+ if (error)
+ break;
+
+ error = nandfs_dirty_buf(bp, 0);
+ if (error)
+ break;
+
+ modified++;
+ }
+
+ /* XXX proper handling when only part of file was properly written */
+ if (modified) {
+ if (resid > uio->uio_resid && ap->a_cred &&
+ ap->a_cred->cr_uid != 0)
+ node->nn_inode.i_mode &= ~(ISUID | ISGID);
+
+ if (file_size < uio->uio_offset + uio->uio_resid) {
+ node->nn_inode.i_size = uio->uio_offset +
+ uio->uio_resid;
+ node->nn_flags |= IN_CHANGE | IN_UPDATE;
+ vnode_pager_setsize(vp, uio->uio_offset +
+ uio->uio_resid);
+ nandfs_itimes(vp);
+ }
+ }
+
+ DPRINTF(WRITE, ("%s: return:%d\n", __func__, error));
+
+ return (error);
+}
+
+static int
+nandfs_lookup(struct vop_cachedlookup_args *ap)
+{
+ struct vnode *dvp, **vpp;
+ struct componentname *cnp;
+ struct ucred *cred;
+ struct thread *td;
+ struct nandfs_node *dir_node, *node;
+ struct nandfsmount *nmp;
+ uint64_t ino, off;
+ const char *name;
+ int namelen, nameiop, islastcn, mounted_ro;
+ int error, found;
+
+ DPRINTF(VNCALL, ("%s\n", __func__));
+
+ dvp = ap->a_dvp;
+ vpp = ap->a_vpp;
+ *vpp = NULL;
+
+ cnp = ap->a_cnp;
+ cred = cnp->cn_cred;
+ td = cnp->cn_thread;
+
+ dir_node = VTON(dvp);
+ nmp = dir_node->nn_nmp;
+
+ /* Simplify/clarification flags */
+ nameiop = cnp->cn_nameiop;
+ islastcn = cnp->cn_flags & ISLASTCN;
+ mounted_ro = dvp->v_mount->mnt_flag & MNT_RDONLY;
+
+ /*
+ * If requesting a modify on the last path element on a read-only
+ * filingsystem, reject lookup;
+ */
+ if (islastcn && mounted_ro && (nameiop == DELETE || nameiop == RENAME))
+ return (EROFS);
+
+ if (dir_node->nn_inode.i_links_count == 0)
+ return (ENOENT);
+
+ /*
+ * Obviously, the file is not (anymore) in the namecache, we have to
+ * search for it. There are three basic cases: '.', '..' and others.
+ *
+ * Following the guidelines of VOP_LOOKUP manpage and tmpfs.
+ */
+ error = 0;
+ if ((cnp->cn_namelen == 1) && (cnp->cn_nameptr[0] == '.')) {
+ DPRINTF(LOOKUP, ("\tlookup '.'\n"));
+ /* Special case 1 '.' */
+ VREF(dvp);
+ *vpp = dvp;
+ /* Done */
+ } else if (cnp->cn_flags & ISDOTDOT) {
+ /* Special case 2 '..' */
+ DPRINTF(LOOKUP, ("\tlookup '..'\n"));
+
+ /* Get our node */
+ name = "..";
+ namelen = 2;
+ error = nandfs_lookup_name_in_dir(dvp, name, namelen, &ino,
+ &found, &off);
+ if (error)
+ goto out;
+ if (!found)
+ error = ENOENT;
+
+ /* First unlock parent */
+ VOP_UNLOCK(dvp, 0);
+
+ if (error == 0) {
+ DPRINTF(LOOKUP, ("\tfound '..'\n"));
+ /* Try to create/reuse the node */
+ error = nandfs_get_node(nmp, ino, &node);
+
+ if (!error) {
+ DPRINTF(LOOKUP,
+ ("\tnode retrieved/created OK\n"));
+ *vpp = NTOV(node);
+ }
+ }
+
+ /* Try to relock parent */
+ vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY);
+ } else {
+ DPRINTF(LOOKUP, ("\tlookup file\n"));
+ /* All other files */
+ /* Look up filename in the directory returning its inode */
+ name = cnp->cn_nameptr;
+ namelen = cnp->cn_namelen;
+ error = nandfs_lookup_name_in_dir(dvp, name, namelen,
+ &ino, &found, &off);
+ if (error)
+ goto out;
+ if (!found) {
+ DPRINTF(LOOKUP, ("\tNOT found\n"));
+ /*
+ * UGH, didn't find name. If we're creating or
+ * renaming on the last name this is OK and we ought
+ * to return EJUSTRETURN if its allowed to be created.
+ */
+ error = ENOENT;
+ if ((nameiop == CREATE || nameiop == RENAME) &&
+ islastcn) {
+ error = VOP_ACCESS(dvp, VWRITE, cred,
+ td);
+ if (!error) {
+ /* keep the component name */
+ cnp->cn_flags |= SAVENAME;
+ error = EJUSTRETURN;
+ }
+ }
+ /* Done */
+ } else {
+ if (ino == NANDFS_WHT_INO)
+ cnp->cn_flags |= ISWHITEOUT;
+
+ if ((cnp->cn_flags & ISWHITEOUT) &&
+ (nameiop == LOOKUP))
+ return (ENOENT);
+
+ if ((nameiop == DELETE) && islastcn) {
+ if ((cnp->cn_flags & ISWHITEOUT) &&
+ (cnp->cn_flags & DOWHITEOUT)) {
+ cnp->cn_flags |= SAVENAME;
+ dir_node->nn_diroff = off;
+ return (EJUSTRETURN);
+ }
+
+ error = VOP_ACCESS(dvp, VWRITE, cred,
+ cnp->cn_thread);
+ if (error)
+ return (error);
+
+ /* Try to create/reuse the node */
+ error = nandfs_get_node(nmp, ino, &node);
+ if (!error) {
+ *vpp = NTOV(node);
+ node->nn_diroff = off;
+ }
+
+ if ((dir_node->nn_inode.i_mode & ISVTX) &&
+ cred->cr_uid != 0 &&
+ cred->cr_uid != dir_node->nn_inode.i_uid &&
+ node->nn_inode.i_uid != cred->cr_uid) {
+ vput(*vpp);
+ *vpp = NULL;
+ return (EPERM);
+ }
+ } else if ((nameiop == RENAME) && islastcn) {
+ error = VOP_ACCESS(dvp, VWRITE, cred,
+ cnp->cn_thread);
+ if (error)
+ return (error);
+
+ /* Try to create/reuse the node */
+ error = nandfs_get_node(nmp, ino, &node);
+ if (!error) {
+ *vpp = NTOV(node);
+ node->nn_diroff = off;
+ }
+ } else {
+ /* Try to create/reuse the node */
+ error = nandfs_get_node(nmp, ino, &node);
+ if (!error) {
+ *vpp = NTOV(node);
+ node->nn_diroff = off;
+ }
+ }
+ }
+ }
+
+out:
+ /*
+ * Store result in the cache if requested. If we are creating a file,
+ * the file might not be found and thus putting it into the namecache
+ * might be seen as negative caching.
+ */
+ if ((cnp->cn_flags & MAKEENTRY) && nameiop != CREATE)
+ cache_enter(dvp, *vpp, cnp);
+
+ return (error);
+
+}
+
+static int
+nandfs_getattr(struct vop_getattr_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct vattr *vap = ap->a_vap;
+ struct nandfs_node *node = VTON(vp);
+ struct nandfs_inode *inode = &node->nn_inode;
+
+ DPRINTF(VNCALL, ("%s: vp: %p\n", __func__, vp));
+ nandfs_itimes(vp);
+
+ /* Basic info */
+ VATTR_NULL(vap);
+ vap->va_atime.tv_sec = inode->i_mtime;
+ vap->va_atime.tv_nsec = inode->i_mtime_nsec;
+ vap->va_mtime.tv_sec = inode->i_mtime;
+ vap->va_mtime.tv_nsec = inode->i_mtime_nsec;
+ vap->va_ctime.tv_sec = inode->i_ctime;
+ vap->va_ctime.tv_nsec = inode->i_ctime_nsec;
+ vap->va_type = IFTOVT(inode->i_mode);
+ vap->va_mode = inode->i_mode & ~S_IFMT;
+ vap->va_nlink = inode->i_links_count;
+ vap->va_uid = inode->i_uid;
+ vap->va_gid = inode->i_gid;
+ vap->va_rdev = inode->i_special;
+ vap->va_fsid = vp->v_mount->mnt_stat.f_fsid.val[0];
+ vap->va_fileid = node->nn_ino;
+ vap->va_size = inode->i_size;
+ vap->va_blocksize = node->nn_nandfsdev->nd_blocksize;
+ vap->va_gen = 0;
+ vap->va_flags = inode->i_flags;
+ vap->va_bytes = inode->i_blocks * vap->va_blocksize;
+ vap->va_filerev = 0;
+ vap->va_vaflags = 0;
+
+ return (0);
+}
+
+static int
+nandfs_vtruncbuf(struct vnode *vp, uint64_t nblks)
+{
+ struct nandfs_device *nffsdev;
+ struct bufobj *bo;
+ struct buf *bp, *nbp;
+
+ bo = &vp->v_bufobj;
+ nffsdev = VTON(vp)->nn_nandfsdev;
+
+ ASSERT_VOP_LOCKED(vp, "nandfs_truncate");
+restart:
+ BO_LOCK(bo);
+restart_locked:
+ TAILQ_FOREACH_SAFE(bp, &bo->bo_clean.bv_hd, b_bobufs, nbp) {
+ if (bp->b_lblkno < nblks)
+ continue;
+ if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT, NULL))
+ goto restart_locked;
+
+ bremfree(bp);
+ bp->b_flags |= (B_INVAL | B_RELBUF);
+ bp->b_flags &= ~(B_ASYNC | B_MANAGED);
+ BO_UNLOCK(bo);
+ brelse(bp);
+ BO_LOCK(bo);
+ }
+
+ TAILQ_FOREACH_SAFE(bp, &bo->bo_dirty.bv_hd, b_bobufs, nbp) {
+ if (bp->b_lblkno < nblks)
+ continue;
+ if (BUF_LOCK(bp,
+ LK_EXCLUSIVE | LK_SLEEPFAIL | LK_INTERLOCK,
+ BO_MTX(bo)) == ENOLCK)
+ goto restart;
+ bp->b_flags |= (B_INVAL | B_RELBUF);
+ bp->b_flags &= ~(B_ASYNC | B_MANAGED);
+ brelse(bp);
+ nandfs_dirty_bufs_decrement(nffsdev);
+ BO_LOCK(bo);
+ }
+
+ BO_UNLOCK(bo);
+
+ return (0);
+}
+
+static int
+nandfs_truncate(struct vnode *vp, uint64_t newsize)
+{
+ struct nandfs_device *nffsdev;
+ struct nandfs_node *node;
+ struct nandfs_inode *inode;
+ struct buf *bp = NULL;
+ uint64_t oblks, nblks, vblk, size, rest;
+ int error;
+
+ node = VTON(vp);
+ nffsdev = node->nn_nandfsdev;
+ inode = &node->nn_inode;
+
+ /* Calculate end of file */
+ size = inode->i_size;
+
+ if (newsize == size) {
+ node->nn_flags |= IN_CHANGE | IN_UPDATE;
+ nandfs_itimes(vp);
+ return (0);
+ }
+
+ if (newsize > size) {
+ inode->i_size = newsize;
+ vnode_pager_setsize(vp, newsize);
+ node->nn_flags |= IN_CHANGE | IN_UPDATE;
+ nandfs_itimes(vp);
+ return (0);
+ }
+
+ nblks = howmany(newsize, nffsdev->nd_blocksize);
+ oblks = howmany(size, nffsdev->nd_blocksize);
+ rest = newsize % nffsdev->nd_blocksize;
+
+ if (rest) {
+ error = nandfs_bmap_lookup(node, nblks - 1, &vblk);
+ if (error)
+ return (error);
+
+ if (vblk != 0)
+ error = nandfs_bread(node, nblks - 1, NOCRED, 0, &bp);
+ else
+ error = nandfs_bcreate(node, nblks - 1, NOCRED, 0, &bp);
+
+ if (error) {
+ if (bp)
+ brelse(bp);
+ return (error);
+ }
+
+ bzero((char *)bp->b_data + rest,
+ (u_int)(nffsdev->nd_blocksize - rest));
+ error = nandfs_dirty_buf(bp, 0);
+ if (error)
+ return (error);
+ }
+
+ DPRINTF(VNCALL, ("%s: vp %p oblks %jx nblks %jx\n", __func__, vp, oblks,
+ nblks));
+
+ error = nandfs_bmap_truncate_mapping(node, oblks - 1, nblks - 1);
+ if (error) {
+ if (bp)
+ nandfs_undirty_buf(bp);
+ return (error);
+ }
+
+ error = nandfs_vtruncbuf(vp, nblks);
+ if (error) {
+ if (bp)
+ nandfs_undirty_buf(bp);
+ return (error);
+ }
+
+ inode->i_size = newsize;
+ vnode_pager_setsize(vp, newsize);
+ node->nn_flags |= IN_CHANGE | IN_UPDATE;
+ nandfs_itimes(vp);
+
+ return (error);
+}
+
+static void
+nandfs_itimes_locked(struct vnode *vp)
+{
+ struct nandfs_node *node;
+ struct nandfs_inode *inode;
+ struct timespec ts;
+
+ ASSERT_VI_LOCKED(vp, __func__);
+
+ node = VTON(vp);
+ inode = &node->nn_inode;
+
+ if ((node->nn_flags & (IN_ACCESS | IN_CHANGE | IN_UPDATE)) == 0)
+ return;
+
+ if (((vp->v_mount->mnt_kern_flag &
+ (MNTK_SUSPENDED | MNTK_SUSPEND)) == 0) ||
+ (node->nn_flags & (IN_CHANGE | IN_UPDATE)))
+ node->nn_flags |= IN_MODIFIED;
+
+ vfs_timestamp(&ts);
+ if (node->nn_flags & IN_UPDATE) {
+ inode->i_mtime = ts.tv_sec;
+ inode->i_mtime_nsec = ts.tv_nsec;
+ }
+ if (node->nn_flags & IN_CHANGE) {
+ inode->i_ctime = ts.tv_sec;
+ inode->i_ctime_nsec = ts.tv_nsec;
+ }
+
+ node->nn_flags &= ~(IN_ACCESS | IN_CHANGE | IN_UPDATE);
+}
+
+void
+nandfs_itimes(struct vnode *vp)
+{
+
+ VI_LOCK(vp);
+ nandfs_itimes_locked(vp);
+ VI_UNLOCK(vp);
+}
+
+static int
+nandfs_chmod(struct vnode *vp, int mode, struct ucred *cred, struct thread *td)
+{
+ struct nandfs_node *node = VTON(vp);
+ struct nandfs_inode *inode = &node->nn_inode;
+ uint16_t nmode;
+ int error = 0;
+
+ DPRINTF(VNCALL, ("%s: vp %p, mode %x, cred %p, td %p\n", __func__, vp,
+ mode, cred, td));
+ /*
+ * To modify the permissions on a file, must possess VADMIN
+ * for that file.
+ */
+ if ((error = VOP_ACCESS(vp, VADMIN, cred, td)))
+ return (error);
+
+ /*
+ * Privileged processes may set the sticky bit on non-directories,
+ * as well as set the setgid bit on a file with a group that the
+ * process is not a member of. Both of these are allowed in
+ * jail(8).
+ */
+ if (vp->v_type != VDIR && (mode & S_ISTXT)) {
+ if (priv_check_cred(cred, PRIV_VFS_STICKYFILE, 0))
+ return (EFTYPE);
+ }
+ if (!groupmember(inode->i_gid, cred) && (mode & ISGID)) {
+ error = priv_check_cred(cred, PRIV_VFS_SETGID, 0);
+ if (error)
+ return (error);
+ }
+
+ /*
+ * Deny setting setuid if we are not the file owner.
+ */
+ if ((mode & ISUID) && inode->i_uid != cred->cr_uid) {
+ error = priv_check_cred(cred, PRIV_VFS_ADMIN, 0);
+ if (error)
+ return (error);
+ }
+
+ nmode = inode->i_mode;
+ nmode &= ~ALLPERMS;
+ nmode |= (mode & ALLPERMS);
+ inode->i_mode = nmode;
+ node->nn_flags |= IN_CHANGE;
+
+ DPRINTF(VNCALL, ("%s: to mode %x\n", __func__, nmode));
+
+ return (error);
+}
+
+static int
+nandfs_chown(struct vnode *vp, uid_t uid, gid_t gid, struct ucred *cred,
+ struct thread *td)
+{
+ struct nandfs_node *node = VTON(vp);
+ struct nandfs_inode *inode = &node->nn_inode;
+ uid_t ouid;
+ gid_t ogid;
+ int error = 0;
+
+ if (uid == (uid_t)VNOVAL)
+ uid = inode->i_uid;
+ if (gid == (gid_t)VNOVAL)
+ gid = inode->i_gid;
+ /*
+ * To modify the ownership of a file, must possess VADMIN for that
+ * file.
+ */
+ if ((error = VOP_ACCESSX(vp, VWRITE_OWNER, cred, td)))
+ return (error);
+ /*
+ * To change the owner of a file, or change the group of a file to a
+ * group of which we are not a member, the caller must have
+ * privilege.
+ */
+ if (((uid != inode->i_uid && uid != cred->cr_uid) ||
+ (gid != inode->i_gid && !groupmember(gid, cred))) &&
+ (error = priv_check_cred(cred, PRIV_VFS_CHOWN, 0)))
+ return (error);
+ ogid = inode->i_gid;
+ ouid = inode->i_uid;
+
+ inode->i_gid = gid;
+ inode->i_uid = uid;
+
+ node->nn_flags |= IN_CHANGE;
+ if ((inode->i_mode & (ISUID | ISGID)) &&
+ (ouid != uid || ogid != gid)) {
+ if (priv_check_cred(cred, PRIV_VFS_RETAINSUGID, 0)) {
+ inode->i_mode &= ~(ISUID | ISGID);
+ }
+ }
+ DPRINTF(VNCALL, ("%s: vp %p, cred %p, td %p - ret OK\n", __func__, vp,
+ cred, td));
+ return (0);
+}
+
+static int
+nandfs_setattr(struct vop_setattr_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *node = VTON(vp);
+ struct nandfs_inode *inode = &node->nn_inode;
+ struct vattr *vap = ap->a_vap;
+ struct ucred *cred = ap->a_cred;
+ struct thread *td = curthread;
+ uint32_t flags;
+ int error = 0;
+
+ if ((vap->va_type != VNON) || (vap->va_nlink != VNOVAL) ||
+ (vap->va_fsid != VNOVAL) || (vap->va_fileid != VNOVAL) ||
+ (vap->va_blocksize != VNOVAL) || (vap->va_rdev != VNOVAL) ||
+ (vap->va_bytes != VNOVAL) || (vap->va_gen != VNOVAL)) {
+ DPRINTF(VNCALL, ("%s: unsettable attribute\n", __func__));
+ return (EINVAL);
+ }
+
+ if (vap->va_flags != VNOVAL) {
+ DPRINTF(VNCALL, ("%s: vp:%p td:%p flags:%lx\n", __func__, vp,
+ td, vap->va_flags));
+
+ if (vp->v_mount->mnt_flag & MNT_RDONLY)
+ return (EROFS);
+ /*
+ * Callers may only modify the file flags on objects they
+ * have VADMIN rights for.
+ */
+ if ((error = VOP_ACCESS(vp, VADMIN, cred, td)))
+ return (error);
+ /*
+ * Unprivileged processes are not permitted to unset system
+ * flags, or modify flags if any system flags are set.
+ * Privileged non-jail processes may not modify system flags
+ * if securelevel > 0 and any existing system flags are set.
+ * Privileged jail processes behave like privileged non-jail
+ * processes if the security.jail.chflags_allowed sysctl is
+ * is non-zero; otherwise, they behave like unprivileged
+ * processes.
+ */
+
+ flags = inode->i_flags;
+ if (!priv_check_cred(cred, PRIV_VFS_SYSFLAGS, 0)) {
+ if (flags & (SF_NOUNLINK | SF_IMMUTABLE | SF_APPEND)) {
+ error = securelevel_gt(cred, 0);
+ if (error)
+ return (error);
+ }
+ /* Snapshot flag cannot be set or cleared */
+ if (((vap->va_flags & SF_SNAPSHOT) != 0 &&
+ (flags & SF_SNAPSHOT) == 0) ||
+ ((vap->va_flags & SF_SNAPSHOT) == 0 &&
+ (flags & SF_SNAPSHOT) != 0))
+ return (EPERM);
+
+ inode->i_flags = vap->va_flags;
+ } else {
+ if (flags & (SF_NOUNLINK | SF_IMMUTABLE | SF_APPEND) ||
+ (vap->va_flags & UF_SETTABLE) != vap->va_flags)
+ return (EPERM);
+
+ flags &= SF_SETTABLE;
+ flags |= (vap->va_flags & UF_SETTABLE);
+ inode->i_flags = flags;
+ }
+ node->nn_flags |= IN_CHANGE;
+ if (vap->va_flags & (IMMUTABLE | APPEND))
+ return (0);
+ }
+ if (inode->i_flags & (IMMUTABLE | APPEND))
+ return (EPERM);
+
+ if (vap->va_size != (u_quad_t)VNOVAL) {
+ DPRINTF(VNCALL, ("%s: vp:%p td:%p size:%jx\n", __func__, vp, td,
+ (uintmax_t)vap->va_size));
+
+ switch (vp->v_type) {
+ case VDIR:
+ return (EISDIR);
+ case VLNK:
+ case VREG:
+ if (vp->v_mount->mnt_flag & MNT_RDONLY)
+ return (EROFS);
+ if ((inode->i_flags & SF_SNAPSHOT) != 0)
+ return (EPERM);
+ break;
+ default:
+ return (0);
+ }
+
+ if (vap->va_size > node->nn_nandfsdev->nd_maxfilesize)
+ return (EFBIG);
+
+ KASSERT((vp->v_type == VREG), ("Set size %d", vp->v_type));
+ nandfs_truncate(vp, vap->va_size);
+ node->nn_flags |= IN_CHANGE;
+
+ return (0);
+ }
+
+ if (vap->va_uid != (uid_t)VNOVAL || vap->va_gid != (gid_t)VNOVAL) {
+ if (vp->v_mount->mnt_flag & MNT_RDONLY)
+ return (EROFS);
+ DPRINTF(VNCALL, ("%s: vp:%p td:%p uid/gid %x/%x\n", __func__,
+ vp, td, vap->va_uid, vap->va_gid));
+ error = nandfs_chown(vp, vap->va_uid, vap->va_gid, cred, td);
+ if (error)
+ return (error);
+ }
+
+ if (vap->va_mode != (mode_t)VNOVAL) {
+ if (vp->v_mount->mnt_flag & MNT_RDONLY)
+ return (EROFS);
+ DPRINTF(VNCALL, ("%s: vp:%p td:%p mode %x\n", __func__, vp, td,
+ vap->va_mode));
+
+ error = nandfs_chmod(vp, (int)vap->va_mode, cred, td);
+ if (error)
+ return (error);
+ }
+ if (vap->va_atime.tv_sec != VNOVAL ||
+ vap->va_mtime.tv_sec != VNOVAL ||
+ vap->va_birthtime.tv_sec != VNOVAL) {
+ DPRINTF(VNCALL, ("%s: vp:%p td:%p time a/m/b %jx/%jx/%jx\n",
+ __func__, vp, td, (uintmax_t)vap->va_atime.tv_sec,
+ (uintmax_t)vap->va_mtime.tv_sec,
+ (uintmax_t)vap->va_birthtime.tv_sec));
+
+ if (vap->va_atime.tv_sec != VNOVAL)
+ node->nn_flags |= IN_ACCESS;
+ if (vap->va_mtime.tv_sec != VNOVAL)
+ node->nn_flags |= IN_CHANGE | IN_UPDATE;
+ if (vap->va_birthtime.tv_sec != VNOVAL)
+ node->nn_flags |= IN_MODIFIED;
+ nandfs_itimes(vp);
+ return (0);
+ }
+
+ return (0);
+}
+
+static int
+nandfs_open(struct vop_open_args *ap)
+{
+ struct nandfs_node *node = VTON(ap->a_vp);
+ uint64_t filesize;
+
+ DPRINTF(VNCALL, ("nandfs_open called ap->a_mode %x\n", ap->a_mode));
+
+ if (ap->a_vp->v_type == VCHR || ap->a_vp->v_type == VBLK)
+ return (EOPNOTSUPP);
+
+ if ((node->nn_inode.i_flags & APPEND) &&
+ (ap->a_mode & (FWRITE | O_APPEND)) == FWRITE)
+ return (EPERM);
+
+ filesize = node->nn_inode.i_size;
+ vnode_create_vobject(ap->a_vp, filesize, ap->a_td);
+
+ return (0);
+}
+
+static int
+nandfs_close(struct vop_close_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *node = VTON(vp);
+
+ DPRINTF(VNCALL, ("%s: vp %p node %p\n", __func__, vp, node));
+
+ mtx_lock(&vp->v_interlock);
+ if (vp->v_usecount > 1)
+ nandfs_itimes_locked(vp);
+ mtx_unlock(&vp->v_interlock);
+
+ return (0);
+}
+
+static int
+nandfs_check_possible(struct vnode *vp, struct vattr *vap, mode_t mode)
+{
+
+ /* Check if we are allowed to write */
+ switch (vap->va_type) {
+ case VDIR:
+ case VLNK:
+ case VREG:
+ /*
+ * Normal nodes: check if we're on a read-only mounted
+ * filingsystem and bomb out if we're trying to write.
+ */
+ if ((mode & VWRITE) && (vp->v_mount->mnt_flag & MNT_RDONLY))
+ return (EROFS);
+ break;
+ case VBLK:
+ case VCHR:
+ case VSOCK:
+ case VFIFO:
+ /*
+ * Special nodes: even on read-only mounted filingsystems
+ * these are allowed to be written to if permissions allow.
+ */
+ break;
+ default:
+ /* No idea what this is */
+ return (EINVAL);
+ }
+
+ /* Noone may write immutable files */
+ if ((mode & VWRITE) && (VTON(vp)->nn_inode.i_flags & IMMUTABLE))
+ return (EPERM);
+
+ return (0);
+}
+
+static int
+nandfs_check_permitted(struct vnode *vp, struct vattr *vap, mode_t mode,
+ struct ucred *cred)
+{
+
+ return (vaccess(vp->v_type, vap->va_mode, vap->va_uid, vap->va_gid, mode,
+ cred, NULL));
+}
+
+static int
+nandfs_advlock(struct vop_advlock_args *ap)
+{
+ struct nandfs_node *nvp;
+ quad_t size;
+
+ nvp = VTON(ap->a_vp);
+ size = nvp->nn_inode.i_size;
+ return (lf_advlock(ap, &(nvp->nn_lockf), size));
+}
+
+static int
+nandfs_access(struct vop_access_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ accmode_t accmode = ap->a_accmode;
+ struct ucred *cred = ap->a_cred;
+ struct vattr vap;
+ int error;
+
+ DPRINTF(VNCALL, ("%s: vp:%p mode: %x\n", __func__, vp, accmode));
+
+ error = VOP_GETATTR(vp, &vap, NULL);
+ if (error)
+ return (error);
+
+ error = nandfs_check_possible(vp, &vap, accmode);
+ if (error) {
+ return (error);
+ }
+
+ error = nandfs_check_permitted(vp, &vap, accmode, cred);
+
+ return (error);
+}
+
+static int
+nandfs_print(struct vop_print_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *nvp = VTON(vp);
+
+ printf("\tvp=%p, nandfs_node=%p\n", vp, nvp);
+ printf("nandfs inode %#jx\n", (uintmax_t)nvp->nn_ino);
+ printf("flags = 0x%b\n", (u_int)nvp->nn_flags, PRINT_NODE_FLAGS);
+
+ return (0);
+}
+
+static void
+nandfs_read_filebuf(struct nandfs_node *node, struct buf *bp)
+{
+ struct nandfs_device *nandfsdev = node->nn_nandfsdev;
+ struct buf *nbp;
+ nandfs_daddr_t vblk, pblk;
+ nandfs_lbn_t from;
+ uint32_t blocksize;
+ int error = 0;
+ int blk2dev = nandfsdev->nd_blocksize / DEV_BSIZE;
+
+ /*
+ * Translate all the block sectors into a series of buffers to read
+ * asynchronously from the nandfs device. Note that this lookup may
+ * induce readin's too.
+ */
+
+ blocksize = nandfsdev->nd_blocksize;
+ if (bp->b_bcount / blocksize != 1)
+ panic("invalid b_count in bp %p\n", bp);
+
+ from = bp->b_blkno;
+
+ DPRINTF(READ, ("\tread in from inode %#jx blkno %#jx"
+ " count %#lx\n", (uintmax_t)node->nn_ino, from,
+ bp->b_bcount));
+
+ /* Get virtual block numbers for the vnode's buffer span */
+ error = nandfs_bmap_lookup(node, from, &vblk);
+ if (error) {
+ bp->b_error = EINVAL;
+ bp->b_ioflags |= BIO_ERROR;
+ bufdone(bp);
+ return;
+ }
+
+ /* Translate virtual block numbers to physical block numbers */
+ error = nandfs_vtop(node, vblk, &pblk);
+ if (error) {
+ bp->b_error = EINVAL;
+ bp->b_ioflags |= BIO_ERROR;
+ bufdone(bp);
+ return;
+ }
+
+ /* Issue translated blocks */
+ bp->b_resid = bp->b_bcount;
+
+ /* Note virtual block 0 marks not mapped */
+ if (vblk == 0) {
+ vfs_bio_clrbuf(bp);
+ bufdone(bp);
+ return;
+ }
+
+ nbp = bp;
+ nbp->b_blkno = pblk * blk2dev;
+ bp->b_iooffset = dbtob(nbp->b_blkno);
+ MPASS(bp->b_iooffset >= 0);
+ BO_STRATEGY(&nandfsdev->nd_devvp->v_bufobj, nbp);
+ nandfs_vblk_set(bp, vblk);
+ DPRINTF(READ, ("read_filebuf : ino %#jx blk %#jx -> "
+ "%#jx -> %#jx [bp %p]\n", (uintmax_t)node->nn_ino,
+ (uintmax_t)(from), (uintmax_t)vblk,
+ (uintmax_t)pblk, nbp));
+}
+
+static void
+nandfs_write_filebuf(struct nandfs_node *node, struct buf *bp)
+{
+ struct nandfs_device *nandfsdev = node->nn_nandfsdev;
+
+ bp->b_iooffset = dbtob(bp->b_blkno);
+ MPASS(bp->b_iooffset >= 0);
+ BO_STRATEGY(&nandfsdev->nd_devvp->v_bufobj, bp);
+}
+
+static int
+nandfs_strategy(struct vop_strategy_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct buf *bp = ap->a_bp;
+ struct nandfs_node *node = VTON(vp);
+
+
+ /* check if we ought to be here */
+ KASSERT((vp->v_type != VBLK && vp->v_type != VCHR),
+ ("nandfs_strategy on type %d", vp->v_type));
+
+ /* Translate if needed and pass on */
+ if (bp->b_iocmd == BIO_READ) {
+ nandfs_read_filebuf(node, bp);
+ return (0);
+ }
+
+ /* Send to segment collector */
+ nandfs_write_filebuf(node, bp);
+ return (0);
+}
+
+static int
+nandfs_readdir(struct vop_readdir_args *ap)
+{
+ struct uio *uio = ap->a_uio;
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *node = VTON(vp);
+ struct nandfs_dir_entry *ndirent;
+ struct dirent dirent;
+ struct buf *bp;
+ uint64_t file_size, diroffset, transoffset, blkoff;
+ uint64_t blocknr;
+ uint32_t blocksize = node->nn_nandfsdev->nd_blocksize;
+ uint8_t *pos, name_len;
+ int error;
+
+ DPRINTF(READDIR, ("nandfs_readdir called\n"));
+
+ if (vp->v_type != VDIR)
+ return (ENOTDIR);
+
+ file_size = node->nn_inode.i_size;
+ DPRINTF(READDIR, ("nandfs_readdir filesize %jd resid %zd\n",
+ (uintmax_t)file_size, uio->uio_resid ));
+
+ /* We are called just as long as we keep on pushing data in */
+ error = 0;
+ if ((uio->uio_offset < file_size) &&
+ (uio->uio_resid >= sizeof(struct dirent))) {
+ diroffset = uio->uio_offset;
+ transoffset = diroffset;
+
+ blocknr = diroffset / blocksize;
+ blkoff = diroffset % blocksize;
+ error = nandfs_bread(node, blocknr, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (EIO);
+ }
+ while (diroffset < file_size) {
+ DPRINTF(READDIR, ("readdir : offset = %"PRIu64"\n",
+ diroffset));
+ if (blkoff >= blocksize) {
+ blkoff = 0; blocknr++;
+ brelse(bp);
+ error = nandfs_bread(node, blocknr, NOCRED, 0,
+ &bp);
+ if (error) {
+ brelse(bp);
+ return (EIO);
+ }
+ }
+
+ /* Read in one dirent */
+ pos = (uint8_t *)bp->b_data + blkoff;
+ ndirent = (struct nandfs_dir_entry *)pos;
+
+ name_len = ndirent->name_len;
+ memset(&dirent, 0, sizeof(struct dirent));
+ dirent.d_fileno = ndirent->inode;
+ if (dirent.d_fileno) {
+ dirent.d_type = ndirent->file_type;
+ dirent.d_namlen = name_len;
+ strncpy(dirent.d_name, ndirent->name, name_len);
+ dirent.d_reclen = GENERIC_DIRSIZ(&dirent);
+ DPRINTF(READDIR, ("copying `%*.*s`\n", name_len,
+ name_len, dirent.d_name));
+ }
+
+ /*
+ * If there isn't enough space in the uio to return a
+ * whole dirent, break off read
+ */
+ if (uio->uio_resid < GENERIC_DIRSIZ(&dirent))
+ break;
+
+ /* Transfer */
+ if (dirent.d_fileno)
+ uiomove(&dirent, GENERIC_DIRSIZ(&dirent), uio);
+
+ /* Advance */
+ diroffset += ndirent->rec_len;
+ blkoff += ndirent->rec_len;
+
+ /* Remember the last entry we transfered */
+ transoffset = diroffset;
+ }
+ brelse(bp);
+
+ /* Pass on last transfered offset */
+ uio->uio_offset = transoffset;
+ }
+
+ if (ap->a_eofflag)
+ *ap->a_eofflag = (uio->uio_offset >= file_size);
+
+ return (error);
+}
+
+static int
+nandfs_dirempty(struct vnode *dvp, uint64_t parentino, struct ucred *cred)
+{
+ struct nandfs_node *dnode = VTON(dvp);
+ struct nandfs_dir_entry *dirent;
+ uint64_t file_size = dnode->nn_inode.i_size;
+ uint64_t blockcount = dnode->nn_inode.i_blocks;
+ uint64_t blocknr;
+ uint32_t blocksize = dnode->nn_nandfsdev->nd_blocksize;
+ uint32_t limit;
+ uint32_t off;
+ uint8_t *pos;
+ struct buf *bp;
+ int error;
+
+ DPRINTF(LOOKUP, ("%s: dvp %p parentino %#jx cred %p\n", __func__, dvp,
+ (uintmax_t)parentino, cred));
+
+ KASSERT((file_size != 0), ("nandfs_dirempty for NULL dir %p", dvp));
+
+ blocknr = 0;
+ while (blocknr < blockcount) {
+ error = nandfs_bread(dnode, blocknr, NOCRED, 0, &bp);
+ if (error) {
+ brelse(bp);
+ return (0);
+ }
+
+ pos = (uint8_t *)bp->b_data;
+ off = 0;
+
+ if (blocknr == (blockcount - 1))
+ limit = file_size % blocksize;
+ else
+ limit = blocksize;
+
+ while (off < limit) {
+ dirent = (struct nandfs_dir_entry *)(pos + off);
+ off += dirent->rec_len;
+
+ if (dirent->inode == 0)
+ continue;
+
+ switch (dirent->name_len) {
+ case 0:
+ break;
+ case 1:
+ if (dirent->name[0] != '.')
+ goto notempty;
+
+ KASSERT(dirent->inode == dnode->nn_ino,
+ (".'s inode does not match dir"));
+ break;
+ case 2:
+ if (dirent->name[0] != '.' &&
+ dirent->name[1] != '.')
+ goto notempty;
+
+ KASSERT(dirent->inode == parentino,
+ ("..'s inode does not match parent"));
+ break;
+ default:
+ goto notempty;
+ }
+ }
+
+ brelse(bp);
+ blocknr++;
+ }
+
+ return (1);
+notempty:
+ brelse(bp);
+ return (0);
+}
+
+static int
+nandfs_link(struct vop_link_args *ap)
+{
+ struct vnode *tdvp = ap->a_tdvp;
+ struct vnode *vp = ap->a_vp;
+ struct componentname *cnp = ap->a_cnp;
+ struct nandfs_node *node = VTON(vp);
+ struct nandfs_inode *inode = &node->nn_inode;
+ int error;
+
+ if (tdvp->v_mount != vp->v_mount)
+ return (EXDEV);
+
+ if (inode->i_links_count >= LINK_MAX)
+ return (EMLINK);
+
+ if (inode->i_flags & (IMMUTABLE | APPEND))
+ return (EPERM);
+
+ /* Update link count */
+ inode->i_links_count++;
+
+ /* Add dir entry */
+ error = nandfs_add_dirent(tdvp, node->nn_ino, cnp->cn_nameptr,
+ cnp->cn_namelen, IFTODT(inode->i_mode));
+ if (error) {
+ inode->i_links_count--;
+ }
+
+ node->nn_flags |= IN_CHANGE;
+ nandfs_itimes(vp);
+ DPRINTF(VNCALL, ("%s: tdvp %p vp %p cnp %p\n",
+ __func__, tdvp, vp, cnp));
+
+ return (0);
+}
+
+static int
+nandfs_create(struct vop_create_args *ap)
+{
+ struct vnode *dvp = ap->a_dvp;
+ struct vnode **vpp = ap->a_vpp;
+ struct componentname *cnp = ap->a_cnp;
+ uint16_t mode = MAKEIMODE(ap->a_vap->va_type, ap->a_vap->va_mode);
+ struct nandfs_node *dir_node = VTON(dvp);
+ struct nandfsmount *nmp = dir_node->nn_nmp;
+ struct nandfs_node *node;
+ int error;
+
+ DPRINTF(VNCALL, ("%s: dvp %p\n", __func__, dvp));
+
+ if (nandfs_fs_full(dir_node->nn_nandfsdev))
+ return (ENOSPC);
+
+ /* Create new vnode/inode */
+ error = nandfs_node_create(nmp, &node, mode);
+ if (error)
+ return (error);
+ node->nn_inode.i_gid = dir_node->nn_inode.i_gid;
+ node->nn_inode.i_uid = cnp->cn_cred->cr_uid;
+
+ /* Add new dir entry */
+ error = nandfs_add_dirent(dvp, node->nn_ino, cnp->cn_nameptr,
+ cnp->cn_namelen, IFTODT(mode));
+ if (error) {
+ if (nandfs_node_destroy(node)) {
+ nandfs_error("%s: error destroying node %p\n",
+ __func__, node);
+ }
+ return (error);
+ }
+ *vpp = NTOV(node);
+
+ DPRINTF(VNCALL, ("created file vp %p nandnode %p ino %jx\n", *vpp, node,
+ (uintmax_t)node->nn_ino));
+ return (0);
+}
+
+static int
+nandfs_remove(struct vop_remove_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct vnode *dvp = ap->a_dvp;
+ struct nandfs_node *node = VTON(vp);
+ struct nandfs_node *dnode = VTON(dvp);
+ struct componentname *cnp = ap->a_cnp;
+
+ DPRINTF(VNCALL, ("%s: dvp %p vp %p nandnode %p ino %#jx link %d\n",
+ __func__, dvp, vp, node, (uintmax_t)node->nn_ino,
+ node->nn_inode.i_links_count));
+
+ if (vp->v_type == VDIR)
+ return (EISDIR);
+
+ /* Files marked as immutable or append-only cannot be deleted. */
+ if ((node->nn_inode.i_flags & (IMMUTABLE | APPEND | NOUNLINK)) ||
+ (dnode->nn_inode.i_flags & APPEND))
+ return (EPERM);
+
+ nandfs_remove_dirent(dvp, node, cnp);
+ node->nn_inode.i_links_count--;
+ node->nn_flags |= IN_CHANGE;
+
+ return (0);
+}
+
+/*
+ * Check if source directory is in the path of the target directory.
+ * Target is supplied locked, source is unlocked.
+ * The target is always vput before returning.
+ */
+static int
+nandfs_checkpath(struct nandfs_node *src, struct nandfs_node *dest,
+ struct ucred *cred)
+{
+ struct vnode *vp;
+ int error, rootino;
+ struct nandfs_dir_entry dirent;
+
+ vp = NTOV(dest);
+ if (src->nn_ino == dest->nn_ino) {
+ error = EEXIST;
+ goto out;
+ }
+ rootino = NANDFS_ROOT_INO;
+ error = 0;
+ if (dest->nn_ino == rootino)
+ goto out;
+
+ for (;;) {
+ if (vp->v_type != VDIR) {
+ error = ENOTDIR;
+ break;
+ }
+
+ error = vn_rdwr(UIO_READ, vp, (caddr_t)&dirent,
+ NANDFS_DIR_REC_LEN(2), (off_t)0, UIO_SYSSPACE,
+ IO_NODELOCKED | IO_NOMACCHECK, cred, NOCRED,
+ NULL, NULL);
+ if (error != 0)
+ break;
+ if (dirent.name_len != 2 ||
+ dirent.name[0] != '.' ||
+ dirent.name[1] != '.') {
+ error = ENOTDIR;
+ break;
+ }
+ if (dirent.inode == src->nn_ino) {
+ error = EINVAL;
+ break;
+ }
+ if (dirent.inode == rootino)
+ break;
+ vput(vp);
+ if ((error = VFS_VGET(vp->v_mount, dirent.inode,
+ LK_EXCLUSIVE, &vp)) != 0) {
+ vp = NULL;
+ break;
+ }
+ }
+
+out:
+ if (error == ENOTDIR)
+ printf("checkpath: .. not a directory\n");
+ if (vp != NULL)
+ vput(vp);
+ return (error);
+}
+
+static int
+nandfs_rename(struct vop_rename_args *ap)
+{
+ struct vnode *tvp = ap->a_tvp;
+ struct vnode *tdvp = ap->a_tdvp;
+ struct vnode *fvp = ap->a_fvp;
+ struct vnode *fdvp = ap->a_fdvp;
+ struct componentname *tcnp = ap->a_tcnp;
+ struct componentname *fcnp = ap->a_fcnp;
+ int doingdirectory = 0, oldparent = 0, newparent = 0;
+ int error = 0;
+
+ struct nandfs_node *fdnode, *fnode, *fnode1;
+ struct nandfs_node *tdnode = VTON(tdvp);
+ struct nandfs_node *tnode;
+
+ uint32_t tdflags, fflags, fdflags;
+ uint16_t mode;
+
+ DPRINTF(VNCALL, ("%s: fdvp:%p fvp:%p tdvp:%p tdp:%p\n", __func__, fdvp,
+ fvp, tdvp, tvp));
+
+ /*
+ * Check for cross-device rename.
+ */
+ if ((fvp->v_mount != tdvp->v_mount) ||
+ (tvp && (fvp->v_mount != tvp->v_mount))) {
+ error = EXDEV;
+abortit:
+ if (tdvp == tvp)
+ vrele(tdvp);
+ else
+ vput(tdvp);
+ if (tvp)
+ vput(tvp);
+ vrele(fdvp);
+ vrele(fvp);
+ return (error);
+ }
+
+ tdflags = tdnode->nn_inode.i_flags;
+ if (tvp &&
+ ((VTON(tvp)->nn_inode.i_flags & (NOUNLINK | IMMUTABLE | APPEND)) ||
+ (tdflags & APPEND))) {
+ error = EPERM;
+ goto abortit;
+ }
+
+ /*
+ * Renaming a file to itself has no effect. The upper layers should
+ * not call us in that case. Temporarily just warn if they do.
+ */
+ if (fvp == tvp) {
+ printf("nandfs_rename: fvp == tvp (can't happen)\n");
+ error = 0;
+ goto abortit;
+ }
+
+ if ((error = vn_lock(fvp, LK_EXCLUSIVE)) != 0)
+ goto abortit;
+
+ fdnode = VTON(fdvp);
+ fnode = VTON(fvp);
+
+ if (fnode->nn_inode.i_links_count >= LINK_MAX) {
+ VOP_UNLOCK(fvp, 0);
+ error = EMLINK;
+ goto abortit;
+ }
+
+ fflags = fnode->nn_inode.i_flags;
+ fdflags = fdnode->nn_inode.i_flags;
+
+ if ((fflags & (NOUNLINK | IMMUTABLE | APPEND)) ||
+ (fdflags & APPEND)) {
+ VOP_UNLOCK(fvp, 0);
+ error = EPERM;
+ goto abortit;
+ }
+
+ mode = fnode->nn_inode.i_mode;
+ if ((mode & S_IFMT) == S_IFDIR) {
+ /*
+ * Avoid ".", "..", and aliases of "." for obvious reasons.
+ */
+
+ if ((fcnp->cn_namelen == 1 && fcnp->cn_nameptr[0] == '.') ||
+ (fdvp == fvp) ||
+ ((fcnp->cn_flags | tcnp->cn_flags) & ISDOTDOT) ||
+ (fnode->nn_flags & IN_RENAME)) {
+ VOP_UNLOCK(fvp, 0);
+ error = EINVAL;
+ goto abortit;
+ }
+ fnode->nn_flags |= IN_RENAME;
+ doingdirectory = 1;
+ DPRINTF(VNCALL, ("%s: doingdirectory dvp %p\n", __func__,
+ tdvp));
+ oldparent = fdnode->nn_ino;
+ }
+
+ vrele(fdvp);
+
+ tnode = NULL;
+ if (tvp)
+ tnode = VTON(tvp);
+
+ /*
+ * Bump link count on fvp while we are moving stuff around. If we
+ * crash before completing the work, the link count may be wrong
+ * but correctable.
+ */
+ fnode->nn_inode.i_links_count++;
+
+ /* Check for in path moving XXX */
+ error = VOP_ACCESS(fvp, VWRITE, tcnp->cn_cred, tcnp->cn_thread);
+ VOP_UNLOCK(fvp, 0);
+ if (oldparent != tdnode->nn_ino)
+ newparent = tdnode->nn_ino;
+ if (doingdirectory && newparent) {
+ if (error) /* write access check above */
+ goto bad;
+ if (tnode != NULL)
+ vput(tvp);
+
+ error = nandfs_checkpath(fnode, tdnode, tcnp->cn_cred);
+ if (error)
+ goto out;
+
+ VREF(tdvp);
+ error = relookup(tdvp, &tvp, tcnp);
+ if (error)
+ goto out;
+ vrele(tdvp);
+ tdnode = VTON(tdvp);
+ tnode = NULL;
+ if (tvp)
+ tnode = VTON(tvp);
+ }
+
+ /*
+ * If the target doesn't exist, link the target to the source and
+ * unlink the source. Otherwise, rewrite the target directory to
+ * reference the source and remove the original entry.
+ */
+
+ if (tvp == NULL) {
+ /*
+ * Account for ".." in new directory.
+ */
+ if (doingdirectory && fdvp != tdvp)
+ tdnode->nn_inode.i_links_count++;
+
+ DPRINTF(VNCALL, ("%s: new entry in dvp:%p\n", __func__, tdvp));
+ /*
+ * Add name in new directory.
+ */
+ error = nandfs_add_dirent(tdvp, fnode->nn_ino, tcnp->cn_nameptr,
+ tcnp->cn_namelen, IFTODT(fnode->nn_inode.i_mode));
+ if (error) {
+ if (doingdirectory && fdvp != tdvp)
+ tdnode->nn_inode.i_links_count--;
+ goto bad;
+ }
+
+ vput(tdvp);
+ } else {
+ /*
+ * If the parent directory is "sticky", then the user must
+ * own the parent directory, or the destination of the rename,
+ * otherwise the destination may not be changed (except by
+ * root). This implements append-only directories.
+ */
+ if ((tdnode->nn_inode.i_mode & S_ISTXT) &&
+ tcnp->cn_cred->cr_uid != 0 &&
+ tcnp->cn_cred->cr_uid != tdnode->nn_inode.i_uid &&
+ tnode->nn_inode.i_uid != tcnp->cn_cred->cr_uid) {
+ error = EPERM;
+ goto bad;
+ }
+ /*
+ * Target must be empty if a directory and have no links
+ * to it. Also, ensure source and target are compatible
+ * (both directories, or both not directories).
+ */
+ mode = tnode->nn_inode.i_mode;
+ if ((mode & S_IFMT) == S_IFDIR) {
+ if (!nandfs_dirempty(tvp, tdnode->nn_ino,
+ tcnp->cn_cred)) {
+ error = ENOTEMPTY;
+ goto bad;
+ }
+ if (!doingdirectory) {
+ error = ENOTDIR;
+ goto bad;
+ }
+ /*
+ * Update name cache since directory is going away.
+ */
+ cache_purge(tdvp);
+ } else if (doingdirectory) {
+ error = EISDIR;
+ goto bad;
+ }
+
+ DPRINTF(VNCALL, ("%s: update entry dvp:%p\n", __func__, tdvp));
+ /*
+ * Change name tcnp in tdvp to point at fvp.
+ */
+ error = nandfs_update_dirent(tdvp, fnode, tnode);
+ if (error)
+ goto bad;
+
+ if (doingdirectory && !newparent)
+ tdnode->nn_inode.i_links_count--;
+
+ vput(tdvp);
+
+ tnode->nn_inode.i_links_count--;
+ vput(tvp);
+ tnode = NULL;
+ }
+
+ /*
+ * Unlink the source.
+ */
+ fcnp->cn_flags &= ~MODMASK;
+ fcnp->cn_flags |= LOCKPARENT | LOCKLEAF;
+ VREF(fdvp);
+ error = relookup(fdvp, &fvp, fcnp);
+ if (error == 0)
+ vrele(fdvp);
+ if (fvp != NULL) {
+ fnode1 = VTON(fvp);
+ fdnode = VTON(fdvp);
+ } else {
+ /*
+ * From name has disappeared.
+ */
+ if (doingdirectory)
+ panic("nandfs_rename: lost dir entry");
+ vrele(ap->a_fvp);
+ return (0);
+ }
+
+ DPRINTF(VNCALL, ("%s: unlink source fnode:%p\n", __func__, fnode));
+
+ /*
+ * Ensure that the directory entry still exists and has not
+ * changed while the new name has been entered. If the source is
+ * a file then the entry may have been unlinked or renamed. In
+ * either case there is no further work to be done. If the source
+ * is a directory then it cannot have been rmdir'ed; its link
+ * count of three would cause a rmdir to fail with ENOTEMPTY.
+ * The IN_RENAME flag ensures that it cannot be moved by another
+ * rename.
+ */
+ if (fnode != fnode1) {
+ if (doingdirectory)
+ panic("nandfs: lost dir entry");
+ } else {
+ /*
+ * If the source is a directory with a
+ * new parent, the link count of the old
+ * parent directory must be decremented
+ * and ".." set to point to the new parent.
+ */
+ if (doingdirectory && newparent) {
+ DPRINTF(VNCALL, ("%s: new parent %#jx -> %#jx\n",
+ __func__, (uintmax_t) oldparent,
+ (uintmax_t) newparent));
+ error = nandfs_update_parent_dir(fvp, newparent);
+ if (!error) {
+ fdnode->nn_inode.i_links_count--;
+ fdnode->nn_flags |= IN_CHANGE;
+ }
+ }
+ error = nandfs_remove_dirent(fdvp, fnode, fcnp);
+ if (!error) {
+ fnode->nn_inode.i_links_count--;
+ fnode->nn_flags |= IN_CHANGE;
+ }
+ fnode->nn_flags &= ~IN_RENAME;
+ }
+ if (fdnode)
+ vput(fdvp);
+ if (fnode)
+ vput(fvp);
+ vrele(ap->a_fvp);
+ return (error);
+
+bad:
+ DPRINTF(VNCALL, ("%s: error:%d\n", __func__, error));
+ if (tnode)
+ vput(NTOV(tnode));
+ vput(NTOV(tdnode));
+out:
+ if (doingdirectory)
+ fnode->nn_flags &= ~IN_RENAME;
+ if (vn_lock(fvp, LK_EXCLUSIVE) == 0) {
+ fnode->nn_inode.i_links_count--;
+ fnode->nn_flags |= IN_CHANGE;
+ fnode->nn_flags &= ~IN_RENAME;
+ vput(fvp);
+ } else
+ vrele(fvp);
+ return (error);
+}
+
+static int
+nandfs_mkdir(struct vop_mkdir_args *ap)
+{
+ struct vnode *dvp = ap->a_dvp;
+ struct vnode **vpp = ap->a_vpp;
+ struct componentname *cnp = ap->a_cnp;
+ struct nandfs_node *dir_node = VTON(dvp);
+ struct nandfs_inode *dir_inode = &dir_node->nn_inode;
+ struct nandfs_node *node;
+ struct nandfsmount *nmp = dir_node->nn_nmp;
+ uint16_t mode = MAKEIMODE(ap->a_vap->va_type, ap->a_vap->va_mode);
+ int error;
+
+ DPRINTF(VNCALL, ("%s: dvp %p\n", __func__, dvp));
+
+ if (nandfs_fs_full(dir_node->nn_nandfsdev))
+ return (ENOSPC);
+
+ if (dir_inode->i_links_count >= LINK_MAX)
+ return (EMLINK);
+
+ error = nandfs_node_create(nmp, &node, mode);
+ if (error)
+ return (error);
+
+ node->nn_inode.i_gid = dir_node->nn_inode.i_gid;
+ node->nn_inode.i_uid = cnp->cn_cred->cr_uid;
+
+ *vpp = NTOV(node);
+
+ error = nandfs_add_dirent(dvp, node->nn_ino, cnp->cn_nameptr,
+ cnp->cn_namelen, IFTODT(mode));
+ if (error) {
+ vput(*vpp);
+ return (error);
+ }
+
+ dir_node->nn_inode.i_links_count++;
+ dir_node->nn_flags |= IN_CHANGE;
+
+ error = nandfs_init_dir(NTOV(node), node->nn_ino, dir_node->nn_ino);
+ if (error) {
+ vput(NTOV(node));
+ return (error);
+ }
+
+ DPRINTF(VNCALL, ("created dir vp %p nandnode %p ino %jx\n", *vpp, node,
+ (uintmax_t)node->nn_ino));
+ return (0);
+}
+
+static int
+nandfs_mknod(struct vop_mknod_args *ap)
+{
+ struct vnode *dvp = ap->a_dvp;
+ struct vnode **vpp = ap->a_vpp;
+ struct vattr *vap = ap->a_vap;
+ uint16_t mode = MAKEIMODE(vap->va_type, vap->va_mode);
+ struct componentname *cnp = ap->a_cnp;
+ struct nandfs_node *dir_node = VTON(dvp);
+ struct nandfsmount *nmp = dir_node->nn_nmp;
+ struct nandfs_node *node;
+ int error;
+
+ if (nandfs_fs_full(dir_node->nn_nandfsdev))
+ return (ENOSPC);
+
+ error = nandfs_node_create(nmp, &node, mode);
+ if (error)
+ return (error);
+ node->nn_inode.i_gid = dir_node->nn_inode.i_gid;
+ node->nn_inode.i_uid = cnp->cn_cred->cr_uid;
+ if (vap->va_rdev != VNOVAL)
+ node->nn_inode.i_special = vap->va_rdev;
+
+ *vpp = NTOV(node);
+
+ if (nandfs_add_dirent(dvp, node->nn_ino, cnp->cn_nameptr,
+ cnp->cn_namelen, IFTODT(mode))) {
+ vput(*vpp);
+ return (ENOTDIR);
+ }
+
+ node->nn_flags |= IN_ACCESS | IN_CHANGE | IN_UPDATE;
+
+ return (0);
+}
+
+static int
+nandfs_symlink(struct vop_symlink_args *ap)
+{
+ struct vnode **vpp = ap->a_vpp;
+ struct vnode *dvp = ap->a_dvp;
+ uint16_t mode = MAKEIMODE(ap->a_vap->va_type, ap->a_vap->va_mode);
+ struct componentname *cnp = ap->a_cnp;
+ struct nandfs_node *dir_node = VTON(dvp);
+ struct nandfsmount *nmp = dir_node->nn_nmp;
+ struct nandfs_node *node;
+ int len, error;
+
+ if (nandfs_fs_full(dir_node->nn_nandfsdev))
+ return (ENOSPC);
+
+ error = nandfs_node_create(nmp, &node, S_IFLNK | mode);
+ if (error)
+ return (error);
+ node->nn_inode.i_gid = dir_node->nn_inode.i_gid;
+ node->nn_inode.i_uid = cnp->cn_cred->cr_uid;
+
+ *vpp = NTOV(node);
+
+ if (nandfs_add_dirent(dvp, node->nn_ino, cnp->cn_nameptr,
+ cnp->cn_namelen, IFTODT(mode))) {
+ vput(*vpp);
+ return (ENOTDIR);
+ }
+
+
+ len = strlen(ap->a_target);
+ error = vn_rdwr(UIO_WRITE, *vpp, ap->a_target, len, (off_t)0,
+ UIO_SYSSPACE, IO_NODELOCKED | IO_NOMACCHECK,
+ cnp->cn_cred, NOCRED, NULL, NULL);
+ if (error)
+ vput(*vpp);
+
+ return (error);
+}
+
+static int
+nandfs_readlink(struct vop_readlink_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+
+ return (VOP_READ(vp, ap->a_uio, 0, ap->a_cred));
+}
+
+static int
+nandfs_rmdir(struct vop_rmdir_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct vnode *dvp = ap->a_dvp;
+ struct componentname *cnp = ap->a_cnp;
+ struct nandfs_node *node, *dnode;
+ uint32_t dflag, flag;
+ int error = 0;
+
+ node = VTON(vp);
+ dnode = VTON(dvp);
+
+ /* Files marked as immutable or append-only cannot be deleted. */
+ if ((node->nn_inode.i_flags & (IMMUTABLE | APPEND | NOUNLINK)) ||
+ (dnode->nn_inode.i_flags & APPEND))
+ return (EPERM);
+
+ DPRINTF(VNCALL, ("%s: dvp %p vp %p nandnode %p ino %#jx\n", __func__,
+ dvp, vp, node, (uintmax_t)node->nn_ino));
+
+ if (node->nn_inode.i_links_count < 2)
+ return (EINVAL);
+
+ if (!nandfs_dirempty(vp, dnode->nn_ino, cnp->cn_cred))
+ return (ENOTEMPTY);
+
+ /* Files marked as immutable or append-only cannot be deleted. */
+ dflag = dnode->nn_inode.i_flags;
+ flag = node->nn_inode.i_flags;
+ if ((dflag & APPEND) ||
+ (flag & (NOUNLINK | IMMUTABLE | APPEND))) {
+ return (EPERM);
+ }
+
+ if (vp->v_mountedhere != 0)
+ return (EINVAL);
+
+ nandfs_remove_dirent(dvp, node, cnp);
+ dnode->nn_inode.i_links_count -= 1;
+ dnode->nn_flags |= IN_CHANGE;
+
+ cache_purge(dvp);
+
+ error = nandfs_truncate(vp, (uint64_t)0);
+ if (error)
+ return (error);
+
+ node->nn_inode.i_links_count -= 2;
+ node->nn_flags |= IN_CHANGE;
+
+ cache_purge(vp);
+
+ return (error);
+}
+
+static int
+nandfs_fsync(struct vop_fsync_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *node = VTON(vp);
+ int locked;
+
+ DPRINTF(VNCALL, ("%s: vp %p nandnode %p ino %#jx\n", __func__, vp,
+ node, (uintmax_t)node->nn_ino));
+
+ /*
+ * Start syncing vnode only if inode was modified or
+ * there are some dirty buffers
+ */
+ if (VTON(vp)->nn_flags & IN_MODIFIED ||
+ vp->v_bufobj.bo_dirty.bv_cnt) {
+ locked = VOP_ISLOCKED(vp);
+ VOP_UNLOCK(vp, 0);
+ nandfs_wakeup_wait_sync(node->nn_nandfsdev, SYNCER_FSYNC);
+ VOP_LOCK(vp, locked | LK_RETRY);
+ }
+
+ return (0);
+}
+
+static int
+nandfs_bmap(struct vop_bmap_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *nnode = VTON(vp);
+ struct nandfs_device *nandfsdev = nnode->nn_nandfsdev;
+ nandfs_daddr_t l2vmap, v2pmap;
+ int error;
+ int blk2dev = nandfsdev->nd_blocksize / DEV_BSIZE;
+
+ DPRINTF(VNCALL, ("%s: vp %p nandnode %p ino %#jx\n", __func__, vp,
+ nnode, (uintmax_t)nnode->nn_ino));
+
+ if (ap->a_bop != NULL)
+ *ap->a_bop = &nandfsdev->nd_devvp->v_bufobj;
+ if (ap->a_bnp == NULL)
+ return (0);
+ if (ap->a_runp != NULL)
+ *ap->a_runp = 0;
+ if (ap->a_runb != NULL)
+ *ap->a_runb = 0;
+
+ /*
+ * Translate all the block sectors into a series of buffers to read
+ * asynchronously from the nandfs device. Note that this lookup may
+ * induce readin's too.
+ */
+
+ /* Get virtual block numbers for the vnode's buffer span */
+ error = nandfs_bmap_lookup(nnode, ap->a_bn, &l2vmap);
+ if (error)
+ return (-1);
+
+ /* Translate virtual block numbers to physical block numbers */
+ error = nandfs_vtop(nnode, l2vmap, &v2pmap);
+ if (error)
+ return (-1);
+
+ /* Note virtual block 0 marks not mapped */
+ if (l2vmap == 0)
+ *ap->a_bnp = -1;
+ else
+ *ap->a_bnp = v2pmap * blk2dev; /* in DEV_BSIZE */
+
+ DPRINTF(VNCALL, ("%s: vp %p nandnode %p ino %#jx lblk %jx -> blk %jx\n",
+ __func__, vp, nnode, (uintmax_t)nnode->nn_ino, (uintmax_t)ap->a_bn,
+ (uintmax_t)*ap->a_bnp ));
+
+ return (0);
+}
+
+static void
+nandfs_force_syncer(struct nandfsmount *nmp)
+{
+
+ nmp->nm_flags |= NANDFS_FORCE_SYNCER;
+ nandfs_wakeup_wait_sync(nmp->nm_nandfsdev, SYNCER_FFORCE);
+}
+
+static int
+nandfs_ioctl(struct vop_ioctl_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ u_long command = ap->a_command;
+ caddr_t data = ap->a_data;
+ struct nandfs_node *node = VTON(vp);
+ struct nandfs_device *nandfsdev = node->nn_nandfsdev;
+ struct nandfsmount *nmp = node->nn_nmp;
+ uint64_t *tab, *cno;
+ struct nandfs_seg_stat *nss;
+ struct nandfs_cpmode *ncpm;
+ struct nandfs_argv *nargv;
+ struct nandfs_cpstat *ncp;
+ int error;
+
+ DPRINTF(VNCALL, ("%s: %x\n", __func__, (uint32_t)command));
+
+ error = priv_check(ap->a_td, PRIV_VFS_MOUNT);
+ if (error)
+ return (error);
+
+ if (nmp->nm_ronly) {
+ switch (command) {
+ case NANDFS_IOCTL_GET_FSINFO:
+ case NANDFS_IOCTL_GET_SUSTAT:
+ case NANDFS_IOCTL_GET_CPINFO:
+ case NANDFS_IOCTL_GET_CPSTAT:
+ case NANDFS_IOCTL_GET_SUINFO:
+ case NANDFS_IOCTL_GET_VINFO:
+ case NANDFS_IOCTL_GET_BDESCS:
+ break;
+ default:
+ return (EROFS);
+ }
+ }
+
+ switch (command) {
+ case NANDFS_IOCTL_GET_FSINFO:
+ error = nandfs_get_fsinfo(nmp, (struct nandfs_fsinfo *)data);
+ break;
+ case NANDFS_IOCTL_GET_SUSTAT:
+ nss = (struct nandfs_seg_stat *)data;
+ error = nandfs_get_seg_stat(nandfsdev, nss);
+ break;
+ case NANDFS_IOCTL_CHANGE_CPMODE:
+ ncpm = (struct nandfs_cpmode *)data;
+ error = nandfs_chng_cpmode(nandfsdev->nd_cp_node, ncpm);
+ nandfs_force_syncer(nmp);
+ break;
+ case NANDFS_IOCTL_GET_CPINFO:
+ nargv = (struct nandfs_argv *)data;
+ error = nandfs_get_cpinfo_ioctl(nandfsdev->nd_cp_node, nargv);
+ break;
+ case NANDFS_IOCTL_DELETE_CP:
+ tab = (uint64_t *)data;
+ error = nandfs_delete_cp(nandfsdev->nd_cp_node, tab[0], tab[1]);
+ nandfs_force_syncer(nmp);
+ break;
+ case NANDFS_IOCTL_GET_CPSTAT:
+ ncp = (struct nandfs_cpstat *)data;
+ error = nandfs_get_cpstat(nandfsdev->nd_cp_node, ncp);
+ break;
+ case NANDFS_IOCTL_GET_SUINFO:
+ nargv = (struct nandfs_argv *)data;
+ error = nandfs_get_segment_info_ioctl(nandfsdev, nargv);
+ break;
+ case NANDFS_IOCTL_GET_VINFO:
+ nargv = (struct nandfs_argv *)data;
+ error = nandfs_get_dat_vinfo_ioctl(nandfsdev, nargv);
+ break;
+ case NANDFS_IOCTL_GET_BDESCS:
+ nargv = (struct nandfs_argv *)data;
+ error = nandfs_get_dat_bdescs_ioctl(nandfsdev, nargv);
+ break;
+ case NANDFS_IOCTL_SYNC:
+ cno = (uint64_t *)data;
+ nandfs_force_syncer(nmp);
+ *cno = nandfsdev->nd_last_cno;
+ error = 0;
+ break;
+ case NANDFS_IOCTL_MAKE_SNAP:
+ cno = (uint64_t *)data;
+ error = nandfs_make_snap(nandfsdev, cno);
+ nandfs_force_syncer(nmp);
+ break;
+ case NANDFS_IOCTL_DELETE_SNAP:
+ cno = (uint64_t *)data;
+ error = nandfs_delete_snap(nandfsdev, *cno);
+ nandfs_force_syncer(nmp);
+ break;
+ default:
+ error = ENOTTY;
+ break;
+ }
+
+ return (error);
+}
+
+/*
+ * Whiteout vnode call
+ */
+static int
+nandfs_whiteout(struct vop_whiteout_args *ap)
+{
+ struct vnode *dvp = ap->a_dvp;
+ struct componentname *cnp = ap->a_cnp;
+ int error = 0;
+
+ switch (ap->a_flags) {
+ case LOOKUP:
+ return (0);
+ case CREATE:
+ /* Create a new directory whiteout */
+#ifdef INVARIANTS
+ if ((cnp->cn_flags & SAVENAME) == 0)
+ panic("ufs_whiteout: missing name");
+#endif
+ error = nandfs_add_dirent(dvp, NANDFS_WHT_INO, cnp->cn_nameptr,
+ cnp->cn_namelen, DT_WHT);
+ break;
+
+ case DELETE:
+ /* Remove an existing directory whiteout */
+ cnp->cn_flags &= ~DOWHITEOUT;
+ error = nandfs_remove_dirent(dvp, NULL, cnp);
+ break;
+ default:
+ panic("nandf_whiteout: unknown op: %d", ap->a_flags);
+ }
+
+ return (error);
+}
+
+static int
+nandfs_pathconf(struct vop_pathconf_args *ap)
+{
+ int error;
+
+ error = 0;
+ switch (ap->a_name) {
+ case _PC_LINK_MAX:
+ *ap->a_retval = LINK_MAX;
+ break;
+ case _PC_NAME_MAX:
+ *ap->a_retval = NAME_MAX;
+ break;
+ case _PC_PATH_MAX:
+ *ap->a_retval = PATH_MAX;
+ break;
+ case _PC_PIPE_BUF:
+ *ap->a_retval = PIPE_BUF;
+ break;
+ case _PC_CHOWN_RESTRICTED:
+ *ap->a_retval = 1;
+ break;
+ case _PC_NO_TRUNC:
+ *ap->a_retval = 1;
+ break;
+ case _PC_ACL_EXTENDED:
+ *ap->a_retval = 0;
+ break;
+ case _PC_ALLOC_SIZE_MIN:
+ *ap->a_retval = ap->a_vp->v_mount->mnt_stat.f_bsize;
+ break;
+ case _PC_FILESIZEBITS:
+ *ap->a_retval = 64;
+ break;
+ case _PC_REC_INCR_XFER_SIZE:
+ *ap->a_retval = ap->a_vp->v_mount->mnt_stat.f_iosize;
+ break;
+ case _PC_REC_MAX_XFER_SIZE:
+ *ap->a_retval = -1; /* means ``unlimited'' */
+ break;
+ case _PC_REC_MIN_XFER_SIZE:
+ *ap->a_retval = ap->a_vp->v_mount->mnt_stat.f_iosize;
+ break;
+ default:
+ error = EINVAL;
+ break;
+ }
+ return (error);
+}
+
+static int
+nandfs_vnlock1(struct vop_lock1_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *node = VTON(vp);
+ int error, vi_locked;
+
+ /*
+ * XXX can vnode go away while we are sleeping?
+ */
+ vi_locked = mtx_owned(&vp->v_interlock);
+ if (vi_locked)
+ VI_UNLOCK(vp);
+ error = NANDFS_WRITELOCKFLAGS(node->nn_nandfsdev,
+ ap->a_flags & LK_NOWAIT);
+ if (vi_locked && !error)
+ VI_LOCK(vp);
+ if (error)
+ return (error);
+
+ error = vop_stdlock(ap);
+ if (error) {
+ NANDFS_WRITEUNLOCK(node->nn_nandfsdev);
+ return (error);
+ }
+
+ return (0);
+}
+
+static int
+nandfs_vnunlock(struct vop_unlock_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *node = VTON(vp);
+ int error;
+
+ error = vop_stdunlock(ap);
+ if (error)
+ return (error);
+
+ NANDFS_WRITEUNLOCK(node->nn_nandfsdev);
+
+ return (0);
+}
+
+/*
+ * Global vfs data structures
+ */
+struct vop_vector nandfs_vnodeops = {
+ .vop_default = &default_vnodeops,
+ .vop_access = nandfs_access,
+ .vop_advlock = nandfs_advlock,
+ .vop_bmap = nandfs_bmap,
+ .vop_close = nandfs_close,
+ .vop_create = nandfs_create,
+ .vop_fsync = nandfs_fsync,
+ .vop_getattr = nandfs_getattr,
+ .vop_inactive = nandfs_inactive,
+ .vop_cachedlookup = nandfs_lookup,
+ .vop_ioctl = nandfs_ioctl,
+ .vop_link = nandfs_link,
+ .vop_lookup = vfs_cache_lookup,
+ .vop_mkdir = nandfs_mkdir,
+ .vop_mknod = nandfs_mknod,
+ .vop_open = nandfs_open,
+ .vop_pathconf = nandfs_pathconf,
+ .vop_print = nandfs_print,
+ .vop_read = nandfs_read,
+ .vop_readdir = nandfs_readdir,
+ .vop_readlink = nandfs_readlink,
+ .vop_reclaim = nandfs_reclaim,
+ .vop_remove = nandfs_remove,
+ .vop_rename = nandfs_rename,
+ .vop_rmdir = nandfs_rmdir,
+ .vop_whiteout = nandfs_whiteout,
+ .vop_write = nandfs_write,
+ .vop_setattr = nandfs_setattr,
+ .vop_strategy = nandfs_strategy,
+ .vop_symlink = nandfs_symlink,
+ .vop_lock1 = nandfs_vnlock1,
+ .vop_unlock = nandfs_vnunlock,
+};
+
+struct vop_vector nandfs_system_vnodeops = {
+ .vop_default = &default_vnodeops,
+ .vop_close = nandfs_close,
+ .vop_inactive = nandfs_inactive,
+ .vop_reclaim = nandfs_reclaim,
+ .vop_strategy = nandfs_strategy,
+ .vop_fsync = nandfs_fsync,
+ .vop_bmap = nandfs_bmap,
+ .vop_access = VOP_PANIC,
+ .vop_advlock = VOP_PANIC,
+ .vop_create = VOP_PANIC,
+ .vop_getattr = VOP_PANIC,
+ .vop_cachedlookup = VOP_PANIC,
+ .vop_ioctl = VOP_PANIC,
+ .vop_link = VOP_PANIC,
+ .vop_lookup = VOP_PANIC,
+ .vop_mkdir = VOP_PANIC,
+ .vop_mknod = VOP_PANIC,
+ .vop_open = VOP_PANIC,
+ .vop_pathconf = VOP_PANIC,
+ .vop_print = VOP_PANIC,
+ .vop_read = VOP_PANIC,
+ .vop_readdir = VOP_PANIC,
+ .vop_readlink = VOP_PANIC,
+ .vop_remove = VOP_PANIC,
+ .vop_rename = VOP_PANIC,
+ .vop_rmdir = VOP_PANIC,
+ .vop_whiteout = VOP_PANIC,
+ .vop_write = VOP_PANIC,
+ .vop_setattr = VOP_PANIC,
+ .vop_symlink = VOP_PANIC,
+};
+
+static int
+nandfsfifo_close(struct vop_close_args *ap)
+{
+ struct vnode *vp = ap->a_vp;
+ struct nandfs_node *node = VTON(vp);
+
+ DPRINTF(VNCALL, ("%s: vp %p node %p\n", __func__, vp, node));
+
+ mtx_lock(&vp->v_interlock);
+ if (vp->v_usecount > 1)
+ nandfs_itimes_locked(vp);
+ mtx_unlock(&vp->v_interlock);
+
+ return (fifo_specops.vop_close(ap));
+}
+
+struct vop_vector nandfs_fifoops = {
+ .vop_default = &fifo_specops,
+ .vop_fsync = VOP_PANIC,
+ .vop_access = nandfs_access,
+ .vop_close = nandfsfifo_close,
+ .vop_getattr = nandfs_getattr,
+ .vop_inactive = nandfs_inactive,
+ .vop_print = nandfs_print,
+ .vop_read = VOP_PANIC,
+ .vop_reclaim = nandfs_reclaim,
+ .vop_setattr = nandfs_setattr,
+ .vop_write = VOP_PANIC,
+ .vop_lock1 = nandfs_vnlock1,
+ .vop_unlock = nandfs_vnunlock,
+};
+
+int
+nandfs_vinit(struct vnode *vp, uint64_t ino)
+{
+ struct nandfs_node *node;
+
+ ASSERT_VOP_LOCKED(vp, __func__);
+
+ node = VTON(vp);
+
+ /* Check if we're fetching the root */
+ if (ino == NANDFS_ROOT_INO)
+ vp->v_vflag |= VV_ROOT;
+
+ if (ino != NANDFS_GC_INO)
+ vp->v_type = IFTOVT(node->nn_inode.i_mode);
+ else
+ vp->v_type = VREG;
+
+ if (vp->v_type == VFIFO)
+ vp->v_op = &nandfs_fifoops;
+
+ return (0);
+}
diff --git a/sys/fs/nfs/nfs_commonacl.c b/sys/fs/nfs/nfs_commonacl.c
index 1d731c55877a..886e5821ee26 100644
--- a/sys/fs/nfs/nfs_commonacl.c
+++ b/sys/fs/nfs/nfs_commonacl.c
@@ -468,9 +468,7 @@ nfsrv_setacl(vnode_t vp, NFSACL_T *aclp, struct ucred *cred,
error = NFSERR_ATTRNOTSUPP;
goto out;
}
- error = VOP_ACLCHECK(vp, ACL_TYPE_NFS4, aclp, cred, p);
- if (!error)
- error = VOP_SETACL(vp, ACL_TYPE_NFS4, aclp, cred, p);
+ error = VOP_SETACL(vp, ACL_TYPE_NFS4, aclp, cred, p);
out:
NFSEXITCODE(error);
diff --git a/sys/fs/ntfs/ntfs.h b/sys/fs/ntfs/ntfs.h
index 61127113ede1..26e86a952ffc 100644
--- a/sys/fs/ntfs/ntfs.h
+++ b/sys/fs/ntfs/ntfs.h
@@ -30,11 +30,11 @@
/*#define NTFS_DEBUG 1*/
-typedef u_int64_t cn_t;
-typedef u_int16_t wchar;
+typedef uint64_t cn_t;
+typedef uint16_t wchar;
#pragma pack(1)
-#define BBSIZE 1024
+#define BBSIZE 1024
#define BBOFF ((off_t)(0))
#define BBLOCK 0
#define NTFS_MFTINO 0
@@ -45,157 +45,157 @@ typedef u_int16_t wchar;
#define NTFS_BOOTINO 7
#define NTFS_BADCLUSINO 8
#define NTFS_UPCASEINO 10
-#define NTFS_MAXFILENAME 255
+#define NTFS_MAXFILENAME 255
struct fixuphdr {
- u_int32_t fh_magic;
- u_int16_t fh_foff;
- u_int16_t fh_fnum;
+ uint32_t fh_magic;
+ uint16_t fh_foff;
+ uint16_t fh_fnum;
};
-#define NTFS_AF_INRUN 0x00000001
+#define NTFS_AF_INRUN 0x00000001
struct attrhdr {
- u_int32_t a_type;
- u_int32_t reclen;
- u_int8_t a_flag;
- u_int8_t a_namelen;
- u_int8_t a_nameoff;
- u_int8_t reserved1;
- u_int8_t a_compression;
- u_int8_t reserved2;
- u_int16_t a_index;
+ uint32_t a_type;
+ uint32_t reclen;
+ uint8_t a_flag;
+ uint8_t a_namelen;
+ uint8_t a_nameoff;
+ uint8_t reserved1;
+ uint8_t a_compression;
+ uint8_t reserved2;
+ uint16_t a_index;
};
-#define NTFS_A_STD 0x10
-#define NTFS_A_ATTRLIST 0x20
-#define NTFS_A_NAME 0x30
-#define NTFS_A_VOLUMENAME 0x60
-#define NTFS_A_DATA 0x80
+#define NTFS_A_STD 0x10
+#define NTFS_A_ATTRLIST 0x20
+#define NTFS_A_NAME 0x30
+#define NTFS_A_VOLUMENAME 0x60
+#define NTFS_A_DATA 0x80
#define NTFS_A_INDXROOT 0x90
#define NTFS_A_INDX 0xA0
-#define NTFS_A_INDXBITMAP 0xB0
+#define NTFS_A_INDXBITMAP 0xB0
-#define NTFS_MAXATTRNAME 255
+#define NTFS_MAXATTRNAME 255
struct attr {
- struct attrhdr a_hdr;
+ struct attrhdr a_hdr;
union {
struct {
- u_int16_t a_datalen;
- u_int16_t reserved1;
- u_int16_t a_dataoff;
- u_int16_t a_indexed;
- } a_S_r;
+ uint16_t a_datalen;
+ uint16_t reserved1;
+ uint16_t a_dataoff;
+ uint16_t a_indexed;
+ } a_S_r;
struct {
- cn_t a_vcnstart;
- cn_t a_vcnend;
- u_int16_t a_dataoff;
- u_int16_t a_compressalg;
- u_int32_t reserved1;
- u_int64_t a_allocated;
- u_int64_t a_datalen;
- u_int64_t a_initialized;
- } a_S_nr;
- } a_S;
+ cn_t a_vcnstart;
+ cn_t a_vcnend;
+ uint16_t a_dataoff;
+ uint16_t a_compressalg;
+ uint32_t reserved1;
+ uint64_t a_allocated;
+ uint64_t a_datalen;
+ uint64_t a_initialized;
+ } a_S_nr;
+ } a_S;
};
-#define a_r a_S.a_S_r
-#define a_nr a_S.a_S_nr
+#define a_r a_S.a_S_r
+#define a_nr a_S.a_S_nr
typedef struct {
- u_int64_t t_create;
- u_int64_t t_write;
- u_int64_t t_mftwrite;
- u_int64_t t_access;
-} ntfs_times_t;
+ uint64_t t_create;
+ uint64_t t_write;
+ uint64_t t_mftwrite;
+ uint64_t t_access;
+} ntfs_times_t;
-#define NTFS_FFLAG_RDONLY 0x01LL
-#define NTFS_FFLAG_HIDDEN 0x02LL
-#define NTFS_FFLAG_SYSTEM 0x04LL
-#define NTFS_FFLAG_ARCHIVE 0x20LL
-#define NTFS_FFLAG_COMPRESSED 0x0800LL
-#define NTFS_FFLAG_DIR 0x10000000LL
+#define NTFS_FFLAG_RDONLY 0x01LL
+#define NTFS_FFLAG_HIDDEN 0x02LL
+#define NTFS_FFLAG_SYSTEM 0x04LL
+#define NTFS_FFLAG_ARCHIVE 0x20LL
+#define NTFS_FFLAG_COMPRESSED 0x0800LL
+#define NTFS_FFLAG_DIR 0x10000000LL
struct attr_name {
- u_int32_t n_pnumber; /* Parent ntnode */
- u_int32_t reserved;
- ntfs_times_t n_times;
- u_int64_t n_size;
- u_int64_t n_attrsz;
- u_int64_t n_flag;
- u_int8_t n_namelen;
- u_int8_t n_nametype;
- u_int16_t n_name[1];
+ uint32_t n_pnumber; /* Parent ntnode */
+ uint32_t reserved;
+ ntfs_times_t n_times;
+ uint64_t n_size;
+ uint64_t n_attrsz;
+ uint64_t n_flag;
+ uint8_t n_namelen;
+ uint8_t n_nametype;
+ uint16_t n_name[1];
};
-#define NTFS_IRFLAG_INDXALLOC 0x00000001
+#define NTFS_IRFLAG_INDXALLOC 0x00000001
struct attr_indexroot {
- u_int32_t ir_unkn1; /* always 0x30 */
- u_int32_t ir_unkn2; /* always 0x1 */
- u_int32_t ir_size;/* ??? */
- u_int32_t ir_unkn3; /* number of cluster */
- u_int32_t ir_unkn4; /* always 0x10 */
- u_int32_t ir_datalen; /* sizeof simething */
- u_int32_t ir_allocated; /* same as above */
- u_int16_t ir_flag;/* ?? always 1 */
- u_int16_t ir_unkn7;
+ uint32_t ir_unkn1; /* always 0x30 */
+ uint32_t ir_unkn2; /* always 0x1 */
+ uint32_t ir_size;/* ??? */
+ uint32_t ir_unkn3; /* number of cluster */
+ uint32_t ir_unkn4; /* always 0x10 */
+ uint32_t ir_datalen; /* sizeof simething */
+ uint32_t ir_allocated; /* same as above */
+ uint16_t ir_flag;/* ?? always 1 */
+ uint16_t ir_unkn7;
};
struct attr_attrlist {
- u_int32_t al_type; /* Attribute type */
- u_int16_t reclen; /* length of this entry */
- u_int8_t al_namelen; /* Attribute name len */
- u_int8_t al_nameoff; /* Name offset from entry start */
- u_int64_t al_vcnstart; /* VCN number */
- u_int32_t al_inumber; /* Parent ntnode */
- u_int32_t reserved;
- u_int16_t al_index; /* Attribute index in MFT record */
- u_int16_t al_name[1]; /* Name */
+ uint32_t al_type; /* Attribute type */
+ uint16_t reclen; /* length of this entry */
+ uint8_t al_namelen; /* Attribute name len */
+ uint8_t al_nameoff; /* Name offset from entry start */
+ uint64_t al_vcnstart; /* VCN number */
+ uint32_t al_inumber; /* Parent ntnode */
+ uint32_t reserved;
+ uint16_t al_index; /* Attribute index in MFT record */
+ uint16_t al_name[1]; /* Name */
};
-#define NTFS_INDXMAGIC (u_int32_t)(0x58444E49)
+#define NTFS_INDXMAGIC (uint32_t)(0x58444E49)
struct attr_indexalloc {
struct fixuphdr ia_fixup;
- u_int64_t unknown1;
- cn_t ia_bufcn;
- u_int16_t ia_hdrsize;
- u_int16_t unknown2;
- u_int32_t ia_inuse;
- u_int32_t ia_allocated;
+ uint64_t unknown1;
+ cn_t ia_bufcn;
+ uint16_t ia_hdrsize;
+ uint16_t unknown2;
+ uint32_t ia_inuse;
+ uint32_t ia_allocated;
};
#define NTFS_IEFLAG_SUBNODE 0x00000001
#define NTFS_IEFLAG_LAST 0x00000002
struct attr_indexentry {
- u_int32_t ie_number;
- u_int32_t unknown1;
- u_int16_t reclen;
- u_int16_t ie_size;
- u_int32_t ie_flag;/* 1 - has subnodes, 2 - last */
- u_int32_t ie_fpnumber;
- u_int32_t unknown2;
- ntfs_times_t ie_ftimes;
- u_int64_t ie_fallocated;
- u_int64_t ie_fsize;
- u_int64_t ie_fflag;
- u_int8_t ie_fnamelen;
- u_int8_t ie_fnametype;
- wchar ie_fname[NTFS_MAXFILENAME];
+ uint32_t ie_number;
+ uint32_t unknown1;
+ uint16_t reclen;
+ uint16_t ie_size;
+ uint32_t ie_flag; /* 1 - has subnodes, 2 - last */
+ uint32_t ie_fpnumber;
+ uint32_t unknown2;
+ ntfs_times_t ie_ftimes;
+ uint64_t ie_fallocated;
+ uint64_t ie_fsize;
+ uint64_t ie_fflag;
+ uint8_t ie_fnamelen;
+ uint8_t ie_fnametype;
+ wchar ie_fname[NTFS_MAXFILENAME];
/* cn_t ie_bufcn; buffer with subnodes */
};
-#define NTFS_FILEMAGIC (u_int32_t)(0x454C4946)
+#define NTFS_FILEMAGIC (uint32_t)(0x454C4946)
#define NTFS_BLOCK_SIZE 512
#define NTFS_FRFLAG_DIR 0x0002
struct filerec {
- struct fixuphdr fr_fixup;
- u_int8_t reserved[8];
- u_int16_t fr_seqnum; /* Sequence number */
- u_int16_t fr_nlink;
- u_int16_t fr_attroff; /* offset to attributes */
- u_int16_t fr_flags; /* 1-nonresident attr, 2-directory */
- u_int32_t fr_size;/* hdr + attributes */
- u_int32_t fr_allocated; /* allocated length of record */
- u_int64_t fr_mainrec; /* main record */
- u_int16_t fr_attrnum; /* maximum attr number + 1 ??? */
+ struct fixuphdr fr_fixup;
+ uint8_t reserved[8];
+ uint16_t fr_seqnum; /* Sequence number */
+ uint16_t fr_nlink;
+ uint16_t fr_attroff; /* offset to attributes */
+ uint16_t fr_flags; /* 1-nonresident attr, 2-directory */
+ uint32_t fr_size;/* hdr + attributes */
+ uint32_t fr_allocated; /* allocated length of record */
+ uint64_t fr_mainrec; /* main record */
+ uint16_t fr_attrnum; /* maximum attr number + 1 ??? */
};
#define NTFS_ATTRNAME_MAXLEN 0x40
@@ -203,66 +203,66 @@ struct filerec {
#define NTFS_ADFLAG_INDEX 0x0002 /* Attrib can be indexed */
struct attrdef {
wchar ad_name[NTFS_ATTRNAME_MAXLEN];
- u_int32_t ad_type;
- u_int32_t reserved1[2];
- u_int32_t ad_flag;
- u_int64_t ad_minlen;
- u_int64_t ad_maxlen; /* -1 for nonlimited */
+ uint32_t ad_type;
+ uint32_t reserved1[2];
+ uint32_t ad_flag;
+ uint64_t ad_minlen;
+ uint64_t ad_maxlen; /* -1 for nonlimited */
};
struct ntvattrdef {
char ad_name[0x40];
int ad_namelen;
- u_int32_t ad_type;
+ uint32_t ad_type;
};
#define NTFS_BBID "NTFS "
#define NTFS_BBIDLEN 8
struct bootfile {
- u_int8_t reserved1[3]; /* asm jmp near ... */
- u_int8_t bf_sysid[8]; /* 'NTFS ' */
- u_int16_t bf_bps; /* bytes per sector */
- u_int8_t bf_spc; /* sectors per cluster */
- u_int8_t reserved2[7]; /* unused (zeroed) */
- u_int8_t bf_media; /* media desc. (0xF8) */
- u_int8_t reserved3[2];
- u_int16_t bf_spt; /* sectors per track */
- u_int16_t bf_heads; /* number of heads */
- u_int8_t reserver4[12];
- u_int64_t bf_spv; /* sectors per volume */
- cn_t bf_mftcn; /* $MFT cluster number */
- cn_t bf_mftmirrcn; /* $MFTMirr cn */
- u_int8_t bf_mftrecsz; /* MFT record size (clust) */
+ uint8_t reserved1[3]; /* asm jmp near ... */
+ uint8_t bf_sysid[8]; /* 'NTFS ' */
+ uint16_t bf_bps; /* bytes per sector */
+ uint8_t bf_spc; /* sectors per cluster */
+ uint8_t reserved2[7]; /* unused (zeroed) */
+ uint8_t bf_media; /* media desc. (0xF8) */
+ uint8_t reserved3[2];
+ uint16_t bf_spt; /* sectors per track */
+ uint16_t bf_heads; /* number of heads */
+ uint8_t reserver4[12];
+ uint64_t bf_spv; /* sectors per volume */
+ cn_t bf_mftcn; /* $MFT cluster number */
+ cn_t bf_mftmirrcn; /* $MFTMirr cn */
+ uint8_t bf_mftrecsz; /* MFT record size (clust) */
/* 0xF6 inducates 1/4 */
- u_int32_t bf_ibsz; /* index buffer size */
- u_int32_t bf_volsn; /* volume ser. num. */
+ uint32_t bf_ibsz; /* index buffer size */
+ uint32_t bf_volsn; /* volume ser. num. */
};
#define NTFS_SYSNODESNUM 0x0B
struct ntfsmount {
struct mount *ntm_mountp; /* filesystem vfs structure */
- struct bootfile ntm_bootfile;
+ struct bootfile ntm_bootfile;
struct g_consumer *ntm_cp;
struct bufobj *ntm_bo;
struct vnode *ntm_devvp; /* block device mounted vnode */
struct vnode *ntm_sysvn[NTFS_SYSNODESNUM];
- u_int32_t ntm_bpmftrec;
- uid_t ntm_uid;
- gid_t ntm_gid;
- mode_t ntm_mode;
+ uint32_t ntm_bpmftrec;
+ uid_t ntm_uid;
+ gid_t ntm_gid;
+ mode_t ntm_mode;
uint64_t ntm_flag;
cn_t ntm_cfree;
struct ntvattrdef *ntm_ad;
int ntm_adnum;
- wchar * ntm_82u; /* 8bit to Unicode */
- char ** ntm_u28; /* Unicode to 8 bit */
+ wchar * ntm_82u; /* 8bit to Unicode */
+ char ** ntm_u28; /* Unicode to 8 bit */
void * ntm_ic_l2u; /* Local to Unicode (iconv) */
void * ntm_ic_u2l; /* Unicode to Local (iconv) */
- u_int8_t ntm_multiplier; /* NTFS blockno to DEV_BSIZE sectorno */
+ uint8_t ntm_multiplier; /* NTFS blockno to DEV_BSIZE sectorno */
};
-#define ntm_mftcn ntm_bootfile.bf_mftcn
-#define ntm_mftmirrcn ntm_bootfile.bf_mftmirrcn
+#define ntm_mftcn ntm_bootfile.bf_mftcn
+#define ntm_mftmirrcn ntm_bootfile.bf_mftmirrcn
#define ntm_mftrecsz ntm_bootfile.bf_mftrecsz
#define ntm_spc ntm_bootfile.bf_spc
#define ntm_bps ntm_bootfile.bf_bps
@@ -272,17 +272,17 @@ struct ntfsmount {
#define NTFS_NEXTREC(s, type) ((type)(((caddr_t) s) + (s)->reclen))
/* Convert mount ptr to ntfsmount ptr. */
-#define VFSTONTFS(mp) ((struct ntfsmount *)((mp)->mnt_data))
-#define VTONT(v) FTONT(VTOF(v))
+#define VFSTONTFS(mp) ((struct ntfsmount *)((mp)->mnt_data))
+#define VTONT(v) FTONT(VTOF(v))
#define VTOF(v) ((struct fnode *)((v)->v_data))
#define FTOV(f) ((f)->f_vp)
#define FTONT(f) ((f)->f_ip)
-#define ntfs_cntobn(cn) (daddr_t)((cn) * (ntmp->ntm_spc))
-#define ntfs_cntob(cn) (off_t)((cn) * (ntmp)->ntm_spc * (ntmp)->ntm_bps)
-#define ntfs_btocn(off) (cn_t)((off) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
-#define ntfs_btocl(off) (cn_t)((off + ntfs_cntob(1) - 1) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
-#define ntfs_btocnoff(off) (off_t)((off) % ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
-#define ntfs_bntob(bn) (daddr_t)((bn) * (ntmp)->ntm_bps)
+#define ntfs_cntobn(cn) (daddr_t)((cn) * (ntmp->ntm_spc))
+#define ntfs_cntob(cn) (off_t)((cn) * (ntmp)->ntm_spc * (ntmp)->ntm_bps)
+#define ntfs_btocn(off) (cn_t)((off) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
+#define ntfs_btocl(off) (cn_t)((off + ntfs_cntob(1) - 1) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
+#define ntfs_btocnoff(off) (off_t)((off) % ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
+#define ntfs_bntob(bn) (daddr_t)((bn) * (ntmp)->ntm_bps)
#define ntfs_bpbl (daddr_t)((ntmp)->ntm_bps)
@@ -294,15 +294,15 @@ MALLOC_DECLARE(M_NTFSNTHASH);
#endif
#if defined(NTFS_DEBUG)
-#define dprintf(a) printf a
+#define dprintf(a) printf a
#if NTFS_DEBUG > 1
-#define ddprintf(a) printf a
+#define ddprintf(a) printf a
#else
-#define ddprintf(a) (void)0
+#define ddprintf(a) (void)0
#endif
#else
-#define dprintf(a) (void)0
-#define ddprintf(a) (void)0
+#define dprintf(a) (void)0
+#define ddprintf(a) (void)0
#endif
extern struct vop_vector ntfs_vnodeops;
diff --git a/sys/fs/ntfs/ntfs_vnops.c b/sys/fs/ntfs/ntfs_vnops.c
index 76776a14c01f..8de8ca461770 100644
--- a/sys/fs/ntfs/ntfs_vnops.c
+++ b/sys/fs/ntfs/ntfs_vnops.c
@@ -493,8 +493,13 @@ ntfs_readdir(ap)
/* Simulate . in every dir except ROOT */
if( ip->i_number != NTFS_ROOTINO ) {
- struct dirent dot = { NTFS_ROOTINO,
- sizeof(struct dirent), DT_DIR, 1, "." };
+ struct dirent dot = {
+ .d_fileno = NTFS_ROOTINO,
+ .d_reclen = sizeof(struct dirent),
+ .d_type = DT_DIR,
+ .d_namlen = 1,
+ .d_name = "."
+ };
if( uio->uio_offset < sizeof(struct dirent) ) {
dot.d_fileno = ip->i_number;
@@ -508,8 +513,13 @@ ntfs_readdir(ap)
/* Simulate .. in every dir including ROOT */
if( uio->uio_offset < 2 * sizeof(struct dirent) ) {
- struct dirent dotdot = { NTFS_ROOTINO,
- sizeof(struct dirent), DT_DIR, 2, ".." };
+ struct dirent dotdot = {
+ .d_fileno = NTFS_ROOTINO,
+ .d_reclen = sizeof(struct dirent),
+ .d_type = DT_DIR,
+ .d_namlen = 2,
+ .d_name = ".."
+ };
error = uiomove((char *)&dotdot,sizeof(struct dirent),uio);
if(error)
diff --git a/sys/fs/unionfs/union_subr.c b/sys/fs/unionfs/union_subr.c
index dbdaa8e9996b..528271cda4db 100644
--- a/sys/fs/unionfs/union_subr.c
+++ b/sys/fs/unionfs/union_subr.c
@@ -1184,7 +1184,7 @@ unionfs_check_rmdir(struct vnode *vp, struct ucred *cred, struct thread *td)
edp = (struct dirent*)&buf[sizeof(buf) - uio.uio_resid];
for (dp = (struct dirent*)buf; !error && dp < edp;
dp = (struct dirent*)((caddr_t)dp + dp->d_reclen)) {
- if (dp->d_type == DT_WHT ||
+ if (dp->d_type == DT_WHT || dp->d_fileno == 0 ||
(dp->d_namlen == 1 && dp->d_name[0] == '.') ||
(dp->d_namlen == 2 && !bcmp(dp->d_name, "..", 2)))
continue;
diff --git a/sys/geom/geom_flashmap.c b/sys/geom/geom_flashmap.c
new file mode 100644
index 000000000000..341a5da91900
--- /dev/null
+++ b/sys/geom/geom_flashmap.c
@@ -0,0 +1,256 @@
+/*-
+ * Copyright (c) 2012 Semihalf
+ * Copyright (c) 2009 Jakub Klama <jakub.klama@uj.edu.pl>
+ * 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/endian.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/fcntl.h>
+#include <sys/malloc.h>
+#include <sys/bio.h>
+#include <sys/bus.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/slicer.h>
+
+#include <geom/geom.h>
+#include <geom/geom_slice.h>
+#include <geom/geom_disk.h>
+#include <dev/nand/nand_dev.h>
+
+#define FLASHMAP_CLASS_NAME "Flashmap"
+
+struct g_flashmap_slice {
+ off_t sl_start;
+ off_t sl_end;
+ const char *sl_name;
+
+ STAILQ_ENTRY(g_flashmap_slice) sl_link;
+};
+
+STAILQ_HEAD(g_flashmap_head, g_flashmap_slice);
+
+static void g_flashmap_print(struct g_flashmap_slice *);
+static int g_flashmap_modify(struct g_geom *, const char *,
+ int, struct g_flashmap_head *);
+static int g_flashmap_start(struct bio *);
+static int g_flashmap_ioctl(struct g_provider *, u_long, void *,
+ int, struct thread *);
+static void g_flashmap_dumpconf(struct sbuf *, const char *,
+ struct g_geom *, struct g_consumer *, struct g_provider *);
+static struct g_geom *g_flashmap_taste(struct g_class *,
+ struct g_provider *, int);
+static void g_flashmap_config(struct gctl_req *, struct g_class *,
+ const char *);
+static int g_flashmap_load(device_t, struct g_flashmap_head *);
+
+MALLOC_DECLARE(M_FLASHMAP);
+MALLOC_DEFINE(M_FLASHMAP, "geom_flashmap", "GEOM flash memory slicer class");
+
+static void
+g_flashmap_print(struct g_flashmap_slice *slice)
+{
+
+ printf("%08jx-%08jx: %s (%juKB)\n", (uintmax_t)slice->sl_start,
+ (uintmax_t)slice->sl_end, slice->sl_name,
+ (uintmax_t)(slice->sl_end - slice->sl_start) / 1024);
+}
+
+static int
+g_flashmap_modify(struct g_geom *gp, const char *devname, int secsize,
+ struct g_flashmap_head *slices)
+{
+ struct g_flashmap_slice *slice;
+ int i, error;
+
+ g_topology_assert();
+
+ i = 0;
+ STAILQ_FOREACH(slice, slices, sl_link) {
+ if (bootverbose) {
+ printf("%s: slice ", devname);
+ g_flashmap_print(slice);
+ }
+
+ error = g_slice_config(gp, i++, G_SLICE_CONFIG_CHECK,
+ slice->sl_start,
+ slice->sl_end - slice->sl_start + 1,
+ secsize, "%ss.%s", gp->name, slice->sl_name);
+
+ if (error)
+ return (error);
+ }
+
+ i = 0;
+ STAILQ_FOREACH(slice, slices, sl_link) {
+ error = g_slice_config(gp, i++, G_SLICE_CONFIG_SET,
+ slice->sl_start,
+ slice->sl_end - slice->sl_start + 1,
+ secsize, "%ss.%s", gp->name, slice->sl_name);
+
+ if (error)
+ return (error);
+ }
+
+ return (0);
+}
+
+static int
+g_flashmap_start(struct bio *bp)
+{
+
+ return (0);
+}
+
+static void
+g_flashmap_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp,
+ struct g_consumer *cp __unused, struct g_provider *pp)
+{
+ struct g_slicer *gsp;
+
+ gsp = gp->softc;
+ g_slice_dumpconf(sb, indent, gp, cp, pp);
+}
+
+static int
+g_flashmap_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag,
+ struct thread *td)
+{
+ struct g_consumer *cp;
+ struct g_geom *gp;
+
+ if (cmd != NAND_IO_GET_CHIP_PARAM)
+ return (ENOIOCTL);
+
+ cp = LIST_FIRST(&pp->geom->consumer);
+ if (cp == NULL)
+ return (ENOIOCTL);
+ gp = cp->provider->geom;
+ if (gp->ioctl == NULL)
+ return (ENOIOCTL);
+
+ return (gp->ioctl(cp->provider, cmd, data, fflag, td));
+}
+
+
+static struct g_geom *
+g_flashmap_taste(struct g_class *mp, struct g_provider *pp, int flags)
+{
+ struct g_geom *gp = NULL;
+ struct g_consumer *cp;
+ struct g_flashmap_head head;
+ struct g_flashmap_slice *slice, *slice_temp;
+ device_t dev;
+ int nslices, size;
+
+ g_trace(G_T_TOPOLOGY, "flashmap_taste(%s,%s)", mp->name, pp->name);
+ g_topology_assert();
+
+ if (flags == G_TF_NORMAL &&
+ !strcmp(pp->geom->class->name, FLASHMAP_CLASS_NAME))
+ return (NULL);
+
+ gp = g_slice_new(mp, FLASH_SLICES_MAX_NUM, pp, &cp, NULL, 0,
+ g_flashmap_start);
+ if (gp == NULL)
+ return (NULL);
+
+ STAILQ_INIT(&head);
+
+ do {
+ size = sizeof(device_t);
+ if (g_io_getattr("NAND::device", cp, &size, &dev))
+ break;
+
+ nslices = g_flashmap_load(dev, &head);
+ if (nslices == 0)
+ break;
+
+ g_flashmap_modify(gp, cp->provider->name,
+ cp->provider->sectorsize, &head);
+ } while (0);
+
+ g_access(cp, -1, 0, 0);
+
+ STAILQ_FOREACH_SAFE(slice, &head, sl_link, slice_temp) {
+ free(slice, M_FLASHMAP);
+ }
+
+ if (LIST_EMPTY(&gp->provider)) {
+ g_slice_spoiled(cp);
+ return (NULL);
+ }
+ return (gp);
+}
+
+static void
+g_flashmap_config(struct gctl_req *req, struct g_class *mp, const char *verb)
+{
+
+ gctl_error(req, "unknown config verb");
+}
+
+static int
+g_flashmap_load(device_t dev, struct g_flashmap_head *head)
+{
+ struct flash_slice *slices;
+ struct g_flashmap_slice *slice;
+ uint32_t i, buf_size;
+ int nslices = 0;
+
+ buf_size = sizeof(struct flash_slice) * FLASH_SLICES_MAX_NUM;
+ slices = malloc(buf_size, M_FLASHMAP, M_WAITOK | M_ZERO);
+ if (flash_fill_slices(dev, slices, &nslices) == 0) {
+ for (i = 0; i < nslices; i++) {
+ slice = malloc(sizeof(struct g_flashmap_slice),
+ M_FLASHMAP, M_WAITOK);
+
+ slice->sl_name = slices[i].label;
+ slice->sl_start = slices[i].base;
+ slice->sl_end = slices[i].base + slices[i].size - 1;
+
+ STAILQ_INSERT_TAIL(head, slice, sl_link);
+ }
+ }
+
+ free(slices, M_FLASHMAP);
+ return (nslices);
+}
+
+static struct g_class g_flashmap_class = {
+ .name = FLASHMAP_CLASS_NAME,
+ .version = G_VERSION,
+ .taste = g_flashmap_taste,
+ .dumpconf = g_flashmap_dumpconf,
+ .ioctl = g_flashmap_ioctl,
+ .ctlreq = g_flashmap_config,
+};
+
+DECLARE_GEOM_CLASS(g_flashmap_class, g_flashmap);
diff --git a/sys/geom/label/g_label_ufs.c b/sys/geom/label/g_label_ufs.c
index b9b04437f0ac..6a313e228a9d 100644
--- a/sys/geom/label/g_label_ufs.c
+++ b/sys/geom/label/g_label_ufs.c
@@ -81,7 +81,11 @@ g_label_ufs_taste_common(struct g_consumer *cp, char *label, size_t size, int wh
fs = (struct fs *)g_read_data(cp, superblock, SBLOCKSIZE, NULL);
if (fs == NULL)
continue;
- /* Check for magic and make sure things are the right size */
+ /* Check for magic. We also need to check if file system size is equal
+ * to providers size, because sysinstall(8) used to bogusly put first
+ * partition at offset 0 instead of 16, and glabel/ufs would find file
+ * system on slice instead of partition.
+ */
if (fs->fs_magic == FS_UFS1_MAGIC && fs->fs_fsize > 0 &&
pp->mediasize / fs->fs_fsize == fs->fs_old_size) {
/* Valid UFS1. */
diff --git a/sys/geom/mirror/g_mirror.c b/sys/geom/mirror/g_mirror.c
index 1eb46deaedca..fc33db2bd989 100644
--- a/sys/geom/mirror/g_mirror.c
+++ b/sys/geom/mirror/g_mirror.c
@@ -1693,6 +1693,8 @@ g_mirror_can_destroy(struct g_mirror_softc *sc)
gp = sc->sc_geom;
if (gp->softc == NULL)
return (1);
+ if ((sc->sc_flags & G_MIRROR_DEVICE_FLAG_TASTING) != 0)
+ return (0);
LIST_FOREACH(cp, &gp->consumer, consumer) {
if (g_mirror_is_busy(sc, cp))
return (0);
@@ -3054,6 +3056,7 @@ g_mirror_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
G_MIRROR_DEBUG(1, "Adding disk %s to %s.", pp->name, gp->name);
g_topology_unlock();
sx_xlock(&sc->sc_lock);
+ sc->sc_flags |= G_MIRROR_DEVICE_FLAG_TASTING;
error = g_mirror_add_disk(sc, pp, &md);
if (error != 0) {
G_MIRROR_DEBUG(0, "Cannot add disk %s to %s (error=%d).",
@@ -3066,6 +3069,12 @@ g_mirror_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
}
gp = NULL;
}
+ sc->sc_flags &= ~G_MIRROR_DEVICE_FLAG_TASTING;
+ if ((sc->sc_flags & G_MIRROR_DEVICE_FLAG_DESTROY) != 0) {
+ g_mirror_destroy(sc, G_MIRROR_DESTROY_HARD);
+ g_topology_lock();
+ return (NULL);
+ }
sx_xunlock(&sc->sc_lock);
g_topology_lock();
return (gp);
diff --git a/sys/geom/mirror/g_mirror.h b/sys/geom/mirror/g_mirror.h
index 8cd9a691e40c..c6fec74ec105 100644
--- a/sys/geom/mirror/g_mirror.h
+++ b/sys/geom/mirror/g_mirror.h
@@ -157,6 +157,7 @@ struct g_mirror_event {
#define G_MIRROR_DEVICE_FLAG_DESTROY 0x0100000000000000ULL
#define G_MIRROR_DEVICE_FLAG_WAIT 0x0200000000000000ULL
#define G_MIRROR_DEVICE_FLAG_DESTROYING 0x0400000000000000ULL
+#define G_MIRROR_DEVICE_FLAG_TASTING 0x0800000000000000ULL
#define G_MIRROR_DEVICE_STATE_STARTING 0
#define G_MIRROR_DEVICE_STATE_RUNNING 1
diff --git a/sys/geom/mirror/g_mirror_ctl.c b/sys/geom/mirror/g_mirror_ctl.c
index dc59e1851336..c024bd9d3181 100644
--- a/sys/geom/mirror/g_mirror_ctl.c
+++ b/sys/geom/mirror/g_mirror_ctl.c
@@ -560,7 +560,7 @@ g_mirror_ctl_remove(struct gctl_req *req, struct g_class *mp)
const char *name;
char param[16];
int *nargs;
- u_int i;
+ u_int i, active;
nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs));
if (nargs == NULL) {
@@ -587,6 +587,7 @@ g_mirror_ctl_remove(struct gctl_req *req, struct g_class *mp)
"first.");
return;
}
+ active = g_mirror_ndisks(sc, G_MIRROR_DISK_STATE_ACTIVE);
for (i = 1; i < (u_int)*nargs; i++) {
snprintf(param, sizeof(param), "arg%u", i);
name = gctl_get_asciiparam(req, param);
@@ -599,6 +600,16 @@ g_mirror_ctl_remove(struct gctl_req *req, struct g_class *mp)
gctl_error(req, "No such provider: %s.", name);
continue;
}
+ if (disk->d_state == G_MIRROR_DISK_STATE_ACTIVE) {
+ if (active > 1)
+ active--;
+ else {
+ gctl_error(req, "%s: Can't remove the last "
+ "ACTIVE component %s.", sc->sc_geom->name,
+ name);
+ continue;
+ }
+ }
g_mirror_event_send(disk, G_MIRROR_DISK_STATE_DESTROY,
G_MIRROR_EVENT_DONTWAIT);
}
diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c
index a21fe2600adb..8d86c4a3e3b7 100644
--- a/sys/geom/part/g_part.c
+++ b/sys/geom/part/g_part.c
@@ -83,6 +83,7 @@ struct g_part_alias_list {
{ "fat32", G_PART_ALIAS_MS_FAT32 },
{ "freebsd", G_PART_ALIAS_FREEBSD },
{ "freebsd-boot", G_PART_ALIAS_FREEBSD_BOOT },
+ { "freebsd-nandfs", G_PART_ALIAS_FREEBSD_NANDFS },
{ "freebsd-swap", G_PART_ALIAS_FREEBSD_SWAP },
{ "freebsd-ufs", G_PART_ALIAS_FREEBSD_UFS },
{ "freebsd-vinum", G_PART_ALIAS_FREEBSD_VINUM },
diff --git a/sys/geom/part/g_part.h b/sys/geom/part/g_part.h
index e475a3e72967..39bcc9df9ffc 100644
--- a/sys/geom/part/g_part.h
+++ b/sys/geom/part/g_part.h
@@ -46,6 +46,7 @@ enum g_part_alias {
G_PART_ALIAS_EFI, /* A EFI system partition entry. */
G_PART_ALIAS_FREEBSD, /* A BSD labeled partition entry. */
G_PART_ALIAS_FREEBSD_BOOT, /* A FreeBSD boot partition entry. */
+ G_PART_ALIAS_FREEBSD_NANDFS, /* A FreeBSD nandfs partition entry. */
G_PART_ALIAS_FREEBSD_SWAP, /* A swap partition entry. */
G_PART_ALIAS_FREEBSD_UFS, /* A UFS/UFS2 file system entry. */
G_PART_ALIAS_FREEBSD_VINUM, /* A Vinum partition entry. */
diff --git a/sys/geom/part/g_part_apm.c b/sys/geom/part/g_part_apm.c
index d99ddda7ac71..35d0e3c3046c 100644
--- a/sys/geom/part/g_part_apm.c
+++ b/sys/geom/part/g_part_apm.c
@@ -159,6 +159,11 @@ apm_parse_type(const char *type, char *buf, size_t bufsz)
strcpy(buf, APM_ENT_TYPE_FREEBSD);
return (0);
}
+ alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS);
+ if (!strcasecmp(type, alias)) {
+ strcpy(buf, APM_ENT_TYPE_FREEBSD_NANDFS);
+ return (0);
+ }
alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP);
if (!strcasecmp(type, alias)) {
strcpy(buf, APM_ENT_TYPE_FREEBSD_SWAP);
@@ -485,6 +490,8 @@ g_part_apm_type(struct g_part_table *basetable, struct g_part_entry *baseentry,
return (g_part_alias_name(G_PART_ALIAS_APPLE_UFS));
if (!strcmp(type, APM_ENT_TYPE_FREEBSD))
return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
+ if (!strcmp(type, APM_ENT_TYPE_FREEBSD_NANDFS))
+ return (g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS));
if (!strcmp(type, APM_ENT_TYPE_FREEBSD_SWAP))
return (g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP));
if (!strcmp(type, APM_ENT_TYPE_FREEBSD_UFS))
diff --git a/sys/geom/part/g_part_bsd.c b/sys/geom/part/g_part_bsd.c
index f638216eaac1..a53781c7c529 100644
--- a/sys/geom/part/g_part_bsd.c
+++ b/sys/geom/part/g_part_bsd.c
@@ -126,6 +126,11 @@ bsd_parse_type(const char *type, uint8_t *fstype)
*fstype = (u_int)lt;
return (0);
}
+ alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS);
+ if (!strcasecmp(type, alias)) {
+ *fstype = FS_NANDFS;
+ return (0);
+ }
alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP);
if (!strcasecmp(type, alias)) {
*fstype = FS_SWAP;
@@ -450,6 +455,8 @@ g_part_bsd_type(struct g_part_table *basetable, struct g_part_entry *baseentry,
entry = (struct g_part_bsd_entry *)baseentry;
type = entry->part.p_fstype;
+ if (type == FS_NANDFS)
+ return (g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS));
if (type == FS_SWAP)
return (g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP));
if (type == FS_BSDFFS)
diff --git a/sys/geom/part/g_part_gpt.c b/sys/geom/part/g_part_gpt.c
index 559b61638368..68fb13cd6a6d 100644
--- a/sys/geom/part/g_part_gpt.c
+++ b/sys/geom/part/g_part_gpt.c
@@ -155,6 +155,7 @@ static struct uuid gpt_uuid_bios_boot = GPT_ENT_TYPE_BIOS_BOOT;
static struct uuid gpt_uuid_efi = GPT_ENT_TYPE_EFI;
static struct uuid gpt_uuid_freebsd = GPT_ENT_TYPE_FREEBSD;
static struct uuid gpt_uuid_freebsd_boot = GPT_ENT_TYPE_FREEBSD_BOOT;
+static struct uuid gpt_uuid_freebsd_nandfs = GPT_ENT_TYPE_FREEBSD_NANDFS;
static struct uuid gpt_uuid_freebsd_swap = GPT_ENT_TYPE_FREEBSD_SWAP;
static struct uuid gpt_uuid_freebsd_ufs = GPT_ENT_TYPE_FREEBSD_UFS;
static struct uuid gpt_uuid_freebsd_vinum = GPT_ENT_TYPE_FREEBSD_VINUM;
@@ -195,6 +196,7 @@ static struct g_part_uuid_alias {
{ &gpt_uuid_efi, G_PART_ALIAS_EFI, 0xee },
{ &gpt_uuid_freebsd, G_PART_ALIAS_FREEBSD, 0xa5 },
{ &gpt_uuid_freebsd_boot, G_PART_ALIAS_FREEBSD_BOOT, 0 },
+ { &gpt_uuid_freebsd_nandfs, G_PART_ALIAS_FREEBSD_NANDFS, 0 },
{ &gpt_uuid_freebsd_swap, G_PART_ALIAS_FREEBSD_SWAP, 0 },
{ &gpt_uuid_freebsd_ufs, G_PART_ALIAS_FREEBSD_UFS, 0 },
{ &gpt_uuid_freebsd_vinum, G_PART_ALIAS_FREEBSD_VINUM, 0 },
diff --git a/sys/geom/part/g_part_vtoc8.c b/sys/geom/part/g_part_vtoc8.c
index 0c442a736302..e993eff6bee0 100644
--- a/sys/geom/part/g_part_vtoc8.c
+++ b/sys/geom/part/g_part_vtoc8.c
@@ -114,6 +114,11 @@ vtoc8_parse_type(const char *type, uint16_t *tag)
*tag = (uint16_t)lt;
return (0);
}
+ alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS);
+ if (!strcasecmp(type, alias)) {
+ *tag = VTOC_TAG_FREEBSD_NANDFS;
+ return (0);
+ }
alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP);
if (!strcasecmp(type, alias)) {
*tag = VTOC_TAG_FREEBSD_SWAP;
@@ -487,6 +492,8 @@ g_part_vtoc8_type(struct g_part_table *basetable, struct g_part_entry *entry,
table = (struct g_part_vtoc8_table *)basetable;
tag = be16dec(&table->vtoc.part[entry->gpe_index - 1].tag);
+ if (tag == VTOC_TAG_FREEBSD_NANDFS)
+ return (g_part_alias_name(G_PART_ALIAS_FREEBSD_NANDFS));
if (tag == VTOC_TAG_FREEBSD_SWAP)
return (g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP));
if (tag == VTOC_TAG_FREEBSD_UFS)
diff --git a/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c b/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c
index ff06865e1ac0..b1821a827f27 100644
--- a/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c
+++ b/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c
@@ -50,8 +50,8 @@ xfs_buf_read_flags(xfs_buftarg_t *target, xfs_daddr_t blkno, size_t len, int fla
KASSERT((target != NULL), ("got NULL buftarg_t"));
if (bread(target->specvp, blkno, BBTOB(len), NOCRED, &bp)) {
- printf("bread failed specvp %p blkno %qd BBTOB(len) %ld\n",
- target->specvp, blkno, (long)BBTOB(len));
+ printf("bread failed specvp %p blkno %jd BBTOB(len) %ld\n",
+ target->specvp, (intmax_t)blkno, (long)BBTOB(len));
bp = NULL;
}
diff --git a/sys/i386/acpica/acpi_machdep.c b/sys/i386/acpica/acpi_machdep.c
index 0f5d5b8c3e45..08721279b6cd 100644
--- a/sys/i386/acpica/acpi_machdep.c
+++ b/sys/i386/acpica/acpi_machdep.c
@@ -44,8 +44,6 @@ __FBSDID("$FreeBSD$");
#include <machine/nexusvar.h>
-SYSCTL_DECL(_debug_acpi);
-
uint32_t acpi_resume_beep;
TUNABLE_INT("debug.acpi.resume_beep", &acpi_resume_beep);
SYSCTL_UINT(_debug_acpi, OID_AUTO, resume_beep, CTLFLAG_RW, &acpi_resume_beep,
diff --git a/sys/i386/acpica/acpi_wakecode.S b/sys/i386/acpica/acpi_wakecode.S
index e23b138870f2..27520f3f4fe1 100644
--- a/sys/i386/acpica/acpi_wakecode.S
+++ b/sys/i386/acpica/acpi_wakecode.S
@@ -1,6 +1,8 @@
/*-
* Copyright (c) 2001 Takanori Watanabe <takawata@jp.freebsd.org>
- * Copyright (c) 2001 Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
+ * Copyright (c) 2001-2012 Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
+ * Copyright (c) 2003 Peter Wemm
+ * Copyright (c) 2008-2012 Jung-uk Kim <jkim@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -28,7 +30,9 @@
*/
#include <machine/asmacros.h>
+#include <machine/ppireg.h>
#include <machine/specialreg.h>
+#include <machine/timerreg.h>
#include "assym.s"
@@ -39,221 +43,163 @@
* Depending on the previous sleep state, we may need to initialize more
* of the system (i.e., S3 suspend-to-RAM vs. S4 suspend-to-disk).
*/
- .align 4
- .code16
-wakeup_16:
- nop
- cli
- cld
+ .data /* So we can modify it */
+
+ ALIGN_TEXT
+ .code16
+wakeup_start:
/*
* Set up segment registers for real mode, a small stack for
* any calls we make, and clear any flags.
*/
- movw %cs,%ax
- movw %ax,%ds
- movw %ax,%ss
- movw $PAGE_SIZE,%sp
- pushl $0
- popfl
+ cli /* make sure no interrupts */
+ mov %cs, %ax /* copy %cs to %ds. Remember these */
+ mov %ax, %ds /* are offsets rather than selectors */
+ mov %ax, %ss
+ movw $PAGE_SIZE, %sp
+ xorw %ax, %ax
+ pushw %ax
+ popfw
/* To debug resume hangs, beep the speaker if the user requested. */
- cmpl $1,resume_beep
- jne nobeep
- movb $0xc0,%al
- outb %al,$0x42
- movb $0x04,%al
- outb %al,$0x42
- inb $0x61,%al
- orb $0x3,%al
- outb %al,$0x61
-nobeep:
+ testb $~0, resume_beep - wakeup_start
+ jz 1f
+ movb $0, resume_beep - wakeup_start
+
+ /* Set PIC timer2 to beep. */
+ movb $(TIMER_SEL2 | TIMER_SQWAVE | TIMER_16BIT), %al
+ outb %al, $TIMER_MODE
+
+ /* Turn on speaker. */
+ inb $IO_PPI, %al
+ orb $PIT_SPKR, %al
+ outb %al, $IO_PPI
+
+ /* Set frequency. */
+ movw $0x4c0, %ax
+ outb %al, $TIMER_CNTR2
+ shrw $8, %ax
+ outb %al, $TIMER_CNTR2
+1:
/* Re-initialize video BIOS if the reset_video tunable is set. */
- cmpl $1,reset_video
- jne nobiosreset
- lcall $0xc000,$3
+ testb $~0, reset_video - wakeup_start
+ jz 1f
+ movb $0, reset_video - wakeup_start
+ lcall $0xc000, $3
+
+ /* When we reach here, int 0x10 should be ready. Hide cursor. */
+ movb $0x01, %ah
+ movb $0x20, %ch
+ int $0x10
+
+ /* Re-start in case the previous BIOS call clobbers them. */
+ jmp wakeup_start
+1:
/*
- * Set up segment registers for real mode again in case the
- * previous BIOS call clobbers them.
+ * Find relocation base and patch the gdt descript and ljmp targets
*/
- movw %cs,%ax
- movw %ax,%ds
- movw %ax,%ss
-nobiosreset:
-
- /* Load GDT for real mode. Use 32 bit prefix for addresses >16 MB. */
- lgdtl physical_gdt
-
- /* Restore CR2, CR3 and CR4 */
- movl previous_cr2,%eax
- movl %eax,%cr2
- movl previous_cr3,%eax
- movl %eax,%cr3
- movl previous_cr4,%eax
- movl %eax,%cr4
+ xorl %ebx, %ebx
+ mov %cs, %bx
+ sall $4, %ebx /* %ebx is now our relocation base */
- /* Transfer some values to protected mode with an inline stack */
-#define NVALUES 9
-#define TRANSFER_STACK32(val, idx) \
- movl val,%eax; \
- movl %eax,wakeup_32stack+(idx+1)+(idx*4)
-
- TRANSFER_STACK32(previous_ss, (NVALUES - 9))
- TRANSFER_STACK32(previous_fs, (NVALUES - 8))
- TRANSFER_STACK32(previous_ds, (NVALUES - 7))
- TRANSFER_STACK32(physical_gdt+2, (NVALUES - 6))
- TRANSFER_STACK32(where_to_recover, (NVALUES - 5))
- TRANSFER_STACK32(previous_idt+2, (NVALUES - 4))
- TRANSFER_STACK32(previous_ldt, (NVALUES - 3))
- TRANSFER_STACK32(previous_gdt+2, (NVALUES - 2))
- TRANSFER_STACK32(previous_tr, (NVALUES - 1))
- TRANSFER_STACK32(previous_cr0, (NVALUES - 0))
-
- mov physical_esp,%esi /* to be used in 32bit code */
+ /*
+ * Load the descriptor table pointer. We'll need it when running
+ * in 16-bit protected mode.
+ */
+ lgdtl bootgdtdesc - wakeup_start
/* Enable protected mode */
- movl %cr0,%eax
- orl $(CR0_PE),%eax
- movl %eax,%cr0
+ movl $CR0_PE, %eax
+ mov %eax, %cr0
+ /*
+ * Now execute a far jump to turn on protected mode. This
+ * causes the segment registers to turn into selectors and causes
+ * %cs to be loaded from the gdt.
+ *
+ * The following instruction is:
+ * ljmpl $bootcode32 - bootgdt, $wakeup_32 - wakeup_start
+ * but gas cannot assemble that. And besides, we patch the targets
+ * in early startup and its a little clearer what we are patching.
+ */
wakeup_sw32:
- /* Switch to protected mode by intersegmental jump */
- ljmpl $KCSEL,$0x12345678 /* Code location, to be replaced */
+ .byte 0x66 /* size override to 32 bits */
+ .byte 0xea /* opcode for far jump */
+ .long wakeup_32 - wakeup_start /* offset in segment */
+ .word bootcode32 - bootgdt /* index in gdt for 32 bit code */
/*
- * Now switched to protected mode without paging enabled.
- * %esi: KERNEL stack pointer (physical address)
+ * At this point, we are running in 32 bit legacy protected mode.
*/
+ ALIGN_TEXT
.code32
wakeup_32:
- nop
-
- /* Set up segment registers for protected mode */
- movw $KDSEL,%ax /* KDSEL to segment registers */
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%gs
- movw %ax,%ss
- movw $KPSEL,%ax /* KPSEL to %fs */
- movw %ax,%fs
- movl %esi,%esp /* physical address stack pointer */
-wakeup_32stack:
- /* Operands are overwritten in 16 bit code by TRANSFER_STACK32 macro */
- pushl $0xabcdef09 /* ss + dummy */
- pushl $0xabcdef08 /* fs + gs */
- pushl $0xabcdef07 /* ds + es */
- pushl $0xabcdef06 /* gdt:base (physical address) */
- pushl $0xabcdef05 /* recover address */
- pushl $0xabcdef04 /* idt:base */
- pushl $0xabcdef03 /* ldt + idt:limit */
- pushl $0xabcdef02 /* gdt:base */
- pushl $0xabcdef01 /* TR + gdt:limit */
- pushl $0xabcdef00 /* CR0 */
+ mov $bootdata32 - bootgdt, %eax
+ mov %ax, %ds
- movl %esp,%ebp
-#define CR0_REGISTER 0(%ebp)
-#define TASK_REGISTER 4(%ebp)
-#define PREVIOUS_GDT 6(%ebp)
-#define PREVIOUS_LDT 12(%ebp)
-#define PREVIOUS_IDT 14(%ebp)
-#define RECOVER_ADDR 20(%ebp)
-#define PHYSICAL_GDT_BASE 24(%ebp)
-#define PREVIOUS_DS 28(%ebp)
-#define PREVIOUS_ES 30(%ebp)
-#define PREVIOUS_FS 32(%ebp)
-#define PREVIOUS_GS 34(%ebp)
-#define PREVIOUS_SS 36(%ebp)
+ /* Get PCB and return address. */
+ movl wakeup_pcb - wakeup_start(%ebx), %esi
+ movl wakeup_ret - wakeup_start(%ebx), %edi
- /* Fixup TSS type field */
-#define TSS_TYPEFIX_MASK 0xf9
- xorl %esi,%esi
- movl PHYSICAL_GDT_BASE,%ebx
- movw TASK_REGISTER,%si
- leal (%ebx,%esi),%eax /* get TSS segment descriptor */
- andb $TSS_TYPEFIX_MASK,5(%eax)
-
- /* Prepare to return to sleep/wakeup code point */
- lgdtl PREVIOUS_GDT
- lidtl PREVIOUS_IDT
-
- /* Pack values from the GDT to be loaded into segment registers. */
- movl PREVIOUS_DS,%ebx
- movl PREVIOUS_FS,%ecx
- movl PREVIOUS_SS,%edx
- movw TASK_REGISTER,%si
- shll $16,%esi
- movw PREVIOUS_LDT,%si
- movl RECOVER_ADDR,%edi
-
- /* Enable paging and etc. */
- movl CR0_REGISTER,%eax
- movl %eax,%cr0
-
- /* Flush the prefetch queue */
- jmp 1f
-1: jmp 1f
-1:
+ /* Restore CR4 and CR3. */
+ movl wakeup_cr4 - wakeup_start(%ebx), %eax
+ mov %eax, %cr4
+ movl wakeup_cr3 - wakeup_start(%ebx), %eax
+ mov %eax, %cr3
/*
- * Now we are in kernel virtual memory addressing with the following
- * original register values:
- * %ebx: ds + es
- * %ecx: fs + gs
- * %edx: ss + dummy
- * %esi: LDTR + TR
- * %edi: recover address
- * We'll load these back into the segment registers now.
+ * Finally, switch to long bit mode by enabling paging. We have
+ * to be very careful here because all the segmentation disappears
+ * out from underneath us. The spec says we can depend on the
+ * subsequent pipelined branch to execute, but *only if* everthing
+ * is still identity mapped. If any mappings change, the pipeline
+ * will flush.
*/
- nop
-
- movl %esi,%eax /* LDTR + TR */
- lldt %ax /* load LDT register */
- shrl $16,%eax
- ltr %ax /* load task register */
+ mov %cr0, %eax
+ orl $CR0_PG, %eax
+ mov %eax, %cr0
- /* Restore segment registers */
- movl %ebx,%eax /* ds + es */
- movw %ax,%ds
- shrl $16,%eax
- movw %ax,%es
- movl %ecx,%eax /* fs + gs */
- movw %ax,%fs
- shrl $16,%eax
- movw %ax,%gs
- movl %edx,%eax /* ss */
- movw %ax,%ss
-
- /* Jump to acpi_restorecpu() */
+ jmp 1f
+1:
+ /* Jump to return address. */
jmp *%edi
-/* used in real mode */
-physical_gdt: .word 0
- .long 0
-physical_esp: .long 0
-previous_cr2: .long 0
-previous_cr3: .long 0
-previous_cr4: .long 0
-resume_beep: .long 0
-reset_video: .long 0
-
-/*
- * Transfer from real mode to protected mode. The order of these variables
- * is very important, DO NOT INSERT OR CHANGE unless you know why.
- */
-previous_cr0: .long 0
-previous_tr: .word 0
-previous_gdt: .word 0
- .long 0
-previous_ldt: .word 0
-previous_idt: .word 0
- .long 0
-where_to_recover: .long 0
-previous_ds: .word 0
-previous_es: .word 0
-previous_fs: .word 0
-previous_gs: .word 0
-previous_ss: .word 0
-dummy: .word 0
+ .data
+
+resume_beep:
+ .byte 0
+reset_video:
+ .byte 0
+
+ ALIGN_DATA
+bootgdt:
+ .long 0x00000000
+ .long 0x00000000
+
+bootcode32:
+ .long 0x0000ffff
+ .long 0x00cf9b00
+
+bootdata32:
+ .long 0x0000ffff
+ .long 0x00cf9300
+bootgdtend:
+
+bootgdtdesc:
+ .word bootgdtend - bootgdt /* Length */
+ .long bootgdt - wakeup_start /* Offset plus %ds << 4 */
+
+ ALIGN_DATA
+wakeup_cr4:
+ .long 0
+wakeup_cr3:
+ .long 0
+wakeup_pcb:
+ .long 0
+wakeup_ret:
+ .long 0
+dummy:
diff --git a/sys/i386/acpica/acpi_wakeup.c b/sys/i386/acpica/acpi_wakeup.c
index 31502f7692ed..06dfa24df9e7 100644
--- a/sys/i386/acpica/acpi_wakeup.c
+++ b/sys/i386/acpica/acpi_wakeup.c
@@ -1,6 +1,8 @@
/*-
* Copyright (c) 2001 Takanori Watanabe <takawata@jp.freebsd.org>
- * Copyright (c) 2001 Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
+ * Copyright (c) 2001-2012 Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
+ * Copyright (c) 2003 Peter Wemm
+ * Copyright (c) 2008-2012 Jung-uk Kim <jkim@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,26 +31,29 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
#include <sys/bus.h>
-#include <sys/lock.h>
+#include <sys/eventhandler.h>
+#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/memrange.h>
-#include <sys/proc.h>
-#include <sys/sysctl.h>
+#include <sys/smp.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/bus.h>
-#include <machine/cpufunc.h>
+#include <machine/clock.h>
#include <machine/intr_machdep.h>
#include <x86/mca.h>
-#include <machine/segments.h>
+#include <machine/pcb.h>
+#include <machine/pmap.h>
+#include <machine/specialreg.h>
+#include <machine/md_var.h>
+
+#ifdef SMP
+#include <x86/apicreg.h>
+#include <machine/smp.h>
+#include <machine/vmparam.h>
+#endif
#include <contrib/dev/acpica/include/acpi.h>
@@ -57,164 +62,186 @@ __FBSDID("$FreeBSD$");
#include "acpi_wakecode.h"
#include "acpi_wakedata.h"
-/* Make sure the code is less than one page and leave room for the stack. */
+/* Make sure the code is less than a page and leave room for the stack. */
CTASSERT(sizeof(wakecode) < PAGE_SIZE - 1024);
-#ifndef _SYS_CDEFS_H_
-#error this file needs sys/cdefs.h as a prerequisite
+extern int acpi_resume_beep;
+extern int acpi_reset_video;
+
+#ifdef SMP
+extern struct pcb **susppcbs;
+#else
+static struct pcb **susppcbs;
+#endif
+
+static void *acpi_alloc_wakeup_handler(void);
+static void acpi_stop_beep(void *);
+
+#ifdef SMP
+static int acpi_wakeup_ap(struct acpi_softc *, int);
+static void acpi_wakeup_cpus(struct acpi_softc *, const cpuset_t *);
#endif
-extern uint32_t acpi_resume_beep;
-extern uint32_t acpi_reset_video;
-extern void initializecpu(void);
-
-static struct region_descriptor __used saved_idt, saved_gdt;
-static struct region_descriptor *p_gdt;
-static uint16_t __used saved_ldt;
-
-static uint32_t __used r_eax, r_ebx, r_ecx, r_edx, r_ebp, r_esi, r_edi,
- r_efl, r_cr0, r_cr2, r_cr3, r_cr4, ret_addr;
-
-static uint16_t __used r_cs, r_ds, r_es, r_fs, r_gs, r_ss, r_tr;
-static uint32_t __used r_esp;
-
-static void acpi_printcpu(void);
-static void acpi_realmodeinst(void *arg, bus_dma_segment_t *segs,
- int nsegs, int error);
-static void acpi_alloc_wakeup_handler(void);
-
-/* XXX shut gcc up */
-extern int acpi_savecpu(void);
-extern int acpi_restorecpu(void);
-
-#ifdef __GNUCLIKE_ASM
-__asm__(" \n\
- .text \n\
- .p2align 2, 0x90 \n\
- .type acpi_restorecpu, @function\n\
-acpi_restorecpu: \n\
- .align 4 \n\
- movl r_eax,%eax \n\
- movl r_ebx,%ebx \n\
- movl r_ecx,%ecx \n\
- movl r_edx,%edx \n\
- movl r_ebp,%ebp \n\
- movl r_esi,%esi \n\
- movl r_edi,%edi \n\
- movl r_esp,%esp \n\
- \n\
- pushl r_efl \n\
- popfl \n\
- \n\
- movl ret_addr,%eax \n\
- movl %eax,(%esp) \n\
- xorl %eax,%eax \n\
- ret \n\
- \n\
- .text \n\
- .p2align 2, 0x90 \n\
- .type acpi_savecpu, @function \n\
-acpi_savecpu: \n\
- movw %cs,r_cs \n\
- movw %ds,r_ds \n\
- movw %es,r_es \n\
- movw %fs,r_fs \n\
- movw %gs,r_gs \n\
- movw %ss,r_ss \n\
- \n\
- movl %eax,r_eax \n\
- movl %ebx,r_ebx \n\
- movl %ecx,r_ecx \n\
- movl %edx,r_edx \n\
- movl %ebp,r_ebp \n\
- movl %esi,r_esi \n\
- movl %edi,r_edi \n\
- \n\
- movl %cr0,%eax \n\
- movl %eax,r_cr0 \n\
- movl %cr2,%eax \n\
- movl %eax,r_cr2 \n\
- movl %cr3,%eax \n\
- movl %eax,r_cr3 \n\
- movl %cr4,%eax \n\
- movl %eax,r_cr4 \n\
- \n\
- pushfl \n\
- popl r_efl \n\
- \n\
- movl %esp,r_esp \n\
- \n\
- sgdt saved_gdt \n\
- sidt saved_idt \n\
- sldt saved_ldt \n\
- str r_tr \n\
- \n\
- movl (%esp),%eax \n\
- movl %eax,ret_addr \n\
- movl $1,%eax \n\
- ret \n\
-");
-#endif /* __GNUCLIKE_ASM */
+#define ACPI_PAGETABLES 0
+#define WAKECODE_VADDR(sc) ((sc)->acpi_wakeaddr + (ACPI_PAGETABLES * PAGE_SIZE))
+#define WAKECODE_PADDR(sc) ((sc)->acpi_wakephys + (ACPI_PAGETABLES * PAGE_SIZE))
+#define WAKECODE_FIXUP(offset, type, val) do { \
+ type *addr; \
+ addr = (type *)(WAKECODE_VADDR(sc) + offset); \
+ *addr = val; \
+} while (0)
static void
-acpi_printcpu(void)
+acpi_stop_beep(void *arg)
{
- printf("======== acpi_printcpu() debug dump ========\n");
- printf("gdt[%04x:%08x] idt[%04x:%08x] ldt[%04x] tr[%04x] efl[%08x]\n",
- saved_gdt.rd_limit, saved_gdt.rd_base,
- saved_idt.rd_limit, saved_idt.rd_base,
- saved_ldt, r_tr, r_efl);
- printf("eax[%08x] ebx[%08x] ecx[%08x] edx[%08x]\n",
- r_eax, r_ebx, r_ecx, r_edx);
- printf("esi[%08x] edi[%08x] ebp[%08x] esp[%08x]\n",
- r_esi, r_edi, r_ebp, r_esp);
- printf("cr0[%08x] cr2[%08x] cr3[%08x] cr4[%08x]\n",
- r_cr0, r_cr2, r_cr3, r_cr4);
- printf("cs[%04x] ds[%04x] es[%04x] fs[%04x] gs[%04x] ss[%04x]\n",
- r_cs, r_ds, r_es, r_fs, r_gs, r_ss);
+
+ if (acpi_resume_beep != 0)
+ timer_spkr_release();
}
-#define WAKECODE_FIXUP(offset, type, val) do { \
- type *addr; \
- addr = (type *)(sc->acpi_wakeaddr + offset); \
- *addr = val; \
-} while (0)
+#ifdef SMP
+static int
+acpi_wakeup_ap(struct acpi_softc *sc, int cpu)
+{
+ int vector = (WAKECODE_PADDR(sc) >> 12) & 0xff;
+ int apic_id = cpu_apic_ids[cpu];
+ int ms;
-#define WAKECODE_BCOPY(offset, type, val) do { \
- void *addr; \
- addr = (void *)(sc->acpi_wakeaddr + offset); \
- bcopy(&(val), addr, sizeof(type)); \
-} while (0)
+ WAKECODE_FIXUP(wakeup_pcb, struct pcb *, susppcbs[cpu]);
+
+ /* do an INIT IPI: assert RESET */
+ lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE |
+ APIC_LEVEL_ASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, apic_id);
+
+ /* wait for pending status end */
+ lapic_ipi_wait(-1);
+
+ /* do an INIT IPI: deassert RESET */
+ lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL |
+ APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0);
+
+ /* wait for pending status end */
+ DELAY(10000); /* wait ~10mS */
+ lapic_ipi_wait(-1);
+
+ /*
+ * next we do a STARTUP IPI: the previous INIT IPI might still be
+ * latched, (P5 bug) this 1st STARTUP would then terminate
+ * immediately, and the previously started INIT IPI would continue. OR
+ * the previous INIT IPI has already run. and this STARTUP IPI will
+ * run. OR the previous INIT IPI was ignored. and this STARTUP IPI
+ * will run.
+ */
+
+ /* do a STARTUP IPI */
+ lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE |
+ APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_STARTUP |
+ vector, apic_id);
+ lapic_ipi_wait(-1);
+ DELAY(200); /* wait ~200uS */
+
+ /*
+ * finally we do a 2nd STARTUP IPI: this 2nd STARTUP IPI should run IF
+ * the previous STARTUP IPI was cancelled by a latched INIT IPI. OR
+ * this STARTUP IPI will be ignored, as only ONE STARTUP IPI is
+ * recognized after hardware RESET or INIT IPI.
+ */
+
+ lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE |
+ APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_STARTUP |
+ vector, apic_id);
+ lapic_ipi_wait(-1);
+ DELAY(200); /* wait ~200uS */
+
+ /* Wait up to 5 seconds for it to start. */
+ for (ms = 0; ms < 5000; ms++) {
+ if (susppcbs[cpu]->pcb_eip == 0)
+ return (1); /* return SUCCESS */
+ DELAY(1000);
+ }
+ return (0); /* return FAILURE */
+}
+
+#define WARMBOOT_TARGET 0
+#define WARMBOOT_OFF (KERNBASE + 0x0467)
+#define WARMBOOT_SEG (KERNBASE + 0x0469)
+
+#define CMOS_REG (0x70)
+#define CMOS_DATA (0x71)
+#define BIOS_RESET (0x0f)
+#define BIOS_WARM (0x0a)
-/* Turn off bits 1&2 of the PIT, stopping the beep. */
static void
-acpi_stop_beep(void *arg)
+acpi_wakeup_cpus(struct acpi_softc *sc, const cpuset_t *wakeup_cpus)
{
- outb(0x61, inb(0x61) & ~0x3);
+ uint32_t mpbioswarmvec;
+ int cpu;
+ u_char mpbiosreason;
+
+ /* save the current value of the warm-start vector */
+ mpbioswarmvec = *((uint32_t *)WARMBOOT_OFF);
+ outb(CMOS_REG, BIOS_RESET);
+ mpbiosreason = inb(CMOS_DATA);
+
+ /* setup a vector to our boot code */
+ *((volatile u_short *)WARMBOOT_OFF) = WARMBOOT_TARGET;
+ *((volatile u_short *)WARMBOOT_SEG) = WAKECODE_PADDR(sc) >> 4;
+ outb(CMOS_REG, BIOS_RESET);
+ outb(CMOS_DATA, BIOS_WARM); /* 'warm-start' */
+
+ /* Wake up each AP. */
+ for (cpu = 1; cpu < mp_ncpus; cpu++) {
+ if (!CPU_ISSET(cpu, wakeup_cpus))
+ continue;
+ if (acpi_wakeup_ap(sc, cpu) == 0) {
+ /* restore the warmstart vector */
+ *(uint32_t *)WARMBOOT_OFF = mpbioswarmvec;
+ panic("acpi_wakeup: failed to resume AP #%d (PHY #%d)",
+ cpu, cpu_apic_ids[cpu]);
+ }
+ }
+
+ /* restore the warmstart vector */
+ *(uint32_t *)WARMBOOT_OFF = mpbioswarmvec;
+
+ outb(CMOS_REG, BIOS_RESET);
+ outb(CMOS_DATA, mpbiosreason);
}
+#endif
int
acpi_sleep_machdep(struct acpi_softc *sc, int state)
{
- ACPI_STATUS status;
- struct pmap *pm;
- int ret;
- uint32_t cr3;
- u_long ef;
+#ifdef SMP
+ cpuset_t wakeup_cpus;
+#endif
+ register_t cr3, rf;
+ ACPI_STATUS status;
+ struct pmap *pm;
+ int ret;
ret = -1;
- if (sc->acpi_wakeaddr == 0)
+
+ if (sc->acpi_wakeaddr == 0ul)
return (ret);
- AcpiSetFirmwareWakingVector(sc->acpi_wakephys);
+#ifdef SMP
+ wakeup_cpus = all_cpus;
+ CPU_CLR(PCPU_GET(cpuid), &wakeup_cpus);
+#endif
+
+ if (acpi_resume_beep != 0)
+ timer_spkr_acquire();
- ef = intr_disable();
+ AcpiSetFirmwareWakingVector(WAKECODE_PADDR(sc));
+
+ rf = intr_disable();
intr_suspend();
/*
- * Temporarily switch to the kernel pmap because it provides an
- * identity mapping (setup at boot) for the low physical memory
- * region containing the wakeup code.
+ * Temporarily switch to the kernel pmap because it provides
+ * an identity mapping (setup at boot) for the low physical
+ * memory region containing the wakeup code.
*/
pm = kernel_pmap;
cr3 = rcr3();
@@ -224,39 +251,22 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state)
load_cr3(vtophys(pm->pm_pdir));
#endif
- ret_addr = 0;
- if (acpi_savecpu()) {
- /* Execute Sleep */
-
- p_gdt = (struct region_descriptor *)
- (sc->acpi_wakeaddr + physical_gdt);
- p_gdt->rd_limit = saved_gdt.rd_limit;
- p_gdt->rd_base = vtophys(saved_gdt.rd_base);
-
- WAKECODE_FIXUP(physical_esp, uint32_t, vtophys(r_esp));
- WAKECODE_FIXUP(previous_cr0, uint32_t, r_cr0);
- WAKECODE_FIXUP(previous_cr2, uint32_t, r_cr2);
- WAKECODE_FIXUP(previous_cr3, uint32_t, r_cr3);
- WAKECODE_FIXUP(previous_cr4, uint32_t, r_cr4);
-
- WAKECODE_FIXUP(resume_beep, uint32_t, acpi_resume_beep);
- WAKECODE_FIXUP(reset_video, uint32_t, acpi_reset_video);
-
- WAKECODE_FIXUP(previous_tr, uint16_t, r_tr);
- WAKECODE_BCOPY(previous_gdt, struct region_descriptor, saved_gdt);
- WAKECODE_FIXUP(previous_ldt, uint16_t, saved_ldt);
- WAKECODE_BCOPY(previous_idt, struct region_descriptor, saved_idt);
+ if (suspendctx(susppcbs[0])) {
+#ifdef SMP
+ if (!CPU_EMPTY(&wakeup_cpus) &&
+ suspend_cpus(wakeup_cpus) == 0) {
+ device_printf(sc->acpi_dev, "Failed to suspend APs\n");
+ goto out;
+ }
+#endif
- WAKECODE_FIXUP(where_to_recover, void *, acpi_restorecpu);
+ WAKECODE_FIXUP(resume_beep, uint8_t, (acpi_resume_beep != 0));
+ WAKECODE_FIXUP(reset_video, uint8_t, (acpi_reset_video != 0));
- WAKECODE_FIXUP(previous_ds, uint16_t, r_ds);
- WAKECODE_FIXUP(previous_es, uint16_t, r_es);
- WAKECODE_FIXUP(previous_fs, uint16_t, r_fs);
- WAKECODE_FIXUP(previous_gs, uint16_t, r_gs);
- WAKECODE_FIXUP(previous_ss, uint16_t, r_ss);
+ WAKECODE_FIXUP(wakeup_cr4, register_t, susppcbs[0]->pcb_cr4);
+ WAKECODE_FIXUP(wakeup_cr3, register_t, susppcbs[0]->pcb_cr3);
- if (bootverbose)
- acpi_printcpu();
+ WAKECODE_FIXUP(wakeup_pcb, struct pcb *, susppcbs[0]);
/* Call ACPICA to enter the desired sleep state */
if (state == ACPI_STATE_S4 && sc->acpi_s4bios)
@@ -266,8 +276,8 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state)
if (status != AE_OK) {
device_printf(sc->acpi_dev,
- "AcpiEnterSleepState failed - %s\n",
- AcpiFormatException(status));
+ "AcpiEnterSleepState failed - %s\n",
+ AcpiFormatException(status));
goto out;
}
@@ -275,97 +285,96 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state)
ia32_pause();
} else {
pmap_init_pat();
+ initializecpu();
PCPU_SET(switchtime, 0);
PCPU_SET(switchticks, ticks);
- if (bootverbose) {
- acpi_savecpu();
- acpi_printcpu();
- }
+#ifdef SMP
+ if (!CPU_EMPTY(&wakeup_cpus))
+ acpi_wakeup_cpus(sc, &wakeup_cpus);
+#endif
ret = 0;
}
out:
+#ifdef SMP
+ if (!CPU_EMPTY(&wakeup_cpus))
+ restart_cpus(wakeup_cpus);
+#endif
+
load_cr3(cr3);
mca_resume();
intr_resume();
- intr_restore(ef);
+ intr_restore(rf);
+
+ AcpiSetFirmwareWakingVector(0);
if (ret == 0 && mem_range_softc.mr_op != NULL &&
mem_range_softc.mr_op->reinit != NULL)
mem_range_softc.mr_op->reinit(&mem_range_softc);
- /* If we beeped, turn it off after a delay. */
- if (acpi_resume_beep)
- timeout(acpi_stop_beep, NULL, 3 * hz);
-
return (ret);
}
-static bus_dma_tag_t acpi_waketag;
-static bus_dmamap_t acpi_wakemap;
-static vm_offset_t acpi_wakeaddr;
-
-static void
+static void *
acpi_alloc_wakeup_handler(void)
{
- void *wakeaddr;
-
- if (!cold)
- return;
+ void *wakeaddr;
+ int i;
/*
* Specify the region for our wakeup code. We want it in the low 1 MB
- * region, excluding video memory and above (0xa0000). We ask for
- * it to be page-aligned, just to be safe.
+ * region, excluding real mode IVT (0-0x3ff), BDA (0x400-0x4ff), EBDA
+ * (less than 128KB, below 0xa0000, must be excluded by SMAP and DSDT),
+ * and ROM area (0xa0000 and above). The temporary page tables must be
+ * page-aligned.
*/
- if (bus_dma_tag_create(/*parent*/ NULL,
- /*alignment*/ PAGE_SIZE, /*no boundary*/ 0,
- /*lowaddr*/ 0x9ffff, /*highaddr*/ BUS_SPACE_MAXADDR, NULL, NULL,
- /*maxsize*/ PAGE_SIZE, /*segments*/ 1, /*maxsegsize*/ PAGE_SIZE,
- 0, busdma_lock_mutex, &Giant, &acpi_waketag) != 0) {
- printf("acpi_alloc_wakeup_handler: can't create wake tag\n");
- return;
+ wakeaddr = contigmalloc((ACPI_PAGETABLES + 1) * PAGE_SIZE, M_DEVBUF,
+ M_NOWAIT, 0x500, 0xa0000, PAGE_SIZE, 0ul);
+ if (wakeaddr == NULL) {
+ printf("%s: can't alloc wake memory\n", __func__);
+ return (NULL);
}
- if (bus_dmamem_alloc(acpi_waketag, &wakeaddr, BUS_DMA_NOWAIT,
- &acpi_wakemap) != 0) {
- printf("acpi_alloc_wakeup_handler: can't alloc wake memory\n");
- return;
+ if (EVENTHANDLER_REGISTER(power_resume, acpi_stop_beep, NULL,
+ EVENTHANDLER_PRI_LAST) == NULL) {
+ printf("%s: can't register event handler\n", __func__);
+ contigfree(wakeaddr, (ACPI_PAGETABLES + 1) * PAGE_SIZE, M_DEVBUF);
+ return (NULL);
}
- acpi_wakeaddr = (vm_offset_t)wakeaddr;
-}
-
-SYSINIT(acpiwakeup, SI_SUB_KMEM, SI_ORDER_ANY, acpi_alloc_wakeup_handler, 0);
-
-static void
-acpi_realmodeinst(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
-{
- struct acpi_softc *sc;
- uint32_t *addr;
-
- /* Overwrite the ljmp target with the real address */
- sc = arg;
- sc->acpi_wakephys = segs[0].ds_addr;
- addr = (uint32_t *)&wakecode[wakeup_sw32 + 2];
- *addr = sc->acpi_wakephys + wakeup_32;
-
- /* Copy the wake code into our low page and save its physical addr. */
- bcopy(wakecode, (void *)sc->acpi_wakeaddr, sizeof(wakecode));
- if (bootverbose) {
- device_printf(sc->acpi_dev, "wakeup code va %#x pa %#jx\n",
- acpi_wakeaddr, (uintmax_t)sc->acpi_wakephys);
+ susppcbs = malloc(mp_ncpus * sizeof(*susppcbs), M_DEVBUF, M_WAITOK);
+ for (i = 0; i < mp_ncpus; i++) {
+ susppcbs[i] = malloc(sizeof(**susppcbs), M_DEVBUF, M_WAITOK);
}
+
+ return (wakeaddr);
}
void
acpi_install_wakeup_handler(struct acpi_softc *sc)
{
- if (acpi_wakeaddr == 0)
+ static void *wakeaddr = NULL;
+
+ if (wakeaddr != NULL)
+ return;
+
+ wakeaddr = acpi_alloc_wakeup_handler();
+ if (wakeaddr == NULL)
return;
- sc->acpi_waketag = acpi_waketag;
- sc->acpi_wakeaddr = acpi_wakeaddr;
- sc->acpi_wakemap = acpi_wakemap;
+ sc->acpi_wakeaddr = (vm_offset_t)wakeaddr;
+ sc->acpi_wakephys = vtophys(wakeaddr);
- bus_dmamap_load(sc->acpi_waketag, sc->acpi_wakemap,
- (void *)sc->acpi_wakeaddr, PAGE_SIZE, acpi_realmodeinst, sc, 0);
+ bcopy(wakecode, (void *)WAKECODE_VADDR(sc), sizeof(wakecode));
+
+ /* Patch GDT base address, ljmp target. */
+ WAKECODE_FIXUP((bootgdtdesc + 2), uint32_t,
+ WAKECODE_PADDR(sc) + bootgdt);
+ WAKECODE_FIXUP((wakeup_sw32 + 2), uint32_t,
+ WAKECODE_PADDR(sc) + wakeup_32);
+
+ /* Save pointers to some global data. */
+ WAKECODE_FIXUP(wakeup_ret, void *, resumectx);
+
+ if (bootverbose)
+ device_printf(sc->acpi_dev, "wakeup code va %#x pa %#jx\n",
+ sc->acpi_wakeaddr, (uintmax_t)sc->acpi_wakephys);
}
diff --git a/sys/i386/conf/XEN b/sys/i386/conf/XEN
index 80d4113de942..0a289ea5daaa 100644
--- a/sys/i386/conf/XEN
+++ b/sys/i386/conf/XEN
@@ -7,7 +7,7 @@ cpu I686_CPU
ident XEN
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
-makeoptions WITHOUT_MODULES="aha ahb amd cxgb dpt drm hptmv ida malo mps mwl nve sound sym trm xfs"
+makeoptions WITHOUT_MODULES="aha ahb amd cxgb dpt drm drm2 hptmv ida malo mps mwl nve sound sym trm xfs"
options SCHED_ULE # ULE scheduler
options PREEMPTION # Enable kernel thread preemption
diff --git a/sys/i386/i386/apic_vector.s b/sys/i386/i386/apic_vector.s
index 86e78c4beb2e..618436d830ac 100644
--- a/sys/i386/i386/apic_vector.s
+++ b/sys/i386/i386/apic_vector.s
@@ -334,6 +334,26 @@ IDTVEC(cpustop)
iret
/*
+ * Executed by a CPU when it receives an IPI_SUSPEND from another CPU.
+ */
+#ifndef XEN
+ .text
+ SUPERALIGN_TEXT
+IDTVEC(cpususpend)
+ PUSH_FRAME
+ SET_KERNEL_SREGS
+ cld
+
+ movl lapic, %eax
+ movl $0, LA_EOI(%eax) /* End Of Interrupt to APIC */
+
+ call cpususpend_handler
+
+ POP_FRAME
+ jmp doreti_iret
+#endif
+
+/*
* Executed by a CPU when it receives a RENDEZVOUS IPI from another CPU.
*
* - Calls the generic rendezvous action function.
diff --git a/sys/i386/i386/bios.c b/sys/i386/i386/bios.c
index a6d09785337e..ffe42bae8d77 100644
--- a/sys/i386/i386/bios.c
+++ b/sys/i386/i386/bios.c
@@ -372,9 +372,11 @@ bios16(struct bios_args *args, char *fmt, ...)
break;
default:
+ va_end(ap);
return (EINVAL);
}
}
+ va_end(ap);
if (flags & BIOSARGS_FLAG) {
if (arg_end - arg_start > ctob(16))
@@ -448,9 +450,11 @@ bios16(struct bios_args *args, char *fmt, ...)
break;
default:
+ va_end(ap);
return (EINVAL);
}
}
+ va_end(ap);
set_bios_selectors(&args->seg, flags);
bioscall_vector.vec16.offset = (u_short)args->entry;
diff --git a/sys/i386/i386/genassym.c b/sys/i386/i386/genassym.c
index 9acc4f4e2726..2394c09f4800 100644
--- a/sys/i386/i386/genassym.c
+++ b/sys/i386/i386/genassym.c
@@ -121,7 +121,10 @@ ASSYM(VM_MAXUSER_ADDRESS, VM_MAXUSER_ADDRESS);
ASSYM(KERNBASE, KERNBASE);
ASSYM(KERNLOAD, KERNLOAD);
ASSYM(MCLBYTES, MCLBYTES);
+ASSYM(PCB_CR0, offsetof(struct pcb, pcb_cr0));
+ASSYM(PCB_CR2, offsetof(struct pcb, pcb_cr2));
ASSYM(PCB_CR3, offsetof(struct pcb, pcb_cr3));
+ASSYM(PCB_CR4, offsetof(struct pcb, pcb_cr4));
ASSYM(PCB_EDI, offsetof(struct pcb, pcb_edi));
ASSYM(PCB_ESI, offsetof(struct pcb, pcb_esi));
ASSYM(PCB_EBP, offsetof(struct pcb, pcb_ebp));
@@ -130,7 +133,11 @@ ASSYM(PCB_EBX, offsetof(struct pcb, pcb_ebx));
ASSYM(PCB_EIP, offsetof(struct pcb, pcb_eip));
ASSYM(TSS_ESP0, offsetof(struct i386tss, tss_esp0));
+ASSYM(PCB_DS, offsetof(struct pcb, pcb_ds));
+ASSYM(PCB_ES, offsetof(struct pcb, pcb_es));
+ASSYM(PCB_FS, offsetof(struct pcb, pcb_fs));
ASSYM(PCB_GS, offsetof(struct pcb, pcb_gs));
+ASSYM(PCB_SS, offsetof(struct pcb, pcb_ss));
ASSYM(PCB_DR0, offsetof(struct pcb, pcb_dr0));
ASSYM(PCB_DR1, offsetof(struct pcb, pcb_dr1));
ASSYM(PCB_DR2, offsetof(struct pcb, pcb_dr2));
@@ -143,6 +150,7 @@ ASSYM(PCB_DBREGS, PCB_DBREGS);
ASSYM(PCB_EXT, offsetof(struct pcb, pcb_ext));
ASSYM(PCB_FSD, offsetof(struct pcb, pcb_fsd));
+ASSYM(PCB_GSD, offsetof(struct pcb, pcb_gsd));
ASSYM(PCB_VM86, offsetof(struct pcb, pcb_vm86));
ASSYM(PCB_FLAGS, offsetof(struct pcb, pcb_flags));
ASSYM(PCB_SAVEFPU, offsetof(struct pcb, pcb_save));
@@ -152,6 +160,11 @@ ASSYM(PCB_ONFAULT, offsetof(struct pcb, pcb_onfault));
ASSYM(PCB_SIZE, sizeof(struct pcb));
ASSYM(PCB_VM86CALL, PCB_VM86CALL);
+ASSYM(PCB_GDT, offsetof(struct pcb, pcb_gdt));
+ASSYM(PCB_IDT, offsetof(struct pcb, pcb_idt));
+ASSYM(PCB_LDT, offsetof(struct pcb, pcb_ldt));
+ASSYM(PCB_TR, offsetof(struct pcb, pcb_tr));
+
ASSYM(TF_TRAPNO, offsetof(struct trapframe, tf_trapno));
ASSYM(TF_ERR, offsetof(struct trapframe, tf_err));
ASSYM(TF_EIP, offsetof(struct trapframe, tf_eip));
diff --git a/sys/i386/i386/initcpu.c b/sys/i386/i386/initcpu.c
index ec77adbea91d..97454bc112cc 100644
--- a/sys/i386/i386/initcpu.c
+++ b/sys/i386/i386/initcpu.c
@@ -48,7 +48,6 @@ __FBSDID("$FreeBSD$");
#define CPU_ENABLE_SSE
#endif
-void initializecpu(void);
#if defined(I586_CPU) && defined(CPU_WT_ALLOC)
void enable_K5_wt_alloc(void);
void enable_K6_wt_alloc(void);
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index fb6ad62faceb..f0546b0e7fa1 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -180,7 +180,6 @@ extern void dblfault_handler(void);
extern void printcpuinfo(void); /* XXX header file */
extern void finishidentcpu(void);
extern void panicifcpuunsupported(void);
-extern void initializecpu(void);
#define CS_SECURE(cs) (ISPL(cs) == SEL_UPL)
#define EFL_SECURE(ef, oef) ((((ef) ^ (oef)) & ~PSL_USERCHANGE) == 0)
diff --git a/sys/i386/i386/mp_machdep.c b/sys/i386/i386/mp_machdep.c
index 0bf6e2246a5d..d70b4be2ad48 100644
--- a/sys/i386/i386/mp_machdep.c
+++ b/sys/i386/i386/mp_machdep.c
@@ -146,6 +146,7 @@ void *bootstacks[MAXCPU];
static void *dpcpu;
struct pcb stoppcbs[MAXCPU];
+struct pcb **susppcbs = NULL;
/* Variables needed for SMP tlb shootdown. */
vm_offset_t smp_tlb_addr1;
@@ -587,6 +588,9 @@ cpu_mp_start(void)
setidt(IPI_STOP, IDTVEC(cpustop),
SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
+ /* Install an inter-CPU IPI for CPU suspend/resume */
+ setidt(IPI_SUSPEND, IDTVEC(cpususpend),
+ SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
/* Set boot_cpu_id if needed. */
if (boot_cpu_id == -1) {
@@ -1498,6 +1502,38 @@ cpustop_handler(void)
}
/*
+ * Handle an IPI_SUSPEND by saving our current context and spinning until we
+ * are resumed.
+ */
+void
+cpususpend_handler(void)
+{
+ u_int cpu;
+
+ cpu = PCPU_GET(cpuid);
+
+ if (suspendctx(susppcbs[cpu])) {
+ wbinvd();
+ CPU_SET_ATOMIC(cpu, &stopped_cpus);
+ } else {
+ pmap_init_pat();
+ PCPU_SET(switchtime, 0);
+ PCPU_SET(switchticks, ticks);
+ susppcbs[cpu]->pcb_eip = 0;
+ }
+
+ /* Wait for resume */
+ while (!CPU_ISSET(cpu, &started_cpus))
+ ia32_pause();
+
+ CPU_CLR_ATOMIC(cpu, &started_cpus);
+ CPU_CLR_ATOMIC(cpu, &stopped_cpus);
+
+ /* Resume MCA and local APIC */
+ mca_resume();
+ lapic_setup(0);
+}
+/*
* This is called once the rest of the system is up and running and we're
* ready to let the AP's out of the pen.
*/
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 89e7a2f820f4..a94564d25765 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -118,6 +118,7 @@ __FBSDID("$FreeBSD$");
#include <sys/msgbuf.h>
#include <sys/mutex.h>
#include <sys/proc.h>
+#include <sys/rwlock.h>
#include <sys/sf_buf.h>
#include <sys/sx.h>
#include <sys/vmmeter.h>
@@ -233,8 +234,10 @@ static int pat_index[PAT_INDEX_SIZE]; /* cache mode to PAT index conversion */
/*
* Data for the pv entry allocation mechanism
*/
+static TAILQ_HEAD(pch, pv_chunk) pv_chunks = TAILQ_HEAD_INITIALIZER(pv_chunks);
static int pv_entry_count = 0, pv_entry_max = 0, pv_entry_high_water = 0;
static struct md_page *pv_table;
+static struct rwlock pvh_global_lock;
static int shpgperproc = PMAP_SHPGPERPROC;
struct pv_chunk *pv_chunkbase; /* KVA block for pv_chunks */
@@ -284,7 +287,7 @@ SYSCTL_INT(_debug, OID_AUTO, PMAP1unchanged, CTLFLAG_RD,
static struct mtx PMAP2mutex;
static void free_pv_entry(pmap_t pmap, pv_entry_t pv);
-static pv_entry_t get_pv_entry(pmap_t locked_pmap, int try);
+static pv_entry_t get_pv_entry(pmap_t pmap, boolean_t try);
static void pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa);
static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa);
static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa);
@@ -391,6 +394,12 @@ pmap_bootstrap(vm_paddr_t firstaddr)
kernel_pmap->pm_root = NULL;
CPU_FILL(&kernel_pmap->pm_active); /* don't allow deactivation */
TAILQ_INIT(&kernel_pmap->pm_pvchunk);
+
+ /*
+ * Initialize the global pv list lock.
+ */
+ rw_init(&pvh_global_lock, "pvh global");
+
LIST_INIT(&allpmaps);
/*
@@ -1275,7 +1284,7 @@ invlcaddr(void *caddr)
* scans are across different pmaps. It is very wasteful
* to do an entire invltlb for checking a single mapping.
*
- * If the given pmap is not the current pmap, vm_page_queue_mtx
+ * If the given pmap is not the current pmap, pvh_global_lock
* must be held and curthread pinned to a CPU.
*/
static pt_entry_t *
@@ -1291,7 +1300,7 @@ pmap_pte_quick(pmap_t pmap, vm_offset_t va)
/* are we current address space or kernel? */
if (pmap_is_current(pmap))
return (vtopte(va));
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
KASSERT(curthread->td_pinned > 0, ("curthread not pinned"));
newpf = *pde & PG_FRAME;
if ((*PMAP1 & PG_FRAME) != newpf) {
@@ -1840,9 +1849,9 @@ _pmap_allocpte(pmap_t pmap, u_int ptepindex, int flags)
VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) {
if (flags & M_WAITOK) {
PMAP_UNLOCK(pmap);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
VM_WAIT;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
}
@@ -2143,6 +2152,7 @@ pmap_growkernel(vm_offset_t addr)
CTASSERT(sizeof(struct pv_chunk) == PAGE_SIZE);
CTASSERT(_NPCM == 11);
+CTASSERT(_NPCPV == 336);
static __inline struct pv_chunk *
pv_to_chunk(pv_entry_t pv)
@@ -2156,7 +2166,7 @@ pv_to_chunk(pv_entry_t pv)
#define PC_FREE0_9 0xfffffffful /* Free values for index 0 through 9 */
#define PC_FREE10 0x0000fffful /* Free values for index 10 */
-static uint32_t pc_freemask[11] = {
+static uint32_t pc_freemask[_NPCM] = {
PC_FREE0_9, PC_FREE0_9, PC_FREE0_9,
PC_FREE0_9, PC_FREE0_9, PC_FREE0_9,
PC_FREE0_9, PC_FREE0_9, PC_FREE0_9,
@@ -2187,72 +2197,146 @@ SYSCTL_LONG(_vm_pmap, OID_AUTO, pv_entry_allocs, CTLFLAG_RD, &pv_entry_allocs, 0
"Current number of pv entry allocs");
SYSCTL_INT(_vm_pmap, OID_AUTO, pv_entry_spare, CTLFLAG_RD, &pv_entry_spare, 0,
"Current number of spare pv entries");
-
-static int pmap_collect_inactive, pmap_collect_active;
-
-SYSCTL_INT(_vm_pmap, OID_AUTO, pmap_collect_inactive, CTLFLAG_RD, &pmap_collect_inactive, 0,
- "Current number times pmap_collect called on inactive queue");
-SYSCTL_INT(_vm_pmap, OID_AUTO, pmap_collect_active, CTLFLAG_RD, &pmap_collect_active, 0,
- "Current number times pmap_collect called on active queue");
#endif
/*
* We are in a serious low memory condition. Resort to
* drastic measures to free some pages so we can allocate
- * another pv entry chunk. This is normally called to
- * unmap inactive pages, and if necessary, active pages.
+ * another pv entry chunk.
*/
-static void
-pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq)
+static vm_page_t
+pmap_pv_reclaim(pmap_t locked_pmap)
{
+ struct pch newtail;
+ struct pv_chunk *pc;
+ struct md_page *pvh;
pd_entry_t *pde;
pmap_t pmap;
pt_entry_t *pte, tpte;
- pv_entry_t next_pv, pv;
+ pv_entry_t pv;
vm_offset_t va;
- vm_page_t m, free;
-
+ vm_page_t free, m, m_pc;
+ uint32_t inuse, freemask;
+ int bit, field, freed;
+
+ PMAP_LOCK_ASSERT(locked_pmap, MA_OWNED);
+ pmap = NULL;
+ free = m_pc = NULL;
+ TAILQ_INIT(&newtail);
sched_pin();
- TAILQ_FOREACH(m, &vpq->pl, pageq) {
- if ((m->flags & PG_MARKER) != 0 || m->hold_count || m->busy)
- continue;
- TAILQ_FOREACH_SAFE(pv, &m->md.pv_list, pv_list, next_pv) {
- va = pv->pv_va;
- pmap = PV_PMAP(pv);
+ while ((pc = TAILQ_FIRST(&pv_chunks)) != NULL && (pv_vafree == 0 ||
+ free == NULL)) {
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
+ if (pmap != pc->pc_pmap) {
+ if (pmap != NULL) {
+ pmap_invalidate_all(pmap);
+ if (pmap != locked_pmap)
+ PMAP_UNLOCK(pmap);
+ }
+ pmap = pc->pc_pmap;
/* Avoid deadlock and lock recursion. */
if (pmap > locked_pmap)
PMAP_LOCK(pmap);
- else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap))
+ else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap)) {
+ pmap = NULL;
+ TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
continue;
- pmap->pm_stats.resident_count--;
- pde = pmap_pde(pmap, va);
- KASSERT((*pde & PG_PS) == 0, ("pmap_collect: found"
- " a 4mpage in page %p's pv list", m));
- pte = pmap_pte_quick(pmap, va);
- tpte = pte_load_clear(pte);
- KASSERT((tpte & PG_W) == 0,
- ("pmap_collect: wired pte %#jx", (uintmax_t)tpte));
- if (tpte & PG_A)
- vm_page_aflag_set(m, PGA_REFERENCED);
- if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW))
- vm_page_dirty(m);
- free = NULL;
- pmap_unuse_pt(pmap, va, &free);
- pmap_invalidate_page(pmap, va);
- pmap_free_zero_pages(free);
- TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
- free_pv_entry(pmap, pv);
- if (pmap != locked_pmap)
- PMAP_UNLOCK(pmap);
+ }
+ }
+
+ /*
+ * Destroy every non-wired, 4 KB page mapping in the chunk.
+ */
+ freed = 0;
+ for (field = 0; field < _NPCM; field++) {
+ freemask = 0;
+ for (inuse = ~pc->pc_map[field] & pc_freemask[field];
+ inuse != 0; inuse &= ~(1UL << bit)) {
+ bit = bsfl(inuse);
+ pv = &pc->pc_pventry[field * 32 + bit];
+ va = pv->pv_va;
+ pde = pmap_pde(pmap, va);
+ if ((*pde & PG_PS) != 0)
+ continue;
+ pte = pmap_pte_quick(pmap, va);
+ if ((*pte & PG_W) != 0)
+ continue;
+ tpte = pte_load_clear(pte);
+ if ((tpte & PG_G) != 0)
+ pmap_invalidate_page(pmap, va);
+ m = PHYS_TO_VM_PAGE(tpte & PG_FRAME);
+ if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW))
+ vm_page_dirty(m);
+ if ((tpte & PG_A) != 0)
+ vm_page_aflag_set(m, PGA_REFERENCED);
+ TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
+ if (TAILQ_EMPTY(&m->md.pv_list) &&
+ (m->flags & PG_FICTITIOUS) == 0) {
+ pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
+ if (TAILQ_EMPTY(&pvh->pv_list)) {
+ vm_page_aflag_clear(m,
+ PGA_WRITEABLE);
+ }
+ }
+ pmap_unuse_pt(pmap, va, &free);
+ freemask |= 1UL << bit;
+ freed++;
+ }
+ pc->pc_map[field] |= freemask;
+ }
+ if (freed == 0) {
+ TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
+ continue;
+ }
+ pmap->pm_stats.resident_count -= freed;
+ PV_STAT(pv_entry_frees += freed);
+ PV_STAT(pv_entry_spare += freed);
+ pv_entry_count -= freed;
+ TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
+ for (field = 0; field < _NPCM; field++)
+ if (pc->pc_map[field] != pc_freemask[field]) {
+ TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc,
+ pc_list);
+ TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
+
+ /*
+ * One freed pv entry in locked_pmap is
+ * sufficient.
+ */
+ if (pmap == locked_pmap)
+ goto out;
+ break;
+ }
+ if (field == _NPCM) {
+ PV_STAT(pv_entry_spare -= _NPCPV);
+ PV_STAT(pc_chunk_count--);
+ PV_STAT(pc_chunk_frees++);
+ /* Entire chunk is free; return it. */
+ m_pc = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc));
+ pmap_qremove((vm_offset_t)pc, 1);
+ pmap_ptelist_free(&pv_vafree, (vm_offset_t)pc);
+ break;
}
- if (TAILQ_EMPTY(&m->md.pv_list) &&
- TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list))
- vm_page_aflag_clear(m, PGA_WRITEABLE);
}
+out:
sched_unpin();
+ TAILQ_CONCAT(&pv_chunks, &newtail, pc_lru);
+ if (pmap != NULL) {
+ pmap_invalidate_all(pmap);
+ if (pmap != locked_pmap)
+ PMAP_UNLOCK(pmap);
+ }
+ if (m_pc == NULL && pv_vafree != 0 && free != NULL) {
+ m_pc = free;
+ free = m_pc->right;
+ /* Recycle a freed page table page. */
+ m_pc->wire_count = 1;
+ atomic_add_int(&cnt.v_wire_count, 1);
+ }
+ pmap_free_zero_pages(free);
+ return (m_pc);
}
-
/*
* free the pv_entry back to the free list
*/
@@ -2263,7 +2347,7 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv)
struct pv_chunk *pc;
int idx, field, bit;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
PV_STAT(pv_entry_frees++);
PV_STAT(pv_entry_spare++);
@@ -2280,6 +2364,7 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv)
TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list);
return;
}
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
PV_STAT(pv_entry_spare -= _NPCPV);
PV_STAT(pc_chunk_count--);
PV_STAT(pc_chunk_frees++);
@@ -2296,18 +2381,17 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv)
* when needed.
*/
static pv_entry_t
-get_pv_entry(pmap_t pmap, int try)
+get_pv_entry(pmap_t pmap, boolean_t try)
{
static const struct timeval printinterval = { 60, 0 };
static struct timeval lastprint;
- struct vpgqueues *pq;
int bit, field;
pv_entry_t pv;
struct pv_chunk *pc;
vm_page_t m;
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
PV_STAT(pv_entry_allocs++);
pv_entry_count++;
if (pv_entry_count > pv_entry_high_water)
@@ -2315,7 +2399,6 @@ get_pv_entry(pmap_t pmap, int try)
printf("Approaching the limit on PV entries, consider "
"increasing either the vm.pmap.shpgperproc or the "
"vm.pmap.pv_entry_max tunable.\n");
- pq = NULL;
retry:
pc = TAILQ_FIRST(&pmap->pm_pvchunk);
if (pc != NULL) {
@@ -2336,38 +2419,29 @@ retry:
}
TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
TAILQ_INSERT_TAIL(&pmap->pm_pvchunk, pc, pc_list);
+ if (pc != TAILQ_LAST(&pv_chunks, pch)) {
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
+ TAILQ_INSERT_TAIL(&pv_chunks, pc, pc_lru);
+ }
PV_STAT(pv_entry_spare--);
return (pv);
}
}
/*
- * Access to the ptelist "pv_vafree" is synchronized by the page
- * queues lock. If "pv_vafree" is currently non-empty, it will
+ * Access to the ptelist "pv_vafree" is synchronized by the pvh
+ * global lock. If "pv_vafree" is currently non-empty, it will
* remain non-empty until pmap_ptelist_alloc() completes.
*/
- if (pv_vafree == 0 || (m = vm_page_alloc(NULL, 0, (pq ==
- &vm_page_queues[PQ_ACTIVE] ? VM_ALLOC_SYSTEM : VM_ALLOC_NORMAL) |
+ if (pv_vafree == 0 || (m = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL |
VM_ALLOC_NOOBJ | VM_ALLOC_WIRED)) == NULL) {
if (try) {
pv_entry_count--;
PV_STAT(pc_chunk_tryfail++);
return (NULL);
}
- /*
- * Reclaim pv entries: At first, destroy mappings to
- * inactive pages. After that, if a pv chunk entry
- * is still needed, destroy mappings to active pages.
- */
- if (pq == NULL) {
- PV_STAT(pmap_collect_inactive++);
- pq = &vm_page_queues[PQ_INACTIVE];
- } else if (pq == &vm_page_queues[PQ_INACTIVE]) {
- PV_STAT(pmap_collect_active++);
- pq = &vm_page_queues[PQ_ACTIVE];
- } else
- panic("get_pv_entry: increase vm.pmap.shpgperproc");
- pmap_collect(pmap, pq);
- goto retry;
+ m = pmap_pv_reclaim(pmap);
+ if (m == NULL)
+ goto retry;
}
PV_STAT(pc_chunk_count++);
PV_STAT(pc_chunk_allocs++);
@@ -2377,6 +2451,7 @@ retry:
pc->pc_map[0] = pc_freemask[0] & ~1ul; /* preallocated bit 0 */
for (field = 1; field < _NPCM; field++)
pc->pc_map[field] = pc_freemask[field];
+ TAILQ_INSERT_TAIL(&pv_chunks, pc, pc_lru);
pv = &pc->pc_pventry[0];
TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list);
PV_STAT(pv_entry_spare += _NPCPV - 1);
@@ -2388,7 +2463,7 @@ pmap_pvh_remove(struct md_page *pvh, pmap_t pmap, vm_offset_t va)
{
pv_entry_t pv;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) {
if (pmap == PV_PMAP(pv) && va == pv->pv_va) {
TAILQ_REMOVE(&pvh->pv_list, pv, pv_list);
@@ -2406,7 +2481,7 @@ pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa)
vm_offset_t va_last;
vm_page_t m;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
KASSERT((pa & PDRMASK) == 0,
("pmap_pv_demote_pde: pa is not 4mpage aligned"));
@@ -2439,7 +2514,7 @@ pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa)
vm_offset_t va_last;
vm_page_t m;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
KASSERT((pa & PDRMASK) == 0,
("pmap_pv_promote_pde: pa is not 4mpage aligned"));
@@ -2480,7 +2555,7 @@ pmap_remove_entry(pmap_t pmap, vm_page_t m, vm_offset_t va)
{
struct md_page *pvh;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
pmap_pvh_free(&m->md, pmap, va);
if (TAILQ_EMPTY(&m->md.pv_list) && (m->flags & PG_FICTITIOUS) == 0) {
pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
@@ -2498,8 +2573,8 @@ pmap_insert_entry(pmap_t pmap, vm_offset_t va, vm_page_t m)
{
pv_entry_t pv;
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
pv = get_pv_entry(pmap, FALSE);
pv->pv_va = va;
TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
@@ -2513,8 +2588,8 @@ pmap_try_insert_pv_entry(pmap_t pmap, vm_offset_t va, vm_page_t m)
{
pv_entry_t pv;
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
if (pv_entry_count < pv_entry_high_water &&
(pv = get_pv_entry(pmap, TRUE)) != NULL) {
pv->pv_va = va;
@@ -2533,7 +2608,7 @@ pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa)
struct md_page *pvh;
pv_entry_t pv;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
if (pv_entry_count < pv_entry_high_water &&
(pv = get_pv_entry(pmap, TRUE)) != NULL) {
pv->pv_va = va;
@@ -2611,7 +2686,7 @@ pmap_demote_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t va)
*/
if (va >= KERNBASE)
firstpte = &KPTmap[i386_btop(trunc_4mpage(va))];
- else if (curthread->td_pinned > 0 && mtx_owned(&vm_page_queue_mtx)) {
+ else if (curthread->td_pinned > 0 && rw_wowned(&pvh_global_lock)) {
if ((*PMAP1 & PG_FRAME) != mptepa) {
*PMAP1 = mptepa | PG_RW | PG_V | PG_A | PG_M;
#ifdef SMP
@@ -2770,7 +2845,7 @@ pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t va, vm_page_t *free)
pt_entry_t oldpte;
vm_page_t m;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
oldpte = pte_load_clear(ptq);
if (oldpte & PG_W)
@@ -2801,7 +2876,7 @@ pmap_remove_page(pmap_t pmap, vm_offset_t va, vm_page_t *free)
{
pt_entry_t *pte;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
KASSERT(curthread->td_pinned > 0, ("curthread not pinned"));
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
if ((pte = pmap_pte_quick(pmap, va)) == NULL || *pte == 0)
@@ -2833,7 +2908,7 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
anyvalid = 0;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
sched_pin();
PMAP_LOCK(pmap);
@@ -2922,7 +2997,7 @@ out:
sched_unpin();
if (anyvalid)
pmap_invalidate_all(pmap);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
pmap_free_zero_pages(free);
}
@@ -2954,7 +3029,7 @@ pmap_remove_all(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_remove_all: page %p is not managed", m));
free = NULL;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
sched_pin();
if ((m->flags & PG_FICTITIOUS) != 0)
goto small_mappings;
@@ -2995,7 +3070,7 @@ small_mappings:
}
vm_page_aflag_clear(m, PGA_WRITEABLE);
sched_unpin();
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
pmap_free_zero_pages(free);
}
@@ -3050,7 +3125,7 @@ pmap_protect(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, vm_prot_t prot)
vm_offset_t pdnxt;
pd_entry_t ptpaddr;
pt_entry_t *pte;
- int anychanged;
+ boolean_t anychanged, pv_lists_locked;
if ((prot & VM_PROT_READ) == VM_PROT_NONE) {
pmap_remove(pmap, sva, eva);
@@ -3066,10 +3141,16 @@ pmap_protect(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, vm_prot_t prot)
return;
#endif
- anychanged = 0;
+ if (pmap_is_current(pmap))
+ pv_lists_locked = FALSE;
+ else {
+ pv_lists_locked = TRUE;
+resume:
+ rw_wlock(&pvh_global_lock);
+ sched_pin();
+ }
+ anychanged = FALSE;
- vm_page_lock_queues();
- sched_pin();
PMAP_LOCK(pmap);
for (; sva < eva; sva = pdnxt) {
pt_entry_t obits, pbits;
@@ -3104,12 +3185,27 @@ pmap_protect(pmap_t pmap, vm_offset_t sva, vm_offset_t eva, vm_prot_t prot)
*/
if (pmap_protect_pde(pmap,
&pmap->pm_pdir[pdirindex], sva, prot))
- anychanged = 1;
- continue;
- } else if (!pmap_demote_pde(pmap,
- &pmap->pm_pdir[pdirindex], sva)) {
- /* The large page mapping was destroyed. */
+ anychanged = TRUE;
continue;
+ } else {
+ if (!pv_lists_locked) {
+ pv_lists_locked = TRUE;
+ if (!rw_try_wlock(&pvh_global_lock)) {
+ if (anychanged)
+ pmap_invalidate_all(
+ pmap);
+ PMAP_UNLOCK(pmap);
+ goto resume;
+ }
+ }
+ if (!pmap_demote_pde(pmap,
+ &pmap->pm_pdir[pdirindex], sva)) {
+ /*
+ * The large page mapping was
+ * destroyed.
+ */
+ continue;
+ }
}
}
@@ -3155,14 +3251,16 @@ retry:
if (obits & PG_G)
pmap_invalidate_page(pmap, sva);
else
- anychanged = 1;
+ anychanged = TRUE;
}
}
}
- sched_unpin();
if (anychanged)
pmap_invalidate_all(pmap);
- vm_page_unlock_queues();
+ if (pv_lists_locked) {
+ sched_unpin();
+ rw_wunlock(&pvh_global_lock);
+ }
PMAP_UNLOCK(pmap);
}
@@ -3332,7 +3430,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
mpte = NULL;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
sched_pin();
@@ -3502,7 +3600,7 @@ validate:
pmap_promote_pde(pmap, pde, va);
sched_unpin();
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
}
@@ -3517,7 +3615,7 @@ pmap_enter_pde(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot)
{
pd_entry_t *pde, newpde;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
pde = pmap_pde(pmap, va);
if (*pde != 0) {
@@ -3586,7 +3684,7 @@ pmap_enter_object(pmap_t pmap, vm_offset_t start, vm_offset_t end,
psize = atop(end - start);
mpte = NULL;
m = m_start;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) {
va = start + ptoa(diff);
@@ -3600,7 +3698,7 @@ pmap_enter_object(pmap_t pmap, vm_offset_t start, vm_offset_t end,
mpte);
m = TAILQ_NEXT(m, listq);
}
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
}
@@ -3617,10 +3715,10 @@ void
pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot)
{
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
(void)pmap_enter_quick_locked(pmap, va, m, prot, NULL);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
}
@@ -3635,7 +3733,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m,
KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva ||
(m->oflags & VPO_UNMANAGED) != 0,
("pmap_enter_quick_locked: managed mapping within the clean submap"));
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
/*
@@ -3841,9 +3939,9 @@ retry:
if (!wired != ((*pde & PG_W) == 0)) {
if (!are_queues_locked) {
are_queues_locked = TRUE;
- if (!mtx_trylock(&vm_page_queue_mtx)) {
+ if (!rw_try_wlock(&pvh_global_lock)) {
PMAP_UNLOCK(pmap);
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
goto retry;
}
}
@@ -3867,7 +3965,7 @@ retry:
pmap_pte_release(pte);
out:
if (are_queues_locked)
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
}
@@ -3896,7 +3994,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len,
if (!pmap_is_current(src_pmap))
return;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
if (dst_pmap < src_pmap) {
PMAP_LOCK(dst_pmap);
PMAP_LOCK(src_pmap);
@@ -3986,7 +4084,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len,
}
out:
sched_unpin();
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(src_pmap);
PMAP_UNLOCK(dst_pmap);
}
@@ -4128,7 +4226,7 @@ pmap_page_exists_quick(pmap_t pmap, vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_page_exists_quick: page %p is not managed", m));
rv = FALSE;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
TAILQ_FOREACH(pv, &m->md.pv_list, pv_list) {
if (PV_PMAP(pv) == pmap) {
rv = TRUE;
@@ -4150,7 +4248,7 @@ pmap_page_exists_quick(pmap_t pmap, vm_page_t m)
break;
}
}
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (rv);
}
@@ -4168,13 +4266,13 @@ pmap_page_wired_mappings(vm_page_t m)
count = 0;
if ((m->oflags & VPO_UNMANAGED) != 0)
return (count);
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
count = pmap_pvh_wired_mappings(&m->md, count);
if ((m->flags & PG_FICTITIOUS) == 0) {
count = pmap_pvh_wired_mappings(pa_to_pvh(VM_PAGE_TO_PHYS(m)),
count);
}
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (count);
}
@@ -4190,7 +4288,7 @@ pmap_pvh_wired_mappings(struct md_page *pvh, int count)
pt_entry_t *pte;
pv_entry_t pv;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
sched_pin();
TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) {
pmap = PV_PMAP(pv);
@@ -4215,11 +4313,11 @@ pmap_page_is_mapped(vm_page_t m)
if ((m->oflags & VPO_UNMANAGED) != 0)
return (FALSE);
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
rv = !TAILQ_EMPTY(&m->md.pv_list) ||
((m->flags & PG_FICTITIOUS) == 0 &&
!TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list));
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (rv);
}
@@ -4249,7 +4347,7 @@ pmap_remove_pages(pmap_t pmap)
printf("warning: pmap_remove_pages called with non-current pmap\n");
return;
}
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
PMAP_LOCK(pmap);
sched_pin();
TAILQ_FOREACH_SAFE(pc, &pmap->pm_pvchunk, pc_list, npc) {
@@ -4351,6 +4449,7 @@ pmap_remove_pages(pmap_t pmap)
PV_STAT(pc_chunk_count--);
PV_STAT(pc_chunk_frees++);
TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
m = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc));
pmap_qremove((vm_offset_t)pc, 1);
vm_page_unwire(m, 0);
@@ -4360,7 +4459,7 @@ pmap_remove_pages(pmap_t pmap)
}
sched_unpin();
pmap_invalidate_all(pmap);
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
PMAP_UNLOCK(pmap);
pmap_free_zero_pages(free);
}
@@ -4388,11 +4487,11 @@ pmap_is_modified(vm_page_t m)
if ((m->oflags & VPO_BUSY) == 0 &&
(m->aflags & PGA_WRITEABLE) == 0)
return (FALSE);
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
rv = pmap_is_modified_pvh(&m->md) ||
((m->flags & PG_FICTITIOUS) == 0 &&
pmap_is_modified_pvh(pa_to_pvh(VM_PAGE_TO_PHYS(m))));
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (rv);
}
@@ -4409,7 +4508,7 @@ pmap_is_modified_pvh(struct md_page *pvh)
pmap_t pmap;
boolean_t rv;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
rv = FALSE;
sched_pin();
TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) {
@@ -4462,11 +4561,11 @@ pmap_is_referenced(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_is_referenced: page %p is not managed", m));
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
rv = pmap_is_referenced_pvh(&m->md) ||
((m->flags & PG_FICTITIOUS) == 0 &&
pmap_is_referenced_pvh(pa_to_pvh(VM_PAGE_TO_PHYS(m))));
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (rv);
}
@@ -4482,7 +4581,7 @@ pmap_is_referenced_pvh(struct md_page *pvh)
pmap_t pmap;
boolean_t rv;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&pvh_global_lock, RA_WLOCKED);
rv = FALSE;
sched_pin();
TAILQ_FOREACH(pv, &pvh->pv_list, pv_list) {
@@ -4523,7 +4622,7 @@ pmap_remove_write(vm_page_t m)
if ((m->oflags & VPO_BUSY) == 0 &&
(m->aflags & PGA_WRITEABLE) == 0)
return;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
sched_pin();
if ((m->flags & PG_FICTITIOUS) != 0)
goto small_mappings;
@@ -4564,7 +4663,7 @@ retry:
}
vm_page_aflag_clear(m, PGA_WRITEABLE);
sched_unpin();
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
}
/*
@@ -4593,7 +4692,7 @@ pmap_ts_referenced(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_ts_referenced: page %p is not managed", m));
pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
sched_pin();
if ((m->flags & PG_FICTITIOUS) != 0)
goto small_mappings;
@@ -4652,7 +4751,7 @@ small_mappings:
}
out:
sched_unpin();
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
return (rtval);
}
@@ -4682,7 +4781,7 @@ pmap_clear_modify(vm_page_t m)
*/
if ((m->aflags & PGA_WRITEABLE) == 0)
return;
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
sched_pin();
if ((m->flags & PG_FICTITIOUS) != 0)
goto small_mappings;
@@ -4743,7 +4842,7 @@ small_mappings:
PMAP_UNLOCK(pmap);
}
sched_unpin();
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
}
/*
@@ -4763,7 +4862,7 @@ pmap_clear_reference(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_clear_reference: page %p is not managed", m));
- vm_page_lock_queues();
+ rw_wlock(&pvh_global_lock);
sched_pin();
if ((m->flags & PG_FICTITIOUS) != 0)
goto small_mappings;
@@ -4810,7 +4909,7 @@ small_mappings:
PMAP_UNLOCK(pmap);
}
sched_unpin();
- vm_page_unlock_queues();
+ rw_wunlock(&pvh_global_lock);
}
/*
diff --git a/sys/i386/i386/swtch.s b/sys/i386/i386/swtch.s
index 680b032557c9..c53abe25e25e 100644
--- a/sys/i386/i386/swtch.s
+++ b/sys/i386/i386/swtch.s
@@ -427,3 +427,140 @@ ENTRY(savectx)
ret
END(savectx)
+
+/*
+ * suspendctx(pcb)
+ * Update pcb, suspending current processor state.
+ */
+ENTRY(suspendctx)
+ /* Fetch PCB. */
+ movl 4(%esp),%ecx
+
+ /* Save context by calling savectx(). */
+ pushl %ecx
+ call savectx
+ addl $4,%esp
+
+ /* Fetch PCB again. */
+ movl 4(%esp),%ecx
+
+ /* Update caller's return address and stack pointer. */
+ movl (%esp),%eax
+ movl %eax,PCB_EIP(%ecx)
+ movl %esp,PCB_ESP(%ecx)
+
+ /* Save other registers and descriptor tables. */
+ movl %cr0,%eax
+ movl %eax,PCB_CR0(%ecx)
+ movl %cr2,%eax
+ movl %eax,PCB_CR2(%ecx)
+ movl %cr4,%eax
+ movl %eax,PCB_CR4(%ecx)
+
+ movl %dr0,%eax
+ movl %eax,PCB_DR0(%ecx)
+ movl %dr1,%eax
+ movl %eax,PCB_DR1(%ecx)
+ movl %dr2,%eax
+ movl %eax,PCB_DR2(%ecx)
+ movl %dr3,%eax
+ movl %eax,PCB_DR3(%ecx)
+ movl %dr6,%eax
+ movl %eax,PCB_DR6(%ecx)
+ movl %dr7,%eax
+ movl %eax,PCB_DR7(%ecx)
+
+ mov %ds,PCB_DS(%ecx)
+ mov %es,PCB_ES(%ecx)
+ mov %fs,PCB_FS(%ecx)
+ mov %ss,PCB_SS(%ecx)
+
+ sgdt PCB_GDT(%ecx)
+ sidt PCB_IDT(%ecx)
+ sldt PCB_LDT(%ecx)
+ str PCB_TR(%ecx)
+
+ movl $1,%eax
+ ret
+END(suspendctx)
+
+/*
+ * resumectx(pcb in %esi)
+ * Resuming processor state from pcb.
+ */
+ENTRY(resumectx)
+ /* Fetch PCB. */
+ movl %esi,%ecx
+
+ /* Restore GDT. */
+ lgdt PCB_GDT(%ecx)
+
+ /* Restore segment registers */
+ movzwl PCB_DS(%ecx),%eax
+ mov %ax,%ds
+ movzwl PCB_ES(%ecx),%eax
+ mov %ax,%es
+ movzwl PCB_FS(%ecx),%eax
+ mov %ax,%fs
+ movzwl PCB_GS(%ecx),%eax
+ movw %ax,%gs
+ movzwl PCB_SS(%ecx),%eax
+ mov %ax,%ss
+
+ /* Restore CR2, CR4, CR3 and CR0 */
+ movl PCB_CR2(%ecx),%eax
+ movl %eax,%cr2
+ movl PCB_CR4(%ecx),%eax
+ movl %eax,%cr4
+ movl PCB_CR3(%ecx),%eax
+ movl %eax,%cr3
+ movl PCB_CR0(%ecx),%eax
+ movl %eax,%cr0
+ jmp 1f
+1:
+
+ /* Restore descriptor tables */
+ lidt PCB_IDT(%ecx)
+ lldt PCB_LDT(%ecx)
+
+#define SDT_SYS386TSS 9
+#define SDT_SYS386BSY 11
+ /* Clear "task busy" bit and reload TR */
+ movl PCPU(TSS_GDT),%eax
+ andb $(~SDT_SYS386BSY | SDT_SYS386TSS),5(%eax)
+ movzwl PCB_TR(%ecx),%eax
+ ltr %ax
+#undef SDT_SYS386TSS
+#undef SDT_SYS386BSY
+
+ /* Restore debug registers */
+ movl PCB_DR0(%ecx),%eax
+ movl %eax,%dr0
+ movl PCB_DR1(%ecx),%eax
+ movl %eax,%dr1
+ movl PCB_DR2(%ecx),%eax
+ movl %eax,%dr2
+ movl PCB_DR3(%ecx),%eax
+ movl %eax,%dr3
+ movl PCB_DR6(%ecx),%eax
+ movl %eax,%dr6
+ movl PCB_DR7(%ecx),%eax
+ movl %eax,%dr7
+
+#ifdef DEV_NPX
+ /* XXX FIX ME */
+#endif
+
+ /* Restore other registers */
+ movl PCB_EDI(%ecx),%edi
+ movl PCB_ESI(%ecx),%esi
+ movl PCB_EBP(%ecx),%ebp
+ movl PCB_ESP(%ecx),%esp
+ movl PCB_EBX(%ecx),%ebx
+
+ /* reload code selector by turning return into intersegmental return */
+ pushl PCB_EIP(%ecx)
+ movl $KCSEL,4(%esp)
+ xorl %eax,%eax
+ lret
+END(resumectx)
diff --git a/sys/i386/include/apicvar.h b/sys/i386/include/apicvar.h
index a12e36a4057e..a0e622e8785e 100644
--- a/sys/i386/include/apicvar.h
+++ b/sys/i386/include/apicvar.h
@@ -126,7 +126,8 @@
#define IPI_IS_BITMAPED(x) ((x) <= IPI_BITMAP_LAST)
#define IPI_STOP (APIC_IPI_INTS + 7) /* Stop CPU until restarted. */
-#define IPI_STOP_HARD (APIC_IPI_INTS + 8) /* Stop CPU with a NMI. */
+#define IPI_SUSPEND (APIC_IPI_INTS + 8) /* Suspend CPU until restarted. */
+#define IPI_STOP_HARD (APIC_IPI_INTS + 9) /* Stop CPU with a NMI. */
/*
* The spurious interrupt can share the priority class with the IPIs since
diff --git a/sys/i386/include/in_cksum.h b/sys/i386/include/in_cksum.h
index c692f69abe5d..34d85be25a1f 100644
--- a/sys/i386/include/in_cksum.h
+++ b/sys/i386/include/in_cksum.h
@@ -54,6 +54,7 @@
* therefore always exactly five 32-bit words.
*/
#if defined(__GNUCLIKE_ASM) && !defined(__INTEL_COMPILER)
+#if defined(IPVERSION) && (IPVERSION == 4)
static __inline u_int
in_cksum_hdr(const struct ip *ip)
{
@@ -88,6 +89,7 @@ in_cksum_update(struct ip *ip)
__tmpsum = (int)ntohs(ip->ip_sum) + 256;
ip->ip_sum = htons(__tmpsum + (__tmpsum >> 16));
}
+#endif
static __inline u_short
in_addword(u_short sum, u_short b)
@@ -121,6 +123,7 @@ in_pseudo(u_int sum, u_int b, u_int c)
}
#else
+#if defined(IPVERSION) && (IPVERSION == 4)
#define in_cksum_update(ip) \
do { \
int __tmpsum; \
@@ -129,10 +132,13 @@ in_pseudo(u_int sum, u_int b, u_int c)
} while(0)
#endif
+#endif
#ifdef _KERNEL
#if !defined(__GNUCLIKE_ASM) || defined(__INTEL_COMPILER)
+#if defined(IPVERSION) && (IPVERSION == 4)
u_int in_cksum_hdr(const struct ip *ip);
+#endif
u_short in_addword(u_short sum, u_short b);
u_short in_pseudo(u_int sum, u_int b, u_int c);
#endif
diff --git a/sys/i386/include/md_var.h b/sys/i386/include/md_var.h
index 168ee6298f45..3563e6ce7a71 100644
--- a/sys/i386/include/md_var.h
+++ b/sys/i386/include/md_var.h
@@ -91,6 +91,7 @@ void doreti_popl_fs(void) __asm(__STRING(doreti_popl_fs));
void doreti_popl_fs_fault(void) __asm(__STRING(doreti_popl_fs_fault));
void dump_add_page(vm_paddr_t);
void dump_drop_page(vm_paddr_t);
+void initializecpu(void);
void enable_sse(void);
void fillw(int /*u_short*/ pat, void *base, size_t cnt);
void i686_pagezero(void *addr);
diff --git a/sys/i386/include/pcb.h b/sys/i386/include/pcb.h
index 4c227df06767..f25167d141cb 100644
--- a/sys/i386/include/pcb.h
+++ b/sys/i386/include/pcb.h
@@ -45,7 +45,10 @@
#include <machine/npx.h>
struct pcb {
+ int pcb_cr0;
+ int pcb_cr2;
int pcb_cr3;
+ int pcb_cr4;
int pcb_edi;
int pcb_esi;
int pcb_ebp;
@@ -71,13 +74,22 @@ struct pcb {
#define PCB_KERNNPX 0x40 /* kernel uses npx */
caddr_t pcb_onfault; /* copyin/out fault recovery */
+ int pcb_ds;
+ int pcb_es;
+ int pcb_fs;
int pcb_gs;
+ int pcb_ss;
struct segment_descriptor pcb_fsd;
struct segment_descriptor pcb_gsd;
struct pcb_ext *pcb_ext; /* optional pcb extension */
int pcb_psl; /* process status long */
u_long pcb_vm86[2]; /* vm86bios scratch space */
union savefpu *pcb_save;
+
+ struct region_descriptor pcb_gdt;
+ struct region_descriptor pcb_idt;
+ uint16_t pcb_ldt;
+ uint16_t pcb_tr;
};
#ifdef _KERNEL
@@ -85,6 +97,8 @@ struct trapframe;
void makectx(struct trapframe *, struct pcb *);
void savectx(struct pcb *) __returns_twice;
+int suspendctx(struct pcb *) __returns_twice;
+void resumectx(struct pcb *);
#endif
#endif /* _I386_PCB_H_ */
diff --git a/sys/i386/include/pmap.h b/sys/i386/include/pmap.h
index 3012a000ae5c..3e0ba6f99ac9 100644
--- a/sys/i386/include/pmap.h
+++ b/sys/i386/include/pmap.h
@@ -481,7 +481,7 @@ struct pv_chunk {
pmap_t pc_pmap;
TAILQ_ENTRY(pv_chunk) pc_list;
uint32_t pc_map[_NPCM]; /* bitmap; 1 = free */
- uint32_t pc_spare[2];
+ TAILQ_ENTRY(pv_chunk) pc_lru;
struct pv_entry pc_pventry[_NPCPV];
};
diff --git a/sys/i386/include/smp.h b/sys/i386/include/smp.h
index 04d67c9f2f28..1be3dcf2e0ad 100644
--- a/sys/i386/include/smp.h
+++ b/sys/i386/include/smp.h
@@ -53,12 +53,16 @@ inthand_t
IDTVEC(invlcache), /* Write back and invalidate cache */
IDTVEC(ipi_intr_bitmap_handler), /* Bitmap based IPIs */
IDTVEC(cpustop), /* CPU stops & waits to be restarted */
+ IDTVEC(cpususpend), /* CPU suspends & waits to be resumed */
IDTVEC(rendezvous), /* handle CPU rendezvous */
IDTVEC(lazypmap); /* handle lazy pmap release */
/* functions in mp_machdep.c */
void cpu_add(u_int apic_id, char boot_cpu);
void cpustop_handler(void);
+#ifndef XEN
+void cpususpend_handler(void);
+#endif
void init_secondary(void);
void ipi_all_but_self(u_int ipi);
#ifndef XEN
diff --git a/sys/i386/xen/pmap.c b/sys/i386/xen/pmap.c
index 189f311da0ab..5f3985ab49a8 100644
--- a/sys/i386/xen/pmap.c
+++ b/sys/i386/xen/pmap.c
@@ -179,7 +179,6 @@ __FBSDID("$FreeBSD$");
#define PMAP_INLINE
#endif
-#define PV_STATS
#ifdef PV_STATS
#define PV_STAT(x) do { x ; } while (0)
#else
@@ -230,6 +229,7 @@ static int pat_works; /* Is page attribute table sane? */
/*
* Data for the pv entry allocation mechanism
*/
+static TAILQ_HEAD(pch, pv_chunk) pv_chunks = TAILQ_HEAD_INITIALIZER(pv_chunks);
static int pv_entry_count = 0, pv_entry_max = 0, pv_entry_high_water = 0;
static int shpgperproc = PMAP_SHPGPERPROC;
@@ -278,7 +278,7 @@ SYSCTL_INT(_debug, OID_AUTO, PMAP1unchanged, CTLFLAG_RD,
static struct mtx PMAP2mutex;
static void free_pv_entry(pmap_t pmap, pv_entry_t pv);
-static pv_entry_t get_pv_entry(pmap_t locked_pmap, int try);
+static pv_entry_t get_pv_entry(pmap_t pmap, boolean_t try);
static void pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va);
static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap,
vm_offset_t va);
@@ -1914,6 +1914,7 @@ pmap_growkernel(vm_offset_t addr)
CTASSERT(sizeof(struct pv_chunk) == PAGE_SIZE);
CTASSERT(_NPCM == 11);
+CTASSERT(_NPCPV == 336);
static __inline struct pv_chunk *
pv_to_chunk(pv_entry_t pv)
@@ -1927,7 +1928,7 @@ pv_to_chunk(pv_entry_t pv)
#define PC_FREE0_9 0xfffffffful /* Free values for index 0 through 9 */
#define PC_FREE10 0x0000fffful /* Free values for index 10 */
-static uint32_t pc_freemask[11] = {
+static uint32_t pc_freemask[_NPCM] = {
PC_FREE0_9, PC_FREE0_9, PC_FREE0_9,
PC_FREE0_9, PC_FREE0_9, PC_FREE0_9,
PC_FREE0_9, PC_FREE0_9, PC_FREE0_9,
@@ -1958,67 +1959,135 @@ SYSCTL_LONG(_vm_pmap, OID_AUTO, pv_entry_allocs, CTLFLAG_RD, &pv_entry_allocs, 0
"Current number of pv entry allocs");
SYSCTL_INT(_vm_pmap, OID_AUTO, pv_entry_spare, CTLFLAG_RD, &pv_entry_spare, 0,
"Current number of spare pv entries");
-
-static int pmap_collect_inactive, pmap_collect_active;
-
-SYSCTL_INT(_vm_pmap, OID_AUTO, pmap_collect_inactive, CTLFLAG_RD, &pmap_collect_inactive, 0,
- "Current number times pmap_collect called on inactive queue");
-SYSCTL_INT(_vm_pmap, OID_AUTO, pmap_collect_active, CTLFLAG_RD, &pmap_collect_active, 0,
- "Current number times pmap_collect called on active queue");
#endif
/*
* We are in a serious low memory condition. Resort to
* drastic measures to free some pages so we can allocate
- * another pv entry chunk. This is normally called to
- * unmap inactive pages, and if necessary, active pages.
+ * another pv entry chunk.
*/
-static void
-pmap_collect(pmap_t locked_pmap, struct vpgqueues *vpq)
+static vm_page_t
+pmap_pv_reclaim(pmap_t locked_pmap)
{
+ struct pch newtail;
+ struct pv_chunk *pc;
pmap_t pmap;
pt_entry_t *pte, tpte;
- pv_entry_t next_pv, pv;
+ pv_entry_t pv;
vm_offset_t va;
- vm_page_t m, free;
-
+ vm_page_t free, m, m_pc;
+ uint32_t inuse, freemask;
+ int bit, field, freed;
+
+ PMAP_LOCK_ASSERT(locked_pmap, MA_OWNED);
+ pmap = NULL;
+ free = m_pc = NULL;
+ TAILQ_INIT(&newtail);
sched_pin();
- TAILQ_FOREACH(m, &vpq->pl, pageq) {
- if ((m->flags & PG_MARKER) != 0 || m->hold_count || m->busy)
- continue;
- TAILQ_FOREACH_SAFE(pv, &m->md.pv_list, pv_list, next_pv) {
- va = pv->pv_va;
- pmap = PV_PMAP(pv);
+ while ((pc = TAILQ_FIRST(&pv_chunks)) != NULL && (pv_vafree == 0 ||
+ free == NULL)) {
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
+ if (pmap != pc->pc_pmap) {
+ if (pmap != NULL) {
+ pmap_invalidate_all(pmap);
+ if (pmap != locked_pmap)
+ PMAP_UNLOCK(pmap);
+ }
+ pmap = pc->pc_pmap;
/* Avoid deadlock and lock recursion. */
if (pmap > locked_pmap)
PMAP_LOCK(pmap);
- else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap))
+ else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap)) {
+ pmap = NULL;
+ TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
continue;
- pmap->pm_stats.resident_count--;
- pte = pmap_pte_quick(pmap, va);
- tpte = pte_load_clear(pte);
- KASSERT((tpte & PG_W) == 0,
- ("pmap_collect: wired pte %#jx", (uintmax_t)tpte));
- if (tpte & PG_A)
- vm_page_aflag_set(m, PGA_REFERENCED);
- if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW))
- vm_page_dirty(m);
- free = NULL;
- pmap_unuse_pt(pmap, va, &free);
- pmap_invalidate_page(pmap, va);
- pmap_free_zero_pages(free);
- TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
- free_pv_entry(pmap, pv);
- if (pmap != locked_pmap)
- PMAP_UNLOCK(pmap);
+ }
+ }
+
+ /*
+ * Destroy every non-wired, 4 KB page mapping in the chunk.
+ */
+ freed = 0;
+ for (field = 0; field < _NPCM; field++) {
+ freemask = 0;
+ for (inuse = ~pc->pc_map[field] & pc_freemask[field];
+ inuse != 0; inuse &= ~(1UL << bit)) {
+ bit = bsfl(inuse);
+ pv = &pc->pc_pventry[field * 32 + bit];
+ va = pv->pv_va;
+ pte = pmap_pte_quick(pmap, va);
+ if ((*pte & PG_W) != 0)
+ continue;
+ tpte = pte_load_clear(pte);
+ if ((tpte & PG_G) != 0)
+ pmap_invalidate_page(pmap, va);
+ m = PHYS_TO_VM_PAGE(tpte & PG_FRAME);
+ if ((tpte & (PG_M | PG_RW)) == (PG_M | PG_RW))
+ vm_page_dirty(m);
+ if ((tpte & PG_A) != 0)
+ vm_page_aflag_set(m, PGA_REFERENCED);
+ TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
+ if (TAILQ_EMPTY(&m->md.pv_list))
+ vm_page_aflag_clear(m, PGA_WRITEABLE);
+ pmap_unuse_pt(pmap, va, &free);
+ freemask |= 1UL << bit;
+ freed++;
+ }
+ pc->pc_map[field] |= freemask;
+ }
+ if (freed == 0) {
+ TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
+ continue;
+ }
+ pmap->pm_stats.resident_count -= freed;
+ PV_STAT(pv_entry_frees += freed);
+ PV_STAT(pv_entry_spare += freed);
+ pv_entry_count -= freed;
+ TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
+ for (field = 0; field < _NPCM; field++)
+ if (pc->pc_map[field] != pc_freemask[field]) {
+ TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc,
+ pc_list);
+ TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
+
+ /*
+ * One freed pv entry in locked_pmap is
+ * sufficient.
+ */
+ if (pmap == locked_pmap)
+ goto out;
+ break;
+ }
+ if (field == _NPCM) {
+ PV_STAT(pv_entry_spare -= _NPCPV);
+ PV_STAT(pc_chunk_count--);
+ PV_STAT(pc_chunk_frees++);
+ /* Entire chunk is free; return it. */
+ m_pc = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc));
+ pmap_qremove((vm_offset_t)pc, 1);
+ pmap_ptelist_free(&pv_vafree, (vm_offset_t)pc);
+ break;
}
- if (TAILQ_EMPTY(&m->md.pv_list))
- vm_page_aflag_clear(m, PGA_WRITEABLE);
}
+out:
sched_unpin();
+ TAILQ_CONCAT(&pv_chunks, &newtail, pc_lru);
+ if (pmap != NULL) {
+ pmap_invalidate_all(pmap);
+ if (pmap != locked_pmap)
+ PMAP_UNLOCK(pmap);
+ }
+ if (m_pc == NULL && pv_vafree != 0 && free != NULL) {
+ m_pc = free;
+ free = m_pc->right;
+ /* Recycle a freed page table page. */
+ m_pc->wire_count = 1;
+ atomic_add_int(&cnt.v_wire_count, 1);
+ }
+ pmap_free_zero_pages(free);
+ return (m_pc);
}
-
/*
* free the pv_entry back to the free list
*/
@@ -2046,6 +2115,7 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv)
TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list);
return;
}
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
PV_STAT(pv_entry_spare -= _NPCPV);
PV_STAT(pc_chunk_count--);
PV_STAT(pc_chunk_frees++);
@@ -2062,11 +2132,10 @@ free_pv_entry(pmap_t pmap, pv_entry_t pv)
* when needed.
*/
static pv_entry_t
-get_pv_entry(pmap_t pmap, int try)
+get_pv_entry(pmap_t pmap, boolean_t try)
{
static const struct timeval printinterval = { 60, 0 };
static struct timeval lastprint;
- struct vpgqueues *pq;
int bit, field;
pv_entry_t pv;
struct pv_chunk *pc;
@@ -2081,7 +2150,6 @@ get_pv_entry(pmap_t pmap, int try)
printf("Approaching the limit on PV entries, consider "
"increasing either the vm.pmap.shpgperproc or the "
"vm.pmap.pv_entry_max tunable.\n");
- pq = NULL;
retry:
pc = TAILQ_FIRST(&pmap->pm_pvchunk);
if (pc != NULL) {
@@ -2102,6 +2170,10 @@ retry:
}
TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
TAILQ_INSERT_TAIL(&pmap->pm_pvchunk, pc, pc_list);
+ if (pc != TAILQ_LAST(&pv_chunks, pch)) {
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
+ TAILQ_INSERT_TAIL(&pv_chunks, pc, pc_lru);
+ }
PV_STAT(pv_entry_spare--);
return (pv);
}
@@ -2111,29 +2183,16 @@ retry:
* queues lock. If "pv_vafree" is currently non-empty, it will
* remain non-empty until pmap_ptelist_alloc() completes.
*/
- if (pv_vafree == 0 || (m = vm_page_alloc(NULL, 0, (pq ==
- &vm_page_queues[PQ_ACTIVE] ? VM_ALLOC_SYSTEM : VM_ALLOC_NORMAL) |
+ if (pv_vafree == 0 || (m = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL |
VM_ALLOC_NOOBJ | VM_ALLOC_WIRED)) == NULL) {
if (try) {
pv_entry_count--;
PV_STAT(pc_chunk_tryfail++);
return (NULL);
}
- /*
- * Reclaim pv entries: At first, destroy mappings to
- * inactive pages. After that, if a pv chunk entry
- * is still needed, destroy mappings to active pages.
- */
- if (pq == NULL) {
- PV_STAT(pmap_collect_inactive++);
- pq = &vm_page_queues[PQ_INACTIVE];
- } else if (pq == &vm_page_queues[PQ_INACTIVE]) {
- PV_STAT(pmap_collect_active++);
- pq = &vm_page_queues[PQ_ACTIVE];
- } else
- panic("get_pv_entry: increase vm.pmap.shpgperproc");
- pmap_collect(pmap, pq);
- goto retry;
+ m = pmap_pv_reclaim(pmap);
+ if (m == NULL)
+ goto retry;
}
PV_STAT(pc_chunk_count++);
PV_STAT(pc_chunk_allocs++);
@@ -2145,6 +2204,7 @@ retry:
pc->pc_map[0] = pc_freemask[0] & ~1ul; /* preallocated bit 0 */
for (field = 1; field < _NPCM; field++)
pc->pc_map[field] = pc_freemask[field];
+ TAILQ_INSERT_TAIL(&pv_chunks, pc, pc_lru);
pv = &pc->pc_pventry[0];
TAILQ_INSERT_HEAD(&pmap->pm_pvchunk, pc, pc_list);
PV_STAT(pv_entry_spare += _NPCPV - 1);
@@ -3535,6 +3595,7 @@ pmap_remove_pages(pmap_t pmap)
PV_STAT(pc_chunk_count--);
PV_STAT(pc_chunk_frees++);
TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list);
+ TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
m = PHYS_TO_VM_PAGE(pmap_kextract((vm_offset_t)pc));
pmap_qremove((vm_offset_t)pc, 1);
vm_page_unwire(m, 0);
diff --git a/sys/ia64/include/in_cksum.h b/sys/ia64/include/in_cksum.h
index 09920062a0ae..4fe1b4023f7b 100644
--- a/sys/ia64/include/in_cksum.h
+++ b/sys/ia64/include/in_cksum.h
@@ -39,6 +39,7 @@
#define in_cksum(m, len) in_cksum_skip(m, len, 0)
+#if defined(IPVERSION) && (IPVERSION == 4)
/*
* It it useful to have an Internet checksum routine which is inlineable
* and optimized specifically for the task of computing IP header checksums
@@ -65,9 +66,12 @@ in_cksum_update(struct ip *ip)
} while(0)
#endif
+#endif
#ifdef _KERNEL
+#if defined(IPVERSION) && (IPVERSION == 4)
u_int in_cksum_hdr(const struct ip *ip);
+#endif
u_short in_addword(u_short sum, u_short b);
u_short in_pseudo(u_int sum, u_int b, u_int c);
u_short in_cksum_skip(struct mbuf *m, int len, int skip);
diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c
index 7ace32607e6e..bb3fb85848bc 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 227691 2011-11-19 06:35:15Z ed
+ * created from FreeBSD: head/sys/kern/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
#include "opt_compat.h"
diff --git a/sys/kern/kern_clock.c b/sys/kern/kern_clock.c
index 57dd632fe5da..5e10200a49ad 100644
--- a/sys/kern/kern_clock.c
+++ b/sys/kern/kern_clock.c
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
#include "opt_kdb.h"
#include "opt_device_polling.h"
#include "opt_hwpmc_hooks.h"
+#include "opt_kdtrace.h"
#include "opt_ntp.h"
#include "opt_watchdog.h"
@@ -56,6 +57,7 @@ __FBSDID("$FreeBSD$");
#include <sys/resource.h>
#include <sys/resourcevar.h>
#include <sys/sched.h>
+#include <sys/sdt.h>
#include <sys/signalvar.h>
#include <sys/sleepqueue.h>
#include <sys/smp.h>
@@ -88,6 +90,9 @@ SYSINIT(clocks, SI_SUB_CLOCKS, SI_ORDER_FIRST, initclocks, NULL);
/* Spin-lock protecting profiling statistics. */
static struct mtx time_lock;
+SDT_PROVIDER_DECLARE(sched);
+SDT_PROBE_DEFINE2(sched, , , tick, tick, "struct thread *", "struct proc *");
+
static int
sysctl_kern_cp_time(SYSCTL_HANDLER_ARGS)
{
@@ -760,6 +765,7 @@ statclock_cnt(int cnt, int usermode)
ru->ru_maxrss = rss;
KTR_POINT2(KTR_SCHED, "thread", sched_tdname(td), "statclock",
"prio:%d", td->td_priority, "stathz:%d", (stathz)?stathz:hz);
+ SDT_PROBE2(sched, , , tick, td, td->td_proc);
thread_lock_flags(td, MTX_QUIET);
for ( ; cnt > 0; cnt--)
sched_clock(td);
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index 449d3d327467..f23c204969af 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -475,7 +475,6 @@ do_fork(struct thread *td, int flags, struct proc *p2, struct thread *td2,
bcopy(&p2->p_comm, &td2->td_name, sizeof(td2->td_name));
td2->td_sigstk = td->td_sigstk;
- td2->td_sigmask = td->td_sigmask;
td2->td_flags = TDF_INMEM;
td2->td_lend_user_pri = PRI_MAX;
@@ -939,8 +938,8 @@ fail:
#ifdef MAC
mac_proc_destroy(newproc);
#endif
-fail1:
racct_proc_exit(newproc);
+fail1:
if (vm2 != NULL)
vmspace_free(vm2);
uma_zfree(proc_zone, newproc);
diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c
index b782b977500e..4639e3c64f71 100644
--- a/sys/kern/kern_jail.c
+++ b/sys/kern/kern_jail.c
@@ -1811,6 +1811,16 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags)
}
}
+#ifdef RACCT
+ if (!created) {
+ sx_sunlock(&allprison_lock);
+ prison_racct_modify(pr);
+ sx_slock(&allprison_lock);
+ }
+#endif
+
+ td->td_retval[0] = pr->pr_id;
+
/*
* Now that it is all there, drop the temporary reference from existing
* prisons. Or add a reference to newly created persistent prisons
@@ -1832,12 +1842,6 @@ kern_jail_set(struct thread *td, struct uio *optuio, int flags)
sx_sunlock(&allprison_lock);
}
-#ifdef RACCT
- if (!created)
- prison_racct_modify(pr);
-#endif
-
- td->td_retval[0] = pr->pr_id;
goto done_errmsg;
done_deref_locked:
@@ -4491,8 +4495,11 @@ prison_racct_modify(struct prison *pr)
sx_slock(&allproc_lock);
sx_xlock(&allprison_lock);
- if (strcmp(pr->pr_name, pr->pr_prison_racct->prr_name) == 0)
+ if (strcmp(pr->pr_name, pr->pr_prison_racct->prr_name) == 0) {
+ sx_xunlock(&allprison_lock);
+ sx_sunlock(&allproc_lock);
return;
+ }
oldprr = pr->pr_prison_racct;
pr->pr_prison_racct = NULL;
diff --git a/sys/kern/kern_kthread.c b/sys/kern/kern_kthread.c
index 9dcdeb00406d..d8bbebd8ca66 100644
--- a/sys/kern/kern_kthread.c
+++ b/sys/kern/kern_kthread.c
@@ -271,7 +271,6 @@ kthread_add(void (*func)(void *), void *arg, struct proc *p,
bzero(&newtd->td_startzero,
__rangeof(struct thread, td_startzero, td_endzero));
-/* XXX check if we should zero. */
bcopy(&oldtd->td_startcopy, &newtd->td_startcopy,
__rangeof(struct thread, td_startcopy, td_endcopy));
@@ -295,7 +294,6 @@ kthread_add(void (*func)(void *), void *arg, struct proc *p,
/* this code almost the same as create_thread() in kern_thr.c */
PROC_LOCK(p);
p->p_flag |= P_HADTHREADS;
- newtd->td_sigmask = oldtd->td_sigmask; /* XXX dubious */
thread_link(newtd, p);
thread_lock(oldtd);
/* let the scheduler know about these things. */
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index cf7657668f00..153b310e855e 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -878,6 +878,9 @@ fill_kinfo_proc_only(struct proc *p, struct kinfo_proc *kp)
kp->ki_childtime = kp->ki_childstime;
timevaladd(&kp->ki_childtime, &kp->ki_childutime);
+ FOREACH_THREAD_IN_PROC(p, td0)
+ kp->ki_cow += td0->td_cow;
+
tp = NULL;
if (p->p_pgrp) {
kp->ki_pgid = p->p_pgrp->pg_id;
@@ -990,6 +993,7 @@ fill_kinfo_thread(struct thread *td, struct kinfo_proc *kp, int preferthread)
kp->ki_runtime = cputick2usec(td->td_rux.rux_runtime);
kp->ki_pctcpu = sched_pctcpu(td);
kp->ki_estcpu = td->td_estcpu;
+ kp->ki_cow = td->td_cow;
}
/* We can't get this anymore but ps etc never used it anyway. */
@@ -1132,6 +1136,7 @@ freebsd32_kinfo_proc_out(const struct kinfo_proc *ki, struct kinfo_proc32 *ki32)
CP(*ki, *ki32, ki_estcpu);
CP(*ki, *ki32, ki_slptime);
CP(*ki, *ki32, ki_swtime);
+ CP(*ki, *ki32, ki_cow);
CP(*ki, *ki32, ki_runtime);
TV_CP(*ki, *ki32, ki_start);
TV_CP(*ki, *ki32, ki_childtime);
diff --git a/sys/kern/kern_racct.c b/sys/kern/kern_racct.c
index 081b312df576..534780fe77f3 100644
--- a/sys/kern/kern_racct.c
+++ b/sys/kern/kern_racct.c
@@ -573,6 +573,9 @@ out:
PROC_UNLOCK(child);
PROC_UNLOCK(parent);
+ if (error != 0)
+ racct_proc_exit(child);
+
return (error);
}
diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c
index 9da342db5ae2..42923ff3c6a2 100644
--- a/sys/kern/kern_shutdown.c
+++ b/sys/kern/kern_shutdown.c
@@ -151,7 +151,7 @@ static struct dumperinfo dumper; /* our selected dumper */
/* Context information for dump-debuggers. */
static struct pcb dumppcb; /* Registers. */
-static lwpid_t dumptid; /* Thread ID. */
+lwpid_t dumptid; /* Thread ID. */
static void poweroff_wait(void *, int);
static void shutdown_halt(void *junk, int howto);
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c
index 85b11f9f94e0..e2e4081bf895 100644
--- a/sys/kern/kern_synch.c
+++ b/sys/kern/kern_synch.c
@@ -37,6 +37,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_kdtrace.h"
#include "opt_ktrace.h"
#include "opt_sched.h"
@@ -51,6 +52,7 @@ __FBSDID("$FreeBSD$");
#include <sys/proc.h>
#include <sys/resourcevar.h>
#include <sys/sched.h>
+#include <sys/sdt.h>
#include <sys/signalvar.h>
#include <sys/sleepqueue.h>
#include <sys/smp.h>
@@ -105,6 +107,20 @@ SYSCTL_INT(_kern, OID_AUTO, fscale, CTLFLAG_RD, 0, FSCALE, "");
static void loadav(void *arg);
+SDT_PROVIDER_DECLARE(sched);
+SDT_PROBE_DEFINE(sched, , , preempt, preempt);
+
+/*
+ * These probes reference Solaris features that are not implemented in FreeBSD.
+ * Create the probes anyway for compatibility with existing D scripts; they'll
+ * just never fire.
+ */
+SDT_PROBE_DEFINE(sched, , , cpucaps_sleep, cpucaps-sleep);
+SDT_PROBE_DEFINE(sched, , , cpucaps_wakeup, cpucaps-wakeup);
+SDT_PROBE_DEFINE(sched, , , schedctl_nopreempt, schedctl-nopreempt);
+SDT_PROBE_DEFINE(sched, , , schedctl_preempt, schedctl-preempt);
+SDT_PROBE_DEFINE(sched, , , schedctl_yield, schedctl-yield);
+
void
sleepinit(void)
{
@@ -462,6 +478,7 @@ mi_switch(int flags, struct thread *newtd)
"prio:%d", td->td_priority, "wmesg:\"%s\"", td->td_wmesg,
"lockname:\"%s\"", td->td_lockname);
#endif
+ SDT_PROBE0(sched, , , preempt);
#ifdef XEN
PT_UPDATES_FLUSH();
#endif
diff --git a/sys/kern/kern_thr.c b/sys/kern/kern_thr.c
index ee0da0224043..4270b41fd0c4 100644
--- a/sys/kern/kern_thr.c
+++ b/sys/kern/kern_thr.c
@@ -252,7 +252,6 @@ create_thread(struct thread *td, mcontext_t *ctx,
PROC_LOCK(td->td_proc);
td->td_proc->p_flag |= P_HADTHREADS;
- newtd->td_sigmask = td->td_sigmask;
thread_link(newtd, p);
bcopy(p->p_comm, newtd->td_name, sizeof(newtd->td_name));
thread_lock(td);
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c
index d4c5c4c8d2e0..3fbe96f470e9 100644
--- a/sys/kern/kern_thread.c
+++ b/sys/kern/kern_thread.c
@@ -27,6 +27,7 @@
*/
#include "opt_witness.h"
+#include "opt_kdtrace.h"
#include "opt_hwpmc_hooks.h"
#include <sys/cdefs.h>
@@ -39,6 +40,7 @@ __FBSDID("$FreeBSD$");
#include <sys/mutex.h>
#include <sys/proc.h>
#include <sys/resourcevar.h>
+#include <sys/sdt.h>
#include <sys/smp.h>
#include <sys/sched.h>
#include <sys/sleepqueue.h>
@@ -59,6 +61,10 @@ __FBSDID("$FreeBSD$");
#include <vm/uma.h>
#include <sys/eventhandler.h>
+SDT_PROVIDER_DECLARE(proc);
+SDT_PROBE_DEFINE(proc, , , lwp_exit, lwp-exit);
+
+
/*
* thread related storage.
*/
diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c
index 1bd1cdd5ef5a..84fdb1f5c0c6 100644
--- a/sys/kern/sched_4bsd.c
+++ b/sys/kern/sched_4bsd.c
@@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
#include <sys/proc.h>
#include <sys/resourcevar.h>
#include <sys/sched.h>
+#include <sys/sdt.h>
#include <sys/smp.h>
#include <sys/sysctl.h>
#include <sys/sx.h>
@@ -244,12 +245,31 @@ SYSCTL_INT(_kern_sched, OID_AUTO, followon, CTLFLAG_RW,
"allow threads to share a quantum");
#endif
+SDT_PROVIDER_DEFINE(sched);
+
+SDT_PROBE_DEFINE3(sched, , , change_pri, change-pri, "struct thread *",
+ "struct proc *", "uint8_t");
+SDT_PROBE_DEFINE3(sched, , , dequeue, dequeue, "struct thread *",
+ "struct proc *", "void *");
+SDT_PROBE_DEFINE4(sched, , , enqueue, enqueue, "struct thread *",
+ "struct proc *", "void *", "int");
+SDT_PROBE_DEFINE4(sched, , , lend_pri, lend-pri, "struct thread *",
+ "struct proc *", "uint8_t", "struct thread *");
+SDT_PROBE_DEFINE2(sched, , , load_change, load-change, "int", "int");
+SDT_PROBE_DEFINE2(sched, , , off_cpu, off-cpu, "struct thread *",
+ "struct proc *");
+SDT_PROBE_DEFINE(sched, , , on_cpu, on-cpu);
+SDT_PROBE_DEFINE(sched, , , remain_cpu, remain-cpu);
+SDT_PROBE_DEFINE2(sched, , , surrender, surrender, "struct thread *",
+ "struct proc *");
+
static __inline void
sched_load_add(void)
{
sched_tdcnt++;
KTR_COUNTER0(KTR_SCHED, "load", "global load", sched_tdcnt);
+ SDT_PROBE2(sched, , , load_change, NOCPU, sched_tdcnt);
}
static __inline void
@@ -258,6 +278,7 @@ sched_load_rem(void)
sched_tdcnt--;
KTR_COUNTER0(KTR_SCHED, "load", "global load", sched_tdcnt);
+ SDT_PROBE2(sched, , , load_change, NOCPU, sched_tdcnt);
}
/*
* Arrange to reschedule if necessary, taking the priorities and
@@ -795,10 +816,13 @@ sched_priority(struct thread *td, u_char prio)
KTR_POINT3(KTR_SCHED, "thread", sched_tdname(td), "priority change",
"prio:%d", td->td_priority, "new prio:%d", prio, KTR_ATTR_LINKED,
sched_tdname(curthread));
+ SDT_PROBE3(sched, , , change_pri, td, td->td_proc, prio);
if (td != curthread && prio > td->td_priority) {
KTR_POINT3(KTR_SCHED, "thread", sched_tdname(curthread),
"lend prio", "prio:%d", td->td_priority, "new prio:%d",
prio, KTR_ATTR_LINKED, sched_tdname(td));
+ SDT_PROBE4(sched, , , lend_pri, td, td->td_proc, prio,
+ curthread);
}
THREAD_LOCK_ASSERT(td, MA_OWNED);
if (td->td_priority == prio)
@@ -987,6 +1011,9 @@ sched_switch(struct thread *td, struct thread *newtd, int flags)
if (PMC_PROC_IS_USING_PMCS(td->td_proc))
PMC_SWITCH_CONTEXT(td, PMC_FN_CSW_OUT);
#endif
+
+ SDT_PROBE2(sched, , , off_cpu, td, td->td_proc);
+
/* I feel sleepy */
lock_profile_release_lock(&sched_lock.lock_object);
#ifdef KDTRACE_HOOKS
@@ -1018,11 +1045,14 @@ sched_switch(struct thread *td, struct thread *newtd, int flags)
* needed to, or the thread_wait() or wait() will
* need to reap it.
*/
+
+ SDT_PROBE0(sched, , , on_cpu);
#ifdef HWPMC_HOOKS
if (PMC_PROC_IS_USING_PMCS(td->td_proc))
PMC_SWITCH_CONTEXT(td, PMC_FN_CSW_IN);
#endif
- }
+ } else
+ SDT_PROBE0(sched, , , remain_cpu);
#ifdef SMP
if (td->td_flags & TDF_IDLETD)
@@ -1223,6 +1253,8 @@ sched_add(struct thread *td, int flags)
sched_tdname(curthread));
KTR_POINT1(KTR_SCHED, "thread", sched_tdname(curthread), "wokeup",
KTR_ATTR_LINKED, sched_tdname(td));
+ SDT_PROBE4(sched, , , enqueue, td, td->td_proc, NULL,
+ flags & SRQ_PREEMPTED);
/*
@@ -1315,6 +1347,8 @@ sched_add(struct thread *td, int flags)
sched_tdname(curthread));
KTR_POINT1(KTR_SCHED, "thread", sched_tdname(curthread), "wokeup",
KTR_ATTR_LINKED, sched_tdname(td));
+ SDT_PROBE4(sched, , , enqueue, td, td->td_proc, NULL,
+ flags & SRQ_PREEMPTED);
/*
* Now that the thread is moving to the run-queue, set the lock
@@ -1362,6 +1396,7 @@ sched_rem(struct thread *td)
KTR_STATE2(KTR_SCHED, "thread", sched_tdname(td), "runq rem",
"prio:%d", td->td_priority, KTR_ATTR_LINKED,
sched_tdname(curthread));
+ SDT_PROBE3(sched, , , dequeue, td, td->td_proc, NULL);
if ((td->td_flags & TDF_NOLOAD) == 0)
sched_load_rem();
@@ -1425,6 +1460,8 @@ sched_choose(void)
void
sched_preempt(struct thread *td)
{
+
+ SDT_PROBE2(sched, , , surrender, td, td->td_proc);
thread_lock(td);
if (td->td_critnest > 1)
td->td_owepreempt = 1;
diff --git a/sys/kern/sched_ule.c b/sys/kern/sched_ule.c
index 7e5af09eaa57..726362d3af24 100644
--- a/sys/kern/sched_ule.c
+++ b/sys/kern/sched_ule.c
@@ -53,6 +53,7 @@ __FBSDID("$FreeBSD$");
#include <sys/resource.h>
#include <sys/resourcevar.h>
#include <sys/sched.h>
+#include <sys/sdt.h>
#include <sys/smp.h>
#include <sys/sx.h>
#include <sys/sysctl.h>
@@ -76,7 +77,7 @@ dtrace_vtime_switch_func_t dtrace_vtime_switch_func;
#include <machine/cpu.h>
#include <machine/smp.h>
-#if defined(__powerpc__) && defined(E500)
+#if defined(__powerpc__) && defined(BOOKE_E500)
#error "This architecture is not currently compatible with ULE"
#endif
@@ -327,6 +328,24 @@ static void sched_initticks(void *dummy);
SYSINIT(sched_initticks, SI_SUB_CLOCKS, SI_ORDER_THIRD, sched_initticks,
NULL);
+SDT_PROVIDER_DEFINE(sched);
+
+SDT_PROBE_DEFINE3(sched, , , change_pri, change-pri, "struct thread *",
+ "struct proc *", "uint8_t");
+SDT_PROBE_DEFINE3(sched, , , dequeue, dequeue, "struct thread *",
+ "struct proc *", "void *");
+SDT_PROBE_DEFINE4(sched, , , enqueue, enqueue, "struct thread *",
+ "struct proc *", "void *", "int");
+SDT_PROBE_DEFINE4(sched, , , lend_pri, lend-pri, "struct thread *",
+ "struct proc *", "uint8_t", "struct thread *");
+SDT_PROBE_DEFINE2(sched, , , load_change, load-change, "int", "int");
+SDT_PROBE_DEFINE2(sched, , , off_cpu, off-cpu, "struct thread *",
+ "struct proc *");
+SDT_PROBE_DEFINE(sched, , , on_cpu, on-cpu);
+SDT_PROBE_DEFINE(sched, , , remain_cpu, remain-cpu);
+SDT_PROBE_DEFINE2(sched, , , surrender, surrender, "struct thread *",
+ "struct proc *");
+
/*
* Print the threads waiting on a run-queue.
*/
@@ -509,6 +528,7 @@ tdq_load_add(struct tdq *tdq, struct thread *td)
if ((td->td_flags & TDF_NOLOAD) == 0)
tdq->tdq_sysload++;
KTR_COUNTER0(KTR_SCHED, "load", tdq->tdq_loadname, tdq->tdq_load);
+ SDT_PROBE2(sched, , , load_change, (int)TDQ_ID(tdq), tdq->tdq_load);
}
/*
@@ -528,6 +548,7 @@ tdq_load_rem(struct tdq *tdq, struct thread *td)
if ((td->td_flags & TDF_NOLOAD) == 0)
tdq->tdq_sysload--;
KTR_COUNTER0(KTR_SCHED, "load", tdq->tdq_loadname, tdq->tdq_load);
+ SDT_PROBE2(sched, , , load_change, (int)TDQ_ID(tdq), tdq->tdq_load);
}
/*
@@ -1625,10 +1646,13 @@ sched_thread_priority(struct thread *td, u_char prio)
KTR_POINT3(KTR_SCHED, "thread", sched_tdname(td), "prio",
"prio:%d", td->td_priority, "new prio:%d", prio,
KTR_ATTR_LINKED, sched_tdname(curthread));
+ SDT_PROBE3(sched, , , change_pri, td, td->td_proc, prio);
if (td != curthread && prio > td->td_priority) {
KTR_POINT3(KTR_SCHED, "thread", sched_tdname(curthread),
"lend prio", "prio:%d", td->td_priority, "new prio:%d",
prio, KTR_ATTR_LINKED, sched_tdname(td));
+ SDT_PROBE4(sched, , , lend_pri, td, td->td_proc, prio,
+ curthread);
}
ts = td->td_sched;
THREAD_LOCK_ASSERT(td, MA_OWNED);
@@ -1879,6 +1903,7 @@ sched_switch(struct thread *td, struct thread *newtd, int flags)
if (PMC_PROC_IS_USING_PMCS(td->td_proc))
PMC_SWITCH_CONTEXT(td, PMC_FN_CSW_OUT);
#endif
+ SDT_PROBE2(sched, , , off_cpu, td, td->td_proc);
lock_profile_release_lock(&TDQ_LOCKPTR(tdq)->lock_object);
TDQ_LOCKPTR(tdq)->mtx_lock = (uintptr_t)newtd;
sched_pctcpu_update(newtd->td_sched, 0);
@@ -1903,12 +1928,16 @@ sched_switch(struct thread *td, struct thread *newtd, int flags)
tdq = TDQ_CPU(cpuid);
lock_profile_obtain_lock_success(
&TDQ_LOCKPTR(tdq)->lock_object, 0, 0, __FILE__, __LINE__);
+
+ SDT_PROBE0(sched, , , on_cpu);
#ifdef HWPMC_HOOKS
if (PMC_PROC_IS_USING_PMCS(td->td_proc))
PMC_SWITCH_CONTEXT(td, PMC_FN_CSW_IN);
#endif
- } else
+ } else {
thread_unblock_switch(td, mtx);
+ SDT_PROBE0(sched, , , remain_cpu);
+ }
/*
* Assert that all went well and return.
*/
@@ -2102,6 +2131,8 @@ sched_preempt(struct thread *td)
{
struct tdq *tdq;
+ SDT_PROBE2(sched, , , surrender, td, td->td_proc);
+
thread_lock(td);
tdq = TDQ_SELF();
TDQ_LOCK_ASSERT(tdq, MA_OWNED);
@@ -2330,6 +2361,8 @@ sched_add(struct thread *td, int flags)
sched_tdname(curthread));
KTR_POINT1(KTR_SCHED, "thread", sched_tdname(curthread), "wokeup",
KTR_ATTR_LINKED, sched_tdname(td));
+ SDT_PROBE4(sched, , , enqueue, td, td->td_proc, NULL,
+ flags & SRQ_PREEMPTED);
THREAD_LOCK_ASSERT(td, MA_OWNED);
/*
* Recalculate the priority before we select the target cpu or
@@ -2375,6 +2408,7 @@ sched_rem(struct thread *td)
KTR_STATE1(KTR_SCHED, "thread", sched_tdname(td), "runq rem",
"prio:%d", td->td_priority);
+ SDT_PROBE3(sched, , , dequeue, td, td->td_proc, NULL);
tdq = TDQ_CPU(td->td_sched->ts_cpu);
TDQ_LOCK_ASSERT(tdq, MA_OWNED);
MPASS(td->td_lock == TDQ_LOCKPTR(tdq));
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index e72ab771cff1..def16526f38f 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -1810,6 +1810,8 @@ device_add_child_ordered(device_t dev, u_int order, const char *name, int unit)
PDEBUG(("%s at %s with order %u as unit %d",
name, DEVICENAME(dev), order, unit));
+ KASSERT(name != NULL || unit == -1,
+ ("child device with wildcard name and specific unit number"));
child = make_device(dev, name, unit);
if (child == NULL)
diff --git a/sys/kern/subr_sleepqueue.c b/sys/kern/subr_sleepqueue.c
index bbf79db88337..b868289e720d 100644
--- a/sys/kern/subr_sleepqueue.c
+++ b/sys/kern/subr_sleepqueue.c
@@ -64,6 +64,7 @@ __FBSDID("$FreeBSD$");
#include "opt_sleepqueue_profiling.h"
#include "opt_ddb.h"
+#include "opt_kdtrace.h"
#include "opt_sched.h"
#include <sys/param.h>
@@ -75,6 +76,7 @@ __FBSDID("$FreeBSD$");
#include <sys/proc.h>
#include <sys/sbuf.h>
#include <sys/sched.h>
+#include <sys/sdt.h>
#include <sys/signalvar.h>
#include <sys/sleepqueue.h>
#include <sys/sysctl.h>
@@ -166,6 +168,9 @@ static int sleepq_resume_thread(struct sleepqueue *sq, struct thread *td,
static void sleepq_switch(void *wchan, int pri);
static void sleepq_timeout(void *arg);
+SDT_PROBE_DECLARE(sched, , , sleep);
+SDT_PROBE_DECLARE(sched, , , wakeup);
+
/*
* Early initialization of sleep queues that is called from the sleepinit()
* SYSINIT.
@@ -534,6 +539,7 @@ sleepq_switch(void *wchan, int pri)
MPASS(td->td_sleepqueue == NULL);
sched_sleep(td, pri);
thread_lock_set(td, &sc->sc_lock);
+ SDT_PROBE0(sched, , , sleep);
TD_SET_SLEEPING(td);
mi_switch(SW_VOL | SWT_SLEEPQ, NULL);
KASSERT(TD_IS_RUNNING(td), ("running but not TDS_RUNNING"));
@@ -715,6 +721,8 @@ sleepq_resume_thread(struct sleepqueue *sq, struct thread *td, int pri)
sc = SC_LOOKUP(sq->sq_wchan);
mtx_assert(&sc->sc_lock, MA_OWNED);
+ SDT_PROBE2(sched, , , wakeup, td, td->td_proc);
+
/* Remove the thread from the queue. */
sq->sq_blockedcnt[td->td_sqqueue]--;
TAILQ_REMOVE(&sq->sq_blocked[td->td_sqqueue], td, td_slpq);
diff --git a/sys/kern/subr_smp.c b/sys/kern/subr_smp.c
index 5dd0c556b5b5..8edd8af87a65 100644
--- a/sys/kern/subr_smp.c
+++ b/sys/kern/subr_smp.c
@@ -209,7 +209,7 @@ generic_stop_cpus(cpuset_t map, u_int type)
int i;
KASSERT(
-#if defined(__amd64__)
+#if defined(__amd64__) || defined(__i386__)
type == IPI_STOP || type == IPI_STOP_HARD || type == IPI_SUSPEND,
#else
type == IPI_STOP || type == IPI_STOP_HARD,
@@ -260,7 +260,7 @@ stop_cpus_hard(cpuset_t map)
return (generic_stop_cpus(map, IPI_STOP_HARD));
}
-#if defined(__amd64__)
+#if defined(__amd64__) || defined(__i386__)
int
suspend_cpus(cpuset_t map)
{
diff --git a/sys/kern/subr_turnstile.c b/sys/kern/subr_turnstile.c
index c3370db4f08e..76fb96400362 100644
--- a/sys/kern/subr_turnstile.c
+++ b/sys/kern/subr_turnstile.c
@@ -60,6 +60,7 @@
__FBSDID("$FreeBSD$");
#include "opt_ddb.h"
+#include "opt_kdtrace.h"
#include "opt_turnstile_profiling.h"
#include "opt_sched.h"
@@ -73,6 +74,7 @@ __FBSDID("$FreeBSD$");
#include <sys/proc.h>
#include <sys/queue.h>
#include <sys/sched.h>
+#include <sys/sdt.h>
#include <sys/sysctl.h>
#include <sys/turnstile.h>
@@ -167,6 +169,11 @@ static void turnstile_dtor(void *mem, int size, void *arg);
static int turnstile_init(void *mem, int size, int flags);
static void turnstile_fini(void *mem, int size);
+SDT_PROVIDER_DECLARE(sched);
+SDT_PROBE_DEFINE(sched, , , sleep, sleep);
+SDT_PROBE_DEFINE2(sched, , , wakeup, wakeup, "struct thread *",
+ "struct proc *");
+
/*
* Walks the chain of turnstiles and their owners to propagate the priority
* of the thread being blocked to all the threads holding locks that have to
@@ -740,6 +747,8 @@ turnstile_wait(struct turnstile *ts, struct thread *owner, int queue)
CTR4(KTR_LOCK, "%s: td %d blocked on [%p] %s", __func__,
td->td_tid, lock, lock->lo_name);
+ SDT_PROBE0(sched, , , sleep);
+
THREAD_LOCKPTR_ASSERT(td, &ts->ts_lock);
mi_switch(SW_VOL | SWT_TURNSTILE, NULL);
@@ -916,6 +925,7 @@ turnstile_unpend(struct turnstile *ts, int owner_type)
while (!TAILQ_EMPTY(&pending_threads)) {
td = TAILQ_FIRST(&pending_threads);
TAILQ_REMOVE(&pending_threads, td, td_lockq);
+ SDT_PROBE2(sched, , , wakeup, td, td->td_proc);
thread_lock(td);
THREAD_LOCKPTR_ASSERT(td, &ts->ts_lock);
MPASS(td->td_proc->p_magic == P_MAGIC);
diff --git a/sys/kern/subr_witness.c b/sys/kern/subr_witness.c
index 52045b6802ff..f14be503cef3 100644
--- a/sys/kern/subr_witness.c
+++ b/sys/kern/subr_witness.c
@@ -564,7 +564,7 @@ static struct witness_order_list_entry order_lists[] = {
*/
{ "bpf global lock", &lock_class_mtx_sleep },
{ "bpf interface lock", &lock_class_rw },
- { "bpf cdev lock", &lock_class_rw },
+ { "bpf cdev lock", &lock_class_mtx_sleep },
{ NULL, NULL },
/*
* NFS server
diff --git a/sys/kern/syscalls.c b/sys/kern/syscalls.c
index dd82db7ec838..a2ea5c8bcdb0 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 227691 2011-11-19 06:35:15Z ed
+ * created from FreeBSD: head/sys/kern/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
const char *syscallnames[] = {
diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master
index e10af89a2b5b..f62dad7642df 100644
--- a/sys/kern/syscalls.master
+++ b/sys/kern/syscalls.master
@@ -916,9 +916,9 @@
512 AUE_SHMCTL NOSTD { int shmctl(int shmid, int cmd, \
struct shmid_ds *buf); }
513 AUE_LPATHCONF STD { int lpathconf(char *path, int name); }
-514 AUE_CAP_NEW STD { int cap_new(int fd, u_int64_t rights); }
+514 AUE_CAP_NEW STD { int cap_new(int fd, uint64_t rights); }
515 AUE_CAP_GETRIGHTS STD { int cap_getrights(int fd, \
- u_int64_t *rightsp); }
+ uint64_t *rightsp); }
516 AUE_CAP_ENTER STD { int cap_enter(void); }
517 AUE_CAP_GETMODE STD { int cap_getmode(u_int *modep); }
518 AUE_PDFORK STD { int pdfork(int *fdp, int flags); }
diff --git a/sys/kern/systrace_args.c b/sys/kern/systrace_args.c
index 4a5d72a983f1..522954bef55e 100644
--- a/sys/kern/systrace_args.c
+++ b/sys/kern/systrace_args.c
@@ -3121,7 +3121,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 514: {
struct cap_new_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = p->rights; /* u_int64_t */
+ uarg[1] = p->rights; /* uint64_t */
*n_args = 2;
break;
}
@@ -3129,7 +3129,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 515: {
struct cap_getrights_args *p = params;
iarg[0] = p->fd; /* int */
- uarg[1] = (intptr_t) p->rightsp; /* u_int64_t * */
+ uarg[1] = (intptr_t) p->rightsp; /* uint64_t * */
*n_args = 2;
break;
}
@@ -8434,7 +8434,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "u_int64_t";
+ p = "uint64_t";
break;
default:
break;
@@ -8447,7 +8447,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "int";
break;
case 1:
- p = "u_int64_t *";
+ p = "uint64_t *";
break;
default:
break;
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
index 4eac76d133a1..ba8265ae26b2 100644
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -2640,8 +2640,8 @@ loop:
if (bp != NULL) {
int lockflags;
/*
- * Buffer is in-core. If the buffer is not busy, it must
- * be on a queue.
+ * Buffer is in-core. If the buffer is not busy nor managed,
+ * it must be on a queue.
*/
lockflags = LK_EXCLUSIVE | LK_SLEEPFAIL | LK_INTERLOCK;
@@ -2671,9 +2671,13 @@ loop:
bp->b_flags &= ~B_CACHE;
else if ((bp->b_flags & (B_VMIO | B_INVAL)) == 0)
bp->b_flags |= B_CACHE;
- BO_LOCK(bo);
- bremfree(bp);
- BO_UNLOCK(bo);
+ if (bp->b_flags & B_MANAGED)
+ MPASS(bp->b_qindex == QUEUE_NONE);
+ else {
+ BO_LOCK(bo);
+ bremfree(bp);
+ BO_UNLOCK(bo);
+ }
/*
* check for size inconsistancies for non-VMIO case.
diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c
index 4e6276583888..91b30a814ed9 100644
--- a/sys/kern/vfs_default.c
+++ b/sys/kern/vfs_default.c
@@ -343,8 +343,8 @@ dirent_exists(struct vnode *vp, const char *dirname, struct thread *td)
if (error)
goto out;
- if ((dp->d_type != DT_WHT) &&
- !strcmp(dp->d_name, dirname)) {
+ if (dp->d_type != DT_WHT && dp->d_fileno != 0 &&
+ strcmp(dp->d_name, dirname) == 0) {
found = 1;
goto out;
}
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 04005041f120..79206a0a6806 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -4136,7 +4136,8 @@ sys_getdirentries(td, uap)
long base;
int error;
- error = kern_getdirentries(td, uap->fd, uap->buf, uap->count, &base);
+ error = kern_getdirentries(td, uap->fd, uap->buf, uap->count, &base,
+ NULL, UIO_USERSPACE);
if (error)
return (error);
if (uap->basep != NULL)
@@ -4146,7 +4147,7 @@ sys_getdirentries(td, uap)
int
kern_getdirentries(struct thread *td, int fd, char *buf, u_int count,
- long *basep)
+ long *basep, ssize_t *residp, enum uio_seg bufseg)
{
struct vnode *vp;
struct file *fp;
@@ -4180,7 +4181,7 @@ unionread:
auio.uio_iov = &aiov;
auio.uio_iovcnt = 1;
auio.uio_rw = UIO_READ;
- auio.uio_segflg = UIO_USERSPACE;
+ auio.uio_segflg = bufseg;
auio.uio_td = td;
vn_lock(vp, LK_SHARED | LK_RETRY);
AUDIT_ARG_VNODE1(vp);
@@ -4213,6 +4214,8 @@ unionread:
VOP_UNLOCK(vp, 0);
VFS_UNLOCK_GIANT(vfslocked);
*basep = loff;
+ if (residp != NULL)
+ *residp = auio.uio_resid;
td->td_retval[0] = count - auio.uio_resid;
fail:
fdrop(fp, td);
@@ -4679,7 +4682,22 @@ sys_fhstat(td, uap)
} */ *uap;
{
struct stat sb;
- fhandle_t fh;
+ struct fhandle fh;
+ int error;
+
+ error = copyin(uap->u_fhp, &fh, sizeof(fh));
+ if (error != 0)
+ return (error);
+ error = kern_fhstat(td, fh, &sb);
+ if (error != 0)
+ return (error);
+ error = copyout(&sb, uap->sb, sizeof(sb));
+ return (error);
+}
+
+int
+kern_fhstat(struct thread *td, struct fhandle fh, struct stat *sb)
+{
struct mount *mp;
struct vnode *vp;
int vfslocked;
@@ -4688,9 +4706,6 @@ sys_fhstat(td, uap)
error = priv_check(td, PRIV_VFS_FHSTAT);
if (error)
return (error);
- error = copyin(uap->u_fhp, &fh, sizeof(fhandle_t));
- if (error)
- return (error);
if ((mp = vfs_busyfs(&fh.fh_fsid)) == NULL)
return (ESTALE);
vfslocked = VFS_LOCK_GIANT(mp);
@@ -4700,12 +4715,9 @@ sys_fhstat(td, uap)
VFS_UNLOCK_GIANT(vfslocked);
return (error);
}
- error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td);
+ error = vn_stat(vp, sb, td->td_ucred, NOCRED, td);
vput(vp);
VFS_UNLOCK_GIANT(vfslocked);
- if (error)
- return (error);
- error = copyout(&sb, uap->sb, sizeof(sb));
return (error);
}
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index d4b60f1c16ce..56c98298b5c5 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -1466,3 +1466,56 @@ vn_pages_remove(struct vnode *vp, vm_pindex_t start, vm_pindex_t end)
vm_object_page_remove(object, start, end, 0);
VM_OBJECT_UNLOCK(object);
}
+
+int
+vn_bmap_seekhole(struct vnode *vp, u_long cmd, off_t *off, struct ucred *cred)
+{
+ struct vattr va;
+ daddr_t bn, bnp;
+ uint64_t bsize;
+ off_t noff;
+ int error;
+
+ KASSERT(cmd == FIOSEEKHOLE || cmd == FIOSEEKDATA,
+ ("Wrong command %lu", cmd));
+
+ if (vn_lock(vp, LK_SHARED) != 0)
+ return (EBADF);
+ if (vp->v_type != VREG) {
+ error = ENOTTY;
+ goto unlock;
+ }
+ error = VOP_GETATTR(vp, &va, cred);
+ if (error != 0)
+ goto unlock;
+ noff = *off;
+ if (noff >= va.va_size) {
+ error = ENXIO;
+ goto unlock;
+ }
+ bsize = vp->v_mount->mnt_stat.f_iosize;
+ for (bn = noff / bsize; noff < va.va_size; bn++, noff += bsize) {
+ error = VOP_BMAP(vp, bn, NULL, &bnp, NULL, NULL);
+ if (error == EOPNOTSUPP) {
+ error = ENOTTY;
+ goto unlock;
+ }
+ if ((bnp == -1 && cmd == FIOSEEKHOLE) ||
+ (bnp != -1 && cmd == FIOSEEKDATA)) {
+ noff = bn * bsize;
+ if (noff < *off)
+ noff = *off;
+ goto unlock;
+ }
+ }
+ if (noff > va.va_size)
+ noff = va.va_size;
+ /* noff == va.va_size. There is an implicit hole at the end of file. */
+ if (cmd == FIOSEEKDATA)
+ error = ENXIO;
+unlock:
+ VOP_UNLOCK(vp, 0);
+ if (error == 0)
+ *off = noff;
+ return (error);
+}
diff --git a/sys/libkern/iconv.c b/sys/libkern/iconv.c
index 92b04c2864e6..ed928f0f767d 100644
--- a/sys/libkern/iconv.c
+++ b/sys/libkern/iconv.c
@@ -133,6 +133,7 @@ iconv_register_converter(struct iconv_converter_class *dcp)
static int
iconv_unregister_converter(struct iconv_converter_class *dcp)
{
+ dcp->refs--;
if (dcp->refs > 1) {
ICDEBUG("converter have %d referenses left\n", dcp->refs);
return EBUSY;
@@ -549,9 +550,7 @@ int
iconv_lookupcp(char **cpp, const char *s)
{
if (cpp == NULL) {
- ICDEBUG("warning a NULL list passed\n", ""); /* XXX ISO variadic macros cannot
- leave out the
- variadic args */
+ ICDEBUG("warning a NULL list passed\n", "");
return ENOENT;
}
for (; *cpp; cpp++)
diff --git a/sys/libkern/iconv_ucs.c b/sys/libkern/iconv_ucs.c
index c6f28236a743..30810ebab15b 100644
--- a/sys/libkern/iconv_ucs.c
+++ b/sys/libkern/iconv_ucs.c
@@ -457,8 +457,6 @@ utf8_to_ucs4(const char *src, size_t *utf8width, size_t srclen)
/* out of utf-16 range or having illegal bits */
return (0);
}
- if (w == 0)
- return (0);
if (srclen < w)
return (0);
diff --git a/sys/mips/conf/RSPRO b/sys/mips/conf/RSPRO
index 8684f070c410..5374b367ae29 100644
--- a/sys/mips/conf/RSPRO
+++ b/sys/mips/conf/RSPRO
@@ -21,6 +21,12 @@ options GEOM_PART_BSD
options GEOM_PART_MBR
options MSDOSFS
+# For etherswitch support
+options ARGE_MDIO
+device miiproxy
+device etherswitch
+device arswitch
+
# Boot off of flash
options ROOTDEVNAME=\"ufs:redboot/rootfs.uzip\"
diff --git a/sys/mips/conf/RSPRO.hints b/sys/mips/conf/RSPRO.hints
index 68edb2840e11..3be5d1361ca5 100644
--- a/sys/mips/conf/RSPRO.hints
+++ b/sys/mips/conf/RSPRO.hints
@@ -1,10 +1,27 @@
# $FreeBSD$
-hint.arge.0.phymask=0x10
+# arge0 mdio bus
+hint.argemdio.0.at="nexus0"
+hint.argemdio.0.maddr=0x19000000
+hint.argemdio.0.msize=0x1000
+hint.argemdio.0.order=0
-hint.arge.1.media=1000
-hint.arge.1.fduplex=1
-hint.arge.1.phymask=0x0e
+# arge0: dedicated switch port
+hint.arge.0.phymask=0x10 # PHY4
+hint.arge.0.miimode=3 # RGMII
+hint.arge.0.mdio=mdioproxy1 # .. off of the switch mdiobus
+
+# arge1: nail to 1000/full, RGMII - connected to the switch
+hint.arge.1.media=1000 # Map to 1000/full
+hint.arge.1.fduplex=1 #
+hint.arge.1.phymask=0x0 # no directly mapped PHYs
+hint.arge.1.miimode=3 # RGMII
+
+hint.arswitch.0.is_7240=0
+hint.arswitch.0.numphys=4
+hint.arswitch.0.phy4cpu=1
+hint.arswitch.0.is_rgmii=1
+hint.arswitch.0.is_gmii=0
# Don't flip on anything that isn't already enabled.
# This includes leaving the SPI CS1/CS2 pins as GPIO pins as they're
diff --git a/sys/mips/include/in_cksum.h b/sys/mips/include/in_cksum.h
index 37d88e2e1a8a..633efa1ff21d 100644
--- a/sys/mips/include/in_cksum.h
+++ b/sys/mips/include/in_cksum.h
@@ -40,6 +40,7 @@
#define in_cksum(m, len) in_cksum_skip(m, len, 0)
+#if defined(IPVERSION) && (IPVERSION == 4)
/*
* It it useful to have an Internet checksum routine which is inlineable
* and optimized specifically for the task of computing IP header checksums
@@ -66,9 +67,12 @@ in_cksum_update(struct ip *ip)
} while(0)
#endif
+#endif
#ifdef _KERNEL
+#if defined(IPVERSION) && (IPVERSION == 4)
u_int in_cksum_hdr(const struct ip *ip);
+#endif
u_short in_addword(u_short sum, u_short b);
u_short in_pseudo(u_int sum, u_int b, u_int c);
u_short in_cksum_skip(struct mbuf *m, int len, int skip);
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index ed32b1c6af3a..637619573e37 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -87,6 +87,7 @@ SUBDIR= ${_3dfx} \
${_dpms} \
${_dpt} \
${_drm} \
+ ${_drm2} \
${_dtrace} \
dummynet \
${_ed} \
@@ -217,6 +218,8 @@ SUBDIR= ${_3dfx} \
${_mwlfw} \
mxge \
my \
+ ${_nandfs} \
+ ${_nandsim} \
${_ncp} \
${_ncv} \
${_ndis} \
@@ -335,7 +338,6 @@ SUBDIR= ${_3dfx} \
vx \
${_vxge} \
wb \
- ${_wbwd} \
${_wi} \
wlan \
wlan_acl \
@@ -398,6 +400,11 @@ _ipdivert= ipdivert
_ipfw= ipfw
.endif
+.if ${MK_NAND} != "no" || defined(ALL_MODULES)
+_nandfs= nandfs
+_nandsim= nandsim
+.endif
+
.if ${MK_NETGRAPH} != "no" || defined(ALL_MODULES)
_netgraph= netgraph
.endif
@@ -455,6 +462,7 @@ _cyclic= cyclic
.endif
_dpms= dpms
_drm= drm
+_drm2= drm2
.if ${MK_CDDL} != "no" || defined(ALL_MODULES)
_dtrace= dtrace
.endif
@@ -513,7 +521,6 @@ _stg= stg
_streams= streams
_svr4= svr4
_vxge= vxge
-_wbwd= wbwd
_wi= wi
_xe= xe
.if ${MK_ZFS} != "no" || defined(ALL_MODULES)
@@ -625,6 +632,7 @@ _cyclic= cyclic
.endif
_dpms= dpms
_drm= drm
+_drm2= drm2
.if ${MK_CDDL} != "no" || defined(ALL_MODULES)
_dtrace= dtrace
.endif
@@ -708,7 +716,6 @@ _viawd= viawd
_virtio= virtio
_vxge= vxge
_x86bios= x86bios
-_wbwd= wbwd
_wi= wi
_wpi= wpi
.if ${MK_SOURCELESS_UCODE} != "no"
diff --git a/sys/modules/aesni/Makefile b/sys/modules/aesni/Makefile
index aed56b81d5cb..9e25a4684f57 100644
--- a/sys/modules/aesni/Makefile
+++ b/sys/modules/aesni/Makefile
@@ -4,7 +4,7 @@
KMOD= aesni
SRCS= aesni.c aesni_wrap.c
-SRCS+= aesencdec_$(MACHINE_CPUARCH).S aeskeys_$(MACHINE_CPUARCH).S
+SRCS+= aesencdec_${MACHINE_CPUARCH}.S aeskeys_${MACHINE_CPUARCH}.S
SRCS+= device_if.h bus_if.h opt_bus.h cryptodev_if.h
.include <bsd.kmod.mk>
diff --git a/sys/modules/agp/Makefile b/sys/modules/agp/Makefile
index 9e2865730eae..17c8128ce8f4 100644
--- a/sys/modules/agp/Makefile
+++ b/sys/modules/agp/Makefile
@@ -33,4 +33,16 @@ EXPORT_SYMS= agp_find_device \
agp_unbind_memory \
agp_memory_info
+
+.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
+EXPORT_SYMS+= intel_gtt_clear_range \
+ intel_gtt_insert_pages \
+ intel_gtt_get \
+ intel_gtt_chipset_flush \
+ intel_gtt_unmap_memory \
+ intel_gtt_map_memory \
+ intel_gtt_insert_sg_entries \
+ intel_gtt_get_bridge_device
+.endif
+
.include <bsd.kmod.mk>
diff --git a/sys/modules/ath/Makefile b/sys/modules/ath/Makefile
index 5cbfeda19d5c..c9c768eed00d 100644
--- a/sys/modules/ath/Makefile
+++ b/sys/modules/ath/Makefile
@@ -36,7 +36,8 @@ ATH_RATE?= sample # tx rate control algorithm
KMOD= if_ath
SRCS= if_ath.c if_ath_debug.c if_ath_keycache.c if_ath_sysctl.c
-SRCS+= if_ath_tx.c if_ath_tx_ht.c if_ath_led.c
+SRCS+= if_ath_tx.c if_ath_tx_ht.c if_ath_led.c if_ath_rx.c if_ath_tdma.c
+SRCS+= if_ath_beacon.c
# NB: v3 eeprom support used by both AR5211 and AR5212; just include it
SRCS+= ah_osdep.c ah.c ah_regdomain.c ah_eeprom_v3.c
SRCS+= device_if.h bus_if.h pci_if.h opt_inet.h opt_ath.h opt_ah.h opt_wlan.h
diff --git a/sys/modules/bwi/Makefile b/sys/modules/bwi/Makefile
index cdd5c9037dd7..7daf14076e82 100644
--- a/sys/modules/bwi/Makefile
+++ b/sys/modules/bwi/Makefile
@@ -5,7 +5,7 @@
KMOD = if_bwi
SRCS = if_bwi.c if_bwi_pci.c bwimac.c bwiphy.c bwirf.c
-SRCS += device_if.h bus_if.h pci_if.h opt_inet.h opt_bwi.h
+SRCS += device_if.h bus_if.h pci_if.h opt_inet.h opt_bwi.h opt_wlan.h
opt_bwi.h:
echo '#define BWI_DEBUG 1' > opt_bwi.h
diff --git a/sys/modules/cxgb/cxgb/Makefile b/sys/modules/cxgb/cxgb/Makefile
index 9a433b200bc0..291ebe15ca99 100644
--- a/sys/modules/cxgb/cxgb/Makefile
+++ b/sys/modules/cxgb/cxgb/Makefile
@@ -8,9 +8,21 @@ SRCS= cxgb_mc5.c cxgb_vsc8211.c cxgb_ael1002.c cxgb_mv88e1xxx.c
SRCS+= cxgb_xgmac.c cxgb_vsc7323.c cxgb_t3_hw.c cxgb_main.c cxgb_aq100x.c
SRCS+= cxgb_sge.c cxgb_offload.c cxgb_tn1010.c
SRCS+= device_if.h bus_if.h pci_if.h
-SRCS+= opt_inet.h opt_zero.h opt_sched.h
+SRCS+= opt_inet.h opt_inet6.h opt_zero.h opt_sched.h
SRCS+= uipc_mvec.c
CFLAGS+= -g -DDEFAULT_JUMBO -I${CXGB}
+.if !defined(KERNBUILDDIR)
+.if ${MK_INET_SUPPORT} != "no"
+opt_inet.h:
+ @echo "#define INET 1" > ${.TARGET}
+.endif
+
+.if ${MK_INET6_SUPPORT} != "no"
+opt_inet6.h:
+ @echo "#define INET6 1" > ${.TARGET}
+.endif
+.endif
+
.include <bsd.kmod.mk>
diff --git a/sys/modules/drm2/Makefile b/sys/modules/drm2/Makefile
new file mode 100644
index 000000000000..f8411e3df4ac
--- /dev/null
+++ b/sys/modules/drm2/Makefile
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+.include <bsd.own.mk>
+
+SUBDIR = \
+ drm2 \
+ i915kms
+
+.include <bsd.subdir.mk>
diff --git a/sys/modules/drm2/Makefile.inc b/sys/modules/drm2/Makefile.inc
new file mode 100644
index 000000000000..265f86d1ed55
--- /dev/null
+++ b/sys/modules/drm2/Makefile.inc
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+.include "../Makefile.inc"
diff --git a/sys/modules/drm2/drm2/Makefile b/sys/modules/drm2/drm2/Makefile
new file mode 100644
index 000000000000..e73528b0662e
--- /dev/null
+++ b/sys/modules/drm2/drm2/Makefile
@@ -0,0 +1,39 @@
+# $FreeBSD$
+
+.PATH: ${.CURDIR}/../../../dev/drm2
+KMOD = drm2
+SRCS = \
+ drm_agpsupport.c \
+ drm_auth.c \
+ drm_bufs.c \
+ drm_context.c \
+ drm_crtc.c \
+ drm_crtc_helper.c \
+ drm_dma.c \
+ drm_dp_iic_helper.c \
+ drm_drawable.c \
+ drm_drv.c \
+ drm_edid.c \
+ drm_fb_helper.c \
+ drm_fops.c \
+ drm_gem.c \
+ drm_gem_names.c \
+ drm_hashtab.c \
+ drm_ioctl.c \
+ drm_irq.c \
+ drm_linux_list_sort.c \
+ drm_lock.c \
+ drm_memory.c \
+ drm_mm.c \
+ drm_modes.c \
+ drm_pci.c \
+ drm_scatter.c \
+ drm_sman.c \
+ drm_stub.c \
+ drm_sysctl.c \
+ drm_vm.c
+
+SRCS +=device_if.h bus_if.h pci_if.h device_if.h iicbus_if.h opt_drm.h \
+ opt_vm.h
+
+.include <bsd.kmod.mk>
diff --git a/sys/modules/drm2/i915kms/Makefile b/sys/modules/drm2/i915kms/Makefile
new file mode 100644
index 000000000000..611d31f74782
--- /dev/null
+++ b/sys/modules/drm2/i915kms/Makefile
@@ -0,0 +1,34 @@
+# $FreeBSD$
+
+.PATH: ${.CURDIR}/../../../dev/drm2/i915
+KMOD = i915kms
+SRCS = \
+ i915_debug.c \
+ i915_dma.c \
+ i915_drv.c \
+ i915_gem.c \
+ i915_gem_execbuffer.c \
+ i915_gem_evict.c \
+ i915_gem_gtt.c \
+ i915_gem_tiling.c \
+ i915_irq.c \
+ i915_suspend.c \
+ intel_bios.c \
+ intel_crt.c \
+ intel_display.c \
+ intel_dp.c \
+ intel_fb.c \
+ intel_hdmi.c \
+ intel_iic.c \
+ intel_lvds.c \
+ intel_modes.c \
+ intel_opregion.c \
+ intel_overlay.c \
+ intel_panel.c \
+ intel_ringbuffer.c \
+ intel_sdvo.c \
+ intel_sprite.c \
+ intel_tv.c
+SRCS += device_if.h bus_if.h pci_if.h iicbus_if.h iicbb_if.h opt_drm.h
+
+.include <bsd.kmod.mk>
diff --git a/sys/modules/ixgbe/Makefile b/sys/modules/ixgbe/Makefile
index c18821f288cc..634dfbf357d8 100644
--- a/sys/modules/ixgbe/Makefile
+++ b/sys/modules/ixgbe/Makefile
@@ -2,10 +2,23 @@
.PATH: ${.CURDIR}/../../dev/ixgbe
KMOD = ixgbe
SRCS = device_if.h bus_if.h pci_if.h
+SRCS += opt_inet.h opt_inet6.h
SRCS += ixgbe.c ixv.c
# Shared source
SRCS += ixgbe_common.c ixgbe_api.c ixgbe_phy.c ixgbe_mbx.c ixgbe_vf.c
SRCS += ixgbe_82599.c ixgbe_82598.c ixgbe_x540.c
CFLAGS+= -I${.CURDIR}/../../dev/ixgbe -DSMP -DIXGBE_FDIR
+.if !defined(KERNBUILDDIR)
+.if ${MK_INET_SUPPORT} != "no"
+opt_inet.h:
+ @echo "#define INET 1" > ${.TARGET}
+.endif
+
+.if ${MK_INET6_SUPPORT} != "no"
+opt_inet6.h:
+ @echo "#define INET6 1" > ${.TARGET}
+.endif
+.endif
+
.include <bsd.kmod.mk>
diff --git a/sys/modules/nandfs/Makefile b/sys/modules/nandfs/Makefile
new file mode 100644
index 000000000000..3c675391fa3c
--- /dev/null
+++ b/sys/modules/nandfs/Makefile
@@ -0,0 +1,12 @@
+# $FreeBSD$
+
+.PATH: ${.CURDIR}/../../fs/nandfs
+
+KMOD= nandfs
+SRCS= vnode_if.h \
+ bmap.c nandfs_bmap.c nandfs_dir.c nandfs_subr.c nandfs_vfsops.c \
+ nandfs_vnops.c nandfs_alloc.c nandfs_cpfile.c nandfs_dat.c \
+ nandfs_ifile.c nandfs_segment.c nandfs_sufile.c nandfs_buffer.c \
+ nandfs_cleaner.c
+
+.include <bsd.kmod.mk>
diff --git a/sys/modules/nandsim/Makefile b/sys/modules/nandsim/Makefile
new file mode 100644
index 000000000000..1dc950148118
--- /dev/null
+++ b/sys/modules/nandsim/Makefile
@@ -0,0 +1,11 @@
+# $FreeBSD$
+
+.PATH: ${.CURDIR}/../../dev/nand
+
+KMOD= nandsim
+SRCS= nandsim.c nandsim_chip.c nandsim_swap.c nandsim_ctrl.c nandsim_log.c\
+ bus_if.h device_if.h vnode_if.h nfc_if.h nand_if.h
+MFILES= kern/bus_if.m kern/device_if.m\
+ dev/nand/nfc_if.m dev/nand/nand_if.m
+
+.include <bsd.kmod.mk>
diff --git a/sys/modules/netmap/Makefile b/sys/modules/netmap/Makefile
new file mode 100644
index 000000000000..b58bfdb2517c
--- /dev/null
+++ b/sys/modules/netmap/Makefile
@@ -0,0 +1,14 @@
+# $FreeBSD$
+#
+# Compile netmap as a module, useful if you want a netmap bridge
+# or loadable drivers.
+
+.PATH: ${.CURDIR}/../../dev/netmap
+.PATH.h: ${.CURDIR}/../../net
+KMOD = netmap
+SRCS = device_if.h bus_if.h opt_netmap.h
+SRCS += netmap.c netmap.h netmap_kern.h
+
+netmap.o: netmap_mem2.c
+
+.include <bsd.kmod.mk>
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index 8b387a2dd94e..9ade6433ef47 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -147,6 +147,7 @@ static int bpf_bpfd_cnt;
static void bpf_attachd(struct bpf_d *, struct bpf_if *);
static void bpf_detachd(struct bpf_d *);
+static void bpf_detachd_locked(struct bpf_d *);
static void bpf_freed(struct bpf_d *);
static int bpf_movein(struct uio *, int, struct ifnet *, struct mbuf **,
struct sockaddr *, int *, struct bpf_insn *);
@@ -158,7 +159,7 @@ static void catchpacket(struct bpf_d *, u_char *, u_int, u_int,
void (*)(struct bpf_d *, caddr_t, u_int, void *, u_int),
struct bintime *);
static void reset_d(struct bpf_d *);
-static int bpf_setf(struct bpf_d *, struct bpf_program *, u_long cmd);
+static int bpf_setf(struct bpf_d *, struct bpf_program *, u_long cmd);
static int bpf_getdltlist(struct bpf_d *, struct bpf_dltlist *);
static int bpf_setdlt(struct bpf_d *, u_int);
static void filt_bpfdetach(struct knote *);
@@ -206,6 +207,37 @@ static struct filterops bpfread_filtops = {
.f_event = filt_bpfread,
};
+eventhandler_tag bpf_ifdetach_cookie = NULL;
+
+/*
+ * LOCKING MODEL USED BY BPF:
+ * Locks:
+ * 1) global lock (BPF_LOCK). Mutex, used to protect interface addition/removal,
+ * some global counters and every bpf_if reference.
+ * 2) Interface lock. Rwlock, used to protect list of BPF descriptors and their filters.
+ * 3) Descriptor lock. Mutex, used to protect BPF buffers and various structure fields
+ * used by bpf_mtap code.
+ *
+ * Lock order:
+ *
+ * Global lock, interface lock, descriptor lock
+ *
+ * We have to acquire interface lock before descriptor main lock due to BPF_MTAP[2]
+ * working model. In many places (like bpf_detachd) we start with BPF descriptor
+ * (and we need to at least rlock it to get reliable interface pointer). This
+ * gives us potential LOR. As a result, we use global lock to protect from bpf_if
+ * change in every such place.
+ *
+ * Changing d->bd_bif is protected by 1) global lock, 2) interface lock and
+ * 3) descriptor main wlock.
+ * Reading bd_bif can be protected by any of these locks, typically global lock.
+ *
+ * Changing read/write BPF filter is protected by the same three locks,
+ * the same applies for reading.
+ *
+ * Sleeping in global lock is not allowed due to bpfdetach() using it.
+ */
+
/*
* Wrapper functions for various buffering methods. If the set of buffer
* modes expands, we will probably want to introduce a switch data structure
@@ -216,7 +248,7 @@ bpf_append_bytes(struct bpf_d *d, caddr_t buf, u_int offset, void *src,
u_int len)
{
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
switch (d->bd_bufmode) {
case BPF_BUFMODE_BUFFER:
@@ -236,7 +268,7 @@ bpf_append_mbuf(struct bpf_d *d, caddr_t buf, u_int offset, void *src,
u_int len)
{
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
switch (d->bd_bufmode) {
case BPF_BUFMODE_BUFFER:
@@ -258,7 +290,7 @@ static void
bpf_buf_reclaimed(struct bpf_d *d)
{
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
switch (d->bd_bufmode) {
case BPF_BUFMODE_BUFFER:
@@ -317,7 +349,7 @@ static void
bpf_buffull(struct bpf_d *d)
{
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
switch (d->bd_bufmode) {
case BPF_BUFMODE_ZBUF:
@@ -333,7 +365,7 @@ void
bpf_bufheld(struct bpf_d *d)
{
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
switch (d->bd_bufmode) {
case BPF_BUFMODE_ZBUF:
@@ -577,6 +609,18 @@ bad:
static void
bpf_attachd(struct bpf_d *d, struct bpf_if *bp)
{
+ int op_w;
+
+ BPF_LOCK_ASSERT();
+
+ /*
+ * Save sysctl value to protect from sysctl change
+ * between reads
+ */
+ op_w = V_bpf_optimize_writers;
+
+ if (d->bd_bif != NULL)
+ bpf_detachd_locked(d);
/*
* Point d at bp, and add d to the interface's list.
* Since there are many applicaiotns using BPF for
@@ -584,11 +628,13 @@ bpf_attachd(struct bpf_d *d, struct bpf_if *bp)
* we can delay adding d to the list of active listeners until
* some filter is configured.
*/
- d->bd_bif = bp;
BPFIF_WLOCK(bp);
+ BPFD_LOCK(d);
- if (V_bpf_optimize_writers != 0) {
+ d->bd_bif = bp;
+
+ if (op_w != 0) {
/* Add to writers-only list */
LIST_INSERT_HEAD(&bp->bif_wlist, d, bd_next);
/*
@@ -600,16 +646,15 @@ bpf_attachd(struct bpf_d *d, struct bpf_if *bp)
} else
LIST_INSERT_HEAD(&bp->bif_dlist, d, bd_next);
+ BPFD_UNLOCK(d);
BPFIF_WUNLOCK(bp);
- BPF_LOCK();
bpf_bpfd_cnt++;
- BPF_UNLOCK();
CTR3(KTR_NET, "%s: bpf_attach called by pid %d, adding to %s list",
__func__, d->bd_pid, d->bd_writer ? "writer" : "active");
- if (V_bpf_optimize_writers == 0)
+ if (op_w == 0)
EVENTHANDLER_INVOKE(bpf_track, bp->bif_ifp, bp->bif_dlt, 1);
}
@@ -622,10 +667,23 @@ bpf_upgraded(struct bpf_d *d)
{
struct bpf_if *bp;
+ BPF_LOCK_ASSERT();
+
bp = d->bd_bif;
+ /*
+ * Filter can be set several times without specifying interface.
+ * Mark d as reader and exit.
+ */
+ if (bp == NULL) {
+ BPFD_LOCK(d);
+ d->bd_writer = 0;
+ BPFD_UNLOCK(d);
+ return;
+ }
+
BPFIF_WLOCK(bp);
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
/* Remove from writers-only list */
LIST_REMOVE(d, bd_next);
@@ -633,7 +691,7 @@ bpf_upgraded(struct bpf_d *d)
/* Mark d as reader */
d->bd_writer = 0;
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
BPFIF_WUNLOCK(bp);
CTR2(KTR_NET, "%s: upgrade required by pid %d", __func__, d->bd_pid);
@@ -647,6 +705,14 @@ bpf_upgraded(struct bpf_d *d)
static void
bpf_detachd(struct bpf_d *d)
{
+ BPF_LOCK();
+ bpf_detachd_locked(d);
+ BPF_UNLOCK();
+}
+
+static void
+bpf_detachd_locked(struct bpf_d *d)
+{
int error;
struct bpf_if *bp;
struct ifnet *ifp;
@@ -655,9 +721,12 @@ bpf_detachd(struct bpf_d *d)
BPF_LOCK_ASSERT();
- bp = d->bd_bif;
+ /* Check if descriptor is attached */
+ if ((bp = d->bd_bif) == NULL)
+ return;
+
BPFIF_WLOCK(bp);
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
/* Save bd_writer value */
error = d->bd_writer;
@@ -669,10 +738,9 @@ bpf_detachd(struct bpf_d *d)
ifp = bp->bif_ifp;
d->bd_bif = NULL;
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
BPFIF_WUNLOCK(bp);
- /* We're already protected by global lock. */
bpf_bpfd_cnt--;
/* Call event handler iff d is attached */
@@ -710,16 +778,13 @@ bpf_dtor(void *data)
{
struct bpf_d *d = data;
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
if (d->bd_state == BPF_WAITING)
callout_stop(&d->bd_callout);
d->bd_state = BPF_IDLE;
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
funsetown(&d->bd_sigio);
- BPF_LOCK();
- if (d->bd_bif)
- bpf_detachd(d);
- BPF_UNLOCK();
+ bpf_detachd(d);
#ifdef MAC
mac_bpfdesc_destroy(d);
#endif /* MAC */
@@ -739,7 +804,7 @@ static int
bpfopen(struct cdev *dev, int flags, int fmt, struct thread *td)
{
struct bpf_d *d;
- int error;
+ int error, size;
d = malloc(sizeof(*d), M_BPF, M_WAITOK | M_ZERO);
error = devfs_set_cdevpriv(d, bpf_dtor);
@@ -762,9 +827,13 @@ bpfopen(struct cdev *dev, int flags, int fmt, struct thread *td)
mac_bpfdesc_init(d);
mac_bpfdesc_create(td->td_ucred, d);
#endif
- rw_init(&d->bd_lock, "bpf cdev lock");
- callout_init_rw(&d->bd_callout, &d->bd_lock, 0);
- knlist_init_rw_reader(&d->bd_sel.si_note, &d->bd_lock);
+ mtx_init(&d->bd_lock, devtoname(dev), "bpf cdev lock", MTX_DEF);
+ callout_init_mtx(&d->bd_callout, &d->bd_lock, 0);
+ knlist_init_mtx(&d->bd_sel.si_note, &d->bd_lock);
+
+ /* Allocate default buffers */
+ size = d->bd_bufsize;
+ bpf_buffer_ioctl_sblen(d, &size);
return (0);
}
@@ -793,10 +862,10 @@ bpfread(struct cdev *dev, struct uio *uio, int ioflag)
non_block = ((ioflag & O_NONBLOCK) != 0);
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
BPF_PID_REFRESH_CUR(d);
if (d->bd_bufmode != BPF_BUFMODE_BUFFER) {
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (EOPNOTSUPP);
}
if (d->bd_state == BPF_WAITING)
@@ -832,18 +901,18 @@ bpfread(struct cdev *dev, struct uio *uio, int ioflag)
* it before using it again.
*/
if (d->bd_bif == NULL) {
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (ENXIO);
}
if (non_block) {
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (EWOULDBLOCK);
}
- error = rw_sleep(d, &d->bd_lock, PRINET|PCATCH,
+ error = msleep(d, &d->bd_lock, PRINET|PCATCH,
"bpf", d->bd_rtout);
if (error == EINTR || error == ERESTART) {
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (error);
}
if (error == EWOULDBLOCK) {
@@ -861,7 +930,7 @@ bpfread(struct cdev *dev, struct uio *uio, int ioflag)
break;
if (d->bd_slen == 0) {
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (0);
}
ROTATE_BUFFERS(d);
@@ -871,7 +940,7 @@ bpfread(struct cdev *dev, struct uio *uio, int ioflag)
/*
* At this point, we know we have something in the hold slot.
*/
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
/*
* Move data from hold buffer into user space.
@@ -884,12 +953,12 @@ bpfread(struct cdev *dev, struct uio *uio, int ioflag)
*/
error = bpf_uiomove(d, d->bd_hbuf, d->bd_hlen, uio);
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
d->bd_fbuf = d->bd_hbuf;
d->bd_hbuf = NULL;
d->bd_hlen = 0;
bpf_buf_reclaimed(d);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (error);
}
@@ -901,7 +970,7 @@ static __inline void
bpf_wakeup(struct bpf_d *d)
{
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
if (d->bd_state == BPF_WAITING) {
callout_stop(&d->bd_callout);
d->bd_state = BPF_IDLE;
@@ -919,7 +988,7 @@ bpf_timed_out(void *arg)
{
struct bpf_d *d = (struct bpf_d *)arg;
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
if (callout_pending(&d->bd_callout) || !callout_active(&d->bd_callout))
return;
@@ -934,7 +1003,7 @@ static int
bpf_ready(struct bpf_d *d)
{
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
if (!bpf_canfreebuf(d) && d->bd_hlen != 0)
return (1);
@@ -959,6 +1028,7 @@ bpfwrite(struct cdev *dev, struct uio *uio, int ioflag)
BPF_PID_REFRESH_CUR(d);
d->bd_wcount++;
+ /* XXX: locking required */
if (d->bd_bif == NULL) {
d->bd_wdcount++;
return (ENXIO);
@@ -979,6 +1049,7 @@ bpfwrite(struct cdev *dev, struct uio *uio, int ioflag)
bzero(&dst, sizeof(dst));
m = NULL;
hlen = 0;
+ /* XXX: bpf_movein() can sleep */
error = bpf_movein(uio, (int)d->bd_bif->bif_dlt, ifp,
&m, &dst, &hlen, d->bd_wfilter);
if (error) {
@@ -1005,11 +1076,11 @@ bpfwrite(struct cdev *dev, struct uio *uio, int ioflag)
CURVNET_SET(ifp->if_vnet);
#ifdef MAC
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
mac_bpfdesc_create_mbuf(d, m);
if (mc != NULL)
mac_bpfdesc_create_mbuf(d, mc);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
#endif
error = (*ifp->if_output)(ifp, m, &dst, NULL);
@@ -1038,7 +1109,7 @@ static void
reset_d(struct bpf_d *d)
{
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
if ((d->bd_hbuf != NULL) &&
(d->bd_bufmode != BPF_BUFMODE_ZBUF || bpf_canfreebuf(d))) {
@@ -1105,12 +1176,12 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
/*
* Refresh PID associated with this descriptor.
*/
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
BPF_PID_REFRESH(d, td);
if (d->bd_state == BPF_WAITING)
callout_stop(&d->bd_callout);
d->bd_state = BPF_IDLE;
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
if (d->bd_locked == 1) {
switch (cmd) {
@@ -1158,7 +1229,9 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
case BIOCGDLTLIST32:
case BIOCGRTIMEOUT32:
case BIOCSRTIMEOUT32:
+ BPFD_LOCK(d);
d->bd_compat32 = 1;
+ BPFD_UNLOCK(d);
}
#endif
@@ -1176,11 +1249,11 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
{
int n;
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
n = d->bd_slen;
if (d->bd_hbuf)
n += d->bd_hlen;
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
*(int *)addr = n;
break;
@@ -1203,7 +1276,9 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
* Get buffer len [for read()].
*/
case BIOCGBLEN:
+ BPFD_LOCK(d);
*(u_int *)addr = d->bd_bufsize;
+ BPFD_UNLOCK(d);
break;
/*
@@ -1231,9 +1306,9 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
* Flush read packet buffer.
*/
case BIOCFLUSH:
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
reset_d(d);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
break;
/*
@@ -1258,10 +1333,12 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
* Get current data link type.
*/
case BIOCGDLT:
+ BPF_LOCK();
if (d->bd_bif == NULL)
error = EINVAL;
else
*(u_int *)addr = d->bd_bif->bif_dlt;
+ BPF_UNLOCK();
break;
/*
@@ -1276,6 +1353,7 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
list32 = (struct bpf_dltlist32 *)addr;
dltlist.bfl_len = list32->bfl_len;
dltlist.bfl_list = PTRIN(list32->bfl_list);
+ BPF_LOCK();
if (d->bd_bif == NULL)
error = EINVAL;
else {
@@ -1283,31 +1361,37 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
if (error == 0)
list32->bfl_len = dltlist.bfl_len;
}
+ BPF_UNLOCK();
break;
}
#endif
case BIOCGDLTLIST:
+ BPF_LOCK();
if (d->bd_bif == NULL)
error = EINVAL;
else
error = bpf_getdltlist(d, (struct bpf_dltlist *)addr);
+ BPF_UNLOCK();
break;
/*
* Set data link type.
*/
case BIOCSDLT:
+ BPF_LOCK();
if (d->bd_bif == NULL)
error = EINVAL;
else
error = bpf_setdlt(d, *(u_int *)addr);
+ BPF_UNLOCK();
break;
/*
* Get interface name.
*/
case BIOCGETIF:
+ BPF_LOCK();
if (d->bd_bif == NULL)
error = EINVAL;
else {
@@ -1317,13 +1401,16 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
strlcpy(ifr->ifr_name, ifp->if_xname,
sizeof(ifr->ifr_name));
}
+ BPF_UNLOCK();
break;
/*
* Set interface.
*/
case BIOCSETIF:
+ BPF_LOCK();
error = bpf_setif(d, (struct ifreq *)addr);
+ BPF_UNLOCK();
break;
/*
@@ -1406,7 +1493,9 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
* Set immediate mode.
*/
case BIOCIMMEDIATE:
+ BPFD_LOCK(d);
d->bd_immediate = *(u_int *)addr;
+ BPFD_UNLOCK(d);
break;
case BIOCVERSION:
@@ -1422,21 +1511,27 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
* Get "header already complete" flag
*/
case BIOCGHDRCMPLT:
+ BPFD_LOCK(d);
*(u_int *)addr = d->bd_hdrcmplt;
+ BPFD_UNLOCK(d);
break;
/*
* Set "header already complete" flag
*/
case BIOCSHDRCMPLT:
+ BPFD_LOCK(d);
d->bd_hdrcmplt = *(u_int *)addr ? 1 : 0;
+ BPFD_UNLOCK(d);
break;
/*
* Get packet direction flag
*/
case BIOCGDIRECTION:
+ BPFD_LOCK(d);
*(u_int *)addr = d->bd_direction;
+ BPFD_UNLOCK(d);
break;
/*
@@ -1451,7 +1546,9 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
case BPF_D_IN:
case BPF_D_INOUT:
case BPF_D_OUT:
+ BPFD_LOCK(d);
d->bd_direction = direction;
+ BPFD_UNLOCK(d);
break;
default:
error = EINVAL;
@@ -1463,7 +1560,9 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
* Get packet timestamp format and resolution.
*/
case BIOCGTSTAMP:
+ BPFD_LOCK(d);
*(u_int *)addr = d->bd_tstamp;
+ BPFD_UNLOCK(d);
break;
/*
@@ -1482,26 +1581,38 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
break;
case BIOCFEEDBACK:
+ BPFD_LOCK(d);
d->bd_feedback = *(u_int *)addr;
+ BPFD_UNLOCK(d);
break;
case BIOCLOCK:
+ BPFD_LOCK(d);
d->bd_locked = 1;
+ BPFD_UNLOCK(d);
break;
case FIONBIO: /* Non-blocking I/O */
break;
case FIOASYNC: /* Send signal on receive packets */
+ BPFD_LOCK(d);
d->bd_async = *(int *)addr;
+ BPFD_UNLOCK(d);
break;
case FIOSETOWN:
+ /*
+ * XXX: Add some sort of locking here?
+ * fsetown() can sleep.
+ */
error = fsetown(*(int *)addr, &d->bd_sigio);
break;
case FIOGETOWN:
+ BPFD_LOCK(d);
*(int *)addr = fgetown(&d->bd_sigio);
+ BPFD_UNLOCK(d);
break;
/* This is deprecated, FIOSETOWN should be used instead. */
@@ -1522,16 +1633,23 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
if (sig >= NSIG)
error = EINVAL;
- else
+ else {
+ BPFD_LOCK(d);
d->bd_sig = sig;
+ BPFD_UNLOCK(d);
+ }
break;
}
case BIOCGRSIG:
+ BPFD_LOCK(d);
*(u_int *)addr = d->bd_sig;
+ BPFD_UNLOCK(d);
break;
case BIOCGETBUFMODE:
+ BPFD_LOCK(d);
*(u_int *)addr = d->bd_bufmode;
+ BPFD_UNLOCK(d);
break;
case BIOCSETBUFMODE:
@@ -1556,15 +1674,15 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
return (EINVAL);
}
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
if (d->bd_sbuf != NULL || d->bd_hbuf != NULL ||
d->bd_fbuf != NULL || d->bd_bif != NULL) {
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
CURVNET_RESTORE();
return (EBUSY);
}
d->bd_bufmode = *(u_int *)addr;
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
break;
case BIOCGETZMAX:
@@ -1590,119 +1708,118 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
static int
bpf_setf(struct bpf_d *d, struct bpf_program *fp, u_long cmd)
{
+#ifdef COMPAT_FREEBSD32
+ struct bpf_program fp_swab;
+ struct bpf_program32 *fp32;
+#endif
struct bpf_insn *fcode, *old;
- u_int wfilter, flen, size;
#ifdef BPF_JITTER
- bpf_jit_filter *ofunc;
+ bpf_jit_filter *jfunc, *ofunc;
#endif
+ size_t size;
+ u_int flen;
int need_upgrade;
-#ifdef COMPAT_FREEBSD32
- struct bpf_program32 *fp32;
- struct bpf_program fp_swab;
- if (cmd == BIOCSETWF32 || cmd == BIOCSETF32 || cmd == BIOCSETFNR32) {
+#ifdef COMPAT_FREEBSD32
+ switch (cmd) {
+ case BIOCSETF32:
+ case BIOCSETWF32:
+ case BIOCSETFNR32:
fp32 = (struct bpf_program32 *)fp;
fp_swab.bf_len = fp32->bf_len;
fp_swab.bf_insns = (struct bpf_insn *)(uintptr_t)fp32->bf_insns;
fp = &fp_swab;
- if (cmd == BIOCSETWF32)
+ switch (cmd) {
+ case BIOCSETF32:
+ cmd = BIOCSETF;
+ break;
+ case BIOCSETWF32:
cmd = BIOCSETWF;
+ break;
+ }
+ break;
}
#endif
- if (cmd == BIOCSETWF) {
- old = d->bd_wfilter;
- wfilter = 1;
-#ifdef BPF_JITTER
- ofunc = NULL;
-#endif
- } else {
- wfilter = 0;
- old = d->bd_rfilter;
+
+ fcode = NULL;
#ifdef BPF_JITTER
- ofunc = d->bd_bfilter;
+ jfunc = ofunc = NULL;
#endif
- }
- if (fp->bf_insns == NULL) {
- if (fp->bf_len != 0)
+ need_upgrade = 0;
+
+ /*
+ * Check new filter validness before acquiring any locks.
+ * Allocate memory for new filter, if needed.
+ */
+ flen = fp->bf_len;
+ if (flen > bpf_maxinsns || (fp->bf_insns == NULL && flen != 0))
+ return (EINVAL);
+ size = flen * sizeof(*fp->bf_insns);
+ if (size > 0) {
+ /* We're setting up new filter. Copy and check actual data. */
+ fcode = malloc(size, M_BPF, M_WAITOK);
+ if (copyin(fp->bf_insns, fcode, size) != 0 ||
+ !bpf_validate(fcode, flen)) {
+ free(fcode, M_BPF);
return (EINVAL);
- /*
- * Protect filter change by interface lock, too.
- * The same lock order is used by bpf_detachd().
- */
- BPFIF_WLOCK(d->bd_bif);
- BPFD_WLOCK(d);
- if (wfilter)
- d->bd_wfilter = NULL;
- else {
- d->bd_rfilter = NULL;
-#ifdef BPF_JITTER
- d->bd_bfilter = NULL;
-#endif
- if (cmd == BIOCSETF)
- reset_d(d);
}
- BPFD_WUNLOCK(d);
- BPFIF_WUNLOCK(d->bd_bif);
- if (old != NULL)
- free((caddr_t)old, M_BPF);
#ifdef BPF_JITTER
- if (ofunc != NULL)
- bpf_destroy_jit_filter(ofunc);
+ /* Filter is copied inside fcode and is perfectly valid. */
+ jfunc = bpf_jitter(fcode, flen);
#endif
- return (0);
}
- flen = fp->bf_len;
- if (flen > bpf_maxinsns)
- return (EINVAL);
- need_upgrade = 0;
- size = flen * sizeof(*fp->bf_insns);
- fcode = (struct bpf_insn *)malloc(size, M_BPF, M_WAITOK);
- if (copyin((caddr_t)fp->bf_insns, (caddr_t)fcode, size) == 0 &&
- bpf_validate(fcode, (int)flen)) {
- /*
- * Protect filter change by interface lock, too
- * The same lock order is used by bpf_detachd().
- */
+ BPF_LOCK();
+
+ /*
+ * Set up new filter.
+ * Protect filter change by interface lock.
+ * Additionally, we are protected by global lock here.
+ */
+ if (d->bd_bif != NULL)
BPFIF_WLOCK(d->bd_bif);
- BPFD_WLOCK(d);
- if (wfilter)
- d->bd_wfilter = fcode;
- else {
- d->bd_rfilter = fcode;
+ BPFD_LOCK(d);
+ if (cmd == BIOCSETWF) {
+ old = d->bd_wfilter;
+ d->bd_wfilter = fcode;
+ } else {
+ old = d->bd_rfilter;
+ d->bd_rfilter = fcode;
#ifdef BPF_JITTER
- d->bd_bfilter = bpf_jitter(fcode, flen);
+ ofunc = d->bd_bfilter;
+ d->bd_bfilter = jfunc;
#endif
- if (cmd == BIOCSETF)
- reset_d(d);
+ if (cmd == BIOCSETF)
+ reset_d(d);
+ if (fcode != NULL) {
/*
* Do not require upgrade by first BIOCSETF
- * (used to set snaplen) by pcap_open_live()
+ * (used to set snaplen) by pcap_open_live().
*/
- if ((d->bd_writer != 0) && (--d->bd_writer == 0))
+ if (d->bd_writer != 0 && --d->bd_writer == 0)
need_upgrade = 1;
CTR4(KTR_NET, "%s: filter function set by pid %d, "
"bd_writer counter %d, need_upgrade %d",
__func__, d->bd_pid, d->bd_writer, need_upgrade);
}
- BPFD_WUNLOCK(d);
+ }
+ BPFD_UNLOCK(d);
+ if (d->bd_bif != NULL)
BPFIF_WUNLOCK(d->bd_bif);
- if (old != NULL)
- free((caddr_t)old, M_BPF);
+ if (old != NULL)
+ free(old, M_BPF);
#ifdef BPF_JITTER
- if (ofunc != NULL)
- bpf_destroy_jit_filter(ofunc);
+ if (ofunc != NULL)
+ bpf_destroy_jit_filter(ofunc);
#endif
- /* Move d to active readers list */
- if (need_upgrade != 0)
- bpf_upgraded(d);
+ /* Move d to active readers list. */
+ if (need_upgrade)
+ bpf_upgraded(d);
- return (0);
- }
- free((caddr_t)fcode, M_BPF);
- return (EINVAL);
+ BPF_UNLOCK();
+ return (0);
}
/*
@@ -1716,28 +1833,30 @@ bpf_setif(struct bpf_d *d, struct ifreq *ifr)
struct bpf_if *bp;
struct ifnet *theywant;
+ BPF_LOCK_ASSERT();
+
theywant = ifunit(ifr->ifr_name);
if (theywant == NULL || theywant->if_bpf == NULL)
return (ENXIO);
bp = theywant->if_bpf;
+ /* Check if interface is not being detached from BPF */
+ BPFIF_RLOCK(bp);
+ if (bp->flags & BPFIF_FLAG_DYING) {
+ BPFIF_RUNLOCK(bp);
+ return (ENXIO);
+ }
+ BPFIF_RUNLOCK(bp);
+
/*
* Behavior here depends on the buffering model. If we're using
* kernel memory buffers, then we can allocate them here. If we're
* using zero-copy, then the user process must have registered
* buffers by the time we get here. If not, return an error.
- *
- * XXXRW: There are locking issues here with multi-threaded use: what
- * if two threads try to set the interface at once?
*/
switch (d->bd_bufmode) {
case BPF_BUFMODE_BUFFER:
- if (d->bd_sbuf == NULL)
- bpf_buffer_alloc(d);
- KASSERT(d->bd_sbuf != NULL, ("bpf_setif: bd_sbuf NULL"));
- break;
-
case BPF_BUFMODE_ZBUF:
if (d->bd_sbuf == NULL)
return (EINVAL);
@@ -1746,18 +1865,11 @@ bpf_setif(struct bpf_d *d, struct ifreq *ifr)
default:
panic("bpf_setif: bufmode %d", d->bd_bufmode);
}
- if (bp != d->bd_bif) {
- if (d->bd_bif)
- /*
- * Detach if attached to something else.
- */
- bpf_detachd(d);
-
+ if (bp != d->bd_bif)
bpf_attachd(d, bp);
- }
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
reset_d(d);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (0);
}
@@ -1781,7 +1893,7 @@ bpfpoll(struct cdev *dev, int events, struct thread *td)
* Refresh PID associated with this descriptor.
*/
revents = events & (POLLOUT | POLLWRNORM);
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
BPF_PID_REFRESH(d, td);
if (events & (POLLIN | POLLRDNORM)) {
if (bpf_ready(d))
@@ -1796,7 +1908,7 @@ bpfpoll(struct cdev *dev, int events, struct thread *td)
}
}
}
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (revents);
}
@@ -1816,12 +1928,12 @@ bpfkqfilter(struct cdev *dev, struct knote *kn)
/*
* Refresh PID associated with this descriptor.
*/
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
BPF_PID_REFRESH_CUR(d);
kn->kn_fop = &bpfread_filtops;
kn->kn_hook = d;
knlist_add(&d->bd_sel.si_note, kn, 1);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (0);
}
@@ -1840,7 +1952,7 @@ filt_bpfread(struct knote *kn, long hint)
struct bpf_d *d = (struct bpf_d *)kn->kn_hook;
int ready;
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
ready = bpf_ready(d);
if (ready) {
kn->kn_data = d->bd_slen;
@@ -1946,7 +2058,7 @@ bpf_tap(struct bpf_if *bp, u_char *pkt, u_int pktlen)
/*
* Filter matches. Let's to acquire write lock.
*/
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
d->bd_fcount++;
if (gottime < bpf_ts_quality(d->bd_tstamp))
@@ -1956,7 +2068,7 @@ bpf_tap(struct bpf_if *bp, u_char *pkt, u_int pktlen)
#endif
catchpacket(d, pkt, pktlen, slen,
bpf_append_bytes, &bt);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
}
}
BPFIF_RUNLOCK(bp);
@@ -2005,7 +2117,7 @@ bpf_mtap(struct bpf_if *bp, struct mbuf *m)
#endif
slen = bpf_filter(d->bd_rfilter, (u_char *)m, pktlen, 0);
if (slen != 0) {
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
d->bd_fcount++;
if (gottime < bpf_ts_quality(d->bd_tstamp))
@@ -2015,7 +2127,7 @@ bpf_mtap(struct bpf_if *bp, struct mbuf *m)
#endif
catchpacket(d, (u_char *)m, pktlen, slen,
bpf_append_mbuf, &bt);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
}
}
BPFIF_RUNLOCK(bp);
@@ -2061,7 +2173,7 @@ bpf_mtap2(struct bpf_if *bp, void *data, u_int dlen, struct mbuf *m)
++d->bd_rcount;
slen = bpf_filter(d->bd_rfilter, (u_char *)&mb, pktlen, 0);
if (slen != 0) {
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
d->bd_fcount++;
if (gottime < bpf_ts_quality(d->bd_tstamp))
@@ -2071,7 +2183,7 @@ bpf_mtap2(struct bpf_if *bp, void *data, u_int dlen, struct mbuf *m)
#endif
catchpacket(d, (u_char *)&mb, pktlen, slen,
bpf_append_mbuf, &bt);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
}
}
BPFIF_RUNLOCK(bp);
@@ -2166,7 +2278,7 @@ catchpacket(struct bpf_d *d, u_char *pkt, u_int pktlen, u_int snaplen,
int do_timestamp;
int tstype;
- BPFD_WLOCK_ASSERT(d);
+ BPFD_LOCK_ASSERT(d);
/*
* Detect whether user space has released a buffer back to us, and if
@@ -2313,7 +2425,7 @@ bpf_freed(struct bpf_d *d)
}
if (d->bd_wfilter != NULL)
free((caddr_t)d->bd_wfilter, M_BPF);
- rw_destroy(&d->bd_lock);
+ mtx_destroy(&d->bd_lock);
}
/*
@@ -2361,10 +2473,9 @@ bpfattach2(struct ifnet *ifp, u_int dlt, u_int hdrlen, struct bpf_if **driverp)
}
/*
- * Detach bpf from an interface. This involves detaching each descriptor
- * associated with the interface, and leaving bd_bif NULL. Notify each
- * descriptor as it's detached so that any sleepers wake up and get
- * ENXIO.
+ * Detach bpf from an interface. This involves detaching each descriptor
+ * associated with the interface. Notify each descriptor as it's detached
+ * so that any sleepers wake up and get ENXIO.
*/
void
bpfdetach(struct ifnet *ifp)
@@ -2377,31 +2488,45 @@ bpfdetach(struct ifnet *ifp)
ndetached = 0;
#endif
+ BPF_LOCK();
/* Find all bpf_if struct's which reference ifp and detach them. */
do {
- BPF_LOCK();
LIST_FOREACH(bp, &bpf_iflist, bif_next) {
if (ifp == bp->bif_ifp)
break;
}
if (bp != NULL)
LIST_REMOVE(bp, bif_next);
- BPF_UNLOCK();
if (bp != NULL) {
#ifdef INVARIANTS
ndetached++;
#endif
while ((d = LIST_FIRST(&bp->bif_dlist)) != NULL) {
- bpf_detachd(d);
- BPFD_WLOCK(d);
+ bpf_detachd_locked(d);
+ BPFD_LOCK(d);
bpf_wakeup(d);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
}
- rw_destroy(&bp->bif_lock);
- free(bp, M_BPF);
+ /* Free writer-only descriptors */
+ while ((d = LIST_FIRST(&bp->bif_wlist)) != NULL) {
+ bpf_detachd_locked(d);
+ BPFD_LOCK(d);
+ bpf_wakeup(d);
+ BPFD_UNLOCK(d);
+ }
+
+ /*
+ * Delay freing bp till interface is detached
+ * and all routes through this interface are removed.
+ * Mark bp as detached to restrict new consumers.
+ */
+ BPFIF_WLOCK(bp);
+ bp->flags |= BPFIF_FLAG_DYING;
+ BPFIF_WUNLOCK(bp);
}
} while (bp != NULL);
+ BPF_UNLOCK();
#ifdef INVARIANTS
if (ndetached == 0)
@@ -2410,6 +2535,25 @@ bpfdetach(struct ifnet *ifp)
}
/*
+ * Interface departure handler
+ */
+static void
+bpf_ifdetach(void *arg __unused, struct ifnet *ifp)
+{
+ struct bpf_if *bp;
+
+ if ((bp = ifp->if_bpf) == NULL)
+ return;
+
+ CTR3(KTR_NET, "%s: freing BPF instance %p for interface %p",
+ __func__, bp, ifp);
+
+ ifp->if_bpf = NULL;
+ rw_destroy(&bp->bif_lock);
+ free(bp, M_BPF);
+}
+
+/*
* Get a list of available data link type of the interface.
*/
static int
@@ -2419,24 +2563,22 @@ bpf_getdltlist(struct bpf_d *d, struct bpf_dltlist *bfl)
struct ifnet *ifp;
struct bpf_if *bp;
+ BPF_LOCK_ASSERT();
+
ifp = d->bd_bif->bif_ifp;
n = 0;
error = 0;
- BPF_LOCK();
LIST_FOREACH(bp, &bpf_iflist, bif_next) {
if (bp->bif_ifp != ifp)
continue;
if (bfl->bfl_list != NULL) {
- if (n >= bfl->bfl_len) {
- BPF_UNLOCK();
+ if (n >= bfl->bfl_len)
return (ENOMEM);
- }
error = copyout(&bp->bif_dlt,
bfl->bfl_list + n, sizeof(u_int));
}
n++;
}
- BPF_UNLOCK();
bfl->bfl_len = n;
return (error);
}
@@ -2451,22 +2593,23 @@ bpf_setdlt(struct bpf_d *d, u_int dlt)
struct ifnet *ifp;
struct bpf_if *bp;
+ BPF_LOCK_ASSERT();
+
if (d->bd_bif->bif_dlt == dlt)
return (0);
ifp = d->bd_bif->bif_ifp;
- BPF_LOCK();
+
LIST_FOREACH(bp, &bpf_iflist, bif_next) {
if (bp->bif_ifp == ifp && bp->bif_dlt == dlt)
break;
}
- BPF_UNLOCK();
+
if (bp != NULL) {
opromisc = d->bd_promisc;
- bpf_detachd(d);
bpf_attachd(d, bp);
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
reset_d(d);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
if (opromisc) {
error = ifpromisc(bp->bif_ifp, 1);
if (error)
@@ -2491,6 +2634,11 @@ bpf_drvinit(void *unused)
dev = make_dev(&bpf_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "bpf");
/* For compatibility */
make_dev_alias(dev, "bpf0");
+
+ /* Register interface departure handler */
+ bpf_ifdetach_cookie = EVENTHANDLER_REGISTER(
+ ifnet_departure_event, bpf_ifdetach, NULL,
+ EVENTHANDLER_PRI_ANY);
}
/*
@@ -2508,20 +2656,23 @@ bpf_zero_counters(void)
LIST_FOREACH(bp, &bpf_iflist, bif_next) {
BPFIF_RLOCK(bp);
LIST_FOREACH(bd, &bp->bif_dlist, bd_next) {
- BPFD_WLOCK(bd);
+ BPFD_LOCK(bd);
bd->bd_rcount = 0;
bd->bd_dcount = 0;
bd->bd_fcount = 0;
bd->bd_wcount = 0;
bd->bd_wfcount = 0;
bd->bd_zcopy = 0;
- BPFD_WUNLOCK(bd);
+ BPFD_UNLOCK(bd);
}
BPFIF_RUNLOCK(bp);
}
BPF_UNLOCK();
}
+/*
+ * Fill filter statistics
+ */
static void
bpfstats_fill_xbpf(struct xbpf_d *d, struct bpf_d *bd)
{
@@ -2529,6 +2680,7 @@ bpfstats_fill_xbpf(struct xbpf_d *d, struct bpf_d *bd)
bzero(d, sizeof(*d));
BPFD_LOCK_ASSERT(bd);
d->bd_structsize = sizeof(*d);
+ /* XXX: reading should be protected by global lock */
d->bd_immediate = bd->bd_immediate;
d->bd_promisc = bd->bd_promisc;
d->bd_hdrcmplt = bd->bd_hdrcmplt;
@@ -2553,6 +2705,9 @@ bpfstats_fill_xbpf(struct xbpf_d *d, struct bpf_d *bd)
d->bd_bufmode = bd->bd_bufmode;
}
+/*
+ * Handle `netstat -B' stats request
+ */
static int
bpf_stats_sysctl(SYSCTL_HANDLER_ARGS)
{
@@ -2602,15 +2757,15 @@ bpf_stats_sysctl(SYSCTL_HANDLER_ARGS)
/* Send writers-only first */
LIST_FOREACH(bd, &bp->bif_wlist, bd_next) {
xbd = &xbdbuf[index++];
- BPFD_RLOCK(bd);
+ BPFD_LOCK(bd);
bpfstats_fill_xbpf(xbd, bd);
- BPFD_RUNLOCK(bd);
+ BPFD_UNLOCK(bd);
}
LIST_FOREACH(bd, &bp->bif_dlist, bd_next) {
xbd = &xbdbuf[index++];
- BPFD_RLOCK(bd);
+ BPFD_LOCK(bd);
bpfstats_fill_xbpf(xbd, bd);
- BPFD_RUNLOCK(bd);
+ BPFD_UNLOCK(bd);
}
BPFIF_RUNLOCK(bp);
}
diff --git a/sys/net/bpf.h b/sys/net/bpf.h
index 9d2fa87a28e4..a7986be3cec9 100644
--- a/sys/net/bpf.h
+++ b/sys/net/bpf.h
@@ -1225,6 +1225,7 @@ struct bpf_if {
struct ifnet *bif_ifp; /* corresponding interface */
struct rwlock bif_lock; /* interface lock */
LIST_HEAD(, bpf_d) bif_wlist; /* writer-only list */
+ int flags; /* Interface flags */
#endif
};
diff --git a/sys/net/bpf_buffer.c b/sys/net/bpf_buffer.c
index 869e70b385be..64bb982aab22 100644
--- a/sys/net/bpf_buffer.c
+++ b/sys/net/bpf_buffer.c
@@ -93,21 +93,6 @@ static int bpf_maxbufsize = BPF_MAXBUFSIZE;
SYSCTL_INT(_net_bpf, OID_AUTO, maxbufsize, CTLFLAG_RW,
&bpf_maxbufsize, 0, "Maximum capture buffer in bytes");
-void
-bpf_buffer_alloc(struct bpf_d *d)
-{
-
- KASSERT(d->bd_fbuf == NULL, ("bpf_buffer_alloc: bd_fbuf != NULL"));
- KASSERT(d->bd_sbuf == NULL, ("bpf_buffer_alloc: bd_sbuf != NULL"));
- KASSERT(d->bd_hbuf == NULL, ("bpf_buffer_alloc: bd_hbuf != NULL"));
-
- d->bd_fbuf = (caddr_t)malloc(d->bd_bufsize, M_BPF, M_WAITOK);
- d->bd_sbuf = (caddr_t)malloc(d->bd_bufsize, M_BPF, M_WAITOK);
- d->bd_hbuf = NULL;
- d->bd_slen = 0;
- d->bd_hlen = 0;
-}
-
/*
* Simple data copy to the current kernel buffer.
*/
@@ -183,19 +168,43 @@ int
bpf_buffer_ioctl_sblen(struct bpf_d *d, u_int *i)
{
u_int size;
+ caddr_t fbuf, sbuf;
- BPFD_WLOCK(d);
- if (d->bd_bif != NULL) {
- BPFD_WUNLOCK(d);
- return (EINVAL);
- }
size = *i;
if (size > bpf_maxbufsize)
*i = size = bpf_maxbufsize;
else if (size < BPF_MINBUFSIZE)
*i = size = BPF_MINBUFSIZE;
+
+ /* Allocate buffers immediately */
+ fbuf = (caddr_t)malloc(size, M_BPF, M_WAITOK);
+ sbuf = (caddr_t)malloc(size, M_BPF, M_WAITOK);
+
+ BPFD_LOCK(d);
+ if (d->bd_bif != NULL) {
+ /* Interface already attached, unable to change buffers */
+ BPFD_UNLOCK(d);
+ free(fbuf, M_BPF);
+ free(sbuf, M_BPF);
+ return (EINVAL);
+ }
+
+ /* Free old buffers if set */
+ if (d->bd_fbuf != NULL)
+ free(d->bd_fbuf, M_BPF);
+ if (d->bd_sbuf != NULL)
+ free(d->bd_sbuf, M_BPF);
+
+ /* Fill in new data */
d->bd_bufsize = size;
- BPFD_WUNLOCK(d);
+ d->bd_fbuf = fbuf;
+ d->bd_sbuf = sbuf;
+
+ d->bd_hbuf = NULL;
+ d->bd_slen = 0;
+ d->bd_hlen = 0;
+
+ BPFD_UNLOCK(d);
return (0);
}
diff --git a/sys/net/bpf_buffer.h b/sys/net/bpf_buffer.h
index 733137fe1625..c1dc1f3a227b 100644
--- a/sys/net/bpf_buffer.h
+++ b/sys/net/bpf_buffer.h
@@ -36,7 +36,6 @@
#error "no user-serviceable parts inside"
#endif
-void bpf_buffer_alloc(struct bpf_d *d);
void bpf_buffer_append_bytes(struct bpf_d *d, caddr_t buf, u_int offset,
void *src, u_int len);
void bpf_buffer_append_mbuf(struct bpf_d *d, caddr_t buf, u_int offset,
diff --git a/sys/net/bpf_zerocopy.c b/sys/net/bpf_zerocopy.c
index b060f4d3612c..1b3262906263 100644
--- a/sys/net/bpf_zerocopy.c
+++ b/sys/net/bpf_zerocopy.c
@@ -515,14 +515,14 @@ bpf_zerocopy_ioctl_rotzbuf(struct thread *td, struct bpf_d *d,
struct zbuf *bzh;
bzero(bz, sizeof(*bz));
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
if (d->bd_hbuf == NULL && d->bd_slen != 0) {
ROTATE_BUFFERS(d);
bzh = (struct zbuf *)d->bd_hbuf;
bz->bz_bufa = (void *)bzh->zb_uaddr;
bz->bz_buflen = d->bd_hlen;
}
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (0);
}
@@ -570,10 +570,10 @@ bpf_zerocopy_ioctl_setzbuf(struct thread *td, struct bpf_d *d,
* We only allow buffers to be installed once, so atomically check
* that no buffers are currently installed and install new buffers.
*/
- BPFD_WLOCK(d);
+ BPFD_LOCK(d);
if (d->bd_hbuf != NULL || d->bd_sbuf != NULL || d->bd_fbuf != NULL ||
d->bd_bif != NULL) {
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
zbuf_free(zba);
zbuf_free(zbb);
return (EINVAL);
@@ -593,6 +593,6 @@ bpf_zerocopy_ioctl_setzbuf(struct thread *td, struct bpf_d *d,
* shared management region.
*/
d->bd_bufsize = bz->bz_buflen - sizeof(struct bpf_zbuf_header);
- BPFD_WUNLOCK(d);
+ BPFD_UNLOCK(d);
return (0);
}
diff --git a/sys/net/bpfdesc.h b/sys/net/bpfdesc.h
index f01a0e16dcd7..6d58cc37e625 100644
--- a/sys/net/bpfdesc.h
+++ b/sys/net/bpfdesc.h
@@ -88,7 +88,7 @@ struct bpf_d {
int bd_sig; /* signal to send upon packet reception */
struct sigio * bd_sigio; /* information for async I/O */
struct selinfo bd_sel; /* bsd select info */
- struct rwlock bd_lock; /* per-descriptor lock */
+ struct mtx bd_lock; /* per-descriptor lock */
struct callout bd_callout; /* for BPF timeouts with select */
struct label *bd_label; /* MAC label for descriptor */
u_int64_t bd_fcount; /* number of packets which matched filter */
@@ -107,12 +107,9 @@ struct bpf_d {
#define BPF_WAITING 1 /* waiting for read timeout in select */
#define BPF_TIMED_OUT 2 /* read timeout has expired in select */
-#define BPFD_RLOCK(bd) rw_rlock(&(bd)->bd_lock)
-#define BPFD_RUNLOCK(bd) rw_runlock(&(bd)->bd_lock)
-#define BPFD_WLOCK(bd) rw_wlock(&(bd)->bd_lock)
-#define BPFD_WUNLOCK(bd) rw_wunlock(&(bd)->bd_lock)
-#define BPFD_WLOCK_ASSERT(bd) rw_assert(&(bd)->bd_lock, RA_WLOCKED)
-#define BPFD_LOCK_ASSERT(bd) rw_assert(&(bd)->bd_lock, RA_LOCKED)
+#define BPFD_LOCK(bd) mtx_lock(&(bd)->bd_lock)
+#define BPFD_UNLOCK(bd) mtx_unlock(&(bd)->bd_lock)
+#define BPFD_LOCK_ASSERT(bd) mtx_assert(&(bd)->bd_lock, MA_OWNED)
#define BPF_PID_REFRESH(bd, td) (bd)->bd_pid = (td)->td_proc->p_pid
#define BPF_PID_REFRESH_CUR(bd) (bd)->bd_pid = curthread->td_proc->p_pid
@@ -159,4 +156,6 @@ struct xbpf_d {
#define BPFIF_WLOCK(bif) rw_wlock(&(bif)->bif_lock)
#define BPFIF_WUNLOCK(bif) rw_wunlock(&(bif)->bif_lock)
+#define BPFIF_FLAG_DYING 1 /* Reject new bpf consumers */
+
#endif
diff --git a/sys/net/ieee8023ad_lacp.c b/sys/net/ieee8023ad_lacp.c
index 137e27313c36..b2a6a7daf152 100644
--- a/sys/net/ieee8023ad_lacp.c
+++ b/sys/net/ieee8023ad_lacp.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <sys/kernel.h> /* hz */
#include <sys/socket.h> /* for net/if.h */
#include <sys/sockio.h>
+#include <sys/sysctl.h>
#include <machine/stdarg.h>
#include <sys/lock.h>
#include <sys/rwlock.h>
@@ -168,7 +169,8 @@ static void lacp_enable_distributing(struct lacp_port *);
static int lacp_xmit_lacpdu(struct lacp_port *);
static int lacp_xmit_marker(struct lacp_port *);
-#if defined(LACP_DEBUG)
+/* Debugging */
+
static void lacp_dump_lacpdu(const struct lacpdu *);
static const char *lacp_format_partner(const struct lacp_peerinfo *, char *,
size_t);
@@ -184,10 +186,14 @@ static const char *lacp_format_portid(const struct lacp_portid *, char *,
size_t);
static void lacp_dprintf(const struct lacp_port *, const char *, ...)
__attribute__((__format__(__printf__, 2, 3)));
-#define LACP_DPRINTF(a) lacp_dprintf a
-#else
-#define LACP_DPRINTF(a) /* nothing */
-#endif
+
+static int lacp_debug = 0;
+SYSCTL_INT(_net, OID_AUTO, lacp_debug, CTLFLAG_RW | CTLFLAG_TUN,
+ &lacp_debug, 0, "Enable LACP debug logging (1=debug, 2=trace)");
+TUNABLE_INT("net.lacp_debug", &lacp_debug);
+
+#define LACP_DPRINTF(a) if (lacp_debug > 0) { lacp_dprintf a ; }
+#define LACP_TRACE(a) if (lacp_debug > 1) { lacp_dprintf(a,"%s\n",__func__); }
/*
* partner administration variables.
@@ -290,10 +296,10 @@ lacp_pdu_input(struct lacp_port *lp, struct mbuf *m)
goto bad;
}
-#if defined(LACP_DEBUG)
- LACP_DPRINTF((lp, "lacpdu receive\n"));
- lacp_dump_lacpdu(du);
-#endif /* defined(LACP_DEBUG) */
+ if (lacp_debug > 0) {
+ lacp_dprintf(lp, "lacpdu receive\n");
+ lacp_dump_lacpdu(du);
+ }
LACP_LOCK(lsc);
lacp_sm_rx(lp, du);
@@ -370,10 +376,10 @@ lacp_xmit_lacpdu(struct lacp_port *lp)
sizeof(du->ldu_collector));
du->ldu_collector.lci_maxdelay = 0;
-#if defined(LACP_DEBUG)
- LACP_DPRINTF((lp, "lacpdu transmit\n"));
- lacp_dump_lacpdu(du);
-#endif /* defined(LACP_DEBUG) */
+ if (lacp_debug > 0) {
+ lacp_dprintf(lp, "lacpdu transmit\n");
+ lacp_dump_lacpdu(du);
+ }
m->m_flags |= M_MCAST;
@@ -647,9 +653,7 @@ lacp_disable_distributing(struct lacp_port *lp)
{
struct lacp_aggregator *la = lp->lp_aggregator;
struct lacp_softc *lsc = lp->lp_lsc;
-#if defined(LACP_DEBUG)
char buf[LACP_LAGIDSTR_MAX+1];
-#endif /* defined(LACP_DEBUG) */
LACP_LOCK_ASSERT(lsc);
@@ -684,9 +688,7 @@ lacp_enable_distributing(struct lacp_port *lp)
{
struct lacp_aggregator *la = lp->lp_aggregator;
struct lacp_softc *lsc = lp->lp_lsc;
-#if defined(LACP_DEBUG)
char buf[LACP_LAGIDSTR_MAX+1];
-#endif /* defined(LACP_DEBUG) */
LACP_LOCK_ASSERT(lsc);
@@ -720,7 +722,8 @@ lacp_transit_expire(void *vp)
LACP_LOCK_ASSERT(lsc);
- LACP_DPRINTF((NULL, "%s\n", __func__));
+ LACP_TRACE(NULL);
+
lsc->lsc_suppress_distributing = FALSE;
}
@@ -838,7 +841,8 @@ lacp_suppress_distributing(struct lacp_softc *lsc, struct lacp_aggregator *la)
return;
}
- LACP_DPRINTF((NULL, "%s\n", __func__));
+ LACP_TRACE(NULL);
+
lsc->lsc_suppress_distributing = TRUE;
/* send a marker frame down each port to verify the queues are empty */
@@ -908,11 +912,9 @@ lacp_select_active_aggregator(struct lacp_softc *lsc)
struct lacp_aggregator *la;
struct lacp_aggregator *best_la = NULL;
uint64_t best_speed = 0;
-#if defined(LACP_DEBUG)
char buf[LACP_LAGIDSTR_MAX+1];
-#endif /* defined(LACP_DEBUG) */
- LACP_DPRINTF((NULL, "%s:\n", __func__));
+ LACP_TRACE(NULL);
TAILQ_FOREACH(la, &lsc->lsc_aggregators, la_q) {
uint64_t speed;
@@ -946,7 +948,6 @@ lacp_select_active_aggregator(struct lacp_softc *lsc)
KASSERT(best_la == NULL || !TAILQ_EMPTY(&best_la->la_ports),
("invalid aggregator list"));
-#if defined(LACP_DEBUG)
if (lsc->lsc_active_aggregator != best_la) {
LACP_DPRINTF((NULL, "active aggregator changed\n"));
LACP_DPRINTF((NULL, "old %s\n",
@@ -957,7 +958,6 @@ lacp_select_active_aggregator(struct lacp_softc *lsc)
}
LACP_DPRINTF((NULL, "new %s\n",
lacp_format_lagid_aggregator(best_la, buf, sizeof(buf))));
-#endif /* defined(LACP_DEBUG) */
if (lsc->lsc_active_aggregator != best_la) {
sc->sc_ifp->if_baudrate = best_speed;
@@ -1040,9 +1040,7 @@ lacp_compose_key(struct lacp_port *lp)
static void
lacp_aggregator_addref(struct lacp_softc *lsc, struct lacp_aggregator *la)
{
-#if defined(LACP_DEBUG)
char buf[LACP_LAGIDSTR_MAX+1];
-#endif
LACP_DPRINTF((NULL, "%s: lagid=%s, refcnt %d -> %d\n",
__func__,
@@ -1058,9 +1056,7 @@ lacp_aggregator_addref(struct lacp_softc *lsc, struct lacp_aggregator *la)
static void
lacp_aggregator_delref(struct lacp_softc *lsc, struct lacp_aggregator *la)
{
-#if defined(LACP_DEBUG)
char buf[LACP_LAGIDSTR_MAX+1];
-#endif
LACP_DPRINTF((NULL, "%s: lagid=%s, refcnt %d -> %d\n",
__func__,
@@ -1195,9 +1191,7 @@ lacp_select(struct lacp_port *lp)
{
struct lacp_softc *lsc = lp->lp_lsc;
struct lacp_aggregator *la;
-#if defined(LACP_DEBUG)
char buf[LACP_LAGIDSTR_MAX+1];
-#endif
if (lp->lp_aggregator) {
return;
@@ -1278,7 +1272,8 @@ lacp_sm_mux(struct lacp_port *lp)
enum lacp_selected selected = lp->lp_selected;
struct lacp_aggregator *la;
- /* LACP_DPRINTF((lp, "%s: state %d\n", __func__, lp->lp_mux_state)); */
+ if (lacp_debug > 1)
+ lacp_dprintf(lp, "%s: state %d\n", __func__, lp->lp_mux_state);
re_eval:
la = lp->lp_aggregator;
@@ -1387,9 +1382,7 @@ static void
lacp_sm_mux_timer(struct lacp_port *lp)
{
struct lacp_aggregator *la = lp->lp_aggregator;
-#if defined(LACP_DEBUG)
char buf[LACP_LAGIDSTR_MAX+1];
-#endif
KASSERT(la->la_pending > 0, ("no pending event"));
@@ -1537,11 +1530,9 @@ lacp_sm_rx_record_pdu(struct lacp_port *lp, const struct lacpdu *du)
{
boolean_t active;
uint8_t oldpstate;
-#if defined(LACP_DEBUG)
char buf[LACP_STATESTR_MAX+1];
-#endif
- /* LACP_DPRINTF((lp, "%s\n", __func__)); */
+ LACP_TRACE(lp);
oldpstate = lp->lp_partner.lip_state;
@@ -1576,7 +1567,8 @@ lacp_sm_rx_record_pdu(struct lacp_port *lp, const struct lacpdu *du)
static void
lacp_sm_rx_update_ntt(struct lacp_port *lp, const struct lacpdu *du)
{
- /* LACP_DPRINTF((lp, "%s\n", __func__)); */
+
+ LACP_TRACE(lp);
if (lacp_compare_peerinfo(&lp->lp_actor, &du->ldu_partner) ||
!LACP_STATE_EQ(lp->lp_state, du->ldu_partner.lip_state,
@@ -1591,7 +1583,7 @@ lacp_sm_rx_record_default(struct lacp_port *lp)
{
uint8_t oldpstate;
- /* LACP_DPRINTF((lp, "%s\n", __func__)); */
+ LACP_TRACE(lp);
oldpstate = lp->lp_partner.lip_state;
lp->lp_partner = lacp_partner_admin;
@@ -1603,7 +1595,8 @@ static void
lacp_sm_rx_update_selected_from_peerinfo(struct lacp_port *lp,
const struct lacp_peerinfo *info)
{
- /* LACP_DPRINTF((lp, "%s\n", __func__)); */
+
+ LACP_TRACE(lp);
if (lacp_compare_peerinfo(&lp->lp_partner, info) ||
!LACP_STATE_EQ(lp->lp_partner.lip_state, info->lip_state,
@@ -1616,7 +1609,8 @@ lacp_sm_rx_update_selected_from_peerinfo(struct lacp_port *lp,
static void
lacp_sm_rx_update_selected(struct lacp_port *lp, const struct lacpdu *du)
{
- /* LACP_DPRINTF((lp, "%s\n", __func__)); */
+
+ LACP_TRACE(lp);
lacp_sm_rx_update_selected_from_peerinfo(lp, &du->ldu_actor);
}
@@ -1624,7 +1618,8 @@ lacp_sm_rx_update_selected(struct lacp_port *lp, const struct lacpdu *du)
static void
lacp_sm_rx_update_default_selected(struct lacp_port *lp)
{
- /* LACP_DPRINTF((lp, "%s\n", __func__)); */
+
+ LACP_TRACE(lp);
lacp_sm_rx_update_selected_from_peerinfo(lp, &lacp_partner_admin);
}
@@ -1812,7 +1807,7 @@ tlv_check(const void *p, size_t size, const struct tlvhdr *tlv,
return (0);
}
-#if defined(LACP_DEBUG)
+/* Debugging */
const char *
lacp_format_mac(const uint8_t *mac, char *buf, size_t buflen)
{
@@ -1942,4 +1937,3 @@ lacp_dprintf(const struct lacp_port *lp, const char *fmt, ...)
vprintf(fmt, va);
va_end(va);
}
-#endif
diff --git a/sys/net/if.h b/sys/net/if.h
index 47292cb29985..05be58fbb2cb 100644
--- a/sys/net/if.h
+++ b/sys/net/if.h
@@ -230,6 +230,10 @@ struct if_data {
#define IFCAP_VLAN_HWTSO 0x40000 /* can do IFCAP_TSO on VLANs */
#define IFCAP_LINKSTATE 0x80000 /* the runtime link state is dynamic */
#define IFCAP_NETMAP 0x100000 /* netmap mode supported/enabled */
+#define IFCAP_RXCSUM_IPV6 0x200000 /* can offload checksum on IPv6 RX */
+#define IFCAP_TXCSUM_IPV6 0x400000 /* can offload checksum on IPv6 TX */
+
+#define IFCAP_HWCSUM_IPV6 (IFCAP_RXCSUM_IPV6 | IFCAP_TXCSUM_IPV6)
#define IFCAP_HWCSUM (IFCAP_RXCSUM | IFCAP_TXCSUM)
#define IFCAP_TSO (IFCAP_TSO4 | IFCAP_TSO6)
diff --git a/sys/net/if_dl.h b/sys/net/if_dl.h
index 8d88623db856..64f4b56d76e6 100644
--- a/sys/net/if_dl.h
+++ b/sys/net/if_dl.h
@@ -67,6 +67,7 @@ struct sockaddr_dl {
};
#define LLADDR(s) ((caddr_t)((s)->sdl_data + (s)->sdl_nlen))
+#define LLINDEX(s) ((s)->sdl_index)
#ifndef _KERNEL
diff --git a/sys/net/if_lagg.c b/sys/net/if_lagg.c
index c8b8ecbf5e9a..9041e181fe2c 100644
--- a/sys/net/if_lagg.c
+++ b/sys/net/if_lagg.c
@@ -516,8 +516,13 @@ lagg_port_create(struct lagg_softc *sc, struct ifnet *ifp)
return (ENOSPC);
/* Check if port has already been associated to a lagg */
- if (ifp->if_lagg != NULL)
+ if (ifp->if_lagg != NULL) {
+ /* Port is already in the current lagg? */
+ lp = (struct lagg_port *)ifp->if_lagg;
+ if (lp->lp_softc == sc)
+ return (EEXIST);
return (EBUSY);
+ }
/* XXX Disallow non-ethernet interfaces (this should be any of 802) */
if (ifp->if_type != IFT_ETHER)
diff --git a/sys/net/if_loop.c b/sys/net/if_loop.c
index 78d2de21e523..23eb450f3f41 100644
--- a/sys/net/if_loop.c
+++ b/sys/net/if_loop.c
@@ -92,7 +92,9 @@
#endif
#define LO_CSUM_FEATURES (CSUM_IP | CSUM_TCP | CSUM_UDP | CSUM_SCTP)
-#define LO_CSUM_SET (CSUM_DATA_VALID | CSUM_PSEUDO_HDR | \
+#define LO_CSUM_FEATURES6 (CSUM_TCP_IPV6 | CSUM_UDP_IPV6 | CSUM_SCTP)
+#define LO_CSUM_SET (CSUM_DATA_VALID | CSUM_DATA_VALID_IPV6 | \
+ CSUM_PSEUDO_HDR | \
CSUM_IP_CHECKED | CSUM_IP_VALID | \
CSUM_SCTP_VALID)
@@ -143,8 +145,9 @@ lo_clone_create(struct if_clone *ifc, int unit, caddr_t params)
ifp->if_ioctl = loioctl;
ifp->if_output = looutput;
ifp->if_snd.ifq_maxlen = ifqmaxlen;
- ifp->if_capabilities = ifp->if_capenable = IFCAP_HWCSUM;
- ifp->if_hwassist = LO_CSUM_FEATURES;
+ ifp->if_capabilities = ifp->if_capenable =
+ IFCAP_HWCSUM | IFCAP_HWCSUM_IPV6;
+ ifp->if_hwassist = LO_CSUM_FEATURES | LO_CSUM_FEATURES6;
if_attach(ifp);
bpfattach(ifp, DLT_NULL, sizeof(u_int32_t));
if (V_loif == NULL)
@@ -252,7 +255,14 @@ looutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
m->m_pkthdr.csum_flags = LO_CSUM_SET;
}
m->m_pkthdr.csum_flags &= ~LO_CSUM_FEATURES;
+ break;
case AF_INET6:
+ if (ifp->if_capenable & IFCAP_RXCSUM_IPV6) {
+ m->m_pkthdr.csum_data = 0xffff;
+ m->m_pkthdr.csum_flags = LO_CSUM_SET;
+ }
+ m->m_pkthdr.csum_flags &= ~LO_CSUM_FEATURES6;
+ break;
case AF_IPX:
case AF_APPLETALK:
break;
@@ -436,10 +446,15 @@ loioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
ifp->if_capenable ^= IFCAP_RXCSUM;
if ((mask & IFCAP_TXCSUM) != 0)
ifp->if_capenable ^= IFCAP_TXCSUM;
+ if ((mask & IFCAP_RXCSUM_IPV6) != 0)
+ ifp->if_capenable ^= IFCAP_RXCSUM_IPV6;
+ if ((mask & IFCAP_TXCSUM_IPV6) != 0)
+ ifp->if_capenable ^= IFCAP_TXCSUM_IPV6;
+ ifp->if_hwassist = 0;
if (ifp->if_capenable & IFCAP_TXCSUM)
ifp->if_hwassist = LO_CSUM_FEATURES;
- else
- ifp->if_hwassist = 0;
+ if (ifp->if_capenable & IFCAP_TXCSUM_IPV6)
+ ifp->if_hwassist |= LO_CSUM_FEATURES6;
break;
default:
diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c
index 9134b8dcbd63..613446702031 100644
--- a/sys/net80211/ieee80211_ht.c
+++ b/sys/net80211/ieee80211_ht.c
@@ -2166,6 +2166,9 @@ ieee80211_ampdu_stop(struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap,
}
}
+/* XXX */
+static void bar_start_timer(struct ieee80211_tx_ampdu *tap);
+
static void
bar_timeout(void *arg)
{
@@ -2184,11 +2187,34 @@ bar_timeout(void *arg)
return;
/* XXX ? */
if (tap->txa_attempts >= ieee80211_bar_maxtries) {
+ struct ieee80211com *ic = ni->ni_ic;
+
ni->ni_vap->iv_stats.is_ampdu_bar_tx_fail++;
+ /*
+ * If (at least) the last BAR TX timeout was due to
+ * an ieee80211_send_bar() failures, then we need
+ * to make sure we notify the driver that a BAR
+ * TX did occur and fail. This gives the driver
+ * a chance to undo any queue pause that may
+ * have occured.
+ */
+ ic->ic_bar_response(ni, tap, 1);
ieee80211_ampdu_stop(ni, tap, IEEE80211_REASON_TIMEOUT);
} else {
ni->ni_vap->iv_stats.is_ampdu_bar_tx_retry++;
- ieee80211_send_bar(ni, tap, tap->txa_seqpending);
+ if (ieee80211_send_bar(ni, tap, tap->txa_seqpending) != 0) {
+ /*
+ * If ieee80211_send_bar() fails here, the
+ * timer may have stopped and/or the pending
+ * flag may be clear. Because of this,
+ * fake the BARPEND and reset the timer.
+ * A retransmission attempt will then occur
+ * during the next timeout.
+ */
+ /* XXX locking */
+ tap->txa_flags |= IEEE80211_AGGR_BARPEND;
+ bar_start_timer(tap);
+ }
}
}
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
index d2e3a26400d3..cacb524f3a48 100644
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -524,7 +524,9 @@ ng_ksocket_constructor(node_p node)
priv_p priv;
/* Allocate private structure */
- priv = malloc(sizeof(*priv), M_NETGRAPH_KSOCKET, M_WAITOK | M_ZERO);
+ priv = malloc(sizeof(*priv), M_NETGRAPH_KSOCKET, M_NOWAIT | M_ZERO);
+ if (priv == NULL)
+ return (ENOMEM);
LIST_INIT(&priv->embryos);
/* cross link them */
diff --git a/sys/netinet/in.h b/sys/netinet/in.h
index 52844f058988..56150dad49cc 100644
--- a/sys/netinet/in.h
+++ b/sys/netinet/in.h
@@ -241,6 +241,7 @@ __END_DECLS
#define IPPROTO_PIM 103 /* Protocol Independent Mcast */
#define IPPROTO_CARP 112 /* CARP */
#define IPPROTO_PGM 113 /* PGM */
+#define IPPROTO_MPLS 137 /* MPLS-in-IP */
#define IPPROTO_PFSYNC 240 /* PFSYNC */
/* 255: Reserved */
/* BSD Private, local use, namespace incursion, no longer used */
diff --git a/sys/netinet/libalias/alias_sctp.h b/sys/netinet/libalias/alias_sctp.h
index 99d54cebedb0..bb6db271a49a 100644
--- a/sys/netinet/libalias/alias_sctp.h
+++ b/sys/netinet/libalias/alias_sctp.h
@@ -92,7 +92,6 @@
#ifndef _KERNEL
#include <stdlib.h>
#include <stdio.h>
-#include <curses.h>
#endif //#ifdef _KERNEL
diff --git a/sys/netinet/sctp.h b/sys/netinet/sctp.h
index e36192a41655..669b02a9f78f 100644
--- a/sys/netinet/sctp.h
+++ b/sys/netinet/sctp.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -29,7 +29,6 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp.h,v 1.18 2005/03/06 16:04:16 itojun Exp $ */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -37,6 +36,7 @@ __FBSDID("$FreeBSD$");
#ifndef _NETINET_SCTP_H_
#define _NETINET_SCTP_H_
+
#include <sys/types.h>
@@ -556,6 +556,8 @@ struct sctp_error_unrecognized_chunk {
#define SCTP_SMALLEST_PMTU 512 /* smallest pmtu allowed when disabling PMTU
* discovery */
+#undef SCTP_PACKED
+
#include <netinet/sctp_uio.h>
/* This dictates the size of the packet
@@ -607,7 +609,4 @@ struct sctp_error_unrecognized_chunk {
#define SCTP_LOG_AT_SEND_2_OUTQ 0x08000000
#define SCTP_LOG_TRY_ADVANCE 0x10000000
-
-#undef SCTP_PACKED
-
#endif /* !_NETINET_SCTP_H_ */
diff --git a/sys/netinet/sctp_asconf.c b/sys/netinet/sctp_asconf.c
index 424d18044c70..9ab3bee08aad 100644
--- a/sys/netinet/sctp_asconf.c
+++ b/sys/netinet/sctp_asconf.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,10 +30,9 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_asconf.c,v 1.24 2005/03/06 16:04:16 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+
#include <netinet/sctp_os.h>
#include <netinet/sctp_var.h>
#include <netinet/sctp_sysctl.h>
diff --git a/sys/netinet/sctp_asconf.h b/sys/netinet/sctp_asconf.h
index 1b9ac865bfa9..1535f1fc0464 100644
--- a/sys/netinet/sctp_asconf.h
+++ b/sys/netinet/sctp_asconf.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,8 +30,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_asconf.h,v 1.8 2005/03/06 16:04:16 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/sys/netinet/sctp_auth.c b/sys/netinet/sctp_auth.c
index 9581251ec77d..532538aaba11 100644
--- a/sys/netinet/sctp_auth.c
+++ b/sys/netinet/sctp_auth.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
diff --git a/sys/netinet/sctp_auth.h b/sys/netinet/sctp_auth.h
index 7034ba0fa235..eac89f6fca8a 100644
--- a/sys/netinet/sctp_auth.h
+++ b/sys/netinet/sctp_auth.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -33,8 +33,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __SCTP_AUTH_H__
-#define __SCTP_AUTH_H__
+#ifndef _NETINET_SCTP_AUTH_H_
+#define _NETINET_SCTP_AUTH_H_
/* digest lengths */
diff --git a/sys/netinet/sctp_bsd_addr.c b/sys/netinet/sctp_bsd_addr.c
index 00d0d7386a7d..87b056d75fc1 100644
--- a/sys/netinet/sctp_bsd_addr.c
+++ b/sys/netinet/sctp_bsd_addr.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,8 +30,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_output.c,v 1.46 2005/03/06 16:04:17 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/sys/netinet/sctp_bsd_addr.h b/sys/netinet/sctp_bsd_addr.h
index 1c3fe3c5b7df..76e06919b821 100644
--- a/sys/netinet/sctp_bsd_addr.h
+++ b/sys/netinet/sctp_bsd_addr.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -33,8 +33,9 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_bsd_addr_h__
-#define __sctp_bsd_addr_h__
+#ifndef _NETINET_SCTP_BSD_ADDR_H_
+#define _NETINET_SCTP_BSD_ADDR_H_
+
#include <netinet/sctp_pcb.h>
#if defined(_KERNEL) || defined(__Userspace__)
diff --git a/sys/netinet/sctp_cc_functions.c b/sys/netinet/sctp_cc_functions.c
index f5491d07c44a..121f40d26eb6 100644
--- a/sys/netinet/sctp_cc_functions.c
+++ b/sys/netinet/sctp_cc_functions.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,6 +30,9 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
#include <netinet/sctp_os.h>
#include <netinet/sctp_var.h>
#include <netinet/sctp_sysctl.h>
@@ -44,8 +47,6 @@
#include <netinet/sctp_auth.h>
#include <netinet/sctp_asconf.h>
#include <netinet/sctp_dtrace_declare.h>
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
#define SHIFT_MPTCP_MULTI_N 40
#define SHIFT_MPTCP_MULTI_Z 16
diff --git a/sys/netinet/sctp_constants.h b/sys/netinet/sctp_constants.h
index c183f1c1984c..dd70bcb0f27d 100644
--- a/sys/netinet/sctp_constants.h
+++ b/sys/netinet/sctp_constants.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,13 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_constants.h,v 1.17 2005/03/06 16:04:17 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_constants_h__
-#define __sctp_constants_h__
+#ifndef _NETINET_SCTP_CONSTANTS_H_
+#define _NETINET_SCTP_CONSTANTS_H_
/* IANA assigned port number for SCTP over UDP encapsulation */
/* For freebsd we cannot bind the port at
@@ -348,7 +346,7 @@ __FBSDID("$FreeBSD$");
#define SCTP_NO_FR_UNLESS_SEGMENT_SMALLER 1
/* default max I can burst out after a fast retransmit, 0 disables it */
-#define SCTP_DEF_MAX_BURST 0
+#define SCTP_DEF_MAX_BURST 4
#define SCTP_DEF_HBMAX_BURST 4
#define SCTP_DEF_FRMAX_BURST 4
diff --git a/sys/netinet/sctp_crc32.c b/sys/netinet/sctp_crc32.c
index f3588d979be7..e7d5c9bb13ec 100644
--- a/sys/netinet/sctp_crc32.c
+++ b/sys/netinet/sctp_crc32.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,9 +30,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_crc32.c,v 1.12 2005/03/06 16:04:17 itojun Exp $ */
-
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/sys/netinet/sctp_crc32.h b/sys/netinet/sctp_crc32.h
index 0f22cab59c49..3f98be41c48a 100644
--- a/sys/netinet/sctp_crc32.h
+++ b/sys/netinet/sctp_crc32.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,13 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_crc32.h,v 1.5 2004/08/17 04:06:16 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __crc32c_h__
-#define __crc32c_h__
+#ifndef _NETINET_SCTP_CRC32_H_
+#define _NETINET_SCTP_CRC32_H_
#if defined(_KERNEL)
#if !defined(SCTP_WITH_NO_CSUM)
diff --git a/sys/netinet/sctp_dtrace_declare.h b/sys/netinet/sctp_dtrace_declare.h
index 1dcb835e12f2..930a547c5781 100644
--- a/sys/netinet/sctp_dtrace_declare.h
+++ b/sys/netinet/sctp_dtrace_declare.h
@@ -1,6 +1,6 @@
/*-
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -28,9 +28,13 @@
* 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$");
-#ifndef __sctp_dtrace_declare_h__
+
+#ifndef _NETINET_SCTP_DTRACE_DECLARE_H_
+#define _NETINET_SCTP_DTRACE_DECLARE_H_
+
#include "opt_kdtrace.h"
#include <sys/kernel.h>
#include <sys/sdt.h>
diff --git a/sys/netinet/sctp_dtrace_define.h b/sys/netinet/sctp_dtrace_define.h
index 34929dd9141a..5247b02dc9b4 100644
--- a/sys/netinet/sctp_dtrace_define.h
+++ b/sys/netinet/sctp_dtrace_define.h
@@ -1,6 +1,6 @@
/*-
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -28,9 +28,13 @@
* 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$");
-#ifndef __sctp_dtrace_define_h__
+
+#ifndef _NETINET_SCTP_DTRACE_DEFINE_H_
+#define _NETINET_SCTP_DTRACE_DEFINE_H_
+
#include "opt_kdtrace.h"
#include <sys/kernel.h>
#include <sys/sdt.h>
diff --git a/sys/netinet/sctp_header.h b/sys/netinet/sctp_header.h
index a5a17187ddfb..a26e9b45fbd3 100644
--- a/sys/netinet/sctp_header.h
+++ b/sys/netinet/sctp_header.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,13 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_header.h,v 1.14 2005/03/06 16:04:17 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_header_h__
-#define __sctp_header_h__
+#ifndef _NETINET_SCTP_HEADER_H_
+#define _NETINET_SCTP_HEADER_H_
#include <sys/time.h>
#include <netinet/sctp.h>
diff --git a/sys/netinet/sctp_indata.c b/sys/netinet/sctp_indata.c
index dba40cf8ecfd..09dc3627cc90 100644
--- a/sys/netinet/sctp_indata.c
+++ b/sys/netinet/sctp_indata.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,8 +30,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_indata.c,v 1.36 2005/03/06 16:04:17 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/sys/netinet/sctp_indata.h b/sys/netinet/sctp_indata.h
index fc0136be0f84..e5cde9c18a40 100644
--- a/sys/netinet/sctp_indata.h
+++ b/sys/netinet/sctp_indata.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,13 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_indata.h,v 1.9 2005/03/06 16:04:17 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_indata_h__
-#define __sctp_indata_h__
+#ifndef _NETINET_SCTP_INDATA_H_
+#define _NETINET_SCTP_INDATA_H_
#if defined(_KERNEL) || defined(__Userspace__)
diff --git a/sys/netinet/sctp_input.c b/sys/netinet/sctp_input.c
index 755fb44eb1ae..fa02c7de3841 100644
--- a/sys/netinet/sctp_input.c
+++ b/sys/netinet/sctp_input.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,8 +30,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_input.c,v 1.27 2005/03/06 16:04:17 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/sys/netinet/sctp_input.h b/sys/netinet/sctp_input.h
index 9a9a420cb4b2..afddc84f087e 100644
--- a/sys/netinet/sctp_input.h
+++ b/sys/netinet/sctp_input.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,13 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_input.h,v 1.6 2005/03/06 16:04:17 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_input_h__
-#define __sctp_input_h__
+#ifndef _NETINET_SCTP_INPUT_H_
+#define _NETINET_SCTP_INPUT_H_
#if defined(_KERNEL) || defined(__Userspace__)
void
diff --git a/sys/netinet/sctp_lock_bsd.h b/sys/netinet/sctp_lock_bsd.h
index fcdcf4a62612..35cdf5f802f6 100644
--- a/sys/netinet/sctp_lock_bsd.h
+++ b/sys/netinet/sctp_lock_bsd.h
@@ -1,9 +1,7 @@
-#ifndef __sctp_lock_bsd_h__
-#define __sctp_lock_bsd_h__
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -32,6 +30,12 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#ifndef _NETINET_SCTP_LOCK_BSD_H_
+#define _NETINET_SCTP_LOCK_BSD_H_
+
/*
* General locking concepts: The goal of our locking is to of course provide
* consistency and yet minimize overhead. We will attempt to use
@@ -70,9 +74,6 @@
* SCTP_INP_INFO_RLOCK() and then when we want to add a new association to
* the SCTP_BASE_INFO() list's we will do a SCTP_INP_INFO_WLOCK().
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
extern struct sctp_foo_stuff sctp_logoff[];
extern int sctp_logoff_stuff;
diff --git a/sys/netinet/sctp_os.h b/sys/netinet/sctp_os.h
index b3a7cf481d5b..dc6049b6487a 100644
--- a/sys/netinet/sctp_os.h
+++ b/sys/netinet/sctp_os.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2006-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -29,10 +29,12 @@
* 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$");
-#ifndef __sctp_os_h__
-#define __sctp_os_h__
+
+#ifndef _NETINET_SCTP_OS_H_
+#define _NETINET_SCTP_OS_H_
/*
* General kernel memory allocation:
diff --git a/sys/netinet/sctp_os_bsd.h b/sys/netinet/sctp_os_bsd.h
index edee91642910..699b0ca329f5 100644
--- a/sys/netinet/sctp_os_bsd.h
+++ b/sys/netinet/sctp_os_bsd.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2006-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -29,10 +29,12 @@
* 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$");
-#ifndef __sctp_os_bsd_h__
-#define __sctp_os_bsd_h__
+
+#ifndef _NETINET_SCTP_OS_BSD_H_
+#define _NETINET_SCTP_OS_BSD_H_
/*
* includes
*/
diff --git a/sys/netinet/sctp_output.c b/sys/netinet/sctp_output.c
index f83273853a8d..80d40755b2b7 100644
--- a/sys/netinet/sctp_output.c
+++ b/sys/netinet/sctp_output.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,8 +30,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_output.c,v 1.46 2005/03/06 16:04:17 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -4118,14 +4116,8 @@ sctp_lowlevel_chunk_output(struct sctp_inpcb *inp,
#if defined(SCTP_WITH_NO_CSUM)
SCTP_STAT_INCR(sctps_sendnocrc);
#else
- if (!(SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback) &&
- (stcb) &&
- (stcb->asoc.loopback_scope))) {
- sctphdr->checksum = sctp_calculate_cksum(m, sizeof(struct ip) + sizeof(struct udphdr));
- SCTP_STAT_INCR(sctps_sendswcrc);
- } else {
- SCTP_STAT_INCR(sctps_sendnocrc);
- }
+ sctphdr->checksum = sctp_calculate_cksum(m, sizeof(struct ip) + sizeof(struct udphdr));
+ SCTP_STAT_INCR(sctps_sendswcrc);
#endif
if (V_udp_cksum) {
SCTP_ENABLE_UDP_CSUM(o_pak);
@@ -4476,14 +4468,8 @@ sctp_lowlevel_chunk_output(struct sctp_inpcb *inp,
#if defined(SCTP_WITH_NO_CSUM)
SCTP_STAT_INCR(sctps_sendnocrc);
#else
- if (!(SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback) &&
- (stcb) &&
- (stcb->asoc.loopback_scope))) {
- sctphdr->checksum = sctp_calculate_cksum(m, sizeof(struct ip6_hdr) + sizeof(struct udphdr));
- SCTP_STAT_INCR(sctps_sendswcrc);
- } else {
- SCTP_STAT_INCR(sctps_sendnocrc);
- }
+ sctphdr->checksum = sctp_calculate_cksum(m, sizeof(struct ip6_hdr) + sizeof(struct udphdr));
+ SCTP_STAT_INCR(sctps_sendswcrc);
#endif
if ((udp->uh_sum = in6_cksum(o_pak, IPPROTO_UDP, sizeof(struct ip6_hdr), packet_length - sizeof(struct ip6_hdr))) == 0) {
udp->uh_sum = 0xffff;
@@ -13610,8 +13596,7 @@ skip_preblock:
dataless_eof:
/* EOF thing ? */
if ((srcv->sinfo_flags & SCTP_EOF) &&
- (got_all_of_the_send == 1) &&
- (stcb->sctp_ep->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE)) {
+ (got_all_of_the_send == 1)) {
int cnt;
SCTP_STAT_INCR(sctps_sends_with_eof);
diff --git a/sys/netinet/sctp_output.h b/sys/netinet/sctp_output.h
index ba30947f475e..087d2c02ba7f 100644
--- a/sys/netinet/sctp_output.h
+++ b/sys/netinet/sctp_output.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,13 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_output.h,v 1.14 2005/03/06 16:04:18 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_output_h__
-#define __sctp_output_h__
+#ifndef _NETINET_SCTP_OUTPUT_H_
+#define _NETINET_SCTP_OUTPUT_H_
#include <netinet/sctp_header.h>
diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c
index 3f066cc4afe1..aa72847f1735 100644
--- a/sys/netinet/sctp_pcb.c
+++ b/sys/netinet/sctp_pcb.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,8 +30,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_pcb.c,v 1.38 2005/03/06 16:04:18 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/sys/netinet/sctp_pcb.h b/sys/netinet/sctp_pcb.h
index 325f76869fe1..68b87ab92bd0 100644
--- a/sys/netinet/sctp_pcb.h
+++ b/sys/netinet/sctp_pcb.h
@@ -1,7 +1,8 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
*
@@ -29,13 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_pcb.h,v 1.21 2005/07/16 01:18:47 suz Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_pcb_h__
-#define __sctp_pcb_h__
+#ifndef _NETINET_SCTP_PCB_H_
+#define _NETINET_SCTP_PCB_H_
#include <netinet/sctp_os.h>
#include <netinet/sctp.h>
diff --git a/sys/netinet/sctp_peeloff.c b/sys/netinet/sctp_peeloff.c
index fb9391a73125..2b156e20c009 100644
--- a/sys/netinet/sctp_peeloff.c
+++ b/sys/netinet/sctp_peeloff.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,11 +30,9 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-
-/* $KAME: sctp_peeloff.c,v 1.13 2005/03/06 16:04:18 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+
#include <netinet/sctp_os.h>
#include <netinet/sctp_pcb.h>
#include <netinet/sctputil.h>
diff --git a/sys/netinet/sctp_peeloff.h b/sys/netinet/sctp_peeloff.h
index e552f560ab34..49c38ab42733 100644
--- a/sys/netinet/sctp_peeloff.h
+++ b/sys/netinet/sctp_peeloff.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,13 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_peeloff.h,v 1.6 2005/03/06 16:04:18 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_peeloff_h__
-#define __sctp_peeloff_h__
+#ifndef _NETINET_SCTP_PEELOFF_H_
+#define _NETINET_SCTP_PEELOFF_H_
diff --git a/sys/netinet/sctp_ss_functions.c b/sys/netinet/sctp_ss_functions.c
index e58664747f7b..a2568adbf6bb 100644
--- a/sys/netinet/sctp_ss_functions.c
+++ b/sys/netinet/sctp_ss_functions.c
@@ -1,7 +1,7 @@
/*-
- * Copyright (c) 2010-2011, by Michael Tuexen. All rights reserved.
- * Copyright (c) 2010-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2010-2011, by Robin Seggelmann. All rights reserved.
+ * Copyright (c) 2010-2012, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2010-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2010-2012, by Robin Seggelmann. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
diff --git a/sys/netinet/sctp_structs.h b/sys/netinet/sctp_structs.h
index 371169110122..4bd0ca966bd8 100644
--- a/sys/netinet/sctp_structs.h
+++ b/sys/netinet/sctp_structs.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,13 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_structs.h,v 1.13 2005/03/06 16:04:18 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_structs_h__
-#define __sctp_structs_h__
+#ifndef _NETINET_SCTP_STRUCTS_H_
+#define _NETINET_SCTP_STRUCTS_H_
#include <netinet/sctp_os.h>
#include <netinet/sctp_header.h>
diff --git a/sys/netinet/sctp_sysctl.c b/sys/netinet/sctp_sysctl.c
index 2186832dc049..6684acc9635e 100644
--- a/sys/netinet/sctp_sysctl.c
+++ b/sys/netinet/sctp_sysctl.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -55,9 +55,6 @@ sctp_init_sysctls()
SCTP_BASE_SYSCTL(sctp_multiple_asconfs) = SCTPCTL_MULTIPLEASCONFS_DEFAULT;
SCTP_BASE_SYSCTL(sctp_ecn_enable) = SCTPCTL_ECN_ENABLE_DEFAULT;
SCTP_BASE_SYSCTL(sctp_strict_sacks) = SCTPCTL_STRICT_SACKS_DEFAULT;
-#if !defined(SCTP_WITH_NO_CSUM)
- SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback) = SCTPCTL_LOOPBACK_NOCSUM_DEFAULT;
-#endif
SCTP_BASE_SYSCTL(sctp_peer_chunk_oh) = SCTPCTL_PEER_CHKOH_DEFAULT;
SCTP_BASE_SYSCTL(sctp_max_burst_default) = SCTPCTL_MAXBURST_DEFAULT;
SCTP_BASE_SYSCTL(sctp_fr_max_burst_default) = SCTPCTL_FRMAXBURST_DEFAULT;
@@ -604,9 +601,6 @@ sysctl_sctp_check(SYSCTL_HANDLER_ARGS)
RANGECHK(SCTP_BASE_SYSCTL(sctp_auto_asconf), SCTPCTL_AUTOASCONF_MIN, SCTPCTL_AUTOASCONF_MAX);
RANGECHK(SCTP_BASE_SYSCTL(sctp_ecn_enable), SCTPCTL_ECN_ENABLE_MIN, SCTPCTL_ECN_ENABLE_MAX);
RANGECHK(SCTP_BASE_SYSCTL(sctp_strict_sacks), SCTPCTL_STRICT_SACKS_MIN, SCTPCTL_STRICT_SACKS_MAX);
-#if !defined(SCTP_WITH_NO_CSUM)
- RANGECHK(SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback), SCTPCTL_LOOPBACK_NOCSUM_MIN, SCTPCTL_LOOPBACK_NOCSUM_MAX);
-#endif
RANGECHK(SCTP_BASE_SYSCTL(sctp_peer_chunk_oh), SCTPCTL_PEER_CHKOH_MIN, SCTPCTL_PEER_CHKOH_MAX);
RANGECHK(SCTP_BASE_SYSCTL(sctp_max_burst_default), SCTPCTL_MAXBURST_MIN, SCTPCTL_MAXBURST_MAX);
RANGECHK(SCTP_BASE_SYSCTL(sctp_fr_max_burst_default), SCTPCTL_FRMAXBURST_MIN, SCTPCTL_FRMAXBURST_MAX);
@@ -870,11 +864,6 @@ SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, strict_sacks, CTLTYPE_UINT | CTLFLAG_
&SCTP_BASE_SYSCTL(sctp_strict_sacks), 0, sysctl_sctp_check, "IU",
SCTPCTL_STRICT_SACKS_DESC);
-#if !defined(SCTP_WITH_NO_CSUM)
-SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, loopback_nocsum, CTLTYPE_UINT | CTLFLAG_RW,
- &SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback), 0, sysctl_sctp_check, "IU",
- SCTPCTL_LOOPBACK_NOCSUM_DESC);
-#endif
SYSCTL_VNET_PROC(_net_inet_sctp, OID_AUTO, peer_chkoh, CTLTYPE_UINT | CTLFLAG_RW,
&SCTP_BASE_SYSCTL(sctp_peer_chunk_oh), 0, sysctl_sctp_check, "IU",
diff --git a/sys/netinet/sctp_sysctl.h b/sys/netinet/sctp_sysctl.h
index cbb28269c933..4f5022bd941a 100644
--- a/sys/netinet/sctp_sysctl.h
+++ b/sys/netinet/sctp_sysctl.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -33,8 +33,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_sysctl_h__
-#define __sctp_sysctl_h__
+#ifndef _NETINET_SCTP_SYSCTL_H_
+#define _NETINET_SCTP_SYSCTL_H_
#include <netinet/sctp_os.h>
#include <netinet/sctp_constants.h>
@@ -47,9 +47,6 @@ struct sctp_sysctl {
uint32_t sctp_ecn_enable;
uint32_t sctp_fr_max_burst_default;
uint32_t sctp_strict_sacks;
-#if !defined(SCTP_WITH_NO_CSUM)
- uint32_t sctp_no_csum_on_loopback;
-#endif
uint32_t sctp_peer_chunk_oh;
uint32_t sctp_max_burst_default;
uint32_t sctp_max_chunks_on_queue;
@@ -377,7 +374,7 @@ struct sctp_sysctl {
#define SCTPCTL_ABC_L_VAR_DESC "SCTP ABC max increase per SACK (L)"
#define SCTPCTL_ABC_L_VAR_MIN 0
#define SCTPCTL_ABC_L_VAR_MAX 0xFFFFFFFF
-#define SCTPCTL_ABC_L_VAR_DEFAULT 1
+#define SCTPCTL_ABC_L_VAR_DEFAULT 2
/* max_chained_mbufs: Default max number of small mbufs on a chain */
#define SCTPCTL_MAX_CHAINED_MBUFS_DESC "Default max number of small mbufs on a chain"
diff --git a/sys/netinet/sctp_timer.c b/sys/netinet/sctp_timer.c
index 3f868a79e881..b3336434f224 100644
--- a/sys/netinet/sctp_timer.c
+++ b/sys/netinet/sctp_timer.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,8 +30,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_timer.c,v 1.29 2005/03/06 16:04:18 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/sys/netinet/sctp_timer.h b/sys/netinet/sctp_timer.h
index 6f5b35aca3e9..fd9df804f137 100644
--- a/sys/netinet/sctp_timer.h
+++ b/sys/netinet/sctp_timer.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,12 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_timer.h,v 1.6 2005/03/06 16:04:18 itojun Exp $ */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_timer_h__
-#define __sctp_timer_h__
+#ifndef _NETINET_SCTP_TIMER_H_
+#define _NETINET_SCTP_TIMER_H_
#if defined(_KERNEL) || defined(__Userspace__)
diff --git a/sys/netinet/sctp_uio.h b/sys/netinet/sctp_uio.h
index 5305f5f0136c..95b89785431b 100644
--- a/sys/netinet/sctp_uio.h
+++ b/sys/netinet/sctp_uio.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,12 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_uio.h,v 1.11 2005/03/06 16:04:18 itojun Exp $ */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctp_uio_h__
-#define __sctp_uio_h__
+#ifndef _NETINET_SCTP_UIO_H_
+#define _NETINET_SCTP_UIO_H_
#if ! defined(_KERNEL)
@@ -524,10 +523,10 @@ union sctp_notification {
struct sctp_pdapi_event sn_pdapi_event;
struct sctp_authkey_event sn_auth_event;
struct sctp_sender_dry_event sn_sender_dry_event;
+ struct sctp_send_failed_event sn_send_failed_event;
struct sctp_stream_reset_event sn_strreset_event;
struct sctp_assoc_reset_event sn_assocreset_event;
struct sctp_stream_change_event sn_strchange_event;
-
};
/* notification types */
diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c
index 9193bd0fc5d7..e690ed68eb21 100644
--- a/sys/netinet/sctp_usrreq.c
+++ b/sys/netinet/sctp_usrreq.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,10 +30,9 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_usrreq.c,v 1.48 2005/03/07 23:26:08 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+
#include <netinet/sctp_os.h>
#include <sys/proc.h>
#include <netinet/sctp_pcb.h>
diff --git a/sys/netinet/sctp_var.h b/sys/netinet/sctp_var.h
index 8108e79b31ef..3862b90b5b7a 100644
--- a/sys/netinet/sctp_var.h
+++ b/sys/netinet/sctp_var.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,8 +30,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp_var.h,v 1.24 2005/03/06 16:04:19 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c
index 9eed40975ea8..d6926709c019 100644
--- a/sys/netinet/sctputil.c
+++ b/sys/netinet/sctputil.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,8 +30,6 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctputil.c,v 1.37 2005/03/07 23:26:09 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/sys/netinet/sctputil.h b/sys/netinet/sctputil.h
index f968aa394442..851b700c1305 100644
--- a/sys/netinet/sctputil.h
+++ b/sys/netinet/sctputil.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -30,14 +30,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-
-/* $KAME: sctputil.h,v 1.15 2005/03/06 16:04:19 itojun Exp $ */
-
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#ifndef __sctputil_h__
-#define __sctputil_h__
+#ifndef _NETINET_SCTP_UTIL_H_
+#define _NETINET_SCTP_UTIL_H_
#if defined(_KERNEL) || defined(__Userspace__)
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index 7c8310f280b8..292dd6b8e532 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -577,13 +577,31 @@ tcp_input(struct mbuf *m, int off0)
#ifdef INET6
if (isipv6) {
/* IP6_EXTHDR_CHECK() is already done at tcp6_input(). */
+
+ if (m->m_len < (sizeof(*ip6) + sizeof(*th))) {
+ m = m_pullup(m, sizeof(*ip6) + sizeof(*th));
+ if (m == NULL) {
+ TCPSTAT_INC(tcps_rcvshort);
+ return;
+ }
+ }
+
ip6 = mtod(m, struct ip6_hdr *);
+ th = (struct tcphdr *)((caddr_t)ip6 + off0);
tlen = sizeof(*ip6) + ntohs(ip6->ip6_plen) - off0;
- if (in6_cksum(m, IPPROTO_TCP, off0, tlen)) {
+ if (m->m_pkthdr.csum_flags & CSUM_DATA_VALID_IPV6) {
+ if (m->m_pkthdr.csum_flags & CSUM_PSEUDO_HDR)
+ th->th_sum = m->m_pkthdr.csum_data;
+ else
+ th->th_sum = in6_cksum_pseudo(ip6, tlen,
+ IPPROTO_TCP, m->m_pkthdr.csum_data);
+ th->th_sum ^= 0xffff;
+ } else
+ th->th_sum = in6_cksum(m, IPPROTO_TCP, off0, tlen);
+ if (th->th_sum) {
TCPSTAT_INC(tcps_rcvbadsum);
goto drop;
}
- th = (struct tcphdr *)((caddr_t)ip6 + off0);
/*
* Be proactive about unspecified IPv6 address in source.
@@ -3542,7 +3560,6 @@ tcp_mssopt(struct in_conninfo *inc)
if (inc->inc_flags & INC_ISIPV6) {
mss = V_tcp_v6mssdflt;
maxmtu = tcp_maxmtu6(inc, NULL);
- thcmtu = tcp_hc_getmtu(inc); /* IPv4 and IPv6 */
min_protoh = sizeof(struct ip6_hdr) + sizeof(struct tcphdr);
}
#endif
@@ -3553,10 +3570,13 @@ tcp_mssopt(struct in_conninfo *inc)
{
mss = V_tcp_mssdflt;
maxmtu = tcp_maxmtu(inc, NULL);
- thcmtu = tcp_hc_getmtu(inc); /* IPv4 and IPv6 */
min_protoh = sizeof(struct tcpiphdr);
}
#endif
+#if defined(INET6) || defined(INET)
+ thcmtu = tcp_hc_getmtu(inc); /* IPv4 and IPv6 */
+#endif
+
if (maxmtu && thcmtu)
mss = min(maxmtu, thcmtu) - min_protoh;
else if (maxmtu || thcmtu)
diff --git a/sys/netinet/tcp_lro.c b/sys/netinet/tcp_lro.c
index 6569eda67a4b..3a5878d2be35 100644
--- a/sys/netinet/tcp_lro.c
+++ b/sys/netinet/tcp_lro.c
@@ -1,397 +1,604 @@
-/******************************************************************************
-
-Copyright (c) 2007, Myricom Inc.
-Copyright (c) 2008, 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:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Neither the name of the Myricom Inc, nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
- 3. 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.
+/*-
+ * Copyright (c) 2007, Myricom Inc.
+ * Copyright (c) 2008, Intel Corporation.
+ * Copyright (c) 2012 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * Portions of this software were developed by Bjoern Zeeb
+ * 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.
+ */
-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.
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
-$FreeBSD$
-***************************************************************************/
+#include "opt_inet.h"
+#include "opt_inet6.h"
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/endian.h>
#include <sys/mbuf.h>
#include <sys/kernel.h>
#include <sys/socket.h>
#include <net/if.h>
+#include <net/if_var.h>
#include <net/ethernet.h>
-#include <net/if_media.h>
#include <netinet/in_systm.h>
#include <netinet/in.h>
+#include <netinet/ip6.h>
#include <netinet/ip.h>
+#include <netinet/ip_var.h>
#include <netinet/tcp.h>
#include <netinet/tcp_lro.h>
-#include <machine/bus.h>
+#include <netinet6/ip6_var.h>
+
#include <machine/in_cksum.h>
+#ifndef LRO_ENTRIES
+#define LRO_ENTRIES 8 /* # of LRO entries per RX queue. */
+#endif
-static uint16_t do_csum_data(uint16_t *raw, int len)
-{
- uint32_t csum;
- csum = 0;
- while (len > 0) {
- csum += *raw;
- raw++;
- csum += *raw;
- raw++;
- len -= 4;
- }
- csum = (csum >> 16) + (csum & 0xffff);
- csum = (csum >> 16) + (csum & 0xffff);
- return (uint16_t)csum;
-}
+#define TCP_LRO_UPDATE_CSUM 1
+#ifndef TCP_LRO_UPDATE_CSUM
+#define TCP_LRO_INVALID_CSUM 0x0000
+#endif
-/*
- * Allocate and init the LRO data structures
- */
int
-tcp_lro_init(struct lro_ctrl *cntl)
+tcp_lro_init(struct lro_ctrl *lc)
{
- struct lro_entry *lro;
- int i, error = 0;
-
- SLIST_INIT(&cntl->lro_free);
- SLIST_INIT(&cntl->lro_active);
+ struct lro_entry *le;
+ int error, i;
- cntl->lro_bad_csum = 0;
- cntl->lro_queued = 0;
- cntl->lro_flushed = 0;
+ lc->lro_bad_csum = 0;
+ lc->lro_queued = 0;
+ lc->lro_flushed = 0;
+ lc->lro_cnt = 0;
+ SLIST_INIT(&lc->lro_free);
+ SLIST_INIT(&lc->lro_active);
+ error = 0;
for (i = 0; i < LRO_ENTRIES; i++) {
- lro = (struct lro_entry *) malloc(sizeof (struct lro_entry),
- M_DEVBUF, M_NOWAIT | M_ZERO);
- if (lro == NULL) {
+ le = (struct lro_entry *)malloc(sizeof(*le), M_DEVBUF,
+ M_NOWAIT | M_ZERO);
+ if (le == NULL) {
if (i == 0)
error = ENOMEM;
break;
}
- cntl->lro_cnt = i;
- SLIST_INSERT_HEAD(&cntl->lro_free, lro, next);
+ lc->lro_cnt = i + 1;
+ SLIST_INSERT_HEAD(&lc->lro_free, le, next);
}
return (error);
}
void
-tcp_lro_free(struct lro_ctrl *cntl)
+tcp_lro_free(struct lro_ctrl *lc)
{
- struct lro_entry *entry;
+ struct lro_entry *le;
- while (!SLIST_EMPTY(&cntl->lro_free)) {
- entry = SLIST_FIRST(&cntl->lro_free);
- SLIST_REMOVE_HEAD(&cntl->lro_free, next);
- free(entry, M_DEVBUF);
+ while (!SLIST_EMPTY(&lc->lro_free)) {
+ le = SLIST_FIRST(&lc->lro_free);
+ SLIST_REMOVE_HEAD(&lc->lro_free, next);
+ free(le, M_DEVBUF);
}
}
+#ifdef TCP_LRO_UPDATE_CSUM
+static uint16_t
+tcp_lro_csum_th(struct tcphdr *th)
+{
+ uint32_t ch;
+ uint16_t *p, l;
+
+ ch = th->th_sum = 0x0000;
+ l = th->th_off;
+ p = (uint16_t *)th;
+ while (l > 0) {
+ ch += *p;
+ p++;
+ ch += *p;
+ p++;
+ l--;
+ }
+ while (ch > 0xffff)
+ ch = (ch >> 16) + (ch & 0xffff);
+
+ return (ch & 0xffff);
+}
+
+static uint16_t
+tcp_lro_rx_csum_fixup(struct lro_entry *le, void *l3hdr, struct tcphdr *th,
+ uint16_t tcp_data_len, uint16_t csum)
+{
+ uint32_t c;
+ uint16_t cs;
+
+ c = csum;
+
+ /* Remove length from checksum. */
+ switch (le->eh_type) {
+#ifdef INET6
+ case ETHERTYPE_IPV6:
+ {
+ struct ip6_hdr *ip6;
+
+ ip6 = (struct ip6_hdr *)l3hdr;
+ if (le->append_cnt == 0)
+ cs = ip6->ip6_plen;
+ else {
+ uint32_t cx;
+
+ cx = ntohs(ip6->ip6_plen);
+ cs = in6_cksum_pseudo(ip6, cx, ip6->ip6_nxt, 0);
+ }
+ break;
+ }
+#endif
+#ifdef INET
+ case ETHERTYPE_IP:
+ {
+ struct ip *ip4;
+
+ ip4 = (struct ip *)l3hdr;
+ if (le->append_cnt == 0)
+ cs = ip4->ip_len;
+ else {
+ cs = in_addword(ntohs(ip4->ip_len) - sizeof(*ip4),
+ IPPROTO_TCP);
+ cs = in_pseudo(ip4->ip_src.s_addr, ip4->ip_dst.s_addr,
+ htons(cs));
+ }
+ break;
+ }
+#endif
+ default:
+ cs = 0; /* Keep compiler happy. */
+ }
+
+ cs = ~cs;
+ c += cs;
+
+ /* Remove TCP header csum. */
+ cs = ~tcp_lro_csum_th(th);
+ c += cs;
+ while (c > 0xffff)
+ c = (c >> 16) + (c & 0xffff);
+
+ return (c & 0xffff);
+}
+#endif
+
void
-tcp_lro_flush(struct lro_ctrl *cntl, struct lro_entry *lro)
+tcp_lro_flush(struct lro_ctrl *lc, struct lro_entry *le)
{
- struct ifnet *ifp;
- struct ip *ip;
- struct tcphdr *tcp;
- uint32_t *ts_ptr;
- uint32_t tcplen, tcp_csum;
-
-
- if (lro->append_cnt) {
- /* incorporate the new len into the ip header and
- * re-calculate the checksum */
- ip = lro->ip;
- ip->ip_len = htons(lro->len - ETHER_HDR_LEN);
- ip->ip_sum = 0;
- ip->ip_sum = 0xffff ^
- do_csum_data((uint16_t*)ip,
- sizeof (*ip));
-
- lro->m_head->m_pkthdr.csum_flags = CSUM_IP_CHECKED |
- CSUM_IP_VALID | CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
- lro->m_head->m_pkthdr.csum_data = 0xffff;
- lro->m_head->m_pkthdr.len = lro->len;
-
- /* incorporate the latest ack into the tcp header */
- tcp = (struct tcphdr *) (ip + 1);
- tcp->th_ack = lro->ack_seq;
- tcp->th_win = lro->window;
- /* incorporate latest timestamp into the tcp header */
- if (lro->timestamp) {
- ts_ptr = (uint32_t *)(tcp + 1);
- ts_ptr[1] = htonl(lro->tsval);
- ts_ptr[2] = lro->tsecr;
+
+ if (le->append_cnt > 0) {
+ struct tcphdr *th;
+ uint16_t p_len;
+
+ p_len = htons(le->p_len);
+ switch (le->eh_type) {
+#ifdef INET6
+ case ETHERTYPE_IPV6:
+ {
+ struct ip6_hdr *ip6;
+
+ ip6 = le->le_ip6;
+ ip6->ip6_plen = p_len;
+ th = (struct tcphdr *)(ip6 + 1);
+ le->m_head->m_pkthdr.csum_flags = CSUM_DATA_VALID |
+ CSUM_PSEUDO_HDR;
+ le->p_len += ETHER_HDR_LEN + sizeof(*ip6);
+ break;
}
- /*
- * update checksum in tcp header by re-calculating the
- * tcp pseudoheader checksum, and adding it to the checksum
- * of the tcp payload data
- */
- tcp->th_sum = 0;
- tcplen = lro->len - sizeof(*ip) - ETHER_HDR_LEN;
- tcp_csum = lro->data_csum;
- tcp_csum += in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr,
- htons(tcplen + IPPROTO_TCP));
- tcp_csum += do_csum_data((uint16_t*)tcp,
- tcp->th_off << 2);
- tcp_csum = (tcp_csum & 0xffff) + (tcp_csum >> 16);
- tcp_csum = (tcp_csum & 0xffff) + (tcp_csum >> 16);
- tcp->th_sum = 0xffff ^ tcp_csum;
+#endif
+#ifdef INET
+ case ETHERTYPE_IP:
+ {
+ struct ip *ip4;
+#ifdef TCP_LRO_UPDATE_CSUM
+ uint32_t cl;
+ uint16_t c;
+#endif
+
+ ip4 = le->le_ip4;
+#ifdef TCP_LRO_UPDATE_CSUM
+ /* Fix IP header checksum for new length. */
+ c = ~ip4->ip_sum;
+ cl = c;
+ c = ~ip4->ip_len;
+ cl += c + p_len;
+ while (cl > 0xffff)
+ cl = (cl >> 16) + (cl & 0xffff);
+ c = cl;
+ ip4->ip_sum = ~c;
+#else
+ ip4->ip_sum = TCP_LRO_INVALID_CSUM;
+#endif
+ ip4->ip_len = p_len;
+ th = (struct tcphdr *)(ip4 + 1);
+ le->m_head->m_pkthdr.csum_flags = CSUM_DATA_VALID |
+ CSUM_PSEUDO_HDR | CSUM_IP_CHECKED | CSUM_IP_VALID;
+ le->p_len += ETHER_HDR_LEN;
+ break;
+ }
+#endif
+ default:
+ th = NULL; /* Keep compiler happy. */
+ }
+ le->m_head->m_pkthdr.csum_data = 0xffff;
+ le->m_head->m_pkthdr.len = le->p_len;
+
+ /* Incorporate the latest ACK into the TCP header. */
+ th->th_ack = le->ack_seq;
+ th->th_win = le->window;
+ /* Incorporate latest timestamp into the TCP header. */
+ if (le->timestamp != 0) {
+ uint32_t *ts_ptr;
+
+ ts_ptr = (uint32_t *)(th + 1);
+ ts_ptr[1] = htonl(le->tsval);
+ ts_ptr[2] = le->tsecr;
+ }
+#ifdef TCP_LRO_UPDATE_CSUM
+ /* Update the TCP header checksum. */
+ le->ulp_csum += p_len;
+ le->ulp_csum += tcp_lro_csum_th(th);
+ while (le->ulp_csum > 0xffff)
+ le->ulp_csum = (le->ulp_csum >> 16) +
+ (le->ulp_csum & 0xffff);
+ th->th_sum = (le->ulp_csum & 0xffff);
+ th->th_sum = ~th->th_sum;
+#else
+ th->th_sum = TCP_LRO_INVALID_CSUM;
+#endif
}
- ifp = cntl->ifp;
- (*ifp->if_input)(cntl->ifp, lro->m_head);
- cntl->lro_queued += lro->append_cnt + 1;
- cntl->lro_flushed++;
- lro->m_head = NULL;
- lro->timestamp = 0;
- lro->append_cnt = 0;
- SLIST_INSERT_HEAD(&cntl->lro_free, lro, next);
+
+ (*lc->ifp->if_input)(lc->ifp, le->m_head);
+ lc->lro_queued += le->append_cnt + 1;
+ lc->lro_flushed++;
+ bzero(le, sizeof(*le));
+ SLIST_INSERT_HEAD(&lc->lro_free, le, next);
}
-int
-tcp_lro_rx(struct lro_ctrl *cntl, struct mbuf *m_head, uint32_t csum)
+#ifdef INET6
+static int
+tcp_lro_rx_ipv6(struct lro_ctrl *lc, struct mbuf *m, struct ip6_hdr *ip6,
+ struct tcphdr **th)
{
- struct ether_header *eh;
- struct ip *ip;
- struct tcphdr *tcp;
- uint32_t *ts_ptr;
- struct mbuf *m_nxt, *m_tail;
- struct lro_entry *lro;
- int hlen, ip_len, tcp_hdr_len, tcp_data_len, tot_len;
- int opt_bytes, trim, csum_flags;
- uint32_t seq, tmp_csum, device_mtu;
-
-
- eh = mtod(m_head, struct ether_header *);
- if (eh->ether_type != htons(ETHERTYPE_IP))
- return 1;
- ip = (struct ip *) (eh + 1);
- if (ip->ip_p != IPPROTO_TCP)
- return 1;
-
- /* ensure there are no options */
- if ((ip->ip_hl << 2) != sizeof (*ip))
- return -1;
-
- /* .. and the packet is not fragmented */
- if (ip->ip_off & htons(IP_MF|IP_OFFMASK))
- return -1;
-
- /* verify that the IP header checksum is correct */
- csum_flags = m_head->m_pkthdr.csum_flags;
+
+ /* XXX-BZ we should check the flow-label. */
+
+ /* XXX-BZ We do not yet support ext. hdrs. */
+ if (ip6->ip6_nxt != IPPROTO_TCP)
+ return (TCP_LRO_NOT_SUPPORTED);
+
+ /* Find the TCP header. */
+ *th = (struct tcphdr *)(ip6 + 1);
+
+ return (0);
+}
+#endif
+
+#ifdef INET
+static int
+tcp_lro_rx_ipv4(struct lro_ctrl *lc, struct mbuf *m, struct ip *ip4,
+ struct tcphdr **th)
+{
+ int csum_flags;
+ uint16_t csum;
+
+ if (ip4->ip_p != IPPROTO_TCP)
+ return (TCP_LRO_NOT_SUPPORTED);
+
+ /* Ensure there are no options. */
+ if ((ip4->ip_hl << 2) != sizeof (*ip4))
+ return (TCP_LRO_CANNOT);
+
+ /* .. and the packet is not fragmented. */
+ if (ip4->ip_off & htons(IP_MF|IP_OFFMASK))
+ return (TCP_LRO_CANNOT);
+
+ /* Legacy IP has a header checksum that needs to be correct. */
+ csum_flags = m->m_pkthdr.csum_flags;
if (csum_flags & CSUM_IP_CHECKED) {
if (__predict_false((csum_flags & CSUM_IP_VALID) == 0)) {
- cntl->lro_bad_csum++;
- return -1;
+ lc->lro_bad_csum++;
+ return (TCP_LRO_CANNOT);
}
} else {
- tmp_csum = do_csum_data((uint16_t *)ip, sizeof (*ip));
- if (__predict_false((tmp_csum ^ 0xffff) != 0)) {
- cntl->lro_bad_csum++;
- return -1;
+ csum = in_cksum_hdr(ip4);
+ if (__predict_false((csum ^ 0xffff) != 0)) {
+ lc->lro_bad_csum++;
+ return (TCP_LRO_CANNOT);
}
}
-
- /* find the TCP header */
- tcp = (struct tcphdr *) (ip + 1);
-
- /* Get the TCP checksum if we dont have it */
- if (!csum)
- csum = tcp->th_sum;
-
- /* ensure no bits set besides ack or psh */
- if ((tcp->th_flags & ~(TH_ACK | TH_PUSH)) != 0)
- return -1;
-
- /* check for timestamps. Since the only option we handle are
- timestamps, we only have to handle the simple case of
- aligned timestamps */
-
- opt_bytes = (tcp->th_off << 2) - sizeof (*tcp);
- tcp_hdr_len = sizeof (*tcp) + opt_bytes;
- ts_ptr = (uint32_t *)(tcp + 1);
- if (opt_bytes != 0) {
- if (__predict_false(opt_bytes != TCPOLEN_TSTAMP_APPA) ||
- (*ts_ptr != ntohl(TCPOPT_NOP<<24|TCPOPT_NOP<<16|
- TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)))
- return -1;
- }
- ip_len = ntohs(ip->ip_len);
- tcp_data_len = ip_len - (tcp->th_off << 2) - sizeof (*ip);
-
+ /* Find the TCP header (we assured there are no IP options). */
+ *th = (struct tcphdr *)(ip4 + 1);
- /*
- * If frame is padded beyond the end of the IP packet,
- * then we must trim the extra bytes off the end.
- */
- tot_len = m_head->m_pkthdr.len;
- trim = tot_len - (ip_len + ETHER_HDR_LEN);
- if (trim != 0) {
- if (trim < 0) {
- /* truncated packet */
- return -1;
+ return (0);
+}
+#endif
+
+int
+tcp_lro_rx(struct lro_ctrl *lc, struct mbuf *m, uint32_t csum)
+{
+ struct lro_entry *le;
+ struct ether_header *eh;
+#ifdef INET6
+ struct ip6_hdr *ip6 = NULL; /* Keep compiler happy. */
+#endif
+#ifdef INET
+ struct ip *ip4 = NULL; /* Keep compiler happy. */
+#endif
+ struct tcphdr *th;
+ void *l3hdr = NULL; /* Keep compiler happy. */
+ uint32_t *ts_ptr;
+ tcp_seq seq;
+ int error, ip_len, l;
+ uint16_t eh_type, tcp_data_len;
+
+ /* We expect a contiguous header [eh, ip, tcp]. */
+
+ eh = mtod(m, struct ether_header *);
+ eh_type = ntohs(eh->ether_type);
+ switch (eh_type) {
+#ifdef INET6
+ case ETHERTYPE_IPV6:
+ if (V_ip6_forwarding != 0) {
+ /* XXX-BZ stats but changing lro_ctrl is a problem. */
+ return (TCP_LRO_CANNOT);
}
- m_adj(m_head, -trim);
- tot_len = m_head->m_pkthdr.len;
+ l3hdr = ip6 = (struct ip6_hdr *)(eh + 1);
+ error = tcp_lro_rx_ipv6(lc, m, ip6, &th);
+ if (error != 0)
+ return (error);
+ tcp_data_len = ntohs(ip6->ip6_plen);
+ ip_len = sizeof(*ip6) + tcp_data_len;
+ break;
+#endif
+#ifdef INET
+ case ETHERTYPE_IP:
+ if (V_ipforwarding != 0) {
+ /* XXX-BZ stats but changing lro_ctrl is a problem. */
+ return (TCP_LRO_CANNOT);
+ }
+ l3hdr = ip4 = (struct ip *)(eh + 1);
+ error = tcp_lro_rx_ipv4(lc, m, ip4, &th);
+ if (error != 0)
+ return (error);
+ ip_len = ntohs(ip4->ip_len);
+ tcp_data_len = ip_len - sizeof(*ip4);
+ break;
+#endif
+ /* XXX-BZ what happens in case of VLAN(s)? */
+ default:
+ return (TCP_LRO_NOT_SUPPORTED);
}
- m_nxt = m_head;
- m_tail = NULL; /* -Wuninitialized */
- while (m_nxt != NULL) {
- m_tail = m_nxt;
- m_nxt = m_tail->m_next;
+ /*
+ * If the frame is padded beyond the end of the IP packet, then we must
+ * trim the extra bytes off.
+ */
+ l = m->m_pkthdr.len - (ETHER_HDR_LEN + ip_len);
+ if (l != 0) {
+ if (l < 0)
+ /* Truncated packet. */
+ return (TCP_LRO_CANNOT);
+
+ m_adj(m, -l);
}
- hlen = ip_len + ETHER_HDR_LEN - tcp_data_len;
- seq = ntohl(tcp->th_seq);
-
- SLIST_FOREACH(lro, &cntl->lro_active, next) {
- if (lro->source_port == tcp->th_sport &&
- lro->dest_port == tcp->th_dport &&
- lro->source_ip == ip->ip_src.s_addr &&
- lro->dest_ip == ip->ip_dst.s_addr) {
- /* Flush now if appending will result in overflow. */
- if (lro->len > (65535 - tcp_data_len)) {
- SLIST_REMOVE(&cntl->lro_active, lro,
- lro_entry, next);
- tcp_lro_flush(cntl, lro);
- break;
- }
-
- /* Try to append it */
-
- if (__predict_false(seq != lro->next_seq ||
- (tcp_data_len == 0 &&
- lro->ack_seq == tcp->th_ack))) {
- /* out of order packet or dup ack */
- SLIST_REMOVE(&cntl->lro_active, lro,
- lro_entry, next);
- tcp_lro_flush(cntl, lro);
- return -1;
- }
-
- if (opt_bytes) {
- uint32_t tsval = ntohl(*(ts_ptr + 1));
- /* make sure timestamp values are increasing */
- if (__predict_false(lro->tsval > tsval ||
- *(ts_ptr + 2) == 0)) {
- return -1;
- }
- lro->tsval = tsval;
- lro->tsecr = *(ts_ptr + 2);
- }
-
- lro->next_seq += tcp_data_len;
- lro->ack_seq = tcp->th_ack;
- lro->window = tcp->th_win;
- lro->append_cnt++;
- if (tcp_data_len == 0) {
- m_freem(m_head);
- return 0;
- }
- /* subtract off the checksum of the tcp header
- * from the hardware checksum, and add it to the
- * stored tcp data checksum. Byteswap the checksum
- * if the total length so far is odd
- */
- tmp_csum = do_csum_data((uint16_t*)tcp,
- tcp_hdr_len);
- csum = csum + (tmp_csum ^ 0xffff);
- csum = (csum & 0xffff) + (csum >> 16);
- csum = (csum & 0xffff) + (csum >> 16);
- if (lro->len & 0x1) {
- /* Odd number of bytes so far, flip bytes */
- csum = ((csum << 8) | (csum >> 8)) & 0xffff;
- }
- csum = csum + lro->data_csum;
- csum = (csum & 0xffff) + (csum >> 16);
- csum = (csum & 0xffff) + (csum >> 16);
- lro->data_csum = csum;
-
- lro->len += tcp_data_len;
-
- /* adjust mbuf so that m->m_data points to
- the first byte of the payload */
- m_adj(m_head, hlen);
- /* append mbuf chain */
- lro->m_tail->m_next = m_head;
- /* advance the last pointer */
- lro->m_tail = m_tail;
- /* flush packet if required */
- device_mtu = cntl->ifp->if_mtu;
- if (lro->len > (65535 - device_mtu)) {
- SLIST_REMOVE(&cntl->lro_active, lro,
- lro_entry, next);
- tcp_lro_flush(cntl, lro);
- }
- return 0;
+ /*
+ * Check TCP header constraints.
+ */
+ /* Ensure no bits set besides ACK or PSH. */
+ if ((th->th_flags & ~(TH_ACK | TH_PUSH)) != 0)
+ return (TCP_LRO_CANNOT);
+
+ /* XXX-BZ We lose a AKC|PUSH flag concatinating multiple segments. */
+ /* XXX-BZ Ideally we'd flush on PUSH? */
+
+ /*
+ * Check for timestamps.
+ * Since the only option we handle are timestamps, we only have to
+ * handle the simple case of aligned timestamps.
+ */
+ l = (th->th_off << 2);
+ tcp_data_len -= l;
+ l -= sizeof(*th);
+ ts_ptr = (uint32_t *)(th + 1);
+ if (l != 0 && (__predict_false(l != TCPOLEN_TSTAMP_APPA) ||
+ (*ts_ptr != ntohl(TCPOPT_NOP<<24|TCPOPT_NOP<<16|
+ TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP))))
+ return (TCP_LRO_CANNOT);
+
+ /* If the driver did not pass in the checksum, set it now. */
+ if (csum == 0x0000)
+ csum = th->th_sum;
+
+ seq = ntohl(th->th_seq);
+
+ /* Try to find a matching previous segment. */
+ SLIST_FOREACH(le, &lc->lro_active, next) {
+ if (le->eh_type != eh_type)
+ continue;
+ if (le->source_port != th->th_sport ||
+ le->dest_port != th->th_dport)
+ continue;
+ switch (eh_type) {
+#ifdef INET6
+ case ETHERTYPE_IPV6:
+ if (bcmp(&le->source_ip6, &ip6->ip6_src,
+ sizeof(struct in6_addr)) != 0 ||
+ bcmp(&le->dest_ip6, &ip6->ip6_dst,
+ sizeof(struct in6_addr)) != 0)
+ continue;
+ break;
+#endif
+#ifdef INET
+ case ETHERTYPE_IP:
+ if (le->source_ip4 != ip4->ip_src.s_addr ||
+ le->dest_ip4 != ip4->ip_dst.s_addr)
+ continue;
+ break;
+#endif
+ }
+
+ /* Flush now if appending will result in overflow. */
+ if (le->p_len > (65535 - tcp_data_len)) {
+ SLIST_REMOVE(&lc->lro_active, le, lro_entry, next);
+ tcp_lro_flush(lc, le);
+ break;
+ }
+
+ /* Try to append the new segment. */
+ if (__predict_false(seq != le->next_seq ||
+ (tcp_data_len == 0 && le->ack_seq == th->th_ack))) {
+ /* Out of order packet or duplicate ACK. */
+ SLIST_REMOVE(&lc->lro_active, le, lro_entry, next);
+ tcp_lro_flush(lc, le);
+ return (TCP_LRO_CANNOT);
}
+
+ if (l != 0) {
+ uint32_t tsval = ntohl(*(ts_ptr + 1));
+ /* Make sure timestamp values are increasing. */
+ /* XXX-BZ flip and use TSTMP_GEQ macro for this? */
+ if (__predict_false(le->tsval > tsval ||
+ *(ts_ptr + 2) == 0))
+ return (TCP_LRO_CANNOT);
+ le->tsval = tsval;
+ le->tsecr = *(ts_ptr + 2);
+ }
+
+ le->next_seq += tcp_data_len;
+ le->ack_seq = th->th_ack;
+ le->window = th->th_win;
+ le->append_cnt++;
+
+#ifdef TCP_LRO_UPDATE_CSUM
+ le->ulp_csum += tcp_lro_rx_csum_fixup(le, l3hdr, th,
+ tcp_data_len, ~csum);
+#endif
+
+ if (tcp_data_len == 0) {
+ m_freem(m);
+ return (0);
+ }
+
+ le->p_len += tcp_data_len;
+
+ /*
+ * Adjust the mbuf so that m_data points to the first byte of
+ * the ULP payload. Adjust the mbuf to avoid complications and
+ * append new segment to existing mbuf chain.
+ */
+ m_adj(m, m->m_pkthdr.len - tcp_data_len);
+ m->m_flags &= ~M_PKTHDR;
+
+ le->m_tail->m_next = m;
+ le->m_tail = m_last(m);
+
+ /*
+ * If a possible next full length packet would cause an
+ * overflow, pro-actively flush now.
+ */
+ if (le->p_len > (65535 - lc->ifp->if_mtu)) {
+ SLIST_REMOVE(&lc->lro_active, le, lro_entry, next);
+ tcp_lro_flush(lc, le);
+ }
+
+ return (0);
}
- if (SLIST_EMPTY(&cntl->lro_free))
- return -1;
-
- /* start a new chain */
- lro = SLIST_FIRST(&cntl->lro_free);
- SLIST_REMOVE_HEAD(&cntl->lro_free, next);
- SLIST_INSERT_HEAD(&cntl->lro_active, lro, next);
- lro->source_port = tcp->th_sport;
- lro->dest_port = tcp->th_dport;
- lro->source_ip = ip->ip_src.s_addr;
- lro->dest_ip = ip->ip_dst.s_addr;
- lro->next_seq = seq + tcp_data_len;
- lro->mss = tcp_data_len;
- lro->ack_seq = tcp->th_ack;
- lro->window = tcp->th_win;
-
- /* save the checksum of just the TCP payload by
- * subtracting off the checksum of the TCP header from
- * the entire hardware checksum
- * Since IP header checksum is correct, checksum over
- * the IP header is -0. Substracting -0 is unnecessary.
- */
- tmp_csum = do_csum_data((uint16_t*)tcp, tcp_hdr_len);
- csum = csum + (tmp_csum ^ 0xffff);
- csum = (csum & 0xffff) + (csum >> 16);
- csum = (csum & 0xffff) + (csum >> 16);
- lro->data_csum = csum;
-
- lro->ip = ip;
- /* record timestamp if it is present */
- if (opt_bytes) {
- lro->timestamp = 1;
- lro->tsval = ntohl(*(ts_ptr + 1));
- lro->tsecr = *(ts_ptr + 2);
+ /* Try to find an empty slot. */
+ if (SLIST_EMPTY(&lc->lro_free))
+ return (TCP_LRO_CANNOT);
+
+ /* Start a new segment chain. */
+ le = SLIST_FIRST(&lc->lro_free);
+ SLIST_REMOVE_HEAD(&lc->lro_free, next);
+ SLIST_INSERT_HEAD(&lc->lro_active, le, next);
+
+ /* Start filling in details. */
+ switch (eh_type) {
+#ifdef INET6
+ case ETHERTYPE_IPV6:
+ le->le_ip6 = ip6;
+ le->source_ip6 = ip6->ip6_src;
+ le->dest_ip6 = ip6->ip6_dst;
+ le->eh_type = eh_type;
+ le->p_len = m->m_pkthdr.len - ETHER_HDR_LEN - sizeof(*ip6);
+ break;
+#endif
+#ifdef INET
+ case ETHERTYPE_IP:
+ le->le_ip4 = ip4;
+ le->source_ip4 = ip4->ip_src.s_addr;
+ le->dest_ip4 = ip4->ip_dst.s_addr;
+ le->eh_type = eh_type;
+ le->p_len = m->m_pkthdr.len - ETHER_HDR_LEN;
+ break;
+#endif
+ }
+ le->source_port = th->th_sport;
+ le->dest_port = th->th_dport;
+
+ le->next_seq = seq + tcp_data_len;
+ le->ack_seq = th->th_ack;
+ le->window = th->th_win;
+ if (l != 0) {
+ le->timestamp = 1;
+ le->tsval = ntohl(*(ts_ptr + 1));
+ le->tsecr = *(ts_ptr + 2);
}
- lro->len = tot_len;
- lro->m_head = m_head;
- lro->m_tail = m_tail;
- return 0;
+
+#ifdef TCP_LRO_UPDATE_CSUM
+ /*
+ * Do not touch the csum of the first packet. However save the
+ * "adjusted" checksum of just the source and destination addresses,
+ * the next header and the TCP payload. The length and TCP header
+ * parts may change, so we remove those from the saved checksum and
+ * re-add with final values on tcp_lro_flush() if needed.
+ */
+ KASSERT(le->ulp_csum == 0, ("%s: le=%p le->ulp_csum=0x%04x\n",
+ __func__, le, le->ulp_csum));
+
+ le->ulp_csum = tcp_lro_rx_csum_fixup(le, l3hdr, th, tcp_data_len,
+ ~csum);
+ th->th_sum = csum; /* Restore checksum on first packet. */
+#endif
+
+ le->m_head = m;
+ le->m_tail = m_last(m);
+
+ return (0);
}
+
+/* end */
diff --git a/sys/netinet/tcp_lro.h b/sys/netinet/tcp_lro.h
index a5e8f9d25a18..b3a501798aa5 100644
--- a/sys/netinet/tcp_lro.h
+++ b/sys/netinet/tcp_lro.h
@@ -1,67 +1,75 @@
-/*******************************************************************************
+/*-
+ * Copyright (c) 2006, Myricom Inc.
+ * Copyright (c) 2008, 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:
+ * 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$
+ */
-Copyright (c) 2006, Myricom Inc.
-Copyright (c) 2008, 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:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Neither the name of the Myricom Inc, nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
- 2. 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 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$
-
-***************************************************************************/
#ifndef _TCP_LRO_H_
#define _TCP_LRO_H_
-struct lro_entry;
struct lro_entry
{
- SLIST_ENTRY(lro_entry) next;
- struct mbuf *m_head;
- struct mbuf *m_tail;
- int timestamp;
- struct ip *ip;
- uint32_t tsval;
- uint32_t tsecr;
- uint32_t source_ip;
- uint32_t dest_ip;
- uint32_t next_seq;
- uint32_t ack_seq;
- uint32_t len;
- uint32_t data_csum;
- uint16_t window;
- uint16_t source_port;
- uint16_t dest_port;
- uint16_t append_cnt;
- uint16_t mss;
-
+ SLIST_ENTRY(lro_entry) next;
+ struct mbuf *m_head;
+ struct mbuf *m_tail;
+ union {
+ struct ip *ip4;
+ struct ip6_hdr *ip6;
+ } leip;
+ union {
+ in_addr_t s_ip4;
+ struct in6_addr s_ip6;
+ } lesource;
+ union {
+ in_addr_t d_ip4;
+ struct in6_addr d_ip6;
+ } ledest;
+ uint16_t source_port;
+ uint16_t dest_port;
+ uint16_t eh_type; /* EthernetHeader type. */
+ uint16_t append_cnt;
+ uint32_t p_len; /* IP header payload length. */
+ uint32_t ulp_csum; /* TCP, etc. checksum. */
+ uint32_t next_seq; /* tcp_seq */
+ uint32_t ack_seq; /* tcp_seq */
+ uint32_t tsval;
+ uint32_t tsecr;
+ uint16_t window;
+ uint16_t timestamp; /* flag, not a TCP hdr field. */
};
SLIST_HEAD(lro_head, lro_entry);
+#define le_ip4 leip.ip4
+#define le_ip6 leip.ip6
+#define source_ip4 lesource.s_ip4
+#define dest_ip4 ledest.d_ip4
+#define source_ip6 lesource.s_ip6
+#define dest_ip6 ledest.d_ip6
+
+/* NB: This is part of driver structs. */
struct lro_ctrl {
struct ifnet *ifp;
int lro_queued;
@@ -73,13 +81,12 @@ struct lro_ctrl {
struct lro_head lro_free;
};
-
int tcp_lro_init(struct lro_ctrl *);
void tcp_lro_free(struct lro_ctrl *);
void tcp_lro_flush(struct lro_ctrl *, struct lro_entry *);
int tcp_lro_rx(struct lro_ctrl *, struct mbuf *, uint32_t);
-/* Number of LRO entries - these are per rx queue */
-#define LRO_ENTRIES 8
+#define TCP_LRO_CANNOT -1
+#define TCP_LRO_NOT_SUPPORTED 1
#endif /* _TCP_LRO_H_ */
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index 645fb37a9971..8e0f36912237 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -1047,19 +1047,24 @@ send:
* checksum extended header and data.
*/
m->m_pkthdr.len = hdrlen + len; /* in6_cksum() need this */
+ m->m_pkthdr.csum_data = offsetof(struct tcphdr, th_sum);
#ifdef INET6
- if (isipv6)
+ if (isipv6) {
/*
* ip6_plen is not need to be filled now, and will be filled
* in ip6_output.
*/
- th->th_sum = in6_cksum(m, IPPROTO_TCP, sizeof(struct ip6_hdr),
- sizeof(struct tcphdr) + optlen + len);
+ m->m_pkthdr.csum_flags = CSUM_TCP_IPV6;
+ th->th_sum = in6_cksum_pseudo(ip6, sizeof(struct tcphdr) +
+ optlen + len, IPPROTO_TCP, 0);
+ }
+#endif
+#if defined(INET6) && defined(INET)
else
-#endif /* INET6 */
+#endif
+#ifdef INET
{
m->m_pkthdr.csum_flags = CSUM_TCP;
- m->m_pkthdr.csum_data = offsetof(struct tcphdr, th_sum);
th->th_sum = in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr,
htons(sizeof(struct tcphdr) + IPPROTO_TCP + len + optlen));
@@ -1067,6 +1072,7 @@ send:
KASSERT(ip->ip_v == IPVERSION,
("%s: IP version incorrect: %d", __func__, ip->ip_v));
}
+#endif
/*
* Enable TSO and specify the size of the segments.
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index 561749a27084..05da82e3c0bf 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -573,8 +573,7 @@ tcp_respond(struct tcpcb *tp, void *ipgen, struct tcphdr *th, struct mbuf *m,
ip6->ip6_flow = 0;
ip6->ip6_vfc = IPV6_VERSION;
ip6->ip6_nxt = IPPROTO_TCP;
- ip6->ip6_plen = htons((u_short)(sizeof (struct tcphdr) +
- tlen));
+ ip6->ip6_plen = 0; /* Set in ip6_output(). */
tlen += sizeof (struct ip6_hdr) + sizeof (struct tcphdr);
}
#endif
@@ -619,12 +618,13 @@ tcp_respond(struct tcpcb *tp, void *ipgen, struct tcphdr *th, struct mbuf *m,
else
nth->th_win = htons((u_short)win);
nth->th_urp = 0;
+
+ m->m_pkthdr.csum_data = offsetof(struct tcphdr, th_sum);
#ifdef INET6
if (isipv6) {
- nth->th_sum = 0;
- nth->th_sum = in6_cksum(m, IPPROTO_TCP,
- sizeof(struct ip6_hdr),
- tlen - sizeof(struct ip6_hdr));
+ m->m_pkthdr.csum_flags = CSUM_TCP_IPV6;
+ nth->th_sum = in6_cksum_pseudo(ip6,
+ tlen - sizeof(struct ip6_hdr), IPPROTO_TCP, 0);
ip6->ip6_hlim = in6_selecthlim(tp != NULL ? tp->t_inpcb :
NULL, NULL);
}
@@ -634,10 +634,9 @@ tcp_respond(struct tcpcb *tp, void *ipgen, struct tcphdr *th, struct mbuf *m,
#endif
#ifdef INET
{
+ m->m_pkthdr.csum_flags = CSUM_TCP;
nth->th_sum = in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr,
htons((u_short)(tlen - sizeof(struct ip) + ip->ip_p)));
- m->m_pkthdr.csum_flags = CSUM_TCP;
- m->m_pkthdr.csum_data = offsetof(struct tcphdr, th_sum);
}
#endif /* INET */
#ifdef TCPDEBUG
diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c
index 8df7ce0d0825..21a72f4fea89 100644
--- a/sys/netinet/tcp_syncache.c
+++ b/sys/netinet/tcp_syncache.c
@@ -1473,11 +1473,12 @@ syncache_respond(struct syncache *sc)
optlen = 0;
M_SETFIB(m, sc->sc_inc.inc_fibnum);
+ m->m_pkthdr.csum_data = offsetof(struct tcphdr, th_sum);
#ifdef INET6
if (sc->sc_inc.inc_flags & INC_ISIPV6) {
- th->th_sum = 0;
- th->th_sum = in6_cksum(m, IPPROTO_TCP, hlen,
- tlen + optlen - hlen);
+ m->m_pkthdr.csum_flags = CSUM_TCP_IPV6;
+ th->th_sum = in6_cksum_pseudo(ip6, tlen + optlen - hlen,
+ IPPROTO_TCP, 0);
ip6->ip6_hlim = in6_selecthlim(NULL, NULL);
error = ip6_output(m, NULL, NULL, 0, NULL, NULL, NULL);
}
@@ -1487,10 +1488,9 @@ syncache_respond(struct syncache *sc)
#endif
#ifdef INET
{
+ m->m_pkthdr.csum_flags = CSUM_TCP;
th->th_sum = in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr,
htons(tlen + optlen - hlen + IPPROTO_TCP));
- m->m_pkthdr.csum_flags = CSUM_TCP;
- m->m_pkthdr.csum_data = offsetof(struct tcphdr, th_sum);
error = ip_output(m, sc->sc_ipopts, NULL, 0, NULL, NULL);
}
#endif
diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c
index 894e926e9e53..397aaae9733c 100644
--- a/sys/netinet/tcp_timewait.c
+++ b/sys/netinet/tcp_timewait.c
@@ -574,10 +574,12 @@ tcp_twrespond(struct tcptw *tw, int flags)
th->th_flags = flags;
th->th_win = htons(tw->last_win);
+ m->m_pkthdr.csum_data = offsetof(struct tcphdr, th_sum);
#ifdef INET6
if (isipv6) {
- th->th_sum = in6_cksum(m, IPPROTO_TCP, sizeof(struct ip6_hdr),
- sizeof(struct tcphdr) + optlen);
+ m->m_pkthdr.csum_flags = CSUM_TCP_IPV6;
+ th->th_sum = in6_cksum_pseudo(ip6,
+ sizeof(struct tcphdr) + optlen, IPPROTO_TCP, 0);
ip6->ip6_hlim = in6_selecthlim(inp, NULL);
error = ip6_output(m, inp->in6p_outputopts, NULL,
(tw->tw_so_options & SO_DONTROUTE), NULL, NULL, inp);
@@ -588,10 +590,9 @@ tcp_twrespond(struct tcptw *tw, int flags)
#endif
#ifdef INET
{
+ m->m_pkthdr.csum_flags = CSUM_TCP;
th->th_sum = in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr,
htons(sizeof(struct tcphdr) + optlen + IPPROTO_TCP));
- m->m_pkthdr.csum_flags = CSUM_TCP;
- m->m_pkthdr.csum_data = offsetof(struct tcphdr, th_sum);
ip->ip_len = m->m_pkthdr.len;
if (V_path_mtu_discovery)
ip->ip_off |= IP_DF;
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index 2056bafee1fd..d3e7acaa0c65 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -971,12 +971,14 @@ udp_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *addr,
}
src.sin_family = 0;
+ INP_RLOCK(inp);
if (control != NULL) {
/*
* XXX: Currently, we assume all the optional information is
* stored in a single mbuf.
*/
if (control->m_next) {
+ INP_RUNLOCK(inp);
m_freem(control);
m_freem(m);
return (EINVAL);
@@ -1018,6 +1020,7 @@ udp_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *addr,
m_freem(control);
}
if (error) {
+ INP_RUNLOCK(inp);
m_freem(m);
return (error);
}
@@ -1039,7 +1042,6 @@ udp_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *addr,
* XXXRW: Check that hash locking update here is correct.
*/
sin = (struct sockaddr_in *)addr;
- INP_RLOCK(inp);
if (sin != NULL &&
(inp->inp_laddr.s_addr == INADDR_ANY && inp->inp_lport == 0)) {
INP_RUNLOCK(inp);
diff --git a/sys/netinet6/icmp6.c b/sys/netinet6/icmp6.c
index 967d01a43a56..a1e19d9cae93 100644
--- a/sys/netinet6/icmp6.c
+++ b/sys/netinet6/icmp6.c
@@ -2418,23 +2418,23 @@ icmp6_redirect_input(struct mbuf *m, int off)
if (rt) {
if (rt->rt_gateway == NULL ||
rt->rt_gateway->sa_family != AF_INET6) {
+ RTFREE_LOCKED(rt);
nd6log((LOG_ERR,
"ICMP6 redirect rejected; no route "
"with inet6 gateway found for redirect dst: %s\n",
icmp6_redirect_diag(&src6, &reddst6, &redtgt6)));
- RTFREE_LOCKED(rt);
goto bad;
}
gw6 = &(((struct sockaddr_in6 *)rt->rt_gateway)->sin6_addr);
if (bcmp(&src6, gw6, sizeof(struct in6_addr)) != 0) {
+ RTFREE_LOCKED(rt);
nd6log((LOG_ERR,
"ICMP6 redirect rejected; "
"not equal to gw-for-src=%s (must be same): "
"%s\n",
ip6_sprintf(ip6buf, gw6),
icmp6_redirect_diag(&src6, &reddst6, &redtgt6)));
- RTFREE_LOCKED(rt);
goto bad;
}
} else {
diff --git a/sys/netinet6/in6.h b/sys/netinet6/in6.h
index f0cf4f42c993..f910e701b9f6 100644
--- a/sys/netinet6/in6.h
+++ b/sys/netinet6/in6.h
@@ -632,7 +632,9 @@ struct ip6_mtuinfo {
#ifdef _KERNEL
struct cmsghdr;
+struct ip6_hdr;
+int in6_cksum_pseudo(struct ip6_hdr *, uint32_t, uint8_t, uint16_t);
int in6_cksum __P((struct mbuf *, u_int8_t, u_int32_t, u_int32_t));
int in6_localaddr __P((struct in6_addr *));
int in6_localip(struct in6_addr *);
diff --git a/sys/netinet6/in6_cksum.c b/sys/netinet6/in6_cksum.c
index 9cb97bd7e84e..da8a2e6bf3c1 100644
--- a/sys/netinet6/in6_cksum.c
+++ b/sys/netinet6/in6_cksum.c
@@ -80,6 +80,66 @@ __FBSDID("$FreeBSD$");
#define ADDCARRY(x) (x > 65535 ? x -= 65535 : x)
#define REDUCE {l_util.l = sum; sum = l_util.s[0] + l_util.s[1]; (void)ADDCARRY(sum);}
+static int
+_in6_cksum_pseudo(struct ip6_hdr *ip6, uint32_t len, uint8_t nxt, uint16_t csum)
+{
+ int sum;
+ uint16_t scope, *w;
+ union {
+ u_int16_t phs[4];
+ struct {
+ u_int32_t ph_len;
+ u_int8_t ph_zero[3];
+ u_int8_t ph_nxt;
+ } __packed ph;
+ } uph;
+
+ sum = csum;
+
+ /*
+ * First create IP6 pseudo header and calculate a summary.
+ */
+ uph.ph.ph_len = htonl(len);
+ uph.ph.ph_zero[0] = uph.ph.ph_zero[1] = uph.ph.ph_zero[2] = 0;
+ uph.ph.ph_nxt = nxt;
+
+ /* Payload length and upper layer identifier. */
+ sum += uph.phs[0]; sum += uph.phs[1];
+ sum += uph.phs[2]; sum += uph.phs[3];
+
+ /* IPv6 source address. */
+ scope = in6_getscope(&ip6->ip6_src);
+ w = (u_int16_t *)&ip6->ip6_src;
+ sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
+ sum += w[4]; sum += w[5]; sum += w[6]; sum += w[7];
+ if (scope != 0)
+ sum -= scope;
+
+ /* IPv6 destination address. */
+ scope = in6_getscope(&ip6->ip6_dst);
+ w = (u_int16_t *)&ip6->ip6_dst;
+ sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
+ sum += w[4]; sum += w[5]; sum += w[6]; sum += w[7];
+ if (scope != 0)
+ sum -= scope;
+
+ return (sum);
+}
+
+int
+in6_cksum_pseudo(struct ip6_hdr *ip6, uint32_t len, uint8_t nxt, uint16_t csum)
+{
+ int sum;
+ union {
+ u_int16_t s[2];
+ u_int32_t l;
+ } l_util;
+
+ sum = _in6_cksum_pseudo(ip6, len, nxt, csum);
+ REDUCE;
+ return (sum);
+}
+
/*
* m MUST contain a contiguous IP6 header.
* off is an offset where TCP/UDP/ICMP6 header starts.
@@ -89,12 +149,10 @@ __FBSDID("$FreeBSD$");
int
in6_cksum(struct mbuf *m, u_int8_t nxt, u_int32_t off, u_int32_t len)
{
- u_int16_t *w;
- int sum = 0;
- int mlen = 0;
- int byte_swapped = 0;
struct ip6_hdr *ip6;
- struct in6_addr in6;
+ u_int16_t *w, scope;
+ int byte_swapped, mlen;
+ int sum;
union {
u_int16_t phs[4];
struct {
@@ -112,42 +170,38 @@ in6_cksum(struct mbuf *m, u_int8_t nxt, u_int32_t off, u_int32_t len)
u_int32_t l;
} l_util;
- /* sanity check */
- if (m->m_pkthdr.len < off + len) {
- panic("in6_cksum: mbuf len (%d) < off+len (%d+%d)",
- m->m_pkthdr.len, off, len);
- }
-
- bzero(&uph, sizeof(uph));
+ /* Sanity check. */
+ KASSERT(m->m_pkthdr.len >= off + len, ("%s: mbuf len (%d) < off(%d)+"
+ "len(%d)", __func__, m->m_pkthdr.len, off, len));
/*
* First create IP6 pseudo header and calculate a summary.
*/
- ip6 = mtod(m, struct ip6_hdr *);
uph.ph.ph_len = htonl(len);
+ uph.ph.ph_zero[0] = uph.ph.ph_zero[1] = uph.ph.ph_zero[2] = 0;
uph.ph.ph_nxt = nxt;
- /*
- * IPv6 source address.
- * XXX: we'd like to avoid copying the address, but we can't due to
- * the possibly embedded scope zone ID.
- */
- in6 = ip6->ip6_src;
- in6_clearscope(&in6);
- w = (u_int16_t *)&in6;
+ /* Payload length and upper layer identifier. */
+ sum = uph.phs[0]; sum += uph.phs[1];
+ sum += uph.phs[2]; sum += uph.phs[3];
+
+ ip6 = mtod(m, struct ip6_hdr *);
+
+ /* IPv6 source address. */
+ scope = in6_getscope(&ip6->ip6_src);
+ w = (u_int16_t *)&ip6->ip6_src;
sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
sum += w[4]; sum += w[5]; sum += w[6]; sum += w[7];
+ if (scope != 0)
+ sum -= scope;
- /* IPv6 destination address */
- in6 = ip6->ip6_dst;
- in6_clearscope(&in6);
- w = (u_int16_t *)&in6;
+ /* IPv6 destination address. */
+ scope = in6_getscope(&ip6->ip6_dst);
+ w = (u_int16_t *)&ip6->ip6_dst;
sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
sum += w[4]; sum += w[5]; sum += w[6]; sum += w[7];
-
- /* Payload length and upper layer identifier */
- sum += uph.phs[0]; sum += uph.phs[1];
- sum += uph.phs[2]; sum += uph.phs[3];
+ if (scope != 0)
+ sum -= scope;
/*
* Secondly calculate a summary of the first mbuf excluding offset.
@@ -167,14 +221,16 @@ in6_cksum(struct mbuf *m, u_int8_t nxt, u_int32_t off, u_int32_t len)
/*
* Force to even boundary.
*/
- if ((1 & (long) w) && (mlen > 0)) {
+ if ((1 & (long)w) && (mlen > 0)) {
REDUCE;
sum <<= 8;
s_util.c[0] = *(u_char *)w;
w = (u_int16_t *)((char *)w + 1);
mlen--;
byte_swapped = 1;
- }
+ } else
+ byte_swapped = 0;
+
/*
* Unroll the loop to make overhead from
* branches &c small.
diff --git a/sys/netinet6/in6_src.c b/sys/netinet6/in6_src.c
index 18a196669487..b6a88f5da3a8 100644
--- a/sys/netinet6/in6_src.c
+++ b/sys/netinet6/in6_src.c
@@ -873,8 +873,7 @@ in6_selecthlim(struct inpcb *in6p, struct ifnet *ifp)
RTFREE(ro6.ro_rt);
if (lifp)
return (ND_IFINFO(lifp)->chlim);
- } else
- return (V_ip6_defhlim);
+ }
}
return (V_ip6_defhlim);
}
diff --git a/sys/netinet6/ip6_forward.c b/sys/netinet6/ip6_forward.c
index bae418ae2af0..93c7bf211237 100644
--- a/sys/netinet6/ip6_forward.c
+++ b/sys/netinet6/ip6_forward.c
@@ -581,13 +581,11 @@ skip_routing:
m->m_flags |= M_FASTFWD_OURS;
if (m->m_pkthdr.rcvif == NULL)
m->m_pkthdr.rcvif = V_loif;
- if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
+ if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
m->m_pkthdr.csum_flags |=
- CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+ CSUM_DATA_VALID_IPV6 | CSUM_PSEUDO_HDR;
m->m_pkthdr.csum_data = 0xffff;
}
- m->m_pkthdr.csum_flags |=
- CSUM_IP_CHECKED | CSUM_IP_VALID;
#ifdef SCTP
if (m->m_pkthdr.csum_flags & CSUM_SCTP)
m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID;
@@ -603,9 +601,9 @@ skip_routing:
if (m->m_flags & M_FASTFWD_OURS) {
if (m->m_pkthdr.rcvif == NULL)
m->m_pkthdr.rcvif = V_loif;
- if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
+ if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
m->m_pkthdr.csum_flags |=
- CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+ CSUM_DATA_VALID_IPV6 | CSUM_PSEUDO_HDR;
m->m_pkthdr.csum_data = 0xffff;
}
#ifdef SCTP
diff --git a/sys/netinet6/ip6_input.c b/sys/netinet6/ip6_input.c
index 4fde2ff95102..0451888a6a15 100644
--- a/sys/netinet6/ip6_input.c
+++ b/sys/netinet6/ip6_input.c
@@ -146,6 +146,9 @@ RW_SYSINIT(in6_ifaddr_lock, &in6_ifaddr_lock, "in6_ifaddr_lock");
static void ip6_init2(void *);
static struct ip6aux *ip6_setdstifaddr(struct mbuf *, struct in6_ifaddr *);
+static struct ip6aux *ip6_addaux(struct mbuf *);
+static struct ip6aux *ip6_findaux(struct mbuf *m);
+static void ip6_delaux (struct mbuf *);
static int ip6_hopopts_input(u_int32_t *, u_int32_t *, struct mbuf **, int *);
#ifdef PULLDOWN_TEST
static struct mbuf *ip6_pullexthdr(struct mbuf *, size_t, int);
@@ -328,6 +331,83 @@ ip6_init2(void *dummy)
/* This must be after route_init(), which is now SI_ORDER_THIRD */
SYSINIT(netinet6init2, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE, ip6_init2, NULL);
+static int
+ip6_input_hbh(struct mbuf *m, uint32_t *plen, uint32_t *rtalert, int *off,
+ int *nxt, int *ours)
+{
+ struct ip6_hdr *ip6;
+ struct ip6_hbh *hbh;
+
+ if (ip6_hopopts_input(plen, rtalert, &m, off)) {
+#if 0 /*touches NULL pointer*/
+ in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
+#endif
+ goto out; /* m have already been freed */
+ }
+
+ /* adjust pointer */
+ ip6 = mtod(m, struct ip6_hdr *);
+
+ /*
+ * if the payload length field is 0 and the next header field
+ * indicates Hop-by-Hop Options header, then a Jumbo Payload
+ * option MUST be included.
+ */
+ if (ip6->ip6_plen == 0 && *plen == 0) {
+ /*
+ * Note that if a valid jumbo payload option is
+ * contained, ip6_hopopts_input() must set a valid
+ * (non-zero) payload length to the variable plen.
+ */
+ V_ip6stat.ip6s_badoptions++;
+ in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
+ in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_hdrerr);
+ icmp6_error(m, ICMP6_PARAM_PROB,
+ ICMP6_PARAMPROB_HEADER,
+ (caddr_t)&ip6->ip6_plen - (caddr_t)ip6);
+ goto out;
+ }
+#ifndef PULLDOWN_TEST
+ /* ip6_hopopts_input() ensures that mbuf is contiguous */
+ hbh = (struct ip6_hbh *)(ip6 + 1);
+#else
+ IP6_EXTHDR_GET(hbh, struct ip6_hbh *, m, sizeof(struct ip6_hdr),
+ sizeof(struct ip6_hbh));
+ if (hbh == NULL) {
+ V_ip6stat.ip6s_tooshort++;
+ goto out;
+ }
+#endif
+ *nxt = hbh->ip6h_nxt;
+
+ /*
+ * If we are acting as a router and the packet contains a
+ * router alert option, see if we know the option value.
+ * Currently, we only support the option value for MLD, in which
+ * case we should pass the packet to the multicast routing
+ * daemon.
+ */
+ if (*rtalert != ~0) {
+ switch (*rtalert) {
+ case IP6OPT_RTALERT_MLD:
+ if (V_ip6_forwarding)
+ *ours = 1;
+ break;
+ default:
+ /*
+ * RFC2711 requires unrecognized values must be
+ * silently ignored.
+ */
+ break;
+ }
+ }
+
+ return (0);
+
+out:
+ return (1);
+}
+
void
ip6_input(struct mbuf *m)
{
@@ -822,71 +902,11 @@ passin:
*/
plen = (u_int32_t)ntohs(ip6->ip6_plen);
if (ip6->ip6_nxt == IPPROTO_HOPOPTS) {
- struct ip6_hbh *hbh;
-
- if (ip6_hopopts_input(&plen, &rtalert, &m, &off)) {
-#if 0 /*touches NULL pointer*/
- in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
-#endif
- goto out; /* m have already been freed */
- }
-
- /* adjust pointer */
- ip6 = mtod(m, struct ip6_hdr *);
+ int error;
- /*
- * if the payload length field is 0 and the next header field
- * indicates Hop-by-Hop Options header, then a Jumbo Payload
- * option MUST be included.
- */
- if (ip6->ip6_plen == 0 && plen == 0) {
- /*
- * Note that if a valid jumbo payload option is
- * contained, ip6_hopopts_input() must set a valid
- * (non-zero) payload length to the variable plen.
- */
- V_ip6stat.ip6s_badoptions++;
- in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
- in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_hdrerr);
- icmp6_error(m, ICMP6_PARAM_PROB,
- ICMP6_PARAMPROB_HEADER,
- (caddr_t)&ip6->ip6_plen - (caddr_t)ip6);
+ error = ip6_input_hbh(m, &plen, &rtalert, &off, &nxt, &ours);
+ if (error != 0)
goto out;
- }
-#ifndef PULLDOWN_TEST
- /* ip6_hopopts_input() ensures that mbuf is contiguous */
- hbh = (struct ip6_hbh *)(ip6 + 1);
-#else
- IP6_EXTHDR_GET(hbh, struct ip6_hbh *, m, sizeof(struct ip6_hdr),
- sizeof(struct ip6_hbh));
- if (hbh == NULL) {
- V_ip6stat.ip6s_tooshort++;
- goto out;
- }
-#endif
- nxt = hbh->ip6h_nxt;
-
- /*
- * If we are acting as a router and the packet contains a
- * router alert option, see if we know the option value.
- * Currently, we only support the option value for MLD, in which
- * case we should pass the packet to the multicast routing
- * daemon.
- */
- if (rtalert != ~0) {
- switch (rtalert) {
- case IP6OPT_RTALERT_MLD:
- if (V_ip6_forwarding)
- ours = 1;
- break;
- default:
- /*
- * RFC2711 requires unrecognized values must be
- * silently ignored.
- */
- break;
- }
- }
} else
nxt = ip6->ip6_nxt;
@@ -1772,7 +1792,7 @@ ip6_lasthdr(struct mbuf *m, int off, int proto, int *nxtp)
}
}
-struct ip6aux *
+static struct ip6aux *
ip6_addaux(struct mbuf *m)
{
struct m_tag *mtag;
@@ -1789,7 +1809,7 @@ ip6_addaux(struct mbuf *m)
return mtag ? (struct ip6aux *)(mtag + 1) : NULL;
}
-struct ip6aux *
+static struct ip6aux *
ip6_findaux(struct mbuf *m)
{
struct m_tag *mtag;
@@ -1798,7 +1818,7 @@ ip6_findaux(struct mbuf *m)
return mtag ? (struct ip6aux *)(mtag + 1) : NULL;
}
-void
+static void
ip6_delaux(struct mbuf *m)
{
struct m_tag *mtag;
diff --git a/sys/netinet6/ip6_ipsec.c b/sys/netinet6/ip6_ipsec.c
index e8689172dbb4..757f1cc7b528 100644
--- a/sys/netinet6/ip6_ipsec.c
+++ b/sys/netinet6/ip6_ipsec.c
@@ -291,6 +291,7 @@ ip6_ipsec_output(struct mbuf **m, struct inpcb *inp, int *flags, int *error,
/*
* Do delayed checksums now because we send before
* this is done in the normal processing path.
+ * XXX-BZ CSUM_DELAY_DATA_IPV6?
*/
if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
ipseclog((LOG_DEBUG,
diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c
index d15d7c2791a6..fddb45b5276f 100644
--- a/sys/netinet6/ip6_output.c
+++ b/sys/netinet6/ip6_output.c
@@ -83,6 +83,8 @@ __FBSDID("$FreeBSD$");
#include <sys/syslog.h>
#include <sys/ucred.h>
+#include <machine/in_cksum.h>
+
#include <net/if.h>
#include <net/netisr.h>
#include <net/route.h>
@@ -182,6 +184,29 @@ static int copypktopts(struct ip6_pktopts *, struct ip6_pktopts *, int);
}\
} while (/*CONSTCOND*/ 0)
+static void
+in6_delayed_cksum(struct mbuf *m, uint32_t plen, u_short offset)
+{
+ u_short csum;
+
+ csum = in_cksum_skip(m, offset + plen, offset);
+ if (m->m_pkthdr.csum_flags & CSUM_UDP_IPV6 && csum == 0)
+ csum = 0xffff;
+ offset += m->m_pkthdr.csum_data; /* checksum offset */
+
+ if (offset + sizeof(u_short) > m->m_len) {
+ printf("%s: delayed m_pullup, m->len: %d off: %d\n",
+ __func__, m->m_len, offset);
+ /*
+ * XXX this should not happen, but if it does, the correct
+ * behavior may be to insert the checksum in the appropriate
+ * next mbuf in the chain.
+ */
+ return;
+ }
+ *(u_short *)(m->m_data + offset) = csum;
+}
+
/*
* IP6 output. The packet in mbuf chain m contains a skeletal IP6
* header (with pri, len, nxt, hlim, src, dst).
@@ -221,9 +246,7 @@ ip6_output(struct mbuf *m0, struct ip6_pktopts *opt,
int flevalid = 0;
int hdrsplit = 0;
int needipsec = 0;
-#ifdef SCTP
- int sw_csum;
-#endif
+ int sw_csum, tso;
#ifdef IPSEC
struct ipsec_output_state state;
struct ip6_rthdr *rh = NULL;
@@ -862,13 +885,11 @@ again:
m->m_flags |= M_FASTFWD_OURS;
if (m->m_pkthdr.rcvif == NULL)
m->m_pkthdr.rcvif = V_loif;
- if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
+ if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
m->m_pkthdr.csum_flags |=
- CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+ CSUM_DATA_VALID_IPV6 | CSUM_PSEUDO_HDR;
m->m_pkthdr.csum_data = 0xffff;
}
- m->m_pkthdr.csum_flags |=
- CSUM_IP_CHECKED | CSUM_IP_VALID;
#ifdef SCTP
if (m->m_pkthdr.csum_flags & CSUM_SCTP)
m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID;
@@ -884,14 +905,14 @@ again:
if (m->m_flags & M_FASTFWD_OURS) {
if (m->m_pkthdr.rcvif == NULL)
m->m_pkthdr.rcvif = V_loif;
- if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
+ if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
m->m_pkthdr.csum_flags |=
- CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+ CSUM_DATA_VALID_IPV6 | CSUM_PSEUDO_HDR;
m->m_pkthdr.csum_data = 0xffff;
}
#ifdef SCTP
if (m->m_pkthdr.csum_flags & CSUM_SCTP)
- m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID;
+ m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID;
#endif
error = netisr_queue(NETISR_IPV6, m);
goto done;
@@ -927,16 +948,32 @@ passout:
* 4: if dontfrag == 1 && alwaysfrag == 1
* error, as we cannot handle this conflicting request
*/
+ sw_csum = m->m_pkthdr.csum_flags;
+ if (!hdrsplit) {
+ tso = ((sw_csum & ifp->if_hwassist & CSUM_TSO) != 0) ? 1 : 0;
+ sw_csum &= ~ifp->if_hwassist;
+ } else
+ tso = 0;
+ /*
+ * If we added extension headers, we will not do TSO and calculate the
+ * checksums ourselves for now.
+ * XXX-BZ Need a framework to know when the NIC can handle it, even
+ * with ext. hdrs.
+ */
+ if (sw_csum & CSUM_DELAY_DATA_IPV6) {
+ sw_csum &= ~CSUM_DELAY_DATA_IPV6;
+ in6_delayed_cksum(m, plen, sizeof(struct ip6_hdr));
+ }
#ifdef SCTP
- sw_csum = m->m_pkthdr.csum_flags & ~ifp->if_hwassist;
if (sw_csum & CSUM_SCTP) {
- sctp_delayed_cksum(m, sizeof(struct ip6_hdr));
sw_csum &= ~CSUM_SCTP;
+ sctp_delayed_cksum(m, sizeof(struct ip6_hdr));
}
#endif
+ m->m_pkthdr.csum_flags &= ifp->if_hwassist;
tlen = m->m_pkthdr.len;
- if (opt && (opt->ip6po_flags & IP6PO_DONTFRAG))
+ if ((opt && (opt->ip6po_flags & IP6PO_DONTFRAG)) || tso)
dontfrag = 1;
else
dontfrag = 0;
@@ -945,7 +982,7 @@ passout:
error = EMSGSIZE;
goto bad;
}
- if (dontfrag && tlen > IN6_LINKMTU(ifp)) { /* case 2-b */
+ if (dontfrag && tlen > IN6_LINKMTU(ifp) && !tso) { /* case 2-b */
/*
* Even if the DONTFRAG option is specified, we cannot send the
* packet when the data length is larger than the MTU of the
@@ -1033,6 +1070,22 @@ passout:
goto bad;
}
+
+ /*
+ * If the interface will not calculate checksums on
+ * fragmented packets, then do it here.
+ * XXX-BZ handle the hw offloading case. Need flags.
+ */
+ if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
+ in6_delayed_cksum(m, plen, hlen);
+ m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
+ }
+#ifdef SCTP
+ if (m->m_pkthdr.csum_flags & CSUM_SCTP) {
+ sctp_delayed_cksum(m, hlen);
+ m->m_pkthdr.csum_flags &= ~CSUM_SCTP;
+ }
+#endif
mnext = &m->m_nextpkt;
/*
diff --git a/sys/netinet6/ip6_var.h b/sys/netinet6/ip6_var.h
index a778b17bca5b..9a532fce6da1 100644
--- a/sys/netinet6/ip6_var.h
+++ b/sys/netinet6/ip6_var.h
@@ -388,9 +388,9 @@ char * ip6_get_prevhdr __P((struct mbuf *, int));
int ip6_nexthdr __P((struct mbuf *, int, int, int *));
int ip6_lasthdr __P((struct mbuf *, int, int, int *));
-struct ip6aux *ip6_addaux __P((struct mbuf *));
+#ifdef __notyet__
struct ip6aux *ip6_findaux __P((struct mbuf *));
-void ip6_delaux __P((struct mbuf *));
+#endif
extern int (*ip6_mforward)(struct ip6_hdr *, struct ifnet *,
struct mbuf *);
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index 8d296b23a201..592eb90a1ed5 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -174,9 +174,7 @@ nd6_ifattach(struct ifnet *ifp)
{
struct nd_ifinfo *nd;
- nd = (struct nd_ifinfo *)malloc(sizeof(*nd), M_IP6NDP, M_WAITOK);
- bzero(nd, sizeof(*nd));
-
+ nd = (struct nd_ifinfo *)malloc(sizeof(*nd), M_IP6NDP, M_WAITOK|M_ZERO);
nd->initialized = 1;
nd->chlim = IPV6_DEFHLIM;
@@ -284,10 +282,9 @@ nd6_option(union nd_opts *ndopts)
struct nd_opt_hdr *nd_opt;
int olen;
- if (ndopts == NULL)
- panic("ndopts == NULL in nd6_option");
- if (ndopts->nd_opts_last == NULL)
- panic("uninitialized ndopts in nd6_option");
+ KASSERT(ndopts != NULL, ("%s: ndopts == NULL", __func__));
+ KASSERT(ndopts->nd_opts_last != NULL, ("%s: uninitialized ndopts",
+ __func__));
if (ndopts->nd_opts_search == NULL)
return NULL;
if (ndopts->nd_opts_done)
@@ -335,10 +332,9 @@ nd6_options(union nd_opts *ndopts)
struct nd_opt_hdr *nd_opt;
int i = 0;
- if (ndopts == NULL)
- panic("ndopts == NULL in nd6_options");
- if (ndopts->nd_opts_last == NULL)
- panic("uninitialized ndopts in nd6_options");
+ KASSERT(ndopts != NULL, ("%s: ndopts == NULL", __func__));
+ KASSERT(ndopts->nd_opts_last != NULL, ("%s: uninitialized ndopts",
+ __func__));
if (ndopts->nd_opts_search == NULL)
return 0;
@@ -1174,11 +1170,13 @@ done:
void
nd6_rtrequest(int req, struct rtentry *rt, struct rt_addrinfo *info)
{
- struct sockaddr_in6 *gateway = (struct sockaddr_in6 *)rt->rt_gateway;
+ struct sockaddr_in6 *gateway;
struct nd_defrouter *dr;
- struct ifnet *ifp = rt->rt_ifp;
+ struct ifnet *ifp;
RT_LOCK_ASSERT(rt);
+ gateway = (struct sockaddr_in6 *)rt->rt_gateway;
+ ifp = rt->rt_ifp;
switch (req) {
case RTM_ADD:
@@ -1547,10 +1545,8 @@ nd6_cache_lladdr(struct ifnet *ifp, struct in6_addr *from, char *lladdr,
IF_AFDATA_UNLOCK_ASSERT(ifp);
- if (ifp == NULL)
- panic("ifp == NULL in nd6_cache_lladdr");
- if (from == NULL)
- panic("from == NULL in nd6_cache_lladdr");
+ KASSERT(ifp != NULL, ("%s: ifp == NULL", __func__));
+ KASSERT(from != NULL, ("%s: from == NULL", __func__));
/* nothing must be updated for unspecified address */
if (IN6_IS_ADDR_UNSPECIFIED(from))
@@ -2074,6 +2070,8 @@ nd6_output_lle(struct ifnet *ifp, struct ifnet *origifp, struct mbuf *m0,
}
return (error);
}
+ /* Reset layer specific mbuf flags to avoid confusing lower layers. */
+ m->m_flags &= ~(M_PROTOFLAGS);
if ((ifp->if_flags & IFF_LOOPBACK) != 0) {
return ((*ifp->if_output)(origifp, m, (struct sockaddr *)dst,
NULL));
@@ -2239,7 +2237,6 @@ clear_llinfo_pqueue(struct llentry *ln)
for (m_hold = ln->la_hold; m_hold; m_hold = m_hold_next) {
m_hold_next = m_hold->m_nextpkt;
- m_hold->m_nextpkt = NULL;
m_freem(m_hold);
}
@@ -2262,128 +2259,101 @@ SYSCTL_VNET_INT(_net_inet6_icmp6, ICMPV6CTL_ND6_MAXQLEN, nd6_maxqueuelen,
static int
nd6_sysctl_drlist(SYSCTL_HANDLER_ARGS)
{
- int error;
- char buf[1024] __aligned(4);
- struct in6_defrouter *d, *de;
+ struct in6_defrouter d;
struct nd_defrouter *dr;
+ int error;
if (req->newptr)
- return EPERM;
- error = 0;
+ return (EPERM);
+
+ bzero(&d, sizeof(d));
+ d.rtaddr.sin6_family = AF_INET6;
+ d.rtaddr.sin6_len = sizeof(d.rtaddr);
+ /*
+ * XXX locking
+ */
TAILQ_FOREACH(dr, &V_nd_defrouter, dr_entry) {
- d = (struct in6_defrouter *)buf;
- de = (struct in6_defrouter *)(buf + sizeof(buf));
-
- if (d + 1 <= de) {
- bzero(d, sizeof(*d));
- d->rtaddr.sin6_family = AF_INET6;
- d->rtaddr.sin6_len = sizeof(d->rtaddr);
- d->rtaddr.sin6_addr = dr->rtaddr;
- error = sa6_recoverscope(&d->rtaddr);
- if (error != 0)
- return (error);
- d->flags = dr->flags;
- d->rtlifetime = dr->rtlifetime;
- d->expire = dr->expire;
- d->if_index = dr->ifp->if_index;
- } else
- panic("buffer too short");
-
- error = SYSCTL_OUT(req, buf, sizeof(*d));
- if (error)
- break;
+ d.rtaddr.sin6_addr = dr->rtaddr;
+ error = sa6_recoverscope(&d.rtaddr);
+ if (error != 0)
+ return (error);
+ d.flags = dr->flags;
+ d.rtlifetime = dr->rtlifetime;
+ d.expire = dr->expire;
+ d.if_index = dr->ifp->if_index;
+ error = SYSCTL_OUT(req, &d, sizeof(d));
+ if (error != 0)
+ return (error);
}
-
- return (error);
+ return (0);
}
static int
nd6_sysctl_prlist(SYSCTL_HANDLER_ARGS)
{
- int error;
- char buf[1024] __aligned(4);
- struct in6_prefix *p, *pe;
+ struct in6_prefix p;
+ struct sockaddr_in6 s6;
struct nd_prefix *pr;
+ struct nd_pfxrouter *pfr;
+ time_t maxexpire;
+ int error;
char ip6buf[INET6_ADDRSTRLEN];
if (req->newptr)
- return EPERM;
- error = 0;
-
- LIST_FOREACH(pr, &V_nd_prefix, ndpr_entry) {
- u_short advrtrs;
- size_t advance;
- struct sockaddr_in6 *sin6, *s6;
- struct nd_pfxrouter *pfr;
-
- p = (struct in6_prefix *)buf;
- pe = (struct in6_prefix *)(buf + sizeof(buf));
+ return (EPERM);
- if (p + 1 <= pe) {
- bzero(p, sizeof(*p));
- sin6 = (struct sockaddr_in6 *)(p + 1);
+ bzero(&p, sizeof(p));
+ p.origin = PR_ORIG_RA;
+ bzero(&s6, sizeof(s6));
+ s6.sin6_family = AF_INET6;
+ s6.sin6_len = sizeof(s6);
- p->prefix = pr->ndpr_prefix;
- if (sa6_recoverscope(&p->prefix)) {
+ /*
+ * XXX locking
+ */
+ LIST_FOREACH(pr, &V_nd_prefix, ndpr_entry) {
+ p.prefix = pr->ndpr_prefix;
+ if (sa6_recoverscope(&p.prefix)) {
+ log(LOG_ERR, "scope error in prefix list (%s)\n",
+ ip6_sprintf(ip6buf, &p.prefix.sin6_addr));
+ /* XXX: press on... */
+ }
+ p.raflags = pr->ndpr_raf;
+ p.prefixlen = pr->ndpr_plen;
+ p.vltime = pr->ndpr_vltime;
+ p.pltime = pr->ndpr_pltime;
+ p.if_index = pr->ndpr_ifp->if_index;
+ if (pr->ndpr_vltime == ND6_INFINITE_LIFETIME)
+ p.expire = 0;
+ else {
+ /* XXX: we assume time_t is signed. */
+ maxexpire = (-1) &
+ ~((time_t)1 << ((sizeof(maxexpire) * 8) - 1));
+ if (pr->ndpr_vltime < maxexpire - pr->ndpr_lastupdate)
+ p.expire = pr->ndpr_lastupdate +
+ pr->ndpr_vltime;
+ else
+ p.expire = maxexpire;
+ }
+ p.refcnt = pr->ndpr_refcnt;
+ p.flags = pr->ndpr_stateflags;
+ p.advrtrs = 0;
+ LIST_FOREACH(pfr, &pr->ndpr_advrtrs, pfr_entry)
+ p.advrtrs++;
+ error = SYSCTL_OUT(req, &p, sizeof(p));
+ if (error != 0)
+ return (error);
+ LIST_FOREACH(pfr, &pr->ndpr_advrtrs, pfr_entry) {
+ s6.sin6_addr = pfr->router->rtaddr;
+ if (sa6_recoverscope(&s6))
log(LOG_ERR,
"scope error in prefix list (%s)\n",
- ip6_sprintf(ip6buf, &p->prefix.sin6_addr));
- /* XXX: press on... */
- }
- p->raflags = pr->ndpr_raf;
- p->prefixlen = pr->ndpr_plen;
- p->vltime = pr->ndpr_vltime;
- p->pltime = pr->ndpr_pltime;
- p->if_index = pr->ndpr_ifp->if_index;
- if (pr->ndpr_vltime == ND6_INFINITE_LIFETIME)
- p->expire = 0;
- else {
- time_t maxexpire;
-
- /* XXX: we assume time_t is signed. */
- maxexpire = (-1) &
- ~((time_t)1 <<
- ((sizeof(maxexpire) * 8) - 1));
- if (pr->ndpr_vltime <
- maxexpire - pr->ndpr_lastupdate) {
- p->expire = pr->ndpr_lastupdate +
- pr->ndpr_vltime;
- } else
- p->expire = maxexpire;
- }
- p->refcnt = pr->ndpr_refcnt;
- p->flags = pr->ndpr_stateflags;
- p->origin = PR_ORIG_RA;
- advrtrs = 0;
- LIST_FOREACH(pfr, &pr->ndpr_advrtrs, pfr_entry) {
- if ((void *)&sin6[advrtrs + 1] > (void *)pe) {
- advrtrs++;
- continue;
- }
- s6 = &sin6[advrtrs];
- bzero(s6, sizeof(*s6));
- s6->sin6_family = AF_INET6;
- s6->sin6_len = sizeof(*sin6);
- s6->sin6_addr = pfr->router->rtaddr;
- if (sa6_recoverscope(s6)) {
- log(LOG_ERR,
- "scope error in "
- "prefix list (%s)\n",
- ip6_sprintf(ip6buf,
- &pfr->router->rtaddr));
- }
- advrtrs++;
- }
- p->advrtrs = advrtrs;
- } else
- panic("buffer too short");
-
- advance = sizeof(*p) + sizeof(*sin6) * advrtrs;
- error = SYSCTL_OUT(req, buf, advance);
- if (error)
- break;
+ ip6_sprintf(ip6buf, &pfr->router->rtaddr));
+ error = SYSCTL_OUT(req, &s6, sizeof(s6));
+ if (error != 0)
+ return (error);
+ }
}
-
- return (error);
+ return (0);
}
diff --git a/sys/netinet6/route6.c b/sys/netinet6/route6.c
index 1311437cbc6d..ac0c7e6ff9fc 100644
--- a/sys/netinet6/route6.c
+++ b/sys/netinet6/route6.c
@@ -62,6 +62,7 @@ route6_input(struct mbuf **mp, int *offp, int proto)
struct mbuf *m = *mp;
struct ip6_rthdr *rh;
int off = *offp, rhlen;
+#ifdef __notyet__
struct ip6aux *ip6a;
ip6a = ip6_findaux(m);
@@ -73,6 +74,7 @@ route6_input(struct mbuf **mp, int *offp, int proto)
return IPPROTO_DONE;
}
}
+#endif
#ifndef PULLDOWN_TEST
IP6_EXTHDR_CHECK(m, off, sizeof(*rh), IPPROTO_DONE);
diff --git a/sys/netinet6/scope6.c b/sys/netinet6/scope6.c
index 8189d87c5bcd..7a1a04b25cea 100644
--- a/sys/netinet6/scope6.c
+++ b/sys/netinet6/scope6.c
@@ -494,3 +494,16 @@ in6_clearscope(struct in6_addr *in6)
return (modified);
}
+
+/*
+ * Return the scope identifier or zero.
+ */
+uint16_t
+in6_getscope(struct in6_addr *in6)
+{
+
+ if (IN6_IS_SCOPE_LINKLOCAL(in6) || IN6_IS_ADDR_MC_INTFACELOCAL(in6))
+ return (in6->s6_addr16[1]);
+
+ return (0);
+}
diff --git a/sys/netinet6/scope6_var.h b/sys/netinet6/scope6_var.h
index 8ec6f1051814..2248037f0856 100644
--- a/sys/netinet6/scope6_var.h
+++ b/sys/netinet6/scope6_var.h
@@ -54,6 +54,7 @@ int sa6_embedscope __P((struct sockaddr_in6 *, int));
int sa6_recoverscope __P((struct sockaddr_in6 *));
int in6_setscope __P((struct in6_addr *, struct ifnet *, u_int32_t *));
int in6_clearscope __P((struct in6_addr *));
+uint16_t in6_getscope(struct in6_addr *);
#endif /* _KERNEL */
#endif /* _NETINET6_SCOPE6_VAR_H_ */
diff --git a/sys/netinet6/sctp6_usrreq.c b/sys/netinet6/sctp6_usrreq.c
index e731d7ba0f9c..ef792eee1136 100644
--- a/sys/netinet6/sctp6_usrreq.c
+++ b/sys/netinet6/sctp6_usrreq.c
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -29,7 +29,6 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp6_usrreq.c,v 1.38 2005/08/24 08:08:56 suz Exp $ */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -151,11 +150,6 @@ sctp6_input(struct mbuf **i_pak, int *offp, int proto)
goto sctp_skip_csum;
}
check = sh->checksum; /* save incoming checksum */
- if ((check == 0) && (SCTP_BASE_SYSCTL(sctp_no_csum_on_loopback)) &&
- (IN6_ARE_ADDR_EQUAL(&ip6->ip6_src, &ip6->ip6_dst))) {
- SCTP_STAT_INCR(sctps_recvnocrc);
- goto sctp_skip_csum;
- }
sh->checksum = 0; /* prepare for calc */
calc_check = sctp_calculate_cksum(m, iphlen);
SCTP_STAT_INCR(sctps_recvswcrc);
diff --git a/sys/netinet6/sctp6_var.h b/sys/netinet6/sctp6_var.h
index 711caa1c54de..de0065d72450 100644
--- a/sys/netinet6/sctp6_var.h
+++ b/sys/netinet6/sctp6_var.h
@@ -1,7 +1,7 @@
/*-
* Copyright (c) 2001-2007, by Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2008-2011, by Randall Stewart. All rights reserved.
- * Copyright (c) 2008-2011, by Michael Tuexen. All rights reserved.
+ * Copyright (c) 2008-2012, by Randall Stewart. All rights reserved.
+ * Copyright (c) 2008-2012, by 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:
@@ -29,14 +29,13 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $KAME: sctp6_var.h,v 1.7 2004/08/17 04:06:22 itojun Exp $ */
-
-#ifndef _NETINET6_SCTP6_VAR_H_
-#define _NETINET6_SCTP6_VAR_H_
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#ifndef _NETINET6_SCTP6_VAR_H_
+#define _NETINET6_SCTP6_VAR_H_
+
#if defined(_KERNEL)
SYSCTL_DECL(_net_inet6_sctp6);
diff --git a/sys/netinet6/udp6_usrreq.c b/sys/netinet6/udp6_usrreq.c
index 2a4c0a55a469..c43d958f0826 100644
--- a/sys/netinet6/udp6_usrreq.c
+++ b/sys/netinet6/udp6_usrreq.c
@@ -185,6 +185,7 @@ udp6_input(struct mbuf **mp, int *offp, int proto)
#ifdef IPFIREWALL_FORWARD
struct m_tag *fwd_tag;
#endif
+ uint16_t uh_sum;
ifp = m->m_pkthdr.rcvif;
ip6 = mtod(m, struct ip6_hdr *);
@@ -228,7 +229,18 @@ udp6_input(struct mbuf **mp, int *offp, int proto)
UDPSTAT_INC(udps_nosum);
goto badunlocked;
}
- if (in6_cksum(m, IPPROTO_UDP, off, ulen) != 0) {
+
+ if (m->m_pkthdr.csum_flags & CSUM_DATA_VALID_IPV6) {
+ if (m->m_pkthdr.csum_flags & CSUM_PSEUDO_HDR)
+ uh_sum = m->m_pkthdr.csum_data;
+ else
+ uh_sum = in6_cksum_pseudo(ip6, ulen,
+ IPPROTO_UDP, m->m_pkthdr.csum_data);
+ uh_sum ^= 0xffff;
+ } else
+ uh_sum = in6_cksum(m, IPPROTO_UDP, off, ulen);
+
+ if (uh_sum != 0) {
UDPSTAT_INC(udps_badsum);
goto badunlocked;
}
@@ -771,10 +783,9 @@ udp6_output(struct inpcb *inp, struct mbuf *m, struct sockaddr *addr6,
ip6->ip6_src = *laddr;
ip6->ip6_dst = *faddr;
- if ((udp6->uh_sum = in6_cksum(m, IPPROTO_UDP,
- sizeof(struct ip6_hdr), plen)) == 0) {
- udp6->uh_sum = 0xffff;
- }
+ udp6->uh_sum = in6_cksum_pseudo(ip6, plen, IPPROTO_UDP, 0);
+ m->m_pkthdr.csum_flags = CSUM_UDP_IPV6;
+ m->m_pkthdr.csum_data = offsetof(struct udphdr, uh_sum);
flags = 0;
diff --git a/sys/pc98/pc98/machdep.c b/sys/pc98/pc98/machdep.c
index 691d21fe942a..88b1f20103a3 100644
--- a/sys/pc98/pc98/machdep.c
+++ b/sys/pc98/pc98/machdep.c
@@ -151,7 +151,6 @@ extern void dblfault_handler(void);
extern void printcpuinfo(void); /* XXX header file */
extern void finishidentcpu(void);
extern void panicifcpuunsupported(void);
-extern void initializecpu(void);
#define CS_SECURE(cs) (ISPL(cs) == SEL_UPL)
#define EFL_SECURE(ef, oef) ((((ef) ^ (oef)) & ~PSL_USERCHANGE) == 0)
diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c
index 50aaa7572005..55fa561f1a3b 100644
--- a/sys/powerpc/aim/mmu_oea.c
+++ b/sys/powerpc/aim/mmu_oea.c
@@ -289,7 +289,7 @@ boolean_t moea_is_modified(mmu_t, vm_page_t);
boolean_t moea_is_prefaultable(mmu_t, pmap_t, vm_offset_t);
boolean_t moea_is_referenced(mmu_t, vm_page_t);
boolean_t moea_ts_referenced(mmu_t, vm_page_t);
-vm_offset_t moea_map(mmu_t, vm_offset_t *, vm_offset_t, vm_offset_t, int);
+vm_offset_t moea_map(mmu_t, vm_offset_t *, vm_paddr_t, vm_paddr_t, int);
boolean_t moea_page_exists_quick(mmu_t, pmap_t, vm_page_t);
int moea_page_wired_mappings(mmu_t, vm_page_t);
void moea_pinit(mmu_t, pmap_t);
@@ -308,14 +308,14 @@ void moea_activate(mmu_t, struct thread *);
void moea_deactivate(mmu_t, struct thread *);
void moea_cpu_bootstrap(mmu_t, int);
void moea_bootstrap(mmu_t, vm_offset_t, vm_offset_t);
-void *moea_mapdev(mmu_t, vm_offset_t, vm_size_t);
+void *moea_mapdev(mmu_t, vm_paddr_t, vm_size_t);
void *moea_mapdev_attr(mmu_t, vm_offset_t, vm_size_t, vm_memattr_t);
void moea_unmapdev(mmu_t, vm_offset_t, vm_size_t);
-vm_offset_t moea_kextract(mmu_t, vm_offset_t);
+vm_paddr_t moea_kextract(mmu_t, vm_offset_t);
void moea_kenter_attr(mmu_t, vm_offset_t, vm_offset_t, vm_memattr_t);
-void moea_kenter(mmu_t, vm_offset_t, vm_offset_t);
+void moea_kenter(mmu_t, vm_offset_t, vm_paddr_t);
void moea_page_set_memattr(mmu_t mmu, vm_page_t m, vm_memattr_t ma);
-boolean_t moea_dev_direct_mapped(mmu_t, vm_offset_t, vm_size_t);
+boolean_t moea_dev_direct_mapped(mmu_t, vm_paddr_t, vm_size_t);
static void moea_sync_icache(mmu_t, pmap_t, vm_offset_t, vm_size_t);
static mmu_method_t moea_methods[] = {
@@ -857,7 +857,7 @@ moea_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend)
for (i = 0; i < 16; i++)
kernel_pmap->pm_sr[i] = EMPTY_SEGMENT + i;
CPU_FILL(&kernel_pmap->pm_active);
- LIST_INIT(&kernel_pmap->pmap_pvo);
+ RB_INIT(&kernel_pmap->pmap_pvo);
/*
* Set up the Open Firmware mappings
@@ -1436,7 +1436,7 @@ moea_page_set_memattr(mmu_t mmu, vm_page_t m, vm_memattr_t ma)
* Map a wired page into kernel virtual address space.
*/
void
-moea_kenter(mmu_t mmu, vm_offset_t va, vm_offset_t pa)
+moea_kenter(mmu_t mmu, vm_offset_t va, vm_paddr_t pa)
{
moea_kenter_attr(mmu, va, pa, VM_MEMATTR_DEFAULT);
@@ -1471,7 +1471,7 @@ moea_kenter_attr(mmu_t mmu, vm_offset_t va, vm_offset_t pa, vm_memattr_t ma)
* Extract the physical page address associated with the given kernel virtual
* address.
*/
-vm_offset_t
+vm_paddr_t
moea_kextract(mmu_t mmu, vm_offset_t va)
{
struct pvo_entry *pvo;
@@ -1512,8 +1512,8 @@ moea_kremove(mmu_t mmu, vm_offset_t va)
* first usable address after the mapped region.
*/
vm_offset_t
-moea_map(mmu_t mmu, vm_offset_t *virt, vm_offset_t pa_start,
- vm_offset_t pa_end, int prot)
+moea_map(mmu_t mmu, vm_offset_t *virt, vm_paddr_t pa_start,
+ vm_paddr_t pa_end, int prot)
{
vm_offset_t sva, va;
@@ -1587,7 +1587,7 @@ moea_pinit(mmu_t mmu, pmap_t pmap)
KASSERT((int)pmap < VM_MIN_KERNEL_ADDRESS, ("moea_pinit: virt pmap"));
PMAP_LOCK_INIT(pmap);
- LIST_INIT(&pmap->pmap_pvo);
+ RB_INIT(&pmap->pmap_pvo);
entropy = 0;
__asm __volatile("mftb %0" : "=r"(entropy));
@@ -1661,9 +1661,8 @@ void
moea_protect(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva,
vm_prot_t prot)
{
- struct pvo_entry *pvo;
+ struct pvo_entry *pvo, *tpvo, key;
struct pte *pt;
- int pteidx;
KASSERT(pm == &curproc->p_vmspace->vm_pmap || pm == kernel_pmap,
("moea_protect: non current pmap"));
@@ -1675,11 +1674,10 @@ moea_protect(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva,
vm_page_lock_queues();
PMAP_LOCK(pm);
- for (; sva < eva; sva += PAGE_SIZE) {
- pvo = moea_pvo_find_va(pm, sva, &pteidx);
- if (pvo == NULL)
- continue;
-
+ key.pvo_vaddr = sva;
+ for (pvo = RB_NFIND(pvo_tree, &pm->pmap_pvo, &key);
+ pvo != NULL && PVO_VADDR(pvo) < eva; pvo = tpvo) {
+ tpvo = RB_NEXT(pvo_tree, &pm->pmap_pvo, pvo);
if ((prot & VM_PROT_EXECUTE) == 0)
pvo->pvo_vaddr &= ~PVO_EXECUTABLE;
@@ -1687,7 +1685,7 @@ moea_protect(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva,
* Grab the PTE pointer before we diddle with the cached PTE
* copy.
*/
- pt = moea_pvo_to_pte(pvo, pteidx);
+ pt = moea_pvo_to_pte(pvo, -1);
/*
* Change the protection of the page.
*/
@@ -1766,23 +1764,15 @@ moea_release(mmu_t mmu, pmap_t pmap)
void
moea_remove(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva)
{
- struct pvo_entry *pvo, *tpvo;
- int pteidx;
+ struct pvo_entry *pvo, *tpvo, key;
vm_page_lock_queues();
PMAP_LOCK(pm);
- if ((eva - sva)/PAGE_SIZE < 10) {
- for (; sva < eva; sva += PAGE_SIZE) {
- pvo = moea_pvo_find_va(pm, sva, &pteidx);
- if (pvo != NULL)
- moea_pvo_remove(pvo, pteidx);
- }
- } else {
- LIST_FOREACH_SAFE(pvo, &pm->pmap_pvo, pvo_plink, tpvo) {
- if (PVO_VADDR(pvo) < sva || PVO_VADDR(pvo) >= eva)
- continue;
- moea_pvo_remove(pvo, -1);
- }
+ key.pvo_vaddr = sva;
+ for (pvo = RB_NFIND(pvo_tree, &pm->pmap_pvo, &key);
+ pvo != NULL && PVO_VADDR(pvo) < eva; pvo = tpvo) {
+ tpvo = RB_NEXT(pvo_tree, &pm->pmap_pvo, pvo);
+ moea_pvo_remove(pvo, -1);
}
PMAP_UNLOCK(pm);
vm_page_unlock_queues();
@@ -1946,7 +1936,7 @@ moea_pvo_enter(pmap_t pm, uma_zone_t zone, struct pvo_head *pvo_head,
/*
* Add to pmap list
*/
- LIST_INSERT_HEAD(&pm->pmap_pvo, pvo, pvo_plink);
+ RB_INSERT(pvo_tree, &pm->pmap_pvo, pvo);
/*
* Remember if the list was empty and therefore will be the first
@@ -2017,7 +2007,7 @@ moea_pvo_remove(struct pvo_entry *pvo, int pteidx)
* Remove this PVO from the PV and pmap lists.
*/
LIST_REMOVE(pvo, pvo_vlink);
- LIST_REMOVE(pvo, pvo_plink);
+ RB_REMOVE(pvo_tree, &pvo->pvo_pmap->pmap_pvo, pvo);
/*
* Remove this from the overflow list and return it to the pool
@@ -2418,7 +2408,7 @@ moea_bat_mapped(int idx, vm_offset_t pa, vm_size_t size)
}
boolean_t
-moea_dev_direct_mapped(mmu_t mmu, vm_offset_t pa, vm_size_t size)
+moea_dev_direct_mapped(mmu_t mmu, vm_paddr_t pa, vm_size_t size)
{
int i;
@@ -2441,7 +2431,7 @@ moea_dev_direct_mapped(mmu_t mmu, vm_offset_t pa, vm_size_t size)
* NOT real memory.
*/
void *
-moea_mapdev(mmu_t mmu, vm_offset_t pa, vm_size_t size)
+moea_mapdev(mmu_t mmu, vm_paddr_t pa, vm_size_t size)
{
return (moea_mapdev_attr(mmu, pa, size, VM_MEMATTR_DEFAULT));
diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c
index 624e088a0fae..ada0833d051b 100644
--- a/sys/powerpc/aim/mmu_oea64.c
+++ b/sys/powerpc/aim/mmu_oea64.c
@@ -223,8 +223,6 @@ u_int moea64_pteg_mask;
* PVO data.
*/
struct pvo_head *moea64_pvo_table; /* pvo entries by pteg index */
-struct pvo_head moea64_pvo_kunmanaged = /* list of unmanaged pages */
- LIST_HEAD_INITIALIZER(moea64_pvo_kunmanaged);
uma_zone_t moea64_upvo_zone; /* zone for pvo entries for unmanaged pages */
uma_zone_t moea64_mpvo_zone; /* zone for pvo entries for managed pages */
@@ -308,7 +306,7 @@ boolean_t moea64_is_modified(mmu_t, vm_page_t);
boolean_t moea64_is_prefaultable(mmu_t, pmap_t, vm_offset_t);
boolean_t moea64_is_referenced(mmu_t, vm_page_t);
boolean_t moea64_ts_referenced(mmu_t, vm_page_t);
-vm_offset_t moea64_map(mmu_t, vm_offset_t *, vm_offset_t, vm_offset_t, int);
+vm_offset_t moea64_map(mmu_t, vm_offset_t *, vm_paddr_t, vm_paddr_t, int);
boolean_t moea64_page_exists_quick(mmu_t, pmap_t, vm_page_t);
int moea64_page_wired_mappings(mmu_t, vm_page_t);
void moea64_pinit(mmu_t, pmap_t);
@@ -326,14 +324,14 @@ void moea64_zero_page_area(mmu_t, vm_page_t, int, int);
void moea64_zero_page_idle(mmu_t, vm_page_t);
void moea64_activate(mmu_t, struct thread *);
void moea64_deactivate(mmu_t, struct thread *);
-void *moea64_mapdev(mmu_t, vm_offset_t, vm_size_t);
+void *moea64_mapdev(mmu_t, vm_paddr_t, vm_size_t);
void *moea64_mapdev_attr(mmu_t, vm_offset_t, vm_size_t, vm_memattr_t);
void moea64_unmapdev(mmu_t, vm_offset_t, vm_size_t);
-vm_offset_t moea64_kextract(mmu_t, vm_offset_t);
+vm_paddr_t moea64_kextract(mmu_t, vm_offset_t);
void moea64_page_set_memattr(mmu_t, vm_page_t m, vm_memattr_t ma);
void moea64_kenter_attr(mmu_t, vm_offset_t, vm_offset_t, vm_memattr_t ma);
-void moea64_kenter(mmu_t, vm_offset_t, vm_offset_t);
-boolean_t moea64_dev_direct_mapped(mmu_t, vm_offset_t, vm_size_t);
+void moea64_kenter(mmu_t, vm_offset_t, vm_paddr_t);
+boolean_t moea64_dev_direct_mapped(mmu_t, vm_paddr_t, vm_size_t);
static void moea64_sync_icache(mmu_t, pmap_t, vm_offset_t, vm_size_t);
static mmu_method_t moea64_methods[] = {
@@ -622,8 +620,8 @@ moea64_setup_direct_map(mmu_t mmup, vm_offset_t kernelstart,
pte_lo |= LPTE_G;
moea64_pvo_enter(mmup, kernel_pmap, moea64_upvo_zone,
- &moea64_pvo_kunmanaged, pa, pa,
- pte_lo, PVO_WIRED | PVO_LARGE);
+ NULL, pa, pa, pte_lo,
+ PVO_WIRED | PVO_LARGE);
}
}
PMAP_UNLOCK(kernel_pmap);
@@ -820,7 +818,7 @@ moea64_mid_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend)
kernel_pmap->pmap_phys = kernel_pmap;
CPU_FILL(&kernel_pmap->pm_active);
- LIST_INIT(&kernel_pmap->pmap_pvo);
+ RB_INIT(&kernel_pmap->pmap_pvo);
PMAP_LOCK_INIT(kernel_pmap);
@@ -1179,7 +1177,7 @@ moea64_enter(mmu_t mmu, pmap_t pmap, vm_offset_t va, vm_page_t m,
int error;
if (!moea64_initialized) {
- pvo_head = &moea64_pvo_kunmanaged;
+ pvo_head = NULL;
pg = NULL;
zone = moea64_upvo_zone;
pvo_flags = 0;
@@ -1197,7 +1195,7 @@ moea64_enter(mmu_t mmu, pmap_t pmap, vm_offset_t va, vm_page_t m,
/* XXX change the pvo head for fake pages */
if ((m->oflags & VPO_UNMANAGED) != 0) {
pvo_flags &= ~PVO_MANAGED;
- pvo_head = &moea64_pvo_kunmanaged;
+ pvo_head = NULL;
zone = moea64_upvo_zone;
}
@@ -1315,7 +1313,6 @@ moea64_extract(mmu_t mmu, pmap_t pm, vm_offset_t va)
struct pvo_entry *pvo;
vm_paddr_t pa;
- LOCK_TABLE_RD();
PMAP_LOCK(pm);
pvo = moea64_pvo_find_va(pm, va);
if (pvo == NULL)
@@ -1323,7 +1320,6 @@ moea64_extract(mmu_t mmu, pmap_t pm, vm_offset_t va)
else
pa = (pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN) |
(va - PVO_VADDR(pvo));
- UNLOCK_TABLE_RD();
PMAP_UNLOCK(pm);
return (pa);
}
@@ -1333,37 +1329,6 @@ moea64_extract(mmu_t mmu, pmap_t pm, vm_offset_t va)
* pmap and virtual address pair if that mapping permits the given
* protection.
*/
-
-extern int pa_tryrelock_restart;
-
-static int
-vm_page_pa_tryrelock_moea64(pmap_t pmap, vm_paddr_t pa, vm_paddr_t *locked)
-{
- /*
- * This is a duplicate of vm_page_pa_tryrelock(), but with proper
- * handling of the table lock
- */
- vm_paddr_t lockpa;
-
- lockpa = *locked;
- *locked = pa;
- if (lockpa) {
- PA_LOCK_ASSERT(lockpa, MA_OWNED);
- if (PA_LOCKPTR(pa) == PA_LOCKPTR(lockpa))
- return (0);
- PA_UNLOCK(lockpa);
- }
- if (PA_TRYLOCK(pa))
- return (0);
- UNLOCK_TABLE_RD();
- PMAP_UNLOCK(pmap);
- atomic_add_int(&pa_tryrelock_restart, 1);
- PA_LOCK(pa);
- LOCK_TABLE_RD();
- PMAP_LOCK(pmap);
- return (EAGAIN);
-}
-
vm_page_t
moea64_extract_and_hold(mmu_t mmu, pmap_t pmap, vm_offset_t va, vm_prot_t prot)
{
@@ -1373,21 +1338,19 @@ moea64_extract_and_hold(mmu_t mmu, pmap_t pmap, vm_offset_t va, vm_prot_t prot)
m = NULL;
pa = 0;
- LOCK_TABLE_RD();
PMAP_LOCK(pmap);
retry:
pvo = moea64_pvo_find_va(pmap, va & ~ADDR_POFF);
if (pvo != NULL && (pvo->pvo_pte.lpte.pte_hi & LPTE_VALID) &&
((pvo->pvo_pte.lpte.pte_lo & LPTE_PP) == LPTE_RW ||
(prot & VM_PROT_WRITE) == 0)) {
- if (vm_page_pa_tryrelock_moea64(pmap,
+ if (vm_page_pa_tryrelock(pmap,
pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN, &pa))
goto retry;
m = PHYS_TO_VM_PAGE(pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN);
vm_page_hold(m);
}
PA_UNLOCK_COND(pa);
- UNLOCK_TABLE_RD();
PMAP_UNLOCK(pmap);
return (m);
}
@@ -1435,8 +1398,7 @@ moea64_uma_page_alloc(uma_zone_t zone, int bytes, u_int8_t *flags, int wait)
PMAP_LOCK(kernel_pmap);
moea64_pvo_enter(installed_mmu, kernel_pmap, moea64_upvo_zone,
- &moea64_pvo_kunmanaged, va, VM_PAGE_TO_PHYS(m), LPTE_M,
- PVO_WIRED | PVO_BOOTSTRAP);
+ NULL, va, VM_PAGE_TO_PHYS(m), LPTE_M, PVO_WIRED | PVO_BOOTSTRAP);
if (needed_lock)
PMAP_UNLOCK(kernel_pmap);
@@ -1510,12 +1472,10 @@ moea64_is_prefaultable(mmu_t mmu, pmap_t pmap, vm_offset_t va)
struct pvo_entry *pvo;
boolean_t rv;
- LOCK_TABLE_RD();
PMAP_LOCK(pmap);
pvo = moea64_pvo_find_va(pmap, va & ~ADDR_POFF);
rv = pvo == NULL || (pvo->pvo_pte.lpte.pte_hi & LPTE_VALID) == 0;
PMAP_UNLOCK(pmap);
- UNLOCK_TABLE_RD();
return (rv);
}
@@ -1671,7 +1631,7 @@ moea64_kenter_attr(mmu_t mmu, vm_offset_t va, vm_offset_t pa, vm_memattr_t ma)
LOCK_TABLE_WR();
PMAP_LOCK(kernel_pmap);
error = moea64_pvo_enter(mmu, kernel_pmap, moea64_upvo_zone,
- &moea64_pvo_kunmanaged, va, pa, pte_lo, PVO_WIRED);
+ NULL, va, pa, pte_lo, PVO_WIRED);
PMAP_UNLOCK(kernel_pmap);
UNLOCK_TABLE_WR();
@@ -1681,7 +1641,7 @@ moea64_kenter_attr(mmu_t mmu, vm_offset_t va, vm_offset_t pa, vm_memattr_t ma)
}
void
-moea64_kenter(mmu_t mmu, vm_offset_t va, vm_offset_t pa)
+moea64_kenter(mmu_t mmu, vm_offset_t va, vm_paddr_t pa)
{
moea64_kenter_attr(mmu, va, pa, VM_MEMATTR_DEFAULT);
@@ -1691,7 +1651,7 @@ moea64_kenter(mmu_t mmu, vm_offset_t va, vm_offset_t pa)
* Extract the physical page address associated with the given kernel virtual
* address.
*/
-vm_offset_t
+vm_paddr_t
moea64_kextract(mmu_t mmu, vm_offset_t va)
{
struct pvo_entry *pvo;
@@ -1704,13 +1664,11 @@ moea64_kextract(mmu_t mmu, vm_offset_t va)
if (va < VM_MIN_KERNEL_ADDRESS)
return (va);
- LOCK_TABLE_RD();
PMAP_LOCK(kernel_pmap);
pvo = moea64_pvo_find_va(kernel_pmap, va);
KASSERT(pvo != NULL, ("moea64_kextract: no addr found for %#" PRIxPTR,
va));
pa = (pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN) | (va - PVO_VADDR(pvo));
- UNLOCK_TABLE_RD();
PMAP_UNLOCK(kernel_pmap);
return (pa);
}
@@ -1734,8 +1692,8 @@ moea64_kremove(mmu_t mmu, vm_offset_t va)
* first usable address after the mapped region.
*/
vm_offset_t
-moea64_map(mmu_t mmu, vm_offset_t *virt, vm_offset_t pa_start,
- vm_offset_t pa_end, int prot)
+moea64_map(mmu_t mmu, vm_offset_t *virt, vm_paddr_t pa_start,
+ vm_paddr_t pa_end, int prot)
{
vm_offset_t sva, va;
@@ -1857,7 +1815,7 @@ void
moea64_pinit(mmu_t mmu, pmap_t pmap)
{
PMAP_LOCK_INIT(pmap);
- LIST_INIT(&pmap->pmap_pvo);
+ RB_INIT(&pmap->pmap_pvo);
pmap->pm_slb_tree_root = slb_alloc_tree();
pmap->pm_slb = slb_alloc_user_cache();
@@ -1871,7 +1829,7 @@ moea64_pinit(mmu_t mmu, pmap_t pmap)
uint32_t hash;
PMAP_LOCK_INIT(pmap);
- LIST_INIT(&pmap->pmap_pvo);
+ RB_INIT(&pmap->pmap_pvo);
if (pmap_bootstrapped)
pmap->pmap_phys = (pmap_t)moea64_kextract(mmu,
@@ -1967,7 +1925,7 @@ void
moea64_protect(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva,
vm_prot_t prot)
{
- struct pvo_entry *pvo, *tpvo;
+ struct pvo_entry *pvo, *tpvo, key;
CTR4(KTR_PMAP, "moea64_protect: pm=%p sva=%#x eva=%#x prot=%#x", pm,
sva, eva, prot);
@@ -1982,26 +1940,11 @@ moea64_protect(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva,
LOCK_TABLE_RD();
PMAP_LOCK(pm);
- if ((eva - sva)/PAGE_SIZE < pm->pm_stats.resident_count) {
- while (sva < eva) {
- #ifdef __powerpc64__
- if (pm != kernel_pmap &&
- user_va_to_slb_entry(pm, sva) == NULL) {
- sva = roundup2(sva + 1, SEGMENT_LENGTH);
- continue;
- }
- #endif
- pvo = moea64_pvo_find_va(pm, sva);
- if (pvo != NULL)
- moea64_pvo_protect(mmu, pm, pvo, prot);
- sva += PAGE_SIZE;
- }
- } else {
- LIST_FOREACH_SAFE(pvo, &pm->pmap_pvo, pvo_plink, tpvo) {
- if (PVO_VADDR(pvo) < sva || PVO_VADDR(pvo) >= eva)
- continue;
- moea64_pvo_protect(mmu, pm, pvo, prot);
- }
+ key.pvo_vaddr = sva;
+ for (pvo = RB_NFIND(pvo_tree, &pm->pmap_pvo, &key);
+ pvo != NULL && PVO_VADDR(pvo) < eva; pvo = tpvo) {
+ tpvo = RB_NEXT(pvo_tree, &pm->pmap_pvo, pvo);
+ moea64_pvo_protect(mmu, pm, pvo, prot);
}
UNLOCK_TABLE_RD();
PMAP_UNLOCK(pm);
@@ -2080,7 +2023,7 @@ moea64_remove_pages(mmu_t mmu, pmap_t pm)
LOCK_TABLE_WR();
PMAP_LOCK(pm);
- LIST_FOREACH_SAFE(pvo, &pm->pmap_pvo, pvo_plink, tpvo) {
+ RB_FOREACH_SAFE(pvo, pvo_tree, &pm->pmap_pvo, tpvo) {
if (!(pvo->pvo_vaddr & PVO_WIRED))
moea64_pvo_remove(mmu, pvo);
}
@@ -2094,7 +2037,7 @@ moea64_remove_pages(mmu_t mmu, pmap_t pm)
void
moea64_remove(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva)
{
- struct pvo_entry *pvo, *tpvo;
+ struct pvo_entry *pvo, *tpvo, key;
/*
* Perform an unsynchronized read. This is, however, safe.
@@ -2104,26 +2047,11 @@ moea64_remove(mmu_t mmu, pmap_t pm, vm_offset_t sva, vm_offset_t eva)
LOCK_TABLE_WR();
PMAP_LOCK(pm);
- if ((eva - sva)/PAGE_SIZE < pm->pm_stats.resident_count) {
- while (sva < eva) {
- #ifdef __powerpc64__
- if (pm != kernel_pmap &&
- user_va_to_slb_entry(pm, sva) == NULL) {
- sva = roundup2(sva + 1, SEGMENT_LENGTH);
- continue;
- }
- #endif
- pvo = moea64_pvo_find_va(pm, sva);
- if (pvo != NULL)
- moea64_pvo_remove(mmu, pvo);
- sva += PAGE_SIZE;
- }
- } else {
- LIST_FOREACH_SAFE(pvo, &pm->pmap_pvo, pvo_plink, tpvo) {
- if (PVO_VADDR(pvo) < sva || PVO_VADDR(pvo) >= eva)
- continue;
- moea64_pvo_remove(mmu, pvo);
- }
+ key.pvo_vaddr = sva;
+ for (pvo = RB_NFIND(pvo_tree, &pm->pmap_pvo, &key);
+ pvo != NULL && PVO_VADDR(pvo) < eva; pvo = tpvo) {
+ tpvo = RB_NEXT(pvo_tree, &pm->pmap_pvo, pvo);
+ moea64_pvo_remove(mmu, pvo);
}
UNLOCK_TABLE_WR();
PMAP_UNLOCK(pm);
@@ -2275,12 +2203,6 @@ moea64_pvo_enter(mmu_t mmu, pmap_t pm, uma_zone_t zone,
moea64_bpvo_pool_index++;
bootstrap = 1;
} else {
- /*
- * Note: drop the table lock around the UMA allocation in
- * case the UMA allocator needs to manipulate the page
- * table. The mapping we are working with is already
- * protected by the PMAP lock.
- */
pvo = uma_zalloc(zone, M_NOWAIT);
}
@@ -2297,7 +2219,7 @@ moea64_pvo_enter(mmu_t mmu, pmap_t pm, uma_zone_t zone,
if (flags & PVO_WIRED)
pvo->pvo_vaddr |= PVO_WIRED;
- if (pvo_head != &moea64_pvo_kunmanaged)
+ if (pvo_head != NULL)
pvo->pvo_vaddr |= PVO_MANAGED;
if (bootstrap)
pvo->pvo_vaddr |= PVO_BOOTSTRAP;
@@ -2310,15 +2232,17 @@ moea64_pvo_enter(mmu_t mmu, pmap_t pm, uma_zone_t zone,
/*
* Add to pmap list
*/
- LIST_INSERT_HEAD(&pm->pmap_pvo, pvo, pvo_plink);
+ RB_INSERT(pvo_tree, &pm->pmap_pvo, pvo);
/*
* Remember if the list was empty and therefore will be the first
* item.
*/
- if (LIST_FIRST(pvo_head) == NULL)
- first = 1;
- LIST_INSERT_HEAD(pvo_head, pvo, pvo_vlink);
+ if (pvo_head != NULL) {
+ if (LIST_FIRST(pvo_head) == NULL)
+ first = 1;
+ LIST_INSERT_HEAD(pvo_head, pvo, pvo_vlink);
+ }
if (pvo->pvo_vaddr & PVO_WIRED) {
pvo->pvo_pte.lpte.pte_hi |= LPTE_WIRED;
@@ -2381,10 +2305,9 @@ moea64_pvo_remove(mmu_t mmu, struct pvo_entry *pvo)
pvo->pvo_pmap->pm_stats.wired_count--;
/*
- * Remove this PVO from the PV and pmap lists.
+ * Remove this PVO from the pmap list.
*/
- LIST_REMOVE(pvo, pvo_vlink);
- LIST_REMOVE(pvo, pvo_plink);
+ RB_REMOVE(pvo_tree, &pvo->pvo_pmap->pmap_pvo, pvo);
/*
* Remove this from the overflow list and return it to the pool
@@ -2398,6 +2321,7 @@ moea64_pvo_remove(mmu_t mmu, struct pvo_entry *pvo)
pg = PHYS_TO_VM_PAGE(pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN);
if ((pvo->pvo_vaddr & PVO_MANAGED) == PVO_MANAGED && pg != NULL) {
+ LIST_REMOVE(pvo, pvo_vlink);
if ((pvo->pvo_pte.lpte.pte_lo & LPTE_PP) != LPTE_BR) {
if (pvo->pvo_pte.lpte.pte_lo & LPTE_CHG)
vm_page_dirty(pg);
@@ -2421,41 +2345,10 @@ moea64_pvo_remove(mmu_t mmu, struct pvo_entry *pvo)
static struct pvo_entry *
moea64_pvo_find_va(pmap_t pm, vm_offset_t va)
{
- struct pvo_entry *pvo;
- int ptegidx;
- uint64_t vsid;
- #ifdef __powerpc64__
- uint64_t slbv;
-
- if (pm == kernel_pmap) {
- slbv = kernel_va_to_slbv(va);
- } else {
- struct slb *slb;
- slb = user_va_to_slb_entry(pm, va);
- /* The page is not mapped if the segment isn't */
- if (slb == NULL)
- return NULL;
- slbv = slb->slbv;
- }
+ struct pvo_entry key;
- vsid = (slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT;
- if (slbv & SLBV_L)
- va &= ~moea64_large_page_mask;
- else
- va &= ~ADDR_POFF;
- ptegidx = va_to_pteg(vsid, va, slbv & SLBV_L);
- #else
- va &= ~ADDR_POFF;
- vsid = va_to_vsid(pm, va);
- ptegidx = va_to_pteg(vsid, va, 0);
- #endif
-
- LIST_FOREACH(pvo, &moea64_pvo_table[ptegidx], pvo_olink) {
- if (pvo->pvo_pmap == pm && PVO_VADDR(pvo) == va)
- break;
- }
-
- return (pvo);
+ key.pvo_vaddr = va & ~ADDR_POFF;
+ return (RB_FIND(pvo_tree, &pm->pmap_pvo, &key));
}
static boolean_t
@@ -2547,23 +2440,23 @@ moea64_clear_bit(mmu_t mmu, vm_page_t m, u_int64_t ptebit)
}
boolean_t
-moea64_dev_direct_mapped(mmu_t mmu, vm_offset_t pa, vm_size_t size)
+moea64_dev_direct_mapped(mmu_t mmu, vm_paddr_t pa, vm_size_t size)
{
- struct pvo_entry *pvo;
+ struct pvo_entry *pvo, key;
vm_offset_t ppa;
int error = 0;
- LOCK_TABLE_RD();
PMAP_LOCK(kernel_pmap);
- for (ppa = pa & ~ADDR_POFF; ppa < pa + size; ppa += PAGE_SIZE) {
- pvo = moea64_pvo_find_va(kernel_pmap, ppa);
+ key.pvo_vaddr = ppa = pa & ~ADDR_POFF;
+ for (pvo = RB_FIND(pvo_tree, &kernel_pmap->pmap_pvo, &key);
+ ppa < pa + size; ppa += PAGE_SIZE,
+ pvo = RB_NEXT(pvo_tree, &kernel_pmap->pmap_pvo, pvo)) {
if (pvo == NULL ||
(pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN) != ppa) {
error = EFAULT;
break;
}
}
- UNLOCK_TABLE_RD();
PMAP_UNLOCK(kernel_pmap);
return (error);
@@ -2600,7 +2493,7 @@ moea64_mapdev_attr(mmu_t mmu, vm_offset_t pa, vm_size_t size, vm_memattr_t ma)
}
void *
-moea64_mapdev(mmu_t mmu, vm_offset_t pa, vm_size_t size)
+moea64_mapdev(mmu_t mmu, vm_paddr_t pa, vm_size_t size)
{
return moea64_mapdev_attr(mmu, pa, size, VM_MEMATTR_DEFAULT);
@@ -2626,7 +2519,6 @@ moea64_sync_icache(mmu_t mmu, pmap_t pm, vm_offset_t va, vm_size_t sz)
vm_paddr_t pa;
vm_size_t len;
- LOCK_TABLE_RD();
PMAP_LOCK(pm);
while (sz > 0) {
lim = round_page(va);
@@ -2640,6 +2532,5 @@ moea64_sync_icache(mmu_t mmu, pmap_t pm, vm_offset_t va, vm_size_t sz)
va += len;
sz -= len;
}
- UNLOCK_TABLE_RD();
PMAP_UNLOCK(pm);
}
diff --git a/sys/powerpc/booke/locore.S b/sys/powerpc/booke/locore.S
index 293eec34bdd8..16a919629af3 100644
--- a/sys/powerpc/booke/locore.S
+++ b/sys/powerpc/booke/locore.S
@@ -218,7 +218,7 @@ done_mapping:
mr %r3, %r30
mr %r4, %r31
- /* Prepare e500 core */
+ /* Prepare core */
bl booke_init
/* Switch to thread0.td_kstack now */
@@ -242,14 +242,20 @@ done_mapping:
__boot_page:
bl 1f
- .globl kernload_ap
-kernload_ap:
+ .globl bp_trace
+bp_trace:
+ .long 0
+
+ .globl bp_kernload
+bp_kernload:
.long 0
/*
* Initial configuration
*/
1:
+ mflr %r31 /* r31 hold the address of bp_trace */
+
/* Set HIDs */
lis %r3, HID0_E500_DEFAULT_SET@h
ori %r3, %r3, HID0_E500_DEFAULT_SET@l
@@ -318,15 +324,15 @@ kernload_ap:
mtspr SPR_MAS2, %r3
isync
- /* Retrieve kernel load [physical] address from kernload_ap */
+ /* Retrieve kernel load [physical] address from bp_kernload */
bl 4f
4: mflr %r3
rlwinm %r3, %r3, 0, 0, 19
- lis %r4, kernload_ap@h
- ori %r4, %r4, kernload_ap@l
+ lis %r4, bp_kernload@h
+ ori %r4, %r4, bp_kernload@l
lis %r5, __boot_page@h
ori %r5, %r5, __boot_page@l
- sub %r4, %r4, %r5 /* offset of kernload_ap within __boot_page */
+ sub %r4, %r4, %r5 /* offset of bp_kernload within __boot_page */
lwzx %r3, %r4, %r3
/* Set RPN and protection */
diff --git a/sys/powerpc/booke/machdep.c b/sys/powerpc/booke/machdep.c
index 82a37e141000..09377fe0b5bc 100644
--- a/sys/powerpc/booke/machdep.c
+++ b/sys/powerpc/booke/machdep.c
@@ -185,8 +185,8 @@ SYSCTL_INT(_machdep, CPU_CACHELINE, cacheline_size,
int hw_direct_map = 0;
-static void cpu_e500_startup(void *);
-SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_e500_startup, NULL);
+static void cpu_booke_startup(void *);
+SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_booke_startup, NULL);
void print_kernel_section_addr(void);
void print_kenv(void);
@@ -195,7 +195,7 @@ u_int booke_init(uint32_t, uint32_t);
extern int elf32_nxstack;
static void
-cpu_e500_startup(void *dummy)
+cpu_booke_startup(void *dummy)
{
int indx, size;
@@ -392,6 +392,7 @@ booke_init(uint32_t arg1, uint32_t arg2)
debugf(" boothowto = 0x%08x\n", boothowto);
debugf(" kernel ccsrbar = 0x%08x\n", CCSRBAR_VA);
debugf(" MSR = 0x%08x\n", mfmsr());
+#if defined(BOOKE_E500)
debugf(" HID0 = 0x%08x\n", mfspr(SPR_HID0));
debugf(" HID1 = 0x%08x\n", mfspr(SPR_HID1));
debugf(" BUCSR = 0x%08x\n", mfspr(SPR_BUCSR));
@@ -399,13 +400,16 @@ booke_init(uint32_t arg1, uint32_t arg2)
__asm __volatile("msync; isync");
csr = ccsr_read4(OCP85XX_L2CTL);
debugf(" L2CTL = 0x%08x\n", csr);
+#endif
debugf(" dtbp = 0x%08x\n", (uint32_t)dtbp);
print_kernel_section_addr();
print_kenv();
+#if defined(BOOKE_E500)
//tlb1_print_entries();
//tlb1_print_tlbentries();
+#endif
kdb_init();
@@ -421,8 +425,10 @@ booke_init(uint32_t arg1, uint32_t arg2)
pmap_mmu_install(MMU_TYPE_BOOKE, 0);
pmap_bootstrap((uintptr_t)kernel_text, end);
debugf("MSR = 0x%08x\n", mfmsr());
+#if defined(BOOKE_E500)
//tlb1_print_entries();
//tlb1_print_tlbentries();
+#endif
/* Initialize params/tunables that are derived from memsize. */
init_param2(physmem);
@@ -538,7 +544,8 @@ cpu_halt(void)
{
mtmsr(mfmsr() & ~(PSL_CE | PSL_EE | PSL_ME | PSL_DE));
- while (1);
+ while (1)
+ ;
}
int
diff --git a/sys/powerpc/booke/platform_bare.c b/sys/powerpc/booke/platform_bare.c
index f04bf9656bd7..7b98059d7e64 100644
--- a/sys/powerpc/booke/platform_bare.c
+++ b/sys/powerpc/booke/platform_bare.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2008-2009 Semihalf, Rafal Jaworowski
+ * Copyright (c) 2008-2012 Semihalf.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -56,7 +56,8 @@ __FBSDID("$FreeBSD$");
#ifdef SMP
extern void *ap_pcpu;
extern uint8_t __boot_page[]; /* Boot page body */
-extern uint32_t kernload_ap; /* Kernel physical load address */
+extern uint32_t bp_kernload; /* Kernel physical load address */
+extern uint32_t bp_trace; /* AP boot trace field */
#endif
extern uint32_t *bootinfo;
@@ -72,7 +73,7 @@ static int bare_smp_next_cpu(platform_t, struct cpuref *cpuref);
static int bare_smp_get_bsp(platform_t, struct cpuref *cpuref);
static int bare_smp_start_cpu(platform_t, struct pcpu *cpu);
-static void e500_reset(platform_t);
+static void booke_reset(platform_t);
static platform_method_t bare_methods[] = {
PLATFORMMETHOD(platform_probe, bare_probe),
@@ -84,7 +85,7 @@ static platform_method_t bare_methods[] = {
PLATFORMMETHOD(platform_smp_get_bsp, bare_smp_get_bsp),
PLATFORMMETHOD(platform_smp_start_cpu, bare_smp_start_cpu),
- PLATFORMMETHOD(platform_reset, e500_reset),
+ PLATFORMMETHOD(platform_reset, booke_reset),
{ 0, 0 }
};
@@ -100,26 +101,16 @@ PLATFORM_DEF(bare_platform);
static int
bare_probe(platform_t plat)
{
- uint32_t ver, sr;
+ phandle_t cpus, child;
+ uint32_t sr;
int i, law_max, tgt;
- ver = SVR_VER(mfspr(SPR_SVR));
- switch (ver & ~0x0008) { /* Mask Security Enabled bit */
- case SVR_P4080:
- maxcpu = 8;
- break;
- case SVR_P4040:
- maxcpu = 4;
- break;
- case SVR_MPC8572:
- case SVR_P1020:
- case SVR_P2020:
- maxcpu = 2;
- break;
- default:
+ if ((cpus = OF_finddevice("/cpus")) != 0) {
+ for (maxcpu = 0, child = OF_child(cpus); child != 0;
+ child = OF_peer(child), maxcpu++)
+ ;
+ } else
maxcpu = 1;
- break;
- }
/*
* Clear local access windows. Skip DRAM entries, so we don't shoot
@@ -262,8 +253,8 @@ bare_smp_start_cpu(platform_t plat, struct pcpu *pc)
eebpcr = ccsr_read4(OCP85XX_EEBPCR);
if ((eebpcr & (1 << (pc->pc_cpuid + 24))) != 0) {
- printf("%s: CPU=%d already out of hold-off state!\n",
- __func__, pc->pc_cpuid);
+ printf("SMP: CPU %d already out of hold-off state!\n",
+ pc->pc_cpuid);
return (ENXIO);
}
@@ -273,12 +264,13 @@ bare_smp_start_cpu(platform_t plat, struct pcpu *pc)
/*
* Set BPTR to the physical address of the boot page
*/
- bptr = ((uint32_t)__boot_page - KERNBASE) + kernload_ap;
+ bptr = ((uint32_t)__boot_page - KERNBASE) + bp_kernload;
ccsr_write4(OCP85XX_BPTR, (bptr >> 12) | 0x80000000);
/*
* Release AP from hold-off state
*/
+ bp_trace = 0;
eebpcr |= (1 << (pc->pc_cpuid + 24));
ccsr_write4(OCP85XX_EEBPCR, eebpcr);
__asm __volatile("isync; msync");
@@ -287,6 +279,16 @@ bare_smp_start_cpu(platform_t plat, struct pcpu *pc)
while (!pc->pc_awake && timeout--)
DELAY(1000); /* wait 1ms */
+ /*
+ * Disable boot page translation so that the 4K page at the default
+ * address (= 0xfffff000) isn't permanently remapped and thus not
+ * usable otherwise.
+ */
+ ccsr_write4(OCP85XX_BPTR, 0);
+
+ if (!pc->pc_awake)
+ printf("SMP: CPU %d didn't wake up (trace code %#x).\n",
+ pc->pc_awake, bp_trace);
return ((pc->pc_awake) ? 0 : EBUSY);
#else
/* No SMP support */
@@ -295,7 +297,7 @@ bare_smp_start_cpu(platform_t plat, struct pcpu *pc)
}
static void
-e500_reset(platform_t plat)
+booke_reset(platform_t plat)
{
/*
@@ -316,6 +318,7 @@ e500_reset(platform_t plat)
mtspr(SPR_DBCR0, mfspr(SPR_DBCR0) | DBCR0_IDM | DBCR0_RST_SYSTEM);
printf("Reset failed...\n");
- while (1);
+ while (1)
+ ;
}
diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c
index 712967fc767b..beb6dd76c475 100644
--- a/sys/powerpc/booke/pmap.c
+++ b/sys/powerpc/booke/pmap.c
@@ -101,10 +101,6 @@ __FBSDID("$FreeBSD$");
#define TODO panic("%s: not implemented", __func__);
-#include "opt_sched.h"
-#ifndef SCHED_4BSD
-#error "e500 only works with SCHED_4BSD which uses a global scheduler lock."
-#endif
extern struct mtx sched_lock;
extern int dumpsys_minidump;
@@ -115,7 +111,7 @@ extern unsigned char _end[];
extern uint32_t *bootinfo;
#ifdef SMP
-extern uint32_t kernload_ap;
+extern uint32_t bp_kernload;
#endif
vm_paddr_t kernload;
@@ -291,7 +287,7 @@ static boolean_t mmu_booke_is_modified(mmu_t, vm_page_t);
static boolean_t mmu_booke_is_prefaultable(mmu_t, pmap_t, vm_offset_t);
static boolean_t mmu_booke_is_referenced(mmu_t, vm_page_t);
static boolean_t mmu_booke_ts_referenced(mmu_t, vm_page_t);
-static vm_offset_t mmu_booke_map(mmu_t, vm_offset_t *, vm_offset_t, vm_offset_t,
+static vm_offset_t mmu_booke_map(mmu_t, vm_offset_t *, vm_paddr_t, vm_paddr_t,
int);
static int mmu_booke_mincore(mmu_t, pmap_t, vm_offset_t,
vm_paddr_t *);
@@ -316,12 +312,12 @@ static void mmu_booke_zero_page_idle(mmu_t, vm_page_t);
static void mmu_booke_activate(mmu_t, struct thread *);
static void mmu_booke_deactivate(mmu_t, struct thread *);
static void mmu_booke_bootstrap(mmu_t, vm_offset_t, vm_offset_t);
-static void *mmu_booke_mapdev(mmu_t, vm_offset_t, vm_size_t);
+static void *mmu_booke_mapdev(mmu_t, vm_paddr_t, vm_size_t);
static void mmu_booke_unmapdev(mmu_t, vm_offset_t, vm_size_t);
-static vm_offset_t mmu_booke_kextract(mmu_t, vm_offset_t);
-static void mmu_booke_kenter(mmu_t, vm_offset_t, vm_offset_t);
+static vm_paddr_t mmu_booke_kextract(mmu_t, vm_offset_t);
+static void mmu_booke_kenter(mmu_t, vm_offset_t, vm_paddr_t);
static void mmu_booke_kremove(mmu_t, vm_offset_t);
-static boolean_t mmu_booke_dev_direct_mapped(mmu_t, vm_offset_t, vm_size_t);
+static boolean_t mmu_booke_dev_direct_mapped(mmu_t, vm_paddr_t, vm_size_t);
static void mmu_booke_sync_icache(mmu_t, pmap_t, vm_offset_t,
vm_size_t);
static vm_offset_t mmu_booke_dumpsys_map(mmu_t, struct pmap_md *,
@@ -967,10 +963,9 @@ mmu_booke_bootstrap(mmu_t mmu, vm_offset_t start, vm_offset_t kernelend)
debugf("mmu_booke_bootstrap: entered\n");
#ifdef SMP
- kernload_ap = kernload;
+ bp_kernload = kernload;
#endif
-
/* Initialize invalidation mutex */
mtx_init(&tlbivax_mutex, "tlbivax", NULL, MTX_SPIN);
@@ -981,8 +976,13 @@ mmu_booke_bootstrap(mmu_t mmu, vm_offset_t start, vm_offset_t kernelend)
* Align kernel start and end address (kernel image).
* Note that kernel end does not necessarily relate to kernsize.
* kernsize is the size of the kernel that is actually mapped.
+ * Also note that "start - 1" is deliberate. With SMP, the
+ * entry point is exactly a page from the actual load address.
+ * As such, trunc_page() has no effect and we're off by a page.
+ * Since we always have the ELF header between the load address
+ * and the entry point, we can safely subtract 1 to compensate.
*/
- kernstart = trunc_page(start);
+ kernstart = trunc_page(start - 1);
data_start = round_page(kernelend);
data_end = data_start;
@@ -1233,9 +1233,9 @@ mmu_booke_bootstrap(mmu_t mmu, vm_offset_t start, vm_offset_t kernelend)
* entries, but for pte_vatopa() to work correctly with kernel area
* addresses.
*/
- for (va = KERNBASE; va < data_end; va += PAGE_SIZE) {
+ for (va = kernstart; va < data_end; va += PAGE_SIZE) {
pte = &(kernel_pmap->pm_pdir[PDIR_IDX(va)][PTBL_IDX(va)]);
- pte->rpn = kernload + (va - KERNBASE);
+ pte->rpn = kernload + (va - kernstart);
pte->flags = PTE_M | PTE_SR | PTE_SW | PTE_SX | PTE_WIRED |
PTE_VALID;
}
@@ -1387,7 +1387,7 @@ mmu_booke_qremove(mmu_t mmu, vm_offset_t sva, int count)
* Map a wired page into kernel virtual address space.
*/
static void
-mmu_booke_kenter(mmu_t mmu, vm_offset_t va, vm_offset_t pa)
+mmu_booke_kenter(mmu_t mmu, vm_offset_t va, vm_paddr_t pa)
{
unsigned int pdir_idx = PDIR_IDX(va);
unsigned int ptbl_idx = PTBL_IDX(va);
@@ -1397,9 +1397,7 @@ mmu_booke_kenter(mmu_t mmu, vm_offset_t va, vm_offset_t pa)
KASSERT(((va >= VM_MIN_KERNEL_ADDRESS) &&
(va <= VM_MAX_KERNEL_ADDRESS)), ("mmu_booke_kenter: invalid va"));
- flags = 0;
- flags |= (PTE_SR | PTE_SW | PTE_SX | PTE_WIRED | PTE_VALID);
- flags |= PTE_M;
+ flags = PTE_M | PTE_SR | PTE_SW | PTE_SX | PTE_WIRED | PTE_VALID;
pte = &(kernel_pmap->pm_pdir[pdir_idx][ptbl_idx]);
@@ -1812,8 +1810,8 @@ mmu_booke_remove_all(mmu_t mmu, vm_page_t m)
* Map a range of physical addresses into kernel virtual address space.
*/
static vm_offset_t
-mmu_booke_map(mmu_t mmu, vm_offset_t *virt, vm_offset_t pa_start,
- vm_offset_t pa_end, int prot)
+mmu_booke_map(mmu_t mmu, vm_offset_t *virt, vm_paddr_t pa_start,
+ vm_paddr_t pa_end, int prot)
{
vm_offset_t sva = *virt;
vm_offset_t va = sva;
@@ -2439,7 +2437,7 @@ mmu_booke_page_wired_mappings(mmu_t mmu, vm_page_t m)
}
static int
-mmu_booke_dev_direct_mapped(mmu_t mmu, vm_offset_t pa, vm_size_t size)
+mmu_booke_dev_direct_mapped(mmu_t mmu, vm_paddr_t pa, vm_size_t size)
{
int i;
vm_offset_t va;
@@ -2597,7 +2595,7 @@ mmu_booke_scan_md(mmu_t mmu, struct pmap_md *prev)
* for mapping device memory, NOT real memory.
*/
static void *
-mmu_booke_mapdev(mmu_t mmu, vm_offset_t pa, vm_size_t size)
+mmu_booke_mapdev(mmu_t mmu, vm_paddr_t pa, vm_size_t size)
{
void *res;
uintptr_t va;
diff --git a/sys/powerpc/conf/MPC85XX b/sys/powerpc/conf/MPC85XX
index e7774b2d5ee7..00b0dcaf262f 100644
--- a/sys/powerpc/conf/MPC85XX
+++ b/sys/powerpc/conf/MPC85XX
@@ -4,7 +4,8 @@
# $FreeBSD$
#
-cpu E500
+cpu BOOKE
+cpu BOOKE_E500
ident MPC85XX
machine powerpc powerpc
diff --git a/sys/powerpc/conf/NOTES b/sys/powerpc/conf/NOTES
index 0045763cd407..33a044886707 100644
--- a/sys/powerpc/conf/NOTES
+++ b/sys/powerpc/conf/NOTES
@@ -14,7 +14,8 @@
#
# You must specify at least one CPU (the one you intend to run on).
cpu AIM
-#cpu E500
+#cpu BOOKE_E500
+#cpu BOOKE_PPC440
options FPU_EMU
diff --git a/sys/powerpc/include/atomic.h b/sys/powerpc/include/atomic.h
index 8ec3ea0282b0..c2a9921836e1 100644
--- a/sys/powerpc/include/atomic.h
+++ b/sys/powerpc/include/atomic.h
@@ -36,23 +36,30 @@
#error this file needs sys/cdefs.h as a prerequisite
#endif
-/* NOTE: lwsync is equivalent to sync on systems without lwsync */
-#define mb() __asm __volatile("lwsync" : : : "memory")
-#ifdef __powerpc64__
-#define rmb() __asm __volatile("lwsync" : : : "memory")
-#define wmb() __asm __volatile("lwsync" : : : "memory")
-#else
-#define rmb() __asm __volatile("lwsync" : : : "memory")
-#define wmb() __asm __volatile("eieio" : : : "memory")
-#endif
-
/*
* The __ATOMIC_REL/ACQ() macros provide memory barriers only in conjunction
- * with the atomic lXarx/stXcx. sequences below. See Appendix B.2 of Book II
- * of the architecture manual.
+ * with the atomic lXarx/stXcx. sequences below. They are not exposed outside
+ * of this file. See also Appendix B.2 of Book II of the architecture manual.
+ *
+ * Note that not all Book-E processors accept the light-weight sync variant.
+ * In particular, early models of E500 cores are known to wedge. Bank on all
+ * 64-bit capable CPUs to accept lwsync properly and pressimize 32-bit CPUs
+ * to use the heavier-weight sync.
*/
+
+#ifdef __powerpc64__
+#define mb() __asm __volatile("lwsync" : : : "memory")
+#define rmb() __asm __volatile("lwsync" : : : "memory")
+#define wmb() __asm __volatile("lwsync" : : : "memory")
#define __ATOMIC_REL() __asm __volatile("lwsync" : : : "memory")
#define __ATOMIC_ACQ() __asm __volatile("isync" : : : "memory")
+#else
+#define mb() __asm __volatile("sync" : : : "memory")
+#define rmb() __asm __volatile("sync" : : : "memory")
+#define wmb() __asm __volatile("sync" : : : "memory")
+#define __ATOMIC_REL() __asm __volatile("sync" : : : "memory")
+#define __ATOMIC_ACQ() __asm __volatile("isync" : : : "memory")
+#endif
/*
* atomic_add(p, v)
@@ -683,4 +690,7 @@ atomic_fetchadd_long(volatile u_long *p, u_long v)
#define atomic_fetchadd_64 atomic_fetchadd_long
#endif
+#undef __ATOMIC_REL
+#undef __ATOMIC_ACQ
+
#endif /* ! _MACHINE_ATOMIC_H_ */
diff --git a/sys/powerpc/include/hid.h b/sys/powerpc/include/hid.h
index 0b73415433e9..63123903835a 100644
--- a/sys/powerpc/include/hid.h
+++ b/sys/powerpc/include/hid.h
@@ -78,6 +78,8 @@
#define HID0_E500_SEL_TBCLK 0x00002000 /* Select Time Base clock */
#define HID0_E500_MAS7UPDEN 0x00000080 /* Enable MAS7 update (e500v2) */
+#define HID0_E500MC_L2MMU_MHD 0x40000000 /* L2MMU Multiple Hit Detection */
+
#define HID0_BITMASK \
"\20" \
"\040EMCP\037DBP\036EBA\035EBD\034BCLK\033EICE\032ECLK\031PAR" \
@@ -105,6 +107,20 @@
"\027NAP\025DPM\023TG\022HANGDETECT\021NHR\020INORDER" \
"\016TBCTRL\015TBEN\012CIABREN\011HDICEEN\001ENATTN"
+#define HID0_E500MC_BITMASK \
+ "\20" \
+ "\040EMCP\037EN_L2MMU_MHD\036b2\035b3\034b4\033b5\032b6\031b7" \
+ "\030b8\027b9\026b10\025b11\024b12\023b13\022b14\021b15" \
+ "\020b16\017b17\016b18\015b19\014b20\013b21\012b22\011b23" \
+ "\010EN_MAS7_UPDATE\007DCFA\006b26\005CIGLSO\004b28\003b29\002b30\001NOPTI"
+
+#define HID0_E5500_BITMASK \
+ "\20" \
+ "\040EMCP\037EN_L2MMU_MHD\036b2\035b3\034b4\033b5\032b6\031b7" \
+ "\030b8\027b9\026b10\025b11\024b12\023b13\022b14\021b15" \
+ "\020b16\017b17\016b18\015b19\014b20\013b21\012b22\011b23" \
+ "\010b24\007DCFA\006b26\005CIGLSO\004b28\003b29\002b30\001NOPTI"
+
/*
* HID0 bit definitions per cpu model
*
@@ -142,6 +158,40 @@
* 30 - - - NOPDST NOPDST NOPDST NOPDST -
* 31 NOOPTI - NOOPTI NOPTI NOPTI NOPTI NOPTI NOPTI
*
+ * bit e500mc e5500
+ * 0 EMCP EMCP
+ * 1 EN_L2MMU_MHD EN_L2MMU_MHD
+ * 2 - -
+ * 3 - -
+ * 4 - -
+ * 5 - -
+ * 6 - -
+ * 7 - -
+ * 8 - -
+ * 9 - -
+ * 10 - -
+ * 11 - -
+ * 12 - -
+ * 13 - -
+ * 14 - -
+ * 15 - -
+ * 16 - -
+ * 17 - -
+ * 18 - -
+ * 19 - -
+ * 20 - -
+ * 21 - -
+ * 22 - -
+ * 23 - -
+ * 24 EN_MAS7_UPDATE -
+ * 25 DCFA DCFA
+ * 26 - -
+ * 27 CIGLSO CIGLSO
+ * 28 - -
+ * 29 - -
+ * 30 - -
+ * 31 NOPTI NOPTI
+ *
* 604: ECP = Enable cache parity checking
* 604: SIE = Serial instruction execution disable
* 7450: TBEN = Time Base Enable
@@ -160,6 +210,9 @@
#define HID0_E500_DEFAULT_SET (HID0_EMCP | HID0_E500_TBEN)
#define HID1_E500_DEFAULT_SET (HID1_E500_ABE | HID1_E500_ASTME)
+#define HID0_E500MC_DEFAULT_SET (HID0_EMCP | HID0_E500MC_L2MMU_MHD | \
+ HID0_E500_MAS7UPDEN)
+#define HID0_E5500_DEFAULT_SET (HID0_EMCP | HID0_E500MC_L2MMU_MHD)
#define HID5_970_DCBZ_SIZE_HI 0x00000080UL /* dcbz does a 32-byte store */
#define HID4_970_DISABLE_LG_PG 0x00000004ULL /* disables large pages */
diff --git a/sys/powerpc/include/in_cksum.h b/sys/powerpc/include/in_cksum.h
index 09920062a0ae..4fe1b4023f7b 100644
--- a/sys/powerpc/include/in_cksum.h
+++ b/sys/powerpc/include/in_cksum.h
@@ -39,6 +39,7 @@
#define in_cksum(m, len) in_cksum_skip(m, len, 0)
+#if defined(IPVERSION) && (IPVERSION == 4)
/*
* It it useful to have an Internet checksum routine which is inlineable
* and optimized specifically for the task of computing IP header checksums
@@ -65,9 +66,12 @@ in_cksum_update(struct ip *ip)
} while(0)
#endif
+#endif
#ifdef _KERNEL
+#if defined(IPVERSION) && (IPVERSION == 4)
u_int in_cksum_hdr(const struct ip *ip);
+#endif
u_short in_addword(u_short sum, u_short b);
u_short in_pseudo(u_int sum, u_int b, u_int c);
u_short in_cksum_skip(struct mbuf *m, int len, int skip);
diff --git a/sys/powerpc/include/pcpu.h b/sys/powerpc/include/pcpu.h
index 62094f8d3107..bd1466177508 100644
--- a/sys/powerpc/include/pcpu.h
+++ b/sys/powerpc/include/pcpu.h
@@ -115,7 +115,7 @@ struct pmap;
PCPU_MD_COMMON_FIELDS \
PCPU_MD_AIM_FIELDS
#endif
-#ifdef E500
+#if defined(BOOKE)
#define PCPU_MD_FIELDS \
PCPU_MD_COMMON_FIELDS \
PCPU_MD_BOOKE_FIELDS
diff --git a/sys/powerpc/include/pmap.h b/sys/powerpc/include/pmap.h
index b2a36834c90c..2f0e5b0ce774 100644
--- a/sys/powerpc/include/pmap.h
+++ b/sys/powerpc/include/pmap.h
@@ -94,7 +94,7 @@ typedef struct pmap *pmap_t;
struct pvo_entry {
LIST_ENTRY(pvo_entry) pvo_vlink; /* Link to common virt page */
LIST_ENTRY(pvo_entry) pvo_olink; /* Link to overflow entry */
- LIST_ENTRY(pvo_entry) pvo_plink; /* Link to pmap entries */
+ RB_ENTRY(pvo_entry) pvo_plink; /* Link to pmap entries */
union {
struct pte pte; /* 32 bit PTE */
struct lpte lpte; /* 64 bit PTE */
@@ -104,6 +104,9 @@ struct pvo_entry {
uint64_t pvo_vpn; /* Virtual page number */
};
LIST_HEAD(pvo_head, pvo_entry);
+RB_HEAD(pvo_tree, pvo_entry);
+int pvo_vaddr_compare(struct pvo_entry *, struct pvo_entry *);
+RB_PROTOTYPE(pvo_tree, pvo_entry, pvo_plink, pvo_vaddr_compare);
#define PVO_PTEGIDX_MASK 0x007UL /* which PTEG slot */
#define PVO_PTEGIDX_VALID 0x008UL /* slot is valid */
@@ -136,7 +139,7 @@ struct pmap {
struct pmap *pmap_phys;
struct pmap_statistics pm_stats;
- struct pvo_head pmap_pvo;
+ struct pvo_tree pmap_pvo;
};
struct md_page {
@@ -221,16 +224,16 @@ extern struct pmap kernel_pmap_store;
#define PMAP_UNLOCK(pmap) mtx_unlock(&(pmap)->pm_mtx)
void pmap_bootstrap(vm_offset_t, vm_offset_t);
-void pmap_kenter(vm_offset_t va, vm_offset_t pa);
+void pmap_kenter(vm_offset_t va, vm_paddr_t pa);
void pmap_kenter_attr(vm_offset_t va, vm_offset_t pa, vm_memattr_t);
void pmap_kremove(vm_offset_t);
-void *pmap_mapdev(vm_offset_t, vm_size_t);
+void *pmap_mapdev(vm_paddr_t, vm_size_t);
void *pmap_mapdev_attr(vm_offset_t, vm_size_t, vm_memattr_t);
void pmap_unmapdev(vm_offset_t, vm_size_t);
void pmap_page_set_memattr(vm_page_t, vm_memattr_t);
void pmap_deactivate(struct thread *);
-vm_offset_t pmap_kextract(vm_offset_t);
-int pmap_dev_direct_mapped(vm_offset_t, vm_size_t);
+vm_paddr_t pmap_kextract(vm_offset_t);
+int pmap_dev_direct_mapped(vm_paddr_t, vm_size_t);
boolean_t pmap_mmu_install(char *name, int prio);
#define vtophys(va) pmap_kextract((vm_offset_t)(va))
diff --git a/sys/powerpc/include/profile.h b/sys/powerpc/include/profile.h
index cde97ed7ebc0..eb11fc96d38d 100644
--- a/sys/powerpc/include/profile.h
+++ b/sys/powerpc/include/profile.h
@@ -172,12 +172,13 @@ __asm( " .globl _mcount \n" \
#define __PROFILE_VECTOR_BASE EXC_RST
#define __PROFILE_VECTOR_TOP (EXC_LAST + 0x100)
#endif /* AIM */
-#ifdef E500
+#if defined(BOOKE)
extern char interrupt_vector_base[];
extern char interrupt_vector_top[];
#define __PROFILE_VECTOR_BASE (uintfptr_t)interrupt_vector_base
#define __PROFILE_VECTOR_TOP (uintfptr_t)interrupt_vector_top
-#endif /* E500 */
+#endif /* BOOKE_E500 || BOOKE_PPC4XX */
+
#endif /* !COMPILING_LINT */
#ifndef __PROFILE_VECTOR_BASE
diff --git a/sys/powerpc/include/psl.h b/sys/powerpc/include/psl.h
index 92bfa6ca2152..b519266b860d 100644
--- a/sys/powerpc/include/psl.h
+++ b/sys/powerpc/include/psl.h
@@ -35,7 +35,7 @@
#ifndef _MACHINE_PSL_H_
#define _MACHINE_PSL_H_
-#if defined(E500)
+#if defined(BOOKE_E500)
/*
* Machine State Register (MSR) - e500 core
*
@@ -67,7 +67,29 @@
#define PSL_KERNSET (PSL_CE | PSL_ME | PSL_EE)
#define PSL_USERSET (PSL_KERNSET | PSL_PR)
-#else /* if defined(E500) */
+#elif defined(BOOKE_PPC4XX)
+/*
+ * Machine State Register (MSR) - PPC4xx core
+ */
+#define PSL_WE (0x80000000 >> 13) /* Wait State Enable */
+#define PSL_CE (0x80000000 >> 14) /* Critical Interrupt Enable */
+#define PSL_EE (0x80000000 >> 16) /* External Interrupt Enable */
+#define PSL_PR (0x80000000 >> 17) /* Problem State */
+#define PSL_FP (0x80000000 >> 18) /* Floating Point Available */
+#define PSL_ME (0x80000000 >> 19) /* Machine Check Enable */
+#define PSL_FE0 (0x80000000 >> 20) /* Floating-point exception mode 0 */
+#define PSL_DWE (0x80000000 >> 21) /* Debug Wait Enable */
+#define PSL_DE (0x80000000 >> 22) /* Debug interrupt Enable */
+#define PSL_FE1 (0x80000000 >> 23) /* Floating-point exception mode 1 */
+#define PSL_IS (0x80000000 >> 26) /* Instruction Address Space */
+#define PSL_DS (0x80000000 >> 27) /* Data Address Space */
+
+#define PSL_KERNSET (PSL_CE | PSL_ME | PSL_EE | PSL_FP)
+#define PSL_USERSET (PSL_KERNSET | PSL_PR)
+
+#define PSL_FE_DFLT 0x00000000UL /* default == none */
+
+#else /* if defined(BOOKE_*) */
/*
* Machine State Register (MSR)
*
@@ -127,5 +149,5 @@
#define PSL_USERSTATIC (PSL_USERSET | PSL_IP | 0x87c0008c)
-#endif /* if defined(E500) */
+#endif /* if defined(BOOKE_E500) */
#endif /* _MACHINE_PSL_H_ */
diff --git a/sys/powerpc/include/pte.h b/sys/powerpc/include/pte.h
index 67cd5fdc257b..b5d2ecfdbfa4 100644
--- a/sys/powerpc/include/pte.h
+++ b/sys/powerpc/include/pte.h
@@ -163,7 +163,7 @@ extern u_int dsisr(void);
#endif /* _KERNEL */
#endif /* LOCORE */
-#else
+#else /* BOOKE */
#include <machine/tlb.h>
@@ -224,6 +224,8 @@ typedef struct pte pte_t;
/* RPN mask, TLB0 4K pages */
#define PTE_PA_MASK PAGE_MASK
+#if defined(BOOKE_E500)
+
/* PTE bits assigned to MAS2, MAS3 flags */
#define PTE_W MAS2_W
#define PTE_I MAS2_I
@@ -241,6 +243,26 @@ typedef struct pte pte_t;
#define PTE_MAS3_MASK ((MAS3_UX | MAS3_SX | MAS3_UW \
| MAS3_SW | MAS3_UR | MAS3_SR) << PTE_MAS3_SHIFT)
+#elif defined(BOOKE_PPC4XX)
+
+#define PTE_WL1 TLB_WL1
+#define PTE_IL2I TLB_IL2I
+#define PTE_IL2D TLB_IL2D
+
+#define PTE_W TLB_W
+#define PTE_I TLB_I
+#define PTE_M TLB_M
+#define PTE_G TLB_G
+
+#define PTE_UX TLB_UX
+#define PTE_SX TLB_SX
+#define PTE_UW TLB_UW
+#define PTE_SW TLB_SW
+#define PTE_UR TLB_UR
+#define PTE_SR TLB_SR
+
+#endif
+
/* Other PTE flags */
#define PTE_VALID 0x80000000 /* Valid */
#define PTE_MODIFIED 0x40000000 /* Modified */
@@ -256,6 +278,5 @@ typedef struct pte pte_t;
#define PTE_ISMODIFIED(pte) ((pte)->flags & PTE_MODIFIED)
#define PTE_ISREFERENCED(pte) ((pte)->flags & PTE_REFERENCED)
-#endif /* #elif defined(E500) */
-
+#endif /* BOOKE_PPC4XX */
#endif /* _MACHINE_PTE_H_ */
diff --git a/sys/powerpc/include/spr.h b/sys/powerpc/include/spr.h
index e35698760fc0..79fad45f28f6 100644
--- a/sys/powerpc/include/spr.h
+++ b/sys/powerpc/include/spr.h
@@ -115,9 +115,9 @@
#define SRR1_ISI_NOEXECUTE 0x10000000 /* Memory marked no-execute */
#define SRR1_ISI_PP 0x08000000 /* PP bits forbid access */
#define SPR_DECAR 0x036 /* ..8 Decrementer auto reload */
-#define SPR_EIE 0x050 /* ..8 Exception Interrupt ??? */
-#define SPR_EID 0x051 /* ..8 Exception Interrupt ??? */
-#define SPR_NRI 0x052 /* ..8 Exception Interrupt ??? */
+#define SPR_EIE 0x050 /* ..8 Exception Interrupt ??? */
+#define SPR_EID 0x051 /* ..8 Exception Interrupt ??? */
+#define SPR_NRI 0x052 /* ..8 Exception Interrupt ??? */
#define SPR_USPRG0 0x100 /* 4.. User SPR General 0 */
#define SPR_VRSAVE 0x100 /* .6. AltiVec VRSAVE */
#define SPR_SPRG0 0x110 /* 468 SPR General 0 */
@@ -184,6 +184,8 @@
#define MPC8245 0x8081
#define FSL_E500v1 0x8020
#define FSL_E500v2 0x8021
+#define FSL_E500mc 0x8023
+#define FSL_E5500 0x8024
#define SPR_IBAT0U 0x210 /* .68 Instruction BAT Reg 0 Upper */
#define SPR_IBAT0U 0x210 /* .6. Instruction BAT Reg 0 Upper */
@@ -202,49 +204,49 @@
#define SPR_DBAT2L 0x21d /* .6. Data BAT Reg 2 Lower */
#define SPR_DBAT3U 0x21e /* .6. Data BAT Reg 3 Upper */
#define SPR_DBAT3L 0x21f /* .6. Data BAT Reg 3 Lower */
-#define SPR_IC_CST 0x230 /* ..8 Instruction Cache CSR */
-#define IC_CST_IEN 0x80000000 /* I cache is ENabled (RO) */
-#define IC_CST_CMD_INVALL 0x0c000000 /* I cache invalidate all */
-#define IC_CST_CMD_UNLOCKALL 0x0a000000 /* I cache unlock all */
-#define IC_CST_CMD_UNLOCK 0x08000000 /* I cache unlock block */
-#define IC_CST_CMD_LOADLOCK 0x06000000 /* I cache load & lock block */
-#define IC_CST_CMD_DISABLE 0x04000000 /* I cache disable */
-#define IC_CST_CMD_ENABLE 0x02000000 /* I cache enable */
-#define IC_CST_CCER1 0x00200000 /* I cache error type 1 (RO) */
-#define IC_CST_CCER2 0x00100000 /* I cache error type 2 (RO) */
-#define IC_CST_CCER3 0x00080000 /* I cache error type 3 (RO) */
+#define SPR_IC_CST 0x230 /* ..8 Instruction Cache CSR */
+#define IC_CST_IEN 0x80000000 /* I cache is ENabled (RO) */
+#define IC_CST_CMD_INVALL 0x0c000000 /* I cache invalidate all */
+#define IC_CST_CMD_UNLOCKALL 0x0a000000 /* I cache unlock all */
+#define IC_CST_CMD_UNLOCK 0x08000000 /* I cache unlock block */
+#define IC_CST_CMD_LOADLOCK 0x06000000 /* I cache load & lock block */
+#define IC_CST_CMD_DISABLE 0x04000000 /* I cache disable */
+#define IC_CST_CMD_ENABLE 0x02000000 /* I cache enable */
+#define IC_CST_CCER1 0x00200000 /* I cache error type 1 (RO) */
+#define IC_CST_CCER2 0x00100000 /* I cache error type 2 (RO) */
+#define IC_CST_CCER3 0x00080000 /* I cache error type 3 (RO) */
#define SPR_IBAT4U 0x230 /* .6. Instruction BAT Reg 4 Upper */
-#define SPR_IC_ADR 0x231 /* ..8 Instruction Cache Address */
+#define SPR_IC_ADR 0x231 /* ..8 Instruction Cache Address */
#define SPR_IBAT4L 0x231 /* .6. Instruction BAT Reg 4 Lower */
-#define SPR_IC_DAT 0x232 /* ..8 Instruction Cache Data */
+#define SPR_IC_DAT 0x232 /* ..8 Instruction Cache Data */
#define SPR_IBAT5U 0x232 /* .6. Instruction BAT Reg 5 Upper */
#define SPR_IBAT5L 0x233 /* .6. Instruction BAT Reg 5 Lower */
#define SPR_IBAT6U 0x234 /* .6. Instruction BAT Reg 6 Upper */
#define SPR_IBAT6L 0x235 /* .6. Instruction BAT Reg 6 Lower */
#define SPR_IBAT7U 0x236 /* .6. Instruction BAT Reg 7 Upper */
#define SPR_IBAT7L 0x237 /* .6. Instruction BAT Reg 7 Lower */
-#define SPR_DC_CST 0x230 /* ..8 Data Cache CSR */
-#define DC_CST_DEN 0x80000000 /* D cache ENabled (RO) */
-#define DC_CST_DFWT 0x40000000 /* D cache Force Write-Thru (RO) */
-#define DC_CST_LES 0x20000000 /* D cache Little Endian Swap (RO) */
-#define DC_CST_CMD_FLUSH 0x0e000000 /* D cache invalidate all */
-#define DC_CST_CMD_INVALL 0x0c000000 /* D cache invalidate all */
-#define DC_CST_CMD_UNLOCKALL 0x0a000000 /* D cache unlock all */
-#define DC_CST_CMD_UNLOCK 0x08000000 /* D cache unlock block */
-#define DC_CST_CMD_CLRLESWAP 0x07000000 /* D cache clr little-endian swap */
-#define DC_CST_CMD_LOADLOCK 0x06000000 /* D cache load & lock block */
-#define DC_CST_CMD_SETLESWAP 0x05000000 /* D cache set little-endian swap */
-#define DC_CST_CMD_DISABLE 0x04000000 /* D cache disable */
-#define DC_CST_CMD_CLRFWT 0x03000000 /* D cache clear forced write-thru */
-#define DC_CST_CMD_ENABLE 0x02000000 /* D cache enable */
-#define DC_CST_CMD_SETFWT 0x01000000 /* D cache set forced write-thru */
-#define DC_CST_CCER1 0x00200000 /* D cache error type 1 (RO) */
-#define DC_CST_CCER2 0x00100000 /* D cache error type 2 (RO) */
-#define DC_CST_CCER3 0x00080000 /* D cache error type 3 (RO) */
+#define SPR_DC_CST 0x230 /* ..8 Data Cache CSR */
+#define DC_CST_DEN 0x80000000 /* D cache ENabled (RO) */
+#define DC_CST_DFWT 0x40000000 /* D cache Force Write-Thru (RO) */
+#define DC_CST_LES 0x20000000 /* D cache Little Endian Swap (RO) */
+#define DC_CST_CMD_FLUSH 0x0e000000 /* D cache invalidate all */
+#define DC_CST_CMD_INVALL 0x0c000000 /* D cache invalidate all */
+#define DC_CST_CMD_UNLOCKALL 0x0a000000 /* D cache unlock all */
+#define DC_CST_CMD_UNLOCK 0x08000000 /* D cache unlock block */
+#define DC_CST_CMD_CLRLESWAP 0x07000000 /* D cache clr little-endian swap */
+#define DC_CST_CMD_LOADLOCK 0x06000000 /* D cache load & lock block */
+#define DC_CST_CMD_SETLESWAP 0x05000000 /* D cache set little-endian swap */
+#define DC_CST_CMD_DISABLE 0x04000000 /* D cache disable */
+#define DC_CST_CMD_CLRFWT 0x03000000 /* D cache clear forced write-thru */
+#define DC_CST_CMD_ENABLE 0x02000000 /* D cache enable */
+#define DC_CST_CMD_SETFWT 0x01000000 /* D cache set forced write-thru */
+#define DC_CST_CCER1 0x00200000 /* D cache error type 1 (RO) */
+#define DC_CST_CCER2 0x00100000 /* D cache error type 2 (RO) */
+#define DC_CST_CCER3 0x00080000 /* D cache error type 3 (RO) */
#define SPR_DBAT4U 0x238 /* .6. Data BAT Reg 4 Upper */
-#define SPR_DC_ADR 0x231 /* ..8 Data Cache Address */
+#define SPR_DC_ADR 0x231 /* ..8 Data Cache Address */
#define SPR_DBAT4L 0x239 /* .6. Data BAT Reg 4 Lower */
-#define SPR_DC_DAT 0x232 /* ..8 Data Cache Data */
+#define SPR_DC_DAT 0x232 /* ..8 Data Cache Data */
#define SPR_DBAT5U 0x23a /* .6. Data BAT Reg 5 Upper */
#define SPR_DBAT5L 0x23b /* .6. Data BAT Reg 5 Lower */
#define SPR_DBAT6U 0x23c /* .6. Data BAT Reg 6 Upper */
@@ -252,46 +254,46 @@
#define SPR_DBAT7U 0x23e /* .6. Data BAT Reg 7 Upper */
#define SPR_DBAT7L 0x23f /* .6. Data BAT Reg 7 Lower */
#define SPR_MI_CTR 0x310 /* ..8 IMMU control */
-#define Mx_CTR_GPM 0x80000000 /* Group Protection Mode */
-#define Mx_CTR_PPM 0x40000000 /* Page Protection Mode */
-#define Mx_CTR_CIDEF 0x20000000 /* Cache-Inhibit DEFault */
-#define MD_CTR_WTDEF 0x20000000 /* Write-Through DEFault */
-#define Mx_CTR_RSV4 0x08000000 /* Reserve 4 TLB entries */
-#define MD_CTR_TWAM 0x04000000 /* TableWalk Assist Mode */
-#define Mx_CTR_PPCS 0x02000000 /* Priv/user state compare mode */
-#define Mx_CTR_TLB_INDX 0x000001f0 /* TLB index mask */
-#define Mx_CTR_TLB_INDX_BITPOS 8 /* TLB index shift */
+#define Mx_CTR_GPM 0x80000000 /* Group Protection Mode */
+#define Mx_CTR_PPM 0x40000000 /* Page Protection Mode */
+#define Mx_CTR_CIDEF 0x20000000 /* Cache-Inhibit DEFault */
+#define MD_CTR_WTDEF 0x20000000 /* Write-Through DEFault */
+#define Mx_CTR_RSV4 0x08000000 /* Reserve 4 TLB entries */
+#define MD_CTR_TWAM 0x04000000 /* TableWalk Assist Mode */
+#define Mx_CTR_PPCS 0x02000000 /* Priv/user state compare mode */
+#define Mx_CTR_TLB_INDX 0x000001f0 /* TLB index mask */
+#define Mx_CTR_TLB_INDX_BITPOS 8 /* TLB index shift */
#define SPR_MI_AP 0x312 /* ..8 IMMU access protection */
-#define Mx_GP_SUPER(n) (0 << (2*(15-(n)))) /* access is supervisor */
-#define Mx_GP_PAGE (1 << (2*(15-(n)))) /* access is page protect */
-#define Mx_GP_SWAPPED (2 << (2*(15-(n)))) /* access is swapped */
-#define Mx_GP_USER (3 << (2*(15-(n)))) /* access is user */
+#define Mx_GP_SUPER(n) (0 << (2*(15-(n)))) /* access is supervisor */
+#define Mx_GP_PAGE (1 << (2*(15-(n)))) /* access is page protect */
+#define Mx_GP_SWAPPED (2 << (2*(15-(n)))) /* access is swapped */
+#define Mx_GP_USER (3 << (2*(15-(n)))) /* access is user */
#define SPR_MI_EPN 0x313 /* ..8 IMMU effective number */
-#define Mx_EPN_EPN 0xfffff000 /* Effective Page Number mask */
-#define Mx_EPN_EV 0x00000020 /* Entry Valid */
-#define Mx_EPN_ASID 0x0000000f /* Address Space ID */
+#define Mx_EPN_EPN 0xfffff000 /* Effective Page Number mask */
+#define Mx_EPN_EV 0x00000020 /* Entry Valid */
+#define Mx_EPN_ASID 0x0000000f /* Address Space ID */
#define SPR_MI_TWC 0x315 /* ..8 IMMU tablewalk control */
-#define MD_TWC_L2TB 0xfffff000 /* Level-2 Tablewalk Base */
-#define Mx_TWC_APG 0x000001e0 /* Access Protection Group */
-#define Mx_TWC_G 0x00000010 /* Guarded memory */
-#define Mx_TWC_PS 0x0000000c /* Page Size (L1) */
-#define MD_TWC_WT 0x00000002 /* Write-Through */
-#define Mx_TWC_V 0x00000001 /* Entry Valid */
+#define MD_TWC_L2TB 0xfffff000 /* Level-2 Tablewalk Base */
+#define Mx_TWC_APG 0x000001e0 /* Access Protection Group */
+#define Mx_TWC_G 0x00000010 /* Guarded memory */
+#define Mx_TWC_PS 0x0000000c /* Page Size (L1) */
+#define MD_TWC_WT 0x00000002 /* Write-Through */
+#define Mx_TWC_V 0x00000001 /* Entry Valid */
#define SPR_MI_RPN 0x316 /* ..8 IMMU real (phys) page number */
-#define Mx_RPN_RPN 0xfffff000 /* Real Page Number */
-#define Mx_RPN_PP 0x00000ff0 /* Page Protection */
-#define Mx_RPN_SPS 0x00000008 /* Small Page Size */
-#define Mx_RPN_SH 0x00000004 /* SHared page */
-#define Mx_RPN_CI 0x00000002 /* Cache Inhibit */
-#define Mx_RPN_V 0x00000001 /* Valid */
+#define Mx_RPN_RPN 0xfffff000 /* Real Page Number */
+#define Mx_RPN_PP 0x00000ff0 /* Page Protection */
+#define Mx_RPN_SPS 0x00000008 /* Small Page Size */
+#define Mx_RPN_SH 0x00000004 /* SHared page */
+#define Mx_RPN_CI 0x00000002 /* Cache Inhibit */
+#define Mx_RPN_V 0x00000001 /* Valid */
#define SPR_MD_CTR 0x318 /* ..8 DMMU control */
#define SPR_M_CASID 0x319 /* ..8 CASID */
-#define M_CASID 0x0000000f /* Current AS Id */
+#define M_CASID 0x0000000f /* Current AS Id */
#define SPR_MD_AP 0x31a /* ..8 DMMU access protection */
#define SPR_MD_EPN 0x31b /* ..8 DMMU effective number */
#define SPR_M_TWB 0x31c /* ..8 MMU tablewalk base */
-#define M_TWB_L1TB 0xfffff000 /* level-1 translation base */
-#define M_TWB_L1INDX 0x00000ffc /* level-1 index */
+#define M_TWB_L1TB 0xfffff000 /* level-1 translation base */
+#define M_TWB_L1INDX 0x00000ffc /* level-1 index */
#define SPR_MD_TWC 0x31d /* ..8 DMMU tablewalk control */
#define SPR_MD_RPN 0x31e /* ..8 DMMU real (phys) page number */
#define SPR_MD_TW 0x31f /* ..8 MMU tablewalk scratch */
@@ -307,8 +309,8 @@
#define SPR_UMMCR1 0x3ac /* .6. User Monitor Mode Control Register 1 */
#define SPR_ZPR 0x3b0 /* 4.. Zone Protection Register */
#define SPR_MMCR2 0x3b0 /* .6. Monitor Mode Control Register 2 */
-#define SPR_MMCR2_THRESHMULT_32 0x80000000 /* Multiply MMCR0 threshold by 32 */
-#define SPR_MMCR2_THRESHMULT_2 0x00000000 /* Multiply MMCR0 threshold by 2 */
+#define SPR_MMCR2_THRESHMULT_32 0x80000000 /* Multiply MMCR0 threshold by 32 */
+#define SPR_MMCR2_THRESHMULT_2 0x00000000 /* Multiply MMCR0 threshold by 2 */
#define SPR_PID 0x3b1 /* 4.. Process ID */
#define SPR_PMC5 0x3b1 /* .6. Performance Counter Register 5 */
#define SPR_PMC6 0x3b2 /* .6. Performance Counter Register 6 */
@@ -323,14 +325,14 @@
#define SPR_970MMCR1 0x31e /* ... Monitor Mode Control Register 1 (PPC 970) */
#define SPR_970MMCRA 0x312 /* ... Monitor Mode Control Register 2 (PPC 970) */
#define SPR_970MMCR0 0x31b /* ... Monitor Mode Control Register 0 (PPC 970) */
-#define SPR_970PMC1 0x313 /* ... PMC 1 */
-#define SPR_970PMC2 0x314 /* ... PMC 2 */
-#define SPR_970PMC3 0x315 /* ... PMC 3 */
-#define SPR_970PMC4 0x316 /* ... PMC 4 */
-#define SPR_970PMC5 0x317 /* ... PMC 5 */
-#define SPR_970PMC6 0x318 /* ... PMC 6 */
-#define SPR_970PMC7 0x319 /* ... PMC 7 */
-#define SPR_970PMC8 0x31a /* ... PMC 8 */
+#define SPR_970PMC1 0x313 /* ... PMC 1 */
+#define SPR_970PMC2 0x314 /* ... PMC 2 */
+#define SPR_970PMC3 0x315 /* ... PMC 3 */
+#define SPR_970PMC4 0x316 /* ... PMC 4 */
+#define SPR_970PMC5 0x317 /* ... PMC 5 */
+#define SPR_970PMC6 0x318 /* ... PMC 6 */
+#define SPR_970PMC7 0x319 /* ... PMC 7 */
+#define SPR_970PMC8 0x31a /* ... PMC 8 */
#define SPR_MMCR0_FC 0x80000000 /* Freeze counters */
#define SPR_MMCR0_FCS 0x40000000 /* Freeze counters in supervisor mode */
@@ -421,6 +423,7 @@
#define SPR_SRR3 0x3df /* 4.. Save/Restore Register 3 */
#define SPR_HID0 0x3f0 /* ..8 Hardware Implementation Register 0 */
#define SPR_HID1 0x3f1 /* ..8 Hardware Implementation Register 1 */
+#define SPR_HID2 0x3f3 /* ..8 Hardware Implementation Register 2 */
#define SPR_HID4 0x3f4 /* ..8 Hardware Implementation Register 4 */
#define SPR_HID5 0x3f6 /* ..8 Hardware Implementation Register 5 */
#define SPR_HID6 0x3f9 /* ..8 Hardware Implementation Register 6 */
@@ -452,7 +455,7 @@
#define SPR_DAC1 0x3f6 /* 4.. Data Address Compare 1 */
#define SPR_DAC2 0x3f7 /* 4.. Data Address Compare 2 */
#define SPR_PIR 0x3ff /* .6. Processor Identification Register */
-#elif defined(E500)
+#elif defined(BOOKE)
#define SPR_PIR 0x11e /* ..8 Processor Identification Register */
#define SPR_DBSR 0x130 /* ..8 Debug Status Register */
#define DBSR_IDE 0x80000000 /* Imprecise debug event. */
@@ -554,7 +557,6 @@
#define L2CR_L2DRO 0x00000100 /* 23: L2DLL rollover checkstop enable. */
#define L2CR_L2IP 0x00000001 /* 31: L2 global invalidate in */
/* progress (read only). */
-
#define SPR_L3CR 0x3fa /* .6. L3 Control Register */
#define L3CR_L3E 0x80000000 /* 0: L3 enable */
#define L3CR_L3PE 0x40000000 /* 1: L3 data parity enable */
@@ -582,15 +584,15 @@
#define SPR_ICCR 0x3fb /* 4.. Instruction Cache Cachability Register */
#define SPR_THRM1 0x3fc /* .6. Thermal Management Register */
#define SPR_THRM2 0x3fd /* .6. Thermal Management Register */
-#define SPR_THRM_TIN 0x80000000 /* Thermal interrupt bit (RO) */
-#define SPR_THRM_TIV 0x40000000 /* Thermal interrupt valid (RO) */
-#define SPR_THRM_THRESHOLD(x) ((x) << 23) /* Thermal sensor threshold */
-#define SPR_THRM_TID 0x00000004 /* Thermal interrupt direction */
-#define SPR_THRM_TIE 0x00000002 /* Thermal interrupt enable */
-#define SPR_THRM_VALID 0x00000001 /* Valid bit */
+#define SPR_THRM_TIN 0x80000000 /* Thermal interrupt bit (RO) */
+#define SPR_THRM_TIV 0x40000000 /* Thermal interrupt valid (RO) */
+#define SPR_THRM_THRESHOLD(x) ((x) << 23) /* Thermal sensor threshold */
+#define SPR_THRM_TID 0x00000004 /* Thermal interrupt direction */
+#define SPR_THRM_TIE 0x00000002 /* Thermal interrupt enable */
+#define SPR_THRM_VALID 0x00000001 /* Valid bit */
#define SPR_THRM3 0x3fe /* .6. Thermal Management Register */
-#define SPR_THRM_TIMER(x) ((x) << 1) /* Sampling interval timer */
-#define SPR_THRM_ENABLE 0x00000001 /* TAU Enable */
+#define SPR_THRM_TIMER(x) ((x) << 1) /* Sampling interval timer */
+#define SPR_THRM_ENABLE 0x00000001 /* TAU Enable */
#define SPR_FPECR 0x3fe /* .6. Floating-Point Exception Cause Register */
/* Time Base Register declarations */
@@ -600,7 +602,7 @@
#define TBR_TBWU 0x11d /* 468 Time Base Upper - supervisor, write */
/* Performance counter declarations */
-#define PMC_OVERFLOW 0x80000000 /* Counter has overflowed */
+#define PMC_OVERFLOW 0x80000000 /* Counter has overflowed */
/* The first five countable [non-]events are common to many PMC's */
#define PMCN_NONE 0 /* Count nothing */
@@ -616,7 +618,7 @@
#if defined(AIM)
-#define SPR_ESR 0x3d4 /* 4.. Exception Syndrome Register */
+#define SPR_ESR 0x3d4 /* 4.. Exception Syndrome Register */
#define ESR_MCI 0x80000000 /* Machine check - instruction */
#define ESR_PIL 0x08000000 /* Program interrupt - illegal */
#define ESR_PPR 0x04000000 /* Program interrupt - privileged */
@@ -626,7 +628,9 @@
#define ESR_DIZ 0x00800000 /* Data/instruction storage interrupt - zone fault */
#define ESR_U0F 0x00008000 /* Data storage interrupt - U0 fault */
-#elif defined(E500)
+#elif defined(BOOKE)
+
+#define SPR_MCSR 0x23c /* ..8 Machine Check Syndrome register */
#define SPR_ESR 0x003e /* ..8 Exception Syndrome Register */
#define ESR_PIL 0x08000000 /* Program interrupt - illegal */
@@ -643,6 +647,19 @@
#define SPR_MCSRR0 0x23a /* ..8 570 Machine check SRR0 */
#define SPR_MCSRR1 0x23b /* ..8 571 Machine check SRR1 */
+#define SPR_MMUCR 0x3b2 /* 4.. MMU Control Register */
+#define MMUCR_SWOA (0x80000000 >> 7)
+#define MMUCR_U1TE (0x80000000 >> 9)
+#define MMUCR_U2SWOAE (0x80000000 >> 10)
+#define MMUCR_DULXE (0x80000000 >> 12)
+#define MMUCR_IULXE (0x80000000 >> 13)
+#define MMUCR_STS (0x80000000 >> 15)
+#define MMUCR_STID_MASK (0xFF000000 >> 24)
+
+#define SPR_MMUCSR0 0x3f4 /* ..8 1012 MMU Control and Status Register 0 */
+#define MMUCSR0_L2TLB0_FI 0x04 /* TLB0 flash invalidate */
+#define MMUCSR0_L2TLB1_FI 0x02 /* TLB1 flash invalidate */
+
#define SPR_SVR 0x3ff /* ..8 1023 System Version Register */
#define SVR_MPC8533 0x8034
#define SVR_MPC8533E 0x803c
@@ -662,10 +679,16 @@
#define SVR_P2010E 0x80eb
#define SVR_P2020 0x80e2
#define SVR_P2020E 0x80ea
+#define SVR_P2041 0x8210
+#define SVR_P2041E 0x8218
+#define SVR_P3041 0x8211
+#define SVR_P3041E 0x8219
#define SVR_P4040 0x8200
#define SVR_P4040E 0x8208
#define SVR_P4080 0x8201
#define SVR_P4080E 0x8209
+#define SVR_P5020 0x8220
+#define SVR_P5020E 0x8228
#define SVR_VER(svr) (((svr) >> 16) & 0xffff)
#define SPR_PID0 0x030 /* ..8 Process ID Register 0 */
@@ -708,6 +731,18 @@
#define SPR_MAS5 0x275 /* ..8 MMU Assist Register 5 Book-E */
#define SPR_MAS6 0x276 /* ..8 MMU Assist Register 6 Book-E/e500 */
#define SPR_MAS7 0x3B0 /* ..8 MMU Assist Register 7 Book-E/e500 */
+#define SPR_MAS8 0x155 /* ..8 MMU Assist Register 8 Book-E/e500 */
+
+#define SPR_L1CFG0 0x203 /* ..8 L1 cache configuration register 0 */
+#define SPR_L1CFG1 0x204 /* ..8 L1 cache configuration register 1 */
+
+#define SPR_CCR1 0x378
+#define CCR1_L2COBE 0x00000040
+
+#define DCR_L2DCDCRAI 0x0000 /* L2 D-Cache DCR Address Pointer */
+#define DCR_L2DCDCRDI 0x0001 /* L2 D-Cache DCR Data Indirect */
+#define DCR_L2CR0 0x00 /* L2 Cache Configuration Register 0 */
+#define L2CR0_AS 0x30000000
#define SPR_L1CSR0 0x3F2 /* ..8 L1 Cache Control and Status Register 0 */
#define L1CSR0_DCPE 0x00010000 /* Data Cache Parity Enable */
@@ -716,13 +751,20 @@
#define L1CSR0_DCE 0x00000001 /* Data Cache Enable */
#define SPR_L1CSR1 0x3F3 /* ..8 L1 Cache Control and Status Register 1 */
#define L1CSR1_ICPE 0x00010000 /* Instruction Cache Parity Enable */
+#define L1CSR1_ICUL 0x00000400 /* Instr Cache Unable to Lock */
#define L1CSR1_ICLFR 0x00000100 /* Instruction Cache Lock Bits Flash Reset */
#define L1CSR1_ICFI 0x00000002 /* Instruction Cache Flash Invalidate */
#define L1CSR1_ICE 0x00000001 /* Instruction Cache Enable */
+#define SPR_L2CSR0 0x3F9 /* ..8 L2 Cache Control and Status Register 0 */
+#define L2CSR0_L2E 0x80000000 /* L2 Cache Enable */
+#define L2CSR0_L2PE 0x40000000 /* L2 Cache Parity Enable */
+#define L2CSR0_L2FI 0x00200000 /* L2 Cache Flash Invalidate */
+#define L2CSR0_L2LFC 0x00000400 /* L2 Cache Lock Flags Clear */
+
#define SPR_BUCSR 0x3F5 /* ..8 Branch Unit Control and Status Register */
#define BUCSR_BPEN 0x00000001 /* Branch Prediction Enable */
+#define BUCSR_BBFI 0x00000200 /* Branch Buffer Flash Invalidate */
-#endif /* #elif defined(E500) */
-
+#endif /* BOOKE */
#endif /* !_POWERPC_SPR_H_ */
diff --git a/sys/powerpc/include/tlb.h b/sys/powerpc/include/tlb.h
index 56f55211c804..7e0d909a074f 100644
--- a/sys/powerpc/include/tlb.h
+++ b/sys/powerpc/include/tlb.h
@@ -1,5 +1,5 @@
/*-
- * Copyright (C) 2006 Semihalf, Marian Balakowicz <m8@semihalf.com>
+ * Copyright (C) 2006-2012 Semihalf.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,6 +30,8 @@
#ifndef _MACHINE_TLB_H_
#define _MACHINE_TLB_H_
+#if defined(BOOKE_E500)
+
/* PowerPC E500 MAS registers */
#define MAS0_TLBSEL(x) ((x << 28) & 0x10000000)
#define MAS0_ESEL(x) ((x << 16) & 0x000F0000)
@@ -122,15 +124,6 @@
#define _TLB_ENTRY_MEM (0)
#endif
-#define TID_KERNEL 0 /* TLB TID to use for kernel (shared) translations */
-#define TID_KRESERVED 1 /* Number of TIDs reserved for kernel */
-#define TID_URESERVED 0 /* Number of TIDs reserved for user */
-#define TID_MIN (TID_KRESERVED + TID_URESERVED)
-#define TID_MAX 255
-#define TID_NONE -1
-
-#define TLB_UNLOCKED 0
-
#if !defined(LOCORE)
typedef struct tlb_entry {
uint32_t mas1;
@@ -138,15 +131,80 @@ typedef struct tlb_entry {
uint32_t mas3;
} tlb_entry_t;
-typedef int tlbtid_t;
-struct pmap;
-
void tlb0_print_tlbentries(void);
void tlb1_inval_entry(unsigned int);
void tlb1_init(vm_offset_t);
void tlb1_print_entries(void);
void tlb1_print_tlbentries(void);
+#endif /* !LOCORE */
+
+#elif defined(BOOKE_PPC4XX)
+
+/* TLB Words */
+#define TLB_PAGEID 0
+#define TLB_XLAT 1
+#define TLB_ATTRIB 2
+
+/* Page identification fields */
+#define TLB_EPN_MASK (0xFFFFFC00 >> 0)
+#define TLB_VALID (0x80000000 >> 22)
+#define TLB_TS (0x80000000 >> 23)
+#define TLB_SIZE_1K (0x00000000 >> 24)
+#define TLB_SIZE_MASK (0xF0000000 >> 24)
+
+/* Translation fields */
+#define TLB_RPN_MASK (0xFFFFFC00 >> 0)
+#define TLB_ERPN_MASK (0xF0000000 >> 28)
+
+/* Storage attribute and access control fields */
+#define TLB_WL1 (0x80000000 >> 11)
+#define TLB_IL1I (0x80000000 >> 12)
+#define TLB_IL1D (0x80000000 >> 13)
+#define TLB_IL2I (0x80000000 >> 14)
+#define TLB_IL2D (0x80000000 >> 15)
+#define TLB_U0 (0x80000000 >> 16)
+#define TLB_U1 (0x80000000 >> 17)
+#define TLB_U2 (0x80000000 >> 18)
+#define TLB_U3 (0x80000000 >> 19)
+#define TLB_W (0x80000000 >> 20)
+#define TLB_I (0x80000000 >> 21)
+#define TLB_M (0x80000000 >> 22)
+#define TLB_G (0x80000000 >> 23)
+#define TLB_E (0x80000000 >> 24)
+#define TLB_UX (0x80000000 >> 26)
+#define TLB_UW (0x80000000 >> 27)
+#define TLB_UR (0x80000000 >> 28)
+#define TLB_SX (0x80000000 >> 29)
+#define TLB_SW (0x80000000 >> 30)
+#define TLB_SR (0x80000000 >> 31)
+#define TLB_SIZE 64
+
+#define TLB_SIZE_4K (0x10000000 >> 24)
+#define TLB_SIZE_16K (0x20000000 >> 24)
+#define TLB_SIZE_64K (0x30000000 >> 24)
+#define TLB_SIZE_256K (0x40000000 >> 24)
+#define TLB_SIZE_1M (0x50000000 >> 24)
+#define TLB_SIZE_16M (0x70000000 >> 24)
+#define TLB_SIZE_256M (0x90000000 >> 24)
+#define TLB_SIZE_1G (0xA0000000 >> 24)
+
+#endif /* BOOKE_E500 */
+
+#define TID_KERNEL 0 /* TLB TID to use for kernel (shared) translations */
+#define TID_KRESERVED 1 /* Number of TIDs reserved for kernel */
+#define TID_URESERVED 0 /* Number of TIDs reserved for user */
+#define TID_MIN (TID_KRESERVED + TID_URESERVED)
+#define TID_MAX 255
+#define TID_NONE -1
+
+#define TLB_UNLOCKED 0
+
+#if !defined(LOCORE)
+
+typedef int tlbtid_t;
+
+struct pmap;
void tlb_lock(uint32_t *);
void tlb_unlock(uint32_t *);
diff --git a/sys/powerpc/include/trap.h b/sys/powerpc/include/trap.h
index 61543b47a1d7..75accf300f69 100644
--- a/sys/powerpc/include/trap.h
+++ b/sys/powerpc/include/trap.h
@@ -2,7 +2,7 @@
#if defined(AIM)
#include <machine/trap_aim.h>
-#elif defined(E500)
+#elif defined(BOOKE)
#include <machine/trap_booke.h>
#endif
diff --git a/sys/powerpc/include/vmparam.h b/sys/powerpc/include/vmparam.h
index 36afd1fed90f..8368a4179dc8 100644
--- a/sys/powerpc/include/vmparam.h
+++ b/sys/powerpc/include/vmparam.h
@@ -78,7 +78,7 @@
#endif
#define SHAREDPAGE (VM_MAXUSER_ADDRESS - PAGE_SIZE)
#else /* LOCORE */
-#if !defined(__powerpc64__) && defined(E500)
+#if !defined(__powerpc64__) && defined(BOOKE)
#define VM_MIN_ADDRESS 0
#define VM_MAXUSER_ADDRESS 0x7ffff000
#endif
diff --git a/sys/powerpc/mpc85xx/fsl_sdhc.c b/sys/powerpc/mpc85xx/fsl_sdhc.c
new file mode 100644
index 000000000000..ecd6572524bb
--- /dev/null
+++ b/sys/powerpc/mpc85xx/fsl_sdhc.c
@@ -0,0 +1,1306 @@
+/*-
+ * Copyright (c) 2011-2012 Semihalf
+ * 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.
+ */
+
+/*
+ * Driver for Freescale integrated eSDHC controller.
+ * Limitations:
+ * - No support for multi-block transfers.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/module.h>
+#include <sys/mutex.h>
+#include <sys/rman.h>
+#include <sys/sysctl.h>
+#include <sys/systm.h>
+#include <sys/taskqueue.h>
+
+#include <machine/bus.h>
+#include <machine/vmparam.h>
+
+#include <dev/fdt/fdt_common.h>
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+
+#include <dev/mmc/bridge.h>
+#include <dev/mmc/mmcreg.h>
+#include <dev/mmc/mmcvar.h>
+#include <dev/mmc/mmcbrvar.h>
+
+#include <powerpc/mpc85xx/mpc85xx.h>
+
+#include "opt_platform.h"
+
+#include "mmcbr_if.h"
+
+#include "fsl_sdhc.h"
+
+#define DEBUG
+#undef DEBUG
+#ifdef DEBUG
+#define DPRINTF(fmt, arg...) printf("DEBUG %s(): " fmt, __FUNCTION__, ##arg)
+#else
+#define DPRINTF(fmt, arg...)
+#endif
+
+
+/*****************************************************************************
+ * Register the driver
+ *****************************************************************************/
+/* Forward declarations */
+static int fsl_sdhc_probe(device_t);
+static int fsl_sdhc_attach(device_t);
+static int fsl_sdhc_detach(device_t);
+
+static int fsl_sdhc_read_ivar(device_t, device_t, int, uintptr_t *);
+static int fsl_sdhc_write_ivar(device_t, device_t, int, uintptr_t);
+
+static int fsl_sdhc_update_ios(device_t, device_t);
+static int fsl_sdhc_request(device_t, device_t, struct mmc_request *);
+static int fsl_sdhc_get_ro(device_t, device_t);
+static int fsl_sdhc_acquire_host(device_t, device_t);
+static int fsl_sdhc_release_host(device_t, device_t);
+
+static device_method_t fsl_sdhc_methods[] = {
+ /* device_if */
+ DEVMETHOD(device_probe, fsl_sdhc_probe),
+ DEVMETHOD(device_attach, fsl_sdhc_attach),
+ DEVMETHOD(device_detach, fsl_sdhc_detach),
+
+ /* Bus interface */
+ DEVMETHOD(bus_read_ivar, fsl_sdhc_read_ivar),
+ DEVMETHOD(bus_write_ivar, fsl_sdhc_write_ivar),
+
+ /* OFW bus interface */
+ DEVMETHOD(ofw_bus_get_compat, ofw_bus_gen_get_compat),
+ DEVMETHOD(ofw_bus_get_model, ofw_bus_gen_get_model),
+ DEVMETHOD(ofw_bus_get_name, ofw_bus_gen_get_name),
+ DEVMETHOD(ofw_bus_get_node, ofw_bus_gen_get_node),
+ DEVMETHOD(ofw_bus_get_type, ofw_bus_gen_get_type),
+
+ /* mmcbr_if */
+ DEVMETHOD(mmcbr_update_ios, fsl_sdhc_update_ios),
+ DEVMETHOD(mmcbr_request, fsl_sdhc_request),
+ DEVMETHOD(mmcbr_get_ro, fsl_sdhc_get_ro),
+ DEVMETHOD(mmcbr_acquire_host, fsl_sdhc_acquire_host),
+ DEVMETHOD(mmcbr_release_host, fsl_sdhc_release_host),
+
+ {0, 0},
+};
+
+/* kobj_class definition */
+static driver_t fsl_sdhc_driver = {
+ "sdhci",
+ fsl_sdhc_methods,
+ sizeof(struct fsl_sdhc_softc)
+};
+
+static devclass_t fsl_sdhc_devclass;
+
+DRIVER_MODULE(sdhci, simplebus, fsl_sdhc_driver, fsl_sdhc_devclass, 0, 0);
+
+
+/*****************************************************************************
+ * Private methods
+ *****************************************************************************/
+static inline int
+read4(struct fsl_sdhc_softc *sc, unsigned int offset)
+{
+
+ return bus_space_read_4(sc->bst, sc->bsh, offset);
+}
+
+static inline void
+write4(struct fsl_sdhc_softc *sc, unsigned int offset, int value)
+{
+
+ bus_space_write_4(sc->bst, sc->bsh, offset, value);
+}
+
+static inline void
+set_bit(struct fsl_sdhc_softc *sc, uint32_t offset, uint32_t mask)
+{
+ uint32_t x = read4(sc, offset);
+
+ write4(sc, offset, x | mask);
+}
+
+static inline void
+clear_bit(struct fsl_sdhc_softc *sc, uint32_t offset, uint32_t mask)
+{
+ uint32_t x = read4(sc, offset);
+
+ write4(sc, offset, x & ~mask);
+}
+
+static int
+wait_for_bit_clear(struct fsl_sdhc_softc *sc, enum sdhc_reg_off reg,
+ uint32_t bit)
+{
+ uint32_t timeout = 10;
+ uint32_t stat;
+
+ stat = read4(sc, reg);
+ while (stat & bit) {
+ if (timeout == 0) {
+ return (-1);
+ }
+ --timeout;
+ DELAY(1000);
+ stat = read4(sc, reg);
+ }
+
+ return (0);
+}
+
+static int
+wait_for_free_line(struct fsl_sdhc_softc *sc, enum sdhc_line line)
+{
+ uint32_t timeout = 100;
+ uint32_t stat;
+
+ stat = read4(sc, SDHC_PRSSTAT);
+ while (stat & line) {
+ if (timeout == 0) {
+ return (-1);
+ }
+ --timeout;
+ DELAY(1000);
+ stat = read4(sc, SDHC_PRSSTAT);
+ }
+
+ return (0);
+}
+
+static uint32_t
+get_platform_clock(struct fsl_sdhc_softc *sc)
+{
+ device_t self, parent;
+ phandle_t node;
+ uint32_t clock;
+
+ self = sc->self;
+ node = ofw_bus_get_node(self);
+
+ /* Get sdhci node properties */
+ if((OF_getprop(node, "clock-frequency", (void *)&clock,
+ sizeof(clock)) <= 0) || (clock == 0)) {
+
+ /*
+ * Trying to get clock from parent device (soc) if correct
+ * clock cannot be acquired from sdhci node.
+ */
+ parent = device_get_parent(self);
+ node = ofw_bus_get_node(parent);
+
+ /* Get soc properties */
+ if ((OF_getprop(node, "bus-frequency", (void *)&clock,
+ sizeof(clock)) <= 0) || (clock == 0)) {
+ device_printf(self,"Cannot acquire correct sdhci "
+ "frequency from DTS.\n");
+
+ return (0);
+ }
+ }
+
+ DPRINTF("Acquired clock: %d from DTS\n", clock);
+
+ return (clock);
+}
+
+/**
+ * Set clock driving card.
+ * @param sc
+ * @param clock Desired clock frequency in Hz
+ */
+static void
+set_clock(struct fsl_sdhc_softc *sc, uint32_t clock)
+{
+ uint32_t base_clock;
+ uint32_t divisor, prescaler = 1;
+ uint32_t round = 0;
+
+ if (clock == sc->slot.clock)
+ return;
+
+ if (clock == 0) {
+ clear_bit(sc, SDHC_SYSCTL, MASK_CLOCK_CONTROL | SYSCTL_PEREN |
+ SYSCTL_HCKEN | SYSCTL_IPGEN);
+ return;
+ }
+
+ base_clock = sc->platform_clock;
+ round = base_clock & 0x2;
+ base_clock >>= 2;
+ base_clock += round;
+ round = 0;
+
+ /* SD specification 1.1 doesn't allow frequences above 50 MHz */
+ if (clock > FSL_SDHC_MAX_CLOCK)
+ clock = FSL_SDHC_MAX_CLOCK;
+
+ /*
+ * divisor = ceil(base_clock / clock)
+ * TODO: Reconsider symmetric rounding here instead of ceiling.
+ */
+ divisor = (base_clock + clock - 1) / clock;
+
+ while (divisor > 16) {
+ round = divisor & 0x1;
+ divisor >>= 1;
+
+ prescaler <<= 1;
+ }
+ divisor += round - 1;
+
+ /* Turn off the clock. */
+ clear_bit(sc, SDHC_SYSCTL, MASK_CLOCK_CONTROL);
+
+ /* Write clock settings. */
+ set_bit(sc, SDHC_SYSCTL, (prescaler << SHIFT_SDCLKFS) |
+ (divisor << SHIFT_DVS));
+
+ /*
+ * Turn on clocks.
+ * TODO: This actually disables clock automatic gating off feature of
+ * the controller which eventually should be enabled but as for now
+ * it prevents controller from generating card insertion/removal
+ * interrupts correctly.
+ */
+ set_bit(sc, SDHC_SYSCTL, SYSCTL_PEREN | SYSCTL_HCKEN | SYSCTL_IPGEN);
+
+ sc->slot.clock = clock;
+
+ DPRINTF("given clock = %d, computed clock = %d\n", clock,
+ (base_clock / prescaler) / (divisor + 1));
+}
+
+static inline void
+send_80_clock_ticks(struct fsl_sdhc_softc *sc)
+{
+ int err;
+
+ err = wait_for_free_line(sc, SDHC_CMD_LINE | SDHC_DAT_LINE);
+ if (err != 0) {
+ device_printf(sc->self, "Can't acquire data/cmd lines\n");
+ return;
+ }
+
+ set_bit(sc, SDHC_SYSCTL, SYSCTL_INITA);
+ err = wait_for_bit_clear(sc, SDHC_SYSCTL, SYSCTL_INITA);
+ if (err != 0) {
+ device_printf(sc->self, "Can't send 80 clocks to the card.\n");
+ }
+}
+
+static void
+set_bus_width(struct fsl_sdhc_softc *sc, enum mmc_bus_width width)
+{
+
+ DPRINTF("setting bus width to %d\n", width);
+ switch (width) {
+ case bus_width_1:
+ set_bit(sc, SDHC_PROCTL, DTW_1);
+ break;
+ case bus_width_4:
+ set_bit(sc, SDHC_PROCTL, DTW_4);
+ break;
+ case bus_width_8:
+ set_bit(sc, SDHC_PROCTL, DTW_8);
+ break;
+ default:
+ device_printf(sc->self, "Unsupported bus width\n");
+ }
+}
+
+static void
+reset_controller_all(struct fsl_sdhc_softc *sc)
+{
+ uint32_t count = 5;
+
+ set_bit(sc, SDHC_SYSCTL, SYSCTL_RSTA);
+ while (read4(sc, SDHC_SYSCTL) & SYSCTL_RSTA) {
+ DELAY(FSL_SDHC_RESET_DELAY);
+ --count;
+ if (count == 0) {
+ device_printf(sc->self,
+ "Can't reset the controller\n");
+ return;
+ }
+ }
+}
+
+static void
+reset_controller_dat_cmd(struct fsl_sdhc_softc *sc)
+{
+ int err;
+
+ set_bit(sc, SDHC_SYSCTL, SYSCTL_RSTD | SYSCTL_RSTC);
+ err = wait_for_bit_clear(sc, SDHC_SYSCTL, SYSCTL_RSTD | SYSCTL_RSTC);
+ if (err != 0) {
+ device_printf(sc->self, "Can't reset data & command part!\n");
+ return;
+ }
+}
+
+static void
+init_controller(struct fsl_sdhc_softc *sc)
+{
+
+ /* Enable interrupts. */
+#ifdef FSL_SDHC_NO_DMA
+ write4(sc, SDHC_IRQSTATEN, MASK_IRQ_ALL & ~IRQ_DINT & ~IRQ_DMAE);
+ write4(sc, SDHC_IRQSIGEN, MASK_IRQ_ALL & ~IRQ_DINT & ~IRQ_DMAE);
+#else
+ write4(sc, SDHC_IRQSTATEN, MASK_IRQ_ALL & ~IRQ_BRR & ~IRQ_BWR);
+ write4(sc, SDHC_IRQSIGEN, MASK_IRQ_ALL & ~IRQ_BRR & ~IRQ_BWR);
+
+ /* Write DMA address */
+ write4(sc, SDHC_DSADDR, sc->dma_phys);
+
+ /* Enable snooping and fix for AHB2MAG bypass. */
+ write4(sc, SDHC_DCR, DCR_SNOOP | DCR_AHB2MAG_BYPASS);
+#endif
+ /* Set data timeout. */
+ set_bit(sc, SDHC_SYSCTL, 0xe << SHIFT_DTOCV);
+
+ /* Set water-mark levels (FIFO buffer size). */
+ write4(sc, SDHC_WML, (FSL_SDHC_FIFO_BUF_WORDS << 16) |
+ FSL_SDHC_FIFO_BUF_WORDS);
+}
+
+static void
+init_mmc_host_struct(struct fsl_sdhc_softc *sc)
+{
+ struct mmc_host *host = &sc->mmc_host;
+
+ /* Clear host structure. */
+ bzero(host, sizeof(struct mmc_host));
+
+ /* Calculate minimum and maximum operating frequencies. */
+ host->f_min = sc->platform_clock / FSL_SDHC_MAX_DIV;
+ host->f_max = FSL_SDHC_MAX_CLOCK;
+
+ /* Set operation conditions (voltage). */
+ host->host_ocr = MMC_OCR_320_330 | MMC_OCR_330_340;
+
+ /* Set additional host controller capabilities. */
+ host->caps = MMC_CAP_4_BIT_DATA;
+
+ /* Set mode. */
+ host->mode = mode_sd;
+}
+
+static void
+card_detect_task(void *arg, int pending)
+{
+ struct fsl_sdhc_softc *sc = (struct fsl_sdhc_softc *)arg;
+ int err;
+ int insert;
+
+ insert = read4(sc, SDHC_PRSSTAT) & PRSSTAT_CINS;
+
+ mtx_lock(&sc->mtx);
+
+ if (insert) {
+ if (sc->child != NULL) {
+ mtx_unlock(&sc->mtx);
+ return;
+ }
+
+ sc->child = device_add_child(sc->self, "mmc", -1);
+ if (sc->child == NULL) {
+ device_printf(sc->self, "Couldn't add MMC bus!\n");
+ mtx_unlock(&sc->mtx);
+ return;
+ }
+
+ /* Initialize MMC bus host structure. */
+ init_mmc_host_struct(sc);
+ device_set_ivars(sc->child, &sc->mmc_host);
+
+ } else {
+ if (sc->child == NULL) {
+ mtx_unlock(&sc->mtx);
+ return;
+ }
+ }
+
+ mtx_unlock(&sc->mtx);
+
+ if (insert) {
+ if ((err = device_probe_and_attach(sc->child)) != 0) {
+ device_printf(sc->self, "MMC bus failed on probe "
+ "and attach! error %d\n", err);
+ device_delete_child(sc->self, sc->child);
+ sc->child = NULL;
+ }
+ } else {
+ if (device_delete_child(sc->self, sc->child) != 0)
+ device_printf(sc->self, "Could not delete MMC bus!\n");
+ sc->child = NULL;
+ }
+}
+
+static void
+card_detect_delay(void *arg)
+{
+ struct fsl_sdhc_softc *sc = arg;
+
+ taskqueue_enqueue(taskqueue_swi_giant, &sc->card_detect_task);
+}
+
+static void
+finalize_request(struct fsl_sdhc_softc *sc)
+{
+
+ DPRINTF("finishing request %x\n", sc->request);
+
+ sc->request->done(sc->request);
+ sc->request = NULL;
+}
+
+/**
+ * Read response from card.
+ * @todo Implement Auto-CMD responses being held in R3 for multi-block xfers.
+ * @param sc
+ */
+static void
+get_response(struct fsl_sdhc_softc *sc)
+{
+ struct mmc_command *cmd = sc->request->cmd;
+ int i;
+ uint32_t val;
+ uint8_t ext = 0;
+
+ if (cmd->flags & MMC_RSP_136) {
+ /* CRC is stripped, need to shift one byte left. */
+ for (i = 0; i < 4; i++) {
+ val = read4(sc, SDHC_CMDRSP0 + i * 4);
+ cmd->resp[3 - i] = (val << 8) + ext;
+ ext = val >> 24;
+ }
+ } else {
+ cmd->resp[0] = read4(sc, SDHC_CMDRSP0);
+ }
+}
+
+#ifdef FSL_SDHC_NO_DMA
+/**
+ * Read all content of a fifo buffer.
+ * @warning Assumes data buffer is 32-bit aligned.
+ * @param sc
+ */
+static void
+read_block_pio(struct fsl_sdhc_softc *sc)
+{
+ struct mmc_data *data = sc->request->cmd->data;
+ size_t left = min(FSL_SDHC_FIFO_BUF_SIZE, data->len);
+ uint8_t *buf = data->data;
+ uint32_t word;
+
+ buf += sc->data_offset;
+ bus_space_read_multi_4(sc->bst, sc->bsh, SDHC_DATPORT, (uint32_t *)buf,
+ left >> 2);
+
+ sc->data_offset += left;
+
+ /* Handle 32-bit unaligned size case. */
+ left &= 0x3;
+ if (left > 0) {
+ buf = (uint8_t *)data->data + (sc->data_offset & ~0x3);
+ word = read4(sc, SDHC_DATPORT);
+ while (left > 0) {
+ *(buf++) = word;
+ word >>= 8;
+ --left;
+ }
+ }
+}
+
+/**
+ * Write a fifo buffer.
+ * @warning Assumes data buffer size is 32-bit aligned.
+ * @param sc
+ */
+static void
+write_block_pio(struct fsl_sdhc_softc *sc)
+{
+ struct mmc_data *data = sc->request->cmd->data;
+ size_t left = min(FSL_SDHC_FIFO_BUF_SIZE, data->len);
+ uint8_t *buf = data->data;
+ uint32_t word = 0;
+
+ DPRINTF("sc->data_offset %d\n", sc->data_offset);
+
+ buf += sc->data_offset;
+ bus_space_write_multi_4(sc->bst, sc->bsh, SDHC_DATPORT, (uint32_t *)buf,
+ left >> 2);
+
+ sc->data_offset += left;
+
+ /* Handle 32-bit unaligned size case. */
+ left &= 0x3;
+ if (left > 0) {
+ buf = (uint8_t *)data->data + (sc->data_offset & ~0x3);
+ while (left > 0) {
+ word += *(buf++);
+ word <<= 8;
+ --left;
+ }
+ write4(sc, SDHC_DATPORT, word);
+ }
+}
+
+static void
+pio_read_transfer(struct fsl_sdhc_softc *sc)
+{
+
+ while (read4(sc, SDHC_PRSSTAT) & PRSSTAT_BREN) {
+ read_block_pio(sc);
+
+ /*
+ * TODO: should we check here whether data_offset >= data->len?
+ */
+ }
+}
+
+static void
+pio_write_transfer(struct fsl_sdhc_softc *sc)
+{
+
+ while (read4(sc, SDHC_PRSSTAT) & PRSSTAT_BWEN) {
+ write_block_pio(sc);
+
+ /*
+ * TODO: should we check here whether data_offset >= data->len?
+ */
+ }
+}
+#endif /* FSL_SDHC_USE_DMA */
+
+static inline void
+handle_command_intr(struct fsl_sdhc_softc *sc, uint32_t irq_stat)
+{
+ struct mmc_command *cmd = sc->request->cmd;
+
+ /* Handle errors. */
+ if (irq_stat & IRQ_CTOE) {
+ cmd->error = MMC_ERR_TIMEOUT;
+ } else if (irq_stat & IRQ_CCE) {
+ cmd->error = MMC_ERR_BADCRC;
+ } else if (irq_stat & (IRQ_CEBE | IRQ_CIE)) {
+ cmd->error = MMC_ERR_FIFO;
+ }
+
+ if (cmd->error) {
+ device_printf(sc->self, "Error interrupt occured\n");
+ reset_controller_dat_cmd(sc);
+ return;
+ }
+
+ if (sc->command_done)
+ return;
+
+ if (irq_stat & IRQ_CC) {
+ sc->command_done = 1;
+
+ if (cmd->flags & MMC_RSP_PRESENT)
+ get_response(sc);
+ }
+}
+
+static inline void
+handle_data_intr(struct fsl_sdhc_softc *sc, uint32_t irq_stat)
+{
+ struct mmc_command *cmd = sc->request->cmd;
+
+ /* Handle errors. */
+ if (irq_stat & IRQ_DTOE) {
+ cmd->error = MMC_ERR_TIMEOUT;
+ } else if (irq_stat & (IRQ_DCE | IRQ_DEBE)) {
+ cmd->error = MMC_ERR_BADCRC;
+ } else if (irq_stat & IRQ_ERROR_DATA_MASK) {
+ cmd->error = MMC_ERR_FAILED;
+ }
+
+ if (cmd->error) {
+ device_printf(sc->self, "Error interrupt occured\n");
+ sc->data_done = 1;
+ reset_controller_dat_cmd(sc);
+ return;
+ }
+
+ if (sc->data_done)
+ return;
+
+#ifdef FSL_SDHC_NO_DMA
+ if (irq_stat & IRQ_BRR) {
+ pio_read_transfer(sc);
+ }
+
+ if (irq_stat & IRQ_BWR) {
+ pio_write_transfer(sc);
+ }
+#else
+ if (irq_stat & IRQ_DINT) {
+ struct mmc_data *data = sc->request->cmd->data;
+
+ /* Synchronize DMA. */
+ if (data->flags & MMC_DATA_READ) {
+ bus_dmamap_sync(sc->dma_tag, sc->dma_map,
+ BUS_DMASYNC_POSTREAD);
+ memcpy(data->data, sc->dma_mem, data->len);
+ } else {
+ bus_dmamap_sync(sc->dma_tag, sc->dma_map,
+ BUS_DMASYNC_POSTWRITE);
+ }
+
+ /*
+ * TODO: For multiple block transfers, address of dma memory
+ * in DSADDR register should be set to the beginning of the
+ * segment here. Also offset to data pointer should be handled.
+ */
+ }
+#endif
+
+ if (irq_stat & IRQ_TC)
+ sc->data_done = 1;
+}
+
+static void
+interrupt_handler(void *arg)
+{
+ struct fsl_sdhc_softc *sc = (struct fsl_sdhc_softc *)arg;
+ uint32_t irq_stat;
+
+ mtx_lock(&sc->mtx);
+
+ irq_stat = read4(sc, SDHC_IRQSTAT);
+
+ /* Card interrupt. */
+ if (irq_stat & IRQ_CINT) {
+ DPRINTF("Card interrupt recievied\n");
+
+ }
+
+ /* Card insertion interrupt. */
+ if (irq_stat & IRQ_CINS) {
+ clear_bit(sc, SDHC_IRQSIGEN, IRQ_CINS);
+ clear_bit(sc, SDHC_IRQSTATEN, IRQ_CINS);
+ set_bit(sc, SDHC_IRQSIGEN, IRQ_CRM);
+ set_bit(sc, SDHC_IRQSTATEN, IRQ_CRM);
+
+ callout_reset(&sc->card_detect_callout, hz / 2,
+ card_detect_delay, sc);
+ }
+
+ /* Card removal interrupt. */
+ if (irq_stat & IRQ_CRM) {
+ clear_bit(sc, SDHC_IRQSIGEN, IRQ_CRM);
+ clear_bit(sc, SDHC_IRQSTATEN, IRQ_CRM);
+ set_bit(sc, SDHC_IRQSIGEN, IRQ_CINS);
+ set_bit(sc, SDHC_IRQSTATEN, IRQ_CINS);
+
+ callout_stop(&sc->card_detect_callout);
+ taskqueue_enqueue(taskqueue_swi_giant, &sc->card_detect_task);
+ }
+
+ /* Handle request interrupts. */
+ if (sc->request) {
+ handle_command_intr(sc, irq_stat);
+ handle_data_intr(sc, irq_stat);
+
+ /*
+ * Finalize request when transfer is done successfully
+ * or was interrupted due to error.
+ */
+ if ((sc->data_done && sc->command_done) ||
+ (sc->request->cmd->error))
+ finalize_request(sc);
+ }
+
+ /* Clear status register. */
+ write4(sc, SDHC_IRQSTAT, irq_stat);
+
+ mtx_unlock(&sc->mtx);
+}
+
+#ifndef FSL_SDHC_NO_DMA
+static void
+dma_get_phys_addr(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
+{
+
+ if (error != 0)
+ return;
+
+ /* Get first segment's physical address. */
+ *(bus_addr_t *)arg = segs->ds_addr;
+}
+
+static int
+init_dma(struct fsl_sdhc_softc *sc)
+{
+ device_t self = sc->self;
+ int err;
+
+ err = bus_dma_tag_create(bus_get_dma_tag(self),
+ FSL_SDHC_DMA_BLOCK_SIZE, 0, BUS_SPACE_MAXADDR_32BIT,
+ BUS_SPACE_MAXADDR, NULL, NULL, FSL_SDHC_DMA_BLOCK_SIZE, 1,
+ FSL_SDHC_DMA_BLOCK_SIZE, BUS_DMA_ALLOCNOW, NULL, NULL,
+ &sc->dma_tag);
+
+ if (err) {
+ device_printf(self, "Could not create DMA tag!\n");
+ return (-1);
+ }
+
+ err = bus_dmamem_alloc(sc->dma_tag, (void **)&(sc->dma_mem),
+ BUS_DMA_NOWAIT | BUS_DMA_NOCACHE, &sc->dma_map);
+ if (err) {
+ device_printf(self, "Could not allocate DMA memory!\n");
+ goto fail1;
+ }
+
+ err = bus_dmamap_load(sc->dma_tag, sc->dma_map, (void *)sc->dma_mem,
+ FSL_SDHC_DMA_BLOCK_SIZE, dma_get_phys_addr, &sc->dma_phys, 0);
+ if (err) {
+ device_printf(self, "Could not load DMA map!\n");
+ goto fail2;
+ }
+
+ return (0);
+
+fail2:
+ bus_dmamem_free(sc->dma_tag, sc->dma_mem, sc->dma_map);
+fail1:
+ bus_dma_tag_destroy(sc->dma_tag);
+
+ return (-1);
+}
+#endif /* FSL_SDHC_NO_DMA */
+
+static uint32_t
+set_xfertyp_register(const struct mmc_command *cmd)
+{
+ uint32_t xfertyp = 0;
+
+ /* Set command index. */
+ xfertyp |= cmd->opcode << CMDINX_SHIFT;
+
+ /* Set command type. */
+ if (cmd->opcode == MMC_STOP_TRANSMISSION)
+ xfertyp |= CMDTYP_ABORT;
+
+ /* Set data preset select. */
+ if (cmd->data) {
+ xfertyp |= XFERTYP_DPSEL;
+
+ /* Set transfer direction. */
+ if (cmd->data->flags & MMC_DATA_READ)
+ xfertyp |= XFERTYP_DTDSEL;
+ }
+
+ /* Set command index check. */
+ if (cmd->flags & MMC_RSP_OPCODE)
+ xfertyp |= XFERTYP_CICEN;
+
+ /* Set command CRC check. */
+ if (cmd->flags & MMC_RSP_CRC)
+ xfertyp |= XFERTYP_CCCEN;
+
+ /* Set response type */
+ if (!(cmd->flags & MMC_RSP_PRESENT))
+ xfertyp |= RSPTYP_NONE;
+ else if (cmd->flags & MMC_RSP_136)
+ xfertyp |= RSPTYP_136;
+ else if (cmd->flags & MMC_RSP_BUSY)
+ xfertyp |= RSPTYP_48_BUSY;
+ else
+ xfertyp |= RSPTYP_48;
+
+#ifndef FSL_SDHC_NO_DMA
+ /* Enable DMA */
+ xfertyp |= XFERTYP_DMAEN;
+#endif
+
+ return (xfertyp);
+}
+
+static uint32_t
+set_blkattr_register(const struct mmc_data *data)
+{
+
+ if (data->len <= FSL_SDHC_MAX_BLOCK_SIZE) {
+ /* One block transfer. */
+ return (BLKATTR_BLOCK_COUNT(1) | ((data->len) &
+ BLKATTR_BLKSZE));
+ }
+
+ /* TODO: Write code here for multi-block transfers. */
+ return (0);
+}
+
+/**
+ * Initiate data transfer. Interrupt handler will finalize it.
+ * @todo Implement multi-block transfers.
+ * @param sc
+ * @param cmd
+ */
+static int
+start_data(struct fsl_sdhc_softc *sc, struct mmc_data *data)
+{
+ uint32_t reg;
+
+ if ((uint32_t)data->data & 0x3) {
+ device_printf(sc->self, "32-bit unaligned data pointer in "
+ "request\n");
+ return (-1);
+ }
+
+ sc->data_done = 0;
+
+#ifdef FSL_SDHC_NO_DMA
+ sc->data_ptr = data->data;
+ sc->data_offset = 0;
+#else
+ /* Write DMA address register. */
+ write4(sc, SDHC_DSADDR, sc->dma_phys);
+
+ /* Synchronize DMA. */
+ if (data->flags & MMC_DATA_READ) {
+ bus_dmamap_sync(sc->dma_tag, sc->dma_map,
+ BUS_DMASYNC_PREREAD);
+ } else {
+ memcpy(sc->dma_mem, data->data, data->len);
+ bus_dmamap_sync(sc->dma_tag, sc->dma_map,
+ BUS_DMASYNC_PREWRITE);
+ }
+#endif
+ /* Set block size and count. */
+ reg = set_blkattr_register(data);
+ if (reg == 0) {
+ device_printf(sc->self, "Requested unsupported multi-block "
+ "transfer.\n");
+ return (-1);
+ }
+ write4(sc, SDHC_BLKATTR, reg);
+
+ return (0);
+}
+
+static int
+start_command(struct fsl_sdhc_softc *sc, struct mmc_command *cmd)
+{
+ struct mmc_request *req = sc->request;
+ uint32_t mask;
+ uint32_t xfertyp;
+ int err;
+
+ DPRINTF("opcode %d, flags 0x%08x\n", cmd->opcode, cmd->flags);
+ DPRINTF("PRSSTAT = 0x%08x\n", read4(sc, SDHC_PRSSTAT));
+
+ sc->command_done = 0;
+
+ cmd->error = MMC_ERR_NONE;
+
+ /* TODO: should we check here for card presence and clock settings? */
+
+ /* Always wait for free CMD line. */
+ mask = SDHC_CMD_LINE;
+ /* Wait for free DAT if we have data or busy signal. */
+ if (cmd->data || (cmd->flags & MMC_RSP_BUSY))
+ mask |= SDHC_DAT_LINE;
+ /* We shouldn't wait for DAT for stop commands. */
+ if (cmd == req->stop)
+ mask &= ~SDHC_DAT_LINE;
+ err = wait_for_free_line(sc, mask);
+ if (err != 0) {
+ device_printf(sc->self, "Controller never released inhibit "
+ "bit(s).\n");
+ reset_controller_dat_cmd(sc);
+ cmd->error = MMC_ERR_FAILED;
+ sc->request = NULL;
+ req->done(req);
+ return (-1);
+ }
+
+ xfertyp = set_xfertyp_register(cmd);
+
+ if (cmd->data != NULL) {
+ err = start_data(sc, cmd->data);
+ if (err != 0) {
+ device_printf(sc->self,
+ "Data transfer request failed\n");
+ reset_controller_dat_cmd(sc);
+ cmd->error = MMC_ERR_FAILED;
+ sc->request = NULL;
+ req->done(req);
+ return (-1);
+ }
+ }
+
+ write4(sc, SDHC_CMDARG, cmd->arg);
+ write4(sc, SDHC_XFERTYP, xfertyp);
+
+ DPRINTF("XFERTYP = 0x%08x\n", xfertyp);
+ DPRINTF("CMDARG = 0x%08x\n", cmd->arg);
+
+ return (0);
+}
+
+#ifdef DEBUG
+static void
+dump_registers(struct fsl_sdhc_softc *sc)
+{
+ printf("PRSSTAT = 0x%08x\n", read4(sc, SDHC_PRSSTAT));
+ printf("PROCTL = 0x%08x\n", read4(sc, SDHC_PROCTL));
+ printf("PMUXCR = 0x%08x\n", ccsr_read4(OCP85XX_PMUXCR));
+ printf("HOSTCAPBLT = 0x%08x\n", read4(sc, SDHC_HOSTCAPBLT));
+ printf("IRQSTAT = 0x%08x\n", read4(sc, SDHC_IRQSTAT));
+ printf("IRQSTATEN = 0x%08x\n", read4(sc, SDHC_IRQSTATEN));
+ printf("IRQSIGEN = 0x%08x\n", read4(sc, SDHC_IRQSIGEN));
+ printf("WML = 0x%08x\n", read4(sc, SDHC_WML));
+ printf("DSADDR = 0x%08x\n", read4(sc, SDHC_DSADDR));
+ printf("XFERTYP = 0x%08x\n", read4(sc, SDHC_XFERTYP));
+ printf("ECMCR = 0x%08x\n", ccsr_read4(OCP85XX_ECMCR));
+ printf("DCR = 0x%08x\n", read4(sc, SDHC_DCR));
+}
+#endif
+
+/*****************************************************************************
+ * Public methods
+ *****************************************************************************/
+/*
+ * Device interface methods.
+ */
+static int
+fsl_sdhc_probe(device_t self)
+{
+ static const char *desc =
+ "Freescale Enhanced Secure Digital Host Controller";
+
+ if (!ofw_bus_is_compatible(self, "fsl,p2020-esdhc") &&
+ !ofw_bus_is_compatible(self, "fsl,esdhc"))
+ return (ENXIO);
+
+ device_set_desc(self, desc);
+
+ return (BUS_PROBE_VENDOR);
+}
+
+static int
+fsl_sdhc_attach(device_t self)
+{
+ struct fsl_sdhc_softc *sc;
+
+ sc = device_get_softc(self);
+
+ sc->self = self;
+
+ mtx_init(&sc->mtx, device_get_nameunit(self), NULL, MTX_DEF);
+
+ /* Setup memory resource */
+ sc->mem_rid = 0;
+ sc->mem_resource = bus_alloc_resource_any(self, SYS_RES_MEMORY,
+ &sc->mem_rid, RF_ACTIVE);
+ if (sc->mem_resource == NULL) {
+ device_printf(self, "Could not allocate memory.\n");
+ goto fail;
+ }
+ sc->bst = rman_get_bustag(sc->mem_resource);
+ sc->bsh = rman_get_bushandle(sc->mem_resource);
+
+ /* Setup interrupt resource. */
+ sc->irq_rid = 0;
+ sc->irq_resource = bus_alloc_resource_any(self, SYS_RES_IRQ,
+ &sc->irq_rid, RF_ACTIVE);
+ if (sc->irq_resource == NULL) {
+ device_printf(self, "Could not allocate interrupt.\n");
+ goto fail;
+ }
+ if (bus_setup_intr(self, sc->irq_resource, INTR_TYPE_MISC |
+ INTR_MPSAFE, NULL, interrupt_handler, sc, &sc->ihl) != 0) {
+ device_printf(self, "Could not setup interrupt.\n");
+ goto fail;
+ }
+
+ /* Setup DMA. */
+#ifndef FSL_SDHC_NO_DMA
+ if (init_dma(sc) != 0) {
+ device_printf(self, "Could not setup DMA\n");
+ }
+#endif
+ sc->bus_busy = 0;
+ sc->platform_clock = get_platform_clock(sc);
+ if (sc->platform_clock == 0) {
+ device_printf(self, "Could not get platform clock.\n");
+ goto fail;
+ }
+ sc->command_done = 1;
+ sc->data_done = 1;
+
+ /* Init card detection task. */
+ TASK_INIT(&sc->card_detect_task, 0, card_detect_task, sc);
+ callout_init(&sc->card_detect_callout, 1);
+
+ reset_controller_all(sc);
+ init_controller(sc);
+ set_clock(sc, 400000);
+ send_80_clock_ticks(sc);
+
+#ifdef DEBUG
+ dump_registers(sc);
+#endif
+
+ return (0);
+
+fail:
+ fsl_sdhc_detach(self);
+ return (ENXIO);
+}
+
+static int
+fsl_sdhc_detach(device_t self)
+{
+ struct fsl_sdhc_softc *sc = device_get_softc(self);
+ int err;
+
+ if (sc->child)
+ device_delete_child(self, sc->child);
+
+ taskqueue_drain(taskqueue_swi_giant, &sc->card_detect_task);
+
+#ifndef FSL_SDHC_NO_DMA
+ bus_dmamap_unload(sc->dma_tag, sc->dma_map);
+ bus_dmamem_free(sc->dma_tag, sc->dma_mem, sc->dma_map);
+ bus_dma_tag_destroy(sc->dma_tag);
+#endif
+
+ if (sc->ihl != NULL) {
+ err = bus_teardown_intr(self, sc->irq_resource, sc->ihl);
+ if (err)
+ return (err);
+ }
+ if (sc->irq_resource != NULL) {
+ err = bus_release_resource(self, SYS_RES_IRQ, sc->irq_rid,
+ sc->irq_resource);
+ if (err)
+ return (err);
+
+ }
+ if (sc->mem_resource != NULL) {
+ err = bus_release_resource(self, SYS_RES_MEMORY, sc->mem_rid,
+ sc->mem_resource);
+ if (err)
+ return (err);
+ }
+
+ mtx_destroy(&sc->mtx);
+
+ return (0);
+}
+
+
+/*
+ * Bus interface methods.
+ */
+static int
+fsl_sdhc_read_ivar(device_t self, device_t child, int index,
+ uintptr_t *result)
+{
+ struct mmc_host *host = device_get_ivars(child);
+
+ switch (index) {
+ case MMCBR_IVAR_BUS_MODE:
+ *(int *)result = host->ios.bus_mode;
+ break;
+ case MMCBR_IVAR_BUS_WIDTH:
+ *(int *)result = host->ios.bus_width;
+ break;
+ case MMCBR_IVAR_CHIP_SELECT:
+ *(int *)result = host->ios.chip_select;
+ break;
+ case MMCBR_IVAR_CLOCK:
+ *(int *)result = host->ios.clock;
+ break;
+ case MMCBR_IVAR_F_MIN:
+ *(int *)result = host->f_min;
+ break;
+ case MMCBR_IVAR_F_MAX:
+ *(int *)result = host->f_max;
+ break;
+ case MMCBR_IVAR_HOST_OCR:
+ *(int *)result = host->host_ocr;
+ break;
+ case MMCBR_IVAR_MODE:
+ *(int *)result = host->mode;
+ break;
+ case MMCBR_IVAR_OCR:
+ *(int *)result = host->ocr;
+ break;
+ case MMCBR_IVAR_POWER_MODE:
+ *(int *)result = host->ios.power_mode;
+ break;
+ case MMCBR_IVAR_VDD:
+ *(int *)result = host->ios.vdd;
+ break;
+ default:
+ return (EINVAL);
+ }
+
+ return (0);
+}
+
+static int
+fsl_sdhc_write_ivar(device_t self, device_t child, int index,
+ uintptr_t value)
+{
+ struct mmc_host *host = device_get_ivars(child);
+
+ switch (index) {
+ case MMCBR_IVAR_BUS_MODE:
+ host->ios.bus_mode = value;
+ break;
+ case MMCBR_IVAR_BUS_WIDTH:
+ host->ios.bus_width = value;
+ break;
+ case MMCBR_IVAR_CHIP_SELECT:
+ host->ios.chip_select = value;
+ break;
+ case MMCBR_IVAR_CLOCK:
+ host->ios.clock = value;
+ break;
+ case MMCBR_IVAR_MODE:
+ host->mode = value;
+ break;
+ case MMCBR_IVAR_OCR:
+ host->ocr = value;
+ break;
+ case MMCBR_IVAR_POWER_MODE:
+ host->ios.power_mode = value;
+ break;
+ case MMCBR_IVAR_VDD:
+ host->ios.vdd = value;
+ break;
+ case MMCBR_IVAR_HOST_OCR:
+ case MMCBR_IVAR_F_MIN:
+ case MMCBR_IVAR_F_MAX:
+ default:
+ /* Instance variable not writable. */
+ return (EINVAL);
+ }
+
+ return (0);
+}
+
+
+/*
+ * MMC bridge methods.
+ */
+static int
+fsl_sdhc_update_ios(device_t self, device_t reqdev)
+{
+ struct fsl_sdhc_softc *sc = device_get_softc(self);
+ struct mmc_host *host = device_get_ivars(reqdev);
+ struct mmc_ios *ios = &host->ios;
+
+ mtx_lock(&sc->mtx);
+
+ /* Full reset on bus power down to clear from any state. */
+ if (ios->power_mode == power_off) {
+ reset_controller_all(sc);
+ init_controller(sc);
+ }
+
+ set_clock(sc, ios->clock);
+ set_bus_width(sc, ios->bus_width);
+
+ mtx_unlock(&sc->mtx);
+
+ return (0);
+}
+
+static int
+fsl_sdhc_request(device_t self, device_t reqdev, struct mmc_request *req)
+{
+ struct fsl_sdhc_softc *sc = device_get_softc(self);
+ int err;
+
+ mtx_lock(&sc->mtx);
+
+ sc->request = req;
+ err = start_command(sc, req->cmd);
+
+ mtx_unlock(&sc->mtx);
+
+ return (err);
+}
+
+static int
+fsl_sdhc_get_ro(device_t self, device_t reqdev)
+{
+ struct fsl_sdhc_softc *sc = device_get_softc(self);
+
+ /* Wouldn't it be faster using branching (if {}) ?? */
+ return (((read4(sc, SDHC_PRSSTAT) & PRSSTAT_WPSPL) >> 19) ^ 0x1);
+}
+
+static int
+fsl_sdhc_acquire_host(device_t self, device_t reqdev)
+{
+ struct fsl_sdhc_softc *sc = device_get_softc(self);
+ int retval = 0;
+
+ mtx_lock(&sc->mtx);
+
+ while (sc->bus_busy)
+ retval = mtx_sleep(sc, &sc->mtx, PZERO, "sdhcah", 0);
+ ++(sc->bus_busy);
+
+ mtx_unlock(&sc->mtx);
+
+ return (retval);
+}
+
+static int
+fsl_sdhc_release_host(device_t self, device_t reqdev)
+{
+ struct fsl_sdhc_softc *sc = device_get_softc(self);
+
+ mtx_lock(&sc->mtx);
+ --(sc->bus_busy);
+ mtx_unlock(&sc->mtx);
+ wakeup(sc);
+
+ return (0);
+}
diff --git a/sys/powerpc/mpc85xx/fsl_sdhc.h b/sys/powerpc/mpc85xx/fsl_sdhc.h
new file mode 100644
index 000000000000..9bd2e3d3c4df
--- /dev/null
+++ b/sys/powerpc/mpc85xx/fsl_sdhc.h
@@ -0,0 +1,297 @@
+/*-
+ * Copyright (c) 2011-2012 Semihalf
+ * 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 FSL_SDHC_H_
+#define FSL_SDHC_H_
+
+#include <sys/cdefs.h>
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/module.h>
+#include <sys/mutex.h>
+#include <sys/rman.h>
+#include <sys/sysctl.h>
+#include <sys/systm.h>
+#include <sys/taskqueue.h>
+
+#include <machine/bus.h>
+
+#include <dev/mmc/bridge.h>
+#include <dev/mmc/mmcreg.h>
+#include <dev/mmc/mmcvar.h>
+#include <dev/mmc/mmcbrvar.h>
+
+#include "mmcbr_if.h"
+
+
+/*****************************************************************************
+ * Private defines
+ *****************************************************************************/
+struct slot {
+ uint32_t clock;
+};
+
+struct fsl_sdhc_softc {
+ device_t self;
+ device_t child;
+
+ bus_space_handle_t bsh;
+ bus_space_tag_t bst;
+
+ struct resource *mem_resource;
+ int mem_rid;
+ struct resource *irq_resource;
+ int irq_rid;
+ void *ihl;
+
+ bus_dma_tag_t dma_tag;
+ bus_dmamap_t dma_map;
+ uint32_t* dma_mem;
+ bus_addr_t dma_phys;
+
+ struct mtx mtx;
+
+ struct task card_detect_task;
+ struct callout card_detect_callout;
+
+ struct mmc_host mmc_host;
+
+ struct slot slot;
+ uint32_t bus_busy;
+ uint32_t platform_clock;
+
+ struct mmc_request *request;
+ int data_done;
+ int command_done;
+ int use_dma;
+ uint32_t* data_ptr;
+ uint32_t data_offset;
+};
+
+#define FSL_SDHC_RESET_DELAY 50
+
+#define FSL_SDHC_BASE_CLOCK_DIV (2)
+#define FSL_SDHC_MAX_DIV (FSL_SDHC_BASE_CLOCK_DIV * 256 * 16)
+#define FSL_SDHC_MIN_DIV (FSL_SDHC_BASE_CLOCK_DIV * 2)
+#define FSL_SDHC_MAX_CLOCK (50000000)
+
+#define FSL_SDHC_MAX_BLOCK_COUNT (65535)
+#define FSL_SDHC_MAX_BLOCK_SIZE (4096)
+
+#define FSL_SDHC_FIFO_BUF_SIZE (64) /* Water-mark level. */
+#define FSL_SDHC_FIFO_BUF_WORDS (FSL_SDHC_FIFO_BUF_SIZE / 4)
+
+#define FSL_SDHC_DMA_SEGMENT_SIZE (1024)
+#define FSL_SDHC_DMA_ALIGNMENT (4)
+#define FSL_SDHC_DMA_BLOCK_SIZE FSL_SDHC_MAX_BLOCK_SIZE
+
+
+/*
+ * Offsets of SD HC registers
+ */
+enum sdhc_reg_off {
+ SDHC_DSADDR = 0x000,
+ SDHC_BLKATTR = 0x004,
+ SDHC_CMDARG = 0x008,
+ SDHC_XFERTYP = 0x00c,
+ SDHC_CMDRSP0 = 0x010,
+ SDHC_CMDRSP1 = 0x014,
+ SDHC_CMDRSP2 = 0x018,
+ SDHC_CMDRSP3 = 0x01c,
+ SDHC_DATPORT = 0x020,
+ SDHC_PRSSTAT = 0x024,
+ SDHC_PROCTL = 0x028,
+ SDHC_SYSCTL = 0x02c,
+ SDHC_IRQSTAT = 0x030,
+ SDHC_IRQSTATEN = 0x034,
+ SDHC_IRQSIGEN = 0x038,
+ SDHC_AUTOC12ERR = 0x03c,
+ SDHC_HOSTCAPBLT = 0x040,
+ SDHC_WML = 0x044,
+ SDHC_FEVT = 0x050,
+ SDHC_HOSTVER = 0x0fc,
+ SDHC_DCR = 0x40c
+};
+
+enum sysctl_bit {
+ SYSCTL_INITA = 0x08000000,
+ SYSCTL_RSTD = 0x04000000,
+ SYSCTL_RSTC = 0x02000000,
+ SYSCTL_RSTA = 0x01000000,
+ SYSCTL_DTOCV = 0x000f0000,
+ SYSCTL_SDCLKFS = 0x0000ff00,
+ SYSCTL_DVS = 0x000000f0,
+ SYSCTL_PEREN = 0x00000004,
+ SYSCTL_HCKEN = 0x00000002,
+ SYSCTL_IPGEN = 0x00000001
+};
+
+#define HEX_LEFT_SHIFT(x) (4 * x)
+enum sysctl_shift {
+ SHIFT_DTOCV = HEX_LEFT_SHIFT(4),
+ SHIFT_SDCLKFS = HEX_LEFT_SHIFT(2),
+ SHIFT_DVS = HEX_LEFT_SHIFT(1)
+};
+
+enum proctl_bit {
+ PROCTL_WECRM = 0x04000000,
+ PROCTL_WECINS = 0x02000000,
+ PROCTL_WECINT = 0x01000000,
+ PROCTL_RWCTL = 0x00040000,
+ PROCTL_CREQ = 0x00020000,
+ PROCTL_SABGREQ = 0x00010000,
+ PROCTL_CDSS = 0x00000080,
+ PROCTL_CDTL = 0x00000040,
+ PROCTL_EMODE = 0x00000030,
+ PROCTL_D3CD = 0x00000008,
+ PROCTL_DTW = 0x00000006
+};
+
+enum dtw {
+ DTW_1 = 0x00000000,
+ DTW_4 = 0x00000002,
+ DTW_8 = 0x00000004
+};
+
+enum prsstat_bit {
+ PRSSTAT_DLSL = 0xff000000,
+ PRSSTAT_CLSL = 0x00800000,
+ PRSSTAT_WPSPL = 0x00080000,
+ PRSSTAT_CDPL = 0x00040000,
+ PRSSTAT_CINS = 0x00010000,
+ PRSSTAT_BREN = 0x00000800,
+ PRSSTAT_BWEN = 0x00000400,
+ PRSSTAT_RTA = 0x00000200,
+ PRSSTAT_WTA = 0x00000100,
+ PRSSTAT_SDOFF = 0x00000080,
+ PRSSTAT_PEROFF = 0x00000040,
+ PRSSTAT_HCKOFF = 0x00000020,
+ PRSSTAT_IPGOFF = 0x00000010,
+ PRSSTAT_DLA = 0x00000004,
+ PRSSTAT_CDIHB = 0x00000002,
+ PRSSTAT_CIHB = 0x00000001
+
+};
+
+enum irq_bits {
+ IRQ_DMAE = 0x10000000,
+ IRQ_AC12E = 0x01000000,
+ IRQ_DEBE = 0x00400000,
+ IRQ_DCE = 0x00200000,
+ IRQ_DTOE = 0x00100000,
+ IRQ_CIE = 0x00080000,
+ IRQ_CEBE = 0x00040000,
+ IRQ_CCE = 0x00020000,
+ IRQ_CTOE = 0x00010000,
+ IRQ_CINT = 0x00000100,
+ IRQ_CRM = 0x00000080,
+ IRQ_CINS = 0x00000040,
+ IRQ_BRR = 0x00000020,
+ IRQ_BWR = 0x00000010,
+ IRQ_DINT = 0x00000008,
+ IRQ_BGE = 0x00000004,
+ IRQ_TC = 0x00000002,
+ IRQ_CC = 0x00000001
+};
+
+enum irq_masks {
+ IRQ_ERROR_DATA_MASK = IRQ_DMAE | IRQ_DEBE | IRQ_DCE | IRQ_DTOE,
+ IRQ_ERROR_CMD_MASK = IRQ_AC12E | IRQ_CIE | IRQ_CTOE | IRQ_CCE |
+ IRQ_CEBE
+};
+
+enum dcr_bits {
+ DCR_PRI = 0x0000c000,
+ DCR_SNOOP = 0x00000040,
+ DCR_AHB2MAG_BYPASS = 0x00000020,
+ DCR_RD_SAFE = 0x00000004,
+ DCR_RD_PFE = 0x00000002,
+ DCR_RD_PF_SIZE = 0x00000001
+};
+
+#define DCR_PRI_SHIFT (14)
+
+enum xfertyp_bits {
+ XFERTYP_CMDINX = 0x3f000000,
+ XFERTYP_CMDTYP = 0x00c00000,
+ XFERTYP_DPSEL = 0x00200000,
+ XFERTYP_CICEN = 0x00100000,
+ XFERTYP_CCCEN = 0x00080000,
+ XFERTYP_RSPTYP = 0x00030000,
+ XFERTYP_MSBSEL = 0x00000020,
+ XFERTYP_DTDSEL = 0x00000010,
+ XFERTYP_AC12EN = 0x00000004,
+ XFERTYP_BCEN = 0x00000002,
+ XFERTYP_DMAEN = 0x00000001
+};
+
+#define CMDINX_SHIFT (24)
+
+enum xfertyp_cmdtyp {
+ CMDTYP_NORMAL = 0x00000000,
+ CMDYTP_SUSPEND = 0x00400000,
+ CMDTYP_RESUME = 0x00800000,
+ CMDTYP_ABORT = 0x00c00000
+};
+
+enum xfertyp_rsptyp {
+ RSPTYP_NONE = 0x00000000,
+ RSPTYP_136 = 0x00010000,
+ RSPTYP_48 = 0x00020000,
+ RSPTYP_48_BUSY = 0x00030000
+};
+
+enum blkattr_bits {
+ BLKATTR_BLKSZE = 0x00001fff,
+ BLKATTR_BLKCNT = 0xffff0000
+};
+#define BLKATTR_BLOCK_COUNT(x) (x << 16)
+
+enum wml_bits {
+ WR_WML = 0x00ff0000,
+ RD_WML = 0x000000ff,
+};
+
+enum sdhc_bit_mask {
+ MASK_CLOCK_CONTROL = 0x0000ffff,
+ MASK_IRQ_ALL = IRQ_DMAE | IRQ_AC12E | IRQ_DEBE | IRQ_DCE |
+ IRQ_DTOE | IRQ_CIE | IRQ_CEBE | IRQ_CCE |
+ IRQ_CTOE | IRQ_CINT | IRQ_CRM | IRQ_CINS |
+ IRQ_BRR | IRQ_BWR | IRQ_DINT | IRQ_BGE |
+ IRQ_TC | IRQ_CC,
+};
+
+enum sdhc_line {
+ SDHC_DAT_LINE = 0x2,
+ SDHC_CMD_LINE = 0x1
+};
+
+#endif /* FSL_SDHC_H_ */
diff --git a/sys/powerpc/mpc85xx/i2c.c b/sys/powerpc/mpc85xx/i2c.c
index 5b698f1b957c..f21c845c058a 100644
--- a/sys/powerpc/mpc85xx/i2c.c
+++ b/sys/powerpc/mpc85xx/i2c.c
@@ -72,9 +72,6 @@ __FBSDID("$FreeBSD$");
#define I2C_BAUD_RATE_DEF 0x3F
#define I2C_DFSSR_DIV 0x10
-#define DEBUG
-#undef DEBUG
-
#ifdef DEBUG
#define debugf(fmt, args...) do { printf("%s(): ", __func__); printf(fmt,##args); } while (0)
#else
diff --git a/sys/powerpc/mpc85xx/lbc.c b/sys/powerpc/mpc85xx/lbc.c
index e993bced9ae0..9737215e787e 100644
--- a/sys/powerpc/mpc85xx/lbc.c
+++ b/sys/powerpc/mpc85xx/lbc.c
@@ -56,9 +56,6 @@ __FBSDID("$FreeBSD$");
#include "ofw_bus_if.h"
#include "lbc.h"
-#define DEBUG
-#undef DEBUG
-
#ifdef DEBUG
#define debugf(fmt, args...) do { printf("%s(): ", __func__); \
printf(fmt,##args); } while (0)
@@ -66,20 +63,6 @@ __FBSDID("$FreeBSD$");
#define debugf(fmt, args...)
#endif
-static __inline void
-lbc_write_reg(struct lbc_softc *sc, bus_size_t off, uint32_t val)
-{
-
- bus_space_write_4(sc->sc_bst, sc->sc_bsh, off, val);
-}
-
-static __inline uint32_t
-lbc_read_reg(struct lbc_softc *sc, bus_size_t off)
-{
-
- return (bus_space_read_4(sc->sc_bst, sc->sc_bsh, off));
-}
-
static MALLOC_DEFINE(M_LBC, "localbus", "localbus devices information");
static int lbc_probe(device_t);
@@ -161,46 +144,123 @@ lbc_address_mask(uint32_t size)
static void
lbc_banks_unmap(struct lbc_softc *sc)
{
- int i;
+ int r;
- for (i = 0; i < LBC_DEV_MAX; i++) {
- if (sc->sc_banks[i].size == 0)
- continue;
+ r = 0;
+ while (r < LBC_DEV_MAX) {
+ if (sc->sc_range[r].size == 0)
+ return;
- law_disable(OCP85XX_TGTIF_LBC, sc->sc_banks[i].pa,
- sc->sc_banks[i].size);
- pmap_unmapdev(sc->sc_banks[i].va, sc->sc_banks[i].size);
+ pmap_unmapdev(sc->sc_range[r].kva, sc->sc_range[r].size);
+ law_disable(OCP85XX_TGTIF_LBC, sc->sc_range[r].addr,
+ sc->sc_range[r].size);
+ r++;
}
}
static int
lbc_banks_map(struct lbc_softc *sc)
{
- u_long start, size;
- int error, i;
+ vm_paddr_t end, start;
+ vm_size_t size;
+ u_int i, r, ranges, s;
+ int error;
+
+ bzero(sc->sc_range, sizeof(sc->sc_range));
+ /*
+ * Determine number of discontiguous address ranges to program.
+ */
+ ranges = 0;
for (i = 0; i < LBC_DEV_MAX; i++) {
- if (sc->sc_banks[i].size == 0)
+ size = sc->sc_banks[i].size;
+ if (size == 0)
continue;
- /* Physical address start/size. */
- start = sc->sc_banks[i].pa;
- size = sc->sc_banks[i].size;
+ start = sc->sc_banks[i].addr;
+ for (r = 0; r < ranges; r++) {
+ /* Avoid wrap-around bugs. */
+ end = sc->sc_range[r].addr - 1 + sc->sc_range[r].size;
+ if (start > 0 && end == start - 1) {
+ sc->sc_range[r].size += size;
+ break;
+ }
+ /* Avoid wrap-around bugs. */
+ end = start - 1 + size;
+ if (sc->sc_range[r].addr > 0 &&
+ end == sc->sc_range[r].addr - 1) {
+ sc->sc_range[r].addr = start;
+ sc->sc_range[r].size += size;
+ break;
+ }
+ }
+ if (r == ranges) {
+ /* New range; add using insertion sort */
+ r = 0;
+ while (r < ranges && sc->sc_range[r].addr < start)
+ r++;
+ for (s = ranges; s > r; s--)
+ sc->sc_range[s] = sc->sc_range[s-1];
+ sc->sc_range[r].addr = start;
+ sc->sc_range[r].size = size;
+ ranges++;
+ }
+ }
- /*
- * Configure LAW for this LBC bank (CS) and map its physical
- * memory region into KVA.
- */
+ /*
+ * Ranges are sorted so quickly go over the list to merge ranges
+ * that grew toward each other while building the ranges.
+ */
+ r = 0;
+ while (r < ranges - 1) {
+ end = sc->sc_range[r].addr + sc->sc_range[r].size;
+ if (end != sc->sc_range[r+1].addr) {
+ r++;
+ continue;
+ }
+ sc->sc_range[r].size += sc->sc_range[r+1].size;
+ for (s = r + 1; s < ranges - 1; s++)
+ sc->sc_range[s] = sc->sc_range[s+1];
+ bzero(&sc->sc_range[s], sizeof(sc->sc_range[s]));
+ ranges--;
+ }
+
+ /*
+ * Configure LAW for the LBC ranges and map the physical memory
+ * range into KVA.
+ */
+ for (r = 0; r < ranges; r++) {
+ start = sc->sc_range[r].addr;
+ size = sc->sc_range[r].size;
error = law_enable(OCP85XX_TGTIF_LBC, start, size);
if (error)
return (error);
+ sc->sc_range[r].kva = (vm_offset_t)pmap_mapdev(start, size);
+ }
+
+ /* XXX: need something better here? */
+ if (ranges == 0)
+ return (EINVAL);
+
+ /* Assign KVA to banks based on the enclosing range. */
+ for (i = 0; i < LBC_DEV_MAX; i++) {
+ size = sc->sc_banks[i].size;
+ if (size == 0)
+ continue;
- sc->sc_banks[i].va = (vm_offset_t)pmap_mapdev(start, size);
- if (sc->sc_banks[i].va == 0) {
- lbc_banks_unmap(sc);
- return (ENOSPC);
+ start = sc->sc_banks[i].addr;
+ for (r = 0; r < ranges; r++) {
+ end = sc->sc_range[r].addr - 1 + sc->sc_range[r].size;
+ if (start >= sc->sc_range[r].addr &&
+ start - 1 + size <= end)
+ break;
+ }
+ if (r < ranges) {
+ sc->sc_banks[i].kva = sc->sc_range[r].kva +
+ (start - sc->sc_range[r].addr);
}
}
+
return (0);
}
@@ -213,14 +273,18 @@ lbc_banks_enable(struct lbc_softc *sc)
for (i = 0; i < LBC_DEV_MAX; i++) {
size = sc->sc_banks[i].size;
- if (size == 0)
+ if (size == 0) {
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh,
+ LBC85XX_BR(i), 0);
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh,
+ LBC85XX_OR(i), 0);
continue;
+ }
+
/*
* Compute and program BR value.
*/
- regval = 0;
- regval |= sc->sc_banks[i].pa;
-
+ regval = sc->sc_banks[i].addr;
switch (sc->sc_banks[i].width) {
case 8:
regval |= (1 << 11);
@@ -240,24 +304,22 @@ lbc_banks_enable(struct lbc_softc *sc)
regval |= (sc->sc_banks[i].msel << 5);
regval |= (sc->sc_banks[i].atom << 2);
regval |= 1;
-
- lbc_write_reg(sc, LBC85XX_BR(i), regval);
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh,
+ LBC85XX_BR(i), regval);
/*
* Compute and program OR value.
*/
- regval = 0;
- regval |= lbc_address_mask(size);
-
+ regval = lbc_address_mask(size);
switch (sc->sc_banks[i].msel) {
case LBCRES_MSEL_GPCM:
/* TODO Add flag support for option registers */
- regval |= 0x00000ff7;
+ regval |= 0x0ff7;
break;
case LBCRES_MSEL_FCM:
- printf("FCM mode not supported yet!");
- error = ENOSYS;
- goto fail;
+ /* TODO Add flag support for options register */
+ regval |= 0x0796;
+ break;
case LBCRES_MSEL_UPMA:
case LBCRES_MSEL_UPMB:
case LBCRES_MSEL_UPMC:
@@ -265,7 +327,8 @@ lbc_banks_enable(struct lbc_softc *sc)
error = ENOSYS;
goto fail;
}
- lbc_write_reg(sc, LBC85XX_OR(i), regval);
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh,
+ LBC85XX_OR(i), regval);
}
/*
@@ -276,7 +339,7 @@ lbc_banks_enable(struct lbc_softc *sc)
* - set ECC parity type
* - set bus monitor timing and timer prescale
*/
- lbc_write_reg(sc, LBC85XX_LBCR, 0);
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, LBC85XX_LBCR, 0);
/*
* Initialize clock ratio register:
@@ -284,8 +347,7 @@ lbc_banks_enable(struct lbc_softc *sc)
* - configure LCLK delay cycles for the assertion of LALE
* - set system clock divider
*/
- lbc_write_reg(sc, LBC85XX_LCRR, 0x00030008);
-
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, LBC85XX_LCRR, 0x00030008);
return (0);
fail:
@@ -348,7 +410,7 @@ fdt_lbc_reg_decode(phandle_t node, struct lbc_softc *sc,
reg += addr_cells - 1 + size_cells;
/* Calculate address range relative to VA base. */
- start = sc->sc_banks[bank].va + start;
+ start = sc->sc_banks[bank].kva + start;
end = start + count - 1;
debugf("reg addr bank = %d, start = %lx, end = %lx, "
@@ -479,7 +541,7 @@ lbc_attach(device_t dev)
debugf("bank = %d, start = %lx, size = %lx\n", bank,
start, size);
- sc->sc_banks[bank].pa = start + offset;
+ sc->sc_banks[bank].addr = start + offset;
sc->sc_banks[bank].size = size;
/*
@@ -676,3 +738,21 @@ lbc_get_devinfo(device_t bus, device_t child)
di = device_get_ivars(child);
return (&di->di_ofw);
}
+
+void
+lbc_write_reg(device_t child, u_int off, uint32_t val)
+{
+ struct lbc_softc *sc;
+
+ sc = device_get_softc(device_get_parent(child));
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, off, val);
+}
+
+uint32_t
+lbc_read_reg(device_t child, u_int off)
+{
+ struct lbc_softc *sc;
+
+ sc = device_get_softc(device_get_parent(child));
+ return (bus_space_read_4(sc->sc_bst, sc->sc_bsh, off));
+}
diff --git a/sys/powerpc/mpc85xx/lbc.h b/sys/powerpc/mpc85xx/lbc.h
index ee58607661d5..53d9e1c71a76 100644
--- a/sys/powerpc/mpc85xx/lbc.h
+++ b/sys/powerpc/mpc85xx/lbc.h
@@ -33,10 +33,35 @@
#define LBC_DEV_MAX 8
/* Local access registers */
-#define LBC85XX_BR(n) (8 * n)
-#define LBC85XX_OR(n) (4 + (8 * n))
-#define LBC85XX_LBCR (0xd0)
-#define LBC85XX_LCRR (0xd4)
+#define LBC85XX_BR(n) (0x0 + (8 * n)) /* Base register 0-7 */
+#define LBC85XX_OR(n) (0x4 + (8 * n)) /* Options register 0-7 */
+#define LBC85XX_MAR 0x068 /* UPM address register */
+#define LBC85XX_MAMR 0x070 /* UPMA mode register */
+#define LBC85XX_MBMR 0x074 /* UPMB mode register */
+#define LBC85XX_MCMR 0x078 /* UPMC mode register */
+#define LBC85XX_MRTPR 0x084 /* Memory refresh timer prescaler */
+#define LBC85XX_MDR 0x088 /* UPM data register */
+#define LBC85XX_LSOR 0x090 /* Special operation initiation */
+#define LBC85XX_LURT 0x0a0 /* UPM refresh timer */
+#define LBC85XX_LSRT 0x0a4 /* SDRAM refresh timer */
+#define LBC85XX_LTESR 0x0b0 /* Transfer error status register */
+#define LBC85XX_LTEDR 0x0b4 /* Transfer error disable register */
+#define LBC85XX_LTEIR 0x0b8 /* Transfer error interrupt register */
+#define LBC85XX_LTEATR 0x0bc /* Transfer error attributes register */
+#define LBC85XX_LTEAR 0x0c0 /* Transfer error address register */
+#define LBC85XX_LTECCR 0x0c4 /* Transfer error ECC register */
+#define LBC85XX_LBCR 0x0d0 /* Configuration register */
+#define LBC85XX_LCRR 0x0d4 /* Clock ratio register */
+#define LBC85XX_FMR 0x0e0 /* Flash mode register */
+#define LBC85XX_FIR 0x0e4 /* Flash instruction register */
+#define LBC85XX_FCR 0x0e8 /* Flash command register */
+#define LBC85XX_FBAR 0x0ec /* Flash block address register */
+#define LBC85XX_FPAR 0x0f0 /* Flash page address register */
+#define LBC85XX_FBCR 0x0f4 /* Flash byte count register */
+#define LBC85XX_FECC0 0x100 /* Flash ECC block 0 register */
+#define LBC85XX_FECC1 0x104 /* Flash ECC block 0 register */
+#define LBC85XX_FECC2 0x108 /* Flash ECC block 0 register */
+#define LBC85XX_FECC3 0x10c /* Flash ECC block 0 register */
/* LBC machine select */
#define LBCRES_MSEL_GPCM 0
@@ -55,10 +80,16 @@
#define LBCRES_ATOM_RAWA 1
#define LBCRES_ATOM_WARA 2
+struct lbc_memrange {
+ vm_paddr_t addr;
+ vm_size_t size;
+ vm_offset_t kva;
+};
+
struct lbc_bank {
- u_long pa; /* physical addr of the bank */
- u_long size; /* bank size */
- vm_offset_t va; /* VA of the bank */
+ vm_paddr_t addr; /* physical addr of the bank */
+ vm_size_t size; /* bank size */
+ vm_offset_t kva; /* VA of the bank */
/*
* XXX the following bank attributes do not have properties specified
@@ -84,6 +115,7 @@ struct lbc_softc {
int sc_addr_cells;
int sc_size_cells;
+ struct lbc_memrange sc_range[LBC_DEV_MAX];
struct lbc_bank sc_banks[LBC_DEV_MAX];
};
@@ -93,4 +125,7 @@ struct lbc_devinfo {
int di_bank;
};
+uint32_t lbc_read_reg(device_t child, u_int off);
+void lbc_write_reg(device_t child, u_int off, uint32_t val);
+
#endif /* _MACHINE_LBC_H_ */
diff --git a/sys/powerpc/mpc85xx/mpc85xx.c b/sys/powerpc/mpc85xx/mpc85xx.c
index e62f952c04aa..0db5d5e0efef 100644
--- a/sys/powerpc/mpc85xx/mpc85xx.c
+++ b/sys/powerpc/mpc85xx/mpc85xx.c
@@ -88,6 +88,9 @@ law_enable(int trgt, u_long addr, u_long size)
uint32_t bar, sr;
int i, law_max;
+ if (size == 0)
+ return (0);
+
law_max = law_getmax();
bar = _LAW_BAR(addr);
sr = _LAW_SR(trgt, size);
@@ -168,7 +171,10 @@ law_pci_target(struct resource *res, int *trgt_mem, int *trgt_io)
default:
rv = ENXIO;
}
- *trgt_mem = *trgt_io = trgt;
+ if (rv == 0) {
+ *trgt_mem = trgt;
+ *trgt_io = trgt;
+ }
return (rv);
}
diff --git a/sys/powerpc/mpc85xx/pci_fdt.c b/sys/powerpc/mpc85xx/pci_fdt.c
index 994edbf8a6ca..c431d66d0a5a 100644
--- a/sys/powerpc/mpc85xx/pci_fdt.c
+++ b/sys/powerpc/mpc85xx/pci_fdt.c
@@ -816,8 +816,13 @@ fsl_pcib_set_range(struct fsl_pcib_softc *sc, int type, int wnd, u_long start,
}
*allocp = pci_start + alloc;
- *vap = (uintptr_t)pmap_mapdev(start, size);
- fsl_pcib_outbound(sc, wnd, type, start, size, pci_start);
+ if (size > 0) {
+ *vap = (uintptr_t)pmap_mapdev(start, size);
+ fsl_pcib_outbound(sc, wnd, type, start, size, pci_start);
+ } else {
+ *vap = 0;
+ fsl_pcib_outbound(sc, wnd, -1, 0, 0, 0);
+ }
return (0);
}
diff --git a/sys/powerpc/powerpc/cpu.c b/sys/powerpc/powerpc/cpu.c
index 97011562a8e2..d177c8b7aedd 100644
--- a/sys/powerpc/powerpc/cpu.c
+++ b/sys/powerpc/powerpc/cpu.c
@@ -75,13 +75,13 @@
#include <machine/spr.h>
static void cpu_6xx_setup(int cpuid, uint16_t vers);
-static void cpu_e500_setup(int cpuid, uint16_t vers);
static void cpu_970_setup(int cpuid, uint16_t vers);
+static void cpu_booke_setup(int cpuid, uint16_t vers);
int powerpc_pow_enabled;
void (*cpu_idle_hook)(void) = NULL;
static void cpu_idle_60x(void);
-static void cpu_idle_e500(void);
+static void cpu_idle_booke(void);
struct cputab {
const char *name;
@@ -146,9 +146,13 @@ static const struct cputab models[] = {
{ "Motorola PowerPC 8245", MPC8245, REVFMT_MAJMIN,
PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
{ "Freescale e500v1 core", FSL_E500v1, REVFMT_MAJMIN,
- 0, cpu_e500_setup },
+ 0, cpu_booke_setup },
{ "Freescale e500v2 core", FSL_E500v2, REVFMT_MAJMIN,
- 0, cpu_e500_setup },
+ 0, cpu_booke_setup },
+ { "Freescale e500mc core", FSL_E500mc, REVFMT_MAJMIN,
+ 0, cpu_booke_setup },
+ { "Freescale e5500 core", FSL_E5500, REVFMT_MAJMIN,
+ 0, cpu_booke_setup },
{ "IBM Cell Broadband Engine", IBMCELLBE, REVFMT_MAJMIN,
PPC_FEATURE_64 | PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU,
NULL},
@@ -191,6 +195,8 @@ cpu_setup(u_int cpuid)
break;
case FSL_E500v1:
case FSL_E500v2:
+ case FSL_E500mc:
+ case FSL_E5500:
maj = (pvr >> 4) & 0xf;
min = (pvr >> 0) & 0xf;
break;
@@ -438,8 +444,9 @@ cpu_6xx_print_cacheinfo(u_int cpuid, uint16_t vers)
}
static void
-cpu_e500_setup(int cpuid, uint16_t vers)
+cpu_booke_setup(int cpuid, uint16_t vers)
{
+#ifdef BOOKE_E500
register_t hid0;
hid0 = mfspr(SPR_HID0);
@@ -451,9 +458,10 @@ cpu_e500_setup(int cpuid, uint16_t vers)
mtspr(SPR_HID0, hid0);
printf("cpu%d: HID0 %b\n", cpuid, (int)hid0, HID0_E500_BITMASK);
+#endif
if (cpu_idle_hook == NULL)
- cpu_idle_hook = cpu_idle_e500;
+ cpu_idle_hook = cpu_idle_booke;
}
static void
@@ -519,6 +527,7 @@ cpu_idle(int busy)
CTR2(KTR_SPARE2, "cpu_idle(%d) at %d",
busy, curcpu);
+
if (cpu_idle_hook != NULL) {
if (!busy) {
critical_enter();
@@ -530,6 +539,7 @@ cpu_idle(int busy)
critical_exit();
}
}
+
CTR2(KTR_SPARE2, "cpu_idle(%d) at %d done",
busy, curcpu);
}
@@ -576,7 +586,7 @@ cpu_idle_60x(void)
}
static void
-cpu_idle_e500(void)
+cpu_idle_booke(void)
{
register_t msr;
diff --git a/sys/powerpc/powerpc/db_trace.c b/sys/powerpc/powerpc/db_trace.c
index 20de0ec4b90e..2462308b64cc 100644
--- a/sys/powerpc/powerpc/db_trace.c
+++ b/sys/powerpc/powerpc/db_trace.c
@@ -102,7 +102,7 @@ struct db_variable db_regs[] = {
{ "dar", DB_OFFSET(cpu.aim.dar), db_frame },
{ "dsisr", DB_OFFSET(cpu.aim.dsisr), db_frame },
#endif
-#ifdef E500
+#if defined(BOOKE)
{ "dear", DB_OFFSET(cpu.booke.dear), db_frame },
{ "esr", DB_OFFSET(cpu.booke.esr), db_frame },
#endif
@@ -243,7 +243,7 @@ db_backtrace(struct thread *td, db_addr_t fp, int count)
case EXC_SC: trapstr = "SC"; break;
case EXC_EXI: trapstr = "EXI"; break;
case EXC_MCHK: trapstr = "MCHK"; break;
-#ifndef E500
+#if !defined(BOOKE)
case EXC_VEC: trapstr = "VEC"; break;
case EXC_FPA: trapstr = "FPA"; break;
case EXC_BPT: trapstr = "BPT"; break;
diff --git a/sys/powerpc/powerpc/gdb_machdep.c b/sys/powerpc/powerpc/gdb_machdep.c
index ebe1250eadea..89c28a47c918 100644
--- a/sys/powerpc/powerpc/gdb_machdep.c
+++ b/sys/powerpc/powerpc/gdb_machdep.c
@@ -84,7 +84,7 @@ gdb_cpu_setreg(int regnum, void *val)
int
gdb_cpu_signal(int vector, int dummy __unused)
{
-#ifdef E500
+#if defined(BOOKE)
if (vector == EXC_DEBUG || vector == EXC_PGM)
return (SIGTRAP);
#else
diff --git a/sys/powerpc/powerpc/genassym.c b/sys/powerpc/powerpc/genassym.c
index e228b10c7a30..904d98622bef 100644
--- a/sys/powerpc/powerpc/genassym.c
+++ b/sys/powerpc/powerpc/genassym.c
@@ -63,7 +63,7 @@ ASSYM(PC_TEMPSAVE, offsetof(struct pcpu, pc_tempsave));
ASSYM(PC_DISISAVE, offsetof(struct pcpu, pc_disisave));
ASSYM(PC_DBSAVE, offsetof(struct pcpu, pc_dbsave));
-#ifdef E500
+#if defined(BOOKE)
ASSYM(PC_BOOKE_CRITSAVE, offsetof(struct pcpu, pc_booke_critsave));
ASSYM(PC_BOOKE_MCHKSAVE, offsetof(struct pcpu, pc_booke_mchksave));
ASSYM(PC_BOOKE_TLBSAVE, offsetof(struct pcpu, pc_booke_tlbsave));
@@ -116,15 +116,14 @@ ASSYM(SEGMENT_MASK, SEGMENT_MASK);
ASSYM(PM_SR, offsetof(struct pmap, pm_sr));
ASSYM(USER_SR, USER_SR);
#endif
-#elif defined(E500)
+#elif defined(BOOKE)
ASSYM(PM_PDIR, offsetof(struct pmap, pm_pdir));
-#endif
-
-#if defined(E500)
ASSYM(PTE_RPN, offsetof(struct pte, rpn));
ASSYM(PTE_FLAGS, offsetof(struct pte, flags));
+#if defined(BOOKE_E500)
ASSYM(TLB0_ENTRY_SIZE, sizeof(struct tlb_entry));
#endif
+#endif
#ifdef __powerpc64__
ASSYM(FSP, 48);
@@ -215,18 +214,20 @@ ASSYM(SF_UC, offsetof(struct sigframe, sf_uc));
ASSYM(KERNBASE, KERNBASE);
ASSYM(MAXCOMLEN, MAXCOMLEN);
-#ifdef E500
+#if defined(BOOKE)
+ASSYM(PSL_DE, PSL_DE);
+ASSYM(PSL_DS, PSL_DS);
+ASSYM(PSL_IS, PSL_IS);
+ASSYM(PSL_CE, PSL_CE);
+#endif
+#if defined(BOOKE_E500)
ASSYM(PSL_UCLE, PSL_UCLE);
ASSYM(PSL_SPE, PSL_SPE);
ASSYM(PSL_WE, PSL_WE);
-ASSYM(PSL_CE, PSL_CE);
ASSYM(PSL_UBLE, PSL_UBLE);
-ASSYM(PSL_DS, PSL_DS);
-ASSYM(PSL_IS, PSL_IS);
-ASSYM(PSL_DE, PSL_DE);
ASSYM(PSL_KERNSET_INIT, PSL_KERNSET_INIT);
-#else /* AIM */
+#elif defined(AIM)
#ifdef __powerpc64__
ASSYM(PSL_SF, PSL_SF);
ASSYM(PSL_HV, PSL_HV);
@@ -256,8 +257,9 @@ ASSYM(PSL_FE1, PSL_FE1);
ASSYM(PSL_FP, PSL_FP);
ASSYM(PSL_ME, PSL_ME);
ASSYM(PSL_PR, PSL_PR);
+#if defined(BOOKE_E500)
ASSYM(PSL_PMM, PSL_PMM);
-
+#endif
ASSYM(PSL_KERNSET, PSL_KERNSET);
ASSYM(PSL_USERSET, PSL_USERSET);
diff --git a/sys/powerpc/powerpc/mmu_if.m b/sys/powerpc/powerpc/mmu_if.m
index 9d5b656cbac1..887e5e450e61 100644
--- a/sys/powerpc/powerpc/mmu_if.m
+++ b/sys/powerpc/powerpc/mmu_if.m
@@ -761,7 +761,7 @@ METHOD void cpu_bootstrap {
*/
METHOD void * mapdev {
mmu_t _mmu;
- vm_offset_t _pa;
+ vm_paddr_t _pa;
vm_size_t _size;
};
@@ -818,7 +818,7 @@ METHOD void unmapdev {
*
* @retval pa physical address corresponding to mapping
*/
-METHOD vm_offset_t kextract {
+METHOD vm_paddr_t kextract {
mmu_t _mmu;
vm_offset_t _va;
};
@@ -833,7 +833,7 @@ METHOD vm_offset_t kextract {
METHOD void kenter {
mmu_t _mmu;
vm_offset_t _va;
- vm_offset_t _pa;
+ vm_paddr_t _pa;
};
/**
@@ -860,7 +860,7 @@ METHOD void kenter_attr {
*/
METHOD boolean_t dev_direct_mapped {
mmu_t _mmu;
- vm_offset_t _pa;
+ vm_paddr_t _pa;
vm_size_t _size;
};
diff --git a/sys/powerpc/mpc85xx/openpic_fdt.c b/sys/powerpc/powerpc/openpic_fdt.c
index 1cd936956281..1cd936956281 100644
--- a/sys/powerpc/mpc85xx/openpic_fdt.c
+++ b/sys/powerpc/powerpc/openpic_fdt.c
diff --git a/sys/powerpc/powerpc/platform.c b/sys/powerpc/powerpc/platform.c
index 287713431072..169bbc199e1f 100644
--- a/sys/powerpc/powerpc/platform.c
+++ b/sys/powerpc/powerpc/platform.c
@@ -92,7 +92,7 @@ mem_valid(vm_offset_t addr, int len)
&aregions, &naregions);
for (i = 0; i < npregions; i++)
- if ((addr >= pregions[i].mr_start)
+ if ((addr >= pregions[i].mr_start)
&& (addr + len <= pregions[i].mr_start + pregions[i].mr_size))
return (0);
@@ -116,7 +116,7 @@ platform_timebase_freq(struct cpuref *cpu)
{
return (PLATFORM_TIMEBASE_FREQ(plat_obj, cpu));
}
-
+
int
platform_smp_first_cpu(struct cpuref *cpu)
{
diff --git a/sys/powerpc/powerpc/pmap_dispatch.c b/sys/powerpc/powerpc/pmap_dispatch.c
index 4715a93b5e33..c919196525e5 100644
--- a/sys/powerpc/powerpc/pmap_dispatch.c
+++ b/sys/powerpc/powerpc/pmap_dispatch.c
@@ -76,6 +76,20 @@ vm_offset_t virtual_end;
int pmap_bootstrapped;
+#ifdef AIM
+int
+pvo_vaddr_compare(struct pvo_entry *a, struct pvo_entry *b)
+{
+ if (PVO_VADDR(a) < PVO_VADDR(b))
+ return (-1);
+ else if (PVO_VADDR(a) > PVO_VADDR(b))
+ return (1);
+ return (0);
+}
+RB_GENERATE(pvo_tree, pvo_entry, pvo_plink, pvo_vaddr_compare);
+#endif
+
+
void
pmap_change_wiring(pmap_t pmap, vm_offset_t va, boolean_t wired)
{
@@ -426,7 +440,7 @@ pmap_cpu_bootstrap(int ap)
}
void *
-pmap_mapdev(vm_offset_t pa, vm_size_t size)
+pmap_mapdev(vm_paddr_t pa, vm_size_t size)
{
CTR3(KTR_PMAP, "%s(%#x, %#x)", __func__, pa, size);
@@ -457,7 +471,7 @@ pmap_unmapdev(vm_offset_t va, vm_size_t size)
MMU_UNMAPDEV(mmu_obj, va, size);
}
-vm_offset_t
+vm_paddr_t
pmap_kextract(vm_offset_t va)
{
@@ -466,7 +480,7 @@ pmap_kextract(vm_offset_t va)
}
void
-pmap_kenter(vm_offset_t va, vm_offset_t pa)
+pmap_kenter(vm_offset_t va, vm_paddr_t pa)
{
CTR3(KTR_PMAP, "%s(%#x, %#x)", __func__, va, pa);
@@ -482,7 +496,7 @@ pmap_kenter_attr(vm_offset_t va, vm_offset_t pa, vm_memattr_t ma)
}
boolean_t
-pmap_dev_direct_mapped(vm_offset_t pa, vm_size_t size)
+pmap_dev_direct_mapped(vm_paddr_t pa, vm_size_t size)
{
CTR3(KTR_PMAP, "%s(%#x, %#x)", __func__, pa, size);
diff --git a/sys/sparc64/conf/GENERIC b/sys/sparc64/conf/GENERIC
index 766148cc6a20..5236bc22d429 100644
--- a/sys/sparc64/conf/GENERIC
+++ b/sys/sparc64/conf/GENERIC
@@ -234,35 +234,8 @@ device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device ehci # EHCI PCI->USB interface (USB 2.0)
device usb # USB Bus (required)
-#device udbp # USB Double Bulk Pipe devices (needs netgraph)
-device uhid # "Human Interface Devices"
device ukbd # Keyboard
-device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
-device ums # Mouse
-device urio # Diamond Rio 500 MP3 player
-# USB Serial devices
-device uark # Technologies ARK3116 based serial adapters
-device ubsa # Belkin F5U103 and compatible serial adapters
-device uftdi # For FTDI usb serial adapters
-device uipaq # Some WinCE based devices
-device uplcom # Prolific PL-2303 serial adapters
-device uslcom # SI Labs CP2101/CP2102 serial adapters
-device uvisor # Visor and Palm devices
-device uvscom # USB serial support for DDI pocket's PHS
-# USB Ethernet, requires miibus
-device aue # ADMtek USB Ethernet
-device axe # ASIX Electronics USB Ethernet
-device cdce # Generic USB over Ethernet
-device cue # CATC USB Ethernet
-device kue # Kawasaki LSI USB Ethernet
-device rue # RealTek RTL8150 USB Ethernet
-device udav # Davicom DM9601E USB
-# USB Wireless
-device rum # Ralink Technology RT2501USB wireless NICs
-device uath # Atheros AR5523 wireless NICs
-device ural # Ralink Technology RT2500USB wireless NICs
-device zyd # ZyDAS zd1211/zd1211b wireless NICs
# FireWire support
device firewire # FireWire bus code
@@ -278,4 +251,3 @@ device sound # Generic sound driver (required)
device snd_audiocs # Crystal Semiconductor CS4231
device snd_es137x # Ensoniq AudioPCI ES137x
device snd_t4dwave # Acer Labs M5451
-device snd_uaudio # USB Audio
diff --git a/sys/sparc64/include/in_cksum.h b/sys/sparc64/include/in_cksum.h
index ae06a4cb9972..d5d167f54a02 100644
--- a/sys/sparc64/include/in_cksum.h
+++ b/sys/sparc64/include/in_cksum.h
@@ -65,6 +65,7 @@
#define in_cksum(m, len) in_cksum_skip(m, len, 0)
+#if defined(IPVERSION) && (IPVERSION == 4)
static __inline void
in_cksum_update(struct ip *ip)
{
@@ -73,6 +74,7 @@ in_cksum_update(struct ip *ip)
__tmp = (int)ip->ip_sum + 1;
ip->ip_sum = __tmp + (__tmp >> 16);
}
+#endif
static __inline u_short
in_addword(u_short sum, u_short b)
@@ -106,6 +108,7 @@ in_pseudo(u_int sum, u_int b, u_int c)
return (sum);
}
+#if defined(IPVERSION) && (IPVERSION == 4)
static __inline u_int
in_cksum_hdr(struct ip *ip)
{
@@ -163,6 +166,7 @@ in_cksum_hdr(struct ip *ip)
#undef __LD_ADD
return (__ret);
}
+#endif
#ifdef _KERNEL
u_short in_cksum_skip(struct mbuf *m, int len, int skip);
diff --git a/sys/sparc64/include/pmap.h b/sys/sparc64/include/pmap.h
index 87c56a303727..72dbaadd45c1 100644
--- a/sys/sparc64/include/pmap.h
+++ b/sys/sparc64/include/pmap.h
@@ -43,6 +43,7 @@
#include <sys/_cpuset.h>
#include <sys/_lock.h>
#include <sys/_mutex.h>
+#include <sys/_rwlock.h>
#include <machine/cache.h>
#include <machine/tte.h>
@@ -101,6 +102,7 @@ void pmap_set_kctx(void);
extern struct pmap kernel_pmap_store;
#define kernel_pmap (&kernel_pmap_store)
+extern struct rwlock tte_list_global_lock;
extern vm_paddr_t phys_avail[];
extern vm_offset_t virtual_avail;
extern vm_offset_t virtual_end;
diff --git a/sys/sparc64/sparc64/pmap.c b/sys/sparc64/sparc64/pmap.c
index d7ba44b83509..e83f768a170d 100644
--- a/sys/sparc64/sparc64/pmap.c
+++ b/sys/sparc64/sparc64/pmap.c
@@ -71,6 +71,7 @@ __FBSDID("$FreeBSD$");
#include <sys/msgbuf.h>
#include <sys/mutex.h>
#include <sys/proc.h>
+#include <sys/rwlock.h>
#include <sys/smp.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
@@ -134,6 +135,11 @@ vm_offset_t vm_max_kernel_address;
struct pmap kernel_pmap_store;
/*
+ * Global tte list lock
+ */
+struct rwlock tte_list_global_lock;
+
+/*
* Allocate physical memory for use in pmap_bootstrap.
*/
static vm_paddr_t pmap_bootstrap_alloc(vm_size_t size, uint32_t colors);
@@ -666,6 +672,11 @@ pmap_bootstrap(u_int cpu_impl)
pm->pm_context[i] = TLB_CTX_KERNEL;
CPU_FILL(&pm->pm_active);
+ /*
+ * Initialize the global tte list lock.
+ */
+ rw_init(&tte_list_global_lock, "tte list global");
+
/*
* Flush all non-locked TLB entries possibly left over by the
* firmware.
@@ -876,7 +887,7 @@ pmap_cache_enter(vm_page_t m, vm_offset_t va)
struct tte *tp;
int color;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&tte_list_global_lock, RA_WLOCKED);
KASSERT((m->flags & PG_FICTITIOUS) == 0,
("pmap_cache_enter: fake page"));
PMAP_STATS_INC(pmap_ncache_enter);
@@ -951,7 +962,7 @@ pmap_cache_remove(vm_page_t m, vm_offset_t va)
struct tte *tp;
int color;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&tte_list_global_lock, RA_WLOCKED);
CTR3(KTR_PMAP, "pmap_cache_remove: m=%p va=%#lx c=%d", m, va,
m->md.colors[DCACHE_COLOR(va)]);
KASSERT((m->flags & PG_FICTITIOUS) == 0,
@@ -1026,7 +1037,7 @@ pmap_kenter(vm_offset_t va, vm_page_t m)
vm_page_t om;
u_long data;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&tte_list_global_lock, RA_WLOCKED);
PMAP_STATS_INC(pmap_nkenter);
tp = tsb_kvtotte(va);
CTR4(KTR_PMAP, "pmap_kenter: va=%#lx pa=%#lx tp=%p data=%#lx",
@@ -1088,7 +1099,7 @@ pmap_kremove(vm_offset_t va)
struct tte *tp;
vm_page_t m;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&tte_list_global_lock, RA_WLOCKED);
PMAP_STATS_INC(pmap_nkremove);
tp = tsb_kvtotte(va);
CTR3(KTR_PMAP, "pmap_kremove: va=%#lx tp=%p data=%#lx", va, tp,
@@ -1139,19 +1150,16 @@ void
pmap_qenter(vm_offset_t sva, vm_page_t *m, int count)
{
vm_offset_t va;
- int locked;
PMAP_STATS_INC(pmap_nqenter);
va = sva;
- if (!(locked = mtx_owned(&vm_page_queue_mtx)))
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
while (count-- > 0) {
pmap_kenter(va, *m);
va += PAGE_SIZE;
m++;
}
- if (!locked)
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
tlb_range_demap(kernel_pmap, sva, va);
}
@@ -1163,18 +1171,15 @@ void
pmap_qremove(vm_offset_t sva, int count)
{
vm_offset_t va;
- int locked;
PMAP_STATS_INC(pmap_nqremove);
va = sva;
- if (!(locked = mtx_owned(&vm_page_queue_mtx)))
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
while (count-- > 0) {
pmap_kremove(va);
va += PAGE_SIZE;
}
- if (!locked)
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
tlb_range_demap(kernel_pmap, sva, va);
}
@@ -1322,7 +1327,7 @@ pmap_remove_tte(struct pmap *pm, struct pmap *pm2, struct tte *tp,
vm_page_t m;
u_long data;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&tte_list_global_lock, RA_WLOCKED);
data = atomic_readandclear_long(&tp->tte_data);
if ((data & TD_FAKE) == 0) {
m = PHYS_TO_VM_PAGE(TD_PA(data));
@@ -1359,7 +1364,7 @@ pmap_remove(pmap_t pm, vm_offset_t start, vm_offset_t end)
pm->pm_context[curcpu], start, end);
if (PMAP_REMOVE_DONE(pm))
return;
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
PMAP_LOCK(pm);
if (end - start > PMAP_TSB_THRESH) {
tsb_foreach(pm, NULL, start, end, pmap_remove_tte);
@@ -1372,7 +1377,7 @@ pmap_remove(pmap_t pm, vm_offset_t start, vm_offset_t end)
tlb_range_demap(pm, start, end - 1);
}
PMAP_UNLOCK(pm);
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
}
void
@@ -1385,7 +1390,7 @@ pmap_remove_all(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_remove_all: page %p is not managed", m));
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
for (tp = TAILQ_FIRST(&m->md.tte_list); tp != NULL; tp = tpn) {
tpn = TAILQ_NEXT(tp, tte_link);
if ((tp->tte_data & TD_PV) == 0)
@@ -1408,7 +1413,7 @@ pmap_remove_all(vm_page_t m)
PMAP_UNLOCK(pm);
}
vm_page_aflag_clear(m, PGA_WRITEABLE);
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
}
static int
@@ -1470,10 +1475,10 @@ pmap_enter(pmap_t pm, vm_offset_t va, vm_prot_t access, vm_page_t m,
vm_prot_t prot, boolean_t wired)
{
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
PMAP_LOCK(pm);
pmap_enter_locked(pm, va, m, prot, wired);
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
PMAP_UNLOCK(pm);
}
@@ -1493,7 +1498,7 @@ pmap_enter_locked(pmap_t pm, vm_offset_t va, vm_page_t m, vm_prot_t prot,
vm_page_t real;
u_long data;
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&tte_list_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pm, MA_OWNED);
KASSERT((m->oflags & (VPO_UNMANAGED | VPO_BUSY)) != 0 ||
VM_OBJECT_LOCKED(m->object),
@@ -1636,14 +1641,14 @@ pmap_enter_object(pmap_t pm, vm_offset_t start, vm_offset_t end,
psize = atop(end - start);
m = m_start;
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
PMAP_LOCK(pm);
while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) {
pmap_enter_locked(pm, start + ptoa(diff), m, prot &
(VM_PROT_READ | VM_PROT_EXECUTE), FALSE);
m = TAILQ_NEXT(m, listq);
}
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
PMAP_UNLOCK(pm);
}
@@ -1651,11 +1656,11 @@ void
pmap_enter_quick(pmap_t pm, vm_offset_t va, vm_page_t m, vm_prot_t prot)
{
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
PMAP_LOCK(pm);
pmap_enter_locked(pm, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE),
FALSE);
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
PMAP_UNLOCK(pm);
}
@@ -1721,7 +1726,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr,
if (dst_addr != src_addr)
return;
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
if (dst_pmap < src_pmap) {
PMAP_LOCK(dst_pmap);
PMAP_LOCK(src_pmap);
@@ -1739,7 +1744,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr,
pmap_copy_tte(src_pmap, dst_pmap, tp, va);
tlb_range_demap(dst_pmap, src_addr, src_addr + len - 1);
}
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
PMAP_UNLOCK(src_pmap);
PMAP_UNLOCK(dst_pmap);
}
@@ -1938,7 +1943,7 @@ pmap_page_exists_quick(pmap_t pm, vm_page_t m)
("pmap_page_exists_quick: page %p is not managed", m));
loops = 0;
rv = FALSE;
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
TAILQ_FOREACH(tp, &m->md.tte_list, tte_link) {
if ((tp->tte_data & TD_PV) == 0)
continue;
@@ -1949,7 +1954,7 @@ pmap_page_exists_quick(pmap_t pm, vm_page_t m)
if (++loops >= 16)
break;
}
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
return (rv);
}
@@ -1966,11 +1971,11 @@ pmap_page_wired_mappings(vm_page_t m)
count = 0;
if ((m->oflags & VPO_UNMANAGED) != 0)
return (count);
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
TAILQ_FOREACH(tp, &m->md.tte_list, tte_link)
if ((tp->tte_data & (TD_PV | TD_WIRED)) == (TD_PV | TD_WIRED))
count++;
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
return (count);
}
@@ -1997,13 +2002,13 @@ pmap_page_is_mapped(vm_page_t m)
rv = FALSE;
if ((m->oflags & VPO_UNMANAGED) != 0)
return (rv);
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
TAILQ_FOREACH(tp, &m->md.tte_list, tte_link)
if ((tp->tte_data & TD_PV) != 0) {
rv = TRUE;
break;
}
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
return (rv);
}
@@ -2029,7 +2034,7 @@ pmap_ts_referenced(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_ts_referenced: page %p is not managed", m));
count = 0;
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
if ((tp = TAILQ_FIRST(&m->md.tte_list)) != NULL) {
tpf = tp;
do {
@@ -2043,7 +2048,7 @@ pmap_ts_referenced(vm_page_t m)
break;
} while ((tp = tpn) != NULL && tp != tpf);
}
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
return (count);
}
@@ -2066,7 +2071,7 @@ pmap_is_modified(vm_page_t m)
if ((m->oflags & VPO_BUSY) == 0 &&
(m->aflags & PGA_WRITEABLE) == 0)
return (rv);
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
TAILQ_FOREACH(tp, &m->md.tte_list, tte_link) {
if ((tp->tte_data & TD_PV) == 0)
continue;
@@ -2075,7 +2080,7 @@ pmap_is_modified(vm_page_t m)
break;
}
}
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
return (rv);
}
@@ -2109,7 +2114,7 @@ pmap_is_referenced(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_is_referenced: page %p is not managed", m));
rv = FALSE;
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
TAILQ_FOREACH(tp, &m->md.tte_list, tte_link) {
if ((tp->tte_data & TD_PV) == 0)
continue;
@@ -2118,7 +2123,7 @@ pmap_is_referenced(vm_page_t m)
break;
}
}
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
return (rv);
}
@@ -2141,7 +2146,7 @@ pmap_clear_modify(vm_page_t m)
*/
if ((m->aflags & PGA_WRITEABLE) == 0)
return;
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
TAILQ_FOREACH(tp, &m->md.tte_list, tte_link) {
if ((tp->tte_data & TD_PV) == 0)
continue;
@@ -2149,7 +2154,7 @@ pmap_clear_modify(vm_page_t m)
if ((data & TD_W) != 0)
tlb_page_demap(TTE_GET_PMAP(tp), TTE_GET_VA(tp));
}
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
}
void
@@ -2160,7 +2165,7 @@ pmap_clear_reference(vm_page_t m)
KASSERT((m->oflags & VPO_UNMANAGED) == 0,
("pmap_clear_reference: page %p is not managed", m));
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
TAILQ_FOREACH(tp, &m->md.tte_list, tte_link) {
if ((tp->tte_data & TD_PV) == 0)
continue;
@@ -2168,7 +2173,7 @@ pmap_clear_reference(vm_page_t m)
if ((data & TD_REF) != 0)
tlb_page_demap(TTE_GET_PMAP(tp), TTE_GET_VA(tp));
}
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
}
void
@@ -2189,7 +2194,7 @@ pmap_remove_write(vm_page_t m)
if ((m->oflags & VPO_BUSY) == 0 &&
(m->aflags & PGA_WRITEABLE) == 0)
return;
- vm_page_lock_queues();
+ rw_wlock(&tte_list_global_lock);
TAILQ_FOREACH(tp, &m->md.tte_list, tte_link) {
if ((tp->tte_data & TD_PV) == 0)
continue;
@@ -2200,7 +2205,7 @@ pmap_remove_write(vm_page_t m)
}
}
vm_page_aflag_clear(m, PGA_WRITEABLE);
- vm_page_unlock_queues();
+ rw_wunlock(&tte_list_global_lock);
}
int
diff --git a/sys/sparc64/sparc64/tsb.c b/sys/sparc64/sparc64/tsb.c
index 0f342596dd04..403043c64036 100644
--- a/sys/sparc64/sparc64/tsb.c
+++ b/sys/sparc64/sparc64/tsb.c
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/proc.h>
+#include <sys/rwlock.h>
#include <sys/smp.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
@@ -131,7 +132,7 @@ tsb_tte_enter(pmap_t pm, vm_page_t m, vm_offset_t va, u_long sz, u_long data)
PMAP_STATS_INC(tsb_nenter_u_oc);
}
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ rw_assert(&tte_list_global_lock, RA_WLOCKED);
PMAP_LOCK_ASSERT(pm, MA_OWNED);
if (pm == kernel_pmap) {
PMAP_STATS_INC(tsb_nenter_k);
diff --git a/sys/sys/agpio.h b/sys/sys/agpio.h
index 8c1294f69863..78a2ade96d76 100644
--- a/sys/sys/agpio.h
+++ b/sys/sys/agpio.h
@@ -88,6 +88,7 @@
#define AGPIOC_DEALLOCATE _IOW (AGPIOC_BASE, 7, int)
#define AGPIOC_BIND _IOW (AGPIOC_BASE, 8, agp_bind)
#define AGPIOC_UNBIND _IOW (AGPIOC_BASE, 9, agp_unbind)
+#define AGPIOC_CHIPSET_FLUSH _IO (AGPIOC_BASE, 10)
typedef struct _agp_version {
u_int16_t major;
diff --git a/sys/sys/apm.h b/sys/sys/apm.h
index e1b0e85c9c2b..a17591db822e 100644
--- a/sys/sys/apm.h
+++ b/sys/sys/apm.h
@@ -56,6 +56,7 @@ struct apm_ent {
#define APM_ENT_TYPE_UNUSED "Apple_Free"
#define APM_ENT_TYPE_FREEBSD "FreeBSD"
+#define APM_ENT_TYPE_FREEBSD_NANDFS "FreeBSD-nandfs"
#define APM_ENT_TYPE_FREEBSD_SWAP "FreeBSD-swap"
#define APM_ENT_TYPE_FREEBSD_UFS "FreeBSD-UFS"
#define APM_ENT_TYPE_FREEBSD_VINUM "FreeBSD-Vinum"
diff --git a/sys/sys/disklabel.h b/sys/sys/disklabel.h
index 31cefd1eb124..d135afa8fc9f 100644
--- a/sys/sys/disklabel.h
+++ b/sys/sys/disklabel.h
@@ -232,6 +232,7 @@ static const char *dktypenames[] = {
#define FS_UDF 24 /* UDF */
#define FS_EFS 26 /* SGI's Extent File system */
#define FS_ZFS 27 /* Sun's ZFS */
+#define FS_NANDFS 30 /* FreeBSD nandfs (NiLFS derived) */
#ifdef FSTYPENAMES
static const char *fstypenames[] = {
@@ -263,6 +264,9 @@ static const char *fstypenames[] = {
"?",
"EFS",
"ZFS",
+ "?",
+ "?",
+ "nandfs",
NULL
};
#define FSMAXTYPES (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1)
diff --git a/sys/sys/gpt.h b/sys/sys/gpt.h
index d00135dee9e9..507ff1c3c6b3 100644
--- a/sys/sys/gpt.h
+++ b/sys/sys/gpt.h
@@ -79,6 +79,10 @@ struct gpt_ent {
{0x024dee41,0x33e7,0x11d3,0x9d,0x69,{0x00,0x08,0xc7,0x81,0xf3,0x9f}}
#define GPT_ENT_TYPE_FREEBSD \
{0x516e7cb4,0x6ecf,0x11d6,0x8f,0xf8,{0x00,0x02,0x2d,0x09,0x71,0x2b}}
+#define GPT_ENT_TYPE_FREEBSD_BOOT \
+ {0x83bd6b9d,0x7f41,0x11dc,0xbe,0x0b,{0x00,0x15,0x60,0xb8,0x4f,0x0f}}
+#define GPT_ENT_TYPE_FREEBSD_NANDFS \
+ {0x74ba7dd9,0xa689,0x11e1,0xbd,0x04,{0x00,0xe0,0x81,0x28,0x6a,0xcf}}
#define GPT_ENT_TYPE_FREEBSD_SWAP \
{0x516e7cb5,0x6ecf,0x11d6,0x8f,0xf8,{0x00,0x02,0x2d,0x09,0x71,0x2b}}
#define GPT_ENT_TYPE_FREEBSD_UFS \
@@ -87,8 +91,6 @@ struct gpt_ent {
{0x516e7cb8,0x6ecf,0x11d6,0x8f,0xf8,{0x00,0x02,0x2d,0x09,0x71,0x2b}}
#define GPT_ENT_TYPE_FREEBSD_ZFS \
{0x516e7cba,0x6ecf,0x11d6,0x8f,0xf8,{0x00,0x02,0x2d,0x09,0x71,0x2b}}
-#define GPT_ENT_TYPE_FREEBSD_BOOT \
- {0x83bd6b9d,0x7f41,0x11dc,0xbe,0x0b,{0x00,0x15,0x60,0xb8,0x4f,0x0f}}
/*
* The following are unused but documented here to avoid reuse.
diff --git a/sys/sys/iconv.h b/sys/sys/iconv.h
index 671b24e1479b..5e59795b6c71 100644
--- a/sys/sys/iconv.h
+++ b/sys/sys/iconv.h
@@ -240,7 +240,7 @@ int iconv_converter_tolowerstub(int c, void *handle);
int iconv_converter_handler(module_t mod, int type, void *data);
#ifdef ICONV_DEBUG
-#define ICDEBUG(format, ...) printf("%s: "format, __func__ , __VA_ARGS__)
+#define ICDEBUG(format, ...) printf("%s: "format, __func__ , ## __VA_ARGS__)
#else
#define ICDEBUG(format, ...)
#endif
diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h
index 2a6c8aa165e2..679f86e72a38 100644
--- a/sys/sys/mbuf.h
+++ b/sys/sys/mbuf.h
@@ -283,15 +283,24 @@ struct mbuf {
#define CSUM_FRAGMENT 0x0010 /* will do IP fragmentation */
#define CSUM_TSO 0x0020 /* will do TSO */
#define CSUM_SCTP 0x0040 /* will csum SCTP */
+/* CSUM_SCTP_IPV6 0x0080 will csum IPv6/SCTP */
#define CSUM_IP_CHECKED 0x0100 /* did csum IP */
#define CSUM_IP_VALID 0x0200 /* ... the csum is valid */
#define CSUM_DATA_VALID 0x0400 /* csum_data field is valid */
#define CSUM_PSEUDO_HDR 0x0800 /* csum_data has pseudo hdr */
#define CSUM_SCTP_VALID 0x1000 /* SCTP checksum is valid */
+#define CSUM_UDP_IPV6 0x2000 /* will csum IPv6/UDP */
+#define CSUM_TCP_IPV6 0x4000 /* will csum IPv6/TCP */
+/* CSUM_TSO_IPV6 0x8000 will do IPv6/TSO */
+
+/* CSUM_FRAGMENT_IPV6 0x10000 will do IPv6 fragementation */
+
+#define CSUM_DELAY_DATA_IPV6 (CSUM_TCP_IPV6 | CSUM_UDP_IPV6)
+#define CSUM_DATA_VALID_IPV6 CSUM_DATA_VALID
#define CSUM_DELAY_DATA (CSUM_TCP | CSUM_UDP)
-#define CSUM_DELAY_IP (CSUM_IP) /* XXX add ipv6 here too? */
+#define CSUM_DELAY_IP (CSUM_IP) /* Only v4, no v6 IP hdr csum */
/*
* mbuf types.
diff --git a/sys/sys/mount.h b/sys/sys/mount.h
index 319e094ad63d..b1cd91327933 100644
--- a/sys/sys/mount.h
+++ b/sys/sys/mount.h
@@ -148,6 +148,7 @@ struct vfsopt {
* Lock reference:
* m - mountlist_mtx
* i - interlock
+ * v - vnode freelist mutex
*
* Unmarked fields are considered stable as long as a ref is held.
*
@@ -164,8 +165,8 @@ struct mount {
int mnt_ref; /* (i) Reference count */
struct vnodelst mnt_nvnodelist; /* (i) list of vnodes */
int mnt_nvnodelistsize; /* (i) # of vnodes */
- struct vnodelst mnt_activevnodelist; /* (i) list of active vnodes */
- int mnt_activevnodelistsize;/* (i) # of active vnodes */
+ struct vnodelst mnt_activevnodelist; /* (v) list of active vnodes */
+ int mnt_activevnodelistsize;/* (v) # of active vnodes */
int mnt_writeopcount; /* (i) write syscalls pending */
int mnt_kern_flag; /* (i) kernel only flags */
uint64_t mnt_flag; /* (i) flags shared with user */
diff --git a/sys/sys/param.h b/sys/sys/param.h
index 789ca6b754b6..240fd260b2ec 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 1000012 /* Master, propagated to newvers */
+#define __FreeBSD_version 1000013 /* 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 0873927b0c6c..389bf14a4cee 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -247,6 +247,7 @@ struct thread {
int td_slptick; /* (t) Time at sleep. */
int td_blktick; /* (t) Time spent blocked. */
int td_swvoltick; /* (t) Time at last SW_VOL switch. */
+ u_int td_cow; /* (*) Number of copy-on-write faults */
struct rusage td_ru; /* (t) rusage information. */
struct rusage_ext td_rux; /* (t) Internal rusage information. */
uint64_t td_incruntime; /* (t) Cpu ticks to transfer to proc. */
@@ -257,7 +258,6 @@ struct thread {
u_int td_uticks; /* (t) Statclock hits in user mode. */
int td_intrval; /* (t) Return value for sleepq. */
sigset_t td_oldsigmask; /* (k) Saved mask from pre sigpause. */
- sigset_t td_sigmask; /* (c) Current signal mask. */
volatile u_int td_generation; /* (k) For detection of preemption */
stack_t td_sigstk; /* (k) Stack ptr and on-stack flag. */
int td_xsig; /* (c) Signal for ptrace */
@@ -271,10 +271,11 @@ struct thread {
struct osd td_osd; /* (k) Object specific data. */
struct vm_map_entry *td_map_def_user; /* (k) Deferred entries. */
pid_t td_dbg_forked; /* (c) Child pid for debugger. */
-#define td_endzero td_rqindex
+#define td_endzero td_sigmask
-/* Copied during fork1() or thread_sched_upcall(). */
+/* Copied during fork1() or create_thread(). */
#define td_startcopy td_endzero
+ sigset_t td_sigmask; /* (c) Current signal mask. */
u_char td_rqindex; /* (t) Run queue index. */
u_char td_base_pri; /* (t) Thread base kernel priority. */
u_char td_priority; /* (t) Thread active priority. */
@@ -284,7 +285,7 @@ struct thread {
#define td_endcopy td_pcb
/*
- * Fields that must be manually set in fork1() or thread_sched_upcall()
+ * Fields that must be manually set in fork1() or create_thread()
* or already have been set in the allocator, constructor, etc.
*/
struct pcb *td_pcb; /* (k) Kernel VA of pcb and kstack. */
diff --git a/sys/sys/sdt.h b/sys/sys/sdt.h
index 90d169906d49..e7b5478cdad0 100644
--- a/sys/sys/sdt.h
+++ b/sys/sys/sdt.h
@@ -92,6 +92,7 @@
#define SDT_PROBE_DEFINE4(prov, mod, func, name, sname, arg0, arg1, arg2, arg3)
#define SDT_PROBE_DEFINE5(prov, mod, func, name, sname, arg0, arg1, arg2, arg3, arg4)
+#define SDT_PROBE0(prov, mod, func, name)
#define SDT_PROBE1(prov, mod, func, name, arg0)
#define SDT_PROBE2(prov, mod, func, name, arg0, arg1)
#define SDT_PROBE3(prov, mod, func, name, arg0, arg1, arg2)
@@ -231,6 +232,8 @@ struct sdt_provider {
SDT_PROBE_ARGTYPE(prov, mod, func, name, 3, arg3); \
SDT_PROBE_ARGTYPE(prov, mod, func, name, 4, arg4)
+#define SDT_PROBE0(prov, mod, func, name) \
+ SDT_PROBE(prov, mod, func, name, 0, 0, 0, 0, 0)
#define SDT_PROBE1(prov, mod, func, name, arg0) \
SDT_PROBE(prov, mod, func, name, arg0, 0, 0, 0, 0)
#define SDT_PROBE2(prov, mod, func, name, arg0, arg1) \
diff --git a/sys/sys/slicer.h b/sys/sys/slicer.h
new file mode 100644
index 000000000000..a41861e04557
--- /dev/null
+++ b/sys/sys/slicer.h
@@ -0,0 +1,51 @@
+/*-
+ * Copyright (c) 2012 Semihalf.
+ * 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 _FLASH_SLICER_H_
+#define _FLASH_SLICER_H_
+
+#include <sys/types.h>
+
+#define FLASH_SLICES_MAX_NUM 8
+#define FLASH_SLICES_MAX_NAME_LEN (32 + 1)
+
+#define FLASH_SLICES_FLAG_NONE 0
+#define FLASH_SLICES_FLAG_RO 1 /* Read only */
+
+struct flash_slice {
+ off_t base;
+ off_t size;
+ char *label;
+ unsigned int flags;
+};
+
+#ifdef _KERNEL
+int flash_fill_slices(device_t, struct flash_slice *, int *);
+#endif /* _KERNEL */
+
+#endif /* _FLASH_SLICER_H_ */
diff --git a/sys/sys/smp.h b/sys/sys/smp.h
index 66e800873e4b..8c7ca578c25c 100644
--- a/sys/sys/smp.h
+++ b/sys/sys/smp.h
@@ -163,7 +163,7 @@ void forward_signal(struct thread *);
int restart_cpus(cpuset_t);
int stop_cpus(cpuset_t);
int stop_cpus_hard(cpuset_t);
-#if defined(__amd64__)
+#if defined(__amd64__) || defined(__i386__)
int suspend_cpus(cpuset_t);
#endif
void smp_rendezvous_action(void);
diff --git a/sys/sys/syscall.h b/sys/sys/syscall.h
index a9a1fb231373..321b70a20e60 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 227691 2011-11-19 06:35:15Z ed
+ * created from FreeBSD: head/sys/kern/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
#define SYS_syscall 0
diff --git a/sys/sys/syscall.mk b/sys/sys/syscall.mk
index 111388629465..7d9e06c0d8d8 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 227691 2011-11-19 06:35:15Z ed
+# created from FreeBSD: head/sys/kern/syscalls.master 236026 2012-05-25 21:50:48Z ed
MIASM = \
syscall.o \
exit.o \
diff --git a/sys/sys/syscallsubr.h b/sys/sys/syscallsubr.h
index 08dba2fdb5f3..4335550c3192 100644
--- a/sys/sys/syscallsubr.h
+++ b/sys/sys/syscallsubr.h
@@ -89,6 +89,7 @@ int kern_fchmodat(struct thread *td, int fd, char *path,
int kern_fchownat(struct thread *td, int fd, char *path,
enum uio_seg pathseg, int uid, int gid, int flag);
int kern_fcntl(struct thread *td, int fd, int cmd, intptr_t arg);
+int kern_fhstat(struct thread *td, fhandle_t fh, struct stat *buf);
int kern_fhstatfs(struct thread *td, fhandle_t fh, struct statfs *buf);
int kern_fstat(struct thread *td, int fd, struct stat *sbp);
int kern_fstatfs(struct thread *td, int fd, struct statfs *buf);
@@ -96,7 +97,7 @@ int kern_ftruncate(struct thread *td, int fd, off_t length);
int kern_futimes(struct thread *td, int fd, struct timeval *tptr,
enum uio_seg tptrseg);
int kern_getdirentries(struct thread *td, int fd, char *buf, u_int count,
- long *basep);
+ long *basep, ssize_t *residp, enum uio_seg bufseg);
int kern_getfsstat(struct thread *td, struct statfs **buf, size_t bufsize,
enum uio_seg bufseg, int flags);
int kern_getgroups(struct thread *td, u_int *ngrp, gid_t *groups);
diff --git a/sys/sys/sysproto.h b/sys/sys/sysproto.h
index 84a0ed77a8b1..d0163c63186a 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 227691 2011-11-19 06:35:15Z ed
+ * created from FreeBSD: head/sys/kern/syscalls.master 236026 2012-05-25 21:50:48Z ed
*/
#ifndef _SYS_SYSPROTO_H_
@@ -1669,11 +1669,11 @@ struct lpathconf_args {
};
struct cap_new_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char rights_l_[PADL_(u_int64_t)]; u_int64_t rights; char rights_r_[PADR_(u_int64_t)];
+ char rights_l_[PADL_(uint64_t)]; uint64_t rights; char rights_r_[PADR_(uint64_t)];
};
struct cap_getrights_args {
char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
- char rightsp_l_[PADL_(u_int64_t *)]; u_int64_t * rightsp; char rightsp_r_[PADR_(u_int64_t *)];
+ char rightsp_l_[PADL_(uint64_t *)]; uint64_t * rightsp; char rightsp_r_[PADR_(uint64_t *)];
};
struct cap_enter_args {
register_t dummy;
diff --git a/sys/sys/user.h b/sys/sys/user.h
index 2c37e9972cd1..42733a6ee2ab 100644
--- a/sys/sys/user.h
+++ b/sys/sys/user.h
@@ -159,7 +159,7 @@ struct kinfo_proc {
u_int ki_estcpu; /* Time averaged value of ki_cpticks */
u_int ki_slptime; /* Time since last blocked */
u_int ki_swtime; /* Time swapped in or out */
- int ki_spareint1; /* unused (just here for alignment) */
+ u_int ki_cow; /* number of copy-on-write faults */
u_int64_t ki_runtime; /* Real time in microsec */
struct timeval ki_start; /* starting time */
struct timeval ki_childtime; /* time used by process children */
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 49f6f5b4e0e8..0d711f2d4219 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -640,6 +640,8 @@ void vunref(struct vnode *);
void vn_printf(struct vnode *vp, const char *fmt, ...) __printflike(2,3);
#define vprint(label, vp) vn_printf((vp), "%s\n", (label))
int vrecycle(struct vnode *vp);
+int vn_bmap_seekhole(struct vnode *vp, u_long cmd, off_t *off,
+ struct ucred *cred);
int vn_close(struct vnode *vp,
int flags, struct ucred *file_cred, struct thread *td);
void vn_finished_write(struct mount *mp);
diff --git a/sys/sys/vtoc.h b/sys/sys/vtoc.h
index 55c80e225219..82c6a57dc138 100644
--- a/sys/sys/vtoc.h
+++ b/sys/sys/vtoc.h
@@ -51,6 +51,7 @@
#define VTOC_TAG_FREEBSD_UFS 0x0902
#define VTOC_TAG_FREEBSD_VINUM 0x0903
#define VTOC_TAG_FREEBSD_ZFS 0x0904
+#define VTOC_TAG_FREEBSD_NANDFS 0x0905
#define VTOC_FLAG_UNMNT 0x01 /* unmountable partition */
#define VTOC_FLAG_RDONLY 0x10 /* partition is read/only */
diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c
index b2bd2bd12fcb..d995e56711b0 100644
--- a/sys/ufs/ffs/ffs_softdep.c
+++ b/sys/ufs/ffs/ffs_softdep.c
@@ -10687,6 +10687,7 @@ handle_jwork(wkhd)
case D_FREEFRAG:
rele_jseg(WK_JSEG(WK_FREEFRAG(wk)->ff_jdep));
WORKITEM_FREE(wk, D_FREEFRAG);
+ continue;
case D_FREEWORK:
handle_written_freework(WK_FREEWORK(wk));
continue;
diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c
index f55b51560cc7..a271cdfda62e 100644
--- a/sys/ufs/ufs/ufs_vnops.c
+++ b/sys/ufs/ufs/ufs_vnops.c
@@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$");
#include <sys/namei.h>
#include <sys/kernel.h>
#include <sys/fcntl.h>
+#include <sys/filio.h>
#include <sys/stat.h>
#include <sys/bio.h>
#include <sys/buf.h>
@@ -102,6 +103,7 @@ static int ufs_chown(struct vnode *, uid_t, gid_t, struct ucred *, struct thread
static vop_close_t ufs_close;
static vop_create_t ufs_create;
static vop_getattr_t ufs_getattr;
+static vop_ioctl_t ufs_ioctl;
static vop_link_t ufs_link;
static int ufs_makeinode(int mode, struct vnode *, struct vnode **, struct componentname *);
static vop_markatime_t ufs_markatime;
@@ -2504,6 +2506,9 @@ ufs_pathconf(ap)
*ap->a_retval = 0;
#endif
break;
+ case _PC_MIN_HOLE_SIZE:
+ *ap->a_retval = ap->a_vp->v_mount->mnt_stat.f_iosize;
+ break;
case _PC_ASYNC_IO:
/* _PC_ASYNC_IO should have been handled by upper layers. */
KASSERT(0, ("_PC_ASYNC_IO should not get here"));
@@ -2737,6 +2742,20 @@ bad:
return (error);
}
+static int
+ufs_ioctl(struct vop_ioctl_args *ap)
+{
+
+ switch (ap->a_command) {
+ case FIOSEEKDATA:
+ case FIOSEEKHOLE:
+ return (vn_bmap_seekhole(ap->a_vp, ap->a_command,
+ (off_t *)ap->a_data, ap->a_cred));
+ default:
+ return (ENOTTY);
+ }
+}
+
/* Global vfs data structures for ufs. */
struct vop_vector ufs_vnodeops = {
.vop_default = &default_vnodeops,
@@ -2751,6 +2770,7 @@ struct vop_vector ufs_vnodeops = {
.vop_create = ufs_create,
.vop_getattr = ufs_getattr,
.vop_inactive = ufs_inactive,
+ .vop_ioctl = ufs_ioctl,
.vop_link = ufs_link,
.vop_lookup = vfs_cache_lookup,
.vop_markatime = ufs_markatime,
diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c
index b3c795082e90..ad3e914504ec 100644
--- a/sys/vm/device_pager.c
+++ b/sys/vm/device_pager.c
@@ -111,7 +111,6 @@ cdev_pager_lookup(void *handle)
mtx_lock(&dev_pager_mtx);
object = vm_pager_object_lookup(&dev_pager_object_list, handle);
- vm_object_reference(object);
mtx_unlock(&dev_pager_mtx);
return (object);
}
diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c
index eaa2faf67612..5b83ec30e787 100644
--- a/sys/vm/uma_core.c
+++ b/sys/vm/uma_core.c
@@ -272,10 +272,7 @@ SYSCTL_PROC(_vm, OID_AUTO, zone_stats, CTLFLAG_RD|CTLTYPE_STRUCT,
static void
bucket_enable(void)
{
- if (cnt.v_free_count < cnt.v_free_min)
- bucketdisable = 1;
- else
- bucketdisable = 0;
+ bucketdisable = vm_page_count_min();
}
/*
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index fde5d4a75447..e3a29f003984 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -805,6 +805,7 @@ vnode_locked:
if (!is_first_object_locked)
VM_OBJECT_LOCK(fs.object);
PCPU_INC(cnt.v_cow_faults);
+ curthread->td_cow++;
} else {
prot &= ~VM_PROT_WRITE;
}
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index 281c101a551b..65af69df2b8a 100644
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -131,7 +131,7 @@ TUNABLE_INT("vm.boot_pages", &boot_pages);
SYSCTL_INT(_vm, OID_AUTO, boot_pages, CTLFLAG_RD, &boot_pages, 0,
"number of pages allocated for bootstrapping the VM system");
-int pa_tryrelock_restart;
+static int pa_tryrelock_restart;
SYSCTL_INT(_vm, OID_AUTO, tryrelock_restart, CTLFLAG_RD,
&pa_tryrelock_restart, 0, "Number of tryrelock restarts");
@@ -647,7 +647,7 @@ PHYS_TO_VM_PAGE(vm_paddr_t pa)
long pi;
pi = atop(pa);
- if (pi >= first_page && pi < vm_page_array_size) {
+ if (pi >= first_page && (pi - first_page) < vm_page_array_size) {
m = &vm_page_array[pi - first_page];
return (m);
}
diff --git a/sys/vm/vm_pager.c b/sys/vm/vm_pager.c
index 8c652e27bc41..6ed64eab6d64 100644
--- a/sys/vm/vm_pager.c
+++ b/sys/vm/vm_pager.c
@@ -271,14 +271,15 @@ vm_pager_object_lookup(struct pagerlst *pg_list, void *handle)
vm_object_t object;
TAILQ_FOREACH(object, pg_list, pager_object_list) {
- VM_OBJECT_LOCK(object);
- if (object->handle == handle &&
- (object->flags & OBJ_DEAD) == 0) {
- vm_object_reference_locked(object);
+ if (object->handle == handle) {
+ VM_OBJECT_LOCK(object);
+ if ((object->flags & OBJ_DEAD) == 0) {
+ vm_object_reference_locked(object);
+ VM_OBJECT_UNLOCK(object);
+ break;
+ }
VM_OBJECT_UNLOCK(object);
- break;
}
- VM_OBJECT_UNLOCK(object);
}
return (object);
}
diff --git a/sys/x86/include/_limits.h b/sys/x86/include/_limits.h
index 17303ac3e4e5..2f582e1237c6 100644
--- a/sys/x86/include/_limits.h
+++ b/sys/x86/include/_limits.h
@@ -57,7 +57,7 @@
#define __INT_MAX 0x7fffffff /* max value for an int */
#define __INT_MIN (-0x7fffffff - 1) /* min value for an int */
-#ifdef _LP64
+#ifdef __LP64__
#define __ULONG_MAX 0xffffffffffffffff /* max for an unsigned long */
#define __LONG_MAX 0x7fffffffffffffff /* max for a long */
#define __LONG_MIN (-0x7fffffffffffffff - 1) /* min for a long */
@@ -72,7 +72,7 @@
#define __LLONG_MAX 0x7fffffffffffffffLL /* max value for a long long */
#define __LLONG_MIN (-0x7fffffffffffffffLL - 1) /* min for a long long */
-#ifdef _LP64
+#ifdef __LP64__
#define __SSIZE_MAX __LONG_MAX /* max value for a ssize_t */
#define __SIZE_T_MAX __ULONG_MAX /* max value for a size_t */
#define __OFF_MAX __LONG_MAX /* max value for an off_t */
diff --git a/sys/x86/include/_stdint.h b/sys/x86/include/_stdint.h
index a9d403705f00..903b9e7e97c7 100644
--- a/sys/x86/include/_stdint.h
+++ b/sys/x86/include/_stdint.h
@@ -50,7 +50,7 @@
#define UINT16_C(c) (c)
#define UINT32_C(c) (c ## U)
-#ifdef _LP64
+#ifdef __LP64__
#define INT64_C(c) (c ## L)
#define UINT64_C(c) (c ## UL)
#else
@@ -81,7 +81,7 @@
#define UINT16_MAX 0xffff
#define UINT32_MAX 0xffffffffU
-#ifdef _LP64
+#ifdef __LP64__
#define INT64_MIN (-0x7fffffffffffffff-1)
#define INT64_MAX 0x7fffffffffffffff
#define UINT64_MAX 0xffffffffffffffff
@@ -139,7 +139,7 @@
* ISO/IEC 9899:1999
* 7.18.2.4 Limits of integer types capable of holding object pointers
*/
-#ifdef _LP64
+#ifdef __LP64__
#define INTPTR_MIN INT64_MIN
#define INTPTR_MAX INT64_MAX
#define UINTPTR_MAX UINT64_MAX
@@ -161,7 +161,7 @@
* ISO/IEC 9899:1999
* 7.18.3 Limits of other integer types
*/
-#ifdef _LP64
+#ifdef __LP64__
/* Limits of ptrdiff_t. */
#define PTRDIFF_MIN INT64_MIN
#define PTRDIFF_MAX INT64_MAX
diff --git a/sys/x86/include/_types.h b/sys/x86/include/_types.h
index 33135f0888b7..e2806e56a424 100644
--- a/sys/x86/include/_types.h
+++ b/sys/x86/include/_types.h
@@ -54,7 +54,7 @@ typedef short __int16_t;
typedef unsigned short __uint16_t;
typedef int __int32_t;
typedef unsigned int __uint32_t;
-#ifdef _LP64
+#ifdef __LP64__
typedef long __int64_t;
typedef unsigned long __uint64_t;
#else
@@ -73,7 +73,7 @@ typedef unsigned long long __uint64_t;
/*
* Standard type definitions.
*/
-#ifdef _LP64
+#ifdef __LP64__
typedef __int32_t __clock_t; /* clock()... */
typedef __int64_t __critical_t;
typedef double __double_t;
@@ -97,7 +97,7 @@ typedef __int8_t __int_least8_t;
typedef __int16_t __int_least16_t;
typedef __int32_t __int_least32_t;
typedef __int64_t __int_least64_t;
-#ifdef _LP64
+#ifdef __LP64__
typedef __int64_t __ptrdiff_t; /* ptr1 - ptr2 */
typedef __int64_t __register_t;
typedef __int64_t __segsz_t; /* segment size (in pages) */
@@ -125,7 +125,7 @@ typedef __uint8_t __uint_least8_t;
typedef __uint16_t __uint_least16_t;
typedef __uint32_t __uint_least32_t;
typedef __uint64_t __uint_least64_t;
-#ifdef _LP64
+#ifdef __LP64__
typedef __uint64_t __u_register_t;
typedef __uint64_t __vm_offset_t;
typedef __uint64_t __vm_paddr_t;
diff --git a/sys/x86/include/float.h b/sys/x86/include/float.h
index be0bed30af28..8af3039d0856 100644
--- a/sys/x86/include/float.h
+++ b/sys/x86/include/float.h
@@ -42,7 +42,7 @@ __END_DECLS
#define FLT_RADIX 2 /* b */
#define FLT_ROUNDS __flt_rounds()
#if __ISO_C_VISIBLE >= 1999
-#ifdef _LP64
+#ifdef __LP64__
#define FLT_EVAL_METHOD 0 /* no promotions */
#else
#define FLT_EVAL_METHOD (-1) /* i387 semantics are...interesting */
diff --git a/sys/x86/include/ptrace.h b/sys/x86/include/ptrace.h
index 475e36984023..16a04d1e9f6e 100644
--- a/sys/x86/include/ptrace.h
+++ b/sys/x86/include/ptrace.h
@@ -40,8 +40,10 @@
* PT_GETXSTATE and PT_SETXSTATE. They should not be (re)used.
*/
-#define PT_GETXMMREGS (PT_FIRSTMACH + 0) /* i386 only */
-#define PT_SETXMMREGS (PT_FIRSTMACH + 1) /* i386 only */
+#ifdef __i386__
+#define PT_GETXMMREGS (PT_FIRSTMACH + 0)
+#define PT_SETXMMREGS (PT_FIRSTMACH + 1)
+#endif
#define PT_GETXSTATE (PT_FIRSTMACH + 2)
#define PT_SETXSTATE (PT_FIRSTMACH + 3)
diff --git a/tools/build/options/WITHOUT_ED_CRYPTO b/tools/build/options/WITHOUT_ED_CRYPTO
new file mode 100644
index 000000000000..d4572640d4c1
--- /dev/null
+++ b/tools/build/options/WITHOUT_ED_CRYPTO
@@ -0,0 +1,4 @@
+.\" $FreeBSD$
+Set to build
+.Xr ed 1
+without support for encryption/decryption.
diff --git a/tools/build/options/WITHOUT_LS_COLORS b/tools/build/options/WITHOUT_LS_COLORS
new file mode 100644
index 000000000000..79896565c1a7
--- /dev/null
+++ b/tools/build/options/WITHOUT_LS_COLORS
@@ -0,0 +1,4 @@
+.\" $FreeBSD$
+Set to build
+.Xr ls 1
+without support for colors to distinguish file types.
diff --git a/tools/build/options/WITHOUT_NAND b/tools/build/options/WITHOUT_NAND
new file mode 100644
index 000000000000..67cadaf8d966
--- /dev/null
+++ b/tools/build/options/WITHOUT_NAND
@@ -0,0 +1,2 @@
+.\" $FreeBSD$
+Set to not build the NAND Flash components.
diff --git a/tools/build/options/WITH_NAND b/tools/build/options/WITH_NAND
new file mode 100644
index 000000000000..527d43dce281
--- /dev/null
+++ b/tools/build/options/WITH_NAND
@@ -0,0 +1,2 @@
+.\" $FreeBSD$
+Set to build the NAND Flash components.
diff --git a/tools/build/options/makeman b/tools/build/options/makeman
index d29fe0a20920..61c077697a5f 100755
--- a/tools/build/options/makeman
+++ b/tools/build/options/makeman
@@ -265,7 +265,7 @@ EOF
cat <<EOF
.El
.Sh FILES
-.Bl -tag -compact
+.Bl -tag -compact -width Pa
.It Pa /etc/src.conf
.It Pa /usr/share/mk/bsd.own.mk
.El
diff --git a/tools/regression/sysvmsg/msgtest.c b/tools/regression/sysvmsg/msgtest.c
index 462dc3846404..058a32106642 100644
--- a/tools/regression/sysvmsg/msgtest.c
+++ b/tools/regression/sysvmsg/msgtest.c
@@ -35,7 +35,7 @@
* Test the SVID-compatible Message Queue facility.
*/
-#include <sys/param.h>
+#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/wait.h>
diff --git a/tools/regression/sysvsem/semtest.c b/tools/regression/sysvsem/semtest.c
index b6859bf3a453..8a997d0bf6a4 100644
--- a/tools/regression/sysvsem/semtest.c
+++ b/tools/regression/sysvsem/semtest.c
@@ -35,7 +35,7 @@
* Test the SVID-compatible Semaphore facility.
*/
-#include <sys/param.h>
+#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/wait.h>
diff --git a/tools/regression/sysvshm/shmtest.c b/tools/regression/sysvshm/shmtest.c
index 9e5ab1c16359..7c6154512bef 100644
--- a/tools/regression/sysvshm/shmtest.c
+++ b/tools/regression/sysvshm/shmtest.c
@@ -35,7 +35,7 @@
* Test the SVID-compatible Shared Memory facility.
*/
-#include <sys/param.h>
+#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/wait.h>
diff --git a/tools/regression/usr.bin/yacc/Makefile b/tools/regression/usr.bin/yacc/Makefile
new file mode 100644
index 000000000000..b937d41a4e4a
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/Makefile
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+all:
+ @m4 ${.CURDIR}/../regress.m4 ${.CURDIR}/regress.sh | sh /dev/stdin ${.CURDIR}
diff --git a/tools/regression/usr.bin/yacc/calc.y b/tools/regression/usr.bin/yacc/calc.y
new file mode 100644
index 000000000000..c2e5a898c93d
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/calc.y
@@ -0,0 +1,106 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+%}
+
+%start list
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr '+' expr
+ { $$ = $1 + $3; }
+ | expr '-' expr
+ { $$ = $1 - $3; }
+ | expr '*' expr
+ { $$ = $1 * $3; }
+ | expr '/' expr
+ { $$ = $1 / $3; }
+ | expr '%' expr
+ { $$ = $1 % $3; }
+ | expr '&' expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | '-' expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/tools/regression/usr.bin/yacc/calc1.y b/tools/regression/usr.bin/yacc/calc1.y
new file mode 100644
index 000000000000..ec89736f47a5
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/calc1.y
@@ -0,0 +1,305 @@
+%{
+
+/* http://dinosaur.compilertools.net/yacc/index.html */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <math.h>
+
+typedef struct interval
+{
+ double lo, hi;
+}
+INTERVAL;
+
+INTERVAL vmul(double, double, INTERVAL);
+INTERVAL vdiv(double, double, INTERVAL);
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+int dcheck(INTERVAL);
+
+double dreg[26];
+INTERVAL vreg[26];
+
+%}
+%expect 18
+
+%start line
+%union
+{
+ int ival;
+ double dval;
+ INTERVAL vval;
+}
+
+%token <ival> DREG VREG /* indices into dreg, vreg arrays */
+%token <dval> CONST /* floating point constant */
+
+%type <dval> dexp /* expression */
+%type <vval> vexp /* interval expression */
+
+ /* precedence information about the operators */
+
+%left '+' '-'
+%left '*' '/'
+%left UMINUS /* precedence for unary minus */
+
+%% /* beginning of rules section */
+
+lines : /* empty */
+ | lines line
+ ;
+
+line : dexp '\n'
+ {
+ (void) printf("%15.8f\n", $1);
+ }
+ | vexp '\n'
+ {
+ (void) printf("(%15.8f, %15.8f)\n", $1.lo, $1.hi);
+ }
+ | DREG '=' dexp '\n'
+ {
+ dreg[$1] = $3;
+ }
+ | VREG '=' vexp '\n'
+ {
+ vreg[$1] = $3;
+ }
+ | error '\n'
+ {
+ yyerrok;
+ }
+ ;
+
+dexp : CONST
+ | DREG
+ {
+ $$ = dreg[$1];
+ }
+ | dexp '+' dexp
+ {
+ $$ = $1 + $3;
+ }
+ | dexp '-' dexp
+ {
+ $$ = $1 - $3;
+ }
+ | dexp '*' dexp
+ {
+ $$ = $1 * $3;
+ }
+ | dexp '/' dexp
+ {
+ $$ = $1 / $3;
+ }
+ | '-' dexp %prec UMINUS
+ {
+ $$ = -$2;
+ }
+ | '(' dexp ')'
+ {
+ $$ = $2;
+ }
+ ;
+
+vexp : dexp
+ {
+ $$.hi = $$.lo = $1;
+ }
+ | '(' dexp ',' dexp ')'
+ {
+ $$.lo = $2;
+ $$.hi = $4;
+ if ( $$.lo > $$.hi )
+ {
+ (void) printf("interval out of order\n");
+ YYERROR;
+ }
+ }
+ | VREG
+ {
+ $$ = vreg[$1];
+ }
+ | vexp '+' vexp
+ {
+ $$.hi = $1.hi + $3.hi;
+ $$.lo = $1.lo + $3.lo;
+ }
+ | dexp '+' vexp
+ {
+ $$.hi = $1 + $3.hi;
+ $$.lo = $1 + $3.lo;
+ }
+ | vexp '-' vexp
+ {
+ $$.hi = $1.hi - $3.lo;
+ $$.lo = $1.lo - $3.hi;
+ }
+ | dexp '-' vexp
+ {
+ $$.hi = $1 - $3.lo;
+ $$.lo = $1 - $3.hi;
+ }
+ | vexp '*' vexp
+ {
+ $$ = vmul( $1.lo, $1.hi, $3 );
+ }
+ | dexp '*' vexp
+ {
+ $$ = vmul ($1, $1, $3 );
+ }
+ | vexp '/' vexp
+ {
+ if (dcheck($3)) YYERROR;
+ $$ = vdiv ( $1.lo, $1.hi, $3 );
+ }
+ | dexp '/' vexp
+ {
+ if (dcheck ( $3 )) YYERROR;
+ $$ = vdiv ($1, $1, $3 );
+ }
+ | '-' vexp %prec UMINUS
+ {
+ $$.hi = -$2.lo;
+ $$.lo = -$2.hi;
+ }
+ | '(' vexp ')'
+ {
+ $$ = $2;
+ }
+ ;
+
+%% /* beginning of subroutines section */
+
+#define BSZ 50 /* buffer size for floating point numbers */
+
+ /* lexical analysis */
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ int c;
+
+ while ((c = getchar()) == ' ')
+ { /* skip over blanks */
+ }
+
+ if (isupper(c))
+ {
+ yylval.ival = c - 'A';
+ return (VREG);
+ }
+ if (islower(c))
+ {
+ yylval.ival = c - 'a';
+ return (DREG);
+ }
+
+ if (isdigit(c) || c == '.')
+ {
+ /* gobble up digits, points, exponents */
+ char buf[BSZ + 1], *cp = buf;
+ int dot = 0, expr = 0;
+
+ for (; (cp - buf) < BSZ; ++cp, c = getchar())
+ {
+
+ *cp = c;
+ if (isdigit(c))
+ continue;
+ if (c == '.')
+ {
+ if (dot++ || expr)
+ return ('.'); /* will cause syntax error */
+ continue;
+ }
+
+ if (c == 'e')
+ {
+ if (expr++)
+ return ('e'); /* will cause syntax error */
+ continue;
+ }
+
+ /* end of number */
+ break;
+ }
+ *cp = '\0';
+
+ if ((cp - buf) >= BSZ)
+ printf("constant too long: truncated\n");
+ else
+ ungetc(c, stdin); /* push back last char read */
+ yylval.dval = atof(buf);
+ return (CONST);
+ }
+ return (c);
+}
+
+static INTERVAL
+hilo(double a, double b, double c, double d)
+{
+ /* returns the smallest interval containing a, b, c, and d */
+ /* used by *, / routines */
+ INTERVAL v;
+
+ if (a > b)
+ {
+ v.hi = a;
+ v.lo = b;
+ }
+ else
+ {
+ v.hi = b;
+ v.lo = a;
+ }
+
+ if (c > d)
+ {
+ if (c > v.hi)
+ v.hi = c;
+ if (d < v.lo)
+ v.lo = d;
+ }
+ else
+ {
+ if (d > v.hi)
+ v.hi = d;
+ if (c < v.lo)
+ v.lo = c;
+ }
+ return (v);
+}
+
+INTERVAL
+vmul(double a, double b, INTERVAL v)
+{
+ return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
+}
+
+int
+dcheck(INTERVAL v)
+{
+ if (v.hi >= 0. && v.lo <= 0.)
+ {
+ printf("divisor interval contains 0.\n");
+ return (1);
+ }
+ return (0);
+}
+
+INTERVAL
+vdiv(double a, double b, INTERVAL v)
+{
+ return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
+}
diff --git a/tools/regression/usr.bin/yacc/calc2.y b/tools/regression/usr.bin/yacc/calc2.y
new file mode 100644
index 000000000000..e742ff34c215
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/calc2.y
@@ -0,0 +1,120 @@
+%parse-param { int regs[26] }
+%parse-param { int *base }
+
+%lex-param { int *base }
+
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+#ifdef YYBISON
+#define YYLEX_PARAM base
+#define YYLEX_DECL() yylex(int *YYLEX_PARAM)
+#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+%}
+
+%start list
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr '+' expr
+ { $$ = $1 + $3; }
+ | expr '-' expr
+ { $$ = $1 - $3; }
+ | expr '*' expr
+ { $$ = $1 * $3; }
+ | expr '/' expr
+ { $$ = $1 / $3; }
+ | expr '%' expr
+ { $$ = $1 % $3; }
+ | expr '&' expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | '-' expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; (*base) = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = (*base) * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ int regs[26];
+ int base = 10;
+
+ while(!feof(stdin)) {
+ yyparse(regs, &base);
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = (c - '0') % (*base);
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/tools/regression/usr.bin/yacc/calc3.y b/tools/regression/usr.bin/yacc/calc3.y
new file mode 100644
index 000000000000..252faa961f4b
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/calc3.y
@@ -0,0 +1,123 @@
+%pure-parser
+
+%parse-param { int regs[26] }
+%parse-param { int *base }
+
+%lex-param { int *base }
+
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM base
+#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
+#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+%}
+
+%start list
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr '+' expr
+ { $$ = $1 + $3; }
+ | expr '-' expr
+ { $$ = $1 - $3; }
+ | expr '*' expr
+ { $$ = $1 * $3; }
+ | expr '/' expr
+ { $$ = $1 / $3; }
+ | expr '%' expr
+ { $$ = $1 % $3; }
+ | expr '&' expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | '-' expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; (*base) = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = (*base) * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ int regs[26];
+ int base = 10;
+
+ while(!feof(stdin)) {
+ yyparse(regs, &base);
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ *yylval = (c - 'a');
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ *yylval = (c - '0') % (*base);
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/tools/regression/usr.bin/yacc/code_calc.y b/tools/regression/usr.bin/yacc/code_calc.y
new file mode 100644
index 000000000000..0a99456e7f89
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/code_calc.y
@@ -0,0 +1,112 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *s);
+#endif
+
+%}
+
+%start list
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr '+' expr
+ { $$ = $1 + $3; }
+ | expr '-' expr
+ { $$ = $1 - $3; }
+ | expr '*' expr
+ { $$ = $1 * $3; }
+ | expr '/' expr
+ { $$ = $1 / $3; }
+ | expr '%' expr
+ { $$ = $1 % $3; }
+ | expr '&' expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | '-' expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/tools/regression/usr.bin/yacc/code_error.y b/tools/regression/usr.bin/yacc/code_error.y
new file mode 100644
index 000000000000..bb771567606a
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/code_error.y
@@ -0,0 +1,36 @@
+%{
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *);
+#endif
+
+%}
+%%
+S: error
+%%
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
diff --git a/tools/regression/usr.bin/yacc/error.y b/tools/regression/usr.bin/yacc/error.y
new file mode 100644
index 000000000000..673c68d68e92
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/error.y
@@ -0,0 +1,28 @@
+%{
+int yylex(void);
+static void yyerror(const char *);
+%}
+%%
+S: error
+%%
+
+#include <stdio.h>
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
diff --git a/tools/regression/usr.bin/yacc/ftp.y b/tools/regression/usr.bin/yacc/ftp.y
new file mode 100644
index 000000000000..42c210bf4ef6
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/ftp.y
@@ -0,0 +1,1228 @@
+/*
+ * Copyright (c) 1985, 1988 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley. The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * @(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89
+ */
+
+/*
+ * Grammar for FTP commands.
+ * See RFC 959.
+ */
+
+%{
+
+/* sccsid[] = "@(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89"; */
+
+#include <sys/param.h>
+#include <sys/socket.h>
+
+#include <netinet/in.h>
+
+#include <arpa/ftp.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <signal.h>
+#include <ctype.h>
+#include <pwd.h>
+#include <setjmp.h>
+#include <syslog.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <time.h>
+#include <assert.h>
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *);
+#endif
+
+extern struct sockaddr_in data_dest;
+extern int logged_in;
+extern struct passwd *pw;
+extern int guest;
+extern int logging;
+extern int type;
+extern int form;
+extern int debug;
+extern int timeout;
+extern int maxtimeout;
+extern int pdata;
+extern char hostname[], remotehost[];
+extern char proctitle[];
+extern char *globerr;
+extern int usedefault;
+extern int transflag;
+extern char tmpline[];
+
+extern char **glob(char *);
+extern char *renamefrom(char *);
+extern void cwd(const char *);
+
+extern void dologout(int);
+extern void fatal(const char *);
+extern void makedir(const char *);
+extern void nack(const char *);
+extern void pass(const char *);
+extern void passive(void);
+extern void pwd(void);
+extern void removedir(char *);
+extern void renamecmd(char *, char *);
+extern void retrieve(const char *, const char *);
+extern void send_file_list(const char *);
+extern void statcmd(void);
+extern void statfilecmd(const char *);
+extern void store(char *, const char *, int);
+extern void user(const char *);
+
+extern void perror_reply(int, const char *, ...);
+extern void reply(int, const char *, ...);
+extern void lreply(int, const char *, ...);
+
+static int cmd_type;
+static int cmd_form;
+static int cmd_bytesz;
+char cbuf[512];
+char *fromname;
+
+struct tab {
+ const char *name;
+ short token;
+ short state;
+ short implemented; /* 1 if command is implemented */
+ const char *help;
+};
+
+static char * copy(const char *);
+
+#ifdef YYBISON
+static void sizecmd(char *filename);
+static void help(struct tab *ctab, char *s);
+struct tab cmdtab[];
+struct tab sitetab[];
+#endif
+
+static void
+yyerror(const char *msg)
+{
+ perror(msg);
+}
+%}
+
+%token
+ A B C E F I
+ L N P R S T
+
+ SP CRLF COMMA STRING NUMBER
+
+ USER PASS ACCT REIN QUIT PORT
+ PASV TYPE STRU MODE RETR STOR
+ APPE MLFL MAIL MSND MSOM MSAM
+ MRSQ MRCP ALLO REST RNFR RNTO
+ ABOR DELE CWD LIST NLST SITE
+ STAT HELP NOOP MKD RMD PWD
+ CDUP STOU SMNT SYST SIZE MDTM
+
+ UMASK IDLE CHMOD
+
+ LEXERR
+
+%start cmd_list
+
+%%
+
+cmd_list: /* empty */
+ | cmd_list cmd
+ {
+ fromname = (char *) 0;
+ }
+ | cmd_list rcmd
+ ;
+
+cmd: USER SP username CRLF
+ {
+ user((char *) $3);
+ free((char *) $3);
+ }
+ | PASS SP password CRLF
+ {
+ pass((char *) $3);
+ free((char *) $3);
+ }
+ | PORT SP host_port CRLF
+ {
+ usedefault = 0;
+ if (pdata >= 0) {
+ (void) close(pdata);
+ pdata = -1;
+ }
+ reply(200, "PORT command successful.");
+ }
+ | PASV CRLF
+ {
+ passive();
+ }
+ | TYPE SP type_code CRLF
+ {
+ switch (cmd_type) {
+
+ case TYPE_A:
+ if (cmd_form == FORM_N) {
+ reply(200, "Type set to A.");
+ type = cmd_type;
+ form = cmd_form;
+ } else
+ reply(504, "Form must be N.");
+ break;
+
+ case TYPE_E:
+ reply(504, "Type E not implemented.");
+ break;
+
+ case TYPE_I:
+ reply(200, "Type set to I.");
+ type = cmd_type;
+ break;
+
+ case TYPE_L:
+#if NBBY == 8
+ if (cmd_bytesz == 8) {
+ reply(200,
+ "Type set to L (byte size 8).");
+ type = cmd_type;
+ } else
+ reply(504, "Byte size must be 8.");
+#else /* NBBY == 8 */
+ UNIMPLEMENTED for NBBY != 8
+#endif /* NBBY == 8 */
+ }
+ }
+ | STRU SP struct_code CRLF
+ {
+ switch ($3) {
+
+ case STRU_F:
+ reply(200, "STRU F ok.");
+ break;
+
+ default:
+ reply(504, "Unimplemented STRU type.");
+ }
+ }
+ | MODE SP mode_code CRLF
+ {
+ switch ($3) {
+
+ case MODE_S:
+ reply(200, "MODE S ok.");
+ break;
+
+ default:
+ reply(502, "Unimplemented MODE type.");
+ }
+ }
+ | ALLO SP NUMBER CRLF
+ {
+ reply(202, "ALLO command ignored.");
+ }
+ | ALLO SP NUMBER SP R SP NUMBER CRLF
+ {
+ reply(202, "ALLO command ignored.");
+ }
+ | RETR check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ retrieve((char *) 0, (char *) $4);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | STOR check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ store((char *) $4, "w", 0);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | APPE check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ store((char *) $4, "a", 0);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | NLST check_login CRLF
+ {
+ if ($2)
+ send_file_list(".");
+ }
+ | NLST check_login SP STRING CRLF
+ {
+ if ($2 && $4 != 0)
+ send_file_list((char *) $4);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | LIST check_login CRLF
+ {
+ if ($2)
+ retrieve("/bin/ls -lgA", "");
+ }
+ | LIST check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ retrieve("/bin/ls -lgA %s", (char *) $4);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | STAT check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ statfilecmd((char *) $4);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | STAT CRLF
+ {
+ statcmd();
+ }
+ | DELE check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ remove((char *) $4);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | RNTO SP pathname CRLF
+ {
+ if (fromname) {
+ renamecmd(fromname, (char *) $3);
+ free(fromname);
+ fromname = (char *) 0;
+ } else {
+ reply(503, "Bad sequence of commands.");
+ }
+ free((char *) $3);
+ }
+ | ABOR CRLF
+ {
+ reply(225, "ABOR command successful.");
+ }
+ | CWD check_login CRLF
+ {
+ if ($2)
+ cwd(pw->pw_dir);
+ }
+ | CWD check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ cwd((char *) $4);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | HELP CRLF
+ {
+ help(cmdtab, (char *) 0);
+ }
+ | HELP SP STRING CRLF
+ {
+ register char *cp = (char *)$3;
+
+ if (strncasecmp(cp, "SITE", 4) == 0) {
+ cp = (char *)$3 + 4;
+ if (*cp == ' ')
+ cp++;
+ if (*cp)
+ help(sitetab, cp);
+ else
+ help(sitetab, (char *) 0);
+ } else
+ help(cmdtab, (char *) $3);
+ }
+ | NOOP CRLF
+ {
+ reply(200, "NOOP command successful.");
+ }
+ | MKD check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ makedir((char *) $4);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | RMD check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ removedir((char *) $4);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | PWD check_login CRLF
+ {
+ if ($2)
+ pwd();
+ }
+ | CDUP check_login CRLF
+ {
+ if ($2)
+ cwd("..");
+ }
+ | SITE SP HELP CRLF
+ {
+ help(sitetab, (char *) 0);
+ }
+ | SITE SP HELP SP STRING CRLF
+ {
+ help(sitetab, (char *) $5);
+ }
+ | SITE SP UMASK check_login CRLF
+ {
+ int oldmask;
+
+ if ($4) {
+ oldmask = umask(0);
+ (void) umask(oldmask);
+ reply(200, "Current UMASK is %03o", oldmask);
+ }
+ }
+ | SITE SP UMASK check_login SP octal_number CRLF
+ {
+ int oldmask;
+
+ if ($4) {
+ if (($6 == -1) || ($6 > 0777)) {
+ reply(501, "Bad UMASK value");
+ } else {
+ oldmask = umask($6);
+ reply(200,
+ "UMASK set to %03o (was %03o)",
+ $6, oldmask);
+ }
+ }
+ }
+ | SITE SP CHMOD check_login SP octal_number SP pathname CRLF
+ {
+ if ($4 && ($8 != 0)) {
+ if ($6 > 0777)
+ reply(501,
+ "CHMOD: Mode value must be between 0 and 0777");
+ else if (chmod((char *) $8, $6) < 0)
+ perror_reply(550, (char *) $8);
+ else
+ reply(200, "CHMOD command successful.");
+ }
+ if ($8 != 0)
+ free((char *) $8);
+ }
+ | SITE SP IDLE CRLF
+ {
+ reply(200,
+ "Current IDLE time limit is %d seconds; max %d",
+ timeout, maxtimeout);
+ }
+ | SITE SP IDLE SP NUMBER CRLF
+ {
+ if ($5 < 30 || $5 > maxtimeout) {
+ reply(501,
+ "Maximum IDLE time must be between 30 and %d seconds",
+ maxtimeout);
+ } else {
+ timeout = $5;
+ (void) alarm((unsigned) timeout);
+ reply(200,
+ "Maximum IDLE time set to %d seconds",
+ timeout);
+ }
+ }
+ | STOU check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ store((char *) $4, "w", 1);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | SYST CRLF
+ {
+#ifdef unix
+#ifdef BSD
+ reply(215, "UNIX Type: L%d Version: BSD-%d",
+ NBBY, BSD);
+#else /* BSD */
+ reply(215, "UNIX Type: L%d", NBBY);
+#endif /* BSD */
+#else /* unix */
+ reply(215, "UNKNOWN Type: L%d", NBBY);
+#endif /* unix */
+ }
+
+ /*
+ * SIZE is not in RFC959, but Postel has blessed it and
+ * it will be in the updated RFC.
+ *
+ * Return size of file in a format suitable for
+ * using with RESTART (we just count bytes).
+ */
+ | SIZE check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0)
+ sizecmd((char *) $4);
+ if ($4 != 0)
+ free((char *) $4);
+ }
+
+ /*
+ * MDTM is not in RFC959, but Postel has blessed it and
+ * it will be in the updated RFC.
+ *
+ * Return modification time of file as an ISO 3307
+ * style time. E.g. YYYYMMDDHHMMSS or YYYYMMDDHHMMSS.xxx
+ * where xxx is the fractional second (of any precision,
+ * not necessarily 3 digits)
+ */
+ | MDTM check_login SP pathname CRLF
+ {
+ if ($2 && $4 != 0) {
+ struct stat stbuf;
+ if (stat((char *) $4, &stbuf) < 0)
+ perror_reply(550, "%s", (char *) $4);
+ else if ((stbuf.st_mode&S_IFMT) != S_IFREG) {
+ reply(550, "%s: not a plain file.",
+ (char *) $4);
+ } else {
+ register struct tm *t;
+ t = gmtime(&stbuf.st_mtime);
+ reply(213,
+ "%04d%02d%02d%02d%02d%02d",
+ 1900 + t->tm_year,
+ t->tm_mon+1, t->tm_mday,
+ t->tm_hour, t->tm_min, t->tm_sec);
+ }
+ }
+ if ($4 != 0)
+ free((char *) $4);
+ }
+ | QUIT CRLF
+ {
+ reply(221, "Goodbye.");
+ dologout(0);
+ }
+ | error CRLF
+ {
+ yyerrok;
+ }
+ ;
+rcmd: RNFR check_login SP pathname CRLF
+ {
+ if ($2 && $4) {
+ fromname = renamefrom((char *) $4);
+ if (fromname == (char *) 0 && $4) {
+ free((char *) $4);
+ }
+ }
+ }
+ ;
+
+username: STRING
+ ;
+
+password: /* empty */
+ {
+ *(const char **)(&($$)) = "";
+ }
+ | STRING
+ ;
+
+byte_size: NUMBER
+ ;
+
+host_port: NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA
+ NUMBER COMMA NUMBER
+ {
+ register char *a, *p;
+
+ a = (char *)&data_dest.sin_addr;
+ a[0] = $1; a[1] = $3; a[2] = $5; a[3] = $7;
+ p = (char *)&data_dest.sin_port;
+ p[0] = $9; p[1] = $11;
+ data_dest.sin_family = AF_INET;
+ }
+ ;
+
+form_code: N
+ {
+ $$ = FORM_N;
+ }
+ | T
+ {
+ $$ = FORM_T;
+ }
+ | C
+ {
+ $$ = FORM_C;
+ }
+ ;
+
+type_code: A
+ {
+ cmd_type = TYPE_A;
+ cmd_form = FORM_N;
+ }
+ | A SP form_code
+ {
+ cmd_type = TYPE_A;
+ cmd_form = $3;
+ }
+ | E
+ {
+ cmd_type = TYPE_E;
+ cmd_form = FORM_N;
+ }
+ | E SP form_code
+ {
+ cmd_type = TYPE_E;
+ cmd_form = $3;
+ }
+ | I
+ {
+ cmd_type = TYPE_I;
+ }
+ | L
+ {
+ cmd_type = TYPE_L;
+ cmd_bytesz = NBBY;
+ }
+ | L SP byte_size
+ {
+ cmd_type = TYPE_L;
+ cmd_bytesz = $3;
+ }
+ /* this is for a bug in the BBN ftp */
+ | L byte_size
+ {
+ cmd_type = TYPE_L;
+ cmd_bytesz = $2;
+ }
+ ;
+
+struct_code: F
+ {
+ $$ = STRU_F;
+ }
+ | R
+ {
+ $$ = STRU_R;
+ }
+ | P
+ {
+ $$ = STRU_P;
+ }
+ ;
+
+mode_code: S
+ {
+ $$ = MODE_S;
+ }
+ | B
+ {
+ $$ = MODE_B;
+ }
+ | C
+ {
+ $$ = MODE_C;
+ }
+ ;
+
+pathname: pathstring
+ {
+ /*
+ * Problem: this production is used for all pathname
+ * processing, but only gives a 550 error reply.
+ * This is a valid reply in some cases but not in others.
+ */
+ if (logged_in && $1 && strncmp((char *) $1, "~", 1) == 0) {
+ *(char **)&($$) = *glob((char *) $1);
+ if (globerr != 0) {
+ reply(550, globerr);
+ $$ = 0;
+ }
+ free((char *) $1);
+ } else
+ $$ = $1;
+ }
+ ;
+
+pathstring: STRING
+ ;
+
+octal_number: NUMBER
+ {
+ register int ret, dec, multby, digit;
+
+ /*
+ * Convert a number that was read as decimal number
+ * to what it would be if it had been read as octal.
+ */
+ dec = $1;
+ multby = 1;
+ ret = 0;
+ while (dec) {
+ digit = dec%10;
+ if (digit > 7) {
+ ret = -1;
+ break;
+ }
+ ret += digit * multby;
+ multby *= 8;
+ dec /= 10;
+ }
+ $$ = ret;
+ }
+ ;
+
+check_login: /* empty */
+ {
+ if (logged_in)
+ $$ = 1;
+ else {
+ reply(530, "Please login with USER and PASS.");
+ $$ = 0;
+ }
+ }
+ ;
+
+%%
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+extern jmp_buf errcatch;
+
+static void upper(char *);
+
+#define CMD 0 /* beginning of command */
+#define ARGS 1 /* expect miscellaneous arguments */
+#define STR1 2 /* expect SP followed by STRING */
+#define STR2 3 /* expect STRING */
+#define OSTR 4 /* optional SP then STRING */
+#define ZSTR1 5 /* SP then optional STRING */
+#define ZSTR2 6 /* optional STRING after SP */
+#define SITECMD 7 /* SITE command */
+#define NSTR 8 /* Number followed by a string */
+
+struct tab cmdtab[] = { /* In order defined in RFC 765 */
+ { "USER", USER, STR1, 1, "<sp> username" },
+ { "PASS", PASS, ZSTR1, 1, "<sp> password" },
+ { "ACCT", ACCT, STR1, 0, "(specify account)" },
+ { "SMNT", SMNT, ARGS, 0, "(structure mount)" },
+ { "REIN", REIN, ARGS, 0, "(reinitialize server state)" },
+ { "QUIT", QUIT, ARGS, 1, "(terminate service)", },
+ { "PORT", PORT, ARGS, 1, "<sp> b0, b1, b2, b3, b4" },
+ { "PASV", PASV, ARGS, 1, "(set server in passive mode)" },
+ { "TYPE", TYPE, ARGS, 1, "<sp> [ A | E | I | L ]" },
+ { "STRU", STRU, ARGS, 1, "(specify file structure)" },
+ { "MODE", MODE, ARGS, 1, "(specify transfer mode)" },
+ { "RETR", RETR, STR1, 1, "<sp> file-name" },
+ { "STOR", STOR, STR1, 1, "<sp> file-name" },
+ { "APPE", APPE, STR1, 1, "<sp> file-name" },
+ { "MLFL", MLFL, OSTR, 0, "(mail file)" },
+ { "MAIL", MAIL, OSTR, 0, "(mail to user)" },
+ { "MSND", MSND, OSTR, 0, "(mail send to terminal)" },
+ { "MSOM", MSOM, OSTR, 0, "(mail send to terminal or mailbox)" },
+ { "MSAM", MSAM, OSTR, 0, "(mail send to terminal and mailbox)" },
+ { "MRSQ", MRSQ, OSTR, 0, "(mail recipient scheme question)" },
+ { "MRCP", MRCP, STR1, 0, "(mail recipient)" },
+ { "ALLO", ALLO, ARGS, 1, "allocate storage (vacuously)" },
+ { "REST", REST, ARGS, 0, "(restart command)" },
+ { "RNFR", RNFR, STR1, 1, "<sp> file-name" },
+ { "RNTO", RNTO, STR1, 1, "<sp> file-name" },
+ { "ABOR", ABOR, ARGS, 1, "(abort operation)" },
+ { "DELE", DELE, STR1, 1, "<sp> file-name" },
+ { "CWD", CWD, OSTR, 1, "[ <sp> directory-name ]" },
+ { "XCWD", CWD, OSTR, 1, "[ <sp> directory-name ]" },
+ { "LIST", LIST, OSTR, 1, "[ <sp> path-name ]" },
+ { "NLST", NLST, OSTR, 1, "[ <sp> path-name ]" },
+ { "SITE", SITE, SITECMD, 1, "site-cmd [ <sp> arguments ]" },
+ { "SYST", SYST, ARGS, 1, "(get type of operating system)" },
+ { "STAT", STAT, OSTR, 1, "[ <sp> path-name ]" },
+ { "HELP", HELP, OSTR, 1, "[ <sp> <string> ]" },
+ { "NOOP", NOOP, ARGS, 1, "" },
+ { "MKD", MKD, STR1, 1, "<sp> path-name" },
+ { "XMKD", MKD, STR1, 1, "<sp> path-name" },
+ { "RMD", RMD, STR1, 1, "<sp> path-name" },
+ { "XRMD", RMD, STR1, 1, "<sp> path-name" },
+ { "PWD", PWD, ARGS, 1, "(return current directory)" },
+ { "XPWD", PWD, ARGS, 1, "(return current directory)" },
+ { "CDUP", CDUP, ARGS, 1, "(change to parent directory)" },
+ { "XCUP", CDUP, ARGS, 1, "(change to parent directory)" },
+ { "STOU", STOU, STR1, 1, "<sp> file-name" },
+ { "SIZE", SIZE, OSTR, 1, "<sp> path-name" },
+ { "MDTM", MDTM, OSTR, 1, "<sp> path-name" },
+ { 0, 0, 0, 0, 0 }
+};
+
+struct tab sitetab[] = {
+ { "UMASK", UMASK, ARGS, 1, "[ <sp> umask ]" },
+ { "IDLE", IDLE, ARGS, 1, "[ <sp> maximum-idle-time ]" },
+ { "CHMOD", CHMOD, NSTR, 1, "<sp> mode <sp> file-name" },
+ { "HELP", HELP, OSTR, 1, "[ <sp> <string> ]" },
+ { 0, 0, 0, 0, 0 }
+};
+
+static struct tab *
+lookup(struct tab *p, char *cmd)
+{
+
+ for (; p->name != 0; p++)
+ if (strcmp(cmd, p->name) == 0)
+ return (p);
+ return (0);
+}
+
+#include <arpa/telnet.h>
+
+/*
+ * get_line - a hacked up version of fgets to ignore TELNET escape codes.
+ */
+static char *
+get_line(char *s, int n, FILE *iop)
+{
+ register int c;
+ register char *cs;
+
+ cs = s;
+/* tmpline may contain saved command from urgent mode interruption */
+ for (c = 0; tmpline[c] != '\0' && --n > 0; ++c) {
+ *cs++ = tmpline[c];
+ if (tmpline[c] == '\n') {
+ *cs = '\0';
+ if (debug)
+ syslog(LOG_DEBUG, "command: %s", s);
+ tmpline[0] = '\0';
+ return(s);
+ }
+ if (c == 0)
+ tmpline[0] = '\0';
+ }
+ while ((c = getc(iop)) != EOF) {
+ c &= 0377;
+ if (c == IAC) {
+ if ((c = getc(iop)) != EOF) {
+ c &= 0377;
+ switch (c) {
+ case WILL:
+ case WONT:
+ c = getc(iop);
+ printf("%c%c%c", IAC, DONT, 0377&c);
+ (void) fflush(stdout);
+ continue;
+ case DO:
+ case DONT:
+ c = getc(iop);
+ printf("%c%c%c", IAC, WONT, 0377&c);
+ (void) fflush(stdout);
+ continue;
+ case IAC:
+ break;
+ default:
+ continue; /* ignore command */
+ }
+ }
+ }
+ *cs++ = c;
+ if (--n <= 0 || c == '\n')
+ break;
+ }
+ if (c == EOF && cs == s)
+ return (0);
+ *cs = '\0';
+ if (debug)
+ syslog(LOG_DEBUG, "command: %s", s);
+ return (s);
+}
+
+static void
+toolong(int sig)
+{
+ time_t now;
+
+ (void) sig;
+ reply(421,
+ "Timeout (%d seconds): closing control connection.", timeout);
+ (void) time(&now);
+ if (logging) {
+ syslog(LOG_INFO,
+ "User %s timed out after %d seconds at %s",
+ (pw ? pw -> pw_name : "unknown"), timeout, ctime(&now));
+ }
+ dologout(1);
+}
+
+int
+yylex(void)
+{
+ static int cpos, state;
+ register char *cp, *cp2;
+ register struct tab *p;
+ int n;
+ char c;
+
+ for (;;) {
+ switch (state) {
+
+ case CMD:
+ (void) signal(SIGALRM, toolong);
+ (void) alarm((unsigned) timeout);
+ if (get_line(cbuf, sizeof(cbuf)-1, stdin) == 0) {
+ reply(221, "You could at least say goodbye.");
+ dologout(0);
+ }
+ (void) alarm(0);
+#ifdef SETPROCTITLE
+ if (strncasecmp(cbuf, "PASS", 4) != 0)
+ setproctitle("%s: %s", proctitle, cbuf);
+#endif /* SETPROCTITLE */
+ if ((cp = strchr(cbuf, '\r'))) {
+ *cp++ = '\n';
+ *cp = '\0';
+ }
+ if ((cp = strpbrk(cbuf, " \n")))
+ cpos = cp - cbuf;
+ if (cpos == 0)
+ cpos = 4;
+ c = cbuf[cpos];
+ cbuf[cpos] = '\0';
+ upper(cbuf);
+ p = lookup(cmdtab, cbuf);
+ cbuf[cpos] = c;
+ if (p != 0) {
+ if (p->implemented == 0) {
+ nack(p->name);
+ longjmp(errcatch,0);
+ /* NOTREACHED */
+ }
+ state = p->state;
+ *(const char **)(&yylval) = p->name;
+ return (p->token);
+ }
+ break;
+
+ case SITECMD:
+ if (cbuf[cpos] == ' ') {
+ cpos++;
+ return (SP);
+ }
+ cp = &cbuf[cpos];
+ if ((cp2 = strpbrk(cp, " \n")))
+ cpos = cp2 - cbuf;
+ c = cbuf[cpos];
+ cbuf[cpos] = '\0';
+ upper(cp);
+ p = lookup(sitetab, cp);
+ cbuf[cpos] = c;
+ if (p != 0) {
+ if (p->implemented == 0) {
+ state = CMD;
+ nack(p->name);
+ longjmp(errcatch,0);
+ /* NOTREACHED */
+ }
+ state = p->state;
+ *(const char **)(&yylval) = p->name;
+ return (p->token);
+ }
+ state = CMD;
+ break;
+
+ case OSTR:
+ if (cbuf[cpos] == '\n') {
+ state = CMD;
+ return (CRLF);
+ }
+ /* FALLTHROUGH */
+
+ case STR1:
+ case ZSTR1:
+ dostr1:
+ if (cbuf[cpos] == ' ') {
+ cpos++;
+ if (state == OSTR)
+ state = STR2;
+ else
+ ++state;
+ return (SP);
+ }
+ break;
+
+ case ZSTR2:
+ if (cbuf[cpos] == '\n') {
+ state = CMD;
+ return (CRLF);
+ }
+ /* FALLTHROUGH */
+
+ case STR2:
+ cp = &cbuf[cpos];
+ n = strlen(cp);
+ cpos += n - 1;
+ /*
+ * Make sure the string is nonempty and \n terminated.
+ */
+ if (n > 1 && cbuf[cpos] == '\n') {
+ cbuf[cpos] = '\0';
+ *(char **)&yylval = copy(cp);
+ cbuf[cpos] = '\n';
+ state = ARGS;
+ return (STRING);
+ }
+ break;
+
+ case NSTR:
+ if (cbuf[cpos] == ' ') {
+ cpos++;
+ return (SP);
+ }
+ if (isdigit(cbuf[cpos])) {
+ cp = &cbuf[cpos];
+ while (isdigit(cbuf[++cpos]))
+ ;
+ c = cbuf[cpos];
+ cbuf[cpos] = '\0';
+ yylval = atoi(cp);
+ cbuf[cpos] = c;
+ state = STR1;
+ return (NUMBER);
+ }
+ state = STR1;
+ goto dostr1;
+
+ case ARGS:
+ if (isdigit(cbuf[cpos])) {
+ cp = &cbuf[cpos];
+ while (isdigit(cbuf[++cpos]))
+ ;
+ c = cbuf[cpos];
+ cbuf[cpos] = '\0';
+ yylval = atoi(cp);
+ cbuf[cpos] = c;
+ return (NUMBER);
+ }
+ switch (cbuf[cpos++]) {
+
+ case '\n':
+ state = CMD;
+ return (CRLF);
+
+ case ' ':
+ return (SP);
+
+ case ',':
+ return (COMMA);
+
+ case 'A':
+ case 'a':
+ return (A);
+
+ case 'B':
+ case 'b':
+ return (B);
+
+ case 'C':
+ case 'c':
+ return (C);
+
+ case 'E':
+ case 'e':
+ return (E);
+
+ case 'F':
+ case 'f':
+ return (F);
+
+ case 'I':
+ case 'i':
+ return (I);
+
+ case 'L':
+ case 'l':
+ return (L);
+
+ case 'N':
+ case 'n':
+ return (N);
+
+ case 'P':
+ case 'p':
+ return (P);
+
+ case 'R':
+ case 'r':
+ return (R);
+
+ case 'S':
+ case 's':
+ return (S);
+
+ case 'T':
+ case 't':
+ return (T);
+
+ }
+ break;
+
+ default:
+ fatal("Unknown state in scanner.");
+ }
+ yyerror((char *) 0);
+ state = CMD;
+ longjmp(errcatch,0);
+ }
+}
+
+static void
+upper(char *s)
+{
+ while (*s != '\0') {
+ if (islower(*s))
+ *s = toupper(*s);
+ s++;
+ }
+}
+
+static char *
+copy(const char *s)
+{
+ char *p;
+
+ p = (char * )malloc(strlen(s) + 1);
+ if (p == 0)
+ fatal("Ran out of memory.");
+ else
+ (void) strcpy(p, s);
+ return (p);
+}
+
+static void
+help(struct tab *ctab, char *s)
+{
+ register struct tab *c;
+ register int width, NCMDS;
+ const char *help_type;
+
+ if (ctab == sitetab)
+ help_type = "SITE ";
+ else
+ help_type = "";
+ width = 0, NCMDS = 0;
+ for (c = ctab; c->name != 0; c++) {
+ int len = strlen(c->name);
+
+ if (len > width)
+ width = len;
+ NCMDS++;
+ }
+ width = (width + 8) &~ 7;
+ if (s == 0) {
+ register int i, j, w;
+ int columns, lines;
+
+ lreply(214, "The following %scommands are recognized %s.",
+ help_type, "(* =>'s unimplemented)");
+ columns = 76 / width;
+ if (columns == 0)
+ columns = 1;
+ lines = (NCMDS + columns - 1) / columns;
+ for (i = 0; i < lines; i++) {
+ printf(" ");
+ for (j = 0; j < columns; j++) {
+ c = ctab + j * lines + i;
+ assert(c->name != 0);
+ printf("%s%c", c->name,
+ c->implemented ? ' ' : '*');
+ if (c + lines >= &ctab[NCMDS])
+ break;
+ w = strlen(c->name) + 1;
+ while (w < width) {
+ putchar(' ');
+ w++;
+ }
+ }
+ printf("\r\n");
+ }
+ (void) fflush(stdout);
+ reply(214, "Direct comments to ftp-bugs@%s.", hostname);
+ return;
+ }
+ upper(s);
+ c = lookup(ctab, s);
+ if (c == (struct tab *)0) {
+ reply(502, "Unknown command %s.", s);
+ return;
+ }
+ if (c->implemented)
+ reply(214, "Syntax: %s%s %s", help_type, c->name, c->help);
+ else
+ reply(214, "%s%-*s\t%s; unimplemented.", help_type, width,
+ c->name, c->help);
+}
+
+static void
+sizecmd(char *filename)
+{
+ switch (type) {
+ case TYPE_L:
+ case TYPE_I: {
+ struct stat stbuf;
+ if (stat(filename, &stbuf) < 0 ||
+ (stbuf.st_mode&S_IFMT) != S_IFREG)
+ reply(550, "%s: not a plain file.", filename);
+ else
+#ifdef HAVE_LONG_LONG
+ reply(213, "%llu", (long long) stbuf.st_size);
+#else
+ reply(213, "%lu", stbuf.st_size);
+#endif
+ break;}
+ case TYPE_A: {
+ FILE *fin;
+ register int c, count;
+ struct stat stbuf;
+ fin = fopen(filename, "r");
+ if (fin == 0) {
+ perror_reply(550, filename);
+ return;
+ }
+ if (fstat(fileno(fin), &stbuf) < 0 ||
+ (stbuf.st_mode&S_IFMT) != S_IFREG) {
+ reply(550, "%s: not a plain file.", filename);
+ (void) fclose(fin);
+ return;
+ }
+
+ count = 0;
+ while((c=getc(fin)) != EOF) {
+ if (c == '\n') /* will get expanded to \r\n */
+ count++;
+ count++;
+ }
+ (void) fclose(fin);
+
+ reply(213, "%ld", count);
+ break;}
+ default:
+ reply(504, "SIZE not implemented for Type %c.", "?AEIL"[type]);
+ }
+}
diff --git a/tools/regression/usr.bin/yacc/grammar.y b/tools/regression/usr.bin/yacc/grammar.y
new file mode 100644
index 000000000000..675552268370
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/grammar.y
@@ -0,0 +1,1183 @@
+/* $Id: grammar.y,v 1.5 2012/01/15 20:00:59 tom Exp $
+ *
+ * yacc grammar for C function prototype generator
+ * This was derived from the grammar in Appendix A of
+ * "The C Programming Language" by Kernighan and Ritchie.
+ */
+%expect 1
+%{
+#ifdef YYBISON
+#include <stdlib.h>
+#define YYSTYPE_IS_DECLARED
+#define yyerror yaccError
+#endif
+
+#if defined(YYBISON) || !defined(YYBYACC)
+static void yyerror(const char *s);
+#endif
+%}
+
+%token <text> '(' '*' '&'
+ /* identifiers that are not reserved words */
+ T_IDENTIFIER T_TYPEDEF_NAME T_DEFINE_NAME
+
+ /* storage class */
+ T_AUTO T_EXTERN T_REGISTER T_STATIC T_TYPEDEF
+ /* This keyword included for compatibility with C++. */
+ T_INLINE
+ /* This keyword included for compatibility with GCC */
+ T_EXTENSION
+
+ /* type specifiers */
+ T_CHAR T_DOUBLE T_FLOAT T_INT T_VOID
+ T_LONG T_SHORT T_SIGNED T_UNSIGNED
+ T_ENUM T_STRUCT T_UNION
+ /* C9X new types */
+ T_Bool T_Complex T_Imaginary
+
+ /* type qualifiers */
+ T_TYPE_QUALIFIER
+
+ /* paired square brackets and everything between them: [ ... ] */
+ T_BRACKETS
+
+%token
+ /* left brace */
+ T_LBRACE
+ /* all input to the matching right brace */
+ T_MATCHRBRACE
+
+ /* three periods */
+ T_ELLIPSIS
+
+ /* constant expression or paired braces following an equal sign */
+ T_INITIALIZER
+
+ /* string literal */
+ T_STRING_LITERAL
+
+ /* asm */
+ T_ASM
+ /* ( "string literal" ) following asm keyword */
+ T_ASMARG
+
+ /* va_dcl from <varargs.h> */
+ T_VA_DCL
+
+%type <decl_spec> decl_specifiers decl_specifier
+%type <decl_spec> storage_class type_specifier type_qualifier
+%type <decl_spec> struct_or_union_specifier enum_specifier
+%type <decl_list> init_declarator_list
+%type <declarator> init_declarator declarator direct_declarator
+%type <declarator> abs_declarator direct_abs_declarator
+%type <param_list> parameter_type_list parameter_list
+%type <parameter> parameter_declaration
+%type <param_list> opt_identifier_list identifier_list
+%type <text> struct_or_union pointer opt_type_qualifiers type_qualifier_list
+ any_id identifier_or_ref
+%type <text> enumeration
+
+%{
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+#define OPT_LINTLIBRARY 1
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+/* #include "cproto.h" */
+#define MAX_TEXT_SIZE 1024
+
+/* Prototype styles */
+#if OPT_LINTLIBRARY
+#define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */
+#define PROTO_LINTLIBRARY -1 /* form lint-library source */
+#endif
+#define PROTO_NONE 0 /* do not output any prototypes */
+#define PROTO_TRADITIONAL 1 /* comment out parameters */
+#define PROTO_ABSTRACT 2 /* comment out parameter names */
+#define PROTO_ANSI 3 /* ANSI C prototype */
+
+typedef int PrototypeStyle;
+
+typedef char boolean;
+
+extern boolean types_out;
+extern PrototypeStyle proto_style;
+
+#define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB)
+#define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY)
+#define lintLibrary() (knrLintLibrary() || ansiLintLibrary())
+
+#if OPT_LINTLIBRARY
+#define FUNC_UNKNOWN -1 /* unspecified */
+#else
+#define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */
+#endif
+#define FUNC_NONE 0 /* not a function definition */
+#define FUNC_TRADITIONAL 1 /* traditional style */
+#define FUNC_ANSI 2 /* ANSI style */
+#define FUNC_BOTH 3 /* both styles */
+
+typedef int FuncDefStyle;
+
+/* Source file text */
+typedef struct text {
+ char text[MAX_TEXT_SIZE]; /* source text */
+ long begin; /* offset in temporary file */
+} Text;
+
+/* Declaration specifier flags */
+#define DS_NONE 0 /* default */
+#define DS_EXTERN 1 /* contains "extern" specifier */
+#define DS_STATIC 2 /* contains "static" specifier */
+#define DS_CHAR 4 /* contains "char" type specifier */
+#define DS_SHORT 8 /* contains "short" type specifier */
+#define DS_FLOAT 16 /* contains "float" type specifier */
+#define DS_INLINE 32 /* contains "inline" specifier */
+#define DS_JUNK 64 /* we're not interested in this declaration */
+
+/* This structure stores information about a declaration specifier. */
+typedef struct decl_spec {
+ unsigned short flags; /* flags defined above */
+ char *text; /* source text */
+ long begin; /* offset in temporary file */
+} DeclSpec;
+
+/* This is a list of function parameters. */
+typedef struct _ParameterList {
+ struct parameter *first; /* pointer to first parameter in list */
+ struct parameter *last; /* pointer to last parameter in list */
+ long begin_comment; /* begin offset of comment */
+ long end_comment; /* end offset of comment */
+ char *comment; /* comment at start of parameter list */
+} ParameterList;
+
+/* This structure stores information about a declarator. */
+typedef struct _Declarator {
+ char *name; /* name of variable or function */
+ char *text; /* source text */
+ long begin; /* offset in temporary file */
+ long begin_comment; /* begin offset of comment */
+ long end_comment; /* end offset of comment */
+ FuncDefStyle func_def; /* style of function definition */
+ ParameterList params; /* function parameters */
+ boolean pointer; /* TRUE if it declares a pointer */
+ struct _Declarator *head; /* head function declarator */
+ struct _Declarator *func_stack; /* stack of function declarators */
+ struct _Declarator *next; /* next declarator in list */
+} Declarator;
+
+/* This structure stores information about a function parameter. */
+typedef struct parameter {
+ struct parameter *next; /* next parameter in list */
+ DeclSpec decl_spec;
+ Declarator *declarator;
+ char *comment; /* comment following the parameter */
+} Parameter;
+
+/* This is a list of declarators. */
+typedef struct declarator_list {
+ Declarator *first; /* pointer to first declarator in list */
+ Declarator *last; /* pointer to last declarator in list */
+} DeclaratorList;
+
+/* #include "symbol.h" */
+typedef struct symbol {
+ struct symbol *next; /* next symbol in list */
+ char *name; /* name of symbol */
+ char *value; /* value of symbol (for defines) */
+ short flags; /* symbol attributes */
+} Symbol;
+
+/* parser stack entry type */
+typedef union {
+ Text text;
+ DeclSpec decl_spec;
+ Parameter *parameter;
+ ParameterList param_list;
+ Declarator *declarator;
+ DeclaratorList decl_list;
+} YYSTYPE;
+
+/* The hash table length should be a prime number. */
+#define SYM_MAX_HASH 251
+
+typedef struct symbol_table {
+ Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */
+} SymbolTable;
+
+extern SymbolTable *new_symbol_table /* Create symbol table */
+ (void);
+extern void free_symbol_table /* Destroy symbol table */
+ (SymbolTable *s);
+extern Symbol *find_symbol /* Lookup symbol name */
+ (SymbolTable *s, const char *n);
+extern Symbol *new_symbol /* Define new symbol */
+ (SymbolTable *s, const char *n, const char *v, int f);
+
+/* #include "semantic.h" */
+extern void new_decl_spec (DeclSpec *, const char *, long, int);
+extern void free_decl_spec (DeclSpec *);
+extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *);
+extern void check_untagged (DeclSpec *);
+extern Declarator *new_declarator (const char *, const char *, long);
+extern void free_declarator (Declarator *);
+extern void new_decl_list (DeclaratorList *, Declarator *);
+extern void free_decl_list (DeclaratorList *);
+extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *);
+extern Parameter *new_parameter (DeclSpec *, Declarator *);
+extern void free_parameter (Parameter *);
+extern void new_param_list (ParameterList *, Parameter *);
+extern void free_param_list (ParameterList *);
+extern void add_param_list (ParameterList *, ParameterList *, Parameter *);
+extern void new_ident_list (ParameterList *);
+extern void add_ident_list (ParameterList *, ParameterList *, const char *);
+extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *);
+extern void gen_declarations (DeclSpec *, DeclaratorList *);
+extern void gen_prototype (DeclSpec *, Declarator *);
+extern void gen_func_declarator (Declarator *);
+extern void gen_func_definition (DeclSpec *, Declarator *);
+
+extern void init_parser (void);
+extern void process_file (FILE *infile, char *name);
+extern char *cur_text (void);
+extern char *cur_file_name (void);
+extern char *implied_typedef (void);
+extern void include_file (char *name, int convert);
+extern char *supply_parm (int count);
+extern char *xstrdup (const char *);
+extern int already_declared (char *name);
+extern int is_actual_func (Declarator *d);
+extern int lint_ellipsis (Parameter *p);
+extern int want_typedef (void);
+extern void begin_tracking (void);
+extern void begin_typedef (void);
+extern void copy_typedef (char *s);
+extern void ellipsis_varargs (Declarator *d);
+extern void end_typedef (void);
+extern void flush_varargs (void);
+extern void fmt_library (int code);
+extern void imply_typedef (const char *s);
+extern void indent (FILE *outf);
+extern void put_blankline (FILE *outf);
+extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator);
+extern void put_char (FILE *outf, int c);
+extern void put_error (void);
+extern void put_newline (FILE *outf);
+extern void put_padded (FILE *outf, const char *s);
+extern void put_string (FILE *outf, const char *s);
+extern void track_in (void);
+
+extern boolean file_comments;
+extern FuncDefStyle func_style;
+extern char base_file[];
+
+extern int yylex (void);
+
+/* declaration specifier attributes for the typedef statement currently being
+ * scanned
+ */
+static int cur_decl_spec_flags;
+
+/* pointer to parameter list for the current function definition */
+static ParameterList *func_params;
+
+/* A parser semantic action sets this pointer to the current declarator in
+ * a function parameter declaration in order to catch any comments following
+ * the parameter declaration on the same line. If the lexer scans a comment
+ * and <cur_declarator> is not NULL, then the comment is attached to the
+ * declarator. To ignore subsequent comments, the lexer sets this to NULL
+ * after scanning a comment or end of line.
+ */
+static Declarator *cur_declarator;
+
+/* temporary string buffer */
+static char buf[MAX_TEXT_SIZE];
+
+/* table of typedef names */
+static SymbolTable *typedef_names;
+
+/* table of define names */
+static SymbolTable *define_names;
+
+/* table of type qualifiers */
+static SymbolTable *type_qualifiers;
+
+/* information about the current input file */
+typedef struct {
+ char *base_name; /* base input file name */
+ char *file_name; /* current file name */
+ FILE *file; /* input file */
+ unsigned line_num; /* current line number in input file */
+ FILE *tmp_file; /* temporary file */
+ long begin_comment; /* tmp file offset after last written ) or ; */
+ long end_comment; /* tmp file offset after last comment */
+ boolean convert; /* if TRUE, convert function definitions */
+ boolean changed; /* TRUE if conversion done in this file */
+} IncludeStack;
+
+static IncludeStack *cur_file; /* current input file */
+
+/* #include "yyerror.c" */
+
+static int haveAnsiParam (void);
+
+
+/* Flags to enable us to find if a procedure returns a value.
+ */
+static int return_val; /* nonzero on BRACES iff return-expression found */
+
+static const char *
+dft_decl_spec (void)
+{
+ return (lintLibrary() && !return_val) ? "void" : "int";
+}
+
+static int
+haveAnsiParam (void)
+{
+ Parameter *p;
+ if (func_params != 0) {
+ for (p = func_params->first; p != 0; p = p->next) {
+ if (p->declarator->func_def == FUNC_ANSI) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+%}
+%%
+
+program
+ : /* empty */
+ | translation_unit
+ ;
+
+translation_unit
+ : external_declaration
+ | translation_unit external_declaration
+ ;
+
+external_declaration
+ : declaration
+ | function_definition
+ | ';'
+ | linkage_specification
+ | T_ASM T_ASMARG ';'
+ | error T_MATCHRBRACE
+ {
+ yyerrok;
+ }
+ | error ';'
+ {
+ yyerrok;
+ }
+ ;
+
+braces
+ : T_LBRACE T_MATCHRBRACE
+ ;
+
+linkage_specification
+ : T_EXTERN T_STRING_LITERAL braces
+ {
+ /* Provide an empty action here so bison will not complain about
+ * incompatible types in the default action it normally would
+ * have generated.
+ */
+ }
+ | T_EXTERN T_STRING_LITERAL declaration
+ {
+ /* empty */
+ }
+ ;
+
+declaration
+ : decl_specifiers ';'
+ {
+#if OPT_LINTLIBRARY
+ if (types_out && want_typedef()) {
+ gen_declarations(&$1, (DeclaratorList *)0);
+ flush_varargs();
+ }
+#endif
+ free_decl_spec(&$1);
+ end_typedef();
+ }
+ | decl_specifiers init_declarator_list ';'
+ {
+ if (func_params != NULL) {
+ set_param_types(func_params, &$1, &$2);
+ } else {
+ gen_declarations(&$1, &$2);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_list(&$2);
+ }
+ free_decl_spec(&$1);
+ end_typedef();
+ }
+ | any_typedef decl_specifiers
+ {
+ cur_decl_spec_flags = $2.flags;
+ free_decl_spec(&$2);
+ }
+ opt_declarator_list ';'
+ {
+ end_typedef();
+ }
+ ;
+
+any_typedef
+ : T_EXTENSION T_TYPEDEF
+ {
+ begin_typedef();
+ }
+ | T_TYPEDEF
+ {
+ begin_typedef();
+ }
+ ;
+
+opt_declarator_list
+ : /* empty */
+ | declarator_list
+ ;
+
+declarator_list
+ : declarator
+ {
+ int flags = cur_decl_spec_flags;
+
+ /* If the typedef is a pointer type, then reset the short type
+ * flags so it does not get promoted.
+ */
+ if (strcmp($1->text, $1->name) != 0)
+ flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
+ new_symbol(typedef_names, $1->name, NULL, flags);
+ free_declarator($1);
+ }
+ | declarator_list ',' declarator
+ {
+ int flags = cur_decl_spec_flags;
+
+ if (strcmp($3->text, $3->name) != 0)
+ flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
+ new_symbol(typedef_names, $3->name, NULL, flags);
+ free_declarator($3);
+ }
+ ;
+
+function_definition
+ : decl_specifiers declarator
+ {
+ check_untagged(&$1);
+ if ($2->func_def == FUNC_NONE) {
+ yyerror("syntax error");
+ YYERROR;
+ }
+ func_params = &($2->head->params);
+ func_params->begin_comment = cur_file->begin_comment;
+ func_params->end_comment = cur_file->end_comment;
+ }
+ opt_declaration_list T_LBRACE
+ {
+ /* If we're converting to K&R and we've got a nominally K&R
+ * function which has a parameter which is ANSI (i.e., a prototyped
+ * function pointer), then we must override the deciphered value of
+ * 'func_def' so that the parameter will be converted.
+ */
+ if (func_style == FUNC_TRADITIONAL
+ && haveAnsiParam()
+ && $2->head->func_def == func_style) {
+ $2->head->func_def = FUNC_BOTH;
+ }
+
+ func_params = NULL;
+
+ if (cur_file->convert)
+ gen_func_definition(&$1, $2);
+ gen_prototype(&$1, $2);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_spec(&$1);
+ free_declarator($2);
+ }
+ T_MATCHRBRACE
+ | declarator
+ {
+ if ($1->func_def == FUNC_NONE) {
+ yyerror("syntax error");
+ YYERROR;
+ }
+ func_params = &($1->head->params);
+ func_params->begin_comment = cur_file->begin_comment;
+ func_params->end_comment = cur_file->end_comment;
+ }
+ opt_declaration_list T_LBRACE T_MATCHRBRACE
+ {
+ DeclSpec decl_spec;
+
+ func_params = NULL;
+
+ new_decl_spec(&decl_spec, dft_decl_spec(), $1->begin, DS_NONE);
+ if (cur_file->convert)
+ gen_func_definition(&decl_spec, $1);
+ gen_prototype(&decl_spec, $1);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_spec(&decl_spec);
+ free_declarator($1);
+ }
+ ;
+
+opt_declaration_list
+ : /* empty */
+ | T_VA_DCL
+ | declaration_list
+ ;
+
+declaration_list
+ : declaration
+ | declaration_list declaration
+ ;
+
+decl_specifiers
+ : decl_specifier
+ | decl_specifiers decl_specifier
+ {
+ join_decl_specs(&$$, &$1, &$2);
+ free($1.text);
+ free($2.text);
+ }
+ ;
+
+decl_specifier
+ : storage_class
+ | type_specifier
+ | type_qualifier
+ ;
+
+storage_class
+ : T_AUTO
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_EXTERN
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_EXTERN);
+ }
+ | T_REGISTER
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_STATIC
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_STATIC);
+ }
+ | T_INLINE
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_INLINE);
+ }
+ | T_EXTENSION
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_JUNK);
+ }
+ ;
+
+type_specifier
+ : T_CHAR
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_CHAR);
+ }
+ | T_DOUBLE
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_FLOAT
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_FLOAT);
+ }
+ | T_INT
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_LONG
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_SHORT
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_SHORT);
+ }
+ | T_SIGNED
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_UNSIGNED
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_VOID
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_Bool
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_CHAR);
+ }
+ | T_Complex
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_Imaginary
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_TYPEDEF_NAME
+ {
+ Symbol *s;
+ s = find_symbol(typedef_names, $1.text);
+ if (s != NULL)
+ new_decl_spec(&$$, $1.text, $1.begin, s->flags);
+ }
+ | struct_or_union_specifier
+ | enum_specifier
+ ;
+
+type_qualifier
+ : T_TYPE_QUALIFIER
+ {
+ new_decl_spec(&$$, $1.text, $1.begin, DS_NONE);
+ }
+ | T_DEFINE_NAME
+ {
+ /* This rule allows the <pointer> nonterminal to scan #define
+ * names as if they were type modifiers.
+ */
+ Symbol *s;
+ s = find_symbol(define_names, $1.text);
+ if (s != NULL)
+ new_decl_spec(&$$, $1.text, $1.begin, s->flags);
+ }
+ ;
+
+struct_or_union_specifier
+ : struct_or_union any_id braces
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s %s", $1.text, $2.text);
+ new_decl_spec(&$$, s, $1.begin, DS_NONE);
+ }
+ | struct_or_union braces
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s {}", $1.text);
+ new_decl_spec(&$$, s, $1.begin, DS_NONE);
+ }
+ | struct_or_union any_id
+ {
+ (void)sprintf(buf, "%s %s", $1.text, $2.text);
+ new_decl_spec(&$$, buf, $1.begin, DS_NONE);
+ }
+ ;
+
+struct_or_union
+ : T_STRUCT
+ {
+ imply_typedef($$.text);
+ }
+ | T_UNION
+ {
+ imply_typedef($$.text);
+ }
+ ;
+
+init_declarator_list
+ : init_declarator
+ {
+ new_decl_list(&$$, $1);
+ }
+ | init_declarator_list ',' init_declarator
+ {
+ add_decl_list(&$$, &$1, $3);
+ }
+ ;
+
+init_declarator
+ : declarator
+ {
+ if ($1->func_def != FUNC_NONE && func_params == NULL &&
+ func_style == FUNC_TRADITIONAL && cur_file->convert) {
+ gen_func_declarator($1);
+ fputs(cur_text(), cur_file->tmp_file);
+ }
+ cur_declarator = $$;
+ }
+ | declarator '='
+ {
+ if ($1->func_def != FUNC_NONE && func_params == NULL &&
+ func_style == FUNC_TRADITIONAL && cur_file->convert) {
+ gen_func_declarator($1);
+ fputs(" =", cur_file->tmp_file);
+ }
+ }
+ T_INITIALIZER
+ ;
+
+enum_specifier
+ : enumeration any_id braces
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "enum %s", $2.text);
+ new_decl_spec(&$$, s, $1.begin, DS_NONE);
+ }
+ | enumeration braces
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s {}", $1.text);
+ new_decl_spec(&$$, s, $1.begin, DS_NONE);
+ }
+ | enumeration any_id
+ {
+ (void)sprintf(buf, "enum %s", $2.text);
+ new_decl_spec(&$$, buf, $1.begin, DS_NONE);
+ }
+ ;
+
+enumeration
+ : T_ENUM
+ {
+ imply_typedef("enum");
+ $$ = $1;
+ }
+ ;
+
+any_id
+ : T_IDENTIFIER
+ | T_TYPEDEF_NAME
+ ;
+
+declarator
+ : pointer direct_declarator
+ {
+ $$ = $2;
+ (void)sprintf(buf, "%s%s", $1.text, $$->text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ $$->begin = $1.begin;
+ $$->pointer = TRUE;
+ }
+ | direct_declarator
+ ;
+
+direct_declarator
+ : identifier_or_ref
+ {
+ $$ = new_declarator($1.text, $1.text, $1.begin);
+ }
+ | '(' declarator ')'
+ {
+ $$ = $2;
+ (void)sprintf(buf, "(%s)", $$->text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ $$->begin = $1.begin;
+ }
+ | direct_declarator T_BRACKETS
+ {
+ $$ = $1;
+ (void)sprintf(buf, "%s%s", $$->text, $2.text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ }
+ | direct_declarator '(' parameter_type_list ')'
+ {
+ $$ = new_declarator("%s()", $1->name, $1->begin);
+ $$->params = $3;
+ $$->func_stack = $1;
+ $$->head = ($1->func_stack == NULL) ? $$ : $1->head;
+ $$->func_def = FUNC_ANSI;
+ }
+ | direct_declarator '(' opt_identifier_list ')'
+ {
+ $$ = new_declarator("%s()", $1->name, $1->begin);
+ $$->params = $3;
+ $$->func_stack = $1;
+ $$->head = ($1->func_stack == NULL) ? $$ : $1->head;
+ $$->func_def = FUNC_TRADITIONAL;
+ }
+ ;
+
+pointer
+ : '*' opt_type_qualifiers
+ {
+ (void)sprintf($$.text, "*%s", $2.text);
+ $$.begin = $1.begin;
+ }
+ | '*' opt_type_qualifiers pointer
+ {
+ (void)sprintf($$.text, "*%s%s", $2.text, $3.text);
+ $$.begin = $1.begin;
+ }
+ ;
+
+opt_type_qualifiers
+ : /* empty */
+ {
+ strcpy($$.text, "");
+ $$.begin = 0L;
+ }
+ | type_qualifier_list
+ ;
+
+type_qualifier_list
+ : type_qualifier
+ {
+ (void)sprintf($$.text, "%s ", $1.text);
+ $$.begin = $1.begin;
+ free($1.text);
+ }
+ | type_qualifier_list type_qualifier
+ {
+ (void)sprintf($$.text, "%s%s ", $1.text, $2.text);
+ $$.begin = $1.begin;
+ free($2.text);
+ }
+ ;
+
+parameter_type_list
+ : parameter_list
+ | parameter_list ',' T_ELLIPSIS
+ {
+ add_ident_list(&$$, &$1, "...");
+ }
+ ;
+
+parameter_list
+ : parameter_declaration
+ {
+ new_param_list(&$$, $1);
+ }
+ | parameter_list ',' parameter_declaration
+ {
+ add_param_list(&$$, &$1, $3);
+ }
+ ;
+
+parameter_declaration
+ : decl_specifiers declarator
+ {
+ check_untagged(&$1);
+ $$ = new_parameter(&$1, $2);
+ }
+ | decl_specifiers abs_declarator
+ {
+ check_untagged(&$1);
+ $$ = new_parameter(&$1, $2);
+ }
+ | decl_specifiers
+ {
+ check_untagged(&$1);
+ $$ = new_parameter(&$1, (Declarator *)0);
+ }
+ ;
+
+opt_identifier_list
+ : /* empty */
+ {
+ new_ident_list(&$$);
+ }
+ | identifier_list
+ ;
+
+identifier_list
+ : any_id
+ {
+ new_ident_list(&$$);
+ add_ident_list(&$$, &$$, $1.text);
+ }
+ | identifier_list ',' any_id
+ {
+ add_ident_list(&$$, &$1, $3.text);
+ }
+ ;
+
+identifier_or_ref
+ : any_id
+ {
+ $$ = $1;
+ }
+ | '&' any_id
+ {
+#if OPT_LINTLIBRARY
+ if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */
+ $$ = $2;
+ } else
+#endif
+ (void)sprintf($$.text, "&%s", $2.text);
+ $$.begin = $1.begin;
+ }
+ ;
+
+abs_declarator
+ : pointer
+ {
+ $$ = new_declarator($1.text, "", $1.begin);
+ }
+ | pointer direct_abs_declarator
+ {
+ $$ = $2;
+ (void)sprintf(buf, "%s%s", $1.text, $$->text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ $$->begin = $1.begin;
+ }
+ | direct_abs_declarator
+ ;
+
+direct_abs_declarator
+ : '(' abs_declarator ')'
+ {
+ $$ = $2;
+ (void)sprintf(buf, "(%s)", $$->text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ $$->begin = $1.begin;
+ }
+ | direct_abs_declarator T_BRACKETS
+ {
+ $$ = $1;
+ (void)sprintf(buf, "%s%s", $$->text, $2.text);
+ free($$->text);
+ $$->text = xstrdup(buf);
+ }
+ | T_BRACKETS
+ {
+ $$ = new_declarator($1.text, "", $1.begin);
+ }
+ | direct_abs_declarator '(' parameter_type_list ')'
+ {
+ $$ = new_declarator("%s()", "", $1->begin);
+ $$->params = $3;
+ $$->func_stack = $1;
+ $$->head = ($1->func_stack == NULL) ? $$ : $1->head;
+ $$->func_def = FUNC_ANSI;
+ }
+ | direct_abs_declarator '(' ')'
+ {
+ $$ = new_declarator("%s()", "", $1->begin);
+ $$->func_stack = $1;
+ $$->head = ($1->func_stack == NULL) ? $$ : $1->head;
+ $$->func_def = FUNC_ANSI;
+ }
+ | '(' parameter_type_list ')'
+ {
+ Declarator *d;
+
+ d = new_declarator("", "", $1.begin);
+ $$ = new_declarator("%s()", "", $1.begin);
+ $$->params = $2;
+ $$->func_stack = d;
+ $$->head = $$;
+ $$->func_def = FUNC_ANSI;
+ }
+ | '(' ')'
+ {
+ Declarator *d;
+
+ d = new_declarator("", "", $1.begin);
+ $$ = new_declarator("%s()", "", $1.begin);
+ $$->func_stack = d;
+ $$->head = $$;
+ $$->func_def = FUNC_ANSI;
+ }
+ ;
+
+%%
+
+/* lex.yy.c */
+#define BEGIN yy_start = 1 + 2 *
+
+#define CPP1 1
+#define INIT1 2
+#define INIT2 3
+#define CURLY 4
+#define LEXYACC 5
+#define ASM 6
+#define CPP_INLINE 7
+
+extern char *yytext;
+extern FILE *yyin, *yyout;
+
+static int curly; /* number of curly brace nesting levels */
+static int ly_count; /* number of occurances of %% */
+static int inc_depth; /* include nesting level */
+static SymbolTable *included_files; /* files already included */
+static int yy_start = 0; /* start state number */
+
+#define grammar_error(s) yaccError(s)
+
+static void
+yaccError (const char *msg)
+{
+ func_params = NULL;
+ put_error(); /* tell what line we're on, and what file */
+ fprintf(stderr, "%s at token '%s'\n", msg, yytext);
+}
+
+/* Initialize the table of type qualifier keywords recognized by the lexical
+ * analyzer.
+ */
+void
+init_parser (void)
+{
+ static const char *keywords[] = {
+ "const",
+ "restrict",
+ "volatile",
+ "interrupt",
+#ifdef vms
+ "noshare",
+ "readonly",
+#endif
+#if defined(MSDOS) || defined(OS2)
+ "__cdecl",
+ "__export",
+ "__far",
+ "__fastcall",
+ "__fortran",
+ "__huge",
+ "__inline",
+ "__interrupt",
+ "__loadds",
+ "__near",
+ "__pascal",
+ "__saveregs",
+ "__segment",
+ "__stdcall",
+ "__syscall",
+ "_cdecl",
+ "_cs",
+ "_ds",
+ "_es",
+ "_export",
+ "_far",
+ "_fastcall",
+ "_fortran",
+ "_huge",
+ "_interrupt",
+ "_loadds",
+ "_near",
+ "_pascal",
+ "_saveregs",
+ "_seg",
+ "_segment",
+ "_ss",
+ "cdecl",
+ "far",
+ "huge",
+ "near",
+ "pascal",
+#ifdef OS2
+ "__far16",
+#endif
+#endif
+#ifdef __GNUC__
+ /* gcc aliases */
+ "__builtin_va_arg",
+ "__builtin_va_list",
+ "__const",
+ "__const__",
+ "__inline",
+ "__inline__",
+ "__restrict",
+ "__restrict__",
+ "__volatile",
+ "__volatile__",
+#endif
+ };
+ unsigned i;
+
+ /* Initialize type qualifier table. */
+ type_qualifiers = new_symbol_table();
+ for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) {
+ new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE);
+ }
+}
+
+/* Process the C source file. Write function prototypes to the standard
+ * output. Convert function definitions and write the converted source
+ * code to a temporary file.
+ */
+void
+process_file (FILE *infile, char *name)
+{
+ char *s;
+
+ if (strlen(name) > 2) {
+ s = name + strlen(name) - 2;
+ if (*s == '.') {
+ ++s;
+ if (*s == 'l' || *s == 'y')
+ BEGIN LEXYACC;
+#if defined(MSDOS) || defined(OS2)
+ if (*s == 'L' || *s == 'Y')
+ BEGIN LEXYACC;
+#endif
+ }
+ }
+
+ included_files = new_symbol_table();
+ typedef_names = new_symbol_table();
+ define_names = new_symbol_table();
+ inc_depth = -1;
+ curly = 0;
+ ly_count = 0;
+ func_params = NULL;
+ yyin = infile;
+ include_file(strcpy(base_file, name), func_style != FUNC_NONE);
+ if (file_comments) {
+#if OPT_LINTLIBRARY
+ if (lintLibrary()) {
+ put_blankline(stdout);
+ begin_tracking();
+ }
+#endif
+ put_string(stdout, "/* ");
+ put_string(stdout, cur_file_name());
+ put_string(stdout, " */\n");
+ }
+ yyparse();
+ free_symbol_table(define_names);
+ free_symbol_table(typedef_names);
+ free_symbol_table(included_files);
+}
+
+#ifdef NO_LEAKS
+void
+free_parser(void)
+{
+ free_symbol_table (type_qualifiers);
+#ifdef FLEX_SCANNER
+ if (yy_current_buffer != 0)
+ yy_delete_buffer(yy_current_buffer);
+#endif
+}
+#endif
diff --git a/tools/regression/usr.bin/yacc/pure_calc.y b/tools/regression/usr.bin/yacc/pure_calc.y
new file mode 100644
index 000000000000..3cd04332dcdd
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/pure_calc.y
@@ -0,0 +1,116 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM &yylval
+#define YYLEX_DECL() yylex(YYSTYPE *yylval)
+#define YYERROR_DECL() yyerror(const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+%}
+
+%start list
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr '+' expr
+ { $$ = $1 + $3; }
+ | expr '-' expr
+ { $$ = $1 - $3; }
+ | expr '*' expr
+ { $$ = $1 * $3; }
+ | expr '/' expr
+ { $$ = $1 / $3; }
+ | expr '%' expr
+ { $$ = $1 % $3; }
+ | expr '&' expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | '-' expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+#ifdef YYBYACC
+static int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ *yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ *yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/tools/regression/usr.bin/yacc/pure_error.y b/tools/regression/usr.bin/yacc/pure_error.y
new file mode 100644
index 000000000000..fe7a3c3094f2
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/pure_error.y
@@ -0,0 +1,41 @@
+%{
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM &yylval
+#define YYLEX_DECL() yylex(YYSTYPE *yylval)
+#define YYERROR_DECL() yyerror(const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+%}
+
+%%
+S: error
+%%
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(YYSTYPE *value)
+{
+ return value ? 0 : -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
diff --git a/tools/regression/usr.bin/yacc/quote_calc.y b/tools/regression/usr.bin/yacc/quote_calc.y
new file mode 100644
index 000000000000..9304dd8a7006
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/quote_calc.y
@@ -0,0 +1,112 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+%}
+
+%start list
+
+%token OP_ADD "ADD"
+%token OP_SUB "SUB"
+%token OP_MUL "MUL"
+%token OP_DIV "DIV"
+%token OP_MOD "MOD"
+%token OP_AND "AND"
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr OP_ADD expr
+ { $$ = $1 + $3; }
+ | expr OP_SUB expr
+ { $$ = $1 - $3; }
+ | expr OP_MUL expr
+ { $$ = $1 * $3; }
+ | expr OP_DIV expr
+ { $$ = $1 / $3; }
+ | expr OP_MOD expr
+ { $$ = $1 % $3; }
+ | expr OP_AND expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | OP_SUB expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/tools/regression/usr.bin/yacc/quote_calc2.y b/tools/regression/usr.bin/yacc/quote_calc2.y
new file mode 100644
index 000000000000..ab72a285fcb5
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/quote_calc2.y
@@ -0,0 +1,112 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+%}
+
+%start list
+
+%token OP_ADD "ADD"
+%token OP_SUB "SUB"
+%token OP_MUL "MUL"
+%token OP_DIV "DIV"
+%token OP_MOD "MOD"
+%token OP_AND "AND"
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr "ADD" expr
+ { $$ = $1 + $3; }
+ | expr "SUB" expr
+ { $$ = $1 - $3; }
+ | expr "MUL" expr
+ { $$ = $1 * $3; }
+ | expr "DIV" expr
+ { $$ = $1 / $3; }
+ | expr "MOD" expr
+ { $$ = $1 % $3; }
+ | expr "AND" expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | "SUB" expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/tools/regression/usr.bin/yacc/quote_calc3.y b/tools/regression/usr.bin/yacc/quote_calc3.y
new file mode 100644
index 000000000000..5feeb4a03ed6
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/quote_calc3.y
@@ -0,0 +1,112 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+%}
+
+%start list
+
+%token OP_ADD "ADD-operator"
+%token OP_SUB "SUB-operator"
+%token OP_MUL "MUL-operator"
+%token OP_DIV "DIV-operator"
+%token OP_MOD "MOD-operator"
+%token OP_AND "AND-operator"
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr OP_ADD expr
+ { $$ = $1 + $3; }
+ | expr OP_SUB expr
+ { $$ = $1 - $3; }
+ | expr OP_MUL expr
+ { $$ = $1 * $3; }
+ | expr OP_DIV expr
+ { $$ = $1 / $3; }
+ | expr OP_MOD expr
+ { $$ = $1 % $3; }
+ | expr OP_AND expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | OP_SUB expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/tools/regression/usr.bin/yacc/quote_calc4.y b/tools/regression/usr.bin/yacc/quote_calc4.y
new file mode 100644
index 000000000000..34b790e67f12
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/quote_calc4.y
@@ -0,0 +1,112 @@
+%{
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+%}
+
+%start list
+
+%token OP_ADD "ADD-operator"
+%token OP_SUB "SUB-operator"
+%token OP_MUL "MUL-operator"
+%token OP_DIV "DIV-operator"
+%token OP_MOD "MOD-operator"
+%token OP_AND "AND-operator"
+
+%token DIGIT LETTER
+
+%left '|'
+%left '&'
+%left '+' '-'
+%left '*' '/' '%'
+%left UMINUS /* supplies precedence for unary minus */
+
+%% /* beginning of rules section */
+
+list : /* empty */
+ | list stat '\n'
+ | list error '\n'
+ { yyerrok ; }
+ ;
+
+stat : expr
+ { printf("%d\n",$1);}
+ | LETTER '=' expr
+ { regs[$1] = $3; }
+ ;
+
+expr : '(' expr ')'
+ { $$ = $2; }
+ | expr "ADD-operator" expr
+ { $$ = $1 + $3; }
+ | expr "SUB-operator" expr
+ { $$ = $1 - $3; }
+ | expr "MUL-operator" expr
+ { $$ = $1 * $3; }
+ | expr "DIV-operator" expr
+ { $$ = $1 / $3; }
+ | expr "MOD-operator" expr
+ { $$ = $1 % $3; }
+ | expr "AND-operator" expr
+ { $$ = $1 & $3; }
+ | expr '|' expr
+ { $$ = $1 | $3; }
+ | "SUB-operator" expr %prec UMINUS
+ { $$ = - $2; }
+ | LETTER
+ { $$ = regs[$1]; }
+ | number
+ ;
+
+number: DIGIT
+ { $$ = $1; base = ($1==0) ? 8 : 10; }
+ | number DIGIT
+ { $$ = base * $1 + $2; }
+ ;
+
+%% /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
diff --git a/tools/regression/usr.bin/yacc/regress.00.out b/tools/regression/usr.bin/yacc/regress.00.out
new file mode 100644
index 000000000000..f78562775d96
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.00.out
@@ -0,0 +1,390 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0,
+};
+static const short yylen[] = { 2,
+ 0,
+};
+static const short yydefred[] = { 1,
+ 0,
+};
+static const short yydgoto[] = { 1,
+};
+static const short yysindex[] = { 0,
+ 0,
+};
+static const short yyrindex[] = { 0,
+ 0,
+};
+static const short yygindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const short yytable[] = { 0,
+};
+static const short yycheck[] = { -1,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 0
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",
+};
+static const char *yyrule[] = {
+"$accept : rule",
+"rule :",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.01.out b/tools/regression/usr.bin/yacc/regress.01.out
new file mode 100644
index 000000000000..cc4845e1702d
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.01.out
@@ -0,0 +1,593 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+#line 28 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short yylen[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short yydefred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const short yydgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short yysindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const short yyrindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const short yygindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const short yytable[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 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, 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, 2, 3, 4, 3, 12,
+};
+static const short yycheck[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 66 "calc.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 266 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 28 "calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 32 "calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 34 "calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 38 "calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 40 "calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 42 "calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 44 "calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 46 "calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 48 "calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 50 "calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 52 "calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 54 "calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 56 "calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 61 "calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 63 "calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 532 "/dev/stdout"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.02.out b/tools/regression/usr.bin/yacc/regress.02.out
new file mode 100644
index 000000000000..c0e7a75b356a
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.02.out
@@ -0,0 +1,835 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "calc1.y"
+
+/* http://dinosaur.compilertools.net/yacc/index.html */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <math.h>
+
+typedef struct interval
+{
+ double lo, hi;
+}
+INTERVAL;
+
+INTERVAL vmul(double, double, INTERVAL);
+INTERVAL vdiv(double, double, INTERVAL);
+
+extern int yylex(void);
+static void yyerror(const char *s);
+
+int dcheck(INTERVAL);
+
+double dreg[26];
+INTERVAL vreg[26];
+
+#line 31 "calc1.y"
+#ifdef YYSTYPE
+#undef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+#endif
+#ifndef YYSTYPE_IS_DECLARED
+#define YYSTYPE_IS_DECLARED 1
+typedef union
+{
+ int ival;
+ double dval;
+ INTERVAL vval;
+} YYSTYPE;
+#endif /* !YYSTYPE_IS_DECLARED */
+#line 58 "/dev/stdout"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DREG 257
+#define VREG 258
+#define CONST 259
+#define UMINUS 260
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 3, 3, 0, 0, 0, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+};
+static const short yylen[] = { 2,
+ 0, 2, 2, 2, 4, 4, 2, 1, 1, 3,
+ 3, 3, 3, 2, 3, 1, 5, 1, 3, 3,
+ 3, 3, 3, 3, 3, 3, 2, 3,
+};
+static const short yydefred[] = { 0,
+ 0, 0, 0, 8, 0, 0, 0, 0, 0, 7,
+ 0, 0, 9, 18, 14, 27, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,
+ 0, 0, 0, 15, 0, 28, 0, 0, 0, 0,
+ 12, 24, 13, 26, 0, 0, 23, 25, 14, 0,
+ 0, 0, 0, 0, 5, 6, 0, 0, 0, 12,
+ 13, 17,
+};
+static const short yydgoto[] = { 7,
+ 32, 9, 0,
+};
+static const short yysindex[] = { -40,
+ -8, -48, -47, 0, -37, -37, 0, 2, 17, 0,
+ -34, -37, 0, 0, 0, 0, -25, 90, -37, -37,
+ -37, -37, 0, -37, -37, -37, -37, 0, -34, -34,
+ 25, 125, 31, 0, -34, 0, -11, 37, -11, 37,
+ 0, 0, 0, 0, 37, 37, 0, 0, 0, 111,
+ -34, -34, -34, -34, 0, 0, 118, 69, 69, 0,
+ 0, 0,
+};
+static const short yyrindex[] = { 0,
+ 0, 38, 44, 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, -9, 0, 0, 0, 0, 51, -3, 56, 61,
+ 0, 0, 0, 0, 67, 72, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 78, 83, 0,
+ 0, 0,
+};
+static const short yygindex[] = { 0,
+ 4, 124, 0,
+};
+#define YYTABLESIZE 225
+static const short yytable[] = { 6,
+ 16, 10, 6, 8, 5, 30, 20, 5, 15, 17,
+ 29, 23, 11, 12, 31, 34, 21, 19, 35, 20,
+ 0, 22, 37, 39, 41, 43, 28, 0, 0, 0,
+ 21, 16, 49, 50, 55, 22, 0, 20, 57, 20,
+ 56, 20, 0, 21, 19, 0, 20, 9, 22, 0,
+ 0, 0, 0, 18, 58, 59, 60, 61, 26, 24,
+ 10, 25, 0, 27, 0, 11, 53, 51, 0, 52,
+ 22, 54, 26, 24, 0, 25, 19, 27, 26, 9,
+ 9, 21, 9, 27, 9, 18, 18, 10, 18, 0,
+ 18, 10, 11, 10, 10, 10, 11, 0, 11, 11,
+ 11, 22, 0, 22, 0, 22, 0, 19, 0, 19,
+ 53, 19, 21, 0, 21, 54, 21, 0, 10, 0,
+ 10, 0, 10, 11, 0, 11, 0, 11, 16, 18,
+ 36, 26, 24, 0, 25, 33, 27, 0, 0, 0,
+ 0, 0, 38, 40, 42, 44, 0, 45, 46, 47,
+ 48, 34, 53, 51, 0, 52, 0, 54, 62, 53,
+ 51, 0, 52, 0, 54, 0, 21, 19, 0, 20,
+ 0, 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, 0,
+ 0, 0, 0, 0, 0, 1, 2, 3, 4, 13,
+ 14, 4, 13, 0, 4,
+};
+static const short yycheck[] = { 40,
+ 10, 10, 40, 0, 45, 40, 10, 45, 5, 6,
+ 45, 10, 61, 61, 11, 41, 42, 43, 44, 45,
+ -1, 47, 19, 20, 21, 22, 10, -1, -1, -1,
+ 42, 41, 29, 30, 10, 47, -1, 41, 35, 43,
+ 10, 45, -1, 42, 43, -1, 45, 10, 47, -1,
+ -1, -1, -1, 10, 51, 52, 53, 54, 42, 43,
+ 10, 45, -1, 47, -1, 10, 42, 43, -1, 45,
+ 10, 47, 42, 43, -1, 45, 10, 47, 42, 42,
+ 43, 10, 45, 47, 47, 42, 43, 10, 45, -1,
+ 47, 41, 10, 43, 44, 45, 41, -1, 43, 44,
+ 45, 41, -1, 43, -1, 45, -1, 41, -1, 43,
+ 42, 45, 41, -1, 43, 47, 45, -1, 41, -1,
+ 43, -1, 45, 41, -1, 43, -1, 45, 5, 6,
+ 41, 42, 43, -1, 45, 12, 47, -1, -1, -1,
+ -1, -1, 19, 20, 21, 22, -1, 24, 25, 26,
+ 27, 41, 42, 43, -1, 45, -1, 47, 41, 42,
+ 43, -1, 45, -1, 47, -1, 42, 43, -1, 45,
+ -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 259, 257,
+ 258, 259, 257, -1, 259,
+};
+#define YYFINAL 7
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 260
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,
+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,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,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,
+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,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,0,0,
+0,0,"DREG","VREG","CONST","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : line",
+"lines :",
+"lines : lines line",
+"line : dexp '\\n'",
+"line : vexp '\\n'",
+"line : DREG '=' dexp '\\n'",
+"line : VREG '=' vexp '\\n'",
+"line : error '\\n'",
+"dexp : CONST",
+"dexp : DREG",
+"dexp : dexp '+' dexp",
+"dexp : dexp '-' dexp",
+"dexp : dexp '*' dexp",
+"dexp : dexp '/' dexp",
+"dexp : '-' dexp",
+"dexp : '(' dexp ')'",
+"vexp : dexp",
+"vexp : '(' dexp ',' dexp ')'",
+"vexp : VREG",
+"vexp : vexp '+' vexp",
+"vexp : dexp '+' vexp",
+"vexp : vexp '-' vexp",
+"vexp : dexp '-' vexp",
+"vexp : vexp '*' vexp",
+"vexp : dexp '*' vexp",
+"vexp : vexp '/' vexp",
+"vexp : dexp '/' vexp",
+"vexp : '-' vexp",
+"vexp : '(' vexp ')'",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 176 "calc1.y"
+ /* beginning of subroutines section */
+
+#define BSZ 50 /* buffer size for floating point numbers */
+
+ /* lexical analysis */
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ int c;
+
+ while ((c = getchar()) == ' ')
+ { /* skip over blanks */
+ }
+
+ if (isupper(c))
+ {
+ yylval.ival = c - 'A';
+ return (VREG);
+ }
+ if (islower(c))
+ {
+ yylval.ival = c - 'a';
+ return (DREG);
+ }
+
+ if (isdigit(c) || c == '.')
+ {
+ /* gobble up digits, points, exponents */
+ char buf[BSZ + 1], *cp = buf;
+ int dot = 0, expr = 0;
+
+ for (; (cp - buf) < BSZ; ++cp, c = getchar())
+ {
+
+ *cp = c;
+ if (isdigit(c))
+ continue;
+ if (c == '.')
+ {
+ if (dot++ || expr)
+ return ('.'); /* will cause syntax error */
+ continue;
+ }
+
+ if (c == 'e')
+ {
+ if (expr++)
+ return ('e'); /* will cause syntax error */
+ continue;
+ }
+
+ /* end of number */
+ break;
+ }
+ *cp = '\0';
+
+ if ((cp - buf) >= BSZ)
+ printf("constant too long: truncated\n");
+ else
+ ungetc(c, stdin); /* push back last char read */
+ yylval.dval = atof(buf);
+ return (CONST);
+ }
+ return (c);
+}
+
+static INTERVAL
+hilo(double a, double b, double c, double d)
+{
+ /* returns the smallest interval containing a, b, c, and d */
+ /* used by *, / routines */
+ INTERVAL v;
+
+ if (a > b)
+ {
+ v.hi = a;
+ v.lo = b;
+ }
+ else
+ {
+ v.hi = b;
+ v.lo = a;
+ }
+
+ if (c > d)
+ {
+ if (c > v.hi)
+ v.hi = c;
+ if (d < v.lo)
+ v.lo = d;
+ }
+ else
+ {
+ if (d > v.hi)
+ v.hi = d;
+ if (c < v.lo)
+ v.lo = c;
+ }
+ return (v);
+}
+
+INTERVAL
+vmul(double a, double b, INTERVAL v)
+{
+ return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
+}
+
+int
+dcheck(INTERVAL v)
+{
+ if (v.hi >= 0. && v.lo <= 0.)
+ {
+ printf("divisor interval contains 0.\n");
+ return (1);
+ }
+ return (0);
+}
+
+INTERVAL
+vdiv(double a, double b, INTERVAL v)
+{
+ return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
+}
+#line 405 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 57 "calc1.y"
+ {
+ (void) printf("%15.8f\n", yystack.l_mark[-1].dval);
+ }
+break;
+case 4:
+#line 61 "calc1.y"
+ {
+ (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
+ }
+break;
+case 5:
+#line 65 "calc1.y"
+ {
+ dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
+ }
+break;
+case 6:
+#line 69 "calc1.y"
+ {
+ vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
+ }
+break;
+case 7:
+#line 73 "calc1.y"
+ {
+ yyerrok;
+ }
+break;
+case 9:
+#line 80 "calc1.y"
+ {
+ yyval.dval = dreg[yystack.l_mark[0].ival];
+ }
+break;
+case 10:
+#line 84 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
+ }
+break;
+case 11:
+#line 88 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
+ }
+break;
+case 12:
+#line 92 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
+ }
+break;
+case 13:
+#line 96 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
+ }
+break;
+case 14:
+#line 100 "calc1.y"
+ {
+ yyval.dval = -yystack.l_mark[0].dval;
+ }
+break;
+case 15:
+#line 104 "calc1.y"
+ {
+ yyval.dval = yystack.l_mark[-1].dval;
+ }
+break;
+case 16:
+#line 110 "calc1.y"
+ {
+ yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
+ }
+break;
+case 17:
+#line 114 "calc1.y"
+ {
+ yyval.vval.lo = yystack.l_mark[-3].dval;
+ yyval.vval.hi = yystack.l_mark[-1].dval;
+ if ( yyval.vval.lo > yyval.vval.hi )
+ {
+ (void) printf("interval out of order\n");
+ YYERROR;
+ }
+ }
+break;
+case 18:
+#line 124 "calc1.y"
+ {
+ yyval.vval = vreg[yystack.l_mark[0].ival];
+ }
+break;
+case 19:
+#line 128 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
+ yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
+ }
+break;
+case 20:
+#line 133 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
+ yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
+ }
+break;
+case 21:
+#line 138 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
+ }
+break;
+case 22:
+#line 143 "calc1.y"
+ {
+ yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
+ }
+break;
+case 23:
+#line 148 "calc1.y"
+ {
+ yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
+ }
+break;
+case 24:
+#line 152 "calc1.y"
+ {
+ yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
+ }
+break;
+case 25:
+#line 156 "calc1.y"
+ {
+ if (dcheck(yystack.l_mark[0].vval)) YYERROR;
+ yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
+ }
+break;
+case 26:
+#line 161 "calc1.y"
+ {
+ if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
+ yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
+ }
+break;
+case 27:
+#line 166 "calc1.y"
+ {
+ yyval.vval.hi = -yystack.l_mark[0].vval.lo;
+ yyval.vval.lo = -yystack.l_mark[0].vval.hi;
+ }
+break;
+case 28:
+#line 171 "calc1.y"
+ {
+ yyval.vval = yystack.l_mark[-1].vval;
+ }
+break;
+#line 774 "/dev/stdout"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.03.out b/tools/regression/usr.bin/yacc/regress.03.out
new file mode 100644
index 000000000000..55ed6aefd463
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.03.out
@@ -0,0 +1,607 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 1
+
+#line 9 "calc3.y"
+# include <stdio.h>
+# include <ctype.h>
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM base
+#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
+#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 31 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(int regs[26], int * base)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# ifdef YYLEX_PARAM_TYPE
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
+# else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
+# endif
+# define YYLEX yylex(&yylval, YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(YYSTYPE *yylval, int * base)
+# define YYLEX yylex(&yylval, base)
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(regs, base, msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short yylen[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short yydefred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const short yydgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short yysindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const short yyrindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const short yygindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const short yytable[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 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, 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, 2, 3, 4, 3, 12,
+};
+static const short yycheck[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+#line 76 "calc3.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ int regs[26];
+ int base = 10;
+
+ while(!feof(stdin)) {
+ yyparse(regs, &base);
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ *yylval = (c - 'a');
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ *yylval = (c - '0') % (*base);
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 273 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yyerrflag;
+ int yychar;
+ YYSTYPE yyval;
+ YYSTYPE yylval;
+
+ /* variables for the parser stack */
+ YYSTACKDATA yystack;
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror(regs, base, "syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 38 "calc3.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 42 "calc3.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 44 "calc3.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 48 "calc3.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 50 "calc3.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 52 "calc3.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 54 "calc3.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 56 "calc3.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 58 "calc3.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 60 "calc3.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 62 "calc3.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 64 "calc3.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 66 "calc3.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 71 "calc3.y"
+ { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 73 "calc3.y"
+ { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 546 "/dev/stdout"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror(regs, base, "yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.04.out b/tools/regression/usr.bin/yacc/regress.04.out
new file mode 100644
index 000000000000..d9a20060e67a
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.04.out
@@ -0,0 +1,599 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "code_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *s);
+#endif
+
+#line 30 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short yylen[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short yydefred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const short yydgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short yysindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const short yyrindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const short yygindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const short yytable[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 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, 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, 2, 3, 4, 3, 12,
+};
+static const short yycheck[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 68 "code_calc.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void)
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 272 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 30 "code_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 34 "code_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 36 "code_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 40 "code_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 42 "code_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 44 "code_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 46 "code_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 48 "code_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 50 "code_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 52 "code_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 54 "code_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 56 "code_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 58 "code_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 63 "code_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 65 "code_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 538 "/dev/stdout"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.05.out b/tools/regression/usr.bin/yacc/regress.05.out
new file mode 100644
index 000000000000..3f643db55873
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.05.out
@@ -0,0 +1,429 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "code_error.y"
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *);
+#endif
+
+#line 25 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0,
+};
+static const short yylen[] = { 2,
+ 1,
+};
+static const short yydefred[] = { 0,
+ 1, 0,
+};
+static const short yydgoto[] = { 2,
+};
+static const short yysindex[] = { -256,
+ 0, 0,
+};
+static const short yyrindex[] = { 0,
+ 0, 0,
+};
+static const short yygindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const short yytable[] = { 1,
+};
+static const short yycheck[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 0
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",
+};
+static const char *yyrule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 12 "code_error.y"
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 163 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.06.out b/tools/regression/usr.bin/yacc/regress.06.out
new file mode 100644
index 000000000000..1dc80eb49b53
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.06.out
@@ -0,0 +1,421 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "error.y"
+int yylex(void);
+static void yyerror(const char *);
+#line 21 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0,
+};
+static const short yylen[] = { 2,
+ 1,
+};
+static const short yydefred[] = { 0,
+ 1, 0,
+};
+static const short yydgoto[] = { 2,
+};
+static const short yysindex[] = { -256,
+ 0, 0,
+};
+static const short yyrindex[] = { 0,
+ 0, 0,
+};
+static const short yygindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const short yytable[] = { 1,
+};
+static const short yycheck[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 0
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",
+};
+static const char *yyrule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 8 "error.y"
+
+#include <stdio.h>
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(void)
+{
+ return -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 155 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/usr.bin/yacc/test/ftp.tab.c b/tools/regression/usr.bin/yacc/regress.07.out
index b9758606fa13..de06e38caca9 100644
--- a/usr.bin/yacc/test/ftp.tab.c
+++ b/tools/regression/usr.bin/yacc/regress.07.out
@@ -1,28 +1,23 @@
#ifndef lint
-static char const yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
#endif
-#include <stdlib.h>
+
#define YYBYACC 1
#define YYMAJOR 1
#define YYMINOR 9
-#define YYLEX yylex()
-#define YYEMPTY -1
-#define yyclearin (yychar=(YYEMPTY))
-#define yyerrok (yyerrflag=0)
-#define YYRECOVERING (yyerrflag!=0)
-#if defined(c_plusplus) || defined(__cplusplus)
-#include <stdlib.h>
-#else
-extern char *getenv();
-extern void *realloc();
-#endif
-static int yygrowstack();
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
#define YYPREFIX "yy"
+
+#define YYPURE 0
+
#line 26 "ftp.y"
-#ifndef lint
-static char sccsid[] = "@(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89";
-#endif /* not lint */
+/* sccsid[] = "@(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89"; */
#include <sys/param.h>
#include <sys/socket.h>
@@ -31,6 +26,8 @@ static char sccsid[] = "@(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89";
#include <arpa/ftp.h>
+#include <stdlib.h>
+#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
@@ -38,7 +35,14 @@ static char sccsid[] = "@(#)ftpcmd.y 5.20.1.1 (Berkeley) 3/2/89";
#include <setjmp.h>
#include <syslog.h>
#include <sys/stat.h>
+#include <string.h>
#include <time.h>
+#include <assert.h>
+
+#ifdef YYBISON
+int yylex(void);
+static void yyerror(const char *);
+#endif
extern struct sockaddr_in data_dest;
extern int logged_in;
@@ -57,7 +61,30 @@ extern char *globerr;
extern int usedefault;
extern int transflag;
extern char tmpline[];
-char **glob();
+
+extern char **glob(char *);
+extern char *renamefrom(char *);
+extern void cwd(const char *);
+
+extern void dologout(int);
+extern void fatal(const char *);
+extern void makedir(const char *);
+extern void nack(const char *);
+extern void pass(const char *);
+extern void passive(void);
+extern void pwd(void);
+extern void removedir(char *);
+extern void renamecmd(char *, char *);
+extern void retrieve(const char *, const char *);
+extern void send_file_list(const char *);
+extern void statcmd(void);
+extern void statfilecmd(const char *);
+extern void store(char *, const char *, int);
+extern void user(const char *);
+
+extern void perror_reply(int, const char *, ...);
+extern void reply(int, const char *, ...);
+extern void lreply(int, const char *, ...);
static int cmd_type;
static int cmd_form;
@@ -65,8 +92,65 @@ static int cmd_bytesz;
char cbuf[512];
char *fromname;
-char *index();
-#line 70 "ftp.tab.c"
+struct tab {
+ const char *name;
+ short token;
+ short state;
+ short implemented; /* 1 if command is implemented */
+ const char *help;
+};
+
+static char * copy(const char *);
+
+#ifdef YYBISON
+static void sizecmd(char *filename);
+static void help(struct tab *ctab, char *s);
+struct tab cmdtab[];
+struct tab sitetab[];
+#endif
+
+static void
+yyerror(const char *msg)
+{
+ perror(msg);
+}
+#line 117 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
#define A 257
#define B 258
#define C 259
@@ -131,7 +215,7 @@ char *index();
#define CHMOD 318
#define LEXERR 319
#define YYERRCODE 256
-const short yylhs[] = { -1,
+static const short yylhs[] = { -1,
0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -141,7 +225,7 @@ const short yylhs[] = { -1,
6, 6, 6, 7, 7, 7, 8, 8, 8, 10,
14, 11, 9,
};
-const short yylen[] = { 2,
+static const short yylen[] = { 2,
0, 2, 2, 4, 4, 4, 2, 4, 4, 4,
4, 8, 5, 5, 5, 3, 5, 3, 5, 5,
2, 5, 4, 2, 3, 5, 2, 4, 2, 5,
@@ -151,7 +235,7 @@ const short yylen[] = { 2,
1, 3, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0,
};
-const short yydefred[] = { 1,
+static const short yydefred[] = { 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
73, 73, 73, 0, 73, 0, 0, 73, 73, 73,
73, 0, 0, 0, 0, 73, 73, 73, 73, 73,
@@ -173,11 +257,11 @@ const short yydefred[] = { 1,
0, 35, 72, 0, 40, 0, 0, 0, 37, 0,
0, 12, 0, 0, 38, 0, 0, 0, 52,
};
-const short yydgoto[] = { 1,
+static const short yydgoto[] = { 1,
34, 35, 71, 73, 75, 80, 84, 88, 45, 95,
184, 125, 157, 96,
};
-const short yysindex[] = { 0,
+static const short yysindex[] = { 0,
-224, -247, -239, -236, -232, -222, -204, -200, -181, -177,
0, 0, 0, -166, 0, -161, -199, 0, 0, 0,
0, -160, -159, -264, -158, 0, 0, 0, 0, 0,
@@ -199,7 +283,7 @@ const short yysindex[] = { 0,
-97, 0, 0, -95, 0, -96, -94, -92, 0, -152,
-93, 0, -91, -90, 0, -88, -87, -86, 0,
};
-const short yyrindex[] = { 0,
+static const short yyrindex[] = { 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -83, 0, 0, 0, 0, 0, 0, 0,
@@ -221,12 +305,12 @@ const short yyrindex[] = { 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
};
-const short yygindex[] = { 0,
+static const short yygindex[] = { 0,
0, 0, 0, 0, 0, 0, 0, 0, 16, -89,
-25, 35, 47, 0,
};
#define YYTABLESIZE 190
-const short yytable[] = { 129,
+static const short yytable[] = { 129,
130, 131, 104, 134, 59, 60, 76, 136, 137, 77,
138, 78, 79, 105, 106, 107, 98, 99, 146, 123,
148, 149, 36, 124, 150, 151, 152, 46, 47, 37,
@@ -247,7 +331,7 @@ const short yytable[] = { 129,
183, 185, 190, 187, 189, 188, 191, 192, 195, 194,
196, 0, 0, 198, 197, 73, 199, 49, 56, 58,
};
-const short yycheck[] = { 89,
+static const short yycheck[] = { 89,
90, 91, 305, 93, 269, 270, 257, 97, 98, 260,
100, 262, 263, 316, 317, 318, 269, 270, 108, 269,
110, 111, 270, 273, 114, 115, 116, 12, 13, 269,
@@ -271,12 +355,11 @@ const short yycheck[] = { 89,
#define YYFINAL 1
#ifndef YYDEBUG
#define YYDEBUG 0
-#elif YYDEBUG
-#include <stdio.h>
#endif
#define YYMAXTOKEN 319
#if YYDEBUG
-const char * const yyname[] = {
+static const char *yyname[] = {
+
"end-of-file",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,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,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,
@@ -290,7 +373,7 @@ const char * const yyname[] = {
"DELE","CWD","LIST","NLST","SITE","STAT","HELP","NOOP","MKD","RMD","PWD","CDUP",
"STOU","SMNT","SYST","SIZE","MDTM","UMASK","IDLE","CHMOD","LEXERR",
};
-const char * const yyrule[] = {
+static const char *yyrule[] = {
"$accept : cmd_list",
"cmd_list :",
"cmd_list : cmd_list cmd",
@@ -365,39 +448,53 @@ const char * const yyrule[] = {
"pathstring : STRING",
"octal_number : NUMBER",
"check_login :",
+
};
#endif
-#ifndef YYSTYPE
-typedef int YYSTYPE;
-#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
#ifdef YYSTACKSIZE
#undef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
+#define YYMAXDEPTH YYSTACKSIZE
#else
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
-#define YYSTACKSIZE 10000
-#define YYMAXDEPTH 10000
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
#endif
#endif
-#define YYINITSTACKSIZE 200
-int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
-YYSTYPE yylval;
-short *yyss;
-short *yysslim;
-YYSTYPE *yyvs;
-int yystacksize;
-#line 658 "ftp.y"
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 707 "ftp.y"
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
extern jmp_buf errcatch;
+static void upper(char *);
+
#define CMD 0 /* beginning of command */
#define ARGS 1 /* expect miscellaneous arguments */
#define STR1 2 /* expect SP followed by STRING */
@@ -408,14 +505,6 @@ extern jmp_buf errcatch;
#define SITECMD 7 /* SITE command */
#define NSTR 8 /* Number followed by a string */
-struct tab {
- char *name;
- short token;
- short state;
- short implemented; /* 1 if command is implemented */
- char *help;
-};
-
struct tab cmdtab[] = { /* In order defined in RFC 765 */
{ "USER", USER, STR1, 1, "<sp> username" },
{ "PASS", PASS, ZSTR1, 1, "<sp> password" },
@@ -464,7 +553,7 @@ struct tab cmdtab[] = { /* In order defined in RFC 765 */
{ "STOU", STOU, STR1, 1, "<sp> file-name" },
{ "SIZE", SIZE, OSTR, 1, "<sp> path-name" },
{ "MDTM", MDTM, OSTR, 1, "<sp> path-name" },
- { NULL, 0, 0, 0, 0 }
+ { 0, 0, 0, 0, 0 }
};
struct tab sitetab[] = {
@@ -472,16 +561,14 @@ struct tab sitetab[] = {
{ "IDLE", IDLE, ARGS, 1, "[ <sp> maximum-idle-time ]" },
{ "CHMOD", CHMOD, NSTR, 1, "<sp> mode <sp> file-name" },
{ "HELP", HELP, OSTR, 1, "[ <sp> <string> ]" },
- { NULL, 0, 0, 0, 0 }
+ { 0, 0, 0, 0, 0 }
};
-struct tab *
-lookup(p, cmd)
- register struct tab *p;
- char *cmd;
+static struct tab *
+lookup(struct tab *p, char *cmd)
{
- for (; p->name != NULL; p++)
+ for (; p->name != 0; p++)
if (strcmp(cmd, p->name) == 0)
return (p);
return (0);
@@ -490,14 +577,12 @@ lookup(p, cmd)
#include <arpa/telnet.h>
/*
- * getline - a hacked up version of fgets to ignore TELNET escape codes.
+ * get_line - a hacked up version of fgets to ignore TELNET escape codes.
*/
-char *
-getline(s, n, iop)
- char *s;
- register FILE *iop;
+static char *
+get_line(char *s, int n, FILE *iop)
{
- register c;
+ register int c;
register char *cs;
cs = s;
@@ -505,7 +590,7 @@ getline(s, n, iop)
for (c = 0; tmpline[c] != '\0' && --n > 0; ++c) {
*cs++ = tmpline[c];
if (tmpline[c] == '\n') {
- *cs++ = '\0';
+ *cs = '\0';
if (debug)
syslog(LOG_DEBUG, "command: %s", s);
tmpline[0] = '\0';
@@ -544,20 +629,19 @@ getline(s, n, iop)
break;
}
if (c == EOF && cs == s)
- return (NULL);
- *cs++ = '\0';
+ return (0);
+ *cs = '\0';
if (debug)
syslog(LOG_DEBUG, "command: %s", s);
return (s);
}
-static int
-toolong()
+static void
+toolong(int sig)
{
time_t now;
- extern char *ctime();
- extern time_t time();
+ (void) sig;
reply(421,
"Timeout (%d seconds): closing control connection.", timeout);
(void) time(&now);
@@ -569,14 +653,14 @@ toolong()
dologout(1);
}
-yylex()
+int
+yylex(void)
{
static int cpos, state;
register char *cp, *cp2;
register struct tab *p;
int n;
- char c, *strpbrk();
- char *copy();
+ char c;
for (;;) {
switch (state) {
@@ -584,16 +668,16 @@ yylex()
case CMD:
(void) signal(SIGALRM, toolong);
(void) alarm((unsigned) timeout);
- if (getline(cbuf, sizeof(cbuf)-1, stdin) == NULL) {
+ if (get_line(cbuf, sizeof(cbuf)-1, stdin) == 0) {
reply(221, "You could at least say goodbye.");
dologout(0);
}
(void) alarm(0);
#ifdef SETPROCTITLE
- if (strncasecmp(cbuf, "PASS", 4) != NULL)
+ if (strncasecmp(cbuf, "PASS", 4) != 0)
setproctitle("%s: %s", proctitle, cbuf);
#endif /* SETPROCTITLE */
- if ((cp = index(cbuf, '\r'))) {
+ if ((cp = strchr(cbuf, '\r'))) {
*cp++ = '\n';
*cp = '\0';
}
@@ -613,7 +697,7 @@ yylex()
/* NOTREACHED */
}
state = p->state;
- *(char **)&yylval = p->name;
+ *(const char **)(&yylval) = p->name;
return (p->token);
}
break;
@@ -639,7 +723,7 @@ yylex()
/* NOTREACHED */
}
state = p->state;
- *(char **)&yylval = p->name;
+ *(const char **)(&yylval) = p->name;
return (p->token);
}
state = CMD;
@@ -657,7 +741,10 @@ yylex()
dostr1:
if (cbuf[cpos] == ' ') {
cpos++;
- state = state == OSTR ? STR2 : ++state;
+ if (state == OSTR)
+ state = STR2;
+ else
+ ++state;
return (SP);
}
break;
@@ -787,8 +874,8 @@ yylex()
}
}
-upper(s)
- register char *s;
+static void
+upper(char *s)
{
while (*s != '\0') {
if (islower(*s))
@@ -797,34 +884,32 @@ upper(s)
}
}
-char *
-copy(s)
- char *s;
+static char *
+copy(const char *s)
{
char *p;
- extern char *malloc(), *strcpy();
- p = malloc((unsigned) strlen(s) + 1);
- if (p == NULL)
+ p = (char * )malloc(strlen(s) + 1);
+ if (p == 0)
fatal("Ran out of memory.");
- (void) strcpy(p, s);
+ else
+ (void) strcpy(p, s);
return (p);
}
-help(ctab, s)
- struct tab *ctab;
- char *s;
+static void
+help(struct tab *ctab, char *s)
{
register struct tab *c;
register int width, NCMDS;
- char *type;
+ const char *help_type;
if (ctab == sitetab)
- type = "SITE ";
+ help_type = "SITE ";
else
- type = "";
+ help_type = "";
width = 0, NCMDS = 0;
- for (c = ctab; c->name != NULL; c++) {
+ for (c = ctab; c->name != 0; c++) {
int len = strlen(c->name);
if (len > width)
@@ -837,7 +922,7 @@ help(ctab, s)
int columns, lines;
lreply(214, "The following %scommands are recognized %s.",
- type, "(* =>'s unimplemented)");
+ help_type, "(* =>'s unimplemented)");
columns = 76 / width;
if (columns == 0)
columns = 1;
@@ -846,6 +931,7 @@ help(ctab, s)
printf(" ");
for (j = 0; j < columns; j++) {
c = ctab + j * lines + i;
+ assert(c->name != 0);
printf("%s%c", c->name,
c->implemented ? ' ' : '*');
if (c + lines >= &ctab[NCMDS])
@@ -869,14 +955,14 @@ help(ctab, s)
return;
}
if (c->implemented)
- reply(214, "Syntax: %s%s %s", type, c->name, c->help);
+ reply(214, "Syntax: %s%s %s", help_type, c->name, c->help);
else
- reply(214, "%s%-*s\t%s; unimplemented.", type, width,
+ reply(214, "%s%-*s\t%s; unimplemented.", help_type, width,
c->name, c->help);
}
-sizecmd(filename)
-char *filename;
+static void
+sizecmd(char *filename)
{
switch (type) {
case TYPE_L:
@@ -886,14 +972,18 @@ char *filename;
(stbuf.st_mode&S_IFMT) != S_IFREG)
reply(550, "%s: not a plain file.", filename);
else
+#ifdef HAVE_LONG_LONG
+ reply(213, "%llu", (long long) stbuf.st_size);
+#else
reply(213, "%lu", stbuf.st_size);
+#endif
break;}
case TYPE_A: {
FILE *fin;
register int c, count;
struct stat stbuf;
fin = fopen(filename, "r");
- if (fin == NULL) {
+ if (fin == 0) {
perror_reply(550, filename);
return;
}
@@ -918,47 +1008,74 @@ char *filename;
reply(504, "SIZE not implemented for Type %c.", "?AEIL"[type]);
}
}
-#line 920 "ftp.tab.c"
+#line 1011 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
-static int yygrowstack()
+static int yygrowstack(YYSTACKDATA *data)
{
- int newsize, i;
+ int i;
+ unsigned newsize;
short *newss;
YYSTYPE *newvs;
- if ((newsize = yystacksize) == 0)
+ if ((newsize = data->stacksize) == 0)
newsize = YYINITSTACKSIZE;
else if (newsize >= YYMAXDEPTH)
return -1;
else if ((newsize *= 2) > YYMAXDEPTH)
newsize = YYMAXDEPTH;
- i = yyssp - yyss;
- if ((newss = (short *)realloc(yyss, newsize * sizeof *newss)) == NULL)
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
return -1;
- yyss = newss;
- yyssp = newss + i;
- if ((newvs = (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs)) == NULL)
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
return -1;
- yyvs = newvs;
- yyvsp = newvs + i;
- yystacksize = newsize;
- yysslim = yyss + newsize - 1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
return 0;
}
-#define YYABORT goto yyabort
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
+#define YYERROR goto yyerrlab
int
-yyparse()
+YYPARSE_DECL()
{
- register int yym, yyn, yystate;
+ int yym, yyn, yystate;
#if YYDEBUG
- register const char *yys;
+ const char *yys;
- if ((yys = getenv("YYDEBUG")))
+ if ((yys = getenv("YYDEBUG")) != 0)
{
yyn = *yys;
if (yyn >= '0' && yyn <= '9')
@@ -968,18 +1085,24 @@ yyparse()
yynerrs = 0;
yyerrflag = 0;
- yychar = (-1);
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
- if (yyss == NULL && yygrowstack()) goto yyoverflow;
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
yyloop:
- if ((yyn = yydefred[yystate])) goto yyreduce;
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
if (yychar < 0)
{
- if ((yychar = yylex()) < 0) yychar = 0;
+ if ((yychar = YYLEX) < 0) yychar = 0;
#if YYDEBUG
if (yydebug)
{
@@ -999,13 +1122,14 @@ yyloop:
printf("%sdebug: state %d, shifting to state %d\n",
YYPREFIX, yystate, yytable[yyn]);
#endif
- if (yyssp >= yysslim && yygrowstack())
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
{
goto yyoverflow;
}
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
if (yyerrflag > 0) --yyerrflag;
goto yyloop;
}
@@ -1016,36 +1140,35 @@ yyloop:
goto yyreduce;
}
if (yyerrflag) goto yyinrecovery;
-#if defined(lint) || defined(__GNUC__)
- goto yynewerror;
-#endif
-yynewerror:
+
yyerror("syntax error");
-#if defined(lint) || defined(__GNUC__)
+
goto yyerrlab;
-#endif
+
yyerrlab:
++yynerrs;
+
yyinrecovery:
if (yyerrflag < 3)
{
yyerrflag = 3;
for (;;)
{
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
{
#if YYDEBUG
if (yydebug)
printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
#endif
- if (yyssp >= yysslim && yygrowstack())
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
{
goto yyoverflow;
}
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
goto yyloop;
}
else
@@ -1053,11 +1176,11 @@ yyinrecovery:
#if YYDEBUG
if (yydebug)
printf("%sdebug: error recovery discarding state %d\n",
- YYPREFIX, *yyssp);
+ YYPREFIX, *yystack.s_mark);
#endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
}
}
}
@@ -1074,9 +1197,10 @@ yyinrecovery:
YYPREFIX, yystate, yychar, yys);
}
#endif
- yychar = (-1);
+ yychar = YYEMPTY;
goto yyloop;
}
+
yyreduce:
#if YYDEBUG
if (yydebug)
@@ -1084,32 +1208,35 @@ yyreduce:
YYPREFIX, yystate, yyn, yyrule[yyn]);
#endif
yym = yylen[yyn];
- yyval = yyvsp[1-yym];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
switch (yyn)
{
case 2:
-#line 99 "ftp.y"
- {
+#line 150 "ftp.y"
+ {
fromname = (char *) 0;
}
break;
case 4:
-#line 106 "ftp.y"
- {
- user((char *) yyvsp[-1]);
- free((char *) yyvsp[-1]);
+#line 157 "ftp.y"
+ {
+ user((char *) yystack.l_mark[-1]);
+ free((char *) yystack.l_mark[-1]);
}
break;
case 5:
-#line 111 "ftp.y"
- {
- pass((char *) yyvsp[-1]);
- free((char *) yyvsp[-1]);
+#line 162 "ftp.y"
+ {
+ pass((char *) yystack.l_mark[-1]);
+ free((char *) yystack.l_mark[-1]);
}
break;
case 6:
-#line 116 "ftp.y"
- {
+#line 167 "ftp.y"
+ {
usedefault = 0;
if (pdata >= 0) {
(void) close(pdata);
@@ -1119,14 +1246,14 @@ case 6:
}
break;
case 7:
-#line 125 "ftp.y"
- {
+#line 176 "ftp.y"
+ {
passive();
}
break;
case 8:
-#line 129 "ftp.y"
- {
+#line 180 "ftp.y"
+ {
switch (cmd_type) {
case TYPE_A:
@@ -1162,9 +1289,9 @@ case 8:
}
break;
case 9:
-#line 164 "ftp.y"
- {
- switch (yyvsp[-1]) {
+#line 215 "ftp.y"
+ {
+ switch (yystack.l_mark[-1]) {
case STRU_F:
reply(200, "STRU F ok.");
@@ -1176,9 +1303,9 @@ case 9:
}
break;
case 10:
-#line 176 "ftp.y"
- {
- switch (yyvsp[-1]) {
+#line 227 "ftp.y"
+ {
+ switch (yystack.l_mark[-1]) {
case MODE_S:
reply(200, "MODE S ok.");
@@ -1190,148 +1317,148 @@ case 10:
}
break;
case 11:
-#line 188 "ftp.y"
- {
+#line 239 "ftp.y"
+ {
reply(202, "ALLO command ignored.");
}
break;
case 12:
-#line 192 "ftp.y"
- {
+#line 243 "ftp.y"
+ {
reply(202, "ALLO command ignored.");
}
break;
case 13:
-#line 196 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- retrieve((char *) 0, (char *) yyvsp[-1]);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 247 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ retrieve((char *) 0, (char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 14:
-#line 203 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- store((char *) yyvsp[-1], "w", 0);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 254 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ store((char *) yystack.l_mark[-1], "w", 0);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 15:
-#line 210 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- store((char *) yyvsp[-1], "a", 0);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 261 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ store((char *) yystack.l_mark[-1], "a", 0);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 16:
-#line 217 "ftp.y"
- {
- if (yyvsp[-1])
+#line 268 "ftp.y"
+ {
+ if (yystack.l_mark[-1])
send_file_list(".");
}
break;
case 17:
-#line 222 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- send_file_list((char *) yyvsp[-1]);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 273 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ send_file_list((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 18:
-#line 229 "ftp.y"
- {
- if (yyvsp[-1])
+#line 280 "ftp.y"
+ {
+ if (yystack.l_mark[-1])
retrieve("/bin/ls -lgA", "");
}
break;
case 19:
-#line 234 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- retrieve("/bin/ls -lgA %s", (char *) yyvsp[-1]);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 285 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ retrieve("/bin/ls -lgA %s", (char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 20:
-#line 241 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- statfilecmd((char *) yyvsp[-1]);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 292 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ statfilecmd((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 21:
-#line 248 "ftp.y"
- {
+#line 299 "ftp.y"
+ {
statcmd();
}
break;
case 22:
-#line 252 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- delete((char *) yyvsp[-1]);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 303 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ remove((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 23:
-#line 259 "ftp.y"
- {
+#line 310 "ftp.y"
+ {
if (fromname) {
- renamecmd(fromname, (char *) yyvsp[-1]);
+ renamecmd(fromname, (char *) yystack.l_mark[-1]);
free(fromname);
fromname = (char *) 0;
} else {
reply(503, "Bad sequence of commands.");
}
- free((char *) yyvsp[-1]);
+ free((char *) yystack.l_mark[-1]);
}
break;
case 24:
-#line 270 "ftp.y"
- {
+#line 321 "ftp.y"
+ {
reply(225, "ABOR command successful.");
}
break;
case 25:
-#line 274 "ftp.y"
- {
- if (yyvsp[-1])
+#line 325 "ftp.y"
+ {
+ if (yystack.l_mark[-1])
cwd(pw->pw_dir);
}
break;
case 26:
-#line 279 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- cwd((char *) yyvsp[-1]);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 330 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ cwd((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 27:
-#line 286 "ftp.y"
- {
+#line 337 "ftp.y"
+ {
help(cmdtab, (char *) 0);
}
break;
case 28:
-#line 290 "ftp.y"
- {
- register char *cp = (char *)yyvsp[-1];
+#line 341 "ftp.y"
+ {
+ register char *cp = (char *)yystack.l_mark[-1];
if (strncasecmp(cp, "SITE", 4) == 0) {
- cp = (char *)yyvsp[-1] + 4;
+ cp = (char *)yystack.l_mark[-1] + 4;
if (*cp == ' ')
cp++;
if (*cp)
@@ -1339,65 +1466,65 @@ case 28:
else
help(sitetab, (char *) 0);
} else
- help(cmdtab, (char *) yyvsp[-1]);
+ help(cmdtab, (char *) yystack.l_mark[-1]);
}
break;
case 29:
-#line 305 "ftp.y"
- {
+#line 356 "ftp.y"
+ {
reply(200, "NOOP command successful.");
}
break;
case 30:
-#line 309 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- makedir((char *) yyvsp[-1]);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 360 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ makedir((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 31:
-#line 316 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- removedir((char *) yyvsp[-1]);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 367 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ removedir((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 32:
-#line 323 "ftp.y"
- {
- if (yyvsp[-1])
+#line 374 "ftp.y"
+ {
+ if (yystack.l_mark[-1])
pwd();
}
break;
case 33:
-#line 328 "ftp.y"
- {
- if (yyvsp[-1])
+#line 379 "ftp.y"
+ {
+ if (yystack.l_mark[-1])
cwd("..");
}
break;
case 34:
-#line 333 "ftp.y"
- {
+#line 384 "ftp.y"
+ {
help(sitetab, (char *) 0);
}
break;
case 35:
-#line 337 "ftp.y"
- {
- help(sitetab, (char *) yyvsp[-1]);
+#line 388 "ftp.y"
+ {
+ help(sitetab, (char *) yystack.l_mark[-1]);
}
break;
case 36:
-#line 341 "ftp.y"
- {
+#line 392 "ftp.y"
+ {
int oldmask;
- if (yyvsp[-1]) {
+ if (yystack.l_mark[-1]) {
oldmask = umask(0);
(void) umask(oldmask);
reply(200, "Current UMASK is %03o", oldmask);
@@ -1405,55 +1532,55 @@ case 36:
}
break;
case 37:
-#line 351 "ftp.y"
- {
+#line 402 "ftp.y"
+ {
int oldmask;
- if (yyvsp[-3]) {
- if ((yyvsp[-1] == -1) || (yyvsp[-1] > 0777)) {
+ if (yystack.l_mark[-3]) {
+ if ((yystack.l_mark[-1] == -1) || (yystack.l_mark[-1] > 0777)) {
reply(501, "Bad UMASK value");
} else {
- oldmask = umask(yyvsp[-1]);
+ oldmask = umask(yystack.l_mark[-1]);
reply(200,
"UMASK set to %03o (was %03o)",
- yyvsp[-1], oldmask);
+ yystack.l_mark[-1], oldmask);
}
}
}
break;
case 38:
-#line 366 "ftp.y"
- {
- if (yyvsp[-5] && (yyvsp[-1] != NULL)) {
- if (yyvsp[-3] > 0777)
+#line 417 "ftp.y"
+ {
+ if (yystack.l_mark[-5] && (yystack.l_mark[-1] != 0)) {
+ if (yystack.l_mark[-3] > 0777)
reply(501,
"CHMOD: Mode value must be between 0 and 0777");
- else if (chmod((char *) yyvsp[-1], yyvsp[-3]) < 0)
- perror_reply(550, (char *) yyvsp[-1]);
+ else if (chmod((char *) yystack.l_mark[-1], yystack.l_mark[-3]) < 0)
+ perror_reply(550, (char *) yystack.l_mark[-1]);
else
reply(200, "CHMOD command successful.");
}
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 39:
-#line 380 "ftp.y"
- {
+#line 431 "ftp.y"
+ {
reply(200,
"Current IDLE time limit is %d seconds; max %d",
timeout, maxtimeout);
}
break;
case 40:
-#line 386 "ftp.y"
- {
- if (yyvsp[-1] < 30 || yyvsp[-1] > maxtimeout) {
+#line 437 "ftp.y"
+ {
+ if (yystack.l_mark[-1] < 30 || yystack.l_mark[-1] > maxtimeout) {
reply(501,
"Maximum IDLE time must be between 30 and %d seconds",
maxtimeout);
} else {
- timeout = yyvsp[-1];
+ timeout = yystack.l_mark[-1];
(void) alarm((unsigned) timeout);
reply(200,
"Maximum IDLE time set to %d seconds",
@@ -1462,17 +1589,17 @@ case 40:
}
break;
case 41:
-#line 400 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- store((char *) yyvsp[-1], "w", 1);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 451 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ store((char *) yystack.l_mark[-1], "w", 1);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 42:
-#line 407 "ftp.y"
- {
+#line 458 "ftp.y"
+ {
#ifdef unix
#ifdef BSD
reply(215, "UNIX Type: L%d Version: BSD-%d",
@@ -1486,220 +1613,218 @@ case 42:
}
break;
case 43:
-#line 428 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL)
- sizecmd((char *) yyvsp[-1]);
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+#line 479 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0)
+ sizecmd((char *) yystack.l_mark[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 44:
-#line 445 "ftp.y"
- {
- if (yyvsp[-3] && yyvsp[-1] != NULL) {
+#line 496 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1] != 0) {
struct stat stbuf;
- if (stat((char *) yyvsp[-1], &stbuf) < 0)
- perror_reply(550, "%s", (char *) yyvsp[-1]);
+ if (stat((char *) yystack.l_mark[-1], &stbuf) < 0)
+ perror_reply(550, "%s", (char *) yystack.l_mark[-1]);
else if ((stbuf.st_mode&S_IFMT) != S_IFREG) {
reply(550, "%s: not a plain file.",
- (char *) yyvsp[-1]);
+ (char *) yystack.l_mark[-1]);
} else {
register struct tm *t;
- struct tm *gmtime();
t = gmtime(&stbuf.st_mtime);
reply(213,
- "%d%02d%02d%02d%02d%02d",
- t->tm_year+1900, t->tm_mon+1, t->tm_mday,
+ "%04d%02d%02d%02d%02d%02d",
+ 1900 + t->tm_year,
+ t->tm_mon+1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec);
}
}
- if (yyvsp[-1] != NULL)
- free((char *) yyvsp[-1]);
+ if (yystack.l_mark[-1] != 0)
+ free((char *) yystack.l_mark[-1]);
}
break;
case 45:
-#line 467 "ftp.y"
- {
+#line 518 "ftp.y"
+ {
reply(221, "Goodbye.");
dologout(0);
}
break;
case 46:
-#line 472 "ftp.y"
- {
+#line 523 "ftp.y"
+ {
yyerrok;
}
break;
case 47:
-#line 477 "ftp.y"
- {
- char *renamefrom();
-
- if (yyvsp[-3] && yyvsp[-1]) {
- fromname = renamefrom((char *) yyvsp[-1]);
- if (fromname == (char *) 0 && yyvsp[-1]) {
- free((char *) yyvsp[-1]);
+#line 528 "ftp.y"
+ {
+ if (yystack.l_mark[-3] && yystack.l_mark[-1]) {
+ fromname = renamefrom((char *) yystack.l_mark[-1]);
+ if (fromname == (char *) 0 && yystack.l_mark[-1]) {
+ free((char *) yystack.l_mark[-1]);
}
}
}
break;
case 49:
-#line 493 "ftp.y"
- {
- *(char **)&(yyval) = "";
+#line 542 "ftp.y"
+ {
+ *(const char **)(&(yyval)) = "";
}
break;
case 52:
-#line 504 "ftp.y"
- {
+#line 553 "ftp.y"
+ {
register char *a, *p;
a = (char *)&data_dest.sin_addr;
- a[0] = yyvsp[-10]; a[1] = yyvsp[-8]; a[2] = yyvsp[-6]; a[3] = yyvsp[-4];
+ a[0] = yystack.l_mark[-10]; a[1] = yystack.l_mark[-8]; a[2] = yystack.l_mark[-6]; a[3] = yystack.l_mark[-4];
p = (char *)&data_dest.sin_port;
- p[0] = yyvsp[-2]; p[1] = yyvsp[0];
+ p[0] = yystack.l_mark[-2]; p[1] = yystack.l_mark[0];
data_dest.sin_family = AF_INET;
}
break;
case 53:
-#line 516 "ftp.y"
- {
+#line 565 "ftp.y"
+ {
yyval = FORM_N;
}
break;
case 54:
-#line 520 "ftp.y"
- {
+#line 569 "ftp.y"
+ {
yyval = FORM_T;
}
break;
case 55:
-#line 524 "ftp.y"
- {
+#line 573 "ftp.y"
+ {
yyval = FORM_C;
}
break;
case 56:
-#line 530 "ftp.y"
- {
+#line 579 "ftp.y"
+ {
cmd_type = TYPE_A;
cmd_form = FORM_N;
}
break;
case 57:
-#line 535 "ftp.y"
- {
+#line 584 "ftp.y"
+ {
cmd_type = TYPE_A;
- cmd_form = yyvsp[0];
+ cmd_form = yystack.l_mark[0];
}
break;
case 58:
-#line 540 "ftp.y"
- {
+#line 589 "ftp.y"
+ {
cmd_type = TYPE_E;
cmd_form = FORM_N;
}
break;
case 59:
-#line 545 "ftp.y"
- {
+#line 594 "ftp.y"
+ {
cmd_type = TYPE_E;
- cmd_form = yyvsp[0];
+ cmd_form = yystack.l_mark[0];
}
break;
case 60:
-#line 550 "ftp.y"
- {
+#line 599 "ftp.y"
+ {
cmd_type = TYPE_I;
}
break;
case 61:
-#line 554 "ftp.y"
- {
+#line 603 "ftp.y"
+ {
cmd_type = TYPE_L;
cmd_bytesz = NBBY;
}
break;
case 62:
-#line 559 "ftp.y"
- {
+#line 608 "ftp.y"
+ {
cmd_type = TYPE_L;
- cmd_bytesz = yyvsp[0];
+ cmd_bytesz = yystack.l_mark[0];
}
break;
case 63:
-#line 565 "ftp.y"
- {
+#line 614 "ftp.y"
+ {
cmd_type = TYPE_L;
- cmd_bytesz = yyvsp[0];
+ cmd_bytesz = yystack.l_mark[0];
}
break;
case 64:
-#line 572 "ftp.y"
- {
+#line 621 "ftp.y"
+ {
yyval = STRU_F;
}
break;
case 65:
-#line 576 "ftp.y"
- {
+#line 625 "ftp.y"
+ {
yyval = STRU_R;
}
break;
case 66:
-#line 580 "ftp.y"
- {
+#line 629 "ftp.y"
+ {
yyval = STRU_P;
}
break;
case 67:
-#line 586 "ftp.y"
- {
+#line 635 "ftp.y"
+ {
yyval = MODE_S;
}
break;
case 68:
-#line 590 "ftp.y"
- {
+#line 639 "ftp.y"
+ {
yyval = MODE_B;
}
break;
case 69:
-#line 594 "ftp.y"
- {
+#line 643 "ftp.y"
+ {
yyval = MODE_C;
}
break;
case 70:
-#line 600 "ftp.y"
- {
+#line 649 "ftp.y"
+ {
/*
* Problem: this production is used for all pathname
* processing, but only gives a 550 error reply.
* This is a valid reply in some cases but not in others.
*/
- if (logged_in && yyvsp[0] && strncmp((char *) yyvsp[0], "~", 1) == 0) {
- *(char **)&(yyval) = *glob((char *) yyvsp[0]);
- if (globerr != NULL) {
+ if (logged_in && yystack.l_mark[0] && strncmp((char *) yystack.l_mark[0], "~", 1) == 0) {
+ *(char **)&(yyval) = *glob((char *) yystack.l_mark[0]);
+ if (globerr != 0) {
reply(550, globerr);
- yyval = NULL;
+ yyval = 0;
}
- free((char *) yyvsp[0]);
+ free((char *) yystack.l_mark[0]);
} else
- yyval = yyvsp[0];
+ yyval = yystack.l_mark[0];
}
break;
case 72:
-#line 622 "ftp.y"
- {
+#line 671 "ftp.y"
+ {
register int ret, dec, multby, digit;
/*
* Convert a number that was read as decimal number
* to what it would be if it had been read as octal.
*/
- dec = yyvsp[0];
+ dec = yystack.l_mark[0];
multby = 1;
ret = 0;
while (dec) {
@@ -1716,8 +1841,8 @@ case 72:
}
break;
case 73:
-#line 647 "ftp.y"
- {
+#line 696 "ftp.y"
+ {
if (logged_in)
yyval = 1;
else {
@@ -1726,11 +1851,11 @@ case 73:
}
}
break;
-#line 1728 "ftp.tab.c"
+#line 1854 "/dev/stdout"
}
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
yym = yylhs[yyn];
if (yystate == 0 && yym == 0)
{
@@ -1740,11 +1865,11 @@ break;
state %d\n", YYPREFIX, YYFINAL);
#endif
yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
if (yychar < 0)
{
- if ((yychar = yylex()) < 0) yychar = 0;
+ if ((yychar = YYLEX) < 0) yychar = 0;
#if YYDEBUG
if (yydebug)
{
@@ -1767,19 +1892,24 @@ break;
#if YYDEBUG
if (yydebug)
printf("%sdebug: after reduction, shifting from state %d \
-to state %d\n", YYPREFIX, *yyssp, yystate);
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
#endif
- if (yyssp >= yysslim && yygrowstack())
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
{
goto yyoverflow;
}
- *++yyssp = yystate;
- *++yyvsp = yyval;
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
goto yyloop;
+
yyoverflow:
yyerror("yacc stack overflow");
+
yyabort:
+ yyfreestack(&yystack);
return (1);
+
yyaccept:
+ yyfreestack(&yystack);
return (0);
}
diff --git a/tools/regression/usr.bin/yacc/regress.08.out b/tools/regression/usr.bin/yacc/regress.08.out
new file mode 100644
index 000000000000..86e93e7e2023
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.08.out
@@ -0,0 +1,1945 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 9 "grammar.y"
+#ifdef YYBISON
+#include <stdlib.h>
+#define YYSTYPE_IS_DECLARED
+#define yyerror yaccError
+#endif
+
+#if defined(YYBISON) || !defined(YYBYACC)
+static void yyerror(const char *s);
+#endif
+#line 81 "grammar.y"
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+#define OPT_LINTLIBRARY 1
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+/* #include "cproto.h" */
+#define MAX_TEXT_SIZE 1024
+
+/* Prototype styles */
+#if OPT_LINTLIBRARY
+#define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */
+#define PROTO_LINTLIBRARY -1 /* form lint-library source */
+#endif
+#define PROTO_NONE 0 /* do not output any prototypes */
+#define PROTO_TRADITIONAL 1 /* comment out parameters */
+#define PROTO_ABSTRACT 2 /* comment out parameter names */
+#define PROTO_ANSI 3 /* ANSI C prototype */
+
+typedef int PrototypeStyle;
+
+typedef char boolean;
+
+extern boolean types_out;
+extern PrototypeStyle proto_style;
+
+#define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB)
+#define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY)
+#define lintLibrary() (knrLintLibrary() || ansiLintLibrary())
+
+#if OPT_LINTLIBRARY
+#define FUNC_UNKNOWN -1 /* unspecified */
+#else
+#define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */
+#endif
+#define FUNC_NONE 0 /* not a function definition */
+#define FUNC_TRADITIONAL 1 /* traditional style */
+#define FUNC_ANSI 2 /* ANSI style */
+#define FUNC_BOTH 3 /* both styles */
+
+typedef int FuncDefStyle;
+
+/* Source file text */
+typedef struct text {
+ char text[MAX_TEXT_SIZE]; /* source text */
+ long begin; /* offset in temporary file */
+} Text;
+
+/* Declaration specifier flags */
+#define DS_NONE 0 /* default */
+#define DS_EXTERN 1 /* contains "extern" specifier */
+#define DS_STATIC 2 /* contains "static" specifier */
+#define DS_CHAR 4 /* contains "char" type specifier */
+#define DS_SHORT 8 /* contains "short" type specifier */
+#define DS_FLOAT 16 /* contains "float" type specifier */
+#define DS_INLINE 32 /* contains "inline" specifier */
+#define DS_JUNK 64 /* we're not interested in this declaration */
+
+/* This structure stores information about a declaration specifier. */
+typedef struct decl_spec {
+ unsigned short flags; /* flags defined above */
+ char *text; /* source text */
+ long begin; /* offset in temporary file */
+} DeclSpec;
+
+/* This is a list of function parameters. */
+typedef struct _ParameterList {
+ struct parameter *first; /* pointer to first parameter in list */
+ struct parameter *last; /* pointer to last parameter in list */
+ long begin_comment; /* begin offset of comment */
+ long end_comment; /* end offset of comment */
+ char *comment; /* comment at start of parameter list */
+} ParameterList;
+
+/* This structure stores information about a declarator. */
+typedef struct _Declarator {
+ char *name; /* name of variable or function */
+ char *text; /* source text */
+ long begin; /* offset in temporary file */
+ long begin_comment; /* begin offset of comment */
+ long end_comment; /* end offset of comment */
+ FuncDefStyle func_def; /* style of function definition */
+ ParameterList params; /* function parameters */
+ boolean pointer; /* TRUE if it declares a pointer */
+ struct _Declarator *head; /* head function declarator */
+ struct _Declarator *func_stack; /* stack of function declarators */
+ struct _Declarator *next; /* next declarator in list */
+} Declarator;
+
+/* This structure stores information about a function parameter. */
+typedef struct parameter {
+ struct parameter *next; /* next parameter in list */
+ DeclSpec decl_spec;
+ Declarator *declarator;
+ char *comment; /* comment following the parameter */
+} Parameter;
+
+/* This is a list of declarators. */
+typedef struct declarator_list {
+ Declarator *first; /* pointer to first declarator in list */
+ Declarator *last; /* pointer to last declarator in list */
+} DeclaratorList;
+
+/* #include "symbol.h" */
+typedef struct symbol {
+ struct symbol *next; /* next symbol in list */
+ char *name; /* name of symbol */
+ char *value; /* value of symbol (for defines) */
+ short flags; /* symbol attributes */
+} Symbol;
+
+/* parser stack entry type */
+typedef union {
+ Text text;
+ DeclSpec decl_spec;
+ Parameter *parameter;
+ ParameterList param_list;
+ Declarator *declarator;
+ DeclaratorList decl_list;
+} YYSTYPE;
+
+/* The hash table length should be a prime number. */
+#define SYM_MAX_HASH 251
+
+typedef struct symbol_table {
+ Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */
+} SymbolTable;
+
+extern SymbolTable *new_symbol_table /* Create symbol table */
+ (void);
+extern void free_symbol_table /* Destroy symbol table */
+ (SymbolTable *s);
+extern Symbol *find_symbol /* Lookup symbol name */
+ (SymbolTable *s, const char *n);
+extern Symbol *new_symbol /* Define new symbol */
+ (SymbolTable *s, const char *n, const char *v, int f);
+
+/* #include "semantic.h" */
+extern void new_decl_spec (DeclSpec *, const char *, long, int);
+extern void free_decl_spec (DeclSpec *);
+extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *);
+extern void check_untagged (DeclSpec *);
+extern Declarator *new_declarator (const char *, const char *, long);
+extern void free_declarator (Declarator *);
+extern void new_decl_list (DeclaratorList *, Declarator *);
+extern void free_decl_list (DeclaratorList *);
+extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *);
+extern Parameter *new_parameter (DeclSpec *, Declarator *);
+extern void free_parameter (Parameter *);
+extern void new_param_list (ParameterList *, Parameter *);
+extern void free_param_list (ParameterList *);
+extern void add_param_list (ParameterList *, ParameterList *, Parameter *);
+extern void new_ident_list (ParameterList *);
+extern void add_ident_list (ParameterList *, ParameterList *, const char *);
+extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *);
+extern void gen_declarations (DeclSpec *, DeclaratorList *);
+extern void gen_prototype (DeclSpec *, Declarator *);
+extern void gen_func_declarator (Declarator *);
+extern void gen_func_definition (DeclSpec *, Declarator *);
+
+extern void init_parser (void);
+extern void process_file (FILE *infile, char *name);
+extern char *cur_text (void);
+extern char *cur_file_name (void);
+extern char *implied_typedef (void);
+extern void include_file (char *name, int convert);
+extern char *supply_parm (int count);
+extern char *xstrdup (const char *);
+extern int already_declared (char *name);
+extern int is_actual_func (Declarator *d);
+extern int lint_ellipsis (Parameter *p);
+extern int want_typedef (void);
+extern void begin_tracking (void);
+extern void begin_typedef (void);
+extern void copy_typedef (char *s);
+extern void ellipsis_varargs (Declarator *d);
+extern void end_typedef (void);
+extern void flush_varargs (void);
+extern void fmt_library (int code);
+extern void imply_typedef (const char *s);
+extern void indent (FILE *outf);
+extern void put_blankline (FILE *outf);
+extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator);
+extern void put_char (FILE *outf, int c);
+extern void put_error (void);
+extern void put_newline (FILE *outf);
+extern void put_padded (FILE *outf, const char *s);
+extern void put_string (FILE *outf, const char *s);
+extern void track_in (void);
+
+extern boolean file_comments;
+extern FuncDefStyle func_style;
+extern char base_file[];
+
+extern int yylex (void);
+
+/* declaration specifier attributes for the typedef statement currently being
+ * scanned
+ */
+static int cur_decl_spec_flags;
+
+/* pointer to parameter list for the current function definition */
+static ParameterList *func_params;
+
+/* A parser semantic action sets this pointer to the current declarator in
+ * a function parameter declaration in order to catch any comments following
+ * the parameter declaration on the same line. If the lexer scans a comment
+ * and <cur_declarator> is not NULL, then the comment is attached to the
+ * declarator. To ignore subsequent comments, the lexer sets this to NULL
+ * after scanning a comment or end of line.
+ */
+static Declarator *cur_declarator;
+
+/* temporary string buffer */
+static char buf[MAX_TEXT_SIZE];
+
+/* table of typedef names */
+static SymbolTable *typedef_names;
+
+/* table of define names */
+static SymbolTable *define_names;
+
+/* table of type qualifiers */
+static SymbolTable *type_qualifiers;
+
+/* information about the current input file */
+typedef struct {
+ char *base_name; /* base input file name */
+ char *file_name; /* current file name */
+ FILE *file; /* input file */
+ unsigned line_num; /* current line number in input file */
+ FILE *tmp_file; /* temporary file */
+ long begin_comment; /* tmp file offset after last written ) or ; */
+ long end_comment; /* tmp file offset after last comment */
+ boolean convert; /* if TRUE, convert function definitions */
+ boolean changed; /* TRUE if conversion done in this file */
+} IncludeStack;
+
+static IncludeStack *cur_file; /* current input file */
+
+/* #include "yyerror.c" */
+
+static int haveAnsiParam (void);
+
+
+/* Flags to enable us to find if a procedure returns a value.
+ */
+static int return_val; /* nonzero on BRACES iff return-expression found */
+
+static const char *
+dft_decl_spec (void)
+{
+ return (lintLibrary() && !return_val) ? "void" : "int";
+}
+
+static int
+haveAnsiParam (void)
+{
+ Parameter *p;
+ if (func_params != 0) {
+ for (p = func_params->first; p != 0; p = p->next) {
+ if (p->declarator->func_def == FUNC_ANSI) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+#line 305 "/dev/stdout"
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define T_IDENTIFIER 257
+#define T_TYPEDEF_NAME 258
+#define T_DEFINE_NAME 259
+#define T_AUTO 260
+#define T_EXTERN 261
+#define T_REGISTER 262
+#define T_STATIC 263
+#define T_TYPEDEF 264
+#define T_INLINE 265
+#define T_EXTENSION 266
+#define T_CHAR 267
+#define T_DOUBLE 268
+#define T_FLOAT 269
+#define T_INT 270
+#define T_VOID 271
+#define T_LONG 272
+#define T_SHORT 273
+#define T_SIGNED 274
+#define T_UNSIGNED 275
+#define T_ENUM 276
+#define T_STRUCT 277
+#define T_UNION 278
+#define T_Bool 279
+#define T_Complex 280
+#define T_Imaginary 281
+#define T_TYPE_QUALIFIER 282
+#define T_BRACKETS 283
+#define T_LBRACE 284
+#define T_MATCHRBRACE 285
+#define T_ELLIPSIS 286
+#define T_INITIALIZER 287
+#define T_STRING_LITERAL 288
+#define T_ASM 289
+#define T_ASMARG 290
+#define T_VA_DCL 291
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0, 0, 26, 26, 27, 27, 27, 27, 27, 27,
+ 27, 31, 30, 30, 28, 28, 34, 28, 32, 32,
+ 33, 33, 35, 35, 37, 38, 29, 39, 29, 36,
+ 36, 36, 40, 40, 1, 1, 2, 2, 2, 3,
+ 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 6, 6, 6, 19, 19, 8, 8, 9,
+ 41, 9, 7, 7, 7, 25, 23, 23, 10, 10,
+ 11, 11, 11, 11, 11, 20, 20, 21, 21, 22,
+ 22, 14, 14, 15, 15, 16, 16, 16, 17, 17,
+ 18, 18, 24, 24, 12, 12, 12, 13, 13, 13,
+ 13, 13, 13, 13,
+};
+static const short yylen[] = { 2,
+ 0, 1, 1, 2, 1, 1, 1, 1, 3, 2,
+ 2, 2, 3, 3, 2, 3, 0, 5, 2, 1,
+ 0, 1, 1, 3, 0, 0, 7, 0, 5, 0,
+ 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 3, 2, 2, 1, 1, 1, 3, 1,
+ 0, 4, 3, 2, 2, 1, 1, 1, 2, 1,
+ 1, 3, 2, 4, 4, 2, 3, 0, 1, 1,
+ 2, 1, 3, 1, 3, 2, 2, 1, 0, 1,
+ 1, 3, 1, 2, 1, 2, 1, 3, 2, 1,
+ 4, 3, 3, 2,
+};
+static const short yydefred[] = { 0,
+ 0, 0, 0, 0, 77, 0, 62, 40, 0, 42,
+ 43, 20, 44, 0, 46, 47, 48, 49, 54, 50,
+ 51, 52, 53, 76, 66, 67, 55, 56, 57, 61,
+ 0, 7, 0, 0, 35, 37, 38, 39, 59, 60,
+ 28, 0, 0, 0, 103, 81, 0, 0, 3, 5,
+ 6, 8, 0, 10, 11, 78, 0, 90, 0, 0,
+ 104, 0, 19, 0, 41, 45, 15, 36, 0, 68,
+ 0, 0, 0, 83, 0, 0, 64, 0, 0, 74,
+ 4, 58, 0, 82, 87, 91, 0, 14, 13, 9,
+ 16, 0, 71, 0, 31, 33, 0, 0, 0, 0,
+ 0, 94, 0, 0, 101, 12, 63, 73, 0, 0,
+ 69, 0, 0, 0, 34, 0, 110, 96, 97, 0,
+ 0, 84, 0, 85, 0, 23, 0, 0, 72, 26,
+ 29, 114, 0, 0, 0, 109, 0, 93, 95, 102,
+ 18, 0, 0, 108, 113, 112, 0, 24, 27, 111,
+};
+static const short yydgoto[] = { 33,
+ 87, 35, 36, 37, 38, 39, 40, 69, 70, 41,
+ 42, 119, 120, 100, 101, 102, 103, 104, 43, 44,
+ 59, 60, 45, 46, 47, 48, 49, 50, 51, 52,
+ 77, 53, 127, 109, 128, 97, 94, 143, 72, 98,
+ 112,
+};
+static const short yysindex[] = { -2,
+ -3, 27, -239, -177, 0, 0, 0, 0, -274, 0,
+ 0, 0, 0, -246, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -266, 0, 0, 455, 0, 0, 0, 0, 0, 0,
+ 0, -35, -245, 128, 0, 0, -245, -2, 0, 0,
+ 0, 0, 642, 0, 0, 0, -15, 0, -12, -239,
+ 0, 590, 0, -27, 0, 0, 0, 0, -10, 0,
+ -11, 534, -72, 0, -237, -232, 0, -35, -232, 0,
+ 0, 0, 642, 0, 0, 0, 455, 0, 0, 0,
+ 0, 27, 0, 534, 0, 0, -222, 617, 209, 34,
+ 39, 0, 44, 42, 0, 0, 0, 0, 27, -11,
+ 0, -200, -196, -195, 0, 174, 0, 0, 0, -33,
+ 243, 0, 561, 0, -177, 0, 33, 49, 0, 0,
+ 0, 0, 53, 55, 417, 0, -33, 0, 0, 0,
+ 0, 27, -188, 0, 0, 0, 57, 0, 0, 0,
+};
+static const short yyrindex[] = { 99,
+ 0, 0, 275, 0, 0, -38, 0, 0, 481, 0,
+ 0, 0, 0, 509, 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, 30, 0, 0, 0, 0, 0, 101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 343, 309,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 98, -182, 62, 0, 0, 133, 0, 64, 379, 0,
+ 0, 0, -5, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -182, 0, 0, 0, -180, -19, 0,
+ 65, 0, 0, 68, 0, 0, 0, 0, 51, 9,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, -13,
+ 19, 0, 0, 0, 0, 0, 0, 52, 0, 0,
+ 0, 0, 0, 0, 0, 0, 35, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+static const short yygindex[] = { 0,
+ 11, -17, 0, 0, 13, 0, 0, 0, 20, 8,
+ -43, -1, -8, -89, 0, -9, 0, 0, 0, -44,
+ 0, 0, 4, 0, 0, 0, 70, -53, 0, 0,
+ -18, 0, 0, 0, 0, 22, 0, 0, 0, 0,
+ 0,
+};
+#define YYTABLESIZE 924
+static const short yytable[] = { 58,
+ 78, 58, 58, 58, 73, 58, 135, 61, 88, 57,
+ 34, 5, 56, 62, 85, 58, 68, 63, 96, 7,
+ 58, 98, 78, 64, 98, 84, 134, 107, 80, 3,
+ 107, 90, 17, 92, 17, 4, 17, 2, 75, 3,
+ 96, 71, 30, 89, 115, 147, 76, 106, 91, 93,
+ 79, 75, 70, 17, 121, 55, 32, 107, 34, 105,
+ 108, 114, 105, 83, 4, 68, 2, 70, 3, 68,
+ 80, 121, 86, 80, 122, 106, 105, 78, 106, 5,
+ 56, 68, 123, 99, 124, 125, 129, 130, 80, 131,
+ 80, 141, 142, 144, 110, 145, 149, 150, 1, 110,
+ 2, 30, 99, 32, 79, 92, 118, 79, 100, 21,
+ 22, 111, 137, 139, 133, 113, 126, 81, 0, 0,
+ 0, 0, 79, 57, 79, 0, 99, 0, 140, 0,
+ 0, 0, 0, 99, 0, 0, 0, 0, 0, 0,
+ 0, 70, 0, 0, 0, 99, 0, 0, 0, 148,
+ 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 2, 0, 0,
+ 65, 0, 65, 65, 65, 0, 65, 0, 0, 0,
+ 0, 0, 0, 0, 5, 6, 7, 8, 65, 10,
+ 11, 65, 13, 66, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 0, 4, 0, 116, 132, 3, 0, 0, 58, 58,
+ 58, 58, 58, 58, 58, 78, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 58, 58, 58, 58, 78, 4, 74, 116, 136,
+ 3, 17, 78, 1, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 4, 54, 116, 5, 56, 0, 31, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 88, 80, 88, 88, 88, 0, 88, 0,
+ 80, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
+ 79, 79, 79, 79, 79, 79, 89, 79, 89, 89,
+ 89, 0, 89, 0, 79, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 86, 25, 86, 86, 5, 56, 86, 0, 25, 65,
+ 65, 65, 65, 65, 65, 65, 0, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 75, 0, 75, 75,
+ 75, 0, 75, 0, 0, 0, 0, 0, 0, 0,
+ 5, 6, 7, 8, 65, 10, 11, 75, 13, 66,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 117, 146, 0, 0,
+ 0, 0, 0, 0, 0, 5, 6, 7, 8, 65,
+ 10, 11, 0, 13, 66, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 117, 4, 0, 2, 0, 3, 0, 0, 5,
+ 56, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 67, 0, 0, 0, 0, 41, 0,
+ 41, 0, 41, 0, 0, 117, 0, 0, 0, 0,
+ 0, 88, 88, 0, 0, 0, 0, 0, 0, 41,
+ 0, 0, 0, 0, 0, 0, 45, 0, 45, 0,
+ 45, 0, 0, 0, 0, 0, 0, 88, 0, 0,
+ 0, 0, 0, 0, 0, 89, 89, 45, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 89, 0, 0, 0, 0, 0, 0, 0, 86,
+ 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 75, 75, 75, 75, 75,
+ 75, 75, 0, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 75, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 7, 8, 65, 10, 11,
+ 0, 13, 66, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5, 6, 7, 8, 65, 10, 11, 0, 13,
+ 66, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 41, 41, 41,
+ 41, 41, 41, 41, 0, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 0, 0, 45, 45, 45, 45, 45,
+ 45, 45, 0, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 82, 7, 8, 65, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 0, 0, 82, 7,
+ 8, 65, 10, 11, 95, 13, 66, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 0, 0, 0, 138, 82, 7, 8,
+ 65, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 0, 75, 82, 7, 8, 65, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 82,
+ 7, 8, 65, 10, 11, 0, 13, 66, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30,
+};
+static const short yycheck[] = { 38,
+ 44, 40, 41, 42, 40, 44, 40, 4, 62, 2,
+ 0, 257, 258, 288, 59, 3, 34, 264, 72, 259,
+ 59, 41, 61, 290, 44, 41, 116, 41, 47, 42,
+ 44, 59, 38, 44, 40, 38, 42, 40, 284, 42,
+ 94, 34, 282, 62, 98, 135, 43, 285, 59, 61,
+ 47, 284, 44, 59, 99, 59, 59, 76, 48, 41,
+ 79, 284, 44, 53, 38, 83, 40, 59, 42, 87,
+ 41, 116, 60, 44, 41, 41, 73, 121, 44, 257,
+ 258, 99, 44, 73, 41, 44, 287, 284, 59, 285,
+ 61, 59, 44, 41, 87, 41, 285, 41, 0, 92,
+ 0, 284, 41, 284, 41, 41, 99, 44, 41, 59,
+ 59, 92, 121, 123, 116, 94, 109, 48, -1, -1,
+ -1, -1, 59, 116, 61, -1, 116, -1, 125, -1,
+ -1, -1, -1, 123, -1, -1, -1, -1, -1, -1,
+ -1, 44, -1, -1, -1, 135, -1, -1, -1, 142,
+ -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
+ -1, -1, -1, -1, -1, 38, -1, 40, -1, -1,
+ 38, -1, 40, 41, 42, -1, 44, -1, -1, -1,
+ -1, -1, -1, -1, 257, 258, 259, 260, 261, 262,
+ 263, 59, 265, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ -1, 38, -1, 40, 41, 42, -1, -1, 257, 258,
+ 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
+ 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282, 283, 284, 38, 283, 40, 283,
+ 42, 257, 291, 256, 257, 258, 259, 260, 261, 262,
+ 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 38, 285, 40, 257, 258, -1, 289, 258, 259, 260,
+ 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, 38, 284, 40, 41, 42, -1, 44, -1,
+ 291, 258, 259, 260, 261, 262, 263, 264, 265, 266,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 38, 284, 40, 41,
+ 42, -1, 44, -1, 291, 258, 259, 260, 261, 262,
+ 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 38, 284, 40, 41, 257, 258, 44, -1, 291, 257,
+ 258, 259, 260, 261, 262, 263, -1, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 38, -1, 40, 41,
+ 42, -1, 44, -1, -1, -1, -1, -1, -1, -1,
+ 257, 258, 259, 260, 261, 262, 263, 59, 265, 266,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, 283, 41, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
+ 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, 38, -1, 40, -1, 42, -1, -1, 257,
+ 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 59, -1, -1, -1, -1, 38, -1,
+ 40, -1, 42, -1, -1, 283, -1, -1, -1, -1,
+ -1, 257, 258, -1, -1, -1, -1, -1, -1, 59,
+ -1, -1, -1, -1, -1, -1, 38, -1, 40, -1,
+ 42, -1, -1, -1, -1, -1, -1, 283, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 59, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 283, -1, -1, -1, -1, -1, -1, -1, 257,
+ 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 283, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
+ 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 258, 259, 260, 261, 262, 263,
+ -1, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 257, 258, 259, 260, 261, 262, 263, -1, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 257, 258, 259,
+ 260, 261, 262, 263, -1, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, -1, -1, 257, 258, 259, 260, 261,
+ 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 258, 259, 260, 261, 262, 263, 264, 265, 266,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 281, 282, -1, -1, 258, 259,
+ 260, 261, 262, 263, 291, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, -1, -1, -1, 286, 258, 259, 260,
+ 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
+ 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
+ 281, 282, -1, 284, 258, 259, 260, 261, 262, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 258,
+ 259, 260, 261, 262, 263, -1, 265, 266, 267, 268,
+ 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 282,
+};
+#define YYFINAL 33
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 291
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",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,"','",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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+"T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN",
+"T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_EXTENSION","T_CHAR",
+"T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED",
+"T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex","T_Imaginary",
+"T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE","T_ELLIPSIS",
+"T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL",
+};
+static const char *yyrule[] = {
+"$accept : program",
+"program :",
+"program : translation_unit",
+"translation_unit : external_declaration",
+"translation_unit : translation_unit external_declaration",
+"external_declaration : declaration",
+"external_declaration : function_definition",
+"external_declaration : ';'",
+"external_declaration : linkage_specification",
+"external_declaration : T_ASM T_ASMARG ';'",
+"external_declaration : error T_MATCHRBRACE",
+"external_declaration : error ';'",
+"braces : T_LBRACE T_MATCHRBRACE",
+"linkage_specification : T_EXTERN T_STRING_LITERAL braces",
+"linkage_specification : T_EXTERN T_STRING_LITERAL declaration",
+"declaration : decl_specifiers ';'",
+"declaration : decl_specifiers init_declarator_list ';'",
+"$$1 :",
+"declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'",
+"any_typedef : T_EXTENSION T_TYPEDEF",
+"any_typedef : T_TYPEDEF",
+"opt_declarator_list :",
+"opt_declarator_list : declarator_list",
+"declarator_list : declarator",
+"declarator_list : declarator_list ',' declarator",
+"$$2 :",
+"$$3 :",
+"function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE",
+"$$4 :",
+"function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE",
+"opt_declaration_list :",
+"opt_declaration_list : T_VA_DCL",
+"opt_declaration_list : declaration_list",
+"declaration_list : declaration",
+"declaration_list : declaration_list declaration",
+"decl_specifiers : decl_specifier",
+"decl_specifiers : decl_specifiers decl_specifier",
+"decl_specifier : storage_class",
+"decl_specifier : type_specifier",
+"decl_specifier : type_qualifier",
+"storage_class : T_AUTO",
+"storage_class : T_EXTERN",
+"storage_class : T_REGISTER",
+"storage_class : T_STATIC",
+"storage_class : T_INLINE",
+"storage_class : T_EXTENSION",
+"type_specifier : T_CHAR",
+"type_specifier : T_DOUBLE",
+"type_specifier : T_FLOAT",
+"type_specifier : T_INT",
+"type_specifier : T_LONG",
+"type_specifier : T_SHORT",
+"type_specifier : T_SIGNED",
+"type_specifier : T_UNSIGNED",
+"type_specifier : T_VOID",
+"type_specifier : T_Bool",
+"type_specifier : T_Complex",
+"type_specifier : T_Imaginary",
+"type_specifier : T_TYPEDEF_NAME",
+"type_specifier : struct_or_union_specifier",
+"type_specifier : enum_specifier",
+"type_qualifier : T_TYPE_QUALIFIER",
+"type_qualifier : T_DEFINE_NAME",
+"struct_or_union_specifier : struct_or_union any_id braces",
+"struct_or_union_specifier : struct_or_union braces",
+"struct_or_union_specifier : struct_or_union any_id",
+"struct_or_union : T_STRUCT",
+"struct_or_union : T_UNION",
+"init_declarator_list : init_declarator",
+"init_declarator_list : init_declarator_list ',' init_declarator",
+"init_declarator : declarator",
+"$$5 :",
+"init_declarator : declarator '=' $$5 T_INITIALIZER",
+"enum_specifier : enumeration any_id braces",
+"enum_specifier : enumeration braces",
+"enum_specifier : enumeration any_id",
+"enumeration : T_ENUM",
+"any_id : T_IDENTIFIER",
+"any_id : T_TYPEDEF_NAME",
+"declarator : pointer direct_declarator",
+"declarator : direct_declarator",
+"direct_declarator : identifier_or_ref",
+"direct_declarator : '(' declarator ')'",
+"direct_declarator : direct_declarator T_BRACKETS",
+"direct_declarator : direct_declarator '(' parameter_type_list ')'",
+"direct_declarator : direct_declarator '(' opt_identifier_list ')'",
+"pointer : '*' opt_type_qualifiers",
+"pointer : '*' opt_type_qualifiers pointer",
+"opt_type_qualifiers :",
+"opt_type_qualifiers : type_qualifier_list",
+"type_qualifier_list : type_qualifier",
+"type_qualifier_list : type_qualifier_list type_qualifier",
+"parameter_type_list : parameter_list",
+"parameter_type_list : parameter_list ',' T_ELLIPSIS",
+"parameter_list : parameter_declaration",
+"parameter_list : parameter_list ',' parameter_declaration",
+"parameter_declaration : decl_specifiers declarator",
+"parameter_declaration : decl_specifiers abs_declarator",
+"parameter_declaration : decl_specifiers",
+"opt_identifier_list :",
+"opt_identifier_list : identifier_list",
+"identifier_list : any_id",
+"identifier_list : identifier_list ',' any_id",
+"identifier_or_ref : any_id",
+"identifier_or_ref : '&' any_id",
+"abs_declarator : pointer",
+"abs_declarator : pointer direct_abs_declarator",
+"abs_declarator : direct_abs_declarator",
+"direct_abs_declarator : '(' abs_declarator ')'",
+"direct_abs_declarator : direct_abs_declarator T_BRACKETS",
+"direct_abs_declarator : T_BRACKETS",
+"direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'",
+"direct_abs_declarator : direct_abs_declarator '(' ')'",
+"direct_abs_declarator : '(' parameter_type_list ')'",
+"direct_abs_declarator : '(' ')'",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 1014 "grammar.y"
+
+/* lex.yy.c */
+#define BEGIN yy_start = 1 + 2 *
+
+#define CPP1 1
+#define INIT1 2
+#define INIT2 3
+#define CURLY 4
+#define LEXYACC 5
+#define ASM 6
+#define CPP_INLINE 7
+
+extern char *yytext;
+extern FILE *yyin, *yyout;
+
+static int curly; /* number of curly brace nesting levels */
+static int ly_count; /* number of occurances of %% */
+static int inc_depth; /* include nesting level */
+static SymbolTable *included_files; /* files already included */
+static int yy_start = 0; /* start state number */
+
+#define grammar_error(s) yaccError(s)
+
+static void
+yaccError (const char *msg)
+{
+ func_params = NULL;
+ put_error(); /* tell what line we're on, and what file */
+ fprintf(stderr, "%s at token '%s'\n", msg, yytext);
+}
+
+/* Initialize the table of type qualifier keywords recognized by the lexical
+ * analyzer.
+ */
+void
+init_parser (void)
+{
+ static const char *keywords[] = {
+ "const",
+ "restrict",
+ "volatile",
+ "interrupt",
+#ifdef vms
+ "noshare",
+ "readonly",
+#endif
+#if defined(MSDOS) || defined(OS2)
+ "__cdecl",
+ "__export",
+ "__far",
+ "__fastcall",
+ "__fortran",
+ "__huge",
+ "__inline",
+ "__interrupt",
+ "__loadds",
+ "__near",
+ "__pascal",
+ "__saveregs",
+ "__segment",
+ "__stdcall",
+ "__syscall",
+ "_cdecl",
+ "_cs",
+ "_ds",
+ "_es",
+ "_export",
+ "_far",
+ "_fastcall",
+ "_fortran",
+ "_huge",
+ "_interrupt",
+ "_loadds",
+ "_near",
+ "_pascal",
+ "_saveregs",
+ "_seg",
+ "_segment",
+ "_ss",
+ "cdecl",
+ "far",
+ "huge",
+ "near",
+ "pascal",
+#ifdef OS2
+ "__far16",
+#endif
+#endif
+#ifdef __GNUC__
+ /* gcc aliases */
+ "__builtin_va_arg",
+ "__builtin_va_list",
+ "__const",
+ "__const__",
+ "__inline",
+ "__inline__",
+ "__restrict",
+ "__restrict__",
+ "__volatile",
+ "__volatile__",
+#endif
+ };
+ unsigned i;
+
+ /* Initialize type qualifier table. */
+ type_qualifiers = new_symbol_table();
+ for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) {
+ new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE);
+ }
+}
+
+/* Process the C source file. Write function prototypes to the standard
+ * output. Convert function definitions and write the converted source
+ * code to a temporary file.
+ */
+void
+process_file (FILE *infile, char *name)
+{
+ char *s;
+
+ if (strlen(name) > 2) {
+ s = name + strlen(name) - 2;
+ if (*s == '.') {
+ ++s;
+ if (*s == 'l' || *s == 'y')
+ BEGIN LEXYACC;
+#if defined(MSDOS) || defined(OS2)
+ if (*s == 'L' || *s == 'Y')
+ BEGIN LEXYACC;
+#endif
+ }
+ }
+
+ included_files = new_symbol_table();
+ typedef_names = new_symbol_table();
+ define_names = new_symbol_table();
+ inc_depth = -1;
+ curly = 0;
+ ly_count = 0;
+ func_params = NULL;
+ yyin = infile;
+ include_file(strcpy(base_file, name), func_style != FUNC_NONE);
+ if (file_comments) {
+#if OPT_LINTLIBRARY
+ if (lintLibrary()) {
+ put_blankline(stdout);
+ begin_tracking();
+ }
+#endif
+ put_string(stdout, "/* ");
+ put_string(stdout, cur_file_name());
+ put_string(stdout, " */\n");
+ }
+ yyparse();
+ free_symbol_table(define_names);
+ free_symbol_table(typedef_names);
+ free_symbol_table(included_files);
+}
+
+#ifdef NO_LEAKS
+void
+free_parser(void)
+{
+ free_symbol_table (type_qualifiers);
+#ifdef FLEX_SCANNER
+ if (yy_current_buffer != 0)
+ yy_delete_buffer(yy_current_buffer);
+#endif
+}
+#endif
+#line 1004 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 10:
+#line 377 "grammar.y"
+ {
+ yyerrok;
+ }
+break;
+case 11:
+#line 381 "grammar.y"
+ {
+ yyerrok;
+ }
+break;
+case 13:
+#line 392 "grammar.y"
+ {
+ /* Provide an empty action here so bison will not complain about
+ * incompatible types in the default action it normally would
+ * have generated.
+ */
+ }
+break;
+case 14:
+#line 399 "grammar.y"
+ {
+ /* empty */
+ }
+break;
+case 15:
+#line 406 "grammar.y"
+ {
+#if OPT_LINTLIBRARY
+ if (types_out && want_typedef()) {
+ gen_declarations(&yystack.l_mark[-1].decl_spec, (DeclaratorList *)0);
+ flush_varargs();
+ }
+#endif
+ free_decl_spec(&yystack.l_mark[-1].decl_spec);
+ end_typedef();
+ }
+break;
+case 16:
+#line 417 "grammar.y"
+ {
+ if (func_params != NULL) {
+ set_param_types(func_params, &yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
+ } else {
+ gen_declarations(&yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_list(&yystack.l_mark[-1].decl_list);
+ }
+ free_decl_spec(&yystack.l_mark[-2].decl_spec);
+ end_typedef();
+ }
+break;
+case 17:
+#line 431 "grammar.y"
+ {
+ cur_decl_spec_flags = yystack.l_mark[0].decl_spec.flags;
+ free_decl_spec(&yystack.l_mark[0].decl_spec);
+ }
+break;
+case 18:
+#line 436 "grammar.y"
+ {
+ end_typedef();
+ }
+break;
+case 19:
+#line 443 "grammar.y"
+ {
+ begin_typedef();
+ }
+break;
+case 20:
+#line 447 "grammar.y"
+ {
+ begin_typedef();
+ }
+break;
+case 23:
+#line 459 "grammar.y"
+ {
+ int flags = cur_decl_spec_flags;
+
+ /* If the typedef is a pointer type, then reset the short type
+ * flags so it does not get promoted.
+ */
+ if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
+ flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
+ new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
+ free_declarator(yystack.l_mark[0].declarator);
+ }
+break;
+case 24:
+#line 471 "grammar.y"
+ {
+ int flags = cur_decl_spec_flags;
+
+ if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
+ flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
+ new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
+ free_declarator(yystack.l_mark[0].declarator);
+ }
+break;
+case 25:
+#line 483 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[-1].decl_spec);
+ if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
+ yyerror("syntax error");
+ YYERROR;
+ }
+ func_params = &(yystack.l_mark[0].declarator->head->params);
+ func_params->begin_comment = cur_file->begin_comment;
+ func_params->end_comment = cur_file->end_comment;
+ }
+break;
+case 26:
+#line 494 "grammar.y"
+ {
+ /* If we're converting to K&R and we've got a nominally K&R
+ * function which has a parameter which is ANSI (i.e., a prototyped
+ * function pointer), then we must override the deciphered value of
+ * 'func_def' so that the parameter will be converted.
+ */
+ if (func_style == FUNC_TRADITIONAL
+ && haveAnsiParam()
+ && yystack.l_mark[-3].declarator->head->func_def == func_style) {
+ yystack.l_mark[-3].declarator->head->func_def = FUNC_BOTH;
+ }
+
+ func_params = NULL;
+
+ if (cur_file->convert)
+ gen_func_definition(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
+ gen_prototype(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_spec(&yystack.l_mark[-4].decl_spec);
+ free_declarator(yystack.l_mark[-3].declarator);
+ }
+break;
+case 28:
+#line 519 "grammar.y"
+ {
+ if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
+ yyerror("syntax error");
+ YYERROR;
+ }
+ func_params = &(yystack.l_mark[0].declarator->head->params);
+ func_params->begin_comment = cur_file->begin_comment;
+ func_params->end_comment = cur_file->end_comment;
+ }
+break;
+case 29:
+#line 529 "grammar.y"
+ {
+ DeclSpec decl_spec;
+
+ func_params = NULL;
+
+ new_decl_spec(&decl_spec, dft_decl_spec(), yystack.l_mark[-4].declarator->begin, DS_NONE);
+ if (cur_file->convert)
+ gen_func_definition(&decl_spec, yystack.l_mark[-4].declarator);
+ gen_prototype(&decl_spec, yystack.l_mark[-4].declarator);
+#if OPT_LINTLIBRARY
+ flush_varargs();
+#endif
+ free_decl_spec(&decl_spec);
+ free_declarator(yystack.l_mark[-4].declarator);
+ }
+break;
+case 36:
+#line 560 "grammar.y"
+ {
+ join_decl_specs(&yyval.decl_spec, &yystack.l_mark[-1].decl_spec, &yystack.l_mark[0].decl_spec);
+ free(yystack.l_mark[-1].decl_spec.text);
+ free(yystack.l_mark[0].decl_spec.text);
+ }
+break;
+case 40:
+#line 575 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 41:
+#line 579 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_EXTERN);
+ }
+break;
+case 42:
+#line 583 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 43:
+#line 587 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_STATIC);
+ }
+break;
+case 44:
+#line 591 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_INLINE);
+ }
+break;
+case 45:
+#line 595 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_JUNK);
+ }
+break;
+case 46:
+#line 602 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
+ }
+break;
+case 47:
+#line 606 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 48:
+#line 610 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_FLOAT);
+ }
+break;
+case 49:
+#line 614 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 50:
+#line 618 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 51:
+#line 622 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_SHORT);
+ }
+break;
+case 52:
+#line 626 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 53:
+#line 630 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 54:
+#line 634 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 55:
+#line 638 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
+ }
+break;
+case 56:
+#line 642 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 57:
+#line 646 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 58:
+#line 650 "grammar.y"
+ {
+ Symbol *s;
+ s = find_symbol(typedef_names, yystack.l_mark[0].text.text);
+ if (s != NULL)
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
+ }
+break;
+case 61:
+#line 662 "grammar.y"
+ {
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
+ }
+break;
+case 62:
+#line 666 "grammar.y"
+ {
+ /* This rule allows the <pointer> nonterminal to scan #define
+ * names as if they were type modifiers.
+ */
+ Symbol *s;
+ s = find_symbol(define_names, yystack.l_mark[0].text.text);
+ if (s != NULL)
+ new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
+ }
+break;
+case 63:
+#line 679 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s %s", yystack.l_mark[-2].text.text, yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
+ }
+break;
+case 64:
+#line 686 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 65:
+#line 693 "grammar.y"
+ {
+ (void)sprintf(buf, "%s %s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text);
+ new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 66:
+#line 701 "grammar.y"
+ {
+ imply_typedef(yyval.text.text);
+ }
+break;
+case 67:
+#line 705 "grammar.y"
+ {
+ imply_typedef(yyval.text.text);
+ }
+break;
+case 68:
+#line 712 "grammar.y"
+ {
+ new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator);
+ }
+break;
+case 69:
+#line 716 "grammar.y"
+ {
+ add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator);
+ }
+break;
+case 70:
+#line 723 "grammar.y"
+ {
+ if (yystack.l_mark[0].declarator->func_def != FUNC_NONE && func_params == NULL &&
+ func_style == FUNC_TRADITIONAL && cur_file->convert) {
+ gen_func_declarator(yystack.l_mark[0].declarator);
+ fputs(cur_text(), cur_file->tmp_file);
+ }
+ cur_declarator = yyval.declarator;
+ }
+break;
+case 71:
+#line 732 "grammar.y"
+ {
+ if (yystack.l_mark[-1].declarator->func_def != FUNC_NONE && func_params == NULL &&
+ func_style == FUNC_TRADITIONAL && cur_file->convert) {
+ gen_func_declarator(yystack.l_mark[-1].declarator);
+ fputs(" =", cur_file->tmp_file);
+ }
+ }
+break;
+case 73:
+#line 744 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "enum %s", yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
+ }
+break;
+case 74:
+#line 751 "grammar.y"
+ {
+ char *s;
+ if ((s = implied_typedef()) == 0)
+ (void)sprintf(s = buf, "%s {}", yystack.l_mark[-1].text.text);
+ new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 75:
+#line 758 "grammar.y"
+ {
+ (void)sprintf(buf, "enum %s", yystack.l_mark[0].text.text);
+ new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
+ }
+break;
+case 76:
+#line 766 "grammar.y"
+ {
+ imply_typedef("enum");
+ yyval.text = yystack.l_mark[0].text;
+ }
+break;
+case 79:
+#line 779 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[0].declarator;
+ (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-1].text.begin;
+ yyval.declarator->pointer = TRUE;
+ }
+break;
+case 81:
+#line 792 "grammar.y"
+ {
+ yyval.declarator = new_declarator(yystack.l_mark[0].text.text, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin);
+ }
+break;
+case 82:
+#line 796 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "(%s)", yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-2].text.begin;
+ }
+break;
+case 83:
+#line 804 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ }
+break;
+case 84:
+#line 811 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
+ yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 85:
+#line 819 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
+ yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
+ yyval.declarator->func_def = FUNC_TRADITIONAL;
+ }
+break;
+case 86:
+#line 830 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "*%s", yystack.l_mark[0].text.text);
+ yyval.text.begin = yystack.l_mark[-1].text.begin;
+ }
+break;
+case 87:
+#line 835 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "*%s%s", yystack.l_mark[-1].text.text, yystack.l_mark[0].text.text);
+ yyval.text.begin = yystack.l_mark[-2].text.begin;
+ }
+break;
+case 88:
+#line 843 "grammar.y"
+ {
+ strcpy(yyval.text.text, "");
+ yyval.text.begin = 0L;
+ }
+break;
+case 90:
+#line 852 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "%s ", yystack.l_mark[0].decl_spec.text);
+ yyval.text.begin = yystack.l_mark[0].decl_spec.begin;
+ free(yystack.l_mark[0].decl_spec.text);
+ }
+break;
+case 91:
+#line 858 "grammar.y"
+ {
+ (void)sprintf(yyval.text.text, "%s%s ", yystack.l_mark[-1].text.text, yystack.l_mark[0].decl_spec.text);
+ yyval.text.begin = yystack.l_mark[-1].text.begin;
+ free(yystack.l_mark[0].decl_spec.text);
+ }
+break;
+case 93:
+#line 868 "grammar.y"
+ {
+ add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "...");
+ }
+break;
+case 94:
+#line 875 "grammar.y"
+ {
+ new_param_list(&yyval.param_list, yystack.l_mark[0].parameter);
+ }
+break;
+case 95:
+#line 879 "grammar.y"
+ {
+ add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter);
+ }
+break;
+case 96:
+#line 886 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[-1].decl_spec);
+ yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
+ }
+break;
+case 97:
+#line 891 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[-1].decl_spec);
+ yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
+ }
+break;
+case 98:
+#line 896 "grammar.y"
+ {
+ check_untagged(&yystack.l_mark[0].decl_spec);
+ yyval.parameter = new_parameter(&yystack.l_mark[0].decl_spec, (Declarator *)0);
+ }
+break;
+case 99:
+#line 904 "grammar.y"
+ {
+ new_ident_list(&yyval.param_list);
+ }
+break;
+case 101:
+#line 912 "grammar.y"
+ {
+ new_ident_list(&yyval.param_list);
+ add_ident_list(&yyval.param_list, &yyval.param_list, yystack.l_mark[0].text.text);
+ }
+break;
+case 102:
+#line 917 "grammar.y"
+ {
+ add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text);
+ }
+break;
+case 103:
+#line 924 "grammar.y"
+ {
+ yyval.text = yystack.l_mark[0].text;
+ }
+break;
+case 104:
+#line 928 "grammar.y"
+ {
+#if OPT_LINTLIBRARY
+ if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */
+ yyval.text = yystack.l_mark[0].text;
+ } else
+#endif
+ (void)sprintf(yyval.text.text, "&%s", yystack.l_mark[0].text.text);
+ yyval.text.begin = yystack.l_mark[-1].text.begin;
+ }
+break;
+case 105:
+#line 941 "grammar.y"
+ {
+ yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
+ }
+break;
+case 106:
+#line 945 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[0].declarator;
+ (void)sprintf(buf, "%s%s", yystack.l_mark[-1].text.text, yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-1].text.begin;
+ }
+break;
+case 108:
+#line 957 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "(%s)", yyval.declarator->text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ yyval.declarator->begin = yystack.l_mark[-2].text.begin;
+ }
+break;
+case 109:
+#line 965 "grammar.y"
+ {
+ yyval.declarator = yystack.l_mark[-1].declarator;
+ (void)sprintf(buf, "%s%s", yyval.declarator->text, yystack.l_mark[0].text.text);
+ free(yyval.declarator->text);
+ yyval.declarator->text = xstrdup(buf);
+ }
+break;
+case 110:
+#line 972 "grammar.y"
+ {
+ yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
+ }
+break;
+case 111:
+#line 976 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-3].declarator->begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
+ yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 112:
+#line 984 "grammar.y"
+ {
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].declarator->begin);
+ yyval.declarator->func_stack = yystack.l_mark[-2].declarator;
+ yyval.declarator->head = (yystack.l_mark[-2].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-2].declarator->head;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 113:
+#line 991 "grammar.y"
+ {
+ Declarator *d;
+
+ d = new_declarator("", "", yystack.l_mark[-2].text.begin);
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].text.begin);
+ yyval.declarator->params = yystack.l_mark[-1].param_list;
+ yyval.declarator->func_stack = d;
+ yyval.declarator->head = yyval.declarator;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+case 114:
+#line 1002 "grammar.y"
+ {
+ Declarator *d;
+
+ d = new_declarator("", "", yystack.l_mark[-1].text.begin);
+ yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-1].text.begin);
+ yyval.declarator->func_stack = d;
+ yyval.declarator->head = yyval.declarator;
+ yyval.declarator->func_def = FUNC_ANSI;
+ }
+break;
+#line 1884 "/dev/stdout"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.09.out b/tools/regression/usr.bin/yacc/regress.09.out
new file mode 100644
index 000000000000..5eaf2588b1b9
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.09.out
@@ -0,0 +1,603 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "pure_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM &yylval
+#define YYLEX_DECL() yylex(YYSTYPE *yylval)
+#define YYERROR_DECL() yyerror(const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 34 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define DIGIT 257
+#define LETTER 258
+#define UMINUS 259
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short yylen[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short yydefred[] = { 1,
+ 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
+ 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
+ 10, 11,
+};
+static const short yydgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short yysindex[] = { 0,
+ -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
+ -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
+ -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
+ 0, 0,
+};
+static const short yyrindex[] = { 0,
+ 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
+ 0, 0,
+};
+static const short yygindex[] = { 0,
+ 0, 65, 0,
+};
+#define YYTABLESIZE 220
+static const short yytable[] = { 6,
+ 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
+ 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
+ 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
+ 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
+ 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
+ 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
+ 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
+ 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
+ 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
+ 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
+ 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
+ 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
+ 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
+ 0, 0, 0, 0, 0, 16, 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, 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, 2, 3, 4, 3, 12,
+};
+static const short yycheck[] = { 40,
+ 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
+ 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
+ -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
+ -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
+ -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
+ 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
+ -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
+ 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
+ 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
+ -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
+ -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
+ -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
+ -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
+ -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 259
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr '+' expr",
+"expr : expr '-' expr",
+"expr : expr '*' expr",
+"expr : expr '/' expr",
+"expr : expr '%' expr",
+"expr : expr '&' expr",
+"expr : expr '|' expr",
+"expr : '-' expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 72 "pure_calc.y"
+ /* start of programs */
+
+#ifdef YYBYACC
+static int YYLEX_DECL();
+#endif
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+YYERROR_DECL()
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+YYLEX_DECL()
+{
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ *yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ *yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 276 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 34 "pure_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 38 "pure_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 40 "pure_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 44 "pure_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 46 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 48 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 50 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 52 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 54 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 56 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 58 "pure_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 60 "pure_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 62 "pure_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 67 "pure_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 69 "pure_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 542 "/dev/stdout"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.10.out b/tools/regression/usr.bin/yacc/regress.10.out
new file mode 100644
index 000000000000..02cba4fe681b
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.10.out
@@ -0,0 +1,433 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "pure_error.y"
+
+#ifdef YYBISON
+#define YYSTYPE int
+#define YYLEX_PARAM &yylval
+#define YYLEX_DECL() yylex(YYSTYPE *yylval)
+#define YYERROR_DECL() yyerror(const char *s)
+int YYLEX_DECL();
+static void YYERROR_DECL();
+#endif
+
+#line 29 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0,
+};
+static const short yylen[] = { 2,
+ 1,
+};
+static const short yydefred[] = { 0,
+ 1, 0,
+};
+static const short yydgoto[] = { 2,
+};
+static const short yysindex[] = { -256,
+ 0, 0,
+};
+static const short yyrindex[] = { 0,
+ 0, 0,
+};
+static const short yygindex[] = { 0,
+};
+#define YYTABLESIZE 0
+static const short yytable[] = { 1,
+};
+static const short yycheck[] = { 256,
+};
+#define YYFINAL 2
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 0
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",
+};
+static const char *yyrule[] = {
+"$accept : S",
+"S : error",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 17 "pure_error.y"
+
+#include <stdio.h>
+
+#ifdef YYBYACC
+extern int YYLEX_DECL();
+#endif
+
+int
+main(void)
+{
+ printf("yyparse() = %d\n", yyparse());
+ return 0;
+}
+
+int
+yylex(YYSTYPE *value)
+{
+ return value ? 0 : -1;
+}
+
+static void
+yyerror(const char* s)
+{
+ printf("%s\n", s);
+}
+#line 167 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.11.out b/tools/regression/usr.bin/yacc/regress.11.out
new file mode 100644
index 000000000000..1d6561d5e1b8
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.11.out
@@ -0,0 +1,613 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "quote_calc.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 28 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define ADD 258
+#define OP_SUB 259
+#define SUB 260
+#define OP_MUL 261
+#define MUL 262
+#define OP_DIV 263
+#define DIV 264
+#define OP_MOD 265
+#define MOD 266
+#define OP_AND 267
+#define AND 268
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short yylen[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short yydefred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short yydgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short yysindex[] = { 0,
+ -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
+ 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short yyrindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short yygindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 258
+static const short yytable[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
+ 23, 20, 4, 21, 5, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 17, 0, 18,
+ 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
+ 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short yycheck[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
+ 269, 265, 10, 267, 10, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, -1, 261,
+ -1, 263, -1, 265, -1, 267, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
+ 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
+ 261, 261, 263, 263, 265, 265, 267, 267,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
+"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr OP_ADD expr",
+"expr : expr OP_SUB expr",
+"expr : expr OP_MUL expr",
+"expr : expr OP_DIV expr",
+"expr : expr OP_MOD expr",
+"expr : expr OP_AND expr",
+"expr : expr '|' expr",
+"expr : OP_SUB expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 286 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 552 "/dev/stdout"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.12.out b/tools/regression/usr.bin/yacc/regress.12.out
new file mode 100644
index 000000000000..d3d03b94db76
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.12.out
@@ -0,0 +1,613 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "quote_calc2.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 28 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define ADD 258
+#define OP_SUB 259
+#define SUB 260
+#define OP_MUL 261
+#define MUL 262
+#define OP_DIV 263
+#define DIV 264
+#define OP_MOD 265
+#define MOD 266
+#define OP_AND 267
+#define AND 268
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short yylen[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short yydefred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short yydgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short yysindex[] = { 0,
+ -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
+ 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short yyrindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short yygindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 259
+static const short yytable[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
+ 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
+ 18, 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
+ 15, 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short yycheck[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
+ 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
+ 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
+ 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
+ 260, 262, 262, 264, 264, 266, 266, 268, 268,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
+"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr \"ADD\" expr",
+"expr : expr \"SUB\" expr",
+"expr : expr \"MUL\" expr",
+"expr : expr \"DIV\" expr",
+"expr : expr \"MOD\" expr",
+"expr : expr \"AND\" expr",
+"expr : expr '|' expr",
+"expr : \"SUB\" expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc2.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 286 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc2.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc2.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc2.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc2.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc2.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc2.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc2.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc2.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc2.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 552 "/dev/stdout"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.13.out b/tools/regression/usr.bin/yacc/regress.13.out
new file mode 100644
index 000000000000..fc68da8396c5
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.13.out
@@ -0,0 +1,608 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "quote_calc3.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 28 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short yylen[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short yydefred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short yydgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short yysindex[] = { 0,
+ -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
+ 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short yyrindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short yygindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 258
+static const short yytable[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
+ 23, 20, 4, 21, 5, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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, 22, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 16, 0, 17, 0, 18,
+ 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
+ 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short yycheck[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
+ 269, 265, 10, 267, 10, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, -1, 261,
+ -1, 263, -1, 265, -1, 267, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
+ 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
+ 261, 261, 263, 263, 265, 265, 267, 267,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
+"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
+"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr OP_ADD expr",
+"expr : expr OP_SUB expr",
+"expr : expr OP_MUL expr",
+"expr : expr OP_DIV expr",
+"expr : expr OP_MOD expr",
+"expr : expr OP_AND expr",
+"expr : expr '|' expr",
+"expr : OP_SUB expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc3.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 281 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc3.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc3.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc3.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc3.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc3.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc3.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc3.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc3.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc3.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 547 "/dev/stdout"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.14.out b/tools/regression/usr.bin/yacc/regress.14.out
new file mode 100644
index 000000000000..96fdb57b6d98
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.14.out
@@ -0,0 +1,608 @@
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 2 "quote_calc4.y"
+# include <stdio.h>
+# include <ctype.h>
+
+int regs[26];
+int base;
+
+int yylex(void);
+static void yyerror(const char *s);
+
+#line 28 "/dev/stdout"
+
+#ifndef YYSTYPE
+typedef int YYSTYPE;
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define OP_ADD 257
+#define OP_SUB 259
+#define OP_MUL 261
+#define OP_DIV 263
+#define OP_MOD 265
+#define OP_AND 267
+#define DIGIT 269
+#define LETTER 270
+#define UMINUS 271
+#define YYERRCODE 256
+static const short yylhs[] = { -1,
+ 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 3,
+};
+static const short yylen[] = { 2,
+ 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 2, 1, 1, 1, 2,
+};
+static const short yydefred[] = { 1,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
+ 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
+ 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
+ 0, 0,
+};
+static const short yydgoto[] = { 1,
+ 7, 8, 9,
+};
+static const short yysindex[] = { 0,
+ -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
+ 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
+ -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
+ -121, -243,
+};
+static const short yyrindex[] = { 0,
+ 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
+ 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
+ 3, -4,
+};
+static const short yygindex[] = { 0,
+ 0, 42, 0,
+};
+#define YYTABLESIZE 259
+static const short yytable[] = { 16,
+ 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
+ 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
+ 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
+ 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
+ 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
+ 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 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,
+ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
+ 18, 0, 19, 0, 20, 0, 21, 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, 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, 2, 0, 0,
+ 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
+ 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
+ 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
+ 15, 16, 15, 16, 15, 16, 15, 16, 15,
+};
+static const short yycheck[] = { 10,
+ 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
+ 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
+ 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
+ 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
+ -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
+ -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
+ 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
+ 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
+ -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
+ 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
+ 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
+ 260, 262, 262, 264, 264, 266, 266, 268, 268,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 271
+#if YYDEBUG
+static const char *yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",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,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,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,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,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,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,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
+"\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
+"OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",
+};
+static const char *yyrule[] = {
+"$accept : list",
+"list :",
+"list : list stat '\\n'",
+"list : list error '\\n'",
+"stat : expr",
+"stat : LETTER '=' expr",
+"expr : '(' expr ')'",
+"expr : expr \"ADD-operator\" expr",
+"expr : expr \"SUB-operator\" expr",
+"expr : expr \"MUL-operator\" expr",
+"expr : expr \"DIV-operator\" expr",
+"expr : expr \"MOD-operator\" expr",
+"expr : expr \"AND-operator\" expr",
+"expr : expr '|' expr",
+"expr : \"SUB-operator\" expr",
+"expr : LETTER",
+"expr : number",
+"number : DIGIT",
+"number : number DIGIT",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+
+#define YYINITSTACKSIZE 500
+
+typedef struct {
+ unsigned stacksize;
+ short *s_base;
+ short *s_mark;
+ short *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 73 "quote_calc4.y"
+ /* start of programs */
+
+int
+main (void)
+{
+ while(!feof(stdin)) {
+ yyparse();
+ }
+ return 0;
+}
+
+static void
+yyerror(const char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+int
+yylex(void) {
+ /* lexical analysis routine */
+ /* returns LETTER for a lower case letter, yylval = 0 through 25 */
+ /* return DIGIT for a digit, yylval = 0 through 9 */
+ /* all other characters are returned immediately */
+
+ int c;
+
+ while( (c=getchar()) == ' ' ) { /* skip blanks */ }
+
+ /* c is now nonblank */
+
+ if( islower( c )) {
+ yylval = c - 'a';
+ return ( LETTER );
+ }
+ if( isdigit( c )) {
+ yylval = c - '0';
+ return ( DIGIT );
+ }
+ return( c );
+}
+#line 281 "/dev/stdout"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = data->s_mark - data->s_base;
+ newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return -1;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return -1;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ yyerror("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 3:
+#line 35 "quote_calc4.y"
+ { yyerrok ; }
+break;
+case 4:
+#line 39 "quote_calc4.y"
+ { printf("%d\n",yystack.l_mark[0]);}
+break;
+case 5:
+#line 41 "quote_calc4.y"
+ { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
+break;
+case 6:
+#line 45 "quote_calc4.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 7:
+#line 47 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
+break;
+case 8:
+#line 49 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
+break;
+case 9:
+#line 51 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
+break;
+case 10:
+#line 53 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
+break;
+case 11:
+#line 55 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
+break;
+case 12:
+#line 57 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
+break;
+case 13:
+#line 59 "quote_calc4.y"
+ { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
+break;
+case 14:
+#line 61 "quote_calc4.y"
+ { yyval = - yystack.l_mark[0]; }
+break;
+case 15:
+#line 63 "quote_calc4.y"
+ { yyval = regs[yystack.l_mark[0]]; }
+break;
+case 17:
+#line 68 "quote_calc4.y"
+ { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
+break;
+case 18:
+#line 70 "quote_calc4.y"
+ { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
+break;
+#line 547 "/dev/stdout"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (short) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ yyerror("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}
diff --git a/tools/regression/usr.bin/yacc/regress.sh b/tools/regression/usr.bin/yacc/regress.sh
new file mode 100755
index 000000000000..4517084dde45
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.sh
@@ -0,0 +1,26 @@
+# $FreeBSD$
+
+LC_ALL=C; export LC_ALL
+
+echo 1..15
+
+REGRESSION_START($1)
+
+REGRESSION_TEST(`00', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout undefined.y')
+REGRESSION_TEST(`01', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout calc.y')
+REGRESSION_TEST(`02', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout calc1.y')
+REGRESSION_TEST(`03', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout calc3.y')
+REGRESSION_TEST(`04', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout code_calc.y')
+REGRESSION_TEST(`05', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout code_error.y')
+REGRESSION_TEST(`06', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout error.y')
+REGRESSION_TEST(`07', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout ftp.y')
+REGRESSION_TEST(`08', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout grammar.y')
+REGRESSION_TEST(`09', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout pure_calc.y')
+REGRESSION_TEST(`10', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout pure_error.y')
+REGRESSION_TEST(`11', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout quote_calc.y')
+REGRESSION_TEST(`12', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout quote_calc2.y')
+REGRESSION_TEST(`13', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout quote_calc3.y')
+REGRESSION_TEST(`14', `/usr/obj/usr/src/usr.bin/yacc/yacc -b regress -o /dev/stdout quote_calc4.y')
+
+REGRESSION_END()
+
diff --git a/tools/regression/usr.bin/yacc/regress.t b/tools/regression/usr.bin/yacc/regress.t
new file mode 100644
index 000000000000..a82aacd9886f
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/regress.t
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $FreeBSD$
+
+cd `dirname $0`
+
+m4 ../regress.m4 regress.sh | sh
diff --git a/tools/regression/usr.bin/yacc/undefined.y b/tools/regression/usr.bin/yacc/undefined.y
new file mode 100644
index 000000000000..33ba005e4f57
--- /dev/null
+++ b/tools/regression/usr.bin/yacc/undefined.y
@@ -0,0 +1,5 @@
+%type <int> rule
+%%
+rule:
+ ;
+%%
diff --git a/usr.bin/Makefile b/usr.bin/Makefile
index bcdfbcda485b..6f60756d9ef0 100644
--- a/usr.bin/Makefile
+++ b/usr.bin/Makefile
@@ -105,6 +105,7 @@ SUBDIR= alias \
mkfifo \
mklocale \
mktemp \
+ mkulzma \
mkuzip \
mt \
ncal \
diff --git a/usr.bin/ar/acpyacc.y b/usr.bin/ar/acpyacc.y
index 99a23c755c33..5d15e8db5691 100644
--- a/usr.bin/ar/acpyacc.y
+++ b/usr.bin/ar/acpyacc.y
@@ -54,7 +54,6 @@ struct list {
extern int yylex(void);
-extern int yyparse(void);
static void yyerror(const char *);
static void arscp_addlib(char *archive, struct list *list);
diff --git a/usr.bin/bc/bc.y b/usr.bin/bc/bc.y
index 55df7b33ac31..f7425f24628d 100644
--- a/usr.bin/bc/bc.y
+++ b/usr.bin/bc/bc.y
@@ -69,7 +69,6 @@ struct tree {
ssize_t index;
};
-int yyparse(void);
int yywrap(void);
int fileindex;
diff --git a/usr.bin/chat/chat.c b/usr.bin/chat/chat.c
index 056af3749f9d..86e6cfb3237f 100644
--- a/usr.bin/chat/chat.c
+++ b/usr.bin/chat/chat.c
@@ -408,6 +408,7 @@ chat_logf(const char *fmt, ...)
va_start(args, fmt);
vfmtmsg(line, sizeof(line), fmt, args);
+ va_end(args);
if (to_log)
syslog(LOG_INFO, "%s", line);
if (to_stderr)
@@ -425,6 +426,7 @@ fatal(int code, const char *fmt, ...)
va_start(args, fmt);
vfmtmsg(line, sizeof(line), fmt, args);
+ va_end(args);
if (to_log)
syslog(LOG_ERR, "%s", line);
if (to_stderr)
diff --git a/usr.bin/ctlstat/ctlstat.8 b/usr.bin/ctlstat/ctlstat.8
index a213cc9470ff..27386f8d8ac2 100644
--- a/usr.bin/ctlstat/ctlstat.8
+++ b/usr.bin/ctlstat/ctlstat.8
@@ -86,8 +86,8 @@ Notation (JSON) format.
No statistics are computed in this mode, only raw numbers are displayed.
.It Fl l Ar lun
Request statistics for the specified LUN.
-This option is incompatible with total (
-.Fl t )
+This option is incompatible with total
+.Fl ( t )
mode.
.It Fl n Ar numdevs
Display statistics for this many devices.
diff --git a/usr.bin/fetch/fetch.1 b/usr.bin/fetch/fetch.1
index d8f5bb6f19da..900c0ee26eee 100644
--- a/usr.bin/fetch/fetch.1
+++ b/usr.bin/fetch/fetch.1
@@ -1,5 +1,5 @@
.\"-
-.\" Copyright (c) 2000-2012 Dag-Erling Smørgrav
+.\" Copyright (c) 2000-2011 Dag-Erling Smørgrav
.\" All rights reserved.
.\" Portions Copyright (c) 1999 Massachusetts Institute of Technology; used
.\" by permission.
@@ -29,7 +29,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd February 28, 2012
+.Dd September 27, 2011
.Dt FETCH 1
.Os
.Sh NAME
@@ -214,11 +214,6 @@ When the
flag is specified, wait this many seconds between successive retries.
.El
.Pp
-.Ar URL
-.Bd -literal
- <scheme>:(//(<user>(:<pwd>)?@)?<host>(:<port>)?)?/(<document>)?
-.Ed
-.Pp
If
.Nm
receives a
diff --git a/usr.bin/find/getdate.y b/usr.bin/find/getdate.y
index 81a9c47735e5..16ffb6eeff78 100644
--- a/usr.bin/find/getdate.y
+++ b/usr.bin/find/getdate.y
@@ -60,11 +60,9 @@ __FBSDID("$FreeBSD$");
#include <time.h>
-#define yyparse getdate_yyparse
#define yylex getdate_yylex
#define yyerror getdate_yyerror
-static int yyparse(void);
static int yylex(void);
static int yyerror(const char *);
diff --git a/usr.bin/fstat/Makefile b/usr.bin/fstat/Makefile
index c59e123e62ce..8ea8da3a473a 100644
--- a/usr.bin/fstat/Makefile
+++ b/usr.bin/fstat/Makefile
@@ -4,7 +4,7 @@
PROG= fstat
SRCS= fstat.c fuser.c main.c
LINKS= ${BINDIR}/fstat ${BINDIR}/fuser
-DPADD= ${LIBKVM}
+DPADD= ${LIBKVM} ${LIBUTIL} ${LIBPROCSTAT}
LDADD= -lkvm -lutil -lprocstat
MAN1= fuser.1 fstat.1
diff --git a/usr.bin/fstat/fstat.c b/usr.bin/fstat/fstat.c
index fe225a04d384..265791d1daac 100644
--- a/usr.bin/fstat/fstat.c
+++ b/usr.bin/fstat/fstat.c
@@ -244,7 +244,7 @@ print_file_info(struct procstat *procstat, struct filestat *fst,
for (d = devs; d != NULL; d = d->next)
if (d->fsid == vn.vn_fsid) {
fsmatch = 1;
- if ((unsigned)d->ino == vn.vn_fileid) {
+ if (d->ino == vn.vn_fileid) {
filename = d->name;
break;
}
diff --git a/usr.bin/gprof/lookup.c b/usr.bin/gprof/lookup.c
index 0f3b76301ab0..256136090db3 100644
--- a/usr.bin/gprof/lookup.c
+++ b/usr.bin/gprof/lookup.c
@@ -66,6 +66,12 @@ nllookup( address )
printf( "[nllookup] %d (%d) probes\n" , probes , nname-1 );
}
# endif /* DEBUG */
+#if defined(__arm__)
+ if (nl[middle].name[0] == '$' &&
+ nl[middle-1].value == nl[middle].value)
+ middle--;
+#endif
+
return &nl[ middle ];
}
if ( nl[ middle ].value > address ) {
diff --git a/usr.bin/join/join.1 b/usr.bin/join/join.1
index 3d2b789d8a7e..3b91390a1e63 100644
--- a/usr.bin/join/join.1
+++ b/usr.bin/join/join.1
@@ -107,7 +107,7 @@ representing the join field.
The elements of list must be either comma
.Pq Ql \&,
or whitespace separated.
-(The letter requires quoting to protect it from the shell, or, a simpler
+(The latter requires quoting to protect it from the shell, or, a simpler
approach is to use multiple
.Fl o
options.)
diff --git a/usr.bin/kdump/mkioctls b/usr.bin/kdump/mkioctls
index eefe14cce1a0..0dac68425b0e 100644
--- a/usr.bin/kdump/mkioctls
+++ b/usr.bin/kdump/mkioctls
@@ -63,6 +63,8 @@ BEGIN {
print "#include <netinet6/ip6_mroute.h>"
print "#include <stdio.h>"
print "#include <cam/cam.h>"
+ print "#include <stddef.h>"
+ print "#include <stdint.h>"
print ""
print ioctl_includes
print ""
diff --git a/usr.bin/lastcomm/lastcomm.1 b/usr.bin/lastcomm/lastcomm.1
index 77a49abecb16..10ee896c0186 100644
--- a/usr.bin/lastcomm/lastcomm.1
+++ b/usr.bin/lastcomm/lastcomm.1
@@ -28,7 +28,7 @@
.\" From: @(#)lastcomm.1 8.1 (Berkeley) 6/6/93
.\" $FreeBSD$
.\"
-.Dd May 14, 2007
+.Dd May 17, 2012
.Dt LASTCOMM 1
.Os
.Sh NAME
@@ -38,6 +38,7 @@
.Nm
.Op Fl EScesu
.Op Fl f Ar file
+.Op Cm + Ns Ar format
.Op Ar command ...\&
.Op Ar user ...\&
.Op Ar terminal ...\&
@@ -77,6 +78,15 @@ is a single dash
reads accounting entries from the standard input.
.El
.Pp
+An operand with a leading plus sign
+.Pq Sq +
+is followed a user-defined format string which specifies the format
+in which to display the process's start or exit date and time.
+The format string may contain any of the conversion specifications
+described in the
+.Xr strftime 3
+manual page, as well as arbitrary text.
+.Pp
If no options are specified,
.Fl cS
is assumed.
@@ -165,6 +175,7 @@ will print details of each terminating command.
.Sh SEE ALSO
.Xr last 1 ,
.Xr sigaction 2 ,
+.Xr strftime 3 ,
.Xr acct 5 ,
.Xr core 5
.Sh HISTORY
diff --git a/usr.bin/lastcomm/lastcomm.c b/usr.bin/lastcomm/lastcomm.c
index e140c703cdca..b2a0f0f3ffab 100644
--- a/usr.bin/lastcomm/lastcomm.c
+++ b/usr.bin/lastcomm/lastcomm.c
@@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <unistd.h>
#include "pathnames.h"
@@ -82,10 +83,12 @@ main(int argc, char *argv[])
int (*readrec)(FILE *f, struct acctv2 *av2);
time_t t;
int ch, rv;
- const char *acctfile;
+ const char *acctfile, *format;
+ char buf[1024];
int flags = 0;
acctfile = _PATH_ACCT;
+ format = NULL;
while ((ch = getopt(argc, argv, "f:usecSE")) != -1)
switch((char)ch) {
case 'f':
@@ -126,6 +129,12 @@ main(int argc, char *argv[])
argc -= optind;
argv += optind;
+ if (argc > 0 && **argv == '+') {
+ format = *argv + 1; /* skip + */
+ argc--;
+ argv++;
+ }
+
if (strcmp(acctfile, "-") == 0) {
fp = stdin;
readrec = readrec_forward;
@@ -177,14 +186,24 @@ main(int argc, char *argv[])
/* starting time */
if (flags & AC_BTIME) {
- (void)printf(" %.16s", ctime(&ab.ac_btime));
+ if (format != NULL) {
+ (void)strftime(buf, sizeof(buf), format,
+ localtime(&ab.ac_btime));
+ (void)printf(" %s", buf);
+ } else
+ (void)printf(" %.16s", ctime(&ab.ac_btime));
}
/* exit time (starting time + elapsed time )*/
if (flags & AC_FTIME) {
t = ab.ac_btime;
t += (time_t)(ab.ac_etime / 1000000);
- (void)printf(" %.16s", ctime(&t));
+ if (format != NULL) {
+ (void)strftime(buf, sizeof(buf), format,
+ localtime(&t));
+ (void)printf(" %s", buf);
+ } else
+ (void)printf(" %.16s", ctime(&t));
}
printf("\n");
}
@@ -250,6 +269,7 @@ static void
usage(void)
{
(void)fprintf(stderr,
-"usage: lastcomm [-EScesu] [-f file] [command ...] [user ...] [terminal ...]\n");
+ "usage: lastcomm [-EScesu] [-f file] [+format] [command ...] "
+ "[user ...] [terminal ...]\n");
exit(1);
}
diff --git a/usr.bin/lex/lex.1 b/usr.bin/lex/lex.1
index 38eecf1126da..c47fbb053067 100644
--- a/usr.bin/lex/lex.1
+++ b/usr.bin/lex/lex.1
@@ -2247,8 +2247,7 @@ automatically anyway.
.TP
.B \-F
specifies that the
-.ul
-fast
+.I fast
scanner table representation should be used (and stdio
bypassed). This representation is
about as fast as the full table representation
diff --git a/usr.bin/m4/parser.y b/usr.bin/m4/parser.y
index 21243bbc96b4..14959738bdff 100644
--- a/usr.bin/m4/parser.y
+++ b/usr.bin/m4/parser.y
@@ -23,7 +23,6 @@
extern int32_t end_result;
extern int yylex(void);
extern int yyerror(const char *);
-extern int yyparse(void);
%}
%token NUMBER
%token ERROR
diff --git a/usr.bin/mail/popen.c b/usr.bin/mail/popen.c
index 18bf7e5a3aa5..c4d17461e48d 100644
--- a/usr.bin/mail/popen.c
+++ b/usr.bin/mail/popen.c
@@ -336,12 +336,14 @@ int
wait_child(int pid)
{
sigset_t nset, oset;
- struct child *cp = findchild(pid);
+ struct child *cp;
(void)sigemptyset(&nset);
(void)sigaddset(&nset, SIGCHLD);
(void)sigprocmask(SIG_BLOCK, &nset, &oset);
+ cp = findchild(pid);
+
while (!cp->done)
(void)sigsuspend(&oset);
wait_status = cp->status;
diff --git a/usr.bin/minigzip/minigzip.1 b/usr.bin/minigzip/minigzip.1
index ddd2b957a6b1..754e98f84c37 100644
--- a/usr.bin/minigzip/minigzip.1
+++ b/usr.bin/minigzip/minigzip.1
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd October 3, 2002
+.Dd May 22, 2012
.Dt MINIGZIP 1
.Os
.Sh NAME
@@ -48,7 +48,7 @@ output.
The default operation is compression, decompression can be
selected by supplying the
.Fl d
-flag on the commandline.
+flag on the command line.
.Pp
If any
.Ar file
diff --git a/usr.bin/mkcsmapper/ldef.h b/usr.bin/mkcsmapper/ldef.h
index d0adf9a38b17..70c31225d9a9 100644
--- a/usr.bin/mkcsmapper/ldef.h
+++ b/usr.bin/mkcsmapper/ldef.h
@@ -39,4 +39,3 @@ extern int debug;
extern int line_number;
extern int yyerror(const char *);
extern int yylex(void);
-extern int yyparse(void);
diff --git a/usr.bin/mklocale/extern.h b/usr.bin/mklocale/extern.h
index c5b70802928d..60268cc90851 100644
--- a/usr.bin/mklocale/extern.h
+++ b/usr.bin/mklocale/extern.h
@@ -33,4 +33,3 @@
*/
int yylex(void);
-int yyparse(void);
diff --git a/usr.bin/pamtest/Makefile b/usr.bin/pamtest/Makefile
new file mode 100644
index 000000000000..196830070de3
--- /dev/null
+++ b/usr.bin/pamtest/Makefile
@@ -0,0 +1,11 @@
+# $FreeBSD$
+
+OPENPAM= ${.CURDIR}/../../contrib/openpam
+.PATH: ${OPENPAM}/include ${OPENPAM}/bin/pamtest
+
+PROG= pamtest
+SRCS= pamtest.c
+DPADD= ${LIBPAM}
+LDADD= ${MINUSLPAM}
+
+.include <bsd.prog.mk>
diff --git a/usr.bin/procstat/Makefile b/usr.bin/procstat/Makefile
index 76c6fa3639ad..505523e94d5e 100644
--- a/usr.bin/procstat/Makefile
+++ b/usr.bin/procstat/Makefile
@@ -16,6 +16,6 @@ SRCS= procstat.c \
procstat_vm.c
LDADD+= -lutil -lprocstat -lkvm
-DPADD+= ${LIBUTIL}
+DPADD+= ${LIBUTIL} ${LIBPROCSTAT} ${LIBKVM}
.include <bsd.prog.mk>
diff --git a/usr.bin/sockstat/sockstat.1 b/usr.bin/sockstat/sockstat.1
index f38d9d725d05..8f744ed135a9 100644
--- a/usr.bin/sockstat/sockstat.1
+++ b/usr.bin/sockstat/sockstat.1
@@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd January 24, 2012
+.Dd May 16, 2012
.Dt SOCKSTAT 1
.Os
.Sh NAME
@@ -36,6 +36,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl 46cLlu
+.Op Fl j Ar jid
.Op Fl p Ar ports
.Op Fl P Ar protocols
.Sh DESCRIPTION
@@ -57,6 +58,8 @@ Show
(IPv6) sockets.
.It Fl c
Show connected sockets.
+.It Fl j Ar jid
+Show only sockets belonging to the specified jail ID.
.It Fl L
Only show Internet sockets if the local or foreign addresses are not
in the loopback network prefix
diff --git a/usr.bin/sockstat/sockstat.c b/usr.bin/sockstat/sockstat.c
index 0114cc47822d..334fb938a738 100644
--- a/usr.bin/sockstat/sockstat.c
+++ b/usr.bin/sockstat/sockstat.c
@@ -62,6 +62,7 @@ __FBSDID("$FreeBSD$");
static int opt_4; /* Show IPv4 sockets */
static int opt_6; /* Show IPv6 sockets */
static int opt_c; /* Show connected sockets */
+static int opt_j; /* Show specified jail */
static int opt_L; /* Don't show IPv4 or IPv6 loopback sockets */
static int opt_l; /* Show listening sockets */
static int opt_u; /* Show Unix domain sockets */
@@ -549,6 +550,27 @@ getprocname(pid_t pid)
}
static int
+getprocjid(pid_t pid)
+{
+ static struct kinfo_proc proc;
+ size_t len;
+ int mib[4];
+
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PID;
+ mib[3] = (int)pid;
+ len = sizeof proc;
+ if (sysctl(mib, 4, &proc, &len, NULL, 0) == -1) {
+ /* Do not warn if the process exits before we get its jid. */
+ if (errno != ESRCH)
+ warn("sysctl()");
+ return (-1);
+ }
+ return (proc.ki_jid);
+}
+
+static int
check_ports(struct sock *s)
{
int port;
@@ -643,6 +665,8 @@ display(void)
for (xf = xfiles, n = 0; n < nxfiles; ++n, ++xf) {
if (xf->xf_data == NULL)
continue;
+ if (opt_j >= 0 && opt_j != getprocjid(xf->xf_pid))
+ continue;
hash = (int)((uintptr_t)xf->xf_data % HASHSIZE);
for (s = sockhash[hash]; s != NULL; s = s->next)
if ((void *)s->socket == xf->xf_data)
@@ -668,6 +692,8 @@ display(void)
pos += xprintf("%d ", xf->xf_fd);
displaysock(s, pos);
}
+ if (opt_j >= 0)
+ return;
for (hash = 0; hash < HASHSIZE; hash++) {
for (s = sockhash[hash]; s != NULL; s = s->next) {
if (s->shown)
@@ -716,7 +742,8 @@ main(int argc, char *argv[])
int protos_defined = -1;
int o, i;
- while ((o = getopt(argc, argv, "46cLlp:P:uv")) != -1)
+ opt_j = -1;
+ while ((o = getopt(argc, argv, "46cj:Llp:P:uv")) != -1)
switch (o) {
case '4':
opt_4 = 1;
@@ -727,6 +754,9 @@ main(int argc, char *argv[])
case 'c':
opt_c = 1;
break;
+ case 'j':
+ opt_j = atoi(optarg);
+ break;
case 'L':
opt_L = 1;
break;
diff --git a/usr.bin/sort/bwstring.c b/usr.bin/sort/bwstring.c
index 9ebeb10d6e89..5733732eac6f 100644
--- a/usr.bin/sort/bwstring.c
+++ b/usr.bin/sort/bwstring.c
@@ -499,6 +499,22 @@ bwsfgetln(FILE *f, size_t *len, bool zero_ended, struct reader_buffer *rb)
}
return (bwssbdup(ret, *len));
+ } else if (!zero_ended && (MB_CUR_MAX == 1)) {
+ char *ret;
+
+ ret = fgetln(f, len);
+
+ if (ret == NULL) {
+ if (!feof(f))
+ err(2, NULL);
+ return (NULL);
+ }
+ if (*len > 0) {
+ if (ret[*len - 1] == '\n')
+ --(*len);
+ }
+ return (bwscsbdup(ret, *len));
+
} else {
wchar_t c = 0;
diff --git a/usr.bin/sort/file.c b/usr.bin/sort/file.c
index 9afa4b2655f6..68c3f548e717 100644
--- a/usr.bin/sort/file.c
+++ b/usr.bin/sort/file.c
@@ -53,6 +53,8 @@ __FBSDID("$FreeBSD$");
unsigned long long free_memory = 1000000;
unsigned long long available_free_memory = 1000000;
+bool use_mmap;
+
const char *tmpdir = "/var/tmp";
const char *compress_program;
@@ -404,23 +406,21 @@ sort_list_dump(struct sort_list *l, const char *fn)
err(2, NULL);
if (l->list) {
- struct sort_list_item *last_printed_item;
size_t i;
-
- last_printed_item = NULL;
-
- for (i = 0; i < l->count; i++) {
- struct sort_list_item *item;
-
- item = l->list[i];
-
- if (!(sort_opts_vals.uflag) ||
- (last_printed_item == NULL) ||
- list_coll(&last_printed_item, &item)) {
- bwsfwrite(item->str, f,
+ if (!(sort_opts_vals.uflag)) {
+ for (i = 0; i < l->count; ++i)
+ bwsfwrite(l->list[i]->str, f,
sort_opts_vals.zflag);
- if (sort_opts_vals.uflag)
+ } else {
+ struct sort_list_item *last_printed_item = NULL;
+ struct sort_list_item *item;
+ for (i = 0; i < l->count; ++i) {
+ item = l->list[i];
+ if ((last_printed_item == NULL) ||
+ list_coll(&last_printed_item, &item)) {
+ bwsfwrite(item->str, f, sort_opts_vals.zflag);
last_printed_item = item;
+ }
}
}
}
@@ -657,7 +657,7 @@ file_reader_init(const char *fsrc)
ret->fname = sort_strdup(fsrc);
- if (strcmp(fsrc, "-") && (compress_program == NULL)) {
+ if (strcmp(fsrc, "-") && (compress_program == NULL) && use_mmap) {
do {
struct stat stat_buf;
@@ -1539,7 +1539,9 @@ mt_sort(struct sort_list *list,
const char* fn)
{
#if defined(SORT_THREADS)
- if (nthreads < 2 || list->count < nthreads) {
+ if (nthreads < 2 || list->count < MT_SORT_THRESHOLD) {
+ size_t nthreads_save = nthreads;
+ nthreads = 1;
#endif
/* if single thread or small data, do simple sort */
sort_func(list->list, list->count,
@@ -1547,6 +1549,7 @@ mt_sort(struct sort_list *list,
(int(*)(const void *, const void *)) list_coll);
sort_list_dump(list, fn);
#if defined(SORT_THREADS)
+ nthreads = nthreads_save;
} else {
/* multi-threaded sort */
struct sort_list **parts;
@@ -1590,7 +1593,18 @@ mt_sort(struct sort_list *list,
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_DETACHED);
- pthread_create(&pth, &attr, mt_sort_thread, parts[i]);
+ for (;;) {
+ int res = pthread_create(&pth, &attr,
+ mt_sort_thread, parts[i]);
+
+ if (res >= 0)
+ break;
+ if (errno == EAGAIN) {
+ pthread_yield();
+ continue;
+ }
+ err(2, NULL);
+ }
pthread_attr_destroy(&attr);
}
diff --git a/usr.bin/sort/file.h b/usr.bin/sort/file.h
index fd2392221e5b..47c22992b74e 100644
--- a/usr.bin/sort/file.h
+++ b/usr.bin/sort/file.h
@@ -84,6 +84,9 @@ struct file0_reader
extern unsigned long long free_memory;
extern unsigned long long available_free_memory;
+/* Are we using mmap ? */
+extern bool use_mmap;
+
/* temporary file dir */
extern const char *tmpdir;
diff --git a/usr.bin/sort/radixsort.c b/usr.bin/sort/radixsort.c
index 6fa2d3ae5a8d..ccaa99469286 100644
--- a/usr.bin/sort/radixsort.c
+++ b/usr.bin/sort/radixsort.c
@@ -609,7 +609,17 @@ run_top_sort_level(struct sort_level *sl)
pthread_attr_setdetachstate(&attr,
PTHREAD_DETACHED);
- pthread_create(&pth, &attr, sort_thread, NULL);
+ for (;;) {
+ int res = pthread_create(&pth, &attr,
+ sort_thread, NULL);
+ if (res >= 0)
+ break;
+ if (errno == EAGAIN) {
+ pthread_yield();
+ continue;
+ }
+ err(2, NULL);
+ }
pthread_attr_destroy(&attr);
}
@@ -626,6 +636,10 @@ run_sort(struct sort_list_item **base, size_t nmemb)
struct sort_level *sl;
#if defined(SORT_THREADS)
+ size_t nthreads_save = nthreads;
+ if (nmemb < MT_SORT_THRESHOLD)
+ nthreads = 1;
+
if (nthreads > 1) {
pthread_mutexattr_t mattr;
@@ -663,6 +677,7 @@ run_sort(struct sort_list_item **base, size_t nmemb)
pthread_mutex_destroy(&g_ls_mutex);
pthread_mutex_destroy(&sort_left_mutex);
}
+ nthreads = nthreads_save;
#endif
}
diff --git a/usr.bin/sort/sort.1.in b/usr.bin/sort/sort.1.in
index e24f3538d4de..89800612f41d 100644
--- a/usr.bin/sort/sort.1.in
+++ b/usr.bin/sort/sort.1.in
@@ -33,7 +33,7 @@
.\"
.\" @(#)sort.1 8.1 (Berkeley) 6/6/93
.\"
-.Dd May 6, 2012
+.Dd May 25, 2012
.Dt SORT 1
.Os
.Sh NAME
@@ -358,6 +358,9 @@ This sort algorithm cannot be used with
.Fl u
and
.Fl s .
+.It Fl Fl mmap
+Try to use file memory mapping system call.
+It may increase speed in some cases.
.El
.Pp
The following operands are available:
@@ -498,27 +501,6 @@ option is still supported, except for
which has no
.Fl k
equivalent.
-.Sh EXIT STATUS
-The
-.Nm
-utility shall exit with one of the following values:
-.Pp
-.Bl -tag -width flag -compact
-.It 0
-Successfully sorted the input files or if used with
-.Fl c
-or
-.Fl C ,
-the input file already met the sorting criteria.
-.It 1
-On disorder (or non-uniqueness) with the
-.Fl c
-or
-.Fl C
-options.
-.It 2
-An error occurred.
-.El
.Sh ENVIRONMENT
.Bl -tag -width Fl
.It Ev LC_COLLATE
@@ -575,6 +557,27 @@ Temporary files.
.It Pa /dev/random
Default seed file for the random sort.
.El
+.Sh EXIT STATUS
+The
+.Nm
+utility shall exit with one of the following values:
+.Pp
+.Bl -tag -width flag -compact
+.It 0
+Successfully sorted the input files or if used with
+.Fl c
+or
+.Fl C ,
+the input file already met the sorting criteria.
+.It 1
+On disorder (or non-uniqueness) with the
+.Fl c
+or
+.Fl C
+options.
+.It 2
+An error occurred.
+.El
.Sh SEE ALSO
.Xr comm 1 ,
.Xr join 1 ,
diff --git a/usr.bin/sort/sort.c b/usr.bin/sort/sort.c
index 6bd7b3848da8..dd0ed6828311 100644
--- a/usr.bin/sort/sort.c
+++ b/usr.bin/sort/sort.c
@@ -89,6 +89,7 @@ const char *nlsstr[] = { "",
"[+POS1 [-POS2]] [-S memsize] [-T tmpdir] [-t separator] "
"[-o outfile] [--batch-size size] [--files0-from file] "
"[--heapsort] [--mergesort] [--radixsort] [--qsort] "
+ "[--mmap] "
#if defined(SORT_THREADS)
"[--nthreads thread_no] "
#endif
@@ -138,7 +139,8 @@ enum
QSORT_OPT,
MERGESORT_OPT,
HEAPSORT_OPT,
- RADIXSORT_OPT
+ RADIXSORT_OPT,
+ MMAP_OPT
};
#define NUMBER_OF_MUTUALLY_EXCLUSIVE_FLAGS 6
@@ -164,6 +166,7 @@ struct option long_options[] = {
{ "key", required_argument, NULL, 'k' },
{ "merge", no_argument, NULL, 'm' },
{ "mergesort", no_argument, NULL, MERGESORT_OPT },
+ { "mmap", no_argument, NULL, MMAP_OPT },
{ "month-sort", no_argument, NULL, 'M' },
{ "numeric-sort", no_argument, NULL, 'n' },
{ "output", required_argument, NULL, 'o' },
@@ -1049,9 +1052,8 @@ main(int argc, char **argv)
sort_opts_vals.mflag = true;
break;
case 'o':
- outfile = sort_realloc(outfile, sizeof(char) *
- (strlen(optarg) + 1));
- strlcpy(outfile, optarg, strlen(outfile));
+ outfile = sort_realloc(outfile, (strlen(optarg) + 1));
+ strcpy(outfile, optarg);
break;
case 's':
sort_opts_vals.sflag = true;
@@ -1064,12 +1066,16 @@ main(int argc, char **argv)
tmpdir = sort_strdup(optarg);
break;
case 't':
- if (strlen(optarg) > 1) {
- if (strcmp(optarg, "\\0")) {
+ while (strlen(optarg) > 1) {
+ if (optarg[0] != '\\') {
errx(2, "%s: %s\n",
strerror(EINVAL), optarg);
}
- *optarg = 0;
+ optarg += 1;
+ if (*optarg == '0') {
+ *optarg = 0;
+ break;
+ }
}
sort_opts_vals.tflag = true;
sort_opts_vals.field_sep = btowc(optarg[0]);
@@ -1127,6 +1133,9 @@ main(int argc, char **argv)
case MERGESORT_OPT:
sort_opts_vals.sort_method = SORT_MERGESORT;
break;
+ case MMAP_OPT:
+ use_mmap = true;
+ break;
case HEAPSORT_OPT:
sort_opts_vals.sort_method = SORT_HEAPSORT;
break;
@@ -1259,6 +1268,11 @@ main(int argc, char **argv)
}
}
+#if defined(SORT_THREADS)
+ if ((argc < 1) || (strcmp(outfile, "-") == 0) || (*outfile == 0))
+ nthreads = 1;
+#endif
+
if (!sort_opts_vals.cflag && !sort_opts_vals.mflag) {
struct file_list fl;
struct sort_list list;
diff --git a/usr.bin/sort/sort.h b/usr.bin/sort/sort.h
index 9d4d1ed8f799..f6505c9b2a99 100644
--- a/usr.bin/sort/sort.h
+++ b/usr.bin/sort/sort.h
@@ -55,6 +55,7 @@ extern nl_catd catalog;
extern const char *nlsstr[];
#if defined(SORT_THREADS)
+#define MT_SORT_THRESHOLD (10000)
extern size_t ncpu;
extern size_t nthreads;
#endif
diff --git a/usr.bin/unzip/unzip.c b/usr.bin/unzip/unzip.c
index f3c6f9723bd0..c43c72a5f089 100644
--- a/usr.bin/unzip/unzip.c
+++ b/usr.bin/unzip/unzip.c
@@ -865,19 +865,14 @@ unzip(const char *fn)
{
struct archive *a;
struct archive_entry *e;
- int fd, ret;
+ int ret;
uintmax_t total_size, file_count, error_count;
- if (strcmp(fn, "-") == 0)
- fd = STDIN_FILENO;
- else if ((fd = open(fn, O_RDONLY)) < 0)
- error("%s", fn);
-
if ((a = archive_read_new()) == NULL)
error("archive_read_new failed");
ac(archive_read_support_format_zip(a));
- ac(archive_read_open_fd(a, fd, 8192));
+ ac(archive_read_open_filename(a, fn, 8192));
if (!zipinfo_mode) {
if (!p_opt && !q_opt)
@@ -933,9 +928,6 @@ unzip(const char *fn)
ac(archive_read_close(a));
(void)archive_read_finish(a);
- if (fd != STDIN_FILENO && close(fd) != 0)
- error("%s", fn);
-
if (t_opt) {
if (error_count > 0) {
errorx("%d checksum error(s) found.", error_count);
@@ -1061,6 +1053,9 @@ main(int argc, char *argv[])
usage();
zipfile = argv[nopts++];
+ if (strcmp(zipfile, "-") == 0)
+ zipfile = NULL; /* STDIN */
+
while (nopts < argc && *argv[nopts] != '-')
add_pattern(&include, argv[nopts++]);
diff --git a/usr.bin/usbhidctl/usbhid.c b/usr.bin/usbhidctl/usbhid.c
index 2a28e3e40de5..06a79c8d5309 100644
--- a/usr.bin/usbhidctl/usbhid.c
+++ b/usr.bin/usbhidctl/usbhid.c
@@ -182,11 +182,11 @@ usage(void)
fprintf(stderr,
"usage: %s -f device "
- "[-l] [-n] [-r] [-t tablefile] [-v] [-x] name ...\n",
+ "[-l] [-n] [-r] [-t tablefile] [-v] [-x] [-z] name ...\n",
getprogname());
fprintf(stderr,
" %s -f device "
- "[-l] [-n] [-r] [-t tablefile] [-v] [-x] -a\n",
+ "[-l] [-n] [-r] [-t tablefile] [-v] [-x] [-z] -a\n",
getprogname());
fprintf(stderr,
" %s -f device "
@@ -304,7 +304,7 @@ dumpdata(int f, report_desc_t rd, int loop)
u_char *dbuf;
enum hid_kind kind;
- kind = 0;
+ kind = zflag ? 3 : 0;
rid = -1;
use_rid = !!hid_get_report_id(f);
do {
diff --git a/usr.bin/usbhidctl/usbhidctl.1 b/usr.bin/usbhidctl/usbhidctl.1
index 56811890782a..f3c55760a086 100644
--- a/usr.bin/usbhidctl/usbhidctl.1
+++ b/usr.bin/usbhidctl/usbhidctl.1
@@ -47,6 +47,7 @@
.Op Fl l
.Op Fl v
.Op Fl x
+.Op Fl z
.Fl a
.Nm
.Fl f Ar device
@@ -55,6 +56,7 @@
.Op Fl n
.Op Fl v
.Op Fl x
+.Op Fl z
.Ar item ...
.Nm
.Fl f Ar device
@@ -99,9 +101,8 @@ Only 'output' and 'feature' kinds can be set with this option.
.It Fl x
Dump data in hexadecimal as well as decimal.
.It Fl z
-Reset reports to zero before processing
-.Fl w
-arguments. If not specified, current values will be requested from device.
+Reset reports to zero before processing other arguments.
+If not specified, current values will be requested from device.
.El
.Sh SYNTAX
.Nm
diff --git a/usr.bin/yacc/Makefile b/usr.bin/yacc/Makefile
index e8b1024e82bb..677486fd7320 100644
--- a/usr.bin/yacc/Makefile
+++ b/usr.bin/yacc/Makefile
@@ -1,11 +1,18 @@
# @(#)Makefile 5.3 (Berkeley) 5/12/90
# $FreeBSD$
+.PATH: ${.CURDIR}/../../contrib/byacc
+
PROG= yacc
-SRCS= closure.c error.c lalr.c lr0.c main.c mkpar.c output.c reader.c \
- skeleton.c symtab.c verbose.c warshall.c
-SCRIPTS=yyfix.sh
-MAN= yacc.1 yyfix.1
+SRCS= closure.c error.c graph.c lalr.c lr0.c main.c mkpar.c output.c \
+ reader.c skeleton.c symtab.c verbose.c warshall.c
+
+CFLAGS+= -DMIXEDCASE_FILENAMES=1 \
+ -DCC_HAS_PROTOS=1 \
+ -DHAVE_FCNTL_H=1 \
+ -DHAVE_ATEXIT=1 \
+ -DHAVE_MKSTEMP=1
+
LINKS= ${BINDIR}/yacc ${BINDIR}/byacc
MLINKS= yacc.1 byacc.1
diff --git a/usr.bin/yacc/defs.h b/usr.bin/yacc/defs.h
deleted file mode 100644
index 507136594ef0..000000000000
--- a/usr.bin/yacc/defs.h
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- *
- * @(#)defs.h 5.6 (Berkeley) 5/24/93
- * $FreeBSD$
- */
-
-#include <assert.h>
-#include <ctype.h>
-#include <err.h>
-#include <stdio.h>
-
-
-/* machine-dependent definitions */
-/* the following definitions are for the Tahoe */
-/* they might have to be changed for other machines */
-
-/* MAXTABLE is the maximum table size */
-/* BITS_PER_WORD is the number of bits in a C unsigned */
-/* WORDSIZE computes the number of words needed to */
-/* store n bits */
-/* BIT returns the value of the n-th bit starting */
-/* from r (0-indexed) */
-/* SETBIT sets the n-th bit starting from r */
-
-#define MAXTABLE 32500
-#define BITS_PER_WORD 32
-#define WORDSIZE(n) (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD)
-#define BIT(r, n) ((((r)[(n)>>5])>>((n)&31))&1)
-#define SETBIT(r, n) ((r)[(n)>>5]|=((unsigned)1<<((n)&31)))
-
-
-/* character names */
-
-#define NUL '\0' /* the null character */
-#define NEWLINE '\n' /* line feed */
-#define SP ' ' /* space */
-#define BS '\b' /* backspace */
-#define HT '\t' /* horizontal tab */
-#define VT '\013' /* vertical tab */
-#define CR '\r' /* carriage return */
-#define FF '\f' /* form feed */
-#define QUOTE '\'' /* single quote */
-#define DOUBLE_QUOTE '\"' /* double quote */
-#define BACKSLASH '\\' /* backslash */
-
-
-/* defines for constructing filenames */
-
-#define CODE_SUFFIX ".code.c"
-#define DEFINES_SUFFIX ".tab.h"
-#define OUTPUT_SUFFIX ".tab.c"
-#define VERBOSE_SUFFIX ".output"
-
-
-/* keyword codes */
-
-#define TOKEN 0
-#define LEFT 1
-#define RIGHT 2
-#define NONASSOC 3
-#define MARK 4
-#define TEXT 5
-#define TYPE 6
-#define START 7
-#define UNION 8
-#define IDENT 9
-#define EXPECT 10
-
-
-/* symbol classes */
-
-#define UNKNOWN 0
-#define TERM 1
-#define NONTERM 2
-
-
-/* the undefined value */
-
-#define UNDEFINED (-1)
-
-
-/* action codes */
-
-#define SHIFT 1
-#define REDUCE 2
-
-
-/* character macros */
-
-#define IS_IDENT(c) (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$')
-#define IS_OCTAL(c) ((c) >= '0' && (c) <= '7')
-#define NUMERIC_VALUE(c) ((c) - '0')
-
-
-/* symbol macros */
-
-#define ISTOKEN(s) ((s) < start_symbol)
-#define ISVAR(s) ((s) >= start_symbol)
-
-
-/* storage allocation macros */
-
-#define NEW(t) ((t*)allocate(sizeof(t)))
-#define NEW2(n,t) ((t*)allocate((n)*sizeof(t)))
-
-
-/* the structure of a symbol table entry */
-
-typedef struct bucket bucket;
-struct bucket
-{
- struct bucket *link;
- struct bucket *next;
- char *name;
- char *tag;
- short value;
- short index;
- short prec;
- char class;
- char assoc;
-};
-
-
-/* the structure of the LR(0) state machine */
-
-typedef struct core core;
-struct core
-{
- struct core *next;
- struct core *link;
- short number;
- short accessing_symbol;
- short nitems;
- short items[1];
-};
-
-
-/* the structure used to record shifts */
-
-typedef struct shifts shifts;
-struct shifts
-{
- struct shifts *next;
- short number;
- short nshifts;
- short shift[1];
-};
-
-
-/* the structure used to store reductions */
-
-typedef struct reductions reductions;
-struct reductions
-{
- struct reductions *next;
- short number;
- short nreds;
- short rules[1];
-};
-
-
-/* the structure used to represent parser actions */
-
-typedef struct action action;
-struct action
-{
- struct action *next;
- short symbol;
- short number;
- short prec;
- char action_code;
- char assoc;
- char suppressed;
-};
-
-
-/* global variables */
-
-extern char dflag;
-extern char lflag;
-extern char rflag;
-extern char tflag;
-extern char vflag;
-extern const char *symbol_prefix;
-
-extern char *cptr;
-extern char *line;
-extern int lineno;
-extern int outline;
-
-extern const char *banner[];
-extern const char *tables[];
-extern const char *header[];
-extern const char *body[];
-extern const char *trailer[];
-
-extern char *action_file_name;
-extern char *code_file_name;
-extern char *defines_file_name;
-extern const char *input_file_name;
-extern char *output_file_name;
-extern char *text_file_name;
-extern char *union_file_name;
-extern char *verbose_file_name;
-
-extern FILE *action_file;
-extern FILE *code_file;
-extern FILE *defines_file;
-extern FILE *input_file;
-extern FILE *output_file;
-extern FILE *text_file;
-extern FILE *union_file;
-extern FILE *verbose_file;
-
-extern int nitems;
-extern int nrules;
-extern int nsyms;
-extern int ntokens;
-extern int nvars;
-extern int ntags;
-
-extern char unionized;
-
-extern int start_symbol;
-extern char **symbol_name;
-extern short *symbol_value;
-extern short *symbol_prec;
-extern char *symbol_assoc;
-
-extern short *ritem;
-extern short *rlhs;
-extern short *rrhs;
-extern short *rprec;
-extern char *rassoc;
-
-extern short **derives;
-extern char *nullable;
-
-extern bucket *first_symbol;
-extern bucket *last_symbol;
-
-extern int nstates;
-extern core *first_state;
-extern shifts *first_shift;
-extern reductions *first_reduction;
-extern short *accessing_symbol;
-extern core **state_table;
-extern shifts **shift_table;
-extern reductions **reduction_table;
-extern unsigned *LA;
-extern short *LAruleno;
-extern short *lookaheads;
-extern short *goto_map;
-extern short *from_state;
-extern short *to_state;
-
-extern action **parser;
-extern int SRexpect;
-extern int SRtotal;
-extern int RRtotal;
-extern short *SRconflicts;
-extern short *RRconflicts;
-extern short *defred;
-extern short *rules_used;
-extern short nunused;
-extern short final_state;
-
-/* global functions */
-
-void *allocate(size_t);
-void closure(short *, int);
-void create_symbol_table(void);
-void default_action_warning(void);
-void dollar_error(int, char *, char *) __dead2;
-void dollar_warning(int, int);
-void done(int) __dead2;
-void fatal(const char *msg) __dead2;
-void finalize_closure(void);
-void free_parser(void);
-void free_symbols(void);
-void free_symbol_table(void);
-void illegal_character(char *) __dead2;
-void illegal_tag(int, char *, char *) __dead2;
-void lalr(void);
-bucket *lookup(char *);
-void lr0(void);
-bucket *make_bucket(const char *);
-void make_parser(void);
-void no_grammar(void) __dead2;
-void no_space(void) __dead2;
-void open_error(const char *) __dead2;
-void output(void);
-void over_unionized(char *) __dead2;
-void prec_redeclared(void);
-void reader(void);
-void reflexive_transitive_closure(unsigned *, int);
-void reprec_warning(char *);
-void restarted_warning(void);
-void retyped_warning(char *);
-void revalued_warning(char *);
-void set_first_derives(void);
-void syntax_error(int, char *, char *) __dead2;
-void terminal_lhs(int) __dead2;
-void terminal_start(char *) __dead2;
-void tokenized_start(char *) __dead2;
-void undefined_goal(char *) __dead2;
-void undefined_symbol_warning(char *);
-void unexpected_EOF(void) __dead2;
-void unknown_rhs(int) __dead2;
-void unterminated_action(int, char *, char *) __dead2;
-void unterminated_comment(int, char *, char *) __dead2;
-void unterminated_string(int, char *, char *) __dead2;
-void unterminated_text(int, char *, char *) __dead2;
-void unterminated_union(int, char *, char *) __dead2;
-void untyped_lhs(void) __dead2;
-void untyped_rhs(int, char *) __dead2;
-void used_reserved(char *) __dead2;
-void verbose(void);
-void write_section(const char **);
diff --git a/usr.bin/yacc/error.c b/usr.bin/yacc/error.c
deleted file mode 100644
index 928fbd306869..000000000000
--- a/usr.bin/yacc/error.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)error.c 5.3 (Berkeley) 6/1/90";
-#endif
-#endif
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-/* routines for printing error messages */
-
-#include "defs.h"
-
-static void print_pos(char *, char *);
-
-void
-fatal(const char *msg)
-{
- warnx("f - %s", msg);
- done(2);
-}
-
-
-void
-no_space(void)
-{
- warnx("f - out of space");
- done(2);
-}
-
-
-void
-open_error(const char *filename)
-{
- warnx("f - cannot open \"%s\"", filename);
- done(2);
-}
-
-
-void
-unexpected_EOF(void)
-{
- warnx("e - line %d of \"%s\", unexpected end-of-file",
- lineno, input_file_name);
- done(1);
-}
-
-
-static void
-print_pos(char *st_line, char *st_cptr)
-{
- char *s;
-
- if (st_line == 0) return;
- for (s = st_line; *s != '\n'; ++s)
- {
- if (isprint(*s) || *s == '\t')
- putc(*s, stderr);
- else
- putc('?', stderr);
- }
- putc('\n', stderr);
- for (s = st_line; s < st_cptr; ++s)
- {
- if (*s == '\t')
- putc('\t', stderr);
- else
- putc(' ', stderr);
- }
- putc('^', stderr);
- putc('\n', stderr);
-}
-
-
-void
-syntax_error(int st_lineno, char *st_line, char *st_cptr)
-{
- warnx("e - line %d of \"%s\", syntax error",
- st_lineno, input_file_name);
- print_pos(st_line, st_cptr);
- done(1);
-}
-
-
-void
-unterminated_comment(int c_lineno, char *c_line, char *c_cptr)
-{
- warnx("e - line %d of \"%s\", unmatched /*",
- c_lineno, input_file_name);
- print_pos(c_line, c_cptr);
- done(1);
-}
-
-
-void
-unterminated_string(int s_lineno, char *s_line, char *s_cptr)
-{
- warnx("e - line %d of \"%s\", unterminated string",
- s_lineno, input_file_name);
- print_pos(s_line, s_cptr);
- done(1);
-}
-
-
-void
-unterminated_text(int t_lineno, char *t_line, char *t_cptr)
-{
- warnx("e - line %d of \"%s\", unmatched %%{",
- t_lineno, input_file_name);
- print_pos(t_line, t_cptr);
- done(1);
-}
-
-
-void
-unterminated_union(int u_lineno, char *u_line, char *u_cptr)
-{
- warnx("e - line %d of \"%s\", unterminated %%union declaration",
- u_lineno, input_file_name);
- print_pos(u_line, u_cptr);
- done(1);
-}
-
-
-void
-over_unionized(char *u_cptr)
-{
- warnx("e - line %d of \"%s\", too many %%union declarations",
- lineno, input_file_name);
- print_pos(line, u_cptr);
- done(1);
-}
-
-
-void
-illegal_tag(int t_lineno, char *t_line, char *t_cptr)
-{
- warnx("e - line %d of \"%s\", illegal tag", t_lineno, input_file_name);
- print_pos(t_line, t_cptr);
- done(1);
-}
-
-
-void
-illegal_character(char *c_cptr)
-{
- warnx("e - line %d of \"%s\", illegal character", lineno, input_file_name);
- print_pos(line, c_cptr);
- done(1);
-}
-
-
-void
-used_reserved(char *s)
-{
- warnx("e - line %d of \"%s\", illegal use of reserved symbol %s",
- lineno, input_file_name, s);
- done(1);
-}
-
-
-void
-tokenized_start(char *s)
-{
- warnx("e - line %d of \"%s\", the start symbol %s cannot be \
-declared to be a token", lineno, input_file_name, s);
- done(1);
-}
-
-
-void
-retyped_warning(char *s)
-{
- warnx("w - line %d of \"%s\", the type of %s has been redeclared",
- lineno, input_file_name, s);
-}
-
-
-void
-reprec_warning(char *s)
-{
- warnx("w - line %d of \"%s\", the precedence of %s has been redeclared",
- lineno, input_file_name, s);
-}
-
-
-void
-revalued_warning(char *s)
-{
- warnx("w - line %d of \"%s\", the value of %s has been redeclared",
- lineno, input_file_name, s);
-}
-
-
-void
-terminal_start(char *s)
-{
- warnx("e - line %d of \"%s\", the start symbol %s is a token",
- lineno, input_file_name, s);
- done(1);
-}
-
-
-void
-restarted_warning(void)
-{
- warnx("w - line %d of \"%s\", the start symbol has been redeclared",
- lineno, input_file_name);
-}
-
-
-void
-no_grammar(void)
-{
- warnx("e - line %d of \"%s\", no grammar has been specified",
- lineno, input_file_name);
- done(1);
-}
-
-
-void
-terminal_lhs(int s_lineno)
-{
- warnx("e - line %d of \"%s\", a token appears on the lhs of a production",
- s_lineno, input_file_name);
- done(1);
-}
-
-
-void
-prec_redeclared(void)
-{
- warnx("w - line %d of \"%s\", conflicting %%prec specifiers",
- lineno, input_file_name);
-}
-
-
-void
-unterminated_action(int a_lineno, char *a_line, char *a_cptr)
-{
- warnx("e - line %d of \"%s\", unterminated action",
- a_lineno, input_file_name);
- print_pos(a_line, a_cptr);
- done(1);
-}
-
-
-void
-dollar_warning(int a_lineno, int i)
-{
- warnx("w - line %d of \"%s\", $%d references beyond the \
-end of the current rule", a_lineno, input_file_name, i);
-}
-
-
-void
-dollar_error(int a_lineno, char *a_line, char *a_cptr)
-{
- warnx("e - line %d of \"%s\", illegal $-name", a_lineno, input_file_name);
- print_pos(a_line, a_cptr);
- done(1);
-}
-
-
-void
-untyped_lhs(void)
-{
- warnx("e - line %d of \"%s\", $$ is untyped", lineno, input_file_name);
- done(1);
-}
-
-
-void
-untyped_rhs(int i, char *s)
-{
- warnx("e - line %d of \"%s\", $%d (%s) is untyped",
- lineno, input_file_name, i, s);
- done(1);
-}
-
-
-void
-unknown_rhs(int i)
-{
- warnx("e - line %d of \"%s\", $%d is untyped", lineno, input_file_name, i);
- done(1);
-}
-
-
-void
-default_action_warning(void)
-{
- warnx("w - line %d of \"%s\", the default action assigns an \
-undefined value to $$", lineno, input_file_name);
-}
-
-
-void
-undefined_goal(char *s)
-{
- warnx("e - the start symbol %s is undefined", s);
- done(1);
-}
-
-
-void
-undefined_symbol_warning(char *s)
-{
- warnx("w - the symbol %s is undefined", s);
-}
diff --git a/usr.bin/yacc/lalr.c b/usr.bin/yacc/lalr.c
deleted file mode 100644
index 75315ea3ef85..000000000000
--- a/usr.bin/yacc/lalr.c
+++ /dev/null
@@ -1,701 +0,0 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)lalr.c 5.3 (Berkeley) 6/1/90";
-#endif
-#endif
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <limits.h>
-#include <stdlib.h>
-#include "defs.h"
-
-typedef
- struct shorts
- {
- struct shorts *next;
- short value;
- }
- shorts;
-
-int tokensetsize;
-short *lookaheads;
-short *LAruleno;
-unsigned *LA;
-short *accessing_symbol;
-core **state_table;
-shifts **shift_table;
-reductions **reduction_table;
-short *goto_map;
-short *from_state;
-short *to_state;
-
-static void add_lookback_edge(int, int, int);
-static void build_relations(void);
-static void compute_FOLLOWS(void);
-static void compute_lookaheads(void);
-static void digraph(short **);
-static void initialize_F(void);
-static void initialize_LA(void);
-static int map_goto(int, int);
-static void set_accessing_symbol(void);
-static void set_goto_map(void);
-static void set_maxrhs(void);
-static void set_reduction_table(void);
-static void set_shift_table(void);
-static void set_state_table(void);
-static short **transpose(short **, int);
-static void traverse(int, short **);
-
-static int infinity;
-static int maxrhs;
-static int ngotos;
-static unsigned *F;
-static short **includes;
-static shorts **lookback;
-static short *INDEX;
-static short *VERTICES;
-static int top;
-
-
-void
-lalr(void)
-{
- tokensetsize = WORDSIZE(ntokens);
-
- set_state_table();
- set_accessing_symbol();
- set_shift_table();
- set_reduction_table();
- set_maxrhs();
- initialize_LA();
- set_goto_map();
- initialize_F();
- build_relations();
- compute_FOLLOWS();
- compute_lookaheads();
-}
-
-
-
-static void
-set_state_table(void)
-{
- core *sp;
-
- state_table = NEW2(nstates, core *);
- for (sp = first_state; sp; sp = sp->next)
- state_table[sp->number] = sp;
-}
-
-
-
-static void
-set_accessing_symbol(void)
-{
- core *sp;
-
- accessing_symbol = NEW2(nstates, short);
- for (sp = first_state; sp; sp = sp->next)
- accessing_symbol[sp->number] = sp->accessing_symbol;
-}
-
-
-
-static void
-set_shift_table(void)
-{
- shifts *sp;
-
- shift_table = NEW2(nstates, shifts *);
- for (sp = first_shift; sp; sp = sp->next)
- shift_table[sp->number] = sp;
-}
-
-
-
-static void
-set_reduction_table(void)
-{
- reductions *rp;
-
- reduction_table = NEW2(nstates, reductions *);
- for (rp = first_reduction; rp; rp = rp->next)
- reduction_table[rp->number] = rp;
-}
-
-
-
-static void
-set_maxrhs(void)
-{
- short *itemp;
- short *item_end;
- int length;
- int max;
-
- length = 0;
- max = 0;
- item_end = ritem + nitems;
- for (itemp = ritem; itemp < item_end; itemp++)
- {
- if (*itemp >= 0)
- {
- length++;
- }
- else
- {
- if (length > max) max = length;
- length = 0;
- }
- }
-
- maxrhs = max;
-}
-
-
-
-static void
-initialize_LA(void)
-{
- int i, j, k;
- reductions *rp;
-
- lookaheads = NEW2(nstates + 1, short);
-
- k = 0;
- for (i = 0; i < nstates; i++)
- {
- lookaheads[i] = k;
- rp = reduction_table[i];
- if (rp)
- k += rp->nreds;
- }
- lookaheads[nstates] = k;
-
- LA = NEW2(k * tokensetsize, unsigned);
- LAruleno = NEW2(k, short);
- lookback = NEW2(k, shorts *);
-
- k = 0;
- for (i = 0; i < nstates; i++)
- {
- rp = reduction_table[i];
- if (rp)
- {
- for (j = 0; j < rp->nreds; j++)
- {
- LAruleno[k] = rp->rules[j];
- k++;
- }
- }
- }
-}
-
-
-static void
-set_goto_map(void)
-{
- shifts *sp;
- int i;
- int symbol;
- int k;
- short *temp_map;
- int state2;
- int state1;
-
- goto_map = NEW2(nvars + 1, short) - ntokens;
- temp_map = NEW2(nvars + 1, short) - ntokens;
-
- ngotos = 0;
- for (sp = first_shift; sp; sp = sp->next)
- {
- for (i = sp->nshifts - 1; i >= 0; i--)
- {
- symbol = accessing_symbol[sp->shift[i]];
-
- if (ISTOKEN(symbol)) break;
-
- if (ngotos == SHRT_MAX)
- fatal("too many gotos");
-
- ngotos++;
- goto_map[symbol]++;
- }
- }
-
- k = 0;
- for (i = ntokens; i < nsyms; i++)
- {
- temp_map[i] = k;
- k += goto_map[i];
- }
-
- for (i = ntokens; i < nsyms; i++)
- goto_map[i] = temp_map[i];
-
- goto_map[nsyms] = ngotos;
- temp_map[nsyms] = ngotos;
-
- from_state = NEW2(ngotos, short);
- to_state = NEW2(ngotos, short);
-
- for (sp = first_shift; sp; sp = sp->next)
- {
- state1 = sp->number;
- for (i = sp->nshifts - 1; i >= 0; i--)
- {
- state2 = sp->shift[i];
- symbol = accessing_symbol[state2];
-
- if (ISTOKEN(symbol)) break;
-
- k = temp_map[symbol]++;
- from_state[k] = state1;
- to_state[k] = state2;
- }
- }
-
- free(temp_map + ntokens);
-}
-
-
-
-/* Map_goto maps a state/symbol pair into its numeric representation. */
-
-static int
-map_goto(int state, int symbol)
-{
- int high;
- int low;
- int middle;
- int s;
-
- low = goto_map[symbol];
- high = goto_map[symbol + 1];
-
- for (;;)
- {
- assert(low <= high);
- middle = (low + high) >> 1;
- s = from_state[middle];
- if (s == state)
- return (middle);
- else if (s < state)
- low = middle + 1;
- else
- high = middle - 1;
- }
-}
-
-
-
-static void
-initialize_F(void)
-{
- int i;
- int j;
- int k;
- shifts *sp;
- short *edge;
- unsigned *rowp;
- short *rp;
- short **reads;
- int nedges;
- int stateno;
- int symbol;
- int nwords;
-
- nwords = ngotos * tokensetsize;
- F = NEW2(nwords, unsigned);
-
- reads = NEW2(ngotos, short *);
- edge = NEW2(ngotos + 1, short);
- nedges = 0;
-
- rowp = F;
- for (i = 0; i < ngotos; i++)
- {
- stateno = to_state[i];
- sp = shift_table[stateno];
-
- if (sp)
- {
- k = sp->nshifts;
-
- for (j = 0; j < k; j++)
- {
- symbol = accessing_symbol[sp->shift[j]];
- if (ISVAR(symbol))
- break;
- SETBIT(rowp, symbol);
- }
-
- for (; j < k; j++)
- {
- symbol = accessing_symbol[sp->shift[j]];
- if (nullable[symbol])
- edge[nedges++] = map_goto(stateno, symbol);
- }
-
- if (nedges)
- {
- reads[i] = rp = NEW2(nedges + 1, short);
-
- for (j = 0; j < nedges; j++)
- rp[j] = edge[j];
-
- rp[nedges] = -1;
- nedges = 0;
- }
- }
-
- rowp += tokensetsize;
- }
-
- SETBIT(F, 0);
- digraph(reads);
-
- for (i = 0; i < ngotos; i++)
- {
- if (reads[i])
- free(reads[i]);
- }
-
- free(reads);
- free(edge);
-}
-
-
-
-static void
-build_relations(void)
-{
- int i;
- int j;
- int k;
- short *rulep;
- short *rp;
- shifts *sp;
- int length;
- int nedges;
- int done1;
- int state1;
- int stateno;
- int symbol1;
- int symbol2;
- short *shortp;
- short *edge;
- short *states;
- short **new_includes;
-
- includes = NEW2(ngotos, short *);
- edge = NEW2(ngotos + 1, short);
- states = NEW2(maxrhs + 1, short);
-
- for (i = 0; i < ngotos; i++)
- {
- nedges = 0;
- state1 = from_state[i];
- symbol1 = accessing_symbol[to_state[i]];
-
- for (rulep = derives[symbol1]; *rulep >= 0; rulep++)
- {
- length = 1;
- states[0] = state1;
- stateno = state1;
-
- for (rp = ritem + rrhs[*rulep]; *rp >= 0; rp++)
- {
- symbol2 = *rp;
- sp = shift_table[stateno];
- k = sp->nshifts;
-
- for (j = 0; j < k; j++)
- {
- stateno = sp->shift[j];
- if (accessing_symbol[stateno] == symbol2) break;
- }
-
- states[length++] = stateno;
- }
-
- add_lookback_edge(stateno, *rulep, i);
-
- length--;
- done1 = 0;
- while (!done1)
- {
- done1 = 1;
- rp--;
- if (ISVAR(*rp))
- {
- stateno = states[--length];
- edge[nedges++] = map_goto(stateno, *rp);
- if (nullable[*rp] && length > 0) done1 = 0;
- }
- }
- }
-
- if (nedges)
- {
- includes[i] = shortp = NEW2(nedges + 1, short);
- for (j = 0; j < nedges; j++)
- shortp[j] = edge[j];
- shortp[nedges] = -1;
- }
- }
-
- new_includes = transpose(includes, ngotos);
-
- for (i = 0; i < ngotos; i++)
- if (includes[i])
- free(includes[i]);
-
- free(includes);
-
- includes = new_includes;
-
- free(edge);
- free(states);
-}
-
-
-static void
-add_lookback_edge(int stateno, int ruleno, int gotono)
-{
- int i, k;
- int found;
- shorts *sp;
-
- i = lookaheads[stateno];
- k = lookaheads[stateno + 1];
- found = 0;
- while (!found && i < k)
- {
- if (LAruleno[i] == ruleno)
- found = 1;
- else
- ++i;
- }
- assert(found);
-
- sp = NEW(shorts);
- sp->next = lookback[i];
- sp->value = gotono;
- lookback[i] = sp;
-}
-
-
-
-static short **
-transpose(short **R, int n)
-{
- short **new_R;
- short **temp_R;
- short *nedges;
- short *sp;
- int i;
- int k;
-
- nedges = NEW2(n, short);
-
- for (i = 0; i < n; i++)
- {
- sp = R[i];
- if (sp)
- {
- while (*sp >= 0)
- nedges[*sp++]++;
- }
- }
-
- new_R = NEW2(n, short *);
- temp_R = NEW2(n, short *);
-
- for (i = 0; i < n; i++)
- {
- k = nedges[i];
- if (k > 0)
- {
- sp = NEW2(k + 1, short);
- new_R[i] = sp;
- temp_R[i] = sp;
- sp[k] = -1;
- }
- }
-
- free(nedges);
-
- for (i = 0; i < n; i++)
- {
- sp = R[i];
- if (sp)
- {
- while (*sp >= 0)
- *temp_R[*sp++]++ = i;
- }
- }
-
- free(temp_R);
-
- return (new_R);
-}
-
-
-
-static void
-compute_FOLLOWS(void)
-{
- digraph(includes);
-}
-
-
-static void
-compute_lookaheads(void)
-{
- int i, n;
- unsigned *fp1, *fp2, *fp3;
- shorts *sp, *next;
- unsigned *rowp;
-
- rowp = LA;
- n = lookaheads[nstates];
- for (i = 0; i < n; i++)
- {
- fp3 = rowp + tokensetsize;
- for (sp = lookback[i]; sp; sp = sp->next)
- {
- fp1 = rowp;
- fp2 = F + tokensetsize * sp->value;
- while (fp1 < fp3)
- *fp1++ |= *fp2++;
- }
- rowp = fp3;
- }
-
- for (i = 0; i < n; i++)
- for (sp = lookback[i]; sp; sp = next)
- {
- next = sp->next;
- free(sp);
- }
-
- free(lookback);
- free(F);
-}
-
-
-static void
-digraph(short **relation)
-{
- int i;
-
- infinity = ngotos + 2;
- INDEX = NEW2(ngotos + 1, short);
- VERTICES = NEW2(ngotos + 1, short);
- top = 0;
-
- for (i = 0; i < ngotos; i++)
- INDEX[i] = 0;
-
- for (i = 0; i < ngotos; i++)
- {
- if (INDEX[i] == 0 && relation[i])
- traverse(i, relation);
- }
-
- free(INDEX);
- free(VERTICES);
-}
-
-
-
-static void
-traverse(int i, short **R)
-{
- unsigned *fp1;
- unsigned *fp2;
- unsigned *fp3;
- int j;
- short *rp;
-
- int height;
- unsigned *base;
-
- VERTICES[++top] = i;
- INDEX[i] = height = top;
-
- base = F + i * tokensetsize;
- fp3 = base + tokensetsize;
-
- rp = R[i];
- if (rp)
- {
- while ((j = *rp++) >= 0)
- {
- if (INDEX[j] == 0)
- traverse(j, R);
-
- if (INDEX[i] > INDEX[j])
- INDEX[i] = INDEX[j];
-
- fp1 = base;
- fp2 = F + j * tokensetsize;
-
- while (fp1 < fp3)
- *fp1++ |= *fp2++;
- }
- }
-
- if (INDEX[i] == height)
- {
- for (;;)
- {
- j = VERTICES[top--];
- INDEX[j] = infinity;
-
- if (i == j)
- break;
-
- fp1 = base;
- fp2 = F + j * tokensetsize;
-
- while (fp1 < fp3)
- *fp2++ = *fp1++;
- }
- }
-}
diff --git a/usr.bin/yacc/main.c b/usr.bin/yacc/main.c
deleted file mode 100644
index a52703268830..000000000000
--- a/usr.bin/yacc/main.c
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)main.c 5.5 (Berkeley) 5/24/93";
-#endif
-#endif
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <paths.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "defs.h"
-
-char dflag;
-char lflag;
-char rflag;
-char tflag;
-char vflag;
-
-const char *symbol_prefix;
-const char *file_prefix = "y";
-char temp_form[] = "yacc.XXXXXXXXXXX";
-
-int lineno;
-int outline;
-
-char *action_file_name;
-char *code_file_name;
-char *defines_file_name;
-const char *input_file_name = "";
-char *output_file_name;
-char *text_file_name;
-char *union_file_name;
-char *verbose_file_name;
-
-FILE *action_file; /* a temp file, used to save actions associated */
- /* with rules until the parser is written */
-FILE *code_file; /* y.code.c (used when the -r option is specified) */
-FILE *defines_file; /* y.tab.h */
-FILE *input_file; /* the input file */
-FILE *output_file; /* y.tab.c */
-FILE *text_file; /* a temp file, used to save text until all */
- /* symbols have been defined */
-FILE *union_file; /* a temp file, used to save the union */
- /* definition until all symbol have been */
- /* defined */
-FILE *verbose_file; /* y.output */
-
-int nitems;
-int nrules;
-int nsyms;
-int ntokens;
-int nvars;
-
-int start_symbol;
-char **symbol_name;
-short *symbol_value;
-short *symbol_prec;
-char *symbol_assoc;
-
-short *ritem;
-short *rlhs;
-short *rrhs;
-short *rprec;
-char *rassoc;
-short **derives;
-char *nullable;
-
-static void create_file_names(void);
-static void getargs(int, char **);
-static void onintr(int);
-static void open_files(void);
-static void set_signals(void);
-static void usage(void);
-
-volatile sig_atomic_t sigdie;
-
-__dead2 void
-done(int k)
-{
- if (action_file) { fclose(action_file); unlink(action_file_name); }
- if (text_file) { fclose(text_file); unlink(text_file_name); }
- if (union_file) { fclose(union_file); unlink(union_file_name); }
- if (sigdie) { _exit(k); }
- exit(k);
-}
-
-
-static void
-onintr(int signo __unused)
-{
- sigdie = 1;
- done(1);
-}
-
-
-static void
-set_signals(void)
-{
-#ifdef SIGINT
- if (signal(SIGINT, SIG_IGN) != SIG_IGN)
- signal(SIGINT, onintr);
-#endif
-#ifdef SIGTERM
- if (signal(SIGTERM, SIG_IGN) != SIG_IGN)
- signal(SIGTERM, onintr);
-#endif
-#ifdef SIGHUP
- if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
- signal(SIGHUP, onintr);
-#endif
-}
-
-
-static void
-usage(void)
-{
- fprintf(stderr, "%s\n%s\n",
- "usage: yacc [-dlrtv] [-b file_prefix] [-o output_filename]",
- " [-p symbol_prefix] filename");
- exit(1);
-}
-
-
-static void
-getargs(int argc, char *argv[])
-{
- int ch;
-
- while ((ch = getopt(argc, argv, "b:dlo:p:rtvy")) != -1)
- {
- switch (ch)
- {
- case 'b':
- file_prefix = optarg;
- break;
-
- case 'd':
- dflag = 1;
- break;
-
- case 'l':
- lflag = 1;
- break;
-
- case 'o':
- output_file_name = optarg;
- break;
-
- case 'p':
- symbol_prefix = optarg;
- break;
-
- case 'r':
- rflag = 1;
- break;
-
- case 't':
- tflag = 1;
- break;
-
- case 'v':
- vflag = 1;
- break;
-
- case 'y':
- /* for bison compatibility -- byacc is already POSIX compatible */
- break;
-
- default:
- usage();
- }
- }
-
- if (optind + 1 != argc)
- usage();
- if (strcmp(argv[optind], "-") == 0)
- input_file = stdin;
- else
- input_file_name = argv[optind];
-}
-
-
-void *
-allocate(size_t n)
-{
- void *p;
-
- p = NULL;
- if (n)
- {
- p = calloc(1, n);
- if (!p) no_space();
- }
- return (p);
-}
-
-
-static void
-create_file_names(void)
-{
- int i, len;
- const char *tmpdir;
-
- if (!(tmpdir = getenv("TMPDIR")))
- tmpdir = _PATH_TMP;
-
- len = strlen(tmpdir);
- i = len + strlen(temp_form) + 1;
- if (len && tmpdir[len-1] != '/')
- ++i;
-
- action_file_name = malloc(i);
- if (action_file_name == 0) no_space();
- text_file_name = malloc(i);
- if (text_file_name == 0) no_space();
- union_file_name = malloc(i);
- if (union_file_name == 0) no_space();
-
- strcpy(action_file_name, tmpdir);
- strcpy(text_file_name, tmpdir);
- strcpy(union_file_name, tmpdir);
-
- if (len && tmpdir[len - 1] != '/')
- {
- action_file_name[len] = '/';
- text_file_name[len] = '/';
- union_file_name[len] = '/';
- ++len;
- }
-
- strcpy(action_file_name + len, temp_form);
- strcpy(text_file_name + len, temp_form);
- strcpy(union_file_name + len, temp_form);
-
- action_file_name[len + 5] = 'a';
- text_file_name[len + 5] = 't';
- union_file_name[len + 5] = 'u';
-
- if (output_file_name != 0)
- {
- file_prefix = output_file_name;
- len = strlen(file_prefix);
- }
- else
- {
- len = strlen(file_prefix);
- output_file_name = malloc(len + 7);
- if (output_file_name == 0)
- no_space();
- strcpy(output_file_name, file_prefix);
- strcpy(output_file_name + len, OUTPUT_SUFFIX);
- }
-
- if (rflag)
- {
- code_file_name = malloc(len + 8);
- if (code_file_name == 0)
- no_space();
- strcpy(code_file_name, file_prefix);
- if (file_prefix == output_file_name)
- {
- /*
- * XXX ".tab.c" here is OUTPUT_SUFFIX, but since its length is
- * in various magic numbers, don't bother using the macro.
- */
- if (len >= 6 && strcmp(code_file_name + len - 6, ".tab.c") == 0)
- strcpy(code_file_name + len - 6, CODE_SUFFIX);
- else if (len >= 2 && strcmp(code_file_name + len - 2, ".c") == 0)
- strcpy(code_file_name + len - 2, CODE_SUFFIX);
- else
- strcpy(code_file_name + len, CODE_SUFFIX);
- }
- else
- strcpy(code_file_name + len, CODE_SUFFIX);
- }
- else
- code_file_name = output_file_name;
-
- if (dflag)
- {
- defines_file_name = malloc(len + 7);
- if (defines_file_name == 0)
- no_space();
- strcpy(defines_file_name, file_prefix);
- if (file_prefix == output_file_name)
- {
-#define BISON_DEFINES_SUFFIX ".h"
- if (len >= 2 && strcmp(defines_file_name + len - 2, ".c") == 0)
- strcpy(defines_file_name + len - 2, BISON_DEFINES_SUFFIX);
- else
- strcpy(defines_file_name + len, BISON_DEFINES_SUFFIX);
- }
- else
- strcpy(defines_file_name + len, DEFINES_SUFFIX);
- }
-
- if (vflag)
- {
- verbose_file_name = malloc(len + 8);
- if (verbose_file_name == 0)
- no_space();
- strcpy(verbose_file_name, file_prefix);
- if (file_prefix == output_file_name)
- {
- if (len >= 6 && strcmp(verbose_file_name + len - 6, ".tab.c") == 0)
- strcpy(verbose_file_name + len - 6, VERBOSE_SUFFIX);
- else if (len >= 2 && strcmp(verbose_file_name + len - 2, ".c") == 0)
- strcpy(verbose_file_name + len - 2, VERBOSE_SUFFIX);
- else
- strcpy(verbose_file_name + len, VERBOSE_SUFFIX);
- }
- else
- strcpy(verbose_file_name + len, VERBOSE_SUFFIX);
- }
-}
-
-
-static void
-open_files(void)
-{
- int fd;
-
- create_file_names();
-
- if (input_file == 0)
- {
- input_file = fopen(input_file_name, "r");
- if (input_file == 0)
- open_error(input_file_name);
- }
-
- fd = mkstemp(action_file_name);
- if (fd < 0 || (action_file = fdopen(fd, "w")) == NULL) {
- if (fd >= 0)
- close(fd);
- open_error(action_file_name);
- }
- fd = mkstemp(text_file_name);
- if (fd < 0 || (text_file = fdopen(fd, "w")) == NULL) {
- if (fd >= 0)
- close(fd);
- open_error(text_file_name);
- }
- fd = mkstemp(union_file_name);
- if (fd < 0 || (union_file = fdopen(fd, "w")) == NULL) {
- if (fd >= 0)
- close(fd);
- open_error(union_file_name);
- }
-
- text_file = fopen(text_file_name, "w");
- if (text_file == 0)
- open_error(text_file_name);
-
- if (vflag)
- {
- verbose_file = fopen(verbose_file_name, "w");
- if (verbose_file == 0)
- open_error(verbose_file_name);
- }
-
- if (dflag)
- {
- defines_file = fopen(defines_file_name, "w");
- if (defines_file == 0)
- open_error(defines_file_name);
- union_file = fopen(union_file_name, "w");
- if (union_file == 0)
- open_error(union_file_name);
- }
-
- output_file = fopen(output_file_name, "w");
- if (output_file == 0)
- open_error(output_file_name);
-
- if (rflag)
- {
- code_file = fopen(code_file_name, "w");
- if (code_file == 0)
- open_error(code_file_name);
- }
- else
- code_file = output_file;
-}
-
-
-int
-main(int argc, char *argv[])
-{
- set_signals();
- getargs(argc, argv);
- open_files();
- reader();
- lr0();
- lalr();
- make_parser();
- verbose();
- output();
- done(0);
- /*NOTREACHED*/
- return (0);
-}
diff --git a/usr.bin/yacc/output.c b/usr.bin/yacc/output.c
deleted file mode 100644
index 3abe8af4b4bd..000000000000
--- a/usr.bin/yacc/output.c
+++ /dev/null
@@ -1,1342 +0,0 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)output.c 5.7 (Berkeley) 5/24/93";
-#endif
-#endif
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-#include "defs.h"
-
-static int nvectors;
-static int nentries;
-static short **froms;
-static short **tos;
-static short *tally;
-static short *width;
-static short *state_count;
-static short *order;
-static short *base;
-static short *pos;
-static int maxtable;
-static short *table;
-static short *check;
-static int lowzero;
-static int high;
-
-static int default_goto(int);
-static void free_itemsets(void);
-static void free_reductions(void);
-static void free_shifts(void);
-static void goto_actions(void);
-static int is_C_identifier(char *);
-static int matching_vector(int);
-static void output_actions(void);
-static void output_base(void);
-static void output_check(void);
-static void output_debug(void);
-static void output_defines(void);
-static void output_prefix(void);
-static void output_rule_data(void);
-static void output_semantic_actions(void);
-static void output_stored_text(void);
-static void output_stype(void);
-static void output_table(void);
-static void output_trailing_text(void);
-static void output_yydefred(void);
-static void pack_table(void);
-static int pack_vector(int);
-static void save_column(int, int);
-static void sort_actions(void);
-static void token_actions(void);
-static int increase_maxtable(int);
-
-static const char line_format[] = "#line %d \"%s\"\n";
-
-
-void
-output(void)
-{
- free_itemsets();
- free_shifts();
- free_reductions();
- output_prefix();
- output_stored_text();
- output_defines();
- output_rule_data();
- output_yydefred();
- output_actions();
- free_parser();
- output_debug();
- output_stype();
- if (rflag) write_section(tables);
- write_section(header);
- output_trailing_text();
- write_section(body);
- output_semantic_actions();
- write_section(trailer);
-}
-
-
-static void
-output_prefix(void)
-{
- if (symbol_prefix == NULL)
- symbol_prefix = "yy";
- else
- {
- ++outline;
- fprintf(code_file, "#define yyparse %sparse\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yylex %slex\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yyerror %serror\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yychar %schar\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yyval %sval\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yylval %slval\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yydebug %sdebug\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yynerrs %snerrs\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yyerrflag %serrflag\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yyss %sss\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yyssp %sssp\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yyvs %svs\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yyvsp %svsp\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yylhs %slhs\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yylen %slen\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yydefred %sdefred\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yydgoto %sdgoto\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yysindex %ssindex\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yyrindex %srindex\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yygindex %sgindex\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yytable %stable\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yycheck %scheck\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yyname %sname\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yyrule %srule\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yysslim %ssslim\n", symbol_prefix);
- ++outline;
- fprintf(code_file, "#define yystacksize %sstacksize\n", symbol_prefix);
- }
- ++outline;
- fprintf(code_file, "#define YYPREFIX \"%s\"\n", symbol_prefix);
-}
-
-
-static void
-output_rule_data(void)
-{
- int i;
- int j;
-
-
- fprintf(output_file, "const short %slhs[] = {%42d,", symbol_prefix,
- symbol_value[start_symbol]);
-
- j = 10;
- for (i = 3; i < nrules; i++)
- {
- if (j >= 10)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 1;
- }
- else
- ++j;
-
- fprintf(output_file, "%5d,", symbol_value[rlhs[i]]);
- }
- if (!rflag) outline += 2;
- fprintf(output_file, "\n};\n");
-
- fprintf(output_file, "const short %slen[] = {%42d,", symbol_prefix, 2);
-
- j = 10;
- for (i = 3; i < nrules; i++)
- {
- if (j >= 10)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 1;
- }
- else
- j++;
-
- fprintf(output_file, "%5d,", rrhs[i + 1] - rrhs[i] - 1);
- }
- if (!rflag) outline += 2;
- fprintf(output_file, "\n};\n");
-}
-
-
-static void
-output_yydefred(void)
-{
- int i, j;
-
- fprintf(output_file, "const short %sdefred[] = {%39d,", symbol_prefix,
- (defred[0] ? defred[0] - 2 : 0));
-
- j = 10;
- for (i = 1; i < nstates; i++)
- {
- if (j < 10)
- ++j;
- else
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 1;
- }
-
- fprintf(output_file, "%5d,", (defred[i] ? defred[i] - 2 : 0));
- }
-
- if (!rflag) outline += 2;
- fprintf(output_file, "\n};\n");
-}
-
-
-static void
-output_actions(void)
-{
- nvectors = 2*nstates + nvars;
-
- froms = NEW2(nvectors, short *);
- tos = NEW2(nvectors, short *);
- tally = NEW2(nvectors, short);
- width = NEW2(nvectors, short);
-
- token_actions();
- free(lookaheads);
- free(LA);
- free(LAruleno);
- free(accessing_symbol);
-
- goto_actions();
- free(goto_map + ntokens);
- free(from_state);
- free(to_state);
-
- sort_actions();
- pack_table();
- output_base();
- output_table();
- output_check();
-}
-
-
-static void
-token_actions(void)
-{
- int i, j;
- int shiftcount, reducecount;
- int max, min;
- short *actionrow, *r, *s;
- action *p;
-
- actionrow = NEW2(2*ntokens, short);
- for (i = 0; i < nstates; ++i)
- {
- if (parser[i])
- {
- for (j = 0; j < 2*ntokens; ++j)
- actionrow[j] = 0;
-
- shiftcount = 0;
- reducecount = 0;
- for (p = parser[i]; p; p = p->next)
- {
- if (p->suppressed == 0)
- {
- if (p->action_code == SHIFT)
- {
- ++shiftcount;
- actionrow[p->symbol] = p->number;
- }
- else if (p->action_code == REDUCE && p->number != defred[i])
- {
- ++reducecount;
- actionrow[p->symbol + ntokens] = p->number;
- }
- }
- }
-
- tally[i] = shiftcount;
- tally[nstates+i] = reducecount;
- width[i] = 0;
- width[nstates+i] = 0;
- if (shiftcount > 0)
- {
- froms[i] = r = NEW2(shiftcount, short);
- tos[i] = s = NEW2(shiftcount, short);
- min = SHRT_MAX;
- max = 0;
- for (j = 0; j < ntokens; ++j)
- {
- if (actionrow[j])
- {
- if (min > symbol_value[j])
- min = symbol_value[j];
- if (max < symbol_value[j])
- max = symbol_value[j];
- *r++ = symbol_value[j];
- *s++ = actionrow[j];
- }
- }
- width[i] = max - min + 1;
- }
- if (reducecount > 0)
- {
- froms[nstates+i] = r = NEW2(reducecount, short);
- tos[nstates+i] = s = NEW2(reducecount, short);
- min = SHRT_MAX;
- max = 0;
- for (j = 0; j < ntokens; ++j)
- {
- if (actionrow[ntokens+j])
- {
- if (min > symbol_value[j])
- min = symbol_value[j];
- if (max < symbol_value[j])
- max = symbol_value[j];
- *r++ = symbol_value[j];
- *s++ = actionrow[ntokens+j] - 2;
- }
- }
- width[nstates+i] = max - min + 1;
- }
- }
- }
- free(actionrow);
-}
-
-static void
-goto_actions(void)
-{
- int i, j, k;
-
- state_count = NEW2(nstates, short);
-
- k = default_goto(start_symbol + 1);
- fprintf(output_file, "const short %sdgoto[] = {%40d,", symbol_prefix, k);
- save_column(start_symbol + 1, k);
-
- j = 10;
- for (i = start_symbol + 2; i < nsyms; i++)
- {
- if (j >= 10)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 1;
- }
- else
- ++j;
-
- k = default_goto(i);
- fprintf(output_file, "%5d,", k);
- save_column(i, k);
- }
-
- if (!rflag) outline += 2;
- fprintf(output_file, "\n};\n");
- free(state_count);
-}
-
-static int
-default_goto(int symbol)
-{
- int i;
- int m;
- int n;
- int default_state;
- int max;
-
- m = goto_map[symbol];
- n = goto_map[symbol + 1];
-
- if (m == n) return (0);
-
- for (i = 0; i < nstates; i++)
- state_count[i] = 0;
-
- for (i = m; i < n; i++)
- state_count[to_state[i]]++;
-
- max = 0;
- default_state = 0;
- for (i = 0; i < nstates; i++)
- {
- if (state_count[i] > max)
- {
- max = state_count[i];
- default_state = i;
- }
- }
-
- return (default_state);
-}
-
-
-
-static void
-save_column(int symbol, int default_state)
-{
- int i;
- int m;
- int n;
- short *sp;
- short *sp1;
- short *sp2;
- int count;
- int symno;
-
- m = goto_map[symbol];
- n = goto_map[symbol + 1];
-
- count = 0;
- for (i = m; i < n; i++)
- {
- if (to_state[i] != default_state)
- ++count;
- }
- if (count == 0) return;
-
- symno = symbol_value[symbol] + 2*nstates;
-
- froms[symno] = sp1 = sp = NEW2(count, short);
- tos[symno] = sp2 = NEW2(count, short);
-
- for (i = m; i < n; i++)
- {
- if (to_state[i] != default_state)
- {
- *sp1++ = from_state[i];
- *sp2++ = to_state[i];
- }
- }
-
- tally[symno] = count;
- width[symno] = sp1[-1] - sp[0] + 1;
-}
-
-static void
-sort_actions(void)
-{
- int i;
- int j;
- int k;
- int t;
- int w;
-
- order = NEW2(nvectors, short);
- nentries = 0;
-
- for (i = 0; i < nvectors; i++)
- {
- if (tally[i] > 0)
- {
- t = tally[i];
- w = width[i];
- j = nentries - 1;
-
- while (j >= 0 && (width[order[j]] < w))
- j--;
-
- while (j >= 0 && (width[order[j]] == w) && (tally[order[j]] < t))
- j--;
-
- for (k = nentries - 1; k > j; k--)
- order[k + 1] = order[k];
-
- order[j + 1] = i;
- nentries++;
- }
- }
-}
-
-
-static void
-pack_table(void)
-{
- int i;
- int place;
- int state;
-
- base = NEW2(nvectors, short);
- pos = NEW2(nentries, short);
-
- maxtable = 10000;
- table = NEW2(maxtable, short);
- check = NEW2(maxtable, short);
-
- lowzero = 0;
- high = 0;
-
- for (i = 0; i < maxtable; i++)
- check[i] = -1;
-
- for (i = 0; i < nentries; i++)
- {
- state = matching_vector(i);
-
- if (state < 0)
- place = pack_vector(i);
- else
- place = base[state];
-
- pos[i] = place;
- base[order[i]] = place;
- }
-
- for (i = 0; i < nvectors; i++)
- {
- if (froms[i])
- free(froms[i]);
- if (tos[i])
- free(tos[i]);
- }
-
- free(froms);
- free(tos);
- free(pos);
-}
-
-
-/* The function matching_vector determines if the vector specified by */
-/* the input parameter matches a previously considered vector. The */
-/* test at the start of the function checks if the vector represents */
-/* a row of shifts over terminal symbols or a row of reductions, or a */
-/* column of shifts over a nonterminal symbol. Berkeley Yacc does not */
-/* check if a column of shifts over a nonterminal symbols matches a */
-/* previously considered vector. Because of the nature of LR parsing */
-/* tables, no two columns can match. Therefore, the only possible */
-/* match would be between a row and a column. Such matches are */
-/* unlikely. Therefore, to save time, no attempt is made to see if a */
-/* column matches a previously considered vector. */
-/* */
-/* Matching_vector is poorly designed. The test could easily be made */
-/* faster. Also, it depends on the vectors being in a specific */
-/* order. */
-
-static int
-matching_vector(int vector)
-{
- int i;
- int j;
- int k;
- int t;
- int w;
- int match;
- int prev;
-
- i = order[vector];
- if (i >= 2*nstates)
- return (-1);
-
- t = tally[i];
- w = width[i];
-
- for (prev = vector - 1; prev >= 0; prev--)
- {
- j = order[prev];
- if (width[j] != w || tally[j] != t)
- return (-1);
-
- match = 1;
- for (k = 0; match && k < t; k++)
- {
- if (tos[j][k] != tos[i][k] || froms[j][k] != froms[i][k])
- match = 0;
- }
-
- if (match)
- return (j);
- }
-
- return (-1);
-}
-
-
-
-static int
-pack_vector(int vector)
-{
- int i, j, k;
- int t;
- int loc;
- int ok;
- short *from;
- short *to;
-
- loc = 0;
- i = order[vector];
- t = tally[i];
- assert(t);
-
- from = froms[i];
- to = tos[i];
-
- j = lowzero - from[0];
- for (k = 1; k < t; ++k)
- if (lowzero - from[k] > j)
- j = lowzero - from[k];
- for (;; ++j)
- {
- if (j == 0)
- continue;
- ok = 1;
- for (k = 0; ok && k < t; k++)
- {
- loc = j + from[k];
- if (loc >= maxtable)
- {
- if (loc >= MAXTABLE)
- fatal("maximum table size exceeded");
- maxtable = increase_maxtable(loc);
- }
-
- if (check[loc] != -1)
- ok = 0;
- }
- for (k = 0; ok && k < vector; k++)
- {
- if (pos[k] == j)
- ok = 0;
- }
- if (ok)
- {
- for (k = 0; k < t; k++)
- {
- loc = j + from[k];
- table[loc] = to[k];
- check[loc] = from[k];
- if (loc > high) high = loc;
- }
-
- while (check[lowzero] != -1)
- {
- if (lowzero >= maxtable)
- {
- if (lowzero >= MAXTABLE)
- {
- fatal("maximum table size exceeded in check\n");
- }
-
- maxtable = increase_maxtable(loc);
- }
-
- ++lowzero;
- }
-
- return (j);
- }
- }
-}
-
-
-
-static void
-output_base(void)
-{
- int i, j;
-
- fprintf(output_file, "const short %ssindex[] = {%39d,", symbol_prefix,
- base[0]);
-
- j = 10;
- for (i = 1; i < nstates; i++)
- {
- if (j >= 10)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 1;
- }
- else
- ++j;
-
- fprintf(output_file, "%5d,", base[i]);
- }
-
- if (!rflag) outline += 2;
- fprintf(output_file, "\n};\nconst short %srindex[] = {%39d,", symbol_prefix,
- base[nstates]);
-
- j = 10;
- for (i = nstates + 1; i < 2*nstates; i++)
- {
- if (j >= 10)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 1;
- }
- else
- ++j;
-
- fprintf(output_file, "%5d,", base[i]);
- }
-
- if (!rflag) outline += 2;
- fprintf(output_file, "\n};\nconst short %sgindex[] = {%39d,", symbol_prefix,
- base[2*nstates]);
-
- j = 10;
- for (i = 2*nstates + 1; i < nvectors - 1; i++)
- {
- if (j >= 10)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 1;
- }
- else
- ++j;
-
- fprintf(output_file, "%5d,", base[i]);
- }
-
- if (!rflag) outline += 2;
- fprintf(output_file, "\n};\n");
- free(base);
-}
-
-
-
-static void
-output_table(void)
-{
- int i;
- int j;
-
- ++outline;
- fprintf(code_file, "#define YYTABLESIZE %d\n", high);
- fprintf(output_file, "const short %stable[] = {%40d,", symbol_prefix,
- table[0]);
-
- j = 10;
- for (i = 1; i <= high; i++)
- {
- if (j >= 10)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 1;
- }
- else
- ++j;
-
- fprintf(output_file, "%5d,", table[i]);
- }
-
- if (!rflag) outline += 2;
- fprintf(output_file, "\n};\n");
- free(table);
-}
-
-
-
-static void
-output_check(void)
-{
- int i;
- int j;
-
- fprintf(output_file, "const short %scheck[] = {%40d,", symbol_prefix,
- check[0]);
-
- j = 10;
- for (i = 1; i <= high; i++)
- {
- if (j >= 10)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 1;
- }
- else
- ++j;
-
- fprintf(output_file, "%5d,", check[i]);
- }
-
- if (!rflag) outline += 2;
- fprintf(output_file, "\n};\n");
- free(check);
-}
-
-
-static int
-is_C_identifier(char *name)
-{
- char *s;
- int c;
-
- s = name;
- c = *s;
- if (c == '"')
- {
- c = *++s;
- if (!isalpha(c) && c != '_' && c != '$')
- return (0);
- while ((c = *++s) != '"')
- {
- if (!isalnum(c) && c != '_' && c != '$')
- return (0);
- }
- return (1);
- }
-
- if (!isalpha(c) && c != '_' && c != '$')
- return (0);
- while ((c = *++s))
- {
- if (!isalnum(c) && c != '_' && c != '$')
- return (0);
- }
- return (1);
-}
-
-
-static void
-output_defines(void)
-{
- int c, i;
- char *s;
-
- ++outline;
- fprintf(code_file, "#define YYERRCODE %d\n", symbol_value[1]);
-
- if(dflag)
- {
- fprintf(defines_file, "#ifndef YYERRCODE\n");
- fprintf(defines_file, "#define YYERRCODE %d\n", symbol_value[1]);
- fprintf(defines_file, "#endif\n\n");
- }
- for (i = 2; i < ntokens; ++i)
- {
- s = symbol_name[i];
- if (is_C_identifier(s))
- {
- fprintf(code_file, "#define ");
- if (dflag) fprintf(defines_file, "#define ");
- c = *s;
- if (c == '"')
- {
- while ((c = *++s) != '"')
- {
- putc(c, code_file);
- if (dflag) putc(c, defines_file);
- }
- }
- else
- {
- do
- {
- putc(c, code_file);
- if (dflag) putc(c, defines_file);
- }
- while ((c = *++s));
- }
- ++outline;
- fprintf(code_file, " %d\n", symbol_value[i]);
- if (dflag) fprintf(defines_file, " %d\n", symbol_value[i]);
- }
- }
-
- if (dflag && unionized)
- {
- fclose(union_file);
- union_file = fopen(union_file_name, "r");
- if (union_file == NULL) open_error(union_file_name);
- while ((c = getc(union_file)) != EOF)
- putc(c, defines_file);
- fprintf(defines_file, " YYSTYPE;\nextern YYSTYPE %slval;\n",
- symbol_prefix);
- }
-}
-
-
-static void
-output_stored_text(void)
-{
- int c;
- FILE *in, *out;
-
- fclose(text_file);
- text_file = fopen(text_file_name, "r");
- if (text_file == NULL)
- open_error(text_file_name);
- in = text_file;
- if ((c = getc(in)) == EOF)
- return;
- out = code_file;
- if (c == '\n')
- ++outline;
- putc(c, out);
- while ((c = getc(in)) != EOF)
- {
- if (c == '\n')
- ++outline;
- putc(c, out);
- }
- if (!lflag)
- fprintf(out, line_format, ++outline + 1, code_file_name);
-}
-
-
-static void
-output_debug(void)
-{
- int i, j, k, max;
- char **symnam, *s;
- static char eof[] = "end-of-file";
-
- ++outline;
- fprintf(code_file, "#define YYFINAL %d\n", final_state);
- outline += 3;
- fprintf(code_file, "#ifndef YYDEBUG\n#define YYDEBUG %d\n#endif\n",
- tflag);
- if (rflag)
- fprintf(output_file, "#ifndef YYDEBUG\n#define YYDEBUG %d\n#endif\n",
- tflag);
-
- max = 0;
- for (i = 2; i < ntokens; ++i)
- if (symbol_value[i] > max)
- max = symbol_value[i];
- ++outline;
- fprintf(code_file, "#define YYMAXTOKEN %d\n", max);
-
- symnam = malloc((max+1)*sizeof(char *));
- if (symnam == 0) no_space();
-
- /* Note that it is not necessary to initialize the element */
- /* symnam[max]. */
- for (i = 0; i < max; ++i)
- symnam[i] = 0;
- for (i = ntokens - 1; i >= 2; --i)
- symnam[symbol_value[i]] = symbol_name[i];
- symnam[0] = eof;
-
- if (!rflag) ++outline;
- fprintf(output_file, "#if YYDEBUG\n");
- fprintf(output_file, "const char * const %sname[] = {", symbol_prefix);
- j = 80;
- for (i = 0; i <= max; ++i)
- {
- if ((s = symnam[i]))
- {
- if (s[0] == '"')
- {
- k = 7;
- while (*++s != '"')
- {
- ++k;
- if (*s == '\\')
- {
- k += 2;
- if (*++s == '\\')
- ++k;
- }
- }
- j += k;
- if (j > 80)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = k;
- }
- fprintf(output_file, "\"\\\"");
- s = symnam[i];
- while (*++s != '"')
- {
- if (*s == '\\')
- {
- fprintf(output_file, "\\\\");
- if (*++s == '\\')
- fprintf(output_file, "\\\\");
- else
- putc(*s, output_file);
- }
- else
- putc(*s, output_file);
- }
- fprintf(output_file, "\\\"\",");
- }
- else if (s[0] == '\'')
- {
- if (s[1] == '"')
- {
- j += 7;
- if (j > 80)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 7;
- }
- fprintf(output_file, "\"'\\\"'\",");
- }
- else
- {
- k = 5;
- while (*++s != '\'')
- {
- ++k;
- if (*s == '\\')
- {
- k += 2;
- if (*++s == '\\')
- ++k;
- }
- }
- j += k;
- if (j > 80)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = k;
- }
- fprintf(output_file, "\"'");
- s = symnam[i];
- while (*++s != '\'')
- {
- if (*s == '\\')
- {
- fprintf(output_file, "\\\\");
- if (*++s == '\\')
- fprintf(output_file, "\\\\");
- else
- putc(*s, output_file);
- }
- else
- putc(*s, output_file);
- }
- fprintf(output_file, "'\",");
- }
- }
- else
- {
- k = strlen(s) + 3;
- j += k;
- if (j > 80)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = k;
- }
- putc('"', output_file);
- do { putc(*s, output_file); } while (*++s);
- fprintf(output_file, "\",");
- }
- }
- else
- {
- j += 2;
- if (j > 80)
- {
- if (!rflag) ++outline;
- putc('\n', output_file);
- j = 2;
- }
- fprintf(output_file, "0,");
- }
- }
- if (!rflag) outline += 2;
- fprintf(output_file, "\n};\n");
- free(symnam);
-
- if (!rflag) ++outline;
- fprintf(output_file, "const char * const %srule[] = {\n", symbol_prefix);
- for (i = 2; i < nrules; ++i)
- {
- fprintf(output_file, "\"%s :", symbol_name[rlhs[i]]);
- for (j = rrhs[i]; ritem[j] > 0; ++j)
- {
- s = symbol_name[ritem[j]];
- if (s[0] == '"')
- {
- fprintf(output_file, " \\\"");
- while (*++s != '"')
- {
- if (*s == '\\')
- {
- if (s[1] == '\\')
- fprintf(output_file, "\\\\\\\\");
- else
- fprintf(output_file, "\\\\%c", s[1]);
- ++s;
- }
- else
- putc(*s, output_file);
- }
- fprintf(output_file, "\\\"");
- }
- else if (s[0] == '\'')
- {
- if (s[1] == '"')
- fprintf(output_file, " '\\\"'");
- else if (s[1] == '\\')
- {
- if (s[2] == '\\')
- fprintf(output_file, " '\\\\\\\\");
- else
- fprintf(output_file, " '\\\\%c", s[2]);
- s += 2;
- while (*++s != '\'')
- putc(*s, output_file);
- putc('\'', output_file);
- }
- else
- fprintf(output_file, " '%c'", s[1]);
- }
- else
- fprintf(output_file, " %s", s);
- }
- if (!rflag) ++outline;
- fprintf(output_file, "\",\n");
- }
-
- if (!rflag) outline += 2;
- fprintf(output_file, "};\n#endif\n");
-}
-
-
-static void
-output_stype(void)
-{
- if (!unionized && ntags == 0)
- {
- outline += 3;
- fprintf(code_file, "#ifndef YYSTYPE\ntypedef int YYSTYPE;\n#endif\n");
- }
-}
-
-
-static void
-output_trailing_text(void)
-{
- int c, last;
- FILE *in, *out;
-
- if (line == 0)
- return;
-
- in = input_file;
- out = code_file;
- c = *cptr;
- if (c == '\n')
- {
- ++lineno;
- if ((c = getc(in)) == EOF)
- return;
- if (!lflag)
- {
- ++outline;
- fprintf(out, line_format, lineno, input_file_name);
- }
- if (c == '\n')
- ++outline;
- putc(c, out);
- last = c;
- }
- else
- {
- if (!lflag)
- {
- ++outline;
- fprintf(out, line_format, lineno, input_file_name);
- }
- do { putc(c, out); } while ((c = *++cptr) != '\n');
- ++outline;
- putc('\n', out);
- last = '\n';
- }
-
- while ((c = getc(in)) != EOF)
- {
- if (c == '\n')
- ++outline;
- putc(c, out);
- last = c;
- }
-
- if (last != '\n')
- {
- ++outline;
- putc('\n', out);
- }
- if (!lflag)
- fprintf(out, line_format, ++outline + 1, code_file_name);
-}
-
-
-static void
-output_semantic_actions(void)
-{
- int c, last;
- FILE *out;
-
- fclose(action_file);
- action_file = fopen(action_file_name, "r");
- if (action_file == NULL)
- open_error(action_file_name);
-
- if ((c = getc(action_file)) == EOF)
- return;
-
- out = code_file;
- last = c;
- if (c == '\n')
- ++outline;
- putc(c, out);
- while ((c = getc(action_file)) != EOF)
- {
- if (c == '\n')
- ++outline;
- putc(c, out);
- last = c;
- }
-
- if (last != '\n')
- {
- ++outline;
- putc('\n', out);
- }
-
- if (!lflag)
- fprintf(out, line_format, ++outline + 1, code_file_name);
-}
-
-
-static void
-free_itemsets(void)
-{
- core *cp, *next;
-
- free(state_table);
- for (cp = first_state; cp; cp = next)
- {
- next = cp->next;
- free(cp);
- }
-}
-
-
-static void
-free_shifts(void)
-{
- shifts *sp, *next;
-
- free(shift_table);
- for (sp = first_shift; sp; sp = next)
- {
- next = sp->next;
- free(sp);
- }
-}
-
-
-
-static void
-free_reductions(void)
-{
- reductions *rp, *next;
-
- free(reduction_table);
- for (rp = first_reduction; rp; rp = next)
- {
- next = rp->next;
- free(rp);
- }
-}
-
-/*
- * increase_maxtable
- *
- * inputs - loc location in table
- * output - size increased to
- * side effects - table is increase by at least 200 short words
- */
-
-static int
-increase_maxtable(int loc)
-{
- int newmax;
- int l;
-
- newmax = maxtable;
-
- do { newmax += 200; } while (newmax <= loc);
- table = realloc(table, newmax*sizeof(short));
- if (table == 0) no_space();
- check = realloc(check, newmax*sizeof(short));
- if (check == 0) no_space();
- for (l = maxtable; l < newmax; ++l)
- {
- table[l] = 0;
- check[l] = -1;
- }
-
- return(newmax);
-}
diff --git a/usr.bin/yacc/skeleton.c b/usr.bin/yacc/skeleton.c
deleted file mode 100644
index 285c281c18b7..000000000000
--- a/usr.bin/yacc/skeleton.c
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)skeleton.c 5.8 (Berkeley) 4/29/95";
-#endif
-#endif
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include "defs.h"
-
-/* The definition of yysccsid in the banner should be replaced with */
-/* a #pragma ident directive if the target C compiler supports */
-/* #pragma ident directives. */
-/* */
-/* If the skeleton is changed, the banner should be changed so that */
-/* the altered version can be easily distinguished from the original. */
-/* */
-/* The #defines included with the banner are there because they are */
-/* useful in subsequent code. The macros #defined in the header or */
-/* the body either are not useful outside of semantic actions or */
-/* are conditional. */
-
-const char *banner[] =
-{
- "#include <stdlib.h>",
- "#include <string.h>",
- "#ifndef lint",
- "#ifdef __unused",
- "__unused",
- "#endif",
- "static char const ",
- "yyrcsid[] = \"$FreeBSD$\";",
- "#endif",
- "#define YYBYACC 1",
- "#define YYMAJOR 1",
- "#define YYMINOR 9",
- "#define YYLEX yylex()",
- "#define YYEMPTY -1",
- "#define yyclearin (yychar=(YYEMPTY))",
- "#define yyerrok (yyerrflag=0)",
- "#define YYRECOVERING() (yyerrflag!=0)",
- "#if defined(__cplusplus) || __STDC__",
- "static int yygrowstack(void);",
- "#else",
- "static int yygrowstack();",
- "#endif",
- 0
-};
-
-
-const char *tables[] =
-{
- "extern const short yylhs[];",
- "extern const short yylen[];",
- "extern const short yydefred[];",
- "extern const short yydgoto[];",
- "extern const short yysindex[];",
- "extern const short yyrindex[];",
- "extern const short yygindex[];",
- "extern const short yytable[];",
- "extern const short yycheck[];",
- "#if YYDEBUG",
- "extern char *yyname[];",
- "extern char *yyrule[];",
- "#endif",
- 0
-};
-
-
-const char *header[] =
-{
- "#if YYDEBUG",
- "#include <stdio.h>",
- "#endif",
- "#ifdef YYSTACKSIZE",
- "#undef YYMAXDEPTH",
- "#define YYMAXDEPTH YYSTACKSIZE",
- "#else",
- "#ifdef YYMAXDEPTH",
- "#define YYSTACKSIZE YYMAXDEPTH",
- "#else",
- "#define YYSTACKSIZE 10000",
- "#define YYMAXDEPTH 10000",
- "#endif",
- "#endif",
- "#define YYINITSTACKSIZE 200",
- "int yydebug;",
- "int yynerrs;",
- "int yyerrflag;",
- "int yychar;",
- "short *yyssp;",
- "YYSTYPE *yyvsp;",
- "YYSTYPE yyval;",
- "YYSTYPE yylval;",
- "short *yyss;",
- "short *yysslim;",
- "YYSTYPE *yyvs;",
- "int yystacksize;",
- 0
-};
-
-
-const char *body[] =
-{
- "/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
- "#if defined(__cplusplus) || __STDC__",
- "static int yygrowstack(void)",
- "#else",
- "static int yygrowstack()",
- "#endif",
- "{",
- " int newsize, i;",
- " short *newss;",
- " YYSTYPE *newvs;",
- "",
- " if ((newsize = yystacksize) == 0)",
- " newsize = YYINITSTACKSIZE;",
- " else if (newsize >= YYMAXDEPTH)",
- " return -1;",
- " else if ((newsize *= 2) > YYMAXDEPTH)",
- " newsize = YYMAXDEPTH;",
- " i = yyssp - yyss;",
- " newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :",
- " (short *)malloc(newsize * sizeof *newss);",
- " if (newss == NULL)",
- " return -1;",
- " yyss = newss;",
- " yyssp = newss + i;",
- " newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :",
- " (YYSTYPE *)malloc(newsize * sizeof *newvs);",
- " if (newvs == NULL)",
- " return -1;",
- " yyvs = newvs;",
- " yyvsp = newvs + i;",
- " yystacksize = newsize;",
- " yysslim = yyss + newsize - 1;",
- " return 0;",
- "}",
- "",
- "#define YYABORT goto yyabort",
- "#define YYREJECT goto yyabort",
- "#define YYACCEPT goto yyaccept",
- "#define YYERROR goto yyerrlab",
- "",
- "#ifndef YYPARSE_PARAM",
- "#if defined(__cplusplus) || __STDC__",
- "#define YYPARSE_PARAM_ARG void",
- "#define YYPARSE_PARAM_DECL",
- "#else /* ! ANSI-C/C++ */",
- "#define YYPARSE_PARAM_ARG",
- "#define YYPARSE_PARAM_DECL",
- "#endif /* ANSI-C/C++ */",
- "#else /* YYPARSE_PARAM */",
- "#ifndef YYPARSE_PARAM_TYPE",
- "#define YYPARSE_PARAM_TYPE void *",
- "#endif",
- "#if defined(__cplusplus) || __STDC__",
- "#define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM",
- "#define YYPARSE_PARAM_DECL",
- "#else /* ! ANSI-C/C++ */",
- "#define YYPARSE_PARAM_ARG YYPARSE_PARAM",
- "#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;",
- "#endif /* ANSI-C/C++ */",
- "#endif /* ! YYPARSE_PARAM */",
- "",
- "int",
- "yyparse (YYPARSE_PARAM_ARG)",
- " YYPARSE_PARAM_DECL",
- "{",
- " int yym, yyn, yystate;",
- "#if YYDEBUG",
- " const char *yys;",
- "",
- " if ((yys = getenv(\"YYDEBUG\")))",
- " {",
- " yyn = *yys;",
- " if (yyn >= '0' && yyn <= '9')",
- " yydebug = yyn - '0';",
- " }",
- "#endif",
- "",
- " yynerrs = 0;",
- " yyerrflag = 0;",
- " yychar = (-1);",
- "",
- " if (yyss == NULL && yygrowstack()) goto yyoverflow;",
- " yyssp = yyss;",
- " yyvsp = yyvs;",
- " *yyssp = yystate = 0;",
- "",
- "yyloop:",
- " if ((yyn = yydefred[yystate])) goto yyreduce;",
- " if (yychar < 0)",
- " {",
- " if ((yychar = yylex()) < 0) yychar = 0;",
- "#if YYDEBUG",
- " if (yydebug)",
- " {",
- " yys = 0;",
- " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
- " if (!yys) yys = \"illegal-symbol\";",
- " printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
- " YYPREFIX, yystate, yychar, yys);",
- " }",
- "#endif",
- " }",
- " if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&",
- " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
- " {",
- "#if YYDEBUG",
- " if (yydebug)",
- " printf(\"%sdebug: state %d, shifting to state %d\\n\",",
- " YYPREFIX, yystate, yytable[yyn]);",
- "#endif",
- " if (yyssp >= yysslim && yygrowstack())",
- " {",
- " goto yyoverflow;",
- " }",
- " *++yyssp = yystate = yytable[yyn];",
- " *++yyvsp = yylval;",
- " yychar = (-1);",
- " if (yyerrflag > 0) --yyerrflag;",
- " goto yyloop;",
- " }",
- " if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&",
- " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
- " {",
- " yyn = yytable[yyn];",
- " goto yyreduce;",
- " }",
- " if (yyerrflag) goto yyinrecovery;",
- "#if defined(lint) || defined(__GNUC__)",
- " goto yynewerror;",
- "#endif",
- "yynewerror:",
- " yyerror(\"syntax error\");",
- "#if defined(lint) || defined(__GNUC__)",
- " goto yyerrlab;",
- "#endif",
- "yyerrlab:",
- " ++yynerrs;",
- "yyinrecovery:",
- " if (yyerrflag < 3)",
- " {",
- " yyerrflag = 3;",
- " for (;;)",
- " {",
- " if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&",
- " yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)",
- " {",
- "#if YYDEBUG",
- " if (yydebug)",
- " printf(\"%sdebug: state %d, error recovery shifting\\",
- " to state %d\\n\", YYPREFIX, *yyssp, yytable[yyn]);",
- "#endif",
- " if (yyssp >= yysslim && yygrowstack())",
- " {",
- " goto yyoverflow;",
- " }",
- " *++yyssp = yystate = yytable[yyn];",
- " *++yyvsp = yylval;",
- " goto yyloop;",
- " }",
- " else",
- " {",
- "#if YYDEBUG",
- " if (yydebug)",
- " printf(\"%sdebug: error recovery discarding state %d\
-\\n\",",
- " YYPREFIX, *yyssp);",
- "#endif",
- " if (yyssp <= yyss) goto yyabort;",
- " --yyssp;",
- " --yyvsp;",
- " }",
- " }",
- " }",
- " else",
- " {",
- " if (yychar == 0) goto yyabort;",
- "#if YYDEBUG",
- " if (yydebug)",
- " {",
- " yys = 0;",
- " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
- " if (!yys) yys = \"illegal-symbol\";",
- " printf(\"%sdebug: state %d, error recovery discards token %d\
- (%s)\\n\",",
- " YYPREFIX, yystate, yychar, yys);",
- " }",
- "#endif",
- " yychar = (-1);",
- " goto yyloop;",
- " }",
- "yyreduce:",
- "#if YYDEBUG",
- " if (yydebug)",
- " printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",",
- " YYPREFIX, yystate, yyn, yyrule[yyn]);",
- "#endif",
- " yym = yylen[yyn];",
- " if (yym)",
- " yyval = yyvsp[1-yym];",
- " else",
- " memset(&yyval, 0, sizeof yyval);",
- " switch (yyn)",
- " {",
- 0
-};
-
-
-const char *trailer[] =
-{
- " }",
- " yyssp -= yym;",
- " yystate = *yyssp;",
- " yyvsp -= yym;",
- " yym = yylhs[yyn];",
- " if (yystate == 0 && yym == 0)",
- " {",
- "#if YYDEBUG",
- " if (yydebug)",
- " printf(\"%sdebug: after reduction, shifting from state 0 to\\",
- " state %d\\n\", YYPREFIX, YYFINAL);",
- "#endif",
- " yystate = YYFINAL;",
- " *++yyssp = YYFINAL;",
- " *++yyvsp = yyval;",
- " if (yychar < 0)",
- " {",
- " if ((yychar = yylex()) < 0) yychar = 0;",
- "#if YYDEBUG",
- " if (yydebug)",
- " {",
- " yys = 0;",
- " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
- " if (!yys) yys = \"illegal-symbol\";",
- " printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
- " YYPREFIX, YYFINAL, yychar, yys);",
- " }",
- "#endif",
- " }",
- " if (yychar == 0) goto yyaccept;",
- " goto yyloop;",
- " }",
- " if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&",
- " yyn <= YYTABLESIZE && yycheck[yyn] == yystate)",
- " yystate = yytable[yyn];",
- " else",
- " yystate = yydgoto[yym];",
- "#if YYDEBUG",
- " if (yydebug)",
- " printf(\"%sdebug: after reduction, shifting from state %d \\",
- "to state %d\\n\", YYPREFIX, *yyssp, yystate);",
- "#endif",
- " if (yyssp >= yysslim && yygrowstack())",
- " {",
- " goto yyoverflow;",
- " }",
- " *++yyssp = yystate;",
- " *++yyvsp = yyval;",
- " goto yyloop;",
- "yyoverflow:",
- " yyerror(\"yacc stack overflow\");",
- "yyabort:",
- " return (1);",
- "yyaccept:",
- " return (0);",
- "}",
- 0
-};
-
-
-void
-write_section(const char *section[])
-{
- int c;
- int i;
- const char *s;
- FILE *f;
-
- f = code_file;
- for (i = 0; (s = section[i]); ++i)
- {
- ++outline;
- while ((c = *s))
- {
- putc(c, f);
- ++s;
- }
- putc('\n', f);
- }
-}
diff --git a/usr.bin/yacc/symtab.c b/usr.bin/yacc/symtab.c
deleted file mode 100644
index ffb81273ce27..000000000000
--- a/usr.bin/yacc/symtab.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)symtab.c 5.3 (Berkeley) 6/1/90";
-#endif
-#endif
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stdlib.h>
-#include <string.h>
-#include "defs.h"
-
-/* TABLE_SIZE is the number of entries in the symbol table. */
-/* TABLE_SIZE must be a power of two. */
-
-#define TABLE_SIZE 1024
-
-static int hash(const char *);
-
-bucket **symbol_table;
-bucket *first_symbol;
-bucket *last_symbol;
-
-
-static int
-hash(const char *name)
-{
- const char *s;
- int c, k;
-
- assert(name && *name);
- s = name;
- k = *s;
- while ((c = *++s))
- k = (31*k + c) & (TABLE_SIZE - 1);
-
- return (k);
-}
-
-
-bucket *
-make_bucket(const char *name)
-{
- bucket *bp;
-
- assert(name);
- bp = malloc(sizeof(bucket));
- if (bp == 0) no_space();
- bp->link = 0;
- bp->next = 0;
- bp->name = malloc(strlen(name) + 1);
- if (bp->name == 0) no_space();
- bp->tag = 0;
- bp->value = UNDEFINED;
- bp->index = 0;
- bp->prec = 0;
- bp-> class = UNKNOWN;
- bp->assoc = TOKEN;
-
- if (bp->name == 0) no_space();
- strcpy(bp->name, name);
-
- return (bp);
-}
-
-
-bucket *
-lookup(char *name)
-{
- bucket *bp, **bpp;
-
- bpp = symbol_table + hash(name);
- bp = *bpp;
-
- while (bp)
- {
- if (strcmp(name, bp->name) == 0) return (bp);
- bpp = &bp->link;
- bp = *bpp;
- }
-
- *bpp = bp = make_bucket(name);
- last_symbol->next = bp;
- last_symbol = bp;
-
- return (bp);
-}
-
-
-void
-create_symbol_table(void)
-{
- int i;
- bucket *bp;
-
- symbol_table = malloc(TABLE_SIZE*sizeof(bucket *));
- if (symbol_table == 0) no_space();
- for (i = 0; i < TABLE_SIZE; i++)
- symbol_table[i] = 0;
-
- bp = make_bucket("error");
- bp->index = 1;
- bp->class = TERM;
-
- first_symbol = bp;
- last_symbol = bp;
- symbol_table[hash("error")] = bp;
-}
-
-
-void
-free_symbol_table(void)
-{
- free(symbol_table);
- symbol_table = 0;
-}
-
-
-void
-free_symbols(void)
-{
- bucket *p, *q;
-
- for (p = first_symbol; p; p = q)
- {
- q = p->next;
- free(p);
- }
-}
diff --git a/usr.bin/yacc/test/error.tab.c b/usr.bin/yacc/test/error.tab.c
deleted file mode 100644
index 2e309b8447f8..000000000000
--- a/usr.bin/yacc/test/error.tab.c
+++ /dev/null
@@ -1,317 +0,0 @@
-#ifndef lint
-static char const yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
-#endif
-#include <stdlib.h>
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-#define YYLEX yylex()
-#define YYEMPTY -1
-#define yyclearin (yychar=(YYEMPTY))
-#define yyerrok (yyerrflag=0)
-#define YYRECOVERING (yyerrflag!=0)
-#if defined(c_plusplus) || defined(__cplusplus)
-#include <stdlib.h>
-#else
-extern char *getenv();
-extern void *realloc();
-#endif
-static int yygrowstack();
-#define YYPREFIX "yy"
-#define YYERRCODE 256
-const short yylhs[] = { -1,
- 0,
-};
-const short yylen[] = { 2,
- 1,
-};
-const short yydefred[] = { 0,
- 1, 0,
-};
-const short yydgoto[] = { 2,
-};
-const short yysindex[] = { -256,
- 0, 0,
-};
-const short yyrindex[] = { 0,
- 0, 0,
-};
-const short yygindex[] = { 0,
-};
-#define YYTABLESIZE 0
-const short yytable[] = { 1,
-};
-const short yycheck[] = { 256,
-};
-#define YYFINAL 2
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#elif YYDEBUG
-#include <stdio.h>
-#endif
-#define YYMAXTOKEN 0
-#if YYDEBUG
-const char * const yyname[] = {
-"end-of-file",
-};
-const char * const yyrule[] = {
-"$accept : S",
-"S : error",
-};
-#endif
-#ifndef YYSTYPE
-typedef int YYSTYPE;
-#endif
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
-#else
-#define YYSTACKSIZE 10000
-#define YYMAXDEPTH 10000
-#endif
-#endif
-#define YYINITSTACKSIZE 200
-int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
-YYSTYPE yylval;
-short *yyss;
-short *yysslim;
-YYSTYPE *yyvs;
-int yystacksize;
-#line 4 "error.y"
-main(){printf("yyparse() = %d\n",yyparse());}
-yylex(){return-1;}
-yyerror(s)char*s;{printf("%s\n",s);}
-#line 92 "error.tab.c"
-/* allocate initial stack or double stack size, up to YYMAXDEPTH */
-static int yygrowstack()
-{
- int newsize, i;
- short *newss;
- YYSTYPE *newvs;
-
- if ((newsize = yystacksize) == 0)
- newsize = YYINITSTACKSIZE;
- else if (newsize >= YYMAXDEPTH)
- return -1;
- else if ((newsize *= 2) > YYMAXDEPTH)
- newsize = YYMAXDEPTH;
- i = yyssp - yyss;
- if ((newss = (short *)realloc(yyss, newsize * sizeof *newss)) == NULL)
- return -1;
- yyss = newss;
- yyssp = newss + i;
- if ((newvs = (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs)) == NULL)
- return -1;
- yyvs = newvs;
- yyvsp = newvs + i;
- yystacksize = newsize;
- yysslim = yyss + newsize - 1;
- return 0;
-}
-
-#define YYABORT goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-
-int
-yyparse()
-{
- register int yym, yyn, yystate;
-#if YYDEBUG
- register const char *yys;
-
- if ((yys = getenv("YYDEBUG")))
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
-#endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- if (yyss == NULL && yygrowstack()) goto yyoverflow;
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
-
-yyloop:
- if ((yyn = yydefred[yystate])) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, shifting to state %d\n",
- YYPREFIX, yystate, yytable[yyn]);
-#endif
- if (yyssp >= yysslim && yygrowstack())
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
-#if defined(lint) || defined(__GNUC__)
- goto yynewerror;
-#endif
-yynewerror:
- yyerror("syntax error");
-#if defined(lint) || defined(__GNUC__)
- goto yyerrlab;
-#endif
-yyerrlab:
- ++yynerrs;
-yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
-#endif
- if (yyssp >= yysslim && yygrowstack())
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: error recovery discarding state %d\n",
- YYPREFIX, *yyssp);
-#endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- yychar = (-1);
- goto yyloop;
- }
-yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, reducing by rule %d (%s)\n",
- YYPREFIX, yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, YYFINAL, yychar, yys);
- }
-#endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state %d \
-to state %d\n", YYPREFIX, *yyssp, yystate);
-#endif
- if (yyssp >= yysslim && yygrowstack())
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
-yyoverflow:
- yyerror("yacc stack overflow");
-yyabort:
- return (1);
-yyaccept:
- return (0);
-}
diff --git a/usr.bin/yacc/test/error.y b/usr.bin/yacc/test/error.y
deleted file mode 100644
index 41148ea92dba..000000000000
--- a/usr.bin/yacc/test/error.y
+++ /dev/null
@@ -1,6 +0,0 @@
-%%
-S: error
-%%
-main(){printf("yyparse() = %d\n",yyparse());}
-yylex(){return-1;}
-yyerror(s)char*s;{printf("%s\n",s);}
diff --git a/usr.bin/yacc/warshall.c b/usr.bin/yacc/warshall.c
deleted file mode 100644
index bdcc6e460139..000000000000
--- a/usr.bin/yacc/warshall.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Paul Corbett.
- *
- * 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.
- */
-
-#if 0
-#ifndef lint
-static char sccsid[] = "@(#)warshall.c 5.4 (Berkeley) 5/24/93";
-#endif
-#endif
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include "defs.h"
-
-static void transitive_closure(unsigned *, int);
-
-static void
-transitive_closure(unsigned *R, int n)
-{
- int rowsize;
- unsigned i;
- unsigned *rowj;
- unsigned *rp;
- unsigned *rend;
- unsigned *ccol;
- unsigned *relend;
- unsigned *cword;
- unsigned *rowi;
-
- rowsize = WORDSIZE(n);
- relend = R + n*rowsize;
-
- cword = R;
- i = 0;
- rowi = R;
- while (rowi < relend)
- {
- ccol = cword;
- rowj = R;
-
- while (rowj < relend)
- {
- if (*ccol & (1 << i))
- {
- rp = rowi;
- rend = rowj + rowsize;
- while (rowj < rend)
- *rowj++ |= *rp++;
- }
- else
- {
- rowj += rowsize;
- }
-
- ccol += rowsize;
- }
-
- if (++i >= BITS_PER_WORD)
- {
- i = 0;
- cword++;
- }
-
- rowi += rowsize;
- }
-}
-
-void
-reflexive_transitive_closure(unsigned *R, int n)
-{
- int rowsize;
- unsigned i;
- unsigned *rp;
- unsigned *relend;
-
- transitive_closure(R, n);
-
- rowsize = WORDSIZE(n);
- relend = R + n*rowsize;
-
- i = 0;
- rp = R;
- while (rp < relend)
- {
- *rp |= (1 << i);
- if (++i >= BITS_PER_WORD)
- {
- i = 0;
- rp++;
- }
-
- rp += rowsize;
- }
-}
diff --git a/usr.bin/yacc/yacc.1 b/usr.bin/yacc/yacc.1
deleted file mode 100644
index 6e5bacba8ffe..000000000000
--- a/usr.bin/yacc/yacc.1
+++ /dev/null
@@ -1,169 +0,0 @@
-.\" Copyright (c) 1989, 1990 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Robert Paul Corbett.
-.\"
-.\" 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.
-.\"
-.\" @(#)yacc.1 5.8 (Berkeley) 5/24/93
-.\" $FreeBSD$
-.\" $OpenBSD: yacc.1,v 1.14 2001/05/01 17:58:05 aaron Exp $
-.\"
-.Dd May 24, 1993
-.Dt YACC 1
-.Os
-.Sh NAME
-.Nm yacc
-.Nd an LALR(1) parser generator
-.Sh SYNOPSIS
-.Nm
-.Op Fl dlrtvy
-.Op Fl b Ar file_prefix
-.Op Fl o Ar output_filename
-.Op Fl p Ar symbol_prefix
-.Ar filename
-.Sh DESCRIPTION
-The
-.Nm
-utility reads the grammar specification in the file
-.Ar filename
-and generates an LR(1) parser for it.
-The parsers consist of a set of LALR(1) parsing tables and a driver routine
-written in the C programming language.
-The
-.Nm
-utility normally writes the parse tables and the driver routine to the file
-.Pa y.tab.c .
-.Pp
-The following options are available:
-.Bl -tag -width indent
-.It Fl b Ar file_prefix
-Change the prefix prepended to the output file names to
-the string denoted by
-.Ar file_prefix .
-The default prefix is the character
-.Pa y .
-.It Fl d
-Cause the header file
-.Pa y.tab.h
-to be written.
-.It Fl l
-If the
-.Fl l
-option is not specified,
-.Nm
-will insert #line directives in the generated code.
-The #line directives let the C compiler relate errors in the
-generated code to the user's original code.
-If the
-.Fl l
-option is specified,
-.Nm
-will not insert the #line directives.
-Any #line directives specified by the user will be retained.
-.It Fl o Ar output_filename
-Cause
-.Nm
-to write the generated code to
-.Ar output_filename
-instead of the default file,
-.Pa y.tab.c .
-.It Fl p Ar symbol_prefix
-Change the prefix prepended to yacc-generated symbols to
-the string denoted by
-.Ar symbol_prefix .
-The default prefix is the string
-.Pa yy .
-.It Fl r
-Cause
-.Nm
-to produce separate files for code and tables.
-The code file
-is named
-.Pa y.code.c ,
-and the tables file is named
-.Pa y.tab.c .
-.It Fl t
-Change the preprocessor directives generated by
-.Nm
-so that debugging statements will be incorporated in the compiled code.
-.It Fl v
-Cause a human-readable description of the generated parser to
-be written to the file
-.Pa y.output .
-.It Fl y
-NOOP for bison compatibility.
-.Nm
-is already designed to be POSIX yacc compatible.
-.El
-.Sh ENVIRONMENT
-.Bl -tag -width ".Ev TMPDIR"
-.It Ev TMPDIR
-Name of directory where temporary files are to be created.
-.El
-.Sh TABLES
-The names of the tables generated by this version of
-.Nm
-are
-.Va yylhs , yylen , yydefred , yydgoto , yysindex ,
-.Va yyrindex , yygindex , yytable ,
-and
-.Va yycheck .
-Two additional tables,
-.Va yyname
-and
-.Va yyrule ,
-are created if
-.Dv YYDEBUG
-is defined and non-zero.
-.Sh FILES
-.Bl -tag -width "Pa /tmp/yacc.aXXXXXXXXXX" -compact
-.It Pa y.code.c
-.It Pa y.tab.c
-.It Pa y.tab.h
-.It Pa y.output
-.It Pa /tmp/yacc.aXXXXXXXXXX
-.It Pa /tmp/yacc.tXXXXXXXXXX
-.It Pa /tmp/yacc.uXXXXXXXXXX
-.El
-.Sh DIAGNOSTICS
-If there are rules that are never reduced,
-the number of such rules is reported on standard error.
-If there are any
-.Tn LALR(1)
-conflicts,
-the number of conflicts is reported on standard error.
-.Sh SEE ALSO
-.Xr yyfix 1
-.Sh STANDARDS
-The
-.Nm
-utility conforms to
-.St -p1003.2 .
-.Sh HISTORY
-A
-.Nm
-command appeared in PWB UNIX.
diff --git a/usr.bin/yacc/yyfix.1 b/usr.bin/yacc/yyfix.1
deleted file mode 100644
index 13c5d9225c74..000000000000
--- a/usr.bin/yacc/yyfix.1
+++ /dev/null
@@ -1,110 +0,0 @@
-.\" Copyright (c) 1990, 1991 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
-.\" 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.
-.\"
-.\" @(#)yyfix.1 5.4 (Berkeley) 3/23/93
-.\" $FreeBSD$
-.\"
-.Dd March 23, 1993
-.Dt YYFIX 1
-.Os
-.Sh NAME
-.Nm yyfix
-.Nd extract tables from y.tab.c
-.Sh SYNOPSIS
-.Nm
-.Ar file
-.Op Ar tables
-.Sh DESCRIPTION
-Programs have historically used a script (often named
-.Dq :yyfix )
-to extract tables from the
-.Xr yacc 1
-generated file
-.Pa y.tab.c .
-As the names of the tables generated by the current version of
-.Xr yacc 1
-are different from those of historical versions of
-.Xr yacc 1 ,
-the shell script
-.Nm
-is provided to simplify the transition.
-.Pp
-The first (and required) argument to
-.Nm
-is the name of the file where the extracted tables should be stored.
-.Pp
-If further command line arguments are specified, they are taken as
-the list of tables to be extracted.
-Otherwise,
-.Nm
-attempts to determine if the
-.Pa y.tab.c
-file is from an old or new
-.Xr yacc 1 ,
-and extracts the appropriate tables.
-.Pp
-The tables
-.Dq yyexca ,
-.Dq yyact ,
-.Dq yypact ,
-.Dq yypgo ,
-.Dq yyr1 ,
-.Dq yyr2 ,
-.Dq yychk ,
-and
-.Dq yydef
-are extracted
-from historical versions of
-.Xr yacc 1 .
-.Pp
-The tables
-.Dq yylhs ,
-.Dq yylen ,
-.Dq yydefred ,
-.Dq yydgoto ,
-.Dq yysindex ,
-.Dq yyrindex ,
-.Dq yygindex ,
-.Dq yytable ,
-.Dq yyname ,
-.Dq yyrule ,
-and
-.Dq yycheck ,
-are extracted from the current version of
-.Xr yacc 1 .
-.Sh FILES
-.Bl -tag -width y.tab.c
-.It Pa y.tab.c
-File from which tables are extracted.
-.El
-.Sh SEE ALSO
-.Xr yacc 1
-.Sh HISTORY
-The
-.Nm
-command first appeared in
-.Bx 4.4 .
diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile
index 68b82e7a060d..ded1725cb52d 100644
--- a/usr.sbin/Makefile
+++ b/usr.sbin/Makefile
@@ -223,6 +223,11 @@ SUBDIR+= lpr
SUBDIR+= manctl
.endif
+.if ${MK_NAND} != "no"
+SUBDIR+= nandsim
+SUBDIR+= nandtool
+.endif
+
.if ${MK_NETGRAPH} != "no"
SUBDIR+= flowctl
SUBDIR+= lmcconfig
diff --git a/usr.sbin/acpi/acpidump/acpi.c b/usr.sbin/acpi/acpidump/acpi.c
index c273e26c627a..f8ac2a378101 100644
--- a/usr.sbin/acpi/acpidump/acpi.c
+++ b/usr.sbin/acpi/acpidump/acpi.c
@@ -1196,13 +1196,13 @@ aml_disassemble(ACPI_TABLE_HEADER *rsdt, ACPI_TABLE_HEADER *dsdp)
if (tmpdir == NULL)
tmpdir = _PATH_TMP;
strncpy(tmpstr, tmpdir, sizeof(tmpstr));
- strncat(tmpstr, "/acpidump.", sizeof(tmpstr) - strlen(tmpdir));
if (realpath(tmpstr, buf) == NULL) {
- perror("realpath tmp file");
+ perror("realpath tmp dir");
return;
}
strncpy(tmpstr, buf, sizeof(tmpstr));
- len = strlen(buf);
+ strncat(tmpstr, "/acpidump.", sizeof(tmpstr) - strlen(buf));
+ len = strlen(tmpstr);
tmpext = tmpstr + len;
strncpy(tmpext, "XXXXXX", sizeof(tmpstr) - len);
fd = mkstemp(tmpstr);
diff --git a/usr.sbin/bluetooth/bthidd/parser.y b/usr.sbin/bluetooth/bthidd/parser.y
index ca49059a035b..50468f4e03a8 100644
--- a/usr.sbin/bluetooth/bthidd/parser.y
+++ b/usr.sbin/bluetooth/bthidd/parser.y
@@ -39,6 +39,7 @@
#include <errno.h>
#include <limits.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <usbhid.h>
@@ -61,7 +62,6 @@
#include "bthid_config.h"
- int yyparse (void);
int yylex (void);
void yyerror (char const *);
static int32_t check_hid_device(hid_device_p hid_device);
diff --git a/usr.sbin/bluetooth/hcsecd/parser.y b/usr.sbin/bluetooth/hcsecd/parser.y
index 385bff257b3a..ec91c484cae2 100644
--- a/usr.sbin/bluetooth/hcsecd/parser.y
+++ b/usr.sbin/bluetooth/hcsecd/parser.y
@@ -36,6 +36,7 @@
#include <errno.h>
#include <limits.h>
#include <stdio.h>
+#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <syslog.h>
diff --git a/usr.sbin/config/config.h b/usr.sbin/config/config.h
index 6d66167ece10..f275749c8256 100644
--- a/usr.sbin/config/config.h
+++ b/usr.sbin/config/config.h
@@ -171,7 +171,6 @@ char *path(const char *);
char *raisestr(char *);
void remember(const char *);
void moveifchanged(const char *, const char *);
-int yyparse(void);
int yylex(void);
void options(void);
void makefile(void);
diff --git a/usr.sbin/config/main.c b/usr.sbin/config/main.c
index 28d4f8abe466..14061c2081c6 100644
--- a/usr.sbin/config/main.c
+++ b/usr.sbin/config/main.c
@@ -91,6 +91,7 @@ static void usage(void);
static void cleanheaders(char *);
static void kernconfdump(const char *);
static void checkversion(void);
+extern int yyparse(void);
struct hdr_list {
char *h_name;
diff --git a/usr.sbin/cpucontrol/cpucontrol.8 b/usr.sbin/cpucontrol/cpucontrol.8
index 62221c357b53..0998b2056593 100644
--- a/usr.sbin/cpucontrol/cpucontrol.8
+++ b/usr.sbin/cpucontrol/cpucontrol.8
@@ -31,7 +31,7 @@
.Nm cpucontrol
.Nd control utility for the
.Xr cpuctl 4
-device.
+device
.Sh SYNOPSIS
.Nm
.Op Fl vh
diff --git a/usr.sbin/cpucontrol/cpucontrol.c b/usr.sbin/cpucontrol/cpucontrol.c
index 7477007b8f27..8738612fe77d 100644
--- a/usr.sbin/cpucontrol/cpucontrol.c
+++ b/usr.sbin/cpucontrol/cpucontrol.c
@@ -292,7 +292,7 @@ do_update(const char *dev)
int error;
struct ucode_handler *handler;
struct datadir *dir;
- DIR *dirfd;
+ DIR *dirp;
struct dirent *direntry;
char buf[MAXPATHLEN];
@@ -321,12 +321,12 @@ do_update(const char *dev)
* Process every image in specified data directories.
*/
SLIST_FOREACH(dir, &datadirs, next) {
- dirfd = opendir(dir->path);
- if (dirfd == NULL) {
+ dirp = opendir(dir->path);
+ if (dirp == NULL) {
WARNX(1, "skipping directory %s: not accessible", dir->path);
continue;
}
- while ((direntry = readdir(dirfd)) != NULL) {
+ while ((direntry = readdir(dirp)) != NULL) {
if (direntry->d_namlen == 0)
continue;
error = snprintf(buf, sizeof(buf), "%s/%s", dir->path,
@@ -340,7 +340,7 @@ do_update(const char *dev)
}
handler->update(dev, buf);
}
- error = closedir(dirfd);
+ error = closedir(dirp);
if (error != 0)
WARN(0, "closedir(%s)", dir->path);
}
diff --git a/usr.sbin/ctladm/ctladm.8 b/usr.sbin/ctladm/ctladm.8
index ddbe976039d0..8052dfa24870 100644
--- a/usr.sbin/ctladm/ctladm.8
+++ b/usr.sbin/ctladm/ctladm.8
@@ -542,7 +542,7 @@ List all LUNs registered with CTL.
Because this command uses the ioctl port, it will only work when the FETDs
(Front End Target Drivers) are enabled.
This command is the equivalent of doing a REPORT LUNS on one LUN and then
-and then an INQUIRY on each LUN in the system.
+an INQUIRY on each LUN in the system.
.It Ic delay
Delay commands at the given location. There are two places where commands
may be delayed currently: before data is transferred
@@ -749,7 +749,7 @@ single port.
As a general rule, the WWNN should be the same across all ports on the
system.
.It Fl W Ar wwpn
-Set the World Wide Node Name for the given port.
+Set the World Wide Port Name for the given port.
The
.Fl n
argument must be specified, since this is only possible to implement on a
@@ -939,10 +939,10 @@ Create a LUN using the block backend, specify the file
.Pa src/usr.sbin/ctladm/ctladm.8
as the backing store, and specify the
.Tn SCSI
-VPD page 0x80 and 0x83 serial number (
-.Fl S)
-and device ID (
-.Fl d).
+VPD page 0x80 and 0x83 serial number
+.Fl ( S )
+and device ID
+.Fl ( d ) .
.Pp
.Dl ctladm remove -b block -l 12
.Pp
diff --git a/usr.sbin/fifolog/lib/getdate.y b/usr.sbin/fifolog/lib/getdate.y
index 8e63e8112993..53a515c4d17e 100644
--- a/usr.sbin/fifolog/lib/getdate.y
+++ b/usr.sbin/fifolog/lib/getdate.y
@@ -24,11 +24,9 @@
#include "libfifolog.h"
-#define yyparse getdate_yyparse
#define yylex getdate_yylex
#define yyerror getdate_yyerror
-static int yyparse(void);
static int yylex(void);
static int yyerror(const char *);
diff --git a/usr.sbin/flowctl/flowctl.8 b/usr.sbin/flowctl/flowctl.8
index 5abeddbd84f9..cbb97d447138 100644
--- a/usr.sbin/flowctl/flowctl.8
+++ b/usr.sbin/flowctl/flowctl.8
@@ -60,7 +60,7 @@ This command is the analog of the
.Dq "show ip cache flow"
command of a Cisco router.
It dumps the contents of the flow cache in Cisco-like format.
-Specifing either
+Specifying either
.Cm ipv4
or
.Cm ipv6
diff --git a/usr.sbin/freebsd-update/freebsd-update.8 b/usr.sbin/freebsd-update/freebsd-update.8
index 2d9a4473e1b8..472a5f72abad 100644
--- a/usr.sbin/freebsd-update/freebsd-update.8
+++ b/usr.sbin/freebsd-update/freebsd-update.8
@@ -62,7 +62,7 @@ Release Engineering Team, e.g.,
.Fx
9.0-CURRENT.
.Sh OPTIONS
-The following options are supported
+The following options are supported:
.Bl -tag -width "-f conffile"
.It Fl b Ar basedir
Operate on a system mounted at
diff --git a/usr.sbin/i2c/i2c.8 b/usr.sbin/i2c/i2c.8
index ac71af3de5a9..cd269fa6e1ae 100644
--- a/usr.sbin/i2c/i2c.8
+++ b/usr.sbin/i2c/i2c.8
@@ -88,7 +88,7 @@ reset the controller.
.It Fl s
scan the bus for devices.
.It Fl v
-be verbose
+be verbose.
.It Fl w Ar 0|8|16
device addressing width (in bits).
.El
diff --git a/usr.sbin/jail/command.c b/usr.sbin/jail/command.c
index cbc7b88b4ca6..b7d5168d8b4f 100644
--- a/usr.sbin/jail/command.c
+++ b/usr.sbin/jail/command.c
@@ -246,7 +246,7 @@ next_proc(int nonblock)
/*
* Run a single command for a jail, possible inside the jail.
*/
-int
+static int
run_command(struct cfjail *j)
{
const struct passwd *pwd;
@@ -290,6 +290,8 @@ run_command(struct cfjail *j)
} else {
if (create_jail(j) < 0)
return -1;
+ if (iflag)
+ printf("%d\n", j->jid);
if (verbose >= 0 && (j->name || verbose > 0))
jail_note(j, "created\n");
dep_done(j, DF_LIGHT);
@@ -584,7 +586,8 @@ run_command(struct cfjail *j)
term = getenv("TERM");
environ = &cleanenv;
setenv("PATH", "/bin:/usr/bin", 0);
- setenv("TERM", term, 1);
+ if (term != NULL)
+ setenv("TERM", term, 1);
}
if (setusercontext(lcap, pwd, pwd->pw_uid, username
? LOGIN_SETALL & ~LOGIN_SETGROUP & ~LOGIN_SETLOGIN
diff --git a/usr.sbin/jail/config.c b/usr.sbin/jail/config.c
index 16f509568797..7a7917d2a5cf 100644
--- a/usr.sbin/jail/config.c
+++ b/usr.sbin/jail/config.c
@@ -52,6 +52,8 @@ struct ipspec {
extern FILE *yyin;
extern int yynerrs;
+extern int yyparse(void);
+
struct cfjails cfjails = TAILQ_HEAD_INITIALIZER(cfjails);
static void free_param(struct cfparams *pp, struct cfparam *p);
diff --git a/usr.sbin/jail/jail.8 b/usr.sbin/jail/jail.8
index 4e7ee42bac60..29058061a290 100644
--- a/usr.sbin/jail/jail.8
+++ b/usr.sbin/jail/jail.8
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd April 26, 2012
+.Dd May 23, 2012
.Dt JAIL 8
.Os
.Sh NAME
@@ -255,7 +255,7 @@ They can also be given the values
.Dq true
and
.Dq false .
-Other partameters may have more than one value, specified as a
+Other parameters may have more than one value, specified as a
comma-separated list or with
.Dq +=
in the configuration file (see
@@ -269,7 +269,7 @@ parameters that are passed to the kernel when the jail is created,
can be seen with
.Xr jls 8 ,
and can (usually) be changed with
-.Dq Nm Fl m.
+.Dq Nm Fl m .
Then there are pseudo-parameters that are only used by
.Nm
itself.
@@ -580,7 +580,7 @@ command parameters are
command lines that are run in either the system or prison environment.
They may be given multiple values, which run would the specified
commands in sequence.
-All commands must succed (return a zero exit status), or the jail will
+All commands must succeed (return a zero exit status), or the jail will
not be created or removed.
.Pp
The pseudo-parameters are:
@@ -657,7 +657,8 @@ The maximum amount of time to wait for a prison's processes to exit
after sending them a
.Dv SIGTERM
signal (which happens after the
-.Va exec.stop commands have completed).
+.Va exec.stop
+commands have completed).
After this many seconds have passed, the prison will be removed, which
will kill any remaining processes.
If this is set to zero, no
@@ -1183,7 +1184,7 @@ utility appeared in
Hierarchical/extensible jails were introduced in
.Fx 8.0 .
The configuration file was introduced in
-.Fx 10.0 .
+.Fx 9.1 .
.Sh AUTHORS
.An -nosplit
The jail feature was written by
diff --git a/usr.sbin/jail/jail.c b/usr.sbin/jail/jail.c
index e827e11ac2b0..4fc03c91f4d9 100644
--- a/usr.sbin/jail/jail.c
+++ b/usr.sbin/jail/jail.c
@@ -55,6 +55,7 @@ struct permspec {
};
const char *cfname;
+int iflag;
int note_remove;
int verbose;
@@ -129,7 +130,7 @@ main(int argc, char **argv)
size_t sysvallen;
unsigned op, pi;
int ch, docf, error, i, oldcl, sysval;
- int dflag, iflag, Rflag;
+ int dflag, Rflag;
char enforce_statfs[4];
#if defined(INET) || defined(INET6)
char *cs, *ncs;
@@ -139,7 +140,7 @@ main(int argc, char **argv)
#endif
op = 0;
- dflag = iflag = Rflag = 0;
+ dflag = Rflag = 0;
docf = 1;
cfname = CONF_FILE;
JidFile = NULL;
@@ -415,8 +416,6 @@ main(int argc, char **argv)
continue;
jail_create_done:
clear_persist(j);
- if (iflag)
- printf("%d\n", j->jid);
if (jfp != NULL)
print_jail(jfp, j, oldcl);
dep_done(j, 0);
diff --git a/usr.sbin/jail/jail.conf.5 b/usr.sbin/jail/jail.conf.5
index fc5ecf1962be..7c80d229d06b 100644
--- a/usr.sbin/jail/jail.conf.5
+++ b/usr.sbin/jail/jail.conf.5
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd April 26, 2012
+.Dd May 23, 2012
.Dt JAIL.CONF 5
.Os
.Sh NAME
@@ -217,7 +217,7 @@ utility appeared in
The
.Nm
file was added in
-.Fx 10.0 .
+.Fx 9.1 .
.Sh AUTHORS
.An -nosplit
The jail feature was written by
diff --git a/usr.sbin/jail/jailp.h b/usr.sbin/jail/jailp.h
index 4bf7929252ef..ffd35cc81896 100644
--- a/usr.sbin/jail/jailp.h
+++ b/usr.sbin/jail/jailp.h
@@ -222,12 +222,12 @@ extern void requeue(struct cfjail *j, struct cfjails *queue);
extern void yyerror(const char *);
extern int yylex(void);
-extern int yyparse(void);
extern struct cfjails cfjails;
extern struct cfjails ready;
extern struct cfjails depend;
extern const char *cfname;
+extern int iflag;
extern int note_remove;
extern int paralimit;
extern int verbose;
diff --git a/usr.sbin/lpr/common_source/common.c b/usr.sbin/lpr/common_source/common.c
index d28ac1fcdd95..819d7dd1ca87 100644
--- a/usr.sbin/lpr/common_source/common.c
+++ b/usr.sbin/lpr/common_source/common.c
@@ -130,7 +130,7 @@ getq(const struct printer *pp, struct jobqueue *(*namelist[]))
seteuid(uid);
return (-1);
}
- if (fstat(dirp->dd_fd, &stbuf) < 0)
+ if (fstat(dirfd(dirp), &stbuf) < 0)
goto errdone;
seteuid(uid);
diff --git a/usr.sbin/lpr/lpr/lpr.c b/usr.sbin/lpr/lpr/lpr.c
index c2f88a07af6a..9ae72f6110cc 100644
--- a/usr.sbin/lpr/lpr/lpr.c
+++ b/usr.sbin/lpr/lpr/lpr.c
@@ -846,7 +846,7 @@ mktemps(const struct printer *pp)
(void) snprintf(buf, sizeof(buf), "%s/.seq", pp->spool_dir);
seteuid(euid);
- if ((fd = open(buf, O_RDWR|O_CREAT, 0661)) < 0) {
+ if ((fd = open(buf, O_RDWR|O_CREAT, 0664)) < 0) {
printf("%s: cannot create %s\n", progname, buf);
exit(1);
}
diff --git a/usr.sbin/mfiutil/mfi_show.c b/usr.sbin/mfiutil/mfi_show.c
index 4f83b52e3100..8311f4bab66f 100644
--- a/usr.sbin/mfiutil/mfi_show.c
+++ b/usr.sbin/mfiutil/mfi_show.c
@@ -224,7 +224,29 @@ show_battery(int ac, char **av)
}
if (stat.fw_status & MFI_BBU_STATE_DISCHARGE_ACTIVE) {
printf("%s DISCHARGING", comma ? "," : "");
+ comma = 1;
+ }
+ if (stat.fw_status & MFI_BBU_STATE_LEARN_CYC_REQ) {
+ printf("%s LEARN_CYCLE_REQUESTED", comma ? "," : "");
+ comma = 1;
+ }
+ if (stat.fw_status & MFI_BBU_STATE_LEARN_CYC_ACTIVE) {
+ printf("%s LEARN_CYCLE_ACTIVE", comma ? "," : "");
+ comma = 1;
+ }
+ if (stat.fw_status & MFI_BBU_STATE_LEARN_CYC_FAIL) {
+ printf("%s LEARN_CYCLE_FAIL", comma ? "," : "");
+ comma = 1;
+ }
+ if (stat.fw_status & MFI_BBU_STATE_LEARN_CYC_TIMEOUT) {
+ printf("%s LEARN_CYCLE_TIMEOUT", comma ? "," : "");
+ comma = 1;
}
+ if (stat.fw_status & MFI_BBU_STATE_I2C_ERR_DETECT) {
+ printf("%s I2C_ERROR_DETECT", comma ? "," : "");
+ comma = 1;
+ }
+
if (!comma)
printf(" normal");
printf("\n");
diff --git a/usr.sbin/mptutil/mpt_show.c b/usr.sbin/mptutil/mpt_show.c
index a5e1a899ffbf..153d73e0097f 100644
--- a/usr.sbin/mptutil/mpt_show.c
+++ b/usr.sbin/mptutil/mpt_show.c
@@ -538,7 +538,7 @@ show_physdisks(int ac, char **av)
{
CONFIG_PAGE_RAID_PHYS_DISK_0 *pinfo;
U16 IOCStatus;
- int fd, i;
+ int error, fd, i;
if (ac != 1) {
warnx("show drives: extra arguments");
diff --git a/usr.sbin/nandsim/Makefile b/usr.sbin/nandsim/Makefile
new file mode 100644
index 000000000000..9269ab5de34f
--- /dev/null
+++ b/usr.sbin/nandsim/Makefile
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+PROG= nandsim
+SRCS= nandsim.c nandsim_rcfile.c nandsim_cfgparse.c
+BINDIR= /usr/sbin
+MAN= nandsim.8
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/nandsim/nandsim.8 b/usr.sbin/nandsim/nandsim.8
new file mode 100644
index 000000000000..5b318a233dae
--- /dev/null
+++ b/usr.sbin/nandsim/nandsim.8
@@ -0,0 +1,229 @@
+.\" Copyright (c) 2010 Semihalf
+.\" 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 August 10, 2010
+.Dt NANDSIM 8
+.Os
+.Sh NAME
+.Nm nandsim
+.Nd NAND simulator control program
+.Sh SYNOPSIS
+.Nm
+.Ic status
+.Aq ctrl_no | Fl -all | Fl a
+.Op Fl v
+.Nm
+.Ic conf
+.Aq filename
+.Nm
+.Ic start
+.Aq ctrl_no
+.Nm
+.Ic mod
+.Aq ctrl_no:cs_no | Fl l Aq loglevel
+.Op Fl p Aq prog_time
+.Op Fl e Aq erase_time
+.Op Fl r Aq read_time
+.Op Fl E Aq error_ratio
+.Op Fl h
+.Nm
+.Ic stop
+.Aq ctrl_no
+.Nm
+.Ic error
+.Aq ctrl_no:cs_no
+.Aq page_num
+.Aq column
+.Aq length
+.Aq pattern
+.Nm
+.Ic bb
+.Aq ctrl_no:cs_no
+.Op blk_num,blk_num2,...
+.Op Fl U
+.Op Fl L
+.Nm
+.Ic freeze
+.Op ctrl_no
+.Nm
+.Ic log
+.Aq ctrl_no | Fl -all | Fl a
+.Nm
+.Ic stats
+.Aq ctrl_no:cs_no
+.Aq page_num
+.Nm
+.Ic dump
+.Aq ctrl_no:cs_no
+.Aq filename
+.Nm
+.Ic restore
+.Aq ctrl_no:chip_no
+.Aq filename
+.Nm
+.Ic destroy
+.Aq ctrl_no[:cs_no] | Fl -all | Fl a
+.Nm
+.Ic help
+.Op Fl v
+.Sh COMMAND DESCRIPTION
+Controllers and chips are arranged into a simple hierarchy.
+There can be up to 4 controllers configured, each with 4 chip select (CS) lines.
+A given chip is connected to one of the chip selects.
+.Pp
+Controllers are specified as
+.Aq ctrl_no ;
+chip selects are specified as
+.Aq cs_no .
+.Bl -tag -width periphlist
+.It Ic status
+Gets controller(s) status. If
+.Fl a
+or
+.Fl -all
+flag is specified - command will print status of every controller
+currently available.
+Optional flag
+.Fl v
+causes printing complete information about the controller, and all
+chips attached to it.
+.It Ic conf
+Reads simulator configuration from a specified file (this includes
+the simulation "layout" i.e. controllers-chips assignments).
+Configuration changes for an already started simulation require a
+full stop-start cycle in order to take effect i.e.:
+.Bl -column
+.It nandsim stop ...
+.It nandsim destroy ...
+.Pp
+.It << edit config file >>
+.Pp
+.It nandsim conf ...
+.It nandsim start ...
+.El
+.It Ic mod
+Alters simulator parameters on-the-fly.
+If controller number and CS pair is not specified, the general
+simulator parameters (not specific to a controller or a chip) will be modified.
+Changing chip's parameters requires specifying both controller number and CS
+to which the given chip is connected.
+Parameters which can be altered:
+.Pp
+General simulator related:
+.Bl -tag -width flag
+.It Fl l Aq log_level
+change logging level to
+.Aq log_level
+.El
+.Pp
+Chip related:
+.Bl -tag -width flag
+.It Fl p Aq prog_time
+change prog time for specified chip to
+.Aq prog_time
+.It Fl e Aq erase_time
+change erase time for specified chip to
+.Aq erase_time
+.It Fl r Aq read_time
+change read time for specified chip to
+.Aq read_time
+.It Fl E Aq error_ratio
+change error ratio for specified chip to
+.Aq error_ratio .
+Error ratio is a number of errors per million read/write bytes.
+.El
+.Pp
+Additionally, flag
+.Fl h
+will list parameters which can be altered.
+.El
+.Bl -tag -width periphlist
+.It Ic bb
+Marks/unmarks a specified block as bad.
+To mark/unmark the bad condition an a block, the following parameters
+have to be supplied: controller number, CS number, and at least one
+block number.
+It is possible to specify multiple blocks, by separating blocks numbers
+with a comma.
+The following options can be used for the 'bb' command:
+.Bl -tag -width flag
+.It Fl U
+unmark the bad previously marked block as bad.
+.It Fl L
+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
+controllers are printed.
+.It Ic stats
+Print statistics of the selected controller, chip and page.
+Statistics includes read count, write count, raw read count, raw
+write count, ECC stats (succeeded corrections, failed correction).
+.It Ic dump
+Dumps a snaphot of a single chip (including data and bad blocks
+information, wearout level) into the file.
+.It Ic restore
+Restores chip state from a dump-file snapshot (produced previously
+with the 'dump' command).
+.It Ic start
+Starts a controller i.e. the simulation.
+.It Ic stop
+Stops an already started controller; if the controller number is not
+supplied, attempts to stop all currently working controllers.
+.It Ic destroy
+Removes existing active chip/controller and its configuration from
+memory and releases the resources.
+Specifying flag
+.Fl a
+or
+.Fl -all
+causes removal of every chip and controller.
+Controller must be stopped in order to be destroyed.
+.It Ic error
+Directly overwrites a certain number of bytes in the specified page
+at a given offset with a supplied pattern (which mimics the
+corruption of flash contents).
+.It Ic help
+Prints synopsis,
+.Fl v
+gives more verbose output.
+.It Ic freeze
+Stops simulation of given controller (simulates power-loss).
+All commands issues to any chip on this controller are ignored.
+.El
+.Sh SEE ALSO
+.Xr nand 4 ,
+.Xr nandsim 4
+.Xr nandsim.conf 5
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Fx 10.0 .
+.Sh AUTHOR
+This utility was written by
+.An Lukasz Wojcik .
diff --git a/usr.sbin/nandsim/nandsim.c b/usr.sbin/nandsim/nandsim.c
new file mode 100644
index 000000000000..082085ff550e
--- /dev/null
+++ b/usr.sbin/nandsim/nandsim.c
@@ -0,0 +1,1397 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 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.
+ */
+
+/*
+ * Control application for the NAND simulator.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/errno.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <dev/nand/nandsim.h>
+#include <dev/nand/nand_dev.h>
+
+#include <ctype.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <sysexits.h>
+
+#include "nandsim_cfgparse.h"
+
+#define SIMDEVICE "/dev/nandsim.ioctl"
+
+#define error(fmt, args...) do { \
+ printf("ERROR: " fmt "\n", ##args); } while (0)
+
+#define warn(fmt, args...) do { \
+ printf("WARNING: " fmt "\n", ##args); } while (0)
+
+#define DEBUG
+#undef DEBUG
+
+#ifdef DEBUG
+#define debug(fmt, args...) do { \
+ printf("NANDSIM_CONF:" fmt "\n", ##args); } while (0)
+#else
+#define debug(fmt, args...) do {} while(0)
+#endif
+
+#define NANDSIM_RAM_LOG_SIZE 16384
+
+#define MSG_NOTRUNNING "Controller#%d is not running.Please start" \
+ " it first."
+#define MSG_RUNNING "Controller#%d is already running!"
+#define MSG_CTRLCHIPNEEDED "You have to specify ctrl_no:cs_no pair!"
+#define MSG_STATUSACQCTRLCHIP "Could not acquire status for ctrl#%d chip#%d"
+#define MSG_STATUSACQCTRL "Could not acquire status for ctrl#%d"
+#define MSG_NOCHIP "There is no such chip configured (chip#%d "\
+ "at ctrl#%d)!"
+
+#define MSG_NOCTRL "Controller#%d is not configured!"
+#define MSG_NOTCONFIGDCTRLCHIP "Chip connected to ctrl#%d at cs#%d " \
+ "is not configured."
+
+typedef int (commandfunc_t)(int , char **);
+
+static struct nandsim_command *getcommand(char *);
+static int parse_devstring(char *, int *, int *);
+static void printchip(struct sim_chip *, uint8_t);
+static void printctrl(struct sim_ctrl *);
+static int opendev(int *);
+static commandfunc_t cmdstatus;
+static commandfunc_t cmdconf;
+static commandfunc_t cmdstart;
+static commandfunc_t cmdstop;
+static commandfunc_t cmdmod;
+static commandfunc_t cmderror;
+static commandfunc_t cmdbb;
+static commandfunc_t cmdfreeze;
+static commandfunc_t cmdlog;
+static commandfunc_t cmdstats;
+static commandfunc_t cmddump;
+static commandfunc_t cmdrestore;
+static commandfunc_t cmddestroy;
+static commandfunc_t cmdhelp;
+static int checkusage(int, int, char **);
+static int is_chip_created(int, int, int *);
+static int is_ctrl_created(int, int *);
+static int is_ctrl_running(int, int *);
+static int assert_chip_connected(int , int);
+static int printstats(int, int, uint32_t, int);
+
+struct nandsim_command {
+ const char *cmd_name; /* Command name */
+ commandfunc_t *commandfunc; /* Ptr to command function */
+ uint8_t req_argc; /* Mandatory arguments count */
+ const char *usagestring; /* Usage string */
+};
+
+static struct nandsim_command commands[] = {
+ {"status", cmdstatus, 1,
+ "status <ctl_no|--all|-a> [-v]\n" },
+ {"conf", cmdconf, 1,
+ "conf <filename>\n" },
+ {"start", cmdstart, 1,
+ "start <ctrl_no>\n" },
+ {"mod", cmdmod, 2,
+ "mod [-l <loglevel>] | <ctl_no:cs_no> [-p <prog_time>]\n"
+ "\t[-e <erase_time>] [-r <read_time>]\n"
+ "\t[-E <error_ratio>] | [-h]\n" },
+ {"stop", cmdstop, 1,
+ "stop <ctrl_no>\n" },
+ {"error", cmderror, 5,
+ "error <ctrl_no:cs_no> <page_num> <column> <length> <pattern>\n" },
+ {"bb", cmdbb, 2,
+ "bb <ctl_no:cs_no> [blk_num1,blk_num2,..] [-U] [-L]\n" },
+ {"freeze", cmdfreeze, 1,
+ "freeze [ctrl_no]\n" },
+ {"log", cmdlog, 1,
+ "log <ctrl_no|--all|-a>\n" },
+ {"stats", cmdstats, 2,
+ "stats <ctrl_no:cs_no> <pagenumber>\n" },
+ {"dump", cmddump, 2,
+ "dump <ctrl_no:cs_no> <filename>\n" },
+ {"restore", cmdrestore, 2,
+ "restore <ctrl_no:chip_no> <filename>\n" },
+ {"destroy", cmddestroy, 1,
+ "destroy <ctrl_no[:cs_no]|--all|-a>\n" },
+ {"help", cmdhelp, 0,
+ "help [-v]" },
+ {NULL, NULL, 0, NULL},
+};
+
+
+/* Parse command name, and start appropriate function */
+static struct nandsim_command*
+getcommand(char *arg)
+{
+ struct nandsim_command *opts;
+
+ for (opts = commands; (opts != NULL) &&
+ (opts->cmd_name != NULL); opts++) {
+ if (strcmp(opts->cmd_name, arg) == 0)
+ return (opts);
+ }
+ return (NULL);
+}
+
+/*
+ * Parse given string in format <ctrl_no>:<cs_no>, if possible -- set
+ * ctrl and/or cs, and return 0 (success) or 1 (in case of error).
+ *
+ * ctrl == 0xff && chip == 0xff : '--all' flag specified
+ * ctrl != 0xff && chip != 0xff : both ctrl & chip were specified
+ * ctrl != 0xff && chip == 0xff : only ctrl was specified
+ */
+static int
+parse_devstring(char *str, int *ctrl, int *cs)
+{
+ char *tmpstr;
+ unsigned int num = 0;
+
+ /* Ignore white spaces at the beginning */
+ while (isspace(*str) && (*str != '\0'))
+ str++;
+
+ *ctrl = 0xff;
+ *cs = 0xff;
+ if (strcmp(str, "--all") == 0 ||
+ strcmp(str, "-a") == 0) {
+ /* If --all or -a is specified, ctl==chip==0xff */
+ debug("CTRL=%d CHIP=%d\n", *ctrl, *cs);
+ return (0);
+ }
+ /* Separate token and try to convert it to int */
+ tmpstr = (char *)strtok(str, ":");
+ if ((tmpstr != NULL) && (*tmpstr != '\0')) {
+ if (convert_arguint(tmpstr, &num) != 0)
+ return (1);
+
+ if (num > MAX_SIM_DEV - 1) {
+ error("Invalid ctrl_no supplied: %s. Valid ctrl_no "
+ "value must lie between 0 and 3!", tmpstr);
+ return (1);
+ }
+
+ *ctrl = num;
+ tmpstr = (char *)strtok(NULL, ":");
+
+ if ((tmpstr != NULL) && (*tmpstr != '\0')) {
+ if (convert_arguint(tmpstr, &num) != 0)
+ return (1);
+
+ /* Check if chip_no is valid */
+ if (num > MAX_CTRL_CS - 1) {
+ error("Invalid chip_no supplied: %s. Valid "
+ "chip_no value must lie between 0 and 3!",
+ tmpstr);
+ return (1);
+ }
+ *cs = num;
+ }
+ } else
+ /* Empty devstring supplied */
+ return (1);
+
+ debug("CTRL=%d CHIP=%d\n", *ctrl, *cs);
+ return (0);
+}
+
+static int
+opendev(int *fd)
+{
+
+ *fd = open(SIMDEVICE, O_RDWR);
+ if (*fd == -1) {
+ error("Could not open simulator device file (%s)!",
+ SIMDEVICE);
+ return (EX_OSFILE);
+ }
+ return (EX_OK);
+}
+
+static int
+opencdev(int *cdevd, int ctrl, int chip)
+{
+ char fname[255];
+
+ sprintf(fname, "/dev/nandsim%d.%d", ctrl, chip);
+ *cdevd = open(fname, O_RDWR);
+ if (*cdevd == -1)
+ return (EX_NOINPUT);
+
+ return (EX_OK);
+}
+
+/*
+ * Check if given arguments count match requirements. If no, or
+ * --help (-h) flag is specified -- return 1 (print usage)
+ */
+static int
+checkusage(int gargc, int argsreqd, char **gargv)
+{
+
+ if (gargc < argsreqd + 2 || (gargc >= (argsreqd + 2) &&
+ (strcmp(gargv[1], "--help") == 0 ||
+ strcmp(gargv[1], "-h") == 0)))
+ return (1);
+
+ return (0);
+}
+
+static int
+cmdstatus(int gargc, char **gargv)
+{
+ int chip = 0, ctl = 0, err = 0, fd, idx, idx2, start, stop;
+ uint8_t verbose = 0;
+ struct sim_ctrl ctrlconf;
+ struct sim_chip chipconf;
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+ if (err) {
+ return (EX_USAGE);
+ } else if (ctl == 0xff) {
+ /* Every controller */
+ start = 0;
+ stop = MAX_SIM_DEV-1;
+ } else {
+ /* Specified controller only */
+ start = ctl;
+ stop = ctl;
+ }
+
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ for (idx = 0; idx < gargc; idx ++)
+ if (strcmp(gargv[idx], "-v") == 0 ||
+ strcmp(gargv[idx], "--verbose") == 0)
+ verbose = 1;
+
+ for (idx = start; idx <= stop; idx++) {
+ ctrlconf.num = idx;
+ err = ioctl(fd, NANDSIM_STATUS_CTRL, &ctrlconf);
+ if (err) {
+ err = EX_SOFTWARE;
+ error(MSG_STATUSACQCTRL, idx);
+ continue;
+ }
+
+ printctrl(&ctrlconf);
+
+ for (idx2 = 0; idx2 < MAX_CTRL_CS; idx2++) {
+ chipconf.num = idx2;
+ chipconf.ctrl_num = idx;
+
+ err = ioctl(fd, NANDSIM_STATUS_CHIP, &chipconf);
+ if (err) {
+ err = EX_SOFTWARE;
+ error(MSG_STATUSACQCTRL, idx);
+ continue;
+ }
+
+ printchip(&chipconf, verbose);
+ }
+ }
+ close(fd);
+ return (err);
+}
+
+static int
+cmdconf(int gargc __unused, char **gargv)
+{
+ int err;
+
+ err = parse_config(gargv[2], SIMDEVICE);
+ if (err)
+ return (EX_DATAERR);
+
+ return (EX_OK);
+}
+
+static int
+cmdstart(int gargc __unused, char **gargv)
+{
+ int chip = 0, ctl = 0, err = 0, fd, running, state;
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+ if (err)
+ return (EX_USAGE);
+
+ err = is_ctrl_created(ctl, &state);
+ if (err) {
+ return (EX_SOFTWARE);
+ } else if (state == 0) {
+ error(MSG_NOCTRL, ctl);
+ return (EX_SOFTWARE);
+ }
+
+ err = is_ctrl_running(ctl, &running);
+ if (err)
+ return (EX_SOFTWARE);
+
+ if (running) {
+ warn(MSG_RUNNING, ctl);
+ } else {
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ err = ioctl(fd, NANDSIM_START_CTRL, &ctl);
+ close(fd);
+ if (err) {
+ error("Cannot start controller#%d", ctl);
+ err = EX_SOFTWARE;
+ }
+ }
+ return (err);
+}
+
+static int
+cmdstop(int gargc __unused, char **gargv)
+{
+ int chip = 0, ctl = 0, err = 0, fd, running;
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+ if (err)
+ return (EX_USAGE);
+
+ err = is_ctrl_running(ctl, &running);
+ if (err)
+ return (EX_SOFTWARE);
+
+ if (!running) {
+ error(MSG_NOTRUNNING, ctl);
+ } else {
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ err = ioctl(fd, NANDSIM_STOP_CTRL, &ctl);
+ close(fd);
+ if (err) {
+ error("Cannot stop controller#%d", ctl);
+ err = EX_SOFTWARE;
+ }
+ }
+
+ return (err);
+}
+
+static int
+cmdmod(int gargc __unused, char **gargv)
+{
+ int chip, ctl, err = 0, fd = -1, i;
+ struct sim_mod mods;
+
+ if (gargc >= 4) {
+ if (strcmp(gargv[2], "--loglevel") == 0 || strcmp(gargv[2],
+ "-l") == 0) {
+ /* Set loglevel (ctrl:chip pair independant) */
+ mods.field = SIM_MOD_LOG_LEVEL;
+
+ if (convert_arguint(gargv[3], &mods.new_value) != 0)
+ return (EX_SOFTWARE);
+
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ err = ioctl(fd, NANDSIM_MODIFY, &mods);
+ if (err) {
+ error("simulator parameter %s could not be "
+ "modified !", gargv[3]);
+ close(fd);
+ return (EX_SOFTWARE);
+ }
+
+ debug("request : loglevel = %d\n", mods.new_value);
+ close(fd);
+ return (EX_OK);
+ }
+ }
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+ if (err)
+ return (EX_USAGE);
+
+ else if (chip == 0xff) {
+ error(MSG_CTRLCHIPNEEDED);
+ return (EX_USAGE);
+ }
+
+ if (!assert_chip_connected(ctl, chip))
+ return (EX_SOFTWARE);
+
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ /* Find out which flags were passed */
+ for (i = 3; i < gargc; i++) {
+
+ if (convert_arguint(gargv[i + 1], &mods.new_value) != 0)
+ continue;
+
+ if (strcmp(gargv[i], "--prog-time") == 0 ||
+ strcmp(gargv[i], "-p") == 0) {
+
+ mods.field = SIM_MOD_PROG_TIME;
+ debug("request : progtime = %d\n", mods.new_value);
+
+ } else if (strcmp(gargv[i], "--erase-time") == 0 ||
+ strcmp(gargv[i], "-e") == 0) {
+
+ mods.field = SIM_MOD_ERASE_TIME;
+ debug("request : eraseime = %d\n", mods.new_value);
+
+ } else if (strcmp(gargv[i], "--read-time") == 0 ||
+ strcmp(gargv[i], "-r") == 0) {
+
+ mods.field = SIM_MOD_READ_TIME;
+ debug("request : read_time = %d\n", mods.new_value);
+
+ } else if (strcmp(gargv[i], "--error-ratio") == 0 ||
+ strcmp(gargv[i], "-E") == 0) {
+
+ mods.field = SIM_MOD_ERROR_RATIO;
+ debug("request : error_ratio = %d\n", mods.new_value);
+
+ } else {
+ /* Flag not recognized, or nothing specified. */
+ error("Unrecognized flag:%s\n", gargv[i]);
+ if (fd >= 0)
+ close(fd);
+ return (EX_USAGE);
+ }
+
+ mods.chip_num = chip;
+ mods.ctrl_num = ctl;
+
+ /* Call appropriate ioctl */
+ err = ioctl(fd, NANDSIM_MODIFY, &mods);
+ if (err) {
+ error("simulator parameter %s could not be modified! ",
+ gargv[i]);
+ continue;
+ }
+ i++;
+ }
+ close(fd);
+ return (EX_OK);
+}
+
+static int
+cmderror(int gargc __unused, char **gargv)
+{
+ uint32_t page, column, len, pattern;
+ int chip = 0, ctl = 0, err = 0, fd;
+ struct sim_error sim_err;
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+ if (err)
+ return (EX_USAGE);
+
+ if (chip == 0xff) {
+ error(MSG_CTRLCHIPNEEDED);
+ return (EX_USAGE);
+ }
+
+ if (convert_arguint(gargv[3], &page) ||
+ convert_arguint(gargv[4], &column) ||
+ convert_arguint(gargv[5], &len) ||
+ convert_arguint(gargv[6], &pattern))
+ return (EX_SOFTWARE);
+
+ if (!assert_chip_connected(ctl, chip))
+ return (EX_SOFTWARE);
+
+ sim_err.page_num = page;
+ sim_err.column = column;
+ sim_err.len = len;
+ sim_err.pattern = pattern;
+ sim_err.ctrl_num = ctl;
+ sim_err.chip_num = chip;
+
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ err = ioctl(fd, NANDSIM_INJECT_ERROR, &sim_err);
+
+ close(fd);
+ if (err) {
+ error("Could not inject error !");
+ return (EX_SOFTWARE);
+ }
+ return (EX_OK);
+}
+
+static int
+cmdbb(int gargc, char **gargv)
+{
+ struct sim_block_state bs;
+ struct chip_param_io cparams;
+ uint32_t blkidx;
+ int c, cdevd, chip = 0, ctl = 0, err = 0, fd, idx;
+ uint8_t flagL = 0, flagU = 0;
+ int *badblocks = NULL;
+
+ /* Check for --list/-L or --unmark/-U flags */
+ for (idx = 3; idx < gargc; idx++) {
+ if (strcmp(gargv[idx], "--list") == 0 ||
+ strcmp(gargv[idx], "-L") == 0)
+ flagL = idx;
+ if (strcmp(gargv[idx], "--unmark") == 0 ||
+ strcmp(gargv[idx], "-U") == 0)
+ flagU = idx;
+ }
+
+ if (flagL == 2 || flagU == 2 || flagU == 3)
+ return (EX_USAGE);
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+ if (err) {
+ return (EX_USAGE);
+ }
+ if (chip == 0xff || ctl == 0xff) {
+ error(MSG_CTRLCHIPNEEDED);
+ return (EX_USAGE);
+ }
+
+ bs.ctrl_num = ctl;
+ bs.chip_num = chip;
+
+ if (!assert_chip_connected(ctl, chip))
+ return (EX_SOFTWARE);
+
+ if (opencdev(&cdevd, ctl, chip) != EX_OK)
+ return (EX_OSFILE);
+
+ err = ioctl(cdevd, NAND_IO_GET_CHIP_PARAM, &cparams);
+ if (err)
+ return (EX_SOFTWARE);
+
+ close(cdevd);
+
+ bs.ctrl_num = ctl;
+ bs.chip_num = chip;
+
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ if (flagL != 3) {
+ /*
+ * Flag -L was specified either after blocklist or was not
+ * specified at all.
+ */
+ c = parse_intarray(gargv[3], &badblocks);
+
+ for (idx = 0; idx < c; idx++) {
+ bs.block_num = badblocks[idx];
+ /* Do not change wearout */
+ bs.wearout = -1;
+ bs.state = (flagU == 0) ? NANDSIM_BAD_BLOCK :
+ NANDSIM_GOOD_BLOCK;
+
+ err = ioctl(fd, NANDSIM_SET_BLOCK_STATE, &bs);
+ if (err) {
+ error("Could not set bad block(%d) for "
+ "controller (%d)!",
+ badblocks[idx], ctl);
+ err = EX_SOFTWARE;
+ break;
+ }
+ }
+ }
+ if (flagL != 0) {
+ /* If flag -L was specified (anywhere) */
+ for (blkidx = 0; blkidx < cparams.blocks; blkidx++) {
+ bs.block_num = blkidx;
+ /* Do not change the wearout */
+ bs.wearout = -1;
+ err = ioctl(fd, NANDSIM_GET_BLOCK_STATE, &bs);
+ if (err) {
+ error("Could not acquire block state");
+ err = EX_SOFTWARE;
+ continue;
+ }
+ printf("Block#%d: wear count: %d %s\n", blkidx,
+ bs.wearout,
+ (bs.state == NANDSIM_BAD_BLOCK) ? "BAD":"GOOD");
+ }
+ }
+ close(fd);
+ return (err);
+}
+
+static int
+cmdfreeze(int gargc __unused, char **gargv)
+{
+ int chip = 0, ctl = 0, err = 0, fd, i, start = 0, state, stop = 0;
+ struct sim_ctrl_chip ctrlchip;
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+ if (err)
+ return (EX_USAGE);
+
+ if (ctl == 0xff) {
+ error("You have to specify at least controller number");
+ return (EX_USAGE);
+ }
+
+ if (ctl != 0xff && chip == 0xff) {
+ start = 0;
+ stop = MAX_CTRL_CS - 1;
+ } else {
+ start = chip;
+ stop = chip;
+ }
+
+ ctrlchip.ctrl_num = ctl;
+
+ err = is_ctrl_running(ctl, &state);
+ if (err)
+ return (EX_SOFTWARE);
+ if (state == 0) {
+ error(MSG_NOTRUNNING, ctl);
+ return (EX_SOFTWARE);
+ }
+
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ for (i = start; i <= stop; i++) {
+ err = is_chip_created(ctl, i, &state);
+ if (err)
+ return (EX_SOFTWARE);
+ else if (state == 0) {
+ continue;
+ }
+
+ ctrlchip.chip_num = i;
+ err = ioctl(fd, NANDSIM_FREEZE, &ctrlchip);
+ if (err) {
+ error("Could not freeze ctrl#%d chip#%d", ctl, i);
+ close(fd);
+ return (EX_SOFTWARE);
+ }
+ }
+ close(fd);
+ return (EX_OK);
+}
+
+static int
+cmdlog(int gargc __unused, char **gargv)
+{
+ struct sim_log log;
+ int chip = 0, ctl = 0, err = 0, fd, idx, start = 0, stop = 0;
+ char *logbuf;
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+ if (err)
+ return (EX_USAGE);
+
+ logbuf = (char *)malloc(sizeof(char) * NANDSIM_RAM_LOG_SIZE);
+ if (logbuf == NULL) {
+ error("Not enough memory to create log buffer");
+ return (EX_SOFTWARE);
+ }
+
+ memset(logbuf, 0, NANDSIM_RAM_LOG_SIZE);
+ log.log = logbuf;
+ log.len = NANDSIM_RAM_LOG_SIZE;
+
+ if (ctl == 0xff) {
+ start = 0;
+ stop = MAX_SIM_DEV-1;
+ } else {
+ start = ctl;
+ stop = ctl;
+ }
+
+ if (opendev(&fd) != EX_OK) {
+ free(logbuf);
+ return (EX_OSFILE);
+ }
+
+ /* Print logs for selected controller(s) */
+ for (idx = start; idx <= stop; idx++) {
+ log.ctrl_num = idx;
+
+ err = ioctl(fd, NANDSIM_PRINT_LOG, &log);
+ if (err) {
+ error("Could not get log for controller %d!", idx);
+ continue;
+ }
+
+ printf("Logs for controller#%d:\n%s\n", idx, logbuf);
+ }
+
+ free(logbuf);
+ close(fd);
+ return (EX_OK);
+}
+
+static int
+cmdstats(int gargc __unused, char **gargv)
+{
+ int cdevd, chip = 0, ctl = 0, err = 0;
+ uint32_t pageno = 0;
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+
+ if (err)
+ return (EX_USAGE);
+
+ if (chip == 0xff) {
+ error(MSG_CTRLCHIPNEEDED);
+ return (EX_USAGE);
+ }
+
+ if (convert_arguint(gargv[3], &pageno) != 0)
+ return (EX_USAGE);
+
+ if (!assert_chip_connected(ctl, chip))
+ return (EX_SOFTWARE);
+
+ if (opencdev(&cdevd, ctl, chip) != EX_OK)
+ return (EX_OSFILE);
+
+ err = printstats(ctl, chip, pageno, cdevd);
+ if (err) {
+ close(cdevd);
+ return (EX_SOFTWARE);
+ }
+ close(cdevd);
+ return (EX_OK);
+}
+
+static int
+cmddump(int gargc __unused, char **gargv)
+{
+ struct sim_dump dump;
+ struct sim_block_state bs;
+ struct chip_param_io cparams;
+ int chip = 0, ctl = 0, err = EX_OK, fd, dumpfd;
+ uint32_t blkidx, bwritten = 0, totalwritten = 0;
+ void *buf;
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+ if (err)
+ return (EX_USAGE);
+
+ if (chip == 0xff || ctl == 0xff) {
+ error(MSG_CTRLCHIPNEEDED);
+ return (EX_USAGE);
+ }
+
+ if (!assert_chip_connected(ctl, chip))
+ return (EX_SOFTWARE);
+
+ if (opencdev(&fd, ctl, chip) != EX_OK)
+ return (EX_OSFILE);
+
+ err = ioctl(fd, NAND_IO_GET_CHIP_PARAM, &cparams);
+ if (err) {
+ error("Cannot get parameters for chip %d:%d", ctl, chip);
+ close(fd);
+ return (EX_SOFTWARE);
+ }
+ close(fd);
+
+ dump.ctrl_num = ctl;
+ dump.chip_num = chip;
+
+ dump.len = cparams.pages_per_block * (cparams.page_size +
+ cparams.oob_size);
+
+ buf = malloc(dump.len);
+ if (buf == NULL) {
+ error("Could not allocate memory!");
+ return (EX_SOFTWARE);
+ }
+ dump.data = buf;
+
+ errno = 0;
+ dumpfd = open(gargv[3], O_WRONLY | O_CREAT, 0666);
+ if (dumpfd == -1) {
+ error("Cannot create dump file.");
+ free(buf);
+ return (EX_SOFTWARE);
+ }
+
+ if (opendev(&fd)) {
+ close(dumpfd);
+ free(buf);
+ return (EX_SOFTWARE);
+ }
+
+ bs.ctrl_num = ctl;
+ bs.chip_num = chip;
+
+ /* First uint32_t in file shall contain block count */
+ if (write(dumpfd, &cparams, sizeof(cparams)) < (int)sizeof(cparams)) {
+ error("Error writing to dumpfile!");
+ close(fd);
+ close(dumpfd);
+ free(buf);
+ return (EX_SOFTWARE);
+ }
+
+ /*
+ * First loop acquires blocks states and writes them to
+ * the dump file.
+ */
+ for (blkidx = 0; blkidx < cparams.blocks; blkidx++) {
+ bs.block_num = blkidx;
+ err = ioctl(fd, NANDSIM_GET_BLOCK_STATE, &bs);
+ if (err) {
+ error("Could not get bad block(%d) for "
+ "controller (%d)!", blkidx, ctl);
+ close(fd);
+ close(dumpfd);
+ free(buf);
+ return (EX_SOFTWARE);
+ }
+
+ bwritten = write(dumpfd, &bs, sizeof(bs));
+ if (bwritten != sizeof(bs)) {
+ error("Error writing to dumpfile");
+ close(fd);
+ close(dumpfd);
+ free(buf);
+ return (EX_SOFTWARE);
+ }
+ }
+
+ /* Second loop dumps the data */
+ for (blkidx = 0; blkidx < cparams.blocks; blkidx++) {
+ debug("Block#%d...", blkidx);
+ dump.block_num = blkidx;
+
+ err = ioctl(fd, NANDSIM_DUMP, &dump);
+ if (err) {
+ error("Could not dump ctrl#%d chip#%d "
+ "block#%d", ctl, chip, blkidx);
+ err = EX_SOFTWARE;
+ break;
+ }
+
+ bwritten = write(dumpfd, dump.data, dump.len);
+ if (bwritten != dump.len) {
+ error("Error writing to dumpfile");
+ err = EX_SOFTWARE;
+ break;
+ }
+ debug("OK!\n");
+ totalwritten += bwritten;
+ }
+ printf("%d out of %d B written.\n", totalwritten, dump.len * blkidx);
+
+ close(fd);
+ close(dumpfd);
+ free(buf);
+ return (err);
+}
+
+static int
+cmdrestore(int gargc __unused, char **gargv)
+{
+ struct sim_dump dump;
+ struct sim_block_state bs;
+ struct stat filestat;
+ int chip = 0, ctl = 0, err = 0, fd, dumpfd = -1;
+ uint32_t blkidx, blksz, fsize = 0, expfilesz;
+ void *buf;
+ struct chip_param_io cparams, dumpcparams;
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+ if (err)
+ return (EX_USAGE);
+ else if (ctl == 0xff) {
+ error(MSG_CTRLCHIPNEEDED);
+ return (EX_USAGE);
+ }
+
+ if (!assert_chip_connected(ctl, chip))
+ return (EX_SOFTWARE);
+
+ /* Get chip geometry */
+ if (opencdev(&fd, ctl, chip) != EX_OK)
+ return (EX_OSFILE);
+
+ err = ioctl(fd, NAND_IO_GET_CHIP_PARAM, &cparams);
+ if (err) {
+ error("Cannot get parameters for chip %d:%d", ctl, chip);
+ close(fd);
+ return (err);
+ }
+ close(fd);
+
+ /* Obtain dump file size */
+ errno = 0;
+ if (stat(gargv[3], &filestat) != 0) {
+ error("Could not acquire file size! : %s",
+ strerror(errno));
+ return (EX_IOERR);
+ }
+
+ fsize = filestat.st_size;
+ blksz = cparams.pages_per_block * (cparams.page_size +
+ cparams.oob_size);
+
+ /* Expected dump file size for chip */
+ expfilesz = cparams.blocks * (blksz + sizeof(bs)) + sizeof(cparams);
+
+ if (fsize != expfilesz) {
+ error("File size does not match chip geometry (file size: %d"
+ ", dump size: %d)", fsize, expfilesz);
+ return (EX_SOFTWARE);
+ }
+
+ dumpfd = open(gargv[3], O_RDONLY);
+ if (dumpfd == -1) {
+ error("Could not open dump file!");
+ return (EX_IOERR);
+ }
+
+ /* Read chip params saved in dumpfile */
+ read(dumpfd, &dumpcparams, sizeof(dumpcparams));
+
+ /* XXX */
+ if (bcmp(&dumpcparams, &cparams, sizeof(cparams)) != 0) {
+ error("Supplied dump is created for a chip with different "
+ "chip configuration!");
+ close(dumpfd);
+ return (EX_SOFTWARE);
+ }
+
+ if (opendev(&fd) != EX_OK) {
+ close(dumpfd);
+ return (EX_OSFILE);
+ }
+
+ buf = malloc(blksz);
+ if (buf == NULL) {
+ error("Could not allocate memory for block buffer");
+ close(dumpfd);
+ close(fd);
+ return (EX_SOFTWARE);
+ }
+
+ dump.ctrl_num = ctl;
+ dump.chip_num = chip;
+ dump.data = buf;
+ /* Restore block states and wearouts */
+ for (blkidx = 0; blkidx < cparams.blocks; blkidx++) {
+ dump.block_num = blkidx;
+ if (read(dumpfd, &bs, sizeof(bs)) != sizeof(bs)) {
+ error("Error reading dumpfile");
+ close(dumpfd);
+ close(fd);
+ free(buf);
+ return (EX_SOFTWARE);
+ }
+ bs.ctrl_num = ctl;
+ bs.chip_num = chip;
+ debug("BLKIDX=%d BLOCKS=%d CTRL=%d CHIP=%d STATE=%d\n"
+ "WEAROUT=%d BS.CTRL_NUM=%d BS.CHIP_NUM=%d\n",
+ blkidx, cparams.blocks, dump.ctrl_num, dump.chip_num,
+ bs.state, bs.wearout, bs.ctrl_num, bs.chip_num);
+
+ err = ioctl(fd, NANDSIM_SET_BLOCK_STATE, &bs);
+ if (err) {
+ error("Could not set bad block(%d) for "
+ "controller: %d, chip: %d!", blkidx, ctl, chip);
+ close(dumpfd);
+ close(fd);
+ free(buf);
+ return (EX_SOFTWARE);
+ }
+ }
+ /* Restore data */
+ for (blkidx = 0; blkidx < cparams.blocks; blkidx++) {
+ errno = 0;
+ dump.len = read(dumpfd, buf, blksz);
+ if (errno) {
+ error("Failed to read block#%d from dumpfile.", blkidx);
+ err = EX_SOFTWARE;
+ break;
+ }
+ dump.block_num = blkidx;
+ err = ioctl(fd, NANDSIM_RESTORE, &dump);
+ if (err) {
+ error("Could not restore block#%d of ctrl#%d chip#%d"
+ ": %s", blkidx, ctl, chip, strerror(errno));
+ err = EX_SOFTWARE;
+ break;
+ }
+ }
+
+ free(buf);
+ close(dumpfd);
+ close(fd);
+ return (err);
+
+}
+
+static int
+cmddestroy(int gargc __unused, char **gargv)
+{
+ int chip = 0, ctl = 0, err = 0, fd, idx, idx2, state;
+ int chipstart, chipstop, ctrlstart, ctrlstop;
+ struct sim_chip_destroy chip_destroy;
+
+ err = parse_devstring(gargv[2], &ctl, &chip);
+
+ if (err)
+ return (EX_USAGE);
+
+ if (ctl == 0xff) {
+ /* Every chip at every controller */
+ ctrlstart = chipstart = 0;
+ ctrlstop = MAX_SIM_DEV - 1;
+ chipstop = MAX_CTRL_CS - 1;
+ } else {
+ ctrlstart = ctrlstop = ctl;
+ if (chip == 0xff) {
+ /* Every chip at selected controller */
+ chipstart = 0;
+ chipstop = MAX_CTRL_CS - 1;
+ } else
+ /* Selected chip at selected controller */
+ chipstart = chipstop = chip;
+ }
+ debug("CTRLSTART=%d CTRLSTOP=%d CHIPSTART=%d CHIPSTOP=%d\n",
+ ctrlstart, ctrlstop, chipstart, chipstop);
+ for (idx = ctrlstart; idx <= ctrlstop; idx++) {
+ err = is_ctrl_created(idx, &state);
+ if (err) {
+ error("Could not acquire ctrl#%d state. Cannot "
+ "destroy controller.", idx);
+ return (EX_SOFTWARE);
+ }
+ if (state == 0) {
+ continue;
+ }
+ err = is_ctrl_running(idx, &state);
+ if (err) {
+ error(MSG_STATUSACQCTRL, idx);
+ return (EX_SOFTWARE);
+ }
+ if (state != 0) {
+ error(MSG_RUNNING, ctl);
+ return (EX_SOFTWARE);
+ }
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ for (idx2 = chipstart; idx2 <= chipstop; idx2++) {
+ err = is_chip_created(idx, idx2, &state);
+ if (err) {
+ error(MSG_STATUSACQCTRLCHIP, idx2, idx);
+ continue;
+ }
+ if (state == 0)
+ /* There is no such chip running */
+ continue;
+ chip_destroy.ctrl_num = idx;
+ chip_destroy.chip_num = idx2;
+ ioctl(fd, NANDSIM_DESTROY_CHIP,
+ &chip_destroy);
+ }
+ /* If chip isn't explicitly specified -- destroy ctrl */
+ if (chip == 0xff) {
+ err = ioctl(fd, NANDSIM_DESTROY_CTRL, &idx);
+ if (err) {
+ error("Could not destroy ctrl#%d", idx);
+ continue;
+ }
+ }
+ close(fd);
+ }
+ return (err);
+}
+
+int
+main(int argc, char **argv)
+{
+ struct nandsim_command *cmdopts;
+ int retcode = 0;
+
+ if (argc < 2) {
+ cmdhelp(argc, argv);
+ retcode = EX_USAGE;
+ } else {
+ cmdopts = getcommand(argv[1]);
+ if (cmdopts != NULL && cmdopts->commandfunc != NULL) {
+ if (checkusage(argc, cmdopts->req_argc, argv) == 1) {
+ /* Print command specific usage */
+ printf("nandsim %s", cmdopts->usagestring);
+ return (EX_USAGE);
+ }
+ retcode = cmdopts->commandfunc(argc, argv);
+
+ if (retcode == EX_USAGE) {
+ /* Print command-specific usage */
+ printf("nandsim %s", cmdopts->usagestring);
+ } else if (retcode == EX_OSFILE) {
+ error("Could not open device file");
+ }
+
+ } else {
+ error("Unknown command!");
+ retcode = EX_USAGE;
+ }
+ }
+ return (retcode);
+}
+
+static int
+cmdhelp(int gargc __unused, char **gargv __unused)
+{
+ struct nandsim_command *opts;
+
+ printf("usage: nandsim <command> [command params] [params]\n\n");
+
+ for (opts = commands; (opts != NULL) &&
+ (opts->cmd_name != NULL); opts++)
+ printf("nandsim %s", opts->usagestring);
+
+ printf("\n");
+ return (EX_OK);
+}
+
+static void
+printchip(struct sim_chip *chip, uint8_t verbose)
+{
+
+ if (chip->created == 0)
+ return;
+ if (verbose > 0) {
+ printf("\n[Chip info]\n");
+ printf("num= %d\nctrl_num=%d\ndevice_id=%02x"
+ "\tmanufacturer_id=%02x\ndevice_model=%s\nmanufacturer="
+ "%s\ncol_addr_cycles=%d\nrow_addr_cycles=%d"
+ "\npage_size=%d\noob_size=%d\npages_per_block=%d\n"
+ "blocks_per_lun=%d\nluns=%d\n\nprog_time=%d\n"
+ "erase_time=%d\nread_time=%d\n"
+ "error_ratio=%d\nwear_level=%d\nwrite_protect=%c\n"
+ "chip_width=%db\n", chip->num, chip->ctrl_num,
+ chip->device_id, chip->manufact_id,chip->device_model,
+ chip->manufacturer, chip->col_addr_cycles,
+ chip->row_addr_cycles, chip->page_size,
+ chip->oob_size, chip->pgs_per_blk, chip->blks_per_lun,
+ chip->luns,chip->prog_time, chip->erase_time,
+ chip->read_time, chip->error_ratio, chip->wear_level,
+ (chip->is_wp == 0) ? 'N':'Y', chip->width);
+ } else {
+ printf("[Chip info]\n");
+ printf("\tnum=%d\n\tdevice_model=%s\n\tmanufacturer=%s\n"
+ "\tpage_size=%d\n\twrite_protect=%s\n",
+ chip->num, chip->device_model, chip->manufacturer,
+ chip->page_size, (chip->is_wp == 0) ? "NO":"YES");
+ }
+}
+
+static void
+printctrl(struct sim_ctrl *ctrl)
+{
+ int i;
+
+ if (ctrl->created == 0) {
+ printf(MSG_NOCTRL "\n", ctrl->num);
+ return;
+ }
+ printf("\n[Controller info]\n");
+ printf("\trunning: %s\n", ctrl->running ? "yes" : "no");
+ printf("\tnum cs: %d\n", ctrl->num_cs);
+ printf("\tecc: %d\n", ctrl->ecc);
+ printf("\tlog_filename: %s\n", ctrl->filename);
+ printf("\tecc_layout:");
+ for (i = 0; i < MAX_ECC_BYTES; i++) {
+ if (ctrl->ecc_layout[i] == 0xffff)
+ break;
+ else
+ printf("%c%d", i%16 ? ' ' : '\n',
+ ctrl->ecc_layout[i]);
+ }
+ printf("\n");
+}
+
+static int
+is_ctrl_running(int ctrl_no, int *running)
+{
+ struct sim_ctrl ctrl;
+ int err, fd;
+
+ ctrl.num = ctrl_no;
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ err = ioctl(fd, NANDSIM_STATUS_CTRL, &ctrl);
+ if (err) {
+ error(MSG_STATUSACQCTRL, ctrl_no);
+ close(fd);
+ return (err);
+ }
+ *running = ctrl.running;
+ close(fd);
+ return (0);
+}
+
+static int
+is_ctrl_created(int ctrl_no, int *created)
+{
+ struct sim_ctrl ctrl;
+ int err, fd;
+
+ ctrl.num = ctrl_no;
+
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ err = ioctl(fd, NANDSIM_STATUS_CTRL, &ctrl);
+ if (err) {
+ error("Could not acquire conf for ctrl#%d", ctrl_no);
+ close(fd);
+ return (err);
+ }
+ *created = ctrl.created;
+ close(fd);
+ return (0);
+}
+
+static int
+is_chip_created(int ctrl_no, int chip_no, int *created)
+{
+ struct sim_chip chip;
+ int err, fd;
+
+ chip.ctrl_num = ctrl_no;
+ chip.num = chip_no;
+
+ if (opendev(&fd) != EX_OK)
+ return (EX_OSFILE);
+
+ err = ioctl(fd, NANDSIM_STATUS_CHIP, &chip);
+ if (err) {
+ error("Could not acquire conf for chip#%d", chip_no);
+ close(fd);
+ return (err);
+ }
+ *created = chip.created;
+ close(fd);
+ return (0);
+}
+
+static int
+assert_chip_connected(int ctrl_no, int chip_no)
+{
+ int created, running;
+
+ if (is_ctrl_created(ctrl_no, &created))
+ return (0);
+
+ if (!created) {
+ error(MSG_NOCTRL, ctrl_no);
+ return (0);
+ }
+
+ if (is_chip_created(ctrl_no, chip_no, &created))
+ return (0);
+
+ if (!created) {
+ error(MSG_NOTCONFIGDCTRLCHIP, ctrl_no, chip_no);
+ return (0);
+ }
+
+ if (is_ctrl_running(ctrl_no, &running))
+ return (0);
+
+ if (!running) {
+ error(MSG_NOTRUNNING, ctrl_no);
+ return (0);
+ }
+
+ return (1);
+}
+
+static int
+printstats(int ctrlno, int chipno, uint32_t pageno, int cdevd)
+{
+ struct page_stat_io pstats;
+ struct block_stat_io bstats;
+ struct chip_param_io cparams;
+ uint32_t blkidx;
+ int err;
+
+ /* Gather information about chip */
+ err = ioctl(cdevd, NAND_IO_GET_CHIP_PARAM, &cparams);
+
+ if (err) {
+ error("Could not acquire chip info for chip attached to cs#"
+ "%d, ctrl#%d", chipno, ctrlno);
+ return (EX_SOFTWARE);
+ }
+
+ blkidx = (pageno / cparams.pages_per_block);
+ bstats.block_num = blkidx;
+
+ err = ioctl(cdevd, NAND_IO_BLOCK_STAT, &bstats);
+ if (err) {
+ error("Could not acquire block#%d statistics!", blkidx);
+ return (ENXIO);
+ }
+
+ printf("Block #%d erased: %d\n", blkidx, bstats.block_erased);
+ pstats.page_num = pageno;
+
+ err = ioctl(cdevd, NAND_IO_PAGE_STAT, &pstats);
+ if (err) {
+ error("Could not acquire page statistics!");
+ return (ENXIO);
+ }
+
+ debug("BLOCKIDX = %d PAGENO (REL. TO BLK) = %d\n", blkidx,
+ pstats.page_num);
+
+ printf("Page#%d : reads:%d writes:%d \n\traw reads:%d raw writes:%d "
+ "\n\tecc_succeeded:%d ecc_corrected:%d ecc_failed:%d\n",
+ pstats.page_num, pstats.page_read, pstats.page_written,
+ pstats.page_raw_read, pstats.page_raw_written,
+ pstats.ecc_succeded, pstats.ecc_corrected, pstats.ecc_failed);
+ return (0);
+}
diff --git a/usr.sbin/nandsim/nandsim_cfgparse.c b/usr.sbin/nandsim/nandsim_cfgparse.c
new file mode 100644
index 000000000000..d6a7cd69720e
--- /dev/null
+++ b/usr.sbin/nandsim/nandsim_cfgparse.c
@@ -0,0 +1,959 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 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/errno.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+
+#include <dev/nand/nandsim.h>
+
+#include <ctype.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#include "nandsim_cfgparse.h"
+
+#define warn(fmt, args...) do { \
+ printf("WARNING: " fmt "\n", ##args); } while (0)
+
+#define error(fmt, args...) do { \
+ printf("ERROR: " fmt "\n", ##args); } while (0)
+
+#define MSG_MANDATORYKEYMISSING "mandatory key \"%s\" value belonging to " \
+ "section \"%s\" is missing!\n"
+
+#define DEBUG
+#undef DEBUG
+
+#ifdef DEBUG
+#define debug(fmt, args...) do { \
+ printf("NANDSIM_CONF:" fmt "\n", ##args); } while (0)
+#else
+#define debug(fmt, args...) do {} while(0)
+#endif
+
+#define STRBUFSIZ 2000
+
+/* Macros extracts type and type size */
+#define TYPE(x) ((x) & 0xf8)
+#define SIZE(x) (((x) & 0x07))
+
+/* Erase/Prog/Read time max and min values */
+#define DELAYTIME_MIN 10000
+#define DELAYTIME_MAX 10000000
+
+/* Structure holding configuration for controller. */
+static struct sim_ctrl ctrl_conf;
+/* Structure holding configuration for chip. */
+static struct sim_chip chip_conf;
+
+static struct nandsim_key nandsim_ctrl_keys[] = {
+ {"num_cs", 1, VALUE_UINT | SIZE_8, (void *)&ctrl_conf.num_cs, 0},
+ {"ctrl_num", 1, VALUE_UINT | SIZE_8, (void *)&ctrl_conf.num, 0},
+
+ {"ecc_layout", 1, VALUE_UINTARRAY | SIZE_16,
+ (void *)&ctrl_conf.ecc_layout, MAX_ECC_BYTES},
+
+ {"filename", 0, VALUE_STRING,
+ (void *)&ctrl_conf.filename, FILENAME_SIZE},
+
+ {"ecc", 0, VALUE_BOOL, (void *)&ctrl_conf.ecc, 0},
+ {NULL, 0, 0, NULL, 0},
+};
+
+static struct nandsim_key nandsim_chip_keys[] = {
+ {"chip_cs", 1, VALUE_UINT | SIZE_8, (void *)&chip_conf.num, 0},
+ {"chip_ctrl", 1, VALUE_UINT | SIZE_8, (void *)&chip_conf.ctrl_num,
+ 0},
+ {"device_id", 1, VALUE_UINT | SIZE_8, (void *)&chip_conf.device_id,
+ 0},
+ {"manufacturer_id", 1, VALUE_UINT | SIZE_8,
+ (void *)&chip_conf.manufact_id, 0},
+ {"model", 0, VALUE_STRING, (void *)&chip_conf.device_model,
+ DEV_MODEL_STR_SIZE},
+ {"manufacturer", 0, VALUE_STRING, (void *)&chip_conf.manufacturer,
+ MAN_STR_SIZE},
+ {"page_size", 1, VALUE_UINT | SIZE_32, (void *)&chip_conf.page_size,
+ 0},
+ {"oob_size", 1, VALUE_UINT | SIZE_32, (void *)&chip_conf.oob_size,
+ 0},
+ {"pages_per_block", 1, VALUE_UINT | SIZE_32,
+ (void *)&chip_conf.pgs_per_blk, 0},
+ {"blocks_per_lun", 1, VALUE_UINT | SIZE_32,
+ (void *)&chip_conf.blks_per_lun, 0},
+ {"luns", 1, VALUE_UINT | SIZE_32, (void *)&chip_conf.luns, 0},
+ {"column_addr_cycle", 1,VALUE_UINT | SIZE_8,
+ (void *)&chip_conf.col_addr_cycles, 0},
+ {"row_addr_cycle", 1, VALUE_UINT | SIZE_8,
+ (void *)&chip_conf.row_addr_cycles, 0},
+ {"program_time", 0, VALUE_UINT | SIZE_32,
+ (void *)&chip_conf.prog_time, 0},
+ {"erase_time", 0, VALUE_UINT | SIZE_32,
+ (void *)&chip_conf.erase_time, 0},
+ {"read_time", 0, VALUE_UINT | SIZE_32,
+ (void *)&chip_conf.read_time, 0},
+ {"width", 1, VALUE_UINT | SIZE_8, (void *)&chip_conf.width, 0},
+ {"wear_out", 1, VALUE_UINT | SIZE_32, (void *)&chip_conf.wear_level,
+ 0},
+ {"bad_block_map", 0, VALUE_UINTARRAY | SIZE_32,
+ (void *)&chip_conf.bad_block_map, MAX_BAD_BLOCKS},
+ {NULL, 0, 0, NULL, 0},
+};
+
+struct nandsim_section sections[] = {
+ {"ctrl", (struct nandsim_key *)&nandsim_ctrl_keys},
+ {"chip", (struct nandsim_key *)&nandsim_chip_keys},
+ {NULL, NULL},
+};
+
+static uint8_t logoutputtoint(char *, int *);
+static uint8_t validate_chips(struct sim_chip *, int, struct sim_ctrl *, int);
+static uint8_t validate_ctrls(struct sim_ctrl *, int);
+static int configure_sim(const char *, struct rcfile *);
+static int create_ctrls(struct rcfile *, struct sim_ctrl **, int *);
+static int create_chips(struct rcfile *, struct sim_chip **, int *);
+static void destroy_ctrls(struct sim_ctrl *);
+static void destroy_chips(struct sim_chip *);
+static int validate_section_config(struct rcfile *, const char *, int);
+
+int
+convert_argint(char *arg, int *value)
+{
+
+ if (arg == NULL || value == NULL)
+ return (EINVAL);
+
+ errno = 0;
+ *value = (int)strtol(arg, NULL, 0);
+ if (*value == 0 && errno != 0) {
+ error("Cannot convert to number argument \'%s\'", arg);
+ return (EINVAL);
+ }
+ return (0);
+}
+
+int
+convert_arguint(char *arg, unsigned int *value)
+{
+
+ if (arg == NULL || value == NULL)
+ return (EINVAL);
+
+ errno = 0;
+ *value = (unsigned int)strtol(arg, NULL, 0);
+ if (*value == 0 && errno != 0) {
+ error("Cannot convert to number argument \'%s\'", arg);
+ return (EINVAL);
+ }
+ return (0);
+}
+
+/* Parse given ',' separated list of bytes into buffer. */
+int
+parse_intarray(char *array, int **buffer)
+{
+ char *tmp, *tmpstr, *origstr;
+ unsigned int currbufp = 0, i;
+ unsigned int count = 0, from = 0, to = 0;
+
+ /* Remove square braces */
+ if (array[0] == '[')
+ array ++;
+ if (array[strlen(array)-1] == ']')
+ array[strlen(array)-1] = ',';
+
+ from = strlen(array);
+ origstr = (char *)malloc(sizeof(char) * from);
+ strcpy(origstr, array);
+
+ tmpstr = (char *)strtok(array, ",");
+ /* First loop checks for how big int array we need to allocate */
+ while (tmpstr != NULL) {
+ errno = 0;
+ if ((tmp = strchr(tmpstr, '-')) != NULL) {
+ *tmp = ' ';
+ if (convert_arguint(tmpstr, &from) ||
+ convert_arguint(tmp, &to)) {
+ free(origstr);
+ return (EINVAL);
+ }
+
+ count += to - from + 1;
+ } else {
+ if (convert_arguint(tmpstr, &from)) {
+ free(origstr);
+ return (EINVAL);
+ }
+ count++;
+ }
+ tmpstr = (char *)strtok(NULL, ",");
+ }
+
+ if (count == 0)
+ goto out;
+
+ /* Allocate buffer of ints */
+ tmpstr = (char *)strtok(origstr, ",");
+ *buffer = malloc(count * sizeof(int));
+
+ /* Second loop is just inserting converted values into int array */
+ while (tmpstr != NULL) {
+ errno = 0;
+ if ((tmp = strchr(tmpstr, '-')) != NULL) {
+ *tmp = ' ';
+ from = strtol(tmpstr, NULL, 0);
+ to = strtol(tmp, NULL, 0);
+ tmpstr = strtok(NULL, ",");
+ for (i = from; i <= to; i ++)
+ (*buffer)[currbufp++] = i;
+ continue;
+ }
+ errno = 0;
+ from = (int)strtol(tmpstr, NULL, 0);
+ (*buffer)[currbufp++] = from;
+ tmpstr = (char *)strtok(NULL, ",");
+ }
+out:
+ free(origstr);
+ return (count);
+}
+
+/* Convert logoutput strings literals into appropriate ints. */
+static uint8_t
+logoutputtoint(char *logoutput, int *output)
+{
+ int out;
+
+ if (strcmp(logoutput, "file") == 0)
+ out = NANDSIM_OUTPUT_FILE;
+
+ else if (strcmp(logoutput, "console") == 0)
+ out = NANDSIM_OUTPUT_CONSOLE;
+
+ else if (strcmp(logoutput, "ram") == 0)
+ out = NANDSIM_OUTPUT_RAM;
+
+ else if (strcmp(logoutput, "none") == 0)
+ out = NANDSIM_OUTPUT_NONE;
+ else
+ out = -1;
+
+ *output = out;
+
+ if (out == -1)
+ return (EINVAL);
+ else
+ return (0);
+}
+
+static int
+configure_sim(const char *devfname, struct rcfile *f)
+{
+ struct sim_param sim_conf;
+ char buf[255];
+ int err, tmpv, fd;
+
+ err = rc_getint(f, "sim", 0, "log_level", &tmpv);
+
+ if (tmpv < 0 || tmpv > 255 || err) {
+ error("Bad log level specified (%d)\n", tmpv);
+ return (ENOTSUP);
+ } else
+ sim_conf.log_level = tmpv;
+
+ rc_getstring(f, "sim", 0, "log_output", 255, (char *)&buf);
+
+ tmpv = -1;
+ err = logoutputtoint((char *)&buf, &tmpv);
+ if (err) {
+ error("Log output specified in config file does not seem to "
+ "be valid (%s)!", (char *)&buf);
+ return (ENOTSUP);
+ }
+
+ sim_conf.log_output = tmpv;
+
+ fd = open(devfname, O_RDWR);
+ if (fd == -1) {
+ error("could not open simulator device file (%s)!",
+ devfname);
+ return (EX_OSFILE);
+ }
+
+ err = ioctl(fd, NANDSIM_SIM_PARAM, &sim_conf);
+ if (err) {
+ error("simulator parameters could not be modified: %s",
+ strerror(errno));
+ close(fd);
+ return (ENXIO);
+ }
+
+ close(fd);
+ return (EX_OK);
+}
+
+static int
+create_ctrls(struct rcfile *f, struct sim_ctrl **ctrls, int *cnt)
+{
+ int count, i;
+ struct sim_ctrl *ctrlsptr;
+
+ count = rc_getsectionscount(f, "ctrl");
+ if (count > MAX_SIM_DEV) {
+ error("Too many CTRL sections specified(%d)", count);
+ return (ENOTSUP);
+ } else if (count == 0) {
+ error("No ctrl sections specified");
+ return (ENOENT);
+ }
+
+ ctrlsptr = (struct sim_ctrl *)malloc(sizeof(struct sim_ctrl) * count);
+ if (ctrlsptr == NULL) {
+ error("Could not allocate memory for ctrl configuration");
+ return (ENOMEM);
+ }
+
+ for (i = 0; i < count; i++) {
+ bzero((void *)&ctrl_conf, sizeof(ctrl_conf));
+
+ /*
+ * 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.
+ */
+ memset((void *)&ctrl_conf.ecc_layout, 0xff,
+ sizeof(ctrl_conf.ecc_layout));
+
+ if (validate_section_config(f, "ctrl", i) != 0) {
+ free(ctrlsptr);
+ return (EINVAL);
+ }
+
+ if (parse_section(f, "ctrl", i) != 0) {
+ free(ctrlsptr);
+ return (EINVAL);
+ }
+
+ memcpy(&ctrlsptr[i], &ctrl_conf, sizeof(ctrl_conf));
+ /* Try to create ctrl with config parsed */
+ debug("NUM=%d\nNUM_CS=%d\nECC=%d\nFILENAME=%s\nECC_LAYOUT[0]"
+ "=%d\nECC_LAYOUT[1]=%d\n\n",
+ ctrlsptr[i].num, ctrlsptr[i].num_cs, ctrlsptr[i].ecc,
+ ctrlsptr[i].filename, ctrlsptr[i].ecc_layout[0],
+ ctrlsptr[i].ecc_layout[1]);
+ }
+ *cnt = count;
+ *ctrls = ctrlsptr;
+ return (0);
+}
+
+static void
+destroy_ctrls(struct sim_ctrl *ctrls)
+{
+
+ free(ctrls);
+}
+
+static int
+create_chips(struct rcfile *f, struct sim_chip **chips, int *cnt)
+{
+ struct sim_chip *chipsptr;
+ int count, i;
+
+ count = rc_getsectionscount(f, "chip");
+ if (count > (MAX_CTRL_CS * MAX_SIM_DEV)) {
+ error("Too many chip sections specified(%d)", count);
+ return (ENOTSUP);
+ } else if (count == 0) {
+ error("No chip sections specified");
+ return (ENOENT);
+ }
+
+ chipsptr = (struct sim_chip *)malloc(sizeof(struct sim_chip) * count);
+ if (chipsptr == NULL) {
+ error("Could not allocate memory for chip configuration");
+ return (ENOMEM);
+ }
+
+ for (i = 0; i < count; i++) {
+ bzero((void *)&chip_conf, sizeof(chip_conf));
+
+ /*
+ * 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.
+ */
+ memset((void *)&chip_conf.bad_block_map, 0xff,
+ sizeof(chip_conf.bad_block_map));
+
+ if (validate_section_config(f, "chip", i) != 0) {
+ free(chipsptr);
+ return (EINVAL);
+ }
+
+ if (parse_section(f, "chip", i) != 0) {
+ free(chipsptr);
+ return (EINVAL);
+ }
+
+ memcpy(&chipsptr[i], &chip_conf, sizeof(chip_conf));
+
+ /* Try to create chip with config parsed */
+ debug("CHIP:\nNUM=%d\nCTRL_NUM=%d\nDEVID=%d\nMANID=%d\n"
+ "PAGE_SZ=%d\nOOBSZ=%d\nREAD_T=%d\nDEVMODEL=%s\n"
+ "MAN=%s\nCOLADDRCYCLES=%d\nROWADDRCYCLES=%d\nCHWIDTH=%d\n"
+ "PGS/BLK=%d\nBLK/LUN=%d\nLUNS=%d\nERR_RATIO=%d\n"
+ "WEARLEVEL=%d\nISWP=%d\n\n\n\n",
+ chipsptr[i].num, chipsptr[i].ctrl_num,
+ chipsptr[i].device_id, chipsptr[i].manufact_id,
+ chipsptr[i].page_size, chipsptr[i].oob_size,
+ chipsptr[i].read_time, chipsptr[i].device_model,
+ chipsptr[i].manufacturer, chipsptr[i].col_addr_cycles,
+ chipsptr[i].row_addr_cycles, chipsptr[i].width,
+ chipsptr[i].pgs_per_blk, chipsptr[i].blks_per_lun,
+ chipsptr[i].luns, chipsptr[i].error_ratio,
+ chipsptr[i].wear_level, chipsptr[i].is_wp);
+ }
+ *cnt = count;
+ *chips = chipsptr;
+ return (0);
+}
+
+static void
+destroy_chips(struct sim_chip *chips)
+{
+
+ free(chips);
+}
+
+int
+parse_config(char *cfgfname, const char *devfname)
+{
+ int err = 0, fd;
+ unsigned int chipsectionscnt, ctrlsectionscnt, i;
+ struct rcfile *f;
+ struct sim_chip *chips;
+ struct sim_ctrl *ctrls;
+
+ err = rc_open(cfgfname, "r", &f);
+ if (err) {
+ error("could not open configuration file (%s)", cfgfname);
+ return (EX_NOINPUT);
+ }
+
+ /* First, try to configure simulator itself. */
+ if (configure_sim(devfname, f) != EX_OK) {
+ rc_close(f);
+ return (EINVAL);
+ }
+
+ debug("SIM CONFIGURED!\n");
+ /* Then create controllers' configs */
+ if (create_ctrls(f, &ctrls, &ctrlsectionscnt) != 0) {
+ rc_close(f);
+ return (ENXIO);
+ }
+ debug("CTRLS CONFIG READ!\n");
+
+ /* Then create chips' configs */
+ if (create_chips(f, &chips, &chipsectionscnt) != 0) {
+ destroy_ctrls(ctrls);
+ rc_close(f);
+ return (ENXIO);
+ }
+ debug("CHIPS CONFIG READ!\n");
+
+ if (validate_ctrls(ctrls, ctrlsectionscnt) != 0) {
+ destroy_ctrls(ctrls);
+ destroy_chips(chips);
+ rc_close(f);
+ return (EX_SOFTWARE);
+ }
+ if (validate_chips(chips, chipsectionscnt, ctrls,
+ ctrlsectionscnt) != 0) {
+ destroy_ctrls(ctrls);
+ destroy_chips(chips);
+ rc_close(f);
+ return (EX_SOFTWARE);
+ }
+
+ /* Open device */
+ fd = open(devfname, O_RDWR);
+ if (fd == -1) {
+ error("could not open simulator device file (%s)!",
+ devfname);
+ rc_close(f);
+ destroy_chips(chips);
+ destroy_ctrls(ctrls);
+ return (EX_OSFILE);
+ }
+
+ debug("SIM CONFIG STARTED!\n");
+
+ /* At this stage, both ctrls' and chips' configs should be valid */
+ for (i = 0; i < ctrlsectionscnt; i++) {
+ err = ioctl(fd, NANDSIM_CREATE_CTRL, &ctrls[i]);
+ if (err) {
+ if (err == EEXIST)
+ error("Controller#%d already created\n",
+ ctrls[i].num);
+ else if (err == EINVAL)
+ error("Incorrect controler number (%d)\n",
+ ctrls[i].num);
+ else
+ error("Could not created controller#%d\n",
+ ctrls[i].num);
+ /* Errors during controller creation stops parsing */
+ close(fd);
+ rc_close(f);
+ destroy_ctrls(ctrls);
+ destroy_chips(chips);
+ return (ENXIO);
+ }
+ debug("CTRL#%d CONFIG STARTED!\n", i);
+ }
+
+ for (i = 0; i < chipsectionscnt; i++) {
+ err = ioctl(fd, NANDSIM_CREATE_CHIP, &chips[i]);
+ if (err) {
+ if (err == EEXIST)
+ error("Chip#%d for controller#%d already "
+ "created\n", chips[i].num,
+ chips[i].ctrl_num);
+ else if (err == EINVAL)
+ error("Incorrect chip number (%d:%d)\n",
+ chips[i].num, chips[i].ctrl_num);
+ else
+ error("Could not create chip (%d:%d)\n",
+ chips[i].num, chips[i].ctrl_num);
+ error("Could not start chip#%d\n", i);
+ destroy_chips(chips);
+ destroy_ctrls(ctrls);
+ close(fd);
+ rc_close(f);
+ return (ENXIO);
+ }
+ }
+ debug("CHIPS CONFIG STARTED!\n");
+
+ close(fd);
+ rc_close(f);
+ destroy_chips(chips);
+ destroy_ctrls(ctrls);
+ return (0);
+}
+
+/*
+ * Function tries to get appropriate value for given key, convert it to
+ * array of ints (of given size), and perform all the neccesary checks and
+ * conversions.
+ */
+static int
+get_argument_intarray(const char *sect_name, int sectno,
+ struct nandsim_key *key, struct rcfile *f)
+{
+ char strbuf[STRBUFSIZ];
+ int *intbuf;
+ int getres;
+ uint32_t cnt, i = 0;
+
+ getres = rc_getstring(f, sect_name, sectno, key->keyname, STRBUFSIZ,
+ (char *)&strbuf);
+
+ if (getres != 0) {
+ if (key->mandatory != 0) {
+ error(MSG_MANDATORYKEYMISSING, key->keyname,
+ sect_name);
+ return (EINVAL);
+ } else
+ /* Non-mandatory key, not present -- skip */
+ return (0);
+ }
+ cnt = parse_intarray((char *)&strbuf, &intbuf);
+ cnt = (cnt <= key->maxlength) ? cnt : key->maxlength;
+
+ for (i = 0; i < cnt; i++) {
+ if (SIZE(key->valuetype) == SIZE_8)
+ *((uint8_t *)(key->field) + i) =
+ (uint8_t)intbuf[i];
+ else if (SIZE(key->valuetype) == SIZE_16)
+ *((uint16_t *)(key->field) + i) =
+ (uint16_t)intbuf[i];
+ else
+ *((uint32_t *)(key->field) + i) =
+ (uint32_t)intbuf[i];
+ }
+ free(intbuf);
+ return (0);
+}
+
+/*
+ * Function tries to get appropriate value for given key, convert it to
+ * int of certain length.
+ */
+static int
+get_argument_int(const char *sect_name, int sectno, struct nandsim_key *key,
+ struct rcfile *f)
+{
+ int getres;
+ uint32_t val;
+
+ getres = rc_getint(f, sect_name, sectno, key->keyname, &val);
+ if (getres != 0) {
+
+ if (key->mandatory != 0) {
+ error(MSG_MANDATORYKEYMISSING, key->keyname,
+ sect_name);
+
+ return (EINVAL);
+ } else
+ /* Non-mandatory key, not present -- skip */
+ return (0);
+ }
+ if (SIZE(key->valuetype) == SIZE_8)
+ *(uint8_t *)(key->field) = (uint8_t)val;
+ else if (SIZE(key->valuetype) == SIZE_16)
+ *(uint16_t *)(key->field) = (uint16_t)val;
+ else
+ *(uint32_t *)(key->field) = (uint32_t)val;
+ return (0);
+}
+
+/* Function tries to get string value for given key */
+static int
+get_argument_string(const char *sect_name, int sectno,
+ struct nandsim_key *key, struct rcfile *f)
+{
+ char strbuf[STRBUFSIZ];
+ int getres;
+
+ getres = rc_getstring(f, sect_name, sectno, key->keyname, STRBUFSIZ,
+ strbuf);
+
+ if (getres != 0) {
+ if (key->mandatory != 0) {
+ error(MSG_MANDATORYKEYMISSING, key->keyname,
+ sect_name);
+ return (1);
+ } else
+ /* Non-mandatory key, not present -- skip */
+ return (0);
+ }
+ strncpy(key->field, (char *)&strbuf, (size_t)(key->maxlength - 1));
+ return (0);
+}
+
+/* Function tries to get on/off value for given key */
+static int
+get_argument_bool(const char *sect_name, int sectno, struct nandsim_key *key,
+ struct rcfile *f)
+{
+ int getres, val;
+
+ getres = rc_getbool(f, sect_name, sectno, key->keyname, &val);
+ if (getres != 0) {
+ if (key->mandatory != 0) {
+ error(MSG_MANDATORYKEYMISSING, key->keyname,
+ sect_name);
+ return (1);
+ } else
+ /* Non-mandatory key, not present -- skip */
+ return (0);
+ }
+ *(uint8_t *)key->field = (uint8_t)val;
+ return (0);
+}
+
+int
+parse_section(struct rcfile *f, const char *sect_name, int sectno)
+{
+ struct nandsim_key *key;
+ struct nandsim_section *sect = (struct nandsim_section *)&sections;
+ int getres = 0;
+
+ while (1) {
+ if (sect == NULL)
+ return (EINVAL);
+
+ if (strcmp(sect->name, sect_name) == 0)
+ break;
+ else
+ sect++;
+ }
+ key = sect->keys;
+ do {
+ debug("->Section: %s, Key: %s, type: %d, size: %d",
+ sect_name, key->keyname, TYPE(key->valuetype),
+ SIZE(key->valuetype)/2);
+
+ switch (TYPE(key->valuetype)) {
+ case VALUE_UINT:
+ /* Single int value */
+ getres = get_argument_int(sect_name, sectno, key, f);
+
+ if (getres != 0)
+ return (getres);
+
+ break;
+ case VALUE_UINTARRAY:
+ /* Array of ints */
+ getres = get_argument_intarray(sect_name,
+ sectno, key, f);
+
+ if (getres != 0)
+ return (getres);
+
+ break;
+ case VALUE_STRING:
+ /* Array of chars */
+ getres = get_argument_string(sect_name, sectno, key,
+ f);
+
+ if (getres != 0)
+ return (getres);
+
+ break;
+ case VALUE_BOOL:
+ /* Boolean value (true/false/on/off/yes/no) */
+ getres = get_argument_bool(sect_name, sectno, key,
+ f);
+
+ if (getres != 0)
+ return (getres);
+
+ break;
+ }
+ } while ((++key)->keyname != NULL);
+
+ return (0);
+}
+
+static uint8_t
+validate_chips(struct sim_chip *chips, int chipcnt,
+ struct sim_ctrl *ctrls, int ctrlcnt)
+{
+ int cchipcnt, i, width, j, id, max;
+
+ cchipcnt = chipcnt;
+ for (chipcnt -= 1; chipcnt >= 0; chipcnt--) {
+ if (chips[chipcnt].num >= MAX_CTRL_CS) {
+ error("chip no. too high (%d)!!\n",
+ chips[chipcnt].num);
+ return (EINVAL);
+ }
+
+ if (chips[chipcnt].ctrl_num >= MAX_SIM_DEV) {
+ error("controller no. too high (%d)!!\n",
+ chips[chipcnt].ctrl_num);
+ return (EINVAL);
+ }
+
+ if (chips[chipcnt].width != 8 &&
+ chips[chipcnt].width != 16) {
+ error("invalid width:%d for chip#%d",
+ chips[chipcnt].width, chips[chipcnt].num);
+ return (EINVAL);
+ }
+
+ /* Check if page size is > 512 and if its power of 2 */
+ if (chips[chipcnt].page_size < 512 ||
+ (chips[chipcnt].page_size &
+ (chips[chipcnt].page_size - 1)) != 0) {
+ error("invalid page size:%d for chip#%d at ctrl#%d!!"
+ "\n", chips[chipcnt].page_size,
+ chips[chipcnt].num,
+ chips[chipcnt].ctrl_num);
+ return (EINVAL);
+ }
+
+ /* Check if controller no. ctrl_num is configured */
+ for (i = 0, id = -1; i < ctrlcnt && id == -1; i++)
+ if (ctrls[i].num == chips[chipcnt].ctrl_num)
+ id = i;
+
+ if (i == ctrlcnt && id == -1) {
+ error("Missing configuration for controller %d"
+ " (at least one chip is connected to it)",
+ chips[chipcnt].ctrl_num);
+ return (EINVAL);
+ } else {
+ /*
+ * Controller is configured -> check oob_size
+ * validity
+ */
+ i = 0;
+ max = ctrls[id].ecc_layout[0];
+ while (i < MAX_ECC_BYTES &&
+ ctrls[id].ecc_layout[i] != 0xffff) {
+
+ if (ctrls[id].ecc_layout[i] > max)
+ max = ctrls[id].ecc_layout[i];
+ i++;
+ }
+
+ if (chips[chipcnt].oob_size < (unsigned)i) {
+ error("OOB size for chip#%d at ctrl#%d is "
+ "smaller than ecc layout length!",
+ chips[chipcnt].num,
+ chips[chipcnt].ctrl_num);
+ exit(EINVAL);
+ }
+
+ if (chips[chipcnt].oob_size < (unsigned)max) {
+ error("OOB size for chip#%d at ctrl#%d is "
+ "smaller than maximal ecc position in "
+ "defined layout!", chips[chipcnt].num,
+ chips[chipcnt].ctrl_num);
+ exit(EINVAL);
+ }
+
+
+ }
+
+ if ((chips[chipcnt].erase_time < DELAYTIME_MIN ||
+ chips[chipcnt].erase_time > DELAYTIME_MAX) &&
+ chips[chipcnt].erase_time != 0) {
+ error("Invalid erase time value for chip#%d at "
+ "ctrl#%d",
+ chips[chipcnt].num,
+ chips[chipcnt].ctrl_num);
+ return (EINVAL);
+ }
+
+ if ((chips[chipcnt].prog_time < DELAYTIME_MIN ||
+ chips[chipcnt].prog_time > DELAYTIME_MAX) &&
+ chips[chipcnt].prog_time != 0) {
+ error("Invalid prog time value for chip#%d at "
+ "ctr#%d!",
+ chips[chipcnt].num,
+ chips[chipcnt].ctrl_num);
+ return (EINVAL);
+ }
+
+ if ((chips[chipcnt].read_time < DELAYTIME_MIN ||
+ chips[chipcnt].read_time > DELAYTIME_MAX) &&
+ chips[chipcnt].read_time != 0) {
+ error("Invalid read time value for chip#%d at "
+ "ctrl#%d!",
+ chips[chipcnt].num,
+ chips[chipcnt].ctrl_num);
+ return (EINVAL);
+ }
+ }
+ /* Check if chips attached to the same controller, have same width */
+ for (i = 0; i < ctrlcnt; i++) {
+ width = -1;
+ for (j = 0; j < cchipcnt; j++) {
+ if (chips[j].ctrl_num == i) {
+ if (width == -1) {
+ width = chips[j].width;
+ } else {
+ if (width != chips[j].width) {
+ error("Chips attached to "
+ "ctrl#%d have different "
+ "widths!\n", i);
+ return (EINVAL);
+ }
+ }
+ }
+ }
+ }
+
+ return (0);
+}
+
+static uint8_t
+validate_ctrls(struct sim_ctrl *ctrl, int ctrlcnt)
+{
+ for (ctrlcnt -= 1; ctrlcnt >= 0; ctrlcnt--) {
+ if (ctrl[ctrlcnt].num > MAX_SIM_DEV) {
+ error("Controller no. too high (%d)!!\n",
+ ctrl[ctrlcnt].num);
+ return (EINVAL);
+ }
+ if (ctrl[ctrlcnt].num_cs > MAX_CTRL_CS) {
+ error("Too many CS (%d)!!\n", ctrl[ctrlcnt].num_cs);
+ return (EINVAL);
+ }
+ if (ctrl[ctrlcnt].ecc != 0 && ctrl[ctrlcnt].ecc != 1) {
+ error("ECC is set to neither 0 nor 1 !\n");
+ return (EINVAL);
+ }
+ }
+
+ return (0);
+}
+
+static int validate_section_config(struct rcfile *f, const char *sect_name,
+ int sectno)
+{
+ struct nandsim_key *key;
+ struct nandsim_section *sect;
+ char **keys_tbl;
+ int i, match;
+
+ for (match = 0, sect = (struct nandsim_section *)&sections;
+ sect != NULL; sect++) {
+ if (strcmp(sect->name, sect_name) == 0) {
+ match = 1;
+ break;
+ }
+ }
+
+ if (match == 0)
+ return (EINVAL);
+
+ keys_tbl = rc_getkeys(f, sect_name, sectno);
+ if (keys_tbl == NULL)
+ return (ENOMEM);
+
+ for (i = 0; keys_tbl[i] != NULL; i++) {
+ key = sect->keys;
+ match = 0;
+ do {
+ if (strcmp(keys_tbl[i], key->keyname) == 0) {
+ match = 1;
+ break;
+ }
+ } while ((++key)->keyname != NULL);
+
+ if (match == 0) {
+ error("Invalid key in config file: %s\n", keys_tbl[i]);
+ free(keys_tbl);
+ return (EINVAL);
+ }
+ }
+
+ free(keys_tbl);
+ return (0);
+}
diff --git a/usr.sbin/nandsim/nandsim_cfgparse.h b/usr.sbin/nandsim/nandsim_cfgparse.h
new file mode 100644
index 000000000000..b9c642a3e9d1
--- /dev/null
+++ b/usr.sbin/nandsim/nandsim_cfgparse.h
@@ -0,0 +1,86 @@
+/*-
+ * Copyright (C) 2009-2012 Semihalf
+ * 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 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 _NANDSIM_CONFPARSER_H_
+#define _NANDSIM_CONFPARSER_H_
+
+#define VALUE_UINT 0x08
+#define VALUE_INT 0x10
+#define VALUE_UINTARRAY 0x18
+#define VALUE_INTARRAY 0x20
+#define VALUE_STRING 0x28
+#define VALUE_CHAR 0x40
+#define VALUE_BOOL 0x48
+
+#define SIZE_8 0x01
+#define SIZE_16 0x02
+#define SIZE_32 0x04
+
+#include "nandsim_rcfile.h"
+
+/*
+ * keyname = name of a key,
+ * mandatory = is key mandatory in section belonging to, 0=false 1=true
+ * valuetype = what kind of value is assigned to that key, e.g.
+ * VALUE_UINT | SIZE_8 -- unsigned uint size 8 bits;
+ * VALUE_UINTARRAY | SIZE_8 -- array of uints 8-bit long;
+ * VALUE_BOOL -- 'on', 'off','true','false','yes' or 'no'
+ * literals;
+ * VALUE_STRING -- strings
+ * field = ptr to the field that should hold value for parsed value
+ * maxlength = contains maximum length of an array (used only with either
+ * VALUE_STRING or VALUE_(U)INTARRAY value types.
+ */
+struct nandsim_key {
+ const char *keyname;
+ uint8_t mandatory;
+ uint8_t valuetype;
+ void *field;
+ uint32_t maxlength;
+};
+struct nandsim_section {
+ const char *name;
+ struct nandsim_key *keys;
+};
+
+struct nandsim_config {
+ struct sim_param **simparams;
+ struct sim_chip **simchips;
+ struct sim_ctrl **simctrls;
+ int chipcnt;
+ int ctrlcnt;
+};
+
+int parse_intarray(char *, int **);
+int parse_config(char *, const char *);
+int parse_section(struct rcfile *, const char *, int);
+int compare_configs(struct nandsim_config *, struct nandsim_config *);
+int convert_argint(char *, int *);
+int convert_arguint(char *, unsigned int *);
+
+#endif /* _NANDSIM_CONFPARSER_H_ */
diff --git a/usr.sbin/nandsim/nandsim_rcfile.c b/usr.sbin/nandsim/nandsim_rcfile.c
new file mode 100644
index 000000000000..0f99e7b001e2
--- /dev/null
+++ b/usr.sbin/nandsim/nandsim_rcfile.c
@@ -0,0 +1,440 @@
+/*
+ * Copyright (c) 1999, Boris Popov
+ * 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 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.
+ *
+ * from: FreeBSD: src/lib/libncp/ncpl_rcfile.c,v 1.5 2007/01/09 23:27:39 imp Exp
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+#include <sys/types.h>
+#include <sys/queue.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <pwd.h>
+#include <unistd.h>
+
+#include "nandsim_rcfile.h"
+
+SLIST_HEAD(rcfile_head, rcfile);
+static struct rcfile_head pf_head = {NULL};
+static struct rcsection *rc_findsect(struct rcfile *rcp,
+ const char *sectname, int sect_id);
+static struct rcsection *rc_addsect(struct rcfile *rcp,
+ const char *sectname);
+static int rc_sect_free(struct rcsection *rsp);
+static struct rckey *rc_sect_findkey(struct rcsection *rsp,
+ const char *keyname);
+static struct rckey *rc_sect_addkey(struct rcsection *rsp, const char *name,
+ char *value);
+static void rc_key_free(struct rckey *p);
+static void rc_parse(struct rcfile *rcp);
+
+static struct rcfile* rc_find(const char *filename);
+
+/*
+ * open rcfile and load its content, if already open - return previous handle
+ */
+int
+rc_open(const char *filename, const char *mode,struct rcfile **rcfile)
+{
+ struct rcfile *rcp;
+ FILE *f;
+ rcp = rc_find(filename);
+ if (rcp) {
+ *rcfile = rcp;
+ return (0);
+ }
+ f = fopen (filename, mode);
+ if (f == NULL)
+ return errno;
+ rcp = malloc(sizeof(struct rcfile));
+ if (rcp == NULL) {
+ fclose(f);
+ return ENOMEM;
+ }
+ bzero(rcp, sizeof(struct rcfile));
+ rcp->rf_name = strdup(filename);
+ rcp->rf_f = f;
+ SLIST_INSERT_HEAD(&pf_head, rcp, rf_next);
+ rc_parse(rcp);
+ *rcfile = rcp;
+ return (0);
+}
+
+int
+rc_close(struct rcfile *rcp)
+{
+ struct rcsection *p,*n;
+
+ fclose(rcp->rf_f);
+ for (p = SLIST_FIRST(&rcp->rf_sect); p; ) {
+ n = p;
+ p = SLIST_NEXT(p,rs_next);
+ rc_sect_free(n);
+ }
+ free(rcp->rf_name);
+ SLIST_REMOVE(&pf_head, rcp, rcfile, rf_next);
+ free(rcp);
+ return (0);
+}
+
+static struct rcfile*
+rc_find(const char *filename)
+{
+ struct rcfile *p;
+
+ SLIST_FOREACH(p, &pf_head, rf_next)
+ if (strcmp (filename, p->rf_name) == 0)
+ return (p);
+ return (0);
+}
+
+/* Find section with given name and id */
+static struct rcsection *
+rc_findsect(struct rcfile *rcp, const char *sectname, int sect_id)
+{
+ struct rcsection *p;
+
+ SLIST_FOREACH(p, &rcp->rf_sect, rs_next)
+ if (strcmp(p->rs_name, sectname) == 0 && p->rs_id == sect_id)
+ return (p);
+ return (NULL);
+}
+
+static struct rcsection *
+rc_addsect(struct rcfile *rcp, const char *sectname)
+{
+ struct rcsection *p;
+ int id = 0;
+ p = rc_findsect(rcp, sectname, 0);
+ if (p) {
+ /*
+ * If section with that name already exists -- add one more,
+ * same named, but with different id (higher by one)
+ */
+ while (p != NULL) {
+ id = p->rs_id + 1;
+ p = rc_findsect(rcp, sectname, id);
+ }
+ }
+ p = malloc(sizeof(*p));
+ if (!p)
+ return (NULL);
+ p->rs_name = strdup(sectname);
+ p->rs_id = id;
+ SLIST_INIT(&p->rs_keys);
+ SLIST_INSERT_HEAD(&rcp->rf_sect, p, rs_next);
+ return (p);
+}
+
+static int
+rc_sect_free(struct rcsection *rsp)
+{
+ struct rckey *p,*n;
+
+ for (p = SLIST_FIRST(&rsp->rs_keys); p; ) {
+ n = p;
+ p = SLIST_NEXT(p,rk_next);
+ rc_key_free(n);
+ }
+ free(rsp->rs_name);
+ free(rsp);
+ return (0);
+}
+
+static struct rckey *
+rc_sect_findkey(struct rcsection *rsp, const char *keyname)
+{
+ struct rckey *p;
+
+ SLIST_FOREACH(p, &rsp->rs_keys, rk_next)
+ if (strcmp(p->rk_name, keyname)==0)
+ return (p);
+ return (NULL);
+}
+
+static struct rckey *
+rc_sect_addkey(struct rcsection *rsp, const char *name, char *value)
+{
+ struct rckey *p;
+ p = rc_sect_findkey(rsp, name);
+ if (p) {
+ free(p->rk_value);
+ } else {
+ p = malloc(sizeof(*p));
+ if (!p)
+ return (NULL);
+ SLIST_INSERT_HEAD(&rsp->rs_keys, p, rk_next);
+ p->rk_name = strdup(name);
+ }
+ p->rk_value = value ? strdup(value) : strdup("");
+ return (p);
+}
+
+static void
+rc_key_free(struct rckey *p)
+{
+ free(p->rk_value);
+ free(p->rk_name);
+ free(p);
+}
+
+enum { stNewLine, stHeader, stSkipToEOL, stGetKey, stGetValue};
+
+static void
+rc_parse(struct rcfile *rcp)
+{
+ FILE *f = rcp->rf_f;
+ int state = stNewLine, c;
+ struct rcsection *rsp = NULL;
+ struct rckey *rkp = NULL;
+ char buf[2048];
+ char *next = buf, *last = &buf[sizeof(buf)-1];
+
+ while ((c = getc (f)) != EOF) {
+ if (c == '\r')
+ continue;
+ if (state == stNewLine) {
+ next = buf;
+ if (isspace(c))
+ continue; /* skip leading junk */
+ if (c == '[') {
+ state = stHeader;
+ rsp = NULL;
+ continue;
+ }
+ if (c == '#' || c == ';') {
+ state = stSkipToEOL;
+ } else { /* something meaningful */
+ state = stGetKey;
+ }
+ }
+ if (state == stSkipToEOL || next == last) {/* ignore long lines */
+ if (c == '\n') {
+ state = stNewLine;
+ next = buf;
+ }
+ continue;
+ }
+ if (state == stHeader) {
+ if (c == ']') {
+ *next = 0;
+ next = buf;
+ rsp = rc_addsect(rcp, buf);
+ state = stSkipToEOL;
+ } else
+ *next++ = c;
+ continue;
+ }
+ if (state == stGetKey) {
+ if (c == ' ' || c == '\t')/* side effect: 'key name='*/
+ continue; /* become 'keyname=' */
+ if (c == '\n') { /* silently ignore ... */
+ state = stNewLine;
+ continue;
+ }
+ if (c != '=') {
+ *next++ = c;
+ continue;
+ }
+ *next = 0;
+ if (rsp == NULL) {
+ fprintf(stderr, "Key '%s' defined before "
+ "section\n", buf);
+ state = stSkipToEOL;
+ continue;
+ }
+ rkp = rc_sect_addkey(rsp, buf, NULL);
+ next = buf;
+ state = stGetValue;
+ continue;
+ }
+ /* only stGetValue left */
+ if (state != stGetValue) {
+ fprintf(stderr, "Well, I can't parse file "
+ "'%s'\n",rcp->rf_name);
+ state = stSkipToEOL;
+ }
+ if (c != '\n') {
+ *next++ = c;
+ continue;
+ }
+ *next = 0;
+ rkp->rk_value = strdup(buf);
+ state = stNewLine;
+ rkp = NULL;
+ } /* while */
+ if (c == EOF && state == stGetValue) {
+ *next = 0;
+ rkp->rk_value = strdup(buf);
+ }
+}
+
+int
+rc_getstringptr(struct rcfile *rcp, const char *section, int sect_id,
+ const char *key, char **dest)
+{
+ struct rcsection *rsp;
+ struct rckey *rkp;
+
+ *dest = NULL;
+ rsp = rc_findsect(rcp, section, sect_id);
+ if (!rsp)
+ return (ENOENT);
+ rkp = rc_sect_findkey(rsp,key);
+ if (!rkp)
+ return (ENOENT);
+ *dest = rkp->rk_value;
+ return (0);
+}
+
+int
+rc_getstring(struct rcfile *rcp, const char *section, int sect_id,
+ const char *key, unsigned int maxlen, char *dest)
+{
+ char *value;
+ int error;
+
+ error = rc_getstringptr(rcp, section, sect_id, key, &value);
+ if (error)
+ return (error);
+ if (strlen(value) >= maxlen) {
+ fprintf(stderr, "line too long for key '%s' in section '%s',"
+ "max = %d\n",key, section, maxlen);
+ return (EINVAL);
+ }
+ strcpy(dest,value);
+ return (0);
+}
+
+int
+rc_getint(struct rcfile *rcp, const char *section, int sect_id,
+ const char *key, int *value)
+{
+ struct rcsection *rsp;
+ struct rckey *rkp;
+
+ rsp = rc_findsect(rcp, section, sect_id);
+ if (!rsp)
+ return (ENOENT);
+ rkp = rc_sect_findkey(rsp,key);
+ if (!rkp)
+ return (ENOENT);
+ errno = 0;
+ *value = strtol(rkp->rk_value,NULL,0);
+ if (errno) {
+ fprintf(stderr, "invalid int value '%s' for key '%s' in "
+ "section '%s'\n",rkp->rk_value,key,section);
+ return (errno);
+ }
+ return (0);
+}
+
+/*
+ * 1,yes,true
+ * 0,no,false
+ */
+int
+rc_getbool(struct rcfile *rcp, const char *section, int sect_id,
+ const char *key, int *value)
+{
+ struct rcsection *rsp;
+ struct rckey *rkp;
+ char *p;
+
+ rsp = rc_findsect(rcp, section, sect_id);
+ if (!rsp)
+ return (ENOENT);
+ rkp = rc_sect_findkey(rsp,key);
+ if (!rkp)
+ return (ENOENT);
+ p = rkp->rk_value;
+ while (*p && isspace(*p)) p++;
+ if (*p == '0' || strcasecmp(p,"no") == 0 ||
+ strcasecmp(p, "false") == 0 ||
+ strcasecmp(p, "off") == 0) {
+ *value = 0;
+ return (0);
+ }
+ if (*p == '1' || strcasecmp(p,"yes") == 0 ||
+ strcasecmp(p, "true") == 0 ||
+ strcasecmp(p, "on") == 0) {
+ *value = 1;
+ return (0);
+ }
+ fprintf(stderr, "invalid boolean value '%s' for key '%s' in section "
+ "'%s' \n",p, key, section);
+ return (EINVAL);
+}
+
+/* Count how many sections with given name exists in configuration. */
+int rc_getsectionscount(struct rcfile *f, const char *sectname)
+{
+ struct rcsection *p;
+ int count = 0;
+
+ p = rc_findsect(f, sectname, 0);
+ if (p) {
+ while (p != NULL) {
+ count = p->rs_id + 1;
+ p = rc_findsect(f, sectname, count);
+ }
+ return (count);
+ } else
+ return (0);
+}
+
+char **
+rc_getkeys(struct rcfile *rcp, const char *sectname, int sect_id)
+{
+ struct rcsection *rsp;
+ struct rckey *p;
+ char **names_tbl;
+ int i = 0, count = 0;
+
+ rsp = rc_findsect(rcp, sectname, sect_id);
+ if (rsp == NULL)
+ return (NULL);
+
+ SLIST_FOREACH(p, &rsp->rs_keys, rk_next)
+ count++;
+
+ names_tbl = malloc(sizeof(char *) * (count + 1));
+ if (names_tbl == NULL)
+ return (NULL);
+
+ SLIST_FOREACH(p, &rsp->rs_keys, rk_next)
+ names_tbl[i++] = p->rk_name;
+
+ names_tbl[i] = NULL;
+ return (names_tbl);
+}
+
diff --git a/usr.sbin/nandsim/nandsim_rcfile.h b/usr.sbin/nandsim/nandsim_rcfile.h
new file mode 100644
index 000000000000..f5c3ce9ac8c0
--- /dev/null
+++ b/usr.sbin/nandsim/nandsim_rcfile.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 1999, Boris Popov
+ * 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 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$
+ *
+ * from: FreeBSD: src/lib/libncp/ncpl_rcfile.c,v 1.5 2007/01/09 23:27:39 imp Exp
+ */
+
+#ifndef _SIMRC_H_
+#define _SIMRC_H_
+
+#include <sys/queue.h>
+
+struct rckey {
+ SLIST_ENTRY(rckey) rk_next;
+ char *rk_name; /* key name */
+ char *rk_value; /* key value */
+};
+
+struct rcsection {
+ SLIST_ENTRY(rcsection) rs_next;
+ SLIST_HEAD(rckey_head,rckey) rs_keys; /* key list */
+ char *rs_name; /* section name */
+ int rs_id; /* allow few same named */
+};
+
+struct rcfile {
+ SLIST_ENTRY(rcfile) rf_next;
+ SLIST_HEAD(rcsec_head, rcsection) rf_sect; /* sections list */
+ char *rf_name; /* file name */
+ FILE *rf_f; /* file desc */
+};
+
+int rc_open(const char *, const char *,struct rcfile **);
+int rc_close(struct rcfile *);
+int rc_getstringptr(struct rcfile *, const char *, int, const char *,
+ char **);
+int rc_getstring(struct rcfile *, const char *, int, const char *,
+ unsigned int, char *);
+int rc_getint(struct rcfile *, const char *, int, const char *, int *);
+int rc_getbool(struct rcfile *, const char *, int, const char *, int *);
+int rc_getsectionscount(struct rcfile *, const char *);
+char **rc_getkeys(struct rcfile *, const char *, int);
+
+#endif /* _SIMRC_H_ */
diff --git a/usr.sbin/nandsim/sample.conf b/usr.sbin/nandsim/sample.conf
new file mode 100644
index 000000000000..bc534e109fe5
--- /dev/null
+++ b/usr.sbin/nandsim/sample.conf
@@ -0,0 +1,174 @@
+#-
+# Copyright (C) 2009-2012 Semihalf
+# 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$
+
+#
+# Sample NANDsim configuration file.
+#
+
+#############################################################################
+#
+# [sim] General (common) simulator configuration section.
+#
+[sim]
+# log_level=0..255
+log_level=11
+
+# log_output=[none, console, ram, file]
+#
+# When log_output=file is specified, each [ctrl] section must have a
+# corresponding 'log_filename' field provided, which specifies log file name
+# to be used.
+log_output=none
+
+#############################################################################
+#
+# [ctrl] Controller configuration section.
+#
+# There can be a number of controllers defined for simulation, each has a
+# dedicated [ctrl] section. With a given controller there are associated
+# subordinate NAND chips, which are tied to chip select lines.
+#
+[ctrl]
+# The number of this controller.
+# ctrl_num=0..3
+ctrl_num=0
+
+# The number of chip selects available at this controller.
+# num_cs=1..4
+num_cs=1
+
+# ECC enable flag.
+# ecc=[on|off]
+ecc=on
+
+# ECC layout. This is the list of byte offsets within OOB area, which comprise
+# the ECC contents set.
+#
+# ecc_layout=[byte1, byte2-byte3, ..byten]
+ecc_layout=[0-53]
+
+# Absolute path to the log file for this controller.
+#log_filename=/var/log/nandsim-ctl0.log
+
+
+#############################################################################
+#
+# [chip] Chip configuration section.
+#
+# There can be a number of individual NAND chip devices defined for
+# simulation, and each has a dedicated [chip] section.
+#
+# A particular chip needs to be associated with its parent NAND controller by
+# specifying the following fields: controller number (chip_ctrl) and the chip
+# select line it is connected to (chip_cs). The chip can be connected to only
+# a single (and unique) controller:cs pair.
+#
+[chip]
+# The number of parent controller. This has to fit one of the controller
+# instance number (ctrl_num from [ctrl] section).
+# chip_ctrl=0..3
+chip_ctrl=0
+
+# Chip select line.
+# chip_cs=0..3
+chip_cs=0
+
+# ONFI device identifier.
+# device_id=0x00..0xff
+device_id=0xd3
+
+# ONFI manufacturer identifier.
+# manufacturer_id=0x00..0xff
+manufacturer_id=0xec
+
+# Textual description of the chip.
+# model="model_name"
+model="k9xxg08uxM:1GiB 3,3V 8-bit"
+
+# Textual name of the chip manufacturer.
+# manufacturer="manufacturer name"
+manufacturer="SAMSUNG"
+
+# page_size=[must be power of 2 and >= 512] (in bytes)
+page_size=2048
+# oob_size=[>0]
+oob_size=64
+# pages_per_block=n*32
+pages_per_block=64
+# blocks_per_lun=[>0]
+blocks_per_lun=4096
+# luns=1..N
+luns=1
+# column_addr_cycle=[1,2]
+column_addr_cycle=2
+# row_addr_cycle=[1,2,3]
+row_addr_cycle=3
+
+# program_time= (in us)
+program_time=0
+# erase_time= (in us)
+erase_time=0
+# read_time= (in us)
+read_time=0
+# ccs_time= (in us)
+#ccs_time=200
+
+# Simulate write-protect on the chip.
+# write_protect=[yes|no]
+#write_protect=no
+
+# Blocks wear-out threshold. Each block has a counter of program-erase cycles;
+# when this counter reaches 'wear_out' value a given block is treated as a bad
+# block (access will report error).
+#
+# Setting wear_out to 0 means that blocks will never wear out.
+#
+# wear_out=0..100000
+wear_out=50000
+
+# Errors per million read/write bytes. This simulates an accidental read/write
+# block error, which can happen in real devices with certain probability. Note
+# this isn't a bad block condition i.e. the block at which the read/write
+# operation is simulated to fail here remains usable, only the operation has
+# not succeeded (this is where ECC comes into play and is supposed to correct
+# such problems).
+#
+# error_ratio=0..1000000
+#error_ratio=50
+
+# Chip data bus width. All chips connected to the same controller must have
+# the same bus width.
+#
+# width=[8|16]
+width=8
+
+# Bad block map. NANDsim emulates bad block behavior upon accessing a block
+# with number from the specified list.
+#
+# bad_block_map=[bad_block1, bad_block2-bad_block3, ..bad_blockn]
+bad_block_map=[100-200]
+
diff --git a/usr.sbin/nandtool/Makefile b/usr.sbin/nandtool/Makefile
new file mode 100644
index 000000000000..ae9de2dcf4f4
--- /dev/null
+++ b/usr.sbin/nandtool/Makefile
@@ -0,0 +1,11 @@
+# $FreeBSD$
+
+PROG= nandtool
+SRCS= nandtool.c nand_read.c nand_write.c nand_erase.c nand_info.c
+SRCS+= nand_readoob.c nand_writeoob.c
+BINDIR= /usr/sbin
+DPADD= ${LIBGEOM}
+LDADD= -lgeom
+MAN= nandtool.8
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/nandtool/nand_erase.c b/usr.sbin/nandtool/nand_erase.c
new file mode 100644
index 000000000000..50bfaa65ce69
--- /dev/null
+++ b/usr.sbin/nandtool/nand_erase.c
@@ -0,0 +1,114 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/disk.h>
+#include <libgeom.h>
+#include <dev/nand/nand_dev.h>
+#include "nandtool.h"
+
+int nand_erase(struct cmd_param *params)
+{
+ struct chip_param_io chip_params;
+ char *dev;
+ int fd = -1, ret = 0;
+ off_t pos, count;
+ off_t start, nblocks, i;
+ int block_size, mult;
+
+ if (!(dev = param_get_string(params, "dev"))) {
+ fprintf(stderr, "Please supply valid 'dev' parameter.\n");
+ return (1);
+ }
+
+ if (param_has_value(params, "count"))
+ count = param_get_intx(params, "count");
+ else
+ count = 1;
+
+ if ((fd = g_open(dev, 1)) < 0) {
+ perrorf("Cannot open %s", dev);
+ return (1);
+ }
+
+ if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) {
+ perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)");
+ ret = 1;
+ goto out;
+ }
+
+ block_size = chip_params.page_size * chip_params.pages_per_block;
+
+ if (param_has_value(params, "page")) {
+ pos = chip_params.page_size * param_get_intx(params, "page");
+ mult = chip_params.page_size;
+ } else if (param_has_value(params, "block")) {
+ pos = block_size * param_get_intx(params, "block");
+ mult = block_size;
+ } else if (param_has_value(params, "pos")) {
+ pos = param_get_intx(params, "pos");
+ mult = 1;
+ } else {
+ /* Erase whole chip */
+ if (ioctl(fd, DIOCGMEDIASIZE, &count) == -1) {
+ ret = 1;
+ goto out;
+ }
+
+ pos = 0;
+ mult = 1;
+ }
+
+ if (pos % block_size) {
+ fprintf(stderr, "Position must be block-size aligned!\n");
+ ret = 1;
+ goto out;
+ }
+
+ count *= mult;
+ start = pos / block_size;
+ nblocks = count / block_size;
+
+ for (i = 0; i < nblocks; i++) {
+ if (g_delete(fd, (start + i) * block_size, block_size) == -1) {
+ perrorf("Cannot erase block %d - probably a bad block",
+ start + i);
+ ret = 1;
+ }
+ }
+
+out:
+ g_close(fd);
+
+ return (ret);
+}
+
diff --git a/usr.sbin/nandtool/nand_info.c b/usr.sbin/nandtool/nand_info.c
new file mode 100644
index 000000000000..38fe010ae07c
--- /dev/null
+++ b/usr.sbin/nandtool/nand_info.c
@@ -0,0 +1,86 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <libgeom.h>
+#include <sys/disk.h>
+#include <dev/nand/nand_dev.h>
+#include "nandtool.h"
+
+int nand_info(struct cmd_param *params)
+{
+ struct chip_param_io chip_params;
+ int fd = -1, ret = 0;
+ int block_size;
+ off_t chip_size, media_size;
+ const char *dev;
+
+ if ((dev = param_get_string(params, "dev")) == NULL) {
+ fprintf(stderr, "Please supply 'dev' parameter, eg. "
+ "'dev=/dev/gnand0'\n");
+ return (1);
+ }
+
+ if ((fd = g_open(dev, 1)) == -1) {
+ perrorf("Cannot open %s", dev);
+ return (1);
+ }
+
+ if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) {
+ perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)");
+ ret = 1;
+ goto out;
+ }
+
+ if (ioctl(fd, DIOCGMEDIASIZE, &media_size) == -1) {
+ perrorf("Cannot ioctl(DIOCGMEDIASIZE)");
+ ret = 1;
+ goto out;
+ }
+
+ block_size = chip_params.page_size * chip_params.pages_per_block;
+ chip_size = block_size * chip_params.blocks;
+
+ printf("Device:\t\t\t%s\n", dev);
+ printf("Page size:\t\t%d bytes\n", chip_params.page_size);
+ printf("Block size:\t\t%d bytes (%d KB)\n", block_size,
+ block_size / 1024);
+ printf("OOB size per page:\t%d bytes\n", chip_params.oob_size);
+ printf("Chip size:\t\t%jd MB\n", (uintmax_t)(chip_size / 1024 / 1024));
+ printf("Slice size:\t\t%jd MB\n",
+ (uintmax_t)(media_size / 1024 / 1024));
+
+out:
+ g_close(fd);
+
+ return (ret);
+}
diff --git a/usr.sbin/nandtool/nand_read.c b/usr.sbin/nandtool/nand_read.c
new file mode 100644
index 000000000000..5267b7d1c9b5
--- /dev/null
+++ b/usr.sbin/nandtool/nand_read.c
@@ -0,0 +1,139 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <libgeom.h>
+#include <sys/disk.h>
+#include <dev/nand/nand_dev.h>
+#include "nandtool.h"
+
+int nand_read(struct cmd_param *params)
+{
+ struct chip_param_io chip_params;
+ int fd = -1, out_fd = -1, done = 0, ret = 0;
+ char *dev, *out;
+ int pos, count, mult, block_size;
+ uint8_t *buf = NULL;
+
+ if (!(dev = param_get_string(params, "dev"))) {
+ fprintf(stderr, "You must specify 'dev' parameter\n");
+ return (1);
+ }
+
+ if ((out = param_get_string(params, "out"))) {
+ out_fd = open(out, O_WRONLY|O_CREAT);
+ if (out_fd == -1) {
+ perrorf("Cannot open %s for writing", out);
+ return (1);
+ }
+ }
+
+ if ((fd = g_open(dev, 1)) == -1) {
+ perrorf("Cannot open %s", dev);
+ ret = 1;
+ goto out;
+ }
+
+ if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) {
+ perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)");
+ ret = 1;
+ goto out;
+ }
+
+ block_size = chip_params.page_size * chip_params.pages_per_block;
+
+ if (param_has_value(params, "page")) {
+ pos = chip_params.page_size * param_get_int(params, "page");
+ mult = chip_params.page_size;
+ } else if (param_has_value(params, "block")) {
+ pos = block_size * param_get_int(params, "block");
+ mult = block_size;
+ } else if (param_has_value(params, "pos")) {
+ pos = param_get_int(params, "pos");
+ mult = 1;
+ if (pos % chip_params.page_size) {
+ fprintf(stderr, "Position must be page-size aligned!\n");
+ ret = 1;
+ goto out;
+ }
+ } else {
+ fprintf(stderr, "You must specify one of: 'block', 'page',"
+ "'pos' arguments\n");
+ ret = 1;
+ goto out;
+ }
+
+ if (!(param_has_value(params, "count")))
+ count = mult;
+ else
+ count = param_get_int(params, "count") * mult;
+
+ if (!(buf = malloc(chip_params.page_size))) {
+ perrorf("Cannot allocate buffer [size %x]",
+ chip_params.page_size);
+ ret = 1;
+ goto out;
+ }
+
+ lseek(fd, pos, SEEK_SET);
+
+ while (done < count) {
+ if ((ret = read(fd, buf, chip_params.page_size)) !=
+ (int32_t)chip_params.page_size) {
+ perrorf("read error (read %d bytes)", ret);
+ goto out;
+ }
+
+ if (out_fd != -1) {
+ done += ret;
+ if ((ret = write(out_fd, buf, chip_params.page_size)) !=
+ (int32_t)chip_params.page_size) {
+ perrorf("write error (written %d bytes)", ret);
+ ret = 1;
+ goto out;
+ }
+ } else {
+ hexdumpoffset(buf, chip_params.page_size, done);
+ done += ret;
+ }
+ }
+
+out:
+ g_close(fd);
+ if (out_fd != -1)
+ close(out_fd);
+ if (buf)
+ free(buf);
+
+ return (ret);
+}
+
diff --git a/usr.sbin/nandtool/nand_readoob.c b/usr.sbin/nandtool/nand_readoob.c
new file mode 100644
index 000000000000..37fd14b9ff03
--- /dev/null
+++ b/usr.sbin/nandtool/nand_readoob.c
@@ -0,0 +1,111 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <libgeom.h>
+#include <sys/types.h>
+#include <sys/disk.h>
+#include <dev/nand/nand_dev.h>
+#include "nandtool.h"
+
+int nand_read_oob(struct cmd_param *params)
+{
+ struct chip_param_io chip_params;
+ struct nand_oob_rw req;
+ char *dev, *out;
+ int fd = -1, fd_out = -1, ret = 0;
+ int page;
+ uint8_t *buf = NULL;
+
+ if ((page = param_get_int(params, "page")) < 0) {
+ fprintf(stderr, "You must supply valid 'page' argument.\n");
+ return (1);
+ }
+
+ if (!(dev = param_get_string(params, "dev"))) {
+ fprintf(stderr, "You must supply 'dev' argument.\n");
+ return (1);
+ }
+
+ if ((out = param_get_string(params, "out"))) {
+ if ((fd_out = open(out, O_WRONLY | O_CREAT)) == -1) {
+ perrorf("Cannot open %s", out);
+ ret = 1;
+ goto out;
+ }
+ }
+
+ if ((fd = g_open(dev, 1)) == -1) {
+ perrorf("Cannot open %s", dev);
+ ret = 1;
+ goto out;
+ }
+
+ if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) {
+ perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)");
+ ret = 1;
+ goto out;
+ }
+
+ buf = malloc(chip_params.oob_size);
+ if (buf == NULL) {
+ perrorf("Cannot allocate %d bytes\n", chip_params.oob_size);
+ ret = 1;
+ goto out;
+ }
+
+ req.page = page;
+ req.len = chip_params.oob_size;
+ req.data = buf;
+
+ if (ioctl(fd, NAND_IO_OOB_READ, &req) == -1) {
+ perrorf("Cannot read OOB from %s", dev);
+ ret = 1;
+ goto out;
+ }
+
+ if (fd_out != -1)
+ write(fd_out, buf, chip_params.oob_size);
+ else
+ hexdump(buf, chip_params.oob_size);
+
+out:
+ close(fd_out);
+
+ if (fd != -1)
+ g_close(fd);
+ if (buf)
+ free(buf);
+
+ return (ret);
+}
+
diff --git a/usr.sbin/nandtool/nand_write.c b/usr.sbin/nandtool/nand_write.c
new file mode 100644
index 000000000000..157c6aa94f8f
--- /dev/null
+++ b/usr.sbin/nandtool/nand_write.c
@@ -0,0 +1,143 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <libgeom.h>
+#include <sys/disk.h>
+#include <dev/nand/nand_dev.h>
+#include "nandtool.h"
+
+int nand_write(struct cmd_param *params)
+{
+ struct chip_param_io chip_params;
+ char *dev, *file;
+ int in_fd = -1, ret = 0, done = 0;
+ int fd, block_size, mult, pos, count;
+ uint8_t *buf = NULL;
+
+ if (!(dev = param_get_string(params, "dev"))) {
+ fprintf(stderr, "Please supply 'dev' argument.\n");
+ return (1);
+ }
+
+ if (!(file = param_get_string(params, "in"))) {
+ fprintf(stderr, "Please supply 'in' argument.\n");
+ return (1);
+ }
+
+ if ((fd = g_open(dev, 1)) == -1) {
+ perrorf("Cannot open %s", dev);
+ return (1);
+ }
+
+ if ((in_fd = open(file, O_RDONLY)) == -1) {
+ perrorf("Cannot open file %s", file);
+ ret = 1;
+ goto out;
+ }
+
+ if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) {
+ perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)");
+ ret = 1;
+ goto out;
+ }
+
+ block_size = chip_params.page_size * chip_params.pages_per_block;
+
+ if (param_has_value(params, "page")) {
+ pos = chip_params.page_size * param_get_int(params, "page");
+ mult = chip_params.page_size;
+ } else if (param_has_value(params, "block")) {
+ pos = block_size * param_get_int(params, "block");
+ mult = block_size;
+ } else if (param_has_value(params, "pos")) {
+ pos = param_get_int(params, "pos");
+ mult = 1;
+ if (pos % chip_params.page_size) {
+ fprintf(stderr, "Position must be page-size "
+ "aligned!\n");
+ ret = 1;
+ goto out;
+ }
+ } else {
+ fprintf(stderr, "You must specify one of: 'block', 'page',"
+ "'pos' arguments\n");
+ ret = 1;
+ goto out;
+ }
+
+ if (!(param_has_value(params, "count")))
+ count = mult;
+ else
+ count = param_get_int(params, "count") * mult;
+
+ if (!(buf = malloc(chip_params.page_size))) {
+ perrorf("Cannot allocate buffer [size %x]",
+ chip_params.page_size);
+ ret = 1;
+ goto out;
+ }
+
+ lseek(fd, pos, SEEK_SET);
+
+ while (done < count) {
+ if ((ret = read(in_fd, buf, chip_params.page_size)) !=
+ (int32_t)chip_params.page_size) {
+ if (ret > 0) {
+ /* End of file ahead, truncate here */
+ break;
+ } else {
+ perrorf("Cannot read from %s", file);
+ ret = 1;
+ goto out;
+ }
+ }
+
+ if ((ret = write(fd, buf, chip_params.page_size)) !=
+ (int32_t)chip_params.page_size) {
+ ret = 1;
+ goto out;
+ }
+
+ done += ret;
+ }
+
+out:
+ g_close(fd);
+ if (in_fd != -1)
+ close(in_fd);
+ if (buf)
+ free(buf);
+
+ return (ret);
+}
+
diff --git a/usr.sbin/nandtool/nand_writeoob.c b/usr.sbin/nandtool/nand_writeoob.c
new file mode 100644
index 000000000000..53cb32a0e08f
--- /dev/null
+++ b/usr.sbin/nandtool/nand_writeoob.c
@@ -0,0 +1,113 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <libgeom.h>
+#include <sys/disk.h>
+#include <dev/nand/nand_dev.h>
+#include "nandtool.h"
+
+int nand_write_oob(struct cmd_param *params)
+{
+ struct chip_param_io chip_params;
+ struct nand_oob_rw req;
+ char *dev, *in;
+ int fd = -1, fd_in = -1, ret = 0;
+ uint8_t *buf = NULL;
+ int page;
+
+ if (!(dev = param_get_string(params, "dev"))) {
+ fprintf(stderr, "Please supply valid 'dev' parameter.\n");
+ return (1);
+ }
+
+ if (!(in = param_get_string(params, "in"))) {
+ fprintf(stderr, "Please supply valid 'in' parameter.\n");
+ return (1);
+ }
+
+ if ((page = param_get_int(params, "page")) < 0) {
+ fprintf(stderr, "Please supply valid 'page' parameter.\n");
+ return (1);
+ }
+
+ if ((fd = g_open(dev, 1)) == -1) {
+ perrorf("Cannot open %s", dev);
+ return (1);
+ }
+
+ if ((fd_in = open(in, O_RDONLY)) == -1) {
+ perrorf("Cannot open %s", in);
+ ret = 1;
+ goto out;
+ }
+
+ if (ioctl(fd, NAND_IO_GET_CHIP_PARAM, &chip_params) == -1) {
+ perrorf("Cannot ioctl(NAND_IO_GET_CHIP_PARAM)");
+ ret = 1;
+ goto out;
+ }
+
+ buf = malloc(chip_params.oob_size);
+ if (buf == NULL) {
+ perrorf("Cannot allocate %d bytes\n", chip_params.oob_size);
+ ret = 1;
+ goto out;
+ }
+
+ if (read(fd_in, buf, chip_params.oob_size) == -1) {
+ perrorf("Cannot read from %s", in);
+ ret = 1;
+ goto out;
+ }
+
+ req.page = page;
+ req.len = chip_params.oob_size;
+ req.data = buf;
+
+ if (ioctl(fd, NAND_IO_OOB_PROG, &req) == -1) {
+ perrorf("Cannot write OOB to %s", dev);
+ ret = 1;
+ goto out;
+ }
+
+out:
+ g_close(fd);
+ if (fd_in != -1)
+ close(fd_in);
+ if (buf)
+ free(buf);
+
+ return (ret);
+}
+
+
diff --git a/usr.sbin/nandtool/nandtool.8 b/usr.sbin/nandtool/nandtool.8
new file mode 100644
index 000000000000..8f8f1deffddf
--- /dev/null
+++ b/usr.sbin/nandtool/nandtool.8
@@ -0,0 +1,184 @@
+.\" Copyright (c) 2010 Semihalf
+.\" 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 April 10, 2012
+.Dt NANDTOOL 8
+.Os
+.Sh NAME
+.Nm nandtool
+.Nd NAND devices swiss army knife
+.Sh SYNOPSIS
+.Nm
+.Ar command
+.Op Ar operands ...
+.Sh DESCRIPTION
+The
+.Nm
+utility can be used to perform various operations on
+.Xr gnand 4
+devices (read, write, erase,
+read and write OOB area and to get info about NAND flash chip).
+.Pp
+The following commands are available:
+.Bl -tag -width ".Cm of Ns = Ns Ar file"
+.It Cm read Ns
+Read pages from NAND device.
+.It Cm write Ns
+Write pages to NAND device.
+.It Cm erase Ns
+Erase blocks.
+Requires offset aligned to block granularity.
+.It Cm info Ns
+Get information about NAND chip (page size, block size, OOB area size, chip size
+and media size)
+.It Cm readoob Ns
+Read OOB area from specified page.
+.It Cm writeoob Ns
+Write OOB area bound to specified page.
+.It Cm help Ns
+Get usage info.
+.El
+.Sh COMMAND read
+The following operands are available for
+.Nm
+.Cm read
+command:
+.Bl -tag -width ".Cm of Ns = Ns Ar file"
+.It Cm dev Ns = Ns Ar <path>
+Path to a
+.Xr gnand 4
+device node, required for all operations.
+.It Cm out Ns = Ns Ar <file>
+Output file path. If not specified, page contents
+will be dumped to stdout in format similar to
+.Xr hexdump 1
+.It Cm page Ns = Ns Ar <n>
+Offset on device, expressed as page number.
+.It Cm block Ns = Ns Ar <n>
+Offset on device, expressed as block number.
+.It Cm pos Ns = Ns Ar <n>
+Offset on device, expressed in bytes (however, must be aligned
+to page granularity).
+.It Cm count Ns = Ns Ar <n>
+Count of objects (pages, blocks, bytes).
+.El
+.Sh COMMAND readoob
+The following operands are available for
+.Nm
+.Cm readoob
+command:
+.Bl -tag -width ".Cm of Ns = Ns Ar file"
+.It Cm dev Ns = Ns Ar <path>
+Path to NAND device node.
+.It Cm page Ns = Ns Ar <n>
+Offset on device, expressed as page number.
+.It Cm out Ns = Ns Ar <file>
+Output file path, optional.
+.El
+.Sh COMMAND write
+The following operands are available for
+.Nm
+.Cm write
+command:
+.Bl -tag -width ".Cm of Ns = Ns Ar file"
+.It Cm dev Ns = Ns Ar <path>
+Path to NAND device node.
+.It Cm page Ns = Ns Ar <n>
+Offset on device, expressed as page number.
+.It Cm block Ns = Ns Ar <n>
+Offset on device, expressed as block number.
+.It Cm pos Ns = Ns Ar <n>
+Offset on device, expressed in bytes (however, must be aligned
+to page granularity).
+.It Cm in Ns = Ns Ar <file>
+Input file path.
+.El
+.Sh COMMAND writeoob
+The following operands are available for
+.Nm
+.Cm writeoob
+command:
+.Bl -tag -width ".Cm of Ns = Ns Ar file"
+.It Cm dev Ns = Ns Ar <path>
+Path to NAND device node.
+.It Cm page Ns = Ns Ar <n>
+Offset on device, expressed as page number.
+.It Cm in Ns = Ns Ar <file>
+Input file path.
+.El
+.Sh COMMAND erase
+The following operands are available for
+.Nm
+.Cm erase
+command:
+.Bl -tag -width ".Cm of Ns = Ns Ar file"
+.It Cm dev Ns = Ns Ar <path>
+Path to NAND device node.
+.It Cm page Ns = Ns Ar <n>
+Offset on device, expressed as page number.
+.It Cm block Ns = Ns Ar <n>
+Offset on device, expressed as block number.
+.It Cm pos Ns = Ns Ar <n>
+Offset on device, epressed in bytes (however, must be aligned
+to block granularity).
+.It Cm count Ns = Ns Ar <n>
+Count of objects (pages, blocks, bytes).
+.El
+.Pp
+WARNING: The only required parameter for the \fBerase\fP command is
+.Ar dev .
+When no other arguments are provided the whole device is erased!
+.Sh COMMAND info
+There is only one operand available for
+.Nm
+.Cm info
+command:
+.Bl -tag -width ".Cm of Ns = Ns Ar file"
+.It Cm dev Ns = Ns Ar <path>
+Path to NAND device node.
+.El
+.Sh COMMAND help
+There is only one operand available for
+.Nm
+.Cm help
+command:
+.Bl -tag -width ".Cm of Ns = Ns Ar file"
+.It Cm topic Ns = Ns Ar <name>
+Help topic.
+.El
+.Sh EXIT STATUS
+.Ex -std
+If the supplied argument
+.Ar dev
+points to a device node other than gnand<num> or gnand.raw<num> both
+.Nm
+.Cm readoob
+and
+.Nm
+.Cm writeoob
+return error.
+.Sh SEE ALSO
+.Xr gnand 4
diff --git a/usr.sbin/nandtool/nandtool.c b/usr.sbin/nandtool/nandtool.c
new file mode 100644
index 000000000000..bd7075b0438e
--- /dev/null
+++ b/usr.sbin/nandtool/nandtool.c
@@ -0,0 +1,283 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <sysexits.h>
+#include <libgeom.h>
+#include "nandtool.h"
+#include "usage.h"
+
+int usage(struct cmd_param *);
+
+static const struct {
+ const char *name;
+ const char *usage;
+ int (*handler)(struct cmd_param *);
+} commands[] = {
+ { "help", nand_help_usage, usage },
+ { "read", nand_read_usage, nand_read },
+ { "write", nand_write_usage, nand_write },
+ { "erase", nand_erase_usage, nand_erase },
+ { "readoob", nand_read_oob_usage, nand_read_oob },
+ { "writeoob", nand_write_oob_usage, nand_write_oob },
+ { "info", nand_info_usage, nand_info },
+ { NULL, NULL, NULL },
+};
+
+static char *
+_param_get_stringx(struct cmd_param *params, const char *name, int doexit)
+{
+ int i;
+
+ for (i = 0; params[i].name[0] != '\0'; i++) {
+ if (!strcmp(params[i].name, name))
+ return params[i].value;
+ }
+
+ if (doexit) {
+ perrorf("Missing parameter %s", name);
+ exit(1);
+ }
+ return (NULL);
+}
+
+char *
+param_get_string(struct cmd_param *params, const char *name)
+{
+
+ return (_param_get_stringx(params, name, 0));
+}
+
+static int
+_param_get_intx(struct cmd_param *params, const char *name, int doexit)
+{
+ int ret;
+ char *str = _param_get_stringx(params, name, doexit);
+
+ if (!str)
+ return (-1);
+
+ errno = 0;
+ ret = (int)strtol(str, (char **)NULL, 10);
+ if (errno) {
+ if (doexit) {
+ perrorf("Invalid value for parameter %s", name);
+ exit(1);
+ }
+ return (-1);
+ }
+
+ return (ret);
+}
+
+int
+param_get_intx(struct cmd_param *params, const char *name)
+{
+
+ return (_param_get_intx(params, name, 1));
+}
+
+int
+param_get_int(struct cmd_param *params, const char *name)
+{
+
+ return (_param_get_intx(params, name, 0));
+}
+
+int
+param_get_boolean(struct cmd_param *params, const char *name)
+{
+ char *str = param_get_string(params, name);
+
+ if (!str)
+ return (0);
+
+ if (!strcmp(str, "true") || !strcmp(str, "yes"))
+ return (1);
+
+ return (0);
+}
+
+int
+param_has_value(struct cmd_param *params, const char *name)
+{
+ int i;
+
+ for (i = 0; params[i].name[0] != '\0'; i++) {
+ if (!strcmp(params[i].name, name))
+ return (1);
+ }
+
+ return (0);
+}
+
+int
+param_get_count(struct cmd_param *params)
+{
+ int i;
+
+ for (i = 0; params[i].name[0] != '\0'; i++);
+
+ return (i);
+}
+
+void
+hexdumpoffset(uint8_t *buf, int length, int off)
+{
+ int i, j;
+ for (i = 0; i < length; i += 16) {
+ printf("%08x: ", off + i);
+
+ for (j = 0; j < 16; j++)
+ printf("%02x ", buf[i+j]);
+
+ printf("| ");
+
+ for (j = 0; j < 16; j++) {
+ printf("%c", isalnum(buf[i+j])
+ ? buf[i+j]
+ : '.');
+ }
+
+ printf("\n");
+ }
+}
+
+void
+hexdump(uint8_t *buf, int length)
+{
+
+ hexdumpoffset(buf, length, 0);
+}
+
+void *
+xmalloc(size_t len)
+{
+ void *ret = malloc(len);
+
+ if (!ret) {
+ fprintf(stderr, "Cannot allocate buffer of %zd bytes. "
+ "Exiting.\n", len);
+ exit(EX_OSERR);
+ }
+
+ return (ret);
+}
+
+void
+perrorf(const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ vfprintf(stderr, format, args);
+ va_end(args);
+ fprintf(stderr, ": %s\n", strerror(errno));
+}
+
+int
+usage(struct cmd_param *params)
+{
+ int i;
+
+ if (!params || !param_get_count(params)) {
+ fprintf(stderr, "Usage: nandtool <command> [arguments...]\n");
+ fprintf(stderr, "Arguments are in form 'name=value'.\n\n");
+ fprintf(stderr, "Available commands:\n");
+
+ for (i = 0; commands[i].name != NULL; i++)
+ fprintf(stderr, "\t%s\n", commands[i].name);
+
+ fprintf(stderr, "\n");
+ fprintf(stderr, "For information about particular command, "
+ "type:\n");
+ fprintf(stderr, "'nandtool help topic=<command>'\n");
+ } else if (param_has_value(params, "topic")) {
+ for (i = 0; commands[i].name != NULL; i++) {
+ if (!strcmp(param_get_string(params, "topic"),
+ commands[i].name)) {
+ fprintf(stderr, commands[i].usage, "nandtool");
+ return (0);
+ }
+ }
+
+ fprintf(stderr, "No such command\n");
+ return (EX_SOFTWARE);
+ } else {
+ fprintf(stderr, "Wrong arguments given. Try: 'nandtool help'\n");
+ }
+
+ return (EX_USAGE);
+}
+
+int
+main(int argc, const char *argv[])
+{
+ struct cmd_param *params;
+ int i, ret, idx;
+
+ if (argc < 2) {
+ usage(NULL);
+ return (0);
+ }
+
+ params = malloc(sizeof(struct cmd_param) * (argc - 1));
+
+ for (i = 2, idx = 0; i < argc; i++, idx++) {
+ if (sscanf(argv[i], "%63[^=]=%63s", params[idx].name,
+ params[idx].value) < 2) {
+ fprintf(stderr, "Syntax error in argument %d. "
+ "Argument should be in form 'name=value'.\n", i);
+ free(params);
+ return (-1);
+ }
+ }
+
+ params[idx].name[0] = '\0';
+ params[idx].value[0] = '\0';
+
+ for (i = 0; commands[i].name != NULL; i++) {
+ if (!strcmp(commands[i].name, argv[1])) {
+ ret = commands[i].handler(params);
+ free(params);
+ return (ret);
+ }
+ }
+
+ free(params);
+ fprintf(stderr, "Unknown command. Try '%s help'\n", argv[0]);
+
+ return (-1);
+}
+
diff --git a/usr.sbin/nandtool/nandtool.h b/usr.sbin/nandtool/nandtool.h
new file mode 100644
index 000000000000..639f95e47d10
--- /dev/null
+++ b/usr.sbin/nandtool/nandtool.h
@@ -0,0 +1,57 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 __UTILS_H
+#define __UTILS_H
+
+struct cmd_param
+{
+ char name[64];
+ char value[64];
+};
+
+char *param_get_string(struct cmd_param *, const char *);
+int param_get_int(struct cmd_param *, const char *);
+int param_get_intx(struct cmd_param *, const char *);
+int param_get_boolean(struct cmd_param *, const char *);
+int param_has_value(struct cmd_param *, const char *);
+int param_get_count(struct cmd_param *);
+void perrorf(const char *, ...);
+void hexdumpoffset(uint8_t *, int, int);
+void hexdump(uint8_t *, int);
+void *xmalloc(size_t);
+
+/* Command handlers */
+int nand_read(struct cmd_param *);
+int nand_write(struct cmd_param *);
+int nand_read_oob(struct cmd_param *);
+int nand_write_oob(struct cmd_param *);
+int nand_erase(struct cmd_param *);
+int nand_info(struct cmd_param *);
+
+#endif /* __UTILS_H */
diff --git a/usr.sbin/nandtool/usage.h b/usr.sbin/nandtool/usage.h
new file mode 100644
index 000000000000..74e8543b25c2
--- /dev/null
+++ b/usr.sbin/nandtool/usage.h
@@ -0,0 +1,112 @@
+/*-
+ * Copyright (c) 2010-2012 Semihalf.
+ * 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 __USAGE_H
+#define __USAGE_H
+
+static const char nand_help_usage[] =
+ "Usage: %s help topic=<cmd>\n"
+ "\n"
+ "Arguments:\n"
+ "\tcmd\t- [help|read|write|erase|readoob|writeoob|info]\n"
+ "\n";
+
+static const char nand_read_usage[] =
+ "Usage: %s read dev=<gnand_device> (block|page|pos)=n [count=n]\n"
+ "\n"
+ "Arguments:\n"
+ "\tdev\t- path to gnand device node\n"
+ "\tblock\t- starting block or\n"
+ "\tpage\t- starting page or\n"
+ "\tpos\t- starting position (in bytes, must be page-aligned)\n"
+ "\tout\t- output file (hexdump to stdout if not supplied)\n"
+ "\n"
+ "Note that you can only specify only one of: 'block', 'page', 'pos'\n"
+ "parameters at once. 'count' parameter is meaningful in terms of used\n"
+ "unit (page, block or byte).\n";
+
+static const char nand_write_usage[] =
+ "Usage: %s write dev=<gnand_device> in=<file> (block|page|pos)=n [count=n]\n"
+ "\n"
+ "Arguments:\n"
+ "\tdev\t- path to gnand device node\n"
+ "\tin\t- path to input file which be writed to gnand\n"
+ "\tblock\t- starting block or\n"
+ "\tpage\t- starting page or\n"
+ "\tpos\t- starting position (in bytes, must be page-aligned)\n"
+ "\tcount\t- byte/page/block count\n"
+ "\n"
+ "";
+
+static const char nand_erase_usage[] =
+ "Usage: %s erase dev=<gnand_device> (block|page|pos)=n [count=n]\n"
+ "\n"
+ "Arguments:\n"
+ "\tdev\t- path to gnand device node\n"
+ "\tblock\t- starting block or\n"
+ "\tpage\t- starting page or\n"
+ "\tpos\t- starting position (in bytes, muse be block-aligned)\n"
+ "\tcount\t- byte/page/block count\n"
+ "\n"
+ "NOTE: position and count for erase operation MUST be block-aligned\n";
+
+static const char nand_read_oob_usage[] =
+ "Usage: %s readoob dev=<gnand_device> page=n [out=file] [count=n]\n"
+ "\n"
+ "Arguments:\n"
+ "\tdev\t- path to gnand device node\n"
+ "\tpage\t- page (page) number\n"
+ "\tout\t- outut file (hexdump to stdout if not supplied)\n"
+ "\tcount\t- page count (default is 1)\n"
+ "\n"
+ "If you supply count parameter with value other than 1, data will be\n"
+ "read from subsequent page's OOB areas\n";
+
+static const char nand_write_oob_usage[] =
+ "Usage: %s writeoob dev=<gnand_device> in=<file> page=n [count=n]\n"
+ "\n"
+ "\tdev\t- path to gnand device node\n"
+ "\tin\t- path to file containing data which will be written\n"
+ "\tpage\t- page (page) number\n"
+ "\n"
+ "If you supply count parameter with value other than 1, data will be\n"
+ "written to subsequent page's OOB areas\n";
+
+static const char nand_info_usage[] =
+ "Usage: %s info dev=<gnand_device>\n"
+ "\n"
+ "Arguments:\n"
+ "\tdev\t- path to gnand device node\n";
+
+static const char nand_stats_usage[] =
+ "Usage: %s stats dev=<gnand_device> (page|block)=<n>\n"
+ "\n"
+ "Arguments:\n"
+ "\tdev\t- path to gnand device node\n";
+
+#endif /* __USAGE_H */
diff --git a/usr.sbin/newsyslog/newsyslog.c b/usr.sbin/newsyslog/newsyslog.c
index 7ebdddcf2a22..227ea004d9f5 100644
--- a/usr.sbin/newsyslog/newsyslog.c
+++ b/usr.sbin/newsyslog/newsyslog.c
@@ -1451,7 +1451,7 @@ static void
delete_oldest_timelog(const struct conf_entry *ent, const char *archive_dir)
{
char *logfname, *s, *dir, errbuf[80];
- int dirfd, i, logcnt, max_logcnt, valid;
+ int dir_fd, i, logcnt, max_logcnt, valid;
struct oldlog_entry *oldlogs;
size_t logfname_len;
struct dirent *dp;
@@ -1486,7 +1486,7 @@ delete_oldest_timelog(const struct conf_entry *ent, const char *archive_dir)
/* First we create a 'list' of all archived logfiles */
if ((dirp = opendir(dir)) == NULL)
err(1, "Cannot open log directory '%s'", dir);
- dirfd = dirfd(dirp);
+ dir_fd = dirfd(dirp);
while ((dp = readdir(dirp)) != NULL) {
if (dp->d_type != DT_REG)
continue;
@@ -1578,7 +1578,7 @@ delete_oldest_timelog(const struct conf_entry *ent, const char *archive_dir)
if (noaction)
printf("\trm -f %s/%s\n", dir,
oldlogs[i].fname);
- else if (unlinkat(dirfd, oldlogs[i].fname, 0) != 0) {
+ else if (unlinkat(dir_fd, oldlogs[i].fname, 0) != 0) {
snprintf(errbuf, sizeof(errbuf),
"Could not delet old logfile '%s'",
oldlogs[i].fname);
diff --git a/usr.sbin/pkg/pkg.c b/usr.sbin/pkg/pkg.c
index e0bc4b3b5d44..b6c0207ed061 100644
--- a/usr.sbin/pkg/pkg.c
+++ b/usr.sbin/pkg/pkg.c
@@ -371,7 +371,7 @@ bootstrap_pkg(void)
config = fopen(conf, "w+");
if (config == NULL)
goto cleanup;
- fprintf(config, "packagesite: %s", url);
+ fprintf(config, "packagesite: %s\n", url);
fclose(config);
}
diff --git a/usr.sbin/pkg_install/lib/exec.c b/usr.sbin/pkg_install/lib/exec.c
index 364737633c99..c95ac47fa9dc 100644
--- a/usr.sbin/pkg_install/lib/exec.c
+++ b/usr.sbin/pkg_install/lib/exec.c
@@ -47,6 +47,7 @@ vsystem(const char *fmt, ...)
va_start(args, fmt);
if (vsnprintf(cmd, maxargs, fmt, args) > maxargs) {
warnx("vsystem args are too long");
+ va_end(args);
return 1;
}
#ifdef DEBUG
@@ -82,6 +83,7 @@ vpipe(const char *fmt, ...)
va_start(args, fmt);
if (vsnprintf(cmd, maxargs, fmt, args) > maxargs) {
warnx("vsystem args are too long");
+ va_end(args);
return NULL;
}
#ifdef DEBUG
diff --git a/usr.sbin/pkg_install/lib/msg.c b/usr.sbin/pkg_install/lib/msg.c
index 2b0ee07f1cd4..57c84d321aff 100644
--- a/usr.sbin/pkg_install/lib/msg.c
+++ b/usr.sbin/pkg_install/lib/msg.c
@@ -71,5 +71,6 @@ y_or_n(Boolean def, const char *msg, ...)
ch = (def) ? 'Y' : 'N';
}
fclose(tty) ;
+ va_end(args);
return (ch == 'Y') ? TRUE : FALSE;
}
diff --git a/usr.sbin/ppp/throughput.c b/usr.sbin/ppp/throughput.c
index 7ecba8ce6705..a3e948adda9f 100644
--- a/usr.sbin/ppp/throughput.c
+++ b/usr.sbin/ppp/throughput.c
@@ -115,14 +115,14 @@ throughput_disp(struct pppThroughput *t, struct prompt *prompt)
prompt_Printf(prompt, "%llu packets in, %llu packets out\n",
t->PacketsIn, t->PacketsOut);
if (t->rolling) {
- prompt_Printf(prompt, " overall %6qu bytes/sec\n",
+ prompt_Printf(prompt, " overall %6llu bytes/sec\n",
(t->OctetsIn + t->OctetsOut) / divisor);
- prompt_Printf(prompt, " %s %6qu bytes/sec in, %6qu bytes/sec out "
+ prompt_Printf(prompt, " %s %6llu bytes/sec in, %6llu bytes/sec out "
"(over the last %d secs)\n",
t->downtime ? "average " : "currently",
t->in.OctetsPerSecond, t->out.OctetsPerSecond,
secs_up > t->SamplePeriod ? t->SamplePeriod : secs_up);
- prompt_Printf(prompt, " peak %6qu bytes/sec on %s",
+ prompt_Printf(prompt, " peak %6llu bytes/sec on %s",
t->BestOctetsPerSecond, ctime(&t->BestOctetsPerSecondTime));
} else
prompt_Printf(prompt, "Overall %llu bytes/sec\n",
@@ -266,7 +266,7 @@ throughput_clear(struct pppThroughput *t, int clear_type, struct prompt *prompt)
if ((divisor = throughput_uptime(t)) == 0)
divisor = 1;
- prompt_Printf(prompt, "overall cleared (was %6qu bytes/sec)\n",
+ prompt_Printf(prompt, "overall cleared (was %6llu bytes/sec)\n",
(t->OctetsIn + t->OctetsOut) / divisor);
t->OctetsIn = t->OctetsOut = t->PacketsIn = t->PacketsOut = 0;
t->downtime = 0;
@@ -274,8 +274,8 @@ throughput_clear(struct pppThroughput *t, int clear_type, struct prompt *prompt)
}
if (clear_type & THROUGHPUT_CURRENT) {
- prompt_Printf(prompt, "current cleared (was %6qu bytes/sec in,"
- " %6qu bytes/sec out)\n",
+ prompt_Printf(prompt, "current cleared (was %6llu bytes/sec in,"
+ " %6llu bytes/sec out)\n",
t->in.OctetsPerSecond, t->out.OctetsPerSecond);
t->in.OctetsPerSecond = t->out.OctetsPerSecond = 0;
}
@@ -287,7 +287,7 @@ throughput_clear(struct pppThroughput *t, int clear_type, struct prompt *prompt)
last = time_buf + strlen(time_buf);
if (last > time_buf && *--last == '\n')
*last = '\0';
- prompt_Printf(prompt, "peak cleared (was %6qu bytes/sec on %s)\n",
+ prompt_Printf(prompt, "peak cleared (was %6llu bytes/sec on %s)\n",
t->BestOctetsPerSecond, time_buf);
t->BestOctetsPerSecond = 0;
time(&t->BestOctetsPerSecondTime);
diff --git a/usr.sbin/rpc.lockd/kern.c b/usr.sbin/rpc.lockd/kern.c
index e0f63ab34421..4775ab6af351 100644
--- a/usr.sbin/rpc.lockd/kern.c
+++ b/usr.sbin/rpc.lockd/kern.c
@@ -595,7 +595,7 @@ show(LOCKD_MSG *mp)
syslog(LOG_DEBUG, "fh_len %d, fh %s\n", (int)mp->lm_fh_len, buf);
/* Show flock structure. */
- syslog(LOG_DEBUG, "start %qu; len %qu; pid %lu; type %d; whence %d\n",
+ syslog(LOG_DEBUG, "start %llu; len %llu; pid %lu; type %d; whence %d\n",
(unsigned long long)mp->lm_fl.l_start,
(unsigned long long)mp->lm_fl.l_len, (u_long)mp->lm_fl.l_pid,
mp->lm_fl.l_type, mp->lm_fl.l_whence);
diff --git a/usr.sbin/rtadvctl/rtadvctl.8 b/usr.sbin/rtadvctl/rtadvctl.8
index f779c987e156..be3eefea7c54 100644
--- a/usr.sbin/rtadvctl/rtadvctl.8
+++ b/usr.sbin/rtadvctl/rtadvctl.8
@@ -31,7 +31,8 @@
.Sh NAME
.Nm rtadvctl
.Nd control program for
-.Xr rtadvd 8 daemon
+.Xr rtadvd 8
+daemon
.Sh SYNOPSIS
.Nm
.Op Fl v
diff --git a/usr.sbin/rtadvd/rtadvd.8 b/usr.sbin/rtadvd/rtadvd.8
index 4b74eb4ed0c3..ad39887dbc7f 100644
--- a/usr.sbin/rtadvd/rtadvd.8
+++ b/usr.sbin/rtadvd/rtadvd.8
@@ -140,7 +140,7 @@ option, which enables routing renumbering protocol support.
.It Fl p
Specify an alternative file in which to store the process ID.
The default is
-.Pa /var/run/rtadvd.pid.
+.Pa /var/run/rtadvd.pid .
.It Fl R
Accept router renumbering requests.
If you enable it, certain IPsec setup is suggested for security reasons.
diff --git a/usr.sbin/smbmsg/smbmsg.8 b/usr.sbin/smbmsg/smbmsg.8
index 1a616f751f41..39caa6745b83 100644
--- a/usr.sbin/smbmsg/smbmsg.8
+++ b/usr.sbin/smbmsg/smbmsg.8
@@ -70,7 +70,7 @@ and writeable, respectively.
The only valid additional option for this modus of operation (besides
the
.Fl p
-option that choses the modus) is
+option that chooses the modus) is
.Fl f Ar dev .
See below for a description.
.Pp
diff --git a/usr.sbin/tcpdump/tcpdump/Makefile b/usr.sbin/tcpdump/tcpdump/Makefile
index eef16c72f251..84fa1f631f81 100644
--- a/usr.sbin/tcpdump/tcpdump/Makefile
+++ b/usr.sbin/tcpdump/tcpdump/Makefile
@@ -8,10 +8,11 @@ TCPDUMP_DISTDIR?= ${.CURDIR}/../../../contrib/tcpdump
PROG= tcpdump
SRCS = addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c \
- ipproto.c nlpid.c l2vpn.c machdep.c parsenfsfh.c \
- print-802_11.c print-ap1394.c print-ah.c print-arcnet.c \
+ ipproto.c nlpid.c l2vpn.c machdep.c parsenfsfh.c in_cksum.c \
+ print-802_11.c print-802_15_4.c print-ap1394.c print-ah.c print-arcnet.c \
print-aodv.c print-arp.c print-ascii.c print-atalk.c print-atm.c \
- print-beep.c print-bfd.c print-bgp.c print-bootp.c print-cdp.c \
+ print-beep.c print-bfd.c print-bgp.c print-bootp.c print-bt.c \
+ print-carp.c print-cdp.c \
print-cfm.c print-chdlc.c print-cip.c print-cnfp.c print-dccp.c \
print-decnet.c print-domain.c print-dtp.c print-dvmrp.c print-enc.c \
print-egp.c print-eap.c print-eigrp.c \
@@ -24,8 +25,9 @@ SRCS = addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c \
print-lwapp.c print-lwres.c print-mobile.c print-mpls.c print-msdp.c \
print-mpcp.c \
print-nfs.c print-ntp.c print-null.c print-olsr.c print-ospf.c \
- print-pgm.c print-pim.c print-ppp.c print-pppoe.c \
+ print-pgm.c print-pim.c print-ppi.c print-ppp.c print-pppoe.c \
print-pptp.c print-radius.c print-raw.c print-rip.c \
+ print-rpki-rtr.c \
print-rrcp.c print-rsvp.c print-rx.c print-sctp.c print-sflow.c \
print-sip.c print-sl.c print-sll.c \
print-slow.c print-snmp.c print-stp.c print-sunatm.c print-sunrpc.c \
@@ -43,7 +45,8 @@ CFLAGS+= -D_U_="__attribute__((unused))"
.if ${MK_INET6_SUPPORT} != "no"
SRCS+= print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c \
- print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c
+ print-icmp6.c print-babel.c print-frag6.c print-rt6.c print-ospf6.c \
+ print-dhcp6.c
CFLAGS+= -DINET6
.endif
.if ${MACHINE_CPUARCH} != "i386"
diff --git a/usr.sbin/tcpdump/tcpdump/config.h b/usr.sbin/tcpdump/tcpdump/config.h
index 16374051c503..b13055dcfc9a 100644
--- a/usr.sbin/tcpdump/tcpdump/config.h
+++ b/usr.sbin/tcpdump/tcpdump/config.h
@@ -13,12 +13,6 @@
/* Define if you enable support for the libsmi. */
/* #undef LIBSMI */
-/* define if you have struct __res_state_ext */
-/* #undef HAVE_RES_STATE_EXT */
-
-/* define if your struct __res_state has the nsort member */
-/* #undef HAVE_NEW_RES_STATE */
-
/* define if you have the addrinfo function. */
#define HAVE_ADDRINFO 1
@@ -28,15 +22,6 @@
/* define ifyou have the h_errno variable. */
#define HAVE_H_ERRNO 1
-/* define if IN6ADDRSZ is defined (XXX not used!) */
-#define HAVE_IN6ADDRSZ 1
-
-/* define if INADDRSZ is defined (XXX not used!) */
-#define HAVE_INADDRSZ 1
-
-/* define if RES_USE_INET6 is defined */
-#define HAVE_RES_USE_INET6 1
-
/* define if you have struct sockaddr_storage */
#define HAVE_SOCKADDR_STORAGE 1
@@ -73,9 +58,6 @@
/* define if you have getrpcbynumber() */
#define HAVE_GETRPCBYNUMBER 1
-/* AIX hack. */
-/* #undef _SUN */
-
/* Workaround for missing 64-bit formats */
/* #undef PRId64 */
/* #undef PRIo64 */
@@ -113,6 +95,9 @@
/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
/* Define to 1 if you have the `getnameinfo' function. */
#define HAVE_GETNAMEINFO 1
@@ -173,6 +158,9 @@
/* Define to 1 if you have the `pcap_lib_version' function. */
#define HAVE_PCAP_LIB_VERSION 1
+/* Define to 1 if you have the `pcap_set_tstamp_type' function. */
+#define HAVE_PCAP_SET_TSTAMP_TYPE 1
+
/* Define to 1 if you have the <pcap/usb.h> header file. */
/* #undef HAVE_PCAP_USB_H */
@@ -182,6 +170,9 @@
/* Define to 1 if you have the <rpc/rpcent.h> header file. */
#define HAVE_RPC_RPCENT_H 1
+/* Define to 1 if you have the <rpc/rpc.h> header file. */
+#define HAVE_RPC_RPC_H 1
+
/* Define to 1 if you have the `setlinebuf' function. */
#define HAVE_SETLINEBUF 1
@@ -245,6 +236,9 @@
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
+/* Define to 1 if you have the `vfork' function. */
+#define HAVE_VFORK 1
+
/* Define to 1 if you have the `vfprintf' function. */
#define HAVE_VFPRINTF 1
@@ -284,21 +278,6 @@
/* return value of signal handlers */
#define RETSIGVAL
-/* The size of `char', as computed by sizeof. */
-#undef SIZEOF_CHAR
-
-/* The size of `int', as computed by sizeof. */
-#undef SIZEOF_INT
-
-/* The size of `long', as computed by sizeof. */
-#undef SIZEOF_LONG
-
-/* The size of `long long', as computed by sizeof. */
-#undef SIZEOF_LONG_LONG
-
-/* The size of `short', as computed by sizeof. */
-#undef SIZEOF_SHORT
-
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
@@ -311,6 +290,9 @@
/* needed on HP-UX */
/* #undef _HPUX_SOURCE */
+/* define on AIX to get certain functions */
+/* #undef _SUN */
+
/* define if your compiler allows __attribute__((format)) to be applied to
function pointers */
#define __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS 1
diff --git a/usr.sbin/tcpdump/tcpdump/tcpdump.1 b/usr.sbin/tcpdump/tcpdump/tcpdump.1
index 61f5727ef71c..5034bb1be529 100644
--- a/usr.sbin/tcpdump/tcpdump/tcpdump.1
+++ b/usr.sbin/tcpdump/tcpdump/tcpdump.1
@@ -30,7 +30,7 @@ tcpdump \- dump traffic on a network
.na
.B tcpdump
[
-.B \-AbdDefIKlLnNOpqRStuUvxX
+.B \-AbdDefhHIJKlLnNOpqRStuUvxX
] [
.B \-B
.I buffer_size
@@ -57,6 +57,10 @@ tcpdump \- dump traffic on a network
.I interface
]
[
+.B \-j
+.I tstamp_type
+]
+[
.B \-m
.I module
]
@@ -272,7 +276,7 @@ The default is \fBdes-cbc\fP.
The ability to decrypt packets is only present if \fItcpdump\fP was compiled
with cryptography enabled.
.IP
-\fIsecret\fP is the ASCII text for ESP secret key.
+\fIsecret\fP is the ASCII text for ESP secret key.
If preceded by 0x, then a hex value will be read.
.IP
The option assumes RFC2406 ESP, not RFC1827 ESP.
@@ -284,7 +288,7 @@ you make it visible to others, via
and other occasions.
.IP
In addition to the above syntax, the syntax \fIfile name\fP may be used
-to have tcpdump read the provided file in. The file is opened upon
+to have tcpdump read the provided file in. The file is opened upon
receiving the first ESP packet, so any special permissions that tcpdump
may have been given should already have been given up.
.TP
@@ -320,6 +324,13 @@ If used in conjunction with the
.B \-C
option, filenames will take the form of `\fIfile\fP<count>'.
.TP
+.B \-h
+Print the tcpdump and libpcap version strings, print a usage message,
+and exit.
+.TP
+.B \-H
+Attempt to detect 802.11s draft mesh headers.
+.TP
.B \-i
Listen on \fIinterface\fP.
If unspecified, \fItcpdump\fP searches the system interface list for the
@@ -360,6 +371,18 @@ monitor mode will be shown; if
is specified, only those link-layer types available when in monitor mode
will be shown.
.TP
+.B \-j
+Set the time stamp type for the capture to \fItstamp_type\fP. The names
+to use for the time stamp types are given in
+.BR pcap-tstamp-type (7);
+not all the types listed there will necessarily be valid for any given
+interface.
+.TP
+.B \-J
+List the supported time stamp types for the interface and exit. If the
+time stamp type cannot be set for the interface, no time stamp types are
+listed.
+.TP
.B \-K
Don't attempt to verify IP, TCP, or UDP checksums. This is useful for
interfaces that perform some or all of those checksum calculation in
@@ -540,16 +563,16 @@ See
for a description of the file format.
.TP
.B \-W
-Used in conjunction with the
-.B \-C
+Used in conjunction with the
+.B \-C
option, this will limit the number
of files created to the specified number, and begin overwriting files
-from the beginning, thus creating a 'rotating' buffer.
+from the beginning, thus creating a 'rotating' buffer.
In addition, it will name
the files with enough leading 0s to support the maximum number of
files, allowing them to sort correctly.
.IP
-Used in conjunction with the
+Used in conjunction with the
.B \-G
option, this will limit the number of rotated dump files that get
created, exiting with status 0 when reaching the limit. If used with
@@ -559,7 +582,7 @@ as well, the behavior will result in cyclical files per timeslice.
.B \-x
When parsing and printing,
in addition to printing the headers of each packet, print the data of
-each packet (minus its link level header) in hex.
+each packet (minus its link level header) in hex.
The smaller of the entire packet or
.I snaplen
bytes will be printed. Note that this is the entire link-layer
@@ -616,7 +639,10 @@ savefile name as the only argument, make the flags & arguments arrangements
and execute the command that you want.
.TP
.B \-Z
-Drops privileges (if root) and changes user ID to
+If
+.I tcpdump
+is running as root, after opening the capture device or input savefile,
+but before opening any savefiles for output, change the user ID to
.I user
and the group ID to the primary group of
.IR user .
@@ -872,8 +898,8 @@ The general format of a tcp protocol line is:
\fISrc\fP and \fIdst\fP are the source and destination IP
addresses and ports.
\fIFlags\fP are some combination of S (SYN),
-F (FIN), P (PUSH), R (RST), W (ECN CWR) or E (ECN-Echo), or a single
-`.' (no flags).
+F (FIN), P (PUSH), R (RST), U (URG), W (ECN CWR), E (ECN-Echo) or
+`.' (ACK), or `none' if no flags are set.
\fIData-seqno\fP describes the portion of sequence space covered
by the data in this packet (see example below).
\fIAck\fP is sequence number of the next data expected the other
@@ -920,8 +946,7 @@ bytes and there was a max-segment-size option requesting an mss of
Csam replies with a similar packet except it includes a piggy-backed
ack for rtsg's SYN.
Rtsg then acks csam's SYN.
-The `.' means no
-flags were set.
+The `.' means the ACK flag was set.
The packet contained no data so there is no data sequence number.
Note that the ack sequence
number is a small integer (1).
@@ -1156,7 +1181,7 @@ tcp-push, tcp-act, tcp-urg.
.PP
This can be demonstrated as:
.RS
-.B
+.B
tcpdump -i xl0 'tcp[tcpflags] & tcp-push != 0'
.RE
.PP
@@ -1267,7 +1292,6 @@ RA, \fInot\fP set) and `|' (truncated message, TC, set).
If the
`question' section doesn't contain exactly one entry, `[\fIn\fPq]'
is printed.
-
.HD
SMB/CIFS decoding
.LP
@@ -1275,19 +1299,18 @@ SMB/CIFS decoding
on UDP/137, UDP/138 and TCP/139.
Some primitive decoding of IPX and
NetBEUI SMB data is also done.
-
+.LP
By default a fairly minimal decode is done, with a much more detailed
decode done if -v is used.
Be warned that with -v a single SMB packet
may take up a page or more, so only use -v if you really want all the
gory details.
-
-For information on SMB packet formats and what all te fields mean see
+.LP
+For information on SMB packet formats and what all the fields mean see
www.cifs.org or the pub/samba/specs/ directory on your favorite
samba.org mirror site.
The SMB patches were written by Andrew Tridgell
(tridge@samba.org).
-
.HD
NFS Requests and Replies
.LP
@@ -1413,11 +1436,11 @@ not be useful to people who are not familiar with the workings of
AFS and RX.
.LP
If the -v (verbose) flag is given twice, acknowledgement packets and
-additional header information is printed, such as the RX call ID,
+additional header information is printed, such as the the RX call ID,
call number, sequence number, serial number, and the RX packet flags.
.LP
If the -v flag is given twice, additional information is printed,
-such as the RX call ID, serial number, and the RX packet flags.
+such as the the RX call ID, serial number, and the RX packet flags.
The MTU negotiation information is also printed from RX ack packets.
.LP
If the -v flag is given three times, the security index and service id
@@ -1640,7 +1663,7 @@ Ethernet interface removed the packet from the wire and when the kernel
serviced the `new packet' interrupt.
.SH "SEE ALSO"
stty(1), pcap(3PCAP), bpf(4), nit(4P), pcap-savefile(5),
-pcap-filter(7)
+pcap-filter(7), pcap-tstamp-type(7)
.SH AUTHORS
The original authors are:
.LP
diff --git a/usr.sbin/utx/utx.8 b/usr.sbin/utx/utx.8
index 6154dca3bef7..c3e71e259dfa 100644
--- a/usr.sbin/utx/utx.8
+++ b/usr.sbin/utx/utx.8
@@ -94,7 +94,7 @@ database, its use is limited to the super-user.
.Sh SEE ALSO
.Xr getent 1 ,
.Xr w 1 ,
-.Xr pututxline 3 .
+.Xr pututxline 3
.Sh HISTORY
The
.Nm
diff --git a/usr.sbin/wpa/hostapd/hostapd.conf.5 b/usr.sbin/wpa/hostapd/hostapd.conf.5
index b2e0132fc2ce..08a04fe9282c 100644
--- a/usr.sbin/wpa/hostapd/hostapd.conf.5
+++ b/usr.sbin/wpa/hostapd/hostapd.conf.5
@@ -172,8 +172,8 @@ will be converted to PSK.
This conversion uses SSID so the PSK changes when ASCII passphrase is
used and the SSID is changed.
.It Va wpa_psk_file
-Optionally, WPA PSKs can be read from a separate text file (containing a
-list of PSK,MAC address pairs).
+Optionally, WPA PSKs can be read from a separate text file containing a
+list of PSK and MAC address pairs.
.It Va wpa_key_mgmt
Set of accepted key management algorithms (WPA-PSK, WPA-EAP, or both).
.It Va wpa_pairwise
diff --git a/usr.sbin/wpa/ndis_events/ndis_events.8 b/usr.sbin/wpa/ndis_events/ndis_events.8
index eacb017a0cb4..9cc2bcdca94e 100644
--- a/usr.sbin/wpa/ndis_events/ndis_events.8
+++ b/usr.sbin/wpa/ndis_events/ndis_events.8
@@ -71,7 +71,7 @@ When it detects an event that was generated by an
interface, it transmits it via UDP packet on the loopback interface,
where
.Xr wpa_supplicant 8
-is presumeably listening.
+is presumably listening.
The standard
.Xr wpa_supplicant 8
distribution includes its own version of this utility for use with